<?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>215076</bug_id>
          
          <creation_ts>2020-08-03 01:15:59 -0700</creation_ts>
          <short_desc>Remove libwebrtc protobuf copy</short_desc>
          <delta_ts>2020-08-03 14:05:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>annulen</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1677257</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-08-03 01:15:59 -0700</bug_when>
    <thetext>Remove libwebrtc protobuf copy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677258</commentid>
    <comment_count>1</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-08-03 01:18:09 -0700</bug_when>
    <thetext>&lt;rdar://problem/66291604&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677260</commentid>
    <comment_count>2</comment_count>
      <attachid>405818</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-08-03 01:24:35 -0700</bug_when>
    <thetext>Created attachment 405818
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677422</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-03 14:05:40 -0700</bug_when>
    <thetext>Committed r265219: &lt;https://trac.webkit.org/changeset/265219&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 405818.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405818</attachid>
            <date>2020-08-03 01:24:35 -0700</date>
            <delta_ts>2020-08-03 14:05:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215076-20200803102017.patch</filename>
            <type>text/plain</type>
            <size>22189774</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA1MmFjNGEzMzBjYTZkMjEwZjE2NTFmMmMzOGM0NDJmNzIwYWE3MzkzLi5jOTkx
MzFlMDRmNjUzYzhhZWI2NGI5NTMzMDFmMDAyZTQzMGM0NzNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wOC0wMyAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGxpYndlYnJ0YyBwcm90
b2J1ZiBjb3B5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTUwNzYKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNjYyOTE2MDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIG5vdCB1c2VkIGN1cnJl
bnRseSBhbmQgY29udGFpbnMgY29kZSB0aGF0IGlzIG5vdCB1cCB0byBkYXRlLgorCisgICAgICAg
ICogU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmOiBSZW1vdmVkLgorCiAyMDIwLTA3LTI5ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBvcnQgSERSIGRl
Y29kZSBpbiBTVyBWUDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvLnRyYXZpcy55bWwgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmLy50cmF2aXMueW1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2YzODUxYmMyMTZhNzcyMDFiNGIxMDNhNTBiOWM3
MThmMjk1MzYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
LnRyYXZpcy55bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi1zdWRvOiByZXF1aXJl
ZAotIyBOb3RlOiB0cmF2aXMgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgbGlzdGluZyBtb3Jl
IHRoYW4gb25lIGxhbmd1YWdlIHNvCi0jIHRoaXMgY2hlYXRzIGFuZCBjbGFpbXMgdG8gb25seSBi
ZSBjcHAuICBJZiB0aGV5IGFkZCBtdWx0aXBsZSBsYW5ndWFnZQotIyBzdXBwb3J0LCB0aGlzIHNo
b3VsZCBwcm9iYWJseSBnZXQgdXBkYXRlZCB0byBpbnN0YWxsIHN0ZXBzIGFuZC9vcgotIyBydm0v
Z2VtZmlsZS9qZGsvZXRjLiBlbnRyaWVzIHJhdGhlciB0aGFuIG1hbnVhbGx5IGRvaW5nIHRoZSB3
b3JrLgotbGFuZ3VhZ2U6IGNwcAotb3M6Ci0gIC0gbGludXgKLSAgLSBvc3gKLSMgVGhlIE9iamVj
dGl2ZSBDIGJ1aWxkIG5lZWRzIFhjb2RlIDcuMCBvciBsYXRlci4KLW9zeF9pbWFnZTogeGNvZGU3
LjIKLXNjcmlwdDoKLSAgLSAuL3Rlc3RzLnNoICRDT05GSUcKLWVudjoKLSAgLSBDT05GSUc9Y3Bw
Ci0gIC0gQ09ORklHPWNwcF9kaXN0Y2hlY2sKLSAgLSBDT05GSUc9Y3NoYXJwCi0gIC0gQ09ORklH
PWdvbGFuZwotICAtIENPTkZJRz1qYXZhX2pkazYKLSAgLSBDT05GSUc9amF2YV9qZGs3Ci0gIC0g
Q09ORklHPWphdmFfb3JhY2xlNwotICAtIENPTkZJRz1qYXZhbmFub19qZGs2Ci0gIC0gQ09ORklH
PWphdmFuYW5vX2pkazcKLSAgLSBDT05GSUc9amF2YW5hbm9fb3JhY2xlNwotICAtIENPTkZJRz1q
YXZhc2NyaXB0Ci0gIC0gQ09ORklHPXB5dGhvbgotICAtIENPTkZJRz1weXRob25fY3BwCi0gIC0g
Q09ORklHPXJ1YnkxOQotICAtIENPTkZJRz1ydWJ5MjAKLSAgLSBDT05GSUc9cnVieTIxCi0gIC0g
Q09ORklHPXJ1YnkyMgotICAtIENPTkZJRz1qcnVieQotbWF0cml4OgotICBleGNsdWRlOgotICAg
ICMgSXQncyBub250cml2aWFsIHRvIHByb2dyYW1tYXRpY2FsbHkgaW5zdGFsbCBhIG5ldyBKREsg
ZnJvbSB0aGUgY29tbWFuZAotICAgICMgbGluZSBvbiBPUyBYLCBzbyB3ZSByZWx5IG9uIHRlc3Rp
bmcgb24gTGludXggZm9yIEphdmEgY29kZS4KLSAgICAtIG9zOiBvc3gKLSAgICAgIGVudjogQ09O
RklHPWphdmFfamRrNgotICAgIC0gb3M6IG9zeAotICAgICAgZW52OiBDT05GSUc9amF2YV9qZGs3
Ci0gICAgLSBvczogb3N4Ci0gICAgICBlbnY6IENPTkZJRz1qYXZhX29yYWNsZTcKLSAgICAtIG9z
OiBvc3gKLSAgICAgIGVudjogQ09ORklHPWphdmFuYW5vX2pkazYKLSAgICAtIG9zOiBvc3gKLSAg
ICAgIGVudjogQ09ORklHPWphdmFuYW5vX2pkazcKLSAgICAtIG9zOiBvc3gKLSAgICAgIGVudjog
Q09ORklHPWphdmFuYW5vX29yYWNsZTcKLSAgICAjIFJlcXVpcmVzIGluc3RhbGxpbmcgbW9ubywg
Y3VycmVudGx5IHRyYXZpcy5zaCBpcyBkb2luZyB0aGF0IHdpdGggYXB0LWdldAotICAgICMgd2hp
Y2ggZG9lc24ndCB3b3JrIG9uIE9TIFguCi0gICAgLSBvczogb3N4Ci0gICAgICBlbnY6IENPTkZJ
Rz1jc2hhcnAKLSAgICAjIFJlcXVpcmVzIGluc3RhbGxpbmcgZ29sYW5nLCBjdXJyZW50bHkgdHJh
dmlzLnNoIGlzIGRvaW5nIHRoYXQgd2l0aCBhcHQtZ2V0Ci0gICAgIyB3aGljaCBkb2Vzbid0IHdv
cmsgb24gT1MgWC4KLSAgICAtIG9zOiBvc3gKLSAgICAgIGVudjogQ09ORklHPWdvbGFuZwotICAj
IEFkZCBpbnRvIHRoZSBtYXRyaXggT1MgWCB0ZXN0cyBvZiBPYmplY3RpdmUgQyAobmVlZHMgWGNv
ZGUsIHNvIGl0IHdvbid0Ci0gICMgd29yayBvbiBvdGhlciBwbGF0Zm9ybXMpLiBUaGVzZSBhcmUg
c3BsaXQgc28gaXQgZG9lc24ndCB0YWtlIGFzIGxvbmcgdG8gcnVuLgotICBpbmNsdWRlOgotICAg
IC0gb3M6IG9zeAotICAgICAgZW52OiBDT05GSUc9b2JqZWN0aXZlY19pb3MKLSAgICAtIG9zOiBv
c3gKLSAgICAgIGVudjogQ09ORklHPW9iamVjdGl2ZWNfb3N4Ci0gIGFsbG93X2ZhaWx1cmVzOgot
ICAgICMgVGhlc2UgY3VycmVudGx5IGRvIG5vdCB3b3JrIG9uIE9TIFggYnV0IGFyZSBiZWluZyB3
b3JrZWQgb24gYnkgQGhhYmVybWFuLgotICAgIC0gb3M6IG9zeAotICAgICAgZW52OiBDT05GSUc9
cnVieTIyCi0gICAgLSBvczogb3N4Ci0gICAgICBlbnY6IENPTkZJRz1qcnVieQotICAgICMgaHR0
cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi9pc3N1ZXMvMTI1MyAtIFN0YXJ0ZWQgZmFp
bGluZyB3aGVuCi0gICAgIyB3ZSBtb3ZlZCB0byBhbiBPUyBYIGltYWdlIHRoYXQgaXMgMTAuMTEu
Ci0gICAgLSBvczogb3N4Ci0gICAgICBlbnY6IENPTkZJRz1weXRob25fY3BwCi0gICAgIyB4Y3Rv
b2wgMC4yLjggc2VlbXMgdG8gaGF2ZSBhIGJ1ZyB3aGVyZSBpdCByYW5kb21seSBraWxscyB0ZXN0
cyBzYXlpbmcKLSAgICAjIHRoZXkgZmFpbGVkLgotICAgICMgICBodHRwczovL2dpdGh1Yi5jb20v
ZmFjZWJvb2sveGN0b29sL2lzc3Vlcy82MTkKLSAgICAjICAgaHR0cHM6Ly9naXRodWIuY29tL2dv
b2dsZS9wcm90b2J1Zi9pc3N1ZXMvMTIzMgotICAgICMgdHJhdmlzIHVwZGF0ZWQgdGhlaXIgaW1h
Z2VzIHRvIGluY2x1ZGUgMC4yLjg6Ci0gICAgIyAgIGh0dHBzOi8vYmxvZy50cmF2aXMtY2kuY29t
LzIwMTYtMDMtMjMteGNvZGUtaW1hZ2UtdXBkYXRlcwotICAgICMgTWFyayB0aGUgaU9TIHRlc3Qg
YXMgZmxha2V5IHNvIHRoZXNlIGZhaWx1cmVzIGRvbid0IHR1cm4gdGhpbmdzIHJlZC4KLSAgICAt
IG9zOiBvc3gKLSAgICAgIGVudjogQ09ORklHPW9iamVjdGl2ZWNfaW9zCi1ub3RpZmljYXRpb25z
OgotICBlbWFpbDogZmFsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvQlVJTEQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL0JVSUxECmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4YjEwNDZiOTBkNWM5MDE0ZjU5NDk0M2MwZWQzNjg2NmM0ZGI2YWZl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvQlVJTEQKKysr
IC9kZXYvbnVsbApAQCAtMSw3MDkgKzAsMCBAQAotIyBCYXplbCAoaHR0cDovL2JhemVsLmlvLykg
QlVJTEQgZmlsZSBmb3IgUHJvdG9idWYuCi0KLWxpY2Vuc2VzKFsibm90aWNlIl0pCi0KLSMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCi0jIFByb3RvYnVmIFJ1bnRpbWUgTGlicmFyeQotIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKLQotQ09QVFMgPSBbCi0gICAgIi1ESEFWRV9QVEhSRUFEIiwKLSAgICAi
LVdhbGwiLAotICAgICItV3dyaXRlLXN0cmluZ3MiLAotICAgICItV292ZXJsb2FkZWQtdmlydHVh
bCIsCi0gICAgIi1Xbm8tc2lnbi1jb21wYXJlIiwKLSAgICAiLVduby1lcnJvcj11bnVzZWQtZnVu
Y3Rpb24iLAotXQotCi1jb25maWdfc2V0dGluZygKLSAgICBuYW1lID0gImFuZHJvaWQiLAotICAg
IHZhbHVlcyA9IHsKLSAgICAgICAgImNyb3NzdG9vbF90b3AiOiAiLy9leHRlcm5hbDphbmRyb2lk
L2Nyb3NzdG9vbCIsCi0gICAgfSwKLSkKLQotIyBBbmRyb2lkIGJ1aWxkcyBkbyBub3QgbmVlZCB0
byBsaW5rIGluIGEgc2VwYXJhdGUgcHRocmVhZCBsaWJyYXJ5LgotTElOS19PUFRTID0gc2VsZWN0
KHsKLSAgICAiOmFuZHJvaWQiOiBbXSwKLSAgICAiLy9jb25kaXRpb25zOmRlZmF1bHQiOiBbIi1s
cHRocmVhZCJdLAotfSkKLQotbG9hZCgKLSAgICAicHJvdG9idWYiLAotICAgICJjY19wcm90b19s
aWJyYXJ5IiwKLSAgICAicHlfcHJvdG9fbGlicmFyeSIsCi0gICAgImludGVybmFsX2dlbl93ZWxs
X2tub3duX3Byb3Rvc19qYXZhIiwKLSAgICAiaW50ZXJuYWxfcHJvdG9idWZfcHlfdGVzdHMiLAot
KQotCi1jb25maWdfc2V0dGluZygKLSAgICBuYW1lID0gImlvc19hcm12NyIsCi0gICAgdmFsdWVz
ID0gewotICAgICAgICAiaW9zX2NwdSI6ICJhcm12NyIsCi0gICAgfSwKLSkKLQotY29uZmlnX3Nl
dHRpbmcoCi0gICAgbmFtZSA9ICJpb3NfYXJtdjdzIiwKLSAgICB2YWx1ZXMgPSB7Ci0gICAgICAg
ICJpb3NfY3B1IjogImFybXY3cyIsCi0gICAgfSwKLSkKLQotY29uZmlnX3NldHRpbmcoCi0gICAg
bmFtZSA9ICJpb3NfYXJtNjQiLAotICAgIHZhbHVlcyA9IHsKLSAgICAgICAgImlvc19jcHUiOiAi
YXJtNjQiLAotICAgIH0sCi0pCi0KLUlPU19BUk1fQ09QVFMgPSBDT1BUUyArIFsKLSAgICAiLURP
U19JT1MiLAotICAgICItbWlwaG9uZW9zLXZlcnNpb24tbWluPTcuMCIsCi0gICAgIi1hcmNoIGFy
bXY3IiwKLSAgICAiLWFyY2ggYXJtdjdzIiwKLSAgICAiLWFyY2ggYXJtNjQiLAotICAgICItRF9f
dGhyZWFkPSIsCi0gICAgIi1pc3lzcm9vdCAvQXBwbGljYXRpb25zL1hjb2RlLmFwcC9Db250ZW50
cy9EZXZlbG9wZXIvUGxhdGZvcm1zL2lQaG9uZU9TLnBsYXRmb3JtL0RldmVsb3Blci9TREtzL2lQ
aG9uZU9TOS4yLnNkay8iLAotXQotCi1jY19saWJyYXJ5KAotICAgIG5hbWUgPSAicHJvdG9idWZf
bGl0ZSIsCi0gICAgc3JjcyA9IFsKLSAgICAgICAgIyBBVVRPR0VOKHByb3RvYnVmX2xpdGVfc3Jj
cykKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvYXJlbmEuY2MiLAotICAgICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2V4dGVuc2lvbl9zZXQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9n
ZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYv
aW8vY29kZWRfc3RyZWFtLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvaW8vemVy
b19jb3B5X3N0cmVhbS5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9f
Y29weV9zdHJlYW1faW1wbF9saXRlLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYv
bWVzc2FnZV9saXRlLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRf
ZmllbGQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNf
aW50ZXJuYWxzX3g4Nl9nY2MuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVi
cy9hdG9taWNvcHNfaW50ZXJuYWxzX3g4Nl9tc3ZjLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2NvbW1vbi5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2ludDEyOC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL29uY2UuY2Mi
LAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXMuY2MiLAotICAgICAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXNvci5jYyIsCi0gICAgICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3BpZWNlLmNjIiwKLSAgICAgICAgInNyYy9nb29n
bGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncHJpbnRmLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RydWN0dXJhbGx5X3ZhbGlkLmNjIiwKLSAgICAgICAgInNyYy9nb29n
bGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3RpbWUuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zv
cm1hdF9saXRlLmNjIiwKLSAgICBdLAotICAgIGhkcnMgPSBnbG9iKFsic3JjL2dvb2dsZS9wcm90
b2J1Zi8qKi8qLmgiXSksCi0gICAgY29wdHMgPSBzZWxlY3QoewotICAgICAgICAiOmlvc19hcm12
NyI6IElPU19BUk1fQ09QVFMsCi0gICAgICAgICI6aW9zX2FybXY3cyI6IElPU19BUk1fQ09QVFMs
Ci0gICAgICAgICI6aW9zX2FybTY0IjogSU9TX0FSTV9DT1BUUywKLSAgICAgICAgIi8vY29uZGl0
aW9uczpkZWZhdWx0IjogQ09QVFMsCi0gICAgfSksCi0gICAgaW5jbHVkZXMgPSBbInNyYy8iXSwK
LSAgICBsaW5rb3B0cyA9IExJTktfT1BUUywKLSAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxp
dHk6cHVibGljIl0sCi0pCi0KLWNjX2xpYnJhcnkoCi0gICAgbmFtZSA9ICJwcm90b2J1ZiIsCi0g
ICAgc3JjcyA9IFsKLSAgICAgICAgIyBBVVRPR0VOKHByb3RvYnVmX3NyY3MpCi0gICAgICAgICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL2FueS5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVm
L2FueS5wYi5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2FwaS5wYi5jYyIsCi0g
ICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ltcG9ydGVyLmNjIiwKLSAgICAg
ICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGFyc2VyLmNjIiwKLSAgICAgICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2Rlc2NyaXB0b3IucGIuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9k
ZXNjcmlwdG9yX2RhdGFiYXNlLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvZHVy
YXRpb24ucGIuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9keW5hbWljX21lc3Nh
Z2UuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wYi5jYyIsCi0gICAg
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2V4dGVuc2lvbl9zZXRfaGVhdnkuY2MiLAotICAgICAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNrLnBiLmNjIiwKLSAgICAgICAgInNyYy9n
b29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5jYyIsCi0gICAgICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL2d6aXBfc3RyZWFtLmNjIiwKLSAgICAgICAgInNyYy9n
b29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL2lvL3N0cnRvZC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3Rva2Vu
aXplci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJl
YW1faW1wbC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZC5jYyIs
Ci0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuY2MiLAotICAgICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX29wcy5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL3NlcnZpY2UuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zb3Vy
Y2VfY29udGV4dC5wYi5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5w
Yi5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hdGhsaW1pdHMuY2Mi
LAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmNjIiwKLSAg
ICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvdGV4dF9mb3JtYXQuY2MiLAotICAgICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucGIuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9w
cm90b2J1Zi90eXBlLnBiLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvdW5rbm93
bl9maWVsZF9zZXQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxk
X2NvbXBhcmF0b3IuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxk
X21hc2tfdXRpbC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJu
YWwvZGF0YXBpZWNlLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRl
cm5hbC9kZWZhdWx0X3ZhbHVlX29iamVjdHdyaXRlci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZXJyb3JfbGlzdGVuZXIuY2MiLAotICAgICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2ZpZWxkX21hc2tfdXRpbGl0eS5jYyIsCi0g
ICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9lc2NhcGluZy5j
YyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9vYmpl
Y3R3cml0ZXIuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFs
L2pzb25fc3RyZWFtX3BhcnNlci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvb2JqZWN0X3dyaXRlci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9fd3JpdGVyLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3Rzb3VyY2UuY2MiLAotICAg
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVj
dHdyaXRlci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwv
dHlwZV9pbmZvLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5h
bC90eXBlX2luZm9fdGVzdF9oZWxwZXIuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1
Zi91dGlsL2ludGVybmFsL3V0aWxpdHkuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1
Zi91dGlsL2pzb25fdXRpbC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
bWVzc2FnZV9kaWZmZXJlbmNlci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvdGltZV91dGlsLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90eXBl
X3Jlc29sdmVyX3V0aWwuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zv
cm1hdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnBiLmNjIiwK
LSAgICBdLAotICAgIGhkcnMgPSBnbG9iKFsic3JjLyoqLyouaCJdKSwKLSAgICBjb3B0cyA9IHNl
bGVjdCh7Ci0gICAgICAgICI6aW9zX2FybXY3IjogSU9TX0FSTV9DT1BUUywKLSAgICAgICAgIjpp
b3NfYXJtdjdzIjogSU9TX0FSTV9DT1BUUywKLSAgICAgICAgIjppb3NfYXJtNjQiOiBJT1NfQVJN
X0NPUFRTLAotICAgICAgICAiLy9jb25kaXRpb25zOmRlZmF1bHQiOiBDT1BUUywKLSAgICB9KSwK
LSAgICBpbmNsdWRlcyA9IFsic3JjLyJdLAotICAgIGxpbmtvcHRzID0gTElOS19PUFRTLAotICAg
IHZpc2liaWxpdHkgPSBbIi8vdmlzaWJpbGl0eTpwdWJsaWMiXSwKLSAgICBkZXBzID0gWyI6cHJv
dG9idWZfbGl0ZSJdLAotKQotCi1vYmpjX2xpYnJhcnkoCi0gICAgbmFtZSA9ICJwcm90b2J1Zl9v
YmpjIiwKLSAgICBoZHJzID0gWyJvYmplY3RpdmVjL0dQQlByb3RvY29sQnVmZmVycy5oIl0sCi0g
ICAgaW5jbHVkZXMgPSBbIm9iamVjdGl2ZWMiXSwKLSAgICBub25fYXJjX3NyY3MgPSBbIm9iamVj
dGl2ZWMvR1BCUHJvdG9jb2xCdWZmZXJzLm0iXSwKLSAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2li
aWxpdHk6cHVibGljIl0sCi0pCi0KLVJFTEFUSVZFX1dFTExfS05PV05fUFJPVE9TID0gWwotICAg
ICMgQVVUT0dFTih3ZWxsX2tub3duX3Byb3RvcykKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL2FueS5w
cm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8iLAotICAgICJnb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvcGx1Z2luLnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL2Rlc2Ny
aXB0b3IucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8iLAotICAg
ICJnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvZmll
bGRfbWFzay5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wcm90
byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8iLAotICAgICJnb29nbGUvcHJv
dG9idWYvdGltZXN0YW1wLnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3R5cGUucHJvdG8i
LAotICAgICJnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8iLAotXQotCi1XRUxMX0tOT1dO
X1BST1RPUyA9IFsic3JjLyIgKyBzIGZvciBzIGluIFJFTEFUSVZFX1dFTExfS05PV05fUFJPVE9T
XQotCi1maWxlZ3JvdXAoCi0gICAgbmFtZSA9ICJ3ZWxsX2tub3duX3Byb3RvcyIsCi0gICAgc3Jj
cyA9IFdFTExfS05PV05fUFJPVE9TLAotICAgIHZpc2liaWxpdHkgPSBbIi8vdmlzaWJpbGl0eTpw
dWJsaWMiXSwKLSkKLQotY2NfcHJvdG9fbGlicmFyeSgKLSAgICBuYW1lID0gImNjX3drdF9wcm90
b3MiLAotICAgIHNyY3MgPSBXRUxMX0tOT1dOX1BST1RPUywKLSAgICBpbmNsdWRlID0gInNyYyIs
Ci0gICAgZGVmYXVsdF9ydW50aW1lID0gIjpwcm90b2J1ZiIsCi0gICAgaW50ZXJuYWxfYm9vdHN0
cmFwX2hhY2sgPSAxLAotICAgIHByb3RvYyA9ICI6cHJvdG9jIiwKLSAgICB2aXNpYmlsaXR5ID0g
WyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCi0pCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0j
IFByb3RvY29sIEJ1ZmZlcnMgQ29tcGlsZXIKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWNj
X2xpYnJhcnkoCi0gICAgbmFtZSA9ICJwcm90b2NfbGliIiwKLSAgICBzcmNzID0gWwotICAgICAg
ICAjIEFVVE9HRU4ocHJvdG9jX2xpYl9zcmNzKQotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2UuY2MiLAotICAgICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW0uY2MiLAotICAgICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW1fZmllbGQuY2MiLAotICAgICAgICAi
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2V4dGVuc2lvbi5jYyIsCi0gICAg
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZmllbGQuY2MiLAotICAg
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpbGUuY2MiLAotICAg
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2dlbmVyYXRvci5jYyIs
Ci0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfaGVscGVycy5j
YyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfbWFwX2Zp
ZWxkLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9t
ZXNzYWdlLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2Nw
cF9tZXNzYWdlX2ZpZWxkLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvY3BwL2NwcF9wcmltaXRpdmVfZmllbGQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jcHAvY3BwX3NlcnZpY2UuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3N0cmluZ19maWVsZC5jYyIsCi0gICAgICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZG9jX2NvbW1lbnQuY2MiLAot
ICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW0u
Y2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJw
X2VudW1fZmllbGQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
c2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2dlbmVyYXRvci5jYyIsCi0gICAgICAgICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfaGVscGVycy5jYyIsCi0gICAgICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfbWFwX2ZpZWxkLmNj
IiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9t
ZXNzYWdlLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJw
L2NzaGFycF9tZXNzYWdlX2ZpZWxkLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3NoYXJwL2NzaGFycF9wcmltaXRpdmVfZmllbGQuY2MiLAotICAgICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlZmxlY3Rpb25fY2xhc3Mu
Y2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJw
X3JlcGVhdGVkX2VudW1fZmllbGQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX21lc3NhZ2VfZmllbGQuY2MiLAotICAgICAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX3By
aW1pdGl2ZV9maWVsZC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NzaGFycC9jc2hhcnBfc291cmNlX2dlbmVyYXRvcl9iYXNlLmNjIiwKLSAgICAgICAgInNyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF93cmFwcGVyX2ZpZWxkLmNjIiwK
LSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2NvbnRleHQu
Y2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9j
X2NvbW1lbnQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfZW51bS5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9lbnVtX2ZpZWxkLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX2VudW1fZmllbGRfbGl0ZS5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2xpdGUuY2MiLAotICAgICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZXh0ZW5zaW9uLmNjIiwKLSAgICAg
ICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2V4dGVuc2lvbl9saXRl
LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2Zp
ZWxkLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZh
X2ZpbGUuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfZ2VuZXJhdG9yLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX2dlbmVyYXRvcl9mYWN0b3J5LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuY2MiLAotICAgICAgICAic3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkLmNjIiwKLSAg
ICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2xhenlfbWVzc2Fn
ZV9maWVsZF9saXRlLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX21hcF9maWVsZC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmEvamF2YV9tYXBfZmllbGRfbGl0ZS5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlLmNjIiwKLSAgICAgICAgInNyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfYnVpbGRlci5jYyIsCi0g
ICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2J1
aWxkZXJfbGl0ZS5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9tZXNzYWdlX2ZpZWxkLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfZmllbGRfbGl0ZS5jYyIsCi0gICAgICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2xpdGUuY2MiLAotICAg
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZl
ci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9w
cmltaXRpdmVfZmllbGQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfcHJpbWl0aXZlX2ZpZWxkX2xpdGUuY2MiLAotICAgICAgICAic3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2VydmljZS5jYyIsCi0gICAgICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zaGFyZWRfY29kZV9nZW5lcmF0b3Iu
Y2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc3Ry
aW5nX2ZpZWxkLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2
YS9qYXZhX3N0cmluZ19maWVsZF9saXRlLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZW51bS5jYyIsCi0gICAgICAgICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2VudW1fZmllbGQuY2MiLAot
ICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19l
eHRlbnNpb24uY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
bmFuby9qYXZhbmFub19maWVsZC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2ZpbGUuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19nZW5lcmF0b3IuY2MiLAotICAgICAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19oZWxwZXJz
LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2
YW5hbm9fbWFwX2ZpZWxkLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvamF2YW5hbm8vamF2YW5hbm9fbWVzc2FnZS5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2VfZmllbGQuY2MiLAotICAg
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wcmlt
aXRpdmVfZmllbGQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
cy9qc19nZW5lcmF0b3IuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bS5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19lbnVtX2ZpZWxkLmNjIiwKLSAg
ICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVj
X2V4dGVuc2lvbi5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29i
amVjdGl2ZWMvb2JqZWN0aXZlY19maWVsZC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWxlLmNjIiwKLSAgICAgICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2dlbmVyYXRv
ci5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMv
b2JqZWN0aXZlY19oZWxwZXJzLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21hcF9maWVsZC5jYyIsCi0gICAgICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19tZXNzYWdlLmNj
IiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmpl
Y3RpdmVjX21lc3NhZ2VfZmllbGQuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfb25lb2YuY2MiLAotICAgICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfcHJpbWl0aXZlX2Zp
ZWxkLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmNj
IiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLnBiLmNjIiwK
LSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhvbl9nZW5l
cmF0b3IuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9ydWJ5L3J1
YnlfZ2VuZXJhdG9yLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
c3VicHJvY2Vzcy5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3pp
cF93cml0ZXIuY2MiLAotICAgIF0sCi0gICAgY29wdHMgPSBDT1BUUywKLSAgICBpbmNsdWRlcyA9
IFsic3JjLyJdLAotICAgIGxpbmtvcHRzID0gTElOS19PUFRTLAotICAgIHZpc2liaWxpdHkgPSBb
Ii8vdmlzaWJpbGl0eTpwdWJsaWMiXSwKLSAgICBkZXBzID0gWyI6cHJvdG9idWYiXSwKLSkKLQot
Y2NfYmluYXJ5KAotICAgIG5hbWUgPSAicHJvdG9jIiwKLSAgICBzcmNzID0gWyJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL21haW4uY2MiXSwKLSAgICBsaW5rb3B0cyA9IExJTktfT1BUUywK
LSAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCi0gICAgZGVwcyA9IFsi
OnByb3RvY19saWIiXSwKLSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGVzdHMKLSMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLVJFTEFUSVZFX0xJVEVfVEVTVF9QUk9UT1MgPSBbCi0g
ICAgIyBBVVRPR0VOKGxpdGVfdGVzdF9wcm90b3MpCi0gICAgImdvb2dsZS9wcm90b2J1Zi9tYXBf
bGl0ZV91bml0dGVzdC5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBv
cnRfbGl0ZS5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnRfcHVi
bGljX2xpdGUucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbGl0ZS5wcm90
byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19hcmVuYV9saXRlLnByb3RvIiwK
LV0KLQotTElURV9URVNUX1BST1RPUyA9IFsic3JjLyIgKyBzIGZvciBzIGluIFJFTEFUSVZFX0xJ
VEVfVEVTVF9QUk9UT1NdCi0KLVJFTEFUSVZFX1RFU1RfUFJPVE9TID0gWwotICAgICMgQVVUT0dF
Tih0ZXN0X3Byb3RvcykKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL2FueV90ZXN0LnByb3RvIiwKLSAg
ICAiZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfdGVzdF9iYWRfaWRlbnRpZmllcnMu
cHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF90ZXN0X2xhcmdl
X2VudW1fdmFsdWUucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvbWFwX3Byb3RvMl91bml0
dGVzdC5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi9tYXBfdW5pdHRlc3QucHJvdG8iLAot
ICAgICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9i
dWYvdW5pdHRlc3RfYXJlbmEucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rf
Y3VzdG9tX29wdGlvbnMucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZHJv
cF91bmtub3duX2ZpZWxkcy5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9l
bWJlZF9vcHRpbWl6ZV9mb3IucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rf
ZW1wdHkucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZW5vcm1vdXNfZGVz
Y3JpcHRvci5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnQucHJv
dG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpYy5wcm90byIs
Ci0gICAgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9saXRlX2ltcG9ydHNfbm9ubGl0ZS5wcm90
byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0LnByb3RvIiwKLSAgICAiZ29v
Z2xlL3Byb3RvYnVmL3VuaXR0ZXN0X21zZXRfd2lyZV9mb3JtYXQucHJvdG8iLAotICAgICJnb29n
bGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fYXJlbmEucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9i
dWYvdW5pdHRlc3Rfbm9fYXJlbmFfaW1wb3J0LnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVm
L3VuaXR0ZXN0X25vX2ZpZWxkX3ByZXNlbmNlLnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVm
L3VuaXR0ZXN0X25vX2dlbmVyaWNfc2VydmljZXMucHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9i
dWYvdW5pdHRlc3Rfb3B0aW1pemVfZm9yLnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3Vu
aXR0ZXN0X3ByZXNlcnZlX3Vua25vd25fZW51bS5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1
Zi91bml0dGVzdF9wcmVzZXJ2ZV91bmtub3duX2VudW0yLnByb3RvIiwKLSAgICAiZ29vZ2xlL3By
b3RvYnVmL3VuaXR0ZXN0X3Byb3RvM19hcmVuYS5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1
Zi91bml0dGVzdF9wcm90bzNfYXJlbmFfbGl0ZS5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1
Zi91bml0dGVzdF9wcm90bzNfbGl0ZS5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdF93ZWxsX2tub3duX3R5cGVzLnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
aW50ZXJuYWwvdGVzdGRhdGEvYW55cy5wcm90byIsCi0gICAgImdvb2dsZS9wcm90b2J1Zi91dGls
L2ludGVybmFsL3Rlc3RkYXRhL2Jvb2tzLnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvdGVzdGRhdGEvZGVmYXVsdF92YWx1ZS5wcm90byIsCi0gICAgImdvb2dsZS9w
cm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL2RlZmF1bHRfdmFsdWVfdGVzdC5wcm90byIs
Ci0gICAgImdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL2ZpZWxkX21hc2su
cHJvdG8iLAotICAgICJnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9tYXBz
LnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvb25l
b2ZzLnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEv
c3RydWN0LnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRh
dGEvdGltZXN0YW1wX2R1cmF0aW9uLnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
anNvbl9mb3JtYXRfcHJvdG8zLnByb3RvIiwKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVz
c2FnZV9kaWZmZXJlbmNlcl91bml0dGVzdC5wcm90byIsCi1dCi0KLVRFU1RfUFJPVE9TID0gWyJz
cmMvIiArIHMgZm9yIHMgaW4gUkVMQVRJVkVfVEVTVF9QUk9UT1NdCi0KLWNjX3Byb3RvX2xpYnJh
cnkoCi0gICAgbmFtZSA9ICJjY190ZXN0X3Byb3RvcyIsCi0gICAgc3JjcyA9IExJVEVfVEVTVF9Q
Uk9UT1MgKyBURVNUX1BST1RPUywKLSAgICBpbmNsdWRlID0gInNyYyIsCi0gICAgZGVmYXVsdF9y
dW50aW1lID0gIjpwcm90b2J1ZiIsCi0gICAgcHJvdG9jID0gIjpwcm90b2MiLAotICAgIGRlcHMg
PSBbIjpjY193a3RfcHJvdG9zIl0sCi0pCi0KLUNPTU1PTl9URVNUX1NSQ1MgPSBbCi0gICAgIyBB
VVRPR0VOKGNvbW1vbl90ZXN0X3NyY3MpCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvYXJlbmFf
dGVzdF91dGlsLmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfdGVzdF91dGlsLmNj
IiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0X3V0aWwuY2MiLAotICAgICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmlsZS5jYyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYv
dGVzdGluZy9nb29nbGV0ZXN0LmNjIiwKLV0KLQotY2NfYmluYXJ5KAotICAgIG5hbWUgPSAidGVz
dF9wbHVnaW4iLAotICAgIHNyY3MgPSBbCi0gICAgICAgICMgQVVUT0dFTih0ZXN0X3BsdWdpbl9z
cmNzKQotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9tb2NrX2NvZGVfZ2Vu
ZXJhdG9yLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvdGVzdF9w
bHVnaW4uY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2ZpbGUuY2Mi
LAotICAgIF0sCi0gICAgZGVwcyA9IFsKLSAgICAgICAgIjpwcm90b2J1ZiIsCi0gICAgICAgICI6
cHJvdG9jX2xpYiIsCi0gICAgICAgICIvL2V4dGVybmFsOmd0ZXN0IiwKLSAgICBdLAotKQotCi1j
Y190ZXN0KAotICAgIG5hbWUgPSAicHJvdG9idWZfdGVzdCIsCi0gICAgc3JjcyA9IENPTU1PTl9U
RVNUX1NSQ1MgKyBbCi0gICAgICAgICMgQVVUT0dFTih0ZXN0X3NyY3MpCi0gICAgICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2FueV90ZXN0LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvYXJlbmFfdW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVu
YXN0cmluZ191bml0dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2VfdW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2Jvb3RzdHJhcF91bml0dGVzdC5jYyIsCi0g
ICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfcGx1Z2luX3VuaXR0
ZXN0LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF91
bml0dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9t
ZXRhZGF0YV90ZXN0LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3NoYXJwL2NzaGFycF9nZW5lcmF0b3JfdW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9pbXBvcnRlcl91bml0dGVzdC5jYyIsCi0gICAgICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudF91bml0dGVzdC5j
YyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9wbHVn
aW5fdW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9t
b2NrX2NvZGVfZ2VuZXJhdG9yLmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2hlbHBlcnNfdW5pdHRlc3QuY2MiLAotICAgICAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wYXJzZXJfdW5pdHRlc3QuY2MiLAotICAg
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9weXRob24vcHl0aG9uX3BsdWdpbl91
bml0dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3J1Ynkv
cnVieV9nZW5lcmF0b3JfdW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1
Zi9kZXNjcmlwdG9yX2RhdGFiYXNlX3VuaXR0ZXN0LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvZGVzY3JpcHRvcl91bml0dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2Ryb3BfdW5rbm93bl9maWVsZHNfdGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZV91bml0dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL2V4dGVuc2lvbl9zZXRfdW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV9yZWZsZWN0aW9uX3VuaXR0ZXN0LmNjIiwK
LSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtX3VuaXR0ZXN0LmNj
IiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlcl91bml0dGVzdC5jYyIs
Ci0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3Rva2VuaXplcl91bml0dGVzdC5jYyIs
Ci0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1fdW5pdHRl
c3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfdGVzdC5jYyIs
Ci0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF90ZXN0LmNjIiwKLSAgICAgICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvbWVzc2FnZV91bml0dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL25vX2ZpZWxkX3ByZXNlbmNlX3Rlc3QuY2MiLAotICAgICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9wcmVzZXJ2ZV91bmtub3duX2VudW1fdGVzdC5jYyIsCi0gICAgICAgICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL3Byb3RvM19hcmVuYV9saXRlX3VuaXR0ZXN0LmNjIiwKLSAgICAg
ICAgInNyYy9nb29nbGUvcHJvdG9idWYvcHJvdG8zX2FyZW5hX3VuaXR0ZXN0LmNjIiwKLSAgICAg
ICAgInNyYy9nb29nbGUvcHJvdG9idWYvcHJvdG8zX2xpdGVfdW5pdHRlc3QuY2MiLAotICAgICAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX29wc191bml0dGVzdC5jYyIsCi0gICAg
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkX3JlZmxlY3Rpb25fdW5pdHRl
c3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZF91bml0
dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2J5dGVzdHJlYW1f
dW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb25f
dW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9pbnQxMjhf
dW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlX3Vu
aXR0ZXN0LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzX3Rl
c3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXNvcl90ZXN0
LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2VfdW5p
dHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmlu
dGZfdW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1
Y3R1cmFsbHlfdmFsaWRfdW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9zdHJ1dGlsX3VuaXR0ZXN0LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvc3R1YnMvdGVtcGxhdGVfdXRpbF91bml0dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL3N0dWJzL3RpbWVfdGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3R5cGVfdHJhaXRzX3VuaXR0ZXN0LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvdGV4dF9mb3JtYXRfdW5pdHRlc3QuY2MiLAotICAgICAgICAic3JjL2dvb2dsZS9w
cm90b2J1Zi91bmtub3duX2ZpZWxkX3NldF91bml0dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvZmllbGRfY29tcGFyYXRvcl90ZXN0LmNjIiwKLSAgICAgICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9tYXNrX3V0aWxfdGVzdC5jYyIsCi0gICAgICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmplY3R3
cml0ZXJfdGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJu
YWwvanNvbl9vYmplY3R3cml0ZXJfdGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvanNvbl9zdHJlYW1fcGFyc2VyX3Rlc3QuY2MiLAotICAgICAgICAi
c3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHNvdXJj
ZV90ZXN0LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9w
cm90b3N0cmVhbV9vYmplY3R3cml0ZXJfdGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlwZV9pbmZvX3Rlc3RfaGVscGVyLmNjIiwKLSAgICAgICAg
InNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWxfdGVzdC5jYyIsCi0gICAgICAgICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9kaWZmZXJlbmNlcl91bml0dGVzdC5jYyIs
Ci0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvdGltZV91dGlsX3Rlc3QuY2MiLAot
ICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXJfdXRpbF90ZXN0
LmNjIiwKLSAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvd2VsbF9rbm93bl90eXBlc191bml0
dGVzdC5jYyIsCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X3VuaXR0
ZXN0LmNjIiwKLSAgICBdLAotICAgIGNvcHRzID0gQ09QVFMsCi0gICAgZGF0YSA9IFsKLSAgICAg
ICAgIjp0ZXN0X3BsdWdpbiIsCi0gICAgXSArIGdsb2IoWwotICAgICAgICAic3JjL2dvb2dsZS9w
cm90b2J1Zi8qKi8qIiwKLSAgICBdKSwKLSAgICBpbmNsdWRlcyA9IFsKLSAgICAgICAgInNyYy8i
LAotICAgIF0sCi0gICAgbGlua29wdHMgPSBMSU5LX09QVFMsCi0gICAgZGVwcyA9IFsKLSAgICAg
ICAgIjpjY190ZXN0X3Byb3RvcyIsCi0gICAgICAgICI6cHJvdG9idWYiLAotICAgICAgICAiOnBy
b3RvY19saWIiLAotICAgICAgICAiLy9leHRlcm5hbDpndGVzdF9tYWluIiwKLSAgICBdLAotKQot
Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBKYXZhIHN1cHBvcnQKLSMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCi1pbnRlcm5hbF9nZW5fd2VsbF9rbm93bl9wcm90b3NfamF2YSgKLSAgICBzcmNz
ID0gV0VMTF9LTk9XTl9QUk9UT1MsCi0pCi0KLWphdmFfbGlicmFyeSgKLSAgICBuYW1lID0gInBy
b3RvYnVmX2phdmEiLAotICAgIHNyY3MgPSBnbG9iKFsKLSAgICAgICAgImphdmEvY29yZS9zcmMv
bWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvKi5qYXZhIiwKLSAgICBdKSArIFsKLSAgICAg
ICAgIjpnZW5fd2VsbF9rbm93bl9wcm90b3NfamF2YSIsCi0gICAgXSwKLSAgICB2aXNpYmlsaXR5
ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCi0pCi0KLWphdmFfbGlicmFyeSgKLSAgICBuYW1l
ID0gInByb3RvYnVmX2phdmFfdXRpbCIsCi0gICAgc3JjcyA9IGdsb2IoWwotICAgICAgICAiamF2
YS91dGlsL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsLyouamF2YSIsCi0g
ICAgXSksCi0gICAgZGVwcyA9IFsKLSAgICAgICAgInByb3RvYnVmX2phdmEiLAotICAgICAgICAi
Ly9leHRlcm5hbDpnc29uIiwKLSAgICAgICAgIi8vZXh0ZXJuYWw6Z3VhdmEiLAotICAgIF0sCi0g
ICAgdmlzaWJpbGl0eSA9IFsiLy92aXNpYmlsaXR5OnB1YmxpYyJdLAotKQotCi0jIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIwotIyBQeXRob24gc3VwcG9ydAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
LQotcHlfbGlicmFyeSgKLSAgICBuYW1lID0gInB5dGhvbl9zcmNzIiwKLSAgICBzcmNzID0gZ2xv
YigKLSAgICAgICAgWwotICAgICAgICAgICAgInB5dGhvbi9nb29nbGUvcHJvdG9idWYvKi5weSIs
Ci0gICAgICAgICAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi8qKi8qLnB5IiwKLSAgICAgICAg
XSwKLSAgICAgICAgZXhjbHVkZSA9IFsKLSAgICAgICAgICAgICJweXRob24vZ29vZ2xlL3Byb3Rv
YnVmL2ludGVybmFsLypfdGVzdC5weSIsCi0gICAgICAgICAgICAicHl0aG9uL2dvb2dsZS9wcm90
b2J1Zi9pbnRlcm5hbC90ZXN0X3V0aWwucHkiLAotICAgICAgICBdLAotICAgICksCi0gICAgc3Jj
c192ZXJzaW9uID0gIlBZMkFORDMiLAotICAgIGltcG9ydHMgPSBbInB5dGhvbiJdLAotKQotCi1j
Y19iaW5hcnkoCi0gICAgbmFtZSA9ICJpbnRlcm5hbC9fYXBpX2ltcGxlbWVudGF0aW9uLnNvIiwK
LSAgICBzcmNzID0gWyJweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2FwaV9pbXBsZW1l
bnRhdGlvbi5jYyJdLAotICAgIGNvcHRzID0gQ09QVFMgKyBbCi0gICAgICAgICItRFBZVEhPTl9Q
Uk9UTzJfQ1BQX0lNUExfVjIiLAotICAgIF0sCi0gICAgbGlua3NoYXJlZCA9IDEsCi0gICAgbGlu
a3N0YXRpYyA9IDEsCi0gICAgZGVwcyA9IHNlbGVjdCh7Ci0gICAgICAgICIvL2NvbmRpdGlvbnM6
ZGVmYXVsdCI6IFtdLAotICAgICAgICAiOnVzZV9mYXN0X2NwcF9wcm90b3MiOiBbIi8vZXh0ZXJu
YWw6cHl0aG9uX2hlYWRlcnMiXSwKLSAgICB9KSwKLSkKLQotY2NfYmluYXJ5KAotICAgIG5hbWUg
PSAicHlleHQvX21lc3NhZ2Uuc28iLAotICAgIHNyY3MgPSBnbG9iKFsKLSAgICAgICAgInB5dGhv
bi9nb29nbGUvcHJvdG9idWYvcHlleHQvKi5jYyIsCi0gICAgICAgICJweXRob24vZ29vZ2xlL3By
b3RvYnVmL3B5ZXh0LyouaCIsCi0gICAgXSksCi0gICAgY29wdHMgPSBDT1BUUyArIFsKLSAgICAg
ICAgIi1ER09PR0xFX1BST1RPQlVGX0hBU19PTkVPRj0xIiwKLSAgICBdICsgc2VsZWN0KHsKLSAg
ICAgICAgIi8vY29uZGl0aW9uczpkZWZhdWx0IjogW10sCi0gICAgICAgICI6YWxsb3dfb3ZlcnNp
emVfcHJvdG9zIjogWyItRFBST1RPQlVGX1BZVEhPTl9BTExPV19PVkVSU0laRV9QUk9UT1M9MSJd
LAotICAgIH0pLAotICAgIGluY2x1ZGVzID0gWwotICAgICAgICAicHl0aG9uLyIsCi0gICAgICAg
ICJzcmMvIiwKLSAgICBdLAotICAgIGxpbmtzaGFyZWQgPSAxLAotICAgIGxpbmtzdGF0aWMgPSAx
LAotICAgIGRlcHMgPSBbCi0gICAgICAgICI6cHJvdG9idWYiLAotICAgIF0gKyBzZWxlY3Qoewot
ICAgICAgICAiLy9jb25kaXRpb25zOmRlZmF1bHQiOiBbXSwKLSAgICAgICAgIjp1c2VfZmFzdF9j
cHBfcHJvdG9zIjogWyIvL2V4dGVybmFsOnB5dGhvbl9oZWFkZXJzIl0sCi0gICAgfSksCi0pCi0K
LWNvbmZpZ19zZXR0aW5nKAotICAgIG5hbWUgPSAidXNlX2Zhc3RfY3BwX3Byb3RvcyIsCi0gICAg
dmFsdWVzID0gewotICAgICAgICAiZGVmaW5lIjogInVzZV9mYXN0X2NwcF9wcm90b3M9dHJ1ZSIs
Ci0gICAgfSwKLSkKLQotY29uZmlnX3NldHRpbmcoCi0gICAgbmFtZSA9ICJhbGxvd19vdmVyc2l6
ZV9wcm90b3MiLAotICAgIHZhbHVlcyA9IHsKLSAgICAgICAgImRlZmluZSI6ICJhbGxvd19vdmVy
c2l6ZV9wcm90b3M9dHJ1ZSIsCi0gICAgfSwKLSkKLQotcHlfcHJvdG9fbGlicmFyeSgKLSAgICBu
YW1lID0gInByb3RvYnVmX3B5dGhvbiIsCi0gICAgc3JjcyA9IFdFTExfS05PV05fUFJPVE9TLAot
ICAgIGluY2x1ZGUgPSAic3JjIiwKLSAgICBkYXRhID0gc2VsZWN0KHsKLSAgICAgICAgIi8vY29u
ZGl0aW9uczpkZWZhdWx0IjogW10sCi0gICAgICAgICI6dXNlX2Zhc3RfY3BwX3Byb3RvcyI6IFsK
LSAgICAgICAgICAgICI6aW50ZXJuYWwvX2FwaV9pbXBsZW1lbnRhdGlvbi5zbyIsCi0gICAgICAg
ICAgICAiOnB5ZXh0L19tZXNzYWdlLnNvIiwKLSAgICAgICAgXSwKLSAgICB9KSwKLSAgICBkZWZh
dWx0X3J1bnRpbWUgPSAiIiwKLSAgICBwcm90b2MgPSAiOnByb3RvYyIsCi0gICAgcHlfbGlicyA9
IFsKLSAgICAgICAgIjpweXRob25fc3JjcyIsCi0gICAgICAgICIvL2V4dGVybmFsOnNpeCIKLSAg
ICBdLAotICAgIHNyY3NfdmVyc2lvbiA9ICJQWTJBTkQzIiwKLSAgICB2aXNpYmlsaXR5ID0gWyIv
L3Zpc2liaWxpdHk6cHVibGljIl0sCi0pCi0KLXB5X3Byb3RvX2xpYnJhcnkoCi0gICAgbmFtZSA9
ICJweXRob25fY29tbW9uX3Rlc3RfcHJvdG9zIiwKLSAgICBzcmNzID0gTElURV9URVNUX1BST1RP
UyArIFRFU1RfUFJPVE9TLAotICAgIGluY2x1ZGUgPSAic3JjIiwKLSAgICBkZWZhdWx0X3J1bnRp
bWUgPSAiIiwKLSAgICBwcm90b2MgPSAiOnByb3RvYyIsCi0gICAgc3Jjc192ZXJzaW9uID0gIlBZ
MkFORDMiLAotICAgIGRlcHMgPSBbIjpwcm90b2J1Zl9weXRob24iXSwKLSkKLQotcHlfcHJvdG9f
bGlicmFyeSgKLSAgICBuYW1lID0gInB5dGhvbl9zcGVjaWZpY190ZXN0X3Byb3RvcyIsCi0gICAg
c3JjcyA9IGdsb2IoWwotICAgICAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC8q
LnByb3RvIiwKLSAgICAgICAgInB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvaW1wb3J0
X3Rlc3RfcGFja2FnZS8qLnByb3RvIiwKLSAgICBdKSwKLSAgICBpbmNsdWRlID0gInB5dGhvbiIs
Ci0gICAgZGVmYXVsdF9ydW50aW1lID0gIjpwcm90b2J1Zl9weXRob24iLAotICAgIHByb3RvYyA9
ICI6cHJvdG9jIiwKLSAgICBzcmNzX3ZlcnNpb24gPSAiUFkyQU5EMyIsCi0gICAgZGVwcyA9IFsi
OnB5dGhvbl9jb21tb25fdGVzdF9wcm90b3MiXSwKLSkKLQotcHlfbGlicmFyeSgKLSAgICBuYW1l
ID0gInB5dGhvbl90ZXN0cyIsCi0gICAgc3JjcyA9IGdsb2IoCi0gICAgICAgIFsKLSAgICAgICAg
ICAgICJweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsLypfdGVzdC5weSIsCi0gICAgICAg
ICAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC90ZXN0X3V0aWwucHkiLAotICAg
ICAgICBdLAotICAgICksCi0gICAgaW1wb3J0cyA9IFsicHl0aG9uIl0sCi0gICAgc3Jjc192ZXJz
aW9uID0gIlBZMkFORDMiLAotICAgIGRlcHMgPSBbCi0gICAgICAgICI6cHJvdG9idWZfcHl0aG9u
IiwKLSAgICAgICAgIjpweXRob25fY29tbW9uX3Rlc3RfcHJvdG9zIiwKLSAgICAgICAgIjpweXRo
b25fc3BlY2lmaWNfdGVzdF9wcm90b3MiLAotICAgIF0sCi0pCi0KLWludGVybmFsX3Byb3RvYnVm
X3B5X3Rlc3RzKAotICAgIG5hbWUgPSAicHl0aG9uX3Rlc3RzX2JhdGNoIiwKLSAgICBkYXRhID0g
Z2xvYihbCi0gICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmLyoqLyoiLAotICAgIF0pLAotICAg
IG1vZHVsZXMgPSBbCi0gICAgICAgICJkZXNjcmlwdG9yX2RhdGFiYXNlX3Rlc3QiLAotICAgICAg
ICAiZGVzY3JpcHRvcl9wb29sX3Rlc3QiLAotICAgICAgICAiZGVzY3JpcHRvcl90ZXN0IiwKLSAg
ICAgICAgImdlbmVyYXRvcl90ZXN0IiwKLSAgICAgICAgImpzb25fZm9ybWF0X3Rlc3QiLAotICAg
ICAgICAibWVzc2FnZV9mYWN0b3J5X3Rlc3QiLAotICAgICAgICAibWVzc2FnZV90ZXN0IiwKLSAg
ICAgICAgInByb3RvX2J1aWxkZXJfdGVzdCIsCi0gICAgICAgICJyZWZsZWN0aW9uX3Rlc3QiLAot
ICAgICAgICAic2VydmljZV9yZWZsZWN0aW9uX3Rlc3QiLAotICAgICAgICAic3ltYm9sX2RhdGFi
YXNlX3Rlc3QiLAotICAgICAgICAidGV4dF9lbmNvZGluZ190ZXN0IiwKLSAgICAgICAgInRleHRf
Zm9ybWF0X3Rlc3QiLAotICAgICAgICAidW5rbm93bl9maWVsZHNfdGVzdCIsCi0gICAgICAgICJ3
aXJlX2Zvcm1hdF90ZXN0IiwKLSAgICBdLAotICAgIGRlcHMgPSBbIjpweXRob25fdGVzdHMiXSwK
LSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvQlVJTEQuZ24gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL0JVSUxELmduCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NGM5MTZhNjUxZTgzNDdhZTkzNjYxZDMwNTYzMzdmZTRhMDYwZTdkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvQlVJTEQuZ24KKysrIC9kZXYv
bnVsbApAQCAtMSw2NTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotCi1jb25maWcoInByb3RvYnVmX2NvbmZpZyIpIHsKLSAgaW5jbHVk
ZV9kaXJzID0gWyAic3JjIiBdCi0gIGRlZmluZXMgPSBbCi0gICAgIkdPT0dMRV9QUk9UT0JVRl9O
T19SVFRJIiwKLSAgICAiR09PR0xFX1BST1RPQlVGX05PX1NUQVRJQ19JTklUSUFMSVpFUiIsCi0g
IF0KLSAgaWYgKCFpc193aW4pIHsKLSAgICBkZWZpbmVzICs9IFsgIkhBVkVfUFRIUkVBRCIgXQot
ICB9Ci19Ci0KLWNvbmZpZygicHJvdG9idWZfd2FybmluZ3MiKSB7Ci0gIGNmbGFncyA9IFtdCi0g
IGlmIChpc19jbGFuZykgewotICAgICMgcHJvdG9idWYtMyBjb250YWlucyBhIGZldyBmdW5jdGlv
bnMgdGhhdCBhcmUgdW51c2VkLgotICAgIGNmbGFncyArPSBbICItV25vLXVudXNlZC1mdW5jdGlv
biIgXQotICB9Ci19Ci0KLWlmIChpc19jb21wb25lbnRfYnVpbGQpIHsKLSAgY29uZmlnKCJwcm90
b2J1Zl91c2VfZGxscyIpIHsKLSAgICBkZWZpbmVzID0gWyAiUFJPVE9CVUZfVVNFX0RMTFMiIF0K
LSAgfQotfQotCi0jIFRoaXMgY29uZmlnIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRhcmdldHMgdXNp
bmcgZ2VuZXJhdGVkIGNvZGUgZnJvbSB0aGUgcHJvdG8KLSMgY29tcGlsZXIuIEl0IHNldHMgdXAg
dGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgcHJvcGVybHkuCi1jb25maWcoInVzaW5nX3Byb3RvIikg
ewotICBpbmNsdWRlX2RpcnMgPSBbCi0gICAgInNyYyIsCi0gICAgIiRyb290X2dlbl9kaXIvcHJv
dG9jX291dCIsCi0gIF0KLX0KLQotcHJvdG9idWZfbGl0ZV9zb3VyY2VzID0gWwotICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9hcmVuYS5jYyIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2FyZW5hLmgi
LAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5jYyIsCi0gICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2FyZW5hc3RyaW5nLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9leHRlbnNp
b25fc2V0LmNjIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldC5oIiwKLSAg
InNyYy9nb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfdXRpbC5jYyIsCi0gICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3V0aWwuaCIsCi0gICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5jYyIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lv
L2NvZGVkX3N0cmVhbS5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFt
X2lubC5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5jYyIs
Ci0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW0uaCIsCi0gICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbF9saXRlLmNjIiwKLSAgInNy
Yy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsX2xpdGUuaCIsCi0gICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL21hcC5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvbWFwX2Vu
dHJ5X2xpdGUuaCIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZF9saXRlLmgiLAot
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfdHlwZV9oYW5kbGVyLmgiLAotICAic3JjL2dvb2ds
ZS9wcm90b2J1Zi9tZXNzYWdlX2xpdGUuY2MiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9tZXNz
YWdlX2xpdGUuaCIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmNjIiwK
LSAgInNyYy9nb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaCIsCi0gICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2F0b21pY29wcy5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvYXRvbWljb3BzX2ludGVybmFsc19hcm02NF9nY2MuaCIsCi0gICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfYXJtX2djYy5oIiwKLSAgInNyYy9nb29nbGUv
cHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19hcm1fcW54LmgiLAotICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX2F0b21pY3dvcmRfY29tcGF0
LmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX2dl
bmVyaWNfZ2NjLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50
ZXJuYWxzX21hY29zeC5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3Bz
X2ludGVybmFsc19taXBzX2djYy5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRv
bWljb3BzX2ludGVybmFsc19wbmFjbC5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMv
YXRvbWljb3BzX2ludGVybmFsc19wb3dlci5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvYXRvbWljb3BzX2ludGVybmFsc19wcGNfZ2NjLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3NvbGFyaXMuaCIsCi0gICJzcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfdHNhbi5oIiwKLSAgInNyYy9nb29nbGUv
cHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc194ODZfZ2NjLmNjIiwKLSAgInNyYy9n
b29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc194ODZfZ2NjLmgiLAotICAi
c3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3g4Nl9tc3ZjLmNj
IiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc194ODZf
bXN2Yy5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljX3NlcXVlbmNlX251
bS5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5jYyIsCi0gICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2J5dGVzdHJlYW0uaCIsCi0gICJzcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL2NhbGxiYWNrLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9j
YXN0cy5oIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmNjIiwKLSAgInNy
Yy9nb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9mYXN0bWVtLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmgi
LAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9pbnQxMjguY2MiLAotICAic3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9pbnQxMjguaCIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2xvZ2dpbmcuaCIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hY3Jvcy5oIiwKLSAg
InNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwuaCIsCi0gICJzcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL211dGV4LmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNl
LmNjIiwKLSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oIiwKLSAgInNyYy9nb29n
bGUvcHJvdG9idWYvc3R1YnMvcGxhdGZvcm1fbWFjcm9zLmgiLAotICAic3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9wb3J0LmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zY29wZWRf
cHRyLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmgiLAotICAi
c3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXMuY2MiLAotICAic3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9zdGF0dXMuaCIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1
c19tYWNyb3MuaCIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1c29yLmNjIiwK
LSAgInNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzb3IuaCIsCi0gICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL3N0dWJzL3N0bF91dGlsLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVi
cy9zdHJpbmdwaWVjZS5jYyIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3Bp
ZWNlLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmludGYuY2MiLAot
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmludGYuaCIsCi0gICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0cnVjdHVyYWxseV92YWxpZC5jYyIsCi0gICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuY2MiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVi
cy9zdHJ1dGlsLmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy90ZW1wbGF0ZV91dGls
LmgiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy90eXBlX3RyYWl0cy5oIiwKLSAgInNy
Yy9nb29nbGUvcHJvdG9idWYvc3R1YnMvdGltZS5jYyIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVm
L3N0dWJzL3RpbWUuaCIsCi0gICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGUu
Y2MiLAotICAic3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlLmgiLAotICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oIiwKLV0KLQotcHJvdG9idWZf
bGl0ZV9jZmxhZ3MgPSBbXQotaWYgKGlzX3dpbikgewotICBwcm90b2J1Zl9saXRlX2NmbGFncyA9
IFsKLSAgICAiL3dkNDAxOCIsICAjIHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaCBpbiBjb21wYXJp
c29uCi0gICAgIi93ZDQwNjUiLCAgIyBzd2l0Y2ggc3RhdGVtZW50IGNvbnRhaW5zICdkZWZhdWx0
JyBidXQgbm8gJ2Nhc2UnIGxhYmVscwotICAgICIvd2Q0MTQ2IiwgICMgdW5hcnkgbWludXMgb3Bl
cmF0b3IgYXBwbGllZCB0byB1bnNpZ25lZCB0eXBlCi0gICAgIi93ZDQyNDQiLCAgIyBpbXBsaWNp
dCBjb252ZXJzaW9uLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKLSAgICAiL3dkNDI2NyIsICAjIHNp
emVfdCB0byBpbnQgdHJ1bmNhdGlvbgotICAgICIvd2Q0MjkxIiwgICMgbm8gbWF0Y2hpbmcgb3Bl
cmF0b3IgZGVsZXRlIGZvciBhIHBsYWNlbWVudCBuZXcuCi0gICAgIi93ZDQzMDUiLCAgIyBkb3Vi
bGUgdG8gZmxvYXQgdHJ1bmNhdGlvbgotICAgICIvd2Q0MzU1IiwgICMgJ3RoaXMnIHVzZWQgaW4g
YmFzZSBtZW1iZXIgaW5pdGlhbGl6ZXIgbGlzdAotICAgICIvd2Q0NTA2IiwgICMgbm8gZGVmaW5p
dGlvbiBmb3IgaW5saW5lIGZ1bmN0aW9uIChwcm90b2J1ZiBpc3N1ZSAjMjQwKQotICAgICIvd2Q0
NzE1IiwgICMgbm90IGFsbCBjb250cm9sIHBhdGhzIHJldHVybiBhIHZhbHVlIChmaXhlZCBpbiB0
cnVuaykKLSAgXQotfQotCi1jb21wb25lbnQoInByb3RvYnVmX2xpdGUiKSB7Ci0gIHNvdXJjZXMg
PSBwcm90b2J1Zl9saXRlX3NvdXJjZXMKLQotICBjb25maWdzIC09IFsgIi8vYnVpbGQvY29uZmln
L2NvbXBpbGVyOmNocm9taXVtX2NvZGUiIF0KLSAgY29uZmlncyArPSBbCi0gICAgIi8vYnVpbGQv
Y29uZmlnL2NvbXBpbGVyOm5vX2Nocm9taXVtX2NvZGUiLAotCi0gICAgIyBNdXN0IGJlIGFmdGVy
IG5vX2Nocm9taXVtX2NvZGUgZm9yIHdhcm5pbmcgZmxhZ3MgdG8gYmUgb3JkZXJlZAotICAgICMg
Y29ycmVjdGx5LgotICAgICI6cHJvdG9idWZfd2FybmluZ3MiLAotICBdCi0KLSAgaWYgKGlzX3dp
bikgewotICAgIGNvbmZpZ3MgLT0gWyAiLy9idWlsZC9jb25maWcvd2luOmxlYW5fYW5kX21lYW4i
IF0KLSAgfQotCi0gIHB1YmxpY19jb25maWdzID0gWwotICAgICI6cHJvdG9idWZfY29uZmlnIiwK
LQotICAgICMgVE9ETyhqc2NodWgpOiBjcmJ1Zy5jb20vMTY3MTg3IGZpeCBzaXplX3QgdG8gaW50
IHRydW5jYXRpb25zLgotICAgICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpub19zaXplX3RfdG9f
aW50X3dhcm5pbmciLAotICBdCi0KLSAgZGVwcyA9IFsKLSAgICAiLy9idWlsZC9jb25maWcvc2Fu
aXRpemVyczpkZXBzIiwKLSAgXQotCi0gIGNmbGFncyA9IHByb3RvYnVmX2xpdGVfY2ZsYWdzCi0K
LSAgIyBSZXF1aXJlZCBmb3IgY29tcG9uZW50IGJ1aWxkcy4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20v
MTcyODAwLgotICBpZiAoaXNfY29tcG9uZW50X2J1aWxkKSB7Ci0gICAgcHVibGljX2NvbmZpZ3Mg
Kz0gWyAiOnByb3RvYnVmX3VzZV9kbGxzIiBdCi0gICAgZGVmaW5lcyA9IFsgIkxJQlBST1RPQlVG
X0VYUE9SVFMiIF0KLSAgfQotfQotCi0jIFRoaXMgaXMgdGhlIGZ1bGwsIGhlYXZ5IHByb3RvYnVm
IGxpYiB0aGF0J3MgbmVlZGVkIGZvciBjKysgLnByb3RvcyB0aGF0IGRvbid0Ci0jIHNwZWNpZnkg
dGhlIExJVEVfUlVOVElNRSBvcHRpb24uIFRoZSBwcm90b2NvbCBjb21waWxlciBpdHNlbGYgKHBy
b3RvYykgZmFsbHMKLSMgaW50byB0aGF0IGNhdGVnb3J5LiBEbyBub3QgdXNlIGluIENocm9tZSBj
b2RlLgotc3RhdGljX2xpYnJhcnkoInByb3RvYnVmX2Z1bGwiKSB7Ci0gICMgUHJldmVudCBwZW9w
bGUgZnJvbSBkZXBlbmRpbmcgb24gdGhpcyBvdXRzaWRlIG91ciBmaWxlLgotICB2aXNpYmlsaXR5
ID0gWyAiOioiIF0KLQotICBzb3VyY2VzID0gcHJvdG9idWZfbGl0ZV9zb3VyY2VzCi0gIHNvdXJj
ZXMgKz0gWwotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2FueS5jYyIsCi0gICAgInNyYy9nb29n
bGUvcHJvdG9idWYvYW55LmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2FueS5wYi5jYyIs
Ci0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvYW55LnBiLmgiLAotICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2FwaS5wYi5jYyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvYXBpLnBiLmgiLAot
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ltcG9ydGVyLmNjIiwKLSAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9pbXBvcnRlci5oIiwKLSAgICAic3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9wYXJzZXIuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL3BhcnNlci5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmNj
IiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmgiLAotICAgICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVm
L2Rlc2NyaXB0b3IucGIuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9k
YXRhYmFzZS5jYyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9kYXRhYmFz
ZS5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wYi5jYyIsCi0gICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucGIuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvZHluYW1pY19tZXNzYWdlLmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9keW5hbWlj
X21lc3NhZ2UuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvZW1wdHkucGIuY2MiLAotICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnBiLmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL2V4dGVuc2lvbl9zZXRfaGVhdnkuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2Zp
ZWxkX21hc2sucGIuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucGIu
aCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX2VudW1fcmVmbGVjdGlvbi5o
IiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfZW51bV91dGlsLmgiLAotICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uY2MiLAot
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uaCIs
Ci0KLSAgICAjIGd6aXBfc3RyZWFtLmNjIHB1bGxzIGluIHpsaWIsIGJ1dCBpdCdzIG5vdCBhY3R1
YWxseSB1c2VkIGJ5IHByb3RvYywganVzdAotICAgICMgYnkgdGVzdCBjb2RlLCBzbyBpbnN0ZWFk
IG9mIGNvbXBpbGluZyB6bGliIGZvciB0aGUgaG9zdCwgbGV0J3MganVzdAotICAgICMgZXhjbHVk
ZSB0aGlzLgotICAgICMgInNyYy9nb29nbGUvcHJvdG9idWYvaW8vZ3ppcF9zdHJlYW0uY2MiLAot
ICAgICMgInNyYy9nb29nbGUvcHJvdG9idWYvaW8vZ3ppcF9zdHJlYW0uaCIsCi0KLSAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1
Zi9pby9wcmludGVyLmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3N0cnRvZC5jYyIs
Ci0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvaW8vc3RydG9kLmgiLAotICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2lvL3Rva2VuaXplci5jYyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvaW8v
dG9rZW5pemVyLmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJl
YW1faW1wbC5jYyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVh
bV9pbXBsLmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9lbnRyeS5oIiwKLSAgICAi
c3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGQuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL21hcF9maWVsZC5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfaW5s
LmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuY2MiLAotICAgICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL21lc3NhZ2UuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvbWV0YWRh
dGEuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbi5oIiwKLSAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX2ludGVybmFsLmgiLAotICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzLmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9y
ZWZsZWN0aW9uX29wcy5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zZXJ2aWNlLmNjIiwK
LSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zZXJ2aWNlLmgiLAotICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL3NvdXJjZV9jb250ZXh0LnBiLmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9z
b3VyY2VfY29udGV4dC5wYi5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucGIu
Y2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wYi5oIiwKLSAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9tYXRobGltaXRzLmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJz
L21hdGh1dGlsLmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NpbmdsZXRvbi5o
IiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmNjIiwKLSAgICAi
c3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmgiLAotICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL3RleHRfZm9ybWF0LmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi90ZXh0
X2Zvcm1hdC5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucGIuY2MiLAot
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wYi5oIiwKLSAgICAic3JjL2dvb2ds
ZS9wcm90b2J1Zi90eXBlLnBiLmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi90eXBlLnBi
LmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0LmNjIiwKLSAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldC5oIiwKLSAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxkX2NvbXBhcmF0b3IuY2MiLAotICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvZmllbGRfY29tcGFyYXRvci5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90
b2J1Zi91dGlsL2ZpZWxkX21hc2tfdXRpbC5jYyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYv
dXRpbC9maWVsZF9tYXNrX3V0aWwuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9p
bnRlcm5hbC9jb25zdGFudHMuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRl
cm5hbC9kYXRhcGllY2UuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJu
YWwvZGF0YXBpZWNlLmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwv
ZGVmYXVsdF92YWx1ZV9vYmplY3R3cml0ZXIuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVm
L3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmplY3R3cml0ZXIuaCIsCi0gICAgInNyYy9n
b29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9lcnJvcl9saXN0ZW5lci5jYyIsCi0gICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9lcnJvcl9saXN0ZW5lci5oIiwKLSAgICAi
c3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2ZpZWxkX21hc2tfdXRpbGl0eS5jYyIs
Ci0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9maWVsZF9tYXNrX3V0aWxp
dHkuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX2VzY2Fw
aW5nLmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fZXNj
YXBpbmcuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX29i
amVjdHdyaXRlci5jYyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9q
c29uX29iamVjdHdyaXRlci5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVy
bmFsL2pzb25fc3RyZWFtX3BhcnNlci5jYyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC9qc29uX3N0cmVhbV9wYXJzZXIuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvdXRpbC9pbnRlcm5hbC9sb2NhdGlvbl90cmFja2VyLmgiLAotICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X2xvY2F0aW9uX3RyYWNrZXIuaCIsCi0gICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9vYmplY3Rfc291cmNlLmgiLAotICAgICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X3dyaXRlci5jYyIsCi0gICAg
InNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9vYmplY3Rfd3JpdGVyLmgiLAotICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9fd3JpdGVyLmNjIiwKLSAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3RvX3dyaXRlci5oIiwKLSAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHNv
dXJjZS5jYyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0
cmVhbV9vYmplY3Rzb3VyY2UuaCIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRl
cm5hbC9wcm90b3N0cmVhbV9vYmplY3R3cml0ZXIuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0d3JpdGVyLmgiLAotICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvc3RydWN0dXJlZF9vYmplY3R3cml0ZXIuaCIs
Ci0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90eXBlX2luZm8uY2MiLAot
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlwZV9pbmZvLmgiLAotICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlwZV9pbmZvX3Rlc3RfaGVscGVy
LmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5mb190
ZXN0X2hlbHBlci5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3V0
aWxpdHkuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdXRpbGl0
eS5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2pzb25fdXRpbC5jYyIsCi0gICAg
InNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWwuaCIsCi0gICAgInNyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9tZXNzYWdlX2RpZmZlcmVuY2VyLmNjIiwKLSAgICAic3JjL2dvb2dsZS9w
cm90b2J1Zi91dGlsL21lc3NhZ2VfZGlmZmVyZW5jZXIuaCIsCi0gICAgInNyYy9nb29nbGUvcHJv
dG9idWYvdXRpbC90aW1lX3V0aWwuY2MiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
dGltZV91dGlsLmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZl
ci5oIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXJfdXRpbC5j
YyIsCi0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyX3V0aWwuaCIs
Ci0gICAgInNyYy9nb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuY2MiLAotICAgICJzcmMvZ29v
Z2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0LmgiLAotICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL3dy
YXBwZXJzLnBiLmNjIiwKLSAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wYi5oIiwK
LSAgXQotCi0gIGRlcHMgPSBbCi0gICAgIi8vYnVpbGQvY29uZmlnL3Nhbml0aXplcnM6ZGVwcyIs
Ci0gIF0KLQotICBjb25maWdzIC09IFsgIi8vYnVpbGQvY29uZmlnL2NvbXBpbGVyOmNocm9taXVt
X2NvZGUiIF0KLSAgY29uZmlncyArPSBbCi0gICAgIi8vYnVpbGQvY29uZmlnL2NvbXBpbGVyOm5v
X2Nocm9taXVtX2NvZGUiLAotCi0gICAgIyBNdXN0IGJlIGFmdGVyIG5vX2Nocm9taXVtX2NvZGUg
Zm9yIHdhcm5pbmcgZmxhZ3MgdG8gYmUgb3JkZXJlZAotICAgICMgY29ycmVjdGx5LgotICAgICI6
cHJvdG9idWZfd2FybmluZ3MiLAotICBdCi0gIGlmIChpc193aW4pIHsKLSAgICBjb25maWdzIC09
IFsgIi8vYnVpbGQvY29uZmlnL3dpbjpsZWFuX2FuZF9tZWFuIiBdCi0gIH0KLSAgcHVibGljX2Nv
bmZpZ3MgPSBbCi0gICAgIjpwcm90b2J1Zl9jb25maWciLAotCi0gICAgIyBUT0RPKGpzY2h1aCk6
IGNyYnVnLmNvbS8xNjcxODcgZml4IHNpemVfdCB0byBpbnQgdHJ1bmNhdGlvbnMuCi0gICAgIi8v
YnVpbGQvY29uZmlnL2NvbXBpbGVyOm5vX3NpemVfdF90b19pbnRfd2FybmluZyIsCi0gIF0KLQot
ICBjZmxhZ3MgPSBwcm90b2J1Zl9saXRlX2NmbGFncwotfQotCi0jIE9ubHkgY29tcGlsZSB0aGUg
Y29tcGlsZXIgZm9yIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4KLWlmIChjdXJyZW50X3Rvb2xjaGFp
biA9PSBob3N0X3Rvb2xjaGFpbikgewotICAjIHByb3RvYyBjb21waWxlciBpcyBzZXBhcmF0ZWQg
aW50byBwcm90b2MgbGlicmFyeSBhbmQgZXhlY3V0YWJsZSB0YXJnZXRzIHRvCi0gICMgc3VwcG9y
dCBwcm90b2MgcGx1Z2lucyB0aGF0IG5lZWQgdG8gbGluayBsaWJwcm90b2MsIGJ1dCBub3QgdGhl
IG1haW4oKQotICAjIGl0c2VsZi4gU2VlIHNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1
Z2luLmgKLSAgc3RhdGljX2xpYnJhcnkoInByb3RvY19saWIiKSB7Ci0gICAgc291cmNlcyA9IFsK
LSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmNjIiwK
LSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmgiLAot
ICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29tbWFuZF9saW5lX2ludGVyZmFj
ZS5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb21tYW5kX2xpbmVf
aW50ZXJmYWNlLmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2Nw
cF9lbnVtLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBf
ZW51bS5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZW51
bV9maWVsZC5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3Bw
X2VudW1fZmllbGQuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAv
Y3BwX2V4dGVuc2lvbi5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
cHAvY3BwX2V4dGVuc2lvbi5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfZmllbGQuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3BwL2NwcF9maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2Nw
cC9jcHBfZmlsZS5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAv
Y3BwX2ZpbGUuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3Bw
X2dlbmVyYXRvci5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAv
Y3BwX2dlbmVyYXRvci5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2Nw
cC9jcHBfaGVscGVycy5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
cHAvY3BwX2hlbHBlcnMuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
cHAvY3BwX21hcF9maWVsZC5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jcHAvY3BwX21hcF9maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NwcC9jcHBfbWVzc2FnZS5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jcHAvY3BwX21lc3NhZ2UuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jcHAvY3BwX21lc3NhZ2VfZmllbGQuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvY3BwL2NwcF9tZXNzYWdlX2ZpZWxkLmgiLAotICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9vcHRpb25zLmgiLAotICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9wcmltaXRpdmVfZmllbGQuY2MiLAotICAgICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9wcmltaXRpdmVfZmllbGQuaCIsCi0g
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3NlcnZpY2UuY2MiLAot
ICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9zZXJ2aWNlLmgiLAot
ICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9zdHJpbmdfZmllbGQu
Y2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9zdHJpbmdf
ZmllbGQuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3No
YXJwX2RvY19jb21tZW50LmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NzaGFycC9jc2hhcnBfZG9jX2NvbW1lbnQuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW0uY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9lbnVtLmgiLAotICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9lbnVtX2ZpZWxkLmNjIiwKLSAgICAgICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZW51bV9maWVsZC5oIiwK
LSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZmllbGRf
YmFzZS5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3No
YXJwX2ZpZWxkX2Jhc2UuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
c2hhcnAvY3NoYXJwX2dlbmVyYXRvci5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX2dlbmVyYXRvci5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfaGVscGVycy5jYyIsCi0gICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuaCIsCi0gICAgICAi
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21hcF9maWVsZC5jYyIs
Ci0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21hcF9m
aWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hh
cnBfbWVzc2FnZS5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hh
cnAvY3NoYXJwX21lc3NhZ2UuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jc2hhcnAvY3NoYXJwX21lc3NhZ2VfZmllbGQuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tZXNzYWdlX2ZpZWxkLmgiLAotICAgICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9vcHRpb25zLmgiLAotICAg
ICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9wcmltaXRpdmVf
ZmllbGQuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9wcmltaXRpdmVfZmllbGQuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jc2hhcnAvY3NoYXJwX3JlZmxlY3Rpb25fY2xhc3MuY2MiLAotICAgICAgInNyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZWZsZWN0aW9uX2NsYXNzLmgiLAot
ICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRl
ZF9lbnVtX2ZpZWxkLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2Nz
aGFycC9jc2hhcnBfcmVwZWF0ZWRfZW51bV9maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfbWVzc2FnZV9maWVsZC5jYyIs
Ci0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVh
dGVkX21lc3NhZ2VfZmllbGQuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX3ByaW1pdGl2ZV9maWVsZC5jYyIsCi0gICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX3ByaW1pdGl2
ZV9maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9j
c2hhcnBfc291cmNlX2dlbmVyYXRvcl9iYXNlLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfc291cmNlX2dlbmVyYXRvcl9iYXNlLmgiLAotICAg
ICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF93cmFwcGVyX2Zp
ZWxkLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hh
cnBfd3JhcHBlcl9maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9jb250ZXh0LmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9jb250ZXh0LmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX2RvY19jb21tZW50LmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5oIiwKLSAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtLmgiLAotICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW1fZmllbGQuY2MiLAotICAgICAgInNyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW1fZmllbGQuaCIsCi0gICAgICAi
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9maWVsZF9saXRlLmNj
IiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2Zp
ZWxkX2xpdGUuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfZW51bV9saXRlLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9lbnVtX2xpdGUuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfZXh0ZW5zaW9uLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmEvamF2YV9leHRlbnNpb24uaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfZXh0ZW5zaW9uX2xpdGUuY2MiLAotICAgICAgInNyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2V4dGVuc2lvbl9saXRlLmgiLAotICAgICAg
InNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2ZpZWxkLmNjIiwKLSAgICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9maWVsZC5oIiwKLSAgICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9maWxlLmNjIiwKLSAgICAg
ICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9maWxlLmgiLAotICAgICAg
InNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2dlbmVyYXRvci5jYyIsCi0g
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZ2VuZXJhdG9yLmgi
LAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2dlbmVyYXRv
cl9mYWN0b3J5LmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEv
amF2YV9nZW5lcmF0b3JfZmFjdG9yeS5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmEvamF2YV9oZWxwZXJzLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmEvamF2YV9oZWxwZXJzLmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YS9qYXZhX2xhenlfbWVzc2FnZV9maWVsZC5jYyIsCi0gICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkLmgi
LAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2xhenlfbWVz
c2FnZV9maWVsZF9saXRlLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9sYXp5X21lc3NhZ2VfZmllbGRfbGl0ZS5oIiwKLSAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tYXBfZmllbGQuY2MiLAotICAgICAgInNyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21hcF9maWVsZC5oIiwKLSAgICAgICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tYXBfZmllbGRfbGl0ZS5jYyIs
Ci0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWFwX2ZpZWxk
X2xpdGUuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
bWVzc2FnZS5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfbWVzc2FnZS5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEv
amF2YV9tZXNzYWdlX2J1aWxkZXIuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfYnVpbGRlci5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2J1aWxkZXJfbGl0ZS5jYyIsCi0gICAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9idWlsZGVy
X2xpdGUuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
bWVzc2FnZV9maWVsZC5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfbWVzc2FnZV9maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2ZpZWxkX2xpdGUuY2MiLAotICAgICAgInNyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfZmllbGRfbGl0ZS5oIiwKLSAg
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2xpdGUu
Y2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3Nh
Z2VfbGl0ZS5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2
YV9uYW1lX3Jlc29sdmVyLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9uYW1lX3Jlc29sdmVyLmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX3ByaW1pdGl2ZV9maWVsZC5jYyIsCi0gICAgICAic3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfcHJpbWl0aXZlX2ZpZWxkLmgiLAotICAgICAg
InNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3ByaW1pdGl2ZV9maWVsZF9s
aXRlLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9w
cmltaXRpdmVfZmllbGRfbGl0ZS5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9zZXJ2aWNlLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmEvamF2YV9zZXJ2aWNlLmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX3NoYXJlZF9jb2RlX2dlbmVyYXRvci5jYyIsCi0gICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2hhcmVkX2NvZGVfZ2VuZXJhdG9y
LmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3N0cmlu
Z19maWVsZC5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfc3RyaW5nX2ZpZWxkLmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX3N0cmluZ19maWVsZF9saXRlLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2phdmEvamF2YV9zdHJpbmdfZmllbGRfbGl0ZS5oIiwKLSAgICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2VudW0uY2MiLAotICAg
ICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZW51bS5o
IiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5v
X2VudW1fZmllbGQuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2
YW5hbm8vamF2YW5hbm9fZW51bV9maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2V4dGVuc2lvbi5jYyIsCi0gICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19leHRlbnNpb24uaCIsCi0g
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWVs
ZC5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZh
bmFub19maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFu
YW5vL2phdmFuYW5vX2ZpbGUuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvamF2YW5hbm8vamF2YW5hbm9fZmlsZS5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2dlbmVyYXRvci5jYyIsCi0gICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19nZW5lcmF0b3IuaCIsCi0g
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19oZWxw
ZXJzLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2ph
dmFuYW5vX2hlbHBlcnMuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhbmFuby9qYXZhbmFub19tYXBfZmllbGQuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fbWFwX2ZpZWxkLmgiLAotICAgICAgInNyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fbWVzc2FnZS5jYyIsCi0g
ICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tZXNz
YWdlLmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2
YW5hbm9fbWVzc2FnZV9maWVsZC5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhbmFuby9qYXZhbmFub19tZXNzYWdlX2ZpZWxkLmgiLAotICAgICAgInNyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fcHJpbWl0aXZlX2ZpZWxkLmNj
IiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5v
X3ByaW1pdGl2ZV9maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2pzL2pzX2dlbmVyYXRvci5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qcy9qc19nZW5lcmF0b3IuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bS5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bS5oIiwKLSAgICAgICJzcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19lbnVtX2ZpZWxk
LmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2Jq
ZWN0aXZlY19lbnVtX2ZpZWxkLmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2V4dGVuc2lvbi5jYyIsCi0gICAgICAic3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZXh0ZW5zaW9uLmgiLAot
ICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVj
X2ZpZWxkLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2
ZWMvb2JqZWN0aXZlY19maWVsZC5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWxlLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWxlLmgiLAotICAgICAgInNy
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2dlbmVyYXRv
ci5jYyIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29i
amVjdGl2ZWNfZ2VuZXJhdG9yLmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2hlbHBlcnMuY2MiLAotICAgICAgInNyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2hlbHBlcnMuaCIsCi0gICAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWFw
X2ZpZWxkLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2
ZWMvb2JqZWN0aXZlY19tYXBfZmllbGQuaCIsCi0gICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWVzc2FnZS5jYyIsCi0gICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWVzc2FnZS5oIiwK
LSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZl
Y19tZXNzYWdlX2ZpZWxkLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L29iamVjdGl2ZWMvb2JqZWN0aXZlY19tZXNzYWdlX2ZpZWxkLmgiLAotICAgICAgInNyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX29uZW9mLmNjIiwKLSAg
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19v
bmVvZi5oIiwKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMv
b2JqZWN0aXZlY19wcmltaXRpdmVfZmllbGQuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX3ByaW1pdGl2ZV9maWVsZC5oIiwKLSAg
ICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5jYyIsCi0gICAgICAic3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4uaCIsCi0gICAgICAic3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9wbHVnaW4ucGIuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvcGx1Z2luLnBiLmgiLAotICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvcHl0aG9uL3B5dGhvbl9nZW5lcmF0b3IuY2MiLAotICAgICAgInNyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhvbl9nZW5lcmF0b3IuaCIsCi0gICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9ydWJ5L3J1YnlfZ2VuZXJhdG9yLmNjIiwKLSAgICAgICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3J1YnkvcnVieV9nZW5lcmF0b3IuaCIsCi0gICAg
ICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9zdWJwcm9jZXNzLmNjIiwKLSAgICAgICJz
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3N1YnByb2Nlc3MuaCIsCi0gICAgICAic3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci96aXBfd3JpdGVyLmNjIiwKLSAgICAgICJzcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL3ppcF93cml0ZXIuaCIsCi0gICAgXQotCi0gICAgY29uZmlncyAt
PSBbICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpjaHJvbWl1bV9jb2RlIiBdCi0gICAgY29uZmln
cyArPSBbCi0gICAgICAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6bm9fY2hyb21pdW1fY29kZSIs
Ci0KLSAgICAgICMgTXVzdCBiZSBhZnRlciBub19jaHJvbWl1bV9jb2RlIGZvciB3YXJuaW5nIGZs
YWdzIHRvIGJlIG9yZGVyZWQKLSAgICAgICMgY29ycmVjdGx5LgotICAgICAgIjpwcm90b2J1Zl93
YXJuaW5ncyIsCi0gICAgXQotICAgIGlmIChpc193aW4pIHsKLSAgICAgICMgVGhpcyBpcyBkZWZp
bmVkIGludGVybmFsbHksIGRvbid0IHdhcm4gb24gZHVwbGljYXRlLgotICAgICAgY29uZmlncyAt
PSBbICIvL2J1aWxkL2NvbmZpZy93aW46bGVhbl9hbmRfbWVhbiIgXQotICAgIH0KLQotICAgIHB1
YmxpY19jb25maWdzID0gWyAiOnByb3RvYnVmX2NvbmZpZyIgXQotCi0gICAgY2ZsYWdzID0gcHJv
dG9idWZfbGl0ZV9jZmxhZ3MKLQotICAgIHB1YmxpY19kZXBzID0gWwotICAgICAgIjpwcm90b2J1
Zl9mdWxsIiwKLSAgICBdCi0gIH0KLQotICBleGVjdXRhYmxlKCJwcm90b2MiKSB7Ci0gICAgc291
cmNlcyA9IFsKLSAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL21haW4uY2MiLAot
ICAgIF0KLQotICAgIGNvbmZpZ3MgLT0gWyAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6Y2hyb21p
dW1fY29kZSIgXQotICAgIGNvbmZpZ3MgKz0gWyAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6bm9f
Y2hyb21pdW1fY29kZSIgXQotCi0gICAgY2ZsYWdzID0gcHJvdG9idWZfbGl0ZV9jZmxhZ3MKLQot
ICAgIGRlcHMgPSBbCi0gICAgICAiOnByb3RvY19saWIiLAotCi0gICAgICAjIERlZmF1bHQgbWFu
aWZlc3Qgb24gV2luZG93cyAoYSBuby1vcCBlbHNld2hlcmUpLgotICAgICAgIi8vYnVpbGQvd2lu
OmRlZmF1bHRfZXhlX21hbmlmZXN0IiwKLSAgICBdCi0gIH0KLX0KLQotZ29vZ2xlX3B5dGhvbl9k
aXIgPSAiJHJvb3Rfb3V0X2Rpci9weXByb3RvL2dvb2dsZSIKLQotY29weSgiY29weV9nb29nbGUi
KSB7Ci0gIHNvdXJjZXMgPSBbCi0gICAgIl9faW5pdF9fLnB5IiwKLSAgXQotICBvdXRwdXRzID0g
WwotICAgICIkZ29vZ2xlX3B5dGhvbl9kaXIve3tzb3VyY2VfZmlsZV9wYXJ0fX0iLAotICBdCi19
Ci0KLWNvcHkoImNvcHlfc2l4IikgewotICBzb3VyY2VzID0gWwotICAgICJ0aGlyZF9wYXJ0eS9z
aXgvc2l4LnB5IiwKLSAgXQotICBvdXRwdXRzID0gWwotICAgICIkZ29vZ2xlX3B5dGhvbl9kaXIv
dGhpcmRfcGFydHkvc2l4L3t7c291cmNlX2ZpbGVfcGFydH19IiwKLSAgXQotfQotCi1jb3B5KCJj
b3B5X2dvb2dsZV9wcm90b2J1ZiIpIHsKLSAgc291cmNlcyA9IFsKLSAgICAicHl0aG9uL2dvb2ds
ZS9wcm90b2J1Zi9fX2luaXRfXy5weSIsCi0gICAgInB5dGhvbi9nb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5weSIsCi0gICAgInB5dGhvbi9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9kYXRh
YmFzZS5weSIsCi0gICAgInB5dGhvbi9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9wb29sLnB5
IiwKLSAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9qc29uX2Zvcm1hdC5weSIsCi0gICAgInB5
dGhvbi9nb29nbGUvcHJvdG9idWYvbWVzc2FnZS5weSIsCi0gICAgInB5dGhvbi9nb29nbGUvcHJv
dG9idWYvbWVzc2FnZV9mYWN0b3J5LnB5IiwKLSAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9w
cm90b19idWlsZGVyLnB5IiwKLSAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9u
LnB5IiwKLSAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9zZXJ2aWNlLnB5IiwKLSAgICAicHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9zZXJ2aWNlX3JlZmxlY3Rpb24ucHkiLAotICAgICJweXRob24v
Z29vZ2xlL3Byb3RvYnVmL3N5bWJvbF9kYXRhYmFzZS5weSIsCi0gICAgInB5dGhvbi9nb29nbGUv
cHJvdG9idWYvdGV4dF9lbmNvZGluZy5weSIsCi0gICAgInB5dGhvbi9nb29nbGUvcHJvdG9idWYv
dGV4dF9mb3JtYXQucHkiLAotCi0gICAgIyBUT0RPKG5jYXJ0ZXIpOiBwcm90b2MncyBweXRob24g
Z2VuZXJhdG9yIHRyZWF0cyBkZXNjcmlwdG9yLnByb3RvCi0gICAgIyBzcGVjaWFsbHksIGJ1dCBv
bmx5IHdoZW4gdGhlIGlucHV0IHBhdGggaXMgZXhhY3RseQotICAgICMgImdvb2dsZS9wcm90b2J1
Zi9kZXNjcmlwdG9yLnByb3RvIi4gIEknbSBub3Qgc3VyZSBob3cgdG8gZXhlY3V0ZSBhIHJ1bGUK
LSAgICAjIGZyb20gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LiAgRm9yIG5vdywgdXNlIGEgbWFudWFs
bHktZ2VuZXJhdGVkIGNvcHkgb2YKLSAgICAjIGRlc2NyaXB0b3JfcGIyLnB5LgotICAgICJweXRo
b24vZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfcGIyLnB5IiwKLSAgXQotICBvdXRwdXRzID0g
WwotICAgICIkZ29vZ2xlX3B5dGhvbl9kaXIvcHJvdG9idWYve3tzb3VyY2VfZmlsZV9wYXJ0fX0i
LAotICBdCi19Ci0KLWNvcHkoImNvcHlfZ29vZ2xlX3Byb3RvYnVmX2ludGVybmFsIikgewotICBz
b3VyY2VzID0gWwotICAgICJweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL19faW5pdF9f
LnB5IiwKLSAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9fcGFyYW1ldGVyaXpl
ZC5weSIsCi0gICAgInB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvYXBpX2ltcGxlbWVu
dGF0aW9uLnB5IiwKLSAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9jb250YWlu
ZXJzLnB5IiwKLSAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9kZWNvZGVyLnB5
IiwKLSAgICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGVyLnB5IiwKLSAg
ICAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9lbnVtX3R5cGVfd3JhcHBlci5weSIs
Ci0gICAgInB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvbWVzc2FnZV9saXN0ZW5lci5w
eSIsCi0gICAgInB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvcHl0aG9uX21lc3NhZ2Uu
cHkiLAotICAgICJweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3R5cGVfY2hlY2tlcnMu
cHkiLAotICAgICJweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3dlbGxfa25vd25fdHlw
ZXMucHkiLAotICAgICJweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3dpcmVfZm9ybWF0
LnB5IiwKLSAgXQotICBvdXRwdXRzID0gWwotICAgICIkZ29vZ2xlX3B5dGhvbl9kaXIvcHJvdG9i
dWYvaW50ZXJuYWwve3tzb3VyY2VfZmlsZV9wYXJ0fX0iLAotICBdCi19Ci0KLWdyb3VwKCJweV9w
cm90byIpIHsKLSAgcHVibGljX2RlcHMgPSBbCi0gICAgIjpjb3B5X2dvb2dsZSIsCi0gICAgIjpj
b3B5X2dvb2dsZV9wcm90b2J1ZiIsCi0gICAgIjpjb3B5X2dvb2dsZV9wcm90b2J1Zl9pbnRlcm5h
bCIsCi0gICAgIjpjb3B5X3NpeCIsCi0gIF0KLQotICAjIFRhcmdldHMgdGhhdCBkZXBlbmQgb24g
dGhpcyBzaG91bGQgZGVwZW5kIG9uIHRoZSBjb3BpZWQgZGF0YSBmaWxlcy4KLSAgZGF0YSA9IGdl
dF90YXJnZXRfb3V0cHV0cygiOmNvcHlfZ29vZ2xlIikKLSAgZGF0YSArPSBnZXRfdGFyZ2V0X291
dHB1dHMoIjpjb3B5X3NpeCIpCi0gIGRhdGEgKz0gZ2V0X3RhcmdldF9vdXRwdXRzKCI6Y29weV9n
b29nbGVfcHJvdG9idWYiKQotICBkYXRhICs9IGdldF90YXJnZXRfb3V0cHV0cygiOmNvcHlfZ29v
Z2xlX3Byb3RvYnVmX2ludGVybmFsIikKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvQ0hBTkdFUy50eHQgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL0NIQU5H
RVMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDU5Y2NjZmE5Y2Y3YzU3MmQ1
NWIzNGZjNTYzNWQyYzIyMWJiMjBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvQ0hBTkdFUy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTgyICswLDAgQEAK
LTIwMTYtMDUtMTYgdmVyc2lvbiAzLjAuMC1iZXRhLTMgKEMrKy9KYXZhL1B5dGhvbi9SdWJ5L05h
bm8vT2JqZWN0aXZlLUMvQyMvSmF2YVNjcmlwdCkKLSAgR2VuZXJhbAotICAqIFN1cHBvcnRlZCBQ
cm90bzMgbGl0ZS1ydW50aW1lIGluIEMrKy9KYXZhIGZvciBtb2JpbGUgcGxhdGZvcm1zLgotICAq
IEFueSB0eXBlIG5vdyBzdXBwb3J0cyBBUElzIHRvIHNwZWNpZnkgcHJlZml4ZXMgb3RoZXIgdGhh
bgotICAgIHR5cGUuZ29vZ2xlYXBpcy5jb20KLSAgKiBSZW1vdmVkIGphdmFuYW5vX3VzZV9kZXBy
ZWNhdGVkX3BhY2thZ2Ugb3B0aW9uOyBOYW5vIHdpbGwgYWx3YXlzIGhhcyBpdHMgb3duCi0gICAg
Ii5uYW5vIiBwYWNrYWdlLgotCi0gIEMrKyAoQmV0YSkKLSAgKiBJbXByb3ZlZCBoYXNoIG1hcHMu
Ci0gICAgICAtIEltcHJvdmVkIGhhc2ggbWFwcyBjb21tZW50cy4gSW4gcGFydGljdWxhciwgcGxl
YXNlIG5vdGUgdGhhdCBlcXVhbCBoYXNoCi0gICAgICAgIG1hcHMgd2lsbCBub3QgbmVjZXNzYXJp
bHkgaGF2ZSB0aGUgc2FtZSBpdGVyYXRpb24gb3JkZXIgYW5kCi0gICAgICAgIHNlcmlhbGl6YXRp
b24uCi0gICAgICAtIEFkZGVkIGEgbmV3IGhhc2ggbWFwcyBpbXBsZW1lbnRhdGlvbiB0aGF0IHdp
bGwgYmVjb21lIHRoZSBkZWZhdWx0IGluIGEKLSAgICAgICAgbGF0ZXIgcmVsZWFzZS4KLSAgKiBB
cmVuYXMKLSAgICAgIC0gU2V2ZXJhbCBpbmxpbmVkIG1ldGhvZHMgaW4gQXJlbmEgd2VyZSBtb3Zl
ZCB0byBvdXQtb2YtbGluZSB0byBpbXByb3ZlCi0gICAgICAgIGJ1aWxkIHBlcmZvcm1hbmNlIGFu
ZCBjb2RlIHNpemUuCi0gICAgICAtIEFkZGVkIFNwYWNlQWxsb2NhdGVkQW5kVXNlZCgpIHRvIHJl
cG9ydCBib3RoIHNwYWNlIHVzZWQgYW5kIGFsbG9jYXRlZAotICAgICAgLSBBZGRlZCBjb252ZW5p
ZW50IGNsYXNzIFVuc2FmZUFyZW5hQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRl
cgotICAqIEFueQotICAgICAgLSBBbGxvdyBjdXN0b20gdHlwZSBVUkwgcHJlZml4ZXMgaW4gQW55
IHBhY2tpbmcuCi0gICAgICAtIFRleHRGb3JtYXQgbm93IGV4cGFuZCB0aGUgQW55IHR5cGUgcmF0
aGVyIHRoYW4gcHJpbnRpbmcgYnl0ZXMuCi0gICogUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBh
bmQgdmFyaW91cyBidWcgZml4ZXMuCi0KLSAgSmF2YSAoQmV0YSkKLSAgKiBJbnRyb2R1Y2VkIGFu
IEV4cGVyaW1lbnRhbEFwaSBhbm5vdGF0aW9uLiBBbm5vdGF0ZWQgQVBJcyBhcmUgZXhwZXJpbWVu
dGFsCi0gICAgYW5kIGFyZSBzdWJqZWN0IHRvIGNoYW5nZSBpbiBhIGJhY2t3YXJkIGluY29tcGF0
aWJsZSB3YXkgaW4gZnV0dXJlIHJlbGVhc2VzLgotICAqIEludHJvZHVjZWQgemVyby1jb3B5IHNl
cmlhbGl6YXRpb24gYXMgYW4gRXhwZXJpbWVudGFsQXBpCi0gICAgICAtIEludHJvZHVjdGlvbiBv
ZiB0aGUgYEJ5dGVPdXRwdXRgIGludGVyZmFjZS4gVGhpcyBpcyBzaW1pbGFyIHRvCi0gICAgICAg
IGBPdXRwdXRTdHJlYW1gIGJ1dCBwcm92aWRlcyBzZW1hbnRpY3MgZm9yIGxhenkgd3JpdGluZyAo
aS5lLiBubwotICAgICAgICBpbW1lZGlhdGUgY29weSByZXF1aXJlZCkgb2YgZmllbGRzIHRoYXQg
YXJlIGNvbnNpZGVyZWQgdG8gYmUgaW1tdXRhYmxlLgotICAgICAgLSBgQnl0ZVN0cmluZ2Agbm93
IHN1cHBvcnRzIHdyaXRpbmcgdG8gYSBgQnl0ZU91dHB1dGAsIHdoaWNoIHdpbGwgZGlyZWN0bHkK
LSAgICAgICAgZXhwb3NlIHRoZSBpbnRlcm5hbHMgb2YgdGhlIGBCeXRlU3RyaW5nYCAoaS5lLiBg
Ynl0ZVtdYCBvciBgQnl0ZUJ1ZmZlcmApCi0gICAgICAgIHRvIHRoZSBgQnl0ZU91dHB1dGAgd2l0
aG91dCBjb3B5aW5nLgotICAgICAgLSBgQ29kZWRPdXRwdXRTdHJlYW1gIG5vdyBzdXBwb3J0cyB3
cml0aW5nIHRvIGEgYEJ5dGVPdXRwdXRgLiBgQnl0ZVN0cmluZ2AKLSAgICAgICAgaW5zdGFuY2Vz
IHRoYXQgYXJlIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIGludGVybmFsIGJ1ZmZlciB3aWxsIGJl
Ci0gICAgICAgIChsYXppbHkpIHdyaXR0ZW4gdG8gdGhlIGBCeXRlT3V0cHV0YCBkaXJlY3RseS4K
LSAgICAgIC0gVGhpcyBhbGxvd3MgYXBwbGljYXRpb25zIHVzaW5nIGxhcmdlIGBCeXRlU3RyaW5n
YCBmaWVsZHMgdG8gYXZvaWQKLSAgICAgICAgZHVwbGljYXRpb24gb2YgdGhlc2UgZmllbGRzIGVu
dGlyZWx5LiBTdWNoIGFuIGFwcGxpY2F0aW9uIGNhbiBzdXBwbHkgYQotICAgICAgICBgQnl0ZU91
dHB1dGAgdGhhdCBjaGFpbnMgdG9nZXRoZXIgdGhlIGNodW5rcyByZWNlaXZlZCBmcm9tCi0gICAg
ICAgIGBDb2RlZE91dHB1dFN0cmVhbWAgYmVmb3JlIGZvcndhcmRpbmcgdGhlbSBvbnRvIHRoZSBJ
TyBzeXN0ZW0uCi0gICogT3RoZXIgcmVsYXRlZCBjaGFuZ2VzIHRvIGBDb2RlZE91dHB1dFN0cmVh
bWAKLSAgICAgIC0gQWRkaXRpb25hbCB1c2Ugb2YgYHN1bi5taXNjLlVuc2FmZWAgd2hlcmUgcG9z
c2libGUgdG8gcGVyZm9ybSBmYXN0Ci0gICAgICAgIGFjY2VzcyB0byBgYnl0ZVtdYCBhbmQgYEJ5
dGVCdWZmZXJgIHZhbHVlcyBhbmQgYXZvaWRpbmcgdW5uZWNlc3NhcnkKLSAgICAgICAgcmFuZ2Ug
Y2hlY2tpbmcuCi0gICAgICAtIGBCeXRlQnVmZmVyYC1iYWNrZWQgYENvZGVkT3V0cHV0U3RyZWFt
YCBub3cgd3JpdGVzIGRpcmVjdGx5IHRvIHRoZQotICAgICAgICBgQnl0ZUJ1ZmZlcmAgcmF0aGVy
IHRoYW4gdG8gYW4gaW50ZXJtZWRpYXRlIGFycmF5LgotICAqIEltcHJvdmVkIGxpdGUtcnVudGlt
ZS4KLSAgICAgIC0gTGl0ZSBwcm90b3Mgbm93IGltcGxlbWVudCBkZWVwIGVxdWFscy9oYXNoQ29k
ZS90b1N0cmluZwotICAgICAgLSBTaWduaWZpY2FudGx5IGltcHJvdmVkIHRoZSBwZXJmb3JtYW5j
ZSBvZiBCdWlsZGVyI21lcmdlRnJvbSgpIGFuZAotICAgICAgICBCdWlsZGVyI21lcmdlRGVsaW1p
dGVkRnJvbSgpCi0gICogVmFyaW91cyBidWcgZml4ZXMgYW5kIHNtYWxsIGZlYXR1cmUgZW5oYW5j
ZW1lbnQuCi0gICAgICAtIEZpeGVkIHN0YWNrIG92ZXJmbG93IHdoZW4gaW4gaGFzaENvZGUoKSBm
b3IgaW5maW5pdGUgcmVjdXJzaXZlIG9uZW9mcy4KLSAgICAgIC0gRml4ZWQgdGhlIGxhenkgZmll
bGQgcGFyc2luZyBpbiBsaXRlIHRvIG1lcmdlIHJhdGhlciB0aGFuIG92ZXJ3cml0ZS4KLSAgICAg
IC0gVGV4dEZvcm1hdCBub3cgc3VwcG9ydHMgcmVwb3J0aW5nIGxpbmUvY29sdW1uIG51bWJlcnMg
b24gZXJyb3JzLgotICAgICAgLSBVcGRhdGVkIHRvIGFkZCBhcHByb3ByaWF0ZSBAT3ZlcnJpZGUg
Zm9yIGJldHRlciBjb21waWxlciBlcnJvcnMuCi0KLSAgUHl0aG9uIChCZXRhKQotICAqIEFkZGVk
IEpTT04gZm9ybWF0IGZvciBBbnksIFN0cnVjdCwgVmFsdWUgYW5kIExpc3RWYWx1ZQotICAqIFsg
XSBpcyBub3cgYWNjZXB0ZWQgZm9yIGJvdGggcmVwZWF0ZWQgc2NhbGFyIGZpZWxkcyBhbmQgcmVw
ZWF0ZWQgbWVzc2FnZQotICAgIGZpZWxkcyBpbiB0ZXh0IGZvcm1hdCBwYXJzZXIuCi0gICogTnVt
ZXJpY2FsIGZpZWxkIG5hbWUgaXMgbm93IHN1cHBvcnRlZCBpbiB0ZXh0IGZvcm1hdC4KLSAgKiBB
ZGRlZCBEaXNjYXJkVW5rbm93bkZpZWxkcyBBUEkgZm9yIHB5dGhvbiBwcm90b2J1ZiBtZXNzYWdl
LgotCi0gIE9iamVjdGl2ZS1DIChCZXRhKQotICAqIFByb3RvIGNvbW1lbnRzIG5vdyBjb21lIG92
ZXIgYXMgSGVhZGVyRG9jIGNvbW1lbnRzIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlcwotICAgIHNv
IFhjb2RlIGNhbiBwaWNrIHRoZW0gdXAgYW5kIGRpc3BsYXkgdGhlbS4KLSAgKiBUaGUgbGlicmFy
eSBoZWFkZXJzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHVzZSBIZWFkZXJEb2MgY29tbWVudHMgc28g
WGNvZGUgY2FuCi0gICAgcGljayB0aGVtIHVwIGFuZCBkaXNwbGF5IHRoZW0uCi0gICogVGhlIHBl
ciBtZXNzYWdlIGFuZCBwZXIgZmllbGQgb3ZlcmhlYWQgaW4gYm90aCBnZW5lcmF0ZWQgY29kZSBh
bmQgcnVudGltZQotICAgIG9iamVjdCBzaXplcyB3YXMgcmVkdWNlZC4KLSAgKiBHZW5lcmF0ZWQg
Y29kZSBub3cgaW5jbHVkZSBkZXByZWNhdGVkIGFubm90YXRpb25zIHdoZW4gdGhlIHByb3RvIGZp
bGUKLSAgICBpbmNsdWRlZCB0aGVtLgotCi0gIEMjIChCZXRhKQotICBJbiBnZW5lcmFsOiBzb21l
IGNoYW5nZXMgYXJlIGJyZWFraW5nLCB3aGljaCByZXF1aXJlIHJlZ2VuZXJhdGluZyBtZXNzYWdl
cy4KLSAgTW9zdCB1c2VyLXdyaXR0ZW4gY29kZSB3aWxsIG5vdCBiZSBpbXBhY3RlZCAqZXhjZXB0
KiBmb3IgdGhlIHJlbmFtaW5nIG9mIGVudW0KLSAgdmFsdWVzLgotCi0gICogQWxsb3cgY3VzdG9t
IHR5cGUgVVJMIHByZWZpeGVzIGluIGBBbnlgIHBhY2tpbmcsIGFuZCBpZ25vcmUgdGhlbSB3aGVu
Ci0gICAgdW5wYWNraW5nCi0gICogYHByb3RvY2AgaXMgbm93IGluIGEgc2VwYXJhdGUgTnVHZXQg
cGFja2FnZSAoR29vZ2xlLlByb3RvYnVmLlRvb2xzKQotICAqIE5ldyBvcHRpb246IGBpbnRlcm5h
bF9hY2Nlc3NgIHRvIGdlbmVyYXRlIGludGVybmFsIGNsYXNzZXMKLSAgKiBFbnVtIHZhbHVlcyBh
cmUgbm93IFBhc2NhbENhc2VkLCBhbmQgaWYgdGhlcmUncyBhIHByZWZpeCB3aGljaCBtYXRjaGVz
IHRoZQotICAgIG5hbWUgb2YgdGhlIGVudW0sIHRoYXQgaXMgcmVtb3ZlZCAoc28gYW4gZW51bSBg
Q09MT1JgIHdpdGggYSB2YWx1ZQotICAgIGBDT0xPUl9CTFVFYCB3b3VsZCBnZW5lcmF0ZSBhIHZh
bHVlIG9mIGp1c3QgYEJsdWVgKS4gQW4gb3B0aW9uCi0gICAgKGBsZWdhY3lfZW51bV92YWx1ZXNg
KSBpcyB0ZW1wb3JhcmlseSBhdmFpbGFibGUgdG8gZGlzYWJsZSB0aGlzLCBidXQgdGhlCi0gICAg
b3B0aW9uIHdpbGwgYmUgcmVtb3ZlZCBmb3IgR0EuCi0gICogYGpzb25fbmFtZWAgb3B0aW9uIGlz
IG5vdyBob25vcmVkCi0gICogSWYgZ3JvdXAgdGFncyBhcmUgZW5jb3VudGVyZWQgd2hlbiBwYXJz
aW5nLCB0aGV5IGFyZSB2YWxpZGF0ZWQgbW9yZQotICAgIHRob3JvdWdobHkgKGFsdGhvdWdoIHdl
IGRvbid0IHN1cHBvcnQgYWN0dWFsIGdyb3VwcykKLSAgKiBOdUdldCBkZXBlbmRlbmNpZXMgYXJl
IGJldHRlciBzcGVjaWZpZWQKLSAgKiBCcmVha2luZzogYFByZWNvbmRpdGlvbnNgIGlzIHJlbmFt
ZWQgdG8gYFByb3RvUHJlY29uZGl0aW9uc2AKLSAgKiBCcmVha2luZzogYEdlbmVyYXRlZENvZGVJ
bmZvYCBpcyByZW5hbWVkIHRvIGBHZW5lcmF0ZWRDbHJUeXBlSW5mb2AKLSAgKiBgSnNvbkZvcm1h
dHRlcmAgbm93IGFsbG93cyB3cml0aW5nIHRvIGEgYFRleHRXcml0ZXJgCi0gICogTmV3IGludGVy
ZmFjZSwgYElDdXN0b21EaWFnbm9zdGljTWVzc2FnZWAgdG8gYWxsb3cgbW9yZSBjb21wYWN0Ci0g
ICAgcmVwcmVzZW50YXRpb25zIGZyb20gYFRvU3RyaW5nYAotICAqIGBDb2RlZElucHV0U3RyZWFt
YCBhbmQgYENvZGVkT3V0cHV0U3RyZWFtYCBub3cgaW1wbGVtZW50IGBJRGlzcG9zYWJsZWAsCi0g
ICAgd2hpY2ggc2ltcGx5IGRpc3Bvc2VzIG9mIHRoZSBzdHJlYW1zIHRoZXkgd2VyZSBjb25zdHJ1
Y3RlZCB3aXRoCi0gICogTWFwIGZpZWxkcyBubyBsb25nZXIgc3VwcG9ydCBudWxsIHZhbHVlcyAo
aW4gbGluZSB3aXRoIG90aGVyIGxhbmd1YWdlcykKLSAgKiBJbXByb3ZlbWVudHMgaW4gSlNPTiBm
b3JtYXR0aW5nIGFuZCBwYXJzaW5nCi0KLSAgSmF2YXNjcmlwdCAoQWxwaGEpCi0gICogQmV0dGVy
IHN1cHBvcnQgZm9yICJieXRlcyIgZmllbGRzOiBieXRlcyBmaWVsZHMgY2FuIGJlIHJlYWQgYXMg
ZWl0aGVyIGEKLSAgICBiYXNlNjQgc3RyaW5nIG9yIFVJbnQ4QXJyYXkgKGluIGVudmlyb25tZW50
cyB3aGVyZSBUeXBlZEFycmF5IGlzIHN1cHBvcnRlZCkuCi0gICogTmV3IHN1cHBvcnQgZm9yIENv
bW1vbkpTIGltcG9ydHMuICBUaGlzIHNob3VsZCBtYWtlIGl0IGVhc2llciB0byB1c2UgdGhlCi0g
ICAgSmF2YVNjcmlwdCBzdXBwb3J0IGluIE5vZGUuanMgYW5kIHRvb2xzIGxpa2UgV2ViUGFjay4g
IFNlZSBqcy9SRUFETUUubWQgZm9yCi0gICAgbW9yZSBpbmZvcm1hdGlvbi4KLSAgKiBTb21lIHNp
Z25pZmljYW50IGludGVybmFsIHJlZmFjdG9yaW5nIHRvIHNpbXBsaWZ5IGFuZCBtb2R1bGFyaXpl
IHRoZSBjb2RlLgotCi0gIFJ1YnkgKEFscGhhKQotICAqIEpTT04gc2VyaWFsaXphdGlvbiBub3cg
cHJvcGVybHkgdXNlcyBjYW1lbENhc2VkIG5hbWVzLCB3aXRoIGEgcnVudGltZSBvcHRpb24KLSAg
ICB0aGF0IHdpbGwgcHJlc2VydmUgb3JpZ2luYWwgbmFtZXMgZnJvbSAucHJvdG8gZmlsZXMgaW5z
dGVhZC4KLSAgKiBXZWxsLWtub3duIHR5cGVzIGFyZSBub3cgaW5jbHVkZWQgaW4gdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAgKiBSZWxlYXNlIG5vdyBpbmNsdWRlcyBiaW5hcnkgZ2VtcyBmb3IgV2luZG93
cywgTWFjLCBhbmQgTGludXggaW5zdGVhZCBvZiBqdXN0Ci0gICAgc291cmNlIGdlbXMuCi0gICog
QnVnZml4IGZvciBzZXJpYWxpemluZyBvbmVvZnMuCi0KLSAgQysrL0phdmEgTGl0ZSAoQWxwaGEp
Ci0gICAgQSBuZXcgImxpdGUiIGdlbmVyYXRvciBwYXJhbWV0ZXIgd2FzIGludHJvZHVjZWQgaW4g
dGhlIHByb3RvYyBmb3IgQysrIGFuZAotICAgIEphdmEgZm9yIFByb3RvMyBzeW50YXggbWVzc2Fn
ZXMuIEV4YW1wbGUgdXNhZ2U6Ci0KLSAgICAgLi9wcm90b2MgLS1jcHBfb3V0PWxpdGU6JE9VVFBV
VF9QQVRIIGZvby5wcm90bwotCi0gICAgVGhlIHByb3RvYyB3aWxsIHRyZWF0IHRoZSBjdXJyZW50
IGlucHV0IGFuZCBhbGwgdGhlIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzCi0gICAgYXMgTElURS4g
VGhlIHNhbWUgZ2VuZXJhdG9yIHBhcmFtZXRlciBtdXN0IGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhl
Ci0gICAgZGVwZW5kZW5jaWVzLgotCi0gICAgSW4gUHJvdG8zIHN5bnRheCBmaWxlcywgIm9wdGlt
aXplZF9mb3I9TElURV9SVU5USU1FIiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgotCi0KLTIwMTUt
MTItMzAgdmVyc2lvbiAzLjAuMC1iZXRhLTIgKEMrKy9KYXZhL1B5dGhvbi9SdWJ5L05hbm8vT2Jq
ZWN0aXZlLUMvQyMvSmF2YVNjcmlwdCkKLSAgR2VuZXJhbAotICAqIEludHJvZHVjZWQgYSBuZXcg
bGFuZ3VhZ2UgaW1wbGVtZW50YXRpb246IEphdmFTY3JpcHQuCi0gICogQWRkZWQgYSBuZXcgZmll
bGQgb3B0aW9uICJqc29uX25hbWUiLiBCeSBkZWZhdWx0IHByb3RvIGZpZWxkIG5hbWVzIGFyZQot
ICAgIGNvbnZlcnRlZCB0byAibG93ZXJDYW1lbENhc2UiIGluIHByb3RvMyBKU09OIGZvcm1hdC4g
VGhpcyBvcHRpb24gY2FuIGJlCi0gICAgdXNlZCB0byBvdmVycmlkZSB0aGlzIGJlaGF2aW9yIGFu
ZCBzcGVjaWZ5IGEgZGlmZmVyZW50IEpTT04gbmFtZSBmb3IgdGhlCi0gICAgZmllbGQuCi0gICog
QWRkZWQgY29uZm9ybWFuY2UgdGVzdHMgdG8gZW5zdXJlIGltcGxlbWVudGF0aW9ucyBhcmUgZm9s
bG93aW5nIHByb3RvMyBKU09OCi0gICAgc3BlY2lmaWNhdGlvbi4KLQotICBDKysgKEJldGEpCi0g
ICogVmFyaW91cyBidWcgZml4ZXMgYW5kIGltcHJvdmVtZW50cyB0byB0aGUgSlNPTiBzdXBwb3J0
IHV0aWxpdHk6Ci0gICAgICAtIER1cGxpY2F0ZSBtYXAga2V5cyBpbiBKU09OIGFyZSBub3cgcmVq
ZWN0ZWQgKGkuZS4sIHRyYW5zbGF0aW9uIHdpbGwKLSAgICAgICAgZmFpbCkuCi0gICAgICAtIEZp
eGVkIHdpcmUtZm9ybWF0IGZvciBnb29nbGUucHJvdG9idWYuVmFsdWUvTGlzdFZhbHVlLgotICAg
ICAgLSBGaXhlZCBwcmVjaXNpb24gbG9zcyB3aGVuIGNvbnZlcnRpbmcgZ29vZ2xlLnByb3RvYnVm
LlRpbWVzdGFtcC4KLSAgICAgIC0gRml4ZWQgYSBidWcgd2hlbiBwYXJzaW5nIGludmFsaWQgVVRG
LTggY29kZSBwb2ludHMuCi0gICAgICAtIEZpeGVkIGEgbWVtb3J5IGxlYWsuCi0gICAgICAtIFJl
ZHVjZWQgY2FsbCBzdGFjayB1c2FnZS4KLQotICBKYXZhIChCZXRhKQotICAqIENsZWFuZWQgdXAg
c29tZSB1bnVzZWQgbWV0aG9kcyBvbiBDb2RlZE91dHB1dFN0cmVhbS4KLSAgKiBQcmVzaXplZCBs
aXN0cyBmb3IgcGFja2VkIGZpZWxkcyBkdXJpbmcgcGFyc2luZyBpbiB0aGUgbGl0ZSBydW50aW1l
IHRvCi0gICAgcmVkdWNlIGFsbG9jYXRpb25zIGFuZCBpbXByb3ZlIHBlcmZvcm1hbmNlLgotICAq
IEltcHJvdmVkIHRoZSBwZXJmb3JtYW5jZSBvZiB1bmtub3duIGZpZWxkcyBpbiB0aGUgbGl0ZSBy
dW50aW1lLgotICAqIEludHJvZHVjZWQgVW5zYWZlQnl0ZVN0cmluZ3MgdG8gc3VwcG9ydCB6ZXJv
LWNvcHkgQnl0ZVN0cmluZyBjcmVhdGlvbi4KLSAgKiBWYXJpb3VzIGJ1ZyBmaXhlcyBhbmQgaW1w
cm92ZW1lbnRzIHRvIHRoZSBKU09OIHN1cHBvcnQgdXRpbGl0eToKLSAgICAgIC0gRml4ZWQgYSB0
aHJlYWQtc2FmZXR5IGJ1Zy4KLSAgICAgIC0gQWRkZWQgYSBuZXcgb3B0aW9uIOKAnHByZXNlcnZp
bmdQcm90b0ZpZWxkTmFtZXPigJ0gdG8gSnNvbkZvcm1hdC4KLSAgICAgIC0gQWRkZWQgYSBuZXcg
b3B0aW9uIOKAnGluY2x1ZGluZ0RlZmF1bHRWYWx1ZUZpZWxkc+KAnSB0byBKc29uRm9ybWF0Lgot
ICAgICAgLSBVcGRhdGVkIHRoZSBKU09OIHV0aWxpdHkgdG8gY29tcGx5IHdpdGggcHJvdG8zIEpT
T04gc3BlY2lmaWNhdGlvbi4KLQotICBQeXRob24gKEJldGEpCi0gICogQWRkZWQgcHJvdG8zIEpT
T04gZm9ybWF0IHV0aWxpdHkuIEl0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIGFsbCBmaWVsZCB0eXBl
cwotICAgIGFuZCBhIGZldyB3ZWxsLWtub3duIHR5cGVzIGV4Y2VwdCBmb3IgQW55IGFuZCBTdHJ1
Y3QuCi0gICogQWRkZWQgcnVudGltZSBzdXBwb3J0IGZvciBBbnksIFRpbWVzdGFtcCwgRHVyYXRp
b24gYW5kIEZpZWxkTWFzay4KLSAgKiBbIF0gaXMgbm93IGFjY2VwdGVkIGZvciByZXBlYXRlZCBz
Y2FsYXIgZmllbGRzIGluIHRleHQgZm9ybWF0IHBhcnNlci4KLSAgKiBNYXAgZmllbGRzIG5vdyBo
YXZlIHByb3BlciBPKDEpIHBlcmZvcm1hbmNlIGZvciBsb29rdXAvaW5zZXJ0L2RlbGV0ZQotICAg
IHdoZW4gdXNpbmcgdGhlIFB5dGhvbi9DKysgaW1wbGVtZW50YXRpb24uIFRoZXkgd2VyZSBwcmV2
aW91c2x5IHVzaW5nIE8obikKLSAgICBzZWFyY2gtYmFzZWQgYWxnb3JpdGhtcyBiZWNhdXNlIHRo
ZSBDKysgcmVmbGVjdGlvbiBpbnRlcmZhY2UgZGlkbid0Ci0gICAgc3VwcG9ydCB0cnVlIG1hcCBv
cGVyYXRpb25zLgotCi0gIE9iamVjdGl2ZS1DIChCZXRhKQotICAqIFZhcmlvdXMgYnVnLWZpeGVz
IGFuZCBjb2RlIHR3ZWFrcyB0byBwYXNzIG1vcmUgc3RyaWN0IGNvbXBpbGVyIHdhcm5pbmdzLgot
ICAqIE5vdyBoYXMgY29uZm9ybWFuY2UgdGVzdCBjb3ZlcmFnZSBhbmQgaXMgcGFzc2luZyBhbGwg
dGVzdHMuCi0KLSAgQyMgKEJldGEpCi0gICogVmFyaW91cyBidWctZml4ZXMuCi0gICogQ29kZSBn
ZW5lcmF0aW9uOiBGaWxlcyBnZW5lcmF0ZWQgaW4gZGlyZWN0b3JpZXMgYmFzZWQgb24gbmFtZXNw
YWNlLgotICAqIENvZGUgZ2VuZXJhdGlvbjogSW5jbHVkZSBjb21tZW50cyBmcm9tIC5wcm90byBm
aWxlcyBpbiBYTUwgZG9jCi0gICAgY29tbWVudHMgKG5haXZlbHkpCi0gICogQ29kZSBnZW5lcmF0
aW9uOiBDaGFuZ2Ugb3JnYW5pemF0aW9uL25hbWluZyBvZiAicmVmbGVjdGlvbiBjbGFzcyIgKGFj
Y2VzcwotICAgIHRvIGZpbGUgZGVzY3JpcHRvcikKLSAgKiBDb2RlIGdlbmVyYXRpb24gYW5kIGxp
YnJhcnk6IEFkZCBQYXJzZXIgcHJvcGVydHkgdG8gTWVzc2FnZURlc2NyaXB0b3IsCi0gICAgYW5k
IGludHJvZHVjZSBhIG5vbi1nZW5lcmljIHBhcnNlciB0eXBlLgotICAqIExpYnJhcnk6IEFkZGVk
IFR5cGVSZWdpc3RyeSB0byBzdXBwb3J0IEpTT04gcGFyc2luZy9mb3JtYXR0aW5nIG9mIEFueS4K
LSAgKiBMaWJyYXJ5OiBBZGRlZCBBbnkuUGFjay9VbnBhY2sgc3VwcG9ydC4KLSAgKiBMaWJyYXJ5
OiBJbXBsZW1lbnRlZCBKU09OIHBhcnNpbmcuCi0KLSAgSmF2YXNjcmlwdCAoQWxwaGEpCi0gICog
QWRkZWQgcHJvdG8zIHN1cHBvcnQgZm9yIEphdmFTY3JpcHQuIFRoZSBydW50aW1lIGlzIHdyaXR0
ZW4gaW4gcHVyZQotICAgIEphdmFTY3JpcHQgYW5kIHdvcmtzIGluIGJyb3dzZXJzIGFuZCBpbiBO
b2RlLmpzLiBUbyBnZW5lcmF0ZSBKYXZhU2NyaXB0Ci0gICAgY29kZSBmb3IgeW91ciBwcm90bywg
aW52b2tlIHByb3RvYyB3aXRoICItLWpzX291dCIuIFNlZSBqcy9SRUFETUUubWQKLSAgICBmb3Ig
bW9yZSBidWlsZCBpbnN0cnVjdGlvbnMuCi0KLTIwMTUtMDgtMjYgdmVyc2lvbiAzLjAuMC1iZXRh
LTEgKEMrKy9KYXZhL1B5dGhvbi9SdWJ5L05hbm8vT2JqZWN0aXZlLUMvQyMpCi0gIEFib3V0IEJl
dGEKLSAgKiBUaGlzIGlzIHRoZSBmaXJzdCBiZXRhIHJlbGVhc2Ugb2YgcHJvdG9idWYgdjMuMC4w
LiBOb3QgYWxsIGxhbmd1YWdlcwotICAgIGhhdmUgcmVhY2hlZCBiZXRhIHN0YWdlLiBMYW5ndWFn
ZXMgbm90IG1hcmtlZCBhcyBiZXRhIGFyZSBzdGlsbCBpbgotICAgIGFscGhhIChpLmUuLCBiZSBw
cmVwYXJlZCBmb3IgQVBJIGJyZWFraW5nIGNoYW5nZXMpLgotCi0gIEdlbmVyYWwKLSAgKiBQcm90
bzMgSlNPTiBpcyBzdXBwb3J0ZWQgaW4gc2V2ZXJhbCBsYW5ndWFnZXMgKGZ1bGx5IHN1cHBvcnRl
ZCBpbiBDKysKLSAgICBhbmQgSmF2YSwgcGFydGlhbGx5IHN1cHBvcnRlZCBpbiBSdWJ5L0MjKS4g
VGhlIEpTT04gc3BlYyBpcyBkZWZpbmVkIGluCi0gICAgdGhlIHByb3RvMyBsYW5ndWFnZSBndWlk
ZToKLQotICAgICAgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy9kb2NzL3Byb3RvMyNqc29uCi0KLSAgICBXZSB3aWxsIHB1Ymxpc2ggYSBtb3JlIGRldGFpbGVk
IHNwZWMgdG8gZGVmaW5lIHRoZSBleGFjdCBiZWhhdmlvciBvZgotICAgIHByb3RvMy1jb25mb3Jt
YW50IEpTT04gc2VyaWFsaXplcnMgYW5kIHBhcnNlcnMuIFVudGlsIHRoZW4sIGRvIG5vdCByZWx5
Ci0gICAgb24gc3BlY2lmaWMgYmVoYXZpb3JzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpZiBpdOKA
mXMgbm90IGRvY3VtZW50ZWQgaW4KLSAgICB0aGUgYWJvdmUgc3BlYy4gTW9yZSBzcGVjaWZpY2Fs
bHksIHRoZSBiZWhhdmlvciBpcyBub3QgeWV0IGZpbmFsaXplZCBmb3IKLSAgICB0aGUgZm9sbG93
aW5nOgotICAgICAgLSBQYXJzaW5nIGludmFsaWQgSlNPTiBpbnB1dCAoZS5nLiwgaW5wdXQgd2l0
aCB0cmFpbGluZyBjb21tYXMpLgotICAgICAgLSBOb24tY2FtZWxDYXNlIG5hbWVzIGluIEpTT04g
aW5wdXQuCi0gICAgICAtIFRoZSBzYW1lIGZpZWxkIGFwcGVhcnMgbXVsdGlwbGUgdGltZXMgaW4g
SlNPTiBpbnB1dC4KLSAgICAgIC0gSlNPTiBhcnJheXMgY29udGFpbiDigJxudWxs4oCdIHZhbHVl
cy4KLSAgICAgIC0gVGhlIG1lc3NhZ2UgaGFzIHVua25vd24gZmllbGRzLgotCi0gICogUHJvdG8z
IG5vdyBlbmZvcmNlcyBzdHJpY3QgVVRGLTggY2hlY2tpbmcuIFBhcnNpbmcgd2lsbCBmYWlsIGlm
IGEgc3RyaW5nCi0gICAgZmllbGQgY29udGFpbnMgbm9uIFVURi04IGRhdGEuCi0KLSAgQysrIChC
ZXRhKQotICAqIEludHJvZHVjZWQgbmV3IHV0aWxpdHkgZnVuY3Rpb25zL2NsYXNzZXMgaW4gdGhl
IGdvb2dsZS9wcm90b2J1Zi91dGlsCi0gICAgZGlyZWN0b3J5OgotICAgICAgLSBNZXNzYWdlRGlm
ZmVyZW5jZXI6IGNvbXBhcmUgdHdvIHByb3RvIG1lc3NhZ2VzIGFuZCByZXBvcnQgdGhlaXIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlcy4KLSAgICAgIC0gSnNvblV0aWw6
IHN1cHBvcnQgY29udmVydGluZyBwcm90b2J1ZiBiaW5hcnkgZm9ybWF0IHRvL2Zyb20gSlNPTi4K
LSAgICAgIC0gVGltZVV0aWw6IHV0aWxpdHkgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aCB3ZWxsLWtu
b3duIHR5cGVzIFRpbWVzdGFtcAotICAgICAgICAgICAgICAgICAgYW5kIER1cmF0aW9uLgotICAg
ICAgLSBGaWVsZE1hc2tVdGlsOiB1dGlsaXR5IGZ1bmN0aW9ucyB0byB3b3JrIHdpdGggRmllbGRN
YXNrLgotCi0gICogUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9mIGFyZW5hIGNvbnN0cnVjdGlv
biBhbmQgZGVzdHJ1Y3Rpb24uCi0gICogQnVnIGZpeGVzIGZvciBhcmVuYSBhbmQgbWFwcyBzdXBw
b3J0LgotICAqIENoYW5nZWQgdG8gdXNlIGNtYWtlIGZvciBXaW5kb3dzIFZpc3VhbCBTdHVkaW8g
YnVpbGRzLgotICAqIEFkZGVkIEJhemVsIHN1cHBvcnQuCi0KLSAgSmF2YSAoQmV0YSkKLSAgKiBJ
bnRyb2R1Y2VkIGEgbmV3IHV0aWwgcGFja2FnZSB0aGF0IHdpbGwgYmUgZGlzdHJpYnV0ZWQgYXMg
YSBzZXBhcmF0ZQotICAgIGFydGlmYWN0IGluIG1hdmVuLiBJdCBjb250YWluczoKLSAgICAgIC0g
SnNvbkZvcm1hdDogY29udmVydCBwcm90byBtZXNzYWdlcyB0by9mcm9tIEpTT04uCi0gICAgICAt
IFRpbWVVdGlsOiB1dGlsaXR5IGZ1bmN0aW9ucyB0byB3b3JrIHdpdGggVGltZXN0YW1wIGFuZCBE
dXJhdGlvbi4KLSAgICAgIC0gRmllbGRNYXNrVXRpbDogdXRpbGl0eSBmdW5jdGlvbnMgdG8gd29y
ayB3aXRoIEZpZWxkTWFzay4KLQotICAqIFRoZSBzdGF0aWMgUEFSU0VSIGluIGVhY2ggZ2VuZXJh
dGVkIG1lc3NhZ2UgaXMgZGVwcmVjYXRlZCwgYW5kIGl0IHdpbGwKLSAgICBiZSByZW1vdmVkIGlu
IGEgZnV0dXJlIHJlbGVhc2UuIEEgc3RhdGljIHBhcnNlcigpIGdldHRlciBpcyBnZW5lcmF0ZWQK
LSAgICBmb3IgZWFjaCBtZXNzYWdlIHR5cGUgaW5zdGVhZC4KLSAgKiBQZXJmb3JtYW5jZSBvcHRp
bWl6YXRpb25zIGZvciBTdHJpbmcgZmllbGRzIHNlcmlhbGl6YXRpb24uCi0gICogUGVyZm9ybWFu
Y2Ugb3B0aW1pemF0aW9ucyBmb3IgTGl0ZSBydW50aW1lIG9uIEFuZHJvaWQ6Ci0gICAgICAtIFJl
ZHVjZWQgYWxsb2NhdGlvbnMKLSAgICAgIC0gUmVkdWNlZCBtZXRob2Qgb3ZlcmhlYWQgYWZ0ZXIg
UHJvR3VhcmRpbmcKLSAgICAgIC0gUmVkdWNlZCBjb2RlIHNpemUgYWZ0ZXIgUHJvR3VhcmRpbmcK
LQotICBQeXRob24gKEFscGhhKQotICAqIFJlbW92ZWQgbGVnYWN5IFB5dGhvbiAyLjUgc3VwcG9y
dC4KLSAgKiBNb3ZlZCB0byBhIHNpbmdsZSBQeXRob24gMi54LzMueC1jb21wYXRpYmxlIGNvZGVi
YXNlLCBpbnN0ZWFkIG9mIHVzaW5nIDJ0bzMuCi0gICogRml4ZWQgYnVpbGQvdGVzdHMgb24gUHl0
aG9uIDIuNiwgMi43LCAzLjMsIGFuZCAzLjQuCi0gICAgICAtIFB1cmUtUHl0aG9uIHdvcmtzIG9u
IGFsbCBmb3VyLgotICAgICAgLSBQeXRob24vQysrIGltcGxlbWVudGF0aW9uIHdvcmtzIG9uIGFs
bCBidXQgMy40LCBkdWUgdG8gY2hhbmdlcyBpbiB0aGUKLSAgICAgICAgUHl0aG9uL0MrKyBBUEkg
aW4gMy40LgotICAqIFNvbWUgcHJlbGltaW5hcnkgd29yayBoYXMgYmVlbiBkb25lIHRvIGFsbG93
IGZvciBtdWx0aXBsZSBEZXNjcmlwdG9yUG9vbHMKLSAgICB3aXRoIFB5dGhvbi9DKysuCi0KLSAg
UnVieSAoQWxwaGEpCi0gICogTWFueSBidWdmaXhlczoKLSAgICAgIC0gZml4ZWQgcGFyc2luZy9z
ZXJpYWxpemF0aW9uIG9mIGJ5dGVzLCBzaW50LCBzZml4ZWQgdHlwZXMKLSAgICAgIC0gb3RoZXIg
cGFyc2VyIGJ1Z2ZpeGVzCi0gICAgICAtIGZpeGVkIG1lbW9yeSBsZWFrIGFmZmVjdGluZyBSdWJ5
IDIuMgotCi0gIEphdmFOYW5vIChBbHBoYSkKLSAgKiBKYXZhTmFubyBnZW5lcmF0ZWQgY29kZSBu
b3cgd2lsbCBiZSBwdXQgaW4gYSBuYW5vIHBhY2thZ2UgYnkgZGVmYXVsdCB0bwotICAgIGF2b2lk
IGNvbmZsaWN0cyB3aXRoIEphdmEgZ2VuZXJhdGVkIGNvZGUuCi0KLSAgT2JqZWN0aXZlLUMgKEFs
cGhhKQotICAqIEFkZGVkIG5vbi1udWxsIG1hcmt1cCB0byBPYmpDIGxpYnJhcnkuIFJlcXVpcmVz
IFNESyA4LjQrIHRvIGJ1aWxkLgotICAqIE1hbnkgYnVnZml4ZXM6Ci0gICAgICAtIFJlbW92ZWQg
dGhlIGNsYXNzL2VudW0gZmlsdGVyLgotICAgICAgLSBSZW5hbWVkIHNvbWUgaW50ZXJuYWwgdHlw
ZXMgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdGhlIHdlbGwta25vd24gdHlwZXMKLSAgICAgICAg
cHJvdG9zLgotICAgICAgLSBBZGRlZCBtaXNzaW5nIHN1cHBvcnQgZm9yIHBhcnNpbmcgcmVwZWF0
ZWQgcHJpbWl0aXZlIGZpZWxkcyBpbiBwYWNrZWQgb3IKLSAgICAgICAgdW5wYWNrZWQgZm9ybXMu
Ci0gICAgICAtIEFkZGVkICpDb3VudCBmb3IgcmVwZWF0ZWQgYW5kIG1hcDw+IGZpZWxkcyB0byBh
dm9pZCBhdXRvLWNyZWF0ZSB3aGVuCi0gICAgICAgIGNoZWNraW5nIGZvciB0aGVtIGJlaW5nIHNl
dC4KLQotICBDIyAoQWxwaGEpCi0gICogTmFtZXNwYWNlIGNoYW5nZWQgdG8gR29vZ2xlLlByb3Rv
YnVmIChhbmQgTnVHZXQgcGFja2FnZSB3aWxsIGJlIG5hbWVkCi0gICAgY29ycmVzcG9uZGluZ2x5
KS4KLSAgKiBUYXJnZXQgcGxhdGZvcm1zIG5vdyAuTkVUIDQuNSBhbmQgc2VsZWN0ZWQgcG9ydGFi
bGUgc3Vic2V0cyBvbmx5LgotICAqIFJlbW92ZWQgbGl0ZSBydW50aW1lLgotICAqIFJlaW1wbGVt
ZW50YXRpb24gdG8gdXNlIG11dGFibGUgbWVzc2FnZSB0eXBlcy4KLSAgKiBOdWxsIHJlZmVyZW5j
ZXMgdXNlZCB0byByZXByZXNlbnQgIm5vIHZhbHVlIiBmb3IgbWVzc2FnZSB0eXBlIGZpZWxkcy4K
LSAgKiBQcm90bzMgc2VtYW50aWNzIHN1cHBvcnRlZDsgcHJvdG8yIGZpbGVzIGFyZSBwcm9oaWJp
dGVkIGZvciBDIyBjb2RlZ2VuLgotICAgIE1vc3QgcHJvdG8zIGZlYXR1cmVzIHN1cHBvcnRlZDoK
LSAgICAgIC0gSlNPTiBmb3JtYXR0aW5nIChhLmsuYS4gc2VyaWFsaXphdGlvbiB0byBKU09OKSwg
aW5jbHVkaW5nIHdlbGwta25vd24KLSAgICAgICAgdHlwZXMgKGV4Y2VwdCBmb3IgQW55KS4KLSAg
ICAgIC0gV3JhcHBlciB0eXBlcyBtYXBwZWQgdG8gbnVsbGFibGUgdmFsdWUgdHlwZXMgKG9yIHN0
cmluZy9CeXRlU3RyaW5nCi0gICAgICAgIGFsbG93aW5nIG51bGxhYmlsaXR5KS4gSlNPTiBwYXJz
aW5nIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgotICAgICAgLSBtYXBzCi0gICAgICAtIG9uZW9mCi0g
ICAgICAtIGVudW0gdW5rbm93biB2YWx1ZSBwcmVzZXJ2YXRpb24KLQotMjAxNS0wNS0yNSB2ZXJz
aW9uIDMuMC4wLWFscGhhLTMgKE9iamVjdGl2ZS1DL0MjKToKLSAgR2VuZXJhbAotICAqIEludHJv
ZHVjZWQgdHdvIG5ldyBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbnMgKE9iamVjdGl2ZS1DLCBDIykg
dG8gcHJvdG8zLgotICAqIEV4cGxpY2l0ICJvcHRpb25hbCIga2V5d29yZCBhcmUgZGlzYWxsb3dl
ZCBpbiBwcm90bzMgc3ludGF4LCBhcyBmaWVsZHMgYXJlCi0gICAgb3B0aW9uYWwgYnkgZGVmYXVs
dC4KLSAgKiBHcm91cCBmaWVsZHMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gcHJvdG8zIHN5
bnRheC4KLSAgKiBDaGFuZ2VkIHJlcGVhdGVkIHByaW1pdGl2ZSBmaWVsZHMgdG8gdXNlIHBhY2tl
ZCBzZXJpYWxpemF0aW9uIGJ5IGRlZmF1bHQgaW4KLSAgICBwcm90bzMgKGltcGxlbWVudGVkIGZv
ciBDKyssIEphdmEsIFB5dGhvbiBpbiB0aGlzIHJlbGVhc2UpLiAgVGhlIHVzZXIgY2FuCi0gICAg
c3RpbGwgZGlzYWJsZSBwYWNrZWQgc2VyaWFsaXphdGlvbiBieSBzZXR0aW5nIHBhY2tlZCB0byBm
YWxzZSBmb3Igbm93LgotICAqIEFkZGVkIHdlbGwta25vd24gdHlwZSBwcm90b3MgKGFueS5wcm90
bywgZW1wdHkucHJvdG8sIHRpbWVzdGFtcC5wcm90bywKLSAgICBkdXJhdGlvbi5wcm90bywgZXRj
LikuIFVzZXJzIGNhbiBpbXBvcnQgYW5kIHVzZSB0aGVzZSBwcm90b3MganVzdCBsaWtlCi0gICAg
cmVndWxhciBwcm90byBmaWxlcy4gQWRkaXRpb25hbCBydW50aW1lIHN1cHBvcnQgd2lsbCBiZSBh
ZGRlZCBmb3IgdGhlbSBpbgotICAgIGZ1dHVyZSByZWxlYXNlcyAoaW4gdGhlIGZvcm0gb2YgdXRp
bGl0eSBoZWxwZXIgZnVuY3Rpb25zLCBvciBoYXZpbmcgdGhlbQotICAgIHJlcGxhY2VkIGJ5IGxh
bmd1YWdlIHNwZWNpZmljIHR5cGVzIGluIGdlbmVyYXRlZCBjb2RlKS4KLSAgKiBBZGRlZCBhICJy
ZXNlcnZlZCIga2V5d29yZCBpbiBib3RoIHByb3RvMiBhbmQgcHJvdG8zIHN5bnRheC4gVXNlciBj
YW4gdXNlCi0gICAgdGhpcyBrZXl3b3JkIHRvIGRlY2xhcmUgcmVzZXJ2ZWQgZmllbGQgbnVtYmVy
cyBhbmQgbmFtZXMgdG8gcHJldmVudCB0aGVtCi0gICAgZnJvbSBiZWluZyByZXVzZWQgYnkgb3Ro
ZXIgZmllbGRzIGluIHRoZSBzYW1lIG1lc3NhZ2UuCi0KLSAgICBUbyByZXNlcnZlIGZpZWxkIG51
bWJlcnMsIGFkZCBhIHJlc2VydmVkIGRlY2xhcmF0aW9uIGluIHlvdXIgbWVzc2FnZToKLQotICAg
ICAgbWVzc2FnZSBUZXN0TWVzc2FnZSB7Ci0gICAgICAgIHJlc2VydmVkIDIsIDE1LCA5IHRvIDEx
LCAzOwotICAgICAgfQotCi0gICAgVGhpcyByZXNlcnZlcyBmaWVsZCBudW1iZXJzIDIsIDMsIDks
IDEwLCAxMSBhbmQgMTUuIElmIGEgdXNlciB1c2VzIGFueSBvZgotICAgIHRoZXNlIGFzIGZpZWxk
IG51bWJlcnMsIHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIgd2lsbCByZXBvcnQgYW4gZXJy
b3IuCi0KLSAgICBGaWVsZCBuYW1lcyBjYW4gYWxzbyBiZSByZXNlcnZlZDoKLQotICAgICAgbWVz
c2FnZSBUZXN0TWVzc2FnZSB7Ci0gICAgICAgIHJlc2VydmVkICJmb28iLCAiYmFyIjsKLSAgICAg
IH0KLQotICAqIFZhcmlvdXMgYnVnIGZpeGVzIHNpbmNlIDMuMC4wLWFscGhhLTIKLQotICBPYmpl
Y3RpdmUtQwotICAgIE9iamVjdGl2ZS1DIGluY2x1ZGVzIGEgY29kZSBnZW5lcmF0b3IgYW5kIGEg
bmF0aXZlIG9iamVjdGl2ZS1jIHJ1bnRpbWUKLSAgICBsaWJyYXJ5LiAgQnkgYWRkaW5nIOKAnC0t
b2JqY19vdXTigJ0gdG8gcHJvdG9jLCB0aGUgY29kZSBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZQot
ICAgIGEgaGVhZGVyKCoucGJvYmpjLmgpIGFuZCBhbiBpbXBsZW1lbnRhdGlvbiBmaWxlKCoucGJv
YmpjLm0pIGZvciBlYWNoIHByb3RvCi0gICAgZmlsZS4KLQotICAgIEluIHRoaXMgZmlyc3QgcmVs
ZWFzZSwgdGhlIGdlbmVyYXRlZCBpbnRlcmZhY2UgcHJvdmlkZXM6IGVudW1zLCBtZXNzYWdlcywK
LSAgICBmaWVsZCBzdXBwb3J0KHNpbmdsZSwgcmVwZWF0ZWQsIG1hcCwgb25lb2YpLCBwcm90bzIg
YW5kIHByb3RvMyBzeW50YXgKLSAgICBzdXBwb3J0LCBwYXJzaW5nIGFuZCBzZXJpYWxpemF0aW9u
LiBJdOKAmXMgIGNvbXBhdGlibGUgd2l0aCBBUkMgYW5kIG5vbi1BUkMKLSAgICB1c2FnZS4gQmVz
aWRlcywgdXNlciBjYW4gYWxzbyBhY2Nlc3MgaXQgdmlhIHRoZSBzd2lmdCBicmlkZ2luZyBoZWFk
ZXIuCi0KLSAgICBTZWUgb2JqZWN0aXZlYy9SRUFETUUubWQgZm9yIGRldGFpbHMuCi0KLSAgQyMK
LSAgICAqIEMjIHByb3RvYnVmcyBhcmUgYmFzZWQgb24gcHJvamVjdAotICAgICAgaHR0cHM6Ly9n
aXRodWIuY29tL2pza2VldC9wcm90b2J1Zi1jc2hhcnAtcG9ydC4gVGhlIG9yaWdpbmFsIHByb2pl
Y3Qgd2FzCi0gICAgICBmcm96ZW4gYW5kIGFsbCB0aGUgbmV3IGRldmVsb3BtZW50IHdpbGwgaGFw
cGVuIGhlcmUuCi0gICAgKiBDb2RlZ2VuIHBsdWdpbiBmb3IgQyMgd2FzIGNvbXBsZXRlbHkgcmV3
cml0dGVuIHRvIEMrKyBhbmQgaXMgbm93IGFuCi0gICAgICBpbnRlZ3JhbCBwYXJ0IG9mIHByb3Rv
Yy4KLSAgICAqIFNvbWUgcmVmYWN0b3JpbmdzIGFuZCBjbGVhbnVwIGhhcyBiZWVuIGFwcGxpZWQg
dG8gdGhlIEMjIHJ1bnRpbWUgbGlicmFyeS4KLSAgICAqIE9ubHkgcHJvdG8yIGlzIHN1cHBvcnRl
ZCBpbiBDIyBhdCB0aGUgbW9tZW50LCBwcm90bzMgc3VwcG9ydCBpcyBpbgotICAgICAgcHJvZ3Jl
c3MgYW5kIHdpbGwgbGlrZWx5IGJyaW5nIHNpZ25pZmljYW50IGJyZWFraW5nIGNoYW5nZXMgdG8g
dGhlIEFQSS4KLQotICAgIFNlZSBjc2hhcnAvUkVBRE1FLm1kIGZvciBkZXRhaWxzLgotCi0gIEMr
KwotICAgICogQWRkZWQgcnVudGltZSBzdXBwb3J0IGZvciBBbnkgdHlwZS4gVG8gdXNlIEFueSBp
biB5b3VyIHByb3RvIGZpbGUsIGZpcnN0Ci0gICAgICBpbXBvcnQgdGhlIGRlZmluaXRpb24gb2Yg
QW55OgotCi0gICAgICAgIC8vIGZvby5wcm90bwotICAgICAgICBpbXBvcnQgImdvb2dsZS9wcm90
b2J1Zi9hbnkucHJvdG8iOwotICAgICAgICBtZXNzYWdlIEZvbyB7Ci0gICAgICAgICAgZ29vZ2xl
LnByb3RvYnVmLkFueSBhbnlfZmllbGQgPSAxOwotICAgICAgICB9Ci0gICAgICAgIG1lc3NhZ2Ug
QmFyIHsKLSAgICAgICAgICBpbnQzMiB2YWx1ZSA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgVGhl
biBpbiBDKysgeW91IGNhbiBhY2Nlc3MgdGhlIEFueSBmaWVsZCB1c2luZyBQYWNrRnJvbSgpL1Vu
cGFja1RvKCkKLSAgICAgIG1ldGhvZHM6Ci0KLSAgICAgICAgRm9vIGZvbzsKLSAgICAgICAgQmFy
IGJhciA9IC4uLjsKLSAgICAgICAgZm9vLm11dGFibGVfYW55X2ZpZWxkKCktPlBhY2tGcm9tKGJh
cik7Ci0gICAgICAgIC4uLgotICAgICAgICBpZiAoZm9vLmFueV9maWVsZCgpLklzVHlwZTxCYXI+
KCkpIHsKLSAgICAgICAgICBmb28uYW55X2ZpZWxkKCkuVW5wYWNrVG8oJmJhcik7Ci0gICAgICAg
ICAgLi4uCi0gICAgICAgIH0KLSAgICAqIEluIHRleHQgZm9ybWF0LCBlbnRyaWVzIG9mIGEgbWFw
IGZpZWxkIHdpbGwgYmUgc29ydGVkIGJ5IGtleS4KLQotICBKYXZhCi0gICAgKiBDb250aW51ZWQg
b3B0aW1pemF0aW9ucyBvbiB0aGUgbGl0ZSBydW50aW1lIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ug
Zm9yCi0gICAgICBBbmRyb2lkLgotCi0gIFB5dGhvbgotICAgICogQWRkZWQgbWFwIHN1cHBvcnQu
Ci0gICAgICAtIG1hcHMgbm93IGhhdmUgYSBkaWN0LWxpa2UgaW50ZXJmYWNlIChtc2cubWFwX2Zp
ZWxkW2tleV0gPSB2YWx1ZSkKLSAgICAgIC0gZXhpc3RpbmcgY29kZSB0aGF0IG1vZGlmaWVzIG1h
cHMgdmlhIHRoZSByZXBlYXRlZCBmaWVsZCBpbnRlcmZhY2UKLSAgICAgICAgd2lsbCBuZWVkIHRv
IGJlIHVwZGF0ZWQuCi0KLSAgUnVieQotICAgICogSW1wcm92ZW1lbnRzIHRvIFJlcGVhdGVkRmll
bGQncyBlbXVsYXRpb24gb2YgdGhlIFJ1YnkgQXJyYXkgQVBJLgotICAgICogVmFyaW91cyBzcGVl
ZHVwcyBhbmQgaW50ZXJuYWwgY2xlYW51cHMuCi0KLTIwMTUtMDItMjYgdmVyc2lvbiAzLjAuMC1h
bHBoYS0yIChQeXRob24vUnVieS9KYXZhTmFubyk6Ci0gIEdlbmVyYWwKLSAgKiBJbnRyb2R1Y2Vk
IHRocmVlIG5ldyBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbnMgKFJ1YnksIEphdmFOYW5vLCBhbmQK
LSAgICBQeXRob24pIHRvIHByb3RvMy4KLSAgKiBWYXJpb3VzIGJ1ZyBmaXhlcyBzaW5jZSAzLjAu
MC1hbHBoYS0xCi0KLSAgUHl0aG9uOgotICAgIFB5dGhvbiBoYXMgcmVjZWl2ZWQgc2V2ZXJhbCB1
cGRhdGVzLCBtb3N0IG5vdGFibHkgc3VwcG9ydCBmb3IgcHJvdG8zCi0gICAgc2VtYW50aWNzIGlu
IGFueSAucHJvdG8gZmlsZSB0aGF0IGRlY2xhcmVzIHN5bnRheD0icHJvdG8zIi4KLSAgICBNZXNz
YWdlcyBkZWNsYXJlZCBpbiBwcm90bzMgZmlsZXMgbm8gbG9uZ2VyIHJlcHJlc2VudCBmaWVsZCBw
cmVzZW5jZQotICAgIGZvciBzY2FsYXIgZmllbGRzIChudW1iZXIsIGVudW1zLCBib29sZWFucywg
b3Igc3RyaW5ncykuICBZb3UgY2FuCi0gICAgbm8gbG9uZ2VyIGNhbGwgSGFzRmllbGQoKSBmb3Ig
c3VjaCBmaWVsZHMsIGFuZCB0aGV5IGFyZSBzZXJpYWxpemVkCi0gICAgYmFzZWQgb24gd2hldGhl
ciB0aGV5IGhhdmUgYSBub24temVyby9lbXB0eS9mYWxzZSB2YWx1ZS4KLQotICAgIE9uZSBvdGhl
ciBub3RhYmxlIGNoYW5nZSBpcyBpbiB0aGUgQysrLWFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9u
LgotICAgIERlc2NyaXB0b3Igb2JqZWN0cyAod2hpY2ggZGVzY3JpYmUgdGhlIHByb3RvYnVmIHNj
aGVtYSBhbmQgYWxsb3cKLSAgICByZWZsZWN0aW9uIG92ZXIgaXQpIGFyZSBubyBsb25nZXIgZHVw
bGljYXRlZCBiZXR3ZWVuIHRoZSBQeXRob24KLSAgICBhbmQgQysrIGxheWVycy4gIFRoZSBQeXRo
b24gZGVzY3JpcHRvcnMgYXJlIG5vdyBzaW1wbGUgd3JhcHBlcnMKLSAgICBhcm91bmQgdGhlIEMr
KyBkZXNjcmlwdG9ycy4gIFRoaXMgY2hhbmdlIHNob3VsZCBzaWduaWZpY2FudGx5Ci0gICAgcmVk
dWNlIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgcHJvZ3JhbXMgdGhhdCB1c2UgYSBsb3Qgb2YgbWVzc2Fn
ZQotICAgIHR5cGVzLgotCi0gIFJ1Ynk6Ci0gICAgV2UgaGF2ZSBhZGRlZCBwcm90bzMgc3VwcG9y
dCBmb3IgUnVieSB2aWEgYSBuYXRpdmUgQyBleHRlbnNpb24uCi0KLSAgICBUaGUgUnVieSBleHRl
bnNpb24gaXRzZWxmIGlzIGluY2x1ZGVkIGluIHRoZSBydWJ5LyBkaXJlY3RvcnksIGFuZCBkZXRh
aWxzIG9uCi0gICAgYnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgdGhlIGV4dGVuc2lvbiBhcmUgaW4g
cnVieS9SRUFETUUubWQuIFRoZSBleHRlbnNpb24KLSAgICB3aWxsIGFsc28gYmUgcHVibGlzaGVk
IGFzIGEgUnVieSBnZW0uIENvZGUgZ2VuZXJhdG9yIHN1cHBvcnQgaXMgaW5jbHVkZWQgYXMKLSAg
ICBwYXJ0IG9mIGBwcm90b2NgIHdpdGggdGhlIGAtLXJ1Ynlfb3V0YCBmbGFnLgotCi0gICAgVGhl
IFJ1YnkgZXh0ZW5zaW9uIGltcGxlbWVudHMgYSB1c2VyLWZyaWVuZGx5IERTTCB0byBkZWZpbmUg
bWVzc2FnZSB0eXBlcwotICAgIChhbHNvIGdlbmVyYXRlZCBieSB0aGUgY29kZSBnZW5lcmF0b3Ig
ZnJvbSBgLnByb3RvYCBmaWxlcykuICBPbmNlIGEgbWVzc2FnZQotICAgIHR5cGUgaXMgZGVmaW5l
ZCwgdGhlIHVzZXIgbWF5IGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhlIG1lc3NhZ2UgdGhhdCBiZWhh
dmUgaW4KLSAgICB3YXlzIGlkaW9tYXRpYyB0byBSdWJ5LiBGb3IgZXhhbXBsZToKLQotICAgIC0g
TWVzc2FnZSBmaWVsZHMgYXJlIHByZXNlbnQgYXMgb3JkaW5hcnkgUnVieSBwcm9wZXJ0aWVzIChn
ZXR0ZXIgbWV0aG9kCi0gICAgICBgZm9vYCBhbmQgc2V0dGVyIG1ldGhvZCBgZm9vPWApLgotICAg
IC0gUmVwZWF0ZWQgZmllbGQgZWxlbWVudHMgYXJlIHN0b3JlZCBpbiBhIGNvbnRhaW5lciB0aGF0
IGFjdHMgbGlrZSBhIG5hdGl2ZQotICAgICAgUnVieSBhcnJheSwgYW5kIG1hcCBlbGVtZW50cyBh
cmUgc3RvcmVkIGluIGEgY29udGFpbmVyIHRoYXQgYWN0cyBsaWtlIGEKLSAgICAgIG5hdGl2ZSBS
dWJ5IGhhc2htYXAuCi0gICAgLSBUaGUgdXN1YWwgd2VsbC1rbm93biBtZXRob2RzLCBzdWNoIGFz
IGAjdG9fc2AsIGAjZHVwYCwgYW5kIHRoZSBsaWtlLCBhcmUKLSAgICAgIHByZXNlbnQuCi0KLSAg
ICBVbmxpa2Ugc2V2ZXJhbCBleGlzdGluZyB0aGlyZC1wYXJ0eSBSdWJ5IGV4dGVuc2lvbnMgZm9y
IHByb3RvYnVmLCB0aGlzCi0gICAgZXh0ZW5zaW9uIGlzIGJ1aWx0IG9uIGEgInN0cm9uZ2x5LXR5
cGVkIiBwaGlsb3NvcGh5OiBtZXNzYWdlIGZpZWxkcyBhbmQKLSAgICBhcnJheS9tYXAgY29udGFp
bmVycyB3aWxsIHRocm93IGV4Y2VwdGlvbnMgZWFnZXJseSB3aGVuIHZhbHVlcyBvZiB0aGUKLSAg
ICBpbmNvcnJlY3QgdHlwZSBhcmUgaW5zZXJ0ZWQuCi0KLSAgICBTZWUgcnVieS9SRUFETUUubWQg
Zm9yIGRldGFpbHMuCi0KLSAgSmF2YU5hbm86Ci0gICAgSmF2YU5hbm8gaXMgYSBzcGVjaWFsIGNv
ZGUgZ2VuZXJhdG9yIGFuZCBydW50aW1lIGxpYnJhcnkgZGVzaWduZWQgZXNwZWNpYWxseQotICAg
IGZvciByZXNvdXJjZS1yZXN0cmljdGVkIHN5c3RlbXMsIGxpa2UgQW5kcm9pZC4gSXQgaXMgdmVy
eSByZXNvdXJjZS1mcmllbmRseQotICAgIGluIGJvdGggdGhlIGFtb3VudCBvZiBjb2RlIGFuZCB0
aGUgcnVudGltZSBvdmVyaGVhZC4gSGVyZSBpcyBhbiBhbiBvdmVydmlldwotICAgIG9mIEphdmFO
YW5vIGZlYXR1cmVzIGNvbXBhcmVkIHdpdGggdGhlIG9mZmljaWFsIEphdmEgcHJvdG9idWY6Ci0K
LSAgICAtIE5vIGRlc2NyaXB0b3JzIG9yIG1lc3NhZ2UgYnVpbGRlcnMuCi0gICAgLSBBbGwgbWVz
c2FnZXMgYXJlIG11dGFibGU7IGZpZWxkcyBhcmUgcHVibGljIEphdmEgZmllbGRzLgotICAgIC0g
Rm9yIG9wdGlvbmFsIGZpZWxkcyBvbmx5LCBlbmNhcHN1bGF0aW9uIGJlaGluZCBzZXR0ZXIvZ2V0
dGVyL2hhenplci8KLSAgICAgIGNsZWFyZXIgZnVuY3Rpb25zIGlzIG9wdC1pbiwgd2hpY2ggcHJv
dmlkZSBwcm9wZXIgJ2hhcycgc3RhdGUgc3VwcG9ydC4KLSAgICAtIEZvciBwcm90bzIsIGlmIG5v
dCBvcHRlZCBpbiwgaGFzIHN0YXRlIChmaWVsZCBwcmVzZW5jZSkgaXMgbm90IGF2YWlsYWJsZS4K
LSAgICAgIFNlcmlhbGl6YXRpb24gb3V0cHV0cyBhbGwgZmllbGRzIG5vdCBlcXVhbCB0byB0aGVp
ciBkZWZhdWx0cy4KLSAgICAgIFRoZSBiZWhhdmlvciBpcyBjb25zaXN0ZW50IHdpdGggcHJvdG8z
IHNlbWFudGljcy4KLSAgICAtIFJlcXVpcmVkIGZpZWxkcyAocHJvdG8yIG9ubHkpIGFyZSBhbHdh
eXMgc2VyaWFsaXplZC4KLSAgICAtIEVudW0gY29uc3RhbnRzIGFyZSBpbnRlZ2VyczsgcHJvdGVj
dGlvbiBhZ2FpbnN0IGludmFsaWQgdmFsdWVzIG9ubHkKLSAgICAgIHdoZW4gcGFyc2luZyBmcm9t
IHRoZSB3aXJlLgotICAgIC0gRW51bSBjb25zdGFudHMgY2FuIGJlIGdlbmVyYXRlZCBpbnRvIGNv
bnRhaW5lciBpbnRlcmZhY2VzIGJlYXJpbmcKLSAgICAgIHRoZSBlbnVtJ3MgbmFtZSAoc28gdGhl
IHJlZmVyZW5jaW5nIGNvZGUgaXMgaW4gSmF2YSBzdHlsZSkuCi0gICAgLSBDb2RlZElucHV0Qnl0
ZUJ1ZmZlck5hbm8gY2FuIG9ubHkgdGFrZSBieXRlW10gKG5vdCBJbnB1dFN0cmVhbSkuCi0gICAg
LSBTaW1pbGFybHkgQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFubyBjYW4gb25seSB3cml0ZSB0byBi
eXRlW10uCi0gICAgLSBSZXBlYXRlZCBmaWVsZHMgYXJlIGluIGFycmF5cywgbm90IEFycmF5TGlz
dCBvciBWZWN0b3IuIE51bGwgYXJyYXkKLSAgICAgIGVsZW1lbnRzIGFyZSBhbGxvd2VkIGFuZCBz
aWxlbnRseSBpZ25vcmVkLgotICAgIC0gRnVsbCBzdXBwb3J0IGZvciBzZXJpYWxpemluZy9kZXNl
cmlhbGl6aW5nIHJlcGVhdGVkIHBhY2tlZCBmaWVsZHMuCi0gICAgLSBTdXBwb3J0ICBleHRlbnNp
b25zIChpbiBwcm90bzIpLgotICAgIC0gVW5zZXQgbWVzc2FnZXMvZ3JvdXBzIGFyZSBudWxsLCBu
b3QgYW4gaW1tdXRhYmxlIGVtcHR5IGRlZmF1bHQKLSAgICAgIGluc3RhbmNlLgotICAgIC0gdG9C
eXRlQXJyYXkoLi4uKSBhbmQgbWVyZ2VGcm9tKC4uLikgYXJlIG5vdyBzdGF0aWMgZnVuY3Rpb25z
IG9mCi0gICAgICBNZXNzYWdlTmFuby4KLSAgICAtIFRoZSAnYnl0ZXMnIHR5cGUgdHJhbnNsYXRl
cyB0byB0aGUgSmF2YSB0eXBlIGJ5dGVbXS4KLQotICAgIFNlZSBqYXZhbmFuby9SRUFETUUudHh0
IGZvciBkZXRhaWxzLgotCi0yMDE0LTEyLTAxIHZlcnNpb24gMy4wLjAtYWxwaGEtMSAoQysrL0ph
dmEpOgotCi0gIEdlbmVyYWwKLSAgKiBJbnRyb2R1Y2VkIFByb3RvY29sIEJ1ZmZlcnMgbGFuZ3Vh
Z2UgdmVyc2lvbiAzIChha2EgcHJvdG8zKS4KLQotICAgIFdoZW4gcHJvdG9idWYgd2FzIGluaXRp
YWxseSBvcGVuc291cmNlZCBpdCBpbXBsZW1lbnRlZCBQcm90b2NvbCBCdWZmZXJzCi0gICAgbGFu
Z3VhZ2UgdmVyc2lvbiAyIChha2EgcHJvdG8yKSwgd2hpY2ggaXMgd2h5IHRoZSB2ZXJzaW9uIG51
bWJlcgotICAgIHN0YXJ0ZWQgZnJvbSB2Mi4wLjAuIEZyb20gdjMuMC4wLCBhIG5ldyBsYW5ndWFn
ZSB2ZXJzaW9uIChwcm90bzMpIGlzCi0gICAgaW50cm9kdWNlZCB3aGlsZSB0aGUgb2xkIHZlcnNp
b24gKHByb3RvMikgd2lsbCBjb250aW51ZSB0byBiZSBzdXBwb3J0ZWQuCi0KLSAgICBUaGUgbWFp
biBpbnRlbnQgb2YgaW50cm9kdWNpbmcgcHJvdG8zIGlzIHRvIGNsZWFuIHVwIHByb3RvYnVmIGJl
Zm9yZQotICAgIHB1c2hpbmcgdGhlIGxhbmd1YWdlIGFzIHRoZSBmb3VuZGF0aW9uIG9mIEdvb2ds
ZSdzIG5ldyBBUEkgcGxhdGZvcm0uCi0gICAgSW4gcHJvdG8zLCB0aGUgbGFuZ3VhZ2UgaXMgc2lt
cGxpZmllZCwgYm90aCBmb3IgZWFzZSBvZiB1c2UgYW5kICB0bwotICAgIG1ha2UgaXQgYXZhaWxh
YmxlIGluIGEgd2lkZXIgcmFuZ2Ugb2YgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiBBdCB0aGUKLSAg
ICBzYW1lIHRpbWUgYSBmZXcgZmVhdHVyZXMgYXJlIGFkZGVkIHRvIGJldHRlciBzdXBwb3J0IGNv
bW1vbiBpZGlvbXMKLSAgICBmb3VuZCBpbiBBUElzLgotCi0gICAgVGhlIGZvbGxvd2luZyBhcmUg
dGhlIG1haW4gbmV3IGZlYXR1cmVzIGluIGxhbmd1YWdlIHZlcnNpb24gMzoKLQotICAgICAgMS4g
UmVtb3ZhbCBvZiBmaWVsZCBwcmVzZW5jZSBsb2dpYyBmb3IgcHJpbWl0aXZlIHZhbHVlIGZpZWxk
cywgcmVtb3ZhbAotICAgICAgICAgb2YgcmVxdWlyZWQgZmllbGRzLCBhbmQgcmVtb3ZhbCBvZiBk
ZWZhdWx0IHZhbHVlcy4gVGhpcyBtYWtlcyBwcm90bzMKLSAgICAgICAgIHNpZ25pZmljYW50bHkg
ZWFzaWVyIHRvIGltcGxlbWVudCB3aXRoIG9wZW4gc3RydWN0IHJlcHJlc2VudGF0aW9ucywKLSAg
ICAgICAgIGFzIGluIGxhbmd1YWdlcyBsaWtlIEFuZHJvaWQgSmF2YSwgT2JqZWN0aXZlIEMsIG9y
IEdvLgotICAgICAgMi4gUmVtb3ZhbCBvZiB1bmtub3duIGZpZWxkcy4KLSAgICAgIDMuIFJlbW92
YWwgb2YgZXh0ZW5zaW9ucywgd2hpY2ggYXJlIGluc3RlYWQgcmVwbGFjZWQgYnkgYSBuZXcgc3Rh
bmRhcmQKLSAgICAgICAgIHR5cGUgY2FsbGVkIEFueS4KLSAgICAgIDQuIEZpeCBzZW1hbnRpY3Mg
Zm9yIHVua25vd24gZW51bSB2YWx1ZXMuCi0gICAgICA1LiBBZGRpdGlvbiBvZiBtYXBzLgotICAg
ICAgNi4gQWRkaXRpb24gb2YgYSBzbWFsbCBzZXQgb2Ygc3RhbmRhcmQgdHlwZXMgZm9yIHJlcHJl
c2VudGF0aW9uIG9mIHRpbWUsCi0gICAgICAgICBkeW5hbWljIGRhdGEsIGV0Yy4KLSAgICAgIDcu
IEEgd2VsbC1kZWZpbmVkIGVuY29kaW5nIGluIEpTT04gYXMgYW4gYWx0ZXJuYXRpdmUgdG8gYmlu
YXJ5IHByb3RvCi0gICAgICAgICBlbmNvZGluZy4KLQotICAgIFRoaXMgcmVsZWFzZSAodjMuMC4w
LWFscGhhLTEpIGluY2x1ZGVzIHBhcnRpYWwgcHJvdG8zIHN1cHBvcnQgZm9yIEMrKyBhbmQKLSAg
ICBKYXZhLiBJdGVtcyA2ICh3ZWxsLWtub3duIHR5cGVzKSBhbmQgNyAoSlNPTiBmb3JtYXQpIGlu
IHRoZSBhYm92ZSBmZWF0dXJlCi0gICAgbGlzdCBhcmUgbm90IGltcGxlbWVudGVkLgotCi0gICAg
QSBuZXcgbm90aW9uICJzeW50YXgiIGlzIGludHJvZHVjZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGEg
LnByb3RvIGZpbGUKLSAgICB1c2VzIHByb3RvMiBvciBwcm90bzM6Ci0KLSAgICAgIC8vIGZvby5w
cm90bwotICAgICAgc3ludGF4ID0gInByb3RvMyI7Ci0gICAgICBtZXNzYWdlIEJhciB7Li4ufQot
Ci0gICAgSWYgb21pdHRlZCwgdGhlIHByb3RvY29sIGNvbXBpbGVyIHdpbGwgZ2VuZXJhdGUgYSB3
YXJuaW5nIGFuZCAicHJvdG8yIiB3aWxsCi0gICAgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdC4gVGhp
cyB3YXJuaW5nIHdpbGwgYmUgdHVybmVkIGludG8gYW4gZXJyb3IgaW4gYQotICAgIGZ1dHVyZSBy
ZWxlYXNlLgotCi0gICAgV2UgcmVjb21tZW5kIHRoYXQgbmV3IFByb3RvY29sIEJ1ZmZlcnMgdXNl
cnMgdXNlIHByb3RvMy4gSG93ZXZlciwgd2UgZG8gbm90Ci0gICAgZ2VuZXJhbGx5IHJlY29tbWVu
ZCB0aGF0IGV4aXN0aW5nIHVzZXJzIG1pZ3JhdGUgZnJvbSBwcm90bzIgZnJvbSBwcm90bzMgZHVl
Ci0gICAgdG8gQVBJIGluY29tcGF0aWJpbGl0eSwgYW5kIHdlIHdpbGwgY29udGludWUgdG8gc3Vw
cG9ydCBwcm90bzIgZm9yIGEgbG9uZwotICAgIHRpbWUuCi0KLSAgKiBBZGRlZCBzdXBwb3J0IGZv
ciBtYXAgZmllbGRzIChpbXBsZW1lbnRlZCBpbiBDKysvSmF2YSBmb3IgYm90aCBwcm90bzIgYW5k
Ci0gICAgcHJvdG8zKS4KLQotICAgIE1hcCBmaWVsZHMgY2FuIGJlIGRlY2xhcmVkIHVzaW5nIHRo
ZSBmb2xsb3dpbmcgc3ludGF4OgotCi0gICAgICBtZXNzYWdlIEZvbyB7Ci0gICAgICAgIG1hcDxz
dHJpbmcsIHN0cmluZz4gdmFsdWVzID0gMTsKLSAgICAgIH0KLQotICAgIERhdGEgb2YgYSBtYXAg
ZmllbGQgd2lsbCBiZSBzdG9yZWQgaW4gbWVtb3J5IGFzIGFuIHVub3JkZXJlZCBtYXAgYW5kIGl0
Ci0gICAgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggZ2VuZXJhdGVkIGFjY2Vzc29ycy4KLQotICBD
KysKLSAgKiBBZGRlZCBhcmVuYSBhbGxvY2F0aW9uIHN1cHBvcnQgKGZvciBib3RoIHByb3RvMiBh
bmQgcHJvdG8zKS4KLQotICAgIFByb2ZpbGluZyBzaG93cyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQg
ZGVhbGxvY2F0aW9uIGNvbnN0aXR1dGVzIGEgc2lnbmlmaWNhbnQKLSAgICBmcmFjdGlvbiBvZiBD
UFUtdGltZSBzcGVudCBpbiBwcm90b2J1ZiBjb2RlIGFuZCBhcmVuYSBhbGxvY2F0aW9uIGlzIGEK
LSAgICB0ZWNobmlxdWUgaW50cm9kdWNlZCB0byByZWR1Y2UgdGhpcyBjb3N0LiBXaXRoIGFyZW5h
IGFsbG9jYXRpb24sIG5ldwotICAgIG9iamVjdHMgd2lsbCBiZSBhbGxvY2F0ZWQgZnJvbSBhIGxh
cmdlIHBpZWNlIG9mIHByZWFsbG9jYXRlZCBtZW1vcnkgYW5kCi0gICAgZGVhbGxvY2F0aW9uIG9m
IHRoZXNlIG9iamVjdHMgaXMgYWxtb3N0IGZyZWUuIEVhcmx5IGFkb3B0aW9uIHNob3dzIDIwJSB0
bwotICAgIDUwJSBpbXByb3ZlbWVudCBpbiBzb21lIEdvb2dsZSBiaW5hcmllcy4KLQotICAgIFRv
IGVuYWJsZSBhcmVuYSBzdXBwb3J0LCBhZGQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8geW91ciAu
cHJvdG8gZmlsZToKLQotICAgICAgb3B0aW9uIGNjX2VuYWJsZV9hcmVuYXMgPSB0cnVlOwotCi0g
ICAgUHJvdG9jb2wgY29tcGlsZXIgd2lsbCBnZW5lcmF0ZSBhZGRpdGlvbmFsIGNvZGUgdG8gbWFr
ZSB0aGUgZ2VuZXJhdGVkCi0gICAgbWVzc2FnZSBjbGFzc2VzIHdvcmsgd2l0aCBhcmVuYXMuIFRo
aXMgZG9lcyBub3QgY2hhbmdlIHRoZSBleGlzdGluZyBBUEkKLSAgICBvZiBwcm90b2J1ZiBtZXNz
YWdlcyBhbmQgZG9lcyBub3QgYWZmZWN0IHdpcmUgZm9ybWF0LiBZb3VyIGV4aXN0aW5nIGNvZGUK
LSAgICBzaG91bGQgY29udGludWUgdG8gd29yayBhZnRlciBhZGRpbmcgdGhpcyBvcHRpb24uIElu
IHRoZSBmdXR1cmUgd2Ugd2lsbAotICAgIG1ha2UgdGhpcyBvcHRpb24gZW5hYmxlZCBieSBkZWZh
dWx0LgotCi0gICAgVG8gYWN0dWFsbHkgdGFrZSBhZHZhbnRhZ2Ugb2YgYXJlbmEgYWxsb2NhdGlv
biwgeW91IG5lZWQgdG8gdXNlIHRoZSBhcmVuYQotICAgIEFQSXMgd2hlbiBjcmVhdGluZyBtZXNz
YWdlcy4gQSBxdWljayBleGFtcGxlIG9mIHVzaW5nIHRoZSBhcmVuYSBBUEk6Ci0KLSAgICAgIHsK
LSAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEgYXJlbmE7Ci0gICAgICAgIC8vIEFsbG9j
YXRlIGEgcHJvdG9idWYgbWVzc2FnZSBpbiB0aGUgYXJlbmEuCi0gICAgICAgIE15TWVzc2FnZSog
bWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPE15TWVzc2FnZT4oJmFyZW5hKTsKLSAgICAg
ICAgLy8gQWxsIHN1Ym1lc3NhZ2VzIHdpbGwgYmUgYWxsb2NhdGVkIGluIHRoZSBzYW1lIGFyZW5h
LgotICAgICAgICBpZiAoIW1lc3NhZ2UtPlBhcnNlRnJvbVN0cmluZyhkYXRhKSkgewotICAgICAg
ICAgIC8vIERlYWwgd2l0aCBtYWxmb3JtZWQgaW5wdXQgZGF0YS4KLSAgICAgICAgfQotICAgICAg
ICAvLyBNdXN0IG5vdCBkZWxldGUgdGhlIG1lc3NhZ2UgaGVyZS4gSXQgd2lsbCBiZSBkZWxldGVk
IGF1dG9tYXRpY2FsbHkKLSAgICAgICAgLy8gd2hlbiB0aGUgYXJlbmEgaXMgZGVzdHJveWVkLgot
ICAgICAgfQotCi0gICAgQ3VycmVudGx5IGFyZW5hIGRvZXMgbm90IHdvcmsgd2l0aCBtYXAgZmll
bGRzLiBFbmFibGluZyBhcmVuYSBpbiBhIC5wcm90bwotICAgIGZpbGUgY29udGFpbmluZyBtYXAg
ZmllbGRzIHdpbGwgcmVzdWx0IGluIGNvbXBpbGUgZXJyb3JzIGluIHRoZSBnZW5lcmF0ZWQKLSAg
ICBjb2RlLiBUaGlzIHdpbGwgYmUgYWRkcmVzc2VkIGluIGEgZnV0dXJlIHJlbGVhc2UuCi0KLTIw
MTQtMTAtMjAgdmVyc2lvbiAyLjYuMToKLQotICBDKysKLSAgKiBBZGRlZCBhdG9taWNvcHMgc3Vw
cG9ydCBmb3IgU29sYXJpcy4KLSAgKiBSZWxlYXNlZCBtZW1vcnkgYWxsb2NhdGVkIGJ5IEluaXRp
YWxpemVEZWZhdWx0UmVwZWF0ZWRGaWVsZHMoKSBhbmQKLSAgICBHZXRFbXB0eVN0cmluZygpLiBT
b21lIG1lbW9yeSBzYW5pdGl6ZXJzIHJlcG9ydGVkIHRoZW0gYXMgbWVtb3J5IGxlYWtzLgotCi0g
IEphdmEKLSAgKiBVcGRhdGVkIER5bmFtaWNNZXNzYWdlLnNldEZpZWxkKCkgdG8gaGFuZGxlIHJl
cGVhdGVkIGVudW0gdmFsdWVzCi0gICAgY29ycmVjdGx5LgotICAqIEZpeGVkIGEgYnVnIHRoYXQg
Y2F1c2VkIE51bGxQb2ludGVyRXhjZXB0aW9uIHRvIGJlIHRocm93biB3aGVuCi0gICAgY29udmVy
dGluZyBtYW51YWxseSBjb25zdHJ1Y3RlZCBGaWxlRGVzY3JpcHRvclByb3RvIHRvCi0gICAgRmls
ZURlc2NyaXB0b3IuCi0KLSAgUHl0aG9uCi0gICogRml4ZWQgV2hpY2hPbmVvZigpIHRvIHdvcmsg
d2l0aCBkZS1zZXJpYWxpemVkIHByb3RvYnVmIG1lc3NhZ2VzLgotICAqIEZpeGVkIGEgbWlzc2lu
ZyBmaWxlIHByb2JsZW0gb2YgUHl0aG9uIEMrKyBpbXBsZW1lbnRhdGlvbi4KLQotMjAxNC0wOC0x
NSB2ZXJzaW9uIDIuNi4wOgotCi0gIEdlbmVyYWwKLSAgKiBBZGRlZCBvbmVvZnModW5pb25zKSBm
ZWF0dXJlLiBGaWVsZHMgaW4gdGhlIHNhbWUgb25lb2Ygd2lsbCBzaGFyZQotICAgIG1lbW9yeSBh
bmQgYXQgbW9zdCBvbmUgZmllbGQgY2FuIGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lLiBVc2UgdGhl
Ci0gICAgb25lb2Yga2V5d29yZCB0byBkZWZpbmUgYSBvbmVvZiBsaWtlOgotICAgICAgbWVzc2Fn
ZSBTYW1wbGVNZXNzYWdlIHsKLSAgICAgICAgb25lb2YgdGVzdF9vbmVvZiB7Ci0gICAgICAgICAg
c3RyaW5nIG5hbWUgPSA0OwotICAgICAgICAgIFlvdXJNZXNzYWdlIHN1Yl9tZXNzYWdlID0gOTsK
LSAgICAgICAgfQotICAgICAgfQotICAqIEZpbGVzLCBzZXJ2aWNlcywgZW51bXMsIG1lc3NhZ2Vz
LCBtZXRob2RzIGFuZCBlbnVtIHZhbHVlcyBjYW4gYmUgbWFya2VkCi0gICAgYXMgZGVwcmVjYXRl
ZCBub3cuCi0gICogQWRkZWQgU3VwcG9ydCBmb3IgbGlzdCB2YWx1ZXMsIGluY2x1ZGluZyBsaXN0
cyBvZiBtZXNzYWdlcywgd2hlbgotICAgIHBhcnNpbmcgdGV4dC1mb3JtYXR0ZWQgcHJvdG9zIGlu
IEMrKyBhbmQgSmF2YS4KLSAgICAgIEZvciBleGFtcGxlOiAgZm9vOiBbMSwgMiwgM10KLQotICBD
KysKLSAgKiBFbmhhbmNlZCBjdXN0b21pemF0aW9uIG9uIFRlc3RGb3JtYXQgcHJpbnRpbmcuCi0g
ICogQWRkZWQgU3dhcEZpZWxkcygpIGluIHJlZmxlY3Rpb24gQVBJIHRvIHN3YXAgYSBzdWJzZXQg
b2YgZmllbGRzLgotICAgIEFkZGVkIFNldEFsbG9jYXRlZE1lc3NhZ2UoKSBpbiByZWZsZWN0aW9u
IEFQSS4KLSAgKiBSZXBlYXRlZCBwcmltaXRpdmUgZXh0ZW5zaW9ucyBhcmUgbm93IHBhY2thYmxl
LiBUaGUKLSAgICBbcGFja2VkPXRydWVdIG9wdGlvbiBvbmx5IGFmZmVjdHMgc2VyaWFsaXplcnMu
IFRoZXJlZm9yZSwgaXQgaXMKLSAgICBwb3NzaWJsZSB0byBzd2l0Y2ggYSByZXBlYXRlZCBleHRl
bnNpb24gZmllbGQgdG8gcGFja2VkIGZvcm1hdAotICAgIHdpdGhvdXQgYnJlYWtpbmcgYmFja3dh
cmRzLWNvbXBhdGliaWxpdHkuCi0gICogVmFyaW91cyBzcGVlZCBvcHRpbWl6YXRpb25zLgotCi0g
IEphdmEKLSAgKiB3cml0ZVRvKCkgbWV0aG9kIGluIEJ5dGVTdHJpbmcgY2FuIG5vdyB3cml0ZSBh
IHN1YnN0cmluZyB0byBhbgotICAgIG91dHB1dCBzdHJlYW0uIEFkZGVkIGVuZFdpdGgoKSBtZXRo
b2QgZm9yIEJ5dGVTdHJpbmcuCi0gICogQnl0ZVN0cmluZyBhbmQgQnl0ZUJ1ZmZlciBhcmUgbm93
IHN1cHBvcnRlZCBpbiBDb2RlZElucHV0U3RyZWFtCi0gICAgYW5kIENvZGVkT3V0cHV0U3RyZWFt
LgotICAqIGphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoIGNhbiBub3cgYmUgdXNlZCB3aXRo
IHRoZSBMSVRFX1JVTlRJTUUuCi0KLSAgUHl0aG9uCi0gICogQSBuZXcgQysrLWJhY2tlZCBleHRl
bnNpb24gbW9kdWxlIChha2EgImNwcCBhcGkgdjIiKSB0aGF0IHJlcGxhY2VzIHRoZQotICAgIG9s
ZCAoImNwcCBhcGkgdjEiKSBvbmUuICBNdWNoIGZhc3RlciB0aGFuIHRoZSBwdXJlIFB5dGhvbiBj
b2RlLiAgVGhpcyBvbmUKLSAgICByZXNvbHZlcyBtYW55IGJ1Z3MgYW5kIGlzIHJlY29tbWVuZGVk
IGZvciBnZW5lcmFsIHVzZSBvdmVyIHRoZQotICAgIHB1cmUgUHl0aG9uIHdoZW4gcG9zc2libGUu
Ci0gICogRGVzY3JpcHRvcnMgbm93IGhhdmUgZW51bV90eXBlc19ieV9uYW1lIGFuZCBleHRlbnNp
b25fdHlwZXNfYnlfbmFtZSBkaWN0Ci0gICAgYXR0cmlidXRlcy4KLSAgKiBTdXBwb3J0IGZvciBQ
eXRob24gMy4KLQotMjAxMy0wMi0yNyB2ZXJzaW9uIDIuNS4wOgotCi0gIEdlbmVyYWwKLSAgKiBO
ZXcgbm90aW9uICJpbXBvcnQgcHVibGljIiB0aGF0IGFsbG93cyBhIHByb3RvIGZpbGUgdG8gZm9y
d2FyZCB0aGUgY29udGVudAotICAgIGl0IGltcG9ydHMgdG8gaXRzIGltcG9ydGVycy4gRm9yIGV4
YW1wbGUsCi0gICAgICAvLyBmb28ucHJvdG8KLSAgICAgIGltcG9ydCBwdWJsaWMgImJhci5wcm90
byI7Ci0gICAgICBpbXBvcnQgImJhei5wcm90byI7Ci0KLSAgICAgIC8vIHF1eC5wcm90bwotICAg
ICAgaW1wb3J0ICJmb28ucHJvdG8iOwotICAgICAgLy8gU3R1ZmYgZGVmaW5lZCBpbiBiYXIucHJv
dG8gbWF5IGJlIHVzZWQgaW4gdGhpcyBmaWxlLCBidXQgc3R1ZmYgZnJvbQotICAgICAgLy8gYmF6
LnByb3RvIG1heSBOT1QgYmUgdXNlZCB3aXRob3V0IGltcG9ydGluZyBpdCBleHBsaWNpdGx5Lgot
ICAgIFRoaXMgaXMgdXNlZnVsIGZvciBtb3ZpbmcgcHJvdG8gZmlsZXMuIFRvIG1vdmUgYSBwcm90
byBmaWxlLCBqdXN0IGxlYXZlCi0gICAgYSBzaW5nbGUgImltcG9ydCBwdWJsaWMiIGluIHRoZSBv
bGQgcHJvdG8gZmlsZS4KLSAgKiBOZXcgZW51bSBvcHRpb24gImFsbG93X2FsaWFzIiB0aGF0IHNw
ZWNpZmllcyB3aGV0aGVyIGRpZmZlcmVudCBzeW1ib2xzIGNhbgotICAgIGJlIGFzc2lnbmVkIHRo
ZSBzYW1lIG51bWVyaWMgdmFsdWUuIERlZmF1bHQgdmFsdWUgaXMgInRydWUiLiBTZXR0aW5nIGl0
IHRvCi0gICAgZmFsc2UgY2F1c2VzIHRoZSBjb21waWxlciB0byByZWplY3QgZW51bSBkZWZpbml0
aW9ucyB3aGVyZSBtdWx0aXBsZSBzeW1ib2xzCi0gICAgaGF2ZSB0aGUgc2FtZSBudW1lcmljIHZh
bHVlLgotICAgIE5vdGU6IFdlIHBsYW4gdG8gZmxpcCB0aGUgZGVmYXVsdCB2YWx1ZSB0byAiZmFs
c2UiIGluIGEgZnV0dXJlIHJlbGVhc2UuCi0gICAgUHJvamVjdHMgdXNpbmcgZW51bSBhbGlhc2Vz
IHNob3VsZCBzZXQgdGhlIG9wdGlvbiB0byAidHJ1ZSIgaW4gdGhlaXIgLnByb3RvCi0gICAgZmls
ZXMuCi0KLSAgQysrCi0gICogTmV3IGdlbmVyYXRlZCBtZXRob2Qgc2V0X2FsbG9jYXRlZF9mb28o
VHlwZSogZm9vKSBmb3IgbWVzc2FnZSBhbmQgc3RyaW5nCi0gICAgZmllbGRzLiBUaGlzIG1ldGhv
ZCBhbGxvd3MgeW91IHRvIHNldCB0aGUgZmllbGQgdG8gYSBwcmUtYWxsb2NhdGVkIG9iamVjdAot
ICAgIGFuZCB0aGUgY29udGFpbmluZyBtZXNzYWdlIHRha2VzIHRoZSBvd25lcnNoaXAgb2YgdGhh
dCBvYmplY3QuCi0gICogQWRkZWQgU2V0QWxsb2NhdGVkRXh0ZW5zaW9uKCkgYW5kIFJlbGVhc2VF
eHRlbnNpb24oKSB0byBleHRlbnNpb25zIEFQSS4KLSAgKiBDdXN0b20gb3B0aW9ucyBhcmUgbm93
IGZvcm1hdHRlZCBjb3JyZWN0bHkgd2hlbiBkZXNjcmlwdG9ycyBhcmUgcHJpbnRlZCBpbgotICAg
IHRleHQgZm9ybWF0LgotICAqIFZhcmlvdXMgc3BlZWQgb3B0aW1pemF0aW9ucy4KLQotICBKYXZh
Ci0gICogQ29tbWVudHMgaW4gcHJvdG8gZmlsZXMgYXJlIG5vdyBjb2xsZWN0ZWQgYW5kIHB1dCBp
bnRvIGdlbmVyYXRlZCBjb2RlIGFzCi0gICAgY29tbWVudHMgZm9yIGNvcnJlc3BvbmRpbmcgY2xh
c3NlcyBhbmQgZGF0YSBtZW1iZXJzLgotICAqIEFkZGVkIFBhcnNlciB0byBwYXJzZSBkaXJlY3Rs
eSBpbnRvIG1lc3NhZ2VzIHdpdGhvdXQgYSBCdWlsZGVyLiBGb3IKLSAgICBleGFtcGxlLAotICAg
ICAgRm9vIGZvbyA9IEZvby5QQVJTRVIuUGFyc2VGcm9tKGlucHV0KTsKLSAgICBVc2luZyBQYXJz
ZXIgaXMgfjI1JSBmYXN0ZXIgdGhhbiB1c2luZyBCdWlsZGVyIHRvIHBhcnNlIG1lc3NhZ2VzLgot
ICAqIEFkZGVkIGdldHRlcnMvc2V0dGVycyB0byBhY2Nlc3MgdGhlIHVuZGVybHlpbmcgQnl0ZVN0
cmluZyBvZiBhIHN0cmluZyBmaWVsZAotICAgIGRpcmVjdGx5LgotICAqIEJ5dGVTdHJpbmcgbm93
IHN1cHBvcnRzIG1vcmUgb3BlcmF0aW9uczogc3Vic3RyaW5nKCksIHByZXBlbmQoKSwgYW5kCi0g
ICAgYXBwZW5kKCkuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBCeXRlU3RyaW5nIHVzZXMgYSBiaW5h
cnkgdHJlZSBzdHJ1Y3R1cmUKLSAgICB0byBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMgZWZmaWNp
ZW50bHkuCi0gICogTmV3IG1ldGhvZCBmaW5kSW5pdGlhbGl6YXRpb25FcnJvcnMoKSB0aGF0IGxp
c3RzIGFsbCBtaXNzaW5nIHJlcXVpcmVkCi0gICAgZmllbGRzLgotICAqIFZhcmlvdXMgY29kZSBz
aXplIGFuZCBzcGVlZCBvcHRpbWl6YXRpb25zLgotCi0gIFB5dGhvbgotICAqIEFkZGVkIHN1cHBv
cnQgZm9yIGR5bmFtaWMgbWVzc2FnZSBjcmVhdGlvbi4gRGVzY3JpcHRvckRhdGFiYXNlLAotICAg
IERlc2NyaXB0b3JQb29sLCBhbmQgTWVzc2FnZUZhY3Rvcnkgd29yayBsaWtlIHRoZWlyIEMrKyBj
b3VudGVycGFydHMgdG8KLSAgICBzaW1wbGlmeSBEZXNjcmlwdG9yIGNvbnN0cnVjdGlvbiBmcm9t
ICpEZXNjcmlwdG9yUHJvdG9zLCBhbmQgTWVzc2FnZUZhY3RvcnkKLSAgICBwcm92aWRlcyBhIG1l
c3NhZ2UgaW5zdGFuY2UgZnJvbSBhIERlc2NyaXB0b3IuCi0gICogQWRkZWQgcGlja2xlIHN1cHBv
cnQgZm9yIHByb3RvYnVmIG1lc3NhZ2VzLgotICAqIFVua25vd24gZmllbGRzIGFyZSBub3cgcHJl
c2VydmVkIGFmdGVyIHBhcnNpbmcuCi0gICogRml4ZWQgYnVnIHdoZXJlIGN1c3RvbSBvcHRpb25z
IHdlcmUgbm90IGNvcnJlY3RseSBwb3B1bGF0ZWQuIEN1c3RvbQotICAgIG9wdGlvbnMgY2FuIGJl
IGFjY2Vzc2VkIG5vdy4KLSAgKiBBZGRlZCBFbnVtVHlwZVdyYXBwZXIgdGhhdCBwcm92aWRlcyBi
ZXR0ZXIgYWNjZXNzaWJpbGl0eSB0byBlbnVtIHR5cGVzLgotICAqIEFkZGVkIFBhcnNlTWVzc2Fn
ZShkZXNjcmlwdG9yLCBieXRlcykgdG8gZ2VuZXJhdGUgYSBuZXcgTWVzc2FnZSBpbnN0YW5jZQot
ICAgIGZyb20gYSBkZXNjcmlwdG9yIGFuZCBhIGJ5dGUgc3RyaW5nLgotCi0yMDExLTA1LTAxIHZl
cnNpb24gMi40LjE6Ci0KLSAgQysrCi0gICogRml4ZWQgdGhlIGZyaWVuZHNoaXAgcHJvYmxlbSBm
b3Igb2xkIGNvbXBpbGVycyB0byBtYWtlIHRoZSBsaWJyYXJ5IG5vdyBnY2MgMwotICAgIGNvbXBh
dGlibGUgYWdhaW4uCi0gICogRml4ZWQgdmNwcm9qZWN0cy9leHRyYWN0X2luY2x1ZGVzLmJhdCB0
byBleHRyYWN0IGNvbXBpbGVyL3BsdWdpbi5oLgotCi0gIEphdmEKLSAgKiBSZW1vdmVkIHVzYWdl
cyBvZiBKREsgMS42IG9ubHkgZmVhdHVyZXMgdG8gbWFrZSB0aGUgbGlicmFyeSBub3cgSkRLIDEu
NQotICAgIGNvbXBhdGlibGUgYWdhaW4uCi0gICogRml4ZWQgYSBidWcgYWJvdXQgbmVnYXRpdmUg
ZW51bSB2YWx1ZXMuCi0gICogc2VyaWFsVmVyc2lvblVJRCBpcyBub3cgZGVmaW5lZCBpbiBnZW5l
cmF0ZWQgbWVzc2FnZXMgZm9yIGphdmEgc2VyaWFsaXppbmcuCi0gICogRml4ZWQgcHJvdG9jIHRv
IHVzZSBqYXZhLmxhbmcuT2JqZWN0LCB3aGljaCBtYWtlcyAiT2JqZWN0IiBub3cgYSB2YWxpZAot
ICAgIG1lc3NhZ2UgbmFtZSBhZ2Fpbi4KLQotICBQeXRob24KLSAgKiBFeHBlcmltZW50YWwgQysr
IGltcGxlbWVudGF0aW9uIG5vdyByZXF1aXJlcyBDKysgcHJvdG9idWYgbGlicmFyeSBpbnN0YWxs
ZWQuCi0gICAgU2VlIHRoZSBSRUFETUUudHh0IGluIHRoZSBweXRob24gZGlyZWN0b3J5IGZvciBk
ZXRhaWxzLgotCi0yMDExLTAyLTAyIHZlcnNpb24gMi40LjA6Ci0KLSAgR2VuZXJhbAotICAqIFRo
ZSBSUEMgKGNjfGphdmF8cHkpX2dlbmVyaWNfc2VydmljZXMgZGVmYXVsdCB2YWx1ZSBpcyBub3cg
ZmFsc2UgaW5zdGVhZCBvZgotICAgIHRydWUuCi0gICogQ3VzdG9tIG9wdGlvbnMgY2FuIGhhdmUg
YWdncmVnYXRlIHR5cGVzLiBGb3IgZXhhbXBsZSwKLSAgICAgIG1lc3NhZ2UgTXlPcHRpb24gewot
ICAgICAgICBvcHRpb25hbCBzdHJpbmcgY29tbWVudCA9IDE7Ci0gICAgICAgIG9wdGlvbmFsIHN0
cmluZyBhdXRob3IgPSAyOwotICAgICAgfQotICAgICAgZXh0ZW5kIGdvb2dsZS5wcm90b2J1Zi5G
aWVsZE9wdGlvbnMgewotICAgICAgICBvcHRpb25hbCBNeU9wdGlvbiBteW9wdGlvbiA9IDEyMzQ1
OwotICAgICAgfQotICAgIFRoaXMgb3B0aW9uIGNhbiBub3cgYmUgc2V0IGFzIGZvbGxvd3M6Ci0g
ICAgICBtZXNzYWdlIFNvbWVUeXBlIHsKLSAgICAgICAgb3B0aW9uYWwgaW50MzIgZmllbGQgPSAx
IFsobXlvcHRpb24pID0geyBjb21tZW50Oid4JyBhdXRob3I6J3knIH1dOwotICAgICAgfQotCi0g
IEMrKwotICAqIFZhcmlvdXMgc3BlZWQgYW5kIGNvZGUgc2l6ZSBvcHRpbWl6YXRpb25zLgotICAq
IEFkZGVkIGEgcmVsZWFzZV9mb28oKSBtZXRob2Qgb24gc3RyaW5nIGFuZCBtZXNzYWdlIGZpZWxk
cy4KLSAgKiBGaXhlZCBnemlwX291dHB1dF9zdHJlYW0gc3ViLXN0cmVhbSBoYW5kbGluZy4KLQot
ICBKYXZhCi0gICogQnVpbGRlcnMgbm93IG1haW50YWluIHN1Yi1idWlsZGVycyBmb3Igc3ViLW1l
c3NhZ2VzLiBVc2UgZ2V0Rm9vQnVpbGRlcigpIHRvCi0gICAgZ2V0IHRoZSBidWlsZGVyIGZvciB0
aGUgc3ViLW1lc3NhZ2UgImZvbyIuIFRoaXMgYWxsb3dzIHlvdSB0byByZXBlYXRlZGx5Ci0gICAg
bW9kaWZ5IGRlZXBseS1uZXN0ZWQgc3ViLW1lc3NhZ2VzIHdpdGhvdXQgcmVidWlsZGluZyB0aGVt
LgotICAqIEJ1aWxkZXIuYnVpbGQoKSBubyBsb25nZXIgaW52YWxpZGF0ZXMgdGhlIEJ1aWxkZXIg
Zm9yIGdlbmVyYXRlZCBtZXNzYWdlcwotICAgIChZb3UgbWF5IGNvbnRpbnVlIHRvIG1vZGlmeSBp
dCBhbmQgdGhlbiBidWlsZCBhbm90aGVyIG1lc3NhZ2UpLgotICAqIENvZGUgZ2VuZXJhdG9yIHdp
bGwgZ2VuZXJhdGUgZWZmaWNpZW50IGVxdWFscygpIGFuZCBoYXNoQ29kZSgpCi0gICAgaW1wbGVt
ZW50YXRpb25zIGlmIG5ldyBvcHRpb24gamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2ggaXMg
ZW5hYmxlZC4KLSAgICAoT3RoZXJ3aXNlLCByZWZsZWN0aW9uLWJhc2VkIGltcGxlbWVudGF0aW9u
cyBhcmUgdXNlZC4pCi0gICogR2VuZXJhdGVkIG1lc3NhZ2VzIG5vdyBpbXBsZW1lbnQgU2VyaWFs
aXphYmxlLgotICAqIEZpZWxkcyB3aXRoIFtkZXByZWNhdGVkPXRydWVdIHdpbGwgYmUgbWFya2Vk
IHdpdGggQERlcHJlY2F0ZWQgaW4gSmF2YS4KLSAgKiBBZGRlZCBsYXp5IGNvbnZlcnNpb24gb2Yg
VVRGLTggZW5jb2RlZCBzdHJpbmdzIHRvIFN0cmluZyBvYmplY3RzIHRvIGltcHJvdmUKLSAgICBw
ZXJmb3JtYW5jZS4KLSAgKiBWYXJpb3VzIG9wdGltaXphdGlvbnMuCi0gICogRW51bSB2YWx1ZSBj
YW4gYmUgYWNjZXNzZWQgZGlyZWN0bHksIGluc3RlYWQgb2YgY2FsbGluZyBnZXROdW1iZXIoKSBv
biB0aGUKLSAgICBlbnVtIG1lbWJlci4KLSAgKiBGb3IgZWFjaCBlbnVtIHZhbHVlLCBhbiBpbnRl
Z2VyIGNvbnN0YW50IGlzIGFsc28gZ2VuZXJhdGVkIHdpdGggdGhlIHN1ZmZpeAotICAgIF9WQUxV
RS4KLQotICBQeXRob24KLSAgKiBBZGRlZCBhbiBleHBlcmltZW50YWwgIEMrKyBpbXBsZW1lbnRh
dGlvbiBmb3IgUHl0aG9uIG1lc3NhZ2VzIHZpYSBhIFB5dGhvbgotICAgIGV4dGVuc2lvbi4gSW1w
bGVtZW50YXRpb24gdHlwZSBpcyBjb250cm9sbGVkIGJ5IGFuIGVudmlyb25tZW50IHZhcmlhYmxl
Ci0gICAgUFJPVE9DT0xfQlVGRkVSU19QWVRIT05fSU1QTEVNRU5UQVRJT04gKHZhbGlkIHZhbHVl
czogImNwcCIgYW5kICJweXRob24iKQotICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGN1cnJlbnRs
eSAicHl0aG9uIiBidXQgd2lsbCBiZSBjaGFuZ2VkIHRvICJjcHAiIGluCi0gICAgZnV0dXJlIHJl
bGVhc2UuCi0gICogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb24gbWVzc2FnZSBpbnN0YW50aWF0aW9u
IHNpZ25pZmljYW50bHkuCi0gICAgTW9zdCBvZiB0aGUgd29yayBvbiBtZXNzYWdlIGluc3RhbnRp
YXRpb24gaXMgZG9uZSBqdXN0IG9uY2UgcGVyIG1lc3NhZ2UKLSAgICBjbGFzcywgaW5zdGVhZCBv
ZiBvbmNlIHBlciBtZXNzYWdlIGluc3RhbmNlLgotICAqIEltcHJvdmVkIHBlcmZvcm1hbmNlIG9u
IHRleHQgbWVzc2FnZSBwYXJzaW5nLgotICAqIEFsbG93IGFkZCgpIHRvIGZvcndhcmQga2V5d29y
ZCBhcmd1bWVudHMgdG8gdGhlIGNvbmNyZXRlIGNsYXNzLgotICAgICAgRS5nLiBpbnN0ZWFkIG9m
Ci0gICAgICAgIGl0ZW0gPSByZXBlYXRlZF9maWVsZC5hZGQoKQotICAgICAgICBpdGVtLmZvbyA9
IGJhcgotICAgICAgICBpdGVtLmJheiA9IHF1dXgKLSAgICAgIFlvdSBjYW4gZG86Ci0gICAgICAg
IHJlcGVhdGVkX2ZpZWxkLmFkZChmb289YmFyLCBiYXo9cXV1eCkKLSAgKiBBZGRlZCBhIHNvcnQo
KSBpbnRlcmZhY2UgdG8gdGhlIEJhc2VDb250YWluZXIuCi0gICogQWRkZWQgYW4gZXh0ZW5kKCkg
bWV0aG9kIHRvIHJlcGVhdGVkIGNvbXBvc2l0ZSBmaWVsZHMuCi0gICogQWRkZWQgVVRGOCBkZWJ1
ZyBzdHJpbmcgc3VwcG9ydC4KLQotMjAxMC0wMS0wOCB2ZXJzaW9uIDIuMy4wOgotCi0gIEdlbmVy
YWwKLSAgKiBQYXJzZXJzIGZvciByZXBlYXRlZCBudW1lcmljIGZpZWxkcyBub3cgYWx3YXlzIGFj
Y2VwdCBib3RoIHBhY2tlZCBhbmQKLSAgICB1bnBhY2tlZCBpbnB1dC4gIFRoZSBbcGFja2VkPXRy
dWVdIG9wdGlvbiBvbmx5IGFmZmVjdHMgc2VyaWFsaXplcnMuCi0gICAgVGhlcmVmb3JlLCBpdCBp
cyBwb3NzaWJsZSB0byBzd2l0Y2ggYSBmaWVsZCB0byBwYWNrZWQgZm9ybWF0IHdpdGhvdXQKLSAg
ICBicmVha2luZyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSAtLSBhcyBsb25nIGFzIGFsbCBwYXJ0
aWVzIGFyZSB1c2luZwotICAgIHByb3RvYnVmIDIuMy4wIG9yIGFib3ZlLCBhdCBsZWFzdC4KLSAg
KiBUaGUgZ2VuZXJpYyBSUEMgc2VydmljZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgQysrLCBKYXZh
LCBhbmQgUHl0aG9uCi0gICAgZ2VuZXJhdG9ycyBjYW4gYmUgZGlzYWJsZWQgdmlhIGZpbGUgb3B0
aW9uczoKLSAgICAgIG9wdGlvbiBjY19nZW5lcmljX3NlcnZpY2VzID0gZmFsc2U7Ci0gICAgICBv
cHRpb24gamF2YV9nZW5lcmljX3NlcnZpY2VzID0gZmFsc2U7Ci0gICAgICBvcHRpb24gcHlfZ2Vu
ZXJpY19zZXJ2aWNlcyA9IGZhbHNlOwotICAgIFRoaXMgYWxsb3dzIHBsdWdpbnMgdG8gZ2VuZXJh
dGUgYWx0ZXJuYXRpdmUgY29kZSwgcG9zc2libHkgc3BlY2lmaWMgdG8gc29tZQotICAgIHBhcnRp
Y3VsYXIgUlBDIGltcGxlbWVudGF0aW9uLgotCi0gIHByb3RvYwotICAqIE5vdyBzdXBwb3J0cyBh
IHBsdWdpbiBzeXN0ZW0gZm9yIGNvZGUgZ2VuZXJhdG9ycy4gIFBsdWdpbnMgY2FuIGdlbmVyYXRl
Ci0gICAgY29kZSBmb3IgbmV3IGxhbmd1YWdlcyBvciBpbmplY3QgYWRkaXRpb25hbCBjb2RlIGlu
dG8gdGhlIG91dHB1dCBvZiBvdGhlcgotICAgIGNvZGUgZ2VuZXJhdG9ycy4gIFBsdWdpbnMgYXJl
IGp1c3QgYmluYXJpZXMgd2hpY2ggYWNjZXB0IGEgcHJvdG9jb2wgYnVmZmVyCi0gICAgb24gc3Rk
aW4gYW5kIHdyaXRlIGEgcHJvdG9jb2wgYnVmZmVyIHRvIHN0ZG91dCwgc28gdGhleSBtYXkgYmUg
d3JpdHRlbiBpbgotICAgIGFueSBsYW5ndWFnZS4gIFNlZSBzcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL3BsdWdpbi5wcm90by4KLSAgICAqKldBUk5JTkcqKjogIFBsdWdpbnMgYXJlIGV4cGVy
aW1lbnRhbC4gIFRoZSBpbnRlcmZhY2UgbWF5IGNoYW5nZSBpbiBhCi0gICAgZnV0dXJlIHZlcnNp
b24uCi0gICogSWYgdGhlIG91dHB1dCBsb2NhdGlvbiBlbmRzIGluIC56aXAgb3IgLmphciwgcHJv
dG9jIHdpbGwgd3JpdGUgaXRzIG91dHB1dAotICAgIHRvIGEgemlwL2phciBhcmNoaXZlIGluc3Rl
YWQgb2YgYSBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZToKLSAgICAgIHByb3RvYyAtLWphdmFfb3V0
PW15cHJvdG9fc3Jjcy5qYXIgLS1weXRob25fb3V0PW15cHJvdG8uemlwIG15cHJvdG8ucHJvdG8K
LSAgICBDdXJyZW50bHkgdGhlIGFyY2hpdmUgY29udGVudHMgYXJlIG5vdCBjb21wcmVzc2VkLCB0
aG91Z2ggdGhpcyBjb3VsZCBjaGFuZ2UKLSAgICBpbiB0aGUgZnV0dXJlLgotICAqIGluZiwgLWlu
ZiwgYW5kIG5hbiBjYW4gbm93IGJlIHVzZWQgYXMgZGVmYXVsdCB2YWx1ZXMgZm9yIGZsb2F0IGFu
ZCBkb3VibGUKLSAgICBmaWVsZHMuCi0KLSAgQysrCi0gICogVmFyaW91cyBzcGVlZCBhbmQgY29k
ZSBzaXplIG9wdGltaXphdGlvbnMuCi0gICogRHluYW1pY01lc3NhZ2VGYWN0b3J5IGlzIG5vdyBm
dWxseSB0aHJlYWQtc2FmZS4KLSAgKiBNZXNzYWdlOjpVdGY4RGVidWdTdHJpbmcoKSBtZXRob2Qg
aXMgbGlrZSBEZWJ1Z1N0cmluZygpIGJ1dCBhdm9pZHMgZXNjYXBpbmcKLSAgICBVVEYtOCBieXRl
cy4KLSAgKiBDb21waWxlZC1pbiBtZXNzYWdlIHR5cGVzIGNhbiBub3cgY29udGFpbiBkeW5hbWlj
IGV4dGVuc2lvbnMsIHRocm91Z2ggdXNlCi0gICAgb2YgQ29kZWRJbnB1dFN0cmVhbTo6U2V0RXh0
ZW5zaW9uUmVnaXN0cnkoKS4KLSAgKiBOb3cgY29tcGlsZXMgc2hhcmVkIGxpYnJhcmllcyAoRExM
cykgYnkgZGVmYXVsdCBvbiBDeWd3aW4gYW5kIE1pbkdXLCB0bwotICAgIG1hdGNoIG90aGVyIHBs
YXRmb3Jtcy4gIFVzZSAtLWRpc2FibGUtc2hhcmVkIHRvIGF2b2lkIHRoaXMuCi0KLSAgSmF2YQot
ICAqIHBhcnNlRGVsaW1pdGVkRnJvbSgpIGFuZCBtZXJnZURlbGltaXRlZEZyb20oKSBub3cgZGV0
ZWN0IEVPRiBhbmQgcmV0dXJuCi0gICAgZmFsc2UvbnVsbCBpbnN0ZWFkIG9mIHRocm93aW5nIGFu
IGV4Y2VwdGlvbi4KLSAgKiBGaXhlZCBzb21lIGluaXRpYWxpemF0aW9uIG9yZGVyaW5nIGJ1Z3Mu
Ci0gICogRml4ZXMgZm9yIE9wZW5KREsgNy4KLQotICBQeXRob24KLSAgKiAxMC0yNSB0aW1lcyBm
YXN0ZXIgdGhhbiAyLjIuMCwgc3RpbGwgcHVyZS1QeXRob24uCi0gICogQ2FsbGluZyBhIG11dGF0
aW5nIG1ldGhvZCBvbiBhIHN1Yi1tZXNzYWdlIGFsd2F5cyBpbnN0YW50aWF0ZXMgdGhlIG1lc3Nh
Z2UKLSAgICBpbiBpdHMgcGFyZW50IGV2ZW4gaWYgdGhlIG11dGF0aW5nIG1ldGhvZCBkb2Vzbid0
IGFjdHVhbGx5IG11dGF0ZSBhbnl0aGluZwotICAgIChlLmcuIHBhcnNpbmcgZnJvbSBhbiBlbXB0
eSBzdHJpbmcpLgotICAqIEV4cGFuZGVkIGRlc2NyaXB0b3JzIGEgYml0LgotCi0yMDA5LTA4LTEx
IHZlcnNpb24gMi4yLjA6Ci0KLSAgQysrCi0gICogTGl0ZSBtb2RlOiAgVGhlICJvcHRpbWl6ZV9m
b3IgPSBMSVRFX1JVTlRJTUUiIG9wdGlvbiBjYXVzZXMgdGhlIGNvbXBpbGVyCi0gICAgdG8gZ2Vu
ZXJhdGUgY29kZSB3aGljaCBvbmx5IGRlcGVuZHMgbGlicHJvdG9idWYtbGl0ZSwgd2hpY2ggaXMg
bXVjaCBzbWFsbGVyCi0gICAgdGhhbiBsaWJwcm90b2J1ZiBidXQgbGFja3MgZGVzY3JpcHRvcnMs
IHJlZmxlY3Rpb24sIGFuZCBzb21lIG90aGVyIGZlYXR1cmVzLgotICAqIEZpeGVkIGJ1ZyB3aGVy
ZSBNZXNzYWdlLlN3YXAoTWVzc2FnZSkgd2FzIG9ubHkgaW1wbGVtZW50ZWQgZm9yCi0gICAgb3B0
aW1pemVfZm9yX3NwZWVkLiAgU3dhcCBub3cgcHJvcGVybHkgaW1wbGVtZW50ZWQgaW4gYm90aCBt
b2RlcwotICAgIChJc3N1ZSA5MSkuCi0gICogQWRkZWQgUmVtb3ZlTGFzdCBhbmQgU3dhcEVsZW1l
bnRzKGluZGV4MSwgaW5kZXgyKSB0byBSZWZsZWN0aW9uCi0gICAgaW50ZXJmYWNlIGZvciByZXBl
YXRlZCBlbGVtZW50cy4KLSAgKiBBZGRlZCBTd2FwKE1lc3NhZ2UpIHRvIFJlZmxlY3Rpb24gaW50
ZXJmYWNlLgotICAqIEZsb2F0aW5nLXBvaW50IGxpdGVyYWxzIGluIGdlbmVyYXRlZCBjb2RlIHRo
YXQgYXJlIGludGVuZGVkIHRvIGJlCi0gICAgc2luZ2xlLXByZWNpc2lvbiBub3cgZXhwbGljaXRs
eSBoYXZlICdmJyBzdWZmaXggdG8gYXZvaWQgcGVkYW50aWMgd2FybmluZ3MKLSAgICBwcm9kdWNl
ZCBieSBzb21lIGNvbXBpbGVycy4KLSAgKiBUaGUgW2RlcHJlY2F0ZWQ9dHJ1ZV0gb3B0aW9uIG5v
dyBjYXVzZXMgdGhlIEMrKyBjb2RlIGdlbmVyYXRvciB0byBnZW5lcmF0ZQotICAgIGEgR0NDLXN0
eWxlIGRlcHJlY2F0aW9uIGFubm90YXRpb24gKG5vLW9wIG9uIG90aGVyIGNvbXBpbGVycykuCi0g
ICogZ29vZ2xlOjpwcm90b2J1Zjo6R2V0RW51bURlc2NyaXB0b3I8U29tZUdlbmVyYXRlZEVudW1U
eXBlPigpIHJldHVybnMgdGhlCi0gICAgRW51bURlc2NyaXB0b3IgZm9yIHRoYXQgdHlwZSAtLSB1
c2VmdWwgZm9yIHRlbXBsYXRlcyB3aGljaCBjYW5ub3QgY2FsbAotICAgIFNvbWVHZW5lcmF0ZWRF
bnVtVHlwZV9kZXNjcmlwdG9yKCkuCi0gICogVmFyaW91cyBvcHRpbWl6YXRpb25zIGFuZCBvYnNj
dXJlIGJ1ZyBmaXhlcy4KLQotICBKYXZhCi0gICogTGl0ZSBtb2RlOiAgVGhlICJvcHRpbWl6ZV9m
b3IgPSBMSVRFX1JVTlRJTUUiIG9wdGlvbiBjYXVzZXMgdGhlIGNvbXBpbGVyCi0gICAgdG8gZ2Vu
ZXJhdGUgY29kZSB3aGljaCBvbmx5IGRlcGVuZHMgbGlicHJvdG9idWYtbGl0ZSwgd2hpY2ggaXMg
bXVjaCBzbWFsbGVyCi0gICAgdGhhbiBsaWJwcm90b2J1ZiBidXQgbGFja3MgZGVzY3JpcHRvcnMs
IHJlZmxlY3Rpb24sIGFuZCBzb21lIG90aGVyIGZlYXR1cmVzLgotICAqIExvdHMgb2Ygc3R5bGUg
Y2xlYW51cHMuCi0KLSAgUHl0aG9uCi0gICogRml4ZWQgZW5kaWFubmVzcyBidWcgd2l0aCBmbG9h
dHMgYW5kIGRvdWJsZXMuCi0gICogVGV4dCBmb3JtYXQgcGFyc2luZyBzdXBwb3J0LgotICAqIEZp
eCBidWcgd2l0aCBwYXJzaW5nIHBhY2tlZCByZXBlYXRlZCBmaWVsZHMgaW4gZW1iZWRkZWQgbWVz
c2FnZXMuCi0gICogQWJpbGl0eSB0byBpbml0aWFsaXplIGZpZWxkcyBieSBwYXNzaW5nIGtleXdv
cmQgYXJncyB0byBjb25zdHJ1Y3Rvci4KLSAgKiBTdXBwb3J0IGl0ZXJhdG9ycyBpbiBleHRlbmQg
YW5kIF9fc2V0c2xpY2VfXyBmb3IgY29udGFpbmVycy4KLQotMjAwOS0wNS0xMyB2ZXJzaW9uIDIu
MS4wOgotCi0gIEdlbmVyYWwKLSAgKiBSZXBlYXRlZCBmaWVsZHMgb2YgcHJpbWl0aXZlIHR5cGVz
ICh0eXBlcyBvdGhlciB0aGF0IHN0cmluZywgZ3JvdXAsIGFuZAotICAgIG5lc3RlZCBtZXNzYWdl
cykgbWF5IG5vdyB1c2UgdGhlIG9wdGlvbiBbcGFja2VkID0gdHJ1ZV0gdG8gZ2V0IGEgbW9yZQot
ICAgIGVmZmljaWVudCBlbmNvZGluZy4gIEluIHRoZSBuZXcgZW5jb2RpbmcsIHRoZSBlbnRpcmUg
bGlzdCBpcyB3cml0dGVuCi0gICAgYXMgYSBzaW5nbGUgYnl0ZSBibG9iIHVzaW5nIHRoZSAibGVu
Z3RoLWRlbGltaXRlZCIgd2lyZSB0eXBlLiAgV2l0aGluCi0gICAgdGhpcyBibG9iLCB0aGUgaW5k
aXZpZHVhbCB2YWx1ZXMgYXJlIGVuY29kZWQgdGhlIHNhbWUgd2F5IHRoZXkgd291bGQKLSAgICBi
ZSBub3JtYWxseSBleGNlcHQgd2l0aG91dCBhIHRhZyBiZWZvcmUgZWFjaCB2YWx1ZSAodGh1cywg
dGhleSBhcmUKLSAgICB0aWdodGx5ICJwYWNrZWQiKS4KLSAgKiBGb3IgZWFjaCBmaWVsZCwgdGhl
IGdlbmVyYXRlZCBjb2RlIGNvbnRhaW5zIGFuIGludGVnZXIgY29uc3RhbnQgYXNzaWduZWQKLSAg
ICB0byB0aGUgZmllbGQgbnVtYmVyLiAgRm9yIGV4YW1wbGUsIHRoZSAucHJvdG8gZmlsZToKLSAg
ICAgIG1lc3NhZ2UgRm9vIHsgb3B0aW9uYWwgaW50IGJhcl9iYXogPSAxMjM7IH0KLSAgICB3b3Vs
ZCBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGNvbnN0YW50cywgYWxsIHdpdGggdGhlIGludGVnZXIg
dmFsdWUgMTIzOgotICAgICAgQysrOiAgICAgRm9vOjprQmFyQmF6RmllbGROdW1iZXIKLSAgICAg
IEphdmE6ICAgIEZvby5CQVJfQkFaX0ZJRUxEX05VTUJFUgotICAgICAgUHl0aG9uOiAgRm9vLkJB
Ul9CQVpfRklFTERfTlVNQkVSCi0gICAgQ29uc3RhbnRzIGFyZSBhbHNvIGdlbmVyYXRlZCBmb3Ig
ZXh0ZW5zaW9ucywgd2l0aCB0aGUgc2FtZSBuYW1pbmcgc2NoZW1lLgotICAgIFRoZXNlIGNvbnN0
YW50cyBtYXkgYmUgdXNlZCBhcyBzd2l0Y2ggY2FzZXMuCi0gICogVXBkYXRlZCBidW5kbGVkIEdv
b2dsZSBUZXN0IHRvIHZlcnNpb24gMS4zLjAuICBHb29nbGUgVGVzdCBpcyBub3cgYnVuZGxlZAot
ICAgIGluIGl0cyB2ZXJiYXRpbSBmb3JtIGFzIGEgbmVzdGVkIGF1dG9jb25mIHBhY2thZ2UsIHNv
IHlvdSBjYW4gZHJvcCBpbiBhbnkKLSAgICBvdGhlciB2ZXJzaW9uIG9mIEdvb2dsZSBUZXN0IGlm
IG5lZWRlZC4KLSAgKiBvcHRpbWl6ZV9mb3IgPSBTUEVFRCBpcyBub3cgdGhlIGRlZmF1bHQsIGJ5
IHBvcHVsYXIgZGVtYW5kLiAgVXNlCi0gICAgb3B0aW1pemVfZm9yID0gQ09ERV9TSVpFIGlmIGNv
ZGUgc2l6ZSBpcyBtb3JlIGltcG9ydGFudCBpbiB5b3VyIGFwcC4KLSAgKiBJdCBpcyBub3cgYW4g
ZXJyb3IgdG8gZGVmaW5lIGEgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXBlYXRlZCBmaWVsZC4KLSAg
ICBQcmV2aW91c2x5LCB0aGlzIHdhcyBzaWxlbnRseSBpZ25vcmVkIChpdCBoYWQgbm8gZWZmZWN0
IG9uIHRoZSBnZW5lcmF0ZWQKLSAgICBjb2RlKS4KLSAgKiBGaWVsZHMgY2FuIG5vdyBiZSBtYXJr
ZWQgZGVwcmVjYXRlZCBsaWtlOgotICAgICAgb3B0aW9uYWwgaW50MzIgZm9vID0gMSBbZGVwcmVj
YXRlZCA9IHRydWVdOwotICAgIEN1cnJlbnRseSB0aGlzIGRvZXMgbm90IGhhdmUgYW55IGFjdHVh
bCBlZmZlY3QsIGJ1dCBpbiB0aGUgZnV0dXJlIHRoZSBjb2RlCi0gICAgZ2VuZXJhdG9ycyBtYXkg
Z2VuZXJhdGUgZGVwcmVjYXRpb24gYW5ub3RhdGlvbnMgaW4gZWFjaCBsYW5ndWFnZS4KLSAgKiBD
cm9zcy1jb21waWxpbmcgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB1c2luZyB0aGUgLS13aXRoLXBy
b3RvYyBvcHRpb24gdG8KLSAgICBjb25maWd1cmUuICBTZWUgUkVBRE1FLnR4dCBmb3IgbW9yZSBp
bmZvLgotCi0gIHByb3RvYwotICAqIC0tZXJyb3JfZm9ybWF0PW1zdnMgb3B0aW9uIGNhdXNlcyBl
cnJvcnMgdG8gYmUgcHJpbnRlZCBpbiBWaXN1YWwgU3R1ZGlvCi0gICAgZm9ybWF0LCB3aGljaCBz
aG91bGQgYWxsb3cgdGhlbSB0byBiZSBjbGlja2VkIG9uIGluIHRoZSBidWlsZCBsb2cgdG8gZ28K
LSAgICBkaXJlY3RseSB0byB0aGUgZXJyb3IgbG9jYXRpb24uCi0gICogVGhlIHR5cGUgbmFtZSBy
ZXNvbHZlciB3aWxsIG5vIGxvbmdlciByZXNvbHZlIHR5cGUgbmFtZXMgdG8gZmllbGRzLiAgRm9y
Ci0gICAgZXhhbXBsZSwgdGhpcyBub3cgd29ya3M6Ci0gICAgICBtZXNzYWdlIEZvbyB7fQotICAg
ICAgbWVzc2FnZSBCYXIgewotICAgICAgICBvcHRpb25hbCBpbnQzMiBGb28gPSAxOwotICAgICAg
ICBvcHRpb25hbCBGb28gYmF6ID0gMjsKLSAgICAgIH0KLSAgICBQcmV2aW91c2x5LCB0aGUgdHlw
ZSBvZiAiYmF6IiB3b3VsZCByZXNvbHZlIHRvICJCYXIuRm9vIiwgYW5kIHlvdSdkIGdldAotICAg
IGFuIGVycm9yIGJlY2F1c2UgQmFyLkZvbyBpcyBhIGZpZWxkLCBub3QgYSB0eXBlLiAgTm93IHRo
ZSB0eXBlIG9mICJiYXoiCi0gICAgcmVzb2x2ZXMgdG8gdGhlIG1lc3NhZ2UgdHlwZSBGb28uICBU
aGlzIGNoYW5nZSBpcyB1bmxpa2VseSB0byBtYWtlIGEKLSAgICBkaWZmZXJlbmNlIHRvIGFueW9u
ZSB3aG8gZm9sbG93cyB0aGUgUHJvdG9jb2wgQnVmZmVycyBzdHlsZSBndWlkZS4KLQotICBDKysK
LSAgKiBTZXZlcmFsIG9wdGltaXphdGlvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86
Ci0gICAgLSBTZXJpYWxpemF0aW9uLCBlc3BlY2lhbGx5IHRvIGZsYXQgYXJyYXlzLCBpcyAxMCUt
NTAlIGZhc3RlciwgcG9zc2libHkKLSAgICAgIG1vcmUgZm9yIHNtYWxsIG9iamVjdHMuCi0gICAg
LSBTZXZlcmFsIGRlc2NyaXB0b3Igb3BlcmF0aW9ucyB3aGljaCBwcmV2aW91c2x5IHJlcXVpcmVk
IGxvY2tpbmcgbm8gbG9uZ2VyCi0gICAgICBkby4KLSAgICAtIERlc2NyaXB0b3JzIGFyZSBub3cg
Y29uc3RydWN0ZWQgbGF6aWx5IG9uIGZpcnN0IHVzZSwgcmF0aGVyIHRoYW4gYXQKLSAgICAgIHBy
b2Nlc3Mgc3RhcnR1cCB0aW1lLiAgVGhpcyBzaG91bGQgc2F2ZSBtZW1vcnkgaW4gcHJvZ3JhbXMg
d2hpY2ggZG8gbm90Ci0gICAgICB1c2UgZGVzY3JpcHRvcnMgb3IgcmVmbGVjdGlvbi4KLSAgICAt
IFVua25vd25GaWVsZFNldCBjb21wbGV0ZWx5IHJlZGVzaWduZWQgdG8gYmUgbW9yZSBlZmZpY2ll
bnQgKGVzcGVjaWFsbHkgaW4KLSAgICAgIHRlcm1zIG9mIG1lbW9yeSB1c2FnZSkuCi0gICAgLSBW
YXJpb3VzIG9wdGltaXphdGlvbnMgdG8gcmVkdWNlIGNvZGUgc2l6ZSAodGhvdWdoIHRoZSBzZXJp
YWxpemF0aW9uIHNwZWVkCi0gICAgICBvcHRpbWl6YXRpb25zIGluY3JlYXNlZCBjb2RlIHNpemUp
LgotICAqIE1lc3NhZ2UgaW50ZXJmYWNlIGhhcyBtZXRob2QgUGFyc2VGcm9tQm91bmRlZFplcm9D
b3B5U3RyZWFtKCkgd2hpY2ggcGFyc2VzCi0gICAgYSBsaW1pdGVkIG51bWJlciBvZiBieXRlcyBm
cm9tIGFuIGlucHV0IHN0cmVhbSByYXRoZXIgdGhhbiBwYXJzaW5nIHVudGlsCi0gICAgRU9GLgot
ICAqIEd6aXBJbnB1dFN0cmVhbSBhbmQgR3ppcE91dHB1dFN0cmVhbSBzdXBwb3J0IHJlYWRpbmcv
d3JpdGluZyBnemlwLSBvcgotICAgIHpsaWItY29tcHJlc3NlZCBzdHJlYW1zIGlmIHpsaWIgaXMg
YXZhaWxhYmxlLgotICAgIChnb29nbGUvcHJvdG9idWYvaW8vZ3ppcF9zdHJlYW0uaCkKLSAgKiBE
ZXNjcmlwdG9yUG9vbDo6RmluZEFsbEV4dGVuc2lvbnMoKSBhbmQgY29ycmVzcG9uZGluZwotICAg
IERlc2NyaXB0b3JEYXRhYmFzZTo6RmluZEFsbEV4dGVuc2lvbnMoKSBjYW4gYmUgdXNlZCB0byBl
bnVtZXJhdGUgYWxsCi0gICAgZXh0ZW5zaW9ucyBvZiBhIGdpdmVuIHR5cGUuCi0gICogRm9yIGVh
Y2ggZW51bSB0eXBlIEZvbywgcHJvdG9jIHdpbGwgZ2VuZXJhdGUgZnVuY3Rpb25zOgotICAgICAg
Y29uc3Qgc3RyaW5nJiBGb29fTmFtZShGb28gdmFsdWUpOwotICAgICAgYm9vbCBGb29fUGFyc2Uo
Y29uc3Qgc3RyaW5nJiBuYW1lLCBGb28qIHJlc3VsdCk7Ci0gICAgVGhlIGZvcm1lciByZXR1cm5z
IHRoZSBuYW1lIG9mIHRoZSBlbnVtIGNvbnN0YW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVu
Ci0gICAgdmFsdWUgd2hpbGUgdGhlIGxhdHRlciBmaW5kcyB0aGUgdmFsdWUgY29ycmVzcG9uZGlu
ZyB0byBhIG5hbWUuCi0gICogUmVwZWF0ZWRGaWVsZCBhbmQgUmVwZWF0ZWRQdHJGaWVsZCBub3cg
aGF2ZSBiYWNrLWluc2VydGlvbiBpdGVyYXRvcnMuCi0gICogU3RyaW5nIGZpZWxkcyBub3cgaGF2
ZSBzZXR0ZXJzIHRoYXQgdGFrZSBhIGNoYXIqIGFuZCBhIHNpemUsIGluIGFkZGl0aW9uCi0gICAg
dG8gdGhlIGV4aXN0aW5nIG9uZXMgdGhhdCB0b29rIGNoYXIqIG9yIGNvbnN0IHN0cmluZyYuCi0g
ICogRGVzY3JpcHRvclBvb2w6OkFsbG93VW5rbm93bkRlcGVuZGVuY2llcygpIG1heSBiZSB1c2Vk
IHRvIHRlbGwKLSAgICBEZXNjcmlwdG9yUG9vbCB0byBjcmVhdGUgcGxhY2Vob2xkZXIgZGVzY3Jp
cHRvcnMgZm9yIHVua25vd24gZW50aXRpZXMKLSAgICByZWZlcmVuY2VkIGluIGEgRmlsZURlc2Ny
aXB0b3JQcm90by4gIFRoaXMgY2FuIGFsbG93IHlvdSB0byBwYXJzZSBhIC5wcm90bwotICAgIGZp
bGUgd2l0aG91dCBoYXZpbmcgYWNjZXNzIHRvIG90aGVyIC5wcm90byBmaWxlcyB0aGF0IGl0IGlt
cG9ydHMsIGZvcgotICAgIGV4YW1wbGUuCi0gICogVXBkYXRlZCBndGVzdCB0byBsYXRlc3QgdmVy
c2lvbi4gIFRoZSBndGVzdCBwYWNrYWdlIGlzIG5vdyBpbmNsdWRlZCBhcyBhCi0gICAgbmVzdGVk
IGF1dG9jb25mIHBhY2thZ2UsIHNvIGl0IHNob3VsZCBiZSBhYmxlIHRvIGRyb3AgbmV3IHZlcnNp
b25zIGludG8gdGhlCi0gICAgImd0ZXN0IiBzdWJkaXJlY3Rvcnkgd2l0aG91dCBtb2RpZmljYXRp
b24uCi0KLSAgSmF2YQotICAqIEZpeGVkIGJ1ZyB3aGVyZSBNZXNzYWdlLm1lcmdlRnJvbShNZXNz
YWdlKSBmYWlsZWQgdG8gbWVyZ2UgZXh0ZW5zaW9ucy4KLSAgKiBNZXNzYWdlIGludGVyZmFjZSBo
YXMgbmV3IG1ldGhvZCB0b0J1aWxkZXIoKSB3aGljaCBpcyBlcXVpdmFsZW50IHRvCi0gICAgbmV3
QnVpbGRlckZvclR5cGUoKS5tZXJnZUZyb20odGhpcykuCi0gICogQWxsIGVudW1zIG5vdyBpbXBs
ZW1lbnQgdGhlIFByb3RvY29sTWVzc2FnZUVudW0gaW50ZXJmYWNlLgotICAqIFNldHRpbmcgYSBm
aWVsZCB0byBudWxsIG5vdyB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24uCi0gICogRml4ZWQg
dGVuZGVuY3kgZm9yIFRleHRGb3JtYXQncyBwYXJzaW5nIHRvIG92ZXJmbG93IHRoZSBzdGFjayB3
aGVuCi0gICAgcGFyc2luZyBsYXJnZSBzdHJpbmcgdmFsdWVzLiAgVGhlIHVuZGVybHlpbmcgcHJv
YmxlbSBpcyB3aXRoIEphdmEncwotICAgIHJlZ2V4IGltcGxlbWVudGF0aW9uICh3aGljaCB1bmZv
cnR1bmF0ZWx5IHVzZXMgcmVjdXJzaXZlIGJhY2t0cmFja2luZwotICAgIHJhdGhlciB0aGFuIGJ1
aWxkaW5nIGFuIE5GQSkuICBXb3JrZWQgYXJvdW5kIGJ5IG1ha2luZyB1c2Ugb2YgcG9zc2Vzc2l2
ZQotICAgIHF1YW50aWZpZXJzLgotICAqIEdlbmVyYXRlZCBzZXJ2aWNlIGNsYXNzZXMgbm93IGFs
c28gZ2VuZXJhdGUgcHVyZSBpbnRlcmZhY2VzLiAgRm9yIGEgc2VydmljZQotICAgIEZvbywgRm9v
LkludGVyZmFjZSBpcyBhIHB1cmUgaW50ZXJmYWNlIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBzZXJ2
aWNlJ3MKLSAgICBkZWZpbmVkIG1ldGhvZHMuICBGb28ubmV3UmVmbGVjdGl2ZVNlcnZpY2UoKSBj
YW4gYmUgY2FsbGVkIHRvIHdyYXAgYW4KLSAgICBpbnN0YW5jZSBvZiB0aGlzIGludGVyZmFjZSBp
biBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgZ2VuZXJpYwotICAgIFJwY1NlcnZpY2UgaW50
ZXJmYWNlLCB3aGljaCBwcm92aWRlcyByZWZsZWN0aW9uIHN1cHBvcnQgdGhhdCBpcyB1c3VhbGx5
Ci0gICAgbmVlZGVkIGJ5IFJQQyBzZXJ2ZXIgaW1wbGVtZW50YXRpb25zLgotICAqIFJQQyBpbnRl
cmZhY2VzIG5vdyBzdXBwb3J0IGJsb2NraW5nIG9wZXJhdGlvbiBpbiBhZGRpdGlvbiB0byBub24t
YmxvY2tpbmcuCi0gICAgVGhlIHByb3RvY29sIGNvbXBpbGVyIGdlbmVyYXRlcyBzZXBhcmF0ZSBi
bG9ja2luZyBhbmQgbm9uLWJsb2NraW5nIHN0dWJzCi0gICAgd2hpY2ggb3BlcmF0ZSBhZ2FpbnN0
IHNlcGFyYXRlIGJsb2NraW5nIGFuZCBub24tYmxvY2tpbmcgUlBDIGludGVyZmFjZXMuCi0gICAg
UlBDIGltcGxlbWVudGF0aW9ucyB3aWxsIGhhdmUgdG8gaW1wbGVtZW50IHRoZSBuZXcgaW50ZXJm
YWNlcyBpbiBvcmRlciB0bwotICAgIHN1cHBvcnQgYmxvY2tpbmcgbW9kZS4KLSAgKiBOZXcgSS9P
IG1ldGhvZHMgcGFyc2VEZWxpbWl0ZWRGcm9tKCksIG1lcmdlRGVsaW1pdGVkRnJvbSgpLCBhbmQK
LSAgICB3cml0ZURlbGltaXRlZFRvKCkgcmVhZCBhbmQgd3JpdGUgImRlbGltaXRlZCIgbWVzc2Fn
ZXMgZnJvbS90byBhIHN0cmVhbSwKLSAgICBtZWFuaW5nIHRoYXQgdGhlIG1lc3NhZ2Ugc2l6ZSBw
cmVjZWRlcyB0aGUgZGF0YS4gIFRoaXMgd2F5LCB5b3UgY2FuIHdyaXRlCi0gICAgbXVsdGlwbGUg
bWVzc2FnZXMgdG8gYSBzdHJlYW0gd2l0aG91dCBoYXZpbmcgdG8gd29ycnkgYWJvdXQgZGVsaW1p
dGluZwotICAgIHRoZW0geW91cnNlbGYuCi0gICogVGhyb3cgYSBtb3JlIGRlc2NyaXB0aXZlIGV4
Y2VwdGlvbiB3aGVuIGJ1aWxkKCkgaXMgZG91YmxlLWNhbGxlZC4KLSAgKiBBZGQgYSBtZXRob2Qg
dG8gcXVlcnkgd2hldGhlciBDb2RlZElucHV0U3RyZWFtIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGlu
cHV0Ci0gICAgc3RyZWFtLgotICAqIEFkZCBhIG1ldGhvZCB0byByZXNldCBhIENvZGVkSW5wdXRT
dHJlYW0ncyBzaXplIGNvdW50ZXI7IHVzZWZ1bCB3aGVuCi0gICAgcmVhZGluZyBtYW55IG1lc3Nh
Z2VzIHdpdGggdGhlIHNhbWUgc3RyZWFtLgotICAqIGVxdWFscygpIGFuZCBoYXNoQ29kZSgpIG5v
dyBhY2NvdW50IGZvciB1bmtub3duIGZpZWxkcy4KLQotICBQeXRob24KLSAgKiBBZGRlZCBzbGlj
aW5nIHN1cHBvcnQgZm9yIHJlcGVhdGVkIHNjYWxhciBmaWVsZHMuIEFkZGVkIHNsaWNlIHJldHJp
ZXZhbCBhbmQKLSAgICByZW1vdmFsIG9mIHJlcGVhdGVkIGNvbXBvc2l0ZSBmaWVsZHMuCi0gICog
VXBkYXRlZCBSUEMgaW50ZXJmYWNlcyB0byBhbGxvdyBmb3IgYmxvY2tpbmcgb3BlcmF0aW9uLiAg
QSBjbGllbnQgbWF5Ci0gICAgbm93IHBhc3MgTm9uZSBmb3IgYSBjYWxsYmFjayB3aGVuIG1ha2lu
ZyBhbiBSUEMsIGluIHdoaWNoIGNhc2UgdGhlCi0gICAgY2FsbCB3aWxsIGJsb2NrIHVudGlsIHRo
ZSByZXNwb25zZSBpcyByZWNlaXZlZCwgYW5kIHRoZSByZXNwb25zZQotICAgIG9iamVjdCB3aWxs
IGJlIHJldHVybmVkIGRpcmVjdGx5IHRvIHRoZSBjYWxsZXIuICBUaGlzIGludGVyZmFjZSBjaGFu
Z2UKLSAgICBjYW5ub3QgYmUgdXNlZCBpbiBwcmFjdGljZSB1bnRpbCBSUEMgaW1wbGVtZW50YXRp
b25zIGFyZSB1cGRhdGVkIHRvCi0gICAgaW1wbGVtZW50IGl0LgotICAqIENoYW5nZXMgdG8gaW5w
dXRfc3RyZWFtLnB5IHNob3VsZCBtYWtlIHByb3RvYnVmIGNvbXBhdGlibGUgd2l0aCBhcHBlbmdp
bmUuCi0KLTIwMDgtMTEtMjUgdmVyc2lvbiAyLjAuMzoKLQotICBwcm90b2MKLSAgKiBFbnVtIHZh
bHVlcyBtYXkgbm93IGhhdmUgY3VzdG9tIG9wdGlvbnMsIHVzaW5nIHN5bnRheCBzaW1pbGFyIHRv
IGZpZWxkCi0gICAgb3B0aW9ucy4KLSAgKiBGaXhlZCBidWcgd2hlcmUgLnByb3RvIGZpbGVzIHdo
aWNoIHVzZSBjdXN0b20gb3B0aW9ucyBidXQgZG9uJ3QgYWN0dWFsbHkKLSAgICBkZWZpbmUgdGhl
bSAoaS5lLiB0aGV5IGltcG9ydCBhbm90aGVyIC5wcm90byBmaWxlIGRlZmluaW5nIHRoZSBvcHRp
b25zKQotICAgIGhhZCB0byBleHBsaWNpdGx5IGltcG9ydCBkZXNjcmlwdG9yLnByb3RvLgotICAq
IEFkamFjZW50IHN0cmluZyBsaXRlcmFscyBpbiAucHJvdG8gZmlsZXMgd2lsbCBub3cgYmUgY29u
Y2F0ZW5hdGVkLCBsaWtlIGluCi0gICAgQy4KLSAgKiBJZiBhbiBpbnB1dCBmaWxlIGlzIGEgV2lu
ZG93cyBhYnNvbHV0ZSBwYXRoIChlLmcuICJDOlxmb29cYmFyLnByb3RvIikgYW5kCi0gICAgdGhl
IGltcG9ydCBwYXRoIG9ubHkgY29udGFpbnMgIi4iIChvciBjb250YWlucyAiLiIgYnV0IGRvZXMg
bm90IGNvbnRhaW4KLSAgICB0aGUgZmlsZSksIHByb3RvYyBpbmNvcnJlY3RseSB0aG91Z2h0IHRo
YXQgdGhlIGZpbGUgd2FzIHVuZGVyICIuIiwgYmVjYXVzZQotICAgIGl0IHRob3VnaHQgdGhhdCB0
aGUgcGF0aCB3YXMgcmVsYXRpdmUgKHNpbmNlIGl0IGRpZG4ndCBzdGFydCB3aXRoIGEgc2xhc2gp
LgotICAgIFRoaXMgaGFzIGJlZW4gZml4ZWQuCi0KLSAgQysrCi0gICogR2VuZXJhdGVkIG1lc3Nh
Z2UgY2xhc3NlcyBub3cgaGF2ZSBhIFN3YXAoKSBtZXRob2Qgd2hpY2ggZWZmaWNpZW50bHkgc3dh
cHMKLSAgICB0aGUgY29udGVudHMgb2YgdHdvIG9iamVjdHMuCi0gICogQWxsIG1lc3NhZ2UgY2xh
c3NlcyBub3cgaGF2ZSBhIFNwYWNlVXNlZCgpIG1ldGhvZCB3aGljaCByZXR1cm5zIGFuIGVzdGlt
YXRlCi0gICAgb2YgdGhlIG51bWJlciBvZiBieXRlcyBvZiBhbGxvY2F0ZWQgbWVtb3J5IGN1cnJl
bnRseSBvd25lZCBieSB0aGUgb2JqZWN0LgotICAgIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1
bCB3aGVuIHlvdSBhcmUgcmV1c2luZyBhIHNpbmdsZSBtZXNzYWdlIG9iamVjdAotICAgIHRvIGlt
cHJvdmUgcGVyZm9ybWFuY2UgYnV0IHdhbnQgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgYmxvYXQg
dXAgdG9vIGxhcmdlLgotICAqIE5ldyBtZXRob2QgTWVzc2FnZTo6U2VyaWFsaXplQXNTdHJpbmco
KSByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlCi0gICAgc2VyaWFsaXplZCBkYXRhLiAg
TWF5IGJlIG1vcmUgY29udmVuaWVudCB0aGFuIGNhbGxpbmcKLSAgICBTZXJpYWxpemVUb1N0cmlu
ZyhzdHJpbmcqKS4KLSAgKiBJbiBkZWJ1ZyBtb2RlLCBsb2cgZXJyb3IgbWVzc2FnZXMgd2hlbiBz
dHJpbmctdHlwZSBmaWVsZHMgYXJlIGZvdW5kIHRvCi0gICAgY29udGFpbiBieXRlcyB0aGF0IGFy
ZSBub3QgdmFsaWQgVVRGLTguCi0gICogRml4ZWQgYnVnIHdoZXJlIGEgbWVzc2FnZSB3aXRoIG11
bHRpcGxlIGV4dGVuc2lvbiByYW5nZXMgY291bGRuJ3QgcGFyc2UKLSAgICBleHRlbnNpb25zLgot
ICAqIEZpeGVkIGJ1ZyB3aGVyZSBNZXJnZUZyb20oY29uc3QgTWVzc2FnZSYpIGRpZG4ndCBkbyBh
bnl0aGluZyBpZiBpbnZva2VkIG9uCi0gICAgYSBtZXNzYWdlIHRoYXQgY29udGFpbmVkIG5vIGZp
ZWxkcyAoYnV0IHBvc3NpYmx5IGNvbnRhaW5lZCBleHRlbnNpb25zKS4KLSAgKiBGaXhlZCBTaG9y
dERlYnVnU3RyaW5nKCkgdG8gbm90IGJlIE8obl4yKS4gIER1cnIuCi0gICogRml4ZWQgY3Jhc2gg
aW4gVGV4dEZvcm1hdCBwYXJzaW5nIGlmIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgaW5wdXQgY2F1
c2VkIGEKLSAgICB0b2tlbml6YXRpb24gZXJyb3IuCi0gICogRml4ZWQgb2JzY3VyZSBidWdzIGlu
IHplcm9fY29weV9zdHJlYW1faW1wbC5jYy4KLSAgKiBBZGRlZCBzdXBwb3J0IGZvciBIUCBDKysg
b24gVHJ1NjQuCi0gICogT25seSBidWlsZCB0ZXN0cyBvbiAibWFrZSBjaGVjayIsIG5vdCAibWFr
ZSIuCi0gICogRml4ZWQgYWxpZ25tZW50IGlzc3VlIHRoYXQgY2F1c2VkIGNyYXNoZXMgd2hlbiB1
c2luZyBEeW5hbWljTWVzc2FnZSBvbgotICAgIDY0LWJpdCBTcGFyYyBtYWNoaW5lcy4KLSAgKiBT
aW1wbGlmeSB0ZW1wbGF0ZSB1c2FnZSB0byB3b3JrIHdpdGggTVNWQyAyMDAzLgotICAqIFdvcmsg
YXJvdW5kIEdDQyA0LjMueCB4ODZfNjQgY29tcGlsZXIgYnVnIHRoYXQgY2F1c2VkIGNyYXNoZXMg
b24gc3RhcnR1cC4KLSAgICAoVGhpcyBhZmZlY3RlZCBGZWRvcmEgOSBpbiBwYXJ0aWN1bGFyLikK
LSAgKiBOb3cgd29ya3Mgb24gIlNvbGFyaXMgMTAgdXNpbmcgcmVjZW50IFN1biBTdHVkaW8iLgot
Ci0gIEphdmEKLSAgKiBOZXcgb3ZlcmxvYWQgb2YgbWVyZ2VGcm9tKCkgd2hpY2ggcGFyc2VzIGEg
c2xpY2Ugb2YgYSBieXRlIGFycmF5IGluc3RlYWQKLSAgICBvZiB0aGUgd2hvbGUgdGhpbmcuCi0g
ICogTmV3IG1ldGhvZCBCeXRlU3RyaW5nLmFzUmVhZE9ubHlCeXRlQnVmZmVyKCkgZG9lcyB3aGF0
IGl0IHNvdW5kcyBsaWtlLgotICAqIEltcHJvdmVkIHBlcmZvcm1hbmNlIG9mIGlzSW5pdGlhbGl6
ZWQoKSB3aGVuIG9wdGltaXppbmcgZm9yIGNvZGUgc2l6ZS4KLQotICBQeXRob24KLSAgKiBDb3Jy
ZWN0ZWQgTGlzdEZpZWxkcygpIHNpZ25hdHVyZSBpbiBNZXNzYWdlIGJhc2UgY2xhc3MgdG8gbWF0
Y2ggd2hhdAotICAgIHN1YmNsYXNzZXMgYWN0dWFsbHkgaW1wbGVtZW50LgotICAqIFNvbWUgbWlu
b3IgcmVmYWN0b3JpbmcuCi0gICogRG9uJ3QgcGFzcyBzZWxmIGFzIGZpcnN0IGFyZ3VtZW50IHRv
IHN1cGVyY2xhc3MgY29uc3RydWN0b3IgKG5vIGxvbmdlcgotICAgIGFsbG93ZWQgaW4gUHl0aG9u
IDIuNikuCi0KLTIwMDgtMDktMjkgdmVyc2lvbiAyLjAuMjoKLQotICBHZW5lcmFsCi0gICogTGlj
ZW5zZSBjaGFuZ2VkIGZyb20gQXBhY2hlIDIuMCB0byBOZXcgQlNELgotICAqIEl0IGlzIG5vdyBw
b3NzaWJsZSB0byBkZWZpbmUgY3VzdG9tICJvcHRpb25zIiwgd2hpY2ggYXJlIGJhc2ljYWxseQot
ICAgIGFubm90YXRpb25zIHdoaWNoIG1heSBiZSBwbGFjZWQgb24gZGVmaW5pdGlvbnMgaW4gYSAu
cHJvdG8gZmlsZS4KLSAgICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IGRlZmluZSBhIGZpZWxkIG9w
dGlvbiBjYWxsZWQgImZvbyIgbGlrZSBzbzoKLSAgICAgIGltcG9ydCAiZ29vZ2xlL3Byb3RvYnVm
L2Rlc2NyaXB0b3IucHJvdG8iCi0gICAgICBleHRlbmQgZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0
aW9ucyB7Ci0gICAgICAgIG9wdGlvbmFsIHN0cmluZyBmb28gPSAxMjM0NTsKLSAgICAgIH0KLSAg
ICBUaGVuIHlvdSBhbm5vdGF0ZSBhIGZpZWxkIHVzaW5nIHRoZSAiZm9vIiBvcHRpb246Ci0gICAg
ICBtZXNzYWdlIE15TWVzc2FnZSB7Ci0gICAgICAgIG9wdGlvbmFsIGludDMyIHNvbWVfZmllbGQg
PSAxIFsoZm9vKSA9ICJiYXIiXQotICAgICAgfQotICAgIFRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlv
biBpcyB0aGVuIHZpc2libGUgdmlhIHRoZSBtZXNzYWdlJ3MKLSAgICBEZXNjcmlwdG9yOgotICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9Ci0gICAgICAgIE15TWVzc2FnZTo6ZGVz
Y3JpcHRvcigpLT5GaW5kRmllbGRCeU5hbWUoInNvbWVfZmllbGQiKTsKLSAgICAgIGFzc2VydChm
aWVsZC0+b3B0aW9ucygpLkdldEV4dGVuc2lvbihmb28pID09ICJiYXIiKTsKLSAgICBUaGlzIGZl
YXR1cmUgaGFzIGJlZW4gaW1wbGVtZW50ZWQgYW5kIHRlc3RlZCBpbiBDKysgYW5kIEphdmEuCi0g
ICAgT3RoZXIgbGFuZ3VhZ2VzIG1heSBvciBtYXkgbm90IG5lZWQgdG8gZG8gZXh0cmEgd29yayB0
byBzdXBwb3J0Ci0gICAgY3VzdG9tIG9wdGlvbnMsIGRlcGVuZGluZyBvbiBob3cgdGhleSBjb25z
dHJ1Y3QgZGVzY3JpcHRvcnMuCi0KLSAgQysrCi0gICogRml4ZWQgc29tZSBHQ0Mgd2FybmluZ3Mg
dGhhdCBvbmx5IG9jY3VyIHdoZW4gdXNpbmcgLXBlZGFudGljLgotICAqIEltcHJvdmVkIHN0YXRp
YyBpbml0aWFsaXphdGlvbiBjb2RlLCBtYWtpbmcgb3JkZXJpbmcgbW9yZQotICAgIHByZWRpY3Rh
YmxlIGFtb25nIG90aGVyIHRoaW5ncy4KLSAgKiBUZXh0Rm9ybWF0IHdpbGwgbm8gbG9uZ2VyIGFj
Y2VwdCBtZXNzYWdlcyB3aGljaCBjb250YWluIG11bHRpcGxlCi0gICAgaW5zdGFuY2VzIG9mIGEg
c2luZ3VsYXIgZmllbGQuICBQcmV2aW91c2x5LCB0aGUgbGF0dGVyIGluc3RhbmNlCi0gICAgd291
bGQgb3ZlcndyaXRlIHRoZSBmb3JtZXIuCi0gICogTm93IHdvcmtzIG9uIHN5c3RlbXMgdGhhdCBk
b24ndCBoYXZlIGhhc2hfbWFwLgotCi0gIEphdmEKLSAgKiBQcmludCBAT3ZlcnJpZGUgYW5ub3Rh
dGlvbiBpbiBnZW5lcmF0ZWQgY29kZSB3aGVyZSBhcHByb3ByaWF0ZS4KLQotICBQeXRob24KLSAg
KiBTdHJpbmdzIG5vdyB1c2UgdGhlICJ1bmljb2RlIiB0eXBlIHJhdGhlciB0aGFuIHRoZSAic3Ry
IiB0eXBlLgotICAgIFN0cmluZyBmaWVsZHMgbWF5IHN0aWxsIGJlIGFzc2lnbmVkIEFTQ0lJICJz
dHIiIHZhbHVlczsgdGhleSB3aWxsCi0gICAgYXV0b21hdGljYWxseSBiZSBjb252ZXJ0ZWQuCi0g
ICogQWRkaW5nIGEgcHJvcGVydHkgdG8gYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHJlcGVhdGVk
IGZpZWxkIG5vdwotICAgIHJhaXNlcyBhbiBleGNlcHRpb24uICBGb3IgZXhhbXBsZToKLSAgICAg
ICMgTm8gbG9uZ2VyIHdvcmtzIChhbmQgbmV2ZXIgc2hvdWxkIGhhdmUpLgotICAgICAgbWVzc2Fn
ZS5zb21lX3JlcGVhdGVkX2ZpZWxkLmZvbyA9IDEKLQotICBXaW5kb3dzCi0gICogV2Ugbm93IGJ1
aWxkIHN0YXRpYyBsaWJyYXJpZXMgcmF0aGVyIHRoYW4gRExMcyBieSBkZWZhdWx0IG9uIE1TVkMu
Ci0gICAgU2VlIHZzcHJvamVjdHMvcmVhZG1lLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQot
MjAwOC0wOC0xNSB2ZXJzaW9uIDIuMC4xOgotCi0gIHByb3RvYwotICAqIE5ldyBmbGFncyAtLWVu
Y29kZSBhbmQgLS1kZWNvZGUgY2FuIGJlIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIHByb3RvYnVm
IHRleHQKLSAgICBmb3JtYXQgYW5kIGJpbmFyeSBmb3JtYXQgZnJvbSB0aGUgY29tbWFuZC1saW5l
LgotICAqIE5ldyBmbGFnIC0tZGVzY3JpcHRvcl9zZXRfb3V0IGNhbiBiZSB1c2VkIHRvIHdyaXRl
IEZpbGVEZXNjcmlwdG9yUHJvdG9zIGZvcgotICAgIGFsbCBwYXJzZWQgZmlsZXMgZGlyZWN0bHkg
aW50byBhIHNpbmdsZSBvdXRwdXQgZmlsZS4gIFRoaXMgaXMgcGFydGljdWxhcmx5Ci0gICAgdXNl
ZnVsIGlmIHlvdSB3aXNoIHRvIHBhcnNlIC5wcm90byBmaWxlcyBmcm9tIHByb2dyYW1zIHdyaXR0
ZW4gaW4gbGFuZ3VhZ2VzCi0gICAgb3RoZXIgdGhhbiBDKys6IGp1c3QgcnVuIHByb3RvYyBhcyBh
IGJhY2tncm91bmQgcHJvY2VzcyBhbmQgaGF2ZSBpdCBvdXRwdXQKLSAgICBhIEZpbGVEZXNjcmlw
dG9yTGlzdCwgdGhlbiBwYXJzZSB0aGF0IG5hdGl2ZWx5LgotICAqIEltcHJvdmVkIGVycm9yIG1l
c3NhZ2Ugd2hlbiBhbiBlbnVtIHZhbHVlJ3MgbmFtZSBjb25mbGljdHMgd2l0aCBhbm90aGVyCi0g
ICAgc3ltYm9sIGRlZmluZWQgaW4gdGhlIGVudW0gdHlwZSdzIHNjb3BlLCBlLmcuIGlmIHR3byBl
bnVtIHR5cGVzIGRlY2xhcmVkCi0gICAgaW4gdGhlIHNhbWUgc2NvcGUgaGF2ZSB2YWx1ZXMgd2l0
aCB0aGUgc2FtZSBuYW1lLiAgVGhpcyBpcyBkaXNhbGxvd2VkIGZvcgotICAgIGNvbXBhdGliaWxp
dHkgd2l0aCBDKyssIGJ1dCB0aGlzIHdhc24ndCBjbGVhciBmcm9tIHRoZSBlcnJvci4KLSAgKiBG
aXhlZCBhYnNvbHV0ZSBvdXRwdXQgcGF0aHMgb24gV2luZG93cy4KLSAgKiBBbGxvdyB0cmFpbGlu
ZyBzbGFzaGVzIGluIC0tcHJvdG9fcGF0aCBtYXBwaW5ncy4KLQotICBDKysKLSAgKiBSZWZsZWN0
aW9uIG9iamVjdHMgYXJlIG5vdyBwZXItY2xhc3MgcmF0aGVyIHRoYW4gcGVyLWluc3RhbmNlLiAg
VG8gbWFrZSB0aGlzCi0gICAgcG9zc2libGUsIHRoZSBSZWZsZWN0aW9uIGludGVyZmFjZSBoYWQg
dG8gYmUgY2hhbmdlZCBzdWNoIHRoYXQgYWxsIG1ldGhvZHMKLSAgICB0YWtlIHRoZSBNZXNzYWdl
IGluc3RhbmNlIGFzIGEgcGFyYW1ldGVyLiAgVGhpcyBjaGFuZ2UgaW1wcm92ZXMgcGVyZm9ybWFu
Y2UKLSAgICBzaWduaWZpY2FudGx5IGluIG1lbW9yeS1iYW5kd2lkdGgtbGltaXRlZCB1c2UgY2Fz
ZXMsIHNpbmNlIGl0IG1ha2VzIHRoZQotICAgIG1lc3NhZ2Ugb2JqZWN0cyBzbWFsbGVyLiAgTm90
ZSB0aGF0IHNvdXJjZS1pbmNvbXBhdGlibGUgaW50ZXJmYWNlIGNoYW5nZXMKLSAgICBsaWtlIHRo
aXMgd2lsbCBub3QgYmUgbWFkZSBhZ2FpbiBhZnRlciB0aGUgbGlicmFyeSBsZWF2ZXMgYmV0YS4K
LSAgKiBIZXVyaXN0aWNhbGx5IGRldGVjdCBzdWItbWVzc2FnZXMgd2hlbiBwcmludGluZyB1bmtu
b3duIGZpZWxkcy4KLSAgKiBGaXggc3RhdGljIGluaXRpYWxpemF0aW9uIG9yZGVyaW5nIGJ1ZyB0
aGF0IGNhdXNlZCBjcmFzaGVzIGF0IHN0YXJ0dXAgd2hlbgotICAgIGNvbXBpbGluZyBvbiBNYWMg
d2l0aCBzdGF0aWMgbGlua2luZy4KLSAgKiBGaXhlZCBUb2tlbml6ZXJUZXN0IHdoZW4gY29tcGls
aW5nIHdpdGggLUROREVCVUcgb24gTGludXguCi0gICogRml4ZWQgaW5jb3JyZWN0IGRlZmluaXRp
b24gb2Yga2ludDMybWluLgotICAqIEZpeCBieXRlcyB0eXBlIHNldHRlciB0byB3b3JrIHdpdGgg
Ynl0ZSBzZXF1ZW5jZXMgd2l0aCBlbWJlZGRlZCBOVUxMcy4KLSAgKiBPdGhlciBpcnJlbGV2YW50
IHR3ZWFrcy4KLQotICBKYXZhCi0gICogRml4ZWQgVW5rbm93bkZpZWxkU2V0J3MgcGFyc2luZyBv
ZiB2YXJpbnRzIGxhcmdlciB0aGFuIDMyIGJpdHMuCi0gICogRml4ZWQgVGV4dEZvcm1hdCdzIHBh
cnNpbmcgb2YgImluZiIgYW5kICJuYW4iLgotICAqIEZpeGVkIFRleHRGb3JtYXQncyBwYXJzaW5n
IG9mIGNvbW1lbnRzLgotICAqIEFkZGVkIGluZm8gdG8gSmF2YSBQT00gdGhhdCB3aWxsIGJlIHJl
cXVpcmVkIHdoZW4gd2UgdXBsb2FkIHRoZQotICAgIHBhY2thZ2UgdG8gYSBNYXZlbiByZXBvLgot
Ci0gIFB5dGhvbgotICAqIE1lcmdlRnJvbShtZXNzYWdlKSBhbmQgQ29weUZyb20obWVzc2FnZSkg
YXJlIG5vdyBpbXBsZW1lbnRlZC4KLSAgKiBTZXJpYWxpemVUb1N0cmluZygpIHJhaXNlcyBhbiBl
eGNlcHRpb24gaWYgdGhlIG1lc3NhZ2UgaXMgbWlzc2luZyByZXF1aXJlZAotICAgIGZpZWxkcy4K
LSAgKiBDb2RlIG9yZ2FuaXphdGlvbiBpbXByb3ZlbWVudHMuCi0gICogRml4ZWQgZG9jIGNvbW1l
bnRzIGZvciBScGNDb250cm9sbGVyIGFuZCBScGNDaGFubmVsLCB3aGljaCBoYWQgc29tZWhvdyBi
ZWVuCi0gICAgc3dhcHBlZC4KLSAgKiBGaXhlZCB0ZXh0X2Zvcm1hdF90ZXN0IG9uIFdpbmRvd3Mg
d2hlcmUgZmxvYXRpbmctcG9pbnQgZXhwb25lbnRzIHNvbWV0aW1lcwotICAgIGNvbnRhaW4gZXh0
cmEgemVyb3MuCi0gICogRml4IFB5dGhvbiBzZXJ2aWNlIENhbGxNZXRob2QoKSBpbXBsZW1lbnRh
dGlvbi4KLQotICBPdGhlcgotICAqIEltcHJvdmVkIHJlYWRtZXMuCi0gICogVklNIHN5bnRheCBo
aWdobGlnaHRpbmcgaW1wcm92ZW1lbnRzLgotCi0yMDA4LTA3LTA3IHZlcnNpb24gMi4wLjA6Ci0K
LSAgKiBGaXJzdCBwdWJsaWMgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvQ09OVFJJQlVUT1JTLnR4dCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Q09OVFJJQlVUT1JTLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhkOTdmYzIz
ZDg1YjE0NTM2N2VhYmY2MjQ5Y2Q0YWVkNzU1YmIzMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL0NPTlRSSUJVVE9SUy50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDIgKzAsMCBAQAotVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGhh
dmUgbWFkZSBsYXJnZSBjb250cmlidXRpb25zCi10byB0aGUgcHVibGljIHZlcnNpb24gb2YgUHJv
dG9jb2wgQnVmZmVycy4KLQotT3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYW5kIGlt
cGxlbWVudGF0aW9uOgotICBTYW5qYXkgR2hlbWF3YXQgPHNhbmpheUBnb29nbGUuY29tPgotICBK
ZWZmIERlYW4gPGplZmZAZ29vZ2xlLmNvbT4KLSAgRGFuaWVsIER1bGl0eiA8ZGFuaWVsQGdvb2ds
ZS5jb20+Ci0gIENyYWlnIFNpbHZlcnN0ZWluCi0gIFBhdWwgSGFhaHIgPGhhYWhyQGdvb2dsZS5j
b20+Ci0gIENvcmV5IEFuZGVyc29uIDxjb3JpbkBnb29nbGUuY29tPgotICAoYW5kIG1hbnkgb3Ro
ZXJzKQotCi1Qcm90bzIgQysrIGFuZCBKYXZhIHByaW1hcnkgYXV0aG9yOgotICBLZW50b24gVmFy
ZGEgPGtlbnRvbkBnb29nbGUuY29tPgotCi1Qcm90bzIgUHl0aG9uIHByaW1hcnkgYXV0aG9yczoK
LSAgV2lsbCBSb2JpbnNvbiA8cm9iaW5zb25AZ29vZ2xlLmNvbT4KLSAgUGV0YXIgUGV0cm92IDxw
ZXRhckBnb29nbGUuY29tPgotCi1KYXZhIE5hbm8gcHJpbWFyeSBhdXRob3JzOgotICBCcmlhbiBE
dWZmIDxiZHVmZkBnb29nbGUuY29tPgotICBUb20gQ2hhbyA8Y2hhb3RAZ29vZ2xlLmNvbT4KLSAg
TWF4IENhaSA8bWF4dHJveUBnb29nbGUuY29tPgotICBVbGFzIEtpcmF6Y2kgPHVsYXNAZ29vZ2xl
LmNvbT4KLQotTGFyZ2UgY29kZSBjb250cmlidXRpb25zOgotICBKYXNvbiBIc3VlaCA8amFzb25o
QGdvb2dsZS5jb20+Ci0gIEpvc2VwaCBTY2hvcnIgPGpzY2hvcnJAZ29vZ2xlLmNvbT4KLSAgV2Vu
Ym8gWmh1IDx3ZW5ib3pAZ29vZ2xlLmNvbT4KLQotTGFyZ2UgcXVhbnRpdHkgb2YgY29kZSByZXZp
ZXdzOgotICBTY290dCBCcnVjZSA8c2JydWNlQGdvb2dsZS5jb20+Ci0gIEZyYW5rIFllbGxpbgot
ICBOZWFsIE5vcndpdHogPG5ub3J3aXR6QGdvb2dsZS5jb20+Ci0gIEplZmZyZXkgWWFzc2tpbiA8
anlhc3NraW5AZ29vZ2xlLmNvbT4KLSAgQW1icm9zZSBGZWluc3RlaW4gPGFtYnJvc2VAZ29vZ2xl
LmNvbT4KLQotRG9jdW1lbnRhdGlvbjoKLSAgTGlzYSBDYXJleSA8bGNhcmV5QGdvb2dsZS5jb20+
Ci0KLU1hdmVuIHBhY2thZ2luZzoKLSAgR3JlZ29yeSBLaWNrIDxnYWtAZ29vZ2xlLmNvbT4KLQot
UGF0Y2ggY29udHJpYnV0b3JzOgotICBLZXZpbiBLbyA8a2V2aW4ucy5rb0BnbWFpbC5jb20+Ci0g
ICAgKiBTbWFsbCBwYXRjaCB0byBoYW5kbGUgdHJhaWxpbmcgc2xhc2hlcyBpbiAtLXByb3RvX3Bh
dGggZmxhZy4KLSAgSm9oYW4gRXVwaHJvc2luZSA8cHJvcHB5QGFtaW5jaGUuY29tPgotICAgICog
U21hbGwgcGF0Y2ggdG8gZml4IFB5dGhvbiBDYWxsTWV0aG9kKCkuCi0gIFVscmljaCBLdW5pdHog
PGt1bmVAZGVpbmUtdGFsZXIuZGU+Ci0gICAgKiBTbWFsbCBvcHRpbWl6YXRpb25zIHRvIFB5dGhv
biBzZXJpYWxpemF0aW9uLgotICBMZWFuZHJvIEx1Y2FyZWxsYSA8bGx1Y2F4QGdtYWlsLmNvbT4K
LSAgICAqIFZJIHN5bnRheCBoaWdobGlnaHRpbmcgdHdlYWtzLgotICAgICogRml4IGNvbXBpbGVy
IHRvIG5vdCBtYWtlIG91dHB1dCBleGVjdXRhYmxlLgotICBEaWxpcCBKb3NlcGggPGRpbGlwLmFu
dG9ueS5qb3NlcGhAZ21haWwuY29tPgotICAgICogSGV1cmlzdGljIGRldGVjdGlvbiBvZiBzdWIt
bWVzc2FnZXMgd2hlbiBwcmludGluZyB1bmtub3duIGZpZWxkcyBpbgotICAgICAgdGV4dCBmb3Jt
YXQuCi0gIEJyaWFuIEF0a2luc29uIDxuYWlyYjc3NEBnbWFpbC5jb20+Ci0gICAgKiBBZGRlZCBA
T3ZlcnJpZGUgYW5ub3RhdGlvbiB0byBnZW5lcmF0ZWQgSmF2YSBjb2RlIHdoZXJlIGFwcHJvcHJp
YXRlLgotICBWaW5jZW50IENob2luacOocmUgPENob2luaWVyZS5WaW5jZW50QGh5ZHJvLnFjLmNh
PgotICAgICogVHJ1NjQgc3VwcG9ydC4KLSAgTW9udHkgVGF5bG9yIDxtb250eS50YXlsb3JAZ21h
aWwuY29tPgotICAgICogU29sYXJpcyAxMCArIFN1biBTdHVkaW8gZml4ZXMuCi0gIEFsZWsgU3Rv
cm0gPGFsZWsuc3Rvcm1AZ21haWwuY29tPgotICAgICogU2xpY2luZyBzdXBwb3J0IGZvciByZXBl
YXRlZCBzY2FsYXIgZmllbGRzIGZvciB0aGUgUHl0aG9uIEFQSS4KLSAgT2xlZyBTbW9sc2t5IDxv
bGVnLnNtb2xza3lAZ21haWwuY29tPgotICAgICogTVMgVmlzdWFsIFN0dWRpbyBlcnJvciBmb3Jt
YXQgb3B0aW9uLgotICAgICogRGV0ZWN0IHVub3JkZXJlZF9tYXAgaW4gc3RsX2hhc2gubTQuCi0g
IEJyaWFuIE9sc29uIDxicmlhbm9sc29uQGdvb2dsZS5jb20+Ci0gICAgKiBnemlwL3psaWIgSS9P
IHN1cHBvcnQuCi0gIE1pY2hhZWwgUG9vbGUgPG1kcG9vbGVAdHJvaWx1cy5vcmc+Ci0gICAgKiBG
aXhlZCB3YXJuaW5ncyBhYm91dCBnZW5lcmF0ZWQgY29uc3RydWN0b3JzIG5vdCBleHBsaWNpdGx5
IGluaXRpYWxpemluZwotICAgICAgYWxsIGZpZWxkcyAob25seSBwcmVzZW50IHdpdGggY2VydGFp
biBjb21waWxlciBzZXR0aW5ncykuCi0gICAgKiBBZGRlZCBnZW5lcmF0aW9uIG9mIGZpZWxkIG51
bWJlciBjb25zdGFudHMuCi0gIFdpbmsgU2F2aWxsZSA8d2lua0Bnb29nbGUuY29tPgotICAgICog
Rml4ZWQgaW5pdGlhbGl6YXRpb24gb3JkZXJpbmcgcHJvYmxlbSBpbiBsb2dnaW5nIGNvZGUuCi0g
IFdpbGwgUGllcmNlIDx3aWxscEBudWNsZWkuY29tPgotICAgICogU21hbGwgcGF0Y2ggaW1wcm92
aW5nIHBlcmZvcm1hbmNlIG9mIGluIFB5dGhvbiBzZXJpYWxpemF0aW9uLgotICBBbGV4YW5kcmUg
VmFzc2Fsb3R0aSA8YWxleGFuZHJlQHBlYWRyb3AuY29tPgotICAgICogRW1hY3MgbW9kZSBmb3Ig
UHJvdG9jb2wgQnVmZmVycyAoZWRpdG9ycy9wcm90b2J1Zi1tb2RlLmVsKS4KLSAgU2NvdHQgU3Rh
ZmZvcmQgPHNjb3R0LnN0YWZmb3JkQGdtYWlsLmNvbT4KLSAgICAqIEFkZGVkIFN3YXAoKSwgU3dh
cEVsZW1lbnRzKCksIGFuZCBSZW1vdmVMYXN0KCkgdG8gUmVmbGVjdGlvbiBpbnRlcmZhY2UuCi0g
IEFsZXhhbmRlciBNZWxuaWtvdiA8YWxtQHNpYm1haWwucnU+Ci0gICAgKiBIUFVYIHN1cHBvcnQu
Ci0gIE9saXZlciBKb3dldHQgPG9saXZlci5qb3dldHRAZ21haWwuY29tPgotICAgICogRGV0ZWN0
IHdoZXRoZXIgemxpYiBpcyBuZXcgZW5vdWdoIGluIGNvbmZpZ3VyZSBzY3JpcHQuCi0gICAgKiBG
aXhlcyBmb3IgU29sYXJpcyAxMCAzMi82NC1iaXQgY29uZnVzaW9uLgotICBFdmFuIEpvbmVzIDxl
dmFuakBtaXQuZWR1PgotICAgICogT3B0aW1pemUgSmF2YSBzZXJpYWxpemF0aW9uIGNvZGUgd2hl
biB3cml0aW5nIGEgc21hbGwgbWVzc2FnZSB0byBhIHN0cmVhbS4KLSAgICAqIE9wdGltaXplIEph
dmEgc2VyaWFsaXphdGlvbiBvZiBzdHJpbmdzIHNvIHRoYXQgVVRGLTggZW5jb2RpbmcgaGFwcGVu
cyBvbmx5Ci0gICAgICBvbmNlIHBlciBzdHJpbmcgcGVyIHNlcmlhbGl6YXRpb24gY2FsbC4KLSAg
ICAqIENsZWFuIHVwIHNvbWUgSmF2YSB3YXJuaW5ncy4KLSAgICAqIEZpeCBidWcgd2l0aCBwZXJt
YW5lbnQgY2FsbGJhY2tzIHRoYXQgZGVsZXRlIHRoZW1zZWx2ZXMgd2hlbiBydW4uCi0gIE1pY2hh
ZWwgS3VjaGFyc2tpIDxtLmt1Y2hhcnNraUBnbWFpbC5jb20+Ci0gICAgKiBBZGRlZCBDb2RlZElu
cHV0U3RyZWFtLmdldFRvdGFsQnl0ZXNSZWFkKCkuCi0gIEthY3BlciBLb3dhbGlrIDx4YXJ0aGlz
aXVzLmtrQGdtYWlsLmNvbT4KLSAgICAqIEZpeGVkIG00L2FjeF9wdGhyZWFkLm00IHByb2JsZW0g
Zm9yIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucy4KLSAgV2lsbGlhbSBPcnIgPHdpbGxAd29ycmJh
c2UuY29tPgotICAgICogRml4ZWQgZGV0ZWN0aW9uIG9mIHNjaGVkX3lpZWxkIG9uIFNvbGFyaXMu
Ci0gICAgKiBBZGRlZCBhdG9taWNvcHMgZm9yIFNvbGFyaXMKLSAgQW5kcmV3IFBhcHJvY2tpIDxh
bmRyZXdAaXNoaWJvby5jb20+Ci0gICAgKiBGaXhlZCBtaW5vciBJQk0geGxDIGNvbXBpbGVyIGJ1
aWxkIGlzc3VlcwotICAgICogQWRkZWQgYXRvbWljb3BzIGZvciBBSVggKFBPV0VSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9ERVBTIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9ERVBTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTE1NmRjZDM2
ZWYxYWZhOGIyNjkwNjRhMGNmZGM0NDhmNGY3ZTg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvREVQUworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAot
c2tpcF9jaGlsZF9pbmNsdWRlcyA9IFsKLSAgJ29iamVjdGl2ZWMnLAotXQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9M
SUNFTlNFIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDI4YzgyMzI0
MjAyMjQxYjk5NTIyZWQzMTFkMWMzNjljMWVlZTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvTElDRU5TRQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAg
QEAKLVRoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFsbCBwYXJ0cyBvZiBQcm90b2NvbCBCdWZmZXJz
IGV4Y2VwdCB0aGUgZm9sbG93aW5nOgotCi0gIC0gQXRvbWljb3BzIHN1cHBvcnQgZm9yIGdlbmVy
aWMgZ2NjLCBsb2NhdGVkIGluCi0gICAgc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNv
cHNfaW50ZXJuYWxzX2dlbmVyaWNfZ2NjLmguCi0gICAgVGhpcyBmaWxlIGlzIGNvcHlyaWdodGVk
IGJ5IFJlZCBIYXQgSW5jLgotCi0gIC0gQXRvbWljb3BzIHN1cHBvcnQgZm9yIEFJWC9QT1dFUiwg
bG9jYXRlZCBpbgotICAgIHNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVy
bmFsc19wb3dlci5oLgotICAgIFRoaXMgZmlsZSBpcyBjb3B5cmlnaHRlZCBieSBCbG9vbWJlcmcg
RmluYW5jZSBMUC4KLQotQ29weXJpZ2h0IDIwMTQsIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLW1ldDoKLQotICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LW5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLWNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLWluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLWRpc3RyaWJ1dGlvbi4KLSAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLWNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi10aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1Db2RlIGdlbmVyYXRlZCBieSB0
aGUgUHJvdG9jb2wgQnVmZmVyIGNvbXBpbGVyIGlzIG93bmVkIGJ5IHRoZSBvd25lcgotb2YgdGhl
IGlucHV0IGZpbGUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgaXQuICBUaGlzIGNvZGUgaXMgbm90Ci1z
dGFuZGFsb25lIGFuZCByZXF1aXJlcyBhIHN1cHBvcnQgbGlicmFyeSB0byBiZSBsaW5rZWQgd2l0
aCBpdC4gIFRoaXMKLXN1cHBvcnQgbGlicmFyeSBpcyBpdHNlbGYgY292ZXJlZCBieSB0aGUgYWJv
dmUgbGljZW5zZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvTWFrZWZpbGUuYW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL01ha2VmaWxlLmFtCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTk4ODgxNjZmODFkNTVjOWZkMWM3NDEwZWJlNDZjNmM3
Mjg4ZjEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvTWFr
ZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw3NjkgKzAsMCBAQAotIyMgUHJvY2VzcyB0aGlz
IGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCi0KLUFDTE9DQUxfQU1G
TEFHUyA9IC1JIG00Ci0KLUFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCi0KLSMgQnVpbGQgLiBi
ZWZvcmUgc3JjIHNvIHRoYXQgb3VyIGFsbC1sb2NhbCBhbmQgY2xlYW4tbG9jYWwgaG9va3Mga2lj
a3MgaW4gYXQKLSMgdGhlIHJpZ2h0IHRpbWUuCi1TVUJESVJTID0gLiBzcmMKLQotIyBBbHdheXMg
aW5jbHVkZSBnbW9jayBpbiBkaXN0cmlidXRpb25zLgotRElTVF9TVUJESVJTID0gJChzdWJkaXJz
KSBzcmMgY29uZm9ybWFuY2UgYmVuY2htYXJrcwotCi0jIEJ1aWxkIGdtb2NrIGJlZm9yZSB3ZSBi
dWlsZCBwcm90b2J1ZiB0ZXN0cy4gIFdlIGRvbid0IGFkZCBnbW9jayB0byBTVUJESVJTCi0jIGJl
Y2F1c2UgdGhlbiAibWFrZSBjaGVjayIgd291bGQgYWxzbyBidWlsZCBhbmQgcnVuIGFsbCBvZiBn
bW9jaydzIG93biB0ZXN0cywKLSMgd2hpY2ggdGFrZXMgYSBsb3Qgb2YgdGltZSBhbmQgaXMgZ2Vu
ZXJhbGx5IG5vdCB1c2VmdWwgdG8gdXMuICBBbHNvLCB3ZSBkb24ndAotIyB3YW50ICJtYWtlIGlu
c3RhbGwiIHRvIHJlY3Vyc2UgaW50byBnbW9jayBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIG92ZXJ3
cml0ZQotIyB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgZ21vY2sgaWYgdGhlcmUgaXMgb25lLgot
Y2hlY2stbG9jYWw6Ci0JQGVjaG8gIk1ha2luZyBsaWIvbGliZ21vY2suYSBsaWIvbGliZ21vY2tf
bWFpbi5hIGluIGdtb2NrIgotCUBjZCBnbW9jayAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBs
aWIvbGliZ21vY2subGEgbGliL2xpYmdtb2NrX21haW4ubGEKLQlAY2QgZ21vY2svZ3Rlc3QgJiYg
JChNQUtFKSAkKEFNX01BS0VGTEFHUykgbGliL2xpYmd0ZXN0LmxhIGxpYi9saWJndGVzdF9tYWlu
LmxhCi0KLSMgV2Ugd291bGQgbGlrZSB0byBjbGVhbiBnbW9jayB3aGVuICJtYWtlIGNsZWFuIiBp
cyBpbnZva2VkLiAgQnV0IHdlIGhhdmUgdG8KLSMgYmUgY2FyZWZ1bCBiZWNhdXNlIGNsZWFuLWxv
Y2FsIGlzIGFsc28gaW52b2tlZCBkdXJpbmcgIm1ha2UgZGlzdGNsZWFuIiwgYnV0Ci0jICJtYWtl
IGRpc3RjbGVhbiIgYWxyZWFkeSByZWN1cnNlcyBpbnRvIGdtb2NrIGJlY2F1c2UgaXQncyBsaXN0
ZWQgYW1vbmcgdGhlCi0jIERJU1RfU1VCRElSUy4gIGRpc3RjbGVhbiB3aWxsIGRlbGV0ZSBnbW9j
ay9NYWtlZmlsZSwgc28gaWYgd2UgdGhlbiB0cnkgdG8KLSMgY2QgdG8gdGhlIGRpcmVjdG9yeSBh
Z2FpbiBhbmQgIm1ha2UgY2xlYW4iIGl0IHdpbGwgZmFpbC4gIFNvLCBjaGVjayB0aGF0IHRoZQot
IyBNYWtlZmlsZSBleGlzdHMgYmVmb3JlIHJlY3Vyc2luZy4KLWNsZWFuLWxvY2FsOgotCUBpZiB0
ZXN0IC1lIGdtb2NrL01ha2VmaWxlOyB0aGVuIFwKLQkgIGVjaG8gIk1ha2luZyBjbGVhbiBpbiBn
bW9jayI7IFwKLQkgIGNkIGdtb2NrICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNsZWFuOyBc
Ci0JZmk7IFwKLQlpZiB0ZXN0IC1lIGNvbmZvcm1hbmNlL01ha2VmaWxlOyB0aGVuIFwKLQkgIGVj
aG8gIk1ha2luZyBjbGVhbiBpbiBjb25mb3JtYW5jZSI7IFwKLQkgIGNkIGNvbmZvcm1hbmNlICYm
ICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNsZWFuOyBcCi0JZmk7IFwKLQlpZiB0ZXN0IC1lIGJl
bmNobWFya3MvTWFrZWZpbGU7IHRoZW4gXAotCSAgZWNobyAiTWFraW5nIGNsZWFuIGluIGJlbmNo
bWFya3MiOyBcCi0JICBjZCBiZW5jaG1hcmtzICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNs
ZWFuOyBcCi0JZmk7IFwKLQlpZiB0ZXN0IC1lIG9iamVjdGl2ZWMvRGV2VG9vbHM7IHRoZW4gXAot
CSAgZWNobyAiQ2xlYW5pbmcgYW55IE9iakMgcHljIGZpbGVzIjsgXAotCSAgcm0gLWYgb2JqZWN0
aXZlYy9EZXZUb29scy8qLnB5YzsgXAotCWZpCi0KLXBrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9w
a2djb25maWcKLXBrZ2NvbmZpZ19EQVRBID0gcHJvdG9idWYucGMgcHJvdG9idWYtbGl0ZS5wYwot
Ci1jc2hhcnBfRVhUUkFfRElTVD0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwLy5naXRpZ25vcmUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAv
Q0hBTkdFUy50eHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGNzaGFycC9SRUFETUUubWQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL2J1aWxkX3BhY2th
Z2VzLmJhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBjc2hhcnAvYnVpbGRhbGwuc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9nZW5lcmF0ZV9wcm90b3Muc2ggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJw
L2tleXMvR29vZ2xlLlByb3RvYnVmLnB1YmxpYy5zbmsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBjc2hhcnAva2V5cy9SRUFETUUubWQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9wcm90b3MvdW5p
dHRlc3RfaXNzdWVzLnByb3RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgY3NoYXJwL3NyYy9BZGRyZXNzQm9vay9BZGRQZXJzb24uY3MgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0FkZHJlc3NCb29rL0FkZHJl
c3NCb29rLmNzcHJvaiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFy
cC9zcmMvQWRkcmVzc0Jvb2svQWRkcmVzc2Jvb2suY3MgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9BZGRyZXNzQm9vay9MaXN0UGVvcGxlLmNzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0FkZHJl
c3NCb29rL1Byb2dyYW0uY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGNzaGFycC9zcmMvQWRkcmVzc0Jvb2svUHJvcGVydGllcy9Bc3NlbWJseUluZm8uY3Mg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9BZGRyZXNzQm9vay9TYW1w
bGVVc2FnZS5jcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hh
cnAvc3JjL0FkZHJlc3NCb29rL2FwcC5jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNl
L0FwcC5jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYuQ29uZm9ybWFuY2UvQ29uZm9ybWFuY2UuY3MgICAgICAgICAgICAgICAgICAg
ICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5Db25mb3JtYW5jZS9Hb29nbGUuUHJv
dG9idWYuQ29uZm9ybWFuY2UuY3Nwcm9qICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVm
LkNvbmZvcm1hbmNlL1Byb2dyYW0uY3MgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3No
YXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuQ29uZm9ybWFuY2UvUHJvcGVydGllcy9Bc3NlbWJseUlu
Zm8uY3MgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5Kc29uRHVtcC9H
b29nbGUuUHJvdG9idWYuSnNvbkR1bXAuY3Nwcm9qICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmLkpzb25EdW1wL1Byb2dyYW0uY3MgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuSnNvbkR1bXAvUHJvcGVydGllcy9B
c3NlbWJseUluZm8uY3MgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1
Zi5Kc29uRHVtcC9hcHAuY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNz
aGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvQnl0ZVN0cmluZ1Rlc3QuY3MgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Db2Rl
ZElucHV0U3RyZWFtRXh0ZW5zaW9ucy5jcyAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dv
b2dsZS5Qcm90b2J1Zi5UZXN0L0NvZGVkSW5wdXRTdHJlYW1UZXN0LmNzICAgICAgICAgICAgICAg
ICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvQ29kZWRPdXRwdXRTdHJl
YW1UZXN0LmNzICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9i
dWYuVGVzdC9Db2xsZWN0aW9ucy9NYXBGaWVsZFRlc3QuY3MgICAgICAgICAgICAgICAgXAotICBj
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0NvbGxlY3Rpb25zL1JlcGVhdGVkRmllbGRU
ZXN0LmNzICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvQ29t
cGF0aWJpbGl0eS9Qcm9wZXJ0eUluZm9FeHRlbnNpb25zVGVzdC5jcyBcCi0gIGNzaGFycC9zcmMv
R29vZ2xlLlByb3RvYnVmLlRlc3QvQ29tcGF0aWJpbGl0eS9UeXBlRXh0ZW5zaW9uc1Rlc3QuY3Mg
ICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9EZXByZWNhdGVkTWVt
YmVyVGVzdC5jcyAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90
b2J1Zi5UZXN0L0VxdWFsaXR5VGVzdGVyLmNzICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvRmllbGRDb2RlY1Rlc3QuY3MgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9H
ZW5lcmF0ZWRNZXNzYWdlVGVzdC5jcyAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3Jj
L0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0dvb2dsZS5Qcm90b2J1Zi5UZXN0LmNzcHJvaiAgICAgICAg
ICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvSXNzdWVzVGVzdC5j
cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJv
dG9idWYuVGVzdC9Kc29uRm9ybWF0dGVyVGVzdC5jcyAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0pzb25QYXJzZXJUZXN0LmNzICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3Qv
SnNvblRva2VuaXplclRlc3QuY3MgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3Ny
Yy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Qcm9wZXJ0aWVzL0FwcE1hbmlmZXN0LnhtbCAgICAgICAg
ICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Byb3BlcnRpZXMv
QXNzZW1ibHlJbmZvLmNzICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlBy
b3RvYnVmLlRlc3QvUmVmbGVjdGlvbi9EZXNjcmlwdG9yc1Rlc3QuY3MgICAgICAgICAgICAgIFwK
LSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9SZWZsZWN0aW9uL0ZpZWxkQWNjZXNz
VGVzdC5jcyAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0
L1JlZmxlY3Rpb24vVHlwZVJlZ2lzdHJ5VGVzdC5jcyAgICAgICAgICAgICBcCi0gIGNzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvU2FtcGxlRW51bS5jcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9TYW1wbGVNZXNz
YWdlcy5jcyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Q
cm90b2J1Zi5UZXN0L1Rlc3RDb3JuZXJDYXNlcy5jcyAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvVGVzdFByb3Rvcy9NYXBVbml0dGVz
dFByb3RvMy5jcyAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVz
dC9UZXN0UHJvdG9zL1VuaXR0ZXN0SW1wb3J0UHJvdG8zLmNzICAgICAgICAgXAotICBjc2hhcnAv
c3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Rlc3RQcm90b3MvVW5pdHRlc3RJbXBvcnRQdWJsaWNQ
cm90bzMuY3MgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvVGVzdFByb3Rv
cy9Vbml0dGVzdElzc3Vlcy5jcyAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYuVGVzdC9UZXN0UHJvdG9zL1VuaXR0ZXN0UHJvdG8zLmNzICAgICAgICAgICAgICAg
XAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Rlc3RQcm90b3MvVW5pdHRlc3RX
ZWxsS25vd25UeXBlcy5jcyAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRl
c3QvV2VsbEtub3duVHlwZXMvQW55VGVzdC5jcyAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJw
L3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9XZWxsS25vd25UeXBlcy9EdXJhdGlvblRlc3QuY3Mg
ICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1dlbGxLbm93
blR5cGVzL1RpbWVzdGFtcFRlc3QuY3MgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xl
LlByb3RvYnVmLlRlc3QvV2VsbEtub3duVHlwZXMvV3JhcHBlcnNUZXN0LmNzICAgICAgICAgICAg
IFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9wYWNrYWdlcy5jb25maWcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5z
bG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFy
cC9zcmMvR29vZ2xlLlByb3RvYnVmL0J5dGVBcnJheS5jcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvQnl0ZVN0cmluZy5j
cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi9Db2RlZElucHV0U3RyZWFtLmNzICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0NvZGVkT3V0cHV0U3RyZWFtLkNvbXB1
dGVTaXplLmNzICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYv
Q29kZWRPdXRwdXRTdHJlYW0uY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hh
cnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Db2xsZWN0aW9ucy9NYXBGaWVsZC5jcyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0NvbGxlY3Rpb25z
L1JlYWRPbmx5RGljdGlvbmFyeS5jcyAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYvQ29sbGVjdGlvbnMvUmVwZWF0ZWRGaWVsZC5jcyAgICAgICAgICAgICAgICAg
ICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Db21wYXRpYmlsaXR5L1Byb3BlcnR5
SW5mb0V4dGVuc2lvbnMuY3MgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVm
L0NvbXBhdGliaWxpdHkvVHlwZUV4dGVuc2lvbnMuY3MgICAgICAgICAgICAgICAgIFwKLSAgY3No
YXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvRmllbGRDb2RlYy5jcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9GcmFtZXdvcmtQ
b3J0YWJpbGl0eS5jcyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmL0dvb2dsZS5Qcm90b2J1Zi5jc3Byb2ogICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvR29vZ2xlLlByb3RvYnVmLm51c3Bl
YyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1
Zi9JRGVlcENsb25lYWJsZS5jcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNz
aGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0lNZXNzYWdlLmNzICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvSW52YWxpZEpz
b25FeGNlcHRpb24uY3MgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dv
b2dsZS5Qcm90b2J1Zi9JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24uY3MgICAgICAgICAg
ICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0pzb25Gb3JtYXR0ZXIuY3MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9i
dWYvSnNvblBhcnNlci5jcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBj
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Kc29uVG9rZW4uY3MgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0pzb25Ub2tl
bml6ZXIuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9H
b29nbGUuUHJvdG9idWYvTGltaXRlZElucHV0U3RyZWFtLmNzICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9NZXNzYWdlRXh0ZW5zaW9ucy5j
cyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmL01lc3NhZ2VQYXJzZXIuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUHJvdG9QcmVjb25kaXRpb25zLmNzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Qcm9wZXJ0
aWVzL0Fzc2VtYmx5SW5mby5jcyAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMv
R29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vRGVzY3JpcHRvci5jcyAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9EZXNjcmlw
dG9yQmFzZS5jcyAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90
b2J1Zi9SZWZsZWN0aW9uL0Rlc2NyaXB0b3JQb29sLmNzICAgICAgICAgICAgICAgICAgICBcCi0g
IGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vRGVzY3JpcHRvclV0aWwuY3Mg
ICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVj
dGlvbi9EZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbi5jcyAgICAgXAotICBjc2hhcnAvc3Jj
L0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0VudW1EZXNjcmlwdG9yLmNzICAgICAgICAgICAg
ICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vRW51bVZh
bHVlRGVzY3JpcHRvci5jcyAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJv
dG9idWYvUmVmbGVjdGlvbi9GaWVsZEFjY2Vzc29yQmFzZS5jcyAgICAgICAgICAgICAgICAgXAot
ICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0ZpZWxkRGVzY3JpcHRvci5j
cyAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxl
Y3Rpb24vRmllbGRUeXBlLmNzICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3Ny
Yy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9GaWxlRGVzY3JpcHRvci5jcyAgICAgICAgICAg
ICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0dlbmVy
YXRlZENsclR5cGVJbmZvLmNzICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlBy
b3RvYnVmL1JlZmxlY3Rpb24vSURlc2NyaXB0b3IuY3MgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9JRmllbGRBY2Nlc3Nvci5j
cyAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZs
ZWN0aW9uL01hcEZpZWxkQWNjZXNzb3IuY3MgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vTWVzc2FnZURlc2NyaXB0b3IuY3MgICAgICAg
ICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9NZXRo
b2REZXNjcmlwdG9yLmNzICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Q
cm90b2J1Zi9SZWZsZWN0aW9uL09uZW9mQWNjZXNzb3IuY3MgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vT25lb2ZEZXNjcmlwdG9y
LmNzICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVm
bGVjdGlvbi9PcmlnaW5hbE5hbWVBdHRyaWJ1dGUuY3MgICAgICAgICAgICAgXAotICBjc2hhcnAv
c3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL1BhY2thZ2VEZXNjcmlwdG9yLmNzICAgICAg
ICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vUGFy
dGlhbENsYXNzZXMuY3MgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYvUmVmbGVjdGlvbi9SZWZsZWN0aW9uVXRpbC5jcyAgICAgICAgICAgICAgICAgICAg
XAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL1JlcGVhdGVkRmllbGRB
Y2Nlc3Nvci5jcyAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1Jl
ZmxlY3Rpb24vU2VydmljZURlc2NyaXB0b3IuY3MgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJw
L3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9TaW5nbGVGaWVsZEFjY2Vzc29yLmNzICAg
ICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL1R5
cGVSZWdpc3RyeS5jcyAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xl
LlByb3RvYnVmL1dlbGxLbm93blR5cGVzL0FueS5jcyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvQW55UGFydGlh
bC5jcyAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9X
ZWxsS25vd25UeXBlcy9BcGkuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFy
cC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL0R1cmF0aW9uLmNzICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlw
ZXMvRHVyYXRpb25QYXJ0aWFsLmNzICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBlcy9FbXB0eS5jcyAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL0ZpZWxkTWFz
ay5jcyAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYv
V2VsbEtub3duVHlwZXMvU291cmNlQ29udGV4dC5jcyAgICAgICAgICAgICAgICAgXAotICBjc2hh
cnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBlcy9TdHJ1Y3QuY3MgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5
cGVzL1RpbWVFeHRlbnNpb25zLmNzICAgICAgICAgICAgICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvVGltZXN0YW1wLmNzICAgICAgICAgICAgICAgICAg
ICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBlcy9UaW1lc3Rh
bXBQYXJ0aWFsLmNzICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVm
L1dlbGxLbm93blR5cGVzL1R5cGUuY3MgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3No
YXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvVmFsdWVQYXJ0aWFsLmNzICAg
ICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25U
eXBlcy9XcmFwcGVycy5jcyAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL1dyYXBwZXJzUGFydGlhbC5jcyAgICAgICAgICAg
ICAgIFwKLSAgY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2lyZUZvcm1hdC5jcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1
Zi9wYWNrYWdlcy5jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNz
aGFycC9zcmMvcGFja2FnZXMvcmVwb3NpdG9yaWVzLmNvbmZpZwotCi1qYXZhX0VYVFJBX0RJU1Q9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgamF2YS9SRUFETUUubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvZ2Vu
ZXJhdGUtc291cmNlcy1idWlsZC54bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGphdmEvY29yZS9nZW5lcmF0ZS10ZXN0LXNvdXJjZXMtYnVpbGQueG1s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3Bv
bS54bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL0Fic3RyYWN0TWVzc2FnZS5qYXZhICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9z
cmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQWJzdHJhY3RNZXNzYWdlTGl0ZS5qYXZh
ICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9BYnN0cmFjdFBhcnNlci5qYXZhICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUv
c3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Fic3RyYWN0UHJvdG9idWZMaXN0Lmph
dmEgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvQmxvY2tpbmdScGNDaGFubmVsLmphdmEgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3Jl
L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9CbG9ja2luZ1NlcnZpY2UuamF2YSAg
ICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL0Jvb2xlYW5BcnJheUxpc3QuamF2YSAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29y
ZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQnl0ZUJ1ZmZlcldyaXRlci5qYXZh
ICAgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9CeXRlT3V0cHV0LmphdmEgICAgICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2Nv
cmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0J5dGVTdHJpbmcuamF2YSAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvQ29kZWRJbnB1dFN0cmVhbS5qYXZhICAgICAgICAgICAgICAgIFwKLSAgamF2YS9j
b3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Db2RlZE91dHB1dFN0cmVhbS5q
YXZhICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL0Rlc2NyaXB0b3JzLmphdmEgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmEv
Y29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRG91YmxlQXJyYXlMaXN0Lmph
dmEgICAgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9EeW5hbWljTWVzc2FnZS5qYXZhICAgICAgICAgICAgICAgICAgXAotICBqYXZh
L2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0V4dGVuc2lvbi5qYXZhICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvRXh0ZW5zaW9uTGl0ZS5qYXZhICAgICAgICAgICAgICAgICAgIFwKLSAgamF2
YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9FeHRlbnNpb25SZWdpc3Ry
eS5qYXZhICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL0V4dGVuc2lvblJlZ2lzdHJ5TGl0ZS5qYXZhICAgICAgICAgICBcCi0gIGph
dmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRmllbGRTZXQuamF2YSAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dv
b2dsZS9wcm90b2J1Zi9GbG9hdEFycmF5TGlzdC5qYXZhICAgICAgICAgICAgICAgICAgXAotICBq
YXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0dlbmVyYXRlZE1lc3Nh
Z2UuamF2YSAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvR2VuZXJhdGVkTWVzc2FnZUxpdGUuamF2YSAgICAgICAgICAgIFwKLSAg
amF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9JbnRBcnJheUxpc3Qu
amF2YSAgICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL0ludGVybmFsLmphdmEgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uLmphdmEgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9MYXp5RmllbGQuamF2YSAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xhenlGaWVsZExp
dGUuamF2YSAgICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvTGF6eVN0cmluZ0FycmF5TGlzdC5qYXZhICAgICAgICAgICAgIFwK
LSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5U3RyaW5n
TGlzdC5qYXZhICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9j
b20vZ29vZ2xlL3Byb3RvYnVmL0xvbmdBcnJheUxpc3QuamF2YSAgICAgICAgICAgICAgICAgICBc
Ci0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWFwRW50cnku
amF2YSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEv
Y29tL2dvb2dsZS9wcm90b2J1Zi9NYXBFbnRyeUxpdGUuamF2YSAgICAgICAgICAgICAgICAgICAg
XAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01hcEZpZWxk
LmphdmEgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZh
L2NvbS9nb29nbGUvcHJvdG9idWYvTWFwRmllbGRMaXRlLmphdmEgICAgICAgICAgICAgICAgICAg
IFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NZXNzYWdl
LmphdmEgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01lc3NhZ2VMaXRlLmphdmEgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWVzc2Fn
ZUxpdGVPckJ1aWxkZXIuamF2YSAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NZXNzYWdlTGl0ZVRvU3RyaW5nLmphdmEgICAgICAgICAg
ICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01lc3Nh
Z2VPckJ1aWxkZXIuamF2YSAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWVzc2FnZVJlZmxlY3Rpb24uamF2YSAgICAgICAgICAg
ICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NdXRh
YmlsaXR5T3JhY2xlLmphdmEgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4v
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL05pb0J5dGVTdHJpbmcuamF2YSAgICAgICAgICAgICAg
ICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvUGFy
c2VyLmphdmEgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWlu
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Qcm90b2J1ZkFycmF5TGlzdC5qYXZhICAgICAgICAg
ICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1By
b3RvY29sTWVzc2FnZUVudW0uamF2YSAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFp
bi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvUHJvdG9jb2xTdHJpbmdMaXN0LmphdmEgICAgICAg
ICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9S
ZXBlYXRlZEZpZWxkQnVpbGRlci5qYXZhICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21h
aW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1JvcGVCeXRlU3RyaW5nLmphdmEgICAgICAgICAg
ICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYv
UnBjQ2FsbGJhY2suamF2YSAgICAgICAgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9t
YWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9ScGNDaGFubmVsLmphdmEgICAgICAgICAgICAg
ICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L1JwY0NvbnRyb2xsZXIuamF2YSAgICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMv
bWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvUnBjVXRpbC5qYXZhICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9TZXJ2aWNlLmphdmEgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3Jj
L21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1NlcnZpY2VFeGNlcHRpb24uamF2YSAgICAg
ICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvU2luZ2xlRmllbGRCdWlsZGVyLmphdmEgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3Ny
Yy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9TbWFsbFNvcnRlZE1hcC5qYXZhICAgICAg
ICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL1RleHRGb3JtYXQuamF2YSAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9z
cmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVGV4dEZvcm1hdEVzY2FwZXIuamF2YSAg
ICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9UZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZS5qYXZhICAgICAgICAgXAotICBqYXZhL2NvcmUv
c3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1RleHRGb3JtYXRQYXJzZUxvY2F0aW9u
LmphdmEgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvVW5pbml0aWFsaXplZE1lc3NhZ2VFeGNlcHRpb24uamF2YSAgIFwKLSAgamF2YS9jb3Jl
L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Vbmtub3duRmllbGRTZXQuamF2YSAg
ICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL1Vua25vd25GaWVsZFNldExpdGUuamF2YSAgICAgICAgICAgICBcCi0gIGphdmEvY29y
ZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVW5tb2RpZmlhYmxlTGF6eVN0cmlu
Z0xpc3QuamF2YSAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9VbnNhZmVCeXRlT3BlcmF0aW9ucy5qYXZhICAgICAgICAgICAgXAotICBqYXZhL2Nv
cmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1V0ZjguamF2YSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvV2lyZUZvcm1hdC5qYXZhICAgICAgICAgICAgICAgICAgICAgIFwKLSAgamF2YS9j
b3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9BYnN0cmFjdE1lc3NhZ2VUZXN0
LmphdmEgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL0FueVRlc3QuamF2YSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmEv
Y29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQm9vbGVhbkFycmF5TGlzdFRl
c3QuamF2YSAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9Cb3VuZGVkQnl0ZVN0cmluZ1Rlc3QuamF2YSAgICAgICAgICAgXAotICBqYXZh
L2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0J5dGVCdWZmZXJXcml0ZXJU
ZXN0LmphdmEgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvQnl0ZVN0cmluZ1Rlc3QuamF2YSAgICAgICAgICAgICAgICAgIFwKLSAgamF2
YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9DaGVja1V0ZjhUZXN0Lmph
dmEgICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL0NvZGVkSW5wdXRTdHJlYW1UZXN0LmphdmEgICAgICAgICAgICBcCi0gIGph
dmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQ29kZWRPdXRwdXRTdHJl
YW1UZXN0LmphdmEgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dv
b2dsZS9wcm90b2J1Zi9EZXByZWNhdGVkRmllbGRUZXN0LmphdmEgICAgICAgICAgICAgXAotICBq
YXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Rlc2NyaXB0b3JzVGVz
dC5qYXZhICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvRG91YmxlQXJyYXlMaXN0VGVzdC5qYXZhICAgICAgICAgICAgIFwKLSAg
amF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9EeW5hbWljTWVzc2Fn
ZVRlc3QuamF2YSAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL0VudW1UZXN0LmphdmEgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRmllbGRQcmVzZW5j
ZVRlc3QuamF2YSAgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9GbG9hdEFycmF5TGlzdFRlc3QuamF2YSAgICAgICAgICAgICAgXAot
ICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0ZvcmNlRmllbGRC
dWlsZGVyc1ByZVJ1bi5qYXZhICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvR2VuZXJhdGVkTWVzc2FnZVRlc3QuamF2YSAgICAgICAgICAgIFwK
LSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9JbnRBcnJheUxp
c3RUZXN0LmphdmEgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9j
b20vZ29vZ2xlL3Byb3RvYnVmL0lzVmFsaWRVdGY4VGVzdC5qYXZhICAgICAgICAgICAgICAgICBc
Ci0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvSXNWYWxpZFV0
ZjhUZXN0VXRpbC5qYXZhICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEv
Y29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5RmllbGRMaXRlVGVzdC5qYXZhICAgICAgICAgICAgICAg
XAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xhenlGaWVs
ZFRlc3QuamF2YSAgICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZh
L2NvbS9nb29nbGUvcHJvdG9idWYvTGF6eU1lc3NhZ2VMaXRlVGVzdC5qYXZhICAgICAgICAgICAg
IFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5U3Ry
aW5nQXJyYXlMaXN0VGVzdC5qYXZhICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xhenlTdHJpbmdFbmRUb0VuZFRlc3QuamF2YSAgICAgICAg
ICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTGl0ZUVx
dWFsc0FuZEhhc2hUZXN0LmphdmEgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MaXRlVGVzdC5qYXZhICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xpdGVy
YWxCeXRlU3RyaW5nVGVzdC5qYXZhICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTG9uZ0FycmF5TGlzdFRlc3QuamF2YSAgICAgICAgICAg
ICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NYXBG
b3JQcm90bzJMaXRlVGVzdC5qYXZhICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3Qv
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01hcEZvclByb3RvMlRlc3QuamF2YSAgICAgICAgICAg
ICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWFw
VGVzdC5qYXZhICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NZXNzYWdlVGVzdC5qYXZhICAgICAgICAgICAgICAg
ICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL05l
c3RlZEJ1aWxkZXJzVGVzdC5qYXZhICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVz
dC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTmlvQnl0ZVN0cmluZ1Rlc3QuamF2YSAgICAgICAg
ICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Q
YXJzZXJUZXN0LmphdmEgICAgICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rl
c3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1Byb3RvYnVmQXJyYXlMaXN0VGVzdC5qYXZhICAg
ICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYv
UmVwZWF0ZWRGaWVsZEJ1aWxkZXJUZXN0LmphdmEgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90
ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Sb3BlQnl0ZVN0cmluZ1N1YnN0cmluZ1Rlc3Qu
amF2YSAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L1JvcGVCeXRlU3RyaW5nVGVzdC5qYXZhICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMv
dGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvU2VydmljZVRlc3QuamF2YSAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9TaW5nbGVGaWVsZEJ1aWxkZXJUZXN0LmphdmEgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3Jj
L3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1NtYWxsU29ydGVkTWFwVGVzdC5qYXZhICAg
ICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvVGVzdEJhZElkZW50aWZpZXJzLmphdmEgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3Ny
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9UZXN0VXRpbC5qYXZhICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL1RleHRGb3JtYXRQYXJzZUluZm9UcmVlVGVzdC5qYXZhICAgICBcCi0gIGphdmEvY29yZS9z
cmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVGV4dEZvcm1hdFBhcnNlTG9jYXRpb25U
ZXN0LmphdmEgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9UZXh0Rm9ybWF0VGVzdC5qYXZhICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUv
c3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1Vua25vd25FbnVtVmFsdWVUZXN0Lmph
dmEgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvVW5rbm93bkZpZWxkU2V0TGl0ZVRlc3QuamF2YSAgICAgICAgIFwKLSAgamF2YS9jb3Jl
L3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Vbmtub3duRmllbGRTZXRUZXN0Lmph
dmEgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL1VubW9kaWZpYWJsZUxhenlTdHJpbmdMaXN0VGVzdC5qYXZhICBcCi0gIGphdmEvY29y
ZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvV2VsbEtub3duVHlwZXNUZXN0Lmph
dmEgICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9XaXJlRm9ybWF0VGVzdC5qYXZhICAgICAgICAgICAgICAgICAgXAotICBqYXZhL2Nv
cmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9hbnlfdGVzdC5wcm90byAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xl
L3Byb3RvYnVmL2ZpZWxkX3ByZXNlbmNlX3Rlc3QucHJvdG8gICAgICAgICAgIFwKLSAgamF2YS9j
b3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbGF6eV9maWVsZHNfbGl0ZS5w
cm90byAgICAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2ds
ZS9wcm90b2J1Zi9saXRlX2VxdWFsc19hbmRfaGFzaC5wcm90byAgICAgICAgICBcCi0gIGphdmEv
Y29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL21hcF9mb3JfcHJvdG8yX2xp
dGVfdGVzdC5wcm90byAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29n
bGUvcHJvdG9idWYvbWFwX2Zvcl9wcm90bzJfdGVzdC5wcm90byAgICAgICAgICAgXAotICBqYXZh
L2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9tYXBfaW5pdGlhbGl6YXRp
b25fb3JkZXJfdGVzdC5wcm90byBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29v
Z2xlL3Byb3RvYnVmL21hcF90ZXN0LnByb3RvICAgICAgICAgICAgICAgICAgICAgIFwKLSAgamF2
YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbXVsdGlwbGVfZmlsZXNf
dGVzdC5wcm90byAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dv
b2dsZS9wcm90b2J1Zi9uZXN0ZWRfYnVpbGRlcnNfdGVzdC5wcm90byAgICAgICAgICBcCi0gIGph
dmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL25lc3RlZF9leHRlbnNp
b24ucHJvdG8gICAgICAgICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9n
b29nbGUvcHJvdG9idWYvbmVzdGVkX2V4dGVuc2lvbl9saXRlLnByb3RvICAgICAgICAgXAotICBq
YXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9ub25fbmVzdGVkX2V4
dGVuc2lvbi5wcm90byAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20v
Z29vZ2xlL3Byb3RvYnVmL25vbl9uZXN0ZWRfZXh0ZW5zaW9uX2xpdGUucHJvdG8gICAgIFwKLSAg
amF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvb3V0ZXJfY2xhc3Nf
bmFtZV90ZXN0LnByb3RvICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29t
L2dvb2dsZS9wcm90b2J1Zi9vdXRlcl9jbGFzc19uYW1lX3Rlc3QyLnByb3RvICAgICAgICBcCi0g
IGphdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL291dGVyX2NsYXNz
X25hbWVfdGVzdDMucHJvdG8gICAgICAgIFwKLSAgamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2Nv
bS9nb29nbGUvcHJvdG9idWYvdGVzdF9iYWRfaWRlbnRpZmllcnMucHJvdG8gICAgICAgICAgXAot
ICBqYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi90ZXN0X2NoZWNr
X3V0ZjgucHJvdG8gICAgICAgICAgICAgICBcCi0gIGphdmEvY29yZS9zcmMvdGVzdC9wcm90by9j
b20vZ29vZ2xlL3Byb3RvYnVmL3Rlc3RfY2hlY2tfdXRmOF9zaXplLnByb3RvICAgICAgICAgIFwK
LSAgamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvdGVzdF9jdXN0
b21fb3B0aW9ucy5wcm90byAgICAgICAgICAgXAotICBqYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8v
Y29tL2dvb2dsZS9wcm90b2J1Zi90ZXN0X2V4dHJhX2ludGVyZmFjZXMucHJvdG8gICAgICAgICBc
Ci0gIGphdmEvbGl0ZS9wb20ueG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgamF2YS9wb20ueG1sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBqYXZhL3V0aWwvcG9tLnhtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmEvdXRpbC9zcmMvbWFpbi9qYXZh
L2NvbS9nb29nbGUvcHJvdG9idWYvdXRpbC9GaWVsZE1hc2tUcmVlLmphdmEgICAgICAgICAgICAg
IFwKLSAgamF2YS91dGlsL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsL0Zp
ZWxkTWFza1V0aWwuamF2YSAgICAgICAgICAgICAgXAotICBqYXZhL3V0aWwvc3JjL21haW4vamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL3V0aWwvSnNvbkZvcm1hdC5qYXZhICAgICAgICAgICAgICAg
ICBcCi0gIGphdmEvdXRpbC9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvdXRpbC9U
aW1lVXRpbC5qYXZhICAgICAgICAgICAgICAgICAgIFwKLSAgamF2YS91dGlsL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsL0ZpZWxkTWFza1RyZWVUZXN0LmphdmEgICAgICAg
ICAgXAotICBqYXZhL3V0aWwvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
RmllbGRNYXNrVXRpbFRlc3QuamF2YSAgICAgICAgICBcCi0gIGphdmEvdXRpbC9zcmMvdGVzdC9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvdXRpbC9Kc29uRm9ybWF0VGVzdC5qYXZhICAgICAgICAg
ICAgIFwKLSAgamF2YS91dGlsL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGls
L1RpbWVVdGlsVGVzdC5qYXZhICAgICAgICAgICAgICAgXAotICBqYXZhL3V0aWwvc3JjL3Rlc3Qv
cHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsL2pzb25fdGVzdC5wcm90bwotCi1qYXZhbmFu
b19FWFRSQV9ESVNUPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy9tYWluL2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9uYW5vL0NvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8uamF2YSAgICAg
ICAgICBcCi0gIGphdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5v
L0ZpZWxkRGF0YS5qYXZhICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3Ny
Yy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL0ZpZWxkQXJyYXkuamF2YSAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9uYW5vL1dpcmVGb3JtYXROYW5vLmphdmEgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGphdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL0V4dGVu
c2lvbi5qYXZhICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy9tYWlu
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL0NvZGVkSW5wdXRCeXRlQnVmZmVyTmFuby5q
YXZhICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9uYW5vL1Vua25vd25GaWVsZERhdGEuamF2YSAgICAgICAgICAgICAgICAgICBcCi0gIGph
dmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL01lc3NhZ2VOYW5v
LmphdmEgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy9tYWluL2phdmEv
Y29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL0ludGVybmFsTmFuby5qYXZhICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9u
YW5vL0ludmFsaWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24uamF2YSBcCi0gIGphdmFuYW5v
L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL01hcEZhY3Rvcmllcy5qYXZh
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dv
b2dsZS9wcm90b2J1Zi9uYW5vL0V4dGVuZGFibGVNZXNzYWdlTmFuby5qYXZhICAgICAgICAgICAg
ICBcCi0gIGphdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL01l
c3NhZ2VOYW5vUHJpbnRlci5qYXZhICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy90
ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2FjY2Vzc29yc19uYW5v
LnByb3RvICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2VudW1fY2xhc3NfbmFuby5wcm90byAgICAgICAgICBcCi0g
IGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0
X3JlZmVyZW5jZV90eXBlc19uYW5vLnByb3RvICAgICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lvbl9yZXBlYXRlZF9u
YW5vLnByb3RvICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9uYW5vL3VuaXR0ZXN0X2hhc19uYW5vLnByb3RvICAgICAgICAgICAgICAgICBcCi0gIGphdmFu
YW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X25hbm8u
cHJvdG8gICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X211bHRpcGxlX25hbWVjbGFzaF9uYW5vLnBy
b3RvICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5v
L3VuaXR0ZXN0X3NpbmdsZV9uYW5vLnByb3RvICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3Ny
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL05hbm9UZXN0LmphdmEgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X3NpbXBsZV9uYW5vLnByb3RvICAgICAgICAgICAgICBc
Ci0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0
ZXN0X2ltcG9ydF9uYW5vLnByb3RvICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X3JlcGVhdGVkX21lcmdlX25h
bm8ucHJvdG8gICAgICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lvbl9uYW5vLnByb3RvICAgICAgICAgICBcCi0gIGph
dmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X3Jl
cGVhdGVkX3BhY2thYmxlc19uYW5vLnByb3RvICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEv
Y29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lvbl9zaW5ndWxhcl9uYW5v
LnByb3RvICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9u
YW5vL3VuaXR0ZXN0X3JlY3Vyc2l2ZV9uYW5vLnByb3RvICAgICAgICAgICBcCi0gIGphdmFuYW5v
L3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lv
bl9wYWNrZWRfbmFuby5wcm90byAgICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dv
b2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2VudW1fdmFsaWRpdHlfbmFuby5wcm90byAgICAg
ICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3Vu
aXR0ZXN0X3N0cmluZ3V0ZjhfbmFuby5wcm90byAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy90
ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X211bHRpcGxlX25hbm8u
cHJvdG8gICAgICAgICAgICBcCi0gIGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2VudW1fY2xhc3NfbXVsdGlwbGVfbmFuby5wcm90byBcCi0g
IGphdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL21hcF90ZXN0
LnByb3RvICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGphdmFuYW5vL1JFQURNRS5tZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGphdmFuYW5vL3BvbS54bWwKLQotb2JqZWN0aXZlY19FWFRSQV9ESVNU
PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIG9iamVjdGl2ZWMvRGV2VG9vbHMvY2hlY2tfdmVyc2lvbl9zdGFtcHMuc2ggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9EZXZUb29scy9jb21waWxlX3Rl
c3RpbmdfcHJvdG9zLnNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3Rp
dmVjL0RldlRvb2xzL2Z1bGxfbWFjX2J1aWxkLnNoICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvRGV2VG9vbHMvcGRkbS5weSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9EZXZUb29s
cy9wZGRtX3Rlc3RzLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBvYmplY3RpdmVjL2dlbmVyYXRlX3dlbGxfa25vd25fdHlwZXMuc2ggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL0Fu
eS5wYm9iamMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0
aXZlYy9nb29nbGUvcHJvdG9idWYvQW55LnBib2JqYy5tICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9BcGkucGJvYmpjLmgg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvZ29vZ2xl
L3Byb3RvYnVmL0FwaS5wYm9iamMubSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvRHVyYXRpb24ucGJvYmpjLmggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9E
dXJhdGlvbi5wYm9iamMubSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVj
dGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL0VtcHR5LnBib2JqYy5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvRW1wdHkucGJvYmpj
Lm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL2dvb2ds
ZS9wcm90b2J1Zi9GaWVsZE1hc2sucGJvYmpjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIG9iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL0ZpZWxkTWFzay5wYm9iamMubSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYv
U291cmNlQ29udGV4dC5wYm9iamMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmpl
Y3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9Tb3VyY2VDb250ZXh0LnBib2JqYy5tICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1N0cnVjdC5wYm9i
amMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9nb29n
bGUvcHJvdG9idWYvU3RydWN0LnBib2JqYy5tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBvYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9UaW1lc3RhbXAucGJvYmpjLmggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVm
L1RpbWVzdGFtcC5wYm9iamMubSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2Jq
ZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvVHlwZS5wYm9iamMuaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9UeXBlLnBib2Jq
Yy5tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvZ29v
Z2xlL3Byb3RvYnVmL1dyYXBwZXJzLnBib2JqYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvV3JhcHBlcnMucGJvYmpjLm0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL0dQQkFycmF5LmggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9i
amVjdGl2ZWMvR1BCQXJyYXkubSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9HUEJBcnJheV9QYWNrYWdlUHJpdmF0ZS5o
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL0dQ
QkJvb3RzdHJhcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIG9iamVjdGl2ZWMvR1BCQ29kZWRJbnB1dFN0cmVhbS5oICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9HUEJDb2RlZElucHV0
U3RyZWFtLm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBv
YmplY3RpdmVjL0dQQkNvZGVkSW5wdXRTdHJlYW1fUGFja2FnZVByaXZhdGUuaCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvR1BCQ29kZWRPdXRwdXRTdHJlYW0uaCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9H
UEJDb2RlZE91dHB1dFN0cmVhbS5tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBvYmplY3RpdmVjL0dQQkNvZGVkT3V0cHV0U3RyZWFtX1BhY2thZ2VQcml2YXRl
LmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvR1BCRGVzY3JpcHRv
ci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
b2JqZWN0aXZlYy9HUEJEZXNjcmlwdG9yLm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL0dQQkRlc2NyaXB0b3JfUGFja2FnZVBy
aXZhdGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMv
R1BCRGljdGlvbmFyeS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgb2JqZWN0aXZlYy9HUEJEaWN0aW9uYXJ5Lm0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL0dQQkRpY3Rpb25h
cnlfUGFja2FnZVByaXZhdGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IG9iamVjdGl2ZWMvR1BCRXh0ZW5zaW9uSW50ZXJuYWxzLmggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9HUEJFeHRlbnNpb25JbnRlcm5hbHMu
bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVj
L0dQQkV4dGVuc2lvblJlZ2lzdHJ5LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIG9iamVjdGl2ZWMvR1BCRXh0ZW5zaW9uUmVnaXN0cnkubSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9HUEJNZXNzYWdl
LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBvYmplY3RpdmVjL0dQQk1lc3NhZ2UubSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvR1BCTWVzc2FnZV9QYWNrYWdlUHJp
dmF0ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZl
Yy9HUEJQcm90b2NvbEJ1ZmZlcnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBvYmplY3RpdmVjL0dQQlByb3RvY29sQnVmZmVycy5tICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvR1BCUHJvdG9j
b2xCdWZmZXJzX1J1bnRpbWVTdXBwb3J0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgb2JqZWN0aXZlYy9HUEJSb290T2JqZWN0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL0dQQlJvb3RPYmplY3QubSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2
ZWMvR1BCUm9vdE9iamVjdF9QYWNrYWdlUHJpdmF0ZS5oICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9HUEJSdW50aW1lVHlwZXMuaCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL0dQQlVua25v
d25GaWVsZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIG9iamVjdGl2ZWMvR1BCVW5rbm93bkZpZWxkLm0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9HUEJVbmtub3duRmllbGRfUGFj
a2FnZVByaXZhdGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3Rp
dmVjL0dQQlVua25vd25GaWVsZFNldC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvR1BCVW5rbm93bkZpZWxkU2V0Lm0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9HUEJVbmtu
b3duRmllbGRTZXRfUGFja2FnZVByaXZhdGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBvYmplY3RpdmVjL0dQQlV0aWxpdGllcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvR1BCVXRpbGl0aWVzLm0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0
aXZlYy9HUEJVdGlsaXRpZXNfUGFja2FnZVByaXZhdGUuaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL0dQQldlbGxLbm93blR5cGVzLmggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvR1BCV2Vs
bEtub3duVHlwZXMubSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgb2JqZWN0aXZlYy9HUEJXaXJlRm9ybWF0LmggICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL0dQQldpcmVGb3JtYXQubSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVj
dGl2ZWMvUHJvdG9jb2xCdWZmZXJzX2lPUy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
ICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9Qcm90b2NvbEJ1ZmZlcnNfaU9TLnhjb2RlcHJv
ai9wcm9qZWN0Lnhjd29ya3NwYWNlL2NvbnRlbnRzLnhjd29ya3NwYWNlZGF0YSBcCi0gIG9iamVj
dGl2ZWMvUHJvdG9jb2xCdWZmZXJzX2lPUy54Y29kZXByb2ovcHJvamVjdC54Y3dvcmtzcGFjZS94
Y3NoYXJlZGRhdGEvV29ya3NwYWNlU2V0dGluZ3MueGNzZXR0aW5ncyBcCi0gIG9iamVjdGl2ZWMv
UHJvdG9jb2xCdWZmZXJzX2lPUy54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjYmFzZWxpbmVzLzhC
QkVBNEE1MTQ3QzcyNzEwMEM0QURCNy54Y2Jhc2VsaW5lL0ZGRTQ2NUNBLTBFNzQtNDBFOC05RjA5
LTUwMEI2NkI3RENCMi5wbGlzdCBcCi0gIG9iamVjdGl2ZWMvUHJvdG9jb2xCdWZmZXJzX2lPUy54
Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjYmFzZWxpbmVzLzhCQkVBNEE1MTQ3QzcyNzEwMEM0QURC
Ny54Y2Jhc2VsaW5lL0luZm8ucGxpc3QgXAotICBvYmplY3RpdmVjL1Byb3RvY29sQnVmZmVyc19p
T1MueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvUGVyZm9ybWFuY2VUZXN0cy54Y3Nj
aGVtZSBcCi0gIG9iamVjdGl2ZWMvUHJvdG9jb2xCdWZmZXJzX2lPUy54Y29kZXByb2oveGNzaGFy
ZWRkYXRhL3hjc2NoZW1lcy9Qcm90b2NvbEJ1ZmZlcnMueGNzY2hlbWUgXAotICBvYmplY3RpdmVj
L1Byb3RvY29sQnVmZmVyc19PU1gueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgICAgICAgICAg
ICAgICAgICBcCi0gIG9iamVjdGl2ZWMvUHJvdG9jb2xCdWZmZXJzX09TWC54Y29kZXByb2ovcHJv
amVjdC54Y3dvcmtzcGFjZS9jb250ZW50cy54Y3dvcmtzcGFjZWRhdGEgXAotICBvYmplY3RpdmVj
L1Byb3RvY29sQnVmZmVyc19PU1gueGNvZGVwcm9qL3Byb2plY3QueGN3b3Jrc3BhY2UveGNzaGFy
ZWRkYXRhL1dvcmtzcGFjZVNldHRpbmdzLnhjc2V0dGluZ3MgXAotICBvYmplY3RpdmVjL1Byb3Rv
Y29sQnVmZmVyc19PU1gueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvUGVyZm9ybWFu
Y2VUZXN0cy54Y3NjaGVtZSBcCi0gIG9iamVjdGl2ZWMvUHJvdG9jb2xCdWZmZXJzX09TWC54Y29k
ZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9Qcm90b2NvbEJ1ZmZlcnMueGNzY2hlbWUgXAot
ICBvYmplY3RpdmVjL1JFQURNRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvZ29sZGVuX21lc3NhZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZl
Yy9UZXN0cy9nb2xkZW5fcGFja2VkX2ZpZWxkc19tZXNzYWdlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBvYmplY3RpdmVjL1Rlc3RzL0dQQkFSQ1VuaXR0ZXN0UHJvdG9zLm0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvR1BC
QXJyYXlUZXN0cy5tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgb2JqZWN0aXZlYy9UZXN0cy9HUEJDb2RlZElucHV0U3RyZWFtVGVzdHMubSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL1Rlc3RzL0dQQkNvZGVkT3VwdXRT
dHJlYW1UZXN0cy5tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2
ZWMvVGVzdHMvR1BCQ29uY3VycmVuY3lUZXN0cy5tICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9UZXN0cy9HUEJEZXNjcmlwdG9yVGVzdHMubSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL1Rlc3RzL0dQ
QkRpY3Rpb25hcnlUZXN0cytCb29sLm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIG9iamVjdGl2ZWMvVGVzdHMvR1BCRGljdGlvbmFyeVRlc3RzK0ludDMyLm0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9UZXN0cy9HUEJEaWN0aW9uYXJ5
VGVzdHMrSW50NjQubSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3Rp
dmVjL1Rlc3RzL0dQQkRpY3Rpb25hcnlUZXN0cytTdHJpbmcubSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvR1BCRGljdGlvbmFyeVRlc3RzK1VJbnQz
Mi5tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9UZXN0cy9H
UEJEaWN0aW9uYXJ5VGVzdHMrVUludDY0Lm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBvYmplY3RpdmVjL1Rlc3RzL0dQQkRpY3Rpb25hcnlUZXN0cy5wZGRtICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvR1BCTWVzc2FnZVRl
c3RzK01lcmdlLm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0
aXZlYy9UZXN0cy9HUEJNZXNzYWdlVGVzdHMrUnVudGltZS5tICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL1Rlc3RzL0dQQk1lc3NhZ2VUZXN0cytTZXJpYWxp
emF0aW9uLm0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMv
R1BCTWVzc2FnZVRlc3RzLm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgb2JqZWN0aXZlYy9UZXN0cy9HUEJPYmplY3RpdmVDUGx1c1BsdXNUZXN0Lm1tICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL1Rlc3RzL0dQQlBlcmZUZXN0
cy5tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVj
dGl2ZWMvVGVzdHMvR1BCU3dpZnRUZXN0cy5zd2lmdCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9UZXN0cy9HUEJUZXN0VXRpbGl0aWVzLmggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmplY3RpdmVjL1Rlc3Rz
L0dQQlRlc3RVdGlsaXRpZXMubSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvR1BCVW5pdHRlc3RQcm90b3MubSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9UZXN0cy9HUEJVbmtub3du
RmllbGRTZXRUZXN0Lm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBvYmpl
Y3RpdmVjL1Rlc3RzL0dQQlV0aWxpdGllc1Rlc3RzLm0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvR1BCV2VsbEtub3duVHlwZXNUZXN0
Lm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9UZXN0
cy9HUEJXaXJlRm9ybWF0VGVzdHMubSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBvYmplY3RpdmVjL1Rlc3RzL2lPU1Rlc3RIYXJuZXNzL0FwcERlbGVnYXRlLm0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvaU9TVGVzdEhh
cm5lc3MvZW4ubHByb2ovSW5mb1BsaXN0LnN0cmluZ3MgICAgICAgICAgICAgICAgIFwKLSAgb2Jq
ZWN0aXZlYy9UZXN0cy9pT1NUZXN0SGFybmVzcy9JbWFnZXMueGNhc3NldHMvQXBwSWNvbi5hcHBp
Y29uc2V0L0NvbnRlbnRzLmpzb24gICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvaU9TVGVzdEhh
cm5lc3MvSW1hZ2VzLnhjYXNzZXRzL0FwcEljb24uYXBwaWNvbnNldC9pUGFkNi5wbmcgICAgICAg
ICAgXAotICBvYmplY3RpdmVjL1Rlc3RzL2lPU1Rlc3RIYXJuZXNzL0ltYWdlcy54Y2Fzc2V0cy9B
cHBJY29uLmFwcGljb25zZXQvaVBhZDZfMngucG5nICAgICAgIFwKLSAgb2JqZWN0aXZlYy9UZXN0
cy9pT1NUZXN0SGFybmVzcy9JbWFnZXMueGNhc3NldHMvQXBwSWNvbi5hcHBpY29uc2V0L2lQYWQ3
LnBuZyAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvaU9TVGVzdEhhcm5lc3MvSW1hZ2Vz
LnhjYXNzZXRzL0FwcEljb24uYXBwaWNvbnNldC9pUGFkN18yeC5wbmcgICAgICAgXAotICBvYmpl
Y3RpdmVjL1Rlc3RzL2lPU1Rlc3RIYXJuZXNzL0ltYWdlcy54Y2Fzc2V0cy9BcHBJY29uLmFwcGlj
b25zZXQvaVBob25lNi5wbmcgICAgICAgIFwKLSAgb2JqZWN0aXZlYy9UZXN0cy9pT1NUZXN0SGFy
bmVzcy9JbWFnZXMueGNhc3NldHMvQXBwSWNvbi5hcHBpY29uc2V0L2lQaG9uZTZfMngucG5nICAg
ICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvaU9TVGVzdEhhcm5lc3MvSW1hZ2VzLnhjYXNzZXRzL0Fw
cEljb24uYXBwaWNvbnNldC9pUGhvbmU3XzJ4LnBuZyAgICAgXAotICBvYmplY3RpdmVjL1Rlc3Rz
L2lPU1Rlc3RIYXJuZXNzL0ltYWdlcy54Y2Fzc2V0cy9BcHBJY29uLmFwcGljb25zZXQvaVBob25l
N18zeC5wbmcgICAgIFwKLSAgb2JqZWN0aXZlYy9UZXN0cy9pT1NUZXN0SGFybmVzcy9JbWFnZXMu
eGNhc3NldHMvTGF1bmNoSW1hZ2UubGF1bmNoaW1hZ2UvQ29udGVudHMuanNvbiBcCi0gIG9iamVj
dGl2ZWMvVGVzdHMvaU9TVGVzdEhhcm5lc3MvSW5mby5wbGlzdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvaU9TVGVzdEhhcm5lc3MvTGF1bmNo
U2NyZWVuLnhpYiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVz
dHMvdGV4dF9mb3JtYXRfbWFwX3VuaXR0ZXN0X2RhdGEudHh0ICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvdGV4dF9mb3JtYXRfdW5pdHRlc3RfZGF0YS50eHQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvdW5pdHRl
c3RfY3ljbGUucHJvdG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IG9iamVjdGl2ZWMvVGVzdHMvdW5pdHRlc3Rfb2JqYy5wcm90byAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvdW5pdHRlc3Rfb2JqY19z
dGFydHVwLnByb3RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2
ZWMvVGVzdHMvdW5pdHRlc3RfcnVudGltZV9wcm90bzIucHJvdG8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvdW5pdHRlc3RfcnVudGltZV9wcm90bzMu
cHJvdG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMv
VW5pdFRlc3RzLUJyaWRnaW5nLUhlYWRlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIG9iamVjdGl2ZWMvVGVzdHMvVW5pdFRlc3RzLUluZm8ucGxpc3QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFByb3RvYnVmLnBvZHNwZWMKLQotcHl0aG9u
X0VYVFJBX0RJU1Q9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9NQU5JRkVTVC5pbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9f
X2luaXRfXy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL19faW5pdF9fLnB5ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX2RhdGFiYXNlLnB5ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfcG9v
bC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUv
cHJvdG9idWYvaW50ZXJuYWwvX19pbml0X18ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9fcGFyYW1ldGVyaXplZC5w
eSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2lu
dGVybmFsL2FueV90ZXN0LnByb3RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5
dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvYW55X3Rlc3QucHJvdG8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9hcGlf
aW1wbGVtZW50YXRpb24uY2MgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xl
L3Byb3RvYnVmL2ludGVybmFsL2FwaV9pbXBsZW1lbnRhdGlvbi5weSAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvY29udGFpbmVycy5weSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9p
bnRlcm5hbC9kZWNvZGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBw
eXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2Rlc2NyaXB0b3JfZGF0YWJhc2VfdGVzdC5w
eSAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZGVz
Y3JpcHRvcl9wb29sX3Rlc3QucHkgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2ds
ZS9wcm90b2J1Zi9pbnRlcm5hbC9kZXNjcmlwdG9yX3Bvb2xfdGVzdDEucHJvdG8gICAgICAgICAg
ICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2Rlc2NyaXB0b3JfcG9v
bF90ZXN0Mi5wcm90byAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYv
aW50ZXJuYWwvZGVzY3JpcHRvcl90ZXN0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
cHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGVyLnB5ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2Vu
dW1fdHlwZV93cmFwcGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29n
bGUvcHJvdG9idWYvaW50ZXJuYWwvZmFjdG9yeV90ZXN0MS5wcm90byAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9mYWN0b3J5X3Rlc3Qy
LnByb3RvICAgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVm
L2ludGVybmFsL2dlbmVyYXRvcl90ZXN0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IHB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvaW1wb3J0X3Rlc3RfcGFja2FnZS9fX2lu
aXRfXy5weSAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9p
bXBvcnRfdGVzdF9wYWNrYWdlL2lubmVyLnByb3RvICAgICAgICAgICAgXAotICBweXRob24vZ29v
Z2xlL3Byb3RvYnVmL2ludGVybmFsL2ltcG9ydF90ZXN0X3BhY2thZ2Uvb3V0ZXIucHJvdG8gICAg
ICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvanNvbl9mb3JtYXRf
dGVzdC5weSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1
Zi9pbnRlcm5hbC9tZXNzYWdlX2ZhY3RvcnlfdGVzdC5weSAgICAgICAgICAgICAgICAgICAgXAot
ICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL21lc3NhZ2VfbGlzdGVuZXIucHkgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwv
bWVzc2FnZV9zZXRfZXh0ZW5zaW9ucy5wcm90byAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dv
b2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9tZXNzYWdlX3Rlc3QucHkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL21pc3NpbmdfZW51
bV92YWx1ZXMucHJvdG8gICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9i
dWYvaW50ZXJuYWwvbW9yZV9leHRlbnNpb25zLnByb3RvICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9tb3JlX2V4dGVuc2lvbnNfZHluYW1p
Yy5wcm90byAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFs
L21vcmVfbWVzc2FnZXMucHJvdG8gICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9n
b29nbGUvcHJvdG9idWYvaW50ZXJuYWwvcGFja2VkX2ZpZWxkX3Rlc3QucHJvdG8gICAgICAgICAg
ICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9wcm90b19idWls
ZGVyX3Rlc3QucHkgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3Rv
YnVmL2ludGVybmFsL3B5dGhvbl9tZXNzYWdlLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvcmVmbGVjdGlvbl90ZXN0LnB5ICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5h
bC9zZXJ2aWNlX3JlZmxlY3Rpb25fdGVzdC5weSAgICAgICAgICAgICAgICAgXAotICBweXRob24v
Z29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3N5bWJvbF9kYXRhYmFzZV90ZXN0LnB5ICAgICAgICAg
ICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvdGVzdF9iYWRf
aWRlbnRpZmllcnMucHJvdG8gICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90
b2J1Zi9pbnRlcm5hbC90ZXN0X3V0aWwucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3RleHRfZW5jb2RpbmdfdGVzdC5w
eSAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJu
YWwvdGV4dF9mb3JtYXRfdGVzdC5weSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9u
L2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC90eXBlX2NoZWNrZXJzLnB5ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3Vua25vd25f
ZmllbGRzX3Rlc3QucHkgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJv
dG9idWYvaW50ZXJuYWwvd2VsbF9rbm93bl90eXBlcy5weSAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC93ZWxsX2tub3duX3R5cGVzLnB5
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVy
bmFsL3dlbGxfa25vd25fdHlwZXNfdGVzdC5weSAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhv
bi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvd2VsbF9rbm93bl90eXBlc190ZXN0LnB5ICAgICAg
ICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC93aXJlX2Zv
cm1hdC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3By
b3RvYnVmL2ludGVybmFsL3dpcmVfZm9ybWF0X3Rlc3QucHkgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvanNvbl9mb3JtYXQucHkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9tZXNz
YWdlLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRo
b24vZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2VfZmFjdG9yeS5weSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvcHJvdG9fYnVpbGRlci5w
eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9w
cm90b2J1Zi9weWV4dC9SRUFETUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L19faW5pdF9fLnB5ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvcHll
eHQvY3BwX21lc3NhZ2UucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yLmNjICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0
b3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUv
cHJvdG9idWYvcHlleHQvZGVzY3JpcHRvcl9jb250YWluZXJzLmNjICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yX2NvbnRhaW5l
cnMuaCAgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5
ZXh0L2Rlc2NyaXB0b3JfZGF0YWJhc2UuY2MgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5
dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvZGVzY3JpcHRvcl9kYXRhYmFzZS5oICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlw
dG9yX3Bvb2wuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xl
L3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfcG9vbC5oICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvZXh0ZW5zaW9uX2RpY3QuY2Mg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9w
eWV4dC9leHRlbnNpb25fZGljdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBw
eXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L21hcF9jb250YWluZXIuY2MgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvbWFwX2Nv
bnRhaW5lci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2ds
ZS9wcm90b2J1Zi9weWV4dC9tZXNzYWdlLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L21lc3NhZ2UuaCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYv
cHlleHQvcHJvdG8yX2FwaV90ZXN0LnByb3RvICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
cHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9weXRob24ucHJvdG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L3B5dGhv
bl9wcm90b2J1Zi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29n
bGUvcHJvdG9idWYvcHlleHQvcmVwZWF0ZWRfY29tcG9zaXRlX2NvbnRhaW5lci5jYyAgICAgICAg
ICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9yZXBlYXRlZF9jb21wb3Np
dGVfY29udGFpbmVyLmggICAgICAgICAgICAgICAgXAotICBweXRob24vZ29vZ2xlL3Byb3RvYnVm
L3B5ZXh0L3JlcGVhdGVkX3NjYWxhcl9jb250YWluZXIuY2MgICAgICAgICAgICAgICAgICBcCi0g
IHB5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvcmVwZWF0ZWRfc2NhbGFyX2NvbnRhaW5lci5o
ICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9zY29w
ZWRfcHlvYmplY3RfcHRyLmggICAgICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vZ29v
Z2xlL3Byb3RvYnVmL3JlZmxlY3Rpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvc2VydmljZS5weSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dvb2dsZS9wcm90b2J1
Zi9zZXJ2aWNlX3JlZmxlY3Rpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBweXRob24vZ29vZ2xlL3Byb3RvYnVmL3N5bWJvbF9kYXRhYmFzZS5weSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9nb29nbGUvcHJvdG9idWYvdGV4dF9lbmNv
ZGluZy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHl0aG9uL2dv
b2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBweXRob24vbW94LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9zZXR1cC5weSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgcHl0aG9uL3N0dWJvdXQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBweXRob24vdG94LmluaSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5dGhvbi9S
RUFETUUubWQKLQotcnVieV9FWFRSQV9ESVNUPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJ1YnkvR2VtZmlsZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgcnVieS9HZW1maWxlLmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBydWJ5Ly5naXRpZ25vcmUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJ1YnkvUkVB
RE1FLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgcnVieS9SYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBydWJ5L2V4dC9nb29nbGUvcHJv
dG9idWZfYy9kZWZzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIHJ1YnkvZXh0L2dvb2dsZS9wcm90b2J1Zl9jL2VuY29kZV9kZWNvZGUuYyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcnVieS9leHQvZ29vZ2xlL3Byb3RvYnVmX2MvZXh0
Y29uZi5yYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBydWJ5L2V4
dC9nb29nbGUvcHJvdG9idWZfYy9tYXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIHJ1YnkvZXh0L2dvb2dsZS9wcm90b2J1Zl9jL21lc3NhZ2UuYyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcnVieS9leHQvZ29vZ2xlL3By
b3RvYnVmX2MvcHJvdG9idWYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy9wcm90b2J1Zi5oICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJ1YnkvZXh0L2dvb2dsZS9wcm90b2J1Zl9jL3Jl
cGVhdGVkX2ZpZWxkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcnVieS9l
eHQvZ29vZ2xlL3Byb3RvYnVmX2Mvc3RvcmFnZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy91cGIuYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJ1YnkvZXh0L2dvb2dsZS9w
cm90b2J1Zl9jL3VwYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgcnVieS9nb29nbGUtcHJvdG9idWYuZ2Vtc3BlYyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBydWJ5L2xpYi9nb29nbGUvcHJvdG9idWYvbWVz
c2FnZV9leHRzLnJiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJ1Ynkv
bGliL2dvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZC5yYiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgcnVieS9saWIvZ29vZ2xlL3Byb3RvYnVmLnJiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBydWJ5L3BvbS54bWwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIHJ1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlC
dWlsZGVyLmphdmEgICAgICAgICAgICAgIFwKLSAgcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvanJ1YnkvUnVieURlc2NyaXB0b3IuamF2YSAgICAgICAgICAgXAotICBydWJ5
L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5RGVzY3JpcHRvclBv
b2wuamF2YSAgICAgICBcCi0gIHJ1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L2pydWJ5L1J1YnlFbnVtQnVpbGRlckNvbnRleHQuamF2YSAgIFwKLSAgcnVieS9zcmMvbWFpbi9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieUVudW1EZXNjcmlwdG9yLmphdmEgICAg
ICAgXAotICBydWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5
RW51bS5qYXZhICAgICAgICAgICAgICAgICBcCi0gIHJ1Ynkvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlGaWVsZERlc2NyaXB0b3IuamF2YSAgICAgIFwKLSAgcnVi
eS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieU1hcC5qYXZhICAg
ICAgICAgICAgICAgICAgXAotICBydWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9qcnVieS9SdWJ5TWVzc2FnZUJ1aWxkZXJDb250ZXh0LmphdmEgXAotICBydWJ5L3NyYy9tYWlu
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5TWVzc2FnZS5qYXZhICAgICAgICAg
ICAgICBcCi0gIHJ1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1
YnlPbmVvZkJ1aWxkZXJDb250ZXh0LmphdmEgIFwKLSAgcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvanJ1YnkvUnVieU9uZW9mRGVzY3JpcHRvci5qYXZhICAgICAgXAotICBy
dWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5UHJvdG9idWYu
amF2YSAgICAgICAgICAgICBcCi0gIHJ1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL2pydWJ5L1J1YnlSZXBlYXRlZEZpZWxkLmphdmEgICAgICAgIFwKLSAgcnVieS9zcmMvbWFp
bi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvU2VudGluZWxPdXRlckNsYXNzLmphdmEg
ICAgICAgXAotICBydWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9V
dGlscy5qYXZhICAgICAgICAgICAgICAgICAgICBcCi0gIHJ1Ynkvc3JjL21haW4vamF2YS9nb29n
bGUvUHJvdG9idWZKYXZhU2VydmljZS5qYXZhICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
cnVieS9zcmMvbWFpbi9zZW50aW5lbC5wcm90byAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBydWJ5L3Rlc3RzL2Jhc2ljLnJiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJ1YnkvdGVzdHMv
cmVwZWF0ZWRfZmllbGRfdGVzdC5yYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgcnVieS90ZXN0cy9zdHJlc3MucmIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBydWJ5L3Rlc3RzL2dlbmVyYXRlZF9j
b2RlLnByb3RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IHJ1YnkvdGVzdHMvZ2VuZXJhdGVkX2NvZGVfdGVzdC5yYiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgcnVieS90cmF2aXMtdGVzdC5zaAotCi1qc19FWFRSQV9E
SVNUPSAgICAgICAgICAgICAgXAotICBqcy9SRUFETUUubWQgICAgICAgICAgICAgIFwKLSAganMv
YmluYXJ5L2FyaXRoLmpzICAgICAgICBcCi0gIGpzL2JpbmFyeS9hcml0aF90ZXN0LmpzICAgXAot
ICBqcy9iaW5hcnkvY29uc3RhbnRzLmpzICAgIFwKLSAganMvYmluYXJ5L2RlY29kZXIuanMgICAg
ICBcCi0gIGpzL2JpbmFyeS9kZWNvZGVyX3Rlc3QuanMgXAotICBqcy9iaW5hcnkvcHJvdG9fdGVz
dC5qcyAgIFwKLSAganMvYmluYXJ5L3JlYWRlci5qcyAgICAgICBcCi0gIGpzL2JpbmFyeS9yZWFk
ZXJfdGVzdC5qcyAgXAotICBqcy9iaW5hcnkvdXRpbHMuanMgICAgICAgIFwKLSAganMvYmluYXJ5
L3V0aWxzX3Rlc3QuanMgICBcCi0gIGpzL2JpbmFyeS93cml0ZXIuanMgICAgICAgXAotICBqcy9i
aW5hcnkvd3JpdGVyX3Rlc3QuanMgIFwKLSAganMvZGF0YS5wcm90byAgICAgICAgICAgICBcCi0g
IGpzL2RlYnVnLmpzICAgICAgICAgICAgICAgXAotICBqcy9kZWJ1Z190ZXN0LmpzICAgICAgICAg
IFwKLSAganMvZ3VscGZpbGUuanMgICAgICAgICAgICBcCi0gIGpzL2phc21pbmUuanNvbiAgICAg
ICAgICAgXAotICBqcy9tZXNzYWdlLmpzICAgICAgICAgICAgIFwKLSAganMvbWVzc2FnZV90ZXN0
LmpzICAgICAgICBcCi0gIGpzL25vZGVfbG9hZGVyLmpzICAgICAgICAgXAotICBqcy9wYWNrYWdl
Lmpzb24gICAgICAgICAgIFwKLSAganMvcHJvdG8zX3Rlc3QuanMgICAgICAgICBcCi0gIGpzL3By
b3RvM190ZXN0LnByb3RvICAgICAgXAotICBqcy90ZXN0LnByb3RvICAgICAgICAgICAgIFwKLSAg
anMvdGVzdDIucHJvdG8gICAgICAgICAgICBcCi0gIGpzL3Rlc3QzLnByb3RvICAgICAgICAgICAg
XAotICBqcy90ZXN0NC5wcm90byAgICAgICAgICAgIFwKLSAganMvdGVzdDUucHJvdG8gICAgICAg
ICAgICBcCi0gIGpzL3Rlc3RfYm9vdHN0cmFwLmpzICAgICAgXAotICBqcy90ZXN0YmluYXJ5LnBy
b3RvICAgICAgIFwKLSAganMvdGVzdGVtcHR5LnByb3RvCi0KLWFsbF9FWFRSQV9ESVNUPSQoY3No
YXJwX0VYVFJBX0RJU1QpICQoamF2YV9FWFRSQV9ESVNUKSAkKGphdmFuYW5vX0VYVFJBX0RJU1Qp
ICQob2JqZWN0aXZlY19FWFRSQV9ESVNUKSAkKHB5dGhvbl9FWFRSQV9ESVNUKSAkKHJ1YnlfRVhU
UkFfRElTVCkgJChqc19FWFRSQV9ESVNUKQotCi1FWFRSQV9ESVNUID0gJChARElTVF9MQU5HQF9F
WFRSQV9ESVNUKSAgIFwKLSAgYXV0b2dlbi5zaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBnZW5lcmF0ZV9kZXNjcmlwdG9yX3Byb3RvLnNoICAgICAgICAgICBcCi0gIFJFQURNRS5t
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgTElDRU5TRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBDT05UUklCVVRPUlMudHh0ICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIENIQU5HRVMudHh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdXBk
YXRlX2ZpbGVfbGlzdHMuc2ggICAgICAgICAgICAgICAgICAgXAotICBCVUlMRCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdtb2NrLkJVSUxEICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgV09SS1NQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBjbWFrZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICBcCi0gIGNtYWtlL1JFQURN
RS5tZCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY21ha2UvZXh0cmFjdF9pbmNsdWRlcy5i
YXQuaW4gICAgICAgICAgXAotICBjbWFrZS9pbnN0YWxsLmNtYWtlICAgICAgICAgICAgICAgICAg
ICBcCi0gIGNtYWtlL2xpYnByb3RvYnVmLmNtYWtlICAgICAgICAgICAgICAgIFwKLSAgY21ha2Uv
bGlicHJvdG9idWYtbGl0ZS5jbWFrZSAgICAgICAgICAgXAotICBjbWFrZS9saWJwcm90b2MuY21h
a2UgICAgICAgICAgICAgICAgICBcCi0gIGNtYWtlL3Byb3RvYnVmLWNvbmZpZy12ZXJzaW9uLmNt
YWtlLmluIFwKLSAgY21ha2UvcHJvdG9idWYtY29uZmlnLmNtYWtlLmluICAgICAgICAgXAotICBj
bWFrZS9wcm90b2J1Zi1tb2R1bGUuY21ha2UuaW4gICAgICAgICBcCi0gIGNtYWtlL3Byb3RvYy5j
bWFrZSAgICAgICAgICAgICAgICAgICAgIFwKLSAgY21ha2UvdGVzdHMuY21ha2UgICAgICAgICAg
ICAgICAgICAgICAgXAotICBlZGl0b3JzL1JFQURNRS50eHQgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGVkaXRvcnMvcHJvdG8udmltICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZWRpdG9ycy9w
cm90b2J1Zi1tb2RlLmVsICAgICAgICAgICAgICAgXAotICBleGFtcGxlcy9SRUFETUUudHh0ICAg
ICAgICAgICAgICAgICAgICBcCi0gIGV4YW1wbGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgZXhhbXBsZXMvYWRkcmVzc2Jvb2sucHJvdG8gICAgICAgICAgICAgXAotICBleGFt
cGxlcy9hZGRfcGVyc29uLmNjICAgICAgICAgICAgICAgICBcCi0gIGV4YW1wbGVzL2FkZF9wZXJz
b24uZ28gICAgICAgICAgICAgICAgIFwKLSAgZXhhbXBsZXMvYWRkX3BlcnNvbl90ZXN0LmdvICAg
ICAgICAgICAgXAotICBleGFtcGxlcy9saXN0X3Blb3BsZS5jYyAgICAgICAgICAgICAgICBcCi0g
IGV4YW1wbGVzL2xpc3RfcGVvcGxlLmdvICAgICAgICAgICAgICAgIFwKLSAgZXhhbXBsZXMvQWRk
UGVyc29uLmphdmEgICAgICAgICAgICAgICAgXAotICBleGFtcGxlcy9MaXN0UGVvcGxlLmphdmEg
ICAgICAgICAgICAgICBcCi0gIGV4YW1wbGVzL2FkZF9wZXJzb24ucHkgICAgICAgICAgICAgICAg
IFwKLSAgZXhhbXBsZXMvbGlzdF9wZW9wbGUucHkgICAgICAgICAgICAgICAgXAotICBleGFtcGxl
cy9saXN0X3Blb3BsZV90ZXN0LmdvICAgICAgICAgICBcCi0gIHByb3RvYnVmLmJ6bCAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgc2l4LkJVSUxEICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB1dGlsL3B5dGhvbi9CVUlMRAotCi0jIERlbGV0ZXMgYWxsIHRoZSBmaWxlcyBn
ZW5lcmF0ZWQgYnkgYXV0b2dlbi5zaC4KLU1BSU5UQUlORVJDTEVBTkZJTEVTID0gICBcCi0gIGFj
bG9jYWwubTQgICAgICAgICAgICAgXAotICBhci1saWIgICAgICAgICAgICAgICAgIFwKLSAgY29u
ZmlnLmd1ZXNzICAgICAgICAgICBcCi0gIGNvbmZpZy5zdWIgICAgICAgICAgICAgXAotICBjb25m
aWd1cmUgICAgICAgICAgICAgIFwKLSAgZGVwY29tcCAgICAgICAgICAgICAgICBcCi0gIGluc3Rh
bGwtc2ggICAgICAgICAgICAgXAotICBsdG1haW4uc2ggICAgICAgICAgICAgIFwKLSAgTWFrZWZp
bGUuaW4gICAgICAgICAgICBcCi0gIG1pc3NpbmcgICAgICAgICAgICAgICAgXAotICBta2luc3Rh
bGxkaXJzICAgICAgICAgIFwKLSAgY29uZmlnLmguaW4gICAgICAgICAgICBcCi0gIHN0YW1wLmgu
aW4gICAgICAgICAgICAgXAotICBtNC9sdHN1Z2FyLm00ICAgICAgICAgIFwKLSAgbTQvbGlidG9v
bC5tNCAgICAgICAgICBcCi0gIG00L2x0dmVyc2lvbi5tNCAgICAgICAgXAotICBtNC9sdH5vYnNv
bGV0ZS5tNCAgICAgIFwKLSAgbTQvbHRvcHRpb25zLm00CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL09XTkVSUyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvT1dO
RVJTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzEyNWQzMjNhYjdiYmI0YjgxNDY1
MjhiYTBhN2Y2MTIzMTRhZWU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvT1dORVJTCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1wa2FzdGluZ0Bj
aHJvbWl1bS5vcmcKLXh5enp5ekBjaHJvbWl1bS5vcmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvUHJvdG9idWYucG9k
c3BlYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvUHJvdG9idWYucG9kc3BlYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJi
ZDA2ZGYwMTcyYjg3ZTZjZGU5ZGQ2NDZlZjkxNDlkODY5MzRkZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL1Byb3RvYnVmLnBvZHNwZWMKKysrIC9kZXYvbnVs
bApAQCAtMSw0MCArMCwwIEBACi0jIFRoaXMgZmlsZSBkZXNjcmliZXMgdG8gQ29jb2Fwb2RzIGhv
dyB0byBpbnRlZ3JhdGUgdGhlIE9iamVjdGl2ZS1DIHJ1bnRpbWUgaW50byBhIGRlcGVuZGVudAot
IyBwcm9qZWN0LgotIyBEZXNwaXRlIHRoaXMgZmlsZSBiZWluZyBzcGVjaWZpYyB0byBPYmplY3Rp
dmUtQywgaXQgbmVlZHMgdG8gYmUgb24gdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnkuCi0jIE90
aGVyd2lzZSwgQ29jb2Fwb2RzIGdpdmVzIHRyb3VibGUgbGlrZSBub3QgcGlja2luZyB1cCB0aGUg
bGljZW5zZSBmaWxlIGNvcnJlY3RseSwgb3Igbm90IGxldHRpbmcKLSMgZGVwZW5kZW50IHByb2pl
Y3RzIHVzZSB0aGUgOmdpdCBub3RhdGlvbiB0byByZWZlciB0byB0aGUgbGlicmFyeS4KLVBvZDo6
U3BlYy5uZXcgZG8gfHN8Ci0gIHMubmFtZSAgICAgPSAnUHJvdG9idWYnCi0gIHMudmVyc2lvbiAg
PSAnMy4wLjAtYmV0YS0yJwotICBzLnN1bW1hcnkgID0gJ1Byb3RvY29sIEJ1ZmZlcnMgdi4zIHJ1
bnRpbWUgbGlicmFyeSBmb3IgT2JqZWN0aXZlLUMuJwotICBzLmhvbWVwYWdlID0gJ2h0dHBzOi8v
Z2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWYnCi0gIHMubGljZW5zZSAgPSAnTmV3IEJTRCcKLSAg
cy5hdXRob3JzICA9IHsgJ1RoZSBQcm90b2NvbCBCdWZmZXJzIGNvbnRyaWJ1dG9ycycgPT4gJ3By
b3RvYnVmQGdvb2dsZWdyb3Vwcy5jb20nIH0KLQotICBzLnNvdXJjZSA9IHsgOmdpdCA9PiAnaHR0
cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi5naXQnLAotICAgICAgICAgICAgICAgOnRh
ZyA9PiAidiN7cy52ZXJzaW9ufSIgfQotCi0gIHMuc291cmNlX2ZpbGVzID0gJ29iamVjdGl2ZWMv
Ki57aCxtfScsCi0gICAgICAgICAgICAgICAgICAgJ29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVm
L0FueS5wYm9iamMue2gsbX0nLAotICAgICAgICAgICAgICAgICAgICdvYmplY3RpdmVjL2dvb2ds
ZS9wcm90b2J1Zi9BcGkucGJvYmpjLntoLG19JywKLSAgICAgICAgICAgICAgICAgICAnb2JqZWN0
aXZlYy9nb29nbGUvcHJvdG9idWYvRHVyYXRpb24ucGJvYmpjLmgnLAotICAgICAgICAgICAgICAg
ICAgICdvYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9FbXB0eS5wYm9iamMue2gsbX0nLAotICAg
ICAgICAgICAgICAgICAgICdvYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9GaWVsZE1hc2sucGJv
YmpjLntoLG19JywKLSAgICAgICAgICAgICAgICAgICAnb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9i
dWYvU291cmNlQ29udGV4dC5wYm9iamMue2gsbX0nLAotICAgICAgICAgICAgICAgICAgICdvYmpl
Y3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9TdHJ1Y3QucGJvYmpjLntoLG19JywKLSAgICAgICAgICAg
ICAgICAgICAnb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvVGltZXN0YW1wLnBib2JqYy5oJywK
LSAgICAgICAgICAgICAgICAgICAnb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvVHlwZS5wYm9i
amMue2gsbX0nLAotICAgICAgICAgICAgICAgICAgICdvYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1
Zi9XcmFwcGVycy5wYm9iamMue2gsbX0nCi0gICMgVGltZXN0YW1wLnBib2JqYy5tIGFuZCBEdXJh
dGlvbi5wYm9iamMubSBhcmUgI2ltcG9ydGVkIGJ5IEdQQldlbGxLbm93blR5cGVzLm0uIFNvIHdl
IGNhbid0Ci0gICMgY29tcGlsZSB0aGVtIChkdXBsaWNhdGUgc3ltYm9scyksIGJ1dCB3ZSBuZWVk
IHRoZW0gYXZhaWxhYmxlIGZvciB0aGUgaW1wb3J0aW5nOgotICBzLnByZXNlcnZlX3BhdGhzID0g
J29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL0R1cmF0aW9uLnBib2JqYy5tJywKLSAgICAgICAg
ICAgICAgICAgICAgICdvYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9UaW1lc3RhbXAucGJvYmpj
Lm0nCi0gICMgVGhlIGZvbGxvd2luZyB3b3VsZCBjYXVzZSBkdXBsaWNhdGUgc3ltYm9sIGRlZmlu
aXRpb25zLiBHUEJQcm90b2NvbEJ1ZmZlcnMgaXMgZXhwZWN0ZWQgdG8gYmUKLSAgIyBsZWZ0IG91
dCwgYXMgaXQncyBhbiB1bWJyZWxsYSBpbXBsZW1lbnRhdGlvbiBmaWxlLgotICBzLmV4Y2x1ZGVf
ZmlsZXMgPSAnb2JqZWN0aXZlYy9HUEJQcm90b2NvbEJ1ZmZlcnMubScKLSAgcy5oZWFkZXJfbWFw
cGluZ3NfZGlyID0gJ29iamVjdGl2ZWMnCi0KLSAgcy5pb3MuZGVwbG95bWVudF90YXJnZXQgPSAn
Ny4xJwotICBzLm9zeC5kZXBsb3ltZW50X3RhcmdldCA9ICcxMC45JwotICBzLnJlcXVpcmVzX2Fy
YyA9IGZhbHNlCi1lbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvUkVBRE1FLmNocm9taXVtIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9SRUFETUUuY2hyb21p
dW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MzhmYmMyNzE1Zjg4YmEyNjYyNDdm
YjMyZTU4MTQ3YjA0YWQwYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9SRUFETUUuY2hyb21pdW0KKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi1O
YW1lOiBQcm90b2NvbCBCdWZmZXJzCi1TaG9ydCBOYW1lOiBwcm90b2J1ZgotVVJMOiBodHRwczov
L2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmCi1MaWNlbnNlOiBCU0QKLUxpY2Vuc2UgRmlsZTog
TElDRU5TRQotVmVyc2lvbjogMy4wLjAtYmV0YS0zCi1SZXZpc2lvbjogMzQ3MGI2ODk1YWE2NTli
NzU1OWVkNjc4ZTAyOWE1MzM4ZTUzNWYxNAotU2VjdXJpdHkgQ3JpdGljYWw6IHllcwotCi1TdGVw
cyB1c2VkIHRvIGNyZWF0ZSB0aGUgY3VycmVudCB2ZXJzaW9uOgotMS4gUHVsbCB0aGUgcmVsZWFz
ZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWYvcmVsZWFzZXMKLTIuIEFk
ZCBidWlsZCBmaWxlcyAoQlVJTEQuZ24sIHByb3RvX2xpYnJhcnkuZ25pLCBwcm90b2J1Zi5neXAs
Ci0gICBwcm90b2J1Zl9saXRlLmd5cGksIHByb3RvYnVmX25hY2wuZ3lwKS4KLQotICAgQmUgc3Vy
ZSB0byB1cGRhdGUgdGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzLCBhcyBhZGRpdGlvbmFsIC5jYyBm
aWxlcyBhbmQKLSAgIGhlYWRlcnMgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkIC0tIHlvdSBuZWVkIHRv
IGZpbmQgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZSBvZgotICAgaW5jbHVkZSBmaWxlcyByZXF1aXJl
ZCBieSB0YXJnZXRzLgotCi0gICBPdGhlciB0aGluZ3MgdG8gY2FyZSBhYm91dCBhcmUgZGVmaW5l
cyByZXF1aXJlZCBieSBwcm90b2J1ZiBvbiB2YXJpb3VzCi0gICBwbGF0Zm9ybXMsIHdhcm5pbmdz
IGdlbmVyYXRlZCBieSBjb21waWxlcnMsIGFuZCBuZXcgZGVwZW5kZW5jaWVzIGludHJvZHVjZWQu
Ci0zLiBHZXQgb3Blbi1zb3VyY2UgbGlicmFyeSBzaXgucHkgZnJvbSBodHRwczovL3B5cGkucHl0
aG9uLm9yZy9weXBpL3NpeC8gYW5kIGFkZAotICAgaXQgdG8gcHJvdG9idWYvdGhpcmRfcGFydHkv
c2l4L3NpeC5weS4KLTQuIEFwcGx5IHBhdGNoZXMgaW4gcGF0Y2hlcy8gKHNlZSB0aGUgZGVzY3Jp
cHRpb24gYmVsb3cpOgotCi0gICAkIGZvciBwYXRjaCBpbiBwYXRjaGVzLyo7IGRvIHBhdGNoIC1z
IC1wMSA8ICRwYXRjaDsgZG9uZQotCi0gICBGb3IgZnV0dXJlIHJlbGVhc2VzLCBpdCB3aWxsIGJl
IHdvcnRoIGxvb2tpbmcgaW50byB3aGljaCBwYXRjaGVzIHN0aWxsIG5lZWQKLSAgIHRvIGJlIGFw
cGxpZWQuCi01LiBHZW5lcmF0ZSBkZXNjcmlwdG9yX3BiMi5weSB1c2luZyBzb21ldGhpbmcgbGlr
ZSB0aGUgZm9sbG93aW5nIHN0ZXBzLiBNYWtlCi0gICBzdXJlIHlvdSd2ZSByZWdlbmVyYXRlZCB5
b3VyIGJ1aWxkZmlsZXMgYW5kIHdpbGwgYnVpbGQgcHJvdG9jIGZyb20gdGhlCi0gICBuZXdseS1t
b2RpZmllZCBzb3VyY2VzIGFib3ZlLgotCi0gICAkIGNkICRTUkNfRElSCi0gICAkIG5pbmphIC1D
IG91dC9EZWJ1ZyBwcm90b2MKLSAgICQgY2QgdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjCi0gICAk
IC4uLy4uLy4uL291dC9EZWJ1Zy9wcm90b2MgLS1weXRob25fb3V0PS4uL3B5dGhvbiBnb29nbGUv
cHJvdG9idWYvZGVzY3JpcHRvci5wcm90bwotCi02LiBBZGQgYW4gX19pbml0X18ucHkgdG8gcHJv
dG9idWYvIHRoYXQgYWRkcyB0aGlyZF9wYXJ0eS9zaXgvIHRvIFB5dGhvbiBwYXRoLgotNy4gVXBk
YXRlIFJFQURNRS5jaHJvbWl1bS4KLQotRGVzY3JpcHRpb24gb2YgdGhlIHBhdGNoZXM6Ci0KLS0g
MDAwMy1yZW1vdmUtc3RhdGljLWluaXRpYWxpemVycy5wYXRjaAotCi0gIFRoaXMgcGF0Y2ggcmVt
b3ZlcyBhbGwgc3RhdGljIGluaXRpYWxpemVycyBmcm9tIENocm9taXVtLiBUaGUgY2hhbmdlIGlu
IFN0YXR1cwotICBjbGFzcyBpcyBub3QgY29tcGxldGVseSBjb21wYXRpYmxlIHdpdGggdXBzdHJl
YW0sIGJ1dCBpdCdzIGNvbXBhdGlibGUgZW5vdWdoCi0gIHRvIHdvcmsgaW4gQ2hyb21pdW0sIHdo
aWNoIGRvZXNuJ3QgdXNlIHRoaXMgZnVuY3Rpb25hbGl0eSB5ZXQuIFRoZSB3b3JrIG9uCi0gIHVw
c3RyZWFtaW5nIHRoZSByZW1vdmFsIG9mIHN0YXRpYyBpbml0aWFsaXplcnMgaXMgaW4gcHJvZ3Jl
c3M6Ci0gIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWYvaXNzdWVzLzE0MDQKLQot
LSAwMDA0LWZpeC1pbnRlZ2VyLXR5cGVzLWFuZC1zaGFyZWQtbGlicmFyeS1leHBvcnRzLnBhdGNo
Ci0KLSAgVGhpcyBwYXRjaCBtYWtlcyBwcm90b2J1ZiBpbnQ2NCB0byBiZSBpbnQ2NF90IChhcyBv
cHBvc2VkIHRvIGxvbmcgbG9uZyBpbgotICB1cHN0cmVhbSksIGFuZCBzaW1pbGFybHkgZm9yIG90
aGVyIGludGVnZXIgdHlwZXMuIEl0IGFsc28gYWxsb3dzIGV4cG9ydGluZwotICBwcm90b2J1ZiBz
eW1ib2xzIGluIExpbnV4IC5zbyBsaWJyYXJpZXMsIHNvIHRoYXQgcHJvdG9idWYgY2FuIGJlIGJ1
aWx0IGFzIGEKLSAgY29tcG9uZW50IChzZWUgaHR0cDovL2NycmV2LmNvbS8xNzk4MDYpLgotCi0t
IDAwMDUtZml4LWluY2x1ZGUtanMtZ2VuZXJhdG9yLnByb3RvYnVmCi0KLSAgRHVyaW5nIG1lcmdl
IHdpdGggaW50ZXJuYWwgYnJhbmNoLCB0aGUgPD4gaW4gb25lIG9mIHRoZSAjaW5jbHVkZXMgd2Vy
ZQotICBhY2NpZGVudGFsbHkgcmVwbGFjZWQgd2l0aCAiIiwgd2hpY2ggcmVzdWx0cyBpbiBhIGZh
aWx1cmUgaW4gY2hlY2tkZXBzLgotCi0gIEZpeGVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29n
bGUvcHJvdG9idWYvcHVsbC8xNTQ3LgotCi0tIDAwMDctdW5pbmxpbmVfZ29vZ2xlb25jZS5wYXRj
aAotLSAwMDA4LXVuaW5saW5lX2dldF9lbXB0eV9zdHJpbmcucGF0Y2gKLS0gMDAwOS11bmlubGlu
ZS1hcmVuYXN0cmluZy5wYXRjaAotLSAwMDEwLXVuaW5saW5lLWdlbmVyYXRlZC1jb2RlLnBhdGNo
Ci0KLSAgVGhlc2UgcGF0Y2hlcyB1bmlubGluZSBzb21lIGZ1bmN0aW9ucywgcmVzdWx0aW5nIGlu
IGEgc2lnbmlmaWNhbnQgcmVkdWN0aW9uCi0gIChzb21ld2hlcmUgYmV0d2VlbiA1MDAgS0IgYW5k
IDEgTUIpIG9mIGJpbmFyeSBzaXplLgotCi0tIDAwMTEtbGlicHJvdG9idWZfZXhwb3J0LnBhdGNo
Ci0KLSAgRHVyaW5nIG1lcmdlIHdpdGggaW50ZXJuYWwgYnJhbmNoLCB0aGUgZGxsIGV4cG9ydCBh
dHRyaWJ1dGUgd2FzIGFjY2lkZW50YWxseQotICByZW1vdmVkIGluIEMrKzExIG1vZGUuCi0KLSAg
Rml4ZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi9wdWxsLzE1NDkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvUkVBRE1FLm1kIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9SRUFETUUubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGJhOWM1ODlkMmJmZGEyYjMzMzZlODhhNmMzMmMzYjZlNTNlNmM1ZGMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9SRUFETUUubWQKKysrIC9kZXYvbnVs
bApAQCAtMSw3NyArMCwwIEBACi1Qcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotCi1bIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9nb29n
bGUvcHJvdG9idWYuc3ZnP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL3RyYXZpcy1jaS5vcmcvZ29v
Z2xlL3Byb3RvYnVmKSBbIVtCdWlsZCBzdGF0dXNdKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL2Fw
aS9wcm9qZWN0cy9zdGF0dXMvNzNjdGVlNnVhNHcycnVpbj9zdmc9dHJ1ZSldKGh0dHBzOi8vY2ku
YXBwdmV5b3IuY29tL3Byb2plY3QvcHJvdG9idWYvcHJvdG9idWYpCi0KLUNvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuCi0KLWh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0KLU92ZXJ2aWV3Ci0tLS0tLS0tLQotCi1Qcm90b2NvbCBCdWZmZXJzIChhLmsuYS4s
IHByb3RvYnVmKSBhcmUgR29vZ2xlJ3MgbGFuZ3VhZ2UtbmV1dHJhbCwKLXBsYXRmb3JtLW5ldXRy
YWwsIGV4dGVuc2libGUgbWVjaGFuaXNtIGZvciBzZXJpYWxpemluZyBzdHJ1Y3R1cmVkIGRhdGEu
IFlvdQotY2FuIGZpbmQgW3Byb3RvYnVmJ3MgZG9jdW1lbnRhdGlvbiBvbiB0aGUgR29vZ2xlIERl
dmVsb3BlcnMgc2l0ZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8pLgotCi1UaGlzIFJFQURNRSBmaWxlIGNvbnRhaW5zIHByb3RvYnVmIGluc3RhbGxhdGlv
biBpbnN0cnVjdGlvbnMuIFRvIGluc3RhbGwKLXByb3RvYnVmLCB5b3UgbmVlZCB0byBpbnN0YWxs
IHRoZSBwcm90b2NvbCBjb21waWxlciAodXNlZCB0byBjb21waWxlIC5wcm90bwotZmlsZXMpIGFu
ZCB0aGUgcHJvdG9idWYgcnVudGltZSBmb3IgeW91ciBjaG9zZW4gcHJvZ3JhbW1pbmcgbGFuZ3Vh
Z2UuCi0KLVByb3RvY29sIENvbXBpbGVyIEluc3RhbGxhdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLVRoZSBwcm90b2NvbCBjb21waWxlciBpcyB3cml0dGVuIGluIEMrKy4g
SWYgeW91IGFyZSB1c2luZyBDKyssIHBsZWFzZSBmb2xsb3cKLXRoZSBbQysrIEluc3RhbGxhdGlv
biBJbnN0cnVjdGlvbnNdKHNyYy9SRUFETUUubWQpIHRvIGluc3RhbGwgcHJvdG9jIGFsb25nCi13
aXRoIHRoZSBDKysgcnVudGltZS4KLQotRm9yIG5vbi1DKysgdXNlcnMsIHRoZSBzaW1wbGVzdCB3
YXkgdG8gaW5zdGFsbCB0aGUgcHJvdG9jb2wgY29tcGlsZXIgaXMgdG8KLWRvd25sb2FkIGEgcHJl
LWJ1aWx0IGJpbmFyeSBmcm9tIG91ciByZWxlYXNlIHBhZ2U6Ci0KLSAgW2h0dHBzOi8vZ2l0aHVi
LmNvbS9nb29nbGUvcHJvdG9idWYvcmVsZWFzZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUv
cHJvdG9idWYvcmVsZWFzZXMpCi0KLUluIHRoZSBkb3dubG9hZHMgc2VjdGlvbiBvZiBlYWNoIHJl
bGVhc2UsIHlvdSBjYW4gZmluZCBwcmUtYnVpbHQgYmluYXJpZXMgaW4KLXppcCBwYWNrYWdlczog
cHJvdG9jLSRWRVJTSU9OLSRQTEFURk9STS56aXAuIEl0IGNvbnRhaW5zIHRoZSBwcm90b2MgYmlu
YXJ5Ci1hcyB3ZWxsIGFzIGEgc2V0IG9mIHN0YW5kYXJkIC5wcm90byBmaWxlcyBkaXN0cmlidXRl
ZCBhbG9uZyB3aXRoIHByb3RvYnVmLgotCi1JZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGFuIG9sZCB2
ZXJzaW9uIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgcmVsZWFzZQotcGFnZSwgY2hlY2sg
b3V0IHRoZSBtYXZlbiByZXBvIGhlcmU6Ci0KLSAgW2h0dHA6Ly9yZXBvMS5tYXZlbi5vcmcvbWF2
ZW4yL2NvbS9nb29nbGUvcHJvdG9idWYvcHJvdG9jL10oaHR0cDovL3JlcG8xLm1hdmVuLm9yZy9t
YXZlbjIvY29tL2dvb2dsZS9wcm90b2J1Zi9wcm90b2MvKQotCi1UaGVzZSBwcmUtYnVpbHQgYmlu
YXJpZXMgYXJlIG9ubHkgcHJvdmlkZWQgZm9yIHJlbGVhc2VkIHZlcnNpb25zLiBJZiB5b3Ugd2Fu
dAotdG8gdXNlIHRoZSBnaXRodWIgbWFzdGVyIHZlcnNpb24gYXQgSEVBRCwgb3IgeW91IG5lZWQg
dG8gbW9kaWZ5IHByb3RvYnVmIGNvZGUsCi1vciB5b3UgYXJlIHVzaW5nIEMrKywgaXQncyByZWNv
bW1lbmRlZCB0byBidWlsZCB5b3VyIG93biBwcm90b2MgYmluYXJ5IGZyb20KLXNvdXJjZS4KLQot
SWYgeW91IHdvdWxkIGxpa2UgdG8gYnVpbGQgcHJvdG9jIGJpbmFyeSBmcm9tIHNvdXJjZSwgc2Vl
IHRoZSBbQysrIEluc3RhbGxhdGlvbgotSW5zdHJ1Y3Rpb25zXShzcmMvUkVBRE1FLm1kKS4KLQot
UHJvdG9idWYgUnVudGltZSBJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLVByb3RvYnVmIHN1cHBvcnRzIHNldmVyYWwgZGlmZmVyZW50IHByb2dyYW1taW5nIGxh
bmd1YWdlcy4gRm9yIGVhY2ggcHJvZ3JhbW1pbmcKLWxhbmd1YWdlLCB5b3UgY2FuIGZpbmQgaW5z
dHJ1Y3Rpb25zIGluIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBkaXJlY3RvcnkgYWJvdXQKLWhv
dyB0byBpbnN0YWxsIHByb3RvYnVmIHJ1bnRpbWUgZm9yIHRoYXQgc3BlY2lmaWMgbGFuZ3VhZ2U6
Ci0KLXwgTGFuZ3VhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU291cmNlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci18IEMrKyAoaW5jbHVkZSBDKysgcnVudGltZSBh
bmQgcHJvdG9jKSB8IFtzcmNdKHNyYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKLXwgSmF2YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2ph
dmFdKGphdmEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBQ
eXRob24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbcHl0aG9uXShweXRob24pICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IE9iamVjdGl2ZS1DICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IFtvYmplY3RpdmVjXShvYmplY3RpdmVjKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKLXwgQyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgW2NzaGFycF0oY3NoYXJwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAotfCBKYXZhTmFubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbamF2YW5hbm9d
KGphdmFuYW5vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IEphdmFTY3Jp
cHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtqc10oanMpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgUnVieSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgW3J1YnldKHJ1YnkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAotfCBHbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBb
Z29sYW5nL3Byb3RvYnVmXShodHRwczovL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmKSB8Ci18
IFBIUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRCRCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLQotCi1Vc2FnZQotLS0tLS0K
LQotVGhlIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gZm9yIFByb3RvY29sIEJ1ZmZlcnMgaXMgYXZh
aWxhYmxlIHZpYSB0aGUKLXdlYiBhdDoKLQotICAgIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL1dPUktTUEFDRSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvV09SS1NQQUNFCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjVkYzgxOTg0NTg1ZWVmNzllZDgyN2VkMmE1
MDNmOWUzOTJlNjMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvV09SS1NQQUNFCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotbmV3X2h0dHBfYXJj
aGl2ZSgKLSAgICBuYW1lID0gImdtb2NrX2FyY2hpdmUiLAotICAgIHVybCA9ICJodHRwczovL2dv
b2dsZW1vY2suZ29vZ2xlY29kZS5jb20vZmlsZXMvZ21vY2stMS43LjAuemlwIiwKLSAgICBzaGEy
NTYgPSAiMjZmY2JiNTkyNWI3NGFkNWZjOGMyNmIwNDk1ZGZjOTYzNTNmNGQ1NTM0OTJlYjk3ZTg1
YThhNmQyZjQzMDk1YiIsCi0gICAgYnVpbGRfZmlsZSA9ICJnbW9jay5CVUlMRCIsCi0pCi0KLW5l
d19odHRwX2FyY2hpdmUoCi0gICAgbmFtZSA9ICJzaXhfYXJjaGl2ZSIsCi0gICAgdXJsID0gImh0
dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9zL3NpeC9zaXgtMS4xMC4wLnRh
ci5neiNtZDU9MzRlZWQ1MDc1NDgxMTdiMmFiNTIzYWIxNGIyZjhiNTUiLAotICAgIHNoYTI1NiA9
ICIxMDVmOGQ2ODYxNmY4MjQ4ZTI0YmYwZTkzNzJlZjA0ZDNjYzEwMTA0ZjE5ODBmNTRkNTdiMmNl
NzNhNWFkNTZhIiwKLSAgICBidWlsZF9maWxlID0gInNpeC5CVUlMRCIsCi0pCi0KLWJpbmQoCi0g
ICAgbmFtZSA9ICJweXRob25faGVhZGVycyIsCi0gICAgYWN0dWFsID0gIi8vdXRpbC9weXRob246
cHl0aG9uX2hlYWRlcnMiLAotKQotCi1iaW5kKAotICAgIG5hbWUgPSAiZ3Rlc3QiLAotICAgIGFj
dHVhbCA9ICJAZ21vY2tfYXJjaGl2ZS8vOmd0ZXN0IiwKLSkKLQotYmluZCgKLSAgICBuYW1lID0g
Imd0ZXN0X21haW4iLAotICAgIGFjdHVhbCA9ICJAZ21vY2tfYXJjaGl2ZS8vOmd0ZXN0X21haW4i
LAotKQotCi1iaW5kKAotICAgIG5hbWUgPSAic2l4IiwKLSAgICBhY3R1YWwgPSAiQHNpeF9hcmNo
aXZlLy86c2l4IiwKLSkKLQotbWF2ZW5famFyKAotICBuYW1lID0gImd1YXZhX21hdmVuIiwKLSAg
YXJ0aWZhY3QgPSAiY29tLmdvb2dsZS5ndWF2YTpndWF2YToxOC4wIiwKLSkKLQotYmluZCgKLSAg
ICBuYW1lID0gImd1YXZhIiwKLSAgICBhY3R1YWwgPSAiQGd1YXZhX21hdmVuLy9qYXIiLAotKQot
Ci1tYXZlbl9qYXIoCi0gIG5hbWUgPSAiZ3Nvbl9tYXZlbiIsCi0gIGFydGlmYWN0ID0gImNvbS5n
b29nbGUuY29kZS5nc29uOmdzb246Mi4zIiwKLSkKLQotYmluZCgKLSAgICBuYW1lID0gImdzb24i
LAotICAgIGFjdHVhbCA9ICJAZ3Nvbl9tYXZlbi8vamFyIiwKLSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvX19pbml0
X18ucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWUxY2Yy
ZDIwYjBlOWI5ZGIzN2JhZTU3N2VmYTk1MDAwZTViMzNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2
ICswLDAgQEAKLWltcG9ydCBzeXMKLWltcG9ydCBvcwotCi1USElTX0RJUiA9IG9zLnBhdGguZGly
bmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQotCi1zeXMucGF0aC5pbnNlcnQoMCwgb3Mu
cGF0aC5qb2luKFRISVNfRElSLCAidGhpcmRfcGFydHkiLCAic2l4IikpCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Fw
cHZleW9yLmJhdCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvYXBwdmV5b3IuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
YTQ2YjkyODkyMTc3YzZhNzFmNWIxMWNhZTFiZTFkY2IxNGY0YzA2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYXBwdmV5b3IuYmF0CisrKyAvZGV2L251bGwK
QEAgLTEsMjkgKzAsMCBAQAotc2V0bG9jYWwKLQotSUYgJWxhbmd1YWdlJT09Y3BwIEdPVE8gYnVp
bGRfY3BwCi1JRiAlbGFuZ3VhZ2UlPT1jc2hhcnAgR09UTyBidWlsZF9jc2hhcnAKLQotZWNobyBV
bnN1cHBvcnRlZCBsYW5ndWFnZSAlbGFuZ3VhZ2UlLiBFeGl0aW5nLgotZ290byA6ZXJyb3IKLQot
OmJ1aWxkX2NwcAotZWNobyBCdWlsZGluZyBDKysKLW1rZGlyIGJ1aWxkX21zdmMKLWNkIGJ1aWxk
X21zdmMKLWNtYWtlIC1HICIlZ2VuZXJhdG9yJSIgLURwcm90b2J1Zl9CVUlMRF9TSEFSRURfTElC
Uz0lQlVJTERfRExMJSAuLi9jbWFrZQotbXNidWlsZCBwcm90b2J1Zi5zbG4gL3A6UGxhdGZvcm09
JXZjcGxhdGZvcm0lIC9sb2dnZXI6IkM6XFByb2dyYW0gRmlsZXNcQXBwVmV5b3JcQnVpbGRBZ2Vu
dFxBcHB2ZXlvci5NU0J1aWxkTG9nZ2VyLmRsbCIgfHwgZ290byBlcnJvcgotY2QgJWNvbmZpZ3Vy
YXRpb24lCi10ZXN0cy5leGUgfHwgZ290byBlcnJvcgotZ290byA6RU9GCi0KLTpidWlsZF9jc2hh
cnAKLWVjaG8gQnVpbGRpbmcgQyMKLWNkIGNzaGFycFxzcmMKLW51Z2V0IHJlc3RvcmUKLW1zYnVp
bGQgR29vZ2xlLlByb3RvYnVmLnNsbiAvcDpQbGF0Zm9ybT0iQW55IENQVSIgL2xvZ2dlcjoiQzpc
UHJvZ3JhbSBGaWxlc1xBcHBWZXlvclxCdWlsZEFnZW50XEFwcHZleW9yLk1TQnVpbGRMb2dnZXIu
ZGxsIiB8fCBnb3RvIGVycm9yCi1udW5pdC1jb25zb2xlIEdvb2dsZS5Qcm90b2J1Zi5UZXN0XGJp
blwlY29uZmlndXJhdGlvbiVcR29vZ2xlLlByb3RvYnVmLlRlc3QuZGxsIHx8IGdvdG8gZXJyb3IK
LWdvdG8gOkVPRgotCi06ZXJyb3IKLWVjaG8gRmFpbGVkIQotRVhJVCAvYiAlRVJST1JMRVZFTCUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvYXBwdmV5b3IueW1sIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9hcHB2ZXlvci55bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGM4NGVjYWUyZjM4MzM0NmEzM2VjOTkxYTYyMTFlYTRhYmJjMGU4Y2EuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9hcHB2ZXlvci55bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIE9ubHkgdGVzdCBvbmUgY29tYmluYXRp
b246ICJWaXN1YWwgU3R1ZGlvIDEyICsgV2luNjQgKyBEZWJ1ZyArIERMTCIuIFdlIGNhbgotIyB0
ZXN0IG1vcmUgY29tYmluYXRpb25zIGJ1dCBBcHBWZXlvciBqdXN0IHRha2VzIHRvbyBsb25nIHRv
IGZpbmlzaCAoZWFjaAotIyBjb21iaW5hdGlvbiB0YWtlcyB+MTVtaW5zKS4KLXBsYXRmb3JtOgot
ICAtIFdpbjY0Ci0KLWNvbmZpZ3VyYXRpb246Ci0gIC0gRGVidWcKLQotZW52aXJvbm1lbnQ6Ci0g
IG1hdHJpeDoKLSAgICAtIGxhbmd1YWdlOiBjcHAKLSAgICAgIEJVSUxEX0RMTDogT04KLQotICAg
IC0gbGFuZ3VhZ2U6IGNzaGFycAotCi1pbnN0YWxsOgotICAtIHBzOiBTdGFydC1GaWxlRG93bmxv
YWQgaHR0cHM6Ly9nb29nbGVtb2NrLmdvb2dsZWNvZGUuY29tL2ZpbGVzL2dtb2NrLTEuNy4wLnpp
cAotICAtIDd6IHggZ21vY2stMS43LjAuemlwCi0gIC0gcmVuYW1lIGdtb2NrLTEuNy4wIGdtb2Nr
Ci0KLWJlZm9yZV9idWlsZDoKLSAgLSBpZiAlcGxhdGZvcm0lPT1XaW4zMiBzZXQgZ2VuZXJhdG9y
PVZpc3VhbCBTdHVkaW8gMTIKLSAgLSBpZiAlcGxhdGZvcm0lPT1XaW42NCBzZXQgZ2VuZXJhdG9y
PVZpc3VhbCBTdHVkaW8gMTIgV2luNjQKLSAgLSBpZiAlcGxhdGZvcm0lPT1XaW4zMiBzZXQgdmNw
bGF0Zm9ybT1XaW4zMgotICAtIGlmICVwbGF0Zm9ybSU9PVdpbjY0IHNldCB2Y3BsYXRmb3JtPXg2
NAotCi1idWlsZF9zY3JpcHQ6Ci0gIC0gQ0FMTCBhcHB2ZXlvci5iYXQKLQotc2tpcF9jb21taXRz
OgotICBtZXNzYWdlOiAvLipcW3NraXAgYXBwdmV5b3JcXS4qLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9hdXRvZ2Vu
LnNoIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9hdXRvZ2VuLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1YjRjMjlmOGMw
NmZhMzhkMDBiMTkzMWE5NzZiYTYyZTZiYmI2ZTRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvYXV0b2dlbi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICsw
LDAgQEAKLSMhL2Jpbi9zaAotCi0jIFJ1biB0aGlzIHNjcmlwdCB0byBnZW5lcmF0ZSB0aGUgY29u
ZmlndXJlIHNjcmlwdCBhbmQgb3RoZXIgZmlsZXMgdGhhdCB3aWxsCi0jIGJlIGluY2x1ZGVkIGlu
IHRoZSBkaXN0cmlidXRpb24uICBUaGVzZSBmaWxlcyBhcmUgbm90IGNoZWNrZWQgaW4gYmVjYXVz
ZSB0aGV5Ci0jIGFyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KLQotc2V0IC1lCi0KLWlmIFsg
ISAteiAiJEAiIF07IHRoZW4KLSAgZm9yIGFyZ3VtZW50IGluICIkQCI7IGRvCi0gICAgY2FzZSAk
YXJndW1lbnQgaW4KLQkgICMgbWFrZSBjdXJsIHNpbGVudAotICAgICAgIi1zIikKLSAgICAgICAg
Y3VybG9wdHM9Ii1zIgotICAgICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotZmkKLQotCi0jIENo
ZWNrIHRoYXQgd2UncmUgYmVpbmcgcnVuIGZyb20gdGhlIHJpZ2h0IGRpcmVjdG9yeS4KLWlmIHRl
c3QgISAtZiBzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oOyB0aGVuCi0gIGNhdCA+
JjIgPDwgX19FT0ZfXwotQ291bGQgbm90IGZpbmQgc291cmNlIGNvZGUuICBNYWtlIHN1cmUgeW91
IGFyZSBydW5uaW5nIHRoaXMgc2NyaXB0IGZyb20gdGhlCi1yb290IG9mIHRoZSBkaXN0cmlidXRp
b24gdHJlZS4KLV9fRU9GX18KLSAgZXhpdCAxCi1maQotCi0jIENoZWNrIHRoYXQgZ21vY2sgaXMg
cHJlc2VudC4gIFVzdWFsbHkgaXQgaXMgYWxyZWFkeSB0aGVyZSBzaW5jZSB0aGUKLSMgZGlyZWN0
b3J5IGlzIHNldCB1cCBhcyBhbiBTVk4gZXh0ZXJuYWwuCi1pZiB0ZXN0ICEgLWUgZ21vY2s7IHRo
ZW4KLSAgZWNobyAiR29vZ2xlIE1vY2sgbm90IHByZXNlbnQuICBGZXRjaGluZyBnbW9jay0xLjcu
MCBmcm9tIHRoZSB3ZWIuLi4iCi0gIGN1cmwgJGN1cmxvcHRzIC1PIGh0dHBzOi8vZ29vZ2xlbW9j
ay5nb29nbGVjb2RlLmNvbS9maWxlcy9nbW9jay0xLjcuMC56aXAKLSAgdW56aXAgLXEgZ21vY2st
MS43LjAuemlwCi0gIHJtIGdtb2NrLTEuNy4wLnppcAotICBtdiBnbW9jay0xLjcuMCBnbW9jawot
ZmkKLQotc2V0IC1leAotCi0jIFRPRE8oa2VudG9uKTogIFJlbW92ZSB0aGUgIixuby1vYnNvbGV0
ZSIgcGFydCBhbmQgZml4IHRoZSByZXN1bHRpbmcgd2FybmluZ3MuCi1hdXRvcmVjb25mIC1mIC1p
IC1XYWxsLG5vLW9ic29sZXRlCi0KLXJtIC1yZiBhdXRvbTR0ZS5jYWNoZSBjb25maWcuaC5pbn4K
LWV4aXQgMApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9iZW5jaG1hcmtzL01ha2VmaWxlLmFtIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9iZW5jaG1hcmtzL01h
a2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzMwYWZlNTc2NDQzZmQ0
ZjczMDNiZjBhMTMwYTllMDQxYjkzNTBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0x
LDY5ICswLDAgQEAKLQotYmVuY2htYXJrc19wcm90b2NfaW5wdXRzID0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBiZW5jaG1hcmtzLnByb3RvICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBiZW5jaG1hcmtfbWVzc2FnZXNfcHJv
dG8zLnByb3RvCi0KLWJlbmNobWFya3NfcHJvdG9jX2lucHV0c19wcm90bzIgPSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgYmVuY2htYXJrX21lc3NhZ2VzX3Byb3RvMi5wcm90bwot
Ci1iZW5jaG1hcmtzX3Byb3RvY19vdXRwdXRzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGJlbmNobWFya3MucGIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGJlbmNobWFya3MucGIuaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGJlbmNobWFya19tZXNzYWdlc19wcm90bzMu
cGIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGJlbmNobWFya19tZXNzYWdl
c19wcm90bzMucGIuaAotCi1iZW5jaG1hcmtzX3Byb3RvY19vdXRwdXRzX3Byb3RvMiA9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGJlbmNobWFya19tZXNzYWdlc19wcm90bzIucGIu
Y2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGJlbmNobWFya19tZXNzYWdlc19w
cm90bzIucGIuaAotCi1iaW5fUFJPR1JBTVMgPSBnZW5lcmF0ZS1kYXRhc2V0cwotCi1nZW5lcmF0
ZV9kYXRhc2V0c19MREFERCA9ICQodG9wX3NyY2Rpcikvc3JjL2xpYnByb3RvYnVmLmxhCi1nZW5l
cmF0ZV9kYXRhc2V0c19TT1VSQ0VTID0gZ2VuZXJhdGVfZGF0YXNldHMuY2MKLWdlbmVyYXRlX2Rh
dGFzZXRzX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL3NyYyAtSSQoc3JjZGlyKQotbm9kaXN0
X2dlbmVyYXRlX2RhdGFzZXRzX1NPVVJDRVMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAkKGJlbmNobWFya3NfcHJvdG9jX291dHB1dHMpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAkKGJlbmNobWFya3NfcHJvdG9jX291dHB1dHNfcHJvdG8yKQotCi0jIEV4
cGxpY2l0IGRlcHMgYmVjYXVzZSBCVUlMVF9TT1VSQ0VTIGFyZSBvbmx5IGRvbmUgYmVmb3JlIGEg
Im1ha2UgYWxsL2NoZWNrIgotIyBzbyBhIGRpcmVjdCAibWFrZSB0ZXN0X2NwcCIgY291bGQgZmFp
bCBpZiBwYXJhbGxlbCBlbm91Z2guCi0jIFNlZTogaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2Fy
ZS9hdXRvbWFrZS9tYW51YWwvaHRtbF9ub2RlL0J1aWx0LVNvdXJjZXMtRXhhbXBsZS5odG1sI1Jl
Y29yZGluZy1EZXBlbmRlbmNpZXMtbWFudWFsbHkKLWdlbmVyYXRlX2RhdGFzZXRzLWdlbmVyYXRl
X2RhdGFzZXRzLiQoT0JKRVhUKTogYmVuY2htYXJrcy5wYi5oCi0KLSQoYmVuY2htYXJrc19wcm90
b2Nfb3V0cHV0cyk6IHByb3RvY19taWRkbGVtYW4KLSQoYmVuY2htYXJrc19wcm90b2Nfb3V0cHV0
c19wcm90bzIpOiBwcm90b2NfbWlkZGxlbWFuMgotCi1DTEVBTkZJTEVTID0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICQoYmVuY2htYXJrc19w
cm90b2Nfb3V0cHV0cykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICQoYmVu
Y2htYXJrc19wcm90b2Nfb3V0cHV0c19wcm90bzIpICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIHByb3RvY19taWRkbGVtYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIHByb3RvY19taWRkbGVtYW4yICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGRhdGFzZXQuKgotCi1NQUlOVEFJTkVSQ0xFQU5GSUxFUyA9
ICAgXAotICBNYWtlZmlsZS5pbgotCi1pZiBVU0VfRVhURVJOQUxfUFJPVE9DCi0KLXByb3RvY19t
aWRkbGVtYW46ICQoYmVuY2htYXJrc19wcm90b2NfaW5wdXRzKQotCSQoUFJPVE9DKSAtSSQoc3Jj
ZGlyKSAtSSQodG9wX3NyY2RpcikgLS1jcHBfb3V0PS4gJChiZW5jaG1hcmtzX3Byb3RvY19pbnB1
dHMpCi0JdG91Y2ggcHJvdG9jX21pZGRsZW1hbgotCi1wcm90b2NfbWlkZGxlbWFuMjogJChiZW5j
aG1hcmtzX3Byb3RvY19pbnB1dHNfcHJvdG8yKQotCSQoUFJPVE9DKSAtSSQoc3JjZGlyKSAtSSQo
dG9wX3NyY2RpcikgLS1jcHBfb3V0PS4gJChiZW5jaG1hcmtzX3Byb3RvY19pbnB1dHNfcHJvdG8y
KQotCXRvdWNoIHByb3RvY19taWRkbGVtYW4yCi0KLWVsc2UKLQotIyBXZSBoYXZlIHRvIGNkIHRv
ICQoc3JjZGlyKSBiZWZvcmUgZXhlY3V0aW5nIHByb3RvYyBiZWNhdXNlICQocHJvdG9jX2lucHV0
cykgaXMKLSMgcmVsYXRpdmUgdG8gc3JjZGlyLCB3aGljaCBtYXkgbm90IGJlIHRoZSBzYW1lIGFz
IHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGVuCi0jIGJ1aWxkaW5nIG91dC1vZi10cmVlLgotcHJv
dG9jX21pZGRsZW1hbjogJCh0b3Bfc3JjZGlyKS9zcmMvcHJvdG9jJChFWEVFWFQpICQoYmVuY2ht
YXJrc19wcm90b2NfaW5wdXRzKSAkKHdlbGxfa25vd25fdHlwZV9wcm90b2NfaW5wdXRzKQotCW9s
ZHB3ZD1gcHdkYCAmJiAoIGNkICQoc3JjZGlyKSAmJiAkJG9sZHB3ZC8uLi9zcmMvcHJvdG9jJChF
WEVFWFQpIC1JLiAtSSQodG9wX3NyY2Rpcikvc3JjIC0tY3BwX291dD0kJG9sZHB3ZCAkKGJlbmNo
bWFya3NfcHJvdG9jX2lucHV0cykgKQotCXRvdWNoIHByb3RvY19taWRkbGVtYW4KLQotcHJvdG9j
X21pZGRsZW1hbjI6ICQodG9wX3NyY2Rpcikvc3JjL3Byb3RvYyQoRVhFRVhUKSAkKGJlbmNobWFy
a3NfcHJvdG9jX2lucHV0c19wcm90bzIpICQod2VsbF9rbm93bl90eXBlX3Byb3RvY19pbnB1dHMp
Ci0Jb2xkcHdkPWBwd2RgICYmICggY2QgJChzcmNkaXIpICYmICQkb2xkcHdkLy4uL3NyYy9wcm90
b2MkKEVYRUVYVCkgLUkuIC1JJCh0b3Bfc3JjZGlyKS9zcmMgLS1jcHBfb3V0PSQkb2xkcHdkICQo
YmVuY2htYXJrc19wcm90b2NfaW5wdXRzX3Byb3RvMikgKQotCXRvdWNoIHByb3RvY19taWRkbGVt
YW4KLQotZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9Qcm90b0JlbmNoLmphdmEgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2JlbmNo
bWFya3MvUHJvdG9CZW5jaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmQ2
MmZlYjY3YTNmNmI1NzFmOWI1OWQ3MDBmMmRhMTY1NTM4MjFmLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9Qcm90b0JlbmNoLmphdmEKKysr
IC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2NvbGJ1ZmZlcnM7Ci0KLWltcG9ydCBq
YXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0
cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRw
dXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQg
amF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJhbmRvbUFjY2Vzc0ZpbGU7Ci1p
bXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90
b2J1Zi5CeXRlU3RyaW5nOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRJbnB1dFN0
cmVhbTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkNvZGVkT3V0cHV0U3RyZWFtOwotaW1w
b3J0IGNvbS5nb29nbGUucHJvdG9idWYuTWVzc2FnZTsKLQotcHVibGljIGNsYXNzIFByb3RvQmVu
Y2ggewotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNSU5fU0FNUExFX1RJTUVfTVMg
PSAyICogMTAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBUQVJHRVRfVElNRV9NUyA9
IDMwICogMTAwMDsKLQotICBwcml2YXRlIFByb3RvQmVuY2goKSB7Ci0gICAgLy8gUHJldmVudCBp
bnN0YW50aWF0aW9uCi0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1td
IGFyZ3MpIHsKLSAgICBpZiAoYXJncy5sZW5ndGggPCAyIHx8IChhcmdzLmxlbmd0aCAlIDIpICE9
IDApIHsKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IFByb3RvQmVuY2ggPGRlc2Ny
aXB0b3IgdHlwZSBuYW1lPiA8aW5wdXQgZGF0YT4iKTsKLSAgICAgIFN5c3RlbS5lcnIucHJpbnRs
bigiVGhlIGRlc2NyaXB0b3IgdHlwZSBuYW1lIGlzIHRoZSBmdWxseS1xdWFsaWZpZWQgbWVzc2Fn
ZSBuYW1lLCIpOwotICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJlLmcuIGNvbS5nb29nbGUucHJv
dG9jb2xidWZmZXJzLmJlbmNobWFyay5NZXNzYWdlMSIpOwotICAgICAgU3lzdGVtLmVyci5wcmlu
dGxuKCIoWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIHBhaXJzIG9mIGRlc2NyaXB0b3IgdHlwZSBu
YW1lIGFuZCBpbnB1dCBkYXRhLikiKTsKLSAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgIH0KLSAg
ICBib29sZWFuIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5s
ZW5ndGg7IGkgKz0gMikgewotICAgICAgc3VjY2VzcyAmPSBydW5UZXN0KGFyZ3NbaV0sIGFyZ3Nb
aSArIDFdKTsKLSAgICB9Ci0gICAgU3lzdGVtLmV4aXQoc3VjY2VzcyA/IDAgOiAxKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBSdW5zIGEgc2luZ2xlIHRlc3QuIEVycm9yIG1lc3NhZ2VzIGFyZSBkaXNw
bGF5ZWQgdG8gc3RkZXJyLCBhbmQgdGhlIHJldHVybiB2YWx1ZQotICAgKiBpbmRpY2F0ZXMgZ2Vu
ZXJhbCBzdWNjZXNzL2ZhaWx1cmUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVu
VGVzdChTdHJpbmcgdHlwZSwgU3RyaW5nIGZpbGUpIHsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4o
IkJlbmNobWFya2luZyAiICsgdHlwZSArICIgd2l0aCBmaWxlICIgKyBmaWxlKTsKLSAgICBmaW5h
bCBNZXNzYWdlIGRlZmF1bHRNZXNzYWdlOwotICAgIHRyeSB7Ci0gICAgICBDbGFzczw/PiBjbGF6
eiA9IENsYXNzLmZvck5hbWUodHlwZSk7Ci0gICAgICBNZXRob2QgbWV0aG9kID0gY2xhenouZ2V0
RGVjbGFyZWRNZXRob2QoImdldERlZmF1bHRJbnN0YW5jZSIpOwotICAgICAgZGVmYXVsdE1lc3Nh
Z2UgPSAoTWVzc2FnZSkgbWV0aG9kLmludm9rZShudWxsKTsKLSAgICB9IGNhdGNoIChFeGNlcHRp
b24gZSkgewotICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGUgc2FtZSB0aGluZyB3aXRoIGFsbCBl
eGNlcHRpb25zLiBOb3QgZ2VuZXJhbGx5IG5pY2UsCi0gICAgICAvLyBidXQgdGhpcyBpcyBzbGln
aHRseSBkaWZmZXJlbnQuCi0gICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuYWJsZSB0byBnZXQg
ZGVmYXVsdCBtZXNzYWdlIGZvciAiICsgdHlwZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIAotICAgIHRyeSB7Ci0gICAgICBmaW5hbCBieXRlW10gaW5wdXREYXRhID0gcmVhZEFs
bEJ5dGVzKGZpbGUpOwotICAgICAgZmluYWwgQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJl
YW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oaW5wdXREYXRhKTsKLSAgICAgIGZpbmFsIEJ5
dGVTdHJpbmcgaW5wdXRTdHJpbmcgPSBCeXRlU3RyaW5nLmNvcHlGcm9tKGlucHV0RGF0YSk7Ci0g
ICAgICBmaW5hbCBNZXNzYWdlIHNhbXBsZU1lc3NhZ2UgPSBkZWZhdWx0TWVzc2FnZS5uZXdCdWls
ZGVyRm9yVHlwZSgpLm1lcmdlRnJvbShpbnB1dFN0cmluZykuYnVpbGQoKTsKLSAgICAgIEZpbGVP
dXRwdXRTdHJlYW0gZGV2TnVsbFRlbXAgPSBudWxsOwotICAgICAgQ29kZWRPdXRwdXRTdHJlYW0g
cmV1c2VEZXZOdWxsVGVtcCA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICBkZXZOdWxsVGVt
cCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCIvZGV2L251bGwiKTsKLSAgICAgICAgcmV1c2VEZXZO
dWxsVGVtcCA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNlKGRldk51bGxUZW1wKTsKLSAg
ICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIGlnbm9y
ZTogdGhpcyBpcyBwcm9iYWJseSBXaW5kb3dzLCB3aGVyZSAvZGV2L251bGwgZG9lcyBub3QgZXhp
c3QKLSAgICAgIH0KLSAgICAgIGZpbmFsIEZpbGVPdXRwdXRTdHJlYW0gZGV2TnVsbCA9IGRldk51
bGxUZW1wOwotICAgICAgZmluYWwgQ29kZWRPdXRwdXRTdHJlYW0gcmV1c2VEZXZOdWxsID0gcmV1
c2VEZXZOdWxsVGVtcDsKLSAgICAgIGJlbmNobWFyaygiU2VyaWFsaXplIHRvIGJ5dGUgc3RyaW5n
IiwgaW5wdXREYXRhLmxlbmd0aCwgbmV3IEFjdGlvbigpIHsKLSAgICAgICAgcHVibGljIHZvaWQg
ZXhlY3V0ZSgpIHsgc2FtcGxlTWVzc2FnZS50b0J5dGVTdHJpbmcoKTsgfQotICAgICAgfSk7ICAg
ICAgCi0gICAgICBiZW5jaG1hcmsoIlNlcmlhbGl6ZSB0byBieXRlIGFycmF5IiwgaW5wdXREYXRh
Lmxlbmd0aCwgbmV3IEFjdGlvbigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsg
c2FtcGxlTWVzc2FnZS50b0J5dGVBcnJheSgpOyB9Ci0gICAgICB9KTsKLSAgICAgIGJlbmNobWFy
aygiU2VyaWFsaXplIHRvIG1lbW9yeSBzdHJlYW0iLCBpbnB1dERhdGEubGVuZ3RoLCBuZXcgQWN0
aW9uKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgdGhyb3dzIElPRXhjZXB0aW9u
IHsgCi0gICAgICAgICAgc2FtcGxlTWVzc2FnZS53cml0ZVRvKG5ldyBCeXRlQXJyYXlPdXRwdXRT
dHJlYW0oKSk7IAotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGlmIChkZXZOdWxsICE9IG51
bGwpIHsKLSAgICAgICAgYmVuY2htYXJrKCJTZXJpYWxpemUgdG8gL2Rldi9udWxsIHdpdGggRmls
ZU91dHB1dFN0cmVhbSIsIGlucHV0RGF0YS5sZW5ndGgsIG5ldyBBY3Rpb24oKSB7Ci0gICAgICAg
ICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAg
ICBzYW1wbGVNZXNzYWdlLndyaXRlVG8oZGV2TnVsbCk7Ci0gICAgICAgICAgfQotICAgICAgICB9
KTsKLSAgICAgICAgYmVuY2htYXJrKCJTZXJpYWxpemUgdG8gL2Rldi9udWxsIHJldXNpbmcgRmls
ZU91dHB1dFN0cmVhbSIsIGlucHV0RGF0YS5sZW5ndGgsIG5ldyBBY3Rpb24oKSB7Ci0gICAgICAg
ICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAg
ICBzYW1wbGVNZXNzYWdlLndyaXRlVG8ocmV1c2VEZXZOdWxsKTsKLSAgICAgICAgICAgIHJldXNl
RGV2TnVsbC5mbHVzaCgpOyAgLy8gZm9yY2UgdGhlIHdyaXRlIHRvIHRoZSBPdXRwdXRTdHJlYW0K
LSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgICAgYmVuY2htYXJrKCJEZXNl
cmlhbGl6ZSBmcm9tIGJ5dGUgc3RyaW5nIiwgaW5wdXREYXRhLmxlbmd0aCwgbmV3IEFjdGlvbigp
IHsKLSAgICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7IAot
ICAgICAgICAgIGRlZmF1bHRNZXNzYWdlLm5ld0J1aWxkZXJGb3JUeXBlKCkubWVyZ2VGcm9tKGlu
cHV0U3RyaW5nKS5idWlsZCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGJlbmNobWFy
aygiRGVzZXJpYWxpemUgZnJvbSBieXRlIGFycmF5IiwgaW5wdXREYXRhLmxlbmd0aCwgbmV3IEFj
dGlvbigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBJT0V4Y2VwdGlv
biB7IAotICAgICAgICAgIGRlZmF1bHRNZXNzYWdlLm5ld0J1aWxkZXJGb3JUeXBlKCkKLSAgICAg
ICAgICAgIC5tZXJnZUZyb20oQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShpbnB1dERhdGEp
KS5idWlsZCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGJlbmNobWFyaygiRGVzZXJp
YWxpemUgZnJvbSBtZW1vcnkgc3RyZWFtIiwgaW5wdXREYXRhLmxlbmd0aCwgbmV3IEFjdGlvbigp
IHsKLSAgICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7IAot
ICAgICAgICAgIGRlZmF1bHRNZXNzYWdlLm5ld0J1aWxkZXJGb3JUeXBlKCkKLSAgICAgICAgICAg
IC5tZXJnZUZyb20oQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShpbnB1dFN0cmVhbSkpLmJ1
aWxkKCk7Ci0gICAgICAgICAgaW5wdXRTdHJlYW0ucmVzZXQoKTsKLSAgICAgICAgfQotICAgICAg
fSk7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9y
OiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJEZXRhaWxl
ZCBleGNlcHRpb24gaW5mb3JtYXRpb246Iik7Ci0gICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0
ZW0uZXJyKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUg
c3RhdGljIHZvaWQgYmVuY2htYXJrKFN0cmluZyBuYW1lLCBsb25nIGRhdGFTaXplLCBBY3Rpb24g
YWN0aW9uKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIC8vIE1ha2Ugc3VyZSBpdCdzIEpJVHRl
ZCAicmVhc29uYWJseSIgaGFyZCBiZWZvcmUgcnVubmluZyB0aGUgZmlyc3QgcHJvZ3Jlc3MgdGVz
dAotICAgIGZvciAoaW50IGk9MDsgaSA8IDEwMDsgaSsrKSB7Ci0gICAgICBhY3Rpb24uZXhlY3V0
ZSgpOwotICAgIH0KLSAgICAKLSAgICAvLyBSdW4gaXQgcHJvZ3Jlc3NpdmVseSBtb3JlIHRpbWVz
IHVudGlsIHdlJ3ZlIGdvdCBhIHJlYXNvbmFibGUgc2FtcGxlCi0gICAgaW50IGl0ZXJhdGlvbnMg
PSAxOwotICAgIGxvbmcgZWxhcHNlZCA9IHRpbWVBY3Rpb24oYWN0aW9uLCBpdGVyYXRpb25zKTsK
LSAgICB3aGlsZSAoZWxhcHNlZCA8IE1JTl9TQU1QTEVfVElNRV9NUykgewotICAgICAgaXRlcmF0
aW9ucyAqPSAyOwotICAgICAgZWxhcHNlZCA9IHRpbWVBY3Rpb24oYWN0aW9uLCBpdGVyYXRpb25z
KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVXBzY2FsZSB0aGUgc2FtcGxlIHRvIHRoZSB0YXJnZXQg
dGltZS4gRG8gdGhpcyBpbiBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljCi0gICAgLy8gdG8gYXZv
aWQgb3ZlcmZsb3cgaXNzdWVzLgotICAgIGl0ZXJhdGlvbnMgPSAoaW50KSAoKFRBUkdFVF9USU1F
X01TIC8gKGRvdWJsZSkgZWxhcHNlZCkgKiBpdGVyYXRpb25zKTsKLSAgICBlbGFwc2VkID0gdGlt
ZUFjdGlvbihhY3Rpb24sIGl0ZXJhdGlvbnMpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihuYW1l
ICsgIjogIiArIGl0ZXJhdGlvbnMgKyAiIGl0ZXJhdGlvbnMgaW4gIgotICAgICAgICAgKyAoZWxh
cHNlZC8xMDAwZikgKyAiczsgIiAKLSAgICAgICAgICsgKGl0ZXJhdGlvbnMgKiBkYXRhU2l6ZSkg
LyAoZWxhcHNlZCAqIDEwMjQgKiAxMDI0IC8gMTAwMGYpIAotICAgICAgICAgKyAiTUIvcyIpOwot
ICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBsb25nIHRpbWVBY3Rpb24oQWN0aW9uIGFjdGlvbiwg
aW50IGl0ZXJhdGlvbnMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgU3lzdGVtLmdjKCk7ICAg
IAotICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgewotICAgICAgYWN0aW9uLmV4ZWN1dGUo
KTsKLSAgICB9Ci0gICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAg
ICByZXR1cm4gZW5kIC0gc3RhcnQ7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBy
ZWFkQWxsQnl0ZXMoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIFJh
bmRvbUFjY2Vzc0ZpbGUgZmlsZSA9IG5ldyBSYW5kb21BY2Nlc3NGaWxlKG5ldyBGaWxlKGZpbGVu
YW1lKSwgInIiKTsKLSAgICBieXRlW10gY29udGVudCA9IG5ldyBieXRlWyhpbnQpIGZpbGUubGVu
Z3RoKCldOwotICAgIGZpbGUucmVhZEZ1bGx5KGNvbnRlbnQpOwotICAgIHJldHVybiBjb250ZW50
OwotICB9Ci0KLSAgLyoqCi0gICAqIEludGVyZmFjZSB1c2VkIHRvIGNhcHR1cmUgYSBzaW5nbGUg
YWN0aW9uIHRvIGJlbmNobWFyay4KLSAgICovCi0gIGludGVyZmFjZSBBY3Rpb24gewotICAgIHZv
aWQgZXhlY3V0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9iZW5j
aG1hcmtzL1JFQURNRS5tZCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9SRUFETUUubWQKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGM5MDI3ODA1ODJhMDA3ZTRlMDRmNWVmZGNiM2MyNzBiNjA4YjcxMzkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9iZW5jaG1hcmtzL1JF
QURNRS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLQotIyBQcm90b2NvbCBCdWZm
ZXJzIEJlbmNobWFya3MKLQotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYmVuY2htYXJraW5nIHNj
aGVtYXMgYW5kIGRhdGEgc2V0cyB0aGF0IHlvdQotY2FuIHVzZSB0byB0ZXN0IGEgdmFyaWV0eSBv
ZiBwZXJmb3JtYW5jZSBzY2VuYXJpb3MgYWdhaW5zdCB5b3VyCi1wcm90b2J1ZiBsYW5ndWFnZSBy
dW50aW1lLgotCi1UaGUgc2NoZW1hIGZvciB0aGUgZGF0YXNldHMgaXMgZGVzY3JpYmVkIGluIGBi
ZW5jaG1hcmtzLnByb3RvYC4KLQotR2VuZXJhdGUgdGhlIGRhdGEgc2V0cyBsaWtlIHNvOgotCi1g
YGAKLSQgbWFrZQotJCAuL2dlbmVyYXRlLWRhdGFzZXRzCi1Xcm90ZSBkYXRhc2V0OiBkYXRhc2V0
Lmdvb2dsZV9tZXNzYWdlMV9wcm90bzMucGIKLVdyb3RlIGRhdGFzZXQ6IGRhdGFzZXQuZ29vZ2xl
X21lc3NhZ2UxX3Byb3RvMi5wYgotV3JvdGUgZGF0YXNldDogZGF0YXNldC5nb29nbGVfbWVzc2Fn
ZTIucGIKLSQKLWBgYAotCi1FYWNoIGRhdGEgc2V0IHdpbGwgYmUgd3JpdHRlbiB0byBpdHMgb3du
IGZpbGUuICBCZW5jaG1hcmtzIHdpbGwKLWxpa2VseSB3YW50IHRvIHJ1biBzZXZlcmFsIGJlbmNo
bWFya3MgYWdhaW5zdCBlYWNoIGRhdGEgc2V0IChwYXJzZSwKLXNlcmlhbGl6ZSwgcG9zc2libHkg
SlNPTiwgcG9zc2libHkgdXNpbmcgZGlmZmVyZW50IEFQSXMsIGV0YykuCi0KLVdlIHdvdWxkIGxp
a2UgdG8gYWRkIG1vcmUgZGF0YSBzZXRzLiAgSW4gZ2VuZXJhbCB3ZSB3aWxsIGZhdm9yIGRhdGEg
c2V0cwotdGhhdCBtYWtlIHRoZSBvdmVyYWxsIHN1aXRlIGRpdmVyc2Ugd2l0aG91dCBiZWluZyB0
b28gbGFyZ2Ugb3IgaGF2aW5nCi10b28gbWFueSBzaW1pbGFyIHRlc3RzLiAgSWRlYWxseSBldmVy
eW9uZSBjYW4gcnVuIHRocm91Z2ggdGhlIGVudGlyZQotc3VpdGUgd2l0aG91dCB0aGUgdGVzdCBy
dW4gZ2V0dGluZyB0b28gbG9uZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9iZW5jaG1hcmtfbWVz
c2FnZXNfcHJvdG8yLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9iZW5jaG1hcmtzL2JlbmNobWFya19tZXNzYWdlc19wcm90bzIu
cHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZjY3YTFhZjNmMmU1YWUzOTI4
ODgyM2M0YTM1MzQ1NGIxNDcwY2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9iZW5jaG1hcmtzL2JlbmNobWFya19tZXNzYWdlc19wcm90bzIucHJvdG8KKysr
IC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLy8gQmVuY2htYXJrIG1lc3NhZ2VzIGZvciBw
cm90bzIuCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi1wYWNrYWdlIGJlbmNobWFya3MucHJvdG8y
Owotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmLmJlbmNobWFya3Mi
OwotCi0vLyBUaGlzIGlzIHRoZSBkZWZhdWx0LCBidXQgd2Ugc3BlY2lmeSBpdCBoZXJlIGV4cGxp
Y2l0bHkuCi1vcHRpb24gb3B0aW1pemVfZm9yID0gU1BFRUQ7Ci0KLW1lc3NhZ2UgR29vZ2xlTWVz
c2FnZTEgewotICByZXF1aXJlZCBzdHJpbmcgZmllbGQxID0gMTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGZpZWxkOSA9IDk7Ci0gIG9wdGlvbmFsIHN0cmluZyBmaWVsZDE4ID0gMTg7Ci0gIG9wdGlvbmFs
IGJvb2wgZmllbGQ4MCA9IDgwIFtkZWZhdWx0PWZhbHNlXTsKLSAgb3B0aW9uYWwgYm9vbCBmaWVs
ZDgxID0gODEgW2RlZmF1bHQ9dHJ1ZV07Ci0gIHJlcXVpcmVkIGludDMyIGZpZWxkMiA9IDI7Ci0g
IHJlcXVpcmVkIGludDMyIGZpZWxkMyA9IDM7Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMjgwID0g
MjgwOwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDYgPSA2IFtkZWZhdWx0PTBdOwotICBvcHRpb25h
bCBpbnQ2NCBmaWVsZDIyID0gMjI7Ci0gIG9wdGlvbmFsIHN0cmluZyBmaWVsZDQgPSA0OwotICBy
ZXBlYXRlZCBmaXhlZDY0IGZpZWxkNSA9IDU7Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQ1OSA9IDU5
IFtkZWZhdWx0PWZhbHNlXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGZpZWxkNyA9IDc7Ci0gIG9wdGlv
bmFsIGludDMyIGZpZWxkMTYgPSAxNjsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQxMzAgPSAxMzAg
W2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQxMiA9IDEyIFtkZWZhdWx0PXRydWVd
OwotICBvcHRpb25hbCBib29sIGZpZWxkMTcgPSAxNyBbZGVmYXVsdD10cnVlXTsKLSAgb3B0aW9u
YWwgYm9vbCBmaWVsZDEzID0gMTMgW2RlZmF1bHQ9dHJ1ZV07Ci0gIG9wdGlvbmFsIGJvb2wgZmll
bGQxNCA9IDE0IFtkZWZhdWx0PXRydWVdOwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDEwNCA9IDEw
NCBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQxMDAgPSAxMDAgW2RlZmF1bHQ9
MF07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMTAxID0gMTAxIFtkZWZhdWx0PTBdOwotICBvcHRp
b25hbCBzdHJpbmcgZmllbGQxMDIgPSAxMDI7Ci0gIG9wdGlvbmFsIHN0cmluZyBmaWVsZDEwMyA9
IDEwMzsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQyOSA9IDI5IFtkZWZhdWx0PTBdOwotICBvcHRp
b25hbCBib29sIGZpZWxkMzAgPSAzMCBbZGVmYXVsdD1mYWxzZV07Ci0gIG9wdGlvbmFsIGludDMy
IGZpZWxkNjAgPSA2MCBbZGVmYXVsdD0tMV07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMjcxID0g
MjcxIFtkZWZhdWx0PS0xXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQyNzIgPSAyNzIgW2RlZmF1
bHQ9LTFdOwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDE1MCA9IDE1MDsKLSAgb3B0aW9uYWwgaW50
MzIgZmllbGQyMyA9IDIzIFtkZWZhdWx0PTBdOwotICBvcHRpb25hbCBib29sIGZpZWxkMjQgPSAy
NCBbZGVmYXVsdD1mYWxzZV07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMjUgPSAyNSBbZGVmYXVs
dD0wXTsKLSAgb3B0aW9uYWwgR29vZ2xlTWVzc2FnZTFTdWJNZXNzYWdlIGZpZWxkMTUgPSAxNTsK
LSAgb3B0aW9uYWwgYm9vbCBmaWVsZDc4ID0gNzg7Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkNjcg
PSA2NyBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQ2OCA9IDY4OwotICBvcHRp
b25hbCBpbnQzMiBmaWVsZDEyOCA9IDEyOCBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGZpZWxkMTI5ID0gMTI5IFtkZWZhdWx0PSJ4eHh4eHh4eHh4eHh4eHh4eHh4eHgiXTsKLSAgb3B0
aW9uYWwgaW50MzIgZmllbGQxMzEgPSAxMzEgW2RlZmF1bHQ9MF07Ci19Ci0KLW1lc3NhZ2UgR29v
Z2xlTWVzc2FnZTFTdWJNZXNzYWdlIHsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQxID0gMSBbZGVm
YXVsdD0wXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQyID0gMiBbZGVmYXVsdD0wXTsKLSAgb3B0
aW9uYWwgaW50MzIgZmllbGQzID0gMyBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGZp
ZWxkMTUgPSAxNTsKLSAgb3B0aW9uYWwgYm9vbCBmaWVsZDEyID0gMTIgW2RlZmF1bHQ9dHJ1ZV07
Ci0gIG9wdGlvbmFsIGludDY0IGZpZWxkMTMgPSAxMzsKLSAgb3B0aW9uYWwgaW50NjQgZmllbGQx
NCA9IDE0OwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDE2ID0gMTY7Ci0gIG9wdGlvbmFsIGludDMy
IGZpZWxkMTkgPSAxOSBbZGVmYXVsdD0yXTsKLSAgb3B0aW9uYWwgYm9vbCBmaWVsZDIwICA9IDIw
IFtkZWZhdWx0PXRydWVdOwotICBvcHRpb25hbCBib29sIGZpZWxkMjggPSAyOCBbZGVmYXVsdD10
cnVlXTsKLSAgb3B0aW9uYWwgZml4ZWQ2NCBmaWVsZDIxID0gMjE7Ci0gIG9wdGlvbmFsIGludDMy
IGZpZWxkMjIgPSAyMjsKLSAgb3B0aW9uYWwgYm9vbCBmaWVsZDIzID0gMjMgWyBkZWZhdWx0PWZh
bHNlIF07Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQyMDYgPSAyMDYgW2RlZmF1bHQ9ZmFsc2VdOwot
ICBvcHRpb25hbCBmaXhlZDMyIGZpZWxkMjAzID0gMjAzOwotICBvcHRpb25hbCBpbnQzMiBmaWVs
ZDIwNCA9IDIwNDsKLSAgb3B0aW9uYWwgc3RyaW5nIGZpZWxkMjA1ID0gMjA1OwotICBvcHRpb25h
bCB1aW50NjQgZmllbGQyMDcgPSAyMDc7Ci0gIG9wdGlvbmFsIHVpbnQ2NCBmaWVsZDMwMCA9IDMw
MDsKLX0KLQotbWVzc2FnZSBHb29nbGVNZXNzYWdlMiB7Ci0gIG9wdGlvbmFsIHN0cmluZyBmaWVs
ZDEgPSAxOwotICBvcHRpb25hbCBpbnQ2NCBmaWVsZDMgPSAzOwotICBvcHRpb25hbCBpbnQ2NCBm
aWVsZDQgPSA0OwotICBvcHRpb25hbCBpbnQ2NCBmaWVsZDMwID0gMzA7Ci0gIG9wdGlvbmFsIGJv
b2wgZmllbGQ3NSAgPSA3NSBbZGVmYXVsdD1mYWxzZV07Ci0gIG9wdGlvbmFsIHN0cmluZyBmaWVs
ZDYgPSA2OwotICBvcHRpb25hbCBieXRlcyBmaWVsZDIgPSAyOwotICBvcHRpb25hbCBpbnQzMiBm
aWVsZDIxID0gMjEgW2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkNzEgPSA3MTsK
LSAgb3B0aW9uYWwgZmxvYXQgZmllbGQyNSA9IDI1OwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDEw
OSA9IDEwOSBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQyMTAgPSAyMTAgW2Rl
ZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMjExID0gMjExIFtkZWZhdWx0PTBdOwot
ICBvcHRpb25hbCBpbnQzMiBmaWVsZDIxMiA9IDIxMiBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwg
aW50MzIgZmllbGQyMTMgPSAyMTMgW2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxk
MjE2ID0gMjE2IFtkZWZhdWx0PTBdOwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDIxNyA9IDIxNyBb
ZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQyMTggPSAyMTggW2RlZmF1bHQ9MF07
Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMjIwID0gMjIwIFtkZWZhdWx0PTBdOwotICBvcHRpb25h
bCBpbnQzMiBmaWVsZDIyMSA9IDIyMSBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgZmxvYXQgZmll
bGQyMjIgPSAyMjIgW2RlZmF1bHQ9MC4wXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQ2MyA9IDYz
OwotCi0gIHJlcGVhdGVkIGdyb3VwIEdyb3VwMSA9IDEwIHsKLSAgICByZXF1aXJlZCBmbG9hdCBm
aWVsZDExID0gMTE7Ci0gICAgb3B0aW9uYWwgZmxvYXQgZmllbGQyNiA9IDI2OwotICAgIG9wdGlv
bmFsIHN0cmluZyBmaWVsZDEyID0gMTI7Ci0gICAgb3B0aW9uYWwgc3RyaW5nIGZpZWxkMTMgPSAx
MzsKLSAgICByZXBlYXRlZCBzdHJpbmcgZmllbGQxNCA9IDE0OwotICAgIHJlcXVpcmVkIHVpbnQ2
NCBmaWVsZDE1ID0gMTU7Ci0gICAgb3B0aW9uYWwgaW50MzIgZmllbGQ1ID0gNTsKLSAgICBvcHRp
b25hbCBzdHJpbmcgZmllbGQyNyA9IDI3OwotICAgIG9wdGlvbmFsIGludDMyIGZpZWxkMjggPSAy
ODsKLSAgICBvcHRpb25hbCBzdHJpbmcgZmllbGQyOSA9IDI5OwotICAgIG9wdGlvbmFsIHN0cmlu
ZyBmaWVsZDE2ID0gMTY7Ci0gICAgcmVwZWF0ZWQgc3RyaW5nIGZpZWxkMjIgPSAyMjsKLSAgICBy
ZXBlYXRlZCBpbnQzMiBmaWVsZDczID0gNzM7Ci0gICAgb3B0aW9uYWwgaW50MzIgZmllbGQyMCA9
IDIwIFtkZWZhdWx0PTBdOwotICAgIG9wdGlvbmFsIHN0cmluZyBmaWVsZDI0ID0gMjQ7Ci0gICAg
b3B0aW9uYWwgR29vZ2xlTWVzc2FnZTJHcm91cGVkTWVzc2FnZSBmaWVsZDMxID0gMzE7Ci0gIH0K
LSAgcmVwZWF0ZWQgc3RyaW5nIGZpZWxkMTI4ID0gMTI4OwotICBvcHRpb25hbCBpbnQ2NCBmaWVs
ZDEzMSA9IDEzMTsKLSAgcmVwZWF0ZWQgc3RyaW5nIGZpZWxkMTI3ID0gMTI3OwotICBvcHRpb25h
bCBpbnQzMiBmaWVsZDEyOSA9IDEyOTsKLSAgcmVwZWF0ZWQgaW50NjQgZmllbGQxMzAgPSAxMzA7
Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQyMDUgPSAyMDUgW2RlZmF1bHQ9ZmFsc2VdOwotICBvcHRp
b25hbCBib29sIGZpZWxkMjA2ID0gMjA2IFtkZWZhdWx0PWZhbHNlXTsKLX0KLQotbWVzc2FnZSBH
b29nbGVNZXNzYWdlMkdyb3VwZWRNZXNzYWdlIHsKLSAgb3B0aW9uYWwgZmxvYXQgZmllbGQxID0g
MTsKLSAgb3B0aW9uYWwgZmxvYXQgZmllbGQyID0gMjsKLSAgb3B0aW9uYWwgZmxvYXQgZmllbGQz
ID0gMyBbZGVmYXVsdD0wLjBdOwotICBvcHRpb25hbCBib29sIGZpZWxkNCA9IDQ7Ci0gIG9wdGlv
bmFsIGJvb2wgZmllbGQ1ID0gNTsKLSAgb3B0aW9uYWwgYm9vbCBmaWVsZDYgPSA2IFtkZWZhdWx0
PXRydWVdOwotICBvcHRpb25hbCBib29sIGZpZWxkNyA9IDcgW2RlZmF1bHQ9ZmFsc2VdOwotICBv
cHRpb25hbCBmbG9hdCBmaWVsZDggPSA4OwotICBvcHRpb25hbCBib29sIGZpZWxkOSA9IDk7Ci0g
IG9wdGlvbmFsIGZsb2F0IGZpZWxkMTAgPSAxMDsKLSAgb3B0aW9uYWwgaW50NjQgZmllbGQxMSA9
IDExOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9iZW5jaG1hcmtzL2JlbmNobWFya19tZXNzYWdlc19wcm90bzMu
cHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2JlbmNobWFya3MvYmVuY2htYXJrX21lc3NhZ2VzX3Byb3RvMy5wcm90bwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJmNTg2OTg2YjA3NTlmMTdjN2RlZGM5MGQxOTE0Yzg4
ZDJjZWIxNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Jl
bmNobWFya3MvYmVuY2htYXJrX21lc3NhZ2VzX3Byb3RvMy5wcm90bworKysgL2Rldi9udWxsCkBA
IC0xLDc2ICswLDAgQEAKLS8vIEJlbmNobWFyayBtZXNzYWdlcyBmb3IgcHJvdG8zLgotCi1zeW50
YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBiZW5jaG1hcmtzLnByb3RvMzsKLW9wdGlvbiBqYXZh
X3BhY2thZ2UgPSAiY29tLmdvb2dsZS5wcm90b2J1Zi5iZW5jaG1hcmtzIjsKLQotLy8gVGhpcyBp
cyB0aGUgZGVmYXVsdCwgYnV0IHdlIHNwZWNpZnkgaXQgaGVyZSBleHBsaWNpdGx5Lgotb3B0aW9u
IG9wdGltaXplX2ZvciA9IFNQRUVEOwotCi1tZXNzYWdlIEdvb2dsZU1lc3NhZ2UxIHsKLSAgc3Ry
aW5nIGZpZWxkMSA9IDE7Ci0gIHN0cmluZyBmaWVsZDkgPSA5OwotICBzdHJpbmcgZmllbGQxOCA9
IDE4OwotICBib29sIGZpZWxkODAgPSA4MDsKLSAgYm9vbCBmaWVsZDgxID0gODE7Ci0gIGludDMy
IGZpZWxkMiA9IDI7Ci0gIGludDMyIGZpZWxkMyA9IDM7Ci0gIGludDMyIGZpZWxkMjgwID0gMjgw
OwotICBpbnQzMiBmaWVsZDYgPSA2OwotICBpbnQ2NCBmaWVsZDIyID0gMjI7Ci0gIHN0cmluZyBm
aWVsZDQgPSA0OwotICByZXBlYXRlZCBmaXhlZDY0IGZpZWxkNSA9IDU7Ci0gIGJvb2wgZmllbGQ1
OSA9IDU5OwotICBzdHJpbmcgZmllbGQ3ID0gNzsKLSAgaW50MzIgZmllbGQxNiA9IDE2OwotICBp
bnQzMiBmaWVsZDEzMCA9IDEzMDsKLSAgYm9vbCBmaWVsZDEyID0gMTI7Ci0gIGJvb2wgZmllbGQx
NyA9IDE3OwotICBib29sIGZpZWxkMTMgPSAxMzsKLSAgYm9vbCBmaWVsZDE0ID0gMTQ7Ci0gIGlu
dDMyIGZpZWxkMTA0ID0gMTA0OwotICBpbnQzMiBmaWVsZDEwMCA9IDEwMDsKLSAgaW50MzIgZmll
bGQxMDEgPSAxMDE7Ci0gIHN0cmluZyBmaWVsZDEwMiA9IDEwMjsKLSAgc3RyaW5nIGZpZWxkMTAz
ID0gMTAzOwotICBpbnQzMiBmaWVsZDI5ID0gMjk7Ci0gIGJvb2wgZmllbGQzMCA9IDMwOwotICBp
bnQzMiBmaWVsZDYwID0gNjA7Ci0gIGludDMyIGZpZWxkMjcxID0gMjcxOwotICBpbnQzMiBmaWVs
ZDI3MiA9IDI3MjsKLSAgaW50MzIgZmllbGQxNTAgPSAxNTA7Ci0gIGludDMyIGZpZWxkMjMgPSAy
MzsKLSAgYm9vbCBmaWVsZDI0ID0gMjQ7Ci0gIGludDMyIGZpZWxkMjUgPSAyNTsKLSAgR29vZ2xl
TWVzc2FnZTFTdWJNZXNzYWdlIGZpZWxkMTUgPSAxNTsKLSAgYm9vbCBmaWVsZDc4ID0gNzg7Ci0g
IGludDMyIGZpZWxkNjcgPSA2NzsKLSAgaW50MzIgZmllbGQ2OCA9IDY4OwotICBpbnQzMiBmaWVs
ZDEyOCA9IDEyODsKLSAgc3RyaW5nIGZpZWxkMTI5ID0gMTI5OwotICBpbnQzMiBmaWVsZDEzMSA9
IDEzMTsKLX0KLQotbWVzc2FnZSBHb29nbGVNZXNzYWdlMVN1Yk1lc3NhZ2UgewotICBpbnQzMiBm
aWVsZDEgPSAxOwotICBpbnQzMiBmaWVsZDIgPSAyOwotICBpbnQzMiBmaWVsZDMgPSAzOwotICBz
dHJpbmcgZmllbGQxNSA9IDE1OwotICBib29sIGZpZWxkMTIgPSAxMjsKLSAgaW50NjQgZmllbGQx
MyA9IDEzOwotICBpbnQ2NCBmaWVsZDE0ID0gMTQ7Ci0gIGludDMyIGZpZWxkMTYgPSAxNjsKLSAg
aW50MzIgZmllbGQxOSA9IDE5OwotICBib29sIGZpZWxkMjAgID0gMjA7Ci0gIGJvb2wgZmllbGQy
OCA9IDI4OwotICBmaXhlZDY0IGZpZWxkMjEgPSAyMTsKLSAgaW50MzIgZmllbGQyMiA9IDIyOwot
ICBib29sIGZpZWxkMjMgPSAyMzsKLSAgYm9vbCBmaWVsZDIwNiA9IDIwNjsKLSAgZml4ZWQzMiBm
aWVsZDIwMyA9IDIwMzsKLSAgaW50MzIgZmllbGQyMDQgPSAyMDQ7Ci0gIHN0cmluZyBmaWVsZDIw
NSA9IDIwNTsKLSAgdWludDY0IGZpZWxkMjA3ID0gMjA3OwotICB1aW50NjQgZmllbGQzMDAgPSAz
MDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2JlbmNobWFya3MvYmVuY2htYXJrcy5wcm90byBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJr
cy9iZW5jaG1hcmtzLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWMwYjU0
ODc3OWVmZmE3N2Y4MzhlOTEzN2JiY2U2YjJhY2NiMTA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9iZW5jaG1hcmtzLnByb3RvCisrKyAv
ZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLXN5bnRheCA9ICJwcm90bzMiOwotcGFja2FnZSBiZW5jaG1hcmtzOwotb3B0aW9uIGph
dmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmLmJlbmNobWFya3MiOwotCi1tZXNzYWdl
IEJlbmNobWFya0RhdGFzZXQgewotICAvLyBOYW1lIG9mIHRoZSBiZW5jaG1hcmsgZGF0YXNldC4g
IFRoaXMgc2hvdWxkIGJlIHVuaXF1ZSBhY3Jvc3MgYWxsIGRhdGFzZXRzLgotICAvLyBTaG91bGQg
b25seSBjb250YWluIHdvcmQgY2hhcmFjdGVyczogW2EtekEtWjAtOV9dCi0gIHN0cmluZyBuYW1l
ID0gMTsKLQotICAvLyBGdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgcHJvdG9idWYgbWVzc2Fn
ZSBmb3IgdGhpcyBkYXRhc2V0LgotICAvLyBJdCB3aWxsIGJlIG9uZSBvZiB0aGUgbWVzc2FnZXMg
ZGVmaW5lZCBiZW5jaG1hcmtfbWVzc2FnZXNfcHJvdG8yLnByb3RvCi0gIC8vIG9yIGJlbmNobWFy
a19tZXNzYWdlc19wcm90bzMucHJvdG8uCi0gIC8vCi0gIC8vIEltcGxlbWVudGF0aW9ucyB0aGF0
IGRvIG5vdCBzdXBwb3J0IHJlZmxlY3Rpb24gY2FuIGltcGxlbWVudCB0aGlzIHdpdGgKLSAgLy8g
YW4gZXhwbGljaXQgImlmL2Vsc2UiIGNoYWluIHRoYXQgbGlzdHMgZXZlcnkga25vd24gbWVzc2Fn
ZSBkZWZpbmVkCi0gIC8vIGluIHRob3NlIGZpbGVzLgotICBzdHJpbmcgbWVzc2FnZV9uYW1lID0g
MjsKLQotICAvLyBUaGUgcGF5bG9hZChzKSBmb3IgdGhpcyBkYXRhc2V0LiAgVGhleSBzaG91bGQg
YmUgcGFyc2VkIG9yIHNlcmlhbGl6ZWQKLSAgLy8gaW4gc2VxdWVuY2UsIGluIGEgbG9vcCwgaWUu
Ci0gIC8vCi0gIC8vICB3aGlsZSAoIWJlbmNobWFya0RvbmUpIHsgIC8vIEJlbmNobWFyayBydW5u
ZXIgZGVjaWRlcyB3aGVuIHRvIGV4aXQuCi0gIC8vICAgIGZvciAoaSA9IDA7IGkgPCBiZW5jaG1h
cmsucGF5bG9hZC5sZW5ndGg7IGkrKykgewotICAvLyAgICAgIHBhcnNlKGJlbmNobWFyay5wYXls
b2FkW2ldKQotICAvLyAgICB9Ci0gIC8vICB9Ci0gIC8vCi0gIC8vIFRoaXMgaXMgaW50ZW5kZWQg
dG8gbGV0IGRhdGFzZXRzIGluY2x1ZGUgYSB2YXJpZXR5IG9mIGRhdGEgdG8gcHJvdmlkZQotICAv
LyBwb3RlbnRpYWxseSBtb3JlIHJlYWxpc3RpYyByZXN1bHRzIHRoYW4ganVzdCBwYXJzaW5nIHRo
ZSBzYW1lIG1lc3NhZ2UKLSAgLy8gb3ZlciBhbmQgb3Zlci4gIEEgc2luZ2xlIG1lc3NhZ2UgcGFy
c2VkIHJlcGVhdGVkbHkgY291bGQgeWllbGQgdW51c3VhbGx5Ci0gIC8vIGdvb2QgYnJhbmNoIHBy
ZWRpY3Rpb24gcGVyZm9ybWFuY2UuCi0gIHJlcGVhdGVkIGJ5dGVzIHBheWxvYWQgPSAzOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9iZW5jaG1hcmtzL2dlbmVyYXRlX2RhdGFzZXRzLmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9iZW5jaG1hcmtzL2dl
bmVyYXRlX2RhdGFzZXRzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWU3YWRm
MWJhM2YwZTIxYTc4OGQ5YTQxMmYwY2VlMjJiZjk5NzQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9nZW5lcmF0ZV9kYXRhc2V0cy5jYwor
KysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotI2luY2x1ZGUgPGZzdHJlYW0+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5j
bHVkZSAiYmVuY2htYXJrcy5wYi5oIgotCi11c2luZyBiZW5jaG1hcmtzOjpCZW5jaG1hcmtEYXRh
c2V0OwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvcjsKLXVzaW5nIGdvb2dsZTo6
cHJvdG9idWY6OkRlc2NyaXB0b3JQb29sOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6TWVzc2Fn
ZTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OwotCi1zdGQ6OnNldDxz
dGQ6OnN0cmluZz4gbmFtZXM7Ci0KLWNvbnN0IGNoYXIgKmZpbGVfcHJlZml4ID0gImRhdGFzZXQu
IjsKLWNvbnN0IGNoYXIgKmZpbGVfc3VmZml4ID0gIi5wYiI7Ci0KLXZvaWQgV3JpdGVGaWxlV2l0
aFBheWxvYWRzKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2VfbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcGF5bG9hZCkgewotICBp
ZiAoIW5hbWVzLmluc2VydChuYW1lKS5zZWNvbmQpIHsKLSAgICBzdGQ6OmNlcnIgPDwgIkR1cGxp
Y2F0ZSB0ZXN0IG5hbWU6ICIgPDwgbmFtZSA8PCAiXG4iOwotICAgIGFib3J0KCk7Ci0gIH0KLQot
ICAvLyBGaXJzdCB2ZXJpZnkgdGhhdCB0aGlzIG1lc3NhZ2UgbmFtZSBleGlzdHMgaW4gb3VyIHNl
dCBvZiBiZW5jaG1hcmsgbWVzc2FnZXMKLSAgLy8gYW5kIHRoYXQgdGhlc2UgcGF5bG9hZHMgYXJl
IHZhbGlkIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZS4KLSAgY29uc3QgRGVzY3JpcHRvciogZCA9Ci0g
ICAgICBEZXNjcmlwdG9yUG9vbDo6Z2VuZXJhdGVkX3Bvb2woKS0+RmluZE1lc3NhZ2VUeXBlQnlO
YW1lKG1lc3NhZ2VfbmFtZSk7Ci0KLSAgaWYgKCFkKSB7Ci0gICAgc3RkOjpjZXJyIDw8ICJGb3Ig
ZGF0YXNldCAiIDw8IG5hbWUgPDwgIiwgbm8gc3VjaCBtZXNzYWdlOiAiCi0gICAgICAgICAgICAg
IDw8IG1lc3NhZ2VfbmFtZSA8PCAiXG4iOwotICAgIGFib3J0KCk7Ci0gIH0KLQotICBNZXNzYWdl
KiBtID0gTWVzc2FnZUZhY3Rvcnk6OmdlbmVyYXRlZF9mYWN0b3J5KCktPkdldFByb3RvdHlwZShk
KS0+TmV3KCk7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXlsb2FkLnNpemUoKTsgaSsr
KSB7Ci0gICAgaWYgKCFtLT5QYXJzZUZyb21TdHJpbmcocGF5bG9hZFtpXSkpIHsKLSAgICAgIHN0
ZDo6Y2VyciA8PCAiRm9yIGRhdGFzZXQgIiA8PCBuYW1lIDw8ICIsIHBheWxvYWRbIiA8PCBpIDw8
ICJdIGZhaWxzICIKLSAgICAgICAgICAgICAgICA8PCAidG8gcGFyc2VcbiI7Ci0gICAgICBhYm9y
dCgpOwotICAgIH0KLSAgfQotCi0gIEJlbmNobWFya0RhdGFzZXQgZGF0YXNldDsKLSAgZGF0YXNl
dC5zZXRfbmFtZShuYW1lKTsKLSAgZGF0YXNldC5zZXRfbWVzc2FnZV9uYW1lKG1lc3NhZ2VfbmFt
ZSk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF5bG9hZC5zaXplKCk7IGkrKykgewotICAg
IGRhdGFzZXQuYWRkX3BheWxvYWQoKS0+YXNzaWduKHBheWxvYWRbaV0pOwotICB9Ci0KLSAgc3Rk
OjpvZnN0cmVhbSB3cml0ZXI7Ci0gIHN0ZDo6c3RyaW5nIGZuYW1lID0gZmlsZV9wcmVmaXggKyBu
YW1lICsgZmlsZV9zdWZmaXg7Ci0gIHdyaXRlci5vcGVuKGZuYW1lLmNfc3RyKCkpOwotICBkYXRh
c2V0LlNlcmlhbGl6ZVRvT3N0cmVhbSgmd3JpdGVyKTsKLSAgd3JpdGVyLmNsb3NlKCk7Ci0KLSAg
c3RkOjpjZXJyIDw8ICJXcm90ZSBkYXRhc2V0OiAiIDw8IGZuYW1lIDw8ICJcbiI7Ci19Ci0KLXZv
aWQgV3JpdGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYg
bWVzc2FnZV9uYW1lLAotICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBheWxvYWQp
IHsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBheWxvYWRzOwotICBwYXlsb2Fkcy5wdXNo
X2JhY2socGF5bG9hZCk7Ci0gIFdyaXRlRmlsZVdpdGhQYXlsb2FkcyhuYW1lLCBtZXNzYWdlX25h
bWUsIHBheWxvYWRzKTsKLX0KLQotc3RkOjpzdHJpbmcgUmVhZEZpbGUoY29uc3Qgc3RkOjpzdHJp
bmcmIG5hbWUpIHsKLSAgc3RkOjppZnN0cmVhbSBmaWxlKG5hbWUuY19zdHIoKSk7Ci0gIEdPT0dM
RV9DSEVDSyhmaWxlLmlzX29wZW4oKSkgPDwgIkNvdWxkbid0IGZpbmQgZmlsZSAnIiA8PCBuYW1l
IDw8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIicsIHBsZWFzZSBtYWtlIHN1
cmUgeW91IGFyZSBydW5uaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dGhpcyBjb21tYW5kIGZyb20gdGhlIGJlbmNobWFya3MvICIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGlyZWN0b3J5LlxuIjsKLSAgcmV0dXJuIHN0ZDo6c3RyaW5nKChzdGQ6
OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oZmlsZSkpLAotICAgICAgICAgICAgICAgICAgICAg
c3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KCkpOwotfQotCi1pbnQgbWFpbigpIHsKLSAg
V3JpdGVGaWxlKCJnb29nbGVfbWVzc2FnZTFfcHJvdG8zIiwgImJlbmNobWFya3MucHJvdG8zLkdv
b2dsZU1lc3NhZ2UxIiwKLSAgICAgICAgICAgIFJlYWRGaWxlKCJnb29nbGVfbWVzc2FnZTEuZGF0
IikpOwotICBXcml0ZUZpbGUoImdvb2dsZV9tZXNzYWdlMV9wcm90bzIiLCAiYmVuY2htYXJrcy5w
cm90bzIuR29vZ2xlTWVzc2FnZTEiLAotICAgICAgICAgICAgUmVhZEZpbGUoImdvb2dsZV9tZXNz
YWdlMS5kYXQiKSk7Ci0KLSAgLy8gTm90IGluIHByb3RvMyBiZWNhdXNlIGl0IGhhcyBhIGdyb3Vw
LCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLgotICBXcml0ZUZpbGUoImdvb2dsZV9tZXNzYWdlMiIs
ICJiZW5jaG1hcmtzLnByb3RvMi5Hb29nbGVNZXNzYWdlMiIsCi0gICAgICAgICAgICBSZWFkRmls
ZSgiZ29vZ2xlX21lc3NhZ2UyLmRhdCIpKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9nb29n
bGVfbWVzc2FnZTEuZGF0IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9iZW5jaG1hcmtzL2dvb2dsZV9tZXNzYWdlMS5kYXQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMGYwNjRjYzJlYmQxMDhlNGE4ZWUxNGQ5NGM1OWQyMjA3
ZjBmMTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFy
eSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjI4CnpjbWQ7TDVhNXRGLUN3
N35YNiZ0UHJtNUB8WD10RW5SR0p4Rm5qaGd+N15oaVFvMDt0OVU+QmZ+V21CU0RTNWcmfAp6bFd1
UHh0ZnBhO1FEcDhLUjstPj10IXxwJm99WkIldVZHdUZrUSVIfFRwak9lcFhwcWw9cE81JXRgJCZm
cy1hZE0KelopSCtsN25RKTYhQkRfaDcwRHFmcGk8P21XTiNKX1glZyNXbHgkTzVYSmoxezY2T3xQ
OXZBSHBuVT5fNHRXfkQoCnpyeVpyNkE2YzNoOSN2JUdZO0JzRVJISWV3NWFqSFhSOWFSUFhxPksq
dD5kP25HMzM4OSQyfT03XiRtPF9JflctfApjNyNTdXBhI2g7fm1aem9HRGQkenNWQ2s1Y3hQVk9f
MEM5anQpY15uaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9nb29nbGVfbWVzc2FnZTIuZGF0IGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9i
ZW5jaG1hcmtzL2dvb2dsZV9tZXNzYWdlMi5kYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDA2YzA5NDQxYjllMWEzZmM4NTc3ZjZjMzZkYmI1ODNkODU0ODFiMmMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAK
SGNtVj9kMDAwMDEKCmxpdGVyYWwgODQ1NzAKemNtWHRmaGh0T3Fgbkxsdml1N0tgYnNKNjZXO0E7
P0oxNDh6WkR6QWlsNGtGe04zRyVqVCh9bzFBUyR2Jk1PMDk+CnpDQFEhUmFHfDBDcU19P3k1I2p4
d14hTlMmLXsoQWdlNGdpQWBvS2xBbz1TYW87TCowfGh1MH5hPyl6YkA8bz1yUQp6dihMV3pjSkI5
e0ZXPm19IU9gPVZwWXdMfm5sc2JZQ29CNWx6VXI0Kyo5TUJESG9zMUp7b3dDNnpQMz9zJHFmR1kK
ekpge3w3dT11fWtWLUd5cEVfNUQ+YXViKV9iP3d7KiZrSFpPXiRzRUZ1WUhHdE0kKU5BQUtyRC1p
aTtuPEVfJSFQCnp7bSNufGRtc1BuIXBXQm8tfXooV2RHWF5yOT1AMktQQ3gjXkBKMEU/XmdCUDll
UkphNSVQO1FlOz51O303aUojMwp6YG4tPSVKS24yJndFb0F8bH4+I3xjWWQzMipAZWstY0hyO09r
M041Rkd3I1RhPXheRGxGQzNjaj9eVVokS0teSXkKeilpMmk0dTdDMn0rRXQ9ZWdeTzw3Xn4xXlNe
RFFxdGFvdGEpPEZpaF5acioqemVjd0t+T0wqVDUhP3ZJSUdrPEBDCnpiaTRBY15+eztpeT9wS0Y/
SGoxfiYzT0gtNEU3NysoWCVVfVp3JWtMVyRWJENgP3VlKz8hK1RjT2RoMipYSTRNaQp6fExSODhD
RUd1ST9Zc3JiWWl5PE0qWiRfKmBgJFA0S0ojMWpfWlI+NlNNaGg9Sj5UOD17YD9ua3hFcjx9RjZ8
I0MKenl8IUN+O1hMPFNhZHteNyVeJm8pRSttaEJ5WSgpP05hJmUwT1NkaztlZmpmfEM1UVZybmx8
NkZwbUp+PXgxMFhFCnpeVkpPbGY4NnhNTyppZHQmcHUwa19xTXdgZV8xcTM0ND5VKUJWNnROUUxe
YEA3YylsX3VieGNJaCVZK3lrentgTQp6SW5SZW5fa09ZUiNvV1AlN0pGdEI5JEsqRVQ7dFpTUTZK
d2pVd2BudF95d2t8dU5CVzt7b3B4RXJteWVKPV55S3gKejRQQig2aUl2Wjk3eXJ7Z2VFKWxFezxU
bTIpbC0pZUoyUkhSPlkzMzhVIWMkNHZGTUsqX0ZzMTYjbWwhYFRZVVd6Cnp7KjNEQyZ1aUpANj9l
PCNlUj13KztCJj9rbzhLa0JfUVAzTDtHUzQpe0szUDxmMW1mdWNPU29jYFBkIXRGR3Nudgp6aS12
MT1jbUduJjhvN0pUdk1hdXZ4clZ4WShTMUtKQ35VM15TSlcwLUZJZS0+PWNzRytfZyhxUmpQcVUm
YSFIR2EKel5xJmRZRTEhUHdsZ35VKHJTYmpyLT95RHpBPjh5IV56ci1HJk83JFFmOUBFMHhKS1Q3
PHRPS1IpTFE3Y0BaLWdUCnpoaDk2dD9JeDw7PlhUMk14QHpncXlXWVFXI29vb3dlKjN+ez54dWc2
TzdQOCNFbl5nfVYtTmtESipFY3Qwe0lpMwp6M1lKT09fMy1oJWc5MzhwcFhLTER6ZEhKc1pTekJR
TDEqcz1qI1RAXiNiWVJ1bUh4Mm0pdWBqNT56O1ktSmx2P3oKemFlWWh3PSRGZSpGOF9WfFc5Z09a
WXB5PzdTcDlGIXZ3YzZNPTZONjNeM2pTSmJsZktvJllUVEQkMiheRi0+IyRuCnp6NEkxZVV3KEA2
Pz94NzsrZjNvWm41KnYtLShJLW9HV2dPTmQlY2RVRmdIP2V4ZSlpbCRAdXdLIW8tI0szdGI8ZAp6
UGR5LTV3S3FDXyZpMktSSU0hbjlxU2JfVisqPUQrNjJFWW5GTHVFTnRJdS18TilMWjljS3gmYGpA
ZnN3akVGeGYKekUmMWxJbVRiZk5lXitESHJQdkxSOT0zVDtVU2ErNmdYTHFtVGkpfkRhbll4OXt1
all4Wm9lWFA+akNkQz98TkpHCnoqU35qUHNNPmhMaipHdj5VQmZeNjshI2lRMkFacSUqMU17Q15C
WHNSe25jTn4/M1kkcD1pYX5UPDBtZU1MWj47OAp6NXNEOTNNYUVDSEh7Ny1UUm0hdFUrSWkmc3gx
VVBheU1NNXxVeFJOP1lRfSFJVHJ6VWs4filCYV85ZiF8UHR4NHEKek9MJXUkd2pPPn1sPXxUVz5n
WGY9LU4/YHc+KzVSdmwzM3ItJVRXSipuSDtSP1NnJWlHQzB2KGFfb2V+fEh7QTNfCnpDOSNoJVpS
YjAhcWM1TCU9Nld4ND1aNW09dVVpNz18OCF1Rl5gVTJIUF5rQyRBMDRwQE47ZjVCKkt8XkFmN3xp
UQp6Oz5EVGxKKk97Xns1Wm17dk9vVDI/dy1wd1pUWXIzYGBxe0QtbFYkaVgyTz91OTZ2dzBZMTRW
M1RhTHQhTm9SMn4KensxY0JwJChwdkFkUDhkQXpnbH5+TlpgaGZERTQlQlVWSTVHSj1PUW4qM0lf
SVhXZSZyP3V5JiNkeHN0OXpraGh+CnpxQkE+PVYxSXI1YkBKUmhLaT1geTRSZkNSPlZAYzUhO0s0
O2hBdW5CRDs+WVFIdCgxSj5efF5oeE1fKnxQdyg1RAp6U2hyITdPbj50KW57RmhASGhyO1pfV0RP
X2UofFJsdVlYcklgZVclXl5pejhsRW15WC11SEpSeEcxfmxSOXtjanYKemVlYlE+ZXJ4bFZgT2kt
Sz1BNkdEPlZFRk9CWXkrU2Y4cDsobSF9cHpLWTFCemVDSzZMeFpiTkIqSW0xeV9WdWRXCnpGdmBO
Ym4pSWYld2V7NWwyZCtCMT1kMTwmLU9fMGA7eCtJS15PajBPbW92Jn5xUSZVN1lYKy13Q3IzT34z
Wnk4dQp6I15sYiRANGIyQ2Z1cHJrPWwtWWZpaWFqMylYSWwxaEs5cjYpZ2lsJD16emFAR1hzVEM2
byM9YXNQWDgwU1dtU24KenhGKTVfWC1HeCpoN0ojKDhmcmB+ZUNVRGE9ZFdFPEphejZSZU1eJSRE
ZUFoNWYwT1hmOVheVj4yJSNjQHp5RVoqCnpHO35GYT5lYX54YGR3TnBGRGNQX25KTystUSRzZjw0
PDdqRyV7aEMySSY8IStiNyVGezNrU3JnbE9aUj5LTDxSbQp6IWhhbXpCbj9xQ1F0P0UmVkI7b2Vx
fWFHMHREZ2BYR2tqZHNxc0FNWEc/JU1GQGlQWHd5c0VKPnRPNU1vdyYlQ2EKenQwb2AzciRfTEwq
V1o8Kik/Rm8+QkdgZjc2M3YxX2MmeDJVQX1kX3V1OGgpNnB4ZTB+Pn1aYDZTRUs3aS17PmU+Cnoj
JWE0OTE2NTM4YV9PIXViM1F4cGZFcjxLKXkqYWRiP0skJkxIdSg4WWdUeThXamlGSER+VGQwZjRy
SXNDMil7ewp6K0dYO2lnRGpfaz00KHVEeTd9V3pmNGhJLSN2VGBjSmJERiQ7XzEodzs9JXhMeVoz
KzYoMF94UDtHbnFYdm5ldyEKemohJDB8aC08WjZXQWZjKzleMTVNI2ZQfDQ9ZyNjMnp4fWlYaDBe
U25mLWpPYDtoJUZQcD0qM2lJM0hqLVNYPzN1CnpHeDd2YFNUMSVjdiFOSlUxbyp2V2B+R2M8bSVh
LT1JPHhPSCEtckNvPTkqIXwydkA8QVV0SS0tNyNMWjlwZmVFOwp6ZDloZkhnNzJsXl5GbHwyNmJ0
MnNZRj9GLXVJKFQ3Tn5ueSVGfDxFMENSNThzZlFMTUJ8RHh4UEohKEtHQEBQMEkKej5VIVY1NVE8
dihtNSl6TEwpVXVCUlRxP3g1ZWQ/UGwzUTh3Tit6blloeSQtPCRoRDJoSl5NYklfc2d+P057SWQ+
CnpfUnBsS1R9UHlub0ByO21tcHAkMzZ5aTBzb0BoNyZETWxLUUh4JERmM2omNVdwWHw+VndPdmlZ
an4obV5nRHJtNQp6JV5Yd207QW5RbEdwdXphMmVmZygqWmRSaj82fkY4fDAxTVVVJGokLXFCVHJZ
PkslWUAqbGRBOSlWZHtHOWZDREQKejA7ZCh8O3RmXzYhUVdKMXY7XkxPLUNgTmpgeUAoVlE1IWVX
YWRzKSYrbkJzKHteMVkpbiVzT2goQjFVRDxSNzw1CnpmUkhyITh0KzVXJn4rWWspR2dFM2gldU4r
dGteNmBpUUo9Z2xZR3c2Tl9NPDRkQ1RXX3RYTyZRaXxZX3BYMHlKUgp6cTlYOVdyVGxZdVBQLUQy
SyoxTG02SG98azVCR1FLKFpvMU9MWkQrWkklemBSOTUqWHlXUF5gVzdNYSpwcHNYZUQKekU8Q2cz
OCN8KXVlYi0/aVJQRVh0cVVqbSVnUDZPZUEoUyNTVWVIPHY+UFYpWHFBMENBK2M0OCFHWWMpMVZm
UD50CnoqbmFRYmU9YzE2YD0qfTU5U0NpZ3FKRnlCSEttZDFhTyZ6RWZJXiY/Qyo7ZkZTUk53TURN
NlVUT19+KVk0V29eJQp6R3F7fF88bColbntJUEF2OVdWRFo1U1Z7MHE1JSReVD09UmFiWnN8PDRv
UEpKYzJkdHc0O2kpQVZIJjt8dl9TWVcKenRgMEs1cU9UOH5vSUI1cGE0dCN6RE1kWj9MQzs2SEBR
O1VwYG1QUClzVEVqVik4Xl5LJklDUUprQTxAUXdvUE55CnpILVcjT3pVfWRDTV88e3VzT1BnZ287
Vjt5Jkh1S0YkbkFselBJUlRBdEZhWGw5a04hc0pRIT0lRGV3YCN2N0hMagp6QSZTMi1JcEBQNC0m
cn5UaUBtK0tkbF45V3wxb2lwd3xkeXcjNnpKZyZ9RHQwTUg9dnVJb1VpJFlOX0BVT01+Y2sKelZ7
K2ZWKll8SlR7PjY9bSQhQEQ7QT1HVGElJkVaRSEwK0smQVZydkEwKDAycXF2RCtFY0VCci1jUz07
V0NrYHZ9Cnpxd3FsNEF8QTk2JFZMaXFuPiR6RXtAbC1oelA3JW53RUgjdGt4K0hPJWZIJHg0S2Vj
aVV7JEJ8QExHWWVVNkRYWAp6V1ZNIXlaeGN5MEVfMng8KD8rRCs4WXxjczVhQGdrcEsybTNaJW5S
I1c1dlRTb2NRKiZvPE5TYkthISZHRUFCLXwKekQmYnY2UERuIX1CM1ZwVmp1dUskcEw9THhoKzQ/
PllsPWEtdyp4bns2YEY+UHRNWjBPb18+aipKcSRlSnFoQ0p4CnpfT1hCNWgqPkBnK3o2cFVjbFI4
TTEjQGswQmt0ZlohXiU9MVRfMShhZFIjaiEoYjs0JWJwS0U/KCghfDJHSnBPMAp6d3w/S1dfNE9W
dnw5Rjh6R0Ylc2swV1dBK14xdWE5WGRvYmdsUXxZd0ZZJD0xQl41Nj9KZl58SGFqVCYwdVZUIUcK
emw5WFJsITlka3Q/XncwdHU1fWxsSShKNmoxSm5MYiVNPl5SZUo9Xm9NZFJBbVB8Pk0mNll3cnBy
SmhuJTctRHZfCno3OzZoITZLK3FUZz1APDNCI0FGQUBsO2ptRDZYO2FwRXE3VWM9WTcqKiokZj96
d3NBREgoQl8reHBYTFdITFN4YAp6PCspKERVM0kwcVQjfVYlRWQ9bTxXIUtmJXdFNUxOMy01WSZf
TzBPQWo2U15aY016Vzc7cX55I1dzZnZPWSo9RnIKendndWdmOUAwcXopa3dCWjgpcylzOStwUmkh
JUhPY1hndUQqPDhUO1BXQWdhZE07XlFEcDcpaFZqeVYzWDFOcGlGCnp7d2FQUDZ2QTwxJkpqVjlF
YW1zQmJ2MnRMWWlMQTZtOVYyJF9hfTxmIUp4Wj8/dnlpKSR3eVk2ZEYwNUUtfURIRAp6KWk7aEgm
Wj5nYl9kcDtfdSpSXzVNbDs5UTZ4VD5EVnFwYUI5eUZneFM3Wnp8UCRwTUJHPFYofll2MWwhZ1J9
WmUKekRlQW04NXtOYk91PFk5TnJKKTtgPUYoN2NPbDlKZThmXmxaQ05oTDZTZjtnfW0mb2t8VVBB
JlhKaXFZQXlXaFkwCnpZUSFCNUAwbCR7I3EmUVMwXnMwSmNSd2kmKEY7TmVpQjY4d2NyME8xPj4p
PWhne0kkJFpKMDA7ekJDZ0hkdlhPRwp6YX5NO15DekRQeHBfQnMzU2F0aDVrRHEqUFBtZCo7JT50
b2JmRzxZYCFvd2ZHXjh3SlMjVFV1UkdLMG1VUEcla24KejZiO008Uk8qKD84Q19PT3Z2Xkckb3RW
Zlp5WW9QPTNzPiU2YkA8M1R6eFBOalJTazwhfEpxX2ptP09pTUJjRHF7Cno3PWxsWWhWKjU9UDdC
OXREeXk7dTRLPkprclh2VkIyNGsmbXp9bEVSdyYxdGh6eCkxUENMLVY5NFg7UjEhRFZjTwp6I0No
O3YlUHhfSXM0UytwNGYyN08lQHVSbmZ3bzQxKGRRdl9EUU88amJ2YWg3TFl8QEdCeV5tRiFYd0xw
cF9aUTcKemFvZDkqelMxLUctQW1odVR0cyppbE1SS2dCSTlLZFd8ayE+N18yJTJKSUhEbD42Ukxh
MkoqX0RWP1M+e2JMZnZ0Cno1alZUfkB1OHtvbn09X0RhVCprMmNQMzBeO2g8c00kQ3psdmpVajZ9
KDY2Vkx7SkNAKlEmJX5TUUF4VUZ6KUZ9VAp6aiE4VURjaEYoSVI/d0xJYV50b35qe28lWjNgOHBT
cGlxTTFAQShwdWlWRUtoZSskfEhDPHUpYlpJWGVven1JcnwKek9wY0tUKkZWPHJiR14jTzxid0Qx
Si1xK09IbHpvYyp7OFg/NDU5ZU9yOyoyOHhiT2ZDM0pzTllhZi1ZJWp0I1BTCnotQWFRIXo7MS1i
TmJIYlpqdjx4OElDKWckT2p6PEhuayF3aTh6ZDc2dX5zVT9jbmlRPnN9Ryp8PColRHtOY3ZwLQp6
MH50YjVsSzxDWGc8I2paNihGfmlhdVJSQkdBXk05Kn5IWGZsSWBhV0RSXjAoRGhaS3Zwc3sqamAt
WGQ7Yz5kNUcKemZWMWcrLUJTaWN5SnErZ15LJFNzNkslVTE/ekdySWlJR0BDN0o+cFoocEQzM3Mo
UWghPTdXNSlYeEJAZD9tRG1wCnpKZX0zST55QyNjc0haTHVQMzcoWSsmSCVoZ3wxTyVKUTFIQnBB
THFFJk94V2JQbWwpY2skXkt1OTBYWnlfdFRIdQp6ez9gS0ZDQTBlT2EkRi1wYnQ0UkV1Ty1SQ1o+
Y1lZTGY3ZDhHKGsrOUgkITZPSUx6MU5zQHtwUVQ4PGF1SGhyTEQKelVhO2YtZCV0e1AhUTM5X0Ex
dHtERFV6ZWBqO0dPMz09eXcmbWVVYnkkcXx9VUUzUlU1S3w5cms2TTVZamVTWmVZCnpzRTtoNGI4
X3FjRWw5MUgqPn1uNSRFMnZrRTJ4TyplJUwrWTB2VzdFYTtoPzZFLV44YjgtezlgbEJJJW8qaHNj
KQp6dz13emtwLTExSGB8U0lgNGAlZi1lKlJkM0dDbFh9UjRlNnl1YGteeDRQNnIoITt2Rkl4LTZl
KG1sUH5xeExWTkcKeilvekEzSnFBa3FQdFUlJj9kTnIyIzRrVHZfdWY/YzgtWHdIYCRRNSNSfGle
enlmOCZmJUkhbGpoe3lDY1dOYmtxCnpSaT4pcTVNN2RSZzN4O1JeeHI+IWUrWSRxZUMwN0FneUlV
SG9UOTtqPEczU3woQTY5ckRGSGkqTj9xSGdxOFQ7bgp6SlhKdHc9cS1pQChEPSVnWFp8e1RSRF50
Yz88SlF7bmQpNWw8PT8qK2d8NU5zbElCUjJYZVAwLSR5UGQqcT5DQjMKejNmJkdkNXs9MDwlWFp2
LT5xbCM9JFg5blMkM3Yqbmk/KnFWbnQ8PEc1QztDTSZeQWJKSUJ1M2V7V3UpbTZiO2hFCnpxQk42
S0ViRXxGUn5Ne3ZDPmwjSyRndFB+PH1yIyVoIUhTNWZsMyR7YXNBdHl6dXZzLSZZbUhqSndUUEJX
fnZ0PAp6ZnBILWBeWkI/bXErPmBqKSlHdzAqVztac3h8QG5vZzBgck5FKUF4UT16ZGNfa0Riel4q
KWZXKmpgN1IrVm83SXcKenUrdGUkJG4pcTRhI1phaktveFU+WHp3fkVDSSVYbGZCdFh3c2ghVX5n
PUVSO2VWNlIld0lARCFYS05HKyQjS2ZqCnpRRTlgOWl8Y2dtMzY0azI2KmlAWXhRKEw/VFJVQW4p
a2s3Q1YhWFBQbiNza2J7Xm8+Mjw7PTx3WU1ENE16PGJuVgp6MWM/fFpZNUNwX1hBaTlYdTE3dzN7
NF5wKDctcVo8SXp+Yz9FQGBKTno2cXs8QnVzWT1kKC03YChPY15qIW0qKjQKejkjaGhAMzErUVgx
PTd+eC18djYmI1peIUorOVB0TCRlbHshaEx0RU5nYjYjVkwhSSQpUSFRMTgrYmpiUUMjdS1sCno8
TmFtPXV8dnwtYXheSk8yUVBsST9VdSl1S0xlaTY+V2c0KmspcWE1eUtUeHBBaGBJX1pKLXEzNjZU
ZylzSXplZwp6Q15jNiR1RUUrPkcqQkloPXlwO1hYc35wNFklVjw+UmRUYEx3MGcmJGhmbEF5QT9t
dFgqQmNASUBUWi0qa2BQTFcKej0wY0EwUCpeS2glOXhyfiRWQDdVMyomT2ZMQE9jITlxYFF5eklw
JHlnWkV5SmFQaW1kYjBPNUJtc2tJUEY3JF4/CnpBVGdrMGBkQihOaWViWn1aYjIjI3U/Rj1WQ2sp
SEhiZGI2cVVBXndleU1IeTEqYkxBNTdsYX0pPU9XNVghSkEqNAp6RSh1QUxMM2dXLVF4SUo4QWd5
N1I9fWwlYEN0d3dFPC18ZDxGVyF6UkpmeWxtQU5KR1RnPEA/cWt7NTxgPXpLfDAKejcqQEdUSypn
KDhaaFA/OHFsP2pxU24jWkdyWU1fITEjTE9EblVXNGBRaGBofGdBWnpAQzhaIT1tJFlsNkpiX2lu
CnolWktXOHY9TndqI3BJZm0tYD9Db29gKlItMUY+UD1fZ19teHlpel5NI15KXkU0bkFyY1M2ZUp2
dE8hcjhuNih7egp6eGYqRTZYYE5oVyFXSilUbn1jP2FNVFc4WE1oMlExMngkbHc/fGsjTmhxanlz
V31EZX0tTntkK3NCYHdMTUhvWkQKek9TWlM2NVM9K30haUY4enFTbiQ0R0Q+OHVPalBzWDZhcj5W
OXJLeWQ0d2pgZldPckxrJT95bzVIWXQqekJpT29iCnotbU9vKTFtQCtMZWRrXjVsQDhCeEpiKH4x
IV9PK3VrJXBwcmNSZnB5a1J8endULSF8MyM5b0lzbntNWjdMZld7Xgp6JEleMEBoSXAtfChUTFM3
UVl7QHxneFNWQVQqXld0RFlVS1lhUmh1dSVEYHdwUHRLLU0pVUhCfT9DRXFOeCk3dS0KenZWaFZv
WWxBdDxoKDYhfThFNG5BUTxNNy1BIUVWeHpHLSlwNXFFQ0UtdWVGazl9MTdnKUtQRCMobT94b1gy
cDJZCnpxKWQ/MVAoPCR9RDI7bGchOD51ISFoND1QK2pIZ2ZrMzFxcF5AcENDc3Q/b1BrNm84UXAo
e2xtcz47WDVITVJYdAp6M0BLaEFpPnQrbUc2QjsyelNCPVhAIW9lJjlxb1BnaX5FU2tYVkxKVE0k
aWdmdDgwZChXbilAUm12X2twbk0kbWwKeiExS2ZRKHVDUnM7XikzRVorJnwxdVBZd2A0YD1qVVpr
YXhuPE91TkNjTEZkdTRpfi1YYTNvfXQlQSFlVzV+R3xqCnpSYFJaSHNFbSkpbHs5eGItYE1veUZS
JChZe0xKM3poYDFsfFokbVQ9ITxTdzwwZmxhZUQ0cFlDWWczVU00RWpjIQp6RVN6cUhxTmNAfjZC
KCYwVnlzM1JsZlJ6MmQtan05UHhrdFk4PmJOQEQ4Wlg2a2hhbmE0P1k5SnxHRn5FaVhWVioKej9T
NWZ9dDxJX0s2ZSE9LXhoZnFodytlRm1vUDgmXkA3bEMrSFE7PF4tKj50akFrLV5rUzBad1lWOXpR
cmBkI1R7Cno0N0twYCs8M1FUMFpHKzIlQlk4ITBWWXReZjtHcF8/N3dMPzVlZTIpe0NgOEpGOWFE
LThnQDxfMDxTTklVO1A4MQp6MTlIdXtyayg+NGgzbGU0ZFl7dFBzUj93ZlAofGImdH43P0oqNVI+
WFRNb2s/P0xkeEZnclNWVzROUio+QTBMaW4KekM/YWl3JWMlb3tFYDB4b1MwRExwIX1+b0J1ZiZO
VilWJjVqUW5ZOG1CcyMhP18/RUMlSDBhNkdOaig0MWdvQD1JCnpEb3RjRGx7VEl8c0F2a3RkX2tM
UGxzOGd4QmBZd3RLVmprS0F+fElWQyRhKkY9a1cyailfIzIzbipsYGFKNX1vdQp6d2E8ajN5S1Yl
R15EN21ieUJsJj5UVTNSQitmV3drOyRYP2opaWFZYGV6OU84cig5LXFkXzxTWmNeazxmK0xjJCgK
emwzQ21eQl51QnZAKE52aUs7S3lTLVY/dWxib0FLMCgtNigjeEJuTUhwJV5xb3Z1PTNGdHBKdDdk
UjMjQUJHMDh5CnpHOG4wOTJwYDAmajQ3RmY/OXZYR0RwRldtcnw1dTNLTDYkO09XciVSd0lANmde
KX40Rik2WEQkRCZhP3RUP0JAZgp6R0xfP0oxe35JYlpuRGtkKVNWSlJiPG0mK2xnVit1LV5kOGN0
JEMtOTQ5MyNzWWhQUmEqP2t9Tj14bSN4Z0hYPjwKenZJc0w3X345ajlmR2cjeV9WSisqeVRCbzl2
X3o5YCg1NiRAQE1WY2NFQjZZR2VwIWQtd3I5cTRYMWxARHZOdVJeCnpCRktrdHVRK2shb2tOY1Ns
R0ZRfDZTcDhmX2l5LSNUbUohWWk9fi1yeH5QSU9we315MF5vLUdfKkVVISQ4dWF6Vgp6MiNBKlhU
WCFFaHs+VyhyPGVKfDFEZUZSbmp8PF8pPVkxfj9rP2pTOEI8dGE1N2BfcWYmflJlM0EpcS0mJjxf
NnkKemd2fHctTFIrRE1aZ3h1bk5LRlJMZC0kOCgrcU9QKld+ITZpZGl5M1I+T0YzREQpeTh4PlFa
M0dxMyRyRzh0dkV3Cno+RC03QDczYSNFTDlyQHAhbjwrfElZQjcwbFRHPWN5LThFRmpYYEVWRH4z
XnE4Iy1ReytMJTE+PkU3akVZPCY0agp6I0pmWjBLTDc7eiNkQX1vTkNVdEJfKX1uQEBmZj5pZnQr
Wl4yUSg/RXRXSzM7aFk5cXFMU0IldDwkZX5JP1BeUygKemBGaGRIVSslZFpneSFfVmQoSyZqKnpG
d24jMVN5K1Z1RmMwWSF2cmY7SlNsQHJIZkBGR35ie3YoNTZNSnBzS1RrCnpYYUxINXtNXzslOUAl
JlJmZkE8b3A+K2RAbmxQfkRtdyR1RlR7fUs1JjlSNVE2bU5nTU01PV9VMURIJihLQmpkXgp6NFh7
Sih1PUo7SjFgcysyPWtOYUpyclpBTlMkKUdjNFRRU21kPW8tTzJ3KEZUJGJ7RWdVNHB6dE1wVEow
WU9rU2UKenJVKVlEY25wYHZuYWhPNnJVZUlJeCRWJFJafWJ9MD9nV0B1cFpgV2FyUUdZYDF3JGI2
QnR0WiokVnVvWjFPZyR3Cno7O2gtQUFXal80alUrZnlBSFRuOHRJYFJhMnJEMGlaTlJoYjZfMSE8
OXdnd0pkM0NAfTtEZzlNe1FiVFNKSiMoMAp6c01HWW0rX1RSaj5LVE9wbmc+IypSNWcpTkZ5KkVS
TyMrZ1NiRCoke1hlfTc/VHdXSTc2Qj4zN041aiE4Kn5TRmoKek9ATnVFZmk0dWM0fD54aGUweUB0
UDZAPzg2PEJ1bz9LP2kqMCozVU5lV0VpPzA3PD17TGo9ZGRBSS1MY1JAO2x5CnpSbiRifmtjIXpL
UHY5bCEoalpGXiRhdShuRm0lbj9fVHliMkVkMmNFcDRPaDtkcWolYl9QaUgpNDhkI3ZJNEF8Vgp6
Zm1ASVpDSHwwQUo1KkF7R0hJTUQ4WVZeMil8XmkyPip2LX5sfn5HQml9YTdQKXElWFchQl5ePzg5
WF45d1F3WXMKemB+PTE/SGlPRmopQmZHRmV8fHJVaCg3Sk03RDlhbGV2d3stTFhmQm8kcCViZUpi
a2RqWV9qeTQwKUo0OzdyUjtQCno1RyRzRDk0KClROXhfRzxMWFRtOT9lKmh3b1UtM2xXYCgpfURw
ZS13Z2NfNVJQYzdUe15UYGo4RG1KcmtsWENgeQp6YSReZ343Z1g/ZFU7WWFVXzRtaEdXTSgjIztT
WjE1ZGBqeWBwaTl0KW5PZXZaP2ZCeEg7NWYrJnV6P2s7KldMY3AKenNrSTFyR2A7V0Ula29uTTk/
TzB4NFBBdihSaWg8YEpLV1RCPShadjtUYTxjaWBUfUYxdkZVfXlJflVIb2Y2RmM0CnopdlB8ak9h
WCo/OztQYDMpQkdFTGJgSUQhRzRYYmExQj1oPD9USFErJWQrQXFkMkZ+cmxUTmhSb1dlTFEjQmVF
OAp6MGM8Q2FNWE05VkY+Uzc2MGg5YypQcnZvIytRKyZHRTJHUEw8IUwkJEZXJjw7MyZafDhtK0h3
RCtYKiMzcVlZJD4KelNROzd+d3h8SFlzVHpgbyROVUxhJGYmTzxGIVgpXlcmUWN7MmNON3hkSDJl
bVlEel50Z2dYQTkwK0RQMntfbT9kCnpOSjlnM2VAb1l8OTthOW5WUz4mSjQ7MGhgTHY1TGNuKHBS
PDxeRGp4Iz5FRmZyQDQ2SG9zVTB3XkVaSVpqSn0mcgp6byY/SmhLIVhaQCR+WWVrayZiNE5BIyZK
O1RfI21IIU9IUzdGd1RNSWpTPmZ9OUQ3RnlVY2RGcCVHKT10ZkRzajAKek1ocDxASXV+PGxyZWVh
Z2pzbF9odjk/Smc1e2F5JFI7cig7WF4pSmglI2h3bU5obF5YKHhlbTlwVjYyS1JHJT0/CnpaZkEl
d2hTKUNVNGI/Y2ZIVnZmS01LMyhAe2hXQ31fQmNCLUElVzF5OFVfYSE/ZyY2M2F3aV5ZI0pUd3oz
OTZlPwp6JUYkIyRoQjtvR3UqZ1pkeEwkQDx5U2p4NV84QCh0VyVSS0AhQEJzUGcodlA/M3BQdExg
ITFOVlA+UTxyQFB8bDwKejQjNzlCMUpKe0RNcjleYWJZblZQZDlIMyRJWUBQPnh2M0hjT1BIWV42
dXRsNTZ9I1g2P29kekRFMXRkQExmdiEmCno5alYkYipzfmo4bWtmTlQlPz9KRElaUCltITtjV35n
WG5IYFJMbCVEIWRfS3w9QHBaJFlQR3ZJPGZNfDZsRGY0Qwp6NzZ2UHh7QWt+Uy15WGRUUVRsYSlP
UWo0JT0+flcmJGAzfjFiUzs/QDJzKSVMSFlkfF9ZPW5UM2x+NTs/amRGNTAKelFSZXdnam1hKFp4
OXF3NW1VfEpgb1pmZS1ZSH0qd1QpKmZCa1ohelEkUmArfjVwMy1kc1g4emNGeTtPSSlfaVRXCnol
cFFzPEFxZkNCXiNmRzxYeCRASCl4LW5eSkszRkp4a1NXdElHQDFyKUY1Uz9vJWhEKEtSQGtkdlRL
aWY1WWpnSQp6KX0+JkM8TGdFX1Q1RDRsKSQ7VGN0YUpnfVE5KSQ0RTlaeUFYPkV9MFZESz87c1Zn
KCEzWitzKDdLWW0janV4dWUKemZfZFBxYCp0ayp7SD5RaTFgTjtZbGxsR3dwJDNrPUs3fC11M1hx
TzgkbG44O2ZIMjBPYnEwSjVmZ2w+fk8xKkhOCnpWQCZjeTVnN24wSzBKQikqP1R3cygwZWE1ZDg4
PSVuKkNGcUBPQUpYcTctLSFjR2tjVUJpU0soVEl+QHUyWktYSwp6cnpHVW1YfWVmMyQ4OStMO2w2
TFRyalhBWUszQGYoYEt5I3VlIyhIeUJwZktqbUNJX3gzP0Y3LUkke3RYYHIoazMKem5ld14wTCtt
KUEyXiZaM25oP0slI2d3e1B3SjBoeUkzLVM8anwtWmIkK18+cGRnODYpUX11dCNYRSEybDVyN3sp
CnpeTlM/SjNZS3c8dSs/VVlrNU0oQ3lBUUQxTHoyO1VqR2sxbV5FXmA0WFVAdjAqKHw5UEFGQD5T
NitGSEx1I3habwp6YDBsK0kpfiZ0KVZmNFZWZWg1fG4hI2I2N096PG83aGRgR15zU0x9Y1ZWKkIk
cylmK0RmfnVlIzxMZTVNdlkxKlAKekZFTyVzQ1g4dWwwQXN0flR6YyV9PUA4PWJle0clI3ApQUw2
Mnk8TitiND5fREhtJXVKOzU2WjQrRTcqcWc+PkAoCnpHZEdyU2oyRnhiWXBxUUhBK3ZHZSUzRlYm
SnZCZXJaPCZye21WUzhOdk9YdzgycW1peGcwWHs5RFZSQSRHK0IhJQp6STlpZ0VQYnJMLUd1NXpI
UEstRUpaVzYkXks3YW0mY1JxUDw5dTFNXis3KntXc0dvQGNTOVM7Q3pqcU5wWiNxNSEKemZLSXRs
UXFZa3NOeTR5O0s/KzIzRl9AfG5kLSVuP1Z6QEN2QTFDKz0zZmpQcyRYTHF2aFo3b34qX0NVYHtm
VCZ0CnpxZWxaeUNsfGJRJEZFOzRgbTdoOEdydERRUDFEIStCV18hUExwWHF0XjJ9eXwqcUpnWjB2
M2JRS0IkZFVXUFhsSgp6VFAxcCVaWjEwXnczRV5OcylDS18qRytWWCM1QkwkRGJNa0k8Qkc9UU08
LXZ8e09IQ3ZyK2A3cG5kPVo4VG5XJG8Keml+Xj4yQTUlIUhAb0VOSi1ZTzQ1b31eNllQWkA8Z3hY
PUoyKDR1VyRlU1lgaVViaWZ8RzdYX3Q7MF89UlM+T2tnCnoxVz5VPk9zbGQ7RkF5ZSVMdTR9IU97
LSZTNz1MUytFZUN6eiE2KVg7YH0zeXs1UUp0e3BWcz1nNmVZaStIUlM8YQp6XyNOSXdrYFQ4VjlB
WiNnYWdSeXZBNVBMXnUwbT9DWVdBOTs2b2hHNVpHJE93ZlNVJiFyajledDVzVDFUN09VVUQKekF+
aCE4ZH07Um9ldFlgeVN4Qzw0K3RWe0I3VCQwUFReZj9zUkdEVSQoQl94QnEtSElKTm02e0FMM1Yk
I252SXpWCnopcXNAUl40SWsyZW0hU3dLIWNJO01TUSlzWW1oTTdCfk9oXmFGIylNQEF+QS0jOzth
VDV6Pj0rSHpNbTh7QWFLTQp6WDEqQDNKVF5BU29VcWNwYXAjelU9TmxPPj04fmNReXR0PERqZWA+
WiNeMVhoe3tGTUN1MGIzJWM7a3l3UkJje3cKej8jSUlaQn17LVJ0SUVaKUs8ZGx6aWMtNSpIZEx9
P3MycDI5RHF2PENsaVBsSnxNeTNhe2ptWmxZa0o+THw4cFMqCno2MmZXIXIobm9jNH5mKkp4Rl9R
PlEhRDlpTS1kYjJiM3EjJFhSPzlYYSZYellTRClDc2MyYGYhKkkmcWxQfkduaQp6UDQmYlBjI0M1
LT0telhCQkE7VSU8d3JPXnluaTRyJkpoTk5lWCR+VHMzdnR8JHlCU3stbSNWa0V4RVA+MDRtM3gK
elQ9TDAqS05jK21eaygjKGBfIWRWeGdgeiVvSTVLR0cxYTF5cU9KLVBvT3JCK1JfNDAjZ1cqOH1N
O2pnRT08cTQ0CnpmcnJuclYqSGUrVThwcChjdXRUMjY1ZzUoNUMxdiY/ZHU/TnJ1V0AjeSZjaTA3
PUhmam9qfGFkbVJZMV5MTUAqZAp6PVNkQWchQk0kekIqdGU3Sk9Rdz9UWFhFLStLMFpxNFMqaWdg
KENOOEwqOVlYdVJIKnQ4OX0hTDRXckJDWlZraEIKelJvSjRBWWBCUS1QRlAyVj5PNztLPUJrJWN6
RCV0VmJhVGF5RDkpdStFMHdIdjV1fXBDdWlkdFAhYD5Ick0qdEBfCnpifEJRMzVBLTBURzw+fVd4
VS16LV47X2NfVlQ5eHUhRH1NP1I4WDdOYGZQYjNxM3kjUE90MW8lYUNYTCRTeEtyYQp6JFg2dylB
LUM1KDI1VCswbHRaNlJhUmhFS0FOPSZ0PT97KnFgfSpHcSt2ZTFkQkVZczR7K2BfamY8PyV3eGt1
b0gKejVZMD83aG1FLWtBPiFscHZuSGUldXdeLVRAMyFVNytgUn11fDE8bTZ6SCUqdVk3R3F7SzJV
KnxELTlzMml6JE9yCnpPe2hnckI/S3V8KDQmZyEhdiZSNkp4SnNAVGBmRyNMbVZDJTVMNEFHRnNo
OXQpZ0QrKSVoOCpTJF45UTVVJF43SQp6VFcyQzZfP21RJjZteyFJMnBqK2lwOUJCP2QwcllDV3N3
d3x1cDE2ZHVwTEJLemFeNWgpVEtkcGxhPTkzMVRiQkAKelI5eGNfNTtBSTs5UDtSTEk0KVQkY2M/
USN5T1k3dDcoQ3Jeakd2YnQmKnxFdXNzVURhMHU9UG16eHcpX3tyfXZ4CnozaSF7PXpRezVPZ29A
ZiRCVTVNPXA3Z2ZDNnpXJmclcFFmZT1CeCsjUkUjXzI2eGhWd1ZGRCZUO3NDP2hybFgmewp6Yk45
IXFLSXVMRztUTGNsOzxRb19NZXlOa3BNXmpRakFHczk3ejFLaW0xRSk1S3dBfF84QXJ6VzB4MmE8
Tm52P08KensqWU5jZmZuWThvSXdOREJJIyh8b0VEYmQxfkJIblByaEVaZWRTI2UjNHlxdTxPdDF2
Y296M2Y7RF9BLTgkO3hoCnpqMGspa205RDgwNyY1I31FKWA7QSNiOVhwVzg+akhGWntDZ3dqTXsl
Q2huND1qJnFrSC1kS2twQHw4aE1MfjZ4Pgp6SyFjJVc9Uit4OSZQPmRXTSo/UH1qVWB2ZUNrbEw0
R1pnaCgzNlJfQiVlcDZzSENxPzdAakZraWQ0QUVNK2p9PCYKek9XPjNnd1JZfG0ydHk8QTY0RT8/
Rmh9YHtLdUY/WEktOTtZdkJ2ME5NdjJWK0BzZ2RTJVBIQmNleiMxQVJ4Pm9uCnpJbjJyWFV6QHco
RExmKzdkLUpMWTRGVVgpd0Y8bj11WWh2aVl6OTxVJkNxfTxHc1lpYmNUX2QzMV9vUXRINDkhaQp6
X1MtamV6d09EaTZFX04+RV9tezQ8WiY3dk8jXnFrbWdAbFhacW1jRHRMLTlFb3o9bzkzYVZeO3Eh
XmIwN3ZGWioKel9yRT1KWXxUVTlfNEt8aW4qXytpWCl5Q0VGeGVDT0RgQlNKI3Fnd2tCR3s0bClK
JXB9TEtpbzdNK1JNbkxQMk09CnpzTGpMYkN+KWAleDhKJHl0NSo7OTNoS1I/RiRuY3Q4ayNCJmV0
NX4jVT85NE5SS3JyVitES0EzQ2VsWDJXOVVldAp6JDw5KDNRWkFVKG1RRnRLKE12WmsxVTxwQHpR
X3xQZ2FiV1hvU2crfWRWRC0kUCVzQDNjc2tCMmFOMHBrTV41VUoKelpRKlYjUkk3cE9oRFd+c2I7
RFA0QDFFK3c5I2JmIXMwVWhXTEJgeFUlP1FaMjtlWFpVMElTTkN4PyN2WE4tamYjCnp7OUxAciY0
d00heEpxQnJtPWlUcXdkM0p5MDxMLWxjSF45YllMfWxfRH1vc1FaUTFWbTR9RSRIPXcoKFA8PHw9
IQp6KVU4PFRSQk5ZekFOdk9FRHNPMWwkMnolfiFgcWRRUEd8QCsyQCY2PiZfeDVuZ3RqPGZRLUNf
S3sobzx1U28td3QKei1YOG5LdEhwPzVNSG4qPV5tWCowQkF6UmJ2YElMVUthZXhTZExuKlU5eFJM
NCF4YW1gWXBkfXMlME4+I00xdDlqCnpFfWZMPDJQNGdudmo9fkQ+OWgoXzY0bnd5WGpSfF51a1pv
Tld0UTJuWEBYdFhYX3JTVnRZTW5JNUdFRGRhaGo8QAp6Q2k7cTlXKkQldDs7fEs8eSMzK1ZZJFRB
NlgpX1Mmd21IMyNtOyZkbjlTMSZBT2xLKEwodll6b2FYWkpFblVjKz0KenZSMiFNMz5nYEJrMXU9
cypwR1lQPXswVEtvN2ZQbF5NVm0hS21eYVltPDg3QWdZQU4zQWRrO3l2QHw3RkFWT0RMCnpNYVkl
eVJ2fFBkPn1gTjgpdG56Yno0P3Z4WiM+dkBRSGcjK2l1ISFmN2dOUktoS3Z4YmVXQjU4KmtYP3dH
bFhPegp6STlgZjNzWkxTMSomV0VyKj0ydjE+YElSWClEJnVfcEoqb1h4cFpzO2hYR3JWZEFIclg/
Zm9fTHxBVk9ILU1gJWsKek1fMGkhYzF4aVVPSno9MDdfdmUoKko5I0c3PXRHUio7cGdSWHgxK2tX
UEoldCUje15aNmcqI09Yan52M0FsMiRfCnphMD5HN1RWSnBIWXtRLUZkS1NNYHBhbnhjKiFsUEpE
O0F6VkE2Iz53UT5+IV96TXB8Xz5KNmdVN35laSNYczJBLQp6cSlqYm5eUG5ORXlSbS1mbE1sYlJe
PyN0dyZGSV9sMDBjM1IqXm10e2VFbTljMiVHa0BFRylTVF9BJj5rQzhEdV4KenY/KnRmPiUjZClH
Pmo/NnhgclpIb2kwN1BZU251bXtfJEhjOThxdExCVDU+RkE2dHhnQGkyaT1PKT08JE1yenhFCnom
JjBWPk1OUSF9IXA/TT08ckczSm9gN1EkcVNMU35rUTBtejIhbCtwI0c3O0V3Z2M7VHVBNGVQX3xO
TXhEWE0qXwp6Mkw9LTBKNDVlREx4YUpGKS1fbmBJJiMhakx8b3QteHQ2ZHA2bFcydlcpYH5hQU1g
ZyRIY3dHSzk8P19uUGtnQHIKencjUjtXdWgqI2s1ODgobSE7NHwjXjZQPEtwaWFJJXF6PmhwO1lM
KUJiQT54MGRjUD44bGZkcTV6TFJ5dzg8U2dLCnpVYTt9Ozcya3BqN1haSTZLOGxFUzRnOHg3RDBO
NmReenFhPTA1cH0mYXc2Ni1vRkEwaFkqdkJLU3ReaFI4RyVYeAp6QyRIZFlLNFYlS04pOCVoRWdy
a3BwI1heQjtDLXU+LX5HXzk2Ryh1YklCSkpicFo7Vz9OOy1CfSlkN19HLTRhZzYKekB0RkY5PEZi
YWE3ISV9OFJ4K2hodF9hMnhPdVBqQHojQU4/YXxDMGZvdj83TTFmYSV4YlY0Iz5SfERqQSYwNyF0
CnphUFI5WSEwcHJZekYmcVoyKXFBPHBKWSNtTFlFZExaTXNKa1JIJCtUal4rU1c8Qj5LTi10XzFy
ZjZ2KnVgRnc8eAp6fDAoYTZxVkJqKklGJjBmQEd9RXp6K3JfWTtSdVpuSHdGZyNlZn03Xj1AZTVk
Z0YmclFyfHltZlg9UnlXen5kezEKenlNYy03Z3N9PnktR3d7dUl5SmZXbT15VXdzb2JsWFFoNEt7
SD40cSV1R3thVDJMQEdDYWskMi1hemc/KVdyU0ZrCnpqI09FfW1Kd1QqYmo5SXtJOVh9Z2pFLVFO
MDF4dW0pVXBqRDlQXktiSSRkZkZBa352TSYpeGdtSnYtTypkfjlLNAp6N2IwQl5jRnJxLXZrZkxS
SlFgcyV5JUxgfVhMcDdLPCRpITYoWVQ7PUs3Vk5JKX4kPTUxbGBCPHo2YkJAVyQ2flkKeihGdlI9
WHhFRiFzMzBGX1Y3aHxmPVYxcCo4bnE0e2w2bCo4PzRWenBWY1lPVXMxKzsoUVUtMiR4VD5ySHB2
XlNhCnp1Q2R6PFgwbm9AYXBpUUliOWo3XjxwOVRuNyRYO0ZDcyRpczJATEsjbCRjUkdzSWx8NmU2
OyhRYDN3SCh2QXAhKgp6Q2xIbj1WQTN2N1NfbmdtbC1jWT9IKiU1KSVNPkRXNkV6bGt6fShpeHJH
JjdsNikwbng2UVFJPjEhfjJqamp6Mm4Kel9oQGUlc0orJDtFZThCZys2byspdWhXKyRpVUl+dD5X
KU4qPHE0S1dxJUZZKCMjbVRtcGppcmxnVHFWVEtDb2xRCnpJfHgpVHYrd2FJODQmNlVXXlllRDBu
PWotQmlwTmwzfnNzO1NPWl84REtLLTVSP0ZpUU81TSVqNSh3KXhobzhGVAp6KVJyXkkwcElrI0ZY
b1JUezNxYil7V25OTHE7WjhZOSZhVFp7UkhadXA0MmFhRnZXMGBzSyRgIyErWmtIbD1FPnQKeklI
ZVpmVkYxOGo+M3N7MUVXWW4rPGljckktPH01OC1+UXNCSHN4dVQhSFAlNnBiJHFzI15LNHhWc31n
TGJKO0QkCnp1MHZ8JWomPlc+WDR4N3hTMVVFbFNrK3dNamhnRWlRWEBVMF4pcC16UCNeWEBAWHBF
SU9Gci07KHpVTXZePGZ1Jgp6NFo8V0g/KXd4MjYwfTVPYUpxO0NfSzJoRmt4YCpzVFFYOWY3Jkk3
NClfUkEpQWFib2BUTjdLQyleU1FnTytTen4KenhSQjBoe25eOD5lKWFjVCRYO217KmZJSmM2bUlf
NnNmPkN4WSttRkJicTV7Nkc0TGF7a3AkNztSJVFDVF9OKjZjCnokSyptckM3OUUxSWtEPmRkbWxO
dXd4e3p5Q3g0ZnNVTl5zbGFDSlZzXmRMQlUjNnZfWm47LTkxWlE1VzxScGM7WQp6VVRGfWA2bkNx
TmE3YWwtWXcmRD1JMF4xMipSUUB+JClVZHdfej4tSEpKQ0JST1R6enM2STM0WTJuOHhoSkBoKFUK
ej0kOCVBKCo1RlV6c05HSTY7djNgeTFISTc3bGF7KEEzSEU7SEhefWZrcSpmZXdkNHt1NGwjYEhR
WDcqU3d5ZkZuCnopJX58MXIqPD4/JlJvISk1KU92X3Z4fnMxRVQpI2hzfWRIUTMwd15qV1JHWTkh
LVNYXj89ZChCc3N0ZnU+NmQ8Ugp6LTxAbWJKQHxEYCFaVXgzTmxeeGUyUHRJTiFscFQ5Rj0raENH
Rn5UX3FBXyVnT3cqUHQkY2psO0J+TVJ0VE9kaT8KenYtJFBPUSotaSYmOH1IPExXPEliZT8rajlP
V31WYClGZEhrZX5Yb35LfnolUlFxeTVJTHY1Pm1QJE1UYCQ9Uj9DCnpnSzEwcGA8MFlKSlImbClW
I1BwNU87TDN4V0xRaWorLX41fXhmSTl+WFYkIyk+bzIhfGdqfDR0P1NaVSE3a01vXwp6eWIkMT1T
RSpyPGlrK2M1eG8pblVyZ3FUI3VedTUtNTxxU1FSXlIjMC0+MUxuVThKfj0oOyhFNmA7aTszb3px
fnoKeis2Q31TNmRZS3RSMUFhWVFLQm5sRW9uYElGPXlTKV5BTiMmU3MzaCtqVFlpfmYhPkJIam1o
Vj5ldCFKYiN9M2B2CnooQHljMF9vYipHLSZsYEdjcCteM0BoYnBMNC1xeDQlJE9FUmtodFdJISox
byoleHd4XiZ1fkNnJjNLdGp2LTxPVgp6R2YkKW1RNC0paFgjTCpULXJEYCpDc1RPKUoxKz9sSnpv
ajBgUXxOdk4rJVUqbGFuT3IhYVImb2dONz9MeWkqeiMKelc2Jk5WZWAzQFNGM3twV3M0O28oRTZY
Pn1kRyloLUomazx3SnNZOCpnKC1wa0FwVF9xa0FSeStoZWt7SVZRU0dvCnpCMUBHYDE8NUdXI3NL
QGMkKjxsJmBvcWNKcj9TVzNQcD9aK0h9dig2WDx7KEFXcyEhaUhfXk01VV82OzJqRzRWRQp6Tmt9
d0U/fUV8WmZtUF9EeEtTezhBQWtJKm48dX5laS1nISh6TFAwTXtZOUNKWGQod3NKMSspPk1CUT5T
P1pPWj0KenFEKDJ4SFRJOU9BK3QqQlkqfjJOaCRKPXkqKTV1ZzhkNDA0VnR4XjQpTXMpVGxIfGhK
JGpFU20yUCpyVEZNZDFuCnotTyZmWnlnSSNhI255K0Iybilke1BMc2dXYSRyT3YkaX09d2ckQ0Rg
NVFCTm1MTWUxZXFaOXAyc2dhUCRidnFNNwp6RntYMDdraDJNRFAoQlFUY0ZwVW5QVCUjfTI+X2Yt
P3xXWSFLIzB8MFJneHpPaU5SdksqX0NxM1N+X2lqRyEjaFUKenhgbTs8NVRoK1AhOFZVOEQzd3kj
MGtKcXlxR21KITYqb1B8WCFkaUlBJEZ4RTcoQGBAX2NsQ3M7UDRAMiE4Kk5mCno8dip3WFp2KVJV
Tjw7MzdoeWlLNSNzcyVKaCVMem1KZ0c2UGtVMjJRYTVOfWJ3d3l6dmI1ZXNpVzYpKzRQTi1aPQp6
Pj08eyVPR0dPJWcpfS1iSTt5dnFrYHBDKHRUYHFyazdsYV9nTzFedkJOS158Tm9oNiFrPFErYFl+
JEhgenxHNl8Keno2KjllaFJFfFRfKipefjNKdFB3KmErRjxtTUdEfXhgYm80bGhXZl9nYEA3dlF7
ZjZoP31nM29wZjFIfGpDT3puCno5Sj1ZcGYxYk1nQkUpYH5WXz0kaV9NJUc9P0BfPjJzUyhUcm53
bzJmTmNESlJVVyUmSFhAYGR6RHhXNH5CX3h8QQp6d241WXtDLXB+VDsofm1uemFxZWlocnc7WSFr
ZDVpYDxIdnlIeGFmNWRfQzk8MTZPMDxMVDw+LXRmPDBEdnc8ZDUKeih7YXZ9cHVwcDNSTC1pfnFC
RXdIYTZRUDw+RjY5a013d0V2Uz43bVQjNnM0RSNOYzlhIXtia18reCojSUxXSlo8CnpkbGpQSjBY
VXl9NVAmcEFWSiU4RERJeSZZKXFgVVY2fSlJPXNGVVZTMnpWVGhPNGlrczh8a1A0WSRvJjd4RXJl
Qwp6aFlXZlNJND1pfGY5SkVlWnZKQTt2Tj03WXtkUXZyQCEyeGA8KjZUfjBCYUxjV25PUElOPi1h
eGomUHVlQEFuMjIKempCY1ZxdV9uY3lYd2RFZzMpYXNVS1htR2cyaU5pdHJXZyR0cUI5TT1fUF8t
b1c7IWxMR3VPaHl2MktLaSkkcy1jCnpWd0hONyp3JmVZeHFPRVF6Q0d2Z3thPFhfXmtuYmI/RVFt
Pz4xNlE2THZiKlYhZ3Y7IW1NTSotKGhmejRDbyFjZAp6UWt0KnFpfFBPaHdgU2hIYCVpdGk9QFBf
TjRrO011ZTxKaWNGYkd6QkJMVlo0SnhXZTdZQzQrM2g4OG81KVVMeGkKelZqdlkxZmByelBNaEFV
YTV4OGkzO05FNE1vfF5sPyZBbzU7LUdOMjsqMWBJTHBUSiYqOyp4aGBabSt7dzU7NSF7CnpSPStR
LUVNbnElQUdLT3pWYVIjJkZpQms9cT4kbzFSP0JKNWxSPXFTfExmXyFBS2RaN0Q1OFkteDc+c1gh
aHIrbAp6RSY+UClLZE0oISF9JnI7SjB8Wj5DVXMoSSF8ZHtNYV9KJWtvRzxQQz9BYlQ9ZWZ+MUlY
YEk8ZD9gdUcpN2lhZGMKemk2QUB+MSFKaHYhVjNoaihQNURRRUlRcnhDfm4qKmxHZWdMdikzVlhU
SlhfQTF+eXY7NkdFcXIxMzU0KG1TbVZ1CnpnaGFZQCN6UDtfOCF9MGpSRG8zMnVVPGEoPD0tbj8y
elM0N24yM3E1ZnpRYGghM0x8WTJxIX0tb0pwKGRGYT0kOwp6VH5QP3Rudm9uT3M7QlRsTD8ydGRZ
fntmLTtFWmluLS08XiFOPlJRbVlFI1kzbUdISm4me1dhczljTiVyWVkld3YKekJqNlVnbU41Pj4j
MkEqPCswV3g7M09IKExxTGJCaUxVRG1ZMnU+P1dLdlZseC0yS3RZP3x1Vy1YTHtjYFNGRCFxCnpv
UiRYY2w7UXUqbjxXaG0paG9pYlpvKnEmIyZUb3psK1FYbWwyNkQ5JUB7RyFYaEB7UzJedTt7MF8o
YUN6REQjSQp6WT14MiRvSkx8bW5jdy0/P2djQTl7JWRPMEhyP2NnUH1edUYjSDE/dCRLVS0+TkVw
RDQrbHM9Unh7a0t3WktLN0kKenRfejg1Yi1iYUhhZCREQzJBJFQwWUR5JitAPjEpaW1iMFV6PipQ
ZmJQYTJ5NVc5Ki1ebW1Zb25zWkFnRFR4Qn5kCnppMElEJnw3IXloJUVLWU5Bfjs1Q083WmF0elol
VXBPTEUrLXFsQ0JCe0xWVHghaGxtVFpyV01aYTUhV2skPlhmWQp6KGgtUU9aeWJFJGdYaX1CRzxQ
Rl9gZSpna2V6aWlWJEtEXzc3MiFBX0pgUjYmNk5teEs3P3ZTKCVGMlAxeH5AXjkKelQ/U1hYRXt6
cSkrVGtXVVVSUn0pNmFZeld7UEthRGtEWlZzYm9TandmS2ROQk0+b351KVdBcCN4Xkk+cyV4ZXYm
Cno+c2cmdiFSeFErPkVVWDs8KWV+ZyF5Y05qRHAjQlJJQG1LPmlGIXhLMzh8ZUxGT0xIPl98TEN5
YERNJTVYWnsyZAp6JitQa35gbWh4QlFibVAwYnFCdFQ2IztgQSNjM0sjIW9FNUlUWGVkSUBfYChL
WSY1R2ZFUGhlb3ZUSTF2cHZ7OHEKemc3ZWlwSjE3cD5zbEg7Nk92YW00VWBrbllAOC17cyY2fHJA
WUlAJmkpWlU7I2ZWYldVUiZqRldmSEZ8RyleTCVgCnpfJFlfczZOZ051UHtiRTJpQFE4Sko7QDdW
YCN0R0FUMUVFfT5qUGJIdHl3MVkzb353M09mc3IkMjs8ZUp5fEwtUQp6X1dPXjJ2fnN+c0o8aVgo
ZHQ4ZTh7VG57UXhkUHQkc1QxVUpWfjdPZGVVYjQ+ZkZLYk9WKHBTOVVtbFY5NDMhR0EKelc5cmJO
OGk0bVBqSjdlWCN+bXRtS3o9KkNacjtZZD5wblclcWlEOTghMGhQbmgzRjtsPS1QM3hSKn1JOTNl
Sy0qCno9d3F5IVN5dGcyaHR0QykwcjxQNj44ZmNKJHkkQztsPztyQyV2YzNrcSNiOVAzMmEjPTRI
fHwmLWhYLWp4fDUpeAp6MmQ2e1Yyb1dBSGdlQDk/MmVNNFZXVnwmX1hiVENOSHB3fGI1LUg4Skcy
Szkla21xOUM8VXVlKEdLZFZsJDxyXlQKemRYbn56Un1MVmMkKjExaGRGUCs2JGBNRVM8Rz0+Y1l1
LWtnIWsoeyMybGwyVXApcn1GOD94ZGk9cDdTR1FDRk0hCnphKXJiYlh9aXs8SjBOZ0pkOCMtJG1O
Qkc+VTh3NjVSYFZQfkF+MmZEYmB5MV9LM15ZPitJYypfTjxebjkyXm1VRgp6a2BEV0BEej5RIXsj
NHd5Pis9bXlldHJtQ01vO2hpPmlBX3koMmNgdSRKUWFNNUd9ZSpjZT1JMVNmOE9HQGAqSXYKekFZ
TS1uV0hVQTwqTW0rNC0zP2h0TiVHa3c2QGN6TV42cG9Rd3xzcnRpT3spdCMqR0xhRWlCfDcwaG18
NDxqOzsmCnpMKUIxJU1mMGthUz1DVWhmTm5NRlZpYDMpN1ZZTVNoeXEyTUJ+STBfejl5ck1wKjlI
XntYb1JmWmJyQDJMYCY5NQp6RChmflhyb2R7QG8xb0chZH5FeChyI15VbzVjJHc1TEk/U2ZBNUx2
VGJ+biZPYn5JdjNuWjA1eUglUH59ZzhAY24KelU8QlJaWDNnYykyOzc9cldEfUdrWl4pP3p1PHJj
NSVRaFpmXlUyaFckczQ5Q0E9R0VycGI9X3YqbEhieUxNQ2NRCnoxWk54SyFiQystI2ExSVV6ajRT
Yzd2eXI5MkZFdT5oZ3stVkVXQDBqOyE1b1YmbmY0TzJqZEt+M2F1XkNqTkVlQQp6RlVye2laWHZ6
YTJ8eF49JUglKil7bSR3bVBrZW0zaHRiP09wTkQpKTM0Z2IqNDFvSVYxY3huPm1pJjxmVShPQ1QK
ekxpS3BWbDEhUD85QSZANCFLS3B+O2dMTEtraERkN1VYX3MzaDgkKDdHPSZDMHtWTk9DWmhCPypl
YUxfYHozJjk/CnpGVEBZSUBJQyhsQGJYbzRwXjBFfTZCI0NPTXJoRD1oUmp3XlNrOzdwXktOP1BA
I1BDdjlONkNyM2RkVjkyekJ1OQp6RkB6cm1qOSZzYWdPRjcoc35KP202Zi1XR0BIYjNHYkZyTEYy
MWQoYVBxITZUeHt7JVpjMDZ2Rno9YHh3TiphbHYKel5BTX1RPHJwcnVqalZ6PzNid1FSLWRWOHde
R149TjVWbSVvIVhqK1I7VGYzd3I2SH1xOVNoQCVJU1R9Wj9jR1g7CnpxLTVIJjZnTWQ/Oz93K04z
YWRBeCF3bkVVNmVlVz1ae2dNMUV1QUx9ZnwtVVpIbnIoNnF1dDM2PE13PFZpQD1fcgp6S0o/QHA+
dEY2MnIhOU54NGRmJEVgMHZET2E0QnRkK0xRdzxQU1gjQGFOemB0JTkwc2QjSzghaT9rQWdGJjlO
YTIKejl7azBLaSg2VjROZCpySl4zayMqVCNaaVhpWW9Sbjl0PkdhVTtnezk/YVBxbV43T3RyX3JI
amNjRWYoeyVLIz0hCno1am48c2pOKXZlQHVAdH5xN28lUmUqcD5jZ0JvbTZwJnRza3RzKjs0bldn
SDt0dzttTGloXyt6dVJpXzIhZ244RQp6akhJPmNlVmhOKEFnWnB6OCpsRmk3aWZANHBRUzN6NWgy
JTw3LW1XYDljaXVRWGh4TkdpZTQzRSRPQkBtNVN4JEkKeiY9TCozVnJXXjdrJipDdFgjJWZHO2B6
dmwtS1B0bGVCcmg0ZShpeUAtPm1CV0F+WHZ3PjtqbEdJJWliWWdxPE9FCnolfH1iKz5uP1hFeiZI
OWM7JnozZjdeeDloST42VTJYRSpLb2BeQGI8ek9IIXJOfjkkPCFKQlM5MkBvfHB4Um8+dAp6VGtA
S19MRyFEZGBpUGZ7V3ZEUzJjRVhnYE1JdCNkUypJQ19PKD8rK2F6WmU9e2R4RDYqQj9HUC0tSmxg
Kn1FMSoKekxJfVFZQytHQHBoPTtXKW1uM2V9Tld2KntqYTM7ZSp4RlczKkg+VjA8KnsrRiRORj5n
R3J6eGwmazhVQyU7Pnd9CnpeOWN4ej9BKUMyNFdrNWM9cWt9YkM9KURZYnN8QF56b2c8T2dmX1A9
bnI+PHZsa1hmX3cmREZIZGpWaU52cm47aAp6dy1vaTsqJmJ9fWdJOUJUUD43T0RZcT9BfWp2NXBD
aGkhN2NvO2ZOdj1LS2FDTypsRnozPThxWmgmZHo0MjIle0wKejRRWkMlSzZKO3NKRDJwanRSdEtM
Z0lONDNfemRvbEcmRFRrdD05RXwzSkg/b3RFNSY1aSpgen5jfEFwJGFmbiVECnpIVSYpXygxPGUl
WiNKaGt3cXZPUEN0PkMqYjR2RzYhQWRIMUxSfF9RbSZGNSs+ZCRCQSUtI09WbVlxRnFTSnM3KQp6
UGd2anUmc0x6MmNDQFNPR0pNej9MRmFCSW18LTJtQW1rK3E2cGJ0JT82Pzlma3lgQHxHeCkmQHV+
cCRLbmZtZ2UKelBmMlBIdil9Xk9yKWR2Skg5VjxJUioocFFMb0VIQGYhKFZZZStwWEM+M3coMS1q
MDBhenAmKmxAVC1UaFVHQXJlCnopMXxoVUFtZWJ5P05rckgoZUU+MmEwTD1KcjcrMEdoRSYxTSMz
K2YqbCN9VGxHTVN6cmlfSGN5VzM8JGZ1I3lCPAp6QShyYW9GLXt0Vm1NRFRGdT1SNXt7PD53PztV
MyU8YEo9YWxwOXdxdjAtQz83VGZ6Pn1hKVY/SmF9ZEwqNFRCQz4KeiVjT35EQVlhWUBWOGB5Pz1E
YSswQEJobkltSzYyUihjYWF2MypMVjRSc2NDdnNGO2UyVUIkYEE+KkdhRlppTGJyCnpRcDdDO1pG
TVhaREZgfFNickJqTVFrPGREMGtzb1U7Z0Bkdl5ZPj84TTFEQSkqJXc9UzdUYE8rLWg0ZDxDK35h
KQp6JW1TZjJta2dQZEk5Q15JWDBuTTlnSyRFV1FsUztyUWtaMF9zfERDJHN4fmVvJFhpXyNiJk1x
ZUglc2UobmUrU2gKenpqckx7UyF2Qm5LNHxCKD18RzNxIWZuJGRVPjtEfXFgOUtna21pcENvYml6
fi1ycHYoVkpLWkdXQE8tdz1rVUg7CnpwOFJtZkdzazw2emg/RV4oRnx8OUQrcXZYVyhPfGgrfHte
ZUVUcVpWR1o4YiRWOD43RmVDKnBOLTxyWkwmZkZEKwp6UC17TlBBaEJ+RXkhZGkoQz9ncSZZMTsk
NU8zaEdEdENQN1Y0fkpKYzJ8ZzhHSm1KTldzSWVBWj5MI2d1MSM9VzAKejhwWURFbGApR3VIPlB1
XzY+PmskMy1aezh2dUQwSl5taHR6aEl5NDlGaF8pXnQmJlBaeFdiVHVuPWZkJmdgI2VfCnoob2dG
fE1fdHlNRGpIfFMyUmk5V3JCSWhKPmtnb2Z2djI7cT4raUUqYCNQKTdSdWUlZS1LVV4yTERudXRf
O1c5fgp6T3VFV0pMNjFueSNFT2lhNzhweitFSFExK3djRC17O1BBVmplZVI+UEZNPDhzdGlEVUNw
c04/bSRiJEp9PWQ9c0sKel5DMFgkMEo9dHNUb1I7dm4xWk13akpFczh7WlVRSDN6d3NleFd7SSM4
aW5Jb3IlMmFNJF9SeGxlaik8dSU2clM2CnorViNgTiRsN3BiLXtxSG9CdD9+Oz14dVZUYUdpYjt4
WG1QR3RwTVomYkFYTkRTTW5KY1c/TUZuWnt0JmBUcWRlZAp6dnotak4rKD1pQkBVcSFMMkY9dUch
Rjt2ej5+bFo5ZWZyRzxKKT8wZyEtKU9gQEdXdyVjYCppenZ7PWs5OUlBI1cKekdTZXVnOFpLcj5p
NnRJTWthRFRJd0oweztIa0Rac09fK3RMbE9zVFNaSC1pRHdYSkUrZlUlOU1AVmNNQHZ+Pys9Cnp1
NnxHcXNeWD9PcFJZVCpeJmtLaFg3bnczYzgwV2YrOEJxZ2h8VU45bXs7M2BiT29RKmcjdDk1OXVf
QVdHPFReVAp6N099eVlGI24lekZQfWRBOTB5VjRyOXV5Y2ByJjMweFFtPGB6QWwxVWRMbWV0YGgp
WmFnR0swMWxZflpsYk9MTXYKekZgWjtuJF8kcUxCT0Vmbz1ON0kld1ApXkBrSEUkNXRpRjVTeChx
XnsrNThVfUhnLS02MGY4bSgkXypQcXomTjc+CnoyZm09cWBpQ3tAMDN9QiVodmkrcSp5aFJ3JGwz
fnklNHZJfXFXe096UzF7YUpUd0N8e0hsPEJAYH1OLTVkZiMlfgp6LVFDXllwWDJXQz1pRVN4VEw9
fjtYbjtgTXA7KWpHQWgtbzc4VmJRbmYjUTdvSXEmQGVYVTtxYGR1SH5tejFFcm0Kenp3MGJAMVg1
RE40elJ9N19pdyU2YGA3a3RxIyh9fVImcjw7Zjt8YWh7KlB1aVAwbilfamR7IXtEJmJpUENjaHhu
Cno/dW0+UG5ITG44UGtuYXpuYGQ3Ml97eXxrYmwzP25tKUdwdXhTeHVWaGZYfE5tMzd0fjlzcEd4
aiM2PFAhfWJnJgp6bkBjanFgPW9pXlhqYjZicUpaaWRYOHN3PnREZk88SUhnRnUtVyttVkxNZ3V7
PUdZMnkxPURLN3h5KVNgIUNwKjQKemxEaGtAVFRnb1dVLXp4eyM8djx2Ylo/OSFAMHx3PT9SUDR3
S0F1c2glSmd6RUMpR08wRWUjJl9GdT8/eyFEQ01OCno/OXQwISt3fkV8JER3UF8qaFQ4fkUxcHFw
QjxEQCFuRmYkLTxiSXpRbHoxcnt3SWJDY15oJCokM2tOTk4zPj97Mwp6U3UtfX5pOFh2fk56aGBt
MlY/UVA4ZipscVFPODJMUkpVbHJCRCZ6a0VsKyomPGRKRH5rIzRucmYlYn12KDlaYG8Kej1Xa3FY
NTxAd1A7UUNneCR0U1p+NFhSaV5rQS1XXk55bmI+I3NfO30wfkIhYzhzI0RvTHd4ckJpayNtPnVH
KU9ICnpEbDFLaERkfiNUVyppYHJ7K3lKPGdAejctRElLPFNRdjt7NSViT0Q8aEo+fmRtJGRNezB4
QDRxRGw3P0h3Pmc9aQp6KVpwIytvYytmQSQ4UExOeCskPHFqKCs3fl53UHtpaiMyPShPTkdKUFdi
SiZLbHkxclJkPnlsK1Z+KWp+bkYjeigKemwkTHBSPG0tM3dFP0twUW4rcj58VmsjREgpYTZNSXlA
cyNKeEdfe2NgX1JpZnt7Nl4tNF8xWkYmLSR5QnJINUdHCnoxaX1oa3Naay1KdXlpMXMyJmA3SDwl
cUlQNT96SX4ld2koYVNkTGxsRlNTdyRUYS0wUUFARHdhO0tlKClVLVFmZAp6dDk1JiEhO2h8OENV
WDNiO2JMenRFbU8lKzJyPkdsPlMraSNGMlRBalU/cGlCKV5WOyY4M3tOVmMzVjBqM1Y3bVoKejEy
WXlSYkg7XzdzSVF5UzJ2NHg9MHk7KXlNYXwzdDxUY3dyengwYGQqV0lFO0MrOXlIRTg7Yz1hanwh
KHZiPmY9Cno7fT1TbzRxQWQ7Xk91MD0pKUpeM081VVVyNiRldkQpakBaTUVYdzIoSUdXcj1VcT96
VlhpIXhCPSUldz9gfVMmLQp6ZndwT0ZeQlhIITcjcTJKUzV1dWV3N2YpUElma3s9OWk0Mjd6JTht
TUV3X3pMN3I/NUNnbzh2SGdfazdnaEo4Y1UKej1GVCZDUyk1WjtiR04jI3c2VSR4a3U1RTtzVDc0
eF9iPmEtZWVSc3M0cVVoVDJRMm9kWGdHMEBrRFpfWik5fiFJCnpXeShiOTxoKm9rSVZjbjY3S2tf
S1ElYSpecjlMN3xYZ1VVa3A1KCRUJVB1NktiVUU3JkwmZkNrdntOamYoTS0pcgp6VChEUHVkaF5x
Rj96e3p6Yn5kZzNhTHQ0Y3hlOXNoPE5HMWFsTUdtYmQ5cUNFbXVCPmBlWmFRfko0O19lPSUrXmQK
ejFSKUN6dGhZWnFgQH1vMUhsaXs2XzIwbmckOHo2Wjw9ITlKcCQhWjJGRyYqKXJHVHxidHlFMXhY
KTtrSzsqJXFICnpKRCFmeF8ycGM8SyheM1JVRztvV2cpLWc4NThaZUUkQiYpY0xsPFE1ZCEyZm5f
cVhXQWZ9QTYteWFAJEkqSHxMdgp6JkBwa2hjczdWemgkTz85c0FqU2o2JGhFdz5xalYrUEZ3LW1a
N05FdCRJU3opKXsmb2pTflhXSUojfCo3M3IxblUKej1IZkFvY3lKYEtOaV5QMjRgVEwpeTt+blRf
cjRBNGJeT3AoWjZrbz5QUjdEb25AfVZSVHtaNSlXa1ReV2MhVDdPCno4ViVKTDRyenJAKHV4LUsl
Nlk5WjxmakI0aEVKNGtzSEpyIUo3R3swe1hoV1F7XkRKNHtQb0d0TGc7V2xUdzdmfgp6e3xuaDcx
ODkhcXBqanEtPHhEb3Z6LStoWDlxcXQzNU5lNTU+UzhleHQzK1luMiM9KSFRMnB8UWNpO2NnbyFf
amUKelRDZDt6MTlWMiVofiQrOCsrWVdAPFdTPEtXTFE7LWgoc3FXKzUkQkpBRXU0Q3tNeGljR34r
PUdNeVlaT3U0YSY5CnpiMUIteDhRbXUzc0F0TXtwK0x3byN1T2JmKkd8dilOaGRJfSVfKlFnS2tA
QXljZlI9aytwRjNDWns7ZClZYWB3TAp6T0RKRl9xTzE7SSRgbGRvbk9aaFpDUi15STVvVERjcyVm
cVBTSkJHVTg0OU8+PUx6fXBZK2pBdlh7KkNhOzc/eHAKej1LVzluPExwYVV2QzNEamMjRDRJKWBR
VWJLamotYkZRcUNYN0d1anJQITtXcCRrd2Q5Nmp7bjZpQ3xPI2lPS2JrCnpvX05jdD8/RShlU31R
enFJVTQ0X0x8KnN+VG8kT0lSMGtBSUB9eE9qQlRjPTlkfDVEPlg2SGhrJGkrKEFZLUV0TQp6bHFN
S2hxRVBoTWY4P0paLWdWWFg0RmJwYWxQZ3YwS1ItdUBVVzB5elQ7Ul9gTTFsYWo/Xm0wNilgLTwq
OVZLRz8KenhyWitGUmNia1lLO3xiVzFaLT5ANF9WXntfa0ROVTdpV0VITDFYKlNIJWg+fXpFTz0l
MXJ+WXNyI0xodFgxUDd8CnpCQnBCQWRCe3Q7MkczRGY3Pkk1TEBaXm9SVTRIdTJrMzYhJEEteV5K
KyR1cHIqRitYTVhBZVEwe2E7ZTQ4fVl7Iwp6ZH4jaHtQRCpvUlRwP1JDaFVTYiNvR2F6emw0ZVhy
UTQkekt4I0NQUj4tNGkzdWheJl5FWDF5QUF2VXQmYUMlbSEKeilTcGtnYW5eIXBRRExOJWstSW9u
RCFuKndlZGVxbnZmUU5DeiVVIzZwck9uZ2orJmZgLU0xWGVzS21BPXVWWElfCnpLLUpwJHtsZj0j
ZkF6Y3U5cUlhVnJUZThMdTlNKUJOVS12eDZJenVVMisqUmBZPVZtd0NwRmV+YkRwJT0wLUB6Rgp6
JUx7OVlrZm0/R152QFVIYj19I2h3c2gwbGVTKn57K0Q1aD9nI2xBQVlRUiUwI0ZEPGNGNG9vIWZx
RWJGcT1lKCQKekFEK0FZbXswISFmYyltUWUtKGVPVVNDRjU7eFJzUTg1YHN+ZVhuajFYKGNPTXdM
JkV2SD4kWERUK3djJnZrWUJgCnpFRXYwJVVBMm07aTFVM0BHQj4xPUZWb29gdVJZY1RMaHV1akJv
cSswbTl7fU49UTBLO25vNSRVWXc3IVhPKSl8QQp6UipJNURYRCV+JSQ5V3RPU3JeOGRxSyZESjNX
eytAMmNAY0FIKCQycnpVeXk/ZH1ZKHhrM2FiI0k9X0VGS0RpcXoKejwkb08wSkhSZ3Ipbn00fExB
e2hXNDNtams7OGB9aj5KYzUqJkU4akVgVHFXSVAtX3ZPOzYxUmkxUilgMy19SDxzCnola29yKkds
OT0xJD5SeVlVWWJvcGV4TWlpYUFwUjY/Mlh5YCl2Mi08QWdkeTZiMClAaGZDfkdJPEc7TV5qI3V8
Uwp6NHNDNS1gQGA4QiZfczt4TXglZEB1KH17PUJrOHNIY0QmP25hVSQzUipocXg+UEUkdWJvcCU3
I29GPmc+V0A2fkUKejM/WVIkOy1WKUdvVmZKfVA9anc/eVlLPDBkajBFN0RfflRLaEBYMjdjJEU/
KFFHPz9UM2ZVUTVWS0h6UHhgQ2Z0CnpZSWN7cExAUXwjTXJDRFImZlhYYFYwekRkPTsoV0lkazhl
Qm83WnJFZ3gmYWdncEgyUFBZfVRxViVRKE9ROEo8Ngp6PjwjZFdxe1Q7RTgxKjhoTClZPlIoc189
UlQoXitROER9WTI4JT8hWWstYU0kbW5JZ3lTMDhEbEF6fE00KFVGaDcKekB5KnIwTWFNMFQrPHxg
UDUwTVk8aHRycDRaSFJpMldHZ0llaExrI2JHRF5aM3Q3ZG83R1JVeUl3WTEoY09ibU9OCnp1cTtr
Tll2ekJ5XzR2PTtlXyNYN2N8Xk5uWngpY3x3eS1MenomY3FaM35NZ3pQdU8rUEA2NChKSklqPmtT
RUheewp6Ql9wWDQ8QyUwT3BIQjtJPkMheVVpeTlhVjFEbER8Nio5ZlVpKmtLIyp6P0tCK2l6SVM/
MDBBUihIPEkqNHtycmQKemhsKWt4JF5+Xlg1IT9kdUdhPUYzKkNXQVJZYEV5QE8mU1RTRFBxIV9R
SCt3VT5aIzx6MzBYcj42NjNod3l5V0JZCnpPempteWRFRVF3ZSlZc198NSZ3c1BIWTdqM0pgKHVM
eHtJPCtoakx8X15NMW1nKDF9T1N7JmIzT1M1JXlRKylfIQp6c24+M04/IXp9T3hkRHdnRiE/d0c+
UWN2Xl85SnZrdE8lbWAwbnxNbEU7cklhaHoqZ1BGV3xBRjRNSCE8amE0bTkKejhYPU16bkRZM05K
RVpqSUkwNDdwKzUtdD5Rc0lXSTM4bmJsdmhBK1JaYWEwdXF5Z00wJl5DWEhvWm1WfWspYDxSCnpN
Qn1JeDFjKk1Za1pIMW5KZmloMEB2VnVAPSE/Xkp2QSlSNShZZVdsRDVUKiM5KG0peWRvT19RZGhe
O04qTVRZMgp6ZFVQRmFOZWdoc1kwNH1VQmxIPSZEVXNUamJJKWx3cEpHQ3dsQ3pgfFRqTmhlTnww
byN4O2kjU0IrbHBxeGtlZ0oKeno+X1hLPmdtc3AqYFRyUHhNR2lMSkBgfSpPPDErYUlYXnhaRzg1
Z0BXNkA2PmRWJmclZ2NVfElCMk1XUHh0Y2wwCnopSjxHZGg+ekRrSl5rTEJGVERsfjx+RlZVemg5
cT17I0pycWRWRTVpJXxwV0Z2Y1QzaE4qM2xPT1FncyZ1ck5zJAp6QkBZTDFrSUpAJW17dUlTUkR2
Pn11VWxTbHJydGd1JU50cXd7MDJ3VFZ3Y0VlS0Mza3xTe0Z2OU9UJjw+aV5Nb34KeihQeFF+dGY7
OTh5RykqO2pUVjNfPXJALT94I2lXems3Si02QGNlOEFZWDFWNj8wTl57UXZnQ3czVGYhRkBDMitm
CnpGRTtacTNQRmwjUEBGP0NxNWBEYXpBeHFGQHVUY3ZoYjhBflN6Pm9ZJHJsSDhqbDlZWklvQW08
P2MySSV8NjU9Kwp6dnVRMnRUdjIzVyRsdH53QH1vRklRbFhicFFGdWQxQSF3dUhHSGFSfV4lenkw
UDh8ck02JUglV2gqM3JiSTMjYTkKemM+YW1FS0p3a2NSVXA9WCpnKCVtc0d5ejBnalItKEFpZEh1
T2JEUEs7IUtFMSomcTxFSW14bHcqciZfTncyQH1jCnpqRilHcTBKdlpLPmM3NmM+Z3llPUJocnh2
S0gpQ1hfdmxFd2tpLWVWNnc8WT10UFk3amMySWozOyNBZEFWOHM9Iwp6aWVkTlNecFJRdUpKWl94
NlBNbmRVfEh5ZSleZWBhTnV2SSspQHNWbDZSb1V8KElTc3Z6dTBAQCEpTlc9YFNnWV4Kej51MmZY
KGVecFdRUjNAV1NzYHF2QGlOYThfWXY/U0FJQHBPVjRYcndGKlQwSzw7WlpUbW9BMkIrJnJIYUQ3
Q2F8CnpRVzI+fmVXV21lbFA3R3VeUXBnWUokVU1CRW9EZ3woNERgZEw2PjxReCVvRlIwdCQ+e1B8
bjVENj4mXnNIXzBgVQp6NWopPEtzV01LeXA8UFFpJHU1b31DczZ0bUU/Uz4zY2QhX3MtNExZJEdo
P1A9JDsxNihfbyl9MGBQbiYjdWRieEsKelBmNFQ4O0FoREJyfGshZ3M9cUN4aDNIZWdrNU10bWFA
ZjlAN3w9dmFWPnBQT0lQUk03UEpIJFlsKk19SlQzV2hXCnp2SHBpWXl0WXZ7RUYpTGBIe2V2OXly
PnFwIz0yTk9VRWc2XmN2dXRCKVRIRTgjVV43Jjc2ZFkrZlhNOFJCeE9kTgp6dXgqX2VxQE04d0E2
JExMWVg/OFNleHZzRyF1ZVZDYHBjakU1JHo4ZmBTfFY2VT57ISFGaGZGM2sqbjV8N052NUMKek5t
QCEoWWB4UiVSajZHZk5pfFcxZ0UmKiUtJnRmdDc5SipMKFIjRndQUTx+M2lzYnY+WmB0K3djU25R
cGFuc3RACnpudHp9SGdoUGdCYWlGd29RUmJhX2RjTT87OyhDTCtEcmltalhsWU1CKkNGVFZgampM
cDxwbEtKaUs5UEJJfGwwVAp6dGozSXc5NHQwd1hhTkE+bX5FZm1jRWlAfCg2aksrd2ZkXyNfNDt8
N0NwWDR7Z0JXajBxcUhHUUVIOW9DVD5KJGEKemdKMC1uXng/YyV0bDZtUzFUZWdTOz1LUnRDJDJA
fEwjV34lZE5HdTx0SSN6Q0B+R29GUmFVMnYxYyE0YGZFVHQlCnpJMmNVTm4kVVAkQHIyVnFfWEp9
WUtTJUZyPGY7fmp2WnQlRWxzKn1pVUd7WTZzenA5byFIKF9lRiY4ZlpqQDI8Jgp6SkAmVWY/fGcj
WnJvbF81ciQ4ZnpoJilAbVVZWEAlSWsqSSk8emkjOUNSNXYkPGBLTTlCRyU7VkBHVEo8NXM4aHUK
elg/SiMtPkdVe0pqRUVxa1dPWVF5R2BCcl49X2U7MXltOHlBIVBaU1RwJnxZITxqMD8hck9jWTUz
NjNReigkalFnCnptIUdwKGg7Pk9wLSgqek8kQ15QMlErRzd1KEUrZ3tWSkIqQ2djVD9iYkI0T3Ar
MCYtQDhsNzlLaVBIa0gpRyROPQp6NEVlekl1bClQK0d5YkpPSHxQXnMmbmVlV2UqU3kzPDhWIztF
cCF8fEVIVEFnM3M9V2VGUSYzX0NUfVgkNiZ3U18Kei0qME4tYzh6fGFrT0g+KEAocio1PDwlWD5M
dUdPRVRKUSk1QWlieDJnbSN2VTlQJFFlNTc7Y3BORXB2MDU9SzVyCnpufkBIXiQlc3glNGh9an40
MShvfHltREtRSWRwVkpUd1ljcms+Y1F7Yk0lTXpVVTF2VFhLZFdUVUtGZ0RpdEM4Wgp6MU48SVV2
QH5yO2JSPW52Nm5DJlFtMF5SaUItWVlnd24yQEEkTjUtdFkjc1ZzeEluLWRSP3RJMmE/bms4NDc0
MX4KekN7KGpjYjh4VFNmOSZaYFVIOWxOKm5wdnlafnpLb3w4ZXxWPW9lM3M3cTB8RUU+S3A4JSs7
X2gjbitSPEVENCQxCno1YSpPLT50ZEQoJHkhNlBESFkzVFltI2hRSFQyWDE5KVNgWUh+RXNxV0pP
Kzs2JEZaQ1gqTV5gP0Vgck9NRjdyegp6QDgpLShlRjMmWGEyPWJqQE9kOGMmSlhfPWEkJkAzYjRu
ejljZkw1RDRNfnshJSNLcihWMmlsJXJJKE18YDRXSioKemhweWZERXgyJn08b2RUYU02QC1lZyNT
UjlDMlBXRmlkTiFGWGpfc1EtWTV8WDloZzglKUBEKzVSOUI7OzdNaHZlCnpwJnwpcj9yWk57X1Jf
JXo/bjBxWEBNRnh+dVVkWil5UndWKUJRTCVWU0V0fFErPjQ8KnFENGU8OEw9b2BFTHIlYgp6K2x9
LTBMNDxPYHdYZVNSPSQ1YlBYZzd2bXg3NiE+JT5OMUFOWFNvNHI+VXw2USNAO3A9eV4rbEpGfSNC
Pmx9UDQKejlNREdDaVMmJE9VPzsxa0Z7NWlHdjwkSHNBK35KYkV4MF47SH57P2N3enI9QHtHcj4p
WHFPbUF0SlVqJkokK1JeCnpEan12dmZ6RVJudjZQVENuISgoZHhMb1FQSmxROz1TZ0BOM0tQa0Je
Xj13ZDYqblohRUZLOz8pQyFgWlYpJXElcQp6I0BIME9AZGE9WDV8Y302bVZoQWRFaTU8PEp7TVFC
SlN+TmdNaXNEe2ppJDRrblY2VX5VJjJQMl5ybEd+VU55ckAKej09aG8tMSFLUFYoRX4/NntRa340
KzlgVURxK1ZDUUArSTJ2NT1sSl9QUXJBZC1BRkd8I3tDRjJsZH12Z0dXJndsCno+e2RkJFJ6RmBm
R0o5VElIZklVPV47MDdXdUZjIU96eDkoX3prRzF4MiNNVlg5PCpDTlRZMkVJa1JOPSQ2RTx0SAp6
KTAzUVhKaG1RUS1xQ1UwYnxGVnY7OX5ObG45eTMrU2pIWiYoTElhe2YtPGhlPy1oSChafn1hQmA8
dlZFZUQkMUYKejZlJGx+QkA5RjRAJjcjPjNVfFo9THRLZ3deMkhwQFBPR1NBblEjKm1VSEhkI2V1
fDArI2FkVXwtVWtwMyQ3JWJXCnp6YGMzOyMrJmFze2dOOXQpVUgxYF4rYDE5Ni1aJFIpQ2xZYEAw
Pk00Tkt9NStLYzB8MV9WVWM0dn1MVzlkYUc8Qgp6UiZfUCoyJW5ZbExVPzE5PGNMdjQ2JiUqVVNn
P3lqaWVGM1YjcWVmeHY1M1JoeGp9O3dIa0JgcXoyfkllan5AZS0KemdpVU1UNiE3VERHRFdJK0Ng
fEZQKFdNMSU1O2Q/S2RhVGZQdV9gNG5JTW9VWWY+eHMjN0VgNDNCSTRAdm1SUm02CnoteVpTb2BH
RlgyK3lAYExANlFrNDF4RV40RXY4fGBLSSZZY1pUMW1NMG5vSkhYJD14U0trT0QmQz5fXzVobW5O
Swp6aVM5SjZZWEUlbyNUTz8mY2tfY0VwIz1SeSpNNTVWPEk0NG5eOGY2ZjRAR2BhKDFLVChqOSp0
ITZOez1Qb3RjKE4KelMlLUo5M15LS1pNSUxBNEhsNHtxZEp2THgyTG1Ydll+UyhLUzk9YVY9fERn
MEAoYWRqN2stY1leaFlwIVkpTHY9CnpRamJDdGpnSyY5SEE3QD5lS3heV1dnVkFFN0dMVVQ5QStt
XkZsWER0VkxyJWdDampUYV8yVGB7P21PcFIpWkYzRgp6d1lgN1lzYW1mezB2cHdxSmFSP21hKFJ7
QFdqUmJtJHRXP00ldEYxSWc2ZDFVcmJONl8kaVRLYFY8bCg4VlJ3Tn0Kel4yOFY0VD5TbjBaPWIo
dlhzSVFfZSliYEtxb0U9NCR2R2dLVl4xclEoNSY0TypFb35iTUEjTmYzbm5DJnNOanRHCnpRS1p2
YjVKMitlanxUfURZdWRBMVk2UUBeSnYkITB7Zjc2U2dmPFVaZHU+TzJxZkU7STdDJiZZbTNWbmpp
M3hKVwp6VzNoM185bkBKWVdofFJFQCRybGJwNVRAaEkmSzBNOSMheT4zXmZ1QDdITHA/QnYtKFlt
YyVKT3RgUDF+JnBkTTQKejV4ZjRyXkF1PSYoOzcqakw1STxZe1FRP19xVXR2QCFPWD1fMzg/eU5P
dnlLIWMmcyg5dnNwREYqfDU/dENZYU1qCnpaZHpjNkBxNn5OQ3ItS2EmTGQ3LXdlckBsU01YIzdg
UlJHTGZiVy1IUE9jPVNwfTRaNkNXZl54aT9IcyVrWGwwKAp6UndGQUE2ZDV6KEZpfUlKNWdyTzBM
Mld2ISVIcyFlV2tjQFFtJihkekpCKCRJJXVzUmREMD4jWGppI05laSZHNTcKelhyd2tkLUYkLTtC
aGN9QXFnNHRpI2peK0J7PiFkTT9ePDtNWTJTfTdDbUxjNiQkKEg5RzUwRU0zJEFKbjthajB0Cnpy
MitvSERMaCtoN0AzU3lBRnZMTmRGPWF0LVRVITM9JldzQ2B8I3VjUW07UmFTJFEqN2tUK0daUEI7
cjhRRWtpTwp6XkxWVj5MNTteVjBjREQ1VlkpZ3RKVn5OY0w4Kz15NGZ+PztJbVJaYCRII0k9RlNu
aj4pVjRFVXpaUV5FYUV5QEwKemh4UjZkSm9NNUx1Kz9NSWBnVmNXR3NVYWd5cX1TbXcrUVM+Q2Qq
dHZze1g7I2tMLVR5eXViZWZ7bmc8PVlvZm8+CnpBbiNLRXA9VEFmaUAxUEV2UUZDU3lpZztnZFlV
YykjPz12KWdHIz9+OUcmVHRKJlRUX1VMQE5DVUs2NmBuNm9aPwp6PEZkV1NMTWowak5ZX25oUXYr
bWtHNng4c1FCamxeQ0dLKDtZNTUzUGt4bT01Kjl2QnJDJiYmJSFHNjV1XylETEIKel40VipUTHVW
N0A0UUNHMj53NSszMFEydHNrc2V3aEJkWFU1c3d8Jjhpak8xMDQyeDBrUHdreVNwVFV+ZmdAc1Y2
CnpyQzBmVEwlKHkobHA/SnpsVUxKUHdifFNfJV9xVGVmQiNlNCZwR1kxMlVmTX4td2MwX013PHFh
RWRhPUxZQlc9ZAp6YUxBR2dxJFpweUF8Xl8oUlpJYHVTe2FjMyloKWJ7Zyo4XzhEbm1JITdFbHpL
Ny1iNUVmRTcwI1BoWlN4KHVTaS0KemF6KXQ1M0NCZnFZaW4+TGRHNkU7elBmZUM7WHJsOyk0VjVG
Yyl0VzA/ZXhHPDFgSVdSaGMoOWF4cX04QipOUiVQCnpiJkFiYFglJlNzcmZSeFdjXjVmTERsQVpe
bjNhK1k/czhrK2RpVTs2Rk1BR2tzbyVWST1Xam56dHpSMm81dER5fAp6Z252TVNnK2w5U2IjKHBB
OWBEdyZWX3NPIVJHS0NvdXJYSTZrfDBTYGsxPl5mSjNBSTMwKVQkPjZ+fSpqKlp6JD4KejtJK25R
JUpzK3Beam1aa1dYTyZ5cG0zK093dTR6aTJNb3otM2Q1TS1wcXE+YTUrQGlfJj43eW1SI0BPO3tK
bmFuCnpsUUFTYmVOVUpxM2V2flFKbH5rPjNNQzs0Z3ghYDgtcm8xcytqbUxQdWh3NiZAfjhQQmFf
NWRFPGM/SD5mcz9aTQp6YjR5RHFQMGJWZykyTWxiUztrdH1rVlM0S0BgXm5oJStFV2dlRTtzPWxm
SGFASFRCUVlCa0p8dCZQTyYlZ0JrPVUKekdlQnQhRTEyUFZiaVlUWlopKyQtWUJ8ODdWI0hGUXM2
T31IIVNpbXM+Q3IhLVFCITt0WSM1Rm1KMnJ7fj4mT0tYCnprYSlRWExEckQ5czNOdGR0eWR3WndX
Z31rRnBgVGtaZntYcXBjQEBacm1+VC1qN2RzKk5zWjdRSlcwPXNtOSVVbgp6Umx9U1JkeHZTdUpl
VmtocmxZTVUqWnNvYFY3VUske0lNJkt8REo8Pj92fH41RypLYGooPSZnaiRZTUpZeX0rM1gKenhP
LVQ2diZKVjYodCghTUM8dzRlV2tnYDI8MEcoSGV7cyhDaSQ4aHc5eFhicEExdkYtXkBsTVJwLXVj
NGskJEl4CnpxOE1ldSpWVSMwazFYUUFWNEhrZUcoaXheYjlmRDx5dldrIXRZdjVEN3pwdX1OWW83
RnBIb2khXm9lNStVVnVgMQp6SG1ffHZMOEQlMG8la3JhPkpDTExGKSo1QDhHKzc8WWRRM1R0YHRB
LTc/dzUlaT42aWZManJyV0N0UVJ4JCU/e24KekVYPVZzM1FYZ15QZTF6WCl0I3NsO3BWbEVjaXBV
N2V+aHYhazhfYzItJEhwQFRFd3x4R1YhdVEmWl91OVZWRV9OCnpoNGxQREpEUEpkUWN8VV8tZlZS
YE1aTG43OFZjSmF1Y185VmtWIW44bkcwRmwkMWszSl4ob0lreTgkSSNiNFVANQp6ejhyR1ZXdUpt
JU9CRUB6eUByQ1dVX3kpTWFgbj5CcWlYN0VrdiY+N3ImRGMqU0VXKGUofCU/T1NVP3tmYFBLdCgK
elVBPTN5UzUrQFAxWl9yLXtRUilIQXVUNFU3O1VhTG0jS09zejhvMEtXciN0Tnl7P2AybHVMcVQy
ejNnYi16amZHCnp4U2pqQT9OPVhvXjFjPHF7cHA4I3cyY2IjQGdJT3NAUHtVR0c+LT4kMT4pUzFr
aiZaaHR+TSNASFhUaWtvO0tlNwp6PWtISHtfPyQxVWBBOzt8ZXRyayZ1UTtGbmFec1hHQXVsYHYx
PkUwQnl+QytTPU9TX0FPO0pKU1gwJjVXU19zX3MKelAkOT1ENThVelBhaEg0MEEwSHcoVCh2SSNg
IyZ+OTk5KTNeMl5WaHVrZDBafCNhUTJ4IV9EdiNrcipZfiRJZ2E0CnpMZkVWOTxVejVaVmh6YSFJ
aWNTb3YmUDB7ZWRmVWNtaTVqJVMwRGV2cDNpSU9semx6YD4jcn1xMzhOcFJNTHhPPQp6U2I/PEop
SEVLbTgkRV95TjYzNW53Y3dLNURAJjcreWpHaT1AfSFRJGtZNEgycmZEZnFlRD1UbyN2P2JNY3Qj
MHIKej5yWWlrYEF4KUNqVmdzMEtrUHhPeHVvbDRfR0RhP2x7Vzw4SSgwUFc0JE81VVpEPVFXVm9w
MWxKSkdiXiRmKGk0CnpxfEh2KTMlN29FKFRER1NkP3BIOFkrbjF+cWAjQHdBNVNJR3pXb1kwanwq
b3N0Nk01KUVEPztZWDx9a2FxN2RrMQp6WjV9bU5NPmE3NDxPeWFIUihnMFlpbHN8b0NlQFRlODRX
TSlkKnQrfC1VMnJJPUMhP2dzY04wU3lOdEhDantOI0wKenNKaV5BWiUqUG1VO3dYKD50bTk8SkNy
fm8oTF47Zj04ZEslR2FPRF56a0JpQSlCZ0dWVGhPNlJZcmkyJmYkUVVoCnpwQVFpNHQyUkooZ2pI
JUc5TF5YUmR8eFpXSHBfaj1JRUk/Zng1Z0hjbShvbVApTUh1QUtnOG11cmVHbU9rJX09Ugp6c2Qr
S1Z4UVVXRjMobEJ0Y1luNj97aThRck80ZXM5a3QtM29aUChkPU4oOCpfYXhZJHJEV1pmZGQmejBE
bW1XNWQKejYzd0QmMFdRdkdUekIoKEh5dWtySkhAJHZCe3sxallleGRzYlhiKXA7VzhzMG9xPmJV
NFpXcD9NNDJ3Tk5rJjJHCnpyZyo3K3MxQ2V5K0xyeEtVMyZOaXFIJGpSd1Q8KWsrKj84NCVuVDNl
STA9JHFFSnBOJVBpIyRjKiZRYH47cTR+ZQp6T05sR1hPNTM5KnRBdj08PGJCS3JFWVBqenBZcTw4
Rk9PWngtO049I3NuPSkhSXRGYm5mWlRzeTgjdG5KTyg/PlEKej0qTmFxUWxGNGp0ZWpDQlcyRDxY
dX1DfFl1MXhiMGlNZFlnSV9nQUtZTVIjY0pBX2d1WmNldD9KPGBIb048and5CnomYzYyI1VoPEN2
c0M7cUxuKU0lY2JtbTZMQU1RNm5scDRBLWpuYTt2a25Fbk9HYG1RUyQhZipLNDFCZnpoK3JmVwp6
UztlNGROaWlBTjI5eShZPzR8b3xlZV96PyVXVHNjJiRLRX52NUB7NzRPS1JrWWdlITtwQ2kkbE1S
NXdWZTtIVUIKemIoQWJgOFMtWT5CT3d3OSk7Vk9FcTJ4YHwzVnRKekhqZitHNih4cD1LYFBjLVRi
WWxraHpeKDdwNXVzbT5CVCU1CnpeX2NUTTl7fkQrQi1gU2klbTk0OF41OT1qYFBha0d0K3hKOGRr
Pi1tXm04UDJaNUdySj5QUmZsTmlUZz9INTxSPQp6alAmI2hIKXZ9TlRWeHp4RENIPzQ5amtPeSF8
MioxTzxtfF9TWEowP0FpQHV6WTJkKnBVLSk/NjNLR1AkUj05bCMKeiQpOWg1MVRldkxtTCgjNWgh
WSR4THYqditPfnF6MyhAME57Tm57UG1XSiEkRzNIMXRjNUNYaHMjJHdeX2RCP3VwCnpgKEokWEZS
S2Q1WFJfNjVJfFI4JjRxaXJUX3RLWDNNKl5YVW4lZjwrT1RqWDQjPjNmTlc9ITZ9T1leOzZAakAm
UAp6cnFrN3VYVnhpRD0zPVFXeSZRSEJmKlk0Xig2dy1MLStzKHhYV1Zub3RzQjdtPmw5IyQ5RG1w
PCEqTD9GWkxVTDYKemM7czE8SnpTZ0Q2O0Y+IWcwYXgmaXk3NFhxSlA7KjhseGQxJHc1JDtZIVBS
eyVuMDxmV3p4V3M/Z0R8fndIdlFJCnpZMElVbkBQRlpAR0l8cEo1a1ghNkZJSEA+WV5OWXohZitJ
ZCo+WmhPV2xaU0pjfVNOaHMrSCNCWXl8XkJ3ZzB8ZAp6WEZqXil7PVkjbTlKPTw9QytxNVVAYG5w
RzEoSFMkRyptJih8RW5NQm1VPn1BUUJkbHo7PXgkUmtyK3Q+WH1ldH0KekY5aGB7VW83UVRFUGB9
b0tIaCE4OEsrISg7TSF3MTVZZng4Z25heUotJTQ2UEt5S1V3YGJhYENrRTtZKU9PbF5qCnpOR19+
JGs9YWVCKFRYSXg4ezx4ek4kVUVAak1Lcno+RGc8WmB8T0h1ZiVVYXtaVHNQR3NNZnVpbUJjOEUr
YGNtZQp6SGNaPytnLXtXUjZvbSokLUIyeCZxMEZ5UUJoSz11NUh5ZUZiMUA3eGMwdE5sQi0qcT87
LXBkVklSWk9wP2ZKd2kKejIwcW48e05hTDZ7KFJmZithTHJ0dWw/KyExRkgyNFU4ezBSOEZ9elgw
NmBRKDwyPjA0bCojaXMjJCR+O14jWEMtCnpIXkxiIXNZIS12VTVHanM3Y1dDM0A/I1YyQVNrTTUl
c2QrbFpvaX5IaFFDQjdgUWxHQHtRYXpMREVuI0MrOWo4LQp6akNPcDs7ZzNPJC1jQDlncjxTVVVq
cHYxZl5wP0xQbUpTejk5RmJ2Qlc7I1M9UUk7RHZEMjN2fSVtRFgrb1YoMFUKekdMdy1+bEFXVld5
ZmxpUFI8SjhOMDt+O08oY1NHPCN8RldBJEFMPjxkaD1xYEI0WDNwVXZ7c1VrVmZSJlRNbUlOCnpo
Jk4wIWVTe0tpU3J6dEY+N0pFa0xJTy1hbVpnKzVSQmdsPzI/aXhSdmEkalhSWH1hP3c5Z0tudT1E
Y0FTOCgzZQp6bkAoMShBSDhQPFoyVEh8Tlg3d3s+Q34qaWY+ZCFhYUpPVjRpJG8pZEU2ZTdMdUFP
TDhNNVI9Qkt1K2lZekUlWX0KelFhUFl6ZG9NbjQ/JklmUHc0enYpZSpaMUgjeDJOVSNHZmomNm9m
YGpRY1djWihHQz95bVBuV3deQ0hDTnZaTzNWCnpTZi1rdURKNnl6Vkw9X1RfZ2c8Wj1mZndqY3kl
TStJcVpfQihZUihLP2B8I3RkZGNWfmFYOGBfeW5XX1BVPlIjMAp6KFQ7PkhXVmVJU2dxaU5tJlRR
MH1uRyZSSEk/Y0E2UXVhIV53dkpwKFp3dzF7eVR0O3g9YT5LZUBeYzY3ZUVYKT0KenhJT2UrMyVa
a25TPnpkSk1PTEU2PGk9OTUoYCVGJXk1JjBBNUo7IVlkOV4mM2s8bF9FamZzUk04OWFkckN0QTx2
CnoxSEtMK3NVXiZjXm97fkZjM1YhbTxNP2tzZFRwYT55NlhUfnJ1aXZ7QV50R2psMlhpQ2wrYU9p
R1VpfTI+TCRqUAp6KElVNGd2VDNeZDxiK2t4KUIraTw5Wk9HVl8hekNJRCR0M0VWdWZ8eUZxYnA3
TFlrK340TX1CQ2JWZWUqRj01ezkKekBkSFYkeGolM1luKzJKcjU7UUVgMENUX20oOD01R2QtTk17
cFczdCpUVklgSHplMVNUP05EVTdXOSEoRnc3NXNECnpOWTZQU0MjJFp5bHwyYjBgYzBnQjlBTnJ2
S3hxcChFbj1jKyZgPG0yREo0KyZjRTU3dCpKcGZzJDtQS0otJntHMwp6RFVzanF8R2d+eDh3fVl7
QlA4UEVrVW1TYVQ2RyQtZilxNUE7UVJPOXZoUy1LP3w1P3F4fVJVWXFNNmJXanZEWV8KemlrMkkw
KXJkQm5Ufm8xRVZ+blBrOD5oOUVHcFJ7RmloKEEkbThEOUgzKllLKHYwZC0pSiRjVT9PTFRTcURH
U2VHCno0Wm1GRng9WkJhT0NjM2RjNGJxXip5fmdhR1gkWl47JH05aCo3JiVQKSk/OWdTJlZLcSYx
T0UjT3M4Xi0tQT1SNgp6bzF+ZSM/Nl5hKFZAOUd+R0YrMTFmOXRaWEZKRkJaNUNKIT5vJVBoSk0h
YmVSc3s8aEw3bD1nSGNYUkNhdkI0XnEKeih6fGVeS2s/YkkteU1GezwwdzZPXlY7LX1YdXxzQTcx
VDA4Z2cqbS0wWHZDQWozeW5ocnRub2dKMWtLTWhTQEJ+Cnp3OzE9O0U9KWhFTSpUVjgtKyRVPXVr
RT95d3BBTjFhUmxvMUBzcTFmQSVpQDEmaTZudnFjbXB4eGQhUmN7THl9RAp6TXdHLSZ2NlAkS2I4
OGozaEFgS1FfO1FWMmFUWjkodkJIVEZ2KHlqITRGIVJeIzctUVliZlRGQW4mITFuSmF5YzgKemU/
SS0kUlhHM2d3bnRHYjZlZT1YNHA3Uk5uSCoyREo9ZVFCVzIjb0U5O297dnpjcFc8Tk5LJkxVRTdv
eTV4bFVkCnpYV1BobTQ7IVFSPW9LVENuXz9le0coeGR8Snw4aH4keWA9U1drYz1maU5+K009Y3tp
e1RNNCpeRlo+dT8pTjxyKAp6OXgkNHZ7S1JBc148O2ZgSEUmI35fcX5qbWxVbW1ed2FHZV9TSnMh
TzNxQjQ/bi1qYXRLK1FOUmJHc25YcGVKPzEKem1LJD1LRktAWitycE5CeTtQO1hLcjs5ZFFNODJR
YGAlZDk1Q3hmRGl4NV5WJFFARXlDWDZ5SHckYnUwLTZmcCZsCnpwUD99Ym02KCstWX13TnxCaTxK
R3lNbHpRYzMkPSpBaDh+QWBTaE1FdUQ8Qnhtc2gle0opZl8xLSFeMHZnS2hXXgp6ezxNRWlzSV5v
e2ZfXj9MY3pHI3VKOzdSKio+V2w5ckpnekVgPV9vd0B5aXUjfE5veHlzQDg5YnBUMUVkYHhFbEwK
ejhuaU1oZGBDQS1mPmZgN1M0TGBxVkteQHBvMlJZN05Tfj1UKztxSzwqJnB9VmElYEEzdmBsUzVA
YnhWQGFuZEcoCnpyP0Mzd3hnS25gX3JMSndCXlUxN3Y5Ykg/YHZiY0IxZCtkLTR0Ym89Szgpa2RS
JmkyRUZoP0I/OTtzQUpYZTchfgp6QShTcj55MjVscm1acFgmSTFQTmNoZ2B8Yl5BJmBGJURIISpj
KT9BVnl0QFNATVM8cV4rRW90cC1eamlBLT5SfnYKenpDRH1mKlUwKil4fCltNTMmd0J8c2lrTkFC
MkZyeGEkOGdPKVhFUGNgZTRKRlckVTxENCk3ZmY8KndFLTNRZHRvCnpYYU4lI0ZTOUZmUU0leG1a
JEg+fT8+bE1xRlktNDwoMyQhSF40QVhvPmExVGt1WHpKbFk5TEZvZiVJWjdUVzBjYwp6azxEWFYx
U09jaE5XJkBON2NLX0Q3O29kYFIyNWdsOzwtNlFtcChGZDc9Nm4hQzIyM290bTJySEhCbkhqMD05
YDwKejdmXnZGYk00Tnt8RlB4Ymh0WF9sKTdxfXhDIXElYjl7S1FURDF1ckhIV0lHakhGaXQ3cldS
a0tgZzBtIyolO0I2Cnpoe3s0V0M2eVctVk01SnNHZ301aUBJZlp2M0dASiEoREV2KEItUHdwanF6
TW1EfnlVXzNIYWp8fDliRFNYVT4yMQp6XlZQcDdvPzIxPDhfM2dOO1o8MzAkWTtqTChrVTg4NVNZ
ck8xKmo0dzxUIXQ2enolQzAhNnFHXzFkR01Ob0pwSGYKelJLNU8kVi0xI1RCWCk+XnVYdE0tUm9r
empkZ00kM1B3bnBkKUR1QSRCUSVZNyFMeWltQU11WnM5NXszUXxEdDE5CnpLelBQT2x2eDY9T1Rs
bzwyOE9MbDFzZ1g1ZjtaQGAzU3ZVVVlZYVJ3eGhZYXEzPS1vbGQreWx6PUpmfElKeyE3dwp6JFha
KGtsejNHOEJTaFg9MDt0VF9ufk9yRGghUEwke2FzeXdEUVkpI290fkdpX3RldzxxSUtZeng8KkpK
UXd1ZUUKel8raHRUMiRmQmNadFhuZG9iUnVAOSVZd29UM2c9IzEyaGBWMjw3KkdRRCFxOGk3cD1y
Xjc+M0xeNkF5eG5pajV4CnokMmk1RnMpYV5abGZ4TEpnPUZ4YGBJentrWipBMipXaHUhayZ2fVZA
T2xRS2VsTE4jKSlAdikkOGk3WERqMTR6Wgp6Xk8zZUE0SnM1fVVEbEEmO1FmQXBCbGd+ViE8fD4x
Y0o2enRAejAmT2hXPnBTSWNDIX54YitkU0ViLWhpcTd0ZSsKej9wIzY+JGxjKzU2MVkoOzBocWFi
X3YqVmwtfklrc3V6JkBvIyFwaHs/YCgofmtuaytMcyt4dzt6PW9US3ZURGU2Cno+TUIrPlEhfUgr
PVdgM1NvSm91OV9fMFFBdGFfdlgtUl5xZj4/PmI8X31TTjJ8S0k7K01HRWdBZCZtR0ooSFE8egp6
OCZpaWtsOXp9KnQjc0lBV1BSUDlnaD9fV2pqbn1YRShxRnY+b0RFVFY5PkowbW9NQ0tARkJGY3pH
KTVuI2owRm0KekwoVmRHVjJBZncjNXpobXEzZXJmekRrXng0PSpTU1JubnQoNCgtaVdSfXVAZkk+
TH0hNlFiK1hrPzQ+fiUrSms8CnpLeEVoJWJeOURuLUdfckA9IT5pRys8VmBAO1pPdWVqUT81UDhE
X3tjX3FPMjk0IVE/MjtfWGg9cWpJb2ZxOytqRQp6KHNZRFQ9MztEPHZJWDN4VFRpPn5AfCFQeSRj
Z14rZW5KTndyeSs5T2tHIys/ZDl8VGw7dE55WGxCek9RR08zVjAKemlwNz49SG9LRCtweVFPeWMj
eChoKEJnUSgrQFh2ciVKRGU2QWt2SUA1S3Z3M2h9IzBJeXNjK15gYDUzcEomNTl0CnpvN1ZpXzlF
UyNVNypTbXcweGY/XjdxPUhmYi1ZfkpWJmA0c3Noc1N9PkJIPWxoKF5PUldecWt5Rz9WeWN0fT19
IQp6P0Qlc3ZpPS0hclJfNntmWnpAUkclTDclJDEkVm5JJlZLb3VkIUJ6Q01JMUotSl5CJGlvQnop
ekgxciR6aCErNzkKekdrcWk8NW8ob21wRTZVRzZ0UkpYeStAMT9KNCZzMXokVU9VZ1Jwfi1DRnc9
XktDSDt7MHR1JWtMaytscU8kI1JSCnore1BzN2xyPGoyKCQqZE9fOHhpZ180YCshQHZ9U2JMbDAw
RCghVCp2MEQqd2JEZUhaSFR9MClrTm1Ba2tCOVNFLQp6UWZhWGFhKjxqR3BSeShCRS1Odl9AQU0x
fFdKKkspMHd5M3FBOCZqOXkpVndWP2VEOThwR3BTeSZKUERHam9jV2EKell5fmhzWSpgWSRwLUBy
UU92VV5xZTxWWSRpfkNHVVU3KXZ3Xld8fk8mNTJAMy1uM2tpWGdCMDhZQXFGckJ5b0xHCnpRTyM/
eW1gantASyVuYmNKfT13b25UUW9xUGhPZkJheVlVR2tpfH5nXn42ME4/KjZ9OyZTOUZCamVRNlNK
ZW1Sbwp6Sj8oYHVsV0hXXj1NZzUoQkpvWmRIZSNDSV5IQUVGbjlVPVR3LUlNZ21xXlVENV5aMSFs
IVNBU3g/PGJAPi1LTU8KekMpbkNtPmhuWFM3Jn12JE1VcGE4ajJCRUsxbSVVWSowRXtqYGlYKDE8
VGBVOztPfGw4QWB2fChmclhHdDxTcEY9CnohUzEzVyZQcDhfWCh7N2p3V2VlWWh7bGArVnxOZm9J
SHQ5KWE7MnMrVllmWjVQVk1mJjZwVDlkLSpEaSMlWFZEKwp6Ky1nZCF4e3VNX2V9SFV6PDJVTVR6
fXR3WkBsSiRlP297MVFONXZ7YGRkVShaSnl4RTFmRV9DeTNSKmhQS3N+STUKekdaciQmS0YyZFc8
YVZVM2FieS1EQHw9PU5ONHY1RlAzait4QH4mVzw1TEdVbTc5ZHcmZC10eUUtdW1qa0FSNVk+Cnpm
M2duXldpczs0SWt5OTsrMSttcCVkTXNoUzlDQnE+UVEmYjkoVDJzN05WQ0BUJlhseDVFd0U5YTI8
UFJ8QWpCUwp6eDkzREo4bXA/bkFIV3t5I2hxeHNKQlVYOXElPSROX2QtcmFHNyFZTTlYM3BYITEy
M15ueD9oQEI+LU58dGlpVkQKelQ2bFArS2krY2J5QzsyaytmJCFJNFBeNyQ1IT5KeWhVJj5IR3lY
JTdIJD5vODxuUjx9TGxhdnswZCNgSFcydUhjCnpkeitiWSNULWREZ19faFVPQCp3YFc3cFJGT3RJ
RSQ9SGx6Nmc9OWdRUE88Y2FjdTMrezY8QyhsSExCYVpEYThfYwp6ZWJoQ19lU087KFByPl9sQVBf
SUU/cGNRKkA5Z351V0lBQGFIYnFxe0Q8IV9NMGRVIzhMM0Ilc2YhQD90UCp0YSUKejl5Vk9IUlUy
aHFyajt0QCVuM2BTZ15OPzd3ZnhYemY8cE9ncEZWeGY7Z19EakxWQ2A5ZG4/TGUoam5YNUBUIypR
CnozRE9IeSkobzRfc2F3Ym13eSZAQlBzaEVReGttS3MmOVA9bSo+KVFVQ1lweFQ0R0Mqe2dkKnlT
TnpQRFQ+emk2Nwp6ZVB6KiNYVk9IPHM+e1hXKXlHQGotRm49R1BhTzUrRns/PEN7XiZlKDt3KHQo
WkZ1MChYZzFySjBiUGsjb0g1JiEKelM9LWo0R2tIbT14bmtGc3lSdmVGRm9STEl2VXchZ1IzfkdQ
Tzxyd3JIZXVfaEVLRUFYaVN+emNDYmRfYmpKTiojCnppeFYhbT9aTE9WdHA0S0g1aG5VQUxCd19k
WGdQPEdocShiVz1BRFZXeyg3JCRGP1FRIUMpUkV0NyNTbyZEaHprMgp6P1Q8Zmo7UUJBR2d2NUZD
K0Y0aGdyZHI9TytKWkxsR2JGfFhZVTtYMyhqbF8+ZGNCUyM1ejRoPnd3TzFKY35jJXQKenpAYjFt
YTI0Q0xgO21LWl96UGdsbzdWWE1eYEdlOCpGZVl2RDspUTlSJjA/fkg3TUEkcHhZe3xKWHt4Kj5Y
P0x6Cno5WnpQTT1MTTR7XyV1NyQtPXEzR09GMUsjVFFES2FjVjJoK3ZwYkpGZW5ZU01mJWFLK3hL
aFkoaXg8Rnd6enVpbAp6eSFjU3BwYW1WSzIlV0g7M05SQigkZDwzcU08SmVBakw7V1E0JTNReG9K
X0JmUk0wIXJySCl0OW1vUjNkMGE7WGAKenkxKU8wVGJfVVUoTDAtSFpAPk5KJTJLTH5ZemN5MVBa
eyZyQ1hyZEFRcTFOX28ofEU7Pmt8ZWdWVSZ9Y01mbkMyCnoqNClCK3Y8Ul4qOGJgNTt0aCFlbGZq
VVkkQCktcyljPj5hdVRgI0AoJn1BPF5gey0mOCZUeX1ZS3RiZk1OKXxqRAp6dFByfWl4aDlqfG42
VSYzaGwpfntsTSkyaCRWSXA1RH56czZwcEtocDF7PmNjWmAtSDklNjt0MnZ1fUlyandnU08KemNK
ajFldGt9JlpyMWFZJSRSWWhmbEBneXxEVjlSMU99Q3NOPDZmRjUkbSs7cEVpV150UFRQUy1NMlEo
RjdMdFpoCnpGdXsqSDA0RDR7e00zcy1LWWx5cFBsdjdAZEJ7NlpXeFZJcWpTRTh4YE9VTFgxOXI0
e3FDKG5jUn1XPDdlISFHUwp6O0tHQEBOeSVqVHQhaHBSTnNqQnA2ME9YTWBEOyRzI0xMdiNkbnJw
K0lNdzxIUklacE5QbDtuTEFib25mP0t1bG8KenU8dHRneEk2RnM+V096P0FVM1ooYDBFaDdIfllZ
ZmNnUkRZSzc2fH10THc+XiFmQ2RYNk19P0ZafUJ3NURtPH1VCnoqVlJHPUslYTZnU0N1MUxybUBN
WXNBe25aeHstcDU4dGpLT2U5e09XblQtISo5dzgrQSpaJXZvcjtvaC12YT9wQgp6b3hSMTVNIypv
Ryh5dW13MCtsSUROKldhWEZxfnMoP1B9KDlXU2ZDIXA1RHEqeU41elQlSCpIVEcod2VecDIwKysK
enl0d1YtWExmOG97SVd5UWdtdWVsVFFAMjs2WGM1ajFAJENUQ043Q0V3cSE/MGJ3JXRNS2ZYfFIh
NWI2TmFvYWBlCnpTdjF8Zy0jPit2K1VIZGBtalc9SXoySyFJVXExWkJ0TXVyXlchQXZKMSUyUE17
b1dERUVON3J+UFEkP2YobG1HdAp6UlpDQTRBJiFiZ2RRZHRpc1NBZF9UMmdISW1kNDMrVlBhOU03
PXs8JWlqT1ktPG5fPGIrampFbTZVcU92dlkhPSQKejlUUk1QaGJoQ1ZOfGl0TmlrZ3ghUUpSPjZ6
QmZyN1lhK08rdj14eFNEU05eMGVQXjY+I0ROPUVLbVA2MEUwblgyCnorO1JYc0UwdF9sbmFgYkRp
e1U7eVV2dmpwTFBrfW03Wi18e0Y9STlydj5ra3YpNHw5aig8eHBsK2FkWmlPRkJIRgp6O1I9bilT
ZX5RPldXd2hrYzx8aTJ1RFdBMnpvfD5EPmgleEx5JmU3M09+Xi1vPEFMdFlZc1FoV2VrVjF7Yj5h
RkcKejZOdD1QIUNJfnUka0FQPEhxVF40KmdsJFNOTnY/YVJpbX1RNVZyfkxzbjBvVnFAanBPQVdK
K0lEcTAxJkAlI3QoCnpvYiZaPDgoJERVYDMmP1FXWFFLaUM0Zip+U2JfdmRPOUx+dEtyTGhJYTNw
emEkSXF8alJubk03WWliMztIbGFWNAp6PjhyS0lLXjwxV0gjPVh3X19Ab3pTfV8rbGUrJXdEdj9E
RzxvQkk9RDYkSFNvJWFRM3NKemhSeGtTdFc8NWhJMiMKejV+fVJNN1J9OTZGOENkcm9XYDg2dldz
ejZvdk1pPDtmbTdhbTR2QmE+OUorK2NVTGBqP1daNTExK1l6UGhTdGk3CnpGcDBkaV9CSzJVcnh5
clhjKW01fE04cnk9IW5kZWFCQSVnYzhBP2FHSm5zMCk/PUVAI14tciRocWlmYGJocDVXKwp6X3so
UlpUXmJgaEh6ej9+Nm0tJj9CXit5e05Ve1paUyNVQz1PR0pFKDBEKVphekpERWMjOThQNTNYTkN1
ZjRzUjcKenVaSk5JRjUmcmk2KilIMVheWF99NmRUZWxORSh3UDVSUXdqQlNKMH1sc0huIyUrTXd2
MnMjPFJobEhWfWR4Q0xLCnpsPEFrX0xMQFVsR01wTm0xJUthcF5HeWRZKnxeZ19iO01TKk9Ic3Nx
TTsxVSRvND44IyNrelBwJEl7VFhZO2w4Vgp6Vkh3Sz5BKzFXVilhVEwjQmZLNiQyQH1aSnlvVnN7
YFJaYzduV2QxOyplY25pWVhuJGZAN0JNNl8xSXF5WmxGTFUKel5Rd3JnTSRSYHUkWTlNT2JKPF94
NE5Vd2hOOShBWGljTipyTFReZDVqUllzbkJ2MnZLelYqNEF6aiprRG85PGhNCnotNGx6Q1JPX0Ey
NUl0P1Ukb3dYI3UzOW0lOE4zdT1WMnZFKUM4Skg5T1hVVCZ4eG1IPXIwakk4aURfYmAmMiRoYQp6
cmdac3pIWUoxTVY/cSorUClMJjVDKXtXeD1jNzYjXkRmUn03UUBtelg0XkZuQDdudDFRPiVITT5y
WTNBO3JHYXEKekxieHtJbVNlQUVuaihhbmtzOGwwaF93PGZSO3JlNTwoWnJpOCQlQ0lJIzhyfTt7
RHI/e2A5fnJ4NU11YlMra3lqCnpRPjxLKD5CITt8SmIwPCRVQV9kb2ttbHNxJXFBQVlQZiQ/bl5h
YGFIJSVLZUVFQURecztyJG5GWHU3b15Vc0duRQp6LSswVCVpNXpaWiFSc3hHSGpOYDhhe1B8MFVL
aD87Pk1BMmgxJSNiUlkmSiZKWVB9dHtXRjx+dDZfMkN7Zk0jPEwKelRFVE9oU3RYUWZfZz1wTCly
PERzeVNrKXRVdFpOTyZCIW1HSXZ2aDx4e3VGUGprdWE5eSppREttWFQwWk5MQH5kCnpHRyhnazA8
N3hwZ0FaKXx7RUAzc3J0YXBvaSpMOUg0NSUyWlVAc3oxbWNJY0g3YGw8QERiPnwrZ0Z7TjlDYkt5
PQp6ZV9+Zn5vYTFKYWtUSGVvVjx4UUBeXkA/SHZNdnpEaD1jczkmX14zO2Q2T1lNTyhgWFdqZyk0
Kj11a05AYmhrZTcKeiR8dC0ze01xVE5wfF9zNjs9QEZjKE59UGxxe1JFOUZ0cyVWSCtYRHExWCM2
VWxBPCQ8ITt+X2wlQDhPUDEwcXIzCnpjK0A0RkxBUEdgPXRwfnhlLXxEIStPKVEoajdPOClFT0lQ
JXVGbjNDaWI9d2xPOVc5VFJPYChwUWxDcjZmSyVYQAp6QlI7PFVwey1rOVVIJEZUfEhoKCRePFQq
TDB1QWFkek5BMXRESCpBPXY0LVEoTkVQXjtrOEhPUkNRWE9NMUNSSi0KekZlWFJJU0MtU2IqJTR0
eCNqPldZMGdlaTl7bCNRPEFhSTteYHFsP2R4JX18VVMxdGVSbU1xa3llKyFOTzBALSN0Cnp5dCtu
MElKQi04ezRefjZsNHByNiprbDNIU1AmV1deYkNvalVSOEslSV9ZPV83cSUwPXpVWiNrX24qMSle
fUZOSwp6bTg4WHUrQDFhZGg9MC0/ZHBJVTc7UEdsWS0kQGg9VD9XclFtV1lWK2lCaXBuVkpzRVZW
WXlpSUU8PV4jJW48SkwKeiFJdjghTzJTVV4qVDBeNis+PWtPO15DQG1lflMqMTY7YTwyMWcxaH47
VGUxSUpqUzVRYmExaj11ZCZeYWNiRndWCnopaEJANUhQKyskQ1Zwb15ueVd9TVNkeT93Vkd8QEU/
ejtEJHIoWmhsZ3Ewe2pZNSQqJT9KUiNZWGYqX1IoSHhBZQp6TDJAalMlOHt+flAhNGxEUUczREol
YHdKJHFvV3w9M1k2fTt5cjElMCVDIWtjLU5Md29rZkM0cGBpPjlwSlpeXjAKejsrY1okKEdEaCZa
KXxZdTwrJEI1WEA7WmVSe2FFckFMcE9SPHpPeGVeOz0oXnNfUEZjRWJGd3NZKz9CPmVzQ2VfCnpY
UkRCZ1UlVTBlPWVQZylIYUcrfXQtYlRjUHRYYSpCS2R0ViFSJnJvPFp0MiZKKmNSNEQrN0YzN0Aq
NTJ4c0dGRAp6IThmdDtmZXhXY047eFR+RT5vRkFWSClzRGM3T2wlYFJ7IUZEJDFqUU0qdSFzO1Re
dzJ7T3x0flBTPkduOFI5bDgKejBWQzhfdEU4QVBtNV9DMzJHejJuaTEpZV5KZ2JwZ1BMc2U2b2E4
RVh5KjxYQl9adkUrSV85TTs+d08qXis8VlU1Cnp7PXN6enhAZ1BuS1hUQStOKWhReDszQE9GNWBq
IWcyQU0oNFNRN1FkbHhoMkxQRVZJelJHPGw1YU91ZShKJD5DKgp6a2spUXErWlV2JipNcFZTJUxL
bmMtdWtAfk8yWSlLc3ZTM2pEfSpYdEJOfXoxcHgodFZFT1RudkF+PXVLMjQ7UDwKekZPcT9xSGJX
bWx0aTNGeTcqTlBYYXx9VmIzPzxxQEh7Yj1BLXVUWGVuPWpJIy04eHY9a0lwUilgR3gwc1JXQExF
CnooLVZDfG40fmlqYCRvQSNMfnpHQXJidWZucilta285JENuLWleSCp6WEBDcThOaW1oOUhLPVZz
aktnK1BKV1VQZgp6XlNHMylgfj1eTig8eW5NZCYqN28jK1p9e3tfdXNAS0h1e0Frc0dETVBKMFZG
YDlrRTw8MVUxVXB7PlN8SVRZKkIKemo0WHs9Rkkyajc+TTxxZzlYUjJyLX1jVTVGV1AjfmF+cGBq
eGZ8JWg0LXN6fjBqRm12Tm8rI2ckYypvSXc5TTNjCnpPVloze0k2ZXdQO35seEkxNTNGaFd7QGVF
ZD9EcGBSfj0lZW5VYXZlTWdQaXd6SXBSMiREUktfPSRIUm14NiZtPwp6NWJiPm14WmxqX0J1MUYh
Um5vRXhfUGtKJVEwTGVMbkVGIW1aZXRDaCNrPkl7WjRRcjRkYSU0eVN1KGZqYFdPTT0KenslNXs8
I0hEd2licTIlXkphMmxeZDgrbFZ0ezk8VDdlKEdWOUhObkhUWSRfZ3BUYmI9dX41OUtiaGtXayRQ
QWxDCnpCNXMpSVRZLXlqXzBITylsSDhrMilwZ3c+NGZ0eGk/IU0jciRHPmBXcWE2MChYOy03dVEk
UXxpeWJpcUpGMyEpPQp6O1IrMkxFaChuPXhlfERDc2pPRGIjVyk7U1VZbH5MV0A2Smt1UkhOcmhk
WTE/cUJNPz1LbCRATE4xZUdxS1VoY3EKejFzWntNV2I9IUVoNUh2VmdyQH12M1dtQ0UhO3ZTIUNY
ck5AMlJNYWR3X3k9RUQqWEg7TSkmRmBRaGhxajspU2Z7CnpzSTk7bylgSGJ1VE9sc1FoKUZvYnVZ
TDZIOCROalY4LU80LXQtVUxpcHA5PXZHUzdwKHNrOHxeKz9wfWsjcmZENAp6VzN5VGFEQE9YSkN7
NTEjT0VHTEQoOXpEU1cqTTFnbnZPYjNjcXowZDluQ2VoVHMjN0l1UGN4RT1FeDdYeT5gdU4Kek9y
SmojaWdIcnhzd0Q0NG8rTHdnUV8hfXxsX1Y9KFp9KUokbVo0clo9P2k4V04/YnJoKUk3cDQpaFcr
TjdFUUMlCnpGWkNVRW1RPEQjRVlVTFRXMmN7ZEBoNFkpeGR9YlJ8OWt7JSNYM2txa0JpOFV1R2Qx
TUQ+bD5HWUpYY0B3em5yWgp6SXp6PmAjbzQ1cUp+ayZobkdMZDE4NHJpbCluUlpIWXF9ZDw+MER2
Uko5IUt3VjwpKH1HRSZ4KVZmc3tuWmBednoKeihORkthe2RSWipWYmh1dnZqWEBIJFp1MzwhRmN6
eGV2diMtJTkxJUhZTHcySV92dnl1TkQ0LShNb0s7UG1FYXYzCnpySWx1NXlOZXVOZWA9IU93Mz5q
JEJiRyo1QHNZRDxGMlEqM0piTTI+Jml+dSlqWT19PkxLKyR3MUJBK2Q1aX0zPQp6ViVJdldgOCg5
dlkqO3wlKFNAMms5X0F4WFp6aVU7QWRhZHREVTNPMmoocFl4OF45QiVlKTtYbUowMyE1MURuXiUK
elRQVylGUHZHRz5YZjI3bjh3UlRmZnNHbFdQP2pERig9ZTJCMVhpMWlZYXlBbmpCWnllXmF1LTBj
IXtxc0NtUypACnpDY3tiUUBkQ35uS0BYP25GKDItX2BAeFUqKndLJnckNjJlNXcxbXRMZmloTVRs
TkEpcG42NWMhUWRRTH5KPUhaQwp6JVgpLVZzJFRNZz0/XmR5WWpRbmpucjhzMFUrYjJjamtJaW02
bio/RCZPZ1JGR0RMeHNBbjxqVVc1MXc9WlROYjEKekxOeEN0PnQjTWRNNkhjdWJFejshcD08YENL
eE1MOHIoVVIxVWh2NWlYTUI5aChIbGVjRTg0SG9wLUxqQmUtM0Q8CnojI0gxaitJJGF0O3pKWihI
e0R0bmgzMmtockJOOFMhYW0tSi12P0owQmkyUyQ4ZDRUS2VtSEtEIWB4OFdYcXhMSwp6QmkkJWJn
ekB7fXJPVkklOzF2YGUqdTNfaSg+R1A/JX5QSTN8QUwyQF9MfjkyO31OUD1OME9ANlJ4e1hQKiVt
RnYKej40bWAqVGxOKFZyQk5kc15BektGJGsxUUA7TFRtSGR+bnxDOyZBNFZVSWNSS0NvaUc5Mk40
T0o0cTk3NkVGMnV6CnoqKnM+cXAtM3JVayY2cGJ0PVkjVHlFI2wjTCp2QypuaXxObWJ7JjE7I1Np
fU43Xz58U0A3PXomdmZDdmZzekRpOAp6P1pON19xSDA/VyphfW5NbmsyfnZtcjtnO3c/ZzRXYTE2
cSpLWVZ1VGolVGt2ZT92V2IjampTPjZiVytMdVl9NjEKenE/UU88JUU+fj5mYWZ6Z0YzM34hVmhx
MXh3PldYcHh6anJKamNZOGRkenZvPHBzPW9EKE10LSVPVndMamtvWjNKCnorMUQ0SGJrKGI4dTZv
b3J7UnRoS0Z8dWBeOVAmT3dTdkh9aF95IUhUTHx1QzlWPzcpMGtEWEw9KmstJEBqSFUqJgp6T2pu
bjc5JGJ6LWUmJmc5JiQ7WUtweXQ0Uj81PnFPUilHQlRtUzJGdmRTSWItN0RFSiFrMmlTfjgoIXFl
U0A+ISoKejYkNVloTGM7aipwOEhRZT56MTlVa0orSlhLbVBGdDA5cVY9NThTUXh7enc4SChJZkM/
RyRhYkhxUVpsQkg1N1diCnpFOHttJG5JYXs+O1olWHJYa0grTSNtUTM4PnYhfHsjPU10U1hzUEVB
UT5WVDUjbkJmWHpVU2BNU04qKHNJSiNnYwp6aTFlJnEwJiV3XiVHKT9gM0RpKV9kQWdAYSRNdE11
e0xtQGFNYFQkfE5ROUhuWU13U3AtPHZ9OT1HK304ejRoRnwKemYxO29taTA/V2hfNEBuYiloa1kx
PGNyRGchNjA1OFkzcE1fMThyS2VrVkQjRit3Q25sdXNNLXo+SXA0eTV3Q3gtCnpvWTNHUntMMUBC
QU5jb01zRi0yJStSR1ExUk9fYzZ4MCpqV0A+M0UzQGNMIURXTGVnezIzRXN7OC0tKUtrY0dCMQp6
UU05NXlDMlg/a2x0WEMqKkt4THxjfHhSSEEkZkA9UmNUbzlJMj1RXyQzTmlIQ04rO0FacEcqUl5V
X1ArS0syJjAKeip0Plp4YVFRRjVLO1c8eVd4UiEkWlViZW8lMysrOzF0R1FgJEU5UiNlcDhLMyk2
SkFiNTUkXyhTMXo9SVU5TilXCnpPSnpxfFA4Vys0WXYjLXUtKTxhUSVzbVc/c1JSKTNvaD5oKGJe
VEZLWShRLTxVYzIlYlhDUGw5MFI4fFZCOWNxJgp6Vz9QS09icSZvMHh2fW13YUF4SmMkbWIxNF5U
QU5jWjYrN20qJUR6UW14fk9QZihhfENTNykmTHBTa0RVNkU4WHUKejZhPF5zM3x9TFZLfWxEb01o
M0YhajVJYGNWY2MjRkxiMFo0aTNJJCN2UFBKNENmbjkzRTg7M3diRjR0djBCX0ZvCnpYdlNQRG1A
Ynk+bkc3eVk9aUBTYklxKmpKVVZHOFNfeH1ZfGkkTnVEMk07fi00bnl8NWBaVX58OGNtd21NcjQt
Jgp6VjR6Rk9jdiVUeComMy0jIUUxdDxhNFBOVUVDd34zUmkyZlB7YmF7LUVKPT8xUjMkQXxCO3hv
fngwQ0laQ01FSyYKenhDTHAtX0gkbyk9SndaTGZhPj89d2ZEQmNPTCU4M0xnK3M9a2hLb0A0bH5t
K0ZnMylkODFSc2pqJE48X2RBdnIyCnopTXlrRHFuUlNtIyQrWGQhT1lJXnwzNkRfO1ckQHlicSZ8
al9EJWIxM3J8fn5tcDFMVnlTdXgpLSpJPk1uS3ZiKgp6STBPZ35xJEdIN0M+RXFaQWheMn40LWtU
cjB6diFqSk5mPkFJZGtzT2ViISFrRXZzOVRhWHtraSNhSTQpQC13ZiMKel5UbGNvWiQxLVBBcz03
OzZTT0A2Vig7Q24lKDgtUkVYQ2ZiRGF5bG1YZWJPaGZOaDIkZFhAJWhmdVItVkdsTWk4Cnp4VUk+
dUhgWDE9OD9lRVN6Mm9ublU7ZjRvQFAxanB3cXBrZjBlfCRUSmxmdlJra15Eeik2WHhuT245T0Ao
SlR+Zgp6V1Z8cHhzOUVpVERZcz9kZytWRztrK2t6SHFvUn5qaHtqc0BEeVB+YlFFYGQhLUl0dG0r
PH5pfWVoNG47Xj1uKT8Keilac2xBQHU3X31rUFdYTjR6fEs3VC0jQTJJVzZReEZRJTkkYUBrSVYm
TForbnhyOVROaXNBR21FbzY4PHl5QmpSCnotaEJRdjNfM2s7ZUtKNH45dnE/Xnk4JWhgWW9sNC1Q
KlNFRiRMZiQhWHFHbXRDM2NpdXdvZzYmMzBPIzUzNTBTJAp6aSo/KDNzNVJLZXlXVjxhYEB6IytU
VFMlaDxXdGQ+cXt2VDd6WHghK0ohVl8kOSVSQzZpQTJVK0JhRT5SZD5uZ3MKelNlcXpoNSlxRSQp
QDhBVlg9LUdvZz52Kk53TVotdldyb3EqTkNXe0JLRF89bWYzXjlVb3g5S2dYV2lQbClSayViCno4
MlJLenczRFBGNHFOOURZWVFmKyRGNTtwTDdgaCtzKWRab0RNTUF5VkotMGkwU341WCFIJn5kZz9h
ZT9tT0chPQp6Y2hgWWNPVFdPYj1DcCR0S0tsPnxFcGFUdTs+TCttYzBBaUE2JkYlXkxMeDJCJWd4
IT9Bdk08QWJ5NngqQlgtNEAKelI8Jm90MFhOYzNQZjheNUpSKWc4byFHYF9wUzx8Q2IyZVdCZiU1
dF8hNENpbj90RWlLUGh9Jj15IT4tJGVOWiltCnpmfihqbHckNy1eVEVNQzslTlV9N2IlT1c3NlNf
P3B4PmJ4Z204PXxeeUJKPE1GdldwPzghalJxWGY8e1coQ3YySQp6YG1hO29kKzM5MlJ9MW49YTIo
JkBLaio8aV92ZmQ0a2dGbVBCOCR7V0V3ayUjST1gNmYzSkZPKDAhfTVpUk9KVz4Kem5SSn1kZEpi
NFpaK3lKPCU3MUB4RExnNkh1VSl6U0NlPz1EVSRTemdQJDBMKmZ0ODJeZnp3KjJOV0dNemk/N3Vk
Cnp3ODM1PyYyTHlie2ZXKSNpKjxFNXVZOzI3Ji1zUXhrZilQTFoxYnFtTDhfQHJeKSU4Jlk3MGs/
O2NFNjFpUypFXwp6S3FOd1VFRGc0UjA7NktjJWdPUVpzeVhARmAlbkdzI2FtWUR1RGg7VmtxSzxi
U0g4bWwwOzh5ZVJaQ0RrJUxObEkKekt3Q0xAWmM7JiVJOXM3T007byEkZEh7KFliS3VoNUgqTEcr
X3xARVBLZ2RFcXpsUmgqZ1lyTERRKHxHeSt8OHVmCnpFNjh7RzxBTDFNWSNJNEExQys+RE58bEh6
SFE8a2gzfkNBQ3V4UWduTEQqU1hMSzsjcFpZT1hmTGdFa140RzEjfgp6Q2REJDd4ZEgrX0RZa3lf
ez5AanNeIVRDb20tNGR9IV9KR21kNzRwfl4kalo7KyMtU3RJWEZ8ZEh6TWAkaH5jdVoKenQoMzdP
eT0xcj9aJSNRKHJlWkwoTylOZWFlOzl+TmVRc1UzK2ElZ2EtRiNsUiVtKE5JdCZKe19HYTFkQXN6
RGEjCno7RlIzOyY2X3ZBX3s9R0JiYiZ7JTZRTG11NCFMPE5AWkphe3ZYK3QtO2RxNlJyOHgkeFZg
ZnZ1N3NkJj1WcXpKYAp6U2RifnVQflp1Q191ZW5JQTl3TEpodS1BRS1gc2B7anMhWEdYSCZySkJv
bVdaQDlIZ2s5JWU2MyFkZGEpWEQmOHoKem0xQm83ZmdTTHgxfmQpITtFNmwjLW58ekBZdUIlbCs5
I192VD1VTiY9bStHWDg5JjFNWSFrM2RPVXQ1TFJ1U29CCnpGLXI8KEVPZzNMKXFvPE5GQkNlcm8/
YTQmUSlJYX5tQkZ6QGNyQj1HZUU3PSFTQTYle097Kz5kKjlxJjxiMTk5eQp6ez1ZISpWI2c/NmhO
SHlzVWB6YXd2P0tER3hOdG8/eGc7Xz5OJDd7WDwqMjhPN2c4JDJWSE1DRURxeUVxSiU3eWUKelB5
WHs/WG9jKGd3SzNoSC10aGpYMGtwKj5eNV90I0NefG5CZkRDTHpDNnlrdGlmcWE8bTlKMmwkVCtu
fjdNe3l3Cno1QEp7K3NLKD1yRCZFbmt2Rm05PGpWX0QkKG1oOHQoMnNZP3hKRFA9M09udys7XjV5
dE5BKUN1WG1qbWZQP0V0MAp6PGhrJFJfTWtBR0IjKFJ8Nnx0PW1LYk1WM2RXWUtMbDNlZiVyPyV4
N1YoNWxzUVRPNXUwSHBvIT5HfTc1Y0ZiM1kKejU7SzRPVjcwYCMkT3F+NzBHLUNFMmJ+NVZLU2Yr
VlZsZiFpeFRII091cjdjazBLQEd5YCl3SnlHZlc2YEB9VlY4CnpSVHo8R1dgYj1qWnEyQlhNTElA
O2l1SGVBdn59fDx8RzAzNGZnTl9Cam40MjBAIWZ2Q0dSeDUwJCQtPlEhZ0pUYQp6I0ZhOFFXYWxp
KD4hfGIjO3hMRjFMTng7dGkxa2IqZT4+SEl3ZXNFR3RLV08mdlg1NkolbHByPHE3NC1oOVRwfF4K
enhkeWhXUk1ZbmBheVplX0h5KTJidXFOa35yd2l0PzU3WGgpQnlMaEU4dUpvTGNxYSUoMWVBcmJw
VVJQRD1DTyhwCnpCbik+d3k2dlN+LXJuPWpZS01rVHhEezwjZ1ohUiRxQUdpWVBxYzheeGhoMz9V
UU9mYTNQSU9hQlBxIS1jcEJffQp6X21mWGZ5engqUztQYm5IYzdLdWdBIz8qQWhTLWs9aXo9NWYx
dz1He2c2U2kqMTV2U3U9ZmFMJTQoeCYrdzlmM1kKeldtLXBZNE1yWCN2Kn4xfD5rK1lvNmYoUE9Z
KCFfc1hxcj9wKlh1WDlKVHklPkwrI1NBTjtSWnhLbUdwUjN5JUl8Cnp5OClmKEtmaW5sK1F9Kk1Y
dClTQGhkdikxIypHWkdrUjJxMTZiWGl6Uj95fWJBUjRwbnRfI2sqYHMpK0dkO1FtSQp6KkY5YGla
ckhkSGQjRSgoPWcyQTd7MW8wdTRMM3VoUCFUK0crTT1vVGBrS0NjbnBkKCFWd3sxNEpZJHV+aj1Z
dk0KejVARDItVkkhXl4jUUVVNUpKaHd5Iy1XITNMZ1JpMExgd1Reeml7aUcqTVF9e1p0WG02PDxM
JDM7fnxRZmF+dU9qCnpVUWNVQlhKVk9EIXRhM2xUWU5UU25NamM5SWA3TnZ5STtRa3pjVGJeK1Ql
WSpNfjtRfncqdEQjbSlRZUx5b28yXgp6RWVta2ZPOGJtUklwWVRDRTZyRUJNWVBlPEltKj1YR0M/
aEFOI148bDR4aG4rKXZAIWZocHlkeitUKkpuYXBPLWIKelJsRUBMfElYSUgrbyZwT0RxRUU3b0o9
bFNkdHhXTXFvM2koRW10ZG5yfEMkQGAwajdGLUcxZSg1NGBqWGJlbzNPCnpnWVdsK0hgPnQ4TkZh
TVFtakUyfTRgem5rJW9hK3BxS2F0fTZMWG84dn10KmZ0fVFnK0lZbVg3K0tGVmFsbkBoPQp6UDZs
Nk9Xcl9IcGghTEFzTSlHaFRSPzJsSlpUaiUmNTRObyk/KDYyUyhUUV4rblYpKz5kdH1Pcj04OEV0
R3ZkcSkKejxxMlhkMGZKSXB1Z31RUUxgYDYxTUhlVD9WZ0ZMNEIyaiF5WCh4e09kUWZrKlpfRUNk
Wn18SURoZSN8PjN8OC1ACnohOyRPdXQzaDxuOFc7RllHKWohNjUybGk2dUhRI0NSdSlGT0dCQGli
P0dfYHxoUmpzOWtwUzQ4VGxRYl4/OGk/Jgp6enY5I1hgVlYpYi1PMzw7LTc1Z1cySHU9UDN+ODlq
bEchR3QyczJFPEcmfHZoXyhSVmVRYn1lLUVOLVIpZFBKdG4KejNLfjRHQVFUOG1QYGxIQnl9dDNy
MUdqRzhhcWJoVm95NlJ0TUBSOUckZE9OZ0JIOXNBcm13MXx4MXVUOUx9dSlUCnpsMiMhblMxSDJ4
SytYQW09Ync1djdhZX41SHowd3c8SWh5VStmaEItQUBYTkFUNXtjVSZvZmZ6eWZucCh3MlVCNAp6
VWV6VjJZXnBLaHNDMit9QiZgOTche3t1YEZoenpncCt1TTlMZGZ2LTZZbjFQXzx4fnBZVGVxQW0r
d0tCKkg0aCQKejJ5bmVNajIyUio4SEJFUUJSV0B5WSowNTBIPFFSTWomVT9KVz1jKys+R0A8OSN2
UnJyc3NRRXAoP2d8TVV1bHBBCnpwIzQxfCg2dGJjWSZffU50O2cpIXY2fDVAZjRlI0BlfXY/OTsw
NDNoPiR3JDdwJXQ7XkNzYkxJKkFmcTlPb2dJWQp6WTZXfkVjfmV+U2pGbW5IcVF9cGp3eTJFK2M+
WjxJLUVyKVJTRUFaYj4oe1AmOVNVVnt7QWZrQWpVbz5wMkYwQ3AKelN0bShLU2pJTTlMPWt1SkIz
Zi1LN3hqelM0UkYzR19nU2g2Sj5mKVQ7ejJleWZ8RzNIaVRuMVBAJi1EVD4oPjZlCnpUWkdPailT
c0xNYHROM21RO0MtfXNBTks+I2RwJj07R09Bbnd7akJfdCU0Y0VqOHoxO0IqO1RfKGk5aTRQT1cl
VAp6KnNyVjY1UzdDMzZPRWg9ejh4OXp4TlpgPHtCfmFUeyVpTlZfMylSZ0lvfFRLNWMoJXA8bStG
MjNEeFd9KilsPVcKem8zKVppZFlRfDVOQGB4MSpgUVBqNU5LfERgc3Q3RUlRNUs9UnpIaTdPNmJ6
aUE9bTxsQ1RzTkYwalkoUl9AaXhfCnp2Q1N0NmRDcHBaZmZWOVU5cHwxSDFkZXtUbSM+YnlYJGUy
Q2FoQiUmTFc4S00mVjZ+Tkd8cHw2QlNPZk1VM3wqUgp6SCgmZT5zdnJzU0JiTzc8KjQ0OzZ4PEE3
c01YazA7VnN5bzVZK3orRmlWOXViKXtRdTx1dCQrQHlKR0hLUWBgc3wKel58a1VNNnxJJSU2UEl1
ND0pPitmQCMjQ2hkMUsyVmllVTNZaCVBbkw/KVBZYEFuPG48QUgpd3E5Y0M9NkQ9bGYyCnp0eXxR
V3tBN2JUc0JJWl5KZilpJTlSKlM/TCg8eDg8Kz0oVHgkY2hGVnRIK0RwZikha3Vxdz15b014JDkj
Y1Q3Kgp6b0c1TE9FPSVEfiRrUjhBYEFNfW9TblB7diNVUzBVIXNvLWJ6Nm8mKHI+ckp4VVMhK05h
TzwzUys8NzFGZWVqTGQKemNTX0RVOVBOPTJgUj1RPyFBO0U7dElvfCUjPDxDfVNeZGxmWF5EdnpF
Q3kqWUdJQzkxTyNRcXZtVnktTmxCMVE9CnpGXjBTKSFaQktrdnFxWXZCXmNuWHZneGptelRTM0Zq
Z0hAbSYjbU51azNjcllLJElDSWpHZjc3N2klVkN0cD10PAp6cVUqVF48JGdZbm5UaCQpc0wjYl5D
djJodHU/YVBrNTF3PTFnfHxPQGBQTm5NXjUwTDstcThffTZXe312Jis0eUoKekdqMHNVUWw3RCNT
elhGaDR8djV3UFhsTGZxfWI3K1ZjX3VRakdpSVJNSjtybFdRKSFMVDV+bk5Pbl9nS01IJSZ8Cnoo
R0UqNjk3SC04Yz0wVUE8e2JSc3ZAMmVEe21pRlV8MFJwQUFwUX07PiVGRE8ocmtRY3J4ZWNjbHhk
P2l0em1PVQp6eEl4cHhZdC02T0RUaUojcldrdz95Klo7VWdMUWFYe3ArVCR1aXRtJkRoWUduS1J+
MXBZSDg3YSVhSzM3blM+TFMKeitnKmdCUihlIW9SRGk7fG1sVCMyNmI+MzVqKTgkQnJmIWM3TTJk
cFJzKSt5JWR2Vkp2JDMzKzlyOSVpdXB9KnBPCnp6I1p+NyplRXhxQGY0dmIlUD1AI0tvZ0lwZWNp
PDxwcFRuSGZ8MTRMbVVrRzYpPjBgRl5vWG4pVXh+R1F7aj9sMgp6UFVKRkdkfjM3TztVfEN6P3lK
VDBpWF5SVDQ0WX1mbEJ1ViFGK29vQGxjTHJQTUJiRjh3dmZqOFFQSiUzYV5iPUYKejsmSTFhelQ+
ZTZBNiQqajV4LWoxPE5nWGMwK1J2K25QaT9mK2VNQFlOKllxUGwjc0duSyVCT2pvK2IyMXpOZXY9
CnpGKEZrIyRXVnFXSlY0Vyp7UCs3V28mQztaWG5FLVJ3WkFfO1FFeGIyXmNsTTRkJnFFaTUkTXpv
dVpHeiQ1ayY8bwp6KkZoT0FOZWl4SUpUPSk9RyZrXnx3ezY7Vz8xZzlGeT9WSHZuU3JjSEMzUFp0
NmZjbUVmZVZ8KElEb145bk5PbzAKekA9ITJveCFYS2p5ZTMlNGgtNTVZPjd0SXwxXkxBREgtN3Ju
amhDUmg9SWhzeEMrfH5pKmtkX30pPDZaMj5udTx8CnpzZj80YkxkNHY0M2teflhzb2IkfnIhRSFg
WT9UdnFHc3Q1TlRUTTt+RnQlWE82bF5FVE57Z0IjWT5+V1ByLW5qYAp6X3lEODNgLS1FI3xLXnpz
UzJeZGFLaVlfWCoqZkk0ND95dz1ZdkpeSHU0ZGRnRCNvb0VzOD1KQ2FvVjtEJSE9Z3gKeklXQ3gx
IXM2TmcmXnU0UkBjMzB8VDQ+JGNobkhTfntgQGNgQEQ+eSYkKFVneTZmam9XISh3MEI4WD58PWpN
bkFOCnpfO04oMkM4XkA8SGpnIU5DbThJNHVkVlZVSVdCQEQoKnJgT21JRWQyO0tneWAqXmkjRzdv
RVFLWW9aaFhxMXRmTgp6dndnSmpEMDFjSVV4RiMwRUpQcnU9ZDRKO1gzJUptV01hYjI1ayY0LVkq
ZXEleX1eI0ZzbD9BQmFaZF9mQXpOO0kKel40NCM2WStDSz9LZEBGTyM7PWpIJkg7VUghNUhKc0lw
UGRvUWM7OyVTWTFBancyMVVRXypmUk5PY0Jfe3Y4U0BFCnppJXJCeVZhQ1F2bVRYN0QoU2JBUSEz
Uz08e0h7QUxLMiUtdm0oQmB8bT5AZ1YmcTN8QGUyQkZ1P01gPX5aQS1GOQp6KC1AWX04RWRmR1lg
MlhNRTdjbElCaXp5JDw4aGZZV2pGZil2QVMte15+YXBPPjl8IXIlfk0tZlgpNnRLYGoxPHgKenRs
czJAQSg/YE5xe0JTbTNmO0M9TkU4enElcG1fMm9VbjkwMlo9bllYPX5zcUw/KkYxQSh2PUtPJT5H
eDQzPEYoCnpuRzcpJlohIWhpKC18TVZAWUUmbS0rOXQlZzVKRCgxdipCTT9ZaUJ7WT5ZdEN3eERw
YShCLU9kI0I3enhBcWBTOwp6MG9CREdeI3NHQlZKeUpKUWdjISMrbDJ9bVFpU1NlKXN1SzV1SEt3
PVFiSEBDJCozOVkxVHV8NzZZeSQ0VGVTb20KejF8cFRMXj5JPHxfcVAyUG9xTiQhPWNDZGQ+KCot
YmVUKik4RStWNlZCQj87eV5uQCh3OG9eOVIxUjh1JU1AZ35KCnpPdkdpTFZDJSUmYXVYcFI5P3p7
NFRkN2k+Vkk0bDdkYTd8aTZ1SVQ+fEotLWZMbDtFUTZ8clk9cyVwYzF7Z3JwZwp6a3d8JEJvKlRU
SFpfIX0kPjR8VmxEM3pNXk5Mcm5zRjJ0VXBIfDF7QmJYSHhTbkswU00oSUNqfFcpI0hDbTxsMV8K
enphSDUzIyhUSCNJYUZHRUBfe2F4ZnRPZDgrIzE0dTIjam1aMFc0WVcmTUkzMVFgYitnJSglcUBT
c0srZkt7aHs+CnpaKSU7QG40QUl9TzxMRklQc3l6eThOO1lhMUA1KyglWDJoNl5mMHl5WUxLbVQy
b2ZOLUokTF9gUGg1R15pS18qRAp6MUVeTVBYYSMtZmY8fTtRTT5BenNtaTJSezdJT3FnbWRZeWxB
I2M9KDdBTX1pUDgtZlUwfmsoM0xGMmxUaVhKKCkKelNYN2ZXUjteO18kKn1nU3VnYCYrb2AwV2te
ayl5ZXhgVTA1Xn0wdF4kan1nQnkpUlF7Knw8UyFrP05USnY5VDlGCnpeSkI5Q2tlPXR6YD1PUSFp
OHgmemVQdUgxZm5VYEdHfjJYcEduRGFleXolP2pfaXo4OzVGb01iamEzRFIweD84RQp6dEF7KFQy
enZ1OGd7azI7cH1Ma1MjZkYlPDskKSMhY2x+NkczJn4/ZFZjXlJVeU1ye2Q9JlI3aitWUkZPPz4m
OXsKempvWiYjPClMQChfTWpKdzVJTnkmJFYzMFI+eyhSMWV3K2k3Pyp5cENMQ2M/P2RabCR6UDIz
Q3M5RG55Qz8+X2tFCnpEPnU1KT1gTVhJMTdXUjhTOUs2VTxjN0VFSyUhb1ZeTn5pJWkhJTxVYTtg
Tm1wZm9KcWZuI2RwYDNWYklUVn5eYAp6WG5ebksyXkxwKE5iP1lsRXVVfUh1QipMckRTI2FOelAo
fVpPfE5hZ1h0Z0A7SkxqKXh3K3pUemUqOz0rQVExT1oKenlRJUBjTUZIUkwydGt1fUNScyg1SG1Z
Qk1HZkNUSz1AKFY5aD4xclV5RTk7SUcjLWdZYFAkNVk1bFJQelVPYFZeCnpDWj5VO3RYITFJIXZi
LV8lZnR7PEArQU5hfEpuV0IkQ3NWKko5TFVKZHl8YSpwJHZLWCRSQzVMWW10SkByaj9xMgp6S0V2
fWlxPTx1U2F+bjlOTlVAeDY1WHA/KiFiS1F6T01ueEtsZjgqTCZhTDVeXiVSUyZVYjx6I2FlREh0
JVJmMiYKempLe3hPZWFUPCotPUlzMWZKblV1LX5iV1RgTTMoRyR9PjclcmwqQFVGP34zXk04JDhL
YT5GIygxLVBjJTFjTVBWCnpTcCYzR0JRYT8qK1RFSlBFKjZYO2hCKFB1NzJeYXJjdD4xeT40Q2RI
YHNYPGB3QiFIeGtPLTMmayh5M3s5S0R8Jgp6YVdXQWoqV1JuUHFBQ0dDSF9ROHFiSXIyU0w4N3M7
ZGpQc2NpY1c8cjxANEN3QiM/ZUw5KD8lYmJLaWdBI3UoYUcKej14IXpvKWh2K252IUFRN0dNIzdQ
M3Nze3p1KGw2bjRTZiVtR358cj9jNkZlXihsaUI9Tkw8YnxYb3pYQWdqQUU3CnpWKWxDMzU+SFNY
ZWdfZD01WFlYbWFzU1FOe2NWLXtIe1owJSp8P0dXZXQjVGY9WClkfjReVDdAWEtGQnZ4Plc5SAp6
cVNjMHM1djhZNU5+dHBCKE98Kk5eOTNubFAlS0d7dnhBaHJUZm0jNzg3Smc7X25ySTU4I2xjNlFW
USt0clIldXAKemoyKHM/QGVsLXJ2Smx0UmJHWEpDe1VScS0pS3R0TnV8QXxJWSpQWXd6VTlPWWMp
dT00bTBDcUdVbzg4JEdSPmpXCnoxay0mJU5MdWoyZnhsPHhfN2dBSzEyVCYxKX4/dlVxNT9KJFkj
WXUrO2hnVH03NnVLOG8tVTZ9c0xKMy1XQEx8ewp6ezR0P3lnNVRxO3ExOWx6YFc5WjBxfEl6Ymgw
SFBJIX4hOFc3QHhjN2pRZS1+Vj5QTjwmUk9rI0MtVW9pVVZ+Jl4KekY8PlQ5JDRyKH05SG0tJFdI
SHk+Rz5IdnJ5c3BIR25NRnYjWGlkbXQlcGorc2ZSJUwyMnspYm11TlBORWJpWW1JCnomO3ZWJmUw
bEchOzVfQUJfPkBMfGtJJlQjM3xVUlpSfWUqSlN4bGY3JDRgKigpRklQaGdkOCVwWjdjSntHTHB6
RAp6RnYpe3lkb0ptPDZ3X0wlQz9ASnB1dnhnJmNSY15kKj9YXmxfMGlRQFVCM0FheD5udUQzNFR5
QVdVfX5CPWF4NHsKekAqPXNSK0RLfTBNVUJQSF4rR1dtTHJ8ZEEraGN7JiVfXzY3QClFIVNAQ0d+
aCReJlFKXkxpYVU5aUF+Z3RLOUdoCnpeO2MrKlMlfnNTeUl8ZjtaNXFFbjJmMnF7Z3d1JnhaRlpO
MyNoWFN7JXdvYlRWYXFXY2VSZihYbV4yTGBNck5rPAp6JEhBXks3OFAqcHp6MktxKXt7Ozt7bX5F
ZD1tZm9VI3t6QmphM25BUUI4aVpsaWlFPXwqVSoqRWxmansycTgjOG0Keipfb2w3SFg/aitXfEVS
KGwwa0V9U3VeMkN0ZCFyez1YPDYtQ15OaDkpRj1PUV82ZEt4V2NBKE9OTERQcHwzISl+CnohWERC
I2hyRn5iUypzQjE/M0JxREJhM1k1ekwzaDhsYHpGM0RLWGJPV1pgT3AjP1orT3U+djRJM3IpUytu
a29vfAp6aWZBTW81eThSPExmeStCYHxpMk5fVX5PYXxMP0VPPSY9M3tJcSUmenRra0JKcDtFPSNF
QFJyeUZQUzg1cmlDTnkKelVgQFBeUmdtVGxUKH1oOHFmMl9AWH0odz0wQk5uSEV0dHthMklLfUZq
K1ZYOC11PUx0bXVeTkcpOWNuNj5AMnppCnpjKnJaKTZYOXIpeUxsZDh1SFdheVlBIyRYKFA+bnJL
flk+bCQ1ZHVuYnBabD4hbkNMRGB0MFJebylxLTs5Ml9uXgp6Nktqcj1hKzBUOTtzeHk/MDtHclRl
JnAjVlBYNzFTP15sMW9XdiZYKShnXlYra09uN0QjZl5HSyVuVW1FWlhZWUEKelc3dUkmJGg0Smcy
IXVnQnNzUld2YWpiUDVKYmJzRXhfaXNEI35tamBKTmZpb2U/VUs4Z0hTS1AwOyEtWU50KVhICnpR
S19TNjNuRVVNRnNGdntnPUxvSncyb0RsZSRRND40dURpfV9vPElPelcwUWV7PEc+dURmZDY8WFp7
bFRTcSsjaAp6ZX50dFI3T18xdiZENmMxSks2NkIxN25qY3FNb18oSFdfVFpgX0tHKDxNbFY5dTw4
MT5YUWZRX2hNeSliMFB5e0gKeiY7a3plWm9VJCVnWTRte3cxZSU9NkVTXiN0aENefXg8bkdVNnBf
YjFqS1k5KjhTNU8zVmtGT3V7RUFzRmxCcUo8Cnp7YCVBdlFgKXMlalQjZSojMklyO1N4RT02cmFV
YlZSUSs5Xzl7dEVDbj1TKll7YCQzWmZBXzZ3Z1pzbDdgcEdIZQp6KkZNT0UlV04mYVpAfXZZcmk3
XyhJTH5ScXV7NT5gY35lPSU5WDI9aGxue2VuR0RwYWJldStiakQ7ckV+Y0czJEwKekBPZC1mOGhi
dUdfU3gtd0A4N1craDtfUE9xVjB4fS0mSWI5TD9EQm4/cDc9OSo/OGdXR1JRJUZiVC11bmIxKms4
CnppYi1TOU96Nj1WIUJGenk8LWBnJlR9NVlYeWd8Ozw8am8/RWRYazAhPD04RFJ5bm8rRHZ8NH1O
bnMyKGdaYEhfOwp6djREfVhCUEZsaHZ1SW1+a1YrcjFUU0E2ZEtfSGZeZVNUZUYzNDxLQk9qVnB2
SlA1KHBtZE4tezwjQHw9ZChQYlcKend+S0I+Z0VwQSo0TF9qJGozZSpBM202LVR1ZDs9a15TQyUk
djIrM2dhdz0rdUR4ISRrISpfYyFjXjd9d1o2TEhKCnpATEcwKUdVZDdWeXRneys0bkhfTGJSR1o1
eUJRY2s2QiV1cEJRaEZMWVpuP3ZMR2UqI3BaTkc4X3AldDh3PiQxfQp6VEFRNGtfJSZOI1NkRlVY
SnZeP2ppdlptQXVNPkEyXllQbnZ1UjhVb3ImazFFMjw+KFE1cm1xSlZyRE0oeWhCWTUKeiFjJkAk
PEhIKGFtTl5ocWVVcXRzVX00MmEoaSpRaEdlUkVYJD94fDRAWlIxQjRxOzI1Sis7Y14yYXRidEFY
TyspCnpQKTFyViQ7RzVBM1JWU21DY3hfV3FTNmZDRCRLTFFNR0QrOFJVcz1qcUhLPF8/d0RUKEhq
PG9pNURiK3g8OWtsSQp6XnJUYjF5WTgzaGN1NTBTcChtT2ZZMk94dSt6XnpQKnk8OVBSVWdreCY/
XmdldnNfUH02QzFAYm8xNzhwJDgoQ14Kei02Ynw7bUxVJXk9RFlWQ2I9SWJmeDJgVlEtVCFCVyhy
SjwzdGNROW42TWZLMilGY2QoVUlXZlg5Zmc3PXdhckhMCnp0fF5Me3VxJTw0Jj8yNXl3TUF4ck14
Xl5SUShoPUdQfn1KZ2oxdVI+U0MjWDQpJE92aWB7O1k8XyFEb3dAKV57ZAp6WX45KlRLZGpWSmV2
QUFyMHNzbj5LVzgrPVdKQi1vTiRJU3YycXx+N0lAN3xVIUx7OSpHO0sxQlhhZFo1IyR1UkYKekVH
M1VZNk4tdDg8WGxPR3dRNXYrbUxwPnc+ajBxTF9VSHAyLVRMTW90R1hgP2VtbEIkZXVlelhiZSRy
TEE9eSskCnpNPTtlKWN0IT1RdUVUSFB7NWhGa0Fhc2VCTzsqUHpoNHwlfCthNyVBdHwjd1pPfHQ4
LUpvQFYoQH49MjdWfmJKTwp6djZWZ1B0Z3Q5MWs9VTdQU3pwV3dERlo+TW92dHBESlY4Y1NjZTFJ
fE8yJiZSVk1lN1R5WGE9UTx8Yyg1PT8rYHsKelQqIX50eDNxI2R5IWZ9aEBiVFh0eng5aW9TTzBS
dkE2SHRnS1NvJDIoMVp8QlNPU0VTaUhUVCpMY1phX2RXSENMCnp0IzBBWjA+aXxGLXBxU3VTJUpi
VFhmUzA/dnM7UGErSSpfaklLS09lRkVeZH0+XzR7eTtRKFh8OSpDbWQ/amlzNAp6QjdgeTxyb2Uz
X3EtaVJacGlHek4kUVZKKnRIUzF6ISt4IVoxdCFxRzJYMUBlJHZkQmc9eF9hK0B+U1VZOEA3SWAK
ekxOYGt1NWdxZWUqdH1YVTlpYz9eNmJfe34yKUorLXR8JHt1aCRCMz9XSzA8XjNzYGtRSHxVNDVx
dl47TyM0Ujl8CnplQyZsRUs3OE1ueDNGa35nQUhLMUZuV0VaWG1VOTZea0c5I3QwTUE4KVd9SEpP
MzdGcFRfQEN9R3lFfXNJZyFpWgp6KmF+Y2xHSDwoUGpKaX1ZNkxpRj5pakwxVmdRJkN4PUpreihV
dz9ufntaQit1KCZLJSVaYXF9TWU8VHZWMSVlQjkKenM2PWNtZDBiVUBWOHluWkF5ZThqcEoqR0hV
ZXFUSEN+Syk7dzNpcEsyeDRhI3VhUGN7a2stQkx1QlNJJXtAdi1ECnpTNXQ2NVpkRWpKODFmdEtz
ZnNNRFcobHJUO3RDd0kxY29IK25kZWxVSTNhUUNSTDtWSEZYbT5zbUJDRVlwNCheNQp6cyVNSVdS
a01IRi1nfTw3fEFKTF4xQHxtKS18bkBxa1RENyhjJiFDMlhJSWJRcCQ+OH5vRSMmcGorPGMzUE5w
KmsKel4xNT9qbEpuRDU7YUpSOTchNiUzR2l5bVRmKDB5WnA2M3NFYnZUfnpHPyRxSyt3JDRGSC1D
VDg9QnJre1JsYyUxCnpHX3B3ZUxAMUhhX3pKJGsxZk4ofjlrSW53VngpP3VWUmdZOCVRbSY4Tmdp
QkQydlZMck52XlViZF84PzBoU0ViLQp6JVBfUEJzSSg+a2VPVzAkSlVmcCl7bWtweyo+P1NeXipI
TjJib0dwb1VtcE5kQVNRYHdXcE9OSUZVZWdIM2tOTXoKekVofj1ac0dLSC0qOSVUVTEjaUwkcy08
YXhPT00wRnNMO19ERkw+PHlKdHlzN0hUQSRKSD18OClraFF9U3ojcn5uCnpHQ2ErQUs4aUJ1ZXM5
PWE9MHs4UG1ZNDE8aSEhOE9menh0bCR3MzBaQHBaRHlDIVZ4ejBMfEB0WHg5VkpKLSVtRQp6YiNn
cjs1OFRkT0JgNlZtQE1sPFBfb3Y5UGN8QmxPZVpHfEA5X1ZePTJCRzFlPG9YSk12THAoTiEyYTJ2
WWZWTD4KemJScGdEXkMxNCtgT2lDRnlYQ1k0aGJTaWRQaE0lKkBSOGVve3lVSD9wYmhaVEZjVUt9
UE5oYEVKZUo0a2w2WSp0CnohN05MPDckX1JYd3tZfjRNbWBPO0FsZl4pPkV0KEctflE8O0deTmJ8
SCRWUz5vPEtqO2plUCN7VTJ3bTJyNEc1RAp6c1BoWlNlWGRIMVgqZEhTc2pRdGY8Vl9VYmc1V0RN
YF56RXs+JnpYX0xFQT0pJVVjM0hrU0pjZWBkPCgyfDdpY0oKenhLZDE1KEZBXnR7TzBBMDY8S2VQ
NUBnUVUwZ2ooVnUqIyZJNCk3VWspNk9fbnNwfjRSVUBGeClDcVQ/JjZ7RWFECnpMRjhlQjFQXlck
UWpsYCZzZzdOKngoaV9gcU0qZDtiQ0MtYTw+Ry1icGZ8ZzItRk1ac2tLQjk2XlgyOXJSOzJ2agp6
QlMhXjV7N3IlSVR8PksocyVeV09mPyUlWiZwV0krVmo3Jl56QER3RFVsS0xiMzVqaDsyKG1INXFL
STlOJTZPN20KelpZI3tgTTZ3ZGpfbWtmfld6JklldEYrV249TF51WSNFU2c8UypRWE5kQzEqWklk
NCQ2MVFASEZuclgxM0B1REpDCno/aEVHZDcqYzdNZ2R4MWReKDtKNmJkaGNIRyleeU5PMmBvWnpW
WXFHSCNmZ18lbnw2M0dNTlRwOEp4RE5rZXdrZgp6SXYkMSl5SD01N3k8THBhNVd9VWF3Z0AlSVAy
MHh1UUolbUIzJSZ4UDBaJDxpPGRfUj0xQkZRdylpcz1qRDNiNncKeitAMFdEVF9Ib0E3V35EQi1g
d3swSkl8d240Q35rOGEpYFUwY0R2Qk4xRWhASzNHcT59RXBUOVBPUnZHIWtYZkRkCnpXZSlMbE90
b1NIVT87P3FxeV9SSWdreHA8WSN0NVE9WEVFdC11YipPN21YJj1GZklYV0A4NGhGe0BoRUN5Pyo2
dAp6Vns4Z3ZoaEVXZjxne0RoKFpQYGhXS0xic1BhfG5hRiMmeSYkMS1kZ2lOcXgkcmFIXyVsUHop
WiM4YUpzWk1HREkKentmQGQxdlNZOEdlJnl+antfenFAeExMbjtKaVZeb0BHJGk+Yk98MWJUdyhg
N04rTzx3QXJkVXZ0VnVaTClMR2M+CnpRZGdWZkJ8ZHlxcFJYOCt2KDdBTFZaZDN2Pnd6byZkRTQj
SmNGPC17ZGg5JmFoQzNjIXJHO2g0aT9fbU0jSypiaQp6SVJkdkFwIyl1YFh3XlRycj9WcmFNb0pj
Tl5aaHVEaTFEYXx4WiooTkFKcGUyVF5AXnNyNFZqIWQrcUZ0Wn5wOHQKejR8KjU8Z313e0BRWF9L
SmU7eDt+eHJ8OFE+TnU5T2d+eXFmMXc2dWxtV31vM3lFISs5cXxsYDtxdUl6YF4jY0JTCnotS09p
YGB7QTVwKEs8Qz8tOSNAeSt2cCpXJC18KDx1byVHaHBfMUBEPkRXNl4+Zk1Xc0Yld21pZ0ptNXlw
Sk5XbAp6dzNLbnliWCg+XlJnSnh7al5GdEJAciFxU2BRXm4mdD1mOXYjUkB1MTBfM1h+dTJFektt
UCVUSFRJR3JLNnNAfFQKelo8fEZVUWAjbDlJQW9xdE5Uc1BOKHxMeG1aXl5NQmlPfXlZaUIkIztf
UmJyZHVRflJzdDNNXjlveEFvR0dSbUUkCnpCTHhHVF5tTW5SRy1ENCtCYikre1Y4dTNYb2lFYEUx
XiRUSyM8MHFSUEtCbCNYRUdmRE5sXnBJbHg8Z0BhbyNtQQp6VTlzWXJmQihnYjYtaF5xXz15c1ZH
PF9OT2Y/OHRiPGF1QH5TNjBSeSY3d2pXUn5qX1AoaDdrMDg9b0VqJXpzYU0KejBXfl5Yem17K0dm
eXclWDhlT2Q7TUV1P3B1JXNmVDhmZStAJFpFQD8pXj1PK2ZpZX19ODB6VD5UUGZHMW1RNGkoCnpK
Sns7bWNyPSF4Wn1Rak88MUxSckAlSWx1e3FEd31wZFlwVWdPIW9HN3JDaXBmVHVQeGgtM2B1JCsr
cWkzc1dKSQp6VSl9OHxSZkJPZD1FX3FPbDVFTnpEbVFadUVeRmQzQ3glZFU8Jj8wUShuWXJqK3Y+
JCNNXz5ReWVIVj87UiU8XnkKejdvRW9yXjNXUWprKT5fOXVNKDxJOGxxTT1RXj9nX0A/dD5San5P
VUlsTX5kOHQ0MkFHRChyUE1hdDJteFFQfSlZCnpCJE1YKTt2XnlEVHUlSnhAQXZROWNlNTAyXj5q
JUJvelh1YWZCYkE0cCEzRj5mIzg1PWJ+dDc9TnRqKnp2YFR+QQp6UWtmSSFDSys5JjY9NSQ2TFYj
RVo3e3IrblNBZTdPIUtTbDVmOVpUWStFamYxKkp4QSFpekh1emB8N1c9QnZuWiUKejxONVl6KE84
c21zdjs+PT40Y2BsUEpsJXBIUSteWD1qSEY1dyhwVEUoQTNCOylfeGpsQUVLUXdrWTUlK2smNUsr
Cno0Q2RWQU5UYGVzYDN7RjRMLXkrb0lmQzY2MXNWaDxYZktZOFZ1S0YwJVpibEN5NmNOPT8/Qzw2
YG5CeVJmcUMocwp6RF83dVE5UWtxeHFDOV5SQmgjY143SilyOUMlUjJ+b2xHWWE3TVVDd054KmBR
YT9BVSNZYCo7d0FOdTF4Kk1SKX4KemoqVUNlTERuRzB7eSZKUXxMOz1IPzxGTm90PVUxTU9me3Ym
bEZXN0xUXks1JFV0MzslXzJzfDZ8SXVAK0hBRms/Cnoydnxlb0FeUUVsTVNnTT1ENDx6dkQjKlVe
ZDlFelpIKlFHRFdPYyM4S3wld1opLTkpKjdSaVh2anc/PWNRaChMMAp6WEg5TUMwQGtTTVIzP2g5
aDFMcz4kZHRUcGxHVGJkMztefnd6UGE8M1E7eG09dyQmRWc9QlN9N201VXJ4ZllofnMKelVuQ0Vr
MFYpUW1IKUwjPHNAMlRKYjdySzVEWExzKU54ez8hRmpIeSN5cjVyQCR3N3ZoTjVMdzwtKCV6NnlQ
biYjCnpeQGw0RDBXTyE5U0ctZE1kSFBMd0FxdUE/d3VmamJqZn1IQSl8SUdyPTkwVzdCPCFpX3Jz
UW1yNEU5WCkhbUtWKAp6MT1WYWVDJlBeeEptVSU7NyFPO25KISNgOVUrOyRraElNT2hXUj0qQkJa
cVN4cztzfGRLKzNndyhiJGdhMjJFbVYKeiFwNTQzKn5Gd0Z3UEVfYzV2YUo5WFUkYTIjfDBzZWtr
RmEjVkpUSFpBbSElU1N9cU92O2Y8cmgwZypEMj5ZYnYqCnp4VUxWXkt3QUxAPCshaVUtMkM4IXgy
eShie2d6KiNMKz9WcXl5fW1UbCtafWFoTChhUzJufm1HT2dMN2hHfGZYNQp6RUAmaSt2JSVLRlQz
YUxuSEk/NSZtZj1YYXpBKz9WWHsqdEVSO3RZRG1FbVlZQTltMGRkVkNXdWlrKXd+eTZjfXUKemVT
RntRUGN+bGk1Yygle1djdnUtR2Q5Sns/QDZhIUNNVH4rbWd6KjRzaiUlcDVORHViOyZhdH5rdzh6
SFl1TyE7CnpYJV9aRD9Ka0ZANzJWMX1jWnMtYDEqdDxwaiFkSWpmdzRjTEw7eStwYU9YfGV5bTxj
PUVPaFdAcFNeKG9PJHM/Zgp6ZCR9QDswYkBVJkF6fmIqSlMwX3ohX1prOUVDbW85VTluLXFvUXJ0
Py1ue08kdDNFI2F6Jm1LUWB1ZXEzSGEoQDwKemFOeTxEd1hzQlVNKntfd0FSOVMoeEN4SSojdWFC
R210U1Q+SXdwU0RRSm83MjdgTWVuWDRLZmdYVzAxOSQ4WT1VCnpsbWtKdTUxKSZsTjRFaFZkRmI7
ISVCK0tfXzRpME5DdTYzdG00eSpxIytEVH0yMFIxX0MhMUNrNjRpKnhrYDV1OQp6XkEkI1R7eWcz
QlMpSTA3RlQkSDxgd0NNR1VzcTxSVVdkaz09cXhqMmZLaVM9WFpNOXFKJGMrQTR1SEoxN3lhNUcK
el40a3dWVk4rMzhWQX1rSTlTSkh9WWBKMlhyUjY8Y3d0KXhiSUNHdnlQP0hFdTVmeUdtQlBQSjZR
MG9rM3N1MT4xCno+UDBoXmpFJSF8P1kpMmg2QnBrNj59dEJzSjc8KitJVUtwPDFQRjdicDI0KUE0
WDBRIW5eNUxyZ3x0fD9pTFRZRAp6JXQ/LTVJJm04SGdARGlJT0R9bCZUKzxiQGswPFZBT3k5KlZT
eiFwSEFBOT8jR2UxN2hoPm92aFFCWkFvX3BvMX0KemR5c3tBTkR9YUc8dWwrPTheOys8d1VUZDRf
KiFpY3I/dHR1SThRRVU9cX5Oe0NJJEAwYkhrLWQtOyRBJWFjISlXCnojbWNDJWtwIW8wPkJXKn13
ezAqb1N8KX08SlNFd35Hbms1dkZZTFRfPDFVRVhmJUx6MnYydyNYLSNGMXhOK2JLSwp6VW5zTGdn
XmcxdmdsJEdHRE1xNFclbVMlVVNPdjVSJipWRSZCekt3UFYpYHJxRCgkLUY7bWE7UkBVJFBEUUtv
TkkKemdrP25EVVY4dnc0Tk9IOD9AZXUtVnpAbkBTQmVFQCpoe2FkSXxeSFA7YUtgKCFJVilgYigk
biV0Vjt6OV8jSDMqCnpfeHVsQGBvNTFnQis9VD91NHNAZW5JS1c1dCE0ZDByWnR1Wk8+eX5yJmdJ
WUslQ0tjQkV+dW5iSWM4IUlsVmZRKQp6Q0lFdWpzamdvKm1sMmZvRFVeRnBUREUkenIlfFFtMFFr
Um4reE1eQ18xcCh2dCFBeFhrRDwqb2spenlhMFkyYTcKem80VFowaUlRX2BtJkFGMFFQIzUzdHYw
WFdBSn5gdXJNdmBtaEdDJThXTl9oNytqclpKX2ItMmIoPCZjdmZBfkRLCno4NGcxNmdUP19+cmx+
SGZWUGVgJno9cVd2T19gU3lMYGxsdis9fXR4Kys9RnNudUtIYSFPUW5Pd2ZvVX5QRzBwUgp6cEll
fi1VMVVjSncxMjYmdFhRcmUlcSZVWmFeb25+Iz1QMUhSMCVrKWUhXmc7MHokdlM/SE0kJkpRNz9D
Rksqb04KeiZ7TFo/S0RecUYjbEt9QmskTGF4VikjR0UmU1JtSmctZm1fVFpyMUl3SW94LXB7M0Ym
UUctM0hIezRzIUIxSk52Cno0TDVGQT9QP0FPdE8+YS1FS0A1R3tfZ3dseUlYSm47ZyRlODBmK3g+
UlNTX3JCMG03VExCVz48MWVKRUNrZHo3Qwp6e1Y2eXp0NEYrNFVTJXNIIWNObT5IVytCYmg/MVVM
Mi0pc2JUZFFmezF6cShaakIkPnM0aEIkMC1AZjZ3N3RjUSoKemw4RWNwe2AwTExVRFpBMGxgRyhy
Kl99NDZMVTQjd3ZCfUlNTTUwRWV4ZSpJZm9IZVE/REx9JHtxZ2RXcGlofHxQCnorQEc3cStgISt1
YDE2UE5vXiNwQDdxNystN3lCPGQwcWM+di1Vc2hzOSMjPUE+eSlXajlUND9VTklHZG5TO2VGewp6
ZiFCTXZRTGE4MEVPUUsjQnEyV1R2bnFoez9MNm0lKlkxNyNCfiQ8djNqUDFWSmFwc1R5VklvMXg8
cEVRZUB5bVEKemtgWTZqTDkkcXNSSD4xeGxFRz0jYzAwMUhFUiYoe2poY3ljSlNIY21zYFh9RzZS
KDtVb2dwcVklOEJyYm5KdHJCCnpXJiQzVUJUQDxCMFV5OFghSC1WO19UQ1E8UDViQmZFNzVLWGs+
ZF9PUip+SU1Xc3ZsOG1layVCNEBTMUlOKiFCfQp6PnI4ZndwPT0xYDVKejVqYHNhQHhKbT1LK1Je
Mj9KYFd2KkgyPVlIYWhEYl4ma2cpcUNXMXR8K05nQEZ6U0RjTTkKenM0Knk0bkdsYGhjXklHSiNE
IXs+JV4mdVdoVzMhWm9XY1c1KXRwRmNrblJLdkcxXyhLZXt0Q3RwUUVrPT4oKlckCnp0WktyJSRi
bUUrbD1wJmBAdSkrVTVDYjlxakdZSkR4Yz1ER2xLTGpTdzlNQFRjeD1sWlNNMkBVbzZxI24pOG82
KQp6MSojMjRle2RaN1E5MHpMdC1uYGZtR29BTEl+ZyYlTTI1bDEzZ29HVXJubzhaRll1ZzMrMUU9
NkdscmJaUFJ1UF8KelMoQ0Y0WFdPKE07PCN8cm9UIzEwKGpqS3JfNHAwRFBDc3ktMys+czdsX21Q
azkwVW1nNGJ9fWgpbHZ4bytiVDJxCnpDYSFPbVkyPW1lViM+MF9NPld9d25xczAxOG5qRzA7QUpK
SCYxTiZqQzBJNTZPck1RUSpAUT89SE1paU1OP0U+eAp6VlJFVihpWktkfDx+TSUwQHVJSzR4YXsy
MzBOYWpTc1I7Zkw1O19iaGZmbWI+cFhWMj1LI0x6VlRJcDYqPDJCbTMKejdHN0BQQyZ4KUxZJVkp
bG0rfl56S2UzY0UoeihZSlkmNWZoakJ7Q1lIQig4SlpmNDwwSTFKTWEmaUN0SHpWeCVOCnpwMXhf
N0F2eD98NiNYSXsoaCkhQEZnZllBanFvWHcjSE0wKHhCKX5udylVIXx4fDlxaF9VdypHbVN5S1Bh
c3B+RQp6d2UhbClVY2NoeTt9NVh7V0xzYFV1Z144KW1SbytSJlUkSGgmPC1mWWtvbWxyPjQ8Y0tv
TTh4I09aSlJJcGl8KU0KenttZkwoQ01ZI281RnQ/SiV7VjZeb2dQS0dTcF9NU15YaVBNN0BJO1ln
dmhGYUY1fjlKM2s5aGFjeXVSemFeU2c3Cno0eFlhZiYoejxybDNgKlhLUk9EfEkpVGdzcyV3c0RM
eFRZd3Y0bD1CbkNxJjZRUURXKnc1Xm1sQmAxOzkxSjF+egp6dHE1cXs1K3FDK0dGd240YXBfWkUt
aDBGR0gqSlRKVWNZd1U+fk5eVnhwcFZJWU00bUc/dVJGRlVRcSVhI0B2WFgKej5vZ2s7PC0rVTRn
dCMoJXgjWE1GTnstQ2JtTV9XU054YktAZGs8VytfM1pPakdkQTB+OSZNdEd5cyElKkNUNTVACnom
UHlwT3BFZ2ZYUn0oaExxTU43PCojK0VDUGEkRTgzSm4oYEp1MlIxalkqOX5jcHZRZTs+KHg2eng8
WmY3QzdzPAp6UnF8Xit2TXFIIXl3QzdwMHN9YzIpdihkV05JWCRYaVBePnIqOzUwYmdPcnlSU3FA
V0x4VGtGdnBFdXdOQXtIJU4KejRtK1FFO2l+Sjh8Sk9VS2VsMzJudlVSSD1pfUBHdT14R29yVUJ5
aF4wam5hSGtCam02WHBYQCQoVDN7SlRCUUw9CnooaHloe3JEKihSSytYdCt2SClQK3pVIT1BdWlw
enFue3tqMUo2OTBBMnplJDhkP31WTi1KVW8oe0JsM1lfVHNySQp6V0MqPz1FJVZUISYzV1hJXkR9
N1lEUzAhWSU5alIkTDxgYllrTilAQXkpUytEekBlMVYreCN4Tl9GQmpYND9ATzMKelRiPERqbjBp
R1lzaWNPdW43Nl92ZGh8YDFESX1scHIzc31pWGx9VTRRam9VcitWRmx0eUJEUHN5RjgxVj03dUlu
CnpRRmw9V1M+UClfZEV+UWF6aitOTSlxdFNJIXs0RV5hVXthfmBOenR2KTlUPy1rZDl1fEAhRShI
WDRvb1c0MEI2Zwp6cCpONiNlIXBPPE99UjNHR197SHBxKi1oTmdWQ35EcSo+VGFBNkF1SUxvNFlf
Z3M0V0U5YmFaP3JTayVTT2dzTDAKejt8WHR7ZGVJQFJme1RlR15zaFJ8P08zNDIoMn5Jc1lmKWtB
cyU3MktTU01BOVIpMV9UcHAlQyZyTyF3dms+bV54CnpIUnVZZmdeK2tVYy0zcFM/UmY4Vl5qKT1Y
Tz5TTUNUd0xVNThOan1JUV4jT1prJUZkaysxZTg4P1RMOH5pclhhZAp6eGdnalA3K0ohMENZNVoo
WkhrJjZUUXcqMVZuRykrX3MpfkhwSyR5QmdJVG4+VFhaV3JmZCQkQkcxTk04ViVoZE0KeiZve2V6
SllSJHIlRWhyPihfa0VSTEpmZmBwPX10WHZJdWJvbEVNXjJqfWgqWkxVNlFSX3I/QmFIKHEoalYq
VGwjCnprSWA/bUFqZTteZ2F7IyE8WHtBZW42T3Uya3tWS0YmfDhZRFlBUD9tSVolbTUyJExwZT0z
Kjg/UTNyN0ooUipMTgp6VkIzeCMpTSVJZmFAVUY7P0xodT5yMyVzbyM3ZUE7V2ZmeSQ4YHdfIVI3
JDs0bjd9dkZmZWdjbW01TFIjazsyVCMKengoMDVlWVk3fC1oenZIcWQoT1ZDKkZDPmBIQypyZj1v
UGR9S1N2KEZrUEM0P2NRTU99Qz9yeFpVQz1JQjNfKzk1CnpqckMwaHZBP3ctQG1zVTdBVjdsPDtL
QSo/e2AySF95TWNrWlpqQ0piQmYwfHJoYGpnSjtvd3NtSHsrVH49Ritjfgp6SS10Qy1VS1F1cUNm
YyQ/JGc+eldKVnE+PHVvaDBrRmspJX1tdDd5IVI3PmlmIzlTRkNmKHgxKDZMNCM9TE9hQ3sKeiVX
Jmc7d3w7cnQmUFEqNlBPZXtqdVhsfVYxTXslPShHeE8qP0VWWTlRMnZtVmpaJjxKSGp8fDxuezB0
KldVNW4pCnprVSMkUHQqeklkYU1xPD91UmJvaVdtU1BOSyMoc0YyVSNlWlNZO1hlbk11QShpenVn
PVdWYV43bmREdVgzRkY3PAp6PCs7SnFoWSNXO20yaklxb2gpVVB3eXxKbHU/RUc0VVZzfWQ+R0R5
fmojTmpDTD0xcVd5QVM7MW9EYV9aPFBjR0sKeiQ3M3RvX3JEPFJpPzQ/Q3o/alkkWDV4dSV1bWw+
Pis9ajNkRjckOClVdEJxc1F0SiMpLXREd2VgZEViPEF6KlRXCnpXcD5ncXUhJU9VRzckRGUlMzI9
QD5RSGFue3BKbWlwSyMqJnRCKmg5LUZzOVVIWFZMQ0khI0dye3NHWHVJQyV9Mgp6ODtJdW1DUnJz
XiR0KktGV09mRH5nVzFvZEZUemZDY0ZMI1hSVFZ5NiVfJj1DZWpHJHYyZnd8M3w4MXxJXjJ9O24K
emolOXlAd3c2VF8kcnFLYCV8QipfVDdzI2lOVERyam5xZj56PU5ifGo2MFZnbVBNSGBRSm1hJihw
aDRmSzN+K1I7CnorRjxyM3I5K2FtTnh7PCFIME0lUW9RcU5ecSlxSVg8bmxzdGc3djZYUiMkPUZB
aitkU1RUKWBDMExgZUglMmlUUAp6Si1hZmVTU2VJdGclend9RCgwd3goMlI9UVR8UH0kN1hoencl
TnpHVF5WUD1sU0V1KEsmO0FOc1IlenR2S2p0NzYKenM+OTxVJksrd2xQS21jQSk5SHhuTFZMK2Y0
SnIkPXlsWUBaWVhoV2NATiM8dGFVQn49T1VkQj0xK35VfmZ1NWxoCnpQIWNZQDNNcWBpMnc+eVJY
YURpa1F4fEA7R1hLMFJ5SSNHNEB6KzEyTHMzV0dBcCN7KzUzWFF4WUhyekhNbXgxMAp6KX1qeytX
PnJiS2xBVFI4dyNHb2pvWHdnMkpqZyMjWWleNlooO28zOWN7UHVlVUllRzBPQSl8UF5tI2JmdTZ1
alcKejQ/bW85PV5eJlI9X2pWcDQ+MklXZFgpJHZoelNGaXhLdHllUXE3X3VYRStfbVM/YVF2JG5j
ajwjM0Z0fE5KVWt1CnpxRiNefTxie04oKGxLJldNek9wQW5BJDM0dH1BenUqIXRrSzlwKiFKPyZk
ZVE/WXtQZWA7U31BPSNQKGs5c1Bfbwp6PFRxWkNHSGEyOCY5MV4zbmJBfmdkKXtnPTNxNzUma2xo
UUhKZnZSRz0kQkRqa3I4dWZIZWBMWEhpMFRNXlEoJGIKem5BMmJ8QmQpNEJYVXRVeStKNEl9Z1dT
UzVILTVQOXNtdEV9SE0tU0QkQTU8WSR6UEJZSmJYQktjc01eSVBvXnVCCnpjQHxfZ0Rnakc7ekY+
JlMlYVNIa15lbWpURj9+IVl3JXNMc0pZTGdVMERybWFncyhTMGB8XldfTnwlb3V0e3xpWQp6KGg9
dDI3UFB4MXEzT2ltcE85Z2Z4V21mPHhMPH1EZns3PENNXnB8enNZPUMwSz98U2JuRmRsYzs2T2Zq
P2FxQzcKemVzfEEzdDFWKlJla1EwaUJ2JmpvRihTP20pbWNtbkNzTHxxTnxITCs0PkB7V0MmbzJi
PlZuUWlKbWhiJnM3cFhFCnpjM3lNI2BIejQ4Rmx5VmVlKGswY2V4bHkrZGZeV0ExSkB4eCs2fU9s
dTl7WnNvcnBLQ0MpZFBYUHJYV3klS1ZhYQp6c3B1RkFRX0laRSg7TiV5QWlGdTVYKGpHYkw+QSVG
JTByNDxLXj0jT0wzMkJ2cH5IRSE9aXJ1ZXVIMThzMnB2RGsKentjVXQ5NVJqfFJMRjhFKmdQWWZk
MXtUU3BtcTxBS0JjZlRJcCFiTTQ1TnxGN14taGpQIUNpIVRnXkA5eGlzRDhVCnplVzZWMVAhdD5u
aURtM0sqcXhweXRJI05obm9pbVRHMVJBOTA5NV9eKn1HUFlxNE50NWBXWjUwQDRLaFV2TDBpaAp6
eFU0Qi02Zy0xNHdBNlpiUUtMcHgkRX5FTWgwalRvM1pwMHMhXm1AcCFHMjgyN2NZbVRgVjxwMD1+
NU1XOGZmRUkKeik3OzJWJTQpPnxzVndCQGI7MVUwKWF5UHpAN1ZKWHluRTtkSXJxPU1MalI0MFl9
cTZRPHxVRWw1aiV3fiFaS3NHCnpeQSF6eENMdHZYQ21rK3BZOUA4bW9qRUJ6bCpOZCg7NG49aFJa
MVNCSW1feUdscHQ4R3JvZ2ZLPD14dih6NDRlbQp6dElzKDYlOVVBZzdQO1d9RHF6a2hUVFQkbl5t
KmQjOUxvPDF5ZTZ3USQ+dUktQzE3dkxXfEFWQE9JdSNwYEA9VzgKekY0M1RhWlU1a0x2fEFleEVl
RVAlPkFGUl8kTXhiXj81VzV4JTF8NzF0ZlFAdVlhKHU4RGwpP285MDNOd21hWiZQCnooPHl8Sk17
UnhUXndXMTdjZ1hnRGBxSnU9Vz00K3UjY2ltNEVMKDxranR3QV9Mb3JNe1J2dlIkOSMje0huZyhB
Vgp6bkRJM0h4TkVSdm1PJWgxb19ePThxcWJhcUNKSSlzVXB2YD5zNWIxJVV4QGFwaCtPPzVWMiVN
SnVIaH0pbChsM2kKejtkUTMwNDN8NldCaWJrcXRlZDMpcEcjR2ZLZ0JOZU5WcVBOJHg4I2lpZVV6
YDAtMHx6KV9TQ2hjP2hKX3YkRExJCnpObyYmejRSJD84bFEjdUdUej53dmkoYXx6akkkdiV6SGFS
KyhDPmppZ3h1UmZTa05qXmwxZys5QW1wdTtUbHdRPwp6UDgjWlowe0lGZlZWcFpscjdrUFJqT05y
SHY3PEYkKTsrU0pQVD11NzdyZjt9STlvYlFiK0dMYD1CbHJyLX1UME4KenZ9eGpXUmg2a2tTWFVl
ZGJqQnU4Sjx5al9yZ1NucWtMakUtaUNBRHtvMCY8Yy1kaUUhOCR6fC0qMTsobVJhVkhXCnooTWRH
JVd6RkJyUXMkOyUlN1BMM3dNYXtnaH5XK1U7X2JIX2B7SnYmdWRhYW51VTMpODd9Pm4oNkpeJEQ1
bDA0Zgp6eGQ3TCVOP2w4eiRjVWZsYHQoM2woRFB0cDBEYmMjSWNaRHBxM0gjNFpKRU1xSCV5JmdU
MVpePjVfKzZNNzghRmEKeiNEUG8jO3F6QX56NTR6Z3BSODFLV1IqPmQ0TSVOVkEjK3ZhbFpVYGtp
SSFzVytLaGFQRkElbFQzdCEmSSE/K3NNCno3PWYkQ2lHdS01T1ZidGArVWM0fGskfFhkLT4mbD96
eHdfSTlDU1NQOUo4WGNRank3QkFoWSUtdk9kdHxWK3B0KAp6ayY1eHFvSyYhY2JoVjFpWnE1V148
eGdJPGBKI2grdVJ4UFk1VV5lPkteTWhPa3oyTm5BQEozOUJHVm89USk/PWsKekkmfj19WEVifmt3
IUFnZWZEdms0Ky1Zfn1DRHhEfnAtZHJaX3J9b3xlKk11VVRNcHF5IXo7OXE3dkNMMmxWZmFUCno7
ey18XiFTazlIKkNTQ2Y1dTFyN1JzTG5qSHVyZCFVajFCWGF9O3coZWBYSFJHQkdEbFQqeHFsZmwx
a0gjdVZ7Zwp6ODZEejw/PUwlZTx0S05jPWoqeilKSm17YjhUcGFVa055QjZzWFReU3RGSXhWbDJ0
aXs+Iz9SWnVxPzYrUUpvdWgKekNgPztxSUA0aDJNb3JsPSV3Wk5aTFBaakRINWReUVRtVzBQcDhW
aGA3a3FZeihEbHdXVGhWeSNONjNGcDBvc0dxCnpKXyU0MVpRVXxuZmZzZj4/K0s7SmYrUkVRT2VY
QlFnMlBRUExQNTRKbVN2V1JPczkrN19IXl58PUNabV8hOSg8cwp6X2d9ajYpa2h5K0VsZDc7dEJX
dipZYC0xJlQ+KkBnQl9tXntZN3VLWHBFI21SYFhXQEZ4LWlAbkZgQXBSV0wkaXkKelNZN1o8cSVi
RUQodHhwKlVMfk0oYCZOJSs5PnRqZ1Q1YDhDO1Q5VSRRUHxDXmJnWnEkUW0jU1o9RDZqKkN0cjVr
Cnp3fTtAejJscmFnYDZEQmpKXj5xbnMxb0B3NXElMlozfWwxRFphQW92eUxGaSkwK2soam5qcChl
Kj1ycV9lN3hocAp6bVpLaiU9YT5zdCQtbCVJbSFtQmxpQnhxXmJSbEk9bD9COz1vfnZqT2NxNkM2
eG8lQXBYd3BxTThYWmZLIUs+NWYKeiVWe1dgIU8mI1l4ZmRRU1p4fnx3eUR8K04lbiNuTWB9fHda
SXt9UzYpfl84blUjUTtqQU07QXhHbHkqWSZ0N0hMCno3SVQ5TnIrRzlKI2p5aGAoQCtgXkJJTzEq
JWVHaj0rQDRqUnExUzMtUlU9SGJoKkRFfSFwZllJRzA2fkNWWDYwfAp6YjlNb2d8NWNUUSleNFJa
Kzs5dFFKXkd+JkZUOCsodGBKe3cjcXJjNGhySjdMNTwwJVJxPXs7bDlHJlhjRnwyezsKeklLJTJA
WXUjR2FvZnR2NWxwaGg+JklRM08qWmNTfG5taGplIVBgZkA2Kyt1TndZJDFaN0QoOyltI01OeEY4
JHBnCnpWbio8eTVsPnhZZCVPZm8jWVQjZFZ5SGFnd3pIMUV8TFIreDBAbE4/KkEmMHtVYlZzVEU3
bDx+Pm0hZypoNipJMAp6OFZBdjxKdmZDRjh4N1gtQn1OQyE3SGo8eWxUKTB3MXoyNkE7UFp0JU9y
R0U1PFBld2NDZFhEeHUmZmg+Y3FrZj4Kem5fKWx6JmlMcTxxYmA1eyZmbFV2VGZYeEQlVUkkSkEk
OFUmO2N7ZDdXfnwtUUB5djZ4OCZtaEAxWFpDZERIRzloCnpqWFlfSFBsbEVmI3pAX3VUS2MpPkQ1
VlpoQmJFWElIfUkqUWA1fSZfa241RmdQY2EzeiY5KX5ge3FtTi1vcGd1ewp6PG8yd0hFbiNIQ2N9
X0xsLTRtUEFZN2tXJVBHdDspe0EkKTFneCtDYEo9U2NyV0pgaWRDLWo3UzlHU1BPWmBGeGUKenIz
S1N2bSkkWDYtTHVUYkxNRkd2eCkzWUZ0ZjUzPmtvUVk1QmI9flh7KDBmU19xTHBWWGstOEFeI3s8
RVM0QW8kCnokWUlCdXZTdS1wQ0gwLWpzaUNMU2xXb2daWEY5YWQpQ2g0OXNaek4/WUokYmAjQ2x8
MEhFa1ZZNEktN0A4KDcjegp6P1l4PFFhMUB6ZnhsenB2TWlheGRHTnpZTz02RVY4UmZYYlZCb0Mz
fnchMHNDX3g4VSV4e18+MmUwbVNNX2hEdXEKejh2dlJ6RUtxMUVpWkYjV2Q2Xk51ciQhK3pFcHJi
fXdfdTdHbjR6b1AwMzghTnZRISV9aUViU2R4TDw5MmFedWElCnpZfX52JG9QS2xCbyM7MGxoVHds
JDEzKiFyciF1OStUJVBYaFA/Tk1fVEhWdHEhT31qM258RTJrMEpWZG1XYS03VQp6LVFpWXg/R0E8
M0g+MTxveEYhcCNfLUp4KGZFfV9mc1g8ZTFvVjReQlB9djBRWjA5fDl5PnJgWC16Q3NSYU5qOF8K
em5rXmshM21RU1EkIVooN0lPQjAkOER2aTslbjhvUHVoUTlFZHkkM0JIZ2g2bGltU15yLTBWPnRx
RTQhMCsqS35aCnpkMmRVQWxQcX5ASG9PNEhBaW97OUdgI1RLLUY1b0NaJDVQSCorbGVEbDBVKHNB
TEsoMHllPGIrSUgrPzluVDlzcQp6KHswWXc0eU12c0dVJDgkRj9jfXJJN0ZpOzljcExkSVhrV2Bu
RmtmQXhfRmw2d3xvX3UwJXlxK0ozIyg/PEk8UCoKenBNTFloaHJwNEtfcEg9MmV9aTElMENZe3lH
UG8rOUQ2WmhBNEhnTmlqeFlqI1BJanA5cn0jQHkzeTJKRE5zcWIyCnpXayh3fEE9XlojI1dNOVUy
VyVgTWFZPDlnO3oxdE5GdTtPKGBIQkE/fEozKVdVZlF+fnBaI2ZkWEhTcXM5aGg+PQp6cUZQKVdx
IzRZWk51U2V8RXhDU1BybUIlVE9QJmFpbjR3Q3k9eHcqQTRQMFE+YTE5fWYtTVJER1loSnFOIVlA
YCQKelVEUjEramx7QGxVKSV4THpZTEttNlJ3bX47IWgjWUpUMHU5d1RJeW5ETzFvYkxlcjhBOXw8
ekwhOHtHZShQZD0xCnpmczxsVF5gfX58K1p6Z29XZ2QjcEJaKDc2ZmJEJHE+QU4+UGFtKzJ+KHxY
PDdQZEBGVngxfTRvZE9PZSR3OVNIJAp6U1dgRTllT3xuKSZYOT53MSV9ITVQP310OXVAaUpkUlVn
R3lse3FSPENtU0R0IV9qISZUfSZgZXliPntYdEtwZl8KejBDTGZ2b15qZFRyKGIoM2xwZH5NdEd4
M2teQGhOWERMUj9JTkIqe0hFM0VWPyhfMWxFYHJMN1ZRdHhOSWRfeyNRCnpWRHV0T3EoJXtTIW5q
TiZPPSsxJClUcVMpUyNUZ3IrX0MrZHYpPW1sdig/cU09ailYflRMVT5jMkc7fXcrdX1gRgp6ISs/
KHcoSTZfVipNI1RDR0JyfSNSIWY8cmlmK3pmenkqMmttWDlPdlEoK2x3Kj8jOE0/KzsjbyFSb3M9
QDNOcngKemBRZ1paP3F8d3V4dXomfkYmekFxUmI7dWBHTkdpYGxfO3Z9MFdXUGU0UTNvMyN3Jk1Y
PXh2OCE1eU9gPF8lc0YoCnpHbFJGU2J7R1NeUD9AbjxfP2FfN09+fU5YMnVoQmU8dz14YEI4STtY
Sn1LQigyPGg5fTM4S0pIYXRMN0t6T21feQp6U0kjKHA9bHtwalMyJGkpUiVgM15qeHFBbkA5TmNp
am5VS0gtUUNeMlB3ZG0oOWdjS3wybj5SPmdvSFRNM15feTIKejVIZih1Jj96fHhxUUQ+bmR+MldJ
e1I3VD5fU0BAeSo3SDI7bmV8dGtucTFjPFVtJXhYYFQtYygyZX57Y0cxTjI7CnpKTjhtcUM5QjI1
Q1YkKSs1S3JiMkNCRl9vSzZ2U2FmN3hAfCZOWXFzU15QU3FeO00rKDtwYntOPkQkSHRva0UkXwp6
NjBTajJXTldpVHR7eWN4USZYMSNLSGNnV3IrQ2hwZ3JJTil5eVpCVUcqSyNaUlotNiZAJioocUJo
Yz9jQkk9R2EKensmTEUqcEstQk92MnBZa1l8Nn5ZQXNuRHxmPl5+QlhINCtnWGtYWEhAbSk0eGAt
ZVImQzUwUjJqdTZEPzk9QypRCnpyOXNmcHdWY1kzKmcyczkzRTwlRjB+aFJoPj0+LTMmWCRlKyE/
Z2heN3dLJCgxSk8/XlBNNV9WdFQzX0BaK0ZDNwp6YUBmYEpPcXxLQ3tGcDdAWn16X1YmbkhnMGF9
KVhiPzJMJFo4fiU+PEhXKG9Ie184N3tsY3Z1b3JGTVV1Q1crYUIKemRKWVdMJExnNkRwcXJYfDtJ
O1lYWm9JS0ZobChUZWoobXZvdmp3ZVdPRjE2UT5zaCNHX2chfVRlUSo4eE54KGp+CnpZQERLOCE8
dWE1Jk15fldtMWgoQ1hCblN1cVVZdH5CbkhKX2lsaHxlZXE1fU5rc3tPelRRTzV1aTYmQXZSVU9M
SAp6UUJBdjM8VHgjMDV4VmA3JU1ZRlk/KWs1N1F0UVErdVQzan1sY3xUalBtNURzb2xjQnNMI2ls
JmpUVWV8UEpEX0cKeiVZeDJDVD84UloqR2pZM3hEenMjYmJqIzJgRkcjK0klZT4oYj5vTGV7Uzwx
RSQ1X3xge1UpO2UhazxDTDd7S3xnCnpDUzA5bmtxRUZtTUBwNXVWciQzQXZTflgpcEo9Pj5FUXZK
PGsmXjFqeGE4PExoWkJ4amxObGl6YHFXZU1FSGlqTAp6cUBhRnYmODwoSnlucDlyVElpKGsrUk5k
bSRYT2AzMHFkN1ZZMWgjaV9ZITlKMWVwYV9FZUVrY1QkMHNuJjJWVF4KekE+ZH1mTztlayRJQEJN
ZyR3UnQ9JWI9O215KTlnSm5yQldTLTM8YCp6UEh9XkBUJlc3VHs5dFc9TnlmIzl8di1HCno3UHlf
diEzZWpNWGQxfHo3K3YhMV97QmlUbXZFdDZpPl8tZjtxYEc8Y15ZK1NZRE9NR3BOOT55e3JiQ2k5
UkMoWgp6JS1GSz1nVldhd0B4S3R4UndKZzZiTHFOSGlhcyVfNHBZVm5DN0d9KiNvJTNAcm5obXpy
ZCt4Wih3cCooaGJee2YKekc4cnAtQzdsPU8mZCQoWjd+fitGenczZE05KEAxVzlNPGdWN3lTJHkr
OzFWTj8/SiN5WSNAUCZPfklfc1N0QGRDCnolcFhlVG93QWgxdCtDVipuc0hoNWJMOVRYQzRidyRg
PkpkSV55dF50emR2PVkydlE/bGkzSFk4cDJlJW94aXhBJAp6dXlXTF5ucWszUllCMkt6PihXdmto
UnhoXlM7fFVLSE52RCRKUCgteWxYQlpvNF9kSFV6azJgdjJrKDEkJkJnb1EKeiRHP2xvPz5DVT8m
a1J+TFB6IyN9ZXhYcjxoN2ghQVJ6UG0wPFJVb1MxZDFTQClLaytlcEMqYCtJUCg9Z3IpNlRXCnpM
S2RpSW5Va2Y4VEFIemBpSUA3eGZsdUo9QjBXNVJzcHV0WDt8VClTX2BseHgkMm4pK2NLUm14YmhG
V2gjVUQtTgp6dFhDKEhVaG5zISFjWj98PH5aYStaKXsybUMyVF5rTGZefTs5UX59dCpzaEZIbmxW
RGQ4U0FaZiVvQHxJVkNCRjMKeihBKTMpXjZwTEQtNkwwJHVAVEs2X2swQklEeDk8ez1GNTlTKV5m
Zn51eyl4KDFaKDhDd2VrK1hMVE88UXNGa0ZNCno/alNhVj58aXVPck5TWTk7K0o+NGRqSHs8JlIo
em9oaX1DIUpAWD4kViZXaTJVanA9SWo7a2FWdj99YkNVQzJAUAp6UVkoajgjfndHdm0xU0YkRz90
aUpiSHh8T29BTDc4cGpueGkwTzd5bnQ7NnIwYj88e090czZZPj0tPEV1YEdVMVgKemdec1gzZklO
e1QqPmktMFA8fVlVcyFCRWVpZUZEeWtjMVFtYTkzS2Zwb14hcDNRKWdoTWo+KDE9QDJ2UUFTYko0
Cno4dnwoZnlGUGo3diVCdU49bFMqV3l5Ql4mdXdJTGlPSkR4ODJFRmQ5NWZkOX1hJVMhcGxQNDhn
PUhwP3xJdm07Wgp6KXA+PGw9Q05ISWBwfXBpZE9PfSZzLSk/Z0IxOyRGJFljM14/NXJfSXE2JF5u
Rz1aJW1EaEwqSXRkaSRVZ05UNXgKelR2ZTVYaCpgVn1IMG4wOTQlb1I7I2d4eVR5RzBfMlF7QEkx
KlJndE5TY0wlPkBXaEFVNFV4KGR3UE93KXZXLW5XCnp3fkNVe3NvaFFCc0ptR3NkemRqcUBAalB9
WU9oWSkwRnhZZl9XRm40ZSk+SFB3eFR+R3tTakxaUD4oblZOWWw/bgp6QnxeK1RvUmpUQ3d9cUR1
OylFUWhnaWgrcjc+ViZKbyg1IytrdXlGeUB8UHBLeko7QXZkdTRqPHd2UzhlXkdibXIKelVqUD9h
IWNhP2BpRkR0aDxIO0c4UnpqT3ApM15od3lTMUQ8c3M/TT9EO04lalZfZD97YjtLdlNXfkBkTStV
LSU4Cnp4MnR6d3tfMEgrVSRBIVcjNjlxaVlUR15ZNUhgZEA8aXBjSmU0SSYoN15JMjZHVilGZSkr
Q0RIP0N6a09Zc2VIaQp6Myg8SlU9fX4tdnh0TUl1U2ZXRkVNX1hAfXJiPX40SWFWdSFyb21qQCFS
c2k8a1kyUlROS04pb0VeQzwkVC1QR2UKeihiUXQxWSVjNHwpOFI/P19IbjB3e099RD4wQlh5fEZC
ZlpkVml4KHVIPzJTIyRxb3Y1emZOOWM8QjVkQUdFbmRJCnolLShXTy02c3wwS3t8PFJAeyRUfWh0
c0t1TXBGPyFHRGpDOVM8ZlJRR0B8VyFlWHsrclBtak8hP01IN3JhbExTNAp6UTNjajNBTSlWN0tT
TkhmMyNSTmN2ZmdCNmo8fUx5JlJtSXYxJEVVPmYqJWojcDB1eiMzbHN0QHJGfFVnSVNsJTQKenhD
MzBvaHB5ZkUrcTw5TncwM2BKeHBzSz84YmFGb1pAM2AyYzZGJCVOUHxKfXBnYm12QF80Uz8jWklO
aG8jMjQwCnpDcGptbkxlNE1aKTtjTUFyTGpPQU5+R0licz4xcEplQl5acEU7fDBAcWQoZXdpMCFE
WGlTJDI0dURTLTtQZGV8Qwp6cGAwQFhNJTI/YStTPGZrZCZaJX57VHtJXk1LeTg/RW9hMlpWeTFu
I2g7JWVIJW9Ge0JJeTE5fW42OyYrLV9udj0KejtzciF0cEZaKU1VK3E2Kmxse3AoQFIoK3NDK0VW
KFZUUWM7ZVpiUyVXMSk1JFhgPk9RdFh0OE9KciZjP25kS3lfCnoqKEAtIz00aU0lQkFBXj8/P09T
ZmZVaF8jbVZAVyktZ0VFdW5AWSpzO142YzhAQzliRHhJJj1HQTB2Rng9XiFjZgp6PlhicDE0VXJT
QV9feiV2Y0NAZ14xezJeYSVlWi1aOD0wMUU2YzwjJEJgbX5+RX5QI2pQWU1QYG8/P3BkJl5rI3oK
ejtSLThNaD5kbiNfe2x3JnpxYjFxKnJLPz14bU1hKmtwbFFOcU5HazMkNGpyJmZ0Z3hUR3I1RDM5
TVAqOVhVU3pFCnpyQVN7K1hHKCp8N2xLdUYpK0hBbGNnaW19ZUpqcG43TytreWtxZns0SntZSFdk
N1RvR1EhOXUmeWN0V1Q9Snttbwp6bWBvSko+ITtTaTlHMDFTPj9wVDJgR0VyOFZePnlPSSR1WH1s
JG59VHZUZFJsaFpUdzFtPWVMWWBQJUVScEt7VGEKejczPnBiTjNaYygyNkVjRDtNNFo9cGlDcHhu
V2clZzIyRCg8TF93XjwjNyk0O09xeXokXml3Nm9ZUl9OKUA/Wlk7Cno5emMjO0h5OzAzdGxBZGl0
fTdBdGskP1F9bXc8TFBzNDdYNnBzQDxzTntRQnl6fWRDM0ZAM3RxaHI1dHRwdX1tcwp6cHZlekRP
Q3djQCRJISh7TCM7eFBqVzBweHdkP3AtLXJJWkFpR04/T2BDSER0ODlRUGVOSmtIWjlESUBCRnxo
KGQKek59V3ZpZ3ZQcTB6UzFgPThneUB8S2tAS15pWmBCWWZBLWNwJikkRV9ZZ29qeGI7R2lncXVx
d1BWWjleRSRrVj9CCnoxdnlISnVtaUc9eFE+KSVkTG02SU0jdGwyM2JhQ2ZCIz88e0NDPXVtcGMy
X2JHUX57NzZTd0dnYW40X3Z3fk9fSwp6RXVCekBMfjM2Pk5IUHhiR0doa0s7JXkjTWtuWlI9LVFK
fnF0Z1kzaXZxQXx6O15qUkx5en1hRCpLTmB4QU83KFIKelNZU2chWTlBS0IyYnJ3TiVGSWRAc1RR
MlpETUUoVU9IX3F3UE4zdTMzZDw/Mk4tbGR5RU1iQD8/MjFebTR6RXtBCnpTWm9QYTV1bilaUzNt
dSlReSNxaWNpOD4zVyNoRGEqNzdHNXhxa3xJOClBZ2IkVztnMzJ6U0FuJlMrPkBRIX1ZVQp6M3U3
Uzc4UkpDYFFAT14zR35PbDgtVGNWZSY7RFEwP19ZNXIhRz4wYm43I2xsblA5Rl9NcEFONWhEZ2pT
PGBnSW4KelNCKDtxXlJ9VDdIRX4pbEBNVyNvUngoUmImVTUjZEtBdFZCMXxgdHQ9UkVNTWJBTngk
VEZnZ1Z0VHt0XjxURWsmCnpHT051aV9vUGMyPS1Mc0kjNEpHRVl5blp6V203eGQ1RXBHVFleMGVC
M1lUZXZTemA7Rmc1Xn4pcCZlPERnZHkxfAp6TmxgPFI9e00oYGNnOGM8P0VZVkByJDROJWIrc3dQ
QU9SVEZnaX1zaDs2UllwUGw/e0BJOWk9I1NIVCNvSlpBWCYKekdJM3A/OWRqcWt3eCFYcEBXVjJI
Z19aWE49UlBrIylDPVBDQ15jalltKGQ3REt8SiEtPElsYlImPT4xdmE7RW1qCnorSEo9XioxfnB9
MGxETWZBWVYyeFluRih8dFQlSjN4bUxEYWpGVE8kOUs5fkF0YjkkcnVoNVM+bDE0S31NTXs5RAp6
Y2VQbGdiVVV+U20oaStmQjFtS3I7cX5uVSRqY2whPkVIKilLZWxOQmNPQC1gNFl2Wmg/M3dHSlgw
eCt3N0hhRSMKejh2KD9ySSR5b3VPPnt7dVotR2tXK3VafDFrMmlabXl2b29FQn17PzJrIVR3Y0Vf
Z3MkZF40aGskMXp4ZnJqYWUmCnpvPFRuamV7JFckZjQlMztQMUI4KkBXKXNlekp1SXhReDI+SDxK
b35WWHcjOGYxIyt+eFQqY1hyZjw4ZnZpX0lYMgp6dUBaJkx3N1N0SUMjdk8hRCUjUiY8Ql5XdTw/
Qn08VWZKPkliRHckcyhwI2BJYT84ZVJLVSU5SGZ7MzYwRUFhRHoKemRoa2ZpUG5yMW1vTH5UMHI1
WjxWTkM3OHBOK2liXmtpLT5CVHhXOG8+dVErPVppYUxCSkBNa3N5JTtHNUptSiszCnpYdHJIVztj
M15Vb1d7dWVOZjV+fWhvVHUlUylOUz57SFVsa0NwemI1KTxoR2RyR2ZVNnckTlF0Rm1LTSM4OT97
OAp6MCg1JWpgTTx2VClxUihldSZve1c9Pz9YX3pYXllVYnkkczF0LWs/TjctUHomJTtObmptZVNR
XkRnKDg9SGFhZ0cKejRCZCVHRmBfcjNsJEIwZCQ/KEhUP0lfcXhBcHcwSyNfeitzRV8/STVfdCVh
VTVBT1VndGhGPzkpTXBHT3NfX0YxCno5eChgdGFqPSooeDJtYGJHZjxoTytSY3ppRiZgN21rYEJk
UFErbng1PERpJXFHYlBRa28qNSU5TlB8NFRwcj5ONgp6JSRhVzxJZHReeUdCJGBPe3E/YEdyYzF+
ZiNtaihkLXFHcTsxdnglJXJWTHB6K3JsWX5qMmdsb0F4NVFSM31HNEAKemV0ZyVIbXAlTj4qPXVV
eXpRZjxzWjJRS09ZbDJRNnhzM0VhO05fSzZIPT5DeW15d3YjbT5Aezl4YypYSTg2YFkmCnpzMDNQ
O0lKdU9TVit6Ml5qPm88e1c2I0Axd3FmNkpFaUg/RTB9MHVzPGJpV20tME8yMjc+dGY8QVhtb285
bFN4TQp6KTI8KnlXPGt7cld3TUd4V2dJSTVLazlLPE4qJXhGUktfTmBHMm03PWV0R3IjTX1QTHY9
N1JIKk1BKUx7QmoxazAKemdIdkZIYF9+YHRGbENeQndoaUBXN3IhXmYmMTQ8eihsRl9gTn1gSXFs
PHRfNDV4YVAtVT4xMTw5a2g0Kz9xQllgCnpZMlBXRUEmdzRXQ1RRPTYkakx3WG4rRStKJDNfISFm
YFhCfS1ldU9nb0UjSzEqbll7UUFNZzAhbTc1PTB1Z3puUwp6XlJjNTxpYDslVEN8THhBV2lpJiYj
eCN+V055QzdoRDVlPyViQ3p2MiNyNHc1Z3tWST5uaTtOOHY4JFB5aEV4fjEKeiVAeyY1PmEmQ0l7
cUBDJUhvWHg0PWkrfjE/RzJING9gREFyeUV6RHooaGNXQ1hEamlII2olckApJSU2YFFlZm5vCno1
cmI0X1h8QFJhTGREX09ZPnY8MnZBcGs/SCglWCg7VnZMPVp7MFhieyotIyNJc2RiXmhWM0lxLUFW
IVR6NTxfUgp6c25wcW83UWJVTiQ8ITs2blAoazJzeTFmUlN+S0V8TiFHd0hPJDNGST5EdSt0VFl0
T2grSnxtZmNoYkNMRSNkRFkKei15NiV8cV5CLSRkVzRlJHNhSHZFS0B+SFRLSFk0SGwlOWRYbDtL
LVFyWFUmZXtDanJZX35oflRBQWBNKHdycmdGCnpoekE/aFp6QVZ4LXZBK3ROQ1RVVExrbzsjRzkj
YD44K0VmanI9cDR2bHBKOCF0IUo/e0I4THwhIUA1Uz5aSmlLRQp6ZWgxcypmKDNjVTh+PVhiKl8k
WD49a1FNaEw/PmRlP3xUe1lsbTd2SzNORVkydU4oTHc3SzI9fk1rQD9GNzxqMGwKekR4OVVJNU95
PSZ5a1JCODw2Sj1wR0ZHJH1HQ0lVWiZ0SEdUTT0hcWo7bzU5LSQ0UHJOK2lic2kwfmBHQkJEWDdg
CnpTZCtqNF5OcHt+c2YoT2JybkF7aEJ9T25NWThXK0RrblVTczkjT0Z9Pi1nTk9Ze1paZXc8NCls
Nzh2MVllczwtdgp6TS1KWmg8aHRBRW9xcjB9VUpwP19BaX52QDsjRmZzZmtASUVxMH1GQk1meCZF
a0tBRSN5aDRWV0gwNm9aUW9OcVoKekUpPEJgeWJtOENrcW5IT2lBJUglVUNDYVVyLWR1JnMkVT1U
YDBtVGpVJF8wOzZDfko+RXw0R0d5TWljeHE2amxSCnojaHwlV1U/b0ArNHRYfXdLX3U4QF9NTEsw
RndhXkEzOHxgRW4mYEdHcUl7KzZvbXZAMnhxJn1UeUJyZHJDTFZkQAp6aXg+QzNeZSslclpQX15S
anM0aDEqTzdDI3liRnchRDRSLUduJjFXSW8maU5iUG5jXjxjNU0ke145dk9iN2QxT1oKemJTNkE5
KTVLdEEpKSVNYTJEKnNDTj9VNk1VamVWQzJKPU9sJnAyQmFxIUJtP19IRG9JeXVIVXB1fE42IXsm
a1N2CnpNVURaajB0JDZCbkt0OGVRdW9SMFVYN1ZhR1V7ZmxuSFgkKzV1PFZMYjxYXlpNa05sKmQp
TThjSzc5V19GfFdDOwp6OHlueH5YdCV4bGk/dVV7MytkJStLKDcpdF5TeDlvRSlaelQhK2RVTFcp
fnZpN092U0AzUyRPRyZDKVdIYTB8UUAKelUjb3pQaHlWKDwhVn5gWEp5JCRgO0Z4cylubC1ISDdq
b25+JEFMNFZBYEd6XnR+YW8pcS1FPVA7PitYfnJYcElhCnpsaEdWdlhtfjxXdHc1JXEpI3EkfndD
PXxiZ21QeGwpQH5NalJjdF9DeldARDhGMkN9SzlfdVVyMlVsUE5gViZNdgp6e3wwYiY2SkZGdURg
cSVfMFp1QXB0UTE3M009R1VLXjBzKV4heCRAKEBvSiVMYDVMYkg5M047JGUzdDViMV5DalEKel95
N0lFU3g1ZF8heTRRTF5ocyF0Z3h2bzlaJHF4d3d4cWhyZHtSQVQoMV9UMVhKQ2J8RCMhcWkoJmMm
ZkItKjZyCnpaUVp0QTMmfSYjKUZvNU5DfCp+Z054YGB4IzxeekMjZlNEQ2VkSWdYYUs1ITApb2dw
dGVKfVFAZEV9QTE7TXd9JAp6IXlZfjtAZkpFc1N+XzdjYllobHg5Vm0xIS0rbFhpcE1DVXtBTiFR
RUc5LUFwVT1VQ2Z4JStQIUJgTzlKbHw/fWAKek9IVDFuUFhYVHVpdSo+ZzVLWDAyWGQrcnwlUGJy
eT0yUHR0YHs+ZkReSmQtQW1EXkgqTC1wWChtK3BKPXVHOFNFCnorUFo9TThmPD9qbSNyeG0tJGJN
KlRtKlkzZ08zQHledmJraVlUenBSckFJR1BzTXJaSEZ7WlM4SDJUdTg9b0kjcQp6VDl6Z245P2Ax
SEpnRjlRTTJTQCV4ZlpJMUdaMFlSX2Ate0N7X0A/QSo1VXtMejkrRj4xYHkqVDZAY2dERGheI3AK
enB3MDZVbHI0YChQNUh1KikxNTBodnw+MSVSIV9abCRvJnRxQ1l6VCtqX0RDNGNjfTtzZU97NnBr
REtneUA4OW5uCnpkdVQwJS1tPndOIWJlIU0zZ2pnP0U+Vngja2BraWtBQEojU1pscGQkcCRMZE1Z
QWgzMWxjdlFDS0VtXjVCfFlPegp6Mmw3VlVBMH44VjdMNzFXcSlld3NUdiY7RVlCOWF0cENMKzFo
JlJObE0mTDMoXzBYWVhVd3J1dUg4JCoqZVgleWUKeipveTRFMHU9ZWk2KmI0fjRUKCo+ZSNUUSpA
akBRVSVOS0RZVlh8ayFIQ1VQQTlOdj4zTnk1cGJOTWJeQFFobkotCnoqMUx3Znd3Rm1aJkhLKXtx
fkwrbWFPYm5IempNeDB6Z3dSIVNEdzdDOCVqbX5BdmpscVlBNH0tNyZqTDVpcWVRPgp6c2pwVVFm
TjBjc3s3a3U9O3c7LVVpaTY2bSNrOUpTTn5VRi0rLXw5Smg5O0FBVSZTUEJOfGkoaWEmfSNEPT8j
Q3AKentOem58bD5XMnh1en1KY3lZXnpvPmA9VnFJPCUheHBoSHJ+NntafTRyRSV5WjI4K3AwT1Vq
TSpQVHdFRnlYI1VfCnpwVDhYSUNjKHVKWmtIUCRmOXxlZGUpano0byN+bWNINH01Pj54en5kUm1V
fHdoeyt7UGdrdXF5JWN3eWw5dVVJWgp6bjFrWTZHN0RwV3VHYm4jSVlXWW1UblY9UFVfJmhydlha
XjIkNm1EaEcqalRwZTBKTVNQYW5Lem9qYm5XQCtrSkQKekRkZEh9ZmhVPjJwcENTaExZU3Z7QlV6
YkAkQVRgdUhmVDw/Wmh6NSk4ZlMqNHB3WE85bzckI1R6MDVWe298dzVMCno2SFFBKWlffGMyTEE7
OCRIek8+QFR0QDI3VUF9MjU2OSY4TVRUa0Q5JHNobXViOEo+VyhYU1FkNmdiU18tJjhwXgp6Sztx
Vlh3QlBOSW1+LWpNV05fTyhCRXdRe2NFKW8/RjxUaFlEeUt7X0QkVmQjKVIxezsmaHErZERFMyR6
QEY4ej4KejxGblVae1B+a0ZZKGAxYnpyVG5ATm5QYVQtK3JNJTNDUip2c0Y7IUU/MyRvU0c3UiVM
dytKdVB3e19PODRgfS0oCnpiYHxLKTJYNFJncmVGUSNscj1APnpPKCotNE1RRU5VS1JxV3lVdn4l
bWkkP2ImOS0hVC1OUylXRipMR2s0eEg5WAp6QjlWLSVQPjt1fG4kLXopbnJAPihgYlpgam18JUlt
Yzs3MjhlRHZFKmRpcWJre1ZMWD02ND9zWVZXPXMqTmB5NzsKenE9SUMjTDFpemRYUEopWE5xV1Bp
QyNXfCR0MEJ8azRwKnhzV3QtU0NyQmw3WmtaSEVxeUpiWF8lQXVAbWdHbW1rCnpBdnYtQSM1ZVpl
YE89TWwrTys8ZndFdXx4TGxWJilHa3s+I1NrOHpTc0F7RGlxTHI5UzJDT0FFamx8YE1RNExkKgp6
Qns4YTVGMVU1VkdDbDl2MlhET05pQ2JVfjlKTykkIyNwbkJePks0a3N+a2Z6Y1koVTtyIUB3NjV0
RCpBbj1tQzEKeiNxNTQweTNvaktXMigpPGgzUHplJmd+YUleQGteYkhGKHM8WXhsZ1ItdThgT0It
YnQrTyF5Y0VAXiNNTGZDQDhvCnpVNlB6ZCUhV3p4anhSTmdLP1RHeFBNeyFXMkZze3NJcW1ldFQz
JFZYM2REM2goVFR3QF93Um9BZ3YlZXJEOE80Ywp6ZW5iV2ZnQnpiJjJWQDRzdFZ6UU9ya0dhXlZA
a19wVm1sMntJJit+XjdhR2t4VXBzNnxBYEEoY1R4WF5TXnNhPzUKej1WKGFQVnMpYTY4c2haPUli
M3RWSmIkK0hsUHtrPz9+ZTdoZkJrPU4kSlIqfHgkVmNtPHJtNz9HO2BTTDVjaDRQCnpMXzE+IVoj
PVJ9OU95WUBSMEByZUhtbHxOSzV1VH5ZQ08jUjZsfmN8eWNCSHAwfmhASD0xLW8jYm5fZyFIVTkm
dwp6S19mej1lNTY5SEJ9SXdfUGc8c2s3fUskOFZtPT5OWSVwNHJHRUpCVCFZb307JUNkayRwUGpI
Km8qfShtaiEmSmEKelFkSm1fYiR5YURaJWFFU256JHBhaDB5S0h6a1loZE5xPkI3bGdNK01kI3px
NkF6eXdEI1RPfElFZz55K1A/dERyCnpiQWQwNUxKcHg+bC1INXdSazNROGgqeEdGYXdEbis/Q0li
VyZ6fTBiKUJkdDQ2RkdsUjdgcyNiJFgoflo0bytvPQp6aypTYTc+QGBicThrPCM+bG1VVW1HTUxw
fV9rNU89aCVLUnJKZVRSJVFWQ3lNTlc+NTZNM3EhcSZHfjNEdmFGWFoKekhHX1BPaUlBbHcjNzxL
JTtmRVo/c1lpQ2YrNU9PXyNpcUJ2elB8MHEmc1VKVjdMUFFgTDg/ZEwrWWB8Y3pLMUlECnpgQmRM
SiVATykwXzg8KFF0Z19QYmdxMW5wKz8mUndNdXlCLTBfT1loWUl5dzhjZCEyOSlKPCY4djIocWo9
RXplTAp6cGEtbUdjeGkhYEdgNl4pJj1NQWxjOzxNbCUkZ1NqX2d2RSNpSzNjckMkNnk5WUpDT0lt
MH4zR0sxWWFGXkppeWEKemt7SH18SmMoSSQkflEyYlE3d3l2Xk5xRW1qO3ZgPEdhR2ZAa1Ilb2NC
OVU2eUh8Tl4qcnNjZWh4VS1IX0wxVVNACnokK0szVWpkeE1TdS04Qk07Pz9WM3tga0MyJENUNjst
XkU1JmlUd0szRVo3Rmx0Y0g/aFhtakxAOUpTWUJAZU5vQgp6QzwmRk41Xk11P0lYYWBeb0YxYDB2
TGNoP2ElWnZTJDdjJGo0NGxkYkU7LX1DJEgpR0FlSD91KXlFWSR5dlI9T2oKejtsNVQ7U21LI0V4
fE8wUCZVam82REA8aFIjNllnPHItKmJWSkdKMD1ESUdqPEdVNWBgZW01Q1ZqZXQ+UyExKlF0Cnoz
ZF4wdzBzSGlsPWs5c3dBSjJUZ19DTTJKd0B3SXIzLU0jc3FxckhtaXk1R2NjPkcrKC1lUDtrPHFC
OXR1R3M0Nwp6Jj8pMUxOKiMtfDx3UHdWM0RtUVpiVz1jPGRITHFPcjxgYD5EUWoqT2B5RCFWMjVt
KGk+cTBVfSRUMnhIKipSMmEKekxnb2E7dE9YWHgxaElaaGNCd05YciNpLUBRM0Z4ZUd7V2A8I297
UWhLfmZPb0FwU2FWKG9KVzZgUkk7ZylfZWIlCnp0eT93UWN3Yis/ZGNLQnlZWnNoc1RGdWdjQmNY
al9wZyUxY15mVmtka1kob0ZEc003ck1aMl9fJGZ4SmJMfktWIwp6RkNlTFU+VCVYcj0qREAmUCQk
PGwqJVVrOzk5Zz9oZEhULUJwVzk/MDl+IVA1MmEtczsrV19HT1VkWE4hWHpoeUUKendvMGs8Qj5f
dktDJmxZM25aQXE8XllMKkxuPnV0RUNNX1NWNmwrZFFERmx9IVZLfCE8NGZfclNNRzx3azU/KUN8
CnotVnkqM3YqK2RxX3JHJWFPP0IpSFRSbj5yLTBvWUcoJG1PXktMUT4oSkhwQjtAeHI7ZT4yeml6
OSM2O3RuI1VOVwp6Jj5BWl5va25yYWFwQmVLU1hFfjcqJjQqIVdjd1NwWWA9SHM0YWMwaDkrIWo5
MCpMPDMyaUlZdm9qXlheazxnKysKekdjeDk+eXExbyFMfUpGTVVYP0orPElPVi1FfTFMT2s/UFNW
WW9edFJtSEZuZFdjRiN6P0x5RXFWc1FoKkxaezRSCnpOZVljOVNHK3taZTlFfEVrYztIMWMzSztS
X3gwNmgtRig/aUN0cXNBVHI5MylYMF5QcHomezJOI18yeC0/e1JYJQp6PD5vfnF7N0YrIXcrSSNu
PnFeOz5YUHUkM3Z3Pz1DYDlqMUxXI3dhS2Q1eHhVJldiWDJ4WCRUd3g+X1M9OUxoczcKemFuR1NB
eyhSaSlyLVEtRm1XeyNWPnI4SkhzaHt1JjBKZ35oS0hnM0ByRmNCd3ZXZzNZWDt6aXE0aWB3R1dz
TC1kCnpWX1o+I01rb211KnhEcWslfl4wWTF9fiVCaU9ESCYjJEVLYHAjdlpOcEs4X3J7TXlAKGtE
eHo8Z0diUzszak5Hewp6R29AVERuM2h5VVhkNFY5Tzs8Syg7dmBseXNhZWtIJC19bUkhMiMrdlZf
PkJkdyNtcXQzUzwhKUw8YX0yeSF3YFYKelpAS3NUKnZIYkc+dD5IYWg2QWBEPDNWQiFvZD1EQVQ5
Zk9icyUmYiFzYlM/MTw4QUAyKXBNMHlXeFp+PnM8c0lBCnpjMXFESUNuPT54NFhKUm1Ld0BDfTxe
XncmcHRzVVhZRm1KQnooeEchU3xLdX00cyFILUVDY2BnQH5gKGp7cElpVwp6LW5xVzM3R0dieG1x
VEh2JG5XNV9NeGttKVFuJHtwdT8xeD1HbCRNREJqemJTNiheMDZyayZGMV9QVk54R35yWDMKek5Y
ZkxgaEgyXm9nfFc7O3ZJQn5JOz93VjVmNW9tQkhVV1JgPj8mKj5SZ3JKWnpZZ24/Q1hIcklha3s3
KmttflJRCnpeSFA+allLYEUzSiZuN2k5KUZxZD8jXypyNDJkOFQ9SypsdXs9cGVMSzBXbHNvPXhF
TGZtaGRsbHA1c1B5OHdNTAp6SSRTY01oYTx8bk4+eF47cHNTSTQrekRZRTMoSl5uWllYNmlFTXI4
SG0lVCh3PkcpVmFmUHojYURAcUZ8MU5+Z2gKemZHMlpYTWtfNEFpPn07JSR0UW4mNz5BQWd7dExP
QTU1ZDlMRl48eEI7TiprdVQ0ayZ0YioodDl1cjdTT2g5UXk1CnpkMjdMTGs8cH0kejBJVWFDVzEx
N2FVO0JtYzA3T0xMJHwjMEtveDgxdmZ1bSZZYnQ/c3pkUTshYHl+YVI7U01YUgp6b15GOFlORmxB
ZndhYEhiZEY5K1QhKWFfO2VoV15gazlNRShgWmJTWkJFWVIxY1lWNmxaYWVufT54PDJZbT41JDQK
emY5PXk/Y1ZObFVycXl7Y1owWXdyYFM1XkVQUkpiO3pGdHtPSDNZPilPPGlaSjwyXlR6Uk9gdnJi
Rm81RWZ8ZF9tCnpjKmQ8U3l6d2JrREdNcUxyPj99TmdNY3UkMG48Xnw2bG9oR0hiPnZHKD9ZcTNS
SD15QyNUbnM8MVowd2NWLSN9ewp6JV5JNFZBfTA9UE1EUXNPPF9WNWExNSV4VVEkUEJ6OCRiRTxp
V0Fseys4X1BiOENhdCM8Z2BiRDMxT0B6aHZRRHQKenI8OEs+TGJYTEo7Wmo/cFM9eCkhKlBeUip6
UDVebldVPkhyNiZweU1KKTYkcyZVK2tVTjRVJm4hVWF3QXItRFdUCnp3Nz5uSEotX18/bFZqSDYh
PFZsNTUhVWBVa3RmZkMzT2FObU9ebllBUWM9OCRxMk5MPlFiTHswTSM3VkBGKXtYLQp6M2szflF2
Iz49JChpcW15dX1fYCElO2BIR1RZcUt6d1k4S2dnS1ReUzQzbWZ3bSFqb35FcFFYRW8wQ0U0M0p6
WmgKemNEVGxsTWRMMXMoXkA8fjMzdTdjSX1jcEJ7b0c/PFZ9a2xsTjc4TnN1VUJraDJndCMxZStH
fUV2Tn5USnVZJHVfCnpPM1JZK0lCfmtvJTRMZGNAfWdAJl4zNzVuSWpgaiFCViVoZFQ5MGFsNmBW
VWo1PXFPckspfTlvIXJUQTt2eVlyYAp6JlZ7ZXN2ITMrVG5mR2g5SiQzOWF1PWMtIyRVMTxnbnxv
QVVIc3xvSk9oTFBGOHB0b2VxU2h3eUBsO2JjOzw2fE4Kel5AdkJDUDFvRDtnM1JjbVlyTCo5WD42
dU48TjZWKUImLXUtYlhfWHg2aW9Lfj43SmMwfExlJXYqdE5IMTxDfmhiCnpIRHc8OCNUYEZ7I0R5
QU52UWM0VCQ8T1FjNFJxQ0NSdWlPREJiU3lsb2hWVVdFVjhBd2VvYG9HdiYzPFlxI1Q/aQp6Qk8p
MUVebSp9YGV6WXs2aitPfmdYYmVwRypVdnhjaW1VIyNBQ0xWLTx1TUReM29HSmJuWmZVNlkhTWky
ey1+ZWcKekJEO3V8cU96O2pDaDA8RFBNWlhEI2l6MDdDUVhKYUp2ODclOWUzOWtaOFRHfG5QWnlD
R2t3SlJHVWZ5OCVeRCs/CnoxYiNaQ2RvT3dVZzNvUl5gbyVUIWFNV01kMDV9X3ctMz1eJVFNKllq
QEp2JFU2NiVnRz5qfUVpbnBiSlhNVkUrPQp6a2JgYmI5WDdNNUJEMXA4KWZBIVlPJG5tdjcoeyt8
VVVrRDZGV3ZGcytXbF9sc0VmdGREcjlmcXJAKjE1Zz8tQisKenp2Wih6aXkyX0BHZ3B5aUQyZ1R1
TDhuVkhVP2YjLUdEfWRoUyhyMGMldkBQZTFQaXc/TWl+PUt2JHxjOGswbXYyCnpkeiZLVDckZHgx
Kyh7U0RBVUhWVCluaE5YPVMmQi1vQ3djOHNNK0BXQUZoRGBKYVBsfE5rfmVKMjt3b1pFUzteRwp6
N0sydzIoeSMmRHByPnA/Tzt9TkFjTCNRaiRsNFQraGB5MDZMVUt4SHR4VkV4KG1UfWg3KFZXSGB4
enxCZn5mNGwKemIjbkdTa0d9b2VQdUtLP01fY1JpVXEzfjVMTT0hJVcqY1M2clpPZSZCI0NUWllK
YlFVXlZNT1pOI2tnRWdxaGpJCnpDJHZvaERXT212PTsyKk12XjN6RGl2RyNTVmgkTU1RRig5Ylcx
PUR8PSQwcT1GOzxrPlRCZ0x2M2I3U1A4KyVAUQp6PmYke3xlKjV7UmI/en0yZDwkQ3VEQDZMXlFe
Q2U0bVZ8PHB6fGkrKDtESioyOyNtYl9WJXFnKDhmZ1d9OUZyNkoKem1DaUl+UkQ1QnYrfXhGTj9W
fGArI1dpVjUzfmc1fk15VE85KTRefnVZNH0tPlJFUk5+VlEmWCQzT0J5O14xZCVtCnpLS3tZPXE3
TUNpdCRORU16ZlFnZEc9K0h2Ylo5Y0tWJDRTQ3I4O1JAY2U4YVdaR3lBJXRFIzM+cHdVVHQ5Tm82
Sgp6Oyo3RSkxMStXRT07MF95RDw/JkFENSYkfDVVJTxJZXxfZmRTOHNtb3YzMlgwLSUhSDNHZU1+
TFVqYnF4Yih9ZHsKejd6Y1NGUUk+SDh3WjR2dlp3RjY0WXVNSCg8ajlNcVkzYjtjTkhuUzZWWi1z
RXBxSXJZVnVPO3lERkViZ2BAUT1RCnp6SkpEfTAmSlZ5YV54dGlTdiEpYmJLc1NQWEh5aFBDKjU2
YjckK21MJWBCTlVPZDU1a0NHVDA2MnE3S0o9eHhnQgp6UHtZLVg8Skwrbz9rNl9mY0hqfV9SVDcr
KSF+ailJVE9MbGJvIVZySVl5cXdQVFJaOyEtdEdzVlNRRV87enFscW0KenRDNj5fSTF6fTEhKVlm
WnM9S31VQnt+PX1NQVItZys3U21zSipVWkZKTWNZVGZXelVnMVFUTU5KbVFxPzElRjQ9Cno9Q2JC
dTlMWnhiWFNGMDB3KT1ee0tLNV5xVTI+QGo+eGNVdll0elVxXjc2Qmd4O0IkJjhRcXw7VCRFeDNk
UXsxUgp6Pk03d2RvOVYzdzN7SVNnQWZuOH00S2NTVmt3fVReVk5PTE9qcn4/bnoxXkJiYF58dVMw
WEJeWW84U1I+YG1yYmUKemFQT2cwKkJQXy18SmhKJmJNMFF8e1klSXJtQGd0Wk9LLSMoNjFmI1RZ
bTBKTHY1elFtZDhxNmReJHxKYjVXeUc3Cnp4O08+KygzZ0w2e2EtSHA+KVQ2ZyYrWWxidGxpZkM/
RTMoK1ZtX1Y/PGs8c3xTQ3ZzMWghTCskJGNsWnMtcUk0Jgp6Q3skc1chbCNuIUBaZTRSWXp+SDU9
PGNRMilvRz1nanhmckQ7UTtsTGFaUHhnfE1LSGM5ejZjV2Q7U3Z9Z14ldTcKej1QdkR0PlRXN1Ru
VGw+cTxWWl8jaUlUYE53VTFPNW48cG5gYnR7ZERpNG9CX2x+bFRpI3RSRWF5XkBAcFFIN0g8Cnp6
ZEtHSkckQUhBYVB6eElwWjJAdyk8bHlORHI7dk1Bd29Jell3KV5OZlNJM2lxSFJ4RyUjSkExYmF6
b20ydmk4PAp6UEtWRHw9eEJObG5rdU9te25FVVVtNzchTTA3YWAoIUx3KWtMcyRSbHRYPW5HYztW
S0twOHZsISt1cHRES2RffkAKemZyTDJsbkJxRkBDM1l4WTB0ZXY8bURnfFNMa08qJDdDRjwqRGJV
P3pBeSNxJUgmJTtGMl8mWXkqb3E1QiV3THxvCnpeM20oaCFKd1YzOF9FYVgqS0IpeT9ePE5lTGYl
aykzNjdnS2VPfG52NWZWXk8jeGAjX0MzPSZnO0txd2RAK2dIXwp6T0tLenxhJFhAO3hyWChTRlk1
Rzw+Y0tIKCh9P1A9JU1SUmdANDErMUIzIXhqMURiNzxRJE5RSjxxKlJEMUd4OEQKek87QiVZa3t0
VStiUk0yR2MxfFc8QndFaE9xdXNEbnRSJCo5QXNybFIjcHBiVVRjTCYjbypUOzFmQ2V1XyVqIUFR
CnplLSF1WTFaVGItMFc7Tnw9YlUpXzNEQHJaRiRPTjNeQTszYEpOPEZVV24paX00RHpSSXhCI1JA
I00yTnA2UHVjfAp6RXwhVEl0JXhHc0RzIWxIc3goVWdtdWg0T289K24qUnA2Z3gpLU5NWWhyXkND
YyNDam07Rmd3aTZTOCQrJV5CZCgKenxOT01+cE1VQFQhfFJqOGkoOHhmQWpyR2xnIXFmMlhtan05
ck11N3poI2lWZC18Z0BUZzVqVngqSVBPeDFEYkQmCnpzQGw0eWk4c1JlMmkhYkZNSzUwVStnSVBh
PnolWEtaOGVXJXY5UVI5e081WlNuOFQ0PkVvY3xMUEwxQ2BZKnEwZgp6Tk4pJHk2ckNiS09tbW1B
ailhKXlRQnBvOXk9QD5QVz0zd1p7VTY4Z0tJTnBfX0NkYTQlZnswMWVYSzFoYV8/UyUKenoqdC1w
RjRVbkRHN1lOTVAwbEtNeiokYTd7SDJAe20rUllmQXd0bFU/R2ptOXB2fFJXQjtVSThnazJCNmFt
U3tmCnpaT2QheE9aaDhFPXpkN0sxe3NvfFB0WnVFNVZmcHJWTjBCVF4oMz5odygjLT0hUTlSQnQr
K3khVW5qTG5XZz1BUgp6XitzSEFwO3NgfkVePTFDTHxtMkRDZF5KTlhDJFpIOT5FeVl7RzV0ODRB
MGRZLT97bmI2UTg7Z09yNV41YW5yUmEKejRlelYpP0pESEV6WHd8PE9ObTtRSHt1SlFPY0JSdGBt
fHNPa0N2QD9rSnsqTmlKWihsKTV3e3NscU0qSlVgNUFYCno3V2tgNDgzSSo3Uil7KT4rRz80XjNX
TF5wM1YoOXkhODdsRmQoVXkzUWheX2IqNUNzWlN2fkZwcmZkTUcyeyRFMQp6YnhETnh3fiZFMi0q
VzRxN0R3MkNfZTNLKDAzRj18blZFb09XPT5xMkt9eFNNdUZnRiMtMTdSVD88VFF6ZWEkQ2wKenNr
ZCNzdmJMT3ZCRz12aDN5NFFpR0NVZF5yRnhNcHJlPGBgUjRkMUNtPVJ+ZHExSm9tLTkkKiVnOyh0
aipMLX5ICnpDbEJ4WkZLbyloZ3RaOUFrRTlMK0E/anxBSW1LQz1YaV44MzFDejhMQyZkfStma1cy
cklrTEBXN348S2taWGctXgp6Q1lBfHR3cGZWT0NUWT57KEB4RDk0YWozZTtqKFo2eDZ7NTBaYXdf
P15NQVo9eX1sbE1kVlQ5SGs+U3EoWEh+SDEKenl5NDhFPkozRShkJGBeM2NFJlQmN3oqTD40YSlM
TGhGWi0xeEpfcVVFeyVANERxTEhRJTxnVntSJmtRKWZRb0Z0CnpkKj1ubWVRLUFSeTRrWXZqcUNt
Z0pBMXheOUlwajZGMU1IUiV9OEpmJiRVa0g5VHgrJlRNUT05YW5QTWZUVHNnXwp6bjBsPjxyV1At
JHZqbU1qdmpRXks7b3JYVygxR19xZyVmP3RoQVRDfCs3Y2p0UE48KmByZG5KUz1wfE9LNjtPIzQK
ejhscihwY0dTKzAwY3lEVWcyVDY4XzhpYmNqQG1lUT9OeXA+SjE0RzltN0UwMHxHJlIkKDBKWStv
an4tP1BLdX5UCnpoSzlJWVhpQ2lDZlg0TDxRIz9ZQ3FnV0YyWjNaKTxHKSpsVEBheG16MztNb0Q5
ZDdEdmM3SnVuRUt9LWNOP2gzUQp6bVl2MCEkTGdIJVIyLUZHTENIZEB7bWZeN2NqbzVAdUoyKFZl
Q04qJlY7ZTFreWVhM3ZWa1A7X0VoSWktciVUT18KemhnRkhod1VmRDk/YH02R3dQR1B3Qzx5cklN
OVhTN2Y9eiF8PmpiP1Y5U1RKaGdlV25EeDM+NTtHSiUjPkxrO05kCnokRGk9UU9+Mm9AOVd4PT92
aGkpJiRKbD5wayNEfmJzdH1lZig7ajtiIWp3SCg8WiNeIStfMXs5RWUmUjhQfShSSQp6VTBvQnxy
Vk1uTTxnfTFxWm9xd2NgXlJzYntNVlpwU1ZLRngyc1hNeVdPPFBVaHo0NWcjQVRxY0RSUUdwN1Y/
YmQKejYrTnhRY1d8bCZyPz8pRXVgPXFVTmdYdWZTNHhyR1E+eFNSaVcoNmpfTHBDe2BudSEpez1s
cDdYPElrbXN+OXhmCnpvP3glTnVSMktrKSNFaiZrNlJqYmJrM3xhS2I8Z1FSLT1+Z25EYTcoaU5X
VkBnKmlpSiUxZVNXU2UjaVVDTHdtWAp6QHZJP0BXSi1qNWpNV1RrbjwpbVooTnFDU1FXVmQ7IVlD
d2YxdFMxfHA1T2J6cTFSNDN2PnB4RmR2OVQqKEw+JWYKent8RGVvNT52ZTlraGE1MzdTaiFOc2s8
d2RjNDh8P249QnI/c0khMyZVbz5KelRsRCVNJXtFZFFALWomYCVDaTxVCnpLZjlKejA1JG1pcWQp
IU5VKzM9SXo9a0l4JFlVK0BrJnxMUzJrZFl2azdRejg5eCpfeU0wK0x0JGVoRlpXbl90JAp6dFFf
JjBYeCZ+R3V7JFVZb0NEIVgoTTtyfGxvN1J2ZFY+TGg4ZHUzeTBITjxYPT98d3BAeU92IzR8OGc1
WkdGYzsKej95RXRUaD4/ISpnZXBuOThnKGpwT2hQWjxTZVpuOWpqV2s7diZTVzg4Q14wRzRqMCRM
SDlffEchc2tEQHxIVzYxCnp5SnxoKy0rQSQlWDRASCR1UGZSMTViYGxjR15rJTthI2NFQSMhUmN6
TjFGNjhrJWgraUlJRVFtYiowKk1lNEFRYQp6XzUkK1VzTUZedjd8ZHZ0O3cxQTU/N1h8WHUoKUxA
SVk7QURiWHNDXyNhPUl8SkFtR3pJTWB0NFQ+SWdAemtnPHYKemlAZn1ObyVsd09IKCE4UEVEdk51
VUt8KD1yRztfYUVZPmNUSX1+TWNWbTdBPVg7KVMxOENjekJVMFdrKzRhS1pyCnp6UWMhZT08ZGgl
fE1ETzJLRHdGUytUbUtLWE1jYC1hdGFWcjFab0VaPzA5Pk1xMWtSTjxmQ3BPKVZXQVhPeHtLfQp6
M2x2T2FWPG1fIzQ1RWd9SWkyYHdgNmY7ZD9kPn0yPCU9SWE8KENGKil9QTxMam0+LXVJciNfeFl8
MVEhOTAha0sKelQ0e3opU3AlI0RXMH1oPmFfV0E4TSRHektfRyojbV9sK3RvbWZScCVjdEVlKE9V
THtwUSlnTT5MQ1hLbS1LVUBNCnopKzdHfTUpQypsQzx4ZVEhNkEhWmVHa01OVzUwQUwjVjFpY0gp
TUBfYj4/dXItMFhAK1VBLW55RjdeVW1kfGx5Pwp6TkokRm1UeCF0SXI1PFpkO35Pfmd4d3Q3YmNL
N0NQMjshUyFDXy1DdWdAPzxLJnFNfEcqTzduUmY4RW4oVCpidDgKeih0azRoK0hJVzU4cUBkPmcj
TzJFa1IlVU5xd1ArUClpQUNxMXkkSDQ0PHh9fXJyKnF5YEBEYGxoQFUzeG9ubmZsCnpPMiN3JWsq
Rm5YQT1RUV5DPjNWcXtvMkI+RnRuRX5NekBlbHkwcz41Mj9afEkpbGF8aj1CPkElY0szUThlS3Bh
LQp6UihsQmZMa3dJJmBHUnlZWEU4eyl1OExlcypRKWhuYjYoR3dhV3BGfiU/WVBWTlg/XzY0NWg3
PDIjST9sb1Q2PDkKeiU7QFFUPVI5fWsxSnx2YStrTntDOD9KOTdUaV5hcVA8dn02NX15XjdDfjc+
cUF4e2BmOyohKjJVSk1sI15rclgkCnpQbnAhail3SUxVTWZ0OV9rPiZMKjRZNCp1I3xUOXNqeWRz
YHYtYT01YGpxd0x7X1hWak1eWHtWWkJsNX1LJlMpQAp6PFNiIW53dVo9Yz9+b1UtIyZHXkxLUl48
PUVtR353KU40OEBaSHVFZEdZWUxDcko5YGNrRFBeazJnMF9PRlM+Z0YKenhnWVB7RyFeKEpgYVJY
UWF+YlBvTWljcVBBdlprTWxTUShWQ3M+ZU1UN2tBZ1c7LWozTzVhdX0rUHJEYmc2ZTZOCnpxRGY3
UEp1fWc/eEd1bElvVGJyR2xRPiNkaHElPC1ONW4wM1VQcVk/dkg5VVUmTjthRXJFNCkwayp5byU7
PkRWNgp6bUJoTjFvZGM7aUFweGZoTGIofiNuRDs3cCo/S0cxdV9iLTBLM1BsZlhYVkRgbT48SkFx
O15QYlBOSSFxdjYwQ3EKeklaQWNFKGFJLThXKnRCUUgkVV83dCFGPVMlV2RsK3xLUUpta2koRjdr
dkUoRjRUdj1AbEdSN0pQIUtMK3E0O0NzCno/amp9aiRKS1JTRihzYSVGPmlEPFBmMW49Y3N4KD9W
azwmVkBJMXFNKXdybHRmd3tUd3hldzFqYDIwRFdTfmNHawp6eElAPlN4T1IwaEJQYURDYmBEM1dP
PlN0dT4/V2Q7Vm0yUEIoMVApKkZxZHh6bXRDaX4jMmB0ZU9pdFYjTyFKY3AKekFeN0w7Z35mbmJU
WGhjJXhNWU1MRiFiRGZrS0p3SyFoc1A1MGs/ZEpXQFF5WFlwJVpjXlNkdHApZ2ckWXdyc3E1Cnpu
aU58Pk5AViY2KDFxRDB3T0RyXk8zTilFWTMhaTIkaSFebzU4Yl9EdjFlMW5HWmh5aEJUYT0lTURz
K3dzelI9NQp6O28+VmFJel9pVT95fjRDUUBYVjF2LW5PbnAwOWBhQF4zSFFeVT8zVypzTEQpejxv
eiE+KXdISVp9P2IpeygjbjgKejUqIVZ5JDw4VkB5YWhCcW00eSlTKTdiYWtobGclRWJuZDMxPCl6
QzF6QDk4X3E8OUw8cHZKR3woZFQtQ1Q7M3ZiCnpEN2xFbDVDSEErK15VWFAzK1BtPXMyTDN0d15a
cT42QHVibiNAVU4zRUNVNVJqPShwO0E0KzFYPSljQD4laWUyMAp6YHUlem1fZ3FmRytKPkBWclJe
SERRcTVRQkQ9Sy1CWCYzem5CZzgyTGJSYVAjOF5XZl9tfTc+cllTdFg1KnwjPTwKeipYZTRSIzFA
PTgpPDZUTEJ3YExHKWE7ZiM4UlVzVVFgQk1qPnc7SjskbTFIdW5URlpaJSNnaVNVRU4zWkRCMjNx
CnpZN3F4fmBeMmoremhtIzc/X29vfjtuUU02QTQ1ZDloIzt8NTNLR2QoZ0w1azh4RmxxSyRTQGZE
KVptRyl1RT1JUQp6dnBOOFpkQDJpfDxBcEJWKEtYfVpvO19Ydz9oTlM3MyhCfWY4NSQ/N2Z3SUQ7
YX5OVVVVR35WMUZWQV4pKUF+a24Kejwybn4yTjRga0l0SGZnVGF0WDl6RXY5S3xJQW97O0d6KmpR
bFkqSnppc0l6KjRoan1KUEJBTkA0cGxWRHhGe3hPCno1dFlgKCRVYUhhPV48YXl1Vz5VK2okeFpS
eCNXUiF1WUteRW8xYTskXzt+LWBpX1B4T2s/c2BgOVowMmRUT0deewp6ZGc2dHg9I3peWU9kYEl+
bEghXmtIQWtiSSVaWHJ3cTdrZDVTJDA+Y0JiaEF4RU9FOXAwRCRAWXI0TD44Ky1iTEMKenhzPElO
fDNMeWU8eCVPaXc8SHhBdjRCPl9EVWMlYXlhfnNrNGtPTEZIWnp+NEVBLUpLQ0JyTVQzTHFGS2FP
aitfCnpBZihicENCNWNrZmZEek1RKG45SHZTJkJGUVFubXQhZ08jczxTaG54MyNtdmBhQyRDVEcq
V0I2WGNfUzRPYDAqMQp6OHghYi1NNlhsdCgtN2ExUmp0LTNCNkw8MiY1KGc4PyR5eEtMTHpIaV41
OWB7VXZ+NTl6ZDhHfDRtT1lmYDFWPz4KellDcy1sMFNxd0tQKDs/VWded3EyYGJCbndMbiRIPldv
V2ZqUGpNWkJpbGslUEVRM0JzdlcwM0QpdSZaMm5LN0dFCnp0ZD15ailSQyhrO3VlPDhxTis1S3J7
c0wlTE9PT1lRfjA5MlV0eldkKFF2fkxidF5iZzhYQ2goTVZjQ2NzRX4hTgp6dX1RbndEej9RQ0F6
JTh6I3BqKUxHP2R1Y3ZUQDxSKlVGZDsxVStzVylCQE1MbX54az9tMSkmWCQqUH04RF5rTX4KejAk
VWo2RT9ZTHhZb2pBdHgwNU17MmV4Nlg4NH1MYWlJT0x3PCpAKzVXTyV9c0B2TjNEV1ljb241XkEr
Rkx1VFRQCno7QV5aKldAQmxkajxPSnttYXNxd0omeXY+WH1xKl8yQUElOElabjd+NDxFRHRuVElk
bF92bWBkZUl3RHBSPVg4Pgp6PyMrRm09MnRIWnhTVWV3KDc4RHkxSl95WnkwUWFSbzt0KGpRPVd2
dk14diZHTVUxMmdUdHZlTWE+V057S1khe1UKekVgQkEwXzNpJUE4Z15rSSYkYXx3Rz09aDYoa3Z9
RHM7LXZsUEshKll3fkZ6WlB9bzJVWTRkPDQ2UjdIQXkwVCNvCnomZzBjfCl+SWdEU2UwP0RTbkA4
a0B3cmB5Jno1Uj5HS0FxdTgkWUdEZzs7VitpKFMjXnRQenJwSWZwKkhhUVNPewp6LX5hN3opX3BL
MFUlfVMtMjJ4KD0wb3NWc01uaSZodFRlYmlWREx8fDNibW0pTVFYNFpzKDUjJkwwd1M/VTshdFEK
emE3U0hCcmB6JSVkYkg5VGN5aFg7RkNZYCE5YnZQXzJkRDlsWE85Mmxqe1VibDVkaVMtSWQqTjFn
Q2ZgZDRCcWBCCnpuaSY7IWU0KEp5JFlLKmtecipsWlcxLTg1K3RQTCMpSmp9QDB3eVNjSyNKemUx
KGZ2aV5VWSUldGJebF58SmBMYgp6LWd4ejk2dUoxeVRBcXdZe0ZFMmVYdiEmVztLK1JPJUhTN0M/
WGh9KFl+PHpmNmRxazhwUExqX21sRjdXayp0U1AKenR0Pm9NbiFIP1JEYipFTWgtTjBDeHdAI0dr
Q01sUU4/MWcraSFDIV4pUWwoamQ5c3hZWjd3MitlK2ZeOTJlMTBfCnpqaHBUKVZPe3leKHwySEZX
a0cocjgpJmRCKnw1TTNFaFFsMjNqKkJUTTYhc1M2ZkgzSV5mR154QmQ1OUBCOGJ5RQp6LXJ6KTZm
QDU7JGhZdVpuKCVKWD9kT2hrbEtlNlcwYWduRWYySDgoZHlBUnxAdVFwZ1NrbjBWTk5GZDNIIVYx
PSsKeiVgUHljT1BAZXpPakRXX2NVaE8wNEFlRVc2bFZxdnUzIV80Kz8rVjA4M093cVMwQ0FSVkRH
RCZUelF9T1diNyt7CnpmTElgc0wxazk5JXduJWhwY3UzeU8/RTgzT2dwRjAyd00kOW1DSEN3V1Jx
LSlHTiNZZFc1TWlQPGRSdiFwb0xeSQp6OVYxfFI5bFUoVWJ4OzJHVUlncDx7TD9rWXN6cUtuP21J
eFRQPS1jZ0wmQ1NAbiVJIWg7amBreEF1PTI7RGR+X2UKeiRGY1dacVBjb21EUncjfnN8OG1JKlRl
RmY2dDJTayt5OG12cXNPa0g7bWxeYWB2JnNiRSNUX0pGLUpOUHBlVnN6CnpsQCVESUxQSFBNRkcj
STRLdDs2fmA4dG9HRnRVejBxfCFLPWJ5RlkreUt1KVY1NUJiYnF8Skl8SktMOUY5c1ZZQQp6LUo9
SH5jV0xCSnJqPGR8PzxSM0F0e3spIUxiTnFVTDlKTzBUUnYkS3Z9RHI7SClOYVJUanVPNDskeUg+
e2F8JmUKelNmKmpGfE5oYlNaflhJeV90I1ZPO3QkdjdeY2NCKG5GS1otZ3ttbHswZ31JalBnPTYt
SWY8dyl4JDhOaFE0bUlgCnpiR0NCa3JxOWFFdjVNJTVuVXFvJUV1KXpMRWNlIXhwQzVrbylfMVVa
Kn04R2g2RGpTcyg9SjxFT01WbWFgfGJtcAp6UEpiOT9fWk9qOUF2PXk1Z2NBbG5qfXhkeU90TmNQ
QV5NOW5KVGNyQzg4e3AtdV50SHZlSlRkZDd2d25NczZQNEEKejdlMEopLXt5ekBrTll6MDstNFhq
aSRHNWdwNSNOM3BTcH5WZl59YDcpRDhKS0szJTlZJU9PTk9lLWg/O01tRXIkCnpEKmdIQlQoJDY0
NzB+Tl8kM09rdGVLK1RAWF9oJjcqb28jdUVJMEleKUE/YCRZQHxoRDtCc2EzTXp2TWhIPnlPYgp6
ZEw8ZktAX1N7T1NEU0UqUllGbWZSM3hOcHMjIzIrMmtHflhyJDdHSTtTVWU1P34hLSF5QSshbTNp
MkpHNFdvV2EKendWUj9CM0Fze1RyN2NjT09qPGY3Xig1RX1XejQrdm01cUYyLV5qNnRuSXQ/Pio+
eHtPblRCS31FfDhfcFdNQSpxCnpsNlhyU1FgSFNndmlATDU/OWVFXlk5SykhZSozOHhwTHFQRF4m
JjAqUUk3b141dmRfRCppe19ZQX5vYGRnbypxRAp6M2Ejan4yNCo7OSU1cXhgdyQ0T2kjKE0qe0pn
cEk+M018ZElFc05rZz49WnRwRDFocT9yKE5YJW1WTlphX3VxVGcKejtZJkFuP0VnRHtFbCU0JmNu
YGokTWd0MlQ3dUI9ZjlVRztoNFUxVkdzZkU2aGE8Zz48KlZGfE1hYSlsU1l2PTVXCnpLQzdaSz1O
Q2B7MU0wJD44UXE0KnB5UVZsWU09JGp0VnZ+fiE0bWh9SnE2OCNSbHF1TztrfkU3XnlYUkh1ISo/
bAp6e2sxZFE3VVhydXBUVkF3a1d8KW04YWo+WGJHRSQoQlg2UGFHWkl7aGFWbkN9O3RSOVc9MjAo
TD9VQEg5R0MrLVcKeipSSmdjLT9AKkF3S0o5LSE2Sm1PQXdOKlQ7QH10WG1TJXIzc3JPOHk0dldO
YmF+TFp0b0BebnFFTWBsVClZRmFaCnpwe2FvNWNZQVk9c0EkISsxMTw4diFHRkFVQCZsKUJvLUo/
Z1RsLT8qaz5rR2xFekIrcFR1VGtXRjg3TjdoTUkhOAp6a1lXfH1rMlEmQWl4cik5M0FESWNuZUo7
X0Y0QUQoTj5VSXFiRTE8a3ZPZCY3c3N9QFpXSlhYSiRxLV48O1BlOSYKemM9e2JYSzdJZS1DZDg7
WjFCYjF7Rj48eWw0bGp+cm5NWlhKZH1ZUkA5dXVfIyR9dn4yUnQmamozcisyOEl5cislCnpqNyYx
Ulk7bGV+djJjPWBIOWE/R0ckZ3xgQVNpRllAI3NTKnp4JTZ+fEdNN1BnT0JkUFIhQUh2eWlyJTlL
YnhkJAp6cWdKOHsjbD96Z1piIStWPkw1QnVfaUJDP2FwNDNaPTdIVFd7cUZxN0p9WTEmYEM1SGxw
U1gpS2tHKUhjTSFocFoKelAlT2xFckt9WHtEJTM0NEVyVH54KUs/fW5TfF9UciokUEZjVFV3WjhL
V0hpMCY1Vzh5c3llM3l3d05wQTFkXmlXCnopSCREO08tYCMjTGB0SzVheUx3bkN6bkF7YWtBJmRQ
YWwyZHBPM3h5Yj9pU3NmSiN2Q3ghKnkpWG57NUBRajxwUQp6WVAoQ3A+bmtST2x1an12SjlHP1Ap
VGZXTiVvNTRhQzBDXlFzZX5SM2dSe0FeWm0xVjdUVDZHOVZveWAzYDhiNiUKelR7aEJvOTU9MiZg
NGVxc1NqT2t2ZTM9RGN2OCFLc3txZCh5ejdvPyZackxhY3prPmJlUG1xODkjUmxNJktPOVVVCnp4
Pyg5bSZBUmo/VkBSb05tbnN6dm5aTyM8MEBNfnEpSlR5Xmx3ZFNJNWozP1RDY0VFRnBsUD9RQjZU
UEgmTUVkWAp6Sk5mdjMtfkhyYDJpQT94dTNUckc0TV9VJUxXOFA7UiY3JlVtYSpGclo/Uzxaamp+
UmJ3YEE8c1dleit1VEAwZyoKek1ZST9xbldxK0FPaShJPWhaeGIlVE1AanhVPzJvRHlXYEg9NCZW
MDU5cVYtVilmYXBubl4rWXhlQn4pOXVZemxnCnorY3Z5RE1kczVpd0goPXBjcjhoeEliVTtHMWI5
elVzT1duNSlBb1huVyhTUE1seTJfMk5sWnpoSjUxMm8yN0MrUgp6KitueWBeZkl6cE9DQXVwP1B1
PVdiTDxJd2tLSFc4YVA8akFZPCVqLWdWeks0dDtLN0Q0Jk5lI2kta0xBb1o4Y3MKenZUYklGdH5W
TVRaTHIxRDNZMDZIci02PWZAP2RUdlRUKFJiY3FDM1BHKUdHdzY8bHFwbFJkaz97T3o3Y0tZSmdg
CnprOGo7THxDbyt1VGFRaF97eX43SyZpV2FFSCZqIVFTWjtMemhodnljS0FyfHdXSmg+M1VvelMy
NmB9bERCSTF4Ygp6JCReZmYqWXQpZHhvcHg8IUZ6b3okRmVeSGk4dzEqRU8/cHxjfHFuSDN7aWF5
SUcmZkJkKmM0MWNrYlB7b3spZHYKenhxaEFoRlZ3QEVZZiE1SiU/UmojK0RBRmV4eDZIPWJSeFp5
MHIzU0JhVGQpeSl3JDdwcjk8KFhETmBKcXAmS1hYCnp2PShoZWFTUkg0VygzT1RiZGQlazQ9PTFK
NEIwJndvYiVEKT1kTX0qJD5GYnZ2QkBiUkZKQTx2WkNidDBFWCp4PAp6dDhobVQjNzxJWEl2cU5R
WV9BR1VRPGhtKXI3MSVLIXJGTT9iQnZVQXJ2elZ8bCo9WkNwKEAxRnl1PVk3PUhycVIKektsfUxi
LWgmdTt2MzI5Mis7IUAwQU8yYDxRVkVWdDhIXipTWVdFM2IofjgrYUo1RUdMb3xzSSpWUDdOMlMt
V3ZyCnp3NDB5TXQjKD9rcGN4bnR5O0AyI01PWTlGRX5TTTkhakI3S1ZRb0xAanB1Z2t5WWE+SyRB
N2tLRD5mU3w8bHwkTwp6VEdUeEBoezVfSU8tNiNeZEVhNGw1bXx4O1pyVmolanZSeCpOWVZgJlpJ
K3dpPX1mQD1eV1o4KU52Um11Xk9wLT4KeiEwdEImckA9OFI5JWtsTCMjel5EZ2IzbHxTQzlNc0FJ
YGhzenA8V05edD9+QT9MVzYzIXAxNnNKYUp9VWkkP2xKCnpCZmlZbj4zSnkkR0g+VlZIR0BUJTIt
KiM0WnpXO1NZWmgmNUNjKyZXWktBMyMhJV9fKipgfWRRYzU4Skx5Z19DeQp6dTNCbllHc0kpMmBw
ZjBBTCNUQE4zSH4mPTFPbjhhRk9MNHhtO1hGKE9+JHBsWl5RbV9EPkEoOU4pWXJUPj52fjgKenNw
ai1Pa0pifDZkJTlFKXltRClKTHxre1lUWTlJZjxNIXghM2xCd1dHanRVLWxmaiM4X2hSc1gtMUVv
eHVHKVU7Cnp5UEskQmVha3ZsSFhgUkJBSGc9TXExdndCUHdhKUxDfStoMGA/YFhTVzNYRmpUN2ZV
dFohZWgqNlRlPGBrSj5HKAp6TTN2RX1pYWpvfEdCcSlETi01TmF3TD1gZkBBfSlHeVlKQkxuPkBK
M2NrRVNmeUQrKENDTmh5KjJ8c342KkkxYkkKekhseH5eNVJ3Py1TfXxXMkBvbjtzJm9oZypPZzZ1
ZWg5ZnI5PyUtNVU7Oz96bVVgM0xia05mN2FtV20zM2xGQlRRCno5Y3RsVWNBUmpgaGQxdXR1P3xz
eEdGWEVRLSRkVEtzdGVmJnNrfiltcVN+eXIxdHBLKlFsZ0B6eGROQXUoVVZTdgp6MmtMMWUjN3NP
SzZkNFZFcmpANUtRNnRHPU9IN3xoIXhGaGlPNks+ViRgVyVAV0NoKVpjeDlsJWltM2wpKkk1QG4K
enhBJkFhJDhhaDZ6bC1VK1lLUyZ6WCQkQzFaQTdpU3oqSzh4fEclWntqPVFVQD9AK35SJUJ5WCkz
ZXdsIXo0elhHCnp6anlDLT8lc1J2ZGtxajloRXgoJXBzY1d6KGh2LUBSKilnYUZ2QUVtMjgyV3Jm
K1FoPzhIPT5QYjYpPz09YWNpRQp6ZCFGQyhKaXFaQnQqJVZRPjNCZmgheV89cm4rfERUdU5DcVlF
fXxGbXBIbitgezkqZ21tfitDKkJOck5+Y3RvUUQKem5JTSlfWC1+TDw7aWI1MVA/MzQwMGoyNn54
dW8rSURIKlBjZm11cTYjNnsmfFVFWUA/MElOOW0+dEJDKEAxRVY1Cnp7TUY9RzElMSN6QW54JkRi
JmhJaCtlYj09VnhfZjUrUkopNW9KJEx4cCV6UUdsdW1fRkN4UHY4PlMjaEtwcFFAOAp6YmtDe1Z8
OEdZQ2pwblZ9IU0qV0k+bG5oZWdaejY4KDQhajhPaE5OZllwUHMyN3trJVdCb0VjbndiKnNPamtJ
dz8KemoqMHt9cCtuSGtgNyNCMlloMHchSDNxZj4jTzNwYE59PmJ3czdLI0RgUDdsYUFIVDg8K3hR
fnNLV1d6YyM0big0Cno+T3hOM0s/Q3RIIU1JT0JqMDBXPD1aaEE/YUBOUT9EVU9GT3lIRWBFJXEy
VVlLWWlmSjNqdjZFPyVNZWArXmJwdAp6KGJ4WXYqcnlAXiZNdF5qPlg3ZUhkYiptZkJ2MGR4PFRm
Rno4MG5Ya2MxTz9acj9nZ2lwJVRlWnZ4emFxTFA9TTMKekw9OHkjZ2hFQlRIZGIwJHNUJGQyKlRF
fHVgUzlpd3BKS1FWR0xTNmIpc34yUU9KMTlFX0dKO2gmKWY3bSh9Xl5yCnpNVzFDZGM4O143MjE4
X0Z5VVpycXN2QkpMaWtLamtNRHhedytLKD1iNXErYT1DQ3QzfG1URlBhQ1dRa2VNVmNvYAp6Q00m
Y1I1MXFXXiEqQFUwaHJ5VHwqSUBVPjhzZEw+OCtfenV0WS17bTshX2ZmO1VZOWpSWSNJZzwlPWcx
PnJgI0UKemFvOCRMOEpBPDJFQXotSz1BWEZZa3xmZlFDYlpOQFctP0QwO2xlKWoqNF9KV3o1bnd+
MTxjYnN2QVM9R2tlPkV2CnpiMl9UTFBEK3UxTWo9VTxSfSY0VFRHYkVJbCNDNn12I30jNFRPcSkt
PTxKYlkkclIkVz1aWXkmckx2WCRHJlZrSgp6QilYREM3bU57cV9LV3wkez9iPXBlSCloVyslQGYh
TWVSRUIreFZ0YmZCYEFKSGl3RWVBKmpjX2o4V1RKbDk9MWQKemN9Q3pebiMrYCtteVhjJTFoUzNk
UmlgRGhhZkM9T2tDWVBXMFE4NyttSHx0R0BgQkRoYytKclJrNkBoMTModj49CnpNfEg/ZkkqNkRW
QHU3eEEmRmxOKGcjekghbHE7QEctWXBOa0xwYDFrPEdnNnZURVAyZm8oMDhWM15PZnV8RmsydQp6
ODFWPiROZ2swQEUzZD1MQnR5JlFDem42fSgxVkEhIWY2ZElAUndwVDUqZyUkWihYM3lVNjRgO0p0
bUZXR2o+VioKej9ZdFBOIzBEPFhNdXlVdjBCRyNrSnRxI197b3s5Nj14O3VfYisyYXF7bjleZkxR
Mmo/akptdGs7NWsqSUg5NXNiCnolRUR9eG1tdD9+cCRDWmFsXzE3S0hofDJqcjs4bmxJbENSfShe
XlNnUHU8aFZYO1c4YyhHJiZUODhgJn4+ITxmMAp6eSFSSigtaWxwVjdvTmFvS1JBVCtDNzdheUQr
UnhRKiM9RiVed2dwNjdNb1NwUVo0TERXbDQpUSNpaHByQSFDP1IKeihgeE5uPEMwRz5iaEc3ZGk1
OzRlMlR1N2dZXjdVRldYb1d3Mz17MTJ6QGp+JU5hVFV5UC1URGBedlozQUFLNztFCnpeUDliSjRo
Xz5AcSM/KDRMekNaQF8xUDxVJHZublB4Y1V9ZU9SZDglTEBQNWZOeXJLcmdxVCZIaVZuT3VxT2E2
Ygp6JmZAaXl3JXtaKT1TZ34yPCpwYUMjQlNJcDZwOTs0alQocF5LWVFUUlhGdDY2VmpjUiRaI2pm
KkM/O349eDVkel4KenZSbTUqZ0RiZ2taNnQlRUN8Oy0lPG5SVFhDMVVzNElwdjFhVHY+SzBiS0Bj
O2p1SzB1JXBqK3Q8SjVsYjNYaGpnCnorQy1OKXZ5IyomNWJkfThlRGBCTmRKMFAtemk/K0NKeHNv
WEQ4QWw4ckJjfjdyYTQ4WkJ1a0xrYUojbHVobiNuPwp6ZUk9cy1Uc2hgKlU1YHBMMllZY248bitv
IXF9TWhYci1PbXRPI3ZCNTt3YWxzKlN4Zz8jbzE/eV5EZjB5MCs2I3UKemNmOWV6emtVQTxSIS1D
ZnxCSWR1MUxSLWtQLShOaDFkMmwmI2FGJHxoe0xiK2R6Y00mV2R6LUpLMXN3ZmpwdT03CnokJmY2
TjlWfUFMdXU4JkZjSUxWZEFLKEFSQ0k7b3QwP2chUWlHMVR6enolKEB4TFdFc003Kz19Un5xfUsy
JCFAMAp6JHk1IVpAUzB+fHlaXnZEWntDRyV6MypoQHNgYj9sPjFHJnk0TEtuTXVuM1BacmkrVEhA
an1xZj51cTNIVGpwd04KenR0ZlBTejAqbFRZaXx1ck1qZkJTRFd2JEYxVTJsMEYhPUR7Y1ZGMXst
bTkyaHNab0dRSj4hdDFXbGZ2ZzgwdUN3Cno8YGpfbER9QiNBKmRXYXUlTlE9bzFpbEI9THZwMlQp
V0laWm51O2EzREs2YiFpVWthLXc8U3NpUjNkJDUoZ1hFOAp6P1lRUWg0XnVjWFlGJXtUcTA0U1Fe
WDV5SlU/RzA+NG9wVD5qeSgyN0lGO0N5Kn0jLW92XyY+dUxQd008NFRmcX0Kekh4ZC1ZcUtZVCNC
KWpzSnotWU9ZMSFWNUxmZVFyeE44aTVjd3AkKiQ1JEdsN3RPPnF+Zm5gJDJofXdiWGlCU3hhCnp7
S0sjJCNwXmpHQnx+byVjSSh3OWhRISt1d3U4ZUl5T05Ae2BRVnFMRHtIOGtJYHApNUpAJWBJYzNn
SG5YNyQzewp6azcyWWEkU2UyI2sweiZGdlBfOTNnUkdNMGlrWFRKQ2VrVGk3Qy02V0xsaT09NVM2
czB0fkF+ViYzUl9qSUV6dDIKenAmMmMkY0V2M3VyNGUxTFRtRWg5JVI1ZUVgUHVoOGNjQmQpOVV8
NGtjdXRxdTd9fUpieWZ6cXdIZVA2OGFlSkxICnpQK0spNURUJV5yMV9kQks+JlllTTF4Y0F2JCZn
bFZeRV9mcjQ1d3ZacGVfPXhia0tfWSp7PEpTX3hWTG5MNCNuKwp6OHRZNEIle3ImP1NHM0lPQ2Re
WnlXNl9uQWpEc2RHOD08bmIxWTtHU3IlbzUjSHB3SGtkZComMUdgXkEqY3pyKjQKenFWRWRYKVJi
QnJXbEo8O1RMOTA4UGpkSStQbVoyPkAhPW19RHxPeCVHNVFlJkEpV3tRMkxhRlJfR3YzZmwrRE5F
Cno2NihhcjhsZnhkIzshYVlGNjVVPDN1dlFkM2FPQWI1THd+S3MmUVJuZzh0TVVgeVNiUyV7YHhD
e0R9ajxgNypqZwp6SW1qZE55SCZYaG1XYHlTUlZHZDJvfnE0QVBLPX5vODVFNiVgbihFUntQNyEp
SmIzaXUzKDw1R3RaMntOcUZNaCYKejZfWjBLQS1NTklgOX4+PU5CVUhJRzMtZzJKY0BweDZtdDw0
aWlVPTc/P31tdVAtMnVGM008Wlh5VFF6bSQ9MDVpCnpDTU5YMzYpa0YybihjNkk/MClDZkM7I309
Y2hEZ0VIcnUkRnYhREFDUjNFfCMtcWtScllsO3J8MTspeTxOPzZObgp6TyoxdH5TNTxkWClVbWpv
JHxPejZFU3NaRGZVOWtsQXxfIVZkKnI4MkFPR20jISs+ZiVYWUcmTDZLSzw+ZnZ+bmgKemRmPHt0
QnJ8R0hFJWNMT1Ikb0hZQChNfnVLYEsofnQ2NnJ0Qk52SS1kV3tAfDlBcExFb0tEQ3xZJkh5ZXJP
TyNaCnpIWWs7MXplM2FEVGxCSnBYPWR7IU5vWj81XiEjNzt5PypoRCZDJX16RlNnTVNOPTQjQ1hx
bDwkQGRSejlWJDlgUwp6RE17SXEpaHZ4eChWKHpxPU9Lb3FXZiVGJTxBaldiKC0jVkNIemM3USE/
SUlKR1F6SHdhTFRqXjs3MkBnQHlTb2AKenppIWlIQGJtTEEoVEZOP2BYSFFleH13cjN6QF5MJTIz
fU8+SHNnaHxZPnxtcmBTdTEkKDRZN19fPl91R2FkOCZ7CnoxQWk1ZzZOeE51LWpVI1BqQjVKQ0d+
NGp7QjlwREJwWm9vYm13b2E+KUcqP2x3ZzBZUURpVks+VClaN1pSLUZ6PQp6QjhzWlVZPm80KGMj
MlU+NjlJYXlKckM2SXJCMiN2QWBme1JiN3htKVlBdUZ0QWlTRXtPM3pGbXBTQn5weHtMXzQKej5E
JXt6XjVSe09aJklHX3hmO3tvSX02I2Y3MSgpNk16ME9IWUh7Q3swYXchK2tFK1dYTkF8b0BvR0Aw
JkdAVntMCnprUmU1U3Q+ey0hYDsrQzZGLXF7VzYrT0xmaU51JTA3M2hSJl5DU2A1ejZkUWxOcXQp
e0V5fXowNWZVQkxIPjRhJAp6eUxYKj4+JDRqIWRUXjcoYEdnaVROaVpVcm95WE5Wek9vZFBjTG8p
e2tYNz8rKmgzUGR0aW1ldlU4U2IxR0V9LU4Kek8wfHpkRD1oe194LXtvJm42ITlNNFpaVHlVJXF0
M1cxa0dyUGMtdj91c0lQdmUwdXtGbjRyWmM/Klh2QUpJb3RBCnp7SGY5REhYRj9aN2pISlBPLWY+
O1FEaGpnUW12aihDNTI2Vi0lc3deYkhseFYhVSZlanVQKUlUYDM3PmZAO2N+Ngp6M2UxU2VTXiM8
e0k3dj9rRE8xdn5XM3ZeX0xOZHsodXhsKHFKc31SemFXalAyQCZsOVFfYWBwNztmRShMSztQJH4K
enpkTVg+NkZtfXNxcGkmbSt7cz83aVF1ezhASGt2PUd0QUslKFdrMDI2JHVjU1FrUDslQ098bHpJ
Q2omJStuKUcqCnpRKnY8bD9icCElUGVnQTBjUi15bilxJCMwSj9HZ3UmNTM8I0d2VURES0MrYX5N
cVM8X3ZCN1g7Nyo/bWQpUEAkUAp6enpScCs0Y353TF5xLUR5TSZgWm1WdW47TDxlelZjZWd1cy1W
dkAzPm9QWk1UI2FQU1dsNE91K3tJaHxxRTs2fDQKekVsUDF8dFFXTjhHVEwhXkBiVDlre1B8VXdU
Z2AoWENlWEpMQWReRXlGZX5ZYWIlNUc3ZGRFU3o3fmhxLTAlRDhRCnomclZjZXtJSEM+QSNxdW1M
cHtNTHZKcV85PkVYUHFwJTRvaTlBaHlTU3ImdWxwJmdsfTNDPihodVdyXkNUMHVJXwp6PG5pSUV4
XztsYVByU1lObmF6OXReUzd8JDNvX2IkJnVEVX5MfjVvS0BkOzR4KVl6ajhqKjttTjBBRkxhaipN
fVcKekQ5b0VXPG1OXzYhKURmdG53aUN5di0ybl5iSklyQCVMMnhCODBrYGw/SlN9YzchQWRXQVcz
IUxPbGg4d0oqcUokCnpWcVFRblJZNVpTbWsqQTtAWkw/RWpvLVomVj5zWHohdjYtKVZWVUp7bzZH
XkdlflBUSmFHTCVWKktFKTh0YzhrfAp6ZiQqJDBBKmxrKj87eXhrKzJmRypZYF5AOV93UEcmNDg2
THl0aUFSVyUpcX41MyEpTUExIVZ0NEtyUUJ7Vy1NLT0Kek9WTWBXbiRZPEJrYDk+aEczb1o4TDh1
Ni0oQ1A1bD5yQGhUdjhvfkJUQzdHeEsqdDxBXjQ1UjZAfjtuSV8wUDdpCnpXWUx2aUJFKzJybT9h
ZnJBPmF5bWBkKkBOT3JEd1gpQGZyKjN7LXJ4aCo0PjVTIzM/VFE4TlBAd0B5SyhIQTJ6dwp6e0xp
MHg/eV9oOWZTTik7SzUqZ3I9JF9GZFdsMnQoT0tHTjdEfkkxRTEjdmMhQ21YTlEoLUE3Z0FxaTh9
M2IyUHIKellwWmJpOz57OSlZaD1rYTV+NlRFPlhkSFNvNHM2SCpCK1dqSlQyWGg9ZG1qfW4+b3JR
YEt1MGt0ezUwd2A/XmRMCnpMe3AkKC1oSTsqPz8zdEhjUTlSaCNyPUVHS1liU1JHYDxQN3MzOSo5
bm5VZU1pd3ZBcDklV0R4cXolJU1oXmBHNwp6Qk01PSs8dTx1dyorOStCYWlkS1NwJXJDdFEjNU9H
eCM2Ynd4JmokfF9NZElMYmxkaEBfcnY2SiVObjNfd2Q8QiEKekcwTFJ8cTB8OWJ0akZQIW9xO0Qh
KTBtXmBMZTEkaTtBbHt9Z2c2QXAwe1poXnAxJjJMYCstKXA3XyNZfUFscTY/CnorR21uRVM3bXAj
PzB5bF4yZk89QDdrfkchX3dQS2hpVDBtPFZBWmJ3KDtMezN7eWdNPEZSSDtYNEt7ZWVOIVhjawp6
c3pZZ3VWS2ZiO2xxdTQoWUFTYypBIT0xQnZTYkd3dlBFMiZ4QWY+fWRqRXwtZjhvVXNwUn1PdzlF
I3c8PT1Zb2QKemcwOEl4KzVSO0UqKkhhI1ZTWDRRKSpGPUJENGVDfVdPLU1tJiN7SEY7c2p6N059
UTh1MihRVzJIQjVQb1RPfmA9Cno8Yi1tUj18d0B6MGlUKGcwMn02QkU/OHMmbT90OThkXkAlMHFG
WD11YyY4UXBZclgyX24pUlZgMUMyYGBsRV9hWAp6OD1PWlFWQC17TV45WXcycmx+bEBYX09SJmUt
JG1QZTQ/ZS1BMjgrP3dOUz5GMUg0OXUqaGg9b0pORiZqXlVeKGUKekc/S3BlOGZFfkxLLTVZPUdt
Qj40UHxoOXwzTi1RI1ZVPTtIdChLYCkxTj4qemZGMGBhT0RnJDFPbGFWTWtMd29MCnokK0lMYzhh
QmI0XlAweVZ6NUNAJHd8JDBmbyRwQGAhZ2BoUyVqZ0lCSWBYP2NhSCFLUT1EPGMkJE15dilMXntC
bQp6YHtqOG4jLVp6RmlANitiZ25yUyt1KjZveTB2bip0JDQ8UVolUk1Kd3t8Sms3anNAJFJvUUQq
RDRiM3dGZy0yYnUKek1PSmc1c3Y7Pn04SCQhQT5ae1VmVEMtMShXYGcxZjJOfjd7P0UhTmAqVm9k
NklUO0MzKUhgMD56VVMhOWhyIyMoCnpSREtuOT9mUk1mRnApTVl2VlBXJEZlNWhpbVlrUz9tdE9A
N0xuUGVxZG43ZDV5dU1oO2NAO3N0V21rNXotbXgmRgp6b0cyMjVua2h4amEwTEskSkB3UldUUiha
X0hWQS1vKjhYeGNYNWBwR3U3NEpRZ35acmtITCU7M2JTfGgkc3d3a3kKellzT2BSM1YkcmxwYkBP
YEEkN0pLUEw4fkE/VD5ke0AkNm5gei0oRTJkflpeLWUjRFAwWCM7dCtiVCoqclJzS1J8Cno3QXdi
dks2OHsqMkJrPW9UJSgoMWdGLSFCITwlanA9cVlGdjlyP3JRaHUqJjd1YjhjYVUmUT19NDlMLStM
TlozZwp6OEM8UF9TV09UdjFscVJHJigoRSEmWH50JG1yKUZFXkhBdkg2YD8heHtPKzU3YVF3fjdI
ZFNIdmV3SVhvPmhGPUsKenBMSWFuUCY/RU5iYzxOUjgrTG89STVOcFFBJTxHclIjSF8tYkxwfihO
PVJ5bDZtYn5wS1hjX2h6ZDUjVCRFSVkrCnptSFZqWkx1NSNKMigpfGRYaz9jOTdAMERANjwjPjAq
K0BqfkBKVXlFKXJqazwzXzlWRjVqUUgxZD5vUl42TE50OQp6RkM2QUM5PSFVI3Q4YWY4VGxfeWlr
MndvYDBsQ3UjLS1PTnF1ZDh1XnRfQTd6OSM1OHZJKGhSOW5RTmh5P0Q8cnkKempfMzdzd3clTVYj
NmZfK3tebXQ1b3cpdFNERWVzMm4jSytTUW4kVlFEakpWXjxvWSZmVnJXZ2BnP3BxPD5LdjteCnp5
WChmPUo7NylSKkp7dCVXZDV3KkdjM1hra35eYXQ8byYqKFo1UilEUikoeSFUfV82fWN6dVY3VmRE
U3o8YlJ5Sgp6PDJqNTlkSGhkczBfQCg4RmBhTS1HWWtMfnkyREBMcnVyaCsjNnRHX0dJS0FWIUVR
S1Jed2YkSj9VMkFjTHRpNnIKeiNDKntpOVBCcn5fdDRJaFhXclY+Iz1HSkk0MjhReT9sSj5naH1Z
RUVeSy1LPT5qMTdib2ZsSVk/RDUhPVM0d3o+CnpES0I1RD9sNXdeQjhOPkslU31UTWpvPTBCLT4z
VWAtfkd5Ty1vKTRpcmY8XkcpaUB0e2AjMy0+bjBWNnlUKiFvIQp6QkhrbGhGZmBePnBEb2c3d0sy
S0c/KiFoM3BBPkJzaWhlZFU8QHUwVjlsZChudUZIUmtVZz14YlVnNn1tPihrIT8KeiRfNW9BJV5y
Yk1obSF7Y2lFbkFwa198P2txTHtJfDc5Njg4bVU1UXJOfVpRZDIhWFM9ZH5VfjRCJVlMIVF3UGhB
CnokTSM/SyFWak1LM2M2KShgOzclJTRGKGM0bjRyUmBqZjAjbC1QdCEzdlZfKE9YKGFMcz5qcjV+
VzdrM1lkUm5DOAp6TzNGR3UpSnJ2SlJIYUZuTmYtMjd5P0NySDB6QyF4X3dKanZ7X14qSyNAR29U
SiZIcjBgJVI+SUV8YG18dGpqMiMKem4oeCNvWkZTdFIkbUZMQ01RQzAlX0dxP1hDbTMzSTZUWHpI
Q1d5e0BBLVo/MG8+bWxQTzA2R0BDMVpzTnokfWpjCnpffGVuOWY4ZkgreCV2O3A3b2ZHeUk/X280
Sj8jOG1XNyR5fiQwWip5a2toP2MpbTBCUUpjMHklSmJDbnpnQlJaUQp6dDZmKEJJJmFIYl9YM2BG
e1NReFhNPXdrcTs+fCFsTm87aHJGQCZMXjFDfiFDM3l5P35RaWExYUlCY3NsWiF1QTIKenlZMmB+
blhpMHA+KDFYRWBDYkY8IzJxO0hlZjljSmJsY1B6eHZQZDh4YUA3ZkVQfkE5b0lqeTVAfSNNWFVJ
Qn1iCnoqa1k+WnZQSHtRaENwR0J7TnIzNVUqQmshWGtDJTQ2ZzBKSGNKNzhgTkVacTFPVENOKXFR
ZSVHZDJXbF9WUCY+bQp6X21sVmpeVXoqUWI/UiZITSR0dnFBbSFzdzRGdntIbzEtJkwlcEVGMUVZ
ajR3b0d3eGAkPCo7eXk+enBmVVhmeVEKel4mJkt+R09WI0lMdGl0KzwjU0VCa3heRyF2Vz13ek5G
Yl5PUFZGJmBMeklieVU9dWZtRTsyZipLbTdSSypBTTsoCno8SG8wWWQoYWo4NHglUH03bF5PcFMp
aUBqdShoTWNWYmZIakYjNG9Rd3g+fFF6K2RWUyR5XlJ7ZnZUU2U7YEFpRgp6a0A4dD5hNjRyUjto
K2kwMnFzPE9CbzMrUXNUK0A5QH40bEZWJk5kWTZCfDtjaztublN1e3Z7a2pARmhVUmJCQ3gKejh7
ZWlXQklUWX1YVXxtUEFQP3dyUj48aX1LM0NIek4xaG11M2AlM2h3eXc7TU47R24hc2dTQVlsKD1y
Q0MxYVoxCnpRcyozb2VPc1VUX0BZRDQtRkd6c2pwc01OaV9IJU5OYV9rUHtFQ3NrJDFXdENIb0hB
I055SXJeSENHc21OMkhGOQp6Q3pCTE1AenhkMGJ6Ql4hTH1fa2lpbksoaCp8RXtCXiQ9TFZEbi0r
XzVSVWVQKlNgUEN3YTtGPFNeVkMkRi01PFQKejI+RGliRkRrUz8lNXdTKHdXdCEjU05nNCVrdnFa
KDdXTnNiTV5TREZtUXJgZHpaIURvVnV3bz8lSUUhQiNebGpNCnpDdHJUfmlJNFhENGY/OEljXl5C
YyFVJFVkeE9LOHIjSVZraiUwe00zc0EpdTBhMzIjNnYleH41RlYqUXZKY21KNQp6bHNhdXR7ezhO
IW1tWW9SVkg4YiUmZX5OY3UkSG5CY34zOXtZS09JdyZ7UiFzJDVLSSEqSUhTKCtuLW0/JFgtanoK
ejY8eCV+dlE9Zyp1aENWRVVJeiNWY1UtPnBgZzsjPUolVC1fZD9BKkVhZ2FDcFN+IXpecXRJZHNg
VF8pbE9xNXBFCnplSnUpc0h0aHo3Q2NkcD5DIyZQYyhMNCo4cXApZnBqUW9SU2xkN2RhWSYyNShS
SjVFaCFsezRnamMwZWlgai08fQp6bFp6RXJwcXRLelhiP2Q3PUVfPCtvbGtBNHo0TjVlNk16Skhu
SjhCbllIZ1YkNHFGbkYtWFB6MUZDX2dLYWp3a2YKejYqTGgobVJrVi01Z31Bez8yZEhRQ3N5NkhH
XyY0ZzVjMmhBSm5vI35MLW9uYnV+TGVpZjxkV1ZDcXdPYSQoISN5CnpeTlVeMiFCcHYtd0pvUXhk
MzZ5bntzXnJfMUF8N3BYWFlvYDdFWGBmJk07OylqbUs/SU1WQUtvc0FRUkVHS2UjPwp6cSlgRkJX
UU9oVyNDODkoXzRlMWtqNlA+Q2opNEEqemQ/eGFlLS1rZEY9TShCaW1NdDd2OVJOMSRwPzEzT1ct
JSkKenohRldLWklQbSZNNW45UXJ4dm9ZNEZaPnZAWW9NPG9sfkQpZC1zOFQyV0lIdy1kZS1qaCEq
NUZSR2RYZjJyLShgCnpwZ3o4JkIjfVhgPUFebGF3cXx3KHw2KyZNRU55e2YqSnwwTno2JTxtc3dQ
WHtYSGo1ZWUmNU41dWZGUG9sandjRgp6VyRqRylvNyhqZ1p+Wk1BcEp5U3o+Zk1QZFdkQHhLMjV3
YHZORmsqJHUxMDZgXjVrfXxCJDlfakc7UTN9Vj4/N0YKenBSdHJ6MFQ8aklwUipKKHQ8Xmc3XnFO
cjVBOWBael9GY0RjIXw/R3B7ND56WT8+UElGIT1GNjxyRHhCNmA7SkY2Clp8TWtWWTl7Y0ZkYjF3
TlpgYEVjPm9qVWpJe3w3NjwoT2R1awoKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9nb29nbGVfc2l6
ZS5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvYmVuY2htYXJrcy9nb29nbGVfc2l6ZS5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDJkMzE5ZjMxYzEwMDc0OTQ1ZGMzNmQxY2YzMTMyMmJlYzNjODA4Yi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2JlbmNobWFya3MvZ29v
Z2xlX3NpemUucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotc3ludGF4ID0g
InByb3RvMiI7Ci0KLXBhY2thZ2UgYmVuY2htYXJrczsKLQotb3B0aW9uIGphdmFfb3V0ZXJfY2xh
c3NuYW1lID0gIkdvb2dsZVNpemUiOwotb3B0aW9uIG9wdGltaXplX2ZvciA9IENPREVfU0laRTsK
LQotbWVzc2FnZSBTaXplTWVzc2FnZTEgewotICByZXF1aXJlZCBzdHJpbmcgZmllbGQxID0gMTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGZpZWxkOSA9IDk7Ci0gIG9wdGlvbmFsIHN0cmluZyBmaWVsZDE4
ID0gMTg7Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQ4MCA9IDgwIFtkZWZhdWx0PWZhbHNlXTsKLSAg
b3B0aW9uYWwgYm9vbCBmaWVsZDgxID0gODEgW2RlZmF1bHQ9dHJ1ZV07Ci0gIHJlcXVpcmVkIGlu
dDMyIGZpZWxkMiA9IDI7Ci0gIHJlcXVpcmVkIGludDMyIGZpZWxkMyA9IDM7Ci0gIG9wdGlvbmFs
IGludDMyIGZpZWxkMjgwID0gMjgwOwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDYgPSA2IFtkZWZh
dWx0PTBdOwotICBvcHRpb25hbCBpbnQ2NCBmaWVsZDIyID0gMjI7Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBmaWVsZDQgPSA0OwotICByZXBlYXRlZCBmaXhlZDY0IGZpZWxkNSA9IDU7Ci0gIG9wdGlvbmFs
IGJvb2wgZmllbGQ1OSA9IDU5IFtkZWZhdWx0PWZhbHNlXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGZp
ZWxkNyA9IDc7Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMTYgPSAxNjsKLSAgb3B0aW9uYWwgaW50
MzIgZmllbGQxMzAgPSAxMzAgW2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQxMiA9
IDEyIFtkZWZhdWx0PXRydWVdOwotICBvcHRpb25hbCBib29sIGZpZWxkMTcgPSAxNyBbZGVmYXVs
dD10cnVlXTsKLSAgb3B0aW9uYWwgYm9vbCBmaWVsZDEzID0gMTMgW2RlZmF1bHQ9dHJ1ZV07Ci0g
IG9wdGlvbmFsIGJvb2wgZmllbGQxNCA9IDE0IFtkZWZhdWx0PXRydWVdOwotICBvcHRpb25hbCBp
bnQzMiBmaWVsZDEwNCA9IDEwNCBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQx
MDAgPSAxMDAgW2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMTAxID0gMTAxIFtk
ZWZhdWx0PTBdOwotICBvcHRpb25hbCBzdHJpbmcgZmllbGQxMDIgPSAxMDI7Ci0gIG9wdGlvbmFs
IHN0cmluZyBmaWVsZDEwMyA9IDEwMzsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQyOSA9IDI5IFtk
ZWZhdWx0PTBdOwotICBvcHRpb25hbCBib29sIGZpZWxkMzAgPSAzMCBbZGVmYXVsdD1mYWxzZV07
Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkNjAgPSA2MCBbZGVmYXVsdD0tMV07Ci0gIG9wdGlvbmFs
IGludDMyIGZpZWxkMjcxID0gMjcxIFtkZWZhdWx0PS0xXTsKLSAgb3B0aW9uYWwgaW50MzIgZmll
bGQyNzIgPSAyNzIgW2RlZmF1bHQ9LTFdOwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDE1MCA9IDE1
MDsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQyMyA9IDIzIFtkZWZhdWx0PTBdOwotICBvcHRpb25h
bCBib29sIGZpZWxkMjQgPSAyNCBbZGVmYXVsdD1mYWxzZV07Ci0gIG9wdGlvbmFsIGludDMyIGZp
ZWxkMjUgPSAyNSBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgU2l6ZU1lc3NhZ2UxU3ViTWVzc2Fn
ZSBmaWVsZDE1ID0gMTU7Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQ3OCA9IDc4OwotICBvcHRpb25h
bCBpbnQzMiBmaWVsZDY3ID0gNjcgW2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxk
NjggPSA2ODsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQxMjggPSAxMjggW2RlZmF1bHQ9MF07Ci0g
IG9wdGlvbmFsIHN0cmluZyBmaWVsZDEyOSA9IDEyOSBbZGVmYXVsdD0ieHh4eHh4eHh4eHh4eHh4
eHh4eHh4Il07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMTMxID0gMTMxIFtkZWZhdWx0PTBdOwot
fQotCi1tZXNzYWdlIFNpemVNZXNzYWdlMVN1Yk1lc3NhZ2UgewotICBvcHRpb25hbCBpbnQzMiBm
aWVsZDEgPSAxIFtkZWZhdWx0PTBdOwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDIgPSAyIFtkZWZh
dWx0PTBdOwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDMgPSAzIFtkZWZhdWx0PTBdOwotICBvcHRp
b25hbCBzdHJpbmcgZmllbGQxNSA9IDE1OwotICBvcHRpb25hbCBib29sIGZpZWxkMTIgPSAxMiBb
ZGVmYXVsdD10cnVlXTsKLSAgb3B0aW9uYWwgaW50NjQgZmllbGQxMyA9IDEzOwotICBvcHRpb25h
bCBpbnQ2NCBmaWVsZDE0ID0gMTQ7Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMTYgPSAxNjsKLSAg
b3B0aW9uYWwgaW50MzIgZmllbGQxOSA9IDE5IFtkZWZhdWx0PTJdOwotICBvcHRpb25hbCBib29s
IGZpZWxkMjAgID0gMjAgW2RlZmF1bHQ9dHJ1ZV07Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQyOCA9
IDI4IFtkZWZhdWx0PXRydWVdOwotICBvcHRpb25hbCBmaXhlZDY0IGZpZWxkMjEgPSAyMTsKLSAg
b3B0aW9uYWwgaW50MzIgZmllbGQyMiA9IDIyOwotICBvcHRpb25hbCBib29sIGZpZWxkMjMgPSAy
MyBbIGRlZmF1bHQ9ZmFsc2UgXTsKLSAgb3B0aW9uYWwgYm9vbCBmaWVsZDIwNiA9IDIwNiBbZGVm
YXVsdD1mYWxzZV07Ci0gIG9wdGlvbmFsIGZpeGVkMzIgZmllbGQyMDMgPSAyMDM7Ci0gIG9wdGlv
bmFsIGludDMyIGZpZWxkMjA0ID0gMjA0OwotICBvcHRpb25hbCBzdHJpbmcgZmllbGQyMDUgPSAy
MDU7Ci0gIG9wdGlvbmFsIHVpbnQ2NCBmaWVsZDIwNyA9IDIwNzsKLSAgb3B0aW9uYWwgdWludDY0
IGZpZWxkMzAwID0gMzAwOwotfQotCi1tZXNzYWdlIFNpemVNZXNzYWdlMiB7Ci0gIG9wdGlvbmFs
IHN0cmluZyBmaWVsZDEgPSAxOwotICBvcHRpb25hbCBpbnQ2NCBmaWVsZDMgPSAzOwotICBvcHRp
b25hbCBpbnQ2NCBmaWVsZDQgPSA0OwotICBvcHRpb25hbCBpbnQ2NCBmaWVsZDMwID0gMzA7Ci0g
IG9wdGlvbmFsIGJvb2wgZmllbGQ3NSAgPSA3NSBbZGVmYXVsdD1mYWxzZV07Ci0gIG9wdGlvbmFs
IHN0cmluZyBmaWVsZDYgPSA2OwotICBvcHRpb25hbCBieXRlcyBmaWVsZDIgPSAyOwotICBvcHRp
b25hbCBpbnQzMiBmaWVsZDIxID0gMjEgW2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGludDMyIGZp
ZWxkNzEgPSA3MTsKLSAgb3B0aW9uYWwgZmxvYXQgZmllbGQyNSA9IDI1OwotICBvcHRpb25hbCBp
bnQzMiBmaWVsZDEwOSA9IDEwOSBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQy
MTAgPSAyMTAgW2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMjExID0gMjExIFtk
ZWZhdWx0PTBdOwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDIxMiA9IDIxMiBbZGVmYXVsdD0wXTsK
LSAgb3B0aW9uYWwgaW50MzIgZmllbGQyMTMgPSAyMTMgW2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFs
IGludDMyIGZpZWxkMjE2ID0gMjE2IFtkZWZhdWx0PTBdOwotICBvcHRpb25hbCBpbnQzMiBmaWVs
ZDIxNyA9IDIxNyBbZGVmYXVsdD0wXTsKLSAgb3B0aW9uYWwgaW50MzIgZmllbGQyMTggPSAyMTgg
W2RlZmF1bHQ9MF07Ci0gIG9wdGlvbmFsIGludDMyIGZpZWxkMjIwID0gMjIwIFtkZWZhdWx0PTBd
OwotICBvcHRpb25hbCBpbnQzMiBmaWVsZDIyMSA9IDIyMSBbZGVmYXVsdD0wXTsKLSAgb3B0aW9u
YWwgZmxvYXQgZmllbGQyMjIgPSAyMjIgW2RlZmF1bHQ9MC4wXTsKLSAgb3B0aW9uYWwgaW50MzIg
ZmllbGQ2MyA9IDYzOwotCi0gIHJlcGVhdGVkIGdyb3VwIEdyb3VwMSA9IDEwIHsKLSAgICByZXF1
aXJlZCBmbG9hdCBmaWVsZDExID0gMTE7Ci0gICAgb3B0aW9uYWwgZmxvYXQgZmllbGQyNiA9IDI2
OwotICAgIG9wdGlvbmFsIHN0cmluZyBmaWVsZDEyID0gMTI7Ci0gICAgb3B0aW9uYWwgc3RyaW5n
IGZpZWxkMTMgPSAxMzsKLSAgICByZXBlYXRlZCBzdHJpbmcgZmllbGQxNCA9IDE0OwotICAgIHJl
cXVpcmVkIHVpbnQ2NCBmaWVsZDE1ID0gMTU7Ci0gICAgb3B0aW9uYWwgaW50MzIgZmllbGQ1ID0g
NTsKLSAgICBvcHRpb25hbCBzdHJpbmcgZmllbGQyNyA9IDI3OwotICAgIG9wdGlvbmFsIGludDMy
IGZpZWxkMjggPSAyODsKLSAgICBvcHRpb25hbCBzdHJpbmcgZmllbGQyOSA9IDI5OwotICAgIG9w
dGlvbmFsIHN0cmluZyBmaWVsZDE2ID0gMTY7Ci0gICAgcmVwZWF0ZWQgc3RyaW5nIGZpZWxkMjIg
PSAyMjsKLSAgICByZXBlYXRlZCBpbnQzMiBmaWVsZDczID0gNzM7Ci0gICAgb3B0aW9uYWwgaW50
MzIgZmllbGQyMCA9IDIwIFtkZWZhdWx0PTBdOwotICAgIG9wdGlvbmFsIHN0cmluZyBmaWVsZDI0
ID0gMjQ7Ci0gICAgb3B0aW9uYWwgU2l6ZU1lc3NhZ2UyR3JvdXBlZE1lc3NhZ2UgZmllbGQzMSA9
IDMxOwotICB9Ci0gIHJlcGVhdGVkIHN0cmluZyBmaWVsZDEyOCA9IDEyODsKLSAgb3B0aW9uYWwg
aW50NjQgZmllbGQxMzEgPSAxMzE7Ci0gIHJlcGVhdGVkIHN0cmluZyBmaWVsZDEyNyA9IDEyNzsK
LSAgb3B0aW9uYWwgaW50MzIgZmllbGQxMjkgPSAxMjk7Ci0gIHJlcGVhdGVkIGludDY0IGZpZWxk
MTMwID0gMTMwOwotICBvcHRpb25hbCBib29sIGZpZWxkMjA1ID0gMjA1IFtkZWZhdWx0PWZhbHNl
XTsKLSAgb3B0aW9uYWwgYm9vbCBmaWVsZDIwNiA9IDIwNiBbZGVmYXVsdD1mYWxzZV07Ci19Ci0K
LW1lc3NhZ2UgU2l6ZU1lc3NhZ2UyR3JvdXBlZE1lc3NhZ2UgewotICBvcHRpb25hbCBmbG9hdCBm
aWVsZDEgPSAxOwotICBvcHRpb25hbCBmbG9hdCBmaWVsZDIgPSAyOwotICBvcHRpb25hbCBmbG9h
dCBmaWVsZDMgPSAzIFtkZWZhdWx0PTAuMF07Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQ0ID0gNDsK
LSAgb3B0aW9uYWwgYm9vbCBmaWVsZDUgPSA1OwotICBvcHRpb25hbCBib29sIGZpZWxkNiA9IDYg
W2RlZmF1bHQ9dHJ1ZV07Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQ3ID0gNyBbZGVmYXVsdD1mYWxz
ZV07Ci0gIG9wdGlvbmFsIGZsb2F0IGZpZWxkOCA9IDg7Ci0gIG9wdGlvbmFsIGJvb2wgZmllbGQ5
ID0gOTsKLSAgb3B0aW9uYWwgZmxvYXQgZmllbGQxMCA9IDEwOwotICBvcHRpb25hbCBpbnQ2NCBm
aWVsZDExID0gMTE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2JlbmNobWFya3MvcmVhZG1lLnR4dCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2ht
YXJrcy9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzgzNmQwYTFj
ZmIyZDZhZGFmMTllN2RlYzM2OWNkNzQ5YzUzODQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvYmVuY2htYXJrcy9yZWFkbWUudHh0CisrKyAvZGV2L251bGwK
QEAgLTEsNTAgKzAsMCBAQAotQ29udGVudHMKLS0tLS0tLS0tCi0KLVRoaXMgZm9sZGVyIGNvbnRh
aW5zIHRocmVlIGtpbmRzIG9mIGZpbGU6Ci0KLS0gQ29kZSwgc3VjaCBhcyBQcm90b0JlbmNoLmph
dmEsIHRvIGJ1aWxkIHRoZSBiZW5jaG1hcmtpbmcgZnJhbWV3b3JrLgotLSBQcm90b2NvbCBidWZm
ZXIgZGVmaW5pdGlvbnMgKC5wcm90byBmaWxlcykKLS0gU2FtcGxlIGRhdGEgZmlsZXMKLQotSWYg
d2UgZW5kIHVwIHdpdGggYSBsb3Qgb2YgZGlmZmVyZW50IGJlbmNobWFya3MgaXQgbWF5IGJlIHdv
cnRoCi1zZXBhcmF0aW5nIHRoZXNlIG91dCBpbmZvIGRpZmZlcmVudCBkaXJlY3RvcmllcywgYnV0
IHdoaWxlIHRoZXJlIGFyZQotc28gZmV3IHRoZXkgbWlnaHQgYXMgd2VsbCBhbGwgYmUgdG9nZXRo
ZXIuCi0KLVJ1bm5pbmcgYSBiZW5jaG1hcmsgKEphdmEpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0xKSBCdWlsZCBwcm90b2MgYW5kIHRoZSBKYXZhIHByb3RvY29sIGJ1ZmZlciBsaWJy
YXJ5LiBUaGUgZXhhbXBsZXMKLSAgIGJlbG93IGFzc3VtZSBhIGphciBmaWxlIChwcm90b2J1Zi5q
YXIpIGhhcyBiZWVuIGJ1aWx0IGFuZCBjb3BpZWQKLSAgIGludG8gdGhpcyBkaXJlY3RvcnkuCi0K
LTIpIEJ1aWxkIFByb3RvQmVuY2g6Ci0gICAkIGphdmFjIC1kIHRtcCAtY3AgcHJvdG9idWYuamFy
IFByb3RvQmVuY2guamF2YQotICAgCi0zKSBHZW5lcmF0ZSBjb2RlIGZvciB0aGUgcmVsZXZhbnQg
YmVuY2htYXJrIHByb3RvY29sIGJ1ZmZlciwgZS5nLgotICAgJCBwcm90b2MgLS1qYXZhX291dD10
bXAgZ29vZ2xlX3NpemUucHJvdG8gZ29vZ2xlX3NwZWVkLnByb3RvCi0gICAKLTQpIEJ1aWxkIHRo
ZSBnZW5lcmF0ZWQgY29kZSwgZS5nLgotICAgJCBjZCB0bXAKLSAgICQgamF2YWMgLWQgLiAtY3Ag
Li4vcHJvdG9idWYuamFyIGJlbmNobWFya3MvKi5qYXZhCi0gICAgICAgICAgIAotNSkgUnVuIHRo
ZSB0ZXN0LiBBcmd1bWVudHMgYXJlIGdpdmVuIGluIHBhaXJzIC0gdGhlIGZpcnN0IGFyZ3VtZW50
Ci0gICBpcyB0aGUgZGVzY3JpcHRvciB0eXBlOyB0aGUgc2Vjb25kIGlzIHRoZSBmaWxlbmFtZS4g
Rm9yIGV4YW1wbGU6Ci0gICAkIGphdmEgLWNwIC47Li4vcHJvdG9idWYuamFyIGNvbS5nb29nbGUu
cHJvdG9jb2xidWZmZXJzLlByb3RvQmVuY2gKLSAgICAgICAgICBiZW5jaG1hcmtzLkdvb2dsZVNp
emUkU2l6ZU1lc3NhZ2UxIC4uL2dvb2dsZV9tZXNzYWdlMS5kYXQKLSAgICAgICAgICBiZW5jaG1h
cmtzLkdvb2dsZVNwZWVkJFNwZWVkTWVzc2FnZTEgLi4vZ29vZ2xlX21lc3NhZ2UxLmRhdAotICAg
ICAgICAgIGJlbmNobWFya3MuR29vZ2xlU2l6ZSRTaXplTWVzc2FnZTIgLi4vZ29vZ2xlX21lc3Nh
Z2UyLmRhdAotICAgICAgICAgIGJlbmNobWFya3MuR29vZ2xlU3BlZWQkU3BlZWRNZXNzYWdlMiAu
Li9nb29nbGVfbWVzc2FnZTIuZGF0Ci0gICAgICAgICAgCi02KSBXYWl0ISBFYWNoIHRlc3QgcnVu
cyBmb3IgYXJvdW5kIDMwIHNlY29uZHMsIGFuZCB0aGVyZSBhcmUgNiB0ZXN0cwotICAgcGVyIGNs
YXNzL2RhdGEgY29tYmluYXRpb24uIFRoZSBhYm92ZSBjb21tYW5kIHdvdWxkIHRoZXJlZm9yZSB0
YWtlCi0gICBhYm91dCAxMiBtaW51dGVzIHRvIHJ1bi4KLQotICAgCi1CZW5jaG1hcmtzIGF2YWls
YWJsZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRnJvbSBHb29nbGU6Ci1nb29nbGVfc2l6ZS5w
cm90byBhbmQgZ29vZ2xlX3NwZWVkLnByb3RvLCBtZXNzYWdlcwotZ29vZ2xlX21lc3NhZ2UxLmRh
dCBhbmQgZ29vZ2xlX21lc3NhZ2UyLmRhdC4gVGhlIHByb3RvIGZpbGVzIGFyZQotZXF1aXZhbGVu
dCwgYnV0IG9wdGltaXplZCBkaWZmZXJlbnRseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21ha2UvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NtYWtlL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmMzJhMGU0ZTY1ZTUzOGE5MWU0N2NmYTA5OTAwNzIxZTRmMzk1NGM0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21ha2UvQ01ha2VMaXN0cy50eHQKKysr
IC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotIyBNaW5pbXVtIENNYWtlIHJlcXVpcmVkCi1j
bWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44KQotCi0jIFByb2plY3QKLXByb2plY3Qo
cHJvdG9idWYgQyBDWFgpCi0KLSMgQ01ha2UgcG9saWNpZXMKLWNtYWtlX3BvbGljeShTRVQgQ01Q
MDAyMiBORVcpCi0KLSMgT3B0aW9ucwotb3B0aW9uKHByb3RvYnVmX1ZFUkJPU0UgIkVuYWJsZSBm
b3IgdmVyYm9zZSBvdXRwdXQiIE9GRikKLW9wdGlvbihwcm90b2J1Zl9CVUlMRF9URVNUUyAiQnVp
bGQgdGVzdHMiIE9OKQotaWYgKEJVSUxEX1NIQVJFRF9MSUJTKQotICBzZXQocHJvdG9idWZfQlVJ
TERfU0hBUkVEX0xJQlNfREVGQVVMVCBPTikKLWVsc2UgKEJVSUxEX1NIQVJFRF9MSUJTKQotICBz
ZXQocHJvdG9idWZfQlVJTERfU0hBUkVEX0xJQlNfREVGQVVMVCBPRkYpCi1lbmRpZiAoQlVJTERf
U0hBUkVEX0xJQlMpCi1vcHRpb24ocHJvdG9idWZfQlVJTERfU0hBUkVEX0xJQlMgIkJ1aWxkIFNo
YXJlZCBMaWJyYXJpZXMiICR7cHJvdG9idWZfQlVJTERfU0hBUkVEX0xJQlNfREVGQVVMVH0pCi1v
cHRpb24ocHJvdG9idWZfTVNWQ19TVEFUSUNfUlVOVElNRSAiTGluayBzdGF0aWMgcnVudGltZSBs
aWJyYXJpZXMiIE9OKQotaWYgKE1TVkMpCi0gIHNldChwcm90b2J1Zl9XSVRIX1pMSUJfREVGQVVM
VCBPRkYpCi1lbHNlIChNU1ZDKQotICBzZXQocHJvdG9idWZfV0lUSF9aTElCX0RFRkFVTFQgT04p
Ci1lbmRpZiAoTVNWQykKLW9wdGlvbihwcm90b2J1Zl9XSVRIX1pMSUIgIkJ1aWxkIHdpdGggemxp
YiBzdXBwb3J0IiAke3Byb3RvYnVmX1dJVEhfWkxJQl9ERUZBVUxUfSkKLXNldChwcm90b2J1Zl9E
RUJVR19QT1NURklYICJkIgotICBDQUNIRSBTVFJJTkcgIkRlZmF1bHQgZGVidWcgcG9zdGZpeCIp
Ci0KLSMgUGF0aCB0byBtYWluIGNvbmZpZ3VyZSBzY3JpcHQKLXNldChwcm90b2J1Zl9DT05GSUdV
UkVfU0NSSVBUICIuLi9jb25maWd1cmUuYWMiKQotCi0jIFBhcnNlIGNvbmZpZ3VyZSBzY3JpcHQK
LXNldChwcm90b2J1Zl9BQ19JTklUX1JFR0VYCi0gICJeQUNfSU5JVFxcKFxcWyhbXl1dKylcXF0s
XFxbKFteXV0rKVxcXSxcXFsoW15dXSspXFxdLFxcWyhbXl1dKylcXF1cXCkkIikKLWZpbGUoU1RS
SU5HUyAiJHtwcm90b2J1Zl9DT05GSUdVUkVfU0NSSVBUfSIgcHJvdG9idWZfQUNfSU5JVF9MSU5F
Ci0gIExJTUlUX0NPVU5UIDEgUkVHRVggIl5BQ19JTklUIikKLSMgRGVzY3JpcHRpb24KLXN0cmlu
ZyhSRUdFWCBSRVBMQUNFICAgICAgICAiJHtwcm90b2J1Zl9BQ19JTklUX1JFR0VYfSIgIlxcMSIK
LSAgICBwcm90b2J1Zl9ERVNDUklQVElPTiAgICAiJHtwcm90b2J1Zl9BQ19JTklUX0xJTkV9IikK
LSMgVmVyc2lvbgotc3RyaW5nKFJFR0VYIFJFUExBQ0UgICAgICAgICIke3Byb3RvYnVmX0FDX0lO
SVRfUkVHRVh9IiAiXFwyIgotICAgIHByb3RvYnVmX1ZFUlNJT05fU1RSSU5HICIke3Byb3RvYnVm
X0FDX0lOSVRfTElORX0iKQotIyBDb250YWN0Ci1zdHJpbmcoUkVHRVggUkVQTEFDRSAgICAgICAg
IiR7cHJvdG9idWZfQUNfSU5JVF9SRUdFWH0iICJcXDMiCi0gICAgcHJvdG9idWZfQ09OVEFDVCAg
ICAgICAgIiR7cHJvdG9idWZfQUNfSU5JVF9MSU5FfSIpCi0jIFBhcnNlIHZlcnNpb24gdHdlYWtz
Ci1zZXQocHJvdG9idWZfVkVSU0lPTl9SRUdFWCAiXihbMC05XSspXFwuKFswLTldKylcXC4oWzAt
OV0rKS4qJCIpCi1zdHJpbmcoUkVHRVggUkVQTEFDRSAgICAgIiR7cHJvdG9idWZfVkVSU0lPTl9S
RUdFWH0iICJcXDEiCi0gIHByb3RvYnVmX1ZFUlNJT05fTUFKT1IgIiR7cHJvdG9idWZfVkVSU0lP
Tl9TVFJJTkd9IikKLXN0cmluZyhSRUdFWCBSRVBMQUNFICAgICAiJHtwcm90b2J1Zl9WRVJTSU9O
X1JFR0VYfSIgIlxcMiIKLSAgcHJvdG9idWZfVkVSU0lPTl9NSU5PUiAiJHtwcm90b2J1Zl9WRVJT
SU9OX1NUUklOR30iKQotc3RyaW5nKFJFR0VYIFJFUExBQ0UgICAgICIke3Byb3RvYnVmX1ZFUlNJ
T05fUkVHRVh9IiAiXFwzIgotICBwcm90b2J1Zl9WRVJTSU9OX1BBVENIICIke3Byb3RvYnVmX1ZF
UlNJT05fU1RSSU5HfSIpCi0jIFBhY2thZ2UgdmVyc2lvbgotc2V0KHByb3RvYnVmX1ZFUlNJT04K
LSAgIiR7cHJvdG9idWZfVkVSU0lPTl9NQUpPUn0uJHtwcm90b2J1Zl9WRVJTSU9OX01JTk9SfS4k
e3Byb3RvYnVmX1ZFUlNJT05fUEFUQ0h9IikKLQotaWYocHJvdG9idWZfVkVSQk9TRSkKLSAgbWVz
c2FnZShTVEFUVVMgIkNvbmZpZ3VyYXRpb24gc2NyaXB0IHBhcnNpbmcgc3RhdHVzIFsiKQotICBt
ZXNzYWdlKFNUQVRVUyAiICBEZXNjcmlwdGlvbiA6ICR7cHJvdG9idWZfREVTQ1JJUFRJT059IikK
LSAgbWVzc2FnZShTVEFUVVMgIiAgVmVyc2lvbiAgICAgOiAke3Byb3RvYnVmX1ZFUlNJT059ICgk
e3Byb3RvYnVmX1ZFUlNJT05fU1RSSU5HfSkiKQotICBtZXNzYWdlKFNUQVRVUyAiICBDb250YWN0
ICAgICA6ICR7cHJvdG9idWZfQ09OVEFDVH0iKQotICBtZXNzYWdlKFNUQVRVUyAiXSIpCi1lbmRp
ZigpCi0KLWFkZF9kZWZpbml0aW9ucygtREdPT0dMRV9QUk9UT0JVRl9DTUFLRV9CVUlMRCkKLQot
ZmluZF9wYWNrYWdlKFRocmVhZHMgUkVRVUlSRUQpCi1pZiAoQ01BS0VfVVNFX1BUSFJFQURTX0lO
SVQpCi0gIGFkZF9kZWZpbml0aW9ucygtREhBVkVfUFRIUkVBRCkKLWVuZGlmIChDTUFLRV9VU0Vf
UFRIUkVBRFNfSU5JVCkKLQotaWYgKHByb3RvYnVmX1dJVEhfWkxJQikKLSAgZmluZF9wYWNrYWdl
KFpMSUIpCi0gIGlmIChaTElCX0ZPVU5EKQotICAgIHNldChIQVZFX1pMSUIgMSkKLSAgICAjIEZp
bmRaTElCIG1vZHVsZSBkZWZpbmUgWkxJQl9JTkNMVURFX0RJUlMgdmFyaWFibGUKLSAgICAjIFNl
dCBaTElCX0lOQ0xVREVfRElSRUNUT1JJRVMgZm9yIGNvbXBhdGlibGUKLSAgICBzZXQoWkxJQl9J
TkNMVURFX0RJUkVDVE9SSUVTICR7WkxJQl9JTkNMVURFX0RJUkVDVE9SSUVTfSAke1pMSUJfSU5D
TFVERV9ESVJTfSkKLSAgICAjIFVzaW5nIGltcG9ydGVkIHRhcmdldCBpZiBleGlzdHMKLSAgICBp
ZiAoVEFSR0VUIFpMSUI6OlpMSUIpCi0gICAgICBzZXQoWkxJQl9MSUJSQVJJRVMgWkxJQjo6WkxJ
QikKLSAgICBlbmRpZiAoVEFSR0VUIFpMSUI6OlpMSUIpCi0gIGVsc2UgKFpMSUJfRk9VTkQpCi0g
ICAgc2V0KEhBVkVfWkxJQiAwKQotICAgICMgRXhwbGljaXRseSBzZXQgdGhlc2UgdG8gZW1wdHkg
KG92ZXJyaWRlIE5PVF9GT1VORCkgc28gY21ha2UgZG9lc24ndAotICAgICMgY29tcGxhaW4gd2hl
biB3ZSB1c2UgdGhlbSBsYXRlci4KLSAgICBzZXQoWkxJQl9JTkNMVURFX0RJUkVDVE9SSUVTKQot
ICAgIHNldChaTElCX0xJQlJBUklFUykKLSAgZW5kaWYgKFpMSUJfRk9VTkQpCi1lbmRpZiAocHJv
dG9idWZfV0lUSF9aTElCKQotCi1pZiAoSEFWRV9aTElCKQotICBhZGRfZGVmaW5pdGlvbnMoLURI
QVZFX1pMSUIpCi1lbmRpZiAoSEFWRV9aTElCKQotCi1pZiAocHJvdG9idWZfQlVJTERfU0hBUkVE
X0xJQlMpCi0gIHNldChwcm90b2J1Zl9TSEFSRURfT1JfU1RBVElDICJTSEFSRUQiKQotZWxzZSAo
cHJvdG9idWZfQlVJTERfU0hBUkVEX0xJQlMpCi0gIHNldChwcm90b2J1Zl9TSEFSRURfT1JfU1RB
VElDICJTVEFUSUMiKQotICAjIEluIGNhc2Ugd2UgYXJlIGJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJp
ZXMsIGxpbmsgYWxzbyB0aGUgcnVudGltZSBsaWJyYXJ5IHN0YXRpY2FsbHkKLSAgIyBzbyB0aGF0
IE1TVkNSKi5ETEwgaXMgbm90IHJlcXVpcmVkIGF0IHJ1bnRpbWUuCi0gICMgaHR0cHM6Ly9tc2Ru
Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8ya3p0MXd5My5hc3B4Ci0gICMgVGhpcyBpcyBh
Y2hpZXZlZCBieSByZXBsYWNpbmcgbXN2YyBvcHRpb24gL01EIHdpdGggL01UIGFuZCAvTURkIHdp
dGggL01UZAotICAjIGh0dHA6Ly93d3cuY21ha2Uub3JnL1dpa2kvQ01ha2VfRkFRI0hvd19jYW5f
SV9idWlsZF9teV9NU1ZDX2FwcGxpY2F0aW9uX3dpdGhfYV9zdGF0aWNfcnVudGltZS4zRgotICBp
ZiAoTVNWQyBBTkQgcHJvdG9idWZfTVNWQ19TVEFUSUNfUlVOVElNRSkKLSAgICBmb3JlYWNoKGZs
YWdfdmFyCi0gICAgICAgIENNQUtFX0NYWF9GTEFHUyBDTUFLRV9DWFhfRkxBR1NfREVCVUcgQ01B
S0VfQ1hYX0ZMQUdTX1JFTEVBU0UKLSAgICAgICAgQ01BS0VfQ1hYX0ZMQUdTX01JTlNJWkVSRUwg
Q01BS0VfQ1hYX0ZMQUdTX1JFTFdJVEhERUJJTkZPKQotICAgICAgaWYoJHtmbGFnX3Zhcn0gTUFU
Q0hFUyAiL01EIikKLSAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi9NRCIgIi9NVCIgJHtm
bGFnX3Zhcn0gIiR7JHtmbGFnX3Zhcn19IikKLSAgICAgIGVuZGlmKCR7ZmxhZ192YXJ9IE1BVENI
RVMgIi9NRCIpCi0gICAgZW5kZm9yZWFjaChmbGFnX3ZhcikKLSAgZW5kaWYgKE1TVkMgQU5EIHBy
b3RvYnVmX01TVkNfU1RBVElDX1JVTlRJTUUpCi1lbmRpZiAocHJvdG9idWZfQlVJTERfU0hBUkVE
X0xJQlMpCi0KLWlmIChNU1ZDKQotICAjIEJ1aWxkIHdpdGggbXVsdGlwbGUgcHJvY2Vzc2VzCi0g
IGFkZF9kZWZpbml0aW9ucygvTVApCi0gIGFkZF9kZWZpbml0aW9ucygvd2Q0MjQ0IC93ZDQyNjcg
L3dkNDAxOCAvd2Q0MzU1IC93ZDQ4MDAgL3dkNDI1MSAvd2Q0OTk2IC93ZDQxNDYgL3dkNDMwNSkK
LSAgIyBBbGxvdyBiaWcgb2JqZWN0Ci0gIGFkZF9kZWZpbml0aW9ucygvYmlnb2JqKQotICBzdHJp
bmcoUkVQTEFDRSAiLyIgIlxcIiBQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSCAke3Byb3RvYnVm
X1NPVVJDRV9ESVJ9KQotICBzdHJpbmcoUkVQTEFDRSAiLyIgIlxcIiBQUk9UT0JVRl9CSU5BUllf
V0lOMzJfUEFUSCAke3Byb3RvYnVmX0JJTkFSWV9ESVJ9KQotICBjb25maWd1cmVfZmlsZShleHRy
YWN0X2luY2x1ZGVzLmJhdC5pbiBleHRyYWN0X2luY2x1ZGVzLmJhdCkKLWVuZGlmIChNU1ZDKQot
Ci1nZXRfZmlsZW5hbWVfY29tcG9uZW50KHByb3RvYnVmX3NvdXJjZV9kaXIgJHtwcm90b2J1Zl9T
T1VSQ0VfRElSfSBQQVRIKQotCi1pbmNsdWRlX2RpcmVjdG9yaWVzKAotICAke1pMSUJfSU5DTFVE
RV9ESVJFQ1RPUklFU30KLSAgJHtwcm90b2J1Zl9CSU5BUllfRElSfQotICAke3Byb3RvYnVmX3Nv
dXJjZV9kaXJ9L3NyYykKLQotaWYgKE1TVkMpCi0gICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9y
IGdlbmVyYXRlZCAubGliIG91dHB1dHMuCi0gIHNldChMSUJfUFJFRklYIGxpYikKLWVsc2UgKE1T
VkMpCi0gICMgV2hlbiBidWlsZGluZyB3aXRoICJtYWtlIiwgImxpYiIgcHJlZml4IHdpbGwgYmUg
YWRkZWQgYXV0b21hdGljYWxseSBieQotICAjIHRoZSBidWlsZCB0b29sLgotICBzZXQoTElCX1BS
RUZJWCkKLWVuZGlmIChNU1ZDKQotCi1pbmNsdWRlKGxpYnByb3RvYnVmLWxpdGUuY21ha2UpCi1p
bmNsdWRlKGxpYnByb3RvYnVmLmNtYWtlKQotaW5jbHVkZShsaWJwcm90b2MuY21ha2UpCi1pbmNs
dWRlKHByb3RvYy5jbWFrZSkKLQotaWYgKHByb3RvYnVmX0JVSUxEX1RFU1RTKQotICBpbmNsdWRl
KHRlc3RzLmNtYWtlKQotZW5kaWYgKHByb3RvYnVmX0JVSUxEX1RFU1RTKQotCi1pbmNsdWRlKGlu
c3RhbGwuY21ha2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NtYWtlL1JFQURNRS5tZCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21ha2UvUkVBRE1FLm1k
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTc0MTBkODI4NTQ3ZTZhMzM1MDk4NmY5
NTQ4OTU2Zjk0YWY5NDExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY21ha2UvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMzM2ICswLDAgQEAKLVRo
aXMgZGlyZWN0b3J5IGNvbnRhaW5zICpDTWFrZSogZmlsZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBi
dWlsZCBwcm90b2J1Zgotd2l0aCAqTVNWQyogb24gKldpbmRvd3MqLiBZb3UgY2FuIGJ1aWxkIHRo
ZSBwcm9qZWN0IGZyb20gKkNvbW1hbmQgUHJvbXB0KgotYW5kIHVzaW5nIGFuICpWaXN1YWwgU3R1
ZGlvKiBJREUuCi0KLVlvdSBuZWVkIHRvIGhhdmUgW0NNYWtlXShodHRwOi8vd3d3LmNtYWtlLm9y
ZyksIFtWaXN1YWwgU3R1ZGlvXShodHRwczovL3d3dy52aXN1YWxzdHVkaW8uY29tKQotYW5kIG9w
dGlvbmFsbHkgW0dpdF0oaHR0cDovL2dpdC1zY20uY29tKSBpbnN0YWxsZWQgb24geW91ciBjb21w
dXRlciBiZWZvcmUgcHJvY2VlZGluZy4KLQotTW9zdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHdpbGwg
YmUgZ2l2ZW4gdG8gdGhlICrQoW9tbWFuZCBQcm9tcHQqLCBidXQgdGhlIHNhbWUKLWFjdGlvbnMg
Y2FuIGJlIHBlcmZvcm1lZCB1c2luZyBhcHByb3ByaWF0ZSBHVUkgdG9vbHMuCi0KLUVudmlyb25t
ZW50IFNldHVwCi09PT09PT09PT09PT09PT09PQotCi1PcGVuIHRoZSBhcHByb3ByaWF0ZSAqQ29t
bWFuZCBQcm9tcHQqIGZyb20gdGhlICpTdGFydCogbWVudS4KLQotRm9yIGV4YW1wbGUgKlZTMjAx
MyB4NjQgTmF0aXZlIFRvb2xzIENvbW1hbmQgUHJvbXB0KjoKLQotICAgIEM6XFByb2dyYW0gRmls
ZXMgKHg4NilcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMTIuMFxWQ1xiaW5cYW1kNjQ+Ci0KLUNo
YW5nZSB0byB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5OgotCi0gICAgQzpcUHJvZ3JhbSBGaWxlcyAo
eDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAxMi4wXFZDXGJpblxhbWQ2ND5jZCBDOlxQYXRo
XHRvCi0gICAgQzpcUGF0aFx0bz4KLQotV2hlcmUgKkM6XFBhdGhcdG8qIGlzIHBhdGggdG8geW91
ciByZWFsIHdvcmtpbmcgZGlyZWN0b3J5LgotCi1DcmVhdGUgYSBmb2xkZXIgd2hlcmUgcHJvdG9i
dWYgaGVhZGVycy9saWJyYXJpZXMvYmluYXJpZXMgd2lsbCBiZSBpbnN0YWxsZWQgYWZ0ZXIgYnVp
bHQ6Ci0KLSAgICBDOlxQYXRoXHRvPm1rZGlyIGluc3RhbGwKLQotSWYgKmNtYWtlKiBjb21tYW5k
IGlzIG5vdCBhdmFpbGFibGUgZnJvbSAqQ29tbWFuZCBQcm9tcHQqLCBhZGQgaXQgdG8gc3lzdGVt
ICpQQVRIKiB2YXJpYWJsZToKLQotICAgIEM6XFBhdGhcdG8+c2V0IFBBVEg9JVBBVEglO0M6XFBy
b2dyYW0gRmlsZXMgKHg4NilcQ01ha2VcYmluCi0KLUlmICpnaXQqIGNvbW1hbmQgaXMgbm90IGF2
YWlsYWJsZSBmcm9tICpDb21tYW5kIFByb21wdCosIGFkZCBpdCB0byBzeXN0ZW0gKlBBVEgqIHZh
cmlhYmxlOgotCi0gICAgQzpcUGF0aFx0bz5zZXQgUEFUSD0lUEFUSCU7QzpcUHJvZ3JhbSBGaWxl
c1xHaXRcY21kCi0KLUdvb2QuIE5vdyB5b3UgYXJlIHJlYWR5IHRvIGNvbnRpbnVlLgotCi1HZXR0
aW5nIFNvdXJjZXMKLT09PT09PT09PT09PT09PQotCi1Zb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHN0
YWJsZSBzb3VyY2UgcGFja2FnZXMgZnJvbSB0aGUKLVtyZWxlYXNlc10oaHR0cHM6Ly9naXRodWIu
Y29tL2dvb2dsZS9wcm90b2J1Zi9yZWxlYXNlcykgcGFnZS4KLU9yIHlvdSBjYW4gdHlwZToKLQot
ICAgICBDOlxQYXRoXHRvPiBnaXQgY2xvbmUgLWIgW3JlbGVhc2VfdGFnXSBodHRwczovL2dpdGh1
Yi5jb20vZ29vZ2xlL3Byb3RvYnVmLmdpdAotCi1XaGVyZSAqW3JlbGVhc2VfdGFnXSogaXMgYSBn
aXQgdGFnIGxpa2UgKnYzLjAuMC1iZXRhLTEqIG9yIGEgYnJhbmNoIG5hbWUgbGlrZSAqbWFzdGVy
KgotaWYgeW91IHdhbnQgdG8gZ2V0IHRoZSBsYXRlc3QgY29kZS4KLQotR28gdG8gdGhlIHByb2pl
Y3QgZm9sZGVyOgotCi0gICAgIEM6XFBhdGhcdG8+Y2QgcHJvdG9idWYKLSAgICAgQzpcUGF0aFx0
b1xwcm90b2J1Zj4KLQotUHJvdG9idWYgdW5pdC10ZXN0cyByZXF1aXJlIGdtb2NrIHRvIGJ1aWxk
LiBJZiB5b3UgZG93bmxvYWQgcHJvdG9idWYgc291cmNlIGNvZGUKLWZyb20gdGhlICpyZWxlYXNl
cyogcGFnZSwgdGhlICpnbW9jayogZGlyZWN0b3J5IHNob3VsZCBhbHJlYWR5IGJlIHRoZXJlLiBJ
ZiB5b3UgY2hlY2tvdXQKLXRoZSBjb2RlIHZpYSBgZ2l0IGNsb25lYCwgdGhpcyAqZ21vY2sqIGRp
cmVjdG9yeSB3b24ndCBleGlzdCBhbmQgeW91IHdpbGwgaGF2ZSB0bwotZG93bmxvYWQgaXQgbWFu
dWFsbHkgb3Igc2tpcCBidWlsZGluZyBwcm90b2J1ZiB1bml0LXRlc3RzLgotCi1Zb3UgY2FuIGRv
d25sb2FkIGdtb2NrIGFzIGZvbGxvd3M6Ci0KLSAgICAgQzpcUGF0aFx0b1xwcm90b2J1Zj5naXQg
Y2xvbmUgLWIgcmVsZWFzZS0xLjcuMCBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2dvb2dsZW1v
Y2suZ2l0IGdtb2NrCi0KLVRoZW4gZ28gdG8gKmdtb2NrKiBmb2xkZXIgYW5kIGRvd25sb2FkIGd0
ZXN0OgotCi0gICAgIEM6XFBhdGhcdG9ccHJvdG9idWY+Y2QgZ21vY2sKLSAgICAgQzpcUGF0aFx0
b1xwcm90b2J1ZlxnbW9jaz5naXQgY2xvbmUgLWIgcmVsZWFzZS0xLjcuMCBodHRwczovL2dpdGh1
Yi5jb20vZ29vZ2xlL2dvb2dsZXRlc3QuZ2l0IGd0ZXN0Ci0KLUlmIHlvdSBhYnNvbHV0ZWx5IGRv
bid0IHdhbnQgdG8gYnVpbGQgYW5kIHJ1biBwcm90b2J1ZiB1bml0LXRlc3RzLCBza2lwCi10aGlz
IHN0ZXBzIGFuZCB1c2UgcHJvdG9idWYgYXQgeW91ciBvd24gcmlzay4KLQotTm93IGdvIHRvICpj
bWFrZSogZm9sZGVyIGluIHByb3RvYnVmIHNvdXJjZXM6Ci0KLSAgICAgQzpcUGF0aFx0b1xwcm90
b2J1ZlxnbW9jaz5jZCAuLlxjbWFrZQotICAgICBDOlxQYXRoXHRvXHByb3RvYnVmXGNtYWtlPgot
Ci1Hb29kLiBOb3cgeW91IGFyZSByZWFkeSB0byAqQ01ha2UqIGNvbmZpZ3VyYXRpb24uCi0KLUNN
YWtlIENvbmZpZ3VyYXRpb24KLT09PT09PT09PT09PT09PT09PT0KLQotKkNNYWtlKiBzdXBwb3J0
cyBhIGxvdCBvZiBkaWZmZXJlbnQKLVtnZW5lcmF0b3JzXShodHRwOi8vd3d3LmNtYWtlLm9yZy9j
bWFrZS9oZWxwL2xhdGVzdC9tYW51YWwvY21ha2UtZ2VuZXJhdG9ycy43Lmh0bWwpCi1mb3IgdmFy
aW91cyBuYXRpdmUgYnVpbGQgc3lzdGVtcy4KLVdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4KLVtN
YWtlZmlsZV0oaHR0cDovL3d3dy5jbWFrZS5vcmcvY21ha2UvaGVscC9sYXRlc3QvbWFudWFsL2Nt
YWtlLWdlbmVyYXRvcnMuNy5odG1sI21ha2VmaWxlLWdlbmVyYXRvcnMpCi1hbmQKLVtWaXN1YWwg
U3R1ZGlvXShodHRwOi8vd3d3LmNtYWtlLm9yZy9jbWFrZS9oZWxwL2xhdGVzdC9tYW51YWwvY21h
a2UtZ2VuZXJhdG9ycy43Lmh0bWwjdmlzdWFsLXN0dWRpby1nZW5lcmF0b3JzKQotZ2VuZXJhdG9y
cy4KLQotV2Ugd2lsbCB1c2Ugc2hhZG93IGJ1aWxkaW5nIHRvIHNlcGFyYXRlIHRoZSB0ZW1wb3Jh
cnkgZmlsZXMgZnJvbSB0aGUgcHJvdG9idWYgc291cmNlIGNvZGUuCi0KLUNyZWF0ZSBhIHRlbXBv
cmFyeSAqYnVpbGQqIGZvbGRlciBhbmQgY2hhbmdlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdG8g
aXQ6Ci0KLSAgICAgQzpcUGF0aFx0b1xwcm90b2J1ZlxjbWFrZT5ta2RpciBidWlsZCAmIGNkIGJ1
aWxkCi0gICAgIEM6XFBhdGhcdG9ccHJvdG9idWZcY21ha2VcYnVpbGQ+Ci0KLVRoZSAqTWFrZWZp
bGUqIGdlbmVyYXRvciBjYW4gYnVpbGQgdGhlIHByb2plY3QgaW4gb25seSBvbmUgY29uZmlndXJh
dGlvbiwgc28geW91IG5lZWQgdG8gYnVpbGQKLWEgc2VwYXJhdGUgZm9sZGVyIGZvciBlYWNoIGNv
bmZpZ3VyYXRpb24uCi0KLVRvIHN0YXJ0IHVzaW5nIGEgKlJlbGVhc2UqIGNvbmZpZ3VyYXRpb246
Ci0KLSAgICAgQzpcUGF0aFx0b1xwcm90b2J1ZlxjbWFrZVxidWlsZD5ta2RpciByZWxlYXNlICYg
Y2QgcmVsZWFzZQotICAgICBDOlxQYXRoXHRvXHByb3RvYnVmXGNtYWtlXGJ1aWxkXHJlbGVhc2U+
Y21ha2UgLUcgIk5NYWtlIE1ha2VmaWxlcyIgXgotICAgICAtRENNQUtFX0JVSUxEX1RZUEU9UmVs
ZWFzZSBeCi0gICAgIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9Li4vLi4vLi4vLi4vaW5zdGFsbCBe
Ci0gICAgIC4uLy4uCi0KLUl0IHdpbGwgZ2VuZXJhdGUgKm5tYWtlKiAqTWFrZWZpbGUqIGluIGN1
cnJlbnQgZGlyZWN0b3J5LgotCi1UbyB1c2UgKkRlYnVnKiBjb25maWd1cmF0aW9uOgotCi0gICAg
IEM6XFBhdGhcdG9ccHJvdG9idWZcY21ha2VcYnVpbGQ+bWtkaXIgZGVidWcgJiBjZCBkZWJ1Zwot
ICAgICBDOlxQYXRoXHRvXHByb3RvYnVmXGNtYWtlXGJ1aWxkXGRlYnVnPmNtYWtlIC1HICJOTWFr
ZSBNYWtlZmlsZXMiIF4KLSAgICAgLURDTUFLRV9CVUlMRF9UWVBFPURlYnVnIF4KLSAgICAgLURD
TUFLRV9JTlNUQUxMX1BSRUZJWD0uLi8uLi8uLi8uLi9pbnN0YWxsIF4KLSAgICAgLi4vLi4KLQot
SXQgd2lsbCBnZW5lcmF0ZSAqbm1ha2UqICpNYWtlZmlsZSogaW4gY3VycmVudCBkaXJlY3Rvcnku
Ci0KLVRvIGNyZWF0ZSAqVmlzdWFsIFN0dWRpbyogc29sdXRpb24gZmlsZToKLQotICAgICBDOlxQ
YXRoXHRvXHByb3RvYnVmXGNtYWtlXGJ1aWxkPm1rZGlyIHNvbHV0aW9uICYgY2Qgc29sdXRpb24K
LSAgICAgQzpcUGF0aFx0b1xwcm90b2J1ZlxjbWFrZVxidWlsZFxzb2x1dGlvbj5jbWFrZSAtRyAi
VmlzdWFsIFN0dWRpbyAxMiAyMDEzIFdpbjY0IiBeCi0gICAgIC1EQ01BS0VfSU5TVEFMTF9QUkVG
SVg9Li4vLi4vLi4vLi4vaW5zdGFsbCBeCi0gICAgIC4uLy4uCi0KLUl0IHdpbGwgZ2VuZXJhdGUg
KlZpc3VhbCBTdHVkaW8qIHNvbHV0aW9uIGZpbGUgKnByb3RvYnVmLnNsbiogaW4gY3VycmVudCBk
aXJlY3RvcnkuCi0KLUlmIHRoZSAqZ21vY2sqIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgYW5k
IHlvdSBkbyBub3Qgd2FudCB0byBidWlsZCBwcm90b2J1ZiB1bml0IHRlc3RzLAoteW91IG5lZWQg
dG8gYWRkICpjbWFrZSogY29tbWFuZCBhcmd1bWVudCBgLURwcm90b2J1Zl9CVUlMRF9URVNUUz1P
RkZgIHRvIGRpc2FibGUgdGVzdGluZy4KLQotQ29tcGlsaW5nCi09PT09PT09PT0KLQotVG8gY29t
cGlsZSBwcm90b2J1ZjoKLQotICAgICBDOlxQYXRoXHRvXHByb3RvYnVmXGNtYWtlXGJ1aWxkXHJl
bGVhc2U+bm1ha2UKLQotb3IKLQotICAgICBDOlxQYXRoXHRvXHByb3RvYnVmXGNtYWtlXGJ1aWxk
XGRlYnVnPm5tYWtlCi0KLUFuZCB3YWl0IGZvciB0aGUgY29tcGlsYXRpb24gdG8gZmluaXNoLgot
Ci1JZiB5b3UgcHJlZmVyIHRvIHVzZSB0aGUgSURFOgotCi0gICogT3BlbiB0aGUgZ2VuZXJhdGVk
IHByb3RvYnVmLnNsbiBmaWxlIGluIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLgotICAqIENob29z
ZSAiRGVidWciIG9yICJSZWxlYXNlIiBjb25maWd1cmF0aW9uIGFzIGRlc2lyZWQuCi0gICogRnJv
bSB0aGUgQnVpbGQgbWVudSwgY2hvb3NlICJCdWlsZCBTb2x1dGlvbiIuCi0KLUFuZCB3YWl0IGZv
ciB0aGUgY29tcGlsYXRpb24gdG8gZmluaXNoLgotCi1UZXN0aW5nCi09PT09PT09Ci0KLVRvIHJ1
biB1bml0LXRlc3RzLCBmaXJzdCB5b3UgbXVzdCBjb21waWxlIHByb3RvYnVmIGFzIGRlc2NyaWJl
ZCBhYm92ZS4KLVRoZW4gcnVuOgotCi0gICAgIEM6XFBhdGhcdG9ccHJvdG9idWZcY21ha2VcYnVp
bGRccmVsZWFzZT5ubWFrZSBjaGVjawotCi1vcgotCi0gICAgIEM6XFBhdGhcdG9ccHJvdG9idWZc
Y21ha2VcYnVpbGRcZGVidWc+bm1ha2UgY2hlY2sKLQotWW91IGNhbiBhbHNvIGJ1aWxkIHByb2pl
Y3QgKmNoZWNrKiBmcm9tIFZpc3VhbCBTdHVkaW8gc29sdXRpb24uCi1ZZXMsIGl0IG1heSBzb3Vu
ZCBzdHJhbmdlLCBidXQgaXQgd29ya3MuCi0KLVlvdSBzaG91bGQgc2VlIG91dHB1dCBzaW1pbGFy
IHRvOgotCi0gICAgIFJ1bm5pbmcgbWFpbigpIGZyb20gZ21vY2tfbWFpbi5jYwotICAgICBbPT09
PT09PT09PV0gUnVubmluZyAxNTQ2IHRlc3RzIGZyb20gMTY1IHRlc3QgY2FzZXMuCi0gICAgIAot
ICAgICAuLi4KLSAgICAgCi0gICAgIFs9PT09PT09PT09XSAxNTQ2IHRlc3RzIGZyb20gMTY1IHRl
c3QgY2FzZXMgcmFuLiAoMjUyOSBtcyB0b3RhbCkKLSAgICAgWyAgUEFTU0VEICBdIDE1NDYgdGVz
dHMuCi0KLVRvIHJ1biBzcGVjaWZpYyB0ZXN0czoKLQotICAgICBDOlxQYXRoXHRvXHByb3RvYnVm
PmNtYWtlXGJ1aWxkXHJlbGVhc2VcdGVzdHMuZXhlIC0tZ3Rlc3RfZmlsdGVyPUFueVRlc3QqCi0g
ICAgIFJ1bm5pbmcgbWFpbigpIGZyb20gZ21vY2tfbWFpbi5jYwotICAgICBOb3RlOiBHb29nbGUg
VGVzdCBmaWx0ZXIgPSBBbnlUZXN0KgotICAgICBbPT09PT09PT09PV0gUnVubmluZyAzIHRlc3Rz
IGZyb20gMSB0ZXN0IGNhc2UuCi0gICAgIFstLS0tLS0tLS0tXSBHbG9iYWwgdGVzdCBlbnZpcm9u
bWVudCBzZXQtdXAuCi0gICAgIFstLS0tLS0tLS0tXSAzIHRlc3RzIGZyb20gQW55VGVzdAotICAg
ICBbIFJVTiAgICAgIF0gQW55VGVzdC5UZXN0UGFja0FuZFVucGFjawotICAgICBbICAgICAgIE9L
IF0gQW55VGVzdC5UZXN0UGFja0FuZFVucGFjayAoMCBtcykKLSAgICAgWyBSVU4gICAgICBdIEFu
eVRlc3QuVGVzdFBhY2tBbmRVbnBhY2tBbnkKLSAgICAgWyAgICAgICBPSyBdIEFueVRlc3QuVGVz
dFBhY2tBbmRVbnBhY2tBbnkgKDAgbXMpCi0gICAgIFsgUlVOICAgICAgXSBBbnlUZXN0LlRlc3RJ
cwotICAgICBbICAgICAgIE9LIF0gQW55VGVzdC5UZXN0SXMgKDAgbXMpCi0gICAgIFstLS0tLS0t
LS0tXSAzIHRlc3RzIGZyb20gQW55VGVzdCAoMSBtcyB0b3RhbCkKLSAgICAgCi0gICAgIFstLS0t
LS0tLS0tXSBHbG9iYWwgdGVzdCBlbnZpcm9ubWVudCB0ZWFyLWRvd24KLSAgICAgWz09PT09PT09
PT1dIDMgdGVzdHMgZnJvbSAxIHRlc3QgY2FzZSByYW4uICgyIG1zIHRvdGFsKQotICAgICBbICBQ
QVNTRUQgIF0gMyB0ZXN0cy4KLQotTm90ZSB0aGF0IHRoZSB0ZXN0cyBtdXN0IGJlIHJ1biBmcm9t
IHRoZSBzb3VyY2UgZm9sZGVyLgotCi1JZiBhbGwgdGVzdHMgYXJlIHBhc3NlZCwgc2FmZWx5IGNv
bnRpbnVlLgotCi1JbnN0YWxsaW5nCi09PT09PT09PT09Ci0KLVRvIGluc3RhbGwgcHJvdG9idWYg
dG8gdGhlIHNwZWNpZmllZCAqaW5zdGFsbCogZm9sZGVyOgotCi0gICAgIEM6XFBhdGhcdG9ccHJv
dG9idWZcY21ha2VcYnVpbGRccmVsZWFzZT5ubWFrZSBpbnN0YWxsCi0KLW9yCi0KLSAgICAgQzpc
UGF0aFx0b1xwcm90b2J1ZlxjbWFrZVxidWlsZFxkZWJ1Zz5ubWFrZSBpbnN0YWxsCi0KLVlvdSBj
YW4gYWxzbyBidWlsZCBwcm9qZWN0ICpJTlNUQUxMKiBmcm9tIFZpc3VhbCBTdHVkaW8gc29sdXRp
b24uCi1JdCBzb3VuZHMgbm90IHNvIHN0cmFuZ2UgYW5kIGl0IHdvcmtzLgotCi1UaGlzIHdpbGwg
Y3JlYXRlIHRoZSBmb2xsb3dpbmcgZm9sZGVycyB1bmRlciB0aGUgKmluc3RhbGwqIGxvY2F0aW9u
OgotICAqIGJpbiAtIHRoYXQgY29udGFpbnMgcHJvdG9idWYgKnByb3RvYy5leGUqIGNvbXBpbGVy
OwotICAqIGluY2x1ZGUgLSB0aGF0IGNvbnRhaW5zIEMrKyBoZWFkZXJzIGFuZCBwcm90b2J1ZiAq
LnByb3RvIGZpbGVzOwotICAqIGxpYiAtIHRoYXQgY29udGFpbnMgbGlua2luZyBsaWJyYXJpZXMg
YW5kICpDTWFrZSogY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgKnByb3RvYnVmKiBwYWNrYWdlLgot
Ci1Ob3cgeW91IGNhbiBpZiBuZWVkZWQ6Ci0gICogQ29weSB0aGUgY29udGVudHMgb2YgdGhlIGlu
Y2x1ZGUgZGlyZWN0b3J5IHRvIHdoZXJldmVyIHlvdSB3YW50IHRvIHB1dCBoZWFkZXJzLgotICAq
IENvcHkgcHJvdG9jLmV4ZSB3aGVyZXZlciB5b3UgcHV0IGJ1aWxkIHRvb2xzIChwcm9iYWJseSBz
b21ld2hlcmUgaW4geW91ciBQQVRIKS4KLSAgKiBDb3B5IGxpbmtpbmcgbGlicmFyaWVzIGxpYnBy
b3RvYnVmW2RdLmxpYiwgbGlicHJvdG9idWYtbGl0ZVtkXS5saWIsIGFuZCBsaWJwcm90b2NbZF0u
bGliIHdoZXJldmVyIHlvdSBwdXQgbGlicmFyaWVzLgotCi1UbyBhdm9pZCBjb25mbGljdHMgYmV0
d2VlbiB0aGUgTVNWQyBkZWJ1ZyBhbmQgcmVsZWFzZSBydW50aW1lIGxpYnJhcmllcywgd2hlbgot
Y29tcGlsaW5nIGEgZGVidWcgYnVpbGQgb2YgeW91ciBhcHBsaWNhdGlvbiwgeW91IG1heSBuZWVk
IHRvIGxpbmsgYWdhaW5zdCBhCi1kZWJ1ZyBidWlsZCBvZiBsaWJwcm90b2J1ZmQubGliIHdpdGgg
ImQiIHBvc3RmaXguICBTaW1pbGFybHksIHJlbGVhc2UgYnVpbGRzIHNob3VsZCBsaW5rIGFnYWlu
c3QKLXJlbGVhc2UgbGlicHJvdG9idWYubGliIGxpYnJhcnkuCi0KLURMTHMgdnMuIHN0YXRpYyBs
aW5raW5nCi09PT09PT09PT09PT09PT09PT09PT09PQotCi1TdGF0aWMgbGlua2luZyBpcyBub3cg
dGhlIGRlZmF1bHQgZm9yIHRoZSBQcm90b2NvbCBCdWZmZXIgbGlicmFyaWVzLiAgRHVlIHRvCi1p
c3N1ZXMgd2l0aCBXaW4zMidzIHVzZSBvZiBhIHNlcGFyYXRlIGhlYXAgZm9yIGVhY2ggRExMLCBh
cyB3ZWxsIGFzIGJpbmFyeQotY29tcGF0aWJpbGl0eSBpc3N1ZXMgYmV0d2VlbiBkaWZmZXJlbnQg
dmVyc2lvbnMgb2YgTVNWQydzIFNUTCBsaWJyYXJ5LCBpdCBpcwotcmVjb21tZW5kZWQgdGhhdCB5
b3UgdXNlIHN0YXRpYyBsaW5rYWdlIG9ubHkuICBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0bwot
YnVpbGQgbGlicHJvdG9idWYgYW5kIGxpYnByb3RvYyBhcyBETExzIGlmIHlvdSByZWFsbHkgd2Fu
dC4gIFRvIGRvIHRoaXMsCi1kbyB0aGUgZm9sbG93aW5nOgotCi0gICogQWRkIGFuIGFkZGl0aW9u
YWwgZmxhZyBgLURwcm90b2J1Zl9CVUlMRF9TSEFSRURfTElCUz1PTmAgd2hlbiBpbnZva2luZyBj
bWFrZQotICAqIEZvbGxvdyB0aGUgc2FtZSBzdGVwcyBhcyBkZXNjcmliZWQgaW4gdGhlIGFib3Zl
IHNlY3Rpb24uCi0gICogV2hlbiBjb21waWxpbmcgeW91ciBwcm9qZWN0LCBtYWtlIHN1cmUgdG8g
YCNkZWZpbmUgUFJPVE9CVUZfVVNFX0RMTFNgLgotCi1XaGVuIGRpc3RyaWJ1dGluZyB5b3VyIHNv
ZnR3YXJlIHRvIGVuZCB1c2Vycywgd2Ugc3Ryb25nbHkgcmVjb21tZW5kIHRoYXQgeW91Ci1kbyBO
T1QgaW5zdGFsbCBsaWJwcm90b2J1Zi5kbGwgb3IgbGlicHJvdG9jLmRsbCB0byBhbnkgc2hhcmVk
IGxvY2F0aW9uLgotSW5zdGVhZCwga2VlcCB0aGVzZSBsaWJyYXJpZXMgbmV4dCB0byB5b3VyIGJp
bmFyaWVzLCBpbiB5b3VyIGFwcGxpY2F0aW9uJ3MKLW93biBpbnN0YWxsIGRpcmVjdG9yeS4gIEMr
KyBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0byBtYWludGFpbiBiaW5hcnkKLWNvbXBhdGliaWxp
dHkgYmV0d2VlbiByZWxlYXNlcywgc28gaXQgaXMgbGlrZWx5IHRoYXQgZnV0dXJlIHZlcnNpb25z
IG9mIHRoZXNlCi1saWJyYXJpZXMgd2lsbCAqbm90KiBiZSB1c2FibGUgYXMgZHJvcC1pbiByZXBs
YWNlbWVudHMuCi0KLUlmIHlvdXIgcHJvamVjdCBpcyBpdHNlbGYgYSBETEwgaW50ZW5kZWQgZm9y
IHVzZSBieSB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSwgd2UKLXJlY29tbWVuZCB0aGF0IHlvdSBkbyBO
T1QgZXhwb3NlIHByb3RvY29sIGJ1ZmZlciBvYmplY3RzIGluIHlvdXIgbGlicmFyeSdzCi1wdWJs
aWMgaW50ZXJmYWNlLCBhbmQgdGhhdCB5b3Ugc3RhdGljYWxseSBsaW5rIHByb3RvY29sIGJ1ZmZl
cnMgaW50byB5b3VyCi1saWJyYXJ5LgotCi1aTGliIHN1cHBvcnQKLT09PT09PT09PT09PQotCi1J
ZiB5b3Ugd2FudCB0byBpbmNsdWRlIEd6aXBJbnB1dFN0cmVhbSBhbmQgR3ppcE91dHB1dFN0cmVh
bQotKGdvb2dsZS9wcm90b2J1Zi9pby9nemlwX3N0cmVhbS5oKSBpbiBsaWJwcm90b2J1ZiwgeW91
IHdpbGwgbmVlZCB0byBkbyBhIGZldwotYWRkaXRpb25hbCBzdGVwcy4KLQotT2J0YWluIGEgY29w
eSBvZiB0aGUgemxpYiBsaWJyYXJ5LiAgVGhlIHByZS1jb21waWxlZCBETEwgYXQgemxpYi5uZXQg
d29ya3MuCi1Zb3UgbmVlZCBwcmVwYXJlIGl0OgotCi0gICogTWFrZSBzdXJlIHpsaWIncyB0d28g
aGVhZGVycyBhcmUgaW4geW91ciBgQzpcUGF0aFx0b1xpbnN0YWxsXGluY2x1ZGVgIHBhdGgKLSAg
KiBNYWtlIHN1cmUgemxpYidzIGxpbmtpbmcgbGlicmFyaWVzICgqLmxpYiBmaWxlKSBpcyBpbiB5
b3VyCi0gICAgYEM6XFBhdGhcdG9caW5zdGFsbFxsaWJgIGxpYnJhcnkgcGF0aC4KLQotWW91IGNh
biBhbHNvIGNvbXBpbGUgaXQgZnJvbSBzb3VyY2UgYnkgeW91cnNlbGYuCi0KLUdldHRpbmcgc291
cmNlczoKLQotICAgICBDOlxQYXRoXHRvPmdpdCBjbG9uZSAtYiB2MS4yLjggaHR0cHM6Ly9naXRo
dWIuY29tL21hZGxlci96bGliLmdpdAotICAgICBDOlxQYXRoXHRvPmNkIHpsaWIKLQotQ29tcGls
aW5nIGFuZCBJbnN0YWxsaW5nOgotCi0gICAgIEM6XFBhdGhcdG9cemxpYj5ta2RpciBidWlsZCAm
IGNkIGJ1aWxkCi0gICAgIEM6XFBhdGhcdG9cemxpYlxidWlsZD5ta2RpciByZWxlYXNlICYgY2Qg
cmVsZWFzZQotICAgICBDOlxQYXRoXHRvXHpsaWJcYnVpbGRccmVsZWFzZT5jbWFrZSAtRyAiTk1h
a2UgTWFrZWZpbGVzIiAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSBeCi0gICAgIC1EQ01BS0Vf
SU5TVEFMTF9QUkVGSVg9Li4vLi4vLi4vaW5zdGFsbCAuLi8uLgotICAgICBDOlxQYXRoXHRvXHps
aWJcYnVpbGRccmVsZWFzZT5ubWFrZSAmIG5tYWtlIGluc3RhbGwKLQotWW91IGNhbiBtYWtlICpk
ZWJ1ZyogdmVyc2lvbiBvciB1c2UgKlZpc3VhbCBTdHVkaW8qIGdlbmVyYXRvciBhbHNvIGFzIGJl
Zm9yZSBmb3IgdGhlCi1wcm90b2J1ZiBwcm9qZWN0LgotCi1Ob3cgYWRkICpiaW4qIGZvbGRlciBm
cm9tICppbnN0YWxsKiB0byBzeXN0ZW0gKlBBVEgqOgotCi0gICAgIEM6XFBhdGhcdG8+c2V0IFBB
VEg9JVBBVEglO0M6XFBhdGhcdG9caW5zdGFsbFxiaW4KLQotWW91IG5lZWQgcmVjb25maWd1cmUg
cHJvdG9idWYgd2l0aCBmbGFnIGAtRHByb3RvYnVmX1dJVEhfWkxJQj1PTmAgd2hlbiBpbnZva2lu
ZyBjbWFrZS4KLQotTm90ZSB0aGF0IGlmIHlvdSBoYXZlIGNvbXBpbGVkIFpMSUIgeW91cnNlbGYs
IGFzIHN0YXRlZCBhYm92ZSwKLWZ1cnRoZXIgZGlzYWJsZSB0aGUgb3B0aW9uIGAtRHByb3RvYnVm
X01TVkNfU1RBVElDX1JVTlRJTUU9T0ZGYC4KLQotSWYgaXQgcmVwb3J0cyBOT1RGT1VORCBmb3Ig
emxpYl9pbmNsdWRlIG9yIHpsaWJfbGliLCB5b3UgbWlnaHQgaGF2ZW4ndCBwdXQKLXRoZSBoZWFk
ZXJzIG9yIHRoZSAubGliIGZpbGUgaW4gdGhlIHJpZ2h0IGRpcmVjdG9yeS4KLQotQnVpbGQgYW5k
IHRlc3RpbmcgcHJvdG9idWYgYXMgdXN1YWwuCi0KLU5vdGVzIG9uIENvbXBpbGVyIFdhcm5pbmdz
Ci09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgZm9sbG93aW5nIHdhcm5pbmdzIGhh
dmUgYmVlbiBkaXNhYmxlZCB3aGlsZSBidWlsZGluZyB0aGUgcHJvdG9idWYgbGlicmFyaWVzCi1h
bmQgY29tcGlsZXIuICBZb3UgbWF5IGhhdmUgdG8gZGlzYWJsZSBzb21lIG9mIHRoZW0gaW4geW91
ciBvd24gcHJvamVjdCBhcwotd2VsbCwgb3IgbGl2ZSB3aXRoIHRoZW0uCi0KLSogQzQwMTggLSAn
ZXhwcmVzc2lvbicgOiBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gKLSogQzQxNDYgLSB1bmFyeSBt
aW51cyBvcGVyYXRvciBhcHBsaWVkIHRvIHVuc2lnbmVkIHR5cGUsIHJlc3VsdCBzdGlsbCB1bnNp
Z25lZAotKiBDNDI0NCAtIENvbnZlcnNpb24gZnJvbSAndHlwZTEnIHRvICd0eXBlMicsIHBvc3Np
YmxlIGxvc3Mgb2YgZGF0YS4KLSogQzQyNTEgLSAnaWRlbnRpZmllcicgOiBjbGFzcyAndHlwZScg
bmVlZHMgdG8gaGF2ZSBkbGwtaW50ZXJmYWNlIHRvIGJlIHVzZWQgYnkKLSAgY2xpZW50cyBvZiBj
bGFzcyAndHlwZTInCi0qIEM0MjY3IC0gQ29udmVyc2lvbiBmcm9tICdzaXplX3QnIHRvICd0eXBl
JywgcG9zc2libGUgbG9zcyBvZiBkYXRhLgotKiBDNDMwNSAtICdpZGVudGlmaWVyJyA6IHRydW5j
YXRpb24gZnJvbSAndHlwZTEnIHRvICd0eXBlMicKLSogQzQzNTUgLSAndGhpcycgOiB1c2VkIGlu
IGJhc2UgbWVtYmVyIGluaXRpYWxpemVyIGxpc3QKLSogQzQ4MDAgLSAndHlwZScgOiBmb3JjaW5n
IHZhbHVlIHRvIGJvb2wgJ3RydWUnIG9yICdmYWxzZScgKHBlcmZvcm1hbmNlIHdhcm5pbmcpCi0q
IEM0OTk2IC0gJ2Z1bmN0aW9uJzogd2FzIGRlY2xhcmVkIGRlcHJlY2F0ZWQKLQotQzQyNTEgaXMg
b2YgcGFydGljdWxhciBub3RlLCBpZiB5b3UgYXJlIGNvbXBpbGluZyB0aGUgUHJvdG9jb2wgQnVm
ZmVyIGxpYnJhcnkKLWFzIGEgRExMIChzZWUgcHJldmlvdXMgc2VjdGlvbikuICBUaGUgcHJvdG9j
b2wgYnVmZmVyIGxpYnJhcnkgdXNlcyB0ZW1wbGF0ZXMgaW4KLWl0cyBwdWJsaWMgaW50ZXJmYWNl
cy4gIE1TVkMgZG9lcyBub3QgcHJvdmlkZSBhbnkgcmVhc29uYWJsZSB3YXkgdG8gZXhwb3J0Ci10
ZW1wbGF0ZSBjbGFzc2VzIGZyb20gYSBETEwuICBIb3dldmVyLCBpbiBwcmFjdGljZSwgaXQgYXBw
ZWFycyB0aGF0IGV4cG9ydGluZwotdGVtcGxhdGVzIGlzIG5vdCBuZWNlc3NhcnkgYW55d2F5LiAg
U2luY2UgdGhlIGNvbXBsZXRlIGRlZmluaXRpb24gb2YgYW55Ci10ZW1wbGF0ZSBpcyBhdmFpbGFi
bGUgaW4gdGhlIGhlYWRlciBmaWxlcywgYW55b25lIGltcG9ydGluZyB0aGUgRExMIHdpbGwganVz
dAotZW5kIHVwIGNvbXBpbGluZyBpbnN0YW5jZXMgb2YgdGhlIHRlbXBsYXRlcyBpbnRvIHRoZWly
IG93biBiaW5hcnkuICBUaGUKLVByb3RvY29sIEJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5v
dCByZWx5IG9uIHN0YXRpYyB0ZW1wbGF0ZSBtZW1iZXJzIGJlaW5nCi11bmlxdWUsIHNvIHRoZXJl
IHNob3VsZCBiZSBubyBwcm9ibGVtIHdpdGggdGhpcywgYnV0IE1TVkMgcHJpbnRzIHdhcm5pbmcK
LW5ldmVydGhlbGVzcy4gIFNvLCB3ZSBkaXNhYmxlIGl0LiAgVW5mb3J0dW5hdGVseSwgdGhpcyB3
YXJuaW5nIHdpbGwgYWxzbyBiZQotcHJvZHVjZWQgd2hlbiBjb21waWxpbmcgY29kZSB3aGljaCBt
ZXJlbHkgdXNlcyBwcm90b2NvbCBidWZmZXJzLCBtZWFuaW5nIHlvdQotbWF5IGhhdmUgdG8gZGlz
YWJsZSBpdCBpbiB5b3VyIGNvZGUgdG9vLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jbWFrZS9leHRyYWN0X2luY2x1
ZGVzLmJhdC5pbiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY21ha2UvZXh0cmFjdF9pbmNsdWRlcy5iYXQuaW4KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGI1OTNlMGM5Y2NlZWNhMDU0ZjdmNmMyZWU1OWM2OTc2YTljOWEzYzcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jbWFrZS9leHRy
YWN0X2luY2x1ZGVzLmJhdC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi1ta2Rp
ciBpbmNsdWRlCi1ta2RpciBpbmNsdWRlXGdvb2dsZQotbWtkaXIgaW5jbHVkZVxnb29nbGVccHJv
dG9idWYKLW1rZGlyIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGNvbXBpbGVyCi1ta2RpciBpbmNs
dWRlXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxjcHAKLW1rZGlyIGluY2x1ZGVcZ29vZ2xlXHBy
b3RvYnVmXGNvbXBpbGVyXGNzaGFycAotbWtkaXIgaW5jbHVkZVxnb29nbGVccHJvdG9idWZcY29t
cGlsZXJcamF2YQotbWtkaXIgaW5jbHVkZVxnb29nbGVccHJvdG9idWZcY29tcGlsZXJcamF2YW5h
bm8KLW1rZGlyIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGNvbXBpbGVyXGpzCi1ta2RpciBpbmNs
dWRlXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxvYmplY3RpdmVjCi1ta2RpciBpbmNsdWRlXGdv
b2dsZVxwcm90b2J1Zlxjb21waWxlclxweXRob24KLW1rZGlyIGluY2x1ZGVcZ29vZ2xlXHByb3Rv
YnVmXGNvbXBpbGVyXHJ1YnkKLW1rZGlyIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGlvCi1ta2Rp
ciBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVicwotbWtkaXIgaW5jbHVkZVxnb29nbGVccHJv
dG9idWZcdXRpbAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29v
Z2xlXHByb3RvYnVmXGFueS5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGFueS5oCi1jb3B5ICR7
UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcYW55LnBi
LmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcYW55LnBiLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VS
Q0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxhcGkucGIuaCBpbmNsdWRlXGdv
b2dsZVxwcm90b2J1ZlxhcGkucGIuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRI
fVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXGFyZW5hLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZc
YXJlbmEuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xl
XHByb3RvYnVmXGFyZW5hc3RyaW5nLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcYXJlbmFzdHJp
bmcuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHBy
b3RvYnVmXGNvbXBpbGVyXGNvZGVfZ2VuZXJhdG9yLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZc
Y29tcGlsZXJcY29kZV9nZW5lcmF0b3IuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9Q
QVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXGNvbXBpbGVyXGNvbW1hbmRfbGluZV9pbnRlcmZh
Y2UuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxjb21tYW5kX2xpbmVfaW50ZXJm
YWNlLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxw
cm90b2J1Zlxjb21waWxlclxjcHBcY3BwX2dlbmVyYXRvci5oIGluY2x1ZGVcZ29vZ2xlXHByb3Rv
YnVmXGNvbXBpbGVyXGNwcFxjcHBfZ2VuZXJhdG9yLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0Vf
V0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxjc2hhcnBcY3NoYXJw
X2dlbmVyYXRvci5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGNvbXBpbGVyXGNzaGFycFxjc2hh
cnBfZ2VuZXJhdG9yLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3Jj
XGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxjc2hhcnBcY3NoYXJwX25hbWVzLmggaW5jbHVkZVxn
b29nbGVccHJvdG9idWZcY29tcGlsZXJcY3NoYXJwXGNzaGFycF9uYW1lcy5oCi1jb3B5ICR7UFJP
VE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcY29tcGlsZXJc
aW1wb3J0ZXIuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxpbXBvcnRlci5oCi1j
b3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZc
Y29tcGlsZXJcamF2YVxqYXZhX2dlbmVyYXRvci5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGNv
bXBpbGVyXGphdmFcamF2YV9nZW5lcmF0b3IuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4z
Ml9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXGNvbXBpbGVyXGphdmFcamF2YV9uYW1lcy5o
IGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGNvbXBpbGVyXGphdmFcamF2YV9uYW1lcy5oCi1jb3B5
ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcY29t
cGlsZXJcamF2YW5hbm9camF2YW5hbm9fZ2VuZXJhdG9yLmggaW5jbHVkZVxnb29nbGVccHJvdG9i
dWZcY29tcGlsZXJcamF2YW5hbm9camF2YW5hbm9fZ2VuZXJhdG9yLmgKLWNvcHkgJHtQUk9UT0JV
Rl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxqc1xq
c19nZW5lcmF0b3IuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxqc1xqc19nZW5l
cmF0b3IuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xl
XHByb3RvYnVmXGNvbXBpbGVyXG9iamVjdGl2ZWNcb2JqZWN0aXZlY19nZW5lcmF0b3IuaCBpbmNs
dWRlXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxvYmplY3RpdmVjXG9iamVjdGl2ZWNfZ2VuZXJh
dG9yLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxw
cm90b2J1Zlxjb21waWxlclxvYmplY3RpdmVjXG9iamVjdGl2ZWNfaGVscGVycy5oIGluY2x1ZGVc
Z29vZ2xlXHByb3RvYnVmXGNvbXBpbGVyXG9iamVjdGl2ZWNcb2JqZWN0aXZlY19oZWxwZXJzLmgK
LWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1
Zlxjb21waWxlclxwYXJzZXIuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxwYXJz
ZXIuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHBy
b3RvYnVmXGNvbXBpbGVyXHBsdWdpbi5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGNvbXBpbGVy
XHBsdWdpbi5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29n
bGVccHJvdG9idWZcY29tcGlsZXJccGx1Z2luLnBiLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZc
Y29tcGlsZXJccGx1Z2luLnBiLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1c
Li5cc3JjXGdvb2dsZVxwcm90b2J1Zlxjb21waWxlclxweXRob25ccHl0aG9uX2dlbmVyYXRvci5o
IGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGNvbXBpbGVyXHB5dGhvblxweXRob25fZ2VuZXJhdG9y
LmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90
b2J1Zlxjb21waWxlclxydWJ5XHJ1YnlfZ2VuZXJhdG9yLmggaW5jbHVkZVxnb29nbGVccHJvdG9i
dWZcY29tcGlsZXJccnVieVxydWJ5X2dlbmVyYXRvci5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNF
X1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcZGVzY3JpcHRvci5oIGluY2x1ZGVc
Z29vZ2xlXHByb3RvYnVmXGRlc2NyaXB0b3IuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4z
Ml9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXGRlc2NyaXB0b3IucGIuaCBpbmNsdWRlXGdv
b2dsZVxwcm90b2J1ZlxkZXNjcmlwdG9yLnBiLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lO
MzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxkZXNjcmlwdG9yX2RhdGFiYXNlLmggaW5j
bHVkZVxnb29nbGVccHJvdG9idWZcZGVzY3JpcHRvcl9kYXRhYmFzZS5oCi1jb3B5ICR7UFJPVE9C
VUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcZHVyYXRpb24ucGIu
aCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxkdXJhdGlvbi5wYi5oCi1jb3B5ICR7UFJPVE9CVUZf
U09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcZHluYW1pY19tZXNzYWdl
LmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcZHluYW1pY19tZXNzYWdlLmgKLWNvcHkgJHtQUk9U
T0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxlbXB0eS5wYi5o
IGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGVtcHR5LnBiLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VS
Q0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxleHRlbnNpb25fc2V0LmggaW5j
bHVkZVxnb29nbGVccHJvdG9idWZcZXh0ZW5zaW9uX3NldC5oCi1jb3B5ICR7UFJPVE9CVUZfU09V
UkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcZmllbGRfbWFzay5wYi5oIGlu
Y2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGZpZWxkX21hc2sucGIuaAotY29weSAke1BST1RPQlVGX1NP
VVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXGdlbmVyYXRlZF9lbnVtX3Jl
ZmxlY3Rpb24uaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxnZW5lcmF0ZWRfZW51bV9yZWZsZWN0
aW9uLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxw
cm90b2J1ZlxnZW5lcmF0ZWRfZW51bV91dGlsLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcZ2Vu
ZXJhdGVkX2VudW1fdXRpbC5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4u
XHNyY1xnb29nbGVccHJvdG9idWZcZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oIGluY2x1
ZGVcZ29vZ2xlXHByb3RvYnVmXGdlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uaAotY29weSAk
e1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXGdlbmVy
YXRlZF9tZXNzYWdlX3V0aWwuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxnZW5lcmF0ZWRfbWVz
c2FnZV91dGlsLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdv
b2dsZVxwcm90b2J1Zlxpb1xjb2RlZF9zdHJlYW0uaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlxp
b1xjb2RlZF9zdHJlYW0uaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxz
cmNcZ29vZ2xlXHByb3RvYnVmXGlvXGd6aXBfc3RyZWFtLmggaW5jbHVkZVxnb29nbGVccHJvdG9i
dWZcaW9cZ3ppcF9zdHJlYW0uaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwu
LlxzcmNcZ29vZ2xlXHByb3RvYnVmXGlvXHByaW50ZXIuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1
Zlxpb1xwcmludGVyLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3Jj
XGdvb2dsZVxwcm90b2J1Zlxpb1xzdHJ0b2QuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlxpb1xz
dHJ0b2QuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xl
XHByb3RvYnVmXGlvXHRva2VuaXplci5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGlvXHRva2Vu
aXplci5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVc
cHJvdG9idWZcaW9cemVyb19jb3B5X3N0cmVhbS5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXGlv
XHplcm9fY29weV9zdHJlYW0uaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwu
LlxzcmNcZ29vZ2xlXHByb3RvYnVmXGlvXHplcm9fY29weV9zdHJlYW1faW1wbC5oIGluY2x1ZGVc
Z29vZ2xlXHByb3RvYnVmXGlvXHplcm9fY29weV9zdHJlYW1faW1wbC5oCi1jb3B5ICR7UFJPVE9C
VUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcaW9cemVyb19jb3B5
X3N0cmVhbV9pbXBsX2xpdGUuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlxpb1x6ZXJvX2NvcHlf
c3RyZWFtX2ltcGxfbGl0ZS5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4u
XHNyY1xnb29nbGVccHJvdG9idWZcbWFwLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcbWFwLmgK
LWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1
ZlxtYXBfZW50cnkuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxtYXBfZW50cnkuaAotY29weSAk
e1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXG1hcF9l
bnRyeV9saXRlLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcbWFwX2VudHJ5X2xpdGUuaAotY29w
eSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXG1h
cF9maWVsZC5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXG1hcF9maWVsZC5oCi1jb3B5ICR7UFJP
VE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcbWFwX2ZpZWxk
X2lubC5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXG1hcF9maWVsZF9pbmwuaAotY29weSAke1BS
T1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXG1hcF9maWVs
ZF9saXRlLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcbWFwX2ZpZWxkX2xpdGUuaAotY29weSAk
e1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXG1hcF90
eXBlX2hhbmRsZXIuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxtYXBfdHlwZV9oYW5kbGVyLmgK
LWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1
ZlxtZXNzYWdlLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcbWVzc2FnZS5oCi1jb3B5ICR7UFJP
VE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcbWVzc2FnZV9s
aXRlLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcbWVzc2FnZV9saXRlLmgKLWNvcHkgJHtQUk9U
T0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxtZXRhZGF0YS5o
IGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXG1ldGFkYXRhLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VS
Q0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxyZWZsZWN0aW9uLmggaW5jbHVk
ZVxnb29nbGVccHJvdG9idWZccmVmbGVjdGlvbi5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJ
TjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZccmVmbGVjdGlvbl9vcHMuaCBpbmNsdWRl
XGdvb2dsZVxwcm90b2J1ZlxyZWZsZWN0aW9uX29wcy5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNF
X1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZccmVwZWF0ZWRfZmllbGQuaCBpbmNs
dWRlXGdvb2dsZVxwcm90b2J1ZlxyZXBlYXRlZF9maWVsZC5oCi1jb3B5ICR7UFJPVE9CVUZfU09V
UkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZccmVwZWF0ZWRfZmllbGRfcmVm
bGVjdGlvbi5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHJlcGVhdGVkX2ZpZWxkX3JlZmxlY3Rp
b24uaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHBy
b3RvYnVmXHNlcnZpY2UuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzZXJ2aWNlLmgKLWNvcHkg
JHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1Zlxzb3Vy
Y2VfY29udGV4dC5wYi5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHNvdXJjZV9jb250ZXh0LnBi
LmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90
b2J1ZlxzdHJ1Y3QucGIuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHJ1Y3QucGIuaAotY29w
eSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXHN0
dWJzXGF0b21pY19zZXF1ZW5jZV9udW0uaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xh
dG9taWNfc2VxdWVuY2VfbnVtLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1c
Li5cc3JjXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xhdG9taWNvcHMuaCBpbmNsdWRlXGdvb2dsZVxw
cm90b2J1ZlxzdHVic1xhdG9taWNvcHMuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9Q
QVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXGF0b21pY29wc19pbnRlcm5hbHNfYXJt
NjRfZ2NjLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcc3R1YnNcYXRvbWljb3BzX2ludGVybmFs
c19hcm02NF9nY2MuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNc
Z29vZ2xlXHByb3RvYnVmXHN0dWJzXGF0b21pY29wc19pbnRlcm5hbHNfYXJtX2djYy5oIGluY2x1
ZGVcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXGF0b21pY29wc19pbnRlcm5hbHNfYXJtX2djYy5oCi1j
b3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZc
c3R1YnNcYXRvbWljb3BzX2ludGVybmFsc19hcm1fcW54LmggaW5jbHVkZVxnb29nbGVccHJvdG9i
dWZcc3R1YnNcYXRvbWljb3BzX2ludGVybmFsc19hcm1fcW54LmgKLWNvcHkgJHtQUk9UT0JVRl9T
T1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xhdG9taWNvcHNf
aW50ZXJuYWxzX2F0b21pY3dvcmRfY29tcGF0LmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcc3R1
YnNcYXRvbWljb3BzX2ludGVybmFsc19hdG9taWN3b3JkX2NvbXBhdC5oCi1jb3B5ICR7UFJPVE9C
VUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcc3R1YnNcYXRvbWlj
b3BzX2ludGVybmFsc19nZW5lcmljX2djYy5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHN0dWJz
XGF0b21pY29wc19pbnRlcm5hbHNfZ2VuZXJpY19nY2MuaAotY29weSAke1BST1RPQlVGX1NPVVJD
RV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXGF0b21pY29wc19pbnRl
cm5hbHNfbWFjb3N4LmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcc3R1YnNcYXRvbWljb3BzX2lu
dGVybmFsc19tYWNvc3guaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxz
cmNcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXGF0b21pY29wc19pbnRlcm5hbHNfbWlwc19nY2MuaCBp
bmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xhdG9taWNvcHNfaW50ZXJuYWxzX21pcHNfZ2Nj
LmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90
b2J1ZlxzdHVic1xhdG9taWNvcHNfaW50ZXJuYWxzX3BuYWNsLmggaW5jbHVkZVxnb29nbGVccHJv
dG9idWZcc3R1YnNcYXRvbWljb3BzX2ludGVybmFsc19wbmFjbC5oCi1jb3B5ICR7UFJPVE9CVUZf
U09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcc3R1YnNcYXRvbWljb3Bz
X2ludGVybmFsc19wb3dlci5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXGF0b21pY29w
c19pbnRlcm5hbHNfcG93ZXIuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwu
LlxzcmNcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXGF0b21pY29wc19pbnRlcm5hbHNfc29sYXJpcy5o
IGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXGF0b21pY29wc19pbnRlcm5hbHNfc29sYXJp
cy5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJv
dG9idWZcc3R1YnNcYXRvbWljb3BzX2ludGVybmFsc190c2FuLmggaW5jbHVkZVxnb29nbGVccHJv
dG9idWZcc3R1YnNcYXRvbWljb3BzX2ludGVybmFsc190c2FuLmgKLWNvcHkgJHtQUk9UT0JVRl9T
T1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xhdG9taWNvcHNf
aW50ZXJuYWxzX3g4Nl9nY2MuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xhdG9taWNv
cHNfaW50ZXJuYWxzX3g4Nl9nY2MuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRI
fVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXGF0b21pY29wc19pbnRlcm5hbHNfeDg2X21z
dmMuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xhdG9taWNvcHNfaW50ZXJuYWxzX3g4
Nl9tc3ZjLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2ds
ZVxwcm90b2J1ZlxzdHVic1xieXRlc3RyZWFtLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcc3R1
YnNcYnl0ZXN0cmVhbS5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNy
Y1xnb29nbGVccHJvdG9idWZcc3R1YnNcY2FsbGJhY2suaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1
ZlxzdHVic1xjYWxsYmFjay5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4u
XHNyY1xnb29nbGVccHJvdG9idWZcc3R1YnNcY2FzdHMuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1
ZlxzdHVic1xjYXN0cy5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNy
Y1xnb29nbGVccHJvdG9idWZcc3R1YnNcY29tbW9uLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZc
c3R1YnNcY29tbW9uLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3Jj
XGdvb2dsZVxwcm90b2J1ZlxzdHVic1xmYXN0bWVtLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZc
c3R1YnNcZmFzdG1lbS5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNy
Y1xnb29nbGVccHJvdG9idWZcc3R1YnNcaGFzaC5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHN0
dWJzXGhhc2guaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29v
Z2xlXHByb3RvYnVmXHN0dWJzXGxvZ2dpbmcuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVi
c1xsb2dnaW5nLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdv
b2dsZVxwcm90b2J1ZlxzdHVic1xtYWNyb3MuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVi
c1xtYWNyb3MuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29v
Z2xlXHByb3RvYnVmXHN0dWJzXG11dGV4LmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcc3R1YnNc
bXV0ZXguaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xl
XHByb3RvYnVmXHN0dWJzXG9uY2UuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xvbmNl
LmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90
b2J1ZlxzdHVic1xwbGF0Zm9ybV9tYWNyb3MuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVi
c1xwbGF0Zm9ybV9tYWNyb3MuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwu
LlxzcmNcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXHBvcnQuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1
ZlxzdHVic1xwb3J0LmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3Jj
XGdvb2dsZVxwcm90b2J1ZlxzdHVic1xzY29wZWRfcHRyLmggaW5jbHVkZVxnb29nbGVccHJvdG9i
dWZcc3R1YnNcc2NvcGVkX3B0ci5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9
XC4uXHNyY1xnb29nbGVccHJvdG9idWZcc3R1YnNcc2hhcmVkX3B0ci5oIGluY2x1ZGVcZ29vZ2xl
XHByb3RvYnVmXHN0dWJzXHNoYXJlZF9wdHIuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4z
Ml9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXHNpbmdsZXRvbi5oIGluY2x1ZGVc
Z29vZ2xlXHByb3RvYnVmXHN0dWJzXHNpbmdsZXRvbi5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNF
X1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcc3R1YnNcc3RhdHVzLmggaW5jbHVk
ZVxnb29nbGVccHJvdG9idWZcc3R1YnNcc3RhdHVzLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0Vf
V0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xzdGxfdXRpbC5oIGluY2x1
ZGVcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXHN0bF91dGlsLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VS
Q0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxzdHVic1xzdHJpbmdwaWVjZS5o
IGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHN0dWJzXHN0cmluZ3BpZWNlLmgKLWNvcHkgJHtQUk9U
T0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxzdHVic1x0ZW1w
bGF0ZV91dGlsLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcc3R1YnNcdGVtcGxhdGVfdXRpbC5o
Ci1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9i
dWZcc3R1YnNcdHlwZV90cmFpdHMuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1ZlxzdHVic1x0eXBl
X3RyYWl0cy5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29n
bGVccHJvdG9idWZcdGV4dF9mb3JtYXQuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlx0ZXh0X2Zv
cm1hdC5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVc
cHJvdG9idWZcdGltZXN0YW1wLnBiLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcdGltZXN0YW1w
LnBiLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxw
cm90b2J1Zlx0eXBlLnBiLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcdHlwZS5wYi5oCi1jb3B5
ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcdW5r
bm93bl9maWVsZF9zZXQuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlx1bmtub3duX2ZpZWxkX3Nl
dC5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJv
dG9idWZcdXRpbFxmaWVsZF9jb21wYXJhdG9yLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcdXRp
bFxmaWVsZF9jb21wYXJhdG9yLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VSQ0VfV0lOMzJfUEFUSH1c
Li5cc3JjXGdvb2dsZVxwcm90b2J1Zlx1dGlsXGZpZWxkX21hc2tfdXRpbC5oIGluY2x1ZGVcZ29v
Z2xlXHByb3RvYnVmXHV0aWxcZmllbGRfbWFza191dGlsLmgKLWNvcHkgJHtQUk9UT0JVRl9TT1VS
Q0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1Zlx1dGlsXGpzb25fdXRpbC5oIGlu
Y2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHV0aWxcanNvbl91dGlsLmgKLWNvcHkgJHtQUk9UT0JVRl9T
T1VSQ0VfV0lOMzJfUEFUSH1cLi5cc3JjXGdvb2dsZVxwcm90b2J1Zlx1dGlsXG1lc3NhZ2VfZGlm
ZmVyZW5jZXIuaCBpbmNsdWRlXGdvb2dsZVxwcm90b2J1Zlx1dGlsXG1lc3NhZ2VfZGlmZmVyZW5j
ZXIuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHBy
b3RvYnVmXHV0aWxcdGltZV91dGlsLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcdXRpbFx0aW1l
X3V0aWwuaAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xl
XHByb3RvYnVmXHV0aWxcdHlwZV9yZXNvbHZlci5oIGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHV0
aWxcdHlwZV9yZXNvbHZlci5oCi1jb3B5ICR7UFJPVE9CVUZfU09VUkNFX1dJTjMyX1BBVEh9XC4u
XHNyY1xnb29nbGVccHJvdG9idWZcdXRpbFx0eXBlX3Jlc29sdmVyX3V0aWwuaCBpbmNsdWRlXGdv
b2dsZVxwcm90b2J1Zlx1dGlsXHR5cGVfcmVzb2x2ZXJfdXRpbC5oCi1jb3B5ICR7UFJPVE9CVUZf
U09VUkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcd2lyZV9mb3JtYXQuaCBp
bmNsdWRlXGdvb2dsZVxwcm90b2J1Zlx3aXJlX2Zvcm1hdC5oCi1jb3B5ICR7UFJPVE9CVUZfU09V
UkNFX1dJTjMyX1BBVEh9XC4uXHNyY1xnb29nbGVccHJvdG9idWZcd2lyZV9mb3JtYXRfbGl0ZS5o
IGluY2x1ZGVcZ29vZ2xlXHByb3RvYnVmXHdpcmVfZm9ybWF0X2xpdGUuaAotY29weSAke1BST1RP
QlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXHdpcmVfZm9ybWF0
X2xpdGVfaW5sLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcd2lyZV9mb3JtYXRfbGl0ZV9pbmwu
aAotY29weSAke1BST1RPQlVGX1NPVVJDRV9XSU4zMl9QQVRIfVwuLlxzcmNcZ29vZ2xlXHByb3Rv
YnVmXHdyYXBwZXJzLnBiLmggaW5jbHVkZVxnb29nbGVccHJvdG9idWZcd3JhcHBlcnMucGIuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9jbWFrZS9pbnN0YWxsLmNtYWtlIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jbWFrZS9pbnN0YWxsLmNtYWtlCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmI0MjY1ZDQ1MDIxNDMxN2M4Njk5Njg3Y2FiYmRk
ODFmOWU1MjVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y21ha2UvaW5zdGFsbC5jbWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi1pbmNs
dWRlKEdOVUluc3RhbGxEaXJzKQotCi1mb3JlYWNoKF9saWJyYXJ5Ci0gIGxpYnByb3RvYnVmLWxp
dGUKLSAgbGlicHJvdG9idWYKLSAgbGlicHJvdG9jKQotICBzZXRfcHJvcGVydHkoVEFSR0VUICR7
X2xpYnJhcnl9Ci0gICAgUFJPUEVSVFkgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAg
ICAkPElOU1RBTExfSU5URVJGQUNFOiR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfT4pCi0gIGlu
c3RhbGwoVEFSR0VUUyAke19saWJyYXJ5fSBFWFBPUlQgcHJvdG9idWYtdGFyZ2V0cwotICAgIFJV
TlRJTUUgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0JJTkRJUn0gQ09NUE9ORU5UICR7X2xp
YnJhcnl9Ci0gICAgTElCUkFSWSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfSBD
T01QT05FTlQgJHtfbGlicmFyeX0KLSAgICBBUkNISVZFIERFU1RJTkFUSU9OICR7Q01BS0VfSU5T
VEFMTF9MSUJESVJ9IENPTVBPTkVOVCAke19saWJyYXJ5fSkKLWVuZGZvcmVhY2goKQotCi1pbnN0
YWxsKFRBUkdFVFMgcHJvdG9jIEVYUE9SVCBwcm90b2J1Zi10YXJnZXRzCi0gIFJVTlRJTUUgREVT
VElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0JJTkRJUn0gQ09NUE9ORU5UIHByb3RvYykKLQotaWYo
VFJVRSkKLSAgZmlsZShTVFJJTkdTIGV4dHJhY3RfaW5jbHVkZXMuYmF0LmluIF9leHRyYWN0X3N0
cmluZ3MKLSAgICBSRUdFWCAiXmNvcHkiKQotICBmb3JlYWNoKF9leHRyYWN0X3N0cmluZyAke19l
eHRyYWN0X3N0cmluZ3N9KQotICAgIHN0cmluZyhSRVBMQUNFICJjb3B5IFwke1BST1RPQlVGX1NP
VVJDRV9XSU4zMl9QQVRIfVxcIiAiIgotICAgICAgX2V4dHJhY3Rfc3RyaW5nICR7X2V4dHJhY3Rf
c3RyaW5nfSkKLSAgICBzdHJpbmcoUkVQTEFDRSAiXFwiICIvIiBfZXh0cmFjdF9zdHJpbmcgJHtf
ZXh0cmFjdF9zdHJpbmd9KQotICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiXlteIF0rIgotICAgICAg
X2V4dHJhY3RfZnJvbSAke19leHRyYWN0X3N0cmluZ30pCi0gICAgc3RyaW5nKFJFR0VYIFJFUExB
Q0UgIl4ke19leHRyYWN0X2Zyb219IChbXiRdKykiICJcXDEiCi0gICAgICBfZXh0cmFjdF90byAk
e19leHRyYWN0X3N0cmluZ30pCi0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfZXh0cmFjdF9m
cm9tICIke3Byb3RvYnVmX1NPVVJDRV9ESVJ9LyR7X2V4dHJhY3RfZnJvbX0iIEFCU09MVVRFKQot
ICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2V4dHJhY3RfbmFtZSAke19leHRyYWN0X3RvfSBO
QU1FKQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2V4dHJhY3RfdG8gJHtfZXh0cmFjdF90
b30gUEFUSCkKLSAgICBzdHJpbmcoUkVQTEFDRSAiaW5jbHVkZS8iICIke0NNQUtFX0lOU1RBTExf
SU5DTFVERURJUn0vIgotICAgICAgX2V4dHJhY3RfdG8gIiR7X2V4dHJhY3RfdG99IikKLSAgICBp
ZihFWElTVFMgIiR7X2V4dHJhY3RfZnJvbX0iKQotICAgICAgaW5zdGFsbChGSUxFUyAiJHtfZXh0
cmFjdF9mcm9tfSIKLSAgICAgICAgREVTVElOQVRJT04gIiR7X2V4dHJhY3RfdG99IgotICAgICAg
ICBDT01QT05FTlQgcHJvdG9idWYtaGVhZGVycwotICAgICAgICBSRU5BTUUgIiR7X2V4dHJhY3Rf
bmFtZX0iKQotICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShBVVRIT1JfV0FSTklORyAiVGhlIGZp
bGUgXCIke19leHRyYWN0X2Zyb219XCIgaXMgbGlzdGVkIGluICIKLSAgICAgICAgIlwiJHtwcm90
b2J1Zl9TT1VSQ0VfRElSfS9jbWFrZS9leHRyYWN0X2luY2x1ZGVzLmJhdC5pblwiICIKLSAgICAg
ICAgImJ1dCB0aGVyZSBub3QgZXhpc3RzLiBUaGUgZmlsZSB3aWxsIG5vdCBiZSBpbnN0YWxsZWQu
IikKLSAgICBlbmRpZigpCi0gIGVuZGZvcmVhY2goKQotZW5kaWYoKQotCi0jIEludGVybmFsIGZ1
bmN0aW9uIGZvciBwYXJzaW5nIGF1dG8gdG9vbHMgc2NyaXB0cwotZnVuY3Rpb24oX3Byb3RvYnVm
X2F1dG9fbGlzdCBGSUxFX05BTUUgVkFSSUFCTEUpCi0gIGZpbGUoU1RSSU5HUyAke0ZJTEVfTkFN
RX0gX3N0cmluZ3MpCi0gIHNldChfbGlzdCkKLSAgZm9yZWFjaChfc3RyaW5nICR7X3N0cmluZ3N9
KQotICAgIHNldChfZm91bmQpCi0gICAgc3RyaW5nKFJFR0VYIE1BVENIICJeWyBcdF0qJHtWQVJJ
QUJMRX1bIFx0XSo9WyBcdF0qIiBfZm91bmQgIiR7X3N0cmluZ30iKQotICAgIGlmKF9mb3VuZCkK
LSAgICAgIHN0cmluZyhMRU5HVEggIiR7X2ZvdW5kfSIgX2xlbmd0aCkKLSAgICAgIHN0cmluZyhT
VUJTVFJJTkcgIiR7X3N0cmluZ30iICR7X2xlbmd0aH0gLTEgX2RyYWZ0X2xpc3QpCi0gICAgICBm
b3JlYWNoKF9pdGVtICR7X2RyYWZ0X2xpc3R9KQotICAgICAgICBzdHJpbmcoU1RSSVAgIiR7X2l0
ZW19IiBfaXRlbSkKLSAgICAgICAgbGlzdChBUFBFTkQgX2xpc3QgIiR7X2l0ZW19IikKLSAgICAg
IGVuZGZvcmVhY2goKQotICAgIGVuZGlmKCkKLSAgZW5kZm9yZWFjaCgpCi0gIHNldCgke1ZBUklB
QkxFfSAke19saXN0fSBQQVJFTlRfU0NPUEUpCi1lbmRmdW5jdGlvbigpCi0KLSMgSW5zdGFsbCB3
ZWxsLWtub3duIHR5cGUgcHJvdG8gZmlsZXMKLV9wcm90b2J1Zl9hdXRvX2xpc3QoIi4uL3NyYy9N
YWtlZmlsZS5hbSIgbm9iYXNlX2Rpc3RfcHJvdG9fREFUQSkKLWZvcmVhY2goX2ZpbGUgJHtub2Jh
c2VfZGlzdF9wcm90b19EQVRBfSkKLSAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfZmlsZV9mcm9t
ICIuLi9zcmMvJHtfZmlsZX0iIEFCU09MVVRFKQotICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9m
aWxlX25hbWUgJHtfZmlsZX0gTkFNRSkKLSAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfZmlsZV9w
YXRoICR7X2ZpbGV9IFBBVEgpCi0gIGlmKEVYSVNUUyAiJHtfZmlsZV9mcm9tfSIpCi0gICAgaW5z
dGFsbChGSUxFUyAiJHtfZmlsZV9mcm9tfSIKLSAgICAgIERFU1RJTkFUSU9OICIke0NNQUtFX0lO
U1RBTExfSU5DTFVERURJUn0vJHtfZmlsZV9wYXRofSIKLSAgICAgIENPTVBPTkVOVCBwcm90b2J1
Zi1wcm90b3MKLSAgICAgIFJFTkFNRSAiJHtfZmlsZV9uYW1lfSIpCi0gIGVsc2UoKQotICAgIG1l
c3NhZ2UoQVVUSE9SX1dBUk5JTkcgIlRoZSBmaWxlIFwiJHtfZmlsZV9mcm9tfVwiIGlzIGxpc3Rl
ZCBpbiAiCi0gICAgICAiXCIke3Byb3RvYnVmX1NPVVJDRV9ESVJ9Ly4uL3NyYy9NYWtlZmlsZS5h
bVwiIGFzIG5vYmFzZV9kaXN0X3Byb3RvX0RBVEEgIgotICAgICAgImJ1dCB0aGVyZSBub3QgZXhp
c3RzLiBUaGUgZmlsZSB3aWxsIG5vdCBiZSBpbnN0YWxsZWQuIikKLSAgZW5kaWYoKQotZW5kZm9y
ZWFjaCgpCi0KLSMgRXhwb3J0IGNvbmZpZ3VyYXRpb24KLQotaW5zdGFsbChFWFBPUlQgcHJvdG9i
dWYtdGFyZ2V0cwotICBERVNUSU5BVElPTiAibGliL2NtYWtlL3Byb3RvYnVmIgotICBDT01QT05F
TlQgcHJvdG9idWYtZXhwb3J0KQotCi1jb25maWd1cmVfZmlsZShwcm90b2J1Zi1jb25maWcuY21h
a2UuaW4KLSAgcHJvdG9idWYtY29uZmlnLmNtYWtlIEBPTkxZKQotY29uZmlndXJlX2ZpbGUocHJv
dG9idWYtY29uZmlnLXZlcnNpb24uY21ha2UuaW4KLSAgcHJvdG9idWYtY29uZmlnLXZlcnNpb24u
Y21ha2UgQE9OTFkpCi1jb25maWd1cmVfZmlsZShwcm90b2J1Zi1tb2R1bGUuY21ha2UuaW4KLSAg
cHJvdG9idWYtbW9kdWxlLmNtYWtlIEBPTkxZKQotCi1pbnN0YWxsKEZJTEVTCi0gICIke3Byb3Rv
YnVmX0JJTkFSWV9ESVJ9L3Byb3RvYnVmLWNvbmZpZy5jbWFrZSIKLSAgIiR7cHJvdG9idWZfQklO
QVJZX0RJUn0vcHJvdG9idWYtY29uZmlnLXZlcnNpb24uY21ha2UiCi0gICIke3Byb3RvYnVmX0JJ
TkFSWV9ESVJ9L3Byb3RvYnVmLW1vZHVsZS5jbWFrZSIKLSAgREVTVElOQVRJT04gImxpYi9jbWFr
ZS9wcm90b2J1ZiIKLSAgQ09NUE9ORU5UIHByb3RvYnVmLWV4cG9ydCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21h
a2UvbGlicHJvdG9idWYtbGl0ZS5jbWFrZSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21ha2UvbGlicHJvdG9idWYtbGl0ZS5jbWFrZQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM2YjA1MTcwN2RiMjkxZmQyOTc4YWI5ZDlm
NTg5MzM5MzY2OWRlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2NtYWtlL2xpYnByb3RvYnVmLWxpdGUuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSwzOCAr
MCwwIEBACi1zZXQobGlicHJvdG9idWZfbGl0ZV9maWxlcwotICAke3Byb3RvYnVmX3NvdXJjZV9k
aXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvYXJlbmEuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGly
fS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FyZW5hc3RyaW5nLmNjCi0gICR7cHJvdG9idWZfc291cmNl
X2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0LmNjCi0gICR7cHJvdG9idWZf
c291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmNj
Ci0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9z
dHJlYW0uY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lv
L3plcm9fY29weV9zdHJlYW0uY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbF9saXRlLmNjCi0gICR7cHJvdG9idWZf
c291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlX2xpdGUuY2MKLSAgJHtwcm90
b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmNjCi0g
ICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNv
cHNfaW50ZXJuYWxzX3g4Nl9nY2MuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfeDg2X21zdmMuY2MKLSAgJHtw
cm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2J5dGVzdHJlYW0u
Y2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Nv
bW1vbi5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvaW50MTI4LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9vbmNlLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9zdGF0dXMuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3N0dWJzL3N0YXR1c29yLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3Jj
L2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwaWVjZS5jYwotICAke3Byb3RvYnVmX3NvdXJj
ZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncHJpbnRmLmNjCi0gICR7cHJv
dG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1Y3R1cmFsbHlf
dmFsaWQuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0cnV0aWwuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3RpbWUuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3By
b3RvYnVmL3dpcmVfZm9ybWF0X2xpdGUuY2MKLSkKLQotYWRkX2xpYnJhcnkobGlicHJvdG9idWYt
bGl0ZSAke3Byb3RvYnVmX1NIQVJFRF9PUl9TVEFUSUN9Ci0gICR7bGlicHJvdG9idWZfbGl0ZV9m
aWxlc30pCi10YXJnZXRfbGlua19saWJyYXJpZXMobGlicHJvdG9idWYtbGl0ZSAke0NNQUtFX1RI
UkVBRF9MSUJTX0lOSVR9KQotdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMobGlicHJvdG9idWYt
bGl0ZSBQVUJMSUMgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMpCi1pZihNU1ZDIEFORCBwcm90
b2J1Zl9CVUlMRF9TSEFSRURfTElCUykKLSAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMobGli
cHJvdG9idWYtbGl0ZQotICAgIFBVQkxJQyAgUFJPVE9CVUZfVVNFX0RMTFMKLSAgICBQUklWQVRF
IExJQlBST1RPQlVGX0VYUE9SVFMpCi1lbmRpZigpCi1zZXRfdGFyZ2V0X3Byb3BlcnRpZXMobGli
cHJvdG9idWYtbGl0ZSBQUk9QRVJUSUVTCi0gICAgT1VUUFVUX05BTUUgJHtMSUJfUFJFRklYfXBy
b3RvYnVmLWxpdGUKLSAgICBERUJVR19QT1NURklYICIke3Byb3RvYnVmX0RFQlVHX1BPU1RGSVh9
IikKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvY21ha2UvbGlicHJvdG9idWYuY21ha2UgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NtYWtlL2xpYnByb3RvYnVm
LmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTMwYzFjYTFlY2ZlYjA4MTFl
YTQxZThmMjk0MTMxZGYxZDFlYmFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY21ha2UvbGlicHJvdG9idWYuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSw2
OCArMCwwIEBACi1zZXQobGlicHJvdG9idWZfZmlsZXMKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGly
fS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FueS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3Ny
Yy9nb29nbGUvcHJvdG9idWYvYW55LnBiLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3Jj
L2dvb2dsZS9wcm90b2J1Zi9hcGkucGIuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ltcG9ydGVyLmNjCi0gICR7cHJvdG9idWZfc291cmNl
X2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wYXJzZXIuY2MKLSAgJHtwcm90b2J1
Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuY2MKLSAgJHtwcm90
b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuY2MKLSAg
JHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfZGF0
YWJhc2UuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2R1
cmF0aW9uLnBiLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1
Zi9keW5hbWljX21lc3NhZ2UuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2VtcHR5LnBiLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2ds
ZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0X2hlYXZ5LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rp
cn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNrLnBiLmNjCi0gICR7cHJvdG9idWZfc291
cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV9yZWZsZWN0aW9u
LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9nemlw
X3N0cmVhbS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYv
aW8vcHJpbnRlci5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9i
dWYvaW8vc3RydG9kLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90
b2J1Zi9pby90b2tlbml6ZXIuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5jYwotICAke3Byb3RvYnVmX3NvdXJj
ZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkLmNjCi0gICR7cHJvdG9idWZfc291
cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmNjCi0gICR7cHJvdG9idWZfc291
cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX29wcy5jYwotICAke3Byb3Rv
YnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvc2VydmljZS5jYwotICAke3Byb3Rv
YnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucGIuY2MK
LSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wYi5j
YwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbWF0
aGxpbWl0cy5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYv
c3R1YnMvc3Vic3RpdHV0ZS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUv
cHJvdG9idWYvdGV4dF9mb3JtYXQuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wYi5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3Ny
Yy9nb29nbGUvcHJvdG9idWYvdHlwZS5wYi5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3Ny
Yy9nb29nbGUvcHJvdG9idWYvdW5rbm93bl9maWVsZF9zZXQuY2MKLSAgJHtwcm90b2J1Zl9zb3Vy
Y2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvZmllbGRfY29tcGFyYXRvci5jYwotICAk
e3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9tYXNr
X3V0aWwuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvZGF0YXBpZWNlLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dv
b2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2RlZmF1bHRfdmFsdWVfb2JqZWN0d3JpdGVyLmNj
Ci0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVy
bmFsL2Vycm9yX2xpc3RlbmVyLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2ZpZWxkX21hc2tfdXRpbGl0eS5jYwotICAke3Byb3Rv
YnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX2Vz
Y2FwaW5nLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi91
dGlsL2ludGVybmFsL2pzb25fb2JqZWN0d3JpdGVyLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rp
cn0vc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fc3RyZWFtX3BhcnNlci5j
YwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRl
cm5hbC9vYmplY3Rfd3JpdGVyLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3RvX3dyaXRlci5jYwotICAke3Byb3RvYnVmX3Nv
dXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9v
YmplY3Rzb3VyY2UuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0d3JpdGVyLmNjCi0gICR7cHJvdG9i
dWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5m
by5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9p
bnRlcm5hbC90eXBlX2luZm9fdGVzdF9oZWxwZXIuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGly
fS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdXRpbGl0eS5jYwotICAke3Byb3Rv
YnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWwuY2MKLSAg
JHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9k
aWZmZXJlbmNlci5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9i
dWYvdXRpbC90aW1lX3V0aWwuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZlcl91dGlsLmNjCi0gICR7cHJvdG9idWZfc291cmNl
X2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5jYwotICAke3Byb3RvYnVmX3Nv
dXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucGIuY2MKLSkKLQotYWRkX2xp
YnJhcnkobGlicHJvdG9idWYgJHtwcm90b2J1Zl9TSEFSRURfT1JfU1RBVElDfQotICAke2xpYnBy
b3RvYnVmX2xpdGVfZmlsZXN9ICR7bGlicHJvdG9idWZfZmlsZXN9KQotdGFyZ2V0X2xpbmtfbGli
cmFyaWVzKGxpYnByb3RvYnVmICR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0gJHtaTElCX0xJQlJB
UklFU30pCi10YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhsaWJwcm90b2J1ZiBQVUJMSUMgJHtw
cm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMpCi1pZihNU1ZDIEFORCBwcm90b2J1Zl9CVUlMRF9TSEFS
RURfTElCUykKLSAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMobGlicHJvdG9idWYKLSAgICBQ
VUJMSUMgIFBST1RPQlVGX1VTRV9ETExTCi0gICAgUFJJVkFURSBMSUJQUk9UT0JVRl9FWFBPUlRT
KQotZW5kaWYoKQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGxpYnByb3RvYnVmIFBST1BFUlRJRVMK
LSAgICBPVVRQVVRfTkFNRSAke0xJQl9QUkVGSVh9cHJvdG9idWYKLSAgICBERUJVR19QT1NURklY
ICIke3Byb3RvYnVmX0RFQlVHX1BPU1RGSVh9IikKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21ha2UvbGlicHJvdG9j
LmNtYWtlIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jbWFrZS9saWJwcm90b2MuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDhkZjg5ODZhMTEzMzQ2MTE0ZTgyYjE3MzBmMGQ0ODQzNjZkZjI2YjAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jbWFrZS9saWJwcm90b2MuY21ha2UK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotc2V0KGxpYnByb3RvY19maWxlcwotICAk
e3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29kZV9n
ZW5lcmF0b3IuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2UuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2Vf
ZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZW51bS5jYwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9l
bnVtX2ZpZWxkLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jcHAvY3BwX2V4dGVuc2lvbi5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9maWVsZC5jYwotICAke3Byb3Rv
YnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9maWxl
LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jcHAvY3BwX2dlbmVyYXRvci5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9oZWxwZXJzLmNjCi0gICR7cHJvdG9idWZfc291
cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21hcF9maWVsZC5j
YwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3BwL2NwcF9tZXNzYWdlLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3NhZ2VfZmllbGQuY2MKLSAgJHtwcm90b2J1Zl9z
b3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfcHJpbWl0aXZl
X2ZpZWxkLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jcHAvY3BwX3NlcnZpY2UuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfc3RyaW5nX2ZpZWxkLmNjCi0gICR7cHJv
dG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3No
YXJwX2RvY19jb21tZW50LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW0uY2MKLSAgJHtwcm90b2J1Zl9zb3Vy
Y2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZW51bV9m
aWVsZC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvY3NoYXJwL2NzaGFycF9maWVsZF9iYXNlLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rp
cn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2dlbmVyYXRvci5j
YwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3NoYXJwL2NzaGFycF9oZWxwZXJzLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21hcF9maWVsZC5jYwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9tZXNzYWdlLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2VfZmllbGQuY2MKLSAgJHtwcm90b2J1
Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBf
cHJpbWl0aXZlX2ZpZWxkLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlZmxlY3Rpb25fY2xhc3MuY2MKLSAgJHtw
cm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9j
c2hhcnBfcmVwZWF0ZWRfZW51bV9maWVsZC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRlZF9tZXNzYWdl
X2ZpZWxkLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX3ByaW1pdGl2ZV9maWVsZC5jYwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9zb3VyY2VfZ2VuZXJhdG9yX2Jhc2UuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfd3JhcHBlcl9maWVsZC5j
YwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX2NvbnRleHQuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5jYwotICAke3Byb3RvYnVm
X3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW0u
Y2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9lbnVtX2ZpZWxkLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9maWVsZF9saXRlLmNjCi0gICR7
cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfZW51bV9saXRlLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZXh0ZW5zaW9uLmNjCi0gICR7cHJvdG9idWZfc291cmNl
X2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZXh0ZW5zaW9uX2xp
dGUuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9maWVsZC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2ZpbGUuY2MKLSAgJHtwcm90b2J1Zl9zb3Vy
Y2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3Iu
Y2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9nZW5lcmF0b3JfZmFjdG9yeS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuY2MKLSAgJHtw
cm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2
YV9sYXp5X21lc3NhZ2VfZmllbGQuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9sYXp5X21lc3NhZ2VfZmllbGRfbGl0ZS5j
YwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX21hcF9maWVsZC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21hcF9maWVsZF9saXRlLmNjCi0gICR7cHJv
dG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
bWVzc2FnZS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfYnVpbGRlci5jYwotICAke3Byb3RvYnVmX3NvdXJj
ZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfYnVp
bGRlcl9saXRlLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9maWVsZC5jYwotICAke3Byb3RvYnVmX3NvdXJj
ZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfZmll
bGRfbGl0ZS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfbGl0ZS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9k
aXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX25hbWVfcmVzb2x2ZXIu
Y2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9wcmltaXRpdmVfZmllbGQuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9wcmltaXRpdmVfZmllbGRfbGl0
ZS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvamF2YS9qYXZhX3NlcnZpY2UuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zaGFyZWRfY29kZV9nZW5lcmF0b3IuY2MK
LSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9zdHJpbmdfZmllbGQuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zdHJpbmdfZmllbGRfbGl0ZS5jYwotICAk
e3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5h
bm8vamF2YW5hbm9fZW51bS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZW51bV9maWVsZC5jYwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8v
amF2YW5hbm9fZXh0ZW5zaW9uLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWVsZC5jYwotICAke3Byb3Rv
YnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2
YW5hbm9fZmlsZS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZ2VuZXJhdG9yLmNjCi0gICR7cHJvdG9idWZf
c291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFu
b19oZWxwZXJzLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tYXBfZmllbGQuY2MKLSAgJHtwcm90b2J1Zl9z
b3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5v
X21lc3NhZ2UuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2VfZmllbGQuY2MKLSAgJHtwcm90b2J1
Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFu
YW5vX3ByaW1pdGl2ZV9maWVsZC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvanMvanNfZ2VuZXJhdG9yLmNjCi0gICR7cHJvdG9idWZfc291
cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2
ZWNfZW51bS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW1fZmllbGQuY2MKLSAgJHtwcm90b2J1
Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2Jq
ZWN0aXZlY19leHRlbnNpb24uY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWVsZC5jYwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZl
Yy9vYmplY3RpdmVjX2ZpbGUuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19nZW5lcmF0b3IuY2MKLSAg
JHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVj
dGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWFwX2ZpZWxk
LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWVzc2FnZS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9k
aXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21l
c3NhZ2VfZmllbGQuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19vbmVvZi5jYwotICAke3Byb3RvYnVm
X3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmpl
Y3RpdmVjX3ByaW1pdGl2ZV9maWVsZC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rp
cn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucGIuY2MKLSAgJHtwcm90b2J1
Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3B5dGhvbi9weXRob25f
Z2VuZXJhdG9yLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9ydWJ5L3J1YnlfZ2VuZXJhdG9yLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rp
cn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9zdWJwcm9jZXNzLmNjCi0gICR7cHJvdG9i
dWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci96aXBfd3JpdGVyLmNj
Ci0pCi0KLWFkZF9saWJyYXJ5KGxpYnByb3RvYyAke3Byb3RvYnVmX1NIQVJFRF9PUl9TVEFUSUN9
Ci0gICR7bGlicHJvdG9jX2ZpbGVzfSkKLXRhcmdldF9saW5rX2xpYnJhcmllcyhsaWJwcm90b2Mg
bGlicHJvdG9idWYpCi1pZihNU1ZDIEFORCBwcm90b2J1Zl9CVUlMRF9TSEFSRURfTElCUykKLSAg
dGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMobGlicHJvdG9jCi0gICAgUFVCTElDICBQUk9UT0JV
Rl9VU0VfRExMUwotICAgIFBSSVZBVEUgTElCUFJPVE9DX0VYUE9SVFMpCi1lbmRpZigpCi1zZXRf
dGFyZ2V0X3Byb3BlcnRpZXMobGlicHJvdG9jIFBST1BFUlRJRVMKLSAgICBDT01QSUxFX0RFRklO
SVRJT05TIExJQlBST1RPQ19FWFBPUlRTCi0gICAgT1VUUFVUX05BTUUgJHtMSUJfUFJFRklYfXBy
b3RvYwotICAgIERFQlVHX1BPU1RGSVggIiR7cHJvdG9idWZfREVCVUdfUE9TVEZJWH0iKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jbWFrZS9wcm90b2J1Zi1jb25maWctdmVyc2lvbi5jbWFrZS5pbiBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21ha2UvcHJv
dG9idWYtY29uZmlnLXZlcnNpb24uY21ha2UuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFmMTcxYzY2NDk3YTUyYzY3NmQ1ZTkxNDAxZTQ5MWFkMTU2NDkxNTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jbWFrZS9wcm90b2J1Zi1jb25maWct
dmVyc2lvbi5jbWFrZS5pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXNldChQQUNLQUdF
X1ZFUlNJT04gQHByb3RvYnVmX1ZFUlNJT05AKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jbWFrZS9wcm90b2J1Zi1j
b25maWcuY21ha2UuaW4gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NtYWtlL3Byb3RvYnVmLWNvbmZpZy5jbWFrZS5pbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYmIwOTk3Yjg4YmU3ZWRjNmM2MjNhZjFhMjkxMjg2OTViYTVl
MGQ0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NtYWtl
L3Byb3RvYnVmLWNvbmZpZy5jbWFrZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAK
LSMgVmVyc2lvbiBpbmZvIHZhcmlhYmxlcwotc2V0KFBST1RPQlVGX1ZFUlNJT04gICAgICAgICJA
cHJvdG9idWZfVkVSU0lPTkAiKQotc2V0KFBST1RPQlVGX1ZFUlNJT05fU1RSSU5HICJAcHJvdG9i
dWZfVkVSU0lPTl9TVFJJTkdAIikKLQotIyBDdXJyZW50IGRpcgotZ2V0X2ZpbGVuYW1lX2NvbXBv
bmVudChfUFJPVE9CVUZfUEFDS0FHRV9QUkVGSVgKLSAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJ
TEV9IiBQQVRIKQotCi0jIEltcG9ydGVkIHRhcmdldHMKLWluY2x1ZGUoIiR7X1BST1RPQlVGX1BB
Q0tBR0VfUFJFRklYfS9wcm90b2J1Zi10YXJnZXRzLmNtYWtlIikKLQotIyBDb21wdXRlIHRoZSBp
bnN0YWxsYXRpb24gcHJlZml4IHJlbGF0aXZlIHRvIHRoaXMgZmlsZS4KLWdldF9maWxlbmFtZV9j
b21wb25lbnQoX1BST1RPQlVGX0lNUE9SVF9QUkVGSVgKLSAgIiR7X1BST1RPQlVGX1BBQ0tBR0Vf
UFJFRklYfSIgUEFUSCkKLWdldF9maWxlbmFtZV9jb21wb25lbnQoX1BST1RPQlVGX0lNUE9SVF9Q
UkVGSVgKLSAgIiR7X1BST1RPQlVGX0lNUE9SVF9QUkVGSVh9IiBQQVRIKQotZ2V0X2ZpbGVuYW1l
X2NvbXBvbmVudChfUFJPVE9CVUZfSU1QT1JUX1BSRUZJWAotICAiJHtfUFJPVE9CVUZfSU1QT1JU
X1BSRUZJWH0iIFBBVEgpCi0KLSMgQ01ha2UgRmluZFByb3RvYnVmIG1vZHVsZSBjb21wYXRpYmxl
IGZpbGUKLWlmKE5PVCBERUZJTkVEIFBST1RPQlVGX01PRFVMRV9DT01QQVRJQkxFIE9SICIke1BS
T1RPQlVGX01PRFVMRV9DT01QQVRJQkxFfSIpCi0gIGluY2x1ZGUoIiR7X1BST1RPQlVGX1BBQ0tB
R0VfUFJFRklYfS9wcm90b2J1Zi1tb2R1bGUuY21ha2UiKQotZW5kaWYoKQotCi0jIENsZWFudXAg
dGVtcG9yYXJ5IHZhcmlhYmxlcy4KLXNldChfUFJPVE9CVUZfUEFDS0FHRV9QUkVGSVgpCi1zZXQo
X1BST1RPQlVGX0lNUE9SVF9QUkVGSVgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NtYWtlL3Byb3RvYnVmLW1vZHVs
ZS5jbWFrZS5pbiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY21ha2UvcHJvdG9idWYtbW9kdWxlLmNtYWtlLmluCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkODFkYzQ1OWI2YTU0MTM0YzYyOWQ3NDY0NjgxZTgyNmY2ZGM0ZDI2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21ha2UvcHJv
dG9idWYtbW9kdWxlLmNtYWtlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLWlm
KFBST1RPQlVGX1NSQ19ST09UX0ZPTERFUikKLSAgbWVzc2FnZShBVVRIT1JfV0FSTklORyAiVmFy
aWFibGUgUFJPVE9CVUZfU1JDX1JPT1RfRk9MREVSIGRlZmluZWQsIGJ1dCBub3QiCi0gICAgIiB1
c2VkIGluIENPTkZJRyBtb2RlIikKLWVuZGlmKCkKLQotZnVuY3Rpb24oUFJPVE9CVUZfR0VORVJB
VEVfQ1BQIFNSQ1MgSERSUykKLSAgaWYoTk9UIEFSR04pCi0gICAgbWVzc2FnZShTRU5EX0VSUk9S
ICJFcnJvcjogUFJPVE9CVUZfR0VORVJBVEVfQ1BQKCkgY2FsbGVkIHdpdGhvdXQgYW55IHByb3Rv
IGZpbGVzIikKLSAgICByZXR1cm4oKQotICBlbmRpZigpCi0KLSAgaWYoUFJPVE9CVUZfR0VORVJB
VEVfQ1BQX0FQUEVORF9QQVRIKQotICAgICMgQ3JlYXRlIGFuIGluY2x1ZGUgcGF0aCBmb3IgZWFj
aCBmaWxlIHNwZWNpZmllZAotICAgIGZvcmVhY2goRklMICR7QVJHTn0pCi0gICAgICBnZXRfZmls
ZW5hbWVfY29tcG9uZW50KEFCU19GSUwgJHtGSUx9IEFCU09MVVRFKQotICAgICAgZ2V0X2ZpbGVu
YW1lX2NvbXBvbmVudChBQlNfUEFUSCAke0FCU19GSUx9IFBBVEgpCi0gICAgICBsaXN0KEZJTkQg
X3Byb3RvYnVmX2luY2x1ZGVfcGF0aCAke0FCU19QQVRIfSBfY29udGFpbnNfYWxyZWFkeSkKLSAg
ICAgIGlmKCR7X2NvbnRhaW5zX2FscmVhZHl9IEVRVUFMIC0xKQotICAgICAgICAgIGxpc3QoQVBQ
RU5EIF9wcm90b2J1Zl9pbmNsdWRlX3BhdGggLUkgJHtBQlNfUEFUSH0pCi0gICAgICBlbmRpZigp
Ci0gICAgZW5kZm9yZWFjaCgpCi0gIGVsc2UoKQotICAgIHNldChfcHJvdG9idWZfaW5jbHVkZV9w
YXRoIC1JICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKLSAgZW5kaWYoKQotCi0gICMgQWRk
IHdlbGwta25vd24gdHlwZSBwcm90b3MgaW5jbHVkZSBwYXRoCi0gIGxpc3QoQVBQRU5EIF9wcm90
b2J1Zl9pbmNsdWRlX3BhdGgKLSAgICAtSSAiJHtfUFJPVE9CVUZfSU1QT1JUX1BSRUZJWH0vQENN
QUtFX0lOU1RBTExfSU5DTFVERURJUkAiKQotCi0gIGlmKERFRklORUQgUFJPVE9CVUZfSU1QT1JU
X0RJUlMpCi0gICAgZm9yZWFjaChESVIgJHtQUk9UT0JVRl9JTVBPUlRfRElSU30pCi0gICAgICBn
ZXRfZmlsZW5hbWVfY29tcG9uZW50KEFCU19QQVRIICR7RElSfSBBQlNPTFVURSkKLSAgICAgIGxp
c3QoRklORCBfcHJvdG9idWZfaW5jbHVkZV9wYXRoICR7QUJTX1BBVEh9IF9jb250YWluc19hbHJl
YWR5KQotICAgICAgaWYoJHtfY29udGFpbnNfYWxyZWFkeX0gRVFVQUwgLTEpCi0gICAgICAgICAg
bGlzdChBUFBFTkQgX3Byb3RvYnVmX2luY2x1ZGVfcGF0aCAtSSAke0FCU19QQVRIfSkKLSAgICAg
IGVuZGlmKCkKLSAgICBlbmRmb3JlYWNoKCkKLSAgZW5kaWYoKQotCi0gIHNldCgke1NSQ1N9KQot
ICBzZXQoJHtIRFJTfSkKLSAgZm9yZWFjaChGSUwgJHtBUkdOfSkKLSAgICBnZXRfZmlsZW5hbWVf
Y29tcG9uZW50KEFCU19GSUwgJHtGSUx9IEFCU09MVVRFKQotICAgIGdldF9maWxlbmFtZV9jb21w
b25lbnQoRklMX1dFICR7RklMfSBOQU1FX1dFKQotCi0gICAgbGlzdChBUFBFTkQgJHtTUkNTfSAi
JHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7RklMX1dFfS5wYi5jYyIpCi0gICAgbGlzdChB
UFBFTkQgJHtIRFJTfSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7RklMX1dFfS5wYi5o
IikKLQotICAgIGFkZF9jdXN0b21fY29tbWFuZCgKLSAgICAgIE9VVFBVVCAiJHtDTUFLRV9DVVJS
RU5UX0JJTkFSWV9ESVJ9LyR7RklMX1dFfS5wYi5jYyIKLSAgICAgICAgICAgICAiJHtDTUFLRV9D
VVJSRU5UX0JJTkFSWV9ESVJ9LyR7RklMX1dFfS5wYi5oIgotICAgICAgQ09NTUFORCAke1BST1RP
QlVGX1BST1RPQ19FWEVDVVRBQkxFfQotICAgICAgQVJHUyAtLWNwcF9vdXQgICR7Q01BS0VfQ1VS
UkVOVF9CSU5BUllfRElSfSAke19wcm90b2J1Zl9pbmNsdWRlX3BhdGh9ICR7QUJTX0ZJTH0KLSAg
ICAgIERFUEVORFMgJHtBQlNfRklMfSAke1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFfQotICAg
ICAgQ09NTUVOVCAiUnVubmluZyBDKysgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyIG9uICR7RklM
fSIKLSAgICAgIFZFUkJBVElNKQotICBlbmRmb3JlYWNoKCkKLQotICBzZXRfc291cmNlX2ZpbGVz
X3Byb3BlcnRpZXMoJHske1NSQ1N9fSAkeyR7SERSU319IFBST1BFUlRJRVMgR0VORVJBVEVEIFRS
VUUpCi0gIHNldCgke1NSQ1N9ICR7JHtTUkNTfX0gUEFSRU5UX1NDT1BFKQotICBzZXQoJHtIRFJT
fSAkeyR7SERSU319IFBBUkVOVF9TQ09QRSkKLWVuZGZ1bmN0aW9uKCkKLQotIyBJbnRlcm5hbCBm
dW5jdGlvbjogc2VhcmNoIGZvciBub3JtYWwgbGlicmFyeSBhcyB3ZWxsIGFzIGEgZGVidWcgb25l
Ci0jICAgIGlmIHRoZSBkZWJ1ZyBvbmUgaXMgc3BlY2lmaWVkIGFsc28gaW5jbHVkZSBkZWJ1Zy9v
cHRpbWl6ZWQga2V5d29yZHMKLSMgICAgaW4gKl9MSUJSQVJJRVMgdmFyaWFibGUKLWZ1bmN0aW9u
KF9wcm90b2J1Zl9maW5kX2xpYnJhcmllcyBuYW1lIGZpbGVuYW1lKQotICAgZ2V0X3RhcmdldF9w
cm9wZXJ0eSgke25hbWV9X0xJQlJBUlkgbGliJHtmaWxlbmFtZX0KLSAgICAgSU1QT1JURURfTE9D
QVRJT05fUkVMRUFTRSkKLSAgIHNldCgke25hbWV9X0xJQlJBUlkgIiR7JHtuYW1lfV9MSUJSQVJZ
fSIgUEFSRU5UX1NDT1BFKQotICAgZ2V0X3RhcmdldF9wcm9wZXJ0eSgke25hbWV9X0xJQlJBUllf
REVCVUcgbGliJHtmaWxlbmFtZX0KLSAgICAgSU1QT1JURURfTE9DQVRJT05fREVCVUcpCi0gICBz
ZXQoJHtuYW1lfV9MSUJSQVJZX0RFQlVHICIkeyR7bmFtZX1fTElCUkFSWV9ERUJVR30iIFBBUkVO
VF9TQ09QRSkKLQotICAgaWYoTk9UICR7bmFtZX1fTElCUkFSWV9ERUJVRykKLSAgICAgICMgVGhl
cmUgaXMgbm8gZGVidWcgbGlicmFyeQotICAgICAgc2V0KCR7bmFtZX1fTElCUkFSWV9ERUJVRyAk
eyR7bmFtZX1fTElCUkFSWX0gUEFSRU5UX1NDT1BFKQotICAgICAgc2V0KCR7bmFtZX1fTElCUkFS
SUVTICAgICAkeyR7bmFtZX1fTElCUkFSWX0gUEFSRU5UX1NDT1BFKQotICAgZWxzZSgpCi0gICAg
ICAjIFRoZXJlIElTIGEgZGVidWcgbGlicmFyeQotICAgICAgc2V0KCR7bmFtZX1fTElCUkFSSUVT
Ci0gICAgICAgICAgb3B0aW1pemVkICR7JHtuYW1lfV9MSUJSQVJZfQotICAgICAgICAgIGRlYnVn
ICAgICAkeyR7bmFtZX1fTElCUkFSWV9ERUJVR30KLSAgICAgICAgICBQQVJFTlRfU0NPUEUKLSAg
ICAgICkKLSAgIGVuZGlmKCkKLWVuZGZ1bmN0aW9uKCkKLQotIyBJbnRlcm5hbCBmdW5jdGlvbjog
ZmluZCB0aHJlYWRzIGxpYnJhcnkKLWZ1bmN0aW9uKF9wcm90b2J1Zl9maW5kX3RocmVhZHMpCi0g
ICAgc2V0KENNQUtFX1RIUkVBRF9QUkVGRVJfUFRIUkVBRCBUUlVFKQotICAgIGZpbmRfcGFja2Fn
ZShUaHJlYWRzKQotICAgIGlmKFRocmVhZHNfRk9VTkQpCi0gICAgICAgIGxpc3QoQVBQRU5EIFBS
T1RPQlVGX0xJQlJBUklFUyAke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9KQotICAgICAgICBzZXQo
UFJPVE9CVUZfTElCUkFSSUVTICIke1BST1RPQlVGX0xJQlJBUklFU30iIFBBUkVOVF9TQ09QRSkK
LSAgICBlbmRpZigpCi1lbmRmdW5jdGlvbigpCi0KLSMKLSMgTWFpbi4KLSMKLQotIyBCeSBkZWZh
dWx0IGhhdmUgUFJPVE9CVUZfR0VORVJBVEVfQ1BQIG1hY3JvIHBhc3MgLUkgdG8gcHJvdG9jCi0j
IGZvciBlYWNoIGRpcmVjdG9yeSB3aGVyZSBhIHByb3RvIGZpbGUgaXMgcmVmZXJlbmNlZC4KLWlm
KE5PVCBERUZJTkVEIFBST1RPQlVGX0dFTkVSQVRFX0NQUF9BUFBFTkRfUEFUSCkKLSAgc2V0KFBS
T1RPQlVGX0dFTkVSQVRFX0NQUF9BUFBFTkRfUEFUSCBUUlVFKQotZW5kaWYoKQotCi0jIFRoZSBQ
cm90b2J1ZiBsaWJyYXJ5Ci1fcHJvdG9idWZfZmluZF9saWJyYXJpZXMoUFJPVE9CVUYgcHJvdG9i
dWYpCi0KLSMgVGhlIFByb3RvYnVmIExpdGUgbGlicmFyeQotX3Byb3RvYnVmX2ZpbmRfbGlicmFy
aWVzKFBST1RPQlVGX0xJVEUgcHJvdG9idWYtbGl0ZSkKLQotIyBUaGUgUHJvdG9idWYgUHJvdG9j
IExpYnJhcnkKLV9wcm90b2J1Zl9maW5kX2xpYnJhcmllcyhQUk9UT0JVRl9QUk9UT0MgcHJvdG9j
KQotCi1pZihVTklYKQotICBfcHJvdG9idWZfZmluZF90aHJlYWRzKCkKLWVuZGlmKCkKLQotIyBT
ZXQgdGhlIGluY2x1ZGUgZGlyZWN0b3J5Ci1zZXQoUFJPVE9CVUZfSU5DTFVERV9ESVIgIiR7X1BS
T1RPQlVGX0lNUE9SVF9QUkVGSVh9L0BDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVJAIikKLQotIyBT
ZXQgdGhlIHByb3RvYyBFeGVjdXRhYmxlCi1nZXRfdGFyZ2V0X3Byb3BlcnR5KFBST1RPQlVGX1BS
T1RPQ19FWEVDVVRBQkxFIHByb3RvYwotICBJTVBPUlRFRF9MT0NBVElPTl9SRUxFQVNFKQotaWYo
Tk9UIFBST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFKQotICBnZXRfdGFyZ2V0X3Byb3BlcnR5KFBS
T1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFIHByb3RvYwotICAgIElNUE9SVEVEX0xPQ0FUSU9OX0RF
QlVHKQotZW5kaWYoKQotCi1pbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQot
RklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKFBST1RPQlVGIERFRkFVTFRfTVNHCi0g
ICAgUFJPVE9CVUZfTElCUkFSWSBQUk9UT0JVRl9JTkNMVURFX0RJUikKLQotaWYoUFJPVE9CVUZf
Rk9VTkQpCi0gICAgc2V0KFBST1RPQlVGX0lOQ0xVREVfRElSUyAke1BST1RPQlVGX0lOQ0xVREVf
RElSfSkKLWVuZGlmKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21ha2UvcHJvdG9jLmNtYWtlIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jbWFrZS9wcm90
b2MuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMDdjMzg5Yzk3Njc3N2U3
Njg1YmViOGUzMjFlN2ZmY2I5OGZjZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jbWFrZS9wcm90b2MuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSw2ICsw
LDAgQEAKLXNldChwcm90b2NfZmlsZXMKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL21haW4uY2MKLSkKLQotYWRkX2V4ZWN1dGFibGUocHJvdG9j
ICR7cHJvdG9jX2ZpbGVzfSkKLXRhcmdldF9saW5rX2xpYnJhcmllcyhwcm90b2MgbGlicHJvdG9i
dWYgbGlicHJvdG9jKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jbWFrZS90ZXN0cy5jbWFrZSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY21ha2UvdGVzdHMu
Y21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZmRmOGVmZGYzMmZlNGRiN2Q4
ZWE3NTI4NTMyZjg0ZTIxNzIwYjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9jbWFrZS90ZXN0cy5jbWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCww
IEBACi1pZiAoTk9UIEVYSVNUUyAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9Ly4uL2dtb2NrL0NNYWtl
TGlzdHMudHh0IikKLSAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ2Fubm90IGZpbmQgZ21vY2sgZGly
ZWN0b3J5LiIpCi1lbmRpZigpCi0KLW9wdGlvbihwcm90b2J1Zl9BQlNPTFVURV9URVNUX1BMVUdJ
Tl9QQVRICi0gICJVc2luZyBhYnNvbHV0ZSB0ZXN0X3BsdWdpbiBwYXRoIGluIHRlc3RzIiBPTikK
LQotaW5jbHVkZV9kaXJlY3RvcmllcygKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9nbW9jawot
ICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L2dtb2NrL2d0ZXN0Ci0gICR7cHJvdG9idWZfc291cmNl
X2Rpcn0vZ21vY2svZ3Rlc3QvaW5jbHVkZQotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L2dtb2Nr
L2luY2x1ZGUKLSkKLQotYWRkX2xpYnJhcnkoZ21vY2sgU1RBVElDCi0gICR7cHJvdG9idWZfc291
cmNlX2Rpcn0vZ21vY2svc3JjL2dtb2NrLWFsbC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9
L2dtb2NrL2d0ZXN0L3NyYy9ndGVzdC1hbGwuY2MKLSkKLWFkZF9saWJyYXJ5KGdtb2NrX21haW4g
U1RBVElDICR7cHJvdG9idWZfc291cmNlX2Rpcn0vZ21vY2svc3JjL2dtb2NrX21haW4uY2MpCi10
YXJnZXRfbGlua19saWJyYXJpZXMoZ21vY2tfbWFpbiBnbW9jaykKLQotc2V0KGxpdGVfdGVzdF9w
cm90b3MKLSAgZ29vZ2xlL3Byb3RvYnVmL21hcF9saXRlX3VuaXR0ZXN0LnByb3RvCi0gIGdvb2ds
ZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnRfbGl0ZS5wcm90bwotICBnb29nbGUvcHJvdG9idWYv
dW5pdHRlc3RfaW1wb3J0X3B1YmxpY19saXRlLnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdF9saXRlLnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19hcmVuYV9saXRl
LnByb3RvCi0pCi0KLXNldCh0ZXN0c19wcm90b3MKLSAgZ29vZ2xlL3Byb3RvYnVmL2FueV90ZXN0
LnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3Rlc3RfYmFkX2lkZW50
aWZpZXJzLnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3Rlc3RfbGFy
Z2VfZW51bV92YWx1ZS5wcm90bwotICBnb29nbGUvcHJvdG9idWYvbWFwX3Byb3RvMl91bml0dGVz
dC5wcm90bwotICBnb29nbGUvcHJvdG9idWYvbWFwX3VuaXR0ZXN0LnByb3RvCi0gIGdvb2dsZS9w
cm90b2J1Zi91bml0dGVzdC5wcm90bwotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfYXJlbmEu
cHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2N1c3RvbV9vcHRpb25zLnByb3RvCi0g
IGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9kcm9wX3Vua25vd25fZmllbGRzLnByb3RvCi0gIGdv
b2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbWJlZF9vcHRpbWl6ZV9mb3IucHJvdG8KLSAgZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0X2VtcHR5LnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVz
dF9pbXBvcnQucHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydF9wdWJsaWMu
cHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2xpdGVfaW1wb3J0c19ub25saXRlLnBy
b3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0LnByb3RvCi0gIGdvb2dsZS9wcm90
b2J1Zi91bml0dGVzdF9tc2V0X3dpcmVfZm9ybWF0LnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91
bml0dGVzdF9ub19hcmVuYS5wcm90bwotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fYXJl
bmFfaW1wb3J0LnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19maWVsZF9wcmVz
ZW5jZS5wcm90bwotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fZ2VuZXJpY19zZXJ2aWNl
cy5wcm90bwotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfb3B0aW1pemVfZm9yLnByb3RvCi0g
IGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcmVzZXJ2ZV91bmtub3duX2VudW0ucHJvdG8KLSAg
Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3ByZXNlcnZlX3Vua25vd25fZW51bTIucHJvdG8KLSAg
Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3Byb3RvM19hcmVuYS5wcm90bwotICBnb29nbGUvcHJv
dG9idWYvdW5pdHRlc3RfcHJvdG8zX2FyZW5hX2xpdGUucHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVm
L3VuaXR0ZXN0X3Byb3RvM19saXRlLnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF93
ZWxsX2tub3duX3R5cGVzLnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rl
c3RkYXRhL2FueXMucHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRh
dGEvYm9va3MucHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEv
ZGVmYXVsdF92YWx1ZS5wcm90bwotICBnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0
ZGF0YS9kZWZhdWx0X3ZhbHVlX3Rlc3QucHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50
ZXJuYWwvdGVzdGRhdGEvZmllbGRfbWFzay5wcm90bwotICBnb29nbGUvcHJvdG9idWYvdXRpbC9p
bnRlcm5hbC90ZXN0ZGF0YS9tYXBzLnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVy
bmFsL3Rlc3RkYXRhL29uZW9mcy5wcm90bwotICBnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5h
bC90ZXN0ZGF0YS9zdHJ1Y3QucHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwv
dGVzdGRhdGEvdGltZXN0YW1wX2R1cmF0aW9uLnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi91dGls
L2pzb25fZm9ybWF0X3Byb3RvMy5wcm90bwotICBnb29nbGUvcHJvdG9idWYvdXRpbC9tZXNzYWdl
X2RpZmZlcmVuY2VyX3VuaXR0ZXN0LnByb3RvCi0pCi0KLW1hY3JvKGNvbXBpbGVfcHJvdG9fZmls
ZSBmaWxlbmFtZSkKLSAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChkaXJuYW1lICR7ZmlsZW5hbWV9
IFBBVEgpCi0gIGdldF9maWxlbmFtZV9jb21wb25lbnQoYmFzZW5hbWUgJHtmaWxlbmFtZX0gTkFN
RV9XRSkKLSAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgIE9VVFBVVCAke3Byb3RvYnVmX3NvdXJj
ZV9kaXJ9L3NyYy8ke2Rpcm5hbWV9LyR7YmFzZW5hbWV9LnBiLmNjCi0gICAgREVQRU5EUyBwcm90
b2MgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvJHtkaXJuYW1lfS8ke2Jhc2VuYW1lfS5wcm90
bwotICAgIENPTU1BTkQgcHJvdG9jICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjLyR7ZGlybmFt
ZX0vJHtiYXNlbmFtZX0ucHJvdG8KLSAgICAgICAgLS1wcm90b19wYXRoPSR7cHJvdG9idWZfc291
cmNlX2Rpcn0vc3JjCi0gICAgICAgIC0tY3BwX291dD0ke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3Ny
YwotICApCi1lbmRtYWNybyhjb21waWxlX3Byb3RvX2ZpbGUpCi0KLXNldChsaXRlX3Rlc3RfcHJv
dG9fZmlsZXMpCi1mb3JlYWNoKHByb3RvX2ZpbGUgJHtsaXRlX3Rlc3RfcHJvdG9zfSkKLSAgY29t
cGlsZV9wcm90b19maWxlKCR7cHJvdG9fZmlsZX0pCi0gIHN0cmluZyhSRVBMQUNFIC5wcm90byAu
cGIuY2MgcGJfZmlsZSAke3Byb3RvX2ZpbGV9KQotICBzZXQobGl0ZV90ZXN0X3Byb3RvX2ZpbGVz
ICR7bGl0ZV90ZXN0X3Byb3RvX2ZpbGVzfQotICAgICAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9z
cmMvJHtwYl9maWxlfSkKLWVuZGZvcmVhY2gocHJvdG9fZmlsZSkKLQotc2V0KHRlc3RzX3Byb3Rv
X2ZpbGVzKQotZm9yZWFjaChwcm90b19maWxlICR7dGVzdHNfcHJvdG9zfSkKLSAgY29tcGlsZV9w
cm90b19maWxlKCR7cHJvdG9fZmlsZX0pCi0gIHN0cmluZyhSRVBMQUNFIC5wcm90byAucGIuY2Mg
cGJfZmlsZSAke3Byb3RvX2ZpbGV9KQotICBzZXQodGVzdHNfcHJvdG9fZmlsZXMgJHt0ZXN0c19w
cm90b19maWxlc30KLSAgICAgICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjLyR7cGJfZmlsZX0p
Ci1lbmRmb3JlYWNoKHByb3RvX2ZpbGUpCi0KLXNldChjb21tb25fdGVzdF9maWxlcwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvYXJlbmFfdGVzdF91dGlsLmNj
Ci0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfdGVzdF91
dGlsLmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0
X3V0aWwuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rl
c3RpbmcvZmlsZS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9i
dWYvdGVzdGluZy9nb29nbGV0ZXN0LmNjCi0pCi0KLXNldChjb21tb25fbGl0ZV90ZXN0X2ZpbGVz
Ci0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYV90ZXN0
X3V0aWwuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL21h
cF9saXRlX3Rlc3RfdXRpbC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUv
cHJvdG9idWYvdGVzdF91dGlsX2xpdGUuY2MKLSkKLQotc2V0KHRlc3RzX2ZpbGVzCi0gICR7cHJv
dG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnlfdGVzdC5jYwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvYXJlbmFfdW5pdHRlc3QuY2MK
LSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FyZW5hc3RyaW5n
X3VuaXR0ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jb21tYW5kX2xpbmVfaW50ZXJmYWNlX3VuaXR0ZXN0LmNjCi0gICR7cHJvdG9i
dWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2Jvb3Rz
dHJhcF91bml0dGVzdC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvY3BwL2NwcF9wbHVnaW5fdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9z
b3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfdW5pdHRlc3Qu
Y2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9tZXRhZGF0YV90ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2dlbmVyYXRvcl91bml0dGVzdC5jYwot
ICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvaW1w
b3J0ZXJfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudF91bml0dGVzdC5jYwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZh
X3BsdWdpbl91bml0dGVzdC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvbW9ja19jb2RlX2dlbmVyYXRvci5jYwotICAke3Byb3RvYnVmX3Nv
dXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3Rp
dmVjX2hlbHBlcnNfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BhcnNlcl91bml0dGVzdC5jYwotICAke3Byb3RvYnVmX3Nv
dXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhvbl9wbHVn
aW5fdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL3J1YnkvcnVieV9nZW5lcmF0b3JfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1
Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfZGF0YWJhc2VfdW5p
dHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rl
c2NyaXB0b3JfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2Ryb3BfdW5rbm93bl9maWVsZHNfdGVzdC5jYwotICAke3Byb3RvYnVmX3NvdXJj
ZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvZHluYW1pY19tZXNzYWdlX3VuaXR0ZXN0LmNjCi0g
ICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0
X3VuaXR0ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1
Zi9nZW5lcmF0ZWRfbWVzc2FnZV9yZWZsZWN0aW9uX3VuaXR0ZXN0LmNjCi0gICR7cHJvdG9idWZf
c291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW1fdW5pdHRlc3Qu
Y2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50
ZXJfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2lvL3Rva2VuaXplcl91bml0dGVzdC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3Ny
Yy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV91bml0dGVzdC5jYwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkX3Rlc3QuY2MK
LSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF90ZXN0LmNj
Ci0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlX3Vu
aXR0ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9u
b19maWVsZF9wcmVzZW5jZV90ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dv
b2dsZS9wcm90b2J1Zi9wcmVzZXJ2ZV91bmtub3duX2VudW1fdGVzdC5jYwotICAke3Byb3RvYnVm
X3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvcHJvdG8zX2FyZW5hX2xpdGVfdW5pdHRl
c3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Byb3Rv
M19hcmVuYV91bml0dGVzdC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUv
cHJvdG9idWYvcHJvdG8zX2xpdGVfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGly
fS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzX3VuaXR0ZXN0LmNjCi0gICR7cHJv
dG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZF9yZWZs
ZWN0aW9uX3VuaXR0ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9w
cm90b2J1Zi9yZXBlYXRlZF9maWVsZF91bml0dGVzdC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9k
aXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbV91bml0dGVzdC5jYwotICAk
e3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uX3Vu
aXR0ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9z
dHVicy9pbnQxMjhfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3N0dWJzL29uY2VfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2Vf
ZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1c190ZXN0LmNjCi0gICR7cHJvdG9i
dWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXNvcl90ZXN0LmNj
Ci0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJp
bmdwaWVjZV91bml0dGVzdC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RyaW5ncHJpbnRmX3VuaXR0ZXN0LmNjCi0gICR7cHJvdG9idWZfc291
cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1Y3R1cmFsbHlfdmFsaWRfdW5p
dHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0cnV0aWxfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3RlbXBsYXRlX3V0aWxfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1
Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RpbWVfdGVzdC5jYwotICAk
e3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvdHlwZV90cmFp
dHNfdW5pdHRlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3RleHRfZm9ybWF0X3VuaXR0ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3Jj
L2dvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldF91bml0dGVzdC5jYwotICAke3Byb3Rv
YnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9jb21wYXJhdG9y
X3Rlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvZmllbGRfbWFza191dGlsX3Rlc3QuY2MKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmplY3R3cml0ZXJf
dGVzdC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC9qc29uX29iamVjdHdyaXRlcl90ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNl
X2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fc3RyZWFtX3BhcnNl
cl90ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi91
dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHNvdXJjZV90ZXN0LmNjCi0gICR7cHJvdG9i
dWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3Ry
ZWFtX29iamVjdHdyaXRlcl90ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dv
b2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5mb190ZXN0X2hlbHBlci5jYwotICAk
e3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWxf
dGVzdC5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdXRp
bC9tZXNzYWdlX2RpZmZlcmVuY2VyX3VuaXR0ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rp
cn0vc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL3RpbWVfdXRpbF90ZXN0LmNjCi0gICR7cHJvdG9i
dWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXJfdXRp
bF90ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjL2dvb2dsZS9wcm90b2J1Zi93
ZWxsX2tub3duX3R5cGVzX3VuaXR0ZXN0LmNjCi0gICR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3Jj
L2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF91bml0dGVzdC5jYwotKQotCi1pZihwcm90b2J1
Zl9BQlNPTFVURV9URVNUX1BMVUdJTl9QQVRIKQotICBhZGRfY29tcGlsZV9vcHRpb25zKC1ER09P
R0xFX1BST1RPQlVGX1RFU1RfUExVR0lOX1BBVEg9IiQ8VEFSR0VUX0ZJTEU6dGVzdF9wbHVnaW4+
IikKLWVuZGlmKCkKLQotYWRkX2V4ZWN1dGFibGUodGVzdHMgJHt0ZXN0c19maWxlc30gJHtjb21t
b25fdGVzdF9maWxlc30gJHt0ZXN0c19wcm90b19maWxlc30gJHtsaXRlX3Rlc3RfcHJvdG9fZmls
ZXN9KQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RzIGxpYnByb3RvYyBsaWJwcm90b2J1ZiBn
bW9ja19tYWluKQotCi1zZXQodGVzdF9wbHVnaW5fZmlsZXMKLSAgJHtwcm90b2J1Zl9zb3VyY2Vf
ZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL21vY2tfY29kZV9nZW5lcmF0b3IuY2MK
LSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmls
ZS5jYwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGlu
Zy9maWxlLmgKLSAgJHtwcm90b2J1Zl9zb3VyY2VfZGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL3Rlc3RfcGx1Z2luLmNjCi0pCi0KLWFkZF9leGVjdXRhYmxlKHRlc3RfcGx1Z2luICR7
dGVzdF9wbHVnaW5fZmlsZXN9KQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfcGx1Z2luIGxp
YnByb3RvYyBsaWJwcm90b2J1ZiBnbW9jaykKLQotc2V0KGxpdGVfdGVzdF9maWxlcwotICAke3By
b3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvbGl0ZV91bml0dGVzdC5jYwot
KQotYWRkX2V4ZWN1dGFibGUobGl0ZS10ZXN0ICR7bGl0ZV90ZXN0X2ZpbGVzfSAke2NvbW1vbl9s
aXRlX3Rlc3RfZmlsZXN9ICR7bGl0ZV90ZXN0X3Byb3RvX2ZpbGVzfSkKLXRhcmdldF9saW5rX2xp
YnJhcmllcyhsaXRlLXRlc3QgbGlicHJvdG9idWYtbGl0ZSkKLQotc2V0KGxpdGVfYXJlbmFfdGVz
dF9maWxlcwotICAke3Byb3RvYnVmX3NvdXJjZV9kaXJ9L3NyYy9nb29nbGUvcHJvdG9idWYvbGl0
ZV9hcmVuYV91bml0dGVzdC5jYwotKQotYWRkX2V4ZWN1dGFibGUobGl0ZS1hcmVuYS10ZXN0ICR7
bGl0ZV9hcmVuYV90ZXN0X2ZpbGVzfSAke2NvbW1vbl9saXRlX3Rlc3RfZmlsZXN9ICR7bGl0ZV90
ZXN0X3Byb3RvX2ZpbGVzfSkKLXRhcmdldF9saW5rX2xpYnJhcmllcyhsaXRlLWFyZW5hLXRlc3Qg
bGlicHJvdG9idWYtbGl0ZSBnbW9ja19tYWluKQotCi1hZGRfY3VzdG9tX3RhcmdldChjaGVjawot
ICBDT01NQU5EIHRlc3RzCi0gIFdPUktJTkdfRElSRUNUT1JZICR7cHJvdG9idWZfc291cmNlX2Rp
cn0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NvbmZpZ3VyZS5hYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZmlndXJlLmFjCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiZGM3MmVlNjk2ODAxZmZhZTRhNzRiZjEyODBiNmNiYzFkZDdhMmIy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZmlndXJl
LmFjCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLSMjIFByb2Nlc3MgdGhpcyBmaWxl
IHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBjb25maWd1cmUuCi0jIyBJbiBnZW5lcmFsLCB0aGUg
c2FmZXN0IHdheSB0byBwcm9jZWVkIGlzIHRvIHJ1biAuL2F1dG9nZW4uc2gKLQotQUNfUFJFUkVR
KDIuNTkpCi0KLSMgTm90ZTogIElmIHlvdSBjaGFuZ2UgdGhlIHZlcnNpb24sIHlvdSBtdXN0IGFs
c28gdXBkYXRlIGl0IGluOgotIyAqIGphdmEvcG9tLnhtbAotIyAqIHB5dGhvbi9zZXR1cC5weQot
IyAqIHNyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmgKLSMgKiBzcmMvTWFrZWZpbGUu
YW0gKFVwZGF0ZSAtdmVyc2lvbi1pbmZvIGZvciBMREZMQUdTIGlmIG5lZWRlZCkKLSMKLSMgSW4g
dGhlIFNWTiB0cnVuaywgdGhlIHZlcnNpb24gc2hvdWxkIGFsd2F5cyBiZSB0aGUgbmV4dCBhbnRp
Y2lwYXRlZCByZWxlYXNlCi0jIHZlcnNpb24gd2l0aCB0aGUgIi1wcmUiIHN1ZmZpeC4gIChXZSB1
c2VkIHRvIHVzZSAiLVNOQVBTSE9UIiBidXQgdGhpcyBwdXNoZWQKLSMgdGhlIHNpemUgb2Ygb25l
IGZpbGUgbmFtZSBpbiB0aGUgZGlzdCB0YXJmaWxlIG92ZXIgdGhlIDk5LWNoYXIgbGltaXQuKQot
QUNfSU5JVChbUHJvdG9jb2wgQnVmZmVyc10sWzMuMC4wLWJldGEtM10sW3Byb3RvYnVmQGdvb2ds
ZWdyb3Vwcy5jb21dLFtwcm90b2J1Zl0pCi0KLUFNX01BSU5UQUlORVJfTU9ERShbZW5hYmxlXSkK
LQotQUNfQ09ORklHX1NSQ0RJUihzcmMvZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuY2MpCi0jIFRo
ZSBjb25maWcgZmlsZSBpcyBnZW5lcmF0ZWQgYnV0IG5vdCB1c2VkIGJ5IHRoZSBzb3VyY2UgY29k
ZSwgc2luY2Ugd2Ugb25seQotIyBuZWVkIHZlcnkgZmV3IG9mIHRoZW0sIGUuZy4gSEFWRV9QVEhS
RUFEIGFuZCBIQVZFX1pMSUIuIFRob3NlIG1hY3JvcyBhcmUKLSMgcGFzc2VkIGRvd24gaW4gQ1hY
RkxBR1MgbWFudWFsbHkgaW4gc3JjL01ha2VmaWxlLmFtCi1BQ19DT05GSUdfSEVBREVSUyhbY29u
ZmlnLmhdKQotQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQotCi1BQ19BUkdfVkFSKERJU1RfTEFO
RywgW2xhbmd1YWdlIHRvIGluY2x1ZGUgaW4gdGhlIGRpc3RyaWJ1dGlvbiBwYWNrYWdlIChpLmUu
LCBtYWtlIGRpc3QpXSkKLWNhc2UgIiRESVNUX0xBTkciIGluCi0gICIiKSBESVNUX0xBTkc9YWxs
IDs7Ci0gIGFsbCB8IGNwcCB8IGNzaGFycCB8IGphdmEgfCBweXRob24gfCBqYXZhbmFubyB8IG9i
amVjdGl2ZWMgfCBydWJ5IHwganMpIDs7Ci0gICopIEFDX01TR19GQUlMVVJFKFt1bmtub3duIGxh
bmd1YWdlOiAkRElTVF9MQU5HXSkgOzsKLWVzYWMKLUFDX1NVQlNUKERJU1RfTEFORykKLQotIyBh
dXRvY29uZidzIGRlZmF1bHQgQ1hYRkxBR1MgYXJlIHVzdWFsbHkgIi1nIC1PMiIuICBUaGVzZSBh
cmVuJ3QgbmVjZXNzYXJpbHkKLSMgdGhlIGJlc3QgY2hvaWNlIGZvciBsaWJwcm90b2J1Zi4KLUFT
X0lGKFt0ZXN0ICJ4JHthY19jdl9lbnZfQ0ZMQUdTX3NldH0iID0gIngiXSwKLSAgICAgIFtDRkxB
R1M9IiJdKQotQVNfSUYoW3Rlc3QgIngke2FjX2N2X2Vudl9DWFhGTEFHU19zZXR9IiA9ICJ4Il0s
Ci0gICAgICBbQ1hYRkxBR1M9IiJdKQotCi1BQ19DQU5PTklDQUxfVEFSR0VUCi0KLUFNX0lOSVRf
QVVUT01BS0UoWzEuOSB0YXItdXN0YXIgc3ViZGlyLW9iamVjdHNdKQotCi1BQ19BUkdfV0lUSChb
emxpYl0sCi0gIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXpsaWJdLAotICAgIFtpbmNsdWRlIGNs
YXNzZXMgZm9yIHN0cmVhbWluZyBjb21wcmVzc2VkIGRhdGEgaW4gYW5kIG91dCBAPDpAZGVmYXVs
dD1jaGVja0A6PkBdKV0sCi0gIFtdLFt3aXRoX3psaWI9Y2hlY2tdKQotCi1BQ19BUkdfV0lUSChb
cHJvdG9jXSwKLSAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcHJvdG9jPUNPTU1BTkRdLAotICAg
IFt1c2UgdGhlIGdpdmVuIHByb3RvYyBjb21tYW5kIGluc3RlYWQgb2YgYnVpbGRpbmcgYSBuZXcg
b25lIHdoZW4gYnVpbGRpbmcgdGVzdHMgKHVzZWZ1bCBmb3IgY3Jvc3MtY29tcGlsaW5nKV0pXSwK
LSAgW10sW3dpdGhfcHJvdG9jPW5vXSkKLQotIyBDaGVja3MgZm9yIHByb2dyYW1zLgotQUNfUFJP
R19DQwotQUNfUFJPR19DWFgKLUFDX0xBTkcoW0MrK10pCi1BQ1hfVVNFX1NZU1RFTV9FWFRFTlNJ
T05TCi1tNF9pZmRlZihbQU1fUFJPR19BUl0sIFtBTV9QUk9HX0FSXSkKLUFNX0NPTkRJVElPTkFM
KEdDQywgdGVzdCAiJEdDQyIgPSB5ZXMpICAgIyBsZXQgdGhlIE1ha2VmaWxlIGtub3cgaWYgd2Un
cmUgZ2NjCi1BQ19QUk9HX09CSkMKLQotIyB0ZXN0X3V0aWwuY2MgdGFrZXMgZm9yZXZlciB0byBj
b21waWxlIHdpdGggR0NDIGFuZCBvcHRpbWl6YXRpb24gdHVybmVkIG9uLgotQUNfTVNHX0NIRUNL
SU5HKFtDKysgY29tcGlsZXIgZmxhZ3MuLi5dKQotQVNfSUYoW3Rlc3QgIngke2FjX2N2X2Vudl9D
WFhGTEFHU19zZXR9IiA9ICJ4Il0sWwotICBBU19JRihbdGVzdCAiJEdDQyIgPSAieWVzIl0sWwot
ICAgIFBST1RPQlVGX09QVF9GTEFHPSItTzIiCi0gICAgQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9IC1n
IgotICBdKQotCi0gICMgUHJvdG9jb2wgQnVmZmVycyBjb250YWlucyBzZXZlcmFsIGNoZWNrcyB0
aGF0IGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkKLSAgIyBmb3IgZGVidWdnaW5nIGFuZCB3
aGljaCBtaWdodCBodXJ0IHBlcmZvcm1hbmNlLiAgTW9zdCB1c2VycyBhcmUgcHJvYmFibHkKLSAg
IyBlbmQgdXNlcnMgd2hvIGRvbid0IHdhbnQgdGhlc2UgY2hlY2tzLCBzbyBhZGQgLUROREVCVUcg
YnkgZGVmYXVsdC4KLSAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtRE5ERUJVRyIKLQotICBBQ19NU0df
UkVTVUxUKFt1c2UgZGVmYXVsdDogJFBST1RPQlVGX09QVF9GTEFHICRDWFhGTEFHU10pCi1dLFsK
LSAgQUNfTVNHX1JFU1VMVChbdXNlIHVzZXItc3VwcGxpZWQ6ICRDWFhGTEFHU10pCi1dKQotCi1B
Q19TVUJTVChQUk9UT0JVRl9PUFRfRkxBRykKLQotQUNYX0NIRUNLX1NVTkNDCi0KLSMgSGF2ZSB0
byBkbyBsaWJ0b29sIGFmdGVyIFNVTkNDLCBvdGhlciB3aXNlIGl0ICJoZWxwZnVsbHkiIGFkZHMg
Q3J1biBDc3RkCi0jIHRvIHRoZSBsaW5rCi1BQ19QUk9HX0xJQlRPT0wKLQotIyBDaGVja3MgZm9y
IGhlYWRlciBmaWxlcy4KLUFDX0hFQURFUl9TVERDCi1BQ19DSEVDS19IRUFERVJTKFtmY250bC5o
IGludHR5cGVzLmggbGltaXRzLmggc3RkbGliLmggdW5pc3RkLmhdKQotCi0jIENoZWNrcyBmb3Ig
bGlicmFyeSBmdW5jdGlvbnMuCi1BQ19GVU5DX01FTUNNUAotQUNfRlVOQ19TVFJUT0QKLUFDX0NI
RUNLX0ZVTkNTKFtmdHJ1bmNhdGUgbWVtc2V0IG1rZGlyIHN0cmNociBzdHJlcnJvciBzdHJ0b2xd
KQotCi0jIENoZWNrIGZvciB6bGliLgotSEFWRV9aTElCPTAKLUFTX0lGKFt0ZXN0ICIkd2l0aF96
bGliIiAhPSBub10sIFsKLSAgQUNfTVNHX0NIRUNLSU5HKFt6bGliIHZlcnNpb25dKQotCi0gICMg
Rmlyc3QgY2hlY2sgdGhlIHpsaWIgaGVhZGVyIHZlcnNpb24uCi0gIEFDX0NPTVBJTEVfSUZFTFNF
KAotICAgIFtBQ19MQU5HX1BST0dSQU0oW1sKLSAgICAgICAgI2luY2x1ZGUgPHpsaWIuaD4KLSAg
ICAgICAgI2lmICFkZWZpbmVkKFpMSUJfVkVSTlVNKSB8fCAoWkxJQl9WRVJOVU0gPCAweDEyMDQp
Ci0gICAgICAgICMgZXJyb3IgemxpYiB2ZXJzaW9uIHRvbyBvbGQKLSAgICAgICAgI2VuZGlmCi0g
ICAgICAgIF1dLCBbXSldLCBbCi0gICAgQUNfTVNHX1JFU1VMVChbb2sgKDEuMi4wLjQgb3IgbGF0
ZXIpXSkKLQotICAgICMgQWxzbyBuZWVkIHRvIGFkZCAtbHogdG8gdGhlIGxpbmtlciBmbGFncyBh
bmQgbWFrZSBzdXJlIHRoaXMgc3VjY2VlZHMuCi0gICAgQUNfU0VBUkNIX0xJQlMoW3psaWJWZXJz
aW9uXSwgW3pdLCBbCi0gICAgICBBQ19ERUZJTkUoW0hBVkVfWkxJQl0sIFsxXSwgW0VuYWJsZSBj
bGFzc2VzIHVzaW5nIHpsaWIgY29tcHJlc3Npb24uXSkKLSAgICAgIEhBVkVfWkxJQj0xCi0gICAg
XSwgWwotICAgICAgQVNfSUYoW3Rlc3QgIiR3aXRoX3psaWIiICE9IGNoZWNrXSwgWwotICAgICAg
ICBBQ19NU0dfRkFJTFVSRShbLS13aXRoLXpsaWIgd2FzIGdpdmVuLCBidXQgbm8gd29ya2luZyB6
bGliIGxpYnJhcnkgd2FzIGZvdW5kXSkKLSAgICAgIF0pCi0gICAgXSkKLSAgXSwgWwotICAgIEFT
X0lGKFt0ZXN0ICIkd2l0aF96bGliIiA9IGNoZWNrXSwgWwotICAgICAgQUNfTVNHX1JFU1VMVChb
aGVhZGVycyBtaXNzaW5nIG9yIHRvbyBvbGQgKHJlcXVpcmVzIDEuMi4wLjQpXSkKLSAgICBdLCBb
Ci0gICAgICBBQ19NU0dfRkFJTFVSRShbLS13aXRoLXpsaWIgd2FzIGdpdmVuLCBidXQgemxpYiBo
ZWFkZXJzIHdlcmUgbm90IHByZXNlbnQgb3Igd2VyZSB0b28gb2xkIChyZXF1aXJlcyAxLjIuMC40
KV0pCi0gICAgXSkKLSAgXSkKLV0pCi1BTV9DT05ESVRJT05BTChbSEFWRV9aTElCXSwgW3Rlc3Qg
JEhBVkVfWkxJQiA9IDFdKQotCi1BU19JRihbdGVzdCAiJHdpdGhfcHJvdG9jIiAhPSAibm8iXSwg
WwotICBQUk9UT0M9JHdpdGhfcHJvdG9jCi0gIEFTX0lGKFt0ZXN0ICIkd2l0aF9wcm90b2MiID0g
InllcyJdLCBbCi0gICAgIyBObyBhcmd1bWVudCBnaXZlbi4gIFVzZSBzeXN0ZW0gcHJvdG9jLgot
ICAgIFBST1RPQz1wcm90b2MKLSAgXSkKLSAgQVNfSUYoW2VjaG8gIiRQUk9UT0MiIHwgZ3JlcCAt
cSAnXkA8OkBeL0A6PkAuKi8nXSwgWwotICAgICMgRG9lcyBub3Qgc3RhcnQgd2l0aCBhIHNsYXNo
LCBidXQgY29udGFpbnMgYSBzbGFzaC4gIFNvLCBpdCdzIGEgcmVsYXRpdmUKLSAgICAjIHBhdGgg
KGFzIG9wcG9zZWQgdG8gYW4gYWJzb2x1dGUgcGF0aCBvciBhbiBleGVjdXRhYmxlIGluICRQQVRI
KS4KLSAgICAjIFNpbmNlIGl0IHdpbGwgYWN0dWFsbHkgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgc3Jj
IGRpcmVjdG9yeSwgcHJlZml4IHdpdGgKLSAgICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFdl
IGFsc28gaW5zZXJ0ICRhY190b3BfYnVpbGRfcHJlZml4IGluIGNhc2UgdGhpcwotICAgICMgaXMg
YSBuZXN0ZWQgcGFja2FnZSBhbmQgLS13aXRoLXByb3RvYyB3YXMgYWN0dWFsbHkgZ2l2ZW4gb24g
dGhlIG91dGVyCi0gICAgIyBwYWNrYWdlJ3MgY29uZmlndXJlIHNjcmlwdC4KLSAgICBQUk9UT0M9
YHB3ZGAvJHthY190b3BfYnVpbGRfcHJlZml4fSRQUk9UT0MKLSAgXSkKLSAgQUNfU1VCU1QoW1BS
T1RPQ10pCi1dKQotQU1fQ09ORElUSU9OQUwoW1VTRV9FWFRFUk5BTF9QUk9UT0NdLCBbdGVzdCAi
JHdpdGhfcHJvdG9jIiAhPSAibm8iXSkKLQotQUNYX1BUSFJFQUQKLUFNX0NPTkRJVElPTkFMKFtI
QVZFX1BUSFJFQURdLCBbdGVzdCAieCRhY3hfcHRocmVhZF9vayIgPSAieHllcyJdKQotCi0jIFdl
IHN0aWxsIGtlZXAgdGhpcyBmb3IgaW1wcm92aW5nIHBiY29uZmlnLmggZm9yIHVuc3VwcG9ydGVk
IHBsYXRmb3Jtcy4KLUFDX0NYWF9TVExfSEFTSAotCi1jYXNlICIkdGFyZ2V0X29zIiBpbgotICBt
aW5ndyogfCBjeWd3aW4qIHwgd2luKikKLSAgICA7OwotICAqKQotICAgICMgTmVlZCB0byBsaW5r
IGFnYWluc3QgcnQgb24gU29sYXJpcwotICAgIEFDX1NFQVJDSF9MSUJTKFtzY2hlZF95aWVsZF0s
IFtydF0sIFtdLCBbQUNfTVNHX0ZBSUxVUkUoW3NjaGVkX3lpZWxkIHdhcyBub3QgZm91bmQgb24g
eW91ciBzeXN0ZW1dKV0pCi0gICAgOzsKLWVzYWMKLQotIyBFbmFibGUgT2JqQyBzdXBwb3J0IGZv
ciBjb25mb3JtYW5jZSBkaXJlY3Rvcnkgb24gT1MgWC4KLU9CSkNfQ09ORk9STUFOQ0VfVEVTVD0w
Ci1jYXNlICIkdGFyZ2V0X29zIiBpbgotICBkYXJ3aW4qKQotICAgIE9CSkNfQ09ORk9STUFOQ0Vf
VEVTVD0xCi0gICAgOzsKLWVzYWMKLUFNX0NPTkRJVElPTkFMKFtPQkpDX0NPTkZPUk1BTkNFX1RF
U1RdLCBbdGVzdCAkT0JKQ19DT05GT1JNQU5DRV9URVNUID0gMV0pCi0KLSMgSEFDSzogIE1ha2Ug
Z21vY2sncyBjb25maWd1cmUgc2NyaXB0IHBpY2sgdXAgb3VyIGNvcHkgb2YgQ0ZMQUdTIGFuZCBD
WFhGTEFHUywKLSMgICBzaW5jZSB0aGUgZmxhZ3MgYWRkZWQgYnkgQUNYX0NIRUNLX1NVTkNDIG11
c3QgYmUgdXNlZCB3aGVuIGNvbXBpbGluZyBnbW9jawotIyAgIHRvby4KLWV4cG9ydCBDRkxBR1MK
LWV4cG9ydCBDWFhGTEFHUwotQUNfQ09ORklHX1NVQkRJUlMoW2dtb2NrXSkKLQotQUNfQ09ORklH
X0ZJTEVTKFtNYWtlZmlsZSBzcmMvTWFrZWZpbGUgYmVuY2htYXJrcy9NYWtlZmlsZSBjb25mb3Jt
YW5jZS9NYWtlZmlsZSBwcm90b2J1Zi5wYyBwcm90b2J1Zi1saXRlLnBjXSkKLUFDX09VVFBVVApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9Db25mb3JtYW5jZUphdmEuamF2YSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2Uv
Q29uZm9ybWFuY2VKYXZhLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNzg3
ZmZjYjI3NDAzMzAwOGE4YzAyMDU2NWY3MWRkMGE0NjkzZTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9Db25mb3JtYW5jZUphdmEuamF2
YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0KLWltcG9ydCBjb20uZ29vZ2xlLnBy
b3RvYnVmLmNvbmZvcm1hbmNlLkNvbmZvcm1hbmNlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9i
dWYudXRpbC5Kc29uRm9ybWF0OwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYudXRpbC5Kc29u
Rm9ybWF0LlR5cGVSZWdpc3RyeTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkludmFsaWRQ
cm90b2NvbEJ1ZmZlckV4Y2VwdGlvbjsKLQotY2xhc3MgQ29uZm9ybWFuY2VKYXZhIHsKLSAgcHJp
dmF0ZSBpbnQgdGVzdENvdW50ID0gMDsKLSAgcHJpdmF0ZSBUeXBlUmVnaXN0cnkgdHlwZVJlZ2lz
dHJ5OwotCi0gIHByaXZhdGUgYm9vbGVhbiByZWFkRnJvbVN0ZGluKGJ5dGVbXSBidWYsIGludCBs
ZW4pIHRocm93cyBFeGNlcHRpb24gewotICAgIGludCBvZnMgPSAwOwotICAgIHdoaWxlIChsZW4g
PiAwKSB7Ci0gICAgICBpbnQgcmVhZCA9IFN5c3RlbS5pbi5yZWFkKGJ1Ziwgb2ZzLCBsZW4pOwot
ICAgICAgaWYgKHJlYWQgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gRU9GCi0g
ICAgICB9Ci0gICAgICBvZnMgKz0gcmVhZDsKLSAgICAgIGxlbiAtPSByZWFkOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlVG9TdGRvdXQoYnl0
ZVtdIGJ1ZikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU3lzdGVtLm91dC53cml0ZShidWYpOwot
ICB9Ci0KLSAgLy8gUmV0dXJucyAtMSBvbiBFT0YgKHRoZSBhY3R1YWwgdmFsdWVzIHdpbGwgYWx3
YXlzIGJlIHBvc2l0aXZlKS4KLSAgcHJpdmF0ZSBpbnQgcmVhZExpdHRsZUVuZGlhbkludEZyb21T
dGRpbigpIHRocm93cyBFeGNlcHRpb24gewotICAgIGJ5dGVbXSBidWYgPSBuZXcgYnl0ZVs0XTsK
LSAgICBpZiAoIXJlYWRGcm9tU3RkaW4oYnVmLCA0KSkgewotICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLSAgICByZXR1cm4gKGJ1ZlswXSAmIDB4ZmYpCi0gICAgICAgIHwgKChidWZbMV0gJiAweGZm
KSA8PCA4KQotICAgICAgICB8ICgoYnVmWzJdICYgMHhmZikgPDwgMTYpCi0gICAgICAgIHwgKChi
dWZbM10gJiAweGZmKSA8PCAyNCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVMaXR0bGVF
bmRpYW5JbnRUb1N0ZG91dChpbnQgdmFsKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBieXRlW10g
YnVmID0gbmV3IGJ5dGVbNF07Ci0gICAgYnVmWzBdID0gKGJ5dGUpdmFsOwotICAgIGJ1ZlsxXSA9
IChieXRlKSh2YWwgPj4gOCk7Ci0gICAgYnVmWzJdID0gKGJ5dGUpKHZhbCA+PiAxNik7Ci0gICAg
YnVmWzNdID0gKGJ5dGUpKHZhbCA+PiAyNCk7Ci0gICAgd3JpdGVUb1N0ZG91dChidWYpOwotICB9
Ci0KLSAgcHJpdmF0ZSBDb25mb3JtYW5jZS5Db25mb3JtYW5jZVJlc3BvbnNlIGRvVGVzdChDb25m
b3JtYW5jZS5Db25mb3JtYW5jZVJlcXVlc3QgcmVxdWVzdCkgewotICAgIENvbmZvcm1hbmNlLlRl
c3RBbGxUeXBlcyB0ZXN0TWVzc2FnZTsKLQotICAgIHN3aXRjaCAocmVxdWVzdC5nZXRQYXlsb2Fk
Q2FzZSgpKSB7Ci0gICAgICBjYXNlIFBST1RPQlVGX1BBWUxPQUQ6IHsKLSAgICAgICAgdHJ5IHsK
LSAgICAgICAgICB0ZXN0TWVzc2FnZSA9IENvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcy5wYXJzZUZy
b20ocmVxdWVzdC5nZXRQcm90b2J1ZlBheWxvYWQoKSk7Ci0gICAgICAgIH0gY2F0Y2ggKEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgcmV0dXJuIENvbmZvcm1h
bmNlLkNvbmZvcm1hbmNlUmVzcG9uc2UubmV3QnVpbGRlcigpLnNldFBhcnNlRXJyb3IoZS5nZXRN
ZXNzYWdlKCkpLmJ1aWxkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0g
ICAgICBjYXNlIEpTT05fUEFZTE9BRDogewotICAgICAgICB0cnkgewotICAgICAgICAgIENvbmZv
cm1hbmNlLlRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBDb25mb3JtYW5jZS5UZXN0QWxs
VHlwZXMubmV3QnVpbGRlcigpOwotICAgICAgICAgIEpzb25Gb3JtYXQucGFyc2VyKCkudXNpbmdU
eXBlUmVnaXN0cnkodHlwZVJlZ2lzdHJ5KQotICAgICAgICAgICAgICAubWVyZ2UocmVxdWVzdC5n
ZXRKc29uUGF5bG9hZCgpLCBidWlsZGVyKTsKLSAgICAgICAgICB0ZXN0TWVzc2FnZSA9IGJ1aWxk
ZXIuYnVpbGQoKTsKLSAgICAgICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uIGUpIHsKLSAgICAgICAgICByZXR1cm4gQ29uZm9ybWFuY2UuQ29uZm9ybWFuY2VSZXNwb25z
ZS5uZXdCdWlsZGVyKCkuc2V0UGFyc2VFcnJvcihlLmdldE1lc3NhZ2UoKSkuYnVpbGQoKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgUEFZTE9BRF9OT1Rf
U0VUOiB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJSZXF1ZXN0IGRpZG4n
dCBoYXZlIHBheWxvYWQuIik7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgcGF5bG9hZCBjYXNlLiIpOwot
ICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAocmVxdWVzdC5nZXRSZXF1ZXN0ZWRPdXRwdXRG
b3JtYXQoKSkgewotICAgICAgY2FzZSBVTlNQRUNJRklFRDoKLSAgICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIlVuc3BlY2lmaWVkIG91dHB1dCBmb3JtYXQuIik7Ci0KLSAgICAgIGNh
c2UgUFJPVE9CVUY6Ci0gICAgICAgIHJldHVybiBDb25mb3JtYW5jZS5Db25mb3JtYW5jZVJlc3Bv
bnNlLm5ld0J1aWxkZXIoKS5zZXRQcm90b2J1ZlBheWxvYWQodGVzdE1lc3NhZ2UudG9CeXRlU3Ry
aW5nKCkpLmJ1aWxkKCk7Ci0KLSAgICAgIGNhc2UgSlNPTjoKLSAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICByZXR1cm4gQ29uZm9ybWFuY2UuQ29uZm9ybWFuY2VSZXNwb25zZS5uZXdCdWlsZGVyKCku
c2V0SnNvblBheWxvYWQoCi0gICAgICAgICAgICAgIEpzb25Gb3JtYXQucHJpbnRlcigpLnVzaW5n
VHlwZVJlZ2lzdHJ5KHR5cGVSZWdpc3RyeSkucHJpbnQodGVzdE1lc3NhZ2UpKS5idWlsZCgpOwot
ICAgICAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gfCBJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICAgIHJldHVybiBDb25mb3JtYW5jZS5Db25m
b3JtYW5jZVJlc3BvbnNlLm5ld0J1aWxkZXIoKS5zZXRTZXJpYWxpemVFcnJvcigKLSAgICAgICAg
ICAgICAgZS5nZXRNZXNzYWdlKCkpLmJ1aWxkKCk7Ci0gICAgICAgIH0KLQotICAgICAgZGVmYXVs
dDogewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCByZXF1
ZXN0IG91dHB1dC4iKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4g
ZG9UZXN0SW8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpbnQgYnl0ZXMgPSByZWFkTGl0dGxl
RW5kaWFuSW50RnJvbVN0ZGluKCk7Ci0KLSAgICBpZiAoYnl0ZXMgPT0gLTEpIHsKLSAgICAgIHJl
dHVybiBmYWxzZTsgIC8vIEVPRgotICAgIH0KLQotICAgIGJ5dGVbXSBzZXJpYWxpemVkSW5wdXQg
PSBuZXcgYnl0ZVtieXRlc107Ci0KLSAgICBpZiAoIXJlYWRGcm9tU3RkaW4oc2VyaWFsaXplZElu
cHV0LCBieXRlcykpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVj
dGVkIEVPRiBmcm9tIHRlc3QgcHJvZ3JhbS4iKTsKLSAgICB9Ci0KLSAgICBDb25mb3JtYW5jZS5D
b25mb3JtYW5jZVJlcXVlc3QgcmVxdWVzdCA9Ci0gICAgICAgIENvbmZvcm1hbmNlLkNvbmZvcm1h
bmNlUmVxdWVzdC5wYXJzZUZyb20oc2VyaWFsaXplZElucHV0KTsKLSAgICBDb25mb3JtYW5jZS5D
b25mb3JtYW5jZVJlc3BvbnNlIHJlc3BvbnNlID0gZG9UZXN0KHJlcXVlc3QpOwotICAgIGJ5dGVb
XSBzZXJpYWxpemVkT3V0cHV0ID0gcmVzcG9uc2UudG9CeXRlQXJyYXkoKTsKLQotICAgIHdyaXRl
TGl0dGxlRW5kaWFuSW50VG9TdGRvdXQoc2VyaWFsaXplZE91dHB1dC5sZW5ndGgpOwotICAgIHdy
aXRlVG9TdGRvdXQoc2VyaWFsaXplZE91dHB1dCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewotICAgIHR5cGVSZWdpc3Ry
eSA9IFR5cGVSZWdpc3RyeS5uZXdCdWlsZGVyKCkuYWRkKAotICAgICAgICBDb25mb3JtYW5jZS5U
ZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpKS5idWlsZCgpOwotICAgIHdoaWxlIChkb1Rlc3RJ
bygpKSB7Ci0gICAgICB0aGlzLnRlc3RDb3VudCsrOwotICAgIH0KLQotICAgIFN5c3RlbS5lcnIu
cHJpbnRsbigiQ29uZm9ybWFuY2VKYXZhOiByZWNlaXZlZCBFT0YgZnJvbSB0ZXN0IHJ1bm5lciBh
ZnRlciAiICsKLSAgICAgICAgdGhpcy50ZXN0Q291bnQgKyAiIHRlc3RzIik7Ci0gIH0KLQotICBw
dWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBuZXcgQ29uZm9ybWFuY2VKYXZhKCkucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29u
Zm9ybWFuY2UvQ29uZm9ybWFuY2VKYXZhTGl0ZS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9Db25mb3JtYW5j
ZUphdmFMaXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMWRjN2QxYjZh
MTc1N2IyMjUzN2QwMGEyYWJjYjQ4NWEwODFmOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9Db25mb3JtYW5jZUphdmFMaXRlLmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90
b2J1Zi5jb25mb3JtYW5jZS5Db25mb3JtYW5jZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVm
LkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbjsKLQotY2xhc3MgQ29uZm9ybWFuY2VKYXZh
TGl0ZSB7Ci0gIHByaXZhdGUgaW50IHRlc3RDb3VudCA9IDA7Ci0KLSAgcHJpdmF0ZSBib29sZWFu
IHJlYWRGcm9tU3RkaW4oYnl0ZVtdIGJ1ZiwgaW50IGxlbikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgaW50IG9mcyA9IDA7Ci0gICAgd2hpbGUgKGxlbiA+IDApIHsKLSAgICAgIGludCByZWFkID0g
U3lzdGVtLmluLnJlYWQoYnVmLCBvZnMsIGxlbik7Ci0gICAgICBpZiAocmVhZCA9PSAtMSkgewot
ICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBFT0YKLSAgICAgIH0KLSAgICAgIG9mcyArPSByZWFk
OwotICAgICAgbGVuIC09IHJlYWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICBwcml2YXRlIHZvaWQgd3JpdGVUb1N0ZG91dChieXRlW10gYnVmKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBTeXN0ZW0ub3V0LndyaXRlKGJ1Zik7Ci0gIH0KLQotICAvLyBSZXR1cm5zIC0xIG9u
IEVPRiAodGhlIGFjdHVhbCB2YWx1ZXMgd2lsbCBhbHdheXMgYmUgcG9zaXRpdmUpLgotICBwcml2
YXRlIGludCByZWFkTGl0dGxlRW5kaWFuSW50RnJvbVN0ZGluKCkgdGhyb3dzIEV4Y2VwdGlvbiB7
Ci0gICAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzRdOwotICAgIGlmICghcmVhZEZyb21TdGRpbihi
dWYsIDQpKSB7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiAoYnVmWzBdICYg
MHhmZikKLSAgICAgICAgfCAoKGJ1ZlsxXSAmIDB4ZmYpIDw8IDgpCi0gICAgICAgIHwgKChidWZb
Ml0gJiAweGZmKSA8PCAxNikKLSAgICAgICAgfCAoKGJ1ZlszXSAmIDB4ZmYpIDw8IDI0KTsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCB3cml0ZUxpdHRsZUVuZGlhbkludFRvU3Rkb3V0KGludCB2YWwp
IHRocm93cyBFeGNlcHRpb24gewotICAgIGJ5dGVbXSBidWYgPSBuZXcgYnl0ZVs0XTsKLSAgICBi
dWZbMF0gPSAoYnl0ZSl2YWw7Ci0gICAgYnVmWzFdID0gKGJ5dGUpKHZhbCA+PiA4KTsKLSAgICBi
dWZbMl0gPSAoYnl0ZSkodmFsID4+IDE2KTsKLSAgICBidWZbM10gPSAoYnl0ZSkodmFsID4+IDI0
KTsKLSAgICB3cml0ZVRvU3Rkb3V0KGJ1Zik7Ci0gIH0KLQotICBwcml2YXRlIENvbmZvcm1hbmNl
LkNvbmZvcm1hbmNlUmVzcG9uc2UgZG9UZXN0KENvbmZvcm1hbmNlLkNvbmZvcm1hbmNlUmVxdWVz
dCByZXF1ZXN0KSB7Ci0gICAgQ29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzIHRlc3RNZXNzYWdlOwot
Ci0gICAgc3dpdGNoIChyZXF1ZXN0LmdldFBheWxvYWRDYXNlKCkpIHsKLSAgICAgIGNhc2UgUFJP
VE9CVUZfUEFZTE9BRDogewotICAgICAgICB0cnkgewotICAgICAgICAgIHRlc3RNZXNzYWdlID0g
Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzLnBhcnNlRnJvbShyZXF1ZXN0LmdldFByb3RvYnVmUGF5
bG9hZCgpKTsKLSAgICAgICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgICByZXR1cm4gQ29uZm9ybWFuY2UuQ29uZm9ybWFuY2VSZXNwb25zZS5u
ZXdCdWlsZGVyKCkuc2V0UGFyc2VFcnJvcihlLmdldE1lc3NhZ2UoKSkuYnVpbGQoKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgSlNPTl9QQVlMT0FEOiB7
Ci0gICAgICAgIHJldHVybiBDb25mb3JtYW5jZS5Db25mb3JtYW5jZVJlc3BvbnNlLm5ld0J1aWxk
ZXIoKS5zZXRTa2lwcGVkKAotICAgICAgICAgICAgIkxpdGUgcnVudGltZSBkb2VzIG5vdCBzdXBv
cnQgSnNvbiBGb3JtYW50LiIpLmJ1aWxkKCk7Ci0gICAgICB9Ci0gICAgICBjYXNlIFBBWUxPQURf
Tk9UX1NFVDogewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUmVxdWVzdCBk
aWRuJ3QgaGF2ZSBwYXlsb2FkLiIpOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAg
ICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHBheWxvYWQgY2FzZS4i
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHJlcXVlc3QuZ2V0UmVxdWVzdGVkT3V0
cHV0Rm9ybWF0KCkpIHsKLSAgICAgIGNhc2UgVU5TUEVDSUZJRUQ6Ci0gICAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKCJVbnNwZWNpZmllZCBvdXRwdXQgZm9ybWF0LiIpOwotCi0gICAg
ICBjYXNlIFBST1RPQlVGOgotICAgICAgICByZXR1cm4gQ29uZm9ybWFuY2UuQ29uZm9ybWFuY2VS
ZXNwb25zZS5uZXdCdWlsZGVyKCkuc2V0UHJvdG9idWZQYXlsb2FkKHRlc3RNZXNzYWdlLnRvQnl0
ZVN0cmluZygpKS5idWlsZCgpOwotCi0gICAgICBjYXNlIEpTT046Ci0gICAgICAgIHJldHVybiBD
b25mb3JtYW5jZS5Db25mb3JtYW5jZVJlc3BvbnNlLm5ld0J1aWxkZXIoKS5zZXRTa2lwcGVkKAot
ICAgICAgICAgICAgIkxpdGUgcnVudGltZSBkb2VzIG5vdCBzdXBvcnQgSnNvbiBGb3JtYW50LiIp
LmJ1aWxkKCk7Ci0KLSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF
eGNlcHRpb24oIlVuZXhwZWN0ZWQgcmVxdWVzdCBvdXRwdXQuIik7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGRvVGVzdElvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgaW50IGJ5dGVzID0gcmVhZExpdHRsZUVuZGlhbkludEZyb21TdGRpbigpOwotCi0gICAgaWYg
KGJ5dGVzID09IC0xKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7ICAvLyBFT0YKLSAgICB9Ci0KLSAg
ICBieXRlW10gc2VyaWFsaXplZElucHV0ID0gbmV3IGJ5dGVbYnl0ZXNdOwotCi0gICAgaWYgKCFy
ZWFkRnJvbVN0ZGluKHNlcmlhbGl6ZWRJbnB1dCwgYnl0ZXMpKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBFT0YgZnJvbSB0ZXN0IHByb2dyYW0uIik7Ci0g
ICAgfQotCi0gICAgQ29uZm9ybWFuY2UuQ29uZm9ybWFuY2VSZXF1ZXN0IHJlcXVlc3QgPQotICAg
ICAgICBDb25mb3JtYW5jZS5Db25mb3JtYW5jZVJlcXVlc3QucGFyc2VGcm9tKHNlcmlhbGl6ZWRJ
bnB1dCk7Ci0gICAgQ29uZm9ybWFuY2UuQ29uZm9ybWFuY2VSZXNwb25zZSByZXNwb25zZSA9IGRv
VGVzdChyZXF1ZXN0KTsKLSAgICBieXRlW10gc2VyaWFsaXplZE91dHB1dCA9IHJlc3BvbnNlLnRv
Qnl0ZUFycmF5KCk7Ci0KLSAgICB3cml0ZUxpdHRsZUVuZGlhbkludFRvU3Rkb3V0KHNlcmlhbGl6
ZWRPdXRwdXQubGVuZ3RoKTsKLSAgICB3cml0ZVRvU3Rkb3V0KHNlcmlhbGl6ZWRPdXRwdXQpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICB3aGlsZSAoZG9UZXN0SW8oKSkgewotICAgICAgdGhpcy50ZXN0Q291bnQr
KzsKLSAgICB9Ci0KLSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNvbmZvcm1hbmNlSmF2YUxpdGU6
IHJlY2VpdmVkIEVPRiBmcm9tIHRlc3QgcnVubmVyIGFmdGVyICIgKwotICAgICAgICB0aGlzLnRl
c3RDb3VudCArICIgdGVzdHMiKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0
cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotICAgIG5ldyBDb25mb3JtYW5jZUphdmFM
aXRlKCkucnVuKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2UvTWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NvbmZvcm1hbmNlL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
MWE5ZTQwODY4YmQwMGNiZDg4YjVlZGExYjU3NGM5ZTZiNDZmMjk3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2UvTWFrZWZpbGUuYW0KKysr
IC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBh
dXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCi0KLWNvbmZvcm1hbmNlX3Byb3RvY19pbnB1
dHMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY29uZm9ybWFuY2Uu
cHJvdG8KLQotd2VsbF9rbm93bl90eXBlX3Byb3RvY19pbnB1dHMgPSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAkKHRvcF9zcmNkaXIpL3NyYy9nb29nbGUvcHJvdG9idWYvYW55
LnByb3RvICAgICAgICAgICAgICAgICAgXAotICAkKHRvcF9zcmNkaXIpL3NyYy9nb29nbGUvcHJv
dG9idWYvZHVyYXRpb24ucHJvdG8gICAgICAgICAgICAgXAotICAkKHRvcF9zcmNkaXIpL3NyYy9n
b29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90byAgICAgICAgICAgXAotICAkKHRvcF9zcmNk
aXIpL3NyYy9nb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvICAgICAgICAgICAgICAgXAotICAk
KHRvcF9zcmNkaXIpL3NyYy9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvICAgICAgICAg
ICAgXAotICAkKHRvcF9zcmNkaXIpL3NyYy9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8K
LQotCi1wcm90b2Nfb3V0cHV0cyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGNvbmZvcm1hbmNlLnBiLmNjICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGNvbmZvcm1hbmNlLnBiLmgKLQotb3RoZXJfbGFuZ3Vh
Z2VfcHJvdG9jX291dHB1dHMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBj
b25mb3JtYW5jZV9wYjIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBDb25mb3JtYW5jZS5wYm9iamMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBDb25mb3JtYW5jZS5wYm9iamMubSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBjb25mb3JtYW5jZS5yYiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0Fu
eS5qYXZhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3By
b3RvYnVmL0FueU9yQnVpbGRlci5qYXZhICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20v
Z29vZ2xlL3Byb3RvYnVmL0FueVByb3RvLmphdmEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0Jvb2xWYWx1ZS5qYXZhICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0Jvb2xWYWx1ZU9yQnVpbGRlci5qYXZh
ICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0J5dGVzVmFsdWUuamF2
YSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0J5dGVz
VmFsdWVPckJ1aWxkZXIuamF2YSAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3Rv
YnVmL2NvbmZvcm1hbmNlL0NvbmZvcm1hbmNlLmphdmEgICAgICAgICAgICAgXAotICBjb20vZ29v
Z2xlL3Byb3RvYnVmL0RvdWJsZVZhbHVlLmphdmEgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBjb20vZ29vZ2xlL3Byb3RvYnVmL0RvdWJsZVZhbHVlT3JCdWlsZGVyLmphdmEgICAgICAgICAg
ICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0R1cmF0aW9uLmphdmEgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0R1cmF0aW9uT3JCdWlsZGVy
LmphdmEgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0R1cmF0aW9u
UHJvdG8uamF2YSAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVm
L0ZpZWxkTWFzay5qYXZhICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xl
L3Byb3RvYnVmL0ZpZWxkTWFza09yQnVpbGRlci5qYXZhICAgICAgICAgICAgICAgICAgXAotICBj
b20vZ29vZ2xlL3Byb3RvYnVmL0ZpZWxkTWFza1Byb3RvLmphdmEgICAgICAgICAgICAgICAgICAg
ICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0Zsb2F0VmFsdWUuamF2YSAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0Zsb2F0VmFsdWVPckJ1aWxkZXIu
amF2YSAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0ludDMyVmFsdWUu
amF2YSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0lu
dDMyVmFsdWVPckJ1aWxkZXIuamF2YSAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3By
b3RvYnVmL0ludDY0VmFsdWUuamF2YSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20v
Z29vZ2xlL3Byb3RvYnVmL0ludDY0VmFsdWVPckJ1aWxkZXIuamF2YSAgICAgICAgICAgICAgICAg
XAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0xpc3RWYWx1ZS5qYXZhICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL0xpc3RWYWx1ZU9yQnVpbGRlci5qYXZh
ICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL051bGxWYWx1ZS5qYXZh
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL1N0cmlu
Z1ZhbHVlLmphdmEgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3Rv
YnVmL1N0cmluZ1ZhbHVlT3JCdWlsZGVyLmphdmEgICAgICAgICAgICAgICAgXAotICBjb20vZ29v
Z2xlL3Byb3RvYnVmL1N0cnVjdC5qYXZhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBjb20vZ29vZ2xlL3Byb3RvYnVmL1N0cnVjdE9yQnVpbGRlci5qYXZhICAgICAgICAgICAgICAg
ICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL1N0cnVjdFByb3RvLmphdmEgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL1RpbWVzdGFtcC5qYXZhICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL1RpbWVzdGFt
cE9yQnVpbGRlci5qYXZhICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVm
L1RpbWVzdGFtcFByb3RvLmphdmEgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xl
L3Byb3RvYnVmL1VJbnQzMlZhbHVlLmphdmEgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBj
b20vZ29vZ2xlL3Byb3RvYnVmL1VJbnQzMlZhbHVlT3JCdWlsZGVyLmphdmEgICAgICAgICAgICAg
ICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL1VJbnQ2NFZhbHVlLmphdmEgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL1VJbnQ2NFZhbHVlT3JCdWlsZGVy
LmphdmEgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL1ZhbHVlLmphdmEg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3Byb3RvYnVmL1Zh
bHVlT3JCdWlsZGVyLmphdmEgICAgICAgICAgICAgICAgICAgICAgXAotICBjb20vZ29vZ2xlL3By
b3RvYnVmL1dyYXBwZXJzUHJvdG8uamF2YSAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvYW55LnBiLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvYW55LnBiLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvYW55LnJiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvYW55X3BiMi5weSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvZHVyYXRpb24u
cGIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
ZHVyYXRpb24ucGIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvZHVyYXRpb24ucmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvZHVyYXRpb25fcGIyLnB5ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wYi5jYyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wYi5oICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5y
YiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvZmll
bGRfbWFza19wYjIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJv
dG9idWYvc3RydWN0LnBiLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBn
b29nbGUvcHJvdG9idWYvc3RydWN0LnBiLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvc3RydWN0LnJiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3RydWN0X3BiMi5weSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnBiLmNj
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdGltZXN0
YW1wLnBiLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvdGltZXN0YW1wLnJiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvdGltZXN0YW1wX3BiMi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucGIuY2MgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucGIuaCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucmIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvd3JhcHBlcnNf
cGIyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUv
cHJvdG9idWYvQW55LmphdmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2Nv
bS9nb29nbGUvcHJvdG9idWYvQW55T3JCdWlsZGVyLmphdmEgICAgICAgICAgICAgICAgICAgXAot
ICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvQW55UHJvdG8uamF2YSAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvQm9vbFZhbHVlLmphdmEgICAgICAg
ICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvQm9vbFZhbHVlT3JC
dWlsZGVyLmphdmEgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvQnl0
ZXNWYWx1ZS5qYXZhICAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJv
dG9idWYvQnl0ZXNWYWx1ZU9yQnVpbGRlci5qYXZhICAgICAgICAgICAgXAotICBsaXRlL2NvbS9n
b29nbGUvcHJvdG9idWYvY29uZm9ybWFuY2UvQ29uZm9ybWFuY2UuamF2YSAgICAgICAgXAotICBs
aXRlL2NvbS9nb29nbGUvcHJvdG9idWYvRG91YmxlVmFsdWUuamF2YSAgICAgICAgICAgICAgICAg
ICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvRG91YmxlVmFsdWVPckJ1aWxkZXIuamF2
YSAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvRHVyYXRpb24uamF2YSAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvRHVyYXRp
b25PckJ1aWxkZXIuamF2YSAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9i
dWYvRHVyYXRpb25Qcm90by5qYXZhICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29n
bGUvcHJvdG9idWYvRmllbGRNYXNrLmphdmEgICAgICAgICAgICAgICAgICAgICAgXAotICBsaXRl
L2NvbS9nb29nbGUvcHJvdG9idWYvRmllbGRNYXNrT3JCdWlsZGVyLmphdmEgICAgICAgICAgICAg
XAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvRmllbGRNYXNrUHJvdG8uamF2YSAgICAgICAg
ICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvRmxvYXRWYWx1ZS5qYXZhICAg
ICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvRmxvYXRWYWx1
ZU9yQnVpbGRlci5qYXZhICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYv
SW50MzJWYWx1ZS5qYXZhICAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUv
cHJvdG9idWYvSW50MzJWYWx1ZU9yQnVpbGRlci5qYXZhICAgICAgICAgICAgXAotICBsaXRlL2Nv
bS9nb29nbGUvcHJvdG9idWYvSW50NjRWYWx1ZS5qYXZhICAgICAgICAgICAgICAgICAgICAgXAot
ICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvSW50NjRWYWx1ZU9yQnVpbGRlci5qYXZhICAgICAg
ICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvTGlzdFZhbHVlLmphdmEgICAgICAg
ICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvTGlzdFZhbHVlT3JC
dWlsZGVyLmphdmEgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvTnVs
bFZhbHVlLmphdmEgICAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJv
dG9idWYvU3RyaW5nVmFsdWUuamF2YSAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9n
b29nbGUvcHJvdG9idWYvU3RyaW5nVmFsdWVPckJ1aWxkZXIuamF2YSAgICAgICAgICAgXAotICBs
aXRlL2NvbS9nb29nbGUvcHJvdG9idWYvU3RydWN0LmphdmEgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvU3RydWN0T3JCdWlsZGVyLmphdmEgICAg
ICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvU3RydWN0UHJvdG8uamF2
YSAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvVGltZXN0
YW1wLmphdmEgICAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9i
dWYvVGltZXN0YW1wT3JCdWlsZGVyLmphdmEgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29n
bGUvcHJvdG9idWYvVGltZXN0YW1wUHJvdG8uamF2YSAgICAgICAgICAgICAgICAgXAotICBsaXRl
L2NvbS9nb29nbGUvcHJvdG9idWYvVUludDMyVmFsdWUuamF2YSAgICAgICAgICAgICAgICAgICAg
XAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvVUludDMyVmFsdWVPckJ1aWxkZXIuamF2YSAg
ICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvVUludDY0VmFsdWUuamF2YSAg
ICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYvVUludDY0VmFs
dWVPckJ1aWxkZXIuamF2YSAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUvcHJvdG9idWYv
VmFsdWUuamF2YSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsaXRlL2NvbS9nb29nbGUv
cHJvdG9idWYvVmFsdWVPckJ1aWxkZXIuamF2YSAgICAgICAgICAgICAgICAgXAotICBsaXRlL2Nv
bS9nb29nbGUvcHJvdG9idWYvV3JhcHBlcnNQcm90by5qYXZhCi0KLWJpbl9QUk9HUkFNUyA9IGNv
bmZvcm1hbmNlLXRlc3QtcnVubmVyIGNvbmZvcm1hbmNlLWNwcAotCi0jIEFsbCBzb3VyY2UgZmls
ZXMgZXhjZXBldCBDKysvT2JqZWN0aXZlLUMgb25lcyBzaG91bGQgYmUgZXhwbGljaXRseSBsaXN0
ZWQKLSMgaGVyZSBiZWNhdXNlIHRoZSBhdXRvY29uZiB0b29scyBkb24ndCBpbmNsdWRlIGZpbGVz
IG9mIG90aGVyIGxhbmd1YWdlcwotIyBhdXRvbWF0aWNhbGx5LgotRVhUUkFfRElTVCA9ICAgICAg
ICAgICAgICAgICAgXAotICBDb25mb3JtYW5jZUphdmEuamF2YSAgICAgICAgXAotICBDb25mb3Jt
YW5jZUphdmFMaXRlLmphdmEgICAgXAotICBSRUFETUUubWQgICAgICAgICAgICAgICAgICAgXAot
ICBjb25mb3JtYW5jZS5wcm90byAgICAgICAgICAgXAotICBjb25mb3JtYW5jZV9weXRob24ucHkg
ICAgICAgXAotICBjb25mb3JtYW5jZV9ydWJ5LnJiICAgICAgICAgXAotICBmYWlsdXJlX2xpc3Rf
Y3BwLnR4dCAgICAgICAgXAotICBmYWlsdXJlX2xpc3RfY3NoYXJwLnR4dCAgICAgXAotICBmYWls
dXJlX2xpc3RfamF2YS50eHQgICAgICAgXAotICBmYWlsdXJlX2xpc3Rfb2JqYy50eHQgICAgICAg
XAotICBmYWlsdXJlX2xpc3RfcHl0aG9uLnR4dCAgICAgXAotICBmYWlsdXJlX2xpc3RfcHl0aG9u
X2NwcC50eHQgXAotICBmYWlsdXJlX2xpc3RfcHl0aG9uLXBvc3QyNi50eHQgXAotICBmYWlsdXJl
X2xpc3RfcnVieS50eHQKLQotY29uZm9ybWFuY2VfdGVzdF9ydW5uZXJfTERBREQgPSAkKHRvcF9z
cmNkaXIpL3NyYy9saWJwcm90b2J1Zi5sYQotY29uZm9ybWFuY2VfdGVzdF9ydW5uZXJfU09VUkNF
UyA9IGNvbmZvcm1hbmNlX3Rlc3QuaCBjb25mb3JtYW5jZV90ZXN0LmNjIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25mb3JtYW5jZV90ZXN0X3J1bm5lci5jYyAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcmRfcGFydHkvanNv
bmNwcC9qc29uLmggICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXJkX3BhcnR5L2pzb25jcHAvanNvbmNwcC5jcHAKLW5vZGlzdF9jb25mb3JtYW5jZV90
ZXN0X3J1bm5lcl9TT1VSQ0VTID0gY29uZm9ybWFuY2UucGIuY2MKLWNvbmZvcm1hbmNlX3Rlc3Rf
cnVubmVyX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL3NyYyAtSSQoc3JjZGlyKQotY29uZm9y
bWFuY2VfdGVzdF9ydW5uZXJfQ1hYRkxBR1MgPSAtc3RkPWMrKzExCi0jIEV4cGxpY2l0IGRlcHMg
YmVhY3VzZSBCVUlMVF9TT1VSQ0VTIGFyZSBvbmx5IGRvbmUgYmVmb3JlIGEgIm1ha2UgYWxsL2No
ZWNrIgotIyBzbyBhIGRpcmVjdCAibWFrZSB0ZXN0X2NwcCIgY291bGQgZmFpbCBpZiBwYXJhbGxl
bCBlbm91Z2guCi1jb25mb3JtYW5jZV90ZXN0X3J1bm5lci1jb25mb3JtYW5jZV90ZXN0LiQoT0JK
RVhUKTogY29uZm9ybWFuY2UucGIuaAotY29uZm9ybWFuY2VfdGVzdF9ydW5uZXItY29uZm9ybWFu
Y2VfdGVzdF9ydW5uZXIuJChPQkpFWFQpOiBjb25mb3JtYW5jZS5wYi5oCi0KLWNvbmZvcm1hbmNl
X2NwcF9MREFERCA9ICQodG9wX3NyY2Rpcikvc3JjL2xpYnByb3RvYnVmLmxhCi1jb25mb3JtYW5j
ZV9jcHBfU09VUkNFUyA9IGNvbmZvcm1hbmNlX2NwcC5jYwotbm9kaXN0X2NvbmZvcm1hbmNlX2Nw
cF9TT1VSQ0VTID0gY29uZm9ybWFuY2UucGIuY2MKLWNvbmZvcm1hbmNlX2NwcF9DUFBGTEFHUyA9
IC1JJCh0b3Bfc3JjZGlyKS9zcmMKLSMgRXhwbGljaXQgZGVwIGJlYWN1c2UgQlVJTFRfU09VUkNF
UyBhcmUgb25seSBkb25lIGJlZm9yZSBhICJtYWtlIGFsbC9jaGVjayIKLSMgc28gYSBkaXJlY3Qg
Im1ha2UgdGVzdF9jcHAiIGNvdWxkIGZhaWwgaWYgcGFyYWxsZWwgZW5vdWdoLgotY29uZm9ybWFu
Y2VfY3BwLWNvbmZvcm1hbmNlX2NwcC4kKE9CSkVYVCk6IGNvbmZvcm1hbmNlLnBiLmgKLQotaWYg
T0JKQ19DT05GT1JNQU5DRV9URVNUCi0KLWJpbl9QUk9HUkFNUyArPSBjb25mb3JtYW5jZS1vYmpj
Ci0KLWNvbmZvcm1hbmNlX29iamNfU09VUkNFUyA9IGNvbmZvcm1hbmNlX29iamMubSAuLi9vYmpl
Y3RpdmVjL0dQQlByb3RvY29sQnVmZmVycy5tCi1ub2Rpc3RfY29uZm9ybWFuY2Vfb2JqY19TT1VS
Q0VTID0gQ29uZm9ybWFuY2UucGJvYmpjLm0KLSMgT24gdHJhdmlzLCB0aGUgYnVpbGQgZmFpbHMg
d2l0aG91dCB0aGUgaXN5c3Jvb3QgYmVjYXVzZSB3aGF0ZXZlciBzeXN0ZW0KLSMgaGVhZGVycyBh
cmUgYmVpbmcgZm91bmQgZG9uJ3QgaW5jbHVkZSBnZW5lcmljcyBzdXBwb3J0IGZvcgotIyBOU0Fy
cmF5L05TRGljdGlvbmFyeSwgdGhlIG9ubHkgZ3Vlc3MgaXMgdGhlaXIgaW1hZ2UgYXQgb25lIHRp
bWUgaGFkIGFuIG9kZAotIyBzZXR1cCBmb3IgWGNvZGUgYW5kIG9sZCBmcmFtZXdvcmtzIGFyZSBi
ZWluZyBmb3VuZC4KLWNvbmZvcm1hbmNlX29iamNfQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2Rpcikv
b2JqZWN0aXZlYyAtaXN5c3Jvb3QgYHhjcnVuIC0tc2RrIG1hY29zeCAtLXNob3ctc2RrLXBhdGhg
Ci1jb25mb3JtYW5jZV9vYmpjX0xERkxBR1MgPSAtZnJhbWV3b3JrIEZvdW5kYXRpb24KLSMgRXhw
bGljaXQgZGVwIGJlYWN1c2UgQlVJTFRfU09VUkNFUyBhcmUgb25seSBkb25lIGJlZm9yZSBhICJt
YWtlIGFsbC9jaGVjayIKLSMgc28gYSBkaXJlY3QgIm1ha2UgdGVzdF9vYmpjIiBjb3VsZCBmYWls
IGlmIHBhcmFsbGVsIGVub3VnaC4KLWNvbmZvcm1hbmNlX29iamMtY29uZm9ybWFuY2Vfb2JqYy4k
KE9CSkVYVCk6IENvbmZvcm1hbmNlLnBib2JqYy5oCi0KLWVuZGlmCi0KLWlmIFVTRV9FWFRFUk5B
TF9QUk9UT0MKLQotIyBTb21lIGltcGxlbWVudGF0aW9ucyBpbmNsdWRlIHByZS1nZW5lcmF0ZWQg
dmVyc2lvbnMgb2Ygd2VsbC1rbm93biB0eXBlcy4KLXByb3RvY19taWRkbGVtYW46ICQoY29uZm9y
bWFuY2VfcHJvdG9jX2lucHV0cykgJCh3ZWxsX2tub3duX3R5cGVfcHJvdG9jX2lucHV0cykKLQkk
KFBST1RPQykgLUkkKHNyY2RpcikgLUkkKHRvcF9zcmNkaXIpIC0tY3BwX291dD0uIC0tamF2YV9v
dXQ9LiAtLXJ1Ynlfb3V0PS4gLS1vYmpjX291dD0uIC0tcHl0aG9uX291dD0uICQoY29uZm9ybWFu
Y2VfcHJvdG9jX2lucHV0cykKLQkkKFBST1RPQykgLUkkKHNyY2RpcikgLUkkKHRvcF9zcmNkaXIp
IC0tY3BwX291dD0uIC0tamF2YV9vdXQ9LiAtLXJ1Ynlfb3V0PS4gLS1weXRob25fb3V0PS4gJCh3
ZWxsX2tub3duX3R5cGVfcHJvdG9jX2lucHV0cykKLQkkKFBST1RPQykgLUkkKHNyY2RpcikgLUkk
KHRvcF9zcmNkaXIpIC0tamF2YV9vdXQ9bGl0ZTpsaXRlICQoY29uZm9ybWFuY2VfcHJvdG9jX2lu
cHV0cykgJCh3ZWxsX2tub3duX3R5cGVfcHJvdG9jX2lucHV0cykKLQl0b3VjaCBwcm90b2NfbWlk
ZGxlbWFuCi0KLWVsc2UKLQotIyBXZSBoYXZlIHRvIGNkIHRvICQoc3JjZGlyKSBiZWZvcmUgZXhl
Y3V0aW5nIHByb3RvYyBiZWNhdXNlICQocHJvdG9jX2lucHV0cykgaXMKLSMgcmVsYXRpdmUgdG8g
c3JjZGlyLCB3aGljaCBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IGRpcmVjdG9y
eSB3aGVuCi0jIGJ1aWxkaW5nIG91dC1vZi10cmVlLgotcHJvdG9jX21pZGRsZW1hbjogJCh0b3Bf
c3JjZGlyKS9zcmMvcHJvdG9jJChFWEVFWFQpICQoY29uZm9ybWFuY2VfcHJvdG9jX2lucHV0cykg
JCh3ZWxsX2tub3duX3R5cGVfcHJvdG9jX2lucHV0cykKLQlvbGRwd2Q9YHB3ZGAgJiYgKCBjZCAk
KHNyY2RpcikgJiYgJCRvbGRwd2QvLi4vc3JjL3Byb3RvYyQoRVhFRVhUKSAtSS4gLUkkKHRvcF9z
cmNkaXIpL3NyYyAtLWNwcF9vdXQ9JCRvbGRwd2QgLS1qYXZhX291dD0kJG9sZHB3ZCAtLXJ1Ynlf
b3V0PSQkb2xkcHdkIC0tb2JqY19vdXQ9JCRvbGRwd2QgLS1weXRob25fb3V0PSQkb2xkcHdkICQo
Y29uZm9ybWFuY2VfcHJvdG9jX2lucHV0cykgKQotCW9sZHB3ZD1gcHdkYCAmJiAoIGNkICQoc3Jj
ZGlyKSAmJiAkJG9sZHB3ZC8uLi9zcmMvcHJvdG9jJChFWEVFWFQpIC1JLiAtSSQodG9wX3NyY2Rp
cikvc3JjIC0tY3BwX291dD0kJG9sZHB3ZCAtLWphdmFfb3V0PSQkb2xkcHdkIC0tcnVieV9vdXQ9
JCRvbGRwd2QgLS1weXRob25fb3V0PSQkb2xkcHdkICQod2VsbF9rbm93bl90eXBlX3Byb3RvY19p
bnB1dHMpICkKLQlAbWtkaXIgLXAgbGl0ZQotCW9sZHB3ZD1gcHdkYCAmJiAoIGNkICQoc3JjZGly
KSAmJiAkJG9sZHB3ZC8uLi9zcmMvcHJvdG9jJChFWEVFWFQpIC1JLiAtSSQodG9wX3NyY2Rpcikv
c3JjIC0tamF2YV9vdXQ9bGl0ZTokJG9sZHB3ZC9saXRlICQoY29uZm9ybWFuY2VfcHJvdG9jX2lu
cHV0cykgJCh3ZWxsX2tub3duX3R5cGVfcHJvdG9jX2lucHV0cykgKQotCXRvdWNoIHByb3RvY19t
aWRkbGVtYW4KLQotZW5kaWYKLQotJChwcm90b2Nfb3V0cHV0cyk6IHByb3RvY19taWRkbGVtYW4K
LQotJChvdGhlcl9sYW5ndWFnZV9wcm90b2Nfb3V0cHV0cyk6IHByb3RvY19taWRkbGVtYW4KLQot
QlVJTFRfU09VUkNFUyA9ICQocHJvdG9jX291dHB1dHMpICQob3RoZXJfbGFuZ3VhZ2VfcHJvdG9j
X291dHB1dHMpCi0KLUNMRUFORklMRVMgPSAkKHByb3RvY19vdXRwdXRzKSBwcm90b2NfbWlkZGxl
bWFuIGphdmFjX21pZGRsZW1hbiBjb25mb3JtYW5jZS1qYXZhIGphdmFjX21pZGRsZW1hbl9saXRl
IGNvbmZvcm1hbmNlLWphdmEtbGl0ZSBjb25mb3JtYW5jZS1jc2hhcnAgJChvdGhlcl9sYW5ndWFn
ZV9wcm90b2Nfb3V0cHV0cykKLQotTUFJTlRBSU5FUkNMRUFORklMRVMgPSAgIFwKLSAgTWFrZWZp
bGUuaW4KLQotamF2YWNfbWlkZGxlbWFuOiBDb25mb3JtYW5jZUphdmEuamF2YSBwcm90b2NfbWlk
ZGxlbWFuICQob3RoZXJfbGFuZ3VhZ2VfcHJvdG9jX291dHB1dHMpCi0JamFyPWBscyAuLi9qYXZh
L3V0aWwvdGFyZ2V0LypqYXItd2l0aC1kZXBlbmRlbmNpZXMuamFyYCAmJiBqYXZhYyAtY2xhc3Nw
YXRoIC4uL2phdmEvdGFyZ2V0L2NsYXNzZXM6JCRqYXIgQ29uZm9ybWFuY2VKYXZhLmphdmEgY29t
L2dvb2dsZS9wcm90b2J1Zi9jb25mb3JtYW5jZS9Db25mb3JtYW5jZS5qYXZhCi0JQHRvdWNoIGph
dmFjX21pZGRsZW1hbgotCi1jb25mb3JtYW5jZS1qYXZhOiBqYXZhY19taWRkbGVtYW4KLQlAZWNo
byAiV3JpdGluZyBzaG9ydGN1dCBzY3JpcHQgY29uZm9ybWFuY2UtamF2YS4uLiIKLQlAZWNobyAn
IyEgL2Jpbi9zaCcgPiBjb25mb3JtYW5jZS1qYXZhCi0JQGphcj1gbHMgLi4vamF2YS91dGlsL3Rh
cmdldC8qamFyLXdpdGgtZGVwZW5kZW5jaWVzLmphcmAgJiYgZWNobyBqYXZhIC1jbGFzc3BhdGgg
LjouLi9qYXZhL3RhcmdldC9jbGFzc2VzOiQkamFyIENvbmZvcm1hbmNlSmF2YSAnJCRAJyA+PiBj
b25mb3JtYW5jZS1qYXZhCi0JQGNobW9kICt4IGNvbmZvcm1hbmNlLWphdmEKLQotamF2YWNfbWlk
ZGxlbWFuX2xpdGU6IENvbmZvcm1hbmNlSmF2YUxpdGUuamF2YSBwcm90b2NfbWlkZGxlbWFuICQo
b3RoZXJfbGFuZ3VhZ2VfcHJvdG9jX291dHB1dHMpCi0JamF2YWMgLWNsYXNzcGF0aCAuLi9qYXZh
L2xpdGUvdGFyZ2V0L2NsYXNzZXM6bGl0ZSBDb25mb3JtYW5jZUphdmFMaXRlLmphdmEgbGl0ZS9j
b20vZ29vZ2xlL3Byb3RvYnVmL2NvbmZvcm1hbmNlL0NvbmZvcm1hbmNlLmphdmEKLQlAdG91Y2gg
amF2YWNfbWlkZGxlbWFuX2xpdGUKLQotY29uZm9ybWFuY2UtamF2YS1saXRlOiBqYXZhY19taWRk
bGVtYW5fbGl0ZQotCUBlY2hvICJXcml0aW5nIHNob3J0Y3V0IHNjcmlwdCBjb25mb3JtYW5jZS1q
YXZhLWxpdGUuLi4iCi0JQGVjaG8gJyMhIC9iaW4vc2gnID4gY29uZm9ybWFuY2UtamF2YS1saXRl
Ci0JQGVjaG8gamF2YSAtY2xhc3NwYXRoIC46Li4vamF2YS9saXRlL3RhcmdldC9jbGFzc2VzOmxp
dGUgQ29uZm9ybWFuY2VKYXZhTGl0ZSAnJCRAJyA+PiBjb25mb3JtYW5jZS1qYXZhLWxpdGUKLQlA
Y2htb2QgK3ggY29uZm9ybWFuY2UtamF2YS1saXRlCi0KLSMgQ3VycmVudGx5IHRoZSBjb25mb3Jt
YW5jZSBjb2RlIGlzIGFsb25nc2lkZSB0aGUgcmVzdCBvZiB0aGUgQyMKLSMgc291cmNlLCBhcyBp
dCdzIGVhc2llciB0byBtYWludGFpbiB0aGVyZS4gV2UgYXNzdW1lIHdlJ3ZlIGFscmVhZHkKLSMg
YnVpbHQgdGhhdCwgc28gd2UganVzdCBuZWVkIGEgc2NyaXB0IHRvIHJ1biBpdC4KLWNvbmZvcm1h
bmNlLWNzaGFycDogJChvdGhlcl9sYW5ndWFnZV9wcm90b2Nfb3V0cHV0cykKLQlAZWNobyAiV3Jp
dGluZyBzaG9ydGN1dCBzY3JpcHQgY29uZm9ybWFuY2UtY3NoYXJwLi4uIgotCUBlY2hvICcjISAv
YmluL3NoJyA+IGNvbmZvcm1hbmNlLWNzaGFycAotCUBlY2hvICdtb25vIC4uL2NzaGFycC9zcmMv
R29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlL2Jpbi9SZWxlYXNlL0dvb2dsZS5Qcm90b2J1Zi5D
b25mb3JtYW5jZS5leGUgIiQkQCInID4+IGNvbmZvcm1hbmNlLWNzaGFycAotCUBjaG1vZCAreCBj
b25mb3JtYW5jZS1jc2hhcnAKLQotIyBUYXJnZXRzIGZvciBhY3R1YWxseSBydW5uaW5nIHRlc3Rz
LgotdGVzdF9jcHA6IHByb3RvY19taWRkbGVtYW4gY29uZm9ybWFuY2UtdGVzdC1ydW5uZXIgY29u
Zm9ybWFuY2UtY3BwCi0JLi9jb25mb3JtYW5jZS10ZXN0LXJ1bm5lciAtLWZhaWx1cmVfbGlzdCBm
YWlsdXJlX2xpc3RfY3BwLnR4dCAuL2NvbmZvcm1hbmNlLWNwcAotCi10ZXN0X2phdmE6IHByb3Rv
Y19taWRkbGVtYW4gY29uZm9ybWFuY2UtdGVzdC1ydW5uZXIgY29uZm9ybWFuY2UtamF2YQotCS4v
Y29uZm9ybWFuY2UtdGVzdC1ydW5uZXIgLS1mYWlsdXJlX2xpc3QgZmFpbHVyZV9saXN0X2phdmEu
dHh0IC4vY29uZm9ybWFuY2UtamF2YQotCi10ZXN0X2phdmFfbGl0ZTogcHJvdG9jX21pZGRsZW1h
biBjb25mb3JtYW5jZS10ZXN0LXJ1bm5lciBjb25mb3JtYW5jZS1qYXZhLWxpdGUKLQkuL2NvbmZv
cm1hbmNlLXRlc3QtcnVubmVyIC4vY29uZm9ybWFuY2UtamF2YS1saXRlCi0KLXRlc3RfY3NoYXJw
OiBwcm90b2NfbWlkZGxlbWFuIGNvbmZvcm1hbmNlLXRlc3QtcnVubmVyIGNvbmZvcm1hbmNlLWNz
aGFycAotCS4vY29uZm9ybWFuY2UtdGVzdC1ydW5uZXIgLS1mYWlsdXJlX2xpc3QgZmFpbHVyZV9s
aXN0X2NzaGFycC50eHQgLi9jb25mb3JtYW5jZS1jc2hhcnAKLQotdGVzdF9ydWJ5OiBwcm90b2Nf
bWlkZGxlbWFuIGNvbmZvcm1hbmNlLXRlc3QtcnVubmVyICQob3RoZXJfbGFuZ3VhZ2VfcHJvdG9j
X291dHB1dHMpCi0JUlVCWUxJQj0uLi9ydWJ5L2xpYjouIC4vY29uZm9ybWFuY2UtdGVzdC1ydW5u
ZXIgLS1mYWlsdXJlX2xpc3QgZmFpbHVyZV9saXN0X3J1YnkudHh0IC4vY29uZm9ybWFuY2VfcnVi
eS5yYgotCi0jIFRoZXNlIGRlcGVuZCBvbiBsaWJyYXJ5IHBhdGhzIGJlaW5nIHByb3Blcmx5IHNl
dCB1cC4gIFRoZSBlYXNpZXN0IHdheSB0bwotIyBydW4gdGhlbSBpcyB0byBqdXN0IHVzZSAidG94
IiBmcm9tIHRoZSBweXRob24gZGlyLgotdGVzdF9weXRob246IHByb3RvY19taWRkbGVtYW4gY29u
Zm9ybWFuY2UtdGVzdC1ydW5uZXIKLQkuL2NvbmZvcm1hbmNlLXRlc3QtcnVubmVyIC0tZmFpbHVy
ZV9saXN0IGZhaWx1cmVfbGlzdF9weXRob24udHh0ICQoQ09ORk9STUFOQ0VfUFlUSE9OX0VYVFJB
X0ZBSUxVUkVTKSAuL2NvbmZvcm1hbmNlX3B5dGhvbi5weQotCi10ZXN0X3B5dGhvbl9jcHA6IHBy
b3RvY19taWRkbGVtYW4gY29uZm9ybWFuY2UtdGVzdC1ydW5uZXIKLQkuL2NvbmZvcm1hbmNlLXRl
c3QtcnVubmVyIC0tZmFpbHVyZV9saXN0IGZhaWx1cmVfbGlzdF9weXRob25fY3BwLnR4dCAkKENP
TkZPUk1BTkNFX1BZVEhPTl9FWFRSQV9GQUlMVVJFUykgLi9jb25mb3JtYW5jZV9weXRob24ucHkK
LQotaWYgT0JKQ19DT05GT1JNQU5DRV9URVNUCi0KLXRlc3Rfb2JqYzogcHJvdG9jX21pZGRsZW1h
biBjb25mb3JtYW5jZS10ZXN0LXJ1bm5lciBjb25mb3JtYW5jZS1vYmpjCi0JLi9jb25mb3JtYW5j
ZS10ZXN0LXJ1bm5lciAtLWZhaWx1cmVfbGlzdCBmYWlsdXJlX2xpc3Rfb2JqYy50eHQgLi9jb25m
b3JtYW5jZS1vYmpjCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL1JFQURNRS5tZCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y29uZm9ybWFuY2UvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzg4
MDU1ZmJhNTk4ZjE1N2M2NDc1OGVlNzhhMWJjODBlM2RlZDRhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2UvUkVBRE1FLm1kCisrKyAvZGV2
L251bGwKQEAgLTEsNDUgKzAsMCBAQAotUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLQotWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcv
Z29vZ2xlL3Byb3RvYnVmLnN2Zz9icmFuY2g9bWFzdGVyKV0oaHR0cHM6Ly90cmF2aXMtY2kub3Jn
L2dvb2dsZS9wcm90b2J1ZikKLQotQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KLQotVGhpcyBk
aXJlY3RvcnkgY29udGFpbnMgY29uZm9ybWFuY2UgdGVzdHMgZm9yIHRlc3RpbmcgY29tcGxldGVu
ZXNzIGFuZAotY29ycmVjdG5lc3Mgb2YgUHJvdG9jb2wgQnVmZmVycyBpbXBsZW1lbnRhdGlvbnMu
ICBUaGVzZSB0ZXN0cyBhcmUgZGVzaWduZWQKLXRvIGJlIGVhc3kgdG8gcnVuIGFnYWluc3QgYW55
IFByb3RvY29sIEJ1ZmZlcnMgaW1wbGVtZW50YXRpb24uCi0KLVRoaXMgZGlyZWN0b3J5IGNvbnRh
aW5zIHRoZSB0ZXN0ZXIgcHJvY2VzcyBgY29uZm9ybWFuY2UtdGVzdGAsIHdoaWNoCi1jb250YWlu
cyBhbGwgb2YgdGhlIHRlc3RzIHRoZW1zZWx2ZXMuICBUaGVuIHNlcGFyYXRlIHByb2dyYW1zIHdy
aXR0ZW4KLWluIHdoYXRldmVyIGxhbmd1YWdlIHlvdSB3YW50IHRvIHRlc3QgY29tbXVuaWNhdGUg
d2l0aCB0aGUgdGVzdGVyCi1wcm9ncmFtIG92ZXIgYSBwaXBlLgotCi1CZWZvcmUgcnVubmluZyBh
bnkgb2YgdGhlc2UgdGVzdHMsIG1ha2Ugc3VyZSB5b3UgcnVuIGBtYWtlYCBpbiB0aGUgYmFzZQot
ZGlyZWN0b3J5IHRvIGJ1aWxkIGBwcm90b2NgLCBzaW5jZSBhbGwgdGhlIHRlc3RzIGRlcGVuZCBv
biBpdC4KLQotICAgICQgbWFrZQotCi1UaGVuIHRvIHJ1biB0aGUgdGVzdHMgYWdhaW5zdCB0aGUg
QysrIGltcGxlbWVudGF0aW9uLCBydW46Ci0KLSAgICAkIGNkIGNvbmZvcm1hbmNlICYmIG1ha2Ug
dGVzdF9jcHAKLQotTW9yZSB0ZXN0cyBhbmQgbGFuZ3VhZ2VzIHdpbGwgYmUgYWRkZWQgc29vbiEK
LQotVGVzdGluZyBvdGhlciBQcm90b2NvbCBCdWZmZXIgaW1wbGVtZW50YXRpb25zCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gcnVuIHRoZXNlIHRl
c3RzIGFnYWluc3QgYSBuZXcgUHJvdG9jb2wgQnVmZmVycyBpbXBsZW1lbnRhdGlvbiwgd3JpdGUg
YQotcHJvZ3JhbSBpbiB5b3VyIGxhbmd1YWdlIHRoYXQgdXNlcyB0aGUgcHJvdG9idWYgaW1wbGVt
ZW50YXRpb24geW91IHdhbnQKLXRvIHRlc3QuICBUaGlzIHByb2dyYW0gc2hvdWxkIGltcGxlbWVu
dCB0aGUgdGVzdGluZyBwcm90b2NvbCBkZWZpbmVkIGluCi1bY29uZm9ybWFuY2UucHJvdG9dKGh0
dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWYvYmxvYi9tYXN0ZXIvY29uZm9ybWFuY2Uv
Y29uZm9ybWFuY2UucHJvdG8pLgotVGhpcyBpcyBkZXNpZ25lZCB0byBiZSBhcyBlYXN5IGFzIHBv
c3NpYmxlOiB0aGUgQysrIHZlcnNpb24gaXMgb25seQotMTUwIGxpbmVzIGFuZCBpcyBhIGdvb2Qg
ZXhhbXBsZSBmb3Igd2hhdCB0aGlzIHByb2dyYW0gc2hvdWxkIGxvb2sgbGlrZQotKHNlZSBbY29u
Zm9ybWFuY2VfY3BwLmNjXShodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmL2Jsb2Iv
bWFzdGVyL2NvbmZvcm1hbmNlL2NvbmZvcm1hbmNlX2NwcC5jYykpLgotVGhlIHByb2dyYW0gb25s
eSBuZWVkcyB0byBiZSBhYmxlIHRvIHJlYWQgZnJvbSBzdGRpbiBhbmQgd3JpdGUgdG8gc3Rkb3V0
LgotCi1Qb3J0YWJpbGl0eQotLS0tLS0tLS0tLS0KLQotTm90ZSB0aGF0IHRoZSB0ZXN0IHJ1bm5l
ciBjdXJyZW50bHkgZG9lcyBub3Qgd29yayBvbiBXaW5kb3dzLiAgUGF0Y2hlcwotdG8gZml4IHRo
aXMgYXJlIHdlbGNvbWUhICAoQnV0IHBsZWFzZSBnZXQgaW4gdG91Y2ggZmlyc3QgdG8gc2V0dGxl
IG9uCi1hIGdlbmVyYWwgaW1wbGVtZW50YXRpb24gc3RyYXRlZ3kpLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25m
b3JtYW5jZS9jb25mb3JtYW5jZS5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2UvY29uZm9ybWFuY2UucHJvdG8K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjOTYwNzRhYzgwNzRlYmZjNTQ0OGMyMGZk
YzUzZjk2NTBkNjVlNmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9jb25mb3JtYW5jZS9jb25mb3JtYW5jZS5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDI3
MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0g
InByb3RvMyI7Ci1wYWNrYWdlIGNvbmZvcm1hbmNlOwotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJj
b20uZ29vZ2xlLnByb3RvYnVmLmNvbmZvcm1hbmNlIjsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9i
dWYvYW55LnByb3RvIjsKLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvIjsK
LWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucHJvdG8iOwotaW1wb3J0ICJnb29n
bGUvcHJvdG9idWYvc3RydWN0LnByb3RvIjsKLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL3RpbWVz
dGFtcC5wcm90byI7Ci1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90byI7Ci0K
LS8vIFRoaXMgZGVmaW5lcyB0aGUgY29uZm9ybWFuY2UgdGVzdGluZyBwcm90b2NvbC4gIFRoaXMg
cHJvdG9jb2wgZXhpc3RzIGJldHdlZW4KLS8vIHRoZSBjb25mb3JtYW5jZSB0ZXN0IHN1aXRlIGl0
c2VsZiBhbmQgdGhlIGNvZGUgYmVpbmcgdGVzdGVkLiAgRm9yIGVhY2ggdGVzdCwKLS8vIHRoZSBz
dWl0ZSB3aWxsIHNlbmQgYSBDb25mb3JtYW5jZVJlcXVlc3QgbWVzc2FnZSBhbmQgZXhwZWN0IGEK
LS8vIENvbmZvcm1hbmNlUmVzcG9uc2UgbWVzc2FnZS4KLS8vCi0vLyBZb3UgY2FuIGVpdGhlciBy
dW4gdGhlIHRlc3RzIGluIHR3byBkaWZmZXJlbnQgd2F5czoKLS8vCi0vLyAgIDEuIGluLXByb2Nl
c3MgKHVzaW5nIHRoZSBpbnRlcmZhY2UgaW4gY29uZm9ybWFuY2VfdGVzdC5oKS4KLS8vCi0vLyAg
IDIuIGFzIGEgc3ViLXByb2Nlc3MgY29tbXVuaWNhdGluZyBvdmVyIGEgcGlwZS4gIEluZm9ybWF0
aW9uIGFib3V0IGhvdyB0bwotLy8gICAgICBkbyB0aGlzIGlzIGluIGNvbmZvcm1hbmNlX3Rlc3Rf
cnVubmVyLmNjLgotLy8KLS8vIFByb3MvY29ucyBvZiB0aGUgdHdvIGFwcHJvYWNoZXM6Ci0vLwot
Ly8gICAtIHJ1bm5pbmcgYXMgYSBzdWItcHJvY2VzcyBpcyBtdWNoIHNpbXBsZXIgZm9yIGxhbmd1
YWdlcyBvdGhlciB0aGFuIEMvQysrLgotLy8KLS8vICAgLSBydW5uaW5nIGFzIGEgc3ViLXByb2Nl
c3MgbWF5IGJlIG1vcmUgdHJpY2t5IGluIHVudXN1YWwgZW52aXJvbm1lbnRzIGxpa2UKLS8vICAg
ICBpT1MgYXBwcywgd2hlcmUgZm9yay9zdGRpbi9zdGRvdXQgYXJlIG5vdCBhdmFpbGFibGUuCi0K
LWVudW0gV2lyZUZvcm1hdCB7Ci0gIFVOU1BFQ0lGSUVEID0gMDsKLSAgUFJPVE9CVUYgPSAxOwot
ICBKU09OID0gMjsKLX0KLQotLy8gUmVwcmVzZW50cyBhIHNpbmdsZSB0ZXN0IGNhc2UncyBpbnB1
dC4gIFRoZSB0ZXN0ZWUgc2hvdWxkOgotLy8KLS8vICAgMS4gcGFyc2UgdGhpcyBwcm90byAod2hp
Y2ggc2hvdWxkIGFsd2F5cyBzdWNjZWVkKQotLy8gICAyLiBwYXJzZSB0aGUgcHJvdG9idWYgb3Ig
SlNPTiBwYXlsb2FkIGluICJwYXlsb2FkIiAod2hpY2ggbWF5IGZhaWwpCi0vLyAgIDMuIGlmIHRo
ZSBwYXJzZSBzdWNjZWVkZWQsIHNlcmlhbGl6ZSB0aGUgbWVzc2FnZSBpbiB0aGUgcmVxdWVzdGVk
IGZvcm1hdC4KLW1lc3NhZ2UgQ29uZm9ybWFuY2VSZXF1ZXN0IHsKLSAgLy8gVGhlIHBheWxvYWQg
KHdoZXRoZXIgcHJvdG9idWYgb2YgSlNPTikgaXMgYWx3YXlzIGZvciBhIFRlc3RBbGxUeXBlcyBw
cm90bwotICAvLyAoc2VlIGJlbG93KS4KLSAgb25lb2YgcGF5bG9hZCB7Ci0gICAgYnl0ZXMgcHJv
dG9idWZfcGF5bG9hZCA9IDE7Ci0gICAgc3RyaW5nIGpzb25fcGF5bG9hZCA9IDI7Ci0gIH0KLQot
ICAvLyBXaGljaCBmb3JtYXQgc2hvdWxkIHRoZSB0ZXN0ZWUgc2VyaWFsaXplIGl0cyBtZXNzYWdl
IHRvPwotICBXaXJlRm9ybWF0IHJlcXVlc3RlZF9vdXRwdXRfZm9ybWF0ID0gMzsKLX0KLQotLy8g
UmVwcmVzZW50cyBhIHNpbmdsZSB0ZXN0IGNhc2UncyBvdXRwdXQuCi1tZXNzYWdlIENvbmZvcm1h
bmNlUmVzcG9uc2UgewotICBvbmVvZiByZXN1bHQgewotICAgIC8vIFRoaXMgc3RyaW5nIHNob3Vs
ZCBiZSBzZXQgdG8gaW5kaWNhdGUgcGFyc2luZyBmYWlsZWQuICBUaGUgc3RyaW5nIGNhbgotICAg
IC8vIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyc2UgZXJyb3IgaWYgaXQg
aXMgYXZhaWxhYmxlLgotICAgIC8vCi0gICAgLy8gU2V0dGluZyB0aGlzIHN0cmluZyBkb2VzIG5v
dCBuZWNlc3NhcmlseSBtZWFuIHRoZSB0ZXN0ZWUgZmFpbGVkIHRoZQotICAgIC8vIHRlc3QuICBT
b21lIG9mIHRoZSB0ZXN0IGNhc2VzIGFyZSBpbnRlbnRpb25hbGx5IGludmFsaWQgaW5wdXQuCi0g
ICAgc3RyaW5nIHBhcnNlX2Vycm9yID0gMTsKLQotICAgIC8vIElmIHRoZSBpbnB1dCB3YXMgc3Vj
Y2Vzc2Z1bGx5IHBhcnNlZCBidXQgZXJyb3JzIG9jY3VycmVkIHdoZW4KLSAgICAvLyBzZXJpYWxp
emluZyBpdCB0byB0aGUgcmVxdWVzdGVkIG91dHB1dCBmb3JtYXQsIHNldCB0aGUgZXJyb3IgbWVz
c2FnZSBpbgotICAgIC8vIHRoaXMgZmllbGQuCi0gICAgc3RyaW5nIHNlcmlhbGl6ZV9lcnJvciA9
IDY7Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBiZSBzZXQgaWYgc29tZSBvdGhlciBlcnJvciBvY2N1
cnJlZC4gIFRoaXMgd2lsbCBhbHdheXMKLSAgICAvLyBpbmRpY2F0ZSB0aGF0IHRoZSB0ZXN0IGZh
aWxlZC4gIFRoZSBzdHJpbmcgY2FuIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbgotICAgIC8vIGFi
b3V0IHRoZSBmYWlsdXJlLgotICAgIHN0cmluZyBydW50aW1lX2Vycm9yID0gMjsKLQotICAgIC8v
IElmIHRoZSBpbnB1dCB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBhbmQgdGhlIHJlcXVlc3RlZCBv
dXRwdXQgd2FzCi0gICAgLy8gcHJvdG9idWYsIHNlcmlhbGl6ZSBpdCB0byBwcm90b2J1ZiBhbmQg
c2V0IGl0IGluIHRoaXMgZmllbGQuCi0gICAgYnl0ZXMgcHJvdG9idWZfcGF5bG9hZCA9IDM7Ci0K
LSAgICAvLyBJZiB0aGUgaW5wdXQgd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYW5kIHRoZSByZXF1
ZXN0ZWQgb3V0cHV0IHdhcyBKU09OLAotICAgIC8vIHNlcmlhbGl6ZSB0byBKU09OIGFuZCBzZXQg
aXQgaW4gdGhpcyBmaWVsZC4KLSAgICBzdHJpbmcganNvbl9wYXlsb2FkID0gNDsKLQotICAgIC8v
IEZvciB3aGVuIHRoZSB0ZXN0ZWUgc2tpcHBlZCB0aGUgdGVzdCwgbGlrZWx5IGJlY2F1c2UgYSBj
ZXJ0YWluIGZlYXR1cmUKLSAgICAvLyB3YXNuJ3Qgc3VwcG9ydGVkLCBsaWtlIEpTT04gaW5wdXQv
b3V0cHV0LgotICAgIHN0cmluZyBza2lwcGVkID0gNTsKLSAgfQotfQotCi0vLyBUaGlzIHByb3Rv
IGluY2x1ZGVzIGV2ZXJ5IHR5cGUgb2YgZmllbGQgaW4gYm90aCBzaW5ndWxhciBhbmQgcmVwZWF0
ZWQKLS8vIGZvcm1zLgotbWVzc2FnZSBUZXN0QWxsVHlwZXMgewotICBtZXNzYWdlIE5lc3RlZE1l
c3NhZ2UgewotICAgIGludDMyIGEgPSAxOwotICAgIFRlc3RBbGxUeXBlcyBjb3JlY3Vyc2l2ZSA9
IDI7Ci0gIH0KLQotICBlbnVtIE5lc3RlZEVudW0gewotICAgIEZPTyA9IDA7Ci0gICAgQkFSID0g
MTsKLSAgICBCQVogPSAyOwotICAgIE5FRyA9IC0xOyAgLy8gSW50ZW50aW9uYWxseSBuZWdhdGl2
ZS4KLSAgfQotCi0gIC8vIFNpbmd1bGFyCi0gIGludDMyIG9wdGlvbmFsX2ludDMyICAgID0gIDE7
Ci0gIGludDY0IG9wdGlvbmFsX2ludDY0ICAgID0gIDI7Ci0gIHVpbnQzMiBvcHRpb25hbF91aW50
MzIgICA9ICAzOwotICB1aW50NjQgb3B0aW9uYWxfdWludDY0ICAgPSAgNDsKLSAgc2ludDMyIG9w
dGlvbmFsX3NpbnQzMiAgID0gIDU7Ci0gIHNpbnQ2NCBvcHRpb25hbF9zaW50NjQgICA9ICA2Owot
ICBmaXhlZDMyIG9wdGlvbmFsX2ZpeGVkMzIgID0gIDc7Ci0gIGZpeGVkNjQgb3B0aW9uYWxfZml4
ZWQ2NCAgPSAgODsKLSAgc2ZpeGVkMzIgb3B0aW9uYWxfc2ZpeGVkMzIgPSAgOTsKLSAgc2ZpeGVk
NjQgb3B0aW9uYWxfc2ZpeGVkNjQgPSAxMDsKLSAgZmxvYXQgb3B0aW9uYWxfZmxvYXQgICAgPSAx
MTsKLSAgZG91YmxlIG9wdGlvbmFsX2RvdWJsZSAgID0gMTI7Ci0gIGJvb2wgb3B0aW9uYWxfYm9v
bCAgICAgPSAxMzsKLSAgc3RyaW5nIG9wdGlvbmFsX3N0cmluZyAgID0gMTQ7Ci0gIGJ5dGVzIG9w
dGlvbmFsX2J5dGVzICAgID0gMTU7Ci0KLSAgTmVzdGVkTWVzc2FnZSAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbmFsX25lc3RlZF9tZXNzYWdlICA9IDE4OwotICBGb3JlaWduTWVzc2FnZSAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlID0gMTk7Ci0KLSAg
TmVzdGVkRW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX25lc3RlZF9lbnVt
ICAgICA9IDIxOwotICBGb3JlaWduRW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
YWxfZm9yZWlnbl9lbnVtICAgID0gMjI7Ci0KLSAgc3RyaW5nIG9wdGlvbmFsX3N0cmluZ19waWVj
ZSA9IDI0IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICBzdHJpbmcgb3B0aW9uYWxfY29yZCA9IDI1
IFtjdHlwZT1DT1JEXTsKLQotICBUZXN0QWxsVHlwZXMgcmVjdXJzaXZlX21lc3NhZ2UgPSAyNzsK
LQotICAvLyBSZXBlYXRlZAotICByZXBlYXRlZCAgICBpbnQzMiByZXBlYXRlZF9pbnQzMiAgICA9
IDMxOwotICByZXBlYXRlZCAgICBpbnQ2NCByZXBlYXRlZF9pbnQ2NCAgICA9IDMyOwotICByZXBl
YXRlZCAgIHVpbnQzMiByZXBlYXRlZF91aW50MzIgICA9IDMzOwotICByZXBlYXRlZCAgIHVpbnQ2
NCByZXBlYXRlZF91aW50NjQgICA9IDM0OwotICByZXBlYXRlZCAgIHNpbnQzMiByZXBlYXRlZF9z
aW50MzIgICA9IDM1OwotICByZXBlYXRlZCAgIHNpbnQ2NCByZXBlYXRlZF9zaW50NjQgICA9IDM2
OwotICByZXBlYXRlZCAgZml4ZWQzMiByZXBlYXRlZF9maXhlZDMyICA9IDM3OwotICByZXBlYXRl
ZCAgZml4ZWQ2NCByZXBlYXRlZF9maXhlZDY0ICA9IDM4OwotICByZXBlYXRlZCBzZml4ZWQzMiBy
ZXBlYXRlZF9zZml4ZWQzMiA9IDM5OwotICByZXBlYXRlZCBzZml4ZWQ2NCByZXBlYXRlZF9zZml4
ZWQ2NCA9IDQwOwotICByZXBlYXRlZCAgICBmbG9hdCByZXBlYXRlZF9mbG9hdCAgICA9IDQxOwot
ICByZXBlYXRlZCAgIGRvdWJsZSByZXBlYXRlZF9kb3VibGUgICA9IDQyOwotICByZXBlYXRlZCAg
ICAgYm9vbCByZXBlYXRlZF9ib29sICAgICA9IDQzOwotICByZXBlYXRlZCAgIHN0cmluZyByZXBl
YXRlZF9zdHJpbmcgICA9IDQ0OwotICByZXBlYXRlZCAgICBieXRlcyByZXBlYXRlZF9ieXRlcyAg
ICA9IDQ1OwotCi0gIHJlcGVhdGVkIE5lc3RlZE1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAg
ICByZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSAgPSA0ODsKLSAgcmVwZWF0ZWQgRm9yZWlnbk1lc3Nh
Z2UgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSA9IDQ5Owot
Ci0gIHJlcGVhdGVkIE5lc3RlZEVudW0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRl
ZF9uZXN0ZWRfZW51bSAgICAgPSA1MTsKLSAgcmVwZWF0ZWQgRm9yZWlnbkVudW0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcGVhdGVkX2ZvcmVpZ25fZW51bSAgICA9IDUyOwotCi0gIHJlcGVh
dGVkIHN0cmluZyByZXBlYXRlZF9zdHJpbmdfcGllY2UgPSA1NCBbY3R5cGU9U1RSSU5HX1BJRUNF
XTsKLSAgcmVwZWF0ZWQgc3RyaW5nIHJlcGVhdGVkX2NvcmQgPSA1NSBbY3R5cGU9Q09SRF07Ci0K
LSAgLy8gTWFwCi0gIG1hcCA8ICAgaW50MzIsIGludDMyPiAgICBtYXBfaW50MzJfaW50MzIgPSA1
NjsKLSAgbWFwIDwgICBpbnQ2NCwgaW50NjQ+ICAgIG1hcF9pbnQ2NF9pbnQ2NCA9IDU3OwotICBt
YXAgPCAgdWludDMyLCB1aW50MzI+ICAgbWFwX3VpbnQzMl91aW50MzIgPSA1ODsKLSAgbWFwIDwg
IHVpbnQ2NCwgdWludDY0PiAgIG1hcF91aW50NjRfdWludDY0ID0gNTk7Ci0gIG1hcCA8ICBzaW50
MzIsIHNpbnQzMj4gICBtYXBfc2ludDMyX3NpbnQzMiA9IDYwOwotICBtYXAgPCAgc2ludDY0LCBz
aW50NjQ+ICAgbWFwX3NpbnQ2NF9zaW50NjQgPSA2MTsKLSAgbWFwIDwgZml4ZWQzMiwgZml4ZWQz
Mj4gIG1hcF9maXhlZDMyX2ZpeGVkMzIgPSA2MjsKLSAgbWFwIDwgZml4ZWQ2NCwgZml4ZWQ2ND4g
IG1hcF9maXhlZDY0X2ZpeGVkNjQgPSA2MzsKLSAgbWFwIDxzZml4ZWQzMiwgc2ZpeGVkMzI+IG1h
cF9zZml4ZWQzMl9zZml4ZWQzMiA9IDY0OwotICBtYXAgPHNmaXhlZDY0LCBzZml4ZWQ2ND4gbWFw
X3NmaXhlZDY0X3NmaXhlZDY0ID0gNjU7Ci0gIG1hcCA8ICAgaW50MzIsIGZsb2F0PiAgICBtYXBf
aW50MzJfZmxvYXQgPSA2NjsKLSAgbWFwIDwgICBpbnQzMiwgZG91YmxlPiAgIG1hcF9pbnQzMl9k
b3VibGUgPSA2NzsKLSAgbWFwIDwgICAgYm9vbCwgYm9vbD4gICAgIG1hcF9ib29sX2Jvb2wgPSA2
ODsKLSAgbWFwIDwgIHN0cmluZywgc3RyaW5nPiAgIG1hcF9zdHJpbmdfc3RyaW5nID0gNjk7Ci0g
IG1hcCA8ICBzdHJpbmcsIGJ5dGVzPiAgICBtYXBfc3RyaW5nX2J5dGVzID0gNzA7Ci0gIG1hcCA8
ICBzdHJpbmcsIE5lc3RlZE1lc3NhZ2U+ICBtYXBfc3RyaW5nX25lc3RlZF9tZXNzYWdlID0gNzE7
Ci0gIG1hcCA8ICBzdHJpbmcsIEZvcmVpZ25NZXNzYWdlPiBtYXBfc3RyaW5nX2ZvcmVpZ25fbWVz
c2FnZSA9IDcyOwotICBtYXAgPCAgc3RyaW5nLCBOZXN0ZWRFbnVtPiAgICAgbWFwX3N0cmluZ19u
ZXN0ZWRfZW51bSA9IDczOwotICBtYXAgPCAgc3RyaW5nLCBGb3JlaWduRW51bT4gICAgbWFwX3N0
cmluZ19mb3JlaWduX2VudW0gPSA3NDsKLQotICBvbmVvZiBvbmVvZl9maWVsZCB7Ci0gICAgdWlu
dDMyIG9uZW9mX3VpbnQzMiA9IDExMTsKLSAgICBOZXN0ZWRNZXNzYWdlIG9uZW9mX25lc3RlZF9t
ZXNzYWdlID0gMTEyOwotICAgIHN0cmluZyBvbmVvZl9zdHJpbmcgPSAxMTM7Ci0gICAgYnl0ZXMg
b25lb2ZfYnl0ZXMgPSAxMTQ7Ci0gIH0KLQotICAvLyBXZWxsLWtub3duIHR5cGVzCi0gIGdvb2ds
ZS5wcm90b2J1Zi5Cb29sVmFsdWUgb3B0aW9uYWxfYm9vbF93cmFwcGVyID0gMjAxOwotICBnb29n
bGUucHJvdG9idWYuSW50MzJWYWx1ZSBvcHRpb25hbF9pbnQzMl93cmFwcGVyID0gMjAyOwotICBn
b29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSBvcHRpb25hbF9pbnQ2NF93cmFwcGVyID0gMjAzOwot
ICBnb29nbGUucHJvdG9idWYuVUludDMyVmFsdWUgb3B0aW9uYWxfdWludDMyX3dyYXBwZXIgPSAy
MDQ7Ci0gIGdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZSBvcHRpb25hbF91aW50NjRfd3JhcHBl
ciA9IDIwNTsKLSAgZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWUgb3B0aW9uYWxfZmxvYXRfd3Jh
cHBlciA9IDIwNjsKLSAgZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlIG9wdGlvbmFsX2RvdWJs
ZV93cmFwcGVyID0gMjA3OwotICBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgb3B0aW9uYWxf
c3RyaW5nX3dyYXBwZXIgPSAyMDg7Ci0gIGdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlIG9wdGlv
bmFsX2J5dGVzX3dyYXBwZXIgPSAyMDk7Ci0KLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLkJv
b2xWYWx1ZSByZXBlYXRlZF9ib29sX3dyYXBwZXIgPSAyMTE7Ci0gIHJlcGVhdGVkIGdvb2dsZS5w
cm90b2J1Zi5JbnQzMlZhbHVlIHJlcGVhdGVkX2ludDMyX3dyYXBwZXIgPSAyMTI7Ci0gIHJlcGVh
dGVkIGdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlIHJlcGVhdGVkX2ludDY0X3dyYXBwZXIgPSAy
MTM7Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZSByZXBlYXRlZF91aW50
MzJfd3JhcHBlciA9IDIxNDsKLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVl
IHJlcGVhdGVkX3VpbnQ2NF93cmFwcGVyID0gMjE1OwotICByZXBlYXRlZCBnb29nbGUucHJvdG9i
dWYuRmxvYXRWYWx1ZSByZXBlYXRlZF9mbG9hdF93cmFwcGVyID0gMjE2OwotICByZXBlYXRlZCBn
b29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUgcmVwZWF0ZWRfZG91YmxlX3dyYXBwZXIgPSAyMTc7
Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSByZXBlYXRlZF9zdHJpbmdf
d3JhcHBlciA9IDIxODsKLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUgcmVw
ZWF0ZWRfYnl0ZXNfd3JhcHBlciA9IDIxOTsKLQotICBnb29nbGUucHJvdG9idWYuRHVyYXRpb24g
b3B0aW9uYWxfZHVyYXRpb24gPSAzMDE7Ci0gIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgb3B0
aW9uYWxfdGltZXN0YW1wID0gMzAyOwotICBnb29nbGUucHJvdG9idWYuRmllbGRNYXNrIG9wdGlv
bmFsX2ZpZWxkX21hc2sgPSAzMDM7Ci0gIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qgb3B0aW9uYWxf
c3RydWN0ID0gMzA0OwotICBnb29nbGUucHJvdG9idWYuQW55IG9wdGlvbmFsX2FueSA9IDMwNTsK
LSAgZ29vZ2xlLnByb3RvYnVmLlZhbHVlIG9wdGlvbmFsX3ZhbHVlID0gMzA2OwotCi0gIHJlcGVh
dGVkIGdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiByZXBlYXRlZF9kdXJhdGlvbiA9IDMxMTsKLSAg
cmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCByZXBlYXRlZF90aW1lc3RhbXAgPSAz
MTI7Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sgcmVwZWF0ZWRfZmllbGRt
YXNrID0gMzEzOwotICByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuU3RydWN0IHJlcGVhdGVkX3N0
cnVjdCA9IDMyNDsKLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLkFueSByZXBlYXRlZF9hbnkg
PSAzMTU7Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5WYWx1ZSByZXBlYXRlZF92YWx1ZSA9
IDMxNjsKLQotICAvLyBUZXN0IGZpZWxkLW5hbWUtdG8tSlNPTi1uYW1lIGNvbnZlbnRpb24uCi0g
IGludDMyIGZpZWxkbmFtZTEgPSA0MDE7Ci0gIGludDMyIGZpZWxkX25hbWUyID0gNDAyOwotICBp
bnQzMiBfZmllbGRfbmFtZTMgPSA0MDM7Ci0gIGludDMyIGZpZWxkX19uYW1lNF8gPSA0MDQ7Ci0g
IGludDMyIGZpZWxkMG5hbWU1ID0gNDA1OwotICBpbnQzMiBmaWVsZF8wX25hbWU2ID0gNDA2Owot
ICBpbnQzMiBmaWVsZE5hbWU3ID0gNDA3OwotICBpbnQzMiBGaWVsZE5hbWU4ID0gNDA4OwotICBp
bnQzMiBmaWVsZF9OYW1lOSA9IDQwOTsKLSAgaW50MzIgRmllbGRfTmFtZTEwID0gNDEwOwotICBp
bnQzMiBGSUVMRF9OQU1FMTEgPSA0MTE7Ci0gIGludDMyIEZJRUxEX25hbWUxMiA9IDQxMjsKLX0K
LQotbWVzc2FnZSBGb3JlaWduTWVzc2FnZSB7Ci0gIGludDMyIGMgPSAxOwotfQotCi1lbnVtIEZv
cmVpZ25FbnVtIHsKLSAgRk9SRUlHTl9GT08gPSAwOwotICBGT1JFSUdOX0JBUiA9IDE7Ci0gIEZP
UkVJR05fQkFaID0gMjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2UvY29uZm9ybWFuY2VfY3Bw
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9jb25mb3JtYW5jZS9jb25mb3JtYW5jZV9jcHAuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDFhMjY1NDkzMjU4N2QyNWZlN2Q2MDA2YzE3MzZlZTNlM2QxNGRlM2EuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9jb25m
b3JtYW5jZV9jcHAuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUg
PHN0ZGFyZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSAiY29uZm9ybWFuY2Uu
cGIuaCIKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWwuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyX3V0aWwuaD4KLQotdXNpbmcg
Y29uZm9ybWFuY2U6OkNvbmZvcm1hbmNlUmVxdWVzdDsKLXVzaW5nIGNvbmZvcm1hbmNlOjpDb25m
b3JtYW5jZVJlc3BvbnNlOwotdXNpbmcgY29uZm9ybWFuY2U6OlRlc3RBbGxUeXBlczsKLXVzaW5n
IGdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3I7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjpE
ZXNjcmlwdG9yUG9vbDsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpzY29wZWRf
cHRyOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dXRpbDo6QmluYXJ5VG9Kc29uU3RyaW5nOwot
dXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dXRpbDo6SnNvblRvQmluYXJ5U3RyaW5nOwotdXNpbmcg
Z29vZ2xlOjpwcm90b2J1Zjo6dXRpbDo6TmV3VHlwZVJlc29sdmVyRm9yRGVzY3JpcHRvclBvb2w7
Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjp1dGlsOjpTdGF0dXM7Ci11c2luZyBnb29nbGU6OnBy
b3RvYnVmOjp1dGlsOjpUeXBlUmVzb2x2ZXI7Ci11c2luZyBzdGQ6OnN0cmluZzsKLQotc3RhdGlj
IGNvbnN0IGNoYXIga1R5cGVVcmxQcmVmaXhbXSA9ICJ0eXBlLmdvb2dsZWFwaXMuY29tIjsKLQot
c3RhdGljIHN0cmluZyBHZXRUeXBlVXJsKGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UpIHsKLSAg
cmV0dXJuIHN0cmluZyhrVHlwZVVybFByZWZpeCkgKyAiLyIgKyBtZXNzYWdlLT5mdWxsX25hbWUo
KTsKLX0KLQotaW50IHRlc3RfY291bnQgPSAwOwotYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci1UeXBl
UmVzb2x2ZXIqIHR5cGVfcmVzb2x2ZXI7Ci1zdHJpbmcqIHR5cGVfdXJsOwotCi0KLWJvb2wgQ2hl
Y2tlZFJlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pIHsKLSAgc2l6ZV90IG9mcyA9
IDA7Ci0gIHdoaWxlIChsZW4gPiAwKSB7Ci0gICAgc3NpemVfdCBieXRlc19yZWFkID0gcmVhZChm
ZCwgKGNoYXIqKWJ1ZiArIG9mcywgbGVuKTsKLQotICAgIGlmIChieXRlc19yZWFkID09IDApIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChieXRlc19yZWFkIDwgMCkgewotICAgICAgR09PR0xFX0xP
RyhGQVRBTCkgPDwgIkVycm9yIHJlYWRpbmcgZnJvbSB0ZXN0IHJ1bm5lcjogIiA8PCAgc3RyZXJy
b3IoZXJybm8pOwotICAgIH0KLQotICAgIGxlbiAtPSBieXRlc19yZWFkOwotICAgIG9mcyArPSBi
eXRlc19yZWFkOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2hlY2tlZFdyaXRl
KGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKSB7Ci0gIGlmICh3cml0ZShmZCwg
YnVmLCBsZW4pICE9IGxlbikgewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJFcnJvciB3cml0
aW5nIHRvIHRlc3QgcnVubmVyOiAiIDw8IHN0cmVycm9yKGVycm5vKTsKLSAgfQotfQotCi12b2lk
IERvVGVzdChjb25zdCBDb25mb3JtYW5jZVJlcXVlc3QmIHJlcXVlc3QsIENvbmZvcm1hbmNlUmVz
cG9uc2UqIHJlc3BvbnNlKSB7Ci0gIFRlc3RBbGxUeXBlcyB0ZXN0X21lc3NhZ2U7Ci0KLSAgc3dp
dGNoIChyZXF1ZXN0LnBheWxvYWRfY2FzZSgpKSB7Ci0gICAgY2FzZSBDb25mb3JtYW5jZVJlcXVl
c3Q6OmtQcm90b2J1ZlBheWxvYWQ6Ci0gICAgICBpZiAoIXRlc3RfbWVzc2FnZS5QYXJzZUZyb21T
dHJpbmcocmVxdWVzdC5wcm90b2J1Zl9wYXlsb2FkKCkpKSB7Ci0gICAgICAgIC8vIEdldHRpbmcg
cGFyc2UgZGV0YWlscyB3b3VsZCBpbnZvbHZlIHNvbWV0aGluZyBsaWtlOgotICAgICAgICAvLyAg
IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjIxMjE5MjIvaG93LWNhbi1pLWdl
dC1tb3JlLWRldGFpbHMtYWJvdXQtZXJyb3JzLWdlbmVyYXRlZC1kdXJpbmctcHJvdG9idWYtcGFy
c2luZy1jCi0gICAgICAgIHJlc3BvbnNlLT5zZXRfcGFyc2VfZXJyb3IoIlBhcnNlIGVycm9yIChu
byBtb3JlIGRldGFpbHMgYXZhaWxhYmxlKS4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQot
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENvbmZvcm1hbmNlUmVxdWVzdDo6a0pzb25QYXlsb2Fk
OiB7Ci0gICAgICBzdHJpbmcgcHJvdG9fYmluYXJ5OwotICAgICAgU3RhdHVzIHN0YXR1cyA9IEpz
b25Ub0JpbmFyeVN0cmluZyh0eXBlX3Jlc29sdmVyLCAqdHlwZV91cmwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuanNvbl9wYXlsb2FkKCksICZwcm90
b19iaW5hcnkpOwotICAgICAgaWYgKCFzdGF0dXMub2soKSkgewotICAgICAgICByZXNwb25zZS0+
c2V0X3BhcnNlX2Vycm9yKHN0cmluZygiUGFyc2UgZXJyb3I6ICIpICsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZXJyb3JfbWVzc2FnZSgpLmFzX3N0cmluZygpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoIXRlc3RfbWVzc2FnZS5QYXJz
ZUZyb21TdHJpbmcocHJvdG9fYmluYXJ5KSkgewotICAgICAgICByZXNwb25zZS0+c2V0X3J1bnRp
bWVfZXJyb3IoCi0gICAgICAgICAgICAiUGFyc2luZyBKU09OIGdlbmVyYXRlcyBpbnZhbGlkIHBy
b3RvIG91dHB1dC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgY2FzZSBDb25mb3JtYW5jZVJlcXVlc3Q6OlBBWUxPQURfTk9UX1NFVDoKLSAg
ICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJSZXF1ZXN0IGRpZG4ndCBoYXZlIHBheWxvYWQuIjsK
LSAgICAgIGJyZWFrOwotICB9Ci0KLSAgc3dpdGNoIChyZXF1ZXN0LnJlcXVlc3RlZF9vdXRwdXRf
Zm9ybWF0KCkpIHsKLSAgICBjYXNlIGNvbmZvcm1hbmNlOjpVTlNQRUNJRklFRDoKLSAgICAgIEdP
T0dMRV9MT0coRkFUQUwpIDw8ICJVbnNwZWNpZmllZCBvdXRwdXQgZm9ybWF0IjsKLSAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBjb25mb3JtYW5jZTo6UFJPVE9CVUY6Ci0gICAgICBHT09HTEVfQ0hF
Q0soCi0gICAgICAgICAgdGVzdF9tZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKHJlc3BvbnNlLT5t
dXRhYmxlX3Byb3RvYnVmX3BheWxvYWQoKSkpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGNv
bmZvcm1hbmNlOjpKU09OOiB7Ci0gICAgICBzdHJpbmcgcHJvdG9fYmluYXJ5OwotICAgICAgR09P
R0xFX0NIRUNLKHRlc3RfbWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygmcHJvdG9fYmluYXJ5KSk7
Ci0gICAgICBTdGF0dXMgc3RhdHVzID0gQmluYXJ5VG9Kc29uU3RyaW5nKHR5cGVfcmVzb2x2ZXIs
ICp0eXBlX3VybCwgcHJvdG9fYmluYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZS0+bXV0YWJsZV9qc29uX3BheWxvYWQoKSk7Ci0gICAgICBpZiAo
IXN0YXR1cy5vaygpKSB7Ci0gICAgICAgIHJlc3BvbnNlLT5zZXRfc2VyaWFsaXplX2Vycm9yKAot
ICAgICAgICAgICAgc3RyaW5nKCJGYWlsZWQgdG8gc2VyaWFsaXplIEpTT04gb3V0cHV0OiAiKSAr
Ci0gICAgICAgICAgICBzdGF0dXMuZXJyb3JfbWVzc2FnZSgpLmFzX3N0cmluZygpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJVbmtub3duIG91dHB1dCBmb3JtYXQ6ICIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIDw8IHJlcXVlc3QucmVxdWVzdGVkX291dHB1dF9mb3JtYXQo
KTsKLSAgfQotfQotCi1ib29sIERvVGVzdElvKCkgewotICBzdHJpbmcgc2VyaWFsaXplZF9pbnB1
dDsKLSAgc3RyaW5nIHNlcmlhbGl6ZWRfb3V0cHV0OwotICBDb25mb3JtYW5jZVJlcXVlc3QgcmVx
dWVzdDsKLSAgQ29uZm9ybWFuY2VSZXNwb25zZSByZXNwb25zZTsKLSAgdWludDMyX3QgYnl0ZXM7
Ci0KLSAgaWYgKCFDaGVja2VkUmVhZChTVERJTl9GSUxFTk8sICZieXRlcywgc2l6ZW9mKHVpbnQz
Ml90KSkpIHsKLSAgICAvLyBFT0YuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgc2VyaWFs
aXplZF9pbnB1dC5yZXNpemUoYnl0ZXMpOwotCi0gIGlmICghQ2hlY2tlZFJlYWQoU1RESU5fRklM
RU5PLCAoY2hhciopc2VyaWFsaXplZF9pbnB1dC5jX3N0cigpLCBieXRlcykpIHsKLSAgICBHT09H
TEVfTE9HKEVSUk9SKSA8PCAiVW5leHBlY3RlZCBFT0Ygb24gc3RkaW4uICIgPDwgc3RyZXJyb3Io
ZXJybm8pOwotICB9Ci0KLSAgaWYgKCFyZXF1ZXN0LlBhcnNlRnJvbVN0cmluZyhzZXJpYWxpemVk
X2lucHV0KSkgewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJQYXJzZSBvZiBDb25mb3JtYW5j
ZVJlcXVlc3QgcHJvdG8gZmFpbGVkLiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgRG9U
ZXN0KHJlcXVlc3QsICZyZXNwb25zZSk7Ci0KLSAgcmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmco
JnNlcmlhbGl6ZWRfb3V0cHV0KTsKLQotICBieXRlcyA9IHNlcmlhbGl6ZWRfb3V0cHV0LnNpemUo
KTsKLSAgQ2hlY2tlZFdyaXRlKFNURE9VVF9GSUxFTk8sICZieXRlcywgc2l6ZW9mKHVpbnQzMl90
KSk7Ci0gIENoZWNrZWRXcml0ZShTVERPVVRfRklMRU5PLCBzZXJpYWxpemVkX291dHB1dC5jX3N0
cigpLCBieXRlcyk7Ci0KLSAgaWYgKHZlcmJvc2UpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImNv
bmZvcm1hbmNlLWNwcDogcmVxdWVzdD0lcywgcmVzcG9uc2U9JXNcbiIsCi0gICAgICAgICAgICBy
ZXF1ZXN0LlNob3J0RGVidWdTdHJpbmcoKS5jX3N0cigpLAotICAgICAgICAgICAgcmVzcG9uc2Uu
U2hvcnREZWJ1Z1N0cmluZygpLmNfc3RyKCkpOwotICB9Ci0KLSAgdGVzdF9jb3VudCsrOwotCi0g
IHJldHVybiB0cnVlOwotfQotCi1pbnQgbWFpbigpIHsKLSAgdHlwZV9yZXNvbHZlciA9IE5ld1R5
cGVSZXNvbHZlckZvckRlc2NyaXB0b3JQb29sKAotICAgICAga1R5cGVVcmxQcmVmaXgsIERlc2Ny
aXB0b3JQb29sOjpnZW5lcmF0ZWRfcG9vbCgpKTsKLSAgdHlwZV91cmwgPSBuZXcgc3RyaW5nKEdl
dFR5cGVVcmwoVGVzdEFsbFR5cGVzOjpkZXNjcmlwdG9yKCkpKTsKLSAgd2hpbGUgKDEpIHsKLSAg
ICBpZiAoIURvVGVzdElvKCkpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiY29uZm9ybWFuY2Ut
Y3BwOiByZWNlaXZlZCBFT0YgZnJvbSB0ZXN0IHJ1bm5lciAiCi0gICAgICAgICAgICAgICAgICAg
ICAgImFmdGVyICVkIHRlc3RzLCBleGl0aW5nXG4iLCB0ZXN0X2NvdW50KTsKLSAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9jb25mb3JtYW5jZV9v
YmpjLm0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NvbmZvcm1hbmNlL2NvbmZvcm1hbmNlX29iamMubQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTEyNGJmZWJhMWUzNTc0YWJjZTYwODBlZjAxYWJiZjdiZmVhOTRjMy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2Nv
bmZvcm1hbmNlX29iamMubQorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0KLSNpbXBvcnQgIkNvbmZvcm1hbmNlLnBib2JqYy5oIgotCi1zdGF0aWMgdm9pZCBE
aWUoTlNTdHJpbmcgKmZvcm1hdCwgLi4uKSBfX2RlYWQyOwotCi1zdGF0aWMgQk9PTCB2ZXJib3Nl
ID0gTk87Ci1zdGF0aWMgaW50MzJfdCB0ZXN0Q291bnQgPSAwOwotCi1zdGF0aWMgdm9pZCBEaWUo
TlNTdHJpbmcgKmZvcm1hdCwgLi4uKSB7Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJn
cywgZm9ybWF0KTsKLSAgTlNTdHJpbmcgKm1zZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRo
Rm9ybWF0OmZvcm1hdCBhcmd1bWVudHM6YXJnc107Ci0gIE5TTG9nKEAiJUAiLCBtc2cpOwotICB2
YV9lbmQoYXJncyk7Ci0gIFttc2cgcmVsZWFzZV07Ci0gIGV4aXQoNjYpOwotfQotCi1zdGF0aWMg
TlNEYXRhICpDaGVja2VkUmVhZERhdGFPZkxlbmd0aChOU0ZpbGVIYW5kbGUgKmhhbmRsZSwgTlNV
SW50ZWdlciBudW1CeXRlcykgewotICBOU0RhdGEgKmRhdGEgPSBbaGFuZGxlIHJlYWREYXRhT2ZM
ZW5ndGg6bnVtQnl0ZXNdOwotICBOU1VJbnRlZ2VyIGRhdGFMZW4gPSBkYXRhLmxlbmd0aDsKLSAg
aWYgKGRhdGFMZW4gPT0gMCkgewotICAgIHJldHVybiBuaWw7ICAvLyBFT0YuCi0gIH0KLSAgaWYg
KGRhdGFMZW4gIT0gbnVtQnl0ZXMpIHsKLSAgICBEaWUoQCJGYWlsZWQgdG8gcmVhZCB0aGUgcmVx
dWVzdCBsZW5ndGggKCVkKSwgb25seSBnb3Q6ICVAIiwKLSAgICAgICAgbnVtQnl0ZXMsIGRhdGEp
OwotICB9Ci0gIHJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgQ29uZm9ybWFuY2VSZXNwb25zZSAq
RG9UZXN0KENvbmZvcm1hbmNlUmVxdWVzdCAqcmVxdWVzdCkgewotICBDb25mb3JtYW5jZVJlc3Bv
bnNlICpyZXNwb25zZSA9IFtDb25mb3JtYW5jZVJlc3BvbnNlIG1lc3NhZ2VdOwotICBUZXN0QWxs
VHlwZXMgKnRlc3RNZXNzYWdlID0gbmlsOwotCi0gIHN3aXRjaCAocmVxdWVzdC5wYXlsb2FkT25l
T2ZDYXNlKSB7Ci0gICAgY2FzZSBDb25mb3JtYW5jZVJlcXVlc3RfUGF5bG9hZF9PbmVPZkNhc2Vf
R1BCVW5zZXRPbmVPZkNhc2U6Ci0gICAgICBEaWUoQCJSZXF1ZXN0IGRpZG4ndCBoYXZlIGEgcGF5
bG9hZDogJUAiLCByZXF1ZXN0KTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDb25mb3JtYW5j
ZVJlcXVlc3RfUGF5bG9hZF9PbmVPZkNhc2VfUHJvdG9idWZQYXlsb2FkOiB7Ci0gICAgICBOU0Vy
cm9yICplcnJvciA9IG5pbDsKLSAgICAgIHRlc3RNZXNzYWdlID0gW1Rlc3RBbGxUeXBlcyBwYXJz
ZUZyb21EYXRhOnJlcXVlc3QucHJvdG9idWZQYXlsb2FkCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcjomZXJyb3JdOwotICAgICAgaWYgKCF0ZXN0TWVzc2Fn
ZSkgewotICAgICAgICByZXNwb25zZS5wYXJzZUVycm9yID0KLSAgICAgICAgICAgIFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiUGFyc2UgZXJyb3I6ICVAIiwgZXJyb3JdOwotICAgICAgfQot
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBDb25mb3JtYW5jZVJlcXVlc3RfUGF5bG9h
ZF9PbmVPZkNhc2VfSnNvblBheWxvYWQ6Ci0gICAgICByZXNwb25zZS5za2lwcGVkID0gQCJPYmpD
IGRvZXNuJ3Qgc3VwcG9ydCBwYXJzaW5nIEpTT04iOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBp
ZiAodGVzdE1lc3NhZ2UpIHsKLSAgICBzd2l0Y2ggKHJlcXVlc3QucmVxdWVzdGVkT3V0cHV0Rm9y
bWF0KSB7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRfR1BCVW5yZWNvZ25pemVkRW51bWVyYXRvclZh
bHVlOgotICAgICAgY2FzZSBXaXJlRm9ybWF0X1Vuc3BlY2lmaWVkOgotICAgICAgICBEaWUoQCJV
bnJlY29nbml6ZWQvdW5zcGVjaWZpZWQgb3V0cHV0IGZvcm1hdDogJUAiLCByZXF1ZXN0KTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgV2lyZUZvcm1hdF9Qcm90b2J1ZjoKLSAgICAgICAg
cmVzcG9uc2UucHJvdG9idWZQYXlsb2FkID0gdGVzdE1lc3NhZ2UuZGF0YTsKLSAgICAgICAgaWYg
KCFyZXNwb25zZS5wcm90b2J1ZlBheWxvYWQpIHsKLSAgICAgICAgICByZXNwb25zZS5zZXJpYWxp
emVFcnJvciA9Ci0gICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZhaWxl
ZCB0byBtYWtlIGRhdGEgZnJvbTogJUAiLCB0ZXN0TWVzc2FnZV07Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgV2lyZUZvcm1hdF9Kc29uOgotICAgICAgICByZXNwb25z
ZS5za2lwcGVkID0gQCJPYmpDIGRvZXNuJ3Qgc3VwcG9ydCBnZW5lcmF0aW5nIEpTT04iOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzcG9uc2U7Ci19Ci0KLXN0YXRp
YyB1aW50MzJfdCBVSW50MzJGcm9tTGl0dGxlRW5kaWFuRGF0YShOU0RhdGEgKmRhdGEpIHsKLSAg
aWYgKGRhdGEubGVuZ3RoICE9IHNpemVvZih1aW50MzJfdCkpIHsKLSAgICBEaWUoQCJEYXRhIG5v
dCB0aGUgcmlnaHQgc2l6ZSBmb3IgdWludDMyX3Q6ICVAIiwgZGF0YSk7Ci0gIH0KLSAgdWludDMy
X3QgdmFsdWU7Ci0gIG1lbWNweSgmdmFsdWUsIGRhdGEuYnl0ZXMsIHNpemVvZih1aW50MzJfdCkp
OwotICByZXR1cm4gQ0ZTd2FwSW50MzJMaXR0bGVUb0hvc3QodmFsdWUpOwotfQotCi1zdGF0aWMg
TlNEYXRhICpVSW50MzJUb0xpdHRsZUVuZGlhbkRhdGEodWludDMyX3QgbnVtKSB7Ci0gIHVpbnQz
Ml90IHZhbHVlID0gQ0ZTd2FwSW50MzJIb3N0VG9MaXR0bGUobnVtKTsKLSAgcmV0dXJuIFtOU0Rh
dGEgZGF0YVdpdGhCeXRlczomdmFsdWUgbGVuZ3RoOnNpemVvZih1aW50MzJfdCldOwotfQotCi1z
dGF0aWMgQk9PTCBEb1Rlc3RJbyhOU0ZpbGVIYW5kbGUgKmlucHV0LCBOU0ZpbGVIYW5kbGUgKm91
dHB1dCkgewotICAvLyBTZWUgY29uZm9ybWFuY2VfdGVzdF9ydW5uZXIuY2MgZm9yIHRoZSB3aXJl
IGZvcm1hdC4KLSAgTlNEYXRhICpkYXRhID0gQ2hlY2tlZFJlYWREYXRhT2ZMZW5ndGgoaW5wdXQs
IHNpemVvZih1aW50MzJfdCkpOwotICBpZiAoIWRhdGEpIHsKLSAgICAvLyBFT0YuCi0gICAgcmV0
dXJuIE5POwotICB9Ci0gIHVpbnQzMl90IG51bUJ5dGVzID0gVUludDMyRnJvbUxpdHRsZUVuZGlh
bkRhdGEoZGF0YSk7Ci0gIGRhdGEgPSBDaGVja2VkUmVhZERhdGFPZkxlbmd0aChpbnB1dCwgbnVt
Qnl0ZXMpOwotICBpZiAoIWRhdGEpIHsKLSAgICBEaWUoQCJGYWlsZWQgdG8gcmVhZCByZXF1ZXN0
Iik7Ci0gIH0KLQotICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgQ29uZm9ybWFuY2VSZXF1ZXN0
ICpyZXF1ZXN0ID0gW0NvbmZvcm1hbmNlUmVxdWVzdCBwYXJzZUZyb21EYXRhOmRhdGEKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yOiZlcnJvcl07Ci0gIGlmICghcmVxdWVzdCkgewotICAgIERpZShAIkZhaWxlZCB0byBwYXJz
ZSB0aGUgbWVzc2FnZSBkYXRhOiAlQCIsIGVycm9yKTsKLSAgfQotCi0gIENvbmZvcm1hbmNlUmVz
cG9uc2UgKnJlc3BvbnNlID0gRG9UZXN0KHJlcXVlc3QpOwotICBpZiAoIXJlc3BvbnNlKSB7Ci0g
ICAgRGllKEAiRmFpbGVkIHRvIG1ha2UgYSByZXBseSBmcm9tICVAIiwgcmVxdWVzdCk7Ci0gIH0K
LQotICBkYXRhID0gcmVzcG9uc2UuZGF0YTsKLSAgW291dHB1dCB3cml0ZURhdGE6VUludDMyVG9M
aXR0bGVFbmRpYW5EYXRhKChpbnQzMl90KWRhdGEubGVuZ3RoKV07Ci0gIFtvdXRwdXQgd3JpdGVE
YXRhOmRhdGFdOwotCi0gIGlmICh2ZXJib3NlKSB7Ci0gICAgTlNMb2coQCJSZXF1ZXN0OiAlQCIs
IHJlcXVlc3QpOwotICAgIE5TTG9nKEAiUmVzcG9uc2U6ICVAIiwgcmVzcG9uc2UpOwotICB9Ci0K
LSAgKyt0ZXN0Q291bnQ7Ci0gIHJldHVybiBZRVM7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBj
b25zdCBjaGFyICphcmd2W10pIHsKLSAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgTlNGaWxlSGFu
ZGxlICppbnB1dCA9IFtbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRJbnB1dF0g
cmV0YWluXTsKLSAgICBOU0ZpbGVIYW5kbGUgKm91dHB1dCA9IFtbTlNGaWxlSGFuZGxlIGZpbGVI
YW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdIHJldGFpbl07Ci0KLSAgICBCT09MIG5vdERvbmUgPSBZ
RVM7Ci0gICAgd2hpbGUgKG5vdERvbmUpIHsKLSAgICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAg
ICAgICBub3REb25lID0gRG9UZXN0SW8oaW5wdXQsIG91dHB1dCk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgTlNMb2coQCJSZWNlaXZlZCBFT0YgZnJvbSB0ZXN0IHJ1bm5lciBhZnRlciAlZCB0ZXN0
cywgZXhpdGluZy4iLCB0ZXN0Q291bnQpOwotICB9Ci0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9jb25mb3JtYW5jZS9jb25mb3JtYW5jZV9weXRob24ucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2NvbmZvcm1h
bmNlX3B5dGhvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTQ5MGM4ZThlNTRi
ZDY4ZTI2ZWY0ZDEwYTVmNDY4NWRmZjUxYjJjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2NvbmZvcm1hbmNlX3B5dGhvbi5weQorKysg
L2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMg
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0j
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotIiIiQSBjb25mb3JtYW5jZSB0ZXN0IGltcGxlbWVudGF0aW9uIGZvciB0aGUgUHl0aG9u
IHByb3RvYnVmIGxpYnJhcnkuCi0KLVNlZSBjb25mb3JtYW5jZS5wcm90byBmb3IgbW9yZSBpbmZv
cm1hdGlvbi4KLSIiIgotCi1pbXBvcnQgc3RydWN0Ci1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWZy
b20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBtZXNzYWdlCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBp
bXBvcnQganNvbl9mb3JtYXQKLWltcG9ydCBjb25mb3JtYW5jZV9wYjIKLQotc3lzLnN0ZG91dCA9
IG9zLmZkb3BlbihzeXMuc3Rkb3V0LmZpbGVubygpLCAnd2InLCAwKQotc3lzLnN0ZGluID0gb3Mu
ZmRvcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgJ3JiJywgMCkKLQotdGVzdF9jb3VudCA9IDAKLXZl
cmJvc2UgPSBGYWxzZQotCi1jbGFzcyBQcm90b2NvbEVycm9yKEV4Y2VwdGlvbik6Ci0gIHBhc3MK
LQotZGVmIGRvX3Rlc3QocmVxdWVzdCk6Ci0gIHRlc3RfbWVzc2FnZSA9IGNvbmZvcm1hbmNlX3Bi
Mi5UZXN0QWxsVHlwZXMoKQotICByZXNwb25zZSA9IGNvbmZvcm1hbmNlX3BiMi5Db25mb3JtYW5j
ZVJlc3BvbnNlKCkKLSAgdGVzdF9tZXNzYWdlID0gY29uZm9ybWFuY2VfcGIyLlRlc3RBbGxUeXBl
cygpCi0KLSAgdHJ5OgotICAgIGlmIHJlcXVlc3QuV2hpY2hPbmVvZigncGF5bG9hZCcpID09ICdw
cm90b2J1Zl9wYXlsb2FkJzoKLSAgICAgIHRyeToKLSAgICAgICAgdGVzdF9tZXNzYWdlLlBhcnNl
RnJvbVN0cmluZyhyZXF1ZXN0LnByb3RvYnVmX3BheWxvYWQpCi0gICAgICBleGNlcHQgbWVzc2Fn
ZS5EZWNvZGVFcnJvciBhcyBlOgotICAgICAgICByZXNwb25zZS5wYXJzZV9lcnJvciA9IHN0cihl
KQotICAgICAgICByZXR1cm4gcmVzcG9uc2UKLQotICAgIGVsaWYgcmVxdWVzdC5XaGljaE9uZW9m
KCdwYXlsb2FkJykgPT0gJ2pzb25fcGF5bG9hZCc6Ci0gICAgICB0cnk6Ci0gICAgICAgIGpzb25f
Zm9ybWF0LlBhcnNlKHJlcXVlc3QuanNvbl9wYXlsb2FkLCB0ZXN0X21lc3NhZ2UpCi0gICAgICBl
eGNlcHQganNvbl9mb3JtYXQuUGFyc2VFcnJvciBhcyBlOgotICAgICAgICByZXNwb25zZS5wYXJz
ZV9lcnJvciA9IHN0cihlKQotICAgICAgICByZXR1cm4gcmVzcG9uc2UKLQotICAgIGVsc2U6Ci0g
ICAgICByYWlzZSBQcm90b2NvbEVycm9yKCJSZXF1ZXN0IGRpZG4ndCBoYXZlIHBheWxvYWQuIikK
LQotICAgIGlmIHJlcXVlc3QucmVxdWVzdGVkX291dHB1dF9mb3JtYXQgPT0gY29uZm9ybWFuY2Vf
cGIyLlVOU1BFQ0lGSUVEOgotICAgICAgcmFpc2UgUHJvdG9jb2xFcnJvcigiVW5zcGVjaWZpZWQg
b3V0cHV0IGZvcm1hdCIpCi0KLSAgICBlbGlmIHJlcXVlc3QucmVxdWVzdGVkX291dHB1dF9mb3Jt
YXQgPT0gY29uZm9ybWFuY2VfcGIyLlBST1RPQlVGOgotICAgICAgcmVzcG9uc2UucHJvdG9idWZf
cGF5bG9hZCA9IHRlc3RfbWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpCi0KLSAgICBlbGlmIHJl
cXVlc3QucmVxdWVzdGVkX291dHB1dF9mb3JtYXQgPT0gY29uZm9ybWFuY2VfcGIyLkpTT046Ci0g
ICAgICByZXNwb25zZS5qc29uX3BheWxvYWQgPSBqc29uX2Zvcm1hdC5NZXNzYWdlVG9Kc29uKHRl
c3RfbWVzc2FnZSkKLQotICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgcmVzcG9uc2UucnVu
dGltZV9lcnJvciA9IHN0cihlKQotCi0gIHJldHVybiByZXNwb25zZQotCi1kZWYgZG9fdGVzdF9p
bygpOgotICBsZW5ndGhfYnl0ZXMgPSBzeXMuc3RkaW4ucmVhZCg0KQotICBpZiBsZW4obGVuZ3Ro
X2J5dGVzKSA9PSAwOgotICAgIHJldHVybiBGYWxzZSAgICMgRU9GCi0gIGVsaWYgbGVuKGxlbmd0
aF9ieXRlcykgIT0gNDoKLSAgICByYWlzZSBJT0Vycm9yKCJJL08gZXJyb3IiKQotCi0gICMgIkki
IGlzICJ1bnNpZ25lZCBpbnQiLCBzbyB0aGlzIGRlcGVuZHMgb24gcnVubmluZyBvbiBhIHBsYXRm
b3JtIHdpdGgKLSAgIyAzMi1iaXQgInVuc2lnbmVkIGludCIgdHlwZS4gIFRoZSBQeXRob24gc3Ry
dWN0IG1vZHVsZSB1bmZvcnR1bmF0ZWx5Ci0gICMgaGFzIG5vIGZvcm1hdCBzcGVjaWZpZXIgZm9y
IHVpbnQzMl90LgotICBsZW5ndGggPSBzdHJ1Y3QudW5wYWNrKCI8SSIsIGxlbmd0aF9ieXRlcylb
MF0KLSAgc2VyaWFsaXplZF9yZXF1ZXN0ID0gc3lzLnN0ZGluLnJlYWQobGVuZ3RoKQotICBpZiBs
ZW4oc2VyaWFsaXplZF9yZXF1ZXN0KSAhPSBsZW5ndGg6Ci0gICAgcmFpc2UgSU9FcnJvcigiSS9P
IGVycm9yIikKLQotICByZXF1ZXN0ID0gY29uZm9ybWFuY2VfcGIyLkNvbmZvcm1hbmNlUmVxdWVz
dCgpCi0gIHJlcXVlc3QuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWRfcmVxdWVzdCkKLQotICBy
ZXNwb25zZSA9IGRvX3Rlc3QocmVxdWVzdCkKLQotICBzZXJpYWxpemVkX3Jlc3BvbnNlID0gcmVz
cG9uc2UuU2VyaWFsaXplVG9TdHJpbmcoKQotICBzeXMuc3Rkb3V0LndyaXRlKHN0cnVjdC5wYWNr
KCI8SSIsIGxlbihzZXJpYWxpemVkX3Jlc3BvbnNlKSkpCi0gIHN5cy5zdGRvdXQud3JpdGUoc2Vy
aWFsaXplZF9yZXNwb25zZSkKLSAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLSAgaWYgdmVyYm9zZToK
LSAgICBzeXMuc3RkZXJyLndyaXRlKCJjb25mb3JtYW5jZV9weXRob246IHJlcXVlc3Q9JXMsIHJl
c3BvbnNlPSVzXG4iICUgKAotICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LlNob3J0RGVi
dWdTdHJpbmcoKS5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5TaG9y
dERlYnVnU3RyaW5nKCkuY19zdHIoKSkpCi0KLSAgZ2xvYmFsIHRlc3RfY291bnQKLSAgdGVzdF9j
b3VudCArPSAxCi0KLSAgcmV0dXJuIFRydWUKLQotd2hpbGUgVHJ1ZToKLSAgaWYgbm90IGRvX3Rl
c3RfaW8oKToKLSAgICBzeXMuc3RkZXJyLndyaXRlKCJjb25mb3JtYW5jZV9weXRob246IHJlY2Vp
dmVkIEVPRiBmcm9tIHRlc3QgcnVubmVyICIgKwotICAgICAgICAgICAgICAgICAgICAgImFmdGVy
ICVzIHRlc3RzLCBleGl0aW5nXG4iICUgKHRlc3RfY291bnQpKQotICAgIHN5cy5leGl0KDApCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2NvbmZvcm1hbmNlX3J1YnkucmIgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2Nv
bmZvcm1hbmNlX3J1YnkucmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGM3MTZmYWNk
ZDZmM2Y5YWNjODYzOGRmMzllZjRiMzU4NDhjYzc4NjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9jb25mb3JtYW5jZV9ydWJ5LnJiCisr
KyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHJ1YnkKLSMKLSMg
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0j
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotcmVxdWlyZSAnY29uZm9ybWFuY2UnCi0KLSR0ZXN0X2NvdW50ID0gMAotJHZlcmJvc2Ug
PSBmYWxzZQotCi1kZWYgZG9fdGVzdChyZXF1ZXN0KQotICB0ZXN0X21lc3NhZ2UgPSBDb25mb3Jt
YW5jZTo6VGVzdEFsbFR5cGVzLm5ldwotICByZXNwb25zZSA9IENvbmZvcm1hbmNlOjpDb25mb3Jt
YW5jZVJlc3BvbnNlLm5ldwotCi0gIGJlZ2luCi0gICAgY2FzZSByZXF1ZXN0LnBheWxvYWQKLSAg
ICB3aGVuIDpwcm90b2J1Zl9wYXlsb2FkCi0gICAgICBiZWdpbgotICAgICAgICB0ZXN0X21lc3Nh
Z2UgPQotICAgICAgICAgIENvbmZvcm1hbmNlOjpUZXN0QWxsVHlwZXMuZGVjb2RlKHJlcXVlc3Qu
cHJvdG9idWZfcGF5bG9hZCkKLSAgICAgIHJlc2N1ZSBHb29nbGU6OlByb3RvYnVmOjpQYXJzZUVy
cm9yID0+IGVycgotICAgICAgICByZXNwb25zZS5wYXJzZV9lcnJvciA9IGVyci5tZXNzYWdlLmVu
Y29kZSgndXRmLTgnKQotICAgICAgICByZXR1cm4gcmVzcG9uc2UKLSAgICAgIGVuZAotCi0gICAg
d2hlbiA6anNvbl9wYXlsb2FkCi0gICAgICBiZWdpbgotICAgICAgICB0ZXN0X21lc3NhZ2UgPSBD
b25mb3JtYW5jZTo6VGVzdEFsbFR5cGVzLmRlY29kZV9qc29uKHJlcXVlc3QuanNvbl9wYXlsb2Fk
KQotICAgICAgcmVzY3VlIEdvb2dsZTo6UHJvdG9idWY6OlBhcnNlRXJyb3IgPT4gZXJyCi0gICAg
ICAgIHJlc3BvbnNlLnBhcnNlX2Vycm9yID0gZXJyLm1lc3NhZ2UuZW5jb2RlKCd1dGYtOCcpCi0g
ICAgICAgIHJldHVybiByZXNwb25zZQotICAgICAgZW5kCi0KLSAgICB3aGVuIG5pbAotICAgICAg
ZmFpbCAiUmVxdWVzdCBkaWRuJ3QgaGF2ZSBwYXlsb2FkIgotICAgIGVuZAotCi0gICAgY2FzZSBy
ZXF1ZXN0LnJlcXVlc3RlZF9vdXRwdXRfZm9ybWF0Ci0gICAgd2hlbiA6VU5TUEVDSUZJRUQKLSAg
ICAgIGZhaWwgJ1Vuc3BlY2lmaWVkIG91dHB1dCBmb3JtYXQnCi0KLSAgICB3aGVuIDpQUk9UT0JV
RgotICAgICAgcmVzcG9uc2UucHJvdG9idWZfcGF5bG9hZCA9IHRlc3RfbWVzc2FnZS50b19wcm90
bwotCi0gICAgd2hlbiA6SlNPTgotICAgICAgcmVzcG9uc2UuanNvbl9wYXlsb2FkID0gdGVzdF9t
ZXNzYWdlLnRvX2pzb24KLQotICAgIHdoZW4gbmlsCi0gICAgICBmYWlsICJSZXF1ZXN0IGRpZG4n
dCBoYXZlIHJlcXVlc3RlZCBvdXRwdXQgZm9ybWF0IgotICAgIGVuZAotICByZXNjdWUgU3RhbmRh
cmRFcnJvciA9PiBlcnIKLSAgICByZXNwb25zZS5ydW50aW1lX2Vycm9yID0gZXJyLm1lc3NhZ2Uu
ZW5jb2RlKCd1dGYtOCcpCi0gIGVuZAotCi0gIHJlc3BvbnNlCi1lbmQKLQotIyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHRlc3QgcmFuIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb24gbGVnaXRpbWF0ZSBFT0Yu
Ci0jIElmIEVPRiBpcyBlbmNvdW50ZXJlZCBpbiBhbiB1bmV4cGVjdGVkIHBsYWNlLCByYWlzZXMg
SU9FcnJvci4KLWRlZiBkb190ZXN0X2lvCi0gIGxlbmd0aF9ieXRlcyA9IFNURElOLnJlYWQoNCkK
LSAgcmV0dXJuIGZhbHNlIGlmIGxlbmd0aF9ieXRlcy5uaWw/Ci0KLSAgbGVuZ3RoID0gbGVuZ3Ro
X2J5dGVzLnVucGFjaygnVicpLmZpcnN0Ci0gIHNlcmlhbGl6ZWRfcmVxdWVzdCA9IFNURElOLnJl
YWQobGVuZ3RoKQotICBpZiBzZXJpYWxpemVkX3JlcXVlc3QubmlsPyB8fCBzZXJpYWxpemVkX3Jl
cXVlc3QubGVuZ3RoICE9IGxlbmd0aAotICAgIGZhaWwgSU9FcnJvcgotICBlbmQKLQotICByZXF1
ZXN0ID0gQ29uZm9ybWFuY2U6OkNvbmZvcm1hbmNlUmVxdWVzdC5kZWNvZGUoc2VyaWFsaXplZF9y
ZXF1ZXN0KQotCi0gIHJlc3BvbnNlID0gZG9fdGVzdChyZXF1ZXN0KQotCi0gIHNlcmlhbGl6ZWRf
cmVzcG9uc2UgPSBDb25mb3JtYW5jZTo6Q29uZm9ybWFuY2VSZXNwb25zZS5lbmNvZGUocmVzcG9u
c2UpCi0gIFNURE9VVC53cml0ZShbc2VyaWFsaXplZF9yZXNwb25zZS5sZW5ndGhdLnBhY2soJ1Yn
KSkKLSAgU1RET1VULndyaXRlKHNlcmlhbGl6ZWRfcmVzcG9uc2UpCi0gIFNURE9VVC5mbHVzaAot
Ci0gIGlmICR2ZXJib3NlCi0gICAgU1RERVJSLnB1dHMoImNvbmZvcm1hbmNlX3J1Ynk6IHJlcXVl
c3Q9I3tyZXF1ZXN0LnRvX2pzb259LCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJyZXNwb25zZT0je3Jlc3BvbnNlLnRvX2pzb259XG4iKQotICBlbmQKLQotICAkdGVzdF9j
b3VudCArPSAxCi0KLSAgdHJ1ZQotZW5kCi0KLWxvb3AgZG8KLSAgdW5sZXNzIGRvX3Rlc3RfaW8K
LSAgICBTVERFUlIucHV0cygnY29uZm9ybWFuY2VfcnVieTogcmVjZWl2ZWQgRU9GIGZyb20gdGVz
dCBydW5uZXIgJyBcCi0gICAgICAgICAgICAgICAgImFmdGVyICN7JHRlc3RfY291bnR9IHRlc3Rz
LCBleGl0aW5nIikKLSAgICBicmVhawotICBlbmQKLWVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5j
ZS9jb25mb3JtYW5jZV90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9jb25mb3JtYW5jZV90ZXN0LmNjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzA2MDViZmM0YTIwYmNkOWZjODFjM2E0YjFi
MjA0NzhmYzUyYTE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvY29uZm9ybWFuY2UvY29uZm9ybWFuY2VfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDIw
MDYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRl
IDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJjb25mb3JtYW5jZS5w
Yi5oIgotI2luY2x1ZGUgImNvbmZvcm1hbmNlX3Rlc3QuaCIKLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0
cmluZ3ByaW50Zi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2pzb25fdXRpbC5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxkX2NvbXBhcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvdXRpbC9tZXNzYWdlX2RpZmZlcmVuY2VyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZlcl91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3dpcmVfZm9ybWF0X2xpdGUuaD4KLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2pzb25jcHAv
anNvbi5oIgotCi11c2luZyBjb25mb3JtYW5jZTo6Q29uZm9ybWFuY2VSZXF1ZXN0OwotdXNpbmcg
Y29uZm9ybWFuY2U6OkNvbmZvcm1hbmNlUmVzcG9uc2U7Ci11c2luZyBjb25mb3JtYW5jZTo6VGVz
dEFsbFR5cGVzOwotdXNpbmcgY29uZm9ybWFuY2U6OldpcmVGb3JtYXQ7Ci11c2luZyBnb29nbGU6
OnByb3RvYnVmOjpEZXNjcmlwdG9yOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNj
cmlwdG9yOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6VGV4dEZvcm1hdDsKLXVzaW5nIGdvb2dsZTo6cHJv
dG9idWY6OnV0aWw6OkRlZmF1bHRGaWVsZENvbXBhcmF0b3I7Ci11c2luZyBnb29nbGU6OnByb3Rv
YnVmOjp1dGlsOjpKc29uVG9CaW5hcnlTdHJpbmc7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjp1
dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjp1dGlsOjpO
ZXdUeXBlUmVzb2x2ZXJGb3JEZXNjcmlwdG9yUG9vbDsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6
OnV0aWw6OlN0YXR1czsKLXVzaW5nIHN0ZDo6c3RyaW5nOwotCi1uYW1lc3BhY2UgewotCi1zdGF0
aWMgY29uc3QgY2hhciBrVHlwZVVybFByZWZpeFtdID0gInR5cGUuZ29vZ2xlYXBpcy5jb20iOwot
Ci1zdGF0aWMgc3RyaW5nIEdldFR5cGVVcmwoY29uc3QgRGVzY3JpcHRvciogbWVzc2FnZSkgewot
ICByZXR1cm4gc3RyaW5nKGtUeXBlVXJsUHJlZml4KSArICIvIiArIG1lc3NhZ2UtPmZ1bGxfbmFt
ZSgpOwotfQotCi0vKiBSb3V0aW5lcyBmb3IgYnVpbGRpbmcgYXJiaXRyYXJ5IHByb3RvcyAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vLyBXZSB3b3VsZCB1c2UgQ29k
ZWRPdXRwdXRTdHJlYW0gZXhjZXB0IHRoYXQgd2Ugd2FudCBtb3JlIGZyZWVkb20gdG8gYnVpbGQK
LS8vIGFyYml0cmFyeSBwcm90b3MgKGV2ZW4gaW52YWxpZCBvbmVzKS4KLQotY29uc3Qgc3RyaW5n
IGVtcHR5OwotCi1zdHJpbmcgY2F0KGNvbnN0IHN0cmluZyYgYSwgY29uc3Qgc3RyaW5nJiBiLAot
ICAgICAgICAgICBjb25zdCBzdHJpbmcmIGMgPSBlbXB0eSwKLSAgICAgICAgICAgY29uc3Qgc3Ry
aW5nJiBkID0gZW1wdHksCi0gICAgICAgICAgIGNvbnN0IHN0cmluZyYgZSA9IGVtcHR5LAotICAg
ICAgICAgICBjb25zdCBzdHJpbmcmIGYgPSBlbXB0eSwKLSAgICAgICAgICAgY29uc3Qgc3RyaW5n
JiBnID0gZW1wdHksCi0gICAgICAgICAgIGNvbnN0IHN0cmluZyYgaCA9IGVtcHR5LAotICAgICAg
ICAgICBjb25zdCBzdHJpbmcmIGkgPSBlbXB0eSwKLSAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBq
ID0gZW1wdHksCi0gICAgICAgICAgIGNvbnN0IHN0cmluZyYgayA9IGVtcHR5LAotICAgICAgICAg
ICBjb25zdCBzdHJpbmcmIGwgPSBlbXB0eSkgewotICBzdHJpbmcgcmV0OwotICByZXQucmVzZXJ2
ZShhLnNpemUoKSArIGIuc2l6ZSgpICsgYy5zaXplKCkgKyBkLnNpemUoKSArIGUuc2l6ZSgpICsg
Zi5zaXplKCkgKwotICAgICAgICAgICAgICBnLnNpemUoKSArIGguc2l6ZSgpICsgaS5zaXplKCkg
KyBqLnNpemUoKSArIGsuc2l6ZSgpICsgbC5zaXplKCkpOwotICByZXQuYXBwZW5kKGEpOwotICBy
ZXQuYXBwZW5kKGIpOwotICByZXQuYXBwZW5kKGMpOwotICByZXQuYXBwZW5kKGQpOwotICByZXQu
YXBwZW5kKGUpOwotICByZXQuYXBwZW5kKGYpOwotICByZXQuYXBwZW5kKGcpOwotICByZXQuYXBw
ZW5kKGgpOwotICByZXQuYXBwZW5kKGkpOwotICByZXQuYXBwZW5kKGopOwotICByZXQuYXBwZW5k
KGspOwotICByZXQuYXBwZW5kKGwpOwotICByZXR1cm4gcmV0OwotfQotCi0vLyBUaGUgbWF4aW11
bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBpdCB0YWtlcyB0byBlbmNvZGUgYSA2NC1iaXQgdmFyaW50
LgotI2RlZmluZSBWQVJJTlRfTUFYX0xFTiAxMAotCi1zaXplX3QgdmVuY29kZTY0KHVpbnQ2NF90
IHZhbCwgY2hhciAqYnVmKSB7Ci0gIGlmICh2YWwgPT0gMCkgeyBidWZbMF0gPSAwOyByZXR1cm4g
MTsgfQotICBzaXplX3QgaSA9IDA7Ci0gIHdoaWxlICh2YWwpIHsKLSAgICB1aW50OF90IGJ5dGUg
PSB2YWwgJiAweDdmVTsKLSAgICB2YWwgPj49IDc7Ci0gICAgaWYgKHZhbCkgYnl0ZSB8PSAweDgw
VTsKLSAgICBidWZbaSsrXSA9IGJ5dGU7Ci0gIH0KLSAgcmV0dXJuIGk7Ci19Ci0KLXN0cmluZyB2
YXJpbnQodWludDY0X3QgeCkgewotICBjaGFyIGJ1ZltWQVJJTlRfTUFYX0xFTl07Ci0gIHNpemVf
dCBsZW4gPSB2ZW5jb2RlNjQoeCwgYnVmKTsKLSAgcmV0dXJuIHN0cmluZyhidWYsIGxlbik7Ci19
Ci0KLS8vIFRPRE86IHByb3BlciBieXRlLXN3YXBwaW5nIGZvciBiaWctZW5kaWFuIG1hY2hpbmVz
Lgotc3RyaW5nIGZpeGVkMzIodm9pZCAqZGF0YSkgeyByZXR1cm4gc3RyaW5nKHN0YXRpY19jYXN0
PGNoYXIqPihkYXRhKSwgNCk7IH0KLXN0cmluZyBmaXhlZDY0KHZvaWQgKmRhdGEpIHsgcmV0dXJu
IHN0cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4oZGF0YSksIDgpOyB9Ci0KLXN0cmluZyBkZWxpbShj
b25zdCBzdHJpbmcmIGJ1ZikgeyByZXR1cm4gY2F0KHZhcmludChidWYuc2l6ZSgpKSwgYnVmKTsg
fQotc3RyaW5nIHVpbnQzMih1aW50MzJfdCB1MzIpIHsgcmV0dXJuIGZpeGVkMzIoJnUzMik7IH0K
LXN0cmluZyB1aW50NjQodWludDY0X3QgdTY0KSB7IHJldHVybiBmaXhlZDY0KCZ1NjQpOyB9Ci1z
dHJpbmcgZmx0KGZsb2F0IGYpIHsgcmV0dXJuIGZpeGVkMzIoJmYpOyB9Ci1zdHJpbmcgZGJsKGRv
dWJsZSBkKSB7IHJldHVybiBmaXhlZDY0KCZkKTsgfQotc3RyaW5nIHp6MzIoaW50MzJfdCB4KSB7
IHJldHVybiB2YXJpbnQoV2lyZUZvcm1hdExpdGU6OlppZ1phZ0VuY29kZTMyKHgpKTsgfQotc3Ry
aW5nIHp6NjQoaW50NjRfdCB4KSB7IHJldHVybiB2YXJpbnQoV2lyZUZvcm1hdExpdGU6OlppZ1ph
Z0VuY29kZTY0KHgpKTsgfQotCi1zdHJpbmcgdGFnKHVpbnQzMl90IGZpZWxkbnVtLCBjaGFyIHdp
cmVfdHlwZSkgewotICByZXR1cm4gdmFyaW50KChmaWVsZG51bSA8PCAzKSB8IHdpcmVfdHlwZSk7
Ci19Ci0KLXN0cmluZyBzdWJtc2codWludDMyX3QgZm4sIGNvbnN0IHN0cmluZyYgYnVmKSB7Ci0g
IHJldHVybiBjYXQoIHRhZyhmbiwgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJ
TUlURUQpLCBkZWxpbShidWYpICk7Ci19Ci0KLSNkZWZpbmUgVU5LTk9XTl9GSUVMRCA2NjYKLQot
dWludDMyX3QgR2V0RmllbGROdW1iZXJGb3JUeXBlKEZpZWxkRGVzY3JpcHRvcjo6VHlwZSB0eXBl
LCBib29sIHJlcGVhdGVkKSB7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGQgPSBUZXN0QWxsVHlwZXMo
KS5HZXREZXNjcmlwdG9yKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZC0+ZmllbGRfY291bnQo
KTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmID0gZC0+ZmllbGQoaSk7Ci0g
ICAgaWYgKGYtPnR5cGUoKSA9PSB0eXBlICYmIGYtPmlzX3JlcGVhdGVkKCkgPT0gcmVwZWF0ZWQp
IHsKLSAgICAgIHJldHVybiBmLT5udW1iZXIoKTsKLSAgICB9Ci0gIH0KLSAgR09PR0xFX0xPRyhG
QVRBTCkgPDwgIkNvdWxkbid0IGZpbmQgZmllbGQgd2l0aCB0eXBlICIgPDwgKGludCl0eXBlOwot
ICByZXR1cm4gMDsKLX0KLQotc3RyaW5nIFVwcGVyQ2FzZShzdHJpbmcgc3RyKSB7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgc3RyLnNpemUoKTsgaSsrKSB7Ci0gICAgc3RyW2ldID0gdG91cHBlcihz
dHJbaV0pOwotICB9Ci0gIHJldHVybiBzdHI7Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi12b2lkIENv
bmZvcm1hbmNlVGVzdFN1aXRlOjpSZXBvcnRTdWNjZXNzKGNvbnN0IHN0cmluZyYgdGVzdF9uYW1l
KSB7Ci0gIGlmIChleHBlY3RlZF90b19mYWlsXy5lcmFzZSh0ZXN0X25hbWUpICE9IDApIHsKLSAg
ICBTdHJpbmdBcHBlbmRGKCZvdXRwdXRfLAotICAgICAgICAgICAgICAgICAgIkVSUk9SOiB0ZXN0
ICVzIGlzIGluIHRoZSBmYWlsdXJlIGxpc3QsIGJ1dCB0ZXN0IHN1Y2NlZWRlZC4gICIKLSAgICAg
ICAgICAgICAgICAgICJSZW1vdmUgaXQgZnJvbSB0aGUgZmFpbHVyZSBsaXN0LlxuIiwKLSAgICAg
ICAgICAgICAgICAgIHRlc3RfbmFtZS5jX3N0cigpKTsKLSAgICB1bmV4cGVjdGVkX3N1Y2NlZWRp
bmdfdGVzdHNfLmluc2VydCh0ZXN0X25hbWUpOwotICB9Ci0gIHN1Y2Nlc3Nlc18rKzsKLX0KLQot
dm9pZCBDb25mb3JtYW5jZVRlc3RTdWl0ZTo6UmVwb3J0RmFpbHVyZShjb25zdCBzdHJpbmcmIHRl
c3RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Q29uZm9ybWFuY2VSZXF1ZXN0JiByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBDb25mb3JtYW5jZVJlc3BvbnNlJiByZXNwb25zZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZm10LCAuLi4p
IHsKLSAgaWYgKGV4cGVjdGVkX3RvX2ZhaWxfLmVyYXNlKHRlc3RfbmFtZSkgPT0gMSkgewotICAg
IGV4cGVjdGVkX2ZhaWx1cmVzXysrOwotICAgIGlmICghdmVyYm9zZV8pCi0gICAgICByZXR1cm47
Ci0gIH0gZWxzZSB7Ci0gICAgU3RyaW5nQXBwZW5kRigmb3V0cHV0XywgIkVSUk9SLCB0ZXN0PSVz
OiAiLCB0ZXN0X25hbWUuY19zdHIoKSk7Ci0gICAgdW5leHBlY3RlZF9mYWlsaW5nX3Rlc3RzXy5p
bnNlcnQodGVzdF9uYW1lKTsKLSAgfQotICB2YV9saXN0IGFyZ3M7Ci0gIHZhX3N0YXJ0KGFyZ3Ms
IGZtdCk7Ci0gIFN0cmluZ0FwcGVuZFYoJm91dHB1dF8sIGZtdCwgYXJncyk7Ci0gIHZhX2VuZChh
cmdzKTsKLSAgU3RyaW5nQXBwZW5kRigmb3V0cHV0XywgIiByZXF1ZXN0PSVzLCByZXNwb25zZT0l
c1xuIiwKLSAgICAgICAgICAgICAgICByZXF1ZXN0LlNob3J0RGVidWdTdHJpbmcoKS5jX3N0cigp
LAotICAgICAgICAgICAgICAgIHJlc3BvbnNlLlNob3J0RGVidWdTdHJpbmcoKS5jX3N0cigpKTsK
LX0KLQotdm9pZCBDb25mb3JtYW5jZVRlc3RTdWl0ZTo6UmVwb3J0U2tpcChjb25zdCBzdHJpbmcm
IHRlc3RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Q29uZm9ybWFuY2VSZXF1ZXN0JiByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDb25mb3JtYW5jZVJlc3BvbnNlJiByZXNwb25zZSkgewotICBpZiAo
dmVyYm9zZV8pIHsKLSAgICBTdHJpbmdBcHBlbmRGKCZvdXRwdXRfLCAiU0tJUFBFRCwgdGVzdD0l
cyByZXF1ZXN0PSVzLCByZXNwb25zZT0lc1xuIiwKLSAgICAgICAgICAgICAgICAgIHRlc3RfbmFt
ZS5jX3N0cigpLCByZXF1ZXN0LlNob3J0RGVidWdTdHJpbmcoKS5jX3N0cigpLAotICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2UuU2hvcnREZWJ1Z1N0cmluZygpLmNfc3RyKCkpOwotICB9Ci0gIHNr
aXBwZWRfLmluc2VydCh0ZXN0X25hbWUpOwotfQotCi12b2lkIENvbmZvcm1hbmNlVGVzdFN1aXRl
OjpSdW5UZXN0KGNvbnN0IHN0cmluZyYgdGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBDb25mb3JtYW5jZVJlcXVlc3QmIHJlcXVlc3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZvcm1hbmNlUmVzcG9uc2UqIHJlc3BvbnNl
KSB7Ci0gIGlmICh0ZXN0X25hbWVzXy5pbnNlcnQodGVzdF9uYW1lKS5zZWNvbmQgPT0gZmFsc2Up
IHsKLSAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiRHVwbGljYXRlZCB0ZXN0IG5hbWU6ICIgPDwg
dGVzdF9uYW1lOwotICB9Ci0KLSAgc3RyaW5nIHNlcmlhbGl6ZWRfcmVxdWVzdDsKLSAgc3RyaW5n
IHNlcmlhbGl6ZWRfcmVzcG9uc2U7Ci0gIHJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcoJnNlcmlh
bGl6ZWRfcmVxdWVzdCk7Ci0KLSAgcnVubmVyXy0+UnVuVGVzdCh0ZXN0X25hbWUsIHNlcmlhbGl6
ZWRfcmVxdWVzdCwgJnNlcmlhbGl6ZWRfcmVzcG9uc2UpOwotCi0gIGlmICghcmVzcG9uc2UtPlBh
cnNlRnJvbVN0cmluZyhzZXJpYWxpemVkX3Jlc3BvbnNlKSkgewotICAgIHJlc3BvbnNlLT5DbGVh
cigpOwotICAgIHJlc3BvbnNlLT5zZXRfcnVudGltZV9lcnJvcigicmVzcG9uc2UgcHJvdG8gY291
bGQgbm90IGJlIHBhcnNlZC4iKTsKLSAgfQotCi0gIGlmICh2ZXJib3NlXykgewotICAgIFN0cmlu
Z0FwcGVuZEYoJm91dHB1dF8sICJjb25mb3JtYW5jZSB0ZXN0OiBuYW1lPSVzLCByZXF1ZXN0PSVz
LCByZXNwb25zZT0lc1xuIiwKLSAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZS5jX3N0cigpLAot
ICAgICAgICAgICAgICAgICAgcmVxdWVzdC5TaG9ydERlYnVnU3RyaW5nKCkuY19zdHIoKSwKLSAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlLT5TaG9ydERlYnVnU3RyaW5nKCkuY19zdHIoKSk7Ci0g
IH0KLX0KLQotdm9pZCBDb25mb3JtYW5jZVRlc3RTdWl0ZTo6UnVuVmFsaWRJbnB1dFRlc3QoCi0g
ICAgY29uc3Qgc3RyaW5nJiB0ZXN0X25hbWUsIGNvbnN0IHN0cmluZyYgaW5wdXQsIFdpcmVGb3Jt
YXQgaW5wdXRfZm9ybWF0LAotICAgIGNvbnN0IHN0cmluZyYgZXF1aXZhbGVudF90ZXh0X2Zvcm1h
dCwgV2lyZUZvcm1hdCByZXF1ZXN0ZWRfb3V0cHV0KSB7Ci0gIFRlc3RBbGxUeXBlcyByZWZlcmVu
Y2VfbWVzc2FnZTsKLSAgR09PR0xFX0NIRUNLKAotICAgICAgVGV4dEZvcm1hdDo6UGFyc2VGcm9t
U3RyaW5nKGVxdWl2YWxlbnRfdGV4dF9mb3JtYXQsICZyZWZlcmVuY2VfbWVzc2FnZSkpCi0gICAg
ICAgICAgPDwgIkZhaWxlZCB0byBwYXJzZSBkYXRhIGZvciB0ZXN0IGNhc2U6ICIgPDwgdGVzdF9u
YW1lCi0gICAgICAgICAgPDwgIiwgZGF0YTogIiA8PCBlcXVpdmFsZW50X3RleHRfZm9ybWF0Owot
Ci0gIENvbmZvcm1hbmNlUmVxdWVzdCByZXF1ZXN0OwotICBDb25mb3JtYW5jZVJlc3BvbnNlIHJl
c3BvbnNlOwotCi0gIHN3aXRjaCAoaW5wdXRfZm9ybWF0KSB7Ci0gICAgY2FzZSBjb25mb3JtYW5j
ZTo6UFJPVE9CVUY6Ci0gICAgICByZXF1ZXN0LnNldF9wcm90b2J1Zl9wYXlsb2FkKGlucHV0KTsK
LSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBjb25mb3JtYW5jZTo6SlNPTjoKLSAgICAgIHJlcXVl
c3Quc2V0X2pzb25fcGF5bG9hZChpbnB1dCk7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6
Ci0gICAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiVW5zcGVjaWZpZWQgaW5wdXQgZm9ybWF0IjsK
LSAgfQotCi0gIHJlcXVlc3Quc2V0X3JlcXVlc3RlZF9vdXRwdXRfZm9ybWF0KHJlcXVlc3RlZF9v
dXRwdXQpOwotCi0gIFJ1blRlc3QodGVzdF9uYW1lLCByZXF1ZXN0LCAmcmVzcG9uc2UpOwotCi0g
IFRlc3RBbGxUeXBlcyB0ZXN0X21lc3NhZ2U7Ci0KLSAgc3dpdGNoIChyZXNwb25zZS5yZXN1bHRf
Y2FzZSgpKSB7Ci0gICAgY2FzZSBDb25mb3JtYW5jZVJlc3BvbnNlOjprUGFyc2VFcnJvcjoKLSAg
ICBjYXNlIENvbmZvcm1hbmNlUmVzcG9uc2U6OmtSdW50aW1lRXJyb3I6Ci0gICAgY2FzZSBDb25m
b3JtYW5jZVJlc3BvbnNlOjprU2VyaWFsaXplRXJyb3I6Ci0gICAgICBSZXBvcnRGYWlsdXJlKHRl
c3RfbmFtZSwgcmVxdWVzdCwgcmVzcG9uc2UsCi0gICAgICAgICAgICAgICAgICAgICJGYWlsZWQg
dG8gcGFyc2UgSlNPTiBpbnB1dCBvciBwcm9kdWNlIEpTT04gb3V0cHV0LiIpOwotICAgICAgcmV0
dXJuOwotCi0gICAgY2FzZSBDb25mb3JtYW5jZVJlc3BvbnNlOjprU2tpcHBlZDoKLSAgICAgIFJl
cG9ydFNraXAodGVzdF9uYW1lLCByZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICByZXR1cm47Ci0K
LSAgICBjYXNlIENvbmZvcm1hbmNlUmVzcG9uc2U6OmtKc29uUGF5bG9hZDogewotICAgICAgaWYg
KHJlcXVlc3RlZF9vdXRwdXQgIT0gY29uZm9ybWFuY2U6OkpTT04pIHsKLSAgICAgICAgUmVwb3J0
RmFpbHVyZSgKLSAgICAgICAgICAgIHRlc3RfbmFtZSwgcmVxdWVzdCwgcmVzcG9uc2UsCi0gICAg
ICAgICAgICAiVGVzdCB3YXMgYXNrZWQgZm9yIHByb3RvYnVmIG91dHB1dCBidXQgcHJvdmlkZWQg
SlNPTiBpbnN0ZWFkLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBzdHJpbmcg
YmluYXJ5X3Byb3RvYnVmOwotICAgICAgU3RhdHVzIHN0YXR1cyA9Ci0gICAgICAgICAgSnNvblRv
QmluYXJ5U3RyaW5nKHR5cGVfcmVzb2x2ZXJfLmdldCgpLCB0eXBlX3VybF8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmpzb25fcGF5bG9hZCgpLCAmYmluYXJ5X3Byb3Rv
YnVmKTsKLSAgICAgIGlmICghc3RhdHVzLm9rKCkpIHsKLSAgICAgICAgUmVwb3J0RmFpbHVyZSh0
ZXN0X25hbWUsIHJlcXVlc3QsIHJlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAgICJKU09O
IG91dHB1dCB3ZSByZWNlaXZlZCBmcm9tIHRlc3Qgd2FzIHVucGFyc2VhYmxlLiIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdGVzdF9tZXNzYWdlLlBhcnNlRnJvbVN0
cmluZyhiaW5hcnlfcHJvdG9idWYpKSB7Ci0gICAgICAgIFJlcG9ydEZhaWx1cmUodGVzdF9uYW1l
LCByZXF1ZXN0LCByZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAiSU5URVJOQUwgRVJS
T1I6IGludGVybmFsIEpTT04tPnByb3RvYnVmIHRyYW5zY29kZSAiCi0gICAgICAgICAgICAgICAg
ICAgICAgInlpZWxkZWQgdW5wYXJzZWFibGUgcHJvdG8uIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgIH0KLQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBDb25mb3JtYW5jZVJlc3Bv
bnNlOjprUHJvdG9idWZQYXlsb2FkOiB7Ci0gICAgICBpZiAocmVxdWVzdGVkX291dHB1dCAhPSBj
b25mb3JtYW5jZTo6UFJPVE9CVUYpIHsKLSAgICAgICAgUmVwb3J0RmFpbHVyZSgKLSAgICAgICAg
ICAgIHRlc3RfbmFtZSwgcmVxdWVzdCwgcmVzcG9uc2UsCi0gICAgICAgICAgICAiVGVzdCB3YXMg
YXNrZWQgZm9yIEpTT04gb3V0cHV0IGJ1dCBwcm92aWRlZCBwcm90b2J1ZiBpbnN0ZWFkLiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdGVzdF9tZXNzYWdlLlBhcnNl
RnJvbVN0cmluZyhyZXNwb25zZS5wcm90b2J1Zl9wYXlsb2FkKCkpKSB7Ci0gICAgICAgIFJlcG9y
dEZhaWx1cmUodGVzdF9uYW1lLCByZXF1ZXN0LCByZXNwb25zZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAiUHJvdG9idWYgb3V0cHV0IHdlIHJlY2VpdmVkIGZyb20gdGVzdCB3YXMgdW5wYXJzZWFi
bGUuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8IHRlc3RfbmFtZSA8PCAi
OiB1bmtub3duIHBheWxvYWQgdHlwZTogIgotICAgICAgICAgICAgICAgICAgICAgICAgPDwgcmVz
cG9uc2UucmVzdWx0X2Nhc2UoKTsKLSAgfQotCi0gIE1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJl
bmNlcjsKLSAgRGVmYXVsdEZpZWxkQ29tcGFyYXRvciBmaWVsZF9jb21wYXJhdG9yOwotICBmaWVs
ZF9jb21wYXJhdG9yLnNldF90cmVhdF9uYW5fYXNfZXF1YWwodHJ1ZSk7Ci0gIGRpZmZlcmVuY2Vy
LnNldF9maWVsZF9jb21wYXJhdG9yKCZmaWVsZF9jb21wYXJhdG9yKTsKLSAgc3RyaW5nIGRpZmZl
cmVuY2VzOwotICBkaWZmZXJlbmNlci5SZXBvcnREaWZmZXJlbmNlc1RvU3RyaW5nKCZkaWZmZXJl
bmNlcyk7Ci0KLSAgaWYgKGRpZmZlcmVuY2VyLkNvbXBhcmUocmVmZXJlbmNlX21lc3NhZ2UsIHRl
c3RfbWVzc2FnZSkpIHsKLSAgICBSZXBvcnRTdWNjZXNzKHRlc3RfbmFtZSk7Ci0gIH0gZWxzZSB7
Ci0gICAgUmVwb3J0RmFpbHVyZSh0ZXN0X25hbWUsIHJlcXVlc3QsIHJlc3BvbnNlLAotICAgICAg
ICAgICAgICAgICAgIk91dHB1dCB3YXMgbm90IGVxdWl2YWxlbnQgdG8gcmVmZXJlbmNlIG1lc3Nh
Z2U6ICVzLiIsCi0gICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlcy5jX3N0cigpKTsKLSAgfQot
fQotCi0vLyBFeHBlY3QgdGhhdCB0aGlzIHByZWNpc2UgcHJvdG9idWYgd2lsbCBjYXVzZSBhIHBh
cnNlIGVycm9yLgotdm9pZCBDb25mb3JtYW5jZVRlc3RTdWl0ZTo6RXhwZWN0UGFyc2VGYWlsdXJl
Rm9yUHJvdG8oCi0gICAgY29uc3Qgc3RyaW5nJiBwcm90bywgY29uc3Qgc3RyaW5nJiB0ZXN0X25h
bWUpIHsKLSAgQ29uZm9ybWFuY2VSZXF1ZXN0IHJlcXVlc3Q7Ci0gIENvbmZvcm1hbmNlUmVzcG9u
c2UgcmVzcG9uc2U7Ci0gIHJlcXVlc3Quc2V0X3Byb3RvYnVmX3BheWxvYWQocHJvdG8pOwotICBz
dHJpbmcgZWZmZWN0aXZlX3Rlc3RfbmFtZSA9ICJQcm90b2J1ZklucHV0LiIgKyB0ZXN0X25hbWU7
Ci0KLSAgLy8gV2UgZG9uJ3QgZXhwZWN0IG91dHB1dCwgYnV0IGlmIHRoZSBwcm9ncmFtIGVycm9u
ZW91c2x5IGFjY2VwdHMgdGhlIHByb3RvYnVmCi0gIC8vIHdlIGxldCBpdCBzZW5kIGl0cyByZXNw
b25zZSBhcyB0aGlzLiAgV2UgbXVzdCBub3QgbGVhdmUgaXQgdW5zcGVjaWZpZWQuCi0gIHJlcXVl
c3Quc2V0X3JlcXVlc3RlZF9vdXRwdXRfZm9ybWF0KGNvbmZvcm1hbmNlOjpQUk9UT0JVRik7Ci0K
LSAgUnVuVGVzdChlZmZlY3RpdmVfdGVzdF9uYW1lLCByZXF1ZXN0LCAmcmVzcG9uc2UpOwotICBp
ZiAocmVzcG9uc2UucmVzdWx0X2Nhc2UoKSA9PSBDb25mb3JtYW5jZVJlc3BvbnNlOjprUGFyc2VF
cnJvcikgewotICAgIFJlcG9ydFN1Y2Nlc3MoZWZmZWN0aXZlX3Rlc3RfbmFtZSk7Ci0gIH0gZWxz
ZSBpZiAocmVzcG9uc2UucmVzdWx0X2Nhc2UoKSA9PSBDb25mb3JtYW5jZVJlc3BvbnNlOjprU2tp
cHBlZCkgewotICAgIFJlcG9ydFNraXAoZWZmZWN0aXZlX3Rlc3RfbmFtZSwgcmVxdWVzdCwgcmVz
cG9uc2UpOwotICB9IGVsc2UgewotICAgIFJlcG9ydEZhaWx1cmUoZWZmZWN0aXZlX3Rlc3RfbmFt
ZSwgcmVxdWVzdCwgcmVzcG9uc2UsCi0gICAgICAgICAgICAgICAgICAiU2hvdWxkIGhhdmUgZmFp
bGVkIHRvIHBhcnNlLCBidXQgZGlkbid0LiIpOwotICB9Ci19Ci0KLS8vIEV4cGVjdCB0aGF0IHRo
aXMgcHJvdG9idWYgd2lsbCBjYXVzZSBhIHBhcnNlIGVycm9yLCBldmVuIGlmIGl0IGlzIGZvbGxv
d2VkCi0vLyBieSB2YWxpZCBwcm90b2J1ZiBkYXRhLiAgV2UgY2FuIHRyeSBydW5uaW5nIHRoaXMg
dHdpY2U6IG9uY2Ugd2l0aCB0aGlzCi0vLyBkYXRhIHZlcmJhdGltIGFuZCBvbmNlIHdpdGggdGhp
cyBkYXRhIGZvbGxvd2VkIGJ5IHNvbWUgdmFsaWQgZGF0YS4KLS8vCi0vLyBUT0RPKGhhYmVybWFu
KTogaW1wbGVtZW50IHRoZSBzZWNvbmQgb2YgdGhlc2UuCi12b2lkIENvbmZvcm1hbmNlVGVzdFN1
aXRlOjpFeHBlY3RIYXJkUGFyc2VGYWlsdXJlRm9yUHJvdG8oCi0gICAgY29uc3Qgc3RyaW5nJiBw
cm90bywgY29uc3Qgc3RyaW5nJiB0ZXN0X25hbWUpIHsKLSAgcmV0dXJuIEV4cGVjdFBhcnNlRmFp
bHVyZUZvclByb3RvKHByb3RvLCB0ZXN0X25hbWUpOwotfQotCi12b2lkIENvbmZvcm1hbmNlVGVz
dFN1aXRlOjpSdW5WYWxpZEpzb25UZXN0KAotICAgIGNvbnN0IHN0cmluZyYgdGVzdF9uYW1lLCBj
b25zdCBzdHJpbmcmIGlucHV0X2pzb24sCi0gICAgY29uc3Qgc3RyaW5nJiBlcXVpdmFsZW50X3Rl
eHRfZm9ybWF0KSB7Ci0gIFJ1blZhbGlkSW5wdXRUZXN0KCJKc29uSW5wdXQuIiArIHRlc3RfbmFt
ZSArICIuUHJvdG9idWZPdXRwdXQiLCBpbnB1dF9qc29uLAotICAgICAgICAgICAgICAgICAgICBj
b25mb3JtYW5jZTo6SlNPTiwgZXF1aXZhbGVudF90ZXh0X2Zvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgY29uZm9ybWFuY2U6OlBST1RPQlVGKTsKLSAgUnVuVmFsaWRJbnB1dFRlc3QoIkpzb25J
bnB1dC4iICsgdGVzdF9uYW1lICsgIi5Kc29uT3V0cHV0IiwgaW5wdXRfanNvbiwKLSAgICAgICAg
ICAgICAgICAgICAgY29uZm9ybWFuY2U6OkpTT04sIGVxdWl2YWxlbnRfdGV4dF9mb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgIGNvbmZvcm1hbmNlOjpKU09OKTsKLX0KLQotdm9pZCBDb25mb3Jt
YW5jZVRlc3RTdWl0ZTo6UnVuVmFsaWRKc29uVGVzdFdpdGhQcm90b2J1ZklucHV0KAotICAgIGNv
bnN0IHN0cmluZyYgdGVzdF9uYW1lLCBjb25zdCBUZXN0QWxsVHlwZXMmIGlucHV0LAotICAgIGNv
bnN0IHN0cmluZyYgZXF1aXZhbGVudF90ZXh0X2Zvcm1hdCkgewotICBSdW5WYWxpZElucHV0VGVz
dCgiUHJvdG9idWZJbnB1dC4iICsgdGVzdF9uYW1lICsgIi5Kc29uT3V0cHV0IiwKLSAgICAgICAg
ICAgICAgICAgICAgaW5wdXQuU2VyaWFsaXplQXNTdHJpbmcoKSwgY29uZm9ybWFuY2U6OlBST1RP
QlVGLAotICAgICAgICAgICAgICAgICAgICBlcXVpdmFsZW50X3RleHRfZm9ybWF0LCBjb25mb3Jt
YW5jZTo6SlNPTik7Ci19Ci0KLS8vIEFjY29yZGluZyB0byBwcm90bzMgSlNPTiBzcGVjaWZpY2F0
aW9uLCBKU09OIHNlcmlhbGl6ZXJzIGZvbGxvdyBtb3JlIHN0cmljdAotLy8gcnVsZXMgdGhhbiBw
YXJzZXJzIChlLmcuLCBhIHNlcmlhbGl6ZXIgbXVzdCBzZXJpYWxpemUgaW50MzIgdmFsdWVzIGFz
IEpTT04KLS8vIG51bWJlcnMgd2hpbGUgdGhlIHBhcnNlciBpcyBhbGxvd2VkIHRvIGFjY2VwdCB0
aGVtIGFzIEpTT04gc3RyaW5ncykuIFRoaXMKLS8vIG1ldGhvZCBhbGxvd3Mgc3RyaWN0IGNoZWNr
aW5nIG9uIGEgcHJvdG8zIEpTT04gc2VyaWFsaXplciBieSBpbnNwZWN0aW5nCi0vLyB0aGUgSlNP
TiBvdXRwdXQgZGlyZWN0bHkuCi12b2lkIENvbmZvcm1hbmNlVGVzdFN1aXRlOjpSdW5WYWxpZEpz
b25UZXN0V2l0aFZhbGlkYXRvcigKLSAgICBjb25zdCBzdHJpbmcmIHRlc3RfbmFtZSwgY29uc3Qg
c3RyaW5nJiBpbnB1dF9qc29uLAotICAgIGNvbnN0IFZhbGlkYXRvciYgdmFsaWRhdG9yKSB7Ci0g
IENvbmZvcm1hbmNlUmVxdWVzdCByZXF1ZXN0OwotICBDb25mb3JtYW5jZVJlc3BvbnNlIHJlc3Bv
bnNlOwotICByZXF1ZXN0LnNldF9qc29uX3BheWxvYWQoaW5wdXRfanNvbik7Ci0gIHJlcXVlc3Qu
c2V0X3JlcXVlc3RlZF9vdXRwdXRfZm9ybWF0KGNvbmZvcm1hbmNlOjpKU09OKTsKLQotICBzdHJp
bmcgZWZmZWN0aXZlX3Rlc3RfbmFtZSA9ICJKc29uSW5wdXQuIiArIHRlc3RfbmFtZSArICIuVmFs
aWRhdG9yIjsKLQotICBSdW5UZXN0KGVmZmVjdGl2ZV90ZXN0X25hbWUsIHJlcXVlc3QsICZyZXNw
b25zZSk7Ci0KLSAgaWYgKHJlc3BvbnNlLnJlc3VsdF9jYXNlKCkgPT0gQ29uZm9ybWFuY2VSZXNw
b25zZTo6a1NraXBwZWQpIHsKLSAgICBSZXBvcnRTa2lwKGVmZmVjdGl2ZV90ZXN0X25hbWUsIHJl
cXVlc3QsIHJlc3BvbnNlKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAocmVzcG9uc2UucmVz
dWx0X2Nhc2UoKSAhPSBDb25mb3JtYW5jZVJlc3BvbnNlOjprSnNvblBheWxvYWQpIHsKLSAgICBS
ZXBvcnRGYWlsdXJlKGVmZmVjdGl2ZV90ZXN0X25hbWUsIHJlcXVlc3QsIHJlc3BvbnNlLAotICAg
ICAgICAgICAgICAgICAgIkV4cGVjdGVkIEpTT04gcGF5bG9hZCBidXQgZ290IHR5cGUgJWQuIiwK
LSAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdF9jYXNlKCkpOwotICAgIHJldHVybjsK
LSAgfQotICBKc29uOjpSZWFkZXIgcmVhZGVyOwotICBKc29uOjpWYWx1ZSB2YWx1ZTsKLSAgaWYg
KCFyZWFkZXIucGFyc2UocmVzcG9uc2UuanNvbl9wYXlsb2FkKCksIHZhbHVlKSkgewotICAgIFJl
cG9ydEZhaWx1cmUoZWZmZWN0aXZlX3Rlc3RfbmFtZSwgcmVxdWVzdCwgcmVzcG9uc2UsCi0gICAg
ICAgICAgICAgICAgICAiSlNPTiBwYXlsb2FkIGNhbm5vdCBiZSBwYXJzZWQgYXMgdmFsaWQgSlNP
TjogJXMiLAotICAgICAgICAgICAgICAgICAgcmVhZGVyLmdldEZvcm1hdHRlZEVycm9yTWVzc2Fn
ZXMoKS5jX3N0cigpKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgaWYgKCF2YWxpZGF0b3IodmFsdWUp
KSB7Ci0gICAgUmVwb3J0RmFpbHVyZShlZmZlY3RpdmVfdGVzdF9uYW1lLCByZXF1ZXN0LCByZXNw
b25zZSwKLSAgICAgICAgICAgICAgICAgICJKU09OIHBheWxvYWQgdmFsaWRhdGlvbiBmYWlsZWQu
Iik7Ci0gICAgcmV0dXJuOwotICB9Ci0gIFJlcG9ydFN1Y2Nlc3MoZWZmZWN0aXZlX3Rlc3RfbmFt
ZSk7Ci19Ci0KLXZvaWQgQ29uZm9ybWFuY2VUZXN0U3VpdGU6OkV4cGVjdFBhcnNlRmFpbHVyZUZv
ckpzb24oCi0gICAgY29uc3Qgc3RyaW5nJiB0ZXN0X25hbWUsIGNvbnN0IHN0cmluZyYgaW5wdXRf
anNvbikgewotICBDb25mb3JtYW5jZVJlcXVlc3QgcmVxdWVzdDsKLSAgQ29uZm9ybWFuY2VSZXNw
b25zZSByZXNwb25zZTsKLSAgcmVxdWVzdC5zZXRfanNvbl9wYXlsb2FkKGlucHV0X2pzb24pOwot
ICBzdHJpbmcgZWZmZWN0aXZlX3Rlc3RfbmFtZSA9ICJKc29uSW5wdXQuIiArIHRlc3RfbmFtZTsK
LQotICAvLyBXZSBkb24ndCBleHBlY3Qgb3V0cHV0LCBidXQgaWYgdGhlIHByb2dyYW0gZXJyb25l
b3VzbHkgYWNjZXB0cyB0aGUgcHJvdG9idWYKLSAgLy8gd2UgbGV0IGl0IHNlbmQgaXRzIHJlc3Bv
bnNlIGFzIHRoaXMuICBXZSBtdXN0IG5vdCBsZWF2ZSBpdCB1bnNwZWNpZmllZC4KLSAgcmVxdWVz
dC5zZXRfcmVxdWVzdGVkX291dHB1dF9mb3JtYXQoY29uZm9ybWFuY2U6OkpTT04pOwotCi0gIFJ1
blRlc3QoZWZmZWN0aXZlX3Rlc3RfbmFtZSwgcmVxdWVzdCwgJnJlc3BvbnNlKTsKLSAgaWYgKHJl
c3BvbnNlLnJlc3VsdF9jYXNlKCkgPT0gQ29uZm9ybWFuY2VSZXNwb25zZTo6a1BhcnNlRXJyb3Ip
IHsKLSAgICBSZXBvcnRTdWNjZXNzKGVmZmVjdGl2ZV90ZXN0X25hbWUpOwotICB9IGVsc2UgaWYg
KHJlc3BvbnNlLnJlc3VsdF9jYXNlKCkgPT0gQ29uZm9ybWFuY2VSZXNwb25zZTo6a1NraXBwZWQp
IHsKLSAgICBSZXBvcnRTa2lwKGVmZmVjdGl2ZV90ZXN0X25hbWUsIHJlcXVlc3QsIHJlc3BvbnNl
KTsKLSAgfSBlbHNlIHsKLSAgICBSZXBvcnRGYWlsdXJlKGVmZmVjdGl2ZV90ZXN0X25hbWUsIHJl
cXVlc3QsIHJlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgIlNob3VsZCBoYXZlIGZhaWxlZCB0
byBwYXJzZSwgYnV0IGRpZG4ndC4iKTsKLSAgfQotfQotCi12b2lkIENvbmZvcm1hbmNlVGVzdFN1
aXRlOjpFeHBlY3RTZXJpYWxpemVGYWlsdXJlRm9ySnNvbigKLSAgICBjb25zdCBzdHJpbmcmIHRl
c3RfbmFtZSwgY29uc3Qgc3RyaW5nJiB0ZXh0X2Zvcm1hdCkgewotICBUZXN0QWxsVHlwZXMgcGF5
bG9hZF9tZXNzYWdlOwotICBHT09HTEVfQ0hFQ0soCi0gICAgICBUZXh0Rm9ybWF0OjpQYXJzZUZy
b21TdHJpbmcodGV4dF9mb3JtYXQsICZwYXlsb2FkX21lc3NhZ2UpKQotICAgICAgICAgIDw8ICJG
YWlsZWQgdG8gcGFyc2U6ICIgPDwgdGV4dF9mb3JtYXQ7Ci0KLSAgQ29uZm9ybWFuY2VSZXF1ZXN0
IHJlcXVlc3Q7Ci0gIENvbmZvcm1hbmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0gIHJlcXVlc3Quc2V0
X3Byb3RvYnVmX3BheWxvYWQocGF5bG9hZF9tZXNzYWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwot
ICBzdHJpbmcgZWZmZWN0aXZlX3Rlc3RfbmFtZSA9IHRlc3RfbmFtZSArICIuSnNvbk91dHB1dCI7
Ci0gIHJlcXVlc3Quc2V0X3JlcXVlc3RlZF9vdXRwdXRfZm9ybWF0KGNvbmZvcm1hbmNlOjpKU09O
KTsKLQotICBSdW5UZXN0KGVmZmVjdGl2ZV90ZXN0X25hbWUsIHJlcXVlc3QsICZyZXNwb25zZSk7
Ci0gIGlmIChyZXNwb25zZS5yZXN1bHRfY2FzZSgpID09IENvbmZvcm1hbmNlUmVzcG9uc2U6OmtT
ZXJpYWxpemVFcnJvcikgewotICAgIFJlcG9ydFN1Y2Nlc3MoZWZmZWN0aXZlX3Rlc3RfbmFtZSk7
Ci0gIH0gZWxzZSBpZiAocmVzcG9uc2UucmVzdWx0X2Nhc2UoKSA9PSBDb25mb3JtYW5jZVJlc3Bv
bnNlOjprU2tpcHBlZCkgewotICAgIFJlcG9ydFNraXAoZWZmZWN0aXZlX3Rlc3RfbmFtZSwgcmVx
dWVzdCwgcmVzcG9uc2UpOwotICB9IGVsc2UgewotICAgIFJlcG9ydEZhaWx1cmUoZWZmZWN0aXZl
X3Rlc3RfbmFtZSwgcmVxdWVzdCwgcmVzcG9uc2UsCi0gICAgICAgICAgICAgICAgICAiU2hvdWxk
IGhhdmUgZmFpbGVkIHRvIHNlcmlhbGl6ZSwgYnV0IGRpZG4ndC4iKTsKLSAgfQotfQotCi12b2lk
IENvbmZvcm1hbmNlVGVzdFN1aXRlOjpUZXN0UHJlbWF0dXJlRU9GRm9yVHlwZShGaWVsZERlc2Ny
aXB0b3I6OlR5cGUgdHlwZSkgewotICAvLyBJbmNvbXBsZXRlIHZhbHVlcyBmb3IgZWFjaCB3aXJl
IHR5cGUuCi0gIHN0YXRpYyBjb25zdCBzdHJpbmcgaW5jb21wbGV0ZXNbNl0gPSB7Ci0gICAgc3Ry
aW5nKCJceDgwIiksICAgICAvLyBWQVJJTlQKLSAgICBzdHJpbmcoImFiY2RlZmciKSwgIC8vIDY0
QklUCi0gICAgc3RyaW5nKCJceDgwIiksICAgICAvLyBERUxJTUlURUQgKHBhcnRpYWwgbGVuZ3Ro
KQotICAgIHN0cmluZygpLCAgICAgICAgICAgLy8gU1RBUlRfR1JPVVAgKG5vIHZhbHVlIHJlcXVp
cmVkKQotICAgIHN0cmluZygpLCAgICAgICAgICAgLy8gRU5EX0dST1VQIChubyB2YWx1ZSByZXF1
aXJlZCkKLSAgICBzdHJpbmcoImFiYyIpICAgICAgIC8vIDMyQklUCi0gIH07Ci0KLSAgdWludDMy
X3QgZmllbGRudW0gPSBHZXRGaWVsZE51bWJlckZvclR5cGUodHlwZSwgZmFsc2UpOwotICB1aW50
MzJfdCByZXBfZmllbGRudW0gPSBHZXRGaWVsZE51bWJlckZvclR5cGUodHlwZSwgdHJ1ZSk7Ci0g
IFdpcmVGb3JtYXRMaXRlOjpXaXJlVHlwZSB3aXJlX3R5cGUgPSBXaXJlRm9ybWF0TGl0ZTo6V2ly
ZVR5cGVGb3JGaWVsZFR5cGUoCi0gICAgICBzdGF0aWNfY2FzdDxXaXJlRm9ybWF0TGl0ZTo6Rmll
bGRUeXBlPih0eXBlKSk7Ci0gIGNvbnN0IHN0cmluZyYgaW5jb21wbGV0ZSA9IGluY29tcGxldGVz
W3dpcmVfdHlwZV07Ci0gIGNvbnN0IHN0cmluZyB0eXBlX25hbWUgPQotICAgICAgVXBwZXJDYXNl
KHN0cmluZygiLiIpICsgRmllbGREZXNjcmlwdG9yOjpUeXBlTmFtZSh0eXBlKSk7Ci0KLSAgRXhw
ZWN0UGFyc2VGYWlsdXJlRm9yUHJvdG8oCi0gICAgICB0YWcoZmllbGRudW0sIHdpcmVfdHlwZSks
Ci0gICAgICAiUHJlbWF0dXJlRW9mQmVmb3JlS25vd25Ob25SZXBlYXRlZFZhbHVlIiArIHR5cGVf
bmFtZSk7Ci0KLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9yUHJvdG8oCi0gICAgICB0YWcocmVwX2Zp
ZWxkbnVtLCB3aXJlX3R5cGUpLAotICAgICAgIlByZW1hdHVyZUVvZkJlZm9yZUtub3duUmVwZWF0
ZWRWYWx1ZSIgKyB0eXBlX25hbWUpOwotCi0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvclByb3RvKAot
ICAgICAgdGFnKFVOS05PV05fRklFTEQsIHdpcmVfdHlwZSksCi0gICAgICAiUHJlbWF0dXJlRW9m
QmVmb3JlVW5rbm93blZhbHVlIiArIHR5cGVfbmFtZSk7Ci0KLSAgRXhwZWN0UGFyc2VGYWlsdXJl
Rm9yUHJvdG8oCi0gICAgICBjYXQoIHRhZyhmaWVsZG51bSwgd2lyZV90eXBlKSwgaW5jb21wbGV0
ZSApLAotICAgICAgIlByZW1hdHVyZUVvZkluc2lkZUtub3duTm9uUmVwZWF0ZWRWYWx1ZSIgKyB0
eXBlX25hbWUpOwotCi0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvclByb3RvKAotICAgICAgY2F0KCB0
YWcocmVwX2ZpZWxkbnVtLCB3aXJlX3R5cGUpLCBpbmNvbXBsZXRlICksCi0gICAgICAiUHJlbWF0
dXJlRW9mSW5zaWRlS25vd25SZXBlYXRlZFZhbHVlIiArIHR5cGVfbmFtZSk7Ci0KLSAgRXhwZWN0
UGFyc2VGYWlsdXJlRm9yUHJvdG8oCi0gICAgICBjYXQoIHRhZyhVTktOT1dOX0ZJRUxELCB3aXJl
X3R5cGUpLCBpbmNvbXBsZXRlICksCi0gICAgICAiUHJlbWF0dXJlRW9mSW5zaWRlVW5rbm93blZh
bHVlIiArIHR5cGVfbmFtZSk7Ci0KLSAgaWYgKHdpcmVfdHlwZSA9PSBXaXJlRm9ybWF0TGl0ZTo6
V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCkgewotICAgIEV4cGVjdFBhcnNlRmFpbHVyZUZvclBy
b3RvKAotICAgICAgICBjYXQoIHRhZyhmaWVsZG51bSwgd2lyZV90eXBlKSwgdmFyaW50KDEpICks
Ci0gICAgICAgICJQcmVtYXR1cmVFb2ZJbkRlbGltaXRlZERhdGFGb3JLbm93bk5vblJlcGVhdGVk
VmFsdWUiICsgdHlwZV9uYW1lKTsKLQotICAgIEV4cGVjdFBhcnNlRmFpbHVyZUZvclByb3RvKAot
ICAgICAgICBjYXQoIHRhZyhyZXBfZmllbGRudW0sIHdpcmVfdHlwZSksIHZhcmludCgxKSApLAot
ICAgICAgICAiUHJlbWF0dXJlRW9mSW5EZWxpbWl0ZWREYXRhRm9yS25vd25SZXBlYXRlZFZhbHVl
IiArIHR5cGVfbmFtZSk7Ci0KLSAgICAvLyBFT0YgaW4gdGhlIG1pZGRsZSBvZiBkZWxpbWl0ZWQg
ZGF0YSBmb3IgdW5rbm93biB2YWx1ZS4KLSAgICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JQcm90bygK
LSAgICAgICAgY2F0KCB0YWcoVU5LTk9XTl9GSUVMRCwgd2lyZV90eXBlKSwgdmFyaW50KDEpICks
Ci0gICAgICAgICJQcmVtYXR1cmVFb2ZJbkRlbGltaXRlZERhdGFGb3JVbmtub3duVmFsdWUiICsg
dHlwZV9uYW1lKTsKLQotICAgIGlmICh0eXBlID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNT
QUdFKSB7Ci0gICAgICAvLyBTdWJtZXNzYWdlIGVuZHMgaW4gdGhlIG1pZGRsZSBvZiBhIHZhbHVl
LgotICAgICAgc3RyaW5nIGluY29tcGxldGVfc3VibXNnID0KLSAgICAgICAgICBjYXQoIHRhZyhX
aXJlRm9ybWF0TGl0ZTo6VFlQRV9JTlQzMiwgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX1ZBUklO
VCksCi0gICAgICAgICAgICAgICAgaW5jb21wbGV0ZXNbV2lyZUZvcm1hdExpdGU6OldJUkVUWVBF
X1ZBUklOVF0gKTsKLSAgICAgIEV4cGVjdEhhcmRQYXJzZUZhaWx1cmVGb3JQcm90bygKLSAgICAg
ICAgICBjYXQoIHRhZyhmaWVsZG51bSwgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0xFTkdUSF9E
RUxJTUlURUQpLAotICAgICAgICAgICAgICAgdmFyaW50KGluY29tcGxldGVfc3VibXNnLnNpemUo
KSksCi0gICAgICAgICAgICAgICBpbmNvbXBsZXRlX3N1Ym1zZyApLAotICAgICAgICAgICJQcmVt
YXR1cmVFb2ZJblN1Ym1lc3NhZ2VWYWx1ZSIgKyB0eXBlX25hbWUpOwotICAgIH0KLSAgfSBlbHNl
IGlmICh0eXBlICE9IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCkgewotICAgIC8vIE5vbi1k
ZWxpbWl0ZWQsIG5vbi1ncm91cDogZWxpZ2libGUgZm9yIHBhY2tpbmcuCi0KLSAgICAvLyBQYWNr
ZWQgcmVnaW9uIGVuZHMgaW4gdGhlIG1pZGRsZSBvZiBhIHZhbHVlLgotICAgIEV4cGVjdEhhcmRQ
YXJzZUZhaWx1cmVGb3JQcm90bygKLSAgICAgICAgY2F0KCB0YWcocmVwX2ZpZWxkbnVtLCBXaXJl
Rm9ybWF0TGl0ZTo6V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCksCi0gICAgICAgICAgICAgdmFy
aW50KGluY29tcGxldGUuc2l6ZSgpKSwKLSAgICAgICAgICAgICBpbmNvbXBsZXRlICksCi0gICAg
ICAgICJQcmVtYXR1cmVFb2ZJblBhY2tlZEZpZWxkVmFsdWUiICsgdHlwZV9uYW1lKTsKLQotICAg
IC8vIEVPRiBpbiB0aGUgbWlkZGxlIG9mIHBhY2tlZCByZWdpb24uCi0gICAgRXhwZWN0UGFyc2VG
YWlsdXJlRm9yUHJvdG8oCi0gICAgICAgIGNhdCggdGFnKHJlcF9maWVsZG51bSwgV2lyZUZvcm1h
dExpdGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpLAotICAgICAgICAgICAgIHZhcmludCgx
KSApLAotICAgICAgICAiUHJlbWF0dXJlRW9mSW5QYWNrZWRGaWVsZCIgKyB0eXBlX25hbWUpOwot
ICB9Ci19Ci0KLXZvaWQgQ29uZm9ybWFuY2VUZXN0U3VpdGU6OlNldEZhaWx1cmVMaXN0KGNvbnN0
IHZlY3RvcjxzdHJpbmc+JiBmYWlsdXJlX2xpc3QpIHsKLSAgZXhwZWN0ZWRfdG9fZmFpbF8uY2xl
YXIoKTsKLSAgc3RkOjpjb3B5KGZhaWx1cmVfbGlzdC5iZWdpbigpLCBmYWlsdXJlX2xpc3QuZW5k
KCksCi0gICAgICAgICAgICBzdGQ6Omluc2VydGVyKGV4cGVjdGVkX3RvX2ZhaWxfLCBleHBlY3Rl
ZF90b19mYWlsXy5lbmQoKSkpOwotfQotCi1ib29sIENvbmZvcm1hbmNlVGVzdFN1aXRlOjpDaGVj
a1NldEVtcHR5KGNvbnN0IHNldDxzdHJpbmc+JiBzZXRfdG9fY2hlY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1zZykgewotICBpZiAoc2V0
X3RvX2NoZWNrLmVtcHR5KCkpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBT
dHJpbmdBcHBlbmRGKCZvdXRwdXRfLCAiXG4iKTsKLSAgICBTdHJpbmdBcHBlbmRGKCZvdXRwdXRf
LCAiJXM6XG4iLCBtc2cpOwotICAgIGZvciAoc2V0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBzZXRfdG9fY2hlY2suYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gc2V0X3RvX2NoZWNr
LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgIFN0cmluZ0FwcGVuZEYoJm91dHB1dF8sICIgICVzXG4i
LCBpdGVyLT5jX3N0cigpKTsKLSAgICB9Ci0gICAgU3RyaW5nQXBwZW5kRigmb3V0cHV0XywgIlxu
Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLWJvb2wgQ29uZm9ybWFuY2VUZXN0U3Vp
dGU6OlJ1blN1aXRlKENvbmZvcm1hbmNlVGVzdFJ1bm5lciogcnVubmVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIG91dHB1dCkgewotICBydW5uZXJf
ID0gcnVubmVyOwotICBzdWNjZXNzZXNfID0gMDsKLSAgZXhwZWN0ZWRfZmFpbHVyZXNfID0gMDsK
LSAgc2tpcHBlZF8uY2xlYXIoKTsKLSAgdGVzdF9uYW1lc18uY2xlYXIoKTsKLSAgdW5leHBlY3Rl
ZF9mYWlsaW5nX3Rlc3RzXy5jbGVhcigpOwotICB1bmV4cGVjdGVkX3N1Y2NlZWRpbmdfdGVzdHNf
LmNsZWFyKCk7Ci0gIHR5cGVfcmVzb2x2ZXJfLnJlc2V0KE5ld1R5cGVSZXNvbHZlckZvckRlc2Ny
aXB0b3JQb29sKAotICAgICAga1R5cGVVcmxQcmVmaXgsIERlc2NyaXB0b3JQb29sOjpnZW5lcmF0
ZWRfcG9vbCgpKSk7Ci0gIHR5cGVfdXJsXyA9IEdldFR5cGVVcmwoVGVzdEFsbFR5cGVzOjpkZXNj
cmlwdG9yKCkpOwotCi0gIG91dHB1dF8gPSAiXG5DT05GT1JNQU5DRSBURVNUIEJFR0lOID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iOwotCi0gIGZvciAoaW50IGkgPSAx
OyBpIDw9IEZpZWxkRGVzY3JpcHRvcjo6TUFYX1RZUEU7IGkrKykgewotICAgIGlmIChpID09IEZp
ZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCkgY29udGludWU7Ci0gICAgVGVzdFByZW1hdHVyZUVP
RkZvclR5cGUoc3RhdGljX2Nhc3Q8RmllbGREZXNjcmlwdG9yOjpUeXBlPihpKSk7Ci0gIH0KLQot
ICBSdW5WYWxpZEpzb25UZXN0KCJIZWxsb1dvcmxkIiwgIntcIm9wdGlvbmFsU3RyaW5nXCI6XCJI
ZWxsbywgV29ybGQhXCJ9IiwKLSAgICAgICAgICAgICAgICAgICAib3B0aW9uYWxfc3RyaW5nOiAn
SGVsbG8sIFdvcmxkISciKTsKLQotICAvLyBUZXN0IGZpZWxkIG5hbWUgY29udmVudGlvbnMuCi0g
IFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiRmllbGROYW1lSW5TbmFrZUNhc2UiLAotICAgICAg
UiIoewotICAgICAgICAiZmllbGRuYW1lMSI6IDEsCi0gICAgICAgICJmaWVsZE5hbWUyIjogMiwK
LSAgICAgICAgIkZpZWxkTmFtZTMiOiAzCi0gICAgICB9KSIsCi0gICAgICBSIigKLSAgICAgICAg
ZmllbGRuYW1lMTogMQotICAgICAgICBmaWVsZF9uYW1lMjogMgotICAgICAgICBfZmllbGRfbmFt
ZTM6IDMKLSAgICAgICkiKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJGaWVsZE5hbWVX
aXRoTnVtYmVycyIsCi0gICAgICBSIih7Ci0gICAgICAgICJmaWVsZDBuYW1lNSI6IDUsCi0gICAg
ICAgICJmaWVsZDBOYW1lNiI6IDYKLSAgICAgIH0pIiwKLSAgICAgIFIiKAotICAgICAgICBmaWVs
ZDBuYW1lNTogNQotICAgICAgICBmaWVsZF8wX25hbWU2OiA2Ci0gICAgICApIik7Ci0gIFJ1blZh
bGlkSnNvblRlc3QoCi0gICAgICAiRmllbGROYW1lV2l0aE1peGVkQ2FzZXMiLAotICAgICAgUiIo
ewotICAgICAgICAiZmllbGROYW1lNyI6IDcsCi0gICAgICAgICJmaWVsZE5hbWU4IjogOCwKLSAg
ICAgICAgImZpZWxkTmFtZTkiOiA5LAotICAgICAgICAiZmllbGROYW1lMTAiOiAxMCwKLSAgICAg
ICAgImZJRUxETkFNRTExIjogMTEsCi0gICAgICAgICJmSUVMRE5hbWUxMiI6IDEyCi0gICAgICB9
KSIsCi0gICAgICBSIigKLSAgICAgICAgZmllbGROYW1lNzogNwotICAgICAgICBGaWVsZE5hbWU4
OiA4Ci0gICAgICAgIGZpZWxkX05hbWU5OiA5Ci0gICAgICAgIEZpZWxkX05hbWUxMDogMTAKLSAg
ICAgICAgRklFTERfTkFNRTExOiAxMQotICAgICAgICBGSUVMRF9uYW1lMTI6IDEyCi0gICAgICAp
Iik7Ci0gIC8vIFVzaW5nIHRoZSBvcmlnaW5hbCBwcm90byBmaWVsZCBuYW1lIGluIEpTT04gaXMg
YWxzbyBhbGxvd2VkLgotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIk9yaWdpbmFsUHJvdG9G
aWVsZE5hbWUiLAotICAgICAgUiIoewotICAgICAgICAiZmllbGRuYW1lMSI6IDEsCi0gICAgICAg
ICJmaWVsZF9uYW1lMiI6IDIsCi0gICAgICAgICJfZmllbGRfbmFtZTMiOiAzLAotICAgICAgICAi
ZmllbGQwbmFtZTUiOiA1LAotICAgICAgICAiZmllbGRfMF9uYW1lNiI6IDYsCi0gICAgICAgICJm
aWVsZE5hbWU3IjogNywKLSAgICAgICAgIkZpZWxkTmFtZTgiOiA4LAotICAgICAgICAiZmllbGRf
TmFtZTkiOiA5LAotICAgICAgICAiRmllbGRfTmFtZTEwIjogMTAsCi0gICAgICAgICJGSUVMRF9O
QU1FMTEiOiAxMSwKLSAgICAgICAgIkZJRUxEX25hbWUxMiI6IDEyCi0gICAgICB9KSIsCi0gICAg
ICBSIigKLSAgICAgICAgZmllbGRuYW1lMTogMQotICAgICAgICBmaWVsZF9uYW1lMjogMgotICAg
ICAgICBfZmllbGRfbmFtZTM6IDMKLSAgICAgICAgZmllbGQwbmFtZTU6IDUKLSAgICAgICAgZmll
bGRfMF9uYW1lNjogNgotICAgICAgICBmaWVsZE5hbWU3OiA3Ci0gICAgICAgIEZpZWxkTmFtZTg6
IDgKLSAgICAgICAgZmllbGRfTmFtZTk6IDkKLSAgICAgICAgRmllbGRfTmFtZTEwOiAxMAotICAg
ICAgICBGSUVMRF9OQU1FMTE6IDExCi0gICAgICAgIEZJRUxEX25hbWUxMjogMTIKLSAgICAgICki
KTsKLSAgLy8gRmllbGQgbmFtZXMgY2FuIGJlIGVzY2FwZWQuCi0gIFJ1blZhbGlkSnNvblRlc3Qo
Ci0gICAgICAiRmllbGROYW1lRXNjYXBlZCIsCi0gICAgICBSIih7ImZpZWxkblx1MDA2MW1lMSI6
IDF9KSIsCi0gICAgICAiZmllbGRuYW1lMTogMSIpOwotICAvLyBGaWVsZCBuYW1lcyBtdXN0IGJl
IHF1b3RlZCAob3IgaXQncyBub3QgdmFsaWQgSlNPTikuCi0gIEV4cGVjdFBhcnNlRmFpbHVyZUZv
ckpzb24oCi0gICAgICAiRmllbGROYW1lTm90UXVvdGVkIiwKLSAgICAgICJ7ZmllbGRuYW1lMTog
MX0iKTsKLSAgLy8gVHJhaWxpbmcgY29tbWEgaXMgbm90IGFsbG93ZWQgKG5vdCB2YWxpZCBKU09O
KS4KLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJUcmFpbGluZ0NvbW1hSW5B
bk9iamVjdCIsCi0gICAgICBSIih7ImZpZWxkbmFtZTEiOjEsfSkiKTsKLSAgLy8gSlNPTiBkb2Vz
bid0IHN1cHBvcnQgY29tbWVudHMuCi0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAg
ICAiSnNvbldpdGhDb21tZW50cyIsCi0gICAgICBSIih7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBj
b21tZW50LgotICAgICAgICAiZmllbGRuYW1lMSI6IDEKLSAgICAgIH0pIik7Ci0gIC8vIER1cGxp
Y2F0ZWQgZmllbGQgbmFtZXMgYXJlIG5vdCBhbGxvd2VkLgotICBFeHBlY3RQYXJzZUZhaWx1cmVG
b3JKc29uKAotICAgICAgIkZpZWxkTmFtZUR1cGxpY2F0ZSIsCi0gICAgICBSIih7Ci0gICAgICAg
ICJvcHRpb25hbE5lc3RlZE1lc3NhZ2UiOiB7YTogMX0sCi0gICAgICAgICJvcHRpb25hbE5lc3Rl
ZE1lc3NhZ2UiOiB7fQotICAgICAgfSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigK
LSAgICAgICJGaWVsZE5hbWVEdXBsaWNhdGVEaWZmZXJlbnRDYXNpbmcxIiwKLSAgICAgIFIiKHsK
LSAgICAgICAgIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIjoge2E6IDF9LAotICAgICAgICAib3B0
aW9uYWxOZXN0ZWRNZXNzYWdlIjoge30KLSAgICAgIH0pIik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVy
ZUZvckpzb24oCi0gICAgICAiRmllbGROYW1lRHVwbGljYXRlRGlmZmVyZW50Q2FzaW5nMiIsCi0g
ICAgICBSIih7Ci0gICAgICAgICJvcHRpb25hbE5lc3RlZE1lc3NhZ2UiOiB7YTogMX0sCi0gICAg
ICAgICJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSI6IHt9Ci0gICAgICB9KSIpOwotICAvLyBTZXJp
YWxpemVycyBzaG91bGQgdXNlIGxvd2VyQ2FtZWxDYXNlIGJ5IGRlZmF1bHQuCi0gIFJ1blZhbGlk
SnNvblRlc3RXaXRoVmFsaWRhdG9yKAotICAgICAgIkZpZWxkTmFtZUluTG93ZXJDYW1lbENhc2Ui
LAotICAgICAgUiIoewotICAgICAgICAiZmllbGRuYW1lMSI6IDEsCi0gICAgICAgICJmaWVsZE5h
bWUyIjogMiwKLSAgICAgICAgIkZpZWxkTmFtZTMiOiAzCi0gICAgICB9KSIsCi0gICAgICBbXShj
b25zdCBKc29uOjpWYWx1ZSYgdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzTWVtYmVy
KCJmaWVsZG5hbWUxIikgJiYKLSAgICAgICAgICAgIHZhbHVlLmlzTWVtYmVyKCJmaWVsZE5hbWUy
IikgJiYKLSAgICAgICAgICAgIHZhbHVlLmlzTWVtYmVyKCJGaWVsZE5hbWUzIik7Ci0gICAgICB9
KTsKLSAgUnVuVmFsaWRKc29uVGVzdFdpdGhWYWxpZGF0b3IoCi0gICAgICAiRmllbGROYW1lV2l0
aE51bWJlcnMiLAotICAgICAgUiIoewotICAgICAgICAiZmllbGQwbmFtZTUiOiA1LAotICAgICAg
ICAiZmllbGQwTmFtZTYiOiA2Ci0gICAgICB9KSIsCi0gICAgICBbXShjb25zdCBKc29uOjpWYWx1
ZSYgdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzTWVtYmVyKCJmaWVsZDBuYW1lNSIp
ICYmCi0gICAgICAgICAgICB2YWx1ZS5pc01lbWJlcigiZmllbGQwTmFtZTYiKTsKLSAgICAgIH0p
OwotICBSdW5WYWxpZEpzb25UZXN0V2l0aFZhbGlkYXRvcigKLSAgICAgICJGaWVsZE5hbWVXaXRo
TWl4ZWRDYXNlcyIsCi0gICAgICBSIih7Ci0gICAgICAgICJmaWVsZE5hbWU3IjogNywKLSAgICAg
ICAgImZpZWxkTmFtZTgiOiA4LAotICAgICAgICAiZmllbGROYW1lOSI6IDksCi0gICAgICAgICJm
aWVsZE5hbWUxMCI6IDEwLAotICAgICAgICAiZklFTEROQU1FMTEiOiAxMSwKLSAgICAgICAgImZJ
RUxETmFtZTEyIjogMTIKLSAgICAgIH0pIiwKLSAgICAgIFtdKGNvbnN0IEpzb246OlZhbHVlJiB2
YWx1ZSkgewotICAgICAgICByZXR1cm4gdmFsdWUuaXNNZW1iZXIoImZpZWxkTmFtZTciKSAmJgot
ICAgICAgICAgICAgdmFsdWUuaXNNZW1iZXIoImZpZWxkTmFtZTgiKSAmJgotICAgICAgICAgICAg
dmFsdWUuaXNNZW1iZXIoImZpZWxkTmFtZTkiKSAmJgotICAgICAgICAgICAgdmFsdWUuaXNNZW1i
ZXIoImZpZWxkTmFtZTEwIikgJiYKLSAgICAgICAgICAgIHZhbHVlLmlzTWVtYmVyKCJmSUVMRE5B
TUUxMSIpICYmCi0gICAgICAgICAgICB2YWx1ZS5pc01lbWJlcigiZklFTEROYW1lMTIiKTsKLSAg
ICAgIH0pOwotCi0gIC8vIEludGVnZXIgZmllbGRzLgotICBSdW5WYWxpZEpzb25UZXN0KAotICAg
ICAgIkludDMyRmllbGRNYXhWYWx1ZSIsCi0gICAgICBSIih7Im9wdGlvbmFsSW50MzIiOiAyMTQ3
NDgzNjQ3fSkiLAotICAgICAgIm9wdGlvbmFsX2ludDMyOiAyMTQ3NDgzNjQ3Iik7Ci0gIFJ1blZh
bGlkSnNvblRlc3QoCi0gICAgICAiSW50MzJGaWVsZE1pblZhbHVlIiwKLSAgICAgIFIiKHsib3B0
aW9uYWxJbnQzMiI6IC0yMTQ3NDgzNjQ4fSkiLAotICAgICAgIm9wdGlvbmFsX2ludDMyOiAtMjE0
NzQ4MzY0OCIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIlVpbnQzMkZpZWxkTWF4VmFs
dWUiLAotICAgICAgUiIoeyJvcHRpb25hbFVpbnQzMiI6IDQyOTQ5NjcyOTV9KSIsCi0gICAgICAi
b3B0aW9uYWxfdWludDMyOiA0Mjk0OTY3Mjk1Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAg
ICAiSW50NjRGaWVsZE1heFZhbHVlIiwKLSAgICAgIFIiKHsib3B0aW9uYWxJbnQ2NCI6ICI5MjIz
MzcyMDM2ODU0Nzc1ODA3In0pIiwKLSAgICAgICJvcHRpb25hbF9pbnQ2NDogOTIyMzM3MjAzNjg1
NDc3NTgwNyIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIkludDY0RmllbGRNaW5WYWx1
ZSIsCi0gICAgICBSIih7Im9wdGlvbmFsSW50NjQiOiAiLTkyMjMzNzIwMzY4NTQ3NzU4MDgifSki
LAotICAgICAgIm9wdGlvbmFsX2ludDY0OiAtOTIyMzM3MjAzNjg1NDc3NTgwOCIpOwotICBSdW5W
YWxpZEpzb25UZXN0KAotICAgICAgIlVpbnQ2NEZpZWxkTWF4VmFsdWUiLAotICAgICAgUiIoeyJv
cHRpb25hbFVpbnQ2NCI6ICIxODQ0Njc0NDA3MzcwOTU1MTYxNSJ9KSIsCi0gICAgICAib3B0aW9u
YWxfdWludDY0OiAxODQ0Njc0NDA3MzcwOTU1MTYxNSIpOwotICBSdW5WYWxpZEpzb25UZXN0KAot
ICAgICAgIkludDY0RmllbGRNYXhWYWx1ZU5vdFF1b3RlZCIsCi0gICAgICBSIih7Im9wdGlvbmFs
SW50NjQiOiA5MjIzMzcyMDM2ODU0Nzc1ODA3fSkiLAotICAgICAgIm9wdGlvbmFsX2ludDY0OiA5
MjIzMzcyMDM2ODU0Nzc1ODA3Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiSW50NjRG
aWVsZE1pblZhbHVlTm90UXVvdGVkIiwKLSAgICAgIFIiKHsib3B0aW9uYWxJbnQ2NCI6IC05MjIz
MzcyMDM2ODU0Nzc1ODA4fSkiLAotICAgICAgIm9wdGlvbmFsX2ludDY0OiAtOTIyMzM3MjAzNjg1
NDc3NTgwOCIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIlVpbnQ2NEZpZWxkTWF4VmFs
dWVOb3RRdW90ZWQiLAotICAgICAgUiIoeyJvcHRpb25hbFVpbnQ2NCI6IDE4NDQ2NzQ0MDczNzA5
NTUxNjE1fSkiLAotICAgICAgIm9wdGlvbmFsX3VpbnQ2NDogMTg0NDY3NDQwNzM3MDk1NTE2MTUi
KTsKLSAgLy8gVmFsdWVzIGNhbiBiZSByZXByZXNlbnRlZCBhcyBKU09OIHN0cmluZ3MuCi0gIFJ1
blZhbGlkSnNvblRlc3QoCi0gICAgICAiSW50MzJGaWVsZFN0cmluZ1ZhbHVlIiwKLSAgICAgIFIi
KHsib3B0aW9uYWxJbnQzMiI6ICIyMTQ3NDgzNjQ3In0pIiwKLSAgICAgICJvcHRpb25hbF9pbnQz
MjogMjE0NzQ4MzY0NyIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIkludDMyRmllbGRT
dHJpbmdWYWx1ZUVzY2FwZWQiLAotICAgICAgUiIoeyJvcHRpb25hbEludDMyIjogIjJcdTAwMzE0
NzQ4MzY0NyJ9KSIsCi0gICAgICAib3B0aW9uYWxfaW50MzI6IDIxNDc0ODM2NDciKTsKLQotICAv
LyBQYXJzZXJzIHJlamVjdCBvdXQtb2YtYm91bmQgaW50ZWdlciB2YWx1ZXMuCi0gIEV4cGVjdFBh
cnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiSW50MzJGaWVsZFRvb0xhcmdlIiwKLSAgICAgIFIi
KHsib3B0aW9uYWxJbnQzMiI6IDIxNDc0ODM2NDh9KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVG
b3JKc29uKAotICAgICAgIkludDMyRmllbGRUb29TbWFsbCIsCi0gICAgICBSIih7Im9wdGlvbmFs
SW50MzIiOiAtMjE0NzQ4MzY0OX0pIik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0g
ICAgICAiVWludDMyRmllbGRUb29MYXJnZSIsCi0gICAgICBSIih7Im9wdGlvbmFsVWludDMyIjog
NDI5NDk2NzI5Nn0pIik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiSW50
NjRGaWVsZFRvb0xhcmdlIiwKLSAgICAgIFIiKHsib3B0aW9uYWxJbnQ2NCI6ICI5MjIzMzcyMDM2
ODU0Nzc1ODA4In0pIik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiSW50
NjRGaWVsZFRvb1NtYWxsIiwKLSAgICAgIFIiKHsib3B0aW9uYWxJbnQ2NCI6ICItOTIyMzM3MjAz
Njg1NDc3NTgwOSJ9KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIlVp
bnQ2NEZpZWxkVG9vTGFyZ2UiLAotICAgICAgUiIoeyJvcHRpb25hbFVpbnQ2NCI6ICIxODQ0Njc0
NDA3MzcwOTU1MTYxNiJ9KSIpOwotICAvLyBQYXJzZXIgcmVqZWN0IG5vbi1pbnRlZ2VyIG51bWVy
aWMgdmFsdWVzIGFzIHdlbGwuCi0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAi
SW50MzJGaWVsZE5vdEludGVnZXIiLAotICAgICAgUiIoeyJvcHRpb25hbEludDMyIjogMC41fSki
KTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJVaW50MzJGaWVsZE5vdElu
dGVnZXIiLAotICAgICAgUiIoeyJvcHRpb25hbFVpbnQzMiI6IDAuNX0pIik7Ci0gIEV4cGVjdFBh
cnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiSW50NjRGaWVsZE5vdEludGVnZXIiLAotICAgICAg
UiIoeyJvcHRpb25hbEludDY0IjogIjAuNSJ9KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JK
c29uKAotICAgICAgIlVpbnQ2NEZpZWxkTm90SW50ZWdlciIsCi0gICAgICBSIih7Im9wdGlvbmFs
VWludDY0IjogIjAuNSJ9KSIpOwotCi0gIC8vIEludGVnZXJzIGJ1dCByZXByZXNlbnRlZCBhcyBm
bG9hdCB2YWx1ZXMgYXJlIGFjY2VwdGVkLgotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIklu
dDMyRmllbGRGbG9hdFRyYWlsaW5nWmVybyIsCi0gICAgICBSIih7Im9wdGlvbmFsSW50MzIiOiAx
MDAwMDAuMDAwfSkiLAotICAgICAgIm9wdGlvbmFsX2ludDMyOiAxMDAwMDAiKTsKLSAgUnVuVmFs
aWRKc29uVGVzdCgKLSAgICAgICJJbnQzMkZpZWxkRXhwb25lbnRpYWxGb3JtYXQiLAotICAgICAg
UiIoeyJvcHRpb25hbEludDMyIjogMWU1fSkiLAotICAgICAgIm9wdGlvbmFsX2ludDMyOiAxMDAw
MDAiKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJJbnQzMkZpZWxkTWF4RmxvYXRWYWx1
ZSIsCi0gICAgICBSIih7Im9wdGlvbmFsSW50MzIiOiAyLjE0NzQ4MzY0N2U5fSkiLAotICAgICAg
Im9wdGlvbmFsX2ludDMyOiAyMTQ3NDgzNjQ3Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAg
ICAiSW50MzJGaWVsZE1pbkZsb2F0VmFsdWUiLAotICAgICAgUiIoeyJvcHRpb25hbEludDMyIjog
LTIuMTQ3NDgzNjQ4ZTl9KSIsCi0gICAgICAib3B0aW9uYWxfaW50MzI6IC0yMTQ3NDgzNjQ4Iik7
Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiVWludDMyRmllbGRNYXhGbG9hdFZhbHVlIiwK
LSAgICAgIFIiKHsib3B0aW9uYWxVaW50MzIiOiA0LjI5NDk2NzI5NWU5fSkiLAotICAgICAgIm9w
dGlvbmFsX3VpbnQzMjogNDI5NDk2NzI5NSIpOwotCi0gIC8vIFBhcnNlciByZWplY3Qgbm9uLW51
bWVyaWMgdmFsdWVzLgotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkludDMy
RmllbGROb3ROdW1iZXIiLAotICAgICAgUiIoeyJvcHRpb25hbEludDMyIjogIjN4MyJ9KSIpOwot
ICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIlVpbnQzMkZpZWxkTm90TnVtYmVy
IiwKLSAgICAgIFIiKHsib3B0aW9uYWxVaW50MzIiOiAiM3gzIn0pIik7Ci0gIEV4cGVjdFBhcnNl
RmFpbHVyZUZvckpzb24oCi0gICAgICAiSW50NjRGaWVsZE5vdE51bWJlciIsCi0gICAgICBSIih7
Im9wdGlvbmFsSW50NjQiOiAiM3gzIn0pIik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24o
Ci0gICAgICAiVWludDY0RmllbGROb3ROdW1iZXIiLAotICAgICAgUiIoeyJvcHRpb25hbFVpbnQ2
NCI6ICIzeDMifSkiKTsKLSAgLy8gSlNPTiBkb2VzIG5vdCBhbGxvdyAiKyIgb24gbnVtcmljIHZh
bHVlcy4KLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJJbnQzMkZpZWxkUGx1
c1NpZ24iLAotICAgICAgUiIoeyJvcHRpb25hbEludDMyIjogKzF9KSIpOwotICAvLyBKU09OIGRv
ZXNuJ3QgYWxsb3cgbGVhZGluZyAwcy4KLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAg
ICAgICJJbnQzMkZpZWxkTGVhZGluZ1plcm8iLAotICAgICAgUiIoeyJvcHRpb25hbEludDMyIjog
MDF9KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkludDMyRmllbGRO
ZWdhdGl2ZVdpdGhMZWFkaW5nWmVybyIsCi0gICAgICBSIih7Im9wdGlvbmFsSW50MzIiOiAtMDF9
KSIpOwotICAvLyBTdHJpbmcgdmFsdWVzIG11c3QgZm9sbG93IHRoZSBzYW1lIHN5bnRheCBydWxl
LiBTcGVjaWZpY2FsbHkgbGVhZGluZwotICAvLyBvciB0cmFsaW5nIHNwYWNlcyBhcmUgbm90IGFs
bG93ZWQuCi0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiSW50MzJGaWVsZExl
YWRpbmdTcGFjZSIsCi0gICAgICBSIih7Im9wdGlvbmFsSW50MzIiOiAiIDEifSkiKTsKLSAgRXhw
ZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJJbnQzMkZpZWxkVHJhaWxpbmdTcGFjZSIs
Ci0gICAgICBSIih7Im9wdGlvbmFsSW50MzIiOiAiMSAifSkiKTsKLQotICAvLyA2NC1iaXQgdmFs
dWVzIGFyZSBzZXJpYWxpemVkIGFzIHN0cmluZ3MuCi0gIFJ1blZhbGlkSnNvblRlc3RXaXRoVmFs
aWRhdG9yKAotICAgICAgIkludDY0RmllbGRCZVN0cmluZyIsCi0gICAgICBSIih7Im9wdGlvbmFs
SW50NjQiOiAxfSkiLAotICAgICAgW10oY29uc3QgSnNvbjo6VmFsdWUmIHZhbHVlKSB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZVsib3B0aW9uYWxJbnQ2NCJdLnR5cGUoKSA9PSBKc29uOjpzdHJpbmdW
YWx1ZSAmJgotICAgICAgICAgICAgdmFsdWVbIm9wdGlvbmFsSW50NjQiXS5hc1N0cmluZygpID09
ICIxIjsKLSAgICAgIH0pOwotICBSdW5WYWxpZEpzb25UZXN0V2l0aFZhbGlkYXRvcigKLSAgICAg
ICJVaW50NjRGaWVsZEJlU3RyaW5nIiwKLSAgICAgIFIiKHsib3B0aW9uYWxVaW50NjQiOiAxfSki
LAotICAgICAgW10oY29uc3QgSnNvbjo6VmFsdWUmIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZVsib3B0aW9uYWxVaW50NjQiXS50eXBlKCkgPT0gSnNvbjo6c3RyaW5nVmFsdWUgJiYKLSAg
ICAgICAgICAgIHZhbHVlWyJvcHRpb25hbFVpbnQ2NCJdLmFzU3RyaW5nKCkgPT0gIjEiOwotICAg
ICAgfSk7Ci0KLSAgLy8gQm9vbCBmaWVsZHMuCi0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAi
Qm9vbEZpZWxkVHJ1ZSIsCi0gICAgICBSIih7Im9wdGlvbmFsQm9vbCI6dHJ1ZX0pIiwKLSAgICAg
ICJvcHRpb25hbF9ib29sOiB0cnVlIik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiQm9v
bEZpZWxkRmFsc2UiLAotICAgICAgUiIoeyJvcHRpb25hbEJvb2wiOmZhbHNlfSkiLAotICAgICAg
Im9wdGlvbmFsX2Jvb2w6IGZhbHNlIik7Ci0KLSAgLy8gT3RoZXIgZm9ybXMgYXJlIG5vdCBhbGxv
d2VkLgotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkJvb2xGaWVsZEludGVn
ZXJaZXJvIiwKLSAgICAgIFIiKHsib3B0aW9uYWxCb29sIjowfSkiKTsKLSAgRXhwZWN0UGFyc2VG
YWlsdXJlRm9ySnNvbigKLSAgICAgICJCb29sRmllbGRJbnRlZ2VyT25lIiwKLSAgICAgIFIiKHsi
b3B0aW9uYWxCb29sIjoxfSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAg
ICJCb29sRmllbGRDYW1lbENhc2VUcnVlIiwKLSAgICAgIFIiKHsib3B0aW9uYWxCb29sIjpUcnVl
fSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJCb29sRmllbGRDYW1l
bENhc2VGYWxzZSIsCi0gICAgICBSIih7Im9wdGlvbmFsQm9vbCI6RmFsc2V9KSIpOwotICBFeHBl
Y3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkJvb2xGaWVsZEFsbENhcGl0YWxUcnVlIiwK
LSAgICAgIFIiKHsib3B0aW9uYWxCb29sIjpUUlVFfSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJl
Rm9ySnNvbigKLSAgICAgICJCb29sRmllbGRBbGxDYXBpdGFsRmFsc2UiLAotICAgICAgUiIoeyJv
cHRpb25hbEJvb2wiOkZBTFNFfSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAg
ICAgICJCb29sRmllbGREb3VibGVRdW90ZWRUcnVlIiwKLSAgICAgIFIiKHsib3B0aW9uYWxCb29s
IjoidHJ1ZSJ9KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkJvb2xG
aWVsZERvdWJsZVF1b3RlZEZhbHNlIiwKLSAgICAgIFIiKHsib3B0aW9uYWxCb29sIjoiZmFsc2Ui
fSkiKTsKLQotICAvLyBGbG9hdCBmaWVsZHMuCi0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAi
RmxvYXRGaWVsZE1pblBvc2l0aXZlVmFsdWUiLAotICAgICAgUiIoeyJvcHRpb25hbEZsb2F0Ijog
MS4xNzU0OTRlLTM4fSkiLAotICAgICAgIm9wdGlvbmFsX2Zsb2F0OiAxLjE3NTQ5NGUtMzgiKTsK
LSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJGbG9hdEZpZWxkTWF4TmVnYXRpdmVWYWx1ZSIs
Ci0gICAgICBSIih7Im9wdGlvbmFsRmxvYXQiOiAtMS4xNzU0OTRlLTM4fSkiLAotICAgICAgIm9w
dGlvbmFsX2Zsb2F0OiAtMS4xNzU0OTRlLTM4Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAg
ICAiRmxvYXRGaWVsZE1heFBvc2l0aXZlVmFsdWUiLAotICAgICAgUiIoeyJvcHRpb25hbEZsb2F0
IjogMy40MDI4MjNlKzM4fSkiLAotICAgICAgIm9wdGlvbmFsX2Zsb2F0OiAzLjQwMjgyM2UrMzgi
KTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJGbG9hdEZpZWxkTWluTmVnYXRpdmVWYWx1
ZSIsCi0gICAgICBSIih7Im9wdGlvbmFsRmxvYXQiOiAzLjQwMjgyM2UrMzh9KSIsCi0gICAgICAi
b3B0aW9uYWxfZmxvYXQ6IDMuNDAyODIzZSszOCIpOwotICAvLyBWYWx1ZXMgY2FuIGJlIHF1b3Rl
ZC4KLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJGbG9hdEZpZWxkUXVvdGVkVmFsdWUiLAot
ICAgICAgUiIoeyJvcHRpb25hbEZsb2F0IjogIjEifSkiLAotICAgICAgIm9wdGlvbmFsX2Zsb2F0
OiAxIik7Ci0gIC8vIFNwZWNpYWwgdmFsdWVzLgotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAg
IkZsb2F0RmllbGROYW4iLAotICAgICAgUiIoeyJvcHRpb25hbEZsb2F0IjogIk5hTiJ9KSIsCi0g
ICAgICAib3B0aW9uYWxfZmxvYXQ6IG5hbiIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAg
IkZsb2F0RmllbGRJbmZpbml0eSIsCi0gICAgICBSIih7Im9wdGlvbmFsRmxvYXQiOiAiSW5maW5p
dHkifSkiLAotICAgICAgIm9wdGlvbmFsX2Zsb2F0OiBpbmYiKTsKLSAgUnVuVmFsaWRKc29uVGVz
dCgKLSAgICAgICJGbG9hdEZpZWxkTmVnYXRpdmVJbmZpbml0eSIsCi0gICAgICBSIih7Im9wdGlv
bmFsRmxvYXQiOiAiLUluZmluaXR5In0pIiwKLSAgICAgICJvcHRpb25hbF9mbG9hdDogLWluZiIp
OwotICAvLyBOb24tY2Fubm9uaWNhbCBOYW4gd2lsbCBiZSBjb3JyZWN0bHkgbm9ybWFsaXplZC4K
LSAgewotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlOwotICAgIC8vIElFRUUgZmxvYXRpbmctcG9p
bnQgc3RhbmRhcmQgMzItYml0IHF1aWV0IE5hTjoKLSAgICAvLyAgIDAxMTEgMTExMSAxeHh4IHh4
eHggeHh4eCB4eHh4IHh4eHggeHh4eAotICAgIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX2Zsb2F0KAot
ICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RGVjb2RlRmxvYXQoMHg3RkExMjM0NSkpOwotICAgIFJ1
blZhbGlkSnNvblRlc3RXaXRoUHJvdG9idWZJbnB1dCgKLSAgICAgICAgIkZsb2F0RmllbGROb3Jt
YWxpemVRdWlldE5hbiIsIG1lc3NhZ2UsCi0gICAgICAgICJvcHRpb25hbF9mbG9hdDogbmFuIik7
Ci0gICAgLy8gSUVFRSBmbG9hdGluZy1wb2ludCBzdGFuZGFyZCA2NC1iaXQgc2lnbmFsaW5nIE5h
TjoKLSAgICAvLyAgIDExMTEgMTExMSAxeHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAotICAg
IG1lc3NhZ2Uuc2V0X29wdGlvbmFsX2Zsb2F0KAotICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RGVj
b2RlRmxvYXQoMHhGRkI1NDMyMSkpOwotICAgIFJ1blZhbGlkSnNvblRlc3RXaXRoUHJvdG9idWZJ
bnB1dCgKLSAgICAgICAgIkZsb2F0RmllbGROb3JtYWxpemVTaWduYWxpbmdOYW4iLCBtZXNzYWdl
LAotICAgICAgICAib3B0aW9uYWxfZmxvYXQ6IG5hbiIpOwotICB9Ci0KLSAgLy8gU3BlY2lhbCB2
YWx1ZXMgbXVzdCBiZSBxdW90ZWQuCi0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAg
ICAiRmxvYXRGaWVsZE5hbk5vdFF1b3RlZCIsCi0gICAgICBSIih7Im9wdGlvbmFsRmxvYXQiOiBO
YU59KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkZsb2F0RmllbGRJ
bmZpbml0eU5vdFF1b3RlZCIsCi0gICAgICBSIih7Im9wdGlvbmFsRmxvYXQiOiBJbmZpbml0eX0p
Iik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiRmxvYXRGaWVsZE5lZ2F0
aXZlSW5maW5pdHlOb3RRdW90ZWQiLAotICAgICAgUiIoeyJvcHRpb25hbEZsb2F0IjogLUluZmlu
aXR5fSkiKTsKLSAgLy8gUGFyc2VycyBzaG91bGQgcmVqZWN0IG91dC1vZi1ib3VuZCB2YWx1ZXMu
Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiRmxvYXRGaWVsZFRvb1NtYWxs
IiwKLSAgICAgIFIiKHsib3B0aW9uYWxGbG9hdCI6IC0zLjUwMjgyM2UrMzh9KSIpOwotICBFeHBl
Y3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkZsb2F0RmllbGRUb29MYXJnZSIsCi0gICAg
ICBSIih7Im9wdGlvbmFsRmxvYXQiOiAzLjUwMjgyM2UrMzh9KSIpOwotCi0gIC8vIERvdWJsZSBm
aWVsZHMuCi0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiRG91YmxlRmllbGRNaW5Qb3NpdGl2
ZVZhbHVlIiwKLSAgICAgIFIiKHsib3B0aW9uYWxEb3VibGUiOiAyLjIyNTA3ZS0zMDh9KSIsCi0g
ICAgICAib3B0aW9uYWxfZG91YmxlOiAyLjIyNTA3ZS0zMDgiKTsKLSAgUnVuVmFsaWRKc29uVGVz
dCgKLSAgICAgICJEb3VibGVGaWVsZE1heE5lZ2F0aXZlVmFsdWUiLAotICAgICAgUiIoeyJvcHRp
b25hbERvdWJsZSI6IC0yLjIyNTA3ZS0zMDh9KSIsCi0gICAgICAib3B0aW9uYWxfZG91YmxlOiAt
Mi4yMjUwN2UtMzA4Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiRG91YmxlRmllbGRN
YXhQb3NpdGl2ZVZhbHVlIiwKLSAgICAgIFIiKHsib3B0aW9uYWxEb3VibGUiOiAxLjc5NzY5ZSsz
MDh9KSIsCi0gICAgICAib3B0aW9uYWxfZG91YmxlOiAxLjc5NzY5ZSszMDgiKTsKLSAgUnVuVmFs
aWRKc29uVGVzdCgKLSAgICAgICJEb3VibGVGaWVsZE1pbk5lZ2F0aXZlVmFsdWUiLAotICAgICAg
UiIoeyJvcHRpb25hbERvdWJsZSI6IC0xLjc5NzY5ZSszMDh9KSIsCi0gICAgICAib3B0aW9uYWxf
ZG91YmxlOiAtMS43OTc2OWUrMzA4Iik7Ci0gIC8vIFZhbHVlcyBjYW4gYmUgcXVvdGVkLgotICBS
dW5WYWxpZEpzb25UZXN0KAotICAgICAgIkRvdWJsZUZpZWxkUXVvdGVkVmFsdWUiLAotICAgICAg
UiIoeyJvcHRpb25hbERvdWJsZSI6ICIxIn0pIiwKLSAgICAgICJvcHRpb25hbF9kb3VibGU6IDEi
KTsKLSAgLy8gU3BlaWNhbCB2YWx1ZXMuCi0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiRG91
YmxlRmllbGROYW4iLAotICAgICAgUiIoeyJvcHRpb25hbERvdWJsZSI6ICJOYU4ifSkiLAotICAg
ICAgIm9wdGlvbmFsX2RvdWJsZTogbmFuIik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAi
RG91YmxlRmllbGRJbmZpbml0eSIsCi0gICAgICBSIih7Im9wdGlvbmFsRG91YmxlIjogIkluZmlu
aXR5In0pIiwKLSAgICAgICJvcHRpb25hbF9kb3VibGU6IGluZiIpOwotICBSdW5WYWxpZEpzb25U
ZXN0KAotICAgICAgIkRvdWJsZUZpZWxkTmVnYXRpdmVJbmZpbml0eSIsCi0gICAgICBSIih7Im9w
dGlvbmFsRG91YmxlIjogIi1JbmZpbml0eSJ9KSIsCi0gICAgICAib3B0aW9uYWxfZG91YmxlOiAt
aW5mIik7Ci0gIC8vIE5vbi1jYW5ub25pY2FsIE5hbiB3aWxsIGJlIGNvcnJlY3RseSBub3JtYWxp
emVkLgotICB7Ci0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gICAgbWVzc2FnZS5zZXRfb3B0
aW9uYWxfZG91YmxlKAotICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RGVjb2RlRG91YmxlKDB4N0ZG
QTEyMzQ1Njc4OUFCQ0xMKSk7Ci0gICAgUnVuVmFsaWRKc29uVGVzdFdpdGhQcm90b2J1ZklucHV0
KAotICAgICAgICAiRG91YmxlRmllbGROb3JtYWxpemVRdWlldE5hbiIsIG1lc3NhZ2UsCi0gICAg
ICAgICJvcHRpb25hbF9kb3VibGU6IG5hbiIpOwotICAgIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX2Rv
dWJsZSgKLSAgICAgICAgV2lyZUZvcm1hdExpdGU6OkRlY29kZURvdWJsZSgweEZGRkJDQkE5ODc2
NTQzMjFMTCkpOwotICAgIFJ1blZhbGlkSnNvblRlc3RXaXRoUHJvdG9idWZJbnB1dCgKLSAgICAg
ICAgIkRvdWJsZUZpZWxkTm9ybWFsaXplU2lnbmFsaW5nTmFuIiwgbWVzc2FnZSwKLSAgICAgICAg
Im9wdGlvbmFsX2RvdWJsZTogbmFuIik7Ci0gIH0KLQotICAvLyBTcGVjaWFsIHZhbHVlcyBtdXN0
IGJlIHF1b3RlZC4KLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJEb3VibGVG
aWVsZE5hbk5vdFF1b3RlZCIsCi0gICAgICBSIih7Im9wdGlvbmFsRG91YmxlIjogTmFOfSkiKTsK
LSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJEb3VibGVGaWVsZEluZmluaXR5
Tm90UXVvdGVkIiwKLSAgICAgIFIiKHsib3B0aW9uYWxEb3VibGUiOiBJbmZpbml0eX0pIik7Ci0g
IEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiRG91YmxlRmllbGROZWdhdGl2ZUlu
ZmluaXR5Tm90UXVvdGVkIiwKLSAgICAgIFIiKHsib3B0aW9uYWxEb3VibGUiOiAtSW5maW5pdHl9
KSIpOwotCi0gIC8vIFBhcnNlcnMgc2hvdWxkIHJlamVjdCBvdXQtb2YtYm91bmQgdmFsdWVzLgot
ICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkRvdWJsZUZpZWxkVG9vU21hbGwi
LAotICAgICAgUiIoeyJvcHRpb25hbERvdWJsZSI6IC0xLjg5NzY5ZSszMDh9KSIpOwotICBFeHBl
Y3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkRvdWJsZUZpZWxkVG9vTGFyZ2UiLAotICAg
ICAgUiIoeyJvcHRpb25hbERvdWJsZSI6ICsxLjg5NzY5ZSszMDh9KSIpOwotCi0gIC8vIEVudW0g
ZmllbGRzLgotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIkVudW1GaWVsZCIsCi0gICAgICBS
Iih7Im9wdGlvbmFsTmVzdGVkRW51bSI6ICJGT08ifSkiLAotICAgICAgIm9wdGlvbmFsX25lc3Rl
ZF9lbnVtOiBGT08iKTsKLSAgLy8gRW51bSB2YWx1ZXMgbXVzdCBiZSByZXByZXNlbnRlZCBhcyBz
dHJpbmdzLgotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkVudW1GaWVsZE5v
dFF1b3RlZCIsCi0gICAgICBSIih7Im9wdGlvbmFsTmVzdGVkRW51bSI6IEZPT30pIik7Ci0gIC8v
IE51bWVyaWMgdmFsdWVzIGFyZSBhbGxvd2VkLgotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAg
IkVudW1GaWVsZE51bWVyaWNWYWx1ZVplcm8iLAotICAgICAgUiIoeyJvcHRpb25hbE5lc3RlZEVu
dW0iOiAwfSkiLAotICAgICAgIm9wdGlvbmFsX25lc3RlZF9lbnVtOiBGT08iKTsKLSAgUnVuVmFs
aWRKc29uVGVzdCgKLSAgICAgICJFbnVtRmllbGROdW1lcmljVmFsdWVOb25aZXJvIiwKLSAgICAg
IFIiKHsib3B0aW9uYWxOZXN0ZWRFbnVtIjogMX0pIiwKLSAgICAgICJvcHRpb25hbF9uZXN0ZWRf
ZW51bTogQkFSIik7Ci0gIC8vIFVua25vd24gZW51bSB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFz
IG51bWVyaWMgdmFsdWVzLgotICBSdW5WYWxpZEpzb25UZXN0V2l0aFZhbGlkYXRvcigKLSAgICAg
ICJFbnVtRmllbGRVbmtub3duVmFsdWUiLAotICAgICAgUiIoeyJvcHRpb25hbE5lc3RlZEVudW0i
OiAxMjN9KSIsCi0gICAgICBbXShjb25zdCBKc29uOjpWYWx1ZSYgdmFsdWUpIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlWyJvcHRpb25hbE5lc3RlZEVudW0iXS50eXBlKCkgPT0gSnNvbjo6aW50VmFs
dWUgJiYKLSAgICAgICAgICAgIHZhbHVlWyJvcHRpb25hbE5lc3RlZEVudW0iXS5hc0ludCgpID09
IDEyMzsKLSAgICAgIH0pOwotCi0gIC8vIFN0cmluZyBmaWVsZHMuCi0gIFJ1blZhbGlkSnNvblRl
c3QoCi0gICAgICAiU3RyaW5nRmllbGQiLAotICAgICAgUiIoeyJvcHRpb25hbFN0cmluZyI6ICJI
ZWxsbyB3b3JsZCEifSkiLAotICAgICAgIm9wdGlvbmFsX3N0cmluZzogXCJIZWxsbyB3b3JsZCFc
IiIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIlN0cmluZ0ZpZWxkVW5pY29kZSIsCi0g
ICAgICAvLyBHb29nbGUgaW4gQ2hpbmVzZS4KLSAgICAgIFIiKHsib3B0aW9uYWxTdHJpbmciOiAi
6LC35q2MIn0pIiwKLSAgICAgIFIiKG9wdGlvbmFsX3N0cmluZzogIuiwt+atjCIpIik7Ci0gIFJ1
blZhbGlkSnNvblRlc3QoCi0gICAgICAiU3RyaW5nRmllbGRFc2NhcGUiLAotICAgICAgUiIoeyJv
cHRpb25hbFN0cmluZyI6ICJcIlxcXC9cYlxmXG5cclx0In0pIiwKLSAgICAgIFIiKG9wdGlvbmFs
X3N0cmluZzogIlwiXFwvXGJcZlxuXHJcdCIpIik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAg
ICAiU3RyaW5nRmllbGRVbmljb2RlRXNjYXBlIiwKLSAgICAgIFIiKHsib3B0aW9uYWxTdHJpbmci
OiAiXHU4QzM3XHU2QjRDIn0pIiwKLSAgICAgIFIiKG9wdGlvbmFsX3N0cmluZzogIuiwt+atjCIp
Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiU3RyaW5nRmllbGRVbmljb2RlRXNjYXBl
V2l0aExvd2VyY2FzZUhleExldHRlcnMiLAotICAgICAgUiIoeyJvcHRpb25hbFN0cmluZyI6ICJc
dThjMzdcdTZiNGMifSkiLAotICAgICAgUiIob3B0aW9uYWxfc3RyaW5nOiAi6LC35q2MIikiKTsK
LSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJTdHJpbmdGaWVsZFN1cnJvZ2F0ZVBhaXIiLAot
ICAgICAgLy8gVGhlIGNoYXJhY3RlciBpcyBhbiBlbW9qaTogZ3Jpbm5pbmcgZmFjZSB3aXRoIHNt
aWxpbmcgZXllcy4g8J+YgQotICAgICAgUiIoeyJvcHRpb25hbFN0cmluZyI6ICJcdUQ4M0RcdURF
MDEifSkiLAotICAgICAgUiIob3B0aW9uYWxfc3RyaW5nOiAiXHhGMFx4OUZceDk4XHg4MSIpIik7
Ci0KLSAgLy8gVW5pY29kZSBlc2NhcGVzIG11c3Qgc3RhcnQgd2l0aCAiXHUiIChsb3dlcmNhc2Ug
dSkuCi0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiU3RyaW5nRmllbGRVcHBl
cmNhc2VFc2NhcGVMZXR0ZXIiLAotICAgICAgUiIoeyJvcHRpb25hbFN0cmluZyI6ICJcVThDMzdc
VTZiNEMifSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJTdHJpbmdG
aWVsZEludmFsaWRFc2NhcGUiLAotICAgICAgUiIoeyJvcHRpb25hbFN0cmluZyI6ICJcdVhYWFhc
dTZCNEMifSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJTdHJpbmdG
aWVsZFVudGVybWluYXRlZEVzY2FwZSIsCi0gICAgICBSIih7Im9wdGlvbmFsU3RyaW5nIjogIlx1
OEMzIn0pIik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiU3RyaW5nRmll
bGRVbnBhaXJlZEhpZ2hTdXJyb2dhdGUiLAotICAgICAgUiIoeyJvcHRpb25hbFN0cmluZyI6ICJc
dUQ4MDAifSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJTdHJpbmdG
aWVsZFVucGFpcmVkTG93U3Vycm9nYXRlIiwKLSAgICAgIFIiKHsib3B0aW9uYWxTdHJpbmciOiAi
XHVEQzAwIn0pIik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiU3RyaW5n
RmllbGRTdXJyb2dhdGVJbldyb25nT3JkZXIiLAotICAgICAgUiIoeyJvcHRpb25hbFN0cmluZyI6
ICJcdURFMDFcdUQ4M0QifSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAg
ICJTdHJpbmdGaWVsZE5vdEFTdHJpbmciLAotICAgICAgUiIoeyJvcHRpb25hbFN0cmluZyI6IDEy
MzQ1fSkiKTsKLQotICAvLyBCeXRlcyBmaWVsZHMuCi0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAg
ICAiQnl0ZXNGaWVsZCIsCi0gICAgICBSIih7Im9wdGlvbmFsQnl0ZXMiOiAiQVFJPSJ9KSIsCi0g
ICAgICBSIihvcHRpb25hbF9ieXRlczogIlx4MDFceDAyIikiKTsKLSAgRXhwZWN0UGFyc2VGYWls
dXJlRm9ySnNvbigKLSAgICAgICJCeXRlc0ZpZWxkTm9QYWRkaW5nIiwKLSAgICAgIFIiKHsib3B0
aW9uYWxCeXRlcyI6ICJBUUkifSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAg
ICAgICJCeXRlc0ZpZWxkSW52YWxpZEJhc2U2NENoYXJhY3RlcnMiLAotICAgICAgUiIoeyJvcHRp
b25hbEJ5dGVzIjogIi1fPT0ifSkiKTsKLQotICAvLyBNZXNzYWdlIGZpZWxkcy4KLSAgUnVuVmFs
aWRKc29uVGVzdCgKLSAgICAgICJNZXNzYWdlRmllbGQiLAotICAgICAgUiIoeyJvcHRpb25hbE5l
c3RlZE1lc3NhZ2UiOiB7ImEiOiAxMjM0fX0pIiwKLSAgICAgICJvcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZToge2E6IDEyMzR9Iik7Ci0KLSAgLy8gT25lb2YgZmllbGRzLgotICBFeHBlY3RQYXJzZUZh
aWx1cmVGb3JKc29uKAotICAgICAgIk9uZW9mRmllbGREdXBsaWNhdGUiLAotICAgICAgUiIoeyJv
bmVvZlVpbnQzMiI6IDEsICJvbmVvZlN0cmluZyI6ICJ0ZXN0In0pIik7Ci0KLSAgLy8gUmVwZWF0
ZWQgZmllbGRzLgotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIlByaW1pdGl2ZVJlcGVhdGVk
RmllbGQiLAotICAgICAgUiIoeyJyZXBlYXRlZEludDMyIjogWzEsIDIsIDMsIDRdfSkiLAotICAg
ICAgInJlcGVhdGVkX2ludDMyOiBbMSwgMiwgMywgNF0iKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgK
LSAgICAgICJFbnVtUmVwZWF0ZWRGaWVsZCIsCi0gICAgICBSIih7InJlcGVhdGVkTmVzdGVkRW51
bSI6IFsiRk9PIiwgIkJBUiIsICJCQVoiXX0pIiwKLSAgICAgICJyZXBlYXRlZF9uZXN0ZWRfZW51
bTogW0ZPTywgQkFSLCBCQVpdIik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiU3RyaW5n
UmVwZWF0ZWRGaWVsZCIsCi0gICAgICBSIih7InJlcGVhdGVkU3RyaW5nIjogWyJIZWxsbyIsICJ3
b3JsZCJdfSkiLAotICAgICAgUiIocmVwZWF0ZWRfc3RyaW5nOiBbIkhlbGxvIiwgIndvcmxkIl0p
Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiQnl0ZXNSZXBlYXRlZEZpZWxkIiwKLSAg
ICAgIFIiKHsicmVwZWF0ZWRCeXRlcyI6IFsiQUFFQyIsICJBUUk9Il19KSIsCi0gICAgICBSIihy
ZXBlYXRlZF9ieXRlczogWyJceDAwXHgwMVx4MDIiLCAiXHgwMVx4MDIiXSkiKTsKLSAgUnVuVmFs
aWRKc29uVGVzdCgKLSAgICAgICJNZXNzYWdlUmVwZWF0ZWRGaWVsZCIsCi0gICAgICBSIih7InJl
cGVhdGVkTmVzdGVkTWVzc2FnZSI6IFt7ImEiOiAxMjM0fSwgeyJhIjogNTY3OH1dfSkiLAotICAg
ICAgInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlOiB7YTogMTIzNH0iCi0gICAgICAicmVwZWF0ZWRf
bmVzdGVkX21lc3NhZ2U6IHthOiA1Njc4fSIpOwotCi0gIC8vIFJlcGVhdGVkIGZpZWxkIGVsZW1l
bnRzIGFyZSBvZiBpbmNvcnJlY3QgdHlwZS4KLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigK
LSAgICAgICJSZXBlYXRlZEZpZWxkV3JvbmdFbGVtZW50VHlwZUV4cGVjdGluZ0ludGVnZXJzR290
Qm9vbCIsCi0gICAgICBSIih7InJlcGVhdGVkSW50MzIiOiBbMSwgZmFsc2UsIDMsIDRdfSkiKTsK
LSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJSZXBlYXRlZEZpZWxkV3JvbmdF
bGVtZW50VHlwZUV4cGVjdGluZ0ludGVnZXJzR290U3RyaW5nIiwKLSAgICAgIFIiKHsicmVwZWF0
ZWRJbnQzMiI6IFsxLCAyLCAibmFtZSIsIDRdfSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9y
SnNvbigKLSAgICAgICJSZXBlYXRlZEZpZWxkV3JvbmdFbGVtZW50VHlwZUV4cGVjdGluZ0ludGVn
ZXJzR290TWVzc2FnZSIsCi0gICAgICBSIih7InJlcGVhdGVkSW50MzIiOiBbMSwgMiwgMywgeyJh
IjogNH1dfSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJSZXBlYXRl
ZEZpZWxkV3JvbmdFbGVtZW50VHlwZUV4cGVjdGluZ1N0cmluZ3NHb3RJbnQiLAotICAgICAgUiIo
eyJyZXBlYXRlZFN0cmluZyI6IFsiMSIsIDIsICIzIiwgIjQiXX0pIik7Ci0gIEV4cGVjdFBhcnNl
RmFpbHVyZUZvckpzb24oCi0gICAgICAiUmVwZWF0ZWRGaWVsZFdyb25nRWxlbWVudFR5cGVFeHBl
Y3RpbmdTdHJpbmdzR290Qm9vbCIsCi0gICAgICBSIih7InJlcGVhdGVkU3RyaW5nIjogWyIxIiwg
IjIiLCBmYWxzZSwgIjQiXX0pIik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAg
ICAiUmVwZWF0ZWRGaWVsZFdyb25nRWxlbWVudFR5cGVFeHBlY3RpbmdTdHJpbmdzR290TWVzc2Fn
ZSIsCi0gICAgICBSIih7InJlcGVhdGVkU3RyaW5nIjogWyIxIiwgMiwgIjMiLCB7ImEiOiA0fV19
KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIlJlcGVhdGVkRmllbGRX
cm9uZ0VsZW1lbnRUeXBlRXhwZWN0aW5nTWVzc2FnZXNHb3RJbnQiLAotICAgICAgUiIoeyJyZXBl
YXRlZE5lc3RlZE1lc3NhZ2UiOiBbeyJhIjogMX0sIDJdfSkiKTsKLSAgRXhwZWN0UGFyc2VGYWls
dXJlRm9ySnNvbigKLSAgICAgICJSZXBlYXRlZEZpZWxkV3JvbmdFbGVtZW50VHlwZUV4cGVjdGlu
Z01lc3NhZ2VzR290Qm9vbCIsCi0gICAgICBSIih7InJlcGVhdGVkTmVzdGVkTWVzc2FnZSI6IFt7
ImEiOiAxfSwgZmFsc2VdfSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAg
ICJSZXBlYXRlZEZpZWxkV3JvbmdFbGVtZW50VHlwZUV4cGVjdGluZ01lc3NhZ2VzR290U3RyaW5n
IiwKLSAgICAgIFIiKHsicmVwZWF0ZWROZXN0ZWRNZXNzYWdlIjogW3siYSI6IDF9LCAiMiJdfSki
KTsKLSAgLy8gVHJhaWxpbmcgY29tbWEgaW4gdGhlIHJlcGVhdGVkIGZpZWxkIGlzIG5vdCBhbGxv
d2VkLgotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIlJlcGVhdGVkRmllbGRU
cmFpbGluZ0NvbW1hIiwKLSAgICAgIFIiKHsicmVwZWF0ZWRJbnQzMiI6IFsxLCAyLCAzLCA0LF19
KSIpOwotCi0gIC8vIE1hcCBmaWVsZHMuCi0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiSW50
MzJNYXBGaWVsZCIsCi0gICAgICBSIih7Im1hcEludDMySW50MzIiOiB7IjEiOiAyLCAiMyI6IDR9
fSkiLAotICAgICAgIm1hcF9pbnQzMl9pbnQzMjoge2tleTogMSB2YWx1ZTogMn0iCi0gICAgICAi
bWFwX2ludDMyX2ludDMyOiB7a2V5OiAzIHZhbHVlOiA0fSIpOwotICBFeHBlY3RQYXJzZUZhaWx1
cmVGb3JKc29uKAotICAgICAgIkludDMyTWFwRmllbGRLZXlOb3RRdW90ZWQiLAotICAgICAgUiIo
eyJtYXBJbnQzMkludDMyIjogezE6IDIsIDM6IDR9fSkiKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgK
LSAgICAgICJVaW50MzJNYXBGaWVsZCIsCi0gICAgICBSIih7Im1hcFVpbnQzMlVpbnQzMiI6IHsi
MSI6IDIsICIzIjogNH19KSIsCi0gICAgICAibWFwX3VpbnQzMl91aW50MzI6IHtrZXk6IDEgdmFs
dWU6IDJ9IgotICAgICAgIm1hcF91aW50MzJfdWludDMyOiB7a2V5OiAzIHZhbHVlOiA0fSIpOwot
ICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIlVpbnQzMk1hcEZpZWxkS2V5Tm90
UXVvdGVkIiwKLSAgICAgIFIiKHsibWFwVWludDMyVWludDMyIjogezE6IDIsIDM6IDR9fSkiKTsK
LSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJJbnQ2NE1hcEZpZWxkIiwKLSAgICAgIFIiKHsi
bWFwSW50NjRJbnQ2NCI6IHsiMSI6IDIsICIzIjogNH19KSIsCi0gICAgICAibWFwX2ludDY0X2lu
dDY0OiB7a2V5OiAxIHZhbHVlOiAyfSIKLSAgICAgICJtYXBfaW50NjRfaW50NjQ6IHtrZXk6IDMg
dmFsdWU6IDR9Iik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiSW50NjRN
YXBGaWVsZEtleU5vdFF1b3RlZCIsCi0gICAgICBSIih7Im1hcEludDY0SW50NjQiOiB7MTogMiwg
MzogNH19KSIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIlVpbnQ2NE1hcEZpZWxkIiwK
LSAgICAgIFIiKHsibWFwVWludDY0VWludDY0IjogeyIxIjogMiwgIjMiOiA0fX0pIiwKLSAgICAg
ICJtYXBfdWludDY0X3VpbnQ2NDoge2tleTogMSB2YWx1ZTogMn0iCi0gICAgICAibWFwX3VpbnQ2
NF91aW50NjQ6IHtrZXk6IDMgdmFsdWU6IDR9Iik7Ci0gIEV4cGVjdFBhcnNlRmFpbHVyZUZvckpz
b24oCi0gICAgICAiVWludDY0TWFwRmllbGRLZXlOb3RRdW90ZWQiLAotICAgICAgUiIoeyJtYXBV
aW50NjRVaW50NjQiOiB7MTogMiwgMzogNH19KSIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAg
ICAgIkJvb2xNYXBGaWVsZCIsCi0gICAgICBSIih7Im1hcEJvb2xCb29sIjogeyJ0cnVlIjogdHJ1
ZSwgImZhbHNlIjogZmFsc2V9fSkiLAotICAgICAgIm1hcF9ib29sX2Jvb2w6IHtrZXk6IHRydWUg
dmFsdWU6IHRydWV9IgotICAgICAgIm1hcF9ib29sX2Jvb2w6IHtrZXk6IGZhbHNlIHZhbHVlOiBm
YWxzZX0iKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJCb29sTWFwRmll
bGRLZXlOb3RRdW90ZWQiLAotICAgICAgUiIoeyJtYXBCb29sQm9vbCI6IHt0cnVlOiB0cnVlLCBm
YWxzZTogZmFsc2V9fSkiKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJNZXNzYWdlTWFw
RmllbGQiLAotICAgICAgUiIoewotICAgICAgICAibWFwU3RyaW5nTmVzdGVkTWVzc2FnZSI6IHsK
LSAgICAgICAgICAiaGVsbG8iOiB7ImEiOiAxMjM0fSwKLSAgICAgICAgICAid29ybGQiOiB7ImEi
OiA1Njc4fQotICAgICAgICB9Ci0gICAgICB9KSIsCi0gICAgICBSIigKLSAgICAgICAgbWFwX3N0
cmluZ19uZXN0ZWRfbWVzc2FnZTogewotICAgICAgICAgIGtleTogImhlbGxvIgotICAgICAgICAg
IHZhbHVlOiB7YTogMTIzNH0KLSAgICAgICAgfQotICAgICAgICBtYXBfc3RyaW5nX25lc3RlZF9t
ZXNzYWdlOiB7Ci0gICAgICAgICAga2V5OiAid29ybGQiCi0gICAgICAgICAgdmFsdWU6IHthOiA1
Njc4fQotICAgICAgICB9Ci0gICAgICApIik7Ci0gIC8vIFNpbmNlIE1hcCBrZXlzIGFyZSByZXBy
ZXNlbnRlZCBhcyBKU09OIHN0cmluZ3MsIGVzY2FwaW5nIHNob3VsZCBiZSBhbGxvd2VkLgotICBS
dW5WYWxpZEpzb25UZXN0KAotICAgICAgIkludDMyTWFwRXNjYXBlZEtleSIsCi0gICAgICBSIih7
Im1hcEludDMySW50MzIiOiB7Ilx1MDAzMSI6IDJ9fSkiLAotICAgICAgIm1hcF9pbnQzMl9pbnQz
Mjoge2tleTogMSB2YWx1ZTogMn0iKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJJbnQ2
NE1hcEVzY2FwZWRLZXkiLAotICAgICAgUiIoeyJtYXBJbnQ2NEludDY0IjogeyJcdTAwMzEiOiAy
fX0pIiwKLSAgICAgICJtYXBfaW50NjRfaW50NjQ6IHtrZXk6IDEgdmFsdWU6IDJ9Iik7Ci0gIFJ1
blZhbGlkSnNvblRlc3QoCi0gICAgICAiQm9vbE1hcEVzY2FwZWRLZXkiLAotICAgICAgUiIoeyJt
YXBCb29sQm9vbCI6IHsidHJcdTAwNzVlIjogdHJ1ZX19KSIsCi0gICAgICAibWFwX2Jvb2xfYm9v
bDoge2tleTogdHJ1ZSB2YWx1ZTogdHJ1ZX0iKTsKLQotICAvLyAibnVsbCIgaXMgYWNjZXB0ZWQg
Zm9yIGFsbCBmaWVsZHMgdHlwZXMuCi0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiQWxsRmll
bGRBY2NlcHROdWxsIiwKLSAgICAgIFIiKHsKLSAgICAgICAgIm9wdGlvbmFsSW50MzIiOiBudWxs
LAotICAgICAgICAib3B0aW9uYWxJbnQ2NCI6IG51bGwsCi0gICAgICAgICJvcHRpb25hbFVpbnQz
MiI6IG51bGwsCi0gICAgICAgICJvcHRpb25hbFVpbnQ2NCI6IG51bGwsCi0gICAgICAgICJvcHRp
b25hbEJvb2wiOiBudWxsLAotICAgICAgICAib3B0aW9uYWxTdHJpbmciOiBudWxsLAotICAgICAg
ICAib3B0aW9uYWxCeXRlcyI6IG51bGwsCi0gICAgICAgICJvcHRpb25hbE5lc3RlZEVudW0iOiBu
dWxsLAotICAgICAgICAib3B0aW9uYWxOZXN0ZWRNZXNzYWdlIjogbnVsbCwKLSAgICAgICAgInJl
cGVhdGVkSW50MzIiOiBudWxsLAotICAgICAgICAicmVwZWF0ZWRJbnQ2NCI6IG51bGwsCi0gICAg
ICAgICJyZXBlYXRlZFVpbnQzMiI6IG51bGwsCi0gICAgICAgICJyZXBlYXRlZFVpbnQ2NCI6IG51
bGwsCi0gICAgICAgICJyZXBlYXRlZEJvb2wiOiBudWxsLAotICAgICAgICAicmVwZWF0ZWRTdHJp
bmciOiBudWxsLAotICAgICAgICAicmVwZWF0ZWRCeXRlcyI6IG51bGwsCi0gICAgICAgICJyZXBl
YXRlZE5lc3RlZEVudW0iOiBudWxsLAotICAgICAgICAicmVwZWF0ZWROZXN0ZWRNZXNzYWdlIjog
bnVsbCwKLSAgICAgICAgIm1hcEludDMySW50MzIiOiBudWxsLAotICAgICAgICAibWFwQm9vbEJv
b2wiOiBudWxsLAotICAgICAgICAibWFwU3RyaW5nTmVzdGVkTWVzc2FnZSI6IG51bGwKLSAgICAg
IH0pIiwKLSAgICAgICIiKTsKLQotICAvLyBSZXBlYXRlZCBmaWVsZCBlbGVtZW50cyBjYW5ub3Qg
YmUgbnVsbC4KLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJSZXBlYXRlZEZp
ZWxkUHJpbWl0aXZlRWxlbWVudElzTnVsbCIsCi0gICAgICBSIih7InJlcGVhdGVkSW50MzIiOiBb
MSwgbnVsbCwgMl19KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIlJl
cGVhdGVkRmllbGRNZXNzYWdlRWxlbWVudElzTnVsbCIsCi0gICAgICBSIih7InJlcGVhdGVkTmVz
dGVkTWVzc2FnZSI6IFt7ImEiOjF9LCBudWxsLCB7ImEiOjJ9XX0pIik7Ci0gIC8vIE1hcCBmaWVs
ZCBrZXlzIGNhbm5vdCBiZSBudWxsLgotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAg
ICAgIk1hcEZpZWxkS2V5SXNOdWxsIiwKLSAgICAgIFIiKHsibWFwSW50MzJJbnQzMiI6IHtudWxs
OiAxfX0pIik7Ci0gIC8vIE1hcCBmaWVsZCB2YWx1ZXMgY2Fubm90IGJlIG51bGwuCi0gIEV4cGVj
dFBhcnNlRmFpbHVyZUZvckpzb24oCi0gICAgICAiTWFwRmllbGRWYWx1ZUlzTnVsbCIsCi0gICAg
ICBSIih7Im1hcEludDMySW50MzIiOiB7IjAiOiBudWxsfX0pIik7Ci0KLSAgLy8gV3JhcHBlciB0
eXBlcy4KLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJPcHRpb25hbEJvb2xXcmFwcGVyIiwK
LSAgICAgIFIiKHsib3B0aW9uYWxCb29sV3JhcHBlciI6IGZhbHNlfSkiLAotICAgICAgIm9wdGlv
bmFsX2Jvb2xfd3JhcHBlcjoge3ZhbHVlOiBmYWxzZX0iKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgK
LSAgICAgICJPcHRpb25hbEludDMyV3JhcHBlciIsCi0gICAgICBSIih7Im9wdGlvbmFsSW50MzJX
cmFwcGVyIjogMH0pIiwKLSAgICAgICJvcHRpb25hbF9pbnQzMl93cmFwcGVyOiB7dmFsdWU6IDB9
Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiT3B0aW9uYWxVaW50MzJXcmFwcGVyIiwK
LSAgICAgIFIiKHsib3B0aW9uYWxVaW50MzJXcmFwcGVyIjogMH0pIiwKLSAgICAgICJvcHRpb25h
bF91aW50MzJfd3JhcHBlcjoge3ZhbHVlOiAwfSIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAg
ICAgIk9wdGlvbmFsSW50NjRXcmFwcGVyIiwKLSAgICAgIFIiKHsib3B0aW9uYWxJbnQ2NFdyYXBw
ZXIiOiAwfSkiLAotICAgICAgIm9wdGlvbmFsX2ludDY0X3dyYXBwZXI6IHt2YWx1ZTogMH0iKTsK
LSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJPcHRpb25hbFVpbnQ2NFdyYXBwZXIiLAotICAg
ICAgUiIoeyJvcHRpb25hbFVpbnQ2NFdyYXBwZXIiOiAwfSkiLAotICAgICAgIm9wdGlvbmFsX3Vp
bnQ2NF93cmFwcGVyOiB7dmFsdWU6IDB9Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAi
T3B0aW9uYWxGbG9hdFdyYXBwZXIiLAotICAgICAgUiIoeyJvcHRpb25hbEZsb2F0V3JhcHBlciI6
IDB9KSIsCi0gICAgICAib3B0aW9uYWxfZmxvYXRfd3JhcHBlcjoge3ZhbHVlOiAwfSIpOwotICBS
dW5WYWxpZEpzb25UZXN0KAotICAgICAgIk9wdGlvbmFsRG91YmxlV3JhcHBlciIsCi0gICAgICBS
Iih7Im9wdGlvbmFsRG91YmxlV3JhcHBlciI6IDB9KSIsCi0gICAgICAib3B0aW9uYWxfZG91Ymxl
X3dyYXBwZXI6IHt2YWx1ZTogMH0iKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJPcHRp
b25hbFN0cmluZ1dyYXBwZXIiLAotICAgICAgUiIoeyJvcHRpb25hbFN0cmluZ1dyYXBwZXIiOiAi
In0pIiwKLSAgICAgIFIiKG9wdGlvbmFsX3N0cmluZ193cmFwcGVyOiB7dmFsdWU6ICIifSkiKTsK
LSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJPcHRpb25hbEJ5dGVzV3JhcHBlciIsCi0gICAg
ICBSIih7Im9wdGlvbmFsQnl0ZXNXcmFwcGVyIjogIiJ9KSIsCi0gICAgICBSIihvcHRpb25hbF9i
eXRlc193cmFwcGVyOiB7dmFsdWU6ICIifSkiKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAg
ICJPcHRpb25hbFdyYXBwZXJUeXBlc1dpdGhOb25EZWZhdWx0VmFsdWUiLAotICAgICAgUiIoewot
ICAgICAgICAib3B0aW9uYWxCb29sV3JhcHBlciI6IHRydWUsCi0gICAgICAgICJvcHRpb25hbElu
dDMyV3JhcHBlciI6IDEsCi0gICAgICAgICJvcHRpb25hbFVpbnQzMldyYXBwZXIiOiAxLAotICAg
ICAgICAib3B0aW9uYWxJbnQ2NFdyYXBwZXIiOiAiMSIsCi0gICAgICAgICJvcHRpb25hbFVpbnQ2
NFdyYXBwZXIiOiAiMSIsCi0gICAgICAgICJvcHRpb25hbEZsb2F0V3JhcHBlciI6IDEsCi0gICAg
ICAgICJvcHRpb25hbERvdWJsZVdyYXBwZXIiOiAxLAotICAgICAgICAib3B0aW9uYWxTdHJpbmdX
cmFwcGVyIjogIjEiLAotICAgICAgICAib3B0aW9uYWxCeXRlc1dyYXBwZXIiOiAiQVFJPSIKLSAg
ICAgIH0pIiwKLSAgICAgIFIiKAotICAgICAgICBvcHRpb25hbF9ib29sX3dyYXBwZXI6IHt2YWx1
ZTogdHJ1ZX0KLSAgICAgICAgb3B0aW9uYWxfaW50MzJfd3JhcHBlcjoge3ZhbHVlOiAxfQotICAg
ICAgICBvcHRpb25hbF91aW50MzJfd3JhcHBlcjoge3ZhbHVlOiAxfQotICAgICAgICBvcHRpb25h
bF9pbnQ2NF93cmFwcGVyOiB7dmFsdWU6IDF9Ci0gICAgICAgIG9wdGlvbmFsX3VpbnQ2NF93cmFw
cGVyOiB7dmFsdWU6IDF9Ci0gICAgICAgIG9wdGlvbmFsX2Zsb2F0X3dyYXBwZXI6IHt2YWx1ZTog
MX0KLSAgICAgICAgb3B0aW9uYWxfZG91YmxlX3dyYXBwZXI6IHt2YWx1ZTogMX0KLSAgICAgICAg
b3B0aW9uYWxfc3RyaW5nX3dyYXBwZXI6IHt2YWx1ZTogIjEifQotICAgICAgICBvcHRpb25hbF9i
eXRlc193cmFwcGVyOiB7dmFsdWU6ICJceDAxXHgwMiJ9Ci0gICAgICApIik7Ci0gIFJ1blZhbGlk
SnNvblRlc3QoCi0gICAgICAiUmVwZWF0ZWRCb29sV3JhcHBlciIsCi0gICAgICBSIih7InJlcGVh
dGVkQm9vbFdyYXBwZXIiOiBbdHJ1ZSwgZmFsc2VdfSkiLAotICAgICAgInJlcGVhdGVkX2Jvb2xf
d3JhcHBlcjoge3ZhbHVlOiB0cnVlfSIKLSAgICAgICJyZXBlYXRlZF9ib29sX3dyYXBwZXI6IHt2
YWx1ZTogZmFsc2V9Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiUmVwZWF0ZWRJbnQz
MldyYXBwZXIiLAotICAgICAgUiIoeyJyZXBlYXRlZEludDMyV3JhcHBlciI6IFswLCAxXX0pIiwK
LSAgICAgICJyZXBlYXRlZF9pbnQzMl93cmFwcGVyOiB7dmFsdWU6IDB9IgotICAgICAgInJlcGVh
dGVkX2ludDMyX3dyYXBwZXI6IHt2YWx1ZTogMX0iKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAg
ICAgICJSZXBlYXRlZFVpbnQzMldyYXBwZXIiLAotICAgICAgUiIoeyJyZXBlYXRlZFVpbnQzMldy
YXBwZXIiOiBbMCwgMV19KSIsCi0gICAgICAicmVwZWF0ZWRfdWludDMyX3dyYXBwZXI6IHt2YWx1
ZTogMH0iCi0gICAgICAicmVwZWF0ZWRfdWludDMyX3dyYXBwZXI6IHt2YWx1ZTogMX0iKTsKLSAg
UnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJSZXBlYXRlZEludDY0V3JhcHBlciIsCi0gICAgICBS
Iih7InJlcGVhdGVkSW50NjRXcmFwcGVyIjogWzAsIDFdfSkiLAotICAgICAgInJlcGVhdGVkX2lu
dDY0X3dyYXBwZXI6IHt2YWx1ZTogMH0iCi0gICAgICAicmVwZWF0ZWRfaW50NjRfd3JhcHBlcjog
e3ZhbHVlOiAxfSIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIlJlcGVhdGVkVWludDY0
V3JhcHBlciIsCi0gICAgICBSIih7InJlcGVhdGVkVWludDY0V3JhcHBlciI6IFswLCAxXX0pIiwK
LSAgICAgICJyZXBlYXRlZF91aW50NjRfd3JhcHBlcjoge3ZhbHVlOiAwfSIKLSAgICAgICJyZXBl
YXRlZF91aW50NjRfd3JhcHBlcjoge3ZhbHVlOiAxfSIpOwotICBSdW5WYWxpZEpzb25UZXN0KAot
ICAgICAgIlJlcGVhdGVkRmxvYXRXcmFwcGVyIiwKLSAgICAgIFIiKHsicmVwZWF0ZWRGbG9hdFdy
YXBwZXIiOiBbMCwgMV19KSIsCi0gICAgICAicmVwZWF0ZWRfZmxvYXRfd3JhcHBlcjoge3ZhbHVl
OiAwfSIKLSAgICAgICJyZXBlYXRlZF9mbG9hdF93cmFwcGVyOiB7dmFsdWU6IDF9Iik7Ci0gIFJ1
blZhbGlkSnNvblRlc3QoCi0gICAgICAiUmVwZWF0ZWREb3VibGVXcmFwcGVyIiwKLSAgICAgIFIi
KHsicmVwZWF0ZWREb3VibGVXcmFwcGVyIjogWzAsIDFdfSkiLAotICAgICAgInJlcGVhdGVkX2Rv
dWJsZV93cmFwcGVyOiB7dmFsdWU6IDB9IgotICAgICAgInJlcGVhdGVkX2RvdWJsZV93cmFwcGVy
OiB7dmFsdWU6IDF9Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiUmVwZWF0ZWRTdHJp
bmdXcmFwcGVyIiwKLSAgICAgIFIiKHsicmVwZWF0ZWRTdHJpbmdXcmFwcGVyIjogWyIiLCAiQVFJ
PSJdfSkiLAotICAgICAgUiIoCi0gICAgICAgIHJlcGVhdGVkX3N0cmluZ193cmFwcGVyOiB7dmFs
dWU6ICIifQotICAgICAgICByZXBlYXRlZF9zdHJpbmdfd3JhcHBlcjoge3ZhbHVlOiAiQVFJPSJ9
Ci0gICAgICApIik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiUmVwZWF0ZWRCeXRlc1dy
YXBwZXIiLAotICAgICAgUiIoeyJyZXBlYXRlZEJ5dGVzV3JhcHBlciI6IFsiIiwgIkFRST0iXX0p
IiwKLSAgICAgIFIiKAotICAgICAgICByZXBlYXRlZF9ieXRlc193cmFwcGVyOiB7dmFsdWU6ICIi
fQotICAgICAgICByZXBlYXRlZF9ieXRlc193cmFwcGVyOiB7dmFsdWU6ICJceDAxXHgwMiJ9Ci0g
ICAgICApIik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiV3JhcHBlclR5cGVzV2l0aE51
bGxWYWx1ZSIsCi0gICAgICBSIih7Ci0gICAgICAgICJvcHRpb25hbEJvb2xXcmFwcGVyIjogbnVs
bCwKLSAgICAgICAgIm9wdGlvbmFsSW50MzJXcmFwcGVyIjogbnVsbCwKLSAgICAgICAgIm9wdGlv
bmFsVWludDMyV3JhcHBlciI6IG51bGwsCi0gICAgICAgICJvcHRpb25hbEludDY0V3JhcHBlciI6
IG51bGwsCi0gICAgICAgICJvcHRpb25hbFVpbnQ2NFdyYXBwZXIiOiBudWxsLAotICAgICAgICAi
b3B0aW9uYWxGbG9hdFdyYXBwZXIiOiBudWxsLAotICAgICAgICAib3B0aW9uYWxEb3VibGVXcmFw
cGVyIjogbnVsbCwKLSAgICAgICAgIm9wdGlvbmFsU3RyaW5nV3JhcHBlciI6IG51bGwsCi0gICAg
ICAgICJvcHRpb25hbEJ5dGVzV3JhcHBlciI6IG51bGwsCi0gICAgICAgICJyZXBlYXRlZEJvb2xX
cmFwcGVyIjogbnVsbCwKLSAgICAgICAgInJlcGVhdGVkSW50MzJXcmFwcGVyIjogbnVsbCwKLSAg
ICAgICAgInJlcGVhdGVkVWludDMyV3JhcHBlciI6IG51bGwsCi0gICAgICAgICJyZXBlYXRlZElu
dDY0V3JhcHBlciI6IG51bGwsCi0gICAgICAgICJyZXBlYXRlZFVpbnQ2NFdyYXBwZXIiOiBudWxs
LAotICAgICAgICAicmVwZWF0ZWRGbG9hdFdyYXBwZXIiOiBudWxsLAotICAgICAgICAicmVwZWF0
ZWREb3VibGVXcmFwcGVyIjogbnVsbCwKLSAgICAgICAgInJlcGVhdGVkU3RyaW5nV3JhcHBlciI6
IG51bGwsCi0gICAgICAgICJyZXBlYXRlZEJ5dGVzV3JhcHBlciI6IG51bGwKLSAgICAgIH0pIiwK
LSAgICAgICIiKTsKLQotICAvLyBEdXJhdGlvbgotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAg
IkR1cmF0aW9uTWluVmFsdWUiLAotICAgICAgUiIoeyJvcHRpb25hbER1cmF0aW9uIjogIi0zMTU1
NzYwMDAwMDAuOTk5OTk5OTk5cyJ9KSIsCi0gICAgICAib3B0aW9uYWxfZHVyYXRpb246IHtzZWNv
bmRzOiAtMzE1NTc2MDAwMDAwIG5hbm9zOiAtOTk5OTk5OTk5fSIpOwotICBSdW5WYWxpZEpzb25U
ZXN0KAotICAgICAgIkR1cmF0aW9uTWF4VmFsdWUiLAotICAgICAgUiIoeyJvcHRpb25hbER1cmF0
aW9uIjogIjMxNTU3NjAwMDAwMC45OTk5OTk5OTlzIn0pIiwKLSAgICAgICJvcHRpb25hbF9kdXJh
dGlvbjoge3NlY29uZHM6IDMxNTU3NjAwMDAwMCBuYW5vczogOTk5OTk5OTk5fSIpOwotICBSdW5W
YWxpZEpzb25UZXN0KAotICAgICAgIkR1cmF0aW9uUmVwZWF0ZWRWYWx1ZSIsCi0gICAgICBSIih7
InJlcGVhdGVkRHVyYXRpb24iOiBbIjEuNXMiLCAiLTEuNXMiXX0pIiwKLSAgICAgICJyZXBlYXRl
ZF9kdXJhdGlvbjoge3NlY29uZHM6IDEgbmFub3M6IDUwMDAwMDAwMH0iCi0gICAgICAicmVwZWF0
ZWRfZHVyYXRpb246IHtzZWNvbmRzOiAtMSBuYW5vczogLTUwMDAwMDAwMH0iKTsKLQotICBFeHBl
Y3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkR1cmF0aW9uTWlzc2luZ1MiLAotICAgICAg
UiIoeyJvcHRpb25hbER1cmF0aW9uIjogIjEifSkiKTsKLSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9y
SnNvbigKLSAgICAgICJEdXJhdGlvbkpzb25JbnB1dFRvb1NtYWxsIiwKLSAgICAgIFIiKHsib3B0
aW9uYWxEdXJhdGlvbiI6ICItMzE1NTc2MDAwMDAxLjAwMDAwMDAwMHMifSkiKTsKLSAgRXhwZWN0
UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJEdXJhdGlvbkpzb25JbnB1dFRvb0xhcmdlIiwK
LSAgICAgIFIiKHsib3B0aW9uYWxEdXJhdGlvbiI6ICIzMTU1NzYwMDAwMDEuMDAwMDAwMDAwcyJ9
KSIpOwotICBFeHBlY3RTZXJpYWxpemVGYWlsdXJlRm9ySnNvbigKLSAgICAgICJEdXJhdGlvblBy
b3RvSW5wdXRUb29TbWFsbCIsCi0gICAgICAib3B0aW9uYWxfZHVyYXRpb246IHtzZWNvbmRzOiAt
MzE1NTc2MDAwMDAxIG5hbm9zOiAwfSIpOwotICBFeHBlY3RTZXJpYWxpemVGYWlsdXJlRm9ySnNv
bigKLSAgICAgICJEdXJhdGlvblByb3RvSW5wdXRUb29MYXJnZSIsCi0gICAgICAib3B0aW9uYWxf
ZHVyYXRpb246IHtzZWNvbmRzOiAzMTU1NzYwMDAwMDEgbmFub3M6IDB9Iik7Ci0KLSAgUnVuVmFs
aWRKc29uVGVzdFdpdGhWYWxpZGF0b3IoCi0gICAgICAiRHVyYXRpb25IYXNaZXJvRnJhY3Rpb25h
bERpZ2l0IiwKLSAgICAgIFIiKHsib3B0aW9uYWxEdXJhdGlvbiI6ICIxLjAwMDAwMDAwMHMifSki
LAotICAgICAgW10oY29uc3QgSnNvbjo6VmFsdWUmIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZVsib3B0aW9uYWxEdXJhdGlvbiJdLmFzU3RyaW5nKCkgPT0gIjFzIjsKLSAgICAgIH0pOwot
ICBSdW5WYWxpZEpzb25UZXN0V2l0aFZhbGlkYXRvcigKLSAgICAgICJEdXJhdGlvbkhhczNGcmFj
dGlvbmFsRGlnaXRzIiwKLSAgICAgIFIiKHsib3B0aW9uYWxEdXJhdGlvbiI6ICIxLjAxMDAwMDAw
MHMifSkiLAotICAgICAgW10oY29uc3QgSnNvbjo6VmFsdWUmIHZhbHVlKSB7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZVsib3B0aW9uYWxEdXJhdGlvbiJdLmFzU3RyaW5nKCkgPT0gIjEuMDEwcyI7Ci0g
ICAgICB9KTsKLSAgUnVuVmFsaWRKc29uVGVzdFdpdGhWYWxpZGF0b3IoCi0gICAgICAiRHVyYXRp
b25IYXM2RnJhY3Rpb25hbERpZ2l0cyIsCi0gICAgICBSIih7Im9wdGlvbmFsRHVyYXRpb24iOiAi
MS4wMDAwMTAwMDBzIn0pIiwKLSAgICAgIFtdKGNvbnN0IEpzb246OlZhbHVlJiB2YWx1ZSkgewot
ICAgICAgICByZXR1cm4gdmFsdWVbIm9wdGlvbmFsRHVyYXRpb24iXS5hc1N0cmluZygpID09ICIx
LjAwMDAxMHMiOwotICAgICAgfSk7Ci0gIFJ1blZhbGlkSnNvblRlc3RXaXRoVmFsaWRhdG9yKAot
ICAgICAgIkR1cmF0aW9uSGFzOUZyYWN0aW9uYWxEaWdpdHMiLAotICAgICAgUiIoeyJvcHRpb25h
bER1cmF0aW9uIjogIjEuMDAwMDAwMDEwcyJ9KSIsCi0gICAgICBbXShjb25zdCBKc29uOjpWYWx1
ZSYgdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlWyJvcHRpb25hbER1cmF0aW9uIl0uYXNT
dHJpbmcoKSA9PSAiMS4wMDAwMDAwMTBzIjsKLSAgICAgIH0pOwotCi0gIC8vIFRpbWVzdGFtcAot
ICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIlRpbWVzdGFtcE1pblZhbHVlIiwKLSAgICAgIFIi
KHsib3B0aW9uYWxUaW1lc3RhbXAiOiAiMDAwMS0wMS0wMVQwMDowMDowMFoifSkiLAotICAgICAg
Im9wdGlvbmFsX3RpbWVzdGFtcDoge3NlY29uZHM6IC02MjEzNTU5NjgwMH0iKTsKLSAgUnVuVmFs
aWRKc29uVGVzdCgKLSAgICAgICJUaW1lc3RhbXBNYXhWYWx1ZSIsCi0gICAgICBSIih7Im9wdGlv
bmFsVGltZXN0YW1wIjogIjk5OTktMTItMzFUMjM6NTk6NTkuOTk5OTk5OTk5WiJ9KSIsCi0gICAg
ICAib3B0aW9uYWxfdGltZXN0YW1wOiB7c2Vjb25kczogMjUzNDAyMzAwNzk5IG5hbm9zOiA5OTk5
OTk5OTl9Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiVGltZXN0YW1wUmVwZWF0ZWRW
YWx1ZSIsCi0gICAgICBSIih7Ci0gICAgICAgICJyZXBlYXRlZFRpbWVzdGFtcCI6IFsKLSAgICAg
ICAgICAiMDAwMS0wMS0wMVQwMDowMDowMFoiLAotICAgICAgICAgICI5OTk5LTEyLTMxVDIzOjU5
OjU5Ljk5OTk5OTk5OVoiCi0gICAgICAgIF0KLSAgICAgIH0pIiwKLSAgICAgICJyZXBlYXRlZF90
aW1lc3RhbXA6IHtzZWNvbmRzOiAtNjIxMzU1OTY4MDB9IgotICAgICAgInJlcGVhdGVkX3RpbWVz
dGFtcDoge3NlY29uZHM6IDI1MzQwMjMwMDc5OSBuYW5vczogOTk5OTk5OTk5fSIpOwotICBSdW5W
YWxpZEpzb25UZXN0KAotICAgICAgIlRpbWVzdGFtcFdpdGhQb3NpdGl2ZU9mZnNldCIsCi0gICAg
ICBSIih7Im9wdGlvbmFsVGltZXN0YW1wIjogIjE5NzAtMDEtMDFUMDg6MDA6MDArMDg6MDAifSki
LAotICAgICAgIm9wdGlvbmFsX3RpbWVzdGFtcDoge3NlY29uZHM6IDB9Iik7Ci0gIFJ1blZhbGlk
SnNvblRlc3QoCi0gICAgICAiVGltZXN0YW1wV2l0aE5lZ2F0aXZlT2Zmc2V0IiwKLSAgICAgIFIi
KHsib3B0aW9uYWxUaW1lc3RhbXAiOiAiMTk2OS0xMi0zMVQxNjowMDowMC0wODowMCJ9KSIsCi0g
ICAgICAib3B0aW9uYWxfdGltZXN0YW1wOiB7c2Vjb25kczogMH0iKTsKLQotICBFeHBlY3RQYXJz
ZUZhaWx1cmVGb3JKc29uKAotICAgICAgIlRpbWVzdGFtcEpzb25JbnB1dFRvb1NtYWxsIiwKLSAg
ICAgIFIiKHsib3B0aW9uYWxUaW1lc3RhbXAiOiAiMDAwMC0wMS0wMVQwMDowMDowMFoifSkiKTsK
LSAgRXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJUaW1lc3RhbXBKc29uSW5wdXRU
b29MYXJnZSIsCi0gICAgICBSIih7Im9wdGlvbmFsVGltZXN0YW1wIjogIjEwMDAwLTAxLTAxVDAw
OjAwOjAwWiJ9KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIlRpbWVz
dGFtcEpzb25JbnB1dE1pc3NpbmdaIiwKLSAgICAgIFIiKHsib3B0aW9uYWxUaW1lc3RhbXAiOiAi
MDAwMS0wMS0wMVQwMDowMDowMCJ9KSIpOwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAot
ICAgICAgIlRpbWVzdGFtcEpzb25JbnB1dE1pc3NpbmdUIiwKLSAgICAgIFIiKHsib3B0aW9uYWxU
aW1lc3RhbXAiOiAiMDAwMS0wMS0wMSAwMDowMDowMFoifSkiKTsKLSAgRXhwZWN0UGFyc2VGYWls
dXJlRm9ySnNvbigKLSAgICAgICJUaW1lc3RhbXBKc29uSW5wdXRMb3dlcmNhc2VaIiwKLSAgICAg
IFIiKHsib3B0aW9uYWxUaW1lc3RhbXAiOiAiMDAwMS0wMS0wMVQwMDowMDowMHoifSkiKTsKLSAg
RXhwZWN0UGFyc2VGYWlsdXJlRm9ySnNvbigKLSAgICAgICJUaW1lc3RhbXBKc29uSW5wdXRMb3dl
cmNhc2VUIiwKLSAgICAgIFIiKHsib3B0aW9uYWxUaW1lc3RhbXAiOiAiMDAwMS0wMS0wMXQwMDow
MDowMFoifSkiKTsKLSAgRXhwZWN0U2VyaWFsaXplRmFpbHVyZUZvckpzb24oCi0gICAgICAiVGlt
ZXN0YW1wUHJvdG9JbnB1dFRvb1NtYWxsIiwKLSAgICAgICJvcHRpb25hbF90aW1lc3RhbXA6IHtz
ZWNvbmRzOiAtNjIxMzU1OTY4MDF9Iik7Ci0gIEV4cGVjdFNlcmlhbGl6ZUZhaWx1cmVGb3JKc29u
KAotICAgICAgIlRpbWVzdGFtcFByb3RvSW5wdXRUb29MYXJnZSIsCi0gICAgICAib3B0aW9uYWxf
dGltZXN0YW1wOiB7c2Vjb25kczogMjUzNDAyMzAwODAwfSIpOwotICBSdW5WYWxpZEpzb25UZXN0
V2l0aFZhbGlkYXRvcigKLSAgICAgICJUaW1lc3RhbXBaZXJvTm9ybWFsaXplZCIsCi0gICAgICBS
Iih7Im9wdGlvbmFsVGltZXN0YW1wIjogIjE5NjktMTItMzFUMTY6MDA6MDAtMDg6MDAifSkiLAot
ICAgICAgW10oY29uc3QgSnNvbjo6VmFsdWUmIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZVsib3B0aW9uYWxUaW1lc3RhbXAiXS5hc1N0cmluZygpID09Ci0gICAgICAgICAgICAiMTk3MC0w
MS0wMVQwMDowMDowMFoiOwotICAgICAgfSk7Ci0gIFJ1blZhbGlkSnNvblRlc3RXaXRoVmFsaWRh
dG9yKAotICAgICAgIlRpbWVzdGFtcEhhc1plcm9GcmFjdGlvbmFsRGlnaXQiLAotICAgICAgUiIo
eyJvcHRpb25hbFRpbWVzdGFtcCI6ICIxOTcwLTAxLTAxVDAwOjAwOjAwLjAwMDAwMDAwMFoifSki
LAotICAgICAgW10oY29uc3QgSnNvbjo6VmFsdWUmIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZVsib3B0aW9uYWxUaW1lc3RhbXAiXS5hc1N0cmluZygpID09Ci0gICAgICAgICAgICAiMTk3
MC0wMS0wMVQwMDowMDowMFoiOwotICAgICAgfSk7Ci0gIFJ1blZhbGlkSnNvblRlc3RXaXRoVmFs
aWRhdG9yKAotICAgICAgIlRpbWVzdGFtcEhhczNGcmFjdGlvbmFsRGlnaXRzIiwKLSAgICAgIFIi
KHsib3B0aW9uYWxUaW1lc3RhbXAiOiAiMTk3MC0wMS0wMVQwMDowMDowMC4wMTAwMDAwMDBaIn0p
IiwKLSAgICAgIFtdKGNvbnN0IEpzb246OlZhbHVlJiB2YWx1ZSkgewotICAgICAgICByZXR1cm4g
dmFsdWVbIm9wdGlvbmFsVGltZXN0YW1wIl0uYXNTdHJpbmcoKSA9PQotICAgICAgICAgICAgIjE5
NzAtMDEtMDFUMDA6MDA6MDAuMDEwWiI7Ci0gICAgICB9KTsKLSAgUnVuVmFsaWRKc29uVGVzdFdp
dGhWYWxpZGF0b3IoCi0gICAgICAiVGltZXN0YW1wSGFzNkZyYWN0aW9uYWxEaWdpdHMiLAotICAg
ICAgUiIoeyJvcHRpb25hbFRpbWVzdGFtcCI6ICIxOTcwLTAxLTAxVDAwOjAwOjAwLjAwMDAxMDAw
MFoifSkiLAotICAgICAgW10oY29uc3QgSnNvbjo6VmFsdWUmIHZhbHVlKSB7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZVsib3B0aW9uYWxUaW1lc3RhbXAiXS5hc1N0cmluZygpID09Ci0gICAgICAgICAg
ICAiMTk3MC0wMS0wMVQwMDowMDowMC4wMDAwMTBaIjsKLSAgICAgIH0pOwotICBSdW5WYWxpZEpz
b25UZXN0V2l0aFZhbGlkYXRvcigKLSAgICAgICJUaW1lc3RhbXBIYXM5RnJhY3Rpb25hbERpZ2l0
cyIsCi0gICAgICBSIih7Im9wdGlvbmFsVGltZXN0YW1wIjogIjE5NzAtMDEtMDFUMDA6MDA6MDAu
MDAwMDAwMDEwWiJ9KSIsCi0gICAgICBbXShjb25zdCBKc29uOjpWYWx1ZSYgdmFsdWUpIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlWyJvcHRpb25hbFRpbWVzdGFtcCJdLmFzU3RyaW5nKCkgPT0KLSAg
ICAgICAgICAgICIxOTcwLTAxLTAxVDAwOjAwOjAwLjAwMDAwMDAxMFoiOwotICAgICAgfSk7Ci0K
LSAgLy8gRmllbGRNYXNrCi0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiRmllbGRNYXNrIiwK
LSAgICAgIFIiKHsib3B0aW9uYWxGaWVsZE1hc2siOiAiZm9vLGJhckJheiJ9KSIsCi0gICAgICBS
IihvcHRpb25hbF9maWVsZF9tYXNrOiB7cGF0aHM6ICJmb28iIHBhdGhzOiAiYmFyX2JheiJ9KSIp
OwotICBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKAotICAgICAgIkZpZWxkTWFza0ludmFsaWRD
aGFyYWN0ZXIiLAotICAgICAgUiIoeyJvcHRpb25hbEZpZWxkTWFzayI6ICJmb28sYmFyX2JhciJ9
KSIpOwotICBFeHBlY3RTZXJpYWxpemVGYWlsdXJlRm9ySnNvbigKLSAgICAgICJGaWVsZE1hc2tQ
YXRoc0RvbnRSb3VuZFRyaXAiLAotICAgICAgUiIob3B0aW9uYWxfZmllbGRfbWFzazoge3BhdGhz
OiAiZm9vQmFyIn0pIik7Ci0gIEV4cGVjdFNlcmlhbGl6ZUZhaWx1cmVGb3JKc29uKAotICAgICAg
IkZpZWxkTWFza051bWJlcnNEb250Um91bmRUcmlwIiwKLSAgICAgIFIiKG9wdGlvbmFsX2ZpZWxk
X21hc2s6IHtwYXRoczogImZvb18zX2JhciJ9KSIpOwotICBFeHBlY3RTZXJpYWxpemVGYWlsdXJl
Rm9ySnNvbigKLSAgICAgICJGaWVsZE1hc2tUb29NYW55VW5kZXJzY29yZSIsCi0gICAgICBSIihv
cHRpb25hbF9maWVsZF9tYXNrOiB7cGF0aHM6ICJmb29fX2JhciJ9KSIpOwotCi0gIC8vIFN0cnVj
dAotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIlN0cnVjdCIsCi0gICAgICBSIih7Ci0gICAg
ICAgICJvcHRpb25hbFN0cnVjdCI6IHsKLSAgICAgICAgICAibnVsbFZhbHVlIjogbnVsbCwKLSAg
ICAgICAgICAiaW50VmFsdWUiOiAxMjM0LAotICAgICAgICAgICJib29sVmFsdWUiOiB0cnVlLAot
ICAgICAgICAgICJkb3VibGVWYWx1ZSI6IDEyMzQuNTY3OCwKLSAgICAgICAgICAic3RyaW5nVmFs
dWUiOiAiSGVsbG8gd29ybGQhIiwKLSAgICAgICAgICAibGlzdFZhbHVlIjogWzEyMzQsICI1Njc4
Il0sCi0gICAgICAgICAgIm9iamVjdFZhbHVlIjogewotICAgICAgICAgICAgInZhbHVlIjogMAot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSkiLAotICAgICAgUiIoCi0gICAgICAgIG9w
dGlvbmFsX3N0cnVjdDogewotICAgICAgICAgIGZpZWxkczogewotICAgICAgICAgICAga2V5OiAi
bnVsbFZhbHVlIgotICAgICAgICAgICAgdmFsdWU6IHtudWxsX3ZhbHVlOiBOVUxMX1ZBTFVFfQot
ICAgICAgICAgIH0KLSAgICAgICAgICBmaWVsZHM6IHsKLSAgICAgICAgICAgIGtleTogImludFZh
bHVlIgotICAgICAgICAgICAgdmFsdWU6IHtudW1iZXJfdmFsdWU6IDEyMzR9Ci0gICAgICAgICAg
fQotICAgICAgICAgIGZpZWxkczogewotICAgICAgICAgICAga2V5OiAiYm9vbFZhbHVlIgotICAg
ICAgICAgICAgdmFsdWU6IHtib29sX3ZhbHVlOiB0cnVlfQotICAgICAgICAgIH0KLSAgICAgICAg
ICBmaWVsZHM6IHsKLSAgICAgICAgICAgIGtleTogImRvdWJsZVZhbHVlIgotICAgICAgICAgICAg
dmFsdWU6IHtudW1iZXJfdmFsdWU6IDEyMzQuNTY3OH0KLSAgICAgICAgICB9Ci0gICAgICAgICAg
ZmllbGRzOiB7Ci0gICAgICAgICAgICBrZXk6ICJzdHJpbmdWYWx1ZSIKLSAgICAgICAgICAgIHZh
bHVlOiB7c3RyaW5nX3ZhbHVlOiAiSGVsbG8gd29ybGQhIn0KLSAgICAgICAgICB9Ci0gICAgICAg
ICAgZmllbGRzOiB7Ci0gICAgICAgICAgICBrZXk6ICJsaXN0VmFsdWUiCi0gICAgICAgICAgICB2
YWx1ZTogewotICAgICAgICAgICAgICBsaXN0X3ZhbHVlOiB7Ci0gICAgICAgICAgICAgICAgdmFs
dWVzOiB7Ci0gICAgICAgICAgICAgICAgICBudW1iZXJfdmFsdWU6IDEyMzQKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgdmFsdWVzOiB7Ci0gICAgICAgICAgICAgICAgICBzdHJp
bmdfdmFsdWU6ICI1Njc4IgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBmaWVsZHM6IHsKLSAgICAgICAgICAg
IGtleTogIm9iamVjdFZhbHVlIgotICAgICAgICAgICAgdmFsdWU6IHsKLSAgICAgICAgICAgICAg
c3RydWN0X3ZhbHVlOiB7Ci0gICAgICAgICAgICAgICAgZmllbGRzOiB7Ci0gICAgICAgICAgICAg
ICAgICBrZXk6ICJ2YWx1ZSIKLSAgICAgICAgICAgICAgICAgIHZhbHVlOiB7Ci0gICAgICAgICAg
ICAgICAgICAgIG51bWJlcl92YWx1ZTogMAotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgKSIpOwotICAvLyBWYWx1ZQotICBSdW5WYWxpZEpzb25UZXN0KAotICAg
ICAgIlZhbHVlQWNjZXB0SW50ZWdlciIsCi0gICAgICBSIih7Im9wdGlvbmFsVmFsdWUiOiAxfSki
LAotICAgICAgIm9wdGlvbmFsX3ZhbHVlOiB7IG51bWJlcl92YWx1ZTogMX0iKTsKLSAgUnVuVmFs
aWRKc29uVGVzdCgKLSAgICAgICJWYWx1ZUFjY2VwdEZsb2F0IiwKLSAgICAgIFIiKHsib3B0aW9u
YWxWYWx1ZSI6IDEuNX0pIiwKLSAgICAgICJvcHRpb25hbF92YWx1ZTogeyBudW1iZXJfdmFsdWU6
IDEuNX0iKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJWYWx1ZUFjY2VwdEJvb2wiLAot
ICAgICAgUiIoeyJvcHRpb25hbFZhbHVlIjogZmFsc2V9KSIsCi0gICAgICAib3B0aW9uYWxfdmFs
dWU6IHsgYm9vbF92YWx1ZTogZmFsc2V9Iik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAi
VmFsdWVBY2NlcHROdWxsIiwKLSAgICAgIFIiKHsib3B0aW9uYWxWYWx1ZSI6IG51bGx9KSIsCi0g
ICAgICAib3B0aW9uYWxfdmFsdWU6IHsgbnVsbF92YWx1ZTogTlVMTF9WQUxVRX0iKTsKLSAgUnVu
VmFsaWRKc29uVGVzdCgKLSAgICAgICJWYWx1ZUFjY2VwdFN0cmluZyIsCi0gICAgICBSIih7Im9w
dGlvbmFsVmFsdWUiOiAiaGVsbG8ifSkiLAotICAgICAgUiIob3B0aW9uYWxfdmFsdWU6IHsgc3Ry
aW5nX3ZhbHVlOiAiaGVsbG8ifSkiKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJWYWx1
ZUFjY2VwdExpc3QiLAotICAgICAgUiIoeyJvcHRpb25hbFZhbHVlIjogWzAsICJoZWxsbyJdfSki
LAotICAgICAgUiIoCi0gICAgICAgIG9wdGlvbmFsX3ZhbHVlOiB7Ci0gICAgICAgICAgbGlzdF92
YWx1ZTogewotICAgICAgICAgICAgdmFsdWVzOiB7Ci0gICAgICAgICAgICAgIG51bWJlcl92YWx1
ZTogMAotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFsdWVzOiB7Ci0gICAgICAgICAgICAg
IHN0cmluZ192YWx1ZTogImhlbGxvIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgKSIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIlZhbHVlQWNjZXB0
T2JqZWN0IiwKLSAgICAgIFIiKHsib3B0aW9uYWxWYWx1ZSI6IHsidmFsdWUiOiAxfX0pIiwKLSAg
ICAgIFIiKAotICAgICAgICBvcHRpb25hbF92YWx1ZTogewotICAgICAgICAgIHN0cnVjdF92YWx1
ZTogewotICAgICAgICAgICAgZmllbGRzOiB7Ci0gICAgICAgICAgICAgIGtleTogInZhbHVlIgot
ICAgICAgICAgICAgICB2YWx1ZTogewotICAgICAgICAgICAgICAgIG51bWJlcl92YWx1ZTogMQot
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICApIik7Ci0KLSAgLy8gQW55Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAiQW55IiwK
LSAgICAgIFIiKHsKLSAgICAgICAgIm9wdGlvbmFsQW55IjogewotICAgICAgICAgICJAdHlwZSI6
ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2NvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcyIsCi0gICAgICAg
ICAgIm9wdGlvbmFsSW50MzIiOiAxMjM0NQotICAgICAgICB9Ci0gICAgICB9KSIsCi0gICAgICBS
IigKLSAgICAgICAgb3B0aW9uYWxfYW55OiB7Ci0gICAgICAgICAgW3R5cGUuZ29vZ2xlYXBpcy5j
b20vY29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzXSB7Ci0gICAgICAgICAgICBvcHRpb25hbF9pbnQz
MjogMTIzNDUKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICkiKTsKLSAgUnVuVmFsaWRK
c29uVGVzdCgKLSAgICAgICJBbnlOZXN0ZWQiLAotICAgICAgUiIoewotICAgICAgICAib3B0aW9u
YWxBbnkiOiB7Ci0gICAgICAgICAgIkB0eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xl
LnByb3RvYnVmLkFueSIsCi0gICAgICAgICAgInZhbHVlIjogewotICAgICAgICAgICAgIkB0eXBl
IjogInR5cGUuZ29vZ2xlYXBpcy5jb20vY29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzIiwKLSAgICAg
ICAgICAgICJvcHRpb25hbEludDMyIjogMTIzNDUKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgIH0pIiwKLSAgICAgIFIiKAotICAgICAgICBvcHRpb25hbF9hbnk6IHsKLSAgICAgICAgICBb
dHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuQW55XSB7Ci0gICAgICAgICAgICBb
dHlwZS5nb29nbGVhcGlzLmNvbS9jb25mb3JtYW5jZS5UZXN0QWxsVHlwZXNdIHsKLSAgICAgICAg
ICAgICAgb3B0aW9uYWxfaW50MzI6IDEyMzQ1Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICApIik7Ci0gIC8vIFRoZSBzcGVjaWFsICJAdHlwZSIgdGFnIGlzIG5v
dCByZXF1aXJlZCB0byBhcHBlYXIgZmlyc3QuCi0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAgICAi
QW55VW5vcmRlcmVkVHlwZVRhZyIsCi0gICAgICBSIih7Ci0gICAgICAgICJvcHRpb25hbEFueSI6
IHsKLSAgICAgICAgICAib3B0aW9uYWxJbnQzMiI6IDEyMzQ1LAotICAgICAgICAgICJAdHlwZSI6
ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2NvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcyIKLSAgICAgICAg
fQotICAgICAgfSkiLAotICAgICAgUiIoCi0gICAgICAgIG9wdGlvbmFsX2FueTogewotICAgICAg
ICAgIFt0eXBlLmdvb2dsZWFwaXMuY29tL2NvbmZvcm1hbmNlLlRlc3RBbGxUeXBlc10gewotICAg
ICAgICAgICAgb3B0aW9uYWxfaW50MzI6IDEyMzQ1Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICApIik7Ci0gIC8vIFdlbGwta25vd24gdHlwZXMgaW4gQW55LgotICBSdW5WYWxpZEpzb25U
ZXN0KAotICAgICAgIkFueVdpdGhJbnQzMlZhbHVlV3JhcHBlciIsCi0gICAgICBSIih7Ci0gICAg
ICAgICJvcHRpb25hbEFueSI6IHsKLSAgICAgICAgICAiQHR5cGUiOiAidHlwZS5nb29nbGVhcGlz
LmNvbS9nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZSIsCi0gICAgICAgICAgInZhbHVlIjogMTIz
NDUKLSAgICAgICAgfQotICAgICAgfSkiLAotICAgICAgUiIoCi0gICAgICAgIG9wdGlvbmFsX2Fu
eTogewotICAgICAgICAgIFt0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5JbnQz
MlZhbHVlXSB7Ci0gICAgICAgICAgICB2YWx1ZTogMTIzNDUKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICkiKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJBbnlXaXRoRHVyYXRp
b24iLAotICAgICAgUiIoewotICAgICAgICAib3B0aW9uYWxBbnkiOiB7Ci0gICAgICAgICAgIkB0
eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIiwKLSAg
ICAgICAgICAidmFsdWUiOiAiMS41cyIKLSAgICAgICAgfQotICAgICAgfSkiLAotICAgICAgUiIo
Ci0gICAgICAgIG9wdGlvbmFsX2FueTogewotICAgICAgICAgIFt0eXBlLmdvb2dsZWFwaXMuY29t
L2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbl0gewotICAgICAgICAgICAgc2Vjb25kczogMQotICAg
ICAgICAgICAgbmFub3M6IDUwMDAwMDAwMAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
KSIpOwotICBSdW5WYWxpZEpzb25UZXN0KAotICAgICAgIkFueVdpdGhUaW1lc3RhbXAiLAotICAg
ICAgUiIoewotICAgICAgICAib3B0aW9uYWxBbnkiOiB7Ci0gICAgICAgICAgIkB0eXBlIjogInR5
cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIsCi0gICAgICAgICAg
InZhbHVlIjogIjE5NzAtMDEtMDFUMDA6MDA6MDBaIgotICAgICAgICB9Ci0gICAgICB9KSIsCi0g
ICAgICBSIigKLSAgICAgICAgb3B0aW9uYWxfYW55OiB7Ci0gICAgICAgICAgW3R5cGUuZ29vZ2xl
YXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcF0gewotICAgICAgICAgICAgc2Vjb25k
czogMAotICAgICAgICAgICAgbmFub3M6IDAKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICkiKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJBbnlXaXRoRmllbGRNYXNrIiwKLSAg
ICAgIFIiKHsKLSAgICAgICAgIm9wdGlvbmFsQW55IjogewotICAgICAgICAgICJAdHlwZSI6ICJ0
eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2siLAotICAgICAgICAg
ICJ2YWx1ZSI6ICJmb28sYmFyQmF6IgotICAgICAgICB9Ci0gICAgICB9KSIsCi0gICAgICBSIigK
LSAgICAgICAgb3B0aW9uYWxfYW55OiB7Ci0gICAgICAgICAgW3R5cGUuZ29vZ2xlYXBpcy5jb20v
Z29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza10gewotICAgICAgICAgICAgcGF0aHM6IFsiZm9vIiwg
ImJhcl9iYXoiXQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgKSIpOwotICBSdW5WYWxp
ZEpzb25UZXN0KAotICAgICAgIkFueVdpdGhTdHJ1Y3QiLAotICAgICAgUiIoewotICAgICAgICAi
b3B0aW9uYWxBbnkiOiB7Ci0gICAgICAgICAgIkB0eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20v
Z29vZ2xlLnByb3RvYnVmLlN0cnVjdCIsCi0gICAgICAgICAgInZhbHVlIjogewotICAgICAgICAg
ICAgImZvbyI6IDEKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pIiwKLSAgICAgIFIi
KAotICAgICAgICBvcHRpb25hbF9hbnk6IHsKLSAgICAgICAgICBbdHlwZS5nb29nbGVhcGlzLmNv
bS9nb29nbGUucHJvdG9idWYuU3RydWN0XSB7Ci0gICAgICAgICAgICBmaWVsZHM6IHsKLSAgICAg
ICAgICAgICAga2V5OiAiZm9vIgotICAgICAgICAgICAgICB2YWx1ZTogewotICAgICAgICAgICAg
ICAgIG51bWJlcl92YWx1ZTogMQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICApIik7Ci0gIFJ1blZhbGlkSnNvblRlc3QoCi0gICAg
ICAiQW55V2l0aFZhbHVlRm9ySnNvbk9iamVjdCIsCi0gICAgICBSIih7Ci0gICAgICAgICJvcHRp
b25hbEFueSI6IHsKLSAgICAgICAgICAiQHR5cGUiOiAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29n
bGUucHJvdG9idWYuVmFsdWUiLAotICAgICAgICAgICJ2YWx1ZSI6IHsKLSAgICAgICAgICAgICJm
b28iOiAxCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KSIsCi0gICAgICBSIigKLSAg
ICAgICAgb3B0aW9uYWxfYW55OiB7Ci0gICAgICAgICAgW3R5cGUuZ29vZ2xlYXBpcy5jb20vZ29v
Z2xlLnByb3RvYnVmLlZhbHVlXSB7Ci0gICAgICAgICAgICBzdHJ1Y3RfdmFsdWU6IHsKLSAgICAg
ICAgICAgICAgZmllbGRzOiB7Ci0gICAgICAgICAgICAgICAga2V5OiAiZm9vIgotICAgICAgICAg
ICAgICAgIHZhbHVlOiB7Ci0gICAgICAgICAgICAgICAgICBudW1iZXJfdmFsdWU6IDEKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICkiKTsKLSAgUnVuVmFsaWRKc29uVGVzdCgKLSAgICAgICJBbnlX
aXRoVmFsdWVGb3JJbnRlZ2VyIiwKLSAgICAgIFIiKHsKLSAgICAgICAgIm9wdGlvbmFsQW55Ijog
ewotICAgICAgICAgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1
Zi5WYWx1ZSIsCi0gICAgICAgICAgInZhbHVlIjogMQotICAgICAgICB9Ci0gICAgICB9KSIsCi0g
ICAgICBSIigKLSAgICAgICAgb3B0aW9uYWxfYW55OiB7Ci0gICAgICAgICAgW3R5cGUuZ29vZ2xl
YXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlZhbHVlXSB7Ci0gICAgICAgICAgICBudW1iZXJfdmFs
dWU6IDEKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICkiKTsKLQotICBib29sIG9rID0g
dHJ1ZTsKLSAgaWYgKCFDaGVja1NldEVtcHR5KGV4cGVjdGVkX3RvX2ZhaWxfLAotICAgICAgICAg
ICAgICAgICAgICAgIlRoZXNlIHRlc3RzIHdlcmUgbGlzdGVkIGluIHRoZSBmYWlsdXJlIGxpc3Qs
IGJ1dCB0aGV5ICIKLSAgICAgICAgICAgICAgICAgICAgICJkb24ndCBleGlzdC4gIFJlbW92ZSB0
aGVtIGZyb20gdGhlIGZhaWx1cmUgbGlzdCIpKSB7Ci0gICAgb2sgPSBmYWxzZTsKLSAgfQotICBp
ZiAoIUNoZWNrU2V0RW1wdHkodW5leHBlY3RlZF9mYWlsaW5nX3Rlc3RzXywKLSAgICAgICAgICAg
ICAgICAgICAgICJUaGVzZSB0ZXN0cyBmYWlsZWQuICBJZiB0aGV5IGNhbid0IGJlIGZpeGVkIHJp
Z2h0IG5vdywgIgotICAgICAgICAgICAgICAgICAgICAgInlvdSBjYW4gYWRkIHRoZW0gdG8gdGhl
IGZhaWx1cmUgbGlzdCBzbyB0aGUgb3ZlcmFsbCAiCi0gICAgICAgICAgICAgICAgICAgICAic3Vp
dGUgY2FuIHN1Y2NlZWQiKSkgewotICAgIG9rID0gZmFsc2U7Ci0gIH0KLQotICAvLyBTb21ldGlt
ZXMgdGhlIHRlc3RlZSBtYXkgYmUgZml4ZWQgYmVmb3JlIHdlIHVwZGF0ZSB0aGUgZmFpbHVyZSBs
aXN0IChlLmcuLAotICAvLyB0aGUgdGVzdGVlIGlzIGZyb20gYSBkaWZmZXJlbnQgY29tcG9uZW50
KS4gV2Ugd2FybiBhYm91dCB0aGlzIGNhc2UgYnV0Ci0gIC8vIGRvbid0IGNvbnNpZGVyIGl0IGFu
IG92ZXJhbGwgdGVzdCBmYWlsdXJlLgotICBDaGVja1NldEVtcHR5KHVuZXhwZWN0ZWRfc3VjY2Vl
ZGluZ190ZXN0c18sCi0gICAgICAgICAgICAgICAgIlRoZXNlIHRlc3RzIHN1Y2NlZWRlZCwgZXZl
biB0aG91Z2ggdGhleSB3ZXJlIGxpc3RlZCBpbiAiCi0gICAgICAgICAgICAgICAgInRoZSBmYWls
dXJlIGxpc3QuICBSZW1vdmUgdGhlbSBmcm9tIHRoZSBmYWlsdXJlIGxpc3QiKTsKLQotICBpZiAo
dmVyYm9zZV8pIHsKLSAgICBDaGVja1NldEVtcHR5KHNraXBwZWRfLAotICAgICAgICAgICAgICAg
ICAgIlRoZXNlIHRlc3RzIHdlcmUgc2tpcHBlZCAocHJvYmFibHkgYmVjYXVzZSBzdXBwb3J0IGZv
ciBzb21lICIKLSAgICAgICAgICAgICAgICAgICJmZWF0dXJlcyBpcyBub3QgaW1wbGVtZW50ZWQp
Iik7Ci0gIH0KLQotICBTdHJpbmdBcHBlbmRGKCZvdXRwdXRfLAotICAgICAgICAgICAgICAgICJD
T05GT1JNQU5DRSBTVUlURSAlczogJWQgc3VjY2Vzc2VzLCAlZCBza2lwcGVkLCAiCi0gICAgICAg
ICAgICAgICAgIiVkIGV4cGVjdGVkIGZhaWx1cmVzLCAlZCB1bmV4cGVjdGVkIGZhaWx1cmVzLlxu
IiwKLSAgICAgICAgICAgICAgICBvayA/ICJQQVNTRUQiIDogIkZBSUxFRCIsIHN1Y2Nlc3Nlc18s
IHNraXBwZWRfLnNpemUoKSwKLSAgICAgICAgICAgICAgICBleHBlY3RlZF9mYWlsdXJlc18sIHVu
ZXhwZWN0ZWRfZmFpbGluZ190ZXN0c18uc2l6ZSgpKTsKLSAgU3RyaW5nQXBwZW5kRigmb3V0cHV0
XywgIlxuIik7Ci0KLSAgb3V0cHV0LT5hc3NpZ24ob3V0cHV0Xyk7Ci0KLSAgcmV0dXJuIG9rOwot
fQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvY29uZm9ybWFuY2UvY29uZm9ybWFuY2VfdGVzdC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9jb25m
b3JtYW5jZV90ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZmM5N2JjMWEy
YzQxNDU3OTBhMTdiNTA2NWEwNTYxOTkyMTk2ZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9jb25mb3JtYW5jZV90ZXN0LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLQotLy8gVGhpcyBmaWxlIGRlZmluZXMgYSBwcm90b2NvbCBmb3IgcnVubmluZyB0aGUg
Y29uZm9ybWFuY2UgdGVzdCBzdWl0ZQotLy8gaW4tcHJvY2Vzcy4gIEluIG90aGVyIHdvcmRzLCB0
aGUgc3VpdGUgaXRzZWxmIHdpbGwgcnVuIGluIHRoZSBzYW1lIHByb2Nlc3MgYXMKLS8vIHRoZSBj
b2RlIHVuZGVyIHRlc3QuCi0vLwotLy8gRm9yIHByb3MgYW5kIGNvbnMgb2YgdGhpcyBhcHByb2Fj
aCwgcGxlYXNlIHNlZSBjb25mb3JtYW5jZS5wcm90by4KLQotI2lmbmRlZiBDT05GT1JNQU5DRV9D
T05GT1JNQU5DRV9URVNUX0gKLSNkZWZpbmUgQ09ORk9STUFOQ0VfQ09ORk9STUFOQ0VfVEVTVF9I
Ci0KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3V0aWwvdHlwZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zv
cm1hdF9saXRlLmg+Ci0KLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9qc29uY3BwL2pzb24uaCIKLQot
bmFtZXNwYWNlIGNvbmZvcm1hbmNlIHsKLWNsYXNzIENvbmZvcm1hbmNlUmVxdWVzdDsKLWNsYXNz
IENvbmZvcm1hbmNlUmVzcG9uc2U7Ci1jbGFzcyBUZXN0QWxsVHlwZXM7Ci19ICAvLyBuYW1lc3Bh
Y2UgY29uZm9ybWFuY2UKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotCi1jbGFzcyBDb25mb3JtYW5jZVRlc3RSdW5uZXIgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+
Q29uZm9ybWFuY2VUZXN0UnVubmVyKCkge30KLQotICAvLyBDYWxsIHRvIHJ1biBhIHNpbmdsZSBj
b25mb3JtYW5jZSB0ZXN0LgotICAvLwotICAvLyAiaW5wdXQiIGlzIGEgc2VyaWFsaXplZCBjb25m
b3JtYW5jZS5Db25mb3JtYW5jZVJlcXVlc3QuCi0gIC8vICJvdXRwdXQiIHNob3VsZCBiZSBzZXQg
dG8gYSBzZXJpYWxpemVkIGNvbmZvcm1hbmNlLkNvbmZvcm1hbmNlUmVzcG9uc2UuCi0gIC8vCi0g
IC8vIElmIHRoZXJlIGlzIGFueSBlcnJvciBpbiBydW5uaW5nIHRoZSB0ZXN0IGl0c2VsZiwgc2V0
ICJydW50aW1lX2Vycm9yIiBpbgotICAvLyB0aGUgcmVzcG9uc2UuCi0gIHZpcnR1YWwgdm9pZCBS
dW5UZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0X25hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcqIG91dHB1dCkgPSAwOwotfTsKLQotLy8gQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSB0
ZXN0IHN1aXRlIGl0c2VsZi4gIFRvIHJ1biBpdCwgaW1wbGVtZW50IHlvdXIgb3duCi0vLyBjbGFz
cyBkZXJpdmVkIGZyb20gQ29uZm9ybWFuY2VUZXN0UnVubmVyIGFuZCB0aGVuIHdyaXRlIGNvZGUg
bGlrZToKLS8vCi0vLyAgICBjbGFzcyBNeUNvbmZvcm1hbmNlVGVzdFJ1bm5lciA6IHB1YmxpYyBD
b25mb3JtYW5jZVRlc3RSdW5uZXIgewotLy8gICAgIHB1YmxpYzoKLS8vICAgICAgdmlydHVhbCB2
b2lkIFJ1blRlc3QoLi4uKSB7Ci0vLyAgICAgICAgLy8gSU5TRVJUIFlPVVIgRlJBTUVXT1JLLVNQ
RUNJRklDIENPREUgSEVSRS4KLS8vICAgICAgfQotLy8gICAgfTsKLS8vCi0vLyAgICBpbnQgbWFp
bigpIHsKLS8vICAgICAgTXlDb25mb3JtYW5jZVRlc3RSdW5uZXIgcnVubmVyOwotLy8gICAgICBn
b29nbGU6OnByb3RvYnVmOjpDb25mb3JtYW5jZVRlc3RTdWl0ZSBzdWl0ZTsKLS8vCi0vLyAgICAg
IHN0ZDo6c3RyaW5nIG91dHB1dDsKLS8vICAgICAgc3VpdGUuUnVuU3VpdGUoJnJ1bm5lciwgJm91
dHB1dCk7Ci0vLyAgICB9Ci0vLwotY2xhc3MgQ29uZm9ybWFuY2VUZXN0U3VpdGUgewotIHB1Ymxp
YzoKLSAgQ29uZm9ybWFuY2VUZXN0U3VpdGUoKSA6IHZlcmJvc2VfKGZhbHNlKSB7fQotCi0gIHZv
aWQgU2V0VmVyYm9zZShib29sIHZlcmJvc2UpIHsgdmVyYm9zZV8gPSB2ZXJib3NlOyB9Ci0KLSAg
Ly8gU2V0cyB0aGUgbGlzdCBvZiB0ZXN0cyB0aGF0IGFyZSBleHBlY3RlZCB0byBmYWlsIHdoZW4g
UnVuU3VpdGUoKSBpcyBjYWxsZWQuCi0gIC8vIFJ1blN1aXRlKCkgd2lsbCBmYWlsIHVubGVzcyB0
aGUgc2V0IG9mIGZhaWxpbmcgdGVzdHMgaXMgZXhhY3RseSB0aGUgc2FtZQotICAvLyBhcyB0aGlz
IGxpc3QuCi0gIHZvaWQgU2V0RmFpbHVyZUxpc3QoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+JiBmYWlsdXJlX2xpc3QpOwotCi0gIC8vIFJ1biBhbGwgdGhlIGNvbmZvcm1hbmNlIHRlc3Rz
IGFnYWluc3QgdGhlIGdpdmVuIHRlc3QgcnVubmVyLgotICAvLyBUZXN0IG91dHB1dCB3aWxsIGJl
IHN0b3JlZCBpbiAib3V0cHV0Ii4KLSAgLy8KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzZXQg
b2YgZmFpbGluZyB0ZXN0cyB3YXMgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUKLSAgLy8gZmFpbHVy
ZSBsaXN0LiAgSWYgU2V0RmFpbHVyZUxpc3QoKSB3YXMgbm90IGNhbGxlZCwgcmV0dXJucyB0cnVl
IGlmIGFsbAotICAvLyB0ZXN0cyBwYXNzZWQuCi0gIGJvb2wgUnVuU3VpdGUoQ29uZm9ybWFuY2VU
ZXN0UnVubmVyKiBydW5uZXIsIHN0ZDo6c3RyaW5nKiBvdXRwdXQpOwotCi0gcHJpdmF0ZToKLSAg
dm9pZCBSZXBvcnRTdWNjZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0X25hbWUpOwotICB2b2lk
IFJlcG9ydEZhaWx1cmUoY29uc3Qgc3RyaW5nJiB0ZXN0X25hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjb25mb3JtYW5jZTo6Q29uZm9ybWFuY2VSZXF1ZXN0JiByZXF1ZXN0LAotICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY29uZm9ybWFuY2U6OkNvbmZvcm1hbmNlUmVzcG9uc2Um
IHJlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZm10LCAuLi4pOwot
ICB2b2lkIFJlcG9ydFNraXAoY29uc3Qgc3RyaW5nJiB0ZXN0X25hbWUsCi0gICAgICAgICAgICAg
ICAgICBjb25zdCBjb25mb3JtYW5jZTo6Q29uZm9ybWFuY2VSZXF1ZXN0JiByZXF1ZXN0LAotICAg
ICAgICAgICAgICAgICAgY29uc3QgY29uZm9ybWFuY2U6OkNvbmZvcm1hbmNlUmVzcG9uc2UmIHJl
c3BvbnNlKTsKLSAgdm9pZCBSdW5UZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0X25hbWUsCi0g
ICAgICAgICAgICAgICBjb25zdCBjb25mb3JtYW5jZTo6Q29uZm9ybWFuY2VSZXF1ZXN0JiByZXF1
ZXN0LAotICAgICAgICAgICAgICAgY29uZm9ybWFuY2U6OkNvbmZvcm1hbmNlUmVzcG9uc2UqIHJl
c3BvbnNlKTsKLSAgdm9pZCBSdW5WYWxpZElucHV0VGVzdChjb25zdCBzdHJpbmcmIHRlc3RfbmFt
ZSwgY29uc3Qgc3RyaW5nJiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25mb3Jt
YW5jZTo6V2lyZUZvcm1hdCBpbnB1dF9mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RyaW5nJiBlcXVpdmFsZW50X3RleHRfZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbmZvcm1hbmNlOjpXaXJlRm9ybWF0IHJlcXVlc3RlZF9vdXRwdXQpOwotICB2b2lk
IFJ1blZhbGlkSnNvblRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0X25hbWUsIGNvbnN0IHN0cmluZyYg
aW5wdXRfanNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZXF1aXZh
bGVudF90ZXh0X2Zvcm1hdCk7Ci0gIHZvaWQgUnVuVmFsaWRKc29uVGVzdFdpdGhQcm90b2J1Zklu
cHV0KGNvbnN0IHN0cmluZyYgdGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjb25mb3JtYW5jZTo6VGVzdEFsbFR5cGVzJiBpbnB1dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBlcXVp
dmFsZW50X3RleHRfZm9ybWF0KTsKLQotICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25z
dCBKc29uOjpWYWx1ZSYpPiBWYWxpZGF0b3I7Ci0gIHZvaWQgUnVuVmFsaWRKc29uVGVzdFdpdGhW
YWxpZGF0b3IoY29uc3Qgc3RyaW5nJiB0ZXN0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBpbnB1dF9qc29uLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbGlkYXRvciYgdmFsaWRhdG9yKTsKLSAgdm9p
ZCBFeHBlY3RQYXJzZUZhaWx1cmVGb3JKc29uKGNvbnN0IHN0cmluZyYgdGVzdF9uYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBpbnB1dF9qc29uKTsK
LSAgdm9pZCBFeHBlY3RTZXJpYWxpemVGYWlsdXJlRm9ySnNvbihjb25zdCBzdHJpbmcmIHRlc3Rf
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcm
IHRleHRfZm9ybWF0KTsKLSAgdm9pZCBFeHBlY3RQYXJzZUZhaWx1cmVGb3JQcm90byhjb25zdCBz
dGQ6OnN0cmluZyYgcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIHRlc3RfbmFtZSk7Ci0gIHZvaWQgRXhwZWN0SGFyZFBhcnNlRmFpbHVy
ZUZvclByb3RvKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm90bywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RfbmFtZSk7Ci0gIHZvaWQg
VGVzdFByZW1hdHVyZUVPRkZvclR5cGUoZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9y
OjpUeXBlIHR5cGUpOwotICBib29sIENoZWNrU2V0RW1wdHkoY29uc3Qgc2V0PHN0cmluZz4mIHNl
dF90b19jaGVjaywgY29uc3QgY2hhciogbXNnKTsKLSAgQ29uZm9ybWFuY2VUZXN0UnVubmVyKiBy
dW5uZXJfOwotICBpbnQgc3VjY2Vzc2VzXzsKLSAgaW50IGV4cGVjdGVkX2ZhaWx1cmVzXzsKLSAg
Ym9vbCB2ZXJib3NlXzsKLSAgc3RkOjpzdHJpbmcgb3V0cHV0XzsKLQotICAvLyBUaGUgc2V0IG9m
IHRlc3QgbmFtZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBpbiB0aGlzIHJ1biwgYnV0IGhh
dmVuJ3QKLSAgLy8gZmFpbGVkIHlldC4KLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGV4cGVjdGVk
X3RvX2ZhaWxfOwotCi0gIC8vIFRoZSBzZXQgb2YgdGVzdCBuYW1lcyB0aGF0IGhhdmUgYmVlbiBy
dW4uICBVc2VkIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBubwotICAvLyBkdXBsaWNhdGUgbmFt
ZXMgaW4gdGhlIHN1aXRlLgotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gdGVzdF9uYW1lc187Ci0K
LSAgLy8gVGhlIHNldCBvZiB0ZXN0cyB0aGF0IGZhaWxlZCwgYnV0IHdlcmVuJ3QgZXhwZWN0ZWQg
dG8uCi0gIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiB1bmV4cGVjdGVkX2ZhaWxpbmdfdGVzdHNfOwot
Ci0gIC8vIFRoZSBzZXQgb2YgdGVzdHMgdGhhdCBzdWNjZWVkZWQsIGJ1dCB3ZXJlbid0IGV4cGVj
dGVkIHRvLgotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gdW5leHBlY3RlZF9zdWNjZWVkaW5nX3Rl
c3RzXzsKLQotICAvLyBUaGUgc2V0IG9mIHRlc3RzIHRoYXQgdGhlIHRlc3RlZSBvcHRlZCBvdXQg
b2Y7Ci0gIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBza2lwcGVkXzsKLQotICBnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6c2NvcGVkX3B0cjxnb29nbGU6OnByb3RvYnVmOjp1dGlsOjpUeXBlUmVz
b2x2ZXI+Ci0gICAgICB0eXBlX3Jlc29sdmVyXzsKLSAgc3RkOjpzdHJpbmcgdHlwZV91cmxfOwot
fTsKLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0K
LSNlbmRpZiAgLy8gQ09ORk9STUFOQ0VfQ09ORk9STUFOQ0VfVEVTVF9ICmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Nv
bmZvcm1hbmNlL2NvbmZvcm1hbmNlX3Rlc3RfcnVubmVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9jb25mb3Jt
YW5jZV90ZXN0X3J1bm5lci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc2YTYw
YjlhYTZlZGYxZmY5ZTQ1OWFiMGY4MzgxNWExYWQzNmVlOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2NvbmZvcm1hbmNlX3Rlc3RfcnVu
bmVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgYSBwcm9ncmFtIGZvciBy
dW5uaW5nIHRoZSB0ZXN0IHN1aXRlIGluIGEgc2VwYXJhdGUKLS8vIHByb2Nlc3MuICBUaGUgb3Ro
ZXIgYWx0ZXJuYXRpdmUgaXMgdG8gcnVuIHRoZSBzdWl0ZSBpbi1wcm9jZXNzLiAgU2VlCi0vLyBj
b25mb3JtYW5jZS5wcm90byBmb3IgcHJvcy9jb25zIG9mIHRoZXNlIHR3byBvcHRpb25zLgotLy8K
LS8vIFRoaXMgcHJvZ3JhbSB3aWxsIGZvcmsgdGhlIHByb2Nlc3MgdW5kZXIgdGVzdCBhbmQgY29t
bXVuaWNhdGUgd2l0aCBpdCBvdmVyCi0vLyBpdHMgc3RkaW4vc3Rkb3V0OgotLy8KLS8vICAgICAr
LS0tLS0tLS0rICAgcGlwZSAgICstLS0tLS0tLS0tKwotLy8gICAgIHwgdGVzdGVyIHwgPC0tLS0t
LT4gfCB0ZXN0ZWUgICB8Ci0vLyAgICAgfCAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwK
LS8vICAgICB8ICBDKysgICB8ICAgICAgICAgIHwgYW55IGxhbmcgfAotLy8gICAgICstLS0tLS0t
LSsgICAgICAgICAgKy0tLS0tLS0tLS0rCi0vLwotLy8gVGhlIHRlc3RlciBjb250YWlucyBhbGwg
b2YgdGhlIHRlc3QgY2FzZXMgYW5kIHRoZWlyIGV4cGVjdGVkIG91dHB1dC4KLS8vIFRoZSB0ZXN0
ZWUgaXMgYSBzaW1wbGUgcHJvZ3JhbSB3cml0dGVuIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2UgdGhh
dCByZWFkcwotLy8gZWFjaCB0ZXN0IGNhc2UgYW5kIGF0dGVtcHRzIHRvIHByb2R1Y2UgYWNjZXB0
YWJsZSBvdXRwdXQgZm9yIGl0LgotLy8KLS8vIEV2ZXJ5IHRlc3QgY29uc2lzdHMgb2YgYSBDb25m
b3JtYW5jZVJlcXVlc3QvQ29uZm9ybWFuY2VSZXNwb25zZQotLy8gcmVxdWVzdC9yZXBseSBwYWly
LiAgVGhlIHByb3RvY29sIG9uIHRoZSBwaXBlIGlzIHNpbXBseToKLS8vCi0vLyAgIDEuIHRlc3Rl
ciBzZW5kcyA0LWJ5dGUgbGVuZ3RoIE4gKGxpdHRsZSBlbmRpYW4pCi0vLyAgIDIuIHRlc3RlciBz
ZW5kcyBOIGJ5dGVzIHJlcHJlc2VudGluZyBhIENvbmZvcm1hbmNlUmVxdWVzdCBwcm90bwotLy8g
ICAzLiB0ZXN0ZWUgc2VuZHMgNC1ieXRlIGxlbmd0aCBNIChsaXR0bGUgZW5kaWFuKQotLy8gICA0
LiB0ZXN0ZWUgc2VuZHMgTSBieXRlcyByZXByZXNlbnRpbmcgYSBDb25mb3JtYW5jZVJlc3BvbnNl
IHByb3RvCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNs
dWRlIDxmc3RyZWFtPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy93YWl0
Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3ByaW50Zi5oPgotCi0jaW5jbHVkZSAiY29uZm9y
bWFuY2UucGIuaCIKLSNpbmNsdWRlICJjb25mb3JtYW5jZV90ZXN0LmgiCi0KLXVzaW5nIGNvbmZv
cm1hbmNlOjpDb25mb3JtYW5jZVJlcXVlc3Q7Ci11c2luZyBjb25mb3JtYW5jZTo6Q29uZm9ybWFu
Y2VSZXNwb25zZTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpzY29wZWRfYXJy
YXk7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjpTdHJpbmdBcHBlbmRGOwotdXNpbmcgc3RkOjpz
dHJpbmc7Ci11c2luZyBzdGQ6OnZlY3RvcjsKLQotI2RlZmluZSBTVFJJTkdJRlkoeCkgI3gKLSNk
ZWZpbmUgVE9TVFJJTkcoeCkgU1RSSU5HSUZZKHgpCi0jZGVmaW5lIENIRUNLX1NZU0NBTEwoY2Fs
bCkgXAotICBpZiAoY2FsbCA8IDApIHsgXAotICAgIHBlcnJvcigjY2FsbCAiICIgX19GSUxFX18g
IjoiIFRPU1RSSU5HKF9fTElORV9fKSk7IFwKLSAgICBleGl0KDEpOyBcCi0gIH0KLQotLy8gVGVz
dCBydW5uZXIgdGhhdCBzcGF3bnMgdGhlIHByb2Nlc3MgYmVpbmcgdGVzdGVkIGFuZCBjb21tdW5p
Y2F0ZXMgd2l0aCBpdAotLy8gb3ZlciBhIHBpcGUuCi1jbGFzcyBGb3JrUGlwZVJ1bm5lciA6IHB1
YmxpYyBnb29nbGU6OnByb3RvYnVmOjpDb25mb3JtYW5jZVRlc3RSdW5uZXIgewotIHB1YmxpYzoK
LSAgRm9ya1BpcGVSdW5uZXIoY29uc3Qgc3RkOjpzdHJpbmcgJmV4ZWN1dGFibGUpCi0gICAgICA6
IGNoaWxkX3BpZF8oLTEpLCBleGVjdXRhYmxlXyhleGVjdXRhYmxlKSB7fQotCi0gIHZpcnR1YWwg
fkZvcmtQaXBlUnVubmVyKCkge30KLQotICB2b2lkIFJ1blRlc3QoY29uc3Qgc3RkOjpzdHJpbmcm
IHRlc3RfbmFtZSwKLSAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXF1ZXN0LAot
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIHJlc3BvbnNlKSB7Ci0gICAgaWYgKGNoaWxkX3Bp
ZF8gPCAwKSB7Ci0gICAgICBTcGF3blRlc3RQcm9ncmFtKCk7Ci0gICAgfQotCi0gICAgY3VycmVu
dF90ZXN0X25hbWVfID0gdGVzdF9uYW1lOwotCi0gICAgdWludDMyX3QgbGVuID0gcmVxdWVzdC5z
aXplKCk7Ci0gICAgQ2hlY2tlZFdyaXRlKHdyaXRlX2ZkXywgJmxlbiwgc2l6ZW9mKHVpbnQzMl90
KSk7Ci0gICAgQ2hlY2tlZFdyaXRlKHdyaXRlX2ZkXywgcmVxdWVzdC5jX3N0cigpLCByZXF1ZXN0
LnNpemUoKSk7Ci0KLSAgICBpZiAoIVRyeVJlYWQocmVhZF9mZF8sICZsZW4sIHNpemVvZih1aW50
MzJfdCkpKSB7Ci0gICAgICAvLyBXZSBmYWlsZWQgdG8gcmVhZCBmcm9tIHRoZSBjaGlsZCwgYXNz
dW1lIGEgY3Jhc2ggYW5kIHRyeSB0byByZWFwLgotICAgICAgR09PR0xFX0xPRyhJTkZPKSA8PCAi
VHJ5aW5nIHRvIHJlYXAgY2hpbGQsIHBpZD0iIDw8IGNoaWxkX3BpZF87Ci0KLSAgICAgIGludCBz
dGF0dXM7Ci0gICAgICB3YWl0cGlkKGNoaWxkX3BpZF8sICZzdGF0dXMsIFdFWElURUQpOwotCi0g
ICAgICBzdHJpbmcgZXJyb3JfbXNnOwotICAgICAgaWYgKFdJRkVYSVRFRChzdGF0dXMpKSB7Ci0g
ICAgICAgIFN0cmluZ0FwcGVuZEYoJmVycm9yX21zZywKLSAgICAgICAgICAgICAgICAgICAgICAi
Y2hpbGQgZXhpdGVkLCBzdGF0dXM9JWQiLCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKLSAgICAgIH0g
ZWxzZSBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkgewotICAgICAgICBTdHJpbmdBcHBlbmRGKCZl
cnJvcl9tc2csCi0gICAgICAgICAgICAgICAgICAgICAgImNoaWxkIGtpbGxlZCBieSBzaWduYWwg
JWQiLCBXVEVSTVNJRyhzdGF0dXMpKTsKLSAgICAgIH0KLSAgICAgIEdPT0dMRV9MT0coSU5GTykg
PDwgZXJyb3JfbXNnOwotICAgICAgY2hpbGRfcGlkXyA9IC0xOwotCi0gICAgICBjb25mb3JtYW5j
ZTo6Q29uZm9ybWFuY2VSZXNwb25zZSByZXNwb25zZV9vYmo7Ci0gICAgICByZXNwb25zZV9vYmou
c2V0X3J1bnRpbWVfZXJyb3IoZXJyb3JfbXNnKTsKLSAgICAgIHJlc3BvbnNlX29iai5TZXJpYWxp
emVUb1N0cmluZyhyZXNwb25zZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzcG9u
c2UtPnJlc2l6ZShsZW4pOwotICAgIENoZWNrZWRSZWFkKHJlYWRfZmRfLCAodm9pZCopcmVzcG9u
c2UtPmNfc3RyKCksIGxlbik7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIFRPRE8oaGFiZXJtYW4p
OiBtYWtlIHRoaXMgd29yayBvbiBXaW5kb3dzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZXNlCi0gIC8v
IFVOSVgtc3BlY2lmaWMgQVBJcy4KLSAgLy8KLSAgLy8gVGhlcmUgaXMgYSBwbGF0Zm9ybS1hZ25v
c3RpYyBBUEkgaW4KLSAgLy8gICAgc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9zdWJwcm9j
ZXNzLmgKLSAgLy8KLSAgLy8gSG93ZXZlciB0aGF0IEFQSSBvbmx5IHN1cHBvcnRzIHNlbmRpbmcg
YSBzaW5nbGUgbWVzc2FnZSB0byB0aGUgc3VicHJvY2Vzcy4KLSAgLy8gV2UgcmVhbGx5IHdhbnQg
dG8gYmUgYWJsZSB0byBzZW5kIG1lc3NhZ2VzIGFuZCByZWNlaXZlIHJlc3BvbnNlcyBvbmUgYXQg
YQotICAvLyB0aW1lOgotICAvLwotICAvLyAxLiBTcGF3bmluZyBhIG5ldyBwcm9jZXNzIGZvciBl
YWNoIHRlc3Qgd291bGQgdGFrZSB3YXkgdG9vIGxvbmcgZm9yIHRob3VzYW5kcwotICAvLyAgICBv
ZiB0ZXN0cyBhbmQgc3VicHJvY2Vzc2VzIGxpa2UgamF2YSB0aGF0IGNhbiB0YWtlIDEwMG1zIG9y
IG1vcmUgdG8gc3RhcnQKLSAgLy8gICAgdXAuCi0gIC8vCi0gIC8vIDIuIFNlbmRpbmcgYWxsIHRo
ZSB0ZXN0cyBpbiBvbmUgYmlnIG1lc3NhZ2UgYW5kIHJlY2VpdmluZyBhbGwgcmVzdWx0cyBpbiBv
bmUKLSAgLy8gICAgYmlnIG1lc3NhZ2Ugd291bGQgdGFrZSBhd2F5IG91ciB2aXNpYmlsaXR5IGFi
b3V0IHdoaWNoIHRlc3QocykgY2F1c2VkIGEKLSAgLy8gICAgY3Jhc2ggb3Igb3RoZXIgZmF0YWwg
ZXJyb3IuICBJdCB3b3VsZCBhbHNvIGdpdmUgdXMgb25seSBhIHNpbmdsZSBmYWlsdXJlCi0gIC8v
ICAgIGluc3RlYWQgb2YgYWxsIG9mIHRoZW0uCi0gIHZvaWQgU3Bhd25UZXN0UHJvZ3JhbSgpIHsK
LSAgICBpbnQgdG9wcm9jX3BpcGVfZmRbMl07Ci0gICAgaW50IGZyb21wcm9jX3BpcGVfZmRbMl07
Ci0gICAgaWYgKHBpcGUodG9wcm9jX3BpcGVfZmQpIDwgMCB8fCBwaXBlKGZyb21wcm9jX3BpcGVf
ZmQpIDwgMCkgewotICAgICAgcGVycm9yKCJwaXBlIik7Ci0gICAgICBleGl0KDEpOwotICAgIH0K
LQotICAgIHBpZF90IHBpZCA9IGZvcmsoKTsKLSAgICBpZiAocGlkIDwgMCkgewotICAgICAgcGVy
cm9yKCJmb3JrIik7Ci0gICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGlmIChwaWQpIHsKLSAg
ICAgIC8vIFBhcmVudC4KLSAgICAgIENIRUNLX1NZU0NBTEwoY2xvc2UodG9wcm9jX3BpcGVfZmRb
MF0pKTsKLSAgICAgIENIRUNLX1NZU0NBTEwoY2xvc2UoZnJvbXByb2NfcGlwZV9mZFsxXSkpOwot
ICAgICAgd3JpdGVfZmRfID0gdG9wcm9jX3BpcGVfZmRbMV07Ci0gICAgICByZWFkX2ZkXyA9IGZy
b21wcm9jX3BpcGVfZmRbMF07Ci0gICAgICBjaGlsZF9waWRfID0gcGlkOwotICAgIH0gZWxzZSB7
Ci0gICAgICAvLyBDaGlsZC4KLSAgICAgIENIRUNLX1NZU0NBTEwoY2xvc2UoU1RESU5fRklMRU5P
KSk7Ci0gICAgICBDSEVDS19TWVNDQUxMKGNsb3NlKFNURE9VVF9GSUxFTk8pKTsKLSAgICAgIENI
RUNLX1NZU0NBTEwoZHVwMih0b3Byb2NfcGlwZV9mZFswXSwgU1RESU5fRklMRU5PKSk7Ci0gICAg
ICBDSEVDS19TWVNDQUxMKGR1cDIoZnJvbXByb2NfcGlwZV9mZFsxXSwgU1RET1VUX0ZJTEVOTykp
OwotCi0gICAgICBDSEVDS19TWVNDQUxMKGNsb3NlKHRvcHJvY19waXBlX2ZkWzBdKSk7Ci0gICAg
ICBDSEVDS19TWVNDQUxMKGNsb3NlKGZyb21wcm9jX3BpcGVfZmRbMV0pKTsKLSAgICAgIENIRUNL
X1NZU0NBTEwoY2xvc2UodG9wcm9jX3BpcGVfZmRbMV0pKTsKLSAgICAgIENIRUNLX1NZU0NBTEwo
Y2xvc2UoZnJvbXByb2NfcGlwZV9mZFswXSkpOwotCi0gICAgICBzY29wZWRfYXJyYXk8Y2hhcj4g
ZXhlY3V0YWJsZShuZXcgY2hhcltleGVjdXRhYmxlXy5zaXplKCkgKyAxXSk7Ci0gICAgICBtZW1j
cHkoZXhlY3V0YWJsZS5nZXQoKSwgZXhlY3V0YWJsZV8uY19zdHIoKSwgZXhlY3V0YWJsZV8uc2l6
ZSgpKTsKLSAgICAgIGV4ZWN1dGFibGVbZXhlY3V0YWJsZV8uc2l6ZSgpXSA9ICdcMCc7Ci0KLSAg
ICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSA9IHtleGVjdXRhYmxlLmdldCgpLCBOVUxMfTsKLSAgICAg
IENIRUNLX1NZU0NBTEwoZXhlY3YoZXhlY3V0YWJsZS5nZXQoKSwgYXJndikpOyAgLy8gTmV2ZXIg
cmV0dXJucy4KLSAgICB9Ci0gIH0KLQotICB2b2lkIENoZWNrZWRXcml0ZShpbnQgZmQsIGNvbnN0
IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikgewotICAgIGlmICh3cml0ZShmZCwgYnVmLCBsZW4pICE9
IGxlbikgewotICAgICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgY3VycmVudF90ZXN0X25hbWVfCi0g
ICAgICAgICAgICAgICAgICAgICAgICA8PCAiOiBlcnJvciB3cml0aW5nIHRvIHRlc3QgcHJvZ3Jh
bTogIgotICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RyZXJyb3IoZXJybm8pOwotICAgIH0K
LSAgfQotCi0gIGJvb2wgVHJ5UmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikgewot
ICAgIHNpemVfdCBvZnMgPSAwOwotICAgIHdoaWxlIChsZW4gPiAwKSB7Ci0gICAgICBzc2l6ZV90
IGJ5dGVzX3JlYWQgPSByZWFkKGZkLCAoY2hhciopYnVmICsgb2ZzLCBsZW4pOwotCi0gICAgICBp
ZiAoYnl0ZXNfcmVhZCA9PSAwKSB7Ci0gICAgICAgIEdPT0dMRV9MT0coRVJST1IpIDw8IGN1cnJl
bnRfdGVzdF9uYW1lXwotICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiOiB1bmV4cGVjdGVk
IEVPRiBmcm9tIHRlc3QgcHJvZ3JhbSI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0g
ZWxzZSBpZiAoYnl0ZXNfcmVhZCA8IDApIHsKLSAgICAgICAgR09PR0xFX0xPRyhFUlJPUikgPDwg
Y3VycmVudF90ZXN0X25hbWVfCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICI6IGVycm9y
IHJlYWRpbmcgZnJvbSB0ZXN0IHByb2dyYW06ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
PDwgc3RyZXJyb3IoZXJybm8pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAg
ICAgIGxlbiAtPSBieXRlc19yZWFkOwotICAgICAgb2ZzICs9IGJ5dGVzX3JlYWQ7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICB2b2lkIENoZWNrZWRSZWFkKGludCBmZCwgdm9p
ZCAqYnVmLCBzaXplX3QgbGVuKSB7Ci0gICAgaWYgKCFUcnlSZWFkKGZkLCBidWYsIGxlbikpIHsK
LSAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8IGN1cnJlbnRfdGVzdF9uYW1lXwotICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgIjogZXJyb3IgcmVhZGluZyBmcm9tIHRlc3QgcHJvZ3JhbTogIgot
ICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RyZXJyb3IoZXJybm8pOwotICAgIH0KLSAgfQot
Ci0gIGludCB3cml0ZV9mZF87Ci0gIGludCByZWFkX2ZkXzsKLSAgcGlkX3QgY2hpbGRfcGlkXzsK
LSAgc3RkOjpzdHJpbmcgZXhlY3V0YWJsZV87Ci0gIHN0ZDo6c3RyaW5nIGN1cnJlbnRfdGVzdF9u
YW1lXzsKLX07Ci0KLXZvaWQgVXNhZ2VFcnJvcigpIHsKLSAgZnByaW50ZihzdGRlcnIsCi0gICAg
ICAgICAgIlVzYWdlOiBjb25mb3JtYW5jZS10ZXN0LXJ1bm5lciBbb3B0aW9uc10gPHRlc3QtcHJv
Z3JhbT5cbiIpOwotICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0gIGZwcmludGYoc3RkZXJyLCAi
T3B0aW9uczpcbiIpOwotICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAiICAtLWZhaWx1cmVf
bGlzdCA8ZmlsZW5hbWU+ICAgVXNlIHRvIHNwZWNpZnkgbGlzdCBvZiB0ZXN0c1xuIik7Ci0gIGZw
cmludGYoc3RkZXJyLAotICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGF0IGFyZSBleHBlY3RlZCB0byBmYWlsLiAgRmlsZVxuIik7Ci0gIGZwcmludGYoc3RkZXJyLAot
ICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgY29udGFpbiBv
bmUgdGVzdCBuYW1lIHBlclxuIik7Ci0gIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLiAgVXNlICcjJyBmb3IgY29tbWVudHMuXG4i
KTsKLSAgZXhpdCgxKTsKLX0KLQotdm9pZCBQYXJzZUZhaWx1cmVMaXN0KGNvbnN0IGNoYXIgKmZp
bGVuYW1lLCB2ZWN0b3I8c3RyaW5nPiogZmFpbHVyZV9saXN0KSB7Ci0gIHN0ZDo6aWZzdHJlYW0g
aW5maWxlKGZpbGVuYW1lKTsKLQotICBpZiAoIWluZmlsZS5pc19vcGVuKCkpIHsKLSAgICBmcHJp
bnRmKHN0ZGVyciwgIkNvdWxkbid0IG9wZW4gZmFpbHVyZSBsaXN0IGZpbGU6ICVzXG4iLCBmaWxl
bmFtZSk7Ci0gICAgZXhpdCgxKTsKLSAgfQotCi0gIGZvciAoc3RyaW5nIGxpbmU7IGdldGxpbmUo
aW5maWxlLCBsaW5lKTspIHsKLSAgICAvLyBSZW1vdmUgd2hpdGVzcGFjZS4KLSAgICBsaW5lLmVy
YXNlKHN0ZDo6cmVtb3ZlX2lmKGxpbmUuYmVnaW4oKSwgbGluZS5lbmQoKSwgOjppc3NwYWNlKSwK
LSAgICAgICAgICAgICAgIGxpbmUuZW5kKCkpOwotCi0gICAgLy8gUmVtb3ZlIGNvbW1lbnRzLgot
ICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBsaW5lLmZpbmQoIiMiKSk7Ci0KLSAgICBpZiAoIWxp
bmUuZW1wdHkoKSkgewotICAgICAgZmFpbHVyZV9saXN0LT5wdXNoX2JhY2sobGluZSk7Ci0gICAg
fQotICB9Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSAgY2hhciAq
cHJvZ3JhbTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6Q29uZm9ybWFuY2VUZXN0U3VpdGUgc3VpdGU7
Ci0KLSAgdmVjdG9yPHN0cmluZz4gZmFpbHVyZV9saXN0OwotCi0gIGZvciAoaW50IGFyZyA9IDE7
IGFyZyA8IGFyZ2M7ICsrYXJnKSB7Ci0gICAgaWYgKHN0cmNtcChhcmd2W2FyZ10sICItLWZhaWx1
cmVfbGlzdCIpID09IDApIHsKLSAgICAgIGlmICgrK2FyZyA9PSBhcmdjKSBVc2FnZUVycm9yKCk7
Ci0gICAgICBQYXJzZUZhaWx1cmVMaXN0KGFyZ3ZbYXJnXSwgJmZhaWx1cmVfbGlzdCk7Ci0gICAg
fSBlbHNlIGlmIChzdHJjbXAoYXJndlthcmddLCAiLS12ZXJib3NlIikgPT0gMCkgewotICAgICAg
c3VpdGUuU2V0VmVyYm9zZSh0cnVlKTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbYXJnXVswXSA9PSAn
LScpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb246ICVzXG4iLCBhcmd2
W2FyZ10pOwotICAgICAgVXNhZ2VFcnJvcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoYXJn
ICE9IGFyZ2MgLSAxKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVG9vIG1hbnkgYXJndW1l
bnRzLlxuIik7Ci0gICAgICAgIFVzYWdlRXJyb3IoKTsKLSAgICAgIH0KLSAgICAgIHByb2dyYW0g
PSBhcmd2W2FyZ107Ci0gICAgfQotICB9Ci0KLSAgc3VpdGUuU2V0RmFpbHVyZUxpc3QoZmFpbHVy
ZV9saXN0KTsKLSAgRm9ya1BpcGVSdW5uZXIgcnVubmVyKHByb2dyYW0pOwotCi0gIHN0ZDo6c3Ry
aW5nIG91dHB1dDsKLSAgYm9vbCBvayA9IHN1aXRlLlJ1blN1aXRlKCZydW5uZXIsICZvdXRwdXQp
OwotCi0gIGZ3cml0ZShvdXRwdXQuY19zdHIoKSwgMSwgb3V0cHV0LnNpemUoKSwgc3RkZXJyKTsK
LQotICByZXR1cm4gb2sgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkU7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2NvbmZvcm1hbmNlL2ZhaWx1cmVfbGlzdF9jcHAudHh0IGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9mYWlsdXJl
X2xpc3RfY3BwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkZjgzMWMwM2Vj
YTdiOTc5NDNkYzVjY2M0Mjk1NWNlMTEyMWMzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2ZhaWx1cmVfbGlzdF9jcHAudHh0CisrKyAv
ZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMgVGhpcyBpcyB0aGUgbGlzdCBvZiBjb25mb3Jt
YW5jZSB0ZXN0cyB0aGF0IGFyZSBrbm93biB0byBmYWlsIGZvciB0aGUgQysrCi0jIGltcGxlbWVu
dGF0aW9uIHJpZ2h0IG5vdy4gIFRoZXNlIHNob3VsZCBiZSBmaXhlZC4KLSMKLSMgQnkgbGlzdGlu
ZyB0aGVtIGhlcmUgd2UgY2FuIGtlZXAgdGFicyBvbiB3aGljaCBvbmVzIGFyZSBmYWlsaW5nIGFu
ZCBiZSBzdXJlCi0jIHRoYXQgd2UgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIGluIG90aGVy
IHRlc3RzLgotIwotIyBUT0RPKGhhYmVybWFuKTogaW5zZXJ0IGxpbmtzIHRvIGNvcnJlc3BvbmRp
bmcgYnVncyB0cmFja2luZyB0aGUgaXNzdWUuCi0jIFNob3VsZCB3ZSB1c2UgR2l0SHViIGlzc3Vl
cyBvciB0aGUgR29vZ2xlLWludGVybmFsIGJ1ZyB0cmFja2VyPwotCi1GaWVsZE1hc2tOdW1iZXJz
RG9udFJvdW5kVHJpcC5Kc29uT3V0cHV0Ci1GaWVsZE1hc2tQYXRoc0RvbnRSb3VuZFRyaXAuSnNv
bk91dHB1dAotRmllbGRNYXNrVG9vTWFueVVuZGVyc2NvcmUuSnNvbk91dHB1dAotSnNvbklucHV0
LkFueVVub3JkZXJlZFR5cGVUYWcuSnNvbk91dHB1dAotSnNvbklucHV0LkFueVVub3JkZXJlZFR5
cGVUYWcuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoVmFsdWVGb3JJbnRlZ2VyLkpz
b25PdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoVmFsdWVGb3JJbnRlZ2VyLlByb3RvYnVmT3V0cHV0
Ci1Kc29uSW5wdXQuQW55V2l0aFZhbHVlRm9ySnNvbk9iamVjdC5Kc29uT3V0cHV0Ci1Kc29uSW5w
dXQuQW55V2l0aFZhbHVlRm9ySnNvbk9iamVjdC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkJv
b2xGaWVsZERvdWJsZVF1b3RlZEZhbHNlCi1Kc29uSW5wdXQuQm9vbEZpZWxkRG91YmxlUXVvdGVk
VHJ1ZQotSnNvbklucHV0LkJvb2xGaWVsZEludGVnZXJPbmUKLUpzb25JbnB1dC5Cb29sRmllbGRJ
bnRlZ2VyWmVybwotSnNvbklucHV0LkJ5dGVzRmllbGRJbnZhbGlkQmFzZTY0Q2hhcmFjdGVycwot
SnNvbklucHV0LkJ5dGVzRmllbGROb1BhZGRpbmcKLUpzb25JbnB1dC5Eb3VibGVGaWVsZFRvb1Nt
YWxsCi1Kc29uSW5wdXQuRHVyYXRpb25IYXNaZXJvRnJhY3Rpb25hbERpZ2l0LlZhbGlkYXRvcgot
SnNvbklucHV0LkR1cmF0aW9uSnNvbklucHV0VG9vTGFyZ2UKLUpzb25JbnB1dC5EdXJhdGlvbkpz
b25JbnB1dFRvb1NtYWxsCi1Kc29uSW5wdXQuRHVyYXRpb25NaXNzaW5nUwotSnNvbklucHV0LkVu
dW1GaWVsZFVua25vd25WYWx1ZS5WYWxpZGF0b3IKLUpzb25JbnB1dC5GaWVsZE1hc2tJbnZhbGlk
Q2hhcmFjdGVyCi1Kc29uSW5wdXQuRmllbGROYW1lRHVwbGljYXRlCi1Kc29uSW5wdXQuRmllbGRO
YW1lRHVwbGljYXRlRGlmZmVyZW50Q2FzaW5nMQotSnNvbklucHV0LkZpZWxkTmFtZUR1cGxpY2F0
ZURpZmZlcmVudENhc2luZzIKLUpzb25JbnB1dC5GaWVsZE5hbWVJbkxvd2VyQ2FtZWxDYXNlLlZh
bGlkYXRvcgotSnNvbklucHV0LkZpZWxkTmFtZUluU25ha2VDYXNlLkpzb25PdXRwdXQKLUpzb25J
bnB1dC5GaWVsZE5hbWVJblNuYWtlQ2FzZS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkZpZWxk
TmFtZU5vdFF1b3RlZAotSnNvbklucHV0LkZsb2F0RmllbGRUb29MYXJnZQotSnNvbklucHV0LkZs
b2F0RmllbGRUb29TbWFsbAotSnNvbklucHV0LkludDMyRmllbGRMZWFkaW5nU3BhY2UKLUpzb25J
bnB1dC5JbnQzMkZpZWxkTGVhZGluZ1plcm8KLUpzb25JbnB1dC5JbnQzMkZpZWxkTWluRmxvYXRW
YWx1ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJGaWVsZE1pbkZsb2F0VmFsdWUuUHJvdG9i
dWZPdXRwdXQKLUpzb25JbnB1dC5JbnQzMkZpZWxkTWluVmFsdWUuSnNvbk91dHB1dAotSnNvbklu
cHV0LkludDMyRmllbGRNaW5WYWx1ZS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkludDMyRmll
bGROZWdhdGl2ZVdpdGhMZWFkaW5nWmVybwotSnNvbklucHV0LkludDMyRmllbGROb3RJbnRlZ2Vy
Ci1Kc29uSW5wdXQuSW50MzJGaWVsZE5vdE51bWJlcgotSnNvbklucHV0LkludDMyRmllbGRUb29M
YXJnZQotSnNvbklucHV0LkludDMyRmllbGRUb29TbWFsbAotSnNvbklucHV0LkludDMyRmllbGRU
cmFpbGluZ1NwYWNlCi1Kc29uSW5wdXQuSW50NjRGaWVsZE5vdEludGVnZXIKLUpzb25JbnB1dC5J
bnQ2NEZpZWxkTm90TnVtYmVyCi1Kc29uSW5wdXQuSW50NjRGaWVsZFRvb0xhcmdlCi1Kc29uSW5w
dXQuSW50NjRGaWVsZFRvb1NtYWxsCi1Kc29uSW5wdXQuTWFwRmllbGRWYWx1ZUlzTnVsbAotSnNv
bklucHV0Lk9uZW9mRmllbGREdXBsaWNhdGUKLUpzb25JbnB1dC5SZXBlYXRlZEZpZWxkTWVzc2Fn
ZUVsZW1lbnRJc051bGwKLUpzb25JbnB1dC5SZXBlYXRlZEZpZWxkUHJpbWl0aXZlRWxlbWVudElz
TnVsbAotSnNvbklucHV0LlJlcGVhdGVkRmllbGRUcmFpbGluZ0NvbW1hCi1Kc29uSW5wdXQuUmVw
ZWF0ZWRGaWVsZFdyb25nRWxlbWVudFR5cGVFeHBlY3RpbmdJbnRlZ2Vyc0dvdEJvb2wKLUpzb25J
bnB1dC5SZXBlYXRlZEZpZWxkV3JvbmdFbGVtZW50VHlwZUV4cGVjdGluZ0ludGVnZXJzR290TWVz
c2FnZQotSnNvbklucHV0LlJlcGVhdGVkRmllbGRXcm9uZ0VsZW1lbnRUeXBlRXhwZWN0aW5nSW50
ZWdlcnNHb3RTdHJpbmcKLUpzb25JbnB1dC5SZXBlYXRlZEZpZWxkV3JvbmdFbGVtZW50VHlwZUV4
cGVjdGluZ01lc3NhZ2VzR290Qm9vbAotSnNvbklucHV0LlJlcGVhdGVkRmllbGRXcm9uZ0VsZW1l
bnRUeXBlRXhwZWN0aW5nTWVzc2FnZXNHb3RJbnQKLUpzb25JbnB1dC5SZXBlYXRlZEZpZWxkV3Jv
bmdFbGVtZW50VHlwZUV4cGVjdGluZ01lc3NhZ2VzR290U3RyaW5nCi1Kc29uSW5wdXQuUmVwZWF0
ZWRGaWVsZFdyb25nRWxlbWVudFR5cGVFeHBlY3RpbmdTdHJpbmdzR290Qm9vbAotSnNvbklucHV0
LlJlcGVhdGVkRmllbGRXcm9uZ0VsZW1lbnRUeXBlRXhwZWN0aW5nU3RyaW5nc0dvdEludAotSnNv
bklucHV0LlJlcGVhdGVkRmllbGRXcm9uZ0VsZW1lbnRUeXBlRXhwZWN0aW5nU3RyaW5nc0dvdE1l
c3NhZ2UKLUpzb25JbnB1dC5TdHJpbmdGaWVsZE5vdEFTdHJpbmcKLUpzb25JbnB1dC5TdHJpbmdG
aWVsZFN1cnJvZ2F0ZUluV3JvbmdPcmRlcgotSnNvbklucHV0LlN0cmluZ0ZpZWxkU3Vycm9nYXRl
UGFpci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuU3RyaW5nRmllbGRTdXJyb2dhdGVQYWlyLlByb3Rv
YnVmT3V0cHV0Ci1Kc29uSW5wdXQuU3RyaW5nRmllbGRVbnBhaXJlZEhpZ2hTdXJyb2dhdGUKLUpz
b25JbnB1dC5TdHJpbmdGaWVsZFVucGFpcmVkTG93U3Vycm9nYXRlCi1Kc29uSW5wdXQuU3RyaW5n
RmllbGRVcHBlcmNhc2VFc2NhcGVMZXR0ZXIKLUpzb25JbnB1dC5UaW1lc3RhbXBKc29uSW5wdXRM
b3dlcmNhc2VUCi1Kc29uSW5wdXQuVGltZXN0YW1wSnNvbklucHV0TG93ZXJjYXNlWgotSnNvbklu
cHV0LlRpbWVzdGFtcEpzb25JbnB1dE1pc3NpbmdUCi1Kc29uSW5wdXQuVGltZXN0YW1wSnNvbklu
cHV0TWlzc2luZ1oKLUpzb25JbnB1dC5UaW1lc3RhbXBKc29uSW5wdXRUb29MYXJnZQotSnNvbklu
cHV0LlRpbWVzdGFtcEpzb25JbnB1dFRvb1NtYWxsCi1Kc29uSW5wdXQuVHJhaWxpbmdDb21tYUlu
QW5PYmplY3QKLUpzb25JbnB1dC5VaW50MzJGaWVsZE5vdEludGVnZXIKLUpzb25JbnB1dC5VaW50
MzJGaWVsZE5vdE51bWJlcgotSnNvbklucHV0LlVpbnQzMkZpZWxkVG9vTGFyZ2UKLUpzb25JbnB1
dC5VaW50NjRGaWVsZE5vdEludGVnZXIKLUpzb25JbnB1dC5VaW50NjRGaWVsZE5vdE51bWJlcgot
SnNvbklucHV0LlVpbnQ2NEZpZWxkVG9vTGFyZ2UKLUpzb25JbnB1dC5XcmFwcGVyVHlwZXNXaXRo
TnVsbFZhbHVlLkpzb25PdXRwdXQKLUpzb25JbnB1dC5XcmFwcGVyVHlwZXNXaXRoTnVsbFZhbHVl
LlByb3RvYnVmT3V0cHV0Ci1Qcm90b2J1ZklucHV0LlByZW1hdHVyZUVvZkJlZm9yZUtub3duUmVw
ZWF0ZWRWYWx1ZS5NRVNTQUdFCi1Qcm90b2J1ZklucHV0LlByZW1hdHVyZUVvZkluRGVsaW1pdGVk
RGF0YUZvcktub3duTm9uUmVwZWF0ZWRWYWx1ZS5NRVNTQUdFCi1Qcm90b2J1ZklucHV0LlByZW1h
dHVyZUVvZkluRGVsaW1pdGVkRGF0YUZvcktub3duUmVwZWF0ZWRWYWx1ZS5NRVNTQUdFCi1Qcm90
b2J1ZklucHV0LlByZW1hdHVyZUVvZkluUGFja2VkRmllbGQuQk9PTAotUHJvdG9idWZJbnB1dC5Q
cmVtYXR1cmVFb2ZJblBhY2tlZEZpZWxkLkVOVU0KLVByb3RvYnVmSW5wdXQuUHJlbWF0dXJlRW9m
SW5QYWNrZWRGaWVsZC5JTlQzMgotUHJvdG9idWZJbnB1dC5QcmVtYXR1cmVFb2ZJblBhY2tlZEZp
ZWxkLklOVDY0Ci1Qcm90b2J1ZklucHV0LlByZW1hdHVyZUVvZkluUGFja2VkRmllbGQuU0lOVDMy
Ci1Qcm90b2J1ZklucHV0LlByZW1hdHVyZUVvZkluUGFja2VkRmllbGQuU0lOVDY0Ci1Qcm90b2J1
ZklucHV0LlByZW1hdHVyZUVvZkluUGFja2VkRmllbGQuVUlOVDMyCi1Qcm90b2J1ZklucHV0LlBy
ZW1hdHVyZUVvZkluUGFja2VkRmllbGQuVUlOVDY0Ci1Qcm90b2J1ZklucHV0LlByZW1hdHVyZUVv
Zkluc2lkZUtub3duUmVwZWF0ZWRWYWx1ZS5NRVNTQUdFCi1UaW1lc3RhbXBQcm90b0lucHV0VG9v
TGFyZ2UuSnNvbk91dHB1dAotVGltZXN0YW1wUHJvdG9JbnB1dFRvb1NtYWxsLkpzb25PdXRwdXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY29uZm9ybWFuY2UvZmFpbHVyZV9saXN0X2NzaGFycC50eHQgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1h
bmNlL2ZhaWx1cmVfbGlzdF9jc2hhcnAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhNDZjZWU0NzJiNDMwNjIzNmEyZjlmNmIwZWEyNDMyYjllNTFkODY3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2UvZmFpbHVyZV9saXN0
X2NzaGFycC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1Kc29uSW5wdXQuQW55
V2l0aFZhbHVlRm9ySW50ZWdlci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aFZhbHVlRm9y
SnNvbk9iamVjdC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuRmllbGROYW1lSW5Mb3dlckNhbWVsQ2Fz
ZS5WYWxpZGF0b3IKLUpzb25JbnB1dC5GaWVsZE5hbWVJblNuYWtlQ2FzZS5Kc29uT3V0cHV0Ci1K
c29uSW5wdXQuRmllbGROYW1lSW5TbmFrZUNhc2UuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5G
aWVsZE5hbWVXaXRoTWl4ZWRDYXNlcy5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuRmllbGROYW1lV2l0
aE1peGVkQ2FzZXMuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5GaWVsZE5hbWVXaXRoTWl4ZWRD
YXNlcy5WYWxpZGF0b3IKLUpzb25JbnB1dC5JbnQzMkZpZWxkTWluRmxvYXRWYWx1ZS5Kc29uT3V0
cHV0Ci1Kc29uSW5wdXQuSW50MzJGaWVsZE1pblZhbHVlLkpzb25PdXRwdXQKLUpzb25JbnB1dC5J
bnQ2NEZpZWxkTWF4VmFsdWVOb3RRdW90ZWQuSnNvbk91dHB1dAotSnNvbklucHV0LkludDY0Rmll
bGRNYXhWYWx1ZU5vdFF1b3RlZC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0Lk9yaWdpbmFsUHJv
dG9GaWVsZE5hbWUuSnNvbk91dHB1dAotSnNvbklucHV0LlN0cmluZ0ZpZWxkU3Vycm9nYXRlUGFp
ci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVWludDY0RmllbGRNYXhWYWx1ZU5vdFF1b3RlZC5Kc29u
T3V0cHV0Ci1Kc29uSW5wdXQuVWludDY0RmllbGRNYXhWYWx1ZU5vdFF1b3RlZC5Qcm90b2J1Zk91
dHB1dApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9mYWlsdXJlX2xpc3RfamF2YS50eHQgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZv
cm1hbmNlL2ZhaWx1cmVfbGlzdF9qYXZhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTUyYzBjYzljNDI5NDcwMjBkZDUwYThkYTQxYzYxMTY5MzU5ZGQyNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2ZhaWx1cmVfbGlz
dF9qYXZhLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSMgVGhpcyBpcyB0aGUg
bGlzdCBvZiBjb25mb3JtYW5jZSB0ZXN0cyB0aGF0IGFyZSBrbm93biB0byBmYWlsIGZvciB0aGUg
SmF2YQotIyBpbXBsZW1lbnRhdGlvbiByaWdodCBub3cuICBUaGVzZSBzaG91bGQgYmUgZml4ZWQu
Ci0jCi0jIEJ5IGxpc3RpbmcgdGhlbSBoZXJlIHdlIGNhbiBrZWVwIHRhYnMgb24gd2hpY2ggb25l
cyBhcmUgZmFpbGluZyBhbmQgYmUgc3VyZQotIyB0aGF0IHdlIGRvbid0IGludHJvZHVjZSByZWdy
ZXNzaW9ucyBpbiBvdGhlciB0ZXN0cy4KLQotRmllbGRNYXNrTnVtYmVyc0RvbnRSb3VuZFRyaXAu
SnNvbk91dHB1dAotRmllbGRNYXNrUGF0aHNEb250Um91bmRUcmlwLkpzb25PdXRwdXQKLUZpZWxk
TWFza1Rvb01hbnlVbmRlcnNjb3JlLkpzb25PdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoRmllbGRN
YXNrLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aFZhbHVlRm9ySW50ZWdlci5Kc29u
T3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aFZhbHVlRm9ySnNvbk9iamVjdC5Kc29uT3V0cHV0Ci1K
c29uSW5wdXQuQm9vbEZpZWxkQWxsQ2FwaXRhbEZhbHNlCi1Kc29uSW5wdXQuQm9vbEZpZWxkQWxs
Q2FwaXRhbFRydWUKLUpzb25JbnB1dC5Cb29sRmllbGRDYW1lbENhc2VGYWxzZQotSnNvbklucHV0
LkJvb2xGaWVsZENhbWVsQ2FzZVRydWUKLUpzb25JbnB1dC5Cb29sRmllbGREb3VibGVRdW90ZWRG
YWxzZQotSnNvbklucHV0LkJvb2xGaWVsZERvdWJsZVF1b3RlZFRydWUKLUpzb25JbnB1dC5Cb29s
TWFwRmllbGRLZXlOb3RRdW90ZWQKLUpzb25JbnB1dC5Eb3VibGVGaWVsZEluZmluaXR5Tm90UXVv
dGVkCi1Kc29uSW5wdXQuRG91YmxlRmllbGROYW5Ob3RRdW90ZWQKLUpzb25JbnB1dC5Eb3VibGVG
aWVsZE5lZ2F0aXZlSW5maW5pdHlOb3RRdW90ZWQKLUpzb25JbnB1dC5FbnVtRmllbGROb3RRdW90
ZWQKLUpzb25JbnB1dC5GaWVsZE1hc2suUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5GaWVsZE1h
c2tJbnZhbGlkQ2hhcmFjdGVyCi1Kc29uSW5wdXQuRmllbGROYW1lRHVwbGljYXRlCi1Kc29uSW5w
dXQuRmllbGROYW1lSW5TbmFrZUNhc2UuSnNvbk91dHB1dAotSnNvbklucHV0LkZpZWxkTmFtZU5v
dFF1b3RlZAotSnNvbklucHV0LkZsb2F0RmllbGRJbmZpbml0eU5vdFF1b3RlZAotSnNvbklucHV0
LkZsb2F0RmllbGROYW5Ob3RRdW90ZWQKLUpzb25JbnB1dC5GbG9hdEZpZWxkTmVnYXRpdmVJbmZp
bml0eU5vdFF1b3RlZAotSnNvbklucHV0LkludDMyRmllbGRMZWFkaW5nWmVybwotSnNvbklucHV0
LkludDMyRmllbGRNaW5GbG9hdFZhbHVlLkpzb25PdXRwdXQKLUpzb25JbnB1dC5JbnQzMkZpZWxk
TWluVmFsdWUuSnNvbk91dHB1dAotSnNvbklucHV0LkludDMyRmllbGROZWdhdGl2ZVdpdGhMZWFk
aW5nWmVybwotSnNvbklucHV0LkludDMyRmllbGRQbHVzU2lnbgotSnNvbklucHV0LkludDMyTWFw
RmllbGRLZXlOb3RRdW90ZWQKLUpzb25JbnB1dC5JbnQ2NE1hcEZpZWxkS2V5Tm90UXVvdGVkCi1K
c29uSW5wdXQuSnNvbldpdGhDb21tZW50cwotSnNvbklucHV0Lk9yaWdpbmFsUHJvdG9GaWVsZE5h
bWUuSnNvbk91dHB1dAotSnNvbklucHV0LlJlcGVhdGVkRmllbGRXcm9uZ0VsZW1lbnRUeXBlRXhw
ZWN0aW5nU3RyaW5nc0dvdEJvb2wKLUpzb25JbnB1dC5SZXBlYXRlZEZpZWxkV3JvbmdFbGVtZW50
VHlwZUV4cGVjdGluZ1N0cmluZ3NHb3RJbnQKLUpzb25JbnB1dC5TdHJpbmdGaWVsZE5vdEFTdHJp
bmcKLUpzb25JbnB1dC5TdHJpbmdGaWVsZFN1cnJvZ2F0ZUluV3JvbmdPcmRlcgotSnNvbklucHV0
LlN0cmluZ0ZpZWxkVW5wYWlyZWRIaWdoU3Vycm9nYXRlCi1Kc29uSW5wdXQuU3RyaW5nRmllbGRV
bnBhaXJlZExvd1N1cnJvZ2F0ZQotSnNvbklucHV0LlN0cmluZ0ZpZWxkVXBwZXJjYXNlRXNjYXBl
TGV0dGVyCi1Kc29uSW5wdXQuVWludDMyTWFwRmllbGRLZXlOb3RRdW90ZWQKLUpzb25JbnB1dC5V
aW50NjRNYXBGaWVsZEtleU5vdFF1b3RlZApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9mYWlsdXJl
X2xpc3Rfb2JqYy50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2ZhaWx1cmVfbGlzdF9vYmpjLnR4dApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhYzM1MDFmMWQ1NjVlZTg5ZTMzMjlmMjg0NGY2YTMw
NDEyNDc4Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Nv
bmZvcm1hbmNlL2ZhaWx1cmVfbGlzdF9vYmpjLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAs
MCBAQAotIyBObyB0ZXN0cyBjdXJyZW50bHkgZmFpbGluZy4KLSMKLSMganNvbiBpbnB1dCBvciBv
dXRwdXQgdGVzdHMgYXJlIHNraXBwZWQgKGluIGNvbmZvcm1hbmNlX29iamMubSkgYXMgbW9iaWxl
Ci0jIHBsYXRmb3JtcyBkb24ndCBzdXBwb3J0IGpzb24gd2lyZSBmb3JtYXQgdG8gYXZvaWQgY29k
ZSBibG9hdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2UvZmFpbHVyZV9saXN0X3B5dGhvbi1wb3N0
MjYudHh0IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jb25mb3JtYW5jZS9mYWlsdXJlX2xpc3RfcHl0aG9uLXBvc3QyNi50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZDk5YjA0NGE0M2U1N2UwZGY2MTA5ODRlNzc1NTcz
YzVjNWI2ZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9j
b25mb3JtYW5jZS9mYWlsdXJlX2xpc3RfcHl0aG9uLXBvc3QyNi50eHQKKysrIC9kZXYvbnVsbApA
QCAtMSwyICswLDAgQEAKLUpzb25JbnB1dC5TdHJpbmdGaWVsZFN1cnJvZ2F0ZUluV3JvbmdPcmRl
cgotSnNvbklucHV0LlN0cmluZ0ZpZWxkVW5wYWlyZWRIaWdoU3Vycm9nYXRlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NvbmZvcm1hbmNlL2ZhaWx1cmVfbGlzdF9weXRob24udHh0IGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9mYWlsdXJl
X2xpc3RfcHl0aG9uLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJlNTI2Mzdi
ZGI4ZmFkZWFhODAwNzk2MmI4ZTZjMzFkOGRkZTE0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNlL2ZhaWx1cmVfbGlzdF9weXRob24udHh0
CisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotRHVyYXRpb25Qcm90b0lucHV0VG9vTGFy
Z2UuSnNvbk91dHB1dAotRHVyYXRpb25Qcm90b0lucHV0VG9vU21hbGwuSnNvbk91dHB1dAotRmll
bGRNYXNrTnVtYmVyc0RvbnRSb3VuZFRyaXAuSnNvbk91dHB1dAotRmllbGRNYXNrUGF0aHNEb250
Um91bmRUcmlwLkpzb25PdXRwdXQKLUZpZWxkTWFza1Rvb01hbnlVbmRlcnNjb3JlLkpzb25PdXRw
dXQKLUpzb25JbnB1dC5BbnkuSnNvbk91dHB1dAotSnNvbklucHV0LkFueS5Qcm90b2J1Zk91dHB1
dAotSnNvbklucHV0LkFueU5lc3RlZC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuQW55TmVzdGVkLlBy
b3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuQW55VW5vcmRlcmVkVHlwZVRhZy5Kc29uT3V0cHV0Ci1K
c29uSW5wdXQuQW55VW5vcmRlcmVkVHlwZVRhZy5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkFu
eVdpdGhEdXJhdGlvbi5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aER1cmF0aW9uLlByb3Rv
YnVmT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aEZpZWxkTWFzay5Kc29uT3V0cHV0Ci1Kc29uSW5w
dXQuQW55V2l0aEZpZWxkTWFzay5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkFueVdpdGhJbnQz
MlZhbHVlV3JhcHBlci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aEludDMyVmFsdWVXcmFw
cGVyLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aFN0cnVjdC5Kc29uT3V0cHV0Ci1K
c29uSW5wdXQuQW55V2l0aFN0cnVjdC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkFueVdpdGhU
aW1lc3RhbXAuSnNvbk91dHB1dAotSnNvbklucHV0LkFueVdpdGhUaW1lc3RhbXAuUHJvdG9idWZP
dXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoVmFsdWVGb3JJbnRlZ2VyLkpzb25PdXRwdXQKLUpzb25J
bnB1dC5BbnlXaXRoVmFsdWVGb3JJbnRlZ2VyLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuQW55
V2l0aFZhbHVlRm9ySnNvbk9iamVjdC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aFZhbHVl
Rm9ySnNvbk9iamVjdC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkJ5dGVzRmllbGRJbnZhbGlk
QmFzZTY0Q2hhcmFjdGVycwotSnNvbklucHV0LkRvdWJsZUZpZWxkSW5maW5pdHlOb3RRdW90ZWQK
LUpzb25JbnB1dC5Eb3VibGVGaWVsZE5hbk5vdFF1b3RlZAotSnNvbklucHV0LkRvdWJsZUZpZWxk
TmVnYXRpdmVJbmZpbml0eU5vdFF1b3RlZAotSnNvbklucHV0LkRvdWJsZUZpZWxkVG9vU21hbGwK
LUpzb25JbnB1dC5EdXJhdGlvbkpzb25JbnB1dFRvb0xhcmdlCi1Kc29uSW5wdXQuRHVyYXRpb25K
c29uSW5wdXRUb29TbWFsbAotSnNvbklucHV0LkR1cmF0aW9uTWlzc2luZ1MKLUpzb25JbnB1dC5F
bnVtRmllbGROdW1lcmljVmFsdWVOb25aZXJvLkpzb25PdXRwdXQKLUpzb25JbnB1dC5FbnVtRmll
bGROdW1lcmljVmFsdWVOb25aZXJvLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuRW51bUZpZWxk
TnVtZXJpY1ZhbHVlWmVyby5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuRW51bUZpZWxkTnVtZXJpY1Zh
bHVlWmVyby5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkVudW1GaWVsZFVua25vd25WYWx1ZS5W
YWxpZGF0b3IKLUpzb25JbnB1dC5GaWVsZE1hc2suUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5G
aWVsZE1hc2tJbnZhbGlkQ2hhcmFjdGVyCi1Kc29uSW5wdXQuRmllbGROYW1lSW5Mb3dlckNhbWVs
Q2FzZS5WYWxpZGF0b3IKLUpzb25JbnB1dC5GaWVsZE5hbWVJblNuYWtlQ2FzZS5Kc29uT3V0cHV0
Ci1Kc29uSW5wdXQuRmllbGROYW1lSW5TbmFrZUNhc2UuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1
dC5GbG9hdEZpZWxkSW5maW5pdHlOb3RRdW90ZWQKLUpzb25JbnB1dC5GbG9hdEZpZWxkTmFuTm90
UXVvdGVkCi1Kc29uSW5wdXQuRmxvYXRGaWVsZE5lZ2F0aXZlSW5maW5pdHlOb3RRdW90ZWQKLUpz
b25JbnB1dC5GbG9hdEZpZWxkVG9vTGFyZ2UKLUpzb25JbnB1dC5GbG9hdEZpZWxkVG9vU21hbGwK
LUpzb25JbnB1dC5JbnQzMkZpZWxkRXhwb25lbnRpYWxGb3JtYXQuSnNvbk91dHB1dAotSnNvbklu
cHV0LkludDMyRmllbGRFeHBvbmVudGlhbEZvcm1hdC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0
LkludDMyRmllbGRGbG9hdFRyYWlsaW5nWmVyby5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJG
aWVsZEZsb2F0VHJhaWxpbmdaZXJvLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJGaWVs
ZE1heEZsb2F0VmFsdWUuSnNvbk91dHB1dAotSnNvbklucHV0LkludDMyRmllbGRNYXhGbG9hdFZh
bHVlLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJGaWVsZE1pbkZsb2F0VmFsdWUuSnNv
bk91dHB1dAotSnNvbklucHV0LkludDMyRmllbGRNaW5GbG9hdFZhbHVlLlByb3RvYnVmT3V0cHV0
Ci1Kc29uSW5wdXQuSW50MzJGaWVsZE1pblZhbHVlLkpzb25PdXRwdXQKLUpzb25JbnB1dC5Pcmln
aW5hbFByb3RvRmllbGROYW1lLkpzb25PdXRwdXQKLUpzb25JbnB1dC5PcmlnaW5hbFByb3RvRmll
bGROYW1lLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuUmVwZWF0ZWRGaWVsZE1lc3NhZ2VFbGVt
ZW50SXNOdWxsCi1Kc29uSW5wdXQuUmVwZWF0ZWRGaWVsZFByaW1pdGl2ZUVsZW1lbnRJc051bGwK
LUpzb25JbnB1dC5SZXBlYXRlZEZpZWxkV3JvbmdFbGVtZW50VHlwZUV4cGVjdGluZ0ludGVnZXJz
R290Qm9vbAotSnNvbklucHV0LlN0cmluZ0ZpZWxkU3Vycm9nYXRlUGFpci5Kc29uT3V0cHV0Ci1K
c29uSW5wdXQuU3RyaW5nRmllbGRVbnBhaXJlZExvd1N1cnJvZ2F0ZQotSnNvbklucHV0LlN0cnVj
dC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuU3RydWN0LlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQu
VGltZXN0YW1wSnNvbklucHV0TG93ZXJjYXNlVAotSnNvbklucHV0LlVpbnQzMkZpZWxkTWF4Rmxv
YXRWYWx1ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVWludDMyRmllbGRNYXhGbG9hdFZhbHVlLlBy
b3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHRCb29sLkpzb25PdXRwdXQKLUpzb25J
bnB1dC5WYWx1ZUFjY2VwdEJvb2wuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5WYWx1ZUFjY2Vw
dEZsb2F0Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5WYWx1ZUFjY2VwdEZsb2F0LlByb3RvYnVmT3V0
cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHRJbnRlZ2VyLkpzb25PdXRwdXQKLUpzb25JbnB1dC5W
YWx1ZUFjY2VwdEludGVnZXIuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5WYWx1ZUFjY2VwdExp
c3QuSnNvbk91dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0TGlzdC5Qcm90b2J1Zk91dHB1dAot
SnNvbklucHV0LlZhbHVlQWNjZXB0TnVsbC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2Nl
cHROdWxsLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHRPYmplY3QuSnNvbk91
dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0T2JqZWN0LlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5w
dXQuVmFsdWVBY2NlcHRTdHJpbmcuSnNvbk91dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0U3Ry
aW5nLlByb3RvYnVmT3V0cHV0Ci1UaW1lc3RhbXBQcm90b0lucHV0VG9vTGFyZ2UuSnNvbk91dHB1
dAotVGltZXN0YW1wUHJvdG9JbnB1dFRvb1NtYWxsLkpzb25PdXRwdXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29u
Zm9ybWFuY2UvZmFpbHVyZV9saXN0X3B5dGhvbl9jcHAudHh0IGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9mYWlsdXJl
X2xpc3RfcHl0aG9uX2NwcC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNWU0
NWY5ZmY3ZTdhZjM4ODcwOTI3M2IzNzBkOTUyY2QxYzM3NDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS9mYWlsdXJlX2xpc3RfcHl0aG9u
X2NwcC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotIyBUaGlzIGlzIHRoZSBs
aXN0IG9mIGNvbmZvcm1hbmNlIHRlc3RzIHRoYXQgYXJlIGtub3duIHRvIGZhaWwgZm9yIHRoZQot
IyBQeXRob24vQysrIGltcGxlbWVudGF0aW9uIHJpZ2h0IG5vdy4gIFRoZXNlIHNob3VsZCBiZSBm
aXhlZC4KLSMKLSMgQnkgbGlzdGluZyB0aGVtIGhlcmUgd2UgY2FuIGtlZXAgdGFicyBvbiB3aGlj
aCBvbmVzIGFyZSBmYWlsaW5nIGFuZCBiZSBzdXJlCi0jIHRoYXQgd2UgZG9uJ3QgaW50cm9kdWNl
IHJlZ3Jlc3Npb25zIGluIG90aGVyIHRlc3RzLgotIwotIyBUT0RPKGhhYmVybWFuKTogaW5zZXJ0
IGxpbmtzIHRvIGNvcnJlc3BvbmRpbmcgYnVncyB0cmFja2luZyB0aGUgaXNzdWUuCi0jIFNob3Vs
ZCB3ZSB1c2UgR2l0SHViIGlzc3VlcyBvciB0aGUgR29vZ2xlLWludGVybmFsIGJ1ZyB0cmFja2Vy
PwotCi1EdXJhdGlvblByb3RvSW5wdXRUb29MYXJnZS5Kc29uT3V0cHV0Ci1EdXJhdGlvblByb3Rv
SW5wdXRUb29TbWFsbC5Kc29uT3V0cHV0Ci1GaWVsZE1hc2tOdW1iZXJzRG9udFJvdW5kVHJpcC5K
c29uT3V0cHV0Ci1GaWVsZE1hc2tQYXRoc0RvbnRSb3VuZFRyaXAuSnNvbk91dHB1dAotRmllbGRN
YXNrVG9vTWFueVVuZGVyc2NvcmUuSnNvbk91dHB1dAotSnNvbklucHV0LkFueS5Kc29uT3V0cHV0
Ci1Kc29uSW5wdXQuQW55LlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuQW55TmVzdGVkLkpzb25P
dXRwdXQKLUpzb25JbnB1dC5BbnlOZXN0ZWQuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5BbnlV
bm9yZGVyZWRUeXBlVGFnLkpzb25PdXRwdXQKLUpzb25JbnB1dC5BbnlVbm9yZGVyZWRUeXBlVGFn
LlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aER1cmF0aW9uLkpzb25PdXRwdXQKLUpz
b25JbnB1dC5BbnlXaXRoRHVyYXRpb24uUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRo
RmllbGRNYXNrLkpzb25PdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoRmllbGRNYXNrLlByb3RvYnVm
T3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aEludDMyVmFsdWVXcmFwcGVyLkpzb25PdXRwdXQKLUpz
b25JbnB1dC5BbnlXaXRoSW50MzJWYWx1ZVdyYXBwZXIuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1
dC5BbnlXaXRoU3RydWN0Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoU3RydWN0LlByb3Rv
YnVmT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aFRpbWVzdGFtcC5Kc29uT3V0cHV0Ci1Kc29uSW5w
dXQuQW55V2l0aFRpbWVzdGFtcC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkFueVdpdGhWYWx1
ZUZvckludGVnZXIuSnNvbk91dHB1dAotSnNvbklucHV0LkFueVdpdGhWYWx1ZUZvckludGVnZXIu
UHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoVmFsdWVGb3JKc29uT2JqZWN0Lkpzb25P
dXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoVmFsdWVGb3JKc29uT2JqZWN0LlByb3RvYnVmT3V0cHV0
Ci1Kc29uSW5wdXQuQnl0ZXNGaWVsZEludmFsaWRCYXNlNjRDaGFyYWN0ZXJzCi1Kc29uSW5wdXQu
RG91YmxlRmllbGRJbmZpbml0eU5vdFF1b3RlZAotSnNvbklucHV0LkRvdWJsZUZpZWxkTmFuTm90
UXVvdGVkCi1Kc29uSW5wdXQuRG91YmxlRmllbGROZWdhdGl2ZUluZmluaXR5Tm90UXVvdGVkCi1K
c29uSW5wdXQuRG91YmxlRmllbGRUb29TbWFsbAotSnNvbklucHV0LkR1cmF0aW9uSnNvbklucHV0
VG9vTGFyZ2UKLUpzb25JbnB1dC5EdXJhdGlvbkpzb25JbnB1dFRvb1NtYWxsCi1Kc29uSW5wdXQu
RHVyYXRpb25NaXNzaW5nUwotSnNvbklucHV0LkVudW1GaWVsZE51bWVyaWNWYWx1ZU5vblplcm8u
SnNvbk91dHB1dAotSnNvbklucHV0LkVudW1GaWVsZE51bWVyaWNWYWx1ZU5vblplcm8uUHJvdG9i
dWZPdXRwdXQKLUpzb25JbnB1dC5FbnVtRmllbGROdW1lcmljVmFsdWVaZXJvLkpzb25PdXRwdXQK
LUpzb25JbnB1dC5FbnVtRmllbGROdW1lcmljVmFsdWVaZXJvLlByb3RvYnVmT3V0cHV0Ci1Kc29u
SW5wdXQuRW51bUZpZWxkVW5rbm93blZhbHVlLlZhbGlkYXRvcgotSnNvbklucHV0LkZpZWxkTWFz
ay5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkZpZWxkTWFza0ludmFsaWRDaGFyYWN0ZXIKLUpz
b25JbnB1dC5GaWVsZE5hbWVJbkxvd2VyQ2FtZWxDYXNlLlZhbGlkYXRvcgotSnNvbklucHV0LkZp
ZWxkTmFtZUluU25ha2VDYXNlLkpzb25PdXRwdXQKLUpzb25JbnB1dC5GaWVsZE5hbWVJblNuYWtl
Q2FzZS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkZsb2F0RmllbGRJbmZpbml0eU5vdFF1b3Rl
ZAotSnNvbklucHV0LkZsb2F0RmllbGROYW5Ob3RRdW90ZWQKLUpzb25JbnB1dC5GbG9hdEZpZWxk
TmVnYXRpdmVJbmZpbml0eU5vdFF1b3RlZAotSnNvbklucHV0LkZsb2F0RmllbGRUb29MYXJnZQot
SnNvbklucHV0LkZsb2F0RmllbGRUb29TbWFsbAotSnNvbklucHV0LkludDMyRmllbGRFeHBvbmVu
dGlhbEZvcm1hdC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJGaWVsZEV4cG9uZW50aWFsRm9y
bWF0LlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJGaWVsZEZsb2F0VHJhaWxpbmdaZXJv
Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5JbnQzMkZpZWxkRmxvYXRUcmFpbGluZ1plcm8uUHJvdG9i
dWZPdXRwdXQKLUpzb25JbnB1dC5JbnQzMkZpZWxkTWF4RmxvYXRWYWx1ZS5Kc29uT3V0cHV0Ci1K
c29uSW5wdXQuSW50MzJGaWVsZE1heEZsb2F0VmFsdWUuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1
dC5JbnQzMkZpZWxkTWluRmxvYXRWYWx1ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJGaWVs
ZE1pbkZsb2F0VmFsdWUuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5JbnQzMkZpZWxkTWluVmFs
dWUuSnNvbk91dHB1dAotSnNvbklucHV0Lk9yaWdpbmFsUHJvdG9GaWVsZE5hbWUuSnNvbk91dHB1
dAotSnNvbklucHV0Lk9yaWdpbmFsUHJvdG9GaWVsZE5hbWUuUHJvdG9idWZPdXRwdXQKLUpzb25J
bnB1dC5SZXBlYXRlZEZpZWxkTWVzc2FnZUVsZW1lbnRJc051bGwKLUpzb25JbnB1dC5SZXBlYXRl
ZEZpZWxkUHJpbWl0aXZlRWxlbWVudElzTnVsbAotSnNvbklucHV0LlJlcGVhdGVkRmllbGRXcm9u
Z0VsZW1lbnRUeXBlRXhwZWN0aW5nSW50ZWdlcnNHb3RCb29sCi1Kc29uSW5wdXQuU3RyaW5nRmll
bGRTdXJyb2dhdGVQYWlyLkpzb25PdXRwdXQKLUpzb25JbnB1dC5TdHJpbmdGaWVsZFVucGFpcmVk
TG93U3Vycm9nYXRlCi1Kc29uSW5wdXQuU3RydWN0Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5TdHJ1
Y3QuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5UaW1lc3RhbXBKc29uSW5wdXRMb3dlcmNhc2VU
Ci1Kc29uSW5wdXQuVWludDMyRmllbGRNYXhGbG9hdFZhbHVlLkpzb25PdXRwdXQKLUpzb25JbnB1
dC5VaW50MzJGaWVsZE1heEZsb2F0VmFsdWUuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5WYWx1
ZUFjY2VwdEJvb2wuSnNvbk91dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0Qm9vbC5Qcm90b2J1
Zk91dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0RmxvYXQuSnNvbk91dHB1dAotSnNvbklucHV0
LlZhbHVlQWNjZXB0RmxvYXQuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5WYWx1ZUFjY2VwdElu
dGVnZXIuSnNvbk91dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0SW50ZWdlci5Qcm90b2J1Zk91
dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0TGlzdC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVmFs
dWVBY2NlcHRMaXN0LlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHROdWxsLkpz
b25PdXRwdXQKLUpzb25JbnB1dC5WYWx1ZUFjY2VwdE51bGwuUHJvdG9idWZPdXRwdXQKLUpzb25J
bnB1dC5WYWx1ZUFjY2VwdE9iamVjdC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHRP
YmplY3QuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5WYWx1ZUFjY2VwdFN0cmluZy5Kc29uT3V0
cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHRTdHJpbmcuUHJvdG9idWZPdXRwdXQKLVByb3RvYnVm
SW5wdXQuUHJlbWF0dXJlRW9mSW5EZWxpbWl0ZWREYXRhRm9yS25vd25Ob25SZXBlYXRlZFZhbHVl
Lk1FU1NBR0UKLVByb3RvYnVmSW5wdXQuUHJlbWF0dXJlRW9mSW5EZWxpbWl0ZWREYXRhRm9yS25v
d25SZXBlYXRlZFZhbHVlLk1FU1NBR0UKLVByb3RvYnVmSW5wdXQuUHJlbWF0dXJlRW9mSW5QYWNr
ZWRGaWVsZC5CT09MCi1Qcm90b2J1ZklucHV0LlByZW1hdHVyZUVvZkluUGFja2VkRmllbGQuRE9V
QkxFCi1Qcm90b2J1ZklucHV0LlByZW1hdHVyZUVvZkluUGFja2VkRmllbGQuRU5VTQotUHJvdG9i
dWZJbnB1dC5QcmVtYXR1cmVFb2ZJblBhY2tlZEZpZWxkLkZJWEVEMzIKLVByb3RvYnVmSW5wdXQu
UHJlbWF0dXJlRW9mSW5QYWNrZWRGaWVsZC5GSVhFRDY0Ci1Qcm90b2J1ZklucHV0LlByZW1hdHVy
ZUVvZkluUGFja2VkRmllbGQuRkxPQVQKLVByb3RvYnVmSW5wdXQuUHJlbWF0dXJlRW9mSW5QYWNr
ZWRGaWVsZC5JTlQzMgotUHJvdG9idWZJbnB1dC5QcmVtYXR1cmVFb2ZJblBhY2tlZEZpZWxkLklO
VDY0Ci1Qcm90b2J1ZklucHV0LlByZW1hdHVyZUVvZkluUGFja2VkRmllbGQuU0ZJWEVEMzIKLVBy
b3RvYnVmSW5wdXQuUHJlbWF0dXJlRW9mSW5QYWNrZWRGaWVsZC5TRklYRUQ2NAotUHJvdG9idWZJ
bnB1dC5QcmVtYXR1cmVFb2ZJblBhY2tlZEZpZWxkLlNJTlQzMgotUHJvdG9idWZJbnB1dC5QcmVt
YXR1cmVFb2ZJblBhY2tlZEZpZWxkLlNJTlQ2NAotUHJvdG9idWZJbnB1dC5QcmVtYXR1cmVFb2ZJ
blBhY2tlZEZpZWxkLlVJTlQzMgotUHJvdG9idWZJbnB1dC5QcmVtYXR1cmVFb2ZJblBhY2tlZEZp
ZWxkLlVJTlQ2NAotVGltZXN0YW1wUHJvdG9JbnB1dFRvb0xhcmdlLkpzb25PdXRwdXQKLVRpbWVz
dGFtcFByb3RvSW5wdXRUb29TbWFsbC5Kc29uT3V0cHV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NvbmZvcm1hbmNl
L2ZhaWx1cmVfbGlzdF9ydWJ5LnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2UvZmFpbHVyZV9saXN0X3J1YnkudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzEyZGEwNjExZmYyZmQ2YmQ5ZGZhYmMz
OWY5YmJjYWIyZDk5NjZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY29uZm9ybWFuY2UvZmFpbHVyZV9saXN0X3J1YnkudHh0CisrKyAvZGV2L251bGwKQEAg
LTEsMTk5ICswLDAgQEAKLUR1cmF0aW9uUHJvdG9JbnB1dFRvb0xhcmdlLkpzb25PdXRwdXQKLUR1
cmF0aW9uUHJvdG9JbnB1dFRvb1NtYWxsLkpzb25PdXRwdXQKLUZpZWxkTWFza051bWJlcnNEb250
Um91bmRUcmlwLkpzb25PdXRwdXQKLUZpZWxkTWFza1BhdGhzRG9udFJvdW5kVHJpcC5Kc29uT3V0
cHV0Ci1GaWVsZE1hc2tUb29NYW55VW5kZXJzY29yZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuQW55
Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5BbnkuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5BbnlO
ZXN0ZWQuSnNvbk91dHB1dAotSnNvbklucHV0LkFueU5lc3RlZC5Qcm90b2J1Zk91dHB1dAotSnNv
bklucHV0LkFueVVub3JkZXJlZFR5cGVUYWcuSnNvbk91dHB1dAotSnNvbklucHV0LkFueVVub3Jk
ZXJlZFR5cGVUYWcuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoRHVyYXRpb24uSnNv
bk91dHB1dAotSnNvbklucHV0LkFueVdpdGhEdXJhdGlvbi5Qcm90b2J1Zk91dHB1dAotSnNvbklu
cHV0LkFueVdpdGhGaWVsZE1hc2suSnNvbk91dHB1dAotSnNvbklucHV0LkFueVdpdGhGaWVsZE1h
c2suUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoSW50MzJWYWx1ZVdyYXBwZXIuSnNv
bk91dHB1dAotSnNvbklucHV0LkFueVdpdGhJbnQzMlZhbHVlV3JhcHBlci5Qcm90b2J1Zk91dHB1
dAotSnNvbklucHV0LkFueVdpdGhTdHJ1Y3QuSnNvbk91dHB1dAotSnNvbklucHV0LkFueVdpdGhT
dHJ1Y3QuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5BbnlXaXRoVGltZXN0YW1wLkpzb25PdXRw
dXQKLUpzb25JbnB1dC5BbnlXaXRoVGltZXN0YW1wLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQu
QW55V2l0aFZhbHVlRm9ySW50ZWdlci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuQW55V2l0aFZhbHVl
Rm9ySW50ZWdlci5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkFueVdpdGhWYWx1ZUZvckpzb25P
YmplY3QuSnNvbk91dHB1dAotSnNvbklucHV0LkFueVdpdGhWYWx1ZUZvckpzb25PYmplY3QuUHJv
dG9idWZPdXRwdXQKLUpzb25JbnB1dC5Cb29sRmllbGRJbnRlZ2VyT25lCi1Kc29uSW5wdXQuQm9v
bEZpZWxkSW50ZWdlclplcm8KLUpzb25JbnB1dC5Eb3VibGVGaWVsZEluZmluaXR5Lkpzb25PdXRw
dXQKLUpzb25JbnB1dC5Eb3VibGVGaWVsZEluZmluaXR5LlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5w
dXQuRG91YmxlRmllbGRNYXhOZWdhdGl2ZVZhbHVlLkpzb25PdXRwdXQKLUpzb25JbnB1dC5Eb3Vi
bGVGaWVsZE1heE5lZ2F0aXZlVmFsdWUuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5Eb3VibGVG
aWVsZE1heFBvc2l0aXZlVmFsdWUuSnNvbk91dHB1dAotSnNvbklucHV0LkRvdWJsZUZpZWxkTWF4
UG9zaXRpdmVWYWx1ZS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkRvdWJsZUZpZWxkTWluTmVn
YXRpdmVWYWx1ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuRG91YmxlRmllbGRNaW5OZWdhdGl2ZVZh
bHVlLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuRG91YmxlRmllbGRNaW5Qb3NpdGl2ZVZhbHVl
Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5Eb3VibGVGaWVsZE1pblBvc2l0aXZlVmFsdWUuUHJvdG9i
dWZPdXRwdXQKLUpzb25JbnB1dC5Eb3VibGVGaWVsZE5hbi5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQu
RG91YmxlRmllbGROYW4uUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5Eb3VibGVGaWVsZE5lZ2F0
aXZlSW5maW5pdHkuSnNvbk91dHB1dAotSnNvbklucHV0LkRvdWJsZUZpZWxkTmVnYXRpdmVJbmZp
bml0eS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkRvdWJsZUZpZWxkUXVvdGVkVmFsdWUuSnNv
bk91dHB1dAotSnNvbklucHV0LkRvdWJsZUZpZWxkUXVvdGVkVmFsdWUuUHJvdG9idWZPdXRwdXQK
LUpzb25JbnB1dC5EdXJhdGlvbkhhczNGcmFjdGlvbmFsRGlnaXRzLlZhbGlkYXRvcgotSnNvbklu
cHV0LkR1cmF0aW9uSGFzNkZyYWN0aW9uYWxEaWdpdHMuVmFsaWRhdG9yCi1Kc29uSW5wdXQuRHVy
YXRpb25IYXM5RnJhY3Rpb25hbERpZ2l0cy5WYWxpZGF0b3IKLUpzb25JbnB1dC5EdXJhdGlvbkhh
c1plcm9GcmFjdGlvbmFsRGlnaXQuVmFsaWRhdG9yCi1Kc29uSW5wdXQuRHVyYXRpb25NYXhWYWx1
ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuRHVyYXRpb25NYXhWYWx1ZS5Qcm90b2J1Zk91dHB1dAot
SnNvbklucHV0LkR1cmF0aW9uTWluVmFsdWUuSnNvbk91dHB1dAotSnNvbklucHV0LkR1cmF0aW9u
TWluVmFsdWUuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5EdXJhdGlvblJlcGVhdGVkVmFsdWUu
SnNvbk91dHB1dAotSnNvbklucHV0LkR1cmF0aW9uUmVwZWF0ZWRWYWx1ZS5Qcm90b2J1Zk91dHB1
dAotSnNvbklucHV0LkVudW1GaWVsZE51bWVyaWNWYWx1ZU5vblplcm8uSnNvbk91dHB1dAotSnNv
bklucHV0LkVudW1GaWVsZE51bWVyaWNWYWx1ZU5vblplcm8uUHJvdG9idWZPdXRwdXQKLUpzb25J
bnB1dC5FbnVtRmllbGROdW1lcmljVmFsdWVaZXJvLkpzb25PdXRwdXQKLUpzb25JbnB1dC5FbnVt
RmllbGROdW1lcmljVmFsdWVaZXJvLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuRW51bUZpZWxk
VW5rbm93blZhbHVlLlZhbGlkYXRvcgotSnNvbklucHV0LkZpZWxkTWFzay5Kc29uT3V0cHV0Ci1K
c29uSW5wdXQuRmllbGRNYXNrLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuRmllbGROYW1lSW5T
bmFrZUNhc2UuSnNvbk91dHB1dAotSnNvbklucHV0LkZpZWxkTmFtZVdpdGhNaXhlZENhc2VzLkpz
b25PdXRwdXQKLUpzb25JbnB1dC5GaWVsZE5hbWVXaXRoTWl4ZWRDYXNlcy5Qcm90b2J1Zk91dHB1
dAotSnNvbklucHV0LkZpZWxkTmFtZVdpdGhNaXhlZENhc2VzLlZhbGlkYXRvcgotSnNvbklucHV0
LkZsb2F0RmllbGRJbmZpbml0eS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuRmxvYXRGaWVsZEluZmlu
aXR5LlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuRmxvYXRGaWVsZE5hbi5Kc29uT3V0cHV0Ci1K
c29uSW5wdXQuRmxvYXRGaWVsZE5hbi5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkZsb2F0Rmll
bGROZWdhdGl2ZUluZmluaXR5Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5GbG9hdEZpZWxkTmVnYXRp
dmVJbmZpbml0eS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkZsb2F0RmllbGRRdW90ZWRWYWx1
ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuRmxvYXRGaWVsZFF1b3RlZFZhbHVlLlByb3RvYnVmT3V0
cHV0Ci1Kc29uSW5wdXQuRmxvYXRGaWVsZFRvb0xhcmdlCi1Kc29uSW5wdXQuRmxvYXRGaWVsZFRv
b1NtYWxsCi1Kc29uSW5wdXQuSW50MzJGaWVsZEV4cG9uZW50aWFsRm9ybWF0Lkpzb25PdXRwdXQK
LUpzb25JbnB1dC5JbnQzMkZpZWxkRXhwb25lbnRpYWxGb3JtYXQuUHJvdG9idWZPdXRwdXQKLUpz
b25JbnB1dC5JbnQzMkZpZWxkRmxvYXRUcmFpbGluZ1plcm8uSnNvbk91dHB1dAotSnNvbklucHV0
LkludDMyRmllbGRGbG9hdFRyYWlsaW5nWmVyby5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0Lklu
dDMyRmllbGRNYXhGbG9hdFZhbHVlLkpzb25PdXRwdXQKLUpzb25JbnB1dC5JbnQzMkZpZWxkTWF4
RmxvYXRWYWx1ZS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkludDMyRmllbGRNaW5GbG9hdFZh
bHVlLkpzb25PdXRwdXQKLUpzb25JbnB1dC5JbnQzMkZpZWxkTWluRmxvYXRWYWx1ZS5Qcm90b2J1
Zk91dHB1dAotSnNvbklucHV0LkludDMyRmllbGRTdHJpbmdWYWx1ZS5Kc29uT3V0cHV0Ci1Kc29u
SW5wdXQuSW50MzJGaWVsZFN0cmluZ1ZhbHVlLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuSW50
MzJGaWVsZFN0cmluZ1ZhbHVlRXNjYXBlZC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJGaWVs
ZFN0cmluZ1ZhbHVlRXNjYXBlZC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkludDMyTWFwRXNj
YXBlZEtleS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJNYXBFc2NhcGVkS2V5LlByb3RvYnVm
T3V0cHV0Ci1Kc29uSW5wdXQuSW50MzJNYXBGaWVsZC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuSW50
MzJNYXBGaWVsZC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkludDY0RmllbGRCZVN0cmluZy5W
YWxpZGF0b3IKLUpzb25JbnB1dC5JbnQ2NEZpZWxkTWF4VmFsdWUuSnNvbk91dHB1dAotSnNvbklu
cHV0LkludDY0RmllbGRNYXhWYWx1ZS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LkludDY0Rmll
bGRNaW5WYWx1ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuSW50NjRGaWVsZE1pblZhbHVlLlByb3Rv
YnVmT3V0cHV0Ci1Kc29uSW5wdXQuSW50NjRNYXBFc2NhcGVkS2V5Lkpzb25PdXRwdXQKLUpzb25J
bnB1dC5JbnQ2NE1hcEVzY2FwZWRLZXkuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5JbnQ2NE1h
cEZpZWxkLkpzb25PdXRwdXQKLUpzb25JbnB1dC5JbnQ2NE1hcEZpZWxkLlByb3RvYnVmT3V0cHV0
Ci1Kc29uSW5wdXQuTWVzc2FnZUZpZWxkLkpzb25PdXRwdXQKLUpzb25JbnB1dC5NZXNzYWdlRmll
bGQuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5NZXNzYWdlTWFwRmllbGQuSnNvbk91dHB1dAot
SnNvbklucHV0Lk1lc3NhZ2VNYXBGaWVsZC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0Lk1lc3Nh
Z2VSZXBlYXRlZEZpZWxkLkpzb25PdXRwdXQKLUpzb25JbnB1dC5NZXNzYWdlUmVwZWF0ZWRGaWVs
ZC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0Lk9wdGlvbmFsQm9vbFdyYXBwZXIuSnNvbk91dHB1
dAotSnNvbklucHV0Lk9wdGlvbmFsQm9vbFdyYXBwZXIuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1
dC5PcHRpb25hbEJ5dGVzV3JhcHBlci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuT3B0aW9uYWxCeXRl
c1dyYXBwZXIuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5PcHRpb25hbERvdWJsZVdyYXBwZXIu
SnNvbk91dHB1dAotSnNvbklucHV0Lk9wdGlvbmFsRG91YmxlV3JhcHBlci5Qcm90b2J1Zk91dHB1
dAotSnNvbklucHV0Lk9wdGlvbmFsRmxvYXRXcmFwcGVyLkpzb25PdXRwdXQKLUpzb25JbnB1dC5P
cHRpb25hbEZsb2F0V3JhcHBlci5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0Lk9wdGlvbmFsSW50
MzJXcmFwcGVyLkpzb25PdXRwdXQKLUpzb25JbnB1dC5PcHRpb25hbEludDMyV3JhcHBlci5Qcm90
b2J1Zk91dHB1dAotSnNvbklucHV0Lk9wdGlvbmFsSW50NjRXcmFwcGVyLkpzb25PdXRwdXQKLUpz
b25JbnB1dC5PcHRpb25hbEludDY0V3JhcHBlci5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0Lk9w
dGlvbmFsU3RyaW5nV3JhcHBlci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuT3B0aW9uYWxTdHJpbmdX
cmFwcGVyLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuT3B0aW9uYWxVaW50MzJXcmFwcGVyLkpz
b25PdXRwdXQKLUpzb25JbnB1dC5PcHRpb25hbFVpbnQzMldyYXBwZXIuUHJvdG9idWZPdXRwdXQK
LUpzb25JbnB1dC5PcHRpb25hbFVpbnQ2NFdyYXBwZXIuSnNvbk91dHB1dAotSnNvbklucHV0Lk9w
dGlvbmFsVWludDY0V3JhcHBlci5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0Lk9wdGlvbmFsV3Jh
cHBlclR5cGVzV2l0aE5vbkRlZmF1bHRWYWx1ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuT3B0aW9u
YWxXcmFwcGVyVHlwZXNXaXRoTm9uRGVmYXVsdFZhbHVlLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5w
dXQuT3JpZ2luYWxQcm90b0ZpZWxkTmFtZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuUHJpbWl0aXZl
UmVwZWF0ZWRGaWVsZC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuUHJpbWl0aXZlUmVwZWF0ZWRGaWVs
ZC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlJlcGVhdGVkQm9vbFdyYXBwZXIuSnNvbk91dHB1
dAotSnNvbklucHV0LlJlcGVhdGVkQm9vbFdyYXBwZXIuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1
dC5SZXBlYXRlZEJ5dGVzV3JhcHBlci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuUmVwZWF0ZWRCeXRl
c1dyYXBwZXIuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5SZXBlYXRlZERvdWJsZVdyYXBwZXIu
SnNvbk91dHB1dAotSnNvbklucHV0LlJlcGVhdGVkRG91YmxlV3JhcHBlci5Qcm90b2J1Zk91dHB1
dAotSnNvbklucHV0LlJlcGVhdGVkRmllbGRXcm9uZ0VsZW1lbnRUeXBlRXhwZWN0aW5nU3RyaW5n
c0dvdEludAotSnNvbklucHV0LlJlcGVhdGVkRmxvYXRXcmFwcGVyLkpzb25PdXRwdXQKLUpzb25J
bnB1dC5SZXBlYXRlZEZsb2F0V3JhcHBlci5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlJlcGVh
dGVkSW50MzJXcmFwcGVyLkpzb25PdXRwdXQKLUpzb25JbnB1dC5SZXBlYXRlZEludDMyV3JhcHBl
ci5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlJlcGVhdGVkSW50NjRXcmFwcGVyLkpzb25PdXRw
dXQKLUpzb25JbnB1dC5SZXBlYXRlZEludDY0V3JhcHBlci5Qcm90b2J1Zk91dHB1dAotSnNvbklu
cHV0LlJlcGVhdGVkU3RyaW5nV3JhcHBlci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuUmVwZWF0ZWRT
dHJpbmdXcmFwcGVyLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuUmVwZWF0ZWRVaW50MzJXcmFw
cGVyLkpzb25PdXRwdXQKLUpzb25JbnB1dC5SZXBlYXRlZFVpbnQzMldyYXBwZXIuUHJvdG9idWZP
dXRwdXQKLUpzb25JbnB1dC5SZXBlYXRlZFVpbnQ2NFdyYXBwZXIuSnNvbk91dHB1dAotSnNvbklu
cHV0LlJlcGVhdGVkVWludDY0V3JhcHBlci5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlN0cmlu
Z0ZpZWxkTm90QVN0cmluZwotSnNvbklucHV0LlN0cmluZ0ZpZWxkU3Vycm9nYXRlSW5Xcm9uZ09y
ZGVyCi1Kc29uSW5wdXQuU3RyaW5nRmllbGRTdXJyb2dhdGVQYWlyLkpzb25PdXRwdXQKLUpzb25J
bnB1dC5TdHJpbmdGaWVsZFN1cnJvZ2F0ZVBhaXIuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5T
dHJpbmdGaWVsZFVucGFpcmVkSGlnaFN1cnJvZ2F0ZQotSnNvbklucHV0LlN0cmluZ0ZpZWxkVW5w
YWlyZWRMb3dTdXJyb2dhdGUKLUpzb25JbnB1dC5TdHJ1Y3QuSnNvbk91dHB1dAotSnNvbklucHV0
LlN0cnVjdC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlRpbWVzdGFtcEhhczNGcmFjdGlvbmFs
RGlnaXRzLlZhbGlkYXRvcgotSnNvbklucHV0LlRpbWVzdGFtcEhhczZGcmFjdGlvbmFsRGlnaXRz
LlZhbGlkYXRvcgotSnNvbklucHV0LlRpbWVzdGFtcEhhczlGcmFjdGlvbmFsRGlnaXRzLlZhbGlk
YXRvcgotSnNvbklucHV0LlRpbWVzdGFtcEhhc1plcm9GcmFjdGlvbmFsRGlnaXQuVmFsaWRhdG9y
Ci1Kc29uSW5wdXQuVGltZXN0YW1wTWF4VmFsdWUuSnNvbk91dHB1dAotSnNvbklucHV0LlRpbWVz
dGFtcE1heFZhbHVlLlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuVGltZXN0YW1wTWluVmFsdWUu
SnNvbk91dHB1dAotSnNvbklucHV0LlRpbWVzdGFtcE1pblZhbHVlLlByb3RvYnVmT3V0cHV0Ci1K
c29uSW5wdXQuVGltZXN0YW1wUmVwZWF0ZWRWYWx1ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVGlt
ZXN0YW1wUmVwZWF0ZWRWYWx1ZS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlRpbWVzdGFtcFdp
dGhOZWdhdGl2ZU9mZnNldC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVGltZXN0YW1wV2l0aE5lZ2F0
aXZlT2Zmc2V0LlByb3RvYnVmT3V0cHV0Ci1Kc29uSW5wdXQuVGltZXN0YW1wV2l0aFBvc2l0aXZl
T2Zmc2V0Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5UaW1lc3RhbXBXaXRoUG9zaXRpdmVPZmZzZXQu
UHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5UaW1lc3RhbXBaZXJvTm9ybWFsaXplZC5WYWxpZGF0
b3IKLUpzb25JbnB1dC5VaW50MzJGaWVsZE1heEZsb2F0VmFsdWUuSnNvbk91dHB1dAotSnNvbklu
cHV0LlVpbnQzMkZpZWxkTWF4RmxvYXRWYWx1ZS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlVp
bnQzMk1hcEZpZWxkLkpzb25PdXRwdXQKLUpzb25JbnB1dC5VaW50MzJNYXBGaWVsZC5Qcm90b2J1
Zk91dHB1dAotSnNvbklucHV0LlVpbnQ2NEZpZWxkQmVTdHJpbmcuVmFsaWRhdG9yCi1Kc29uSW5w
dXQuVWludDY0RmllbGRNYXhWYWx1ZS5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVWludDY0RmllbGRN
YXhWYWx1ZS5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlVpbnQ2NE1hcEZpZWxkLkpzb25PdXRw
dXQKLUpzb25JbnB1dC5VaW50NjRNYXBGaWVsZC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlZh
bHVlQWNjZXB0Qm9vbC5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHRCb29sLlByb3Rv
YnVmT3V0cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHRGbG9hdC5Kc29uT3V0cHV0Ci1Kc29uSW5w
dXQuVmFsdWVBY2NlcHRGbG9hdC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0
SW50ZWdlci5Kc29uT3V0cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHRJbnRlZ2VyLlByb3RvYnVm
T3V0cHV0Ci1Kc29uSW5wdXQuVmFsdWVBY2NlcHRMaXN0Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5W
YWx1ZUFjY2VwdExpc3QuUHJvdG9idWZPdXRwdXQKLUpzb25JbnB1dC5WYWx1ZUFjY2VwdE51bGwu
SnNvbk91dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0TnVsbC5Qcm90b2J1Zk91dHB1dAotSnNv
bklucHV0LlZhbHVlQWNjZXB0T2JqZWN0Lkpzb25PdXRwdXQKLUpzb25JbnB1dC5WYWx1ZUFjY2Vw
dE9iamVjdC5Qcm90b2J1Zk91dHB1dAotSnNvbklucHV0LlZhbHVlQWNjZXB0U3RyaW5nLkpzb25P
dXRwdXQKLUpzb25JbnB1dC5WYWx1ZUFjY2VwdFN0cmluZy5Qcm90b2J1Zk91dHB1dAotUHJvdG9i
dWZJbnB1dC5Eb3VibGVGaWVsZE5vcm1hbGl6ZVF1aWV0TmFuLkpzb25PdXRwdXQKLVByb3RvYnVm
SW5wdXQuRG91YmxlRmllbGROb3JtYWxpemVTaWduYWxpbmdOYW4uSnNvbk91dHB1dAotUHJvdG9i
dWZJbnB1dC5GbG9hdEZpZWxkTm9ybWFsaXplUXVpZXROYW4uSnNvbk91dHB1dAotUHJvdG9idWZJ
bnB1dC5GbG9hdEZpZWxkTm9ybWFsaXplU2lnbmFsaW5nTmFuLkpzb25PdXRwdXQKLVRpbWVzdGFt
cFByb3RvSW5wdXRUb29MYXJnZS5Kc29uT3V0cHV0Ci1UaW1lc3RhbXBQcm90b0lucHV0VG9vU21h
bGwuSnNvbk91dHB1dApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25mb3JtYW5jZS90aGlyZF9wYXJ0eS9qc29uY3Bw
L2pzb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvY29uZm9ybWFuY2UvdGhpcmRfcGFydHkvanNvbmNwcC9qc29uLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTdlN2Y0YWQwMzZmYmQ5ODFmMTI1ZWJiOThjMTQ0MjM4
YjFkYmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jb25m
b3JtYW5jZS90aGlyZF9wYXJ0eS9qc29uY3BwL2pzb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDIw
NzUgKzAsMCBAQAotLy8vIEpzb24tY3BwIGFtYWxnYXRlZCBoZWFkZXIgKGh0dHA6Ly9qc29uY3Bw
LnNvdXJjZWZvcmdlLm5ldC8pLgotLy8vIEl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCAj
aW5jbHVkZSAianNvbi9qc29uLmgiCi0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEJlZ2lubmluZyBv
ZiBjb250ZW50IG9mIGZpbGU6IExJQ0VOU0UKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLyoKLVRoZSBK
c29uQ3BwIGxpYnJhcnkncyBzb3VyY2UgY29kZSwgaW5jbHVkaW5nIGFjY29tcGFueWluZyBkb2N1
bWVudGF0aW9uLCAKLXRlc3RzIGFuZCBkZW1vbnN0cmF0aW9uIGFwcGxpY2F0aW9ucywgYXJlIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBmb2xsb3dpbmcKLWNvbmRpdGlvbnMuLi4KLQotVGhlIGF1dGhvciAo
QmFwdGlzdGUgTGVwaWxsZXVyKSBleHBsaWNpdGx5IGRpc2NsYWltcyBjb3B5cmlnaHQgaW4gYWxs
IAotanVyaXNkaWN0aW9ucyB3aGljaCByZWNvZ25pemUgc3VjaCBhIGRpc2NsYWltZXIuIEluIHN1
Y2gganVyaXNkaWN0aW9ucywgCi10aGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIGludG8gdGhlIFB1
YmxpYyBEb21haW4uCi0KLUluIGp1cmlzZGljdGlvbnMgd2hpY2ggZG8gbm90IHJlY29nbml6ZSBQ
dWJsaWMgRG9tYWluIHByb3BlcnR5IChlLmcuIEdlcm1hbnkgYXMgb2YKLTIwMTApLCB0aGlzIHNv
ZnR3YXJlIGlzIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIGJ5IEJhcHRpc3RlIExlcGlsbGV1ciwg
YW5kIGlzCi1yZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlIChzZWUg
YmVsb3cpLgotCi1JbiBqdXJpc2RpY3Rpb25zIHdoaWNoIHJlY29nbml6ZSBQdWJsaWMgRG9tYWlu
IHByb3BlcnR5LCB0aGUgdXNlciBvZiB0aGlzIAotc29mdHdhcmUgbWF5IGNob29zZSB0byBhY2Nl
cHQgaXQgZWl0aGVyIGFzIDEpIFB1YmxpYyBEb21haW4sIDIpIHVuZGVyIHRoZSAKLWNvbmRpdGlv
bnMgb2YgdGhlIE1JVCBMaWNlbnNlIChzZWUgYmVsb3cpLCBvciAzKSB1bmRlciB0aGUgdGVybXMg
b2YgZHVhbCAKLVB1YmxpYyBEb21haW4vTUlUIExpY2Vuc2UgY29uZGl0aW9ucyBkZXNjcmliZWQg
aGVyZSwgYXMgdGhleSBjaG9vc2UuCi0KLVRoZSBNSVQgTGljZW5zZSBpcyBhYm91dCBhcyBjbG9z
ZSB0byBQdWJsaWMgRG9tYWluIGFzIGEgbGljZW5zZSBjYW4gZ2V0LCBhbmQgaXMKLWRlc2NyaWJl
ZCBpbiBjbGVhciwgY29uY2lzZSB0ZXJtcyBhdDoKLQotICAgaHR0cDovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9NSVRfTGljZW5zZQotICAgCi1UaGUgZnVsbCB0ZXh0IG9mIHRoZSBNSVQgTGljZW5z
ZSBmb2xsb3dzOgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJh
cHRpc3RlIExlcGlsbGV1cgotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbgotb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJl
IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KLWZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRv
IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKLXJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0
aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LAotbW9kaWZ5LCBtZXJnZSwg
cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi1vZiB0
aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBp
cwotZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
czoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp
Y2Ugc2hhbGwgYmUKLWluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv
bnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg
V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLUVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVE
SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZ
LCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLU5PTklORlJJTkdFTUVOVC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKLUJFIExJ
QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBBTgotQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N
LCBPVVQgT0YgT1IgSU4KLUNPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP
UiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLVNPRlRXQVJFLgotPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0oRU5E
IExJQ0VOU0UgVEVYVCkKLQotVGhlIE1JVCBsaWNlbnNlIGlzIGNvbXBhdGlibGUgd2l0aCBib3Ro
IHRoZSBHUEwgYW5kIGNvbW1lcmNpYWwKLXNvZnR3YXJlLCBhZmZvcmRpbmcgb25lIGFsbCBvZiB0
aGUgcmlnaHRzIG9mIFB1YmxpYyBEb21haW4gd2l0aCB0aGUKLW1pbm9yIG51aXNhbmNlIG9mIGJl
aW5nIHJlcXVpcmVkIHRvIGtlZXAgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UKLWFuZCBsaWNl
bnNlIHRleHQgaW4gdGhlIHNvdXJjZSBjb2RlLiBOb3RlIGFsc28gdGhhdCBieSBhY2NlcHRpbmcg
dGhlCi1QdWJsaWMgRG9tYWluICJsaWNlbnNlIiB5b3UgY2FuIHJlLWxpY2Vuc2UgeW91ciBjb3B5
IHVzaW5nIHdoYXRldmVyCi1saWNlbnNlIHlvdSBsaWtlLgotCi0qLwotCi0vLyAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0vLyBFbmQgb2YgY29udGVudCBvZiBmaWxlOiBMSUNFTlNFCi0vLyAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0KLQotCi0KLQotI2lmbmRlZiBKU09OX0FNQUxHQVRFRF9IX0lOQ0xVREVECi0jIGRlZmluZSBK
U09OX0FNQUxHQVRFRF9IX0lOQ0xVREVECi0vLy8gSWYgZGVmaW5lZCwgaW5kaWNhdGVzIHRoYXQg
dGhlIHNvdXJjZSBmaWxlIGlzIGFtYWxnYXRlZAotLy8vIHRvIHByZXZlbnQgcHJpdmF0ZSBoZWFk
ZXIgaW5jbHVzaW9uLgotI2RlZmluZSBKU09OX0lTX0FNQUxHQU1BVElPTgotCi0vLyAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0vLyBCZWdpbm5pbmcgb2YgY29udGVudCBvZiBmaWxlOiBpbmNsdWRlL2pzb24vdmVy
c2lvbi5oCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8vIERPIE5PVCBFRElULiBUaGlzIGZpbGUgKGFu
ZCAidmVyc2lvbiIpIGlzIGdlbmVyYXRlZCBieSBDTWFrZS4KLS8vIFJ1biBDTWFrZSBjb25maWd1
cmUgc3RlcCB0byB1cGRhdGUgaXQuCi0jaWZuZGVmIEpTT05fVkVSU0lPTl9IX0lOQ0xVREVECi0j
IGRlZmluZSBKU09OX1ZFUlNJT05fSF9JTkNMVURFRAotCi0jIGRlZmluZSBKU09OQ1BQX1ZFUlNJ
T05fU1RSSU5HICIxLjYuNSIKLSMgZGVmaW5lIEpTT05DUFBfVkVSU0lPTl9NQUpPUiAxCi0jIGRl
ZmluZSBKU09OQ1BQX1ZFUlNJT05fTUlOT1IgNgotIyBkZWZpbmUgSlNPTkNQUF9WRVJTSU9OX1BB
VENIIDUKLSMgZGVmaW5lIEpTT05DUFBfVkVSU0lPTl9RVUFMSUZJRVIKLSMgZGVmaW5lIEpTT05D
UFBfVkVSU0lPTl9IRVhBICgoSlNPTkNQUF9WRVJTSU9OX01BSk9SIDw8IDI0KSB8IChKU09OQ1BQ
X1ZFUlNJT05fTUlOT1IgPDwgMTYpIHwgKEpTT05DUFBfVkVSU0lPTl9QQVRDSCA8PCA4KSkKLQot
I2VuZGlmIC8vIEpTT05fVkVSU0lPTl9IX0lOQ0xVREVECi0KLS8vIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
IEVuZCBvZiBjb250ZW50IG9mIGZpbGU6IGluY2x1ZGUvanNvbi92ZXJzaW9uLmgKLS8vIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQotCi0KLQotCi0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEJlZ2lubmluZyBvZiBj
b250ZW50IG9mIGZpbGU6IGluY2x1ZGUvanNvbi9jb25maWcuaAotLy8gLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ci0vLyBDb3B5cmlnaHQgMjAwNy0yMDEwIEJhcHRpc3RlIExlcGlsbGV1cgotLy8gRGlzdHJpYnV0
ZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIG9yIHB1YmxpYyBkb21haW4gaWYgZGVzaXJlZCBhbmQKLS8v
IHJlY29nbml6ZWQgaW4geW91ciBqdXJpc2RpY3Rpb24uCi0vLyBTZWUgZmlsZSBMSUNFTlNFIGZv
ciBkZXRhaWwgb3IgY29weSBhdCBodHRwOi8vanNvbmNwcC5zb3VyY2Vmb3JnZS5uZXQvTElDRU5T
RQotCi0jaWZuZGVmIEpTT05fQ09ORklHX0hfSU5DTFVERUQKLSNkZWZpbmUgSlNPTl9DT05GSUdf
SF9JTkNMVURFRAotCi0vLy8gSWYgZGVmaW5lZCwgaW5kaWNhdGVzIHRoYXQganNvbiBsaWJyYXJ5
IGlzIGVtYmVkZGVkIGluIENwcFRMIGxpYnJhcnkuCi0vLyMgZGVmaW5lIEpTT05fSU5fQ1BQVEwg
MQotCi0vLy8gSWYgZGVmaW5lZCwgaW5kaWNhdGVzIHRoYXQganNvbiBtYXkgbGV2ZXJhZ2UgQ3Bw
VEwgbGlicmFyeQotLy8jICBkZWZpbmUgSlNPTl9VU0VfQ1BQVEwgMQotLy8vIElmIGRlZmluZWQs
IGluZGljYXRlcyB0aGF0IGNwcHRsIHZlY3RvciBiYXNlZCBtYXAgc2hvdWxkIGJlIHVzZWQgaW5z
dGVhZCBvZgotLy8vIHN0ZDo6bWFwCi0vLy8gYXMgVmFsdWUgY29udGFpbmVyLgotLy8jICBkZWZp
bmUgSlNPTl9VU0VfQ1BQVExfU01BTExNQVAgMQotCi0vLyBJZiBub24temVybywgdGhlIGxpYnJh
cnkgdXNlcyBleGNlcHRpb25zIHRvIHJlcG9ydCBiYWQgaW5wdXQgaW5zdGVhZCBvZiBDCi0vLyBh
c3NlcnRpb24gbWFjcm9zLiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgZXhjZXB0aW9ucy4KLSNpZm5k
ZWYgSlNPTl9VU0VfRVhDRVBUSU9OCi0jZGVmaW5lIEpTT05fVVNFX0VYQ0VQVElPTiAxCi0jZW5k
aWYKLQotLy8vIElmIGRlZmluZWQsIGluZGljYXRlcyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBpcyBh
bWFsZ2F0ZWQKLS8vLyB0byBwcmV2ZW50IHByaXZhdGUgaGVhZGVyIGluY2x1c2lvbi4KLS8vLyBS
ZW1hcmtzOiBpdCBpcyBhdXRvbWF0aWNhbGx5IGRlZmluZWQgaW4gdGhlIGdlbmVyYXRlZCBhbWFs
Z2F0ZWQgaGVhZGVyLgotLy8gI2RlZmluZSBKU09OX0lTX0FNQUxHQU1BVElPTgotCi0jaWZkZWYg
SlNPTl9JTl9DUFBUTAotI2luY2x1ZGUgPGNwcHRsL2NvbmZpZy5oPgotI2lmbmRlZiBKU09OX1VT
RV9DUFBUTAotI2RlZmluZSBKU09OX1VTRV9DUFBUTCAxCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZk
ZWYgSlNPTl9JTl9DUFBUTAotI2RlZmluZSBKU09OX0FQSSBDUFBUTF9BUEkKLSNlbGlmIGRlZmlu
ZWQoSlNPTl9ETExfQlVJTEQpCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNkZWZpbmUgSlNPTl9B
UEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jZGVmaW5lIEpTT05DUFBfRElTQUJMRV9ETExfSU5U
RVJGQUNFX1dBUk5JTkcKLSNlbmRpZiAvLyBpZiBkZWZpbmVkKF9NU0NfVkVSKQotI2VsaWYgZGVm
aW5lZChKU09OX0RMTCkKLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotI2RlZmluZSBKU09OX0FQSSBf
X2RlY2xzcGVjKGRsbGltcG9ydCkKLSNkZWZpbmUgSlNPTkNQUF9ESVNBQkxFX0RMTF9JTlRFUkZB
Q0VfV0FSTklORwotI2VuZGlmIC8vIGlmIGRlZmluZWQoX01TQ19WRVIpCi0jZW5kaWYgLy8gaWZk
ZWYgSlNPTl9JTl9DUFBUTAotI2lmICFkZWZpbmVkKEpTT05fQVBJKQotI2RlZmluZSBKU09OX0FQ
SQotI2VuZGlmCi0KLS8vIElmIEpTT05fTk9fSU5UNjQgaXMgZGVmaW5lZCwgdGhlbiBKc29uIG9u
bHkgc3VwcG9ydCBDKysgImludCIgdHlwZSBmb3IKLS8vIGludGVnZXIKLS8vIFN0b3JhZ2VzLCBh
bmQgNjQgYml0cyBpbnRlZ2VyIHN1cHBvcnQgaXMgZGlzYWJsZWQuCi0vLyAjZGVmaW5lIEpTT05f
Tk9fSU5UNjQgMQotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikgLy8gTVNWQwotIyAgaWYgX01TQ19W
RVIgPD0gMTIwMCAvLyBNU1ZDIDYKLSAgICAvLyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA2IG9u
bHkgc3VwcG9ydCBjb252ZXJzaW9uIGZyb20gX19pbnQ2NCB0byBkb3VibGUKLSAgICAvLyAobm8g
Y29udmVyc2lvbiBmcm9tIHVuc2lnbmVkIF9faW50NjQpLgotIyAgICBkZWZpbmUgSlNPTl9VU0Vf
SU5UNjRfRE9VQkxFX0NPTlZFUlNJT04gMQotICAgIC8vIERpc2FibGUgd2FybmluZyA0Nzg2IGZv
ciBWUzYgY2F1c2VkIGJ5IFNUTCAoaWRlbnRpZmllciB3YXMgdHJ1bmNhdGVkIHRvICcyNTUnCi0g
ICAgLy8gY2hhcmFjdGVycyBpbiB0aGUgZGVidWcgaW5mb3JtYXRpb24pCi0gICAgLy8gQWxsIHBy
b2plY3RzIEkndmUgZXZlciBzZWVuIHdpdGggVlM2IHdlcmUgdXNpbmcgdGhpcyBnbG9iYWxseSAo
bm90IGJvdGhlcmluZwotICAgIC8vIHdpdGggcHJhZ21hIHB1c2gvcG9wKS4KLSMgICAgcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZSA6IDQ3ODYpCi0jICBlbmRpZiAvLyBNU1ZDIDYKLQotIyAgaWYgX01T
Q19WRVIgPj0gMTUwMCAvLyBNU1ZDIDIwMDgKLSAgICAvLy8gSW5kaWNhdGVzIHRoYXQgdGhlIGZv
bGxvd2luZyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLgotIyAgICBkZWZpbmUgSlNPTkNQUF9ERVBS
RUNBVEVEKG1lc3NhZ2UpIF9fZGVjbHNwZWMoZGVwcmVjYXRlZChtZXNzYWdlKSkKLSMgIGVuZGlm
Ci0KLSNlbmRpZiAvLyBkZWZpbmVkKF9NU0NfVkVSKQotCi0KLSNpZm5kZWYgSlNPTl9IQVNfUlZB
TFVFX1JFRkVSRU5DRVMKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE2
MDAgLy8gTVNWQyA+PSAyMDEwCi0jZGVmaW5lIEpTT05fSEFTX1JWQUxVRV9SRUZFUkVOQ0VTIDEK
LSNlbmRpZiAvLyBNU1ZDID49IDIwMTAKLQotI2lmZGVmIF9fY2xhbmdfXwotI2lmIF9faGFzX2Zl
YXR1cmUoY3h4X3J2YWx1ZV9yZWZlcmVuY2VzKQotI2RlZmluZSBKU09OX0hBU19SVkFMVUVfUkVG
RVJFTkNFUyAxCi0jZW5kaWYgIC8vIGhhc19mZWF0dXJlCi0KLSNlbGlmIGRlZmluZWQgX19HTlVD
X18gLy8gbm90IGNsYW5nIChnY2MgY29tZXMgbGF0ZXIgc2luY2UgY2xhbmcgZW11bGF0ZXMgZ2Nj
KQotI2lmIGRlZmluZWQoX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18pIHx8IChfX2NwbHVzcGx1
cyA+PSAyMDExMDNMKQotI2RlZmluZSBKU09OX0hBU19SVkFMVUVfUkVGRVJFTkNFUyAxCi0jZW5k
aWYgIC8vIEdYWF9FWFBFUklNRU5UQUwKLQotI2VuZGlmIC8vIF9fY2xhbmdfXyB8fCBfX0dOVUNf
XwotCi0jZW5kaWYgLy8gbm90IGRlZmluZWQgSlNPTl9IQVNfUlZBTFVFX1JFRkVSRU5DRVMKLQot
I2lmbmRlZiBKU09OX0hBU19SVkFMVUVfUkVGRVJFTkNFUwotI2RlZmluZSBKU09OX0hBU19SVkFM
VUVfUkVGRVJFTkNFUyAwCi0jZW5kaWYKLQotI2lmZGVmIF9fY2xhbmdfXwotI2VsaWYgZGVmaW5l
ZCBfX0dOVUNfXyAvLyBub3QgY2xhbmcgKGdjYyBjb21lcyBsYXRlciBzaW5jZSBjbGFuZyBlbXVs
YXRlcyBnY2MpCi0jICBpZiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05V
Q19NSU5PUl9fID49IDUpKQotIyAgICBkZWZpbmUgSlNPTkNQUF9ERVBSRUNBVEVEKG1lc3NhZ2Up
ICBfX2F0dHJpYnV0ZV9fICgoZGVwcmVjYXRlZChtZXNzYWdlKSkpCi0jICBlbGlmIChfX0dOVUNf
XyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMSkpCi0jICAgIGRl
ZmluZSBKU09OQ1BQX0RFUFJFQ0FURUQobWVzc2FnZSkgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVj
YXRlZF9fKSkKLSMgIGVuZGlmICAvLyBHTlVDIHZlcnNpb24KLSNlbmRpZiAvLyBfX2NsYW5nX18g
fHwgX19HTlVDX18KLQotI2lmICFkZWZpbmVkKEpTT05DUFBfREVQUkVDQVRFRCkKLSNkZWZpbmUg
SlNPTkNQUF9ERVBSRUNBVEVEKG1lc3NhZ2UpCi0jZW5kaWYgLy8gaWYgIWRlZmluZWQoSlNPTkNQ
UF9ERVBSRUNBVEVEKQotCi1uYW1lc3BhY2UgSnNvbiB7Ci10eXBlZGVmIGludCBJbnQ7Ci10eXBl
ZGVmIHVuc2lnbmVkIGludCBVSW50OwotI2lmIGRlZmluZWQoSlNPTl9OT19JTlQ2NCkKLXR5cGVk
ZWYgaW50IExhcmdlc3RJbnQ7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBMYXJnZXN0VUludDsKLSN1
bmRlZiBKU09OX0hBU19JTlQ2NAotI2Vsc2UgICAgICAgICAgICAgICAgIC8vIGlmIGRlZmluZWQo
SlNPTl9OT19JTlQ2NCkKLS8vIEZvciBNaWNyb3NvZnQgVmlzdWFsIHVzZSBzcGVjaWZpYyB0eXBl
cyBhcyBsb25nIGxvbmcgaXMgbm90IHN1cHBvcnRlZAotI2lmIGRlZmluZWQoX01TQ19WRVIpIC8v
IE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCi10eXBlZGVmIF9faW50NjQgSW50NjQ7Ci10eXBlZGVm
IHVuc2lnbmVkIF9faW50NjQgVUludDY0OwotI2Vsc2UgICAgICAgICAgICAgICAgIC8vIGlmIGRl
ZmluZWQoX01TQ19WRVIpIC8vIE90aGVyIHBsYXRmb3JtcywgdXNlIGxvbmcgbG9uZwotdHlwZWRl
ZiBsb25nIGxvbmcgaW50IEludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IFVJ
bnQ2NDsKLSNlbmRpZiAvLyBpZiBkZWZpbmVkKF9NU0NfVkVSKQotdHlwZWRlZiBJbnQ2NCBMYXJn
ZXN0SW50OwotdHlwZWRlZiBVSW50NjQgTGFyZ2VzdFVJbnQ7Ci0jZGVmaW5lIEpTT05fSEFTX0lO
VDY0Ci0jZW5kaWYgLy8gaWYgZGVmaW5lZChKU09OX05PX0lOVDY0KQotfSAvLyBlbmQgbmFtZXNw
YWNlIEpzb24KLQotI2VuZGlmIC8vIEpTT05fQ09ORklHX0hfSU5DTFVERUQKLQotLy8gLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8gRW5kIG9mIGNvbnRlbnQgb2YgZmlsZTogaW5jbHVkZS9qc29uL2NvbmZpZy5o
Ci0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0KLQotCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBCZWdp
bm5pbmcgb2YgY29udGVudCBvZiBmaWxlOiBpbmNsdWRlL2pzb24vZm9yd2FyZHMuaAotLy8gLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotCi0vLyBDb3B5cmlnaHQgMjAwNy0yMDEwIEJhcHRpc3RlIExlcGlsbGV1cgot
Ly8gRGlzdHJpYnV0ZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIG9yIHB1YmxpYyBkb21haW4gaWYgZGVz
aXJlZCBhbmQKLS8vIHJlY29nbml6ZWQgaW4geW91ciBqdXJpc2RpY3Rpb24uCi0vLyBTZWUgZmls
ZSBMSUNFTlNFIGZvciBkZXRhaWwgb3IgY29weSBhdCBodHRwOi8vanNvbmNwcC5zb3VyY2Vmb3Jn
ZS5uZXQvTElDRU5TRQotCi0jaWZuZGVmIEpTT05fRk9SV0FSRFNfSF9JTkNMVURFRAotI2RlZmlu
ZSBKU09OX0ZPUldBUkRTX0hfSU5DTFVERUQKLQotI2lmICFkZWZpbmVkKEpTT05fSVNfQU1BTEdB
TUFUSU9OKQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmIC8vIGlmICFkZWZpbmVkKEpTT05f
SVNfQU1BTEdBTUFUSU9OKQotCi1uYW1lc3BhY2UgSnNvbiB7Ci0KLS8vIHdyaXRlci5oCi1jbGFz
cyBGYXN0V3JpdGVyOwotY2xhc3MgU3R5bGVkV3JpdGVyOwotCi0vLyByZWFkZXIuaAotY2xhc3Mg
UmVhZGVyOwotCi0vLyBmZWF0dXJlcy5oCi1jbGFzcyBGZWF0dXJlczsKLQotLy8gdmFsdWUuaAot
dHlwZWRlZiB1bnNpZ25lZCBpbnQgQXJyYXlJbmRleDsKLWNsYXNzIFN0YXRpY1N0cmluZzsKLWNs
YXNzIFBhdGg7Ci1jbGFzcyBQYXRoQXJndW1lbnQ7Ci1jbGFzcyBWYWx1ZTsKLWNsYXNzIFZhbHVl
SXRlcmF0b3JCYXNlOwotY2xhc3MgVmFsdWVJdGVyYXRvcjsKLWNsYXNzIFZhbHVlQ29uc3RJdGVy
YXRvcjsKLQotfSAvLyBuYW1lc3BhY2UgSnNvbgotCi0jZW5kaWYgLy8gSlNPTl9GT1JXQVJEU19I
X0lOQ0xVREVECi0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEVuZCBvZiBjb250ZW50IG9mIGZpbGU6
IGluY2x1ZGUvanNvbi9mb3J3YXJkcy5oCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0KLQotCi0v
LyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLyBCZWdpbm5pbmcgb2YgY29udGVudCBvZiBmaWxlOiBpbmNsdWRl
L2pzb24vZmVhdHVyZXMuaAotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLyBDb3B5cmlnaHQgMjAwNy0y
MDEwIEJhcHRpc3RlIExlcGlsbGV1cgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgTUlUIGxpY2Vuc2Us
IG9yIHB1YmxpYyBkb21haW4gaWYgZGVzaXJlZCBhbmQKLS8vIHJlY29nbml6ZWQgaW4geW91ciBq
dXJpc2RpY3Rpb24uCi0vLyBTZWUgZmlsZSBMSUNFTlNFIGZvciBkZXRhaWwgb3IgY29weSBhdCBo
dHRwOi8vanNvbmNwcC5zb3VyY2Vmb3JnZS5uZXQvTElDRU5TRQotCi0jaWZuZGVmIENQUFRMX0pT
T05fRkVBVFVSRVNfSF9JTkNMVURFRAotI2RlZmluZSBDUFBUTF9KU09OX0ZFQVRVUkVTX0hfSU5D
TFVERUQKLQotI2lmICFkZWZpbmVkKEpTT05fSVNfQU1BTEdBTUFUSU9OKQotI2luY2x1ZGUgImZv
cndhcmRzLmgiCi0jZW5kaWYgLy8gaWYgIWRlZmluZWQoSlNPTl9JU19BTUFMR0FNQVRJT04pCi0K
LW5hbWVzcGFjZSBKc29uIHsKLQotLyoqIFxicmllZiBDb25maWd1cmF0aW9uIHBhc3NlZCB0byBy
ZWFkZXIgYW5kIHdyaXRlci4KLSAqIFRoaXMgY29uZmlndXJhdGlvbiBvYmplY3QgY2FuIGJlIHVz
ZWQgdG8gZm9yY2UgdGhlIFJlYWRlciBvciBXcml0ZXIKLSAqIHRvIGJlaGF2ZSBpbiBhIHN0YW5k
YXJkIGNvbmZvcm1pbmcgd2F5LgotICovCi1jbGFzcyBKU09OX0FQSSBGZWF0dXJlcyB7Ci1wdWJs
aWM6Ci0gIC8qKiBcYnJpZWYgQSBjb25maWd1cmF0aW9uIHRoYXQgYWxsb3dzIGFsbCBmZWF0dXJl
cyBhbmQgYXNzdW1lcyBhbGwgc3RyaW5ncwotICAgKiBhcmUgVVRGLTguCi0gICAqIC0gQyAmIEMr
KyBjb21tZW50cyBhcmUgYWxsb3dlZAotICAgKiAtIFJvb3Qgb2JqZWN0IGNhbiBiZSBhbnkgSlNP
TiB2YWx1ZQotICAgKiAtIEFzc3VtZXMgVmFsdWUgc3RyaW5ncyBhcmUgZW5jb2RlZCBpbiBVVEYt
OAotICAgKi8KLSAgc3RhdGljIEZlYXR1cmVzIGFsbCgpOwotCi0gIC8qKiBcYnJpZWYgQSBjb25m
aWd1cmF0aW9uIHRoYXQgaXMgc3RyaWN0bHkgY29tcGF0aWJsZSB3aXRoIHRoZSBKU09OCi0gICAq
IHNwZWNpZmljYXRpb24uCi0gICAqIC0gQ29tbWVudHMgYXJlIGZvcmJpZGRlbi4KLSAgICogLSBS
b290IG9iamVjdCBtdXN0IGJlIGVpdGhlciBhbiBhcnJheSBvciBhbiBvYmplY3QgdmFsdWUuCi0g
ICAqIC0gQXNzdW1lcyBWYWx1ZSBzdHJpbmdzIGFyZSBlbmNvZGVkIGluIFVURi04Ci0gICAqLwot
ICBzdGF0aWMgRmVhdHVyZXMgc3RyaWN0TW9kZSgpOwotCi0gIC8qKiBcYnJpZWYgSW5pdGlhbGl6
ZSB0aGUgY29uZmlndXJhdGlvbiBsaWtlIEpzb25Db25maWc6OmFsbEZlYXR1cmVzOwotICAgKi8K
LSAgRmVhdHVyZXMoKTsKLQotICAvLy8gXGMgdHJ1ZSBpZiBjb21tZW50cyBhcmUgYWxsb3dlZC4g
RGVmYXVsdDogXGMgdHJ1ZS4KLSAgYm9vbCBhbGxvd0NvbW1lbnRzXzsKLQotICAvLy8gXGMgdHJ1
ZSBpZiByb290IG11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9yIGFuIG9iamVjdCB2YWx1ZS4gRGVm
YXVsdDogXGMKLSAgLy8vIGZhbHNlLgotICBib29sIHN0cmljdFJvb3RfOwotCi0gIC8vLyBcYyB0
cnVlIGlmIGRyb3BwZWQgbnVsbCBwbGFjZWhvbGRlcnMgYXJlIGFsbG93ZWQuIERlZmF1bHQ6IFxj
IGZhbHNlLgotICBib29sIGFsbG93RHJvcHBlZE51bGxQbGFjZWhvbGRlcnNfOwotCi0gIC8vLyBc
YyB0cnVlIGlmIG51bWVyaWMgb2JqZWN0IGtleSBhcmUgYWxsb3dlZC4gRGVmYXVsdDogXGMgZmFs
c2UuCi0gIGJvb2wgYWxsb3dOdW1lcmljS2V5c187Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKc29u
Ci0KLSNlbmRpZiAvLyBDUFBUTF9KU09OX0ZFQVRVUkVTX0hfSU5DTFVERUQKLQotLy8gLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8gRW5kIG9mIGNvbnRlbnQgb2YgZmlsZTogaW5jbHVkZS9qc29uL2ZlYXR1cmVz
LmgKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLQotCi0KLQotCi0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEJl
Z2lubmluZyBvZiBjb250ZW50IG9mIGZpbGU6IGluY2x1ZGUvanNvbi92YWx1ZS5oCi0vLyAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLS8vIENvcHlyaWdodCAyMDA3LTIwMTAgQmFwdGlzdGUgTGVwaWxsZXVyCi0v
LyBEaXN0cmlidXRlZCB1bmRlciBNSVQgbGljZW5zZSwgb3IgcHVibGljIGRvbWFpbiBpZiBkZXNp
cmVkIGFuZAotLy8gcmVjb2duaXplZCBpbiB5b3VyIGp1cmlzZGljdGlvbi4KLS8vIFNlZSBmaWxl
IExJQ0VOU0UgZm9yIGRldGFpbCBvciBjb3B5IGF0IGh0dHA6Ly9qc29uY3BwLnNvdXJjZWZvcmdl
Lm5ldC9MSUNFTlNFCi0KLSNpZm5kZWYgQ1BQVExfSlNPTl9IX0lOQ0xVREVECi0jZGVmaW5lIENQ
UFRMX0pTT05fSF9JTkNMVURFRAotCi0jaWYgIWRlZmluZWQoSlNPTl9JU19BTUFMR0FNQVRJT04p
Ci0jaW5jbHVkZSAiZm9yd2FyZHMuaCIKLSNlbmRpZiAvLyBpZiAhZGVmaW5lZChKU09OX0lTX0FN
QUxHQU1BVElPTikKLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1
ZGUgPGV4Y2VwdGlvbj4KLQotI2lmbmRlZiBKU09OX1VTRV9DUFBUTF9TTUFMTE1BUAotI2luY2x1
ZGUgPG1hcD4KLSNlbHNlCi0jaW5jbHVkZSA8Y3BwdGwvc21hbGxtYXAuaD4KLSNlbmRpZgotI2lm
ZGVmIEpTT05fVVNFX0NQUFRMCi0jaW5jbHVkZSA8Y3BwdGwvZm9yd2FyZHMuaD4KLSNlbmRpZgot
Ci0vLyBEaXNhYmxlIHdhcm5pbmcgQzQyNTE6IDxkYXRhIG1lbWJlcj46IDx0eXBlPiBuZWVkcyB0
byBoYXZlIGRsbC1pbnRlcmZhY2UgdG8KLS8vIGJlIHVzZWQgYnkuLi4KLSNpZiBkZWZpbmVkKEpT
T05DUFBfRElTQUJMRV9ETExfSU5URVJGQUNFX1dBUk5JTkcpCi0jcHJhZ21hIHdhcm5pbmcocHVz
aCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDI1MSkKLSNlbmRpZiAvLyBpZiBkZWZpbmVk
KEpTT05DUFBfRElTQUJMRV9ETExfSU5URVJGQUNFX1dBUk5JTkcpCi0KLS8qKiBcYnJpZWYgSlNP
TiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pLgotICovCi1uYW1lc3BhY2UgSnNvbiB7Ci0K
LS8qKiBCYXNlIGNsYXNzIGZvciBhbGwgZXhjZXB0aW9ucyB3ZSB0aHJvdy4KLSAqCi0gKiBXZSB1
c2Ugbm90aGluZyBidXQgdGhlc2UgaW50ZXJuYWxseS4gT2YgY291cnNlLCBTVEwgY2FuIHRocm93
IG90aGVycy4KLSAqLwotY2xhc3MgSlNPTl9BUEkgRXhjZXB0aW9uIDogcHVibGljIHN0ZDo6ZXhj
ZXB0aW9uIHsKLXB1YmxpYzoKLSAgRXhjZXB0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpOwot
ICB+RXhjZXB0aW9uKCkgdGhyb3coKSBvdmVycmlkZTsKLSAgY2hhciBjb25zdCogd2hhdCgpIGNv
bnN0IHRocm93KCkgb3ZlcnJpZGU7Ci1wcm90ZWN0ZWQ6Ci0gIHN0ZDo6c3RyaW5nIG1zZ187Ci19
OwotCi0vKiogRXhjZXB0aW9ucyB3aGljaCB0aGUgdXNlciBjYW5ub3QgZWFzaWx5IGF2b2lkLgot
ICoKLSAqIEUuZy4gb3V0LW9mLW1lbW9yeSAod2hlbiB3ZSB1c2UgbWFsbG9jKSwgc3RhY2stb3Zl
cmZsb3csIG1hbGljaW91cyBpbnB1dAotICogCi0gKiBccmVtYXJrIGRlcml2ZWQgZnJvbSBKc29u
OjpFeGNlcHRpb24KLSAqLwotY2xhc3MgSlNPTl9BUEkgUnVudGltZUVycm9yIDogcHVibGljIEV4
Y2VwdGlvbiB7Ci1wdWJsaWM6Ci0gIFJ1bnRpbWVFcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgbXNn
KTsKLX07Ci0KLS8qKiBFeGNlcHRpb25zIHRocm93biBieSBKU09OX0FTU0VSVC9KU09OX0ZBSUwg
bWFjcm9zLgotICoKLSAqIFRoZXNlIGFyZSBwcmVjb25kaXRpb24tdmlvbGF0aW9ucyAodXNlciBi
dWdzKSBhbmQgaW50ZXJuYWwgZXJyb3JzIChvdXIgYnVncykuCi0gKiAKLSAqIFxyZW1hcmsgZGVy
aXZlZCBmcm9tIEpzb246OkV4Y2VwdGlvbgotICovCi1jbGFzcyBKU09OX0FQSSBMb2dpY0Vycm9y
IDogcHVibGljIEV4Y2VwdGlvbiB7Ci1wdWJsaWM6Ci0gIExvZ2ljRXJyb3Ioc3RkOjpzdHJpbmcg
Y29uc3QmIG1zZyk7Ci19OwotCi0vLy8gdXNlZCBpbnRlcm5hbGx5Ci12b2lkIHRocm93UnVudGlt
ZUVycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpOwotLy8vIHVzZWQgaW50ZXJuYWxseQotdm9p
ZCB0aHJvd0xvZ2ljRXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIG1zZyk7Ci0KLS8qKiBcYnJpZWYg
VHlwZSBvZiB0aGUgdmFsdWUgaGVsZCBieSBhIFZhbHVlIG9iamVjdC4KLSAqLwotZW51bSBWYWx1
ZVR5cGUgewotICBudWxsVmFsdWUgPSAwLCAvLy88ICdudWxsJyB2YWx1ZQotICBpbnRWYWx1ZSwg
ICAgICAvLy88IHNpZ25lZCBpbnRlZ2VyIHZhbHVlCi0gIHVpbnRWYWx1ZSwgICAgIC8vLzwgdW5z
aWduZWQgaW50ZWdlciB2YWx1ZQotICByZWFsVmFsdWUsICAgICAvLy88IGRvdWJsZSB2YWx1ZQot
ICBzdHJpbmdWYWx1ZSwgICAvLy88IFVURi04IHN0cmluZyB2YWx1ZQotICBib29sZWFuVmFsdWUs
ICAvLy88IGJvb2wgdmFsdWUKLSAgYXJyYXlWYWx1ZSwgICAgLy8vPCBhcnJheSB2YWx1ZSAob3Jk
ZXJlZCBsaXN0KQotICBvYmplY3RWYWx1ZSAgICAvLy88IG9iamVjdCB2YWx1ZSAoY29sbGVjdGlv
biBvZiBuYW1lL3ZhbHVlIHBhaXJzKS4KLX07Ci0KLWVudW0gQ29tbWVudFBsYWNlbWVudCB7Ci0g
IGNvbW1lbnRCZWZvcmUgPSAwLCAgICAgIC8vLzwgYSBjb21tZW50IHBsYWNlZCBvbiB0aGUgbGlu
ZSBiZWZvcmUgYSB2YWx1ZQotICBjb21tZW50QWZ0ZXJPblNhbWVMaW5lLCAvLy88IGEgY29tbWVu
dCBqdXN0IGFmdGVyIGEgdmFsdWUgb24gdGhlIHNhbWUgbGluZQotICBjb21tZW50QWZ0ZXIsIC8v
LzwgYSBjb21tZW50IG9uIHRoZSBsaW5lIGFmdGVyIGEgdmFsdWUgKG9ubHkgbWFrZSBzZW5zZSBm
b3IKLSAgLy8vIHJvb3QgdmFsdWUpCi0gIG51bWJlck9mQ29tbWVudFBsYWNlbWVudAotfTsKLQot
Ly8jIGlmZGVmIEpTT05fVVNFX0NQUFRMCi0vLyAgIHR5cGVkZWYgQ3BwVEw6OkFueUVudW1lcmF0
b3I8Y29uc3QgY2hhciAqPiBFbnVtTWVtYmVyTmFtZXM7Ci0vLyAgIHR5cGVkZWYgQ3BwVEw6OkFu
eUVudW1lcmF0b3I8Y29uc3QgVmFsdWUgJj4gRW51bVZhbHVlczsKLS8vIyBlbmRpZgotCi0vKiog
XGJyaWVmIExpZ2h0d2VpZ2h0IHdyYXBwZXIgdG8gdGFnIHN0YXRpYyBzdHJpbmcuCi0gKgotICog
VmFsdWUgY29uc3RydWN0b3IgYW5kIG9iamVjdFZhbHVlIG1lbWJlciBhc3NpZ25lbWVudCB0YWtl
cyBhZHZhbnRhZ2Ugb2YgdGhlCi0gKiBTdGF0aWNTdHJpbmcgYW5kIGF2b2lkIHRoZSBjb3N0IG9m
IHN0cmluZyBkdXBsaWNhdGlvbiB3aGVuIHN0b3JpbmcgdGhlCi0gKiBzdHJpbmcgb3IgdGhlIG1l
bWJlciBuYW1lLgotICoKLSAqIEV4YW1wbGUgb2YgdXNhZ2U6Ci0gKiBcY29kZQotICogSnNvbjo6
VmFsdWUgYVZhbHVlKCBTdGF0aWNTdHJpbmcoInNvbWUgdGV4dCIpICk7Ci0gKiBKc29uOjpWYWx1
ZSBvYmplY3Q7Ci0gKiBzdGF0aWMgY29uc3QgU3RhdGljU3RyaW5nIGNvZGUoImNvZGUiKTsKLSAq
IG9iamVjdFtjb2RlXSA9IDEyMzQ7Ci0gKiBcZW5kY29kZQotICovCi1jbGFzcyBKU09OX0FQSSBT
dGF0aWNTdHJpbmcgewotcHVibGljOgotICBleHBsaWNpdCBTdGF0aWNTdHJpbmcoY29uc3QgY2hh
ciogY3pzdHJpbmcpIDogY19zdHJfKGN6c3RyaW5nKSB7fQotCi0gIG9wZXJhdG9yIGNvbnN0IGNo
YXIqKCkgY29uc3QgeyByZXR1cm4gY19zdHJfOyB9Ci0KLSAgY29uc3QgY2hhciogY19zdHIoKSBj
b25zdCB7IHJldHVybiBjX3N0cl87IH0KLQotcHJpdmF0ZToKLSAgY29uc3QgY2hhciogY19zdHJf
OwotfTsKLQotLyoqIFxicmllZiBSZXByZXNlbnRzIGEgPGEgSFJFRj0iaHR0cDovL3d3dy5qc29u
Lm9yZyI+SlNPTjwvYT4gdmFsdWUuCi0gKgotICogVGhpcyBjbGFzcyBpcyBhIGRpc2NyaW1pbmF0
ZWQgdW5pb24gd3JhcHBlciB0aGF0IGNhbiByZXByZXNlbnRzIGE6Ci0gKiAtIHNpZ25lZCBpbnRl
Z2VyIFtyYW5nZTogVmFsdWU6Om1pbkludCAtIFZhbHVlOjptYXhJbnRdCi0gKiAtIHVuc2lnbmVk
IGludGVnZXIgKHJhbmdlOiAwIC0gVmFsdWU6Om1heFVJbnQpCi0gKiAtIGRvdWJsZQotICogLSBV
VEYtOCBzdHJpbmcKLSAqIC0gYm9vbGVhbgotICogLSAnbnVsbCcKLSAqIC0gYW4gb3JkZXJlZCBs
aXN0IG9mIFZhbHVlCi0gKiAtIGNvbGxlY3Rpb24gb2YgbmFtZS92YWx1ZSBwYWlycyAoamF2YXNj
cmlwdCBvYmplY3QpCi0gKgotICogVGhlIHR5cGUgb2YgdGhlIGhlbGQgdmFsdWUgaXMgcmVwcmVz
ZW50ZWQgYnkgYSAjVmFsdWVUeXBlIGFuZAotICogY2FuIGJlIG9idGFpbmVkIHVzaW5nIHR5cGUo
KS4KLSAqCi0gKiBWYWx1ZXMgb2YgYW4gI29iamVjdFZhbHVlIG9yICNhcnJheVZhbHVlIGNhbiBi
ZSBhY2Nlc3NlZCB1c2luZyBvcGVyYXRvcltdKCkKLSAqIG1ldGhvZHMuCi0gKiBOb24tY29uc3Qg
bWV0aG9kcyB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIHRoZSBhICNudWxsVmFsdWUgZWxlbWVu
dAotICogaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiBUaGUgc2VxdWVuY2Ugb2YgYW4gI2FycmF5
VmFsdWUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgYW5kIGluaXRpYWxpemVkCi0gKiB3
aXRoICNudWxsVmFsdWUuIHJlc2l6ZSgpIGNhbiBiZSB1c2VkIHRvIGVubGFyZ2Ugb3IgdHJ1bmNh
dGUgYW4gI2FycmF5VmFsdWUuCi0gKgotICogVGhlIGdldCgpIG1ldGhvZHMgY2FuIGJlIHVzZWQg
dG8gb2J0YWluIGRlZmF1bHQgdmFsdWUgaW4gdGhlIGNhc2UgdGhlCi0gKiByZXF1aXJlZCBlbGVt
ZW50IGRvZXMgbm90IGV4aXN0LgotICoKLSAqIEl0IGlzIHBvc3NpYmxlIHRvIGl0ZXJhdGUgb3Zl
ciB0aGUgbGlzdCBvZiBhICNvYmplY3RWYWx1ZSB2YWx1ZXMgdXNpbmcKLSAqIHRoZSBnZXRNZW1i
ZXJOYW1lcygpIG1ldGhvZC4KLSAqCi0gKiBcbm90ZSAjVmFsdWUgc3RyaW5nLWxlbmd0aCBmaXQg
aW4gc2l6ZV90LCBidXQga2V5cyBtdXN0IGJlIDwgMl4zMC4KLSAqIChUaGUgcmVhc29uIGlzIGFu
IGltcGxlbWVudGF0aW9uIGRldGFpbC4pIEEgI0NoYXJSZWFkZXIgd2lsbCByYWlzZSBhbgotICog
ZXhjZXB0aW9uIGlmIGEgYm91bmQgaXMgZXhjZWVkZWQgdG8gYXZvaWQgc2VjdXJpdHkgaG9sZXMg
aW4geW91ciBhcHAsCi0gKiBidXQgdGhlIFZhbHVlIEFQSSBkb2VzICpub3QqIGNoZWNrIGJvdW5k
cy4gVGhhdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkKLSAqIG9mIHRoZSBjYWxsZXIuCi0gKi8KLWNs
YXNzIEpTT05fQVBJIFZhbHVlIHsKLSAgZnJpZW5kIGNsYXNzIFZhbHVlSXRlcmF0b3JCYXNlOwot
cHVibGljOgotICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBNZW1iZXJzOwotICB0
eXBlZGVmIFZhbHVlSXRlcmF0b3IgaXRlcmF0b3I7Ci0gIHR5cGVkZWYgVmFsdWVDb25zdEl0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOwotICB0eXBlZGVmIEpzb246OlVJbnQgVUludDsKLSAgdHlwZWRl
ZiBKc29uOjpJbnQgSW50OwotI2lmIGRlZmluZWQoSlNPTl9IQVNfSU5UNjQpCi0gIHR5cGVkZWYg
SnNvbjo6VUludDY0IFVJbnQ2NDsKLSAgdHlwZWRlZiBKc29uOjpJbnQ2NCBJbnQ2NDsKLSNlbmRp
ZiAvLyBkZWZpbmVkKEpTT05fSEFTX0lOVDY0KQotICB0eXBlZGVmIEpzb246Okxhcmdlc3RJbnQg
TGFyZ2VzdEludDsKLSAgdHlwZWRlZiBKc29uOjpMYXJnZXN0VUludCBMYXJnZXN0VUludDsKLSAg
dHlwZWRlZiBKc29uOjpBcnJheUluZGV4IEFycmF5SW5kZXg7Ci0KLSAgc3RhdGljIGNvbnN0IFZh
bHVlJiBudWxsOyAgLy8vPCBXZSByZWdyZXQgdGhpcyByZWZlcmVuY2UgdG8gYSBnbG9iYWwgaW5z
dGFuY2U7IHByZWZlciB0aGUgc2ltcGxlciBWYWx1ZSgpLgotICBzdGF0aWMgY29uc3QgVmFsdWUm
IG51bGxSZWY7ICAvLy88IGp1c3QgYSBrbHVkZ2UgZm9yIGJpbmFyeS1jb21wYXRpYmlsaXR5OyBz
YW1lIGFzIG51bGwKLSAgLy8vIE1pbmltdW0gc2lnbmVkIGludGVnZXIgdmFsdWUgdGhhdCBjYW4g
YmUgc3RvcmVkIGluIGEgSnNvbjo6VmFsdWUuCi0gIHN0YXRpYyBjb25zdCBMYXJnZXN0SW50IG1p
bkxhcmdlc3RJbnQ7Ci0gIC8vLyBNYXhpbXVtIHNpZ25lZCBpbnRlZ2VyIHZhbHVlIHRoYXQgY2Fu
IGJlIHN0b3JlZCBpbiBhIEpzb246OlZhbHVlLgotICBzdGF0aWMgY29uc3QgTGFyZ2VzdEludCBt
YXhMYXJnZXN0SW50OwotICAvLy8gTWF4aW11bSB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIHRoYXQg
Y2FuIGJlIHN0b3JlZCBpbiBhIEpzb246OlZhbHVlLgotICBzdGF0aWMgY29uc3QgTGFyZ2VzdFVJ
bnQgbWF4TGFyZ2VzdFVJbnQ7Ci0KLSAgLy8vIE1pbmltdW0gc2lnbmVkIGludCB2YWx1ZSB0aGF0
IGNhbiBiZSBzdG9yZWQgaW4gYSBKc29uOjpWYWx1ZS4KLSAgc3RhdGljIGNvbnN0IEludCBtaW5J
bnQ7Ci0gIC8vLyBNYXhpbXVtIHNpZ25lZCBpbnQgdmFsdWUgdGhhdCBjYW4gYmUgc3RvcmVkIGlu
IGEgSnNvbjo6VmFsdWUuCi0gIHN0YXRpYyBjb25zdCBJbnQgbWF4SW50OwotICAvLy8gTWF4aW11
bSB1bnNpZ25lZCBpbnQgdmFsdWUgdGhhdCBjYW4gYmUgc3RvcmVkIGluIGEgSnNvbjo6VmFsdWUu
Ci0gIHN0YXRpYyBjb25zdCBVSW50IG1heFVJbnQ7Ci0KLSNpZiBkZWZpbmVkKEpTT05fSEFTX0lO
VDY0KQotICAvLy8gTWluaW11bSBzaWduZWQgNjQgYml0cyBpbnQgdmFsdWUgdGhhdCBjYW4gYmUg
c3RvcmVkIGluIGEgSnNvbjo6VmFsdWUuCi0gIHN0YXRpYyBjb25zdCBJbnQ2NCBtaW5JbnQ2NDsK
LSAgLy8vIE1heGltdW0gc2lnbmVkIDY0IGJpdHMgaW50IHZhbHVlIHRoYXQgY2FuIGJlIHN0b3Jl
ZCBpbiBhIEpzb246OlZhbHVlLgotICBzdGF0aWMgY29uc3QgSW50NjQgbWF4SW50NjQ7Ci0gIC8v
LyBNYXhpbXVtIHVuc2lnbmVkIDY0IGJpdHMgaW50IHZhbHVlIHRoYXQgY2FuIGJlIHN0b3JlZCBp
biBhIEpzb246OlZhbHVlLgotICBzdGF0aWMgY29uc3QgVUludDY0IG1heFVJbnQ2NDsKLSNlbmRp
ZiAvLyBkZWZpbmVkKEpTT05fSEFTX0lOVDY0KQotCi1wcml2YXRlOgotI2lmbmRlZiBKU09OQ1BQ
X0RPQ19FWENMVURFX0lNUExFTUVOVEFUSU9OCi0gIGNsYXNzIENaU3RyaW5nIHsKLSAgcHVibGlj
OgotICAgIGVudW0gRHVwbGljYXRpb25Qb2xpY3kgewotICAgICAgbm9EdXBsaWNhdGlvbiA9IDAs
Ci0gICAgICBkdXBsaWNhdGUsCi0gICAgICBkdXBsaWNhdGVPbkNvcHkKLSAgICB9OwotICAgIENa
U3RyaW5nKEFycmF5SW5kZXggaW5kZXgpOwotICAgIENaU3RyaW5nKGNoYXIgY29uc3QqIHN0ciwg
dW5zaWduZWQgbGVuZ3RoLCBEdXBsaWNhdGlvblBvbGljeSBhbGxvY2F0ZSk7Ci0gICAgQ1pTdHJp
bmcoQ1pTdHJpbmcgY29uc3QmIG90aGVyKTsKLSNpZiBKU09OX0hBU19SVkFMVUVfUkVGRVJFTkNF
UwotICAgIENaU3RyaW5nKENaU3RyaW5nJiYgb3RoZXIpOwotI2VuZGlmCi0gICAgfkNaU3RyaW5n
KCk7Ci0gICAgQ1pTdHJpbmcmIG9wZXJhdG9yPShDWlN0cmluZyBvdGhlcik7Ci0gICAgYm9vbCBv
cGVyYXRvcjwoQ1pTdHJpbmcgY29uc3QmIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9y
PT0oQ1pTdHJpbmcgY29uc3QmIG90aGVyKSBjb25zdDsKLSAgICBBcnJheUluZGV4IGluZGV4KCkg
Y29uc3Q7Ci0gICAgLy9jb25zdCBjaGFyKiBjX3N0cigpIGNvbnN0OyAvLy88IFxkZXByZWNhdGVk
Ci0gICAgY2hhciBjb25zdCogZGF0YSgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0OwotICAgIGJvb2wgaXNTdGF0aWNTdHJpbmcoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAg
IHZvaWQgc3dhcChDWlN0cmluZyYgb3RoZXIpOwotCi0gICAgc3RydWN0IFN0cmluZ1N0b3JhZ2Ug
ewotICAgICAgdW5zaWduZWQgcG9saWN5XzogMjsKLSAgICAgIHVuc2lnbmVkIGxlbmd0aF86IDMw
OyAvLyAxR0IgbWF4Ci0gICAgfTsKLQotICAgIGNoYXIgY29uc3QqIGNzdHJfOyAgLy8gYWN0dWFs
bHksIGEgcHJlZml4ZWQgc3RyaW5nLCB1bmxlc3MgcG9saWN5IGlzIG5vRHVwCi0gICAgdW5pb24g
ewotICAgICAgQXJyYXlJbmRleCBpbmRleF87Ci0gICAgICBTdHJpbmdTdG9yYWdlIHN0b3JhZ2Vf
OwotICAgIH07Ci0gIH07Ci0KLXB1YmxpYzoKLSNpZm5kZWYgSlNPTl9VU0VfQ1BQVExfU01BTExN
QVAKLSAgdHlwZWRlZiBzdGQ6Om1hcDxDWlN0cmluZywgVmFsdWU+IE9iamVjdFZhbHVlczsKLSNl
bHNlCi0gIHR5cGVkZWYgQ3BwVEw6OlNtYWxsTWFwPENaU3RyaW5nLCBWYWx1ZT4gT2JqZWN0VmFs
dWVzOwotI2VuZGlmIC8vIGlmbmRlZiBKU09OX1VTRV9DUFBUTF9TTUFMTE1BUAotI2VuZGlmIC8v
IGlmbmRlZiBKU09OQ1BQX0RPQ19FWENMVURFX0lNUExFTUVOVEFUSU9OCi0KLXB1YmxpYzoKLSAg
LyoqIFxicmllZiBDcmVhdGUgYSBkZWZhdWx0IFZhbHVlIG9mIHRoZSBnaXZlbiB0eXBlLgotCi0g
ICAgVGhpcyBpcyBhIHZlcnkgdXNlZnVsIGNvbnN0cnVjdG9yLgotICAgIFRvIGNyZWF0ZSBhbiBl
bXB0eSBhcnJheSwgcGFzcyBhcnJheVZhbHVlLgotICAgIFRvIGNyZWF0ZSBhbiBlbXB0eSBvYmpl
Y3QsIHBhc3Mgb2JqZWN0VmFsdWUuCi0gICAgQW5vdGhlciBWYWx1ZSBjYW4gdGhlbiBiZSBzZXQg
dG8gdGhpcyBvbmUgYnkgYXNzaWdubWVudC4KLVRoaXMgaXMgdXNlZnVsIHNpbmNlIGNsZWFyKCkg
YW5kIHJlc2l6ZSgpIHdpbGwgbm90IGFsdGVyIHR5cGVzLgotCi0gICAgRXhhbXBsZXM6Ci1cY29k
ZQotSnNvbjo6VmFsdWUgbnVsbF92YWx1ZTsgLy8gbnVsbAotSnNvbjo6VmFsdWUgYXJyX3ZhbHVl
KEpzb246OmFycmF5VmFsdWUpOyAvLyBbXQotSnNvbjo6VmFsdWUgb2JqX3ZhbHVlKEpzb246Om9i
amVjdFZhbHVlKTsgLy8ge30KLVxlbmRjb2RlCi0gICovCi0gIFZhbHVlKFZhbHVlVHlwZSB0eXBl
ID0gbnVsbFZhbHVlKTsKLSAgVmFsdWUoSW50IHZhbHVlKTsKLSAgVmFsdWUoVUludCB2YWx1ZSk7
Ci0jaWYgZGVmaW5lZChKU09OX0hBU19JTlQ2NCkKLSAgVmFsdWUoSW50NjQgdmFsdWUpOwotICBW
YWx1ZShVSW50NjQgdmFsdWUpOwotI2VuZGlmIC8vIGlmIGRlZmluZWQoSlNPTl9IQVNfSU5UNjQp
Ci0gIFZhbHVlKGRvdWJsZSB2YWx1ZSk7Ci0gIFZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKTsgLy8v
PCBDb3B5IHRpbCBmaXJzdCAwLiAoTlVMTCBjYXVzZXMgdG8gc2VnLWZhdWx0LikKLSAgVmFsdWUo
Y29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCk7IC8vLzwgQ29weSBhbGwsIGluY2wg
emVyb2VzLgotICAvKiogXGJyaWVmIENvbnN0cnVjdHMgYSB2YWx1ZSBmcm9tIGEgc3RhdGljIHN0
cmluZy4KLQotICAgKiBMaWtlIG90aGVyIHZhbHVlIHN0cmluZyBjb25zdHJ1Y3RvciBidXQgZG8g
bm90IGR1cGxpY2F0ZSB0aGUgc3RyaW5nIGZvcgotICAgKiBpbnRlcm5hbCBzdG9yYWdlLiBUaGUg
Z2l2ZW4gc3RyaW5nIG11c3QgcmVtYWluIGFsaXZlIGFmdGVyIHRoZSBjYWxsIHRvIHRoaXMKLSAg
ICogY29uc3RydWN0b3IuCi0gICAqIFxub3RlIFRoaXMgd29ya3Mgb25seSBmb3IgbnVsbC10ZXJt
aW5hdGVkIHN0cmluZ3MuIChXZSBjYW5ub3QgY2hhbmdlIHRoZQotICAgKiAgIHNpemUgb2YgdGhp
cyBjbGFzcywgc28gd2UgaGF2ZSBub3doZXJlIHRvIHN0b3JlIHRoZSBsZW5ndGgsCi0gICAqICAg
d2hpY2ggbWlnaHQgYmUgY29tcHV0ZWQgbGF0ZXIgZm9yIHZhcmlvdXMgb3BlcmF0aW9ucy4pCi0g
ICAqCi0gICAqIEV4YW1wbGUgb2YgdXNhZ2U6Ci0gICAqIFxjb2RlCi0gICAqIHN0YXRpYyBTdGF0
aWNTdHJpbmcgZm9vKCJzb21lIHRleHQiKTsKLSAgICogSnNvbjo6VmFsdWUgYVZhbHVlKGZvbyk7
Ci0gICAqIFxlbmRjb2RlCi0gICAqLwotICBWYWx1ZShjb25zdCBTdGF0aWNTdHJpbmcmIHZhbHVl
KTsKLSAgVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsgLy8vPCBDb3B5IGRhdGEoKSB0
aWwgc2l6ZSgpLiBFbWJlZGRlZCB6ZXJvZXMgdG9vLgotI2lmZGVmIEpTT05fVVNFX0NQUFRMCi0g
IFZhbHVlKGNvbnN0IENwcFRMOjpDb25zdFN0cmluZyYgdmFsdWUpOwotI2VuZGlmCi0gIFZhbHVl
KGJvb2wgdmFsdWUpOwotICAvLy8gRGVlcCBjb3B5LgotICBWYWx1ZShjb25zdCBWYWx1ZSYgb3Ro
ZXIpOwotI2lmIEpTT05fSEFTX1JWQUxVRV9SRUZFUkVOQ0VTCi0gIC8vLyBNb3ZlIGNvbnN0cnVj
dG9yCi0gIFZhbHVlKFZhbHVlJiYgb3RoZXIpOwotI2VuZGlmCi0gIH5WYWx1ZSgpOwotCi0gIC8v
LyBEZWVwIGNvcHksIHRoZW4gc3dhcChvdGhlcikuCi0gIC8vLyBcbm90ZSBPdmVyLXdyaXRlIGV4
aXN0aW5nIGNvbW1lbnRzLiBUbyBwcmVzZXJ2ZSBjb21tZW50cywgdXNlICNzd2FwUGF5bG9hZCgp
LgotICBWYWx1ZSYgb3BlcmF0b3I9KFZhbHVlIG90aGVyKTsKLSAgLy8vIFN3YXAgZXZlcnl0aGlu
Zy4KLSAgdm9pZCBzd2FwKFZhbHVlJiBvdGhlcik7Ci0gIC8vLyBTd2FwIHZhbHVlcyBidXQgbGVh
dmUgY29tbWVudHMgYW5kIHNvdXJjZSBvZmZzZXRzIGluIHBsYWNlLgotICB2b2lkIHN3YXBQYXls
b2FkKFZhbHVlJiBvdGhlcik7Ci0KLSAgVmFsdWVUeXBlIHR5cGUoKSBjb25zdDsKLQotICAvLy8g
Q29tcGFyZSBwYXlsb2FkIG9ubHksIG5vdCBjb21tZW50cyBldGMuCi0gIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IFZhbHVlJiBvdGhlcikgY29uc3Q7Ci0gIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWYWx1
ZSYgb3RoZXIpIGNvbnN0OwotICBib29sIG9wZXJhdG9yPj0oY29uc3QgVmFsdWUmIG90aGVyKSBj
b25zdDsKLSAgYm9vbCBvcGVyYXRvcj4oY29uc3QgVmFsdWUmIG90aGVyKSBjb25zdDsKLSAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFZhbHVlJiBvdGhlcikgY29uc3Q7Ci0gIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBWYWx1ZSYgb3RoZXIpIGNvbnN0OwotICBpbnQgY29tcGFyZShjb25zdCBWYWx1ZSYg
b3RoZXIpIGNvbnN0OwotCi0gIGNvbnN0IGNoYXIqIGFzQ1N0cmluZygpIGNvbnN0OyAvLy88IEVt
YmVkZGVkIHplcm9lcyBjb3VsZCBjYXVzZSB5b3UgdHJvdWJsZSEKLSAgc3RkOjpzdHJpbmcgYXNT
dHJpbmcoKSBjb25zdDsgLy8vPCBFbWJlZGRlZCB6ZXJvZXMgYXJlIHBvc3NpYmxlLgotICAvKiog
R2V0IHJhdyBjaGFyKiBvZiBzdHJpbmctdmFsdWUuCi0gICAqICBccmV0dXJuIGZhbHNlIGlmICFz
dHJpbmcuIChTZWctZmF1bHQgaWYgc3RyIG9yIGVuZCBhcmUgTlVMTC4pCi0gICAqLwotICBib29s
IGdldFN0cmluZygKLSAgICAgIGNoYXIgY29uc3QqKiBiZWdpbiwgY2hhciBjb25zdCoqIGVuZCkg
Y29uc3Q7Ci0jaWZkZWYgSlNPTl9VU0VfQ1BQVEwKLSAgQ3BwVEw6OkNvbnN0U3RyaW5nIGFzQ29u
c3RTdHJpbmcoKSBjb25zdDsKLSNlbmRpZgotICBJbnQgYXNJbnQoKSBjb25zdDsKLSAgVUludCBh
c1VJbnQoKSBjb25zdDsKLSNpZiBkZWZpbmVkKEpTT05fSEFTX0lOVDY0KQotICBJbnQ2NCBhc0lu
dDY0KCkgY29uc3Q7Ci0gIFVJbnQ2NCBhc1VJbnQ2NCgpIGNvbnN0OwotI2VuZGlmIC8vIGlmIGRl
ZmluZWQoSlNPTl9IQVNfSU5UNjQpCi0gIExhcmdlc3RJbnQgYXNMYXJnZXN0SW50KCkgY29uc3Q7
Ci0gIExhcmdlc3RVSW50IGFzTGFyZ2VzdFVJbnQoKSBjb25zdDsKLSAgZmxvYXQgYXNGbG9hdCgp
IGNvbnN0OwotICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKLSAgYm9vbCBhc0Jvb2woKSBjb25z
dDsKLQotICBib29sIGlzTnVsbCgpIGNvbnN0OwotICBib29sIGlzQm9vbCgpIGNvbnN0OwotICBi
b29sIGlzSW50KCkgY29uc3Q7Ci0gIGJvb2wgaXNJbnQ2NCgpIGNvbnN0OwotICBib29sIGlzVUlu
dCgpIGNvbnN0OwotICBib29sIGlzVUludDY0KCkgY29uc3Q7Ci0gIGJvb2wgaXNJbnRlZ3JhbCgp
IGNvbnN0OwotICBib29sIGlzRG91YmxlKCkgY29uc3Q7Ci0gIGJvb2wgaXNOdW1lcmljKCkgY29u
c3Q7Ci0gIGJvb2wgaXNTdHJpbmcoKSBjb25zdDsKLSAgYm9vbCBpc0FycmF5KCkgY29uc3Q7Ci0g
IGJvb2wgaXNPYmplY3QoKSBjb25zdDsKLQotICBib29sIGlzQ29udmVydGlibGVUbyhWYWx1ZVR5
cGUgb3RoZXIpIGNvbnN0OwotCi0gIC8vLyBOdW1iZXIgb2YgdmFsdWVzIGluIGFycmF5IG9yIG9i
amVjdAotICBBcnJheUluZGV4IHNpemUoKSBjb25zdDsKLQotICAvLy8gXGJyaWVmIFJldHVybiB0
cnVlIGlmIGVtcHR5IGFycmF5LCBlbXB0eSBvYmplY3QsIG9yIG51bGw7Ci0gIC8vLyBvdGhlcndp
c2UsIGZhbHNlLgotICBib29sIGVtcHR5KCkgY29uc3Q7Ci0KLSAgLy8vIFJldHVybiBpc051bGwo
KQotICBib29sIG9wZXJhdG9yISgpIGNvbnN0OwotCi0gIC8vLyBSZW1vdmUgYWxsIG9iamVjdCBt
ZW1iZXJzIGFuZCBhcnJheSBlbGVtZW50cy4KLSAgLy8vIFxwcmUgdHlwZSgpIGlzIGFycmF5VmFs
dWUsIG9iamVjdFZhbHVlLCBvciBudWxsVmFsdWUKLSAgLy8vIFxwb3N0IHR5cGUoKSBpcyB1bmNo
YW5nZWQKLSAgdm9pZCBjbGVhcigpOwotCi0gIC8vLyBSZXNpemUgdGhlIGFycmF5IHRvIHNpemUg
ZWxlbWVudHMuCi0gIC8vLyBOZXcgZWxlbWVudHMgYXJlIGluaXRpYWxpemVkIHRvIG51bGwuCi0g
IC8vLyBNYXkgb25seSBiZSBjYWxsZWQgb24gbnVsbFZhbHVlIG9yIGFycmF5VmFsdWUuCi0gIC8v
LyBccHJlIHR5cGUoKSBpcyBhcnJheVZhbHVlIG9yIG51bGxWYWx1ZQotICAvLy8gXHBvc3QgdHlw
ZSgpIGlzIGFycmF5VmFsdWUKLSAgdm9pZCByZXNpemUoQXJyYXlJbmRleCBzaXplKTsKLQotICAv
Ly8gQWNjZXNzIGFuIGFycmF5IGVsZW1lbnQgKHplcm8gYmFzZWQgaW5kZXggKS4KLSAgLy8vIElm
IHRoZSBhcnJheSBjb250YWlucyBsZXNzIHRoYW4gaW5kZXggZWxlbWVudCwgdGhlbiBudWxsIHZh
bHVlIGFyZQotICAvLy8gaW5zZXJ0ZWQKLSAgLy8vIGluIHRoZSBhcnJheSBzbyB0aGF0IGl0cyBz
aXplIGlzIGluZGV4KzEuCi0gIC8vLyAoWW91IG1heSBuZWVkIHRvIHNheSAndmFsdWVbMHVdJyB0
byBnZXQgeW91ciBjb21waWxlciB0byBkaXN0aW5ndWlzaAotICAvLy8gIHRoaXMgZnJvbSB0aGUg
b3BlcmF0b3JbXSB3aGljaCB0YWtlcyBhIHN0cmluZy4pCi0gIFZhbHVlJiBvcGVyYXRvcltdKEFy
cmF5SW5kZXggaW5kZXgpOwotCi0gIC8vLyBBY2Nlc3MgYW4gYXJyYXkgZWxlbWVudCAoemVybyBi
YXNlZCBpbmRleCApLgotICAvLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGxlc3MgdGhhbiBpbmRl
eCBlbGVtZW50LCB0aGVuIG51bGwgdmFsdWUgYXJlCi0gIC8vLyBpbnNlcnRlZAotICAvLy8gaW4g
dGhlIGFycmF5IHNvIHRoYXQgaXRzIHNpemUgaXMgaW5kZXgrMS4KLSAgLy8vIChZb3UgbWF5IG5l
ZWQgdG8gc2F5ICd2YWx1ZVswdV0nIHRvIGdldCB5b3VyIGNvbXBpbGVyIHRvIGRpc3Rpbmd1aXNo
Ci0gIC8vLyAgdGhpcyBmcm9tIHRoZSBvcGVyYXRvcltdIHdoaWNoIHRha2VzIGEgc3RyaW5nLikK
LSAgVmFsdWUmIG9wZXJhdG9yW10oaW50IGluZGV4KTsKLQotICAvLy8gQWNjZXNzIGFuIGFycmF5
IGVsZW1lbnQgKHplcm8gYmFzZWQgaW5kZXggKQotICAvLy8gKFlvdSBtYXkgbmVlZCB0byBzYXkg
J3ZhbHVlWzB1XScgdG8gZ2V0IHlvdXIgY29tcGlsZXIgdG8gZGlzdGluZ3Vpc2gKLSAgLy8vICB0
aGlzIGZyb20gdGhlIG9wZXJhdG9yW10gd2hpY2ggdGFrZXMgYSBzdHJpbmcuKQotICBjb25zdCBW
YWx1ZSYgb3BlcmF0b3JbXShBcnJheUluZGV4IGluZGV4KSBjb25zdDsKLQotICAvLy8gQWNjZXNz
IGFuIGFycmF5IGVsZW1lbnQgKHplcm8gYmFzZWQgaW5kZXggKQotICAvLy8gKFlvdSBtYXkgbmVl
ZCB0byBzYXkgJ3ZhbHVlWzB1XScgdG8gZ2V0IHlvdXIgY29tcGlsZXIgdG8gZGlzdGluZ3Vpc2gK
LSAgLy8vICB0aGlzIGZyb20gdGhlIG9wZXJhdG9yW10gd2hpY2ggdGFrZXMgYSBzdHJpbmcuKQot
ICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShpbnQgaW5kZXgpIGNvbnN0OwotCi0gIC8vLyBJZiB0
aGUgYXJyYXkgY29udGFpbnMgYXQgbGVhc3QgaW5kZXgrMSBlbGVtZW50cywgcmV0dXJucyB0aGUg
ZWxlbWVudAotICAvLy8gdmFsdWUsCi0gIC8vLyBvdGhlcndpc2UgcmV0dXJucyBkZWZhdWx0VmFs
dWUuCi0gIFZhbHVlIGdldChBcnJheUluZGV4IGluZGV4LCBjb25zdCBWYWx1ZSYgZGVmYXVsdFZh
bHVlKSBjb25zdDsKLSAgLy8vIFJldHVybiB0cnVlIGlmIGluZGV4IDwgc2l6ZSgpLgotICBib29s
IGlzVmFsaWRJbmRleChBcnJheUluZGV4IGluZGV4KSBjb25zdDsKLSAgLy8vIFxicmllZiBBcHBl
bmQgdmFsdWUgdG8gYXJyYXkgYXQgdGhlIGVuZC4KLSAgLy8vCi0gIC8vLyBFcXVpdmFsZW50IHRv
IGpzb252YWx1ZVtqc29udmFsdWUuc2l6ZSgpXSA9IHZhbHVlOwotICBWYWx1ZSYgYXBwZW5kKGNv
bnN0IFZhbHVlJiB2YWx1ZSk7Ci0KLSAgLy8vIEFjY2VzcyBhbiBvYmplY3QgdmFsdWUgYnkgbmFt
ZSwgY3JlYXRlIGEgbnVsbCBtZW1iZXIgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gIC8vLyBcbm90
ZSBCZWNhdXNlIG9mIG91ciBpbXBsZW1lbnRhdGlvbiwga2V5cyBhcmUgbGltaXRlZCB0byAyXjMw
IC0xIGNoYXJzLgotICAvLy8gIEV4Y2VlZGluZyB0aGF0IHdpbGwgY2F1c2UgYW4gZXhjZXB0aW9u
LgotICBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBjaGFyKiBrZXkpOwotICAvLy8gQWNjZXNzIGFu
IG9iamVjdCB2YWx1ZSBieSBuYW1lLCByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gbWVtYmVy
IHdpdGgKLSAgLy8vIHRoYXQgbmFtZS4KLSAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oY29uc3Qg
Y2hhcioga2V5KSBjb25zdDsKLSAgLy8vIEFjY2VzcyBhbiBvYmplY3QgdmFsdWUgYnkgbmFtZSwg
Y3JlYXRlIGEgbnVsbCBtZW1iZXIgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gIC8vLyBccGFyYW0g
a2V5IG1heSBjb250YWluIGVtYmVkZGVkIG51bGxzLgotICBWYWx1ZSYgb3BlcmF0b3JbXShjb25z
dCBzdGQ6OnN0cmluZyYga2V5KTsKLSAgLy8vIEFjY2VzcyBhbiBvYmplY3QgdmFsdWUgYnkgbmFt
ZSwgcmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIG1lbWJlciB3aXRoCi0gIC8vLyB0aGF0IG5h
bWUuCi0gIC8vLyBccGFyYW0ga2V5IG1heSBjb250YWluIGVtYmVkZGVkIG51bGxzLgotICBjb25z
dCBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBzdGQ6OnN0cmluZyYga2V5KSBjb25zdDsKLSAgLyoq
IFxicmllZiBBY2Nlc3MgYW4gb2JqZWN0IHZhbHVlIGJ5IG5hbWUsIGNyZWF0ZSBhIG51bGwgbWVt
YmVyIGlmIGl0IGRvZXMgbm90Ci0gICBleGlzdC4KLQotICAgKiBJZiB0aGUgb2JqZWN0IGhhcyBu
byBlbnRyeSBmb3IgdGhhdCBuYW1lLCB0aGVuIHRoZSBtZW1iZXIgbmFtZSB1c2VkIHRvIHN0b3Jl
Ci0gICAqIHRoZSBuZXcgZW50cnkgaXMgbm90IGR1cGxpY2F0ZWQuCi0gICAqIEV4YW1wbGUgb2Yg
dXNlOgotICAgKiBcY29kZQotICAgKiBKc29uOjpWYWx1ZSBvYmplY3Q7Ci0gICAqIHN0YXRpYyBj
b25zdCBTdGF0aWNTdHJpbmcgY29kZSgiY29kZSIpOwotICAgKiBvYmplY3RbY29kZV0gPSAxMjM0
OwotICAgKiBcZW5kY29kZQotICAgKi8KLSAgVmFsdWUmIG9wZXJhdG9yW10oY29uc3QgU3RhdGlj
U3RyaW5nJiBrZXkpOwotI2lmZGVmIEpTT05fVVNFX0NQUFRMCi0gIC8vLyBBY2Nlc3MgYW4gb2Jq
ZWN0IHZhbHVlIGJ5IG5hbWUsIGNyZWF0ZSBhIG51bGwgbWVtYmVyIGlmIGl0IGRvZXMgbm90IGV4
aXN0LgotICBWYWx1ZSYgb3BlcmF0b3JbXShjb25zdCBDcHBUTDo6Q29uc3RTdHJpbmcmIGtleSk7
Ci0gIC8vLyBBY2Nlc3MgYW4gb2JqZWN0IHZhbHVlIGJ5IG5hbWUsIHJldHVybnMgbnVsbCBpZiB0
aGVyZSBpcyBubyBtZW1iZXIgd2l0aAotICAvLy8gdGhhdCBuYW1lLgotICBjb25zdCBWYWx1ZSYg
b3BlcmF0b3JbXShjb25zdCBDcHBUTDo6Q29uc3RTdHJpbmcmIGtleSkgY29uc3Q7Ci0jZW5kaWYK
LSAgLy8vIFJldHVybiB0aGUgbWVtYmVyIG5hbWVkIGtleSBpZiBpdCBleGlzdCwgZGVmYXVsdFZh
bHVlIG90aGVyd2lzZS4KLSAgLy8vIFxub3RlIGRlZXAgY29weQotICBWYWx1ZSBnZXQoY29uc3Qg
Y2hhcioga2V5LCBjb25zdCBWYWx1ZSYgZGVmYXVsdFZhbHVlKSBjb25zdDsKLSAgLy8vIFJldHVy
biB0aGUgbWVtYmVyIG5hbWVkIGtleSBpZiBpdCBleGlzdCwgZGVmYXVsdFZhbHVlIG90aGVyd2lz
ZS4KLSAgLy8vIFxub3RlIGRlZXAgY29weQotICAvLy8gXG5vdGUga2V5IG1heSBjb250YWluIGVt
YmVkZGVkIG51bGxzLgotICBWYWx1ZSBnZXQoY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIq
IGVuZCwgY29uc3QgVmFsdWUmIGRlZmF1bHRWYWx1ZSkgY29uc3Q7Ci0gIC8vLyBSZXR1cm4gdGhl
IG1lbWJlciBuYW1lZCBrZXkgaWYgaXQgZXhpc3QsIGRlZmF1bHRWYWx1ZSBvdGhlcndpc2UuCi0g
IC8vLyBcbm90ZSBkZWVwIGNvcHkKLSAgLy8vIFxwYXJhbSBrZXkgbWF5IGNvbnRhaW4gZW1iZWRk
ZWQgbnVsbHMuCi0gIFZhbHVlIGdldChjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBjb25zdCBWYWx1
ZSYgZGVmYXVsdFZhbHVlKSBjb25zdDsKLSNpZmRlZiBKU09OX1VTRV9DUFBUTAotICAvLy8gUmV0
dXJuIHRoZSBtZW1iZXIgbmFtZWQga2V5IGlmIGl0IGV4aXN0LCBkZWZhdWx0VmFsdWUgb3RoZXJ3
aXNlLgotICAvLy8gXG5vdGUgZGVlcCBjb3B5Ci0gIFZhbHVlIGdldChjb25zdCBDcHBUTDo6Q29u
c3RTdHJpbmcmIGtleSwgY29uc3QgVmFsdWUmIGRlZmF1bHRWYWx1ZSkgY29uc3Q7Ci0jZW5kaWYK
LSAgLy8vIE1vc3QgZ2VuZXJhbCBhbmQgZWZmaWNpZW50IHZlcnNpb24gb2YgaXNNZW1iZXIoKWNv
bnN0LCBnZXQoKWNvbnN0LAotICAvLy8gYW5kIG9wZXJhdG9yW11jb25zdAotICAvLy8gXG5vdGUg
QXMgc3RhdGVkIGVsc2V3aGVyZSwgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIChlbmQtYmVnaW4p
ID49IDJeMzAKLSAgVmFsdWUgY29uc3QqIGZpbmQoY2hhciBjb25zdCogYmVnaW4sIGNoYXIgY29u
c3QqIGVuZCkgY29uc3Q7Ci0gIC8vLyBNb3N0IGdlbmVyYWwgYW5kIGVmZmljaWVudCB2ZXJzaW9u
IG9mIG9iamVjdC1tdXRhdG9ycy4KLSAgLy8vIFxub3RlIEFzIHN0YXRlZCBlbHNld2hlcmUsIGJl
aGF2aW9yIGlzIHVuZGVmaW5lZCBpZiAoZW5kLWJlZ2luKSA+PSAyXjMwCi0gIC8vLyBccmV0dXJu
IG5vbi16ZXJvLCBidXQgSlNPTl9BU1NFUlQgaWYgdGhpcyBpcyBuZWl0aGVyIG9iamVjdCBub3Ig
bnVsbFZhbHVlLgotICBWYWx1ZSBjb25zdCogZGVtYW5kKGNoYXIgY29uc3QqIGJlZ2luLCBjaGFy
IGNvbnN0KiBlbmQpOwotICAvLy8gXGJyaWVmIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBuYW1lZCBt
ZW1iZXIuCi0gIC8vLwotICAvLy8gRG8gbm90aGluZyBpZiBpdCBkaWQgbm90IGV4aXN0LgotICAv
Ly8gXHJldHVybiB0aGUgcmVtb3ZlZCBWYWx1ZSwgb3IgbnVsbC4KLSAgLy8vIFxwcmUgdHlwZSgp
IGlzIG9iamVjdFZhbHVlIG9yIG51bGxWYWx1ZQotICAvLy8gXHBvc3QgdHlwZSgpIGlzIHVuY2hh
bmdlZAotICAvLy8gXGRlcHJlY2F0ZWQKLSAgVmFsdWUgcmVtb3ZlTWVtYmVyKGNvbnN0IGNoYXIq
IGtleSk7Ci0gIC8vLyBTYW1lIGFzIHJlbW92ZU1lbWJlcihjb25zdCBjaGFyKikKLSAgLy8vIFxw
YXJhbSBrZXkgbWF5IGNvbnRhaW4gZW1iZWRkZWQgbnVsbHMuCi0gIC8vLyBcZGVwcmVjYXRlZAot
ICBWYWx1ZSByZW1vdmVNZW1iZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSk7Ci0gIC8vLyBTYW1l
IGFzIHJlbW92ZU1lbWJlcihjb25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hhciogZW5kLCBWYWx1
ZSogcmVtb3ZlZCksCi0gIC8vLyBidXQgJ2tleScgaXMgbnVsbC10ZXJtaW5hdGVkLgotICBib29s
IHJlbW92ZU1lbWJlcihjb25zdCBjaGFyKiBrZXksIFZhbHVlKiByZW1vdmVkKTsKLSAgLyoqIFxi
cmllZiBSZW1vdmUgdGhlIG5hbWVkIG1hcCBtZW1iZXIuCi0KLSAgICAgIFVwZGF0ZSAncmVtb3Zl
ZCcgaWZmIHJlbW92ZWQuCi0gICAgICBccGFyYW0ga2V5IG1heSBjb250YWluIGVtYmVkZGVkIG51
bGxzLgotICAgICAgXHJldHVybiB0cnVlIGlmZiByZW1vdmVkIChubyBleGNlcHRpb25zKQotICAq
LwotICBib29sIHJlbW92ZU1lbWJlcihzdGQ6OnN0cmluZyBjb25zdCYga2V5LCBWYWx1ZSogcmVt
b3ZlZCk7Ci0gIC8vLyBTYW1lIGFzIHJlbW92ZU1lbWJlcihzdGQ6OnN0cmluZyBjb25zdCYga2V5
LCBWYWx1ZSogcmVtb3ZlZCkKLSAgYm9vbCByZW1vdmVNZW1iZXIoY29uc3QgY2hhciogYmVnaW4s
IGNvbnN0IGNoYXIqIGVuZCwgVmFsdWUqIHJlbW92ZWQpOwotICAvKiogXGJyaWVmIFJlbW92ZSB0
aGUgaW5kZXhlZCBhcnJheSBlbGVtZW50LgotCi0gICAgICBPKG4pIGV4cGVuc2l2ZSBvcGVyYXRp
b25zLgotICAgICAgVXBkYXRlICdyZW1vdmVkJyBpZmYgcmVtb3ZlZC4KLSAgICAgIFxyZXR1cm4g
dHJ1ZSBpZmYgcmVtb3ZlZCAobm8gZXhjZXB0aW9ucykKLSAgKi8KLSAgYm9vbCByZW1vdmVJbmRl
eChBcnJheUluZGV4IGksIFZhbHVlKiByZW1vdmVkKTsKLQotICAvLy8gUmV0dXJuIHRydWUgaWYg
dGhlIG9iamVjdCBoYXMgYSBtZW1iZXIgbmFtZWQga2V5LgotICAvLy8gXG5vdGUgJ2tleScgbXVz
dCBiZSBudWxsLXRlcm1pbmF0ZWQuCi0gIGJvb2wgaXNNZW1iZXIoY29uc3QgY2hhcioga2V5KSBj
b25zdDsKLSAgLy8vIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaGFzIGEgbWVtYmVyIG5hbWVk
IGtleS4KLSAgLy8vIFxwYXJhbSBrZXkgbWF5IGNvbnRhaW4gZW1iZWRkZWQgbnVsbHMuCi0gIGJv
b2wgaXNNZW1iZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkgY29uc3Q7Ci0gIC8vLyBTYW1lIGFz
IGlzTWVtYmVyKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpY29uc3QKLSAgYm9vbCBpc01lbWJlcihj
b25zdCBjaGFyKiBiZWdpbiwgY29uc3QgY2hhciogZW5kKSBjb25zdDsKLSNpZmRlZiBKU09OX1VT
RV9DUFBUTAotICAvLy8gUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBoYXMgYSBtZW1iZXIgbmFt
ZWQga2V5LgotICBib29sIGlzTWVtYmVyKGNvbnN0IENwcFRMOjpDb25zdFN0cmluZyYga2V5KSBj
b25zdDsKLSNlbmRpZgotCi0gIC8vLyBcYnJpZWYgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbWVtYmVy
IG5hbWVzLgotICAvLy8KLSAgLy8vIElmIG51bGwsIHJldHVybiBhbiBlbXB0eSBsaXN0LgotICAv
Ly8gXHByZSB0eXBlKCkgaXMgb2JqZWN0VmFsdWUgb3IgbnVsbFZhbHVlCi0gIC8vLyBccG9zdCBp
ZiB0eXBlKCkgd2FzIG51bGxWYWx1ZSwgaXQgcmVtYWlucyBudWxsVmFsdWUKLSAgTWVtYmVycyBn
ZXRNZW1iZXJOYW1lcygpIGNvbnN0OwotCi0gIC8vIyBpZmRlZiBKU09OX1VTRV9DUFBUTAotICAv
LyAgICAgIEVudW1NZW1iZXJOYW1lcyBlbnVtTWVtYmVyTmFtZXMoKSBjb25zdDsKLSAgLy8gICAg
ICBFbnVtVmFsdWVzIGVudW1WYWx1ZXMoKSBjb25zdDsKLSAgLy8jIGVuZGlmCi0KLSAgLy8vIFxk
ZXByZWNhdGVkIEFsd2F5cyBwYXNzIGxlbi4KLSAgSlNPTkNQUF9ERVBSRUNBVEVEKCJVc2Ugc2V0
Q29tbWVudChzdGQ6OnN0cmluZyBjb25zdCYpIGluc3RlYWQuIikKLSAgdm9pZCBzZXRDb21tZW50
KGNvbnN0IGNoYXIqIGNvbW1lbnQsIENvbW1lbnRQbGFjZW1lbnQgcGxhY2VtZW50KTsKLSAgLy8v
IENvbW1lbnRzIG11c3QgYmUgLy8uLi4gb3IgLyogLi4uICovCi0gIHZvaWQgc2V0Q29tbWVudChj
b25zdCBjaGFyKiBjb21tZW50LCBzaXplX3QgbGVuLCBDb21tZW50UGxhY2VtZW50IHBsYWNlbWVu
dCk7Ci0gIC8vLyBDb21tZW50cyBtdXN0IGJlIC8vLi4uIG9yIC8qIC4uLiAqLwotICB2b2lkIHNl
dENvbW1lbnQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbW1lbnQsIENvbW1lbnRQbGFjZW1lbnQgcGxh
Y2VtZW50KTsKLSAgYm9vbCBoYXNDb21tZW50KENvbW1lbnRQbGFjZW1lbnQgcGxhY2VtZW50KSBj
b25zdDsKLSAgLy8vIEluY2x1ZGUgZGVsaW1pdGVycyBhbmQgZW1iZWRkZWQgbmV3bGluZXMuCi0g
IHN0ZDo6c3RyaW5nIGdldENvbW1lbnQoQ29tbWVudFBsYWNlbWVudCBwbGFjZW1lbnQpIGNvbnN0
OwotCi0gIHN0ZDo6c3RyaW5nIHRvU3R5bGVkU3RyaW5nKCkgY29uc3Q7Ci0KLSAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdDsKLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0KLSAg
aXRlcmF0b3IgYmVnaW4oKTsKLSAgaXRlcmF0b3IgZW5kKCk7Ci0KLSAgLy8gQWNjZXNzb3JzIGZv
ciB0aGUgW3N0YXJ0LCBsaW1pdCkgcmFuZ2Ugb2YgYnl0ZXMgd2l0aGluIHRoZSBKU09OIHRleHQg
ZnJvbQotICAvLyB3aGljaCB0aGlzIHZhbHVlIHdhcyBwYXJzZWQsIGlmIGFueS4KLSAgdm9pZCBz
ZXRPZmZzZXRTdGFydChzaXplX3Qgc3RhcnQpOwotICB2b2lkIHNldE9mZnNldExpbWl0KHNpemVf
dCBsaW1pdCk7Ci0gIHNpemVfdCBnZXRPZmZzZXRTdGFydCgpIGNvbnN0OwotICBzaXplX3QgZ2V0
T2Zmc2V0TGltaXQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgdm9pZCBpbml0QmFzaWMoVmFsdWVU
eXBlIHR5cGUsIGJvb2wgYWxsb2NhdGVkID0gZmFsc2UpOwotCi0gIFZhbHVlJiByZXNvbHZlUmVm
ZXJlbmNlKGNvbnN0IGNoYXIqIGtleSk7Ci0gIFZhbHVlJiByZXNvbHZlUmVmZXJlbmNlKGNvbnN0
IGNoYXIqIGtleSwgY29uc3QgY2hhciogZW5kKTsKLQotICBzdHJ1Y3QgQ29tbWVudEluZm8gewot
ICAgIENvbW1lbnRJbmZvKCk7Ci0gICAgfkNvbW1lbnRJbmZvKCk7Ci0KLSAgICB2b2lkIHNldENv
bW1lbnQoY29uc3QgY2hhciogdGV4dCwgc2l6ZV90IGxlbik7Ci0KLSAgICBjaGFyKiBjb21tZW50
XzsKLSAgfTsKLQotICAvLyBzdHJ1Y3QgTWVtYmVyTmFtZXNUcmFuc2Zvcm0KLSAgLy97Ci0gIC8v
ICAgdHlwZWRlZiBjb25zdCBjaGFyICpyZXN1bHRfdHlwZTsKLSAgLy8gICBjb25zdCBjaGFyICpv
cGVyYXRvcigpKCBjb25zdCBDWlN0cmluZyAmbmFtZSApIGNvbnN0Ci0gIC8vICAgewotICAvLyAg
ICAgIHJldHVybiBuYW1lLmNfc3RyKCk7Ci0gIC8vICAgfQotICAvL307Ci0KLSAgdW5pb24gVmFs
dWVIb2xkZXIgewotICAgIExhcmdlc3RJbnQgaW50XzsKLSAgICBMYXJnZXN0VUludCB1aW50XzsK
LSAgICBkb3VibGUgcmVhbF87Ci0gICAgYm9vbCBib29sXzsKLSAgICBjaGFyKiBzdHJpbmdfOyAg
Ly8gYWN0dWFsbHkgcHRyIHRvIHVuc2lnbmVkLCBmb2xsb3dlZCBieSBzdHIsIHVubGVzcyAhYWxs
b2NhdGVkXwotICAgIE9iamVjdFZhbHVlcyogbWFwXzsKLSAgfSB2YWx1ZV87Ci0gIFZhbHVlVHlw
ZSB0eXBlXyA6IDg7Ci0gIHVuc2lnbmVkIGludCBhbGxvY2F0ZWRfIDogMTsgLy8gTm90ZXM6IGlm
IGRlY2xhcmVkIGFzIGJvb2wsIGJpdGZpZWxkIGlzIHVzZWxlc3MuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgbm90IGFsbG9jYXRlZF8sIHN0cmluZ18gbXVzdCBiZSBudWxs
LXRlcm1pbmF0ZWQuCi0gIENvbW1lbnRJbmZvKiBjb21tZW50c187Ci0KLSAgLy8gW3N0YXJ0LCBs
aW1pdCkgYnl0ZSBvZmZzZXRzIGluIHRoZSBzb3VyY2UgSlNPTiB0ZXh0IGZyb20gd2hpY2ggdGhp
cyBWYWx1ZQotICAvLyB3YXMgZXh0cmFjdGVkLgotICBzaXplX3Qgc3RhcnRfOwotICBzaXplX3Qg
bGltaXRfOwotfTsKLQotLyoqIFxicmllZiBFeHBlcmltZW50YWwgYW5kIHVudGVzdGVkOiByZXBy
ZXNlbnRzIGFuIGVsZW1lbnQgb2YgdGhlICJwYXRoIiB0bwotICogYWNjZXNzIGEgbm9kZS4KLSAq
LwotY2xhc3MgSlNPTl9BUEkgUGF0aEFyZ3VtZW50IHsKLXB1YmxpYzoKLSAgZnJpZW5kIGNsYXNz
IFBhdGg7Ci0KLSAgUGF0aEFyZ3VtZW50KCk7Ci0gIFBhdGhBcmd1bWVudChBcnJheUluZGV4IGlu
ZGV4KTsKLSAgUGF0aEFyZ3VtZW50KGNvbnN0IGNoYXIqIGtleSk7Ci0gIFBhdGhBcmd1bWVudChj
b25zdCBzdGQ6OnN0cmluZyYga2V5KTsKLQotcHJpdmF0ZToKLSAgZW51bSBLaW5kIHsKLSAgICBr
aW5kTm9uZSA9IDAsCi0gICAga2luZEluZGV4LAotICAgIGtpbmRLZXkKLSAgfTsKLSAgc3RkOjpz
dHJpbmcga2V5XzsKLSAgQXJyYXlJbmRleCBpbmRleF87Ci0gIEtpbmQga2luZF87Ci19OwotCi0v
KiogXGJyaWVmIEV4cGVyaW1lbnRhbCBhbmQgdW50ZXN0ZWQ6IHJlcHJlc2VudHMgYSAicGF0aCIg
dG8gYWNjZXNzIGEgbm9kZS4KLSAqCi0gKiBTeW50YXg6Ci0gKiAtICIuIiA9PiByb290IG5vZGUK
LSAqIC0gIi5bbl0iID0+IGVsZW1lbnRzIGF0IGluZGV4ICduJyBvZiByb290IG5vZGUgKGFuIGFy
cmF5IHZhbHVlKQotICogLSAiLm5hbWUiID0+IG1lbWJlciBuYW1lZCAnbmFtZScgb2Ygcm9vdCBu
b2RlIChhbiBvYmplY3QgdmFsdWUpCi0gKiAtICIubmFtZTEubmFtZTIubmFtZTMiCi0gKiAtICIu
WzBdWzFdWzJdLm5hbWUxWzNdIgotICogLSAiLiUiID0+IG1lbWJlciBuYW1lIGlzIHByb3ZpZGVk
IGFzIHBhcmFtZXRlcgotICogLSAiLlslXSIgPT4gaW5kZXggaXMgcHJvdmllZCBhcyBwYXJhbWV0
ZXIKLSAqLwotY2xhc3MgSlNPTl9BUEkgUGF0aCB7Ci1wdWJsaWM6Ci0gIFBhdGgoY29uc3Qgc3Rk
OjpzdHJpbmcmIHBhdGgsCi0gICAgICAgY29uc3QgUGF0aEFyZ3VtZW50JiBhMSA9IFBhdGhBcmd1
bWVudCgpLAotICAgICAgIGNvbnN0IFBhdGhBcmd1bWVudCYgYTIgPSBQYXRoQXJndW1lbnQoKSwK
LSAgICAgICBjb25zdCBQYXRoQXJndW1lbnQmIGEzID0gUGF0aEFyZ3VtZW50KCksCi0gICAgICAg
Y29uc3QgUGF0aEFyZ3VtZW50JiBhNCA9IFBhdGhBcmd1bWVudCgpLAotICAgICAgIGNvbnN0IFBh
dGhBcmd1bWVudCYgYTUgPSBQYXRoQXJndW1lbnQoKSk7Ci0KLSAgY29uc3QgVmFsdWUmIHJlc29s
dmUoY29uc3QgVmFsdWUmIHJvb3QpIGNvbnN0OwotICBWYWx1ZSByZXNvbHZlKGNvbnN0IFZhbHVl
JiByb290LCBjb25zdCBWYWx1ZSYgZGVmYXVsdFZhbHVlKSBjb25zdDsKLSAgLy8vIENyZWF0ZXMg
dGhlICJwYXRoIiB0byBhY2Nlc3MgdGhlIHNwZWNpZmllZCBub2RlIGFuZCByZXR1cm5zIGEgcmVm
ZXJlbmNlIG9uCi0gIC8vLyB0aGUgbm9kZS4KLSAgVmFsdWUmIG1ha2UoVmFsdWUmIHJvb3QpIGNv
bnN0OwotCi1wcml2YXRlOgotICB0eXBlZGVmIHN0ZDo6dmVjdG9yPGNvbnN0IFBhdGhBcmd1bWVu
dCo+IEluQXJnczsKLSAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxQYXRoQXJndW1lbnQ+IEFyZ3M7Ci0K
LSAgdm9pZCBtYWtlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCwgY29uc3QgSW5BcmdzJiBp
bik7Ci0gIHZvaWQgYWRkUGF0aEluQXJnKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbkFyZ3MmIGluLAotICAgICAgICAgICAgICAgICAgICBJbkFy
Z3M6OmNvbnN0X2l0ZXJhdG9yJiBpdEluQXJnLAotICAgICAgICAgICAgICAgICAgICBQYXRoQXJn
dW1lbnQ6OktpbmQga2luZCk7Ci0gIHZvaWQgaW52YWxpZFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcm
IHBhdGgsIGludCBsb2NhdGlvbik7Ci0KLSAgQXJncyBhcmdzXzsKLX07Ci0KLS8qKiBcYnJpZWYg
YmFzZSBjbGFzcyBmb3IgVmFsdWUgaXRlcmF0b3JzLgotICoKLSAqLwotY2xhc3MgSlNPTl9BUEkg
VmFsdWVJdGVyYXRvckJhc2UgewotcHVibGljOgotICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0gIHR5cGVkZWYgdW5zaWduZWQgaW50
IHNpemVfdDsKLSAgdHlwZWRlZiBpbnQgZGlmZmVyZW5jZV90eXBlOwotICB0eXBlZGVmIFZhbHVl
SXRlcmF0b3JCYXNlIFNlbGZUeXBlOwotCi0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTZWxmVHlw
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIGlzRXF1YWwob3RoZXIpOyB9Ci0KLSAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFNlbGZUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gIWlzRXF1YWwob3Ro
ZXIpOyB9Ci0KLSAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShjb25zdCBTZWxmVHlwZSYgb3Ro
ZXIpIGNvbnN0IHsKLSAgICByZXR1cm4gb3RoZXIuY29tcHV0ZURpc3RhbmNlKCp0aGlzKTsKLSAg
fQotCi0gIC8vLyBSZXR1cm4gZWl0aGVyIHRoZSBpbmRleCBvciB0aGUgbWVtYmVyIG5hbWUgb2Yg
dGhlIHJlZmVyZW5jZWQgdmFsdWUgYXMgYQotICAvLy8gVmFsdWUuCi0gIFZhbHVlIGtleSgpIGNv
bnN0OwotCi0gIC8vLyBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSByZWZlcmVuY2VkIFZhbHVlLCBv
ciAtMSBpZiBpdCBpcyBub3QgYW4gYXJyYXlWYWx1ZS4KLSAgVUludCBpbmRleCgpIGNvbnN0Owot
Ci0gIC8vLyBSZXR1cm4gdGhlIG1lbWJlciBuYW1lIG9mIHRoZSByZWZlcmVuY2VkIFZhbHVlLCBv
ciAiIiBpZiBpdCBpcyBub3QgYW4KLSAgLy8vIG9iamVjdFZhbHVlLgotICAvLy8gXG5vdGUgQXZv
aWQgYGNfc3RyKClgIG9uIHJlc3VsdCwgYXMgZW1iZWRkZWQgemVyb2VzIGFyZSBwb3NzaWJsZS4K
LSAgc3RkOjpzdHJpbmcgbmFtZSgpIGNvbnN0OwotCi0gIC8vLyBSZXR1cm4gdGhlIG1lbWJlciBu
YW1lIG9mIHRoZSByZWZlcmVuY2VkIFZhbHVlLiAiIiBpZiBpdCBpcyBub3QgYW4KLSAgLy8vIG9i
amVjdFZhbHVlLgotICAvLy8gXGRlcHJlY2F0ZWQgVGhpcyBjYW5ub3QgYmUgdXNlZCBmb3IgVVRG
LTggc3RyaW5ncywgc2luY2UgdGhlcmUgY2FuIGJlIGVtYmVkZGVkIG51bGxzLgotICBKU09OQ1BQ
X0RFUFJFQ0FURUQoIlVzZSBga2V5ID0gbmFtZSgpO2AgaW5zdGVhZC4iKQotICBjaGFyIGNvbnN0
KiBtZW1iZXJOYW1lKCkgY29uc3Q7Ci0gIC8vLyBSZXR1cm4gdGhlIG1lbWJlciBuYW1lIG9mIHRo
ZSByZWZlcmVuY2VkIFZhbHVlLCBvciBOVUxMIGlmIGl0IGlzIG5vdCBhbgotICAvLy8gb2JqZWN0
VmFsdWUuCi0gIC8vLyBcbm90ZSBCZXR0ZXIgdmVyc2lvbiB0aGFuIG1lbWJlck5hbWUoKS4gQWxs
b3dzIGVtYmVkZGVkIG51bGxzLgotICBjaGFyIGNvbnN0KiBtZW1iZXJOYW1lKGNoYXIgY29uc3Qq
KiBlbmQpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gIFZhbHVlJiBkZXJlZigpIGNvbnN0OwotCi0g
IHZvaWQgaW5jcmVtZW50KCk7Ci0KLSAgdm9pZCBkZWNyZW1lbnQoKTsKLQotICBkaWZmZXJlbmNl
X3R5cGUgY29tcHV0ZURpc3RhbmNlKGNvbnN0IFNlbGZUeXBlJiBvdGhlcikgY29uc3Q7Ci0KLSAg
Ym9vbCBpc0VxdWFsKGNvbnN0IFNlbGZUeXBlJiBvdGhlcikgY29uc3Q7Ci0KLSAgdm9pZCBjb3B5
KGNvbnN0IFNlbGZUeXBlJiBvdGhlcik7Ci0KLXByaXZhdGU6Ci0gIFZhbHVlOjpPYmplY3RWYWx1
ZXM6Oml0ZXJhdG9yIGN1cnJlbnRfOwotICAvLyBJbmRpY2F0ZXMgdGhhdCBpdGVyYXRvciBpcyBm
b3IgYSBudWxsIHZhbHVlLgotICBib29sIGlzTnVsbF87Ci0KLXB1YmxpYzoKLSAgLy8gRm9yIHNv
bWUgcmVhc29uLCBCT1JMQU5EIG5lZWRzIHRoZXNlIGF0IHRoZSBlbmQsIHJhdGhlcgotICAvLyB0
aGFuIGVhcmxpZXIuIE5vIGlkZWEgd2h5LgotICBWYWx1ZUl0ZXJhdG9yQmFzZSgpOwotICBleHBs
aWNpdCBWYWx1ZUl0ZXJhdG9yQmFzZShjb25zdCBWYWx1ZTo6T2JqZWN0VmFsdWVzOjppdGVyYXRv
ciYgY3VycmVudCk7Ci19OwotCi0vKiogXGJyaWVmIGNvbnN0IGl0ZXJhdG9yIGZvciBvYmplY3Qg
YW5kIGFycmF5IHZhbHVlLgotICoKLSAqLwotY2xhc3MgSlNPTl9BUEkgVmFsdWVDb25zdEl0ZXJh
dG9yIDogcHVibGljIFZhbHVlSXRlcmF0b3JCYXNlIHsKLSAgZnJpZW5kIGNsYXNzIFZhbHVlOwot
Ci1wdWJsaWM6Ci0gIHR5cGVkZWYgY29uc3QgVmFsdWUgdmFsdWVfdHlwZTsKLSAgLy90eXBlZGVm
IHVuc2lnbmVkIGludCBzaXplX3Q7Ci0gIC8vdHlwZWRlZiBpbnQgZGlmZmVyZW5jZV90eXBlOwot
ICB0eXBlZGVmIGNvbnN0IFZhbHVlJiByZWZlcmVuY2U7Ci0gIHR5cGVkZWYgY29uc3QgVmFsdWUq
IHBvaW50ZXI7Ci0gIHR5cGVkZWYgVmFsdWVDb25zdEl0ZXJhdG9yIFNlbGZUeXBlOwotCi0gIFZh
bHVlQ29uc3RJdGVyYXRvcigpOwotICBWYWx1ZUNvbnN0SXRlcmF0b3IoVmFsdWVJdGVyYXRvciBj
b25zdCYgb3RoZXIpOwotCi1wcml2YXRlOgotLyohIFxpbnRlcm5hbCBVc2UgYnkgVmFsdWUgdG8g
Y3JlYXRlIGFuIGl0ZXJhdG9yLgotICovCi0gIGV4cGxpY2l0IFZhbHVlQ29uc3RJdGVyYXRvcihj
b25zdCBWYWx1ZTo6T2JqZWN0VmFsdWVzOjppdGVyYXRvciYgY3VycmVudCk7Ci1wdWJsaWM6Ci0g
IFNlbGZUeXBlJiBvcGVyYXRvcj0oY29uc3QgVmFsdWVJdGVyYXRvckJhc2UmIG90aGVyKTsKLQot
ICBTZWxmVHlwZSBvcGVyYXRvcisrKGludCkgewotICAgIFNlbGZUeXBlIHRlbXAoKnRoaXMpOwot
ICAgICsrKnRoaXM7Ci0gICAgcmV0dXJuIHRlbXA7Ci0gIH0KLQotICBTZWxmVHlwZSBvcGVyYXRv
ci0tKGludCkgewotICAgIFNlbGZUeXBlIHRlbXAoKnRoaXMpOwotICAgIC0tKnRoaXM7Ci0gICAg
cmV0dXJuIHRlbXA7Ci0gIH0KLQotICBTZWxmVHlwZSYgb3BlcmF0b3ItLSgpIHsKLSAgICBkZWNy
ZW1lbnQoKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBTZWxmVHlwZSYgb3BlcmF0b3Ir
KygpIHsKLSAgICBpbmNyZW1lbnQoKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICByZWZl
cmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gZGVyZWYoKTsgfQotCi0gIHBvaW50ZXIg
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZkZXJlZigpOyB9Ci19OwotCi0vKiogXGJyaWVm
IEl0ZXJhdG9yIGZvciBvYmplY3QgYW5kIGFycmF5IHZhbHVlLgotICovCi1jbGFzcyBKU09OX0FQ
SSBWYWx1ZUl0ZXJhdG9yIDogcHVibGljIFZhbHVlSXRlcmF0b3JCYXNlIHsKLSAgZnJpZW5kIGNs
YXNzIFZhbHVlOwotCi1wdWJsaWM6Ci0gIHR5cGVkZWYgVmFsdWUgdmFsdWVfdHlwZTsKLSAgdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwotICB0eXBlZGVmIGludCBkaWZmZXJlbmNlX3R5cGU7
Ci0gIHR5cGVkZWYgVmFsdWUmIHJlZmVyZW5jZTsKLSAgdHlwZWRlZiBWYWx1ZSogcG9pbnRlcjsK
LSAgdHlwZWRlZiBWYWx1ZUl0ZXJhdG9yIFNlbGZUeXBlOwotCi0gIFZhbHVlSXRlcmF0b3IoKTsK
LSAgZXhwbGljaXQgVmFsdWVJdGVyYXRvcihjb25zdCBWYWx1ZUNvbnN0SXRlcmF0b3ImIG90aGVy
KTsKLSAgVmFsdWVJdGVyYXRvcihjb25zdCBWYWx1ZUl0ZXJhdG9yJiBvdGhlcik7Ci0KLXByaXZh
dGU6Ci0vKiEgXGludGVybmFsIFVzZSBieSBWYWx1ZSB0byBjcmVhdGUgYW4gaXRlcmF0b3IuCi0g
Ki8KLSAgZXhwbGljaXQgVmFsdWVJdGVyYXRvcihjb25zdCBWYWx1ZTo6T2JqZWN0VmFsdWVzOjpp
dGVyYXRvciYgY3VycmVudCk7Ci1wdWJsaWM6Ci0gIFNlbGZUeXBlJiBvcGVyYXRvcj0oY29uc3Qg
U2VsZlR5cGUmIG90aGVyKTsKLQotICBTZWxmVHlwZSBvcGVyYXRvcisrKGludCkgewotICAgIFNl
bGZUeXBlIHRlbXAoKnRoaXMpOwotICAgICsrKnRoaXM7Ci0gICAgcmV0dXJuIHRlbXA7Ci0gIH0K
LQotICBTZWxmVHlwZSBvcGVyYXRvci0tKGludCkgewotICAgIFNlbGZUeXBlIHRlbXAoKnRoaXMp
OwotICAgIC0tKnRoaXM7Ci0gICAgcmV0dXJuIHRlbXA7Ci0gIH0KLQotICBTZWxmVHlwZSYgb3Bl
cmF0b3ItLSgpIHsKLSAgICBkZWNyZW1lbnQoKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQot
ICBTZWxmVHlwZSYgb3BlcmF0b3IrKygpIHsKLSAgICBpbmNyZW1lbnQoKTsKLSAgICByZXR1cm4g
KnRoaXM7Ci0gIH0KLQotICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gZGVy
ZWYoKTsgfQotCi0gIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZkZXJlZigp
OyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKc29uCi0KLQotbmFtZXNwYWNlIHN0ZCB7Ci0vLy8g
U3BlY2lhbGl6ZSBzdGQ6OnN3YXAoKSBmb3IgSnNvbjo6VmFsdWUuCi10ZW1wbGF0ZTw+Ci1pbmxp
bmUgdm9pZCBzd2FwKEpzb246OlZhbHVlJiBhLCBKc29uOjpWYWx1ZSYgYikgeyBhLnN3YXAoYik7
IH0KLX0KLQotCi0jaWYgZGVmaW5lZChKU09OQ1BQX0RJU0FCTEVfRExMX0lOVEVSRkFDRV9XQVJO
SU5HKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZiAvLyBpZiBkZWZpbmVkKEpTT05DUFBf
RElTQUJMRV9ETExfSU5URVJGQUNFX1dBUk5JTkcpCi0KLSNlbmRpZiAvLyBDUFBUTF9KU09OX0hf
SU5DTFVERUQKLQotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gRW5kIG9mIGNvbnRlbnQgb2YgZmlsZTog
aW5jbHVkZS9qc29uL3ZhbHVlLmgKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotCi0KLQotCi0KLS8vIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vIEJlZ2lubmluZyBvZiBjb250ZW50IG9mIGZpbGU6IGluY2x1ZGUvanNv
bi9yZWFkZXIuaAotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLyBDb3B5cmlnaHQgMjAwNy0yMDEwIEJh
cHRpc3RlIExlcGlsbGV1cgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIG9yIHB1
YmxpYyBkb21haW4gaWYgZGVzaXJlZCBhbmQKLS8vIHJlY29nbml6ZWQgaW4geW91ciBqdXJpc2Rp
Y3Rpb24uCi0vLyBTZWUgZmlsZSBMSUNFTlNFIGZvciBkZXRhaWwgb3IgY29weSBhdCBodHRwOi8v
anNvbmNwcC5zb3VyY2Vmb3JnZS5uZXQvTElDRU5TRQotCi0jaWZuZGVmIENQUFRMX0pTT05fUkVB
REVSX0hfSU5DTFVERUQKLSNkZWZpbmUgQ1BQVExfSlNPTl9SRUFERVJfSF9JTkNMVURFRAotCi0j
aWYgIWRlZmluZWQoSlNPTl9JU19BTUFMR0FNQVRJT04pCi0jaW5jbHVkZSAiZmVhdHVyZXMuaCIK
LSNpbmNsdWRlICJ2YWx1ZS5oIgotI2VuZGlmIC8vIGlmICFkZWZpbmVkKEpTT05fSVNfQU1BTEdB
TUFUSU9OKQotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDxz
dGFjaz4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8aXN0cmVhbT4KLQotLy8gRGlzYWJs
ZSB3YXJuaW5nIEM0MjUxOiA8ZGF0YSBtZW1iZXI+OiA8dHlwZT4gbmVlZHMgdG8gaGF2ZSBkbGwt
aW50ZXJmYWNlIHRvCi0vLyBiZSB1c2VkIGJ5Li4uCi0jaWYgZGVmaW5lZChKU09OQ1BQX0RJU0FC
TEVfRExMX0lOVEVSRkFDRV9XQVJOSU5HKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZSA6IDQyNTEpCi0jZW5kaWYgLy8gaWYgZGVmaW5lZChKU09OQ1BQX0RJ
U0FCTEVfRExMX0lOVEVSRkFDRV9XQVJOSU5HKQotCi1uYW1lc3BhY2UgSnNvbiB7Ci0KLS8qKiBc
YnJpZWYgVW5zZXJpYWxpemUgYSA8YSBIUkVGPSJodHRwOi8vd3d3Lmpzb24ub3JnIj5KU09OPC9h
PiBkb2N1bWVudCBpbnRvIGEKLSAqVmFsdWUuCi0gKgotICogXGRlcHJlY2F0ZWQgVXNlIENoYXJS
ZWFkZXIgYW5kIENoYXJSZWFkZXJCdWlsZGVyLgotICovCi1jbGFzcyBKU09OX0FQSSBSZWFkZXIg
ewotcHVibGljOgotICB0eXBlZGVmIGNoYXIgQ2hhcjsKLSAgdHlwZWRlZiBjb25zdCBDaGFyKiBM
b2NhdGlvbjsKLQotICAvKiogXGJyaWVmIEFuIGVycm9yIHRhZ2dlZCB3aXRoIHdoZXJlIGluIHRo
ZSBKU09OIHRleHQgaXQgd2FzIGVuY291bnRlcmVkLgotICAgKgotICAgKiBUaGUgb2Zmc2V0cyBn
aXZlIHRoZSBbc3RhcnQsIGxpbWl0KSByYW5nZSBvZiBieXRlcyB3aXRoaW4gdGhlIHRleHQuIE5v
dGUKLSAgICogdGhhdCB0aGlzIGlzIGJ5dGVzLCBub3QgY29kZXBvaW50cy4KLSAgICoKLSAgICov
Ci0gIHN0cnVjdCBTdHJ1Y3R1cmVkRXJyb3IgewotICAgIHNpemVfdCBvZmZzZXRfc3RhcnQ7Ci0g
ICAgc2l6ZV90IG9mZnNldF9saW1pdDsKLSAgICBzdGQ6OnN0cmluZyBtZXNzYWdlOwotICB9Owot
Ci0gIC8qKiBcYnJpZWYgQ29uc3RydWN0cyBhIFJlYWRlciBhbGxvd2luZyBhbGwgZmVhdHVyZXMK
LSAgICogZm9yIHBhcnNpbmcuCi0gICAqLwotICBSZWFkZXIoKTsKLQotICAvKiogXGJyaWVmIENv
bnN0cnVjdHMgYSBSZWFkZXIgYWxsb3dpbmcgdGhlIHNwZWNpZmllZCBmZWF0dXJlIHNldAotICAg
KiBmb3IgcGFyc2luZy4KLSAgICovCi0gIFJlYWRlcihjb25zdCBGZWF0dXJlcyYgZmVhdHVyZXMp
OwotCi0gIC8qKiBcYnJpZWYgUmVhZCBhIFZhbHVlIGZyb20gYSA8YSBIUkVGPSJodHRwOi8vd3d3
Lmpzb24ub3JnIj5KU09OPC9hPgotICAgKiBkb2N1bWVudC4KLSAgICogXHBhcmFtIGRvY3VtZW50
IFVURi04IGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50IHRvIHJlYWQuCi0g
ICAqIFxwYXJhbSByb290IFtvdXRdIENvbnRhaW5zIHRoZSByb290IHZhbHVlIG9mIHRoZSBkb2N1
bWVudCBpZiBpdCB3YXMKLSAgICogICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KLSAg
ICogXHBhcmFtIGNvbGxlY3RDb21tZW50cyBcYyB0cnVlIHRvIGNvbGxlY3QgY29tbWVudCBhbmQg
YWxsb3cgd3JpdGluZyB0aGVtCi0gICAqIGJhY2sgZHVyaW5nCi0gICAqICAgICAgICAgICAgICAg
ICAgICAgICAgc2VyaWFsaXphdGlvbiwgXGMgZmFsc2UgdG8gZGlzY2FyZCBjb21tZW50cy4KLSAg
ICogICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmCi0g
ICAqIEZlYXR1cmVzOjphbGxvd0NvbW1lbnRzXwotICAgKiAgICAgICAgICAgICAgICAgICAgICAg
IGlzIFxjIGZhbHNlLgotICAgKiBccmV0dXJuIFxjIHRydWUgaWYgdGhlIGRvY3VtZW50IHdhcyBz
dWNjZXNzZnVsbHkgcGFyc2VkLCBcYyBmYWxzZSBpZiBhbgotICAgKiBlcnJvciBvY2N1cnJlZC4K
LSAgICovCi0gIGJvb2wKLSAgcGFyc2UoY29uc3Qgc3RkOjpzdHJpbmcmIGRvY3VtZW50LCBWYWx1
ZSYgcm9vdCwgYm9vbCBjb2xsZWN0Q29tbWVudHMgPSB0cnVlKTsKLQotICAvKiogXGJyaWVmIFJl
YWQgYSBWYWx1ZSBmcm9tIGEgPGEgSFJFRj0iaHR0cDovL3d3dy5qc29uLm9yZyI+SlNPTjwvYT4K
LSAgIGRvY3VtZW50LgotICAgKiBccGFyYW0gYmVnaW5Eb2MgUG9pbnRlciBvbiB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBVVEYtOCBlbmNvZGVkIHN0cmluZyBvZiB0aGUKLSAgIGRvY3VtZW50IHRvIHJl
YWQuCi0gICAqIFxwYXJhbSBlbmREb2MgUG9pbnRlciBvbiB0aGUgZW5kIG9mIHRoZSBVVEYtOCBl
bmNvZGVkIHN0cmluZyBvZiB0aGUKLSAgIGRvY3VtZW50IHRvIHJlYWQuCi0gICAqICAgICAgICAg
ICAgICAgTXVzdCBiZSA+PSBiZWdpbkRvYy4KLSAgICogXHBhcmFtIHJvb3QgW291dF0gQ29udGFp
bnMgdGhlIHJvb3QgdmFsdWUgb2YgdGhlIGRvY3VtZW50IGlmIGl0IHdhcwotICAgKiAgICAgICAg
ICAgICBzdWNjZXNzZnVsbHkgcGFyc2VkLgotICAgKiBccGFyYW0gY29sbGVjdENvbW1lbnRzIFxj
IHRydWUgdG8gY29sbGVjdCBjb21tZW50IGFuZCBhbGxvdyB3cml0aW5nIHRoZW0KLSAgIGJhY2sg
ZHVyaW5nCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbiwgXGMgZmFs
c2UgdG8gZGlzY2FyZCBjb21tZW50cy4KLSAgICogICAgICAgICAgICAgICAgICAgICAgICBUaGlz
IHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmCi0gICBGZWF0dXJlczo6YWxsb3dDb21tZW50c18KLSAg
ICogICAgICAgICAgICAgICAgICAgICAgICBpcyBcYyBmYWxzZS4KLSAgICogXHJldHVybiBcYyB0
cnVlIGlmIHRoZSBkb2N1bWVudCB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZCwgXGMgZmFsc2UgaWYg
YW4KLSAgIGVycm9yIG9jY3VycmVkLgotICAgKi8KLSAgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBi
ZWdpbkRvYywKLSAgICAgICAgICAgICBjb25zdCBjaGFyKiBlbmREb2MsCi0gICAgICAgICAgICAg
VmFsdWUmIHJvb3QsCi0gICAgICAgICAgICAgYm9vbCBjb2xsZWN0Q29tbWVudHMgPSB0cnVlKTsK
LQotICAvLy8gXGJyaWVmIFBhcnNlIGZyb20gaW5wdXQgc3RyZWFtLgotICAvLy8gXHNlZSBKc29u
OjpvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYsIEpzb246OlZhbHVlJikuCi0gIGJvb2wgcGFyc2Uo
c3RkOjppc3RyZWFtJiBpcywgVmFsdWUmIHJvb3QsIGJvb2wgY29sbGVjdENvbW1lbnRzID0gdHJ1
ZSk7Ci0KLSAgLyoqIFxicmllZiBSZXR1cm5zIGEgdXNlciBmcmllbmRseSBzdHJpbmcgdGhhdCBs
aXN0IGVycm9ycyBpbiB0aGUgcGFyc2VkCi0gICAqIGRvY3VtZW50LgotICAgKiBccmV0dXJuIEZv
cm1hdHRlZCBlcnJvciBtZXNzYWdlIHdpdGggdGhlIGxpc3Qgb2YgZXJyb3JzIHdpdGggdGhlaXIg
bG9jYXRpb24KLSAgICogaW4KLSAgICogICAgICAgICB0aGUgcGFyc2VkIGRvY3VtZW50LiBBbiBl
bXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgbm8gZXJyb3IKLSAgICogb2NjdXJyZWQKLSAgICog
ICAgICAgICBkdXJpbmcgcGFyc2luZy4KLSAgICogXGRlcHJlY2F0ZWQgVXNlIGdldEZvcm1hdHRl
ZEVycm9yTWVzc2FnZXMoKSBpbnN0ZWFkICh0eXBvIGZpeCkuCi0gICAqLwotICBKU09OQ1BQX0RF
UFJFQ0FURUQoIlVzZSBnZXRGb3JtYXR0ZWRFcnJvck1lc3NhZ2VzKCkgaW5zdGVhZC4iKQotICBz
dGQ6OnN0cmluZyBnZXRGb3JtYXRlZEVycm9yTWVzc2FnZXMoKSBjb25zdDsKLQotICAvKiogXGJy
aWVmIFJldHVybnMgYSB1c2VyIGZyaWVuZGx5IHN0cmluZyB0aGF0IGxpc3QgZXJyb3JzIGluIHRo
ZSBwYXJzZWQKLSAgICogZG9jdW1lbnQuCi0gICAqIFxyZXR1cm4gRm9ybWF0dGVkIGVycm9yIG1l
c3NhZ2Ugd2l0aCB0aGUgbGlzdCBvZiBlcnJvcnMgd2l0aCB0aGVpciBsb2NhdGlvbgotICAgKiBp
bgotICAgKiAgICAgICAgIHRoZSBwYXJzZWQgZG9jdW1lbnQuIEFuIGVtcHR5IHN0cmluZyBpcyBy
ZXR1cm5lZCBpZiBubyBlcnJvcgotICAgKiBvY2N1cnJlZAotICAgKiAgICAgICAgIGR1cmluZyBw
YXJzaW5nLgotICAgKi8KLSAgc3RkOjpzdHJpbmcgZ2V0Rm9ybWF0dGVkRXJyb3JNZXNzYWdlcygp
IGNvbnN0OwotCi0gIC8qKiBcYnJpZWYgUmV0dXJucyBhIHZlY3RvciBvZiBzdHJ1Y3R1cmVkIGVy
cm9zIGVuY291bnRlZCB3aGlsZSBwYXJzaW5nLgotICAgKiBccmV0dXJuIEEgKHBvc3NpYmx5IGVt
cHR5KSB2ZWN0b3Igb2YgU3RydWN0dXJlZEVycm9yIG9iamVjdHMuIEN1cnJlbnRseQotICAgKiAg
ICAgICAgIG9ubHkgb25lIGVycm9yIGNhbiBiZSByZXR1cm5lZCwgYnV0IHRoZSBjYWxsZXIgc2hv
dWxkIHRvbGVyYXRlCi0gICAqIG11bHRpcGxlCi0gICAqICAgICAgICAgZXJyb3JzLiAgVGhpcyBj
YW4gb2NjdXIgaWYgdGhlIHBhcnNlciByZWNvdmVycyBmcm9tIGEgbm9uLWZhdGFsCi0gICAqICAg
ICAgICAgcGFyc2UgZXJyb3IgYW5kIHRoZW4gZW5jb3VudGVycyBhZGRpdGlvbmFsIGVycm9ycy4K
LSAgICovCi0gIHN0ZDo6dmVjdG9yPFN0cnVjdHVyZWRFcnJvcj4gZ2V0U3RydWN0dXJlZEVycm9y
cygpIGNvbnN0OwotCi0gIC8qKiBcYnJpZWYgQWRkIGEgc2VtYW50aWMgZXJyb3IgbWVzc2FnZS4K
LSAgICogXHBhcmFtIHZhbHVlIEpTT04gVmFsdWUgbG9jYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRo
ZSBlcnJvcgotICAgKiBccGFyYW0gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS4KLSAgICogXHJl
dHVybiBcYyB0cnVlIGlmIHRoZSBlcnJvciB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLCBcYyBmYWxz
ZSBpZiB0aGUKLSAgICogVmFsdWUgb2Zmc2V0IGV4Y2VlZHMgdGhlIGRvY3VtZW50IHNpemUuCi0g
ICAqLwotICBib29sIHB1c2hFcnJvcihjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBtZXNzYWdlKTsKLQotICAvKiogXGJyaWVmIEFkZCBhIHNlbWFudGljIGVycm9yIG1lc3Nh
Z2Ugd2l0aCBleHRyYSBjb250ZXh0LgotICAgKiBccGFyYW0gdmFsdWUgSlNPTiBWYWx1ZSBsb2Nh
dGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yCi0gICAqIFxwYXJhbSBtZXNzYWdlIFRoZSBl
cnJvciBtZXNzYWdlLgotICAgKiBccGFyYW0gZXh0cmEgQWRkaXRpb25hbCBKU09OIFZhbHVlIGxv
Y2F0aW9uIHRvIGNvbnRleHR1YWxpemUgdGhlIGVycm9yCi0gICAqIFxyZXR1cm4gXGMgdHJ1ZSBp
ZiB0aGUgZXJyb3Igd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCwgXGMgZmFsc2UgaWYgZWl0aGVyCi0g
ICAqIFZhbHVlIG9mZnNldCBleGNlZWRzIHRoZSBkb2N1bWVudCBzaXplLgotICAgKi8KLSAgYm9v
bCBwdXNoRXJyb3IoY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2Fn
ZSwgY29uc3QgVmFsdWUmIGV4dHJhKTsKLQotICAvKiogXGJyaWVmIFJldHVybiB3aGV0aGVyIHRo
ZXJlIGFyZSBhbnkgZXJyb3JzLgotICAgKiBccmV0dXJuIFxjIHRydWUgaWYgdGhlcmUgYXJlIG5v
IGVycm9ycyB0byByZXBvcnQgXGMgZmFsc2UgaWYKLSAgICogZXJyb3JzIGhhdmUgb2NjdXJyZWQu
Ci0gICAqLwotICBib29sIGdvb2QoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgZW51bSBUb2tlblR5
cGUgewotICAgIHRva2VuRW5kT2ZTdHJlYW0gPSAwLAotICAgIHRva2VuT2JqZWN0QmVnaW4sCi0g
ICAgdG9rZW5PYmplY3RFbmQsCi0gICAgdG9rZW5BcnJheUJlZ2luLAotICAgIHRva2VuQXJyYXlF
bmQsCi0gICAgdG9rZW5TdHJpbmcsCi0gICAgdG9rZW5OdW1iZXIsCi0gICAgdG9rZW5UcnVlLAot
ICAgIHRva2VuRmFsc2UsCi0gICAgdG9rZW5OdWxsLAotICAgIHRva2VuQXJyYXlTZXBhcmF0b3Is
Ci0gICAgdG9rZW5NZW1iZXJTZXBhcmF0b3IsCi0gICAgdG9rZW5Db21tZW50LAotICAgIHRva2Vu
RXJyb3IKLSAgfTsKLQotICBjbGFzcyBUb2tlbiB7Ci0gIHB1YmxpYzoKLSAgICBUb2tlblR5cGUg
dHlwZV87Ci0gICAgTG9jYXRpb24gc3RhcnRfOwotICAgIExvY2F0aW9uIGVuZF87Ci0gIH07Ci0K
LSAgY2xhc3MgRXJyb3JJbmZvIHsKLSAgcHVibGljOgotICAgIFRva2VuIHRva2VuXzsKLSAgICBz
dGQ6OnN0cmluZyBtZXNzYWdlXzsKLSAgICBMb2NhdGlvbiBleHRyYV87Ci0gIH07Ci0KLSAgdHlw
ZWRlZiBzdGQ6OmRlcXVlPEVycm9ySW5mbz4gRXJyb3JzOwotCi0gIGJvb2wgcmVhZFRva2VuKFRv
a2VuJiB0b2tlbik7Ci0gIHZvaWQgc2tpcFNwYWNlcygpOwotICBib29sIG1hdGNoKExvY2F0aW9u
IHBhdHRlcm4sIGludCBwYXR0ZXJuTGVuZ3RoKTsKLSAgYm9vbCByZWFkQ29tbWVudCgpOwotICBi
b29sIHJlYWRDU3R5bGVDb21tZW50KCk7Ci0gIGJvb2wgcmVhZENwcFN0eWxlQ29tbWVudCgpOwot
ICBib29sIHJlYWRTdHJpbmcoKTsKLSAgdm9pZCByZWFkTnVtYmVyKCk7Ci0gIGJvb2wgcmVhZFZh
bHVlKCk7Ci0gIGJvb2wgcmVhZE9iamVjdChUb2tlbiYgdG9rZW4pOwotICBib29sIHJlYWRBcnJh
eShUb2tlbiYgdG9rZW4pOwotICBib29sIGRlY29kZU51bWJlcihUb2tlbiYgdG9rZW4pOwotICBi
b29sIGRlY29kZU51bWJlcihUb2tlbiYgdG9rZW4sIFZhbHVlJiBkZWNvZGVkKTsKLSAgYm9vbCBk
ZWNvZGVTdHJpbmcoVG9rZW4mIHRva2VuKTsKLSAgYm9vbCBkZWNvZGVTdHJpbmcoVG9rZW4mIHRv
a2VuLCBzdGQ6OnN0cmluZyYgZGVjb2RlZCk7Ci0gIGJvb2wgZGVjb2RlRG91YmxlKFRva2VuJiB0
b2tlbik7Ci0gIGJvb2wgZGVjb2RlRG91YmxlKFRva2VuJiB0b2tlbiwgVmFsdWUmIGRlY29kZWQp
OwotICBib29sIGRlY29kZVVuaWNvZGVDb2RlUG9pbnQoVG9rZW4mIHRva2VuLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb24mIGN1cnJlbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMb2NhdGlvbiBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQmIHVuaWNvZGUpOwotICBib29sIGRlY29kZVVuaWNvZGVFc2NhcGVTZXF1
ZW5jZShUb2tlbiYgdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExv
Y2F0aW9uJiBjdXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2Nh
dGlvbiBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCYgdW5pY29kZSk7Ci0gIGJvb2wgYWRkRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2Us
IFRva2VuJiB0b2tlbiwgTG9jYXRpb24gZXh0cmEgPSAwKTsKLSAgYm9vbCByZWNvdmVyRnJvbUVy
cm9yKFRva2VuVHlwZSBza2lwVW50aWxUb2tlbik7Ci0gIGJvb2wgYWRkRXJyb3JBbmRSZWNvdmVy
KGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBU
b2tlbiYgdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuVHlwZSBza2lwVW50
aWxUb2tlbik7Ci0gIHZvaWQgc2tpcFVudGlsU3BhY2UoKTsKLSAgVmFsdWUmIGN1cnJlbnRWYWx1
ZSgpOwotICBDaGFyIGdldE5leHRDaGFyKCk7Ci0gIHZvaWQKLSAgZ2V0TG9jYXRpb25MaW5lQW5k
Q29sdW1uKExvY2F0aW9uIGxvY2F0aW9uLCBpbnQmIGxpbmUsIGludCYgY29sdW1uKSBjb25zdDsK
LSAgc3RkOjpzdHJpbmcgZ2V0TG9jYXRpb25MaW5lQW5kQ29sdW1uKExvY2F0aW9uIGxvY2F0aW9u
KSBjb25zdDsKLSAgdm9pZCBhZGRDb21tZW50KExvY2F0aW9uIGJlZ2luLCBMb2NhdGlvbiBlbmQs
IENvbW1lbnRQbGFjZW1lbnQgcGxhY2VtZW50KTsKLSAgdm9pZCBza2lwQ29tbWVudFRva2VucyhU
b2tlbiYgdG9rZW4pOwotCi0gIHR5cGVkZWYgc3RkOjpzdGFjazxWYWx1ZSo+IE5vZGVzOwotICBO
b2RlcyBub2Rlc187Ci0gIEVycm9ycyBlcnJvcnNfOwotICBzdGQ6OnN0cmluZyBkb2N1bWVudF87
Ci0gIExvY2F0aW9uIGJlZ2luXzsKLSAgTG9jYXRpb24gZW5kXzsKLSAgTG9jYXRpb24gY3VycmVu
dF87Ci0gIExvY2F0aW9uIGxhc3RWYWx1ZUVuZF87Ci0gIFZhbHVlKiBsYXN0VmFsdWVfOwotICBz
dGQ6OnN0cmluZyBjb21tZW50c0JlZm9yZV87Ci0gIEZlYXR1cmVzIGZlYXR1cmVzXzsKLSAgYm9v
bCBjb2xsZWN0Q29tbWVudHNfOwotfTsgIC8vIFJlYWRlcgotCi0vKiogSW50ZXJmYWNlIGZvciBy
ZWFkaW5nIEpTT04gZnJvbSBhIGNoYXIgYXJyYXkuCi0gKi8KLWNsYXNzIEpTT05fQVBJIENoYXJS
ZWFkZXIgewotcHVibGljOgotICB2aXJ0dWFsIH5DaGFyUmVhZGVyKCkge30KLSAgLyoqIFxicmll
ZiBSZWFkIGEgVmFsdWUgZnJvbSBhIDxhIEhSRUY9Imh0dHA6Ly93d3cuanNvbi5vcmciPkpTT048
L2E+Ci0gICBkb2N1bWVudC4KLSAgICogVGhlIGRvY3VtZW50IG11c3QgYmUgYSBVVEYtOCBlbmNv
ZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBkb2N1bWVudCB0byByZWFkLgotICAgKgotICAgKiBc
cGFyYW0gYmVnaW5Eb2MgUG9pbnRlciBvbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBVVEYtOCBlbmNv
ZGVkIHN0cmluZyBvZiB0aGUKLSAgIGRvY3VtZW50IHRvIHJlYWQuCi0gICAqIFxwYXJhbSBlbmRE
b2MgUG9pbnRlciBvbiB0aGUgZW5kIG9mIHRoZSBVVEYtOCBlbmNvZGVkIHN0cmluZyBvZiB0aGUK
LSAgIGRvY3VtZW50IHRvIHJlYWQuCi0gICAqICAgICAgICBNdXN0IGJlID49IGJlZ2luRG9jLgot
ICAgKiBccGFyYW0gcm9vdCBbb3V0XSBDb250YWlucyB0aGUgcm9vdCB2YWx1ZSBvZiB0aGUgZG9j
dW1lbnQgaWYgaXQgd2FzCi0gICAqICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSBwYXJzZWQuCi0g
ICAqIFxwYXJhbSBlcnJzIFtvdXRdIEZvcm1hdHRlZCBlcnJvciBtZXNzYWdlcyAoaWYgbm90IE5V
TEwpCi0gICAqICAgICAgICBhIHVzZXIgZnJpZW5kbHkgc3RyaW5nIHRoYXQgbGlzdHMgZXJyb3Jz
IGluIHRoZSBwYXJzZWQKLSAgICogZG9jdW1lbnQuCi0gICAqIFxyZXR1cm4gXGMgdHJ1ZSBpZiB0
aGUgZG9jdW1lbnQgd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIFxjIGZhbHNlIGlmIGFuCi0gICBl
cnJvciBvY2N1cnJlZC4KLSAgICovCi0gIHZpcnR1YWwgYm9vbCBwYXJzZSgKLSAgICAgIGNoYXIg
Y29uc3QqIGJlZ2luRG9jLCBjaGFyIGNvbnN0KiBlbmREb2MsCi0gICAgICBWYWx1ZSogcm9vdCwg
c3RkOjpzdHJpbmcqIGVycnMpID0gMDsKLQotICBjbGFzcyBKU09OX0FQSSBGYWN0b3J5IHsKLSAg
cHVibGljOgotICAgIHZpcnR1YWwgfkZhY3RvcnkoKSB7fQotICAgIC8qKiBcYnJpZWYgQWxsb2Nh
dGUgYSBDaGFyUmVhZGVyIHZpYSBvcGVyYXRvciBuZXcoKS4KLSAgICAgKiBcdGhyb3cgc3RkOjpl
eGNlcHRpb24gaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgKGUuZy4gaW52YWxpZCBzZXR0aW5ncykK
LSAgICAgKi8KLSAgICB2aXJ0dWFsIENoYXJSZWFkZXIqIG5ld0NoYXJSZWFkZXIoKSBjb25zdCA9
IDA7Ci0gIH07ICAvLyBGYWN0b3J5Ci19OyAgLy8gQ2hhclJlYWRlcgotCi0vKiogXGJyaWVmIEJ1
aWxkIGEgQ2hhclJlYWRlciBpbXBsZW1lbnRhdGlvbi4KLQotVXNhZ2U6Ci1cY29kZQotICB1c2lu
ZyBuYW1lc3BhY2UgSnNvbjsKLSAgQ2hhclJlYWRlckJ1aWxkZXIgYnVpbGRlcjsKLSAgYnVpbGRl
clsiY29sbGVjdENvbW1lbnRzIl0gPSBmYWxzZTsKLSAgVmFsdWUgdmFsdWU7Ci0gIHN0ZDo6c3Ry
aW5nIGVycnM7Ci0gIGJvb2wgb2sgPSBwYXJzZUZyb21TdHJlYW0oYnVpbGRlciwgc3RkOjpjaW4s
ICZ2YWx1ZSwgJmVycnMpOwotXGVuZGNvZGUKLSovCi1jbGFzcyBKU09OX0FQSSBDaGFyUmVhZGVy
QnVpbGRlciA6IHB1YmxpYyBDaGFyUmVhZGVyOjpGYWN0b3J5IHsKLXB1YmxpYzoKLSAgLy8gTm90
ZTogV2UgdXNlIGEgSnNvbjo6VmFsdWUgc28gdGhhdCB3ZSBjYW4gYWRkIGRhdGEtbWVtYmVycyB0
byB0aGlzIGNsYXNzCi0gIC8vIHdpdGhvdXQgYSBtYWpvciB2ZXJzaW9uIGJ1bXAuCi0gIC8qKiBD
b25maWd1cmF0aW9uIG9mIHRoaXMgYnVpbGRlci4KLSAgICBUaGVzZSBhcmUgY2FzZS1zZW5zaXRp
dmUuCi0gICAgQXZhaWxhYmxlIHNldHRpbmdzIChjYXNlLXNlbnNpdGl2ZSk6Ci0gICAgLSBgImNv
bGxlY3RDb21tZW50cyI6IGZhbHNlIG9yIHRydWVgCi0gICAgICAtIHRydWUgdG8gY29sbGVjdCBj
b21tZW50IGFuZCBhbGxvdyB3cml0aW5nIHRoZW0KLSAgICAgICAgYmFjayBkdXJpbmcgc2VyaWFs
aXphdGlvbiwgZmFsc2UgdG8gZGlzY2FyZCBjb21tZW50cy4KLSAgICAgICAgVGhpcyBwYXJhbWV0
ZXIgaXMgaWdub3JlZCBpZiBhbGxvd0NvbW1lbnRzIGlzIGZhbHNlLgotICAgIC0gYCJhbGxvd0Nv
bW1lbnRzIjogZmFsc2Ugb3IgdHJ1ZWAKLSAgICAgIC0gdHJ1ZSBpZiBjb21tZW50cyBhcmUgYWxs
b3dlZC4KLSAgICAtIGAic3RyaWN0Um9vdCI6IGZhbHNlIG9yIHRydWVgCi0gICAgICAtIHRydWUg
aWYgcm9vdCBtdXN0IGJlIGVpdGhlciBhbiBhcnJheSBvciBhbiBvYmplY3QgdmFsdWUKLSAgICAt
IGAiYWxsb3dEcm9wcGVkTnVsbFBsYWNlaG9sZGVycyI6IGZhbHNlIG9yIHRydWVgCi0gICAgICAt
IHRydWUgaWYgZHJvcHBlZCBudWxsIHBsYWNlaG9sZGVycyBhcmUgYWxsb3dlZC4gKFNlZSBTdHJl
YW1Xcml0ZXJCdWlsZGVyLikKLSAgICAtIGAiYWxsb3dOdW1lcmljS2V5cyI6IGZhbHNlIG9yIHRy
dWVgCi0gICAgICAtIHRydWUgaWYgbnVtZXJpYyBvYmplY3Qga2V5cyBhcmUgYWxsb3dlZC4KLSAg
ICAtIGAiYWxsb3dTaW5nbGVRdW90ZXMiOiBmYWxzZSBvciB0cnVlYAotICAgICAgLSB0cnVlIGlm
ICcnIGFyZSBhbGxvd2VkIGZvciBzdHJpbmdzIChib3RoIGtleXMgYW5kIHZhbHVlcykKLSAgICAt
IGAic3RhY2tMaW1pdCI6IGludGVnZXJgCi0gICAgICAtIEV4Y2VlZGluZyBzdGFja0xpbWl0IChy
ZWN1cnNpdmUgZGVwdGggb2YgYHJlYWRWYWx1ZSgpYCkgd2lsbAotICAgICAgICBjYXVzZSBhbiBl
eGNlcHRpb24uCi0gICAgICAtIFRoaXMgaXMgYSBzZWN1cml0eSBpc3N1ZSAoc2VnLWZhdWx0cyBj
YXVzZWQgYnkgZGVlcGx5IG5lc3RlZCBKU09OKSwKLSAgICAgICAgc28gdGhlIGRlZmF1bHQgaXMg
bG93LgotICAgIC0gYCJmYWlsSWZFeHRyYSI6IGZhbHNlIG9yIHRydWVgCi0gICAgICAtIElmIHRy
dWUsIGBwYXJzZSgpYCByZXR1cm5zIGZhbHNlIHdoZW4gZXh0cmEgbm9uLXdoaXRlc3BhY2UgdHJh
aWxzCi0gICAgICAgIHRoZSBKU09OIHZhbHVlIGluIHRoZSBpbnB1dCBzdHJpbmcuCi0gICAgLSBg
InJlamVjdER1cEtleXMiOiBmYWxzZSBvciB0cnVlYAotICAgICAgLSBJZiB0cnVlLCBgcGFyc2Uo
KWAgcmV0dXJucyBmYWxzZSB3aGVuIGEga2V5IGlzIGR1cGxpY2F0ZWQgd2l0aGluIGFuIG9iamVj
dC4KLSAgICAtIGAiYWxsb3dTcGVjaWFsRmxvYXRzIjogZmFsc2Ugb3IgdHJ1ZWAKLSAgICAgIC0g
SWYgdHJ1ZSwgc3BlY2lhbCBmbG9hdCB2YWx1ZXMgKE5hTnMgYW5kIGluZmluaXRpZXMpIGFyZSBh
bGxvd2VkIAotICAgICAgICBhbmQgdGhlaXIgdmFsdWVzIGFyZSBsb3NzZnJlZSByZXN0b3JhYmxl
LgotCi0gICAgWW91IGNhbiBleGFtaW5lICdzZXR0aW5nc19gIHlvdXJzZWxmCi0gICAgdG8gc2Vl
IHRoZSBkZWZhdWx0cy4gWW91IGNhbiBhbHNvIHdyaXRlIGFuZCByZWFkIHRoZW0ganVzdCBsaWtl
IGFueQotICAgIEpTT04gVmFsdWUuCi0gICAgXHNhIHNldERlZmF1bHRzKCkKLSAgICAqLwotICBK
c29uOjpWYWx1ZSBzZXR0aW5nc187Ci0KLSAgQ2hhclJlYWRlckJ1aWxkZXIoKTsKLSAgfkNoYXJS
ZWFkZXJCdWlsZGVyKCkgb3ZlcnJpZGU7Ci0KLSAgQ2hhclJlYWRlciogbmV3Q2hhclJlYWRlcigp
IGNvbnN0IG92ZXJyaWRlOwotCi0gIC8qKiBccmV0dXJuIHRydWUgaWYgJ3NldHRpbmdzJyBhcmUg
bGVnYWwgYW5kIGNvbnNpc3RlbnQ7Ci0gICAqICAgb3RoZXJ3aXNlLCBpbmRpY2F0ZSBiYWQgc2V0
dGluZ3MgdmlhICdpbnZhbGlkJy4KLSAgICovCi0gIGJvb2wgdmFsaWRhdGUoSnNvbjo6VmFsdWUq
IGludmFsaWQpIGNvbnN0OwotCi0gIC8qKiBBIHNpbXBsZSB3YXkgdG8gdXBkYXRlIGEgc3BlY2lm
aWMgc2V0dGluZy4KLSAgICovCi0gIFZhbHVlJiBvcGVyYXRvcltdKHN0ZDo6c3RyaW5nIGtleSk7
Ci0KLSAgLyoqIENhbGxlZCBieSBjdG9yLCBidXQgeW91IGNhbiB1c2UgdGhpcyB0byByZXNldCBz
ZXR0aW5nc18uCi0gICAqIFxwcmUgJ3NldHRpbmdzJyAhPSBOVUxMIChidXQgSnNvbjo6bnVsbCBp
cyBmaW5lKQotICAgKiBccmVtYXJrIERlZmF1bHRzOgotICAgKiBcc25pcHBldCBzcmMvbGliX2pz
b24vanNvbl9yZWFkZXIuY3BwIENoYXJSZWFkZXJCdWlsZGVyRGVmYXVsdHMKLSAgICovCi0gIHN0
YXRpYyB2b2lkIHNldERlZmF1bHRzKEpzb246OlZhbHVlKiBzZXR0aW5ncyk7Ci0gIC8qKiBTYW1l
IGFzIG9sZCBGZWF0dXJlczo6c3RyaWN0TW9kZSgpLgotICAgKiBccHJlICdzZXR0aW5ncycgIT0g
TlVMTCAoYnV0IEpzb246Om51bGwgaXMgZmluZSkKLSAgICogXHJlbWFyayBEZWZhdWx0czoKLSAg
ICogXHNuaXBwZXQgc3JjL2xpYl9qc29uL2pzb25fcmVhZGVyLmNwcCBDaGFyUmVhZGVyQnVpbGRl
clN0cmljdE1vZGUKLSAgICovCi0gIHN0YXRpYyB2b2lkIHN0cmljdE1vZGUoSnNvbjo6VmFsdWUq
IHNldHRpbmdzKTsKLX07Ci0KLS8qKiBDb25zdW1lIGVudGlyZSBzdHJlYW0gYW5kIHVzZSBpdHMg
YmVnaW4vZW5kLgotICAqIFNvbWVkYXkgd2UgbWlnaHQgaGF2ZSBhIHJlYWwgU3RyZWFtUmVhZGVy
LCBidXQgZm9yIG5vdyB0aGlzCi0gICogaXMgY29udmVuaWVudC4KLSAgKi8KLWJvb2wgSlNPTl9B
UEkgcGFyc2VGcm9tU3RyZWFtKAotICAgIENoYXJSZWFkZXI6OkZhY3RvcnkgY29uc3QmLAotICAg
IHN0ZDo6aXN0cmVhbSYsCi0gICAgVmFsdWUqIHJvb3QsIHN0ZDo6c3RyaW5nKiBlcnJzKTsKLQot
LyoqIFxicmllZiBSZWFkIGZyb20gJ3NpbicgaW50byAncm9vdCcuCi0KLSBBbHdheXMga2VlcCBj
b21tZW50cyBmcm9tIHRoZSBpbnB1dCBKU09OLgotCi0gVGhpcyBjYW4gYmUgdXNlZCB0byByZWFk
IGEgZmlsZSBpbnRvIGEgcGFydGljdWxhciBzdWItb2JqZWN0LgotIEZvciBleGFtcGxlOgotIFxj
b2RlCi0gSnNvbjo6VmFsdWUgcm9vdDsKLSBjaW4gPj4gcm9vdFsiZGlyIl1bImZpbGUiXTsKLSBj
b3V0IDw8IHJvb3Q7Ci0gXGVuZGNvZGUKLSBSZXN1bHQ6Ci0gXHZlcmJhdGltCi0gewotICJkaXIi
OiB7Ci0gICAgICJmaWxlIjogewotICAgICAvLyBUaGUgaW5wdXQgc3RyZWFtIEpTT04gd291bGQg
YmUgbmVzdGVkIGhlcmUuCi0gICAgIH0KLSB9Ci0gfQotIFxlbmR2ZXJiYXRpbQotIFx0aHJvdyBz
dGQ6OmV4Y2VwdGlvbiBvbiBwYXJzZSBlcnJvci4KLSBcc2VlIEpzb246Om9wZXJhdG9yPDwoKQot
Ki8KLUpTT05fQVBJIHN0ZDo6aXN0cmVhbSYgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0mLCBWYWx1
ZSYpOwotCi19IC8vIG5hbWVzcGFjZSBKc29uCi0KLSNpZiBkZWZpbmVkKEpTT05DUFBfRElTQUJM
RV9ETExfSU5URVJGQUNFX1dBUk5JTkcpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmIC8v
IGlmIGRlZmluZWQoSlNPTkNQUF9ESVNBQkxFX0RMTF9JTlRFUkZBQ0VfV0FSTklORykKLQotI2Vu
ZGlmIC8vIENQUFRMX0pTT05fUkVBREVSX0hfSU5DTFVERUQKLQotLy8gLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8gRW5kIG9mIGNvbnRlbnQgb2YgZmlsZTogaW5jbHVkZS9qc29uL3JlYWRlci5oCi0vLyAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLQotCi0KLQotCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBCZWdpbm5pbmcgb2Yg
Y29udGVudCBvZiBmaWxlOiBpbmNsdWRlL2pzb24vd3JpdGVyLmgKLS8vIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LQotLy8gQ29weXJpZ2h0IDIwMDctMjAxMCBCYXB0aXN0ZSBMZXBpbGxldXIKLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIE1JVCBsaWNlbnNlLCBvciBwdWJsaWMgZG9tYWluIGlmIGRlc2lyZWQgYW5kCi0v
LyByZWNvZ25pemVkIGluIHlvdXIganVyaXNkaWN0aW9uLgotLy8gU2VlIGZpbGUgTElDRU5TRSBm
b3IgZGV0YWlsIG9yIGNvcHkgYXQgaHR0cDovL2pzb25jcHAuc291cmNlZm9yZ2UubmV0L0xJQ0VO
U0UKLQotI2lmbmRlZiBKU09OX1dSSVRFUl9IX0lOQ0xVREVECi0jZGVmaW5lIEpTT05fV1JJVEVS
X0hfSU5DTFVERUQKLQotI2lmICFkZWZpbmVkKEpTT05fSVNfQU1BTEdBTUFUSU9OKQotI2luY2x1
ZGUgInZhbHVlLmgiCi0jZW5kaWYgLy8gaWYgIWRlZmluZWQoSlNPTl9JU19BTUFMR0FNQVRJT04p
Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxvc3RyZWFt
PgotCi0vLyBEaXNhYmxlIHdhcm5pbmcgQzQyNTE6IDxkYXRhIG1lbWJlcj46IDx0eXBlPiBuZWVk
cyB0byBoYXZlIGRsbC1pbnRlcmZhY2UgdG8KLS8vIGJlIHVzZWQgYnkuLi4KLSNpZiBkZWZpbmVk
KEpTT05DUFBfRElTQUJMRV9ETExfSU5URVJGQUNFX1dBUk5JTkcpCi0jcHJhZ21hIHdhcm5pbmco
cHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDI1MSkKLSNlbmRpZiAvLyBpZiBkZWZp
bmVkKEpTT05DUFBfRElTQUJMRV9ETExfSU5URVJGQUNFX1dBUk5JTkcpCi0KLW5hbWVzcGFjZSBK
c29uIHsKLQotY2xhc3MgVmFsdWU7Ci0KLS8qKgotCi1Vc2FnZToKLVxjb2RlCi0gIHVzaW5nIG5h
bWVzcGFjZSBKc29uOwotICB2b2lkIHdyaXRlVG9TdGRvdXQoU3RyZWFtV3JpdGVyOjpGYWN0b3J5
IGNvbnN0JiBmYWN0b3J5LCBWYWx1ZSBjb25zdCYgdmFsdWUpIHsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8U3RyZWFtV3JpdGVyPiBjb25zdCB3cml0ZXIoCi0gICAgICBmYWN0b3J5Lm5ld1N0cmVhbVdy
aXRlcigpKTsKLSAgICB3cml0ZXItPndyaXRlKHZhbHVlLCAmc3RkOjpjb3V0KTsKLSAgICBzdGQ6
OmNvdXQgPDwgc3RkOjplbmRsOyAgLy8gYWRkIGxmIGFuZCBmbHVzaAotICB9Ci1cZW5kY29kZQot
Ki8KLWNsYXNzIEpTT05fQVBJIFN0cmVhbVdyaXRlciB7Ci1wcm90ZWN0ZWQ6Ci0gIHN0ZDo6b3N0
cmVhbSogc291dF87ICAvLyBub3Qgb3duZWQ7IHdpbGwgbm90IGRlbGV0ZQotcHVibGljOgotICBT
dHJlYW1Xcml0ZXIoKTsKLSAgdmlydHVhbCB+U3RyZWFtV3JpdGVyKCk7Ci0gIC8qKiBXcml0ZSBW
YWx1ZSBpbnRvIGRvY3VtZW50IGFzIGNvbmZpZ3VyZWQgaW4gc3ViLWNsYXNzLgotICAgICAgRG8g
bm90IHRha2Ugb3duZXJzaGlwIG9mIHNvdXQsIGJ1dCBtYWludGFpbiBhIHJlZmVyZW5jZSBkdXJp
bmcgZnVuY3Rpb24uCi0gICAgICBccHJlIHNvdXQgIT0gTlVMTAotICAgICAgXHJldHVybiB6ZXJv
IG9uIHN1Y2Nlc3MgKEZvciBub3csIHdlIGFsd2F5cyByZXR1cm4gemVybywgc28gY2hlY2sgdGhl
IHN0cmVhbSBpbnN0ZWFkLikKLSAgICAgIFx0aHJvdyBzdGQ6OmV4Y2VwdGlvbiBwb3NzaWJseSwg
ZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24KLSAgICovCi0gIHZpcnR1YWwgaW50IHdyaXRlKFZh
bHVlIGNvbnN0JiByb290LCBzdGQ6Om9zdHJlYW0qIHNvdXQpID0gMDsKLQotICAvKiogXGJyaWVm
IEEgc2ltcGxlIGFic3RyYWN0IGZhY3RvcnkuCi0gICAqLwotICBjbGFzcyBKU09OX0FQSSBGYWN0
b3J5IHsKLSAgcHVibGljOgotICAgIHZpcnR1YWwgfkZhY3RvcnkoKTsKLSAgICAvKiogXGJyaWVm
IEFsbG9jYXRlIGEgQ2hhclJlYWRlciB2aWEgb3BlcmF0b3IgbmV3KCkuCi0gICAgICogXHRocm93
IHN0ZDo6ZXhjZXB0aW9uIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIChlLmcuIGludmFsaWQgc2V0
dGluZ3MpCi0gICAgICovCi0gICAgdmlydHVhbCBTdHJlYW1Xcml0ZXIqIG5ld1N0cmVhbVdyaXRl
cigpIGNvbnN0ID0gMDsKLSAgfTsgIC8vIEZhY3RvcnkKLX07ICAvLyBTdHJlYW1Xcml0ZXIKLQot
LyoqIFxicmllZiBXcml0ZSBpbnRvIHN0cmluZ3N0cmVhbSwgdGhlbiByZXR1cm4gc3RyaW5nLCBm
b3IgY29udmVuaWVuY2UuCi0gKiBBIFN0cmVhbVdyaXRlciB3aWxsIGJlIGNyZWF0ZWQgZnJvbSB0
aGUgZmFjdG9yeSwgdXNlZCwgYW5kIHRoZW4gZGVsZXRlZC4KLSAqLwotc3RkOjpzdHJpbmcgSlNP
Tl9BUEkgd3JpdGVTdHJpbmcoU3RyZWFtV3JpdGVyOjpGYWN0b3J5IGNvbnN0JiBmYWN0b3J5LCBW
YWx1ZSBjb25zdCYgcm9vdCk7Ci0KLQotLyoqIFxicmllZiBCdWlsZCBhIFN0cmVhbVdyaXRlciBp
bXBsZW1lbnRhdGlvbi4KLQotVXNhZ2U6Ci1cY29kZQotICB1c2luZyBuYW1lc3BhY2UgSnNvbjsK
LSAgVmFsdWUgdmFsdWUgPSAuLi47Ci0gIFN0cmVhbVdyaXRlckJ1aWxkZXIgYnVpbGRlcjsKLSAg
YnVpbGRlclsiY29tbWVudFN0eWxlIl0gPSAiTm9uZSI7Ci0gIGJ1aWxkZXJbImluZGVudGF0aW9u
Il0gPSAiICAgIjsgIC8vIG9yIHdoYXRldmVyIHlvdSBsaWtlCi0gIHN0ZDo6dW5pcXVlX3B0cjxK
c29uOjpTdHJlYW1Xcml0ZXI+IHdyaXRlcigKLSAgICAgIGJ1aWxkZXIubmV3U3RyZWFtV3JpdGVy
KCkpOwotICB3cml0ZXItPndyaXRlKHZhbHVlLCAmc3RkOjpjb3V0KTsKLSAgc3RkOjpjb3V0IDw8
IHN0ZDo6ZW5kbDsgIC8vIGFkZCBsZiBhbmQgZmx1c2gKLVxlbmRjb2RlCi0qLwotY2xhc3MgSlNP
Tl9BUEkgU3RyZWFtV3JpdGVyQnVpbGRlciA6IHB1YmxpYyBTdHJlYW1Xcml0ZXI6OkZhY3Rvcnkg
ewotcHVibGljOgotICAvLyBOb3RlOiBXZSB1c2UgYSBKc29uOjpWYWx1ZSBzbyB0aGF0IHdlIGNh
biBhZGQgZGF0YS1tZW1iZXJzIHRvIHRoaXMgY2xhc3MKLSAgLy8gd2l0aG91dCBhIG1ham9yIHZl
cnNpb24gYnVtcC4KLSAgLyoqIENvbmZpZ3VyYXRpb24gb2YgdGhpcyBidWlsZGVyLgotICAgIEF2
YWlsYWJsZSBzZXR0aW5ncyAoY2FzZS1zZW5zaXRpdmUpOgotICAgIC0gImNvbW1lbnRTdHlsZSI6
ICJOb25lIiBvciAiQWxsIgotICAgIC0gImluZGVudGF0aW9uIjogICI8YW55dGhpbmc+IgotICAg
IC0gImVuYWJsZVlBTUxDb21wYXRpYmlsaXR5IjogZmFsc2Ugb3IgdHJ1ZQotICAgICAgLSBzbGln
aHRseSBjaGFuZ2UgdGhlIHdoaXRlc3BhY2UgYXJvdW5kIGNvbG9ucwotICAgIC0gImRyb3BOdWxs
UGxhY2Vob2xkZXJzIjogZmFsc2Ugb3IgdHJ1ZQotICAgICAgLSBEcm9wIHRoZSAibnVsbCIgc3Ry
aW5nIGZyb20gdGhlIHdyaXRlcidzIG91dHB1dCBmb3IgbnVsbFZhbHVlcy4KLSAgICAgICAgU3Ry
aWN0bHkgc3BlYWtpbmcsIHRoaXMgaXMgbm90IHZhbGlkIEpTT04uIEJ1dCB3aGVuIHRoZSBvdXRw
dXQgaXMgYmVpbmcKLSAgICAgICAgZmVkIHRvIGEgYnJvd3NlcidzIEphdmFzY3JpcHQsIGl0IG1h
a2VzIGZvciBzbWFsbGVyIG91dHB1dCBhbmQgdGhlCi0gICAgICAgIGJyb3dzZXIgY2FuIGhhbmRs
ZSB0aGUgb3V0cHV0IGp1c3QgZmluZS4KLSAgICAtICJ1c2VTcGVjaWFsRmxvYXRzIjogZmFsc2Ug
b3IgdHJ1ZQotICAgICAgLSBJZiB0cnVlLCBvdXRwdXRzIG5vbi1maW5pdGUgZmxvYXRpbmcgcG9p
bnQgdmFsdWVzIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICAgICAgICBOYU4gdmFsdWVzIGFzICJO
YU4iLCBwb3NpdGl2ZSBpbmZpbml0eSBhcyAiSW5maW5pdHkiLCBhbmQgbmVnYXRpdmUgaW5maW5p
dHkKLSAgICAgICAgYXMgIi1JbmZpbml0eSIuCi0KLSAgICBZb3UgY2FuIGV4YW1pbmUgJ3NldHRp
bmdzX2AgeW91cnNlbGYKLSAgICB0byBzZWUgdGhlIGRlZmF1bHRzLiBZb3UgY2FuIGFsc28gd3Jp
dGUgYW5kIHJlYWQgdGhlbSBqdXN0IGxpa2UgYW55Ci0gICAgSlNPTiBWYWx1ZS4KLSAgICBcc2Eg
c2V0RGVmYXVsdHMoKQotICAgICovCi0gIEpzb246OlZhbHVlIHNldHRpbmdzXzsKLQotICBTdHJl
YW1Xcml0ZXJCdWlsZGVyKCk7Ci0gIH5TdHJlYW1Xcml0ZXJCdWlsZGVyKCkgb3ZlcnJpZGU7Ci0K
LSAgLyoqCi0gICAqIFx0aHJvdyBzdGQ6OmV4Y2VwdGlvbiBpZiBzb21ldGhpbmcgZ29lcyB3cm9u
ZyAoZS5nLiBpbnZhbGlkIHNldHRpbmdzKQotICAgKi8KLSAgU3RyZWFtV3JpdGVyKiBuZXdTdHJl
YW1Xcml0ZXIoKSBjb25zdCBvdmVycmlkZTsKLQotICAvKiogXHJldHVybiB0cnVlIGlmICdzZXR0
aW5ncycgYXJlIGxlZ2FsIGFuZCBjb25zaXN0ZW50OwotICAgKiAgIG90aGVyd2lzZSwgaW5kaWNh
dGUgYmFkIHNldHRpbmdzIHZpYSAnaW52YWxpZCcuCi0gICAqLwotICBib29sIHZhbGlkYXRlKEpz
b246OlZhbHVlKiBpbnZhbGlkKSBjb25zdDsKLSAgLyoqIEEgc2ltcGxlIHdheSB0byB1cGRhdGUg
YSBzcGVjaWZpYyBzZXR0aW5nLgotICAgKi8KLSAgVmFsdWUmIG9wZXJhdG9yW10oc3RkOjpzdHJp
bmcga2V5KTsKLQotICAvKiogQ2FsbGVkIGJ5IGN0b3IsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHRv
IHJlc2V0IHNldHRpbmdzXy4KLSAgICogXHByZSAnc2V0dGluZ3MnICE9IE5VTEwgKGJ1dCBKc29u
OjpudWxsIGlzIGZpbmUpCi0gICAqIFxyZW1hcmsgRGVmYXVsdHM6Ci0gICAqIFxzbmlwcGV0IHNy
Yy9saWJfanNvbi9qc29uX3dyaXRlci5jcHAgU3RyZWFtV3JpdGVyQnVpbGRlckRlZmF1bHRzCi0g
ICAqLwotICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0cyhKc29uOjpWYWx1ZSogc2V0dGluZ3MpOwot
fTsKLQotLyoqIFxicmllZiBBYnN0cmFjdCBjbGFzcyBmb3Igd3JpdGVycy4KLSAqIFxkZXByZWNh
dGVkIFVzZSBTdHJlYW1Xcml0ZXIuIChBbmQgcmVhbGx5LCB0aGlzIGlzIGFuIGltcGxlbWVudGF0
aW9uIGRldGFpbC4pCi0gKi8KLWNsYXNzIEpTT05fQVBJIFdyaXRlciB7Ci1wdWJsaWM6Ci0gIHZp
cnR1YWwgfldyaXRlcigpOwotCi0gIHZpcnR1YWwgc3RkOjpzdHJpbmcgd3JpdGUoY29uc3QgVmFs
dWUmIHJvb3QpID0gMDsKLX07Ci0KLS8qKiBcYnJpZWYgT3V0cHV0cyBhIFZhbHVlIGluIDxhIEhS
RUY9Imh0dHA6Ly93d3cuanNvbi5vcmciPkpTT048L2E+IGZvcm1hdAotICp3aXRob3V0IGZvcm1h
dHRpbmcgKG5vdCBodW1hbiBmcmllbmRseSkuCi0gKgotICogVGhlIEpTT04gZG9jdW1lbnQgaXMg
d3JpdHRlbiBpbiBhIHNpbmdsZSBsaW5lLiBJdCBpcyBub3QgaW50ZW5kZWQgZm9yICdodW1hbicK
LSAqY29uc3VtcHRpb24sCi0gKiBidXQgbWF5IGJlIHVzZWZ1bGwgdG8gc3VwcG9ydCBmZWF0dXJl
IHN1Y2ggYXMgUlBDIHdoZXJlIGJhbmR3aXRoIGlzIGxpbWl0ZWQuCi0gKiBcc2EgUmVhZGVyLCBW
YWx1ZQotICogXGRlcHJlY2F0ZWQgVXNlIFN0cmVhbVdyaXRlckJ1aWxkZXIuCi0gKi8KLWNsYXNz
IEpTT05fQVBJIEZhc3RXcml0ZXIgOiBwdWJsaWMgV3JpdGVyIHsKLQotcHVibGljOgotICBGYXN0
V3JpdGVyKCk7Ci0gIH5GYXN0V3JpdGVyKCkgb3ZlcnJpZGUge30KLQotICB2b2lkIGVuYWJsZVlB
TUxDb21wYXRpYmlsaXR5KCk7Ci0KLSAgLyoqIFxicmllZiBEcm9wIHRoZSAibnVsbCIgc3RyaW5n
IGZyb20gdGhlIHdyaXRlcidzIG91dHB1dCBmb3IgbnVsbFZhbHVlcy4KLSAgICogU3RyaWN0bHkg
c3BlYWtpbmcsIHRoaXMgaXMgbm90IHZhbGlkIEpTT04uIEJ1dCB3aGVuIHRoZSBvdXRwdXQgaXMg
YmVpbmcKLSAgICogZmVkIHRvIGEgYnJvd3NlcidzIEphdmFzY3JpcHQsIGl0IG1ha2VzIGZvciBz
bWFsbGVyIG91dHB1dCBhbmQgdGhlCi0gICAqIGJyb3dzZXIgY2FuIGhhbmRsZSB0aGUgb3V0cHV0
IGp1c3QgZmluZS4KLSAgICovCi0gIHZvaWQgZHJvcE51bGxQbGFjZWhvbGRlcnMoKTsKLQotICB2
b2lkIG9taXRFbmRpbmdMaW5lRmVlZCgpOwotCi1wdWJsaWM6IC8vIG92ZXJyaWRkZW4gZnJvbSBX
cml0ZXIKLSAgc3RkOjpzdHJpbmcgd3JpdGUoY29uc3QgVmFsdWUmIHJvb3QpIG92ZXJyaWRlOwot
Ci1wcml2YXRlOgotICB2b2lkIHdyaXRlVmFsdWUoY29uc3QgVmFsdWUmIHZhbHVlKTsKLQotICBz
dGQ6OnN0cmluZyBkb2N1bWVudF87Ci0gIGJvb2wgeWFtbENvbXBhdGlibGl0eUVuYWJsZWRfOwot
ICBib29sIGRyb3BOdWxsUGxhY2Vob2xkZXJzXzsKLSAgYm9vbCBvbWl0RW5kaW5nTGluZUZlZWRf
OwotfTsKLQotLyoqIFxicmllZiBXcml0ZXMgYSBWYWx1ZSBpbiA8YSBIUkVGPSJodHRwOi8vd3d3
Lmpzb24ub3JnIj5KU09OPC9hPiBmb3JtYXQgaW4gYQotICpodW1hbiBmcmllbmRseSB3YXkuCi0g
KgotICogVGhlIHJ1bGVzIGZvciBsaW5lIGJyZWFrIGFuZCBpbmRlbnQgYXJlIGFzIGZvbGxvdzoK
LSAqIC0gT2JqZWN0IHZhbHVlOgotICogICAgIC0gaWYgZW1wdHkgdGhlbiBwcmludCB7fSB3aXRo
b3V0IGluZGVudCBhbmQgbGluZSBicmVhawotICogICAgIC0gaWYgbm90IGVtcHR5IHRoZSBwcmlu
dCAneycsIGxpbmUgYnJlYWsgJiBpbmRlbnQsIHByaW50IG9uZSB2YWx1ZSBwZXIKLSAqbGluZQot
ICogICAgICAgYW5kIHRoZW4gdW5pbmRlbnQgYW5kIGxpbmUgYnJlYWsgYW5kIHByaW50ICd9Jy4K
LSAqIC0gQXJyYXkgdmFsdWU6Ci0gKiAgICAgLSBpZiBlbXB0eSB0aGVuIHByaW50IFtdIHdpdGhv
dXQgaW5kZW50IGFuZCBsaW5lIGJyZWFrCi0gKiAgICAgLSBpZiB0aGUgYXJyYXkgY29udGFpbnMg
bm8gb2JqZWN0IHZhbHVlLCBlbXB0eSBhcnJheSBvciBzb21lIG90aGVyIHZhbHVlCi0gKnR5cGVz
LAotICogICAgICAgYW5kIGFsbCB0aGUgdmFsdWVzIGZpdCBvbiBvbmUgbGluZXMsIHRoZW4gcHJp
bnQgdGhlIGFycmF5IG9uIGEgc2luZ2xlCi0gKmxpbmUuCi0gKiAgICAgLSBvdGhlcndpc2UsIGl0
IHRoZSB2YWx1ZXMgZG8gbm90IGZpdCBvbiBvbmUgbGluZSwgb3IgdGhlIGFycmF5IGNvbnRhaW5z
Ci0gKiAgICAgICBvYmplY3Qgb3Igbm9uIGVtcHR5IGFycmF5LCB0aGVuIHByaW50IG9uZSB2YWx1
ZSBwZXIgbGluZS4KLSAqCi0gKiBJZiB0aGUgVmFsdWUgaGF2ZSBjb21tZW50cyB0aGVuIHRoZXkg
YXJlIG91dHB1dGVkIGFjY29yZGluZyB0byB0aGVpcgotICojQ29tbWVudFBsYWNlbWVudC4KLSAq
Ci0gKiBcc2EgUmVhZGVyLCBWYWx1ZSwgVmFsdWU6OnNldENvbW1lbnQoKQotICogXGRlcHJlY2F0
ZWQgVXNlIFN0cmVhbVdyaXRlckJ1aWxkZXIuCi0gKi8KLWNsYXNzIEpTT05fQVBJIFN0eWxlZFdy
aXRlciA6IHB1YmxpYyBXcml0ZXIgewotcHVibGljOgotICBTdHlsZWRXcml0ZXIoKTsKLSAgflN0
eWxlZFdyaXRlcigpIG92ZXJyaWRlIHt9Ci0KLXB1YmxpYzogLy8gb3ZlcnJpZGRlbiBmcm9tIFdy
aXRlcgotICAvKiogXGJyaWVmIFNlcmlhbGl6ZSBhIFZhbHVlIGluIDxhIEhSRUY9Imh0dHA6Ly93
d3cuanNvbi5vcmciPkpTT048L2E+IGZvcm1hdC4KLSAgICogXHBhcmFtIHJvb3QgVmFsdWUgdG8g
c2VyaWFsaXplLgotICAgKiBccmV0dXJuIFN0cmluZyBjb250YWluaW5nIHRoZSBKU09OIGRvY3Vt
ZW50IHRoYXQgcmVwcmVzZW50cyB0aGUgcm9vdCB2YWx1ZS4KLSAgICovCi0gIHN0ZDo6c3RyaW5n
IHdyaXRlKGNvbnN0IFZhbHVlJiByb290KSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgdm9pZCB3
cml0ZVZhbHVlKGNvbnN0IFZhbHVlJiB2YWx1ZSk7Ci0gIHZvaWQgd3JpdGVBcnJheVZhbHVlKGNv
bnN0IFZhbHVlJiB2YWx1ZSk7Ci0gIGJvb2wgaXNNdWx0aW5lQXJyYXkoY29uc3QgVmFsdWUmIHZh
bHVlKTsKLSAgdm9pZCBwdXNoVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9p
ZCB3cml0ZUluZGVudCgpOwotICB2b2lkIHdyaXRlV2l0aEluZGVudChjb25zdCBzdGQ6OnN0cmlu
ZyYgdmFsdWUpOwotICB2b2lkIGluZGVudCgpOwotICB2b2lkIHVuaW5kZW50KCk7Ci0gIHZvaWQg
d3JpdGVDb21tZW50QmVmb3JlVmFsdWUoY29uc3QgVmFsdWUmIHJvb3QpOwotICB2b2lkIHdyaXRl
Q29tbWVudEFmdGVyVmFsdWVPblNhbWVMaW5lKGNvbnN0IFZhbHVlJiByb290KTsKLSAgYm9vbCBo
YXNDb21tZW50Rm9yVmFsdWUoY29uc3QgVmFsdWUmIHZhbHVlKTsKLSAgc3RhdGljIHN0ZDo6c3Ry
aW5nIG5vcm1hbGl6ZUVPTChjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7Ci0KLSAgdHlwZWRlZiBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ2hpbGRWYWx1ZXM7Ci0KLSAgQ2hpbGRWYWx1ZXMgY2hp
bGRWYWx1ZXNfOwotICBzdGQ6OnN0cmluZyBkb2N1bWVudF87Ci0gIHN0ZDo6c3RyaW5nIGluZGVu
dFN0cmluZ187Ci0gIGludCByaWdodE1hcmdpbl87Ci0gIGludCBpbmRlbnRTaXplXzsKLSAgYm9v
bCBhZGRDaGlsZFZhbHVlc187Ci19OwotCi0vKiogXGJyaWVmIFdyaXRlcyBhIFZhbHVlIGluIDxh
IEhSRUY9Imh0dHA6Ly93d3cuanNvbi5vcmciPkpTT048L2E+IGZvcm1hdCBpbiBhCi0gaHVtYW4g
ZnJpZW5kbHkgd2F5LAotICAgICB0byBhIHN0cmVhbSByYXRoZXIgdGhhbiB0byBhIHN0cmluZy4K
LSAqCi0gKiBUaGUgcnVsZXMgZm9yIGxpbmUgYnJlYWsgYW5kIGluZGVudCBhcmUgYXMgZm9sbG93
OgotICogLSBPYmplY3QgdmFsdWU6Ci0gKiAgICAgLSBpZiBlbXB0eSB0aGVuIHByaW50IHt9IHdp
dGhvdXQgaW5kZW50IGFuZCBsaW5lIGJyZWFrCi0gKiAgICAgLSBpZiBub3QgZW1wdHkgdGhlIHBy
aW50ICd7JywgbGluZSBicmVhayAmIGluZGVudCwgcHJpbnQgb25lIHZhbHVlIHBlcgotIGxpbmUK
LSAqICAgICAgIGFuZCB0aGVuIHVuaW5kZW50IGFuZCBsaW5lIGJyZWFrIGFuZCBwcmludCAnfScu
Ci0gKiAtIEFycmF5IHZhbHVlOgotICogICAgIC0gaWYgZW1wdHkgdGhlbiBwcmludCBbXSB3aXRo
b3V0IGluZGVudCBhbmQgbGluZSBicmVhawotICogICAgIC0gaWYgdGhlIGFycmF5IGNvbnRhaW5z
IG5vIG9iamVjdCB2YWx1ZSwgZW1wdHkgYXJyYXkgb3Igc29tZSBvdGhlciB2YWx1ZQotIHR5cGVz
LAotICogICAgICAgYW5kIGFsbCB0aGUgdmFsdWVzIGZpdCBvbiBvbmUgbGluZXMsIHRoZW4gcHJp
bnQgdGhlIGFycmF5IG9uIGEgc2luZ2xlCi0gbGluZS4KLSAqICAgICAtIG90aGVyd2lzZSwgaXQg
dGhlIHZhbHVlcyBkbyBub3QgZml0IG9uIG9uZSBsaW5lLCBvciB0aGUgYXJyYXkgY29udGFpbnMK
LSAqICAgICAgIG9iamVjdCBvciBub24gZW1wdHkgYXJyYXksIHRoZW4gcHJpbnQgb25lIHZhbHVl
IHBlciBsaW5lLgotICoKLSAqIElmIHRoZSBWYWx1ZSBoYXZlIGNvbW1lbnRzIHRoZW4gdGhleSBh
cmUgb3V0cHV0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyCi0gI0NvbW1lbnRQbGFjZW1lbnQuCi0gKgot
ICogXHBhcmFtIGluZGVudGF0aW9uIEVhY2ggbGV2ZWwgd2lsbCBiZSBpbmRlbnRlZCBieSB0aGlz
IGFtb3VudCBleHRyYS4KLSAqIFxzYSBSZWFkZXIsIFZhbHVlLCBWYWx1ZTo6c2V0Q29tbWVudCgp
Ci0gKiBcZGVwcmVjYXRlZCBVc2UgU3RyZWFtV3JpdGVyQnVpbGRlci4KLSAqLwotY2xhc3MgSlNP
Tl9BUEkgU3R5bGVkU3RyZWFtV3JpdGVyIHsKLXB1YmxpYzoKLSAgU3R5bGVkU3RyZWFtV3JpdGVy
KHN0ZDo6c3RyaW5nIGluZGVudGF0aW9uID0gIlx0Iik7Ci0gIH5TdHlsZWRTdHJlYW1Xcml0ZXIo
KSB7fQotCi1wdWJsaWM6Ci0gIC8qKiBcYnJpZWYgU2VyaWFsaXplIGEgVmFsdWUgaW4gPGEgSFJF
Rj0iaHR0cDovL3d3dy5qc29uLm9yZyI+SlNPTjwvYT4gZm9ybWF0LgotICAgKiBccGFyYW0gb3V0
IFN0cmVhbSB0byB3cml0ZSB0by4gKENhbiBiZSBvc3RyaW5nc3RyZWFtLCBlLmcuKQotICAgKiBc
cGFyYW0gcm9vdCBWYWx1ZSB0byBzZXJpYWxpemUuCi0gICAqIFxub3RlIFRoZXJlIGlzIG5vIHBv
aW50IGluIGRlcml2aW5nIGZyb20gV3JpdGVyLCBzaW5jZSB3cml0ZSgpIHNob3VsZCBub3QKLSAg
ICogcmV0dXJuIGEgdmFsdWUuCi0gICAqLwotICB2b2lkIHdyaXRlKHN0ZDo6b3N0cmVhbSYgb3V0
LCBjb25zdCBWYWx1ZSYgcm9vdCk7Ci0KLXByaXZhdGU6Ci0gIHZvaWQgd3JpdGVWYWx1ZShjb25z
dCBWYWx1ZSYgdmFsdWUpOwotICB2b2lkIHdyaXRlQXJyYXlWYWx1ZShjb25zdCBWYWx1ZSYgdmFs
dWUpOwotICBib29sIGlzTXVsdGluZUFycmF5KGNvbnN0IFZhbHVlJiB2YWx1ZSk7Ci0gIHZvaWQg
cHVzaFZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgd3JpdGVJbmRlbnQo
KTsKLSAgdm9pZCB3cml0ZVdpdGhJbmRlbnQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAg
dm9pZCBpbmRlbnQoKTsKLSAgdm9pZCB1bmluZGVudCgpOwotICB2b2lkIHdyaXRlQ29tbWVudEJl
Zm9yZVZhbHVlKGNvbnN0IFZhbHVlJiByb290KTsKLSAgdm9pZCB3cml0ZUNvbW1lbnRBZnRlclZh
bHVlT25TYW1lTGluZShjb25zdCBWYWx1ZSYgcm9vdCk7Ci0gIGJvb2wgaGFzQ29tbWVudEZvclZh
bHVlKGNvbnN0IFZhbHVlJiB2YWx1ZSk7Ci0gIHN0YXRpYyBzdGQ6OnN0cmluZyBub3JtYWxpemVF
T0woY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpOwotCi0gIHR5cGVkZWYgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+IENoaWxkVmFsdWVzOwotCi0gIENoaWxkVmFsdWVzIGNoaWxkVmFsdWVzXzsKLSAg
c3RkOjpvc3RyZWFtKiBkb2N1bWVudF87Ci0gIHN0ZDo6c3RyaW5nIGluZGVudFN0cmluZ187Ci0g
IGludCByaWdodE1hcmdpbl87Ci0gIHN0ZDo6c3RyaW5nIGluZGVudGF0aW9uXzsKLSAgYm9vbCBh
ZGRDaGlsZFZhbHVlc18gOiAxOwotICBib29sIGluZGVudGVkXyA6IDE7Ci19OwotCi0jaWYgZGVm
aW5lZChKU09OX0hBU19JTlQ2NCkKLXN0ZDo6c3RyaW5nIEpTT05fQVBJIHZhbHVlVG9TdHJpbmco
SW50IHZhbHVlKTsKLXN0ZDo6c3RyaW5nIEpTT05fQVBJIHZhbHVlVG9TdHJpbmcoVUludCB2YWx1
ZSk7Ci0jZW5kaWYgLy8gaWYgZGVmaW5lZChKU09OX0hBU19JTlQ2NCkKLXN0ZDo6c3RyaW5nIEpT
T05fQVBJIHZhbHVlVG9TdHJpbmcoTGFyZ2VzdEludCB2YWx1ZSk7Ci1zdGQ6OnN0cmluZyBKU09O
X0FQSSB2YWx1ZVRvU3RyaW5nKExhcmdlc3RVSW50IHZhbHVlKTsKLXN0ZDo6c3RyaW5nIEpTT05f
QVBJIHZhbHVlVG9TdHJpbmcoZG91YmxlIHZhbHVlKTsKLXN0ZDo6c3RyaW5nIEpTT05fQVBJIHZh
bHVlVG9TdHJpbmcoYm9vbCB2YWx1ZSk7Ci1zdGQ6OnN0cmluZyBKU09OX0FQSSB2YWx1ZVRvUXVv
dGVkU3RyaW5nKGNvbnN0IGNoYXIqIHZhbHVlKTsKLQotLy8vIFxicmllZiBPdXRwdXQgdXNpbmcg
dGhlIFN0eWxlZFN0cmVhbVdyaXRlci4KLS8vLyBcc2VlIEpzb246Om9wZXJhdG9yPj4oKQotSlNP
Tl9BUEkgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYsIGNvbnN0IFZhbHVl
JiByb290KTsKLQotfSAvLyBuYW1lc3BhY2UgSnNvbgotCi0jaWYgZGVmaW5lZChKU09OQ1BQX0RJ
U0FCTEVfRExMX0lOVEVSRkFDRV9XQVJOSU5HKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRp
ZiAvLyBpZiBkZWZpbmVkKEpTT05DUFBfRElTQUJMRV9ETExfSU5URVJGQUNFX1dBUk5JTkcpCi0K
LSNlbmRpZiAvLyBKU09OX1dSSVRFUl9IX0lOQ0xVREVECi0KLS8vIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
IEVuZCBvZiBjb250ZW50IG9mIGZpbGU6IGluY2x1ZGUvanNvbi93cml0ZXIuaAotLy8gLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotCi0KLQotCi0KLQotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gQmVnaW5uaW5nIG9mIGNv
bnRlbnQgb2YgZmlsZTogaW5jbHVkZS9qc29uL2Fzc2VydGlvbnMuaAotLy8gLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi0vLyBDb3B5cmlnaHQgMjAwNy0yMDEwIEJhcHRpc3RlIExlcGlsbGV1cgotLy8gRGlzdHJp
YnV0ZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIG9yIHB1YmxpYyBkb21haW4gaWYgZGVzaXJlZCBhbmQK
LS8vIHJlY29nbml6ZWQgaW4geW91ciBqdXJpc2RpY3Rpb24uCi0vLyBTZWUgZmlsZSBMSUNFTlNF
IGZvciBkZXRhaWwgb3IgY29weSBhdCBodHRwOi8vanNvbmNwcC5zb3VyY2Vmb3JnZS5uZXQvTElD
RU5TRQotCi0jaWZuZGVmIENQUFRMX0pTT05fQVNTRVJUSU9OU19IX0lOQ0xVREVECi0jZGVmaW5l
IENQUFRMX0pTT05fQVNTRVJUSU9OU19IX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4K
LSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaWYgIWRlZmluZWQoSlNPTl9JU19BTUFMR0FNQVRJT04p
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYgLy8gaWYgIWRlZmluZWQoSlNPTl9JU19BTUFM
R0FNQVRJT04pCi0KLS8qKiBJdCBzaG91bGQgbm90IGJlIHBvc3NpYmxlIGZvciBhIG1hbGljaW91
c2x5IGRlc2lnbmVkIGZpbGUgdG8KLSAqICBjYXVzZSBhbiBhYm9ydCgpIG9yIHNlZy1mYXVsdCwg
c28gdGhlc2UgbWFjcm9zIGFyZSB1c2VkIG9ubHkKLSAqICBmb3IgcHJlLWNvbmRpdGlvbiB2aW9s
YXRpb25zIGFuZCBpbnRlcm5hbCBsb2dpYyBlcnJvcnMuCi0gKi8KLSNpZiBKU09OX1VTRV9FWENF
UFRJT04KLQotLy8gQHRvZG8gPD0gYWRkIGRldGFpbCBhYm91dCBjb25kaXRpb24gaW4gZXhjZXB0
aW9uCi0jIGRlZmluZSBKU09OX0FTU0VSVChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB7aWYgKCEoY29uZGl0aW9uKSkge0pzb246
OnRocm93TG9naWNFcnJvciggImFzc2VydCBqc29uIGZhaWxlZCIgKTt9fQotCi0jIGRlZmluZSBK
U09OX0ZBSUxfTUVTU0FHRShtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGQ6Om9zdHJpbmdz
dHJlYW0gb3NzOyBvc3MgPDwgbWVzc2FnZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgSnNvbjo6dGhyb3dMb2dpY0Vycm9yKG9zcy5zdHIoKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFib3J0KCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgfQotCi0jZWxzZSAvLyBKU09OX1VTRV9FWENFUFRJT04KLQotIyBkZWZpbmUgSlNPTl9BU1NF
UlQoY29uZGl0aW9uKSBhc3NlcnQoY29uZGl0aW9uKQotCi0vLyBUaGUgY2FsbCB0byBhc3NlcnQo
KSB3aWxsIHNob3cgdGhlIGZhaWx1cmUgbWVzc2FnZSBpbiBkZWJ1ZyBidWlsZHMuIEluCi0vLyBy
ZWxlYXNlIGJ1aWxkcyB3ZSBhYm9ydCwgZm9yIGEgY29yZS1kdW1wIG9yIGRlYnVnZ2VyLgotIyBk
ZWZpbmUgSlNPTl9GQUlMX01FU1NBR0UobWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RkOjpv
c3RyaW5nc3RyZWFtIG9zczsgb3NzIDw8IG1lc3NhZ2U7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGFzc2VydChmYWxzZSAmJiBvc3Muc3RyKCkuY19zdHIoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYm9ydCgpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIH0KLQotCi0jZW5kaWYKLQotI2RlZmluZSBKU09OX0FTU0VSVF9NRVNTQUdFKGNv
bmRpdGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYg
KCEoY29uZGl0aW9uKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgSlNPTl9GQUlMX01FU1NBR0UobWVzc2FnZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNlbmRp
ZiAvLyBDUFBUTF9KU09OX0FTU0VSVElPTlNfSF9JTkNMVURFRAotCi0vLyAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLyBFbmQgb2YgY29udGVudCBvZiBmaWxlOiBpbmNsdWRlL2pzb24vYXNzZXJ0aW9ucy5oCi0v
LyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLQotCi0KLQotI2VuZGlmIC8vaWZuZGVmIEpTT05fQU1BTEdBVEVE
X0hfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY29uZm9ybWFuY2UvdGhpcmRfcGFydHkvanNvbmNwcC9q
c29uY3BwLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY29uZm9ybWFuY2UvdGhpcmRfcGFydHkvanNvbmNwcC9qc29uY3BwLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwMzk2MmFkZWFhMzhmYzJmZmEzMGE5Y2I5
ODc0ZGI0MWE4ZTI4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2NvbmZvcm1hbmNlL3RoaXJkX3BhcnR5L2pzb25jcHAvanNvbmNwcC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1MTkyICswLDAgQEAKLS8vLyBKc29uLWNwcCBhbWFsZ2F0ZWQgc291cmNlICho
dHRwOi8vanNvbmNwcC5zb3VyY2Vmb3JnZS5uZXQvKS4KLS8vLyBJdCBpcyBpbnRlbmRlZCB0byBi
ZSB1c2VkIHdpdGggI2luY2x1ZGUgImpzb24vanNvbi5oIgotCi0vLyAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
LyBCZWdpbm5pbmcgb2YgY29udGVudCBvZiBmaWxlOiBMSUNFTlNFCi0vLyAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0KLS8qCi1UaGUgSnNvbkNwcCBsaWJyYXJ5J3Mgc291cmNlIGNvZGUsIGluY2x1ZGluZyBhY2Nv
bXBhbnlpbmcgZG9jdW1lbnRhdGlvbiwgCi10ZXN0cyBhbmQgZGVtb25zdHJhdGlvbiBhcHBsaWNh
dGlvbnMsIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgZm9sbG93aW5nCi1jb25kaXRpb25zLi4uCi0K
LVRoZSBhdXRob3IgKEJhcHRpc3RlIExlcGlsbGV1cikgZXhwbGljaXRseSBkaXNjbGFpbXMgY29w
eXJpZ2h0IGluIGFsbCAKLWp1cmlzZGljdGlvbnMgd2hpY2ggcmVjb2duaXplIHN1Y2ggYSBkaXNj
bGFpbWVyLiBJbiBzdWNoIGp1cmlzZGljdGlvbnMsIAotdGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNl
ZCBpbnRvIHRoZSBQdWJsaWMgRG9tYWluLgotCi1JbiBqdXJpc2RpY3Rpb25zIHdoaWNoIGRvIG5v
dCByZWNvZ25pemUgUHVibGljIERvbWFpbiBwcm9wZXJ0eSAoZS5nLiBHZXJtYW55IGFzIG9mCi0y
MDEwKSwgdGhpcyBzb2Z0d2FyZSBpcyBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBieSBCYXB0aXN0
ZSBMZXBpbGxldXIsIGFuZCBpcwotcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQg
TGljZW5zZSAoc2VlIGJlbG93KS4KLQotSW4ganVyaXNkaWN0aW9ucyB3aGljaCByZWNvZ25pemUg
UHVibGljIERvbWFpbiBwcm9wZXJ0eSwgdGhlIHVzZXIgb2YgdGhpcyAKLXNvZnR3YXJlIG1heSBj
aG9vc2UgdG8gYWNjZXB0IGl0IGVpdGhlciBhcyAxKSBQdWJsaWMgRG9tYWluLCAyKSB1bmRlciB0
aGUgCi1jb25kaXRpb25zIG9mIHRoZSBNSVQgTGljZW5zZSAoc2VlIGJlbG93KSwgb3IgMykgdW5k
ZXIgdGhlIHRlcm1zIG9mIGR1YWwgCi1QdWJsaWMgRG9tYWluL01JVCBMaWNlbnNlIGNvbmRpdGlv
bnMgZGVzY3JpYmVkIGhlcmUsIGFzIHRoZXkgY2hvb3NlLgotCi1UaGUgTUlUIExpY2Vuc2UgaXMg
YWJvdXQgYXMgY2xvc2UgdG8gUHVibGljIERvbWFpbiBhcyBhIGxpY2Vuc2UgY2FuIGdldCwgYW5k
IGlzCi1kZXNjcmliZWQgaW4gY2xlYXIsIGNvbmNpc2UgdGVybXMgYXQ6Ci0KLSAgIGh0dHA6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UKLSAgIAotVGhlIGZ1bGwgdGV4dCBvZiB0
aGUgTUlUIExpY2Vuc2UgZm9sbG93czoKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Db3B5cmlnaHQgKGMp
IDIwMDctMjAxMCBCYXB0aXN0ZSBMZXBpbGxldXIKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh
bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KLW9idGFpbmluZyBhIGNvcHkgb2Yg
dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCi1maWxlcyAodGhlICJT
b2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0Ci1yZXN0cmljdGlvbiwg
aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwKLW1v
ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxs
IGNvcGllcwotb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0
aGUgU29mdHdhcmUgaXMKLWZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl
cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi1pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0
YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJ
REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi1FWFBSRVNTIE9SIElN
UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLU1F
UkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi1OT05J
TkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI
T0xERVJTCi1CRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQU4KLUFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us
IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCi1DT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF
IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi1TT0ZUV0FSRS4KLT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotKEVORCBMSUNFTlNFIFRFWFQpCi0KLVRoZSBNSVQgbGljZW5zZSBpcyBjb21wYXRp
YmxlIHdpdGggYm90aCB0aGUgR1BMIGFuZCBjb21tZXJjaWFsCi1zb2Z0d2FyZSwgYWZmb3JkaW5n
IG9uZSBhbGwgb2YgdGhlIHJpZ2h0cyBvZiBQdWJsaWMgRG9tYWluIHdpdGggdGhlCi1taW5vciBu
dWlzYW5jZSBvZiBiZWluZyByZXF1aXJlZCB0byBrZWVwIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlCi1hbmQgbGljZW5zZSB0ZXh0IGluIHRoZSBzb3VyY2UgY29kZS4gTm90ZSBhbHNvIHRoYXQg
YnkgYWNjZXB0aW5nIHRoZQotUHVibGljIERvbWFpbiAibGljZW5zZSIgeW91IGNhbiByZS1saWNl
bnNlIHlvdXIgY29weSB1c2luZyB3aGF0ZXZlcgotbGljZW5zZSB5b3UgbGlrZS4KLQotKi8KLQot
Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8gRW5kIG9mIGNvbnRlbnQgb2YgZmlsZTogTElDRU5TRQotLy8g
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0KLQotCi0KLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2pzb25jcHAv
anNvbi5oIgotCi0jaWZuZGVmIEpTT05fSVNfQU1BTEdBTUFUSU9OCi0jZXJyb3IgIkNvbXBpbGUg
d2l0aCAtSSBQQVRIX1RPX0pTT05fRElSRUNUT1JZIgotI2VuZGlmCi0KLQotLy8gLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotLy8gQmVnaW5uaW5nIG9mIGNvbnRlbnQgb2YgZmlsZTogc3JjL2xpYl9qc29uL2pzb25f
dG9vbC5oCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8vIENvcHlyaWdodCAyMDA3LTIwMTAgQmFwdGlz
dGUgTGVwaWxsZXVyCi0vLyBEaXN0cmlidXRlZCB1bmRlciBNSVQgbGljZW5zZSwgb3IgcHVibGlj
IGRvbWFpbiBpZiBkZXNpcmVkIGFuZAotLy8gcmVjb2duaXplZCBpbiB5b3VyIGp1cmlzZGljdGlv
bi4KLS8vIFNlZSBmaWxlIExJQ0VOU0UgZm9yIGRldGFpbCBvciBjb3B5IGF0IGh0dHA6Ly9qc29u
Y3BwLnNvdXJjZWZvcmdlLm5ldC9MSUNFTlNFCi0KLSNpZm5kZWYgTElCX0pTT05DUFBfSlNPTl9U
T09MX0hfSU5DTFVERUQKLSNkZWZpbmUgTElCX0pTT05DUFBfSlNPTl9UT09MX0hfSU5DTFVERUQK
LQotLyogVGhpcyBoZWFkZXIgcHJvdmlkZXMgY29tbW9uIHN0cmluZyBtYW5pcHVsYXRpb24gc3Vw
cG9ydCwgc3VjaCBhcyBVVEYtOCwKLSAqIHBvcnRhYmxlIGNvbnZlcnNpb24gZnJvbS90byBzdHJp
bmcuLi4KLSAqCi0gKiBJdCBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgdGhhdCBtdXN0IG5vdCBiZSBl
eHBvc2VkLgotICovCi0KLW5hbWVzcGFjZSBKc29uIHsKLQotLy8vIENvbnZlcnRzIGEgdW5pY29k
ZSBjb2RlLXBvaW50IHRvIFVURi04Lgotc3RhdGljIGlubGluZSBzdGQ6OnN0cmluZyBjb2RlUG9p
bnRUb1VURjgodW5zaWduZWQgaW50IGNwKSB7Ci0gIHN0ZDo6c3RyaW5nIHJlc3VsdDsKLQotICAv
LyBiYXNlZCBvbiBkZXNjcmlwdGlvbiBmcm9tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv
VVRGLTgKLQotICBpZiAoY3AgPD0gMHg3ZikgewotICAgIHJlc3VsdC5yZXNpemUoMSk7Ci0gICAg
cmVzdWx0WzBdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oY3ApOwotICB9IGVsc2UgaWYgKGNwIDw9IDB4
N0ZGKSB7Ci0gICAgcmVzdWx0LnJlc2l6ZSgyKTsKLSAgICByZXN1bHRbMV0gPSBzdGF0aWNfY2Fz
dDxjaGFyPigweDgwIHwgKDB4M2YgJiBjcCkpOwotICAgIHJlc3VsdFswXSA9IHN0YXRpY19jYXN0
PGNoYXI+KDB4QzAgfCAoMHgxZiAmIChjcCA+PiA2KSkpOwotICB9IGVsc2UgaWYgKGNwIDw9IDB4
RkZGRikgewotICAgIHJlc3VsdC5yZXNpemUoMyk7Ci0gICAgcmVzdWx0WzJdID0gc3RhdGljX2Nh
c3Q8Y2hhcj4oMHg4MCB8ICgweDNmICYgY3ApKTsKLSAgICByZXN1bHRbMV0gPSBzdGF0aWNfY2Fz
dDxjaGFyPigweDgwIHwgKDB4M2YgJiAoY3AgPj4gNikpKTsKLSAgICByZXN1bHRbMF0gPSBzdGF0
aWNfY2FzdDxjaGFyPigweEUwIHwgKDB4ZiAmIChjcCA+PiAxMikpKTsKLSAgfSBlbHNlIGlmIChj
cCA8PSAweDEwRkZGRikgewotICAgIHJlc3VsdC5yZXNpemUoNCk7Ci0gICAgcmVzdWx0WzNdID0g
c3RhdGljX2Nhc3Q8Y2hhcj4oMHg4MCB8ICgweDNmICYgY3ApKTsKLSAgICByZXN1bHRbMl0gPSBz
dGF0aWNfY2FzdDxjaGFyPigweDgwIHwgKDB4M2YgJiAoY3AgPj4gNikpKTsKLSAgICByZXN1bHRb
MV0gPSBzdGF0aWNfY2FzdDxjaGFyPigweDgwIHwgKDB4M2YgJiAoY3AgPj4gMTIpKSk7Ci0gICAg
cmVzdWx0WzBdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oMHhGMCB8ICgweDcgJiAoY3AgPj4gMTgpKSk7
Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vLy8gUmV0dXJucyB0cnVlIGlmIGNoIGlz
IGEgY29udHJvbCBjaGFyYWN0ZXIgKGluIHJhbmdlIFsxLDMxXSkuCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNDb250cm9sQ2hhcmFjdGVyKGNoYXIgY2gpIHsgcmV0dXJuIGNoID4gMCAmJiBjaCA8PSAw
eDFGOyB9Ci0KLWVudW0gewotICAvLy8gQ29uc3RhbnQgdGhhdCBzcGVjaWZ5IHRoZSBzaXplIG9m
IHRoZSBidWZmZXIgdGhhdCBtdXN0IGJlIHBhc3NlZCB0bwotICAvLy8gdWludFRvU3RyaW5nLgot
ICB1aW50VG9TdHJpbmdCdWZmZXJTaXplID0gMyAqIHNpemVvZihMYXJnZXN0VUludCkgKyAxCi19
OwotCi0vLyBEZWZpbmVzIGEgY2hhciBidWZmZXIgZm9yIHVzZSB3aXRoIHVpbnRUb1N0cmluZygp
LgotdHlwZWRlZiBjaGFyIFVJbnRUb1N0cmluZ0J1ZmZlclt1aW50VG9TdHJpbmdCdWZmZXJTaXpl
XTsKLQotLyoqIENvbnZlcnRzIGFuIHVuc2lnbmVkIGludGVnZXIgdG8gc3RyaW5nLgotICogQHBh
cmFtIHZhbHVlIFVuc2lnbmVkIGludGVyZ2VyIHRvIGNvbnZlcnQgdG8gc3RyaW5nCi0gKiBAcGFy
YW0gY3VycmVudCBJbnB1dC9PdXRwdXQgc3RyaW5nIGJ1ZmZlci4KLSAqICAgICAgICBNdXN0IGhh
dmUgYXQgbGVhc3QgdWludFRvU3RyaW5nQnVmZmVyU2l6ZSBjaGFycyBmcmVlLgotICovCi1zdGF0
aWMgaW5saW5lIHZvaWQgdWludFRvU3RyaW5nKExhcmdlc3RVSW50IHZhbHVlLCBjaGFyKiYgY3Vy
cmVudCkgewotICAqLS1jdXJyZW50ID0gMDsKLSAgZG8gewotICAgICotLWN1cnJlbnQgPSBzdGF0
aWNfY2FzdDxzaWduZWQgY2hhcj4odmFsdWUgJSAxMFUgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
JzAnKSk7Ci0gICAgdmFsdWUgLz0gMTA7Ci0gIH0gd2hpbGUgKHZhbHVlICE9IDApOwotfQotCi0v
KiogQ2hhbmdlICcsJyB0byAnLicgZXZlcnl3aGVyZSBpbiBidWZmZXIuCi0gKgotICogV2UgaGFk
IGEgc29waGlzdGljYXRlZCB3YXksIGJ1dCBpdCBkaWQgbm90IHdvcmsgaW4gV2luQ0UuCi0gKiBA
c2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXNvdXJjZS1wYXJzZXJzL2pzb25jcHAvcHVsbC85
Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmaXhOdW1lcmljTG9jYWxlKGNoYXIqIGJlZ2luLCBj
aGFyKiBlbmQpIHsKLSAgd2hpbGUgKGJlZ2luIDwgZW5kKSB7Ci0gICAgaWYgKCpiZWdpbiA9PSAn
LCcpIHsKLSAgICAgICpiZWdpbiA9ICcuJzsKLSAgICB9Ci0gICAgKytiZWdpbjsKLSAgfQotfQot
Ci19IC8vIG5hbWVzcGFjZSBKc29uIHsKLQotI2VuZGlmIC8vIExJQl9KU09OQ1BQX0pTT05fVE9P
TF9IX0lOQ0xVREVECi0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEVuZCBvZiBjb250ZW50IG9mIGZp
bGU6IHNyYy9saWJfanNvbi9qc29uX3Rvb2wuaAotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0KLQotCi0K
LQotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotLy8gQmVnaW5uaW5nIG9mIGNvbnRlbnQgb2YgZmlsZTogc3Jj
L2xpYl9qc29uL2pzb25fcmVhZGVyLmNwcAotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLyBDb3B5cmln
aHQgMjAwNy0yMDExIEJhcHRpc3RlIExlcGlsbGV1cgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgTUlU
IGxpY2Vuc2UsIG9yIHB1YmxpYyBkb21haW4gaWYgZGVzaXJlZCBhbmQKLS8vIHJlY29nbml6ZWQg
aW4geW91ciBqdXJpc2RpY3Rpb24uCi0vLyBTZWUgZmlsZSBMSUNFTlNFIGZvciBkZXRhaWwgb3Ig
Y29weSBhdCBodHRwOi8vanNvbmNwcC5zb3VyY2Vmb3JnZS5uZXQvTElDRU5TRQotCi0jaWYgIWRl
ZmluZWQoSlNPTl9JU19BTUFMR0FNQVRJT04pCi0jaW5jbHVkZSA8anNvbi9hc3NlcnRpb25zLmg+
Ci0jaW5jbHVkZSA8anNvbi9yZWFkZXIuaD4KLSNpbmNsdWRlIDxqc29uL3ZhbHVlLmg+Ci0jaW5j
bHVkZSAianNvbl90b29sLmgiCi0jZW5kaWYgLy8gaWYgIWRlZmluZWQoSlNPTl9JU19BTUFMR0FN
QVRJT04pCi0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8
Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGlzdHJlYW0+Ci0jaW5jbHVk
ZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUg
PGxpbWl0cz4KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jaWYgIWRlZmluZWQoV0lOQ0UpICYm
IGRlZmluZWQoX19TVERDX1NFQ1VSRV9MSUJfXykgJiYgX01TQ19WRVIgPj0gMTUwMCAvLyBWQysr
IDkuMCBhbmQgYWJvdmUgCi0jZGVmaW5lIHNucHJpbnRmIHNwcmludGZfcwotI2VsaWYgX01TQ19W
RVIgPj0gMTkwMCAvLyBWQysrIDE0LjAgYW5kIGFib3ZlCi0jZGVmaW5lIHNucHJpbnRmIHN0ZDo6
c25wcmludGYKLSNlbHNlCi0jZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgotI2VuZGlmCi0jZWxp
ZiBkZWZpbmVkKF9fQU5EUk9JRF9fKSB8fCBkZWZpbmVkKF9fUU5YTlRPX18pCi0jZGVmaW5lIHNu
cHJpbnRmIHNucHJpbnRmCi0jZWxpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCi0jZGVmaW5lIHNu
cHJpbnRmIHN0ZDo6c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1FOWE5UT19fKQot
I2RlZmluZSBzc2NhbmYgc3RkOjpzc2NhbmYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfTVNDX1ZF
UikgJiYgX01TQ19WRVIgPj0gMTQwMCAvLyBWQysrIDguMAotLy8gRGlzYWJsZSB3YXJuaW5nIGFi
b3V0IHN0cmR1cCBiZWluZyBkZXByZWNhdGVkLgotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0
OTk2KQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgY29uc3Qgc3RhY2tMaW1pdF9nID0gMTAwMDsKLXN0
YXRpYyBpbnQgICAgICAgc3RhY2tEZXB0aF9nID0gMDsgIC8vIHNlZSByZWFkVmFsdWUoKQotCi1u
YW1lc3BhY2UgSnNvbiB7Ci0KLSNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMIHx8IChkZWZpbmVk
KF9DUFBMSUJfVkVSKSAmJiBfQ1BQTElCX1ZFUiA+PSA1MjApCi10eXBlZGVmIHN0ZDo6dW5pcXVl
X3B0cjxDaGFyUmVhZGVyPiBDaGFyUmVhZGVyUHRyOwotI2Vsc2UKLXR5cGVkZWYgc3RkOjphdXRv
X3B0cjxDaGFyUmVhZGVyPiAgIENoYXJSZWFkZXJQdHI7Ci0jZW5kaWYKLQotLy8gSW1wbGVtZW50
YXRpb24gb2YgY2xhc3MgRmVhdHVyZXMKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0KLUZlYXR1cmVzOjpGZWF0dXJlcygpCi0gICAgOiBhbGxvd0NvbW1lbnRzXyh0cnVlKSwg
c3RyaWN0Um9vdF8oZmFsc2UpLAotICAgICAgYWxsb3dEcm9wcGVkTnVsbFBsYWNlaG9sZGVyc18o
ZmFsc2UpLCBhbGxvd051bWVyaWNLZXlzXyhmYWxzZSkge30KLQotRmVhdHVyZXMgRmVhdHVyZXM6
OmFsbCgpIHsgcmV0dXJuIEZlYXR1cmVzKCk7IH0KLQotRmVhdHVyZXMgRmVhdHVyZXM6OnN0cmlj
dE1vZGUoKSB7Ci0gIEZlYXR1cmVzIGZlYXR1cmVzOwotICBmZWF0dXJlcy5hbGxvd0NvbW1lbnRz
XyA9IGZhbHNlOwotICBmZWF0dXJlcy5zdHJpY3RSb290XyA9IHRydWU7Ci0gIGZlYXR1cmVzLmFs
bG93RHJvcHBlZE51bGxQbGFjZWhvbGRlcnNfID0gZmFsc2U7Ci0gIGZlYXR1cmVzLmFsbG93TnVt
ZXJpY0tleXNfID0gZmFsc2U7Ci0gIHJldHVybiBmZWF0dXJlczsKLX0KLQotLy8gSW1wbGVtZW50
YXRpb24gb2YgY2xhc3MgUmVhZGVyCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi1zdGF0aWMgYm9vbCBjb250YWluc05ld0xpbmUoUmVhZGVyOjpMb2NhdGlvbiBiZWdpbiwg
UmVhZGVyOjpMb2NhdGlvbiBlbmQpIHsKLSAgZm9yICg7IGJlZ2luIDwgZW5kOyArK2JlZ2luKQot
ICAgIGlmICgqYmVnaW4gPT0gJ1xuJyB8fCAqYmVnaW4gPT0gJ1xyJykKLSAgICAgIHJldHVybiB0
cnVlOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIENsYXNzIFJlYWRlcgotLy8gLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0KLVJlYWRlcjo6UmVhZGVyKCkKLSAgICA6IGVycm9yc18oKSwgZG9jdW1lbnRfKCksIGJlZ2lu
XygpLCBlbmRfKCksIGN1cnJlbnRfKCksIGxhc3RWYWx1ZUVuZF8oKSwKLSAgICAgIGxhc3RWYWx1
ZV8oKSwgY29tbWVudHNCZWZvcmVfKCksIGZlYXR1cmVzXyhGZWF0dXJlczo6YWxsKCkpLAotICAg
ICAgY29sbGVjdENvbW1lbnRzXygpIHt9Ci0KLVJlYWRlcjo6UmVhZGVyKGNvbnN0IEZlYXR1cmVz
JiBmZWF0dXJlcykKLSAgICA6IGVycm9yc18oKSwgZG9jdW1lbnRfKCksIGJlZ2luXygpLCBlbmRf
KCksIGN1cnJlbnRfKCksIGxhc3RWYWx1ZUVuZF8oKSwKLSAgICAgIGxhc3RWYWx1ZV8oKSwgY29t
bWVudHNCZWZvcmVfKCksIGZlYXR1cmVzXyhmZWF0dXJlcyksIGNvbGxlY3RDb21tZW50c18oKSB7
Ci19Ci0KLWJvb2wKLVJlYWRlcjo6cGFyc2UoY29uc3Qgc3RkOjpzdHJpbmcmIGRvY3VtZW50LCBW
YWx1ZSYgcm9vdCwgYm9vbCBjb2xsZWN0Q29tbWVudHMpIHsKLSAgZG9jdW1lbnRfID0gZG9jdW1l
bnQ7Ci0gIGNvbnN0IGNoYXIqIGJlZ2luID0gZG9jdW1lbnRfLmNfc3RyKCk7Ci0gIGNvbnN0IGNo
YXIqIGVuZCA9IGJlZ2luICsgZG9jdW1lbnRfLmxlbmd0aCgpOwotICByZXR1cm4gcGFyc2UoYmVn
aW4sIGVuZCwgcm9vdCwgY29sbGVjdENvbW1lbnRzKTsKLX0KLQotYm9vbCBSZWFkZXI6OnBhcnNl
KHN0ZDo6aXN0cmVhbSYgc2luLCBWYWx1ZSYgcm9vdCwgYm9vbCBjb2xsZWN0Q29tbWVudHMpIHsK
LSAgLy8gc3RkOjppc3RyZWFtX2l0ZXJhdG9yPGNoYXI+IGJlZ2luKHNpbik7Ci0gIC8vIHN0ZDo6
aXN0cmVhbV9pdGVyYXRvcjxjaGFyPiBlbmQ7Ci0gIC8vIFRob3NlIHdvdWxkIGFsbG93IHN0cmVh
bWVkIGlucHV0IGZyb20gYSBmaWxlLCBpZiBwYXJzZSgpIHdlcmUgYQotICAvLyB0ZW1wbGF0ZSBm
dW5jdGlvbi4KLQotICAvLyBTaW5jZSBzdGQ6OnN0cmluZyBpcyByZWZlcmVuY2UtY291bnRlZCwg
dGhpcyBhdCBsZWFzdCBkb2VzIG5vdAotICAvLyBjcmVhdGUgYW4gZXh0cmEgY29weS4KLSAgc3Rk
OjpzdHJpbmcgZG9jOwotICBzdGQ6OmdldGxpbmUoc2luLCBkb2MsIChjaGFyKUVPRik7Ci0gIHJl
dHVybiBwYXJzZShkb2MsIHJvb3QsIGNvbGxlY3RDb21tZW50cyk7Ci19Ci0KLWJvb2wgUmVhZGVy
OjpwYXJzZShjb25zdCBjaGFyKiBiZWdpbkRvYywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBlbmREb2MsCi0gICAgICAgICAgICAgICAgICAgVmFsdWUmIHJvb3QsCi0gICAgICAgICAg
ICAgICAgICAgYm9vbCBjb2xsZWN0Q29tbWVudHMpIHsKLSAgaWYgKCFmZWF0dXJlc18uYWxsb3dD
b21tZW50c18pIHsKLSAgICBjb2xsZWN0Q29tbWVudHMgPSBmYWxzZTsKLSAgfQotCi0gIGJlZ2lu
XyA9IGJlZ2luRG9jOwotICBlbmRfID0gZW5kRG9jOwotICBjb2xsZWN0Q29tbWVudHNfID0gY29s
bGVjdENvbW1lbnRzOwotICBjdXJyZW50XyA9IGJlZ2luXzsKLSAgbGFzdFZhbHVlRW5kXyA9IDA7
Ci0gIGxhc3RWYWx1ZV8gPSAwOwotICBjb21tZW50c0JlZm9yZV8gPSAiIjsKLSAgZXJyb3JzXy5j
bGVhcigpOwotICB3aGlsZSAoIW5vZGVzXy5lbXB0eSgpKQotICAgIG5vZGVzXy5wb3AoKTsKLSAg
bm9kZXNfLnB1c2goJnJvb3QpOwotCi0gIHN0YWNrRGVwdGhfZyA9IDA7ICAvLyBZZXMsIHRoaXMg
aXMgYmFkIGNvZGluZywgYnV0IG9wdGlvbnMgYXJlIGxpbWl0ZWQuCi0gIGJvb2wgc3VjY2Vzc2Z1
bCA9IHJlYWRWYWx1ZSgpOwotICBUb2tlbiB0b2tlbjsKLSAgc2tpcENvbW1lbnRUb2tlbnModG9r
ZW4pOwotICBpZiAoY29sbGVjdENvbW1lbnRzXyAmJiAhY29tbWVudHNCZWZvcmVfLmVtcHR5KCkp
Ci0gICAgcm9vdC5zZXRDb21tZW50KGNvbW1lbnRzQmVmb3JlXywgY29tbWVudEFmdGVyKTsKLSAg
aWYgKGZlYXR1cmVzXy5zdHJpY3RSb290XykgewotICAgIGlmICghcm9vdC5pc0FycmF5KCkgJiYg
IXJvb3QuaXNPYmplY3QoKSkgewotICAgICAgLy8gU2V0IGVycm9yIGxvY2F0aW9uIHRvIHN0YXJ0
IG9mIGRvYywgaWRlYWxseSBzaG91bGQgYmUgZmlyc3QgdG9rZW4gZm91bmQKLSAgICAgIC8vIGlu
IGRvYwotICAgICAgdG9rZW4udHlwZV8gPSB0b2tlbkVycm9yOwotICAgICAgdG9rZW4uc3RhcnRf
ID0gYmVnaW5Eb2M7Ci0gICAgICB0b2tlbi5lbmRfID0gZW5kRG9jOwotICAgICAgYWRkRXJyb3Io
Ci0gICAgICAgICAgIkEgdmFsaWQgSlNPTiBkb2N1bWVudCBtdXN0IGJlIGVpdGhlciBhbiBhcnJh
eSBvciBhbiBvYmplY3QgdmFsdWUuIiwKLSAgICAgICAgICB0b2tlbik7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICB9Ci0gIHJldHVybiBzdWNjZXNzZnVsOwotfQotCi1ib29sIFJlYWRl
cjo6cmVhZFZhbHVlKCkgewotICAvLyBUaGlzIGlzIGEgbm9uLXJlZW50cmFudCB3YXkgdG8gc3Vw
cG9ydCBhIHN0YWNrTGltaXQuIFRlcnJpYmxlIQotICAvLyBCdXQgdGhpcyBkZXByZWNhdGVkIGNs
YXNzIGhhcyBhIHNlY3VyaXR5IHByb2JsZW06IEJhZCBpbnB1dCBjYW4KLSAgLy8gY2F1c2UgYSBz
ZWctZmF1bHQuIFRoaXMgc2VlbXMgbGlrZSBhIGZhaXIsIGJpbmFyeS1jb21wYXRpYmxlIHdheQot
ICAvLyB0byBwcmV2ZW50IHRoZSBwcm9ibGVtLgotICBpZiAoc3RhY2tEZXB0aF9nID49IHN0YWNr
TGltaXRfZykgdGhyb3dSdW50aW1lRXJyb3IoIkV4Y2VlZGVkIHN0YWNrTGltaXQgaW4gcmVhZFZh
bHVlKCkuIik7Ci0gICsrc3RhY2tEZXB0aF9nOwotCi0gIFRva2VuIHRva2VuOwotICBza2lwQ29t
bWVudFRva2Vucyh0b2tlbik7Ci0gIGJvb2wgc3VjY2Vzc2Z1bCA9IHRydWU7Ci0KLSAgaWYgKGNv
bGxlY3RDb21tZW50c18gJiYgIWNvbW1lbnRzQmVmb3JlXy5lbXB0eSgpKSB7Ci0gICAgY3VycmVu
dFZhbHVlKCkuc2V0Q29tbWVudChjb21tZW50c0JlZm9yZV8sIGNvbW1lbnRCZWZvcmUpOwotICAg
IGNvbW1lbnRzQmVmb3JlXyA9ICIiOwotICB9Ci0KLSAgc3dpdGNoICh0b2tlbi50eXBlXykgewot
ICBjYXNlIHRva2VuT2JqZWN0QmVnaW46Ci0gICAgc3VjY2Vzc2Z1bCA9IHJlYWRPYmplY3QodG9r
ZW4pOwotICAgIGN1cnJlbnRWYWx1ZSgpLnNldE9mZnNldExpbWl0KGN1cnJlbnRfIC0gYmVnaW5f
KTsKLSAgICBicmVhazsKLSAgY2FzZSB0b2tlbkFycmF5QmVnaW46Ci0gICAgc3VjY2Vzc2Z1bCA9
IHJlYWRBcnJheSh0b2tlbik7Ci0gICAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0TGltaXQoY3Vy
cmVudF8gLSBiZWdpbl8pOwotICAgIGJyZWFrOwotICBjYXNlIHRva2VuTnVtYmVyOgotICAgIHN1
Y2Nlc3NmdWwgPSBkZWNvZGVOdW1iZXIodG9rZW4pOwotICAgIGJyZWFrOwotICBjYXNlIHRva2Vu
U3RyaW5nOgotICAgIHN1Y2Nlc3NmdWwgPSBkZWNvZGVTdHJpbmcodG9rZW4pOwotICAgIGJyZWFr
OwotICBjYXNlIHRva2VuVHJ1ZToKLSAgICB7Ci0gICAgVmFsdWUgdih0cnVlKTsKLSAgICBjdXJy
ZW50VmFsdWUoKS5zd2FwUGF5bG9hZCh2KTsKLSAgICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRT
dGFydCh0b2tlbi5zdGFydF8gLSBiZWdpbl8pOwotICAgIGN1cnJlbnRWYWx1ZSgpLnNldE9mZnNl
dExpbWl0KHRva2VuLmVuZF8gLSBiZWdpbl8pOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSB0
b2tlbkZhbHNlOgotICAgIHsKLSAgICBWYWx1ZSB2KGZhbHNlKTsKLSAgICBjdXJyZW50VmFsdWUo
KS5zd2FwUGF5bG9hZCh2KTsKLSAgICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRTdGFydCh0b2tl
bi5zdGFydF8gLSBiZWdpbl8pOwotICAgIGN1cnJlbnRWYWx1ZSgpLnNldE9mZnNldExpbWl0KHRv
a2VuLmVuZF8gLSBiZWdpbl8pOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSB0b2tlbk51bGw6
Ci0gICAgewotICAgIFZhbHVlIHY7Ci0gICAgY3VycmVudFZhbHVlKCkuc3dhcFBheWxvYWQodik7
Ci0gICAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0U3RhcnQodG9rZW4uc3RhcnRfIC0gYmVnaW5f
KTsKLSAgICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRMaW1pdCh0b2tlbi5lbmRfIC0gYmVnaW5f
KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgdG9rZW5BcnJheVNlcGFyYXRvcjoKLSAgY2Fz
ZSB0b2tlbk9iamVjdEVuZDoKLSAgY2FzZSB0b2tlbkFycmF5RW5kOgotICAgIGlmIChmZWF0dXJl
c18uYWxsb3dEcm9wcGVkTnVsbFBsYWNlaG9sZGVyc18pIHsKLSAgICAgIC8vICJVbi1yZWFkIiB0
aGUgY3VycmVudCB0b2tlbiBhbmQgbWFyayB0aGUgY3VycmVudCB2YWx1ZSBhcyBhIG51bGwKLSAg
ICAgIC8vIHRva2VuLgotICAgICAgY3VycmVudF8tLTsKLSAgICAgIFZhbHVlIHY7Ci0gICAgICBj
dXJyZW50VmFsdWUoKS5zd2FwUGF5bG9hZCh2KTsKLSAgICAgIGN1cnJlbnRWYWx1ZSgpLnNldE9m
ZnNldFN0YXJ0KGN1cnJlbnRfIC0gYmVnaW5fIC0gMSk7Ci0gICAgICBjdXJyZW50VmFsdWUoKS5z
ZXRPZmZzZXRMaW1pdChjdXJyZW50XyAtIGJlZ2luXyk7Ci0gICAgICBicmVhazsKLSAgICB9IC8v
IEVsc2UsIGZhbGwgdGhyb3VnaC4uLgotICBkZWZhdWx0OgotICAgIGN1cnJlbnRWYWx1ZSgpLnNl
dE9mZnNldFN0YXJ0KHRva2VuLnN0YXJ0XyAtIGJlZ2luXyk7Ci0gICAgY3VycmVudFZhbHVlKCku
c2V0T2Zmc2V0TGltaXQodG9rZW4uZW5kXyAtIGJlZ2luXyk7Ci0gICAgcmV0dXJuIGFkZEVycm9y
KCJTeW50YXggZXJyb3I6IHZhbHVlLCBvYmplY3Qgb3IgYXJyYXkgZXhwZWN0ZWQuIiwgdG9rZW4p
OwotICB9Ci0KLSAgaWYgKGNvbGxlY3RDb21tZW50c18pIHsKLSAgICBsYXN0VmFsdWVFbmRfID0g
Y3VycmVudF87Ci0gICAgbGFzdFZhbHVlXyA9ICZjdXJyZW50VmFsdWUoKTsKLSAgfQotCi0gIC0t
c3RhY2tEZXB0aF9nOwotICByZXR1cm4gc3VjY2Vzc2Z1bDsKLX0KLQotdm9pZCBSZWFkZXI6OnNr
aXBDb21tZW50VG9rZW5zKFRva2VuJiB0b2tlbikgewotICBpZiAoZmVhdHVyZXNfLmFsbG93Q29t
bWVudHNfKSB7Ci0gICAgZG8gewotICAgICAgcmVhZFRva2VuKHRva2VuKTsKLSAgICB9IHdoaWxl
ICh0b2tlbi50eXBlXyA9PSB0b2tlbkNvbW1lbnQpOwotICB9IGVsc2UgewotICAgIHJlYWRUb2tl
bih0b2tlbik7Ci0gIH0KLX0KLQotYm9vbCBSZWFkZXI6OnJlYWRUb2tlbihUb2tlbiYgdG9rZW4p
IHsKLSAgc2tpcFNwYWNlcygpOwotICB0b2tlbi5zdGFydF8gPSBjdXJyZW50XzsKLSAgQ2hhciBj
ID0gZ2V0TmV4dENoYXIoKTsKLSAgYm9vbCBvayA9IHRydWU7Ci0gIHN3aXRjaCAoYykgewotICBj
YXNlICd7JzoKLSAgICB0b2tlbi50eXBlXyA9IHRva2VuT2JqZWN0QmVnaW47Ci0gICAgYnJlYWs7
Ci0gIGNhc2UgJ30nOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5PYmplY3RFbmQ7Ci0gICAgYnJl
YWs7Ci0gIGNhc2UgJ1snOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5BcnJheUJlZ2luOwotICAg
IGJyZWFrOwotICBjYXNlICddJzoKLSAgICB0b2tlbi50eXBlXyA9IHRva2VuQXJyYXlFbmQ7Ci0g
ICAgYnJlYWs7Ci0gIGNhc2UgJyInOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5TdHJpbmc7Ci0g
ICAgb2sgPSByZWFkU3RyaW5nKCk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgJy8nOgotICAgIHRva2Vu
LnR5cGVfID0gdG9rZW5Db21tZW50OwotICAgIG9rID0gcmVhZENvbW1lbnQoKTsKLSAgICBicmVh
azsKLSAgY2FzZSAnMCc6Ci0gIGNhc2UgJzEnOgotICBjYXNlICcyJzoKLSAgY2FzZSAnMyc6Ci0g
IGNhc2UgJzQnOgotICBjYXNlICc1JzoKLSAgY2FzZSAnNic6Ci0gIGNhc2UgJzcnOgotICBjYXNl
ICc4JzoKLSAgY2FzZSAnOSc6Ci0gIGNhc2UgJy0nOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5O
dW1iZXI7Ci0gICAgcmVhZE51bWJlcigpOwotICAgIGJyZWFrOwotICBjYXNlICd0JzoKLSAgICB0
b2tlbi50eXBlXyA9IHRva2VuVHJ1ZTsKLSAgICBvayA9IG1hdGNoKCJydWUiLCAzKTsKLSAgICBi
cmVhazsKLSAgY2FzZSAnZic6Ci0gICAgdG9rZW4udHlwZV8gPSB0b2tlbkZhbHNlOwotICAgIG9r
ID0gbWF0Y2goImFsc2UiLCA0KTsKLSAgICBicmVhazsKLSAgY2FzZSAnbic6Ci0gICAgdG9rZW4u
dHlwZV8gPSB0b2tlbk51bGw7Ci0gICAgb2sgPSBtYXRjaCgidWxsIiwgMyk7Ci0gICAgYnJlYWs7
Ci0gIGNhc2UgJywnOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5BcnJheVNlcGFyYXRvcjsKLSAg
ICBicmVhazsKLSAgY2FzZSAnOic6Ci0gICAgdG9rZW4udHlwZV8gPSB0b2tlbk1lbWJlclNlcGFy
YXRvcjsKLSAgICBicmVhazsKLSAgY2FzZSAwOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5FbmRP
ZlN0cmVhbTsKLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICBvayA9IGZhbHNlOwotICAgIGJy
ZWFrOwotICB9Ci0gIGlmICghb2spCi0gICAgdG9rZW4udHlwZV8gPSB0b2tlbkVycm9yOwotICB0
b2tlbi5lbmRfID0gY3VycmVudF87Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlYWRlcjo6
c2tpcFNwYWNlcygpIHsKLSAgd2hpbGUgKGN1cnJlbnRfICE9IGVuZF8pIHsKLSAgICBDaGFyIGMg
PSAqY3VycmVudF87Ci0gICAgaWYgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdccicg
fHwgYyA9PSAnXG4nKQotICAgICAgKytjdXJyZW50XzsKLSAgICBlbHNlCi0gICAgICBicmVhazsK
LSAgfQotfQotCi1ib29sIFJlYWRlcjo6bWF0Y2goTG9jYXRpb24gcGF0dGVybiwgaW50IHBhdHRl
cm5MZW5ndGgpIHsKLSAgaWYgKGVuZF8gLSBjdXJyZW50XyA8IHBhdHRlcm5MZW5ndGgpCi0gICAg
cmV0dXJuIGZhbHNlOwotICBpbnQgaW5kZXggPSBwYXR0ZXJuTGVuZ3RoOwotICB3aGlsZSAoaW5k
ZXgtLSkKLSAgICBpZiAoY3VycmVudF9baW5kZXhdICE9IHBhdHRlcm5baW5kZXhdKQotICAgICAg
cmV0dXJuIGZhbHNlOwotICBjdXJyZW50XyArPSBwYXR0ZXJuTGVuZ3RoOwotICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBSZWFkZXI6OnJlYWRDb21tZW50KCkgewotICBMb2NhdGlvbiBjb21tZW50
QmVnaW4gPSBjdXJyZW50XyAtIDE7Ci0gIENoYXIgYyA9IGdldE5leHRDaGFyKCk7Ci0gIGJvb2wg
c3VjY2Vzc2Z1bCA9IGZhbHNlOwotICBpZiAoYyA9PSAnKicpCi0gICAgc3VjY2Vzc2Z1bCA9IHJl
YWRDU3R5bGVDb21tZW50KCk7Ci0gIGVsc2UgaWYgKGMgPT0gJy8nKQotICAgIHN1Y2Nlc3NmdWwg
PSByZWFkQ3BwU3R5bGVDb21tZW50KCk7Ci0gIGlmICghc3VjY2Vzc2Z1bCkKLSAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgaWYgKGNvbGxlY3RDb21tZW50c18pIHsKLSAgICBDb21tZW50UGxhY2VtZW50
IHBsYWNlbWVudCA9IGNvbW1lbnRCZWZvcmU7Ci0gICAgaWYgKGxhc3RWYWx1ZUVuZF8gJiYgIWNv
bnRhaW5zTmV3TGluZShsYXN0VmFsdWVFbmRfLCBjb21tZW50QmVnaW4pKSB7Ci0gICAgICBpZiAo
YyAhPSAnKicgfHwgIWNvbnRhaW5zTmV3TGluZShjb21tZW50QmVnaW4sIGN1cnJlbnRfKSkKLSAg
ICAgICAgcGxhY2VtZW50ID0gY29tbWVudEFmdGVyT25TYW1lTGluZTsKLSAgICB9Ci0KLSAgICBh
ZGRDb21tZW50KGNvbW1lbnRCZWdpbiwgY3VycmVudF8sIHBsYWNlbWVudCk7Ci0gIH0KLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBub3JtYWxpemVFT0woUmVhZGVyOjpM
b2NhdGlvbiBiZWdpbiwgUmVhZGVyOjpMb2NhdGlvbiBlbmQpIHsKLSAgc3RkOjpzdHJpbmcgbm9y
bWFsaXplZDsKLSAgbm9ybWFsaXplZC5yZXNlcnZlKGVuZCAtIGJlZ2luKTsKLSAgUmVhZGVyOjpM
b2NhdGlvbiBjdXJyZW50ID0gYmVnaW47Ci0gIHdoaWxlIChjdXJyZW50ICE9IGVuZCkgewotICAg
IGNoYXIgYyA9ICpjdXJyZW50Kys7Ci0gICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgaWYgKGN1
cnJlbnQgIT0gZW5kICYmICpjdXJyZW50ID09ICdcbicpCi0gICAgICAgICAvLyBjb252ZXJ0IGRv
cyBFT0wKLSAgICAgICAgICsrY3VycmVudDsKLSAgICAgIC8vIGNvbnZlcnQgTWFjIEVPTAotICAg
ICAgbm9ybWFsaXplZCArPSAnXG4nOwotICAgIH0gZWxzZSB7Ci0gICAgICBub3JtYWxpemVkICs9
IGM7Ci0gICAgfQotICB9Ci0gIHJldHVybiBub3JtYWxpemVkOwotfQotCi12b2lkCi1SZWFkZXI6
OmFkZENvbW1lbnQoTG9jYXRpb24gYmVnaW4sIExvY2F0aW9uIGVuZCwgQ29tbWVudFBsYWNlbWVu
dCBwbGFjZW1lbnQpIHsKLSAgYXNzZXJ0KGNvbGxlY3RDb21tZW50c18pOwotICBjb25zdCBzdGQ6
OnN0cmluZyYgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUVPTChiZWdpbiwgZW5kKTsKLSAgaWYgKHBs
YWNlbWVudCA9PSBjb21tZW50QWZ0ZXJPblNhbWVMaW5lKSB7Ci0gICAgYXNzZXJ0KGxhc3RWYWx1
ZV8gIT0gMCk7Ci0gICAgbGFzdFZhbHVlXy0+c2V0Q29tbWVudChub3JtYWxpemVkLCBwbGFjZW1l
bnQpOwotICB9IGVsc2UgewotICAgIGNvbW1lbnRzQmVmb3JlXyArPSBub3JtYWxpemVkOwotICB9
Ci19Ci0KLWJvb2wgUmVhZGVyOjpyZWFkQ1N0eWxlQ29tbWVudCgpIHsKLSAgd2hpbGUgKGN1cnJl
bnRfICE9IGVuZF8pIHsKLSAgICBDaGFyIGMgPSBnZXROZXh0Q2hhcigpOwotICAgIGlmIChjID09
ICcqJyAmJiAqY3VycmVudF8gPT0gJy8nKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIGdl
dE5leHRDaGFyKCkgPT0gJy8nOwotfQotCi1ib29sIFJlYWRlcjo6cmVhZENwcFN0eWxlQ29tbWVu
dCgpIHsKLSAgd2hpbGUgKGN1cnJlbnRfICE9IGVuZF8pIHsKLSAgICBDaGFyIGMgPSBnZXROZXh0
Q2hhcigpOwotICAgIGlmIChjID09ICdcbicpCi0gICAgICBicmVhazsKLSAgICBpZiAoYyA9PSAn
XHInKSB7Ci0gICAgICAvLyBDb25zdW1lIERPUyBFT0wuIEl0IHdpbGwgYmUgbm9ybWFsaXplZCBp
biBhZGRDb21tZW50LgotICAgICAgaWYgKGN1cnJlbnRfICE9IGVuZF8gJiYgKmN1cnJlbnRfID09
ICdcbicpCi0gICAgICAgIGdldE5leHRDaGFyKCk7Ci0gICAgICAvLyBCcmVhayBvbiBNb2MgT1Mg
OSBFT0wuCi0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgUmVhZGVyOjpyZWFkTnVtYmVyKCkgewotICBjb25zdCBjaGFyICpwID0gY3VycmVudF87Ci0g
IGNoYXIgYyA9ICcwJzsgLy8gc3RvcGdhcCBmb3IgYWxyZWFkeSBjb25zdW1lZCBjaGFyYWN0ZXIK
LSAgLy8gaW50ZWdyYWwgcGFydAotICB3aGlsZSAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCi0gICAg
YyA9IChjdXJyZW50XyA9IHApIDwgZW5kXyA/ICpwKysgOiAwOwotICAvLyBmcmFjdGlvbmFsIHBh
cnQKLSAgaWYgKGMgPT0gJy4nKSB7Ci0gICAgYyA9IChjdXJyZW50XyA9IHApIDwgZW5kXyA/ICpw
KysgOiAwOwotICAgIHdoaWxlIChjID49ICcwJyAmJiBjIDw9ICc5JykKLSAgICAgIGMgPSAoY3Vy
cmVudF8gPSBwKSA8IGVuZF8gPyAqcCsrIDogMDsKLSAgfQotICAvLyBleHBvbmVudGlhbCBwYXJ0
Ci0gIGlmIChjID09ICdlJyB8fCBjID09ICdFJykgewotICAgIGMgPSAoY3VycmVudF8gPSBwKSA8
IGVuZF8gPyAqcCsrIDogMDsKLSAgICBpZiAoYyA9PSAnKycgfHwgYyA9PSAnLScpCi0gICAgICBj
ID0gKGN1cnJlbnRfID0gcCkgPCBlbmRfID8gKnArKyA6IDA7Ci0gICAgd2hpbGUgKGMgPj0gJzAn
ICYmIGMgPD0gJzknKQotICAgICAgYyA9IChjdXJyZW50XyA9IHApIDwgZW5kXyA/ICpwKysgOiAw
OwotICB9Ci19Ci0KLWJvb2wgUmVhZGVyOjpyZWFkU3RyaW5nKCkgewotICBDaGFyIGMgPSAwOwot
ICB3aGlsZSAoY3VycmVudF8gIT0gZW5kXykgewotICAgIGMgPSBnZXROZXh0Q2hhcigpOwotICAg
IGlmIChjID09ICdcXCcpCi0gICAgICBnZXROZXh0Q2hhcigpOwotICAgIGVsc2UgaWYgKGMgPT0g
JyInKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIGMgPT0gJyInOwotfQotCi1ib29sIFJl
YWRlcjo6cmVhZE9iamVjdChUb2tlbiYgdG9rZW5TdGFydCkgewotICBUb2tlbiB0b2tlbk5hbWU7
Ci0gIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gIFZhbHVlIGluaXQob2JqZWN0VmFsdWUpOwotICBjdXJy
ZW50VmFsdWUoKS5zd2FwUGF5bG9hZChpbml0KTsKLSAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0
U3RhcnQodG9rZW5TdGFydC5zdGFydF8gLSBiZWdpbl8pOwotICB3aGlsZSAocmVhZFRva2VuKHRv
a2VuTmFtZSkpIHsKLSAgICBib29sIGluaXRpYWxUb2tlbk9rID0gdHJ1ZTsKLSAgICB3aGlsZSAo
dG9rZW5OYW1lLnR5cGVfID09IHRva2VuQ29tbWVudCAmJiBpbml0aWFsVG9rZW5PaykKLSAgICAg
IGluaXRpYWxUb2tlbk9rID0gcmVhZFRva2VuKHRva2VuTmFtZSk7Ci0gICAgaWYgKCFpbml0aWFs
VG9rZW5PaykKLSAgICAgIGJyZWFrOwotICAgIGlmICh0b2tlbk5hbWUudHlwZV8gPT0gdG9rZW5P
YmplY3RFbmQgJiYgbmFtZS5lbXB0eSgpKSAvLyBlbXB0eSBvYmplY3QKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIG5hbWUgPSAiIjsKLSAgICBpZiAodG9rZW5OYW1lLnR5cGVfID09IHRva2VuU3Ry
aW5nKSB7Ci0gICAgICBpZiAoIWRlY29kZVN0cmluZyh0b2tlbk5hbWUsIG5hbWUpKQotICAgICAg
ICByZXR1cm4gcmVjb3ZlckZyb21FcnJvcih0b2tlbk9iamVjdEVuZCk7Ci0gICAgfSBlbHNlIGlm
ICh0b2tlbk5hbWUudHlwZV8gPT0gdG9rZW5OdW1iZXIgJiYgZmVhdHVyZXNfLmFsbG93TnVtZXJp
Y0tleXNfKSB7Ci0gICAgICBWYWx1ZSBudW1iZXJOYW1lOwotICAgICAgaWYgKCFkZWNvZGVOdW1i
ZXIodG9rZW5OYW1lLCBudW1iZXJOYW1lKSkKLSAgICAgICAgcmV0dXJuIHJlY292ZXJGcm9tRXJy
b3IodG9rZW5PYmplY3RFbmQpOwotICAgICAgbmFtZSA9IG51bWJlck5hbWUuYXNTdHJpbmcoKTsK
LSAgICB9IGVsc2UgewotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgVG9rZW4gY29sb247Ci0g
ICAgaWYgKCFyZWFkVG9rZW4oY29sb24pIHx8IGNvbG9uLnR5cGVfICE9IHRva2VuTWVtYmVyU2Vw
YXJhdG9yKSB7Ci0gICAgICByZXR1cm4gYWRkRXJyb3JBbmRSZWNvdmVyKAotICAgICAgICAgICJN
aXNzaW5nICc6JyBhZnRlciBvYmplY3QgbWVtYmVyIG5hbWUiLCBjb2xvbiwgdG9rZW5PYmplY3RF
bmQpOwotICAgIH0KLSAgICBWYWx1ZSYgdmFsdWUgPSBjdXJyZW50VmFsdWUoKVtuYW1lXTsKLSAg
ICBub2Rlc18ucHVzaCgmdmFsdWUpOwotICAgIGJvb2wgb2sgPSByZWFkVmFsdWUoKTsKLSAgICBu
b2Rlc18ucG9wKCk7Ci0gICAgaWYgKCFvaykgLy8gZXJyb3IgYWxyZWFkeSBzZXQKLSAgICAgIHJl
dHVybiByZWNvdmVyRnJvbUVycm9yKHRva2VuT2JqZWN0RW5kKTsKLQotICAgIFRva2VuIGNvbW1h
OwotICAgIGlmICghcmVhZFRva2VuKGNvbW1hKSB8fAotICAgICAgICAoY29tbWEudHlwZV8gIT0g
dG9rZW5PYmplY3RFbmQgJiYgY29tbWEudHlwZV8gIT0gdG9rZW5BcnJheVNlcGFyYXRvciAmJgot
ICAgICAgICAgY29tbWEudHlwZV8gIT0gdG9rZW5Db21tZW50KSkgewotICAgICAgcmV0dXJuIGFk
ZEVycm9yQW5kUmVjb3ZlcigKLSAgICAgICAgICAiTWlzc2luZyAnLCcgb3IgJ30nIGluIG9iamVj
dCBkZWNsYXJhdGlvbiIsIGNvbW1hLCB0b2tlbk9iamVjdEVuZCk7Ci0gICAgfQotICAgIGJvb2wg
ZmluYWxpemVUb2tlbk9rID0gdHJ1ZTsKLSAgICB3aGlsZSAoY29tbWEudHlwZV8gPT0gdG9rZW5D
b21tZW50ICYmIGZpbmFsaXplVG9rZW5PaykKLSAgICAgIGZpbmFsaXplVG9rZW5PayA9IHJlYWRU
b2tlbihjb21tYSk7Ci0gICAgaWYgKGNvbW1hLnR5cGVfID09IHRva2VuT2JqZWN0RW5kKQotICAg
ICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJuIGFkZEVycm9yQW5kUmVjb3ZlcigKLSAgICAg
ICJNaXNzaW5nICd9JyBvciBvYmplY3QgbWVtYmVyIG5hbWUiLCB0b2tlbk5hbWUsIHRva2VuT2Jq
ZWN0RW5kKTsKLX0KLQotYm9vbCBSZWFkZXI6OnJlYWRBcnJheShUb2tlbiYgdG9rZW5TdGFydCkg
ewotICBWYWx1ZSBpbml0KGFycmF5VmFsdWUpOwotICBjdXJyZW50VmFsdWUoKS5zd2FwUGF5bG9h
ZChpbml0KTsKLSAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0U3RhcnQodG9rZW5TdGFydC5zdGFy
dF8gLSBiZWdpbl8pOwotICBza2lwU3BhY2VzKCk7Ci0gIGlmICgqY3VycmVudF8gPT0gJ10nKSAv
LyBlbXB0eSBhcnJheQotICB7Ci0gICAgVG9rZW4gZW5kQXJyYXk7Ci0gICAgcmVhZFRva2VuKGVu
ZEFycmF5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpbnQgaW5kZXggPSAwOwotICBmb3Ig
KDs7KSB7Ci0gICAgVmFsdWUmIHZhbHVlID0gY3VycmVudFZhbHVlKClbaW5kZXgrK107Ci0gICAg
bm9kZXNfLnB1c2goJnZhbHVlKTsKLSAgICBib29sIG9rID0gcmVhZFZhbHVlKCk7Ci0gICAgbm9k
ZXNfLnBvcCgpOwotICAgIGlmICghb2spIC8vIGVycm9yIGFscmVhZHkgc2V0Ci0gICAgICByZXR1
cm4gcmVjb3ZlckZyb21FcnJvcih0b2tlbkFycmF5RW5kKTsKLQotICAgIFRva2VuIHRva2VuOwot
ICAgIC8vIEFjY2VwdCBDb21tZW50IGFmdGVyIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkuCi0gICAg
b2sgPSByZWFkVG9rZW4odG9rZW4pOwotICAgIHdoaWxlICh0b2tlbi50eXBlXyA9PSB0b2tlbkNv
bW1lbnQgJiYgb2spIHsKLSAgICAgIG9rID0gcmVhZFRva2VuKHRva2VuKTsKLSAgICB9Ci0gICAg
Ym9vbCBiYWRUb2tlblR5cGUgPQotICAgICAgICAodG9rZW4udHlwZV8gIT0gdG9rZW5BcnJheVNl
cGFyYXRvciAmJiB0b2tlbi50eXBlXyAhPSB0b2tlbkFycmF5RW5kKTsKLSAgICBpZiAoIW9rIHx8
IGJhZFRva2VuVHlwZSkgewotICAgICAgcmV0dXJuIGFkZEVycm9yQW5kUmVjb3ZlcigKLSAgICAg
ICAgICAiTWlzc2luZyAnLCcgb3IgJ10nIGluIGFycmF5IGRlY2xhcmF0aW9uIiwgdG9rZW4sIHRv
a2VuQXJyYXlFbmQpOwotICAgIH0KLSAgICBpZiAodG9rZW4udHlwZV8gPT0gdG9rZW5BcnJheUVu
ZCkKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlYWRlcjo6
ZGVjb2RlTnVtYmVyKFRva2VuJiB0b2tlbikgewotICBWYWx1ZSBkZWNvZGVkOwotICBpZiAoIWRl
Y29kZU51bWJlcih0b2tlbiwgZGVjb2RlZCkpCi0gICAgcmV0dXJuIGZhbHNlOwotICBjdXJyZW50
VmFsdWUoKS5zd2FwUGF5bG9hZChkZWNvZGVkKTsKLSAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0
U3RhcnQodG9rZW4uc3RhcnRfIC0gYmVnaW5fKTsKLSAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0
TGltaXQodG9rZW4uZW5kXyAtIGJlZ2luXyk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJl
YWRlcjo6ZGVjb2RlTnVtYmVyKFRva2VuJiB0b2tlbiwgVmFsdWUmIGRlY29kZWQpIHsKLSAgLy8g
QXR0ZW1wdHMgdG8gcGFyc2UgdGhlIG51bWJlciBhcyBhbiBpbnRlZ2VyLiBJZiB0aGUgbnVtYmVy
IGlzCi0gIC8vIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBvZiBhbiBp
bnRlZ2VyIHRoZW4KLSAgLy8gd2UgZGVjb2RlIHRoZSBudW1iZXIgYXMgYSBkb3VibGUuCi0gIExv
Y2F0aW9uIGN1cnJlbnQgPSB0b2tlbi5zdGFydF87Ci0gIGJvb2wgaXNOZWdhdGl2ZSA9ICpjdXJy
ZW50ID09ICctJzsKLSAgaWYgKGlzTmVnYXRpdmUpCi0gICAgKytjdXJyZW50OwotICAvLyBUT0RP
OiBIZWxwIHRoZSBjb21waWxlciBkbyB0aGUgZGl2IGFuZCBtb2QgYXQgY29tcGlsZSB0aW1lIG9y
IGdldCByaWQgb2YgdGhlbS4KLSAgVmFsdWU6Okxhcmdlc3RVSW50IG1heEludGVnZXJWYWx1ZSA9
Ci0gICAgICBpc05lZ2F0aXZlID8gVmFsdWU6Okxhcmdlc3RVSW50KFZhbHVlOjptYXhMYXJnZXN0
SW50KSArIDEKLSAgICAgICAgICAgICAgICAgOiBWYWx1ZTo6bWF4TGFyZ2VzdFVJbnQ7Ci0gIFZh
bHVlOjpMYXJnZXN0VUludCB0aHJlc2hvbGQgPSBtYXhJbnRlZ2VyVmFsdWUgLyAxMDsKLSAgVmFs
dWU6Okxhcmdlc3RVSW50IHZhbHVlID0gMDsKLSAgd2hpbGUgKGN1cnJlbnQgPCB0b2tlbi5lbmRf
KSB7Ci0gICAgQ2hhciBjID0gKmN1cnJlbnQrKzsKLSAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzkn
KQotICAgICAgcmV0dXJuIGRlY29kZURvdWJsZSh0b2tlbiwgZGVjb2RlZCk7Ci0gICAgVmFsdWU6
OlVJbnQgZGlnaXQoYyAtICcwJyk7Ci0gICAgaWYgKHZhbHVlID49IHRocmVzaG9sZCkgewotICAg
ICAgLy8gV2UndmUgaGl0IG9yIGV4Y2VlZGVkIHRoZSBtYXggdmFsdWUgZGl2aWRlZCBieSAxMCAo
cm91bmRlZCBkb3duKS4gSWYKLSAgICAgIC8vIGEpIHdlJ3ZlIG9ubHkganVzdCB0b3VjaGVkIHRo
ZSBsaW1pdCwgYikgdGhpcyBpcyB0aGUgbGFzdCBkaWdpdCwgYW5kCi0gICAgICAvLyBjKSBpdCdz
IHNtYWxsIGVub3VnaCB0byBmaXQgaW4gdGhhdCByb3VuZGluZyBkZWx0YSwgd2UncmUgb2theS4K
LSAgICAgIC8vIE90aGVyd2lzZSB0cmVhdCB0aGlzIG51bWJlciBhcyBhIGRvdWJsZSB0byBhdm9p
ZCBvdmVyZmxvdy4KLSAgICAgIGlmICh2YWx1ZSA+IHRocmVzaG9sZCB8fCBjdXJyZW50ICE9IHRv
a2VuLmVuZF8gfHwKLSAgICAgICAgICBkaWdpdCA+IG1heEludGVnZXJWYWx1ZSAlIDEwKSB7Ci0g
ICAgICAgIHJldHVybiBkZWNvZGVEb3VibGUodG9rZW4sIGRlY29kZWQpOwotICAgICAgfQotICAg
IH0KLSAgICB2YWx1ZSA9IHZhbHVlICogMTAgKyBkaWdpdDsKLSAgfQotICBpZiAoaXNOZWdhdGl2
ZSAmJiB2YWx1ZSA9PSBtYXhJbnRlZ2VyVmFsdWUpCi0gICAgZGVjb2RlZCA9IFZhbHVlOjptaW5M
YXJnZXN0SW50OwotICBlbHNlIGlmIChpc05lZ2F0aXZlKQotICAgIGRlY29kZWQgPSAtVmFsdWU6
Okxhcmdlc3RJbnQodmFsdWUpOwotICBlbHNlIGlmICh2YWx1ZSA8PSBWYWx1ZTo6TGFyZ2VzdFVJ
bnQoVmFsdWU6Om1heEludCkpCi0gICAgZGVjb2RlZCA9IFZhbHVlOjpMYXJnZXN0SW50KHZhbHVl
KTsKLSAgZWxzZQotICAgIGRlY29kZWQgPSB2YWx1ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgUmVhZGVyOjpkZWNvZGVEb3VibGUoVG9rZW4mIHRva2VuKSB7Ci0gIFZhbHVlIGRlY29kZWQ7
Ci0gIGlmICghZGVjb2RlRG91YmxlKHRva2VuLCBkZWNvZGVkKSkKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIGN1cnJlbnRWYWx1ZSgpLnN3YXBQYXlsb2FkKGRlY29kZWQpOwotICBjdXJyZW50VmFsdWUo
KS5zZXRPZmZzZXRTdGFydCh0b2tlbi5zdGFydF8gLSBiZWdpbl8pOwotICBjdXJyZW50VmFsdWUo
KS5zZXRPZmZzZXRMaW1pdCh0b2tlbi5lbmRfIC0gYmVnaW5fKTsKLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgUmVhZGVyOjpkZWNvZGVEb3VibGUoVG9rZW4mIHRva2VuLCBWYWx1ZSYgZGVjb2Rl
ZCkgewotICBkb3VibGUgdmFsdWUgPSAwOwotICBzdGQ6OnN0cmluZyBidWZmZXIodG9rZW4uc3Rh
cnRfLCB0b2tlbi5lbmRfKTsKLSAgc3RkOjppc3RyaW5nc3RyZWFtIGlzKGJ1ZmZlcik7Ci0gIGlm
ICghKGlzID4+IHZhbHVlKSkKLSAgICByZXR1cm4gYWRkRXJyb3IoIiciICsgc3RkOjpzdHJpbmco
dG9rZW4uc3RhcnRfLCB0b2tlbi5lbmRfKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiJyBp
cyBub3QgYSBudW1iZXIuIiwKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4pOwotICBkZWNvZGVk
ID0gdmFsdWU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlYWRlcjo6ZGVjb2RlU3RyaW5n
KFRva2VuJiB0b2tlbikgewotICBzdGQ6OnN0cmluZyBkZWNvZGVkX3N0cmluZzsKLSAgaWYgKCFk
ZWNvZGVTdHJpbmcodG9rZW4sIGRlY29kZWRfc3RyaW5nKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IFZhbHVlIGRlY29kZWQoZGVjb2RlZF9zdHJpbmcpOwotICBjdXJyZW50VmFsdWUoKS5zd2FwUGF5
bG9hZChkZWNvZGVkKTsKLSAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0U3RhcnQodG9rZW4uc3Rh
cnRfIC0gYmVnaW5fKTsKLSAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0TGltaXQodG9rZW4uZW5k
XyAtIGJlZ2luXyk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlYWRlcjo6ZGVjb2RlU3Ry
aW5nKFRva2VuJiB0b2tlbiwgc3RkOjpzdHJpbmcmIGRlY29kZWQpIHsKLSAgZGVjb2RlZC5yZXNl
cnZlKHRva2VuLmVuZF8gLSB0b2tlbi5zdGFydF8gLSAyKTsKLSAgTG9jYXRpb24gY3VycmVudCA9
IHRva2VuLnN0YXJ0XyArIDE7IC8vIHNraXAgJyInCi0gIExvY2F0aW9uIGVuZCA9IHRva2VuLmVu
ZF8gLSAxOyAgICAgICAvLyBkbyBub3QgaW5jbHVkZSAnIicKLSAgd2hpbGUgKGN1cnJlbnQgIT0g
ZW5kKSB7Ci0gICAgQ2hhciBjID0gKmN1cnJlbnQrKzsKLSAgICBpZiAoYyA9PSAnIicpCi0gICAg
ICBicmVhazsKLSAgICBlbHNlIGlmIChjID09ICdcXCcpIHsKLSAgICAgIGlmIChjdXJyZW50ID09
IGVuZCkKLSAgICAgICAgcmV0dXJuIGFkZEVycm9yKCJFbXB0eSBlc2NhcGUgc2VxdWVuY2UgaW4g
c3RyaW5nIiwgdG9rZW4sIGN1cnJlbnQpOwotICAgICAgQ2hhciBlc2NhcGUgPSAqY3VycmVudCsr
OwotICAgICAgc3dpdGNoIChlc2NhcGUpIHsKLSAgICAgIGNhc2UgJyInOgotICAgICAgICBkZWNv
ZGVkICs9ICciJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICcvJzoKLSAgICAgICAgZGVj
b2RlZCArPSAnLyc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnXFwnOgotICAgICAgICBk
ZWNvZGVkICs9ICdcXCc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnYic6Ci0gICAgICAg
IGRlY29kZWQgKz0gJ1xiJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdmJzoKLSAgICAg
ICAgZGVjb2RlZCArPSAnXGYnOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ24nOgotICAg
ICAgICBkZWNvZGVkICs9ICdcbic7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAncic6Ci0g
ICAgICAgIGRlY29kZWQgKz0gJ1xyJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICd0JzoK
LSAgICAgICAgZGVjb2RlZCArPSAnXHQnOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ3Un
OiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCB1bmljb2RlOwotICAgICAgICBpZiAoIWRlY29kZVVu
aWNvZGVDb2RlUG9pbnQodG9rZW4sIGN1cnJlbnQsIGVuZCwgdW5pY29kZSkpCi0gICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBkZWNvZGVkICs9IGNvZGVQb2ludFRvVVRGOCh1bmljb2Rl
KTsKLSAgICAgIH0gYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRkRXJy
b3IoIkJhZCBlc2NhcGUgc2VxdWVuY2UgaW4gc3RyaW5nIiwgdG9rZW4sIGN1cnJlbnQpOwotICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBkZWNvZGVkICs9IGM7Ci0gICAgfQotICB9Ci0gIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFJlYWRlcjo6ZGVjb2RlVW5pY29kZUNvZGVQb2ludChUb2tl
biYgdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbiYg
Y3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0aW9uIGVu
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCYgdW5p
Y29kZSkgewotCi0gIGlmICghZGVjb2RlVW5pY29kZUVzY2FwZVNlcXVlbmNlKHRva2VuLCBjdXJy
ZW50LCBlbmQsIHVuaWNvZGUpKQotICAgIHJldHVybiBmYWxzZTsKLSAgaWYgKHVuaWNvZGUgPj0g
MHhEODAwICYmIHVuaWNvZGUgPD0gMHhEQkZGKSB7Ci0gICAgLy8gc3Vycm9nYXRlIHBhaXJzCi0g
ICAgaWYgKGVuZCAtIGN1cnJlbnQgPCA2KQotICAgICAgcmV0dXJuIGFkZEVycm9yKAotICAgICAg
ICAgICJhZGRpdGlvbmFsIHNpeCBjaGFyYWN0ZXJzIGV4cGVjdGVkIHRvIHBhcnNlIHVuaWNvZGUg
c3Vycm9nYXRlIHBhaXIuIiwKLSAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICBjdXJyZW50KTsK
LSAgICB1bnNpZ25lZCBpbnQgc3Vycm9nYXRlUGFpcjsKLSAgICBpZiAoKihjdXJyZW50KyspID09
ICdcXCcgJiYgKihjdXJyZW50KyspID09ICd1JykgewotICAgICAgaWYgKGRlY29kZVVuaWNvZGVF
c2NhcGVTZXF1ZW5jZSh0b2tlbiwgY3VycmVudCwgZW5kLCBzdXJyb2dhdGVQYWlyKSkgewotICAg
ICAgICB1bmljb2RlID0gMHgxMDAwMCArICgodW5pY29kZSAmIDB4M0ZGKSA8PCAxMCkgKyAoc3Vy
cm9nYXRlUGFpciAmIDB4M0ZGKTsKLSAgICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSBlbHNlCi0gICAgICByZXR1cm4gYWRkRXJyb3IoImV4cGVjdGluZyBhbm90aGVyIFxc
dSB0b2tlbiB0byBiZWdpbiB0aGUgc2Vjb25kIGhhbGYgb2YgIgotICAgICAgICAgICAgICAgICAg
ICAgICJhIHVuaWNvZGUgc3Vycm9nYXRlIHBhaXIiLAotICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLAotICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQpOwotICB9Ci0gIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFJlYWRlcjo6ZGVjb2RlVW5pY29kZUVzY2FwZVNlcXVlbmNlKFRva2VuJiB0
b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb24m
IGN1cnJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0
aW9uIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50JiB1bmljb2RlKSB7Ci0gIGlmIChlbmQgLSBjdXJyZW50IDwgNCkKLSAgICByZXR1cm4g
YWRkRXJyb3IoCi0gICAgICAgICJCYWQgdW5pY29kZSBlc2NhcGUgc2VxdWVuY2UgaW4gc3RyaW5n
OiBmb3VyIGRpZ2l0cyBleHBlY3RlZC4iLAotICAgICAgICB0b2tlbiwKLSAgICAgICAgY3VycmVu
dCk7Ci0gIHVuaWNvZGUgPSAwOwotICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgNDsgKytp
bmRleCkgewotICAgIENoYXIgYyA9ICpjdXJyZW50Kys7Ci0gICAgdW5pY29kZSAqPSAxNjsKLSAg
ICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCi0gICAgICB1bmljb2RlICs9IGMgLSAnMCc7Ci0g
ICAgZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCi0gICAgICB1bmljb2RlICs9IGMgLSAn
YScgKyAxMDsKLSAgICBlbHNlIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykKLSAgICAgIHVuaWNv
ZGUgKz0gYyAtICdBJyArIDEwOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBhZGRFcnJvcigKLSAg
ICAgICAgICAiQmFkIHVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlIGluIHN0cmluZzogaGV4YWRlY2lt
YWwgZGlnaXQgZXhwZWN0ZWQuIiwKLSAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICBjdXJyZW50
KTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAotUmVhZGVyOjphZGRFcnJvcihjb25z
dCBzdGQ6OnN0cmluZyYgbWVzc2FnZSwgVG9rZW4mIHRva2VuLCBMb2NhdGlvbiBleHRyYSkgewot
ICBFcnJvckluZm8gaW5mbzsKLSAgaW5mby50b2tlbl8gPSB0b2tlbjsKLSAgaW5mby5tZXNzYWdl
XyA9IG1lc3NhZ2U7Ci0gIGluZm8uZXh0cmFfID0gZXh0cmE7Ci0gIGVycm9yc18ucHVzaF9iYWNr
KGluZm8pOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVhZGVyOjpyZWNvdmVyRnJvbUVy
cm9yKFRva2VuVHlwZSBza2lwVW50aWxUb2tlbikgewotICBpbnQgZXJyb3JDb3VudCA9IGludChl
cnJvcnNfLnNpemUoKSk7Ci0gIFRva2VuIHNraXA7Ci0gIGZvciAoOzspIHsKLSAgICBpZiAoIXJl
YWRUb2tlbihza2lwKSkKLSAgICAgIGVycm9yc18ucmVzaXplKGVycm9yQ291bnQpOyAvLyBkaXNj
YXJkIGVycm9ycyBjYXVzZWQgYnkgcmVjb3ZlcnkKLSAgICBpZiAoc2tpcC50eXBlXyA9PSBza2lw
VW50aWxUb2tlbiB8fCBza2lwLnR5cGVfID09IHRva2VuRW5kT2ZTdHJlYW0pCi0gICAgICBicmVh
azsKLSAgfQotICBlcnJvcnNfLnJlc2l6ZShlcnJvckNvdW50KTsKLSAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlYWRlcjo6YWRkRXJyb3JBbmRSZWNvdmVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBt
ZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2tlbiYgdG9rZW4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuVHlwZSBza2lwVW50aWxUb2tlbikg
ewotICBhZGRFcnJvcihtZXNzYWdlLCB0b2tlbik7Ci0gIHJldHVybiByZWNvdmVyRnJvbUVycm9y
KHNraXBVbnRpbFRva2VuKTsKLX0KLQotVmFsdWUmIFJlYWRlcjo6Y3VycmVudFZhbHVlKCkgeyBy
ZXR1cm4gKihub2Rlc18udG9wKCkpOyB9Ci0KLVJlYWRlcjo6Q2hhciBSZWFkZXI6OmdldE5leHRD
aGFyKCkgewotICBpZiAoY3VycmVudF8gPT0gZW5kXykKLSAgICByZXR1cm4gMDsKLSAgcmV0dXJu
ICpjdXJyZW50XysrOwotfQotCi12b2lkIFJlYWRlcjo6Z2V0TG9jYXRpb25MaW5lQW5kQ29sdW1u
KExvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQmIGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYg
Y29sdW1uKSBjb25zdCB7Ci0gIExvY2F0aW9uIGN1cnJlbnQgPSBiZWdpbl87Ci0gIExvY2F0aW9u
IGxhc3RMaW5lU3RhcnQgPSBjdXJyZW50OwotICBsaW5lID0gMDsKLSAgd2hpbGUgKGN1cnJlbnQg
PCBsb2NhdGlvbiAmJiBjdXJyZW50ICE9IGVuZF8pIHsKLSAgICBDaGFyIGMgPSAqY3VycmVudCsr
OwotICAgIGlmIChjID09ICdccicpIHsKLSAgICAgIGlmICgqY3VycmVudCA9PSAnXG4nKQotICAg
ICAgICArK2N1cnJlbnQ7Ci0gICAgICBsYXN0TGluZVN0YXJ0ID0gY3VycmVudDsKLSAgICAgICsr
bGluZTsKLSAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewotICAgICAgbGFzdExpbmVTdGFydCA9
IGN1cnJlbnQ7Ci0gICAgICArK2xpbmU7Ci0gICAgfQotICB9Ci0gIC8vIGNvbHVtbiAmIGxpbmUg
c3RhcnQgYXQgMQotICBjb2x1bW4gPSBpbnQobG9jYXRpb24gLSBsYXN0TGluZVN0YXJ0KSArIDE7
Ci0gICsrbGluZTsKLX0KLQotc3RkOjpzdHJpbmcgUmVhZGVyOjpnZXRMb2NhdGlvbkxpbmVBbmRD
b2x1bW4oTG9jYXRpb24gbG9jYXRpb24pIGNvbnN0IHsKLSAgaW50IGxpbmUsIGNvbHVtbjsKLSAg
Z2V0TG9jYXRpb25MaW5lQW5kQ29sdW1uKGxvY2F0aW9uLCBsaW5lLCBjb2x1bW4pOwotICBjaGFy
IGJ1ZmZlclsxOCArIDE2ICsgMTYgKyAxXTsKLSAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVm
ZmVyKSwgIkxpbmUgJWQsIENvbHVtbiAlZCIsIGxpbmUsIGNvbHVtbik7Ci0gIHJldHVybiBidWZm
ZXI7Ci19Ci0KLS8vIERlcHJlY2F0ZWQuIFByZXNlcnZlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJp
bGl0eQotc3RkOjpzdHJpbmcgUmVhZGVyOjpnZXRGb3JtYXRlZEVycm9yTWVzc2FnZXMoKSBjb25z
dCB7Ci0gIHJldHVybiBnZXRGb3JtYXR0ZWRFcnJvck1lc3NhZ2VzKCk7Ci19Ci0KLXN0ZDo6c3Ry
aW5nIFJlYWRlcjo6Z2V0Rm9ybWF0dGVkRXJyb3JNZXNzYWdlcygpIGNvbnN0IHsKLSAgc3RkOjpz
dHJpbmcgZm9ybWF0dGVkTWVzc2FnZTsKLSAgZm9yIChFcnJvcnM6OmNvbnN0X2l0ZXJhdG9yIGl0
RXJyb3IgPSBlcnJvcnNfLmJlZ2luKCk7Ci0gICAgICAgaXRFcnJvciAhPSBlcnJvcnNfLmVuZCgp
OwotICAgICAgICsraXRFcnJvcikgewotICAgIGNvbnN0IEVycm9ySW5mbyYgZXJyb3IgPSAqaXRF
cnJvcjsKLSAgICBmb3JtYXR0ZWRNZXNzYWdlICs9Ci0gICAgICAgICIqICIgKyBnZXRMb2NhdGlv
bkxpbmVBbmRDb2x1bW4oZXJyb3IudG9rZW5fLnN0YXJ0XykgKyAiXG4iOwotICAgIGZvcm1hdHRl
ZE1lc3NhZ2UgKz0gIiAgIiArIGVycm9yLm1lc3NhZ2VfICsgIlxuIjsKLSAgICBpZiAoZXJyb3Iu
ZXh0cmFfKQotICAgICAgZm9ybWF0dGVkTWVzc2FnZSArPQotICAgICAgICAgICJTZWUgIiArIGdl
dExvY2F0aW9uTGluZUFuZENvbHVtbihlcnJvci5leHRyYV8pICsgIiBmb3IgZGV0YWlsLlxuIjsK
LSAgfQotICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZTsKLX0KLQotc3RkOjp2ZWN0b3I8UmVhZGVy
OjpTdHJ1Y3R1cmVkRXJyb3I+IFJlYWRlcjo6Z2V0U3RydWN0dXJlZEVycm9ycygpIGNvbnN0IHsK
LSAgc3RkOjp2ZWN0b3I8UmVhZGVyOjpTdHJ1Y3R1cmVkRXJyb3I+IGFsbEVycm9yczsKLSAgZm9y
IChFcnJvcnM6OmNvbnN0X2l0ZXJhdG9yIGl0RXJyb3IgPSBlcnJvcnNfLmJlZ2luKCk7Ci0gICAg
ICAgaXRFcnJvciAhPSBlcnJvcnNfLmVuZCgpOwotICAgICAgICsraXRFcnJvcikgewotICAgIGNv
bnN0IEVycm9ySW5mbyYgZXJyb3IgPSAqaXRFcnJvcjsKLSAgICBSZWFkZXI6OlN0cnVjdHVyZWRF
cnJvciBzdHJ1Y3R1cmVkOwotICAgIHN0cnVjdHVyZWQub2Zmc2V0X3N0YXJ0ID0gZXJyb3IudG9r
ZW5fLnN0YXJ0XyAtIGJlZ2luXzsKLSAgICBzdHJ1Y3R1cmVkLm9mZnNldF9saW1pdCA9IGVycm9y
LnRva2VuXy5lbmRfIC0gYmVnaW5fOwotICAgIHN0cnVjdHVyZWQubWVzc2FnZSA9IGVycm9yLm1l
c3NhZ2VfOwotICAgIGFsbEVycm9ycy5wdXNoX2JhY2soc3RydWN0dXJlZCk7Ci0gIH0KLSAgcmV0
dXJuIGFsbEVycm9yczsKLX0KLQotYm9vbCBSZWFkZXI6OnB1c2hFcnJvcihjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKSB7Ci0gIHNpemVfdCBsZW5ndGggPSBl
bmRfIC0gYmVnaW5fOwotICBpZih2YWx1ZS5nZXRPZmZzZXRTdGFydCgpID4gbGVuZ3RoCi0gICAg
fHwgdmFsdWUuZ2V0T2Zmc2V0TGltaXQoKSA+IGxlbmd0aCkKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IFRva2VuIHRva2VuOwotICB0b2tlbi50eXBlXyA9IHRva2VuRXJyb3I7Ci0gIHRva2VuLnN0YXJ0
XyA9IGJlZ2luXyArIHZhbHVlLmdldE9mZnNldFN0YXJ0KCk7Ci0gIHRva2VuLmVuZF8gPSBlbmRf
ICsgdmFsdWUuZ2V0T2Zmc2V0TGltaXQoKTsKLSAgRXJyb3JJbmZvIGluZm87Ci0gIGluZm8udG9r
ZW5fID0gdG9rZW47Ci0gIGluZm8ubWVzc2FnZV8gPSBtZXNzYWdlOwotICBpbmZvLmV4dHJhXyA9
IDA7Ci0gIGVycm9yc18ucHVzaF9iYWNrKGluZm8pOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBSZWFkZXI6OnB1c2hFcnJvcihjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBWYWx1ZSYgZXh0cmEpIHsKLSAgc2l6ZV90IGxlbmd0aCA9IGVuZF8g
LSBiZWdpbl87Ci0gIGlmKHZhbHVlLmdldE9mZnNldFN0YXJ0KCkgPiBsZW5ndGgKLSAgICB8fCB2
YWx1ZS5nZXRPZmZzZXRMaW1pdCgpID4gbGVuZ3RoCi0gICAgfHwgZXh0cmEuZ2V0T2Zmc2V0TGlt
aXQoKSA+IGxlbmd0aCkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIFRva2VuIHRva2VuOwotICB0b2tl
bi50eXBlXyA9IHRva2VuRXJyb3I7Ci0gIHRva2VuLnN0YXJ0XyA9IGJlZ2luXyArIHZhbHVlLmdl
dE9mZnNldFN0YXJ0KCk7Ci0gIHRva2VuLmVuZF8gPSBiZWdpbl8gKyB2YWx1ZS5nZXRPZmZzZXRM
aW1pdCgpOwotICBFcnJvckluZm8gaW5mbzsKLSAgaW5mby50b2tlbl8gPSB0b2tlbjsKLSAgaW5m
by5tZXNzYWdlXyA9IG1lc3NhZ2U7Ci0gIGluZm8uZXh0cmFfID0gYmVnaW5fICsgZXh0cmEuZ2V0
T2Zmc2V0U3RhcnQoKTsKLSAgZXJyb3JzXy5wdXNoX2JhY2soaW5mbyk7Ci0gIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFJlYWRlcjo6Z29vZCgpIGNvbnN0IHsKLSAgcmV0dXJuICFlcnJvcnNfLnNp
emUoKTsKLX0KLQotLy8gZXhhY3QgY29weSBvZiBGZWF0dXJlcwotY2xhc3MgT3VyRmVhdHVyZXMg
ewotcHVibGljOgotICBzdGF0aWMgT3VyRmVhdHVyZXMgYWxsKCk7Ci0gIGJvb2wgYWxsb3dDb21t
ZW50c187Ci0gIGJvb2wgc3RyaWN0Um9vdF87Ci0gIGJvb2wgYWxsb3dEcm9wcGVkTnVsbFBsYWNl
aG9sZGVyc187Ci0gIGJvb2wgYWxsb3dOdW1lcmljS2V5c187Ci0gIGJvb2wgYWxsb3dTaW5nbGVR
dW90ZXNfOwotICBib29sIGZhaWxJZkV4dHJhXzsKLSAgYm9vbCByZWplY3REdXBLZXlzXzsKLSAg
Ym9vbCBhbGxvd1NwZWNpYWxGbG9hdHNfOwotICBpbnQgc3RhY2tMaW1pdF87Ci19OyAgLy8gT3Vy
RmVhdHVyZXMKLQotLy8gZXhhY3QgY29weSBvZiBJbXBsZW1lbnRhdGlvbiBvZiBjbGFzcyBGZWF0
dXJlcwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotT3VyRmVhdHVyZXMg
T3VyRmVhdHVyZXM6OmFsbCgpIHsgcmV0dXJuIE91ckZlYXR1cmVzKCk7IH0KLQotLy8gSW1wbGVt
ZW50YXRpb24gb2YgY2xhc3MgUmVhZGVyCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotCi0vLyBleGFjdCBjb3B5IG9mIFJlYWRlciwgcmVuYW1lZCB0byBPdXJSZWFkZXIKLWNs
YXNzIE91clJlYWRlciB7Ci1wdWJsaWM6Ci0gIHR5cGVkZWYgY2hhciBDaGFyOwotICB0eXBlZGVm
IGNvbnN0IENoYXIqIExvY2F0aW9uOwotICBzdHJ1Y3QgU3RydWN0dXJlZEVycm9yIHsKLSAgICBz
aXplX3Qgb2Zmc2V0X3N0YXJ0OwotICAgIHNpemVfdCBvZmZzZXRfbGltaXQ7Ci0gICAgc3RkOjpz
dHJpbmcgbWVzc2FnZTsKLSAgfTsKLQotICBPdXJSZWFkZXIoT3VyRmVhdHVyZXMgY29uc3QmIGZl
YXR1cmVzKTsKLSAgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBiZWdpbkRvYywKLSAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBlbmREb2MsCi0gICAgICAgICAgICAgVmFsdWUmIHJvb3QsCi0gICAgICAg
ICAgICAgYm9vbCBjb2xsZWN0Q29tbWVudHMgPSB0cnVlKTsKLSAgc3RkOjpzdHJpbmcgZ2V0Rm9y
bWF0dGVkRXJyb3JNZXNzYWdlcygpIGNvbnN0OwotICBzdGQ6OnZlY3RvcjxTdHJ1Y3R1cmVkRXJy
b3I+IGdldFN0cnVjdHVyZWRFcnJvcnMoKSBjb25zdDsKLSAgYm9vbCBwdXNoRXJyb3IoY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSk7Ci0gIGJvb2wgcHVzaEVy
cm9yKGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFZhbHVlJiBleHRyYSk7Ci0gIGJvb2wgZ29vZCgpIGNvbnN0OwotCi1wcml2YXRlOgotICBPdXJS
ZWFkZXIoT3VyUmVhZGVyIGNvbnN0Jik7ICAvLyBubyBpbXBsCi0gIHZvaWQgb3BlcmF0b3I9KE91
clJlYWRlciBjb25zdCYpOyAgLy8gbm8gaW1wbAotCi0gIGVudW0gVG9rZW5UeXBlIHsKLSAgICB0
b2tlbkVuZE9mU3RyZWFtID0gMCwKLSAgICB0b2tlbk9iamVjdEJlZ2luLAotICAgIHRva2VuT2Jq
ZWN0RW5kLAotICAgIHRva2VuQXJyYXlCZWdpbiwKLSAgICB0b2tlbkFycmF5RW5kLAotICAgIHRv
a2VuU3RyaW5nLAotICAgIHRva2VuTnVtYmVyLAotICAgIHRva2VuVHJ1ZSwKLSAgICB0b2tlbkZh
bHNlLAotICAgIHRva2VuTnVsbCwKLSAgICB0b2tlbk5hTiwKLSAgICB0b2tlblBvc0luZiwKLSAg
ICB0b2tlbk5lZ0luZiwKLSAgICB0b2tlbkFycmF5U2VwYXJhdG9yLAotICAgIHRva2VuTWVtYmVy
U2VwYXJhdG9yLAotICAgIHRva2VuQ29tbWVudCwKLSAgICB0b2tlbkVycm9yCi0gIH07Ci0KLSAg
Y2xhc3MgVG9rZW4gewotICBwdWJsaWM6Ci0gICAgVG9rZW5UeXBlIHR5cGVfOwotICAgIExvY2F0
aW9uIHN0YXJ0XzsKLSAgICBMb2NhdGlvbiBlbmRfOwotICB9OwotCi0gIGNsYXNzIEVycm9ySW5m
byB7Ci0gIHB1YmxpYzoKLSAgICBUb2tlbiB0b2tlbl87Ci0gICAgc3RkOjpzdHJpbmcgbWVzc2Fn
ZV87Ci0gICAgTG9jYXRpb24gZXh0cmFfOwotICB9OwotCi0gIHR5cGVkZWYgc3RkOjpkZXF1ZTxF
cnJvckluZm8+IEVycm9yczsKLQotICBib29sIHJlYWRUb2tlbihUb2tlbiYgdG9rZW4pOwotICB2
b2lkIHNraXBTcGFjZXMoKTsKLSAgYm9vbCBtYXRjaChMb2NhdGlvbiBwYXR0ZXJuLCBpbnQgcGF0
dGVybkxlbmd0aCk7Ci0gIGJvb2wgcmVhZENvbW1lbnQoKTsKLSAgYm9vbCByZWFkQ1N0eWxlQ29t
bWVudCgpOwotICBib29sIHJlYWRDcHBTdHlsZUNvbW1lbnQoKTsKLSAgYm9vbCByZWFkU3RyaW5n
KCk7Ci0gIGJvb2wgcmVhZFN0cmluZ1NpbmdsZVF1b3RlKCk7Ci0gIGJvb2wgcmVhZE51bWJlcihi
b29sIGNoZWNrSW5mKTsKLSAgYm9vbCByZWFkVmFsdWUoKTsKLSAgYm9vbCByZWFkT2JqZWN0KFRv
a2VuJiB0b2tlbik7Ci0gIGJvb2wgcmVhZEFycmF5KFRva2VuJiB0b2tlbik7Ci0gIGJvb2wgZGVj
b2RlTnVtYmVyKFRva2VuJiB0b2tlbik7Ci0gIGJvb2wgZGVjb2RlTnVtYmVyKFRva2VuJiB0b2tl
biwgVmFsdWUmIGRlY29kZWQpOwotICBib29sIGRlY29kZVN0cmluZyhUb2tlbiYgdG9rZW4pOwot
ICBib29sIGRlY29kZVN0cmluZyhUb2tlbiYgdG9rZW4sIHN0ZDo6c3RyaW5nJiBkZWNvZGVkKTsK
LSAgYm9vbCBkZWNvZGVEb3VibGUoVG9rZW4mIHRva2VuKTsKLSAgYm9vbCBkZWNvZGVEb3VibGUo
VG9rZW4mIHRva2VuLCBWYWx1ZSYgZGVjb2RlZCk7Ci0gIGJvb2wgZGVjb2RlVW5pY29kZUNvZGVQ
b2ludChUb2tlbiYgdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlv
biYgY3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0aW9uIGVuZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCYgdW5pY29kZSk7Ci0g
IGJvb2wgZGVjb2RlVW5pY29kZUVzY2FwZVNlcXVlbmNlKFRva2VuJiB0b2tlbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb24mIGN1cnJlbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0aW9uIGVuZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50JiB1bmljb2RlKTsKLSAgYm9vbCBhZGRFcnJv
cihjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSwgVG9rZW4mIHRva2VuLCBMb2NhdGlvbiBleHRy
YSA9IDApOwotICBib29sIHJlY292ZXJGcm9tRXJyb3IoVG9rZW5UeXBlIHNraXBVbnRpbFRva2Vu
KTsKLSAgYm9vbCBhZGRFcnJvckFuZFJlY292ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuJiB0b2tlbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgVG9rZW5UeXBlIHNraXBVbnRpbFRva2VuKTsKLSAgdm9pZCBza2lwVW50aWxT
cGFjZSgpOwotICBWYWx1ZSYgY3VycmVudFZhbHVlKCk7Ci0gIENoYXIgZ2V0TmV4dENoYXIoKTsK
LSAgdm9pZAotICBnZXRMb2NhdGlvbkxpbmVBbmRDb2x1bW4oTG9jYXRpb24gbG9jYXRpb24sIGlu
dCYgbGluZSwgaW50JiBjb2x1bW4pIGNvbnN0OwotICBzdGQ6OnN0cmluZyBnZXRMb2NhdGlvbkxp
bmVBbmRDb2x1bW4oTG9jYXRpb24gbG9jYXRpb24pIGNvbnN0OwotICB2b2lkIGFkZENvbW1lbnQo
TG9jYXRpb24gYmVnaW4sIExvY2F0aW9uIGVuZCwgQ29tbWVudFBsYWNlbWVudCBwbGFjZW1lbnQp
OwotICB2b2lkIHNraXBDb21tZW50VG9rZW5zKFRva2VuJiB0b2tlbik7Ci0KLSAgdHlwZWRlZiBz
dGQ6OnN0YWNrPFZhbHVlKj4gTm9kZXM7Ci0gIE5vZGVzIG5vZGVzXzsKLSAgRXJyb3JzIGVycm9y
c187Ci0gIHN0ZDo6c3RyaW5nIGRvY3VtZW50XzsKLSAgTG9jYXRpb24gYmVnaW5fOwotICBMb2Nh
dGlvbiBlbmRfOwotICBMb2NhdGlvbiBjdXJyZW50XzsKLSAgTG9jYXRpb24gbGFzdFZhbHVlRW5k
XzsKLSAgVmFsdWUqIGxhc3RWYWx1ZV87Ci0gIHN0ZDo6c3RyaW5nIGNvbW1lbnRzQmVmb3JlXzsK
LSAgaW50IHN0YWNrRGVwdGhfOwotCi0gIE91ckZlYXR1cmVzIGNvbnN0IGZlYXR1cmVzXzsKLSAg
Ym9vbCBjb2xsZWN0Q29tbWVudHNfOwotfTsgIC8vIE91clJlYWRlcgotCi0vLyBjb21wbGV0ZSBj
b3B5IG9mIFJlYWQgaW1wbCwgZm9yIE91clJlYWRlcgotCi1PdXJSZWFkZXI6Ok91clJlYWRlcihP
dXJGZWF0dXJlcyBjb25zdCYgZmVhdHVyZXMpCi0gICAgOiBlcnJvcnNfKCksIGRvY3VtZW50Xygp
LCBiZWdpbl8oKSwgZW5kXygpLCBjdXJyZW50XygpLCBsYXN0VmFsdWVFbmRfKCksCi0gICAgICBs
YXN0VmFsdWVfKCksIGNvbW1lbnRzQmVmb3JlXygpLAotICAgICAgc3RhY2tEZXB0aF8oMCksCi0g
ICAgICBmZWF0dXJlc18oZmVhdHVyZXMpLCBjb2xsZWN0Q29tbWVudHNfKCkgewotfQotCi1ib29s
IE91clJlYWRlcjo6cGFyc2UoY29uc3QgY2hhciogYmVnaW5Eb2MsCi0gICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogZW5kRG9jLAotICAgICAgICAgICAgICAgICAgIFZhbHVlJiByb290LAot
ICAgICAgICAgICAgICAgICAgIGJvb2wgY29sbGVjdENvbW1lbnRzKSB7Ci0gIGlmICghZmVhdHVy
ZXNfLmFsbG93Q29tbWVudHNfKSB7Ci0gICAgY29sbGVjdENvbW1lbnRzID0gZmFsc2U7Ci0gIH0K
LQotICBiZWdpbl8gPSBiZWdpbkRvYzsKLSAgZW5kXyA9IGVuZERvYzsKLSAgY29sbGVjdENvbW1l
bnRzXyA9IGNvbGxlY3RDb21tZW50czsKLSAgY3VycmVudF8gPSBiZWdpbl87Ci0gIGxhc3RWYWx1
ZUVuZF8gPSAwOwotICBsYXN0VmFsdWVfID0gMDsKLSAgY29tbWVudHNCZWZvcmVfID0gIiI7Ci0g
IGVycm9yc18uY2xlYXIoKTsKLSAgd2hpbGUgKCFub2Rlc18uZW1wdHkoKSkKLSAgICBub2Rlc18u
cG9wKCk7Ci0gIG5vZGVzXy5wdXNoKCZyb290KTsKLQotICBzdGFja0RlcHRoXyA9IDA7Ci0gIGJv
b2wgc3VjY2Vzc2Z1bCA9IHJlYWRWYWx1ZSgpOwotICBUb2tlbiB0b2tlbjsKLSAgc2tpcENvbW1l
bnRUb2tlbnModG9rZW4pOwotICBpZiAoZmVhdHVyZXNfLmZhaWxJZkV4dHJhXykgewotICAgIGlm
ICh0b2tlbi50eXBlXyAhPSB0b2tlbkVycm9yICYmIHRva2VuLnR5cGVfICE9IHRva2VuRW5kT2ZT
dHJlYW0pIHsKLSAgICAgIGFkZEVycm9yKCJFeHRyYSBub24td2hpdGVzcGFjZSBhZnRlciBKU09O
IHZhbHVlLiIsIHRva2VuKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgaWYg
KGNvbGxlY3RDb21tZW50c18gJiYgIWNvbW1lbnRzQmVmb3JlXy5lbXB0eSgpKQotICAgIHJvb3Qu
c2V0Q29tbWVudChjb21tZW50c0JlZm9yZV8sIGNvbW1lbnRBZnRlcik7Ci0gIGlmIChmZWF0dXJl
c18uc3RyaWN0Um9vdF8pIHsKLSAgICBpZiAoIXJvb3QuaXNBcnJheSgpICYmICFyb290LmlzT2Jq
ZWN0KCkpIHsKLSAgICAgIC8vIFNldCBlcnJvciBsb2NhdGlvbiB0byBzdGFydCBvZiBkb2MsIGlk
ZWFsbHkgc2hvdWxkIGJlIGZpcnN0IHRva2VuIGZvdW5kCi0gICAgICAvLyBpbiBkb2MKLSAgICAg
IHRva2VuLnR5cGVfID0gdG9rZW5FcnJvcjsKLSAgICAgIHRva2VuLnN0YXJ0XyA9IGJlZ2luRG9j
OwotICAgICAgdG9rZW4uZW5kXyA9IGVuZERvYzsKLSAgICAgIGFkZEVycm9yKAotICAgICAgICAg
ICJBIHZhbGlkIEpTT04gZG9jdW1lbnQgbXVzdCBiZSBlaXRoZXIgYW4gYXJyYXkgb3IgYW4gb2Jq
ZWN0IHZhbHVlLiIsCi0gICAgICAgICAgdG9rZW4pOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgfQotICByZXR1cm4gc3VjY2Vzc2Z1bDsKLX0KLQotYm9vbCBPdXJSZWFkZXI6OnJlYWRW
YWx1ZSgpIHsKLSAgaWYgKHN0YWNrRGVwdGhfID49IGZlYXR1cmVzXy5zdGFja0xpbWl0XykgdGhy
b3dSdW50aW1lRXJyb3IoIkV4Y2VlZGVkIHN0YWNrTGltaXQgaW4gcmVhZFZhbHVlKCkuIik7Ci0g
ICsrc3RhY2tEZXB0aF87Ci0gIFRva2VuIHRva2VuOwotICBza2lwQ29tbWVudFRva2Vucyh0b2tl
bik7Ci0gIGJvb2wgc3VjY2Vzc2Z1bCA9IHRydWU7Ci0KLSAgaWYgKGNvbGxlY3RDb21tZW50c18g
JiYgIWNvbW1lbnRzQmVmb3JlXy5lbXB0eSgpKSB7Ci0gICAgY3VycmVudFZhbHVlKCkuc2V0Q29t
bWVudChjb21tZW50c0JlZm9yZV8sIGNvbW1lbnRCZWZvcmUpOwotICAgIGNvbW1lbnRzQmVmb3Jl
XyA9ICIiOwotICB9Ci0KLSAgc3dpdGNoICh0b2tlbi50eXBlXykgewotICBjYXNlIHRva2VuT2Jq
ZWN0QmVnaW46Ci0gICAgc3VjY2Vzc2Z1bCA9IHJlYWRPYmplY3QodG9rZW4pOwotICAgIGN1cnJl
bnRWYWx1ZSgpLnNldE9mZnNldExpbWl0KGN1cnJlbnRfIC0gYmVnaW5fKTsKLSAgICBicmVhazsK
LSAgY2FzZSB0b2tlbkFycmF5QmVnaW46Ci0gICAgc3VjY2Vzc2Z1bCA9IHJlYWRBcnJheSh0b2tl
bik7Ci0gICAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0TGltaXQoY3VycmVudF8gLSBiZWdpbl8p
OwotICAgIGJyZWFrOwotICBjYXNlIHRva2VuTnVtYmVyOgotICAgIHN1Y2Nlc3NmdWwgPSBkZWNv
ZGVOdW1iZXIodG9rZW4pOwotICAgIGJyZWFrOwotICBjYXNlIHRva2VuU3RyaW5nOgotICAgIHN1
Y2Nlc3NmdWwgPSBkZWNvZGVTdHJpbmcodG9rZW4pOwotICAgIGJyZWFrOwotICBjYXNlIHRva2Vu
VHJ1ZToKLSAgICB7Ci0gICAgVmFsdWUgdih0cnVlKTsKLSAgICBjdXJyZW50VmFsdWUoKS5zd2Fw
UGF5bG9hZCh2KTsKLSAgICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRTdGFydCh0b2tlbi5zdGFy
dF8gLSBiZWdpbl8pOwotICAgIGN1cnJlbnRWYWx1ZSgpLnNldE9mZnNldExpbWl0KHRva2VuLmVu
ZF8gLSBiZWdpbl8pOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSB0b2tlbkZhbHNlOgotICAg
IHsKLSAgICBWYWx1ZSB2KGZhbHNlKTsKLSAgICBjdXJyZW50VmFsdWUoKS5zd2FwUGF5bG9hZCh2
KTsKLSAgICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRTdGFydCh0b2tlbi5zdGFydF8gLSBiZWdp
bl8pOwotICAgIGN1cnJlbnRWYWx1ZSgpLnNldE9mZnNldExpbWl0KHRva2VuLmVuZF8gLSBiZWdp
bl8pOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSB0b2tlbk51bGw6Ci0gICAgewotICAgIFZh
bHVlIHY7Ci0gICAgY3VycmVudFZhbHVlKCkuc3dhcFBheWxvYWQodik7Ci0gICAgY3VycmVudFZh
bHVlKCkuc2V0T2Zmc2V0U3RhcnQodG9rZW4uc3RhcnRfIC0gYmVnaW5fKTsKLSAgICBjdXJyZW50
VmFsdWUoKS5zZXRPZmZzZXRMaW1pdCh0b2tlbi5lbmRfIC0gYmVnaW5fKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0gIGNhc2UgdG9rZW5OYU46Ci0gICAgewotICAgIFZhbHVlIHYoc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSk7Ci0gICAgY3VycmVudFZhbHVlKCkuc3dhcFBh
eWxvYWQodik7Ci0gICAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0U3RhcnQodG9rZW4uc3RhcnRf
IC0gYmVnaW5fKTsKLSAgICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRMaW1pdCh0b2tlbi5lbmRf
IC0gYmVnaW5fKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgdG9rZW5Qb3NJbmY6Ci0gICAg
ewotICAgIFZhbHVlIHYoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsK
LSAgICBjdXJyZW50VmFsdWUoKS5zd2FwUGF5bG9hZCh2KTsKLSAgICBjdXJyZW50VmFsdWUoKS5z
ZXRPZmZzZXRTdGFydCh0b2tlbi5zdGFydF8gLSBiZWdpbl8pOwotICAgIGN1cnJlbnRWYWx1ZSgp
LnNldE9mZnNldExpbWl0KHRva2VuLmVuZF8gLSBiZWdpbl8pOwotICAgIH0KLSAgICBicmVhazsK
LSAgY2FzZSB0b2tlbk5lZ0luZjoKLSAgICB7Ci0gICAgVmFsdWUgdigtc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsKLSAgICBjdXJyZW50VmFsdWUoKS5zd2FwUGF5bG9h
ZCh2KTsKLSAgICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRTdGFydCh0b2tlbi5zdGFydF8gLSBi
ZWdpbl8pOwotICAgIGN1cnJlbnRWYWx1ZSgpLnNldE9mZnNldExpbWl0KHRva2VuLmVuZF8gLSBi
ZWdpbl8pOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSB0b2tlbkFycmF5U2VwYXJhdG9yOgot
ICBjYXNlIHRva2VuT2JqZWN0RW5kOgotICBjYXNlIHRva2VuQXJyYXlFbmQ6Ci0gICAgaWYgKGZl
YXR1cmVzXy5hbGxvd0Ryb3BwZWROdWxsUGxhY2Vob2xkZXJzXykgewotICAgICAgLy8gIlVuLXJl
YWQiIHRoZSBjdXJyZW50IHRva2VuIGFuZCBtYXJrIHRoZSBjdXJyZW50IHZhbHVlIGFzIGEgbnVs
bAotICAgICAgLy8gdG9rZW4uCi0gICAgICBjdXJyZW50Xy0tOwotICAgICAgVmFsdWUgdjsKLSAg
ICAgIGN1cnJlbnRWYWx1ZSgpLnN3YXBQYXlsb2FkKHYpOwotICAgICAgY3VycmVudFZhbHVlKCku
c2V0T2Zmc2V0U3RhcnQoY3VycmVudF8gLSBiZWdpbl8gLSAxKTsKLSAgICAgIGN1cnJlbnRWYWx1
ZSgpLnNldE9mZnNldExpbWl0KGN1cnJlbnRfIC0gYmVnaW5fKTsKLSAgICAgIGJyZWFrOwotICAg
IH0gLy8gZWxzZSwgZmFsbCB0aHJvdWdoIC4uLgotICBkZWZhdWx0OgotICAgIGN1cnJlbnRWYWx1
ZSgpLnNldE9mZnNldFN0YXJ0KHRva2VuLnN0YXJ0XyAtIGJlZ2luXyk7Ci0gICAgY3VycmVudFZh
bHVlKCkuc2V0T2Zmc2V0TGltaXQodG9rZW4uZW5kXyAtIGJlZ2luXyk7Ci0gICAgcmV0dXJuIGFk
ZEVycm9yKCJTeW50YXggZXJyb3I6IHZhbHVlLCBvYmplY3Qgb3IgYXJyYXkgZXhwZWN0ZWQuIiwg
dG9rZW4pOwotICB9Ci0KLSAgaWYgKGNvbGxlY3RDb21tZW50c18pIHsKLSAgICBsYXN0VmFsdWVF
bmRfID0gY3VycmVudF87Ci0gICAgbGFzdFZhbHVlXyA9ICZjdXJyZW50VmFsdWUoKTsKLSAgfQot
Ci0gIC0tc3RhY2tEZXB0aF87Ci0gIHJldHVybiBzdWNjZXNzZnVsOwotfQotCi12b2lkIE91clJl
YWRlcjo6c2tpcENvbW1lbnRUb2tlbnMoVG9rZW4mIHRva2VuKSB7Ci0gIGlmIChmZWF0dXJlc18u
YWxsb3dDb21tZW50c18pIHsKLSAgICBkbyB7Ci0gICAgICByZWFkVG9rZW4odG9rZW4pOwotICAg
IH0gd2hpbGUgKHRva2VuLnR5cGVfID09IHRva2VuQ29tbWVudCk7Ci0gIH0gZWxzZSB7Ci0gICAg
cmVhZFRva2VuKHRva2VuKTsKLSAgfQotfQotCi1ib29sIE91clJlYWRlcjo6cmVhZFRva2VuKFRv
a2VuJiB0b2tlbikgewotICBza2lwU3BhY2VzKCk7Ci0gIHRva2VuLnN0YXJ0XyA9IGN1cnJlbnRf
OwotICBDaGFyIGMgPSBnZXROZXh0Q2hhcigpOwotICBib29sIG9rID0gdHJ1ZTsKLSAgc3dpdGNo
IChjKSB7Ci0gIGNhc2UgJ3snOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5PYmplY3RCZWdpbjsK
LSAgICBicmVhazsKLSAgY2FzZSAnfSc6Ci0gICAgdG9rZW4udHlwZV8gPSB0b2tlbk9iamVjdEVu
ZDsKLSAgICBicmVhazsKLSAgY2FzZSAnWyc6Ci0gICAgdG9rZW4udHlwZV8gPSB0b2tlbkFycmF5
QmVnaW47Ci0gICAgYnJlYWs7Ci0gIGNhc2UgJ10nOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5B
cnJheUVuZDsKLSAgICBicmVhazsKLSAgY2FzZSAnIic6Ci0gICAgdG9rZW4udHlwZV8gPSB0b2tl
blN0cmluZzsKLSAgICBvayA9IHJlYWRTdHJpbmcoKTsKLSAgICBicmVhazsKLSAgY2FzZSAnXCcn
OgotICAgIGlmIChmZWF0dXJlc18uYWxsb3dTaW5nbGVRdW90ZXNfKSB7Ci0gICAgdG9rZW4udHlw
ZV8gPSB0b2tlblN0cmluZzsKLSAgICBvayA9IHJlYWRTdHJpbmdTaW5nbGVRdW90ZSgpOwotICAg
IGJyZWFrOwotICAgIH0gLy8gZWxzZSBjb250aW51ZQotICBjYXNlICcvJzoKLSAgICB0b2tlbi50
eXBlXyA9IHRva2VuQ29tbWVudDsKLSAgICBvayA9IHJlYWRDb21tZW50KCk7Ci0gICAgYnJlYWs7
Ci0gIGNhc2UgJzAnOgotICBjYXNlICcxJzoKLSAgY2FzZSAnMic6Ci0gIGNhc2UgJzMnOgotICBj
YXNlICc0JzoKLSAgY2FzZSAnNSc6Ci0gIGNhc2UgJzYnOgotICBjYXNlICc3JzoKLSAgY2FzZSAn
OCc6Ci0gIGNhc2UgJzknOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5OdW1iZXI7Ci0gICAgcmVh
ZE51bWJlcihmYWxzZSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgJy0nOgotICAgIGlmIChyZWFkTnVt
YmVyKHRydWUpKSB7Ci0gICAgICB0b2tlbi50eXBlXyA9IHRva2VuTnVtYmVyOwotICAgIH0gZWxz
ZSB7Ci0gICAgICB0b2tlbi50eXBlXyA9IHRva2VuTmVnSW5mOwotICAgICAgb2sgPSBmZWF0dXJl
c18uYWxsb3dTcGVjaWFsRmxvYXRzXyAmJiBtYXRjaCgibmZpbml0eSIsIDcpOwotICAgIH0KLSAg
ICBicmVhazsKLSAgY2FzZSAndCc6Ci0gICAgdG9rZW4udHlwZV8gPSB0b2tlblRydWU7Ci0gICAg
b2sgPSBtYXRjaCgicnVlIiwgMyk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgJ2YnOgotICAgIHRva2Vu
LnR5cGVfID0gdG9rZW5GYWxzZTsKLSAgICBvayA9IG1hdGNoKCJhbHNlIiwgNCk7Ci0gICAgYnJl
YWs7Ci0gIGNhc2UgJ24nOgotICAgIHRva2VuLnR5cGVfID0gdG9rZW5OdWxsOwotICAgIG9rID0g
bWF0Y2goInVsbCIsIDMpOwotICAgIGJyZWFrOwotICBjYXNlICdOJzoKLSAgICBpZiAoZmVhdHVy
ZXNfLmFsbG93U3BlY2lhbEZsb2F0c18pIHsKLSAgICAgIHRva2VuLnR5cGVfID0gdG9rZW5OYU47
Ci0gICAgICBvayA9IG1hdGNoKCJhTiIsIDIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBvayA9IGZh
bHNlOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSAnSSc6Ci0gICAgaWYgKGZlYXR1cmVzXy5h
bGxvd1NwZWNpYWxGbG9hdHNfKSB7Ci0gICAgICB0b2tlbi50eXBlXyA9IHRva2VuUG9zSW5mOwot
ICAgICAgb2sgPSBtYXRjaCgibmZpbml0eSIsIDcpOwotICAgIH0gZWxzZSB7Ci0gICAgICBvayA9
IGZhbHNlOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSAnLCc6Ci0gICAgdG9rZW4udHlwZV8g
PSB0b2tlbkFycmF5U2VwYXJhdG9yOwotICAgIGJyZWFrOwotICBjYXNlICc6JzoKLSAgICB0b2tl
bi50eXBlXyA9IHRva2VuTWVtYmVyU2VwYXJhdG9yOwotICAgIGJyZWFrOwotICBjYXNlIDA6Ci0g
ICAgdG9rZW4udHlwZV8gPSB0b2tlbkVuZE9mU3RyZWFtOwotICAgIGJyZWFrOwotICBkZWZhdWx0
OgotICAgIG9rID0gZmFsc2U7Ci0gICAgYnJlYWs7Ci0gIH0KLSAgaWYgKCFvaykKLSAgICB0b2tl
bi50eXBlXyA9IHRva2VuRXJyb3I7Ci0gIHRva2VuLmVuZF8gPSBjdXJyZW50XzsKLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgT3VyUmVhZGVyOjpza2lwU3BhY2VzKCkgewotICB3aGlsZSAoY3Vy
cmVudF8gIT0gZW5kXykgewotICAgIENoYXIgYyA9ICpjdXJyZW50XzsKLSAgICBpZiAoYyA9PSAn
ICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcbicpCi0gICAgICArK2N1cnJl
bnRfOwotICAgIGVsc2UKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLWJvb2wgT3VyUmVhZGVyOjpt
YXRjaChMb2NhdGlvbiBwYXR0ZXJuLCBpbnQgcGF0dGVybkxlbmd0aCkgewotICBpZiAoZW5kXyAt
IGN1cnJlbnRfIDwgcGF0dGVybkxlbmd0aCkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGludCBpbmRl
eCA9IHBhdHRlcm5MZW5ndGg7Ci0gIHdoaWxlIChpbmRleC0tKQotICAgIGlmIChjdXJyZW50X1tp
bmRleF0gIT0gcGF0dGVybltpbmRleF0pCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIGN1cnJlbnRf
ICs9IHBhdHRlcm5MZW5ndGg7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIE91clJlYWRlcjo6
cmVhZENvbW1lbnQoKSB7Ci0gIExvY2F0aW9uIGNvbW1lbnRCZWdpbiA9IGN1cnJlbnRfIC0gMTsK
LSAgQ2hhciBjID0gZ2V0TmV4dENoYXIoKTsKLSAgYm9vbCBzdWNjZXNzZnVsID0gZmFsc2U7Ci0g
IGlmIChjID09ICcqJykKLSAgICBzdWNjZXNzZnVsID0gcmVhZENTdHlsZUNvbW1lbnQoKTsKLSAg
ZWxzZSBpZiAoYyA9PSAnLycpCi0gICAgc3VjY2Vzc2Z1bCA9IHJlYWRDcHBTdHlsZUNvbW1lbnQo
KTsKLSAgaWYgKCFzdWNjZXNzZnVsKQotICAgIHJldHVybiBmYWxzZTsKLQotICBpZiAoY29sbGVj
dENvbW1lbnRzXykgewotICAgIENvbW1lbnRQbGFjZW1lbnQgcGxhY2VtZW50ID0gY29tbWVudEJl
Zm9yZTsKLSAgICBpZiAobGFzdFZhbHVlRW5kXyAmJiAhY29udGFpbnNOZXdMaW5lKGxhc3RWYWx1
ZUVuZF8sIGNvbW1lbnRCZWdpbikpIHsKLSAgICAgIGlmIChjICE9ICcqJyB8fCAhY29udGFpbnNO
ZXdMaW5lKGNvbW1lbnRCZWdpbiwgY3VycmVudF8pKQotICAgICAgICBwbGFjZW1lbnQgPSBjb21t
ZW50QWZ0ZXJPblNhbWVMaW5lOwotICAgIH0KLQotICAgIGFkZENvbW1lbnQoY29tbWVudEJlZ2lu
LCBjdXJyZW50XywgcGxhY2VtZW50KTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZAot
T3VyUmVhZGVyOjphZGRDb21tZW50KExvY2F0aW9uIGJlZ2luLCBMb2NhdGlvbiBlbmQsIENvbW1l
bnRQbGFjZW1lbnQgcGxhY2VtZW50KSB7Ci0gIGFzc2VydChjb2xsZWN0Q29tbWVudHNfKTsKLSAg
Y29uc3Qgc3RkOjpzdHJpbmcmIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVFT0woYmVnaW4sIGVuZCk7
Ci0gIGlmIChwbGFjZW1lbnQgPT0gY29tbWVudEFmdGVyT25TYW1lTGluZSkgewotICAgIGFzc2Vy
dChsYXN0VmFsdWVfICE9IDApOwotICAgIGxhc3RWYWx1ZV8tPnNldENvbW1lbnQobm9ybWFsaXpl
ZCwgcGxhY2VtZW50KTsKLSAgfSBlbHNlIHsKLSAgICBjb21tZW50c0JlZm9yZV8gKz0gbm9ybWFs
aXplZDsKLSAgfQotfQotCi1ib29sIE91clJlYWRlcjo6cmVhZENTdHlsZUNvbW1lbnQoKSB7Ci0g
IHdoaWxlIChjdXJyZW50XyAhPSBlbmRfKSB7Ci0gICAgQ2hhciBjID0gZ2V0TmV4dENoYXIoKTsK
LSAgICBpZiAoYyA9PSAnKicgJiYgKmN1cnJlbnRfID09ICcvJykKLSAgICAgIGJyZWFrOwotICB9
Ci0gIHJldHVybiBnZXROZXh0Q2hhcigpID09ICcvJzsKLX0KLQotYm9vbCBPdXJSZWFkZXI6OnJl
YWRDcHBTdHlsZUNvbW1lbnQoKSB7Ci0gIHdoaWxlIChjdXJyZW50XyAhPSBlbmRfKSB7Ci0gICAg
Q2hhciBjID0gZ2V0TmV4dENoYXIoKTsKLSAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgYnJlYWs7
Ci0gICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgLy8gQ29uc3VtZSBET1MgRU9MLiBJdCB3aWxs
IGJlIG5vcm1hbGl6ZWQgaW4gYWRkQ29tbWVudC4KLSAgICAgIGlmIChjdXJyZW50XyAhPSBlbmRf
ICYmICpjdXJyZW50XyA9PSAnXG4nKQotICAgICAgICBnZXROZXh0Q2hhcigpOwotICAgICAgLy8g
QnJlYWsgb24gTW9jIE9TIDkgRU9MLgotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVy
biB0cnVlOwotfQotCi1ib29sIE91clJlYWRlcjo6cmVhZE51bWJlcihib29sIGNoZWNrSW5mKSB7
Ci0gIGNvbnN0IGNoYXIgKnAgPSBjdXJyZW50XzsKLSAgaWYgKGNoZWNrSW5mICYmIHAgIT0gZW5k
XyAmJiAqcCA9PSAnSScpIHsKLSAgICBjdXJyZW50XyA9ICsrcDsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLSAgY2hhciBjID0gJzAnOyAvLyBzdG9wZ2FwIGZvciBhbHJlYWR5IGNvbnN1bWVkIGNo
YXJhY3RlcgotICAvLyBpbnRlZ3JhbCBwYXJ0Ci0gIHdoaWxlIChjID49ICcwJyAmJiBjIDw9ICc5
JykKLSAgICBjID0gKGN1cnJlbnRfID0gcCkgPCBlbmRfID8gKnArKyA6IDA7Ci0gIC8vIGZyYWN0
aW9uYWwgcGFydAotICBpZiAoYyA9PSAnLicpIHsKLSAgICBjID0gKGN1cnJlbnRfID0gcCkgPCBl
bmRfID8gKnArKyA6IDA7Ci0gICAgd2hpbGUgKGMgPj0gJzAnICYmIGMgPD0gJzknKQotICAgICAg
YyA9IChjdXJyZW50XyA9IHApIDwgZW5kXyA/ICpwKysgOiAwOwotICB9Ci0gIC8vIGV4cG9uZW50
aWFsIHBhcnQKLSAgaWYgKGMgPT0gJ2UnIHx8IGMgPT0gJ0UnKSB7Ci0gICAgYyA9IChjdXJyZW50
XyA9IHApIDwgZW5kXyA/ICpwKysgOiAwOwotICAgIGlmIChjID09ICcrJyB8fCBjID09ICctJykK
LSAgICAgIGMgPSAoY3VycmVudF8gPSBwKSA8IGVuZF8gPyAqcCsrIDogMDsKLSAgICB3aGlsZSAo
YyA+PSAnMCcgJiYgYyA8PSAnOScpCi0gICAgICBjID0gKGN1cnJlbnRfID0gcCkgPCBlbmRfID8g
KnArKyA6IDA7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci1ib29sIE91clJlYWRlcjo6cmVhZFN0
cmluZygpIHsKLSAgQ2hhciBjID0gMDsKLSAgd2hpbGUgKGN1cnJlbnRfICE9IGVuZF8pIHsKLSAg
ICBjID0gZ2V0TmV4dENoYXIoKTsKLSAgICBpZiAoYyA9PSAnXFwnKQotICAgICAgZ2V0TmV4dENo
YXIoKTsKLSAgICBlbHNlIGlmIChjID09ICciJykKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVy
biBjID09ICciJzsKLX0KLQotCi1ib29sIE91clJlYWRlcjo6cmVhZFN0cmluZ1NpbmdsZVF1b3Rl
KCkgewotICBDaGFyIGMgPSAwOwotICB3aGlsZSAoY3VycmVudF8gIT0gZW5kXykgewotICAgIGMg
PSBnZXROZXh0Q2hhcigpOwotICAgIGlmIChjID09ICdcXCcpCi0gICAgICBnZXROZXh0Q2hhcigp
OwotICAgIGVsc2UgaWYgKGMgPT0gJ1wnJykKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBj
ID09ICdcJyc7Ci19Ci0KLWJvb2wgT3VyUmVhZGVyOjpyZWFkT2JqZWN0KFRva2VuJiB0b2tlblN0
YXJ0KSB7Ci0gIFRva2VuIHRva2VuTmFtZTsKLSAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgVmFsdWUg
aW5pdChvYmplY3RWYWx1ZSk7Ci0gIGN1cnJlbnRWYWx1ZSgpLnN3YXBQYXlsb2FkKGluaXQpOwot
ICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRTdGFydCh0b2tlblN0YXJ0LnN0YXJ0XyAtIGJlZ2lu
Xyk7Ci0gIHdoaWxlIChyZWFkVG9rZW4odG9rZW5OYW1lKSkgewotICAgIGJvb2wgaW5pdGlhbFRv
a2VuT2sgPSB0cnVlOwotICAgIHdoaWxlICh0b2tlbk5hbWUudHlwZV8gPT0gdG9rZW5Db21tZW50
ICYmIGluaXRpYWxUb2tlbk9rKQotICAgICAgaW5pdGlhbFRva2VuT2sgPSByZWFkVG9rZW4odG9r
ZW5OYW1lKTsKLSAgICBpZiAoIWluaXRpYWxUb2tlbk9rKQotICAgICAgYnJlYWs7Ci0gICAgaWYg
KHRva2VuTmFtZS50eXBlXyA9PSB0b2tlbk9iamVjdEVuZCAmJiBuYW1lLmVtcHR5KCkpIC8vIGVt
cHR5IG9iamVjdAotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbmFtZSA9ICIiOwotICAgIGlmICh0
b2tlbk5hbWUudHlwZV8gPT0gdG9rZW5TdHJpbmcpIHsKLSAgICAgIGlmICghZGVjb2RlU3RyaW5n
KHRva2VuTmFtZSwgbmFtZSkpCi0gICAgICAgIHJldHVybiByZWNvdmVyRnJvbUVycm9yKHRva2Vu
T2JqZWN0RW5kKTsKLSAgICB9IGVsc2UgaWYgKHRva2VuTmFtZS50eXBlXyA9PSB0b2tlbk51bWJl
ciAmJiBmZWF0dXJlc18uYWxsb3dOdW1lcmljS2V5c18pIHsKLSAgICAgIFZhbHVlIG51bWJlck5h
bWU7Ci0gICAgICBpZiAoIWRlY29kZU51bWJlcih0b2tlbk5hbWUsIG51bWJlck5hbWUpKQotICAg
ICAgICByZXR1cm4gcmVjb3ZlckZyb21FcnJvcih0b2tlbk9iamVjdEVuZCk7Ci0gICAgICBuYW1l
ID0gbnVtYmVyTmFtZS5hc1N0cmluZygpOwotICAgIH0gZWxzZSB7Ci0gICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBUb2tlbiBjb2xvbjsKLSAgICBpZiAoIXJlYWRUb2tlbihjb2xvbikgfHwgY29s
b24udHlwZV8gIT0gdG9rZW5NZW1iZXJTZXBhcmF0b3IpIHsKLSAgICAgIHJldHVybiBhZGRFcnJv
ckFuZFJlY292ZXIoCi0gICAgICAgICAgIk1pc3NpbmcgJzonIGFmdGVyIG9iamVjdCBtZW1iZXIg
bmFtZSIsIGNvbG9uLCB0b2tlbk9iamVjdEVuZCk7Ci0gICAgfQotICAgIGlmIChuYW1lLmxlbmd0
aCgpID49ICgxVTw8MzApKSB0aHJvd1J1bnRpbWVFcnJvcigia2V5bGVuZ3RoID49IDJeMzAiKTsK
LSAgICBpZiAoZmVhdHVyZXNfLnJlamVjdER1cEtleXNfICYmIGN1cnJlbnRWYWx1ZSgpLmlzTWVt
YmVyKG5hbWUpKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBtc2cgPSAiRHVwbGljYXRlIGtleTogJyIg
KyBuYW1lICsgIiciOwotICAgICAgcmV0dXJuIGFkZEVycm9yQW5kUmVjb3ZlcigKLSAgICAgICAg
ICBtc2csIHRva2VuTmFtZSwgdG9rZW5PYmplY3RFbmQpOwotICAgIH0KLSAgICBWYWx1ZSYgdmFs
dWUgPSBjdXJyZW50VmFsdWUoKVtuYW1lXTsKLSAgICBub2Rlc18ucHVzaCgmdmFsdWUpOwotICAg
IGJvb2wgb2sgPSByZWFkVmFsdWUoKTsKLSAgICBub2Rlc18ucG9wKCk7Ci0gICAgaWYgKCFvaykg
Ly8gZXJyb3IgYWxyZWFkeSBzZXQKLSAgICAgIHJldHVybiByZWNvdmVyRnJvbUVycm9yKHRva2Vu
T2JqZWN0RW5kKTsKLQotICAgIFRva2VuIGNvbW1hOwotICAgIGlmICghcmVhZFRva2VuKGNvbW1h
KSB8fAotICAgICAgICAoY29tbWEudHlwZV8gIT0gdG9rZW5PYmplY3RFbmQgJiYgY29tbWEudHlw
ZV8gIT0gdG9rZW5BcnJheVNlcGFyYXRvciAmJgotICAgICAgICAgY29tbWEudHlwZV8gIT0gdG9r
ZW5Db21tZW50KSkgewotICAgICAgcmV0dXJuIGFkZEVycm9yQW5kUmVjb3ZlcigKLSAgICAgICAg
ICAiTWlzc2luZyAnLCcgb3IgJ30nIGluIG9iamVjdCBkZWNsYXJhdGlvbiIsIGNvbW1hLCB0b2tl
bk9iamVjdEVuZCk7Ci0gICAgfQotICAgIGJvb2wgZmluYWxpemVUb2tlbk9rID0gdHJ1ZTsKLSAg
ICB3aGlsZSAoY29tbWEudHlwZV8gPT0gdG9rZW5Db21tZW50ICYmIGZpbmFsaXplVG9rZW5PaykK
LSAgICAgIGZpbmFsaXplVG9rZW5PayA9IHJlYWRUb2tlbihjb21tYSk7Ci0gICAgaWYgKGNvbW1h
LnR5cGVfID09IHRva2VuT2JqZWN0RW5kKQotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0
dXJuIGFkZEVycm9yQW5kUmVjb3ZlcigKLSAgICAgICJNaXNzaW5nICd9JyBvciBvYmplY3QgbWVt
YmVyIG5hbWUiLCB0b2tlbk5hbWUsIHRva2VuT2JqZWN0RW5kKTsKLX0KLQotYm9vbCBPdXJSZWFk
ZXI6OnJlYWRBcnJheShUb2tlbiYgdG9rZW5TdGFydCkgewotICBWYWx1ZSBpbml0KGFycmF5VmFs
dWUpOwotICBjdXJyZW50VmFsdWUoKS5zd2FwUGF5bG9hZChpbml0KTsKLSAgY3VycmVudFZhbHVl
KCkuc2V0T2Zmc2V0U3RhcnQodG9rZW5TdGFydC5zdGFydF8gLSBiZWdpbl8pOwotICBza2lwU3Bh
Y2VzKCk7Ci0gIGlmICgqY3VycmVudF8gPT0gJ10nKSAvLyBlbXB0eSBhcnJheQotICB7Ci0gICAg
VG9rZW4gZW5kQXJyYXk7Ci0gICAgcmVhZFRva2VuKGVuZEFycmF5KTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotICBpbnQgaW5kZXggPSAwOwotICBmb3IgKDs7KSB7Ci0gICAgVmFsdWUmIHZhbHVl
ID0gY3VycmVudFZhbHVlKClbaW5kZXgrK107Ci0gICAgbm9kZXNfLnB1c2goJnZhbHVlKTsKLSAg
ICBib29sIG9rID0gcmVhZFZhbHVlKCk7Ci0gICAgbm9kZXNfLnBvcCgpOwotICAgIGlmICghb2sp
IC8vIGVycm9yIGFscmVhZHkgc2V0Ci0gICAgICByZXR1cm4gcmVjb3ZlckZyb21FcnJvcih0b2tl
bkFycmF5RW5kKTsKLQotICAgIFRva2VuIHRva2VuOwotICAgIC8vIEFjY2VwdCBDb21tZW50IGFm
dGVyIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkuCi0gICAgb2sgPSByZWFkVG9rZW4odG9rZW4pOwot
ICAgIHdoaWxlICh0b2tlbi50eXBlXyA9PSB0b2tlbkNvbW1lbnQgJiYgb2spIHsKLSAgICAgIG9r
ID0gcmVhZFRva2VuKHRva2VuKTsKLSAgICB9Ci0gICAgYm9vbCBiYWRUb2tlblR5cGUgPQotICAg
ICAgICAodG9rZW4udHlwZV8gIT0gdG9rZW5BcnJheVNlcGFyYXRvciAmJiB0b2tlbi50eXBlXyAh
PSB0b2tlbkFycmF5RW5kKTsKLSAgICBpZiAoIW9rIHx8IGJhZFRva2VuVHlwZSkgewotICAgICAg
cmV0dXJuIGFkZEVycm9yQW5kUmVjb3ZlcigKLSAgICAgICAgICAiTWlzc2luZyAnLCcgb3IgJ10n
IGluIGFycmF5IGRlY2xhcmF0aW9uIiwgdG9rZW4sIHRva2VuQXJyYXlFbmQpOwotICAgIH0KLSAg
ICBpZiAodG9rZW4udHlwZV8gPT0gdG9rZW5BcnJheUVuZCkKLSAgICAgIGJyZWFrOwotICB9Ci0g
IHJldHVybiB0cnVlOwotfQotCi1ib29sIE91clJlYWRlcjo6ZGVjb2RlTnVtYmVyKFRva2VuJiB0
b2tlbikgewotICBWYWx1ZSBkZWNvZGVkOwotICBpZiAoIWRlY29kZU51bWJlcih0b2tlbiwgZGVj
b2RlZCkpCi0gICAgcmV0dXJuIGZhbHNlOwotICBjdXJyZW50VmFsdWUoKS5zd2FwUGF5bG9hZChk
ZWNvZGVkKTsKLSAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0U3RhcnQodG9rZW4uc3RhcnRfIC0g
YmVnaW5fKTsKLSAgY3VycmVudFZhbHVlKCkuc2V0T2Zmc2V0TGltaXQodG9rZW4uZW5kXyAtIGJl
Z2luXyk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIE91clJlYWRlcjo6ZGVjb2RlTnVtYmVy
KFRva2VuJiB0b2tlbiwgVmFsdWUmIGRlY29kZWQpIHsKLSAgLy8gQXR0ZW1wdHMgdG8gcGFyc2Ug
dGhlIG51bWJlciBhcyBhbiBpbnRlZ2VyLiBJZiB0aGUgbnVtYmVyIGlzCi0gIC8vIGxhcmdlciB0
aGFuIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBvZiBhbiBpbnRlZ2VyIHRoZW4KLSAgLy8g
d2UgZGVjb2RlIHRoZSBudW1iZXIgYXMgYSBkb3VibGUuCi0gIExvY2F0aW9uIGN1cnJlbnQgPSB0
b2tlbi5zdGFydF87Ci0gIGJvb2wgaXNOZWdhdGl2ZSA9ICpjdXJyZW50ID09ICctJzsKLSAgaWYg
KGlzTmVnYXRpdmUpCi0gICAgKytjdXJyZW50OwotICAvLyBUT0RPOiBIZWxwIHRoZSBjb21waWxl
ciBkbyB0aGUgZGl2IGFuZCBtb2QgYXQgY29tcGlsZSB0aW1lIG9yIGdldCByaWQgb2YgdGhlbS4K
LSAgVmFsdWU6Okxhcmdlc3RVSW50IG1heEludGVnZXJWYWx1ZSA9Ci0gICAgICBpc05lZ2F0aXZl
ID8gVmFsdWU6Okxhcmdlc3RVSW50KC1WYWx1ZTo6bWluTGFyZ2VzdEludCkKLSAgICAgICAgICAg
ICAgICAgOiBWYWx1ZTo6bWF4TGFyZ2VzdFVJbnQ7Ci0gIFZhbHVlOjpMYXJnZXN0VUludCB0aHJl
c2hvbGQgPSBtYXhJbnRlZ2VyVmFsdWUgLyAxMDsKLSAgVmFsdWU6Okxhcmdlc3RVSW50IHZhbHVl
ID0gMDsKLSAgd2hpbGUgKGN1cnJlbnQgPCB0b2tlbi5lbmRfKSB7Ci0gICAgQ2hhciBjID0gKmN1
cnJlbnQrKzsKLSAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKQotICAgICAgcmV0dXJuIGRlY29k
ZURvdWJsZSh0b2tlbiwgZGVjb2RlZCk7Ci0gICAgVmFsdWU6OlVJbnQgZGlnaXQoYyAtICcwJyk7
Ci0gICAgaWYgKHZhbHVlID49IHRocmVzaG9sZCkgewotICAgICAgLy8gV2UndmUgaGl0IG9yIGV4
Y2VlZGVkIHRoZSBtYXggdmFsdWUgZGl2aWRlZCBieSAxMCAocm91bmRlZCBkb3duKS4gSWYKLSAg
ICAgIC8vIGEpIHdlJ3ZlIG9ubHkganVzdCB0b3VjaGVkIHRoZSBsaW1pdCwgYikgdGhpcyBpcyB0
aGUgbGFzdCBkaWdpdCwgYW5kCi0gICAgICAvLyBjKSBpdCdzIHNtYWxsIGVub3VnaCB0byBmaXQg
aW4gdGhhdCByb3VuZGluZyBkZWx0YSwgd2UncmUgb2theS4KLSAgICAgIC8vIE90aGVyd2lzZSB0
cmVhdCB0aGlzIG51bWJlciBhcyBhIGRvdWJsZSB0byBhdm9pZCBvdmVyZmxvdy4KLSAgICAgIGlm
ICh2YWx1ZSA+IHRocmVzaG9sZCB8fCBjdXJyZW50ICE9IHRva2VuLmVuZF8gfHwKLSAgICAgICAg
ICBkaWdpdCA+IG1heEludGVnZXJWYWx1ZSAlIDEwKSB7Ci0gICAgICAgIHJldHVybiBkZWNvZGVE
b3VibGUodG9rZW4sIGRlY29kZWQpOwotICAgICAgfQotICAgIH0KLSAgICB2YWx1ZSA9IHZhbHVl
ICogMTAgKyBkaWdpdDsKLSAgfQotICBpZiAoaXNOZWdhdGl2ZSkKLSAgICBkZWNvZGVkID0gLVZh
bHVlOjpMYXJnZXN0SW50KHZhbHVlKTsKLSAgZWxzZSBpZiAodmFsdWUgPD0gVmFsdWU6Okxhcmdl
c3RVSW50KFZhbHVlOjptYXhJbnQpKQotICAgIGRlY29kZWQgPSBWYWx1ZTo6TGFyZ2VzdEludCh2
YWx1ZSk7Ci0gIGVsc2UKLSAgICBkZWNvZGVkID0gdmFsdWU7Ci0gIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIE91clJlYWRlcjo6ZGVjb2RlRG91YmxlKFRva2VuJiB0b2tlbikgewotICBWYWx1ZSBk
ZWNvZGVkOwotICBpZiAoIWRlY29kZURvdWJsZSh0b2tlbiwgZGVjb2RlZCkpCi0gICAgcmV0dXJu
IGZhbHNlOwotICBjdXJyZW50VmFsdWUoKS5zd2FwUGF5bG9hZChkZWNvZGVkKTsKLSAgY3VycmVu
dFZhbHVlKCkuc2V0T2Zmc2V0U3RhcnQodG9rZW4uc3RhcnRfIC0gYmVnaW5fKTsKLSAgY3VycmVu
dFZhbHVlKCkuc2V0T2Zmc2V0TGltaXQodG9rZW4uZW5kXyAtIGJlZ2luXyk7Ci0gIHJldHVybiB0
cnVlOwotfQotCi1ib29sIE91clJlYWRlcjo6ZGVjb2RlRG91YmxlKFRva2VuJiB0b2tlbiwgVmFs
dWUmIGRlY29kZWQpIHsKLSAgZG91YmxlIHZhbHVlID0gMDsKLSAgY29uc3QgaW50IGJ1ZmZlclNp
emUgPSAzMjsKLSAgaW50IGNvdW50OwotICBpbnQgbGVuZ3RoID0gaW50KHRva2VuLmVuZF8gLSB0
b2tlbi5zdGFydF8pOwotCi0gIC8vIFNhbml0eSBjaGVjayB0byBhdm9pZCBidWZmZXIgb3ZlcmZs
b3cgZXhwbG9pdHMuCi0gIGlmIChsZW5ndGggPCAwKSB7Ci0gICAgcmV0dXJuIGFkZEVycm9yKCJV
bmFibGUgdG8gcGFyc2UgdG9rZW4gbGVuZ3RoIiwgdG9rZW4pOwotICB9Ci0KLSAgLy8gQXZvaWQg
dXNpbmcgYSBzdHJpbmcgY29uc3RhbnQgZm9yIHRoZSBmb3JtYXQgY29udHJvbCBzdHJpbmcgZ2l2
ZW4gdG8KLSAgLy8gc3NjYW5mLCBhcyB0aGlzIGNhbiBjYXVzZSBoYXJkIHRvIGRlYnVnIGNyYXNo
ZXMgb24gT1MgWC4gU2VlIGhlcmUgZm9yIG1vcmUKLSAgLy8gaW5mbzoKLSAgLy8KLSAgLy8gICAg
IGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjLyNET0NVTUVOVEFUSU9OL0Rl
dmVsb3BlclRvb2xzL2djYy00LjAuMS9nY2MvSW5jb21wYXRpYmlsaXRpZXMuaHRtbAotICBjaGFy
IGZvcm1hdFtdID0gIiVsZiI7Ci0KLSAgaWYgKGxlbmd0aCA8PSBidWZmZXJTaXplKSB7Ci0gICAg
Q2hhciBidWZmZXJbYnVmZmVyU2l6ZSArIDFdOwotICAgIG1lbWNweShidWZmZXIsIHRva2VuLnN0
YXJ0XywgbGVuZ3RoKTsKLSAgICBidWZmZXJbbGVuZ3RoXSA9IDA7Ci0gICAgY291bnQgPSBzc2Nh
bmYoYnVmZmVyLCBmb3JtYXQsICZ2YWx1ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgc3RkOjpzdHJpbmcg
YnVmZmVyKHRva2VuLnN0YXJ0XywgdG9rZW4uZW5kXyk7Ci0gICAgY291bnQgPSBzc2NhbmYoYnVm
ZmVyLmNfc3RyKCksIGZvcm1hdCwgJnZhbHVlKTsKLSAgfQotCi0gIGlmIChjb3VudCAhPSAxKQot
ICAgIHJldHVybiBhZGRFcnJvcigiJyIgKyBzdGQ6OnN0cmluZyh0b2tlbi5zdGFydF8sIHRva2Vu
LmVuZF8pICsKLSAgICAgICAgICAgICAgICAgICAgICAgICInIGlzIG5vdCBhIG51bWJlci4iLAot
ICAgICAgICAgICAgICAgICAgICB0b2tlbik7Ci0gIGRlY29kZWQgPSB2YWx1ZTsKLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgT3VyUmVhZGVyOjpkZWNvZGVTdHJpbmcoVG9rZW4mIHRva2VuKSB7
Ci0gIHN0ZDo6c3RyaW5nIGRlY29kZWRfc3RyaW5nOwotICBpZiAoIWRlY29kZVN0cmluZyh0b2tl
biwgZGVjb2RlZF9zdHJpbmcpKQotICAgIHJldHVybiBmYWxzZTsKLSAgVmFsdWUgZGVjb2RlZChk
ZWNvZGVkX3N0cmluZyk7Ci0gIGN1cnJlbnRWYWx1ZSgpLnN3YXBQYXlsb2FkKGRlY29kZWQpOwot
ICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRTdGFydCh0b2tlbi5zdGFydF8gLSBiZWdpbl8pOwot
ICBjdXJyZW50VmFsdWUoKS5zZXRPZmZzZXRMaW1pdCh0b2tlbi5lbmRfIC0gYmVnaW5fKTsKLSAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3VyUmVhZGVyOjpkZWNvZGVTdHJpbmcoVG9rZW4mIHRv
a2VuLCBzdGQ6OnN0cmluZyYgZGVjb2RlZCkgewotICBkZWNvZGVkLnJlc2VydmUodG9rZW4uZW5k
XyAtIHRva2VuLnN0YXJ0XyAtIDIpOwotICBMb2NhdGlvbiBjdXJyZW50ID0gdG9rZW4uc3RhcnRf
ICsgMTsgLy8gc2tpcCAnIicKLSAgTG9jYXRpb24gZW5kID0gdG9rZW4uZW5kXyAtIDE7ICAgICAg
IC8vIGRvIG5vdCBpbmNsdWRlICciJwotICB3aGlsZSAoY3VycmVudCAhPSBlbmQpIHsKLSAgICBD
aGFyIGMgPSAqY3VycmVudCsrOwotICAgIGlmIChjID09ICciJykKLSAgICAgIGJyZWFrOwotICAg
IGVsc2UgaWYgKGMgPT0gJ1xcJykgewotICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKQotICAgICAg
ICByZXR1cm4gYWRkRXJyb3IoIkVtcHR5IGVzY2FwZSBzZXF1ZW5jZSBpbiBzdHJpbmciLCB0b2tl
biwgY3VycmVudCk7Ci0gICAgICBDaGFyIGVzY2FwZSA9ICpjdXJyZW50Kys7Ci0gICAgICBzd2l0
Y2ggKGVzY2FwZSkgewotICAgICAgY2FzZSAnIic6Ci0gICAgICAgIGRlY29kZWQgKz0gJyInOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJy8nOgotICAgICAgICBkZWNvZGVkICs9ICcvJzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGRlY29kZWQgKz0gJ1xc
JzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdiJzoKLSAgICAgICAgZGVjb2RlZCArPSAn
XGInOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ2YnOgotICAgICAgICBkZWNvZGVkICs9
ICdcZic7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnbic6Ci0gICAgICAgIGRlY29kZWQg
Kz0gJ1xuJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdyJzoKLSAgICAgICAgZGVjb2Rl
ZCArPSAnXHInOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ3QnOgotICAgICAgICBkZWNv
ZGVkICs9ICdcdCc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAndSc6IHsKLSAgICAgICAg
dW5zaWduZWQgaW50IHVuaWNvZGU7Ci0gICAgICAgIGlmICghZGVjb2RlVW5pY29kZUNvZGVQb2lu
dCh0b2tlbiwgY3VycmVudCwgZW5kLCB1bmljb2RlKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGRlY29kZWQgKz0gY29kZVBvaW50VG9VVEY4KHVuaWNvZGUpOwotICAgICAgfSBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBhZGRFcnJvcigiQmFkIGVzY2Fw
ZSBzZXF1ZW5jZSBpbiBzdHJpbmciLCB0b2tlbiwgY3VycmVudCk7Ci0gICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgIGRlY29kZWQgKz0gYzsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgT3VyUmVhZGVyOjpkZWNvZGVVbmljb2RlQ29kZVBvaW50KFRva2VuJiB0b2tlbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0aW9uJiBjdXJyZW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb24gZW5kLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50JiB1bmljb2RlKSB7Ci0K
LSAgaWYgKCFkZWNvZGVVbmljb2RlRXNjYXBlU2VxdWVuY2UodG9rZW4sIGN1cnJlbnQsIGVuZCwg
dW5pY29kZSkpCi0gICAgcmV0dXJuIGZhbHNlOwotICBpZiAodW5pY29kZSA+PSAweEQ4MDAgJiYg
dW5pY29kZSA8PSAweERCRkYpIHsKLSAgICAvLyBzdXJyb2dhdGUgcGFpcnMKLSAgICBpZiAoZW5k
IC0gY3VycmVudCA8IDYpCi0gICAgICByZXR1cm4gYWRkRXJyb3IoCi0gICAgICAgICAgImFkZGl0
aW9uYWwgc2l4IGNoYXJhY3RlcnMgZXhwZWN0ZWQgdG8gcGFyc2UgdW5pY29kZSBzdXJyb2dhdGUg
cGFpci4iLAotICAgICAgICAgIHRva2VuLAotICAgICAgICAgIGN1cnJlbnQpOwotICAgIHVuc2ln
bmVkIGludCBzdXJyb2dhdGVQYWlyOwotICAgIGlmICgqKGN1cnJlbnQrKykgPT0gJ1xcJyAmJiAq
KGN1cnJlbnQrKykgPT0gJ3UnKSB7Ci0gICAgICBpZiAoZGVjb2RlVW5pY29kZUVzY2FwZVNlcXVl
bmNlKHRva2VuLCBjdXJyZW50LCBlbmQsIHN1cnJvZ2F0ZVBhaXIpKSB7Ci0gICAgICAgIHVuaWNv
ZGUgPSAweDEwMDAwICsgKCh1bmljb2RlICYgMHgzRkYpIDw8IDEwKSArIChzdXJyb2dhdGVQYWly
ICYgMHgzRkYpOwotICAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVs
c2UKLSAgICAgIHJldHVybiBhZGRFcnJvcigiZXhwZWN0aW5nIGFub3RoZXIgXFx1IHRva2VuIHRv
IGJlZ2luIHRoZSBzZWNvbmQgaGFsZiBvZiAiCi0gICAgICAgICAgICAgICAgICAgICAgImEgdW5p
Y29kZSBzdXJyb2dhdGUgcGFpciIsCi0gICAgICAgICAgICAgICAgICAgICAgdG9rZW4sCi0gICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudCk7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgT3VyUmVhZGVyOjpkZWNvZGVVbmljb2RlRXNjYXBlU2VxdWVuY2UoVG9rZW4mIHRva2VuLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbiYgY3VycmVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb24gZW5k
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQm
IHVuaWNvZGUpIHsKLSAgaWYgKGVuZCAtIGN1cnJlbnQgPCA0KQotICAgIHJldHVybiBhZGRFcnJv
cigKLSAgICAgICAgIkJhZCB1bmljb2RlIGVzY2FwZSBzZXF1ZW5jZSBpbiBzdHJpbmc6IGZvdXIg
ZGlnaXRzIGV4cGVjdGVkLiIsCi0gICAgICAgIHRva2VuLAotICAgICAgICBjdXJyZW50KTsKLSAg
dW5pY29kZSA9IDA7Ci0gIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCA0OyArK2luZGV4KSB7
Ci0gICAgQ2hhciBjID0gKmN1cnJlbnQrKzsKLSAgICB1bmljb2RlICo9IDE2OwotICAgIGlmIChj
ID49ICcwJyAmJiBjIDw9ICc5JykKLSAgICAgIHVuaWNvZGUgKz0gYyAtICcwJzsKLSAgICBlbHNl
IGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKLSAgICAgIHVuaWNvZGUgKz0gYyAtICdhJyArIDEw
OwotICAgIGVsc2UgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKQotICAgICAgdW5pY29kZSArPSBj
IC0gJ0EnICsgMTA7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGFkZEVycm9yKAotICAgICAgICAg
ICJCYWQgdW5pY29kZSBlc2NhcGUgc2VxdWVuY2UgaW4gc3RyaW5nOiBoZXhhZGVjaW1hbCBkaWdp
dCBleHBlY3RlZC4iLAotICAgICAgICAgIHRva2VuLAotICAgICAgICAgIGN1cnJlbnQpOwotICB9
Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sCi1PdXJSZWFkZXI6OmFkZEVycm9yKGNvbnN0IHN0
ZDo6c3RyaW5nJiBtZXNzYWdlLCBUb2tlbiYgdG9rZW4sIExvY2F0aW9uIGV4dHJhKSB7Ci0gIEVy
cm9ySW5mbyBpbmZvOwotICBpbmZvLnRva2VuXyA9IHRva2VuOwotICBpbmZvLm1lc3NhZ2VfID0g
bWVzc2FnZTsKLSAgaW5mby5leHRyYV8gPSBleHRyYTsKLSAgZXJyb3JzXy5wdXNoX2JhY2soaW5m
byk7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBPdXJSZWFkZXI6OnJlY292ZXJGcm9tRXJy
b3IoVG9rZW5UeXBlIHNraXBVbnRpbFRva2VuKSB7Ci0gIGludCBlcnJvckNvdW50ID0gaW50KGVy
cm9yc18uc2l6ZSgpKTsKLSAgVG9rZW4gc2tpcDsKLSAgZm9yICg7OykgewotICAgIGlmICghcmVh
ZFRva2VuKHNraXApKQotICAgICAgZXJyb3JzXy5yZXNpemUoZXJyb3JDb3VudCk7IC8vIGRpc2Nh
cmQgZXJyb3JzIGNhdXNlZCBieSByZWNvdmVyeQotICAgIGlmIChza2lwLnR5cGVfID09IHNraXBV
bnRpbFRva2VuIHx8IHNraXAudHlwZV8gPT0gdG9rZW5FbmRPZlN0cmVhbSkKLSAgICAgIGJyZWFr
OwotICB9Ci0gIGVycm9yc18ucmVzaXplKGVycm9yQ291bnQpOwotICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgT3VyUmVhZGVyOjphZGRFcnJvckFuZFJlY292ZXIoY29uc3Qgc3RkOjpzdHJpbmcm
IG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuJiB0b2tlbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5UeXBlIHNraXBVbnRpbFRva2Vu
KSB7Ci0gIGFkZEVycm9yKG1lc3NhZ2UsIHRva2VuKTsKLSAgcmV0dXJuIHJlY292ZXJGcm9tRXJy
b3Ioc2tpcFVudGlsVG9rZW4pOwotfQotCi1WYWx1ZSYgT3VyUmVhZGVyOjpjdXJyZW50VmFsdWUo
KSB7IHJldHVybiAqKG5vZGVzXy50b3AoKSk7IH0KLQotT3VyUmVhZGVyOjpDaGFyIE91clJlYWRl
cjo6Z2V0TmV4dENoYXIoKSB7Ci0gIGlmIChjdXJyZW50XyA9PSBlbmRfKQotICAgIHJldHVybiAw
OwotICByZXR1cm4gKmN1cnJlbnRfKys7Ci19Ci0KLXZvaWQgT3VyUmVhZGVyOjpnZXRMb2NhdGlv
bkxpbmVBbmRDb2x1bW4oTG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCYgbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50JiBjb2x1bW4pIGNvbnN0IHsKLSAgTG9jYXRpb24gY3VycmVudCA9IGJlZ2lu
XzsKLSAgTG9jYXRpb24gbGFzdExpbmVTdGFydCA9IGN1cnJlbnQ7Ci0gIGxpbmUgPSAwOwotICB3
aGlsZSAoY3VycmVudCA8IGxvY2F0aW9uICYmIGN1cnJlbnQgIT0gZW5kXykgewotICAgIENoYXIg
YyA9ICpjdXJyZW50Kys7Ci0gICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgaWYgKCpjdXJyZW50
ID09ICdcbicpCi0gICAgICAgICsrY3VycmVudDsKLSAgICAgIGxhc3RMaW5lU3RhcnQgPSBjdXJy
ZW50OwotICAgICAgKytsaW5lOwotICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICBs
YXN0TGluZVN0YXJ0ID0gY3VycmVudDsKLSAgICAgICsrbGluZTsKLSAgICB9Ci0gIH0KLSAgLy8g
Y29sdW1uICYgbGluZSBzdGFydCBhdCAxCi0gIGNvbHVtbiA9IGludChsb2NhdGlvbiAtIGxhc3RM
aW5lU3RhcnQpICsgMTsKLSAgKytsaW5lOwotfQotCi1zdGQ6OnN0cmluZyBPdXJSZWFkZXI6Omdl
dExvY2F0aW9uTGluZUFuZENvbHVtbihMb2NhdGlvbiBsb2NhdGlvbikgY29uc3QgewotICBpbnQg
bGluZSwgY29sdW1uOwotICBnZXRMb2NhdGlvbkxpbmVBbmRDb2x1bW4obG9jYXRpb24sIGxpbmUs
IGNvbHVtbik7Ci0gIGNoYXIgYnVmZmVyWzE4ICsgMTYgKyAxNiArIDFdOwotICBzbnByaW50Zihi
dWZmZXIsIHNpemVvZihidWZmZXIpLCAiTGluZSAlZCwgQ29sdW1uICVkIiwgbGluZSwgY29sdW1u
KTsKLSAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjpzdHJpbmcgT3VyUmVhZGVyOjpnZXRGb3Jt
YXR0ZWRFcnJvck1lc3NhZ2VzKCkgY29uc3QgewotICBzdGQ6OnN0cmluZyBmb3JtYXR0ZWRNZXNz
YWdlOwotICBmb3IgKEVycm9yczo6Y29uc3RfaXRlcmF0b3IgaXRFcnJvciA9IGVycm9yc18uYmVn
aW4oKTsKLSAgICAgICBpdEVycm9yICE9IGVycm9yc18uZW5kKCk7Ci0gICAgICAgKytpdEVycm9y
KSB7Ci0gICAgY29uc3QgRXJyb3JJbmZvJiBlcnJvciA9ICppdEVycm9yOwotICAgIGZvcm1hdHRl
ZE1lc3NhZ2UgKz0KLSAgICAgICAgIiogIiArIGdldExvY2F0aW9uTGluZUFuZENvbHVtbihlcnJv
ci50b2tlbl8uc3RhcnRfKSArICJcbiI7Ci0gICAgZm9ybWF0dGVkTWVzc2FnZSArPSAiICAiICsg
ZXJyb3IubWVzc2FnZV8gKyAiXG4iOwotICAgIGlmIChlcnJvci5leHRyYV8pCi0gICAgICBmb3Jt
YXR0ZWRNZXNzYWdlICs9Ci0gICAgICAgICAgIlNlZSAiICsgZ2V0TG9jYXRpb25MaW5lQW5kQ29s
dW1uKGVycm9yLmV4dHJhXykgKyAiIGZvciBkZXRhaWwuXG4iOwotICB9Ci0gIHJldHVybiBmb3Jt
YXR0ZWRNZXNzYWdlOwotfQotCi1zdGQ6OnZlY3RvcjxPdXJSZWFkZXI6OlN0cnVjdHVyZWRFcnJv
cj4gT3VyUmVhZGVyOjpnZXRTdHJ1Y3R1cmVkRXJyb3JzKCkgY29uc3QgewotICBzdGQ6OnZlY3Rv
cjxPdXJSZWFkZXI6OlN0cnVjdHVyZWRFcnJvcj4gYWxsRXJyb3JzOwotICBmb3IgKEVycm9yczo6
Y29uc3RfaXRlcmF0b3IgaXRFcnJvciA9IGVycm9yc18uYmVnaW4oKTsKLSAgICAgICBpdEVycm9y
ICE9IGVycm9yc18uZW5kKCk7Ci0gICAgICAgKytpdEVycm9yKSB7Ci0gICAgY29uc3QgRXJyb3JJ
bmZvJiBlcnJvciA9ICppdEVycm9yOwotICAgIE91clJlYWRlcjo6U3RydWN0dXJlZEVycm9yIHN0
cnVjdHVyZWQ7Ci0gICAgc3RydWN0dXJlZC5vZmZzZXRfc3RhcnQgPSBlcnJvci50b2tlbl8uc3Rh
cnRfIC0gYmVnaW5fOwotICAgIHN0cnVjdHVyZWQub2Zmc2V0X2xpbWl0ID0gZXJyb3IudG9rZW5f
LmVuZF8gLSBiZWdpbl87Ci0gICAgc3RydWN0dXJlZC5tZXNzYWdlID0gZXJyb3IubWVzc2FnZV87
Ci0gICAgYWxsRXJyb3JzLnB1c2hfYmFjayhzdHJ1Y3R1cmVkKTsKLSAgfQotICByZXR1cm4gYWxs
RXJyb3JzOwotfQotCi1ib29sIE91clJlYWRlcjo6cHVzaEVycm9yKGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpIHsKLSAgc2l6ZV90IGxlbmd0aCA9IGVuZF8g
LSBiZWdpbl87Ci0gIGlmKHZhbHVlLmdldE9mZnNldFN0YXJ0KCkgPiBsZW5ndGgKLSAgICB8fCB2
YWx1ZS5nZXRPZmZzZXRMaW1pdCgpID4gbGVuZ3RoKQotICAgIHJldHVybiBmYWxzZTsKLSAgVG9r
ZW4gdG9rZW47Ci0gIHRva2VuLnR5cGVfID0gdG9rZW5FcnJvcjsKLSAgdG9rZW4uc3RhcnRfID0g
YmVnaW5fICsgdmFsdWUuZ2V0T2Zmc2V0U3RhcnQoKTsKLSAgdG9rZW4uZW5kXyA9IGVuZF8gKyB2
YWx1ZS5nZXRPZmZzZXRMaW1pdCgpOwotICBFcnJvckluZm8gaW5mbzsKLSAgaW5mby50b2tlbl8g
PSB0b2tlbjsKLSAgaW5mby5tZXNzYWdlXyA9IG1lc3NhZ2U7Ci0gIGluZm8uZXh0cmFfID0gMDsK
LSAgZXJyb3JzXy5wdXNoX2JhY2soaW5mbyk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIE91
clJlYWRlcjo6cHVzaEVycm9yKGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFZhbHVlJiBleHRyYSkgewotICBzaXplX3QgbGVuZ3RoID0gZW5kXyAt
IGJlZ2luXzsKLSAgaWYodmFsdWUuZ2V0T2Zmc2V0U3RhcnQoKSA+IGxlbmd0aAotICAgIHx8IHZh
bHVlLmdldE9mZnNldExpbWl0KCkgPiBsZW5ndGgKLSAgICB8fCBleHRyYS5nZXRPZmZzZXRMaW1p
dCgpID4gbGVuZ3RoKQotICAgIHJldHVybiBmYWxzZTsKLSAgVG9rZW4gdG9rZW47Ci0gIHRva2Vu
LnR5cGVfID0gdG9rZW5FcnJvcjsKLSAgdG9rZW4uc3RhcnRfID0gYmVnaW5fICsgdmFsdWUuZ2V0
T2Zmc2V0U3RhcnQoKTsKLSAgdG9rZW4uZW5kXyA9IGJlZ2luXyArIHZhbHVlLmdldE9mZnNldExp
bWl0KCk7Ci0gIEVycm9ySW5mbyBpbmZvOwotICBpbmZvLnRva2VuXyA9IHRva2VuOwotICBpbmZv
Lm1lc3NhZ2VfID0gbWVzc2FnZTsKLSAgaW5mby5leHRyYV8gPSBiZWdpbl8gKyBleHRyYS5nZXRP
ZmZzZXRTdGFydCgpOwotICBlcnJvcnNfLnB1c2hfYmFjayhpbmZvKTsKLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgT3VyUmVhZGVyOjpnb29kKCkgY29uc3QgewotICByZXR1cm4gIWVycm9yc18u
c2l6ZSgpOwotfQotCi0KLWNsYXNzIE91ckNoYXJSZWFkZXIgOiBwdWJsaWMgQ2hhclJlYWRlciB7
Ci0gIGJvb2wgY29uc3QgY29sbGVjdENvbW1lbnRzXzsKLSAgT3VyUmVhZGVyIHJlYWRlcl87Ci1w
dWJsaWM6Ci0gIE91ckNoYXJSZWFkZXIoCi0gICAgYm9vbCBjb2xsZWN0Q29tbWVudHMsCi0gICAg
T3VyRmVhdHVyZXMgY29uc3QmIGZlYXR1cmVzKQotICA6IGNvbGxlY3RDb21tZW50c18oY29sbGVj
dENvbW1lbnRzKQotICAsIHJlYWRlcl8oZmVhdHVyZXMpCi0gIHt9Ci0gIGJvb2wgcGFyc2UoCi0g
ICAgICBjaGFyIGNvbnN0KiBiZWdpbkRvYywgY2hhciBjb25zdCogZW5kRG9jLAotICAgICAgVmFs
dWUqIHJvb3QsIHN0ZDo6c3RyaW5nKiBlcnJzKSBvdmVycmlkZSB7Ci0gICAgYm9vbCBvayA9IHJl
YWRlcl8ucGFyc2UoYmVnaW5Eb2MsIGVuZERvYywgKnJvb3QsIGNvbGxlY3RDb21tZW50c18pOwot
ICAgIGlmIChlcnJzKSB7Ci0gICAgICAqZXJycyA9IHJlYWRlcl8uZ2V0Rm9ybWF0dGVkRXJyb3JN
ZXNzYWdlcygpOwotICAgIH0KLSAgICByZXR1cm4gb2s7Ci0gIH0KLX07Ci0KLUNoYXJSZWFkZXJC
dWlsZGVyOjpDaGFyUmVhZGVyQnVpbGRlcigpCi17Ci0gIHNldERlZmF1bHRzKCZzZXR0aW5nc18p
OwotfQotQ2hhclJlYWRlckJ1aWxkZXI6On5DaGFyUmVhZGVyQnVpbGRlcigpCi17fQotQ2hhclJl
YWRlciogQ2hhclJlYWRlckJ1aWxkZXI6Om5ld0NoYXJSZWFkZXIoKSBjb25zdAotewotICBib29s
IGNvbGxlY3RDb21tZW50cyA9IHNldHRpbmdzX1siY29sbGVjdENvbW1lbnRzIl0uYXNCb29sKCk7
Ci0gIE91ckZlYXR1cmVzIGZlYXR1cmVzID0gT3VyRmVhdHVyZXM6OmFsbCgpOwotICBmZWF0dXJl
cy5hbGxvd0NvbW1lbnRzXyA9IHNldHRpbmdzX1siYWxsb3dDb21tZW50cyJdLmFzQm9vbCgpOwot
ICBmZWF0dXJlcy5zdHJpY3RSb290XyA9IHNldHRpbmdzX1sic3RyaWN0Um9vdCJdLmFzQm9vbCgp
OwotICBmZWF0dXJlcy5hbGxvd0Ryb3BwZWROdWxsUGxhY2Vob2xkZXJzXyA9IHNldHRpbmdzX1si
YWxsb3dEcm9wcGVkTnVsbFBsYWNlaG9sZGVycyJdLmFzQm9vbCgpOwotICBmZWF0dXJlcy5hbGxv
d051bWVyaWNLZXlzXyA9IHNldHRpbmdzX1siYWxsb3dOdW1lcmljS2V5cyJdLmFzQm9vbCgpOwot
ICBmZWF0dXJlcy5hbGxvd1NpbmdsZVF1b3Rlc18gPSBzZXR0aW5nc19bImFsbG93U2luZ2xlUXVv
dGVzIl0uYXNCb29sKCk7Ci0gIGZlYXR1cmVzLnN0YWNrTGltaXRfID0gc2V0dGluZ3NfWyJzdGFj
a0xpbWl0Il0uYXNJbnQoKTsKLSAgZmVhdHVyZXMuZmFpbElmRXh0cmFfID0gc2V0dGluZ3NfWyJm
YWlsSWZFeHRyYSJdLmFzQm9vbCgpOwotICBmZWF0dXJlcy5yZWplY3REdXBLZXlzXyA9IHNldHRp
bmdzX1sicmVqZWN0RHVwS2V5cyJdLmFzQm9vbCgpOwotICBmZWF0dXJlcy5hbGxvd1NwZWNpYWxG
bG9hdHNfID0gc2V0dGluZ3NfWyJhbGxvd1NwZWNpYWxGbG9hdHMiXS5hc0Jvb2woKTsKLSAgcmV0
dXJuIG5ldyBPdXJDaGFyUmVhZGVyKGNvbGxlY3RDb21tZW50cywgZmVhdHVyZXMpOwotfQotc3Rh
dGljIHZvaWQgZ2V0VmFsaWRSZWFkZXJLZXlzKHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiogdmFsaWRf
a2V5cykKLXsKLSAgdmFsaWRfa2V5cy0+Y2xlYXIoKTsKLSAgdmFsaWRfa2V5cy0+aW5zZXJ0KCJj
b2xsZWN0Q29tbWVudHMiKTsKLSAgdmFsaWRfa2V5cy0+aW5zZXJ0KCJhbGxvd0NvbW1lbnRzIik7
Ci0gIHZhbGlkX2tleXMtPmluc2VydCgic3RyaWN0Um9vdCIpOwotICB2YWxpZF9rZXlzLT5pbnNl
cnQoImFsbG93RHJvcHBlZE51bGxQbGFjZWhvbGRlcnMiKTsKLSAgdmFsaWRfa2V5cy0+aW5zZXJ0
KCJhbGxvd051bWVyaWNLZXlzIik7Ci0gIHZhbGlkX2tleXMtPmluc2VydCgiYWxsb3dTaW5nbGVR
dW90ZXMiKTsKLSAgdmFsaWRfa2V5cy0+aW5zZXJ0KCJzdGFja0xpbWl0Iik7Ci0gIHZhbGlkX2tl
eXMtPmluc2VydCgiZmFpbElmRXh0cmEiKTsKLSAgdmFsaWRfa2V5cy0+aW5zZXJ0KCJyZWplY3RE
dXBLZXlzIik7Ci0gIHZhbGlkX2tleXMtPmluc2VydCgiYWxsb3dTcGVjaWFsRmxvYXRzIik7Ci19
Ci1ib29sIENoYXJSZWFkZXJCdWlsZGVyOjp2YWxpZGF0ZShKc29uOjpWYWx1ZSogaW52YWxpZCkg
Y29uc3QKLXsKLSAgSnNvbjo6VmFsdWUgbXlfaW52YWxpZDsKLSAgaWYgKCFpbnZhbGlkKSBpbnZh
bGlkID0gJm15X2ludmFsaWQ7ICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byB0ZXN0IGZvciBOVUxM
Ci0gIEpzb246OlZhbHVlJiBpbnYgPSAqaW52YWxpZDsKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+
IHZhbGlkX2tleXM7Ci0gIGdldFZhbGlkUmVhZGVyS2V5cygmdmFsaWRfa2V5cyk7Ci0gIFZhbHVl
OjpNZW1iZXJzIGtleXMgPSBzZXR0aW5nc18uZ2V0TWVtYmVyTmFtZXMoKTsKLSAgc2l6ZV90IG4g
PSBrZXlzLnNpemUoKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICBz
dGQ6OnN0cmluZyBjb25zdCYga2V5ID0ga2V5c1tpXTsKLSAgICBpZiAodmFsaWRfa2V5cy5maW5k
KGtleSkgPT0gdmFsaWRfa2V5cy5lbmQoKSkgewotICAgICAgaW52W2tleV0gPSBzZXR0aW5nc19b
a2V5XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDB1ID09IGludi5zaXplKCk7Ci19Ci1WYWx1ZSYg
Q2hhclJlYWRlckJ1aWxkZXI6Om9wZXJhdG9yW10oc3RkOjpzdHJpbmcga2V5KQotewotICByZXR1
cm4gc2V0dGluZ3NfW2tleV07Ci19Ci0vLyBzdGF0aWMKLXZvaWQgQ2hhclJlYWRlckJ1aWxkZXI6
OnN0cmljdE1vZGUoSnNvbjo6VmFsdWUqIHNldHRpbmdzKQotewotLy8hIFtDaGFyUmVhZGVyQnVp
bGRlclN0cmljdE1vZGVdCi0gICgqc2V0dGluZ3MpWyJhbGxvd0NvbW1lbnRzIl0gPSBmYWxzZTsK
LSAgKCpzZXR0aW5ncylbInN0cmljdFJvb3QiXSA9IHRydWU7Ci0gICgqc2V0dGluZ3MpWyJhbGxv
d0Ryb3BwZWROdWxsUGxhY2Vob2xkZXJzIl0gPSBmYWxzZTsKLSAgKCpzZXR0aW5ncylbImFsbG93
TnVtZXJpY0tleXMiXSA9IGZhbHNlOwotICAoKnNldHRpbmdzKVsiYWxsb3dTaW5nbGVRdW90ZXMi
XSA9IGZhbHNlOwotICAoKnNldHRpbmdzKVsic3RhY2tMaW1pdCJdID0gMTAwMDsKLSAgKCpzZXR0
aW5ncylbImZhaWxJZkV4dHJhIl0gPSB0cnVlOwotICAoKnNldHRpbmdzKVsicmVqZWN0RHVwS2V5
cyJdID0gdHJ1ZTsKLSAgKCpzZXR0aW5ncylbImFsbG93U3BlY2lhbEZsb2F0cyJdID0gZmFsc2U7
Ci0vLyEgW0NoYXJSZWFkZXJCdWlsZGVyU3RyaWN0TW9kZV0KLX0KLS8vIHN0YXRpYwotdm9pZCBD
aGFyUmVhZGVyQnVpbGRlcjo6c2V0RGVmYXVsdHMoSnNvbjo6VmFsdWUqIHNldHRpbmdzKQotewot
Ly8hIFtDaGFyUmVhZGVyQnVpbGRlckRlZmF1bHRzXQotICAoKnNldHRpbmdzKVsiY29sbGVjdENv
bW1lbnRzIl0gPSB0cnVlOwotICAoKnNldHRpbmdzKVsiYWxsb3dDb21tZW50cyJdID0gdHJ1ZTsK
LSAgKCpzZXR0aW5ncylbInN0cmljdFJvb3QiXSA9IGZhbHNlOwotICAoKnNldHRpbmdzKVsiYWxs
b3dEcm9wcGVkTnVsbFBsYWNlaG9sZGVycyJdID0gZmFsc2U7Ci0gICgqc2V0dGluZ3MpWyJhbGxv
d051bWVyaWNLZXlzIl0gPSBmYWxzZTsKLSAgKCpzZXR0aW5ncylbImFsbG93U2luZ2xlUXVvdGVz
Il0gPSBmYWxzZTsKLSAgKCpzZXR0aW5ncylbInN0YWNrTGltaXQiXSA9IDEwMDA7Ci0gICgqc2V0
dGluZ3MpWyJmYWlsSWZFeHRyYSJdID0gZmFsc2U7Ci0gICgqc2V0dGluZ3MpWyJyZWplY3REdXBL
ZXlzIl0gPSBmYWxzZTsKLSAgKCpzZXR0aW5ncylbImFsbG93U3BlY2lhbEZsb2F0cyJdID0gZmFs
c2U7Ci0vLyEgW0NoYXJSZWFkZXJCdWlsZGVyRGVmYXVsdHNdCi19Ci0KLS8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIGdsb2JhbCBmdW5jdGlvbnMKLQotYm9vbCBwYXJzZUZy
b21TdHJlYW0oCi0gICAgQ2hhclJlYWRlcjo6RmFjdG9yeSBjb25zdCYgZmFjdCwgc3RkOjppc3Ry
ZWFtJiBzaW4sCi0gICAgVmFsdWUqIHJvb3QsIHN0ZDo6c3RyaW5nKiBlcnJzKQotewotICBzdGQ6
Om9zdHJpbmdzdHJlYW0gc3NpbjsKLSAgc3NpbiA8PCBzaW4ucmRidWYoKTsKLSAgc3RkOjpzdHJp
bmcgZG9jID0gc3Npbi5zdHIoKTsKLSAgY2hhciBjb25zdCogYmVnaW4gPSBkb2MuZGF0YSgpOwot
ICBjaGFyIGNvbnN0KiBlbmQgPSBiZWdpbiArIGRvYy5zaXplKCk7Ci0gIC8vIE5vdGUgdGhhdCB3
ZSBkbyBub3QgYWN0dWFsbHkgbmVlZCBhIG51bGwtdGVybWluYXRvci4KLSAgQ2hhclJlYWRlclB0
ciBjb25zdCByZWFkZXIoZmFjdC5uZXdDaGFyUmVhZGVyKCkpOwotICByZXR1cm4gcmVhZGVyLT5w
YXJzZShiZWdpbiwgZW5kLCByb290LCBlcnJzKTsKLX0KLQotc3RkOjppc3RyZWFtJiBvcGVyYXRv
cj4+KHN0ZDo6aXN0cmVhbSYgc2luLCBWYWx1ZSYgcm9vdCkgewotICBDaGFyUmVhZGVyQnVpbGRl
ciBiOwotICBzdGQ6OnN0cmluZyBlcnJzOwotICBib29sIG9rID0gcGFyc2VGcm9tU3RyZWFtKGIs
IHNpbiwgJnJvb3QsICZlcnJzKTsKLSAgaWYgKCFvaykgewotICAgIGZwcmludGYoc3RkZXJyLAot
ICAgICAgICAgICAgIkVycm9yIGZyb20gcmVhZGVyOiAlcyIsCi0gICAgICAgICAgICBlcnJzLmNf
c3RyKCkpOwotCi0gICAgdGhyb3dSdW50aW1lRXJyb3IoZXJycyk7Ci0gIH0KLSAgcmV0dXJuIHNp
bjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSnNvbgotCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBFbmQg
b2YgY29udGVudCBvZiBmaWxlOiBzcmMvbGliX2pzb24vanNvbl9yZWFkZXIuY3BwCi0vLyAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLQotCi0KLQotCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBCZWdpbm5pbmcgb2Yg
Y29udGVudCBvZiBmaWxlOiBzcmMvbGliX2pzb24vanNvbl92YWx1ZWl0ZXJhdG9yLmlubAotLy8g
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0vLyBDb3B5cmlnaHQgMjAwNy0yMDEwIEJhcHRpc3RlIExlcGlsbGV1
cgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIG9yIHB1YmxpYyBkb21haW4gaWYg
ZGVzaXJlZCBhbmQKLS8vIHJlY29nbml6ZWQgaW4geW91ciBqdXJpc2RpY3Rpb24uCi0vLyBTZWUg
ZmlsZSBMSUNFTlNFIGZvciBkZXRhaWwgb3IgY29weSBhdCBodHRwOi8vanNvbmNwcC5zb3VyY2Vm
b3JnZS5uZXQvTElDRU5TRQotCi0vLyBpbmNsdWRlZCBieSBqc29uX3ZhbHVlLmNwcAotCi1uYW1l
c3BhY2UgSnNvbiB7Ci0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8vIGNsYXNzIFZhbHVlSXRlcmF0b3JCYXNlCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0KLVZhbHVlSXRlcmF0b3JCYXNlOjpWYWx1ZUl0ZXJhdG9yQmFzZSgpCi0g
ICAgOiBjdXJyZW50XygpLCBpc051bGxfKHRydWUpIHsKLX0KLQotVmFsdWVJdGVyYXRvckJhc2U6
OlZhbHVlSXRlcmF0b3JCYXNlKAotICAgIGNvbnN0IFZhbHVlOjpPYmplY3RWYWx1ZXM6Oml0ZXJh
dG9yJiBjdXJyZW50KQotICAgIDogY3VycmVudF8oY3VycmVudCksIGlzTnVsbF8oZmFsc2UpIHt9
Ci0KLVZhbHVlJiBWYWx1ZUl0ZXJhdG9yQmFzZTo6ZGVyZWYoKSBjb25zdCB7Ci0gIHJldHVybiBj
dXJyZW50Xy0+c2Vjb25kOwotfQotCi12b2lkIFZhbHVlSXRlcmF0b3JCYXNlOjppbmNyZW1lbnQo
KSB7Ci0gICsrY3VycmVudF87Ci19Ci0KLXZvaWQgVmFsdWVJdGVyYXRvckJhc2U6OmRlY3JlbWVu
dCgpIHsKLSAgLS1jdXJyZW50XzsKLX0KLQotVmFsdWVJdGVyYXRvckJhc2U6OmRpZmZlcmVuY2Vf
dHlwZQotVmFsdWVJdGVyYXRvckJhc2U6OmNvbXB1dGVEaXN0YW5jZShjb25zdCBTZWxmVHlwZSYg
b3RoZXIpIGNvbnN0IHsKLSNpZmRlZiBKU09OX1VTRV9DUFBUTF9TTUFMTE1BUAotICByZXR1cm4g
b3RoZXIuY3VycmVudF8gLSBjdXJyZW50XzsKLSNlbHNlCi0gIC8vIEl0ZXJhdG9yIGZvciBudWxs
IHZhbHVlIGFyZSBpbml0aWFsaXplZCB1c2luZyB0aGUgZGVmYXVsdAotICAvLyBjb25zdHJ1Y3Rv
ciwgd2hpY2ggaW5pdGlhbGl6ZSBjdXJyZW50XyB0byB0aGUgZGVmYXVsdAotICAvLyBzdGQ6Om1h
cDo6aXRlcmF0b3IuIEFzIGJlZ2luKCkgYW5kIGVuZCgpIGFyZSB0d28gaW5zdGFuY2UKLSAgLy8g
b2YgdGhlIGRlZmF1bHQgc3RkOjptYXA6Oml0ZXJhdG9yLCB0aGV5IGNhbiBub3QgYmUgY29tcGFy
ZWQuCi0gIC8vIFRvIGFsbG93IHRoaXMsIHdlIGhhbmRsZSB0aGlzIGNvbXBhcmlzb24gc3BlY2lm
aWNhbGx5LgotICBpZiAoaXNOdWxsXyAmJiBvdGhlci5pc051bGxfKSB7Ci0gICAgcmV0dXJuIDA7
Ci0gIH0KLQotICAvLyBVc2FnZSBvZiBzdGQ6OmRpc3RhbmNlIGlzIG5vdCBwb3J0YWJsZSAoZG9l
cyBub3QgY29tcGlsZSB3aXRoIFN1biBTdHVkaW8gMTIKLSAgLy8gUm9ndWVXYXZlIFNUTCwKLSAg
Ly8gd2hpY2ggaXMgdGhlIG9uZSB1c2VkIGJ5IGRlZmF1bHQpLgotICAvLyBVc2luZyBhIHBvcnRh
YmxlIGhhbmQtbWFkZSB2ZXJzaW9uIGZvciBub24gcmFuZG9tIGl0ZXJhdG9yIGluc3RlYWQ6Ci0g
IC8vICAgcmV0dXJuIGRpZmZlcmVuY2VfdHlwZSggc3RkOjpkaXN0YW5jZSggY3VycmVudF8sIG90
aGVyLmN1cnJlbnRfICkgKTsKLSAgZGlmZmVyZW5jZV90eXBlIG15RGlzdGFuY2UgPSAwOwotICBm
b3IgKFZhbHVlOjpPYmplY3RWYWx1ZXM6Oml0ZXJhdG9yIGl0ID0gY3VycmVudF87IGl0ICE9IG90
aGVyLmN1cnJlbnRfOwotICAgICAgICsraXQpIHsKLSAgICArK215RGlzdGFuY2U7Ci0gIH0KLSAg
cmV0dXJuIG15RGlzdGFuY2U7Ci0jZW5kaWYKLX0KLQotYm9vbCBWYWx1ZUl0ZXJhdG9yQmFzZTo6
aXNFcXVhbChjb25zdCBTZWxmVHlwZSYgb3RoZXIpIGNvbnN0IHsKLSAgaWYgKGlzTnVsbF8pIHsK
LSAgICByZXR1cm4gb3RoZXIuaXNOdWxsXzsKLSAgfQotICByZXR1cm4gY3VycmVudF8gPT0gb3Ro
ZXIuY3VycmVudF87Ci19Ci0KLXZvaWQgVmFsdWVJdGVyYXRvckJhc2U6OmNvcHkoY29uc3QgU2Vs
ZlR5cGUmIG90aGVyKSB7Ci0gIGN1cnJlbnRfID0gb3RoZXIuY3VycmVudF87Ci0gIGlzTnVsbF8g
PSBvdGhlci5pc051bGxfOwotfQotCi1WYWx1ZSBWYWx1ZUl0ZXJhdG9yQmFzZTo6a2V5KCkgY29u
c3QgewotICBjb25zdCBWYWx1ZTo6Q1pTdHJpbmcgY3pzdHJpbmcgPSAoKmN1cnJlbnRfKS5maXJz
dDsKLSAgaWYgKGN6c3RyaW5nLmRhdGEoKSkgewotICAgIGlmIChjenN0cmluZy5pc1N0YXRpY1N0
cmluZygpKQotICAgICAgcmV0dXJuIFZhbHVlKFN0YXRpY1N0cmluZyhjenN0cmluZy5kYXRhKCkp
KTsKLSAgICByZXR1cm4gVmFsdWUoY3pzdHJpbmcuZGF0YSgpLCBjenN0cmluZy5kYXRhKCkgKyBj
enN0cmluZy5sZW5ndGgoKSk7Ci0gIH0KLSAgcmV0dXJuIFZhbHVlKGN6c3RyaW5nLmluZGV4KCkp
OwotfQotCi1VSW50IFZhbHVlSXRlcmF0b3JCYXNlOjppbmRleCgpIGNvbnN0IHsKLSAgY29uc3Qg
VmFsdWU6OkNaU3RyaW5nIGN6c3RyaW5nID0gKCpjdXJyZW50XykuZmlyc3Q7Ci0gIGlmICghY3pz
dHJpbmcuZGF0YSgpKQotICAgIHJldHVybiBjenN0cmluZy5pbmRleCgpOwotICByZXR1cm4gVmFs
dWU6OlVJbnQoLTEpOwotfQotCi1zdGQ6OnN0cmluZyBWYWx1ZUl0ZXJhdG9yQmFzZTo6bmFtZSgp
IGNvbnN0IHsKLSAgY2hhciBjb25zdCoga2VleTsKLSAgY2hhciBjb25zdCogZW5kOwotICBrZWV5
ID0gbWVtYmVyTmFtZSgmZW5kKTsKLSAgaWYgKCFrZWV5KSByZXR1cm4gc3RkOjpzdHJpbmcoKTsK
LSAgcmV0dXJuIHN0ZDo6c3RyaW5nKGtlZXksIGVuZCk7Ci19Ci0KLWNoYXIgY29uc3QqIFZhbHVl
SXRlcmF0b3JCYXNlOjptZW1iZXJOYW1lKCkgY29uc3QgewotICBjb25zdCBjaGFyKiBjbmFtZSA9
ICgqY3VycmVudF8pLmZpcnN0LmRhdGEoKTsKLSAgcmV0dXJuIGNuYW1lID8gY25hbWUgOiAiIjsK
LX0KLQotY2hhciBjb25zdCogVmFsdWVJdGVyYXRvckJhc2U6Om1lbWJlck5hbWUoY2hhciBjb25z
dCoqIGVuZCkgY29uc3QgewotICBjb25zdCBjaGFyKiBjbmFtZSA9ICgqY3VycmVudF8pLmZpcnN0
LmRhdGEoKTsKLSAgaWYgKCFjbmFtZSkgewotICAgICplbmQgPSBOVUxMOwotICAgIHJldHVybiBO
VUxMOwotICB9Ci0gICplbmQgPSBjbmFtZSArICgqY3VycmVudF8pLmZpcnN0Lmxlbmd0aCgpOwot
ICByZXR1cm4gY25hbWU7Ci19Ci0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vIGNsYXNzIFZhbHVlQ29uc3RJdGVyYXRvcgotLy8gLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi1WYWx1ZUNvbnN0SXRlcmF0b3I6OlZhbHVlQ29uc3RJdGVy
YXRvcigpIHt9Ci0KLVZhbHVlQ29uc3RJdGVyYXRvcjo6VmFsdWVDb25zdEl0ZXJhdG9yKAotICAg
IGNvbnN0IFZhbHVlOjpPYmplY3RWYWx1ZXM6Oml0ZXJhdG9yJiBjdXJyZW50KQotICAgIDogVmFs
dWVJdGVyYXRvckJhc2UoY3VycmVudCkge30KLQotVmFsdWVDb25zdEl0ZXJhdG9yOjpWYWx1ZUNv
bnN0SXRlcmF0b3IoVmFsdWVJdGVyYXRvciBjb25zdCYgb3RoZXIpCi0gICAgOiBWYWx1ZUl0ZXJh
dG9yQmFzZShvdGhlcikge30KLQotVmFsdWVDb25zdEl0ZXJhdG9yJiBWYWx1ZUNvbnN0SXRlcmF0
b3I6Ogotb3BlcmF0b3I9KGNvbnN0IFZhbHVlSXRlcmF0b3JCYXNlJiBvdGhlcikgewotICBjb3B5
KG90aGVyKTsKLSAgcmV0dXJuICp0aGlzOwotfQotCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLyBjbGFzcyBWYWx1ZUl0ZXJhdG9yCi0vLyAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLVZhbHVlSXRlcmF0b3I6OlZhbHVlSXRlcmF0b3Io
KSB7fQotCi1WYWx1ZUl0ZXJhdG9yOjpWYWx1ZUl0ZXJhdG9yKGNvbnN0IFZhbHVlOjpPYmplY3RW
YWx1ZXM6Oml0ZXJhdG9yJiBjdXJyZW50KQotICAgIDogVmFsdWVJdGVyYXRvckJhc2UoY3VycmVu
dCkge30KLQotVmFsdWVJdGVyYXRvcjo6VmFsdWVJdGVyYXRvcihjb25zdCBWYWx1ZUNvbnN0SXRl
cmF0b3ImIG90aGVyKQotICAgIDogVmFsdWVJdGVyYXRvckJhc2Uob3RoZXIpIHsKLSAgdGhyb3dS
dW50aW1lRXJyb3IoIkNvbnN0SXRlcmF0b3IgdG8gSXRlcmF0b3Igc2hvdWxkIG5ldmVyIGJlIGFs
bG93ZWQuIik7Ci19Ci0KLVZhbHVlSXRlcmF0b3I6OlZhbHVlSXRlcmF0b3IoY29uc3QgVmFsdWVJ
dGVyYXRvciYgb3RoZXIpCi0gICAgOiBWYWx1ZUl0ZXJhdG9yQmFzZShvdGhlcikge30KLQotVmFs
dWVJdGVyYXRvciYgVmFsdWVJdGVyYXRvcjo6b3BlcmF0b3I9KGNvbnN0IFNlbGZUeXBlJiBvdGhl
cikgewotICBjb3B5KG90aGVyKTsKLSAgcmV0dXJuICp0aGlzOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKc29uCi0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEVuZCBvZiBjb250ZW50IG9mIGZpbGU6IHNy
Yy9saWJfanNvbi9qc29uX3ZhbHVlaXRlcmF0b3IuaW5sCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQot
Ci0KLQotCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBCZWdpbm5pbmcgb2YgY29udGVudCBvZiBmaWxl
OiBzcmMvbGliX2pzb24vanNvbl92YWx1ZS5jcHAKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy8gQ29w
eXJpZ2h0IDIwMTEgQmFwdGlzdGUgTGVwaWxsZXVyCi0vLyBEaXN0cmlidXRlZCB1bmRlciBNSVQg
bGljZW5zZSwgb3IgcHVibGljIGRvbWFpbiBpZiBkZXNpcmVkIGFuZAotLy8gcmVjb2duaXplZCBp
biB5b3VyIGp1cmlzZGljdGlvbi4KLS8vIFNlZSBmaWxlIExJQ0VOU0UgZm9yIGRldGFpbCBvciBj
b3B5IGF0IGh0dHA6Ly9qc29uY3BwLnNvdXJjZWZvcmdlLm5ldC9MSUNFTlNFCi0KLSNpZiAhZGVm
aW5lZChKU09OX0lTX0FNQUxHQU1BVElPTikKLSNpbmNsdWRlIDxqc29uL2Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDxqc29uL3ZhbHVlLmg+Ci0jaW5jbHVkZSA8anNvbi93cml0ZXIuaD4KLSNlbmRp
ZiAvLyBpZiAhZGVmaW5lZChKU09OX0lTX0FNQUxHQU1BVElPTikKLSNpbmNsdWRlIDxtYXRoLmg+
Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPGNzdHJp
bmc+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpZmRlZiBKU09OX1VTRV9DUFBUTAotI2luY2x1ZGUg
PGNwcHRsL2NvbnN0c3RyaW5nLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBzaXpl
X3QKLSNpbmNsdWRlIDxhbGdvcml0aG0+IC8vIG1pbigpCi0KLSNkZWZpbmUgSlNPTl9BU1NFUlRf
VU5SRUFDSEFCTEUgYXNzZXJ0KGZhbHNlKQotCi1uYW1lc3BhY2UgSnNvbiB7Ci0KLS8vIFRoaXMg
aXMgYSB3YWxrYXJvdW5kIHRvIGF2b2lkIHRoZSBzdGF0aWMgaW5pdGlhbGl6YXRpb24gb2YgVmFs
dWU6Om51bGwuCi0vLyBrTnVsbCBtdXN0IGJlIHdvcmQtYWxpZ25lZCB0byBhdm9pZCBjcmFzaGlu
ZyBvbiBBUk0uICBXZSB1c2UgYW4gYWxpZ25tZW50IG9mCi0vLyA4IChpbnN0ZWFkIG9mIDQpIGFz
IGEgYml0IG9mIGZ1dHVyZS1wcm9vZmluZy4KLSNpZiBkZWZpbmVkKF9fQVJNRUxfXykKLSNkZWZp
bmUgQUxJR05BUyhieXRlX2FsaWdubWVudCkgX19hdHRyaWJ1dGVfXygoYWxpZ25lZChieXRlX2Fs
aWdubWVudCkpKQotI2Vsc2UKLSNkZWZpbmUgQUxJR05BUyhieXRlX2FsaWdubWVudCkKLSNlbmRp
Zgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQUxJR05BUyg4KSBrTnVsbFtzaXplb2YoVmFs
dWUpXSA9IHsgMCB9OwotY29uc3QgdW5zaWduZWQgY2hhciYga051bGxSZWYgPSBrTnVsbFswXTsK
LWNvbnN0IFZhbHVlJiBWYWx1ZTo6bnVsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVmFsdWUm
PihrTnVsbFJlZik7Ci1jb25zdCBWYWx1ZSYgVmFsdWU6Om51bGxSZWYgPSBudWxsOwotCi1jb25z
dCBJbnQgVmFsdWU6Om1pbkludCA9IEludCh+KFVJbnQoLTEpIC8gMikpOwotY29uc3QgSW50IFZh
bHVlOjptYXhJbnQgPSBJbnQoVUludCgtMSkgLyAyKTsKLWNvbnN0IFVJbnQgVmFsdWU6Om1heFVJ
bnQgPSBVSW50KC0xKTsKLSNpZiBkZWZpbmVkKEpTT05fSEFTX0lOVDY0KQotY29uc3QgSW50NjQg
VmFsdWU6Om1pbkludDY0ID0gSW50NjQofihVSW50NjQoLTEpIC8gMikpOwotY29uc3QgSW50NjQg
VmFsdWU6Om1heEludDY0ID0gSW50NjQoVUludDY0KC0xKSAvIDIpOwotY29uc3QgVUludDY0IFZh
bHVlOjptYXhVSW50NjQgPSBVSW50NjQoLTEpOwotLy8gVGhlIGNvbnN0YW50IGlzIGhhcmQtY29k
ZWQgYmVjYXVzZSBzb21lIGNvbXBpbGVyIGhhdmUgdHJvdWJsZQotLy8gY29udmVydGluZyBWYWx1
ZTo6bWF4VUludDY0IHRvIGEgZG91YmxlIGNvcnJlY3RseSAoQUlYL3hsQykuCi0vLyBBc3N1bWVz
IHRoYXQgVUludDY0IGlzIGEgNjQgYml0cyBpbnRlZ2VyLgotc3RhdGljIGNvbnN0IGRvdWJsZSBt
YXhVSW50NjRBc0RvdWJsZSA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1LjA7Ci0jZW5kaWYgLy8gZGVm
aW5lZChKU09OX0hBU19JTlQ2NCkKLWNvbnN0IExhcmdlc3RJbnQgVmFsdWU6Om1pbkxhcmdlc3RJ
bnQgPSBMYXJnZXN0SW50KH4oTGFyZ2VzdFVJbnQoLTEpIC8gMikpOwotY29uc3QgTGFyZ2VzdElu
dCBWYWx1ZTo6bWF4TGFyZ2VzdEludCA9IExhcmdlc3RJbnQoTGFyZ2VzdFVJbnQoLTEpIC8gMik7
Ci1jb25zdCBMYXJnZXN0VUludCBWYWx1ZTo6bWF4TGFyZ2VzdFVJbnQgPSBMYXJnZXN0VUludCgt
MSk7Ci0KLSNpZiAhZGVmaW5lZChKU09OX1VTRV9JTlQ2NF9ET1VCTEVfQ09OVkVSU0lPTikKLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotc3RhdGljIGlubGluZSBib29sIEluUmFu
Z2UoZG91YmxlIGQsIFQgbWluLCBVIG1heCkgewotICByZXR1cm4gZCA+PSBtaW4gJiYgZCA8PSBt
YXg7Ci19Ci0jZWxzZSAgLy8gaWYgIWRlZmluZWQoSlNPTl9VU0VfSU5UNjRfRE9VQkxFX0NPTlZF
UlNJT04pCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBpbnRlZ2VyVG9Eb3VibGUoSnNvbjo6VUludDY0
IHZhbHVlKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KEludDY0KHZhbHVlIC8gMikp
ICogMi4wICsgSW50NjQodmFsdWUgJiAxKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0
YXRpYyBpbmxpbmUgZG91YmxlIGludGVnZXJUb0RvdWJsZShUIHZhbHVlKSB7Ci0gIHJldHVybiBz
dGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgSW5SYW5nZShkb3VibGUgZCwgVCBtaW4sIFUg
bWF4KSB7Ci0gIHJldHVybiBkID49IGludGVnZXJUb0RvdWJsZShtaW4pICYmIGQgPD0gaW50ZWdl
clRvRG91YmxlKG1heCk7Ci19Ci0jZW5kaWYgLy8gaWYgIWRlZmluZWQoSlNPTl9VU0VfSU5UNjRf
RE9VQkxFX0NPTlZFUlNJT04pCi0KLS8qKiBEdXBsaWNhdGVzIHRoZSBzcGVjaWZpZWQgc3RyaW5n
IHZhbHVlLgotICogQHBhcmFtIHZhbHVlIFBvaW50ZXIgdG8gdGhlIHN0cmluZyB0byBkdXBsaWNh
dGUuIE11c3QgYmUgemVyby10ZXJtaW5hdGVkIGlmCi0gKiAgICAgICAgICAgICAgbGVuZ3RoIGlz
ICJ1bmtub3duIi4KLSAqIEBwYXJhbSBsZW5ndGggTGVuZ3RoIG9mIHRoZSB2YWx1ZS4gaWYgZXF1
YWxzIHRvIHVua25vd24sIHRoZW4gaXQgd2lsbCBiZQotICogICAgICAgICAgICAgICBjb21wdXRl
ZCB1c2luZyBzdHJsZW4odmFsdWUpLgotICogQHJldHVybiBQb2ludGVyIG9uIHRoZSBkdXBsaWNh
dGUgaW5zdGFuY2Ugb2Ygc3RyaW5nLgotICovCi1zdGF0aWMgaW5saW5lIGNoYXIqIGR1cGxpY2F0
ZVN0cmluZ1ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKSB7Ci0gIC8vIEF2b2lkIGFuIGludGVnZXIg
b3ZlcmZsb3cgaW4gdGhlIGNhbGwgdG8gbWFsbG9jIGJlbG93IGJ5IGxpbWl0aW5nIGxlbmd0aAot
ICAvLyB0byBhIHNhbmUgdmFsdWUuCi0gIGlmIChsZW5ndGggPj0gKHNpemVfdClWYWx1ZTo6bWF4
SW50KQotICAgIGxlbmd0aCA9IFZhbHVlOjptYXhJbnQgLSAxOwotCi0gIGNoYXIqIG5ld1N0cmlu
ZyA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2MobGVuZ3RoICsgMSkpOwotICBpZiAobmV3U3Ry
aW5nID09IE5VTEwpIHsKLSAgICB0aHJvd1J1bnRpbWVFcnJvcigKLSAgICAgICAgImluIEpzb246
OlZhbHVlOjpkdXBsaWNhdGVTdHJpbmdWYWx1ZSgpOiAiCi0gICAgICAgICJGYWlsZWQgdG8gYWxs
b2NhdGUgc3RyaW5nIHZhbHVlIGJ1ZmZlciIpOwotICB9Ci0gIG1lbWNweShuZXdTdHJpbmcsIHZh
bHVlLCBsZW5ndGgpOwotICBuZXdTdHJpbmdbbGVuZ3RoXSA9IDA7Ci0gIHJldHVybiBuZXdTdHJp
bmc7Ci19Ci0KLS8qIFJlY29yZCB0aGUgbGVuZ3RoIGFzIGEgcHJlZml4LgotICovCi1zdGF0aWMg
aW5saW5lIGNoYXIqIGR1cGxpY2F0ZUFuZFByZWZpeFN0cmluZ1ZhbHVlKAotICAgIGNvbnN0IGNo
YXIqIHZhbHVlLAotICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0gIC8vIEF2b2lkIGFuIGlu
dGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGNhbGwgdG8gbWFsbG9jIGJlbG93IGJ5IGxpbWl0aW5nIGxl
bmd0aAotICAvLyB0byBhIHNhbmUgdmFsdWUuCi0gIEpTT05fQVNTRVJUX01FU1NBR0UobGVuZ3Ro
IDw9ICh1bnNpZ25lZClWYWx1ZTo6bWF4SW50IC0gc2l6ZW9mKHVuc2lnbmVkKSAtIDFVLAotICAg
ICAgICAgICAgICAgICAgICAgICJpbiBKc29uOjpWYWx1ZTo6ZHVwbGljYXRlQW5kUHJlZml4U3Ry
aW5nVmFsdWUoKTogIgotICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggdG9vIGJpZyBmb3Ig
cHJlZml4aW5nIik7Ci0gIHVuc2lnbmVkIGFjdHVhbExlbmd0aCA9IGxlbmd0aCArIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzaXplb2YodW5zaWduZWQpKSArIDFVOwotICBjaGFyKiBuZXdTdHJpbmcg
PSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKGFjdHVhbExlbmd0aCkpOwotICBpZiAobmV3U3Ry
aW5nID09IDApIHsKLSAgICB0aHJvd1J1bnRpbWVFcnJvcigKLSAgICAgICAgImluIEpzb246OlZh
bHVlOjpkdXBsaWNhdGVBbmRQcmVmaXhTdHJpbmdWYWx1ZSgpOiAiCi0gICAgICAgICJGYWlsZWQg
dG8gYWxsb2NhdGUgc3RyaW5nIHZhbHVlIGJ1ZmZlciIpOwotICB9Ci0gICpyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkKj4obmV3U3RyaW5nKSA9IGxlbmd0aDsKLSAgbWVtY3B5KG5ld1N0cmluZyAr
IHNpemVvZih1bnNpZ25lZCksIHZhbHVlLCBsZW5ndGgpOwotICBuZXdTdHJpbmdbYWN0dWFsTGVu
Z3RoIC0gMVVdID0gMDsgLy8gdG8gYXZvaWQgYnVmZmVyIG92ZXItcnVuIGFjY2lkZW50cyBieSB1
c2VycyBsYXRlcgotICByZXR1cm4gbmV3U3RyaW5nOwotfQotaW5saW5lIHN0YXRpYyB2b2lkIGRl
Y29kZVByZWZpeGVkU3RyaW5nKAotICAgIGJvb2wgaXNQcmVmaXhlZCwgY2hhciBjb25zdCogcHJl
Zml4ZWQsCi0gICAgdW5zaWduZWQqIGxlbmd0aCwgY2hhciBjb25zdCoqIHZhbHVlKQotewotICBp
ZiAoIWlzUHJlZml4ZWQpIHsKLSAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
cmxlbihwcmVmaXhlZCkpOwotICAgICp2YWx1ZSA9IHByZWZpeGVkOwotICB9IGVsc2UgewotICAg
ICpsZW5ndGggPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjb25zdCo+KHByZWZpeGVkKTsK
LSAgICAqdmFsdWUgPSBwcmVmaXhlZCArIHNpemVvZih1bnNpZ25lZCk7Ci0gIH0KLX0KLS8qKiBG
cmVlIHRoZSBzdHJpbmcgZHVwbGljYXRlZCBieSBkdXBsaWNhdGVTdHJpbmdWYWx1ZSgpL2R1cGxp
Y2F0ZUFuZFByZWZpeFN0cmluZ1ZhbHVlKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWxl
YXNlU3RyaW5nVmFsdWUoY2hhciogdmFsdWUpIHsgZnJlZSh2YWx1ZSk7IH0KLQotfSAvLyBuYW1l
c3BhY2UgSnNvbgotCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
LyBWYWx1ZUludGVybmFscy4uLgotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotI2lmICFkZWZpbmVkKEpTT05fSVNfQU1BTEdBTUFUSU9OKQotCi0jaW5jbHVkZSAianNv
bl92YWx1ZWl0ZXJhdG9yLmlubCIKLSNlbmRpZiAvLyBpZiAhZGVmaW5lZChKU09OX0lTX0FNQUxH
QU1BVElPTikKLQotbmFtZXNwYWNlIEpzb24gewotCi1FeGNlcHRpb246OkV4Y2VwdGlvbihzdGQ6
OnN0cmluZyBjb25zdCYgbXNnKQotICA6IG1zZ18obXNnKQote30KLUV4Y2VwdGlvbjo6fkV4Y2Vw
dGlvbigpIHRocm93KCkKLXt9Ci1jaGFyIGNvbnN0KiBFeGNlcHRpb246OndoYXQoKSBjb25zdCB0
aHJvdygpCi17Ci0gIHJldHVybiBtc2dfLmNfc3RyKCk7Ci19Ci1SdW50aW1lRXJyb3I6OlJ1bnRp
bWVFcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgbXNnKQotICA6IEV4Y2VwdGlvbihtc2cpCi17fQot
TG9naWNFcnJvcjo6TG9naWNFcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgbXNnKQotICA6IEV4Y2Vw
dGlvbihtc2cpCi17fQotdm9pZCB0aHJvd1J1bnRpbWVFcnJvcihzdGQ6OnN0cmluZyBjb25zdCYg
bXNnKQotewotICB0aHJvdyBSdW50aW1lRXJyb3IobXNnKTsKLX0KLXZvaWQgdGhyb3dMb2dpY0Vy
cm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpCi17Ci0gIHRocm93IExvZ2ljRXJyb3IobXNnKTsK
LX0KLQotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gY2xhc3Mg
VmFsdWU6OkNvbW1lbnRJbmZvCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0KLVZhbHVlOjpDb21tZW50SW5mbzo6Q29tbWVudEluZm8oKSA6IGNvbW1lbnRfKDApIHt9
Ci0KLVZhbHVlOjpDb21tZW50SW5mbzo6fkNvbW1lbnRJbmZvKCkgewotICBpZiAoY29tbWVudF8p
Ci0gICAgcmVsZWFzZVN0cmluZ1ZhbHVlKGNvbW1lbnRfKTsKLX0KLQotdm9pZCBWYWx1ZTo6Q29t
bWVudEluZm86OnNldENvbW1lbnQoY29uc3QgY2hhciogdGV4dCwgc2l6ZV90IGxlbikgewotICBp
ZiAoY29tbWVudF8pIHsKLSAgICByZWxlYXNlU3RyaW5nVmFsdWUoY29tbWVudF8pOwotICAgIGNv
bW1lbnRfID0gMDsKLSAgfQotICBKU09OX0FTU0VSVCh0ZXh0ICE9IDApOwotICBKU09OX0FTU0VS
VF9NRVNTQUdFKAotICAgICAgdGV4dFswXSA9PSAnXDAnIHx8IHRleHRbMF0gPT0gJy8nLAotICAg
ICAgImluIEpzb246OlZhbHVlOjpzZXRDb21tZW50KCk6IENvbW1lbnRzIG11c3Qgc3RhcnQgd2l0
aCAvIik7Ci0gIC8vIEl0IHNlZW1zIHRoYXQgLyoqLyBzdHlsZSBjb21tZW50cyBhcmUgYWNjZXB0
YWJsZSBhcyB3ZWxsLgotICBjb21tZW50XyA9IGR1cGxpY2F0ZVN0cmluZ1ZhbHVlKHRleHQsIGxl
bik7Ci19Ci0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIGNs
YXNzIFZhbHVlOjpDWlN0cmluZwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotCi0vLyBOb3RlczogcG9saWN5XyBpbmRpY2F0ZXMgaWYgdGhlIHN0cmluZyB3YXMgYWxs
b2NhdGVkIHdoZW4KLS8vIGEgc3RyaW5nIGlzIHN0b3JlZC4KLQotVmFsdWU6OkNaU3RyaW5nOjpD
WlN0cmluZyhBcnJheUluZGV4IGFpbmRleCkgOiBjc3RyXygwKSwgaW5kZXhfKGFpbmRleCkge30K
LQotVmFsdWU6OkNaU3RyaW5nOjpDWlN0cmluZyhjaGFyIGNvbnN0KiBzdHIsIHVuc2lnbmVkIHVs
ZW5ndGgsIER1cGxpY2F0aW9uUG9saWN5IGFsbG9jYXRlKQotICAgIDogY3N0cl8oc3RyKSB7Ci0g
IC8vIGFsbG9jYXRlICE9IGR1cGxpY2F0ZQotICBzdG9yYWdlXy5wb2xpY3lfID0gYWxsb2NhdGUg
JiAweDM7Ci0gIHN0b3JhZ2VfLmxlbmd0aF8gPSB1bGVuZ3RoICYgMHgzRkZGRkZGRjsKLX0KLQot
VmFsdWU6OkNaU3RyaW5nOjpDWlN0cmluZyhjb25zdCBDWlN0cmluZyYgb3RoZXIpCi0gICAgOiBj
c3RyXyhvdGhlci5zdG9yYWdlXy5wb2xpY3lfICE9IG5vRHVwbGljYXRpb24gJiYgb3RoZXIuY3N0
cl8gIT0gMAotICAgICAgICAgICAgICAgID8gZHVwbGljYXRlU3RyaW5nVmFsdWUob3RoZXIuY3N0
cl8sIG90aGVyLnN0b3JhZ2VfLmxlbmd0aF8pCi0gICAgICAgICAgICAgICAgOiBvdGhlci5jc3Ry
XykgewotICBzdG9yYWdlXy5wb2xpY3lfID0gKG90aGVyLmNzdHJfCi0gICAgICAgICAgICAgICAg
ID8gKHN0YXRpY19jYXN0PER1cGxpY2F0aW9uUG9saWN5PihvdGhlci5zdG9yYWdlXy5wb2xpY3lf
KSA9PSBub0R1cGxpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICA/IG5vRHVwbGljYXRpb24g
OiBkdXBsaWNhdGUpCi0gICAgICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8RHVwbGljYXRpb25Q
b2xpY3k+KG90aGVyLnN0b3JhZ2VfLnBvbGljeV8pKTsKLSAgc3RvcmFnZV8ubGVuZ3RoXyA9IG90
aGVyLnN0b3JhZ2VfLmxlbmd0aF87Ci19Ci0KLSNpZiBKU09OX0hBU19SVkFMVUVfUkVGRVJFTkNF
UwotVmFsdWU6OkNaU3RyaW5nOjpDWlN0cmluZyhDWlN0cmluZyYmIG90aGVyKQotICA6IGNzdHJf
KG90aGVyLmNzdHJfKSwgaW5kZXhfKG90aGVyLmluZGV4XykgewotICBvdGhlci5jc3RyXyA9IG51
bGxwdHI7Ci19Ci0jZW5kaWYKLQotVmFsdWU6OkNaU3RyaW5nOjp+Q1pTdHJpbmcoKSB7Ci0gIGlm
IChjc3RyXyAmJiBzdG9yYWdlXy5wb2xpY3lfID09IGR1cGxpY2F0ZSkKLSAgICByZWxlYXNlU3Ry
aW5nVmFsdWUoY29uc3RfY2FzdDxjaGFyKj4oY3N0cl8pKTsKLX0KLQotdm9pZCBWYWx1ZTo6Q1pT
dHJpbmc6OnN3YXAoQ1pTdHJpbmcmIG90aGVyKSB7Ci0gIHN0ZDo6c3dhcChjc3RyXywgb3RoZXIu
Y3N0cl8pOwotICBzdGQ6OnN3YXAoaW5kZXhfLCBvdGhlci5pbmRleF8pOwotfQotCi1WYWx1ZTo6
Q1pTdHJpbmcmIFZhbHVlOjpDWlN0cmluZzo6b3BlcmF0b3I9KENaU3RyaW5nIG90aGVyKSB7Ci0g
IHN3YXAob3RoZXIpOwotICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgVmFsdWU6OkNaU3RyaW5n
OjpvcGVyYXRvcjwoY29uc3QgQ1pTdHJpbmcmIG90aGVyKSBjb25zdCB7Ci0gIGlmICghY3N0cl8p
IHJldHVybiBpbmRleF8gPCBvdGhlci5pbmRleF87Ci0gIC8vcmV0dXJuIHN0cmNtcChjc3RyXywg
b3RoZXIuY3N0cl8pIDwgMDsKLSAgLy8gQXNzdW1lIGJvdGggYXJlIHN0cmluZ3MuCi0gIHVuc2ln
bmVkIHRoaXNfbGVuID0gdGhpcy0+c3RvcmFnZV8ubGVuZ3RoXzsKLSAgdW5zaWduZWQgb3RoZXJf
bGVuID0gb3RoZXIuc3RvcmFnZV8ubGVuZ3RoXzsKLSAgdW5zaWduZWQgbWluX2xlbiA9IHN0ZDo6
bWluKHRoaXNfbGVuLCBvdGhlcl9sZW4pOwotICBpbnQgY29tcCA9IG1lbWNtcCh0aGlzLT5jc3Ry
Xywgb3RoZXIuY3N0cl8sIG1pbl9sZW4pOwotICBpZiAoY29tcCA8IDApIHJldHVybiB0cnVlOwot
ICBpZiAoY29tcCA+IDApIHJldHVybiBmYWxzZTsKLSAgcmV0dXJuICh0aGlzX2xlbiA8IG90aGVy
X2xlbik7Ci19Ci0KLWJvb2wgVmFsdWU6OkNaU3RyaW5nOjpvcGVyYXRvcj09KGNvbnN0IENaU3Ry
aW5nJiBvdGhlcikgY29uc3QgewotICBpZiAoIWNzdHJfKSByZXR1cm4gaW5kZXhfID09IG90aGVy
LmluZGV4XzsKLSAgLy9yZXR1cm4gc3RyY21wKGNzdHJfLCBvdGhlci5jc3RyXykgPT0gMDsKLSAg
Ly8gQXNzdW1lIGJvdGggYXJlIHN0cmluZ3MuCi0gIHVuc2lnbmVkIHRoaXNfbGVuID0gdGhpcy0+
c3RvcmFnZV8ubGVuZ3RoXzsKLSAgdW5zaWduZWQgb3RoZXJfbGVuID0gb3RoZXIuc3RvcmFnZV8u
bGVuZ3RoXzsKLSAgaWYgKHRoaXNfbGVuICE9IG90aGVyX2xlbikgcmV0dXJuIGZhbHNlOwotICBp
bnQgY29tcCA9IG1lbWNtcCh0aGlzLT5jc3RyXywgb3RoZXIuY3N0cl8sIHRoaXNfbGVuKTsKLSAg
cmV0dXJuIGNvbXAgPT0gMDsKLX0KLQotQXJyYXlJbmRleCBWYWx1ZTo6Q1pTdHJpbmc6OmluZGV4
KCkgY29uc3QgeyByZXR1cm4gaW5kZXhfOyB9Ci0KLS8vY29uc3QgY2hhciogVmFsdWU6OkNaU3Ry
aW5nOjpjX3N0cigpIGNvbnN0IHsgcmV0dXJuIGNzdHJfOyB9Ci1jb25zdCBjaGFyKiBWYWx1ZTo6
Q1pTdHJpbmc6OmRhdGEoKSBjb25zdCB7IHJldHVybiBjc3RyXzsgfQotdW5zaWduZWQgVmFsdWU6
OkNaU3RyaW5nOjpsZW5ndGgoKSBjb25zdCB7IHJldHVybiBzdG9yYWdlXy5sZW5ndGhfOyB9Ci1i
b29sIFZhbHVlOjpDWlN0cmluZzo6aXNTdGF0aWNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBzdG9y
YWdlXy5wb2xpY3lfID09IG5vRHVwbGljYXRpb247IH0KLQotLy8gLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotLy8gY2xhc3MgVmFsdWU6OlZhbHVlCi0vLyAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8qISBcaW50ZXJuYWwgRGVmYXVsdCBjb25z
dHJ1Y3RvciBpbml0aWFsaXphdGlvbiBtdXN0IGJlIGVxdWl2YWxlbnQgdG86Ci0gKiBtZW1zZXQo
IHRoaXMsIDAsIHNpemVvZihWYWx1ZSkgKQotICogVGhpcyBvcHRpbWl6YXRpb24gaXMgdXNlZCBp
biBWYWx1ZUludGVybmFsTWFwIGZhc3QgYWxsb2NhdG9yLgotICovCi1WYWx1ZTo6VmFsdWUoVmFs
dWVUeXBlIHZ0eXBlKSB7Ci0gIGluaXRCYXNpYyh2dHlwZSk7Ci0gIHN3aXRjaCAodnR5cGUpIHsK
LSAgY2FzZSBudWxsVmFsdWU6Ci0gICAgYnJlYWs7Ci0gIGNhc2UgaW50VmFsdWU6Ci0gIGNhc2Ug
dWludFZhbHVlOgotICAgIHZhbHVlXy5pbnRfID0gMDsKLSAgICBicmVhazsKLSAgY2FzZSByZWFs
VmFsdWU6Ci0gICAgdmFsdWVfLnJlYWxfID0gMC4wOwotICAgIGJyZWFrOwotICBjYXNlIHN0cmlu
Z1ZhbHVlOgotICAgIHZhbHVlXy5zdHJpbmdfID0gMDsKLSAgICBicmVhazsKLSAgY2FzZSBhcnJh
eVZhbHVlOgotICBjYXNlIG9iamVjdFZhbHVlOgotICAgIHZhbHVlXy5tYXBfID0gbmV3IE9iamVj
dFZhbHVlcygpOwotICAgIGJyZWFrOwotICBjYXNlIGJvb2xlYW5WYWx1ZToKLSAgICB2YWx1ZV8u
Ym9vbF8gPSBmYWxzZTsKLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICBKU09OX0FTU0VSVF9V
TlJFQUNIQUJMRTsKLSAgfQotfQotCi1WYWx1ZTo6VmFsdWUoSW50IHZhbHVlKSB7Ci0gIGluaXRC
YXNpYyhpbnRWYWx1ZSk7Ci0gIHZhbHVlXy5pbnRfID0gdmFsdWU7Ci19Ci0KLVZhbHVlOjpWYWx1
ZShVSW50IHZhbHVlKSB7Ci0gIGluaXRCYXNpYyh1aW50VmFsdWUpOwotICB2YWx1ZV8udWludF8g
PSB2YWx1ZTsKLX0KLSNpZiBkZWZpbmVkKEpTT05fSEFTX0lOVDY0KQotVmFsdWU6OlZhbHVlKElu
dDY0IHZhbHVlKSB7Ci0gIGluaXRCYXNpYyhpbnRWYWx1ZSk7Ci0gIHZhbHVlXy5pbnRfID0gdmFs
dWU7Ci19Ci1WYWx1ZTo6VmFsdWUoVUludDY0IHZhbHVlKSB7Ci0gIGluaXRCYXNpYyh1aW50VmFs
dWUpOwotICB2YWx1ZV8udWludF8gPSB2YWx1ZTsKLX0KLSNlbmRpZiAvLyBkZWZpbmVkKEpTT05f
SEFTX0lOVDY0KQotCi1WYWx1ZTo6VmFsdWUoZG91YmxlIHZhbHVlKSB7Ci0gIGluaXRCYXNpYyhy
ZWFsVmFsdWUpOwotICB2YWx1ZV8ucmVhbF8gPSB2YWx1ZTsKLX0KLQotVmFsdWU6OlZhbHVlKGNv
bnN0IGNoYXIqIHZhbHVlKSB7Ci0gIGluaXRCYXNpYyhzdHJpbmdWYWx1ZSwgdHJ1ZSk7Ci0gIHZh
bHVlXy5zdHJpbmdfID0gZHVwbGljYXRlQW5kUHJlZml4U3RyaW5nVmFsdWUodmFsdWUsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdHJsZW4odmFsdWUpKSk7Ci19Ci0KLVZhbHVlOjpWYWx1ZShjb25z
dCBjaGFyKiBiZWdpblZhbHVlLCBjb25zdCBjaGFyKiBlbmRWYWx1ZSkgewotICBpbml0QmFzaWMo
c3RyaW5nVmFsdWUsIHRydWUpOwotICB2YWx1ZV8uc3RyaW5nXyA9Ci0gICAgICBkdXBsaWNhdGVB
bmRQcmVmaXhTdHJpbmdWYWx1ZShiZWdpblZhbHVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5k
VmFsdWUgLSBiZWdpblZhbHVlKSk7Ci19Ci0KLVZhbHVlOjpWYWx1ZShjb25zdCBzdGQ6OnN0cmlu
ZyYgdmFsdWUpIHsKLSAgaW5pdEJhc2ljKHN0cmluZ1ZhbHVlLCB0cnVlKTsKLSAgdmFsdWVfLnN0
cmluZ18gPQotICAgICAgZHVwbGljYXRlQW5kUHJlZml4U3RyaW5nVmFsdWUodmFsdWUuZGF0YSgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUubGVuZ3RoKCkpKTsKLX0KLQotVmFsdWU6OlZh
bHVlKGNvbnN0IFN0YXRpY1N0cmluZyYgdmFsdWUpIHsKLSAgaW5pdEJhc2ljKHN0cmluZ1ZhbHVl
KTsKLSAgdmFsdWVfLnN0cmluZ18gPSBjb25zdF9jYXN0PGNoYXIqPih2YWx1ZS5jX3N0cigpKTsK
LX0KLQotI2lmZGVmIEpTT05fVVNFX0NQUFRMCi1WYWx1ZTo6VmFsdWUoY29uc3QgQ3BwVEw6OkNv
bnN0U3RyaW5nJiB2YWx1ZSkgewotICBpbml0QmFzaWMoc3RyaW5nVmFsdWUsIHRydWUpOwotICB2
YWx1ZV8uc3RyaW5nXyA9IGR1cGxpY2F0ZUFuZFByZWZpeFN0cmluZ1ZhbHVlKHZhbHVlLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUubGVuZ3RoKCkpKTsKLX0KLSNlbmRpZgotCi1WYWx1ZTo6
VmFsdWUoYm9vbCB2YWx1ZSkgewotICBpbml0QmFzaWMoYm9vbGVhblZhbHVlKTsKLSAgdmFsdWVf
LmJvb2xfID0gdmFsdWU7Ci19Ci0KLVZhbHVlOjpWYWx1ZShWYWx1ZSBjb25zdCYgb3RoZXIpCi0g
ICAgOiB0eXBlXyhvdGhlci50eXBlXyksIGFsbG9jYXRlZF8oZmFsc2UpCi0gICAgICAsCi0gICAg
ICBjb21tZW50c18oMCksIHN0YXJ0XyhvdGhlci5zdGFydF8pLCBsaW1pdF8ob3RoZXIubGltaXRf
KQotewotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgbnVsbFZhbHVlOgotICBjYXNlIGludFZh
bHVlOgotICBjYXNlIHVpbnRWYWx1ZToKLSAgY2FzZSByZWFsVmFsdWU6Ci0gIGNhc2UgYm9vbGVh
blZhbHVlOgotICAgIHZhbHVlXyA9IG90aGVyLnZhbHVlXzsKLSAgICBicmVhazsKLSAgY2FzZSBz
dHJpbmdWYWx1ZToKLSAgICBpZiAob3RoZXIudmFsdWVfLnN0cmluZ18gJiYgb3RoZXIuYWxsb2Nh
dGVkXykgewotICAgICAgdW5zaWduZWQgbGVuOwotICAgICAgY2hhciBjb25zdCogc3RyOwotICAg
ICAgZGVjb2RlUHJlZml4ZWRTdHJpbmcob3RoZXIuYWxsb2NhdGVkXywgb3RoZXIudmFsdWVfLnN0
cmluZ18sCi0gICAgICAgICAgJmxlbiwgJnN0cik7Ci0gICAgICB2YWx1ZV8uc3RyaW5nXyA9IGR1
cGxpY2F0ZUFuZFByZWZpeFN0cmluZ1ZhbHVlKHN0ciwgbGVuKTsKLSAgICAgIGFsbG9jYXRlZF8g
PSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICB2YWx1ZV8uc3RyaW5nXyA9IG90aGVyLnZhbHVl
Xy5zdHJpbmdfOwotICAgICAgYWxsb2NhdGVkXyA9IGZhbHNlOwotICAgIH0KLSAgICBicmVhazsK
LSAgY2FzZSBhcnJheVZhbHVlOgotICBjYXNlIG9iamVjdFZhbHVlOgotICAgIHZhbHVlXy5tYXBf
ID0gbmV3IE9iamVjdFZhbHVlcygqb3RoZXIudmFsdWVfLm1hcF8pOwotICAgIGJyZWFrOwotICBk
ZWZhdWx0OgotICAgIEpTT05fQVNTRVJUX1VOUkVBQ0hBQkxFOwotICB9Ci0gIGlmIChvdGhlci5j
b21tZW50c18pIHsKLSAgICBjb21tZW50c18gPSBuZXcgQ29tbWVudEluZm9bbnVtYmVyT2ZDb21t
ZW50UGxhY2VtZW50XTsKLSAgICBmb3IgKGludCBjb21tZW50ID0gMDsgY29tbWVudCA8IG51bWJl
ck9mQ29tbWVudFBsYWNlbWVudDsgKytjb21tZW50KSB7Ci0gICAgICBjb25zdCBDb21tZW50SW5m
byYgb3RoZXJDb21tZW50ID0gb3RoZXIuY29tbWVudHNfW2NvbW1lbnRdOwotICAgICAgaWYgKG90
aGVyQ29tbWVudC5jb21tZW50XykKLSAgICAgICAgY29tbWVudHNfW2NvbW1lbnRdLnNldENvbW1l
bnQoCi0gICAgICAgICAgICBvdGhlckNvbW1lbnQuY29tbWVudF8sIHN0cmxlbihvdGhlckNvbW1l
bnQuY29tbWVudF8pKTsKLSAgICB9Ci0gIH0KLX0KLQotI2lmIEpTT05fSEFTX1JWQUxVRV9SRUZF
UkVOQ0VTCi0vLyBNb3ZlIGNvbnN0cnVjdG9yCi1WYWx1ZTo6VmFsdWUoVmFsdWUmJiBvdGhlcikg
ewotICBpbml0QmFzaWMobnVsbFZhbHVlKTsKLSAgc3dhcChvdGhlcik7Ci19Ci0jZW5kaWYKLQot
VmFsdWU6On5WYWx1ZSgpIHsKLSAgc3dpdGNoICh0eXBlXykgewotICBjYXNlIG51bGxWYWx1ZToK
LSAgY2FzZSBpbnRWYWx1ZToKLSAgY2FzZSB1aW50VmFsdWU6Ci0gIGNhc2UgcmVhbFZhbHVlOgot
ICBjYXNlIGJvb2xlYW5WYWx1ZToKLSAgICBicmVhazsKLSAgY2FzZSBzdHJpbmdWYWx1ZToKLSAg
ICBpZiAoYWxsb2NhdGVkXykKLSAgICAgIHJlbGVhc2VTdHJpbmdWYWx1ZSh2YWx1ZV8uc3RyaW5n
Xyk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgYXJyYXlWYWx1ZToKLSAgY2FzZSBvYmplY3RWYWx1ZToK
LSAgICBkZWxldGUgdmFsdWVfLm1hcF87Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgSlNP
Tl9BU1NFUlRfVU5SRUFDSEFCTEU7Ci0gIH0KLQotICBpZiAoY29tbWVudHNfKQotICAgIGRlbGV0
ZVtdIGNvbW1lbnRzXzsKLX0KLQotVmFsdWUmIFZhbHVlOjpvcGVyYXRvcj0oVmFsdWUgb3RoZXIp
IHsKLSAgc3dhcChvdGhlcik7Ci0gIHJldHVybiAqdGhpczsKLX0KLQotdm9pZCBWYWx1ZTo6c3dh
cFBheWxvYWQoVmFsdWUmIG90aGVyKSB7Ci0gIFZhbHVlVHlwZSB0ZW1wID0gdHlwZV87Ci0gIHR5
cGVfID0gb3RoZXIudHlwZV87Ci0gIG90aGVyLnR5cGVfID0gdGVtcDsKLSAgc3RkOjpzd2FwKHZh
bHVlXywgb3RoZXIudmFsdWVfKTsKLSAgaW50IHRlbXAyID0gYWxsb2NhdGVkXzsKLSAgYWxsb2Nh
dGVkXyA9IG90aGVyLmFsbG9jYXRlZF87Ci0gIG90aGVyLmFsbG9jYXRlZF8gPSB0ZW1wMiAmIDB4
MTsKLX0KLQotdm9pZCBWYWx1ZTo6c3dhcChWYWx1ZSYgb3RoZXIpIHsKLSAgc3dhcFBheWxvYWQo
b3RoZXIpOwotICBzdGQ6OnN3YXAoY29tbWVudHNfLCBvdGhlci5jb21tZW50c18pOwotICBzdGQ6
OnN3YXAoc3RhcnRfLCBvdGhlci5zdGFydF8pOwotICBzdGQ6OnN3YXAobGltaXRfLCBvdGhlci5s
aW1pdF8pOwotfQotCi1WYWx1ZVR5cGUgVmFsdWU6OnR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBl
XzsgfQotCi1pbnQgVmFsdWU6OmNvbXBhcmUoY29uc3QgVmFsdWUmIG90aGVyKSBjb25zdCB7Ci0g
IGlmICgqdGhpcyA8IG90aGVyKQotICAgIHJldHVybiAtMTsKLSAgaWYgKCp0aGlzID4gb3RoZXIp
Ci0gICAgcmV0dXJuIDE7Ci0gIHJldHVybiAwOwotfQotCi1ib29sIFZhbHVlOjpvcGVyYXRvcjwo
Y29uc3QgVmFsdWUmIG90aGVyKSBjb25zdCB7Ci0gIGludCB0eXBlRGVsdGEgPSB0eXBlXyAtIG90
aGVyLnR5cGVfOwotICBpZiAodHlwZURlbHRhKQotICAgIHJldHVybiB0eXBlRGVsdGEgPCAwID8g
dHJ1ZSA6IGZhbHNlOwotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgbnVsbFZhbHVlOgotICAg
IHJldHVybiBmYWxzZTsKLSAgY2FzZSBpbnRWYWx1ZToKLSAgICByZXR1cm4gdmFsdWVfLmludF8g
PCBvdGhlci52YWx1ZV8uaW50XzsKLSAgY2FzZSB1aW50VmFsdWU6Ci0gICAgcmV0dXJuIHZhbHVl
Xy51aW50XyA8IG90aGVyLnZhbHVlXy51aW50XzsKLSAgY2FzZSByZWFsVmFsdWU6Ci0gICAgcmV0
dXJuIHZhbHVlXy5yZWFsXyA8IG90aGVyLnZhbHVlXy5yZWFsXzsKLSAgY2FzZSBib29sZWFuVmFs
dWU6Ci0gICAgcmV0dXJuIHZhbHVlXy5ib29sXyA8IG90aGVyLnZhbHVlXy5ib29sXzsKLSAgY2Fz
ZSBzdHJpbmdWYWx1ZToKLSAgewotICAgIGlmICgodmFsdWVfLnN0cmluZ18gPT0gMCkgfHwgKG90
aGVyLnZhbHVlXy5zdHJpbmdfID09IDApKSB7Ci0gICAgICBpZiAob3RoZXIudmFsdWVfLnN0cmlu
Z18pIHJldHVybiB0cnVlOwotICAgICAgZWxzZSByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHVu
c2lnbmVkIHRoaXNfbGVuOwotICAgIHVuc2lnbmVkIG90aGVyX2xlbjsKLSAgICBjaGFyIGNvbnN0
KiB0aGlzX3N0cjsKLSAgICBjaGFyIGNvbnN0KiBvdGhlcl9zdHI7Ci0gICAgZGVjb2RlUHJlZml4
ZWRTdHJpbmcodGhpcy0+YWxsb2NhdGVkXywgdGhpcy0+dmFsdWVfLnN0cmluZ18sICZ0aGlzX2xl
biwgJnRoaXNfc3RyKTsKLSAgICBkZWNvZGVQcmVmaXhlZFN0cmluZyhvdGhlci5hbGxvY2F0ZWRf
LCBvdGhlci52YWx1ZV8uc3RyaW5nXywgJm90aGVyX2xlbiwgJm90aGVyX3N0cik7Ci0gICAgdW5z
aWduZWQgbWluX2xlbiA9IHN0ZDo6bWluKHRoaXNfbGVuLCBvdGhlcl9sZW4pOwotICAgIGludCBj
b21wID0gbWVtY21wKHRoaXNfc3RyLCBvdGhlcl9zdHIsIG1pbl9sZW4pOwotICAgIGlmIChjb21w
IDwgMCkgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGNvbXAgPiAwKSByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuICh0aGlzX2xlbiA8IG90aGVyX2xlbik7Ci0gIH0KLSAgY2FzZSBhcnJheVZhbHVlOgot
ICBjYXNlIG9iamVjdFZhbHVlOiB7Ci0gICAgaW50IGRlbHRhID0gaW50KHZhbHVlXy5tYXBfLT5z
aXplKCkgLSBvdGhlci52YWx1ZV8ubWFwXy0+c2l6ZSgpKTsKLSAgICBpZiAoZGVsdGEpCi0gICAg
ICByZXR1cm4gZGVsdGEgPCAwOwotICAgIHJldHVybiAoKnZhbHVlXy5tYXBfKSA8ICgqb3RoZXIu
dmFsdWVfLm1hcF8pOwotICB9Ci0gIGRlZmF1bHQ6Ci0gICAgSlNPTl9BU1NFUlRfVU5SRUFDSEFC
TEU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOyAvLyB1bnJlYWNoYWJsZQotfQotCi1ib29sIFZhbHVl
OjpvcGVyYXRvcjw9KGNvbnN0IFZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gIShvdGhlciA8
ICp0aGlzKTsgfQotCi1ib29sIFZhbHVlOjpvcGVyYXRvcj49KGNvbnN0IFZhbHVlJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA8IG90aGVyKTsgfQotCi1ib29sIFZhbHVlOjpvcGVyYXRv
cj4oY29uc3QgVmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBvdGhlciA8ICp0aGlzOyB9Ci0K
LWJvb2wgVmFsdWU6Om9wZXJhdG9yPT0oY29uc3QgVmFsdWUmIG90aGVyKSBjb25zdCB7Ci0gIC8v
IGlmICggdHlwZV8gIT0gb3RoZXIudHlwZV8gKQotICAvLyBHQ0MgMi45NS4zIHNheXM6Ci0gIC8v
IGF0dGVtcHQgdG8gdGFrZSBhZGRyZXNzIG9mIGJpdC1maWVsZCBzdHJ1Y3R1cmUgbWVtYmVyIGBK
c29uOjpWYWx1ZTo6dHlwZV8nCi0gIC8vIEJlYXRzIG1lLCBidXQgYSB0ZW1wIHNvbHZlcyB0aGUg
cHJvYmxlbS4KLSAgaW50IHRlbXAgPSBvdGhlci50eXBlXzsKLSAgaWYgKHR5cGVfICE9IHRlbXAp
Ci0gICAgcmV0dXJuIGZhbHNlOwotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgbnVsbFZhbHVl
OgotICAgIHJldHVybiB0cnVlOwotICBjYXNlIGludFZhbHVlOgotICAgIHJldHVybiB2YWx1ZV8u
aW50XyA9PSBvdGhlci52YWx1ZV8uaW50XzsKLSAgY2FzZSB1aW50VmFsdWU6Ci0gICAgcmV0dXJu
IHZhbHVlXy51aW50XyA9PSBvdGhlci52YWx1ZV8udWludF87Ci0gIGNhc2UgcmVhbFZhbHVlOgot
ICAgIHJldHVybiB2YWx1ZV8ucmVhbF8gPT0gb3RoZXIudmFsdWVfLnJlYWxfOwotICBjYXNlIGJv
b2xlYW5WYWx1ZToKLSAgICByZXR1cm4gdmFsdWVfLmJvb2xfID09IG90aGVyLnZhbHVlXy5ib29s
XzsKLSAgY2FzZSBzdHJpbmdWYWx1ZToKLSAgewotICAgIGlmICgodmFsdWVfLnN0cmluZ18gPT0g
MCkgfHwgKG90aGVyLnZhbHVlXy5zdHJpbmdfID09IDApKSB7Ci0gICAgICByZXR1cm4gKHZhbHVl
Xy5zdHJpbmdfID09IG90aGVyLnZhbHVlXy5zdHJpbmdfKTsKLSAgICB9Ci0gICAgdW5zaWduZWQg
dGhpc19sZW47Ci0gICAgdW5zaWduZWQgb3RoZXJfbGVuOwotICAgIGNoYXIgY29uc3QqIHRoaXNf
c3RyOwotICAgIGNoYXIgY29uc3QqIG90aGVyX3N0cjsKLSAgICBkZWNvZGVQcmVmaXhlZFN0cmlu
Zyh0aGlzLT5hbGxvY2F0ZWRfLCB0aGlzLT52YWx1ZV8uc3RyaW5nXywgJnRoaXNfbGVuLCAmdGhp
c19zdHIpOwotICAgIGRlY29kZVByZWZpeGVkU3RyaW5nKG90aGVyLmFsbG9jYXRlZF8sIG90aGVy
LnZhbHVlXy5zdHJpbmdfLCAmb3RoZXJfbGVuLCAmb3RoZXJfc3RyKTsKLSAgICBpZiAodGhpc19s
ZW4gIT0gb3RoZXJfbGVuKSByZXR1cm4gZmFsc2U7Ci0gICAgaW50IGNvbXAgPSBtZW1jbXAodGhp
c19zdHIsIG90aGVyX3N0ciwgdGhpc19sZW4pOwotICAgIHJldHVybiBjb21wID09IDA7Ci0gIH0K
LSAgY2FzZSBhcnJheVZhbHVlOgotICBjYXNlIG9iamVjdFZhbHVlOgotICAgIHJldHVybiB2YWx1
ZV8ubWFwXy0+c2l6ZSgpID09IG90aGVyLnZhbHVlXy5tYXBfLT5zaXplKCkgJiYKLSAgICAgICAg
ICAgKCp2YWx1ZV8ubWFwXykgPT0gKCpvdGhlci52YWx1ZV8ubWFwXyk7Ci0gIGRlZmF1bHQ6Ci0g
ICAgSlNPTl9BU1NFUlRfVU5SRUFDSEFCTEU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOyAvLyB1bnJl
YWNoYWJsZQotfQotCi1ib29sIFZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IFZhbHVlJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLQotY29uc3QgY2hhciogVmFsdWU6
OmFzQ1N0cmluZygpIGNvbnN0IHsKLSAgSlNPTl9BU1NFUlRfTUVTU0FHRSh0eXBlXyA9PSBzdHJp
bmdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAiaW4gSnNvbjo6VmFsdWU6OmFzQ1N0cmlu
ZygpOiByZXF1aXJlcyBzdHJpbmdWYWx1ZSIpOwotICBpZiAodmFsdWVfLnN0cmluZ18gPT0gMCkg
cmV0dXJuIDA7Ci0gIHVuc2lnbmVkIHRoaXNfbGVuOwotICBjaGFyIGNvbnN0KiB0aGlzX3N0cjsK
LSAgZGVjb2RlUHJlZml4ZWRTdHJpbmcodGhpcy0+YWxsb2NhdGVkXywgdGhpcy0+dmFsdWVfLnN0
cmluZ18sICZ0aGlzX2xlbiwgJnRoaXNfc3RyKTsKLSAgcmV0dXJuIHRoaXNfc3RyOwotfQotCi1i
b29sIFZhbHVlOjpnZXRTdHJpbmcoY2hhciBjb25zdCoqIHN0ciwgY2hhciBjb25zdCoqIGNlbmQp
IGNvbnN0IHsKLSAgaWYgKHR5cGVfICE9IHN0cmluZ1ZhbHVlKSByZXR1cm4gZmFsc2U7Ci0gIGlm
ICh2YWx1ZV8uc3RyaW5nXyA9PSAwKSByZXR1cm4gZmFsc2U7Ci0gIHVuc2lnbmVkIGxlbmd0aDsK
LSAgZGVjb2RlUHJlZml4ZWRTdHJpbmcodGhpcy0+YWxsb2NhdGVkXywgdGhpcy0+dmFsdWVfLnN0
cmluZ18sICZsZW5ndGgsIHN0cik7Ci0gICpjZW5kID0gKnN0ciArIGxlbmd0aDsKLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0ZDo6c3RyaW5nIFZhbHVlOjphc1N0cmluZygpIGNvbnN0IHsKLSAgc3dp
dGNoICh0eXBlXykgewotICBjYXNlIG51bGxWYWx1ZToKLSAgICByZXR1cm4gIiI7Ci0gIGNhc2Ug
c3RyaW5nVmFsdWU6Ci0gIHsKLSAgICBpZiAodmFsdWVfLnN0cmluZ18gPT0gMCkgcmV0dXJuICIi
OwotICAgIHVuc2lnbmVkIHRoaXNfbGVuOwotICAgIGNoYXIgY29uc3QqIHRoaXNfc3RyOwotICAg
IGRlY29kZVByZWZpeGVkU3RyaW5nKHRoaXMtPmFsbG9jYXRlZF8sIHRoaXMtPnZhbHVlXy5zdHJp
bmdfLCAmdGhpc19sZW4sICZ0aGlzX3N0cik7Ci0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKHRoaXNf
c3RyLCB0aGlzX2xlbik7Ci0gIH0KLSAgY2FzZSBib29sZWFuVmFsdWU6Ci0gICAgcmV0dXJuIHZh
bHVlXy5ib29sXyA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci0gIGNhc2UgaW50VmFsdWU6Ci0gICAgcmV0
dXJuIHZhbHVlVG9TdHJpbmcodmFsdWVfLmludF8pOwotICBjYXNlIHVpbnRWYWx1ZToKLSAgICBy
ZXR1cm4gdmFsdWVUb1N0cmluZyh2YWx1ZV8udWludF8pOwotICBjYXNlIHJlYWxWYWx1ZToKLSAg
ICByZXR1cm4gdmFsdWVUb1N0cmluZyh2YWx1ZV8ucmVhbF8pOwotICBkZWZhdWx0OgotICAgIEpT
T05fRkFJTF9NRVNTQUdFKCJUeXBlIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBzdHJpbmciKTsKLSAg
fQotfQotCi0jaWZkZWYgSlNPTl9VU0VfQ1BQVEwKLUNwcFRMOjpDb25zdFN0cmluZyBWYWx1ZTo6
YXNDb25zdFN0cmluZygpIGNvbnN0IHsKLSAgdW5zaWduZWQgbGVuOwotICBjaGFyIGNvbnN0KiBz
dHI7Ci0gIGRlY29kZVByZWZpeGVkU3RyaW5nKGFsbG9jYXRlZF8sIHZhbHVlXy5zdHJpbmdfLAot
ICAgICAgJmxlbiwgJnN0cik7Ci0gIHJldHVybiBDcHBUTDo6Q29uc3RTdHJpbmcoc3RyLCBsZW4p
OwotfQotI2VuZGlmCi0KLVZhbHVlOjpJbnQgVmFsdWU6OmFzSW50KCkgY29uc3QgewotICBzd2l0
Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgaW50VmFsdWU6Ci0gICAgSlNPTl9BU1NFUlRfTUVTU0FHRShp
c0ludCgpLCAiTGFyZ2VzdEludCBvdXQgb2YgSW50IHJhbmdlIik7Ci0gICAgcmV0dXJuIEludCh2
YWx1ZV8uaW50Xyk7Ci0gIGNhc2UgdWludFZhbHVlOgotICAgIEpTT05fQVNTRVJUX01FU1NBR0Uo
aXNJbnQoKSwgIkxhcmdlc3RVSW50IG91dCBvZiBJbnQgcmFuZ2UiKTsKLSAgICByZXR1cm4gSW50
KHZhbHVlXy51aW50Xyk7Ci0gIGNhc2UgcmVhbFZhbHVlOgotICAgIEpTT05fQVNTRVJUX01FU1NB
R0UoSW5SYW5nZSh2YWx1ZV8ucmVhbF8sIG1pbkludCwgbWF4SW50KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICJkb3VibGUgb3V0IG9mIEludCByYW5nZSIpOwotICAgIHJldHVybiBJbnQodmFs
dWVfLnJlYWxfKTsKLSAgY2FzZSBudWxsVmFsdWU6Ci0gICAgcmV0dXJuIDA7Ci0gIGNhc2UgYm9v
bGVhblZhbHVlOgotICAgIHJldHVybiB2YWx1ZV8uYm9vbF8gPyAxIDogMDsKLSAgZGVmYXVsdDoK
LSAgICBicmVhazsKLSAgfQotICBKU09OX0ZBSUxfTUVTU0FHRSgiVmFsdWUgaXMgbm90IGNvbnZl
cnRpYmxlIHRvIEludC4iKTsKLX0KLQotVmFsdWU6OlVJbnQgVmFsdWU6OmFzVUludCgpIGNvbnN0
IHsKLSAgc3dpdGNoICh0eXBlXykgewotICBjYXNlIGludFZhbHVlOgotICAgIEpTT05fQVNTRVJU
X01FU1NBR0UoaXNVSW50KCksICJMYXJnZXN0SW50IG91dCBvZiBVSW50IHJhbmdlIik7Ci0gICAg
cmV0dXJuIFVJbnQodmFsdWVfLmludF8pOwotICBjYXNlIHVpbnRWYWx1ZToKLSAgICBKU09OX0FT
U0VSVF9NRVNTQUdFKGlzVUludCgpLCAiTGFyZ2VzdFVJbnQgb3V0IG9mIFVJbnQgcmFuZ2UiKTsK
LSAgICByZXR1cm4gVUludCh2YWx1ZV8udWludF8pOwotICBjYXNlIHJlYWxWYWx1ZToKLSAgICBK
U09OX0FTU0VSVF9NRVNTQUdFKEluUmFuZ2UodmFsdWVfLnJlYWxfLCAwLCBtYXhVSW50KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICJkb3VibGUgb3V0IG9mIFVJbnQgcmFuZ2UiKTsKLSAgICBy
ZXR1cm4gVUludCh2YWx1ZV8ucmVhbF8pOwotICBjYXNlIG51bGxWYWx1ZToKLSAgICByZXR1cm4g
MDsKLSAgY2FzZSBib29sZWFuVmFsdWU6Ci0gICAgcmV0dXJuIHZhbHVlXy5ib29sXyA/IDEgOiAw
OwotICBkZWZhdWx0OgotICAgIGJyZWFrOwotICB9Ci0gIEpTT05fRkFJTF9NRVNTQUdFKCJWYWx1
ZSBpcyBub3QgY29udmVydGlibGUgdG8gVUludC4iKTsKLX0KLQotI2lmIGRlZmluZWQoSlNPTl9I
QVNfSU5UNjQpCi0KLVZhbHVlOjpJbnQ2NCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0IHsKLSAgc3dp
dGNoICh0eXBlXykgewotICBjYXNlIGludFZhbHVlOgotICAgIHJldHVybiBJbnQ2NCh2YWx1ZV8u
aW50Xyk7Ci0gIGNhc2UgdWludFZhbHVlOgotICAgIEpTT05fQVNTRVJUX01FU1NBR0UoaXNJbnQ2
NCgpLCAiTGFyZ2VzdFVJbnQgb3V0IG9mIEludDY0IHJhbmdlIik7Ci0gICAgcmV0dXJuIEludDY0
KHZhbHVlXy51aW50Xyk7Ci0gIGNhc2UgcmVhbFZhbHVlOgotICAgIEpTT05fQVNTRVJUX01FU1NB
R0UoSW5SYW5nZSh2YWx1ZV8ucmVhbF8sIG1pbkludDY0LCBtYXhJbnQ2NCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAiZG91YmxlIG91dCBvZiBJbnQ2NCByYW5nZSIpOwotICAgIHJldHVybiBJ
bnQ2NCh2YWx1ZV8ucmVhbF8pOwotICBjYXNlIG51bGxWYWx1ZToKLSAgICByZXR1cm4gMDsKLSAg
Y2FzZSBib29sZWFuVmFsdWU6Ci0gICAgcmV0dXJuIHZhbHVlXy5ib29sXyA/IDEgOiAwOwotICBk
ZWZhdWx0OgotICAgIGJyZWFrOwotICB9Ci0gIEpTT05fRkFJTF9NRVNTQUdFKCJWYWx1ZSBpcyBu
b3QgY29udmVydGlibGUgdG8gSW50NjQuIik7Ci19Ci0KLVZhbHVlOjpVSW50NjQgVmFsdWU6OmFz
VUludDY0KCkgY29uc3QgewotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgaW50VmFsdWU6Ci0g
ICAgSlNPTl9BU1NFUlRfTUVTU0FHRShpc1VJbnQ2NCgpLCAiTGFyZ2VzdEludCBvdXQgb2YgVUlu
dDY0IHJhbmdlIik7Ci0gICAgcmV0dXJuIFVJbnQ2NCh2YWx1ZV8uaW50Xyk7Ci0gIGNhc2UgdWlu
dFZhbHVlOgotICAgIHJldHVybiBVSW50NjQodmFsdWVfLnVpbnRfKTsKLSAgY2FzZSByZWFsVmFs
dWU6Ci0gICAgSlNPTl9BU1NFUlRfTUVTU0FHRShJblJhbmdlKHZhbHVlXy5yZWFsXywgMCwgbWF4
VUludDY0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJkb3VibGUgb3V0IG9mIFVJbnQ2NCBy
YW5nZSIpOwotICAgIHJldHVybiBVSW50NjQodmFsdWVfLnJlYWxfKTsKLSAgY2FzZSBudWxsVmFs
dWU6Ci0gICAgcmV0dXJuIDA7Ci0gIGNhc2UgYm9vbGVhblZhbHVlOgotICAgIHJldHVybiB2YWx1
ZV8uYm9vbF8gPyAxIDogMDsKLSAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgfQotICBKU09OX0ZB
SUxfTUVTU0FHRSgiVmFsdWUgaXMgbm90IGNvbnZlcnRpYmxlIHRvIFVJbnQ2NC4iKTsKLX0KLSNl
bmRpZiAvLyBpZiBkZWZpbmVkKEpTT05fSEFTX0lOVDY0KQotCi1MYXJnZXN0SW50IFZhbHVlOjph
c0xhcmdlc3RJbnQoKSBjb25zdCB7Ci0jaWYgZGVmaW5lZChKU09OX05PX0lOVDY0KQotICByZXR1
cm4gYXNJbnQoKTsKLSNlbHNlCi0gIHJldHVybiBhc0ludDY0KCk7Ci0jZW5kaWYKLX0KLQotTGFy
Z2VzdFVJbnQgVmFsdWU6OmFzTGFyZ2VzdFVJbnQoKSBjb25zdCB7Ci0jaWYgZGVmaW5lZChKU09O
X05PX0lOVDY0KQotICByZXR1cm4gYXNVSW50KCk7Ci0jZWxzZQotICByZXR1cm4gYXNVSW50NjQo
KTsKLSNlbmRpZgotfQotCi1kb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QgewotICBzd2l0
Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgaW50VmFsdWU6Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGRv
dWJsZT4odmFsdWVfLmludF8pOwotICBjYXNlIHVpbnRWYWx1ZToKLSNpZiAhZGVmaW5lZChKU09O
X1VTRV9JTlQ2NF9ET1VCTEVfQ09OVkVSU0lPTikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91
YmxlPih2YWx1ZV8udWludF8pOwotI2Vsc2UgIC8vIGlmICFkZWZpbmVkKEpTT05fVVNFX0lOVDY0
X0RPVUJMRV9DT05WRVJTSU9OKQotICAgIHJldHVybiBpbnRlZ2VyVG9Eb3VibGUodmFsdWVfLnVp
bnRfKTsKLSNlbmRpZiAvLyBpZiAhZGVmaW5lZChKU09OX1VTRV9JTlQ2NF9ET1VCTEVfQ09OVkVS
U0lPTikKLSAgY2FzZSByZWFsVmFsdWU6Ci0gICAgcmV0dXJuIHZhbHVlXy5yZWFsXzsKLSAgY2Fz
ZSBudWxsVmFsdWU6Ci0gICAgcmV0dXJuIDAuMDsKLSAgY2FzZSBib29sZWFuVmFsdWU6Ci0gICAg
cmV0dXJuIHZhbHVlXy5ib29sXyA/IDEuMCA6IDAuMDsKLSAgZGVmYXVsdDoKLSAgICBicmVhazsK
LSAgfQotICBKU09OX0ZBSUxfTUVTU0FHRSgiVmFsdWUgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGRv
dWJsZS4iKTsKLX0KLQotZmxvYXQgVmFsdWU6OmFzRmxvYXQoKSBjb25zdCB7Ci0gIHN3aXRjaCAo
dHlwZV8pIHsKLSAgY2FzZSBpbnRWYWx1ZToKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHZhbHVlXy5pbnRfKTsKLSAgY2FzZSB1aW50VmFsdWU6Ci0jaWYgIWRlZmluZWQoSlNPTl9VU0Vf
SU5UNjRfRE9VQkxFX0NPTlZFUlNJT04pCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2
YWx1ZV8udWludF8pOwotI2Vsc2UgIC8vIGlmICFkZWZpbmVkKEpTT05fVVNFX0lOVDY0X0RPVUJM
RV9DT05WRVJTSU9OKQotICAgIHJldHVybiBpbnRlZ2VyVG9Eb3VibGUodmFsdWVfLnVpbnRfKTsK
LSNlbmRpZiAvLyBpZiAhZGVmaW5lZChKU09OX1VTRV9JTlQ2NF9ET1VCTEVfQ09OVkVSU0lPTikK
LSAgY2FzZSByZWFsVmFsdWU6Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZV8u
cmVhbF8pOwotICBjYXNlIG51bGxWYWx1ZToKLSAgICByZXR1cm4gMC4wOwotICBjYXNlIGJvb2xl
YW5WYWx1ZToKLSAgICByZXR1cm4gdmFsdWVfLmJvb2xfID8gMS4wZiA6IDAuMGY7Ci0gIGRlZmF1
bHQ6Ci0gICAgYnJlYWs7Ci0gIH0KLSAgSlNPTl9GQUlMX01FU1NBR0UoIlZhbHVlIGlzIG5vdCBj
b252ZXJ0aWJsZSB0byBmbG9hdC4iKTsKLX0KLQotYm9vbCBWYWx1ZTo6YXNCb29sKCkgY29uc3Qg
ewotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgYm9vbGVhblZhbHVlOgotICAgIHJldHVybiB2
YWx1ZV8uYm9vbF87Ci0gIGNhc2UgbnVsbFZhbHVlOgotICAgIHJldHVybiBmYWxzZTsKLSAgY2Fz
ZSBpbnRWYWx1ZToKLSAgICByZXR1cm4gdmFsdWVfLmludF8gPyB0cnVlIDogZmFsc2U7Ci0gIGNh
c2UgdWludFZhbHVlOgotICAgIHJldHVybiB2YWx1ZV8udWludF8gPyB0cnVlIDogZmFsc2U7Ci0g
IGNhc2UgcmVhbFZhbHVlOgotICAgIC8vIFRoaXMgaXMga2luZCBvZiBzdHJhbmdlLiBOb3QgcmVj
b21tZW5kZWQuCi0gICAgcmV0dXJuICh2YWx1ZV8ucmVhbF8gIT0gMC4wKSA/IHRydWUgOiBmYWxz
ZTsKLSAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgfQotICBKU09OX0ZBSUxfTUVTU0FHRSgiVmFs
dWUgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGJvb2wuIik7Ci19Ci0KLWJvb2wgVmFsdWU6OmlzQ29u
dmVydGlibGVUbyhWYWx1ZVR5cGUgb3RoZXIpIGNvbnN0IHsKLSAgc3dpdGNoIChvdGhlcikgewot
ICBjYXNlIG51bGxWYWx1ZToKLSAgICByZXR1cm4gKGlzTnVtZXJpYygpICYmIGFzRG91YmxlKCkg
PT0gMC4wKSB8fAotICAgICAgICAgICAodHlwZV8gPT0gYm9vbGVhblZhbHVlICYmIHZhbHVlXy5i
b29sXyA9PSBmYWxzZSkgfHwKLSAgICAgICAgICAgKHR5cGVfID09IHN0cmluZ1ZhbHVlICYmIGFz
U3RyaW5nKCkgPT0gIiIpIHx8Ci0gICAgICAgICAgICh0eXBlXyA9PSBhcnJheVZhbHVlICYmIHZh
bHVlXy5tYXBfLT5zaXplKCkgPT0gMCkgfHwKLSAgICAgICAgICAgKHR5cGVfID09IG9iamVjdFZh
bHVlICYmIHZhbHVlXy5tYXBfLT5zaXplKCkgPT0gMCkgfHwKLSAgICAgICAgICAgdHlwZV8gPT0g
bnVsbFZhbHVlOwotICBjYXNlIGludFZhbHVlOgotICAgIHJldHVybiBpc0ludCgpIHx8Ci0gICAg
ICAgICAgICh0eXBlXyA9PSByZWFsVmFsdWUgJiYgSW5SYW5nZSh2YWx1ZV8ucmVhbF8sIG1pbklu
dCwgbWF4SW50KSkgfHwKLSAgICAgICAgICAgdHlwZV8gPT0gYm9vbGVhblZhbHVlIHx8IHR5cGVf
ID09IG51bGxWYWx1ZTsKLSAgY2FzZSB1aW50VmFsdWU6Ci0gICAgcmV0dXJuIGlzVUludCgpIHx8
Ci0gICAgICAgICAgICh0eXBlXyA9PSByZWFsVmFsdWUgJiYgSW5SYW5nZSh2YWx1ZV8ucmVhbF8s
IDAsIG1heFVJbnQpKSB8fAotICAgICAgICAgICB0eXBlXyA9PSBib29sZWFuVmFsdWUgfHwgdHlw
ZV8gPT0gbnVsbFZhbHVlOwotICBjYXNlIHJlYWxWYWx1ZToKLSAgICByZXR1cm4gaXNOdW1lcmlj
KCkgfHwgdHlwZV8gPT0gYm9vbGVhblZhbHVlIHx8IHR5cGVfID09IG51bGxWYWx1ZTsKLSAgY2Fz
ZSBib29sZWFuVmFsdWU6Ci0gICAgcmV0dXJuIGlzTnVtZXJpYygpIHx8IHR5cGVfID09IGJvb2xl
YW5WYWx1ZSB8fCB0eXBlXyA9PSBudWxsVmFsdWU7Ci0gIGNhc2Ugc3RyaW5nVmFsdWU6Ci0gICAg
cmV0dXJuIGlzTnVtZXJpYygpIHx8IHR5cGVfID09IGJvb2xlYW5WYWx1ZSB8fCB0eXBlXyA9PSBz
dHJpbmdWYWx1ZSB8fAotICAgICAgICAgICB0eXBlXyA9PSBudWxsVmFsdWU7Ci0gIGNhc2UgYXJy
YXlWYWx1ZToKLSAgICByZXR1cm4gdHlwZV8gPT0gYXJyYXlWYWx1ZSB8fCB0eXBlXyA9PSBudWxs
VmFsdWU7Ci0gIGNhc2Ugb2JqZWN0VmFsdWU6Ci0gICAgcmV0dXJuIHR5cGVfID09IG9iamVjdFZh
bHVlIHx8IHR5cGVfID09IG51bGxWYWx1ZTsKLSAgfQotICBKU09OX0FTU0VSVF9VTlJFQUNIQUJM
RTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi0vLy8gTnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBv
ciBvYmplY3QKLUFycmF5SW5kZXggVmFsdWU6OnNpemUoKSBjb25zdCB7Ci0gIHN3aXRjaCAodHlw
ZV8pIHsKLSAgY2FzZSBudWxsVmFsdWU6Ci0gIGNhc2UgaW50VmFsdWU6Ci0gIGNhc2UgdWludFZh
bHVlOgotICBjYXNlIHJlYWxWYWx1ZToKLSAgY2FzZSBib29sZWFuVmFsdWU6Ci0gIGNhc2Ugc3Ry
aW5nVmFsdWU6Ci0gICAgcmV0dXJuIDA7Ci0gIGNhc2UgYXJyYXlWYWx1ZTogLy8gc2l6ZSBvZiB0
aGUgYXJyYXkgaXMgaGlnaGVzdCBpbmRleCArIDEKLSAgICBpZiAoIXZhbHVlXy5tYXBfLT5lbXB0
eSgpKSB7Ci0gICAgICBPYmplY3RWYWx1ZXM6OmNvbnN0X2l0ZXJhdG9yIGl0TGFzdCA9IHZhbHVl
Xy5tYXBfLT5lbmQoKTsKLSAgICAgIC0taXRMYXN0OwotICAgICAgcmV0dXJuICgqaXRMYXN0KS5m
aXJzdC5pbmRleCgpICsgMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci0gIGNhc2Ugb2JqZWN0VmFs
dWU6Ci0gICAgcmV0dXJuIEFycmF5SW5kZXgodmFsdWVfLm1hcF8tPnNpemUoKSk7Ci0gIH0KLSAg
SlNPTl9BU1NFUlRfVU5SRUFDSEFCTEU7Ci0gIHJldHVybiAwOyAvLyB1bnJlYWNoYWJsZTsKLX0K
LQotYm9vbCBWYWx1ZTo6ZW1wdHkoKSBjb25zdCB7Ci0gIGlmIChpc051bGwoKSB8fCBpc0FycmF5
KCkgfHwgaXNPYmplY3QoKSkKLSAgICByZXR1cm4gc2l6ZSgpID09IDB1OwotICBlbHNlCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFZhbHVlOjpvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biBpc051bGwoKTsgfQotCi12b2lkIFZhbHVlOjpjbGVhcigpIHsKLSAgSlNPTl9BU1NFUlRfTUVT
U0FHRSh0eXBlXyA9PSBudWxsVmFsdWUgfHwgdHlwZV8gPT0gYXJyYXlWYWx1ZSB8fAotICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlXyA9PSBvYmplY3RWYWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAiaW4gSnNvbjo6VmFsdWU6OmNsZWFyKCk6IHJlcXVpcmVzIGNvbXBsZXggdmFsdWUi
KTsKLSAgc3RhcnRfID0gMDsKLSAgbGltaXRfID0gMDsKLSAgc3dpdGNoICh0eXBlXykgewotICBj
YXNlIGFycmF5VmFsdWU6Ci0gIGNhc2Ugb2JqZWN0VmFsdWU6Ci0gICAgdmFsdWVfLm1hcF8tPmNs
ZWFyKCk7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gIH0KLX0KLQotdm9p
ZCBWYWx1ZTo6cmVzaXplKEFycmF5SW5kZXggbmV3U2l6ZSkgewotICBKU09OX0FTU0VSVF9NRVNT
QUdFKHR5cGVfID09IG51bGxWYWx1ZSB8fCB0eXBlXyA9PSBhcnJheVZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICJpbiBKc29uOjpWYWx1ZTo6cmVzaXplKCk6IHJlcXVpcmVzIGFycmF5VmFs
dWUiKTsKLSAgaWYgKHR5cGVfID09IG51bGxWYWx1ZSkKLSAgICAqdGhpcyA9IFZhbHVlKGFycmF5
VmFsdWUpOwotICBBcnJheUluZGV4IG9sZFNpemUgPSBzaXplKCk7Ci0gIGlmIChuZXdTaXplID09
IDApCi0gICAgY2xlYXIoKTsKLSAgZWxzZSBpZiAobmV3U2l6ZSA+IG9sZFNpemUpCi0gICAgKCp0
aGlzKVtuZXdTaXplIC0gMV07Ci0gIGVsc2UgewotICAgIGZvciAoQXJyYXlJbmRleCBpbmRleCA9
IG5ld1NpemU7IGluZGV4IDwgb2xkU2l6ZTsgKytpbmRleCkgewotICAgICAgdmFsdWVfLm1hcF8t
PmVyYXNlKGluZGV4KTsKLSAgICB9Ci0gICAgYXNzZXJ0KHNpemUoKSA9PSBuZXdTaXplKTsKLSAg
fQotfQotCi1WYWx1ZSYgVmFsdWU6Om9wZXJhdG9yW10oQXJyYXlJbmRleCBpbmRleCkgewotICBK
U09OX0FTU0VSVF9NRVNTQUdFKAotICAgICAgdHlwZV8gPT0gbnVsbFZhbHVlIHx8IHR5cGVfID09
IGFycmF5VmFsdWUsCi0gICAgICAiaW4gSnNvbjo6VmFsdWU6Om9wZXJhdG9yW10oQXJyYXlJbmRl
eCk6IHJlcXVpcmVzIGFycmF5VmFsdWUiKTsKLSAgaWYgKHR5cGVfID09IG51bGxWYWx1ZSkKLSAg
ICAqdGhpcyA9IFZhbHVlKGFycmF5VmFsdWUpOwotICBDWlN0cmluZyBrZXkoaW5kZXgpOwotICBP
YmplY3RWYWx1ZXM6Oml0ZXJhdG9yIGl0ID0gdmFsdWVfLm1hcF8tPmxvd2VyX2JvdW5kKGtleSk7
Ci0gIGlmIChpdCAhPSB2YWx1ZV8ubWFwXy0+ZW5kKCkgJiYgKCppdCkuZmlyc3QgPT0ga2V5KQot
ICAgIHJldHVybiAoKml0KS5zZWNvbmQ7Ci0KLSAgT2JqZWN0VmFsdWVzOjp2YWx1ZV90eXBlIGRl
ZmF1bHRWYWx1ZShrZXksIG51bGxSZWYpOwotICBpdCA9IHZhbHVlXy5tYXBfLT5pbnNlcnQoaXQs
IGRlZmF1bHRWYWx1ZSk7Ci0gIHJldHVybiAoKml0KS5zZWNvbmQ7Ci19Ci0KLVZhbHVlJiBWYWx1
ZTo6b3BlcmF0b3JbXShpbnQgaW5kZXgpIHsKLSAgSlNPTl9BU1NFUlRfTUVTU0FHRSgKLSAgICAg
IGluZGV4ID49IDAsCi0gICAgICAiaW4gSnNvbjo6VmFsdWU6Om9wZXJhdG9yW10oaW50IGluZGV4
KTogaW5kZXggY2Fubm90IGJlIG5lZ2F0aXZlIik7Ci0gIHJldHVybiAoKnRoaXMpW0FycmF5SW5k
ZXgoaW5kZXgpXTsKLX0KLQotY29uc3QgVmFsdWUmIFZhbHVlOjpvcGVyYXRvcltdKEFycmF5SW5k
ZXggaW5kZXgpIGNvbnN0IHsKLSAgSlNPTl9BU1NFUlRfTUVTU0FHRSgKLSAgICAgIHR5cGVfID09
IG51bGxWYWx1ZSB8fCB0eXBlXyA9PSBhcnJheVZhbHVlLAotICAgICAgImluIEpzb246OlZhbHVl
OjpvcGVyYXRvcltdKEFycmF5SW5kZXgpY29uc3Q6IHJlcXVpcmVzIGFycmF5VmFsdWUiKTsKLSAg
aWYgKHR5cGVfID09IG51bGxWYWx1ZSkKLSAgICByZXR1cm4gbnVsbFJlZjsKLSAgQ1pTdHJpbmcg
a2V5KGluZGV4KTsKLSAgT2JqZWN0VmFsdWVzOjpjb25zdF9pdGVyYXRvciBpdCA9IHZhbHVlXy5t
YXBfLT5maW5kKGtleSk7Ci0gIGlmIChpdCA9PSB2YWx1ZV8ubWFwXy0+ZW5kKCkpCi0gICAgcmV0
dXJuIG51bGxSZWY7Ci0gIHJldHVybiAoKml0KS5zZWNvbmQ7Ci19Ci0KLWNvbnN0IFZhbHVlJiBW
YWx1ZTo6b3BlcmF0b3JbXShpbnQgaW5kZXgpIGNvbnN0IHsKLSAgSlNPTl9BU1NFUlRfTUVTU0FH
RSgKLSAgICAgIGluZGV4ID49IDAsCi0gICAgICAiaW4gSnNvbjo6VmFsdWU6Om9wZXJhdG9yW10o
aW50IGluZGV4KSBjb25zdDogaW5kZXggY2Fubm90IGJlIG5lZ2F0aXZlIik7Ci0gIHJldHVybiAo
KnRoaXMpW0FycmF5SW5kZXgoaW5kZXgpXTsKLX0KLQotdm9pZCBWYWx1ZTo6aW5pdEJhc2ljKFZh
bHVlVHlwZSB2dHlwZSwgYm9vbCBhbGxvY2F0ZWQpIHsKLSAgdHlwZV8gPSB2dHlwZTsKLSAgYWxs
b2NhdGVkXyA9IGFsbG9jYXRlZDsKLSAgY29tbWVudHNfID0gMDsKLSAgc3RhcnRfID0gMDsKLSAg
bGltaXRfID0gMDsKLX0KLQotLy8gQWNjZXNzIGFuIG9iamVjdCB2YWx1ZSBieSBuYW1lLCBjcmVh
dGUgYSBudWxsIG1lbWJlciBpZiBpdCBkb2VzIG5vdCBleGlzdC4KLS8vIEBwcmUgVHlwZSBvZiAn
KnRoaXMnIGlzIG9iamVjdCBvciBudWxsLgotLy8gQHBhcmFtIGtleSBpcyBudWxsLXRlcm1pbmF0
ZWQuCi1WYWx1ZSYgVmFsdWU6OnJlc29sdmVSZWZlcmVuY2UoY29uc3QgY2hhcioga2V5KSB7Ci0g
IEpTT05fQVNTRVJUX01FU1NBR0UoCi0gICAgICB0eXBlXyA9PSBudWxsVmFsdWUgfHwgdHlwZV8g
PT0gb2JqZWN0VmFsdWUsCi0gICAgICAiaW4gSnNvbjo6VmFsdWU6OnJlc29sdmVSZWZlcmVuY2Uo
KTogcmVxdWlyZXMgb2JqZWN0VmFsdWUiKTsKLSAgaWYgKHR5cGVfID09IG51bGxWYWx1ZSkKLSAg
ICAqdGhpcyA9IFZhbHVlKG9iamVjdFZhbHVlKTsKLSAgQ1pTdHJpbmcgYWN0dWFsS2V5KAotICAg
ICAga2V5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RybGVuKGtleSkpLCBDWlN0cmluZzo6bm9E
dXBsaWNhdGlvbik7IC8vIE5PVEUhCi0gIE9iamVjdFZhbHVlczo6aXRlcmF0b3IgaXQgPSB2YWx1
ZV8ubWFwXy0+bG93ZXJfYm91bmQoYWN0dWFsS2V5KTsKLSAgaWYgKGl0ICE9IHZhbHVlXy5tYXBf
LT5lbmQoKSAmJiAoKml0KS5maXJzdCA9PSBhY3R1YWxLZXkpCi0gICAgcmV0dXJuICgqaXQpLnNl
Y29uZDsKLQotICBPYmplY3RWYWx1ZXM6OnZhbHVlX3R5cGUgZGVmYXVsdFZhbHVlKGFjdHVhbEtl
eSwgbnVsbFJlZik7Ci0gIGl0ID0gdmFsdWVfLm1hcF8tPmluc2VydChpdCwgZGVmYXVsdFZhbHVl
KTsKLSAgVmFsdWUmIHZhbHVlID0gKCppdCkuc2Vjb25kOwotICByZXR1cm4gdmFsdWU7Ci19Ci0K
LS8vIEBwYXJhbSBrZXkgaXMgbm90IG51bGwtdGVybWluYXRlZC4KLVZhbHVlJiBWYWx1ZTo6cmVz
b2x2ZVJlZmVyZW5jZShjaGFyIGNvbnN0KiBrZXksIGNoYXIgY29uc3QqIGNlbmQpCi17Ci0gIEpT
T05fQVNTRVJUX01FU1NBR0UoCi0gICAgICB0eXBlXyA9PSBudWxsVmFsdWUgfHwgdHlwZV8gPT0g
b2JqZWN0VmFsdWUsCi0gICAgICAiaW4gSnNvbjo6VmFsdWU6OnJlc29sdmVSZWZlcmVuY2Uoa2V5
LCBlbmQpOiByZXF1aXJlcyBvYmplY3RWYWx1ZSIpOwotICBpZiAodHlwZV8gPT0gbnVsbFZhbHVl
KQotICAgICp0aGlzID0gVmFsdWUob2JqZWN0VmFsdWUpOwotICBDWlN0cmluZyBhY3R1YWxLZXko
Ci0gICAgICBrZXksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZW5kLWtleSksIENaU3RyaW5nOjpk
dXBsaWNhdGVPbkNvcHkpOwotICBPYmplY3RWYWx1ZXM6Oml0ZXJhdG9yIGl0ID0gdmFsdWVfLm1h
cF8tPmxvd2VyX2JvdW5kKGFjdHVhbEtleSk7Ci0gIGlmIChpdCAhPSB2YWx1ZV8ubWFwXy0+ZW5k
KCkgJiYgKCppdCkuZmlyc3QgPT0gYWN0dWFsS2V5KQotICAgIHJldHVybiAoKml0KS5zZWNvbmQ7
Ci0KLSAgT2JqZWN0VmFsdWVzOjp2YWx1ZV90eXBlIGRlZmF1bHRWYWx1ZShhY3R1YWxLZXksIG51
bGxSZWYpOwotICBpdCA9IHZhbHVlXy5tYXBfLT5pbnNlcnQoaXQsIGRlZmF1bHRWYWx1ZSk7Ci0g
IFZhbHVlJiB2YWx1ZSA9ICgqaXQpLnNlY29uZDsKLSAgcmV0dXJuIHZhbHVlOwotfQotCi1WYWx1
ZSBWYWx1ZTo6Z2V0KEFycmF5SW5kZXggaW5kZXgsIGNvbnN0IFZhbHVlJiBkZWZhdWx0VmFsdWUp
IGNvbnN0IHsKLSAgY29uc3QgVmFsdWUqIHZhbHVlID0gJigoKnRoaXMpW2luZGV4XSk7Ci0gIHJl
dHVybiB2YWx1ZSA9PSAmbnVsbFJlZiA/IGRlZmF1bHRWYWx1ZSA6ICp2YWx1ZTsKLX0KLQotYm9v
bCBWYWx1ZTo6aXNWYWxpZEluZGV4KEFycmF5SW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4IDwgc2l6ZSgpOyB9Ci0KLVZhbHVlIGNvbnN0KiBWYWx1ZTo6ZmluZChjaGFyIGNvbnN0KiBr
ZXksIGNoYXIgY29uc3QqIGNlbmQpIGNvbnN0Ci17Ci0gIEpTT05fQVNTRVJUX01FU1NBR0UoCi0g
ICAgICB0eXBlXyA9PSBudWxsVmFsdWUgfHwgdHlwZV8gPT0gb2JqZWN0VmFsdWUsCi0gICAgICAi
aW4gSnNvbjo6VmFsdWU6OmZpbmQoa2V5LCBlbmQsIGZvdW5kKTogcmVxdWlyZXMgb2JqZWN0VmFs
dWUgb3IgbnVsbFZhbHVlIik7Ci0gIGlmICh0eXBlXyA9PSBudWxsVmFsdWUpIHJldHVybiBOVUxM
OwotICBDWlN0cmluZyBhY3R1YWxLZXkoa2V5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VuZC1r
ZXkpLCBDWlN0cmluZzo6bm9EdXBsaWNhdGlvbik7Ci0gIE9iamVjdFZhbHVlczo6Y29uc3RfaXRl
cmF0b3IgaXQgPSB2YWx1ZV8ubWFwXy0+ZmluZChhY3R1YWxLZXkpOwotICBpZiAoaXQgPT0gdmFs
dWVfLm1hcF8tPmVuZCgpKSByZXR1cm4gTlVMTDsKLSAgcmV0dXJuICYoKml0KS5zZWNvbmQ7Ci19
Ci1jb25zdCBWYWx1ZSYgVmFsdWU6Om9wZXJhdG9yW10oY29uc3QgY2hhcioga2V5KSBjb25zdAot
ewotICBWYWx1ZSBjb25zdCogZm91bmQgPSBmaW5kKGtleSwga2V5ICsgc3RybGVuKGtleSkpOwot
ICBpZiAoIWZvdW5kKSByZXR1cm4gbnVsbFJlZjsKLSAgcmV0dXJuICpmb3VuZDsKLX0KLVZhbHVl
IGNvbnN0JiBWYWx1ZTo6b3BlcmF0b3JbXShzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdAot
ewotICBWYWx1ZSBjb25zdCogZm91bmQgPSBmaW5kKGtleS5kYXRhKCksIGtleS5kYXRhKCkgKyBr
ZXkubGVuZ3RoKCkpOwotICBpZiAoIWZvdW5kKSByZXR1cm4gbnVsbFJlZjsKLSAgcmV0dXJuICpm
b3VuZDsKLX0KLQotVmFsdWUmIFZhbHVlOjpvcGVyYXRvcltdKGNvbnN0IGNoYXIqIGtleSkgewot
ICByZXR1cm4gcmVzb2x2ZVJlZmVyZW5jZShrZXksIGtleSArIHN0cmxlbihrZXkpKTsKLX0KLQot
VmFsdWUmIFZhbHVlOjpvcGVyYXRvcltdKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIHsKLSAgcmV0
dXJuIHJlc29sdmVSZWZlcmVuY2Uoa2V5LmRhdGEoKSwga2V5LmRhdGEoKSArIGtleS5sZW5ndGgo
KSk7Ci19Ci0KLVZhbHVlJiBWYWx1ZTo6b3BlcmF0b3JbXShjb25zdCBTdGF0aWNTdHJpbmcmIGtl
eSkgewotICByZXR1cm4gcmVzb2x2ZVJlZmVyZW5jZShrZXkuY19zdHIoKSk7Ci19Ci0KLSNpZmRl
ZiBKU09OX1VTRV9DUFBUTAotVmFsdWUmIFZhbHVlOjpvcGVyYXRvcltdKGNvbnN0IENwcFRMOjpD
b25zdFN0cmluZyYga2V5KSB7Ci0gIHJldHVybiByZXNvbHZlUmVmZXJlbmNlKGtleS5jX3N0cigp
LCBrZXkuZW5kX2Nfc3RyKCkpOwotfQotVmFsdWUgY29uc3QmIFZhbHVlOjpvcGVyYXRvcltdKENw
cFRMOjpDb25zdFN0cmluZyBjb25zdCYga2V5KSBjb25zdAotewotICBWYWx1ZSBjb25zdCogZm91
bmQgPSBmaW5kKGtleS5jX3N0cigpLCBrZXkuZW5kX2Nfc3RyKCkpOwotICBpZiAoIWZvdW5kKSBy
ZXR1cm4gbnVsbFJlZjsKLSAgcmV0dXJuICpmb3VuZDsKLX0KLSNlbmRpZgotCi1WYWx1ZSYgVmFs
dWU6OmFwcGVuZChjb25zdCBWYWx1ZSYgdmFsdWUpIHsgcmV0dXJuICgqdGhpcylbc2l6ZSgpXSA9
IHZhbHVlOyB9Ci0KLVZhbHVlIFZhbHVlOjpnZXQoY2hhciBjb25zdCoga2V5LCBjaGFyIGNvbnN0
KiBjZW5kLCBWYWx1ZSBjb25zdCYgZGVmYXVsdFZhbHVlKSBjb25zdAotewotICBWYWx1ZSBjb25z
dCogZm91bmQgPSBmaW5kKGtleSwgY2VuZCk7Ci0gIHJldHVybiAhZm91bmQgPyBkZWZhdWx0VmFs
dWUgOiAqZm91bmQ7Ci19Ci1WYWx1ZSBWYWx1ZTo6Z2V0KGNoYXIgY29uc3QqIGtleSwgVmFsdWUg
Y29uc3QmIGRlZmF1bHRWYWx1ZSkgY29uc3QKLXsKLSAgcmV0dXJuIGdldChrZXksIGtleSArIHN0
cmxlbihrZXkpLCBkZWZhdWx0VmFsdWUpOwotfQotVmFsdWUgVmFsdWU6OmdldChzdGQ6OnN0cmlu
ZyBjb25zdCYga2V5LCBWYWx1ZSBjb25zdCYgZGVmYXVsdFZhbHVlKSBjb25zdAotewotICByZXR1
cm4gZ2V0KGtleS5kYXRhKCksIGtleS5kYXRhKCkgKyBrZXkubGVuZ3RoKCksIGRlZmF1bHRWYWx1
ZSk7Ci19Ci0KLQotYm9vbCBWYWx1ZTo6cmVtb3ZlTWVtYmVyKGNvbnN0IGNoYXIqIGtleSwgY29u
c3QgY2hhciogY2VuZCwgVmFsdWUqIHJlbW92ZWQpCi17Ci0gIGlmICh0eXBlXyAhPSBvYmplY3RW
YWx1ZSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBDWlN0cmluZyBhY3R1YWxLZXkoa2V5
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VuZC1rZXkpLCBDWlN0cmluZzo6bm9EdXBsaWNhdGlv
bik7Ci0gIE9iamVjdFZhbHVlczo6aXRlcmF0b3IgaXQgPSB2YWx1ZV8ubWFwXy0+ZmluZChhY3R1
YWxLZXkpOwotICBpZiAoaXQgPT0gdmFsdWVfLm1hcF8tPmVuZCgpKQotICAgIHJldHVybiBmYWxz
ZTsKLSAgKnJlbW92ZWQgPSBpdC0+c2Vjb25kOwotICB2YWx1ZV8ubWFwXy0+ZXJhc2UoaXQpOwot
ICByZXR1cm4gdHJ1ZTsKLX0KLWJvb2wgVmFsdWU6OnJlbW92ZU1lbWJlcihjb25zdCBjaGFyKiBr
ZXksIFZhbHVlKiByZW1vdmVkKQotewotICByZXR1cm4gcmVtb3ZlTWVtYmVyKGtleSwga2V5ICsg
c3RybGVuKGtleSksIHJlbW92ZWQpOwotfQotYm9vbCBWYWx1ZTo6cmVtb3ZlTWVtYmVyKHN0ZDo6
c3RyaW5nIGNvbnN0JiBrZXksIFZhbHVlKiByZW1vdmVkKQotewotICByZXR1cm4gcmVtb3ZlTWVt
YmVyKGtleS5kYXRhKCksIGtleS5kYXRhKCkgKyBrZXkubGVuZ3RoKCksIHJlbW92ZWQpOwotfQot
VmFsdWUgVmFsdWU6OnJlbW92ZU1lbWJlcihjb25zdCBjaGFyKiBrZXkpCi17Ci0gIEpTT05fQVNT
RVJUX01FU1NBR0UodHlwZV8gPT0gbnVsbFZhbHVlIHx8IHR5cGVfID09IG9iamVjdFZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICJpbiBKc29uOjpWYWx1ZTo6cmVtb3ZlTWVtYmVyKCk6IHJl
cXVpcmVzIG9iamVjdFZhbHVlIik7Ci0gIGlmICh0eXBlXyA9PSBudWxsVmFsdWUpCi0gICAgcmV0
dXJuIG51bGxSZWY7Ci0KLSAgVmFsdWUgcmVtb3ZlZDsgIC8vIG51bGwKLSAgcmVtb3ZlTWVtYmVy
KGtleSwga2V5ICsgc3RybGVuKGtleSksICZyZW1vdmVkKTsKLSAgcmV0dXJuIHJlbW92ZWQ7IC8v
IHN0aWxsIG51bGwgaWYgcmVtb3ZlTWVtYmVyKCkgZGlkIG5vdGhpbmcKLX0KLVZhbHVlIFZhbHVl
OjpyZW1vdmVNZW1iZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkKLXsKLSAgcmV0dXJuIHJlbW92
ZU1lbWJlcihrZXkuY19zdHIoKSk7Ci19Ci0KLWJvb2wgVmFsdWU6OnJlbW92ZUluZGV4KEFycmF5
SW5kZXggaW5kZXgsIFZhbHVlKiByZW1vdmVkKSB7Ci0gIGlmICh0eXBlXyAhPSBhcnJheVZhbHVl
KSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIENaU3RyaW5nIGtleShpbmRleCk7Ci0gIE9i
amVjdFZhbHVlczo6aXRlcmF0b3IgaXQgPSB2YWx1ZV8ubWFwXy0+ZmluZChrZXkpOwotICBpZiAo
aXQgPT0gdmFsdWVfLm1hcF8tPmVuZCgpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICpy
ZW1vdmVkID0gaXQtPnNlY29uZDsKLSAgQXJyYXlJbmRleCBvbGRTaXplID0gc2l6ZSgpOwotICAv
LyBzaGlmdCBsZWZ0IGFsbCBpdGVtcyBsZWZ0LCBpbnRvIHRoZSBwbGFjZSBvZiB0aGUgInJlbW92
ZWQiCi0gIGZvciAoQXJyYXlJbmRleCBpID0gaW5kZXg7IGkgPCAob2xkU2l6ZSAtIDEpOyArK2kp
ewotICAgIENaU3RyaW5nIGtlZXkoaSk7Ci0gICAgKCp2YWx1ZV8ubWFwXylba2VleV0gPSAoKnRo
aXMpW2kgKyAxXTsKLSAgfQotICAvLyBlcmFzZSB0aGUgbGFzdCBvbmUgKCJsZWZ0b3ZlciIpCi0g
IENaU3RyaW5nIGtleUxhc3Qob2xkU2l6ZSAtIDEpOwotICBPYmplY3RWYWx1ZXM6Oml0ZXJhdG9y
IGl0TGFzdCA9IHZhbHVlXy5tYXBfLT5maW5kKGtleUxhc3QpOwotICB2YWx1ZV8ubWFwXy0+ZXJh
c2UoaXRMYXN0KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZmRlZiBKU09OX1VTRV9DUFBUTAot
VmFsdWUgVmFsdWU6OmdldChjb25zdCBDcHBUTDo6Q29uc3RTdHJpbmcmIGtleSwKLSAgICAgICAg
ICAgICAgICAgY29uc3QgVmFsdWUmIGRlZmF1bHRWYWx1ZSkgY29uc3QgewotICByZXR1cm4gZ2V0
KGtleS5jX3N0cigpLCBrZXkuZW5kX2Nfc3RyKCksIGRlZmF1bHRWYWx1ZSk7Ci19Ci0jZW5kaWYK
LQotYm9vbCBWYWx1ZTo6aXNNZW1iZXIoY2hhciBjb25zdCoga2V5LCBjaGFyIGNvbnN0KiBjZW5k
KSBjb25zdAotewotICBWYWx1ZSBjb25zdCogdmFsdWUgPSBmaW5kKGtleSwgY2VuZCk7Ci0gIHJl
dHVybiBOVUxMICE9IHZhbHVlOwotfQotYm9vbCBWYWx1ZTo6aXNNZW1iZXIoY2hhciBjb25zdCog
a2V5KSBjb25zdAotewotICByZXR1cm4gaXNNZW1iZXIoa2V5LCBrZXkgKyBzdHJsZW4oa2V5KSk7
Ci19Ci1ib29sIFZhbHVlOjppc01lbWJlcihzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdAot
ewotICByZXR1cm4gaXNNZW1iZXIoa2V5LmRhdGEoKSwga2V5LmRhdGEoKSArIGtleS5sZW5ndGgo
KSk7Ci19Ci0KLSNpZmRlZiBKU09OX1VTRV9DUFBUTAotYm9vbCBWYWx1ZTo6aXNNZW1iZXIoY29u
c3QgQ3BwVEw6OkNvbnN0U3RyaW5nJiBrZXkpIGNvbnN0IHsKLSAgcmV0dXJuIGlzTWVtYmVyKGtl
eS5jX3N0cigpLCBrZXkuZW5kX2Nfc3RyKCkpOwotfQotI2VuZGlmCi0KLVZhbHVlOjpNZW1iZXJz
IFZhbHVlOjpnZXRNZW1iZXJOYW1lcygpIGNvbnN0IHsKLSAgSlNPTl9BU1NFUlRfTUVTU0FHRSgK
LSAgICAgIHR5cGVfID09IG51bGxWYWx1ZSB8fCB0eXBlXyA9PSBvYmplY3RWYWx1ZSwKLSAgICAg
ICJpbiBKc29uOjpWYWx1ZTo6Z2V0TWVtYmVyTmFtZXMoKSwgdmFsdWUgbXVzdCBiZSBvYmplY3RW
YWx1ZSIpOwotICBpZiAodHlwZV8gPT0gbnVsbFZhbHVlKQotICAgIHJldHVybiBWYWx1ZTo6TWVt
YmVycygpOwotICBNZW1iZXJzIG1lbWJlcnM7Ci0gIG1lbWJlcnMucmVzZXJ2ZSh2YWx1ZV8ubWFw
Xy0+c2l6ZSgpKTsKLSAgT2JqZWN0VmFsdWVzOjpjb25zdF9pdGVyYXRvciBpdCA9IHZhbHVlXy5t
YXBfLT5iZWdpbigpOwotICBPYmplY3RWYWx1ZXM6OmNvbnN0X2l0ZXJhdG9yIGl0RW5kID0gdmFs
dWVfLm1hcF8tPmVuZCgpOwotICBmb3IgKDsgaXQgIT0gaXRFbmQ7ICsraXQpIHsKLSAgICBtZW1i
ZXJzLnB1c2hfYmFjayhzdGQ6OnN0cmluZygoKml0KS5maXJzdC5kYXRhKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCppdCkuZmlyc3QubGVuZ3RoKCkpKTsKLSAgfQotICBy
ZXR1cm4gbWVtYmVyczsKLX0KLS8vCi0vLyMgaWZkZWYgSlNPTl9VU0VfQ1BQVEwKLS8vIEVudW1N
ZW1iZXJOYW1lcwotLy8gVmFsdWU6OmVudW1NZW1iZXJOYW1lcygpIGNvbnN0Ci0vL3sKLS8vICAg
aWYgKCB0eXBlXyA9PSBvYmplY3RWYWx1ZSApCi0vLyAgIHsKLS8vICAgICAgcmV0dXJuIENwcFRM
OjpFbnVtOjphbnkoICBDcHBUTDo6RW51bTo6dHJhbnNmb3JtKAotLy8gICAgICAgICBDcHBUTDo6
RW51bTo6a2V5cyggKih2YWx1ZV8ubWFwXyksIENwcFRMOjpUeXBlPGNvbnN0IENaU3RyaW5nICY+
KCkgKSwKLS8vICAgICAgICAgTWVtYmVyTmFtZXNUcmFuc2Zvcm0oKSApICk7Ci0vLyAgIH0KLS8v
ICAgcmV0dXJuIEVudW1NZW1iZXJOYW1lcygpOwotLy99Ci0vLwotLy8KLS8vIEVudW1WYWx1ZXMK
LS8vIFZhbHVlOjplbnVtVmFsdWVzKCkgY29uc3QKLS8vewotLy8gICBpZiAoIHR5cGVfID09IG9i
amVjdFZhbHVlICB8fCAgdHlwZV8gPT0gYXJyYXlWYWx1ZSApCi0vLyAgICAgIHJldHVybiBDcHBU
TDo6RW51bTo6YW55VmFsdWVzKCAqKHZhbHVlXy5tYXBfKSwKLS8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENwcFRMOjpUeXBlPGNvbnN0IFZhbHVlICY+KCkgKTsKLS8vICAg
cmV0dXJuIEVudW1WYWx1ZXMoKTsKLS8vfQotLy8KLS8vIyBlbmRpZgotCi1zdGF0aWMgYm9vbCBJ
c0ludGVncmFsKGRvdWJsZSBkKSB7Ci0gIGRvdWJsZSBpbnRlZ3JhbF9wYXJ0OwotICByZXR1cm4g
bW9kZihkLCAmaW50ZWdyYWxfcGFydCkgPT0gMC4wOwotfQotCi1ib29sIFZhbHVlOjppc051bGwo
KSBjb25zdCB7IHJldHVybiB0eXBlXyA9PSBudWxsVmFsdWU7IH0KLQotYm9vbCBWYWx1ZTo6aXNC
b29sKCkgY29uc3QgeyByZXR1cm4gdHlwZV8gPT0gYm9vbGVhblZhbHVlOyB9Ci0KLWJvb2wgVmFs
dWU6OmlzSW50KCkgY29uc3QgewotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgaW50VmFsdWU6
Ci0gICAgcmV0dXJuIHZhbHVlXy5pbnRfID49IG1pbkludCAmJiB2YWx1ZV8uaW50XyA8PSBtYXhJ
bnQ7Ci0gIGNhc2UgdWludFZhbHVlOgotICAgIHJldHVybiB2YWx1ZV8udWludF8gPD0gVUludCht
YXhJbnQpOwotICBjYXNlIHJlYWxWYWx1ZToKLSAgICByZXR1cm4gdmFsdWVfLnJlYWxfID49IG1p
bkludCAmJiB2YWx1ZV8ucmVhbF8gPD0gbWF4SW50ICYmCi0gICAgICAgICAgIElzSW50ZWdyYWwo
dmFsdWVfLnJlYWxfKTsKLSAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgfQotICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgVmFsdWU6OmlzVUludCgpIGNvbnN0IHsKLSAgc3dpdGNoICh0eXBlXykg
ewotICBjYXNlIGludFZhbHVlOgotICAgIHJldHVybiB2YWx1ZV8uaW50XyA+PSAwICYmIExhcmdl
c3RVSW50KHZhbHVlXy5pbnRfKSA8PSBMYXJnZXN0VUludChtYXhVSW50KTsKLSAgY2FzZSB1aW50
VmFsdWU6Ci0gICAgcmV0dXJuIHZhbHVlXy51aW50XyA8PSBtYXhVSW50OwotICBjYXNlIHJlYWxW
YWx1ZToKLSAgICByZXR1cm4gdmFsdWVfLnJlYWxfID49IDAgJiYgdmFsdWVfLnJlYWxfIDw9IG1h
eFVJbnQgJiYKLSAgICAgICAgICAgSXNJbnRlZ3JhbCh2YWx1ZV8ucmVhbF8pOwotICBkZWZhdWx0
OgotICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBWYWx1ZTo6aXNJ
bnQ2NCgpIGNvbnN0IHsKLSNpZiBkZWZpbmVkKEpTT05fSEFTX0lOVDY0KQotICBzd2l0Y2ggKHR5
cGVfKSB7Ci0gIGNhc2UgaW50VmFsdWU6Ci0gICAgcmV0dXJuIHRydWU7Ci0gIGNhc2UgdWludFZh
bHVlOgotICAgIHJldHVybiB2YWx1ZV8udWludF8gPD0gVUludDY0KG1heEludDY0KTsKLSAgY2Fz
ZSByZWFsVmFsdWU6Ci0gICAgLy8gTm90ZSB0aGF0IG1heEludDY0ICg9IDJeNjMgLSAxKSBpcyBu
b3QgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGEKLSAgICAvLyBkb3VibGUsIHNvIGRvdWJsZSht
YXhJbnQ2NCkgd2lsbCBiZSByb3VuZGVkIHVwIHRvIDJeNjMuIFRoZXJlZm9yZSB3ZQotICAgIC8v
IHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgbGltaXQuCi0g
ICAgcmV0dXJuIHZhbHVlXy5yZWFsXyA+PSBkb3VibGUobWluSW50NjQpICYmCi0gICAgICAgICAg
IHZhbHVlXy5yZWFsXyA8IGRvdWJsZShtYXhJbnQ2NCkgJiYgSXNJbnRlZ3JhbCh2YWx1ZV8ucmVh
bF8pOwotICBkZWZhdWx0OgotICAgIGJyZWFrOwotICB9Ci0jZW5kaWYgLy8gSlNPTl9IQVNfSU5U
NjQKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFZhbHVlOjppc1VJbnQ2NCgpIGNvbnN0IHsK
LSNpZiBkZWZpbmVkKEpTT05fSEFTX0lOVDY0KQotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gIGNhc2Ug
aW50VmFsdWU6Ci0gICAgcmV0dXJuIHZhbHVlXy5pbnRfID49IDA7Ci0gIGNhc2UgdWludFZhbHVl
OgotICAgIHJldHVybiB0cnVlOwotICBjYXNlIHJlYWxWYWx1ZToKLSAgICAvLyBOb3RlIHRoYXQg
bWF4VUludDY0ICg9IDJeNjQgLSAxKSBpcyBub3QgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGEK
LSAgICAvLyBkb3VibGUsIHNvIGRvdWJsZShtYXhVSW50NjQpIHdpbGwgYmUgcm91bmRlZCB1cCB0
byAyXjY0LiBUaGVyZWZvcmUgd2UKLSAgICAvLyByZXF1aXJlIHRoZSB2YWx1ZSB0byBiZSBzdHJp
Y3RseSBsZXNzIHRoYW4gdGhlIGxpbWl0LgotICAgIHJldHVybiB2YWx1ZV8ucmVhbF8gPj0gMCAm
JiB2YWx1ZV8ucmVhbF8gPCBtYXhVSW50NjRBc0RvdWJsZSAmJgotICAgICAgICAgICBJc0ludGVn
cmFsKHZhbHVlXy5yZWFsXyk7Ci0gIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gIH0KLSNlbmRpZiAv
LyBKU09OX0hBU19JTlQ2NAotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVmFsdWU6OmlzSW50
ZWdyYWwoKSBjb25zdCB7Ci0jaWYgZGVmaW5lZChKU09OX0hBU19JTlQ2NCkKLSAgcmV0dXJuIGlz
SW50NjQoKSB8fCBpc1VJbnQ2NCgpOwotI2Vsc2UKLSAgcmV0dXJuIGlzSW50KCkgfHwgaXNVSW50
KCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBWYWx1ZTo6aXNEb3VibGUoKSBjb25zdCB7IHJldHVybiB0
eXBlXyA9PSByZWFsVmFsdWUgfHwgaXNJbnRlZ3JhbCgpOyB9Ci0KLWJvb2wgVmFsdWU6OmlzTnVt
ZXJpYygpIGNvbnN0IHsgcmV0dXJuIGlzSW50ZWdyYWwoKSB8fCBpc0RvdWJsZSgpOyB9Ci0KLWJv
b2wgVmFsdWU6OmlzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZV8gPT0gc3RyaW5nVmFsdWU7
IH0KLQotYm9vbCBWYWx1ZTo6aXNBcnJheSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfID09IGFycmF5
VmFsdWU7IH0KLQotYm9vbCBWYWx1ZTo6aXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlXyA9
PSBvYmplY3RWYWx1ZTsgfQotCi12b2lkIFZhbHVlOjpzZXRDb21tZW50KGNvbnN0IGNoYXIqIGNv
bW1lbnQsIHNpemVfdCBsZW4sIENvbW1lbnRQbGFjZW1lbnQgcGxhY2VtZW50KSB7Ci0gIGlmICgh
Y29tbWVudHNfKQotICAgIGNvbW1lbnRzXyA9IG5ldyBDb21tZW50SW5mb1tudW1iZXJPZkNvbW1l
bnRQbGFjZW1lbnRdOwotICBpZiAoKGxlbiA+IDApICYmIChjb21tZW50W2xlbi0xXSA9PSAnXG4n
KSkgewotICAgIC8vIEFsd2F5cyBkaXNjYXJkIHRyYWlsaW5nIG5ld2xpbmUsIHRvIGFpZCBpbmRl
bnRhdGlvbi4KLSAgICBsZW4gLT0gMTsKLSAgfQotICBjb21tZW50c19bcGxhY2VtZW50XS5zZXRD
b21tZW50KGNvbW1lbnQsIGxlbik7Ci19Ci0KLXZvaWQgVmFsdWU6OnNldENvbW1lbnQoY29uc3Qg
Y2hhciogY29tbWVudCwgQ29tbWVudFBsYWNlbWVudCBwbGFjZW1lbnQpIHsKLSAgc2V0Q29tbWVu
dChjb21tZW50LCBzdHJsZW4oY29tbWVudCksIHBsYWNlbWVudCk7Ci19Ci0KLXZvaWQgVmFsdWU6
OnNldENvbW1lbnQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbW1lbnQsIENvbW1lbnRQbGFjZW1lbnQg
cGxhY2VtZW50KSB7Ci0gIHNldENvbW1lbnQoY29tbWVudC5jX3N0cigpLCBjb21tZW50Lmxlbmd0
aCgpLCBwbGFjZW1lbnQpOwotfQotCi1ib29sIFZhbHVlOjpoYXNDb21tZW50KENvbW1lbnRQbGFj
ZW1lbnQgcGxhY2VtZW50KSBjb25zdCB7Ci0gIHJldHVybiBjb21tZW50c18gIT0gMCAmJiBjb21t
ZW50c19bcGxhY2VtZW50XS5jb21tZW50XyAhPSAwOwotfQotCi1zdGQ6OnN0cmluZyBWYWx1ZTo6
Z2V0Q29tbWVudChDb21tZW50UGxhY2VtZW50IHBsYWNlbWVudCkgY29uc3QgewotICBpZiAoaGFz
Q29tbWVudChwbGFjZW1lbnQpKQotICAgIHJldHVybiBjb21tZW50c19bcGxhY2VtZW50XS5jb21t
ZW50XzsKLSAgcmV0dXJuICIiOwotfQotCi12b2lkIFZhbHVlOjpzZXRPZmZzZXRTdGFydChzaXpl
X3Qgc3RhcnQpIHsgc3RhcnRfID0gc3RhcnQ7IH0KLQotdm9pZCBWYWx1ZTo6c2V0T2Zmc2V0TGlt
aXQoc2l6ZV90IGxpbWl0KSB7IGxpbWl0XyA9IGxpbWl0OyB9Ci0KLXNpemVfdCBWYWx1ZTo6Z2V0
T2Zmc2V0U3RhcnQoKSBjb25zdCB7IHJldHVybiBzdGFydF87IH0KLQotc2l6ZV90IFZhbHVlOjpn
ZXRPZmZzZXRMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIGxpbWl0XzsgfQotCi1zdGQ6OnN0cmluZyBW
YWx1ZTo6dG9TdHlsZWRTdHJpbmcoKSBjb25zdCB7Ci0gIFN0eWxlZFdyaXRlciB3cml0ZXI7Ci0g
IHJldHVybiB3cml0ZXIud3JpdGUoKnRoaXMpOwotfQotCi1WYWx1ZTo6Y29uc3RfaXRlcmF0b3Ig
VmFsdWU6OmJlZ2luKCkgY29uc3QgewotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgYXJyYXlW
YWx1ZToKLSAgY2FzZSBvYmplY3RWYWx1ZToKLSAgICBpZiAodmFsdWVfLm1hcF8pCi0gICAgICBy
ZXR1cm4gY29uc3RfaXRlcmF0b3IodmFsdWVfLm1hcF8tPmJlZ2luKCkpOwotICAgIGJyZWFrOwot
ICBkZWZhdWx0OgotICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBjb25zdF9pdGVyYXRvcigpOwot
fQotCi1WYWx1ZTo6Y29uc3RfaXRlcmF0b3IgVmFsdWU6OmVuZCgpIGNvbnN0IHsKLSAgc3dpdGNo
ICh0eXBlXykgewotICBjYXNlIGFycmF5VmFsdWU6Ci0gIGNhc2Ugb2JqZWN0VmFsdWU6Ci0gICAg
aWYgKHZhbHVlXy5tYXBfKQotICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHZhbHVlXy5tYXBf
LT5lbmQoKSk7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gIH0KLSAgcmV0
dXJuIGNvbnN0X2l0ZXJhdG9yKCk7Ci19Ci0KLVZhbHVlOjppdGVyYXRvciBWYWx1ZTo6YmVnaW4o
KSB7Ci0gIHN3aXRjaCAodHlwZV8pIHsKLSAgY2FzZSBhcnJheVZhbHVlOgotICBjYXNlIG9iamVj
dFZhbHVlOgotICAgIGlmICh2YWx1ZV8ubWFwXykKLSAgICAgIHJldHVybiBpdGVyYXRvcih2YWx1
ZV8ubWFwXy0+YmVnaW4oKSk7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0g
IH0KLSAgcmV0dXJuIGl0ZXJhdG9yKCk7Ci19Ci0KLVZhbHVlOjppdGVyYXRvciBWYWx1ZTo6ZW5k
KCkgewotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gIGNhc2UgYXJyYXlWYWx1ZToKLSAgY2FzZSBvYmpl
Y3RWYWx1ZToKLSAgICBpZiAodmFsdWVfLm1hcF8pCi0gICAgICByZXR1cm4gaXRlcmF0b3IodmFs
dWVfLm1hcF8tPmVuZCgpKTsKLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAg
fQotICByZXR1cm4gaXRlcmF0b3IoKTsKLX0KLQotLy8gY2xhc3MgUGF0aEFyZ3VtZW50Ci0vLyAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQotUGF0aEFyZ3VtZW50OjpQYXRoQXJndW1lbnQoKSA6IGtleV8oKSwgaW5kZXhf
KCksIGtpbmRfKGtpbmROb25lKSB7fQotCi1QYXRoQXJndW1lbnQ6OlBhdGhBcmd1bWVudChBcnJh
eUluZGV4IGluZGV4KQotICAgIDoga2V5XygpLCBpbmRleF8oaW5kZXgpLCBraW5kXyhraW5kSW5k
ZXgpIHt9Ci0KLVBhdGhBcmd1bWVudDo6UGF0aEFyZ3VtZW50KGNvbnN0IGNoYXIqIGtleSkKLSAg
ICA6IGtleV8oa2V5KSwgaW5kZXhfKCksIGtpbmRfKGtpbmRLZXkpIHt9Ci0KLVBhdGhBcmd1bWVu
dDo6UGF0aEFyZ3VtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpCi0gICAgOiBrZXlfKGtleS5j
X3N0cigpKSwgaW5kZXhfKCksIGtpbmRfKGtpbmRLZXkpIHt9Ci0KLS8vIGNsYXNzIFBhdGgKLS8v
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotCi1QYXRoOjpQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAotICAgICAg
ICAgICBjb25zdCBQYXRoQXJndW1lbnQmIGExLAotICAgICAgICAgICBjb25zdCBQYXRoQXJndW1l
bnQmIGEyLAotICAgICAgICAgICBjb25zdCBQYXRoQXJndW1lbnQmIGEzLAotICAgICAgICAgICBj
b25zdCBQYXRoQXJndW1lbnQmIGE0LAotICAgICAgICAgICBjb25zdCBQYXRoQXJndW1lbnQmIGE1
KSB7Ci0gIEluQXJncyBpbjsKLSAgaW4ucHVzaF9iYWNrKCZhMSk7Ci0gIGluLnB1c2hfYmFjaygm
YTIpOwotICBpbi5wdXNoX2JhY2soJmEzKTsKLSAgaW4ucHVzaF9iYWNrKCZhNCk7Ci0gIGluLnB1
c2hfYmFjaygmYTUpOwotICBtYWtlUGF0aChwYXRoLCBpbik7Ci19Ci0KLXZvaWQgUGF0aDo6bWFr
ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgsIGNvbnN0IEluQXJncyYgaW4pIHsKLSAgY29u
c3QgY2hhciogY3VycmVudCA9IHBhdGguY19zdHIoKTsKLSAgY29uc3QgY2hhciogZW5kID0gY3Vy
cmVudCArIHBhdGgubGVuZ3RoKCk7Ci0gIEluQXJnczo6Y29uc3RfaXRlcmF0b3IgaXRJbkFyZyA9
IGluLmJlZ2luKCk7Ci0gIHdoaWxlIChjdXJyZW50ICE9IGVuZCkgewotICAgIGlmICgqY3VycmVu
dCA9PSAnWycpIHsKLSAgICAgICsrY3VycmVudDsKLSAgICAgIGlmICgqY3VycmVudCA9PSAnJScp
Ci0gICAgICAgIGFkZFBhdGhJbkFyZyhwYXRoLCBpbiwgaXRJbkFyZywgUGF0aEFyZ3VtZW50Ojpr
aW5kSW5kZXgpOwotICAgICAgZWxzZSB7Ci0gICAgICAgIEFycmF5SW5kZXggaW5kZXggPSAwOwot
ICAgICAgICBmb3IgKDsgY3VycmVudCAhPSBlbmQgJiYgKmN1cnJlbnQgPj0gJzAnICYmICpjdXJy
ZW50IDw9ICc5JzsgKytjdXJyZW50KQotICAgICAgICAgIGluZGV4ID0gaW5kZXggKiAxMCArIEFy
cmF5SW5kZXgoKmN1cnJlbnQgLSAnMCcpOwotICAgICAgICBhcmdzXy5wdXNoX2JhY2soaW5kZXgp
OwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICpjdXJyZW50KysgIT0gJ10n
KQotICAgICAgICBpbnZhbGlkUGF0aChwYXRoLCBpbnQoY3VycmVudCAtIHBhdGguY19zdHIoKSkp
OwotICAgIH0gZWxzZSBpZiAoKmN1cnJlbnQgPT0gJyUnKSB7Ci0gICAgICBhZGRQYXRoSW5Bcmco
cGF0aCwgaW4sIGl0SW5BcmcsIFBhdGhBcmd1bWVudDo6a2luZEtleSk7Ci0gICAgICArK2N1cnJl
bnQ7Ci0gICAgfSBlbHNlIGlmICgqY3VycmVudCA9PSAnLicpIHsKLSAgICAgICsrY3VycmVudDsK
LSAgICB9IGVsc2UgewotICAgICAgY29uc3QgY2hhciogYmVnaW5OYW1lID0gY3VycmVudDsKLSAg
ICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiAhc3RyY2hyKCJbLiIsICpjdXJyZW50KSkKLSAg
ICAgICAgKytjdXJyZW50OwotICAgICAgYXJnc18ucHVzaF9iYWNrKHN0ZDo6c3RyaW5nKGJlZ2lu
TmFtZSwgY3VycmVudCkpOwotICAgIH0KLSAgfQotfQotCi12b2lkIFBhdGg6OmFkZFBhdGhJbkFy
Zyhjb25zdCBzdGQ6OnN0cmluZyYgLypwYXRoKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBJbkFyZ3MmIGluLAotICAgICAgICAgICAgICAgICAgICAgICAgSW5BcmdzOjpjb25zdF9p
dGVyYXRvciYgaXRJbkFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIFBhdGhBcmd1bWVudDo6
S2luZCBraW5kKSB7Ci0gIGlmIChpdEluQXJnID09IGluLmVuZCgpKSB7Ci0gICAgLy8gRXJyb3I6
IG1pc3NpbmcgYXJndW1lbnQgJWQKLSAgfSBlbHNlIGlmICgoKml0SW5BcmcpLT5raW5kXyAhPSBr
aW5kKSB7Ci0gICAgLy8gRXJyb3I6IGJhZCBhcmd1bWVudCB0eXBlCi0gIH0gZWxzZSB7Ci0gICAg
YXJnc18ucHVzaF9iYWNrKCoqaXRJbkFyZyk7Ci0gIH0KLX0KLQotdm9pZCBQYXRoOjppbnZhbGlk
UGF0aChjb25zdCBzdGQ6OnN0cmluZyYgLypwYXRoKi8sIGludCAvKmxvY2F0aW9uKi8pIHsKLSAg
Ly8gRXJyb3I6IGludmFsaWQgcGF0aC4KLX0KLQotY29uc3QgVmFsdWUmIFBhdGg6OnJlc29sdmUo
Y29uc3QgVmFsdWUmIHJvb3QpIGNvbnN0IHsKLSAgY29uc3QgVmFsdWUqIG5vZGUgPSAmcm9vdDsK
LSAgZm9yIChBcmdzOjpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3NfLmJlZ2luKCk7IGl0ICE9IGFy
Z3NfLmVuZCgpOyArK2l0KSB7Ci0gICAgY29uc3QgUGF0aEFyZ3VtZW50JiBhcmcgPSAqaXQ7Ci0g
ICAgaWYgKGFyZy5raW5kXyA9PSBQYXRoQXJndW1lbnQ6OmtpbmRJbmRleCkgewotICAgICAgaWYg
KCFub2RlLT5pc0FycmF5KCkgfHwgIW5vZGUtPmlzVmFsaWRJbmRleChhcmcuaW5kZXhfKSkgewot
ICAgICAgICAvLyBFcnJvcjogdW5hYmxlIHRvIHJlc29sdmUgcGF0aCAoYXJyYXkgdmFsdWUgZXhw
ZWN0ZWQgYXQgcG9zaXRpb24uLi4KLSAgICAgIH0KLSAgICAgIG5vZGUgPSAmKCgqbm9kZSlbYXJn
LmluZGV4X10pOwotICAgIH0gZWxzZSBpZiAoYXJnLmtpbmRfID09IFBhdGhBcmd1bWVudDo6a2lu
ZEtleSkgewotICAgICAgaWYgKCFub2RlLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIC8vIEVycm9y
OiB1bmFibGUgdG8gcmVzb2x2ZSBwYXRoIChvYmplY3QgdmFsdWUgZXhwZWN0ZWQgYXQgcG9zaXRp
b24uLi4pCi0gICAgICB9Ci0gICAgICBub2RlID0gJigoKm5vZGUpW2FyZy5rZXlfXSk7Ci0gICAg
ICBpZiAobm9kZSA9PSAmVmFsdWU6Om51bGxSZWYpIHsKLSAgICAgICAgLy8gRXJyb3I6IHVuYWJs
ZSB0byByZXNvbHZlIHBhdGggKG9iamVjdCBoYXMgbm8gbWVtYmVyIG5hbWVkICcnIGF0Ci0gICAg
ICAgIC8vIHBvc2l0aW9uLi4uKQotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gKm5vZGU7
Ci19Ci0KLVZhbHVlIFBhdGg6OnJlc29sdmUoY29uc3QgVmFsdWUmIHJvb3QsIGNvbnN0IFZhbHVl
JiBkZWZhdWx0VmFsdWUpIGNvbnN0IHsKLSAgY29uc3QgVmFsdWUqIG5vZGUgPSAmcm9vdDsKLSAg
Zm9yIChBcmdzOjpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3NfLmJlZ2luKCk7IGl0ICE9IGFyZ3Nf
LmVuZCgpOyArK2l0KSB7Ci0gICAgY29uc3QgUGF0aEFyZ3VtZW50JiBhcmcgPSAqaXQ7Ci0gICAg
aWYgKGFyZy5raW5kXyA9PSBQYXRoQXJndW1lbnQ6OmtpbmRJbmRleCkgewotICAgICAgaWYgKCFu
b2RlLT5pc0FycmF5KCkgfHwgIW5vZGUtPmlzVmFsaWRJbmRleChhcmcuaW5kZXhfKSkKLSAgICAg
ICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICAgIG5vZGUgPSAmKCgqbm9kZSlbYXJnLmluZGV4
X10pOwotICAgIH0gZWxzZSBpZiAoYXJnLmtpbmRfID09IFBhdGhBcmd1bWVudDo6a2luZEtleSkg
ewotICAgICAgaWYgKCFub2RlLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gZGVmYXVsdFZh
bHVlOwotICAgICAgbm9kZSA9ICYoKCpub2RlKVthcmcua2V5X10pOwotICAgICAgaWYgKG5vZGUg
PT0gJlZhbHVlOjpudWxsUmVmKQotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0K
LSAgfQotICByZXR1cm4gKm5vZGU7Ci19Ci0KLVZhbHVlJiBQYXRoOjptYWtlKFZhbHVlJiByb290
KSBjb25zdCB7Ci0gIFZhbHVlKiBub2RlID0gJnJvb3Q7Ci0gIGZvciAoQXJnczo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBhcmdzXy5iZWdpbigpOyBpdCAhPSBhcmdzXy5lbmQoKTsgKytpdCkgewotICAg
IGNvbnN0IFBhdGhBcmd1bWVudCYgYXJnID0gKml0OwotICAgIGlmIChhcmcua2luZF8gPT0gUGF0
aEFyZ3VtZW50OjpraW5kSW5kZXgpIHsKLSAgICAgIGlmICghbm9kZS0+aXNBcnJheSgpKSB7Ci0g
ICAgICAgIC8vIEVycm9yOiBub2RlIGlzIG5vdCBhbiBhcnJheSBhdCBwb3NpdGlvbiAuLi4KLSAg
ICAgIH0KLSAgICAgIG5vZGUgPSAmKCgqbm9kZSlbYXJnLmluZGV4X10pOwotICAgIH0gZWxzZSBp
ZiAoYXJnLmtpbmRfID09IFBhdGhBcmd1bWVudDo6a2luZEtleSkgewotICAgICAgaWYgKCFub2Rl
LT5pc09iamVjdCgpKSB7Ci0gICAgICAgIC8vIEVycm9yOiBub2RlIGlzIG5vdCBhbiBvYmplY3Qg
YXQgcG9zaXRpb24uLi4KLSAgICAgIH0KLSAgICAgIG5vZGUgPSAmKCgqbm9kZSlbYXJnLmtleV9d
KTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuICpub2RlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKc29u
Ci0KLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEVuZCBvZiBjb250ZW50IG9mIGZpbGU6IHNyYy9saWJf
anNvbi9qc29uX3ZhbHVlLmNwcAotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0KLQotCi0KLQotLy8gLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotLy8gQmVnaW5uaW5nIG9mIGNvbnRlbnQgb2YgZmlsZTogc3JjL2xpYl9qc29u
L2pzb25fd3JpdGVyLmNwcAotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLyBDb3B5cmlnaHQgMjAxMSBC
YXB0aXN0ZSBMZXBpbGxldXIKLS8vIERpc3RyaWJ1dGVkIHVuZGVyIE1JVCBsaWNlbnNlLCBvciBw
dWJsaWMgZG9tYWluIGlmIGRlc2lyZWQgYW5kCi0vLyByZWNvZ25pemVkIGluIHlvdXIganVyaXNk
aWN0aW9uLgotLy8gU2VlIGZpbGUgTElDRU5TRSBmb3IgZGV0YWlsIG9yIGNvcHkgYXQgaHR0cDov
L2pzb25jcHAuc291cmNlZm9yZ2UubmV0L0xJQ0VOU0UKLQotI2lmICFkZWZpbmVkKEpTT05fSVNf
QU1BTEdBTUFUSU9OKQotI2luY2x1ZGUgPGpzb24vd3JpdGVyLmg+Ci0jaW5jbHVkZSAianNvbl90
b29sLmgiCi0jZW5kaWYgLy8gaWYgIWRlZmluZWQoSlNPTl9JU19BTUFMR0FNQVRJT04pCi0jaW5j
bHVkZSA8aW9tYW5pcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLSNp
bmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2lu
Y2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotCi0jaWYgZGVmaW5lZChfTVNDX1ZF
UikgJiYgX01TQ19WRVIgPj0gMTIwMCAmJiBfTVNDX1ZFUiA8IDE4MDAgLy8gQmV0d2VlbiBWQysr
IDYuMCBhbmQgVkMrKyAxMS4wCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLSNkZWZpbmUgaXNmaW5pdGUg
X2Zpbml0ZQotI2VsaWYgZGVmaW5lZChfX3N1bikgJiYgZGVmaW5lZChfX1NWUjQpIC8vU29sYXJp
cwotI2lmICFkZWZpbmVkKGlzZmluaXRlKQotI2luY2x1ZGUgPGllZWVmcC5oPgotI2RlZmluZSBp
c2Zpbml0ZSBmaW5pdGUKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChfQUlYKQotI2lmICFkZWZpbmVk
KGlzZmluaXRlKQotI2luY2x1ZGUgPG1hdGguaD4KLSNkZWZpbmUgaXNmaW5pdGUgZmluaXRlCi0j
ZW5kaWYKLSNlbGlmIGRlZmluZWQoX19ocHV4KQotI2lmICFkZWZpbmVkKGlzZmluaXRlKQotI2lm
IGRlZmluZWQoX19pYTY0KSAmJiAhZGVmaW5lZChmaW5pdGUpCi0jZGVmaW5lIGlzZmluaXRlKHgp
ICgoc2l6ZW9mKHgpID09IHNpemVvZihmbG9hdCkgPyBcCi0gICAgICAgICAgICAgICAgICAgICBf
SXNmaW5pdGVmKHgpIDogX0lzRmluaXRlKHgpKSkKLSNlbHNlCi0jaW5jbHVkZSA8bWF0aC5oPgot
I2RlZmluZSBpc2Zpbml0ZSBmaW5pdGUKLSNlbmRpZgotI2VuZGlmCi0jZWxzZQotI2luY2x1ZGUg
PGNtYXRoPgotI2lmICEoZGVmaW5lZChfX1FOWE5UT19fKSkgLy8gUU5YIGFscmVhZHkgZGVmaW5l
cyBpc2Zpbml0ZQotI2RlZmluZSBpc2Zpbml0ZSBzdGQ6OmlzZmluaXRlCi0jZW5kaWYKLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNpZiAhZGVmaW5lZChXSU5DRSkgJiYgZGVmaW5l
ZChfX1NURENfU0VDVVJFX0xJQl9fKSAmJiBfTVNDX1ZFUiA+PSAxNTAwIC8vIFZDKysgOS4wIGFu
ZCBhYm92ZQotI2RlZmluZSBzbnByaW50ZiBzcHJpbnRmX3MKLSNlbGlmIF9NU0NfVkVSID49IDE5
MDAgLy8gVkMrKyAxNC4wIGFuZCBhYm92ZQotI2RlZmluZSBzbnByaW50ZiBzdGQ6OnNucHJpbnRm
Ci0jZWxzZQotI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKLSNlbmRpZgotI2VsaWYgZGVmaW5l
ZChfX0FORFJPSURfXykgfHwgZGVmaW5lZChfX1FOWE5UT19fKQotI2RlZmluZSBzbnByaW50ZiBz
bnByaW50ZgotI2VsaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAotI2RlZmluZSBzbnByaW50ZiBz
dGQ6OnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAgCi0jaW5j
bHVkZSA8ZmxvYXQuaD4KLSNkZWZpbmUgaXNmaW5pdGUgX2Zpbml0ZQotI2RlZmluZSBzbnByaW50
ZiBfc25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIg
Pj0gMTQwMCAvLyBWQysrIDguMAotLy8gRGlzYWJsZSB3YXJuaW5nIGFib3V0IHN0cmR1cCBiZWlu
ZyBkZXByZWNhdGVkLgotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0OTk2KQotI2VuZGlmCi0K
LW5hbWVzcGFjZSBKc29uIHsKLQotI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wgfHwgKGRlZmlu
ZWQoX0NQUExJQl9WRVIpICYmIF9DUFBMSUJfVkVSID49IDUyMCkKLXR5cGVkZWYgc3RkOjp1bmlx
dWVfcHRyPFN0cmVhbVdyaXRlcj4gU3RyZWFtV3JpdGVyUHRyOwotI2Vsc2UKLXR5cGVkZWYgc3Rk
OjphdXRvX3B0cjxTdHJlYW1Xcml0ZXI+ICAgU3RyZWFtV3JpdGVyUHRyOwotI2VuZGlmCi0KLXN0
YXRpYyBib29sIGNvbnRhaW5zQ29udHJvbENoYXJhY3Rlcihjb25zdCBjaGFyKiBzdHIpIHsKLSAg
d2hpbGUgKCpzdHIpIHsKLSAgICBpZiAoaXNDb250cm9sQ2hhcmFjdGVyKCooc3RyKyspKSkKLSAg
ICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wg
Y29udGFpbnNDb250cm9sQ2hhcmFjdGVyMChjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikg
ewotICBjaGFyIGNvbnN0KiBlbmQgPSBzdHIgKyBsZW47Ci0gIHdoaWxlIChlbmQgIT0gc3RyKSB7
Ci0gICAgaWYgKGlzQ29udHJvbENoYXJhY3Rlcigqc3RyKSB8fCAwPT0qc3RyKQotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgKytzdHI7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGQ6OnN0
cmluZyB2YWx1ZVRvU3RyaW5nKExhcmdlc3RJbnQgdmFsdWUpIHsKLSAgVUludFRvU3RyaW5nQnVm
ZmVyIGJ1ZmZlcjsKLSAgY2hhciogY3VycmVudCA9IGJ1ZmZlciArIHNpemVvZihidWZmZXIpOwot
ICBpZiAodmFsdWUgPT0gVmFsdWU6Om1pbkxhcmdlc3RJbnQpIHsKLSAgICB1aW50VG9TdHJpbmco
TGFyZ2VzdFVJbnQoVmFsdWU6Om1heExhcmdlc3RJbnQpICsgMSwgY3VycmVudCk7Ci0gICAgKi0t
Y3VycmVudCA9ICctJzsKLSAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKLSAgICB1aW50VG9TdHJp
bmcoTGFyZ2VzdFVJbnQoLXZhbHVlKSwgY3VycmVudCk7Ci0gICAgKi0tY3VycmVudCA9ICctJzsK
LSAgfSBlbHNlIHsKLSAgICB1aW50VG9TdHJpbmcoTGFyZ2VzdFVJbnQodmFsdWUpLCBjdXJyZW50
KTsKLSAgfQotICBhc3NlcnQoY3VycmVudCA+PSBidWZmZXIpOwotICByZXR1cm4gY3VycmVudDsK
LX0KLQotc3RkOjpzdHJpbmcgdmFsdWVUb1N0cmluZyhMYXJnZXN0VUludCB2YWx1ZSkgewotICBV
SW50VG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICBjaGFyKiBjdXJyZW50ID0gYnVmZmVyICsgc2l6
ZW9mKGJ1ZmZlcik7Ci0gIHVpbnRUb1N0cmluZyh2YWx1ZSwgY3VycmVudCk7Ci0gIGFzc2VydChj
dXJyZW50ID49IGJ1ZmZlcik7Ci0gIHJldHVybiBjdXJyZW50OwotfQotCi0jaWYgZGVmaW5lZChK
U09OX0hBU19JTlQ2NCkKLQotc3RkOjpzdHJpbmcgdmFsdWVUb1N0cmluZyhJbnQgdmFsdWUpIHsK
LSAgcmV0dXJuIHZhbHVlVG9TdHJpbmcoTGFyZ2VzdEludCh2YWx1ZSkpOwotfQotCi1zdGQ6OnN0
cmluZyB2YWx1ZVRvU3RyaW5nKFVJbnQgdmFsdWUpIHsKLSAgcmV0dXJuIHZhbHVlVG9TdHJpbmco
TGFyZ2VzdFVJbnQodmFsdWUpKTsKLX0KLQotI2VuZGlmIC8vICMgaWYgZGVmaW5lZChKU09OX0hB
U19JTlQ2NCkKLQotc3RkOjpzdHJpbmcgdmFsdWVUb1N0cmluZyhkb3VibGUgdmFsdWUsIGJvb2wg
dXNlU3BlY2lhbEZsb2F0cywgdW5zaWduZWQgaW50IHByZWNpc2lvbikgewotICAvLyBBbGxvY2F0
ZSBhIGJ1ZmZlciB0aGF0IGlzIG1vcmUgdGhhbiBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgdGhlIDE2
IGRpZ2l0cyBvZgotICAvLyBwcmVjaXNpb24gcmVxdWVzdGVkIGJlbG93LgotICBjaGFyIGJ1ZmZl
clszMl07Ci0gIGludCBsZW4gPSAtMTsKLQotICBjaGFyIGZvcm1hdFN0cmluZ1s2XTsKLSAgc3By
aW50Zihmb3JtYXRTdHJpbmcsICIlJS4lZGciLCBwcmVjaXNpb24pOwotCi0gIC8vIFByaW50IGlu
dG8gdGhlIGJ1ZmZlci4gV2UgbmVlZCBub3QgcmVxdWVzdCB0aGUgYWx0ZXJuYXRpdmUgcmVwcmVz
ZW50YXRpb24KLSAgLy8gdGhhdCBhbHdheXMgaGFzIGEgZGVjaW1hbCBwb2ludCBiZWNhdXNlIEpT
T04gZG9lc24ndCBkaXN0aW5naXNoIHRoZQotICAvLyBjb25jZXB0cyBvZiByZWFscyBhbmQgaW50
ZWdlcnMuCi0gIGlmIChpc2Zpbml0ZSh2YWx1ZSkpIHsKLSAgICBsZW4gPSBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCBmb3JtYXRTdHJpbmcsIHZhbHVlKTsKLSAgfSBlbHNlIHsKLSAg
ICAvLyBJRUVFIHN0YW5kYXJkIHN0YXRlcyB0aGF0IE5hTiB2YWx1ZXMgd2lsbCBub3QgY29tcGFy
ZSB0byB0aGVtc2VsdmVzCi0gICAgaWYgKHZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICBsZW4gPSBz
bnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCB1c2VTcGVjaWFsRmxvYXRzID8gIk5hTiIg
OiAibnVsbCIpOwotICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwKSB7Ci0gICAgICBsZW4gPSBzbnBy
aW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCB1c2VTcGVjaWFsRmxvYXRzID8gIi1JbmZpbml0
eSIgOiAiLTFlKzk5OTkiKTsKLSAgICB9IGVsc2UgewotICAgICAgbGVuID0gc25wcmludGYoYnVm
ZmVyLCBzaXplb2YoYnVmZmVyKSwgdXNlU3BlY2lhbEZsb2F0cyA/ICJJbmZpbml0eSIgOiAiMWUr
OTk5OSIpOwotICAgIH0KLSAgICAvLyBGb3IgdGhvc2UsIHdlIGRvIG5vdCBuZWVkIHRvIGNhbGwg
Zml4TnVtTG9jLCBidXQgaXQgaXMgZmFzdC4KLSAgfQotICBhc3NlcnQobGVuID49IDApOwotICBm
aXhOdW1lcmljTG9jYWxlKGJ1ZmZlciwgYnVmZmVyICsgbGVuKTsKLSAgcmV0dXJuIGJ1ZmZlcjsK
LX0KLQotc3RkOjpzdHJpbmcgdmFsdWVUb1N0cmluZyhkb3VibGUgdmFsdWUpIHsgcmV0dXJuIHZh
bHVlVG9TdHJpbmcodmFsdWUsIGZhbHNlLCAxNyk7IH0KLQotc3RkOjpzdHJpbmcgdmFsdWVUb1N0
cmluZyhib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/ICJ0cnVlIiA6ICJmYWxzZSI7IH0KLQot
c3RkOjpzdHJpbmcgdmFsdWVUb1F1b3RlZFN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkgewotICBp
ZiAodmFsdWUgPT0gTlVMTCkKLSAgICByZXR1cm4gIiI7Ci0gIC8vIE5vdCBzdXJlIGhvdyB0byBo
YW5kbGUgdW5pY29kZS4uLgotICBpZiAoc3RycGJyayh2YWx1ZSwgIlwiXFxcYlxmXG5cclx0Iikg
PT0gTlVMTCAmJgotICAgICAgIWNvbnRhaW5zQ29udHJvbENoYXJhY3Rlcih2YWx1ZSkpCi0gICAg
cmV0dXJuIHN0ZDo6c3RyaW5nKCJcIiIpICsgdmFsdWUgKyAiXCIiOwotICAvLyBXZSBoYXZlIHRv
IHdhbGsgdmFsdWUgYW5kIGVzY2FwZSBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLgotICAvLyBBcHBl
bmRpbmcgdG8gc3RkOjpzdHJpbmcgaXMgbm90IGVmZmljaWVudCwgYnV0IHRoaXMgc2hvdWxkIGJl
IHJhcmUuCi0gIC8vIChOb3RlOiBmb3J3YXJkIHNsYXNoZXMgYXJlICpub3QqIHJhcmUsIGJ1dCBJ
IGFtIG5vdCBlc2NhcGluZyB0aGVtLikKLSAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBtYXhzaXpl
ID0KLSAgICAgIHN0cmxlbih2YWx1ZSkgKiAyICsgMzsgLy8gYWxsZXNjYXBlZCtxdW90ZXMrTlVM
TAotICBzdGQ6OnN0cmluZyByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNlcnZlKG1heHNpemUpOyAvLyB0
byBhdm9pZCBsb3RzIG9mIG1hbGxvY3MKLSAgcmVzdWx0ICs9ICJcIiI7Ci0gIGZvciAoY29uc3Qg
Y2hhciogYyA9IHZhbHVlOyAqYyAhPSAwOyArK2MpIHsKLSAgICBzd2l0Y2ggKCpjKSB7Ci0gICAg
Y2FzZSAnXCInOgotICAgICAgcmVzdWx0ICs9ICJcXFwiIjsKLSAgICAgIGJyZWFrOwotICAgIGNh
c2UgJ1xcJzoKLSAgICAgIHJlc3VsdCArPSAiXFxcXCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNl
ICdcYic6Ci0gICAgICByZXN1bHQgKz0gIlxcYiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdc
Zic6Ci0gICAgICByZXN1bHQgKz0gIlxcZiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdcbic6
Ci0gICAgICByZXN1bHQgKz0gIlxcbiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdccic6Ci0g
ICAgICByZXN1bHQgKz0gIlxcciI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdcdCc6Ci0gICAg
ICByZXN1bHQgKz0gIlxcdCI7Ci0gICAgICBicmVhazsKLSAgICAvLyBjYXNlICcvJzoKLSAgICAv
LyBFdmVuIHRob3VnaCBcLyBpcyBjb25zaWRlcmVkIGEgbGVnYWwgZXNjYXBlIGluIEpTT04sIGEg
YmFyZQotICAgIC8vIHNsYXNoIGlzIGFsc28gbGVnYWwsIHNvIEkgc2VlIG5vIHJlYXNvbiB0byBl
c2NhcGUgaXQuCi0gICAgLy8gKEkgaG9wZSBJIGFtIG5vdCBtaXN1bmRlcnN0YW5kaW5nIHNvbWV0
aGluZy4KLSAgICAvLyBibGVwIG5vdGVzOiBhY3R1YWxseSBlc2NhcGluZyBcLyBtYXkgYmUgdXNl
ZnVsIGluIGphdmFzY3JpcHQgdG8gYXZvaWQgPC8KLSAgICAvLyBzZXF1ZW5jZS4KLSAgICAvLyBT
aG91bGQgYWRkIGEgZmxhZyB0byBhbGxvdyB0aGlzIGNvbXBhdGliaWxpdHkgbW9kZSBhbmQgcHJl
dmVudCB0aGlzCi0gICAgLy8gc2VxdWVuY2UgZnJvbSBvY2N1cnJpbmcuCi0gICAgZGVmYXVsdDoK
LSAgICAgIGlmIChpc0NvbnRyb2xDaGFyYWN0ZXIoKmMpKSB7Ci0gICAgICAgIHN0ZDo6b3N0cmlu
Z3N0cmVhbSBvc3M7Ci0gICAgICAgIG9zcyA8PCAiXFx1IiA8PCBzdGQ6OmhleCA8PCBzdGQ6OnVw
cGVyY2FzZSA8PCBzdGQ6OnNldGZpbGwoJzAnKQotICAgICAgICAgICAgPDwgc3RkOjpzZXR3KDQp
IDw8IHN0YXRpY19jYXN0PGludD4oKmMpOwotICAgICAgICByZXN1bHQgKz0gb3NzLnN0cigpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ICs9ICpjOwotICAgICAgfQotICAgICAgYnJl
YWs7Ci0gICAgfQotICB9Ci0gIHJlc3VsdCArPSAiXCIiOwotICByZXR1cm4gcmVzdWx0OwotfQot
Ci0vLyBodHRwczovL2dpdGh1Yi5jb20vdXBjYXN0ZS91cGNhc3RlL2Jsb2IvbWFzdGVyL3NyYy91
cGNvcmUvc3JjL2NzdHJpbmcvc3RybnBicmsuY3BwCi1zdGF0aWMgY2hhciBjb25zdCogc3RybnBi
cmsoY2hhciBjb25zdCogcywgY2hhciBjb25zdCogYWNjZXB0LCBzaXplX3QgbikgewotICBhc3Nl
cnQoKHMgfHwgIW4pICYmIGFjY2VwdCk7Ci0KLSAgY2hhciBjb25zdCogY29uc3QgZW5kID0gcyAr
IG47Ci0gIGZvciAoY2hhciBjb25zdCogY3VyID0gczsgY3VyIDwgZW5kOyArK2N1cikgewotICAg
IGludCBjb25zdCBjID0gKmN1cjsKLSAgICBmb3IgKGNoYXIgY29uc3QqIGEgPSBhY2NlcHQ7ICph
OyArK2EpIHsKLSAgICAgIGlmICgqYSA9PSBjKSB7Ci0gICAgICAgIHJldHVybiBjdXI7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwotfQotc3RhdGljIHN0ZDo6c3RyaW5nIHZh
bHVlVG9RdW90ZWRTdHJpbmdOKGNvbnN0IGNoYXIqIHZhbHVlLCB1bnNpZ25lZCBsZW5ndGgpIHsK
LSAgaWYgKHZhbHVlID09IE5VTEwpCi0gICAgcmV0dXJuICIiOwotICAvLyBOb3Qgc3VyZSBob3cg
dG8gaGFuZGxlIHVuaWNvZGUuLi4KLSAgaWYgKHN0cm5wYnJrKHZhbHVlLCAiXCJcXFxiXGZcblxy
XHQiLCBsZW5ndGgpID09IE5VTEwgJiYKLSAgICAgICFjb250YWluc0NvbnRyb2xDaGFyYWN0ZXIw
KHZhbHVlLCBsZW5ndGgpKQotICAgIHJldHVybiBzdGQ6OnN0cmluZygiXCIiKSArIHZhbHVlICsg
IlwiIjsKLSAgLy8gV2UgaGF2ZSB0byB3YWxrIHZhbHVlIGFuZCBlc2NhcGUgYW55IHNwZWNpYWwg
Y2hhcmFjdGVycy4KLSAgLy8gQXBwZW5kaW5nIHRvIHN0ZDo6c3RyaW5nIGlzIG5vdCBlZmZpY2ll
bnQsIGJ1dCB0aGlzIHNob3VsZCBiZSByYXJlLgotICAvLyAoTm90ZTogZm9yd2FyZCBzbGFzaGVz
IGFyZSAqbm90KiByYXJlLCBidXQgSSBhbSBub3QgZXNjYXBpbmcgdGhlbS4pCi0gIHN0ZDo6c3Ry
aW5nOjpzaXplX3R5cGUgbWF4c2l6ZSA9Ci0gICAgICBsZW5ndGggKiAyICsgMzsgLy8gYWxsZXNj
YXBlZCtxdW90ZXMrTlVMTAotICBzdGQ6OnN0cmluZyByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNlcnZl
KG1heHNpemUpOyAvLyB0byBhdm9pZCBsb3RzIG9mIG1hbGxvY3MKLSAgcmVzdWx0ICs9ICJcIiI7
Ci0gIGNoYXIgY29uc3QqIGVuZCA9IHZhbHVlICsgbGVuZ3RoOwotICBmb3IgKGNvbnN0IGNoYXIq
IGMgPSB2YWx1ZTsgYyAhPSBlbmQ7ICsrYykgewotICAgIHN3aXRjaCAoKmMpIHsKLSAgICBjYXNl
ICdcIic6Ci0gICAgICByZXN1bHQgKz0gIlxcXCIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAn
XFwnOgotICAgICAgcmVzdWx0ICs9ICJcXFxcIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1xi
JzoKLSAgICAgIHJlc3VsdCArPSAiXFxiIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1xmJzoK
LSAgICAgIHJlc3VsdCArPSAiXFxmIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1xuJzoKLSAg
ICAgIHJlc3VsdCArPSAiXFxuIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1xyJzoKLSAgICAg
IHJlc3VsdCArPSAiXFxyIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1x0JzoKLSAgICAgIHJl
c3VsdCArPSAiXFx0IjsKLSAgICAgIGJyZWFrOwotICAgIC8vIGNhc2UgJy8nOgotICAgIC8vIEV2
ZW4gdGhvdWdoIFwvIGlzIGNvbnNpZGVyZWQgYSBsZWdhbCBlc2NhcGUgaW4gSlNPTiwgYSBiYXJl
Ci0gICAgLy8gc2xhc2ggaXMgYWxzbyBsZWdhbCwgc28gSSBzZWUgbm8gcmVhc29uIHRvIGVzY2Fw
ZSBpdC4KLSAgICAvLyAoSSBob3BlIEkgYW0gbm90IG1pc3VuZGVyc3RhbmRpbmcgc29tZXRoaW5n
LikKLSAgICAvLyBibGVwIG5vdGVzOiBhY3R1YWxseSBlc2NhcGluZyBcLyBtYXkgYmUgdXNlZnVs
IGluIGphdmFzY3JpcHQgdG8gYXZvaWQgPC8KLSAgICAvLyBzZXF1ZW5jZS4KLSAgICAvLyBTaG91
bGQgYWRkIGEgZmxhZyB0byBhbGxvdyB0aGlzIGNvbXBhdGliaWxpdHkgbW9kZSBhbmQgcHJldmVu
dCB0aGlzCi0gICAgLy8gc2VxdWVuY2UgZnJvbSBvY2N1cnJpbmcuCi0gICAgZGVmYXVsdDoKLSAg
ICAgIGlmICgoaXNDb250cm9sQ2hhcmFjdGVyKCpjKSkgfHwgKCpjID09IDApKSB7Ci0gICAgICAg
IHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7Ci0gICAgICAgIG9zcyA8PCAiXFx1IiA8PCBzdGQ6Omhl
eCA8PCBzdGQ6OnVwcGVyY2FzZSA8PCBzdGQ6OnNldGZpbGwoJzAnKQotICAgICAgICAgICAgPDwg
c3RkOjpzZXR3KDQpIDw8IHN0YXRpY19jYXN0PGludD4oKmMpOwotICAgICAgICByZXN1bHQgKz0g
b3NzLnN0cigpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ICs9ICpjOwotICAgICAg
fQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJlc3VsdCArPSAiXCIiOwotICByZXR1cm4g
cmVzdWx0OwotfQotCi0vLyBDbGFzcyBXcml0ZXIKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotV3JpdGVyOjp+V3Jp
dGVyKCkge30KLQotLy8gQ2xhc3MgRmFzdFdyaXRlcgotLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLUZhc3RXcml0
ZXI6OkZhc3RXcml0ZXIoKQotICAgIDogeWFtbENvbXBhdGlibGl0eUVuYWJsZWRfKGZhbHNlKSwg
ZHJvcE51bGxQbGFjZWhvbGRlcnNfKGZhbHNlKSwKLSAgICAgIG9taXRFbmRpbmdMaW5lRmVlZF8o
ZmFsc2UpIHt9Ci0KLXZvaWQgRmFzdFdyaXRlcjo6ZW5hYmxlWUFNTENvbXBhdGliaWxpdHkoKSB7
IHlhbWxDb21wYXRpYmxpdHlFbmFibGVkXyA9IHRydWU7IH0KLQotdm9pZCBGYXN0V3JpdGVyOjpk
cm9wTnVsbFBsYWNlaG9sZGVycygpIHsgZHJvcE51bGxQbGFjZWhvbGRlcnNfID0gdHJ1ZTsgfQot
Ci12b2lkIEZhc3RXcml0ZXI6Om9taXRFbmRpbmdMaW5lRmVlZCgpIHsgb21pdEVuZGluZ0xpbmVG
ZWVkXyA9IHRydWU7IH0KLQotc3RkOjpzdHJpbmcgRmFzdFdyaXRlcjo6d3JpdGUoY29uc3QgVmFs
dWUmIHJvb3QpIHsKLSAgZG9jdW1lbnRfID0gIiI7Ci0gIHdyaXRlVmFsdWUocm9vdCk7Ci0gIGlm
ICghb21pdEVuZGluZ0xpbmVGZWVkXykKLSAgICBkb2N1bWVudF8gKz0gIlxuIjsKLSAgcmV0dXJu
IGRvY3VtZW50XzsKLX0KLQotdm9pZCBGYXN0V3JpdGVyOjp3cml0ZVZhbHVlKGNvbnN0IFZhbHVl
JiB2YWx1ZSkgewotICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgewotICBjYXNlIG51bGxWYWx1ZToK
LSAgICBpZiAoIWRyb3BOdWxsUGxhY2Vob2xkZXJzXykKLSAgICAgIGRvY3VtZW50XyArPSAibnVs
bCI7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgaW50VmFsdWU6Ci0gICAgZG9jdW1lbnRfICs9IHZhbHVl
VG9TdHJpbmcodmFsdWUuYXNMYXJnZXN0SW50KCkpOwotICAgIGJyZWFrOwotICBjYXNlIHVpbnRW
YWx1ZToKLSAgICBkb2N1bWVudF8gKz0gdmFsdWVUb1N0cmluZyh2YWx1ZS5hc0xhcmdlc3RVSW50
KCkpOwotICAgIGJyZWFrOwotICBjYXNlIHJlYWxWYWx1ZToKLSAgICBkb2N1bWVudF8gKz0gdmFs
dWVUb1N0cmluZyh2YWx1ZS5hc0RvdWJsZSgpKTsKLSAgICBicmVhazsKLSAgY2FzZSBzdHJpbmdW
YWx1ZToKLSAgewotICAgIC8vIElzIE5VTEwgcG9zc2libGUgZm9yIHZhbHVlLnN0cmluZ18/Ci0g
ICAgY2hhciBjb25zdCogc3RyOwotICAgIGNoYXIgY29uc3QqIGVuZDsKLSAgICBib29sIG9rID0g
dmFsdWUuZ2V0U3RyaW5nKCZzdHIsICZlbmQpOwotICAgIGlmIChvaykgZG9jdW1lbnRfICs9IHZh
bHVlVG9RdW90ZWRTdHJpbmdOKHN0ciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZC1zdHIpKTsK
LSAgICBicmVhazsKLSAgfQotICBjYXNlIGJvb2xlYW5WYWx1ZToKLSAgICBkb2N1bWVudF8gKz0g
dmFsdWVUb1N0cmluZyh2YWx1ZS5hc0Jvb2woKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgYXJyYXlW
YWx1ZTogewotICAgIGRvY3VtZW50XyArPSAnWyc7Ci0gICAgaW50IHNpemUgPSB2YWx1ZS5zaXpl
KCk7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7ICsraW5kZXgpIHsKLSAg
ICAgIGlmIChpbmRleCA+IDApCi0gICAgICAgIGRvY3VtZW50XyArPSAnLCc7Ci0gICAgICB3cml0
ZVZhbHVlKHZhbHVlW2luZGV4XSk7Ci0gICAgfQotICAgIGRvY3VtZW50XyArPSAnXSc7Ci0gIH0g
YnJlYWs7Ci0gIGNhc2Ugb2JqZWN0VmFsdWU6IHsKLSAgICBWYWx1ZTo6TWVtYmVycyBtZW1iZXJz
KHZhbHVlLmdldE1lbWJlck5hbWVzKCkpOwotICAgIGRvY3VtZW50XyArPSAneyc7Ci0gICAgZm9y
IChWYWx1ZTo6TWVtYmVyczo6aXRlcmF0b3IgaXQgPSBtZW1iZXJzLmJlZ2luKCk7IGl0ICE9IG1l
bWJlcnMuZW5kKCk7Ci0gICAgICAgICArK2l0KSB7Ci0gICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
bmFtZSA9ICppdDsKLSAgICAgIGlmIChpdCAhPSBtZW1iZXJzLmJlZ2luKCkpCi0gICAgICAgIGRv
Y3VtZW50XyArPSAnLCc7Ci0gICAgICBkb2N1bWVudF8gKz0gdmFsdWVUb1F1b3RlZFN0cmluZ04o
bmFtZS5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihuYW1lLmxlbmd0aCgpKSk7Ci0gICAg
ICBkb2N1bWVudF8gKz0geWFtbENvbXBhdGlibGl0eUVuYWJsZWRfID8gIjogIiA6ICI6IjsKLSAg
ICAgIHdyaXRlVmFsdWUodmFsdWVbbmFtZV0pOwotICAgIH0KLSAgICBkb2N1bWVudF8gKz0gJ30n
OwotICB9IGJyZWFrOwotICB9Ci19Ci0KLS8vIENsYXNzIFN0eWxlZFdyaXRlcgotLy8gLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0KLVN0eWxlZFdyaXRlcjo6U3R5bGVkV3JpdGVyKCkKLSAgICA6IHJpZ2h0TWFyZ2luXyg3
NCksIGluZGVudFNpemVfKDMpLCBhZGRDaGlsZFZhbHVlc18oKSB7fQotCi1zdGQ6OnN0cmluZyBT
dHlsZWRXcml0ZXI6OndyaXRlKGNvbnN0IFZhbHVlJiByb290KSB7Ci0gIGRvY3VtZW50XyA9ICIi
OwotICBhZGRDaGlsZFZhbHVlc18gPSBmYWxzZTsKLSAgaW5kZW50U3RyaW5nXyA9ICIiOwotICB3
cml0ZUNvbW1lbnRCZWZvcmVWYWx1ZShyb290KTsKLSAgd3JpdGVWYWx1ZShyb290KTsKLSAgd3Jp
dGVDb21tZW50QWZ0ZXJWYWx1ZU9uU2FtZUxpbmUocm9vdCk7Ci0gIGRvY3VtZW50XyArPSAiXG4i
OwotICByZXR1cm4gZG9jdW1lbnRfOwotfQotCi12b2lkIFN0eWxlZFdyaXRlcjo6d3JpdGVWYWx1
ZShjb25zdCBWYWx1ZSYgdmFsdWUpIHsKLSAgc3dpdGNoICh2YWx1ZS50eXBlKCkpIHsKLSAgY2Fz
ZSBudWxsVmFsdWU6Ci0gICAgcHVzaFZhbHVlKCJudWxsIik7Ci0gICAgYnJlYWs7Ci0gIGNhc2Ug
aW50VmFsdWU6Ci0gICAgcHVzaFZhbHVlKHZhbHVlVG9TdHJpbmcodmFsdWUuYXNMYXJnZXN0SW50
KCkpKTsKLSAgICBicmVhazsKLSAgY2FzZSB1aW50VmFsdWU6Ci0gICAgcHVzaFZhbHVlKHZhbHVl
VG9TdHJpbmcodmFsdWUuYXNMYXJnZXN0VUludCgpKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgcmVh
bFZhbHVlOgotICAgIHB1c2hWYWx1ZSh2YWx1ZVRvU3RyaW5nKHZhbHVlLmFzRG91YmxlKCkpKTsK
LSAgICBicmVhazsKLSAgY2FzZSBzdHJpbmdWYWx1ZToKLSAgewotICAgIC8vIElzIE5VTEwgcG9z
c2libGUgZm9yIHZhbHVlLnN0cmluZ18/Ci0gICAgY2hhciBjb25zdCogc3RyOwotICAgIGNoYXIg
Y29uc3QqIGVuZDsKLSAgICBib29sIG9rID0gdmFsdWUuZ2V0U3RyaW5nKCZzdHIsICZlbmQpOwot
ICAgIGlmIChvaykgcHVzaFZhbHVlKHZhbHVlVG9RdW90ZWRTdHJpbmdOKHN0ciwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGVuZC1zdHIpKSk7Ci0gICAgZWxzZSBwdXNoVmFsdWUoIiIpOwotICAgIGJy
ZWFrOwotICB9Ci0gIGNhc2UgYm9vbGVhblZhbHVlOgotICAgIHB1c2hWYWx1ZSh2YWx1ZVRvU3Ry
aW5nKHZhbHVlLmFzQm9vbCgpKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgYXJyYXlWYWx1ZToKLSAg
ICB3cml0ZUFycmF5VmFsdWUodmFsdWUpOwotICAgIGJyZWFrOwotICBjYXNlIG9iamVjdFZhbHVl
OiB7Ci0gICAgVmFsdWU6Ok1lbWJlcnMgbWVtYmVycyh2YWx1ZS5nZXRNZW1iZXJOYW1lcygpKTsK
LSAgICBpZiAobWVtYmVycy5lbXB0eSgpKQotICAgICAgcHVzaFZhbHVlKCJ7fSIpOwotICAgIGVs
c2UgewotICAgICAgd3JpdGVXaXRoSW5kZW50KCJ7Iik7Ci0gICAgICBpbmRlbnQoKTsKLSAgICAg
IFZhbHVlOjpNZW1iZXJzOjppdGVyYXRvciBpdCA9IG1lbWJlcnMuYmVnaW4oKTsKLSAgICAgIGZv
ciAoOzspIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUgPSAqaXQ7Ci0gICAgICAg
IGNvbnN0IFZhbHVlJiBjaGlsZFZhbHVlID0gdmFsdWVbbmFtZV07Ci0gICAgICAgIHdyaXRlQ29t
bWVudEJlZm9yZVZhbHVlKGNoaWxkVmFsdWUpOwotICAgICAgICB3cml0ZVdpdGhJbmRlbnQodmFs
dWVUb1F1b3RlZFN0cmluZyhuYW1lLmNfc3RyKCkpKTsKLSAgICAgICAgZG9jdW1lbnRfICs9ICIg
OiAiOwotICAgICAgICB3cml0ZVZhbHVlKGNoaWxkVmFsdWUpOwotICAgICAgICBpZiAoKytpdCA9
PSBtZW1iZXJzLmVuZCgpKSB7Ci0gICAgICAgICAgd3JpdGVDb21tZW50QWZ0ZXJWYWx1ZU9uU2Ft
ZUxpbmUoY2hpbGRWYWx1ZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ZG9jdW1lbnRfICs9ICcsJzsKLSAgICAgICAgd3JpdGVDb21tZW50QWZ0ZXJWYWx1ZU9uU2FtZUxp
bmUoY2hpbGRWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICB1bmluZGVudCgpOwotICAgICAgd3JpdGVX
aXRoSW5kZW50KCJ9Iik7Ci0gICAgfQotICB9IGJyZWFrOwotICB9Ci19Ci0KLXZvaWQgU3R5bGVk
V3JpdGVyOjp3cml0ZUFycmF5VmFsdWUoY29uc3QgVmFsdWUmIHZhbHVlKSB7Ci0gIHVuc2lnbmVk
IHNpemUgPSB2YWx1ZS5zaXplKCk7Ci0gIGlmIChzaXplID09IDApCi0gICAgcHVzaFZhbHVlKCJb
XSIpOwotICBlbHNlIHsKLSAgICBib29sIGlzQXJyYXlNdWx0aUxpbmUgPSBpc011bHRpbmVBcnJh
eSh2YWx1ZSk7Ci0gICAgaWYgKGlzQXJyYXlNdWx0aUxpbmUpIHsKLSAgICAgIHdyaXRlV2l0aElu
ZGVudCgiWyIpOwotICAgICAgaW5kZW50KCk7Ci0gICAgICBib29sIGhhc0NoaWxkVmFsdWUgPSAh
Y2hpbGRWYWx1ZXNfLmVtcHR5KCk7Ci0gICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlJiBjaGlsZFZhbHVlID0gdmFsdWVbaW5kZXhd
OwotICAgICAgICB3cml0ZUNvbW1lbnRCZWZvcmVWYWx1ZShjaGlsZFZhbHVlKTsKLSAgICAgICAg
aWYgKGhhc0NoaWxkVmFsdWUpCi0gICAgICAgICAgd3JpdGVXaXRoSW5kZW50KGNoaWxkVmFsdWVz
X1tpbmRleF0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB3cml0ZUluZGVudCgpOwotICAg
ICAgICAgIHdyaXRlVmFsdWUoY2hpbGRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCsr
aW5kZXggPT0gc2l6ZSkgewotICAgICAgICAgIHdyaXRlQ29tbWVudEFmdGVyVmFsdWVPblNhbWVM
aW5lKGNoaWxkVmFsdWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRv
Y3VtZW50XyArPSAnLCc7Ci0gICAgICAgIHdyaXRlQ29tbWVudEFmdGVyVmFsdWVPblNhbWVMaW5l
KGNoaWxkVmFsdWUpOwotICAgICAgfQotICAgICAgdW5pbmRlbnQoKTsKLSAgICAgIHdyaXRlV2l0
aEluZGVudCgiXSIpOwotICAgIH0gZWxzZSAvLyBvdXRwdXQgb24gYSBzaW5nbGUgbGluZQotICAg
IHsKLSAgICAgIGFzc2VydChjaGlsZFZhbHVlc18uc2l6ZSgpID09IHNpemUpOwotICAgICAgZG9j
dW1lbnRfICs9ICJbICI7Ci0gICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBz
aXplOyArK2luZGV4KSB7Ci0gICAgICAgIGlmIChpbmRleCA+IDApCi0gICAgICAgICAgZG9jdW1l
bnRfICs9ICIsICI7Ci0gICAgICAgIGRvY3VtZW50XyArPSBjaGlsZFZhbHVlc19baW5kZXhdOwot
ICAgICAgfQotICAgICAgZG9jdW1lbnRfICs9ICIgXSI7Ci0gICAgfQotICB9Ci19Ci0KLWJvb2wg
U3R5bGVkV3JpdGVyOjppc011bHRpbmVBcnJheShjb25zdCBWYWx1ZSYgdmFsdWUpIHsKLSAgaW50
IHNpemUgPSB2YWx1ZS5zaXplKCk7Ci0gIGJvb2wgaXNNdWx0aUxpbmUgPSBzaXplICogMyA+PSBy
aWdodE1hcmdpbl87Ci0gIGNoaWxkVmFsdWVzXy5jbGVhcigpOwotICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgc2l6ZSAmJiAhaXNNdWx0aUxpbmU7ICsraW5kZXgpIHsKLSAgICBjb25zdCBW
YWx1ZSYgY2hpbGRWYWx1ZSA9IHZhbHVlW2luZGV4XTsKLSAgICBpc011bHRpTGluZSA9ICgoY2hp
bGRWYWx1ZS5pc0FycmF5KCkgfHwgY2hpbGRWYWx1ZS5pc09iamVjdCgpKSAmJgotICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRWYWx1ZS5zaXplKCkgPiAwKTsKLSAgfQotICBpZiAoIWlzTXVs
dGlMaW5lKSAvLyBjaGVjayBpZiBsaW5lIGxlbmd0aCA+IG1heCBsaW5lIGxlbmd0aAotICB7Ci0g
ICAgY2hpbGRWYWx1ZXNfLnJlc2VydmUoc2l6ZSk7Ci0gICAgYWRkQ2hpbGRWYWx1ZXNfID0gdHJ1
ZTsKLSAgICBpbnQgbGluZUxlbmd0aCA9IDQgKyAoc2l6ZSAtIDEpICogMjsgLy8gJ1sgJyArICcs
ICcqbiArICcgXScKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgKytpbmRl
eCkgewotICAgICAgaWYgKGhhc0NvbW1lbnRGb3JWYWx1ZSh2YWx1ZVtpbmRleF0pKSB7Ci0gICAg
ICAgIGlzTXVsdGlMaW5lID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHdyaXRlVmFsdWUodmFsdWVb
aW5kZXhdKTsKLSAgICAgIGxpbmVMZW5ndGggKz0gaW50KGNoaWxkVmFsdWVzX1tpbmRleF0ubGVu
Z3RoKCkpOwotICAgIH0KLSAgICBhZGRDaGlsZFZhbHVlc18gPSBmYWxzZTsKLSAgICBpc011bHRp
TGluZSA9IGlzTXVsdGlMaW5lIHx8IGxpbmVMZW5ndGggPj0gcmlnaHRNYXJnaW5fOwotICB9Ci0g
IHJldHVybiBpc011bHRpTGluZTsKLX0KLQotdm9pZCBTdHlsZWRXcml0ZXI6OnB1c2hWYWx1ZShj
b25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgaWYgKGFkZENoaWxkVmFsdWVzXykKLSAgICBj
aGlsZFZhbHVlc18ucHVzaF9iYWNrKHZhbHVlKTsKLSAgZWxzZQotICAgIGRvY3VtZW50XyArPSB2
YWx1ZTsKLX0KLQotdm9pZCBTdHlsZWRXcml0ZXI6OndyaXRlSW5kZW50KCkgewotICBpZiAoIWRv
Y3VtZW50Xy5lbXB0eSgpKSB7Ci0gICAgY2hhciBsYXN0ID0gZG9jdW1lbnRfW2RvY3VtZW50Xy5s
ZW5ndGgoKSAtIDFdOwotICAgIGlmIChsYXN0ID09ICcgJykgLy8gYWxyZWFkeSBpbmRlbnRlZAot
ICAgICAgcmV0dXJuOwotICAgIGlmIChsYXN0ICE9ICdcbicpIC8vIENvbW1lbnRzIG1heSBhZGQg
bmV3LWxpbmUKLSAgICAgIGRvY3VtZW50XyArPSAnXG4nOwotICB9Ci0gIGRvY3VtZW50XyArPSBp
bmRlbnRTdHJpbmdfOwotfQotCi12b2lkIFN0eWxlZFdyaXRlcjo6d3JpdGVXaXRoSW5kZW50KGNv
bnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICB3cml0ZUluZGVudCgpOwotICBkb2N1bWVudF8g
Kz0gdmFsdWU7Ci19Ci0KLXZvaWQgU3R5bGVkV3JpdGVyOjppbmRlbnQoKSB7IGluZGVudFN0cmlu
Z18gKz0gc3RkOjpzdHJpbmcoaW5kZW50U2l6ZV8sICcgJyk7IH0KLQotdm9pZCBTdHlsZWRXcml0
ZXI6OnVuaW5kZW50KCkgewotICBhc3NlcnQoaW50KGluZGVudFN0cmluZ18uc2l6ZSgpKSA+PSBp
bmRlbnRTaXplXyk7Ci0gIGluZGVudFN0cmluZ18ucmVzaXplKGluZGVudFN0cmluZ18uc2l6ZSgp
IC0gaW5kZW50U2l6ZV8pOwotfQotCi12b2lkIFN0eWxlZFdyaXRlcjo6d3JpdGVDb21tZW50QmVm
b3JlVmFsdWUoY29uc3QgVmFsdWUmIHJvb3QpIHsKLSAgaWYgKCFyb290Lmhhc0NvbW1lbnQoY29t
bWVudEJlZm9yZSkpCi0gICAgcmV0dXJuOwotCi0gIGRvY3VtZW50XyArPSAiXG4iOwotICB3cml0
ZUluZGVudCgpOwotICBjb25zdCBzdGQ6OnN0cmluZyYgY29tbWVudCA9IHJvb3QuZ2V0Q29tbWVu
dChjb21tZW50QmVmb3JlKTsKLSAgc3RkOjpzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBj
b21tZW50LmJlZ2luKCk7Ci0gIHdoaWxlIChpdGVyICE9IGNvbW1lbnQuZW5kKCkpIHsKLSAgICBk
b2N1bWVudF8gKz0gKml0ZXI7Ci0gICAgaWYgKCppdGVyID09ICdcbicgJiYKLSAgICAgICAoaXRl
ciAhPSBjb21tZW50LmVuZCgpICYmICooaXRlciArIDEpID09ICcvJykpCi0gICAgICB3cml0ZUlu
ZGVudCgpOwotICAgICsraXRlcjsKLSAgfQotCi0gIC8vIENvbW1lbnRzIGFyZSBzdHJpcHBlZCBv
ZiB0cmFpbGluZyBuZXdsaW5lcywgc28gYWRkIG9uZSBoZXJlCi0gIGRvY3VtZW50XyArPSAiXG4i
OwotfQotCi12b2lkIFN0eWxlZFdyaXRlcjo6d3JpdGVDb21tZW50QWZ0ZXJWYWx1ZU9uU2FtZUxp
bmUoY29uc3QgVmFsdWUmIHJvb3QpIHsKLSAgaWYgKHJvb3QuaGFzQ29tbWVudChjb21tZW50QWZ0
ZXJPblNhbWVMaW5lKSkKLSAgICBkb2N1bWVudF8gKz0gIiAiICsgcm9vdC5nZXRDb21tZW50KGNv
bW1lbnRBZnRlck9uU2FtZUxpbmUpOwotCi0gIGlmIChyb290Lmhhc0NvbW1lbnQoY29tbWVudEFm
dGVyKSkgewotICAgIGRvY3VtZW50XyArPSAiXG4iOwotICAgIGRvY3VtZW50XyArPSByb290Lmdl
dENvbW1lbnQoY29tbWVudEFmdGVyKTsKLSAgICBkb2N1bWVudF8gKz0gIlxuIjsKLSAgfQotfQot
Ci1ib29sIFN0eWxlZFdyaXRlcjo6aGFzQ29tbWVudEZvclZhbHVlKGNvbnN0IFZhbHVlJiB2YWx1
ZSkgewotICByZXR1cm4gdmFsdWUuaGFzQ29tbWVudChjb21tZW50QmVmb3JlKSB8fAotICAgICAg
ICAgdmFsdWUuaGFzQ29tbWVudChjb21tZW50QWZ0ZXJPblNhbWVMaW5lKSB8fAotICAgICAgICAg
dmFsdWUuaGFzQ29tbWVudChjb21tZW50QWZ0ZXIpOwotfQotCi0vLyBDbGFzcyBTdHlsZWRTdHJl
YW1Xcml0ZXIKLS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1TdHlsZWRTdHJlYW1Xcml0ZXI6OlN0eWxlZFN0cmVh
bVdyaXRlcihzdGQ6OnN0cmluZyBpbmRlbnRhdGlvbikKLSAgICA6IGRvY3VtZW50XyhOVUxMKSwg
cmlnaHRNYXJnaW5fKDc0KSwgaW5kZW50YXRpb25fKGluZGVudGF0aW9uKSwKLSAgICAgIGFkZENo
aWxkVmFsdWVzXygpIHt9Ci0KLXZvaWQgU3R5bGVkU3RyZWFtV3JpdGVyOjp3cml0ZShzdGQ6Om9z
dHJlYW0mIG91dCwgY29uc3QgVmFsdWUmIHJvb3QpIHsKLSAgZG9jdW1lbnRfID0gJm91dDsKLSAg
YWRkQ2hpbGRWYWx1ZXNfID0gZmFsc2U7Ci0gIGluZGVudFN0cmluZ18gPSAiIjsKLSAgaW5kZW50
ZWRfID0gdHJ1ZTsKLSAgd3JpdGVDb21tZW50QmVmb3JlVmFsdWUocm9vdCk7Ci0gIGlmICghaW5k
ZW50ZWRfKSB3cml0ZUluZGVudCgpOwotICBpbmRlbnRlZF8gPSB0cnVlOwotICB3cml0ZVZhbHVl
KHJvb3QpOwotICB3cml0ZUNvbW1lbnRBZnRlclZhbHVlT25TYW1lTGluZShyb290KTsKLSAgKmRv
Y3VtZW50XyA8PCAiXG4iOwotICBkb2N1bWVudF8gPSBOVUxMOyAvLyBGb3JnZXQgdGhlIHN0cmVh
bSwgZm9yIHNhZmV0eS4KLX0KLQotdm9pZCBTdHlsZWRTdHJlYW1Xcml0ZXI6OndyaXRlVmFsdWUo
Y29uc3QgVmFsdWUmIHZhbHVlKSB7Ci0gIHN3aXRjaCAodmFsdWUudHlwZSgpKSB7Ci0gIGNhc2Ug
bnVsbFZhbHVlOgotICAgIHB1c2hWYWx1ZSgibnVsbCIpOwotICAgIGJyZWFrOwotICBjYXNlIGlu
dFZhbHVlOgotICAgIHB1c2hWYWx1ZSh2YWx1ZVRvU3RyaW5nKHZhbHVlLmFzTGFyZ2VzdEludCgp
KSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgdWludFZhbHVlOgotICAgIHB1c2hWYWx1ZSh2YWx1ZVRv
U3RyaW5nKHZhbHVlLmFzTGFyZ2VzdFVJbnQoKSkpOwotICAgIGJyZWFrOwotICBjYXNlIHJlYWxW
YWx1ZToKLSAgICBwdXNoVmFsdWUodmFsdWVUb1N0cmluZyh2YWx1ZS5hc0RvdWJsZSgpKSk7Ci0g
ICAgYnJlYWs7Ci0gIGNhc2Ugc3RyaW5nVmFsdWU6Ci0gIHsKLSAgICAvLyBJcyBOVUxMIHBvc3Np
YmxlIGZvciB2YWx1ZS5zdHJpbmdfPwotICAgIGNoYXIgY29uc3QqIHN0cjsKLSAgICBjaGFyIGNv
bnN0KiBlbmQ7Ci0gICAgYm9vbCBvayA9IHZhbHVlLmdldFN0cmluZygmc3RyLCAmZW5kKTsKLSAg
ICBpZiAob2spIHB1c2hWYWx1ZSh2YWx1ZVRvUXVvdGVkU3RyaW5nTihzdHIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihlbmQtc3RyKSkpOwotICAgIGVsc2UgcHVzaFZhbHVlKCIiKTsKLSAgICBicmVh
azsKLSAgfQotICBjYXNlIGJvb2xlYW5WYWx1ZToKLSAgICBwdXNoVmFsdWUodmFsdWVUb1N0cmlu
Zyh2YWx1ZS5hc0Jvb2woKSkpOwotICAgIGJyZWFrOwotICBjYXNlIGFycmF5VmFsdWU6Ci0gICAg
d3JpdGVBcnJheVZhbHVlKHZhbHVlKTsKLSAgICBicmVhazsKLSAgY2FzZSBvYmplY3RWYWx1ZTog
ewotICAgIFZhbHVlOjpNZW1iZXJzIG1lbWJlcnModmFsdWUuZ2V0TWVtYmVyTmFtZXMoKSk7Ci0g
ICAgaWYgKG1lbWJlcnMuZW1wdHkoKSkKLSAgICAgIHB1c2hWYWx1ZSgie30iKTsKLSAgICBlbHNl
IHsKLSAgICAgIHdyaXRlV2l0aEluZGVudCgieyIpOwotICAgICAgaW5kZW50KCk7Ci0gICAgICBW
YWx1ZTo6TWVtYmVyczo6aXRlcmF0b3IgaXQgPSBtZW1iZXJzLmJlZ2luKCk7Ci0gICAgICBmb3Ig
KDs7KSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lID0gKml0OwotICAgICAgICBj
b25zdCBWYWx1ZSYgY2hpbGRWYWx1ZSA9IHZhbHVlW25hbWVdOwotICAgICAgICB3cml0ZUNvbW1l
bnRCZWZvcmVWYWx1ZShjaGlsZFZhbHVlKTsKLSAgICAgICAgd3JpdGVXaXRoSW5kZW50KHZhbHVl
VG9RdW90ZWRTdHJpbmcobmFtZS5jX3N0cigpKSk7Ci0gICAgICAgICpkb2N1bWVudF8gPDwgIiA6
ICI7Ci0gICAgICAgIHdyaXRlVmFsdWUoY2hpbGRWYWx1ZSk7Ci0gICAgICAgIGlmICgrK2l0ID09
IG1lbWJlcnMuZW5kKCkpIHsKLSAgICAgICAgICB3cml0ZUNvbW1lbnRBZnRlclZhbHVlT25TYW1l
TGluZShjaGlsZFZhbHVlKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAq
ZG9jdW1lbnRfIDw8ICIsIjsKLSAgICAgICAgd3JpdGVDb21tZW50QWZ0ZXJWYWx1ZU9uU2FtZUxp
bmUoY2hpbGRWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICB1bmluZGVudCgpOwotICAgICAgd3JpdGVX
aXRoSW5kZW50KCJ9Iik7Ci0gICAgfQotICB9IGJyZWFrOwotICB9Ci19Ci0KLXZvaWQgU3R5bGVk
U3RyZWFtV3JpdGVyOjp3cml0ZUFycmF5VmFsdWUoY29uc3QgVmFsdWUmIHZhbHVlKSB7Ci0gIHVu
c2lnbmVkIHNpemUgPSB2YWx1ZS5zaXplKCk7Ci0gIGlmIChzaXplID09IDApCi0gICAgcHVzaFZh
bHVlKCJbXSIpOwotICBlbHNlIHsKLSAgICBib29sIGlzQXJyYXlNdWx0aUxpbmUgPSBpc011bHRp
bmVBcnJheSh2YWx1ZSk7Ci0gICAgaWYgKGlzQXJyYXlNdWx0aUxpbmUpIHsKLSAgICAgIHdyaXRl
V2l0aEluZGVudCgiWyIpOwotICAgICAgaW5kZW50KCk7Ci0gICAgICBib29sIGhhc0NoaWxkVmFs
dWUgPSAhY2hpbGRWYWx1ZXNfLmVtcHR5KCk7Ci0gICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0g
ICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlJiBjaGlsZFZhbHVlID0gdmFsdWVb
aW5kZXhdOwotICAgICAgICB3cml0ZUNvbW1lbnRCZWZvcmVWYWx1ZShjaGlsZFZhbHVlKTsKLSAg
ICAgICAgaWYgKGhhc0NoaWxkVmFsdWUpCi0gICAgICAgICAgd3JpdGVXaXRoSW5kZW50KGNoaWxk
VmFsdWVzX1tpbmRleF0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBpZiAoIWluZGVudGVk
Xykgd3JpdGVJbmRlbnQoKTsKLSAgICAgICAgICBpbmRlbnRlZF8gPSB0cnVlOwotICAgICAgICAg
IHdyaXRlVmFsdWUoY2hpbGRWYWx1ZSk7Ci0gICAgICAgICAgaW5kZW50ZWRfID0gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKCsraW5kZXggPT0gc2l6ZSkgewotICAgICAgICAgIHdyaXRl
Q29tbWVudEFmdGVyVmFsdWVPblNhbWVMaW5lKGNoaWxkVmFsdWUpOwotICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgICpkb2N1bWVudF8gPDwgIiwiOwotICAgICAgICB3cml0ZUNv
bW1lbnRBZnRlclZhbHVlT25TYW1lTGluZShjaGlsZFZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHVu
aW5kZW50KCk7Ci0gICAgICB3cml0ZVdpdGhJbmRlbnQoIl0iKTsKLSAgICB9IGVsc2UgLy8gb3V0
cHV0IG9uIGEgc2luZ2xlIGxpbmUKLSAgICB7Ci0gICAgICBhc3NlcnQoY2hpbGRWYWx1ZXNfLnNp
emUoKSA9PSBzaXplKTsKLSAgICAgICpkb2N1bWVudF8gPDwgIlsgIjsKLSAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKGlu
ZGV4ID4gMCkKLSAgICAgICAgICAqZG9jdW1lbnRfIDw8ICIsICI7Ci0gICAgICAgICpkb2N1bWVu
dF8gPDwgY2hpbGRWYWx1ZXNfW2luZGV4XTsKLSAgICAgIH0KLSAgICAgICpkb2N1bWVudF8gPDwg
IiBdIjsKLSAgICB9Ci0gIH0KLX0KLQotYm9vbCBTdHlsZWRTdHJlYW1Xcml0ZXI6OmlzTXVsdGlu
ZUFycmF5KGNvbnN0IFZhbHVlJiB2YWx1ZSkgewotICBpbnQgc2l6ZSA9IHZhbHVlLnNpemUoKTsK
LSAgYm9vbCBpc011bHRpTGluZSA9IHNpemUgKiAzID49IHJpZ2h0TWFyZ2luXzsKLSAgY2hpbGRW
YWx1ZXNfLmNsZWFyKCk7Ci0gIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzaXplICYmICFp
c011bHRpTGluZTsgKytpbmRleCkgewotICAgIGNvbnN0IFZhbHVlJiBjaGlsZFZhbHVlID0gdmFs
dWVbaW5kZXhdOwotICAgIGlzTXVsdGlMaW5lID0gKChjaGlsZFZhbHVlLmlzQXJyYXkoKSB8fCBj
aGlsZFZhbHVlLmlzT2JqZWN0KCkpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFZh
bHVlLnNpemUoKSA+IDApOwotICB9Ci0gIGlmICghaXNNdWx0aUxpbmUpIC8vIGNoZWNrIGlmIGxp
bmUgbGVuZ3RoID4gbWF4IGxpbmUgbGVuZ3RoCi0gIHsKLSAgICBjaGlsZFZhbHVlc18ucmVzZXJ2
ZShzaXplKTsKLSAgICBhZGRDaGlsZFZhbHVlc18gPSB0cnVlOwotICAgIGludCBsaW5lTGVuZ3Ro
ID0gNCArIChzaXplIC0gMSkgKiAyOyAvLyAnWyAnICsgJywgJypuICsgJyBdJwotICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyArK2luZGV4KSB7Ci0gICAgICBpZiAoaGFzQ29t
bWVudEZvclZhbHVlKHZhbHVlW2luZGV4XSkpIHsKLSAgICAgICAgaXNNdWx0aUxpbmUgPSB0cnVl
OwotICAgICAgfQotICAgICAgd3JpdGVWYWx1ZSh2YWx1ZVtpbmRleF0pOwotICAgICAgbGluZUxl
bmd0aCArPSBpbnQoY2hpbGRWYWx1ZXNfW2luZGV4XS5sZW5ndGgoKSk7Ci0gICAgfQotICAgIGFk
ZENoaWxkVmFsdWVzXyA9IGZhbHNlOwotICAgIGlzTXVsdGlMaW5lID0gaXNNdWx0aUxpbmUgfHwg
bGluZUxlbmd0aCA+PSByaWdodE1hcmdpbl87Ci0gIH0KLSAgcmV0dXJuIGlzTXVsdGlMaW5lOwot
fQotCi12b2lkIFN0eWxlZFN0cmVhbVdyaXRlcjo6cHVzaFZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5n
JiB2YWx1ZSkgewotICBpZiAoYWRkQ2hpbGRWYWx1ZXNfKQotICAgIGNoaWxkVmFsdWVzXy5wdXNo
X2JhY2sodmFsdWUpOwotICBlbHNlCi0gICAgKmRvY3VtZW50XyA8PCB2YWx1ZTsKLX0KLQotdm9p
ZCBTdHlsZWRTdHJlYW1Xcml0ZXI6OndyaXRlSW5kZW50KCkgewotICAvLyBibGVwIGludGVuZGVk
IHRoaXMgdG8gbG9vayBhdCB0aGUgc28tZmFyLXdyaXR0ZW4gc3RyaW5nCi0gIC8vIHRvIGRldGVy
bWluZSB3aGV0aGVyIHdlIGFyZSBhbHJlYWR5IGluZGVudGVkLCBidXQKLSAgLy8gd2l0aCBhIHN0
cmVhbSB3ZSBjYW5ub3QgZG8gdGhhdC4gU28gd2UgcmVseSBvbiBzb21lIHNhdmVkIHN0YXRlLgot
ICAvLyBUaGUgY2FsbGVyIGNoZWNrcyBpbmRlbnRlZF8uCi0gICpkb2N1bWVudF8gPDwgJ1xuJyA8
PCBpbmRlbnRTdHJpbmdfOwotfQotCi12b2lkIFN0eWxlZFN0cmVhbVdyaXRlcjo6d3JpdGVXaXRo
SW5kZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBpZiAoIWluZGVudGVkXykgd3Jp
dGVJbmRlbnQoKTsKLSAgKmRvY3VtZW50XyA8PCB2YWx1ZTsKLSAgaW5kZW50ZWRfID0gZmFsc2U7
Ci19Ci0KLXZvaWQgU3R5bGVkU3RyZWFtV3JpdGVyOjppbmRlbnQoKSB7IGluZGVudFN0cmluZ18g
Kz0gaW5kZW50YXRpb25fOyB9Ci0KLXZvaWQgU3R5bGVkU3RyZWFtV3JpdGVyOjp1bmluZGVudCgp
IHsKLSAgYXNzZXJ0KGluZGVudFN0cmluZ18uc2l6ZSgpID49IGluZGVudGF0aW9uXy5zaXplKCkp
OwotICBpbmRlbnRTdHJpbmdfLnJlc2l6ZShpbmRlbnRTdHJpbmdfLnNpemUoKSAtIGluZGVudGF0
aW9uXy5zaXplKCkpOwotfQotCi12b2lkIFN0eWxlZFN0cmVhbVdyaXRlcjo6d3JpdGVDb21tZW50
QmVmb3JlVmFsdWUoY29uc3QgVmFsdWUmIHJvb3QpIHsKLSAgaWYgKCFyb290Lmhhc0NvbW1lbnQo
Y29tbWVudEJlZm9yZSkpCi0gICAgcmV0dXJuOwotCi0gIGlmICghaW5kZW50ZWRfKSB3cml0ZUlu
ZGVudCgpOwotICBjb25zdCBzdGQ6OnN0cmluZyYgY29tbWVudCA9IHJvb3QuZ2V0Q29tbWVudChj
b21tZW50QmVmb3JlKTsKLSAgc3RkOjpzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBjb21t
ZW50LmJlZ2luKCk7Ci0gIHdoaWxlIChpdGVyICE9IGNvbW1lbnQuZW5kKCkpIHsKLSAgICAqZG9j
dW1lbnRfIDw8ICppdGVyOwotICAgIGlmICgqaXRlciA9PSAnXG4nICYmCi0gICAgICAgKGl0ZXIg
IT0gY29tbWVudC5lbmQoKSAmJiAqKGl0ZXIgKyAxKSA9PSAnLycpKQotICAgICAgLy8gd3JpdGVJ
bmRlbnQoKTsgIC8vIHdvdWxkIGluY2x1ZGUgbmV3bGluZQotICAgICAgKmRvY3VtZW50XyA8PCBp
bmRlbnRTdHJpbmdfOwotICAgICsraXRlcjsKLSAgfQotICBpbmRlbnRlZF8gPSBmYWxzZTsKLX0K
LQotdm9pZCBTdHlsZWRTdHJlYW1Xcml0ZXI6OndyaXRlQ29tbWVudEFmdGVyVmFsdWVPblNhbWVM
aW5lKGNvbnN0IFZhbHVlJiByb290KSB7Ci0gIGlmIChyb290Lmhhc0NvbW1lbnQoY29tbWVudEFm
dGVyT25TYW1lTGluZSkpCi0gICAgKmRvY3VtZW50XyA8PCAnICcgPDwgcm9vdC5nZXRDb21tZW50
KGNvbW1lbnRBZnRlck9uU2FtZUxpbmUpOwotCi0gIGlmIChyb290Lmhhc0NvbW1lbnQoY29tbWVu
dEFmdGVyKSkgewotICAgIHdyaXRlSW5kZW50KCk7Ci0gICAgKmRvY3VtZW50XyA8PCByb290Lmdl
dENvbW1lbnQoY29tbWVudEFmdGVyKTsKLSAgfQotICBpbmRlbnRlZF8gPSBmYWxzZTsKLX0KLQot
Ym9vbCBTdHlsZWRTdHJlYW1Xcml0ZXI6Omhhc0NvbW1lbnRGb3JWYWx1ZShjb25zdCBWYWx1ZSYg
dmFsdWUpIHsKLSAgcmV0dXJuIHZhbHVlLmhhc0NvbW1lbnQoY29tbWVudEJlZm9yZSkgfHwKLSAg
ICAgICAgIHZhbHVlLmhhc0NvbW1lbnQoY29tbWVudEFmdGVyT25TYW1lTGluZSkgfHwKLSAgICAg
ICAgIHZhbHVlLmhhc0NvbW1lbnQoY29tbWVudEFmdGVyKTsKLX0KLQotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vIEJ1aWx0U3R5bGVkU3RyZWFtV3JpdGVyCi0KLS8vLyBTY29wZWQgZW51
bXMgYXJlIG5vdCBhdmFpbGFibGUgdW50aWwgQysrMTEuCi1zdHJ1Y3QgQ29tbWVudFN0eWxlIHsK
LSAgLy8vIERlY2lkZSB3aGV0aGVyIHRvIHdyaXRlIGNvbW1lbnRzLgotICBlbnVtIEVudW0gewot
ICAgIE5vbmUsICAvLy88IERyb3AgYWxsIGNvbW1lbnRzLgotICAgIE1vc3QsICAvLy88IFJlY292
ZXIgb2RkIGJlaGF2aW9yIG9mIHByZXZpb3VzIHZlcnNpb25zIChub3QgaW1wbGVtZW50ZWQgeWV0
KS4KLSAgICBBbGwgIC8vLzwgS2VlcCBhbGwgY29tbWVudHMuCi0gIH07Ci19OwotCi1zdHJ1Y3Qg
QnVpbHRTdHlsZWRTdHJlYW1Xcml0ZXIgOiBwdWJsaWMgU3RyZWFtV3JpdGVyCi17Ci0gIEJ1aWx0
U3R5bGVkU3RyZWFtV3JpdGVyKAotICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGluZGVudGF0aW9u
LAotICAgICAgQ29tbWVudFN0eWxlOjpFbnVtIGNzLAotICAgICAgc3RkOjpzdHJpbmcgY29uc3Qm
IGNvbG9uU3ltYm9sLAotICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG51bGxTeW1ib2wsCi0gICAg
ICBzdGQ6OnN0cmluZyBjb25zdCYgZW5kaW5nTGluZUZlZWRTeW1ib2wsCi0gICAgICBib29sIHVz
ZVNwZWNpYWxGbG9hdHMsCi0gICAgICB1bnNpZ25lZCBpbnQgcHJlY2lzaW9uKTsKLSAgaW50IHdy
aXRlKFZhbHVlIGNvbnN0JiByb290LCBzdGQ6Om9zdHJlYW0qIHNvdXQpIG92ZXJyaWRlOwotcHJp
dmF0ZToKLSAgdm9pZCB3cml0ZVZhbHVlKFZhbHVlIGNvbnN0JiB2YWx1ZSk7Ci0gIHZvaWQgd3Jp
dGVBcnJheVZhbHVlKFZhbHVlIGNvbnN0JiB2YWx1ZSk7Ci0gIGJvb2wgaXNNdWx0aW5lQXJyYXko
VmFsdWUgY29uc3QmIHZhbHVlKTsKLSAgdm9pZCBwdXNoVmFsdWUoc3RkOjpzdHJpbmcgY29uc3Qm
IHZhbHVlKTsKLSAgdm9pZCB3cml0ZUluZGVudCgpOwotICB2b2lkIHdyaXRlV2l0aEluZGVudChz
dGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpOwotICB2b2lkIGluZGVudCgpOwotICB2b2lkIHVuaW5k
ZW50KCk7Ci0gIHZvaWQgd3JpdGVDb21tZW50QmVmb3JlVmFsdWUoVmFsdWUgY29uc3QmIHJvb3Qp
OwotICB2b2lkIHdyaXRlQ29tbWVudEFmdGVyVmFsdWVPblNhbWVMaW5lKFZhbHVlIGNvbnN0JiBy
b290KTsKLSAgc3RhdGljIGJvb2wgaGFzQ29tbWVudEZvclZhbHVlKGNvbnN0IFZhbHVlJiB2YWx1
ZSk7Ci0KLSAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ2hpbGRWYWx1ZXM7Ci0K
LSAgQ2hpbGRWYWx1ZXMgY2hpbGRWYWx1ZXNfOwotICBzdGQ6OnN0cmluZyBpbmRlbnRTdHJpbmdf
OwotICBpbnQgcmlnaHRNYXJnaW5fOwotICBzdGQ6OnN0cmluZyBpbmRlbnRhdGlvbl87Ci0gIENv
bW1lbnRTdHlsZTo6RW51bSBjc187Ci0gIHN0ZDo6c3RyaW5nIGNvbG9uU3ltYm9sXzsKLSAgc3Rk
OjpzdHJpbmcgbnVsbFN5bWJvbF87Ci0gIHN0ZDo6c3RyaW5nIGVuZGluZ0xpbmVGZWVkU3ltYm9s
XzsKLSAgYm9vbCBhZGRDaGlsZFZhbHVlc18gOiAxOwotICBib29sIGluZGVudGVkXyA6IDE7Ci0g
IGJvb2wgdXNlU3BlY2lhbEZsb2F0c18gOiAxOwotICB1bnNpZ25lZCBpbnQgcHJlY2lzaW9uXzsK
LX07Ci1CdWlsdFN0eWxlZFN0cmVhbVdyaXRlcjo6QnVpbHRTdHlsZWRTdHJlYW1Xcml0ZXIoCi0g
ICAgICBzdGQ6OnN0cmluZyBjb25zdCYgaW5kZW50YXRpb24sCi0gICAgICBDb21tZW50U3R5bGU6
OkVudW0gY3MsCi0gICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29sb25TeW1ib2wsCi0gICAgICBz
dGQ6OnN0cmluZyBjb25zdCYgbnVsbFN5bWJvbCwKLSAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBl
bmRpbmdMaW5lRmVlZFN5bWJvbCwKLSAgICAgIGJvb2wgdXNlU3BlY2lhbEZsb2F0cywKLSAgICAg
IHVuc2lnbmVkIGludCBwcmVjaXNpb24pCi0gIDogcmlnaHRNYXJnaW5fKDc0KQotICAsIGluZGVu
dGF0aW9uXyhpbmRlbnRhdGlvbikKLSAgLCBjc18oY3MpCi0gICwgY29sb25TeW1ib2xfKGNvbG9u
U3ltYm9sKQotICAsIG51bGxTeW1ib2xfKG51bGxTeW1ib2wpCi0gICwgZW5kaW5nTGluZUZlZWRT
eW1ib2xfKGVuZGluZ0xpbmVGZWVkU3ltYm9sKQotICAsIGFkZENoaWxkVmFsdWVzXyhmYWxzZSkK
LSAgLCBpbmRlbnRlZF8oZmFsc2UpCi0gICwgdXNlU3BlY2lhbEZsb2F0c18odXNlU3BlY2lhbEZs
b2F0cykKLSAgLCBwcmVjaXNpb25fKHByZWNpc2lvbikKLXsKLX0KLWludCBCdWlsdFN0eWxlZFN0
cmVhbVdyaXRlcjo6d3JpdGUoVmFsdWUgY29uc3QmIHJvb3QsIHN0ZDo6b3N0cmVhbSogc291dCkK
LXsKLSAgc291dF8gPSBzb3V0OwotICBhZGRDaGlsZFZhbHVlc18gPSBmYWxzZTsKLSAgaW5kZW50
ZWRfID0gdHJ1ZTsKLSAgaW5kZW50U3RyaW5nXyA9ICIiOwotICB3cml0ZUNvbW1lbnRCZWZvcmVW
YWx1ZShyb290KTsKLSAgaWYgKCFpbmRlbnRlZF8pIHdyaXRlSW5kZW50KCk7Ci0gIGluZGVudGVk
XyA9IHRydWU7Ci0gIHdyaXRlVmFsdWUocm9vdCk7Ci0gIHdyaXRlQ29tbWVudEFmdGVyVmFsdWVP
blNhbWVMaW5lKHJvb3QpOwotICAqc291dF8gPDwgZW5kaW5nTGluZUZlZWRTeW1ib2xfOwotICBz
b3V0XyA9IE5VTEw7Ci0gIHJldHVybiAwOwotfQotdm9pZCBCdWlsdFN0eWxlZFN0cmVhbVdyaXRl
cjo6d3JpdGVWYWx1ZShWYWx1ZSBjb25zdCYgdmFsdWUpIHsKLSAgc3dpdGNoICh2YWx1ZS50eXBl
KCkpIHsKLSAgY2FzZSBudWxsVmFsdWU6Ci0gICAgcHVzaFZhbHVlKG51bGxTeW1ib2xfKTsKLSAg
ICBicmVhazsKLSAgY2FzZSBpbnRWYWx1ZToKLSAgICBwdXNoVmFsdWUodmFsdWVUb1N0cmluZyh2
YWx1ZS5hc0xhcmdlc3RJbnQoKSkpOwotICAgIGJyZWFrOwotICBjYXNlIHVpbnRWYWx1ZToKLSAg
ICBwdXNoVmFsdWUodmFsdWVUb1N0cmluZyh2YWx1ZS5hc0xhcmdlc3RVSW50KCkpKTsKLSAgICBi
cmVhazsKLSAgY2FzZSByZWFsVmFsdWU6Ci0gICAgcHVzaFZhbHVlKHZhbHVlVG9TdHJpbmcodmFs
dWUuYXNEb3VibGUoKSwgdXNlU3BlY2lhbEZsb2F0c18sIHByZWNpc2lvbl8pKTsKLSAgICBicmVh
azsKLSAgY2FzZSBzdHJpbmdWYWx1ZToKLSAgewotICAgIC8vIElzIE5VTEwgaXMgcG9zc2libGUg
Zm9yIHZhbHVlLnN0cmluZ18/Ci0gICAgY2hhciBjb25zdCogc3RyOwotICAgIGNoYXIgY29uc3Qq
IGVuZDsKLSAgICBib29sIG9rID0gdmFsdWUuZ2V0U3RyaW5nKCZzdHIsICZlbmQpOwotICAgIGlm
IChvaykgcHVzaFZhbHVlKHZhbHVlVG9RdW90ZWRTdHJpbmdOKHN0ciwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGVuZC1zdHIpKSk7Ci0gICAgZWxzZSBwdXNoVmFsdWUoIiIpOwotICAgIGJyZWFrOwot
ICB9Ci0gIGNhc2UgYm9vbGVhblZhbHVlOgotICAgIHB1c2hWYWx1ZSh2YWx1ZVRvU3RyaW5nKHZh
bHVlLmFzQm9vbCgpKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgYXJyYXlWYWx1ZToKLSAgICB3cml0
ZUFycmF5VmFsdWUodmFsdWUpOwotICAgIGJyZWFrOwotICBjYXNlIG9iamVjdFZhbHVlOiB7Ci0g
ICAgVmFsdWU6Ok1lbWJlcnMgbWVtYmVycyh2YWx1ZS5nZXRNZW1iZXJOYW1lcygpKTsKLSAgICBp
ZiAobWVtYmVycy5lbXB0eSgpKQotICAgICAgcHVzaFZhbHVlKCJ7fSIpOwotICAgIGVsc2Ugewot
ICAgICAgd3JpdGVXaXRoSW5kZW50KCJ7Iik7Ci0gICAgICBpbmRlbnQoKTsKLSAgICAgIFZhbHVl
OjpNZW1iZXJzOjppdGVyYXRvciBpdCA9IG1lbWJlcnMuYmVnaW4oKTsKLSAgICAgIGZvciAoOzsp
IHsKLSAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgPSAqaXQ7Ci0gICAgICAgIFZhbHVl
IGNvbnN0JiBjaGlsZFZhbHVlID0gdmFsdWVbbmFtZV07Ci0gICAgICAgIHdyaXRlQ29tbWVudEJl
Zm9yZVZhbHVlKGNoaWxkVmFsdWUpOwotICAgICAgICB3cml0ZVdpdGhJbmRlbnQodmFsdWVUb1F1
b3RlZFN0cmluZ04obmFtZS5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihuYW1lLmxlbmd0
aCgpKSkpOwotICAgICAgICAqc291dF8gPDwgY29sb25TeW1ib2xfOwotICAgICAgICB3cml0ZVZh
bHVlKGNoaWxkVmFsdWUpOwotICAgICAgICBpZiAoKytpdCA9PSBtZW1iZXJzLmVuZCgpKSB7Ci0g
ICAgICAgICAgd3JpdGVDb21tZW50QWZ0ZXJWYWx1ZU9uU2FtZUxpbmUoY2hpbGRWYWx1ZSk7Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgKnNvdXRfIDw8ICIsIjsKLSAgICAg
ICAgd3JpdGVDb21tZW50QWZ0ZXJWYWx1ZU9uU2FtZUxpbmUoY2hpbGRWYWx1ZSk7Ci0gICAgICB9
Ci0gICAgICB1bmluZGVudCgpOwotICAgICAgd3JpdGVXaXRoSW5kZW50KCJ9Iik7Ci0gICAgfQot
ICB9IGJyZWFrOwotICB9Ci19Ci0KLXZvaWQgQnVpbHRTdHlsZWRTdHJlYW1Xcml0ZXI6OndyaXRl
QXJyYXlWYWx1ZShWYWx1ZSBjb25zdCYgdmFsdWUpIHsKLSAgdW5zaWduZWQgc2l6ZSA9IHZhbHVl
LnNpemUoKTsKLSAgaWYgKHNpemUgPT0gMCkKLSAgICBwdXNoVmFsdWUoIltdIik7Ci0gIGVsc2Ug
ewotICAgIGJvb2wgaXNNdWx0aUxpbmUgPSAoY3NfID09IENvbW1lbnRTdHlsZTo6QWxsKSB8fCBp
c011bHRpbmVBcnJheSh2YWx1ZSk7Ci0gICAgaWYgKGlzTXVsdGlMaW5lKSB7Ci0gICAgICB3cml0
ZVdpdGhJbmRlbnQoIlsiKTsKLSAgICAgIGluZGVudCgpOwotICAgICAgYm9vbCBoYXNDaGlsZFZh
bHVlID0gIWNoaWxkVmFsdWVzXy5lbXB0eSgpOwotICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwot
ICAgICAgZm9yICg7OykgewotICAgICAgICBWYWx1ZSBjb25zdCYgY2hpbGRWYWx1ZSA9IHZhbHVl
W2luZGV4XTsKLSAgICAgICAgd3JpdGVDb21tZW50QmVmb3JlVmFsdWUoY2hpbGRWYWx1ZSk7Ci0g
ICAgICAgIGlmIChoYXNDaGlsZFZhbHVlKQotICAgICAgICAgIHdyaXRlV2l0aEluZGVudChjaGls
ZFZhbHVlc19baW5kZXhdKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgaWYgKCFpbmRlbnRl
ZF8pIHdyaXRlSW5kZW50KCk7Ci0gICAgICAgICAgaW5kZW50ZWRfID0gdHJ1ZTsKLSAgICAgICAg
ICB3cml0ZVZhbHVlKGNoaWxkVmFsdWUpOwotICAgICAgICAgIGluZGVudGVkXyA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICgrK2luZGV4ID09IHNpemUpIHsKLSAgICAgICAgICB3cml0
ZUNvbW1lbnRBZnRlclZhbHVlT25TYW1lTGluZShjaGlsZFZhbHVlKTsKLSAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAqc291dF8gPDwgIiwiOwotICAgICAgICB3cml0ZUNvbW1l
bnRBZnRlclZhbHVlT25TYW1lTGluZShjaGlsZFZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHVuaW5k
ZW50KCk7Ci0gICAgICB3cml0ZVdpdGhJbmRlbnQoIl0iKTsKLSAgICB9IGVsc2UgLy8gb3V0cHV0
IG9uIGEgc2luZ2xlIGxpbmUKLSAgICB7Ci0gICAgICBhc3NlcnQoY2hpbGRWYWx1ZXNfLnNpemUo
KSA9PSBzaXplKTsKLSAgICAgICpzb3V0XyA8PCAiWyI7Ci0gICAgICBpZiAoIWluZGVudGF0aW9u
Xy5lbXB0eSgpKSAqc291dF8gPDwgIiAiOwotICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgc2l6ZTsgKytpbmRleCkgewotICAgICAgICBpZiAoaW5kZXggPiAwKQotICAgICAg
ICAgICpzb3V0XyA8PCAiLCAiOwotICAgICAgICAqc291dF8gPDwgY2hpbGRWYWx1ZXNfW2luZGV4
XTsKLSAgICAgIH0KLSAgICAgIGlmICghaW5kZW50YXRpb25fLmVtcHR5KCkpICpzb3V0XyA8PCAi
ICI7Ci0gICAgICAqc291dF8gPDwgIl0iOwotICAgIH0KLSAgfQotfQotCi1ib29sIEJ1aWx0U3R5
bGVkU3RyZWFtV3JpdGVyOjppc011bHRpbmVBcnJheShWYWx1ZSBjb25zdCYgdmFsdWUpIHsKLSAg
aW50IHNpemUgPSB2YWx1ZS5zaXplKCk7Ci0gIGJvb2wgaXNNdWx0aUxpbmUgPSBzaXplICogMyA+
PSByaWdodE1hcmdpbl87Ci0gIGNoaWxkVmFsdWVzXy5jbGVhcigpOwotICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgc2l6ZSAmJiAhaXNNdWx0aUxpbmU7ICsraW5kZXgpIHsKLSAgICBWYWx1
ZSBjb25zdCYgY2hpbGRWYWx1ZSA9IHZhbHVlW2luZGV4XTsKLSAgICBpc011bHRpTGluZSA9ICgo
Y2hpbGRWYWx1ZS5pc0FycmF5KCkgfHwgY2hpbGRWYWx1ZS5pc09iamVjdCgpKSAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGRWYWx1ZS5zaXplKCkgPiAwKTsKLSAgfQotICBpZiAoIWlz
TXVsdGlMaW5lKSAvLyBjaGVjayBpZiBsaW5lIGxlbmd0aCA+IG1heCBsaW5lIGxlbmd0aAotICB7
Ci0gICAgY2hpbGRWYWx1ZXNfLnJlc2VydmUoc2l6ZSk7Ci0gICAgYWRkQ2hpbGRWYWx1ZXNfID0g
dHJ1ZTsKLSAgICBpbnQgbGluZUxlbmd0aCA9IDQgKyAoc2l6ZSAtIDEpICogMjsgLy8gJ1sgJyAr
ICcsICcqbiArICcgXScKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgKytp
bmRleCkgewotICAgICAgaWYgKGhhc0NvbW1lbnRGb3JWYWx1ZSh2YWx1ZVtpbmRleF0pKSB7Ci0g
ICAgICAgIGlzTXVsdGlMaW5lID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHdyaXRlVmFsdWUodmFs
dWVbaW5kZXhdKTsKLSAgICAgIGxpbmVMZW5ndGggKz0gaW50KGNoaWxkVmFsdWVzX1tpbmRleF0u
bGVuZ3RoKCkpOwotICAgIH0KLSAgICBhZGRDaGlsZFZhbHVlc18gPSBmYWxzZTsKLSAgICBpc011
bHRpTGluZSA9IGlzTXVsdGlMaW5lIHx8IGxpbmVMZW5ndGggPj0gcmlnaHRNYXJnaW5fOwotICB9
Ci0gIHJldHVybiBpc011bHRpTGluZTsKLX0KLQotdm9pZCBCdWlsdFN0eWxlZFN0cmVhbVdyaXRl
cjo6cHVzaFZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSkgewotICBpZiAoYWRkQ2hpbGRW
YWx1ZXNfKQotICAgIGNoaWxkVmFsdWVzXy5wdXNoX2JhY2sodmFsdWUpOwotICBlbHNlCi0gICAg
KnNvdXRfIDw8IHZhbHVlOwotfQotCi12b2lkIEJ1aWx0U3R5bGVkU3RyZWFtV3JpdGVyOjp3cml0
ZUluZGVudCgpIHsKLSAgLy8gYmxlcCBpbnRlbmRlZCB0aGlzIHRvIGxvb2sgYXQgdGhlIHNvLWZh
ci13cml0dGVuIHN0cmluZwotICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBhcmUgYWxyZWFk
eSBpbmRlbnRlZCwgYnV0Ci0gIC8vIHdpdGggYSBzdHJlYW0gd2UgY2Fubm90IGRvIHRoYXQuIFNv
IHdlIHJlbHkgb24gc29tZSBzYXZlZCBzdGF0ZS4KLSAgLy8gVGhlIGNhbGxlciBjaGVja3MgaW5k
ZW50ZWRfLgotCi0gIGlmICghaW5kZW50YXRpb25fLmVtcHR5KCkpIHsKLSAgICAvLyBJbiB0aGlz
IGNhc2UsIGRyb3AgbmV3bGluZXMgdG9vLgotICAgICpzb3V0XyA8PCAnXG4nIDw8IGluZGVudFN0
cmluZ187Ci0gIH0KLX0KLQotdm9pZCBCdWlsdFN0eWxlZFN0cmVhbVdyaXRlcjo6d3JpdGVXaXRo
SW5kZW50KHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSkgewotICBpZiAoIWluZGVudGVkXykgd3Jp
dGVJbmRlbnQoKTsKLSAgKnNvdXRfIDw8IHZhbHVlOwotICBpbmRlbnRlZF8gPSBmYWxzZTsKLX0K
LQotdm9pZCBCdWlsdFN0eWxlZFN0cmVhbVdyaXRlcjo6aW5kZW50KCkgeyBpbmRlbnRTdHJpbmdf
ICs9IGluZGVudGF0aW9uXzsgfQotCi12b2lkIEJ1aWx0U3R5bGVkU3RyZWFtV3JpdGVyOjp1bmlu
ZGVudCgpIHsKLSAgYXNzZXJ0KGluZGVudFN0cmluZ18uc2l6ZSgpID49IGluZGVudGF0aW9uXy5z
aXplKCkpOwotICBpbmRlbnRTdHJpbmdfLnJlc2l6ZShpbmRlbnRTdHJpbmdfLnNpemUoKSAtIGlu
ZGVudGF0aW9uXy5zaXplKCkpOwotfQotCi12b2lkIEJ1aWx0U3R5bGVkU3RyZWFtV3JpdGVyOjp3
cml0ZUNvbW1lbnRCZWZvcmVWYWx1ZShWYWx1ZSBjb25zdCYgcm9vdCkgewotICBpZiAoY3NfID09
IENvbW1lbnRTdHlsZTo6Tm9uZSkgcmV0dXJuOwotICBpZiAoIXJvb3QuaGFzQ29tbWVudChjb21t
ZW50QmVmb3JlKSkKLSAgICByZXR1cm47Ci0KLSAgaWYgKCFpbmRlbnRlZF8pIHdyaXRlSW5kZW50
KCk7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21tZW50ID0gcm9vdC5nZXRDb21tZW50KGNvbW1l
bnRCZWZvcmUpOwotICBzdGQ6OnN0cmluZzo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGNvbW1lbnQu
YmVnaW4oKTsKLSAgd2hpbGUgKGl0ZXIgIT0gY29tbWVudC5lbmQoKSkgewotICAgICpzb3V0XyA8
PCAqaXRlcjsKLSAgICBpZiAoKml0ZXIgPT0gJ1xuJyAmJgotICAgICAgIChpdGVyICE9IGNvbW1l
bnQuZW5kKCkgJiYgKihpdGVyICsgMSkgPT0gJy8nKSkKLSAgICAgIC8vIHdyaXRlSW5kZW50KCk7
ICAvLyB3b3VsZCB3cml0ZSBleHRyYSBuZXdsaW5lCi0gICAgICAqc291dF8gPDwgaW5kZW50U3Ry
aW5nXzsKLSAgICArK2l0ZXI7Ci0gIH0KLSAgaW5kZW50ZWRfID0gZmFsc2U7Ci19Ci0KLXZvaWQg
QnVpbHRTdHlsZWRTdHJlYW1Xcml0ZXI6OndyaXRlQ29tbWVudEFmdGVyVmFsdWVPblNhbWVMaW5l
KFZhbHVlIGNvbnN0JiByb290KSB7Ci0gIGlmIChjc18gPT0gQ29tbWVudFN0eWxlOjpOb25lKSBy
ZXR1cm47Ci0gIGlmIChyb290Lmhhc0NvbW1lbnQoY29tbWVudEFmdGVyT25TYW1lTGluZSkpCi0g
ICAgKnNvdXRfIDw8ICIgIiArIHJvb3QuZ2V0Q29tbWVudChjb21tZW50QWZ0ZXJPblNhbWVMaW5l
KTsKLQotICBpZiAocm9vdC5oYXNDb21tZW50KGNvbW1lbnRBZnRlcikpIHsKLSAgICB3cml0ZUlu
ZGVudCgpOwotICAgICpzb3V0XyA8PCByb290LmdldENvbW1lbnQoY29tbWVudEFmdGVyKTsKLSAg
fQotfQotCi0vLyBzdGF0aWMKLWJvb2wgQnVpbHRTdHlsZWRTdHJlYW1Xcml0ZXI6Omhhc0NvbW1l
bnRGb3JWYWx1ZShjb25zdCBWYWx1ZSYgdmFsdWUpIHsKLSAgcmV0dXJuIHZhbHVlLmhhc0NvbW1l
bnQoY29tbWVudEJlZm9yZSkgfHwKLSAgICAgICAgIHZhbHVlLmhhc0NvbW1lbnQoY29tbWVudEFm
dGVyT25TYW1lTGluZSkgfHwKLSAgICAgICAgIHZhbHVlLmhhc0NvbW1lbnQoY29tbWVudEFmdGVy
KTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vCi0vLyBTdHJlYW1Xcml0ZXIKLQotU3RyZWFtV3JpdGVy
OjpTdHJlYW1Xcml0ZXIoKQotICAgIDogc291dF8oTlVMTCkKLXsKLX0KLVN0cmVhbVdyaXRlcjo6
flN0cmVhbVdyaXRlcigpCi17Ci19Ci1TdHJlYW1Xcml0ZXI6OkZhY3Rvcnk6On5GYWN0b3J5KCkK
LXt9Ci1TdHJlYW1Xcml0ZXJCdWlsZGVyOjpTdHJlYW1Xcml0ZXJCdWlsZGVyKCkKLXsKLSAgc2V0
RGVmYXVsdHMoJnNldHRpbmdzXyk7Ci19Ci1TdHJlYW1Xcml0ZXJCdWlsZGVyOjp+U3RyZWFtV3Jp
dGVyQnVpbGRlcigpCi17fQotU3RyZWFtV3JpdGVyKiBTdHJlYW1Xcml0ZXJCdWlsZGVyOjpuZXdT
dHJlYW1Xcml0ZXIoKSBjb25zdAotewotICBzdGQ6OnN0cmluZyBpbmRlbnRhdGlvbiA9IHNldHRp
bmdzX1siaW5kZW50YXRpb24iXS5hc1N0cmluZygpOwotICBzdGQ6OnN0cmluZyBjc19zdHIgPSBz
ZXR0aW5nc19bImNvbW1lbnRTdHlsZSJdLmFzU3RyaW5nKCk7Ci0gIGJvb2wgZXljID0gc2V0dGlu
Z3NfWyJlbmFibGVZQU1MQ29tcGF0aWJpbGl0eSJdLmFzQm9vbCgpOwotICBib29sIGRucCA9IHNl
dHRpbmdzX1siZHJvcE51bGxQbGFjZWhvbGRlcnMiXS5hc0Jvb2woKTsKLSAgYm9vbCB1c2YgPSBz
ZXR0aW5nc19bInVzZVNwZWNpYWxGbG9hdHMiXS5hc0Jvb2woKTsgCi0gIHVuc2lnbmVkIGludCBw
cmUgPSBzZXR0aW5nc19bInByZWNpc2lvbiJdLmFzVUludCgpOwotICBDb21tZW50U3R5bGU6OkVu
dW0gY3MgPSBDb21tZW50U3R5bGU6OkFsbDsKLSAgaWYgKGNzX3N0ciA9PSAiQWxsIikgewotICAg
IGNzID0gQ29tbWVudFN0eWxlOjpBbGw7Ci0gIH0gZWxzZSBpZiAoY3Nfc3RyID09ICJOb25lIikg
ewotICAgIGNzID0gQ29tbWVudFN0eWxlOjpOb25lOwotICB9IGVsc2UgewotICAgIHRocm93UnVu
dGltZUVycm9yKCJjb21tZW50U3R5bGUgbXVzdCBiZSAnQWxsJyBvciAnTm9uZSciKTsKLSAgfQot
ICBzdGQ6OnN0cmluZyBjb2xvblN5bWJvbCA9ICIgOiAiOwotICBpZiAoZXljKSB7Ci0gICAgY29s
b25TeW1ib2wgPSAiOiAiOwotICB9IGVsc2UgaWYgKGluZGVudGF0aW9uLmVtcHR5KCkpIHsKLSAg
ICBjb2xvblN5bWJvbCA9ICI6IjsKLSAgfQotICBzdGQ6OnN0cmluZyBudWxsU3ltYm9sID0gIm51
bGwiOwotICBpZiAoZG5wKSB7Ci0gICAgbnVsbFN5bWJvbCA9ICIiOwotICB9Ci0gIGlmIChwcmUg
PiAxNykgcHJlID0gMTc7Ci0gIHN0ZDo6c3RyaW5nIGVuZGluZ0xpbmVGZWVkU3ltYm9sID0gIiI7
Ci0gIHJldHVybiBuZXcgQnVpbHRTdHlsZWRTdHJlYW1Xcml0ZXIoCi0gICAgICBpbmRlbnRhdGlv
biwgY3MsCi0gICAgICBjb2xvblN5bWJvbCwgbnVsbFN5bWJvbCwgZW5kaW5nTGluZUZlZWRTeW1i
b2wsIHVzZiwgcHJlKTsKLX0KLXN0YXRpYyB2b2lkIGdldFZhbGlkV3JpdGVyS2V5cyhzdGQ6OnNl
dDxzdGQ6OnN0cmluZz4qIHZhbGlkX2tleXMpCi17Ci0gIHZhbGlkX2tleXMtPmNsZWFyKCk7Ci0g
IHZhbGlkX2tleXMtPmluc2VydCgiaW5kZW50YXRpb24iKTsKLSAgdmFsaWRfa2V5cy0+aW5zZXJ0
KCJjb21tZW50U3R5bGUiKTsKLSAgdmFsaWRfa2V5cy0+aW5zZXJ0KCJlbmFibGVZQU1MQ29tcGF0
aWJpbGl0eSIpOwotICB2YWxpZF9rZXlzLT5pbnNlcnQoImRyb3BOdWxsUGxhY2Vob2xkZXJzIik7
Ci0gIHZhbGlkX2tleXMtPmluc2VydCgidXNlU3BlY2lhbEZsb2F0cyIpOwotICB2YWxpZF9rZXlz
LT5pbnNlcnQoInByZWNpc2lvbiIpOwotfQotYm9vbCBTdHJlYW1Xcml0ZXJCdWlsZGVyOjp2YWxp
ZGF0ZShKc29uOjpWYWx1ZSogaW52YWxpZCkgY29uc3QKLXsKLSAgSnNvbjo6VmFsdWUgbXlfaW52
YWxpZDsKLSAgaWYgKCFpbnZhbGlkKSBpbnZhbGlkID0gJm15X2ludmFsaWQ7ICAvLyBzbyB3ZSBk
byBub3QgbmVlZCB0byB0ZXN0IGZvciBOVUxMCi0gIEpzb246OlZhbHVlJiBpbnYgPSAqaW52YWxp
ZDsKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IHZhbGlkX2tleXM7Ci0gIGdldFZhbGlkV3JpdGVy
S2V5cygmdmFsaWRfa2V5cyk7Ci0gIFZhbHVlOjpNZW1iZXJzIGtleXMgPSBzZXR0aW5nc18uZ2V0
TWVtYmVyTmFtZXMoKTsKLSAgc2l6ZV90IG4gPSBrZXlzLnNpemUoKTsKLSAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYga2V5ID0ga2V5c1tp
XTsKLSAgICBpZiAodmFsaWRfa2V5cy5maW5kKGtleSkgPT0gdmFsaWRfa2V5cy5lbmQoKSkgewot
ICAgICAgaW52W2tleV0gPSBzZXR0aW5nc19ba2V5XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDB1
ID09IGludi5zaXplKCk7Ci19Ci1WYWx1ZSYgU3RyZWFtV3JpdGVyQnVpbGRlcjo6b3BlcmF0b3Jb
XShzdGQ6OnN0cmluZyBrZXkpCi17Ci0gIHJldHVybiBzZXR0aW5nc19ba2V5XTsKLX0KLS8vIHN0
YXRpYwotdm9pZCBTdHJlYW1Xcml0ZXJCdWlsZGVyOjpzZXREZWZhdWx0cyhKc29uOjpWYWx1ZSog
c2V0dGluZ3MpCi17Ci0gIC8vISBbU3RyZWFtV3JpdGVyQnVpbGRlckRlZmF1bHRzXQotICAoKnNl
dHRpbmdzKVsiY29tbWVudFN0eWxlIl0gPSAiQWxsIjsKLSAgKCpzZXR0aW5ncylbImluZGVudGF0
aW9uIl0gPSAiXHQiOwotICAoKnNldHRpbmdzKVsiZW5hYmxlWUFNTENvbXBhdGliaWxpdHkiXSA9
IGZhbHNlOwotICAoKnNldHRpbmdzKVsiZHJvcE51bGxQbGFjZWhvbGRlcnMiXSA9IGZhbHNlOwot
ICAoKnNldHRpbmdzKVsidXNlU3BlY2lhbEZsb2F0cyJdID0gZmFsc2U7Ci0gICgqc2V0dGluZ3Mp
WyJwcmVjaXNpb24iXSA9IDE3OwotICAvLyEgW1N0cmVhbVdyaXRlckJ1aWxkZXJEZWZhdWx0c10K
LX0KLQotc3RkOjpzdHJpbmcgd3JpdGVTdHJpbmcoU3RyZWFtV3JpdGVyOjpGYWN0b3J5IGNvbnN0
JiBidWlsZGVyLCBWYWx1ZSBjb25zdCYgcm9vdCkgewotICBzdGQ6Om9zdHJpbmdzdHJlYW0gc291
dDsKLSAgU3RyZWFtV3JpdGVyUHRyIGNvbnN0IHdyaXRlcihidWlsZGVyLm5ld1N0cmVhbVdyaXRl
cigpKTsKLSAgd3JpdGVyLT53cml0ZShyb290LCAmc291dCk7Ci0gIHJldHVybiBzb3V0LnN0cigp
OwotfQotCi1zdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBzb3V0LCBWYWx1
ZSBjb25zdCYgcm9vdCkgewotICBTdHJlYW1Xcml0ZXJCdWlsZGVyIGJ1aWxkZXI7Ci0gIFN0cmVh
bVdyaXRlclB0ciBjb25zdCB3cml0ZXIoYnVpbGRlci5uZXdTdHJlYW1Xcml0ZXIoKSk7Ci0gIHdy
aXRlci0+d3JpdGUocm9vdCwgJnNvdXQpOwotICByZXR1cm4gc291dDsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSnNvbgotCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBFbmQgb2YgY29udGVudCBvZiBmaWxl
OiBzcmMvbGliX2pzb24vanNvbl93cml0ZXIuY3BwCi0vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvQ0hBTkdFUy50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9DSEFOR0VTLnR4dApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg3Y2Q0ZDVkZmNmNTY3NjQ3NGE1N2U1ZDg4MTk3
OWFmMGM1Y2E0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9DSEFOR0VTLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci1XZWxjb21lIHRvIHRoZSBDIyBwb3J0IG9mIEdvb2dsZSBQcm90
b2NvbCBCdWZmZXJzLCB3cml0dGVuIGJ5IEpvbiBTa2VldAotKHNrZWV0QHBvYm94LmNvbSkgYmFz
ZWQgb24gdGhlIHdvcmsgb2YgbWFueSB0YWxlbnRlZCBwZW9wbGUuCi0KLT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLVJFTEVBU0UgTk9URVMgLSBDb2RlIGltcG9ydGVkIGludG8gR29vZ2xlJ3MgbWFp
biBwcm90b2J1ZiByZXBvc2l0b3J5Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUV2ZXJ5dGhp
bmcgYmVsb3cgbm90ZSB0aGlzIHJlcHJlc2VudHMgaGlzdG9yeSBvZiBwcm90b2J1Zi1jc2hhcnAt
cG9ydCBwcm9qZWN0Ci1iZWZvcmUgdGhlIGNvZGUgd2FzIG1lcmdlZCBpbnRvIGNzaGFycC8gc3Vi
dHJlZSBvZiBHaXRIdWIgZ29vZ2xlL3Byb3RvYnVmCi1yZXBvc2l0b3J5LgotRnJvemVuIGxlZ2Fj
eSB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBwcm9qZWN0IGlzIGF2YWlsYWJsZSBpbgotaHR0cHM6
Ly9naXRodWIuY29tL2pza2VldC9wcm90b2J1Zi1jc2hhcnAtcG9ydC4KLQotPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotUkVMRUFTRSBOT1RFUyAtIFZlcnNpb24gMi40LjEuNTU1Ci09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0KLUNoYW5nZXM6Ci0tIFVwZ3JhZGUgc29sdXRpb24gZm9ybWF0IHRvIFZp
c3VhbCBTdHVkaW8gMjAxMi4KLS0gQWRkIHRoZSBhYmlsaXR5IHRvIHByaW50IGEgYnVpbGRlciAo
bm90IGp1c3QgYSBtZXNzYWdlKQotLSBUZXh0R2VuZXJhdG9yIGludHJvZHVjZXMgYSBuZXcgb3Zl
cmxvYWQgb2YgUHJpbnRUbwotLSBNdW5nZSBwcm90b2MncyBlcnJvciBmb3JtYXQgaW50byBhIFZT
LUMjLWNvbXBhdGlibGUgb3V0cHV0IGZvcm1hdC4KLS0gV29yayB0byBtYWtlIFByb3RvR2VuIGNs
b25lIHRoYXQgYWN0cyBhcyBhIHByb3RvYy5leGUgcGx1Z2luLgotLSBBZGRlZCB0aGUgQWxsb3dQ
YXJ0aWFsbHlUcnVzdGVkQ2FsbGVycyBhdHRyaWJ1dGUKLS0gT3B0aW1pemVkIGVudW0gcGFyc2lu
Zy4KLQotRml4ZXM6Ci0tIEZpeCBmb3IgYnVnIGluIGxpbWl0ZWQgaW5wdXQgc3RyZWFtJ3MgUG9z
aXRpb24sIEludHJvZHVjZWQgUG9zaXRpb24gb24gCi0gIG91dHB1dCBzdHJlYW0KLS0gRml4IGZv
ciB3cml0aW5nIGEgY2hhcmFjdGVyIHRvIGEgSlNPTiBvdXRwdXQgb3ZlcmZsb3dzIGFsbG9jYXRl
ZCBidWZmZXIKLS0gT3B0aW1pemUgRnJvbUJhc2U2NFN0cmluZyB0byByZXR1cm4gRW1wdHkgd2hl
biBwcmVzZW50ZWQgd2l0aCBlbXB0eSBzdHJpbmcuCi0tIFVzZSBzdHJpbmcuQ29uY2F0IGluc3Rl
YWQgb2Ygb3BlcmF0b3IgdG8gYXZvaWQgcG90ZW50aWFsIGltcG9ydCBwcm9ibGVtcwotLSBJc3N1
ZSA4MTogcXVvdGluZyBmb3IgTlVuaXQgcGFyYW1ldGVycy4KLS0gSXNzdWUgNTY6IE51R2V0IHBh
Y2thZ2UgaXMgbm9pc3kKLS0gSXNzdWUgNzA6IFBvcnRhYmxlIGxpYnJhcnkgcHJvamVjdCBoYXMg
c29tZSBpbnZhbGlkIE51bml0LWJhc2VkIGNvZGUuCi0tIElzc3VlIDcxOiBDb2RlZElucHV0U3Ry
ZWFtLlJlYWRCeXRlcyBnbyB0byBzbG93IHBhdGggdW5uZWNlc3NhcmlseQotLSBJc3N1ZSA4NDog
d2FybmluZyBDUzAyMTk6IFRoZSB2YXJpYWJsZSBgc2l6ZScgaXMgYXNzaWduZWQgYnV0IG5ldmVy
IHVzZWQKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUkVMRUFTRSBOT1RFUyAtIFZlcnNpb24g
Mi40LjEuNTIxCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUNoYW5nZXM6Ci0tIEFkZCBnZW5l
cmF0ZWRfY29kZV9hdHRyaWJ1dGVzIG9wdGlvbiwgZGVmYXVsdGVkIHRvIGZhbHNlCi0tIEFkZGVk
IHN1cHBvcnQgZm9yIFBvcnRhYmxlIGxpYnJhcnkKLS0gQWRkZWQgJ1Vuc2FmZScgc3RhdGljIHR5
cGUgaW4gQnl0ZVN0cmluZyB0byBhbGxvdyBkaXJlY3QgYnVmZmVyIGFjY2VzcwotCi1GaXhlczoK
LS0gSXNzdWUgNTA6IFRoZSBYTUwgc2VyaWFsaXplciB3aWxsIGZhaWwgdG8gZGVzZXJpYWxpemUg
YSBtZXNzYWdlIHdpdGggZW1wdHkgCi0gIGNoaWxkIG1lc3NhZ2UKLS0gSXNzdWUgNDU6IFVzZSBv
ZiAnaXRlbScgYXMgYSBmaWVsZCBuYW1lIGNhdXNlcyBBbWJpZ3VvdXNNYXRjaEV4Y2VwdGlvbgot
LSBJc3N1ZSA0OTogR2VuZXJhdGVkIG5lc3RlZCBzdGF0aWMgVHlwZXMgY2xhc3Mgc2hvdWxkIGJl
IHBhcnRpYWwKLS0gSXNzdWUgMzg6IERpc2FibGUgQ0xTQ29tcGxpYW50IHdhcm5pbmdzICgzMDIx
KQotLSBJc3N1ZSA0MDogcHJvdG9fcGF0aCBkb2VzIG5vdCB3b3JrIGZvciBjb21tYW5kLWxpbmUg
ZmlsZSBuYW1lcwotLSBJc3N1ZSA1NDogc2hvdWxkIHJldGlyZSBhbGwgYnl0ZXMgaW4gYnVmZmVy
IChidWZmZXJTaXplKQotLSBJc3N1ZSA0MzogRml4IHRvIGNvcnJlY3QgaWRlbnRpY2FsICd1bWJy
ZWxsYV9jbGFzc25hbWUnIG9wdGlvbnMgZnJvbSB0cnlpbmcgCi0gIHRvIHdyaXRlIHRvIHRoZSBz
YW1lIGZpbGVuYW1lLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1SRUxFQVNFIE5PVEVTIC0g
VmVyc2lvbiAyLjQuMS40NzMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotRmVhdHVyZXM6Ci0t
IEFkZGVkIG9wdGlvbiBzZXJ2aWNlX2dlbmVyYXRvcl90eXBlIHRvIGNvbnRyb2wgc2VydmljZSBn
ZW5lcmF0aW9uIHdpdGgKLSAgTk9ORSwgR0VORVJJQywgSU5URVJGQUNFLCBvciBJUlBDRElTUEFU
Q0gKLS0gQWRkZWQgaW50ZXJmYWNlcyBJUnBjRGlzcGF0Y2ggYW5kIElScGNTZXJ2ZXJTdHViIHRv
IHByb3ZpZGUgZm9yIGJsb2NraW5nCi0gIHNlcnZpY2VzIGFuZCBpbXBsZW1lbnRhdGlvbnMuCi0t
IEFkZGVkIFByb3RvR2VuLmV4ZSBjb21tYW5kLWxpbmUgYXJndW1lbnQgIi0tcHJvdG9jX2Rpcj0i
IHRvIHNwZWNpZnkgdGhlIAotICBsb2NhdGlvbiBvZiBwcm90b2MuZXhlLgotLSBFeHRyYWN0ZWQg
aW50ZXJmYWNlcyBmb3IgSUNvZGVkSW5wdXRTdHJlYW0gYW5kIElDb2RlZE91dHB1dFN0cmVhbSB0
byBhbGxvdwotICBjdXN0b20gaW1wbGVtZW50YXRpb24gb2Ygd3JpdGVycyB3aXRoIGJvdGggc3Bl
ZWQgYW5kIHNpemUgb3B0aW1pemF0aW9ucy4KLS0gQWRkaXRpb24gb2YgdGhlICJHb29nbGUuUHJv
dG9CdWZmZXJzLlNlcmlhbGl6YXRpb24iIGFzc2VtYmx5IHRvIHN1cHBvcnQKLSAgcmVhZGluZyBh
bmQgd3JpdGluZyBtZXNzYWdlcyB0by9mcm9tIFhNTCwgSlNPTiwgSURpY3Rpb25hcnk8LD4gYW5k
IG90aGVycy4KLS0gU2V2ZXJhbCBwZXJmb3JtYW5jZSByZWxhdGVkIGZpeGVzIGFuZCB0d2Vla3MK
LS0gSXNzdWUgMzoJQWRkIG9wdGlvbiB0byBtYXJrIGdlbmVyYXRlZCBjb2RlIHdpdGggYXR0cmli
dXRlCi0tIElzc3VlIDIwOglTdXBwb3J0IGZvciBkZWNvcmF0aW5nIGNsYXNzZXMgW1NlcmlhbGl6
YWJsZV0KLS0gSXNzdWUgMjE6CURlY29yYXRlIGZpZWxkcyB3aXRoIFtkZXByZWNhdGVkPXRydWVd
IGFzIFtTeXN0ZW0uT2Jzb2xldGVdCi0tIElzc3VlIDIyOglSZXVzYWJsZSBCdWlsZGVyIGNsYXNz
ZXMKLS0gSXNzdWUgMjQ6CVN1cHBvcnQgZm9yIHVzaW5nIEpzb24vWG1sIGZvcm1hdHMgd2l0aCBJ
Q29kZWRJbnB1dFN0cmVhbQotLSBJc3N1ZSAyNTogQWRkZWQgc3VwcG9ydCBmb3IgTnVHZXQgcGFj
a2FnZXMKLS0gSXNzdWUgMzE6IFVwZ3JhZGVkIHByb3RvYy5leGUgYW5kIGRlc2NyaXB0b3IgdG8g
Mi40LjEKLQotRml4ZXM6Ci0tIElzc3VlIDEzOglNZXNzYWdlIHdpdGggRmllbGQgc2FtZSBuYW1l
IGFzIG1lc3NhZ2UgY2F1c2VzIHVuY29tcGlsYWJsZSAuY3MKLS0gSXNzdWUgMTY6CURvZXMgbm90
IGludGVncmF0ZSB3ZWxsIHdpdGggb3RoZXIgdG9vbGluZwotLSBJc3N1ZSAxOToJU3VwcG9ydCBm
b3IgbmVnYXRpdmUgZW51bSB2YWx1ZXMKLS0gSXNzdWUgMjY6CUFkZFJhbmdlIGluIEdlbmVyYXRl
ZEJ1aWxkZXIgaXRlcmF0ZXMgdHdpY2UuCi0tIElzc3VlIDI3OglSZW1vdmUgWE1MIGRvY3VtZW50
YXRpb24gb3V0cHV0IGZyb20gdGVzdCBwcm9qZWN0cyB0byBjbGVhciAKLSAgd2FybmluZ3MvZXJy
b3JzLgotLSBJc3N1ZSAyODogQ2lyY3VsYXIgbWVzc2FnZSBkZXBlbmRlbmNpZXMgcmVzdWx0IGlu
IG51bGwgZGVmYXVsdCB2YWx1ZXMgZm9yIAotICBNZXNzYWdlIGZpZWxkcy4KLS0gSXNzdWUgMjk6
IE1lc3NhZ2UgY2xhc3NlcyBnZW5lcmF0ZWQgaGF2ZSBhIHB1YmxpYyBkZWZhdWx0IGNvbnN0cnVj
dG9yLiAgWW91Ci0gIGNhbiBkaXNhYmxlIHByaXZhdGUgY3RvciBnZW5lcmF0aW9uIHdpdGggdGhl
IG9wdGlvbiBnZW5lcmF0ZV9wcml2YXRlX2N0b3IuCi0tIElzc3VlIDM1OiBGaXhlZCBhIGJ1ZyBp
biBQcm90b0dlbiBoYW5kbGluZyBvZiBhcmd1bWVudHMgd2l0aCB0cmFpbGluZyBcCi0tIEJpZy1l
bmRpYW4gc3VwcG9ydCBmb3IgZmxvYXQsIGFuZCBkb3VibGUgb24gU2lsdmVybGlnaHQKLS0gUGFj
a2VkIGFuZCBVbnBhY2tlZCBwYXJzaW5nIGFsbG93IGZvciBhbGwgcmVwZWF0ZWQsIGFzIHBlciB2
ZXJzaW9uIDIuMwotLSBGaXggZm9yIGxlYXZpbmcgQnVpbGRlciBhIHB1YmxpYyBjdG9yIG9uIGlu
dGVybmFsIGNsYXNzZXMgZm9yIHVzZSB3aXRoCi0gIGdlbmVyaWMgIndoZXJlIFQ6IG5ldygpIiBj
b25zdHJhaW50cy4KLQotT3RoZXI6Ci0tIENoYW5nZWQgdGhlIGNvZGUgc2lnbmluZyBrZXkgdG8g
YSBwcml2YXRlbHkgaGVsZCBrZXkKLS0gUmVmb3JtYXR0ZWQgYWxsIGNvZGUgYW5kIGxpbmUtZW5k
aW5ncyB0byBDIyBkZWZhdWx0cwotLSBSZXdvcmtpbmcgb2YgcGVyZm9ybWFuY2UgYmVuY2htYXJr
cyB0byBwcm9kdWNlIHJlbGlhYmxlIHJlc3VsdHMsIG9wdGlvbiAvdjIKLS0gSXNzdWUgMzQ6IFNp
bHZlcmxpZ2h0IGFzc2VtYmxpZXMgYXJlIG5vdyB1bml0IHRlc3RlZAotCi09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci1SRUxFQVNFIE5PVEVTIC0gVmVyc2lvbiAyLjMuMC4yNzcKLT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLQotRmVhdHVyZXM6Ci0tIEFkZGVkIGNsc19jb21wbGlhbmNlIG9wdGlvbiB0
byBnZW5lcmF0ZSBhdHRyaWJ1dGVzIGluZGljYXRpbmcgCi0gIG5vbi1DTFMtY29tcGxpYW5jZS4K
LS0gQWRkZWQgZmlsZV9leHRlbnNpb24gb3B0aW9uIHRvIGNvbnRyb2wgdGhlIGdlbmVyYXRlZCBv
dXRwdXQgZmlsZSdzIGV4dGVuc2lvbi4KLS0gQWRkZWQgdW1icmVsbGFfbmFtZXNwYWNlIG9wdGlv
biB0byBwbGFjZSB0aGUgdW1icmVsbGEgY2xhc3MgaW50byBhIG5lc3RlZAotICBuYW1lc3BhY2Ug
dG8gYWRkcmVzcyBpc3N1ZXMgd2l0aCBwcm90byBmaWxlcyBoYXZpbmcgdGhlIHNhbWUgbmFtZSBh
cyBhIAotICBtZXNzYWdlIGl0IGNvbnRhaW5zLgotLSBBZGRlZCBvdXRwdXRfZGlyZWN0b3J5IG9w
dGlvbiB0byBzZXQgdGhlIG91dHB1dCBwYXRoIGZvciB0aGUgc291cmNlIGZpbGUocykuCi0tIEFk
ZGVkIGlnbm9yZV9nb29nbGVfcHJvdG9idWYgb3B0aW9uIHRvIGF2b2lkIGdlbmVyYXRpbmcgY29k
ZSBmb3IgaW5jbHVkZXMgCi0gIGZyb20gdGhlIGdvb2dsZS5wcm90b2J1ZiBwYWNrYWdlLgotLSBB
ZGRlZCB0aGUgTElURSBmcmFtZXdvcmsgKEdvb2dsZS5Qcm90b0J1ZmZlcnNMaXRlLmRsbCkgYW5k
IHRoZSBhYmlsaXR5IHRvCi0gIGdlbmVyYXRlIGNvZGUgd2l0aCAib3B0aW9uIG9wdGltaXplX2Zv
ciA9IExJVEVfUlVOVElNRTsiLgotLSBBZGRlZCBhYmlsaXR5IHRvIGludm9rZSBwcm90b2MuZXhl
IGZyb20gd2l0aGluIFByb3RvR2VuLmV4ZS4KLS0gVXBncmFkZWQgdG8gcHJvdG9jLmV4ZSAoMi4z
KSBjb21waWxlci4KLQotRml4ZXM6Ci0tIElzc3VlIDk6CUNsYXNzIGNhbm5vdCBiZSBzdGF0aWMg
YW5kIHNlYWxlZCBlcnJvcgotLSBJc3N1ZSAxMjoJZGVmYXVsdCB2YWx1ZSBmb3IgZW51bWVyYXRl
IGZpZWxkcyBtdXN0IGJlIGZpbGxlZCBvdXQKLQotT3RoZXI6Ci0tIFJld3JpdGUgb2YgYnVpbGQg
dXNpbmcgTVNidWlsZCBpbnN0ZWFkIG9mIE5BbnQKLS0gTW92ZWQgdG8gTlVuaXQgVmVyc2lvbiAy
LjIuOC4wCi0tIENoYW5nZWQgdG8gdXNpbmcgc2VjdXJlIC5zbmsgZm9yIHJlbGVhc2VzCi0KLT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLVJFTEVBU0UgTk9URVMgLSBWZXJzaW9uIDAuOS4xCi09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLUZpeGVzOgotLSBpc3N1ZSAxMDoJSW5jb3JyZWN0IGVuY29k
aW5nIG9mIHBhY2tlZCBmaWVsZHMgd2hlbiBzZXJpYWxpemVkCi0KLT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLVJFTEVBU0UgTk9URVMgLSBWZXJzaW9uIDAuOS4wCi09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0KLS0gSW5pdGlhbCByZWxlYXNlCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9Hb29nbGUuUHJvdG9idWYu
VG9vbHMubnVzcGVjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvR29vZ2xlLlByb3RvYnVmLlRvb2xzLm51c3BlYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQyNDBkYWU4NzU2Njg5MTcyOTBiM2NlNmMwYWFkZGRi
ZjM5N2Y2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Nz
aGFycC9Hb29nbGUuUHJvdG9idWYuVG9vbHMubnVzcGVjCisrKyAvZGV2L251bGwKQEAgLTEsMzcg
KzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxwYWNr
YWdlPgotICA8bWV0YWRhdGE+Ci0gICAgPGlkPkdvb2dsZS5Qcm90b2J1Zi5Ub29sczwvaWQ+Ci0g
ICAgPHRpdGxlPkdvb2dsZSBQcm90b2NvbCBCdWZmZXJzIHRvb2xzPC90aXRsZT4KLSAgICA8c3Vt
bWFyeT5Ub29scyBmb3IgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ljwvc3VtbWFyeT4KLSAgICA8ZGVzY3JpcHRpb24+U2VlIHByb2plY3Qgc2l0ZSBm
b3IgbW9yZSBpbmZvLjwvZGVzY3JpcHRpb24+Ci0gICAgPHZlcnNpb24+My4wLjAtYmV0YTM8L3Zl
cnNpb24+Ci0gICAgPGF1dGhvcnM+R29vZ2xlIEluYy48L2F1dGhvcnM+Ci0gICAgPG93bmVycz5w
cm90b2J1Zi1wYWNrYWdlczwvb3duZXJzPgotICAgIDxsaWNlbnNlVXJsPmh0dHBzOi8vZ2l0aHVi
LmNvbS9nb29nbGUvcHJvdG9idWYvYmxvYi9tYXN0ZXIvTElDRU5TRTwvbGljZW5zZVVybD4KLSAg
ICA8cHJvamVjdFVybD5odHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmPC9wcm9qZWN0
VXJsPgotICAgIDxyZXF1aXJlTGljZW5zZUFjY2VwdGFuY2U+ZmFsc2U8L3JlcXVpcmVMaWNlbnNl
QWNjZXB0YW5jZT4KLSAgICA8cmVsZWFzZU5vdGVzPlRvb2xzIGZvciBQcm90b2NvbCBCdWZmZXJz
PC9yZWxlYXNlTm90ZXM+Ci0gICAgPGNvcHlyaWdodD5Db3B5cmlnaHQgMjAxNSwgR29vZ2xlIElu
Yy48L2NvcHlyaWdodD4KLSAgICA8dGFncz5Qcm90b2NvbCBCdWZmZXJzIEJpbmFyeSBTZXJpYWxp
emF0aW9uIEZvcm1hdCBHb29nbGUgcHJvdG8gcHJvdG8zPC90YWdzPgotICA8L21ldGFkYXRhPgot
ICA8ZmlsZXM+Ci0gICAgPGZpbGUgc3JjPSJwcm90b2Ncd2luZG93c194ODZccHJvdG9jLmV4ZSIg
dGFyZ2V0PSJ0b29sc1x3aW5kb3dzX3g4Nlxwcm90b2MuZXhlIiAvPgotICAgIDxmaWxlIHNyYz0i
cHJvdG9jXHdpbmRvd3NfeDY0XHByb3RvYy5leGUiIHRhcmdldD0idG9vbHNcd2luZG93c194NjRc
cHJvdG9jLmV4ZSIgLz4KLSAgICA8ZmlsZSBzcmM9InByb3RvY1xsaW51eF94ODZccHJvdG9jIiB0
YXJnZXQ9InRvb2xzXGxpbnV4X3g4Nlxwcm90b2MiIC8+Ci0gICAgPGZpbGUgc3JjPSJwcm90b2Nc
bGludXhfeDY0XHByb3RvYyIgdGFyZ2V0PSJ0b29sc1xsaW51eF94NjRccHJvdG9jIiAvPgotICAg
IDxmaWxlIHNyYz0icHJvdG9jXG1hY29zeF94ODZccHJvdG9jIiB0YXJnZXQ9InRvb2xzXG1hY29z
eF94ODZccHJvdG9jIiAvPgotICAgIDxmaWxlIHNyYz0icHJvdG9jXG1hY29zeF94NjRccHJvdG9j
IiB0YXJnZXQ9InRvb2xzXG1hY29zeF94NjRccHJvdG9jIiAvPgotICAgIDxmaWxlIHNyYz0iLi5c
c3JjXGdvb2dsZVxwcm90b2J1ZlxhbnkucHJvdG8iIHRhcmdldD0idG9vbHNcZ29vZ2xlXHByb3Rv
YnVmIiAvPgotICAgIDxmaWxlIHNyYz0iLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxhcGkucHJvdG8i
IHRhcmdldD0idG9vbHNcZ29vZ2xlXHByb3RvYnVmIiAvPgotICAgIDxmaWxlIHNyYz0iLi5cc3Jj
XGdvb2dsZVxwcm90b2J1ZlxkZXNjcmlwdG9yLnByb3RvIiB0YXJnZXQ9InRvb2xzXGdvb2dsZVxw
cm90b2J1ZiIgLz4KLSAgICA8ZmlsZSBzcmM9Ii4uXHNyY1xnb29nbGVccHJvdG9idWZcZHVyYXRp
b24ucHJvdG8iIHRhcmdldD0idG9vbHNcZ29vZ2xlXHByb3RvYnVmIiAvPgotICAgIDxmaWxlIHNy
Yz0iLi5cc3JjXGdvb2dsZVxwcm90b2J1ZlxlbXB0eS5wcm90byIgdGFyZ2V0PSJ0b29sc1xnb29n
bGVccHJvdG9idWYiIC8+Ci0gICAgPGZpbGUgc3JjPSIuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXGZp
ZWxkX21hc2sucHJvdG8iIHRhcmdldD0idG9vbHNcZ29vZ2xlXHByb3RvYnVmIiAvPgotICAgIDxm
aWxlIHNyYz0iLi5cc3JjXGdvb2dsZVxwcm90b2J1Zlxzb3VyY2VfY29udGV4dC5wcm90byIgdGFy
Z2V0PSJ0b29sc1xnb29nbGVccHJvdG9idWYiIC8+Ci0gICAgPGZpbGUgc3JjPSIuLlxzcmNcZ29v
Z2xlXHByb3RvYnVmXHN0cnVjdC5wcm90byIgdGFyZ2V0PSJ0b29sc1xnb29nbGVccHJvdG9idWYi
IC8+Ci0gICAgPGZpbGUgc3JjPSIuLlxzcmNcZ29vZ2xlXHByb3RvYnVmXHRpbWVzdGFtcC5wcm90
byIgdGFyZ2V0PSJ0b29sc1xnb29nbGVccHJvdG9idWYiIC8+Ci0gICAgPGZpbGUgc3JjPSIuLlxz
cmNcZ29vZ2xlXHByb3RvYnVmXHR5cGUucHJvdG8iIHRhcmdldD0idG9vbHNcZ29vZ2xlXHByb3Rv
YnVmIiAvPgotICAgIDxmaWxlIHNyYz0iLi5cc3JjXGdvb2dsZVxwcm90b2J1Zlx3cmFwcGVycy5w
cm90byIgdGFyZ2V0PSJ0b29sc1xnb29nbGVccHJvdG9idWYiIC8+Ci0gIDwvZmlsZXM+Ci08L3Bh
Y2thZ2U+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9SRUFETUUubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9SRUFETUUubWQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMzk5M2UwMTQ5ZDU4ZDM4NDBkMjViZDE4MTNi
ZmY3MjY2ZDExZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9jc2hhcnAvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotVGhpcyBk
aXJlY3RvcnkgY29udGFpbnMgdGhlIEMjIFByb3RvY29sIEJ1ZmZlcnMgcnVudGltZSBsaWJyYXJ5
LgotCi1TdGF0dXM6IEJldGEgLSByZWFkeSBmb3IgZXh0ZXJuYWwgdGVzdGluZwotPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVXNhZ2UKLT09PT09Ci0KLVRoZSBl
YXNpZXN0IHdheSBob3cgdG8gdXNlIEMjIHByb3RvYnVmcyBpcyB2aWEgdGhlIGBHb29nbGUuUHJv
dG9idWZgCi1OdUdldCBwYWNrYWdlLiBKdXN0IGFkZCB0aGUgTnVHZXQgcGFja2FnZSB0byB5b3Vy
IFZTIHByb2plY3QuCi0KLUJlc2lkZXMgQyMgcnVudGltZSBsaWJyYXJ5LCB0aGUgTnVHZXQgcGFj
a2FnZSBhbHNvIGNvbnRhaW5zIAotcHJlY29tcGlsZWQgdmVyc2lvbiBvZiBgcHJvdG9jLmV4ZWAg
YW5kIGEgY29weSBvZiB3ZWxsIGtub3duIGAucHJvdG9gCi1maWxlcyB1bmRlciB0aGUgcGFja2Fn
ZSdzIGB0b29sc2AgZGlyZWN0b3J5LgotCi1UbyBnZW5lcmF0ZSBDIyBmaWxlcyBmcm9tIHlvdXIg
YC5wcm90b2AgZmlsZXMsIGludm9rZSBgcHJvdG9jYCB3aXRoIHRoZSAKLWAtLWNzaGFycF9vdXRg
IG9wdGlvbi4KLQotU3VwcG9ydGVkIHBsYXRmb3JtcwotPT09PT09PT09PT09PT09PT09PQotCi1U
aGUgcnVudGltZSBsaWJyYXJ5IGlzIGJ1aWx0IGFzIGEgcG9ydGFibGUgY2xhc3MgbGlicmFyeSwg
c3VwcG9ydGluZzoKLQotLSAuTkVUIDQuNQotLSBXaW5kb3dzIDgKLS0gV2luZG93cyBQaG9uZSBT
aWx2ZXJsaWdodCA4Ci0tIFdpbmRvd3MgUGhvbmUgOC4xCi0tIC5ORVQgQ29yZQotCi1Zb3Ugc2hv
dWxkIGJlIGFibGUgdG8gdXNlIFByb3RvY29sIEJ1ZmZlcnMgaW4gVmlzdWFsIFN0dWRpbyAyMDEy
IGFuZAotYWxsIGxhdGVyIHZlcnNpb25zLiBUaGlzIGluY2x1ZGVzIGFsbCBjb2RlIGdlbmVyYXRl
ZCBieSBgcHJvdG9jYCwKLXdoaWNoIG9ubHkgdXNlcyBmZWF0dXJlcyBmcm9tIEMjIDMgYW5kIGVh
cmxpZXIuCi0KLUJ1aWxkaW5nCi09PT09PT09PQotCi1PcGVuIHRoZSBgc3JjL0dvb2dsZS5Qcm90
b2J1Zi5zbG5gIHNvbHV0aW9uIGluIFZpc3VhbCBTdHVkaW8gMjAxNSBvcgotbGF0ZXIuIFlvdSBz
aG91bGQgYmUgYWJsZSB0byBydW4gdGhlIE5Vbml0IHRlc3QgZnJvbSBUZXN0IEV4cGxvcmVyCi0o
eW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBOVW5pdCBWaXN1YWwgU3R1ZGlvIGFkZC1pbikuCi0K
LUFsdGhvdWdoICp1c2Vycyogb2YgdGhpcyBwcm9qZWN0IGFyZSBvbmx5IGV4cGVjdGVkIHRvIGhh
dmUgVmlzdWFsCi1TdHVkaW8gMjAxMiBvciBsYXRlciwgKmRldmVsb3BlcnMqIG9mIHRoZSBsaWJy
YXJ5IGFyZSByZXF1aXJlZCB0bwotaGF2ZSBWaXN1YWwgU3R1ZGlvIDIwMTUgb3IgbGF0ZXIsIGFz
IHRoZSBsaWJyYXJ5IHVzZXMgQyMgNiBmZWF0dXJlcwotaW4gaXRzIGltcGxlbWVudGF0aW9uLiBU
aGVzZSBmZWF0dXJlcyBoYXZlIG5vIGltcGFjdCB3aGVuIHVzaW5nIHRoZQotY29tcGlsZWQgY29k
ZSAtIHRoZXkncmUgb25seSByZWxldmFudCB3aGVuIGJ1aWxkaW5nIHRoZQotYEdvb2dsZS5Qcm90
b2J1ZmAgYXNzZW1ibHkuCi0KLUhpc3Rvcnkgb2YgQyMgcHJvdG9idWZzCi09PT09PT09PT09PT09
PT09PT09PT09PQotCi1UaGlzIHN1YnRyZWUgd2FzIG9yaWdpbmFsbHkgaW1wb3J0ZWQgZnJvbSBo
dHRwczovL2dpdGh1Yi5jb20vanNrZWV0L3Byb3RvYnVmLWNzaGFycC1wb3J0Ci1hbmQgcmVwcmVz
ZW50cyB0aGUgbGF0ZXN0IGRldmVsb3BtZW50IHZlcnNpb24gb2YgQyMgcHJvdG9idWZzLCB0aGF0
IHdpbGwgbm93IGJlIGRldmVsb3BlZAotYW5kIG1haW50YWluZWQgYnkgR29vZ2xlLiBBbGwgdGhl
IGRldmVsb3BtZW50IHdpbGwgYmUgZG9uZSBpbiBvcGVuLCB1bmRlciB0aGlzIHJlcG9zaXRvcnkK
LShodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmKS4KLQotVGhlIHByZXZpb3VzIHBy
b2plY3QgZGlmZmVycyBmcm9tIHRoaXMgcHJvamVjdCBpbiBhIG51bWJlciBvZiB3YXlzOgotCi0t
IFRoZSBvbGQgY29kZSBvbmx5IHN1cHBvcnRlZCBwcm90bzI7IHRoZSBuZXcgY29kZSBvbmx5IHN1
cHBvcnRzCi1wcm90bzMgKHNvIG5vIHVua25vd24gZmllbGRzLCBubyByZXF1aXJlZC9vcHRpb25h
bCBkaXN0aW5jdGlvbiwgbm8KLWV4dGVuc2lvbnMpCi0tIFRoZSBvbGQgY29kZSB3YXMgYmFzZWQg
b24gaW1tdXRhYmxlIG1lc3NhZ2UgdHlwZXMgYW5kIGJ1aWxkZXJzIGZvcgotdGhlbQotLSBUaGUg
b2xkIGNvZGUgZGlkIG5vdCBzdXBwb3J0IG1hcHMgb3IgYG9uZW9mYAotLSBUaGUgb2xkIGNvZGUg
aGFkIGl0cyBvd24gSlNPTiByZXByZXNlbnRhdGlvbiwgd2hlcmVhcyB0aGUgbmV3IGNvZGUKLXVz
ZXMgdGhlIHN0YW5kYXJkIHByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24KLS0gVGhlIG9sZCBj
b2RlIGhhZCBubyBub3Rpb24gb2YgdGhlICJ3ZWxsLWtub3duIHR5cGVzIiB3aGljaCBoYXZlCi1z
cGVjaWFsIHN1cHBvcnQgaW4gdGhlIG5ldyBjb2RlCi0tIFRoZSBvbGQgcHJvamVjdCBzdXBwb3J0
ZWQgc29tZSBvbGRlciBwbGF0Zm9ybXMgKHN1Y2ggYXMgb2xkZXIKLXZlcnNpb25zIG9mIFNpbHZl
cmxpZ2h0KSB3aGljaCBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gdGhlCi1uZXcgcHJv
amVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvYnVpbGRfcGFja2FnZXMuYmF0IGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvYnVpbGRf
cGFja2FnZXMuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTAyZjA2MzRiNzg2
MmFjYTA0ZDM5NzM3NTY0YzA5MTMyNWIxMjIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL2J1aWxkX3BhY2thZ2VzLmJhdAorKysgL2Rldi9udWxs
CkBAIC0xLDEzICswLDAgQEAKLUByZW0gQnVpbGRzIEdvb2dsZS5Qcm90b2J1ZiBOdUdldCBwYWNr
YWdlcwotCi1AcmVtIEFkanVzdCB0aGUgbG9jYXRpb24gb2YgbnVnZXQuZXhlCi1zZXQgTlVHRVQ9
QzpcbnVnZXRcbnVnZXQuZXhlCi0KLUByZW0gQnVpbGQgc3JjL0dvb2dsZS5Qcm90b2J1Zi5zbG4g
c29sdXRpb24gaW4gUmVsZWFzZSBjb25maWd1cmF0aW9uIGZpcnN0LgotJU5VR0VUJSBwYWNrIHNy
Y1xHb29nbGUuUHJvdG9idWZcR29vZ2xlLlByb3RvYnVmLm51c3BlYyAtU3ltYm9scyB8fCBnb3Rv
IDplcnJvcgotCi1nb3RvIDpFT0YKLQotOmVycm9yCi1lY2hvIEZhaWxlZCEKLWV4aXQgL2IgJWVy
cm9ybGV2ZWwlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9idWlsZGFsbC5zaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL2J1aWxkYWxs
LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0NWFmNzA1ZjM4NTc4MmRjZGJlYWZk
MTQ5Y2Q4NTM1OWFjYTRmYjZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvY3NoYXJwL2J1aWxkYWxsLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBA
QAotIyEvYmluL2Jhc2gKLSMgVXNlIG1vbm8gdG8gYnVpbGQgc29sdXRpb24gYW5kIHJ1biBhbGwg
dGVzdHMuCi0KLSMgQWRqdXN0IHRoZXNlIHRvIHJlZmxlY3QgdGhlIGxvY2F0aW9uIG9mIG51bml0
LWNvbnNvbGUgaW4geW91ciBzeXN0ZW0uCi1OVU5JVF9DT05TT0xFPW51bml0LWNvbnNvbGUKLQot
IyBUaGUgcmVzdCB5b3UgY2FuIGxlYXZlIGludGFjdAotQ09ORklHPVJlbGVhc2UKLVNSQz0kKGRp
cm5hbWUgJDApL3NyYwotCi1zZXQgLWV4Ci0KLWVjaG8gQnVpbGRpbmcgdGhlIHNvbHV0aW9uLgot
eGJ1aWxkIC9wOkNvbmZpZ3VyYXRpb249JENPTkZJRyAkU1JDL0dvb2dsZS5Qcm90b2J1Zi5zbG4K
LQotZWNobyBSdW5uaW5nIHRlc3RzLgotJE5VTklUX0NPTlNPTEUgJFNSQy9Hb29nbGUuUHJvdG9i
dWYuVGVzdC9iaW4vJENPTkZJRy9Hb29nbGUuUHJvdG9idWYuVGVzdC5kbGwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y3NoYXJwL2dlbmVyYXRlX3Byb3Rvcy5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL2dlbmVyYXRlX3Byb3Rvcy5zaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZDk3OWFhNTJiZTcwNjE3YmUyMWEyZTMwMmZjOTg0
ZTg4MTQ4YjliZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9nZW5lcmF0ZV9wcm90b3Muc2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBA
Ci0jIS9iaW4vYmFzaAotIyBHZW5lcmF0ZXMgQyMgc291cmNlIGZpbGVzIGZyb20gLnByb3RvIGZp
bGVzLgotIyBZb3UgZmlyc3QgbmVlZCB0byBtYWtlIHN1cmUgcHJvdG9jIGhhcyBiZWVuIGJ1aWx0
IChzZWUgaW5zdHJ1Y3Rpb25zIG9uCi0jIGJ1aWxkaW5nIHByb3RvYyBpbiByb290IG9mIHRoaXMg
cmVwb3NpdG9yeSkKLQotc2V0IC1leAotCi0jIGNkIHRvIHJlcG9zaXRvcnkgcm9vdAotcHVzaGQg
JChkaXJuYW1lICQwKS8uLgotCi0jIFByb3RvY29sIGJ1ZmZlciBjb21waWxlciB0byB1c2UuIElm
IHRoZSBQUk9UT0MgdmFyaWFibGUgaXMgc2V0LAotIyB1c2UgdGhhdC4gT3RoZXJ3aXNlLCBwcm9i
ZSBmb3IgZXhwZWN0ZWQgbG9jYXRpb25zIHVuZGVyIGJvdGgKLSMgV2luZG93cyBhbmQgVW5peC4K
LWlmIFsgLXogIiRQUk9UT0MiIF07IHRoZW4KLSAgIyBUT0RPKGpvbnNrZWV0KTogVXNlIGFuIGFy
cmF5IGFuZCBhIGZvciBsb29wIGluc3RlYWQ/Ci0gIGlmIFsgLXggY21ha2UvYnVpbGQvRGVidWcv
cHJvdG9jLmV4ZSBdOyB0aGVuCi0gICAgUFJPVE9DPWNtYWtlL2J1aWxkL0RlYnVnL3Byb3RvYy5l
eGUKLSAgZWxpZiBbIC14IGNtYWtlL2J1aWxkL1JlbGVhc2UvcHJvdG9jLmV4ZSBdOyB0aGVuCi0g
ICAgUFJPVE9DPWNtYWtlL2J1aWxkL1JlbGVhc2UvcHJvdG9jLmV4ZQotICBlbGlmIFsgLXggc3Jj
L3Byb3RvYyBdOyB0aGVuCi0gICAgUFJPVE9DPXNyYy9wcm90b2MKLSAgZWxzZQotICAgIGVjaG8g
IlVuYWJsZSB0byBmaW5kIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4iCi0gICAgZXhpdCAxCi0g
IGZpCi1maQotCi0jIGRlc2NyaXB0b3IucHJvdG8gYW5kIHdlbGwta25vd24gdHlwZXMKLSRQUk9U
T0MgLUlzcmMgLS1jc2hhcnBfb3V0PWNzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmIFwKLSAgICAt
LWNzaGFycF9vcHQ9YmFzZV9uYW1lc3BhY2U9R29vZ2xlLlByb3RvYnVmIFwKLSAgICBzcmMvZ29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8gXAotICAgIHNyYy9nb29nbGUvcHJvdG9idWYv
YW55LnByb3RvIFwKLSAgICBzcmMvZ29vZ2xlL3Byb3RvYnVmL2FwaS5wcm90byBcCi0gICAgc3Jj
L2dvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90byBcCi0gICAgc3JjL2dvb2dsZS9wcm90b2J1
Zi9lbXB0eS5wcm90byBcCi0gICAgc3JjL2dvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNrLnByb3Rv
IFwKLSAgICBzcmMvZ29vZ2xlL3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnByb3RvIFwKLSAgICBz
cmMvZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90byBcCi0gICAgc3JjL2dvb2dsZS9wcm90b2J1
Zi90aW1lc3RhbXAucHJvdG8gXAotICAgIHNyYy9nb29nbGUvcHJvdG9idWYvdHlwZS5wcm90byBc
Ci0gICAgc3JjL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bwotCi0jIFRlc3QgcHJvdG9z
IHdoZXJlIHRoZSBuYW1lc3BhY2UgbWF0Y2hlcyB0aGUgdGFyZ2V0IGxvY2F0aW9uCi0kUFJPVE9D
IC1Jc3JjIC0tY3NoYXJwX291dD1jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0IFwKLSAg
ICAtLWNzaGFycF9vcHQ9YmFzZV9uYW1lc3BhY2U9R29vZ2xlLlByb3RvYnVmIFwKLSAgICBzcmMv
Z29vZ2xlL3Byb3RvYnVmL21hcF91bml0dGVzdF9wcm90bzMucHJvdG8gXAotICAgIHNyYy9nb29n
bGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zLnByb3RvIFwKLSAgICBzcmMvZ29vZ2xlL3Byb3Rv
YnVmL3VuaXR0ZXN0X2ltcG9ydF9wcm90bzMucHJvdG8gXAotICAgIHNyYy9nb29nbGUvcHJvdG9i
dWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpY19wcm90bzMucHJvdG8gXAotICAgIHNyYy9nb29nbGUv
cHJvdG9idWYvdW5pdHRlc3Rfd2VsbF9rbm93bl90eXBlcy5wcm90bwotCi0jIERpZmZlcmVudCBi
YXNlIG5hbWVzcGFjZSB0byB0aGUgcHJvdG9zIGFib3ZlCi0kUFJPVE9DIC1JY3NoYXJwL3Byb3Rv
cyAtLWNzaGFycF9vdXQ9Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdCBcCi0gICAgLS1j
c2hhcnBfb3B0PWJhc2VfbmFtZXNwYWNlPVVuaXRUZXN0Lklzc3VlcyBcCi0gICAgY3NoYXJwL3By
b3Rvcy91bml0dGVzdF9pc3N1ZXMucHJvdG8KLQotIyBBZGRyZXNzQm9vayBzYW1wbGUgcHJvdG9z
Ci0kUFJPVE9DIC1JZXhhbXBsZXMgLS1jc2hhcnBfb3V0PWNzaGFycC9zcmMvQWRkcmVzc0Jvb2sg
XAotICAgIGV4YW1wbGVzL2FkZHJlc3Nib29rLnByb3RvCi0KLSRQUk9UT0MgLUljb25mb3JtYW5j
ZSAtSXNyYyAtLWNzaGFycF9vdXQ9Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuQ29uZm9ybWFu
Y2UgXAotICAgIGNvbmZvcm1hbmNlL2NvbmZvcm1hbmNlLnByb3RvCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFy
cC9wcm90b3MvdW5pdHRlc3RfaXNzdWVzLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvcHJvdG9zL3VuaXR0ZXN0X2lz
c3Vlcy5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5Zjc2MzQ0YWJlOTUx
ZDg1ZTgxNDM3YWM2ODUwMGEyODExYWYxNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9wcm90b3MvdW5pdHRlc3RfaXNzdWVzLnByb3RvCisrKyAv
ZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLXN5bnRheCA9ICJwcm90bzMiOwotCi0vLyBUaGVz
ZSBwcm90byBkZXNjcmlwdG9ycyBoYXZlIGF0IG9uZSB0aW1lIGJlZW4gcmVwb3J0ZWQgYXMgYW4g
aXNzdWUgb3IgZGVmZWN0LgotLy8gVGhleSBhcmUga2VwdCBoZXJlIHRvIHJlcGxpY2F0ZSB0aGUg
aXNzdWUsIGFuZCBjb250aW51ZSB0byB2ZXJpZnkgdGhlIGZpeC4KLQotLy8gSXNzdWU6IE5vbi0i
R29vZ2xlLlByb3RvYnVmZmVycyIgbmFtZXNwYWNlIHdpbGwgZW5zdXJlIHRoYXQgcHJvdG9idWZm
ZXIgbGlicmFyeSB0eXBlcyBhcmUgcXVhbGlmaWVkCi1vcHRpb24gY3NoYXJwX25hbWVzcGFjZSA9
ICJVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3RvcyI7Ci0KLXBhY2thZ2UgdW5pdHRlc3RfaXNzdWVz
Owotb3B0aW9uIG9wdGltaXplX2ZvciA9IFNQRUVEOwotCi0vLyBJc3N1ZSAzMDc6IHdoZW4gZ2Vu
ZXJhdGluZyBkb3VibHktbmVzdGVkIHR5cGVzLCBhbnkgcmVmZXJlbmNlcwotLy8gc2hvdWxkIGJl
IG9mIHRoZSBmb3JtIEEuVHlwZXMuQi5UeXBlcy5DLgotbWVzc2FnZSBJc3N1ZTMwNyB7Ci0gIG1l
c3NhZ2UgTmVzdGVkT25jZSB7Ci0gICAgbWVzc2FnZSBOZXN0ZWRUd2ljZSB7Ci0gICAgfQotICB9
Ci19Ci0KLS8vIE9sZCBpc3N1ZSAxMzogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Byb3RvYnVm
LWNzaGFycC1wb3J0L2lzc3Vlcy9kZXRhaWw/aWQ9MTMKLS8vIE5ldyBpc3N1ZSAzMDk6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWYvaXNzdWVzLzMwOQotIAotLy8gbWVzc2FnZSBB
IHsKLS8vICAgIG9wdGlvbmFsIGludDMyIF9BID0gMTsKLS8vIH0KLQotLy8gbWVzc2FnZSBCIHsK
LS8vICAgIG9wdGlvbmFsIGludDMyIEJfID0gMTsKLS8vIH0KLQotLy9tZXNzYWdlIEFCIHsKLS8v
ICAgIG9wdGlvbmFsIGludDMyIGFfYiA9IDE7Ci0vL30KLQotLy8gU2ltaWxhciBpc3N1ZSB3aXRo
IG51bWVyaWMgbmFtZXMKLS8vIEphdmEgY29kZSBmYWlsZWQgdG9vLCBzbyBwcm9iYWJseSBiZXN0
IGZvciB0aGlzIHRvIGJlIGEgcmVzdHJpY3Rpb24uCi0vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29t
L2dvb2dsZS9wcm90b2J1Zi9pc3N1ZXMvMzA4Ci0vLyBtZXNzYWdlIE51bWJlckZpZWxkIHsKLS8v
ICAgIG9wdGlvbmFsIGludDMyIF8wMSA9IDE7Ci0vLyB9Ci0KLS8vIGlzc3VlIDE5IC0gbmVnYXRp
dmUgZW51bSB2YWx1ZXMKLQotZW51bSBOZWdhdGl2ZUVudW0gewotICAgIE5FR0FUSVZFX0VOVU1f
WkVSTyA9IDA7Ci0gICAgRml2ZUJlbG93ID0gLTU7Ci0gICAgTWludXNPbmUgPSAtMTsKLX0KLQot
bWVzc2FnZSBOZWdhdGl2ZUVudW1NZXNzYWdlIHsKLSAgICBOZWdhdGl2ZUVudW0gdmFsdWUgPSAx
OwotICAgIHJlcGVhdGVkIE5lZ2F0aXZlRW51bSB2YWx1ZXMgPSAyIFtwYWNrZWQgPSBmYWxzZV07
Ci0gICAgcmVwZWF0ZWQgTmVnYXRpdmVFbnVtIHBhY2tlZF92YWx1ZXMgPSAzIFtwYWNrZWQ9dHJ1
ZV07Ci19Ci0KLS8vIElzc3VlIDIxOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYt
Y3NoYXJwLXBvcnQvaXNzdWVzL2RldGFpbD9pZD0yMQotLy8gRGVjb3JhdGUgZmllbGRzIHdpdGgg
W2RlcHJlY2F0ZWQ9dHJ1ZV0gYXMgW1N5c3RlbS5PYnNvbGV0ZV0KLQotbWVzc2FnZSBEZXByZWNh
dGVkQ2hpbGQgewotfQotCi1lbnVtIERlcHJlY2F0ZWRFbnVtIHsKLSAgICBERVBSRUNBVEVEX1pF
Uk8gPSAwOwotICAgIG9uZSA9IDE7Ci19Ci0KLW1lc3NhZ2UgRGVwcmVjYXRlZEZpZWxkc01lc3Nh
Z2UgewotICAgIGludDMyIFByaW1pdGl2ZVZhbHVlID0gMSBbZGVwcmVjYXRlZCA9IHRydWVdOwot
ICAgIHJlcGVhdGVkIGludDMyIFByaW1pdGl2ZUFycmF5ID0gMiBbZGVwcmVjYXRlZCA9IHRydWVd
OwotCi0gICAgRGVwcmVjYXRlZENoaWxkIE1lc3NhZ2VWYWx1ZSA9IDMgW2RlcHJlY2F0ZWQgPSB0
cnVlXTsKLSAgICByZXBlYXRlZCBEZXByZWNhdGVkQ2hpbGQgTWVzc2FnZUFycmF5ID0gNCBbZGVw
cmVjYXRlZCA9IHRydWVdOwotCi0gICAgRGVwcmVjYXRlZEVudW0gRW51bVZhbHVlID0gNSBbZGVw
cmVjYXRlZCA9IHRydWVdOwotICAgIHJlcGVhdGVkIERlcHJlY2F0ZWRFbnVtIEVudW1BcnJheSA9
IDYgW2RlcHJlY2F0ZWQgPSB0cnVlXTsKLX0KLQotLy8gSXNzdWUgNDU6IGh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9wcm90b2J1Zi1jc2hhcnAtcG9ydC9pc3N1ZXMvZGV0YWlsP2lkPTQ1Ci1tZXNz
YWdlIEl0ZW1GaWVsZCB7Ci0gIGludDMyIGl0ZW0gPSAxOwotfQotCi1tZXNzYWdlIFJlc2VydmVk
TmFtZXMgewotICAvLyBGb3JjZSBhIG5lc3RlZCB0eXBlIGNhbGxlZCBUeXBlcwotICBtZXNzYWdl
IFNvbWVOZXN0ZWRUeXBlIHsKLSAgfQotCi0gIGludDMyIHR5cGVzID0gMTsKLSAgaW50MzIgZGVz
Y3JpcHRvciA9IDI7Ci19Ci0KLW1lc3NhZ2UgVGVzdEpzb25GaWVsZE9yZGVyaW5nIHsKLSAgLy8g
VGhlc2UgZmllbGRzIGFyZSBkZWxpYmVyYXRlbHkgbm90IGRlY2xhcmVkIGluIG51bWVyaWMKLSAg
Ly8gb3JkZXIsIGFuZCB0aGUgb25lb2YgZmllbGRzIGFyZW4ndCBjb250aWd1b3VzIGVpdGhlci4K
LSAgLy8gVGhpcyBhbGxvd3MgZm9yIHJlYXNvbmFibHkgcm9idXN0IHRlc3RzIG9mIEpTT04gb3V0
cHV0Ci0gIC8vIG9yZGVyaW5nLgotICAvLyBUZXN0RmllbGRPcmRlcmluZ3MgaW4gdW5pdHRlc3Rf
cHJvdG8zLnByb3RvIGlzIHNpbWlsYXIsCi0gIC8vIGJ1dCBkb2Vzbid0IGluY2x1ZGUgb25lb2Zz
LgotICAvLyBUT0RPOiBDb25zaWRlciBhZGRpbmcgb25lb2ZzIHRvIFRlc3RGaWVsZE9yZGVyaW5n
cywgYWx0aG91Z2gKLSAgLy8gdGhhdCB3aWxsIHJlcXVpcmUgZml4aW5nIG90aGVyIHRlc3RzIGlu
IG11bHRpcGxlIHBsYXRmb3Jtcy4KLSAgLy8gQWx0ZXJuYXRpdmVseSwgY29uc2lkZXIganVzdCBh
ZGRpbmcgdGhpcyB0bwotICAvLyB1bml0dGVzdF9wcm90bzMucHJvdG8gaWYgbXVsdGlwbGUgcGxh
dGZvcm1zIHdhbnQgaXQuCi0gIAotICBpbnQzMiBwbGFpbl9pbnQzMiA9IDQ7Ci0KLSAgb25lb2Yg
bzEgewotICAgIHN0cmluZyBvMV9zdHJpbmcgPSAyOwotICAgIGludDMyIG8xX2ludDMyID0gNTsK
LSAgfQotICAKLSAgc3RyaW5nIHBsYWluX3N0cmluZyA9IDE7Ci0gIAotICBvbmVvZiBvMiB7Ci0g
ICAgaW50MzIgbzJfaW50MzIgPSA2OwotICAgIHN0cmluZyBvMl9zdHJpbmcgPSAzOwotICB9Ci0g
IAotfQotCi1tZXNzYWdlIFRlc3RKc29uTmFtZSB7Ci0gIC8vIE1lc3NhZ2UgZm9yIHRlc3Rpbmcg
dGhlIGVmZmVjdHMgZm9yIG9mIHRoZSBqc29uX25hbWUgb3B0aW9uCi0gIHN0cmluZyBuYW1lID0g
MTsKLSAgc3RyaW5nIGRlc2NyaXB0aW9uID0gMiBbanNvbl9uYW1lID0gImRlc2MiXTsKLSAgc3Ry
aW5nIGd1aWQgPSAzIFtqc29uX25hbWUgPSAiZXhpZCJdOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAv
c3JjL0FkZHJlc3NCb29rL0FkZFBlcnNvbi5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9BZGRyZXNzQm9vay9BZGRQ
ZXJzb24uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NGYxZWEyNWRmMzE1YTVi
MDc1M2E0ZDQ3YzVmMTIwM2U3OTZiMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0FkZHJlc3NCb29rL0FkZFBlcnNvbi5jcworKysgL2Rl
di9udWxsCkBAIC0xLDEzMiArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5k
IGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgot
Ci11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJv
dG9idWYuRXhhbXBsZXMuQWRkcmVzc0Jvb2sKLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBBZGRQZXJz
b24KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEJ1aWxkcyBhIHBl
cnNvbiBiYXNlZCBvbiB1c2VyIGlucHV0Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IHByaXZhdGUgc3RhdGljIFBlcnNvbiBQcm9tcHRGb3JBZGRyZXNzKFRleHRSZWFkZXIgaW5wdXQs
IFRleHRXcml0ZXIgb3V0cHV0KQotICAgICAgICB7Ci0gICAgICAgICAgICBQZXJzb24gcGVyc29u
ID0gbmV3IFBlcnNvbigpOwotCi0gICAgICAgICAgICBvdXRwdXQuV3JpdGUoIkVudGVyIHBlcnNv
biBJRDogIik7Ci0gICAgICAgICAgICBwZXJzb24uSWQgPSBpbnQuUGFyc2UoaW5wdXQuUmVhZExp
bmUoKSk7Ci0KLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZSgiRW50ZXIgbmFtZTogIik7Ci0gICAg
ICAgICAgICBwZXJzb24uTmFtZSA9IGlucHV0LlJlYWRMaW5lKCk7Ci0KLSAgICAgICAgICAgIG91
dHB1dC5Xcml0ZSgiRW50ZXIgZW1haWwgYWRkcmVzcyAoYmxhbmsgZm9yIG5vbmUpOiAiKTsKLSAg
ICAgICAgICAgIHN0cmluZyBlbWFpbCA9IGlucHV0LlJlYWRMaW5lKCk7Ci0gICAgICAgICAgICBp
ZiAoZW1haWwuTGVuZ3RoID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwZXJz
b24uRW1haWwgPSBlbWFpbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgd2hpbGUgKHRy
dWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LldyaXRlKCJFbnRlciBh
IHBob25lIG51bWJlciAob3IgbGVhdmUgYmxhbmsgdG8gZmluaXNoKTogIik7Ci0gICAgICAgICAg
ICAgICAgc3RyaW5nIG51bWJlciA9IGlucHV0LlJlYWRMaW5lKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKG51bWJlci5MZW5ndGggPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFBlcnNv
bi5UeXBlcy5QaG9uZU51bWJlciBwaG9uZU51bWJlciA9IG5ldyBQZXJzb24uVHlwZXMuUGhvbmVO
dW1iZXIgeyBOdW1iZXIgPSBudW1iZXIgfTsKLQotICAgICAgICAgICAgICAgIG91dHB1dC5Xcml0
ZSgiSXMgdGhpcyBhIG1vYmlsZSwgaG9tZSwgb3Igd29yayBwaG9uZT8gIik7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIHR5cGUgPSBpbnB1dC5SZWFkTGluZSgpOwotICAgICAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Im1vYmlsZSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlci5UeXBlID0gUGVy
c29uLlR5cGVzLlBob25lVHlwZS5Nb2JpbGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiaG9tZSI6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwaG9uZU51bWJlci5UeXBlID0gUGVyc29uLlR5cGVzLlBob25lVHlwZS5Ib21lOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIndv
cmsiOgotICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVOdW1iZXIuVHlwZSA9IFBlcnNvbi5U
eXBlcy5QaG9uZVR5cGUuV29yazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LldyaXRlKCJVbmtub3duIHBob25lIHR5cGUuIFVzaW5nIGRlZmF1bHQuIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBwZXJzb24uUGhvbmVzLkFkZChwaG9uZU51bWJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcGVyc29uOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gRW50cnkgcG9pbnQgLSBsb2FkcyBhbiBleGlzdGluZyBhZGRyZXNzYm9vayBv
ciBjcmVhdGVzIGEgbmV3IG9uZSwKLSAgICAgICAgLy8vIHRoZW4gd3JpdGVzIGl0IGJhY2sgdG8g
dGhlIGZpbGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMg
aW50IE1haW4oc3RyaW5nW10gYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFyZ3Mu
TGVuZ3RoICE9IDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29uc29sZS5FcnJv
ci5Xcml0ZUxpbmUoIlVzYWdlOiAgQWRkUGVyc29uIEFERFJFU1NfQk9PS19GSUxFIik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBZGRy
ZXNzQm9vayBhZGRyZXNzQm9vazsKLQotICAgICAgICAgICAgaWYgKEZpbGUuRXhpc3RzKGFyZ3Nb
MF0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVzaW5nIChTdHJlYW0gZmlsZSA9
IEZpbGUuT3BlblJlYWQoYXJnc1swXSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBhZGRyZXNzQm9vayA9IEFkZHJlc3NCb29rLlBhcnNlci5QYXJzZUZyb20oZmlsZSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH06IEZpbGUg
bm90IGZvdW5kLiBDcmVhdGluZyBhIG5ldyBmaWxlLiIsIGFyZ3NbMF0pOwotICAgICAgICAgICAg
ICAgIGFkZHJlc3NCb29rID0gbmV3IEFkZHJlc3NCb29rKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIEFkZCBhbiBhZGRyZXNzLgotICAgICAgICAgICAgYWRkcmVzc0Jvb2suUGVv
cGxlLkFkZChQcm9tcHRGb3JBZGRyZXNzKENvbnNvbGUuSW4sIENvbnNvbGUuT3V0KSk7Ci0KLSAg
ICAgICAgICAgIC8vIFdyaXRlIHRoZSBuZXcgYWRkcmVzcyBib29rIGJhY2sgdG8gZGlzay4KLSAg
ICAgICAgICAgIHVzaW5nIChTdHJlYW0gb3V0cHV0ID0gRmlsZS5PcGVuV3JpdGUoYXJnc1swXSkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYWRkcmVzc0Jvb2suV3JpdGVUbyhvdXRw
dXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3Jj
L0FkZHJlc3NCb29rL0FkZHJlc3NCb29rLmNzcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9BZGRyZXNzQm9vay9B
ZGRyZXNzQm9vay5jc3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTY0N2Zj
OGMzYWY1ZmVmNjQ2ZmZkODI3ZGY5YzlhN2E2MzhkNzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0FkZHJlc3NCb29rL0FkZHJlc3NCb29r
LmNzcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVm
YXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9k
ZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KLSAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPENvbmZpZ3Vy
YXRpb24gQ29uZGl0aW9uPSIgJyQoQ29uZmlndXJhdGlvbiknID09ICcnICI+RGVidWc8L0NvbmZp
Z3VyYXRpb24+Ci0gICAgPFBsYXRmb3JtIENvbmRpdGlvbj0iICckKFBsYXRmb3JtKScgPT0gJycg
Ij5BbnlDUFU8L1BsYXRmb3JtPgotICAgIDxQcm9kdWN0VmVyc2lvbj45LjAuMzA3Mjk8L1Byb2R1
Y3RWZXJzaW9uPgotICAgIDxTY2hlbWFWZXJzaW9uPjIuMDwvU2NoZW1hVmVyc2lvbj4KLSAgICA8
UHJvamVjdEd1aWQ+e0EzMUY1RkIyLTRGRjMtNDMyQS1CMzVCLTVDRDIwMzYwNjMxMX08L1Byb2pl
Y3RHdWlkPgotICAgIDxPdXRwdXRUeXBlPkV4ZTwvT3V0cHV0VHlwZT4KLSAgICA8QXBwRGVzaWdu
ZXJGb2xkZXI+UHJvcGVydGllczwvQXBwRGVzaWduZXJGb2xkZXI+Ci0gICAgPFJvb3ROYW1lc3Bh
Y2U+R29vZ2xlLlByb3RvYnVmLkV4YW1wbGVzLkFkZHJlc3NCb29rPC9Sb290TmFtZXNwYWNlPgot
ICAgIDxBc3NlbWJseU5hbWU+QWRkcmVzc0Jvb2s8L0Fzc2VtYmx5TmFtZT4KLSAgICA8VGFyZ2V0
RnJhbWV3b3JrVmVyc2lvbj52NC41PC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgotICAgIDxGaWxl
QWxpZ25tZW50PjUxMjwvRmlsZUFsaWdubWVudD4KLSAgICA8U3RhcnR1cE9iamVjdD5Hb29nbGUu
UHJvdG9idWYuRXhhbXBsZXMuQWRkcmVzc0Jvb2suUHJvZ3JhbTwvU3RhcnR1cE9iamVjdD4KLSAg
ICA8VGFyZ2V0RnJhbWV3b3JrUHJvZmlsZT4KLSAgICA8L1RhcmdldEZyYW1ld29ya1Byb2ZpbGU+
Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIgJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknID09ICdEZWJ1Z3xBbnlDUFUnICI+Ci0gICAgPERlYnVn
U3ltYm9scz50cnVlPC9EZWJ1Z1N5bWJvbHM+Ci0gICAgPERlYnVnVHlwZT5mdWxsPC9EZWJ1Z1R5
cGU+Ci0gICAgPE9wdGltaXplPmZhbHNlPC9PcHRpbWl6ZT4KLSAgICA8T3V0cHV0UGF0aD5iaW5c
RGVidWc8L091dHB1dFBhdGg+Ci0gICAgPEludGVybWVkaWF0ZU91dHB1dFBhdGg+b2JqXERlYnVn
XDwvSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KLSAgICA8RGVmaW5lQ29uc3RhbnRzPkRFQlVHO1RS
QUNFPC9EZWZpbmVDb25zdGFudHM+Ci0gICAgPEVycm9yUmVwb3J0PnByb21wdDwvRXJyb3JSZXBv
cnQ+Ci0gICAgPFdhcm5pbmdMZXZlbD40PC9XYXJuaW5nTGV2ZWw+Ci0gICAgPE5vU3RkTGliPnRy
dWU8L05vU3RkTGliPgotICAgIDxHZW5lcmF0ZVNlcmlhbGl6YXRpb25Bc3NlbWJsaWVzPk9mZjwv
R2VuZXJhdGVTZXJpYWxpemF0aW9uQXNzZW1ibGllcz4KLSAgICA8UHJlZmVyMzJCaXQ+ZmFsc2U8
L1ByZWZlcjMyQml0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRp
dGlvbj0iICckKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnUmVsZWFzZXxBbnlDUFUn
ICI+Ci0gICAgPERlYnVnVHlwZT5wZGJvbmx5PC9EZWJ1Z1R5cGU+Ci0gICAgPE9wdGltaXplPnRy
dWU8L09wdGltaXplPgotICAgIDxPdXRwdXRQYXRoPmJpblxSZWxlYXNlPC9PdXRwdXRQYXRoPgot
ICAgIDxJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPm9ialxSZWxlYXNlXDwvSW50ZXJtZWRpYXRlT3V0
cHV0UGF0aD4KLSAgICA8RGVmaW5lQ29uc3RhbnRzPlRSQUNFPC9EZWZpbmVDb25zdGFudHM+Ci0g
ICAgPEVycm9yUmVwb3J0PnByb21wdDwvRXJyb3JSZXBvcnQ+Ci0gICAgPFdhcm5pbmdMZXZlbD40
PC9XYXJuaW5nTGV2ZWw+Ci0gICAgPE5vU3RkTGliPnRydWU8L05vU3RkTGliPgotICAgIDxHZW5l
cmF0ZVNlcmlhbGl6YXRpb25Bc3NlbWJsaWVzPk9mZjwvR2VuZXJhdGVTZXJpYWxpemF0aW9uQXNz
ZW1ibGllcz4KLSAgICA8UHJlZmVyMzJCaXQ+ZmFsc2U8L1ByZWZlcjMyQml0PgotICA8L1Byb3Bl
cnR5R3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJtc2Nvcmxp
YiIgLz4KLSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbSIgLz4KLSAgICA8UmVmZXJlbmNl
IEluY2x1ZGU9IlN5c3RlbS5EYXRhIiAvPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVt
LlhtbCIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENvbXBpbGUgSW5j
bHVkZT0iQWRkUGVyc29uLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IkFkZHJlc3Nib29r
LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlNhbXBsZVVzYWdlLmNzIiAvPgotICAgIDxD
b21waWxlIEluY2x1ZGU9Ikxpc3RQZW9wbGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0i
UHJvZ3JhbS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJQcm9wZXJ0aWVzXEFzc2VtYmx5
SW5mby5jcyIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFByb2plY3RS
ZWZlcmVuY2UgSW5jbHVkZT0iLi5cR29vZ2xlLlByb3RvYnVmXEdvb2dsZS5Qcm90b2J1Zi5jc3By
b2oiPgotICAgICAgPFByb2plY3Q+ezY5MDhCRENFLUQ5MjUtNDNGMy05NEFDLUE1MzFFNkRGMjU5
MX08L1Byb2plY3Q+Ci0gICAgICA8TmFtZT5Hb29nbGUuUHJvdG9idWY8L05hbWU+Ci0gICAgPC9Q
cm9qZWN0UmVmZXJlbmNlPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSJhcHAuY29uZmlnIiAvPgotICA8L0l0ZW1Hcm91cD4KLSAgPEltcG9ydCBQcm9q
ZWN0PSIkKE1TQnVpbGRUb29sc1BhdGgpXE1pY3Jvc29mdC5DU2hhcnAudGFyZ2V0cyIgLz4KLSAg
PCEtLSBUbyBtb2RpZnkgeW91ciBidWlsZCBwcm9jZXNzLCBhZGQgeW91ciB0YXNrIGluc2lkZSBv
bmUgb2YgdGhlIHRhcmdldHMgYmVsb3cgYW5kIHVuY29tbWVudCBpdC4gCi0gICAgICAgT3RoZXIg
c2ltaWxhciBleHRlbnNpb24gcG9pbnRzIGV4aXN0LCBzZWUgTWljcm9zb2Z0LkNvbW1vbi50YXJn
ZXRzLgotICA8VGFyZ2V0IE5hbWU9IkJlZm9yZUJ1aWxkIj4KLSAgPC9UYXJnZXQ+Ci0gIDxUYXJn
ZXQgTmFtZT0iQWZ0ZXJCdWlsZCI+Ci0gIDwvVGFyZ2V0PgotICAtLT4KLTwvUHJvamVjdD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvQWRkcmVzc0Jv
b2svQWRkcmVzc2Jvb2suY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvQWRkcmVzc0Jvb2svQWRkcmVzc2Jvb2suY3MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MmUxY2I2YTJjMjkwODJkNmVjODZjYmNi
N2JhNjkwM2QwMjg2NjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9jc2hhcnAvc3JjL0FkZHJlc3NCb29rL0FkZHJlc3Nib29rLmNzCisrKyAvZGV2L251bGwK
QEAgLTEsNDczICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNv
bXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGFkZHJlc3Nib29rLnByb3RvCi0jcHJh
Z21hIHdhcm5pbmcgZGlzYWJsZSAxNTkxLCAwNjEyLCAzMDIxCi0jcmVnaW9uIERlc2lnbmVyIGdl
bmVyYXRlZCBjb2RlCi0KLXVzaW5nIHBiID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWY7Ci11c2lu
ZyBwYmMgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5Db2xsZWN0aW9uczsKLXVzaW5nIHBiciA9
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb247Ci11c2luZyBzY2cgPSBnbG9iYWw6
OlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5F
eGFtcGxlcy5BZGRyZXNzQm9vayB7Ci0KLSAgLy8vIDxzdW1tYXJ5PkhvbGRlciBmb3IgcmVmbGVj
dGlvbiBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgZnJvbSBhZGRyZXNzYm9vay5wcm90bzwvc3VtbWFy
eT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRy
aWJ1dGUoKV0KLSAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIGNsYXNzIEFkZHJlc3Nib29rUmVmbGVj
dGlvbiB7Ci0KLSAgICAjcmVnaW9uIERlc2NyaXB0b3IKLSAgICAvLy8gPHN1bW1hcnk+RmlsZSBk
ZXNjcmlwdG9yIGZvciBhZGRyZXNzYm9vay5wcm90bzwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3Rh
dGljIHBicjo6RmlsZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4g
ZGVzY3JpcHRvcjsgfQotICAgIH0KLSAgICBwcml2YXRlIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlw
dG9yIGRlc2NyaXB0b3I7Ci0KLSAgICBzdGF0aWMgQWRkcmVzc2Jvb2tSZWZsZWN0aW9uKCkgewot
ICAgICAgYnl0ZVtdIGRlc2NyaXB0b3JEYXRhID0gZ2xvYmFsOjpTeXN0ZW0uQ29udmVydC5Gcm9t
QmFzZTY0U3RyaW5nKAotICAgICAgICAgIHN0cmluZy5Db25jYXQoCi0gICAgICAgICAgICAiQ2hG
aFpHUnlaWE56WW05dmF5NXdjbTkwYnhJSWRIVjBiM0pwWVd3aTFRRUtCbEJsY25OdmJoSU1DZ1J1
IiwKLSAgICAgICAgICAgICJZVzFsR0FFZ0FTZ0pFZ29LQW1sa0dBSWdBU2dGRWcwS0JXVnRZV2xz
R0FNZ0FTZ0pFaXdLQm5Cb2IyNWwiLAotICAgICAgICAgICAgImN4Z0VJQU1vQ3pJY0xuUjFkRzl5
YVdGc0xsQmxjbk52Ymk1UWFHOXVaVTUxYldKbGNocEhDZ3RRYUc5dSIsCi0gICAgICAgICAgICAi
WlU1MWJXSmxjaElPQ2dadWRXMWlaWElZQVNBQktBa1NLQW9FZEhsd1pSZ0NJQUVvRGpJYUxuUjFk
Rzl5IiwKLSAgICAgICAgICAgICJhV0ZzTGxCbGNuTnZiaTVRYUc5dVpWUjVjR1VpS3dvSlVHaHZi
bVZVZVhCbEVnb0tCazFQUWtsTVJSQUEiLAotICAgICAgICAgICAgIkVnZ0tCRWhQVFVVUUFSSUlD
Z1JYVDFKTEVBSWlMd29MUVdSa2NtVnpjMEp2YjJzU0lBb0djR1Z2Y0d4bCIsCi0gICAgICAgICAg
ICAiR0FFZ0F5Z0xNaEF1ZEhWMGIzSnBZV3d1VUdWeWMyOXVRbEFLRkdOdmJTNWxlR0Z0Y0d4bExu
UjFkRzl5IiwKLSAgICAgICAgICAgICJhV0ZzUWhGQlpHUnlaWE56UW05dmExQnliM1J2YzZvQ0pF
ZHZiMmRzWlM1UWNtOTBiMkoxWmk1RmVHRnQiLAotICAgICAgICAgICAgImNHeGxjeTVCWkdSeVpY
TnpRbTl2YTJJR2NISnZkRzh6IikpOwotICAgICAgZGVzY3JpcHRvciA9IHBicjo6RmlsZURlc2Ny
aXB0b3IuRnJvbUdlbmVyYXRlZENvZGUoZGVzY3JpcHRvckRhdGEsCi0gICAgICAgICAgbmV3IHBi
cjo6RmlsZURlc2NyaXB0b3JbXSB7IH0sCi0gICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xy
VHlwZUluZm8obnVsbCwgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm9bXSB7Ci0gICAgICAg
ICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuRXhhbXBsZXMuQWRkcmVzc0Jvb2suUGVyc29uKSwgZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuRXhhbXBsZXMuQWRkcmVzc0Jvb2suUGVyc29uLlBhcnNlciwgbmV3W117ICJOYW1lIiwg
IklkIiwgIkVtYWlsIiwgIlBob25lcyIgfSwgbnVsbCwgbmV3W117IHR5cGVvZihnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5FeGFtcGxlcy5BZGRyZXNzQm9vay5QZXJzb24uVHlwZXMuUGhvbmVUeXBl
KSB9LCBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIHsgbmV3IHBicjo6R2VuZXJhdGVk
Q2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLkV4YW1wbGVzLkFkZHJl
c3NCb29rLlBlcnNvbi5UeXBlcy5QaG9uZU51bWJlciksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LkV4YW1wbGVzLkFkZHJlc3NCb29rLlBlcnNvbi5UeXBlcy5QaG9uZU51bWJlci5QYXJzZXIsIG5l
d1tdeyAiTnVtYmVyIiwgIlR5cGUiIH0sIG51bGwsIG51bGwsIG51bGwpfSksCi0gICAgICAgICAg
ICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuRXhhbXBsZXMuQWRkcmVzc0Jvb2suQWRkcmVzc0Jvb2spLCBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5FeGFtcGxlcy5BZGRyZXNzQm9vay5BZGRyZXNzQm9vay5QYXJzZXIsIG5ld1tdeyAi
UGVvcGxlIiB9LCBudWxsLCBudWxsLCBudWxsKQotICAgICAgICAgIH0pKTsKLSAgICB9Ci0gICAg
I2VuZHJlZ2lvbgotCi0gIH0KLSAgI3JlZ2lvbiBNZXNzYWdlcwotICAvLy8gPHN1bW1hcnk+Ci0g
IC8vLyAgW1NUQVJUIG1lc3NhZ2VzXQotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0
ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMg
c2VhbGVkIHBhcnRpYWwgY2xhc3MgUGVyc29uIDogcGI6OklNZXNzYWdlPFBlcnNvbj4gewotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFBlcnNvbj4gX3BhcnNl
ciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxQZXJzb24+KCgpID0+IG5ldyBQZXJzb24oKSk7Ci0g
ICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxQZXJzb24+IFBhcnNlciB7IGdldCB7
IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVz
Y3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5FeGFtcGxlcy5BZGRyZXNzQm9vay5BZGRyZXNzYm9va1JlZmxlY3Rpb24uRGVzY3Jp
cHRvci5NZXNzYWdlVHlwZXNbMF07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlw
dG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlw
dG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFBlcnNvbigpIHsKLSAgICAgIE9uQ29uc3RydWN0
aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAg
ICBwdWJsaWMgUGVyc29uKFBlcnNvbiBvdGhlcikgOiB0aGlzKCkgewotICAgICAgbmFtZV8gPSBv
dGhlci5uYW1lXzsKLSAgICAgIGlkXyA9IG90aGVyLmlkXzsKLSAgICAgIGVtYWlsXyA9IG90aGVy
LmVtYWlsXzsKLSAgICAgIHBob25lc18gPSBvdGhlci5waG9uZXNfLkNsb25lKCk7Ci0gICAgfQot
Ci0gICAgcHVibGljIFBlcnNvbiBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgUGVyc29uKHRo
aXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibmFt
ZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTmFtZUZpZWxkTnVtYmVy
ID0gMTsKLSAgICBwcml2YXRlIHN0cmluZyBuYW1lXyA9ICIiOwotICAgIHB1YmxpYyBzdHJpbmcg
TmFtZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gbmFtZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IG5hbWVfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1
ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAiaWQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IElkRmllbGRO
dW1iZXIgPSAyOwotICAgIHByaXZhdGUgaW50IGlkXzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
Ly8vICBVbmlxdWUgSUQgbnVtYmVyIGZvciB0aGlzIHBlcnNvbi4KLSAgICAvLy8gPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBpbnQgSWQgewotICAgICAgZ2V0IHsgcmV0dXJuIGlkXzsgfQotICAgICAg
c2V0IHsKLSAgICAgICAgaWRfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxz
dW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJlbWFpbCIgZmllbGQuPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBjb25zdCBpbnQgRW1haWxGaWVsZE51bWJlciA9IDM7Ci0gICAgcHJpdmF0ZSBzdHJp
bmcgZW1haWxfID0gIiI7Ci0gICAgcHVibGljIHN0cmluZyBFbWFpbCB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gZW1haWxfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBlbWFpbF8gPSBwYjo6UHJvdG9Q
cmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJwaG9uZXMiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFBob25lc0ZpZWxkTnVtYmVyID0gNDsK
LSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5FeGFtcGxlcy5BZGRyZXNzQm9vay5QZXJzb24uVHlwZXMuUGhvbmVOdW1iZXI+
IF9yZXBlYXRlZF9waG9uZXNfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNz
YWdlKDM0LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5FeGFtcGxlcy5BZGRyZXNzQm9vay5QZXJz
b24uVHlwZXMuUGhvbmVOdW1iZXIuUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6
UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5FeGFtcGxlcy5BZGRyZXNzQm9v
ay5QZXJzb24uVHlwZXMuUGhvbmVOdW1iZXI+IHBob25lc18gPSBuZXcgcGJjOjpSZXBlYXRlZEZp
ZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLkV4YW1wbGVzLkFkZHJlc3NCb29rLlBlcnNvbi5U
eXBlcy5QaG9uZU51bWJlcj4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLkV4YW1wbGVzLkFkZHJlc3NCb29rLlBlcnNvbi5UeXBlcy5QaG9u
ZU51bWJlcj4gUGhvbmVzIHsKLSAgICAgIGdldCB7IHJldHVybiBwaG9uZXNfOyB9Ci0gICAgfQot
Ci0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAg
cmV0dXJuIEVxdWFscyhvdGhlciBhcyBQZXJzb24pOwotICAgIH0KLQotICAgIHB1YmxpYyBib29s
IEVxdWFscyhQZXJzb24gb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIs
IG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZl
cmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
fQotICAgICAgaWYgKE5hbWUgIT0gb3RoZXIuTmFtZSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KElkICE9IG90aGVyLklkKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoRW1haWwgIT0gb3RoZXIu
RW1haWwpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFwaG9uZXNfLkVxdWFscyhvdGhlci5waG9u
ZXNfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVi
bGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAg
ICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSBoYXNoIF49IE5hbWUuR2V0SGFzaENvZGUoKTsKLSAg
ICAgIGlmIChJZCAhPSAwKSBoYXNoIF49IElkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoRW1h
aWwuTGVuZ3RoICE9IDApIGhhc2ggXj0gRW1haWwuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2gg
Xj0gcGhvbmVzXy5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0g
ICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6
SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVi
bGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBp
ZiAoTmFtZS5MZW5ndGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTApOwot
ICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoTmFtZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoSWQg
IT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTYpOwotICAgICAgICBvdXRwdXQu
V3JpdGVJbnQzMihJZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoRW1haWwuTGVuZ3RoICE9IDApIHsK
LSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDI2KTsKLSAgICAgICAgb3V0cHV0LldyaXRlU3Ry
aW5nKEVtYWlsKTsKLSAgICAgIH0KLSAgICAgIHBob25lc18uV3JpdGVUbyhvdXRwdXQsIF9yZXBl
YXRlZF9waG9uZXNfY29kZWMpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6
ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7
Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5n
U2l6ZShOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmIChJZCAhPSAwKSB7Ci0gICAgICAgIHNpemUg
Kz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKElkKTsKLSAgICAg
IH0KLSAgICAgIGlmIChFbWFpbC5MZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoRW1haWwpOwotICAgICAgfQot
ICAgICAgc2l6ZSArPSBwaG9uZXNfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3Bob25lc19jb2Rl
Yyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZy
b20oUGVyc29uIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTmFtZS5MZW5ndGggIT0gMCkgewotICAg
ICAgICBOYW1lID0gb3RoZXIuTmFtZTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5JZCAhPSAw
KSB7Ci0gICAgICAgIElkID0gb3RoZXIuSWQ7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuRW1h
aWwuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgRW1haWwgPSBvdGhlci5FbWFpbDsKLSAgICAgIH0K
LSAgICAgIHBob25lc18uQWRkKG90aGVyLnBob25lc18pOwotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0
YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAg
ICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNr
aXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsK
LSAgICAgICAgICAgIE5hbWUgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxNjogewotICAgICAgICAgICAgSWQgPSBp
bnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBjYXNlIDI2OiB7Ci0gICAgICAgICAgICBFbWFpbCA9IGlucHV0LlJlYWRTdHJpbmcoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM0OiB7Ci0g
ICAgICAgICAgICBwaG9uZXNfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcGhvbmVz
X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLQotICAgICNyZWdpb24gTmVzdGVkIHR5cGVzCi0gICAgLy8vIDxzdW1tYXJ5
PkNvbnRhaW5lciBmb3IgbmVzdGVkIHR5cGVzIGRlY2xhcmVkIGluIHRoZSBQZXJzb24gbWVzc2Fn
ZSB0eXBlLjwvc3VtbWFyeT4KLSAgICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdn
ZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICAgIHB1YmxpYyBzdGF0aWMgcGFydGlhbCBjbGFz
cyBUeXBlcyB7Ci0gICAgICBwdWJsaWMgZW51bSBQaG9uZVR5cGUgewotICAgICAgICBbcGJyOjpP
cmlnaW5hbE5hbWUoIk1PQklMRSIpXSBNb2JpbGUgPSAwLAotICAgICAgICBbcGJyOjpPcmlnaW5h
bE5hbWUoIkhPTUUiKV0gSG9tZSA9IDEsCi0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiV09S
SyIpXSBXb3JrID0gMiwKLSAgICAgIH0KLQotICAgICAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0
aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgICAgIHB1YmxpYyBzZWFsZWQg
cGFydGlhbCBjbGFzcyBQaG9uZU51bWJlciA6IHBiOjpJTWVzc2FnZTxQaG9uZU51bWJlcj4gewot
ICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxQaG9uZU51
bWJlcj4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxQaG9uZU51bWJlcj4oKCkgPT4g
bmV3IFBob25lTnVtYmVyKCkpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFy
c2VyPFBob25lTnVtYmVyPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAg
ICAgICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3Igewot
ICAgICAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5FeGFtcGxlcy5B
ZGRyZXNzQm9vay5QZXJzb24uRGVzY3JpcHRvci5OZXN0ZWRUeXBlc1swXTsgfQotICAgICAgICB9
Ci0KLSAgICAgICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRv
ciB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHB1YmxpYyBQaG9uZU51bWJlcigpIHsKLSAgICAgICAgICBPbkNvbnN0cnVjdGlvbigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0K
LSAgICAgICAgcHVibGljIFBob25lTnVtYmVyKFBob25lTnVtYmVyIG90aGVyKSA6IHRoaXMoKSB7
Ci0gICAgICAgICAgbnVtYmVyXyA9IG90aGVyLm51bWJlcl87Ci0gICAgICAgICAgdHlwZV8gPSBv
dGhlci50eXBlXzsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBQaG9uZU51bWJlciBDbG9u
ZSgpIHsKLSAgICAgICAgICByZXR1cm4gbmV3IFBob25lTnVtYmVyKHRoaXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJudW1iZXIiIGZp
ZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBOdW1iZXJGaWVsZE51bWJl
ciA9IDE7Ci0gICAgICAgIHByaXZhdGUgc3RyaW5nIG51bWJlcl8gPSAiIjsKLSAgICAgICAgcHVi
bGljIHN0cmluZyBOdW1iZXIgewotICAgICAgICAgIGdldCB7IHJldHVybiBudW1iZXJfOyB9Ci0g
ICAgICAgICAgc2V0IHsKLSAgICAgICAgICAgIG51bWJlcl8gPSBwYjo6UHJvdG9QcmVjb25kaXRp
b25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ0eXBlIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBpbnQgVHlwZUZpZWxkTnVtYmVyID0g
MjsKLSAgICAgICAgcHJpdmF0ZSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5FeGFtcGxlcy5BZGRy
ZXNzQm9vay5QZXJzb24uVHlwZXMuUGhvbmVUeXBlIHR5cGVfID0gMDsKLSAgICAgICAgcHVibGlj
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLkV4YW1wbGVzLkFkZHJlc3NCb29rLlBlcnNvbi5UeXBl
cy5QaG9uZVR5cGUgVHlwZSB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIHR5cGVfOyB9Ci0gICAg
ICAgICAgc2V0IHsKLSAgICAgICAgICAgIHR5cGVfID0gdmFsdWU7Ci0gICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhl
cikgewotICAgICAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgUGhvbmVOdW1iZXIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2wgRXF1YWxzKFBob25lTnVtYmVyIG90aGVyKSB7
Ci0gICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKFJlZmVyZW5jZUVx
dWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
IH0KLSAgICAgICAgICBpZiAoTnVtYmVyICE9IG90aGVyLk51bWJlcikgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgIGlmIChUeXBlICE9IG90aGVyLlR5cGUpIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBpbnQg
R2V0SGFzaENvZGUoKSB7Ci0gICAgICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgICAgIGlmIChO
dW1iZXIuTGVuZ3RoICE9IDApIGhhc2ggXj0gTnVtYmVyLkdldEhhc2hDb2RlKCk7Ci0gICAgICAg
ICAgaWYgKFR5cGUgIT0gMCkgaGFzaCBePSBUeXBlLkdldEhhc2hDb2RlKCk7Ci0gICAgICAgICAg
cmV0dXJuIGhhc2g7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5n
IFRvU3RyaW5nKCkgewotICAgICAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdu
b3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBXcml0
ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgICAgICBpZiAoTnVtYmVy
Lkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTApOwotICAg
ICAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKE51bWJlcik7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGlmIChUeXBlICE9IDApIHsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxNik7
Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVFbnVtKChpbnQpIFR5cGUpOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAg
ICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICAgICAgaWYgKE51bWJlci5MZW5ndGggIT0gMCkgewot
ICAgICAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJp
bmdTaXplKE51bWJlcik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChUeXBlICE9IDApIHsK
LSAgICAgICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlRW51
bVNpemUoKGludCkgVHlwZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBzaXplOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKFBob25lTnVtYmVyIG90
aGVyKSB7Ci0gICAgICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKG90aGVyLk51bWJlci5MZW5ndGggIT0gMCkg
ewotICAgICAgICAgICAgTnVtYmVyID0gb3RoZXIuTnVtYmVyOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBpZiAob3RoZXIuVHlwZSAhPSAwKSB7Ci0gICAgICAgICAgICBUeXBlID0gb3RoZXIuVHlw
ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBNZXJnZUZy
b20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgICAgICB1aW50IHRhZzsKLSAg
ICAgICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICAg
ICAgc3dpdGNoKHRhZykgewotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgICAgIE51bWJlciA9IGlucHV0LlJlYWRTdHJp
bmcoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICBjYXNlIDE2OiB7Ci0gICAgICAgICAgICAgICAgdHlwZV8gPSAoZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuRXhhbXBsZXMuQWRkcmVzc0Jvb2suUGVyc29uLlR5cGVzLlBob25lVHlwZSkgaW5w
dXQuUmVhZEVudW0oKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB9Ci0KLSAgICB9
Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgT3VyIGFk
ZHJlc3MgYm9vayBmaWxlIGlzIGp1c3Qgb25lIG9mIHRoZXNlLgotICAvLy8gPC9zdW1tYXJ5Pgot
ICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0
ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgQWRkcmVzc0Jvb2sgOiBwYjo6SU1l
c3NhZ2U8QWRkcmVzc0Jvb2s+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVz
c2FnZVBhcnNlcjxBZGRyZXNzQm9vaz4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxB
ZGRyZXNzQm9vaz4oKCkgPT4gbmV3IEFkZHJlc3NCb29rKCkpOwotICAgIHB1YmxpYyBzdGF0aWMg
cGI6Ok1lc3NhZ2VQYXJzZXI8QWRkcmVzc0Jvb2s+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFy
c2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNj
cmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5FeGFt
cGxlcy5BZGRyZXNzQm9vay5BZGRyZXNzYm9va1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdl
VHlwZXNbMV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVz
c2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAg
fQotCi0gICAgcHVibGljIEFkZHJlc3NCb29rKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsK
LSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1Ymxp
YyBBZGRyZXNzQm9vayhBZGRyZXNzQm9vayBvdGhlcikgOiB0aGlzKCkgewotICAgICAgcGVvcGxl
XyA9IG90aGVyLnBlb3BsZV8uQ2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQWRkcmVzc0Jv
b2sgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IEFkZHJlc3NCb29rKHRoaXMpOwotICAgIH0K
LQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicGVvcGxlIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBQZW9wbGVGaWVsZE51bWJlciA9IDE7Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuRXhhbXBsZXMuQWRkcmVzc0Jvb2suUGVyc29uPiBfcmVwZWF0ZWRfcGVvcGxlX2Nv
ZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgxMCwgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuRXhhbXBsZXMuQWRkcmVzc0Jvb2suUGVyc29uLlBhcnNlcik7Ci0gICAgcHJp
dmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
RXhhbXBsZXMuQWRkcmVzc0Jvb2suUGVyc29uPiBwZW9wbGVfID0gbmV3IHBiYzo6UmVwZWF0ZWRG
aWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5FeGFtcGxlcy5BZGRyZXNzQm9vay5QZXJzb24+
KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5FeGFtcGxlcy5BZGRyZXNzQm9vay5QZXJzb24+IFBlb3BsZSB7Ci0gICAgICBnZXQgeyByZXR1
cm4gcGVvcGxlXzsgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhv
YmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgQWRkcmVzc0Jvb2sp
OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhBZGRyZXNzQm9vayBvdGhlcikgewot
ICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykp
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZighcGVvcGxlXy5FcXVh
bHMob3RoZXIucGVvcGxlXykpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQg
aGFzaCA9IDE7Ci0gICAgICBoYXNoIF49IHBlb3BsZV8uR2V0SGFzaENvZGUoKTsKLSAgICAgIHJl
dHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmco
KSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRo
aXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtIG91dHB1dCkgewotICAgICAgcGVvcGxlXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3Bl
b3BsZV9jb2RlYyk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewot
ICAgICAgaW50IHNpemUgPSAwOwotICAgICAgc2l6ZSArPSBwZW9wbGVfLkNhbGN1bGF0ZVNpemUo
X3JlcGVhdGVkX3Blb3BsZV9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oQWRkcmVzc0Jvb2sgb3RoZXIpIHsKLSAgICAgIGlmIChv
dGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHBlb3BsZV8u
QWRkKG90aGVyLnBlb3BsZV8pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShw
Yjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGls
ZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIHBl
b3BsZV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9wZW9wbGVfY29kZWMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
Ci0gIH0KLQotICAjZW5kcmVnaW9uCi0KLX0KLQotI2VuZHJlZ2lvbiBEZXNpZ25lciBnZW5lcmF0
ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0FkZHJlc3NCb29rL0xpc3RQZW9wbGUuY3Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvQWRkcmVzc0Jvb2svTGlzdFBlb3BsZS5jcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzE1NzIyODlkNGM4OTFhNDdiZDA0NmE5YmY0NmQ1ZWE1YTg2YWQ3OC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvQWRk
cmVzc0Jvb2svTGlzdFBlb3BsZS5jcworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLe+7
vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3Rl
bS5JTzsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5FeGFtcGxlcy5BZGRyZXNzQm9vawot
ewotICAgIGludGVybmFsIGNsYXNzIExpc3RQZW9wbGUKLSAgICB7Ci0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vIEl0ZXJhdGVzIHRob3VnaCBhbGwgcGVvcGxlIGluIHRoZSBBZGRy
ZXNzQm9vayBhbmQgcHJpbnRzIGluZm8gYWJvdXQgdGhlbS4KLSAgICAgICAgLy8vIDwvc3VtbWFy
eT4KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBQcmludChBZGRyZXNzQm9vayBhZGRyZXNz
Qm9vaykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yZWFjaCAoUGVyc29uIHBlcnNvbiBpbiBh
ZGRyZXNzQm9vay5QZW9wbGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29uc29s
ZS5Xcml0ZUxpbmUoIlBlcnNvbiBJRDogezB9IiwgcGVyc29uLklkKTsKLSAgICAgICAgICAgICAg
ICBDb25zb2xlLldyaXRlTGluZSgiICBOYW1lOiB7MH0iLCBwZXJzb24uTmFtZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHBlcnNvbi5FbWFpbCAhPSAiIikKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIgIEUtbWFpbCBhZGRyZXNzOiB7MH0i
LCBwZXJzb24uRW1haWwpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZv
cmVhY2ggKFBlcnNvbi5UeXBlcy5QaG9uZU51bWJlciBwaG9uZU51bWJlciBpbiBwZXJzb24uUGhv
bmVzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwaG9u
ZU51bWJlci5UeXBlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIFBlcnNvbi5UeXBlcy5QaG9uZVR5cGUuTW9iaWxlOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoIiAgTW9iaWxlIHBob25lICM6ICIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBQZXJzb24uVHlwZXMuUGhvbmVUeXBlLkhvbWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29uc29sZS5Xcml0ZSgiICBIb21lIHBob25lICM6ICIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQZXJzb24uVHlw
ZXMuUGhvbmVUeXBlLldvcms6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5X
cml0ZSgiICBXb3JrIHBob25lICM6ICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIENvbnNvbGUu
V3JpdGVMaW5lKHBob25lTnVtYmVyLk51bWJlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8g
RW50cnkgcG9pbnQgLSBsb2FkcyB0aGUgYWRkcmVzc2Jvb2sgYW5kIHRoZW4gZGlzcGxheXMgaXQu
Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IE1haW4o
c3RyaW5nW10gYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFyZ3MuTGVuZ3RoICE9
IDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29uc29sZS5FcnJvci5Xcml0ZUxp
bmUoIlVzYWdlOiAgTGlzdFBlb3BsZSBBRERSRVNTX0JPT0tfRklMRSIpOwotICAgICAgICAgICAg
ICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIUZpbGUuRXhp
c3RzKGFyZ3NbMF0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbnNvbGUuV3Jp
dGVMaW5lKCJ7MH0gZG9lc24ndCBleGlzdC4gQWRkIGEgcGVyc29uIHRvIGNyZWF0ZSB0aGUgZmls
ZSBmaXJzdC4iLCBhcmdzWzBdKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gUmVhZCB0aGUgZXhpc3RpbmcgYWRkcmVzcyBib29rLgot
ICAgICAgICAgICAgdXNpbmcgKFN0cmVhbSBzdHJlYW0gPSBGaWxlLk9wZW5SZWFkKGFyZ3NbMF0p
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFkZHJlc3NCb29rIGFkZHJlc3NCb29r
ID0gQWRkcmVzc0Jvb2suUGFyc2VyLlBhcnNlRnJvbShzdHJlYW0pOwotICAgICAgICAgICAgICAg
IFByaW50KGFkZHJlc3NCb29rKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9BZGRyZXNzQm9vay9Qcm9ncmFtLmNzIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0FkZHJl
c3NCb29rL1Byb2dyYW0uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNjRmNDQx
Nzk0OTQyMDdkYzFkZjQ1NzY2MGMwMGU3ZDQ3NTViMWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0FkZHJlc3NCb29rL1Byb2dyYW0uY3MK
KysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3Rp
Y2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJl
Z2lvbgotCi11c2luZyBTeXN0ZW07Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuRXhhbXBs
ZXMuQWRkcmVzc0Jvb2sKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEVudHJ5IHBvaW50
LiBSZXBlYXRlZGx5IHByb21wdHMgdXNlciBmb3IgYW4gYWN0aW9uIHRvIHRha2UsIGRlbGVnYXRp
bmcgYWN0dWFsIGJlaGF2aW91cgotICAgIC8vLyB0byBpbmRpdmlkdWFsIGFjdGlvbnMuIEVhY2gg
YWN0aW9uIGhhcyBpdHMgb3duIE1haW4gbWV0aG9kLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGFz
IGFuCi0gICAgLy8vIGludmlkdWFsIGNvbXBsZXRlIHByb2dyYW0uCi0gICAgLy8vIDwvc3VtbWFy
eT4KLSAgICBpbnRlcm5hbCBjbGFzcyBQcm9ncmFtCi0gICAgewotICAgICAgICBwcml2YXRlIHN0
YXRpYyBpbnQgTWFpbihzdHJpbmdbXSBhcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
YXJncy5MZW5ndGggPiAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbnNvbGUu
RXJyb3IuV3JpdGVMaW5lKCJVc2FnZTogQWRkcmVzc0Jvb2sgW2ZpbGVdIik7Ci0gICAgICAgICAg
ICAgICAgQ29uc29sZS5FcnJvci5Xcml0ZUxpbmUoIklmIHRoZSBmaWxlbmFtZSBpc24ndCBzcGVj
aWZpZWQsIFwiYWRkcmVzc2Jvb2suZGF0YVwiIGlzIHVzZWQgaW5zdGVhZC4iKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cmluZyBhZGRy
ZXNzQm9va0ZpbGUgPSBhcmdzLkxlbmd0aCA+IDAgPyBhcmdzWzBdIDogImFkZHJlc3Nib29rLmRh
dGEiOwotCi0gICAgICAgICAgICBib29sIHN0b3BwaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB3
aGlsZSAoIXN0b3BwaW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbnNvbGUu
V3JpdGVMaW5lKCJPcHRpb25zOiIpOwotICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5l
KCIgIEw6IExpc3QgY29udGVudHMiKTsKLSAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGlu
ZSgiICBBOiBBZGQgbmV3IHBlcnNvbiIpOwotICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVM
aW5lKCIgIFE6IFF1aXQiKTsKLSAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlKCJBY3Rpb24/
ICIpOwotICAgICAgICAgICAgICAgIENvbnNvbGUuT3V0LkZsdXNoKCk7Ci0gICAgICAgICAgICAg
ICAgY2hhciBjaG9pY2UgPSBDb25zb2xlLlJlYWRLZXkoKS5LZXlDaGFyOwotICAgICAgICAgICAg
ICAgIENvbnNvbGUuV3JpdGVMaW5lKCk7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNob2ljZSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdhJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRQ
ZXJzb24uTWFpbihuZXcgc3RyaW5nW10ge2FkZHJlc3NCb29rRmlsZX0pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTCc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsJzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMaXN0UGVvcGxlLk1haW4obmV3IHN0cmluZ1tdIHthZGRyZXNzQm9va0ZpbGV9KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ1EnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncSc6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiVW5rbm93biBvcHRpb246
IHswfSIsIGNob2ljZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0
Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Q29uc29sZS5Xcml0ZUxpbmUoIkV4Y2VwdGlvbiBleGVjdXRpbmcgYWN0aW9uOiB7MH0iLCBlKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQot
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9BZGRy
ZXNzQm9vay9Qcm9wZXJ0aWVzL0Fzc2VtYmx5SW5mby5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9BZGRyZXNzQm9v
ay9Qcm9wZXJ0aWVzL0Fzc2VtYmx5SW5mby5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTQ1MmY3YTQxMTAxNGNmYjBlZjVjM2I0ZWRjNmZlNmY0ZWNjOTVmNS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvQWRkcmVzc0Jvb2sv
UHJvcGVydGllcy9Bc3NlbWJseUluZm8uY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBA
Ci11c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKLXVzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BT
ZXJ2aWNlczsKLQotLy8gR2VuZXJhbCBJbmZvcm1hdGlvbiBhYm91dCBhbiBhc3NlbWJseSBpcyBj
b250cm9sbGVkIHRocm91Z2ggdGhlIGZvbGxvd2luZyAKLS8vIHNldCBvZiBhdHRyaWJ1dGVzLiBD
aGFuZ2UgdGhlc2UgYXR0cmlidXRlIHZhbHVlcyB0byBtb2RpZnkgdGhlIGluZm9ybWF0aW9uCi0v
LyBhc3NvY2lhdGVkIHdpdGggYW4gYXNzZW1ibHkuCi0KLVthc3NlbWJseTogQXNzZW1ibHlUaXRs
ZSgiQWRkcmVzc0Jvb2siKV0KLVthc3NlbWJseTogQXNzZW1ibHlEZXNjcmlwdGlvbigiIildCi1b
YXNzZW1ibHk6IEFzc2VtYmx5Q29uZmlndXJhdGlvbigiIildCi1bYXNzZW1ibHk6IEFzc2VtYmx5
Q29tcGFueSgiIildCi1bYXNzZW1ibHk6IEFzc2VtYmx5UHJvZHVjdCgiQWRkcmVzc0Jvb2siKV0K
LVthc3NlbWJseTogQXNzZW1ibHlDb3B5cmlnaHQoIkNvcHlyaWdodCDCqSAgMjAxNSIpXQotW2Fz
c2VtYmx5OiBBc3NlbWJseVRyYWRlbWFyaygiIildCi1bYXNzZW1ibHk6IEFzc2VtYmx5Q3VsdHVy
ZSgiIildCi0KLVthc3NlbWJseTogQXNzZW1ibHlWZXJzaW9uKCIzLjAuMC4wIildCi1bYXNzZW1i
bHk6IEFzc2VtYmx5RmlsZVZlcnNpb24oIjMuMC4wLjAiKV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3Ny
Yy9BZGRyZXNzQm9vay9TYW1wbGVVc2FnZS5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9BZGRyZXNzQm9vay9TYW1w
bGVVc2FnZS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFkN2Q3MDAyNzhhODA3
MTJkNDNiNzQzNmY1MmVjZDgwYjFmMWNjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvQWRkcmVzc0Jvb2svU2FtcGxlVXNhZ2UuY3MKKysr
IC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2Ug
YW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lv
bgotICAgIAotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotCi1uYW1lc3BhY2UgR29v
Z2xlLlByb3RvYnVmLkV4YW1wbGVzLkFkZHJlc3NCb29rCi17Ci0gICAgaW50ZXJuYWwgY2xhc3Mg
U2FtcGxlVXNhZ2UKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgTWFpbigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGJ5dGVbXSBieXRlczsKLSAgICAgICAgICAgIC8vIENyZWF0
ZSBhIG5ldyBwZXJzb24KLSAgICAgICAgICAgIFBlcnNvbiBwZXJzb24gPSBuZXcgUGVyc29uCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSWQgPSAxLAotICAgICAgICAgICAgICAgIE5h
bWUgPSAiRm9vIiwKLSAgICAgICAgICAgICAgICBFbWFpbCA9ICJmb29AYmFyIiwKLSAgICAgICAg
ICAgICAgICBQaG9uZXMgPSB7IG5ldyBQZXJzb24uVHlwZXMuUGhvbmVOdW1iZXIgeyBOdW1iZXIg
PSAiNTU1LTEyMTIiIH0gfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHVzaW5nIChNZW1v
cnlTdHJlYW0gc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHBlcnNvbiB0byBhIHN0cmVhbQotICAgICAgICAgICAg
ICAgIHBlcnNvbi5Xcml0ZVRvKHN0cmVhbSk7Ci0gICAgICAgICAgICAgICAgYnl0ZXMgPSBzdHJl
YW0uVG9BcnJheSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUGVyc29uIGNvcHkgPSBQ
ZXJzb24uUGFyc2VyLlBhcnNlRnJvbShieXRlcyk7Ci0KLSAgICAgICAgICAgIEFkZHJlc3NCb29r
IGJvb2sgPSBuZXcgQWRkcmVzc0Jvb2sKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQ
ZW9wbGUgPSB7IGNvcHkgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGJ5dGVzID0gYm9v
ay5Ub0J5dGVBcnJheSgpOwotICAgICAgICAgICAgLy8gQW5kIHJlYWQgdGhlIGFkZHJlc3MgYm9v
ayBiYWNrIGFnYWluCi0gICAgICAgICAgICBBZGRyZXNzQm9vayByZXN0b3JlZCA9IEFkZHJlc3NC
b29rLlBhcnNlci5QYXJzZUZyb20oYnl0ZXMpOwotICAgICAgICAgICAgLy8gVGhlIG1lc3NhZ2Ug
cGVyZm9ybXMgYSBkZWVwLWNvbXBhcmlzb24gb24gZXF1YWxpdHk6Ci0gICAgICAgICAgICBpZiAo
cmVzdG9yZWQuUGVvcGxlLkNvdW50ICE9IDEgfHwgIXBlcnNvbi5FcXVhbHMocmVzdG9yZWQuUGVv
cGxlWzBdKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXBwbGlj
YXRpb25FeGNlcHRpb24oIlRoZXJlIGlzIGEgYmFkIHBlcnNvbiBpbiBoZXJlISIpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY3NoYXJwL3NyYy9BZGRyZXNzQm9vay9hcHAuY29uZmlnIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3Jj
L0FkZHJlc3NCb29rL2FwcC5jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4
MDgxM2FmZTNmZWM2MGM2OTlkNmEwNjllMDRhYzM1Y2E3NzhmM2QuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0FkZHJlc3NCb29rL2FwcC5j
b25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/
PgotPGNvbmZpZ3VyYXRpb24+Ci0JPHN0YXJ0dXA+PHN1cHBvcnRlZFJ1bnRpbWUgdmVyc2lvbj0i
djQuMCIgc2t1PSIuTkVURnJhbWV3b3JrLFZlcnNpb249djQuNSIvPjwvc3RhcnR1cD48L2NvbmZp
Z3VyYXRpb24+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkNvbmZvcm1h
bmNlL0FwcC5jb25maWcgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlL0Fw
cC5jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMTU2NDYzNTJlYzFkOWE4
NGJiYzY1MDRlZjZiNDZlMTZiZjc4MjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5Db25mb3JtYW5jZS9BcHAu
Y29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KLTxjb25maWd1cmF0aW9uPgotICAgIDxzdGFydHVwPiAK
LSAgICAgICAgPHN1cHBvcnRlZFJ1bnRpbWUgdmVyc2lvbj0idjQuMCIgc2t1PSIuTkVURnJhbWV3
b3JrLFZlcnNpb249djQuNSIgLz4KLSAgICA8L3N0YXJ0dXA+Ci08L2NvbmZpZ3VyYXRpb24+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Q
cm90b2J1Zi5Db25mb3JtYW5jZS9Db25mb3JtYW5jZS5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJv
dG9idWYuQ29uZm9ybWFuY2UvQ29uZm9ybWFuY2UuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDE2NzRhNjczNGY3MjJlZmYxZDY4NWNlMmFjMjYxZjdjYmU1ODdiOGUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Q
cm90b2J1Zi5Db25mb3JtYW5jZS9Db25mb3JtYW5jZS5jcworKysgL2Rldi9udWxsCkBAIC0xLDM3
MDggKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIu
ICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTogY29uZm9ybWFuY2UucHJvdG8KLSNwcmFnbWEgd2Fy
bmluZyBkaXNhYmxlIDE1OTEsIDA2MTIsIDMwMjEKLSNyZWdpb24gRGVzaWduZXIgZ2VuZXJhdGVk
IGNvZGUKLQotdXNpbmcgcGIgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1ZjsKLXVzaW5nIHBiYyA9
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLkNvbGxlY3Rpb25zOwotdXNpbmcgcGJyID0gZ2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbjsKLXVzaW5nIHNjZyA9IGdsb2JhbDo6U3lzdGVt
LkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci1uYW1lc3BhY2UgQ29uZm9ybWFuY2UgewotCi0gIC8vLyA8
c3VtbWFyeT5Ib2xkZXIgZm9yIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGZyb20g
Y29uZm9ybWFuY2UucHJvdG88L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGlj
cy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzdGF0aWMgcGFydGlh
bCBjbGFzcyBDb25mb3JtYW5jZVJlZmxlY3Rpb24gewotCi0gICAgI3JlZ2lvbiBEZXNjcmlwdG9y
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpbGUgZGVzY3JpcHRvciBmb3IgY29uZm9ybWFuY2UucHJvdG88
L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9yIERlc2NyaXB0
b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGRlc2NyaXB0b3I7IH0KLSAgICB9Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcGJyOjpGaWxlRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAgc3RhdGljIENv
bmZvcm1hbmNlUmVmbGVjdGlvbigpIHsKLSAgICAgIGJ5dGVbXSBkZXNjcmlwdG9yRGF0YSA9IGds
b2JhbDo6U3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZygKLSAgICAgICAgICBzdHJpbmcu
Q29uY2F0KAotICAgICAgICAgICAgIkNoRmpiMjVtYjNKdFlXNWpaUzV3Y205MGJ4SUxZMjl1Wm05
eWJXRnVZMlVhR1dkdmIyZHNaUzl3Y205MCIsCi0gICAgICAgICAgICAiYjJKMVppOWhibmt1Y0hK
dmRHOGFIbWR2YjJkc1pTOXdjbTkwYjJKMVppOWtkWEpoZEdsdmJpNXdjbTkwIiwKLSAgICAgICAg
ICAgICJieG9nWjI5dloyeGxMM0J5YjNSdlluVm1MMlpwWld4a1gyMWhjMnN1Y0hKdmRHOGFIR2R2
YjJkc1pTOXciLAotICAgICAgICAgICAgImNtOTBiMkoxWmk5emRISjFZM1F1Y0hKdmRHOGFIMmR2
YjJkc1pTOXdjbTkwYjJKMVppOTBhVzFsYzNSaCIsCi0gICAgICAgICAgICAiYlhBdWNISnZkRzhh
SG1kdmIyZHNaUzl3Y205MGIySjFaaTkzY21Gd2NHVnljeTV3Y205MGJ5S05BUW9TIiwKLSAgICAg
ICAgICAgICJRMjl1Wm05eWJXRnVZMlZTWlhGMVpYTjBFaG9LRUhCeWIzUnZZblZtWDNCaGVXeHZZ
V1FZQVNBQktBeEkiLAotICAgICAgICAgICAgIkFCSVdDZ3hxYzI5dVgzQmhlV3h2WVdRWUFpQUJL
QWxJQUJJNENoZHlaWEYxWlhOMFpXUmZiM1YwY0hWMCIsCi0gICAgICAgICAgICAiWDJadmNtMWhk
QmdESUFFb0RqSVhMbU52Ym1admNtMWhibU5sTGxkcGNtVkdiM0p0WVhSQ0NRb0hjR0Y1IiwKLSAg
ICAgICAgICAgICJiRzloWkNLeEFRb1RRMjl1Wm05eWJXRnVZMlZTWlhOd2IyNXpaUklWQ2d0d1lY
SnpaVjlsY25KdmNoZ0IiLAotICAgICAgICAgICAgIklBRW9DVWdBRWhrS0QzTmxjbWxoYkdsNlpW
OWxjbkp2Y2hnR0lBRW9DVWdBRWhjS0RYSjFiblJwYldWZiIsCi0gICAgICAgICAgICAiWlhKeWIz
SVlBaUFCS0FsSUFCSWFDaEJ3Y205MGIySjFabDl3WVhsc2IyRmtHQU1nQVNnTVNBQVNGZ29NIiwK
LSAgICAgICAgICAgICJhbk52Ymw5d1lYbHNiMkZrR0FRZ0FTZ0pTQUFTRVFvSGMydHBjSEJsWkJn
RklBRW9DVWdBUWdnS0JuSmwiLAotICAgICAgICAgICAgImMzVnNkQ0xWTWdvTVZHVnpkRUZzYkZS
NWNHVnpFaFlLRG05d2RHbHZibUZzWDJsdWRETXlHQUVnQVNnRiIsCi0gICAgICAgICAgICAiRWhZ
S0RtOXdkR2x2Ym1Gc1gybHVkRFkwR0FJZ0FTZ0RFaGNLRDI5d2RHbHZibUZzWDNWcGJuUXpNaGdE
IiwKLSAgICAgICAgICAgICJJQUVvRFJJWENnOXZjSFJwYjI1aGJGOTFhVzUwTmpRWUJDQUJLQVFT
RndvUGIzQjBhVzl1WVd4ZmMybHUiLAotICAgICAgICAgICAgImRETXlHQVVnQVNnUkVoY0tEMjl3
ZEdsdmJtRnNYM05wYm5RMk5CZ0dJQUVvRWhJWUNoQnZjSFJwYjI1aCIsCi0gICAgICAgICAgICAi
YkY5bWFYaGxaRE15R0FjZ0FTZ0hFaGdLRUc5d2RHbHZibUZzWDJacGVHVmtOalFZQ0NBQktBWVNH
UW9SIiwKLSAgICAgICAgICAgICJiM0IwYVc5dVlXeGZjMlpwZUdWa016SVlDU0FCS0E4U0dRb1Ji
M0IwYVc5dVlXeGZjMlpwZUdWa05qUVkiLAotICAgICAgICAgICAgIkNpQUJLQkFTRmdvT2IzQjBh
Vzl1WVd4ZlpteHZZWFFZQ3lBQktBSVNGd29QYjNCMGFXOXVZV3hmWkc5MSIsCi0gICAgICAgICAg
ICAiWW14bEdBd2dBU2dCRWhVS0RXOXdkR2x2Ym1Gc1gySnZiMndZRFNBQktBZ1NGd29QYjNCMGFX
OXVZV3hmIiwKLSAgICAgICAgICAgICJjM1J5YVc1bkdBNGdBU2dKRWhZS0RtOXdkR2x2Ym1Gc1gy
SjVkR1Z6R0E4Z0FTZ01Fa2dLRjI5d2RHbHYiLAotICAgICAgICAgICAgImJtRnNYMjVsYzNSbFpG
OXRaWE56WVdkbEdCSWdBU2dMTWljdVkyOXVabTl5YldGdVkyVXVWR1Z6ZEVGcyIsCi0gICAgICAg
ICAgICAiYkZSNWNHVnpMazVsYzNSbFpFMWxjM05oWjJVU1BRb1liM0IwYVc5dVlXeGZabTl5Wlds
bmJsOXRaWE56IiwKLSAgICAgICAgICAgICJZV2RsR0JNZ0FTZ0xNaHN1WTI5dVptOXliV0Z1WTJV
dVJtOXlaV2xuYmsxbGMzTmhaMlVTUWdvVWIzQjAiLAotICAgICAgICAgICAgImFXOXVZV3hmYm1W
emRHVmtYMlZ1ZFcwWUZTQUJLQTR5SkM1amIyNW1iM0p0WVc1alpTNVVaWE4wUVd4cyIsCi0gICAg
ICAgICAgICAiVkhsd1pYTXVUbVZ6ZEdWa1JXNTFiUkkzQ2hWdmNIUnBiMjVoYkY5bWIzSmxhV2R1
WDJWdWRXMFlGaUFCIiwKLSAgICAgICAgICAgICJLQTR5R0M1amIyNW1iM0p0WVc1alpTNUdiM0ps
YVdkdVJXNTFiUkloQ2hWdmNIUnBiMjVoYkY5emRISnAiLAotICAgICAgICAgICAgImJtZGZjR2xs
WTJVWUdDQUJLQWxDQWdnQ0Voa0tEVzl3ZEdsdmJtRnNYMk52Y21RWUdTQUJLQWxDQWdnQiIsCi0g
ICAgICAgICAgICAiRWpRS0VYSmxZM1Z5YzJsMlpWOXRaWE56WVdkbEdCc2dBU2dMTWhrdVkyOXVa
bTl5YldGdVkyVXVWR1Z6IiwKLSAgICAgICAgICAgICJkRUZzYkZSNWNHVnpFaFlLRG5KbGNHVmhk
R1ZrWDJsdWRETXlHQjhnQXlnRkVoWUtEbkpsY0dWaGRHVmsiLAotICAgICAgICAgICAgIlgybHVk
RFkwR0NBZ0F5Z0RFaGNLRDNKbGNHVmhkR1ZrWDNWcGJuUXpNaGdoSUFNb0RSSVhDZzl5WlhCbCIs
Ci0gICAgICAgICAgICAiWVhSbFpGOTFhVzUwTmpRWUlpQURLQVFTRndvUGNtVndaV0YwWldSZmMy
bHVkRE15R0NNZ0F5Z1JFaGNLIiwKLSAgICAgICAgICAgICJEM0psY0dWaGRHVmtYM05wYm5RMk5C
Z2tJQU1vRWhJWUNoQnlaWEJsWVhSbFpGOW1hWGhsWkRNeUdDVWciLAotICAgICAgICAgICAgIkF5
Z0hFaGdLRUhKbGNHVmhkR1ZrWDJacGVHVmtOalFZSmlBREtBWVNHUW9SY21Wd1pXRjBaV1JmYzJa
cCIsCi0gICAgICAgICAgICAiZUdWa016SVlKeUFES0E4U0dRb1JjbVZ3WldGMFpXUmZjMlpwZUdW
a05qUVlLQ0FES0JBU0Znb09jbVZ3IiwKLSAgICAgICAgICAgICJaV0YwWldSZlpteHZZWFFZS1NB
REtBSVNGd29QY21Wd1pXRjBaV1JmWkc5MVlteGxHQ29nQXlnQkVoVUsiLAotICAgICAgICAgICAg
IkRYSmxjR1ZoZEdWa1gySnZiMndZS3lBREtBZ1NGd29QY21Wd1pXRjBaV1JmYzNSeWFXNW5HQ3dn
QXlnSiIsCi0gICAgICAgICAgICAiRWhZS0RuSmxjR1ZoZEdWa1gySjVkR1Z6R0MwZ0F5Z01Fa2dL
RjNKbGNHVmhkR1ZrWDI1bGMzUmxaRjl0IiwKLSAgICAgICAgICAgICJaWE56WVdkbEdEQWdBeWdM
TWljdVkyOXVabTl5YldGdVkyVXVWR1Z6ZEVGc2JGUjVjR1Z6TGs1bGMzUmwiLAotICAgICAgICAg
ICAgIlpFMWxjM05oWjJVU1BRb1ljbVZ3WldGMFpXUmZabTl5WldsbmJsOXRaWE56WVdkbEdERWdB
eWdMTWhzdSIsCi0gICAgICAgICAgICAiWTI5dVptOXliV0Z1WTJVdVJtOXlaV2xuYmsxbGMzTmha
MlVTUWdvVWNtVndaV0YwWldSZmJtVnpkR1ZrIiwKLSAgICAgICAgICAgICJYMlZ1ZFcwWU15QURL
QTR5SkM1amIyNW1iM0p0WVc1alpTNVVaWE4wUVd4c1ZIbHdaWE11VG1WemRHVmsiLAotICAgICAg
ICAgICAgIlJXNTFiUkkzQ2hWeVpYQmxZWFJsWkY5bWIzSmxhV2R1WDJWdWRXMFlOQ0FES0E0eUdD
NWpiMjVtYjNKdCIsCi0gICAgICAgICAgICAiWVc1alpTNUdiM0psYVdkdVJXNTFiUkloQ2hWeVpY
QmxZWFJsWkY5emRISnBibWRmY0dsbFkyVVlOaUFEIiwKLSAgICAgICAgICAgICJLQWxDQWdnQ0Vo
a0tEWEpsY0dWaGRHVmtYMk52Y21RWU55QURLQWxDQWdnQkVrVUtEMjFoY0Y5cGJuUXoiLAotICAg
ICAgICAgICAgIk1sOXBiblF6TWhnNElBTW9DeklzTG1OdmJtWnZjbTFoYm1ObExsUmxjM1JCYkd4
VWVYQmxjeTVOWVhCSiIsCi0gICAgICAgICAgICAiYm5Rek1rbHVkRE15Ulc1MGNua1NSUW9QYldG
d1gybHVkRFkwWDJsdWREWTBHRGtnQXlnTE1pd3VZMjl1IiwKLSAgICAgICAgICAgICJabTl5YldG
dVkyVXVWR1Z6ZEVGc2JGUjVjR1Z6TGsxaGNFbHVkRFkwU1c1ME5qUkZiblJ5ZVJKSkNoRnQiLAot
ICAgICAgICAgICAgIllYQmZkV2x1ZERNeVgzVnBiblF6TWhnNklBTW9Dekl1TG1OdmJtWnZjbTFo
Ym1ObExsUmxjM1JCYkd4VSIsCi0gICAgICAgICAgICAiZVhCbGN5NU5ZWEJWYVc1ME16SlZhVzUw
TXpKRmJuUnllUkpKQ2hGdFlYQmZkV2x1ZERZMFgzVnBiblEyIiwKLSAgICAgICAgICAgICJOQmc3
SUFNb0N6SXVMbU52Ym1admNtMWhibU5sTGxSbGMzUkJiR3hVZVhCbGN5NU5ZWEJWYVc1ME5qUlYi
LAotICAgICAgICAgICAgImFXNTBOalJGYm5SeWVSSkpDaEZ0WVhCZmMybHVkRE15WDNOcGJuUXpN
aGc4SUFNb0N6SXVMbU52Ym1adiIsCi0gICAgICAgICAgICAiY20xaGJtTmxMbFJsYzNSQmJHeFVl
WEJsY3k1TllYQlRhVzUwTXpKVGFXNTBNekpGYm5SeWVSSkpDaEZ0IiwKLSAgICAgICAgICAgICJZ
WEJmYzJsdWREWTBYM05wYm5RMk5CZzlJQU1vQ3pJdUxtTnZibVp2Y20xaGJtTmxMbFJsYzNSQmJH
eFUiLAotICAgICAgICAgICAgImVYQmxjeTVOWVhCVGFXNTBOalJUYVc1ME5qUkZiblJ5ZVJKTkNo
TnRZWEJmWm1sNFpXUXpNbDltYVhobCIsCi0gICAgICAgICAgICAiWkRNeUdENGdBeWdMTWpBdVky
OXVabTl5YldGdVkyVXVWR1Z6ZEVGc2JGUjVjR1Z6TGsxaGNFWnBlR1ZrIiwKLSAgICAgICAgICAg
ICJNekpHYVhobFpETXlSVzUwY25rU1RRb1RiV0Z3WDJacGVHVmtOalJmWm1sNFpXUTJOQmcvSUFN
b0N6SXciLAotICAgICAgICAgICAgIkxtTnZibVp2Y20xaGJtTmxMbFJsYzNSQmJHeFVlWEJsY3k1
TllYQkdhWGhsWkRZMFJtbDRaV1EyTkVWdSIsCi0gICAgICAgICAgICAiZEhKNUVsRUtGVzFoY0Y5
elptbDRaV1F6TWw5elptbDRaV1F6TWhoQUlBTW9Dekl5TG1OdmJtWnZjbTFoIiwKLSAgICAgICAg
ICAgICJibU5sTGxSbGMzUkJiR3hVZVhCbGN5NU5ZWEJUWm1sNFpXUXpNbE5tYVhobFpETXlSVzUw
Y25rU1VRb1YiLAotICAgICAgICAgICAgImJXRndYM05tYVhobFpEWTBYM05tYVhobFpEWTBHRUVn
QXlnTE1qSXVZMjl1Wm05eWJXRnVZMlV1VkdWeiIsCi0gICAgICAgICAgICAiZEVGc2JGUjVjR1Z6
TGsxaGNGTm1hWGhsWkRZMFUyWnBlR1ZrTmpSRmJuUnllUkpGQ2c5dFlYQmZhVzUwIiwKLSAgICAg
ICAgICAgICJNekpmWm14dllYUVlRaUFES0FzeUxDNWpiMjVtYjNKdFlXNWpaUzVVWlhOMFFXeHNW
SGx3WlhNdVRXRnciLAotICAgICAgICAgICAgIlNXNTBNekpHYkc5aGRFVnVkSEo1RWtjS0VHMWhj
RjlwYm5Rek1sOWtiM1ZpYkdVWVF5QURLQXN5TFM1aiIsCi0gICAgICAgICAgICAiYjI1bWIzSnRZ
VzVqWlM1VVpYTjBRV3hzVkhsd1pYTXVUV0Z3U1c1ME16SkViM1ZpYkdWRmJuUnllUkpCIiwKLSAg
ICAgICAgICAgICJDZzF0WVhCZlltOXZiRjlpYjI5c0dFUWdBeWdMTWlvdVkyOXVabTl5YldGdVky
VXVWR1Z6ZEVGc2JGUjUiLAotICAgICAgICAgICAgImNHVnpMazFoY0VKdmIyeENiMjlzUlc1MGNu
a1NTUW9SYldGd1gzTjBjbWx1WjE5emRISnBibWNZUlNBRCIsCi0gICAgICAgICAgICAiS0FzeUxp
NWpiMjVtYjNKdFlXNWpaUzVVWlhOMFFXeHNWSGx3WlhNdVRXRndVM1J5YVc1blUzUnlhVzVuIiwK
LSAgICAgICAgICAgICJSVzUwY25rU1J3b1FiV0Z3WDNOMGNtbHVaMTlpZVhSbGN4aEdJQU1vQ3pJ
dExtTnZibVp2Y20xaGJtTmwiLAotICAgICAgICAgICAgIkxsUmxjM1JCYkd4VWVYQmxjeTVOWVhC
VGRISnBibWRDZVhSbGMwVnVkSEo1RWxnS0dXMWhjRjl6ZEhKcCIsCi0gICAgICAgICAgICAiYm1k
ZmJtVnpkR1ZrWDIxbGMzTmhaMlVZUnlBREtBc3lOUzVqYjI1bWIzSnRZVzVqWlM1VVpYTjBRV3hz
IiwKLSAgICAgICAgICAgICJWSGx3WlhNdVRXRndVM1J5YVc1blRtVnpkR1ZrVFdWemMyRm5aVVZ1
ZEhKNUVsb0tHbTFoY0Y5emRISnAiLAotICAgICAgICAgICAgImJtZGZabTl5WldsbmJsOXRaWE56
WVdkbEdFZ2dBeWdMTWpZdVkyOXVabTl5YldGdVkyVXVWR1Z6ZEVGcyIsCi0gICAgICAgICAgICAi
YkZSNWNHVnpMazFoY0ZOMGNtbHVaMFp2Y21WcFoyNU5aWE56WVdkbFJXNTBjbmtTVWdvV2JXRndY
M04wIiwKLSAgICAgICAgICAgICJjbWx1WjE5dVpYTjBaV1JmWlc1MWJSaEpJQU1vQ3pJeUxtTnZi
bVp2Y20xaGJtTmxMbFJsYzNSQmJHeFUiLAotICAgICAgICAgICAgImVYQmxjeTVOWVhCVGRISnBi
bWRPWlhOMFpXUkZiblZ0Ulc1MGNua1NWQW9YYldGd1gzTjBjbWx1WjE5bSIsCi0gICAgICAgICAg
ICAiYjNKbGFXZHVYMlZ1ZFcwWVNpQURLQXN5TXk1amIyNW1iM0p0WVc1alpTNVVaWE4wUVd4c1ZI
bHdaWE11IiwKLSAgICAgICAgICAgICJUV0Z3VTNSeWFXNW5SbTl5WldsbmJrVnVkVzFGYm5SeWVS
SVdDZ3h2Ym1WdlpsOTFhVzUwTXpJWWJ5QUIiLAotICAgICAgICAgICAgIktBMUlBQkpIQ2hSdmJt
VnZabDl1WlhOMFpXUmZiV1Z6YzJGblpSaHdJQUVvQ3pJbkxtTnZibVp2Y20xaCIsCi0gICAgICAg
ICAgICAiYm1ObExsUmxjM1JCYkd4VWVYQmxjeTVPWlhOMFpXUk5aWE56WVdkbFNBQVNGZ29NYjI1
bGIyWmZjM1J5IiwKLSAgICAgICAgICAgICJhVzVuR0hFZ0FTZ0pTQUFTRlFvTGIyNWxiMlpmWW5s
MFpYTVljaUFCS0F4SUFCSTZDaFZ2Y0hScGIyNWgiLAotICAgICAgICAgICAgImJGOWliMjlzWDNk
eVlYQndaWElZeVFFZ0FTZ0xNaG91WjI5dloyeGxMbkJ5YjNSdlluVm1Ma0p2YjJ4VyIsCi0gICAg
ICAgICAgICAiWVd4MVpSSThDaFp2Y0hScGIyNWhiRjlwYm5Rek1sOTNjbUZ3Y0dWeUdNb0JJQUVv
Q3pJYkxtZHZiMmRzIiwKLSAgICAgICAgICAgICJaUzV3Y205MGIySjFaaTVKYm5Rek1sWmhiSFZs
RWp3S0ZtOXdkR2x2Ym1Gc1gybHVkRFkwWDNkeVlYQnciLAotICAgICAgICAgICAgIlpYSVl5d0Vn
QVNnTE1oc3VaMjl2WjJ4bExuQnliM1J2WW5WbUxrbHVkRFkwVm1Gc2RXVVNQZ29YYjNCMCIsCi0g
ICAgICAgICAgICAiYVc5dVlXeGZkV2x1ZERNeVgzZHlZWEJ3WlhJWXpBRWdBU2dMTWh3dVoyOXZa
MnhsTG5CeWIzUnZZblZtIiwKLSAgICAgICAgICAgICJMbFZKYm5Rek1sWmhiSFZsRWo0S0YyOXdk
R2x2Ym1Gc1gzVnBiblEyTkY5M2NtRndjR1Z5R00wQklBRW8iLAotICAgICAgICAgICAgIkN6SWNM
bWR2YjJkc1pTNXdjbTkwYjJKMVppNVZTVzUwTmpSV1lXeDFaUkk4Q2hadmNIUnBiMjVoYkY5bSIs
Ci0gICAgICAgICAgICAiYkc5aGRGOTNjbUZ3Y0dWeUdNNEJJQUVvQ3pJYkxtZHZiMmRzWlM1d2Nt
OTBiMkoxWmk1R2JHOWhkRlpoIiwKLSAgICAgICAgICAgICJiSFZsRWo0S0YyOXdkR2x2Ym1Gc1gy
UnZkV0pzWlY5M2NtRndjR1Z5R004QklBRW9DekljTG1kdmIyZHMiLAotICAgICAgICAgICAgIlpT
NXdjbTkwYjJKMVppNUViM1ZpYkdWV1lXeDFaUkkrQ2hkdmNIUnBiMjVoYkY5emRISnBibWRmZDNK
aCIsCi0gICAgICAgICAgICAiY0hCbGNoalFBU0FCS0FzeUhDNW5iMjluYkdVdWNISnZkRzlpZFdZ
dVUzUnlhVzVuVm1Gc2RXVVNQQW9XIiwKLSAgICAgICAgICAgICJiM0IwYVc5dVlXeGZZbmwwWlhO
ZmQzSmhjSEJsY2hqUkFTQUJLQXN5R3k1bmIyOW5iR1V1Y0hKdmRHOWkiLAotICAgICAgICAgICAg
ImRXWXVRbmwwWlhOV1lXeDFaUkk2Q2hWeVpYQmxZWFJsWkY5aWIyOXNYM2R5WVhCd1pYSVkwd0Vn
QXlnTCIsCi0gICAgICAgICAgICAiTWhvdVoyOXZaMnhsTG5CeWIzUnZZblZtTGtKdmIyeFdZV3gx
WlJJOENoWnlaWEJsWVhSbFpGOXBiblF6IiwKLSAgICAgICAgICAgICJNbDkzY21Gd2NHVnlHTlFC
SUFNb0N6SWJMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUpiblF6TWxaaGJIVmwiLAotICAgICAgICAg
ICAgIkVqd0tGbkpsY0dWaGRHVmtYMmx1ZERZMFgzZHlZWEJ3WlhJWTFRRWdBeWdMTWhzdVoyOXZa
MnhsTG5CeSIsCi0gICAgICAgICAgICAiYjNSdlluVm1Ma2x1ZERZMFZtRnNkV1VTUGdvWGNtVnda
V0YwWldSZmRXbHVkRE15WDNkeVlYQndaWElZIiwKLSAgICAgICAgICAgICIxZ0VnQXlnTE1od3Va
Mjl2WjJ4bExuQnliM1J2WW5WbUxsVkpiblF6TWxaaGJIVmxFajRLRjNKbGNHVmgiLAotICAgICAg
ICAgICAgImRHVmtYM1ZwYm5RMk5GOTNjbUZ3Y0dWeUdOY0JJQU1vQ3pJY0xtZHZiMmRzWlM1d2Nt
OTBiMkoxWmk1ViIsCi0gICAgICAgICAgICAiU1c1ME5qUldZV3gxWlJJOENoWnlaWEJsWVhSbFpG
OW1iRzloZEY5M2NtRndjR1Z5R05nQklBTW9DekliIiwKLSAgICAgICAgICAgICJMbWR2YjJkc1pT
NXdjbTkwYjJKMVppNUdiRzloZEZaaGJIVmxFajRLRjNKbGNHVmhkR1ZrWDJSdmRXSnMiLAotICAg
ICAgICAgICAgIlpWOTNjbUZ3Y0dWeUdOa0JJQU1vQ3pJY0xtZHZiMmRzWlM1d2NtOTBiMkoxWmk1
RWIzVmliR1ZXWVd4MSIsCi0gICAgICAgICAgICAiWlJJK0NoZHlaWEJsWVhSbFpGOXpkSEpwYm1k
ZmQzSmhjSEJsY2hqYUFTQURLQXN5SEM1bmIyOW5iR1V1IiwKLSAgICAgICAgICAgICJjSEp2ZEc5
aWRXWXVVM1J5YVc1blZtRnNkV1VTUEFvV2NtVndaV0YwWldSZllubDBaWE5mZDNKaGNIQmwiLAot
ICAgICAgICAgICAgImNoamJBU0FES0FzeUd5NW5iMjluYkdVdWNISnZkRzlpZFdZdVFubDBaWE5X
WVd4MVpSSTFDaEZ2Y0hScCIsCi0gICAgICAgICAgICAiYjI1aGJGOWtkWEpoZEdsdmJoaXRBaUFC
S0FzeUdTNW5iMjluYkdVdWNISnZkRzlpZFdZdVJIVnlZWFJwIiwKLSAgICAgICAgICAgICJiMjRT
TndvU2IzQjBhVzl1WVd4ZmRHbHRaWE4wWVcxd0dLNENJQUVvQ3pJYUxtZHZiMmRzWlM1d2NtOTAi
LAotICAgICAgICAgICAgImIySjFaaTVVYVcxbGMzUmhiWEFTT0FvVGIzQjBhVzl1WVd4ZlptbGxi
R1JmYldGemF4aXZBaUFCS0FzeSIsCi0gICAgICAgICAgICAiR2k1bmIyOW5iR1V1Y0hKdmRHOWlk
V1l1Um1sbGJHUk5ZWE5yRWpFS0QyOXdkR2x2Ym1Gc1gzTjBjblZqIiwKLSAgICAgICAgICAgICJk
Qml3QWlBQktBc3lGeTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVM1J5ZFdOMEVpc0tERzl3ZEdsdmJt
RnMiLAotICAgICAgICAgICAgIlgyRnVlUml4QWlBQktBc3lGQzVuYjI5bmJHVXVjSEp2ZEc5aWRX
WXVRVzU1RWk4S0RtOXdkR2x2Ym1GcyIsCi0gICAgICAgICAgICAiWDNaaGJIVmxHTElDSUFFb0N6
SVdMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVdZV3gxWlJJMUNoRnlaWEJsIiwKLSAgICAgICAgICAg
ICJZWFJsWkY5a2RYSmhkR2x2YmhpM0FpQURLQXN5R1M1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhW
eVlYUnAiLAotICAgICAgICAgICAgImIyNFNOd29TY21Wd1pXRjBaV1JmZEdsdFpYTjBZVzF3R0xn
Q0lBTW9DeklhTG1kdmIyZHNaUzV3Y205MCIsCi0gICAgICAgICAgICAiYjJKMVppNVVhVzFsYzNS
aGJYQVNOd29TY21Wd1pXRjBaV1JmWm1sbGJHUnRZWE5yR0xrQ0lBTW9DeklhIiwKLSAgICAgICAg
ICAgICJMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUdhV1ZzWkUxaGMyc1NNUW9QY21Wd1pXRjBaV1Jm
YzNSeWRXTjAiLAotICAgICAgICAgICAgIkdNUUNJQU1vQ3pJWExtZHZiMmRzWlM1d2NtOTBiMkox
Wmk1VGRISjFZM1FTS3dvTWNtVndaV0YwWldSZiIsCi0gICAgICAgICAgICAiWVc1NUdMc0NJQU1v
Q3pJVUxtZHZiMmRzWlM1d2NtOTBiMkoxWmk1QmJua1NMd29PY21Wd1pXRjBaV1JmIiwKLSAgICAg
ICAgICAgICJkbUZzZFdVWXZBSWdBeWdMTWhZdVoyOXZaMnhsTG5CeWIzUnZZblZtTGxaaGJIVmxF
aE1LQ21acFpXeGsiLAotICAgICAgICAgICAgImJtRnRaVEVZa1FNZ0FTZ0ZFaFFLQzJacFpXeGtY
MjVoYldVeUdKSURJQUVvQlJJVkNneGZabWxsYkdSZiIsCi0gICAgICAgICAgICAiYm1GdFpUTVlr
d01nQVNnRkVoWUtEV1pwWld4a1gxOXVZVzFsTkY4WWxBTWdBU2dGRWhRS0MyWnBaV3hrIiwKLSAg
ICAgICAgICAgICJNRzVoYldVMUdKVURJQUVvQlJJV0NnMW1hV1ZzWkY4d1gyNWhiV1UyR0pZRElB
RW9CUklUQ2dwbWFXVnMiLAotICAgICAgICAgICAgIlpFNWhiV1UzR0pjRElBRW9CUklUQ2dwR2FX
VnNaRTVoYldVNEdKZ0RJQUVvQlJJVUNndG1hV1ZzWkY5TyIsCi0gICAgICAgICAgICAiWVcxbE9S
aVpBeUFCS0FVU0ZRb01SbWxsYkdSZlRtRnRaVEV3R0pvRElBRW9CUklWQ2d4R1NVVk1SRjlPIiwK
LSAgICAgICAgICAgICJRVTFGTVRFWW13TWdBU2dGRWhVS0RFWkpSVXhFWDI1aGJXVXhNaGljQXlB
QktBVWFTZ29OVG1WemRHVmsiLAotICAgICAgICAgICAgIlRXVnpjMkZuWlJJSkNnRmhHQUVnQVNn
RkVpNEtDMk52Y21WamRYSnphWFpsR0FJZ0FTZ0xNaGt1WTI5dSIsCi0gICAgICAgICAgICAiWm05
eWJXRnVZMlV1VkdWemRFRnNiRlI1Y0dWekdqUUtFazFoY0VsdWRETXlTVzUwTXpKRmJuUnllUklM
IiwKLSAgICAgICAgICAgICJDZ05yWlhrWUFTQUJLQVVTRFFvRmRtRnNkV1VZQWlBQktBVTZBamdC
R2pRS0VrMWhjRWx1ZERZMFNXNTAiLAotICAgICAgICAgICAgIk5qUkZiblJ5ZVJJTENnTnJaWGtZ
QVNBQktBTVNEUW9GZG1Gc2RXVVlBaUFCS0FNNkFqZ0JHallLRkUxaCIsCi0gICAgICAgICAgICAi
Y0ZWcGJuUXpNbFZwYm5Rek1rVnVkSEo1RWdzS0EydGxlUmdCSUFFb0RSSU5DZ1YyWVd4MVpSZ0NJ
QUVvIiwKLSAgICAgICAgICAgICJEVG9DT0FFYU5nb1VUV0Z3VldsdWREWTBWV2x1ZERZMFJXNTBj
bmtTQ3dvRGEyVjVHQUVnQVNnRUVnMEsiLAotICAgICAgICAgICAgIkJYWmhiSFZsR0FJZ0FTZ0VP
Z0k0QVJvMkNoUk5ZWEJUYVc1ME16SlRhVzUwTXpKRmJuUnllUklMQ2dOciIsCi0gICAgICAgICAg
ICAiWlhrWUFTQUJLQkVTRFFvRmRtRnNkV1VZQWlBQktCRTZBamdCR2pZS0ZFMWhjRk5wYm5RMk5G
TnBiblEyIiwKLSAgICAgICAgICAgICJORVZ1ZEhKNUVnc0tBMnRsZVJnQklBRW9FaElOQ2dWMllX
eDFaUmdDSUFFb0Vqb0NPQUVhT0FvV1RXRnciLAotICAgICAgICAgICAgIlJtbDRaV1F6TWtacGVH
VmtNekpGYm5SeWVSSUxDZ05yWlhrWUFTQUJLQWNTRFFvRmRtRnNkV1VZQWlBQiIsCi0gICAgICAg
ICAgICAiS0FjNkFqZ0JHamdLRmsxaGNFWnBlR1ZrTmpSR2FYaGxaRFkwUlc1MGNua1NDd29EYTJW
NUdBRWdBU2dHIiwKLSAgICAgICAgICAgICJFZzBLQlhaaGJIVmxHQUlnQVNnR09nSTRBUm82Q2ho
TllYQlRabWw0WldRek1sTm1hWGhsWkRNeVJXNTAiLAotICAgICAgICAgICAgImNua1NDd29EYTJW
NUdBRWdBU2dQRWcwS0JYWmhiSFZsR0FJZ0FTZ1BPZ0k0QVJvNkNoaE5ZWEJUWm1sNCIsCi0gICAg
ICAgICAgICAiWldRMk5GTm1hWGhsWkRZMFJXNTBjbmtTQ3dvRGEyVjVHQUVnQVNnUUVnMEtCWFpo
YkhWbEdBSWdBU2dRIiwKLSAgICAgICAgICAgICJPZ0k0QVJvMENoSk5ZWEJKYm5Rek1rWnNiMkYw
Ulc1MGNua1NDd29EYTJWNUdBRWdBU2dGRWcwS0JYWmgiLAotICAgICAgICAgICAgImJIVmxHQUln
QVNnQ09nSTRBUm8xQ2hOTllYQkpiblF6TWtSdmRXSnNaVVZ1ZEhKNUVnc0tBMnRsZVJnQiIsCi0g
ICAgICAgICAgICAiSUFFb0JSSU5DZ1YyWVd4MVpSZ0NJQUVvQVRvQ09BRWFNZ29RVFdGd1FtOXZi
RUp2YjJ4RmJuUnllUklMIiwKLSAgICAgICAgICAgICJDZ05yWlhrWUFTQUJLQWdTRFFvRmRtRnNk
V1VZQWlBQktBZzZBamdCR2pZS0ZFMWhjRk4wY21sdVoxTjAiLAotICAgICAgICAgICAgImNtbHVa
MFZ1ZEhKNUVnc0tBMnRsZVJnQklBRW9DUklOQ2dWMllXeDFaUmdDSUFFb0NUb0NPQUVhTlFvVCIs
Ci0gICAgICAgICAgICAiVFdGd1UzUnlhVzVuUW5sMFpYTkZiblJ5ZVJJTENnTnJaWGtZQVNBQktB
a1NEUW9GZG1Gc2RXVVlBaUFCIiwKLSAgICAgICAgICAgICJLQXc2QWpnQkdtWUtHMDFoY0ZOMGNt
bHVaMDVsYzNSbFpFMWxjM05oWjJWRmJuUnllUklMQ2dOclpYa1kiLAotICAgICAgICAgICAgIkFT
QUJLQWtTTmdvRmRtRnNkV1VZQWlBQktBc3lKeTVqYjI1bWIzSnRZVzVqWlM1VVpYTjBRV3hzVkhs
dyIsCi0gICAgICAgICAgICAiWlhNdVRtVnpkR1ZrVFdWemMyRm5aVG9DT0FFYVd3b2NUV0Z3VTNS
eWFXNW5SbTl5WldsbmJrMWxjM05oIiwKLSAgICAgICAgICAgICJaMlZGYm5SeWVSSUxDZ05yWlhr
WUFTQUJLQWtTS2dvRmRtRnNkV1VZQWlBQktBc3lHeTVqYjI1bWIzSnQiLAotICAgICAgICAgICAg
IllXNWpaUzVHYjNKbGFXZHVUV1Z6YzJGblpUb0NPQUVhWUFvWVRXRndVM1J5YVc1blRtVnpkR1Zr
Ulc1MSIsCi0gICAgICAgICAgICAiYlVWdWRISjVFZ3NLQTJ0bGVSZ0JJQUVvQ1JJekNnVjJZV3gx
WlJnQ0lBRW9EaklrTG1OdmJtWnZjbTFoIiwKLSAgICAgICAgICAgICJibU5sTGxSbGMzUkJiR3hV
ZVhCbGN5NU9aWE4wWldSRmJuVnRPZ0k0QVJwVkNobE5ZWEJUZEhKcGJtZEciLAotICAgICAgICAg
ICAgImIzSmxhV2R1Ulc1MWJVVnVkSEo1RWdzS0EydGxlUmdCSUFFb0NSSW5DZ1YyWVd4MVpSZ0NJ
QUVvRGpJWSIsCi0gICAgICAgICAgICAiTG1OdmJtWnZjbTFoYm1ObExrWnZjbVZwWjI1RmJuVnRP
Z0k0QVNJNUNncE9aWE4wWldSRmJuVnRFZ2NLIiwKLSAgICAgICAgICAgICJBMFpQVHhBQUVnY0tB
MEpCVWhBQkVnY0tBMEpCV2hBQ0VoQUtBMDVGUnhELy8vLy8vLy8vLy84QlFnMEsiLAotICAgICAg
ICAgICAgIkMyOXVaVzltWDJacFpXeGtJaHNLRGtadmNtVnBaMjVOWlhOellXZGxFZ2tLQVdNWUFT
QUJLQVVxTlFvSyIsCi0gICAgICAgICAgICAiVjJseVpVWnZjbTFoZEJJUENndFZUbE5RUlVOSlJr
bEZSQkFBRWd3S0NGQlNUMVJQUWxWR0VBRVNDQW9FIiwKLSAgICAgICAgICAgICJTbE5QVGhBQ0tr
QUtDMFp2Y21WcFoyNUZiblZ0RWc4S0MwWlBVa1ZKUjA1ZlJrOVBFQUFTRHdvTFJrOVMiLAotICAg
ICAgICAgICAgIlJVbEhUbDlDUVZJUUFSSVBDZ3RHVDFKRlNVZE9YMEpCV2hBQ1FpRUtIMk52YlM1
bmIyOW5iR1V1Y0hKdiIsCi0gICAgICAgICAgICAiZEc5aWRXWXVZMjl1Wm05eWJXRnVZMlZpQm5C
eWIzUnZNdz09IikpOwotICAgICAgZGVzY3JpcHRvciA9IHBicjo6RmlsZURlc2NyaXB0b3IuRnJv
bUdlbmVyYXRlZENvZGUoZGVzY3JpcHRvckRhdGEsCi0gICAgICAgICAgbmV3IHBicjo6RmlsZURl
c2NyaXB0b3JbXSB7IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFueVJl
ZmxlY3Rpb24uRGVzY3JpcHRvciwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMuRHVyYXRpb25SZWZsZWN0aW9uLkRlc2NyaXB0b3IsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LldlbGxLbm93blR5cGVzLkZpZWxkTWFza1JlZmxlY3Rpb24uRGVzY3JpcHRvciwgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU3RydWN0UmVmbGVjdGlvbi5EZXNjcmlwdG9y
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UaW1lc3RhbXBSZWZsZWN0
aW9uLkRlc2NyaXB0b3IsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLldy
YXBwZXJzUmVmbGVjdGlvbi5EZXNjcmlwdG9yLCB9LAotICAgICAgICAgIG5ldyBwYnI6OkdlbmVy
YXRlZENsclR5cGVJbmZvKG5ld1tdIHt0eXBlb2YoZ2xvYmFsOjpDb25mb3JtYW5jZS5XaXJlRm9y
bWF0KSwgdHlwZW9mKGdsb2JhbDo6Q29uZm9ybWFuY2UuRm9yZWlnbkVudW0pLCB9LCBuZXcgcGJy
OjpHZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRl
ZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6OkNvbmZvcm1hbmNlLkNvbmZvcm1hbmNlUmVxdWVz
dCksIGdsb2JhbDo6Q29uZm9ybWFuY2UuQ29uZm9ybWFuY2VSZXF1ZXN0LlBhcnNlciwgbmV3W117
ICJQcm90b2J1ZlBheWxvYWQiLCAiSnNvblBheWxvYWQiLCAiUmVxdWVzdGVkT3V0cHV0Rm9ybWF0
IiB9LCBuZXdbXXsgIlBheWxvYWQiIH0sIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBi
cjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6Q29uZm9ybWFuY2UuQ29uZm9y
bWFuY2VSZXNwb25zZSksIGdsb2JhbDo6Q29uZm9ybWFuY2UuQ29uZm9ybWFuY2VSZXNwb25zZS5Q
YXJzZXIsIG5ld1tdeyAiUGFyc2VFcnJvciIsICJTZXJpYWxpemVFcnJvciIsICJSdW50aW1lRXJy
b3IiLCAiUHJvdG9idWZQYXlsb2FkIiwgIkpzb25QYXlsb2FkIiwgIlNraXBwZWQiIH0sIG5ld1td
eyAiUmVzdWx0IiB9LCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRl
ZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6OkNvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcyksIGds
b2JhbDo6Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzLlBhcnNlciwgbmV3W117ICJPcHRpb25hbElu
dDMyIiwgIk9wdGlvbmFsSW50NjQiLCAiT3B0aW9uYWxVaW50MzIiLCAiT3B0aW9uYWxVaW50NjQi
LCAiT3B0aW9uYWxTaW50MzIiLCAiT3B0aW9uYWxTaW50NjQiLCAiT3B0aW9uYWxGaXhlZDMyIiwg
Ik9wdGlvbmFsRml4ZWQ2NCIsICJPcHRpb25hbFNmaXhlZDMyIiwgIk9wdGlvbmFsU2ZpeGVkNjQi
LCAiT3B0aW9uYWxGbG9hdCIsICJPcHRpb25hbERvdWJsZSIsICJPcHRpb25hbEJvb2wiLCAiT3B0
aW9uYWxTdHJpbmciLCAiT3B0aW9uYWxCeXRlcyIsICJPcHRpb25hbE5lc3RlZE1lc3NhZ2UiLCAi
T3B0aW9uYWxGb3JlaWduTWVzc2FnZSIsICJPcHRpb25hbE5lc3RlZEVudW0iLCAiT3B0aW9uYWxG
b3JlaWduRW51bSIsICJPcHRpb25hbFN0cmluZ1BpZWNlIiwgIk9wdGlvbmFsQ29yZCIsICJSZWN1
cnNpdmVNZXNzYWdlIiwgIlJlcGVhdGVkSW50MzIiLCAiUmVwZWF0ZWRJbnQ2NCIsICJSZXBlYXRl
ZFVpbnQzMiIsICJSZXBlYXRlZFVpbnQ2NCIsICJSZXBlYXRlZFNpbnQzMiIsICJSZXBlYXRlZFNp
bnQ2NCIsICJSZXBlYXRlZEZpeGVkMzIiLCAiUmVwZWF0ZWRGaXhlZDY0IiwgIlJlcGVhdGVkU2Zp
eGVkMzIiLCAiUmVwZWF0ZWRTZml4ZWQ2NCIsICJSZXBlYXRlZEZsb2F0IiwgIlJlcGVhdGVkRG91
YmxlIiwgIlJlcGVhdGVkQm9vbCIsICJSZXBlYXRlZFN0cmluZyIsICJSZXBlYXRlZEJ5dGVzIiwg
IlJlcGVhdGVkTmVzdGVkTWVzc2FnZSIsICJSZXBlYXRlZEZvcmVpZ25NZXNzYWdlIiwgIlJlcGVh
dGVkTmVzdGVkRW51bSIsICJSZXBlYXRlZEZvcmVpZ25FbnVtIiwgIlJlcGVhdGVkU3RyaW5nUGll
Y2UiLCAiUmVwZWF0ZWRDb3JkIiwgIk1hcEludDMySW50MzIiLCAiTWFwSW50NjRJbnQ2NCIsICJN
YXBVaW50MzJVaW50MzIiLCAiTWFwVWludDY0VWludDY0IiwgIk1hcFNpbnQzMlNpbnQzMiIsICJN
YXBTaW50NjRTaW50NjQiLCAiTWFwRml4ZWQzMkZpeGVkMzIiLCAiTWFwRml4ZWQ2NEZpeGVkNjQi
LCAiTWFwU2ZpeGVkMzJTZml4ZWQzMiIsICJNYXBTZml4ZWQ2NFNmaXhlZDY0IiwgIk1hcEludDMy
RmxvYXQiLCAiTWFwSW50MzJEb3VibGUiLCAiTWFwQm9vbEJvb2wiLCAiTWFwU3RyaW5nU3RyaW5n
IiwgIk1hcFN0cmluZ0J5dGVzIiwgIk1hcFN0cmluZ05lc3RlZE1lc3NhZ2UiLCAiTWFwU3RyaW5n
Rm9yZWlnbk1lc3NhZ2UiLCAiTWFwU3RyaW5nTmVzdGVkRW51bSIsICJNYXBTdHJpbmdGb3JlaWdu
RW51bSIsICJPbmVvZlVpbnQzMiIsICJPbmVvZk5lc3RlZE1lc3NhZ2UiLCAiT25lb2ZTdHJpbmci
LCAiT25lb2ZCeXRlcyIsICJPcHRpb25hbEJvb2xXcmFwcGVyIiwgIk9wdGlvbmFsSW50MzJXcmFw
cGVyIiwgIk9wdGlvbmFsSW50NjRXcmFwcGVyIiwgIk9wdGlvbmFsVWludDMyV3JhcHBlciIsICJP
cHRpb25hbFVpbnQ2NFdyYXBwZXIiLCAiT3B0aW9uYWxGbG9hdFdyYXBwZXIiLCAiT3B0aW9uYWxE
b3VibGVXcmFwcGVyIiwgIk9wdGlvbmFsU3RyaW5nV3JhcHBlciIsICJPcHRpb25hbEJ5dGVzV3Jh
cHBlciIsICJSZXBlYXRlZEJvb2xXcmFwcGVyIiwgIlJlcGVhdGVkSW50MzJXcmFwcGVyIiwgIlJl
cGVhdGVkSW50NjRXcmFwcGVyIiwgIlJlcGVhdGVkVWludDMyV3JhcHBlciIsICJSZXBlYXRlZFVp
bnQ2NFdyYXBwZXIiLCAiUmVwZWF0ZWRGbG9hdFdyYXBwZXIiLCAiUmVwZWF0ZWREb3VibGVXcmFw
cGVyIiwgIlJlcGVhdGVkU3RyaW5nV3JhcHBlciIsICJSZXBlYXRlZEJ5dGVzV3JhcHBlciIsICJP
cHRpb25hbER1cmF0aW9uIiwgIk9wdGlvbmFsVGltZXN0YW1wIiwgIk9wdGlvbmFsRmllbGRNYXNr
IiwgIk9wdGlvbmFsU3RydWN0IiwgIk9wdGlvbmFsQW55IiwgIk9wdGlvbmFsVmFsdWUiLCAiUmVw
ZWF0ZWREdXJhdGlvbiIsICJSZXBlYXRlZFRpbWVzdGFtcCIsICJSZXBlYXRlZEZpZWxkbWFzayIs
ICJSZXBlYXRlZFN0cnVjdCIsICJSZXBlYXRlZEFueSIsICJSZXBlYXRlZFZhbHVlIiwgIkZpZWxk
bmFtZTEiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWUzIiwgIkZpZWxkTmFtZTQiLCAiRmllbGQw
TmFtZTUiLCAiRmllbGQwTmFtZTYiLCAiRmllbGROYW1lNyIsICJGaWVsZE5hbWU4IiwgIkZpZWxk
TmFtZTkiLCAiRmllbGROYW1lMTAiLCAiRklFTEROQU1FMTEiLCAiRklFTEROYW1lMTIiIH0sIG5l
d1tdeyAiT25lb2ZGaWVsZCIgfSwgbmV3W117IHR5cGVvZihnbG9iYWw6OkNvbmZvcm1hbmNlLlRl
c3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRFbnVtKSB9LCBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBl
SW5mb1tdIHsgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6Q29u
Zm9ybWFuY2UuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UpLCBnbG9iYWw6OkNvbmZv
cm1hbmNlLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlLlBhcnNlciwgbmV3W117ICJB
IiwgIkNvcmVjdXJzaXZlIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG51bGws
IG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51
bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIH0pLAot
ICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6
Q29uZm9ybWFuY2UuRm9yZWlnbk1lc3NhZ2UpLCBnbG9iYWw6OkNvbmZvcm1hbmNlLkZvcmVpZ25N
ZXNzYWdlLlBhcnNlciwgbmV3W117ICJDIiB9LCBudWxsLCBudWxsLCBudWxsKQotICAgICAgICAg
IH0pKTsKLSAgICB9Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLSAgI3JlZ2lvbiBFbnVtcwotICBw
dWJsaWMgZW51bSBXaXJlRm9ybWF0IHsKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlVOU1BFQ0lG
SUVEIildIFVuc3BlY2lmaWVkID0gMCwKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlBST1RPQlVG
IildIFByb3RvYnVmID0gMSwKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkpTT04iKV0gSnNvbiA9
IDIsCi0gIH0KLQotICBwdWJsaWMgZW51bSBGb3JlaWduRW51bSB7Ci0gICAgW3Bicjo6T3JpZ2lu
YWxOYW1lKCJGT1JFSUdOX0ZPTyIpXSBGb3JlaWduRm9vID0gMCwKLSAgICBbcGJyOjpPcmlnaW5h
bE5hbWUoIkZPUkVJR05fQkFSIildIEZvcmVpZ25CYXIgPSAxLAotICAgIFtwYnI6Ok9yaWdpbmFs
TmFtZSgiRk9SRUlHTl9CQVoiKV0gRm9yZWlnbkJheiA9IDIsCi0gIH0KLQotICAjZW5kcmVnaW9u
Ci0KLSAgI3JlZ2lvbiBNZXNzYWdlcwotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgUmVwcmVzZW50
cyBhIHNpbmdsZSB0ZXN0IGNhc2UncyBpbnB1dC4gIFRoZSB0ZXN0ZWUgc2hvdWxkOgotICAvLy8K
LSAgLy8vICAgIDEuIHBhcnNlIHRoaXMgcHJvdG8gKHdoaWNoIHNob3VsZCBhbHdheXMgc3VjY2Vl
ZCkKLSAgLy8vICAgIDIuIHBhcnNlIHRoZSBwcm90b2J1ZiBvciBKU09OIHBheWxvYWQgaW4gInBh
eWxvYWQiICh3aGljaCBtYXkgZmFpbCkKLSAgLy8vICAgIDMuIGlmIHRoZSBwYXJzZSBzdWNjZWVk
ZWQsIHNlcmlhbGl6ZSB0aGUgbWVzc2FnZSBpbiB0aGUgcmVxdWVzdGVkIGZvcm1hdC4KLSAgLy8v
IDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNl
ckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIENvbmZvcm1h
bmNlUmVxdWVzdCA6IHBiOjpJTWVzc2FnZTxDb25mb3JtYW5jZVJlcXVlc3Q+IHsKLSAgICBwcml2
YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxDb25mb3JtYW5jZVJlcXVlc3Q+
IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8Q29uZm9ybWFuY2VSZXF1ZXN0PigoKSA9
PiBuZXcgQ29uZm9ybWFuY2VSZXF1ZXN0KCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3Nh
Z2VQYXJzZXI8Q29uZm9ybWFuY2VSZXF1ZXN0PiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNl
cjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3Jp
cHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpDb25mb3JtYW5jZS5Db25mb3JtYW5j
ZVJlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMF07IH0KLSAgICB9Ci0KLSAgICBw
YnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdl
dCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIENvbmZvcm1hbmNl
UmVxdWVzdCgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlh
bCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgQ29uZm9ybWFuY2VSZXF1ZXN0
KENvbmZvcm1hbmNlUmVxdWVzdCBvdGhlcikgOiB0aGlzKCkgewotICAgICAgcmVxdWVzdGVkT3V0
cHV0Rm9ybWF0XyA9IG90aGVyLnJlcXVlc3RlZE91dHB1dEZvcm1hdF87Ci0gICAgICBzd2l0Y2gg
KG90aGVyLlBheWxvYWRDYXNlKSB7Ci0gICAgICAgIGNhc2UgUGF5bG9hZE9uZW9mQ2FzZS5Qcm90
b2J1ZlBheWxvYWQ6Ci0gICAgICAgICAgUHJvdG9idWZQYXlsb2FkID0gb3RoZXIuUHJvdG9idWZQ
YXlsb2FkOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBheWxvYWRPbmVvZkNhc2Uu
SnNvblBheWxvYWQ6Ci0gICAgICAgICAgSnNvblBheWxvYWQgPSBvdGhlci5Kc29uUGF5bG9hZDsK
LSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgIH0KLQotICAgIHB1YmxpYyBDb25mb3Jt
YW5jZVJlcXVlc3QgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IENvbmZvcm1hbmNlUmVxdWVz
dCh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
InByb3RvYnVmX3BheWxvYWQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50
IFByb3RvYnVmUGF5bG9hZEZpZWxkTnVtYmVyID0gMTsKLSAgICBwdWJsaWMgcGI6OkJ5dGVTdHJp
bmcgUHJvdG9idWZQYXlsb2FkIHsKLSAgICAgIGdldCB7IHJldHVybiBwYXlsb2FkQ2FzZV8gPT0g
UGF5bG9hZE9uZW9mQ2FzZS5Qcm90b2J1ZlBheWxvYWQgPyAocGI6OkJ5dGVTdHJpbmcpIHBheWxv
YWRfIDogcGI6OkJ5dGVTdHJpbmcuRW1wdHk7IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHBheWxv
YWRfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIp
OwotICAgICAgICBwYXlsb2FkQ2FzZV8gPSBQYXlsb2FkT25lb2ZDYXNlLlByb3RvYnVmUGF5bG9h
ZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0
aGUgImpzb25fcGF5bG9hZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
SnNvblBheWxvYWRGaWVsZE51bWJlciA9IDI7Ci0gICAgcHVibGljIHN0cmluZyBKc29uUGF5bG9h
ZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gcGF5bG9hZENhc2VfID09IFBheWxvYWRPbmVvZkNhc2Uu
SnNvblBheWxvYWQgPyAoc3RyaW5nKSBwYXlsb2FkXyA6ICIiOyB9Ci0gICAgICBzZXQgewotICAg
ICAgICBwYXlsb2FkXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVl
LCAidmFsdWUiKTsKLSAgICAgICAgcGF5bG9hZENhc2VfID0gUGF5bG9hZE9uZW9mQ2FzZS5Kc29u
UGF5bG9hZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVy
IGZvciB0aGUgInJlcXVlc3RlZF9vdXRwdXRfZm9ybWF0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBSZXF1ZXN0ZWRPdXRwdXRGb3JtYXRGaWVsZE51bWJlciA9IDM7Ci0g
ICAgcHJpdmF0ZSBnbG9iYWw6OkNvbmZvcm1hbmNlLldpcmVGb3JtYXQgcmVxdWVzdGVkT3V0cHV0
Rm9ybWF0XyA9IDA7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgV2hpY2ggZm9ybWF0IHNo
b3VsZCB0aGUgdGVzdGVlIHNlcmlhbGl6ZSBpdHMgbWVzc2FnZSB0bz8KLSAgICAvLy8gPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBnbG9iYWw6OkNvbmZvcm1hbmNlLldpcmVGb3JtYXQgUmVxdWVzdGVk
T3V0cHV0Rm9ybWF0IHsKLSAgICAgIGdldCB7IHJldHVybiByZXF1ZXN0ZWRPdXRwdXRGb3JtYXRf
OyB9Ci0gICAgICBzZXQgewotICAgICAgICByZXF1ZXN0ZWRPdXRwdXRGb3JtYXRfID0gdmFsdWU7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBvYmplY3QgcGF5bG9hZF87Ci0gICAgLy8v
IDxzdW1tYXJ5PkVudW0gb2YgcG9zc2libGUgY2FzZXMgZm9yIHRoZSAicGF5bG9hZCIgb25lb2Yu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBlbnVtIFBheWxvYWRPbmVvZkNhc2UgewotICAgICAgTm9u
ZSA9IDAsCi0gICAgICBQcm90b2J1ZlBheWxvYWQgPSAxLAotICAgICAgSnNvblBheWxvYWQgPSAy
LAotICAgIH0KLSAgICBwcml2YXRlIFBheWxvYWRPbmVvZkNhc2UgcGF5bG9hZENhc2VfID0gUGF5
bG9hZE9uZW9mQ2FzZS5Ob25lOwotICAgIHB1YmxpYyBQYXlsb2FkT25lb2ZDYXNlIFBheWxvYWRD
YXNlIHsKLSAgICAgIGdldCB7IHJldHVybiBwYXlsb2FkQ2FzZV87IH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgdm9pZCBDbGVhclBheWxvYWQoKSB7Ci0gICAgICBwYXlsb2FkQ2FzZV8gPSBQYXlsb2Fk
T25lb2ZDYXNlLk5vbmU7Ci0gICAgICBwYXlsb2FkXyA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVi
bGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVx
dWFscyhvdGhlciBhcyBDb25mb3JtYW5jZVJlcXVlc3QpOwotICAgIH0KLQotICAgIHB1YmxpYyBi
b29sIEVxdWFscyhDb25mb3JtYW5jZVJlcXVlc3Qgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVu
Y2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0K
LSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgfQotICAgICAgaWYgKFByb3RvYnVmUGF5bG9hZCAhPSBvdGhlci5Qcm90
b2J1ZlBheWxvYWQpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChKc29uUGF5bG9hZCAhPSBvdGhl
ci5Kc29uUGF5bG9hZCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKFJlcXVlc3RlZE91dHB1dEZv
cm1hdCAhPSBvdGhlci5SZXF1ZXN0ZWRPdXRwdXRGb3JtYXQpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmIChQYXlsb2FkQ2FzZSAhPSBvdGhlci5QYXlsb2FkQ2FzZSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNo
Q29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChwYXlsb2FkQ2FzZV8gPT0g
UGF5bG9hZE9uZW9mQ2FzZS5Qcm90b2J1ZlBheWxvYWQpIGhhc2ggXj0gUHJvdG9idWZQYXlsb2Fk
LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAocGF5bG9hZENhc2VfID09IFBheWxvYWRPbmVvZkNh
c2UuSnNvblBheWxvYWQpIGhhc2ggXj0gSnNvblBheWxvYWQuR2V0SGFzaENvZGUoKTsKLSAgICAg
IGlmIChSZXF1ZXN0ZWRPdXRwdXRGb3JtYXQgIT0gMCkgaGFzaCBePSBSZXF1ZXN0ZWRPdXRwdXRG
b3JtYXQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gKGludCkgcGF5bG9hZENhc2VfOwot
ICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBU
b1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNT
dHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRP
dXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAocGF5bG9hZENhc2VfID09IFBheWxvYWRP
bmVvZkNhc2UuUHJvdG9idWZQYXlsb2FkKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygx
MCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUJ5dGVzKFByb3RvYnVmUGF5bG9hZCk7Ci0gICAgICB9
Ci0gICAgICBpZiAocGF5bG9hZENhc2VfID09IFBheWxvYWRPbmVvZkNhc2UuSnNvblBheWxvYWQp
IHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE4KTsKLSAgICAgICAgb3V0cHV0LldyaXRl
U3RyaW5nKEpzb25QYXlsb2FkKTsKLSAgICAgIH0KLSAgICAgIGlmIChSZXF1ZXN0ZWRPdXRwdXRG
b3JtYXQgIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMjQpOwotICAgICAgICBv
dXRwdXQuV3JpdGVFbnVtKChpbnQpIFJlcXVlc3RlZE91dHB1dEZvcm1hdCk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUg
PSAwOwotICAgICAgaWYgKHBheWxvYWRDYXNlXyA9PSBQYXlsb2FkT25lb2ZDYXNlLlByb3RvYnVm
UGF5bG9hZCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29t
cHV0ZUJ5dGVzU2l6ZShQcm90b2J1ZlBheWxvYWQpOwotICAgICAgfQotICAgICAgaWYgKHBheWxv
YWRDYXNlXyA9PSBQYXlsb2FkT25lb2ZDYXNlLkpzb25QYXlsb2FkKSB7Ci0gICAgICAgIHNpemUg
Kz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShKc29uUGF5bG9h
ZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVxdWVzdGVkT3V0cHV0Rm9ybWF0ICE9IDApIHsKLSAg
ICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgo
aW50KSBSZXF1ZXN0ZWRPdXRwdXRGb3JtYXQpOwotICAgICAgfQotICAgICAgcmV0dXJuIHNpemU7
Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKENvbmZvcm1hbmNlUmVxdWVzdCBv
dGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgfQotICAgICAgaWYgKG90aGVyLlJlcXVlc3RlZE91dHB1dEZvcm1hdCAhPSAwKSB7Ci0gICAg
ICAgIFJlcXVlc3RlZE91dHB1dEZvcm1hdCA9IG90aGVyLlJlcXVlc3RlZE91dHB1dEZvcm1hdDsK
LSAgICAgIH0KLSAgICAgIHN3aXRjaCAob3RoZXIuUGF5bG9hZENhc2UpIHsKLSAgICAgICAgY2Fz
ZSBQYXlsb2FkT25lb2ZDYXNlLlByb3RvYnVmUGF5bG9hZDoKLSAgICAgICAgICBQcm90b2J1ZlBh
eWxvYWQgPSBvdGhlci5Qcm90b2J1ZlBheWxvYWQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUGF5bG9hZE9uZW9mQ2FzZS5Kc29uUGF5bG9hZDoKLSAgICAgICAgICBKc29uUGF5bG9h
ZCA9IG90aGVyLkpzb25QYXlsb2FkOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAg
fQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0
KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygp
KSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgUHJvdG9idWZQYXlsb2FkID0gaW5wdXQuUmVh
ZEJ5dGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSAxODogewotICAgICAgICAgICAgSnNvblBheWxvYWQgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNDogewotICAg
ICAgICAgICAgcmVxdWVzdGVkT3V0cHV0Rm9ybWF0XyA9IChnbG9iYWw6OkNvbmZvcm1hbmNlLldp
cmVGb3JtYXQpIGlucHV0LlJlYWRFbnVtKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4K
LSAgLy8vICBSZXByZXNlbnRzIGEgc2luZ2xlIHRlc3QgY2FzZSdzIG91dHB1dC4KLSAgLy8vIDwv
c3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNv
ZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIENvbmZvcm1hbmNl
UmVzcG9uc2UgOiBwYjo6SU1lc3NhZ2U8Q29uZm9ybWFuY2VSZXNwb25zZT4gewotICAgIHByaXZh
dGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPENvbmZvcm1hbmNlUmVzcG9uc2U+
IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8Q29uZm9ybWFuY2VSZXNwb25zZT4oKCkg
PT4gbmV3IENvbmZvcm1hbmNlUmVzcG9uc2UoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVz
c2FnZVBhcnNlcjxDb25mb3JtYW5jZVJlc3BvbnNlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3Bh
cnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVz
Y3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpDb25mb3JtYW5jZS5Db25mb3Jt
YW5jZVJlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMV07IH0KLSAgICB9Ci0KLSAg
ICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAg
IGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIENvbmZvcm1h
bmNlUmVzcG9uc2UoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBh
cnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIENvbmZvcm1hbmNlUmVz
cG9uc2UoQ29uZm9ybWFuY2VSZXNwb25zZSBvdGhlcikgOiB0aGlzKCkgewotICAgICAgc3dpdGNo
IChvdGhlci5SZXN1bHRDYXNlKSB7Ci0gICAgICAgIGNhc2UgUmVzdWx0T25lb2ZDYXNlLlBhcnNl
RXJyb3I6Ci0gICAgICAgICAgUGFyc2VFcnJvciA9IG90aGVyLlBhcnNlRXJyb3I7Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzdWx0T25lb2ZDYXNlLlNlcmlhbGl6ZUVycm9yOgot
ICAgICAgICAgIFNlcmlhbGl6ZUVycm9yID0gb3RoZXIuU2VyaWFsaXplRXJyb3I7Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzdWx0T25lb2ZDYXNlLlJ1bnRpbWVFcnJvcjoKLSAg
ICAgICAgICBSdW50aW1lRXJyb3IgPSBvdGhlci5SdW50aW1lRXJyb3I7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUmVzdWx0T25lb2ZDYXNlLlByb3RvYnVmUGF5bG9hZDoKLSAgICAg
ICAgICBQcm90b2J1ZlBheWxvYWQgPSBvdGhlci5Qcm90b2J1ZlBheWxvYWQ7Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzdWx0T25lb2ZDYXNlLkpzb25QYXlsb2FkOgotICAgICAg
ICAgIEpzb25QYXlsb2FkID0gb3RoZXIuSnNvblBheWxvYWQ7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUmVzdWx0T25lb2ZDYXNlLlNraXBwZWQ6Ci0gICAgICAgICAgU2tpcHBlZCA9
IG90aGVyLlNraXBwZWQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAg
ICBwdWJsaWMgQ29uZm9ybWFuY2VSZXNwb25zZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcg
Q29uZm9ybWFuY2VSZXNwb25zZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgInBhcnNlX2Vycm9yIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVi
bGljIGNvbnN0IGludCBQYXJzZUVycm9yRmllbGROdW1iZXIgPSAxOwotICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAvLy8gIFRoaXMgc3RyaW5nIHNob3VsZCBiZSBzZXQgdG8gaW5kaWNhdGUgcGFyc2lu
ZyBmYWlsZWQuICBUaGUgc3RyaW5nIGNhbgotICAgIC8vLyAgcHJvdmlkZSBtb3JlIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBwYXJzZSBlcnJvciBpZiBpdCBpcyBhdmFpbGFibGUuCi0gICAgLy8vCi0g
ICAgLy8vICBTZXR0aW5nIHRoaXMgc3RyaW5nIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhl
IHRlc3RlZSBmYWlsZWQgdGhlCi0gICAgLy8vICB0ZXN0LiAgU29tZSBvZiB0aGUgdGVzdCBjYXNl
cyBhcmUgaW50ZW50aW9uYWxseSBpbnZhbGlkIGlucHV0LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgcHVibGljIHN0cmluZyBQYXJzZUVycm9yIHsKLSAgICAgIGdldCB7IHJldHVybiByZXN1bHRD
YXNlXyA9PSBSZXN1bHRPbmVvZkNhc2UuUGFyc2VFcnJvciA/IChzdHJpbmcpIHJlc3VsdF8gOiAi
IjsgfQotICAgICAgc2V0IHsKLSAgICAgICAgcmVzdWx0XyA9IHBiOjpQcm90b1ByZWNvbmRpdGlv
bnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgICAgcmVzdWx0Q2FzZV8gPSBS
ZXN1bHRPbmVvZkNhc2UuUGFyc2VFcnJvcjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInNlcmlhbGl6ZV9lcnJvciIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU2VyaWFsaXplRXJyb3JGaWVsZE51bWJlciA9IDY7
Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSWYgdGhlIGlucHV0IHdhcyBzdWNjZXNzZnVs
bHkgcGFyc2VkIGJ1dCBlcnJvcnMgb2NjdXJyZWQgd2hlbgotICAgIC8vLyAgc2VyaWFsaXppbmcg
aXQgdG8gdGhlIHJlcXVlc3RlZCBvdXRwdXQgZm9ybWF0LCBzZXQgdGhlIGVycm9yIG1lc3NhZ2Ug
aW4KLSAgICAvLy8gIHRoaXMgZmllbGQuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
c3RyaW5nIFNlcmlhbGl6ZUVycm9yIHsKLSAgICAgIGdldCB7IHJldHVybiByZXN1bHRDYXNlXyA9
PSBSZXN1bHRPbmVvZkNhc2UuU2VyaWFsaXplRXJyb3IgPyAoc3RyaW5nKSByZXN1bHRfIDogIiI7
IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHJlc3VsdF8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25z
LkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICAgIHJlc3VsdENhc2VfID0gUmVz
dWx0T25lb2ZDYXNlLlNlcmlhbGl6ZUVycm9yOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8
c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicnVudGltZV9lcnJvciIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUnVudGltZUVycm9yRmllbGROdW1iZXIgPSAyOwot
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFRoaXMgc2hvdWxkIGJlIHNldCBpZiBzb21lIG90
aGVyIGVycm9yIG9jY3VycmVkLiAgVGhpcyB3aWxsIGFsd2F5cwotICAgIC8vLyAgaW5kaWNhdGUg
dGhhdCB0aGUgdGVzdCBmYWlsZWQuICBUaGUgc3RyaW5nIGNhbiBwcm92aWRlIG1vcmUgaW5mb3Jt
YXRpb24KLSAgICAvLy8gIGFib3V0IHRoZSBmYWlsdXJlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgcHVibGljIHN0cmluZyBSdW50aW1lRXJyb3IgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlc3Vs
dENhc2VfID09IFJlc3VsdE9uZW9mQ2FzZS5SdW50aW1lRXJyb3IgPyAoc3RyaW5nKSByZXN1bHRf
IDogIiI7IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHJlc3VsdF8gPSBwYjo6UHJvdG9QcmVjb25k
aXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICAgIHJlc3VsdENhc2Vf
ID0gUmVzdWx0T25lb2ZDYXNlLlJ1bnRpbWVFcnJvcjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInByb3RvYnVmX3BheWxvYWQiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFByb3RvYnVmUGF5bG9hZEZpZWxkTnVt
YmVyID0gMzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBJZiB0aGUgaW5wdXQgd2FzIHN1
Y2Nlc3NmdWxseSBwYXJzZWQgYW5kIHRoZSByZXF1ZXN0ZWQgb3V0cHV0IHdhcwotICAgIC8vLyAg
cHJvdG9idWYsIHNlcmlhbGl6ZSBpdCB0byBwcm90b2J1ZiBhbmQgc2V0IGl0IGluIHRoaXMgZmll
bGQuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgcGI6OkJ5dGVTdHJpbmcgUHJvdG9i
dWZQYXlsb2FkIHsKLSAgICAgIGdldCB7IHJldHVybiByZXN1bHRDYXNlXyA9PSBSZXN1bHRPbmVv
ZkNhc2UuUHJvdG9idWZQYXlsb2FkID8gKHBiOjpCeXRlU3RyaW5nKSByZXN1bHRfIDogcGI6OkJ5
dGVTdHJpbmcuRW1wdHk7IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHJlc3VsdF8gPSBwYjo6UHJv
dG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICAgIHJl
c3VsdENhc2VfID0gUmVzdWx0T25lb2ZDYXNlLlByb3RvYnVmUGF5bG9hZDsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImpzb25fcGF5bG9h
ZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgSnNvblBheWxvYWRGaWVs
ZE51bWJlciA9IDQ7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSWYgdGhlIGlucHV0IHdh
cyBzdWNjZXNzZnVsbHkgcGFyc2VkIGFuZCB0aGUgcmVxdWVzdGVkIG91dHB1dCB3YXMgSlNPTiwK
LSAgICAvLy8gIHNlcmlhbGl6ZSB0byBKU09OIGFuZCBzZXQgaXQgaW4gdGhpcyBmaWVsZC4KLSAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdHJpbmcgSnNvblBheWxvYWQgewotICAgICAg
Z2V0IHsgcmV0dXJuIHJlc3VsdENhc2VfID09IFJlc3VsdE9uZW9mQ2FzZS5Kc29uUGF5bG9hZCA/
IChzdHJpbmcpIHJlc3VsdF8gOiAiIjsgfQotICAgICAgc2V0IHsKLSAgICAgICAgcmVzdWx0XyA9
IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAg
ICAgICAgcmVzdWx0Q2FzZV8gPSBSZXN1bHRPbmVvZkNhc2UuSnNvblBheWxvYWQ7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJza2lwcGVk
IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTa2lwcGVkRmllbGROdW1i
ZXIgPSA1OwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIEZvciB3aGVuIHRoZSB0ZXN0ZWUg
c2tpcHBlZCB0aGUgdGVzdCwgbGlrZWx5IGJlY2F1c2UgYSBjZXJ0YWluIGZlYXR1cmUKLSAgICAv
Ly8gIHdhc24ndCBzdXBwb3J0ZWQsIGxpa2UgSlNPTiBpbnB1dC9vdXRwdXQuCi0gICAgLy8vIDwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgc3RyaW5nIFNraXBwZWQgewotICAgICAgZ2V0IHsgcmV0dXJu
IHJlc3VsdENhc2VfID09IFJlc3VsdE9uZW9mQ2FzZS5Ta2lwcGVkID8gKHN0cmluZykgcmVzdWx0
XyA6ICIiOyB9Ci0gICAgICBzZXQgewotICAgICAgICByZXN1bHRfID0gcGI6OlByb3RvUHJlY29u
ZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAgICByZXN1bHRDYXNl
XyA9IFJlc3VsdE9uZW9mQ2FzZS5Ta2lwcGVkOwotICAgICAgfQotICAgIH0KLQotICAgIHByaXZh
dGUgb2JqZWN0IHJlc3VsdF87Ci0gICAgLy8vIDxzdW1tYXJ5PkVudW0gb2YgcG9zc2libGUgY2Fz
ZXMgZm9yIHRoZSAicmVzdWx0IiBvbmVvZi48L3N1bW1hcnk+Ci0gICAgcHVibGljIGVudW0gUmVz
dWx0T25lb2ZDYXNlIHsKLSAgICAgIE5vbmUgPSAwLAotICAgICAgUGFyc2VFcnJvciA9IDEsCi0g
ICAgICBTZXJpYWxpemVFcnJvciA9IDYsCi0gICAgICBSdW50aW1lRXJyb3IgPSAyLAotICAgICAg
UHJvdG9idWZQYXlsb2FkID0gMywKLSAgICAgIEpzb25QYXlsb2FkID0gNCwKLSAgICAgIFNraXBw
ZWQgPSA1LAotICAgIH0KLSAgICBwcml2YXRlIFJlc3VsdE9uZW9mQ2FzZSByZXN1bHRDYXNlXyA9
IFJlc3VsdE9uZW9mQ2FzZS5Ob25lOwotICAgIHB1YmxpYyBSZXN1bHRPbmVvZkNhc2UgUmVzdWx0
Q2FzZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVzdWx0Q2FzZV87IH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgdm9pZCBDbGVhclJlc3VsdCgpIHsKLSAgICAgIHJlc3VsdENhc2VfID0gUmVzdWx0T25l
b2ZDYXNlLk5vbmU7Ci0gICAgICByZXN1bHRfID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
b3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxz
KG90aGVyIGFzIENvbmZvcm1hbmNlUmVzcG9uc2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29s
IEVxdWFscyhDb25mb3JtYW5jZVJlc3BvbnNlIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNl
RXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChQYXJzZUVycm9yICE9IG90aGVyLlBhcnNlRXJyb3Ip
IHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChTZXJpYWxpemVFcnJvciAhPSBvdGhlci5TZXJpYWxp
emVFcnJvcikgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKFJ1bnRpbWVFcnJvciAhPSBvdGhlci5S
dW50aW1lRXJyb3IpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChQcm90b2J1ZlBheWxvYWQgIT0g
b3RoZXIuUHJvdG9idWZQYXlsb2FkKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoSnNvblBheWxv
YWQgIT0gb3RoZXIuSnNvblBheWxvYWQpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChTa2lwcGVk
ICE9IG90aGVyLlNraXBwZWQpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChSZXN1bHRDYXNlICE9
IG90aGVyLlJlc3VsdENhc2UpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQg
aGFzaCA9IDE7Ci0gICAgICBpZiAocmVzdWx0Q2FzZV8gPT0gUmVzdWx0T25lb2ZDYXNlLlBhcnNl
RXJyb3IpIGhhc2ggXj0gUGFyc2VFcnJvci5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKHJlc3Vs
dENhc2VfID09IFJlc3VsdE9uZW9mQ2FzZS5TZXJpYWxpemVFcnJvcikgaGFzaCBePSBTZXJpYWxp
emVFcnJvci5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKHJlc3VsdENhc2VfID09IFJlc3VsdE9u
ZW9mQ2FzZS5SdW50aW1lRXJyb3IpIGhhc2ggXj0gUnVudGltZUVycm9yLkdldEhhc2hDb2RlKCk7
Ci0gICAgICBpZiAocmVzdWx0Q2FzZV8gPT0gUmVzdWx0T25lb2ZDYXNlLlByb3RvYnVmUGF5bG9h
ZCkgaGFzaCBePSBQcm90b2J1ZlBheWxvYWQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChyZXN1
bHRDYXNlXyA9PSBSZXN1bHRPbmVvZkNhc2UuSnNvblBheWxvYWQpIGhhc2ggXj0gSnNvblBheWxv
YWQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChyZXN1bHRDYXNlXyA9PSBSZXN1bHRPbmVvZkNh
c2UuU2tpcHBlZCkgaGFzaCBePSBTa2lwcGVkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49
IChpbnQpIHJlc3VsdENhc2VfOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVi
bGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZv
cm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAocmVz
dWx0Q2FzZV8gPT0gUmVzdWx0T25lb2ZDYXNlLlBhcnNlRXJyb3IpIHsKLSAgICAgICAgb3V0cHV0
LldyaXRlUmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKFBhcnNlRXJyb3Ip
OwotICAgICAgfQotICAgICAgaWYgKHJlc3VsdENhc2VfID09IFJlc3VsdE9uZW9mQ2FzZS5SdW50
aW1lRXJyb3IpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE4KTsKLSAgICAgICAgb3V0
cHV0LldyaXRlU3RyaW5nKFJ1bnRpbWVFcnJvcik7Ci0gICAgICB9Ci0gICAgICBpZiAocmVzdWx0
Q2FzZV8gPT0gUmVzdWx0T25lb2ZDYXNlLlByb3RvYnVmUGF5bG9hZCkgewotICAgICAgICBvdXRw
dXQuV3JpdGVSYXdUYWcoMjYpOwotICAgICAgICBvdXRwdXQuV3JpdGVCeXRlcyhQcm90b2J1ZlBh
eWxvYWQpOwotICAgICAgfQotICAgICAgaWYgKHJlc3VsdENhc2VfID09IFJlc3VsdE9uZW9mQ2Fz
ZS5Kc29uUGF5bG9hZCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMzQpOwotICAgICAg
ICBvdXRwdXQuV3JpdGVTdHJpbmcoSnNvblBheWxvYWQpOwotICAgICAgfQotICAgICAgaWYgKHJl
c3VsdENhc2VfID09IFJlc3VsdE9uZW9mQ2FzZS5Ta2lwcGVkKSB7Ci0gICAgICAgIG91dHB1dC5X
cml0ZVJhd1RhZyg0Mik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhTa2lwcGVkKTsKLSAg
ICAgIH0KLSAgICAgIGlmIChyZXN1bHRDYXNlXyA9PSBSZXN1bHRPbmVvZkNhc2UuU2VyaWFsaXpl
RXJyb3IpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDUwKTsKLSAgICAgICAgb3V0cHV0
LldyaXRlU3RyaW5nKFNlcmlhbGl6ZUVycm9yKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJs
aWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAo
cmVzdWx0Q2FzZV8gPT0gUmVzdWx0T25lb2ZDYXNlLlBhcnNlRXJyb3IpIHsKLSAgICAgICAgc2l6
ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKFBhcnNlRXJy
b3IpOwotICAgICAgfQotICAgICAgaWYgKHJlc3VsdENhc2VfID09IFJlc3VsdE9uZW9mQ2FzZS5T
ZXJpYWxpemVFcnJvcikgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJl
YW0uQ29tcHV0ZVN0cmluZ1NpemUoU2VyaWFsaXplRXJyb3IpOwotICAgICAgfQotICAgICAgaWYg
KHJlc3VsdENhc2VfID09IFJlc3VsdE9uZW9mQ2FzZS5SdW50aW1lRXJyb3IpIHsKLSAgICAgICAg
c2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKFJ1bnRp
bWVFcnJvcik7Ci0gICAgICB9Ci0gICAgICBpZiAocmVzdWx0Q2FzZV8gPT0gUmVzdWx0T25lb2ZD
YXNlLlByb3RvYnVmUGF5bG9hZCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRw
dXRTdHJlYW0uQ29tcHV0ZUJ5dGVzU2l6ZShQcm90b2J1ZlBheWxvYWQpOwotICAgICAgfQotICAg
ICAgaWYgKHJlc3VsdENhc2VfID09IFJlc3VsdE9uZW9mQ2FzZS5Kc29uUGF5bG9hZCkgewotICAg
ICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUo
SnNvblBheWxvYWQpOwotICAgICAgfQotICAgICAgaWYgKHJlc3VsdENhc2VfID09IFJlc3VsdE9u
ZW9mQ2FzZS5Ta2lwcGVkKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0
cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShTa2lwcGVkKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBz
aXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShDb25mb3JtYW5jZVJlc3Bv
bnNlIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgICBzd2l0Y2ggKG90aGVyLlJlc3VsdENhc2UpIHsKLSAgICAgICAgY2Fz
ZSBSZXN1bHRPbmVvZkNhc2UuUGFyc2VFcnJvcjoKLSAgICAgICAgICBQYXJzZUVycm9yID0gb3Ro
ZXIuUGFyc2VFcnJvcjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXN1bHRPbmVv
ZkNhc2UuU2VyaWFsaXplRXJyb3I6Ci0gICAgICAgICAgU2VyaWFsaXplRXJyb3IgPSBvdGhlci5T
ZXJpYWxpemVFcnJvcjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXN1bHRPbmVv
ZkNhc2UuUnVudGltZUVycm9yOgotICAgICAgICAgIFJ1bnRpbWVFcnJvciA9IG90aGVyLlJ1bnRp
bWVFcnJvcjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXN1bHRPbmVvZkNhc2Uu
UHJvdG9idWZQYXlsb2FkOgotICAgICAgICAgIFByb3RvYnVmUGF5bG9hZCA9IG90aGVyLlByb3Rv
YnVmUGF5bG9hZDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXN1bHRPbmVvZkNh
c2UuSnNvblBheWxvYWQ6Ci0gICAgICAgICAgSnNvblBheWxvYWQgPSBvdGhlci5Kc29uUGF5bG9h
ZDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXN1bHRPbmVvZkNhc2UuU2tpcHBl
ZDoKLSAgICAgICAgICBTa2lwcGVkID0gb3RoZXIuU2tpcHBlZDsKLSAgICAgICAgICBicmVhazsK
LSAgICAgIH0KLQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9
IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIFBhcnNlRXJyb3Ig
PSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSAxODogewotICAgICAgICAgICAgUnVudGltZUVycm9yID0gaW5wdXQuUmVh
ZFN0cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh
c2UgMjY6IHsKLSAgICAgICAgICAgIFByb3RvYnVmUGF5bG9hZCA9IGlucHV0LlJlYWRCeXRlcygp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMzQ6IHsK
LSAgICAgICAgICAgIEpzb25QYXlsb2FkID0gaW5wdXQuUmVhZFN0cmluZygpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDI6IHsKLSAgICAgICAgICAg
IFNraXBwZWQgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgY2FzZSA1MDogewotICAgICAgICAgICAgU2VyaWFsaXplRXJyb3Ig
PSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8v
ICBUaGlzIHByb3RvIGluY2x1ZGVzIGV2ZXJ5IHR5cGUgb2YgZmllbGQgaW4gYm90aCBzaW5ndWxh
ciBhbmQgcmVwZWF0ZWQKLSAgLy8vICBmb3Jtcy4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2Jh
bDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAg
cHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFRlc3RBbGxUeXBlcyA6IHBiOjpJTWVzc2FnZTxU
ZXN0QWxsVHlwZXM+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBh
cnNlcjxUZXN0QWxsVHlwZXM+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdEFs
bFR5cGVzPigoKSA9PiBuZXcgVGVzdEFsbFR5cGVzKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6
Ok1lc3NhZ2VQYXJzZXI8VGVzdEFsbFR5cGVzPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNl
cjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3Jp
cHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpDb25mb3JtYW5jZS5Db25mb3JtYW5j
ZVJlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMl07IH0KLSAgICB9Ci0KLSAgICBw
YnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdl
dCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RBbGxUeXBl
cygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lk
IE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgVGVzdEFsbFR5cGVzKFRlc3RBbGxUeXBl
cyBvdGhlcikgOiB0aGlzKCkgewotICAgICAgb3B0aW9uYWxJbnQzMl8gPSBvdGhlci5vcHRpb25h
bEludDMyXzsKLSAgICAgIG9wdGlvbmFsSW50NjRfID0gb3RoZXIub3B0aW9uYWxJbnQ2NF87Ci0g
ICAgICBvcHRpb25hbFVpbnQzMl8gPSBvdGhlci5vcHRpb25hbFVpbnQzMl87Ci0gICAgICBvcHRp
b25hbFVpbnQ2NF8gPSBvdGhlci5vcHRpb25hbFVpbnQ2NF87Ci0gICAgICBvcHRpb25hbFNpbnQz
Ml8gPSBvdGhlci5vcHRpb25hbFNpbnQzMl87Ci0gICAgICBvcHRpb25hbFNpbnQ2NF8gPSBvdGhl
ci5vcHRpb25hbFNpbnQ2NF87Ci0gICAgICBvcHRpb25hbEZpeGVkMzJfID0gb3RoZXIub3B0aW9u
YWxGaXhlZDMyXzsKLSAgICAgIG9wdGlvbmFsRml4ZWQ2NF8gPSBvdGhlci5vcHRpb25hbEZpeGVk
NjRfOwotICAgICAgb3B0aW9uYWxTZml4ZWQzMl8gPSBvdGhlci5vcHRpb25hbFNmaXhlZDMyXzsK
LSAgICAgIG9wdGlvbmFsU2ZpeGVkNjRfID0gb3RoZXIub3B0aW9uYWxTZml4ZWQ2NF87Ci0gICAg
ICBvcHRpb25hbEZsb2F0XyA9IG90aGVyLm9wdGlvbmFsRmxvYXRfOwotICAgICAgb3B0aW9uYWxE
b3VibGVfID0gb3RoZXIub3B0aW9uYWxEb3VibGVfOwotICAgICAgb3B0aW9uYWxCb29sXyA9IG90
aGVyLm9wdGlvbmFsQm9vbF87Ci0gICAgICBvcHRpb25hbFN0cmluZ18gPSBvdGhlci5vcHRpb25h
bFN0cmluZ187Ci0gICAgICBvcHRpb25hbEJ5dGVzXyA9IG90aGVyLm9wdGlvbmFsQnl0ZXNfOwot
ICAgICAgT3B0aW9uYWxOZXN0ZWRNZXNzYWdlID0gb3RoZXIub3B0aW9uYWxOZXN0ZWRNZXNzYWdl
XyAhPSBudWxsID8gb3RoZXIuT3B0aW9uYWxOZXN0ZWRNZXNzYWdlLkNsb25lKCkgOiBudWxsOwot
ICAgICAgT3B0aW9uYWxGb3JlaWduTWVzc2FnZSA9IG90aGVyLm9wdGlvbmFsRm9yZWlnbk1lc3Nh
Z2VfICE9IG51bGwgPyBvdGhlci5PcHRpb25hbEZvcmVpZ25NZXNzYWdlLkNsb25lKCkgOiBudWxs
OwotICAgICAgb3B0aW9uYWxOZXN0ZWRFbnVtXyA9IG90aGVyLm9wdGlvbmFsTmVzdGVkRW51bV87
Ci0gICAgICBvcHRpb25hbEZvcmVpZ25FbnVtXyA9IG90aGVyLm9wdGlvbmFsRm9yZWlnbkVudW1f
OwotICAgICAgb3B0aW9uYWxTdHJpbmdQaWVjZV8gPSBvdGhlci5vcHRpb25hbFN0cmluZ1BpZWNl
XzsKLSAgICAgIG9wdGlvbmFsQ29yZF8gPSBvdGhlci5vcHRpb25hbENvcmRfOwotICAgICAgUmVj
dXJzaXZlTWVzc2FnZSA9IG90aGVyLnJlY3Vyc2l2ZU1lc3NhZ2VfICE9IG51bGwgPyBvdGhlci5S
ZWN1cnNpdmVNZXNzYWdlLkNsb25lKCkgOiBudWxsOwotICAgICAgcmVwZWF0ZWRJbnQzMl8gPSBv
dGhlci5yZXBlYXRlZEludDMyXy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRJbnQ2NF8gPSBvdGhl
ci5yZXBlYXRlZEludDY0Xy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRVaW50MzJfID0gb3RoZXIu
cmVwZWF0ZWRVaW50MzJfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZFVpbnQ2NF8gPSBvdGhlci5y
ZXBlYXRlZFVpbnQ2NF8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkU2ludDMyXyA9IG90aGVyLnJl
cGVhdGVkU2ludDMyXy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRTaW50NjRfID0gb3RoZXIucmVw
ZWF0ZWRTaW50NjRfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZEZpeGVkMzJfID0gb3RoZXIucmVw
ZWF0ZWRGaXhlZDMyXy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRGaXhlZDY0XyA9IG90aGVyLnJl
cGVhdGVkRml4ZWQ2NF8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkU2ZpeGVkMzJfID0gb3RoZXIu
cmVwZWF0ZWRTZml4ZWQzMl8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkU2ZpeGVkNjRfID0gb3Ro
ZXIucmVwZWF0ZWRTZml4ZWQ2NF8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkRmxvYXRfID0gb3Ro
ZXIucmVwZWF0ZWRGbG9hdF8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkRG91YmxlXyA9IG90aGVy
LnJlcGVhdGVkRG91YmxlXy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRCb29sXyA9IG90aGVyLnJl
cGVhdGVkQm9vbF8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkU3RyaW5nXyA9IG90aGVyLnJlcGVh
dGVkU3RyaW5nXy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRCeXRlc18gPSBvdGhlci5yZXBlYXRl
ZEJ5dGVzXy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWROZXN0ZWRNZXNzYWdlXyA9IG90aGVyLnJl
cGVhdGVkTmVzdGVkTWVzc2FnZV8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkRm9yZWlnbk1lc3Nh
Z2VfID0gb3RoZXIucmVwZWF0ZWRGb3JlaWduTWVzc2FnZV8uQ2xvbmUoKTsKLSAgICAgIHJlcGVh
dGVkTmVzdGVkRW51bV8gPSBvdGhlci5yZXBlYXRlZE5lc3RlZEVudW1fLkNsb25lKCk7Ci0gICAg
ICByZXBlYXRlZEZvcmVpZ25FbnVtXyA9IG90aGVyLnJlcGVhdGVkRm9yZWlnbkVudW1fLkNsb25l
KCk7Ci0gICAgICByZXBlYXRlZFN0cmluZ1BpZWNlXyA9IG90aGVyLnJlcGVhdGVkU3RyaW5nUGll
Y2VfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZENvcmRfID0gb3RoZXIucmVwZWF0ZWRDb3JkXy5D
bG9uZSgpOwotICAgICAgbWFwSW50MzJJbnQzMl8gPSBvdGhlci5tYXBJbnQzMkludDMyXy5DbG9u
ZSgpOwotICAgICAgbWFwSW50NjRJbnQ2NF8gPSBvdGhlci5tYXBJbnQ2NEludDY0Xy5DbG9uZSgp
OwotICAgICAgbWFwVWludDMyVWludDMyXyA9IG90aGVyLm1hcFVpbnQzMlVpbnQzMl8uQ2xvbmUo
KTsKLSAgICAgIG1hcFVpbnQ2NFVpbnQ2NF8gPSBvdGhlci5tYXBVaW50NjRVaW50NjRfLkNsb25l
KCk7Ci0gICAgICBtYXBTaW50MzJTaW50MzJfID0gb3RoZXIubWFwU2ludDMyU2ludDMyXy5DbG9u
ZSgpOwotICAgICAgbWFwU2ludDY0U2ludDY0XyA9IG90aGVyLm1hcFNpbnQ2NFNpbnQ2NF8uQ2xv
bmUoKTsKLSAgICAgIG1hcEZpeGVkMzJGaXhlZDMyXyA9IG90aGVyLm1hcEZpeGVkMzJGaXhlZDMy
Xy5DbG9uZSgpOwotICAgICAgbWFwRml4ZWQ2NEZpeGVkNjRfID0gb3RoZXIubWFwRml4ZWQ2NEZp
eGVkNjRfLkNsb25lKCk7Ci0gICAgICBtYXBTZml4ZWQzMlNmaXhlZDMyXyA9IG90aGVyLm1hcFNm
aXhlZDMyU2ZpeGVkMzJfLkNsb25lKCk7Ci0gICAgICBtYXBTZml4ZWQ2NFNmaXhlZDY0XyA9IG90
aGVyLm1hcFNmaXhlZDY0U2ZpeGVkNjRfLkNsb25lKCk7Ci0gICAgICBtYXBJbnQzMkZsb2F0XyA9
IG90aGVyLm1hcEludDMyRmxvYXRfLkNsb25lKCk7Ci0gICAgICBtYXBJbnQzMkRvdWJsZV8gPSBv
dGhlci5tYXBJbnQzMkRvdWJsZV8uQ2xvbmUoKTsKLSAgICAgIG1hcEJvb2xCb29sXyA9IG90aGVy
Lm1hcEJvb2xCb29sXy5DbG9uZSgpOwotICAgICAgbWFwU3RyaW5nU3RyaW5nXyA9IG90aGVyLm1h
cFN0cmluZ1N0cmluZ18uQ2xvbmUoKTsKLSAgICAgIG1hcFN0cmluZ0J5dGVzXyA9IG90aGVyLm1h
cFN0cmluZ0J5dGVzXy5DbG9uZSgpOwotICAgICAgbWFwU3RyaW5nTmVzdGVkTWVzc2FnZV8gPSBv
dGhlci5tYXBTdHJpbmdOZXN0ZWRNZXNzYWdlXy5DbG9uZSgpOwotICAgICAgbWFwU3RyaW5nRm9y
ZWlnbk1lc3NhZ2VfID0gb3RoZXIubWFwU3RyaW5nRm9yZWlnbk1lc3NhZ2VfLkNsb25lKCk7Ci0g
ICAgICBtYXBTdHJpbmdOZXN0ZWRFbnVtXyA9IG90aGVyLm1hcFN0cmluZ05lc3RlZEVudW1fLkNs
b25lKCk7Ci0gICAgICBtYXBTdHJpbmdGb3JlaWduRW51bV8gPSBvdGhlci5tYXBTdHJpbmdGb3Jl
aWduRW51bV8uQ2xvbmUoKTsKLSAgICAgIE9wdGlvbmFsQm9vbFdyYXBwZXIgPSBvdGhlci5PcHRp
b25hbEJvb2xXcmFwcGVyOwotICAgICAgT3B0aW9uYWxJbnQzMldyYXBwZXIgPSBvdGhlci5PcHRp
b25hbEludDMyV3JhcHBlcjsKLSAgICAgIE9wdGlvbmFsSW50NjRXcmFwcGVyID0gb3RoZXIuT3B0
aW9uYWxJbnQ2NFdyYXBwZXI7Ci0gICAgICBPcHRpb25hbFVpbnQzMldyYXBwZXIgPSBvdGhlci5P
cHRpb25hbFVpbnQzMldyYXBwZXI7Ci0gICAgICBPcHRpb25hbFVpbnQ2NFdyYXBwZXIgPSBvdGhl
ci5PcHRpb25hbFVpbnQ2NFdyYXBwZXI7Ci0gICAgICBPcHRpb25hbEZsb2F0V3JhcHBlciA9IG90
aGVyLk9wdGlvbmFsRmxvYXRXcmFwcGVyOwotICAgICAgT3B0aW9uYWxEb3VibGVXcmFwcGVyID0g
b3RoZXIuT3B0aW9uYWxEb3VibGVXcmFwcGVyOwotICAgICAgT3B0aW9uYWxTdHJpbmdXcmFwcGVy
ID0gb3RoZXIuT3B0aW9uYWxTdHJpbmdXcmFwcGVyOwotICAgICAgT3B0aW9uYWxCeXRlc1dyYXBw
ZXIgPSBvdGhlci5PcHRpb25hbEJ5dGVzV3JhcHBlcjsKLSAgICAgIHJlcGVhdGVkQm9vbFdyYXBw
ZXJfID0gb3RoZXIucmVwZWF0ZWRCb29sV3JhcHBlcl8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVk
SW50MzJXcmFwcGVyXyA9IG90aGVyLnJlcGVhdGVkSW50MzJXcmFwcGVyXy5DbG9uZSgpOwotICAg
ICAgcmVwZWF0ZWRJbnQ2NFdyYXBwZXJfID0gb3RoZXIucmVwZWF0ZWRJbnQ2NFdyYXBwZXJfLkNs
b25lKCk7Ci0gICAgICByZXBlYXRlZFVpbnQzMldyYXBwZXJfID0gb3RoZXIucmVwZWF0ZWRVaW50
MzJXcmFwcGVyXy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRVaW50NjRXcmFwcGVyXyA9IG90aGVy
LnJlcGVhdGVkVWludDY0V3JhcHBlcl8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkRmxvYXRXcmFw
cGVyXyA9IG90aGVyLnJlcGVhdGVkRmxvYXRXcmFwcGVyXy5DbG9uZSgpOwotICAgICAgcmVwZWF0
ZWREb3VibGVXcmFwcGVyXyA9IG90aGVyLnJlcGVhdGVkRG91YmxlV3JhcHBlcl8uQ2xvbmUoKTsK
LSAgICAgIHJlcGVhdGVkU3RyaW5nV3JhcHBlcl8gPSBvdGhlci5yZXBlYXRlZFN0cmluZ1dyYXBw
ZXJfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZEJ5dGVzV3JhcHBlcl8gPSBvdGhlci5yZXBlYXRl
ZEJ5dGVzV3JhcHBlcl8uQ2xvbmUoKTsKLSAgICAgIE9wdGlvbmFsRHVyYXRpb24gPSBvdGhlci5v
cHRpb25hbER1cmF0aW9uXyAhPSBudWxsID8gb3RoZXIuT3B0aW9uYWxEdXJhdGlvbi5DbG9uZSgp
IDogbnVsbDsKLSAgICAgIE9wdGlvbmFsVGltZXN0YW1wID0gb3RoZXIub3B0aW9uYWxUaW1lc3Rh
bXBfICE9IG51bGwgPyBvdGhlci5PcHRpb25hbFRpbWVzdGFtcC5DbG9uZSgpIDogbnVsbDsKLSAg
ICAgIE9wdGlvbmFsRmllbGRNYXNrID0gb3RoZXIub3B0aW9uYWxGaWVsZE1hc2tfICE9IG51bGwg
PyBvdGhlci5PcHRpb25hbEZpZWxkTWFzay5DbG9uZSgpIDogbnVsbDsKLSAgICAgIE9wdGlvbmFs
U3RydWN0ID0gb3RoZXIub3B0aW9uYWxTdHJ1Y3RfICE9IG51bGwgPyBvdGhlci5PcHRpb25hbFN0
cnVjdC5DbG9uZSgpIDogbnVsbDsKLSAgICAgIE9wdGlvbmFsQW55ID0gb3RoZXIub3B0aW9uYWxB
bnlfICE9IG51bGwgPyBvdGhlci5PcHRpb25hbEFueS5DbG9uZSgpIDogbnVsbDsKLSAgICAgIE9w
dGlvbmFsVmFsdWUgPSBvdGhlci5vcHRpb25hbFZhbHVlXyAhPSBudWxsID8gb3RoZXIuT3B0aW9u
YWxWYWx1ZS5DbG9uZSgpIDogbnVsbDsKLSAgICAgIHJlcGVhdGVkRHVyYXRpb25fID0gb3RoZXIu
cmVwZWF0ZWREdXJhdGlvbl8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkVGltZXN0YW1wXyA9IG90
aGVyLnJlcGVhdGVkVGltZXN0YW1wXy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRGaWVsZG1hc2tf
ID0gb3RoZXIucmVwZWF0ZWRGaWVsZG1hc2tfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZFN0cnVj
dF8gPSBvdGhlci5yZXBlYXRlZFN0cnVjdF8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkQW55XyA9
IG90aGVyLnJlcGVhdGVkQW55Xy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRWYWx1ZV8gPSBvdGhl
ci5yZXBlYXRlZFZhbHVlXy5DbG9uZSgpOwotICAgICAgZmllbGRuYW1lMV8gPSBvdGhlci5maWVs
ZG5hbWUxXzsKLSAgICAgIGZpZWxkTmFtZTJfID0gb3RoZXIuZmllbGROYW1lMl87Ci0gICAgICBG
aWVsZE5hbWUzXyA9IG90aGVyLkZpZWxkTmFtZTNfOwotICAgICAgZmllbGROYW1lNF8gPSBvdGhl
ci5maWVsZE5hbWU0XzsKLSAgICAgIGZpZWxkME5hbWU1XyA9IG90aGVyLmZpZWxkME5hbWU1XzsK
LSAgICAgIGZpZWxkME5hbWU2XyA9IG90aGVyLmZpZWxkME5hbWU2XzsKLSAgICAgIGZpZWxkTmFt
ZTdfID0gb3RoZXIuZmllbGROYW1lN187Ci0gICAgICBmaWVsZE5hbWU4XyA9IG90aGVyLmZpZWxk
TmFtZThfOwotICAgICAgZmllbGROYW1lOV8gPSBvdGhlci5maWVsZE5hbWU5XzsKLSAgICAgIGZp
ZWxkTmFtZTEwXyA9IG90aGVyLmZpZWxkTmFtZTEwXzsKLSAgICAgIGZJRUxETkFNRTExXyA9IG90
aGVyLmZJRUxETkFNRTExXzsKLSAgICAgIGZJRUxETmFtZTEyXyA9IG90aGVyLmZJRUxETmFtZTEy
XzsKLSAgICAgIHN3aXRjaCAob3RoZXIuT25lb2ZGaWVsZENhc2UpIHsKLSAgICAgICAgY2FzZSBP
bmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mVWludDMyOgotICAgICAgICAgIE9uZW9mVWludDMyID0g
b3RoZXIuT25lb2ZVaW50MzI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25lb2ZG
aWVsZE9uZW9mQ2FzZS5PbmVvZk5lc3RlZE1lc3NhZ2U6Ci0gICAgICAgICAgT25lb2ZOZXN0ZWRN
ZXNzYWdlID0gb3RoZXIuT25lb2ZOZXN0ZWRNZXNzYWdlLkNsb25lKCk7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZlN0cmluZzoKLSAgICAg
ICAgICBPbmVvZlN0cmluZyA9IG90aGVyLk9uZW9mU3RyaW5nOwotICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZCeXRlczoKLSAgICAgICAgICBP
bmVvZkJ5dGVzID0gb3RoZXIuT25lb2ZCeXRlczsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0K
LQotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0QWxsVHlwZXMgQ2xvbmUoKSB7Ci0gICAgICByZXR1
cm4gbmV3IFRlc3RBbGxUeXBlcyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgIm9wdGlvbmFsX2ludDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBPcHRpb25hbEludDMyRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZh
dGUgaW50IG9wdGlvbmFsSW50MzJfOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFNpbmd1
bGFyCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgaW50IE9wdGlvbmFsSW50MzIgewot
ICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbmFsSW50MzJfOyB9Ci0gICAgICBzZXQgewotICAgICAg
ICBvcHRpb25hbEludDMyXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3Vt
bWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW9uYWxfaW50NjQiIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9wdGlvbmFsSW50NjRGaWVsZE51bWJlciA9IDI7Ci0g
ICAgcHJpdmF0ZSBsb25nIG9wdGlvbmFsSW50NjRfOwotICAgIHB1YmxpYyBsb25nIE9wdGlvbmFs
SW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbmFsSW50NjRfOyB9Ci0gICAgICBzZXQg
ewotICAgICAgICBvcHRpb25hbEludDY0XyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAg
IC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW9uYWxfdWludDMyIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPcHRpb25hbFVpbnQzMkZpZWxkTnVt
YmVyID0gMzsKLSAgICBwcml2YXRlIHVpbnQgb3B0aW9uYWxVaW50MzJfOwotICAgIHB1YmxpYyB1
aW50IE9wdGlvbmFsVWludDMyIHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25hbFVpbnQzMl87
IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9wdGlvbmFsVWludDMyXyA9IHZhbHVlOwotICAgICAg
fQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW9u
YWxfdWludDY0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPcHRpb25h
bFVpbnQ2NEZpZWxkTnVtYmVyID0gNDsKLSAgICBwcml2YXRlIHVsb25nIG9wdGlvbmFsVWludDY0
XzsKLSAgICBwdWJsaWMgdWxvbmcgT3B0aW9uYWxVaW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJu
IG9wdGlvbmFsVWludDY0XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0aW9uYWxVaW50NjRf
ID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJvcHRpb25hbF9zaW50MzIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
Y29uc3QgaW50IE9wdGlvbmFsU2ludDMyRmllbGROdW1iZXIgPSA1OwotICAgIHByaXZhdGUgaW50
IG9wdGlvbmFsU2ludDMyXzsKLSAgICBwdWJsaWMgaW50IE9wdGlvbmFsU2ludDMyIHsKLSAgICAg
IGdldCB7IHJldHVybiBvcHRpb25hbFNpbnQzMl87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9w
dGlvbmFsU2ludDMyXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW9uYWxfc2ludDY0IiBmaWVsZC48L3N1bW1hcnk+
Ci0gICAgcHVibGljIGNvbnN0IGludCBPcHRpb25hbFNpbnQ2NEZpZWxkTnVtYmVyID0gNjsKLSAg
ICBwcml2YXRlIGxvbmcgb3B0aW9uYWxTaW50NjRfOwotICAgIHB1YmxpYyBsb25nIE9wdGlvbmFs
U2ludDY0IHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25hbFNpbnQ2NF87IH0KLSAgICAgIHNl
dCB7Ci0gICAgICAgIG9wdGlvbmFsU2ludDY0XyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW9uYWxfZml4ZWQzMiIg
ZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgT3B0aW9uYWxGaXhlZDMyRmll
bGROdW1iZXIgPSA3OwotICAgIHByaXZhdGUgdWludCBvcHRpb25hbEZpeGVkMzJfOwotICAgIHB1
YmxpYyB1aW50IE9wdGlvbmFsRml4ZWQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gb3B0aW9uYWxG
aXhlZDMyXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0aW9uYWxGaXhlZDMyXyA9IHZhbHVl
OwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRo
ZSAib3B0aW9uYWxfZml4ZWQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBp
bnQgT3B0aW9uYWxGaXhlZDY0RmllbGROdW1iZXIgPSA4OwotICAgIHByaXZhdGUgdWxvbmcgb3B0
aW9uYWxGaXhlZDY0XzsKLSAgICBwdWJsaWMgdWxvbmcgT3B0aW9uYWxGaXhlZDY0IHsKLSAgICAg
IGdldCB7IHJldHVybiBvcHRpb25hbEZpeGVkNjRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBv
cHRpb25hbEZpeGVkNjRfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1t
YXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvcHRpb25hbF9zZml4ZWQzMiIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgT3B0aW9uYWxTZml4ZWQzMkZpZWxkTnVtYmVyID0g
OTsKLSAgICBwcml2YXRlIGludCBvcHRpb25hbFNmaXhlZDMyXzsKLSAgICBwdWJsaWMgaW50IE9w
dGlvbmFsU2ZpeGVkMzIgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbmFsU2ZpeGVkMzJfOyB9
Ci0gICAgICBzZXQgewotICAgICAgICBvcHRpb25hbFNmaXhlZDMyXyA9IHZhbHVlOwotICAgICAg
fQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW9u
YWxfc2ZpeGVkNjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9wdGlv
bmFsU2ZpeGVkNjRGaWVsZE51bWJlciA9IDEwOwotICAgIHByaXZhdGUgbG9uZyBvcHRpb25hbFNm
aXhlZDY0XzsKLSAgICBwdWJsaWMgbG9uZyBPcHRpb25hbFNmaXhlZDY0IHsKLSAgICAgIGdldCB7
IHJldHVybiBvcHRpb25hbFNmaXhlZDY0XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0aW9u
YWxTZml4ZWQ2NF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+
RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlvbmFsX2Zsb2F0IiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBPcHRpb25hbEZsb2F0RmllbGROdW1iZXIgPSAxMTsKLSAgICBw
cml2YXRlIGZsb2F0IG9wdGlvbmFsRmxvYXRfOwotICAgIHB1YmxpYyBmbG9hdCBPcHRpb25hbEZs
b2F0IHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25hbEZsb2F0XzsgfQotICAgICAgc2V0IHsK
LSAgICAgICAgb3B0aW9uYWxGbG9hdF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlvbmFsX2RvdWJsZSIgZmllbGQu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgT3B0aW9uYWxEb3VibGVGaWVsZE51bWJl
ciA9IDEyOwotICAgIHByaXZhdGUgZG91YmxlIG9wdGlvbmFsRG91YmxlXzsKLSAgICBwdWJsaWMg
ZG91YmxlIE9wdGlvbmFsRG91YmxlIHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25hbERvdWJs
ZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9wdGlvbmFsRG91YmxlXyA9IHZhbHVlOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0
aW9uYWxfYm9vbCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgT3B0aW9u
YWxCb29sRmllbGROdW1iZXIgPSAxMzsKLSAgICBwcml2YXRlIGJvb2wgb3B0aW9uYWxCb29sXzsK
LSAgICBwdWJsaWMgYm9vbCBPcHRpb25hbEJvb2wgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlv
bmFsQm9vbF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9wdGlvbmFsQm9vbF8gPSB2YWx1ZTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
Im9wdGlvbmFsX3N0cmluZyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
T3B0aW9uYWxTdHJpbmdGaWVsZE51bWJlciA9IDE0OwotICAgIHByaXZhdGUgc3RyaW5nIG9wdGlv
bmFsU3RyaW5nXyA9ICIiOwotICAgIHB1YmxpYyBzdHJpbmcgT3B0aW9uYWxTdHJpbmcgewotICAg
ICAgZ2V0IHsgcmV0dXJuIG9wdGlvbmFsU3RyaW5nXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
b3B0aW9uYWxTdHJpbmdfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFs
dWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBu
dW1iZXIgZm9yIHRoZSAib3B0aW9uYWxfYnl0ZXMiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IE9wdGlvbmFsQnl0ZXNGaWVsZE51bWJlciA9IDE1OwotICAgIHByaXZhdGUg
cGI6OkJ5dGVTdHJpbmcgb3B0aW9uYWxCeXRlc18gPSBwYjo6Qnl0ZVN0cmluZy5FbXB0eTsKLSAg
ICBwdWJsaWMgcGI6OkJ5dGVTdHJpbmcgT3B0aW9uYWxCeXRlcyB7Ci0gICAgICBnZXQgeyByZXR1
cm4gb3B0aW9uYWxCeXRlc187IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9wdGlvbmFsQnl0ZXNf
ID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwot
ICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAi
b3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29u
c3QgaW50IE9wdGlvbmFsTmVzdGVkTWVzc2FnZUZpZWxkTnVtYmVyID0gMTg7Ci0gICAgcHJpdmF0
ZSBnbG9iYWw6OkNvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlIG9w
dGlvbmFsTmVzdGVkTWVzc2FnZV87Ci0gICAgcHVibGljIGdsb2JhbDo6Q29uZm9ybWFuY2UuVGVz
dEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UgT3B0aW9uYWxOZXN0ZWRNZXNzYWdlIHsKLSAg
ICAgIGdldCB7IHJldHVybiBvcHRpb25hbE5lc3RlZE1lc3NhZ2VfOyB9Ci0gICAgICBzZXQgewot
ICAgICAgICBvcHRpb25hbE5lc3RlZE1lc3NhZ2VfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvcHRpb25hbF9mb3JlaWdu
X21lc3NhZ2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9wdGlvbmFs
Rm9yZWlnbk1lc3NhZ2VGaWVsZE51bWJlciA9IDE5OwotICAgIHByaXZhdGUgZ2xvYmFsOjpDb25m
b3JtYW5jZS5Gb3JlaWduTWVzc2FnZSBvcHRpb25hbEZvcmVpZ25NZXNzYWdlXzsKLSAgICBwdWJs
aWMgZ2xvYmFsOjpDb25mb3JtYW5jZS5Gb3JlaWduTWVzc2FnZSBPcHRpb25hbEZvcmVpZ25NZXNz
YWdlIHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25hbEZvcmVpZ25NZXNzYWdlXzsgfQotICAg
ICAgc2V0IHsKLSAgICAgICAgb3B0aW9uYWxGb3JlaWduTWVzc2FnZV8gPSB2YWx1ZTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlv
bmFsX25lc3RlZF9lbnVtIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBP
cHRpb25hbE5lc3RlZEVudW1GaWVsZE51bWJlciA9IDIxOwotICAgIHByaXZhdGUgZ2xvYmFsOjpD
b25mb3JtYW5jZS5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51bSBvcHRpb25hbE5lc3RlZEVu
dW1fID0gMDsKLSAgICBwdWJsaWMgZ2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0QWxsVHlwZXMuVHlw
ZXMuTmVzdGVkRW51bSBPcHRpb25hbE5lc3RlZEVudW0gewotICAgICAgZ2V0IHsgcmV0dXJuIG9w
dGlvbmFsTmVzdGVkRW51bV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9wdGlvbmFsTmVzdGVk
RW51bV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgIm9wdGlvbmFsX2ZvcmVpZ25fZW51bSIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgT3B0aW9uYWxGb3JlaWduRW51bUZpZWxkTnVtYmVyID0gMjI7
Ci0gICAgcHJpdmF0ZSBnbG9iYWw6OkNvbmZvcm1hbmNlLkZvcmVpZ25FbnVtIG9wdGlvbmFsRm9y
ZWlnbkVudW1fID0gMDsKLSAgICBwdWJsaWMgZ2xvYmFsOjpDb25mb3JtYW5jZS5Gb3JlaWduRW51
bSBPcHRpb25hbEZvcmVpZ25FbnVtIHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25hbEZvcmVp
Z25FbnVtXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0aW9uYWxGb3JlaWduRW51bV8gPSB2
YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgIm9wdGlvbmFsX3N0cmluZ19waWVjZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgT3B0aW9uYWxTdHJpbmdQaWVjZUZpZWxkTnVtYmVyID0gMjQ7Ci0gICAgcHJp
dmF0ZSBzdHJpbmcgb3B0aW9uYWxTdHJpbmdQaWVjZV8gPSAiIjsKLSAgICBwdWJsaWMgc3RyaW5n
IE9wdGlvbmFsU3RyaW5nUGllY2UgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbmFsU3RyaW5n
UGllY2VfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvcHRpb25hbFN0cmluZ1BpZWNlXyA9IHBi
OjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlv
bmFsX2NvcmQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9wdGlvbmFs
Q29yZEZpZWxkTnVtYmVyID0gMjU7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgb3B0aW9uYWxDb3JkXyA9
ICIiOwotICAgIHB1YmxpYyBzdHJpbmcgT3B0aW9uYWxDb3JkIHsKLSAgICAgIGdldCB7IHJldHVy
biBvcHRpb25hbENvcmRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvcHRpb25hbENvcmRfID0g
cGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVj
dXJzaXZlX21lc3NhZ2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJl
Y3Vyc2l2ZU1lc3NhZ2VGaWVsZE51bWJlciA9IDI3OwotICAgIHByaXZhdGUgZ2xvYmFsOjpDb25m
b3JtYW5jZS5UZXN0QWxsVHlwZXMgcmVjdXJzaXZlTWVzc2FnZV87Ci0gICAgcHVibGljIGdsb2Jh
bDo6Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzIFJlY3Vyc2l2ZU1lc3NhZ2UgewotICAgICAgZ2V0
IHsgcmV0dXJuIHJlY3Vyc2l2ZU1lc3NhZ2VfOyB9Ci0gICAgICBzZXQgewotICAgICAgICByZWN1
cnNpdmVNZXNzYWdlXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfaW50MzIiIGZpZWxkLjwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkSW50MzJGaWVsZE51bWJlciA9IDMxOwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGludD4gX3JlcGVhdGVkX3Jl
cGVhdGVkSW50MzJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMigyNTAp
OwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGludD4gcmVwZWF0ZWRJ
bnQzMl8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGludD4oKTsKLSAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgLy8vICBSZXBlYXRlZAotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiYzo6
UmVwZWF0ZWRGaWVsZDxpbnQ+IFJlcGVhdGVkSW50MzIgewotICAgICAgZ2V0IHsgcmV0dXJuIHJl
cGVhdGVkSW50MzJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBm
b3IgdGhlICJyZXBlYXRlZF9pbnQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgUmVwZWF0ZWRJbnQ2NEZpZWxkTnVtYmVyID0gMzI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMg
cmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8bG9uZz4gX3JlcGVhdGVkX3JlcGVhdGVkSW50NjRfY29k
ZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JJbnQ2NCgyNTgpOwotICAgIHByaXZhdGUg
cmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc+IHJlcGVhdGVkSW50NjRfID0gbmV3IHBi
Yzo6UmVwZWF0ZWRGaWVsZDxsb25nPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8
bG9uZz4gUmVwZWF0ZWRJbnQ2NCB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRJbnQ2NF87
IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVh
dGVkX3VpbnQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0
ZWRVaW50MzJGaWVsZE51bWJlciA9IDMzOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBi
OjpGaWVsZENvZGVjPHVpbnQ+IF9yZXBlYXRlZF9yZXBlYXRlZFVpbnQzMl9jb2RlYwotICAgICAg
ICA9IHBiOjpGaWVsZENvZGVjLkZvclVJbnQzMigyNjYpOwotICAgIHByaXZhdGUgcmVhZG9ubHkg
cGJjOjpSZXBlYXRlZEZpZWxkPHVpbnQ+IHJlcGVhdGVkVWludDMyXyA9IG5ldyBwYmM6OlJlcGVh
dGVkRmllbGQ8dWludD4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVpbnQ+IFJl
cGVhdGVkVWludDMyIHsKLSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZFVpbnQzMl87IH0KLSAg
ICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX3Vp
bnQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRVaW50
NjRGaWVsZE51bWJlciA9IDM0OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVs
ZENvZGVjPHVsb25nPiBfcmVwZWF0ZWRfcmVwZWF0ZWRVaW50NjRfY29kZWMKLSAgICAgICAgPSBw
Yjo6RmllbGRDb2RlYy5Gb3JVSW50NjQoMjc0KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6
UmVwZWF0ZWRGaWVsZDx1bG9uZz4gcmVwZWF0ZWRVaW50NjRfID0gbmV3IHBiYzo6UmVwZWF0ZWRG
aWVsZDx1bG9uZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVsb25nPiBSZXBl
YXRlZFVpbnQ2NCB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRVaW50NjRfOyB9Ci0gICAg
fQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9zaW50
MzIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkU2ludDMy
RmllbGROdW1iZXIgPSAzNTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRD
b2RlYzxpbnQ+IF9yZXBlYXRlZF9yZXBlYXRlZFNpbnQzMl9jb2RlYwotICAgICAgICA9IHBiOjpG
aWVsZENvZGVjLkZvclNJbnQzMigyODIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBl
YXRlZEZpZWxkPGludD4gcmVwZWF0ZWRTaW50MzJfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxp
bnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+IFJlcGVhdGVkU2ludDMy
IHsKLSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZFNpbnQzMl87IH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX3NpbnQ2NCIgZmllbGQu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRTaW50NjRGaWVsZE51bWJl
ciA9IDM2OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGxvbmc+
IF9yZXBlYXRlZF9yZXBlYXRlZFNpbnQ2NF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVj
LkZvclNJbnQ2NCgyOTApOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxk
PGxvbmc+IHJlcGVhdGVkU2ludDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz4oKTsK
LSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc+IFJlcGVhdGVkU2ludDY0IHsKLSAg
ICAgIGdldCB7IHJldHVybiByZXBlYXRlZFNpbnQ2NF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX2ZpeGVkMzIiIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkRml4ZWQzMkZpZWxkTnVtYmVyID0g
Mzc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8dWludD4gX3Jl
cGVhdGVkX3JlcGVhdGVkRml4ZWQzMl9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZv
ckZpeGVkMzIoMjk4KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDx1
aW50PiByZXBlYXRlZEZpeGVkMzJfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDx1aW50PigpOwot
ICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8dWludD4gUmVwZWF0ZWRGaXhlZDMyIHsKLSAg
ICAgIGdldCB7IHJldHVybiByZXBlYXRlZEZpeGVkMzJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxz
dW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9maXhlZDY0IiBmaWVsZC48L3N1
bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBSZXBlYXRlZEZpeGVkNjRGaWVsZE51bWJlciA9
IDM4OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHVsb25nPiBf
cmVwZWF0ZWRfcmVwZWF0ZWRGaXhlZDY0X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMu
Rm9yRml4ZWQ2NCgzMDYpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxk
PHVsb25nPiByZXBlYXRlZEZpeGVkNjRfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDx1bG9uZz4o
KTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVsb25nPiBSZXBlYXRlZEZpeGVkNjQg
ewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkRml4ZWQ2NF87IH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX3NmaXhlZDMyIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBSZXBlYXRlZFNmaXhlZDMyRmllbGRO
dW1iZXIgPSAzOTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxp
bnQ+IF9yZXBlYXRlZF9yZXBlYXRlZFNmaXhlZDMyX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxk
Q29kZWMuRm9yU0ZpeGVkMzIoMzE0KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0
ZWRGaWVsZDxpbnQ+IHJlcGVhdGVkU2ZpeGVkMzJfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxp
bnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+IFJlcGVhdGVkU2ZpeGVk
MzIgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkU2ZpeGVkMzJfOyB9Ci0gICAgfQotCi0g
ICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9zZml4ZWQ2NCIg
ZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRTZml4ZWQ2NEZp
ZWxkTnVtYmVyID0gNDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29k
ZWM8bG9uZz4gX3JlcGVhdGVkX3JlcGVhdGVkU2ZpeGVkNjRfY29kZWMKLSAgICAgICAgPSBwYjo6
RmllbGRDb2RlYy5Gb3JTRml4ZWQ2NCgzMjIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpS
ZXBlYXRlZEZpZWxkPGxvbmc+IHJlcGVhdGVkU2ZpeGVkNjRfID0gbmV3IHBiYzo6UmVwZWF0ZWRG
aWVsZDxsb25nPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz4gUmVwZWF0
ZWRTZml4ZWQ2NCB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRTZml4ZWQ2NF87IH0KLSAg
ICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX2Zs
b2F0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBSZXBlYXRlZEZsb2F0
RmllbGROdW1iZXIgPSA0MTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRD
b2RlYzxmbG9hdD4gX3JlcGVhdGVkX3JlcGVhdGVkRmxvYXRfY29kZWMKLSAgICAgICAgPSBwYjo6
RmllbGRDb2RlYy5Gb3JGbG9hdCgzMzApOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBl
YXRlZEZpZWxkPGZsb2F0PiByZXBlYXRlZEZsb2F0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8
ZmxvYXQ+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxmbG9hdD4gUmVwZWF0ZWRG
bG9hdCB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRGbG9hdF87IH0KLSAgICB9Ci0KLSAg
ICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX2RvdWJsZSIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWREb3VibGVGaWVsZE51
bWJlciA9IDQyOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGRv
dWJsZT4gX3JlcGVhdGVkX3JlcGVhdGVkRG91YmxlX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxk
Q29kZWMuRm9yRG91YmxlKDMzOCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVk
RmllbGQ8ZG91YmxlPiByZXBlYXRlZERvdWJsZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGRv
dWJsZT4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGRvdWJsZT4gUmVwZWF0ZWRE
b3VibGUgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkRG91YmxlXzsgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfYm9vbCIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRCb29sRmllbGROdW1i
ZXIgPSA0MzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxib29s
PiBfcmVwZWF0ZWRfcmVwZWF0ZWRCb29sX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMu
Rm9yQm9vbCgzNDYpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGJv
b2w+IHJlcGVhdGVkQm9vbF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGJvb2w+KCk7Ci0gICAg
cHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxib29sPiBSZXBlYXRlZEJvb2wgewotICAgICAgZ2V0
IHsgcmV0dXJuIHJlcGVhdGVkQm9vbF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX3N0cmluZyIgZmllbGQuPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRTdHJpbmdGaWVsZE51bWJlciA9IDQ0OwotICAgIHBy
aXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHN0cmluZz4gX3JlcGVhdGVkX3Jl
cGVhdGVkU3RyaW5nX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RyaW5nKDM1
NCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8c3RyaW5nPiByZXBl
YXRlZFN0cmluZ18gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPHN0cmluZz4oKTsKLSAgICBwdWJs
aWMgcGJjOjpSZXBlYXRlZEZpZWxkPHN0cmluZz4gUmVwZWF0ZWRTdHJpbmcgewotICAgICAgZ2V0
IHsgcmV0dXJuIHJlcGVhdGVkU3RyaW5nXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfYnl0ZXMiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkQnl0ZXNGaWVsZE51bWJlciA9IDQ1OwotICAgIHBy
aXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHBiOjpCeXRlU3RyaW5nPiBfcmVw
ZWF0ZWRfcmVwZWF0ZWRCeXRlc19jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckJ5
dGVzKDM2Mik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8cGI6OkJ5
dGVTdHJpbmc+IHJlcGVhdGVkQnl0ZXNfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxwYjo6Qnl0
ZVN0cmluZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHBiOjpCeXRlU3RyaW5n
PiBSZXBlYXRlZEJ5dGVzIHsKLSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZEJ5dGVzXzsgfQot
ICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRf
bmVzdGVkX21lc3NhZ2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJl
cGVhdGVkTmVzdGVkTWVzc2FnZUZpZWxkTnVtYmVyID0gNDg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMg
cmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0QWxsVHlwZXMu
VHlwZXMuTmVzdGVkTWVzc2FnZT4gX3JlcGVhdGVkX3JlcGVhdGVkTmVzdGVkTWVzc2FnZV9jb2Rl
YwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMzg2LCBnbG9iYWw6OkNvbmZv
cm1hbmNlLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlLlBhcnNlcik7Ci0gICAgcHJp
dmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0
QWxsVHlwZXMuVHlwZXMuTmVzdGVkTWVzc2FnZT4gcmVwZWF0ZWROZXN0ZWRNZXNzYWdlXyA9IG5l
dyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0QWxsVHlwZXMuVHlw
ZXMuTmVzdGVkTWVzc2FnZT4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2Jh
bDo6Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2U+IFJlcGVhdGVk
TmVzdGVkTWVzc2FnZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWROZXN0ZWRNZXNzYWdl
XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVw
ZWF0ZWRfZm9yZWlnbl9tZXNzYWdlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBSZXBlYXRlZEZvcmVpZ25NZXNzYWdlRmllbGROdW1iZXIgPSA0OTsKLSAgICBwcml2YXRl
IHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6OkNvbmZvcm1hbmNlLkZvcmVp
Z25NZXNzYWdlPiBfcmVwZWF0ZWRfcmVwZWF0ZWRGb3JlaWduTWVzc2FnZV9jb2RlYwotICAgICAg
ICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMzk0LCBnbG9iYWw6OkNvbmZvcm1hbmNlLkZv
cmVpZ25NZXNzYWdlLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVk
RmllbGQ8Z2xvYmFsOjpDb25mb3JtYW5jZS5Gb3JlaWduTWVzc2FnZT4gcmVwZWF0ZWRGb3JlaWdu
TWVzc2FnZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6Q29uZm9ybWFuY2UuRm9y
ZWlnbk1lc3NhZ2U+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6OkNv
bmZvcm1hbmNlLkZvcmVpZ25NZXNzYWdlPiBSZXBlYXRlZEZvcmVpZ25NZXNzYWdlIHsKLSAgICAg
IGdldCB7IHJldHVybiByZXBlYXRlZEZvcmVpZ25NZXNzYWdlXzsgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfbmVzdGVkX2VudW0iIGZp
ZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkTmVzdGVkRW51bUZp
ZWxkTnVtYmVyID0gNTE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29k
ZWM8Z2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51bT4gX3Jl
cGVhdGVkX3JlcGVhdGVkTmVzdGVkRW51bV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVj
LkZvckVudW0oNDEwLCB4ID0+IChpbnQpIHgsIHggPT4gKGdsb2JhbDo6Q29uZm9ybWFuY2UuVGVz
dEFsbFR5cGVzLlR5cGVzLk5lc3RlZEVudW0pIHgpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJj
OjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzLlR5cGVzLk5l
c3RlZEVudW0+IHJlcGVhdGVkTmVzdGVkRW51bV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGds
b2JhbDo6Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZEVudW0+KCk7Ci0gICAg
cHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6OkNvbmZvcm1hbmNlLlRlc3RBbGxUeXBl
cy5UeXBlcy5OZXN0ZWRFbnVtPiBSZXBlYXRlZE5lc3RlZEVudW0gewotICAgICAgZ2V0IHsgcmV0
dXJuIHJlcGVhdGVkTmVzdGVkRW51bV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX2ZvcmVpZ25fZW51bSIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRGb3JlaWduRW51bUZpZWxkTnVtYmVyID0g
NTI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpD
b25mb3JtYW5jZS5Gb3JlaWduRW51bT4gX3JlcGVhdGVkX3JlcGVhdGVkRm9yZWlnbkVudW1fY29k
ZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JFbnVtKDQxOCwgeCA9PiAoaW50KSB4LCB4
ID0+IChnbG9iYWw6OkNvbmZvcm1hbmNlLkZvcmVpZ25FbnVtKSB4KTsKLSAgICBwcml2YXRlIHJl
YWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6OkNvbmZvcm1hbmNlLkZvcmVpZ25FbnVt
PiByZXBlYXRlZEZvcmVpZ25FbnVtXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpD
b25mb3JtYW5jZS5Gb3JlaWduRW51bT4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxk
PGdsb2JhbDo6Q29uZm9ybWFuY2UuRm9yZWlnbkVudW0+IFJlcGVhdGVkRm9yZWlnbkVudW0gewot
ICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkRm9yZWlnbkVudW1fOyB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9zdHJpbmdfcGllY2Ui
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkU3RyaW5nUGll
Y2VGaWVsZE51bWJlciA9IDU0OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVs
ZENvZGVjPHN0cmluZz4gX3JlcGVhdGVkX3JlcGVhdGVkU3RyaW5nUGllY2VfY29kZWMKLSAgICAg
ICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJpbmcoNDM0KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5
IHBiYzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHJlcGVhdGVkU3RyaW5nUGllY2VfID0gbmV3IHBi
Yzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVs
ZDxzdHJpbmc+IFJlcGVhdGVkU3RyaW5nUGllY2UgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVh
dGVkU3RyaW5nUGllY2VfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJyZXBlYXRlZF9jb3JkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBSZXBlYXRlZENvcmRGaWVsZE51bWJlciA9IDU1OwotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHN0cmluZz4gX3JlcGVhdGVkX3JlcGVhdGVkQ29yZF9j
b2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvclN0cmluZyg0NDIpOwotICAgIHByaXZh
dGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPHN0cmluZz4gcmVwZWF0ZWRDb3JkXyA9IG5l
dyBwYmM6OlJlcGVhdGVkRmllbGQ8c3RyaW5nPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVk
RmllbGQ8c3RyaW5nPiBSZXBlYXRlZENvcmQgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVk
Q29yZF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
Im1hcF9pbnQzMl9pbnQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
TWFwSW50MzJJbnQzMkZpZWxkTnVtYmVyID0gNTY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9u
bHkgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4uQ29kZWMgX21hcF9tYXBJbnQzMkludDMyX2NvZGVj
Ci0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+LkNvZGVjKHBiOjpGaWVsZENv
ZGVjLkZvckludDMyKDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMigxNiksIDQ1MCk7Ci0gICAg
cHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgaW50PiBtYXBJbnQzMkludDMyXyA9
IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgaW50PigpOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAv
Ly8gIE1hcAotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50
LCBpbnQ+IE1hcEludDMySW50MzIgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcEludDMySW50MzJf
OyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJtYXBf
aW50NjRfaW50NjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcElu
dDY0SW50NjRGaWVsZE51bWJlciA9IDU3OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBi
Yzo6TWFwRmllbGQ8bG9uZywgbG9uZz4uQ29kZWMgX21hcF9tYXBJbnQ2NEludDY0X2NvZGVjCi0g
ICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8bG9uZywgbG9uZz4uQ29kZWMocGI6OkZpZWxkQ29k
ZWMuRm9ySW50NjQoOCksIHBiOjpGaWVsZENvZGVjLkZvckludDY0KDE2KSwgNDU4KTsKLSAgICBw
cml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8bG9uZywgbG9uZz4gbWFwSW50NjRJbnQ2NF8g
PSBuZXcgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZp
ZWxkPGxvbmcsIGxvbmc+IE1hcEludDY0SW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcElu
dDY0SW50NjRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3Ig
dGhlICJtYXBfdWludDMyX3VpbnQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgTWFwVWludDMyVWludDMyRmllbGROdW1iZXIgPSA1ODsKLSAgICBwcml2YXRlIHN0YXRp
YyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPHVpbnQsIHVpbnQ+LkNvZGVjIF9tYXBfbWFwVWludDMy
VWludDMyX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8dWludCwgdWludD4uQ29k
ZWMocGI6OkZpZWxkQ29kZWMuRm9yVUludDMyKDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JVSW50MzIo
MTYpLCA0NjYpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDx1aW50LCB1aW50
PiBtYXBVaW50MzJVaW50MzJfID0gbmV3IHBiYzo6TWFwRmllbGQ8dWludCwgdWludD4oKTsKLSAg
ICBwdWJsaWMgcGJjOjpNYXBGaWVsZDx1aW50LCB1aW50PiBNYXBVaW50MzJVaW50MzIgewotICAg
ICAgZ2V0IHsgcmV0dXJuIG1hcFVpbnQzMlVpbnQzMl87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm1hcF91aW50NjRfdWludDY0IiBmaWVsZC48L3N1
bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBNYXBVaW50NjRVaW50NjRGaWVsZE51bWJlciA9
IDU5OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8dWxvbmcsIHVs
b25nPi5Db2RlYyBfbWFwX21hcFVpbnQ2NFVpbnQ2NF9jb2RlYwotICAgICAgICA9IG5ldyBwYmM6
Ok1hcEZpZWxkPHVsb25nLCB1bG9uZz4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9yVUludDY0KDgp
LCBwYjo6RmllbGRDb2RlYy5Gb3JVSW50NjQoMTYpLCA0NzQpOwotICAgIHByaXZhdGUgcmVhZG9u
bHkgcGJjOjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+IG1hcFVpbnQ2NFVpbnQ2NF8gPSBuZXcgcGJj
OjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8dWxv
bmcsIHVsb25nPiBNYXBVaW50NjRVaW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcFVpbnQ2
NFVpbnQ2NF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0
aGUgIm1hcF9zaW50MzJfc2ludDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBNYXBTaW50MzJTaW50MzJGaWVsZE51bWJlciA9IDYwOwotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+LkNvZGVjIF9tYXBfbWFwU2ludDMyU2lu
dDMyX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+LkNvZGVjKHBi
OjpGaWVsZENvZGVjLkZvclNJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9yU0ludDMyKDE2KSwg
NDgyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+IG1hcFNp
bnQzMlNpbnQzMl8gPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4oKTsKLSAgICBwdWJsaWMg
cGJjOjpNYXBGaWVsZDxpbnQsIGludD4gTWFwU2ludDMyU2ludDMyIHsKLSAgICAgIGdldCB7IHJl
dHVybiBtYXBTaW50MzJTaW50MzJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJtYXBfc2ludDY0X3NpbnQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBjb25zdCBpbnQgTWFwU2ludDY0U2ludDY0RmllbGROdW1iZXIgPSA2MTsKLSAgICBw
cml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGxvbmcsIGxvbmc+LkNvZGVjIF9t
YXBfbWFwU2ludDY0U2ludDY0X2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8bG9u
ZywgbG9uZz4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9yU0ludDY0KDgpLCBwYjo6RmllbGRDb2Rl
Yy5Gb3JTSW50NjQoMTYpLCA0OTApOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVs
ZDxsb25nLCBsb25nPiBtYXBTaW50NjRTaW50NjRfID0gbmV3IHBiYzo6TWFwRmllbGQ8bG9uZywg
bG9uZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPiBNYXBTaW50NjRT
aW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcFNpbnQ2NFNpbnQ2NF87IH0KLSAgICB9Ci0K
LSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm1hcF9maXhlZDMyX2ZpeGVk
MzIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcEZpeGVkMzJGaXhl
ZDMyRmllbGROdW1iZXIgPSA2MjsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1h
cEZpZWxkPHVpbnQsIHVpbnQ+LkNvZGVjIF9tYXBfbWFwRml4ZWQzMkZpeGVkMzJfY29kZWMKLSAg
ICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDx1aW50LCB1aW50Pi5Db2RlYyhwYjo6RmllbGRDb2Rl
Yy5Gb3JGaXhlZDMyKDEzKSwgcGI6OkZpZWxkQ29kZWMuRm9yRml4ZWQzMigyMSksIDQ5OCk7Ci0g
ICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPHVpbnQsIHVpbnQ+IG1hcEZpeGVkMzJG
aXhlZDMyXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPHVpbnQsIHVpbnQ+KCk7Ci0gICAgcHVibGljIHBi
Yzo6TWFwRmllbGQ8dWludCwgdWludD4gTWFwRml4ZWQzMkZpeGVkMzIgewotICAgICAgZ2V0IHsg
cmV0dXJuIG1hcEZpeGVkMzJGaXhlZDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX2ZpeGVkNjRfZml4ZWQ2NCIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTWFwRml4ZWQ2NEZpeGVkNjRGaWVsZE51bWJlciA9IDYz
OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8dWxvbmcsIHVsb25n
Pi5Db2RlYyBfbWFwX21hcEZpeGVkNjRGaXhlZDY0X2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6
TWFwRmllbGQ8dWxvbmcsIHVsb25nPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JGaXhlZDY0KDkp
LCBwYjo6RmllbGRDb2RlYy5Gb3JGaXhlZDY0KDE3KSwgNTA2KTsKLSAgICBwcml2YXRlIHJlYWRv
bmx5IHBiYzo6TWFwRmllbGQ8dWxvbmcsIHVsb25nPiBtYXBGaXhlZDY0Rml4ZWQ2NF8gPSBuZXcg
cGJjOjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8
dWxvbmcsIHVsb25nPiBNYXBGaXhlZDY0Rml4ZWQ2NCB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWFw
Rml4ZWQ2NEZpeGVkNjRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJtYXBfc2ZpeGVkMzJfc2ZpeGVkMzIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IE1hcFNmaXhlZDMyU2ZpeGVkMzJGaWVsZE51bWJlciA9IDY0OwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+LkNvZGVjIF9t
YXBfbWFwU2ZpeGVkMzJTZml4ZWQzMl9jb2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxk
PGludCwgaW50Pi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JTRml4ZWQzMigxMyksIHBiOjpGaWVs
ZENvZGVjLkZvclNGaXhlZDMyKDIxKSwgNTE0KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6
TWFwRmllbGQ8aW50LCBpbnQ+IG1hcFNmaXhlZDMyU2ZpeGVkMzJfID0gbmV3IHBiYzo6TWFwRmll
bGQ8aW50LCBpbnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+IE1hcFNm
aXhlZDMyU2ZpeGVkMzIgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcFNmaXhlZDMyU2ZpeGVkMzJf
OyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJtYXBf
c2ZpeGVkNjRfc2ZpeGVkNjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50
IE1hcFNmaXhlZDY0U2ZpeGVkNjRGaWVsZE51bWJlciA9IDY1OwotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8bG9uZywgbG9uZz4uQ29kZWMgX21hcF9tYXBTZml4ZWQ2
NFNmaXhlZDY0X2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8bG9uZywgbG9uZz4u
Q29kZWMocGI6OkZpZWxkQ29kZWMuRm9yU0ZpeGVkNjQoOSksIHBiOjpGaWVsZENvZGVjLkZvclNG
aXhlZDY0KDE3KSwgNTIyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8bG9u
ZywgbG9uZz4gbWFwU2ZpeGVkNjRTZml4ZWQ2NF8gPSBuZXcgcGJjOjpNYXBGaWVsZDxsb25nLCBs
b25nPigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxkPGxvbmcsIGxvbmc+IE1hcFNmaXhlZDY0
U2ZpeGVkNjQgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcFNmaXhlZDY0U2ZpeGVkNjRfOyB9Ci0g
ICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJtYXBfaW50MzJf
ZmxvYXQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcEludDMyRmxv
YXRGaWVsZE51bWJlciA9IDY2OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFw
RmllbGQ8aW50LCBmbG9hdD4uQ29kZWMgX21hcF9tYXBJbnQzMkZsb2F0X2NvZGVjCi0gICAgICAg
ID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBmbG9hdD4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9y
SW50MzIoOCksIHBiOjpGaWVsZENvZGVjLkZvckZsb2F0KDIxKSwgNTMwKTsKLSAgICBwcml2YXRl
IHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBmbG9hdD4gbWFwSW50MzJGbG9hdF8gPSBuZXcg
cGJjOjpNYXBGaWVsZDxpbnQsIGZsb2F0PigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxkPGlu
dCwgZmxvYXQ+IE1hcEludDMyRmxvYXQgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcEludDMyRmxv
YXRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJt
YXBfaW50MzJfZG91YmxlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBN
YXBJbnQzMkRvdWJsZUZpZWxkTnVtYmVyID0gNjc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9u
bHkgcGJjOjpNYXBGaWVsZDxpbnQsIGRvdWJsZT4uQ29kZWMgX21hcF9tYXBJbnQzMkRvdWJsZV9j
b2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZG91YmxlPi5Db2RlYyhwYjo6
RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9yRG91YmxlKDE3KSwgNTM4
KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBkb3VibGU+IG1hcElu
dDMyRG91YmxlXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZG91YmxlPigpOwotICAgIHB1Ymxp
YyBwYmM6Ok1hcEZpZWxkPGludCwgZG91YmxlPiBNYXBJbnQzMkRvdWJsZSB7Ci0gICAgICBnZXQg
eyByZXR1cm4gbWFwSW50MzJEb3VibGVfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZp
ZWxkIG51bWJlciBmb3IgdGhlICJtYXBfYm9vbF9ib29sIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBNYXBCb29sQm9vbEZpZWxkTnVtYmVyID0gNjg7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxib29sLCBib29sPi5Db2RlYyBfbWFwX21h
cEJvb2xCb29sX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8Ym9vbCwgYm9vbD4u
Q29kZWMocGI6OkZpZWxkQ29kZWMuRm9yQm9vbCg4KSwgcGI6OkZpZWxkQ29kZWMuRm9yQm9vbCgx
NiksIDU0Nik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGJvb2wsIGJvb2w+
IG1hcEJvb2xCb29sXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGJvb2wsIGJvb2w+KCk7Ci0gICAgcHVi
bGljIHBiYzo6TWFwRmllbGQ8Ym9vbCwgYm9vbD4gTWFwQm9vbEJvb2wgewotICAgICAgZ2V0IHsg
cmV0dXJuIG1hcEJvb2xCb29sXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBu
dW1iZXIgZm9yIHRoZSAibWFwX3N0cmluZ19zdHJpbmciIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IE1hcFN0cmluZ1N0cmluZ0ZpZWxkTnVtYmVyID0gNjk7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxzdHJpbmcsIHN0cmluZz4uQ29kZWMg
X21hcF9tYXBTdHJpbmdTdHJpbmdfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDxz
dHJpbmcsIHN0cmluZz4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9yU3RyaW5nKDEwKSwgcGI6OkZp
ZWxkQ29kZWMuRm9yU3RyaW5nKDE4KSwgNTU0KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6
TWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+IG1hcFN0cmluZ1N0cmluZ18gPSBuZXcgcGJjOjpNYXBG
aWVsZDxzdHJpbmcsIHN0cmluZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxzdHJpbmcs
IHN0cmluZz4gTWFwU3RyaW5nU3RyaW5nIHsKLSAgICAgIGdldCB7IHJldHVybiBtYXBTdHJpbmdT
dHJpbmdfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJtYXBfc3RyaW5nX2J5dGVzIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGlu
dCBNYXBTdHJpbmdCeXRlc0ZpZWxkTnVtYmVyID0gNzA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVh
ZG9ubHkgcGJjOjpNYXBGaWVsZDxzdHJpbmcsIHBiOjpCeXRlU3RyaW5nPi5Db2RlYyBfbWFwX21h
cFN0cmluZ0J5dGVzX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8c3RyaW5nLCBw
Yjo6Qnl0ZVN0cmluZz4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9yU3RyaW5nKDEwKSwgcGI6OkZp
ZWxkQ29kZWMuRm9yQnl0ZXMoMTgpLCA1NjIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpN
YXBGaWVsZDxzdHJpbmcsIHBiOjpCeXRlU3RyaW5nPiBtYXBTdHJpbmdCeXRlc18gPSBuZXcgcGJj
OjpNYXBGaWVsZDxzdHJpbmcsIHBiOjpCeXRlU3RyaW5nPigpOwotICAgIHB1YmxpYyBwYmM6Ok1h
cEZpZWxkPHN0cmluZywgcGI6OkJ5dGVTdHJpbmc+IE1hcFN0cmluZ0J5dGVzIHsKLSAgICAgIGdl
dCB7IHJldHVybiBtYXBTdHJpbmdCeXRlc187IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+
RmllbGQgbnVtYmVyIGZvciB0aGUgIm1hcF9zdHJpbmdfbmVzdGVkX21lc3NhZ2UiIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcFN0cmluZ05lc3RlZE1lc3NhZ2VGaWVs
ZE51bWJlciA9IDcxOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8
c3RyaW5nLCBnbG9iYWw6OkNvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNz
YWdlPi5Db2RlYyBfbWFwX21hcFN0cmluZ05lc3RlZE1lc3NhZ2VfY29kZWMKLSAgICAgICAgPSBu
ZXcgcGJjOjpNYXBGaWVsZDxzdHJpbmcsIGdsb2JhbDo6Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVz
LlR5cGVzLk5lc3RlZE1lc3NhZ2U+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvclN0cmluZygxMCks
IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMTgsIGdsb2JhbDo6Q29uZm9ybWFuY2UuVGVzdEFs
bFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UuUGFyc2VyKSwgNTcwKTsKLSAgICBwcml2YXRlIHJl
YWRvbmx5IHBiYzo6TWFwRmllbGQ8c3RyaW5nLCBnbG9iYWw6OkNvbmZvcm1hbmNlLlRlc3RBbGxU
eXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlPiBtYXBTdHJpbmdOZXN0ZWRNZXNzYWdlXyA9IG5ldyBw
YmM6Ok1hcEZpZWxkPHN0cmluZywgZ2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0QWxsVHlwZXMuVHlw
ZXMuTmVzdGVkTWVzc2FnZT4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxzdHJpbmcsIGds
b2JhbDo6Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2U+IE1hcFN0
cmluZ05lc3RlZE1lc3NhZ2UgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcFN0cmluZ05lc3RlZE1l
c3NhZ2VfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJtYXBfc3RyaW5nX2ZvcmVpZ25fbWVzc2FnZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgTWFwU3RyaW5nRm9yZWlnbk1lc3NhZ2VGaWVsZE51bWJlciA9IDcyOwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8c3RyaW5nLCBnbG9iYWw6OkNv
bmZvcm1hbmNlLkZvcmVpZ25NZXNzYWdlPi5Db2RlYyBfbWFwX21hcFN0cmluZ0ZvcmVpZ25NZXNz
YWdlX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8c3RyaW5nLCBnbG9iYWw6OkNv
bmZvcm1hbmNlLkZvcmVpZ25NZXNzYWdlPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JTdHJpbmco
MTApLCBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDE4LCBnbG9iYWw6OkNvbmZvcm1hbmNlLkZv
cmVpZ25NZXNzYWdlLlBhcnNlciksIDU3OCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1h
cEZpZWxkPHN0cmluZywgZ2xvYmFsOjpDb25mb3JtYW5jZS5Gb3JlaWduTWVzc2FnZT4gbWFwU3Ry
aW5nRm9yZWlnbk1lc3NhZ2VfID0gbmV3IHBiYzo6TWFwRmllbGQ8c3RyaW5nLCBnbG9iYWw6OkNv
bmZvcm1hbmNlLkZvcmVpZ25NZXNzYWdlPigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxkPHN0
cmluZywgZ2xvYmFsOjpDb25mb3JtYW5jZS5Gb3JlaWduTWVzc2FnZT4gTWFwU3RyaW5nRm9yZWln
bk1lc3NhZ2UgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcFN0cmluZ0ZvcmVpZ25NZXNzYWdlXzsg
fQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX3N0
cmluZ19uZXN0ZWRfZW51bSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
TWFwU3RyaW5nTmVzdGVkRW51bUZpZWxkTnVtYmVyID0gNzM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMg
cmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxzdHJpbmcsIGdsb2JhbDo6Q29uZm9ybWFuY2UuVGVzdEFs
bFR5cGVzLlR5cGVzLk5lc3RlZEVudW0+LkNvZGVjIF9tYXBfbWFwU3RyaW5nTmVzdGVkRW51bV9j
b2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxkPHN0cmluZywgZ2xvYmFsOjpDb25mb3Jt
YW5jZS5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51bT4uQ29kZWMocGI6OkZpZWxkQ29kZWMu
Rm9yU3RyaW5nKDEwKSwgcGI6OkZpZWxkQ29kZWMuRm9yRW51bSgxNiwgeCA9PiAoaW50KSB4LCB4
ID0+IChnbG9iYWw6OkNvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRFbnVtKSB4
KSwgNTg2KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8c3RyaW5nLCBnbG9i
YWw6OkNvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRFbnVtPiBtYXBTdHJpbmdO
ZXN0ZWRFbnVtXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPHN0cmluZywgZ2xvYmFsOjpDb25mb3JtYW5j
ZS5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51bT4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBG
aWVsZDxzdHJpbmcsIGdsb2JhbDo6Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3Rl
ZEVudW0+IE1hcFN0cmluZ05lc3RlZEVudW0gewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcFN0cmlu
Z05lc3RlZEVudW1fOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBm
b3IgdGhlICJtYXBfc3RyaW5nX2ZvcmVpZ25fZW51bSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBjb25zdCBpbnQgTWFwU3RyaW5nRm9yZWlnbkVudW1GaWVsZE51bWJlciA9IDc0OwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8c3RyaW5nLCBnbG9iYWw6OkNv
bmZvcm1hbmNlLkZvcmVpZ25FbnVtPi5Db2RlYyBfbWFwX21hcFN0cmluZ0ZvcmVpZ25FbnVtX2Nv
ZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8c3RyaW5nLCBnbG9iYWw6OkNvbmZvcm1h
bmNlLkZvcmVpZ25FbnVtPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JTdHJpbmcoMTApLCBwYjo6
RmllbGRDb2RlYy5Gb3JFbnVtKDE2LCB4ID0+IChpbnQpIHgsIHggPT4gKGdsb2JhbDo6Q29uZm9y
bWFuY2UuRm9yZWlnbkVudW0pIHgpLCA1OTQpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpN
YXBGaWVsZDxzdHJpbmcsIGdsb2JhbDo6Q29uZm9ybWFuY2UuRm9yZWlnbkVudW0+IG1hcFN0cmlu
Z0ZvcmVpZ25FbnVtXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPHN0cmluZywgZ2xvYmFsOjpDb25mb3Jt
YW5jZS5Gb3JlaWduRW51bT4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxzdHJpbmcsIGds
b2JhbDo6Q29uZm9ybWFuY2UuRm9yZWlnbkVudW0+IE1hcFN0cmluZ0ZvcmVpZ25FbnVtIHsKLSAg
ICAgIGdldCB7IHJldHVybiBtYXBTdHJpbmdGb3JlaWduRW51bV87IH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9uZW9mX3VpbnQzMiIgZmllbGQuPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgT25lb2ZVaW50MzJGaWVsZE51bWJlciA9IDEx
MTsKLSAgICBwdWJsaWMgdWludCBPbmVvZlVpbnQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gb25l
b2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZVaW50MzIgPyAodWludCkg
b25lb2ZGaWVsZF8gOiAwOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvbmVvZkZpZWxkXyA9IHZh
bHVlOwotICAgICAgICBvbmVvZkZpZWxkQ2FzZV8gPSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9m
VWludDMyOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAib25lb2ZfbmVzdGVkX21lc3NhZ2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IE9uZW9mTmVzdGVkTWVzc2FnZUZpZWxkTnVtYmVyID0gMTEyOwotICAgIHB1
YmxpYyBnbG9iYWw6OkNvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdl
IE9uZW9mTmVzdGVkTWVzc2FnZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gb25lb2ZGaWVsZENhc2Vf
ID09IE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZOZXN0ZWRNZXNzYWdlID8gKGdsb2JhbDo6Q29u
Zm9ybWFuY2UuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UpIG9uZW9mRmllbGRfIDog
bnVsbDsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb25lb2ZGaWVsZF8gPSB2YWx1ZTsKLSAgICAg
ICAgb25lb2ZGaWVsZENhc2VfID0gdmFsdWUgPT0gbnVsbCA/IE9uZW9mRmllbGRPbmVvZkNhc2Uu
Tm9uZSA6IE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZOZXN0ZWRNZXNzYWdlOwotICAgICAgfQot
ICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib25lb2Zfc3Ry
aW5nIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPbmVvZlN0cmluZ0Zp
ZWxkTnVtYmVyID0gMTEzOwotICAgIHB1YmxpYyBzdHJpbmcgT25lb2ZTdHJpbmcgewotICAgICAg
Z2V0IHsgcmV0dXJuIG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9m
U3RyaW5nID8gKHN0cmluZykgb25lb2ZGaWVsZF8gOiAiIjsgfQotICAgICAgc2V0IHsKLSAgICAg
ICAgb25lb2ZGaWVsZF8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1
ZSwgInZhbHVlIik7Ci0gICAgICAgIG9uZW9mRmllbGRDYXNlXyA9IE9uZW9mRmllbGRPbmVvZkNh
c2UuT25lb2ZTdHJpbmc7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJvbmVvZl9ieXRlcyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgT25lb2ZCeXRlc0ZpZWxkTnVtYmVyID0gMTE0OwotICAgIHB1YmxpYyBwYjo6
Qnl0ZVN0cmluZyBPbmVvZkJ5dGVzIHsKLSAgICAgIGdldCB7IHJldHVybiBvbmVvZkZpZWxkQ2Fz
ZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZkJ5dGVzID8gKHBiOjpCeXRlU3RyaW5nKSBv
bmVvZkZpZWxkXyA6IHBiOjpCeXRlU3RyaW5nLkVtcHR5OyB9Ci0gICAgICBzZXQgewotICAgICAg
ICBvbmVvZkZpZWxkXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVl
LCAidmFsdWUiKTsKLSAgICAgICAgb25lb2ZGaWVsZENhc2VfID0gT25lb2ZGaWVsZE9uZW9mQ2Fz
ZS5PbmVvZkJ5dGVzOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBu
dW1iZXIgZm9yIHRoZSAib3B0aW9uYWxfYm9vbF93cmFwcGVyIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBPcHRpb25hbEJvb2xXcmFwcGVyRmllbGROdW1iZXIgPSAyMDE7
Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Ym9vbD8+IF9zaW5n
bGVfb3B0aW9uYWxCb29sV3JhcHBlcl9jb2RlYyA9IHBiOjpGaWVsZENvZGVjLkZvclN0cnVjdFdy
YXBwZXI8Ym9vbD4oMTYxMCk7Ci0gICAgcHJpdmF0ZSBib29sPyBvcHRpb25hbEJvb2xXcmFwcGVy
XzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBXZWxsLWtub3duIHR5cGVzCi0gICAgLy8v
IDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgYm9vbD8gT3B0aW9uYWxCb29sV3JhcHBlciB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gb3B0aW9uYWxCb29sV3JhcHBlcl87IH0KLSAgICAgIHNldCB7Ci0gICAg
ICAgIG9wdGlvbmFsQm9vbFdyYXBwZXJfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvcHRpb25hbF9pbnQzMl93cmFwcGVy
IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPcHRpb25hbEludDMyV3Jh
cHBlckZpZWxkTnVtYmVyID0gMjAyOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpG
aWVsZENvZGVjPGludD8+IF9zaW5nbGVfb3B0aW9uYWxJbnQzMldyYXBwZXJfY29kZWMgPSBwYjo6
RmllbGRDb2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPGludD4oMTYxOCk7Ci0gICAgcHJpdmF0ZSBpbnQ/
IG9wdGlvbmFsSW50MzJXcmFwcGVyXzsKLSAgICBwdWJsaWMgaW50PyBPcHRpb25hbEludDMyV3Jh
cHBlciB7Ci0gICAgICBnZXQgeyByZXR1cm4gb3B0aW9uYWxJbnQzMldyYXBwZXJfOyB9Ci0gICAg
ICBzZXQgewotICAgICAgICBvcHRpb25hbEludDMyV3JhcHBlcl8gPSB2YWx1ZTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlvbmFs
X2ludDY0X3dyYXBwZXIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9w
dGlvbmFsSW50NjRXcmFwcGVyRmllbGROdW1iZXIgPSAyMDM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMg
cmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8bG9uZz8+IF9zaW5nbGVfb3B0aW9uYWxJbnQ2NFdyYXBw
ZXJfY29kZWMgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPGxvbmc+KDE2MjYpOwot
ICAgIHByaXZhdGUgbG9uZz8gb3B0aW9uYWxJbnQ2NFdyYXBwZXJfOwotICAgIHB1YmxpYyBsb25n
PyBPcHRpb25hbEludDY0V3JhcHBlciB7Ci0gICAgICBnZXQgeyByZXR1cm4gb3B0aW9uYWxJbnQ2
NFdyYXBwZXJfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvcHRpb25hbEludDY0V3JhcHBlcl8g
PSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVy
IGZvciB0aGUgIm9wdGlvbmFsX3VpbnQzMl93cmFwcGVyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBPcHRpb25hbFVpbnQzMldyYXBwZXJGaWVsZE51bWJlciA9IDIwNDsK
LSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1aW50Pz4gX3Npbmds
ZV9vcHRpb25hbFVpbnQzMldyYXBwZXJfY29kZWMgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJ1Y3RX
cmFwcGVyPHVpbnQ+KDE2MzQpOwotICAgIHByaXZhdGUgdWludD8gb3B0aW9uYWxVaW50MzJXcmFw
cGVyXzsKLSAgICBwdWJsaWMgdWludD8gT3B0aW9uYWxVaW50MzJXcmFwcGVyIHsKLSAgICAgIGdl
dCB7IHJldHVybiBvcHRpb25hbFVpbnQzMldyYXBwZXJfOyB9Ci0gICAgICBzZXQgewotICAgICAg
ICBvcHRpb25hbFVpbnQzMldyYXBwZXJfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvcHRpb25hbF91aW50NjRfd3JhcHBl
ciIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgT3B0aW9uYWxVaW50NjRX
cmFwcGVyRmllbGROdW1iZXIgPSAyMDU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6
OkZpZWxkQ29kZWM8dWxvbmc/PiBfc2luZ2xlX29wdGlvbmFsVWludDY0V3JhcHBlcl9jb2RlYyA9
IHBiOjpGaWVsZENvZGVjLkZvclN0cnVjdFdyYXBwZXI8dWxvbmc+KDE2NDIpOwotICAgIHByaXZh
dGUgdWxvbmc/IG9wdGlvbmFsVWludDY0V3JhcHBlcl87Ci0gICAgcHVibGljIHVsb25nPyBPcHRp
b25hbFVpbnQ2NFdyYXBwZXIgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbmFsVWludDY0V3Jh
cHBlcl87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9wdGlvbmFsVWludDY0V3JhcHBlcl8gPSB2
YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgIm9wdGlvbmFsX2Zsb2F0X3dyYXBwZXIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IE9wdGlvbmFsRmxvYXRXcmFwcGVyRmllbGROdW1iZXIgPSAyMDY7Ci0gICAg
cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8ZmxvYXQ/PiBfc2luZ2xlX29w
dGlvbmFsRmxvYXRXcmFwcGVyX2NvZGVjID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RydWN0V3JhcHBl
cjxmbG9hdD4oMTY1MCk7Ci0gICAgcHJpdmF0ZSBmbG9hdD8gb3B0aW9uYWxGbG9hdFdyYXBwZXJf
OwotICAgIHB1YmxpYyBmbG9hdD8gT3B0aW9uYWxGbG9hdFdyYXBwZXIgewotICAgICAgZ2V0IHsg
cmV0dXJuIG9wdGlvbmFsRmxvYXRXcmFwcGVyXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0
aW9uYWxGbG9hdFdyYXBwZXJfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxz
dW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvcHRpb25hbF9kb3VibGVfd3JhcHBlciIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgT3B0aW9uYWxEb3VibGVXcmFwcGVy
RmllbGROdW1iZXIgPSAyMDc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxk
Q29kZWM8ZG91YmxlPz4gX3NpbmdsZV9vcHRpb25hbERvdWJsZVdyYXBwZXJfY29kZWMgPSBwYjo6
RmllbGRDb2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPGRvdWJsZT4oMTY1OCk7Ci0gICAgcHJpdmF0ZSBk
b3VibGU/IG9wdGlvbmFsRG91YmxlV3JhcHBlcl87Ci0gICAgcHVibGljIGRvdWJsZT8gT3B0aW9u
YWxEb3VibGVXcmFwcGVyIHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25hbERvdWJsZVdyYXBw
ZXJfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvcHRpb25hbERvdWJsZVdyYXBwZXJfID0gdmFs
dWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3Ig
dGhlICJvcHRpb25hbF9zdHJpbmdfd3JhcHBlciIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgT3B0aW9uYWxTdHJpbmdXcmFwcGVyRmllbGROdW1iZXIgPSAyMDg7Ci0gICAg
cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8c3RyaW5nPiBfc2luZ2xlX29w
dGlvbmFsU3RyaW5nV3JhcHBlcl9jb2RlYyA9IHBiOjpGaWVsZENvZGVjLkZvckNsYXNzV3JhcHBl
cjxzdHJpbmc+KDE2NjYpOwotICAgIHByaXZhdGUgc3RyaW5nIG9wdGlvbmFsU3RyaW5nV3JhcHBl
cl87Ci0gICAgcHVibGljIHN0cmluZyBPcHRpb25hbFN0cmluZ1dyYXBwZXIgewotICAgICAgZ2V0
IHsgcmV0dXJuIG9wdGlvbmFsU3RyaW5nV3JhcHBlcl87IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IG9wdGlvbmFsU3RyaW5nV3JhcHBlcl8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlvbmFsX2J5dGVzX3dyYXBwZXIi
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9wdGlvbmFsQnl0ZXNXcmFw
cGVyRmllbGROdW1iZXIgPSAyMDk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZp
ZWxkQ29kZWM8cGI6OkJ5dGVTdHJpbmc+IF9zaW5nbGVfb3B0aW9uYWxCeXRlc1dyYXBwZXJfY29k
ZWMgPSBwYjo6RmllbGRDb2RlYy5Gb3JDbGFzc1dyYXBwZXI8cGI6OkJ5dGVTdHJpbmc+KDE2NzQp
OwotICAgIHByaXZhdGUgcGI6OkJ5dGVTdHJpbmcgb3B0aW9uYWxCeXRlc1dyYXBwZXJfOwotICAg
IHB1YmxpYyBwYjo6Qnl0ZVN0cmluZyBPcHRpb25hbEJ5dGVzV3JhcHBlciB7Ci0gICAgICBnZXQg
eyByZXR1cm4gb3B0aW9uYWxCeXRlc1dyYXBwZXJfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBv
cHRpb25hbEJ5dGVzV3JhcHBlcl8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8g
PHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX2Jvb2xfd3JhcHBlciIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRCb29sV3JhcHBlckZp
ZWxkTnVtYmVyID0gMjExOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENv
ZGVjPGJvb2w/PiBfcmVwZWF0ZWRfcmVwZWF0ZWRCb29sV3JhcHBlcl9jb2RlYwotICAgICAgICA9
IHBiOjpGaWVsZENvZGVjLkZvclN0cnVjdFdyYXBwZXI8Ym9vbD4oMTY5MCk7Ci0gICAgcHJpdmF0
ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Ym9vbD8+IHJlcGVhdGVkQm9vbFdyYXBwZXJf
ID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxib29sPz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBl
YXRlZEZpZWxkPGJvb2w/PiBSZXBlYXRlZEJvb2xXcmFwcGVyIHsKLSAgICAgIGdldCB7IHJldHVy
biByZXBlYXRlZEJvb2xXcmFwcGVyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfaW50MzJfd3JhcHBlciIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRJbnQzMldyYXBwZXJGaWVsZE51bWJlciA9
IDIxMjsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxpbnQ/PiBf
cmVwZWF0ZWRfcmVwZWF0ZWRJbnQzMldyYXBwZXJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRD
b2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPGludD4oMTY5OCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBw
YmM6OlJlcGVhdGVkRmllbGQ8aW50Pz4gcmVwZWF0ZWRJbnQzMldyYXBwZXJfID0gbmV3IHBiYzo6
UmVwZWF0ZWRGaWVsZDxpbnQ/PigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50
Pz4gUmVwZWF0ZWRJbnQzMldyYXBwZXIgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkSW50
MzJXcmFwcGVyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAicmVwZWF0ZWRfaW50NjRfd3JhcHBlciIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgUmVwZWF0ZWRJbnQ2NFdyYXBwZXJGaWVsZE51bWJlciA9IDIxMzsKLSAgICBw
cml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxsb25nPz4gX3JlcGVhdGVkX3Jl
cGVhdGVkSW50NjRXcmFwcGVyX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3Ry
dWN0V3JhcHBlcjxsb25nPigxNzA2KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0
ZWRGaWVsZDxsb25nPz4gcmVwZWF0ZWRJbnQ2NFdyYXBwZXJfID0gbmV3IHBiYzo6UmVwZWF0ZWRG
aWVsZDxsb25nPz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc/PiBSZXBl
YXRlZEludDY0V3JhcHBlciB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRJbnQ2NFdyYXBw
ZXJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJy
ZXBlYXRlZF91aW50MzJfd3JhcHBlciIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgUmVwZWF0ZWRVaW50MzJXcmFwcGVyRmllbGROdW1iZXIgPSAyMTQ7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8dWludD8+IF9yZXBlYXRlZF9yZXBlYXRl
ZFVpbnQzMldyYXBwZXJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJ1Y3RX
cmFwcGVyPHVpbnQ+KDE3MTQpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZp
ZWxkPHVpbnQ/PiByZXBlYXRlZFVpbnQzMldyYXBwZXJfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVs
ZDx1aW50Pz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVpbnQ/PiBSZXBlYXRl
ZFVpbnQzMldyYXBwZXIgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkVWludDMyV3JhcHBl
cl87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJl
cGVhdGVkX3VpbnQ2NF93cmFwcGVyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBSZXBlYXRlZFVpbnQ2NFdyYXBwZXJGaWVsZE51bWJlciA9IDIxNTsKLSAgICBwcml2YXRl
IHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1bG9uZz8+IF9yZXBlYXRlZF9yZXBlYXRl
ZFVpbnQ2NFdyYXBwZXJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJ1Y3RX
cmFwcGVyPHVsb25nPigxNzIyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRG
aWVsZDx1bG9uZz8+IHJlcGVhdGVkVWludDY0V3JhcHBlcl8gPSBuZXcgcGJjOjpSZXBlYXRlZEZp
ZWxkPHVsb25nPz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVsb25nPz4gUmVw
ZWF0ZWRVaW50NjRXcmFwcGVyIHsKLSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZFVpbnQ2NFdy
YXBwZXJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJyZXBlYXRlZF9mbG9hdF93cmFwcGVyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBSZXBlYXRlZEZsb2F0V3JhcHBlckZpZWxkTnVtYmVyID0gMjE2OwotICAgIHByaXZh
dGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGZsb2F0Pz4gX3JlcGVhdGVkX3JlcGVh
dGVkRmxvYXRXcmFwcGVyX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RydWN0
V3JhcHBlcjxmbG9hdD4oMTczMCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVk
RmllbGQ8ZmxvYXQ/PiByZXBlYXRlZEZsb2F0V3JhcHBlcl8gPSBuZXcgcGJjOjpSZXBlYXRlZEZp
ZWxkPGZsb2F0Pz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGZsb2F0Pz4gUmVw
ZWF0ZWRGbG9hdFdyYXBwZXIgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkRmxvYXRXcmFw
cGVyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAi
cmVwZWF0ZWRfZG91YmxlX3dyYXBwZXIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29u
c3QgaW50IFJlcGVhdGVkRG91YmxlV3JhcHBlckZpZWxkTnVtYmVyID0gMjE3OwotICAgIHByaXZh
dGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGRvdWJsZT8+IF9yZXBlYXRlZF9yZXBl
YXRlZERvdWJsZVdyYXBwZXJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJ1
Y3RXcmFwcGVyPGRvdWJsZT4oMTczOCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVh
dGVkRmllbGQ8ZG91YmxlPz4gcmVwZWF0ZWREb3VibGVXcmFwcGVyXyA9IG5ldyBwYmM6OlJlcGVh
dGVkRmllbGQ8ZG91YmxlPz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGRvdWJs
ZT8+IFJlcGVhdGVkRG91YmxlV3JhcHBlciB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRE
b3VibGVXcmFwcGVyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAicmVwZWF0ZWRfc3RyaW5nX3dyYXBwZXIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IFJlcGVhdGVkU3RyaW5nV3JhcHBlckZpZWxkTnVtYmVyID0gMjE4Owot
ICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHN0cmluZz4gX3JlcGVh
dGVkX3JlcGVhdGVkU3RyaW5nV3JhcHBlcl9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVj
LkZvckNsYXNzV3JhcHBlcjxzdHJpbmc+KDE3NDYpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJj
OjpSZXBlYXRlZEZpZWxkPHN0cmluZz4gcmVwZWF0ZWRTdHJpbmdXcmFwcGVyXyA9IG5ldyBwYmM6
OlJlcGVhdGVkRmllbGQ8c3RyaW5nPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8
c3RyaW5nPiBSZXBlYXRlZFN0cmluZ1dyYXBwZXIgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVh
dGVkU3RyaW5nV3JhcHBlcl87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgInJlcGVhdGVkX2J5dGVzX3dyYXBwZXIiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkQnl0ZXNXcmFwcGVyRmllbGROdW1iZXIgPSAyMTk7
Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8cGI6OkJ5dGVTdHJp
bmc+IF9yZXBlYXRlZF9yZXBlYXRlZEJ5dGVzV3JhcHBlcl9jb2RlYwotICAgICAgICA9IHBiOjpG
aWVsZENvZGVjLkZvckNsYXNzV3JhcHBlcjxwYjo6Qnl0ZVN0cmluZz4oMTc1NCk7Ci0gICAgcHJp
dmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8cGI6OkJ5dGVTdHJpbmc+IHJlcGVhdGVk
Qnl0ZXNXcmFwcGVyXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8cGI6OkJ5dGVTdHJpbmc+KCk7
Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxwYjo6Qnl0ZVN0cmluZz4gUmVwZWF0ZWRC
eXRlc1dyYXBwZXIgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkQnl0ZXNXcmFwcGVyXzsg
fQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW9u
YWxfZHVyYXRpb24iIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9wdGlv
bmFsRHVyYXRpb25GaWVsZE51bWJlciA9IDMwMTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9uIG9wdGlvbmFsRHVyYXRpb25fOwotICAg
IHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5EdXJhdGlvbiBP
cHRpb25hbER1cmF0aW9uIHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25hbER1cmF0aW9uXzsg
fQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0aW9uYWxEdXJhdGlvbl8gPSB2YWx1ZTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlv
bmFsX3RpbWVzdGFtcCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgT3B0
aW9uYWxUaW1lc3RhbXBGaWVsZE51bWJlciA9IDMwMjsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlRpbWVzdGFtcCBvcHRpb25hbFRpbWVzdGFtcF87
Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlRpbWVz
dGFtcCBPcHRpb25hbFRpbWVzdGFtcCB7Ci0gICAgICBnZXQgeyByZXR1cm4gb3B0aW9uYWxUaW1l
c3RhbXBfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvcHRpb25hbFRpbWVzdGFtcF8gPSB2YWx1
ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0
aGUgIm9wdGlvbmFsX2ZpZWxkX21hc2siIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29u
c3QgaW50IE9wdGlvbmFsRmllbGRNYXNrRmllbGROdW1iZXIgPSAzMDM7Ci0gICAgcHJpdmF0ZSBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2sgb3B0aW9uYWxG
aWVsZE1hc2tfOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcy5GaWVsZE1hc2sgT3B0aW9uYWxGaWVsZE1hc2sgewotICAgICAgZ2V0IHsgcmV0dXJuIG9w
dGlvbmFsRmllbGRNYXNrXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0aW9uYWxGaWVsZE1h
c2tfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJvcHRpb25hbF9zdHJ1Y3QiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IE9wdGlvbmFsU3RydWN0RmllbGROdW1iZXIgPSAzMDQ7Ci0gICAgcHJpdmF0
ZSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5TdHJ1Y3Qgb3B0aW9uYWxT
dHJ1Y3RfOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5TdHJ1Y3QgT3B0aW9uYWxTdHJ1Y3QgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbmFsU3Ry
dWN0XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0aW9uYWxTdHJ1Y3RfID0gdmFsdWU7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJv
cHRpb25hbF9hbnkiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9wdGlv
bmFsQW55RmllbGROdW1iZXIgPSAzMDU7Ci0gICAgcHJpdmF0ZSBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5XZWxsS25vd25UeXBlcy5Bbnkgb3B0aW9uYWxBbnlfOwotICAgIHB1YmxpYyBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnkgT3B0aW9uYWxBbnkgewotICAgICAg
Z2V0IHsgcmV0dXJuIG9wdGlvbmFsQW55XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0aW9u
YWxBbnlfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJvcHRpb25hbF92YWx1ZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBjb25zdCBpbnQgT3B0aW9uYWxWYWx1ZUZpZWxkTnVtYmVyID0gMzA2OwotICAgIHByaXZh
dGUgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVmFsdWUgb3B0aW9uYWxW
YWx1ZV87Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVz
LlZhbHVlIE9wdGlvbmFsVmFsdWUgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbmFsVmFsdWVf
OyB9Ci0gICAgICBzZXQgewotICAgICAgICBvcHRpb25hbFZhbHVlXyA9IHZhbHVlOwotICAgICAg
fQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0
ZWRfZHVyYXRpb24iIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVh
dGVkRHVyYXRpb25GaWVsZE51bWJlciA9IDMxMTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25s
eSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5E
dXJhdGlvbj4gX3JlcGVhdGVkX3JlcGVhdGVkRHVyYXRpb25fY29kZWMKLSAgICAgICAgPSBwYjo6
RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDI0OTAsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzLkR1cmF0aW9uLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJl
cGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRHVyYXRp
b24+IHJlcGVhdGVkRHVyYXRpb25fID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5EdXJhdGlvbj4oKTsKLSAgICBwdWJsaWMgcGJj
OjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1
cmF0aW9uPiBSZXBlYXRlZER1cmF0aW9uIHsKLSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZER1
cmF0aW9uXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRo
ZSAicmVwZWF0ZWRfdGltZXN0YW1wIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBSZXBlYXRlZFRpbWVzdGFtcEZpZWxkTnVtYmVyID0gMzEyOwotICAgIHByaXZhdGUgc3Rh
dGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzLlRpbWVzdGFtcD4gX3JlcGVhdGVkX3JlcGVhdGVkVGltZXN0YW1wX2NvZGVjCi0g
ICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgyNDk4LCBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5XZWxsS25vd25UeXBlcy5UaW1lc3RhbXAuUGFyc2VyKTsKLSAgICBwcml2YXRlIHJl
YWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5UaW1lc3RhbXA+IHJlcGVhdGVkVGltZXN0YW1wXyA9IG5ldyBwYmM6OlJlcGVhdGVk
RmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVGltZXN0YW1wPigp
OwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
V2VsbEtub3duVHlwZXMuVGltZXN0YW1wPiBSZXBlYXRlZFRpbWVzdGFtcCB7Ci0gICAgICBnZXQg
eyByZXR1cm4gcmVwZWF0ZWRUaW1lc3RhbXBfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9maWVsZG1hc2siIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkRmllbGRtYXNrRmllbGROdW1iZXIgPSAz
MTM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRmllbGRNYXNrPiBfcmVwZWF0ZWRfcmVwZWF0
ZWRGaWVsZG1hc2tfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDI1
MDYsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkZpZWxkTWFzay5QYXJz
ZXIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkZpZWxkTWFzaz4gcmVwZWF0ZWRGaWVsZG1hc2tf
ID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5GaWVsZE1hc2s+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2s+IFJlcGVhdGVkRmll
bGRtYXNrIHsKLSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZEZpZWxkbWFza187IH0KLSAgICB9
Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX3N0cnVj
dCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRTdHJ1Y3RG
aWVsZE51bWJlciA9IDMyNDsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRD
b2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5TdHJ1Y3Q+IF9yZXBl
YXRlZF9yZXBlYXRlZFN0cnVjdF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1l
c3NhZ2UoMjU5NCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU3RydWN0
LlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU3RydWN0PiByZXBlYXRlZFN0cnVjdF8g
PSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93
blR5cGVzLlN0cnVjdD4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cnVjdD4gUmVwZWF0ZWRTdHJ1Y3Qgewot
ICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkU3RydWN0XzsgfQotICAgIH0KLQotICAgIC8vLyA8
c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfYW55IiBmaWVsZC48L3N1bW1h
cnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBSZXBlYXRlZEFueUZpZWxkTnVtYmVyID0gMzE1Owot
ICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFueT4gX3JlcGVhdGVkX3JlcGVhdGVkQW55X2NvZGVj
Ci0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgyNTIyLCBnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnkuUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRv
bmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcy5Bbnk+IHJlcGVhdGVkQW55XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQW55PigpOwotICAgIHB1YmxpYyBwYmM6OlJl
cGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQW55PiBS
ZXBlYXRlZEFueSB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRBbnlfOyB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF92YWx1ZSIg
ZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRWYWx1ZUZpZWxk
TnVtYmVyID0gMzE2OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVj
PGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlZhbHVlPiBfcmVwZWF0ZWRf
cmVwZWF0ZWRWYWx1ZV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2Uo
MjUzMCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVmFsdWUuUGFyc2Vy
KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5WYWx1ZT4gcmVwZWF0ZWRWYWx1ZV8gPSBuZXcgcGJj
OjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlZh
bHVlPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuVmFsdWU+IFJlcGVhdGVkVmFsdWUgewotICAgICAgZ2V0IHsg
cmV0dXJuIHJlcGVhdGVkVmFsdWVfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJmaWVsZG5hbWUxIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGlj
IGNvbnN0IGludCBGaWVsZG5hbWUxRmllbGROdW1iZXIgPSA0MDE7Ci0gICAgcHJpdmF0ZSBpbnQg
ZmllbGRuYW1lMV87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGVzdCBmaWVsZC1uYW1l
LXRvLUpTT04tbmFtZSBjb252ZW50aW9uLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGlj
IGludCBGaWVsZG5hbWUxIHsKLSAgICAgIGdldCB7IHJldHVybiBmaWVsZG5hbWUxXzsgfQotICAg
ICAgc2V0IHsKLSAgICAgICAgZmllbGRuYW1lMV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImZpZWxkX25hbWUyIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBGaWVsZE5hbWUyRmllbGROdW1iZXIg
PSA0MDI7Ci0gICAgcHJpdmF0ZSBpbnQgZmllbGROYW1lMl87Ci0gICAgcHVibGljIGludCBGaWVs
ZE5hbWUyIHsKLSAgICAgIGdldCB7IHJldHVybiBmaWVsZE5hbWUyXzsgfQotICAgICAgc2V0IHsK
LSAgICAgICAgZmllbGROYW1lMl8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8g
PHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIl9maWVsZF9uYW1lMyIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRmllbGROYW1lM0ZpZWxkTnVtYmVyID0gNDAzOwot
ICAgIHByaXZhdGUgaW50IEZpZWxkTmFtZTNfOwotICAgIHB1YmxpYyBpbnQgRmllbGROYW1lMyB7
Ci0gICAgICBnZXQgeyByZXR1cm4gRmllbGROYW1lM187IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IEZpZWxkTmFtZTNfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJmaWVsZF9fbmFtZTRfIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBGaWVsZE5hbWU0RmllbGROdW1iZXIgPSA0MDQ7Ci0gICAgcHJp
dmF0ZSBpbnQgZmllbGROYW1lNF87Ci0gICAgcHVibGljIGludCBGaWVsZE5hbWU0IHsKLSAgICAg
IGdldCB7IHJldHVybiBmaWVsZE5hbWU0XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgZmllbGRO
YW1lNF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgImZpZWxkMG5hbWU1IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGlj
IGNvbnN0IGludCBGaWVsZDBOYW1lNUZpZWxkTnVtYmVyID0gNDA1OwotICAgIHByaXZhdGUgaW50
IGZpZWxkME5hbWU1XzsKLSAgICBwdWJsaWMgaW50IEZpZWxkME5hbWU1IHsKLSAgICAgIGdldCB7
IHJldHVybiBmaWVsZDBOYW1lNV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGZpZWxkME5hbWU1
XyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAiZmllbGRfMF9uYW1lNiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgRmllbGQwTmFtZTZGaWVsZE51bWJlciA9IDQwNjsKLSAgICBwcml2YXRlIGludCBm
aWVsZDBOYW1lNl87Ci0gICAgcHVibGljIGludCBGaWVsZDBOYW1lNiB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gZmllbGQwTmFtZTZfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBmaWVsZDBOYW1lNl8g
PSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVy
IGZvciB0aGUgImZpZWxkTmFtZTciIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3Qg
aW50IEZpZWxkTmFtZTdGaWVsZE51bWJlciA9IDQwNzsKLSAgICBwcml2YXRlIGludCBmaWVsZE5h
bWU3XzsKLSAgICBwdWJsaWMgaW50IEZpZWxkTmFtZTcgewotICAgICAgZ2V0IHsgcmV0dXJuIGZp
ZWxkTmFtZTdfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBmaWVsZE5hbWU3XyA9IHZhbHVlOwot
ICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAi
RmllbGROYW1lOCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRmllbGRO
YW1lOEZpZWxkTnVtYmVyID0gNDA4OwotICAgIHByaXZhdGUgaW50IGZpZWxkTmFtZThfOwotICAg
IHB1YmxpYyBpbnQgRmllbGROYW1lOCB7Ci0gICAgICBnZXQgeyByZXR1cm4gZmllbGROYW1lOF87
IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGZpZWxkTmFtZThfID0gdmFsdWU7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJmaWVsZF9OYW1l
OSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRmllbGROYW1lOUZpZWxk
TnVtYmVyID0gNDA5OwotICAgIHByaXZhdGUgaW50IGZpZWxkTmFtZTlfOwotICAgIHB1YmxpYyBp
bnQgRmllbGROYW1lOSB7Ci0gICAgICBnZXQgeyByZXR1cm4gZmllbGROYW1lOV87IH0KLSAgICAg
IHNldCB7Ci0gICAgICAgIGZpZWxkTmFtZTlfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJGaWVsZF9OYW1lMTAiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEZpZWxkTmFtZTEwRmllbGROdW1iZXIg
PSA0MTA7Ci0gICAgcHJpdmF0ZSBpbnQgZmllbGROYW1lMTBfOwotICAgIHB1YmxpYyBpbnQgRmll
bGROYW1lMTAgewotICAgICAgZ2V0IHsgcmV0dXJuIGZpZWxkTmFtZTEwXzsgfQotICAgICAgc2V0
IHsKLSAgICAgICAgZmllbGROYW1lMTBfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJGSUVMRF9OQU1FMTEiIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEZJRUxETkFNRTExRmllbGROdW1iZXIgPSA0
MTE7Ci0gICAgcHJpdmF0ZSBpbnQgZklFTEROQU1FMTFfOwotICAgIHB1YmxpYyBpbnQgRklFTERO
QU1FMTEgewotICAgICAgZ2V0IHsgcmV0dXJuIGZJRUxETkFNRTExXzsgfQotICAgICAgc2V0IHsK
LSAgICAgICAgZklFTEROQU1FMTFfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJGSUVMRF9uYW1lMTIiIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEZJRUxETmFtZTEyRmllbGROdW1iZXIgPSA0MTI7
Ci0gICAgcHJpdmF0ZSBpbnQgZklFTEROYW1lMTJfOwotICAgIHB1YmxpYyBpbnQgRklFTEROYW1l
MTIgewotICAgICAgZ2V0IHsgcmV0dXJuIGZJRUxETmFtZTEyXzsgfQotICAgICAgc2V0IHsKLSAg
ICAgICAgZklFTEROYW1lMTJfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0
ZSBvYmplY3Qgb25lb2ZGaWVsZF87Ci0gICAgLy8vIDxzdW1tYXJ5PkVudW0gb2YgcG9zc2libGUg
Y2FzZXMgZm9yIHRoZSAib25lb2ZfZmllbGQiIG9uZW9mLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
ZW51bSBPbmVvZkZpZWxkT25lb2ZDYXNlIHsKLSAgICAgIE5vbmUgPSAwLAotICAgICAgT25lb2ZV
aW50MzIgPSAxMTEsCi0gICAgICBPbmVvZk5lc3RlZE1lc3NhZ2UgPSAxMTIsCi0gICAgICBPbmVv
ZlN0cmluZyA9IDExMywKLSAgICAgIE9uZW9mQnl0ZXMgPSAxMTQsCi0gICAgfQotICAgIHByaXZh
dGUgT25lb2ZGaWVsZE9uZW9mQ2FzZSBvbmVvZkZpZWxkQ2FzZV8gPSBPbmVvZkZpZWxkT25lb2ZD
YXNlLk5vbmU7Ci0gICAgcHVibGljIE9uZW9mRmllbGRPbmVvZkNhc2UgT25lb2ZGaWVsZENhc2Ug
ewotICAgICAgZ2V0IHsgcmV0dXJuIG9uZW9mRmllbGRDYXNlXzsgfQotICAgIH0KLQotICAgIHB1
YmxpYyB2b2lkIENsZWFyT25lb2ZGaWVsZCgpIHsKLSAgICAgIG9uZW9mRmllbGRDYXNlXyA9IE9u
ZW9mRmllbGRPbmVvZkNhc2UuTm9uZTsKLSAgICAgIG9uZW9mRmllbGRfID0gbnVsbDsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAg
ICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIFRlc3RBbGxUeXBlcyk7Ci0gICAgfQotCi0gICAgcHVi
bGljIGJvb2wgRXF1YWxzKFRlc3RBbGxUeXBlcyBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5j
ZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQot
ICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9uYWxJbnQzMiAhPSBvdGhlci5PcHRpb25h
bEludDMyKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT3B0aW9uYWxJbnQ2NCAhPSBvdGhlci5P
cHRpb25hbEludDY0KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT3B0aW9uYWxVaW50MzIgIT0g
b3RoZXIuT3B0aW9uYWxVaW50MzIpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPcHRpb25hbFVp
bnQ2NCAhPSBvdGhlci5PcHRpb25hbFVpbnQ2NCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE9w
dGlvbmFsU2ludDMyICE9IG90aGVyLk9wdGlvbmFsU2ludDMyKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICBpZiAoT3B0aW9uYWxTaW50NjQgIT0gb3RoZXIuT3B0aW9uYWxTaW50NjQpIHJldHVybiBmYWxz
ZTsKLSAgICAgIGlmIChPcHRpb25hbEZpeGVkMzIgIT0gb3RoZXIuT3B0aW9uYWxGaXhlZDMyKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT3B0aW9uYWxGaXhlZDY0ICE9IG90aGVyLk9wdGlvbmFs
Rml4ZWQ2NCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE9wdGlvbmFsU2ZpeGVkMzIgIT0gb3Ro
ZXIuT3B0aW9uYWxTZml4ZWQzMikgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE9wdGlvbmFsU2Zp
eGVkNjQgIT0gb3RoZXIuT3B0aW9uYWxTZml4ZWQ2NCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KE9wdGlvbmFsRmxvYXQgIT0gb3RoZXIuT3B0aW9uYWxGbG9hdCkgcmV0dXJuIGZhbHNlOwotICAg
ICAgaWYgKE9wdGlvbmFsRG91YmxlICE9IG90aGVyLk9wdGlvbmFsRG91YmxlKSByZXR1cm4gZmFs
c2U7Ci0gICAgICBpZiAoT3B0aW9uYWxCb29sICE9IG90aGVyLk9wdGlvbmFsQm9vbCkgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYgKE9wdGlvbmFsU3RyaW5nICE9IG90aGVyLk9wdGlvbmFsU3RyaW5n
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT3B0aW9uYWxCeXRlcyAhPSBvdGhlci5PcHRpb25h
bEJ5dGVzKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoT3B0aW9uYWxO
ZXN0ZWRNZXNzYWdlLCBvdGhlci5PcHRpb25hbE5lc3RlZE1lc3NhZ2UpKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoT3B0aW9uYWxGb3JlaWduTWVzc2FnZSwgb3RoZXIu
T3B0aW9uYWxGb3JlaWduTWVzc2FnZSkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPcHRpb25h
bE5lc3RlZEVudW0gIT0gb3RoZXIuT3B0aW9uYWxOZXN0ZWRFbnVtKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICBpZiAoT3B0aW9uYWxGb3JlaWduRW51bSAhPSBvdGhlci5PcHRpb25hbEZvcmVpZ25FbnVt
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT3B0aW9uYWxTdHJpbmdQaWVjZSAhPSBvdGhlci5P
cHRpb25hbFN0cmluZ1BpZWNlKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT3B0aW9uYWxDb3Jk
ICE9IG90aGVyLk9wdGlvbmFsQ29yZCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3Qu
RXF1YWxzKFJlY3Vyc2l2ZU1lc3NhZ2UsIG90aGVyLlJlY3Vyc2l2ZU1lc3NhZ2UpKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWRJbnQzMl8uRXF1YWxzKG90aGVyLnJlcGVhdGVkSW50
MzJfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkSW50NjRfLkVxdWFscyhvdGhl
ci5yZXBlYXRlZEludDY0XykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZFVpbnQz
Ml8uRXF1YWxzKG90aGVyLnJlcGVhdGVkVWludDMyXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlm
KCFyZXBlYXRlZFVpbnQ2NF8uRXF1YWxzKG90aGVyLnJlcGVhdGVkVWludDY0XykpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZFNpbnQzMl8uRXF1YWxzKG90aGVyLnJlcGVhdGVkU2lu
dDMyXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZFNpbnQ2NF8uRXF1YWxzKG90
aGVyLnJlcGVhdGVkU2ludDY0XykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZEZp
eGVkMzJfLkVxdWFscyhvdGhlci5yZXBlYXRlZEZpeGVkMzJfKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgaWYoIXJlcGVhdGVkRml4ZWQ2NF8uRXF1YWxzKG90aGVyLnJlcGVhdGVkRml4ZWQ2NF8pKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWRTZml4ZWQzMl8uRXF1YWxzKG90aGVyLnJl
cGVhdGVkU2ZpeGVkMzJfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkU2ZpeGVk
NjRfLkVxdWFscyhvdGhlci5yZXBlYXRlZFNmaXhlZDY0XykpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmKCFyZXBlYXRlZEZsb2F0Xy5FcXVhbHMob3RoZXIucmVwZWF0ZWRGbG9hdF8pKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWREb3VibGVfLkVxdWFscyhvdGhlci5yZXBlYXRlZERv
dWJsZV8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWRCb29sXy5FcXVhbHMob3Ro
ZXIucmVwZWF0ZWRCb29sXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZFN0cmlu
Z18uRXF1YWxzKG90aGVyLnJlcGVhdGVkU3RyaW5nXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlm
KCFyZXBlYXRlZEJ5dGVzXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRCeXRlc18pKSByZXR1cm4gZmFs
c2U7Ci0gICAgICBpZighcmVwZWF0ZWROZXN0ZWRNZXNzYWdlXy5FcXVhbHMob3RoZXIucmVwZWF0
ZWROZXN0ZWRNZXNzYWdlXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZEZvcmVp
Z25NZXNzYWdlXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRGb3JlaWduTWVzc2FnZV8pKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWROZXN0ZWRFbnVtXy5FcXVhbHMob3RoZXIucmVwZWF0
ZWROZXN0ZWRFbnVtXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZEZvcmVpZ25F
bnVtXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRGb3JlaWduRW51bV8pKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICBpZighcmVwZWF0ZWRTdHJpbmdQaWVjZV8uRXF1YWxzKG90aGVyLnJlcGVhdGVkU3RyaW5n
UGllY2VfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkQ29yZF8uRXF1YWxzKG90
aGVyLnJlcGVhdGVkQ29yZF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIU1hcEludDMySW50
MzIuRXF1YWxzKG90aGVyLk1hcEludDMySW50MzIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAo
IU1hcEludDY0SW50NjQuRXF1YWxzKG90aGVyLk1hcEludDY0SW50NjQpKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoIU1hcFVpbnQzMlVpbnQzMi5FcXVhbHMob3RoZXIuTWFwVWludDMyVWludDMy
KSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFNYXBVaW50NjRVaW50NjQuRXF1YWxzKG90aGVy
Lk1hcFVpbnQ2NFVpbnQ2NCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwU2ludDMyU2lu
dDMyLkVxdWFscyhvdGhlci5NYXBTaW50MzJTaW50MzIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZiAoIU1hcFNpbnQ2NFNpbnQ2NC5FcXVhbHMob3RoZXIuTWFwU2ludDY0U2ludDY0KSkgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYgKCFNYXBGaXhlZDMyRml4ZWQzMi5FcXVhbHMob3RoZXIuTWFwRml4
ZWQzMkZpeGVkMzIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIU1hcEZpeGVkNjRGaXhlZDY0
LkVxdWFscyhvdGhlci5NYXBGaXhlZDY0Rml4ZWQ2NCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlm
ICghTWFwU2ZpeGVkMzJTZml4ZWQzMi5FcXVhbHMob3RoZXIuTWFwU2ZpeGVkMzJTZml4ZWQzMikp
IHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwU2ZpeGVkNjRTZml4ZWQ2NC5FcXVhbHMob3Ro
ZXIuTWFwU2ZpeGVkNjRTZml4ZWQ2NCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwSW50
MzJGbG9hdC5FcXVhbHMob3RoZXIuTWFwSW50MzJGbG9hdCkpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmICghTWFwSW50MzJEb3VibGUuRXF1YWxzKG90aGVyLk1hcEludDMyRG91YmxlKSkgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYgKCFNYXBCb29sQm9vbC5FcXVhbHMob3RoZXIuTWFwQm9vbEJvb2wp
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIU1hcFN0cmluZ1N0cmluZy5FcXVhbHMob3RoZXIu
TWFwU3RyaW5nU3RyaW5nKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFNYXBTdHJpbmdCeXRl
cy5FcXVhbHMob3RoZXIuTWFwU3RyaW5nQnl0ZXMpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAo
IU1hcFN0cmluZ05lc3RlZE1lc3NhZ2UuRXF1YWxzKG90aGVyLk1hcFN0cmluZ05lc3RlZE1lc3Nh
Z2UpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIU1hcFN0cmluZ0ZvcmVpZ25NZXNzYWdlLkVx
dWFscyhvdGhlci5NYXBTdHJpbmdGb3JlaWduTWVzc2FnZSkpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmICghTWFwU3RyaW5nTmVzdGVkRW51bS5FcXVhbHMob3RoZXIuTWFwU3RyaW5nTmVzdGVkRW51
bSkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwU3RyaW5nRm9yZWlnbkVudW0uRXF1YWxz
KG90aGVyLk1hcFN0cmluZ0ZvcmVpZ25FbnVtKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE9u
ZW9mVWludDMyICE9IG90aGVyLk9uZW9mVWludDMyKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAo
IW9iamVjdC5FcXVhbHMoT25lb2ZOZXN0ZWRNZXNzYWdlLCBvdGhlci5PbmVvZk5lc3RlZE1lc3Nh
Z2UpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT25lb2ZTdHJpbmcgIT0gb3RoZXIuT25lb2ZT
dHJpbmcpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPbmVvZkJ5dGVzICE9IG90aGVyLk9uZW9m
Qnl0ZXMpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPcHRpb25hbEJvb2xXcmFwcGVyICE9IG90
aGVyLk9wdGlvbmFsQm9vbFdyYXBwZXIpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPcHRpb25h
bEludDMyV3JhcHBlciAhPSBvdGhlci5PcHRpb25hbEludDMyV3JhcHBlcikgcmV0dXJuIGZhbHNl
OwotICAgICAgaWYgKE9wdGlvbmFsSW50NjRXcmFwcGVyICE9IG90aGVyLk9wdGlvbmFsSW50NjRX
cmFwcGVyKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT3B0aW9uYWxVaW50MzJXcmFwcGVyICE9
IG90aGVyLk9wdGlvbmFsVWludDMyV3JhcHBlcikgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE9w
dGlvbmFsVWludDY0V3JhcHBlciAhPSBvdGhlci5PcHRpb25hbFVpbnQ2NFdyYXBwZXIpIHJldHVy
biBmYWxzZTsKLSAgICAgIGlmIChPcHRpb25hbEZsb2F0V3JhcHBlciAhPSBvdGhlci5PcHRpb25h
bEZsb2F0V3JhcHBlcikgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE9wdGlvbmFsRG91YmxlV3Jh
cHBlciAhPSBvdGhlci5PcHRpb25hbERvdWJsZVdyYXBwZXIpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmIChPcHRpb25hbFN0cmluZ1dyYXBwZXIgIT0gb3RoZXIuT3B0aW9uYWxTdHJpbmdXcmFwcGVy
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT3B0aW9uYWxCeXRlc1dyYXBwZXIgIT0gb3RoZXIu
T3B0aW9uYWxCeXRlc1dyYXBwZXIpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZEJv
b2xXcmFwcGVyXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRCb29sV3JhcHBlcl8pKSByZXR1cm4gZmFs
c2U7Ci0gICAgICBpZighcmVwZWF0ZWRJbnQzMldyYXBwZXJfLkVxdWFscyhvdGhlci5yZXBlYXRl
ZEludDMyV3JhcHBlcl8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWRJbnQ2NFdy
YXBwZXJfLkVxdWFscyhvdGhlci5yZXBlYXRlZEludDY0V3JhcHBlcl8pKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZighcmVwZWF0ZWRVaW50MzJXcmFwcGVyXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRV
aW50MzJXcmFwcGVyXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZFVpbnQ2NFdy
YXBwZXJfLkVxdWFscyhvdGhlci5yZXBlYXRlZFVpbnQ2NFdyYXBwZXJfKSkgcmV0dXJuIGZhbHNl
OwotICAgICAgaWYoIXJlcGVhdGVkRmxvYXRXcmFwcGVyXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRG
bG9hdFdyYXBwZXJfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkRG91YmxlV3Jh
cHBlcl8uRXF1YWxzKG90aGVyLnJlcGVhdGVkRG91YmxlV3JhcHBlcl8pKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZighcmVwZWF0ZWRTdHJpbmdXcmFwcGVyXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRT
dHJpbmdXcmFwcGVyXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZEJ5dGVzV3Jh
cHBlcl8uRXF1YWxzKG90aGVyLnJlcGVhdGVkQnl0ZXNXcmFwcGVyXykpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmICghb2JqZWN0LkVxdWFscyhPcHRpb25hbER1cmF0aW9uLCBvdGhlci5PcHRpb25h
bER1cmF0aW9uKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKE9wdGlv
bmFsVGltZXN0YW1wLCBvdGhlci5PcHRpb25hbFRpbWVzdGFtcCkpIHJldHVybiBmYWxzZTsKLSAg
ICAgIGlmICghb2JqZWN0LkVxdWFscyhPcHRpb25hbEZpZWxkTWFzaywgb3RoZXIuT3B0aW9uYWxG
aWVsZE1hc2spKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoT3B0aW9u
YWxTdHJ1Y3QsIG90aGVyLk9wdGlvbmFsU3RydWN0KSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KCFvYmplY3QuRXF1YWxzKE9wdGlvbmFsQW55LCBvdGhlci5PcHRpb25hbEFueSkpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmICghb2JqZWN0LkVxdWFscyhPcHRpb25hbFZhbHVlLCBvdGhlci5PcHRp
b25hbFZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkRHVyYXRpb25fLkVx
dWFscyhvdGhlci5yZXBlYXRlZER1cmF0aW9uXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFy
ZXBlYXRlZFRpbWVzdGFtcF8uRXF1YWxzKG90aGVyLnJlcGVhdGVkVGltZXN0YW1wXykpIHJldHVy
biBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZEZpZWxkbWFza18uRXF1YWxzKG90aGVyLnJlcGVh
dGVkRmllbGRtYXNrXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZFN0cnVjdF8u
RXF1YWxzKG90aGVyLnJlcGVhdGVkU3RydWN0XykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFy
ZXBlYXRlZEFueV8uRXF1YWxzKG90aGVyLnJlcGVhdGVkQW55XykpIHJldHVybiBmYWxzZTsKLSAg
ICAgIGlmKCFyZXBlYXRlZFZhbHVlXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRWYWx1ZV8pKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZiAoRmllbGRuYW1lMSAhPSBvdGhlci5GaWVsZG5hbWUxKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZiAoRmllbGROYW1lMiAhPSBvdGhlci5GaWVsZE5hbWUyKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZiAoRmllbGROYW1lMyAhPSBvdGhlci5GaWVsZE5hbWUzKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZiAoRmllbGROYW1lNCAhPSBvdGhlci5GaWVsZE5hbWU0KSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZiAoRmllbGQwTmFtZTUgIT0gb3RoZXIuRmllbGQwTmFtZTUpIHJl
dHVybiBmYWxzZTsKLSAgICAgIGlmIChGaWVsZDBOYW1lNiAhPSBvdGhlci5GaWVsZDBOYW1lNikg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEZpZWxkTmFtZTcgIT0gb3RoZXIuRmllbGROYW1lNykg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEZpZWxkTmFtZTggIT0gb3RoZXIuRmllbGROYW1lOCkg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEZpZWxkTmFtZTkgIT0gb3RoZXIuRmllbGROYW1lOSkg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEZpZWxkTmFtZTEwICE9IG90aGVyLkZpZWxkTmFtZTEw
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoRklFTEROQU1FMTEgIT0gb3RoZXIuRklFTEROQU1F
MTEpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChGSUVMRE5hbWUxMiAhPSBvdGhlci5GSUVMRE5h
bWUxMikgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE9uZW9mRmllbGRDYXNlICE9IG90aGVyLk9u
ZW9mRmllbGRDYXNlKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2gg
PSAxOwotICAgICAgaWYgKE9wdGlvbmFsSW50MzIgIT0gMCkgaGFzaCBePSBPcHRpb25hbEludDMy
LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoT3B0aW9uYWxJbnQ2NCAhPSAwTCkgaGFzaCBePSBP
cHRpb25hbEludDY0LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoT3B0aW9uYWxVaW50MzIgIT0g
MCkgaGFzaCBePSBPcHRpb25hbFVpbnQzMi5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKE9wdGlv
bmFsVWludDY0ICE9IDBVTCkgaGFzaCBePSBPcHRpb25hbFVpbnQ2NC5HZXRIYXNoQ29kZSgpOwot
ICAgICAgaWYgKE9wdGlvbmFsU2ludDMyICE9IDApIGhhc2ggXj0gT3B0aW9uYWxTaW50MzIuR2V0
SGFzaENvZGUoKTsKLSAgICAgIGlmIChPcHRpb25hbFNpbnQ2NCAhPSAwTCkgaGFzaCBePSBPcHRp
b25hbFNpbnQ2NC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKE9wdGlvbmFsRml4ZWQzMiAhPSAw
KSBoYXNoIF49IE9wdGlvbmFsRml4ZWQzMi5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKE9wdGlv
bmFsRml4ZWQ2NCAhPSAwVUwpIGhhc2ggXj0gT3B0aW9uYWxGaXhlZDY0LkdldEhhc2hDb2RlKCk7
Ci0gICAgICBpZiAoT3B0aW9uYWxTZml4ZWQzMiAhPSAwKSBoYXNoIF49IE9wdGlvbmFsU2ZpeGVk
MzIuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChPcHRpb25hbFNmaXhlZDY0ICE9IDBMKSBoYXNo
IF49IE9wdGlvbmFsU2ZpeGVkNjQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChPcHRpb25hbEZs
b2F0ICE9IDBGKSBoYXNoIF49IE9wdGlvbmFsRmxvYXQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlm
IChPcHRpb25hbERvdWJsZSAhPSAwRCkgaGFzaCBePSBPcHRpb25hbERvdWJsZS5HZXRIYXNoQ29k
ZSgpOwotICAgICAgaWYgKE9wdGlvbmFsQm9vbCAhPSBmYWxzZSkgaGFzaCBePSBPcHRpb25hbEJv
b2wuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChPcHRpb25hbFN0cmluZy5MZW5ndGggIT0gMCkg
aGFzaCBePSBPcHRpb25hbFN0cmluZy5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKE9wdGlvbmFs
Qnl0ZXMuTGVuZ3RoICE9IDApIGhhc2ggXj0gT3B0aW9uYWxCeXRlcy5HZXRIYXNoQ29kZSgpOwot
ICAgICAgaWYgKG9wdGlvbmFsTmVzdGVkTWVzc2FnZV8gIT0gbnVsbCkgaGFzaCBePSBPcHRpb25h
bE5lc3RlZE1lc3NhZ2UuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChvcHRpb25hbEZvcmVpZ25N
ZXNzYWdlXyAhPSBudWxsKSBoYXNoIF49IE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UuR2V0SGFzaENv
ZGUoKTsKLSAgICAgIGlmIChPcHRpb25hbE5lc3RlZEVudW0gIT0gMCkgaGFzaCBePSBPcHRpb25h
bE5lc3RlZEVudW0uR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChPcHRpb25hbEZvcmVpZ25FbnVt
ICE9IDApIGhhc2ggXj0gT3B0aW9uYWxGb3JlaWduRW51bS5HZXRIYXNoQ29kZSgpOwotICAgICAg
aWYgKE9wdGlvbmFsU3RyaW5nUGllY2UuTGVuZ3RoICE9IDApIGhhc2ggXj0gT3B0aW9uYWxTdHJp
bmdQaWVjZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKE9wdGlvbmFsQ29yZC5MZW5ndGggIT0g
MCkgaGFzaCBePSBPcHRpb25hbENvcmQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChyZWN1cnNp
dmVNZXNzYWdlXyAhPSBudWxsKSBoYXNoIF49IFJlY3Vyc2l2ZU1lc3NhZ2UuR2V0SGFzaENvZGUo
KTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRJbnQzMl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhh
c2ggXj0gcmVwZWF0ZWRJbnQ2NF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0
ZWRVaW50MzJfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHJlcGVhdGVkVWludDY0Xy5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZFNpbnQzMl8uR2V0SGFzaENvZGUo
KTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRTaW50NjRfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBo
YXNoIF49IHJlcGVhdGVkRml4ZWQzMl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVw
ZWF0ZWRGaXhlZDY0Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZFNmaXhl
ZDMyXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZFNmaXhlZDY0Xy5HZXRI
YXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZEZsb2F0Xy5HZXRIYXNoQ29kZSgpOwot
ICAgICAgaGFzaCBePSByZXBlYXRlZERvdWJsZV8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2gg
Xj0gcmVwZWF0ZWRCb29sXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZFN0
cmluZ18uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRCeXRlc18uR2V0SGFz
aENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWROZXN0ZWRNZXNzYWdlXy5HZXRIYXNoQ29k
ZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZEZvcmVpZ25NZXNzYWdlXy5HZXRIYXNoQ29kZSgp
OwotICAgICAgaGFzaCBePSByZXBlYXRlZE5lc3RlZEVudW1fLkdldEhhc2hDb2RlKCk7Ci0gICAg
ICBoYXNoIF49IHJlcGVhdGVkRm9yZWlnbkVudW1fLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNo
IF49IHJlcGVhdGVkU3RyaW5nUGllY2VfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHJl
cGVhdGVkQ29yZF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwSW50MzJJbnQzMi5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBJbnQ2NEludDY0LkdldEhhc2hDb2RlKCk7
Ci0gICAgICBoYXNoIF49IE1hcFVpbnQzMlVpbnQzMi5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFz
aCBePSBNYXBVaW50NjRVaW50NjQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwU2lu
dDMyU2ludDMyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IE1hcFNpbnQ2NFNpbnQ2NC5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBGaXhlZDMyRml4ZWQzMi5HZXRIYXNoQ29k
ZSgpOwotICAgICAgaGFzaCBePSBNYXBGaXhlZDY0Rml4ZWQ2NC5HZXRIYXNoQ29kZSgpOwotICAg
ICAgaGFzaCBePSBNYXBTZml4ZWQzMlNmaXhlZDMyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNo
IF49IE1hcFNmaXhlZDY0U2ZpeGVkNjQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFw
SW50MzJGbG9hdC5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBJbnQzMkRvdWJsZS5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBCb29sQm9vbC5HZXRIYXNoQ29kZSgpOwot
ICAgICAgaGFzaCBePSBNYXBTdHJpbmdTdHJpbmcuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2gg
Xj0gTWFwU3RyaW5nQnl0ZXMuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwU3RyaW5n
TmVzdGVkTWVzc2FnZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBTdHJpbmdGb3Jl
aWduTWVzc2FnZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBTdHJpbmdOZXN0ZWRF
bnVtLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IE1hcFN0cmluZ0ZvcmVpZ25FbnVtLkdl
dEhhc2hDb2RlKCk7Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVv
ZkNhc2UuT25lb2ZVaW50MzIpIGhhc2ggXj0gT25lb2ZVaW50MzIuR2V0SGFzaENvZGUoKTsKLSAg
ICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZk5lc3Rl
ZE1lc3NhZ2UpIGhhc2ggXj0gT25lb2ZOZXN0ZWRNZXNzYWdlLkdldEhhc2hDb2RlKCk7Ci0gICAg
ICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZTdHJpbmcp
IGhhc2ggXj0gT25lb2ZTdHJpbmcuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChvbmVvZkZpZWxk
Q2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZkJ5dGVzKSBoYXNoIF49IE9uZW9mQnl0
ZXMuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChvcHRpb25hbEJvb2xXcmFwcGVyXyAhPSBudWxs
KSBoYXNoIF49IE9wdGlvbmFsQm9vbFdyYXBwZXIuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChv
cHRpb25hbEludDMyV3JhcHBlcl8gIT0gbnVsbCkgaGFzaCBePSBPcHRpb25hbEludDMyV3JhcHBl
ci5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG9wdGlvbmFsSW50NjRXcmFwcGVyXyAhPSBudWxs
KSBoYXNoIF49IE9wdGlvbmFsSW50NjRXcmFwcGVyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAo
b3B0aW9uYWxVaW50MzJXcmFwcGVyXyAhPSBudWxsKSBoYXNoIF49IE9wdGlvbmFsVWludDMyV3Jh
cHBlci5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG9wdGlvbmFsVWludDY0V3JhcHBlcl8gIT0g
bnVsbCkgaGFzaCBePSBPcHRpb25hbFVpbnQ2NFdyYXBwZXIuR2V0SGFzaENvZGUoKTsKLSAgICAg
IGlmIChvcHRpb25hbEZsb2F0V3JhcHBlcl8gIT0gbnVsbCkgaGFzaCBePSBPcHRpb25hbEZsb2F0
V3JhcHBlci5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG9wdGlvbmFsRG91YmxlV3JhcHBlcl8g
IT0gbnVsbCkgaGFzaCBePSBPcHRpb25hbERvdWJsZVdyYXBwZXIuR2V0SGFzaENvZGUoKTsKLSAg
ICAgIGlmIChvcHRpb25hbFN0cmluZ1dyYXBwZXJfICE9IG51bGwpIGhhc2ggXj0gT3B0aW9uYWxT
dHJpbmdXcmFwcGVyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAob3B0aW9uYWxCeXRlc1dyYXBw
ZXJfICE9IG51bGwpIGhhc2ggXj0gT3B0aW9uYWxCeXRlc1dyYXBwZXIuR2V0SGFzaENvZGUoKTsK
LSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRCb29sV3JhcHBlcl8uR2V0SGFzaENvZGUoKTsKLSAgICAg
IGhhc2ggXj0gcmVwZWF0ZWRJbnQzMldyYXBwZXJfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNo
IF49IHJlcGVhdGVkSW50NjRXcmFwcGVyXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBy
ZXBlYXRlZFVpbnQzMldyYXBwZXJfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHJlcGVh
dGVkVWludDY0V3JhcHBlcl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRG
bG9hdFdyYXBwZXJfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHJlcGVhdGVkRG91Ymxl
V3JhcHBlcl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRTdHJpbmdXcmFw
cGVyXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZEJ5dGVzV3JhcHBlcl8u
R2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChvcHRpb25hbER1cmF0aW9uXyAhPSBudWxsKSBoYXNo
IF49IE9wdGlvbmFsRHVyYXRpb24uR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChvcHRpb25hbFRp
bWVzdGFtcF8gIT0gbnVsbCkgaGFzaCBePSBPcHRpb25hbFRpbWVzdGFtcC5HZXRIYXNoQ29kZSgp
OwotICAgICAgaWYgKG9wdGlvbmFsRmllbGRNYXNrXyAhPSBudWxsKSBoYXNoIF49IE9wdGlvbmFs
RmllbGRNYXNrLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAob3B0aW9uYWxTdHJ1Y3RfICE9IG51
bGwpIGhhc2ggXj0gT3B0aW9uYWxTdHJ1Y3QuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChvcHRp
b25hbEFueV8gIT0gbnVsbCkgaGFzaCBePSBPcHRpb25hbEFueS5HZXRIYXNoQ29kZSgpOwotICAg
ICAgaWYgKG9wdGlvbmFsVmFsdWVfICE9IG51bGwpIGhhc2ggXj0gT3B0aW9uYWxWYWx1ZS5HZXRI
YXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZER1cmF0aW9uXy5HZXRIYXNoQ29kZSgp
OwotICAgICAgaGFzaCBePSByZXBlYXRlZFRpbWVzdGFtcF8uR2V0SGFzaENvZGUoKTsKLSAgICAg
IGhhc2ggXj0gcmVwZWF0ZWRGaWVsZG1hc2tfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49
IHJlcGVhdGVkU3RydWN0Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZEFu
eV8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRWYWx1ZV8uR2V0SGFzaENv
ZGUoKTsKLSAgICAgIGlmIChGaWVsZG5hbWUxICE9IDApIGhhc2ggXj0gRmllbGRuYW1lMS5HZXRI
YXNoQ29kZSgpOwotICAgICAgaWYgKEZpZWxkTmFtZTIgIT0gMCkgaGFzaCBePSBGaWVsZE5hbWUy
LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoRmllbGROYW1lMyAhPSAwKSBoYXNoIF49IEZpZWxk
TmFtZTMuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChGaWVsZE5hbWU0ICE9IDApIGhhc2ggXj0g
RmllbGROYW1lNC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKEZpZWxkME5hbWU1ICE9IDApIGhh
c2ggXj0gRmllbGQwTmFtZTUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChGaWVsZDBOYW1lNiAh
PSAwKSBoYXNoIF49IEZpZWxkME5hbWU2LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoRmllbGRO
YW1lNyAhPSAwKSBoYXNoIF49IEZpZWxkTmFtZTcuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChG
aWVsZE5hbWU4ICE9IDApIGhhc2ggXj0gRmllbGROYW1lOC5HZXRIYXNoQ29kZSgpOwotICAgICAg
aWYgKEZpZWxkTmFtZTkgIT0gMCkgaGFzaCBePSBGaWVsZE5hbWU5LkdldEhhc2hDb2RlKCk7Ci0g
ICAgICBpZiAoRmllbGROYW1lMTAgIT0gMCkgaGFzaCBePSBGaWVsZE5hbWUxMC5HZXRIYXNoQ29k
ZSgpOwotICAgICAgaWYgKEZJRUxETkFNRTExICE9IDApIGhhc2ggXj0gRklFTEROQU1FMTEuR2V0
SGFzaENvZGUoKTsKLSAgICAgIGlmIChGSUVMRE5hbWUxMiAhPSAwKSBoYXNoIF49IEZJRUxETmFt
ZTEyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IChpbnQpIG9uZW9mRmllbGRDYXNlXzsK
LSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcg
VG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGlj
U3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVk
T3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKE9wdGlvbmFsSW50MzIgIT0gMCkgewot
ICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUludDMy
KE9wdGlvbmFsSW50MzIpOwotICAgICAgfQotICAgICAgaWYgKE9wdGlvbmFsSW50NjQgIT0gMEwp
IHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE2KTsKLSAgICAgICAgb3V0cHV0LldyaXRl
SW50NjQoT3B0aW9uYWxJbnQ2NCk7Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9uYWxVaW50MzIg
IT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMjQpOwotICAgICAgICBvdXRwdXQu
V3JpdGVVSW50MzIoT3B0aW9uYWxVaW50MzIpOwotICAgICAgfQotICAgICAgaWYgKE9wdGlvbmFs
VWludDY0ICE9IDBVTCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMzIpOwotICAgICAg
ICBvdXRwdXQuV3JpdGVVSW50NjQoT3B0aW9uYWxVaW50NjQpOwotICAgICAgfQotICAgICAgaWYg
KE9wdGlvbmFsU2ludDMyICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDQwKTsK
LSAgICAgICAgb3V0cHV0LldyaXRlU0ludDMyKE9wdGlvbmFsU2ludDMyKTsKLSAgICAgIH0KLSAg
ICAgIGlmIChPcHRpb25hbFNpbnQ2NCAhPSAwTCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdU
YWcoNDgpOwotICAgICAgICBvdXRwdXQuV3JpdGVTSW50NjQoT3B0aW9uYWxTaW50NjQpOwotICAg
ICAgfQotICAgICAgaWYgKE9wdGlvbmFsRml4ZWQzMiAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5X
cml0ZVJhd1RhZyg2MSk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUZpeGVkMzIoT3B0aW9uYWxGaXhl
ZDMyKTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbEZpeGVkNjQgIT0gMFVMKSB7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg2NSk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUZpeGVkNjQo
T3B0aW9uYWxGaXhlZDY0KTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbFNmaXhlZDMyICE9
IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDc3KTsKLSAgICAgICAgb3V0cHV0Lldy
aXRlU0ZpeGVkMzIoT3B0aW9uYWxTZml4ZWQzMik7Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9u
YWxTZml4ZWQ2NCAhPSAwTCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoODEpOwotICAg
ICAgICBvdXRwdXQuV3JpdGVTRml4ZWQ2NChPcHRpb25hbFNmaXhlZDY0KTsKLSAgICAgIH0KLSAg
ICAgIGlmIChPcHRpb25hbEZsb2F0ICE9IDBGKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1Rh
Zyg5Myk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUZsb2F0KE9wdGlvbmFsRmxvYXQpOwotICAgICAg
fQotICAgICAgaWYgKE9wdGlvbmFsRG91YmxlICE9IDBEKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZVJhd1RhZyg5Nyk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZURvdWJsZShPcHRpb25hbERvdWJsZSk7
Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9uYWxCb29sICE9IGZhbHNlKSB7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZVJhd1RhZygxMDQpOwotICAgICAgICBvdXRwdXQuV3JpdGVCb29sKE9wdGlvbmFs
Qm9vbCk7Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9uYWxTdHJpbmcuTGVuZ3RoICE9IDApIHsK
LSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDExNCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0
cmluZyhPcHRpb25hbFN0cmluZyk7Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9uYWxCeXRlcy5M
ZW5ndGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTIyKTsKLSAgICAgICAg
b3V0cHV0LldyaXRlQnl0ZXMoT3B0aW9uYWxCeXRlcyk7Ci0gICAgICB9Ci0gICAgICBpZiAob3B0
aW9uYWxOZXN0ZWRNZXNzYWdlXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1Rh
ZygxNDYsIDEpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKE9wdGlvbmFsTmVzdGVkTWVz
c2FnZSk7Ci0gICAgICB9Ci0gICAgICBpZiAob3B0aW9uYWxGb3JlaWduTWVzc2FnZV8gIT0gbnVs
bCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTU0LCAxKTsKLSAgICAgICAgb3V0cHV0
LldyaXRlTWVzc2FnZShPcHRpb25hbEZvcmVpZ25NZXNzYWdlKTsKLSAgICAgIH0KLSAgICAgIGlm
IChPcHRpb25hbE5lc3RlZEVudW0gIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWco
MTY4LCAxKTsKLSAgICAgICAgb3V0cHV0LldyaXRlRW51bSgoaW50KSBPcHRpb25hbE5lc3RlZEVu
dW0pOwotICAgICAgfQotICAgICAgaWYgKE9wdGlvbmFsRm9yZWlnbkVudW0gIT0gMCkgewotICAg
ICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTc2LCAxKTsKLSAgICAgICAgb3V0cHV0LldyaXRlRW51
bSgoaW50KSBPcHRpb25hbEZvcmVpZ25FbnVtKTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25h
bFN0cmluZ1BpZWNlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygx
OTQsIDEpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoT3B0aW9uYWxTdHJpbmdQaWVjZSk7
Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9uYWxDb3JkLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAg
IG91dHB1dC5Xcml0ZVJhd1RhZygyMDIsIDEpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmco
T3B0aW9uYWxDb3JkKTsKLSAgICAgIH0KLSAgICAgIGlmIChyZWN1cnNpdmVNZXNzYWdlXyAhPSBu
dWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygyMTgsIDEpOwotICAgICAgICBvdXRw
dXQuV3JpdGVNZXNzYWdlKFJlY3Vyc2l2ZU1lc3NhZ2UpOwotICAgICAgfQotICAgICAgcmVwZWF0
ZWRJbnQzMl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZEludDMyX2NvZGVjKTsK
LSAgICAgIHJlcGVhdGVkSW50NjRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRJ
bnQ2NF9jb2RlYyk7Ci0gICAgICByZXBlYXRlZFVpbnQzMl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBl
YXRlZF9yZXBlYXRlZFVpbnQzMl9jb2RlYyk7Ci0gICAgICByZXBlYXRlZFVpbnQ2NF8uV3JpdGVU
byhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFVpbnQ2NF9jb2RlYyk7Ci0gICAgICByZXBlYXRl
ZFNpbnQzMl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFNpbnQzMl9jb2RlYyk7
Ci0gICAgICByZXBlYXRlZFNpbnQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRl
ZFNpbnQ2NF9jb2RlYyk7Ci0gICAgICByZXBlYXRlZEZpeGVkMzJfLldyaXRlVG8ob3V0cHV0LCBf
cmVwZWF0ZWRfcmVwZWF0ZWRGaXhlZDMyX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkRml4ZWQ2NF8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZEZpeGVkNjRfY29kZWMpOwotICAgICAg
cmVwZWF0ZWRTZml4ZWQzMl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFNmaXhl
ZDMyX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkU2ZpeGVkNjRfLldyaXRlVG8ob3V0cHV0LCBfcmVw
ZWF0ZWRfcmVwZWF0ZWRTZml4ZWQ2NF9jb2RlYyk7Ci0gICAgICByZXBlYXRlZEZsb2F0Xy5Xcml0
ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkRmxvYXRfY29kZWMpOwotICAgICAgcmVwZWF0
ZWREb3VibGVfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWREb3VibGVfY29kZWMp
OwotICAgICAgcmVwZWF0ZWRCb29sXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVk
Qm9vbF9jb2RlYyk7Ci0gICAgICByZXBlYXRlZFN0cmluZ18uV3JpdGVUbyhvdXRwdXQsIF9yZXBl
YXRlZF9yZXBlYXRlZFN0cmluZ19jb2RlYyk7Ci0gICAgICByZXBlYXRlZEJ5dGVzXy5Xcml0ZVRv
KG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkQnl0ZXNfY29kZWMpOwotICAgICAgcmVwZWF0ZWRO
ZXN0ZWRNZXNzYWdlXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkTmVzdGVkTWVz
c2FnZV9jb2RlYyk7Ci0gICAgICByZXBlYXRlZEZvcmVpZ25NZXNzYWdlXy5Xcml0ZVRvKG91dHB1
dCwgX3JlcGVhdGVkX3JlcGVhdGVkRm9yZWlnbk1lc3NhZ2VfY29kZWMpOwotICAgICAgcmVwZWF0
ZWROZXN0ZWRFbnVtXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkTmVzdGVkRW51
bV9jb2RlYyk7Ci0gICAgICByZXBlYXRlZEZvcmVpZ25FbnVtXy5Xcml0ZVRvKG91dHB1dCwgX3Jl
cGVhdGVkX3JlcGVhdGVkRm9yZWlnbkVudW1fY29kZWMpOwotICAgICAgcmVwZWF0ZWRTdHJpbmdQ
aWVjZV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFN0cmluZ1BpZWNlX2NvZGVj
KTsKLSAgICAgIHJlcGVhdGVkQ29yZF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRl
ZENvcmRfY29kZWMpOwotICAgICAgbWFwSW50MzJJbnQzMl8uV3JpdGVUbyhvdXRwdXQsIF9tYXBf
bWFwSW50MzJJbnQzMl9jb2RlYyk7Ci0gICAgICBtYXBJbnQ2NEludDY0Xy5Xcml0ZVRvKG91dHB1
dCwgX21hcF9tYXBJbnQ2NEludDY0X2NvZGVjKTsKLSAgICAgIG1hcFVpbnQzMlVpbnQzMl8uV3Jp
dGVUbyhvdXRwdXQsIF9tYXBfbWFwVWludDMyVWludDMyX2NvZGVjKTsKLSAgICAgIG1hcFVpbnQ2
NFVpbnQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwVWludDY0VWludDY0X2NvZGVjKTsKLSAg
ICAgIG1hcFNpbnQzMlNpbnQzMl8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwU2ludDMyU2ludDMy
X2NvZGVjKTsKLSAgICAgIG1hcFNpbnQ2NFNpbnQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFw
U2ludDY0U2ludDY0X2NvZGVjKTsKLSAgICAgIG1hcEZpeGVkMzJGaXhlZDMyXy5Xcml0ZVRvKG91
dHB1dCwgX21hcF9tYXBGaXhlZDMyRml4ZWQzMl9jb2RlYyk7Ci0gICAgICBtYXBGaXhlZDY0Rml4
ZWQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwRml4ZWQ2NEZpeGVkNjRfY29kZWMpOwotICAg
ICAgbWFwU2ZpeGVkMzJTZml4ZWQzMl8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwU2ZpeGVkMzJT
Zml4ZWQzMl9jb2RlYyk7Ci0gICAgICBtYXBTZml4ZWQ2NFNmaXhlZDY0Xy5Xcml0ZVRvKG91dHB1
dCwgX21hcF9tYXBTZml4ZWQ2NFNmaXhlZDY0X2NvZGVjKTsKLSAgICAgIG1hcEludDMyRmxvYXRf
LldyaXRlVG8ob3V0cHV0LCBfbWFwX21hcEludDMyRmxvYXRfY29kZWMpOwotICAgICAgbWFwSW50
MzJEb3VibGVfLldyaXRlVG8ob3V0cHV0LCBfbWFwX21hcEludDMyRG91YmxlX2NvZGVjKTsKLSAg
ICAgIG1hcEJvb2xCb29sXy5Xcml0ZVRvKG91dHB1dCwgX21hcF9tYXBCb29sQm9vbF9jb2RlYyk7
Ci0gICAgICBtYXBTdHJpbmdTdHJpbmdfLldyaXRlVG8ob3V0cHV0LCBfbWFwX21hcFN0cmluZ1N0
cmluZ19jb2RlYyk7Ci0gICAgICBtYXBTdHJpbmdCeXRlc18uV3JpdGVUbyhvdXRwdXQsIF9tYXBf
bWFwU3RyaW5nQnl0ZXNfY29kZWMpOwotICAgICAgbWFwU3RyaW5nTmVzdGVkTWVzc2FnZV8uV3Jp
dGVUbyhvdXRwdXQsIF9tYXBfbWFwU3RyaW5nTmVzdGVkTWVzc2FnZV9jb2RlYyk7Ci0gICAgICBt
YXBTdHJpbmdGb3JlaWduTWVzc2FnZV8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwU3RyaW5nRm9y
ZWlnbk1lc3NhZ2VfY29kZWMpOwotICAgICAgbWFwU3RyaW5nTmVzdGVkRW51bV8uV3JpdGVUbyhv
dXRwdXQsIF9tYXBfbWFwU3RyaW5nTmVzdGVkRW51bV9jb2RlYyk7Ci0gICAgICBtYXBTdHJpbmdG
b3JlaWduRW51bV8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwU3RyaW5nRm9yZWlnbkVudW1fY29k
ZWMpOwotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9u
ZW9mVWludDMyKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygyNDgsIDYpOwotICAgICAg
ICBvdXRwdXQuV3JpdGVVSW50MzIoT25lb2ZVaW50MzIpOwotICAgICAgfQotICAgICAgaWYgKG9u
ZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mTmVzdGVkTWVzc2FnZSkg
ewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTMwLCA3KTsKLSAgICAgICAgb3V0cHV0Lldy
aXRlTWVzc2FnZShPbmVvZk5lc3RlZE1lc3NhZ2UpOwotICAgICAgfQotICAgICAgaWYgKG9uZW9m
RmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mU3RyaW5nKSB7Ci0gICAgICAg
IG91dHB1dC5Xcml0ZVJhd1RhZygxMzgsIDcpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmco
T25lb2ZTdHJpbmcpOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVv
ZkZpZWxkT25lb2ZDYXNlLk9uZW9mQnl0ZXMpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFn
KDE0NiwgNyk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUJ5dGVzKE9uZW9mQnl0ZXMpOwotICAgICAg
fQotICAgICAgaWYgKG9wdGlvbmFsQm9vbFdyYXBwZXJfICE9IG51bGwpIHsKLSAgICAgICAgX3Np
bmdsZV9vcHRpb25hbEJvb2xXcmFwcGVyX2NvZGVjLldyaXRlVGFnQW5kVmFsdWUob3V0cHV0LCBP
cHRpb25hbEJvb2xXcmFwcGVyKTsKLSAgICAgIH0KLSAgICAgIGlmIChvcHRpb25hbEludDMyV3Jh
cHBlcl8gIT0gbnVsbCkgewotICAgICAgICBfc2luZ2xlX29wdGlvbmFsSW50MzJXcmFwcGVyX2Nv
ZGVjLldyaXRlVGFnQW5kVmFsdWUob3V0cHV0LCBPcHRpb25hbEludDMyV3JhcHBlcik7Ci0gICAg
ICB9Ci0gICAgICBpZiAob3B0aW9uYWxJbnQ2NFdyYXBwZXJfICE9IG51bGwpIHsKLSAgICAgICAg
X3NpbmdsZV9vcHRpb25hbEludDY0V3JhcHBlcl9jb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1
dCwgT3B0aW9uYWxJbnQ2NFdyYXBwZXIpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsVWlu
dDMyV3JhcHBlcl8gIT0gbnVsbCkgewotICAgICAgICBfc2luZ2xlX29wdGlvbmFsVWludDMyV3Jh
cHBlcl9jb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1dCwgT3B0aW9uYWxVaW50MzJXcmFwcGVy
KTsKLSAgICAgIH0KLSAgICAgIGlmIChvcHRpb25hbFVpbnQ2NFdyYXBwZXJfICE9IG51bGwpIHsK
LSAgICAgICAgX3NpbmdsZV9vcHRpb25hbFVpbnQ2NFdyYXBwZXJfY29kZWMuV3JpdGVUYWdBbmRW
YWx1ZShvdXRwdXQsIE9wdGlvbmFsVWludDY0V3JhcHBlcik7Ci0gICAgICB9Ci0gICAgICBpZiAo
b3B0aW9uYWxGbG9hdFdyYXBwZXJfICE9IG51bGwpIHsKLSAgICAgICAgX3NpbmdsZV9vcHRpb25h
bEZsb2F0V3JhcHBlcl9jb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1dCwgT3B0aW9uYWxGbG9h
dFdyYXBwZXIpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsRG91YmxlV3JhcHBlcl8gIT0g
bnVsbCkgewotICAgICAgICBfc2luZ2xlX29wdGlvbmFsRG91YmxlV3JhcHBlcl9jb2RlYy5Xcml0
ZVRhZ0FuZFZhbHVlKG91dHB1dCwgT3B0aW9uYWxEb3VibGVXcmFwcGVyKTsKLSAgICAgIH0KLSAg
ICAgIGlmIChvcHRpb25hbFN0cmluZ1dyYXBwZXJfICE9IG51bGwpIHsKLSAgICAgICAgX3Npbmds
ZV9vcHRpb25hbFN0cmluZ1dyYXBwZXJfY29kZWMuV3JpdGVUYWdBbmRWYWx1ZShvdXRwdXQsIE9w
dGlvbmFsU3RyaW5nV3JhcHBlcik7Ci0gICAgICB9Ci0gICAgICBpZiAob3B0aW9uYWxCeXRlc1dy
YXBwZXJfICE9IG51bGwpIHsKLSAgICAgICAgX3NpbmdsZV9vcHRpb25hbEJ5dGVzV3JhcHBlcl9j
b2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1dCwgT3B0aW9uYWxCeXRlc1dyYXBwZXIpOwotICAg
ICAgfQotICAgICAgcmVwZWF0ZWRCb29sV3JhcHBlcl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRl
ZF9yZXBlYXRlZEJvb2xXcmFwcGVyX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkSW50MzJXcmFwcGVy
Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkSW50MzJXcmFwcGVyX2NvZGVjKTsK
LSAgICAgIHJlcGVhdGVkSW50NjRXcmFwcGVyXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3Jl
cGVhdGVkSW50NjRXcmFwcGVyX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkVWludDMyV3JhcHBlcl8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFVpbnQzMldyYXBwZXJfY29kZWMpOwot
ICAgICAgcmVwZWF0ZWRVaW50NjRXcmFwcGVyXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3Jl
cGVhdGVkVWludDY0V3JhcHBlcl9jb2RlYyk7Ci0gICAgICByZXBlYXRlZEZsb2F0V3JhcHBlcl8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZEZsb2F0V3JhcHBlcl9jb2RlYyk7Ci0g
ICAgICByZXBlYXRlZERvdWJsZVdyYXBwZXJfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVw
ZWF0ZWREb3VibGVXcmFwcGVyX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkU3RyaW5nV3JhcHBlcl8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFN0cmluZ1dyYXBwZXJfY29kZWMpOwot
ICAgICAgcmVwZWF0ZWRCeXRlc1dyYXBwZXJfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVw
ZWF0ZWRCeXRlc1dyYXBwZXJfY29kZWMpOwotICAgICAgaWYgKG9wdGlvbmFsRHVyYXRpb25fICE9
IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDIzNCwgMTgpOwotICAgICAgICBv
dXRwdXQuV3JpdGVNZXNzYWdlKE9wdGlvbmFsRHVyYXRpb24pOwotICAgICAgfQotICAgICAgaWYg
KG9wdGlvbmFsVGltZXN0YW1wXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1Rh
ZygyNDIsIDE4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShPcHRpb25hbFRpbWVzdGFt
cCk7Ci0gICAgICB9Ci0gICAgICBpZiAob3B0aW9uYWxGaWVsZE1hc2tfICE9IG51bGwpIHsKLSAg
ICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDI1MCwgMTgpOwotICAgICAgICBvdXRwdXQuV3JpdGVN
ZXNzYWdlKE9wdGlvbmFsRmllbGRNYXNrKTsKLSAgICAgIH0KLSAgICAgIGlmIChvcHRpb25hbFN0
cnVjdF8gIT0gbnVsbCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTMwLCAxOSk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoT3B0aW9uYWxTdHJ1Y3QpOwotICAgICAgfQotICAg
ICAgaWYgKG9wdGlvbmFsQW55XyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1Rh
ZygxMzgsIDE5KTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShPcHRpb25hbEFueSk7Ci0g
ICAgICB9Ci0gICAgICBpZiAob3B0aW9uYWxWYWx1ZV8gIT0gbnVsbCkgewotICAgICAgICBvdXRw
dXQuV3JpdGVSYXdUYWcoMTQ2LCAxOSk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoT3B0
aW9uYWxWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICByZXBlYXRlZER1cmF0aW9uXy5Xcml0ZVRvKG91
dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkRHVyYXRpb25fY29kZWMpOwotICAgICAgcmVwZWF0ZWRU
aW1lc3RhbXBfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRUaW1lc3RhbXBfY29k
ZWMpOwotICAgICAgcmVwZWF0ZWRGaWVsZG1hc2tfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRf
cmVwZWF0ZWRGaWVsZG1hc2tfY29kZWMpOwotICAgICAgcmVwZWF0ZWRBbnlfLldyaXRlVG8ob3V0
cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRBbnlfY29kZWMpOwotICAgICAgcmVwZWF0ZWRWYWx1ZV8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFZhbHVlX2NvZGVjKTsKLSAgICAgIHJl
cGVhdGVkU3RydWN0Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkU3RydWN0X2Nv
ZGVjKTsKLSAgICAgIGlmIChGaWVsZG5hbWUxICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRl
UmF3VGFnKDEzNiwgMjUpOwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQzMihGaWVsZG5hbWUxKTsK
LSAgICAgIH0KLSAgICAgIGlmIChGaWVsZE5hbWUyICE9IDApIHsKLSAgICAgICAgb3V0cHV0Lldy
aXRlUmF3VGFnKDE0NCwgMjUpOwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQzMihGaWVsZE5hbWUy
KTsKLSAgICAgIH0KLSAgICAgIGlmIChGaWVsZE5hbWUzICE9IDApIHsKLSAgICAgICAgb3V0cHV0
LldyaXRlUmF3VGFnKDE1MiwgMjUpOwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQzMihGaWVsZE5h
bWUzKTsKLSAgICAgIH0KLSAgICAgIGlmIChGaWVsZE5hbWU0ICE9IDApIHsKLSAgICAgICAgb3V0
cHV0LldyaXRlUmF3VGFnKDE2MCwgMjUpOwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQzMihGaWVs
ZE5hbWU0KTsKLSAgICAgIH0KLSAgICAgIGlmIChGaWVsZDBOYW1lNSAhPSAwKSB7Ci0gICAgICAg
IG91dHB1dC5Xcml0ZVJhd1RhZygxNjgsIDI1KTsKLSAgICAgICAgb3V0cHV0LldyaXRlSW50MzIo
RmllbGQwTmFtZTUpOwotICAgICAgfQotICAgICAgaWYgKEZpZWxkME5hbWU2ICE9IDApIHsKLSAg
ICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE3NiwgMjUpOwotICAgICAgICBvdXRwdXQuV3JpdGVJ
bnQzMihGaWVsZDBOYW1lNik7Ci0gICAgICB9Ci0gICAgICBpZiAoRmllbGROYW1lNyAhPSAwKSB7
Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxODQsIDI1KTsKLSAgICAgICAgb3V0cHV0Lldy
aXRlSW50MzIoRmllbGROYW1lNyk7Ci0gICAgICB9Ci0gICAgICBpZiAoRmllbGROYW1lOCAhPSAw
KSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxOTIsIDI1KTsKLSAgICAgICAgb3V0cHV0
LldyaXRlSW50MzIoRmllbGROYW1lOCk7Ci0gICAgICB9Ci0gICAgICBpZiAoRmllbGROYW1lOSAh
PSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygyMDAsIDI1KTsKLSAgICAgICAgb3V0
cHV0LldyaXRlSW50MzIoRmllbGROYW1lOSk7Ci0gICAgICB9Ci0gICAgICBpZiAoRmllbGROYW1l
MTAgIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMjA4LCAyNSk7Ci0gICAgICAg
IG91dHB1dC5Xcml0ZUludDMyKEZpZWxkTmFtZTEwKTsKLSAgICAgIH0KLSAgICAgIGlmIChGSUVM
RE5BTUUxMSAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygyMTYsIDI1KTsKLSAg
ICAgICAgb3V0cHV0LldyaXRlSW50MzIoRklFTEROQU1FMTEpOwotICAgICAgfQotICAgICAgaWYg
KEZJRUxETmFtZTEyICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDIyNCwgMjUp
OwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQzMihGSUVMRE5hbWUxMik7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAw
OwotICAgICAgaWYgKE9wdGlvbmFsSW50MzIgIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShPcHRpb25hbEludDMyKTsKLSAg
ICAgIH0KLSAgICAgIGlmIChPcHRpb25hbEludDY0ICE9IDBMKSB7Ci0gICAgICAgIHNpemUgKz0g
MSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlSW50NjRTaXplKE9wdGlvbmFsSW50NjQp
OwotICAgICAgfQotICAgICAgaWYgKE9wdGlvbmFsVWludDMyICE9IDApIHsKLSAgICAgICAgc2l6
ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVVSW50MzJTaXplKE9wdGlvbmFs
VWludDMyKTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbFVpbnQ2NCAhPSAwVUwpIHsKLSAg
ICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVVSW50NjRTaXpl
KE9wdGlvbmFsVWludDY0KTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbFNpbnQzMiAhPSAw
KSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU0lu
dDMyU2l6ZShPcHRpb25hbFNpbnQzMik7Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9uYWxTaW50
NjQgIT0gMEwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNv
bXB1dGVTSW50NjRTaXplKE9wdGlvbmFsU2ludDY0KTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRp
b25hbEZpeGVkMzIgIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyA0OwotICAgICAgfQotICAg
ICAgaWYgKE9wdGlvbmFsRml4ZWQ2NCAhPSAwVUwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgODsK
LSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbFNmaXhlZDMyICE9IDApIHsKLSAgICAgICAgc2l6
ZSArPSAxICsgNDsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbFNmaXhlZDY0ICE9IDBMKSB7
Ci0gICAgICAgIHNpemUgKz0gMSArIDg7Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9uYWxGbG9h
dCAhPSAwRikgewotICAgICAgICBzaXplICs9IDEgKyA0OwotICAgICAgfQotICAgICAgaWYgKE9w
dGlvbmFsRG91YmxlICE9IDBEKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDg7Ci0gICAgICB9Ci0g
ICAgICBpZiAoT3B0aW9uYWxCb29sICE9IGZhbHNlKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDE7
Ci0gICAgICB9Ci0gICAgICBpZiAoT3B0aW9uYWxTdHJpbmcuTGVuZ3RoICE9IDApIHsKLSAgICAg
ICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKE9w
dGlvbmFsU3RyaW5nKTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbEJ5dGVzLkxlbmd0aCAh
PSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRl
Qnl0ZXNTaXplKE9wdGlvbmFsQnl0ZXMpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsTmVz
dGVkTWVzc2FnZV8gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDIgKyBwYjo6Q29kZWRPdXRw
dXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKE9wdGlvbmFsTmVzdGVkTWVzc2FnZSk7Ci0gICAg
ICB9Ci0gICAgICBpZiAob3B0aW9uYWxGb3JlaWduTWVzc2FnZV8gIT0gbnVsbCkgewotICAgICAg
ICBzaXplICs9IDIgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKE9w
dGlvbmFsRm9yZWlnbk1lc3NhZ2UpOwotICAgICAgfQotICAgICAgaWYgKE9wdGlvbmFsTmVzdGVk
RW51bSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5D
b21wdXRlRW51bVNpemUoKGludCkgT3B0aW9uYWxOZXN0ZWRFbnVtKTsKLSAgICAgIH0KLSAgICAg
IGlmIChPcHRpb25hbEZvcmVpZ25FbnVtICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6
OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBPcHRpb25hbEZvcmVpZ25F
bnVtKTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbFN0cmluZ1BpZWNlLkxlbmd0aCAhPSAw
KSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3Ry
aW5nU2l6ZShPcHRpb25hbFN0cmluZ1BpZWNlKTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25h
bENvcmQuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6OkNvZGVkT3V0cHV0
U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKE9wdGlvbmFsQ29yZCk7Ci0gICAgICB9Ci0gICAgICBp
ZiAocmVjdXJzaXZlTWVzc2FnZV8gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDIgKyBwYjo6
Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKFJlY3Vyc2l2ZU1lc3NhZ2UpOwot
ICAgICAgfQotICAgICAgc2l6ZSArPSByZXBlYXRlZEludDMyXy5DYWxjdWxhdGVTaXplKF9yZXBl
YXRlZF9yZXBlYXRlZEludDMyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVwZWF0ZWRJbnQ2NF8u
Q2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRJbnQ2NF9jb2RlYyk7Ci0gICAgICBzaXpl
ICs9IHJlcGVhdGVkVWludDMyXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZFVpbnQz
Ml9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkVWludDY0Xy5DYWxjdWxhdGVTaXplKF9y
ZXBlYXRlZF9yZXBlYXRlZFVpbnQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkU2lu
dDMyXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZFNpbnQzMl9jb2RlYyk7Ci0gICAg
ICBzaXplICs9IHJlcGVhdGVkU2ludDY0Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRl
ZFNpbnQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkRml4ZWQzMl8uQ2FsY3VsYXRl
U2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRGaXhlZDMyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVw
ZWF0ZWRGaXhlZDY0Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZEZpeGVkNjRfY29k
ZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZFNmaXhlZDMyXy5DYWxjdWxhdGVTaXplKF9yZXBl
YXRlZF9yZXBlYXRlZFNmaXhlZDMyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVwZWF0ZWRTZml4
ZWQ2NF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRTZml4ZWQ2NF9jb2RlYyk7Ci0g
ICAgICBzaXplICs9IHJlcGVhdGVkRmxvYXRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVh
dGVkRmxvYXRfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZERvdWJsZV8uQ2FsY3VsYXRl
U2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWREb3VibGVfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBl
YXRlZEJvb2xfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkQm9vbF9jb2RlYyk7Ci0g
ICAgICBzaXplICs9IHJlcGVhdGVkU3RyaW5nXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBl
YXRlZFN0cmluZ19jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkQnl0ZXNfLkNhbGN1bGF0
ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkQnl0ZXNfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBl
YXRlZE5lc3RlZE1lc3NhZ2VfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkTmVzdGVk
TWVzc2FnZV9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VfLkNh
bGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkRm9yZWlnbk1lc3NhZ2VfY29kZWMpOwotICAg
ICAgc2l6ZSArPSByZXBlYXRlZE5lc3RlZEVudW1fLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3Jl
cGVhdGVkTmVzdGVkRW51bV9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkRm9yZWlnbkVu
dW1fLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkRm9yZWlnbkVudW1fY29kZWMpOwot
ICAgICAgc2l6ZSArPSByZXBlYXRlZFN0cmluZ1BpZWNlXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRl
ZF9yZXBlYXRlZFN0cmluZ1BpZWNlX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVwZWF0ZWRDb3Jk
Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZENvcmRfY29kZWMpOwotICAgICAgc2l6
ZSArPSBtYXBJbnQzMkludDMyXy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwSW50MzJJbnQzMl9jb2Rl
Yyk7Ci0gICAgICBzaXplICs9IG1hcEludDY0SW50NjRfLkNhbGN1bGF0ZVNpemUoX21hcF9tYXBJ
bnQ2NEludDY0X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFwVWludDMyVWludDMyXy5DYWxjdWxh
dGVTaXplKF9tYXBfbWFwVWludDMyVWludDMyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFwVWlu
dDY0VWludDY0Xy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwVWludDY0VWludDY0X2NvZGVjKTsKLSAg
ICAgIHNpemUgKz0gbWFwU2ludDMyU2ludDMyXy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwU2ludDMy
U2ludDMyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFwU2ludDY0U2ludDY0Xy5DYWxjdWxhdGVT
aXplKF9tYXBfbWFwU2ludDY0U2ludDY0X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFwRml4ZWQz
MkZpeGVkMzJfLkNhbGN1bGF0ZVNpemUoX21hcF9tYXBGaXhlZDMyRml4ZWQzMl9jb2RlYyk7Ci0g
ICAgICBzaXplICs9IG1hcEZpeGVkNjRGaXhlZDY0Xy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwRml4
ZWQ2NEZpeGVkNjRfY29kZWMpOwotICAgICAgc2l6ZSArPSBtYXBTZml4ZWQzMlNmaXhlZDMyXy5D
YWxjdWxhdGVTaXplKF9tYXBfbWFwU2ZpeGVkMzJTZml4ZWQzMl9jb2RlYyk7Ci0gICAgICBzaXpl
ICs9IG1hcFNmaXhlZDY0U2ZpeGVkNjRfLkNhbGN1bGF0ZVNpemUoX21hcF9tYXBTZml4ZWQ2NFNm
aXhlZDY0X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFwSW50MzJGbG9hdF8uQ2FsY3VsYXRlU2l6
ZShfbWFwX21hcEludDMyRmxvYXRfY29kZWMpOwotICAgICAgc2l6ZSArPSBtYXBJbnQzMkRvdWJs
ZV8uQ2FsY3VsYXRlU2l6ZShfbWFwX21hcEludDMyRG91YmxlX2NvZGVjKTsKLSAgICAgIHNpemUg
Kz0gbWFwQm9vbEJvb2xfLkNhbGN1bGF0ZVNpemUoX21hcF9tYXBCb29sQm9vbF9jb2RlYyk7Ci0g
ICAgICBzaXplICs9IG1hcFN0cmluZ1N0cmluZ18uQ2FsY3VsYXRlU2l6ZShfbWFwX21hcFN0cmlu
Z1N0cmluZ19jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcFN0cmluZ0J5dGVzXy5DYWxjdWxhdGVT
aXplKF9tYXBfbWFwU3RyaW5nQnl0ZXNfY29kZWMpOwotICAgICAgc2l6ZSArPSBtYXBTdHJpbmdO
ZXN0ZWRNZXNzYWdlXy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwU3RyaW5nTmVzdGVkTWVzc2FnZV9j
b2RlYyk7Ci0gICAgICBzaXplICs9IG1hcFN0cmluZ0ZvcmVpZ25NZXNzYWdlXy5DYWxjdWxhdGVT
aXplKF9tYXBfbWFwU3RyaW5nRm9yZWlnbk1lc3NhZ2VfY29kZWMpOwotICAgICAgc2l6ZSArPSBt
YXBTdHJpbmdOZXN0ZWRFbnVtXy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwU3RyaW5nTmVzdGVkRW51
bV9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcFN0cmluZ0ZvcmVpZ25FbnVtXy5DYWxjdWxhdGVT
aXplKF9tYXBfbWFwU3RyaW5nRm9yZWlnbkVudW1fY29kZWMpOwotICAgICAgaWYgKG9uZW9mRmll
bGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mVWludDMyKSB7Ci0gICAgICAgIHNp
emUgKz0gMiArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlVUludDMyU2l6ZShPbmVvZlVp
bnQzMik7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRP
bmVvZkNhc2UuT25lb2ZOZXN0ZWRNZXNzYWdlKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpD
b2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoT25lb2ZOZXN0ZWRNZXNzYWdlKTsK
LSAgICAgIH0KLSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2Fz
ZS5PbmVvZlN0cmluZykgewotICAgICAgICBzaXplICs9IDIgKyBwYjo6Q29kZWRPdXRwdXRTdHJl
YW0uQ29tcHV0ZVN0cmluZ1NpemUoT25lb2ZTdHJpbmcpOwotICAgICAgfQotICAgICAgaWYgKG9u
ZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mQnl0ZXMpIHsKLSAgICAg
ICAgc2l6ZSArPSAyICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVCeXRlc1NpemUoT25l
b2ZCeXRlcyk7Ci0gICAgICB9Ci0gICAgICBpZiAob3B0aW9uYWxCb29sV3JhcHBlcl8gIT0gbnVs
bCkgewotICAgICAgICBzaXplICs9IF9zaW5nbGVfb3B0aW9uYWxCb29sV3JhcHBlcl9jb2RlYy5D
YWxjdWxhdGVTaXplV2l0aFRhZyhPcHRpb25hbEJvb2xXcmFwcGVyKTsKLSAgICAgIH0KLSAgICAg
IGlmIChvcHRpb25hbEludDMyV3JhcHBlcl8gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IF9z
aW5nbGVfb3B0aW9uYWxJbnQzMldyYXBwZXJfY29kZWMuQ2FsY3VsYXRlU2l6ZVdpdGhUYWcoT3B0
aW9uYWxJbnQzMldyYXBwZXIpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsSW50NjRXcmFw
cGVyXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gX3NpbmdsZV9vcHRpb25hbEludDY0V3Jh
cHBlcl9jb2RlYy5DYWxjdWxhdGVTaXplV2l0aFRhZyhPcHRpb25hbEludDY0V3JhcHBlcik7Ci0g
ICAgICB9Ci0gICAgICBpZiAob3B0aW9uYWxVaW50MzJXcmFwcGVyXyAhPSBudWxsKSB7Ci0gICAg
ICAgIHNpemUgKz0gX3NpbmdsZV9vcHRpb25hbFVpbnQzMldyYXBwZXJfY29kZWMuQ2FsY3VsYXRl
U2l6ZVdpdGhUYWcoT3B0aW9uYWxVaW50MzJXcmFwcGVyKTsKLSAgICAgIH0KLSAgICAgIGlmIChv
cHRpb25hbFVpbnQ2NFdyYXBwZXJfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSBfc2luZ2xl
X29wdGlvbmFsVWludDY0V3JhcHBlcl9jb2RlYy5DYWxjdWxhdGVTaXplV2l0aFRhZyhPcHRpb25h
bFVpbnQ2NFdyYXBwZXIpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsRmxvYXRXcmFwcGVy
XyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gX3NpbmdsZV9vcHRpb25hbEZsb2F0V3JhcHBl
cl9jb2RlYy5DYWxjdWxhdGVTaXplV2l0aFRhZyhPcHRpb25hbEZsb2F0V3JhcHBlcik7Ci0gICAg
ICB9Ci0gICAgICBpZiAob3B0aW9uYWxEb3VibGVXcmFwcGVyXyAhPSBudWxsKSB7Ci0gICAgICAg
IHNpemUgKz0gX3NpbmdsZV9vcHRpb25hbERvdWJsZVdyYXBwZXJfY29kZWMuQ2FsY3VsYXRlU2l6
ZVdpdGhUYWcoT3B0aW9uYWxEb3VibGVXcmFwcGVyKTsKLSAgICAgIH0KLSAgICAgIGlmIChvcHRp
b25hbFN0cmluZ1dyYXBwZXJfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSBfc2luZ2xlX29w
dGlvbmFsU3RyaW5nV3JhcHBlcl9jb2RlYy5DYWxjdWxhdGVTaXplV2l0aFRhZyhPcHRpb25hbFN0
cmluZ1dyYXBwZXIpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsQnl0ZXNXcmFwcGVyXyAh
PSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gX3NpbmdsZV9vcHRpb25hbEJ5dGVzV3JhcHBlcl9j
b2RlYy5DYWxjdWxhdGVTaXplV2l0aFRhZyhPcHRpb25hbEJ5dGVzV3JhcHBlcik7Ci0gICAgICB9
Ci0gICAgICBzaXplICs9IHJlcGVhdGVkQm9vbFdyYXBwZXJfLkNhbGN1bGF0ZVNpemUoX3JlcGVh
dGVkX3JlcGVhdGVkQm9vbFdyYXBwZXJfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZElu
dDMyV3JhcHBlcl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRJbnQzMldyYXBwZXJf
Y29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZEludDY0V3JhcHBlcl8uQ2FsY3VsYXRlU2l6
ZShfcmVwZWF0ZWRfcmVwZWF0ZWRJbnQ2NFdyYXBwZXJfY29kZWMpOwotICAgICAgc2l6ZSArPSBy
ZXBlYXRlZFVpbnQzMldyYXBwZXJfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkVWlu
dDMyV3JhcHBlcl9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkVWludDY0V3JhcHBlcl8u
Q2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRVaW50NjRXcmFwcGVyX2NvZGVjKTsKLSAg
ICAgIHNpemUgKz0gcmVwZWF0ZWRGbG9hdFdyYXBwZXJfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVk
X3JlcGVhdGVkRmxvYXRXcmFwcGVyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVwZWF0ZWREb3Vi
bGVXcmFwcGVyXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZERvdWJsZVdyYXBwZXJf
Y29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZFN0cmluZ1dyYXBwZXJfLkNhbGN1bGF0ZVNp
emUoX3JlcGVhdGVkX3JlcGVhdGVkU3RyaW5nV3JhcHBlcl9jb2RlYyk7Ci0gICAgICBzaXplICs9
IHJlcGVhdGVkQnl0ZXNXcmFwcGVyXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZEJ5
dGVzV3JhcHBlcl9jb2RlYyk7Ci0gICAgICBpZiAob3B0aW9uYWxEdXJhdGlvbl8gIT0gbnVsbCkg
ewotICAgICAgICBzaXplICs9IDIgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3Nh
Z2VTaXplKE9wdGlvbmFsRHVyYXRpb24pOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsVGlt
ZXN0YW1wXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1dFN0
cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoT3B0aW9uYWxUaW1lc3RhbXApOwotICAgICAgfQotICAg
ICAgaWYgKG9wdGlvbmFsRmllbGRNYXNrXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gMiAr
IHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoT3B0aW9uYWxGaWVsZE1h
c2spOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsU3RydWN0XyAhPSBudWxsKSB7Ci0gICAg
ICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUo
T3B0aW9uYWxTdHJ1Y3QpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsQW55XyAhPSBudWxs
KSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVz
c2FnZVNpemUoT3B0aW9uYWxBbnkpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbmFsVmFsdWVf
ICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNv
bXB1dGVNZXNzYWdlU2l6ZShPcHRpb25hbFZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHNpemUgKz0g
cmVwZWF0ZWREdXJhdGlvbl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWREdXJhdGlv
bl9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkVGltZXN0YW1wXy5DYWxjdWxhdGVTaXpl
KF9yZXBlYXRlZF9yZXBlYXRlZFRpbWVzdGFtcF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVh
dGVkRmllbGRtYXNrXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZEZpZWxkbWFza19j
b2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkU3RydWN0Xy5DYWxjdWxhdGVTaXplKF9yZXBl
YXRlZF9yZXBlYXRlZFN0cnVjdF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkQW55Xy5D
YWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZEFueV9jb2RlYyk7Ci0gICAgICBzaXplICs9
IHJlcGVhdGVkVmFsdWVfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkVmFsdWVfY29k
ZWMpOwotICAgICAgaWYgKEZpZWxkbmFtZTEgIT0gMCkgewotICAgICAgICBzaXplICs9IDIgKyBw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShGaWVsZG5hbWUxKTsKLSAgICAg
IH0KLSAgICAgIGlmIChGaWVsZE5hbWUyICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6
OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoRmllbGROYW1lMik7Ci0gICAgICB9
Ci0gICAgICBpZiAoRmllbGROYW1lMyAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpD
b2RlZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEZpZWxkTmFtZTMpOwotICAgICAgfQot
ICAgICAgaWYgKEZpZWxkTmFtZTQgIT0gMCkgewotICAgICAgICBzaXplICs9IDIgKyBwYjo6Q29k
ZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShGaWVsZE5hbWU0KTsKLSAgICAgIH0KLSAg
ICAgIGlmIChGaWVsZDBOYW1lNSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2Rl
ZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEZpZWxkME5hbWU1KTsKLSAgICAgIH0KLSAg
ICAgIGlmIChGaWVsZDBOYW1lNiAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2Rl
ZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEZpZWxkME5hbWU2KTsKLSAgICAgIH0KLSAg
ICAgIGlmIChGaWVsZE5hbWU3ICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6OkNvZGVk
T3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoRmllbGROYW1lNyk7Ci0gICAgICB9Ci0gICAg
ICBpZiAoRmllbGROYW1lOCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91
dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEZpZWxkTmFtZTgpOwotICAgICAgfQotICAgICAg
aWYgKEZpZWxkTmFtZTkgIT0gMCkgewotICAgICAgICBzaXplICs9IDIgKyBwYjo6Q29kZWRPdXRw
dXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShGaWVsZE5hbWU5KTsKLSAgICAgIH0KLSAgICAgIGlm
IChGaWVsZE5hbWUxMCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1
dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEZpZWxkTmFtZTEwKTsKLSAgICAgIH0KLSAgICAgIGlm
IChGSUVMRE5BTUUxMSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1
dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEZJRUxETkFNRTExKTsKLSAgICAgIH0KLSAgICAgIGlm
IChGSUVMRE5hbWUxMiAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1
dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEZJRUxETmFtZTEyKTsKLSAgICAgIH0KLSAgICAgIHJl
dHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShUZXN0QWxsVHlw
ZXMgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5PcHRpb25hbEludDMyICE9IDApIHsKLSAgICAgICAg
T3B0aW9uYWxJbnQzMiA9IG90aGVyLk9wdGlvbmFsSW50MzI7Ci0gICAgICB9Ci0gICAgICBpZiAo
b3RoZXIuT3B0aW9uYWxJbnQ2NCAhPSAwTCkgewotICAgICAgICBPcHRpb25hbEludDY0ID0gb3Ro
ZXIuT3B0aW9uYWxJbnQ2NDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5PcHRpb25hbFVpbnQz
MiAhPSAwKSB7Ci0gICAgICAgIE9wdGlvbmFsVWludDMyID0gb3RoZXIuT3B0aW9uYWxVaW50MzI7
Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuT3B0aW9uYWxVaW50NjQgIT0gMFVMKSB7Ci0gICAg
ICAgIE9wdGlvbmFsVWludDY0ID0gb3RoZXIuT3B0aW9uYWxVaW50NjQ7Ci0gICAgICB9Ci0gICAg
ICBpZiAob3RoZXIuT3B0aW9uYWxTaW50MzIgIT0gMCkgewotICAgICAgICBPcHRpb25hbFNpbnQz
MiA9IG90aGVyLk9wdGlvbmFsU2ludDMyOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk9wdGlv
bmFsU2ludDY0ICE9IDBMKSB7Ci0gICAgICAgIE9wdGlvbmFsU2ludDY0ID0gb3RoZXIuT3B0aW9u
YWxTaW50NjQ7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuT3B0aW9uYWxGaXhlZDMyICE9IDAp
IHsKLSAgICAgICAgT3B0aW9uYWxGaXhlZDMyID0gb3RoZXIuT3B0aW9uYWxGaXhlZDMyOwotICAg
ICAgfQotICAgICAgaWYgKG90aGVyLk9wdGlvbmFsRml4ZWQ2NCAhPSAwVUwpIHsKLSAgICAgICAg
T3B0aW9uYWxGaXhlZDY0ID0gb3RoZXIuT3B0aW9uYWxGaXhlZDY0OwotICAgICAgfQotICAgICAg
aWYgKG90aGVyLk9wdGlvbmFsU2ZpeGVkMzIgIT0gMCkgewotICAgICAgICBPcHRpb25hbFNmaXhl
ZDMyID0gb3RoZXIuT3B0aW9uYWxTZml4ZWQzMjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5P
cHRpb25hbFNmaXhlZDY0ICE9IDBMKSB7Ci0gICAgICAgIE9wdGlvbmFsU2ZpeGVkNjQgPSBvdGhl
ci5PcHRpb25hbFNmaXhlZDY0OwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk9wdGlvbmFsRmxv
YXQgIT0gMEYpIHsKLSAgICAgICAgT3B0aW9uYWxGbG9hdCA9IG90aGVyLk9wdGlvbmFsRmxvYXQ7
Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuT3B0aW9uYWxEb3VibGUgIT0gMEQpIHsKLSAgICAg
ICAgT3B0aW9uYWxEb3VibGUgPSBvdGhlci5PcHRpb25hbERvdWJsZTsKLSAgICAgIH0KLSAgICAg
IGlmIChvdGhlci5PcHRpb25hbEJvb2wgIT0gZmFsc2UpIHsKLSAgICAgICAgT3B0aW9uYWxCb29s
ID0gb3RoZXIuT3B0aW9uYWxCb29sOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk9wdGlvbmFs
U3RyaW5nLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIE9wdGlvbmFsU3RyaW5nID0gb3RoZXIuT3B0
aW9uYWxTdHJpbmc7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuT3B0aW9uYWxCeXRlcy5MZW5n
dGggIT0gMCkgewotICAgICAgICBPcHRpb25hbEJ5dGVzID0gb3RoZXIuT3B0aW9uYWxCeXRlczsK
LSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5vcHRpb25hbE5lc3RlZE1lc3NhZ2VfICE9IG51bGwp
IHsKLSAgICAgICAgaWYgKG9wdGlvbmFsTmVzdGVkTWVzc2FnZV8gPT0gbnVsbCkgewotICAgICAg
ICAgIG9wdGlvbmFsTmVzdGVkTWVzc2FnZV8gPSBuZXcgZ2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0
QWxsVHlwZXMuVHlwZXMuTmVzdGVkTWVzc2FnZSgpOwotICAgICAgICB9Ci0gICAgICAgIE9wdGlv
bmFsTmVzdGVkTWVzc2FnZS5NZXJnZUZyb20ob3RoZXIuT3B0aW9uYWxOZXN0ZWRNZXNzYWdlKTsK
LSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5vcHRpb25hbEZvcmVpZ25NZXNzYWdlXyAhPSBudWxs
KSB7Ci0gICAgICAgIGlmIChvcHRpb25hbEZvcmVpZ25NZXNzYWdlXyA9PSBudWxsKSB7Ci0gICAg
ICAgICAgb3B0aW9uYWxGb3JlaWduTWVzc2FnZV8gPSBuZXcgZ2xvYmFsOjpDb25mb3JtYW5jZS5G
b3JlaWduTWVzc2FnZSgpOwotICAgICAgICB9Ci0gICAgICAgIE9wdGlvbmFsRm9yZWlnbk1lc3Nh
Z2UuTWVyZ2VGcm9tKG90aGVyLk9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UpOwotICAgICAgfQotICAg
ICAgaWYgKG90aGVyLk9wdGlvbmFsTmVzdGVkRW51bSAhPSAwKSB7Ci0gICAgICAgIE9wdGlvbmFs
TmVzdGVkRW51bSA9IG90aGVyLk9wdGlvbmFsTmVzdGVkRW51bTsKLSAgICAgIH0KLSAgICAgIGlm
IChvdGhlci5PcHRpb25hbEZvcmVpZ25FbnVtICE9IDApIHsKLSAgICAgICAgT3B0aW9uYWxGb3Jl
aWduRW51bSA9IG90aGVyLk9wdGlvbmFsRm9yZWlnbkVudW07Ci0gICAgICB9Ci0gICAgICBpZiAo
b3RoZXIuT3B0aW9uYWxTdHJpbmdQaWVjZS5MZW5ndGggIT0gMCkgewotICAgICAgICBPcHRpb25h
bFN0cmluZ1BpZWNlID0gb3RoZXIuT3B0aW9uYWxTdHJpbmdQaWVjZTsKLSAgICAgIH0KLSAgICAg
IGlmIChvdGhlci5PcHRpb25hbENvcmQuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgT3B0aW9uYWxD
b3JkID0gb3RoZXIuT3B0aW9uYWxDb3JkOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLnJlY3Vy
c2l2ZU1lc3NhZ2VfICE9IG51bGwpIHsKLSAgICAgICAgaWYgKHJlY3Vyc2l2ZU1lc3NhZ2VfID09
IG51bGwpIHsKLSAgICAgICAgICByZWN1cnNpdmVNZXNzYWdlXyA9IG5ldyBnbG9iYWw6OkNvbmZv
cm1hbmNlLlRlc3RBbGxUeXBlcygpOwotICAgICAgICB9Ci0gICAgICAgIFJlY3Vyc2l2ZU1lc3Nh
Z2UuTWVyZ2VGcm9tKG90aGVyLlJlY3Vyc2l2ZU1lc3NhZ2UpOwotICAgICAgfQotICAgICAgcmVw
ZWF0ZWRJbnQzMl8uQWRkKG90aGVyLnJlcGVhdGVkSW50MzJfKTsKLSAgICAgIHJlcGVhdGVkSW50
NjRfLkFkZChvdGhlci5yZXBlYXRlZEludDY0Xyk7Ci0gICAgICByZXBlYXRlZFVpbnQzMl8uQWRk
KG90aGVyLnJlcGVhdGVkVWludDMyXyk7Ci0gICAgICByZXBlYXRlZFVpbnQ2NF8uQWRkKG90aGVy
LnJlcGVhdGVkVWludDY0Xyk7Ci0gICAgICByZXBlYXRlZFNpbnQzMl8uQWRkKG90aGVyLnJlcGVh
dGVkU2ludDMyXyk7Ci0gICAgICByZXBlYXRlZFNpbnQ2NF8uQWRkKG90aGVyLnJlcGVhdGVkU2lu
dDY0Xyk7Ci0gICAgICByZXBlYXRlZEZpeGVkMzJfLkFkZChvdGhlci5yZXBlYXRlZEZpeGVkMzJf
KTsKLSAgICAgIHJlcGVhdGVkRml4ZWQ2NF8uQWRkKG90aGVyLnJlcGVhdGVkRml4ZWQ2NF8pOwot
ICAgICAgcmVwZWF0ZWRTZml4ZWQzMl8uQWRkKG90aGVyLnJlcGVhdGVkU2ZpeGVkMzJfKTsKLSAg
ICAgIHJlcGVhdGVkU2ZpeGVkNjRfLkFkZChvdGhlci5yZXBlYXRlZFNmaXhlZDY0Xyk7Ci0gICAg
ICByZXBlYXRlZEZsb2F0Xy5BZGQob3RoZXIucmVwZWF0ZWRGbG9hdF8pOwotICAgICAgcmVwZWF0
ZWREb3VibGVfLkFkZChvdGhlci5yZXBlYXRlZERvdWJsZV8pOwotICAgICAgcmVwZWF0ZWRCb29s
Xy5BZGQob3RoZXIucmVwZWF0ZWRCb29sXyk7Ci0gICAgICByZXBlYXRlZFN0cmluZ18uQWRkKG90
aGVyLnJlcGVhdGVkU3RyaW5nXyk7Ci0gICAgICByZXBlYXRlZEJ5dGVzXy5BZGQob3RoZXIucmVw
ZWF0ZWRCeXRlc18pOwotICAgICAgcmVwZWF0ZWROZXN0ZWRNZXNzYWdlXy5BZGQob3RoZXIucmVw
ZWF0ZWROZXN0ZWRNZXNzYWdlXyk7Ci0gICAgICByZXBlYXRlZEZvcmVpZ25NZXNzYWdlXy5BZGQo
b3RoZXIucmVwZWF0ZWRGb3JlaWduTWVzc2FnZV8pOwotICAgICAgcmVwZWF0ZWROZXN0ZWRFbnVt
Xy5BZGQob3RoZXIucmVwZWF0ZWROZXN0ZWRFbnVtXyk7Ci0gICAgICByZXBlYXRlZEZvcmVpZ25F
bnVtXy5BZGQob3RoZXIucmVwZWF0ZWRGb3JlaWduRW51bV8pOwotICAgICAgcmVwZWF0ZWRTdHJp
bmdQaWVjZV8uQWRkKG90aGVyLnJlcGVhdGVkU3RyaW5nUGllY2VfKTsKLSAgICAgIHJlcGVhdGVk
Q29yZF8uQWRkKG90aGVyLnJlcGVhdGVkQ29yZF8pOwotICAgICAgbWFwSW50MzJJbnQzMl8uQWRk
KG90aGVyLm1hcEludDMySW50MzJfKTsKLSAgICAgIG1hcEludDY0SW50NjRfLkFkZChvdGhlci5t
YXBJbnQ2NEludDY0Xyk7Ci0gICAgICBtYXBVaW50MzJVaW50MzJfLkFkZChvdGhlci5tYXBVaW50
MzJVaW50MzJfKTsKLSAgICAgIG1hcFVpbnQ2NFVpbnQ2NF8uQWRkKG90aGVyLm1hcFVpbnQ2NFVp
bnQ2NF8pOwotICAgICAgbWFwU2ludDMyU2ludDMyXy5BZGQob3RoZXIubWFwU2ludDMyU2ludDMy
Xyk7Ci0gICAgICBtYXBTaW50NjRTaW50NjRfLkFkZChvdGhlci5tYXBTaW50NjRTaW50NjRfKTsK
LSAgICAgIG1hcEZpeGVkMzJGaXhlZDMyXy5BZGQob3RoZXIubWFwRml4ZWQzMkZpeGVkMzJfKTsK
LSAgICAgIG1hcEZpeGVkNjRGaXhlZDY0Xy5BZGQob3RoZXIubWFwRml4ZWQ2NEZpeGVkNjRfKTsK
LSAgICAgIG1hcFNmaXhlZDMyU2ZpeGVkMzJfLkFkZChvdGhlci5tYXBTZml4ZWQzMlNmaXhlZDMy
Xyk7Ci0gICAgICBtYXBTZml4ZWQ2NFNmaXhlZDY0Xy5BZGQob3RoZXIubWFwU2ZpeGVkNjRTZml4
ZWQ2NF8pOwotICAgICAgbWFwSW50MzJGbG9hdF8uQWRkKG90aGVyLm1hcEludDMyRmxvYXRfKTsK
LSAgICAgIG1hcEludDMyRG91YmxlXy5BZGQob3RoZXIubWFwSW50MzJEb3VibGVfKTsKLSAgICAg
IG1hcEJvb2xCb29sXy5BZGQob3RoZXIubWFwQm9vbEJvb2xfKTsKLSAgICAgIG1hcFN0cmluZ1N0
cmluZ18uQWRkKG90aGVyLm1hcFN0cmluZ1N0cmluZ18pOwotICAgICAgbWFwU3RyaW5nQnl0ZXNf
LkFkZChvdGhlci5tYXBTdHJpbmdCeXRlc18pOwotICAgICAgbWFwU3RyaW5nTmVzdGVkTWVzc2Fn
ZV8uQWRkKG90aGVyLm1hcFN0cmluZ05lc3RlZE1lc3NhZ2VfKTsKLSAgICAgIG1hcFN0cmluZ0Zv
cmVpZ25NZXNzYWdlXy5BZGQob3RoZXIubWFwU3RyaW5nRm9yZWlnbk1lc3NhZ2VfKTsKLSAgICAg
IG1hcFN0cmluZ05lc3RlZEVudW1fLkFkZChvdGhlci5tYXBTdHJpbmdOZXN0ZWRFbnVtXyk7Ci0g
ICAgICBtYXBTdHJpbmdGb3JlaWduRW51bV8uQWRkKG90aGVyLm1hcFN0cmluZ0ZvcmVpZ25FbnVt
Xyk7Ci0gICAgICBpZiAob3RoZXIub3B0aW9uYWxCb29sV3JhcHBlcl8gIT0gbnVsbCkgewotICAg
ICAgICBpZiAob3B0aW9uYWxCb29sV3JhcHBlcl8gPT0gbnVsbCB8fCBvdGhlci5PcHRpb25hbEJv
b2xXcmFwcGVyICE9IGZhbHNlKSB7Ci0gICAgICAgICAgT3B0aW9uYWxCb29sV3JhcHBlciA9IG90
aGVyLk9wdGlvbmFsQm9vbFdyYXBwZXI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChv
dGhlci5vcHRpb25hbEludDMyV3JhcHBlcl8gIT0gbnVsbCkgewotICAgICAgICBpZiAob3B0aW9u
YWxJbnQzMldyYXBwZXJfID09IG51bGwgfHwgb3RoZXIuT3B0aW9uYWxJbnQzMldyYXBwZXIgIT0g
MCkgewotICAgICAgICAgIE9wdGlvbmFsSW50MzJXcmFwcGVyID0gb3RoZXIuT3B0aW9uYWxJbnQz
MldyYXBwZXI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5vcHRpb25hbElu
dDY0V3JhcHBlcl8gIT0gbnVsbCkgewotICAgICAgICBpZiAob3B0aW9uYWxJbnQ2NFdyYXBwZXJf
ID09IG51bGwgfHwgb3RoZXIuT3B0aW9uYWxJbnQ2NFdyYXBwZXIgIT0gMEwpIHsKLSAgICAgICAg
ICBPcHRpb25hbEludDY0V3JhcHBlciA9IG90aGVyLk9wdGlvbmFsSW50NjRXcmFwcGVyOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIub3B0aW9uYWxVaW50MzJXcmFwcGVyXyAh
PSBudWxsKSB7Ci0gICAgICAgIGlmIChvcHRpb25hbFVpbnQzMldyYXBwZXJfID09IG51bGwgfHwg
b3RoZXIuT3B0aW9uYWxVaW50MzJXcmFwcGVyICE9IDApIHsKLSAgICAgICAgICBPcHRpb25hbFVp
bnQzMldyYXBwZXIgPSBvdGhlci5PcHRpb25hbFVpbnQzMldyYXBwZXI7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICAgIGlmIChvdGhlci5vcHRpb25hbFVpbnQ2NFdyYXBwZXJfICE9IG51bGwpIHsK
LSAgICAgICAgaWYgKG9wdGlvbmFsVWludDY0V3JhcHBlcl8gPT0gbnVsbCB8fCBvdGhlci5PcHRp
b25hbFVpbnQ2NFdyYXBwZXIgIT0gMFVMKSB7Ci0gICAgICAgICAgT3B0aW9uYWxVaW50NjRXcmFw
cGVyID0gb3RoZXIuT3B0aW9uYWxVaW50NjRXcmFwcGVyOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgICBpZiAob3RoZXIub3B0aW9uYWxGbG9hdFdyYXBwZXJfICE9IG51bGwpIHsKLSAgICAgICAg
aWYgKG9wdGlvbmFsRmxvYXRXcmFwcGVyXyA9PSBudWxsIHx8IG90aGVyLk9wdGlvbmFsRmxvYXRX
cmFwcGVyICE9IDBGKSB7Ci0gICAgICAgICAgT3B0aW9uYWxGbG9hdFdyYXBwZXIgPSBvdGhlci5P
cHRpb25hbEZsb2F0V3JhcHBlcjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKG90aGVy
Lm9wdGlvbmFsRG91YmxlV3JhcHBlcl8gIT0gbnVsbCkgewotICAgICAgICBpZiAob3B0aW9uYWxE
b3VibGVXcmFwcGVyXyA9PSBudWxsIHx8IG90aGVyLk9wdGlvbmFsRG91YmxlV3JhcHBlciAhPSAw
RCkgewotICAgICAgICAgIE9wdGlvbmFsRG91YmxlV3JhcHBlciA9IG90aGVyLk9wdGlvbmFsRG91
YmxlV3JhcHBlcjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKG90aGVyLm9wdGlvbmFs
U3RyaW5nV3JhcHBlcl8gIT0gbnVsbCkgewotICAgICAgICBpZiAob3B0aW9uYWxTdHJpbmdXcmFw
cGVyXyA9PSBudWxsIHx8IG90aGVyLk9wdGlvbmFsU3RyaW5nV3JhcHBlciAhPSAiIikgewotICAg
ICAgICAgIE9wdGlvbmFsU3RyaW5nV3JhcHBlciA9IG90aGVyLk9wdGlvbmFsU3RyaW5nV3JhcHBl
cjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKG90aGVyLm9wdGlvbmFsQnl0ZXNXcmFw
cGVyXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChvcHRpb25hbEJ5dGVzV3JhcHBlcl8gPT0gbnVs
bCB8fCBvdGhlci5PcHRpb25hbEJ5dGVzV3JhcHBlciAhPSBwYjo6Qnl0ZVN0cmluZy5FbXB0eSkg
ewotICAgICAgICAgIE9wdGlvbmFsQnl0ZXNXcmFwcGVyID0gb3RoZXIuT3B0aW9uYWxCeXRlc1dy
YXBwZXI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJlcGVhdGVkQm9vbFdyYXBwZXJfLkFk
ZChvdGhlci5yZXBlYXRlZEJvb2xXcmFwcGVyXyk7Ci0gICAgICByZXBlYXRlZEludDMyV3JhcHBl
cl8uQWRkKG90aGVyLnJlcGVhdGVkSW50MzJXcmFwcGVyXyk7Ci0gICAgICByZXBlYXRlZEludDY0
V3JhcHBlcl8uQWRkKG90aGVyLnJlcGVhdGVkSW50NjRXcmFwcGVyXyk7Ci0gICAgICByZXBlYXRl
ZFVpbnQzMldyYXBwZXJfLkFkZChvdGhlci5yZXBlYXRlZFVpbnQzMldyYXBwZXJfKTsKLSAgICAg
IHJlcGVhdGVkVWludDY0V3JhcHBlcl8uQWRkKG90aGVyLnJlcGVhdGVkVWludDY0V3JhcHBlcl8p
OwotICAgICAgcmVwZWF0ZWRGbG9hdFdyYXBwZXJfLkFkZChvdGhlci5yZXBlYXRlZEZsb2F0V3Jh
cHBlcl8pOwotICAgICAgcmVwZWF0ZWREb3VibGVXcmFwcGVyXy5BZGQob3RoZXIucmVwZWF0ZWRE
b3VibGVXcmFwcGVyXyk7Ci0gICAgICByZXBlYXRlZFN0cmluZ1dyYXBwZXJfLkFkZChvdGhlci5y
ZXBlYXRlZFN0cmluZ1dyYXBwZXJfKTsKLSAgICAgIHJlcGVhdGVkQnl0ZXNXcmFwcGVyXy5BZGQo
b3RoZXIucmVwZWF0ZWRCeXRlc1dyYXBwZXJfKTsKLSAgICAgIGlmIChvdGhlci5vcHRpb25hbER1
cmF0aW9uXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChvcHRpb25hbER1cmF0aW9uXyA9PSBudWxs
KSB7Ci0gICAgICAgICAgb3B0aW9uYWxEdXJhdGlvbl8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuRHVyYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBPcHRp
b25hbER1cmF0aW9uLk1lcmdlRnJvbShvdGhlci5PcHRpb25hbER1cmF0aW9uKTsKLSAgICAgIH0K
LSAgICAgIGlmIChvdGhlci5vcHRpb25hbFRpbWVzdGFtcF8gIT0gbnVsbCkgewotICAgICAgICBp
ZiAob3B0aW9uYWxUaW1lc3RhbXBfID09IG51bGwpIHsKLSAgICAgICAgICBvcHRpb25hbFRpbWVz
dGFtcF8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVGltZXN0
YW1wKCk7Ci0gICAgICAgIH0KLSAgICAgICAgT3B0aW9uYWxUaW1lc3RhbXAuTWVyZ2VGcm9tKG90
aGVyLk9wdGlvbmFsVGltZXN0YW1wKTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5vcHRpb25h
bEZpZWxkTWFza18gIT0gbnVsbCkgewotICAgICAgICBpZiAob3B0aW9uYWxGaWVsZE1hc2tfID09
IG51bGwpIHsKLSAgICAgICAgICBvcHRpb25hbEZpZWxkTWFza18gPSBuZXcgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRmllbGRNYXNrKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgT3B0aW9uYWxGaWVsZE1hc2suTWVyZ2VGcm9tKG90aGVyLk9wdGlvbmFsRmllbGRNYXNrKTsK
LSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5vcHRpb25hbFN0cnVjdF8gIT0gbnVsbCkgewotICAg
ICAgICBpZiAob3B0aW9uYWxTdHJ1Y3RfID09IG51bGwpIHsKLSAgICAgICAgICBvcHRpb25hbFN0
cnVjdF8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU3RydWN0
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgT3B0aW9uYWxTdHJ1Y3QuTWVyZ2VGcm9tKG90aGVyLk9w
dGlvbmFsU3RydWN0KTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5vcHRpb25hbEFueV8gIT0g
bnVsbCkgewotICAgICAgICBpZiAob3B0aW9uYWxBbnlfID09IG51bGwpIHsKLSAgICAgICAgICBv
cHRpb25hbEFueV8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
QW55KCk7Ci0gICAgICAgIH0KLSAgICAgICAgT3B0aW9uYWxBbnkuTWVyZ2VGcm9tKG90aGVyLk9w
dGlvbmFsQW55KTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5vcHRpb25hbFZhbHVlXyAhPSBu
dWxsKSB7Ci0gICAgICAgIGlmIChvcHRpb25hbFZhbHVlXyA9PSBudWxsKSB7Ci0gICAgICAgICAg
b3B0aW9uYWxWYWx1ZV8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMuVmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgICBPcHRpb25hbFZhbHVlLk1lcmdlRnJvbShv
dGhlci5PcHRpb25hbFZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHJlcGVhdGVkRHVyYXRpb25fLkFk
ZChvdGhlci5yZXBlYXRlZER1cmF0aW9uXyk7Ci0gICAgICByZXBlYXRlZFRpbWVzdGFtcF8uQWRk
KG90aGVyLnJlcGVhdGVkVGltZXN0YW1wXyk7Ci0gICAgICByZXBlYXRlZEZpZWxkbWFza18uQWRk
KG90aGVyLnJlcGVhdGVkRmllbGRtYXNrXyk7Ci0gICAgICByZXBlYXRlZFN0cnVjdF8uQWRkKG90
aGVyLnJlcGVhdGVkU3RydWN0Xyk7Ci0gICAgICByZXBlYXRlZEFueV8uQWRkKG90aGVyLnJlcGVh
dGVkQW55Xyk7Ci0gICAgICByZXBlYXRlZFZhbHVlXy5BZGQob3RoZXIucmVwZWF0ZWRWYWx1ZV8p
OwotICAgICAgaWYgKG90aGVyLkZpZWxkbmFtZTEgIT0gMCkgewotICAgICAgICBGaWVsZG5hbWUx
ID0gb3RoZXIuRmllbGRuYW1lMTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5GaWVsZE5hbWUy
ICE9IDApIHsKLSAgICAgICAgRmllbGROYW1lMiA9IG90aGVyLkZpZWxkTmFtZTI7Ci0gICAgICB9
Ci0gICAgICBpZiAob3RoZXIuRmllbGROYW1lMyAhPSAwKSB7Ci0gICAgICAgIEZpZWxkTmFtZTMg
PSBvdGhlci5GaWVsZE5hbWUzOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkZpZWxkTmFtZTQg
IT0gMCkgewotICAgICAgICBGaWVsZE5hbWU0ID0gb3RoZXIuRmllbGROYW1lNDsKLSAgICAgIH0K
LSAgICAgIGlmIChvdGhlci5GaWVsZDBOYW1lNSAhPSAwKSB7Ci0gICAgICAgIEZpZWxkME5hbWU1
ID0gb3RoZXIuRmllbGQwTmFtZTU7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuRmllbGQwTmFt
ZTYgIT0gMCkgewotICAgICAgICBGaWVsZDBOYW1lNiA9IG90aGVyLkZpZWxkME5hbWU2OwotICAg
ICAgfQotICAgICAgaWYgKG90aGVyLkZpZWxkTmFtZTcgIT0gMCkgewotICAgICAgICBGaWVsZE5h
bWU3ID0gb3RoZXIuRmllbGROYW1lNzsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5GaWVsZE5h
bWU4ICE9IDApIHsKLSAgICAgICAgRmllbGROYW1lOCA9IG90aGVyLkZpZWxkTmFtZTg7Ci0gICAg
ICB9Ci0gICAgICBpZiAob3RoZXIuRmllbGROYW1lOSAhPSAwKSB7Ci0gICAgICAgIEZpZWxkTmFt
ZTkgPSBvdGhlci5GaWVsZE5hbWU5OwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkZpZWxkTmFt
ZTEwICE9IDApIHsKLSAgICAgICAgRmllbGROYW1lMTAgPSBvdGhlci5GaWVsZE5hbWUxMDsKLSAg
ICAgIH0KLSAgICAgIGlmIChvdGhlci5GSUVMRE5BTUUxMSAhPSAwKSB7Ci0gICAgICAgIEZJRUxE
TkFNRTExID0gb3RoZXIuRklFTEROQU1FMTE7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuRklF
TEROYW1lMTIgIT0gMCkgewotICAgICAgICBGSUVMRE5hbWUxMiA9IG90aGVyLkZJRUxETmFtZTEy
OwotICAgICAgfQotICAgICAgc3dpdGNoIChvdGhlci5PbmVvZkZpZWxkQ2FzZSkgewotICAgICAg
ICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZVaW50MzI6Ci0gICAgICAgICAgT25lb2ZV
aW50MzIgPSBvdGhlci5PbmVvZlVpbnQzMjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mTmVzdGVkTWVzc2FnZToKLSAgICAgICAgICBPbmVv
Zk5lc3RlZE1lc3NhZ2UgPSBvdGhlci5PbmVvZk5lc3RlZE1lc3NhZ2U7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZlN0cmluZzoKLSAgICAg
ICAgICBPbmVvZlN0cmluZyA9IG90aGVyLk9uZW9mU3RyaW5nOwotICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZCeXRlczoKLSAgICAgICAgICBP
bmVvZkJ5dGVzID0gb3RoZXIuT25lb2ZCeXRlczsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0K
LQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVh
bSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJl
YWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgODogewotICAgICAgICAgICAgT3B0aW9uYWxJbnQzMiA9IGlucHV0
LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGNhc2UgMTY6IHsKLSAgICAgICAgICAgIE9wdGlvbmFsSW50NjQgPSBpbnB1dC5SZWFkSW50NjQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI0OiB7
Ci0gICAgICAgICAgICBPcHRpb25hbFVpbnQzMiA9IGlucHV0LlJlYWRVSW50MzIoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDMyOiB7Ci0gICAgICAg
ICAgICBPcHRpb25hbFVpbnQ2NCA9IGlucHV0LlJlYWRVSW50NjQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDQwOiB7Ci0gICAgICAgICAgICBPcHRp
b25hbFNpbnQzMiA9IGlucHV0LlJlYWRTSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDQ4OiB7Ci0gICAgICAgICAgICBPcHRpb25hbFNpbnQ2
NCA9IGlucHV0LlJlYWRTSW50NjQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDYxOiB7Ci0gICAgICAgICAgICBPcHRpb25hbEZpeGVkMzIgPSBpbnB1
dC5SZWFkRml4ZWQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGNhc2UgNjU6IHsKLSAgICAgICAgICAgIE9wdGlvbmFsRml4ZWQ2NCA9IGlucHV0LlJlYWRG
aXhlZDY0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSA3NzogewotICAgICAgICAgICAgT3B0aW9uYWxTZml4ZWQzMiA9IGlucHV0LlJlYWRTRml4ZWQz
MigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgODE6
IHsKLSAgICAgICAgICAgIE9wdGlvbmFsU2ZpeGVkNjQgPSBpbnB1dC5SZWFkU0ZpeGVkNjQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDkzOiB7Ci0g
ICAgICAgICAgICBPcHRpb25hbEZsb2F0ID0gaW5wdXQuUmVhZEZsb2F0KCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA5NzogewotICAgICAgICAgICAg
T3B0aW9uYWxEb3VibGUgPSBpbnB1dC5SZWFkRG91YmxlKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxMDQ6IHsKLSAgICAgICAgICAgIE9wdGlvbmFs
Qm9vbCA9IGlucHV0LlJlYWRCb29sKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgY2FzZSAxMTQ6IHsKLSAgICAgICAgICAgIE9wdGlvbmFsU3RyaW5nID0gaW5w
dXQuUmVhZFN0cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGNhc2UgMTIyOiB7Ci0gICAgICAgICAgICBPcHRpb25hbEJ5dGVzID0gaW5wdXQuUmVhZEJ5
dGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAx
NDY6IHsKLSAgICAgICAgICAgIGlmIChvcHRpb25hbE5lc3RlZE1lc3NhZ2VfID09IG51bGwpIHsK
LSAgICAgICAgICAgICAgb3B0aW9uYWxOZXN0ZWRNZXNzYWdlXyA9IG5ldyBnbG9iYWw6OkNvbmZv
cm1hbmNlLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZShvcHRpb25hbE5lc3RlZE1lc3NhZ2VfKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE1NDogewot
ICAgICAgICAgICAgaWYgKG9wdGlvbmFsRm9yZWlnbk1lc3NhZ2VfID09IG51bGwpIHsKLSAgICAg
ICAgICAgICAgb3B0aW9uYWxGb3JlaWduTWVzc2FnZV8gPSBuZXcgZ2xvYmFsOjpDb25mb3JtYW5j
ZS5Gb3JlaWduTWVzc2FnZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVh
ZE1lc3NhZ2Uob3B0aW9uYWxGb3JlaWduTWVzc2FnZV8pOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTY4OiB7Ci0gICAgICAgICAgICBvcHRpb25hbE5l
c3RlZEVudW1fID0gKGdsb2JhbDo6Q29uZm9ybWFuY2UuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3Rl
ZEVudW0pIGlucHV0LlJlYWRFbnVtKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgY2FzZSAxNzY6IHsKLSAgICAgICAgICAgIG9wdGlvbmFsRm9yZWlnbkVudW1f
ID0gKGdsb2JhbDo6Q29uZm9ybWFuY2UuRm9yZWlnbkVudW0pIGlucHV0LlJlYWRFbnVtKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxOTQ6IHsKLSAg
ICAgICAgICAgIE9wdGlvbmFsU3RyaW5nUGllY2UgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyMDI6IHsKLSAgICAg
ICAgICAgIE9wdGlvbmFsQ29yZCA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDIxODogewotICAgICAgICAgICAgaWYg
KHJlY3Vyc2l2ZU1lc3NhZ2VfID09IG51bGwpIHsKLSAgICAgICAgICAgICAgcmVjdXJzaXZlTWVz
c2FnZV8gPSBuZXcgZ2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0QWxsVHlwZXMoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKHJlY3Vyc2l2ZU1lc3NhZ2VfKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI1MDoKLSAg
ICAgICAgICBjYXNlIDI0ODogewotICAgICAgICAgICAgcmVwZWF0ZWRJbnQzMl8uQWRkRW50cmll
c0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9yZXBlYXRlZEludDMyX2NvZGVjKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI1ODoKLSAgICAgICAgICBjYXNl
IDI1NjogewotICAgICAgICAgICAgcmVwZWF0ZWRJbnQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQs
IF9yZXBlYXRlZF9yZXBlYXRlZEludDY0X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI2NjoKLSAgICAgICAgICBjYXNlIDI2NDogewotICAg
ICAgICAgICAgcmVwZWF0ZWRVaW50MzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRf
cmVwZWF0ZWRVaW50MzJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgMjc0OgotICAgICAgICAgIGNhc2UgMjcyOiB7Ci0gICAgICAgICAgICBy
ZXBlYXRlZFVpbnQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFVp
bnQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Y2FzZSAyODI6Ci0gICAgICAgICAgY2FzZSAyODA6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkU2lu
dDMyXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkU2ludDMyX2NvZGVj
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI5MDoK
LSAgICAgICAgICBjYXNlIDI4ODogewotICAgICAgICAgICAgcmVwZWF0ZWRTaW50NjRfLkFkZEVu
dHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRTaW50NjRfY29kZWMpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjk4OgotICAgICAgICAg
IGNhc2UgMzAxOiB7Ci0gICAgICAgICAgICByZXBlYXRlZEZpeGVkMzJfLkFkZEVudHJpZXNGcm9t
KGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRGaXhlZDMyX2NvZGVjKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDMwNjoKLSAgICAgICAgICBjYXNlIDMw
NTogewotICAgICAgICAgICAgcmVwZWF0ZWRGaXhlZDY0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwg
X3JlcGVhdGVkX3JlcGVhdGVkRml4ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAzMTQ6Ci0gICAgICAgICAgY2FzZSAzMTc6IHsKLSAg
ICAgICAgICAgIHJlcGVhdGVkU2ZpeGVkMzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0
ZWRfcmVwZWF0ZWRTZml4ZWQzMl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgY2FzZSAzMjI6Ci0gICAgICAgICAgY2FzZSAzMjE6IHsKLSAgICAgICAg
ICAgIHJlcGVhdGVkU2ZpeGVkNjRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVw
ZWF0ZWRTZml4ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSAzMzA6Ci0gICAgICAgICAgY2FzZSAzMzM6IHsKLSAgICAgICAgICAgIHJl
cGVhdGVkRmxvYXRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRGbG9h
dF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSAzMzg6Ci0gICAgICAgICAgY2FzZSAzMzc6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkRG91Ymxl
Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkRG91YmxlX2NvZGVjKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM0NjoKLSAg
ICAgICAgICBjYXNlIDM0NDogewotICAgICAgICAgICAgcmVwZWF0ZWRCb29sXy5BZGRFbnRyaWVz
RnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkQm9vbF9jb2RlYyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAzNTQ6IHsKLSAgICAgICAgICAgIHJl
cGVhdGVkU3RyaW5nXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkU3Ry
aW5nX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBj
YXNlIDM2MjogewotICAgICAgICAgICAgcmVwZWF0ZWRCeXRlc18uQWRkRW50cmllc0Zyb20oaW5w
dXQsIF9yZXBlYXRlZF9yZXBlYXRlZEJ5dGVzX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM4NjogewotICAgICAgICAgICAgcmVwZWF0ZWRO
ZXN0ZWRNZXNzYWdlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkTmVz
dGVkTWVzc2FnZV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSAzOTQ6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VfLkFk
ZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRGb3JlaWduTWVzc2FnZV9jb2Rl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA0MTA6
Ci0gICAgICAgICAgY2FzZSA0MDg6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkTmVzdGVkRW51bV8u
QWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9yZXBlYXRlZE5lc3RlZEVudW1fY29kZWMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDE4Ogot
ICAgICAgICAgIGNhc2UgNDE2OiB7Ci0gICAgICAgICAgICByZXBlYXRlZEZvcmVpZ25FbnVtXy5B
ZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkRm9yZWlnbkVudW1fY29kZWMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDM0OiB7
Ci0gICAgICAgICAgICByZXBlYXRlZFN0cmluZ1BpZWNlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwg
X3JlcGVhdGVkX3JlcGVhdGVkU3RyaW5nUGllY2VfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDQyOiB7Ci0gICAgICAgICAgICByZXBlYXRl
ZENvcmRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRDb3JkX2NvZGVj
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDQ1MDog
ewotICAgICAgICAgICAgbWFwSW50MzJJbnQzMl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9tYXBf
bWFwSW50MzJJbnQzMl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSA0NTg6IHsKLSAgICAgICAgICAgIG1hcEludDY0SW50NjRfLkFkZEVudHJp
ZXNGcm9tKGlucHV0LCBfbWFwX21hcEludDY0SW50NjRfY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDY2OiB7Ci0gICAgICAgICAgICBtYXBV
aW50MzJVaW50MzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcFVpbnQzMlVpbnQzMl9j
b2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA0
NzQ6IHsKLSAgICAgICAgICAgIG1hcFVpbnQ2NFVpbnQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQs
IF9tYXBfbWFwVWludDY0VWludDY0X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBjYXNlIDQ4MjogewotICAgICAgICAgICAgbWFwU2ludDMyU2ludDMy
Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBTaW50MzJTaW50MzJfY29kZWMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDkwOiB7Ci0gICAg
ICAgICAgICBtYXBTaW50NjRTaW50NjRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcFNp
bnQ2NFNpbnQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSA0OTg6IHsKLSAgICAgICAgICAgIG1hcEZpeGVkMzJGaXhlZDMyXy5BZGRFbnRy
aWVzRnJvbShpbnB1dCwgX21hcF9tYXBGaXhlZDMyRml4ZWQzMl9jb2RlYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA1MDY6IHsKLSAgICAgICAgICAg
IG1hcEZpeGVkNjRGaXhlZDY0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBGaXhlZDY0
Rml4ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgY2FzZSA1MTQ6IHsKLSAgICAgICAgICAgIG1hcFNmaXhlZDMyU2ZpeGVkMzJfLkFkZEVudHJp
ZXNGcm9tKGlucHV0LCBfbWFwX21hcFNmaXhlZDMyU2ZpeGVkMzJfY29kZWMpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNTIyOiB7Ci0gICAgICAgICAg
ICBtYXBTZml4ZWQ2NFNmaXhlZDY0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBTZml4
ZWQ2NFNmaXhlZDY0X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDUzMDogewotICAgICAgICAgICAgbWFwSW50MzJGbG9hdF8uQWRkRW50cmll
c0Zyb20oaW5wdXQsIF9tYXBfbWFwSW50MzJGbG9hdF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA1Mzg6IHsKLSAgICAgICAgICAgIG1hcElu
dDMyRG91YmxlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBJbnQzMkRvdWJsZV9jb2Rl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA1NDY6
IHsKLSAgICAgICAgICAgIG1hcEJvb2xCb29sXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9t
YXBCb29sQm9vbF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSA1NTQ6IHsKLSAgICAgICAgICAgIG1hcFN0cmluZ1N0cmluZ18uQWRkRW50cmll
c0Zyb20oaW5wdXQsIF9tYXBfbWFwU3RyaW5nU3RyaW5nX2NvZGVjKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDU2MjogewotICAgICAgICAgICAgbWFw
U3RyaW5nQnl0ZXNfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcFN0cmluZ0J5dGVzX2Nv
ZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDU3
MDogewotICAgICAgICAgICAgbWFwU3RyaW5nTmVzdGVkTWVzc2FnZV8uQWRkRW50cmllc0Zyb20o
aW5wdXQsIF9tYXBfbWFwU3RyaW5nTmVzdGVkTWVzc2FnZV9jb2RlYyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA1Nzg6IHsKLSAgICAgICAgICAgIG1h
cFN0cmluZ0ZvcmVpZ25NZXNzYWdlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBTdHJp
bmdGb3JlaWduTWVzc2FnZV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgY2FzZSA1ODY6IHsKLSAgICAgICAgICAgIG1hcFN0cmluZ05lc3RlZEVudW1f
LkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcFN0cmluZ05lc3RlZEVudW1fY29kZWMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNTk0OiB7Ci0g
ICAgICAgICAgICBtYXBTdHJpbmdGb3JlaWduRW51bV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9t
YXBfbWFwU3RyaW5nRm9yZWlnbkVudW1fY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGNhc2UgODg4OiB7Ci0gICAgICAgICAgICBPbmVvZlVpbnQzMiA9
IGlucHV0LlJlYWRVSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDg5ODogewotICAgICAgICAgICAgZ2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0
QWxsVHlwZXMuVHlwZXMuTmVzdGVkTWVzc2FnZSBzdWJCdWlsZGVyID0gbmV3IGdsb2JhbDo6Q29u
Zm9ybWFuY2UuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UoKTsKLSAgICAgICAgICAg
IGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZk5lc3RlZE1l
c3NhZ2UpIHsKLSAgICAgICAgICAgICAgc3ViQnVpbGRlci5NZXJnZUZyb20oT25lb2ZOZXN0ZWRN
ZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKHN1
YkJ1aWxkZXIpOwotICAgICAgICAgICAgT25lb2ZOZXN0ZWRNZXNzYWdlID0gc3ViQnVpbGRlcjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDkwNjogewot
ICAgICAgICAgICAgT25lb2ZTdHJpbmcgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA5MTQ6IHsKLSAgICAgICAgICAg
IE9uZW9mQnl0ZXMgPSBpbnB1dC5SZWFkQnl0ZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE2MTA6IHsKLSAgICAgICAgICAgIGJvb2w/IHZhbHVl
ID0gX3NpbmdsZV9vcHRpb25hbEJvb2xXcmFwcGVyX2NvZGVjLlJlYWQoaW5wdXQpOwotICAgICAg
ICAgICAgaWYgKG9wdGlvbmFsQm9vbFdyYXBwZXJfID09IG51bGwgfHwgdmFsdWUgIT0gZmFsc2Up
IHsKLSAgICAgICAgICAgICAgT3B0aW9uYWxCb29sV3JhcHBlciA9IHZhbHVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTYx
ODogewotICAgICAgICAgICAgaW50PyB2YWx1ZSA9IF9zaW5nbGVfb3B0aW9uYWxJbnQzMldyYXBw
ZXJfY29kZWMuUmVhZChpbnB1dCk7Ci0gICAgICAgICAgICBpZiAob3B0aW9uYWxJbnQzMldyYXBw
ZXJfID09IG51bGwgfHwgdmFsdWUgIT0gMCkgewotICAgICAgICAgICAgICBPcHRpb25hbEludDMy
V3JhcHBlciA9IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGNhc2UgMTYyNjogewotICAgICAgICAgICAgbG9uZz8gdmFsdWUg
PSBfc2luZ2xlX29wdGlvbmFsSW50NjRXcmFwcGVyX2NvZGVjLlJlYWQoaW5wdXQpOwotICAgICAg
ICAgICAgaWYgKG9wdGlvbmFsSW50NjRXcmFwcGVyXyA9PSBudWxsIHx8IHZhbHVlICE9IDBMKSB7
Ci0gICAgICAgICAgICAgIE9wdGlvbmFsSW50NjRXcmFwcGVyID0gdmFsdWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxNjM0
OiB7Ci0gICAgICAgICAgICB1aW50PyB2YWx1ZSA9IF9zaW5nbGVfb3B0aW9uYWxVaW50MzJXcmFw
cGVyX2NvZGVjLlJlYWQoaW5wdXQpOwotICAgICAgICAgICAgaWYgKG9wdGlvbmFsVWludDMyV3Jh
cHBlcl8gPT0gbnVsbCB8fCB2YWx1ZSAhPSAwKSB7Ci0gICAgICAgICAgICAgIE9wdGlvbmFsVWlu
dDMyV3JhcHBlciA9IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTY0MjogewotICAgICAgICAgICAgdWxvbmc/IHZh
bHVlID0gX3NpbmdsZV9vcHRpb25hbFVpbnQ2NFdyYXBwZXJfY29kZWMuUmVhZChpbnB1dCk7Ci0g
ICAgICAgICAgICBpZiAob3B0aW9uYWxVaW50NjRXcmFwcGVyXyA9PSBudWxsIHx8IHZhbHVlICE9
IDBVTCkgewotICAgICAgICAgICAgICBPcHRpb25hbFVpbnQ2NFdyYXBwZXIgPSB2YWx1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBj
YXNlIDE2NTA6IHsKLSAgICAgICAgICAgIGZsb2F0PyB2YWx1ZSA9IF9zaW5nbGVfb3B0aW9uYWxG
bG9hdFdyYXBwZXJfY29kZWMuUmVhZChpbnB1dCk7Ci0gICAgICAgICAgICBpZiAob3B0aW9uYWxG
bG9hdFdyYXBwZXJfID09IG51bGwgfHwgdmFsdWUgIT0gMEYpIHsKLSAgICAgICAgICAgICAgT3B0
aW9uYWxGbG9hdFdyYXBwZXIgPSB2YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE2NTg6IHsKLSAgICAgICAgICAgIGRv
dWJsZT8gdmFsdWUgPSBfc2luZ2xlX29wdGlvbmFsRG91YmxlV3JhcHBlcl9jb2RlYy5SZWFkKGlu
cHV0KTsKLSAgICAgICAgICAgIGlmIChvcHRpb25hbERvdWJsZVdyYXBwZXJfID09IG51bGwgfHwg
dmFsdWUgIT0gMEQpIHsKLSAgICAgICAgICAgICAgT3B0aW9uYWxEb3VibGVXcmFwcGVyID0gdmFs
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSAxNjY2OiB7Ci0gICAgICAgICAgICBzdHJpbmcgdmFsdWUgPSBfc2luZ2xlX29w
dGlvbmFsU3RyaW5nV3JhcHBlcl9jb2RlYy5SZWFkKGlucHV0KTsKLSAgICAgICAgICAgIGlmIChv
cHRpb25hbFN0cmluZ1dyYXBwZXJfID09IG51bGwgfHwgdmFsdWUgIT0gIiIpIHsKLSAgICAgICAg
ICAgICAgT3B0aW9uYWxTdHJpbmdXcmFwcGVyID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxNjc0OiB7Ci0gICAg
ICAgICAgICBwYjo6Qnl0ZVN0cmluZyB2YWx1ZSA9IF9zaW5nbGVfb3B0aW9uYWxCeXRlc1dyYXBw
ZXJfY29kZWMuUmVhZChpbnB1dCk7Ci0gICAgICAgICAgICBpZiAob3B0aW9uYWxCeXRlc1dyYXBw
ZXJfID09IG51bGwgfHwgdmFsdWUgIT0gcGI6OkJ5dGVTdHJpbmcuRW1wdHkpIHsKLSAgICAgICAg
ICAgICAgT3B0aW9uYWxCeXRlc1dyYXBwZXIgPSB2YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE2OTA6IHsKLSAgICAg
ICAgICAgIHJlcGVhdGVkQm9vbFdyYXBwZXJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0
ZWRfcmVwZWF0ZWRCb29sV3JhcHBlcl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgY2FzZSAxNjk4OiB7Ci0gICAgICAgICAgICByZXBlYXRlZEludDMy
V3JhcHBlcl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9yZXBlYXRlZEludDMyV3Jh
cHBlcl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Y2FzZSAxNzA2OiB7Ci0gICAgICAgICAgICByZXBlYXRlZEludDY0V3JhcHBlcl8uQWRkRW50cmll
c0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9yZXBlYXRlZEludDY0V3JhcHBlcl9jb2RlYyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxNzE0OiB7Ci0gICAg
ICAgICAgICByZXBlYXRlZFVpbnQzMldyYXBwZXJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVw
ZWF0ZWRfcmVwZWF0ZWRVaW50MzJXcmFwcGVyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE3MjI6IHsKLSAgICAgICAgICAgIHJlcGVhdGVk
VWludDY0V3JhcHBlcl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFVp
bnQ2NFdyYXBwZXJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIGNhc2UgMTczMDogewotICAgICAgICAgICAgcmVwZWF0ZWRGbG9hdFdyYXBwZXJfLkFk
ZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRGbG9hdFdyYXBwZXJfY29kZWMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTczODog
ewotICAgICAgICAgICAgcmVwZWF0ZWREb3VibGVXcmFwcGVyXy5BZGRFbnRyaWVzRnJvbShpbnB1
dCwgX3JlcGVhdGVkX3JlcGVhdGVkRG91YmxlV3JhcHBlcl9jb2RlYyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxNzQ2OiB7Ci0gICAgICAgICAgICBy
ZXBlYXRlZFN0cmluZ1dyYXBwZXJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVw
ZWF0ZWRTdHJpbmdXcmFwcGVyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgICBjYXNlIDE3NTQ6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkQnl0ZXNXcmFw
cGVyXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkQnl0ZXNXcmFwcGVy
X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl
IDI0MTA6IHsKLSAgICAgICAgICAgIGlmIChvcHRpb25hbER1cmF0aW9uXyA9PSBudWxsKSB7Ci0g
ICAgICAgICAgICAgIG9wdGlvbmFsRHVyYXRpb25fID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpbnB1dC5SZWFkTWVzc2FnZShvcHRpb25hbER1cmF0aW9uXyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNDE4OiB7Ci0gICAgICAgICAgICBpZiAo
b3B0aW9uYWxUaW1lc3RhbXBfID09IG51bGwpIHsKLSAgICAgICAgICAgICAgb3B0aW9uYWxUaW1l
c3RhbXBfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlRpbWVz
dGFtcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2Uob3B0
aW9uYWxUaW1lc3RhbXBfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBjYXNlIDI0MjY6IHsKLSAgICAgICAgICAgIGlmIChvcHRpb25hbEZpZWxkTWFza18gPT0g
bnVsbCkgewotICAgICAgICAgICAgICBvcHRpb25hbEZpZWxkTWFza18gPSBuZXcgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRmllbGRNYXNrKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZShvcHRpb25hbEZpZWxkTWFza18pOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjQzNDogewotICAg
ICAgICAgICAgaWYgKG9wdGlvbmFsU3RydWN0XyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIG9w
dGlvbmFsU3RydWN0XyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5TdHJ1Y3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdl
KG9wdGlvbmFsU3RydWN0Xyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSAyNDQyOiB7Ci0gICAgICAgICAgICBpZiAob3B0aW9uYWxBbnlfID09IG51bGwp
IHsKLSAgICAgICAgICAgICAgb3B0aW9uYWxBbnlfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLldlbGxLbm93blR5cGVzLkFueSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5w
dXQuUmVhZE1lc3NhZ2Uob3B0aW9uYWxBbnlfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBjYXNlIDI0NTA6IHsKLSAgICAgICAgICAgIGlmIChvcHRpb25hbFZh
bHVlXyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIG9wdGlvbmFsVmFsdWVfID0gbmV3IGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlZhbHVlKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZShvcHRpb25hbFZhbHVlXyk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNDkwOiB7Ci0gICAgICAg
ICAgICByZXBlYXRlZER1cmF0aW9uXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3Jl
cGVhdGVkRHVyYXRpb25fY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgMjQ5ODogewotICAgICAgICAgICAgcmVwZWF0ZWRUaW1lc3RhbXBfLkFk
ZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRUaW1lc3RhbXBfY29kZWMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjUwNjogewot
ICAgICAgICAgICAgcmVwZWF0ZWRGaWVsZG1hc2tfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVw
ZWF0ZWRfcmVwZWF0ZWRGaWVsZG1hc2tfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGNhc2UgMjUyMjogewotICAgICAgICAgICAgcmVwZWF0ZWRBbnlf
LkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRBbnlfY29kZWMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjUzMDogewotICAg
ICAgICAgICAgcmVwZWF0ZWRWYWx1ZV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9y
ZXBlYXRlZFZhbHVlX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDI1OTQ6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkU3RydWN0Xy5BZGRFbnRy
aWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkU3RydWN0X2NvZGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDMyMDg6IHsKLSAgICAgICAg
ICAgIEZpZWxkbmFtZTEgPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDMyMTY6IHsKLSAgICAgICAgICAgIEZpZWxkTmFt
ZTIgPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDMyMjQ6IHsKLSAgICAgICAgICAgIEZpZWxkTmFtZTMgPSBpbnB1dC5S
ZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBj
YXNlIDMyMzI6IHsKLSAgICAgICAgICAgIEZpZWxkTmFtZTQgPSBpbnB1dC5SZWFkSW50MzIoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDMyNDA6IHsK
LSAgICAgICAgICAgIEZpZWxkME5hbWU1ID0gaW5wdXQuUmVhZEludDMyKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAzMjQ4OiB7Ci0gICAgICAgICAg
ICBGaWVsZDBOYW1lNiA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMzI1NjogewotICAgICAgICAgICAgRmllbGROYW1l
NyA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgMzI2NDogewotICAgICAgICAgICAgRmllbGROYW1lOCA9IGlucHV0LlJl
YWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh
c2UgMzI3MjogewotICAgICAgICAgICAgRmllbGROYW1lOSA9IGlucHV0LlJlYWRJbnQzMigpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMzI4MDogewot
ICAgICAgICAgICAgRmllbGROYW1lMTAgPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDMyODg6IHsKLSAgICAgICAgICAg
IEZJRUxETkFNRTExID0gaW5wdXQuUmVhZEludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAzMjk2OiB7Ci0gICAgICAgICAgICBGSUVMRE5hbWUx
MiA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgI3JlZ2lvbiBOZXN0ZWQgdHlwZXMKLSAg
ICAvLy8gPHN1bW1hcnk+Q29udGFpbmVyIGZvciBuZXN0ZWQgdHlwZXMgZGVjbGFyZWQgaW4gdGhl
IFRlc3RBbGxUeXBlcyBtZXNzYWdlIHR5cGUuPC9zdW1tYXJ5PgotICAgIFtnbG9iYWw6OlN5c3Rl
bS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gICAgcHVibGlj
IHN0YXRpYyBwYXJ0aWFsIGNsYXNzIFR5cGVzIHsKLSAgICAgIHB1YmxpYyBlbnVtIE5lc3RlZEVu
dW0gewotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkZPTyIpXSBGb28gPSAwLAotICAgICAg
ICBbcGJyOjpPcmlnaW5hbE5hbWUoIkJBUiIpXSBCYXIgPSAxLAotICAgICAgICBbcGJyOjpPcmln
aW5hbE5hbWUoIkJBWiIpXSBCYXogPSAyLAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyAgSW50ZW50aW9uYWxseSBuZWdhdGl2ZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJORUciKV0gTmVnID0gLTEsCi0gICAgICB9Ci0KLSAg
ICAgIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmli
dXRlKCldCi0gICAgICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgTmVzdGVkTWVzc2FnZSA6
IHBiOjpJTWVzc2FnZTxOZXN0ZWRNZXNzYWdlPiB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHJl
YWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPE5lc3RlZE1lc3NhZ2U+IF9wYXJzZXIgPSBuZXcgcGI6
Ok1lc3NhZ2VQYXJzZXI8TmVzdGVkTWVzc2FnZT4oKCkgPT4gbmV3IE5lc3RlZE1lc3NhZ2UoKSk7
Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8TmVzdGVkTWVzc2FnZT4g
UGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgICAgIHB1YmxpYyBzdGF0
aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgICAgICBnZXQgeyBy
ZXR1cm4gZ2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0QWxsVHlwZXMuRGVzY3JpcHRvci5OZXN0ZWRU
eXBlc1swXTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBw
Yjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0
b3I7IH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBOZXN0ZWRNZXNzYWdlKCkgewotICAg
ICAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJ0aWFsIHZv
aWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgICAgICBwdWJsaWMgTmVzdGVkTWVzc2FnZShOZXN0
ZWRNZXNzYWdlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICAgICAgYV8gPSBvdGhlci5hXzsKLSAg
ICAgICAgICBDb3JlY3Vyc2l2ZSA9IG90aGVyLmNvcmVjdXJzaXZlXyAhPSBudWxsID8gb3RoZXIu
Q29yZWN1cnNpdmUuQ2xvbmUoKSA6IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMg
TmVzdGVkTWVzc2FnZSBDbG9uZSgpIHsKLSAgICAgICAgICByZXR1cm4gbmV3IE5lc3RlZE1lc3Nh
Z2UodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVy
IGZvciB0aGUgImEiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBB
RmllbGROdW1iZXIgPSAxOwotICAgICAgICBwcml2YXRlIGludCBhXzsKLSAgICAgICAgcHVibGlj
IGludCBBIHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4gYV87IH0KLSAgICAgICAgICBzZXQgewot
ICAgICAgICAgICAgYV8gPSB2YWx1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImNvcmVjdXJzaXZlIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBpbnQgQ29yZWN1cnNpdmVGaWVsZE51bWJl
ciA9IDI7Ci0gICAgICAgIHByaXZhdGUgZ2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0QWxsVHlwZXMg
Y29yZWN1cnNpdmVfOwotICAgICAgICBwdWJsaWMgZ2xvYmFsOjpDb25mb3JtYW5jZS5UZXN0QWxs
VHlwZXMgQ29yZWN1cnNpdmUgewotICAgICAgICAgIGdldCB7IHJldHVybiBjb3JlY3Vyc2l2ZV87
IH0KLSAgICAgICAgICBzZXQgewotICAgICAgICAgICAgY29yZWN1cnNpdmVfID0gdmFsdWU7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1
YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgTmVz
dGVkTWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbCBFcXVhbHMoTmVz
dGVkTWVzc2FnZSBvdGhlcikgewotICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIs
IG51bGwpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKEEgIT0gb3RoZXIuQSkgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgIGlmICghb2JqZWN0LkVxdWFscyhDb3JlY3Vyc2l2ZSwgb3RoZXIu
Q29yZWN1cnNpdmUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAg
ICAgICAgIGludCBoYXNoID0gMTsKLSAgICAgICAgICBpZiAoQSAhPSAwKSBoYXNoIF49IEEuR2V0
SGFzaENvZGUoKTsKLSAgICAgICAgICBpZiAoY29yZWN1cnNpdmVfICE9IG51bGwpIGhhc2ggXj0g
Q29yZWN1cnNpdmUuR2V0SGFzaENvZGUoKTsKLSAgICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAg
ICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0
U3RyZWFtIG91dHB1dCkgewotICAgICAgICAgIGlmIChBICE9IDApIHsKLSAgICAgICAgICAgIG91
dHB1dC5Xcml0ZVJhd1RhZyg4KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUludDMyKEEpOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoY29yZWN1cnNpdmVfICE9IG51bGwpIHsKLSAgICAg
ICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxOCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVN
ZXNzYWdlKENvcmVjdXJzaXZlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBw
dWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICAgICAgaW50IHNpemUgPSAwOwotICAg
ICAgICAgIGlmIChBICE9IDApIHsKLSAgICAgICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91
dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEEpOwotICAgICAgICAgIH0KLSAgICAgICAgICBp
ZiAoY29yZWN1cnNpdmVfICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNpemUgKz0gMSArIHBiOjpD
b2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoQ29yZWN1cnNpdmUpOwotICAgICAg
ICAgIH0KLSAgICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1Ymxp
YyB2b2lkIE1lcmdlRnJvbShOZXN0ZWRNZXNzYWdlIG90aGVyKSB7Ci0gICAgICAgICAgaWYgKG90
aGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgaWYgKG90aGVyLkEgIT0gMCkgewotICAgICAgICAgICAgQSA9IG90aGVyLkE7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGlmIChvdGhlci5jb3JlY3Vyc2l2ZV8gIT0gbnVsbCkgewotICAgICAg
ICAgICAgaWYgKGNvcmVjdXJzaXZlXyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIGNvcmVjdXJz
aXZlXyA9IG5ldyBnbG9iYWw6OkNvbmZvcm1hbmNlLlRlc3RBbGxUeXBlcygpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgQ29yZWN1cnNpdmUuTWVyZ2VGcm9tKG90aGVyLkNvcmVjdXJzaXZl
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBNZXJnZUZy
b20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgICAgICB1aW50IHRhZzsKLSAg
ICAgICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICAg
ICAgc3dpdGNoKHRhZykgewotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSA4OiB7Ci0gICAgICAgICAgICAgICAgQSA9IGlucHV0LlJlYWRJbnQzMigpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNh
c2UgMTg6IHsKLSAgICAgICAgICAgICAgICBpZiAoY29yZWN1cnNpdmVfID09IG51bGwpIHsKLSAg
ICAgICAgICAgICAgICAgIGNvcmVjdXJzaXZlXyA9IG5ldyBnbG9iYWw6OkNvbmZvcm1hbmNlLlRl
c3RBbGxUeXBlcygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnB1dC5S
ZWFkTWVzc2FnZShjb3JlY3Vyc2l2ZV8pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
IH0KLQotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotCi0gIFtnbG9iYWw6OlN5c3RlbS5E
aWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFs
ZWQgcGFydGlhbCBjbGFzcyBGb3JlaWduTWVzc2FnZSA6IHBiOjpJTWVzc2FnZTxGb3JlaWduTWVz
c2FnZT4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPEZv
cmVpZ25NZXNzYWdlPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPEZvcmVpZ25NZXNz
YWdlPigoKSA9PiBuZXcgRm9yZWlnbk1lc3NhZ2UoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6
TWVzc2FnZVBhcnNlcjxGb3JlaWduTWVzc2FnZT4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJz
ZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2Ny
aXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6Q29uZm9ybWFuY2UuQ29uZm9ybWFu
Y2VSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzNdOyB9Ci0gICAgfQotCi0gICAg
cGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBn
ZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBGb3JlaWduTWVz
c2FnZSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2
b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgRm9yZWlnbk1lc3NhZ2UoRm9yZWln
bk1lc3NhZ2Ugb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIGNfID0gb3RoZXIuY187Ci0gICAgfQot
Ci0gICAgcHVibGljIEZvcmVpZ25NZXNzYWdlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBG
b3JlaWduTWVzc2FnZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgImMiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IENG
aWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBpbnQgY187Ci0gICAgcHVibGljIGludCBDIHsK
LSAgICAgIGdldCB7IHJldHVybiBjXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgY18gPSB2YWx1
ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2Jq
ZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIEZvcmVpZ25NZXNzYWdl
KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoRm9yZWlnbk1lc3NhZ2Ugb3RoZXIp
IHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRo
aXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKEMgIT0gb3Ro
ZXIuQykgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVi
bGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAg
ICAgIGlmIChDICE9IDApIGhhc2ggXj0gQy5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhh
c2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAg
ICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0g
ICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0
cHV0KSB7Ci0gICAgICBpZiAoQyAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg4
KTsKLSAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoQyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAg
aWYgKEMgIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0u
Q29tcHV0ZUludDMyU2l6ZShDKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShGb3JlaWduTWVzc2FnZSBvdGhlcikgewotICAg
ICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAg
aWYgKG90aGVyLkMgIT0gMCkgewotICAgICAgICBDID0gb3RoZXIuQzsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQp
IHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkp
ICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAgIEMgPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQot
ICB9Ci0KLSAgI2VuZHJlZ2lvbgotCi19Ci0KLSNlbmRyZWdpb24gRGVzaWduZXIgZ2VuZXJhdGVk
IGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuQ29uZm9ybWFuY2Uv
R29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlLmNzcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJv
dG9idWYuQ29uZm9ybWFuY2UvR29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlLmNzcHJvagpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJmNzI4ZDE5Mjk0NzM3ZDYyY2VmMDZkNzIzY2Fh
ZmYyMjJhZGFjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlL0dvb2dsZS5Qcm90b2J1Zi5D
b25mb3JtYW5jZS5jc3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi3vu788P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByb2plY3QgVG9vbHNWZXJzaW9u
PSIxNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNy
b3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SW1wb3J0IFByb2plY3Q9IiQo
TVNCdWlsZEV4dGVuc2lvbnNQYXRoKVwkKE1TQnVpbGRUb29sc1ZlcnNpb24pXE1pY3Jvc29mdC5D
b21tb24ucHJvcHMiIENvbmRpdGlvbj0iRXhpc3RzKCckKE1TQnVpbGRFeHRlbnNpb25zUGF0aClc
JChNU0J1aWxkVG9vbHNWZXJzaW9uKVxNaWNyb3NvZnQuQ29tbW9uLnByb3BzJykiIC8+Ci0gIDxQ
cm9wZXJ0eUdyb3VwPgotICAgIDxDb25maWd1cmF0aW9uIENvbmRpdGlvbj0iICckKENvbmZpZ3Vy
YXRpb24pJyA9PSAnJyAiPkRlYnVnPC9Db25maWd1cmF0aW9uPgotICAgIDxQbGF0Zm9ybSBDb25k
aXRpb249IiAnJChQbGF0Zm9ybSknID09ICcnICI+QW55Q1BVPC9QbGF0Zm9ybT4KLSAgICA8UHJv
amVjdEd1aWQ+ezA2MDdEMUI4LTgwRDYtNEIzNS05ODU3LTEyNjNDMUIzMkI5NH08L1Byb2plY3RH
dWlkPgotICAgIDxPdXRwdXRUeXBlPkV4ZTwvT3V0cHV0VHlwZT4KLSAgICA8QXBwRGVzaWduZXJG
b2xkZXI+UHJvcGVydGllczwvQXBwRGVzaWduZXJGb2xkZXI+Ci0gICAgPFJvb3ROYW1lc3BhY2U+
R29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlPC9Sb290TmFtZXNwYWNlPgotICAgIDxBc3NlbWJs
eU5hbWU+R29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlPC9Bc3NlbWJseU5hbWU+Ci0gICAgPFRh
cmdldEZyYW1ld29ya1ZlcnNpb24+djQuNTwvVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj4KLSAgICA8
RmlsZUFsaWdubWVudD41MTI8L0ZpbGVBbGlnbm1lbnQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAg
PFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIgJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
ID09ICdEZWJ1Z3xBbnlDUFUnICI+Ci0gICAgPFBsYXRmb3JtVGFyZ2V0PkFueUNQVTwvUGxhdGZv
cm1UYXJnZXQ+Ci0gICAgPERlYnVnU3ltYm9scz50cnVlPC9EZWJ1Z1N5bWJvbHM+Ci0gICAgPERl
YnVnVHlwZT5mdWxsPC9EZWJ1Z1R5cGU+Ci0gICAgPE9wdGltaXplPmZhbHNlPC9PcHRpbWl6ZT4K
LSAgICA8T3V0cHV0UGF0aD5iaW5cRGVidWdcPC9PdXRwdXRQYXRoPgotICAgIDxEZWZpbmVDb25z
dGFudHM+REVCVUc7VFJBQ0U8L0RlZmluZUNvbnN0YW50cz4KLSAgICA8RXJyb3JSZXBvcnQ+cHJv
bXB0PC9FcnJvclJlcG9ydD4KLSAgICA8V2FybmluZ0xldmVsPjQ8L1dhcm5pbmdMZXZlbD4KLSAg
PC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IiAnJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKScgPT0gJ1JlbGVhc2V8QW55Q1BVJyAiPgotICAgIDxQbGF0Zm9y
bVRhcmdldD5BbnlDUFU8L1BsYXRmb3JtVGFyZ2V0PgotICAgIDxEZWJ1Z1R5cGU+cGRib25seTwv
RGVidWdUeXBlPgotICAgIDxPcHRpbWl6ZT50cnVlPC9PcHRpbWl6ZT4KLSAgICA8T3V0cHV0UGF0
aD5iaW5cUmVsZWFzZVw8L091dHB1dFBhdGg+Ci0gICAgPERlZmluZUNvbnN0YW50cz5UUkFDRTwv
RGVmaW5lQ29uc3RhbnRzPgotICAgIDxFcnJvclJlcG9ydD5wcm9tcHQ8L0Vycm9yUmVwb3J0Pgot
ICAgIDxXYXJuaW5nTGV2ZWw+NDwvV2FybmluZ0xldmVsPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0g
IDxJdGVtR3JvdXA+Ci0gICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0iIC8+Ci0gICAgPFJl
ZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uQ29yZSIgLz4KLSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9
Ik1pY3Jvc29mdC5DU2hhcnAiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAg
IDxDb21waWxlIEluY2x1ZGU9IkNvbmZvcm1hbmNlLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1
ZGU9IlByb2dyYW0uY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUHJvcGVydGllc1xBc3Nl
bWJseUluZm8uY3MiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxOb25l
IEluY2x1ZGU9IkFwcC5jb25maWciIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgot
ICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Ii4uXEdvb2dsZS5Qcm90b2J1ZlxHb29nbGUu
UHJvdG9idWYuY3Nwcm9qIj4KLSAgICAgIDxQcm9qZWN0Pns2OTA4YmRjZS1kOTI1LTQzZjMtOTRh
Yy1hNTMxZTZkZjI1OTF9PC9Qcm9qZWN0PgotICAgICAgPE5hbWU+R29vZ2xlLlByb3RvYnVmPC9O
YW1lPgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJbXBvcnQg
UHJvamVjdD0iJChNU0J1aWxkVG9vbHNQYXRoKVxNaWNyb3NvZnQuQ1NoYXJwLnRhcmdldHMiIC8+
Ci0gIDwhLS0gVG8gbW9kaWZ5IHlvdXIgYnVpbGQgcHJvY2VzcywgYWRkIHlvdXIgdGFzayBpbnNp
ZGUgb25lIG9mIHRoZSB0YXJnZXRzIGJlbG93IGFuZCB1bmNvbW1lbnQgaXQuIAotICAgICAgIE90
aGVyIHNpbWlsYXIgZXh0ZW5zaW9uIHBvaW50cyBleGlzdCwgc2VlIE1pY3Jvc29mdC5Db21tb24u
dGFyZ2V0cy4KLSAgPFRhcmdldCBOYW1lPSJCZWZvcmVCdWlsZCI+Ci0gIDwvVGFyZ2V0PgotICA8
VGFyZ2V0IE5hbWU9IkFmdGVyQnVpbGQiPgotICA8L1RhcmdldD4KLSAgLS0+Ci08L1Byb2plY3Q+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi5Db25mb3JtYW5jZS9Qcm9ncmFtLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90
b2J1Zi5Db25mb3JtYW5jZS9Qcm9ncmFtLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxOTgyN2M0ODQ0NTg3ZjQ0NDEyMzU4MGY1YzZhYzMzY2FjOGEyOWQ1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9i
dWYuQ29uZm9ybWFuY2UvUHJvZ3JhbS5jcworKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBA
Ci3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBDb25mb3JtYW5jZTsKLXVz
aW5nIEdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uOwotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lz
dGVtLklPOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlCi17Ci0gICAg
Ly8vIDxzdW1tYXJ5PgotICAgIC8vLyBDb25mb3JtYW5jZSB0ZXN0cy4gVGhlIHRlc3QgcnVubmVy
IHdpbGwgcHJvdmlkZSBKU09OIG9yIHByb3RvIGRhdGEgb24gc3RkaW4sCi0gICAgLy8vIGFuZCB0
aGlzIHByb2dyYW0gd2lsbCBwcm9kdWNlIGl0cyBvdXRwdXQgb24gc3Rkb3V0LgotICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgY2xhc3MgUHJvZ3JhbQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0
aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRo
aXMgd2F5IHdlIGdldCB0aGUgYmluYXJ5IHN0cmVhbXMgaW5zdGVhZCBvZiByZWFkZXJzL3dyaXRl
cnMuCi0gICAgICAgICAgICB2YXIgaW5wdXQgPSBuZXcgQmluYXJ5UmVhZGVyKENvbnNvbGUuT3Bl
blN0YW5kYXJkSW5wdXQoKSk7Ci0gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbmV3IEJpbmFyeVdy
aXRlcihDb25zb2xlLk9wZW5TdGFuZGFyZE91dHB1dCgpKTsKLSAgICAgICAgICAgIHZhciB0eXBl
UmVnaXN0cnkgPSBUeXBlUmVnaXN0cnkuRnJvbU1lc3NhZ2VzKFRlc3RBbGxUeXBlcy5EZXNjcmlw
dG9yKTsKLQotICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChS
dW5UZXN0KGlucHV0LCBvdXRwdXQsIHR5cGVSZWdpc3RyeSkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENvbnNvbGUu
RXJyb3IuV3JpdGVMaW5lKCJSZWNlaXZlZCBFT0YgYWZ0ZXIgezB9IHRlc3RzIiwgY291bnQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbCBSdW5UZXN0KEJpbmFyeVJl
YWRlciBpbnB1dCwgQmluYXJ5V3JpdGVyIG91dHB1dCwgVHlwZVJlZ2lzdHJ5IHR5cGVSZWdpc3Ry
eSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50PyBzaXplID0gUmVhZEludDMyKGlucHV0KTsK
LSAgICAgICAgICAgIGlmIChzaXplID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnl0ZVtdIGlu
cHV0RGF0YSA9IGlucHV0LlJlYWRCeXRlcyhzaXplLlZhbHVlKTsKLSAgICAgICAgICAgIGlmIChp
bnB1dERhdGEuTGVuZ3RoICE9IHNpemUuVmFsdWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVuZE9mU3RyZWFtRXhjZXB0aW9uKCJSZWFkICIgKyBpbnB1dERhdGEu
TGVuZ3RoICsgIiBieXRlcyBvZiBkYXRhIHdoZW4gZXhwZWN0aW5nICIgKyBzaXplKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIENvbmZvcm1hbmNlUmVxdWVzdCByZXF1ZXN0ID0gQ29uZm9y
bWFuY2VSZXF1ZXN0LlBhcnNlci5QYXJzZUZyb20oaW5wdXREYXRhKTsKLSAgICAgICAgICAgIENv
bmZvcm1hbmNlUmVzcG9uc2UgcmVzcG9uc2UgPSBQZXJmb3JtUmVxdWVzdChyZXF1ZXN0LCB0eXBl
UmVnaXN0cnkpOwotICAgICAgICAgICAgYnl0ZVtdIG91dHB1dERhdGEgPSByZXNwb25zZS5Ub0J5
dGVBcnJheSgpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlKG91dHB1dERhdGEuTGVuZ3RoKTsK
LSAgICAgICAgICAgIG91dHB1dC5Xcml0ZShvdXRwdXREYXRhKTsKLSAgICAgICAgICAgIC8vIFJl
YWR5IGZvciBhbm90aGVyIHRlc3QuLi4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgQ29uZm9ybWFuY2VSZXNwb25zZSBQZXJmb3Jt
UmVxdWVzdChDb25mb3JtYW5jZVJlcXVlc3QgcmVxdWVzdCwgVHlwZVJlZ2lzdHJ5IHR5cGVSZWdp
c3RyeSkKLSAgICAgICAgewotICAgICAgICAgICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gICAg
ICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlcXVl
c3QuUGF5bG9hZENhc2UpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBj
YXNlIENvbmZvcm1hbmNlUmVxdWVzdC5QYXlsb2FkT25lb2ZDYXNlLkpzb25QYXlsb2FkOgotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBKc29uUGFyc2VyKG5ldyBKc29u
UGFyc2VyLlNldHRpbmdzKDIwLCB0eXBlUmVnaXN0cnkpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2UgPSBwYXJzZXIuUGFyc2U8VGVzdEFsbFR5cGVzPihyZXF1ZXN0Lkpzb25QYXls
b2FkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIENvbmZvcm1hbmNlUmVxdWVzdC5QYXlsb2FkT25lb2ZDYXNlLlByb3RvYnVmUGF5bG9h
ZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBUZXN0QWxsVHlwZXMuUGFyc2Vy
LlBhcnNlRnJvbShyZXF1ZXN0LlByb3RvYnVmUGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIHJlcXVlc3QgcGF5bG9h
ZDogIiArIHJlcXVlc3QuUGF5bG9hZENhc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24g
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbmZvcm1hbmNl
UmVzcG9uc2UgeyBQYXJzZUVycm9yID0gZS5NZXNzYWdlIH07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXRjaCAoSW52YWxpZEpzb25FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbmZvcm1hbmNlUmVzcG9uc2UgeyBQYXJzZUVycm9y
ID0gZS5NZXNzYWdlIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlcXVlc3QuUmVxdWVzdGVkT3V0cHV0Rm9y
bWF0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBnbG9iYWw6
OkNvbmZvcm1hbmNlLldpcmVGb3JtYXQuSnNvbjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBmb3JtYXR0ZXIgPSBuZXcgSnNvbkZvcm1hdHRlcihuZXcgSnNvbkZvcm1hdHRlci5TZXR0aW5n
cyhmYWxzZSwgdHlwZVJlZ2lzdHJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IENvbmZvcm1hbmNlUmVzcG9uc2UgeyBKc29uUGF5bG9hZCA9IGZvcm1hdHRlci5Gb3JtYXQo
bWVzc2FnZSkgfTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBnbG9iYWw6OkNvbmZvcm1hbmNl
LldpcmVGb3JtYXQuUHJvdG9idWY6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IENvbmZvcm1hbmNlUmVzcG9uc2UgeyBQcm90b2J1ZlBheWxvYWQgPSBtZXNzYWdlLlRvQnl0ZVN0
cmluZygpIH07Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCByZXF1ZXN0IG91dHB1dCBm
b3JtYXQ6ICIgKyByZXF1ZXN0LlBheWxvYWRDYXNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbiBl
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29uZm9ybWFuY2VS
ZXNwb25zZSB7IFNlcmlhbGl6ZUVycm9yID0gZS5NZXNzYWdlIH07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBpbnQ/IFJlYWRJbnQzMihCaW5hcnlS
ZWFkZXIgaW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IGlucHV0
LlJlYWRCeXRlcyg0KTsKLSAgICAgICAgICAgIGlmIChieXRlcy5MZW5ndGggPT0gMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBDbGVhbmx5IHJlYWNoZWQgdGhlIGVuZCBvZiB0
aGUgc3RyZWFtCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoYnl0ZXMuTGVuZ3RoICE9IDQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVuZE9mU3RyZWFtRXhjZXB0aW9uKCJSZWFkICIgKyBieXRlcy5M
ZW5ndGggKyAiIGJ5dGVzIG9mIHNpemUgd2hlbiBleHBlY3RpbmcgNCIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzWzBdIHwgKGJ5dGVzWzFdIDw8IDgpIHwgKGJ5dGVz
WzJdIDw8IDE2KSB8IChieXRlc1szXSA8PCAyNCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlL1Byb3BlcnRpZXMv
QXNzZW1ibHlJbmZvLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5Db25mb3JtYW5jZS9Q
cm9wZXJ0aWVzL0Fzc2VtYmx5SW5mby5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDIyZTkwZmQ4ZjI2NDkzODExNDMwYjIxNmUyMzNmN2U4Y2I5NjE1Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVm
LkNvbmZvcm1hbmNlL1Byb3BlcnRpZXMvQXNzZW1ibHlJbmZvLmNzCisrKyAvZGV2L251bGwKQEAg
LTEsNDggKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lz
dGVtLlJlZmxlY3Rpb247Ci0KLS8vIEdlbmVyYWwgSW5mb3JtYXRpb24gYWJvdXQgYW4gYXNzZW1i
bHkgaXMgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgCi0vLyBzZXQgb2YgYXR0cmli
dXRlcy4gQ2hhbmdlIHRoZXNlIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZSBpbmZvcm1h
dGlvbgotLy8gYXNzb2NpYXRlZCB3aXRoIGFuIGFzc2VtYmx5LgotW2Fzc2VtYmx5OiBBc3NlbWJs
eVRpdGxlKCJHb29nbGUuUHJvdG9idWYuQ29uZm9ybWFuY2UiKV0KLVthc3NlbWJseTogQXNzZW1i
bHlEZXNjcmlwdGlvbigiIildCi1bYXNzZW1ibHk6IEFzc2VtYmx5Q29uZmlndXJhdGlvbigiIild
Ci1bYXNzZW1ibHk6IEFzc2VtYmx5Q29tcGFueSgiIildCi1bYXNzZW1ibHk6IEFzc2VtYmx5UHJv
ZHVjdCgiR29vZ2xlLlByb3RvYnVmLkNvbmZvcm1hbmNlIildCi1bYXNzZW1ibHk6IEFzc2VtYmx5
Q29weXJpZ2h0KCJDb3B5cmlnaHQgwqkgIDIwMTUiKV0KLVthc3NlbWJseTogQXNzZW1ibHlUcmFk
ZW1hcmsoIiIpXQotW2Fzc2VtYmx5OiBBc3NlbWJseUN1bHR1cmUoIiIpXQotCi1bYXNzZW1ibHk6
IEFzc2VtYmx5VmVyc2lvbigiMy4wLjAuMCIpXQotW2Fzc2VtYmx5OiBBc3NlbWJseUZpbGVWZXJz
aW9uKCIzLjAuMC4wIildCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkpz
b25EdW1wL0dvb2dsZS5Qcm90b2J1Zi5Kc29uRHVtcC5jc3Byb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xl
LlByb3RvYnVmLkpzb25EdW1wL0dvb2dsZS5Qcm90b2J1Zi5Kc29uRHVtcC5jc3Byb2oKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YWNmNjZkNGI4YjNjZDNkMmNiNmE1NGE3OGQ5Njdl
MTQxMGY5NjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9j
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5Kc29uRHVtcC9Hb29nbGUuUHJvdG9idWYuSnNvbkR1
bXAuY3Nwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAot77u/PD94bWwgdmVyc2lv
bj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBE
ZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29t
L2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8UHJvcGVydHlHcm91cD4KLSAgICA8Q29uZmln
dXJhdGlvbiBDb25kaXRpb249IiAnJChDb25maWd1cmF0aW9uKScgPT0gJycgIj5EZWJ1ZzwvQ29u
ZmlndXJhdGlvbj4KLSAgICA8UGxhdGZvcm0gQ29uZGl0aW9uPSIgJyQoUGxhdGZvcm0pJyA9PSAn
JyAiPkFueUNQVTwvUGxhdGZvcm0+Ci0gICAgPFByb2R1Y3RWZXJzaW9uPjkuMC4zMDcyOTwvUHJv
ZHVjdFZlcnNpb24+Ci0gICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgotICAg
IDxQcm9qZWN0R3VpZD57RDcyODJFOTktMkRDMy00MDVCLTk0NkYtMTc3REIyRkQyQUUyfTwvUHJv
amVjdEd1aWQ+Ci0gICAgPE91dHB1dFR5cGU+RXhlPC9PdXRwdXRUeXBlPgotICAgIDxBcHBEZXNp
Z25lckZvbGRlcj5Qcm9wZXJ0aWVzPC9BcHBEZXNpZ25lckZvbGRlcj4KLSAgICA8Um9vdE5hbWVz
cGFjZT5Hb29nbGUuUHJvdG9idWYuSnNvbkR1bXA8L1Jvb3ROYW1lc3BhY2U+Ci0gICAgPEFzc2Vt
Ymx5TmFtZT5Hb29nbGUuUHJvdG9idWYuSnNvbkR1bXA8L0Fzc2VtYmx5TmFtZT4KLSAgICA8VGFy
Z2V0RnJhbWV3b3JrVmVyc2lvbj52NC41PC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgotICAgIDxG
aWxlQWxpZ25tZW50PjUxMjwvRmlsZUFsaWdubWVudD4KLSAgICA8VGFyZ2V0RnJhbWV3b3JrUHJv
ZmlsZT4KLSAgICA8L1RhcmdldEZyYW1ld29ya1Byb2ZpbGU+Ci0gIDwvUHJvcGVydHlHcm91cD4K
LSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIgJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknID09ICdEZWJ1Z3xBbnlDUFUnICI+Ci0gICAgPERlYnVnU3ltYm9scz50cnVlPC9EZWJ1Z1N5
bWJvbHM+Ci0gICAgPERlYnVnVHlwZT5mdWxsPC9EZWJ1Z1R5cGU+Ci0gICAgPE9wdGltaXplPmZh
bHNlPC9PcHRpbWl6ZT4KLSAgICA8T3V0cHV0UGF0aD5iaW5cRGVidWc8L091dHB1dFBhdGg+Ci0g
ICAgPEludGVybWVkaWF0ZU91dHB1dFBhdGg+b2JqXERlYnVnXDwvSW50ZXJtZWRpYXRlT3V0cHV0
UGF0aD4KLSAgICA8RGVmaW5lQ29uc3RhbnRzPkRFQlVHO1RSQUNFPC9EZWZpbmVDb25zdGFudHM+
Ci0gICAgPEVycm9yUmVwb3J0PnByb21wdDwvRXJyb3JSZXBvcnQ+Ci0gICAgPFdhcm5pbmdMZXZl
bD40PC9XYXJuaW5nTGV2ZWw+Ci0gICAgPE5vU3RkTGliPnRydWU8L05vU3RkTGliPgotICAgIDxH
ZW5lcmF0ZVNlcmlhbGl6YXRpb25Bc3NlbWJsaWVzPk9mZjwvR2VuZXJhdGVTZXJpYWxpemF0aW9u
QXNzZW1ibGllcz4KLSAgICA8UHJlZmVyMzJCaXQ+ZmFsc2U8L1ByZWZlcjMyQml0PgotICA8L1By
b3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJyA9PSAnUmVsZWFzZXxBbnlDUFUnICI+Ci0gICAgPERlYnVnVHlwZT5w
ZGJvbmx5PC9EZWJ1Z1R5cGU+Ci0gICAgPE9wdGltaXplPnRydWU8L09wdGltaXplPgotICAgIDxP
dXRwdXRQYXRoPmJpblxSZWxlYXNlPC9PdXRwdXRQYXRoPgotICAgIDxJbnRlcm1lZGlhdGVPdXRw
dXRQYXRoPm9ialxSZWxlYXNlXDwvSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KLSAgICA8RGVmaW5l
Q29uc3RhbnRzPlRSQUNFPC9EZWZpbmVDb25zdGFudHM+Ci0gICAgPEVycm9yUmVwb3J0PnByb21w
dDwvRXJyb3JSZXBvcnQ+Ci0gICAgPFdhcm5pbmdMZXZlbD40PC9XYXJuaW5nTGV2ZWw+Ci0gICAg
PE5vU3RkTGliPnRydWU8L05vU3RkTGliPgotICAgIDxHZW5lcmF0ZVNlcmlhbGl6YXRpb25Bc3Nl
bWJsaWVzPk9mZjwvR2VuZXJhdGVTZXJpYWxpemF0aW9uQXNzZW1ibGllcz4KLSAgICA8UHJlZmVy
MzJCaXQ+ZmFsc2U8L1ByZWZlcjMyQml0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtR3Jv
dXA+Ci0gICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJtc2NvcmxpYiIgLz4KLSAgICA8UmVmZXJlbmNl
IEluY2x1ZGU9IlN5c3RlbSIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAg
PENvbXBpbGUgSW5jbHVkZT0iUHJvZ3JhbS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJQ
cm9wZXJ0aWVzXEFzc2VtYmx5SW5mby5jcyIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3Jv
dXA+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iLi5cR29vZ2xlLlByb3RvYnVmXEdv
b2dsZS5Qcm90b2J1Zi5jc3Byb2oiPgotICAgICAgPFByb2plY3Q+ezY5MDhCRENFLUQ5MjUtNDNG
My05NEFDLUE1MzFFNkRGMjU5MX08L1Byb2plY3Q+Ci0gICAgICA8TmFtZT5Hb29nbGUuUHJvdG9i
dWY8L05hbWU+Ci0gICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0
ZW1Hcm91cD4KLSAgICA8Tm9uZSBJbmNsdWRlPSJhcHAuY29uZmlnIiAvPgotICA8L0l0ZW1Hcm91
cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKE1TQnVpbGRUb29sc1BhdGgpXE1pY3Jvc29mdC5DU2hh
cnAudGFyZ2V0cyIgLz4KLSAgPCEtLSBUbyBtb2RpZnkgeW91ciBidWlsZCBwcm9jZXNzLCBhZGQg
eW91ciB0YXNrIGluc2lkZSBvbmUgb2YgdGhlIHRhcmdldHMgYmVsb3cgYW5kIHVuY29tbWVudCBp
dC4gCi0gICAgICAgT3RoZXIgc2ltaWxhciBleHRlbnNpb24gcG9pbnRzIGV4aXN0LCBzZWUgTWlj
cm9zb2Z0LkNvbW1vbi50YXJnZXRzLgotICA8VGFyZ2V0IE5hbWU9IkJlZm9yZUJ1aWxkIj4KLSAg
PC9UYXJnZXQ+Ci0gIDxUYXJnZXQgTmFtZT0iQWZ0ZXJCdWlsZCI+Ci0gIDwvVGFyZ2V0PgotICAt
LT4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Nz
aGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkpzb25EdW1wL1Byb2dyYW0uY3MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMv
R29vZ2xlLlByb3RvYnVmLkpzb25EdW1wL1Byb2dyYW0uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGU4YTYwNzNlMmJjYjZiNmY0N2RhZmIxZjY3ZjMxZGU5YjRhODY3MWEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi5Kc29uRHVtcC9Qcm9ncmFtLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAs
MCBAQAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcg
U3lzdGVtLklPOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLlByb3RvRHVtcAotewotICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gU21hbGwgdXRpbGl0eSB0byBsb2FkIGEgYmluYXJ5IG1l
c3NhZ2UgYW5kIGR1bXAgaXQgaW4gSlNPTiBmb3JtYXQuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICBpbnRlcm5hbCBjbGFzcyBQcm9ncmFtCi0gICAgewotICAgICAgICBwcml2YXRlIHN0YXRpYyBp
bnQgTWFpbihzdHJpbmdbXSBhcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXJncy5M
ZW5ndGggIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25zb2xlLkVycm9y
LldyaXRlTGluZSgiVXNhZ2U6IEdvb2dsZS5Qcm90b2J1Zi5Kc29uRHVtcCA8ZGVzY3JpcHRvciB0
eXBlIG5hbWU+IDxpbnB1dCBkYXRhPiIpOwotICAgICAgICAgICAgICAgIENvbnNvbGUuRXJyb3Iu
V3JpdGVMaW5lKCJUaGUgZGVzY3JpcHRvciB0eXBlIG5hbWUgaXMgdGhlIGZ1bGx5LXF1YWxpZmll
ZCBtZXNzYWdlIG5hbWUsIik7Ci0gICAgICAgICAgICAgICAgQ29uc29sZS5FcnJvci5Xcml0ZUxp
bmUoImluY2x1ZGluZyBhc3NlbWJseSBlLmcuIFByb2plY3ROYW1lc3BhY2UuTWVzc2FnZSxDb21w
YW55LlByb2plY3QiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFR5cGUgdHlwZSA9IFR5cGUuR2V0VHlwZShhcmdzWzBdKTsKLSAgICAgICAg
ICAgIGlmICh0eXBlID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29u
c29sZS5FcnJvci5Xcml0ZUxpbmUoIlVuYWJsZSB0byBsb2FkIHR5cGUgezB9LiIsIGFyZ3NbMF0p
OwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKCF0eXBlb2YoSU1lc3NhZ2UpLklzQXNzaWduYWJsZUZyb20odHlwZSkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgQ29uc29sZS5FcnJvci5Xcml0ZUxpbmUoIlR5cGUgezB9IGRv
ZXNuJ3QgaW1wbGVtZW50IElNZXNzYWdlLiIsIGFyZ3NbMF0pOwotICAgICAgICAgICAgICAgIHJl
dHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgSU1lc3NhZ2UgbWVzc2FnZSA9IChJ
TWVzc2FnZSkgQWN0aXZhdG9yLkNyZWF0ZUluc3RhbmNlKHR5cGUpOwotICAgICAgICAgICAgdXNp
bmcgKHZhciBpbnB1dCA9IEZpbGUuT3BlblJlYWQoYXJnc1sxXSkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbWVzc2FnZS5NZXJnZUZyb20oaW5wdXQpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUobWVzc2FnZSk7Ci0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkpzb25EdW1wL1Byb3BlcnRpZXMv
QXNzZW1ibHlJbmZvLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5Kc29uRHVtcC9Qcm9w
ZXJ0aWVzL0Fzc2VtYmx5SW5mby5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEy
OWQyZDQ3MjJlNGRkYjliNDBmZTMzMWQ5YmIzNzBkYWE1NjQzZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkpz
b25EdW1wL1Byb3BlcnRpZXMvQXNzZW1ibHlJbmZvLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTkg
KzAsMCBAQAotdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247Ci11c2luZyBTeXN0ZW0uUnVudGltZS5D
b21waWxlclNlcnZpY2VzOwotdXNpbmcgU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzOwot
Ci0vLyBHZW5lcmFsIEluZm9ybWF0aW9uIGFib3V0IGFuIGFzc2VtYmx5IGlzIGNvbnRyb2xsZWQg
dGhyb3VnaCB0aGUgZm9sbG93aW5nIAotLy8gc2V0IG9mIGF0dHJpYnV0ZXMuIENoYW5nZSB0aGVz
ZSBhdHRyaWJ1dGUgdmFsdWVzIHRvIG1vZGlmeSB0aGUgaW5mb3JtYXRpb24KLS8vIGFzc29jaWF0
ZWQgd2l0aCBhbiBhc3NlbWJseS4KLQotW2Fzc2VtYmx5OiBBc3NlbWJseVRpdGxlKCJQcm90b0R1
bXAiKV0KLVthc3NlbWJseTogQXNzZW1ibHlEZXNjcmlwdGlvbigiIildCi1bYXNzZW1ibHk6IEFz
c2VtYmx5Q29uZmlndXJhdGlvbigiIildCi1bYXNzZW1ibHk6IEFzc2VtYmx5Q29tcGFueSgiIild
Ci1bYXNzZW1ibHk6IEFzc2VtYmx5UHJvZHVjdCgiUHJvdG9EdW1wIildCi1bYXNzZW1ibHk6IEFz
c2VtYmx5Q29weXJpZ2h0KCJDb3B5cmlnaHQgwqkgIDIwMTUiKV0KLVthc3NlbWJseTogQXNzZW1i
bHlUcmFkZW1hcmsoIiIpXQotW2Fzc2VtYmx5OiBBc3NlbWJseUN1bHR1cmUoIiIpXQotCi1bYXNz
ZW1ibHk6IEFzc2VtYmx5VmVyc2lvbigiMy4wLjAuMCIpXQotW2Fzc2VtYmx5OiBBc3NlbWJseUZp
bGVWZXJzaW9uKCIzLjAuMC4wIildCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmLkpzb25EdW1wL2FwcC5jb25maWcgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLkpzb25E
dW1wL2FwcC5jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMjc4YTQ1NjMx
NWUxMzIyMjY1YWJiOWQ0NjIzMWJiYWRkYjk4OGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5Kc29uRHVtcC9h
cHAuY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGNvbmZpZ3VyYXRpb24+Ci08c3RhcnR1cD48c3VwcG9y
dGVkUnVudGltZSB2ZXJzaW9uPSJ2NC4wIiBza3U9Ii5ORVRGcmFtZXdvcmssVmVyc2lvbj12NC41
Ii8+PC9zdGFydHVwPjwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYuVGVzdC9CeXRlU3RyaW5nVGVzdC5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJv
dG9idWYuVGVzdC9CeXRlU3RyaW5nVGVzdC5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODkzNWI3ODI5ZDRhOTVhNzAzMzYyYjVlYjMxNzIyM2VmNjZhZTBiOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmLlRlc3QvQnl0ZVN0cmluZ1Rlc3QuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBA
QAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lz
dGVtLlRleHQ7Ci11c2luZyBOVW5pdC5GcmFtZXdvcms7Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJv
dG9idWYKLXsKLSAgICBwdWJsaWMgY2xhc3MgQnl0ZVN0cmluZ1Rlc3QKLSAgICB7Ci0gICAgICAg
IFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBFcXVhbGl0eSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEJ5dGVTdHJpbmcgYjEgPSBCeXRlU3RyaW5nLkNvcHlGcm9tKDEsIDIsIDMpOwotICAg
ICAgICAgICAgQnl0ZVN0cmluZyBiMiA9IEJ5dGVTdHJpbmcuQ29weUZyb20oMSwgMiwgMyk7Ci0g
ICAgICAgICAgICBCeXRlU3RyaW5nIGIzID0gQnl0ZVN0cmluZy5Db3B5RnJvbSgxLCAyLCA0KTsK
LSAgICAgICAgICAgIEJ5dGVTdHJpbmcgYjQgPSBCeXRlU3RyaW5nLkNvcHlGcm9tKDEsIDIsIDMs
IDQpOwotICAgICAgICAgICAgRXF1YWxpdHlUZXN0ZXIuQXNzZXJ0RXF1YWxpdHkoYjEsIGIxKTsK
LSAgICAgICAgICAgIEVxdWFsaXR5VGVzdGVyLkFzc2VydEVxdWFsaXR5KGIxLCBiMik7Ci0gICAg
ICAgICAgICBFcXVhbGl0eVRlc3Rlci5Bc3NlcnRJbmVxdWFsaXR5KGIxLCBiMyk7Ci0gICAgICAg
ICAgICBFcXVhbGl0eVRlc3Rlci5Bc3NlcnRJbmVxdWFsaXR5KGIxLCBiNCk7Ci0gICAgICAgICAg
ICBFcXVhbGl0eVRlc3Rlci5Bc3NlcnRJbmVxdWFsaXR5KGIxLCBudWxsKTsKLSNwcmFnbWEgd2Fy
bmluZyBkaXNhYmxlIDE3MTggLy8gRGVsaWJlcmF0ZWx5IGNhbGxpbmcgPT0oYjEsIGIxKSBhbmQg
IT0oYjEsIGIxKQotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShiMSA9PSBiMSk7Ci0gICAgICAg
ICAgICBBc3NlcnQuSXNUcnVlKGIxID09IGIyKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNl
KGIxID09IGIzKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKGIxID09IGI0KTsKLSAgICAg
ICAgICAgIEFzc2VydC5Jc0ZhbHNlKGIxID09IG51bGwpOwotICAgICAgICAgICAgQXNzZXJ0Lklz
VHJ1ZSgoQnl0ZVN0cmluZykgbnVsbCA9PSBudWxsKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc0Zh
bHNlKGIxICE9IGIxKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKGIxICE9IGIyKTsKLSNw
cmFnbWEgd2FybmluZyBkaXNhYmxlIDE3MTgKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUoYjEg
IT0gYjMpOwotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShiMSAhPSBiNCk7Ci0gICAgICAgICAg
ICBBc3NlcnQuSXNUcnVlKGIxICE9IG51bGwpOwotICAgICAgICAgICAgQXNzZXJ0LklzRmFsc2Uo
KEJ5dGVTdHJpbmcpIG51bGwgIT0gbnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0K
LSAgICAgICAgcHVibGljIHZvaWQgRW1wdHlCeXRlU3RyaW5nSGFzWmVyb1NpemUoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMCwgQnl0ZVN0cmluZy5FbXB0eS5MZW5n
dGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIENv
cHlGcm9tU3RyaW5nV2l0aEV4cGxpY2l0RW5jb2RpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBCeXRlU3RyaW5nIGJzID0gQnl0ZVN0cmluZy5Db3B5RnJvbSgiQUIiLCBFbmNvZGluZy5Vbmlj
b2RlKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCg0LCBicy5MZW5ndGgpOwotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKDY1LCBic1swXSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoMCwgYnNbMV0pOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDY2LCBic1syXSk7
Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMCwgYnNbM10pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIElzRW1wdHlXaGVuRW1wdHkoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBc3NlcnQuSXNUcnVlKEJ5dGVTdHJpbmcuQ29weUZyb21VdGY4
KCIiKS5Jc0VtcHR5KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJs
aWMgdm9pZCBJc0VtcHR5V2hlbk5vdEVtcHR5KCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNz
ZXJ0LklzRmFsc2UoQnl0ZVN0cmluZy5Db3B5RnJvbVV0ZjgoIlgiKS5Jc0VtcHR5KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBDb3B5RnJvbUJ5dGVB
cnJheUNvcGllc0NvbnRlbnRzKCkKLSAgICAgICAgewotICAgICAgICAgICAgYnl0ZVtdIGRhdGEg
PSBuZXcgYnl0ZVsxXTsKLSAgICAgICAgICAgIGRhdGFbMF0gPSAxMDsKLSAgICAgICAgICAgIEJ5
dGVTdHJpbmcgYnMgPSBCeXRlU3RyaW5nLkNvcHlGcm9tKGRhdGEpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKDEwLCBic1swXSk7Ci0gICAgICAgICAgICBkYXRhWzBdID0gNTsKLSAgICAg
ICAgICAgIEFzc2VydC5BcmVFcXVhbCgxMCwgYnNbMF0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFRvQnl0ZUFycmF5Q29waWVzQ29udGVudHMoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlU3RyaW5nIGJzID0gQnl0ZVN0cmluZy5Db3B5RnJv
bVV0ZjgoIkhlbGxvIik7Ci0gICAgICAgICAgICBieXRlW10gZGF0YSA9IGJzLlRvQnl0ZUFycmF5
KCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoKGJ5dGUpJ0gnLCBkYXRhWzBdKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgoYnl0ZSknSCcsIGJzWzBdKTsKLSAgICAgICAgICAg
IGRhdGFbMF0gPSAwOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIGRhdGFbMF0pOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKChieXRlKSdIJywgYnNbMF0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIENvcHlGcm9tVXRmOFVzZXNV
dGY4KCkKLSAgICAgICAgewotICAgICAgICAgICAgQnl0ZVN0cmluZyBicyA9IEJ5dGVTdHJpbmcu
Q29weUZyb21VdGY4KCJcdTIwYWMiKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgzLCBi
cy5MZW5ndGgpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDB4ZTIsIGJzWzBdKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgweDgyLCBic1sxXSk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoMHhhYywgYnNbMl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0g
ICAgICAgIHB1YmxpYyB2b2lkIENvcHlGcm9tUG9ydGlvbigpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbXSB7MCwgMSwgMiwgMywgNCwgNSwgNn07Ci0gICAg
ICAgICAgICBCeXRlU3RyaW5nIGJzID0gQnl0ZVN0cmluZy5Db3B5RnJvbShkYXRhLCAyLCAzKTsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgzLCBicy5MZW5ndGgpOwotICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKDIsIGJzWzBdKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgz
LCBic1sxXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZv
aWQgVG9TdHJpbmdVdGY4KCkKLSAgICAgICAgewotICAgICAgICAgICAgQnl0ZVN0cmluZyBicyA9
IEJ5dGVTdHJpbmcuQ29weUZyb21VdGY4KCJcdTIwYWMiKTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbCgiXHUyMGFjIiwgYnMuVG9TdHJpbmdVdGY4KCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFRvU3RyaW5nV2l0aEV4cGxpY2l0RW5jb2Rp
bmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlU3RyaW5nIGJzID0gQnl0ZVN0cmluZy5D
b3B5RnJvbSgiXHUyMGFjIiwgRW5jb2RpbmcuVW5pY29kZSk7Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwoIlx1MjBhYyIsIGJzLlRvU3RyaW5nKEVuY29kaW5nLlVuaWNvZGUpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBGcm9tQmFzZTY0X1dp
dGhUZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtd
IHswLCAxLCAyLCAzLCA0LCA1LCA2fTsKLSAgICAgICAgICAgIHN0cmluZyBiYXNlNjQgPSBDb252
ZXJ0LlRvQmFzZTY0U3RyaW5nKGRhdGEpOwotICAgICAgICAgICAgQnl0ZVN0cmluZyBicyA9IEJ5
dGVTdHJpbmcuRnJvbUJhc2U2NChiYXNlNjQpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFs
KGRhdGEsIGJzLlRvQnl0ZUFycmF5KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0g
ICAgICAgIHB1YmxpYyB2b2lkIEZyb21CYXNlNjRfRW1wdHkoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICAvLyBPcHRpbWl6YXRpb24gd2hpY2ggYWxzbyBmaXhlcyBpc3N1ZSA2MS4KLSAgICAgICAg
ICAgIEFzc2VydC5BcmVTYW1lKEJ5dGVTdHJpbmcuRW1wdHksIEJ5dGVTdHJpbmcuRnJvbUJhc2U2
NCgiIikpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Db2RlZElucHV0U3Ry
ZWFtRXh0ZW5zaW9ucy5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Db2RlZElu
cHV0U3RyZWFtRXh0ZW5zaW9ucy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNh
ZjI4ODcwYWI0YmM2MmZhNzZhNTgyYWM3NTE3MmE1YjQyMDZhNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRl
c3QvQ29kZWRJbnB1dFN0cmVhbUV4dGVuc2lvbnMuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw1MyAr
MCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBOVW5pdC5GcmFt
ZXdvcms7Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYKLXsKLSAgICBpbnRlcm5hbCBzdGF0
aWMgY2xhc3MgQ29kZWRJbnB1dFN0cmVhbUV4dGVuc2lvbnMKLSAgICB7Ci0gICAgICAgIHB1Ymxp
YyBzdGF0aWMgdm9pZCBBc3NlcnROZXh0VGFnKHRoaXMgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwg
dWludCBleHBlY3RlZFRhZykKLSAgICAgICAgewotICAgICAgICAgICAgdWludCB0YWcgPSBpbnB1
dC5SZWFkVGFnKCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWRUYWcsIHRh
Zyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIFQgUmVhZE1lc3NhZ2U8VD4o
dGhpcyBDb2RlZElucHV0U3RyZWFtIHN0cmVhbSwgTWVzc2FnZVBhcnNlcjxUPiBwYXJzZXIpCi0g
ICAgICAgICAgICB3aGVyZSBUIDogSU1lc3NhZ2U8VD4KLSAgICAgICAgewotICAgICAgICAgICAg
dmFyIG1lc3NhZ2UgPSBwYXJzZXIuQ3JlYXRlVGVtcGxhdGUoKTsKLSAgICAgICAgICAgIHN0cmVh
bS5SZWFkTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgIHJldHVybiBtZXNzYWdlOwotICAg
ICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5U
ZXN0L0NvZGVkSW5wdXRTdHJlYW1UZXN0LmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5U
ZXN0L0NvZGVkSW5wdXRTdHJlYW1UZXN0LmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkNjI4ZWNjZWI2YzhhMzFmNjMyYjk2M2Q1MTdmOTQwMmFlNGM4NDgwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9i
dWYuVGVzdC9Db2RlZElucHV0U3RyZWFtVGVzdC5jcworKysgL2Rldi9udWxsCkBAIC0xLDU5OCAr
MCwwIEBACi0jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2lu
ZyBTeXN0ZW0uSU87Ci11c2luZyBHb29nbGUuUHJvdG9idWYuVGVzdFByb3RvczsKLXVzaW5nIE5V
bml0LkZyYW1ld29yazsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1ZgotewotICAgIHB1Ymxp
YyBjbGFzcyBDb2RlZElucHV0U3RyZWFtVGVzdAotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gSGVscGVyIHRvIGNvbnN0cnVjdCBhIGJ5dGUgYXJyYXkgZnJvbSBhIGJ1
bmNoIG9mIGJ5dGVzLiAgVGhlIGlucHV0cyBhcmUKLSAgICAgICAgLy8vIGFjdHVhbGx5IGludHMg
c28gdGhhdCBJIGNhbiB1c2UgaGV4IG5vdGF0aW9uIGFuZCBub3QgZ2V0IHN0dXBpZCBlcnJvcnMK
LSAgICAgICAgLy8vIGFib3V0IHByZWNpc2lvbi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAgICAgcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIEJ5dGVzKHBhcmFtcyBpbnRbXSBieXRlc0FzSW50
cykKLSAgICAgICAgewotICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbYnl0ZXNB
c0ludHMuTGVuZ3RoXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXNBc0lu
dHMuTGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnl0ZXNbaV0g
PSAoYnl0ZSkgYnl0ZXNBc0ludHNbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gYnl0ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyBQYXJzZXMgdGhlIGdpdmVuIGJ5dGVzIHVzaW5nIFJlYWRSYXdWYXJpbnQzMigpIGFuZCBSZWFk
UmF3VmFyaW50NjQoKQotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwcml2YXRlIHN0
YXRpYyB2b2lkIEFzc2VydFJlYWRWYXJpbnQoYnl0ZVtdIGRhdGEsIHVsb25nIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gbmV3IENvZGVkSW5w
dXRTdHJlYW0oZGF0YSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoKHVpbnQpIHZhbHVl
LCBpbnB1dC5SZWFkUmF3VmFyaW50MzIoKSk7Ci0KLSAgICAgICAgICAgIGlucHV0ID0gbmV3IENv
ZGVkSW5wdXRTdHJlYW0oZGF0YSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwodmFsdWUs
IGlucHV0LlJlYWRSYXdWYXJpbnQ2NCgpKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUoaW5w
dXQuSXNBdEVuZCk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSBkaWZmZXJlbnQgYmxvY2sgc2l6ZXMu
Ci0gICAgICAgICAgICBmb3IgKGludCBidWZmZXJTaXplID0gMTsgYnVmZmVyU2l6ZSA8PSAxNjsg
YnVmZmVyU2l6ZSAqPSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlucHV0ID0g
bmV3IENvZGVkSW5wdXRTdHJlYW0obmV3IFNtYWxsQmxvY2tJbnB1dFN0cmVhbShkYXRhLCBidWZm
ZXJTaXplKSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCh1aW50KSB2YWx1ZSwg
aW5wdXQuUmVhZFJhd1ZhcmludDMyKCkpOwotCi0gICAgICAgICAgICAgICAgaW5wdXQgPSBuZXcg
Q29kZWRJbnB1dFN0cmVhbShuZXcgU21hbGxCbG9ja0lucHV0U3RyZWFtKGRhdGEsIGJ1ZmZlclNp
emUpKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwodmFsdWUsIGlucHV0LlJlYWRS
YXdWYXJpbnQ2NCgpKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuSXNUcnVlKGlucHV0LklzQXRF
bmQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUcnkgcmVhZGluZyBkaXJlY3Rs
eSBmcm9tIGEgTWVtb3J5U3RyZWFtLiBXZSB3YW50IHRvIHZlcmlmeSB0aGF0IGl0Ci0gICAgICAg
ICAgICAvLyBkb2Vzbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgc28gd3JpdGUg
YW4gZXh0cmEgYnl0ZSAtIHRoaXMKLSAgICAgICAgICAgIC8vIGxldHMgdXMgdGVzdCB0aGUgcG9z
aXRpb24gYXQgdGhlIGVuZC4KLSAgICAgICAgICAgIE1lbW9yeVN0cmVhbSBtZW1vcnlTdHJlYW0g
PSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICBtZW1vcnlTdHJlYW0uV3JpdGUoZGF0
YSwgMCwgZGF0YS5MZW5ndGgpOwotICAgICAgICAgICAgbWVtb3J5U3RyZWFtLldyaXRlQnl0ZSgw
KTsKLSAgICAgICAgICAgIG1lbW9yeVN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwoKHVpbnQpIHZhbHVlLCBDb2RlZElucHV0U3RyZWFtLlJlYWRSYXdWYXJp
bnQzMihtZW1vcnlTdHJlYW0pKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChkYXRhLkxl
bmd0aCwgbWVtb3J5U3RyZWFtLlBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vIFBhcnNlcyB0aGUgZ2l2ZW4gYnl0ZXMgdXNpbmcgUmVhZFJh
d1ZhcmludDMyKCkgYW5kIFJlYWRSYXdWYXJpbnQ2NCgpIGFuZAotICAgICAgICAvLy8gZXhwZWN0
cyB0aGVtIHRvIGZhaWwgd2l0aCBhbiBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gd2hv
c2UKLSAgICAgICAgLy8vIGRlc2NyaXB0aW9uIG1hdGNoZXMgdGhlIGdpdmVuIG9uZS4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBBc3NlcnRSZWFk
VmFyaW50RmFpbHVyZShJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZXhwZWN0ZWQsIGJ5
dGVbXSBkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0
ID0gbmV3IENvZGVkSW5wdXRTdHJlYW0oZGF0YSk7Ci0gICAgICAgICAgICB2YXIgZXhjZXB0aW9u
ID0gQXNzZXJ0LlRocm93czxJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24+KCgpID0+IGlu
cHV0LlJlYWRSYXdWYXJpbnQzMigpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBl
Y3RlZC5NZXNzYWdlLCBleGNlcHRpb24uTWVzc2FnZSk7Ci0KLSAgICAgICAgICAgIGlucHV0ID0g
bmV3IENvZGVkSW5wdXRTdHJlYW0oZGF0YSk7Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBBc3Nl
cnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkgPT4gaW5wdXQuUmVh
ZFJhd1ZhcmludDY0KCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGV4cGVjdGVkLk1l
c3NhZ2UsIGV4Y2VwdGlvbi5NZXNzYWdlKTsKLQotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdl
IGdldCB0aGUgc2FtZSBlcnJvciB3aGVuIHJlYWRpbmcgZGlyZWN0bHkgZnJvbSBhIFN0cmVhbS4K
LSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEFzc2VydC5UaHJvd3M8SW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uPigoKSA9PiBDb2RlZElucHV0U3RyZWFtLlJlYWRSYXdWYXJpbnQzMihuZXcg
TWVtb3J5U3RyZWFtKGRhdGEpKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0
ZWQuTWVzc2FnZSwgZXhjZXB0aW9uLk1lc3NhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFJlYWRWYXJpbnQoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBc3NlcnRSZWFkVmFyaW50KEJ5dGVzKDB4MDApLCAwKTsKLSAgICAgICAgICAgIEFzc2Vy
dFJlYWRWYXJpbnQoQnl0ZXMoMHgwMSksIDEpOwotICAgICAgICAgICAgQXNzZXJ0UmVhZFZhcmlu
dChCeXRlcygweDdmKSwgMTI3KTsKLSAgICAgICAgICAgIC8vIDE0ODgyCi0gICAgICAgICAgICBB
c3NlcnRSZWFkVmFyaW50KEJ5dGVzKDB4YTIsIDB4NzQpLCAoMHgyMiA8PCAwKSB8ICgweDc0IDw8
IDcpKTsKLSAgICAgICAgICAgIC8vIDI5NjE0ODg4MzAKLSAgICAgICAgICAgIEFzc2VydFJlYWRW
YXJpbnQoQnl0ZXMoMHhiZSwgMHhmNywgMHg5MiwgMHg4NCwgMHgwYiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgweDNlIDw8IDApIHwgKDB4NzcgPDwgNykgfCAoMHgxMiA8PCAxNCkg
fCAoMHgwNCA8PCAyMSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwYkwgPDwg
MjgpKTsKLQotICAgICAgICAgICAgLy8gNjQtYml0Ci0gICAgICAgICAgICAvLyA3MjU2NDU2MTI2
Ci0gICAgICAgICAgICBBc3NlcnRSZWFkVmFyaW50KEJ5dGVzKDB4YmUsIDB4ZjcsIDB4OTIsIDB4
ODQsIDB4MWIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzZSA8PCAwKSB8ICgw
eDc3IDw8IDcpIHwgKDB4MTIgPDwgMTQpIHwgKDB4MDQgPDwgMjEpIHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKDB4MWJMIDw8IDI4KSk7Ci0gICAgICAgICAgICAvLyA0MTI1NjIwMjU4
MDcxODMzNgotICAgICAgICAgICAgQXNzZXJ0UmVhZFZhcmludChCeXRlcygweDgwLCAweGU2LCAw
eGViLCAweDljLCAweGMzLCAweGM5LCAweGE0LCAweDQ5KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKDB4MDAgPDwgMCkgfCAoMHg2NiA8PCA3KSB8ICgweDZiIDw8IDE0KSB8ICgweDFj
IDw8IDIxKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQzTCA8PCAyOCkgfCAo
MHg0OUwgPDwgMzUpIHwgKDB4MjRMIDw8IDQyKSB8ICgweDQ5TCA8PCA0OSkpOwotICAgICAgICAg
ICAgLy8gMTE5NjQzNzgzMzA5Nzg3MzUxMzEKLSAgICAgICAgICAgIEFzc2VydFJlYWRWYXJpbnQo
Qnl0ZXMoMHg5YiwgMHhhOCwgMHhmOSwgMHhjMiwgMHhiYiwgMHhkNiwgMHg4MCwgMHg4NSwgMHhh
NiwgMHgwMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFiIDw8IDApIHwgKDB4
MjggPDwgNykgfCAoMHg3OSA8PCAxNCkgfCAoMHg0MiA8PCAyMSkgfAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoMHgzYlVMIDw8IDI4KSB8ICgweDU2VUwgPDwgMzUpIHwgKDB4MDBVTCA8
PCA0MikgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNVVMIDw8IDQ5KSB8ICgw
eDI2VUwgPDwgNTYpIHwgKDB4MDFVTCA8PCA2MykpOwotCi0gICAgICAgICAgICAvLyBGYWlsdXJl
cwotICAgICAgICAgICAgQXNzZXJ0UmVhZFZhcmludEZhaWx1cmUoCi0gICAgICAgICAgICAgICAg
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLk1hbGZvcm1lZFZhcmludCgpLAotICAgICAg
ICAgICAgICAgIEJ5dGVzKDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMCkpOwotICAgICAg
ICAgICAgQXNzZXJ0UmVhZFZhcmludEZhaWx1cmUoCi0gICAgICAgICAgICAgICAgSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uLlRydW5jYXRlZE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAg
ICBCeXRlcygweDgwKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgIC8vLyBQYXJzZXMgdGhlIGdpdmVuIGJ5dGVzIHVzaW5nIFJlYWRSYXdMaXR0bGVFbmRpYW4z
MigpIGFuZCBjaGVja3MKLSAgICAgICAgLy8vIHRoYXQgdGhlIHJlc3VsdCBtYXRjaGVzIHRoZSBn
aXZlbiB2YWx1ZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJpdmF0ZSBzdGF0
aWMgdm9pZCBBc3NlcnRSZWFkTGl0dGxlRW5kaWFuMzIoYnl0ZVtdIGRhdGEsIHVpbnQgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgQ29k
ZWRJbnB1dFN0cmVhbShkYXRhKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCh2YWx1ZSwg
aW5wdXQuUmVhZFJhd0xpdHRsZUVuZGlhbjMyKCkpOwotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1
ZShpbnB1dC5Jc0F0RW5kKTsKLQotICAgICAgICAgICAgLy8gVHJ5IGRpZmZlcmVudCBibG9jayBz
aXplcy4KLSAgICAgICAgICAgIGZvciAoaW50IGJsb2NrU2l6ZSA9IDE7IGJsb2NrU2l6ZSA8PSAx
NjsgYmxvY2tTaXplICo9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5wdXQg
PSBuZXcgQ29kZWRJbnB1dFN0cmVhbSgKLSAgICAgICAgICAgICAgICAgICAgbmV3IFNtYWxsQmxv
Y2tJbnB1dFN0cmVhbShkYXRhLCBibG9ja1NpemUpKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwodmFsdWUsIGlucHV0LlJlYWRSYXdMaXR0bGVFbmRpYW4zMigpKTsKLSAgICAgICAg
ICAgICAgICBBc3NlcnQuSXNUcnVlKGlucHV0LklzQXRFbmQpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUGFyc2VzIHRoZSBn
aXZlbiBieXRlcyB1c2luZyBSZWFkUmF3TGl0dGxlRW5kaWFuNjQoKSBhbmQgY2hlY2tzCi0gICAg
ICAgIC8vLyB0aGF0IHRoZSByZXN1bHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gdmFsdWUuCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgQXNzZXJ0UmVhZExp
dHRsZUVuZGlhbjY0KGJ5dGVbXSBkYXRhLCB1bG9uZyB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBDb2RlZElucHV0U3RyZWFtKGRhdGEp
OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHZhbHVlLCBpbnB1dC5SZWFkUmF3TGl0dGxl
RW5kaWFuNjQoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNUcnVlKGlucHV0LklzQXRFbmQpOwot
Ci0gICAgICAgICAgICAvLyBUcnkgZGlmZmVyZW50IGJsb2NrIHNpemVzLgotICAgICAgICAgICAg
Zm9yIChpbnQgYmxvY2tTaXplID0gMTsgYmxvY2tTaXplIDw9IDE2OyBibG9ja1NpemUgKj0gMikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnB1dCA9IG5ldyBDb2RlZElucHV0U3Ry
ZWFtKAotICAgICAgICAgICAgICAgICAgICBuZXcgU21hbGxCbG9ja0lucHV0U3RyZWFtKGRhdGEs
IGJsb2NrU2l6ZSkpOwotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCh2YWx1ZSwgaW5w
dXQuUmVhZFJhd0xpdHRsZUVuZGlhbjY0KCkpOwotICAgICAgICAgICAgICAgIEFzc2VydC5Jc1Ry
dWUoaW5wdXQuSXNBdEVuZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBb
VGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgUmVhZExpdHRsZUVuZGlhbigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFzc2VydFJlYWRMaXR0bGVFbmRpYW4zMihCeXRlcygweDc4LCAweDU2LCAw
eDM0LCAweDEyKSwgMHgxMjM0NTY3OCk7Ci0gICAgICAgICAgICBBc3NlcnRSZWFkTGl0dGxlRW5k
aWFuMzIoQnl0ZXMoMHhmMCwgMHhkZSwgMHhiYywgMHg5YSksIDB4OWFiY2RlZjApOwotCi0gICAg
ICAgICAgICBBc3NlcnRSZWFkTGl0dGxlRW5kaWFuNjQoQnl0ZXMoMHhmMCwgMHhkZSwgMHhiYywg
MHg5YSwgMHg3OCwgMHg1NiwgMHgzNCwgMHgxMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxMjM0NTY3ODlhYmNkZWYwTCk7Ci0gICAgICAgICAgICBBc3NlcnRSZWFk
TGl0dGxlRW5kaWFuNjQoCi0gICAgICAgICAgICAgICAgQnl0ZXMoMHg3OCwgMHg1NiwgMHgzNCwg
MHgxMiwgMHhmMCwgMHhkZSwgMHhiYywgMHg5YSksIDB4OWFiY2RlZjAxMjM0NTY3OFVMKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBEZWNvZGVaaWda
YWczMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBDb2RlZElu
cHV0U3RyZWFtLkRlY29kZVppZ1phZzMyKDApKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgtMSwgQ29kZWRJbnB1dFN0cmVhbS5EZWNvZGVaaWdaYWczMigxKSk7Ci0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwoMSwgQ29kZWRJbnB1dFN0cmVhbS5EZWNvZGVaaWdaYWczMigyKSk7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoLTIsIENvZGVkSW5wdXRTdHJlYW0uRGVjb2RlWmln
WmFnMzIoMykpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDB4M0ZGRkZGRkYsIENvZGVk
SW5wdXRTdHJlYW0uRGVjb2RlWmlnWmFnMzIoMHg3RkZGRkZGRSkpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKHVuY2hlY2tlZCgoaW50KSAweEMwMDAwMDAwKSwgQ29kZWRJbnB1dFN0cmVh
bS5EZWNvZGVaaWdaYWczMigweDdGRkZGRkZGKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwoMHg3RkZGRkZGRiwgQ29kZWRJbnB1dFN0cmVhbS5EZWNvZGVaaWdaYWczMigweEZGRkZGRkZF
KSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwodW5jaGVja2VkKChpbnQpIDB4ODAwMDAw
MDApLCBDb2RlZElucHV0U3RyZWFtLkRlY29kZVppZ1phZzMyKDB4RkZGRkZGRkYpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBEZWNvZGVaaWdaYWc2
NCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBDb2RlZElucHV0
U3RyZWFtLkRlY29kZVppZ1phZzY0KDApKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgt
MSwgQ29kZWRJbnB1dFN0cmVhbS5EZWNvZGVaaWdaYWc2NCgxKSk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoMSwgQ29kZWRJbnB1dFN0cmVhbS5EZWNvZGVaaWdaYWc2NCgyKSk7Ci0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoLTIsIENvZGVkSW5wdXRTdHJlYW0uRGVjb2RlWmlnWmFn
NjQoMykpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDB4MDAwMDAwMDAzRkZGRkZGRkws
IENvZGVkSW5wdXRTdHJlYW0uRGVjb2RlWmlnWmFnNjQoMHgwMDAwMDAwMDdGRkZGRkZFTCkpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHVuY2hlY2tlZCgobG9uZykgMHhGRkZGRkZGRkMw
MDAwMDAwTCksIENvZGVkSW5wdXRTdHJlYW0uRGVjb2RlWmlnWmFnNjQoMHgwMDAwMDAwMDdGRkZG
RkZGTCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDB4MDAwMDAwMDA3RkZGRkZGRkws
IENvZGVkSW5wdXRTdHJlYW0uRGVjb2RlWmlnWmFnNjQoMHgwMDAwMDAwMEZGRkZGRkZFTCkpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHVuY2hlY2tlZCgobG9uZykgMHhGRkZGRkZGRjgw
MDAwMDAwTCksIENvZGVkSW5wdXRTdHJlYW0uRGVjb2RlWmlnWmFnNjQoMHgwMDAwMDAwMEZGRkZG
RkZGTCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDB4N0ZGRkZGRkZGRkZGRkZGRkws
IENvZGVkSW5wdXRTdHJlYW0uRGVjb2RlWmlnWmFnNjQoMHhGRkZGRkZGRkZGRkZGRkZFTCkpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHVuY2hlY2tlZCgobG9uZykgMHg4MDAwMDAwMDAw
MDAwMDAwTCksIENvZGVkSW5wdXRTdHJlYW0uRGVjb2RlWmlnWmFnNjQoMHhGRkZGRkZGRkZGRkZG
RkZGTCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVi
bGljIHZvaWQgUmVhZFdob2xlTWVzc2FnZV9WYXJ5aW5nQmxvY2tTaXplcygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0gU2FtcGxlTWVzc2FnZXMuQ3JlYXRl
RnVsbFRlc3RBbGxUeXBlcygpOwotCi0gICAgICAgICAgICBieXRlW10gcmF3Qnl0ZXMgPSBtZXNz
YWdlLlRvQnl0ZUFycmF5KCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwocmF3Qnl0ZXMu
TGVuZ3RoLCBtZXNzYWdlLkNhbGN1bGF0ZVNpemUoKSk7Ci0gICAgICAgICAgICBUZXN0QWxsVHlw
ZXMgbWVzc2FnZTIgPSBUZXN0QWxsVHlwZXMuUGFyc2VyLlBhcnNlRnJvbShyYXdCeXRlcyk7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobWVzc2FnZSwgbWVzc2FnZTIpOwotCi0gICAgICAg
ICAgICAvLyBUcnkgZGlmZmVyZW50IGJsb2NrIHNpemVzLgotICAgICAgICAgICAgZm9yIChpbnQg
YmxvY2tTaXplID0gMTsgYmxvY2tTaXplIDwgMjU2OyBibG9ja1NpemUgKj0gMikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlMiA9IFRlc3RBbGxUeXBlcy5QYXJzZXIuUGFy
c2VGcm9tKG5ldyBTbWFsbEJsb2NrSW5wdXRTdHJlYW0ocmF3Qnl0ZXMsIGJsb2NrU2l6ZSkpOwot
ICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLCBtZXNzYWdlMik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgW1Rlc3RdCi0g
ICAgICAgIHB1YmxpYyB2b2lkIFJlYWRIdWdlQmxvYigpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgMU1CIGJsb2IuCi0gICAgICAgICAgICBieXRl
W10gYmxvYiA9IG5ldyBieXRlWzEgPDwgMjBdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBibG9iLkxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJs
b2JbaV0gPSAoYnl0ZSkgaTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTWFrZSBh
IG1lc3NhZ2UgY29udGFpbmluZyBpdC4KLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRl
c3RBbGxUeXBlcyB7IFNpbmdsZUJ5dGVzID0gQnl0ZVN0cmluZy5Db3B5RnJvbShibG9iKSB9Owot
Ci0gICAgICAgICAgICAvLyBTZXJpYWxpemUgYW5kIHBhcnNlIGl0LiAgTWFrZSBzdXJlIHRvIHBh
cnNlIGZyb20gYW4gSW5wdXRTdHJlYW0sIG5vdAotICAgICAgICAgICAgLy8gZGlyZWN0bHkgZnJv
bSBhIEJ5dGVTdHJpbmcsIHNvIHRoYXQgQ29kZWRJbnB1dFN0cmVhbSB1c2VzIGJ1ZmZlcmVkCi0g
ICAgICAgICAgICAvLyByZWFkaW5nLgotICAgICAgICAgICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2Uy
ID0gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUZyb20obWVzc2FnZS5Ub0J5dGVTdHJpbmcoKSk7
Ci0KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLCBtZXNzYWdlMik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgUmVhZE1hbGljaW91
c2x5TGFyZ2VCbG9iKCkKLSAgICAgICAgewotICAgICAgICAgICAgTWVtb3J5U3RyZWFtIG1zID0g
bmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0
ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKG1zKTsKLQotICAgICAgICAgICAgdWludCB0YWcgPSBX
aXJlRm9ybWF0Lk1ha2VUYWcoMSwgV2lyZUZvcm1hdC5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQp
OwotICAgICAgICAgICAgb3V0cHV0LldyaXRlUmF3VmFyaW50MzIodGFnKTsKLSAgICAgICAgICAg
IG91dHB1dC5Xcml0ZVJhd1ZhcmludDMyKDB4N0ZGRkZGRkYpOwotICAgICAgICAgICAgb3V0cHV0
LldyaXRlUmF3Qnl0ZXMobmV3IGJ5dGVbMzJdKTsgLy8gUGFkIHdpdGggYSBmZXcgcmFuZG9tIGJ5
dGVzLgotICAgICAgICAgICAgb3V0cHV0LkZsdXNoKCk7Ci0gICAgICAgICAgICBtcy5Qb3NpdGlv
biA9IDA7Ci0KLSAgICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgQ29kZWRJ
bnB1dFN0cmVhbShtcyk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwodGFnLCBpbnB1dC5S
ZWFkVGFnKCkpOwotCi0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbj4oKCkgPT4gaW5wdXQuUmVhZEJ5dGVzKCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaW50ZXJuYWwgc3RhdGljIFRlc3RSZWN1cnNpdmVNZXNzYWdlIE1ha2VSZWN1cnNpdmVN
ZXNzYWdlKGludCBkZXB0aCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGRlcHRoID09IDAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXN0UmVjdXJzaXZl
TWVzc2FnZSB7IEkgPSA1IH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXN0UmVjdXJzaXZlTWVzc2Fn
ZSB7IEEgPSBNYWtlUmVjdXJzaXZlTWVzc2FnZShkZXB0aCAtIDEpIH07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgdm9pZCBBc3NlcnRNZXNzYWdl
RGVwdGgoVGVzdFJlY3Vyc2l2ZU1lc3NhZ2UgbWVzc2FnZSwgaW50IGRlcHRoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoZGVwdGggPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBBc3NlcnQuSXNOdWxsKG1lc3NhZ2UuQSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKDUsIG1lc3NhZ2UuSSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtZXNzYWdlLkEp
OwotICAgICAgICAgICAgICAgIEFzc2VydE1lc3NhZ2VEZXB0aChtZXNzYWdlLkEsIGRlcHRoIC0g
MSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgTWFsaWNpb3VzUmVjdXJzaW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Qnl0ZVN0cmluZyBkYXRhNjQgPSBNYWtlUmVjdXJzaXZlTWVzc2FnZSg2NCkuVG9CeXRlU3RyaW5n
KCk7Ci0gICAgICAgICAgICBCeXRlU3RyaW5nIGRhdGE2NSA9IE1ha2VSZWN1cnNpdmVNZXNzYWdl
KDY1KS5Ub0J5dGVTdHJpbmcoKTsKLQotICAgICAgICAgICAgQXNzZXJ0TWVzc2FnZURlcHRoKFRl
c3RSZWN1cnNpdmVNZXNzYWdlLlBhcnNlci5QYXJzZUZyb20oZGF0YTY0KSwgNjQpOwotCi0gICAg
ICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkg
PT4gVGVzdFJlY3Vyc2l2ZU1lc3NhZ2UuUGFyc2VyLlBhcnNlRnJvbShkYXRhNjUpKTsKLQotICAg
ICAgICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9IENvZGVkSW5wdXRTdHJlYW0uQ3JlYXRl
V2l0aExpbWl0cyhuZXcgTWVtb3J5U3RyZWFtKGRhdGE2NC5Ub0J5dGVBcnJheSgpKSwgMTAwMDAw
MCwgNjMpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24+KCgpID0+IFRlc3RSZWN1cnNpdmVNZXNzYWdlLlBhcnNlci5QYXJzZUZyb20oaW5w
dXQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBT
aXplTGltaXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBIYXZlIHRvIHVzZSBhIFN0cmVh
bSByYXRoZXIgdGhhbiBCeXRlU3RyaW5nLkNyZWF0ZUNvZGVkSW5wdXQgYXMgU2l6ZUxpbWl0IGRv
ZXNuJ3QKLSAgICAgICAgICAgIC8vIGFwcGx5IHRvIHRoZSBsYXR0ZXIgY2FzZS4KLSAgICAgICAg
ICAgIE1lbW9yeVN0cmVhbSBtcyA9IG5ldyBNZW1vcnlTdHJlYW0oU2FtcGxlTWVzc2FnZXMuQ3Jl
YXRlRnVsbFRlc3RBbGxUeXBlcygpLlRvQnl0ZUFycmF5KCkpOwotICAgICAgICAgICAgQ29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCA9IENvZGVkSW5wdXRTdHJlYW0uQ3JlYXRlV2l0aExpbWl0cyhtcywg
MTYsIDEwMCk7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZl
ckV4Y2VwdGlvbj4oKCkgPT4gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUZyb20oaW5wdXQpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFRlc3RzIHRo
YXQgaWYgd2UgcmVhZCBhbiBzdHJpbmcgdGhhdCBjb250YWlucyBpbnZhbGlkIFVURi04LCBubyBl
eGNlcHRpb24KLSAgICAgICAgLy8vIGlzIHRocm93bi4gIEluc3RlYWQsIHRoZSBpbnZhbGlkIGJ5
dGVzIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBVbmljb2RlCi0gICAgICAgIC8vLyAicmVwbGFjZW1l
bnQgY2hhcmFjdGVyIiBVK0ZGRkQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFtU
ZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBSZWFkSW52YWxpZFV0ZjgoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBNZW1vcnlTdHJlYW0gbXMgPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAg
ICAgICBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0obXMp
OwotCi0gICAgICAgICAgICB1aW50IHRhZyA9IFdpcmVGb3JtYXQuTWFrZVRhZygxLCBXaXJlRm9y
bWF0LldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVS
YXdWYXJpbnQzMih0YWcpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlUmF3VmFyaW50MzIoMSk7
Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVSYXdCeXRlcyhuZXcgYnl0ZVtdIHsweDgwfSk7Ci0g
ICAgICAgICAgICBvdXRwdXQuRmx1c2goKTsKLSAgICAgICAgICAgIG1zLlBvc2l0aW9uID0gMDsK
LQotICAgICAgICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBDb2RlZElucHV0U3Ry
ZWFtKG1zKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHRhZywgaW5wdXQuUmVhZFRh
ZygpKTsKLSAgICAgICAgICAgIHN0cmluZyB0ZXh0ID0gaW5wdXQuUmVhZFN0cmluZygpOwotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCdcdWZmZmQnLCB0ZXh0WzBdKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEEgc3RyZWFtIHdoaWNoIGxpbWl0
cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGl0IHJlYWRzIGF0IGEgdGltZS4KLSAgICAgICAgLy8vIFdl
IHVzZSB0aGlzIHRvIG1ha2Ugc3VyZSB0aGF0IENvZGVkSW5wdXRTdHJlYW0gZG9lc24ndCBzY3Jl
dyB1cCB3aGVuCi0gICAgICAgIC8vLyByZWFkaW5nIGluIHNtYWxsIGJsb2Nrcy4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJpdmF0ZSBzZWFsZWQgY2xhc3MgU21hbGxCbG9ja0lu
cHV0U3RyZWFtIDogTWVtb3J5U3RyZWFtCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaXZhdGUg
cmVhZG9ubHkgaW50IGJsb2NrU2l6ZTsKLQotICAgICAgICAgICAgcHVibGljIFNtYWxsQmxvY2tJ
bnB1dFN0cmVhbShieXRlW10gZGF0YSwgaW50IGJsb2NrU2l6ZSkKLSAgICAgICAgICAgICAgICA6
IGJhc2UoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGlzLmJsb2NrU2l6
ZSA9IGJsb2NrU2l6ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIG92ZXJy
aWRlIGludCBSZWFkKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBjb3VudCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5SZWFkKGJ1ZmZlciwgb2Zmc2V0
LCBNYXRoLk1pbihjb3VudCwgYmxvY2tTaXplKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdE5lZ2F0aXZlRW51bSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IHsgMHhGRSwgMHhGRiwgMHhG
RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMSB9OwotICAgICAgICAg
ICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBDb2RlZElucHV0U3RyZWFtKGJ5dGVzKTsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgoaW50KVNhbXBsZUVudW0uTmVnYXRpdmVWYWx1
ZSwgaW5wdXQuUmVhZEVudW0oKSk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNUcnVlKGlucHV0Lklz
QXRFbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy9Jc3N1ZSA3MToJQ29kZWRJbnB1dFN0cmVh
bS5SZWFkQnl0ZXMgZ28gdG8gc2xvdyBwYXRoIHVubmVjZXNzYXJpbHkKLSAgICAgICAgW1Rlc3Rd
Ci0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3RTbG93UGF0aEF2b2lkYW5jZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHVzaW5nICh2YXIgbXMgPSBuZXcgTWVtb3J5U3RyZWFtKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IENv
ZGVkT3V0cHV0U3RyZWFtKG1zKTsKLSAgICAgICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoMSwg
V2lyZUZvcm1hdC5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpOwotICAgICAgICAgICAgICAgIG91
dHB1dC5Xcml0ZUJ5dGVzKEJ5dGVTdHJpbmcuQ29weUZyb20obmV3IGJ5dGVbMTAwXSkpOwotICAg
ICAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygyLCBXaXJlRm9ybWF0LldpcmVUeXBlLkxlbmd0
aERlbGltaXRlZCk7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LldyaXRlQnl0ZXMoQnl0ZVN0cmlu
Zy5Db3B5RnJvbShuZXcgYnl0ZVsxMDBdKSk7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LkZsdXNo
KCk7Ci0KLSAgICAgICAgICAgICAgICBtcy5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAg
Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBDb2RlZElucHV0U3RyZWFtKG1zLCBuZXcgYnl0
ZVttcy5MZW5ndGggLyAyXSwgMCwgMCk7Ci0KLSAgICAgICAgICAgICAgICB1aW50IHRhZyA9IGlu
cHV0LlJlYWRUYWcoKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwgV2lyZUZv
cm1hdC5HZXRUYWdGaWVsZE51bWJlcih0YWcpKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoMTAwLCBpbnB1dC5SZWFkQnl0ZXMoKS5MZW5ndGgpOwotCi0gICAgICAgICAgICAgICAg
dGFnID0gaW5wdXQuUmVhZFRhZygpOwotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgy
LCBXaXJlRm9ybWF0LkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykpOwotICAgICAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbCgxMDAsIGlucHV0LlJlYWRCeXRlcygpLkxlbmd0aCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgVGFn
MFRocm93cygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBpbnB1dCA9IG5ldyBDb2RlZElu
cHV0U3RyZWFtKG5ldyBieXRlW10geyAwIH0pOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24+KCgpID0+IGlucHV0LlJlYWRUYWcoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2tpcEdyb3Vw
KCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIG91dHB1dCBzdHJlYW0gd2l0
aCBhIGdyb3VwIGluOgotICAgICAgICAgICAgLy8gRmllbGQgMTogc3RyaW5nICJmaWVsZCAxIgot
ICAgICAgICAgICAgLy8gRmllbGQgMjogZ3JvdXAgY29udGFpbmluZzoKLSAgICAgICAgICAgIC8v
ICAgRmllbGQgMTogZml4ZWQgaW50MzIgdmFsdWUgMTAwCi0gICAgICAgICAgICAvLyAgIEZpZWxk
IDI6IHN0cmluZyAiaWdub3JlIG1lIgotICAgICAgICAgICAgLy8gICBGaWVsZCAzOiBuZXN0ZWQg
Z3JvdXAgY29udGFpbmluZwotICAgICAgICAgICAgLy8gICAgICBGaWVsZCAxOiBmaXhlZCBpbnQ2
NCB2YWx1ZSAxMDAwCi0gICAgICAgICAgICAvLyBGaWVsZCAzOiBzdHJpbmcgImZpZWxkIDMiCi0g
ICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAg
dmFyIG91dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShzdHJlYW0pOwotICAgICAgICAgICAg
b3V0cHV0LldyaXRlVGFnKDEsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsK
LSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZygiZmllbGQgMSIpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBUaGUgb3V0ZXIgZ3JvdXAuLi4KLSAgICAgICAgICAgIG91dHB1dC5X
cml0ZVRhZygyLCBXaXJlRm9ybWF0LldpcmVUeXBlLlN0YXJ0R3JvdXApOwotICAgICAgICAgICAg
b3V0cHV0LldyaXRlVGFnKDEsIFdpcmVGb3JtYXQuV2lyZVR5cGUuRml4ZWQzMik7Ci0gICAgICAg
ICAgICBvdXRwdXQuV3JpdGVGaXhlZDMyKDEwMCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVU
YWcoMiwgV2lyZUZvcm1hdC5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpOwotICAgICAgICAgICAg
b3V0cHV0LldyaXRlU3RyaW5nKCJpZ25vcmUgbWUiKTsKLSAgICAgICAgICAgIC8vIFRoZSBuZXN0
ZWQgZ3JvdXAuLi4KLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygzLCBXaXJlRm9ybWF0Lldp
cmVUeXBlLlN0YXJ0R3JvdXApOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKDEsIFdpcmVG
b3JtYXQuV2lyZVR5cGUuRml4ZWQ2NCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVGaXhlZDY0
KDEwMDApOwotICAgICAgICAgICAgLy8gTm90ZTogTm90IHN1cmUgdGhlIGZpZWxkIG51bWJlciBp
cyByZWxldmFudCBmb3IgZW5kIGdyb3VwLi4uCi0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWco
MywgV2lyZUZvcm1hdC5XaXJlVHlwZS5FbmRHcm91cCk7Ci0KLSAgICAgICAgICAgIC8vIEVuZCB0
aGUgb3V0ZXIgZ3JvdXAKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygyLCBXaXJlRm9ybWF0
LldpcmVUeXBlLkVuZEdyb3VwKTsKLQotICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKDMsIFdp
cmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAgICAgICAgIG91dHB1dC5X
cml0ZVN0cmluZygiZmllbGQgMyIpOwotICAgICAgICAgICAgb3V0cHV0LkZsdXNoKCk7Ci0gICAg
ICAgICAgICBzdHJlYW0uUG9zaXRpb24gPSAwOwotCi0gICAgICAgICAgICAvLyBOb3cgYWN0IGxp
a2UgYSBnZW5lcmF0ZWQgY2xpZW50Ci0gICAgICAgICAgICB2YXIgaW5wdXQgPSBuZXcgQ29kZWRJ
bnB1dFN0cmVhbShzdHJlYW0pOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKFdpcmVGb3Jt
YXQuTWFrZVRhZygxLCBXaXJlRm9ybWF0LldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCksIGlucHV0
LlJlYWRUYWcoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoImZpZWxkIDEiLCBpbnB1
dC5SZWFkU3RyaW5nKCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKFdpcmVGb3JtYXQu
TWFrZVRhZygyLCBXaXJlRm9ybWF0LldpcmVUeXBlLlN0YXJ0R3JvdXApLCBpbnB1dC5SZWFkVGFn
KCkpOwotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOyAvLyBTaG91bGQgY29uc3Vt
ZSB0aGUgd2hvbGUgZ3JvdXAsIGluY2x1ZGluZyB0aGUgbmVzdGVkIG9uZS4KLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbChXaXJlRm9ybWF0Lk1ha2VUYWcoMywgV2lyZUZvcm1hdC5XaXJlVHlw
ZS5MZW5ndGhEZWxpbWl0ZWQpLCBpbnB1dC5SZWFkVGFnKCkpOwotICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKCJmaWVsZCAzIiwgaW5wdXQuUmVhZFN0cmluZygpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTa2lwR3JvdXBfV3JvbmdFbmRHcm91
cFRhZygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhbiBvdXRwdXQgc3RyZWFt
IHdpdGg6Ci0gICAgICAgICAgICAvLyBGaWVsZCAxOiBzdHJpbmcgImZpZWxkIDEiCi0gICAgICAg
ICAgICAvLyBTdGFydCBncm91cCAyCi0gICAgICAgICAgICAvLyAgIEZpZWxkIDM6IGZpeGVkIGlu
dDMyCi0gICAgICAgICAgICAvLyBFbmQgZ3JvdXAgNCAoc2hvdWxkIGdpdmUgYW4gZXJyb3IpCi0g
ICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAg
dmFyIG91dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShzdHJlYW0pOwotICAgICAgICAgICAg
b3V0cHV0LldyaXRlVGFnKDEsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsK
LSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZygiZmllbGQgMSIpOwotCi0gICAgICAgICAg
ICAvLyBUaGUgb3V0ZXIgZ3JvdXAuLi4KLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygyLCBX
aXJlRm9ybWF0LldpcmVUeXBlLlN0YXJ0R3JvdXApOwotICAgICAgICAgICAgb3V0cHV0LldyaXRl
VGFnKDMsIFdpcmVGb3JtYXQuV2lyZVR5cGUuRml4ZWQzMik7Ci0gICAgICAgICAgICBvdXRwdXQu
V3JpdGVGaXhlZDMyKDEwMCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoNCwgV2lyZUZv
cm1hdC5XaXJlVHlwZS5FbmRHcm91cCk7Ci0gICAgICAgICAgICBvdXRwdXQuRmx1c2goKTsKLSAg
ICAgICAgICAgIHN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0KLSAgICAgICAgICAgIC8vIE5vdyBhY3Qg
bGlrZSBhIGdlbmVyYXRlZCBjbGllbnQKLSAgICAgICAgICAgIHZhciBpbnB1dCA9IG5ldyBDb2Rl
ZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoV2lyZUZv
cm1hdC5NYWtlVGFnKDEsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKSwgaW5w
dXQuUmVhZFRhZygpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiZmllbGQgMSIsIGlu
cHV0LlJlYWRTdHJpbmcoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoV2lyZUZvcm1h
dC5NYWtlVGFnKDIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuU3RhcnRHcm91cCksIGlucHV0LlJlYWRU
YWcoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbj4oaW5wdXQuU2tpcExhc3RGaWVsZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVz
dF0KLSAgICAgICAgcHVibGljIHZvaWQgUm9ndWVFbmRHcm91cFRhZygpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZW5kLWdyb3VwIHRhZyB3aXRob3V0IGEgbGVhZGlu
ZyBzdGFydC1ncm91cCB0YWcsIGdlbmVyYXRlZAotICAgICAgICAgICAgLy8gY29kZSB3aWxsIGp1
c3QgY2FsbCBTa2lwTGFzdEZpZWxkLi4uIHNvIHRoYXQgc2hvdWxkIGZhaWwuCi0KLSAgICAgICAg
ICAgIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICB2YXIgb3V0
cHV0ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAgICBvdXRwdXQu
V3JpdGVUYWcoMSwgV2lyZUZvcm1hdC5XaXJlVHlwZS5FbmRHcm91cCk7Ci0gICAgICAgICAgICBv
dXRwdXQuRmx1c2goKTsKLSAgICAgICAgICAgIHN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0KLSAgICAg
ICAgICAgIHZhciBpbnB1dCA9IG5ldyBDb2RlZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAg
ICAgICBBc3NlcnQuQXJlRXF1YWwoV2lyZUZvcm1hdC5NYWtlVGFnKDEsIFdpcmVGb3JtYXQuV2ly
ZVR5cGUuRW5kR3JvdXApLCBpbnB1dC5SZWFkVGFnKCkpOwotICAgICAgICAgICAgQXNzZXJ0LlRo
cm93czxJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24+KGlucHV0LlNraXBMYXN0RmllbGQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEVuZE9m
U3RyZWFtUmVhY2hlZFdoaWxlU2tpcHBpbmdHcm91cCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICB2YXIgb3V0cHV0
ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAgICBvdXRwdXQuV3Jp
dGVUYWcoMSwgV2lyZUZvcm1hdC5XaXJlVHlwZS5TdGFydEdyb3VwKTsKLSAgICAgICAgICAgIG91
dHB1dC5Xcml0ZVRhZygyLCBXaXJlRm9ybWF0LldpcmVUeXBlLlN0YXJ0R3JvdXApOwotICAgICAg
ICAgICAgb3V0cHV0LldyaXRlVGFnKDIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuRW5kR3JvdXApOwot
Ci0gICAgICAgICAgICBvdXRwdXQuRmx1c2goKTsKLSAgICAgICAgICAgIHN0cmVhbS5Qb3NpdGlv
biA9IDA7Ci0KLSAgICAgICAgICAgIC8vIE5vdyBhY3QgbGlrZSBhIGdlbmVyYXRlZCBjbGllbnQK
LSAgICAgICAgICAgIHZhciBpbnB1dCA9IG5ldyBDb2RlZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0g
ICAgICAgICAgICBpbnB1dC5SZWFkVGFnKCk7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oaW5wdXQuU2tpcExhc3RGaWVsZCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgUmVjdXJzaW9uTGlt
aXRBcHBsaWVkV2hpbGVTa2lwcGluZ0dyb3VwKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFy
IHN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIHZhciBvdXRwdXQgPSBu
ZXcgQ29kZWRPdXRwdXRTdHJlYW0oc3RyZWFtKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgQ29kZWRJbnB1dFN0cmVhbS5EZWZhdWx0UmVjdXJzaW9uTGltaXQgKyAxOyBpKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKDEsIFdpcmVGb3Jt
YXQuV2lyZVR5cGUuU3RhcnRHcm91cCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IENvZGVkSW5wdXRTdHJlYW0uRGVmYXVsdFJlY3Vyc2lvbkxpbWl0ICsg
MTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygx
LCBXaXJlRm9ybWF0LldpcmVUeXBlLkVuZEdyb3VwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG91dHB1dC5GbHVzaCgpOwotICAgICAgICAgICAgc3RyZWFtLlBvc2l0aW9uID0gMDsKLQot
ICAgICAgICAgICAgLy8gTm93IGFjdCBsaWtlIGEgZ2VuZXJhdGVkIGNsaWVudAotICAgICAgICAg
ICAgdmFyIGlucHV0ID0gbmV3IENvZGVkSW5wdXRTdHJlYW0oc3RyZWFtKTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbChXaXJlRm9ybWF0Lk1ha2VUYWcoMSwgV2lyZUZvcm1hdC5XaXJlVHlw
ZS5TdGFydEdyb3VwKSwgaW5wdXQuUmVhZFRhZygpKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJv
d3M8SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uPihpbnB1dC5Ta2lwTGFzdEZpZWxkKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBDb25zdHJ1
Y3Rpb25fSW52YWxpZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJn
dW1lbnROdWxsRXhjZXB0aW9uPigoKSA9PiBuZXcgQ29kZWRJbnB1dFN0cmVhbSgoYnl0ZVtdKSBu
dWxsKSk7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50TnVsbEV4Y2VwdGlvbj4o
KCkgPT4gbmV3IENvZGVkSW5wdXRTdHJlYW0obnVsbCwgMCwgMCkpOwotICAgICAgICAgICAgQXNz
ZXJ0LlRocm93czxBcmd1bWVudE51bGxFeGNlcHRpb24+KCgpID0+IG5ldyBDb2RlZElucHV0U3Ry
ZWFtKChTdHJlYW0pIG51bGwpKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnRP
dXRPZlJhbmdlRXhjZXB0aW9uPigoKSA9PiBuZXcgQ29kZWRJbnB1dFN0cmVhbShuZXcgYnl0ZVsx
MF0sIDEwMCwgMCkpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE91dE9mUmFu
Z2VFeGNlcHRpb24+KCgpID0+IG5ldyBDb2RlZElucHV0U3RyZWFtKG5ldyBieXRlWzEwXSwgNSwg
MTApKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBD
cmVhdGVXaXRoTGltaXRzX0ludmFsaWRMaW1pdHMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93
czxBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24+KCgpID0+IENvZGVkSW5wdXRTdHJlYW0uQ3Jl
YXRlV2l0aExpbWl0cyhzdHJlYW0sIDAsIDEpKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8
QXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uPigoKSA9PiBDb2RlZElucHV0U3RyZWFtLkNyZWF0
ZVdpdGhMaW1pdHMoc3RyZWFtLCAxLCAwKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0K
LSAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZV9EaXNwb3Nlc1VuZGVybHlpbmdTdHJlYW0oKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVtb3J5U3RyZWFtID0gbmV3IE1lbW9yeVN0cmVh
bSgpOwotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShtZW1vcnlTdHJlYW0uQ2FuUmVhZCk7Ci0g
ICAgICAgICAgICB1c2luZyAodmFyIGNpcyA9IG5ldyBDb2RlZElucHV0U3RyZWFtKG1lbW9yeVN0
cmVhbSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBc3NlcnQu
SXNGYWxzZShtZW1vcnlTdHJlYW0uQ2FuUmVhZCk7IC8vIERpc3Bvc2VkCi0gICAgICAgIH0KLQot
ICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZV9XaXRoTGVhdmVPcGVu
KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lbW9yeVN0cmVhbSA9IG5ldyBNZW1vcnlT
dHJlYW0oKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUobWVtb3J5U3RyZWFtLkNhblJlYWQp
OwotICAgICAgICAgICAgdXNpbmcgKHZhciBjaXMgPSBuZXcgQ29kZWRJbnB1dFN0cmVhbShtZW1v
cnlTdHJlYW0sIHRydWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgQXNzZXJ0LklzVHJ1ZShtZW1vcnlTdHJlYW0uQ2FuUmVhZCk7IC8vIFdlIGxlZnQgdGhlIHN0
cmVhbSBvcGVuCi0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0NvZGVkT3V0cHV0
U3RyZWFtVGVzdC5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Db2RlZE91dHB1
dFN0cmVhbVRlc3QuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYmNiMTc2MDY1
OGFiNmRmODQ1YjE4N2NiYzY0OTU5OWIxODQ0NjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0NvZGVk
T3V0cHV0U3RyZWFtVGVzdC5jcworKysgL2Rldi9udWxsCkBAIC0xLDQxOSArMCwwIEBACi0jcmVn
aW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87
Ci11c2luZyBHb29nbGUuUHJvdG9idWYuVGVzdFByb3RvczsKLXVzaW5nIE5Vbml0LkZyYW1ld29y
azsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1ZgotewotICAgIHB1YmxpYyBjbGFzcyBDb2Rl
ZE91dHB1dFN0cmVhbVRlc3QKLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAg
Ly8vIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdXNpbmcgV3JpdGVSYXdWYXJpbnQzMigpIGFuZCBX
cml0ZVJhd1ZhcmludDY0KCkgYW5kCi0gICAgICAgIC8vLyBjaGVja3MgdGhhdCB0aGUgcmVzdWx0
IG1hdGNoZXMgdGhlIGdpdmVuIGJ5dGVzCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IHByaXZhdGUgc3RhdGljIHZvaWQgQXNzZXJ0V3JpdGVWYXJpbnQoYnl0ZVtdIGRhdGEsIHVsb25n
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBPbmx5IGRvIDMyLWJpdCB3cml0ZSBp
ZiB0aGUgdmFsdWUgZml0cyBpbiAzMiBiaXRzLgotICAgICAgICAgICAgaWYgKCh2YWx1ZSA+PiAz
MikgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBNZW1vcnlTdHJlYW0gcmF3
T3V0cHV0ID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgICAgIENvZGVkT3V0cHV0
U3RyZWFtIG91dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShyYXdPdXRwdXQpOwotICAgICAg
ICAgICAgICAgIG91dHB1dC5Xcml0ZVJhd1ZhcmludDMyKCh1aW50KSB2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgb3V0cHV0LkZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFs
KGRhdGEsIHJhd091dHB1dC5Ub0FycmF5KCkpOwotICAgICAgICAgICAgICAgIC8vIEFsc28gdHJ5
IGNvbXB1dGluZyBzaXplLgotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChkYXRhLkxl
bmd0aCwgQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZSgodWludCkgdmFs
dWUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE1l
bW9yeVN0cmVhbSByYXdPdXRwdXQgPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAg
ICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKHJhd091
dHB1dCk7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LldyaXRlUmF3VmFyaW50NjQodmFsdWUpOwot
ICAgICAgICAgICAgICAgIG91dHB1dC5GbHVzaCgpOwotICAgICAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbChkYXRhLCByYXdPdXRwdXQuVG9BcnJheSgpKTsKLQotICAgICAgICAgICAgICAgIC8v
IEFsc28gdHJ5IGNvbXB1dGluZyBzaXplLgotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bChkYXRhLkxlbmd0aCwgQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVJhd1ZhcmludDY0U2l6ZSh2
YWx1ZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUcnkgZGlmZmVyZW50IGJ1
ZmZlciBzaXplcy4KLSAgICAgICAgICAgIGZvciAoaW50IGJ1ZmZlclNpemUgPSAxOyBidWZmZXJT
aXplIDw9IDE2OyBidWZmZXJTaXplICo9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgLy8gT25seSBkbyAzMi1iaXQgd3JpdGUgaWYgdGhlIHZhbHVlIGZpdHMgaW4gMzIgYml0cy4K
LSAgICAgICAgICAgICAgICBpZiAoKHZhbHVlID4+IDMyKSA9PSAwKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgTWVtb3J5U3RyZWFtIHJhd091dHB1dCA9IG5ldyBNZW1v
cnlTdHJlYW0oKTsKLSAgICAgICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0
ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb2RlZE91dHB1dFN0cmVhbShyYXdPdXRw
dXQsIGJ1ZmZlclNpemUpOwotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuV3JpdGVSYXdWYXJp
bnQzMigodWludCkgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuRmx1c2goKTsK
LSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGRhdGEsIHJhd091dHB1dC5Ub0Fy
cmF5KCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgTWVtb3J5U3RyZWFtIHJhd091dHB1dCA9IG5ldyBNZW1vcnlTdHJlYW0oKTsK
LSAgICAgICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IENvZGVk
T3V0cHV0U3RyZWFtKHJhd091dHB1dCwgYnVmZmVyU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IG91dHB1dC5Xcml0ZVJhd1ZhcmludDY0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LkZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChkYXRhLCBy
YXdPdXRwdXQuVG9BcnJheSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUZXN0cyBXcml0
ZVJhd1ZhcmludDMyKCkgYW5kIFdyaXRlUmF3VmFyaW50NjQoKQotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgV3JpdGVWYXJpbnQoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnRXcml0ZVZhcmludChuZXcgYnl0ZVtdIHsweDAw
fSwgMCk7Ci0gICAgICAgICAgICBBc3NlcnRXcml0ZVZhcmludChuZXcgYnl0ZVtdIHsweDAxfSwg
MSk7Ci0gICAgICAgICAgICBBc3NlcnRXcml0ZVZhcmludChuZXcgYnl0ZVtdIHsweDdmfSwgMTI3
KTsKLSAgICAgICAgICAgIC8vIDE0ODgyCi0gICAgICAgICAgICBBc3NlcnRXcml0ZVZhcmludChu
ZXcgYnl0ZVtdIHsweGEyLCAweDc0fSwgKDB4MjIgPDwgMCkgfCAoMHg3NCA8PCA3KSk7Ci0gICAg
ICAgICAgICAvLyAyOTYxNDg4ODMwCi0gICAgICAgICAgICBBc3NlcnRXcml0ZVZhcmludChuZXcg
Ynl0ZVtdIHsweGJlLCAweGY3LCAweDkyLCAweDg0LCAweDBifSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICgweDNlIDw8IDApIHwgKDB4NzcgPDwgNykgfCAoMHgxMiA8PCAxNCkgfCAo
MHgwNCA8PCAyMSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MGJMIDw8IDI4
KSk7Ci0KLSAgICAgICAgICAgIC8vIDY0LWJpdAotICAgICAgICAgICAgLy8gNzI1NjQ1NjEyNgot
ICAgICAgICAgICAgQXNzZXJ0V3JpdGVWYXJpbnQobmV3IGJ5dGVbXSB7MHhiZSwgMHhmNywgMHg5
MiwgMHg4NCwgMHgxYn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzZSA8PCAw
KSB8ICgweDc3IDw8IDcpIHwgKDB4MTIgPDwgMTQpIHwgKDB4MDQgPDwgMjEpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgweDFiTCA8PCAyOCkpOwotICAgICAgICAgICAgLy8gNDEy
NTYyMDI1ODA3MTgzMzYKLSAgICAgICAgICAgIEFzc2VydFdyaXRlVmFyaW50KAotICAgICAgICAg
ICAgICAgIG5ldyBieXRlW10gezB4ODAsIDB4ZTYsIDB4ZWIsIDB4OWMsIDB4YzMsIDB4YzksIDB4
YTQsIDB4NDl9LAotICAgICAgICAgICAgICAgICgweDAwIDw8IDApIHwgKDB4NjYgPDwgNykgfCAo
MHg2YiA8PCAxNCkgfCAoMHgxYyA8PCAyMSkgfAotICAgICAgICAgICAgICAgICgweDQzVUwgPDwg
MjgpIHwgKDB4NDlMIDw8IDM1KSB8ICgweDI0VUwgPDwgNDIpIHwgKDB4NDlVTCA8PCA0OSkpOwot
ICAgICAgICAgICAgLy8gMTE5NjQzNzgzMzA5Nzg3MzUxMzEKLSAgICAgICAgICAgIEFzc2VydFdy
aXRlVmFyaW50KAotICAgICAgICAgICAgICAgIG5ldyBieXRlW10gezB4OWIsIDB4YTgsIDB4Zjks
IDB4YzIsIDB4YmIsIDB4ZDYsIDB4ODAsIDB4ODUsIDB4YTYsIDB4MDF9LAotICAgICAgICAgICAg
ICAgIHVuY2hlY2tlZCgodWxvbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgoMHgxYiA8
PCAwKSB8ICgweDI4IDw8IDcpIHwgKDB4NzkgPDwgMTQpIHwgKDB4NDIgPDwgMjEpIHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgweDNiTCA8PCAyOCkgfCAoMHg1NkwgPDwgMzUpIHwgKDB4
MDBMIDw8IDQyKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNUwgPDwgNDkpIHwg
KDB4MjZMIDw8IDU2KSB8ICgweDAxTCA8PCA2MykpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQYXJzZXMgdGhlIGdpdmVuIGJ5dGVzIHVzaW5nIFdy
aXRlUmF3TGl0dGxlRW5kaWFuMzIoKSBhbmQgY2hlY2tzCi0gICAgICAgIC8vLyB0aGF0IHRoZSBy
ZXN1bHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gdmFsdWUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgQXNzZXJ0V3JpdGVMaXR0bGVFbmRpYW4zMihieXRl
W10gZGF0YSwgdWludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgTWVtb3J5U3RyZWFt
IHJhd091dHB1dCA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIENvZGVkT3V0cHV0
U3RyZWFtIG91dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShyYXdPdXRwdXQpOwotICAgICAg
ICAgICAgb3V0cHV0LldyaXRlUmF3TGl0dGxlRW5kaWFuMzIodmFsdWUpOwotICAgICAgICAgICAg
b3V0cHV0LkZsdXNoKCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZGF0YSwgcmF3T3V0
cHV0LlRvQXJyYXkoKSk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSBkaWZmZXJlbnQgYnVmZmVyIHNp
emVzLgotICAgICAgICAgICAgZm9yIChpbnQgYnVmZmVyU2l6ZSA9IDE7IGJ1ZmZlclNpemUgPD0g
MTY7IGJ1ZmZlclNpemUgKj0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByYXdP
dXRwdXQgPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAgICAgb3V0cHV0ID0gbmV3
IENvZGVkT3V0cHV0U3RyZWFtKHJhd091dHB1dCwgYnVmZmVyU2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgb3V0cHV0LldyaXRlUmF3TGl0dGxlRW5kaWFuMzIodmFsdWUpOwotICAgICAgICAgICAgICAg
IG91dHB1dC5GbHVzaCgpOwotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChkYXRhLCBy
YXdPdXRwdXQuVG9BcnJheSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFBhcnNlcyB0aGUgZ2l2ZW4gYnl0ZXMgdXNpbmcg
V3JpdGVSYXdMaXR0bGVFbmRpYW42NCgpIGFuZCBjaGVja3MKLSAgICAgICAgLy8vIHRoYXQgdGhl
IHJlc3VsdCBtYXRjaGVzIHRoZSBnaXZlbiB2YWx1ZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBBc3NlcnRXcml0ZUxpdHRsZUVuZGlhbjY0KGJ5
dGVbXSBkYXRhLCB1bG9uZyB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgTWVtb3J5U3Ry
ZWFtIHJhd091dHB1dCA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIENvZGVkT3V0
cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShyYXdPdXRwdXQpOwotICAg
ICAgICAgICAgb3V0cHV0LldyaXRlUmF3TGl0dGxlRW5kaWFuNjQodmFsdWUpOwotICAgICAgICAg
ICAgb3V0cHV0LkZsdXNoKCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZGF0YSwgcmF3
T3V0cHV0LlRvQXJyYXkoKSk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSBkaWZmZXJlbnQgYmxvY2sg
c2l6ZXMuCi0gICAgICAgICAgICBmb3IgKGludCBibG9ja1NpemUgPSAxOyBibG9ja1NpemUgPD0g
MTY7IGJsb2NrU2l6ZSAqPSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJhd091
dHB1dCA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgICAgICBvdXRwdXQgPSBuZXcg
Q29kZWRPdXRwdXRTdHJlYW0ocmF3T3V0cHV0LCBibG9ja1NpemUpOwotICAgICAgICAgICAgICAg
IG91dHB1dC5Xcml0ZVJhd0xpdHRsZUVuZGlhbjY0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBv
dXRwdXQuRmx1c2goKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZGF0YSwgcmF3
T3V0cHV0LlRvQXJyYXkoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUZXN0cyB3cml0ZVJhd0xpdHRsZUVuZGlhbjMyKCkg
YW5kIHdyaXRlUmF3TGl0dGxlRW5kaWFuNjQoKS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFdyaXRlTGl0dGxlRW5kaWFuKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQXNzZXJ0V3JpdGVMaXR0bGVFbmRpYW4zMihuZXcgYnl0ZVtd
IHsweDc4LCAweDU2LCAweDM0LCAweDEyfSwgMHgxMjM0NTY3OCk7Ci0gICAgICAgICAgICBBc3Nl
cnRXcml0ZUxpdHRsZUVuZGlhbjMyKG5ldyBieXRlW10gezB4ZjAsIDB4ZGUsIDB4YmMsIDB4OWF9
LCAweDlhYmNkZWYwKTsKLQotICAgICAgICAgICAgQXNzZXJ0V3JpdGVMaXR0bGVFbmRpYW42NCgK
LSAgICAgICAgICAgICAgICBuZXcgYnl0ZVtdIHsweGYwLCAweGRlLCAweGJjLCAweDlhLCAweDc4
LCAweDU2LCAweDM0LCAweDEyfSwKLSAgICAgICAgICAgICAgICAweDEyMzQ1Njc4OWFiY2RlZjBM
KTsKLSAgICAgICAgICAgIEFzc2VydFdyaXRlTGl0dGxlRW5kaWFuNjQoCi0gICAgICAgICAgICAg
ICAgbmV3IGJ5dGVbXSB7MHg3OCwgMHg1NiwgMHgzNCwgMHgxMiwgMHhmMCwgMHhkZSwgMHhiYywg
MHg5YX0sCi0gICAgICAgICAgICAgICAgMHg5YWJjZGVmMDEyMzQ1Njc4VUwpOwotICAgICAgICB9
Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFdyaXRlV2hvbGVNZXNzYWdl
X1ZhcnlpbmdCbG9ja1NpemVzKCkKLSAgICAgICAgewotICAgICAgICAgICAgVGVzdEFsbFR5cGVz
IG1lc3NhZ2UgPSBTYW1wbGVNZXNzYWdlcy5DcmVhdGVGdWxsVGVzdEFsbFR5cGVzKCk7Ci0KLSAg
ICAgICAgICAgIGJ5dGVbXSByYXdCeXRlcyA9IG1lc3NhZ2UuVG9CeXRlQXJyYXkoKTsKLQotICAg
ICAgICAgICAgLy8gVHJ5IGRpZmZlcmVudCBibG9jayBzaXplcy4KLSAgICAgICAgICAgIGZvciAo
aW50IGJsb2NrU2l6ZSA9IDE7IGJsb2NrU2l6ZSA8IDI1NjsgYmxvY2tTaXplICo9IDIpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5U3RyZWFtIHJhd091dHB1dCA9IG5ldyBN
ZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgICAgICBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQg
PSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0ocmF3T3V0cHV0LCBibG9ja1NpemUpOwotICAgICAgICAg
ICAgICAgIG1lc3NhZ2UuV3JpdGVUbyhvdXRwdXQpOwotICAgICAgICAgICAgICAgIG91dHB1dC5G
bHVzaCgpOwotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChyYXdCeXRlcywgcmF3T3V0
cHV0LlRvQXJyYXkoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBFbmNvZGVaaWdaYWczMigpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwdSwgQ29kZWRPdXRwdXRTdHJlYW0uRW5j
b2RlWmlnWmFnMzIoMCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDF1LCBDb2RlZE91
dHB1dFN0cmVhbS5FbmNvZGVaaWdaYWczMigtMSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKDJ1LCBDb2RlZE91dHB1dFN0cmVhbS5FbmNvZGVaaWdaYWczMigxKSk7Ci0gICAgICAgICAg
ICBBc3NlcnQuQXJlRXF1YWwoM3UsIENvZGVkT3V0cHV0U3RyZWFtLkVuY29kZVppZ1phZzMyKC0y
KSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMHg3RkZGRkZGRXUsIENvZGVkT3V0cHV0
U3RyZWFtLkVuY29kZVppZ1phZzMyKDB4M0ZGRkZGRkYpKTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbCgweDdGRkZGRkZGdSwgQ29kZWRPdXRwdXRTdHJlYW0uRW5jb2RlWmlnWmFnMzIodW5j
aGVja2VkKChpbnQpIDB4QzAwMDAwMDApKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
MHhGRkZGRkZGRXUsIENvZGVkT3V0cHV0U3RyZWFtLkVuY29kZVppZ1phZzMyKDB4N0ZGRkZGRkYp
KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgweEZGRkZGRkZGdSwgQ29kZWRPdXRwdXRT
dHJlYW0uRW5jb2RlWmlnWmFnMzIodW5jaGVja2VkKChpbnQpIDB4ODAwMDAwMDApKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgRW5jb2RlWmlnWmFn
NjQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMHUsIENvZGVkT3V0
cHV0U3RyZWFtLkVuY29kZVppZ1phZzY0KDApKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgxdSwgQ29kZWRPdXRwdXRTdHJlYW0uRW5jb2RlWmlnWmFnNjQoLTEpKTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbCgydSwgQ29kZWRPdXRwdXRTdHJlYW0uRW5jb2RlWmlnWmFnNjQoMSkp
OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDN1LCBDb2RlZE91dHB1dFN0cmVhbS5FbmNv
ZGVaaWdaYWc2NCgtMikpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDB4MDAwMDAwMDA3
RkZGRkZGRXVMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkT3V0cHV0U3RyZWFt
LkVuY29kZVppZ1phZzY0KHVuY2hlY2tlZCgobG9uZykgMHgwMDAwMDAwMDNGRkZGRkZGVUwpKSk7
Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMHgwMDAwMDAwMDdGRkZGRkZGdUwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0uRW5jb2RlWmlnWmFnNjQo
dW5jaGVja2VkKChsb25nKSAweEZGRkZGRkZGQzAwMDAwMDBVTCkpKTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbCgweDAwMDAwMDAwRkZGRkZGRkV1TCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb2RlZE91dHB1dFN0cmVhbS5FbmNvZGVaaWdaYWc2NCh1bmNoZWNrZWQoKGxvbmcp
IDB4MDAwMDAwMDA3RkZGRkZGRlVMKSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDB4
MDAwMDAwMDBGRkZGRkZGRnVMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkT3V0
cHV0U3RyZWFtLkVuY29kZVppZ1phZzY0KHVuY2hlY2tlZCgobG9uZykgMHhGRkZGRkZGRjgwMDAw
MDAwVUwpKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMHhGRkZGRkZGRkZGRkZGRkZF
TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZE91dHB1dFN0cmVhbS5FbmNvZGVa
aWdaYWc2NCh1bmNoZWNrZWQoKGxvbmcpIDB4N0ZGRkZGRkZGRkZGRkZGRlVMKSkpOwotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKDB4RkZGRkZGRkZGRkZGRkZGRkwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0uRW5jb2RlWmlnWmFnNjQodW5jaGVja2Vk
KChsb25nKSAweDgwMDAwMDAwMDAwMDAwMDBVTCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtU
ZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBSb3VuZFRyaXBaaWdaYWczMigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIFNvbWUgZWFzaWVyLXRvLXZlcmlmeSByb3VuZC10cmlwIHRlc3RzLiAg
VGhlIGlucHV0cyAob3RoZXIgdGhhbiAwLCAxLCAtMSkKLSAgICAgICAgICAgIC8vIHdlcmUgY2hv
c2VuIHNlbWktcmFuZG9tbHkgdmlhIGtleWJvYXJkIGJhc2hpbmcuCi0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoMCwgQ29kZWRJbnB1dFN0cmVhbS5EZWNvZGVaaWdaYWczMihDb2RlZE91dHB1
dFN0cmVhbS5FbmNvZGVaaWdaYWczMigwKSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFs
KDEsIENvZGVkSW5wdXRTdHJlYW0uRGVjb2RlWmlnWmFnMzIoQ29kZWRPdXRwdXRTdHJlYW0uRW5j
b2RlWmlnWmFnMzIoMSkpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgtMSwgQ29kZWRJ
bnB1dFN0cmVhbS5EZWNvZGVaaWdaYWczMihDb2RlZE91dHB1dFN0cmVhbS5FbmNvZGVaaWdaYWcz
MigtMSkpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxNDkyNywgQ29kZWRJbnB1dFN0
cmVhbS5EZWNvZGVaaWdaYWczMihDb2RlZE91dHB1dFN0cmVhbS5FbmNvZGVaaWdaYWczMigxNDky
NykpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgtMzYxMiwgQ29kZWRJbnB1dFN0cmVh
bS5EZWNvZGVaaWdaYWczMihDb2RlZE91dHB1dFN0cmVhbS5FbmNvZGVaaWdaYWczMigtMzYxMikp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBSb3Vu
ZFRyaXBaaWdaYWc2NCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgw
LCBDb2RlZElucHV0U3RyZWFtLkRlY29kZVppZ1phZzY0KENvZGVkT3V0cHV0U3RyZWFtLkVuY29k
ZVppZ1phZzY0KDApKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwgQ29kZWRJbnB1
dFN0cmVhbS5EZWNvZGVaaWdaYWc2NChDb2RlZE91dHB1dFN0cmVhbS5FbmNvZGVaaWdaYWc2NCgx
KSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKC0xLCBDb2RlZElucHV0U3RyZWFtLkRl
Y29kZVppZ1phZzY0KENvZGVkT3V0cHV0U3RyZWFtLkVuY29kZVppZ1phZzY0KC0xKSkpOwotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDE0OTI3LCBDb2RlZElucHV0U3RyZWFtLkRlY29kZVpp
Z1phZzY0KENvZGVkT3V0cHV0U3RyZWFtLkVuY29kZVppZ1phZzY0KDE0OTI3KSkpOwotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKC0zNjEyLCBDb2RlZElucHV0U3RyZWFtLkRlY29kZVppZ1ph
ZzY0KENvZGVkT3V0cHV0U3RyZWFtLkVuY29kZVppZ1phZzY0KC0zNjEyKSkpOwotCi0gICAgICAg
ICAgICBBc3NlcnQuQXJlRXF1YWwoODU2OTEyMzA0ODAxNDE2TCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlZElucHV0U3RyZWFtLkRlY29kZVppZ1phZzY0KENvZGVkT3V0cHV0U3Ry
ZWFtLkVuY29kZVppZ1phZzY0KDg1NjkxMjMwNDgwMTQxNkwpKSk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoLTc1MTIzOTA1NDM5NTcxMjU2TCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlZElucHV0U3RyZWFtLkRlY29kZVppZ1phZzY0KENvZGVkT3V0cHV0U3RyZWFtLkVu
Y29kZVppZ1phZzY0KC03NTEyMzkwNTQzOTU3MTI1NkwpKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdE5lZ2F0aXZlRW51bU5vVGFnKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEwLCBDb2RlZE91dHB1dFN0cmVh
bS5Db21wdXRlSW50MzJTaXplKC0yKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMTAs
IENvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBTYW1wbGVFbnVtLk5lZ2F0
aXZlVmFsdWUpKTsKLQotICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbMTBdOwot
ICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IENvZGVkT3V0cHV0U3Ry
ZWFtKGJ5dGVzKTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUVudW0oKGludCkgU2FtcGxlRW51
bS5OZWdhdGl2ZVZhbHVlKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIG91dHB1
dC5TcGFjZUxlZnQpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJGRS1GRi1GRi1GRi1G
Ri1GRi1GRi1GRi1GRi0wMSIsIEJpdENvbnZlcnRlci5Ub1N0cmluZyhieXRlcykpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3RDb2RlZElucHV0
T3V0cHV0UG9zaXRpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBieXRlW10gY29udGVudCA9
IG5ldyBieXRlWzExMF07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnQu
TGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgY29udGVudFtpXSA9IChieXRlKWk7Ci0KLSAg
ICAgICAgICAgIGJ5dGVbXSBjaGlsZCA9IG5ldyBieXRlWzEyMF07Ci0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgTWVtb3J5U3RyZWFtIG1zID0gbmV3IE1lbW9yeVN0cmVhbShjaGlsZCk7
Ci0gICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0gY291dCA9IG5ldyBDb2RlZE91dHB1
dFN0cmVhbShtcywgMjApOwotICAgICAgICAgICAgICAgIC8vIEZpZWxkIDExOiBudW1lcmljIHZh
bHVlOiA1MDAKLSAgICAgICAgICAgICAgICBjb3V0LldyaXRlVGFnKDExLCBXaXJlRm9ybWF0Lldp
cmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIGNvdXQu
UG9zaXRpb24pOwotICAgICAgICAgICAgICAgIGNvdXQuV3JpdGVJbnQzMig1MDApOwotICAgICAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgzLCBjb3V0LlBvc2l0aW9uKTsKLSAgICAgICAgICAg
ICAgICAvL0ZpZWxkIDEyOiBsZW5ndGggZGVsaW1pdGVkIDEyMCBieXRlcwotICAgICAgICAgICAg
ICAgIGNvdXQuV3JpdGVUYWcoMTIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVk
KTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoNCwgY291dC5Qb3NpdGlvbik7Ci0g
ICAgICAgICAgICAgICAgY291dC5Xcml0ZUJ5dGVzKEJ5dGVTdHJpbmcuQ29weUZyb20oY29udGVu
dCkpOwotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxMTUsIGNvdXQuUG9zaXRpb24p
OwotICAgICAgICAgICAgICAgIC8vIEZpZWxkIDEzOiBmaXhlZCBudW1lcmljIHZhbHVlOiA1MDEK
LSAgICAgICAgICAgICAgICBjb3V0LldyaXRlVGFnKDEzLCBXaXJlRm9ybWF0LldpcmVUeXBlLkZp
eGVkMzIpOwotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxMTYsIGNvdXQuUG9zaXRp
b24pOwotICAgICAgICAgICAgICAgIGNvdXQuV3JpdGVTRml4ZWQzMig1MDEpOwotICAgICAgICAg
ICAgICAgIEFzc2VydC5BcmVFcXVhbCgxMjAsIGNvdXQuUG9zaXRpb24pOwotICAgICAgICAgICAg
ICAgIGNvdXQuRmx1c2goKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnl0ZVtdIGJ5
dGVzID0gbmV3IGJ5dGVbMTMwXTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb2Rl
ZE91dHB1dFN0cmVhbSBjb3V0ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKGJ5dGVzKTsKLSAgICAg
ICAgICAgICAgICAvLyBGaWVsZCAxOiBudW1lcmljIHZhbHVlOiA1MDAKLSAgICAgICAgICAgICAg
ICBjb3V0LldyaXRlVGFnKDEsIFdpcmVGb3JtYXQuV2lyZVR5cGUuVmFyaW50KTsKLSAgICAgICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwgY291dC5Qb3NpdGlvbik7Ci0gICAgICAgICAgICAg
ICAgY291dC5Xcml0ZUludDMyKDUwMCk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFs
KDMsIGNvdXQuUG9zaXRpb24pOwotICAgICAgICAgICAgICAgIC8vRmllbGQgMjogbGVuZ3RoIGRl
bGltaXRlZCAxMjAgYnl0ZXMKLSAgICAgICAgICAgICAgICBjb3V0LldyaXRlVGFnKDIsIFdpcmVG
b3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwoNCwgY291dC5Qb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgY291dC5Xcml0ZUJ5
dGVzKEJ5dGVTdHJpbmcuQ29weUZyb20oY2hpbGQpKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwoMTI1LCBjb3V0LlBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAvLyBGaWVsZCAz
OiBmaXhlZCBudW1lcmljIHZhbHVlOiA1MDAKLSAgICAgICAgICAgICAgICBjb3V0LldyaXRlVGFn
KDMsIFdpcmVGb3JtYXQuV2lyZVR5cGUuRml4ZWQzMik7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKDEyNiwgY291dC5Qb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgY291dC5Xcml0
ZVNGaXhlZDMyKDUwMSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEzMCwgY291
dC5Qb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgY291dC5GbHVzaCgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgLy8gTm93IHRlc3QgSW5wdXQgc3RyZWFtOgotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW0gY2luID0gbmV3IENvZGVkSW5wdXRTdHJl
YW0obmV3IE1lbW9yeVN0cmVhbShieXRlcyksIG5ldyBieXRlWzUwXSwgMCwgMCk7Ci0gICAgICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIGNpbi5Qb3NpdGlvbik7Ci0gICAgICAgICAgICAg
ICAgLy8gRmllbGQgMToKLSAgICAgICAgICAgICAgICB1aW50IHRhZyA9IGNpbi5SZWFkVGFnKCk7
Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIHRhZyA+PiAzKTsKLSAgICAgICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwgY2luLlBvc2l0aW9uKTsKLSAgICAgICAgICAgICAg
ICBBc3NlcnQuQXJlRXF1YWwoNTAwLCBjaW4uUmVhZEludDMyKCkpOwotICAgICAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbCgzLCBjaW4uUG9zaXRpb24pOwotICAgICAgICAgICAgICAgIC8vRmll
bGQgMjoKLSAgICAgICAgICAgICAgICB0YWcgPSBjaW4uUmVhZFRhZygpOwotICAgICAgICAgICAg
ICAgIEFzc2VydC5BcmVFcXVhbCgyLCB0YWcgPj4gMyk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKDQsIGNpbi5Qb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgaW50IGNoaWxkbGVu
ID0gY2luLlJlYWRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMTIw
LCBjaGlsZGxlbik7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDUsIGNpbi5Qb3Np
dGlvbik7Ci0gICAgICAgICAgICAgICAgaW50IG9sZGxpbWl0ID0gY2luLlB1c2hMaW1pdCgoaW50
KWNoaWxkbGVuKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoNSwgY2luLlBvc2l0
aW9uKTsKLSAgICAgICAgICAgICAgICAvLyBOb3cgd2UgYXJlIHJlYWRpbmcgY2hpbGQgbWVzc2Fn
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmllbGQgMTE6IG51
bWVyaWMgdmFsdWU6IDUwMAotICAgICAgICAgICAgICAgICAgICB0YWcgPSBjaW4uUmVhZFRhZygp
OwotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMTEsIHRhZyA+PiAzKTsKLSAg
ICAgICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDYsIGNpbi5Qb3NpdGlvbik7Ci0gICAg
ICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCg1MDAsIGNpbi5SZWFkSW50MzIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCg4LCBjaW4uUG9zaXRpb24pOwotICAg
ICAgICAgICAgICAgICAgICAvL0ZpZWxkIDEyOiBsZW5ndGggZGVsaW1pdGVkIDEyMCBieXRlcwot
ICAgICAgICAgICAgICAgICAgICB0YWcgPSBjaW4uUmVhZFRhZygpOwotICAgICAgICAgICAgICAg
ICAgICBBc3NlcnQuQXJlRXF1YWwoMTIsIHRhZyA+PiAzKTsKLSAgICAgICAgICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKDksIGNpbi5Qb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIEJ5
dGVTdHJpbmcgYnN0ciA9IGNpbi5SZWFkQnl0ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKDExMCwgYnN0ci5MZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoKGJ5dGUpIDEwOSwgYnN0clsxMDldKTsKLSAgICAgICAgICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKDEyMCwgY2luLlBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gRmllbGQgMTM6IGZpeGVkIG51bWVyaWMgdmFsdWU6IDUwMQotICAgICAgICAgICAgICAgICAg
ICB0YWcgPSBjaW4uUmVhZFRhZygpOwotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwoMTMsIHRhZyA+PiAzKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gUk9LIC0gUHJldmlvdXNs
eSBicm9rZW4gaGVyZSwgdGhpcyByZXR1cm5lZCAxMjYgZmFpbGluZyB0byBhY2NvdW50IGZvciBi
dWZmZXJTaXplQWZ0ZXJMaW1pdAotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
MTIxLCBjaW4uUG9zaXRpb24pOwotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
NTAxLCBjaW4uUmVhZFNGaXhlZDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoMTI1LCBjaW4uUG9zaXRpb24pOwotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuSXNU
cnVlKGNpbi5Jc0F0RW5kKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2lu
LlBvcExpbWl0KG9sZGxpbWl0KTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMTI1
LCBjaW4uUG9zaXRpb24pOwotICAgICAgICAgICAgICAgIC8vIEZpZWxkIDM6IGZpeGVkIG51bWVy
aWMgdmFsdWU6IDUwMQotICAgICAgICAgICAgICAgIHRhZyA9IGNpbi5SZWFkVGFnKCk7Ci0gICAg
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDMsIHRhZyA+PiAzKTsKLSAgICAgICAgICAgICAg
ICBBc3NlcnQuQXJlRXF1YWwoMTI2LCBjaW4uUG9zaXRpb24pOwotICAgICAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbCg1MDEsIGNpbi5SZWFkU0ZpeGVkMzIoKSk7Ci0gICAgICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKDEzMCwgY2luLlBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICBBc3Nl
cnQuSXNUcnVlKGNpbi5Jc0F0RW5kKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlX0Rpc3Bvc2VzVW5kZXJseWlu
Z1N0cmVhbSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZW1vcnlTdHJlYW0gPSBuZXcg
TWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNUcnVlKG1lbW9yeVN0cmVhbS5D
YW5Xcml0ZSk7Ci0gICAgICAgICAgICB1c2luZyAodmFyIGNvcyA9IG5ldyBDb2RlZE91dHB1dFN0
cmVhbShtZW1vcnlTdHJlYW0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvcy5X
cml0ZVJhd0J5dGUoMCk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIG1lbW9y
eVN0cmVhbS5Qb3NpdGlvbik7IC8vIE5vdCBmbHVzaGVkIHlldAotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIG1lbW9yeVN0cmVhbS5Ub0FycmF5KCkuTGVuZ3Ro
KTsgLy8gRmx1c2hlZCBkYXRhIGZyb20gQ29kZWRPdXRwdXRTdHJlYW0gdG8gTWVtb3J5U3RyZWFt
Ci0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShtZW1vcnlTdHJlYW0uQ2FuV3JpdGUpOyAvLyBE
aXNwb3NlZAotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lk
IERpc3Bvc2VfV2l0aExlYXZlT3BlbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZW1v
cnlTdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNUcnVl
KG1lbW9yeVN0cmVhbS5DYW5Xcml0ZSk7Ci0gICAgICAgICAgICB1c2luZyAodmFyIGNvcyA9IG5l
dyBDb2RlZE91dHB1dFN0cmVhbShtZW1vcnlTdHJlYW0sIHRydWUpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGNvcy5Xcml0ZVJhd0J5dGUoMCk7Ci0gICAgICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKDAsIG1lbW9yeVN0cmVhbS5Qb3NpdGlvbik7IC8vIE5vdCBmbHVzaGVkIHll
dAotICAgICAgICAgICAgfQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIG1lbW9yeVN0
cmVhbS5Qb3NpdGlvbik7IC8vIEZsdXNoZWQgZGF0YSBmcm9tIENvZGVkT3V0cHV0U3RyZWFtIHRv
IE1lbW9yeVN0cmVhbQotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShtZW1vcnlTdHJlYW0uQ2Fu
V3JpdGUpOyAvLyBXZSBsZWZ0IHRoZSBzdHJlYW0gb3BlbgotICAgICAgICB9Ci0gICAgfQotfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYuVGVzdC9Db2xsZWN0aW9ucy9NYXBGaWVsZFRlc3QuY3MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmLlRlc3QvQ29sbGVjdGlvbnMvTWFwRmllbGRUZXN0LmNzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5Yzg0NTkwNzNjNjRmOTIxOTRlNTk4YmU2ZDc4MDA5ZDUxNzZh
ZWJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJw
L3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Db2xsZWN0aW9ucy9NYXBGaWVsZFRlc3QuY3MKKysr
IC9kZXYvbnVsbApAQCAtMSw1MzIgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNl
IGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdp
b24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11
c2luZyBHb29nbGUuUHJvdG9idWYuVGVzdFByb3RvczsKLXVzaW5nIE5Vbml0LkZyYW1ld29yazsK
LXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKLXVzaW5nIFN5c3RlbS5MaW5xOwotCi1uYW1lc3Bh
Y2UgR29vZ2xlLlByb3RvYnVmLkNvbGxlY3Rpb25zCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAg
IC8vLyBUZXN0cyBmb3IgTWFwRmllbGQgd2hpY2ggYXJlbid0IHJlbGlhbnQgb24gdGhlIGVuY29k
ZWQgZm9ybWF0IC0KLSAgICAvLy8gdGVzdHMgZm9yIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0
aW9uIGFyZSBwYXJ0IG9mIEdlbmVyYXRlZE1lc3NhZ2VUZXN0LgotICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgcHVibGljIGNsYXNzIE1hcEZpZWxkVGVzdAotICAgIHsKLSAgICAgICAgW1Rlc3RdCi0g
ICAgICAgIHB1YmxpYyB2b2lkIENsb25lX0Nsb25lc01lc3NhZ2VzKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgRm9yZWlnbk1lc3NhZ2UgeyBDID0gMjAgfTsKLSAg
ICAgICAgICAgIHZhciBtYXAgPSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBGb3JlaWduTWVzc2FnZT4g
eyB7ICJ4IiwgbWVzc2FnZSB9IH07Ci0gICAgICAgICAgICB2YXIgY2xvbmUgPSBtYXAuQ2xvbmUo
KTsKLSAgICAgICAgICAgIG1hcFsieCJdLkMgPSAzMDsKLSAgICAgICAgICAgIEFzc2VydC5BcmVF
cXVhbCgyMCwgY2xvbmVbIngiXS5DKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAg
ICAgICBwdWJsaWMgdm9pZCBOdWxsVmFsdWVzUHJvaGliaXRlZCgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFRlc3ROdWxsVmFsdWVzPGludD8+KDApOwotICAgICAgICAgICAgVGVzdE51bGxWYWx1
ZXMoIiIpOwotICAgICAgICAgICAgVGVzdE51bGxWYWx1ZXMobmV3IFRlc3RBbGxUeXBlcygpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBUZXN0TnVsbFZhbHVlczxUPihUIG5v
bk51bGxWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVs
ZDxpbnQsIFQ+KCk7Ci0gICAgICAgICAgICB2YXIgbnVsbFZhbHVlID0gKFQpIChvYmplY3QpIG51
bGw7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50TnVsbEV4Y2VwdGlvbj4oKCkg
PT4gbWFwLkFkZCgwLCBudWxsVmFsdWUpKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJn
dW1lbnROdWxsRXhjZXB0aW9uPigoKSA9PiBtYXBbMF0gPSBudWxsVmFsdWUpOwotICAgICAgICAg
ICAgbWFwLkFkZCgxLCBub25OdWxsVmFsdWUpOwotICAgICAgICAgICAgbWFwWzFdID0gbm9uTnVs
bFZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lk
IEFkZF9Gb3JiaWRzTnVsbEtleXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWFwID0g
bmV3IE1hcEZpZWxkPHN0cmluZywgRm9yZWlnbk1lc3NhZ2U+KCk7Ci0gICAgICAgICAgICBBc3Nl
cnQuVGhyb3dzPEFyZ3VtZW50TnVsbEV4Y2VwdGlvbj4oKCkgPT4gbWFwLkFkZChudWxsLCBuZXcg
Rm9yZWlnbk1lc3NhZ2UoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAg
IHB1YmxpYyB2b2lkIEluZGV4ZXJfRm9yYmlkc051bGxLZXlzKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJpbmcsIEZvcmVpZ25NZXNzYWdlPigpOwot
ICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE51bGxFeGNlcHRpb24+KCgpID0+IG1h
cFtudWxsXSA9IG5ldyBGb3JlaWduTWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEFkZFByZXNlcnZlc0luc2VydGlvbk9y
ZGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJp
bmcsIHN0cmluZz4oKTsKLSAgICAgICAgICAgIG1hcC5BZGQoImEiLCAidjEiKTsKLSAgICAgICAg
ICAgIG1hcC5BZGQoImIiLCAidjIiKTsKLSAgICAgICAgICAgIG1hcC5BZGQoImMiLCAidjMiKTsK
LSAgICAgICAgICAgIG1hcC5SZW1vdmUoImIiKTsKLSAgICAgICAgICAgIG1hcC5BZGQoImQiLCAi
djQiKTsKLSAgICAgICAgICAgIENvbGxlY3Rpb25Bc3NlcnQuQXJlRXF1YWwobmV3W10geyAiYSIs
ICJjIiwgImQiIH0sIG1hcC5LZXlzKTsKLSAgICAgICAgICAgIENvbGxlY3Rpb25Bc3NlcnQuQXJl
RXF1YWwobmV3W10geyAidjEiLCAidjMiLCAidjQiIH0sIG1hcC5WYWx1ZXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEVxdWFsaXR5SXNPcmRlcklu
c2Vuc2l0aXZlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcDEgPSBuZXcgTWFwRmll
bGQ8c3RyaW5nLCBzdHJpbmc+KCk7Ci0gICAgICAgICAgICBtYXAxLkFkZCgiYSIsICJ2MSIpOwot
ICAgICAgICAgICAgbWFwMS5BZGQoImIiLCAidjIiKTsKLQotICAgICAgICAgICAgdmFyIG1hcDIg
PSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+KCk7Ci0gICAgICAgICAgICBtYXAyLkFkZCgi
YiIsICJ2MiIpOwotICAgICAgICAgICAgbWFwMi5BZGQoImEiLCAidjEiKTsKLQotICAgICAgICAg
ICAgRXF1YWxpdHlUZXN0ZXIuQXNzZXJ0RXF1YWxpdHkobWFwMSwgbWFwMik7Ci0gICAgICAgIH0K
LQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgRXF1YWxpdHlJc0tleVNlbnNp
dGl2ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtYXAxID0gbmV3IE1hcEZpZWxkPHN0
cmluZywgc3RyaW5nPigpOwotICAgICAgICAgICAgbWFwMS5BZGQoImZpcnN0IGtleSIsICJ2MSIp
OwotICAgICAgICAgICAgbWFwMS5BZGQoInNlY29uZCBrZXkiLCAidjIiKTsKLQotICAgICAgICAg
ICAgdmFyIG1hcDIgPSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+KCk7Ci0gICAgICAgICAg
ICBtYXAyLkFkZCgidGhpcmQga2V5IiwgInYxIik7Ci0gICAgICAgICAgICBtYXAyLkFkZCgiZm91
cnRoIGtleSIsICJ2MiIpOwotCi0gICAgICAgICAgICBFcXVhbGl0eVRlc3Rlci5Bc3NlcnRJbmVx
dWFsaXR5KG1hcDEsIG1hcDIpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAg
IHB1YmxpYyB2b2lkIEVxdWFsaXR5X1NpbXBsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZh
ciBtYXAgPSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+KCk7Ci0gICAgICAgICAgICBFcXVh
bGl0eVRlc3Rlci5Bc3NlcnRFcXVhbGl0eShtYXAsIG1hcCk7Ci0gICAgICAgICAgICBFcXVhbGl0
eVRlc3Rlci5Bc3NlcnRJbmVxdWFsaXR5KG1hcCwgbnVsbCk7Ci0gICAgICAgICAgICBBc3NlcnQu
SXNGYWxzZShtYXAuRXF1YWxzKG5ldyBvYmplY3QoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEVxdWFsaXR5SXNWYWx1ZVNlbnNpdGl2ZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vdGU6IFdpdGhvdXQgc29tZSBjYXJlLCBpdCdzIGEg
bGl0dGxlIGVhc2llciB0aGFuIG9uZSBtaWdodAotICAgICAgICAgICAgLy8gaG9wZSB0byBzZWUg
aGFzaCBjb2xsaXNpb25zLCBidXQgb25seSBpbiBzb21lIGVudmlyb25tZW50cy4uLgotICAgICAg
ICAgICAgdmFyIG1hcDEgPSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+KCk7Ci0gICAgICAg
ICAgICBtYXAxLkFkZCgiYSIsICJmaXJzdCB2YWx1ZSIpOwotICAgICAgICAgICAgbWFwMS5BZGQo
ImIiLCAic2Vjb25kIHZhbHVlIik7Ci0KLSAgICAgICAgICAgIHZhciBtYXAyID0gbmV3IE1hcEZp
ZWxkPHN0cmluZywgc3RyaW5nPigpOwotICAgICAgICAgICAgbWFwMi5BZGQoImEiLCAidGhpcmQg
dmFsdWUiKTsKLSAgICAgICAgICAgIG1hcDIuQWRkKCJiIiwgImZvdXJ0aCB2YWx1ZSIpOwotCi0g
ICAgICAgICAgICBFcXVhbGl0eVRlc3Rlci5Bc3NlcnRJbmVxdWFsaXR5KG1hcDEsIG1hcDIpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEFkZF9EaWN0
aW9uYXJ5KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcDEgPSBuZXcgTWFwRmllbGQ8
c3RyaW5nLCBzdHJpbmc+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyAieCIsICJ5
IiB9LAotICAgICAgICAgICAgICAgIHsgImEiLCAiYiIgfQotICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgIHZhciBtYXAyID0gbmV3IE1hcEZpZWxkPHN0cmluZywgc3RyaW5nPgotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHsgImJlZm9yZSIsICIiIH0sCi0gICAgICAgICAgICAgICAg
bWFwMSwKLSAgICAgICAgICAgICAgICB7ICJhZnRlciIsICIiIH0KLSAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyAiYmVmb3JlIiwgIiIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJ4IiwgInkiIH0sCi0gICAgICAgICAgICAgICAgeyAiYSIsICJiIiB9LAotICAg
ICAgICAgICAgICAgIHsgImFmdGVyIiwgIiIgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbChleHBlY3RlZCwgbWFwMik7Ci0gICAgICAgICAgICBDb2xsZWN0aW9u
QXNzZXJ0LkFyZUVxdWFsKG5ld1tdIHsgImJlZm9yZSIsICJ4IiwgImEiLCAiYWZ0ZXIiIH0sIG1h
cDIuS2V5cyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZW5lcmFsIElEaWN0aW9uYXJ5PFRL
ZXksIFRWYWx1ZT4gYmVoYXZpb3IgdGVzdHMKLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1Ymxp
YyB2b2lkIEFkZF9LZXlBbHJlYWR5RXhpc3RzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFy
IG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJpbmcsIHN0cmluZz4oKTsKLSAgICAgICAgICAgIG1hcC5B
ZGQoImZvbyIsICJiYXIiKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnRFeGNl
cHRpb24+KCgpID0+IG1hcC5BZGQoImZvbyIsICJiYXoiKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgQWRkX1BhaXIoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB2YXIgbWFwID0gbmV3IE1hcEZpZWxkPHN0cmluZywgc3RyaW5nPigpOwotICAgICAg
ICAgICAgSUNvbGxlY3Rpb248S2V5VmFsdWVQYWlyPHN0cmluZywgc3RyaW5nPj4gY29sbGVjdGlv
biA9IG1hcDsKLSAgICAgICAgICAgIGNvbGxlY3Rpb24uQWRkKE5ld0tleVZhbHVlUGFpcigieCIs
ICJ5IikpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJ5IiwgbWFwWyJ4Il0pOwotICAg
ICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudEV4Y2VwdGlvbj4oKCkgPT4gY29sbGVjdGlv
bi5BZGQoTmV3S2V5VmFsdWVQYWlyKCJ4IiwgInoiKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIENvbnRhaW5zX1BhaXIoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB2YXIgbWFwID0gbmV3IE1hcEZpZWxkPHN0cmluZywgc3RyaW5nPiB7IHsgIngi
LCAieSIgfSB9OwotICAgICAgICAgICAgSUNvbGxlY3Rpb248S2V5VmFsdWVQYWlyPHN0cmluZywg
c3RyaW5nPj4gY29sbGVjdGlvbiA9IG1hcDsKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUoY29s
bGVjdGlvbi5Db250YWlucyhOZXdLZXlWYWx1ZVBhaXIoIngiLCAieSIpKSk7Ci0gICAgICAgICAg
ICBBc3NlcnQuSXNGYWxzZShjb2xsZWN0aW9uLkNvbnRhaW5zKE5ld0tleVZhbHVlUGFpcigieCIs
ICJ6IikpKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKGNvbGxlY3Rpb24uQ29udGFpbnMo
TmV3S2V5VmFsdWVQYWlyKCJ6IiwgInkiKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3Rd
Ci0gICAgICAgIHB1YmxpYyB2b2lkIFJlbW92ZV9LZXkoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB2YXIgbWFwID0gbmV3IE1hcEZpZWxkPHN0cmluZywgc3RyaW5nPigpOwotICAgICAgICAgICAg
bWFwLkFkZCgiZm9vIiwgImJhciIpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIG1h
cC5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShtYXAuUmVtb3ZlKCJtaXNzaW5n
IikpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIG1hcC5Db3VudCk7Ci0gICAgICAg
ICAgICBBc3NlcnQuSXNUcnVlKG1hcC5SZW1vdmUoImZvbyIpKTsKLSAgICAgICAgICAgIEFzc2Vy
dC5BcmVFcXVhbCgwLCBtYXAuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1
bWVudE51bGxFeGNlcHRpb24+KCgpID0+IG1hcC5SZW1vdmUobnVsbCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFJlbW92ZV9QYWlyKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJpbmcsIHN0cmluZz4o
KTsKLSAgICAgICAgICAgIG1hcC5BZGQoImZvbyIsICJiYXIiKTsKLSAgICAgICAgICAgIElDb2xs
ZWN0aW9uPEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz4+IGNvbGxlY3Rpb24gPSBtYXA7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwgbWFwLkNvdW50KTsKLSAgICAgICAgICAgIEFz
c2VydC5Jc0ZhbHNlKGNvbGxlY3Rpb24uUmVtb3ZlKE5ld0tleVZhbHVlUGFpcigid3Jvbmcga2V5
IiwgImJhciIpKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwgbWFwLkNvdW50KTsK
LSAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKGNvbGxlY3Rpb24uUmVtb3ZlKE5ld0tleVZhbHVl
UGFpcigiZm9vIiwgIndyb25nIHZhbHVlIikpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgxLCBtYXAuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShjb2xsZWN0aW9uLlJl
bW92ZShOZXdLZXlWYWx1ZVBhaXIoImZvbyIsICJiYXIiKSkpOwotICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKDAsIG1hcC5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3Vt
ZW50RXhjZXB0aW9uPigoKSA9PiBjb2xsZWN0aW9uLlJlbW92ZShuZXcgS2V5VmFsdWVQYWlyPHN0
cmluZywgc3RyaW5nPihudWxsLCAiIikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQot
ICAgICAgICBwdWJsaWMgdm9pZCBDb3B5VG9fUGFpcigpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZhciBtYXAgPSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+KCk7Ci0gICAgICAgICAgICBt
YXAuQWRkKCJmb28iLCAiYmFyIik7Ci0gICAgICAgICAgICBJQ29sbGVjdGlvbjxLZXlWYWx1ZVBh
aXI8c3RyaW5nLCBzdHJpbmc+PiBjb2xsZWN0aW9uID0gbWFwOwotICAgICAgICAgICAgS2V5VmFs
dWVQYWlyPHN0cmluZywgc3RyaW5nPltdIGFycmF5ID0gbmV3IEtleVZhbHVlUGFpcjxzdHJpbmcs
IHN0cmluZz5bM107Ci0gICAgICAgICAgICBjb2xsZWN0aW9uLkNvcHlUbyhhcnJheSwgMSk7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoTmV3S2V5VmFsdWVQYWlyKCJmb28iLCAiYmFyIiks
IGFycmF5WzFdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMg
dm9pZCBDbGVhcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtYXAgPSBuZXcgTWFwRmll
bGQ8c3RyaW5nLCBzdHJpbmc+IHsgeyAieCIsICJ5IiB9IH07Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwoMSwgbWFwLkNvdW50KTsKLSAgICAgICAgICAgIG1hcC5DbGVhcigpOwotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIG1hcC5Db3VudCk7Ci0gICAgICAgICAgICBtYXAuQWRk
KCJ4IiwgInkiKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxLCBtYXAuQ291bnQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEluZGV4ZXJf
R2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJp
bmcsIHN0cmluZz4geyB7ICJ4IiwgInkiIH0gfTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgieSIsIG1hcFsieCJdKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8S2V5Tm90Rm91bmRF
eGNlcHRpb24+KCgpID0+IHsgdmFyIGlnbm9yZWQgPSBtYXBbInoiXTsgfSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgSW5kZXhlcl9TZXQoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB2YXIgbWFwID0gbmV3IE1hcEZpZWxkPHN0cmluZywgc3RyaW5n
PigpOwotICAgICAgICAgICAgbWFwWyJ4Il0gPSAieSI7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoInkiLCBtYXBbIngiXSk7Ci0gICAgICAgICAgICBtYXBbIngiXSA9ICJ6IjsgLy8gVGhp
cyB3b24ndCB0aHJvdywgdW5saWtlIEFkZC4KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgi
eiIsIG1hcFsieCJdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJs
aWMgdm9pZCBHZXRFbnVtZXJhdG9yX05vbkdlbmVyaWMoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBJRW51bWVyYWJsZSBtYXAgPSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+IHsgeyAieCIs
ICJ5IiB9IH07Ci0gICAgICAgICAgICBDb2xsZWN0aW9uQXNzZXJ0LkFyZUVxdWFsKG5ld1tdIHsg
bmV3IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz4oIngiLCAieSIpIH0sCi0gICAgICAgICAg
ICAgICAgbWFwLkNhc3Q8b2JqZWN0PigpLlRvTGlzdCgpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRlc3QgZm9yIHRoZSBleHBsaWNpdGx5LWltcGxlbWVudGVkIG5vbi1nZW5lcmljIElEaWN0
aW9uYXJ5IGludGVyZmFjZQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgSURp
Y3Rpb25hcnlfR2V0RW51bWVyYXRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaWN0aW9u
YXJ5IG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJpbmcsIHN0cmluZz4geyB7ICJ4IiwgInkiIH0gfTsK
LSAgICAgICAgICAgIHZhciBlbnVtZXJhdG9yID0gbWFwLkdldEVudW1lcmF0b3IoKTsKLQotICAg
ICAgICAgICAgLy8gQ29tbWVudGVkIGFzc2VydGlvbnMgc2hvdyBhbiBpZGVhbCBzaXR1YXRpb24g
LSBpdCBsb29rcyBsaWtlCi0gICAgICAgICAgICAvLyB0aGUgTGlua2VkTGlzdCBlbnVtZXJhdG9y
IGRvZXNuJ3QgdGhyb3cgd2hlbiB5b3UgYXNrIGZvciB0aGUgY3VycmVudCBlbnRyeQotICAgICAg
ICAgICAgLy8gYXQgYW4gaW5hcHByb3ByaWF0ZSB0aW1lOyBmaXhpbmcgdGhpcyB3b3VsZCBiZSBt
b3JlIHdvcmsgdGhhbiBpdCdzIHdvcnRoLgotICAgICAgICAgICAgLy8gQXNzZXJ0LlRocm93czxJ
bnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uPigoKSA9PiBlbnVtZXJhdG9yLkN1cnJlbnQuR2V0SGFz
aENvZGUoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNUcnVlKGVudW1lcmF0b3IuTW92ZU5leHQo
KSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIngiLCBlbnVtZXJhdG9yLktleSk7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoInkiLCBlbnVtZXJhdG9yLlZhbHVlKTsKLSAgICAg
ICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgRGljdGlvbmFyeUVudHJ5KCJ4IiwgInkiKSwgZW51
bWVyYXRvci5DdXJyZW50KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgRGljdGlv
bmFyeUVudHJ5KCJ4IiwgInkiKSwgZW51bWVyYXRvci5FbnRyeSk7Ci0gICAgICAgICAgICBBc3Nl
cnQuSXNGYWxzZShlbnVtZXJhdG9yLk1vdmVOZXh0KCkpOwotICAgICAgICAgICAgLy8gQXNzZXJ0
LlRocm93czxJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uPigoKSA9PiBlbnVtZXJhdG9yLkN1cnJl
bnQuR2V0SGFzaENvZGUoKSk7Ci0gICAgICAgICAgICBlbnVtZXJhdG9yLlJlc2V0KCk7Ci0gICAg
ICAgICAgICAvLyBBc3NlcnQuVGhyb3dzPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+KCgpID0+
IGVudW1lcmF0b3IuQ3VycmVudC5HZXRIYXNoQ29kZSgpKTsKLSAgICAgICAgICAgIEFzc2VydC5J
c1RydWUoZW51bWVyYXRvci5Nb3ZlTmV4dCgpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgieCIsIGVudW1lcmF0b3IuS2V5KTsgLy8gQXNzdW1lIHRoZSByZXN0IGFyZSBva2F5Ci0gICAg
ICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgSURpY3Rpb25hcnlf
QWRkKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJp
bmcsIHN0cmluZz4geyB7ICJ4IiwgInkiIH0gfTsKLSAgICAgICAgICAgIElEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnkgPSBtYXA7Ci0gICAgICAgICAgICBkaWN0aW9uYXJ5LkFkZCgiYSIsICJiIik7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoImIiLCBtYXBbImEiXSk7Ci0gICAgICAgICAgICBB
c3NlcnQuVGhyb3dzPEFyZ3VtZW50RXhjZXB0aW9uPigoKSA9PiBkaWN0aW9uYXJ5LkFkZCgiYSIs
ICJkdXBsaWNhdGUiKSk7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRDYXN0RXhj
ZXB0aW9uPigoKSA9PiBkaWN0aW9uYXJ5LkFkZChuZXcgb2JqZWN0KCksICJrZXkgaXMgYmFkIikp
OwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkQ2FzdEV4Y2VwdGlvbj4oKCkgPT4g
ZGljdGlvbmFyeS5BZGQoInZhbHVlIGlzIGJhZCIsIG5ldyBvYmplY3QoKSkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIElEaWN0aW9uYXJ5X0NvbnRh
aW5zKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJp
bmcsIHN0cmluZz4geyB7ICJ4IiwgInkiIH0gfTsKLSAgICAgICAgICAgIElEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnkgPSBtYXA7Ci0KLSAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKGRpY3Rpb25hcnku
Q29udGFpbnMoImEiKSk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShkaWN0aW9uYXJ5LkNv
bnRhaW5zKDUpKTsKLSAgICAgICAgICAgIC8vIFN1cnByaXNpbmcsIGJ1dCBJRGljdGlvbmFyeS5D
b250YWlucyBpcyBvbmx5IGFib3V0IGtleXMuCi0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShk
aWN0aW9uYXJ5LkNvbnRhaW5zKG5ldyBEaWN0aW9uYXJ5RW50cnkoIngiLCAieSIpKSk7Ci0gICAg
ICAgICAgICBBc3NlcnQuSXNUcnVlKGRpY3Rpb25hcnkuQ29udGFpbnMoIngiKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgSURpY3Rpb25hcnlfUmVt
b3ZlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJp
bmcsIHN0cmluZz4geyB7ICJ4IiwgInkiIH0gfTsKLSAgICAgICAgICAgIElEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnkgPSBtYXA7Ci0gICAgICAgICAgICBkaWN0aW9uYXJ5LlJlbW92ZSgiYSIpOwotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIGRpY3Rpb25hcnkuQ291bnQpOwotICAgICAgICAg
ICAgZGljdGlvbmFyeS5SZW1vdmUoNSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwg
ZGljdGlvbmFyeS5Db3VudCk7Ci0gICAgICAgICAgICBkaWN0aW9uYXJ5LlJlbW92ZShuZXcgRGlj
dGlvbmFyeUVudHJ5KCJ4IiwgInkiKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwg
ZGljdGlvbmFyeS5Db3VudCk7Ci0gICAgICAgICAgICBkaWN0aW9uYXJ5LlJlbW92ZSgieCIpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIGRpY3Rpb25hcnkuQ291bnQpOwotICAgICAg
ICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE51bGxFeGNlcHRpb24+KCgpID0+IGRpY3Rpb25h
cnkuUmVtb3ZlKG51bGwpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBw
dWJsaWMgdm9pZCBJRGljdGlvbmFyeV9Db3B5VG8oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgbWFwID0gbmV3IE1hcEZpZWxkPHN0cmluZywgc3RyaW5nPiB7IHsgIngiLCAieSIgfSB9Owot
ICAgICAgICAgICAgSURpY3Rpb25hcnkgZGljdGlvbmFyeSA9IG1hcDsKLSAgICAgICAgICAgIHZh
ciBhcnJheSA9IG5ldyBEaWN0aW9uYXJ5RW50cnlbM107Ci0gICAgICAgICAgICBkaWN0aW9uYXJ5
LkNvcHlUbyhhcnJheSwgMSk7Ci0gICAgICAgICAgICBDb2xsZWN0aW9uQXNzZXJ0LkFyZUVxdWFs
KG5ld1tdIHsgZGVmYXVsdChEaWN0aW9uYXJ5RW50cnkpLCBuZXcgRGljdGlvbmFyeUVudHJ5KCJ4
IiwgInkiKSwgZGVmYXVsdChEaWN0aW9uYXJ5RW50cnkpIH0sCi0gICAgICAgICAgICAgICAgYXJy
YXkpOwotICAgICAgICAgICAgdmFyIG9iamVjdEFycmF5ID0gbmV3IG9iamVjdFszXTsKLSAgICAg
ICAgICAgIGRpY3Rpb25hcnkuQ29weVRvKG9iamVjdEFycmF5LCAxKTsKLSAgICAgICAgICAgIENv
bGxlY3Rpb25Bc3NlcnQuQXJlRXF1YWwobmV3IG9iamVjdFtdIHsgbnVsbCwgbmV3IERpY3Rpb25h
cnlFbnRyeSgieCIsICJ5IiksIG51bGwgfSwKLSAgICAgICAgICAgICAgICBvYmplY3RBcnJheSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgSURpY3Rp
b25hcnlfSXNGaXhlZFNpemUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWFwID0gbmV3
IE1hcEZpZWxkPHN0cmluZywgc3RyaW5nPiB7IHsgIngiLCAieSIgfSB9OwotICAgICAgICAgICAg
SURpY3Rpb25hcnkgZGljdGlvbmFyeSA9IG1hcDsKLSAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNl
KGRpY3Rpb25hcnkuSXNGaXhlZFNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0g
ICAgICAgIHB1YmxpYyB2b2lkIElEaWN0aW9uYXJ5X0tleXMoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBJRGljdGlvbmFyeSBkaWN0aW9uYXJ5ID0gbmV3IE1hcEZpZWxkPHN0cmluZywgc3RyaW5n
PiB7IHsgIngiLCAieSIgfSB9OwotICAgICAgICAgICAgQ29sbGVjdGlvbkFzc2VydC5BcmVFcXVh
bChuZXdbXSB7ICJ4IiB9LCBkaWN0aW9uYXJ5LktleXMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIElEaWN0aW9uYXJ5X1ZhbHVlcygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIElEaWN0aW9uYXJ5IGRpY3Rpb25hcnkgPSBuZXcgTWFwRmllbGQ8c3Ry
aW5nLCBzdHJpbmc+IHsgeyAieCIsICJ5IiB9IH07Ci0gICAgICAgICAgICBDb2xsZWN0aW9uQXNz
ZXJ0LkFyZUVxdWFsKG5ld1tdIHsgInkiIH0sIGRpY3Rpb25hcnkuVmFsdWVzKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBJRGljdGlvbmFyeV9Jc1N5
bmNocm9uaXplZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaWN0aW9uYXJ5IGRpY3Rpb25h
cnkgPSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+IHsgeyAieCIsICJ5IiB9IH07Ci0gICAg
ICAgICAgICBBc3NlcnQuSXNGYWxzZShkaWN0aW9uYXJ5LklzU3luY2hyb25pemVkKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBJRGljdGlvbmFyeV9T
eW5jUm9vdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaWN0aW9uYXJ5IGRpY3Rpb25hcnkg
PSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+IHsgeyAieCIsICJ5IiB9IH07Ci0gICAgICAg
ICAgICBBc3NlcnQuQXJlU2FtZShkaWN0aW9uYXJ5LCBkaWN0aW9uYXJ5LlN5bmNSb290KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBJRGljdGlvbmFy
eV9JbmRleGVyX0dldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaWN0aW9uYXJ5IGRpY3Rp
b25hcnkgPSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+IHsgeyAieCIsICJ5IiB9IH07Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoInkiLCBkaWN0aW9uYXJ5WyJ4Il0pOwotICAgICAg
ICAgICAgQXNzZXJ0LklzTnVsbChkaWN0aW9uYXJ5WyJhIl0pOwotICAgICAgICAgICAgQXNzZXJ0
LklzTnVsbChkaWN0aW9uYXJ5WzVdKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1l
bnROdWxsRXhjZXB0aW9uPigoKSA9PiBkaWN0aW9uYXJ5W251bGxdLkdldEhhc2hDb2RlKCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIElEaWN0aW9u
YXJ5X0luZGV4ZXJfU2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBN
YXBGaWVsZDxzdHJpbmcsIHN0cmluZz4geyB7ICJ4IiwgInkiIH0gfTsKLSAgICAgICAgICAgIElE
aWN0aW9uYXJ5IGRpY3Rpb25hcnkgPSBtYXA7Ci0gICAgICAgICAgICBtYXBbImEiXSA9ICJiIjsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiYiIsIG1hcFsiYSJdKTsKLSAgICAgICAgICAg
IG1hcFsiYSJdID0gImMiOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJjIiwgbWFwWyJh
Il0pOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkQ2FzdEV4Y2VwdGlvbj4oKCkg
PT4gZGljdGlvbmFyeVs1XSA9ICJ4Iik7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFs
aWRDYXN0RXhjZXB0aW9uPigoKSA9PiBkaWN0aW9uYXJ5WyJ4Il0gPSA1KTsKLSAgICAgICAgICAg
IEFzc2VydC5UaHJvd3M8QXJndW1lbnROdWxsRXhjZXB0aW9uPigoKSA9PiBkaWN0aW9uYXJ5W251
bGxdID0gInoiKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnROdWxsRXhjZXB0
aW9uPigoKSA9PiBkaWN0aW9uYXJ5WyJ4Il0gPSBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBLZXlzUmV0dXJuc0xpdmVWaWV3KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJpbmcsIHN0cmluZz4o
KTsKLSAgICAgICAgICAgIHZhciBrZXlzID0gbWFwLktleXM7Ci0gICAgICAgICAgICBDb2xsZWN0
aW9uQXNzZXJ0LkFyZUVxdWFsKG5ldyBzdHJpbmdbMF0sIGtleXMpOwotICAgICAgICAgICAgbWFw
WyJmb28iXSA9ICJiYXIiOwotICAgICAgICAgICAgbWFwWyJ4Il0gPSAieSI7Ci0gICAgICAgICAg
ICBDb2xsZWN0aW9uQXNzZXJ0LkFyZUVxdWFsKG5ld1tdIHsgImZvbyIsICJ4IiB9LCBrZXlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBWYWx1ZXNS
ZXR1cm5zTGl2ZVZpZXcoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWFwID0gbmV3IE1h
cEZpZWxkPHN0cmluZywgc3RyaW5nPigpOwotICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG1hcC5W
YWx1ZXM7Ci0gICAgICAgICAgICBDb2xsZWN0aW9uQXNzZXJ0LkFyZUVxdWFsKG5ldyBzdHJpbmdb
MF0sIHZhbHVlcyk7Ci0gICAgICAgICAgICBtYXBbImZvbyJdID0gImJhciI7Ci0gICAgICAgICAg
ICBtYXBbIngiXSA9ICJ5IjsKLSAgICAgICAgICAgIENvbGxlY3Rpb25Bc3NlcnQuQXJlRXF1YWwo
bmV3W10geyAiYmFyIiwgInkiIH0sIHZhbHVlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBK
dXN0IHRlc3Qga2V5cyAtIHdlIGtub3cgdGhlIGltcGxlbWVudGF0aW9uIGlzIHRoZSBzYW1lIGZv
ciB2YWx1ZXMKLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFZpZXdzQXJlUmVh
ZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWFwID0gbmV3IE1hcEZpZWxkPHN0
cmluZywgc3RyaW5nPigpOwotICAgICAgICAgICAgdmFyIGtleXMgPSBtYXAuS2V5czsKLSAgICAg
ICAgICAgIEFzc2VydC5Jc1RydWUoa2V5cy5Jc1JlYWRPbmx5KTsKLSAgICAgICAgICAgIEFzc2Vy
dC5UaHJvd3M8Tm90U3VwcG9ydGVkRXhjZXB0aW9uPigoKSA9PiBrZXlzLkNsZWFyKCkpOwotICAg
ICAgICAgICAgQXNzZXJ0LlRocm93czxOb3RTdXBwb3J0ZWRFeGNlcHRpb24+KCgpID0+IGtleXMu
UmVtb3ZlKCJhIikpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxOb3RTdXBwb3J0ZWRFeGNl
cHRpb24+KCgpID0+IGtleXMuQWRkKCJhIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSnVz
dCB0ZXN0IGtleXMgLSB3ZSBrbm93IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgc2FtZSBmb3Ig
dmFsdWVzCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBWaWV3Q29weVRvKCkK
LSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJpbmcsIHN0
cmluZz4geyB7ICJmb28iLCAiYmFyIiB9LCB7ICJ4IiwgInkiIH0gfTsKLSAgICAgICAgICAgIHZh
ciBrZXlzID0gbWFwLktleXM7Ci0gICAgICAgICAgICB2YXIgYXJyYXkgPSBuZXcgc3RyaW5nWzRd
OwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudEV4Y2VwdGlvbj4oKCkgPT4ga2V5
cy5Db3B5VG8oYXJyYXksIDMpKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnRP
dXRPZlJhbmdlRXhjZXB0aW9uPigoKSA9PiBrZXlzLkNvcHlUbyhhcnJheSwgLTEpKTsKLSAgICAg
ICAgICAgIGtleXMuQ29weVRvKGFycmF5LCAxKTsKLSAgICAgICAgICAgIENvbGxlY3Rpb25Bc3Nl
cnQuQXJlRXF1YWwobmV3W10geyBudWxsLCAiZm9vIiwgIngiLCBudWxsIH0sIGFycmF5KTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gSnVzdCB0ZXN0IGtleXMgLSB3ZSBrbm93IHRo
ZSBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgc2FtZSBmb3IgdmFsdWVzCi0gICAgICAgIFtUZXN0XQot
ICAgICAgICBwdWJsaWMgdm9pZCBOb25HZW5lcmljVmlld0NvcHlUbygpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIElEaWN0aW9uYXJ5IG1hcCA9IG5ldyBNYXBGaWVsZDxzdHJpbmcsIHN0cmluZz4g
eyB7ICJmb28iLCAiYmFyIiB9LCB7ICJ4IiwgInkiIH0gfTsKLSAgICAgICAgICAgIElDb2xsZWN0
aW9uIGtleXMgPSBtYXAuS2V5czsKLSAgICAgICAgICAgIC8vIE5vdGUgdGhlIHVzZSBvZiB0aGUg
QXJyYXkgdHlwZSBoZXJlIHJhdGhlciB0aGFuIHN0cmluZ1tdCi0gICAgICAgICAgICBBcnJheSBh
cnJheSA9IG5ldyBzdHJpbmdbNF07Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50
RXhjZXB0aW9uPigoKSA9PiBrZXlzLkNvcHlUbyhhcnJheSwgMykpOwotICAgICAgICAgICAgQXNz
ZXJ0LlRocm93czxBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24+KCgpID0+IGtleXMuQ29weVRv
KGFycmF5LCAtMSkpOwotICAgICAgICAgICAga2V5cy5Db3B5VG8oYXJyYXksIDEpOwotICAgICAg
ICAgICAgQ29sbGVjdGlvbkFzc2VydC5BcmVFcXVhbChuZXdbXSB7IG51bGwsICJmb28iLCAieCIs
IG51bGwgfSwgYXJyYXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1
YmxpYyB2b2lkIEtleXNDb250YWlucygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtYXAg
PSBuZXcgTWFwRmllbGQ8c3RyaW5nLCBzdHJpbmc+IHsgeyAiZm9vIiwgImJhciIgfSwgeyAieCIs
ICJ5IiB9IH07Ci0gICAgICAgICAgICB2YXIga2V5cyA9IG1hcC5LZXlzOwotICAgICAgICAgICAg
QXNzZXJ0LklzVHJ1ZShrZXlzLkNvbnRhaW5zKCJmb28iKSk7Ci0gICAgICAgICAgICBBc3NlcnQu
SXNGYWxzZShrZXlzLkNvbnRhaW5zKCJiYXIiKSk7IC8vIEl0J3MgYSB2YWx1ZSEKLSAgICAgICAg
ICAgIEFzc2VydC5Jc0ZhbHNlKGtleXMuQ29udGFpbnMoIjEiKSk7Ci0gICAgICAgICAgICAvLyBL
ZXlzIGNhbid0IGJlIG51bGwsIHNvIHdlIHNob3VsZCBwcmV2ZW50IGNvbnRhaW5zIGNoZWNrCi0g
ICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50TnVsbEV4Y2VwdGlvbj4oKCkgPT4ga2V5
cy5Db250YWlucyhudWxsKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgVmFsdWVzQ29udGFpbnMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
bWFwID0gbmV3IE1hcEZpZWxkPHN0cmluZywgc3RyaW5nPiB7IHsgImZvbyIsICJiYXIiIH0sIHsg
IngiLCAieSIgfSB9OwotICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG1hcC5WYWx1ZXM7Ci0gICAg
ICAgICAgICBBc3NlcnQuSXNUcnVlKHZhbHVlcy5Db250YWlucygiYmFyIikpOwotICAgICAgICAg
ICAgQXNzZXJ0LklzRmFsc2UodmFsdWVzLkNvbnRhaW5zKCJmb28iKSk7IC8vIEl0J3MgYSBrZXkh
Ci0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZSh2YWx1ZXMuQ29udGFpbnMoIjEiKSk7Ci0gICAg
ICAgICAgICAvLyBWYWx1ZXMgY2FuIGJlIG51bGwsIHNvIHRoaXMgbWFrZXMgc2Vuc2UKLSAgICAg
ICAgICAgIEFzc2VydC5Jc0ZhbHNlKHZhbHVlcy5Db250YWlucyhudWxsKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgVG9TdHJpbmdfU3RyaW5nVG9T
dHJpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWFwID0gbmV3IE1hcEZpZWxkPHN0
cmluZywgc3RyaW5nPiB7IHsgImZvbyIsICJiYXIiIH0sIHsgIngiLCAieSIgfSB9OwotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJ7IFwiZm9vXCI6IFwiYmFyXCIsIFwieFwiOiBcInlcIiB9
IiwgbWFwLlRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAg
IHB1YmxpYyB2b2lkIFRvU3RyaW5nX1Vuc3VwcG9ydGVkS2V5VHlwZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHZhciBtYXAgPSBuZXcgTWFwRmllbGQ8Ynl0ZSwgc3RyaW5nPiB7IHsgMTAsICJm
b28iIH0gfTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnRFeGNlcHRpb24+KCgp
ID0+IG1hcC5Ub1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGlj
IEtleVZhbHVlUGFpcjxUS2V5LCBUVmFsdWU+IE5ld0tleVZhbHVlUGFpcjxUS2V5LCBUVmFsdWU+
KFRLZXkga2V5LCBUVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgS2V5VmFsdWVQYWlyPFRLZXksIFRWYWx1ZT4oa2V5LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvQ29sbGVj
dGlvbnMvUmVwZWF0ZWRGaWVsZFRlc3QuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRl
c3QvQ29sbGVjdGlvbnMvUmVwZWF0ZWRGaWVsZFRlc3QuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhlZDU0Y2ZiNDg0NTgwMTFhMTM1YjlkZDk2MTdlZmE5MWY2ODdkZjguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi5UZXN0L0NvbGxlY3Rpb25zL1JlcGVhdGVkRmllbGRUZXN0LmNzCisrKyAvZGV2
L251bGwKQEAgLTEsNjYwICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQg
bGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0K
LXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKLXVzaW5nIFN5c3RlbS5D
b2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLkxpbnE7
Ci11c2luZyBTeXN0ZW0uVGV4dDsKLXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zOwot
dXNpbmcgR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzOwotdXNpbmcgTlVuaXQuRnJhbWV3
b3JrOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLkNvbGxlY3Rpb25zCi17Ci0gICAgcHVi
bGljIGNsYXNzIFJlcGVhdGVkRmllbGRUZXN0Ci0gICAgewotICAgICAgICBbVGVzdF0KLSAgICAg
ICAgcHVibGljIHZvaWQgTnVsbFZhbHVlc1JlamVjdGVkKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdmFyIGxpc3QgPSBuZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+KCk7Ci0gICAgICAgICAgICBB
c3NlcnQuVGhyb3dzPEFyZ3VtZW50TnVsbEV4Y2VwdGlvbj4oKCkgPT4gbGlzdC5BZGQoKHN0cmlu
ZyludWxsKSk7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50TnVsbEV4Y2VwdGlv
bj4oKCkgPT4gbGlzdC5BZGQoKElFbnVtZXJhYmxlPHN0cmluZz4pbnVsbCkpOwotICAgICAgICAg
ICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE51bGxFeGNlcHRpb24+KCgpID0+IGxpc3QuQWRkKChS
ZXBlYXRlZEZpZWxkPHN0cmluZz4pbnVsbCkpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxB
cmd1bWVudE51bGxFeGNlcHRpb24+KCgpID0+IGxpc3QuQ29udGFpbnMobnVsbCkpOwotICAgICAg
ICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE51bGxFeGNlcHRpb24+KCgpID0+IGxpc3QuSW5k
ZXhPZihudWxsKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGlj
IHZvaWQgQWRkX1NpbmdsZUl0ZW0oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9
IG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4oKTsKLSAgICAgICAgICAgIGxpc3QuQWRkKCJmb28i
KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxLCBsaXN0LkNvdW50KTsKLSAgICAgICAg
ICAgIEFzc2VydC5BcmVFcXVhbCgiZm9vIiwgbGlzdFswXSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgQWRkX1NlcXVlbmNlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgdmFyIGxpc3QgPSBuZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+KCk7Ci0gICAg
ICAgICAgICBsaXN0LkFkZChuZXdbXSB7ICJmb28iLCAiYmFyIiB9KTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbCgyLCBsaXN0LkNvdW50KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgiZm9vIiwgbGlzdFswXSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoImJhciIsIGxp
c3RbMV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lk
IEFkZF9SZXBlYXRlZEZpZWxkKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxpc3QgPSBu
ZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHsgIm9yaWdpbmFsIiB9OwotICAgICAgICAgICAgbGlz
dC5BZGQobmV3IFJlcGVhdGVkRmllbGQ8c3RyaW5nPiB7ICJmb28iLCAiYmFyIiB9KTsKLSAgICAg
ICAgICAgIEFzc2VydC5BcmVFcXVhbCgzLCBsaXN0LkNvdW50KTsKLSAgICAgICAgICAgIEFzc2Vy
dC5BcmVFcXVhbCgib3JpZ2luYWwiLCBsaXN0WzBdKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVF
cXVhbCgiZm9vIiwgbGlzdFsxXSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoImJhciIs
IGxpc3RbMl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2
b2lkIFJlbW92ZUF0X1ZhbGlkKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxpc3QgPSBu
ZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHsgImZpcnN0IiwgInNlY29uZCIsICJ0aGlyZCIgfTsK
LSAgICAgICAgICAgIGxpc3QuUmVtb3ZlQXQoMSk7Ci0gICAgICAgICAgICBDb2xsZWN0aW9uQXNz
ZXJ0LkFyZUVxdWFsKG5ld1tdIHsgImZpcnN0IiwgInRoaXJkIiB9LCBsaXN0KTsKLSAgICAgICAg
ICAgIC8vIEp1c3QgY2hlY2sgdGhhdCB0aGVzZSBkb24ndCB0aHJvdy4uLgotICAgICAgICAgICAg
bGlzdC5SZW1vdmVBdChsaXN0LkNvdW50IC0gMSk7IC8vIE5vdyB0aGUgY291bnQgd2lsbCBiZSAx
Li4uCi0gICAgICAgICAgICBsaXN0LlJlbW92ZUF0KDApOwotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKDAsIGxpc3QuQ291bnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAg
ICAgIHB1YmxpYyB2b2lkIFJlbW92ZUF0X0ludmFsaWQoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB2YXIgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3QiLCAic2Vjb25k
IiwgInRoaXJkIiB9OwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE91dE9mUmFu
Z2VFeGNlcHRpb24+KCgpID0+IGxpc3QuUmVtb3ZlQXQoLTEpKTsKLSAgICAgICAgICAgIEFzc2Vy
dC5UaHJvd3M8QXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uPigoKSA9PiBsaXN0LlJlbW92ZUF0
KDMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBJ
bnNlcnRfVmFsaWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IG5ldyBSZXBl
YXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3QiLCAic2Vjb25kIiB9OwotICAgICAgICAgICAgbGlz
dC5JbnNlcnQoMSwgIm1pZGRsZSIpOwotICAgICAgICAgICAgQ29sbGVjdGlvbkFzc2VydC5BcmVF
cXVhbChuZXdbXSB7ICJmaXJzdCIsICJtaWRkbGUiLCAic2Vjb25kIiB9LCBsaXN0KTsKLSAgICAg
ICAgICAgIGxpc3QuSW5zZXJ0KDMsICJlbmQiKTsKLSAgICAgICAgICAgIENvbGxlY3Rpb25Bc3Nl
cnQuQXJlRXF1YWwobmV3W10geyAiZmlyc3QiLCAibWlkZGxlIiwgInNlY29uZCIsICJlbmQiIH0s
IGxpc3QpOwotICAgICAgICAgICAgbGlzdC5JbnNlcnQoMCwgInN0YXJ0Iik7Ci0gICAgICAgICAg
ICBDb2xsZWN0aW9uQXNzZXJ0LkFyZUVxdWFsKG5ld1tdIHsgInN0YXJ0IiwgImZpcnN0IiwgIm1p
ZGRsZSIsICJzZWNvbmQiLCAiZW5kIiB9LCBsaXN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtU
ZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBJbnNlcnRfSW52YWxpZCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHZhciBsaXN0ID0gbmV3IFJlcGVhdGVkRmllbGQ8c3RyaW5nPiB7ICJmaXJzdCIs
ICJzZWNvbmQiIH07Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50T3V0T2ZSYW5n
ZUV4Y2VwdGlvbj4oKCkgPT4gbGlzdC5JbnNlcnQoLTEsICJmb28iKSk7Ci0gICAgICAgICAgICBB
c3NlcnQuVGhyb3dzPEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbj4oKCkgPT4gbGlzdC5JbnNl
cnQoMywgImZvbyIpKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnROdWxsRXhj
ZXB0aW9uPigoKSA9PiBsaXN0Lkluc2VydCgwLCBudWxsKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgRXF1YWxzX1JlcGVhdGVkRmllbGQoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4g
eyAiZmlyc3QiLCAic2Vjb25kIiB9OwotICAgICAgICAgICAgQXNzZXJ0LklzRmFsc2UobGlzdC5F
cXVhbHMoKFJlcGVhdGVkRmllbGQ8c3RyaW5nPikgbnVsbCkpOwotICAgICAgICAgICAgQXNzZXJ0
LklzVHJ1ZShsaXN0LkVxdWFscyhsaXN0KSk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShs
aXN0LkVxdWFscyhuZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHsgImZpcnN0IiwgInRoaXJkIiB9
KSk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShsaXN0LkVxdWFscyhuZXcgUmVwZWF0ZWRG
aWVsZDxzdHJpbmc+IHsgImZpcnN0IiB9KSk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNUcnVlKGxp
c3QuRXF1YWxzKG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3QiLCAic2Vjb25kIiB9
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgRXF1
YWxzX09iamVjdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBsaXN0ID0gbmV3IFJlcGVh
dGVkRmllbGQ8c3RyaW5nPiB7ICJmaXJzdCIsICJzZWNvbmQiIH07Ci0gICAgICAgICAgICBBc3Nl
cnQuSXNGYWxzZShsaXN0LkVxdWFscygob2JqZWN0KSBudWxsKSk7Ci0gICAgICAgICAgICBBc3Nl
cnQuSXNUcnVlKGxpc3QuRXF1YWxzKChvYmplY3QpIGxpc3QpKTsKLSAgICAgICAgICAgIEFzc2Vy
dC5Jc0ZhbHNlKGxpc3QuRXF1YWxzKChvYmplY3QpIG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4g
eyAiZmlyc3QiLCAidGhpcmQiIH0pKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNlKGxpc3Qu
RXF1YWxzKChvYmplY3QpIG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3QiIH0pKTsK
LSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUobGlzdC5FcXVhbHMoKG9iamVjdCkgbmV3IFJlcGVh
dGVkRmllbGQ8c3RyaW5nPiB7ICJmaXJzdCIsICJzZWNvbmQiIH0pKTsKLSAgICAgICAgICAgIEFz
c2VydC5Jc0ZhbHNlKGxpc3QuRXF1YWxzKG5ldyBvYmplY3QoKSkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEdldEVudW1lcmF0b3JfR2VuZXJpY0lu
dGVyZmFjZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElFbnVtZXJhYmxlPHN0cmluZz4gbGlz
dCA9IG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3QiLCAic2Vjb25kIiB9OwotICAg
ICAgICAgICAgLy8gU2VsZWN0IGdldHMgcmlkIG9mIHRoZSBvcHRpbWl6YXRpb25zIGluIFRvTGlz
dC4uLgotICAgICAgICAgICAgQ29sbGVjdGlvbkFzc2VydC5BcmVFcXVhbChuZXdbXSB7ICJmaXJz
dCIsICJzZWNvbmQiIH0sIGxpc3QuU2VsZWN0KHggPT4geCkuVG9MaXN0KCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEdldEVudW1lcmF0b3JfTm9u
R2VuZXJpY0ludGVyZmFjZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElFbnVtZXJhYmxlIGxp
c3QgPSBuZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHsgImZpcnN0IiwgInNlY29uZCIgfTsKLSAg
ICAgICAgICAgIENvbGxlY3Rpb25Bc3NlcnQuQXJlRXF1YWwobmV3W10geyAiZmlyc3QiLCAic2Vj
b25kIiB9LCBsaXN0LkNhc3Q8b2JqZWN0PigpLlRvTGlzdCgpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBDb3B5VG8oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB2YXIgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3QiLCAi
c2Vjb25kIiB9OwotICAgICAgICAgICAgc3RyaW5nW10gc3RyaW5nQXJyYXkgPSBuZXcgc3RyaW5n
WzRdOwotICAgICAgICAgICAgbGlzdC5Db3B5VG8oc3RyaW5nQXJyYXksIDEpOwotICAgICAgICAg
ICAgQ29sbGVjdGlvbkFzc2VydC5BcmVFcXVhbChuZXdbXSB7IG51bGwsICJmaXJzdCIsICJzZWNv
bmQiLCBudWxsIH0sIHN0cmluZ0FycmF5KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQot
ICAgICAgICBwdWJsaWMgdm9pZCBJbmRleGVyX0dldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZhciBsaXN0ID0gbmV3IFJlcGVhdGVkRmllbGQ8c3RyaW5nPiB7ICJmaXJzdCIsICJzZWNvbmQi
IH07Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoImZpcnN0IiwgbGlzdFswXSk7Ci0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoInNlY29uZCIsIGxpc3RbMV0pOwotICAgICAgICAgICAg
QXNzZXJ0LlRocm93czxBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24+KCgpID0+IGxpc3RbLTFd
LkdldEhhc2hDb2RlKCkpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE91dE9m
UmFuZ2VFeGNlcHRpb24+KCgpID0+IGxpc3RbMl0uR2V0SGFzaENvZGUoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgSW5kZXhlcl9TZXQoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4g
eyAiZmlyc3QiLCAic2Vjb25kIiB9OwotICAgICAgICAgICAgbGlzdFswXSA9ICJjaGFuZ2VkIjsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiY2hhbmdlZCIsIGxpc3RbMF0pOwotICAgICAg
ICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE51bGxFeGNlcHRpb24+KCgpID0+IGxpc3RbMF0g
PSBudWxsKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnRPdXRPZlJhbmdlRXhj
ZXB0aW9uPigoKSA9PiBsaXN0Wy0xXSA9ICJiYWQiKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJv
d3M8QXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uPigoKSA9PiBsaXN0WzJdID0gImJhZCIpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIENsb25lX1Jl
dHVybnNNdXRhYmxlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxpc3QgPSBuZXcgUmVw
ZWF0ZWRGaWVsZDxpbnQ+IHsgMCB9OwotICAgICAgICAgICAgdmFyIGNsb25lID0gbGlzdC5DbG9u
ZSgpOwotICAgICAgICAgICAgY2xvbmVbMF0gPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEVudW1lcmF0b3IoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB2YXIgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3QiLCAic2Vj
b25kIiB9OwotICAgICAgICAgICAgdXNpbmcgKHZhciBlbnVtZXJhdG9yID0gbGlzdC5HZXRFbnVt
ZXJhdG9yKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShl
bnVtZXJhdG9yLk1vdmVOZXh0KCkpOwotICAgICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgi
Zmlyc3QiLCBlbnVtZXJhdG9yLkN1cnJlbnQpOwotICAgICAgICAgICAgICAgIEFzc2VydC5Jc1Ry
dWUoZW51bWVyYXRvci5Nb3ZlTmV4dCgpKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwoInNlY29uZCIsIGVudW1lcmF0b3IuQ3VycmVudCk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0
LklzRmFsc2UoZW51bWVyYXRvci5Nb3ZlTmV4dCgpKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQu
SXNGYWxzZShlbnVtZXJhdG9yLk1vdmVOZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEFkZEVudHJpZXNGcm9tX1Bh
Y2tlZEludDMyKCkKLSAgICAgICAgewotICAgICAgICAgICAgdWludCBwYWNrZWRUYWcgPSBXaXJl
Rm9ybWF0Lk1ha2VUYWcoMTAsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsK
LSAgICAgICAgICAgIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAg
ICB2YXIgb3V0cHV0ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAg
ICB2YXIgbGVuZ3RoID0gQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZSgxMCkKLSAg
ICAgICAgICAgICAgICArIENvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoOTk5KQot
ICAgICAgICAgICAgICAgICsgQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZSgtMTAw
MCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcocGFja2VkVGFnKTsKLSAgICAgICAgICAg
IG91dHB1dC5Xcml0ZVJhd1ZhcmludDMyKCh1aW50KSBsZW5ndGgpOwotICAgICAgICAgICAgb3V0
cHV0LldyaXRlSW50MzIoMTApOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoOTk5KTsK
LSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUludDMyKC0xMDAwKTsKLSAgICAgICAgICAgIG91dHB1
dC5GbHVzaCgpOwotICAgICAgICAgICAgc3RyZWFtLlBvc2l0aW9uID0gMDsKLQotICAgICAgICAg
ICAgLy8gRGVsaWJlcmF0ZWx5ICJleHBlY3RpbmciIGEgbm9uLXBhY2tlZCB0YWcsIGJ1dCB3ZSBk
ZXRlY3QgdGhhdCB0aGUgZGF0YSBpcwotICAgICAgICAgICAgLy8gYWN0dWFsbHkgcGFja2VkLgot
ICAgICAgICAgICAgdWludCBub25QYWNrZWRUYWcgPSBXaXJlRm9ybWF0Lk1ha2VUYWcoMTAsIFdp
cmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAgICAgICAgIHZhciBmaWVs
ZCA9IG5ldyBSZXBlYXRlZEZpZWxkPGludD4oKTsKLSAgICAgICAgICAgIHZhciBpbnB1dCA9IG5l
dyBDb2RlZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAgICBpbnB1dC5Bc3NlcnROZXh0
VGFnKHBhY2tlZFRhZyk7Ci0gICAgICAgICAgICBmaWVsZC5BZGRFbnRyaWVzRnJvbShpbnB1dCwg
RmllbGRDb2RlYy5Gb3JJbnQzMihub25QYWNrZWRUYWcpKTsKLSAgICAgICAgICAgIENvbGxlY3Rp
b25Bc3NlcnQuQXJlRXF1YWwobmV3W10geyAxMCwgOTk5LCAtMTAwMCB9LCBmaWVsZCk7Ci0gICAg
ICAgICAgICBBc3NlcnQuSXNUcnVlKGlucHV0LklzQXRFbmQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEFkZEVudHJpZXNGcm9tX05vblBhY2tlZElu
dDMyKCkKLSAgICAgICAgewotICAgICAgICAgICAgdWludCBub25QYWNrZWRUYWcgPSBXaXJlRm9y
bWF0Lk1ha2VUYWcoMTAsIFdpcmVGb3JtYXQuV2lyZVR5cGUuVmFyaW50KTsKLSAgICAgICAgICAg
IHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICB2YXIgb3V0cHV0
ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAgICBvdXRwdXQuV3Jp
dGVUYWcobm9uUGFja2VkVGFnKTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUludDMyKDEwKTsK
LSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZyhub25QYWNrZWRUYWcpOwotICAgICAgICAgICAg
b3V0cHV0LldyaXRlSW50MzIoOTk5KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZyhub25Q
YWNrZWRUYWcpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoLTEwMDApOyAvLyBKdXN0
IGZvciB2YXJpZXR5Li4uCi0gICAgICAgICAgICBvdXRwdXQuRmx1c2goKTsKLSAgICAgICAgICAg
IHN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0KLSAgICAgICAgICAgIC8vIERlbGliZXJhdGVseSAiZXhw
ZWN0aW5nIiBhIHBhY2tlZCB0YWcsIGJ1dCB3ZSBkZXRlY3QgdGhhdCB0aGUgZGF0YSBpcwotICAg
ICAgICAgICAgLy8gYWN0dWFsbHkgbm90IHBhY2tlZC4KLSAgICAgICAgICAgIHVpbnQgcGFja2Vk
VGFnID0gV2lyZUZvcm1hdC5NYWtlVGFnKDEwLCBXaXJlRm9ybWF0LldpcmVUeXBlLkxlbmd0aERl
bGltaXRlZCk7Ci0gICAgICAgICAgICB2YXIgZmllbGQgPSBuZXcgUmVwZWF0ZWRGaWVsZDxpbnQ+
KCk7Ci0gICAgICAgICAgICB2YXIgaW5wdXQgPSBuZXcgQ29kZWRJbnB1dFN0cmVhbShzdHJlYW0p
OwotICAgICAgICAgICAgaW5wdXQuQXNzZXJ0TmV4dFRhZyhub25QYWNrZWRUYWcpOwotICAgICAg
ICAgICAgZmllbGQuQWRkRW50cmllc0Zyb20oaW5wdXQsIEZpZWxkQ29kZWMuRm9ySW50MzIocGFj
a2VkVGFnKSk7Ci0gICAgICAgICAgICBDb2xsZWN0aW9uQXNzZXJ0LkFyZUVxdWFsKG5ld1tdIHsg
MTAsIDk5OSwgLTEwMDAgfSwgZmllbGQpOwotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShpbnB1
dC5Jc0F0RW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMg
dm9pZCBBZGRFbnRyaWVzRnJvbV9TdHJpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1aW50
IHRhZyA9IFdpcmVGb3JtYXQuTWFrZVRhZygxMCwgV2lyZUZvcm1hdC5XaXJlVHlwZS5MZW5ndGhE
ZWxpbWl0ZWQpOwotICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsK
LSAgICAgICAgICAgIHZhciBvdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0oc3RyZWFtKTsK
LSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZyh0YWcpOwotICAgICAgICAgICAgb3V0cHV0Lldy
aXRlU3RyaW5nKCJGb28iKTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZyh0YWcpOwotICAg
ICAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKCIiKTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0
ZVRhZyh0YWcpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKCJCYXIiKTsKLSAgICAg
ICAgICAgIG91dHB1dC5GbHVzaCgpOwotICAgICAgICAgICAgc3RyZWFtLlBvc2l0aW9uID0gMDsK
LQotICAgICAgICAgICAgdmFyIGZpZWxkID0gbmV3IFJlcGVhdGVkRmllbGQ8c3RyaW5nPigpOwot
ICAgICAgICAgICAgdmFyIGlucHV0ID0gbmV3IENvZGVkSW5wdXRTdHJlYW0oc3RyZWFtKTsKLSAg
ICAgICAgICAgIGlucHV0LkFzc2VydE5leHRUYWcodGFnKTsKLSAgICAgICAgICAgIGZpZWxkLkFk
ZEVudHJpZXNGcm9tKGlucHV0LCBGaWVsZENvZGVjLkZvclN0cmluZyh0YWcpKTsKLSAgICAgICAg
ICAgIENvbGxlY3Rpb25Bc3NlcnQuQXJlRXF1YWwobmV3W10geyAiRm9vIiwgIiIsICJCYXIiIH0s
IGZpZWxkKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUoaW5wdXQuSXNBdEVuZCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgQWRkRW50cmllc0Zy
b21fTWVzc2FnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlMSA9IG5ldyBG
b3JlaWduTWVzc2FnZSB7IEMgPSAyMDAwIH07Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZTIgPSBu
ZXcgRm9yZWlnbk1lc3NhZ2UgeyBDID0gLTI1MCB9OwotCi0gICAgICAgICAgICB1aW50IHRhZyA9
IFdpcmVGb3JtYXQuTWFrZVRhZygxMCwgV2lyZUZvcm1hdC5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0
ZWQpOwotICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAg
ICAgICAgIHZhciBvdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0oc3RyZWFtKTsKLSAgICAg
ICAgICAgIG91dHB1dC5Xcml0ZVRhZyh0YWcpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlTWVz
c2FnZShtZXNzYWdlMSk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcodGFnKTsKLSAgICAg
ICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UobWVzc2FnZTIpOwotICAgICAgICAgICAgb3V0cHV0
LkZsdXNoKCk7Ci0gICAgICAgICAgICBzdHJlYW0uUG9zaXRpb24gPSAwOwotCi0gICAgICAgICAg
ICB2YXIgZmllbGQgPSBuZXcgUmVwZWF0ZWRGaWVsZDxGb3JlaWduTWVzc2FnZT4oKTsKLSAgICAg
ICAgICAgIHZhciBpbnB1dCA9IG5ldyBDb2RlZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAg
ICAgICBpbnB1dC5Bc3NlcnROZXh0VGFnKHRhZyk7Ci0gICAgICAgICAgICBmaWVsZC5BZGRFbnRy
aWVzRnJvbShpbnB1dCwgRmllbGRDb2RlYy5Gb3JNZXNzYWdlKHRhZywgRm9yZWlnbk1lc3NhZ2Uu
UGFyc2VyKSk7Ci0gICAgICAgICAgICBDb2xsZWN0aW9uQXNzZXJ0LkFyZUVxdWFsKG5ld1tdIHsg
bWVzc2FnZTEsIG1lc3NhZ2UyfSwgZmllbGQpOwotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShp
bnB1dC5Jc0F0RW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJs
aWMgdm9pZCBXcml0ZVRvX1BhY2tlZEludDMyKCkKLSAgICAgICAgewotICAgICAgICAgICAgdWlu
dCB0YWcgPSBXaXJlRm9ybWF0Lk1ha2VUYWcoMTAsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3Ro
RGVsaW1pdGVkKTsKLSAgICAgICAgICAgIHZhciBmaWVsZCA9IG5ldyBSZXBlYXRlZEZpZWxkPGlu
dD4geyAxMCwgMTAwMCwgMTAwMDAwMCB9OwotICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBN
ZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIHZhciBvdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRT
dHJlYW0oc3RyZWFtKTsKLSAgICAgICAgICAgIGZpZWxkLldyaXRlVG8ob3V0cHV0LCBGaWVsZENv
ZGVjLkZvckludDMyKHRhZykpOwotICAgICAgICAgICAgb3V0cHV0LkZsdXNoKCk7Ci0gICAgICAg
ICAgICBzdHJlYW0uUG9zaXRpb24gPSAwOwotCi0gICAgICAgICAgICB2YXIgaW5wdXQgPSBuZXcg
Q29kZWRJbnB1dFN0cmVhbShzdHJlYW0pOwotICAgICAgICAgICAgaW5wdXQuQXNzZXJ0TmV4dFRh
Zyh0YWcpOwotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGlucHV0LlJlYWRMZW5ndGgoKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxMCwgaW5wdXQuUmVhZEludDMyKCkpOwotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEwMDAsIGlucHV0LlJlYWRJbnQzMigpKTsKLSAgICAgICAg
ICAgIEFzc2VydC5BcmVFcXVhbCgxMDAwMDAwLCBpbnB1dC5SZWFkSW50MzIoKSk7Ci0gICAgICAg
ICAgICBBc3NlcnQuSXNUcnVlKGlucHV0LklzQXRFbmQpOwotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKDEgKyBDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTGVuZ3RoU2l6ZShsZW5ndGgpICsg
bGVuZ3RoLCBzdHJlYW0uTGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAg
ICAgICBwdWJsaWMgdm9pZCBXcml0ZVRvX05vblBhY2tlZEludDMyKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdWludCB0YWcgPSBXaXJlRm9ybWF0Lk1ha2VUYWcoMTAsIFdpcmVGb3JtYXQuV2ly
ZVR5cGUuVmFyaW50KTsKLSAgICAgICAgICAgIHZhciBmaWVsZCA9IG5ldyBSZXBlYXRlZEZpZWxk
PGludD4geyAxMCwgMTAwMCwgMTAwMDAwMH07Ci0gICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3
IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBDb2RlZE91dHB1
dFN0cmVhbShzdHJlYW0pOwotICAgICAgICAgICAgZmllbGQuV3JpdGVUbyhvdXRwdXQsIEZpZWxk
Q29kZWMuRm9ySW50MzIodGFnKSk7Ci0gICAgICAgICAgICBvdXRwdXQuRmx1c2goKTsKLSAgICAg
ICAgICAgIHN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0KLSAgICAgICAgICAgIHZhciBpbnB1dCA9IG5l
dyBDb2RlZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAgICBpbnB1dC5Bc3NlcnROZXh0
VGFnKHRhZyk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMTAsIGlucHV0LlJlYWRJbnQz
MigpKTsKLSAgICAgICAgICAgIGlucHV0LkFzc2VydE5leHRUYWcodGFnKTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbCgxMDAwLCBpbnB1dC5SZWFkSW50MzIoKSk7Ci0gICAgICAgICAgICBp
bnB1dC5Bc3NlcnROZXh0VGFnKHRhZyk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMTAw
MDAwMCwgaW5wdXQuUmVhZEludDMyKCkpOwotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShpbnB1
dC5Jc0F0RW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMg
dm9pZCBXcml0ZVRvX1N0cmluZygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVpbnQgdGFnID0g
V2lyZUZvcm1hdC5NYWtlVGFnKDEwLCBXaXJlRm9ybWF0LldpcmVUeXBlLkxlbmd0aERlbGltaXRl
ZCk7Ci0gICAgICAgICAgICB2YXIgZmllbGQgPSBuZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHsg
IkZvbyIsICIiLCAiQmFyIiB9OwotICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBNZW1vcnlT
dHJlYW0oKTsKLSAgICAgICAgICAgIHZhciBvdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0o
c3RyZWFtKTsKLSAgICAgICAgICAgIGZpZWxkLldyaXRlVG8ob3V0cHV0LCBGaWVsZENvZGVjLkZv
clN0cmluZyh0YWcpKTsKLSAgICAgICAgICAgIG91dHB1dC5GbHVzaCgpOwotICAgICAgICAgICAg
c3RyZWFtLlBvc2l0aW9uID0gMDsKLQotICAgICAgICAgICAgdmFyIGlucHV0ID0gbmV3IENvZGVk
SW5wdXRTdHJlYW0oc3RyZWFtKTsKLSAgICAgICAgICAgIGlucHV0LkFzc2VydE5leHRUYWcodGFn
KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiRm9vIiwgaW5wdXQuUmVhZFN0cmluZygp
KTsKLSAgICAgICAgICAgIGlucHV0LkFzc2VydE5leHRUYWcodGFnKTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbCgiIiwgaW5wdXQuUmVhZFN0cmluZygpKTsKLSAgICAgICAgICAgIGlucHV0
LkFzc2VydE5leHRUYWcodGFnKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiQmFyIiwg
aW5wdXQuUmVhZFN0cmluZygpKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUoaW5wdXQuSXNB
dEVuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQg
V3JpdGVUb19NZXNzYWdlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2UxID0g
bmV3IEZvcmVpZ25NZXNzYWdlIHsgQyA9IDIwIH07Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZTIg
PSBuZXcgRm9yZWlnbk1lc3NhZ2UgeyBDID0gMjUgfTsKLSAgICAgICAgICAgIHVpbnQgdGFnID0g
V2lyZUZvcm1hdC5NYWtlVGFnKDEwLCBXaXJlRm9ybWF0LldpcmVUeXBlLkxlbmd0aERlbGltaXRl
ZCk7Ci0gICAgICAgICAgICB2YXIgZmllbGQgPSBuZXcgUmVwZWF0ZWRGaWVsZDxGb3JlaWduTWVz
c2FnZT4geyBtZXNzYWdlMSwgbWVzc2FnZTIgfTsKLSAgICAgICAgICAgIHZhciBzdHJlYW0gPSBu
ZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbmV3IENvZGVkT3V0
cHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAgICBmaWVsZC5Xcml0ZVRvKG91dHB1dCwgRmll
bGRDb2RlYy5Gb3JNZXNzYWdlKHRhZywgRm9yZWlnbk1lc3NhZ2UuUGFyc2VyKSk7Ci0gICAgICAg
ICAgICBvdXRwdXQuRmx1c2goKTsKLSAgICAgICAgICAgIHN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0K
LSAgICAgICAgICAgIHZhciBpbnB1dCA9IG5ldyBDb2RlZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0g
ICAgICAgICAgICBpbnB1dC5Bc3NlcnROZXh0VGFnKHRhZyk7Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwobWVzc2FnZTEsIGlucHV0LlJlYWRNZXNzYWdlKEZvcmVpZ25NZXNzYWdlLlBhcnNl
cikpOwotICAgICAgICAgICAgaW5wdXQuQXNzZXJ0TmV4dFRhZyh0YWcpOwotICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UyLCBpbnB1dC5SZWFkTWVzc2FnZShGb3JlaWduTWVzc2Fn
ZS5QYXJzZXIpKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUoaW5wdXQuSXNBdEVuZCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgQ2FsY3VsYXRl
U2l6ZV9WYXJpYWJsZVNpemVOb25QYWNrZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
bGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPGludD4geyAxLCA1MDAsIDEgfTsKLSAgICAgICAgICAg
IHZhciB0YWcgPSBXaXJlRm9ybWF0Lk1ha2VUYWcoMSwgV2lyZUZvcm1hdC5XaXJlVHlwZS5WYXJp
bnQpOwotICAgICAgICAgICAgLy8gMiBieXRlcyBmb3IgdGhlIGZpcnN0IGVudHJ5LCAzIGJ5dGVz
IGZvciB0aGUgc2Vjb25kLCAyIGJ5dGVzIGZvciB0aGUgdGhpcmQKLSAgICAgICAgICAgIEFzc2Vy
dC5BcmVFcXVhbCg3LCBsaXN0LkNhbGN1bGF0ZVNpemUoRmllbGRDb2RlYy5Gb3JJbnQzMih0YWcp
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgQ2Fs
Y3VsYXRlU2l6ZV9GaXhlZFNpemVOb25QYWNrZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPGludD4geyAxLCA1MDAsIDEgfTsKLSAgICAgICAg
ICAgIHZhciB0YWcgPSBXaXJlRm9ybWF0Lk1ha2VUYWcoMSwgV2lyZUZvcm1hdC5XaXJlVHlwZS5G
aXhlZDMyKTsKLSAgICAgICAgICAgIC8vIDUgYnl0ZXMgZm9yIHRoZSBlYWNoIGVudHJ5Ci0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMTUsIGxpc3QuQ2FsY3VsYXRlU2l6ZShGaWVsZENvZGVj
LkZvclNGaXhlZDMyKHRhZykpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAg
ICBwdWJsaWMgdm9pZCBDYWxjdWxhdGVTaXplX1ZhcmlhYmxlU2l6ZVBhY2tlZCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZhciBsaXN0ID0gbmV3IFJlcGVhdGVkRmllbGQ8aW50PiB7IDEsIDUw
MCwgMX07Ci0gICAgICAgICAgICB2YXIgdGFnID0gV2lyZUZvcm1hdC5NYWtlVGFnKDEsIFdpcmVG
b3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAgICAgICAgIC8vIDEgYnl0ZSBm
b3IgdGhlIHRhZywgMSBieXRlIGZvciB0aGUgbGVuZ3RoLAotICAgICAgICAgICAgLy8gMSBieXRl
IGZvciB0aGUgZmlyc3QgZW50cnksIDIgYnl0ZXMgZm9yIHRoZSBzZWNvbmQsIDEgYnl0ZSBmb3Ig
dGhlIHRoaXJkCi0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoNiwgbGlzdC5DYWxjdWxhdGVT
aXplKEZpZWxkQ29kZWMuRm9ySW50MzIodGFnKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIENhbGN1bGF0ZVNpemVfRml4ZWRTaXplUGFja2VkKCkK
LSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxpc3QgPSBuZXcgUmVwZWF0ZWRGaWVsZDxpbnQ+
IHsgMSwgNTAwLCAxIH07Ci0gICAgICAgICAgICB2YXIgdGFnID0gV2lyZUZvcm1hdC5NYWtlVGFn
KDEsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAgICAgICAgIC8v
IDEgYnl0ZSBmb3IgdGhlIHRhZywgMSBieXRlIGZvciB0aGUgbGVuZ3RoLCA0IGJ5dGVzIHBlciBl
bnRyeQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDE0LCBsaXN0LkNhbGN1bGF0ZVNpemUo
RmllbGRDb2RlYy5Gb3JTRml4ZWQzMih0YWcpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVz
dF0KLSAgICAgICAgcHVibGljIHZvaWQgVGVzdE5lZ2F0aXZlRW51bUFycmF5KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IDEgKyAxICsgKDExICogNSk7Ci0gICAgICAg
ICAgICBpbnQgbXNnU2l6ZSA9IGFycmF5U2l6ZTsKLSAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9
IG5ldyBieXRlW21zZ1NpemVdOwotICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0
ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKGJ5dGVzKTsKLSAgICAgICAgICAgIHVpbnQgdGFnID0g
V2lyZUZvcm1hdC5NYWtlVGFnKDgsIFdpcmVGb3JtYXQuV2lyZVR5cGUuVmFyaW50KTsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpID49IC01OyBpLS0pCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKHRhZyk7Ci0gICAgICAgICAgICAgICAgb3V0cHV0
LldyaXRlRW51bShpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKDAsIG91dHB1dC5TcGFjZUxlZnQpOwotCi0gICAgICAgICAgICBDb2RlZElucHV0U3RyZWFt
IGlucHV0ID0gbmV3IENvZGVkSW5wdXRTdHJlYW0oYnl0ZXMpOwotICAgICAgICAgICAgdGFnID0g
aW5wdXQuUmVhZFRhZygpOwotCi0gICAgICAgICAgICBSZXBlYXRlZEZpZWxkPFNhbXBsZUVudW0+
IHZhbHVlcyA9IG5ldyBSZXBlYXRlZEZpZWxkPFNhbXBsZUVudW0+KCk7Ci0gICAgICAgICAgICB2
YWx1ZXMuQWRkRW50cmllc0Zyb20oaW5wdXQsIEZpZWxkQ29kZWMuRm9yRW51bSh0YWcsIHggPT4g
KGludCl4LCB4ID0+IChTYW1wbGVFbnVtKXgpKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKDYsIHZhbHVlcy5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoU2FtcGxl
RW51bS5Ob25lLCB2YWx1ZXNbMF0pOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCgoU2Ft
cGxlRW51bSkoLTEpKSwgdmFsdWVzWzFdKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChT
YW1wbGVFbnVtLk5lZ2F0aXZlVmFsdWUsIHZhbHVlc1syXSk7Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwoKChTYW1wbGVFbnVtKSgtMykpLCB2YWx1ZXNbM10pOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKCgoU2FtcGxlRW51bSkoLTQpKSwgdmFsdWVzWzRdKTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbCgoKFNhbXBsZUVudW0pKC01KSksIHZhbHVlc1s1XSk7Ci0gICAgICAg
IH0KLQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBUZXN0TmVnYXRpdmVF
bnVtUGFja2VkQXJyYXkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlTaXplID0g
MSArICgxMCAqIDUpOwotICAgICAgICAgICAgaW50IG1zZ1NpemUgPSAxICsgMSArIGFycmF5U2l6
ZTsKLSAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW21zZ1NpemVdOwotICAgICAg
ICAgICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKGJ5
dGVzKTsKLSAgICAgICAgICAgIC8vIExlbmd0aC1kZWxpbWl0ZWQgdG8gc2hvdyB3ZSB3YW50IHRo
ZSBwYWNrZWQgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgIHVpbnQgdGFnID0gV2lyZUZvcm1h
dC5NYWtlVGFnKDgsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAg
ICAgICAgIG91dHB1dC5Xcml0ZVRhZyh0YWcpOwotICAgICAgICAgICAgaW50IHNpemUgPSAwOwot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPj0gLTU7IGktLSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBzaXplICs9IENvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6
ZShpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVJhd1ZhcmludDMy
KCh1aW50KXNpemUpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPj0gLTU7IGktLSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXQuV3JpdGVFbnVtKGkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIG91dHB1dC5TcGFjZUxl
ZnQpOwotCi0gICAgICAgICAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gbmV3IENvZGVkSW5w
dXRTdHJlYW0oYnl0ZXMpOwotICAgICAgICAgICAgdGFnID0gaW5wdXQuUmVhZFRhZygpOwotCi0g
ICAgICAgICAgICBSZXBlYXRlZEZpZWxkPFNhbXBsZUVudW0+IHZhbHVlcyA9IG5ldyBSZXBlYXRl
ZEZpZWxkPFNhbXBsZUVudW0+KCk7Ci0gICAgICAgICAgICB2YWx1ZXMuQWRkRW50cmllc0Zyb20o
aW5wdXQsIEZpZWxkQ29kZWMuRm9yRW51bSh0YWcsIHggPT4gKGludCl4LCB4ID0+IChTYW1wbGVF
bnVtKXgpKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDYsIHZhbHVlcy5Db3VudCk7
Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoU2FtcGxlRW51bS5Ob25lLCB2YWx1ZXNbMF0p
OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCgoU2FtcGxlRW51bSkoLTEpKSwgdmFsdWVz
WzFdKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChTYW1wbGVFbnVtLk5lZ2F0aXZlVmFs
dWUsIHZhbHVlc1syXSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoKChTYW1wbGVFbnVt
KSgtMykpLCB2YWx1ZXNbM10pOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCgoU2FtcGxl
RW51bSkoLTQpKSwgdmFsdWVzWzRdKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgoKFNh
bXBsZUVudW0pKC01KSksIHZhbHVlc1s1XSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGYWly
bHkgcGVyZnVuY3RvcnkgdGVzdHMgZm9yIHRoZSBub24tZ2VuZXJpYyBJTGlzdCBpbXBsZW1lbnRh
dGlvbgotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgSUxpc3RfSW5kZXhlcigp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBmaWVsZCA9IG5ldyBSZXBlYXRlZEZpZWxkPHN0
cmluZz4geyAiZmlyc3QiLCAic2Vjb25kIiB9OwotICAgICAgICAgICAgSUxpc3QgbGlzdCA9IGZp
ZWxkOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJmaXJzdCIsIGxpc3RbMF0pOwotICAg
ICAgICAgICAgbGlzdFsxXSA9ICJjaGFuZ2VkIjsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgiY2hhbmdlZCIsIGZpZWxkWzFdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAg
ICAgICBwdWJsaWMgdm9pZCBJTGlzdF9Db250YWlucygpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IElMaXN0IGxpc3QgPSBuZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHsgImZpcnN0IiwgInNlY29u
ZCIgfTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUobGlzdC5Db250YWlucygic2Vjb25kIikp
OwotICAgICAgICAgICAgQXNzZXJ0LklzRmFsc2UobGlzdC5Db250YWlucygidGhpcmQiKSk7Ci0g
ICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShsaXN0LkNvbnRhaW5zKG5ldyBvYmplY3QoKSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIElMaXN0X0Fk
ZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElMaXN0IGxpc3QgPSBuZXcgUmVwZWF0ZWRGaWVs
ZDxzdHJpbmc+IHsgImZpcnN0IiwgInNlY29uZCIgfTsKLSAgICAgICAgICAgIGxpc3QuQWRkKCJ0
aGlyZCIpOwotICAgICAgICAgICAgQ29sbGVjdGlvbkFzc2VydC5BcmVFcXVhbChuZXdbXSB7ICJm
aXJzdCIsICJzZWNvbmQiLCAidGhpcmQiIH0sIGxpc3QpOwotICAgICAgICB9Ci0KLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIElMaXN0X1JlbW92ZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIElMaXN0IGxpc3QgPSBuZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHsgImZpcnN0
IiwgInNlY29uZCIgfTsKLSAgICAgICAgICAgIGxpc3QuUmVtb3ZlKCJ0aGlyZCIpOyAvLyBOby1v
cCwgbm8gZXhjZXB0aW9uCi0gICAgICAgICAgICBsaXN0LlJlbW92ZShuZXcgb2JqZWN0KCkpOyAv
LyBOby1vcCwgbm8gZXhjZXB0aW9uCi0gICAgICAgICAgICBsaXN0LlJlbW92ZSgiZmlyc3QiKTsK
LSAgICAgICAgICAgIENvbGxlY3Rpb25Bc3NlcnQuQXJlRXF1YWwobmV3W10geyAic2Vjb25kIiB9
LCBsaXN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9p
ZCBJTGlzdF9Jc0ZpeGVkU2l6ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBmaWVsZCA9
IG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3QiLCAic2Vjb25kIiB9OwotICAgICAg
ICAgICAgSUxpc3QgbGlzdCA9IGZpZWxkOwotICAgICAgICAgICAgQXNzZXJ0LklzRmFsc2UobGlz
dC5Jc0ZpeGVkU2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVi
bGljIHZvaWQgSUxpc3RfSW5kZXhPZigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElMaXN0IGxp
c3QgPSBuZXcgUmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHsgImZpcnN0IiwgInNlY29uZCIgfTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxLCBsaXN0LkluZGV4T2YoInNlY29uZCIpKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgtMSwgbGlzdC5JbmRleE9mKCJ0aGlyZCIpKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgtMSwgbGlzdC5JbmRleE9mKG5ldyBvYmplY3QoKSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIElMaXN0
X1N5bmNSb290KCkKLSAgICAgICAgewotICAgICAgICAgICAgSUxpc3QgbGlzdCA9IG5ldyBSZXBl
YXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3QiLCAic2Vjb25kIiB9OwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZVNhbWUobGlzdCwgbGlzdC5TeW5jUm9vdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBb
VGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgSUxpc3RfQ29weVRvKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgSUxpc3QgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPHN0cmluZz4geyAiZmlyc3Qi
LCAic2Vjb25kIiB9OwotICAgICAgICAgICAgc3RyaW5nW10gc3RyaW5nQXJyYXkgPSBuZXcgc3Ry
aW5nWzRdOwotICAgICAgICAgICAgbGlzdC5Db3B5VG8oc3RyaW5nQXJyYXksIDEpOwotICAgICAg
ICAgICAgQ29sbGVjdGlvbkFzc2VydC5BcmVFcXVhbChuZXdbXSB7IG51bGwsICJmaXJzdCIsICAi
c2Vjb25kIiwgbnVsbCB9LCBzdHJpbmdBcnJheSk7Ci0KLSAgICAgICAgICAgIG9iamVjdFtdIG9i
amVjdEFycmF5ID0gbmV3IG9iamVjdFs0XTsKLSAgICAgICAgICAgIGxpc3QuQ29weVRvKG9iamVj
dEFycmF5LCAxKTsKLSAgICAgICAgICAgIENvbGxlY3Rpb25Bc3NlcnQuQXJlRXF1YWwobmV3W10g
eyBudWxsLCAiZmlyc3QiLCAic2Vjb25kIiwgbnVsbCB9LCBvYmplY3RBcnJheSk7Ci0KLSAgICAg
ICAgICAgIEFzc2VydC5UaHJvd3M8QXJyYXlUeXBlTWlzbWF0Y2hFeGNlcHRpb24+KCgpID0+IGxp
c3QuQ29weVRvKG5ldyBTdHJpbmdCdWlsZGVyWzRdLCAxKSk7Ci0gICAgICAgICAgICBBc3NlcnQu
VGhyb3dzPEFycmF5VHlwZU1pc21hdGNoRXhjZXB0aW9uPigoKSA9PiBsaXN0LkNvcHlUbyhuZXcg
aW50WzRdLCAxKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGlj
IHZvaWQgSUxpc3RfSXNTeW5jaHJvbml6ZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBJTGlz
dCBsaXN0ID0gbmV3IFJlcGVhdGVkRmllbGQ8c3RyaW5nPiB7ICJmaXJzdCIsICJzZWNvbmQiIH07
Ci0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShsaXN0LklzU3luY2hyb25pemVkKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBJTGlzdF9JbnNlcnQo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBJTGlzdCBsaXN0ID0gbmV3IFJlcGVhdGVkRmllbGQ8
c3RyaW5nPiB7ICJmaXJzdCIsICJzZWNvbmQiIH07Ci0gICAgICAgICAgICBsaXN0Lkluc2VydCgx
LCAibWlkZGxlIik7Ci0gICAgICAgICAgICBDb2xsZWN0aW9uQXNzZXJ0LkFyZUVxdWFsKG5ld1td
IHsgImZpcnN0IiwgIm1pZGRsZSIsICJzZWNvbmQiIH0sIGxpc3QpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFRvU3RyaW5nX0ludGVnZXJzKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdmFyIGxpc3QgPSBuZXcgUmVwZWF0ZWRGaWVsZDxpbnQ+IHsg
NSwgMTAsIDIwIH07Ci0gICAgICAgICAgICB2YXIgdGV4dCA9IGxpc3QuVG9TdHJpbmcoKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiWyA1LCAxMCwgMjAgXSIsIHRleHQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFRvU3RyaW5nX1N0cmlu
Z3MoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxk
PHN0cmluZz4geyAieCIsICJ5IiwgInoiIH07Ci0gICAgICAgICAgICB2YXIgdGV4dCA9IGxpc3Qu
VG9TdHJpbmcoKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiWyBcInhcIiwgXCJ5XCIs
IFwielwiIF0iLCB0ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBw
dWJsaWMgdm9pZCBUb1N0cmluZ19NZXNzYWdlcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZh
ciBsaXN0ID0gbmV3IFJlcGVhdGVkRmllbGQ8VGVzdEFsbFR5cGVzPiB7IG5ldyBUZXN0QWxsVHlw
ZXMgeyBTaW5nbGVEb3VibGUgPSAxLjUgfSwgbmV3IFRlc3RBbGxUeXBlcyB7IFNpbmdsZUludDMy
ID0gMTAgfSB9OwotICAgICAgICAgICAgdmFyIHRleHQgPSBsaXN0LlRvU3RyaW5nKCk7Ci0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIlsgeyBcInNpbmdsZURvdWJsZVwiOiAxLjUgfSwgeyBc
InNpbmdsZUludDMyXCI6IDEwIH0gXSIsIHRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFRvU3RyaW5nX0VtcHR5KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdmFyIGxpc3QgPSBuZXcgUmVwZWF0ZWRGaWVsZDxUZXN0QWxsVHlwZXM+IHsgfTsK
LSAgICAgICAgICAgIHZhciB0ZXh0ID0gbGlzdC5Ub1N0cmluZygpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKCJbIF0iLCB0ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQot
ICAgICAgICBwdWJsaWMgdm9pZCBUb1N0cmluZ19JbnZhbGlkRWxlbWVudFR5cGUoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPGRlY2ltYWw+IHsg
MTVtIH07Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50RXhjZXB0aW9uPigoKSA9
PiBsaXN0LlRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAg
IHB1YmxpYyB2b2lkIFRvU3RyaW5nX1RpbWVzdGFtcCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZhciBsaXN0ID0gbmV3IFJlcGVhdGVkRmllbGQ8VGltZXN0YW1wPiB7IFRpbWVzdGFtcC5Gcm9t
RGF0ZVRpbWUobmV3IERhdGVUaW1lKDIwMTUsIDEwLCAxLCAxMiwgMzQsIDU2LCBEYXRlVGltZUtp
bmQuVXRjKSkgfTsKLSAgICAgICAgICAgIHZhciB0ZXh0ID0gbGlzdC5Ub1N0cmluZygpOwotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJbIFwiMjAxNS0xMC0wMVQxMjozNDo1NlpcIiBdIiwg
dGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQg
VG9TdHJpbmdfU3RydWN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBu
ZXcgU3RydWN0IHsgRmllbGRzID0geyB7ICJmb28iLCBuZXcgVmFsdWUgeyBOdW1iZXJWYWx1ZSA9
IDIwIH0gfSB9IH07Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IG5ldyBSZXBlYXRlZEZpZWxkPFN0
cnVjdD4geyBtZXNzYWdlIH07Ci0gICAgICAgICAgICB2YXIgdGV4dCA9IGxpc3QuVG9TdHJpbmco
KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCh0ZXh0LCAiWyB7IFwiZm9vXCI6IDIwIH0g
XSIsIG1lc3NhZ2UuVG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvQ29tcGF0aWJpbGl0eS9Qcm9wZXJ0eUlu
Zm9FeHRlbnNpb25zVGVzdC5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Db21w
YXRpYmlsaXR5L1Byb3BlcnR5SW5mb0V4dGVuc2lvbnNUZXN0LmNzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkZjIzYTA5Y2Q0YzRkZjRiNTFhMzc5MDUyNjIwMDY0ZDA2MmZmNzFlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9H
b29nbGUuUHJvdG9idWYuVGVzdC9Db21wYXRpYmlsaXR5L1Byb3BlcnR5SW5mb0V4dGVuc2lvbnNU
ZXN0LmNzCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmln
aHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSNlbmRyZWdpb24KLQotdXNpbmcgTlVuaXQuRnJhbWV3b3JrOwotdXNpbmcgU3lzdGVtLlJlZmxl
Y3Rpb247Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuQ29tcGF0aWJpbGl0eQotewotICAg
IHB1YmxpYyBjbGFzcyBQcm9wZXJ0eUluZm9FeHRlbnNpb25zVGVzdAotICAgIHsKLSAgICAgICAg
cHVibGljIHN0cmluZyBQdWJsaWNSZWFkV3JpdGUgeyBnZXQ7IHNldDsgfQotICAgICAgICBwcml2
YXRlIHN0cmluZyBQcml2YXRlUmVhZFdyaXRlIHsgZ2V0OyBzZXQ7IH0KLSAgICAgICAgcHVibGlj
IHN0cmluZyBQdWJsaWNSZWFkUHJpdmF0ZVdyaXRlIHsgZ2V0OyBwcml2YXRlIHNldDsgfQotICAg
ICAgICBwdWJsaWMgc3RyaW5nIFByaXZhdGVSZWFkUHVibGljV3JpdGUgeyBwcml2YXRlIGdldDsg
c2V0OyB9Ci0gICAgICAgIHB1YmxpYyBzdHJpbmcgUHVibGljUmVhZE9ubHkgeyBnZXQgeyByZXR1
cm4gbnVsbDsgfSB9Ci0gICAgICAgIHByaXZhdGUgc3RyaW5nIFByaXZhdGVSZWFkT25seSB7IGdl
dCB7IHJldHVybiBudWxsOyB9IH0KLSAgICAgICAgcHVibGljIHN0cmluZyBQdWJsaWNXcml0ZU9u
bHkgeyBzZXQgeyB9IH0KLSAgICAgICAgcHJpdmF0ZSBzdHJpbmcgUHJpdmF0ZVdyaXRlT25seSB7
IHNldCB7ICB9IH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RDYXNlKCJQdWJsaWNS
ZWFkV3JpdGUiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJQdWJsaWNSZWFkUHJpdmF0ZVdyaXRlIild
Ci0gICAgICAgIFtUZXN0Q2FzZSgiUHVibGljUmVhZE9ubHkiKV0KLSAgICAgICAgcHVibGljIHZv
aWQgR2V0R2V0TWV0aG9kX1N1Y2Nlc3Moc3RyaW5nIG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHZhciBwcm9wZXJ0eUluZm8gPSB0eXBlb2YoUHJvcGVydHlJbmZvRXh0ZW5zaW9uc1Rlc3Qp
Ci0gICAgICAgICAgICAgICAgLkdldFByb3BlcnR5KG5hbWUsIEJpbmRpbmdGbGFncy5JbnN0YW5j
ZSB8IEJpbmRpbmdGbGFncy5Ob25QdWJsaWMgfCBCaW5kaW5nRmxhZ3MuUHVibGljKTsKLSAgICAg
ICAgICAgIEFzc2VydC5Jc05vdE51bGwoUHJvcGVydHlJbmZvRXh0ZW5zaW9ucy5HZXRHZXRNZXRo
b2QocHJvcGVydHlJbmZvKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
W1Rlc3RDYXNlKCJQcml2YXRlUmVhZFdyaXRlIildCi0gICAgICAgIFtUZXN0Q2FzZSgiUHJpdmF0
ZVJlYWRQdWJsaWNXcml0ZSIpXQotICAgICAgICBbVGVzdENhc2UoIlByaXZhdGVSZWFkT25seSIp
XQotICAgICAgICBbVGVzdENhc2UoIlB1YmxpY1dyaXRlT25seSIpXQotICAgICAgICBbVGVzdENh
c2UoIlByaXZhdGVXcml0ZU9ubHkiKV0KLSAgICAgICAgcHVibGljIHZvaWQgR2V0R2V0TWV0aG9k
X05vQWNjZXNzaWJsZUdldHRlcihzdHJpbmcgbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAg
dmFyIHByb3BlcnR5SW5mbyA9IHR5cGVvZihQcm9wZXJ0eUluZm9FeHRlbnNpb25zVGVzdCkKLSAg
ICAgICAgICAgICAgICAuR2V0UHJvcGVydHkobmFtZSwgQmluZGluZ0ZsYWdzLkluc3RhbmNlIHwg
QmluZGluZ0ZsYWdzLk5vblB1YmxpYyB8IEJpbmRpbmdGbGFncy5QdWJsaWMpOwotICAgICAgICAg
ICAgQXNzZXJ0LklzTnVsbChQcm9wZXJ0eUluZm9FeHRlbnNpb25zLkdldEdldE1ldGhvZChwcm9w
ZXJ0eUluZm8pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVzdENh
c2UoIlB1YmxpY1JlYWRXcml0ZSIpXQotICAgICAgICBbVGVzdENhc2UoIlByaXZhdGVSZWFkUHVi
bGljV3JpdGUiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJQdWJsaWNXcml0ZU9ubHkiKV0KLSAgICAg
ICAgcHVibGljIHZvaWQgR2V0U2V0TWV0aG9kX1N1Y2Nlc3Moc3RyaW5nIG5hbWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSB0eXBlb2YoUHJvcGVydHlJbmZvRXh0
ZW5zaW9uc1Rlc3QpCi0gICAgICAgICAgICAgICAgLkdldFByb3BlcnR5KG5hbWUsIEJpbmRpbmdG
bGFncy5JbnN0YW5jZSB8IEJpbmRpbmdGbGFncy5Ob25QdWJsaWMgfCBCaW5kaW5nRmxhZ3MuUHVi
bGljKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwoUHJvcGVydHlJbmZvRXh0ZW5zaW9u
cy5HZXRTZXRNZXRob2QocHJvcGVydHlJbmZvKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVz
dF0KLSAgICAgICAgW1Rlc3RDYXNlKCJQdWJsaWNSZWFkUHJpdmF0ZVdyaXRlIildCi0gICAgICAg
IFtUZXN0Q2FzZSgiUHJpdmF0ZVJlYWRXcml0ZSIpXQotICAgICAgICBbVGVzdENhc2UoIlByaXZh
dGVSZWFkT25seSIpXQotICAgICAgICBbVGVzdENhc2UoIlB1YmxpY1JlYWRPbmx5IildCi0gICAg
ICAgIFtUZXN0Q2FzZSgiUHJpdmF0ZVdyaXRlT25seSIpXQotICAgICAgICBwdWJsaWMgdm9pZCBH
ZXRTZXRNZXRob2RfTm9BY2Nlc3NpYmxlR2V0dGVyKHN0cmluZyBuYW1lKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB2YXIgcHJvcGVydHlJbmZvID0gdHlwZW9mKFByb3BlcnR5SW5mb0V4dGVuc2lv
bnNUZXN0KQotICAgICAgICAgICAgICAgIC5HZXRQcm9wZXJ0eShuYW1lLCBCaW5kaW5nRmxhZ3Mu
SW5zdGFuY2UgfCBCaW5kaW5nRmxhZ3MuTm9uUHVibGljIHwgQmluZGluZ0ZsYWdzLlB1YmxpYyk7
Ci0gICAgICAgICAgICBBc3NlcnQuSXNOdWxsKFByb3BlcnR5SW5mb0V4dGVuc2lvbnMuR2V0U2V0
TWV0aG9kKHByb3BlcnR5SW5mbykpOwotICAgICAgICB9Ci0gICAgfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvQ29tcGF0aWJpbGl0eS9UeXBlRXh0ZW5z
aW9uc1Rlc3QuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvQ29tcGF0aWJpbGl0
eS9UeXBlRXh0ZW5zaW9uc1Rlc3QuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYw
YzhkM2JjYzZlM2QxOTRiOWEzZmFjMTI0YWU1MDc3NzM1MDFkNTYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5U
ZXN0L0NvbXBhdGliaWxpdHkvVHlwZUV4dGVuc2lvbnNUZXN0LmNzCisrKyAvZGV2L251bGwKQEAg
LTEsMTMzICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi11c2luZyBOVW5p
dC5GcmFtZXdvcms7Ci11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2Vu
ZXJpYzsKLXVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3Rv
YnVmLkNvbXBhdGliaWxpdHkKLXsKLSAgICBwdWJsaWMgY2xhc3MgVHlwZUV4dGVuc2lvbnNUZXN0
Ci0gICAgewotICAgICAgICBwdWJsaWMgY2xhc3MgRGVyaXZlZExpc3QgOiBMaXN0PHN0cmluZz4g
eyB9Ci0gICAgICAgIHB1YmxpYyBzdHJpbmcgUHVibGljUHJvcGVydHkgeyBnZXQ7IHNldDsgfQot
ICAgICAgICBwcml2YXRlIHN0cmluZyBQcml2YXRlUHJvcGVydHkgeyBnZXQ7IHNldDsgfQotCi0g
ICAgICAgIHB1YmxpYyB2b2lkIFB1YmxpY01ldGhvZCgpCi0gICAgICAgIHsKLSAgICAgICAgfQot
Ci0gICAgICAgIHByaXZhdGUgdm9pZCBQcml2YXRlTWV0aG9kKCkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSh0eXBlb2YoaW50KSwgdHJ1
ZSldCi0gICAgICAgIFtUZXN0Q2FzZSh0eXBlb2YoaW50PyksIHRydWUpXQotICAgICAgICBbVGVz
dENhc2UodHlwZW9mKE51bGxhYmxlPD4pLCB0cnVlKV0KLSAgICAgICAgW1Rlc3RDYXNlKHR5cGVv
ZihXaXJlRm9ybWF0LldpcmVUeXBlKSwgdHJ1ZSldCi0gICAgICAgIFtUZXN0Q2FzZSh0eXBlb2Yo
c3RyaW5nKSwgZmFsc2UpXQotICAgICAgICBbVGVzdENhc2UodHlwZW9mKG9iamVjdCksIGZhbHNl
KV0KLSAgICAgICAgW1Rlc3RDYXNlKHR5cGVvZihFbnVtKSwgZmFsc2UpXQotICAgICAgICBbVGVz
dENhc2UodHlwZW9mKFZhbHVlVHlwZSksIGZhbHNlKV0KLSAgICAgICAgW1Rlc3RDYXNlKHR5cGVv
ZihUeXBlRXh0ZW5zaW9uc1Rlc3QpLCBmYWxzZSldCi0gICAgICAgIFtUZXN0Q2FzZSh0eXBlb2Yo
QWN0aW9uKSwgZmFsc2UpXQotICAgICAgICBbVGVzdENhc2UodHlwZW9mKEFjdGlvbjw+KSwgZmFs
c2UpXQotICAgICAgICBbVGVzdENhc2UodHlwZW9mKElEaXNwb3NhYmxlKSwgZmFsc2UpXQotICAg
ICAgICBwdWJsaWMgdm9pZCBJc1ZhbHVlVHlwZShUeXBlIHR5cGUsIGJvb2wgZXhwZWN0ZWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBlY3RlZCwgVHlwZUV4dGVu
c2lvbnMuSXNWYWx1ZVR5cGUodHlwZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0g
ICAgICAgIFtUZXN0Q2FzZSh0eXBlb2Yob2JqZWN0KSwgdHlwZW9mKHN0cmluZyksIHRydWUpXQot
ICAgICAgICBbVGVzdENhc2UodHlwZW9mKG9iamVjdCksIHR5cGVvZihpbnQpLCB0cnVlKV0KLSAg
ICAgICAgW1Rlc3RDYXNlKHR5cGVvZihzdHJpbmcpLCB0eXBlb2Yoc3RyaW5nKSwgdHJ1ZSldCi0g
ICAgICAgIFtUZXN0Q2FzZSh0eXBlb2Yoc3RyaW5nKSwgdHlwZW9mKG9iamVjdCksIGZhbHNlKV0K
LSAgICAgICAgW1Rlc3RDYXNlKHR5cGVvZihzdHJpbmcpLCB0eXBlb2YoaW50KSwgZmFsc2UpXQot
ICAgICAgICBbVGVzdENhc2UodHlwZW9mKGludCksIHR5cGVvZihpbnQpLCB0cnVlKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKHR5cGVvZihWYWx1ZVR5cGUpLCB0eXBlb2YoaW50KSwgdHJ1ZSldCi0gICAg
ICAgIFtUZXN0Q2FzZSh0eXBlb2YobG9uZyksIHR5cGVvZihpbnQpLCBmYWxzZSldIC8vIAotICAg
ICAgICBwdWJsaWMgdm9pZCBJc0Fzc2lnbmFibGVGcm9tKFR5cGUgdGFyZ2V0LCBUeXBlIGFyZ3Vt
ZW50LCBib29sIGV4cGVjdGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwoZXhwZWN0ZWQsIFR5cGVFeHRlbnNpb25zLklzQXNzaWduYWJsZUZyb20odGFyZ2V0LCBhcmd1
bWVudCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSh0
eXBlb2YoRGVyaXZlZExpc3QpLCAiQ291bnQiKV0gLy8gR28gdXAgdGhlIHR5cGUgaGllcmFyY2h5
Ci0gICAgICAgIFtUZXN0Q2FzZSh0eXBlb2YoTGlzdDxzdHJpbmc+KSwgIkNvdW50IildCi0gICAg
ICAgIFtUZXN0Q2FzZSh0eXBlb2YoTGlzdDw+KSwgIkNvdW50IildCi0gICAgICAgIFtUZXN0Q2Fz
ZSh0eXBlb2YoVHlwZUV4dGVuc2lvbnNUZXN0KSwgIlB1YmxpY1Byb3BlcnR5IildCi0gICAgICAg
IHB1YmxpYyB2b2lkIEdldFByb3BlcnR5X1N1Y2Nlc3MoVHlwZSB0eXBlLCBzdHJpbmcgbmFtZSkK
LSAgICAgICAgewotICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gVHlwZUV4dGVuc2lvbnMuR2V0
UHJvcGVydHkodHlwZSwgbmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNOb3ROdWxsKHByb3Bl
cnR5KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuYW1lLCBwcm9wZXJ0eS5OYW1lKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UodHlwZW9mKFR5
cGVFeHRlbnNpb25zVGVzdCksICJQcml2YXRlUHJvcGVydHkiKV0KLSAgICAgICAgW1Rlc3RDYXNl
KHR5cGVvZihUeXBlRXh0ZW5zaW9uc1Rlc3QpLCAiR2FyYmFnZSIpXQotICAgICAgICBwdWJsaWMg
dm9pZCBHZXRQcm9wZXJ0eV9Ob1N1Y2hQcm9wZXJ0eShUeXBlIHR5cGUsIHN0cmluZyBuYW1lKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBUeXBlRXh0ZW5zaW9ucy5HZXRQ
cm9wZXJ0eSh0eXBlLCBuYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc051bGwocHJvcGVydHkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSh0eXBlb2Yo
RGVyaXZlZExpc3QpLCAiUmVtb3ZlQXQiKV0gLy8gR28gdXAgdGhlIHR5cGUgaGllcmFyY2h5Ci0g
ICAgICAgIFtUZXN0Q2FzZSh0eXBlb2YoTGlzdDw+KSwgIlJlbW92ZUF0IildCi0gICAgICAgIFtU
ZXN0Q2FzZSh0eXBlb2YoVHlwZUV4dGVuc2lvbnNUZXN0KSwgIlB1YmxpY01ldGhvZCIpXQotICAg
ICAgICBwdWJsaWMgdm9pZCBHZXRNZXRob2RfU3VjY2VzcyhUeXBlIHR5cGUsIHN0cmluZyBuYW1l
KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gVHlwZUV4dGVuc2lvbnMuR2V0
TWV0aG9kKHR5cGUsIG5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LklzTm90TnVsbChtZXRob2Qp
OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG5hbWUsIG1ldGhvZC5OYW1lKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UodHlwZW9mKFR5cGVFeHRl
bnNpb25zVGVzdCksICJQcml2YXRlTWV0aG9kIildCi0gICAgICAgIFtUZXN0Q2FzZSh0eXBlb2Yo
VHlwZUV4dGVuc2lvbnNUZXN0KSwgIkdhcmJhZ2VNZXRob2QiKV0KLSAgICAgICAgcHVibGljIHZv
aWQgR2V0TWV0aG9kX05vU3VjaE1ldGhvZChUeXBlIHR5cGUsIHN0cmluZyBuYW1lKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gVHlwZUV4dGVuc2lvbnMuR2V0TWV0aG9kKHR5
cGUsIG5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChtZXRob2QpOwotICAgICAgICB9
Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSh0eXBlb2YoTGlzdDxzdHJpbmc+
KSwgIkluZGV4T2YiKV0KLSAgICAgICAgcHVibGljIHZvaWQgR2V0TWV0aG9kX0FtYmlndW91cyhU
eXBlIHR5cGUsIHN0cmluZyBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnQuVGhy
b3dzPEFtYmlndW91c01hdGNoRXhjZXB0aW9uPigoKSA9PiBUeXBlRXh0ZW5zaW9ucy5HZXRNZXRo
b2QodHlwZSwgbmFtZSkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAv
c3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0RlcHJlY2F0ZWRNZW1iZXJUZXN0LmNzIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAv
c3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0RlcHJlY2F0ZWRNZW1iZXJUZXN0LmNzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGZhZDhiMzMxYzE2MjJkOTMyNWFmNDM4YTFlYWE2ZTFj
NWMyNWZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3No
YXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9EZXByZWNhdGVkTWVtYmVyVGVzdC5jcworKysg
L2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBh
bmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9u
Ci0gICAgCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKLXVzaW5nIEdv
b2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zOwotdXNpbmcgTlVuaXQuRnJhbWV3b3JrOwotCi1uYW1l
c3BhY2UgR29vZ2xlLlByb3RvYnVmCi17Ci0gICAgcHVibGljIGNsYXNzIERlcHJlY2F0ZWRNZW1i
ZXJUZXN0Ci0gICAgewotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIEFzc2VydElzRGVwcmVj
YXRlZChNZW1iZXJJbmZvIG1lbWJlcikKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0Lk5v
dE51bGwobWVtYmVyKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUobWVtYmVyLklzRGVmaW5l
ZCh0eXBlb2YoT2Jzb2xldGVBdHRyaWJ1dGUpLCBmYWxzZSksICJNZW1iZXIgbm90IG9ic29sZXRl
OiAiICsgbWVtYmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJs
aWMgdm9pZCBUZXN0RGVwcmVhdGVkUHJpbWl0aXZlVmFsdWUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBc3NlcnRJc0RlcHJlY2F0ZWQodHlwZW9mKFRlc3REZXByZWNhdGVkRmllbGRzKS5HZXRQ
cm9wZXJ0eSgiRGVwcmVjYXRlZEludDMyIikpOwotICAgICAgICB9Ci0KLSAgICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvRXF1YWxpdHlUZXN0ZXIuY3Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvRXF1YWxpdHlUZXN0ZXIuY3MKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NjliYWJhMTdiZmQxZjYyOWE0Yzg4MTZlNTM3M2Rh
NmVhOTIxOWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9j
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0VxdWFsaXR5VGVzdGVyLmNzCisrKyAvZGV2
L251bGwKQEAgLTEsNjQgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBs
aWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQot
dXNpbmcgU3lzdGVtOwotdXNpbmcgTlVuaXQuRnJhbWV3b3JrOwotCi1uYW1lc3BhY2UgR29vZ2xl
LlByb3RvYnVmCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBIZWxwZXIgbWV0aG9kcyB3
aGVuIHRlc3RpbmcgZXF1YWxpdHkuIE5Vbml0J3MgQXNzZXJ0LkFyZUVxdWFsIGFuZAotICAgIC8v
LyBBc3NlcnQuQXJlTm90RXF1YWwgbWV0aG9kcyB0cnkgdG8gYmUgY2xldmVyIHdpdGggY29sbGVj
dGlvbnMsIHdoaWNoIGNhbgotICAgIC8vLyBiZSBhbm5veWluZy4uLgotICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgaW50ZXJuYWwgc3RhdGljIGNsYXNzIEVxdWFsaXR5VGVzdGVyCi0gICAgewotICAg
ICAgICBwdWJsaWMgc3RhdGljIHZvaWQgQXNzZXJ0RXF1YWxpdHk8VD4oVCBmaXJzdCwgVCBzZWNv
bmQpIHdoZXJlIFQgOiBJRXF1YXRhYmxlPFQ+Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2Vy
dC5Jc1RydWUoZmlyc3QuRXF1YWxzKHNlY29uZCkpOwotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1
ZShmaXJzdC5FcXVhbHMoKG9iamVjdCkgc2Vjb25kKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoZmlyc3QuR2V0SGFzaENvZGUoKSwgc2Vjb25kLkdldEhhc2hDb2RlKCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIEFzc2VydEluZXF1YWxpdHk8VD4oVCBm
aXJzdCwgVCBzZWNvbmQpIHdoZXJlIFQgOiBJRXF1YXRhYmxlPFQ+Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFzc2VydC5Jc0ZhbHNlKGZpcnN0LkVxdWFscyhzZWNvbmQpKTsKLSAgICAgICAgICAg
IEFzc2VydC5Jc0ZhbHNlKGZpcnN0LkVxdWFscygob2JqZWN0KSBzZWNvbmQpKTsKLSAgICAgICAg
ICAgIC8vIFdoaWxlIHRoaXMgaXNuJ3QgYSByZXF1aXJlbWVudCwgdGhlIGNoYW5jZXMgb2YgdGhp
cyB0ZXN0IGZhaWxpbmcgZHVlIHRvCi0gICAgICAgICAgICAvLyBjb2luY2lkZW5jZSByYXRoZXIg
dGhhbiBhIGJ1ZyBhcmUgdmVyeSBzbWFsbC4KLSAgICAgICAgICAgIGlmIChmaXJzdCAhPSBudWxs
ICYmIHNlY29uZCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFzc2Vy
dC5BcmVOb3RFcXVhbChmaXJzdC5HZXRIYXNoQ29kZSgpLCBzZWNvbmQuR2V0SGFzaENvZGUoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvRmllbGRDb2RlY1Rlc3QuY3MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmLlRlc3QvRmllbGRDb2RlY1Rlc3QuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGM2MTY0NzBlODFmYzZlODgyMTI4M2M2OGY4N2UyYjU4NTU2NTk4MjMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi5UZXN0L0ZpZWxkQ29kZWNUZXN0LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTk1
ICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5D
b2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgR29vZ2xlLlByb3Rv
YnVmLlRlc3RQcm90b3M7Ci11c2luZyBOVW5pdC5GcmFtZXdvcms7Ci0KLW5hbWVzcGFjZSBHb29n
bGUuUHJvdG9idWYKLXsKLSAgICBwdWJsaWMgY2xhc3MgRmllbGRDb2RlY1Rlc3QKLSAgICB7Ci0j
cHJhZ21hIHdhcm5pbmcgZGlzYWJsZSAwNDE0IC8vIFVzZWQgYnkgdGVzdHMgdmlhIHJlZmxlY3Rp
b24gLSBkbyBub3QgcmVtb3ZlIQotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMaXN0
PElDb2RlY1Rlc3REYXRhPiBDb2RlY3MgPSBuZXcgTGlzdDxJQ29kZWNUZXN0RGF0YT4KLSAgICAg
ICAgewotICAgICAgICAgICAgbmV3IEZpZWxkQ29kZWNUZXN0RGF0YTxib29sPihGaWVsZENvZGVj
LkZvckJvb2woMTAwKSwgdHJ1ZSwgIkJvb2wiKSwKLSAgICAgICAgICAgIG5ldyBGaWVsZENvZGVj
VGVzdERhdGE8c3RyaW5nPihGaWVsZENvZGVjLkZvclN0cmluZygxMDApLCAic2FtcGxlIiwgIlN0
cmluZyIpLAotICAgICAgICAgICAgbmV3IEZpZWxkQ29kZWNUZXN0RGF0YTxCeXRlU3RyaW5nPihG
aWVsZENvZGVjLkZvckJ5dGVzKDEwMCksIEJ5dGVTdHJpbmcuQ29weUZyb20oMSwgMiwgMyksICJC
eXRlcyIpLAotICAgICAgICAgICAgbmV3IEZpZWxkQ29kZWNUZXN0RGF0YTxpbnQ+KEZpZWxkQ29k
ZWMuRm9ySW50MzIoMTAwKSwgLTEwMDAsICJJbnQzMiIpLAotICAgICAgICAgICAgbmV3IEZpZWxk
Q29kZWNUZXN0RGF0YTxpbnQ+KEZpZWxkQ29kZWMuRm9yU0ludDMyKDEwMCksIC0xMDAwLCAiU0lu
dDMyIiksCi0gICAgICAgICAgICBuZXcgRmllbGRDb2RlY1Rlc3REYXRhPGludD4oRmllbGRDb2Rl
Yy5Gb3JTRml4ZWQzMigxMDApLCAtMTAwMCwgIlNGaXhlZDMyIiksCi0gICAgICAgICAgICBuZXcg
RmllbGRDb2RlY1Rlc3REYXRhPHVpbnQ+KEZpZWxkQ29kZWMuRm9yVUludDMyKDEwMCksIDEyMzQs
ICJVSW50MzIiKSwKLSAgICAgICAgICAgIG5ldyBGaWVsZENvZGVjVGVzdERhdGE8dWludD4oRmll
bGRDb2RlYy5Gb3JGaXhlZDMyKDEwMCksIDEyMzQsICJGaXhlZDMyIiksCi0gICAgICAgICAgICBu
ZXcgRmllbGRDb2RlY1Rlc3REYXRhPGxvbmc+KEZpZWxkQ29kZWMuRm9ySW50NjQoMTAwKSwgLTEw
MDAsICJJbnQ2NCIpLAotICAgICAgICAgICAgbmV3IEZpZWxkQ29kZWNUZXN0RGF0YTxsb25nPihG
aWVsZENvZGVjLkZvclNJbnQ2NCgxMDApLCAtMTAwMCwgIlNJbnQ2NCIpLAotICAgICAgICAgICAg
bmV3IEZpZWxkQ29kZWNUZXN0RGF0YTxsb25nPihGaWVsZENvZGVjLkZvclNGaXhlZDY0KDEwMCks
IC0xMDAwLCAiU0ZpeGVkNjQiKSwKLSAgICAgICAgICAgIG5ldyBGaWVsZENvZGVjVGVzdERhdGE8
dWxvbmc+KEZpZWxkQ29kZWMuRm9yVUludDY0KDEwMCksIDEyMzQsICJVSW50NjQiKSwKLSAgICAg
ICAgICAgIG5ldyBGaWVsZENvZGVjVGVzdERhdGE8dWxvbmc+KEZpZWxkQ29kZWMuRm9yRml4ZWQ2
NCgxMDApLCAxMjM0LCAiRml4ZWQ2NCIpLAotICAgICAgICAgICAgbmV3IEZpZWxkQ29kZWNUZXN0
RGF0YTxmbG9hdD4oRmllbGRDb2RlYy5Gb3JGbG9hdCgxMDApLCAxMjM0LjVmLCAiRmxvYXQiKSwK
LSAgICAgICAgICAgIG5ldyBGaWVsZENvZGVjVGVzdERhdGE8ZG91YmxlPihGaWVsZENvZGVjLkZv
ckRvdWJsZSgxMDApLCAxMjM0NTY3ODkwLjVkLCAiRG91YmxlIiksCi0gICAgICAgICAgICBuZXcg
RmllbGRDb2RlY1Rlc3REYXRhPEZvcmVpZ25FbnVtPigKLSAgICAgICAgICAgICAgICBGaWVsZENv
ZGVjLkZvckVudW0oMTAwLCB0ID0+IChpbnQpIHQsIHQgPT4gKEZvcmVpZ25FbnVtKSB0KSwgRm9y
ZWlnbkVudW0uRm9yZWlnbkJheiwgIkVudW0iKSwKLSAgICAgICAgICAgIG5ldyBGaWVsZENvZGVj
VGVzdERhdGE8Rm9yZWlnbk1lc3NhZ2U+KAotICAgICAgICAgICAgICAgIEZpZWxkQ29kZWMuRm9y
TWVzc2FnZSgxMDAsIEZvcmVpZ25NZXNzYWdlLlBhcnNlciksIG5ldyBGb3JlaWduTWVzc2FnZSB7
IEMgPSAxMCB9LCAiTWVzc2FnZSIpLAotICAgICAgICB9OwotI3ByYWdtYSB3YXJuaW5nIHJlc3Rv
cmUgMDQxNAotCi0gICAgICAgIFtUZXN0LCBUZXN0Q2FzZVNvdXJjZSgiQ29kZWNzIildCi0gICAg
ICAgIHB1YmxpYyB2b2lkIFJvdW5kVHJpcFdpdGhUYWcoSUNvZGVjVGVzdERhdGEgY29kZWMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvZGVjLlRlc3RSb3VuZFRyaXBXaXRoVGFnKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBbVGVzdCwgVGVzdENhc2VTb3VyY2UoIkNvZGVjcyIpXQotICAgICAg
ICBwdWJsaWMgdm9pZCBSb3VuZFRyaXBSYXcoSUNvZGVjVGVzdERhdGEgY29kZWMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvZGVjLlRlc3RSb3VuZFRyaXBSYXcoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFtUZXN0LCBUZXN0Q2FzZVNvdXJjZSgiQ29kZWNzIildCi0gICAgICAgIHB1YmxpYyB2
b2lkIENhbGN1bGF0ZVNpemUoSUNvZGVjVGVzdERhdGEgY29kZWMpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvZGVjLlRlc3RDYWxjdWxhdGVTaXplV2l0aFRhZygpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgW1Rlc3QsIFRlc3RDYXNlU291cmNlKCJDb2RlY3MiKV0KLSAgICAgICAgcHVibGljIHZv
aWQgRGVmYXVsdFZhbHVlKElDb2RlY1Rlc3REYXRhIGNvZGVjKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb2RlYy5UZXN0RGVmYXVsdFZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVz
dCwgVGVzdENhc2VTb3VyY2UoIkNvZGVjcyIpXQotICAgICAgICBwdWJsaWMgdm9pZCBGaXhlZFNp
emUoSUNvZGVjVGVzdERhdGEgY29kZWMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGVjLlRl
c3RGaXhlZFNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgaXMgdWdseSwgYnV0
IGl0IG1lYW5zIHdlIGNhbiBoYXZlIGEgbm9uLWdlbmVyaWMgaW50ZXJmYWNlLgotICAgICAgICAv
LyBJdCBmZWVscyBsaWtlIE5Vbml0IHNob3VsZCBzdXBwb3J0IHRoaXMgYmV0dGVyLCBidXQgSSBk
b24ndCBrbm93Ci0gICAgICAgIC8vIG9mIGFueSBiZXR0ZXIgd2F5cyByaWdodCBub3cuCi0gICAg
ICAgIHB1YmxpYyBpbnRlcmZhY2UgSUNvZGVjVGVzdERhdGEKLSAgICAgICAgewotICAgICAgICAg
ICAgdm9pZCBUZXN0Um91bmRUcmlwUmF3KCk7Ci0gICAgICAgICAgICB2b2lkIFRlc3RSb3VuZFRy
aXBXaXRoVGFnKCk7Ci0gICAgICAgICAgICB2b2lkIFRlc3RDYWxjdWxhdGVTaXplV2l0aFRhZygp
OwotICAgICAgICAgICAgdm9pZCBUZXN0RGVmYXVsdFZhbHVlKCk7Ci0gICAgICAgICAgICB2b2lk
IFRlc3RGaXhlZFNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBjbGFzcyBGaWVs
ZENvZGVjVGVzdERhdGE8VD4gOiBJQ29kZWNUZXN0RGF0YQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwcml2YXRlIHJlYWRvbmx5IEZpZWxkQ29kZWM8VD4gY29kZWM7Ci0gICAgICAgICAgICBwcml2
YXRlIHJlYWRvbmx5IFQgc2FtcGxlVmFsdWU7Ci0gICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5
IHN0cmluZyBuYW1lOwotCi0gICAgICAgICAgICBwdWJsaWMgRmllbGRDb2RlY1Rlc3REYXRhKEZp
ZWxkQ29kZWM8VD4gY29kZWMsIFQgc2FtcGxlVmFsdWUsIHN0cmluZyBuYW1lKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHRoaXMuY29kZWMgPSBjb2RlYzsKLSAgICAgICAgICAgICAg
ICB0aGlzLnNhbXBsZVZhbHVlID0gc2FtcGxlVmFsdWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5u
YW1lID0gbmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgVGVz
dFJvdW5kVHJpcFJhdygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0cmVh
bSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgICAgICB2YXIgY29kZWRPdXRwdXQg
PSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0oc3RyZWFtKTsKLSAgICAgICAgICAgICAgICBjb2RlYy5W
YWx1ZVdyaXRlcihjb2RlZE91dHB1dCwgc2FtcGxlVmFsdWUpOwotICAgICAgICAgICAgICAgIGNv
ZGVkT3V0cHV0LkZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgc3RyZWFtLlBvc2l0aW9uID0gMDsK
LSAgICAgICAgICAgICAgICB2YXIgY29kZWRJbnB1dCA9IG5ldyBDb2RlZElucHV0U3RyZWFtKHN0
cmVhbSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHNhbXBsZVZhbHVlLCBjb2Rl
Yy5WYWx1ZVJlYWRlcihjb2RlZElucHV0KSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LklzVHJ1
ZShjb2RlZElucHV0LklzQXRFbmQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJs
aWMgdm9pZCBUZXN0Um91bmRUcmlwV2l0aFRhZygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgICAgICB2
YXIgY29kZWRPdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0oc3RyZWFtKTsKLSAgICAgICAg
ICAgICAgICBjb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKGNvZGVkT3V0cHV0LCBzYW1wbGVWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgY29kZWRPdXRwdXQuRmx1c2goKTsKLSAgICAgICAgICAgICAgICBz
dHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgICAgIHZhciBjb2RlZElucHV0ID0gbmV3
IENvZGVkSW5wdXRTdHJlYW0oc3RyZWFtKTsKLSAgICAgICAgICAgICAgICBjb2RlZElucHV0LkFz
c2VydE5leHRUYWcoY29kZWMuVGFnKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
c2FtcGxlVmFsdWUsIGNvZGVjLlJlYWQoY29kZWRJbnB1dCkpOwotICAgICAgICAgICAgICAgIEFz
c2VydC5Jc1RydWUoY29kZWRJbnB1dC5Jc0F0RW5kKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcHVibGljIHZvaWQgVGVzdENhbGN1bGF0ZVNpemVXaXRoVGFnKCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAg
ICAgICAgICAgICAgIHZhciBjb2RlZE91dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShzdHJl
YW0pOwotICAgICAgICAgICAgICAgIGNvZGVjLldyaXRlVGFnQW5kVmFsdWUoY29kZWRPdXRwdXQs
IHNhbXBsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBjb2RlZE91dHB1dC5GbHVzaCgpOwotICAg
ICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChzdHJlYW0uUG9zaXRpb24sIGNvZGVjLkNhbGN1
bGF0ZVNpemVXaXRoVGFnKHNhbXBsZVZhbHVlKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHB1YmxpYyB2b2lkIFRlc3REZWZhdWx0VmFsdWUoKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIFdyaXRlVGFnQW5kVmFsdWUgaWdub3JlcyBkZWZhdWx0IHZhbHVlcwotICAg
ICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAg
ICAgICAgdmFyIGNvZGVkT3V0cHV0ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKHN0cmVhbSk7Ci0g
ICAgICAgICAgICAgICAgY29kZWMuV3JpdGVUYWdBbmRWYWx1ZShjb2RlZE91dHB1dCwgY29kZWMu
RGVmYXVsdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBjb2RlZE91dHB1dC5GbHVzaCgpOwotICAg
ICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBzdHJlYW0uUG9zaXRpb24pOwotICAgICAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBjb2RlYy5DYWxjdWxhdGVTaXplV2l0aFRhZyhj
b2RlYy5EZWZhdWx0VmFsdWUpKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mKFQpLklzVmFs
dWVUeXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKGRlZmF1bHQoVCksIGNvZGVjLkRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gVGhlIHBsYWluIFZhbHVlV3JpdGVyL1ZhbHVlUmVhZGVy
IGRlbGVnYXRlcyBkb24ndC4KLSAgICAgICAgICAgICAgICBpZiAoY29kZWMuRGVmYXVsdFZhbHVl
ICE9IG51bGwpIC8vIFRoaXMgcGFydCBpc24ndCBhcHByb3ByaWF0ZSBmb3IgbWVzc2FnZSB0eXBl
cy4KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvZGVkT3V0cHV0ID0g
bmV3IENvZGVkT3V0cHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvZGVj
LlZhbHVlV3JpdGVyKGNvZGVkT3V0cHV0LCBjb2RlYy5EZWZhdWx0VmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICBjb2RlZE91dHB1dC5GbHVzaCgpOwotICAgICAgICAgICAgICAgICAgICBBc3Nl
cnQuQXJlTm90RXF1YWwoMCwgc3RyZWFtLlBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKHN0cmVhbS5Qb3NpdGlvbiwgY29kZWMuVmFsdWVTaXplQ2FsY3VsYXRv
cihjb2RlYy5EZWZhdWx0VmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RyZWFtLlBvc2l0
aW9uID0gMDsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVkSW5wdXQgPSBuZXcgQ29kZWRJ
bnB1dFN0cmVhbShzdHJlYW0pOwotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
Y29kZWMuRGVmYXVsdFZhbHVlLCBjb2RlYy5WYWx1ZVJlYWRlcihjb2RlZElucHV0KSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBU
ZXN0Rml4ZWRTaXplKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwobmFtZS5Db250YWlucygiRml4ZWQiKSwgY29kZWMuRml4ZWRTaXplICE9IDApOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5n
KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYuVGVzdC9HZW5lcmF0ZWRNZXNzYWdlVGVzdC5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYuVGVzdC9HZW5lcmF0ZWRNZXNzYWdlVGVzdC5jcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjAyOTU1MWMwYjQ4MDkzODhlYWI1NWRiMWY0NGFlZjhkNDI4ODIzYS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmLlRlc3QvR2VuZXJhdGVkTWVzc2FnZVRlc3QuY3MKKysrIC9kZXYvbnVsbApA
QCAtMSw3MjMgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNl
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcg
U3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgR29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3M7Ci11c2luZyBOVW5pdC5GcmFtZXdvcms7Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Ci11
c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNp
bmcgR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzOwotCi1uYW1lc3BhY2UgR29vZ2xlLlBy
b3RvYnVmCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBUZXN0cyBhcm91bmQgdGhlIGdl
bmVyYXRlZCBUZXN0QWxsVHlwZXMgbWVzc2FnZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBjbGFzcyBHZW5lcmF0ZWRNZXNzYWdlVGVzdAotICAgIHsKLSAgICAgICAgW1Rlc3RdCi0g
ICAgICAgIHB1YmxpYyB2b2lkIEVtcHR5TWVzc2FnZUZpZWxkRGlzdGluY3RGcm9tTWlzc2luZ01l
c3NhZ2VGaWVsZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgZGVtb25zdHJhdGVz
IHdoYXQgd2UncmUgcmVhbGx5IGludGVyZXN0ZWQgaW4uLi4KLSAgICAgICAgICAgIHZhciBtZXNz
YWdlMSA9IG5ldyBUZXN0QWxsVHlwZXMgeyBTaW5nbGVGb3JlaWduTWVzc2FnZSA9IG5ldyBGb3Jl
aWduTWVzc2FnZSgpIH07Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZTIgPSBuZXcgVGVzdEFsbFR5
cGVzKCk7IC8vIFNpbmdsZUZvcmVpZ25NZXNzYWdlIGlzIG51bGwKLSAgICAgICAgICAgIEVxdWFs
aXR5VGVzdGVyLkFzc2VydEluZXF1YWxpdHkobWVzc2FnZTEsIG1lc3NhZ2UyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBEZWZhdWx0VmFsdWVzKCkK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gU2luZ2xlIGZpZWxkcwotICAgICAgICAgICAgdmFy
IG1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzKCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwoZmFsc2UsIG1lc3NhZ2UuU2luZ2xlQm9vbCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwoQnl0ZVN0cmluZy5FbXB0eSwgbWVzc2FnZS5TaW5nbGVCeXRlcyk7Ci0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwoMC4wLCBtZXNzYWdlLlNpbmdsZURvdWJsZSk7Ci0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwoMCwgbWVzc2FnZS5TaW5nbGVGaXhlZDMyKTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbCgwTCwgbWVzc2FnZS5TaW5nbGVGaXhlZDY0KTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbCgwLjBmLCBtZXNzYWdlLlNpbmdsZUZsb2F0KTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbChGb3JlaWduRW51bS5Gb3JlaWduVW5zcGVjaWZpZWQsIG1lc3NhZ2UuU2lu
Z2xlRm9yZWlnbkVudW0pOwotICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChtZXNzYWdlLlNpbmds
ZUZvcmVpZ25NZXNzYWdlKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChJbXBvcnRFbnVt
LlVuc3BlY2lmaWVkLCBtZXNzYWdlLlNpbmdsZUltcG9ydEVudW0pOwotICAgICAgICAgICAgQXNz
ZXJ0LklzTnVsbChtZXNzYWdlLlNpbmdsZUltcG9ydE1lc3NhZ2UpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKDAsIG1lc3NhZ2UuU2luZ2xlSW50MzIpOwotICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKDBMLCBtZXNzYWdlLlNpbmdsZUludDY0KTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbChUZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51bS5VbnNwZWNpZmllZCwgbWVzc2Fn
ZS5TaW5nbGVOZXN0ZWRFbnVtKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc051bGwobWVzc2FnZS5T
aW5nbGVOZXN0ZWRNZXNzYWdlKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc051bGwobWVzc2FnZS5T
aW5nbGVQdWJsaWNJbXBvcnRNZXNzYWdlKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgw
LCBtZXNzYWdlLlNpbmdsZVNmaXhlZDMyKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgw
TCwgbWVzc2FnZS5TaW5nbGVTZml4ZWQ2NCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
MCwgbWVzc2FnZS5TaW5nbGVTaW50MzIpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDBM
LCBtZXNzYWdlLlNpbmdsZVNpbnQ2NCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIiIs
IG1lc3NhZ2UuU2luZ2xlU3RyaW5nKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwVSwg
bWVzc2FnZS5TaW5nbGVVaW50MzIpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDBVTCwg
bWVzc2FnZS5TaW5nbGVVaW50NjQpOwotCi0gICAgICAgICAgICAvLyBSZXBlYXRlZCBmaWVsZHMK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBtZXNzYWdlLlJlcGVhdGVkQm9vbC5Db3Vu
dCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMCwgbWVzc2FnZS5SZXBlYXRlZEJ5dGVz
LkNvdW50KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBtZXNzYWdlLlJlcGVhdGVk
RG91YmxlLkNvdW50KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBtZXNzYWdlLlJl
cGVhdGVkRml4ZWQzMi5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMCwgbWVz
c2FnZS5SZXBlYXRlZEZpeGVkNjQuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFs
KDAsIG1lc3NhZ2UuUmVwZWF0ZWRGbG9hdC5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoMCwgbWVzc2FnZS5SZXBlYXRlZEZvcmVpZ25FbnVtLkNvdW50KTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbCgwLCBtZXNzYWdlLlJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UuQ291bnQp
OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIG1lc3NhZ2UuUmVwZWF0ZWRJbXBvcnRF
bnVtLkNvdW50KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBtZXNzYWdlLlJlcGVh
dGVkSW1wb3J0TWVzc2FnZS5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMCwg
bWVzc2FnZS5SZXBlYXRlZE5lc3RlZEVudW0uQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKDAsIG1lc3NhZ2UuUmVwZWF0ZWROZXN0ZWRNZXNzYWdlLkNvdW50KTsKLSAgICAgICAg
ICAgIEFzc2VydC5BcmVFcXVhbCgwLCBtZXNzYWdlLlJlcGVhdGVkUHVibGljSW1wb3J0TWVzc2Fn
ZS5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMCwgbWVzc2FnZS5SZXBlYXRl
ZFNmaXhlZDMyLkNvdW50KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBtZXNzYWdl
LlJlcGVhdGVkU2ZpeGVkNjQuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAs
IG1lc3NhZ2UuUmVwZWF0ZWRTaW50MzIuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKDAsIG1lc3NhZ2UuUmVwZWF0ZWRTaW50NjQuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKDAsIG1lc3NhZ2UuUmVwZWF0ZWRTdHJpbmcuQ291bnQpOwotICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKDAsIG1lc3NhZ2UuUmVwZWF0ZWRVaW50MzIuQ291bnQpOwotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIG1lc3NhZ2UuUmVwZWF0ZWRVaW50NjQuQ291bnQpOwot
Ci0gICAgICAgICAgICAvLyBPbmVvZiBmaWVsZHMKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bChUZXN0QWxsVHlwZXMuT25lb2ZGaWVsZE9uZW9mQ2FzZS5Ob25lLCBtZXNzYWdlLk9uZW9mRmll
bGRDYXNlKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBtZXNzYWdlLk9uZW9mVWlu
dDMyKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiIiwgbWVzc2FnZS5PbmVvZlN0cmlu
Zyk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoQnl0ZVN0cmluZy5FbXB0eSwgbWVzc2Fn
ZS5PbmVvZkJ5dGVzKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc051bGwobWVzc2FnZS5PbmVvZk5l
c3RlZE1lc3NhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1Ymxp
YyB2b2lkIE51bGxTdHJpbmdBbmRCeXRlc1JlamVjdGVkKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzKCk7Ci0gICAgICAgICAgICBBc3NlcnQu
VGhyb3dzPEFyZ3VtZW50TnVsbEV4Y2VwdGlvbj4oKCkgPT4gbWVzc2FnZS5TaW5nbGVTdHJpbmcg
PSBudWxsKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnROdWxsRXhjZXB0aW9u
PigoKSA9PiBtZXNzYWdlLk9uZW9mU3RyaW5nID0gbnVsbCk7Ci0gICAgICAgICAgICBBc3NlcnQu
VGhyb3dzPEFyZ3VtZW50TnVsbEV4Y2VwdGlvbj4oKCkgPT4gbWVzc2FnZS5TaW5nbGVCeXRlcyA9
IG51bGwpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE51bGxFeGNlcHRpb24+
KCgpID0+IG1lc3NhZ2UuT25lb2ZCeXRlcyA9IG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFJvdW5kVHJpcF9FbXB0eSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBlcygpOwotICAgICAgICAg
ICAgLy8gV2l0aG91dCBzZXR0aW5nIGFueSB2YWx1ZXMsIHRoZXJlJ3Mgbm90aGluZyB0byB3cml0
ZS4KLSAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IG1lc3NhZ2UuVG9CeXRlQXJyYXkoKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBieXRlcy5MZW5ndGgpOwotICAgICAgICAgICAg
VGVzdEFsbFR5cGVzIHBhcnNlZCA9IFRlc3RBbGxUeXBlcy5QYXJzZXIuUGFyc2VGcm9tKGJ5dGVz
KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLCBwYXJzZWQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFJvdW5kVHJpcF9TaW5n
bGVWYWx1ZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyBUZXN0
QWxsVHlwZXMKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTaW5nbGVCb29sID0gdHJ1
ZSwKLSAgICAgICAgICAgICAgICBTaW5nbGVCeXRlcyA9IEJ5dGVTdHJpbmcuQ29weUZyb20oMSwg
MiwgMywgNCksCi0gICAgICAgICAgICAgICAgU2luZ2xlRG91YmxlID0gMjMuNSwKLSAgICAgICAg
ICAgICAgICBTaW5nbGVGaXhlZDMyID0gMjMsCi0gICAgICAgICAgICAgICAgU2luZ2xlRml4ZWQ2
NCA9IDEyMzQ1Njc4OTAxMjMsCi0gICAgICAgICAgICAgICAgU2luZ2xlRmxvYXQgPSAxMi4yNWYs
Ci0gICAgICAgICAgICAgICAgU2luZ2xlRm9yZWlnbkVudW0gPSBGb3JlaWduRW51bS5Gb3JlaWdu
QmFyLAotICAgICAgICAgICAgICAgIFNpbmdsZUZvcmVpZ25NZXNzYWdlID0gbmV3IEZvcmVpZ25N
ZXNzYWdlIHsgQyA9IDEwIH0sCi0gICAgICAgICAgICAgICAgU2luZ2xlSW1wb3J0RW51bSA9IElt
cG9ydEVudW0uSW1wb3J0QmF6LAotICAgICAgICAgICAgICAgIFNpbmdsZUltcG9ydE1lc3NhZ2Ug
PSBuZXcgSW1wb3J0TWVzc2FnZSB7IEQgPSAyMCB9LAotICAgICAgICAgICAgICAgIFNpbmdsZUlu
dDMyID0gMTAwLAotICAgICAgICAgICAgICAgIFNpbmdsZUludDY0ID0gMzIxMDk4NzY1NDMyMSwK
LSAgICAgICAgICAgICAgICBTaW5nbGVOZXN0ZWRFbnVtID0gVGVzdEFsbFR5cGVzLlR5cGVzLk5l
c3RlZEVudW0uRm9vLAotICAgICAgICAgICAgICAgIFNpbmdsZU5lc3RlZE1lc3NhZ2UgPSBuZXcg
VGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UgeyBCYiA9IDM1IH0sCi0gICAgICAgICAg
ICAgICAgU2luZ2xlUHVibGljSW1wb3J0TWVzc2FnZSA9IG5ldyBQdWJsaWNJbXBvcnRNZXNzYWdl
IHsgRSA9IDU0IH0sCi0gICAgICAgICAgICAgICAgU2luZ2xlU2ZpeGVkMzIgPSAtMTIzLAotICAg
ICAgICAgICAgICAgIFNpbmdsZVNmaXhlZDY0ID0gLTEyMzQ1Njc4OTAxMjM0LAotICAgICAgICAg
ICAgICAgIFNpbmdsZVNpbnQzMiA9IC00NTYsCi0gICAgICAgICAgICAgICAgU2luZ2xlU2ludDY0
ID0gLTEyMzQ1Njc4OTAxMjM1LAotICAgICAgICAgICAgICAgIFNpbmdsZVN0cmluZyA9ICJ0ZXN0
IiwKLSAgICAgICAgICAgICAgICBTaW5nbGVVaW50MzIgPSB1aW50Lk1heFZhbHVlLAotICAgICAg
ICAgICAgICAgIFNpbmdsZVVpbnQ2NCA9IHVsb25nLk1heFZhbHVlCi0gICAgICAgICAgICB9Owot
Ci0gICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBtZXNzYWdlLlRvQnl0ZUFycmF5KCk7Ci0gICAg
ICAgICAgICBUZXN0QWxsVHlwZXMgcGFyc2VkID0gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUZy
b20oYnl0ZXMpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UsIHBhcnNlZCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgUm91bmRU
cmlwX1JlcGVhdGVkVmFsdWVzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBuZXcgVGVzdEFsbFR5cGVzCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUmVwZWF0
ZWRCb29sID0geyB0cnVlLCBmYWxzZSB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkQnl0ZXMg
PSB7IEJ5dGVTdHJpbmcuQ29weUZyb20oMSwgMiwgMywgNCksIEJ5dGVTdHJpbmcuQ29weUZyb20o
NSwgNikgfSwKLSAgICAgICAgICAgICAgICBSZXBlYXRlZERvdWJsZSA9IHsgLTEyLjI1LCAyMy41
IH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWRGaXhlZDMyID0geyB1aW50Lk1heFZhbHVlLCAy
MyB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkRml4ZWQ2NCA9IHsgdWxvbmcuTWF4VmFsdWUs
IDEyMzQ1Njc4OTAxMjMgfSwKLSAgICAgICAgICAgICAgICBSZXBlYXRlZEZsb2F0ID0geyAxMDBm
LCAxMi4yNWYgfSwKLSAgICAgICAgICAgICAgICBSZXBlYXRlZEZvcmVpZ25FbnVtID0geyBGb3Jl
aWduRW51bS5Gb3JlaWduRm9vLCBGb3JlaWduRW51bS5Gb3JlaWduQmFyIH0sCi0gICAgICAgICAg
ICAgICAgUmVwZWF0ZWRGb3JlaWduTWVzc2FnZSA9IHsgbmV3IEZvcmVpZ25NZXNzYWdlKCksIG5l
dyBGb3JlaWduTWVzc2FnZSB7IEMgPSAxMCB9IH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWRJ
bXBvcnRFbnVtID0geyBJbXBvcnRFbnVtLkltcG9ydEJheiwgSW1wb3J0RW51bS5VbnNwZWNpZmll
ZCB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkSW1wb3J0TWVzc2FnZSA9IHsgbmV3IEltcG9y
dE1lc3NhZ2UgeyBEID0gMjAgfSwgbmV3IEltcG9ydE1lc3NhZ2UgeyBEID0gMjUgfSB9LAotICAg
ICAgICAgICAgICAgIFJlcGVhdGVkSW50MzIgPSB7IDEwMCwgMjAwIH0sCi0gICAgICAgICAgICAg
ICAgUmVwZWF0ZWRJbnQ2NCA9IHsgMzIxMDk4NzY1NDMyMSwgbG9uZy5NYXhWYWx1ZSB9LAotICAg
ICAgICAgICAgICAgIFJlcGVhdGVkTmVzdGVkRW51bSA9IHsgVGVzdEFsbFR5cGVzLlR5cGVzLk5l
c3RlZEVudW0uRm9vLCBUZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51bS5OZWcgfSwKLSAgICAg
ICAgICAgICAgICBSZXBlYXRlZE5lc3RlZE1lc3NhZ2UgPSB7IG5ldyBUZXN0QWxsVHlwZXMuVHlw
ZXMuTmVzdGVkTWVzc2FnZSB7IEJiID0gMzUgfSwgbmV3IFRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0
ZWRNZXNzYWdlIHsgQmIgPSAxMCB9IH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWRQdWJsaWNJ
bXBvcnRNZXNzYWdlID0geyBuZXcgUHVibGljSW1wb3J0TWVzc2FnZSB7IEUgPSA1NCB9LCBuZXcg
UHVibGljSW1wb3J0TWVzc2FnZSB7IEUgPSAtMSB9IH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0
ZWRTZml4ZWQzMiA9IHsgLTEyMywgMTIzIH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWRTZml4
ZWQ2NCA9IHsgLTEyMzQ1Njc4OTAxMjM0LCAxMjM0NTY3ODkwMTIzNCB9LAotICAgICAgICAgICAg
ICAgIFJlcGVhdGVkU2ludDMyID0geyAtNDU2LCAxMDAgfSwKLSAgICAgICAgICAgICAgICBSZXBl
YXRlZFNpbnQ2NCA9IHsgLTEyMzQ1Njc4OTAxMjM1LCAxMjMgfSwKLSAgICAgICAgICAgICAgICBS
ZXBlYXRlZFN0cmluZyA9IHsgImZvbyIsICJiYXIiIH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0
ZWRVaW50MzIgPSB7IHVpbnQuTWF4VmFsdWUsIHVpbnQuTWluVmFsdWUgfSwKLSAgICAgICAgICAg
ICAgICBSZXBlYXRlZFVpbnQ2NCA9IHsgdWxvbmcuTWF4VmFsdWUsIHVpbnQuTWluVmFsdWUgfQot
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbWVzc2FnZS5Ub0J5
dGVBcnJheSgpOwotICAgICAgICAgICAgVGVzdEFsbFR5cGVzIHBhcnNlZCA9IFRlc3RBbGxUeXBl
cy5QYXJzZXIuUGFyc2VGcm9tKGJ5dGVzKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCht
ZXNzYWdlLCBwYXJzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm90ZSB0aGF0IG5vdCBl
dmVyeSBtYXAgd2l0aGluIG1hcF91bml0dGVzdF9wcm90bzMgaXMgdXNlZC4gVGhleSBhbGwgZ28g
dGhyb3VnaCB2ZXJ5Ci0gICAgICAgIC8vIHNpbWlsYXIgY29kZSBwYXRocy4gVGhlIGZhY3QgdGhh
dCBhbGwgbWFwcyBhcmUgcHJlc2VudCBpcyB2YWxpZGF0aW9uIHRoYXQgd2UgaGF2ZSBjb2RlY3MK
LSAgICAgICAgLy8gZm9yIGV2ZXJ5IHR5cGUuCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJs
aWMgdm9pZCBSb3VuZFRyaXBfTWFwcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNz
YWdlID0gbmV3IFRlc3RNYXAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBNYXBCb29s
Qm9vbCA9IHsKLSAgICAgICAgICAgICAgICAgICAgeyBmYWxzZSwgdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgICAgICB7IHRydWUsIGZhbHNlIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgIE1hcEludDMyQnl0ZXMgPSB7Ci0gICAgICAgICAgICAgICAgICAgIHsgNSwgQnl0ZVN0
cmluZy5Db3B5RnJvbSg2LCA3LCA4KSB9LAotICAgICAgICAgICAgICAgICAgICB7IDI1LCBCeXRl
U3RyaW5nLkNvcHlGcm9tKDEsIDIsIDMsIDQsIDUpIH0sCi0gICAgICAgICAgICAgICAgICAgIHsg
MTAsIEJ5dGVTdHJpbmcuRW1wdHkgfQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAg
ICAgTWFwSW50MzJGb3JlaWduTWVzc2FnZSA9IHsKLSAgICAgICAgICAgICAgICAgICAgeyAwLCBu
ZXcgRm9yZWlnbk1lc3NhZ2UgeyBDID0gMTAgfSB9LAotICAgICAgICAgICAgICAgICAgICB7IDUs
IG5ldyBGb3JlaWduTWVzc2FnZSgpIH0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
ICAgICBNYXBJbnQzMkVudW0gPSB7Ci0gICAgICAgICAgICAgICAgICAgIHsgMSwgTWFwRW51bS5C
YXIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAyMDAwLCBNYXBFbnVtLkZvbyB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0g
bWVzc2FnZS5Ub0J5dGVBcnJheSgpOwotICAgICAgICAgICAgVGVzdE1hcCBwYXJzZWQgPSBUZXN0
TWFwLlBhcnNlci5QYXJzZUZyb20oYnl0ZXMpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFs
KG1lc3NhZ2UsIHBhcnNlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgTWFwV2l0aEVtcHR5RW50cnkoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgbWVzc2FnZSA9IG5ldyBUZXN0TWFwCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
TWFwSW50MzJCeXRlcyA9IHsgeyAwLCBCeXRlU3RyaW5nLkVtcHR5IH0gfQotICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbWVzc2FnZS5Ub0J5dGVBcnJheSgpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDIsIGJ5dGVzLkxlbmd0aCk7IC8vIFRhZyBmb3Ig
ZmllbGQgZW50cnkgKDEgYnl0ZSksIGxlbmd0aCBvZiBlbnRyeSAoMDsgMSBieXRlKQotCi0gICAg
ICAgICAgICB2YXIgcGFyc2VkID0gVGVzdE1hcC5QYXJzZXIuUGFyc2VGcm9tKGJ5dGVzKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxLCBwYXJzZWQuTWFwSW50MzJCeXRlcy5Db3VudCk7
Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoQnl0ZVN0cmluZy5FbXB0eSwgcGFyc2VkLk1h
cEludDMyQnl0ZXNbMF0pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1
YmxpYyB2b2lkIE1hcFdpdGhPbmx5VmFsdWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBI
YW5kLWNyYWZ0IHRoZSBzdHJlYW0gdG8gY29udGFpbiBhIHNpbmdsZSBlbnRyeSB3aXRoIGp1c3Qg
YSB2YWx1ZS4KLSAgICAgICAgICAgIHZhciBtZW1vcnlTdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFt
KCk7Ci0gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKG1lbW9y
eVN0cmVhbSk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoVGVzdE1hcC5NYXBJbnQzMkZv
cmVpZ25NZXNzYWdlRmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1p
dGVkKTsKLSAgICAgICAgICAgIHZhciBuZXN0ZWRNZXNzYWdlID0gbmV3IEZvcmVpZ25NZXNzYWdl
IHsgQyA9IDIwIH07Ci0gICAgICAgICAgICAvLyBTaXplIG9mIHRoZSBlbnRyeSAodGFnLCBzaXpl
IHdyaXR0ZW4gYnkgV3JpdGVNZXNzYWdlLCBkYXRhIHdyaXR0ZW4gYnkgV3JpdGVNZXNzYWdlKQot
ICAgICAgICAgICAgb3V0cHV0LldyaXRlTGVuZ3RoKDIgKyBuZXN0ZWRNZXNzYWdlLkNhbGN1bGF0
ZVNpemUoKSk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoMiwgV2lyZUZvcm1hdC5XaXJl
VHlwZS5MZW5ndGhEZWxpbWl0ZWQpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShu
ZXN0ZWRNZXNzYWdlKTsKLSAgICAgICAgICAgIG91dHB1dC5GbHVzaCgpOwotCi0gICAgICAgICAg
ICB2YXIgcGFyc2VkID0gVGVzdE1hcC5QYXJzZXIuUGFyc2VGcm9tKG1lbW9yeVN0cmVhbS5Ub0Fy
cmF5KCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG5lc3RlZE1lc3NhZ2UsIHBhcnNl
ZC5NYXBJbnQzMkZvcmVpZ25NZXNzYWdlWzBdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0
XQotICAgICAgICBwdWJsaWMgdm9pZCBNYXBXaXRoT25seUtleV9QcmltaXRpdmVWYWx1ZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIEhhbmQtY3JhZnQgdGhlIHN0cmVhbSB0byBjb250YWlu
IGEgc2luZ2xlIGVudHJ5IHdpdGgganVzdCBhIGtleS4KLSAgICAgICAgICAgIHZhciBtZW1vcnlT
dHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbmV3
IENvZGVkT3V0cHV0U3RyZWFtKG1lbW9yeVN0cmVhbSk7Ci0gICAgICAgICAgICBvdXRwdXQuV3Jp
dGVUYWcoVGVzdE1hcC5NYXBJbnQzMkRvdWJsZUZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldpcmVU
eXBlLkxlbmd0aERlbGltaXRlZCk7Ci0gICAgICAgICAgICBpbnQga2V5ID0gMTA7Ci0gICAgICAg
ICAgICBvdXRwdXQuV3JpdGVMZW5ndGgoMSArIENvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQz
MlNpemUoa2V5KSk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoMSwgV2lyZUZvcm1hdC5X
aXJlVHlwZS5WYXJpbnQpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoa2V5KTsKLSAg
ICAgICAgICAgIG91dHB1dC5GbHVzaCgpOwotCi0gICAgICAgICAgICB2YXIgcGFyc2VkID0gVGVz
dE1hcC5QYXJzZXIuUGFyc2VGcm9tKG1lbW9yeVN0cmVhbS5Ub0FycmF5KCkpOwotICAgICAgICAg
ICAgQXNzZXJ0LkFyZUVxdWFsKDAuMCwgcGFyc2VkLk1hcEludDMyRG91YmxlW2tleV0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIE1hcFdpdGhPbmx5
S2V5X01lc3NhZ2VWYWx1ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEhhbmQtY3JhZnQg
dGhlIHN0cmVhbSB0byBjb250YWluIGEgc2luZ2xlIGVudHJ5IHdpdGgganVzdCBhIGtleS4KLSAg
ICAgICAgICAgIHZhciBtZW1vcnlTdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAg
ICAgICB2YXIgb3V0cHV0ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKG1lbW9yeVN0cmVhbSk7Ci0g
ICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoVGVzdE1hcC5NYXBJbnQzMkZvcmVpZ25NZXNzYWdl
RmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAg
ICAgICAgIGludCBrZXkgPSAxMDsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUxlbmd0aCgxICsg
Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShrZXkpKTsKLSAgICAgICAgICAgIG91
dHB1dC5Xcml0ZVRhZygxLCBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAg
ICBvdXRwdXQuV3JpdGVJbnQzMihrZXkpOwotICAgICAgICAgICAgb3V0cHV0LkZsdXNoKCk7Ci0K
LSAgICAgICAgICAgIHZhciBwYXJzZWQgPSBUZXN0TWFwLlBhcnNlci5QYXJzZUZyb20obWVtb3J5
U3RyZWFtLlRvQXJyYXkoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobmV3IEZvcmVp
Z25NZXNzYWdlKCksIHBhcnNlZC5NYXBJbnQzMkZvcmVpZ25NZXNzYWdlW2tleV0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIE1hcElnbm9yZXNFeHRy
YUZpZWxkc1dpdGhpbkVudHJ5TWVzc2FnZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBI
YW5kLWNyYWZ0IHRoZSBzdHJlYW0gdG8gY29udGFpbiBhIHNpbmdsZSBlbnRyeSB3aXRoIHRocmVl
IGZpZWxkcwotICAgICAgICAgICAgdmFyIG1lbW9yeVN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0o
KTsKLSAgICAgICAgICAgIHZhciBvdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0obWVtb3J5
U3RyZWFtKTsKLQotICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKFRlc3RNYXAuTWFwSW50MzJJ
bnQzMkZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCk7Ci0K
LSAgICAgICAgICAgIHZhciBrZXkgPSAxMDsgLy8gRmllbGQgMSAKLSAgICAgICAgICAgIHZhciB2
YWx1ZSA9IDIwOyAvLyBGaWVsZCAyCi0gICAgICAgICAgICB2YXIgZXh0cmEgPSAzMDsgLy8gRmll
bGQgMwotCi0gICAgICAgICAgICAvLyBFYWNoIGZpZWxkIGNhbiBiZSByZXByZXNlbnRlZCBpbiBh
IHNpbmdsZSBieXRlLCB3aXRoIGEgc2luZ2xlIGJ5dGUgdGFnLgotICAgICAgICAgICAgLy8gVG90
YWwgbWVzc2FnZSBzaXplOiA2IGJ5dGVzLgotICAgICAgICAgICAgb3V0cHV0LldyaXRlTGVuZ3Ro
KDYpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKDEsIFdpcmVGb3JtYXQuV2lyZVR5cGUu
VmFyaW50KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUludDMyKGtleSk7Ci0gICAgICAgICAg
ICBvdXRwdXQuV3JpdGVUYWcoMiwgV2lyZUZvcm1hdC5XaXJlVHlwZS5WYXJpbnQpOwotICAgICAg
ICAgICAgb3V0cHV0LldyaXRlSW50MzIodmFsdWUpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRl
VGFnKDMsIFdpcmVGb3JtYXQuV2lyZVR5cGUuVmFyaW50KTsKLSAgICAgICAgICAgIG91dHB1dC5X
cml0ZUludDMyKGV4dHJhKTsKLSAgICAgICAgICAgIG91dHB1dC5GbHVzaCgpOwotCi0gICAgICAg
ICAgICB2YXIgcGFyc2VkID0gVGVzdE1hcC5QYXJzZXIuUGFyc2VGcm9tKG1lbW9yeVN0cmVhbS5U
b0FycmF5KCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHZhbHVlLCBwYXJzZWQuTWFw
SW50MzJJbnQzMltrZXldKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBw
dWJsaWMgdm9pZCBNYXBGaWVsZE9yZGVySXNJcnJlbGV2YW50KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdmFyIG1lbW9yeVN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAg
IHZhciBvdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0obWVtb3J5U3RyZWFtKTsKLQotICAg
ICAgICAgICAgb3V0cHV0LldyaXRlVGFnKFRlc3RNYXAuTWFwSW50MzJJbnQzMkZpZWxkTnVtYmVy
LCBXaXJlRm9ybWF0LldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCk7Ci0KLSAgICAgICAgICAgIHZh
ciBrZXkgPSAxMDsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IDIwOwotCi0gICAgICAgICAgICAv
LyBFYWNoIGZpZWxkIGNhbiBiZSByZXByZXNlbnRlZCBpbiBhIHNpbmdsZSBieXRlLCB3aXRoIGEg
c2luZ2xlIGJ5dGUgdGFnLgotICAgICAgICAgICAgLy8gVG90YWwgbWVzc2FnZSBzaXplOiA0IGJ5
dGVzLgotICAgICAgICAgICAgb3V0cHV0LldyaXRlTGVuZ3RoKDQpOwotICAgICAgICAgICAgb3V0
cHV0LldyaXRlVGFnKDIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuVmFyaW50KTsKLSAgICAgICAgICAg
IG91dHB1dC5Xcml0ZUludDMyKHZhbHVlKTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygx
LCBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVJ
bnQzMihrZXkpOwotICAgICAgICAgICAgb3V0cHV0LkZsdXNoKCk7Ci0KLSAgICAgICAgICAgIHZh
ciBwYXJzZWQgPSBUZXN0TWFwLlBhcnNlci5QYXJzZUZyb20obWVtb3J5U3RyZWFtLlRvQXJyYXko
KSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwodmFsdWUsIHBhcnNlZC5NYXBJbnQzMklu
dDMyW2tleV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2
b2lkIE1hcE5vbkNvbnRpZ3VvdXNFbnRyaWVzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFy
IG1lbW9yeVN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIHZhciBvdXRw
dXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0obWVtb3J5U3RyZWFtKTsKLQotICAgICAgICAgICAg
Ly8gTWVzc2FnZSBzdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAvLyBFbnRyeSBmb3IgTWFwSW50MzJJ
bnQzMgotICAgICAgICAgICAgLy8gRW50cnkgZm9yIE1hcFN0cmluZ1N0cmluZwotICAgICAgICAg
ICAgLy8gRW50cnkgZm9yIE1hcEludDMySW50MzIKLQotICAgICAgICAgICAgLy8gRmlyc3QgZW50
cnkKLSAgICAgICAgICAgIHZhciBrZXkxID0gMTA7Ci0gICAgICAgICAgICB2YXIgdmFsdWUxID0g
MjA7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoVGVzdE1hcC5NYXBJbnQzMkludDMyRmll
bGROdW1iZXIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAgICAg
ICAgIG91dHB1dC5Xcml0ZUxlbmd0aCg0KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygx
LCBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVJ
bnQzMihrZXkxKTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygyLCBXaXJlRm9ybWF0Lldp
cmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVJbnQzMih2YWx1ZTEpOwot
Ci0gICAgICAgICAgICAvLyBTZWNvbmQgZW50cnkKLSAgICAgICAgICAgIHZhciBrZXkyID0gImEi
OwotICAgICAgICAgICAgdmFyIHZhbHVlMiA9ICJiIjsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0
ZVRhZyhUZXN0TWFwLk1hcFN0cmluZ1N0cmluZ0ZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldpcmVU
eXBlLkxlbmd0aERlbGltaXRlZCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVMZW5ndGgoNik7
IC8vIDMgYnl0ZXMgcGVyIGVudHJ5OiB0YWcsIHNpemUsIGNoYXJhY3RlcgotICAgICAgICAgICAg
b3V0cHV0LldyaXRlVGFnKDEsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsK
LSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhrZXkyKTsKLSAgICAgICAgICAgIG91dHB1
dC5Xcml0ZVRhZygyLCBXaXJlRm9ybWF0LldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCk7Ci0gICAg
ICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcodmFsdWUyKTsKLQotICAgICAgICAgICAgLy8gVGhp
cmQgZW50cnkKLSAgICAgICAgICAgIHZhciBrZXkzID0gMTU7Ci0gICAgICAgICAgICB2YXIgdmFs
dWUzID0gMjU7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoVGVzdE1hcC5NYXBJbnQzMklu
dDMyRmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAg
ICAgICAgICAgIG91dHB1dC5Xcml0ZUxlbmd0aCg0KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0
ZVRhZygxLCBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAgICBvdXRwdXQu
V3JpdGVJbnQzMihrZXkzKTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygyLCBXaXJlRm9y
bWF0LldpcmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVJbnQzMih2YWx1
ZTMpOwotCi0gICAgICAgICAgICBvdXRwdXQuRmx1c2goKTsKLSAgICAgICAgICAgIHZhciBwYXJz
ZWQgPSBUZXN0TWFwLlBhcnNlci5QYXJzZUZyb20obWVtb3J5U3RyZWFtLlRvQXJyYXkoKSk7Ci0g
ICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgVGVzdE1hcAotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIE1hcEludDMySW50MzIgPSB7IHsga2V5MSwgdmFsdWUxIH0sIHsga2V5Mywg
dmFsdWUzIH0gfSwKLSAgICAgICAgICAgICAgICBNYXBTdHJpbmdTdHJpbmcgPSB7IHsga2V5Miwg
dmFsdWUyIH0gfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChl
eHBlY3RlZCwgcGFyc2VkKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBw
dWJsaWMgdm9pZCBEdXBsaWNhdGVLZXlzX0xhc3RFbnRyeVdpbnMoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB2YXIgbWVtb3J5U3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAg
ICAgdmFyIG91dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShtZW1vcnlTdHJlYW0pOwotCi0g
ICAgICAgICAgICB2YXIga2V5ID0gMTA7Ci0gICAgICAgICAgICB2YXIgdmFsdWUxID0gMjA7Ci0g
ICAgICAgICAgICB2YXIgdmFsdWUyID0gMzA7Ci0KLSAgICAgICAgICAgIC8vIEZpcnN0IGVudHJ5
Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoVGVzdE1hcC5NYXBJbnQzMkludDMyRmllbGRO
dW1iZXIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAgICAgICAg
IG91dHB1dC5Xcml0ZUxlbmd0aCg0KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZygxLCBX
aXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVJbnQz
MihrZXkpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKDIsIFdpcmVGb3JtYXQuV2lyZVR5
cGUuVmFyaW50KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUludDMyKHZhbHVlMSk7Ci0KLSAg
ICAgICAgICAgIC8vIFNlY29uZCBlbnRyeSAtIHNhbWUga2V5LCBkaWZmZXJlbnQgdmFsdWUKLSAg
ICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZyhUZXN0TWFwLk1hcEludDMySW50MzJGaWVsZE51bWJl
ciwgV2lyZUZvcm1hdC5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpOwotICAgICAgICAgICAgb3V0
cHV0LldyaXRlTGVuZ3RoKDQpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKDEsIFdpcmVG
b3JtYXQuV2lyZVR5cGUuVmFyaW50KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUludDMyKGtl
eSk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoMiwgV2lyZUZvcm1hdC5XaXJlVHlwZS5W
YXJpbnQpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlSW50MzIodmFsdWUyKTsKLSAgICAgICAg
ICAgIG91dHB1dC5GbHVzaCgpOwotCi0gICAgICAgICAgICB2YXIgcGFyc2VkID0gVGVzdE1hcC5Q
YXJzZXIuUGFyc2VGcm9tKG1lbW9yeVN0cmVhbS5Ub0FycmF5KCkpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKHZhbHVlMiwgcGFyc2VkLk1hcEludDMySW50MzJba2V5XSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgQ2xvbmVTaW5nbGVOb25N
ZXNzYWdlVmFsdWVzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG9yaWdpbmFsID0gbmV3
IFRlc3RBbGxUeXBlcwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNpbmdsZUJvb2wg
PSB0cnVlLAotICAgICAgICAgICAgICAgIFNpbmdsZUJ5dGVzID0gQnl0ZVN0cmluZy5Db3B5RnJv
bSgxLCAyLCAzLCA0KSwKLSAgICAgICAgICAgICAgICBTaW5nbGVEb3VibGUgPSAyMy41LAotICAg
ICAgICAgICAgICAgIFNpbmdsZUZpeGVkMzIgPSAyMywKLSAgICAgICAgICAgICAgICBTaW5nbGVG
aXhlZDY0ID0gMTIzNDU2Nzg5MDEyMywKLSAgICAgICAgICAgICAgICBTaW5nbGVGbG9hdCA9IDEy
LjI1ZiwKLSAgICAgICAgICAgICAgICBTaW5nbGVJbnQzMiA9IDEwMCwKLSAgICAgICAgICAgICAg
ICBTaW5nbGVJbnQ2NCA9IDMyMTA5ODc2NTQzMjEsCi0gICAgICAgICAgICAgICAgU2luZ2xlTmVz
dGVkRW51bSA9IFRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRFbnVtLkZvbywKLSAgICAgICAgICAg
ICAgICBTaW5nbGVTZml4ZWQzMiA9IC0xMjMsCi0gICAgICAgICAgICAgICAgU2luZ2xlU2ZpeGVk
NjQgPSAtMTIzNDU2Nzg5MDEyMzQsCi0gICAgICAgICAgICAgICAgU2luZ2xlU2ludDMyID0gLTQ1
NiwKLSAgICAgICAgICAgICAgICBTaW5nbGVTaW50NjQgPSAtMTIzNDU2Nzg5MDEyMzUsCi0gICAg
ICAgICAgICAgICAgU2luZ2xlU3RyaW5nID0gInRlc3QiLAotICAgICAgICAgICAgICAgIFNpbmds
ZVVpbnQzMiA9IHVpbnQuTWF4VmFsdWUsCi0gICAgICAgICAgICAgICAgU2luZ2xlVWludDY0ID0g
dWxvbmcuTWF4VmFsdWUKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB2YXIgY2xvbmUgPSBv
cmlnaW5hbC5DbG9uZSgpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZU5vdFNhbWUob3JpZ2luYWws
IGNsb25lKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChvcmlnaW5hbCwgY2xvbmUpOwot
ICAgICAgICAgICAgLy8gSnVzdCBhcyBhIHNpbmdsZSBleGFtcGxlCi0gICAgICAgICAgICBjbG9u
ZS5TaW5nbGVJbnQzMiA9IDE1MDsKLSAgICAgICAgICAgIEFzc2VydC5BcmVOb3RFcXVhbChvcmln
aW5hbCwgY2xvbmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1Ymxp
YyB2b2lkIENsb25lUmVwZWF0ZWROb25NZXNzYWdlVmFsdWVzKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdmFyIG9yaWdpbmFsID0gbmV3IFRlc3RBbGxUeXBlcwotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFJlcGVhdGVkQm9vbCA9IHsgdHJ1ZSwgZmFsc2UgfSwKLSAgICAgICAgICAg
ICAgICBSZXBlYXRlZEJ5dGVzID0geyBCeXRlU3RyaW5nLkNvcHlGcm9tKDEsIDIsIDMsIDQpLCBC
eXRlU3RyaW5nLkNvcHlGcm9tKDUsIDYpIH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWREb3Vi
bGUgPSB7IC0xMi4yNSwgMjMuNSB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkRml4ZWQzMiA9
IHsgdWludC5NYXhWYWx1ZSwgMjMgfSwKLSAgICAgICAgICAgICAgICBSZXBlYXRlZEZpeGVkNjQg
PSB7IHVsb25nLk1heFZhbHVlLCAxMjM0NTY3ODkwMTIzIH0sCi0gICAgICAgICAgICAgICAgUmVw
ZWF0ZWRGbG9hdCA9IHsgMTAwZiwgMTIuMjVmIH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWRJ
bnQzMiA9IHsgMTAwLCAyMDAgfSwKLSAgICAgICAgICAgICAgICBSZXBlYXRlZEludDY0ID0geyAz
MjEwOTg3NjU0MzIxLCBsb25nLk1heFZhbHVlIH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWRO
ZXN0ZWRFbnVtID0geyBUZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51bS5Gb28sIFRlc3RBbGxU
eXBlcy5UeXBlcy5OZXN0ZWRFbnVtLk5lZyB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkU2Zp
eGVkMzIgPSB7IC0xMjMsIDEyMyB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkU2ZpeGVkNjQg
PSB7IC0xMjM0NTY3ODkwMTIzNCwgMTIzNDU2Nzg5MDEyMzQgfSwKLSAgICAgICAgICAgICAgICBS
ZXBlYXRlZFNpbnQzMiA9IHsgLTQ1NiwgMTAwIH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWRT
aW50NjQgPSB7IC0xMjM0NTY3ODkwMTIzNSwgMTIzIH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0
ZWRTdHJpbmcgPSB7ICJmb28iLCAiYmFyIiB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkVWlu
dDMyID0geyB1aW50Lk1heFZhbHVlLCB1aW50Lk1pblZhbHVlIH0sCi0gICAgICAgICAgICAgICAg
UmVwZWF0ZWRVaW50NjQgPSB7IHVsb25nLk1heFZhbHVlLCB1aW50Lk1pblZhbHVlIH0KLSAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgIHZhciBjbG9uZSA9IG9yaWdpbmFsLkNsb25lKCk7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlTm90U2FtZShvcmlnaW5hbCwgY2xvbmUpOwotICAgICAgICAg
ICAgQXNzZXJ0LkFyZUVxdWFsKG9yaWdpbmFsLCBjbG9uZSk7Ci0gICAgICAgICAgICAvLyBKdXN0
IGFzIGEgc2luZ2xlIGV4YW1wbGUKLSAgICAgICAgICAgIGNsb25lLlJlcGVhdGVkRG91YmxlLkFk
ZCgyNS41KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVOb3RFcXVhbChvcmlnaW5hbCwgY2xvbmUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIENsb25l
U2luZ2xlTWVzc2FnZUZpZWxkKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG9yaWdpbmFs
ID0gbmV3IFRlc3RBbGxUeXBlcwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNpbmds
ZU5lc3RlZE1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UgeyBC
YiA9IDIwIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHZhciBjbG9uZSA9IG9yaWdp
bmFsLkNsb25lKCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlTm90U2FtZShvcmlnaW5hbCwgY2xv
bmUpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZU5vdFNhbWUob3JpZ2luYWwuU2luZ2xlTmVzdGVk
TWVzc2FnZSwgY2xvbmUuU2luZ2xlTmVzdGVkTWVzc2FnZSk7Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwob3JpZ2luYWwsIGNsb25lKTsKLQotICAgICAgICAgICAgY2xvbmUuU2luZ2xlTmVz
dGVkTWVzc2FnZS5CYiA9IDMwOwotICAgICAgICAgICAgQXNzZXJ0LkFyZU5vdEVxdWFsKG9yaWdp
bmFsLCBjbG9uZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGlj
IHZvaWQgQ2xvbmVSZXBlYXRlZE1lc3NhZ2VGaWVsZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZhciBvcmlnaW5hbCA9IG5ldyBUZXN0QWxsVHlwZXMKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBSZXBlYXRlZE5lc3RlZE1lc3NhZ2UgPSB7IG5ldyBUZXN0QWxsVHlwZXMuVHlwZXMu
TmVzdGVkTWVzc2FnZSB7IEJiID0gMjAgfSB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAg
ICB2YXIgY2xvbmUgPSBvcmlnaW5hbC5DbG9uZSgpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZU5v
dFNhbWUob3JpZ2luYWwsIGNsb25lKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVOb3RTYW1lKG9y
aWdpbmFsLlJlcGVhdGVkTmVzdGVkTWVzc2FnZSwgY2xvbmUuUmVwZWF0ZWROZXN0ZWRNZXNzYWdl
KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVOb3RTYW1lKG9yaWdpbmFsLlJlcGVhdGVkTmVzdGVk
TWVzc2FnZVswXSwgY2xvbmUuUmVwZWF0ZWROZXN0ZWRNZXNzYWdlWzBdKTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbChvcmlnaW5hbCwgY2xvbmUpOwotCi0gICAgICAgICAgICBjbG9uZS5S
ZXBlYXRlZE5lc3RlZE1lc3NhZ2VbMF0uQmIgPSAzMDsKLSAgICAgICAgICAgIEFzc2VydC5BcmVO
b3RFcXVhbChvcmlnaW5hbCwgY2xvbmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0g
ICAgICAgIHB1YmxpYyB2b2lkIENsb25lT25lb2ZGaWVsZCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHZhciBvcmlnaW5hbCA9IG5ldyBUZXN0QWxsVHlwZXMKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBPbmVvZk5lc3RlZE1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzLlR5cGVzLk5l
c3RlZE1lc3NhZ2UgeyBCYiA9IDIwIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHZh
ciBjbG9uZSA9IG9yaWdpbmFsLkNsb25lKCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlTm90U2Ft
ZShvcmlnaW5hbCwgY2xvbmUpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG9yaWdpbmFs
LCBjbG9uZSk7Ci0KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGNsb25lZCB0aGUgbWVz
c2FnZQotICAgICAgICAgICAgb3JpZ2luYWwuT25lb2ZOZXN0ZWRNZXNzYWdlLkJiID0gMzA7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlTm90RXF1YWwob3JpZ2luYWwsIGNsb25lKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBPbmVvZlByb3BlcnRpZXMo
KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTd2l0Y2ggdGhlIG9uZW9mIGNhc2UgYmV0d2Vl
biBlYWNoIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucywgYW5kIGNoZWNrIGV2ZXJ5dGhpbmcgYmVo
YXZlcwotICAgICAgICAgICAgLy8gYXMgZXhwZWN0ZWQgaW4gZWFjaCBjYXNlLgotICAgICAgICAg
ICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzKCk7Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwoIiIsIG1lc3NhZ2UuT25lb2ZTdHJpbmcpOwotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKDAsIG1lc3NhZ2UuT25lb2ZVaW50MzIpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKEJ5dGVTdHJpbmcuRW1wdHksIG1lc3NhZ2UuT25lb2ZCeXRlcyk7Ci0gICAgICAgICAgICBB
c3NlcnQuSXNOdWxsKG1lc3NhZ2UuT25lb2ZOZXN0ZWRNZXNzYWdlKTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbChUZXN0QWxsVHlwZXMuT25lb2ZGaWVsZE9uZW9mQ2FzZS5Ob25lLCBtZXNz
YWdlLk9uZW9mRmllbGRDYXNlKTsKLQotICAgICAgICAgICAgbWVzc2FnZS5PbmVvZlN0cmluZyA9
ICJzYW1wbGUiOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJzYW1wbGUiLCBtZXNzYWdl
Lk9uZW9mU3RyaW5nKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgwLCBtZXNzYWdlLk9u
ZW9mVWludDMyKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChCeXRlU3RyaW5nLkVtcHR5
LCBtZXNzYWdlLk9uZW9mQnl0ZXMpOwotICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChtZXNzYWdl
Lk9uZW9mTmVzdGVkTWVzc2FnZSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoVGVzdEFs
bFR5cGVzLk9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZTdHJpbmcsIG1lc3NhZ2UuT25lb2ZGaWVs
ZENhc2UpOwotCi0gICAgICAgICAgICB2YXIgYnl0ZXMgPSBCeXRlU3RyaW5nLkNvcHlGcm9tKDEs
IDIsIDMpOwotICAgICAgICAgICAgbWVzc2FnZS5PbmVvZkJ5dGVzID0gYnl0ZXM7Ci0gICAgICAg
ICAgICBBc3NlcnQuQXJlRXF1YWwoIiIsIG1lc3NhZ2UuT25lb2ZTdHJpbmcpOwotICAgICAgICAg
ICAgQXNzZXJ0LkFyZUVxdWFsKDAsIG1lc3NhZ2UuT25lb2ZVaW50MzIpOwotICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKGJ5dGVzLCBtZXNzYWdlLk9uZW9mQnl0ZXMpOwotICAgICAgICAgICAg
QXNzZXJ0LklzTnVsbChtZXNzYWdlLk9uZW9mTmVzdGVkTWVzc2FnZSk7Ci0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwoVGVzdEFsbFR5cGVzLk9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZCeXRl
cywgbWVzc2FnZS5PbmVvZkZpZWxkQ2FzZSk7Ci0KLSAgICAgICAgICAgIG1lc3NhZ2UuT25lb2ZV
aW50MzIgPSAyMDsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiIiwgbWVzc2FnZS5PbmVv
ZlN0cmluZyk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMjAsIG1lc3NhZ2UuT25lb2ZV
aW50MzIpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKEJ5dGVTdHJpbmcuRW1wdHksIG1l
c3NhZ2UuT25lb2ZCeXRlcyk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNOdWxsKG1lc3NhZ2UuT25l
b2ZOZXN0ZWRNZXNzYWdlKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChUZXN0QWxsVHlw
ZXMuT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZlVpbnQzMiwgbWVzc2FnZS5PbmVvZkZpZWxkQ2Fz
ZSk7Ci0KLSAgICAgICAgICAgIHZhciBuZXN0ZWRNZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBlcy5U
eXBlcy5OZXN0ZWRNZXNzYWdlIHsgQmIgPSAyNSB9OwotICAgICAgICAgICAgbWVzc2FnZS5PbmVv
Zk5lc3RlZE1lc3NhZ2UgPSBuZXN0ZWRNZXNzYWdlOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKCIiLCBtZXNzYWdlLk9uZW9mU3RyaW5nKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgwLCBtZXNzYWdlLk9uZW9mVWludDMyKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChC
eXRlU3RyaW5nLkVtcHR5LCBtZXNzYWdlLk9uZW9mQnl0ZXMpOwotICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKG5lc3RlZE1lc3NhZ2UsIG1lc3NhZ2UuT25lb2ZOZXN0ZWRNZXNzYWdlKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChUZXN0QWxsVHlwZXMuT25lb2ZGaWVsZE9uZW9mQ2Fz
ZS5PbmVvZk5lc3RlZE1lc3NhZ2UsIG1lc3NhZ2UuT25lb2ZGaWVsZENhc2UpOwotCi0gICAgICAg
ICAgICBtZXNzYWdlLkNsZWFyT25lb2ZGaWVsZCgpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKCIiLCBtZXNzYWdlLk9uZW9mU3RyaW5nKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgwLCBtZXNzYWdlLk9uZW9mVWludDMyKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChC
eXRlU3RyaW5nLkVtcHR5LCBtZXNzYWdlLk9uZW9mQnl0ZXMpOwotICAgICAgICAgICAgQXNzZXJ0
LklzTnVsbChtZXNzYWdlLk9uZW9mTmVzdGVkTWVzc2FnZSk7Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwoVGVzdEFsbFR5cGVzLk9uZW9mRmllbGRPbmVvZkNhc2UuTm9uZSwgbWVzc2FnZS5P
bmVvZkZpZWxkQ2FzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVi
bGljIHZvaWQgT25lb2ZfRGVmYXVsdFZhbHVlc05vdEVxdWFsKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdmFyIG1lc3NhZ2UxID0gbmV3IFRlc3RBbGxUeXBlcyB7IE9uZW9mU3RyaW5nID0gIiIg
fTsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlMiA9IG5ldyBUZXN0QWxsVHlwZXMgeyBPbmVvZlVp
bnQzMiA9IDAgfTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChUZXN0QWxsVHlwZXMuT25l
b2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZlN0cmluZywgbWVzc2FnZTEuT25lb2ZGaWVsZENhc2UpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKFRlc3RBbGxUeXBlcy5PbmVvZkZpZWxkT25lb2ZD
YXNlLk9uZW9mVWludDMyLCBtZXNzYWdlMi5PbmVvZkZpZWxkQ2FzZSk7Ci0gICAgICAgICAgICBB
c3NlcnQuQXJlTm90RXF1YWwobWVzc2FnZTEsIG1lc3NhZ2UyKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBPbmVvZlNlcmlhbGl6YXRpb25fTm9uRGVm
YXVsdFZhbHVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVz
dEFsbFR5cGVzKCk7Ci0gICAgICAgICAgICBtZXNzYWdlLk9uZW9mU3RyaW5nID0gInRoaXMgd291
bGQgdGFrZSBhIGJpdCBvZiBzcGFjZSI7Ci0gICAgICAgICAgICBtZXNzYWdlLk9uZW9mVWludDMy
ID0gMTA7Ci0gICAgICAgICAgICB2YXIgYnl0ZXMgPSBtZXNzYWdlLlRvQnl0ZUFycmF5KCk7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMywgYnl0ZXMuTGVuZ3RoKTsgLy8gMiBieXRlcyBm
b3IgdGhlIHRhZyArIDEgZm9yIHRoZSB2YWx1ZSAtIG5vIHN0cmluZyEKLQotICAgICAgICAgICAg
dmFyIG1lc3NhZ2UyID0gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUZyb20oYnl0ZXMpOwotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UsIG1lc3NhZ2UyKTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbChUZXN0QWxsVHlwZXMuT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZlVp
bnQzMiwgbWVzc2FnZTIuT25lb2ZGaWVsZENhc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIE9uZW9mU2VyaWFsaXphdGlvbl9EZWZhdWx0VmFsdWUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXMo
KTsKLSAgICAgICAgICAgIG1lc3NhZ2UuT25lb2ZTdHJpbmcgPSAidGhpcyB3b3VsZCB0YWtlIGEg
Yml0IG9mIHNwYWNlIjsKLSAgICAgICAgICAgIG1lc3NhZ2UuT25lb2ZVaW50MzIgPSAwOyAvLyBU
aGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBVSW50MzI7IG5vcm1hbGx5IHdvdWxkbid0IGJl
IHNlcmlhbGl6ZWQKLSAgICAgICAgICAgIHZhciBieXRlcyA9IG1lc3NhZ2UuVG9CeXRlQXJyYXko
KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgzLCBieXRlcy5MZW5ndGgpOyAvLyAyIGJ5
dGVzIGZvciB0aGUgdGFnICsgMSBmb3IgdGhlIHZhbHVlIC0gaXQncyBzdGlsbCBzZXJpYWxpemVk
Ci0KLSAgICAgICAgICAgIHZhciBtZXNzYWdlMiA9IFRlc3RBbGxUeXBlcy5QYXJzZXIuUGFyc2VG
cm9tKGJ5dGVzKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLCBtZXNzYWdl
Mik7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoVGVzdEFsbFR5cGVzLk9uZW9mRmllbGRP
bmVvZkNhc2UuT25lb2ZVaW50MzIsIG1lc3NhZ2UyLk9uZW9mRmllbGRDYXNlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBJZ25vcmVVbmtub3duRmll
bGRzX1JlYWxEYXRhU3RpbGxSZWFkKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3Nh
Z2UgPSBTYW1wbGVNZXNzYWdlcy5DcmVhdGVGdWxsVGVzdEFsbFR5cGVzKCk7Ci0gICAgICAgICAg
ICB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgdmFyIG91dHB1
dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShzdHJlYW0pOwotICAgICAgICAgICAgdmFyIHVudXNl
ZEZpZWxkTnVtYmVyID0gMjM0NTY7Ci0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShUZXN0QWxs
VHlwZXMuRGVzY3JpcHRvci5GaWVsZHMuSW5EZWNsYXJhdGlvbk9yZGVyKCkuU2VsZWN0KHggPT4g
eC5GaWVsZE51bWJlcikuQ29udGFpbnModW51c2VkRmllbGROdW1iZXIpKTsKLSAgICAgICAgICAg
IG91dHB1dC5Xcml0ZVRhZyh1bnVzZWRGaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XaXJlVHlwZS5M
ZW5ndGhEZWxpbWl0ZWQpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKCJpZ25vcmUg
bWUiKTsKLSAgICAgICAgICAgIG1lc3NhZ2UuV3JpdGVUbyhvdXRwdXQpOwotICAgICAgICAgICAg
b3V0cHV0LkZsdXNoKCk7Ci0KLSAgICAgICAgICAgIHN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAg
ICAgICAgICB2YXIgcGFyc2VkID0gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUZyb20oc3RyZWFt
KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLCBwYXJzZWQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIElnbm9yZVVua25vd25G
aWVsZHNfQWxsVHlwZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTaW1wbGUgd2F5IG9m
IGVuc3VyaW5nIHdlIGNhbiBza2lwIGFsbCBraW5kcyBvZiBmaWVsZHMuCi0gICAgICAgICAgICB2
YXIgZGF0YSA9IFNhbXBsZU1lc3NhZ2VzLkNyZWF0ZUZ1bGxUZXN0QWxsVHlwZXMoKS5Ub0J5dGVB
cnJheSgpOwotICAgICAgICAgICAgdmFyIGVtcHR5ID0gRW1wdHkuUGFyc2VyLlBhcnNlRnJvbShk
YXRhKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgRW1wdHkoKSwgZW1wdHkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhpcyB3YXMgb3JpZ2luYWxseSBzZWVuIGFzIGEgY29u
Zm9ybWFuY2UgdGVzdCBmYWlsdXJlLgotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZv
aWQgVHJ1bmNhdGVkTWVzc2FnZUZpZWxkVGhyb3dzKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gMTMwLCAzIGlzIHRoZSBtZXNzYWdlIHRhZwotICAgICAgICAgICAgLy8gMSBpcyB0aGUgZGF0
YSBsZW5ndGggLSBidXQgdGhlcmUncyBubyBkYXRhLgotICAgICAgICAgICAgdmFyIGRhdGEgPSBu
ZXcgYnl0ZVtdIHsgMTMwLCAzLCAxIH07Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkgPT4gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJz
ZUZyb20oZGF0YSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAg
ICAvLy8gRGVtb25zdHJhdGVzIGN1cnJlbnQgYmVoYXZpb3VyIHdpdGggYW4gZXh0cmFuZW91cyBl
bmQgZ3JvdXAgdGFnIC0gc2VlIGlzc3VlIDY4OAotICAgICAgICAvLy8gZm9yIGRldGFpbHM7IHdl
IG1heSB3YW50IHRvIGNoYW5nZSB0aGlzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAg
ICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgRXh0cmFFbmRHcm91cFRocm93cygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gU2FtcGxlTWVzc2FnZXMuQ3JlYXRlRnVs
bFRlc3RBbGxUeXBlcygpOwotICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBNZW1vcnlTdHJl
YW0oKTsKLSAgICAgICAgICAgIHZhciBvdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0oc3Ry
ZWFtKTsKLQotICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKFRlc3RBbGxUeXBlcy5TaW5nbGVG
aXhlZDMyRmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV2lyZVR5cGUuRml4ZWQzMik7Ci0gICAgICAg
ICAgICBvdXRwdXQuV3JpdGVGaXhlZDMyKDEyMyk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVU
YWcoMTAwLCBXaXJlRm9ybWF0LldpcmVUeXBlLkVuZEdyb3VwKTsKLQotICAgICAgICAgICAgb3V0
cHV0LkZsdXNoKCk7Ci0KLSAgICAgICAgICAgIHN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAg
ICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkgPT4g
VGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUZyb20oc3RyZWFtKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgQ3VzdG9tRGlhZ25vc3RpY01lc3NhZ2Vf
RGlyZWN0VG9TdHJpbmdDYWxsKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBuZXcgRm9yZWlnbk1lc3NhZ2UgeyBDID0gMzEgfTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVF
cXVhbCgieyBcImNcIjogMzEsIFwiQGNJbkhleFwiOiBcIjFmXCIgfSIsIG1lc3NhZ2UuVG9TdHJp
bmcoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoInsgXCJjXCI6IDMxIH0iLCBKc29u
Rm9ybWF0dGVyLkRlZmF1bHQuRm9ybWF0KG1lc3NhZ2UpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBDdXN0b21EaWFnbm9zdGljTWVzc2FnZV9OZXN0
ZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlw
ZXMgeyBTaW5nbGVGb3JlaWduTWVzc2FnZSA9IG5ldyBGb3JlaWduTWVzc2FnZSB7IEMgPSAxNiB9
IH07Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoInsgXCJzaW5nbGVGb3JlaWduTWVzc2Fn
ZVwiOiB7IFwiY1wiOiAxNiwgXCJAY0luSGV4XCI6IFwiMTBcIiB9IH0iLCBtZXNzYWdlLlRvU3Ry
aW5nKCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJ7IFwic2luZ2xlRm9yZWlnbk1l
c3NhZ2VcIjogeyBcImNcIjogMTYgfSB9IiwgSnNvbkZvcm1hdHRlci5EZWZhdWx0LkZvcm1hdCht
ZXNzYWdlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZv
aWQgQ3VzdG9tRGlhZ25vc3RpY01lc3NhZ2VfRGlyZWN0VG9UZXh0V3JpdGVyQ2FsbCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IEZvcmVpZ25NZXNzYWdlIHsgQyA9
IDMxIH07Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAg
ICAgICAgICAgSnNvbkZvcm1hdHRlci5EZWZhdWx0LkZvcm1hdChtZXNzYWdlLCB3cml0ZXIpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJ7IFwiY1wiOiAzMSB9Iiwgd3JpdGVyLlRvU3Ry
aW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Hb29nbGUuUHJvdG9i
dWYuVGVzdC5jc3Byb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvR29vZ2xlLlBy
b3RvYnVmLlRlc3QuY3Nwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDNkZTRh
NDM2YjY5ODc3ODdhYjAwNzk0YTBmNTZkYWMyZDYzYWUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9H
b29nbGUuUHJvdG9idWYuVGVzdC5jc3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBA
QAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRv
b2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2No
ZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8UHJvcGVydHlH
cm91cD4KLSAgICA8Q29uZmlndXJhdGlvbiBDb25kaXRpb249IiAnJChDb25maWd1cmF0aW9uKScg
PT0gJycgIj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KLSAgICA8UGxhdGZvcm0gQ29uZGl0aW9uPSIg
JyQoUGxhdGZvcm0pJyA9PSAnJyAiPkFueUNQVTwvUGxhdGZvcm0+Ci0gICAgPFByb2R1Y3RWZXJz
aW9uPjkuMC4zMDcyOTwvUHJvZHVjdFZlcnNpb24+Ci0gICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9T
Y2hlbWFWZXJzaW9uPgotICAgIDxQcm9qZWN0R3VpZD57REQwMUVEMjQtMzc1MC00NTY3LTlBMjMt
MURCNjc2QTE1NjEwfTwvUHJvamVjdEd1aWQ+Ci0gICAgPE91dHB1dFR5cGU+TGlicmFyeTwvT3V0
cHV0VHlwZT4KLSAgICA8QXBwRGVzaWduZXJGb2xkZXI+UHJvcGVydGllczwvQXBwRGVzaWduZXJG
b2xkZXI+Ci0gICAgPFJvb3ROYW1lc3BhY2U+R29vZ2xlLlByb3RvYnVmPC9Sb290TmFtZXNwYWNl
PgotICAgIDxBc3NlbWJseU5hbWU+R29vZ2xlLlByb3RvYnVmLlRlc3Q8L0Fzc2VtYmx5TmFtZT4K
LSAgICA8VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj52NC41PC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9u
PgotICAgIDxGaWxlQWxpZ25tZW50PjUxMjwvRmlsZUFsaWdubWVudD4KLSAgICA8T2xkVG9vbHNW
ZXJzaW9uPjMuNTwvT2xkVG9vbHNWZXJzaW9uPgotICAgIDxUYXJnZXRGcmFtZXdvcmtQcm9maWxl
PgotICAgIDwvVGFyZ2V0RnJhbWV3b3JrUHJvZmlsZT4KLSAgICA8TnVHZXRQYWNrYWdlSW1wb3J0
U3RhbXA+Ci0gICAgPC9OdUdldFBhY2thZ2VJbXBvcnRTdGFtcD4KLSAgPC9Qcm9wZXJ0eUdyb3Vw
PgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IiAnJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKScgPT0gJ0RlYnVnfEFueUNQVScgIj4KLSAgICA8RGVidWdTeW1ib2xzPnRydWU8L0RlYnVn
U3ltYm9scz4KLSAgICA8RGVidWdUeXBlPmZ1bGw8L0RlYnVnVHlwZT4KLSAgICA8T3B0aW1pemU+
ZmFsc2U8L09wdGltaXplPgotICAgIDxPdXRwdXRQYXRoPmJpblxEZWJ1ZzwvT3V0cHV0UGF0aD4K
LSAgICA8SW50ZXJtZWRpYXRlT3V0cHV0UGF0aD5vYmpcRGVidWdcPC9JbnRlcm1lZGlhdGVPdXRw
dXRQYXRoPgotICAgIDxEZWZpbmVDb25zdGFudHM+REVCVUc7VFJBQ0U7JChFbnZpcm9ubWVudEZs
YXZvcik7JChFbnZpcm9ubWVudFRlbXBsYXRlKTwvRGVmaW5lQ29uc3RhbnRzPgotICAgIDxFcnJv
clJlcG9ydD5wcm9tcHQ8L0Vycm9yUmVwb3J0PgotICAgIDxXYXJuaW5nTGV2ZWw+NDwvV2Fybmlu
Z0xldmVsPgotICAgIDxOb1N0ZExpYj50cnVlPC9Ob1N0ZExpYj4KLSAgICA8R2VuZXJhdGVTZXJp
YWxpemF0aW9uQXNzZW1ibGllcz5PZmY8L0dlbmVyYXRlU2VyaWFsaXphdGlvbkFzc2VtYmxpZXM+
Ci0gICAgPFByZWZlcjMyQml0PmZhbHNlPC9QcmVmZXIzMkJpdD4KLSAgPC9Qcm9wZXJ0eUdyb3Vw
PgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IiAnJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKScgPT0gJ1JlbGVhc2V8QW55Q1BVJyAiPgotICAgIDxEZWJ1Z1R5cGU+cGRib25seTwvRGVi
dWdUeXBlPgotICAgIDxPcHRpbWl6ZT50cnVlPC9PcHRpbWl6ZT4KLSAgICA8T3V0cHV0UGF0aD5i
aW5cUmVsZWFzZTwvT3V0cHV0UGF0aD4KLSAgICA8SW50ZXJtZWRpYXRlT3V0cHV0UGF0aD5vYmpc
UmVsZWFzZVw8L0ludGVybWVkaWF0ZU91dHB1dFBhdGg+Ci0gICAgPERlZmluZUNvbnN0YW50cz5U
UkFDRTskKEVudmlyb25tZW50Rmxhdm9yKTskKEVudmlyb25tZW50VGVtcGxhdGUpPC9EZWZpbmVD
b25zdGFudHM+Ci0gICAgPEVycm9yUmVwb3J0PnByb21wdDwvRXJyb3JSZXBvcnQ+Ci0gICAgPFdh
cm5pbmdMZXZlbD40PC9XYXJuaW5nTGV2ZWw+Ci0gICAgPE5vU3RkTGliPnRydWU8L05vU3RkTGli
PgotICAgIDxHZW5lcmF0ZVNlcmlhbGl6YXRpb25Bc3NlbWJsaWVzPk9mZjwvR2VuZXJhdGVTZXJp
YWxpemF0aW9uQXNzZW1ibGllcz4KLSAgICA8UHJlZmVyMzJCaXQ+ZmFsc2U8L1ByZWZlcjMyQml0
PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iICckKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnUmVsZWFzZVNpZ25lZHxBbnlDUFUnICI+Ci0g
ICAgPERlYnVnVHlwZT5wZGJvbmx5PC9EZWJ1Z1R5cGU+Ci0gICAgPE9wdGltaXplPnRydWU8L09w
dGltaXplPgotICAgIDxPdXRwdXRQYXRoPmJpblxSZWxlYXNlU2lnbmVkPC9PdXRwdXRQYXRoPgot
ICAgIDxJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPm9ialxSZWxlYXNlU2lnbmVkXDwvSW50ZXJtZWRp
YXRlT3V0cHV0UGF0aD4KLSAgICA8RGVmaW5lQ29uc3RhbnRzPlRSQUNFOyQoRW52aXJvbm1lbnRG
bGF2b3IpOyQoRW52aXJvbm1lbnRUZW1wbGF0ZSk8L0RlZmluZUNvbnN0YW50cz4KLSAgICA8RXJy
b3JSZXBvcnQ+cHJvbXB0PC9FcnJvclJlcG9ydD4KLSAgICA8V2FybmluZ0xldmVsPjQ8L1dhcm5p
bmdMZXZlbD4KLSAgICA8Tm9TdGRMaWI+dHJ1ZTwvTm9TdGRMaWI+Ci0gICAgPEdlbmVyYXRlU2Vy
aWFsaXphdGlvbkFzc2VtYmxpZXM+T2ZmPC9HZW5lcmF0ZVNlcmlhbGl6YXRpb25Bc3NlbWJsaWVz
PgotICAgIDxQcmVmZXIzMkJpdD5mYWxzZTwvUHJlZmVyMzJCaXQ+Ci0gICAgPFNpZ25Bc3NlbWJs
eT5UcnVlPC9TaWduQXNzZW1ibHk+Ci0gICAgPEFzc2VtYmx5T3JpZ2luYXRvcktleUZpbGU+Li5c
Li5ca2V5c1xHb29nbGUuUHJvdG9idWYuc25rPC9Bc3NlbWJseU9yaWdpbmF0b3JLZXlGaWxlPgot
ICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFJlZmVyZW5jZSBJbmNsdWRl
PSJtc2NvcmxpYiIgLz4KLSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9Im51bml0LmNvcmUsIFZlcnNp
b249Mi42LjQuMTQzNTAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OTZkMDlhMWVi
N2Y0NGE3NywgcHJvY2Vzc29yQXJjaGl0ZWN0dXJlPU1TSUwiPgotICAgICAgPEhpbnRQYXRoPi4u
XHBhY2thZ2VzXE5Vbml0VGVzdEFkYXB0ZXIuMi4wLjBcbGliXG51bml0LmNvcmUuZGxsPC9IaW50
UGF0aD4KLSAgICAgIDxQcml2YXRlPlRydWU8L1ByaXZhdGU+Ci0gICAgPC9SZWZlcmVuY2U+Ci0g
ICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJudW5pdC5jb3JlLmludGVyZmFjZXMsIFZlcnNpb249Mi42
LjQuMTQzNTAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OTZkMDlhMWViN2Y0NGE3
NywgcHJvY2Vzc29yQXJjaGl0ZWN0dXJlPU1TSUwiPgotICAgICAgPEhpbnRQYXRoPi4uXHBhY2th
Z2VzXE5Vbml0VGVzdEFkYXB0ZXIuMi4wLjBcbGliXG51bml0LmNvcmUuaW50ZXJmYWNlcy5kbGw8
L0hpbnRQYXRoPgotICAgICAgPFByaXZhdGU+VHJ1ZTwvUHJpdmF0ZT4KLSAgICA8L1JlZmVyZW5j
ZT4KLSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9Im51bml0LmZyYW1ld29yaywgVmVyc2lvbj0yLjYu
NC4xNDM1MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05NmQwOWExZWI3ZjQ0YTc3
LCBwcm9jZXNzb3JBcmNoaXRlY3R1cmU9TVNJTCI+Ci0gICAgICA8SGludFBhdGg+Li5ccGFja2Fn
ZXNcTlVuaXQuMi42LjRcbGliXG51bml0LmZyYW1ld29yay5kbGw8L0hpbnRQYXRoPgotICAgICAg
PFByaXZhdGU+VHJ1ZTwvUHJpdmF0ZT4KLSAgICA8L1JlZmVyZW5jZT4KLSAgICA8UmVmZXJlbmNl
IEluY2x1ZGU9Im51bml0LnV0aWwsIFZlcnNpb249Mi42LjQuMTQzNTAsIEN1bHR1cmU9bmV1dHJh
bCwgUHVibGljS2V5VG9rZW49OTZkMDlhMWViN2Y0NGE3NywgcHJvY2Vzc29yQXJjaGl0ZWN0dXJl
PU1TSUwiPgotICAgICAgPEhpbnRQYXRoPi4uXHBhY2thZ2VzXE5Vbml0VGVzdEFkYXB0ZXIuMi4w
LjBcbGliXG51bml0LnV0aWwuZGxsPC9IaW50UGF0aD4KLSAgICAgIDxQcml2YXRlPlRydWU8L1By
aXZhdGU+Ci0gICAgPC9SZWZlcmVuY2U+Ci0gICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJOVW5pdC5W
aXN1YWxTdHVkaW8uVGVzdEFkYXB0ZXIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj00Y2I0MGQzNTQ5NDY5MWFjLCBwcm9jZXNzb3JBcmNoaXRlY3R1cmU9
TVNJTCI+Ci0gICAgICA8SGludFBhdGg+Li5ccGFja2FnZXNcTlVuaXRUZXN0QWRhcHRlci4yLjAu
MFxsaWJcTlVuaXQuVmlzdWFsU3R1ZGlvLlRlc3RBZGFwdGVyLmRsbDwvSGludFBhdGg+Ci0gICAg
ICA8UHJpdmF0ZT5UcnVlPC9Qcml2YXRlPgotICAgIDwvUmVmZXJlbmNlPgotICAgIDxSZWZlcmVu
Y2UgSW5jbHVkZT0iU3lzdGVtIiAvPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLlht
bCIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENvbXBpbGUgSW5jbHVk
ZT0iQnl0ZVN0cmluZ1Rlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iQ29kZWRJbnB1
dFN0cmVhbUV4dGVuc2lvbnMuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iQ29kZWRJbnB1
dFN0cmVhbVRlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iQ29kZWRPdXRwdXRTdHJl
YW1UZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IkNvbXBhdGliaWxpdHlcUHJvcGVy
dHlJbmZvRXh0ZW5zaW9uc1Rlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iQ29tcGF0
aWJpbGl0eVxUeXBlRXh0ZW5zaW9uc1Rlc3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0i
RXF1YWxpdHlUZXN0ZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iRmllbGRDb2RlY1Rl
c3QuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iR2VuZXJhdGVkTWVzc2FnZVRlc3QuY3Mi
IC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iQ29sbGVjdGlvbnNcTWFwRmllbGRUZXN0LmNzIiAv
PgotICAgIDxDb21waWxlIEluY2x1ZGU9IkNvbGxlY3Rpb25zXFJlcGVhdGVkRmllbGRUZXN0LmNz
IiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9Ikpzb25Gb3JtYXR0ZXJUZXN0LmNzIiAvPgotICAg
IDxDb21waWxlIEluY2x1ZGU9Ikpzb25QYXJzZXJUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIElu
Y2x1ZGU9Ikpzb25Ub2tlbml6ZXJUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJl
ZmxlY3Rpb25cRGVzY3JpcHRvcnNUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJl
ZmxlY3Rpb25cRmllbGRBY2Nlc3NUZXN0LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJl
ZmxlY3Rpb25cVHlwZVJlZ2lzdHJ5VGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJT
YW1wbGVFbnVtLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlNhbXBsZU1lc3NhZ2VzLmNz
IiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlRlc3RQcm90b3NcRm9yZWlnbk1lc3NhZ2VQYXJ0
aWFsLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlRlc3RQcm90b3NcTWFwVW5pdHRlc3RQ
cm90bzMuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iVGVzdFByb3Rvc1xVbml0dGVzdElt
cG9ydFByb3RvMy5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJUZXN0UHJvdG9zXFVuaXR0
ZXN0SW1wb3J0UHVibGljUHJvdG8zLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlRlc3RQ
cm90b3NcVW5pdHRlc3RJc3N1ZXMuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iVGVzdFBy
b3Rvc1xVbml0dGVzdFByb3RvMy5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJEZXByZWNh
dGVkTWVtYmVyVGVzdC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJJc3N1ZXNUZXN0LmNz
IiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlByb3BlcnRpZXNcQXNzZW1ibHlJbmZvLmNzIiAv
PgotICAgIDxDb21waWxlIEluY2x1ZGU9IlRlc3RDb3JuZXJDYXNlcy5jcyIgLz4KLSAgICA8Q29t
cGlsZSBJbmNsdWRlPSJUZXN0UHJvdG9zXFVuaXR0ZXN0V2VsbEtub3duVHlwZXMuY3MiIC8+Ci0g
ICAgPENvbXBpbGUgSW5jbHVkZT0iV2VsbEtub3duVHlwZXNcQW55VGVzdC5jcyIgLz4KLSAgICA8
Q29tcGlsZSBJbmNsdWRlPSJXZWxsS25vd25UeXBlc1xEdXJhdGlvblRlc3QuY3MiIC8+Ci0gICAg
PENvbXBpbGUgSW5jbHVkZT0iV2VsbEtub3duVHlwZXNcRmllbGRNYXNrVGVzdC5jcyIgLz4KLSAg
ICA8Q29tcGlsZSBJbmNsdWRlPSJXZWxsS25vd25UeXBlc1xUaW1lc3RhbXBUZXN0LmNzIiAvPgot
ICAgIDxDb21waWxlIEluY2x1ZGU9IldlbGxLbm93blR5cGVzXFdyYXBwZXJzVGVzdC5jcyIgLz4K
LSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5j
bHVkZT0iLi5cR29vZ2xlLlByb3RvYnVmXEdvb2dsZS5Qcm90b2J1Zi5jc3Byb2oiPgotICAgICAg
PFByb2plY3Q+ezY5MDhCRENFLUQ5MjUtNDNGMy05NEFDLUE1MzFFNkRGMjU5MX08L1Byb2plY3Q+
Ci0gICAgICA8TmFtZT5Hb29nbGUuUHJvdG9idWY8L05hbWU+Ci0gICAgPC9Qcm9qZWN0UmVmZXJl
bmNlPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Tm9uZSBJbmNsdWRlPSJw
YWNrYWdlcy5jb25maWciIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxT
ZXJ2aWNlIEluY2x1ZGU9Ins4MkE3RjQ4RC0zQjUwLTRCMUUtQjgyRS0zQURBODIxMEMzNTh9IiAv
PgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cCAvPgotICA8SW1wb3J0IFByb2plY3Q9IiQo
TVNCdWlsZFRvb2xzUGF0aClcTWljcm9zb2Z0LkNTaGFycC50YXJnZXRzIiAvPgotICA8IS0tIFRv
IG1vZGlmeSB5b3VyIGJ1aWxkIHByb2Nlc3MsIGFkZCB5b3VyIHRhc2sgaW5zaWRlIG9uZSBvZiB0
aGUgdGFyZ2V0cyBiZWxvdyBhbmQgdW5jb21tZW50IGl0LiAKLSAgICAgICBPdGhlciBzaW1pbGFy
IGV4dGVuc2lvbiBwb2ludHMgZXhpc3QsIHNlZSBNaWNyb3NvZnQuQ29tbW9uLnRhcmdldHMuCi0g
IDxUYXJnZXQgTmFtZT0iQmVmb3JlQnVpbGQiPgotICA8L1RhcmdldD4KLSAgPFRhcmdldCBOYW1l
PSJBZnRlckJ1aWxkIj4KLSAgPC9UYXJnZXQ+Ci0gIC0tPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYu
VGVzdC9Jc3N1ZXNUZXN0LmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0lzc3Vl
c1Rlc3QuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYjIzYWE2ODU1ZDc3MGY5
OTZlNjI3NjQyZWUwYWI2OGNmMTE0MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0lzc3Vlc1Rlc3Qu
Y3MKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBu
b3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2Vu
ZHJlZ2lvbgotCi11c2luZyBHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbjsKLXVzaW5nIFVuaXRU
ZXN0Lklzc3Vlcy5UZXN0UHJvdG9zOwotdXNpbmcgTlVuaXQuRnJhbWV3b3JrOwotCi0KLW5hbWVz
cGFjZSBHb29nbGUuUHJvdG9idWYKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIFRlc3Rz
IGZvciBpc3N1ZXMgd2hpY2ggYXJlbid0IGVhc2lseSBjb21wYXJ0bWVudGFsaXplZCBpbnRvIG90
aGVyIHVuaXQgdGVzdHMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgSXNz
dWVzVGVzdAotICAgIHsKLSAgICAgICAgLy8gSXNzdWUgNDUKLSAgICAgICAgW1Rlc3RdCi0gICAg
ICAgIHB1YmxpYyB2b2lkIEZpZWxkQ2FsbGVkSXRlbSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEl0ZW1GaWVsZCBtZXNzYWdlID0gbmV3IEl0ZW1GaWVsZCB7IEl0ZW0gPSAzIH07Ci0gICAgICAg
ICAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBJdGVtRmllbGQuRGVzY3JpcHRvci5GaW5kRmll
bGRCeU5hbWUoIml0ZW0iKTsKLSAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGZpZWxkKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgzLCAoaW50KWZpZWxkLkFjY2Vzc29yLkdldFZhbHVl
KG1lc3NhZ2UpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMg
dm9pZCBSZXNlcnZlZE5hbWVzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBuZXcgUmVzZXJ2ZWROYW1lcyB7IFR5cGVzXyA9IDEwLCBEZXNjcmlwdG9yXyA9IDIwIH07Ci0g
ICAgICAgICAgICAvLyBVbmRlcnNjb3JlcyBhcmVuJ3QgcmVmbGVjdGVkIGluIHRoZSBKU09OLgot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJ7IFwidHlwZXNcIjogMTAsIFwiZGVzY3JpcHRv
clwiOiAyMCB9IiwgbWVzc2FnZS5Ub1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtU
ZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBKc29uTmFtZVBhcnNlVGVzdCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBKc29uUGFyc2VyLlNldHRpbmdzKDEwLCBU
eXBlUmVnaXN0cnkuRnJvbUZpbGVzKFVuaXR0ZXN0SXNzdWVzUmVmbGVjdGlvbi5EZXNjcmlwdG9y
KSk7Ci0gICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IEpzb25QYXJzZXIoc2V0dGluZ3MpOwot
Ci0gICAgICAgICAgICAvLyBJdCBpcyBzYWZlIHRvIHVzZSBlaXRoZXIgb3JpZ2luYWwgZmllbGQg
bmFtZSBvciBleHBsaWNpdGx5IHNwZWNpZmllZCBqc29uX25hbWUKLSAgICAgICAgICAgIEFzc2Vy
dC5BcmVFcXVhbChuZXcgVGVzdEpzb25OYW1lIHsgTmFtZSA9ICJ0ZXN0IiwgRGVzY3JpcHRpb24g
PSAidGVzdDIiLCBHdWlkID0gInRlc3QzIiB9LAotICAgICAgICAgICAgICAgIHBhcnNlci5QYXJz
ZTxUZXN0SnNvbk5hbWU+KCJ7IFwibmFtZVwiOiBcInRlc3RcIiwgXCJkZXNjXCI6IFwidGVzdDJc
IiwgXCJndWlkXCI6IFwidGVzdDNcIiB9IikpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3Rd
Ci0gICAgICAgIHB1YmxpYyB2b2lkIEpzb25OYW1lRm9ybWF0VGVzdCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RKc29uTmFtZSB7IE5hbWUgPSAidGVzdCIs
IERlc2NyaXB0aW9uID0gInRlc3QyIiwgR3VpZCA9ICJ0ZXN0MyIgfTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbCgieyBcIm5hbWVcIjogXCJ0ZXN0XCIsIFwiZGVzY1wiOiBcInRlc3QyXCIs
IFwiZXhpZFwiOiBcInRlc3QzXCIgfSIsCi0gICAgICAgICAgICAgICAgSnNvbkZvcm1hdHRlci5E
ZWZhdWx0LkZvcm1hdChtZXNzYWdlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvSnNvbkZvcm1hdHRlclRlc3QuY3MgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Nz
aGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvSnNvbkZvcm1hdHRlclRlc3QuY3MKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyN2E3NTk1NmZjMGRjZWYyY2E1ODlhZDYzMjY3ZmYx
OTE5ZmI3NjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9j
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L0pzb25Gb3JtYXR0ZXJUZXN0LmNzCisrKyAv
ZGV2L251bGwKQEAgLTEsNTI2ICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBh
bmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9u
Ci0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zOwotdXNp
bmcgTlVuaXQuRnJhbWV3b3JrOwotdXNpbmcgVW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3M7Ci11
c2luZyBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXM7Ci11c2luZyBHb29nbGUuUHJvdG9i
dWYuUmVmbGVjdGlvbjsKLQotdXNpbmcgc3RhdGljIEdvb2dsZS5Qcm90b2J1Zi5Kc29uUGFyc2Vy
VGVzdDsgLy8gRm9yIFdyYXBJblF1b3RlcwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmCi17
Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBUZXN0cyBmb3IgdGhlIEpTT04gZm9ybWF0dGVy
LiBOb3RlIHRoYXQgaW4gdGhlc2UgdGVzdHMsIGRvdWJsZSBxdW90ZXMgYXJlIHJlcGxhY2VkIHdp
dGggYXBvc3Ryb3BoZXMKLSAgICAvLy8gZm9yIHRoZSBzYWtlIG9mIHJlYWRhYmlsaXR5IChlbWJl
ZGRpbmcgXCIgZXZlcnl3aGVyZSBpcyBwYWluZnVsKS4gU2VlIHRoZSBBc3NlcnRKc29uIG1ldGhv
ZCBmb3IgZGV0YWlscy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBKc29u
Rm9ybWF0dGVyVGVzdAotICAgIHsKLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lk
IERlZmF1bHRWYWx1ZXNfV2hlbk9taXR0ZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
Zm9ybWF0dGVyID0gbmV3IEpzb25Gb3JtYXR0ZXIobmV3IEpzb25Gb3JtYXR0ZXIuU2V0dGluZ3Mo
Zm9ybWF0RGVmYXVsdFZhbHVlczogZmFsc2UpKTsKLQotICAgICAgICAgICAgQXNzZXJ0SnNvbigi
eyB9IiwgZm9ybWF0dGVyLkZvcm1hdChuZXcgRm9yZWlnbk1lc3NhZ2UoKSkpOwotICAgICAgICAg
ICAgQXNzZXJ0SnNvbigieyB9IiwgZm9ybWF0dGVyLkZvcm1hdChuZXcgVGVzdEFsbFR5cGVzKCkp
KTsKLSAgICAgICAgICAgIEFzc2VydEpzb24oInsgfSIsIGZvcm1hdHRlci5Gb3JtYXQobmV3IFRl
c3RNYXAoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2
b2lkIERlZmF1bHRWYWx1ZXNfV2hlbkluY2x1ZGVkKCkKLSAgICAgICAgewotICAgICAgICAgICAg
dmFyIGZvcm1hdHRlciA9IG5ldyBKc29uRm9ybWF0dGVyKG5ldyBKc29uRm9ybWF0dGVyLlNldHRp
bmdzKGZvcm1hdERlZmF1bHRWYWx1ZXM6IHRydWUpKTsKLSAgICAgICAgICAgIEFzc2VydEpzb24o
InsgJ2MnOiAwIH0iLCBmb3JtYXR0ZXIuRm9ybWF0KG5ldyBGb3JlaWduTWVzc2FnZSgpKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgQWxsU2luZ2xl
RmllbGRzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVzdEFs
bFR5cGVzCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2luZ2xlQm9vbCA9IHRydWUs
Ci0gICAgICAgICAgICAgICAgU2luZ2xlQnl0ZXMgPSBCeXRlU3RyaW5nLkNvcHlGcm9tKDEsIDIs
IDMsIDQpLAotICAgICAgICAgICAgICAgIFNpbmdsZURvdWJsZSA9IDIzLjUsCi0gICAgICAgICAg
ICAgICAgU2luZ2xlRml4ZWQzMiA9IDIzLAotICAgICAgICAgICAgICAgIFNpbmdsZUZpeGVkNjQg
PSAxMjM0NTY3ODkwMTIzLAotICAgICAgICAgICAgICAgIFNpbmdsZUZsb2F0ID0gMTIuMjVmLAot
ICAgICAgICAgICAgICAgIFNpbmdsZUZvcmVpZ25FbnVtID0gRm9yZWlnbkVudW0uRm9yZWlnbkJh
ciwKLSAgICAgICAgICAgICAgICBTaW5nbGVGb3JlaWduTWVzc2FnZSA9IG5ldyBGb3JlaWduTWVz
c2FnZSB7IEMgPSAxMCB9LAotICAgICAgICAgICAgICAgIFNpbmdsZUltcG9ydEVudW0gPSBJbXBv
cnRFbnVtLkltcG9ydEJheiwKLSAgICAgICAgICAgICAgICBTaW5nbGVJbXBvcnRNZXNzYWdlID0g
bmV3IEltcG9ydE1lc3NhZ2UgeyBEID0gMjAgfSwKLSAgICAgICAgICAgICAgICBTaW5nbGVJbnQz
MiA9IDEwMCwKLSAgICAgICAgICAgICAgICBTaW5nbGVJbnQ2NCA9IDMyMTA5ODc2NTQzMjEsCi0g
ICAgICAgICAgICAgICAgU2luZ2xlTmVzdGVkRW51bSA9IFRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0
ZWRFbnVtLkZvbywKLSAgICAgICAgICAgICAgICBTaW5nbGVOZXN0ZWRNZXNzYWdlID0gbmV3IFRl
c3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlIHsgQmIgPSAzNSB9LAotICAgICAgICAgICAg
ICAgIFNpbmdsZVB1YmxpY0ltcG9ydE1lc3NhZ2UgPSBuZXcgUHVibGljSW1wb3J0TWVzc2FnZSB7
IEUgPSA1NCB9LAotICAgICAgICAgICAgICAgIFNpbmdsZVNmaXhlZDMyID0gLTEyMywKLSAgICAg
ICAgICAgICAgICBTaW5nbGVTZml4ZWQ2NCA9IC0xMjM0NTY3ODkwMTIzNCwKLSAgICAgICAgICAg
ICAgICBTaW5nbGVTaW50MzIgPSAtNDU2LAotICAgICAgICAgICAgICAgIFNpbmdsZVNpbnQ2NCA9
IC0xMjM0NTY3ODkwMTIzNSwKLSAgICAgICAgICAgICAgICBTaW5nbGVTdHJpbmcgPSAidGVzdFx0
d2l0aFx0dGFicyIsCi0gICAgICAgICAgICAgICAgU2luZ2xlVWludDMyID0gdWludC5NYXhWYWx1
ZSwKLSAgICAgICAgICAgICAgICBTaW5nbGVVaW50NjQgPSB1bG9uZy5NYXhWYWx1ZSwKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICB2YXIgYWN0dWFsVGV4dCA9IEpzb25Gb3JtYXR0ZXIuRGVm
YXVsdC5Gb3JtYXQobWVzc2FnZSk7Ci0KLSAgICAgICAgICAgIC8vIEZpZWxkcyBpbiBudW1lcmlj
IG9yZGVyCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRUZXh0ID0gInsgIiArCi0gICAgICAgICAg
ICAgICAgIidzaW5nbGVJbnQzMic6IDEwMCwgIiArCi0gICAgICAgICAgICAgICAgIidzaW5nbGVJ
bnQ2NCc6ICczMjEwOTg3NjU0MzIxJywgIiArCi0gICAgICAgICAgICAgICAgIidzaW5nbGVVaW50
MzInOiA0Mjk0OTY3Mjk1LCAiICsKLSAgICAgICAgICAgICAgICAiJ3NpbmdsZVVpbnQ2NCc6ICcx
ODQ0Njc0NDA3MzcwOTU1MTYxNScsICIgKwotICAgICAgICAgICAgICAgICInc2luZ2xlU2ludDMy
JzogLTQ1NiwgIiArCi0gICAgICAgICAgICAgICAgIidzaW5nbGVTaW50NjQnOiAnLTEyMzQ1Njc4
OTAxMjM1JywgIiArCi0gICAgICAgICAgICAgICAgIidzaW5nbGVGaXhlZDMyJzogMjMsICIgKwot
ICAgICAgICAgICAgICAgICInc2luZ2xlRml4ZWQ2NCc6ICcxMjM0NTY3ODkwMTIzJywgIiArCi0g
ICAgICAgICAgICAgICAgIidzaW5nbGVTZml4ZWQzMic6IC0xMjMsICIgKwotICAgICAgICAgICAg
ICAgICInc2luZ2xlU2ZpeGVkNjQnOiAnLTEyMzQ1Njc4OTAxMjM0JywgIiArCi0gICAgICAgICAg
ICAgICAgIidzaW5nbGVGbG9hdCc6IDEyLjI1LCAiICsKLSAgICAgICAgICAgICAgICAiJ3Npbmds
ZURvdWJsZSc6IDIzLjUsICIgKwotICAgICAgICAgICAgICAgICInc2luZ2xlQm9vbCc6IHRydWUs
ICIgKwotICAgICAgICAgICAgICAgICInc2luZ2xlU3RyaW5nJzogJ3Rlc3RcXHR3aXRoXFx0dGFi
cycsICIgKwotICAgICAgICAgICAgICAgICInc2luZ2xlQnl0ZXMnOiAnQVFJREJBPT0nLCAiICsK
LSAgICAgICAgICAgICAgICAiJ3NpbmdsZU5lc3RlZE1lc3NhZ2UnOiB7ICdiYic6IDM1IH0sICIg
KwotICAgICAgICAgICAgICAgICInc2luZ2xlRm9yZWlnbk1lc3NhZ2UnOiB7ICdjJzogMTAgfSwg
IiArCi0gICAgICAgICAgICAgICAgIidzaW5nbGVJbXBvcnRNZXNzYWdlJzogeyAnZCc6IDIwIH0s
ICIgKwotICAgICAgICAgICAgICAgICInc2luZ2xlTmVzdGVkRW51bSc6ICdGT08nLCAiICsKLSAg
ICAgICAgICAgICAgICAiJ3NpbmdsZUZvcmVpZ25FbnVtJzogJ0ZPUkVJR05fQkFSJywgIiArCi0g
ICAgICAgICAgICAgICAgIidzaW5nbGVJbXBvcnRFbnVtJzogJ0lNUE9SVF9CQVonLCAiICsKLSAg
ICAgICAgICAgICAgICAiJ3NpbmdsZVB1YmxpY0ltcG9ydE1lc3NhZ2UnOiB7ICdlJzogNTQgfSIg
KwotICAgICAgICAgICAgICAgICIgfSI7Ci0gICAgICAgICAgICBBc3NlcnRKc29uKGV4cGVjdGVk
VGV4dCwgYWN0dWFsVGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgUmVwZWF0ZWRGaWVsZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2Vy
dEpzb24oInsgJ3JlcGVhdGVkSW50MzInOiBbIDEsIDIsIDMsIDQsIDUgXSB9IiwKLSAgICAgICAg
ICAgICAgICBKc29uRm9ybWF0dGVyLkRlZmF1bHQuRm9ybWF0KG5ldyBUZXN0QWxsVHlwZXMgeyBS
ZXBlYXRlZEludDMyID0geyAxLCAyLCAzLCA0LCA1IH0gfSkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIE1hcEZpZWxkX1N0cmluZ1N0cmluZygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydEpzb24oInsgJ21hcFN0cmluZ1N0cmluZyc6IHsg
J3dpdGggc3BhY2VzJzogJ2JhcicsICdhJzogJ2InIH0gfSIsCi0gICAgICAgICAgICAgICAgSnNv
bkZvcm1hdHRlci5EZWZhdWx0LkZvcm1hdChuZXcgVGVzdE1hcCB7IE1hcFN0cmluZ1N0cmluZyA9
IHsgeyAid2l0aCBzcGFjZXMiLCAiYmFyIiB9LCB7ICJhIiwgImIiIH0gfSB9KSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgTWFwRmllbGRfSW50MzJJ
bnQzMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSBrZXlzIGFyZSBxdW90ZWQsIGJ1
dCB0aGUgdmFsdWVzIGFyZW4ndC4KLSAgICAgICAgICAgIEFzc2VydEpzb24oInsgJ21hcEludDMy
SW50MzInOiB7ICcwJzogMSwgJzInOiAzIH0gfSIsCi0gICAgICAgICAgICAgICAgSnNvbkZvcm1h
dHRlci5EZWZhdWx0LkZvcm1hdChuZXcgVGVzdE1hcCB7IE1hcEludDMySW50MzIgPSB7IHsgMCwg
MSB9LCB7IDIsIDMgfSB9IH0pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAg
ICBwdWJsaWMgdm9pZCBNYXBGaWVsZF9Cb29sQm9vbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIFRoZSBrZXlzIGFyZSBxdW90ZWQsIGJ1dCB0aGUgdmFsdWVzIGFyZW4ndC4KLSAgICAgICAg
ICAgIEFzc2VydEpzb24oInsgJ21hcEJvb2xCb29sJzogeyAnZmFsc2UnOiB0cnVlLCAndHJ1ZSc6
IGZhbHNlIH0gfSIsCi0gICAgICAgICAgICAgICAgSnNvbkZvcm1hdHRlci5EZWZhdWx0LkZvcm1h
dChuZXcgVGVzdE1hcCB7IE1hcEJvb2xCb29sID0geyB7IGZhbHNlLCB0cnVlIH0sIHsgdHJ1ZSwg
ZmFsc2UgfSB9IH0pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0Q2FzZSgxLjAsICIxIild
Ci0gICAgICAgIFtUZXN0Q2FzZShkb3VibGUuTmFOLCAiJ05hTiciKV0KLSAgICAgICAgW1Rlc3RD
YXNlKGRvdWJsZS5Qb3NpdGl2ZUluZmluaXR5LCAiJ0luZmluaXR5JyIpXQotICAgICAgICBbVGVz
dENhc2UoZG91YmxlLk5lZ2F0aXZlSW5maW5pdHksICInLUluZmluaXR5JyIpXQotICAgICAgICBw
dWJsaWMgdm9pZCBEb3VibGVSZXByZXNlbnRhdGlvbnMoZG91YmxlIHZhbHVlLCBzdHJpbmcgZXhw
ZWN0ZWRWYWx1ZVRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3
IFRlc3RBbGxUeXBlcyB7IFNpbmdsZURvdWJsZSA9IHZhbHVlIH07Ci0gICAgICAgICAgICBzdHJp
bmcgYWN0dWFsVGV4dCA9IEpzb25Gb3JtYXR0ZXIuRGVmYXVsdC5Gb3JtYXQobWVzc2FnZSk7Ci0g
ICAgICAgICAgICBzdHJpbmcgZXhwZWN0ZWRUZXh0ID0gInsgJ3NpbmdsZURvdWJsZSc6ICIgKyBl
eHBlY3RlZFZhbHVlVGV4dCArICIgfSI7Ci0gICAgICAgICAgICBBc3NlcnRKc29uKGV4cGVjdGVk
VGV4dCwgYWN0dWFsVGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgVW5rbm93bkVudW1WYWx1ZU51bWVyaWNfU2luZ2xlRmllbGQoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXMgeyBTaW5nbGVG
b3JlaWduRW51bSA9IChGb3JlaWduRW51bSkgMTAwIH07Ci0gICAgICAgICAgICBBc3NlcnRKc29u
KCJ7ICdzaW5nbGVGb3JlaWduRW51bSc6IDEwMCB9IiwgSnNvbkZvcm1hdHRlci5EZWZhdWx0LkZv
cm1hdChtZXNzYWdlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVi
bGljIHZvaWQgVW5rbm93bkVudW1WYWx1ZU51bWVyaWNfUmVwZWF0ZWRGaWVsZCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBlcyB7IFJlcGVhdGVk
Rm9yZWlnbkVudW0gPSB7IEZvcmVpZ25FbnVtLkZvcmVpZ25CYXosIChGb3JlaWduRW51bSkgMTAw
LCBGb3JlaWduRW51bS5Gb3JlaWduRm9vIH0gfTsKLSAgICAgICAgICAgIEFzc2VydEpzb24oInsg
J3JlcGVhdGVkRm9yZWlnbkVudW0nOiBbICdGT1JFSUdOX0JBWicsIDEwMCwgJ0ZPUkVJR05fRk9P
JyBdIH0iLCBKc29uRm9ybWF0dGVyLkRlZmF1bHQuRm9ybWF0KG1lc3NhZ2UpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBVbmtub3duRW51bVZhbHVl
TnVtZXJpY19NYXBGaWVsZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0g
bmV3IFRlc3RNYXAgeyBNYXBJbnQzMkVudW0gPSB7IHsgMSwgTWFwRW51bS5Gb28gfSwgeyAyLCAo
TWFwRW51bSkgMTAwIH0sIHsgMywgTWFwRW51bS5CYXIgfSB9IH07Ci0gICAgICAgICAgICBBc3Nl
cnRKc29uKCJ7ICdtYXBJbnQzMkVudW0nOiB7ICcxJzogJ01BUF9FTlVNX0ZPTycsICcyJzogMTAw
LCAnMyc6ICdNQVBfRU5VTV9CQVInIH0gfSIsIEpzb25Gb3JtYXR0ZXIuRGVmYXVsdC5Gb3JtYXQo
bWVzc2FnZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2
b2lkIFVua25vd25FbnVtVmFsdWVfUmVwZWF0ZWRGaWVsZF9BbGxFbnRyaWVzVW5rbm93bigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBlcyB7IFJl
cGVhdGVkRm9yZWlnbkVudW0gPSB7IChGb3JlaWduRW51bSkgMjAwLCAoRm9yZWlnbkVudW0pIDEw
MCB9IH07Ci0gICAgICAgICAgICBBc3NlcnRKc29uKCJ7ICdyZXBlYXRlZEZvcmVpZ25FbnVtJzog
WyAyMDAsIDEwMCBdIH0iLCBKc29uRm9ybWF0dGVyLkRlZmF1bHQuRm9ybWF0KG1lc3NhZ2UpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoImFcdTE3YjRi
IiwgImFcXHUxN2I0YiIpXSAvLyBFeHBsaWNpdAotICAgICAgICBbVGVzdENhc2UoImFcdTA2MDFi
IiwgImFcXHUwNjAxYiIpXSAvLyBSYW5nZWQKLSAgICAgICAgW1Rlc3RDYXNlKCJhXHUwNjA1YiIs
ICJhXHUwNjA1YiIpXSAvLyBQYXNzdGhyb3VnaCAobm90ZSBsYWNrIG9mIGRvdWJsZSBiYWNrc2xh
c2guLi4pCi0gICAgICAgIHB1YmxpYyB2b2lkIFNpbXBsZU5vbkFzY2lpKHN0cmluZyB0ZXh0LCBz
dHJpbmcgZW5jb2RlZCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcg
VGVzdEFsbFR5cGVzIHsgU2luZ2xlU3RyaW5nID0gdGV4dCB9OwotICAgICAgICAgICAgQXNzZXJ0
SnNvbigieyAnc2luZ2xlU3RyaW5nJzogJyIgKyBlbmNvZGVkICsgIicgfSIsIEpzb25Gb3JtYXR0
ZXIuRGVmYXVsdC5Gb3JtYXQobWVzc2FnZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3Rd
Ci0gICAgICAgIHB1YmxpYyB2b2lkIFN1cnJvZ2F0ZVBhaXJFc2NhcGluZygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBlcyB7IFNpbmdsZVN0cmlu
ZyA9ICJhXHVEODAxXHVEQzAxYiIgfTsKLSAgICAgICAgICAgIEFzc2VydEpzb24oInsgJ3Npbmds
ZVN0cmluZyc6ICdhXFx1ZDgwMVxcdWRjMDFiJyB9IiwgSnNvbkZvcm1hdHRlci5EZWZhdWx0LkZv
cm1hdChtZXNzYWdlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVi
bGljIHZvaWQgSW52YWxpZFN1cnJvZ2F0ZVBhaXJzRmFpbCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIE5vdGU6IGRvbid0IHVzZSBUZXN0Q2FzZSBmb3IgdGhlc2UsIGFzIHRoZSBzdHJpbmdz
IGNhbid0IGJlIHJlbGlhYmx5IHJlcHJlc2VudGVkIAotICAgICAgICAgICAgLy8gU2VlIGh0dHA6
Ly9jb2RlYmxvZy5qb25za2VldC51ay8yMDE0LzExLzA3L3doZW4taXMtYS1zdHJpbmctbm90LWEt
c3RyaW5nLwotCi0gICAgICAgICAgICAvLyBMb25lIGxvdyBzdXJyb2dhdGUKLSAgICAgICAgICAg
IHZhciBtZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBlcyB7IFNpbmdsZVN0cmluZyA9ICJhXHVEQzAx
YiIgfTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnRFeGNlcHRpb24+KCgpID0+
IEpzb25Gb3JtYXR0ZXIuRGVmYXVsdC5Gb3JtYXQobWVzc2FnZSkpOwotCi0gICAgICAgICAgICAv
LyBMb25lIGhpZ2ggc3Vycm9nYXRlCi0gICAgICAgICAgICBtZXNzYWdlID0gbmV3IFRlc3RBbGxU
eXBlcyB7IFNpbmdsZVN0cmluZyA9ICJhXHVEODAxYiIgfTsKLSAgICAgICAgICAgIEFzc2VydC5U
aHJvd3M8QXJndW1lbnRFeGNlcHRpb24+KCgpID0+IEpzb25Gb3JtYXR0ZXIuRGVmYXVsdC5Gb3Jt
YXQobWVzc2FnZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0
Q2FzZSgiZm9vX2JhciIsICJmb29CYXIiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJiYW5hbmFCYW5h
bmEiLCAiYmFuYW5hQmFuYW5hIildCi0gICAgICAgIFtUZXN0Q2FzZSgiQkFOQU5BQmFuYW5hIiwg
ImJhbmFuYUJhbmFuYSIpXQotICAgICAgICBwdWJsaWMgdm9pZCBUb0NhbWVsQ2FzZShzdHJpbmcg
b3JpZ2luYWwsIHN0cmluZyBleHBlY3RlZCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKGV4cGVjdGVkLCBKc29uRm9ybWF0dGVyLlRvQ2FtZWxDYXNlKG9yaWdpbmFsKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RDYXNlKG51bGwsICJ7
IH0iKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJ4IiwgInsgJ2Zvb1N0cmluZyc6ICd4JyB9IildCi0g
ICAgICAgIFtUZXN0Q2FzZSgiIiwgInsgJ2Zvb1N0cmluZyc6ICcnIH0iKV0KLSAgICAgICAgcHVi
bGljIHZvaWQgT25lb2Yoc3RyaW5nIGZvb1N0cmluZ1ZhbHVlLCBzdHJpbmcgZXhwZWN0ZWRKc29u
KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyBUZXN0T25lb2YoKTsK
LSAgICAgICAgICAgIGlmIChmb29TdHJpbmdWYWx1ZSAhPSBudWxsKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1lc3NhZ2UuRm9vU3RyaW5nID0gZm9vU3RyaW5nVmFsdWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBnZXQgdGhlIHNhbWUgcmVzdWx0
IGJvdGggd2l0aCBhbmQgd2l0aG91dCAiZm9ybWF0IGRlZmF1bHQgdmFsdWVzIi4KLSAgICAgICAg
ICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSnNvbkZvcm1hdHRlcihuZXcgSnNvbkZvcm1hdHRlci5T
ZXR0aW5ncyhmYWxzZSkpOwotICAgICAgICAgICAgQXNzZXJ0SnNvbihleHBlY3RlZEpzb24sIGZv
cm1hdHRlci5Gb3JtYXQobWVzc2FnZSkpOwotICAgICAgICAgICAgZm9ybWF0dGVyID0gbmV3IEpz
b25Gb3JtYXR0ZXIobmV3IEpzb25Gb3JtYXR0ZXIuU2V0dGluZ3ModHJ1ZSkpOwotICAgICAgICAg
ICAgQXNzZXJ0SnNvbihleHBlY3RlZEpzb24sIGZvcm1hdHRlci5Gb3JtYXQobWVzc2FnZSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFdyYXBwZXJG
b3JtYXR0aW5nX1NpbmdsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEp1c3QgYSBmZXcg
ZXhhbXBsZXMsIGhhbmRsaW5nIGJvdGggY2xhc3NlcyBhbmQgdmFsdWUgdHlwZXMsIGFuZAotICAg
ICAgICAgICAgLy8gZGVmYXVsdCB2cyBub24tZGVmYXVsdCB2YWx1ZXMKLSAgICAgICAgICAgIHZh
ciBtZXNzYWdlID0gbmV3IFRlc3RXZWxsS25vd25UeXBlcwotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEludDY0RmllbGQgPSAxMCwKLSAgICAgICAgICAgICAgICBJbnQzMkZpZWxkID0g
MCwKLSAgICAgICAgICAgICAgICBCeXRlc0ZpZWxkID0gQnl0ZVN0cmluZy5Gcm9tQmFzZTY0KCJB
QkNEIiksCi0gICAgICAgICAgICAgICAgU3RyaW5nRmllbGQgPSAiIgotICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIHZhciBleHBlY3RlZEpzb24gPSAieyAnaW50NjRGaWVsZCc6ICcxMCcsICdp
bnQzMkZpZWxkJzogMCwgJ3N0cmluZ0ZpZWxkJzogJycsICdieXRlc0ZpZWxkJzogJ0FCQ0QnIH0i
OwotICAgICAgICAgICAgQXNzZXJ0SnNvbihleHBlY3RlZEpzb24sIEpzb25Gb3JtYXR0ZXIuRGVm
YXVsdC5Gb3JtYXQobWVzc2FnZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAg
ICAgIHB1YmxpYyB2b2lkIFdyYXBwZXJGb3JtYXR0aW5nX01lc3NhZ2UoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIlwiXCIiLCBKc29uRm9ybWF0dGVyLkRlZmF1bHQu
Rm9ybWF0KG5ldyBTdHJpbmdWYWx1ZSgpKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
IjAiLCBKc29uRm9ybWF0dGVyLkRlZmF1bHQuRm9ybWF0KG5ldyBJbnQzMlZhbHVlKCkpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBXcmFwcGVyRm9y
bWF0dGluZ19JbmNsdWRlTnVsbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSBhY3R1
YWwgSlNPTiBoZXJlIGlzIHZlcnkgbGFyZ2UgYmVjYXVzZSB0aGVyZSBhcmUgbG90cyBvZiBmaWVs
ZHMuIEp1c3QgdGVzdCBhIGNvdXBsZSBvZiB0aGVtLgotICAgICAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBuZXcgVGVzdFdlbGxLbm93blR5cGVzIHsgSW50MzJGaWVsZCA9IDEwIH07Ci0gICAgICAgICAg
ICB2YXIgZm9ybWF0dGVyID0gbmV3IEpzb25Gb3JtYXR0ZXIobmV3IEpzb25Gb3JtYXR0ZXIuU2V0
dGluZ3ModHJ1ZSkpOwotICAgICAgICAgICAgdmFyIGFjdHVhbEpzb24gPSBmb3JtYXR0ZXIuRm9y
bWF0KG1lc3NhZ2UpOwotICAgICAgICAgICAgQXNzZXJ0LklzVHJ1ZShhY3R1YWxKc29uLkNvbnRh
aW5zKCJcImludDY0RmllbGRcIjogbnVsbCIpKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc0ZhbHNl
KGFjdHVhbEpzb24uQ29udGFpbnMoIlwiaW50MzJGaWVsZFwiOiBudWxsIikpOwotICAgICAgICB9
Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIE91dHB1dElzSW5OdW1lcmlj
RmllbGRPcmRlcl9Ob0RlZmF1bHRzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGZvcm1h
dHRlciA9IG5ldyBKc29uRm9ybWF0dGVyKG5ldyBKc29uRm9ybWF0dGVyLlNldHRpbmdzKGZhbHNl
KSk7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyBUZXN0SnNvbkZpZWxkT3JkZXJpbmcg
eyBQbGFpblN0cmluZyA9ICJwMSIsIFBsYWluSW50MzIgPSAyIH07Ci0gICAgICAgICAgICBBc3Nl
cnRKc29uKCJ7ICdwbGFpblN0cmluZyc6ICdwMScsICdwbGFpbkludDMyJzogMiB9IiwgZm9ybWF0
dGVyLkZvcm1hdChtZXNzYWdlKSk7Ci0gICAgICAgICAgICBtZXNzYWdlID0gbmV3IFRlc3RKc29u
RmllbGRPcmRlcmluZyB7IE8xSW50MzIgPSA1LCBPMlN0cmluZyA9ICJvMiIsIFBsYWluSW50MzIg
PSAxMCwgUGxhaW5TdHJpbmcgPSAicGxhaW4iIH07Ci0gICAgICAgICAgICBBc3NlcnRKc29uKCJ7
ICdwbGFpblN0cmluZyc6ICdwbGFpbicsICdvMlN0cmluZyc6ICdvMicsICdwbGFpbkludDMyJzog
MTAsICdvMUludDMyJzogNSB9IiwgZm9ybWF0dGVyLkZvcm1hdChtZXNzYWdlKSk7Ci0gICAgICAg
ICAgICBtZXNzYWdlID0gbmV3IFRlc3RKc29uRmllbGRPcmRlcmluZyB7IE8xU3RyaW5nID0gIiIs
IE8ySW50MzIgPSAwLCBQbGFpbkludDMyID0gMTAsIFBsYWluU3RyaW5nID0gInBsYWluIiB9Owot
ICAgICAgICAgICAgQXNzZXJ0SnNvbigieyAncGxhaW5TdHJpbmcnOiAncGxhaW4nLCAnbzFTdHJp
bmcnOiAnJywgJ3BsYWluSW50MzInOiAxMCwgJ28ySW50MzInOiAwIH0iLCBmb3JtYXR0ZXIuRm9y
bWF0KG1lc3NhZ2UpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJs
aWMgdm9pZCBPdXRwdXRJc0luTnVtZXJpY0ZpZWxkT3JkZXJfV2l0aERlZmF1bHRzKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBKc29uRm9ybWF0dGVyKG5ldyBK
c29uRm9ybWF0dGVyLlNldHRpbmdzKHRydWUpKTsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0g
bmV3IFRlc3RKc29uRmllbGRPcmRlcmluZygpOwotICAgICAgICAgICAgQXNzZXJ0SnNvbigieyAn
cGxhaW5TdHJpbmcnOiAnJywgJ3BsYWluSW50MzInOiAwIH0iLCBmb3JtYXR0ZXIuRm9ybWF0KG1l
c3NhZ2UpKTsKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBuZXcgVGVzdEpzb25GaWVsZE9yZGVyaW5n
IHsgTzFJbnQzMiA9IDUsIE8yU3RyaW5nID0gIm8yIiwgUGxhaW5JbnQzMiA9IDEwLCBQbGFpblN0
cmluZyA9ICJwbGFpbiIgfTsKLSAgICAgICAgICAgIEFzc2VydEpzb24oInsgJ3BsYWluU3RyaW5n
JzogJ3BsYWluJywgJ28yU3RyaW5nJzogJ28yJywgJ3BsYWluSW50MzInOiAxMCwgJ28xSW50MzIn
OiA1IH0iLCBmb3JtYXR0ZXIuRm9ybWF0KG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIG1lc3NhZ2Ug
PSBuZXcgVGVzdEpzb25GaWVsZE9yZGVyaW5nIHsgTzFTdHJpbmcgPSAiIiwgTzJJbnQzMiA9IDAs
IFBsYWluSW50MzIgPSAxMCwgUGxhaW5TdHJpbmcgPSAicGxhaW4iIH07Ci0gICAgICAgICAgICBB
c3NlcnRKc29uKCJ7ICdwbGFpblN0cmluZyc6ICdwbGFpbicsICdvMVN0cmluZyc6ICcnLCAncGxh
aW5JbnQzMic6IDEwLCAnbzJJbnQzMic6IDAgfSIsIGZvcm1hdHRlci5Gb3JtYXQobWVzc2FnZSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSgiMTk3MC0w
MS0wMVQwMDowMDowMFoiLCAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxOTcwLTAxLTAxVDAwOjAw
OjAwLjAwMDAwMDAwMVoiLCAxKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxOTcwLTAxLTAxVDAwOjAw
OjAwLjAwMDAwMDAxMFoiLCAxMCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMTk3MC0wMS0wMVQwMDow
MDowMC4wMDAwMDAxMDBaIiwgMTAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxOTcwLTAxLTAxVDAw
OjAwOjAwLjAwMDAwMVoiLCAxMDAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxOTcwLTAxLTAxVDAw
OjAwOjAwLjAwMDAxMFoiLCAxMDAwMCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMTk3MC0wMS0wMVQw
MDowMDowMC4wMDAxMDBaIiwgMTAwMDAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxOTcwLTAxLTAx
VDAwOjAwOjAwLjAwMVoiLCAxMDAwMDAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxOTcwLTAxLTAx
VDAwOjAwOjAwLjAxMFoiLCAxMDAwMDAwMCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMTk3MC0wMS0w
MVQwMDowMDowMC4xMDBaIiwgMTAwMDAwMDAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxOTcwLTAx
LTAxVDAwOjAwOjAwLjEyMFoiLCAxMjAwMDAwMDApXQotICAgICAgICBbVGVzdENhc2UoIjE5NzAt
MDEtMDFUMDA6MDA6MDAuMTIzWiIsIDEyMzAwMDAwMCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMTk3
MC0wMS0wMVQwMDowMDowMC4xMjM0MDBaIiwgMTIzNDAwMDAwKV0KLSAgICAgICAgW1Rlc3RDYXNl
KCIxOTcwLTAxLTAxVDAwOjAwOjAwLjEyMzQ1MFoiLCAxMjM0NTAwMDApXQotICAgICAgICBbVGVz
dENhc2UoIjE5NzAtMDEtMDFUMDA6MDA6MDAuMTIzNDU2WiIsIDEyMzQ1NjAwMCldCi0gICAgICAg
IFtUZXN0Q2FzZSgiMTk3MC0wMS0wMVQwMDowMDowMC4xMjM0NTY3MDBaIiwgMTIzNDU2NzAwKV0K
LSAgICAgICAgW1Rlc3RDYXNlKCIxOTcwLTAxLTAxVDAwOjAwOjAwLjEyMzQ1Njc4MFoiLCAxMjM0
NTY3ODApXQotICAgICAgICBbVGVzdENhc2UoIjE5NzAtMDEtMDFUMDA6MDA6MDAuMTIzNDU2Nzg5
WiIsIDEyMzQ1Njc4OSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFRpbWVzdGFtcFN0YW5kYWxvbmUo
c3RyaW5nIGV4cGVjdGVkLCBpbnQgbmFub3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2Vy
dC5BcmVFcXVhbChXcmFwSW5RdW90ZXMoZXhwZWN0ZWQpLCBuZXcgVGltZXN0YW1wIHsgTmFub3Mg
PSBuYW5vcyB9LlRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAg
ICAgIHB1YmxpYyB2b2lkIFRpbWVzdGFtcFN0YW5kYWxvbmVfRnJvbURhdGVUaW1lKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gT25lIGJlZm9yZSBhbmQgb25lIGFmdGVyIHRoZSBVbml4IGVw
b2NoLCBtb3JlIGVhc2lseSByZXByZXNlbnRlZCB2aWEgRGF0ZVRpbWUuCi0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwoIlwiMTY3My0wNi0xOVQxMjozNDo1NlpcIiIsCi0gICAgICAgICAgICAg
ICAgbmV3IERhdGVUaW1lKDE2NzMsIDYsIDE5LCAxMiwgMzQsIDU2LCBEYXRlVGltZUtpbmQuVXRj
KS5Ub1RpbWVzdGFtcCgpLlRvU3RyaW5nKCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFs
KCJcIjIwMTUtMDctMzFUMTA6Mjk6MzRaXCIiLAotICAgICAgICAgICAgICAgIG5ldyBEYXRlVGlt
ZSgyMDE1LCA3LCAzMSwgMTAsIDI5LCAzNCwgRGF0ZVRpbWVLaW5kLlV0YykuVG9UaW1lc3RhbXAo
KS5Ub1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVz
dENhc2UoLTEsIC0xKV0gLy8gV291bGQgYmUgdmFsaWQgYXMgZHVyYXRpb24KLSAgICAgICAgW1Rl
c3RDYXNlKDEsIFRpbWVzdGFtcC5NYXhOYW5vcyArIDEpXQotICAgICAgICBbVGVzdENhc2UoVGlt
ZXN0YW1wLlVuaXhTZWNvbmRzQXRCY2xNYXhWYWx1ZSArIDEsIDApXQotICAgICAgICBbVGVzdENh
c2UoVGltZXN0YW1wLlVuaXhTZWNvbmRzQXRCY2xNaW5WYWx1ZSAtIDEsIDApXQotICAgICAgICBw
dWJsaWMgdm9pZCBUaW1lc3RhbXBTdGFuZGFsb25lX05vbk5vcm1hbGl6ZWQobG9uZyBzZWNvbmRz
LCBpbnQgbmFub3NlY29uZHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0aW1lc3RhbXAg
PSBuZXcgVGltZXN0YW1wIHsgU2Vjb25kcyA9IHNlY29uZHMsIE5hbm9zID0gbmFub3NlY29uZHMg
fTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbj4o
KCkgPT4gSnNvbkZvcm1hdHRlci5EZWZhdWx0LkZvcm1hdCh0aW1lc3RhbXApKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBUaW1lc3RhbXBGaWVsZCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RXZWxsS25vd25U
eXBlcyB7IFRpbWVzdGFtcEZpZWxkID0gbmV3IFRpbWVzdGFtcCgpIH07Ci0gICAgICAgICAgICBB
c3NlcnRKc29uKCJ7ICd0aW1lc3RhbXBGaWVsZCc6ICcxOTcwLTAxLTAxVDAwOjAwOjAwWicgfSIs
IEpzb25Gb3JtYXR0ZXIuRGVmYXVsdC5Gb3JtYXQobWVzc2FnZSkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSgwLCAwLCAiMHMiKV0KLSAgICAgICAgW1Rl
c3RDYXNlKDEsIDAsICIxcyIpXQotICAgICAgICBbVGVzdENhc2UoLTEsIDAsICItMXMiKV0KLSAg
ICAgICAgW1Rlc3RDYXNlKDAsIDEsICIwLjAwMDAwMDAwMXMiKV0KLSAgICAgICAgW1Rlc3RDYXNl
KDAsIDEwLCAiMC4wMDAwMDAwMTBzIildCi0gICAgICAgIFtUZXN0Q2FzZSgwLCAxMDAsICIwLjAw
MDAwMDEwMHMiKV0KLSAgICAgICAgW1Rlc3RDYXNlKDAsIDEwMDAsICIwLjAwMDAwMXMiKV0KLSAg
ICAgICAgW1Rlc3RDYXNlKDAsIDEwMDAwLCAiMC4wMDAwMTBzIildCi0gICAgICAgIFtUZXN0Q2Fz
ZSgwLCAxMDAwMDAsICIwLjAwMDEwMHMiKV0KLSAgICAgICAgW1Rlc3RDYXNlKDAsIDEwMDAwMDAs
ICIwLjAwMXMiKV0KLSAgICAgICAgW1Rlc3RDYXNlKDAsIDEwMDAwMDAwLCAiMC4wMTBzIildCi0g
ICAgICAgIFtUZXN0Q2FzZSgwLCAxMDAwMDAwMDAsICIwLjEwMHMiKV0KLSAgICAgICAgW1Rlc3RD
YXNlKDAsIDEyMDAwMDAwMCwgIjAuMTIwcyIpXQotICAgICAgICBbVGVzdENhc2UoMCwgMTIzMDAw
MDAwLCAiMC4xMjNzIildCi0gICAgICAgIFtUZXN0Q2FzZSgwLCAxMjM0MDAwMDAsICIwLjEyMzQw
MHMiKV0KLSAgICAgICAgW1Rlc3RDYXNlKDAsIDEyMzQ1MDAwMCwgIjAuMTIzNDUwcyIpXQotICAg
ICAgICBbVGVzdENhc2UoMCwgMTIzNDU2MDAwLCAiMC4xMjM0NTZzIildCi0gICAgICAgIFtUZXN0
Q2FzZSgwLCAxMjM0NTY3MDAsICIwLjEyMzQ1NjcwMHMiKV0KLSAgICAgICAgW1Rlc3RDYXNlKDAs
IDEyMzQ1Njc4MCwgIjAuMTIzNDU2NzgwcyIpXQotICAgICAgICBbVGVzdENhc2UoMCwgMTIzNDU2
Nzg5LCAiMC4xMjM0NTY3ODlzIildCi0gICAgICAgIFtUZXN0Q2FzZSgwLCAtMTAwMDAwMDAwLCAi
LTAuMTAwcyIpXQotICAgICAgICBbVGVzdENhc2UoMSwgMTAwMDAwMDAwLCAiMS4xMDBzIildCi0g
ICAgICAgIFtUZXN0Q2FzZSgtMSwgLTEwMDAwMDAwMCwgIi0xLjEwMHMiKV0KLSAgICAgICAgcHVi
bGljIHZvaWQgRHVyYXRpb25TdGFuZGFsb25lKGxvbmcgc2Vjb25kcywgaW50IG5hbm9zZWNvbmRz
LCBzdHJpbmcgZXhwZWN0ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBqc29uID0gSnNv
bkZvcm1hdHRlci5EZWZhdWx0LkZvcm1hdChuZXcgRHVyYXRpb24geyBTZWNvbmRzID0gc2Vjb25k
cywgTmFub3MgPSBuYW5vc2Vjb25kcyB9KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChX
cmFwSW5RdW90ZXMoZXhwZWN0ZWQpLCBqc29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0
XQotICAgICAgICBbVGVzdENhc2UoMSwgMjEyMzQ1Njc4OSldCi0gICAgICAgIFtUZXN0Q2FzZSgx
LCAtMTAwMDAwMDAwKV0KLSAgICAgICAgcHVibGljIHZvaWQgRHVyYXRpb25TdGFuZGFsb25lX05v
bk5vcm1hbGl6ZWQobG9uZyBzZWNvbmRzLCBpbnQgbmFub3NlY29uZHMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHZhciBkdXJhdGlvbiA9IG5ldyBEdXJhdGlvbiB7IFNlY29uZHMgPSBzZWNvbmRz
LCBOYW5vcyA9IG5hbm9zZWNvbmRzIH07Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFs
aWRPcGVyYXRpb25FeGNlcHRpb24+KCgpID0+IEpzb25Gb3JtYXR0ZXIuRGVmYXVsdC5Gb3JtYXQo
ZHVyYXRpb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMg
dm9pZCBEdXJhdGlvbkZpZWxkKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBuZXcgVGVzdFdlbGxLbm93blR5cGVzIHsgRHVyYXRpb25GaWVsZCA9IG5ldyBEdXJhdGlvbigp
IH07Ci0gICAgICAgICAgICBBc3NlcnRKc29uKCJ7ICdkdXJhdGlvbkZpZWxkJzogJzBzJyB9Iiwg
SnNvbkZvcm1hdHRlci5EZWZhdWx0LkZvcm1hdChtZXNzYWdlKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgU3RydWN0U2FtcGxlKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgU3RydWN0Ci0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgRmllbGRzID0KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHsgImEiLCBWYWx1ZS5Gb3JOdWxsKCkgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAi
YiIsIFZhbHVlLkZvckJvb2woZmFsc2UpIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgImMiLCBW
YWx1ZS5Gb3JOdW1iZXIoMTAuNSkgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAiZCIsIFZhbHVl
LkZvclN0cmluZygidGV4dCIpIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgImUiLCBWYWx1ZS5G
b3JMaXN0KFZhbHVlLkZvclN0cmluZygidDEiKSwgVmFsdWUuRm9yTnVtYmVyKDUpKSB9LAotICAg
ICAgICAgICAgICAgICAgICB7ICJmIiwgVmFsdWUuRm9yU3RydWN0KG5ldyBTdHJ1Y3QgeyBGaWVs
ZHMgPSB7IHsgIm5lc3RlZCIsIFZhbHVlLkZvclN0cmluZygidmFsdWUiKSB9IH0gfSkgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBBc3NlcnRKc29uKCJ7
ICdhJzogbnVsbCwgJ2InOiBmYWxzZSwgJ2MnOiAxMC41LCAnZCc6ICd0ZXh0JywgJ2UnOiBbICd0
MScsIDUgXSwgJ2YnOiB7ICduZXN0ZWQnOiAndmFsdWUnIH0gfSIsIG1lc3NhZ2UuVG9TdHJpbmco
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RDYXNlKCJmb29f
X2JhciIpXQotICAgICAgICBbVGVzdENhc2UoImZvb18zX2FyIildCi0gICAgICAgIFtUZXN0Q2Fz
ZSgiZm9vQmFyIildCi0gICAgICAgIHB1YmxpYyB2b2lkIEZpZWxkTWFza0ludmFsaWQoc3RyaW5n
IGlucHV0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWFzayA9IG5ldyBGaWVsZE1hc2sg
eyBQYXRocyA9IHsgaW5wdXQgfSB9OwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlk
T3BlcmF0aW9uRXhjZXB0aW9uPigoKSA9PiBKc29uRm9ybWF0dGVyLkRlZmF1bHQuRm9ybWF0KG1h
c2spKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBG
aWVsZE1hc2tTdGFuZGFsb25lKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGZpZWxkTWFz
ayA9IG5ldyBGaWVsZE1hc2sgeyBQYXRocyA9IHsgIiIsICJzaW5nbGUiLCAid2l0aF91bmRlcnNj
b3JlIiwgIm5lc3RlZC5maWVsZC5uYW1lIiwgIm5lc3RlZC4uZG91YmxlX2RvdCIgfSB9OwotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJcIixzaW5nbGUsd2l0aFVuZGVyc2NvcmUsbmVzdGVk
LmZpZWxkLm5hbWUsbmVzdGVkLi5kb3VibGVEb3RcIiIsIGZpZWxkTWFzay5Ub1N0cmluZygpKTsK
LQotICAgICAgICAgICAgLy8gSW52YWxpZCwgYnV0IHdlIHNob3VsZG4ndCBjcmVhdGUgYnJva2Vu
IEpTT04uLi4KLSAgICAgICAgICAgIGZpZWxkTWFzayA9IG5ldyBGaWVsZE1hc2sgeyBQYXRocyA9
IHsgInhcXHkiIH0gfTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChAIiIieFxceSIiIiwg
ZmllbGRNYXNrLlRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAg
ICAgIHB1YmxpYyB2b2lkIEZpZWxkTWFza0ZpZWxkKCkKLSAgICAgICAgewotICAgICAgICAgICAg
dmFyIG1lc3NhZ2UgPSBuZXcgVGVzdFdlbGxLbm93blR5cGVzIHsgRmllbGRNYXNrRmllbGQgPSBu
ZXcgRmllbGRNYXNrIHsgUGF0aHMgPSB7ICJ1c2VyLmRpc3BsYXlfbmFtZSIsICJwaG90byIgfSB9
IH07Ci0gICAgICAgICAgICBBc3NlcnRKc29uKCJ7ICdmaWVsZE1hc2tGaWVsZCc6ICd1c2VyLmRp
c3BsYXlOYW1lLHBob3RvJyB9IiwgSnNvbkZvcm1hdHRlci5EZWZhdWx0LkZvcm1hdChtZXNzYWdl
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTb3VyY2VDb250ZXh0IGlzIGFuIGV4YW1wbGUg
b2YgYSB3ZWxsLWtub3duIHR5cGUgd2l0aCBubyBzcGVjaWFsIEpTT04gaGFuZGxpbmcKLSAgICAg
ICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNvdXJjZUNvbnRleHRTdGFuZGFsb25lKCkK
LSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgU291cmNlQ29udGV4dCB7
IEZpbGVOYW1lID0gImZvby5wcm90byIgfTsKLSAgICAgICAgICAgIEFzc2VydEpzb24oInsgJ2Zp
bGVOYW1lJzogJ2Zvby5wcm90bycgfSIsIEpzb25Gb3JtYXR0ZXIuRGVmYXVsdC5Gb3JtYXQobWVz
c2FnZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lk
IEFueVdlbGxLbm93blR5cGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZm9ybWF0dGVy
ID0gbmV3IEpzb25Gb3JtYXR0ZXIobmV3IEpzb25Gb3JtYXR0ZXIuU2V0dGluZ3MoZmFsc2UsIFR5
cGVSZWdpc3RyeS5Gcm9tTWVzc2FnZXMoVGltZXN0YW1wLkRlc2NyaXB0b3IpKSk7Ci0gICAgICAg
ICAgICB2YXIgdGltZXN0YW1wID0gbmV3IERhdGVUaW1lKDE2NzMsIDYsIDE5LCAxMiwgMzQsIDU2
LCBEYXRlVGltZUtpbmQuVXRjKS5Ub1RpbWVzdGFtcCgpOwotICAgICAgICAgICAgdmFyIGFueSA9
IEFueS5QYWNrKHRpbWVzdGFtcCk7Ci0gICAgICAgICAgICBBc3NlcnRKc29uKCJ7ICdAdHlwZSc6
ICd0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAnLCAndmFsdWUn
OiAnMTY3My0wNi0xOVQxMjozNDo1NlonIH0iLCBmb3JtYXR0ZXIuRm9ybWF0KGFueSkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEFueU1lc3NhZ2VU
eXBlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBKc29uRm9y
bWF0dGVyKG5ldyBKc29uRm9ybWF0dGVyLlNldHRpbmdzKGZhbHNlLCBUeXBlUmVnaXN0cnkuRnJv
bU1lc3NhZ2VzKFRlc3RBbGxUeXBlcy5EZXNjcmlwdG9yKSkpOwotICAgICAgICAgICAgdmFyIG1l
c3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzIHsgU2luZ2xlSW50MzIgPSAxMCwgU2luZ2xlTmVzdGVk
TWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkTWVzc2FnZSB7IEJiID0gMjAg
fSB9OwotICAgICAgICAgICAgdmFyIGFueSA9IEFueS5QYWNrKG1lc3NhZ2UpOwotICAgICAgICAg
ICAgQXNzZXJ0SnNvbigieyAnQHR5cGUnOiAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2J1Zl91
bml0dGVzdC5UZXN0QWxsVHlwZXMnLCAnc2luZ2xlSW50MzInOiAxMCwgJ3NpbmdsZU5lc3RlZE1l
c3NhZ2UnOiB7ICdiYic6IDIwIH0gfSIsIGZvcm1hdHRlci5Gb3JtYXQoYW55KSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgQW55TWVzc2FnZVR5cGVf
Q3VzdG9tUHJlZml4KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5l
dyBKc29uRm9ybWF0dGVyKG5ldyBKc29uRm9ybWF0dGVyLlNldHRpbmdzKGZhbHNlLCBUeXBlUmVn
aXN0cnkuRnJvbU1lc3NhZ2VzKFRlc3RBbGxUeXBlcy5EZXNjcmlwdG9yKSkpOwotICAgICAgICAg
ICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzIHsgU2luZ2xlSW50MzIgPSAxMCB9Owot
ICAgICAgICAgICAgdmFyIGFueSA9IEFueS5QYWNrKG1lc3NhZ2UsICJmb28uYmFyL2JheiIpOwot
ICAgICAgICAgICAgQXNzZXJ0SnNvbigieyAnQHR5cGUnOiAnZm9vLmJhci9iYXovcHJvdG9idWZf
dW5pdHRlc3QuVGVzdEFsbFR5cGVzJywgJ3NpbmdsZUludDMyJzogMTAgfSIsIGZvcm1hdHRlci5G
b3JtYXQoYW55KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGlj
IHZvaWQgQW55TmVzdGVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHJlZ2lzdHJ5ID0g
VHlwZVJlZ2lzdHJ5LkZyb21NZXNzYWdlcyhUZXN0V2VsbEtub3duVHlwZXMuRGVzY3JpcHRvciwg
VGVzdEFsbFR5cGVzLkRlc2NyaXB0b3IpOwotICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5l
dyBKc29uRm9ybWF0dGVyKG5ldyBKc29uRm9ybWF0dGVyLlNldHRpbmdzKGZhbHNlLCByZWdpc3Ry
eSkpOwotCi0gICAgICAgICAgICAvLyBOZXN0IGFuIEFueSBhcyB0aGUgdmFsdWUgb2YgYW4gQW55
LgotICAgICAgICAgICAgdmFyIGRvdWJsZU5lc3RlZE1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVz
IHsgU2luZ2xlSW50MzIgPSAyMCB9OwotICAgICAgICAgICAgdmFyIG5lc3RlZE1lc3NhZ2UgPSBB
bnkuUGFjayhkb3VibGVOZXN0ZWRNZXNzYWdlKTsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0g
bmV3IFRlc3RXZWxsS25vd25UeXBlcyB7IEFueUZpZWxkID0gQW55LlBhY2sobmVzdGVkTWVzc2Fn
ZSkgfTsKLSAgICAgICAgICAgIEFzc2VydEpzb24oInsgJ2FueUZpZWxkJzogeyAnQHR5cGUnOiAn
dHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuQW55JywgJ3ZhbHVlJzogeyAnQHR5
cGUnOiAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMn
LCAnc2luZ2xlSW50MzInOiAyMCB9IH0gfSIsCi0gICAgICAgICAgICAgICAgZm9ybWF0dGVyLkZv
cm1hdChtZXNzYWdlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVi
bGljIHZvaWQgQW55VW5rbm93blR5cGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUg
ZGVmYXVsdCB0eXBlIHJlZ2lzdHJ5IGRvZXNuJ3QgaGF2ZSBhbnkgdHlwZXMgaW4gaXQuCi0gICAg
ICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXMoKTsKLSAgICAgICAgICAgIHZh
ciBhbnkgPSBBbnkuUGFjayhtZXNzYWdlKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52
YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbj4oKCkgPT4gSnNvbkZvcm1hdHRlci5EZWZhdWx0LkZvcm1h
dChhbnkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IENoZWNrcyB0aGF0IHRoZSBhY3R1YWwgSlNPTiBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwZWN0ZWQg
SlNPTiAtIGJ1dCBhZnRlciByZXBsYWNpbmcKLSAgICAgICAgLy8vIGFsbCBhcG9zdHJvcGhlcyBp
biB0aGUgZXhwZWN0ZWQgSlNPTiB3aXRoIGRvdWJsZSBxdW90ZXMuIFRoaXMgYmFzaWNhbGx5IG1h
a2VzIHRoZSB0ZXN0cyBlYXNpZXIKLSAgICAgICAgLy8vIHRvIHJlYWQuCi0gICAgICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgQXNzZXJ0SnNvbihzdHJpbmcg
ZXhwZWN0ZWRKc29uV2l0aEFwb3N0cm9waGVzLCBzdHJpbmcgYWN0dWFsSnNvbikKLSAgICAgICAg
ewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkSnNvbiA9IGV4cGVjdGVkSnNvbldpdGhBcG9zdHJv
cGhlcy5SZXBsYWNlKCInIiwgIlwiIik7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhw
ZWN0ZWRKc29uLCBhY3R1YWxKc29uKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Kc29uUGFyc2VyVGVzdC5jcyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJw
L3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9Kc29uUGFyc2VyVGVzdC5jcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzNhZDg1MWI4YWFjMWVkM2E1NTFlZDYyNTY2Zjc4ZjY1ZjBjZWQw
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvSnNvblBhcnNlclRlc3QuY3MKKysrIC9kZXYvbnVsbApA
QCAtMSw5MzYgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNl
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcg
R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb247Ci11c2luZyBHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3RvczsKLXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlczsKLXVzaW5nIE5Vbml0
LkZyYW1ld29yazsKLXVzaW5nIFN5c3RlbTsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zgot
ewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gVW5pdCB0ZXN0cyBmb3IgSlNPTiBwYXJzaW5n
LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEpzb25QYXJzZXJUZXN0Ci0g
ICAgewotICAgICAgICAvLyBTYW5pdHkgc21va2UgdGVzdAotICAgICAgICBbVGVzdF0KLSAgICAg
ICAgcHVibGljIHZvaWQgQWxsVHlwZXNSb3VuZHRyaXAoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBc3NlcnRSb3VuZHRyaXAoU2FtcGxlTWVzc2FnZXMuQ3JlYXRlRnVsbFRlc3RBbGxUeXBlcygp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBNYXBz
KCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0Um91bmR0cmlwKG5ldyBUZXN0TWFwIHsg
TWFwU3RyaW5nU3RyaW5nID0geyB7ICJ3aXRoIHNwYWNlcyIsICJiYXIiIH0sIHsgImEiLCAiYiIg
fSB9IH0pOwotICAgICAgICAgICAgQXNzZXJ0Um91bmR0cmlwKG5ldyBUZXN0TWFwIHsgTWFwSW50
MzJJbnQzMiA9IHsgeyAwLCAxIH0sIHsgMiwgMyB9IH0gfSk7Ci0gICAgICAgICAgICBBc3NlcnRS
b3VuZHRyaXAobmV3IFRlc3RNYXAgeyBNYXBCb29sQm9vbCA9IHsgeyBmYWxzZSwgdHJ1ZSB9LCB7
IHRydWUsIGZhbHNlIH0gfSB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAg
ICBbVGVzdENhc2UoIiAxICIpXQotICAgICAgICBbVGVzdENhc2UoIisxIildCi0gICAgICAgIFtU
ZXN0Q2FzZSgiMSwwMDAiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLjUiKV0KLSAgICAgICAgcHVi
bGljIHZvaWQgSW50ZWdlck1hcEtleXNBcmVTdHJpY3Qoc3RyaW5nIGtleVRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIFRlc3QgdGhhdCBpbnRlZ2VyIHBhcnNpbmcgaXMgc3RyaWN0LiBX
ZSBhc3N1bWUgdGhhdCBpZiB0aGlzIGlzIGNvcnJlY3QgZm9yIGludDMyLAotICAgICAgICAgICAg
Ly8gaXQncyBjb3JyZWN0IGZvciBvdGhlciBudW1lcmljIGtleSB0eXBlcy4KLSAgICAgICAgICAg
IHZhciBqc29uID0gInsgXCJtYXBJbnQzMkludDMyXCI6IHsgXCIiICsga2V5VGV4dCArICJcIiA6
IFwiMVwiIH0gfSI7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbj4oKCkgPT4gSnNvblBhcnNlci5EZWZhdWx0LlBhcnNlPFRlc3RNYXA+KGpz
b24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBP
cmlnaW5hbEZpZWxkTmFtZUFjY2VwdGVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGpz
b24gPSAieyBcInNpbmdsZV9pbnQzMlwiOiAxMCB9IjsKLSAgICAgICAgICAgIHZhciBleHBlY3Rl
ZCA9IG5ldyBUZXN0QWxsVHlwZXMgeyBTaW5nbGVJbnQzMiA9IDEwIH07Ci0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWQsIFRlc3RBbGxUeXBlcy5QYXJzZXIuUGFyc2VKc29uKGpz
b24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBT
b3VyY2VDb250ZXh0Um91bmR0cmlwKCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0Um91
bmR0cmlwKG5ldyBTb3VyY2VDb250ZXh0IHsgRmlsZU5hbWUgPSAiZm9vLnByb3RvIiB9KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaW5ndWxhcldy
YXBwZXJzX0RlZmF1bHROb25OdWxsVmFsdWVzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFy
IG1lc3NhZ2UgPSBuZXcgVGVzdFdlbGxLbm93blR5cGVzCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgU3RyaW5nRmllbGQgPSAiIiwKLSAgICAgICAgICAgICAgICBCeXRlc0ZpZWxkID0g
Qnl0ZVN0cmluZy5FbXB0eSwKLSAgICAgICAgICAgICAgICBCb29sRmllbGQgPSBmYWxzZSwKLSAg
ICAgICAgICAgICAgICBGbG9hdEZpZWxkID0gMGYsCi0gICAgICAgICAgICAgICAgRG91YmxlRmll
bGQgPSAwZCwKLSAgICAgICAgICAgICAgICBJbnQzMkZpZWxkID0gMCwKLSAgICAgICAgICAgICAg
ICBJbnQ2NEZpZWxkID0gMCwKLSAgICAgICAgICAgICAgICBVaW50MzJGaWVsZCA9IDAsCi0gICAg
ICAgICAgICAgICAgVWludDY0RmllbGQgPSAwCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAg
QXNzZXJ0Um91bmR0cmlwKG1lc3NhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0g
ICAgICAgIHB1YmxpYyB2b2lkIFNpbmd1bGFyV3JhcHBlcnNfTm9uRGVmYXVsdFZhbHVlcygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RXZWxsS25vd25UeXBl
cwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZ0ZpZWxkID0gIngiLAotICAg
ICAgICAgICAgICAgIEJ5dGVzRmllbGQgPSBCeXRlU3RyaW5nLkNvcHlGcm9tKDEsIDIsIDMpLAot
ICAgICAgICAgICAgICAgIEJvb2xGaWVsZCA9IHRydWUsCi0gICAgICAgICAgICAgICAgRmxvYXRG
aWVsZCA9IDEyLjVmLAotICAgICAgICAgICAgICAgIERvdWJsZUZpZWxkID0gMTIuMjVkLAotICAg
ICAgICAgICAgICAgIEludDMyRmllbGQgPSAxLAotICAgICAgICAgICAgICAgIEludDY0RmllbGQg
PSAyLAotICAgICAgICAgICAgICAgIFVpbnQzMkZpZWxkID0gMywKLSAgICAgICAgICAgICAgICBV
aW50NjRGaWVsZCA9IDQKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBBc3NlcnRSb3VuZHRy
aXAobWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGlj
IHZvaWQgU2luZ3VsYXJXcmFwcGVyc19FeHBsaWNpdE51bGxzKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gV2hlbiB3ZSBwYXJzZSB0aGUgInZhbHVlRmllbGQiOiBudWxsIHBhcnQsIHdlIHJl
bWVtYmVyIGl0Li4uIGJhc2ljYWxseSwgaXQncyBvbmUgY2FzZQotICAgICAgICAgICAgLy8gd2hl
cmUgZXhwbGljaXQgZGVmYXVsdCB2YWx1ZXMgZG9uJ3QgZnVsbHkgcm91bmR0cmlwLgotICAgICAg
ICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVzdFdlbGxLbm93blR5cGVzIHsgVmFsdWVGaWVsZCA9
IFZhbHVlLkZvck51bGwoKSB9OwotICAgICAgICAgICAgdmFyIGpzb24gPSBuZXcgSnNvbkZvcm1h
dHRlcihuZXcgSnNvbkZvcm1hdHRlci5TZXR0aW5ncyh0cnVlKSkuRm9ybWF0KG1lc3NhZ2UpOwot
ICAgICAgICAgICAgdmFyIHBhcnNlZCA9IEpzb25QYXJzZXIuRGVmYXVsdC5QYXJzZTxUZXN0V2Vs
bEtub3duVHlwZXM+KGpzb24pOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2Us
IHBhcnNlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RDYXNl
KHR5cGVvZihJbnQzMlZhbHVlKSwgIjMyIiwgMzIpXQotICAgICAgICBbVGVzdENhc2UodHlwZW9m
KEludDY0VmFsdWUpLCAiMzIiLCAzMkwpXQotICAgICAgICBbVGVzdENhc2UodHlwZW9mKFVJbnQz
MlZhbHVlKSwgIjMyIiwgMzJVKV0KLSAgICAgICAgW1Rlc3RDYXNlKHR5cGVvZihVSW50NjRWYWx1
ZSksICIzMiIsIDMyVUwpXQotICAgICAgICBbVGVzdENhc2UodHlwZW9mKFN0cmluZ1ZhbHVlKSwg
IlwiZm9vXCIiLCAiZm9vIildCi0gICAgICAgIFtUZXN0Q2FzZSh0eXBlb2YoRmxvYXRWYWx1ZSks
ICIxLjUiLCAxLjVmKV0KLSAgICAgICAgW1Rlc3RDYXNlKHR5cGVvZihEb3VibGVWYWx1ZSksICIx
LjUiLCAxLjVkKV0KLSAgICAgICAgcHVibGljIHZvaWQgV3JhcHBlcnNfU3RhbmRhbG9uZShTeXN0
ZW0uVHlwZSB3cmFwcGVyVHlwZSwgc3RyaW5nIGpzb24sIG9iamVjdCBleHBlY3RlZFZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBJTWVzc2FnZSBwYXJzZWQgPSAoSU1lc3NhZ2UpQWN0aXZh
dG9yLkNyZWF0ZUluc3RhbmNlKHdyYXBwZXJUeXBlKTsKLSAgICAgICAgICAgIElNZXNzYWdlIGV4
cGVjdGVkID0gKElNZXNzYWdlKUFjdGl2YXRvci5DcmVhdGVJbnN0YW5jZSh3cmFwcGVyVHlwZSk7
Ci0gICAgICAgICAgICBKc29uUGFyc2VyLkRlZmF1bHQuTWVyZ2UocGFyc2VkLCAibnVsbCIpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGV4cGVjdGVkLCBwYXJzZWQpOwotCi0gICAgICAg
ICAgICBKc29uUGFyc2VyLkRlZmF1bHQuTWVyZ2UocGFyc2VkLCBqc29uKTsKLSAgICAgICAgICAg
IGV4cGVjdGVkLkRlc2NyaXB0b3IuRmllbGRzW1dyYXBwZXJzUmVmbGVjdGlvbi5XcmFwcGVyVmFs
dWVGaWVsZE51bWJlcl0uQWNjZXNzb3IuU2V0VmFsdWUoZXhwZWN0ZWQsIGV4cGVjdGVkVmFsdWUp
OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGV4cGVjdGVkLCBwYXJzZWQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEV4cGxpY2l0TnVsbFZh
bHVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGpzb24gPSAie1widmFsdWVGaWVs
ZFwiOiBudWxsfSI7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IEpzb25QYXJzZXIuRGVmYXVs
dC5QYXJzZTxUZXN0V2VsbEtub3duVHlwZXM+KGpzb24pOwotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKG5ldyBUZXN0V2VsbEtub3duVHlwZXMgeyBWYWx1ZUZpZWxkID0gVmFsdWUuRm9yTnVs
bCgpIH0sIG1lc3NhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1
YmxpYyB2b2lkIEJ5dGVzV3JhcHBlcl9TdGFuZGFsb25lKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgQnl0ZVN0cmluZyBkYXRhID0gQnl0ZVN0cmluZy5Db3B5RnJvbSgxLCAyLCAzKTsKLSAgICAg
ICAgICAgIC8vIENhbid0IGRvIHRoaXMgd2l0aCBhdHRyaWJ1dGVzLi4uCi0gICAgICAgICAgICB2
YXIgcGFyc2VkID0gSnNvblBhcnNlci5EZWZhdWx0LlBhcnNlPEJ5dGVzVmFsdWU+KFdyYXBJblF1
b3RlcyhkYXRhLlRvQmFzZTY0KCkpKTsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBC
eXRlc1ZhbHVlIHsgVmFsdWUgPSBkYXRhIH07Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
ZXhwZWN0ZWQsIHBhcnNlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgUmVwZWF0ZWRXcmFwcGVycygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZh
ciBtZXNzYWdlID0gbmV3IFJlcGVhdGVkV2VsbEtub3duVHlwZXMKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBCb29sRmllbGQgPSB7IHRydWUsIGZhbHNlIH0sCi0gICAgICAgICAgICAg
ICAgQnl0ZXNGaWVsZCA9IHsgQnl0ZVN0cmluZy5Db3B5RnJvbSgxLCAyLCAzKSwgQnl0ZVN0cmlu
Zy5Db3B5RnJvbSg0LCA1LCA2KSwgQnl0ZVN0cmluZy5FbXB0eSB9LAotICAgICAgICAgICAgICAg
IERvdWJsZUZpZWxkID0geyAxMi41LCAtMS41LCAwZCB9LAotICAgICAgICAgICAgICAgIEZsb2F0
RmllbGQgPSB7IDEyMy4yNWYsIC0yMGYsIDBmIH0sCi0gICAgICAgICAgICAgICAgSW50MzJGaWVs
ZCA9IHsgaW50Lk1heFZhbHVlLCBpbnQuTWluVmFsdWUsIDAgfSwKLSAgICAgICAgICAgICAgICBJ
bnQ2NEZpZWxkID0geyBsb25nLk1heFZhbHVlLCBsb25nLk1pblZhbHVlLCAwTCB9LAotICAgICAg
ICAgICAgICAgIFN0cmluZ0ZpZWxkID0geyAiRmlyc3QiLCAiU2Vjb25kIiwgIiIgfSwKLSAgICAg
ICAgICAgICAgICBVaW50MzJGaWVsZCA9IHsgdWludC5NYXhWYWx1ZSwgdWludC5NaW5WYWx1ZSwg
MFUgfSwKLSAgICAgICAgICAgICAgICBVaW50NjRGaWVsZCA9IHsgdWxvbmcuTWF4VmFsdWUsIHVs
b25nLk1pblZhbHVlLCAwVUwgfSwKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBBc3NlcnRS
b3VuZHRyaXAobWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgUmVwZWF0ZWRGaWVsZF9OdWxsRWxlbWVudFByb2hpYml0ZWQoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzdHJpbmcganNvbiA9ICJ7IFwicmVwZWF0ZWRfZm9yZWlnbl9tZXNz
YWdlXCI6IFtudWxsXSB9IjsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uPigoKSA9PiBUZXN0QWxsVHlwZXMuUGFyc2VyLlBhcnNlSnNvbihq
c29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQg
UmVwZWF0ZWRGaWVsZF9OdWxsT3ZlcmFsbFZhbHVlQWxsb3dlZCgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHN0cmluZyBqc29uID0gInsgXCJyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VcIjogbnVs
bCB9IjsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgVGVzdEFsbFR5cGVzKCksIFRl
c3RBbGxUeXBlcy5QYXJzZXIuUGFyc2VKc29uKGpzb24pKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoInsgXCJtYXBJbnQzMkludDMyXCI6IHsgXCIxMFwi
OiBudWxsIH0iKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJ7IFwibWFwU3RyaW5nU3RyaW5nXCI6IHsg
XCJhYmNcIjogbnVsbCB9IildCi0gICAgICAgIFtUZXN0Q2FzZSgieyBcIm1hcEludDMyRm9yZWln
bk1lc3NhZ2VcIjogeyBcIjEwXCI6IG51bGwgfSIpXQotICAgICAgICBwdWJsaWMgdm9pZCBNYXBG
aWVsZF9OdWxsVmFsdWVQcm9oaWJpdGVkKHN0cmluZyBqc29uKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkgPT4g
VGVzdE1hcC5QYXJzZXIuUGFyc2VKc29uKGpzb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtU
ZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBNYXBGaWVsZF9OdWxsT3ZlcmFsbFZhbHVlQWxsb3dl
ZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyBqc29uID0gInsgXCJtYXBJbnQzMklu
dDMyXCI6IG51bGwgfSI7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobmV3IFRlc3RNYXAo
KSwgVGVzdE1hcC5QYXJzZXIuUGFyc2VKc29uKGpzb24pKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBJbmRpdmlkdWFsV3JhcHBlclR5cGVzKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG5ldyBTdHJpbmdWYWx1ZSB7IFZh
bHVlID0gImZvbyIgfSwgU3RyaW5nVmFsdWUuUGFyc2VyLlBhcnNlSnNvbigiXCJmb29cIiIpKTsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgSW50MzJWYWx1ZSB7IFZhbHVlID0gMSB9
LCBJbnQzMlZhbHVlLlBhcnNlci5QYXJzZUpzb24oIjEiKSk7Ci0gICAgICAgICAgICAvLyBDYW4g
cGFyc2Ugc3RyaW5ncyBkaXJlY3RseSB0b28KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChu
ZXcgSW50MzJWYWx1ZSB7IFZhbHVlID0gMSB9LCBJbnQzMlZhbHVlLlBhcnNlci5QYXJzZUpzb24o
IlwiMVwiIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBBc3Nl
cnRSb3VuZHRyaXA8VD4oVCBtZXNzYWdlKSB3aGVyZSBUIDogSU1lc3NhZ2U8VD4sIG5ldygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZhciBjbG9uZSA9IG1lc3NhZ2UuQ2xvbmUoKTsKLSAgICAg
ICAgICAgIHZhciBqc29uID0gSnNvbkZvcm1hdHRlci5EZWZhdWx0LkZvcm1hdChtZXNzYWdlKTsK
LSAgICAgICAgICAgIHZhciBwYXJzZWQgPSBKc29uUGFyc2VyLkRlZmF1bHQuUGFyc2U8VD4oanNv
bik7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoY2xvbmUsIHBhcnNlZCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RDYXNlKCIwIiwgMCldCi0gICAgICAg
IFtUZXN0Q2FzZSgiLTAiLCAwKV0gLy8gTm90IGVudGlyZWx5IGNsZWFyIHdoZXRoZXIgd2UgaW50
ZW5kIHRvIGFsbG93IHRoaXMuLi4KLSAgICAgICAgW1Rlc3RDYXNlKCIxIiwgMSldCi0gICAgICAg
IFtUZXN0Q2FzZSgiLTEiLCAtMSldCi0gICAgICAgIFtUZXN0Q2FzZSgiMjE0NzQ4MzY0NyIsIDIx
NDc0ODM2NDcpXQotICAgICAgICBbVGVzdENhc2UoIi0yMTQ3NDgzNjQ4IiwgLTIxNDc0ODM2NDgp
XQotICAgICAgICBwdWJsaWMgdm9pZCBTdHJpbmdUb0ludDMyX1ZhbGlkKHN0cmluZyBqc29uVmFs
dWUsIGludCBleHBlY3RlZFBhcnNlZFZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJp
bmcganNvbiA9ICJ7IFwic2luZ2xlSW50MzJcIjogXCIiICsganNvblZhbHVlICsgIlwifSI7Ci0g
ICAgICAgICAgICB2YXIgcGFyc2VkID0gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUpzb24oanNv
bik7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWRQYXJzZWRWYWx1ZSwgcGFy
c2VkLlNpbmdsZUludDMyKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBb
VGVzdENhc2UoIiswIildCi0gICAgICAgIFtUZXN0Q2FzZSgiIDEiKV0KLSAgICAgICAgW1Rlc3RD
YXNlKCIxICIpXQotICAgICAgICBbVGVzdENhc2UoIjAwIildCi0gICAgICAgIFtUZXN0Q2FzZSgi
LTAwIildCi0gICAgICAgIFtUZXN0Q2FzZSgiLS0xIildCi0gICAgICAgIFtUZXN0Q2FzZSgiKzEi
KV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLjUiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxZTEwIild
Ci0gICAgICAgIFtUZXN0Q2FzZSgiMjE0NzQ4MzY0OCIpXQotICAgICAgICBbVGVzdENhc2UoIi0y
MTQ3NDgzNjQ5IildCi0gICAgICAgIHB1YmxpYyB2b2lkIFN0cmluZ1RvSW50MzJfSW52YWxpZChz
dHJpbmcganNvblZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcganNvbiA9ICJ7
IFwic2luZ2xlSW50MzJcIjogXCIiICsganNvblZhbHVlICsgIlwifSI7Ci0gICAgICAgICAgICBB
c3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkgPT4gVGVzdEFs
bFR5cGVzLlBhcnNlci5QYXJzZUpzb24oanNvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIFtUZXN0Q2FzZSgiMCIsIDBVKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxIiwg
MVUpXQotICAgICAgICBbVGVzdENhc2UoIjQyOTQ5NjcyOTUiLCA0Mjk0OTY3Mjk1VSldCi0gICAg
ICAgIHB1YmxpYyB2b2lkIFN0cmluZ1RvVUludDMyX1ZhbGlkKHN0cmluZyBqc29uVmFsdWUsIHVp
bnQgZXhwZWN0ZWRQYXJzZWRWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGpz
b24gPSAieyBcInNpbmdsZVVpbnQzMlwiOiBcIiIgKyBqc29uVmFsdWUgKyAiXCJ9IjsKLSAgICAg
ICAgICAgIHZhciBwYXJzZWQgPSBUZXN0QWxsVHlwZXMuUGFyc2VyLlBhcnNlSnNvbihqc29uKTsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBlY3RlZFBhcnNlZFZhbHVlLCBwYXJzZWQu
U2luZ2xlVWludDMyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFzc3VtZSB0aGF0IGFueXRo
aW5nIG5vbi1ib3VuZHMtcmVsYXRlZCBpcyBjb3ZlcmVkIGluIHRoZSBJbnQzMiBjYXNlCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIi0xIildCi0gICAgICAgIFtUZXN0Q2FzZSgi
NDI5NDk2NzI5NiIpXQotICAgICAgICBwdWJsaWMgdm9pZCBTdHJpbmdUb1VJbnQzMl9JbnZhbGlk
KHN0cmluZyBqc29uVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyBqc29uID0g
InsgXCJzaW5nbGVVaW50MzJcIjogXCIiICsganNvblZhbHVlICsgIlwifSI7Ci0gICAgICAgICAg
ICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkgPT4gVGVz
dEFsbFR5cGVzLlBhcnNlci5QYXJzZUpzb24oanNvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSgiMCIsIDBMKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIx
IiwgMUwpXQotICAgICAgICBbVGVzdENhc2UoIi0xIiwgLTFMKV0KLSAgICAgICAgW1Rlc3RDYXNl
KCI5MjIzMzcyMDM2ODU0Nzc1ODA3IiwgOTIyMzM3MjAzNjg1NDc3NTgwNyldCi0gICAgICAgIFtU
ZXN0Q2FzZSgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiLCAtOTIyMzM3MjAzNjg1NDc3NTgwOCldCi0g
ICAgICAgIHB1YmxpYyB2b2lkIFN0cmluZ1RvSW50NjRfVmFsaWQoc3RyaW5nIGpzb25WYWx1ZSwg
bG9uZyBleHBlY3RlZFBhcnNlZFZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcg
anNvbiA9ICJ7IFwic2luZ2xlSW50NjRcIjogXCIiICsganNvblZhbHVlICsgIlwifSI7Ci0gICAg
ICAgICAgICB2YXIgcGFyc2VkID0gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUpzb24oanNvbik7
Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWRQYXJzZWRWYWx1ZSwgcGFyc2Vk
LlNpbmdsZUludDY0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFzc3VtZSB0aGF0IGFueXRo
aW5nIG5vbi1ib3VuZHMtcmVsYXRlZCBpcyBjb3ZlcmVkIGluIHRoZSBJbnQzMiBjYXNlCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIi05MjIzMzcyMDM2ODU0Nzc1ODA5IildCi0g
ICAgICAgIFtUZXN0Q2FzZSgiOTIyMzM3MjAzNjg1NDc3NTgwOCIpXQotICAgICAgICBwdWJsaWMg
dm9pZCBTdHJpbmdUb0ludDY0X0ludmFsaWQoc3RyaW5nIGpzb25WYWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgc3RyaW5nIGpzb24gPSAieyBcInNpbmdsZUludDY0XCI6IFwiIiArIGpzb25W
YWx1ZSArICJcIn0iOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkUHJvdG9jb2xC
dWZmZXJFeGNlcHRpb24+KCgpID0+IFRlc3RBbGxUeXBlcy5QYXJzZXIuUGFyc2VKc29uKGpzb24p
KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIjAiLCAw
VUwpXQotICAgICAgICBbVGVzdENhc2UoIjEiLCAxVUwpXQotICAgICAgICBbVGVzdENhc2UoIjE4
NDQ2NzQ0MDczNzA5NTUxNjE1IiwgMTg0NDY3NDQwNzM3MDk1NTE2MTUpXQotICAgICAgICBwdWJs
aWMgdm9pZCBTdHJpbmdUb1VJbnQ2NF9WYWxpZChzdHJpbmcganNvblZhbHVlLCB1bG9uZyBleHBl
Y3RlZFBhcnNlZFZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcganNvbiA9ICJ7
IFwic2luZ2xlVWludDY0XCI6IFwiIiArIGpzb25WYWx1ZSArICJcIn0iOwotICAgICAgICAgICAg
dmFyIHBhcnNlZCA9IFRlc3RBbGxUeXBlcy5QYXJzZXIuUGFyc2VKc29uKGpzb24pOwotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKGV4cGVjdGVkUGFyc2VkVmFsdWUsIHBhcnNlZC5TaW5nbGVV
aW50NjQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQXNzdW1lIHRoYXQgYW55dGhpbmcgbm9u
LWJvdW5kcy1yZWxhdGVkIGlzIGNvdmVyZWQgaW4gdGhlIEludDMyIGNhc2UKLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIFtUZXN0Q2FzZSgiLTEiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxODQ0Njc0
NDA3MzcwOTU1MTYxNiIpXQotICAgICAgICBwdWJsaWMgdm9pZCBTdHJpbmdUb1VJbnQ2NF9JbnZh
bGlkKHN0cmluZyBqc29uVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyBqc29u
ID0gInsgXCJzaW5nbGVVaW50NjRcIjogXCIiICsganNvblZhbHVlICsgIlwifSI7Ci0gICAgICAg
ICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkgPT4g
VGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUpzb24oanNvbikpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSgiMCIsIDBkKV0KLSAgICAgICAgW1Rlc3RDYXNl
KCIxIiwgMWQpXQotICAgICAgICBbVGVzdENhc2UoIjEuMDAwMDAwIiwgMWQpXQotICAgICAgICBb
VGVzdENhc2UoIjEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsIDFkKV0gLy8gV2UgZG9uJ3Qg
bm90aWNlIHRoYXQgd2UgaGF2ZW4ndCBwcmVzZXJ2ZWQgdGhlIGV4YWN0IHZhbHVlCi0gICAgICAg
IFtUZXN0Q2FzZSgiLTEiLCAtMWQpXQotICAgICAgICBbVGVzdENhc2UoIjFlMSIsIDEwZCldCi0g
ICAgICAgIFtUZXN0Q2FzZSgiMWUwMSIsIDEwZCldIC8vIExlYWRpbmcgZGVjaW1hbHMgYXJlIGFs
bG93ZWQgaW4gZXhwb25lbnRzCi0gICAgICAgIFtUZXN0Q2FzZSgiMUUxIiwgMTBkKV0gLy8gRWl0
aGVyIGNhc2UgaXMgZmluZQotICAgICAgICBbVGVzdENhc2UoIi0xZTEiLCAtMTBkKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCIxLjVlMSIsIDE1ZCldCi0gICAgICAgIFtUZXN0Q2FzZSgiLTEuNWUxIiwg
LTE1ZCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMTVlLTEiLCAxLjVkKV0KLSAgICAgICAgW1Rlc3RD
YXNlKCItMTVlLTEiLCAtMS41ZCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMS43OTc2OWUzMDgiLCAx
Ljc5NzY5ZTMwOCldCi0gICAgICAgIFtUZXN0Q2FzZSgiLTEuNzk3NjllMzA4IiwgLTEuNzk3Njll
MzA4KV0KLSAgICAgICAgW1Rlc3RDYXNlKCJJbmZpbml0eSIsIGRvdWJsZS5Qb3NpdGl2ZUluZmlu
aXR5KV0KLSAgICAgICAgW1Rlc3RDYXNlKCItSW5maW5pdHkiLCBkb3VibGUuTmVnYXRpdmVJbmZp
bml0eSldCi0gICAgICAgIFtUZXN0Q2FzZSgiTmFOIiwgZG91YmxlLk5hTildCi0gICAgICAgIHB1
YmxpYyB2b2lkIFN0cmluZ1RvRG91YmxlX1ZhbGlkKHN0cmluZyBqc29uVmFsdWUsIGRvdWJsZSBl
eHBlY3RlZFBhcnNlZFZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcganNvbiA9
ICJ7IFwic2luZ2xlRG91YmxlXCI6IFwiIiArIGpzb25WYWx1ZSArICJcIn0iOwotICAgICAgICAg
ICAgdmFyIHBhcnNlZCA9IFRlc3RBbGxUeXBlcy5QYXJzZXIuUGFyc2VKc29uKGpzb24pOwotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGV4cGVjdGVkUGFyc2VkVmFsdWUsIHBhcnNlZC5TaW5n
bGVEb3VibGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2Fz
ZSgiMS43OTc3ZTMwOCIpXQotICAgICAgICBbVGVzdENhc2UoIi0xLjc5NzdlMzA4IildCi0gICAg
ICAgIFtUZXN0Q2FzZSgiMWUzMDkiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLDAiKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCIxLjAuMCIpXQotICAgICAgICBbVGVzdENhc2UoIisxIildCi0gICAgICAg
IFtUZXN0Q2FzZSgiMDAiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIwMSIpXQotICAgICAgICBbVGVz
dENhc2UoIi0wMCIpXQotICAgICAgICBbVGVzdENhc2UoIi0wMSIpXQotICAgICAgICBbVGVzdENh
c2UoIi0tMSIpXQotICAgICAgICBbVGVzdENhc2UoIiBJbmZpbml0eSIpXQotICAgICAgICBbVGVz
dENhc2UoIiAtSW5maW5pdHkiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJOYU4gIildCi0gICAgICAg
IFtUZXN0Q2FzZSgiSW5maW5pdHkgIildCi0gICAgICAgIFtUZXN0Q2FzZSgiLUluZmluaXR5ICIp
XQotICAgICAgICBbVGVzdENhc2UoIiBOYU4iKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJJTkZJTklU
WSIpXQotICAgICAgICBbVGVzdENhc2UoIm5hbiIpXQotICAgICAgICBbVGVzdENhc2UoIlx1MDBC
RCIpXSAvLyAxLzIgYXMgYSBzaW5nbGUgVW5pY29kZSBjaGFyYWN0ZXIuIEp1c3Qgc2FuaXR5IGNo
ZWNraW5nLi4uCi0gICAgICAgIHB1YmxpYyB2b2lkIFN0cmluZ1RvRG91YmxlX0ludmFsaWQoc3Ry
aW5nIGpzb25WYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGpzb24gPSAieyBc
InNpbmdsZURvdWJsZVwiOiBcIiIgKyBqc29uVmFsdWUgKyAiXCJ9IjsKLSAgICAgICAgICAgIEFz
c2VydC5UaHJvd3M8SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uPigoKSA9PiBUZXN0QWxs
VHlwZXMuUGFyc2VyLlBhcnNlSnNvbihqc29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVz
dF0KLSAgICAgICAgW1Rlc3RDYXNlKCIwIiwgMGYpXQotICAgICAgICBbVGVzdENhc2UoIjEiLCAx
ZildCi0gICAgICAgIFtUZXN0Q2FzZSgiMS4wMDAwMDAiLCAxZildCi0gICAgICAgIFtUZXN0Q2Fz
ZSgiLTEiLCAtMWYpXQotICAgICAgICBbVGVzdENhc2UoIjMuNDAyODIzZTM4IiwgMy40MDI4MjNl
MzhmKV0KLSAgICAgICAgW1Rlc3RDYXNlKCItMy40MDI4MjNlMzgiLCAtMy40MDI4MjNlMzhmKV0K
LSAgICAgICAgW1Rlc3RDYXNlKCIxLjVlMSIsIDE1ZildCi0gICAgICAgIFtUZXN0Q2FzZSgiMTVl
LTEiLCAxLjVmKV0KLSAgICAgICAgcHVibGljIHZvaWQgU3RyaW5nVG9GbG9hdF9WYWxpZChzdHJp
bmcganNvblZhbHVlLCBmbG9hdCBleHBlY3RlZFBhcnNlZFZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzdHJpbmcganNvbiA9ICJ7IFwic2luZ2xlRmxvYXRcIjogXCIiICsganNvblZhbHVl
ICsgIlwifSI7Ci0gICAgICAgICAgICB2YXIgcGFyc2VkID0gVGVzdEFsbFR5cGVzLlBhcnNlci5Q
YXJzZUpzb24oanNvbik7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWRQYXJz
ZWRWYWx1ZSwgcGFyc2VkLlNpbmdsZUZsb2F0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0
XQotICAgICAgICBbVGVzdENhc2UoIjMuNDAyODI0ZTM4IildCi0gICAgICAgIFtUZXN0Q2FzZSgi
LTMuNDAyODI0ZTM4IildCi0gICAgICAgIFtUZXN0Q2FzZSgiMSwwIildCi0gICAgICAgIFtUZXN0
Q2FzZSgiMS4wLjAiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIrMSIpXQotICAgICAgICBbVGVzdENh
c2UoIjAwIildCi0gICAgICAgIFtUZXN0Q2FzZSgiLS0xIildCi0gICAgICAgIHB1YmxpYyB2b2lk
IFN0cmluZ1RvRmxvYXRfSW52YWxpZChzdHJpbmcganNvblZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzdHJpbmcganNvbiA9ICJ7IFwic2luZ2xlRmxvYXRcIjogXCIiICsganNvblZhbHVl
ICsgIlwifSI7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZl
ckV4Y2VwdGlvbj4oKCkgPT4gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUpzb24oanNvbikpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSgiMCIsIDApXQot
ICAgICAgICBbVGVzdENhc2UoIi0wIiwgMCldIC8vIE5vdCBlbnRpcmVseSBjbGVhciB3aGV0aGVy
IHdlIGludGVuZCB0byBhbGxvdyB0aGlzLi4uCi0gICAgICAgIFtUZXN0Q2FzZSgiMSIsIDEpXQot
ICAgICAgICBbVGVzdENhc2UoIi0xIiwgLTEpXQotICAgICAgICBbVGVzdENhc2UoIjIxNDc0ODM2
NDciLCAyMTQ3NDgzNjQ3KV0KLSAgICAgICAgW1Rlc3RDYXNlKCItMjE0NzQ4MzY0OCIsIC0yMTQ3
NDgzNjQ4KV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxZTEiLCAxMCldCi0gICAgICAgIFtUZXN0Q2Fz
ZSgiLTFlMSIsIC0xMCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMTAuMDAiLCAxMCldCi0gICAgICAg
IFtUZXN0Q2FzZSgiLTEwLjAwIiwgLTEwKV0KLSAgICAgICAgcHVibGljIHZvaWQgTnVtYmVyVG9J
bnQzMl9WYWxpZChzdHJpbmcganNvblZhbHVlLCBpbnQgZXhwZWN0ZWRQYXJzZWRWYWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGpzb24gPSAieyBcInNpbmdsZUludDMyXCI6ICIg
KyBqc29uVmFsdWUgKyAifSI7Ci0gICAgICAgICAgICB2YXIgcGFyc2VkID0gVGVzdEFsbFR5cGVz
LlBhcnNlci5QYXJzZUpzb24oanNvbik7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhw
ZWN0ZWRQYXJzZWRWYWx1ZSwgcGFyc2VkLlNpbmdsZUludDMyKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIiswIiwgdHlwZW9mKEludmFsaWRKc29uRXhj
ZXB0aW9uKSldCi0gICAgICAgIFtUZXN0Q2FzZSgiMDAiLCB0eXBlb2YoSW52YWxpZEpzb25FeGNl
cHRpb24pKV0KLSAgICAgICAgW1Rlc3RDYXNlKCItMDAiLCB0eXBlb2YoSW52YWxpZEpzb25FeGNl
cHRpb24pKV0KLSAgICAgICAgW1Rlc3RDYXNlKCItLTEiLCB0eXBlb2YoSW52YWxpZEpzb25FeGNl
cHRpb24pKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIrMSIsIHR5cGVvZihJbnZhbGlkSnNvbkV4Y2Vw
dGlvbikpXQotICAgICAgICBbVGVzdENhc2UoIjEuNSIsIHR5cGVvZihJbnZhbGlkUHJvdG9jb2xC
dWZmZXJFeGNlcHRpb24pKV0KLSAgICAgICAgLy8gVmFsdWUgaXMgb3V0IG9mIHJhbmdlCi0gICAg
ICAgIFtUZXN0Q2FzZSgiMWUxMCIsIHR5cGVvZihJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24pKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMTQ3NDgzNjQ4IiwgdHlwZW9mKEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbikpXQotICAgICAgICBbVGVzdENhc2UoIi0yMTQ3NDgzNjQ5Iiwg
dHlwZW9mKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbikpXQotICAgICAgICBwdWJsaWMg
dm9pZCBOdW1iZXJUb0ludDMyX0ludmFsaWQoc3RyaW5nIGpzb25WYWx1ZSwgU3lzdGVtLlR5cGUg
ZXhwZWN0ZWRFeGNlcHRpb25UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcganNv
biA9ICJ7IFwic2luZ2xlSW50MzJcIjogIiArIGpzb25WYWx1ZSArICJ9IjsKLSAgICAgICAgICAg
IEFzc2VydC5UaHJvd3MoZXhwZWN0ZWRFeGNlcHRpb25UeXBlLCAoKSA9PiBUZXN0QWxsVHlwZXMu
UGFyc2VyLlBhcnNlSnNvbihqc29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAg
ICAgICAgW1Rlc3RDYXNlKCIwIiwgMFUpXQotICAgICAgICBbVGVzdENhc2UoIjEiLCAxVSldCi0g
ICAgICAgIFtUZXN0Q2FzZSgiNDI5NDk2NzI5NSIsIDQyOTQ5NjcyOTVVKV0KLSAgICAgICAgcHVi
bGljIHZvaWQgTnVtYmVyVG9VSW50MzJfVmFsaWQoc3RyaW5nIGpzb25WYWx1ZSwgdWludCBleHBl
Y3RlZFBhcnNlZFZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcganNvbiA9ICJ7
IFwic2luZ2xlVWludDMyXCI6ICIgKyBqc29uVmFsdWUgKyAifSI7Ci0gICAgICAgICAgICB2YXIg
cGFyc2VkID0gVGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUpzb24oanNvbik7Ci0gICAgICAgICAg
ICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWRQYXJzZWRWYWx1ZSwgcGFyc2VkLlNpbmdsZVVpbnQz
Mik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBc3N1bWUgdGhhdCBhbnl0aGluZyBub24tYm91
bmRzLXJlbGF0ZWQgaXMgY292ZXJlZCBpbiB0aGUgSW50MzIgY2FzZQotICAgICAgICBbVGVzdF0K
LSAgICAgICAgW1Rlc3RDYXNlKCItMSIpXQotICAgICAgICBbVGVzdENhc2UoIjQyOTQ5NjcyOTYi
KV0KLSAgICAgICAgcHVibGljIHZvaWQgTnVtYmVyVG9VSW50MzJfSW52YWxpZChzdHJpbmcganNv
blZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcganNvbiA9ICJ7IFwic2luZ2xl
VWludDMyXCI6ICIgKyBqc29uVmFsdWUgKyAifSI7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dz
PEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkgPT4gVGVzdEFsbFR5cGVzLlBhcnNl
ci5QYXJzZUpzb24oanNvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAg
IFtUZXN0Q2FzZSgiMCIsIDBMKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxIiwgMUwpXQotICAgICAg
ICBbVGVzdENhc2UoIi0xIiwgLTFMKV0KLSAgICAgICAgLy8gbG9uZy5NYXhWYWx1ZSBpc24ndCBh
Y3R1YWxseSByZXByZXNlbnRhYmxlIGFzIGEgZG91YmxlLiBUaGlzIHN0cmluZyB2YWx1ZSBpcyB0
aGUgaGlnaGVzdAotICAgICAgICAvLyByZXByZXNlbnRhYmxlIHZhbHVlIHdoaWNoIGlzbid0IGdy
ZWF0ZXIgdGhhbiBsb25nLk1heFZhbHVlLgotICAgICAgICBbVGVzdENhc2UoIjkyMjMzNzIwMzY4
NTQ3NzQ3ODQiLCA5MjIzMzcyMDM2ODU0Nzc0Nzg0KV0KLSAgICAgICAgW1Rlc3RDYXNlKCItOTIy
MzM3MjAzNjg1NDc3NTgwOCIsIC05MjIzMzcyMDM2ODU0Nzc1ODA4KV0KLSAgICAgICAgcHVibGlj
IHZvaWQgTnVtYmVyVG9JbnQ2NF9WYWxpZChzdHJpbmcganNvblZhbHVlLCBsb25nIGV4cGVjdGVk
UGFyc2VkVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyBqc29uID0gInsgXCJz
aW5nbGVJbnQ2NFwiOiAiICsganNvblZhbHVlICsgIn0iOwotICAgICAgICAgICAgdmFyIHBhcnNl
ZCA9IFRlc3RBbGxUeXBlcy5QYXJzZXIuUGFyc2VKc29uKGpzb24pOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKGV4cGVjdGVkUGFyc2VkVmFsdWUsIHBhcnNlZC5TaW5nbGVJbnQ2NCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBBc3N1bWUgdGhhdCBhbnl0aGluZyBub24tYm91bmRzLXJl
bGF0ZWQgaXMgY292ZXJlZCBpbiB0aGUgSW50MzIgY2FzZQotICAgICAgICBbVGVzdF0KLSAgICAg
ICAgW1Rlc3RDYXNlKCI5MjIzMzcyMDM2ODU0Nzc1ODA4IildCi0gICAgICAgIC8vIFRoZW9yZXRp
Y2FsIGJvdW5kIHdvdWxkIGJlIC05MjIzMzcyMDM2ODU0Nzc1ODA5LCBidXQgd2hlbiB0aGF0IGlz
IHBhcnNlZCB0byBhIGRvdWJsZQotICAgICAgICAvLyB3ZSBlbmQgdXAgd2l0aCB0aGUgZXhhY3Qg
dmFsdWUgb2YgbG9uZy5NaW5WYWx1ZSBkdWUgdG8gbGFjayBvZiBwcmVjaXNpb24uIFRoZSB2YWx1
ZSBoZXJlCi0gICAgICAgIC8vIGlzIHRoZSAibmV4dCBkb3VibGUgZG93biIuCi0gICAgICAgIFtU
ZXN0Q2FzZSgiLTkyMjMzNzIwMzY4NTQ3ODAwMDAiKV0KLSAgICAgICAgcHVibGljIHZvaWQgTnVt
YmVyVG9JbnQ2NF9JbnZhbGlkKHN0cmluZyBqc29uVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN0cmluZyBqc29uID0gInsgXCJzaW5nbGVJbnQ2NFwiOiAiICsganNvblZhbHVlICsgIn0i
OwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24+KCgpID0+IFRlc3RBbGxUeXBlcy5QYXJzZXIuUGFyc2VKc29uKGpzb24pKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIjAiLCAwVUwpXQotICAgICAg
ICBbVGVzdENhc2UoIjEiLCAxVUwpXQotICAgICAgICAvLyB1bG9uZy5NYXhWYWx1ZSBpc24ndCBy
ZXByZXNlbnRhYmxlIGFzIGEgZG91YmxlLiBUaGlzIHZhbHVlIGlzIHRoZSBsYXJnZXN0IGRvdWJs
ZSB3aXRoaW4KLSAgICAgICAgLy8gdGhlIHJhbmdlIG9mIHVsb25nLgotICAgICAgICBbVGVzdENh
c2UoIjE4NDQ2NzQ0MDczNzA5NTQ5NTY4IiwgMTg0NDY3NDQwNzM3MDk1NDk1NjhVTCldCi0gICAg
ICAgIHB1YmxpYyB2b2lkIE51bWJlclRvVUludDY0X1ZhbGlkKHN0cmluZyBqc29uVmFsdWUsIHVs
b25nIGV4cGVjdGVkUGFyc2VkVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyBq
c29uID0gInsgXCJzaW5nbGVVaW50NjRcIjogIiArIGpzb25WYWx1ZSArICJ9IjsKLSAgICAgICAg
ICAgIHZhciBwYXJzZWQgPSBUZXN0QWxsVHlwZXMuUGFyc2VyLlBhcnNlSnNvbihqc29uKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBlY3RlZFBhcnNlZFZhbHVlLCBwYXJzZWQuU2lu
Z2xlVWludDY0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFzc3VtZSB0aGF0IGFueXRoaW5n
IG5vbi1ib3VuZHMtcmVsYXRlZCBpcyBjb3ZlcmVkIGluIHRoZSBJbnQzMiBjYXNlCi0gICAgICAg
IFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIi0xIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMTg0
NDY3NDQwNzM3MDk1NTE2MTYiKV0KLSAgICAgICAgcHVibGljIHZvaWQgTnVtYmVyVG9VSW50NjRf
SW52YWxpZChzdHJpbmcganNvblZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcg
anNvbiA9ICJ7IFwic2luZ2xlVWludDY0XCI6ICIgKyBqc29uVmFsdWUgKyAifSI7Ci0gICAgICAg
ICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbj4oKCkgPT4g
VGVzdEFsbFR5cGVzLlBhcnNlci5QYXJzZUpzb24oanNvbikpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSgiMCIsIDBkKV0KLSAgICAgICAgW1Rlc3RDYXNl
KCIxIiwgMWQpXQotICAgICAgICBbVGVzdENhc2UoIjEuMDAwMDAwIiwgMWQpXQotICAgICAgICBb
VGVzdENhc2UoIjEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsIDFkKV0gLy8gV2UgZG9uJ3Qg
bm90aWNlIHRoYXQgd2UgaGF2ZW4ndCBwcmVzZXJ2ZWQgdGhlIGV4YWN0IHZhbHVlCi0gICAgICAg
IFtUZXN0Q2FzZSgiLTEiLCAtMWQpXQotICAgICAgICBbVGVzdENhc2UoIjFlMSIsIDEwZCldCi0g
ICAgICAgIFtUZXN0Q2FzZSgiMWUwMSIsIDEwZCldIC8vIExlYWRpbmcgZGVjaW1hbHMgYXJlIGFs
bG93ZWQgaW4gZXhwb25lbnRzCi0gICAgICAgIFtUZXN0Q2FzZSgiMUUxIiwgMTBkKV0gLy8gRWl0
aGVyIGNhc2UgaXMgZmluZQotICAgICAgICBbVGVzdENhc2UoIi0xZTEiLCAtMTBkKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCIxLjVlMSIsIDE1ZCldCi0gICAgICAgIFtUZXN0Q2FzZSgiLTEuNWUxIiwg
LTE1ZCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMTVlLTEiLCAxLjVkKV0KLSAgICAgICAgW1Rlc3RD
YXNlKCItMTVlLTEiLCAtMS41ZCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMS43OTc2OWUzMDgiLCAx
Ljc5NzY5ZTMwOCldCi0gICAgICAgIFtUZXN0Q2FzZSgiLTEuNzk3NjllMzA4IiwgLTEuNzk3Njll
MzA4KV0KLSAgICAgICAgcHVibGljIHZvaWQgTnVtYmVyVG9Eb3VibGVfVmFsaWQoc3RyaW5nIGpz
b25WYWx1ZSwgZG91YmxlIGV4cGVjdGVkUGFyc2VkVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN0cmluZyBqc29uID0gInsgXCJzaW5nbGVEb3VibGVcIjogIiArIGpzb25WYWx1ZSArICJ9
IjsKLSAgICAgICAgICAgIHZhciBwYXJzZWQgPSBUZXN0QWxsVHlwZXMuUGFyc2VyLlBhcnNlSnNv
bihqc29uKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBlY3RlZFBhcnNlZFZhbHVl
LCBwYXJzZWQuU2luZ2xlRG91YmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAg
ICAgICBbVGVzdENhc2UoIjEuNzk3N2UzMDgiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCItMS43OTc3
ZTMwOCIpXQotICAgICAgICBbVGVzdENhc2UoIjFlMzA5IildCi0gICAgICAgIFtUZXN0Q2FzZSgi
MSwwIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMS4wLjAiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIr
MSIpXQotICAgICAgICBbVGVzdENhc2UoIjAwIildCi0gICAgICAgIFtUZXN0Q2FzZSgiLS0xIild
Ci0gICAgICAgIFtUZXN0Q2FzZSgiXHUwMEJEIildIC8vIDEvMiBhcyBhIHNpbmdsZSBVbmljb2Rl
IGNoYXJhY3Rlci4gSnVzdCBzYW5pdHkgY2hlY2tpbmcuLi4KLSAgICAgICAgcHVibGljIHZvaWQg
TnVtYmVyVG9Eb3VibGVfSW52YWxpZChzdHJpbmcganNvblZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzdHJpbmcganNvbiA9ICJ7IFwic2luZ2xlRG91YmxlXCI6ICIgKyBqc29uVmFsdWUg
KyAifSI7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRKc29uRXhjZXB0aW9uPigo
KSA9PiBUZXN0QWxsVHlwZXMuUGFyc2VyLlBhcnNlSnNvbihqc29uKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RDYXNlKCIwIiwgMGYpXQotICAgICAgICBbVGVz
dENhc2UoIjEiLCAxZildCi0gICAgICAgIFtUZXN0Q2FzZSgiMS4wMDAwMDAiLCAxZildCi0gICAg
ICAgIFtUZXN0Q2FzZSgiLTEiLCAtMWYpXQotICAgICAgICBbVGVzdENhc2UoIjMuNDAyODIzZTM4
IiwgMy40MDI4MjNlMzhmKV0KLSAgICAgICAgW1Rlc3RDYXNlKCItMy40MDI4MjNlMzgiLCAtMy40
MDI4MjNlMzhmKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLjVlMSIsIDE1ZildCi0gICAgICAgIFtU
ZXN0Q2FzZSgiMTVlLTEiLCAxLjVmKV0KLSAgICAgICAgcHVibGljIHZvaWQgTnVtYmVyVG9GbG9h
dF9WYWxpZChzdHJpbmcganNvblZhbHVlLCBmbG9hdCBleHBlY3RlZFBhcnNlZFZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcganNvbiA9ICJ7IFwic2luZ2xlRmxvYXRcIjogIiAr
IGpzb25WYWx1ZSArICJ9IjsKLSAgICAgICAgICAgIHZhciBwYXJzZWQgPSBUZXN0QWxsVHlwZXMu
UGFyc2VyLlBhcnNlSnNvbihqc29uKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBl
Y3RlZFBhcnNlZFZhbHVlLCBwYXJzZWQuU2luZ2xlRmxvYXQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSgiMy40MDI4MjRlMzgiLCB0eXBlb2YoSW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKSldCi0gICAgICAgIFtUZXN0Q2FzZSgiLTMuNDAyODI0
ZTM4IiwgdHlwZW9mKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbikpXQotICAgICAgICBb
VGVzdENhc2UoIjEsMCIsIHR5cGVvZihJbnZhbGlkSnNvbkV4Y2VwdGlvbikpXQotICAgICAgICBb
VGVzdENhc2UoIjEuMC4wIiwgdHlwZW9mKEludmFsaWRKc29uRXhjZXB0aW9uKSldCi0gICAgICAg
IFtUZXN0Q2FzZSgiKzEiLCB0eXBlb2YoSW52YWxpZEpzb25FeGNlcHRpb24pKV0KLSAgICAgICAg
W1Rlc3RDYXNlKCIwMCIsIHR5cGVvZihJbnZhbGlkSnNvbkV4Y2VwdGlvbikpXQotICAgICAgICBb
VGVzdENhc2UoIi0tMSIsIHR5cGVvZihJbnZhbGlkSnNvbkV4Y2VwdGlvbikpXQotICAgICAgICBw
dWJsaWMgdm9pZCBOdW1iZXJUb0Zsb2F0X0ludmFsaWQoc3RyaW5nIGpzb25WYWx1ZSwgU3lzdGVt
LlR5cGUgZXhwZWN0ZWRFeGNlcHRpb25UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJp
bmcganNvbiA9ICJ7IFwic2luZ2xlRmxvYXRcIjogIiArIGpzb25WYWx1ZSArICJ9IjsKLSAgICAg
ICAgICAgIEFzc2VydC5UaHJvd3MoZXhwZWN0ZWRFeGNlcHRpb25UeXBlLCAoKSA9PiBUZXN0QWxs
VHlwZXMuUGFyc2VyLlBhcnNlSnNvbihqc29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBU
aGUgc2ltcGxlc3Qgd2F5IG9mIHRlc3RpbmcgdGhhdCB0aGUgdmFsdWUgaGFzIHBhcnNlZCBjb3Jy
ZWN0bHkgaXMgdG8gcmVmb3JtYXQgaXQsCi0gICAgICAgIC8vIGFzIHdlIHRydXN0IHRoZSBmb3Jt
YXR0aW5nLiBJbiBtYW55IGNhc2VzIHRoYXQgd2lsbCBnaXZlIHRoZSBzYW1lIHJlc3VsdCBhcyB0
aGUgaW5wdXQsCi0gICAgICAgIC8vIHNvIGluIHRob3NlIGNhc2VzIHdlIGFjY2VwdCBhbiBleHBl
Y3RlZEZvcm1hdHRlZCB2YWx1ZSBvZiBudWxsLiBTb21ldGltZXMgdGhlIHJlc3VsdHMKLSAgICAg
ICAgLy8gd2lsbCBiZSBkaWZmZXJlbnQgdGhvdWdoLCBkdWUgdG8gYSBkaWZmZXJlbnQgbnVtYmVy
IG9mIGRpZ2l0cyBiZWluZyBwcm92aWRlZC4KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIC8vIFog
b2Zmc2V0Ci0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQxNDo0NjoyMy4xMjM0NTY3ODla
IiwgbnVsbCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQxNDo0NjoyMy4xMjM0NTZa
IiwgbnVsbCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQxNDo0NjoyMy4xMjNaIiwg
bnVsbCldCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQxNDo0NjoyM1oiLCBudWxsKV0K
LSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1NjAwMFoiLCAiMjAx
NS0xMC0wOVQxNDo0NjoyMy4xMjM0NTZaIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0w
OVQxNDo0NjoyMy4xMjM0NTYwWiIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1NloiKV0KLSAg
ICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzAwMDAwMFoiLCAiMjAxNS0x
MC0wOVQxNDo0NjoyMy4xMjNaIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQxNDo0
NjoyMy4xMjMwWiIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyM1oiKV0KLSAgICAgICAgW1Rlc3RD
YXNlKCIyMDE1LTEwLTA5VDE0OjQ2OjIzLjAwWiIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzWiIpXQot
Ci0gICAgICAgIC8vICswMDowMCBvZmZzZXQKLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5
VDE0OjQ2OjIzLjEyMzQ1Njc4OSswMDowMCIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1Njc4
OVoiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1NiswMDow
MCIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1NloiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIy
MDE1LTEwLTA5VDE0OjQ2OjIzLjEyMyswMDowMCIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyM1oi
KV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE0OjQ2OjIzKzAwOjAwIiwgIjIwMTUt
MTAtMDlUMTQ6NDY6MjNaIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQxNDo0Njoy
My4xMjM0NTYwMDArMDA6MDAiLCAiMjAxNS0xMC0wOVQxNDo0NjoyMy4xMjM0NTZaIildCi0gICAg
ICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQxNDo0NjoyMy4xMjM0NTYwKzAwOjAwIiwgIjIwMTUt
MTAtMDlUMTQ6NDY6MjMuMTIzNDU2WiIpXQotICAgICAgICBbVGVzdENhc2UoIjIwMTUtMTAtMDlU
MTQ6NDY6MjMuMTIzMDAwMDAwKzAwOjAwIiwgIjIwMTUtMTAtMDlUMTQ6NDY6MjMuMTIzWiIpXQot
ICAgICAgICBbVGVzdENhc2UoIjIwMTUtMTAtMDlUMTQ6NDY6MjMuMTIzMCswMDowMCIsICIyMDE1
LTEwLTA5VDE0OjQ2OjIzLjEyM1oiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE0
OjQ2OjIzLjAwKzAwOjAwIiwgIjIwMTUtMTAtMDlUMTQ6NDY6MjNaIildCi0KLSAgICAgICAgLy8g
T3RoZXIgb2Zmc2V0cyAoYXNzdW1lIGJ5IG5vdyB0aGF0IHRoZSBzdWJzZWNvbmQgaGFuZGxpbmcg
aXMgb2theSkKLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE1OjQ2OjIzLjEyMzQ1Njc4
OSswMTowMCIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1Njc4OVoiKV0KLSAgICAgICAgW1Rl
c3RDYXNlKCIyMDE1LTEwLTA5VDEzOjQ2OjIzLjEyMzQ1Njc4OS0wMTowMCIsICIyMDE1LTEwLTA5
VDE0OjQ2OjIzLjEyMzQ1Njc4OVoiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE1
OjE2OjIzLjEyMzQ1Njc4OSswMDozMCIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1Njc4OVoi
KV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE0OjE2OjIzLjEyMzQ1Njc4OS0wMDoz
MCIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1Njc4OVoiKV0KLSAgICAgICAgW1Rlc3RDYXNl
KCIyMDE1LTEwLTA5VDE2OjMxOjIzLjEyMzQ1Njc4OSswMTo0NSIsICIyMDE1LTEwLTA5VDE0OjQ2
OjIzLjEyMzQ1Njc4OVoiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDEzOjAxOjIz
LjEyMzQ1Njc4OS0wMTo0NSIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1Njc4OVoiKV0KLSAg
ICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTEwVDA4OjQ2OjIzLjEyMzQ1Njc4OSsxODowMCIsICIy
MDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1Njc4OVoiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1
LTEwLTA4VDIwOjQ2OjIzLjEyMzQ1Njc4OS0xODowMCIsICIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEy
MzQ1Njc4OVoiKV0KLQotICAgICAgICAvLyBMZWFwIHllYXJzIGFuZCBtaW4vbWF4Ci0gICAgICAg
IFtUZXN0Q2FzZSgiMjAxNi0wMi0yOVQxNDo0NjoyMy4xMjM0NTY3ODlaIiwgbnVsbCldCi0gICAg
ICAgIFtUZXN0Q2FzZSgiMjAwMC0wMi0yOVQxNDo0NjoyMy4xMjM0NTY3ODlaIiwgbnVsbCldCi0g
ICAgICAgIFtUZXN0Q2FzZSgiMDAwMS0wMS0wMVQwMDowMDowMFoiLCBudWxsKV0KLSAgICAgICAg
W1Rlc3RDYXNlKCI5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTk5OVoiLCBudWxsKV0KLSAgICAg
ICAgcHVibGljIHZvaWQgVGltZXN0YW1wX1ZhbGlkKHN0cmluZyBqc29uVmFsdWUsIHN0cmluZyBl
eHBlY3RlZEZvcm1hdHRlZCkKLSAgICAgICAgewotICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXR0
ZWQgPSBleHBlY3RlZEZvcm1hdHRlZCA/PyBqc29uVmFsdWU7Ci0gICAgICAgICAgICBzdHJpbmcg
anNvbiA9IFdyYXBJblF1b3Rlcyhqc29uVmFsdWUpOwotICAgICAgICAgICAgdmFyIHBhcnNlZCA9
IFRpbWVzdGFtcC5QYXJzZXIuUGFyc2VKc29uKGpzb24pOwotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKFdyYXBJblF1b3RlcyhleHBlY3RlZEZvcm1hdHRlZCksIHBhcnNlZC5Ub1N0cmluZygp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIjIwMTUt
MTAtMDkgMTQ6NDY6MjMuMTIzNDU2Nzg5WiIsIERlc2NyaXB0aW9uID0gIk5vIFQgYmV0d2VlbiBk
YXRlIGFuZCB0aW1lIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS8xMC8wOVQxNDo0NjoyMy4x
MjM0NTY3ODlaIiwgRGVzY3JpcHRpb24gPSAiV3JvbmcgZGF0ZSBzZXBhcmF0b3JzIildCi0gICAg
ICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQxNC40Ni4yMy4xMjM0NTY3ODlaIiwgRGVzY3JpcHRp
b24gPSAiV3JvbmcgdGltZSBzZXBhcmF0b3JzIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0x
MC0wOVQxNDo0NjoyMywxMjM0NTY3ODlaIiwgRGVzY3JpcHRpb24gPSAiV3JvbmcgZnJhY3Rpb25h
bCBzZWNvbmQgc2VwYXJhdG9ycyAodmFsaWQgSVNPLTg2MDEgdGhvdWdoKSIpXQotICAgICAgICBb
VGVzdENhc2UoIiAyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1Njc4OVoiLCBEZXNjcmlwdGlvbiA9
ICJXaGl0ZXNwYWNlIGF0IHN0YXJ0IildCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQx
NDo0NjoyMy4xMjM0NTY3ODlaICIsIERlc2NyaXB0aW9uID0gIldoaXRlc3BhY2UgYXQgZW5kIild
Ci0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0wOVQxNDo0NjoyMy4xMjM0NTY3ODkwIiwgRGVz
Y3JpcHRpb24gPSAiVG9vIG1hbnkgZGlnaXRzIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0x
MC0wOVQxNDo0NjoyMy4xMjM0NTY3ODkiLCBEZXNjcmlwdGlvbiA9ICJObyBvZmZzZXQiKV0KLSAg
ICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEzLTA5VDE0OjQ2OjIzLjEyMzQ1Njc4OVoiLCBEZXNjcmlw
dGlvbiA9ICJJbnZhbGlkIG1vbnRoIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0zMlQx
NDo0NjoyMy4xMjM0NTY3ODlaIiwgRGVzY3JpcHRpb24gPSAiSW52YWxpZCBkYXkiKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDI0OjAwOjAwLjAwMDAwMDAwMFoiLCBEZXNjcmlwdGlv
biA9ICJJbnZhbGlkIGhvdXIgKHZhbGlkIElTTy04NjAxIHRob3VnaCkiKV0KLSAgICAgICAgW1Rl
c3RDYXNlKCIyMDE1LTEwLTA5VDE0OjYwOjIzLjEyMzQ1Njc4OVoiLCBEZXNjcmlwdGlvbiA9ICJJ
bnZhbGlkIG1pbnV0ZXMiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE0OjQ2OjYw
LjEyMzQ1Njc4OVoiLCBEZXNjcmlwdGlvbiA9ICJJbnZhbGlkIHNlY29uZHMiKV0KLSAgICAgICAg
W1Rlc3RDYXNlKCIyMDE1LTEwLTA5VDE0OjQ2OjIzLjEyMzQ1Njc4OSsxODowMSIsIERlc2NyaXB0
aW9uID0gIk9mZnNldCB0b28gbGFyZ2UgKHBvc2l0aXZlKSIpXQotICAgICAgICBbVGVzdENhc2Uo
IjIwMTUtMTAtMDlUMTQ6NDY6MjMuMTIzNDU2Nzg5LTE4OjAxIiwgRGVzY3JpcHRpb24gPSAiT2Zm
c2V0IHRvbyBsYXJnZSAobmVnYXRpdmUpIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMjAxNS0xMC0w
OVQxNDo0NjoyMy4xMjM0NTY3ODktMDA6MDAiLCBEZXNjcmlwdGlvbiA9ICJMb2NhbCBvZmZzZXQg
KC0wMDowMCkgbWFrZXMgbm8gc2Vuc2UgaGVyZSIpXQotICAgICAgICBbVGVzdENhc2UoIjAwMDEt
MDEtMDFUMDA6MDA6MDArMDA6MDEiLCBEZXNjcmlwdGlvbiA9ICJWYWx1ZSBiZWZvcmUgZWFybGll
c3Qgd2hlbiBvZmZzZXQgYXBwbGllZCIpXQotICAgICAgICBbVGVzdENhc2UoIjk5OTktMTItMzFU
MjM6NTk6NTkuOTk5OTk5OTk5LTAwOjAxIiwgRGVzY3JpcHRpb24gPSAiVmFsdWUgYWZ0ZXIgbGF0
ZXN0IHdoZW4gb2Zmc2V0IGFwcGxpZWQiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIyMTAwLTAyLTI5
VDE0OjQ2OjIzLjEyMzQ1Njc4OVoiLCBEZXNjcmlwdGlvbiA9ICJGZWIgMjl0aCBvbiBhIG5vbi1s
ZWFwLXllYXIiKV0KLSAgICAgICAgcHVibGljIHZvaWQgVGltZXN0YW1wX0ludmFsaWQoc3RyaW5n
IGpzb25WYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGpzb24gPSBXcmFwSW5R
dW90ZXMoanNvblZhbHVlKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uPigoKSA9PiBUaW1lc3RhbXAuUGFyc2VyLlBhcnNlSnNvbihqc29u
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgU3Ry
dWN0VmFsdWVfTnVsbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChu
ZXcgVmFsdWUgeyBOdWxsVmFsdWUgPSAwIH0sIFZhbHVlLlBhcnNlci5QYXJzZUpzb24oIm51bGwi
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgU3Ry
dWN0VmFsdWVfU3RyaW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFs
KG5ldyBWYWx1ZSB7IFN0cmluZ1ZhbHVlID0gImhpIiB9LCBWYWx1ZS5QYXJzZXIuUGFyc2VKc29u
KCJcImhpXCIiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGlj
IHZvaWQgU3RydWN0VmFsdWVfQm9vbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbChuZXcgVmFsdWUgeyBCb29sVmFsdWUgPSB0cnVlIH0sIFZhbHVlLlBhcnNlci5QYXJz
ZUpzb24oInRydWUiKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobmV3IFZhbHVlIHsg
Qm9vbFZhbHVlID0gZmFsc2UgfSwgVmFsdWUuUGFyc2VyLlBhcnNlSnNvbigiZmFsc2UiKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgU3RydWN0VmFs
dWVfTGlzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChWYWx1ZS5G
b3JMaXN0KFZhbHVlLkZvck51bWJlcigxKSwgVmFsdWUuRm9yU3RyaW5nKCJ4IikpLCBWYWx1ZS5Q
YXJzZXIuUGFyc2VKc29uKCJbMSwgXCJ4XCJdIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFBhcnNlTGlzdFZhbHVlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG5ldyBMaXN0VmFsdWUgeyBWYWx1ZXMgPSB7IFZhbHVl
LkZvck51bWJlcigxKSwgVmFsdWUuRm9yU3RyaW5nKCJ4IikgfSB9LCBMaXN0VmFsdWUuUGFyc2Vy
LlBhcnNlSnNvbigiWzEsIFwieFwiXSIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQot
ICAgICAgICBwdWJsaWMgdm9pZCBTdHJ1Y3RWYWx1ZV9TdHJ1Y3QoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoCi0gICAgICAgICAgICAgICAgVmFsdWUuRm9yU3RydWN0
KG5ldyBTdHJ1Y3QgeyBGaWVsZHMgPSB7IHsgIngiLCBWYWx1ZS5Gb3JOdW1iZXIoMSkgfSwgeyAi
eSIsIFZhbHVlLkZvclN0cmluZygieiIpIH0gfSB9KSwKLSAgICAgICAgICAgICAgICBWYWx1ZS5Q
YXJzZXIuUGFyc2VKc29uKCJ7IFwieFwiOiAxLCBcInlcIjogXCJ6XCIgfSIpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBQYXJzZVN0cnVjdCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgU3RydWN0IHsgRmllbGRz
ID0geyB7ICJ4IiwgVmFsdWUuRm9yTnVtYmVyKDEpIH0sIHsgInkiLCBWYWx1ZS5Gb3JTdHJpbmco
InoiKSB9IH0gfSwKLSAgICAgICAgICAgICAgICBTdHJ1Y3QuUGFyc2VyLlBhcnNlSnNvbigieyBc
InhcIjogMSwgXCJ5XCI6IFwielwiIH0iKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUT0RP
IGZvciBkdXJhdGlvbiBwYXJzaW5nOiB1cHBlciBhbmQgbG93ZXIgYm91bmRzLgotICAgICAgICAv
LyArLy0gMzE1NTc2MDAwMDAwIHNlY29uZHMKLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rl
c3RDYXNlKCIxLjEyMzQ1Njc4OXMiLCBudWxsKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLjEyMzQ1
NnMiLCBudWxsKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLjEyM3MiLCBudWxsKV0KLSAgICAgICAg
W1Rlc3RDYXNlKCIxLjEyMzAwcyIsICIxLjEyM3MiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLjEy
MzQ1cyIsICIxLjEyMzQ1MHMiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxcyIsIG51bGwpXQotICAg
ICAgICBbVGVzdENhc2UoIi0xLjEyMzQ1Njc4OXMiLCBudWxsKV0KLSAgICAgICAgW1Rlc3RDYXNl
KCItMS4xMjM0NTZzIiwgbnVsbCldCi0gICAgICAgIFtUZXN0Q2FzZSgiLTEuMTIzcyIsIG51bGwp
XQotICAgICAgICBbVGVzdENhc2UoIi0xcyIsIG51bGwpXQotICAgICAgICBbVGVzdENhc2UoIjAu
MTIzcyIsIG51bGwpXQotICAgICAgICBbVGVzdENhc2UoIi0wLjEyM3MiLCBudWxsKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCIxMjM0NTYuMTIzcyIsIG51bGwpXQotICAgICAgICBbVGVzdENhc2UoIi0x
MjM0NTYuMTIzcyIsIG51bGwpXQotICAgICAgICAvLyBVcHBlciBhbmQgbG93ZXIgYm91bmRzCi0g
ICAgICAgIFtUZXN0Q2FzZSgiMzE1NTc2MDAwMDAwcyIsIG51bGwpXQotICAgICAgICBbVGVzdENh
c2UoIi0zMTU1NzYwMDAwMDBzIiwgbnVsbCldCi0gICAgICAgIHB1YmxpYyB2b2lkIER1cmF0aW9u
X1ZhbGlkKHN0cmluZyBqc29uVmFsdWUsIHN0cmluZyBleHBlY3RlZEZvcm1hdHRlZCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZXhwZWN0ZWRGb3JtYXR0ZWQgPSBleHBlY3RlZEZvcm1hdHRlZCA/
PyBqc29uVmFsdWU7Ci0gICAgICAgICAgICBzdHJpbmcganNvbiA9IFdyYXBJblF1b3Rlcyhqc29u
VmFsdWUpOwotICAgICAgICAgICAgdmFyIHBhcnNlZCA9IER1cmF0aW9uLlBhcnNlci5QYXJzZUpz
b24oanNvbik7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoV3JhcEluUXVvdGVzKGV4cGVj
dGVkRm9ybWF0dGVkKSwgcGFyc2VkLlRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gVGhlIHNpbXBsZXN0IHdheSBvZiB0ZXN0aW5nIHRoYXQgdGhlIHZhbHVlIGhhcyBwYXJzZWQg
Y29ycmVjdGx5IGlzIHRvIHJlZm9ybWF0IGl0LAotICAgICAgICAvLyBhcyB3ZSB0cnVzdCB0aGUg
Zm9ybWF0dGluZy4gSW4gbWFueSBjYXNlcyB0aGF0IHdpbGwgZ2l2ZSB0aGUgc2FtZSByZXN1bHQg
YXMgdGhlIGlucHV0LAotICAgICAgICAvLyBzbyBpbiB0aG9zZSBjYXNlcyB3ZSBhY2NlcHQgYW4g
ZXhwZWN0ZWRGb3JtYXR0ZWQgdmFsdWUgb2YgbnVsbC4gU29tZXRpbWVzIHRoZSByZXN1bHRzCi0g
ICAgICAgIC8vIHdpbGwgYmUgZGlmZmVyZW50IHRob3VnaCwgZHVlIHRvIGEgZGlmZmVyZW50IG51
bWJlciBvZiBkaWdpdHMgYmVpbmcgcHJvdmlkZWQuCi0gICAgICAgIFtUZXN0XQotICAgICAgICBb
VGVzdENhc2UoIjEuMTIzNDU2Nzg5MHMiLCBEZXNjcmlwdGlvbiA9ICJUb28gbWFueSBkaWdpdHMi
KV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLjEyMzQ1Njc4OSIsIERlc2NyaXB0aW9uID0gIk5vIHN1
ZmZpeCIpXQotICAgICAgICBbVGVzdENhc2UoIjEuMTIzNDU2Nzg5c3MiLCBEZXNjcmlwdGlvbiA9
ICJUb28gbXVjaCBzdWZmaXgiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLjEyMzQ1Njc4OVMiLCBE
ZXNjcmlwdGlvbiA9ICJVcHBlciBjYXNlIHN1ZmZpeCIpXQotICAgICAgICBbVGVzdENhc2UoIisx
LjEyMzQ1Njc4OXMiLCBEZXNjcmlwdGlvbiA9ICJMZWFkaW5nICsiKV0KLSAgICAgICAgW1Rlc3RD
YXNlKCIuMTIzNDU2Nzg5cyIsIERlc2NyaXB0aW9uID0gIk5vIGludGVnZXIgYmVmb3JlIHRoZSBm
cmFjdGlvbiIpXQotICAgICAgICBbVGVzdENhc2UoIjEsMTIzNDU2Nzg5cyIsIERlc2NyaXB0aW9u
ID0gIkNvbW1hIGFzIGRlY2ltYWwgc2VwYXJhdG9yIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMXgx
LjEyMzQ1Njc4OXMiLCBEZXNjcmlwdGlvbiA9ICJOb24tZGlnaXQgaW4gaW50ZWdlciBwYXJ0Iild
Ci0gICAgICAgIFtUZXN0Q2FzZSgiMS4xeDM0NTY3ODlzIiwgRGVzY3JpcHRpb24gPSAiTm9uLWRp
Z2l0IGluIGZyYWN0aW9uYWwgcGFydCIpXQotICAgICAgICBbVGVzdENhc2UoIiAxLjEyMzQ1Njc4
OXMiLCBEZXNjcmlwdGlvbiA9ICJXaGl0ZXNwYWNlIGJlZm9yZSBmcmFjdGlvbiIpXQotICAgICAg
ICBbVGVzdENhc2UoIjEuMTIzNDU2Nzg5cyAiLCBEZXNjcmlwdGlvbiA9ICJXaGl0ZXNwYWNlIGFm
dGVyIHZhbHVlIildCi0gICAgICAgIFtUZXN0Q2FzZSgiMDEuMTIzNDU2Nzg5cyIsIERlc2NyaXB0
aW9uID0gIkxlYWRpbmcgemVybyAocG9zaXRpdmUpIildCi0gICAgICAgIFtUZXN0Q2FzZSgiLTAx
LjEyMzQ1Njc4OXMiLCBEZXNjcmlwdGlvbiA9ICJMZWFkaW5nIHplcm8gKG5lZ2F0aXZlKSIpXQot
ICAgICAgICBbVGVzdENhc2UoIi0tMC4xMjM0NTY3ODlzIiwgRGVzY3JpcHRpb24gPSAiRG91Ymxl
IG1pbnVzIHNpZ24iKV0KLSAgICAgICAgLy8gVmlvbGF0ZSB1cHBlci9sb3dlciBib3VuZHMgaW4g
dmFyaW91cyB3YXlzCi0gICAgICAgIFtUZXN0Q2FzZSgiMzE1NTc2MDAwMDAxcyIsIERlc2NyaXB0
aW9uID0gIkludGVnZXIgcGFydCB0b28gbGFyZ2UiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIzMTU1
NzYwMDAwMDAwcyIsIERlc2NyaXB0aW9uID0gIkludGVnZXIgcGFydCB0b28gbG9uZyAocG9zaXRp
dmUpIildCi0gICAgICAgIFtUZXN0Q2FzZSgiLTMxNTU3NjAwMDAwMDBzIiwgRGVzY3JpcHRpb24g
PSAiSW50ZWdlciBwYXJ0IHRvbyBsb25nIChuZWdhdGl2ZSkiKV0KLSAgICAgICAgcHVibGljIHZv
aWQgRHVyYXRpb25fSW52YWxpZChzdHJpbmcganNvblZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzdHJpbmcganNvbiA9IFdyYXBJblF1b3Rlcyhqc29uVmFsdWUpOwotICAgICAgICAgICAg
QXNzZXJ0LlRocm93czxJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24+KCgpID0+IER1cmF0
aW9uLlBhcnNlci5QYXJzZUpzb24oanNvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm90
IGFzIG1hbnkgdGVzdHMgZm9yIGZpZWxkIG1hc2tzIGFzIEknZCBsaWtlOyBtb3JlIHRvIGJlIGFk
ZGVkIHdoZW4gd2UgaGF2ZSBtb3JlCi0gICAgICAgIC8vIGRldGFpbGVkIHNwZWNpZmljYXRpb25z
LgotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIiIpXQotICAgICAgICBbVGVz
dENhc2UoImZvbyIsICJmb28iKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJmb28sYmFyIiwgImZvbyIs
ICJiYXIiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJmb28uYmFyIiwgImZvby5iYXIiKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCJmb29CYXIiLCAiZm9vX2JhciIpXQotICAgICAgICBbVGVzdENhc2UoImZv
b0Jhci5iYXpRdXgiLCAiZm9vX2Jhci5iYXpfcXV4IildCi0gICAgICAgIHB1YmxpYyB2b2lkIEZp
ZWxkTWFza19WYWxpZChzdHJpbmcganNvblZhbHVlLCBwYXJhbXMgc3RyaW5nW10gZXhwZWN0ZWRQ
YXRocykKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGpzb24gPSBXcmFwSW5RdW90ZXMo
anNvblZhbHVlKTsKLSAgICAgICAgICAgIHZhciBwYXJzZWQgPSBGaWVsZE1hc2suUGFyc2VyLlBh
cnNlSnNvbihqc29uKTsKLSAgICAgICAgICAgIENvbGxlY3Rpb25Bc3NlcnQuQXJlRXF1YWwoZXhw
ZWN0ZWRQYXRocywgcGFyc2VkLlBhdGhzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQot
ICAgICAgICBbVGVzdENhc2UoImZvb19iYXIiKV0KLSAgICAgICAgcHVibGljIHZvaWQgRmllbGRN
YXNrX0ludmFsaWQoc3RyaW5nIGpzb25WYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgc3Ry
aW5nIGpzb24gPSBXcmFwSW5RdW90ZXMoanNvblZhbHVlKTsKLSAgICAgICAgICAgIEFzc2VydC5U
aHJvd3M8SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uPigoKSA9PiBGaWVsZE1hc2suUGFy
c2VyLlBhcnNlSnNvbihqc29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAg
ICAgcHVibGljIHZvaWQgQW55X1JlZ3VsYXJNZXNzYWdlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdmFyIHJlZ2lzdHJ5ID0gVHlwZVJlZ2lzdHJ5LkZyb21NZXNzYWdlcyhUZXN0QWxsVHlwZXMu
RGVzY3JpcHRvcik7Ci0gICAgICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEpzb25Gb3JtYXR0
ZXIobmV3IEpzb25Gb3JtYXR0ZXIuU2V0dGluZ3MoZmFsc2UsIFR5cGVSZWdpc3RyeS5Gcm9tTWVz
c2FnZXMoVGVzdEFsbFR5cGVzLkRlc2NyaXB0b3IpKSk7Ci0gICAgICAgICAgICB2YXIgbWVzc2Fn
ZSA9IG5ldyBUZXN0QWxsVHlwZXMgeyBTaW5nbGVJbnQzMiA9IDEwLCBTaW5nbGVOZXN0ZWRNZXNz
YWdlID0gbmV3IFRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlIHsgQmIgPSAyMCB9IH07
Ci0gICAgICAgICAgICB2YXIgb3JpZ2luYWwgPSBBbnkuUGFjayhtZXNzYWdlKTsKLSAgICAgICAg
ICAgIHZhciBqc29uID0gZm9ybWF0dGVyLkZvcm1hdChvcmlnaW5hbCk7IC8vIFRoaXMgaXMgdGVz
dGVkIGluIEpzb25Gb3JtYXR0ZXJUZXN0Ci0gICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IEpz
b25QYXJzZXIobmV3IEpzb25QYXJzZXIuU2V0dGluZ3MoMTAsIHJlZ2lzdHJ5KSk7Ci0gICAgICAg
ICAgICBBc3NlcnQuQXJlRXF1YWwob3JpZ2luYWwsIHBhcnNlci5QYXJzZTxBbnk+KGpzb24pKTsK
LSAgICAgICAgICAgIHN0cmluZyB2YWx1ZUZpcnN0SnNvbiA9ICJ7IFwic2luZ2xlSW50MzJcIjog
MTAsIFwic2luZ2xlTmVzdGVkTWVzc2FnZVwiOiB7IFwiYmJcIjogMjAgfSwgXCJAdHlwZVwiOiBc
InR5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzXCIgfSI7
Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwob3JpZ2luYWwsIHBhcnNlci5QYXJzZTxBbnk+
KHZhbHVlRmlyc3RKc29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgQW55X0N1c3RvbVByZWZpeCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZh
ciByZWdpc3RyeSA9IFR5cGVSZWdpc3RyeS5Gcm9tTWVzc2FnZXMoVGVzdEFsbFR5cGVzLkRlc2Ny
aXB0b3IpOwotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzIHsgU2lu
Z2xlSW50MzIgPSAxMCB9OwotICAgICAgICAgICAgdmFyIG9yaWdpbmFsID0gQW55LlBhY2sobWVz
c2FnZSwgImN1c3RvbS5wcmVmaXgvbWlkZGxlLXBhcnQiKTsKLSAgICAgICAgICAgIHZhciBwYXJz
ZXIgPSBuZXcgSnNvblBhcnNlcihuZXcgSnNvblBhcnNlci5TZXR0aW5ncygxMCwgcmVnaXN0cnkp
KTsKLSAgICAgICAgICAgIHN0cmluZyBqc29uID0gInsgXCJAdHlwZVwiOiBcImN1c3RvbS5wcmVm
aXgvbWlkZGxlLXBhcnQvcHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzXCIsIFwic2luZ2xl
SW50MzJcIjogMTAgfSI7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwob3JpZ2luYWwsIHBh
cnNlci5QYXJzZTxBbnk+KGpzb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAg
ICAgICBwdWJsaWMgdm9pZCBBbnlfVW5rbm93blR5cGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzdHJpbmcganNvbiA9ICJ7IFwiQHR5cGVcIjogXCJ0eXBlLmdvb2dsZWFwaXMuY29tL2JvZ3Vz
XCIgfSI7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRPcGVyYXRpb25FeGNlcHRp
b24+KCgpID0+IEFueS5QYXJzZXIuUGFyc2VKc29uKGpzb24pKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBBbnlfTm9UeXBlVXJsKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgc3RyaW5nIGpzb24gPSAieyBcImZvb1wiOiBcImJhclwiIH0iOwotICAg
ICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24+KCgp
ID0+IEFueS5QYXJzZXIuUGFyc2VKc29uKGpzb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtU
ZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBBbnlfV2VsbEtub3duVHlwZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZhciByZWdpc3RyeSA9IFR5cGVSZWdpc3RyeS5Gcm9tTWVzc2FnZXMoVGlt
ZXN0YW1wLkRlc2NyaXB0b3IpOwotICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBKc29u
Rm9ybWF0dGVyKG5ldyBKc29uRm9ybWF0dGVyLlNldHRpbmdzKGZhbHNlLCByZWdpc3RyeSkpOwot
ICAgICAgICAgICAgdmFyIHRpbWVzdGFtcCA9IG5ldyBEYXRlVGltZSgxNjczLCA2LCAxOSwgMTIs
IDM0LCA1NiwgRGF0ZVRpbWVLaW5kLlV0YykuVG9UaW1lc3RhbXAoKTsKLSAgICAgICAgICAgIHZh
ciBvcmlnaW5hbCA9IEFueS5QYWNrKHRpbWVzdGFtcCk7Ci0gICAgICAgICAgICB2YXIganNvbiA9
IGZvcm1hdHRlci5Gb3JtYXQob3JpZ2luYWwpOyAvLyBUaGlzIGlzIHRlc3RlZCBpbiBKc29uRm9y
bWF0dGVyVGVzdAotICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBKc29uUGFyc2VyKG5ldyBK
c29uUGFyc2VyLlNldHRpbmdzKDEwLCByZWdpc3RyeSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKG9yaWdpbmFsLCBwYXJzZXIuUGFyc2U8QW55Pihqc29uKSk7Ci0gICAgICAgICAgICBz
dHJpbmcgdmFsdWVGaXJzdEpzb24gPSAieyBcInZhbHVlXCI6IFwiMTY3My0wNi0xOVQxMjozNDo1
NlpcIiwgXCJAdHlwZVwiOiBcInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRp
bWVzdGFtcFwiIH0iOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG9yaWdpbmFsLCBwYXJz
ZXIuUGFyc2U8QW55Pih2YWx1ZUZpcnN0SnNvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEFueV9OZXN0ZWQoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB2YXIgcmVnaXN0cnkgPSBUeXBlUmVnaXN0cnkuRnJvbU1lc3NhZ2VzKFRlc3RXZWxsS25v
d25UeXBlcy5EZXNjcmlwdG9yLCBUZXN0QWxsVHlwZXMuRGVzY3JpcHRvcik7Ci0gICAgICAgICAg
ICB2YXIgZm9ybWF0dGVyID0gbmV3IEpzb25Gb3JtYXR0ZXIobmV3IEpzb25Gb3JtYXR0ZXIuU2V0
dGluZ3MoZmFsc2UsIHJlZ2lzdHJ5KSk7Ci0gICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IEpz
b25QYXJzZXIobmV3IEpzb25QYXJzZXIuU2V0dGluZ3MoMTAsIHJlZ2lzdHJ5KSk7Ci0gICAgICAg
ICAgICB2YXIgZG91YmxlTmVzdGVkTWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXMgeyBTaW5nbGVJ
bnQzMiA9IDIwIH07Ci0gICAgICAgICAgICB2YXIgbmVzdGVkTWVzc2FnZSA9IEFueS5QYWNrKGRv
dWJsZU5lc3RlZE1lc3NhZ2UpOwotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVzdFdl
bGxLbm93blR5cGVzIHsgQW55RmllbGQgPSBBbnkuUGFjayhuZXN0ZWRNZXNzYWdlKSB9OwotICAg
ICAgICAgICAgdmFyIGpzb24gPSBmb3JtYXR0ZXIuRm9ybWF0KG1lc3NhZ2UpOwotICAgICAgICAg
ICAgLy8gVXNlIHRoZSBkZXNjcmlwdG9yLWJhc2VkIHBhcnNlciBqdXN0IGZvciBhIGNoYW5nZS4K
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLCBwYXJzZXIuUGFyc2UoanNvbiwg
VGVzdFdlbGxLbm93blR5cGVzLkRlc2NyaXB0b3IpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtU
ZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBEYXRhQWZ0ZXJPYmplY3QoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzdHJpbmcganNvbiA9ICJ7fSAxMCI7Ci0gICAgICAgICAgICBBc3NlcnQuVGhy
b3dzPEludmFsaWRKc29uRXhjZXB0aW9uPigoKSA9PiBUZXN0QWxsVHlwZXMuUGFyc2VyLlBhcnNl
SnNvbihqc29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBKU09OIGVxdWl2YWxlbnQgdG8gPHNlZSBjcmVmPSJDb2RlZElucHV0U3RyZWFtVGVzdC5N
YWxpY2lvdXNSZWN1cnNpb24iLz4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIE1hbGljaW91c1JlY3Vyc2lvbigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHN0cmluZyBkYXRhNjQgPSBDb2RlZElucHV0U3RyZWFtVGVzdC5NYWtlUmVj
dXJzaXZlTWVzc2FnZSg2NCkuVG9TdHJpbmcoKTsKLSAgICAgICAgICAgIHN0cmluZyBkYXRhNjUg
PSBDb2RlZElucHV0U3RyZWFtVGVzdC5NYWtlUmVjdXJzaXZlTWVzc2FnZSg2NSkuVG9TdHJpbmco
KTsKLQotICAgICAgICAgICAgdmFyIHBhcnNlcjY0ID0gbmV3IEpzb25QYXJzZXIobmV3IEpzb25Q
YXJzZXIuU2V0dGluZ3MoNjQpKTsKLSAgICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW1UZXN0LkFz
c2VydE1lc3NhZ2VEZXB0aChwYXJzZXI2NC5QYXJzZTxUZXN0UmVjdXJzaXZlTWVzc2FnZT4oZGF0
YTY0KSwgNjQpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkUHJvdG9jb2xCdWZm
ZXJFeGNlcHRpb24+KCgpID0+IHBhcnNlcjY0LlBhcnNlPFRlc3RSZWN1cnNpdmVNZXNzYWdlPihk
YXRhNjUpKTsKLQotICAgICAgICAgICAgdmFyIHBhcnNlcjYzID0gbmV3IEpzb25QYXJzZXIobmV3
IEpzb25QYXJzZXIuU2V0dGluZ3MoNjMpKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52
YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uPigoKSA9PiBwYXJzZXI2My5QYXJzZTxUZXN0UmVj
dXJzaXZlTWVzc2FnZT4oZGF0YTY0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAg
ICAgICAgW1Rlc3RDYXNlKCJBUUkiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJfLT09IildCi0gICAg
ICAgIHB1YmxpYyB2b2lkIEJ5dGVzX0ludmFsaWRCYXNlNjQoc3RyaW5nIGJhZEJhc2U2NCkKLSAg
ICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGpzb24gPSAieyBcInNpbmdsZUJ5dGVzXCI6IFwi
IiArIGJhZEJhc2U2NCArICJcIiB9IjsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uPigoKSA9PiBUZXN0QWxsVHlwZXMuUGFyc2VyLlBhcnNl
SnNvbihqc29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RD
YXNlKCJcIkZPUkVJR05fQkFSXCIiLCBGb3JlaWduRW51bS5Gb3JlaWduQmFyKV0KLSAgICAgICAg
W1Rlc3RDYXNlKCI1IiwgRm9yZWlnbkVudW0uRm9yZWlnbkJhcildCi0gICAgICAgIFtUZXN0Q2Fz
ZSgiMTAwIiwgKEZvcmVpZ25FbnVtKTEwMCldCi0gICAgICAgIHB1YmxpYyB2b2lkIEVudW1WYWxp
ZChzdHJpbmcgdmFsdWUsIEZvcmVpZ25FbnVtIGV4cGVjdGVkVmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHN0cmluZyBqc29uID0gInsgXCJzaW5nbGVGb3JlaWduRW51bVwiOiAiICsgdmFs
dWUgKyAiIH0iOwotICAgICAgICAgICAgdmFyIHBhcnNlZCA9IFRlc3RBbGxUeXBlcy5QYXJzZXIu
UGFyc2VKc29uKGpzb24pOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG5ldyBUZXN0QWxs
VHlwZXMgeyBTaW5nbGVGb3JlaWduRW51bSA9IGV4cGVjdGVkVmFsdWUgfSwgcGFyc2VkKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIlwiTk9UX0FfVkFM
SURfVkFMVUVcIiIpXQotICAgICAgICBbVGVzdENhc2UoIjUuNSIpXQotICAgICAgICBwdWJsaWMg
dm9pZCBFbnVtX0ludmFsaWQoc3RyaW5nIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBz
dHJpbmcganNvbiA9ICJ7IFwic2luZ2xlRm9yZWlnbkVudW1cIjogIiArIHZhbHVlICsgIiB9IjsK
LSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
PigoKSA9PiBUZXN0QWxsVHlwZXMuUGFyc2VyLlBhcnNlSnNvbihqc29uKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgT25lb2ZEdXBsaWNhdGVfSW52
YWxpZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyBqc29uID0gInsgXCJvbmVvZlN0
cmluZ1wiOiBcInhcIiwgXCJvbmVvZlVpbnQzMlwiOiAxMCB9IjsKLSAgICAgICAgICAgIEFzc2Vy
dC5UaHJvd3M8SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uPigoKSA9PiBUZXN0QWxsVHlw
ZXMuUGFyc2VyLlBhcnNlSnNvbihqc29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBWYXJpb3VzIHRlc3RzIHVzZSBzdHJpbmdzIHdoaWNoIGhhdmUg
cXVvdGVzIHJvdW5kIHRoZW0gZm9yIHBhcnNpbmcgb3IgYXMgdGhlIHJlc3VsdAotICAgICAgICAv
Ly8gb2YgZm9ybWF0dGluZywgYnV0IHdpdGhvdXQgdGhvc2UgcXVvdGVzIGJlaW5nIHNwZWNpZmll
ZCBpbiB0aGUgdGVzdHMgKGZvciB0aGUgc2FrZSBvZiByZWFkYWJpbGl0eSkuCi0gICAgICAgIC8v
LyBUaGlzIG1ldGhvZCBzaW1wbHkgcmV0dXJucyB0aGUgaW5wdXQsIHdyYXBwZWQgaW4gZG91Ymxl
IHF1b3Rlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgc3RhdGlj
IHN0cmluZyBXcmFwSW5RdW90ZXMoc3RyaW5nIHRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAnIicgKyB0ZXh0ICsgJyInOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYu
VGVzdC9Kc29uVG9rZW5pemVyVGVzdC5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVz
dC9Kc29uVG9rZW5pemVyVGVzdC5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3
YWIzMzYxZTlmNzcxZjRhYTRiNWM3NTZlNjM5YTFiNDNmYzE5Ni4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRl
c3QvSnNvblRva2VuaXplclRlc3QuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MDggKzAsMCBAQAot
77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLXVzaW5nIE5Vbml0LkZyYW1ld29yazsKLXVz
aW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5JTzsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1
ZgotewotICAgIHB1YmxpYyBjbGFzcyBKc29uVG9rZW5pemVyVGVzdAotICAgIHsKLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEVtcHR5T2JqZWN0VmFsdWUoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBc3NlcnRUb2tlbnMoInt9IiwgSnNvblRva2VuLlN0YXJ0T2JqZWN0LCBK
c29uVG9rZW4uRW5kT2JqZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAg
ICBwdWJsaWMgdm9pZCBFbXB0eUFycmF5VmFsdWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBB
c3NlcnRUb2tlbnMoIltdIiwgSnNvblRva2VuLlN0YXJ0QXJyYXksIEpzb25Ub2tlbi5FbmRBcnJh
eSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RDYXNlKCJmb28i
LCAiZm9vIildCi0gICAgICAgIFtUZXN0Q2FzZSgidGFiXFx0IiwgInRhYlx0IildCi0gICAgICAg
IFtUZXN0Q2FzZSgibGluZVxcbmZlZWQiLCAibGluZVxuZmVlZCIpXQotICAgICAgICBbVGVzdENh
c2UoImNhcnJpYWdlXFxycmV0dXJuIiwgImNhcnJpYWdlXHJyZXR1cm4iKV0KLSAgICAgICAgW1Rl
c3RDYXNlKCJiYWNrXFxic3BhY2UiLCAiYmFja1xic3BhY2UiKV0KLSAgICAgICAgW1Rlc3RDYXNl
KCJmb3JtXFxmZmVlZCIsICJmb3JtXGZmZWVkIildCi0gICAgICAgIFtUZXN0Q2FzZSgiZXNjYXBl
ZFxcL3NsYXNoIiwgImVzY2FwZWQvc2xhc2giKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJlc2NhcGVk
XFxcXGJhY2tzbGFzaCIsICJlc2NhcGVkXFxiYWNrc2xhc2giKV0KLSAgICAgICAgW1Rlc3RDYXNl
KCJlc2NhcGVkXFxcInF1b3RlIiwgImVzY2FwZWRcInF1b3RlIildCi0gICAgICAgIFtUZXN0Q2Fz
ZSgiZm9vIHt9W10gYmFyIiwgImZvbyB7fVtdIGJhciIpXQotICAgICAgICBbVGVzdENhc2UoImZv
b1xcdTA5YUZiYXIiLCAiZm9vXHUwOWFmYmFyIildIC8vIERpZ2l0cywgdXBwZXIgaGV4LCBsb3dl
ciBoZXgKLSAgICAgICAgW1Rlc3RDYXNlKCJhYlx1ZDgwMFx1ZGMwMGNkIiwgImFiXHVkODAwXHVk
YzAwY2QiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJhYlxcdWQ4MDBcXHVkYzAwY2QiLCAiYWJcdWQ4
MDBcdWRjMDBjZCIpXQotICAgICAgICBwdWJsaWMgdm9pZCBTdHJpbmdWYWx1ZShzdHJpbmcganNv
biwgc3RyaW5nIGV4cGVjdGVkVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydFRv
a2Vuc05vUmVwbGFjZW1lbnQoIlwiIiArIGpzb24gKyAiXCIiLCBKc29uVG9rZW4uVmFsdWUoZXhw
ZWN0ZWRWYWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVmFsaWQgc3Vycm9nYXRlIHBh
aXJzLCB3aXRoIG1peGVkIGVzY2FwaW5nLiBUaGVzZSB0ZXN0IGNhc2VzIGNhbid0IGJlIGV4cHJl
c3NlZAotICAgICAgICAvLyB1c2luZyBUZXN0Q2FzZSBhcyB0aGV5IGhhdmUgbm8gdmFsaWQgVVRG
LTggcmVwcmVzZW50YXRpb24uCi0gICAgICAgIC8vIEl0J3MgdW5jbGVhciBleGFjdGx5IGhvdyB3
ZSBzaG91bGQgaGFuZGxlIGEgbWl4dHVyZSBvZiBlc2NhcGVkIG9yIG5vdDogdGhhdCBjYW4ndAot
ICAgICAgICAvLyBjb21lIGZyb20gVVRGLTggdGV4dCwgYnV0IGNvdWxkIGNvbWUgZnJvbSBhIC5O
RVQgc3RyaW5nLiBGb3IgdGhlIG1vbWVudCwKLSAgICAgICAgLy8gdHJlYXQgaXQgYXMgdmFsaWQg
aW4gdGhlIG9idmlvdXMgd2F5LgotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQg
TWl4ZWRTdXJyb2dhdGVQYWlycygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyBleHBl
Y3RlZCA9ICJcdWQ4MDBcdWRjMDAiOwotICAgICAgICAgICAgQXNzZXJ0VG9rZW5zKCInXFx1ZDgw
MFx1ZGMwMCciLCBKc29uVG9rZW4uVmFsdWUoZXhwZWN0ZWQpKTsKLSAgICAgICAgICAgIEFzc2Vy
dFRva2VucygiJ1x1ZDgwMFxcdWRjMDAnIiwgSnNvblRva2VuLlZhbHVlKGV4cGVjdGVkKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgT2JqZWN0RGVw
dGgoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcganNvbiA9ICJ7IFwiZm9vXCI6IHsg
XCJ4XCI6IDEsIFwieVwiOiBbIDAgXSB9IH0iOwotICAgICAgICAgICAgdmFyIHRva2VuaXplciA9
IEpzb25Ub2tlbml6ZXIuRnJvbVRleHRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihqc29uKSk7Ci0g
ICAgICAgICAgICAvLyBJZiB3ZSBoYWQgbW9yZSB0ZXN0cyBsaWtlIHRoaXMsIEknZCBpbnRyb2R1
Y2UgYSBoZWxwZXIgbWV0aG9kLi4uIGJ1dCBmb3Igb25lIHRlc3QsIGl0J3Mgbm90IHdvcnRoIGl0
LgotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIHRva2VuaXplci5PYmplY3REZXB0aCk7
Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoSnNvblRva2VuLlN0YXJ0T2JqZWN0LCB0b2tl
bml6ZXIuTmV4dCgpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxLCB0b2tlbml6ZXIu
T2JqZWN0RGVwdGgpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKEpzb25Ub2tlbi5OYW1l
KCJmb28iKSwgdG9rZW5pemVyLk5leHQoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
MSwgdG9rZW5pemVyLk9iamVjdERlcHRoKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChK
c29uVG9rZW4uU3RhcnRPYmplY3QsIHRva2VuaXplci5OZXh0KCkpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKDIsIHRva2VuaXplci5PYmplY3REZXB0aCk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoSnNvblRva2VuLk5hbWUoIngiKSwgdG9rZW5pemVyLk5leHQoKSk7Ci0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMiwgdG9rZW5pemVyLk9iamVjdERlcHRoKTsKLSAgICAg
ICAgICAgIEFzc2VydC5BcmVFcXVhbChKc29uVG9rZW4uVmFsdWUoMSksIHRva2VuaXplci5OZXh0
KCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDIsIHRva2VuaXplci5PYmplY3REZXB0
aCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoSnNvblRva2VuLk5hbWUoInkiKSwgdG9r
ZW5pemVyLk5leHQoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMiwgdG9rZW5pemVy
Lk9iamVjdERlcHRoKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChKc29uVG9rZW4uU3Rh
cnRBcnJheSwgdG9rZW5pemVyLk5leHQoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
MiwgdG9rZW5pemVyLk9iamVjdERlcHRoKTsgLy8gRGVwdGggaGFzbid0IGNoYW5nZWQgaW4gYXJy
YXkKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChKc29uVG9rZW4uVmFsdWUoMCksIHRva2Vu
aXplci5OZXh0KCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDIsIHRva2VuaXplci5P
YmplY3REZXB0aCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoSnNvblRva2VuLkVuZEFy
cmF5LCB0b2tlbml6ZXIuTmV4dCgpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgyLCB0
b2tlbml6ZXIuT2JqZWN0RGVwdGgpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKEpzb25U
b2tlbi5FbmRPYmplY3QsIHRva2VuaXplci5OZXh0KCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKDEsIHRva2VuaXplci5PYmplY3REZXB0aCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoSnNvblRva2VuLkVuZE9iamVjdCwgdG9rZW5pemVyLk5leHQoKSk7Ci0gICAgICAgICAg
ICBBc3NlcnQuQXJlRXF1YWwoMCwgdG9rZW5pemVyLk9iamVjdERlcHRoKTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbChKc29uVG9rZW4uRW5kRG9jdW1lbnQsIHRva2VuaXplci5OZXh0KCkp
OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDAsIHRva2VuaXplci5PYmplY3REZXB0aCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgT2JqZWN0
RGVwdGhfV2l0aFB1c2hCYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGpzb24g
PSAie30iOwotICAgICAgICAgICAgdmFyIHRva2VuaXplciA9IEpzb25Ub2tlbml6ZXIuRnJvbVRl
eHRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihqc29uKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoMCwgdG9rZW5pemVyLk9iamVjdERlcHRoKTsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9
IHRva2VuaXplci5OZXh0KCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwgdG9rZW5p
emVyLk9iamVjdERlcHRoKTsKLSAgICAgICAgICAgIC8vIFdoZW4gd2UgcHVzaCBiYWNrIGEgInN0
YXJ0IG9iamVjdCIsIHdlIHNob3VsZCBlZmZlY3RpdmVseSBiZSBiYWNrIHRvIHRoZSBwcmV2aW91
cyBkZXB0aC4KLSAgICAgICAgICAgIHRva2VuaXplci5QdXNoQmFjayh0b2tlbik7Ci0gICAgICAg
ICAgICBBc3NlcnQuQXJlRXF1YWwoMCwgdG9rZW5pemVyLk9iamVjdERlcHRoKTsKLSAgICAgICAg
ICAgIC8vIFJlYWQgdGhlIHNhbWUgdG9rZW4gYWdhaW4sIGFuZCBnZXQgYmFjayB0byBkZXB0aCAx
Ci0gICAgICAgICAgICB0b2tlbiA9IHRva2VuaXplci5OZXh0KCk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoMSwgdG9rZW5pemVyLk9iamVjdERlcHRoKTsKLQotICAgICAgICAgICAgLy8g
Tm93IHRoZSBzYW1lIGluIHJldmVyc2UsIHdpdGggRW5kT2JqZWN0Ci0gICAgICAgICAgICB0b2tl
biA9IHRva2VuaXplci5OZXh0KCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMCwgdG9r
ZW5pemVyLk9iamVjdERlcHRoKTsKLSAgICAgICAgICAgIHRva2VuaXplci5QdXNoQmFjayh0b2tl
bik7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMSwgdG9rZW5pemVyLk9iamVjdERlcHRo
KTsKLSAgICAgICAgICAgIHRva2VuaXplci5OZXh0KCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoMCwgdG9rZW5pemVyLk9iamVjdERlcHRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtU
ZXN0XQotICAgICAgICBbVGVzdENhc2UoImVtYmVkZGVkIHRhYlx0IildCi0gICAgICAgIFtUZXN0
Q2FzZSgiZW1iZWRkZWQgQ1JcciIpXQotICAgICAgICBbVGVzdENhc2UoImVtYmVkZGVkIExGXG4i
KV0KLSAgICAgICAgW1Rlc3RDYXNlKCJlbWJlZGRlZCBiZWxsXHUwMDA3IildCi0gICAgICAgIFtU
ZXN0Q2FzZSgiYmFkIGVzY2FwZVxcYSIpXQotICAgICAgICBbVGVzdENhc2UoImluY29tcGxldGUg
ZXNjYXBlXFwiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJpbmNvbXBsZXRlIFVuaWNvZGUgZXNjYXBl
XFx1MDAwIildCi0gICAgICAgIFtUZXN0Q2FzZSgiaW52YWxpZCBVbmljb2RlIGVzY2FwZVxcdTAw
MEgiKV0KLSAgICAgICAgLy8gU3Vycm9nYXRlIHBhaXIgaGFuZGxpbmcsIGJvdGggaW4gcmF3IC5O
RVQgc3RyaW5ncyBhbmQgZXNjYXBlZC4gV2Ugb25seSBuZWVkCi0gICAgICAgIC8vIHRvIGRldGVj
dCB0aGlzIGluIHN0cmluZ3MsIGFzIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFueXdoZXJlIG90aGVy
IHRoYW4gaW4gc3RyaW5ncwotICAgICAgICAvLyB3aWxsIGFscmVhZHkgbGVhZCB0byBwYXJzaW5n
IGVycm9ycy4KLSAgICAgICAgW1Rlc3RDYXNlKCJcXHVkODAwIildCi0gICAgICAgIFtUZXN0Q2Fz
ZSgiXFx1ZGMwMCIpXQotICAgICAgICBbVGVzdENhc2UoIlxcdWQ4MDB4IildCi0gICAgICAgIFtU
ZXN0Q2FzZSgiXFx1ZGMwMHgiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJcXHVkYzAwXFx1ZDgwMHki
KV0KLSAgICAgICAgcHVibGljIHZvaWQgSW52YWxpZFN0cmluZ1ZhbHVlKHN0cmluZyBqc29uKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnRUaHJvd3NBZnRlcigiXCIiICsganNvbiArICJc
IiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVzdHMgZm9yIGludmFsaWQgc3RyaW5ncyB0
aGF0IGNhbid0IGJlIGV4cHJlc3NlZCBpbiBhdHRyaWJ1dGVzLAotICAgICAgICAvLyBhcyB0aGUg
Y29uc3RhbnRzIGNhbid0IGJlIGV4cHJlc3NlZCBhcyBVVEYtOCBzdHJpbmdzLgotICAgICAgICBb
VGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgSW52YWxpZFN1cnJvZ2F0ZVBhaXJzKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgQXNzZXJ0VGhyb3dzQWZ0ZXIoIlwiXHVkODAweFwiIik7Ci0gICAg
ICAgICAgICBBc3NlcnRUaHJvd3NBZnRlcigiXCJcdWRjMDB5XCIiKTsKLSAgICAgICAgICAgIEFz
c2VydFRocm93c0FmdGVyKCJcIlx1ZGMwMFx1ZDgwMHlcIiIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgW1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSgiMCIsIDApXQotICAgICAgICBbVGVzdENhc2Uo
Ii0wIiwgMCldIC8vIFdlIGRvbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gcG9zaXRpdmUgYW5kIG5l
Z2F0aXZlIDAKLSAgICAgICAgW1Rlc3RDYXNlKCIxIiwgMSldCi0gICAgICAgIFtUZXN0Q2FzZSgi
LTEiLCAtMSldCi0gICAgICAgIC8vIEZyb20gaGVyZSBvbiwgYXNzdW1lIGxlYWRpbmcgc2lnbiBp
cyBva2F5Li4uCi0gICAgICAgIFtUZXN0Q2FzZSgiMS4xMjUiLCAxLjEyNSldCi0gICAgICAgIFtU
ZXN0Q2FzZSgiMS4wIiwgMSldCi0gICAgICAgIFtUZXN0Q2FzZSgiMWU1IiwgMTAwMDAwKV0KLSAg
ICAgICAgW1Rlc3RDYXNlKCIxZTAwMDAwMCIsIDEpXSAvLyBXZWlyZCwgYnV0IG5vdCBwcm9oaWJp
dGVkIGJ5IHRoZSBzcGVjCi0gICAgICAgIFtUZXN0Q2FzZSgiMUU1IiwgMTAwMDAwKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCIxZSs1IiwgMTAwMDAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxRS01Iiwg
MC4wMDAwMSldCi0gICAgICAgIFtUZXN0Q2FzZSgiMTIzRS0yIiwgMS4yMyldCi0gICAgICAgIFtU
ZXN0Q2FzZSgiMTIzLjQ1RTMiLCAxMjM0NTApXQotICAgICAgICBbVGVzdENhc2UoIiAgIDEgICAi
LCAxKV0KLSAgICAgICAgcHVibGljIHZvaWQgTnVtYmVyVmFsdWUoc3RyaW5nIGpzb24sIGRvdWJs
ZSBleHBlY3RlZFZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnRUb2tlbnMoanNv
biwgSnNvblRva2VuLlZhbHVlKGV4cGVjdGVkVmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoIjAwIildCi0gICAgICAgIFtUZXN0Q2FzZSgiLjUi
KV0KLSAgICAgICAgW1Rlc3RDYXNlKCIxLiIpXQotICAgICAgICBbVGVzdENhc2UoIjFlIildCi0g
ICAgICAgIFtUZXN0Q2FzZSgiMWUtIildCi0gICAgICAgIFtUZXN0Q2FzZSgiLS0iKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCItLTEiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCItMS43OTc3ZTMwOCIpXQot
ICAgICAgICBbVGVzdENhc2UoIjEuNzk3N2UzMDgiKV0KLSAgICAgICAgcHVibGljIHZvaWQgSW52
YWxpZE51bWJlclZhbHVlKHN0cmluZyBqc29uKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3Nl
cnRUaHJvd3NBZnRlcihqc29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAg
ICBbVGVzdENhc2UoIm51bCIpXQotICAgICAgICBbVGVzdENhc2UoIm5vdGhpbmciKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCJ0cnV0aCIpXQotICAgICAgICBbVGVzdENhc2UoImZBTFNFaG9vZCIpXQot
ICAgICAgICBwdWJsaWMgdm9pZCBJbnZhbGlkTGl0ZXJhbHMoc3RyaW5nIGpzb24pCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFzc2VydFRocm93c0FmdGVyKGpzb24pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIE51bGxWYWx1ZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFzc2VydFRva2VucygibnVsbCIsIEpzb25Ub2tlbi5OdWxsKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBUcnVlVmFsdWUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnRUb2tlbnMoInRydWUiLCBKc29uVG9rZW4uVHJ1
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgRmFs
c2VWYWx1ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydFRva2VucygiZmFsc2UiLCBK
c29uVG9rZW4uRmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1
YmxpYyB2b2lkIFNpbXBsZU9iamVjdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydFRv
a2Vucygieyd4JzogJ3knfSIsCi0gICAgICAgICAgICAgICAgSnNvblRva2VuLlN0YXJ0T2JqZWN0
LCBKc29uVG9rZW4uTmFtZSgieCIpLCBKc29uVG9rZW4uVmFsdWUoInkiKSwgSnNvblRva2VuLkVu
ZE9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUZXN0XQotICAgICAgICBb
VGVzdENhc2UoIlsxMCwgMjAiLCAzKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJbMTAsIiwgMildCi0g
ICAgICAgIFtUZXN0Q2FzZSgiWzEwOjIwXSIsIDIpXQotICAgICAgICBbVGVzdENhc2UoIlsiLCAx
KV0KLSAgICAgICAgW1Rlc3RDYXNlKCJbLCIsIDEpXQotICAgICAgICBbVGVzdENhc2UoInsiLCAx
KV0KLSAgICAgICAgW1Rlc3RDYXNlKCJ7LCIsIDEpXQotICAgICAgICBbVGVzdENhc2UoIntbIiwg
MSldCi0gICAgICAgIFtUZXN0Q2FzZSgie3siLCAxKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJ7MCIs
IDEpXQotICAgICAgICBbVGVzdENhc2UoIntudWxsIiwgMSldCi0gICAgICAgIFtUZXN0Q2FzZSgi
e2ZhbHNlIiwgMSldCi0gICAgICAgIFtUZXN0Q2FzZSgie3RydWUiLCAxKV0KLSAgICAgICAgW1Rl
c3RDYXNlKCJ9IiwgMCldCi0gICAgICAgIFtUZXN0Q2FzZSgiXSIsIDApXQotICAgICAgICBbVGVz
dENhc2UoIiwiLCAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKCInZm9vJyAnYmFyJyIsIDEpXQotICAg
ICAgICBbVGVzdENhc2UoIjoiLCAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKCInZm9vIiwgMCldIC8v
IEluY29tcGxldGUgc3RyaW5nCi0gICAgICAgIFtUZXN0Q2FzZSgieyAnZm9vJyB9IiwgMildCi0g
ICAgICAgIFtUZXN0Q2FzZSgieyB4OjEiLCAxKV0gLy8gUHJvcGVydHkgbmFtZXMgbXVzdCBiZSBx
dW90ZWQKLSAgICAgICAgW1Rlc3RDYXNlKCJ7XSIsIDEpXQotICAgICAgICBbVGVzdENhc2UoIlt9
IiwgMSldCi0gICAgICAgIFtUZXN0Q2FzZSgiWzEsIiwgMildCi0gICAgICAgIFtUZXN0Q2FzZSgi
eyd4JzowXSIsIDMpXQotICAgICAgICBbVGVzdENhc2UoInsgJ2Zvbyc6IH0iLCAyKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKCJ7ICdmb28nOidiYXInLCB9IiwgMyldCi0gICAgICAgIHB1YmxpYyB2b2lk
IEludmFsaWRTdHJ1Y3R1cmUoc3RyaW5nIGpzb24sIGludCBleHBlY3RlZFZhbGlkVG9rZW5zKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOb3RlOiB3ZSBkb24ndCB0ZXN0IHRoYXQgdGhlIGVh
cmxpZXIgdG9rZW5zIGFyZSBleGFjdGx5IGFzIGV4cGVjdGVkLAotICAgICAgICAgICAgLy8gcGFy
dGx5IGJlY2F1c2UgdGhhdCdzIGhhcmQgdG8gcGFyYW1ldGVyaXplLgotICAgICAgICAgICAgdmFy
IHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoanNvbi5SZXBsYWNlKCdcJycsICciJykpOwotICAg
ICAgICAgICAgdmFyIHRva2VuaXplciA9IEpzb25Ub2tlbml6ZXIuRnJvbVRleHRSZWFkZXIocmVh
ZGVyKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWxpZFRva2Vu
czsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFzc2VydC5Jc05vdE51bGwo
dG9rZW5pemVyLk5leHQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBc3NlcnQuVGhy
b3dzPEludmFsaWRKc29uRXhjZXB0aW9uPigoKSA9PiB0b2tlbml6ZXIuTmV4dCgpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBBcnJheU1peGVkVHlw
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydFRva2VucygiWzEsICdmb28nLCBudWxs
LCBmYWxzZSwgdHJ1ZSwgWzJdLCB7J3gnOid5JyB9XSIsCi0gICAgICAgICAgICAgICAgSnNvblRv
a2VuLlN0YXJ0QXJyYXksCi0gICAgICAgICAgICAgICAgSnNvblRva2VuLlZhbHVlKDEpLAotICAg
ICAgICAgICAgICAgIEpzb25Ub2tlbi5WYWx1ZSgiZm9vIiksCi0gICAgICAgICAgICAgICAgSnNv
blRva2VuLk51bGwsCi0gICAgICAgICAgICAgICAgSnNvblRva2VuLkZhbHNlLAotICAgICAgICAg
ICAgICAgIEpzb25Ub2tlbi5UcnVlLAotICAgICAgICAgICAgICAgIEpzb25Ub2tlbi5TdGFydEFy
cmF5LAotICAgICAgICAgICAgICAgIEpzb25Ub2tlbi5WYWx1ZSgyKSwKLSAgICAgICAgICAgICAg
ICBKc29uVG9rZW4uRW5kQXJyYXksCi0gICAgICAgICAgICAgICAgSnNvblRva2VuLlN0YXJ0T2Jq
ZWN0LAotICAgICAgICAgICAgICAgIEpzb25Ub2tlbi5OYW1lKCJ4IiksCi0gICAgICAgICAgICAg
ICAgSnNvblRva2VuLlZhbHVlKCJ5IiksCi0gICAgICAgICAgICAgICAgSnNvblRva2VuLkVuZE9i
amVjdCwKLSAgICAgICAgICAgICAgICBKc29uVG9rZW4uRW5kQXJyYXkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIE9iamVjdE1peGVkVHlwZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydFRva2VucyhAInsnYSc6IDEsICdiJzogJ2Jhcics
ICdjJzogbnVsbCwgJ2QnOiBmYWxzZSwgJ2UnOiB0cnVlLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdmJzogWzJdLCAnZyc6IHsneCc6J3knIH19IiwKLSAgICAgICAgICAgICAgICBKc29u
VG9rZW4uU3RhcnRPYmplY3QsCi0gICAgICAgICAgICAgICAgSnNvblRva2VuLk5hbWUoImEiKSwK
LSAgICAgICAgICAgICAgICBKc29uVG9rZW4uVmFsdWUoMSksCi0gICAgICAgICAgICAgICAgSnNv
blRva2VuLk5hbWUoImIiKSwKLSAgICAgICAgICAgICAgICBKc29uVG9rZW4uVmFsdWUoImJhciIp
LAotICAgICAgICAgICAgICAgIEpzb25Ub2tlbi5OYW1lKCJjIiksCi0gICAgICAgICAgICAgICAg
SnNvblRva2VuLk51bGwsCi0gICAgICAgICAgICAgICAgSnNvblRva2VuLk5hbWUoImQiKSwKLSAg
ICAgICAgICAgICAgICBKc29uVG9rZW4uRmFsc2UsCi0gICAgICAgICAgICAgICAgSnNvblRva2Vu
Lk5hbWUoImUiKSwKLSAgICAgICAgICAgICAgICBKc29uVG9rZW4uVHJ1ZSwKLSAgICAgICAgICAg
ICAgICBKc29uVG9rZW4uTmFtZSgiZiIpLAotICAgICAgICAgICAgICAgIEpzb25Ub2tlbi5TdGFy
dEFycmF5LAotICAgICAgICAgICAgICAgIEpzb25Ub2tlbi5WYWx1ZSgyKSwKLSAgICAgICAgICAg
ICAgICBKc29uVG9rZW4uRW5kQXJyYXksCi0gICAgICAgICAgICAgICAgSnNvblRva2VuLk5hbWUo
ImciKSwKLSAgICAgICAgICAgICAgICBKc29uVG9rZW4uU3RhcnRPYmplY3QsCi0gICAgICAgICAg
ICAgICAgSnNvblRva2VuLk5hbWUoIngiKSwKLSAgICAgICAgICAgICAgICBKc29uVG9rZW4uVmFs
dWUoInkiKSwKLSAgICAgICAgICAgICAgICBKc29uVG9rZW4uRW5kT2JqZWN0LAotICAgICAgICAg
ICAgICAgIEpzb25Ub2tlbi5FbmRPYmplY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3Rd
Ci0gICAgICAgIHB1YmxpYyB2b2lkIE5leHRBZnRlckVuZERvY3VtZW50VGhyb3dzKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdmFyIHRva2VuaXplciA9IEpzb25Ub2tlbml6ZXIuRnJvbVRleHRS
ZWFkZXIobmV3IFN0cmluZ1JlYWRlcigibnVsbCIpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVF
cXVhbChKc29uVG9rZW4uTnVsbCwgdG9rZW5pemVyLk5leHQoKSk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoSnNvblRva2VuLkVuZERvY3VtZW50LCB0b2tlbml6ZXIuTmV4dCgpKTsKLSAg
ICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbj4oKCkgPT4g
dG9rZW5pemVyLk5leHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgQ2FuUHVzaEJhY2tFbmREb2N1bWVudCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHZhciB0b2tlbml6ZXIgPSBKc29uVG9rZW5pemVyLkZyb21UZXh0UmVhZGVyKG5ldyBTdHJp
bmdSZWFkZXIoIm51bGwiKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoSnNvblRva2Vu
Lk51bGwsIHRva2VuaXplci5OZXh0KCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKEpz
b25Ub2tlbi5FbmREb2N1bWVudCwgdG9rZW5pemVyLk5leHQoKSk7Ci0gICAgICAgICAgICB0b2tl
bml6ZXIuUHVzaEJhY2soSnNvblRva2VuLkVuZERvY3VtZW50KTsKLSAgICAgICAgICAgIEFzc2Vy
dC5BcmVFcXVhbChKc29uVG9rZW4uRW5kRG9jdW1lbnQsIHRva2VuaXplci5OZXh0KCkpOwotICAg
ICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uPigoKSA9PiB0
b2tlbml6ZXIuTmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgIAotICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgIC8vLyBBc3NlcnRzIHRoYXQgdGhlIHNwZWNpZmllZCBKU09OIGlzIHRva2Vu
aXplZCBpbnRvIHRoZSBnaXZlbiBzZXF1ZW5jZSBvZiB0b2tlbnMuCi0gICAgICAgIC8vLyBBbGwg
YXBvc3Ryb3BoZXMgYXJlIGZpcnN0IGNvbnZlcnRlZCB0byBkb3VibGUgcXVvdGVzLCBhbGxvd2lu
ZyBhbnkgdGVzdHMKLSAgICAgICAgLy8vIHRoYXQgZG9uJ3QgbmVlZCB0byBjaGVjayBhY3R1YWwg
YXBvc3Ryb3BoZSBoYW5kbGluZyB0byB1c2UgYXBvc3Ryb3BoZXMgaW4gdGhlIEpTT04sIGF2b2lk
aW5nCi0gICAgICAgIC8vLyBtZXNzeSBzdHJpbmcgbGl0ZXJhbCBlc2NhcGluZy4gVGhlICJlbmQg
ZG9jdW1lbnQiIHRva2VuIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGxpc3Qgb2YgCi0gICAgICAg
IC8vLyBleHBlY3RlZCB0b2tlbnMsIGJ1dCBpcyBpbXBsaWNpdC4KLSAgICAgICAgLy8vIDwvc3Vt
bWFyeT4KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBBc3NlcnRUb2tlbnMoc3RyaW5nIGpz
b24sIHBhcmFtcyBKc29uVG9rZW5bXSBleHBlY3RlZFRva2VucykKLSAgICAgICAgewotICAgICAg
ICAgICAgQXNzZXJ0VG9rZW5zTm9SZXBsYWNlbWVudChqc29uLlJlcGxhY2UoJ1wnJywgJyInKSwg
ZXhwZWN0ZWRUb2tlbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gQXNzZXJ0cyB0aGF0IHRoZSBzcGVjaWZpZWQgSlNPTiBpcyB0b2tlbml6ZWQgaW50
byB0aGUgZ2l2ZW4gc2VxdWVuY2Ugb2YgdG9rZW5zLgotICAgICAgICAvLy8gVW5saWtlIDxzZWUg
Y3JlZj0iQXNzZXJ0VG9rZW5zKHN0cmluZywgSnNvblRva2VuW10pIi8+LCB0aGlzIGRvZXMgbm90
IHBlcmZvcm0gYW55IGNoYXJhY3RlcgotICAgICAgICAvLy8gcmVwbGFjZW1lbnQgb24gdGhlIHNw
ZWNpZmllZCBKU09OLCBhbmQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgdGV4dCBjb250YWlucyBh
cG9zdHJvcGhlcyB3aGljaAotICAgICAgICAvLy8gYXJlIGV4cGVjdGVkIHRvIGJlIHVzZWQgKmFz
KiBhcG9zdHJvcGhlcy4gVGhlICJlbmQgZG9jdW1lbnQiIHRva2VuIGlzIG5vdCBzcGVjaWZpZWQg
aW4gdGhlIGxpc3Qgb2YgCi0gICAgICAgIC8vLyBleHBlY3RlZCB0b2tlbnMsIGJ1dCBpcyBpbXBs
aWNpdC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9p
ZCBBc3NlcnRUb2tlbnNOb1JlcGxhY2VtZW50KHN0cmluZyBqc29uLCBwYXJhbXMgSnNvblRva2Vu
W10gZXhwZWN0ZWRUb2tlbnMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBu
ZXcgU3RyaW5nUmVhZGVyKGpzb24pOwotICAgICAgICAgICAgdmFyIHRva2VuaXplciA9IEpzb25U
b2tlbml6ZXIuRnJvbVRleHRSZWFkZXIocmVhZGVyKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZXhwZWN0ZWRUb2tlbnMuTGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGFjdHVhbFRva2VuID0gdG9rZW5pemVyLk5leHQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoYWN0dWFsVG9rZW4gPT0gSnNvblRva2VuLkVuZERvY3VtZW50KQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LkZhaWwoIkV4cGVjdGVkIHsw
fSBidXQgcmVhY2hlZCBlbmQgb2YgdG9rZW4gc3RyZWFtIiwgZXhwZWN0ZWRUb2tlbnNbaV0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0
ZWRUb2tlbnNbaV0sIGFjdHVhbFRva2VuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZh
ciBmaW5hbFRva2VuID0gdG9rZW5pemVyLk5leHQoKTsKLSAgICAgICAgICAgIGlmIChmaW5hbFRv
a2VuICE9IEpzb25Ub2tlbi5FbmREb2N1bWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBBc3NlcnQuRmFpbCgiRXhwZWN0ZWQgdG9rZW4gc3RyZWFtIHRvIGJlIGV4aGF1c3RlZDsg
cmVjZWl2ZWQgezB9IiwgZmluYWxUb2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIEFzc2VydFRocm93c0FmdGVyKHN0cmluZyBqc29u
LCBwYXJhbXMgSnNvblRva2VuW10gZXhwZWN0ZWRUb2tlbnMpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHZhciByZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKGpzb24pOwotICAgICAgICAgICAgdmFy
IHRva2VuaXplciA9IEpzb25Ub2tlbml6ZXIuRnJvbVRleHRSZWFkZXIocmVhZGVyKTsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRUb2tlbnMuTGVuZ3RoOyBpKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGFjdHVhbFRva2VuID0gdG9rZW5pemVy
Lk5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoYWN0dWFsVG9rZW4gPT0gSnNvblRva2VuLkVu
ZERvY3VtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0
LkZhaWwoIkV4cGVjdGVkIHswfSBidXQgcmVhY2hlZCBlbmQgb2YgZG9jdW1lbnQiLCBleHBlY3Rl
ZFRva2Vuc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbChleHBlY3RlZFRva2Vuc1tpXSwgYWN0dWFsVG9rZW4pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkSnNvbkV4Y2VwdGlvbj4oKCkgPT4gdG9r
ZW5pemVyLk5leHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvUHJvcGVydGllcy9BcHBNYW5pZmVzdC54bWwgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFy
cC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvUHJvcGVydGllcy9BcHBNYW5pZmVzdC54bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MTJhMTE3ODM5MzI1YjNkODU3MDAxODQ3Mzk2
Nzk4MTYwYjNhNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Byb3BlcnRpZXMvQXBwTWFuaWZlc3Qu
eG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi3vu788RGVwbG95bWVudCB4bWxucz0i
aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbGllbnQvMjAwNy9kZXBsb3ltZW50IgotICAg
ICAgICB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFt
bCIKLT4KLSAgICA8RGVwbG95bWVudC5QYXJ0cz4KLSAgICA8L0RlcGxveW1lbnQuUGFydHM+Ci08
L0RlcGxveW1lbnQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3Qv
UHJvcGVydGllcy9Bc3NlbWJseUluZm8uY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRl
c3QvUHJvcGVydGllcy9Bc3NlbWJseUluZm8uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGY1MDk0MGUzYTZjODBlYWQxNjgzNGYzNjE5OTg2NGY1NWM5OGFhZjguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90
b2J1Zi5UZXN0L1Byb3BlcnRpZXMvQXNzZW1ibHlJbmZvLmNzCisrKyAvZGV2L251bGwKQEAgLTEs
MjAgKzAsMCBAQAotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247Ci11c2lu
ZyBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzOwotdXNpbmcgU3lzdGVtLlJ1bnRpbWUu
SW50ZXJvcFNlcnZpY2VzOwotCi0vLyBHZW5lcmFsIEluZm9ybWF0aW9uIGFib3V0IGFuIGFzc2Vt
Ymx5IGlzIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIAotLy8gc2V0IG9mIGF0dHJp
YnV0ZXMuIENoYW5nZSB0aGVzZSBhdHRyaWJ1dGUgdmFsdWVzIHRvIG1vZGlmeSB0aGUgaW5mb3Jt
YXRpb24KLS8vIGFzc29jaWF0ZWQgd2l0aCBhbiBhc3NlbWJseS4KLQotW2Fzc2VtYmx5OiBBc3Nl
bWJseVRpdGxlKCJHb29nbGUuUHJvdG9idWYuVGVzdCIpXQotW2Fzc2VtYmx5OiBBc3NlbWJseURl
c2NyaXB0aW9uKCIiKV0KLVthc3NlbWJseTogQXNzZW1ibHlDb25maWd1cmF0aW9uKCIiKV0KLVth
c3NlbWJseTogQXNzZW1ibHlDb21wYW55KCIiKV0KLVthc3NlbWJseTogQXNzZW1ibHlQcm9kdWN0
KCJHb29nbGUuUHJvdG9idWYuVGVzdCIpXQotW2Fzc2VtYmx5OiBBc3NlbWJseUNvcHlyaWdodCgi
Q29weXJpZ2h0IMKpICAyMDE1IildCi1bYXNzZW1ibHk6IEFzc2VtYmx5VHJhZGVtYXJrKCIiKV0K
LVthc3NlbWJseTogQXNzZW1ibHlDdWx0dXJlKCIiKV0KLQotW2Fzc2VtYmx5OiBBc3NlbWJseVZl
cnNpb24oIjMuMC4wLjAiKV0KLVthc3NlbWJseTogQXNzZW1ibHlGaWxlVmVyc2lvbigiMy4wLjAu
MCIpXQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1JlZmxlY3Rp
b24vRGVzY3JpcHRvcnNUZXN0LmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Jl
ZmxlY3Rpb24vRGVzY3JpcHRvcnNUZXN0LmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1MmQ1YTY3Njk3MjlhYjljNWE0N2YyNjEyMWM0OTMyY2ViMGZlYWQzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9i
dWYuVGVzdC9SZWZsZWN0aW9uL0Rlc2NyaXB0b3JzVGVzdC5jcworKysgL2Rldi9udWxsCkBAIC0x
LDI1OSArMCwwIEBACi0jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0u
TGlucTsKLXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zOwotdXNpbmcgTlVuaXQuRnJh
bWV3b3JrOwotdXNpbmcgVW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3M7Ci0KLW5hbWVzcGFjZSBH
b29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8g
VGVzdHMgZm9yIGRlc2NyaXB0b3JzLiAoTm90IGluIGl0cyBvd24gbmFtZXNwYWNlIG9yIGJyb2tl
biB1cCBpbnRvIGluZGl2aWR1YWwgY2xhc3NlcyBhcyB0aGUKLSAgICAvLy8gc2l6ZSBkb2Vzbid0
IHdhcnJhbnQgaXQuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIG1ha2VzIG1lIGZlZWwgYSBiaXQg
ZGlydHkuLi4pCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgRGVzY3JpcHRv
cnNUZXN0Ci0gICAgewotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgRmlsZURl
c2NyaXB0b3IoKQotICAgICAgICB7Ci0gICAgICAgICAgICBGaWxlRGVzY3JpcHRvciBmaWxlID0g
VW5pdHRlc3RQcm90bzNSZWZsZWN0aW9uLkRlc2NyaXB0b3I7Ci0KLSAgICAgICAgICAgIEFzc2Vy
dC5BcmVFcXVhbCgiZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3Byb3RvMy5wcm90byIsIGZpbGUu
TmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoInByb3RvYnVmX3VuaXR0ZXN0Iiwg
ZmlsZS5QYWNrYWdlKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJVbml0dGVzdFBy
b3RvIiwgZmlsZS5Qcm90by5PcHRpb25zLkphdmFPdXRlckNsYXNzbmFtZSk7Ci0gICAgICAgICAg
ICBBc3NlcnQuQXJlRXF1YWwoImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcm90bzMucHJvdG8i
LCBmaWxlLlByb3RvLk5hbWUpOwotCi0gICAgICAgICAgICAvLyB1bml0dGVzdC5wcm90byBkb2Vz
bid0IGhhdmUgYW55IHB1YmxpYyBpbXBvcnRzLCBidXQgdW5pdHRlc3RfaW1wb3J0LnByb3RvIGRv
ZXMuCi0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMCwgZmlsZS5QdWJsaWNEZXBlbmRlbmNp
ZXMuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIFVuaXR0ZXN0SW1wb3J0
UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLlB1YmxpY0RlcGVuZGVuY2llcy5Db3VudCk7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoVW5pdHRlc3RJbXBvcnRQdWJsaWNQcm90bzNSZWZs
ZWN0aW9uLkRlc2NyaXB0b3IsIFVuaXR0ZXN0SW1wb3J0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlw
dG9yLlB1YmxpY0RlcGVuZGVuY2llc1swXSk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgxLCBmaWxlLkRlcGVuZGVuY2llcy5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwoVW5pdHRlc3RJbXBvcnRQcm90bzNSZWZsZWN0aW9uLkRlc2NyaXB0b3IsIGZpbGUuRGVwZW5k
ZW5jaWVzWzBdKTsKLQotICAgICAgICAgICAgTWVzc2FnZURlc2NyaXB0b3IgbWVzc2FnZVR5cGUg
PSBUZXN0QWxsVHlwZXMuRGVzY3JpcHRvcjsKLSAgICAgICAgICAgIEFzc2VydC5BcmVTYW1lKHR5
cGVvZihUZXN0QWxsVHlwZXMpLCBtZXNzYWdlVHlwZS5DbHJUeXBlKTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVTYW1lKFRlc3RBbGxUeXBlcy5QYXJzZXIsIG1lc3NhZ2VUeXBlLlBhcnNlcik7Ci0g
ICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobWVzc2FnZVR5cGUsIGZpbGUuTWVzc2FnZVR5cGVz
WzBdKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlVHlwZSwgZmlsZS5GaW5k
VHlwZUJ5TmFtZTxNZXNzYWdlRGVzY3JpcHRvcj4oIlRlc3RBbGxUeXBlcyIpKTsKLSAgICAgICAg
ICAgIEFzc2VydC5OdWxsKGZpbGUuRmluZFR5cGVCeU5hbWU8TWVzc2FnZURlc2NyaXB0b3I+KCJO
b1N1Y2hUeXBlIikpOwotICAgICAgICAgICAgQXNzZXJ0Lk51bGwoZmlsZS5GaW5kVHlwZUJ5TmFt
ZTxNZXNzYWdlRGVzY3JpcHRvcj4oInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcyIpKTsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS5NZXNzYWdlVHlwZXMuQ291bnQ7
IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoaSwg
ZmlsZS5NZXNzYWdlVHlwZXNbaV0uSW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBBc3NlcnQuQXJlRXF1YWwoZmlsZS5FbnVtVHlwZXNbMF0sIGZpbGUuRmluZFR5cGVCeU5hbWU8
RW51bURlc2NyaXB0b3I+KCJGb3JlaWduRW51bSIpKTsKLSAgICAgICAgICAgIEFzc2VydC5OdWxs
KGZpbGUuRmluZFR5cGVCeU5hbWU8RW51bURlc2NyaXB0b3I+KCJOb1N1Y2hUeXBlIikpOwotICAg
ICAgICAgICAgQXNzZXJ0Lk51bGwoZmlsZS5GaW5kVHlwZUJ5TmFtZTxFbnVtRGVzY3JpcHRvcj4o
InByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtIikpOwotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKDEsIFVuaXR0ZXN0SW1wb3J0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLkVudW1U
eXBlcy5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIkltcG9ydEVudW0iLCBV
bml0dGVzdEltcG9ydFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5FbnVtVHlwZXNbMF0uTmFt
ZSk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGUuRW51bVR5cGVzLkNvdW50
OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGks
IGZpbGUuRW51bVR5cGVzW2ldLkluZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKDEwLCBmaWxlLlNlcmlhbGl6ZWREYXRhWzBdKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBNZXNzYWdlRGVzY3JpcHRvcigp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIE1lc3NhZ2VEZXNjcmlwdG9yIG1lc3NhZ2VUeXBlID0g
VGVzdEFsbFR5cGVzLkRlc2NyaXB0b3I7Ci0gICAgICAgICAgICBNZXNzYWdlRGVzY3JpcHRvciBu
ZXN0ZWRUeXBlID0gVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UuRGVzY3JpcHRvcjsK
LQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJUZXN0QWxsVHlwZXMiLCBtZXNzYWdlVHlw
ZS5OYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgicHJvdG9idWZfdW5pdHRlc3Qu
VGVzdEFsbFR5cGVzIiwgbWVzc2FnZVR5cGUuRnVsbE5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKFVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLCBtZXNzYWdlVHlw
ZS5GaWxlKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc051bGwobWVzc2FnZVR5cGUuQ29udGFpbmlu
Z1R5cGUpOwotICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChtZXNzYWdlVHlwZS5Qcm90by5PcHRp
b25zKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJUZXN0QWxsVHlwZXMiLCBtZXNz
YWdlVHlwZS5OYW1lKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJOZXN0ZWRNZXNz
YWdlIiwgbmVzdGVkVHlwZS5OYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgicHJv
dG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UiLCBuZXN0ZWRUeXBlLkZ1
bGxOYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChVbml0dGVzdFByb3RvM1JlZmxl
Y3Rpb24uRGVzY3JpcHRvciwgbmVzdGVkVHlwZS5GaWxlKTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbChtZXNzYWdlVHlwZSwgbmVzdGVkVHlwZS5Db250YWluaW5nVHlwZSk7Ci0KLSAgICAg
ICAgICAgIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA9IG1lc3NhZ2VUeXBlLkZpZWxkcy5JbkRlY2xh
cmF0aW9uT3JkZXIoKVswXTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgic2luZ2xlX2lu
dDMyIiwgZmllbGQuTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZmllbGQsIG1l
c3NhZ2VUeXBlLkZpbmREZXNjcmlwdG9yPEZpZWxkRGVzY3JpcHRvcj4oInNpbmdsZV9pbnQzMiIp
KTsKLSAgICAgICAgICAgIEFzc2VydC5OdWxsKG1lc3NhZ2VUeXBlLkZpbmREZXNjcmlwdG9yPEZp
ZWxkRGVzY3JpcHRvcj4oIm5vX3N1Y2hfZmllbGQiKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoZmllbGQsIG1lc3NhZ2VUeXBlLkZpbmRGaWVsZEJ5TnVtYmVyKDEpKTsKLSAgICAgICAg
ICAgIEFzc2VydC5OdWxsKG1lc3NhZ2VUeXBlLkZpbmRGaWVsZEJ5TnVtYmVyKDU3MTI4MykpOwot
ICAgICAgICAgICAgdmFyIGZpZWxkc0luRGVjbGFyYXRpb25PcmRlciA9IG1lc3NhZ2VUeXBlLkZp
ZWxkcy5JbkRlY2xhcmF0aW9uT3JkZXIoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZmllbGRzSW5EZWNsYXJhdGlvbk9yZGVyLkNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGksIGZpZWxkc0luRGVjbGFyYXRpb25PcmRl
cltpXS5JbmRleCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bChuZXN0ZWRUeXBlLCBtZXNzYWdlVHlwZS5OZXN0ZWRUeXBlc1swXSk7Ci0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwobmVzdGVkVHlwZSwgbWVzc2FnZVR5cGUuRmluZERlc2NyaXB0b3I8TWVz
c2FnZURlc2NyaXB0b3I+KCJOZXN0ZWRNZXNzYWdlIikpOwotICAgICAgICAgICAgQXNzZXJ0Lk51
bGwobWVzc2FnZVR5cGUuRmluZERlc2NyaXB0b3I8TWVzc2FnZURlc2NyaXB0b3I+KCJOb1N1Y2hU
eXBlIikpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlVHlwZS5OZXN0
ZWRUeXBlcy5Db3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFzc2Vy
dC5BcmVFcXVhbChpLCBtZXNzYWdlVHlwZS5OZXN0ZWRUeXBlc1tpXS5JbmRleCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlVHlwZS5FbnVtVHlw
ZXNbMF0sIG1lc3NhZ2VUeXBlLkZpbmREZXNjcmlwdG9yPEVudW1EZXNjcmlwdG9yPigiTmVzdGVk
RW51bSIpKTsKLSAgICAgICAgICAgIEFzc2VydC5OdWxsKG1lc3NhZ2VUeXBlLkZpbmREZXNjcmlw
dG9yPEVudW1EZXNjcmlwdG9yPigiTm9TdWNoVHlwZSIpKTsKLSAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbWVzc2FnZVR5cGUuRW51bVR5cGVzLkNvdW50OyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGksIG1lc3NhZ2VUeXBlLkVudW1U
eXBlc1tpXS5JbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVz
dF0KLSAgICAgICAgcHVibGljIHZvaWQgRmllbGREZXNjcmlwdG9yKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgTWVzc2FnZURlc2NyaXB0b3IgbWVzc2FnZVR5cGUgPSBUZXN0QWxsVHlwZXMuRGVz
Y3JpcHRvcjsKLSAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvciBwcmltaXRpdmVGaWVsZCA9IG1l
c3NhZ2VUeXBlLkZpbmREZXNjcmlwdG9yPEZpZWxkRGVzY3JpcHRvcj4oInNpbmdsZV9pbnQzMiIp
OwotICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yIGVudW1GaWVsZCA9IG1lc3NhZ2VUeXBlLkZp
bmREZXNjcmlwdG9yPEZpZWxkRGVzY3JpcHRvcj4oInNpbmdsZV9uZXN0ZWRfZW51bSIpOwotICAg
ICAgICAgICAgRmllbGREZXNjcmlwdG9yIG1lc3NhZ2VGaWVsZCA9IG1lc3NhZ2VUeXBlLkZpbmRE
ZXNjcmlwdG9yPEZpZWxkRGVzY3JpcHRvcj4oInNpbmdsZV9mb3JlaWduX21lc3NhZ2UiKTsKLQot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJzaW5nbGVfaW50MzIiLCBwcmltaXRpdmVGaWVs
ZC5OYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgicHJvdG9idWZfdW5pdHRlc3Qu
VGVzdEFsbFR5cGVzLnNpbmdsZV9pbnQzMiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbWl0aXZlRmllbGQuRnVsbE5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEs
IHByaW1pdGl2ZUZpZWxkLkZpZWxkTnVtYmVyKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bChtZXNzYWdlVHlwZSwgcHJpbWl0aXZlRmllbGQuQ29udGFpbmluZ1R5cGUpOwotICAgICAgICAg
ICAgQXNzZXJ0LkFyZUVxdWFsKFVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLCBw
cmltaXRpdmVGaWVsZC5GaWxlKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChGaWVsZFR5
cGUuSW50MzIsIHByaW1pdGl2ZUZpZWxkLkZpZWxkVHlwZSk7Ci0gICAgICAgICAgICBBc3NlcnQu
SXNOdWxsKHByaW1pdGl2ZUZpZWxkLlByb3RvLk9wdGlvbnMpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoInNpbmdsZV9uZXN0ZWRfZW51bSIsIGVudW1GaWVsZC5O
YW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChGaWVsZFR5cGUuRW51bSwgZW51bUZp
ZWxkLkZpZWxkVHlwZSk7Ci0gICAgICAgICAgICAvLyBBc3NlcnQuQXJlRXF1YWwoVGVzdEFsbFR5
cGVzLlR5cGVzLk5lc3RlZEVudW0uRGVzY3JpcHRvclByb3RvRmlsZSwgZW51bUZpZWxkLkVudW1U
eXBlKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJzaW5nbGVfZm9yZWlnbl9tZXNz
YWdlIiwgbWVzc2FnZUZpZWxkLk5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKEZp
ZWxkVHlwZS5NZXNzYWdlLCBtZXNzYWdlRmllbGQuRmllbGRUeXBlKTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbChGb3JlaWduTWVzc2FnZS5EZXNjcmlwdG9yLCBtZXNzYWdlRmllbGQuTWVz
c2FnZVR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2
b2lkIEZpZWxkRGVzY3JpcHRvckxhYmVsKCkKLSAgICAgICAgewotICAgICAgICAgICAgRmllbGRE
ZXNjcmlwdG9yIHNpbmdsZUZpZWxkID0KLSAgICAgICAgICAgICAgICBUZXN0QWxsVHlwZXMuRGVz
Y3JpcHRvci5GaW5kRGVzY3JpcHRvcjxGaWVsZERlc2NyaXB0b3I+KCJzaW5nbGVfaW50MzIiKTsK
LSAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvciByZXBlYXRlZEZpZWxkID0KLSAgICAgICAgICAg
ICAgICBUZXN0QWxsVHlwZXMuRGVzY3JpcHRvci5GaW5kRGVzY3JpcHRvcjxGaWVsZERlc2NyaXB0
b3I+KCJyZXBlYXRlZF9pbnQzMiIpOwotCi0gICAgICAgICAgICBBc3NlcnQuSXNGYWxzZShzaW5n
bGVGaWVsZC5Jc1JlcGVhdGVkKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1RydWUocmVwZWF0ZWRG
aWVsZC5Jc1JlcGVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBw
dWJsaWMgdm9pZCBFbnVtRGVzY3JpcHRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5v
dGU6IHRoaXMgdGVzdCBpcyBhIGJpdCBkaWZmZXJlbnQgdG8gdGhlIEphdmEgdmVyc2lvbiBiZWNh
dXNlIHRoZXJlJ3Mgbm8gc3RhdGljIHdheSBvZiBnZXR0aW5nIHRvIHRoZSBkZXNjcmlwdG9yCi0g
ICAgICAgICAgICBFbnVtRGVzY3JpcHRvciBlbnVtVHlwZSA9IFVuaXR0ZXN0UHJvdG8zUmVmbGVj
dGlvbi5EZXNjcmlwdG9yLkZpbmRUeXBlQnlOYW1lPEVudW1EZXNjcmlwdG9yPigiRm9yZWlnbkVu
dW0iKTsKLSAgICAgICAgICAgIEVudW1EZXNjcmlwdG9yIG5lc3RlZFR5cGUgPSBUZXN0QWxsVHlw
ZXMuRGVzY3JpcHRvci5GaW5kRGVzY3JpcHRvcjxFbnVtRGVzY3JpcHRvcj4oIk5lc3RlZEVudW0i
KTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJGb3JlaWduRW51bSIsIGVudW1UeXBl
Lk5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJwcm90b2J1Zl91bml0dGVzdC5G
b3JlaWduRW51bSIsIGVudW1UeXBlLkZ1bGxOYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVF
cXVhbChVbml0dGVzdFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvciwgZW51bVR5cGUuRmlsZSk7
Ci0gICAgICAgICAgICBBc3NlcnQuTnVsbChlbnVtVHlwZS5Db250YWluaW5nVHlwZSk7Ci0gICAg
ICAgICAgICBBc3NlcnQuTnVsbChlbnVtVHlwZS5Qcm90by5PcHRpb25zKTsKLQotICAgICAgICAg
ICAgQXNzZXJ0LkFyZUVxdWFsKCJOZXN0ZWRFbnVtIiwgbmVzdGVkVHlwZS5OYW1lKTsKLSAgICAg
ICAgICAgIEFzc2VydC5BcmVFcXVhbCgicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5l
c3RlZEVudW0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZFR5cGUuRnVsbE5h
bWUpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKFVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlv
bi5EZXNjcmlwdG9yLCBuZXN0ZWRUeXBlLkZpbGUpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKFRlc3RBbGxUeXBlcy5EZXNjcmlwdG9yLCBuZXN0ZWRUeXBlLkNvbnRhaW5pbmdUeXBlKTsK
LQotICAgICAgICAgICAgRW51bVZhbHVlRGVzY3JpcHRvciB2YWx1ZSA9IGVudW1UeXBlLkZpbmRW
YWx1ZUJ5TmFtZSgiRk9SRUlHTl9GT08iKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCh2
YWx1ZSwgZW51bVR5cGUuVmFsdWVzWzFdKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgi
Rk9SRUlHTl9GT08iLCB2YWx1ZS5OYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCg0
LCB2YWx1ZS5OdW1iZXIpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKChpbnQpIEZvcmVp
Z25FbnVtLkZvcmVpZ25Gb28sIHZhbHVlLk51bWJlcik7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwodmFsdWUsIGVudW1UeXBlLkZpbmRWYWx1ZUJ5TnVtYmVyKDQpKTsKLSAgICAgICAgICAg
IEFzc2VydC5OdWxsKGVudW1UeXBlLkZpbmRWYWx1ZUJ5TmFtZSgiTk9fU1VDSF9WQUxVRSIpKTsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW51bVR5cGUuVmFsdWVzLkNvdW50OyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGksIGVu
dW1UeXBlLlZhbHVlc1tpXS5JbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgT25lb2ZEZXNjcmlwdG9yKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgT25lb2ZEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBUZXN0QWxsVHlw
ZXMuRGVzY3JpcHRvci5GaW5kRGVzY3JpcHRvcjxPbmVvZkRlc2NyaXB0b3I+KCJvbmVvZl9maWVs
ZCIpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJvbmVvZl9maWVsZCIsIGRlc2NyaXB0
b3IuTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoInByb3RvYnVmX3VuaXR0ZXN0
LlRlc3RBbGxUeXBlcy5vbmVvZl9maWVsZCIsIGRlc2NyaXB0b3IuRnVsbE5hbWUpOwotCi0gICAg
ICAgICAgICB2YXIgZXhwZWN0ZWRGaWVsZHMgPSBuZXdbXSB7Ci0gICAgICAgICAgICAgICAgVGVz
dEFsbFR5cGVzLk9uZW9mQnl0ZXNGaWVsZE51bWJlciwKLSAgICAgICAgICAgICAgICBUZXN0QWxs
VHlwZXMuT25lb2ZOZXN0ZWRNZXNzYWdlRmllbGROdW1iZXIsCi0gICAgICAgICAgICAgICAgVGVz
dEFsbFR5cGVzLk9uZW9mU3RyaW5nRmllbGROdW1iZXIsCi0gICAgICAgICAgICAgICAgVGVzdEFs
bFR5cGVzLk9uZW9mVWludDMyRmllbGROdW1iZXIgfQotICAgICAgICAgICAgICAgIC5TZWxlY3Qo
ZmllbGROdW1iZXIgPT4gVGVzdEFsbFR5cGVzLkRlc2NyaXB0b3IuRmluZEZpZWxkQnlOdW1iZXIo
ZmllbGROdW1iZXIpKQotICAgICAgICAgICAgICAgIC5Ub0xpc3QoKTsKLSAgICAgICAgICAgIGZv
cmVhY2ggKHZhciBmaWVsZCBpbiBleHBlY3RlZEZpZWxkcykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBBc3NlcnQuQXJlU2FtZShkZXNjcmlwdG9yLCBmaWVsZC5Db250YWluaW5nT25l
b2YpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDb2xsZWN0aW9uQXNzZXJ0LkFyZUVx
dWl2YWxlbnQoZXhwZWN0ZWRGaWVsZHMsIGRlc2NyaXB0b3IuRmllbGRzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBNYXBFbnRyeU1lc3NhZ2VEZXNj
cmlwdG9yKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBNYXBXZWxs
S25vd25UeXBlcy5EZXNjcmlwdG9yLk5lc3RlZFR5cGVzWzBdOwotICAgICAgICAgICAgQXNzZXJ0
LklzTnVsbChkZXNjcmlwdG9yLlBhcnNlcik7Ci0gICAgICAgICAgICBBc3NlcnQuSXNOdWxsKGRl
c2NyaXB0b3IuQ2xyVHlwZSk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNOdWxsKGRlc2NyaXB0b3Iu
RmllbGRzWzFdLkFjY2Vzc29yKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZyb20gVGVzdEZp
ZWxkT3JkZXJpbmc6Ci0gICAgICAgIC8vIHN0cmluZyBteV9zdHJpbmcgPSAxMTsKLSAgICAgICAg
Ly8gaW50NjQgbXlfaW50ID0gMTsKLSAgICAgICAgLy8gZmxvYXQgbXlfZmxvYXQgPSAxMDE7Ci0g
ICAgICAgIC8vIE5lc3RlZE1lc3NhZ2Ugc2luZ2xlX25lc3RlZF9tZXNzYWdlID0gMjAwOwotICAg
ICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgRmllbGRMaXN0T3JkZXJpbmdzKCkKLSAg
ICAgICAgeyAKLSAgICAgICAgICAgIHZhciBmaWVsZHMgPSBUZXN0RmllbGRPcmRlcmluZ3MuRGVz
Y3JpcHRvci5GaWVsZHM7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobmV3W10geyAxMSwg
MSwgMTAxLCAyMDAgfSwgZmllbGRzLkluRGVjbGFyYXRpb25PcmRlcigpLlNlbGVjdCh4ID0+IHgu
RmllbGROdW1iZXIpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXdbXSB7IDEsIDEx
LCAxMDEsIDIwMCB9LCBmaWVsZHMuSW5GaWVsZE51bWJlck9yZGVyKCkuU2VsZWN0KHggPT4geC5G
aWVsZE51bWJlcikpOwotICAgICAgICB9Ci0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVi
bGljIHZvaWQgRGVzY3JpcHRvclByb3RvRmlsZURlc2NyaXB0b3IoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB2YXIgZGVzY3JpcHRvciA9IEdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZpbGVE
ZXNjcmlwdG9yLkRlc2NyaXB0b3JQcm90b0ZpbGVEZXNjcmlwdG9yOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKCJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90byIsIGRlc2NyaXB0
b3IuTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmLlRlc3QvUmVmbGVjdGlvbi9GaWVsZEFjY2Vzc1Rlc3QuY3MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvUmVmbGVjdGlvbi9GaWVsZEFjY2Vzc1Rlc3QuY3MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ODhhZjMwZDQ0ZGRjZWJhMjdmOWRmYjdjNTAw
ZGFmNzA5MWE0MTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1JlZmxlY3Rpb24vRmllbGRBY2Nlc3NU
ZXN0LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJp
Z2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0jZW5kcmVnaW9uCi0KLXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zOwotdXNpbmcg
TlVuaXQuRnJhbWV3b3JrOwotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25z
OwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci0KLW5hbWVzcGFjZSBHb29nbGUu
UHJvdG9idWYuUmVmbGVjdGlvbgotewotICAgIHB1YmxpYyBjbGFzcyBGaWVsZEFjY2Vzc1Rlc3QK
LSAgICB7Ci0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBHZXRWYWx1ZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gU2FtcGxlTWVzc2FnZXMuQ3JlYXRl
RnVsbFRlc3RBbGxUeXBlcygpOwotICAgICAgICAgICAgdmFyIGZpZWxkcyA9IFRlc3RBbGxUeXBl
cy5EZXNjcmlwdG9yLkZpZWxkczsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdl
LlNpbmdsZUJvb2wsIGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xlQm9vbEZpZWxkTnVtYmVyXS5B
Y2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
bWVzc2FnZS5TaW5nbGVCeXRlcywgZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVCeXRlc0ZpZWxk
TnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwobWVzc2FnZS5TaW5nbGVEb3VibGUsIGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xl
RG91YmxlRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpKTsKLSAgICAgICAg
ICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLlNpbmdsZUZpeGVkMzIsIGZpZWxkc1tUZXN0QWxs
VHlwZXMuU2luZ2xlRml4ZWQzMkZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdl
KSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobWVzc2FnZS5TaW5nbGVGaXhlZDY0LCBm
aWVsZHNbVGVzdEFsbFR5cGVzLlNpbmdsZUZpeGVkNjRGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0
VmFsdWUobWVzc2FnZSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UuU2lu
Z2xlRmxvYXQsIGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xlRmxvYXRGaWVsZE51bWJlcl0uQWNj
ZXNzb3IuR2V0VmFsdWUobWVzc2FnZSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1l
c3NhZ2UuU2luZ2xlRm9yZWlnbkVudW0sIGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xlRm9yZWln
bkVudW1GaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUobWVzc2FnZSkpOwotICAgICAgICAg
ICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UuU2luZ2xlRm9yZWlnbk1lc3NhZ2UsIGZpZWxkc1tU
ZXN0QWxsVHlwZXMuU2luZ2xlRm9yZWlnbk1lc3NhZ2VGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0
VmFsdWUobWVzc2FnZSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UuU2lu
Z2xlSW1wb3J0RW51bSwgZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVJbXBvcnRFbnVtRmllbGRO
dW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbChtZXNzYWdlLlNpbmdsZUltcG9ydE1lc3NhZ2UsIGZpZWxkc1tUZXN0QWxsVHlwZXMu
U2luZ2xlSW1wb3J0TWVzc2FnZUZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdl
KSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobWVzc2FnZS5TaW5nbGVJbnQzMiwgZmll
bGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVJbnQzMkZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1
ZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobWVzc2FnZS5TaW5nbGVJ
bnQ2NCwgZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVJbnQ2NEZpZWxkTnVtYmVyXS5BY2Nlc3Nv
ci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobWVzc2Fn
ZS5TaW5nbGVOZXN0ZWRFbnVtLCBmaWVsZHNbVGVzdEFsbFR5cGVzLlNpbmdsZU5lc3RlZEVudW1G
aWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUobWVzc2FnZSkpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKG1lc3NhZ2UuU2luZ2xlTmVzdGVkTWVzc2FnZSwgZmllbGRzW1Rlc3RBbGxU
eXBlcy5TaW5nbGVOZXN0ZWRNZXNzYWdlRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1l
c3NhZ2UpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLlNpbmdsZVB1Ymxp
Y0ltcG9ydE1lc3NhZ2UsIGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xlUHVibGljSW1wb3J0TWVz
c2FnZUZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0gICAgICAgICAg
ICBBc3NlcnQuQXJlRXF1YWwobWVzc2FnZS5TaW5nbGVTaW50MzIsIGZpZWxkc1tUZXN0QWxsVHlw
ZXMuU2luZ2xlU2ludDMyRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpKTsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLlNpbmdsZVNpbnQ2NCwgZmllbGRz
W1Rlc3RBbGxUeXBlcy5TaW5nbGVTaW50NjRGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUo
bWVzc2FnZSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UuU2luZ2xlU3Ry
aW5nLCBmaWVsZHNbVGVzdEFsbFR5cGVzLlNpbmdsZVN0cmluZ0ZpZWxkTnVtYmVyXS5BY2Nlc3Nv
ci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobWVzc2Fn
ZS5TaW5nbGVTZml4ZWQzMiwgZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVTZml4ZWQzMkZpZWxk
TnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwobWVzc2FnZS5TaW5nbGVTZml4ZWQ2NCwgZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5n
bGVTZml4ZWQ2NEZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwobWVzc2FnZS5TaW5nbGVVaW50MzIsIGZpZWxkc1tUZXN0
QWxsVHlwZXMuU2luZ2xlVWludDMyRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3Nh
Z2UpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLlNpbmdsZVVpbnQ2NCwg
ZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVVaW50NjRGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0
VmFsdWUobWVzc2FnZSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UuT25l
b2ZCeXRlcywgZmllbGRzW1Rlc3RBbGxUeXBlcy5PbmVvZkJ5dGVzRmllbGROdW1iZXJdLkFjY2Vz
c29yLkdldFZhbHVlKG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNz
YWdlLk9uZW9mU3RyaW5nLCBmaWVsZHNbVGVzdEFsbFR5cGVzLk9uZW9mU3RyaW5nRmllbGROdW1i
ZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVF
cXVhbChtZXNzYWdlLk9uZW9mTmVzdGVkTWVzc2FnZSwgZmllbGRzW1Rlc3RBbGxUeXBlcy5PbmVv
Zk5lc3RlZE1lc3NhZ2VGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUobWVzc2FnZSkpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UuT25lb2ZVaW50MzIsIGZpZWxkc1tU
ZXN0QWxsVHlwZXMuT25lb2ZVaW50MzJGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUobWVz
c2FnZSkpOwotCi0gICAgICAgICAgICAvLyBKdXN0IG9uZSBleGFtcGxlIGZvciByZXBlYXRlZCBm
aWVsZHMgLSB0aGV5J3JlIGFsbCBqdXN0IHJldHVybmluZyB0aGUgbGlzdAotICAgICAgICAgICAg
dmFyIGxpc3QgPSAoSUxpc3QpIGZpZWxkc1tUZXN0QWxsVHlwZXMuUmVwZWF0ZWRJbnQzMkZpZWxk
TnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbChtZXNzYWdlLlJlcGVhdGVkSW50MzIsIGxpc3QpOwotICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKG1lc3NhZ2UuUmVwZWF0ZWRJbnQzMlswXSwgbGlzdFswXSk7IC8vIEp1c3QgaW4g
Y2FzZSB0aGVyZSB3YXMgYW55IGRvdWJ0Li4uCi0KLSAgICAgICAgICAgIC8vIEp1c3QgYSBzaW5n
bGUgbWFwIGZpZWxkLCBmb3IgdGhlIHNhbWUgcmVhc29uCi0gICAgICAgICAgICB2YXIgbWFwTWVz
c2FnZSA9IG5ldyBUZXN0TWFwIHsgTWFwU3RyaW5nU3RyaW5nID0geyB7ICJrZXkxIiwgInZhbHVl
MSIgfSwgeyAia2V5MiIsICJ2YWx1ZTIiIH0gfSB9OwotICAgICAgICAgICAgZmllbGRzID0gVGVz
dE1hcC5EZXNjcmlwdG9yLkZpZWxkczsKLSAgICAgICAgICAgIHZhciBkaWN0aW9uYXJ5ID0gKElE
aWN0aW9uYXJ5KSBmaWVsZHNbVGVzdE1hcC5NYXBTdHJpbmdTdHJpbmdGaWVsZE51bWJlcl0uQWNj
ZXNzb3IuR2V0VmFsdWUobWFwTWVzc2FnZSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwo
bWFwTWVzc2FnZS5NYXBTdHJpbmdTdHJpbmcsIGRpY3Rpb25hcnkpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKCJ2YWx1ZTEiLCBkaWN0aW9uYXJ5WyJrZXkxIl0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIENsZWFyKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBTYW1wbGVNZXNzYWdlcy5DcmVhdGVGdWxsVGVzdEFs
bFR5cGVzKCk7Ci0gICAgICAgICAgICB2YXIgZmllbGRzID0gVGVzdEFsbFR5cGVzLkRlc2NyaXB0
b3IuRmllbGRzOwotICAgICAgICAgICAgZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVCb29sRmll
bGROdW1iZXJdLkFjY2Vzc29yLkNsZWFyKG1lc3NhZ2UpOwotICAgICAgICAgICAgZmllbGRzW1Rl
c3RBbGxUeXBlcy5TaW5nbGVJbnQzMkZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5DbGVhcihtZXNzYWdl
KTsKLSAgICAgICAgICAgIGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xlU3RyaW5nRmllbGROdW1i
ZXJdLkFjY2Vzc29yLkNsZWFyKG1lc3NhZ2UpOwotICAgICAgICAgICAgZmllbGRzW1Rlc3RBbGxU
eXBlcy5TaW5nbGVCeXRlc0ZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5DbGVhcihtZXNzYWdlKTsKLSAg
ICAgICAgICAgIGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xlRm9yZWlnbkVudW1GaWVsZE51bWJl
cl0uQWNjZXNzb3IuQ2xlYXIobWVzc2FnZSk7Ci0gICAgICAgICAgICBmaWVsZHNbVGVzdEFsbFR5
cGVzLlNpbmdsZUZvcmVpZ25NZXNzYWdlRmllbGROdW1iZXJdLkFjY2Vzc29yLkNsZWFyKG1lc3Nh
Z2UpOwotICAgICAgICAgICAgZmllbGRzW1Rlc3RBbGxUeXBlcy5SZXBlYXRlZERvdWJsZUZpZWxk
TnVtYmVyXS5BY2Nlc3Nvci5DbGVhcihtZXNzYWdlKTsKLQotICAgICAgICAgICAgdmFyIGV4cGVj
dGVkID0gbmV3IFRlc3RBbGxUeXBlcyhTYW1wbGVNZXNzYWdlcy5DcmVhdGVGdWxsVGVzdEFsbFR5
cGVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2luZ2xlQm9vbCA9IGZhbHNl
LAotICAgICAgICAgICAgICAgIFNpbmdsZUludDMyID0gMCwKLSAgICAgICAgICAgICAgICBTaW5n
bGVTdHJpbmcgPSAiIiwKLSAgICAgICAgICAgICAgICBTaW5nbGVCeXRlcyA9IEJ5dGVTdHJpbmcu
RW1wdHksCi0gICAgICAgICAgICAgICAgU2luZ2xlRm9yZWlnbkVudW0gPSAwLAotICAgICAgICAg
ICAgICAgIFNpbmdsZUZvcmVpZ25NZXNzYWdlID0gbnVsbCwKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICBleHBlY3RlZC5SZXBlYXRlZERvdWJsZS5DbGVhcigpOwotCi0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWQsIG1lc3NhZ2UpOwotCi0gICAgICAgICAgICAvLyBTZXBh
cmF0ZWx5LCBtYXBzLgotICAgICAgICAgICAgdmFyIG1hcE1lc3NhZ2UgPSBuZXcgVGVzdE1hcCB7
IE1hcFN0cmluZ1N0cmluZyA9IHsgeyAia2V5MSIsICJ2YWx1ZTEiIH0sIHsgImtleTIiLCAidmFs
dWUyIiB9IH0gfTsKLSAgICAgICAgICAgIGZpZWxkcyA9IFRlc3RNYXAuRGVzY3JpcHRvci5GaWVs
ZHM7Ci0gICAgICAgICAgICBmaWVsZHNbVGVzdE1hcC5NYXBTdHJpbmdTdHJpbmdGaWVsZE51bWJl
cl0uQWNjZXNzb3IuQ2xlYXIobWFwTWVzc2FnZSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwoMCwgbWFwTWVzc2FnZS5NYXBTdHJpbmdTdHJpbmcuQ291bnQpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNldFZhbHVlX1NpbmdsZUZpZWxkcygp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEp1c3QgYSBzYW1wbGUgKHByaW1pdGl2ZXMsIG1l
c3NhZ2VzLCBlbnVtcywgc3RyaW5ncywgYnl0ZSBzdHJpbmdzKQotICAgICAgICAgICAgdmFyIG1l
c3NhZ2UgPSBTYW1wbGVNZXNzYWdlcy5DcmVhdGVGdWxsVGVzdEFsbFR5cGVzKCk7Ci0gICAgICAg
ICAgICB2YXIgZmllbGRzID0gVGVzdEFsbFR5cGVzLkRlc2NyaXB0b3IuRmllbGRzOwotICAgICAg
ICAgICAgZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVCb29sRmllbGROdW1iZXJdLkFjY2Vzc29y
LlNldFZhbHVlKG1lc3NhZ2UsIGZhbHNlKTsKLSAgICAgICAgICAgIGZpZWxkc1tUZXN0QWxsVHlw
ZXMuU2luZ2xlSW50MzJGaWVsZE51bWJlcl0uQWNjZXNzb3IuU2V0VmFsdWUobWVzc2FnZSwgNTAw
KTsKLSAgICAgICAgICAgIGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xlU3RyaW5nRmllbGROdW1i
ZXJdLkFjY2Vzc29yLlNldFZhbHVlKG1lc3NhZ2UsICJJdCdzIGEgc3RyaW5nIik7Ci0gICAgICAg
ICAgICBmaWVsZHNbVGVzdEFsbFR5cGVzLlNpbmdsZUJ5dGVzRmllbGROdW1iZXJdLkFjY2Vzc29y
LlNldFZhbHVlKG1lc3NhZ2UsIEJ5dGVTdHJpbmcuQ29weUZyb20oOTksIDk4LCA5NykpOwotICAg
ICAgICAgICAgZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVGb3JlaWduRW51bUZpZWxkTnVtYmVy
XS5BY2Nlc3Nvci5TZXRWYWx1ZShtZXNzYWdlLCBGb3JlaWduRW51bS5Gb3JlaWduRm9vKTsKLSAg
ICAgICAgICAgIGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xlRm9yZWlnbk1lc3NhZ2VGaWVsZE51
bWJlcl0uQWNjZXNzb3IuU2V0VmFsdWUobWVzc2FnZSwgbmV3IEZvcmVpZ25NZXNzYWdlIHsgQyA9
IDEyMzQ1IH0pOwotICAgICAgICAgICAgZmllbGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVEb3VibGVG
aWVsZE51bWJlcl0uQWNjZXNzb3IuU2V0VmFsdWUobWVzc2FnZSwgMjAxNTA3MDEuNSk7Ci0KLSAg
ICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBUZXN0QWxsVHlwZXMoU2FtcGxlTWVzc2FnZXMu
Q3JlYXRlRnVsbFRlc3RBbGxUeXBlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IFNpbmdsZUJvb2wgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICBTaW5nbGVJbnQzMiA9IDUwMCwK
LSAgICAgICAgICAgICAgICBTaW5nbGVTdHJpbmcgPSAiSXQncyBhIHN0cmluZyIsCi0gICAgICAg
ICAgICAgICAgU2luZ2xlQnl0ZXMgPSBCeXRlU3RyaW5nLkNvcHlGcm9tKDk5LCA5OCwgOTcpLAot
ICAgICAgICAgICAgICAgIFNpbmdsZUZvcmVpZ25FbnVtID0gRm9yZWlnbkVudW0uRm9yZWlnbkZv
bywKLSAgICAgICAgICAgICAgICBTaW5nbGVGb3JlaWduTWVzc2FnZSA9IG5ldyBGb3JlaWduTWVz
c2FnZSB7IEMgPSAxMjM0NSB9LAotICAgICAgICAgICAgICAgIFNpbmdsZURvdWJsZSA9IDIwMTUw
NzAxLjUKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBl
Y3RlZCwgbWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVi
bGljIHZvaWQgU2V0VmFsdWVfU2luZ2xlRmllbGRzX1dyb25nVHlwZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIElNZXNzYWdlIG1lc3NhZ2UgPSBTYW1wbGVNZXNzYWdlcy5DcmVhdGVGdWxsVGVz
dEFsbFR5cGVzKCk7Ci0gICAgICAgICAgICB2YXIgZmllbGRzID0gbWVzc2FnZS5EZXNjcmlwdG9y
LkZpZWxkczsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxpZENhc3RFeGNlcHRpb24+
KCgpID0+IGZpZWxkc1tUZXN0QWxsVHlwZXMuU2luZ2xlQm9vbEZpZWxkTnVtYmVyXS5BY2Nlc3Nv
ci5TZXRWYWx1ZShtZXNzYWdlLCAiVGhpcyBpc24ndCBhIGJvb2wiKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2V0VmFsdWVfTWFwRmllbGRzKCkK
LSAgICAgICAgewotICAgICAgICAgICAgSU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBUZXN0TWFwKCk7
Ci0gICAgICAgICAgICB2YXIgZmllbGRzID0gbWVzc2FnZS5EZXNjcmlwdG9yLkZpZWxkczsKLSAg
ICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbj4oKCkgPT4g
ZmllbGRzW1Rlc3RNYXAuTWFwU3RyaW5nU3RyaW5nRmllbGROdW1iZXJdLkFjY2Vzc29yLlNldFZh
bHVlKG1lc3NhZ2UsIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPigpKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2V0VmFsdWVfUmVwZWF0
ZWRGaWVsZHMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBJTWVzc2FnZSBtZXNzYWdlID0gU2Ft
cGxlTWVzc2FnZXMuQ3JlYXRlRnVsbFRlc3RBbGxUeXBlcygpOwotICAgICAgICAgICAgdmFyIGZp
ZWxkcyA9IG1lc3NhZ2UuRGVzY3JpcHRvci5GaWVsZHM7Ci0gICAgICAgICAgICBBc3NlcnQuVGhy
b3dzPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+KCgpID0+IGZpZWxkc1tUZXN0QWxsVHlwZXMu
UmVwZWF0ZWREb3VibGVGaWVsZE51bWJlcl0uQWNjZXNzb3IuU2V0VmFsdWUobWVzc2FnZSwgbmV3
IGRvdWJsZVsxMF0pKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJs
aWMgdm9pZCBHZXRWYWx1ZV9JbmNvcnJlY3RUeXBlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
SU1lc3NhZ2UgbWVzc2FnZSA9IFNhbXBsZU1lc3NhZ2VzLkNyZWF0ZUZ1bGxUZXN0QWxsVHlwZXMo
KTsKLSAgICAgICAgICAgIHZhciBmaWVsZHMgPSBtZXNzYWdlLkRlc2NyaXB0b3IuRmllbGRzOwot
ICAgICAgICAgICAgQXNzZXJ0LlRocm93czxJbnZhbGlkQ2FzdEV4Y2VwdGlvbj4oKCkgPT4gZmll
bGRzW1Rlc3RBbGxUeXBlcy5TaW5nbGVCb29sRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVl
KG5ldyBUZXN0TWFwKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBw
dWJsaWMgdm9pZCBPbmVvZigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0g
bmV3IFRlc3RBbGxUeXBlcygpOwotICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBUZXN0QWxs
VHlwZXMuRGVzY3JpcHRvcjsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxLCBkZXNjcmlw
dG9yLk9uZW9mcy5Db3VudCk7Ci0gICAgICAgICAgICB2YXIgb25lb2YgPSBkZXNjcmlwdG9yLk9u
ZW9mc1swXTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgib25lb2ZfZmllbGQiLCBvbmVv
Zi5OYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc051bGwob25lb2YuQWNjZXNzb3IuR2V0Q2Fz
ZUZpZWxkRGVzY3JpcHRvcihtZXNzYWdlKSk7Ci0KLSAgICAgICAgICAgIG1lc3NhZ2UuT25lb2ZT
dHJpbmcgPSAiZm9vIjsKLSAgICAgICAgICAgIEFzc2VydC5BcmVTYW1lKGRlc2NyaXB0b3IuRmll
bGRzW1Rlc3RBbGxUeXBlcy5PbmVvZlN0cmluZ0ZpZWxkTnVtYmVyXSwgb25lb2YuQWNjZXNzb3Iu
R2V0Q2FzZUZpZWxkRGVzY3JpcHRvcihtZXNzYWdlKSk7Ci0KLSAgICAgICAgICAgIG1lc3NhZ2Uu
T25lb2ZVaW50MzIgPSAxMDsKLSAgICAgICAgICAgIEFzc2VydC5BcmVTYW1lKGRlc2NyaXB0b3Iu
RmllbGRzW1Rlc3RBbGxUeXBlcy5PbmVvZlVpbnQzMkZpZWxkTnVtYmVyXSwgb25lb2YuQWNjZXNz
b3IuR2V0Q2FzZUZpZWxkRGVzY3JpcHRvcihtZXNzYWdlKSk7Ci0KLSAgICAgICAgICAgIG9uZW9m
LkFjY2Vzc29yLkNsZWFyKG1lc3NhZ2UpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKFRl
c3RBbGxUeXBlcy5PbmVvZkZpZWxkT25lb2ZDYXNlLk5vbmUsIG1lc3NhZ2UuT25lb2ZGaWVsZENh
c2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEZp
ZWxkRGVzY3JpcHRvcl9CeU5hbWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZGVzY3Jp
cHRvciA9IFRlc3RBbGxUeXBlcy5EZXNjcmlwdG9yOwotICAgICAgICAgICAgQXNzZXJ0LkFyZVNh
bWUoCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5GaWVsZHNbVGVzdEFsbFR5cGVzLlNpbmds
ZUJvb2xGaWVsZE51bWJlcl0sCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5GaWVsZHNbInNp
bmdsZV9ib29sIl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1Ymxp
YyB2b2lkIEZpZWxkRGVzY3JpcHRvcl9Ob3RGb3VuZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZhciBkZXNjcmlwdG9yID0gVGVzdEFsbFR5cGVzLkRlc2NyaXB0b3I7Ci0gICAgICAgICAgICBB
c3NlcnQuVGhyb3dzPEtleU5vdEZvdW5kRXhjZXB0aW9uPigoKSA9PiBkZXNjcmlwdG9yLkZpZWxk
c1s5OTk5OTldLlRvU3RyaW5nKCkpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxLZXlOb3RG
b3VuZEV4Y2VwdGlvbj4oKCkgPT4gZGVzY3JpcHRvci5GaWVsZHNbIm5vdCBmb3VuZCJdLlRvU3Ry
aW5nKCkpOwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvUmVmbGVjdGlvbi9UeXBlUmVnaXN0cnlUZXN0LmNzIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9j
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1JlZmxlY3Rpb24vVHlwZVJlZ2lzdHJ5VGVz
dC5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJlN2NhMjM2MTE3MDA0NDM3Nzg2
Y2NiYTU5YWYxOTBiYzY2M2Q2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvUmVmbGVjdGlvbi9UeXBl
UmVnaXN0cnlUZXN0LmNzCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAot77u/I3JlZ2lv
biBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgR29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3M7
Ci11c2luZyBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXM7Ci11c2luZyBOVW5pdC5GcmFt
ZXdvcms7Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbgotewotICAgIHB1
YmxpYyBjbGFzcyBUeXBlUmVnaXN0cnlUZXN0Ci0gICAgewotICAgICAgICAvLyBNb3N0IG9mIG91
ciB0ZXN0cyB1c2UgbWVzc2FnZXMuIFNpbXBsZSB0ZXN0IHRoYXQgd2UgcmVhbGx5IGNhbiB1c2Ug
ZmlsZXMuLi4KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIENyZWF0ZVdpdGhG
aWxlRGVzY3JpcHRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZWdpc3RyeSA9IFR5
cGVSZWdpc3RyeS5Gcm9tRmlsZXMoRHVyYXRpb25SZWZsZWN0aW9uLkRlc2NyaXB0b3IsIFN0cnVj
dFJlZmxlY3Rpb24uRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBBc3NlcnREZXNjcmlwdG9yUHJl
c2VudChyZWdpc3RyeSwgRHVyYXRpb24uRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBBc3NlcnRE
ZXNjcmlwdG9yUHJlc2VudChyZWdpc3RyeSwgTGlzdFZhbHVlLkRlc2NyaXB0b3IpOwotICAgICAg
ICAgICAgQXNzZXJ0RGVzY3JpcHRvckFic2VudChyZWdpc3RyeSwgVGltZXN0YW1wLkRlc2NyaXB0
b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFR5
cGVzRnJvbVNhbWVGaWxlKCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSnVzdCBmb3Iga2lj
a3MsIGxldCdzIHN0YXJ0IHdpdGggYSBuZXN0ZWQgdHlwZQotICAgICAgICAgICAgdmFyIHJlZ2lz
dHJ5ID0gVHlwZVJlZ2lzdHJ5LkZyb21NZXNzYWdlcyhUZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVk
TWVzc2FnZS5EZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIC8vIFRvcC1sZXZlbC4uLgotICAgICAg
ICAgICAgQXNzZXJ0RGVzY3JpcHRvclByZXNlbnQocmVnaXN0cnksIFRlc3RGaWVsZE9yZGVyaW5n
cy5EZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIC8vIC4uLiBhbmQgbmVzdGVkIChub3QgdGhlIHNh
bWUgYXMgdGhlIG9yaWdpbmFsIE5lc3RlZE1lc3NhZ2UhKQotICAgICAgICAgICAgQXNzZXJ0RGVz
Y3JpcHRvclByZXNlbnQocmVnaXN0cnksIFRlc3RGaWVsZE9yZGVyaW5ncy5UeXBlcy5OZXN0ZWRN
ZXNzYWdlLkRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAg
IHB1YmxpYyB2b2lkIERlcGVuZGVuY2llc0FyZUluY2x1ZGVkKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdmFyIHJlZ2lzdHJ5ID0gVHlwZVJlZ2lzdHJ5LkZyb21NZXNzYWdlcyhUZXN0QWxsVHlw
ZXMuRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAvLyBEaXJlY3QgZGVwZW5kZW5jaWVzCi0gICAg
ICAgICAgICBBc3NlcnREZXNjcmlwdG9yUHJlc2VudChyZWdpc3RyeSwgSW1wb3J0TWVzc2FnZS5E
ZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIC8vIFB1YmxpYyBkZXBlbmRlbmNpZXMKLSAgICAgICAg
ICAgIEFzc2VydERlc2NyaXB0b3JQcmVzZW50KHJlZ2lzdHJ5LCBQdWJsaWNJbXBvcnRNZXNzYWdl
LkRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1Ymxp
YyB2b2lkIER1cGxpY2F0ZUZpbGVzKCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRHVwbGlj
YXRlcyB2aWEgZGVwZW5kZW5jaWVzIGFuZCBzaW1wbHkgdmlhIHJlcGV0aXRpb24KLSAgICAgICAg
ICAgIHZhciByZWdpc3RyeSA9IFR5cGVSZWdpc3RyeS5Gcm9tRmlsZXMoCi0gICAgICAgICAgICAg
ICAgVW5pdHRlc3RQcm90bzNSZWZsZWN0aW9uLkRlc2NyaXB0b3IsIFVuaXR0ZXN0SW1wb3J0UHJv
dG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgIFRpbWVzdGFtcFJlZmxl
Y3Rpb24uRGVzY3JpcHRvciwgVGltZXN0YW1wUmVmbGVjdGlvbi5EZXNjcmlwdG9yKTsKLSAgICAg
ICAgICAgIEFzc2VydERlc2NyaXB0b3JQcmVzZW50KHJlZ2lzdHJ5LCBUZXN0QWxsVHlwZXMuRGVz
Y3JpcHRvcik7Ci0gICAgICAgICAgICBBc3NlcnREZXNjcmlwdG9yUHJlc2VudChyZWdpc3RyeSwg
SW1wb3J0TWVzc2FnZS5EZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIEFzc2VydERlc2NyaXB0b3JQ
cmVzZW50KHJlZ2lzdHJ5LCBUaW1lc3RhbXAuRGVzY3JpcHRvcik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIEFzc2VydERlc2NyaXB0b3JQcmVzZW50KFR5cGVSZWdp
c3RyeSByZWdpc3RyeSwgTWVzc2FnZURlc2NyaXB0b3IgZGVzY3JpcHRvcikKLSAgICAgICAgewot
ICAgICAgICAgICAgQXNzZXJ0LkFyZVNhbWUoZGVzY3JpcHRvciwgcmVnaXN0cnkuRmluZChkZXNj
cmlwdG9yLkZ1bGxOYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyB2
b2lkIEFzc2VydERlc2NyaXB0b3JBYnNlbnQoVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5LCBNZXNzYWdl
RGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnQuSXNO
dWxsKHJlZ2lzdHJ5LkZpbmQoZGVzY3JpcHRvci5GdWxsTmFtZSkpOwotICAgICAgICB9Ci0gICAg
fQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1NhbXBsZUVu
dW0uY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvU2FtcGxlRW51bS5jcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc0NDdhZmExMjczNDAwNDYyOTgwODFkOWJmY2E0
ZGQ1MWMxNGY2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvU2FtcGxlRW51bS5jcworKysgL2Rldi9u
dWxsCkBAIC0xLDQyICswLDAgQEAKLSNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5z
ZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0gICAgCi1u
YW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmCi17Ci0gICAgLy8gSnVzdCBhIHNhbXBsZSBlbnVtIHdp
dGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcyB0byBiZSB1c2VkIGluIHRlc3RzLgotICAg
IGludGVybmFsIGVudW0gU2FtcGxlRW51bQotICAgIHsKLSAgICAgICAgTmVnYXRpdmVWYWx1ZSA9
IC0yLAotICAgICAgICBOb25lID0gMCwKLSAgICAgICAgUG9zaXRpdmVWYWx1ZSA9IDMKLSAgICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvU2FtcGxlTWVz
c2FnZXMuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvU2FtcGxlTWVzc2FnZXMu
Y3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYTRlMmE3YzI3ZDJhYTZkMzM2YmZl
N2YxZTU2OGNkZmNlMTBlZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1NhbXBsZU1lc3NhZ2VzLmNz
CisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90
aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRy
ZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgR29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3M7
Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
Ly8vIEhlbHBlciBtZXRob2RzIHRvIGNyZWF0ZSBzYW1wbGUgaW5zdGFuY2VzIG9mIHR5cGVzIGdl
bmVyYXRlZCBmcm9tIHVuaXQgdGVzdCBtZXNzYWdlcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBjbGFzcyBTYW1wbGVNZXNzYWdlcwotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIG5ldyBzYW1wbGUgVGVzdEFsbFR5cGVzIG1lc3NhZ2Ug
d2l0aCBhbGwgZmllbGRzIHBvcHVsYXRlZC4KLSAgICAgICAgLy8vIFRoZSAib25lb2YiIGZpZWxk
IGlzIHBvcHVsYXRlZCB3aXRoIHRoZSBzdHJpbmcgcHJvcGVydHkgKE9uZW9mU3RyaW5nKS4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBUZXN0QWxsVHlwZXMg
Q3JlYXRlRnVsbFRlc3RBbGxUeXBlcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgVGVzdEFsbFR5cGVzCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2luZ2xlQm9v
bCA9IHRydWUsCi0gICAgICAgICAgICAgICAgU2luZ2xlQnl0ZXMgPSBCeXRlU3RyaW5nLkNvcHlG
cm9tKDEsIDIsIDMsIDQpLAotICAgICAgICAgICAgICAgIFNpbmdsZURvdWJsZSA9IDIzLjUsCi0g
ICAgICAgICAgICAgICAgU2luZ2xlRml4ZWQzMiA9IDIzLAotICAgICAgICAgICAgICAgIFNpbmds
ZUZpeGVkNjQgPSAxMjM0NTY3ODkwMTIzLAotICAgICAgICAgICAgICAgIFNpbmdsZUZsb2F0ID0g
MTIuMjVmLAotICAgICAgICAgICAgICAgIFNpbmdsZUZvcmVpZ25FbnVtID0gRm9yZWlnbkVudW0u
Rm9yZWlnbkJhciwKLSAgICAgICAgICAgICAgICBTaW5nbGVGb3JlaWduTWVzc2FnZSA9IG5ldyBG
b3JlaWduTWVzc2FnZSB7IEMgPSAxMCB9LAotICAgICAgICAgICAgICAgIFNpbmdsZUltcG9ydEVu
dW0gPSBJbXBvcnRFbnVtLkltcG9ydEJheiwKLSAgICAgICAgICAgICAgICBTaW5nbGVJbXBvcnRN
ZXNzYWdlID0gbmV3IEltcG9ydE1lc3NhZ2UgeyBEID0gMjAgfSwKLSAgICAgICAgICAgICAgICBT
aW5nbGVJbnQzMiA9IDEwMCwKLSAgICAgICAgICAgICAgICBTaW5nbGVJbnQ2NCA9IDMyMTA5ODc2
NTQzMjEsCi0gICAgICAgICAgICAgICAgU2luZ2xlTmVzdGVkRW51bSA9IFRlc3RBbGxUeXBlcy5U
eXBlcy5OZXN0ZWRFbnVtLkZvbywKLSAgICAgICAgICAgICAgICBTaW5nbGVOZXN0ZWRNZXNzYWdl
ID0gbmV3IFRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlIHsgQmIgPSAzNSB9LAotICAg
ICAgICAgICAgICAgIFNpbmdsZVB1YmxpY0ltcG9ydE1lc3NhZ2UgPSBuZXcgUHVibGljSW1wb3J0
TWVzc2FnZSB7IEUgPSA1NCB9LAotICAgICAgICAgICAgICAgIFNpbmdsZVNmaXhlZDMyID0gLTEy
MywKLSAgICAgICAgICAgICAgICBTaW5nbGVTZml4ZWQ2NCA9IC0xMjM0NTY3ODkwMTIzNCwKLSAg
ICAgICAgICAgICAgICBTaW5nbGVTaW50MzIgPSAtNDU2LAotICAgICAgICAgICAgICAgIFNpbmds
ZVNpbnQ2NCA9IC0xMjM0NTY3ODkwMTIzNSwKLSAgICAgICAgICAgICAgICBTaW5nbGVTdHJpbmcg
PSAidGVzdCIsCi0gICAgICAgICAgICAgICAgU2luZ2xlVWludDMyID0gVUludDMyLk1heFZhbHVl
LAotICAgICAgICAgICAgICAgIFNpbmdsZVVpbnQ2NCA9IFVJbnQ2NC5NYXhWYWx1ZSwKLSAgICAg
ICAgICAgICAgICBSZXBlYXRlZEJvb2wgPSB7IHRydWUsIGZhbHNlIH0sCi0gICAgICAgICAgICAg
ICAgUmVwZWF0ZWRCeXRlcyA9IHsgQnl0ZVN0cmluZy5Db3B5RnJvbSgxLCAyLCAzLCA0KSwgQnl0
ZVN0cmluZy5Db3B5RnJvbSg1LCA2KSwgQnl0ZVN0cmluZy5Db3B5RnJvbShuZXcgYnl0ZVsxMDAw
XSkgfSwKLSAgICAgICAgICAgICAgICBSZXBlYXRlZERvdWJsZSA9IHsgLTEyLjI1LCAyMy41IH0s
Ci0gICAgICAgICAgICAgICAgUmVwZWF0ZWRGaXhlZDMyID0geyBVSW50MzIuTWF4VmFsdWUsIDIz
IH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWRGaXhlZDY0ID0geyBVSW50NjQuTWF4VmFsdWUs
IDEyMzQ1Njc4OTAxMjMgfSwKLSAgICAgICAgICAgICAgICBSZXBlYXRlZEZsb2F0ID0geyAxMDBm
LCAxMi4yNWYgfSwKLSAgICAgICAgICAgICAgICBSZXBlYXRlZEZvcmVpZ25FbnVtID0geyBGb3Jl
aWduRW51bS5Gb3JlaWduRm9vLCBGb3JlaWduRW51bS5Gb3JlaWduQmFyIH0sCi0gICAgICAgICAg
ICAgICAgUmVwZWF0ZWRGb3JlaWduTWVzc2FnZSA9IHsgbmV3IEZvcmVpZ25NZXNzYWdlKCksIG5l
dyBGb3JlaWduTWVzc2FnZSB7IEMgPSAxMCB9IH0sCi0gICAgICAgICAgICAgICAgUmVwZWF0ZWRJ
bXBvcnRFbnVtID0geyBJbXBvcnRFbnVtLkltcG9ydEJheiwgSW1wb3J0RW51bS5VbnNwZWNpZmll
ZCB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkSW1wb3J0TWVzc2FnZSA9IHsgbmV3IEltcG9y
dE1lc3NhZ2UgeyBEID0gMjAgfSwgbmV3IEltcG9ydE1lc3NhZ2UgeyBEID0gMjUgfSB9LAotICAg
ICAgICAgICAgICAgIFJlcGVhdGVkSW50MzIgPSB7IDEwMCwgMjAwIH0sCi0gICAgICAgICAgICAg
ICAgUmVwZWF0ZWRJbnQ2NCA9IHsgMzIxMDk4NzY1NDMyMSwgSW50NjQuTWF4VmFsdWUgfSwKLSAg
ICAgICAgICAgICAgICBSZXBlYXRlZE5lc3RlZEVudW0gPSB7IFRlc3RBbGxUeXBlcy5UeXBlcy5O
ZXN0ZWRFbnVtLkZvbywgVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZEVudW0uTmVnIH0sCi0gICAg
ICAgICAgICAgICAgUmVwZWF0ZWROZXN0ZWRNZXNzYWdlID0geyBuZXcgVGVzdEFsbFR5cGVzLlR5
cGVzLk5lc3RlZE1lc3NhZ2UgeyBCYiA9IDM1IH0sIG5ldyBUZXN0QWxsVHlwZXMuVHlwZXMuTmVz
dGVkTWVzc2FnZSB7IEJiID0gMTAgfSB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkUHVibGlj
SW1wb3J0TWVzc2FnZSA9IHsgbmV3IFB1YmxpY0ltcG9ydE1lc3NhZ2UgeyBFID0gNTQgfSwgbmV3
IFB1YmxpY0ltcG9ydE1lc3NhZ2UgeyBFID0gLTEgfSB9LAotICAgICAgICAgICAgICAgIFJlcGVh
dGVkU2ZpeGVkMzIgPSB7IC0xMjMsIDEyMyB9LAotICAgICAgICAgICAgICAgIFJlcGVhdGVkU2Zp
eGVkNjQgPSB7IC0xMjM0NTY3ODkwMTIzNCwgMTIzNDU2Nzg5MDEyMzQgfSwKLSAgICAgICAgICAg
ICAgICBSZXBlYXRlZFNpbnQzMiA9IHsgLTQ1NiwgMTAwIH0sCi0gICAgICAgICAgICAgICAgUmVw
ZWF0ZWRTaW50NjQgPSB7IC0xMjM0NTY3ODkwMTIzNSwgMTIzIH0sCi0gICAgICAgICAgICAgICAg
UmVwZWF0ZWRTdHJpbmcgPSB7ICJmb28iLCAiYmFyIiB9LAotICAgICAgICAgICAgICAgIFJlcGVh
dGVkVWludDMyID0geyBVSW50MzIuTWF4VmFsdWUsIFVJbnQzMi5NaW5WYWx1ZSB9LAotICAgICAg
ICAgICAgICAgIFJlcGVhdGVkVWludDY0ID0geyBVSW50NjQuTWF4VmFsdWUsIFVJbnQzMi5NaW5W
YWx1ZSB9LAotICAgICAgICAgICAgICAgIE9uZW9mU3RyaW5nID0gIk9uZW9mIHN0cmluZyIKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Rlc3RDb3Ju
ZXJDYXNlcy5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9UZXN0Q29ybmVyQ2Fz
ZXMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNzViMTlmNDJlZDlkZTc5YTFk
MzczYTEyMDM4ZGNmMGExMDNmZWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Rlc3RDb3JuZXJDYXNl
cy5jcworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0
IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0j
ZW5kcmVnaW9uCi0gICAgCi11c2luZyBVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3RvczsKLXVzaW5n
IE5Vbml0LkZyYW1ld29yazsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1ZgotewotICAgIHB1
YmxpYyBjbGFzcyBUZXN0Q29ybmVyQ2FzZXMKLSAgICB7Ci0gICAgICAgIFtUZXN0XQotICAgICAg
ICBwdWJsaWMgdm9pZCBUZXN0Um91bmRUcmlwTmVnYXRpdmVFbnVtcygpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIE5lZ2F0aXZlRW51bU1lc3NhZ2UgbXNnID0gbmV3IE5lZ2F0aXZlRW51bU1lc3Nh
Z2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSA9IE5lZ2F0aXZlRW51bS5N
aW51c09uZSwKLSAgICAgICAgICAgICAgICBWYWx1ZXMgPSB7IE5lZ2F0aXZlRW51bS5aZXJvLCBO
ZWdhdGl2ZUVudW0uTWludXNPbmUsIE5lZ2F0aXZlRW51bS5GaXZlQmVsb3cgfSwKLSAgICAgICAg
ICAgICAgICBQYWNrZWRWYWx1ZXMgPSB7IE5lZ2F0aXZlRW51bS5aZXJvLCBOZWdhdGl2ZUVudW0u
TWludXNPbmUsIE5lZ2F0aXZlRW51bS5GaXZlQmVsb3cgfQotICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDU4LCBtc2cuQ2FsY3VsYXRlU2l6ZSgpKTsKLQotICAg
ICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbNThdOwotICAgICAgICAgICAgQ29kZWRP
dXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IENvZGVkT3V0cHV0U3RyZWFtKGJ5dGVzKTsKLQotICAg
ICAgICAgICAgbXNnLldyaXRlVG8ob3V0cHV0KTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bCgwLCBvdXRwdXQuU3BhY2VMZWZ0KTsKLQotICAgICAgICAgICAgTmVnYXRpdmVFbnVtTWVzc2Fn
ZSBjb3B5ID0gTmVnYXRpdmVFbnVtTWVzc2FnZS5QYXJzZXIuUGFyc2VGcm9tKGJ5dGVzKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtc2csIGNvcHkpOwotICAgICAgICB9Ci0gICAgfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Rlc3RQcm90b3Mv
Rm9yZWlnbk1lc3NhZ2VQYXJ0aWFsLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0
L1Rlc3RQcm90b3MvRm9yZWlnbk1lc3NhZ2VQYXJ0aWFsLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1NjYzYTY5OTAyZTU5ODU4YjFmYThiMTcwZjY1MmZhZGIwYjU5NWE4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYuVGVzdC9UZXN0UHJvdG9zL0ZvcmVpZ25NZXNzYWdlUGFydGlhbC5jcworKysg
L2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBh
bmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9u
Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuVGVzdFByb3RvcwotewotICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAvLy8gQSBtZXNzYWdlIHdpdGggY3VzdG9tIGRpYWdub3N0aWNzICh0byB0ZXN0
IHRoYXQgdGhleSB3b3JrKS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBwYXJ0aWFs
IGNsYXNzIEZvcmVpZ25NZXNzYWdlIDogSUN1c3RvbURpYWdub3N0aWNNZXNzYWdlCi0gICAgewot
ICAgICAgICBwdWJsaWMgc3RyaW5nIFRvRGlhZ25vc3RpY1N0cmluZygpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAkInt7IFwiY1wiOiB7Q30sIFwiQGNJbkhleFwiOiBcIntDOnh9XCIg
fX0iOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Q
cm90b2J1Zi5UZXN0L1Rlc3RQcm90b3MvTWFwVW5pdHRlc3RQcm90bzMuY3MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMv
R29vZ2xlLlByb3RvYnVmLlRlc3QvVGVzdFByb3Rvcy9NYXBVbml0dGVzdFByb3RvMy5jcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JhNGEyYjY2M2M0ZjAxNjA2MTA4MDU0ZDM1MzVl
YjVhMmU0NDc0YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvVGVzdFByb3Rvcy9NYXBVbml0dGVzdFBy
b3RvMy5jcworKysgL2Rldi9udWxsCkBAIC0xLDE0NzEgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5
IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTog
Z29vZ2xlL3Byb3RvYnVmL21hcF91bml0dGVzdF9wcm90bzMucHJvdG8KLSNwcmFnbWEgd2Fybmlu
ZyBkaXNhYmxlIDE1OTEsIDA2MTIsIDMwMjEKLSNyZWdpb24gRGVzaWduZXIgZ2VuZXJhdGVkIGNv
ZGUKLQotdXNpbmcgcGIgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1ZjsKLXVzaW5nIHBiYyA9IGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLkNvbGxlY3Rpb25zOwotdXNpbmcgcGJyID0gZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbjsKLXVzaW5nIHNjZyA9IGdsb2JhbDo6U3lzdGVtLkNv
bGxlY3Rpb25zLkdlbmVyaWM7Ci1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3Mg
ewotCi0gIC8vLyA8c3VtbWFyeT5Ib2xkZXIgZm9yIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24gZ2Vu
ZXJhdGVkIGZyb20gZ29vZ2xlL3Byb3RvYnVmL21hcF91bml0dGVzdF9wcm90bzMucHJvdG88L3N1
bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2Rl
QXR0cmlidXRlKCldCi0gIHB1YmxpYyBzdGF0aWMgcGFydGlhbCBjbGFzcyBNYXBVbml0dGVzdFBy
b3RvM1JlZmxlY3Rpb24gewotCi0gICAgI3JlZ2lvbiBEZXNjcmlwdG9yCi0gICAgLy8vIDxzdW1t
YXJ5PkZpbGUgZGVzY3JpcHRvciBmb3IgZ29vZ2xlL3Byb3RvYnVmL21hcF91bml0dGVzdF9wcm90
bzMucHJvdG88L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9y
IERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGRlc2NyaXB0b3I7IH0KLSAgICB9Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgcGJyOjpGaWxlRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAg
c3RhdGljIE1hcFVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbigpIHsKLSAgICAgIGJ5dGVbXSBkZXNj
cmlwdG9yRGF0YSA9IGdsb2JhbDo6U3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZygKLSAg
ICAgICAgICBzdHJpbmcuQ29uY2F0KAotICAgICAgICAgICAgIkNpbG5iMjluYkdVdmNISnZkRzlp
ZFdZdmJXRndYM1Z1YVhSMFpYTjBYM0J5YjNSdk15NXdjbTkwYnhJUiIsCi0gICAgICAgICAgICAi
Y0hKdmRHOWlkV1pmZFc1cGRIUmxjM1FhSldkdmIyZHNaUzl3Y205MGIySjFaaTkxYm1sMGRHVnpk
Rjl3IiwKLSAgICAgICAgICAgICJjbTkwYnpNdWNISnZkRzhpbGhJS0IxUmxjM1JOWVhBU1Jnb1Bi
V0Z3WDJsdWRETXlYMmx1ZERNeUdBRWciLAotICAgICAgICAgICAgIkF5Z0xNaTB1Y0hKdmRHOWlk
V1pmZFc1cGRIUmxjM1F1VkdWemRFMWhjQzVOWVhCSmJuUXpNa2x1ZERNeSIsCi0gICAgICAgICAg
ICAiUlc1MGNua1NSZ29QYldGd1gybHVkRFkwWDJsdWREWTBHQUlnQXlnTE1pMHVjSEp2ZEc5aWRX
WmZkVzVwIiwKLSAgICAgICAgICAgICJkSFJsYzNRdVZHVnpkRTFoY0M1TllYQkpiblEyTkVsdWRE
WTBSVzUwY25rU1Nnb1JiV0Z3WDNWcGJuUXoiLAotICAgICAgICAgICAgIk1sOTFhVzUwTXpJWUF5
QURLQXN5THk1d2NtOTBiMkoxWmw5MWJtbDBkR1Z6ZEM1VVpYTjBUV0Z3TGsxaCIsCi0gICAgICAg
ICAgICAiY0ZWcGJuUXpNbFZwYm5Rek1rVnVkSEo1RWtvS0VXMWhjRjkxYVc1ME5qUmZkV2x1ZERZ
MEdBUWdBeWdMIiwKLSAgICAgICAgICAgICJNaTh1Y0hKdmRHOWlkV1pmZFc1cGRIUmxjM1F1VkdW
emRFMWhjQzVOWVhCVmFXNTBOalJWYVc1ME5qUkYiLAotICAgICAgICAgICAgImJuUnllUkpLQ2hG
dFlYQmZjMmx1ZERNeVgzTnBiblF6TWhnRklBTW9Dekl2TG5CeWIzUnZZblZtWDNWdSIsCi0gICAg
ICAgICAgICAiYVhSMFpYTjBMbFJsYzNSTllYQXVUV0Z3VTJsdWRETXlVMmx1ZERNeVJXNTBjbmtT
U2dvUmJXRndYM05wIiwKLSAgICAgICAgICAgICJiblEyTkY5emFXNTBOalFZQmlBREtBc3lMeTV3
Y205MGIySjFabDkxYm1sMGRHVnpkQzVVWlhOMFRXRnciLAotICAgICAgICAgICAgIkxrMWhjRk5w
Ym5RMk5GTnBiblEyTkVWdWRISjVFazRLRTIxaGNGOW1hWGhsWkRNeVgyWnBlR1ZrTXpJWSIsCi0g
ICAgICAgICAgICAiQnlBREtBc3lNUzV3Y205MGIySjFabDkxYm1sMGRHVnpkQzVVWlhOMFRXRndM
azFoY0VacGVHVmtNekpHIiwKLSAgICAgICAgICAgICJhWGhsWkRNeVJXNTBjbmtTVGdvVGJXRndY
MlpwZUdWa05qUmZabWw0WldRMk5CZ0lJQU1vQ3pJeExuQnkiLAotICAgICAgICAgICAgImIzUnZZ
blZtWDNWdWFYUjBaWE4wTGxSbGMzUk5ZWEF1VFdGd1JtbDRaV1EyTkVacGVHVmtOalJGYm5SeSIs
Ci0gICAgICAgICAgICAiZVJKU0NoVnRZWEJmYzJacGVHVmtNekpmYzJacGVHVmtNeklZQ1NBREtB
c3lNeTV3Y205MGIySjFabDkxIiwKLSAgICAgICAgICAgICJibWwwZEdWemRDNVVaWE4wVFdGd0xr
MWhjRk5tYVhobFpETXlVMlpwZUdWa016SkZiblJ5ZVJKU0NoVnQiLAotICAgICAgICAgICAgIllY
QmZjMlpwZUdWa05qUmZjMlpwZUdWa05qUVlDaUFES0FzeU15NXdjbTkwYjJKMVpsOTFibWwwZEdW
eiIsCi0gICAgICAgICAgICAiZEM1VVpYTjBUV0Z3TGsxaGNGTm1hWGhsWkRZMFUyWnBlR1ZrTmpS
RmJuUnllUkpHQ2c5dFlYQmZhVzUwIiwKLSAgICAgICAgICAgICJNekpmWm14dllYUVlDeUFES0Fz
eUxTNXdjbTkwYjJKMVpsOTFibWwwZEdWemRDNVVaWE4wVFdGd0xrMWgiLAotICAgICAgICAgICAg
ImNFbHVkRE15Um14dllYUkZiblJ5ZVJKSUNoQnRZWEJmYVc1ME16SmZaRzkxWW14bEdBd2dBeWdM
TWk0dSIsCi0gICAgICAgICAgICAiY0hKdmRHOWlkV1pmZFc1cGRIUmxjM1F1VkdWemRFMWhjQzVO
WVhCSmJuUXpNa1J2ZFdKc1pVVnVkSEo1IiwKLSAgICAgICAgICAgICJFa0lLRFcxaGNGOWliMjlz
WDJKdmIyd1lEU0FES0FzeUt5NXdjbTkwYjJKMVpsOTFibWwwZEdWemRDNVUiLAotICAgICAgICAg
ICAgIlpYTjBUV0Z3TGsxaGNFSnZiMnhDYjI5c1JXNTBjbmtTU2dvUmJXRndYM04wY21sdVoxOXpk
SEpwYm1jWSIsCi0gICAgICAgICAgICAiRGlBREtBc3lMeTV3Y205MGIySjFabDkxYm1sMGRHVnpk
QzVVWlhOMFRXRndMazFoY0ZOMGNtbHVaMU4wIiwKLSAgICAgICAgICAgICJjbWx1WjBWdWRISjVF
a1lLRDIxaGNGOXBiblF6TWw5aWVYUmxjeGdQSUFNb0N6SXRMbkJ5YjNSdlluVm0iLAotICAgICAg
ICAgICAgIlgzVnVhWFIwWlhOMExsUmxjM1JOWVhBdVRXRndTVzUwTXpKQ2VYUmxjMFZ1ZEhKNUVr
UUtEbTFoY0Y5cCIsCi0gICAgICAgICAgICAiYm5Rek1sOWxiblZ0R0JBZ0F5Z0xNaXd1Y0hKdmRH
OWlkV1pmZFc1cGRIUmxjM1F1VkdWemRFMWhjQzVOIiwKLSAgICAgICAgICAgICJZWEJKYm5Rek1r
VnVkVzFGYm5SeWVSSlpDaGx0WVhCZmFXNTBNekpmWm05eVpXbG5ibDl0WlhOellXZGwiLAotICAg
ICAgICAgICAgIkdCRWdBeWdMTWpZdWNISnZkRzlpZFdaZmRXNXBkSFJsYzNRdVZHVnpkRTFoY0M1
TllYQkpiblF6TWtadiIsCi0gICAgICAgICAgICAiY21WcFoyNU5aWE56WVdkbFJXNTBjbmthTkFv
U1RXRndTVzUwTXpKSmJuUXpNa1Z1ZEhKNUVnc0tBMnRsIiwKLSAgICAgICAgICAgICJlUmdCSUFF
b0JSSU5DZ1YyWVd4MVpSZ0NJQUVvQlRvQ09BRWFOQW9TVFdGd1NXNTBOalJKYm5RMk5FVnUiLAot
ICAgICAgICAgICAgImRISjVFZ3NLQTJ0bGVSZ0JJQUVvQXhJTkNnVjJZV3gxWlJnQ0lBRW9Bem9D
T0FFYU5nb1VUV0Z3VldsdSIsCi0gICAgICAgICAgICAiZERNeVZXbHVkRE15Ulc1MGNua1NDd29E
YTJWNUdBRWdBU2dORWcwS0JYWmhiSFZsR0FJZ0FTZ05PZ0k0IiwKLSAgICAgICAgICAgICJBUm8y
Q2hSTllYQlZhVzUwTmpSVmFXNTBOalJGYm5SeWVSSUxDZ05yWlhrWUFTQUJLQVFTRFFvRmRtRnMi
LAotICAgICAgICAgICAgImRXVVlBaUFCS0FRNkFqZ0JHallLRkUxaGNGTnBiblF6TWxOcGJuUXpN
a1Z1ZEhKNUVnc0tBMnRsZVJnQiIsCi0gICAgICAgICAgICAiSUFFb0VSSU5DZ1YyWVd4MVpSZ0NJ
QUVvRVRvQ09BRWFOZ29VVFdGd1UybHVkRFkwVTJsdWREWTBSVzUwIiwKLSAgICAgICAgICAgICJj
bmtTQ3dvRGEyVjVHQUVnQVNnU0VnMEtCWFpoYkhWbEdBSWdBU2dTT2dJNEFSbzRDaFpOWVhCR2FY
aGwiLAotICAgICAgICAgICAgIlpETXlSbWw0WldRek1rVnVkSEo1RWdzS0EydGxlUmdCSUFFb0J4
SU5DZ1YyWVd4MVpSZ0NJQUVvQnpvQyIsCi0gICAgICAgICAgICAiT0FFYU9Bb1dUV0Z3Um1sNFpX
UTJORVpwZUdWa05qUkZiblJ5ZVJJTENnTnJaWGtZQVNBQktBWVNEUW9GIiwKLSAgICAgICAgICAg
ICJkbUZzZFdVWUFpQUJLQVk2QWpnQkdqb0tHRTFoY0ZObWFYaGxaRE15VTJacGVHVmtNekpGYm5S
eWVSSUwiLAotICAgICAgICAgICAgIkNnTnJaWGtZQVNBQktBOFNEUW9GZG1Gc2RXVVlBaUFCS0E4
NkFqZ0JHam9LR0UxaGNGTm1hWGhsWkRZMCIsCi0gICAgICAgICAgICAiVTJacGVHVmtOalJGYm5S
eWVSSUxDZ05yWlhrWUFTQUJLQkFTRFFvRmRtRnNkV1VZQWlBQktCQTZBamdCIiwKLSAgICAgICAg
ICAgICJHalFLRWsxaGNFbHVkRE15Um14dllYUkZiblJ5ZVJJTENnTnJaWGtZQVNBQktBVVNEUW9G
ZG1Gc2RXVVkiLAotICAgICAgICAgICAgIkFpQUJLQUk2QWpnQkdqVUtFMDFoY0VsdWRETXlSRzkx
WW14bFJXNTBjbmtTQ3dvRGEyVjVHQUVnQVNnRiIsCi0gICAgICAgICAgICAiRWcwS0JYWmhiSFZs
R0FJZ0FTZ0JPZ0k0QVJveUNoQk5ZWEJDYjI5c1FtOXZiRVZ1ZEhKNUVnc0tBMnRsIiwKLSAgICAg
ICAgICAgICJlUmdCSUFFb0NCSU5DZ1YyWVd4MVpSZ0NJQUVvQ0RvQ09BRWFOZ29VVFdGd1UzUnlh
VzVuVTNSeWFXNW4iLAotICAgICAgICAgICAgIlJXNTBjbmtTQ3dvRGEyVjVHQUVnQVNnSkVnMEtC
WFpoYkhWbEdBSWdBU2dKT2dJNEFSbzBDaEpOWVhCSiIsCi0gICAgICAgICAgICAiYm5Rek1rSjVk
R1Z6Ulc1MGNua1NDd29EYTJWNUdBRWdBU2dGRWcwS0JYWmhiSFZsR0FJZ0FTZ01PZ0k0IiwKLSAg
ICAgICAgICAgICJBUnBQQ2hGTllYQkpiblF6TWtWdWRXMUZiblJ5ZVJJTENnTnJaWGtZQVNBQktB
VVNLUW9GZG1Gc2RXVVkiLAotICAgICAgICAgICAgIkFpQUJLQTR5R2k1d2NtOTBiMkoxWmw5MWJt
bDBkR1Z6ZEM1TllYQkZiblZ0T2dJNEFScGdDaHROWVhCSiIsCi0gICAgICAgICAgICAiYm5Rek1r
WnZjbVZwWjI1TlpYTnpZV2RsUlc1MGNua1NDd29EYTJWNUdBRWdBU2dGRWpBS0JYWmhiSFZsIiwK
LSAgICAgICAgICAgICJHQUlnQVNnTE1pRXVjSEp2ZEc5aWRXWmZkVzVwZEhSbGMzUXVSbTl5Wlds
bmJrMWxjM05oWjJVNkFqZ0IiLAotICAgICAgICAgICAgIklrRUtFVlJsYzNSTllYQlRkV0p0WlhO
ellXZGxFaXdLQ0hSbGMzUmZiV0Z3R0FFZ0FTZ0xNaG91Y0hKdiIsCi0gICAgICAgICAgICAiZEc5
aWRXWmZkVzVwZEhSbGMzUXVWR1Z6ZEUxaGNDSzhBUW9PVkdWemRFMWxjM05oWjJWTllYQVNVUW9S
IiwKLSAgICAgICAgICAgICJiV0Z3WDJsdWRETXlYMjFsYzNOaFoyVVlBU0FES0FzeU5pNXdjbTkw
YjJKMVpsOTFibWwwZEdWemRDNVUiLAotICAgICAgICAgICAgIlpYTjBUV1Z6YzJGblpVMWhjQzVO
WVhCSmJuUXpNazFsYzNOaFoyVkZiblJ5ZVJwWENoUk5ZWEJKYm5ReiIsCi0gICAgICAgICAgICAi
TWsxbGMzTmhaMlZGYm5SeWVSSUxDZ05yWlhrWUFTQUJLQVVTTGdvRmRtRnNkV1VZQWlBQktBc3lI
eTV3IiwKLSAgICAgICAgICAgICJjbTkwYjJKMVpsOTFibWwwZEdWemRDNVVaWE4wUVd4c1ZIbHda
WE02QWpnQkl1TUJDZzlVWlhOMFUyRnQiLAotICAgICAgICAgICAgIlpWUjVjR1ZOWVhBU09nb0Vi
V0Z3TVJnQklBTW9DeklzTG5CeWIzUnZZblZtWDNWdWFYUjBaWE4wTGxSbCIsCi0gICAgICAgICAg
ICAiYzNSVFlXMWxWSGx3WlUxaGNDNU5ZWEF4Ulc1MGNua1NPZ29FYldGd01oZ0NJQU1vQ3pJc0xu
QnliM1J2IiwKLSAgICAgICAgICAgICJZblZtWDNWdWFYUjBaWE4wTGxSbGMzUlRZVzFsVkhsd1pV
MWhjQzVOWVhBeVJXNTBjbmthS3dvSlRXRnciLAotICAgICAgICAgICAgIk1VVnVkSEo1RWdzS0Ey
dGxlUmdCSUFFb0JSSU5DZ1YyWVd4MVpSZ0NJQUVvQlRvQ09BRWFLd29KVFdGdyIsCi0gICAgICAg
ICAgICAiTWtWdWRISjVFZ3NLQTJ0bGVSZ0JJQUVvQlJJTkNnVjJZV3gxWlJnQ0lBRW9CVG9DT0FF
aTVCQUtERlJsIiwKLSAgICAgICAgICAgICJjM1JCY21WdVlVMWhjQkpMQ2c5dFlYQmZhVzUwTXpK
ZmFXNTBNeklZQVNBREtBc3lNaTV3Y205MGIySjEiLAotICAgICAgICAgICAgIlpsOTFibWwwZEdW
emRDNVVaWE4wUVhKbGJtRk5ZWEF1VFdGd1NXNTBNekpKYm5Rek1rVnVkSEo1RWtzSyIsCi0gICAg
ICAgICAgICAiRDIxaGNGOXBiblEyTkY5cGJuUTJOQmdDSUFNb0N6SXlMbkJ5YjNSdlluVm1YM1Z1
YVhSMFpYTjBMbFJsIiwKLSAgICAgICAgICAgICJjM1JCY21WdVlVMWhjQzVOWVhCSmJuUTJORWx1
ZERZMFJXNTBjbmtTVHdvUmJXRndYM1ZwYm5Rek1sOTEiLAotICAgICAgICAgICAgImFXNTBNeklZ
QXlBREtBc3lOQzV3Y205MGIySjFabDkxYm1sMGRHVnpkQzVVWlhOMFFYSmxibUZOWVhBdSIsCi0g
ICAgICAgICAgICAiVFdGd1ZXbHVkRE15VldsdWRETXlSVzUwY25rU1R3b1JiV0Z3WDNWcGJuUTJO
RjkxYVc1ME5qUVlCQ0FEIiwKLSAgICAgICAgICAgICJLQXN5TkM1d2NtOTBiMkoxWmw5MWJtbDBk
R1Z6ZEM1VVpYTjBRWEpsYm1GTllYQXVUV0Z3VldsdWREWTAiLAotICAgICAgICAgICAgIlZXbHVk
RFkwUlc1MGNua1NUd29SYldGd1gzTnBiblF6TWw5emFXNTBNeklZQlNBREtBc3lOQzV3Y205MCIs
Ci0gICAgICAgICAgICAiYjJKMVpsOTFibWwwZEdWemRDNVVaWE4wUVhKbGJtRk5ZWEF1VFdGd1Uy
bHVkRE15VTJsdWRETXlSVzUwIiwKLSAgICAgICAgICAgICJjbmtTVHdvUmJXRndYM05wYm5RMk5G
OXphVzUwTmpRWUJpQURLQXN5TkM1d2NtOTBiMkoxWmw5MWJtbDAiLAotICAgICAgICAgICAgImRH
VnpkQzVVWlhOMFFYSmxibUZOWVhBdVRXRndVMmx1ZERZMFUybHVkRFkwUlc1MGNua1NVd29UYldG
dyIsCi0gICAgICAgICAgICAiWDJacGVHVmtNekpmWm1sNFpXUXpNaGdISUFNb0N6STJMbkJ5YjNS
dlluVm1YM1Z1YVhSMFpYTjBMbFJsIiwKLSAgICAgICAgICAgICJjM1JCY21WdVlVMWhjQzVOWVhC
R2FYaGxaRE15Um1sNFpXUXpNa1Z1ZEhKNUVsTUtFMjFoY0Y5bWFYaGwiLAotICAgICAgICAgICAg
IlpEWTBYMlpwZUdWa05qUVlDQ0FES0FzeU5pNXdjbTkwYjJKMVpsOTFibWwwZEdWemRDNVVaWE4w
UVhKbCIsCi0gICAgICAgICAgICAiYm1GTllYQXVUV0Z3Um1sNFpXUTJORVpwZUdWa05qUkZiblJ5
ZVJKWENoVnRZWEJmYzJacGVHVmtNekpmIiwKLSAgICAgICAgICAgICJjMlpwZUdWa016SVlDU0FE
S0FzeU9DNXdjbTkwYjJKMVpsOTFibWwwZEdWemRDNVVaWE4wUVhKbGJtRk4iLAotICAgICAgICAg
ICAgIllYQXVUV0Z3VTJacGVHVmtNekpUWm1sNFpXUXpNa1Z1ZEhKNUVsY0tGVzFoY0Y5elptbDRa
V1EyTkY5eiIsCi0gICAgICAgICAgICAiWm1sNFpXUTJOQmdLSUFNb0N6STRMbkJ5YjNSdlluVm1Y
M1Z1YVhSMFpYTjBMbFJsYzNSQmNtVnVZVTFoIiwKLSAgICAgICAgICAgICJjQzVOWVhCVFptbDRa
V1EyTkZObWFYaGxaRFkwUlc1MGNua1NTd29QYldGd1gybHVkRE15WDJac2IyRjAiLAotICAgICAg
ICAgICAgIkdBc2dBeWdMTWpJdWNISnZkRzlpZFdaZmRXNXBkSFJsYzNRdVZHVnpkRUZ5Wlc1aFRX
RndMazFoY0VsdSIsCi0gICAgICAgICAgICAiZERNeVJteHZZWFJGYm5SeWVSSk5DaEJ0WVhCZmFX
NTBNekpmWkc5MVlteGxHQXdnQXlnTE1qTXVjSEp2IiwKLSAgICAgICAgICAgICJkRzlpZFdaZmRX
NXBkSFJsYzNRdVZHVnpkRUZ5Wlc1aFRXRndMazFoY0VsdWRETXlSRzkxWW14bFJXNTAiLAotICAg
ICAgICAgICAgImNua1NSd29OYldGd1gySnZiMnhmWW05dmJCZ05JQU1vQ3pJd0xuQnliM1J2WW5W
bVgzVnVhWFIwWlhOMCIsCi0gICAgICAgICAgICAiTGxSbGMzUkJjbVZ1WVUxaGNDNU5ZWEJDYjI5
c1FtOXZiRVZ1ZEhKNUVra0tEbTFoY0Y5cGJuUXpNbDlsIiwKLSAgICAgICAgICAgICJiblZ0R0E0
Z0F5Z0xNakV1Y0hKdmRHOWlkV1pmZFc1cGRIUmxjM1F1VkdWemRFRnlaVzVoVFdGd0xrMWgiLAot
ICAgICAgICAgICAgImNFbHVkRE15Ulc1MWJVVnVkSEo1RWw0S0dXMWhjRjlwYm5Rek1sOW1iM0ps
YVdkdVgyMWxjM05oWjJVWSIsCi0gICAgICAgICAgICAiRHlBREtBc3lPeTV3Y205MGIySjFabDkx
Ym1sMGRHVnpkQzVVWlhOMFFYSmxibUZOWVhBdVRXRndTVzUwIiwKLSAgICAgICAgICAgICJNekpH
YjNKbGFXZHVUV1Z6YzJGblpVVnVkSEo1R2pRS0VrMWhjRWx1ZERNeVNXNTBNekpGYm5SeWVSSUwi
LAotICAgICAgICAgICAgIkNnTnJaWGtZQVNBQktBVVNEUW9GZG1Gc2RXVVlBaUFCS0FVNkFqZ0JH
alFLRWsxaGNFbHVkRFkwU1c1MCIsCi0gICAgICAgICAgICAiTmpSRmJuUnllUklMQ2dOclpYa1lB
U0FCS0FNU0RRb0ZkbUZzZFdVWUFpQUJLQU02QWpnQkdqWUtGRTFoIiwKLSAgICAgICAgICAgICJj
RlZwYm5Rek1sVnBiblF6TWtWdWRISjVFZ3NLQTJ0bGVSZ0JJQUVvRFJJTkNnVjJZV3gxWlJnQ0lB
RW8iLAotICAgICAgICAgICAgIkRUb0NPQUVhTmdvVVRXRndWV2x1ZERZMFZXbHVkRFkwUlc1MGNu
a1NDd29EYTJWNUdBRWdBU2dFRWcwSyIsCi0gICAgICAgICAgICAiQlhaaGJIVmxHQUlnQVNnRU9n
STRBUm8yQ2hSTllYQlRhVzUwTXpKVGFXNTBNekpGYm5SeWVSSUxDZ05yIiwKLSAgICAgICAgICAg
ICJaWGtZQVNBQktCRVNEUW9GZG1Gc2RXVVlBaUFCS0JFNkFqZ0JHallLRkUxaGNGTnBiblEyTkZO
cGJuUTIiLAotICAgICAgICAgICAgIk5FVnVkSEo1RWdzS0EydGxlUmdCSUFFb0VoSU5DZ1YyWVd4
MVpSZ0NJQUVvRWpvQ09BRWFPQW9XVFdGdyIsCi0gICAgICAgICAgICAiUm1sNFpXUXpNa1pwZUdW
a016SkZiblJ5ZVJJTENnTnJaWGtZQVNBQktBY1NEUW9GZG1Gc2RXVVlBaUFCIiwKLSAgICAgICAg
ICAgICJLQWM2QWpnQkdqZ0tGazFoY0VacGVHVmtOalJHYVhobFpEWTBSVzUwY25rU0N3b0RhMlY1
R0FFZ0FTZ0ciLAotICAgICAgICAgICAgIkVnMEtCWFpoYkhWbEdBSWdBU2dHT2dJNEFSbzZDaGhO
WVhCVFptbDRaV1F6TWxObWFYaGxaRE15Ulc1MCIsCi0gICAgICAgICAgICAiY25rU0N3b0RhMlY1
R0FFZ0FTZ1BFZzBLQlhaaGJIVmxHQUlnQVNnUE9nSTRBUm82Q2hoTllYQlRabWw0IiwKLSAgICAg
ICAgICAgICJaV1EyTkZObWFYaGxaRFkwUlc1MGNua1NDd29EYTJWNUdBRWdBU2dRRWcwS0JYWmhi
SFZsR0FJZ0FTZ1EiLAotICAgICAgICAgICAgIk9nSTRBUm8wQ2hKTllYQkpiblF6TWtac2IyRjBS
VzUwY25rU0N3b0RhMlY1R0FFZ0FTZ0ZFZzBLQlhaaCIsCi0gICAgICAgICAgICAiYkhWbEdBSWdB
U2dDT2dJNEFSbzFDaE5OWVhCSmJuUXpNa1J2ZFdKc1pVVnVkSEo1RWdzS0EydGxlUmdCIiwKLSAg
ICAgICAgICAgICJJQUVvQlJJTkNnVjJZV3gxWlJnQ0lBRW9BVG9DT0FFYU1nb1FUV0Z3UW05dmJF
SnZiMnhGYm5SeWVSSUwiLAotICAgICAgICAgICAgIkNnTnJaWGtZQVNBQktBZ1NEUW9GZG1Gc2RX
VVlBaUFCS0FnNkFqZ0JHazhLRVUxaGNFbHVkRE15Ulc1MSIsCi0gICAgICAgICAgICAiYlVWdWRI
SjVFZ3NLQTJ0bGVSZ0JJQUVvQlJJcENnVjJZV3gxWlJnQ0lBRW9EaklhTG5CeWIzUnZZblZtIiwK
LSAgICAgICAgICAgICJYM1Z1YVhSMFpYTjBMazFoY0VWdWRXMDZBamdCR21BS0cwMWhjRWx1ZERN
eVJtOXlaV2xuYmsxbGMzTmgiLAotICAgICAgICAgICAgIloyVkZiblJ5ZVJJTENnTnJaWGtZQVNB
QktBVVNNQW9GZG1Gc2RXVVlBaUFCS0FzeUlTNXdjbTkwYjJKMSIsCi0gICAgICAgICAgICAiWmw5
MWJtbDBkR1Z6ZEM1R2IzSmxhV2R1VFdWemMyRm5aVG9DT0FFaTVBRUtIMDFsYzNOaFoyVkRiMjUw
IiwKLSAgICAgICAgICAgICJZV2x1YVc1blJXNTFiVU5oYkd4bFpGUjVjR1VTU2dvRWRIbHdaUmdC
SUFNb0N6SThMbkJ5YjNSdlluVm0iLAotICAgICAgICAgICAgIlgzVnVhWFIwWlhOMExrMWxjM05o
WjJWRGIyNTBZV2x1YVc1blJXNTFiVU5oYkd4bFpGUjVjR1V1VkhsdyIsCi0gICAgICAgICAgICAi
WlVWdWRISjVHbDhLQ1ZSNWNHVkZiblJ5ZVJJTENnTnJaWGtZQVNBQktBVVNRUW9GZG1Gc2RXVVlB
aUFCIiwKLSAgICAgICAgICAgICJLQXN5TWk1d2NtOTBiMkoxWmw5MWJtbDBkR1Z6ZEM1TlpYTnpZ
V2RsUTI5dWRHRnBibWx1WjBWdWRXMUQiLAotICAgICAgICAgICAgIllXeHNaV1JVZVhCbE9nSTRB
U0lVQ2dSVWVYQmxFZ3dLQ0ZSWlVFVmZSazlQRUFBaW5RRUtIMDFsYzNOaCIsCi0gICAgICAgICAg
ICAiWjJWRGIyNTBZV2x1YVc1blRXRndRMkZzYkdWa1JXNTBjbmtTVEFvRlpXNTBjbmtZQVNBREtB
c3lQUzV3IiwKLSAgICAgICAgICAgICJjbTkwYjJKMVpsOTFibWwwZEdWemRDNU5aWE56WVdkbFEy
OXVkR0ZwYm1sdVowMWhjRU5oYkd4bFpFVnUiLAotICAgICAgICAgICAgImRISjVMa1Z1ZEhKNVJX
NTBjbmthTEFvS1JXNTBjbmxGYm5SeWVSSUxDZ05yWlhrWUFTQUJLQVVTRFFvRiIsCi0gICAgICAg
ICAgICAiZG1Gc2RXVVlBaUFCS0FVNkFqZ0JLajhLQjAxaGNFVnVkVzBTRUFvTVRVRlFYMFZPVlUx
ZlJrOVBFQUFTIiwKLSAgICAgICAgICAgICJFQW9NVFVGUVgwVk9WVTFmUWtGU0VBRVNFQW9NVFVG
UVgwVk9WVTFmUWtGYUVBSkNJUGdCQWFvQ0drZHYiLAotICAgICAgICAgICAgImIyZHNaUzVRY205
MGIySjFaaTVVWlhOMFVISnZkRzl6WWdad2NtOTBiek09IikpOwotICAgICAgZGVzY3JpcHRvciA9
IHBicjo6RmlsZURlc2NyaXB0b3IuRnJvbUdlbmVyYXRlZENvZGUoZGVzY3JpcHRvckRhdGEsCi0g
ICAgICAgICAgbmV3IHBicjo6RmlsZURlc2NyaXB0b3JbXSB7IGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlRlc3RQcm90b3MuVW5pdHRlc3RQcm90bzNSZWZsZWN0aW9uLkRlc2NyaXB0b3IsIH0sCi0g
ICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8obmV3W10ge3R5cGVvZihnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk1hcEVudW0pLCB9LCBuZXcgcGJyOjpHZW5l
cmF0ZWRDbHJUeXBlSW5mb1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5
cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RNYXAp
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RNYXAuUGFyc2VyLCBuZXdb
XXsgIk1hcEludDMySW50MzIiLCAiTWFwSW50NjRJbnQ2NCIsICJNYXBVaW50MzJVaW50MzIiLCAi
TWFwVWludDY0VWludDY0IiwgIk1hcFNpbnQzMlNpbnQzMiIsICJNYXBTaW50NjRTaW50NjQiLCAi
TWFwRml4ZWQzMkZpeGVkMzIiLCAiTWFwRml4ZWQ2NEZpeGVkNjQiLCAiTWFwU2ZpeGVkMzJTZml4
ZWQzMiIsICJNYXBTZml4ZWQ2NFNmaXhlZDY0IiwgIk1hcEludDMyRmxvYXQiLCAiTWFwSW50MzJE
b3VibGUiLCAiTWFwQm9vbEJvb2wiLCAiTWFwU3RyaW5nU3RyaW5nIiwgIk1hcEludDMyQnl0ZXMi
LCAiTWFwSW50MzJFbnVtIiwgIk1hcEludDMyRm9yZWlnbk1lc3NhZ2UiIH0sIG51bGwsIG51bGws
IG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvW10geyBudWxsLCBudWxsLCBudWxsLCBudWxs
LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBu
dWxsLCBudWxsLCBudWxsLCBudWxsLCB9KSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRl
ZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRl
c3RNYXBTdWJtZXNzYWdlKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0
TWFwU3VibWVzc2FnZS5QYXJzZXIsIG5ld1tdeyAiVGVzdE1hcCIgfSwgbnVsbCwgbnVsbCwgbnVs
bCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0TWVzc2FnZU1hcCksIGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdE1lc3NhZ2VNYXAuUGFyc2VyLCBuZXdbXXsg
Ik1hcEludDMyTWVzc2FnZSIgfSwgbnVsbCwgbnVsbCwgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlw
ZUluZm9bXSB7IG51bGwsIH0pLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlw
ZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdFNhbWVU
eXBlTWFwKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0U2FtZVR5cGVN
YXAuUGFyc2VyLCBuZXdbXXsgIk1hcDEiLCAiTWFwMiIgfSwgbnVsbCwgbnVsbCwgbmV3IHBicjo6
R2VuZXJhdGVkQ2xyVHlwZUluZm9bXSB7IG51bGwsIG51bGwsIH0pLAotICAgICAgICAgICAgbmV3
IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LlRlc3RQcm90b3MuVGVzdEFyZW5hTWFwKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3Rvcy5UZXN0QXJlbmFNYXAuUGFyc2VyLCBuZXdbXXsgIk1hcEludDMySW50MzIiLCAiTWFwSW50
NjRJbnQ2NCIsICJNYXBVaW50MzJVaW50MzIiLCAiTWFwVWludDY0VWludDY0IiwgIk1hcFNpbnQz
MlNpbnQzMiIsICJNYXBTaW50NjRTaW50NjQiLCAiTWFwRml4ZWQzMkZpeGVkMzIiLCAiTWFwRml4
ZWQ2NEZpeGVkNjQiLCAiTWFwU2ZpeGVkMzJTZml4ZWQzMiIsICJNYXBTZml4ZWQ2NFNmaXhlZDY0
IiwgIk1hcEludDMyRmxvYXQiLCAiTWFwSW50MzJEb3VibGUiLCAiTWFwQm9vbEJvb2wiLCAiTWFw
SW50MzJFbnVtIiwgIk1hcEludDMyRm9yZWlnbk1lc3NhZ2UiIH0sIG51bGwsIG51bGwsIG5ldyBw
YnI6OkdlbmVyYXRlZENsclR5cGVJbmZvW10geyBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxs
LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBu
dWxsLCB9KSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVv
ZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk1lc3NhZ2VDb250YWluaW5nRW51
bUNhbGxlZFR5cGUpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk1lc3NhZ2VD
b250YWluaW5nRW51bUNhbGxlZFR5cGUuUGFyc2VyLCBuZXdbXXsgIlR5cGUiIH0sIG51bGwsIG5l
d1tdeyB0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5NZXNzYWdlQ29u
dGFpbmluZ0VudW1DYWxsZWRUeXBlLlR5cGVzLlR5cGUpIH0sIG5ldyBwYnI6OkdlbmVyYXRlZENs
clR5cGVJbmZvW10geyBudWxsLCB9KSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENs
clR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk1lc3Nh
Z2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0
UHJvdG9zLk1lc3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkuUGFyc2VyLCBuZXdbXXsgIkVu
dHJ5IiB9LCBudWxsLCBudWxsLCBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIHsgbnVs
bCwgfSkKLSAgICAgICAgICB9KSk7Ci0gICAgfQotICAgICNlbmRyZWdpb24KLQotICB9Ci0gICNy
ZWdpb24gRW51bXMKLSAgcHVibGljIGVudW0gTWFwRW51bSB7Ci0gICAgW3Bicjo6T3JpZ2luYWxO
YW1lKCJNQVBfRU5VTV9GT08iKV0gRm9vID0gMCwKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIk1B
UF9FTlVNX0JBUiIpXSBCYXIgPSAxLAotICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiTUFQX0VOVU1f
QkFaIildIEJheiA9IDIsCi0gIH0KLQotICAjZW5kcmVnaW9uCi0KLSAgI3JlZ2lvbiBNZXNzYWdl
cwotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgVGVzdHMgbWFwcy4KLSAgLy8vIDwvc3VtbWFyeT4K
LSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1
dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFRlc3RNYXAgOiBwYjo6SU1lc3Nh
Z2U8VGVzdE1hcD4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFy
c2VyPFRlc3RNYXA+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdE1hcD4oKCkg
PT4gbmV3IFRlc3RNYXAoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxU
ZXN0TWFwPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMg
c3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5NYXBVbml0dGVzdFByb3Rv
M1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMF07IH0KLSAgICB9Ci0KLSAgICBw
YnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdl
dCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RNYXAoKSB7
Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNv
bnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIFRlc3RNYXAoVGVzdE1hcCBvdGhlcikgOiB0aGlz
KCkgewotICAgICAgbWFwSW50MzJJbnQzMl8gPSBvdGhlci5tYXBJbnQzMkludDMyXy5DbG9uZSgp
OwotICAgICAgbWFwSW50NjRJbnQ2NF8gPSBvdGhlci5tYXBJbnQ2NEludDY0Xy5DbG9uZSgpOwot
ICAgICAgbWFwVWludDMyVWludDMyXyA9IG90aGVyLm1hcFVpbnQzMlVpbnQzMl8uQ2xvbmUoKTsK
LSAgICAgIG1hcFVpbnQ2NFVpbnQ2NF8gPSBvdGhlci5tYXBVaW50NjRVaW50NjRfLkNsb25lKCk7
Ci0gICAgICBtYXBTaW50MzJTaW50MzJfID0gb3RoZXIubWFwU2ludDMyU2ludDMyXy5DbG9uZSgp
OwotICAgICAgbWFwU2ludDY0U2ludDY0XyA9IG90aGVyLm1hcFNpbnQ2NFNpbnQ2NF8uQ2xvbmUo
KTsKLSAgICAgIG1hcEZpeGVkMzJGaXhlZDMyXyA9IG90aGVyLm1hcEZpeGVkMzJGaXhlZDMyXy5D
bG9uZSgpOwotICAgICAgbWFwRml4ZWQ2NEZpeGVkNjRfID0gb3RoZXIubWFwRml4ZWQ2NEZpeGVk
NjRfLkNsb25lKCk7Ci0gICAgICBtYXBTZml4ZWQzMlNmaXhlZDMyXyA9IG90aGVyLm1hcFNmaXhl
ZDMyU2ZpeGVkMzJfLkNsb25lKCk7Ci0gICAgICBtYXBTZml4ZWQ2NFNmaXhlZDY0XyA9IG90aGVy
Lm1hcFNmaXhlZDY0U2ZpeGVkNjRfLkNsb25lKCk7Ci0gICAgICBtYXBJbnQzMkZsb2F0XyA9IG90
aGVyLm1hcEludDMyRmxvYXRfLkNsb25lKCk7Ci0gICAgICBtYXBJbnQzMkRvdWJsZV8gPSBvdGhl
ci5tYXBJbnQzMkRvdWJsZV8uQ2xvbmUoKTsKLSAgICAgIG1hcEJvb2xCb29sXyA9IG90aGVyLm1h
cEJvb2xCb29sXy5DbG9uZSgpOwotICAgICAgbWFwU3RyaW5nU3RyaW5nXyA9IG90aGVyLm1hcFN0
cmluZ1N0cmluZ18uQ2xvbmUoKTsKLSAgICAgIG1hcEludDMyQnl0ZXNfID0gb3RoZXIubWFwSW50
MzJCeXRlc18uQ2xvbmUoKTsKLSAgICAgIG1hcEludDMyRW51bV8gPSBvdGhlci5tYXBJbnQzMkVu
dW1fLkNsb25lKCk7Ci0gICAgICBtYXBJbnQzMkZvcmVpZ25NZXNzYWdlXyA9IG90aGVyLm1hcElu
dDMyRm9yZWlnbk1lc3NhZ2VfLkNsb25lKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RNYXAg
Q2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IFRlc3RNYXAodGhpcyk7Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJtYXBfaW50MzJfaW50MzIiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcEludDMySW50MzJGaWVsZE51bWJl
ciA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGlu
dD4uQ29kZWMgX21hcF9tYXBJbnQzMkludDMyX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFw
RmllbGQ8aW50LCBpbnQ+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvckludDMyKDgpLCBwYjo6Rmll
bGRDb2RlYy5Gb3JJbnQzMigxNiksIDEwKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFw
RmllbGQ8aW50LCBpbnQ+IG1hcEludDMySW50MzJfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBp
bnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+IE1hcEludDMySW50MzIg
ewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcEludDMySW50MzJfOyB9Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJtYXBfaW50NjRfaW50NjQiIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcEludDY0SW50NjRGaWVsZE51bWJlciA9
IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25n
Pi5Db2RlYyBfbWFwX21hcEludDY0SW50NjRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBG
aWVsZDxsb25nLCBsb25nPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQ2NCg4KSwgcGI6OkZp
ZWxkQ29kZWMuRm9ySW50NjQoMTYpLCAxOCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1h
cEZpZWxkPGxvbmcsIGxvbmc+IG1hcEludDY0SW50NjRfID0gbmV3IHBiYzo6TWFwRmllbGQ8bG9u
ZywgbG9uZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPiBNYXBJbnQ2
NEludDY0IHsKLSAgICAgIGdldCB7IHJldHVybiBtYXBJbnQ2NEludDY0XzsgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX3VpbnQzMl91aW50MzIi
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcFVpbnQzMlVpbnQzMkZp
ZWxkTnVtYmVyID0gMzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxk
PHVpbnQsIHVpbnQ+LkNvZGVjIF9tYXBfbWFwVWludDMyVWludDMyX2NvZGVjCi0gICAgICAgID0g
bmV3IHBiYzo6TWFwRmllbGQ8dWludCwgdWludD4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9yVUlu
dDMyKDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JVSW50MzIoMTYpLCAyNik7Ci0gICAgcHJpdmF0ZSBy
ZWFkb25seSBwYmM6Ok1hcEZpZWxkPHVpbnQsIHVpbnQ+IG1hcFVpbnQzMlVpbnQzMl8gPSBuZXcg
cGJjOjpNYXBGaWVsZDx1aW50LCB1aW50PigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxkPHVp
bnQsIHVpbnQ+IE1hcFVpbnQzMlVpbnQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWFwVWludDMy
VWludDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRo
ZSAibWFwX3VpbnQ2NF91aW50NjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3Qg
aW50IE1hcFVpbnQ2NFVpbnQ2NEZpZWxkTnVtYmVyID0gNDsKLSAgICBwcml2YXRlIHN0YXRpYyBy
ZWFkb25seSBwYmM6Ok1hcEZpZWxkPHVsb25nLCB1bG9uZz4uQ29kZWMgX21hcF9tYXBVaW50NjRV
aW50NjRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+LkNv
ZGVjKHBiOjpGaWVsZENvZGVjLkZvclVJbnQ2NCg4KSwgcGI6OkZpZWxkQ29kZWMuRm9yVUludDY0
KDE2KSwgMzQpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDx1bG9uZywgdWxv
bmc+IG1hcFVpbnQ2NFVpbnQ2NF8gPSBuZXcgcGJjOjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+KCk7
Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8dWxvbmcsIHVsb25nPiBNYXBVaW50NjRVaW50NjQg
ewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcFVpbnQ2NFVpbnQ2NF87IH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm1hcF9zaW50MzJfc2ludDMyIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBNYXBTaW50MzJTaW50MzJGaWVsZE51
bWJlciA9IDU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQs
IGludD4uQ29kZWMgX21hcF9tYXBTaW50MzJTaW50MzJfY29kZWMKLSAgICAgICAgPSBuZXcgcGJj
OjpNYXBGaWVsZDxpbnQsIGludD4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9yU0ludDMyKDgpLCBw
Yjo6RmllbGRDb2RlYy5Gb3JTSW50MzIoMTYpLCA0Mik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBw
YmM6Ok1hcEZpZWxkPGludCwgaW50PiBtYXBTaW50MzJTaW50MzJfID0gbmV3IHBiYzo6TWFwRmll
bGQ8aW50LCBpbnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+IE1hcFNp
bnQzMlNpbnQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWFwU2ludDMyU2ludDMyXzsgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX3NpbnQ2NF9z
aW50NjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcFNpbnQ2NFNp
bnQ2NEZpZWxkTnVtYmVyID0gNjsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1h
cEZpZWxkPGxvbmcsIGxvbmc+LkNvZGVjIF9tYXBfbWFwU2ludDY0U2ludDY0X2NvZGVjCi0gICAg
ICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8bG9uZywgbG9uZz4uQ29kZWMocGI6OkZpZWxkQ29kZWMu
Rm9yU0ludDY0KDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JTSW50NjQoMTYpLCA1MCk7Ci0gICAgcHJp
dmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGxvbmcsIGxvbmc+IG1hcFNpbnQ2NFNpbnQ2NF8g
PSBuZXcgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZp
ZWxkPGxvbmcsIGxvbmc+IE1hcFNpbnQ2NFNpbnQ2NCB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWFw
U2ludDY0U2ludDY0XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAibWFwX2ZpeGVkMzJfZml4ZWQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgTWFwRml4ZWQzMkZpeGVkMzJGaWVsZE51bWJlciA9IDc7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDx1aW50LCB1aW50Pi5Db2RlYyBfbWFwX21h
cEZpeGVkMzJGaXhlZDMyX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8dWludCwg
dWludD4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9yRml4ZWQzMigxMyksIHBiOjpGaWVsZENvZGVj
LkZvckZpeGVkMzIoMjEpLCA1OCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxk
PHVpbnQsIHVpbnQ+IG1hcEZpeGVkMzJGaXhlZDMyXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPHVpbnQs
IHVpbnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8dWludCwgdWludD4gTWFwRml4ZWQz
MkZpeGVkMzIgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcEZpeGVkMzJGaXhlZDMyXzsgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX2ZpeGVkNjRf
Zml4ZWQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTWFwRml4ZWQ2
NEZpeGVkNjRGaWVsZE51bWJlciA9IDg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJj
OjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+LkNvZGVjIF9tYXBfbWFwRml4ZWQ2NEZpeGVkNjRfY29k
ZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+LkNvZGVjKHBiOjpG
aWVsZENvZGVjLkZvckZpeGVkNjQoOSksIHBiOjpGaWVsZENvZGVjLkZvckZpeGVkNjQoMTcpLCA2
Nik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPHVsb25nLCB1bG9uZz4gbWFw
Rml4ZWQ2NEZpeGVkNjRfID0gbmV3IHBiYzo6TWFwRmllbGQ8dWxvbmcsIHVsb25nPigpOwotICAg
IHB1YmxpYyBwYmM6Ok1hcEZpZWxkPHVsb25nLCB1bG9uZz4gTWFwRml4ZWQ2NEZpeGVkNjQgewot
ICAgICAgZ2V0IHsgcmV0dXJuIG1hcEZpeGVkNjRGaXhlZDY0XzsgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX3NmaXhlZDMyX3NmaXhlZDMyIiBm
aWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBNYXBTZml4ZWQzMlNmaXhlZDMy
RmllbGROdW1iZXIgPSA5OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmll
bGQ8aW50LCBpbnQ+LkNvZGVjIF9tYXBfbWFwU2ZpeGVkMzJTZml4ZWQzMl9jb2RlYwotICAgICAg
ICA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgaW50Pi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JT
Rml4ZWQzMigxMyksIHBiOjpGaWVsZENvZGVjLkZvclNGaXhlZDMyKDIxKSwgNzQpOwotICAgIHBy
aXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4gbWFwU2ZpeGVkMzJTZml4ZWQz
Ml8gPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBG
aWVsZDxpbnQsIGludD4gTWFwU2ZpeGVkMzJTZml4ZWQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4g
bWFwU2ZpeGVkMzJTZml4ZWQzMl87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgIm1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgTWFwU2ZpeGVkNjRTZml4ZWQ2NEZpZWxkTnVtYmVyID0gMTA7
Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPi5D
b2RlYyBfbWFwX21hcFNmaXhlZDY0U2ZpeGVkNjRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpN
YXBGaWVsZDxsb25nLCBsb25nPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JTRml4ZWQ2NCg5KSwg
cGI6OkZpZWxkQ29kZWMuRm9yU0ZpeGVkNjQoMTcpLCA4Mik7Ci0gICAgcHJpdmF0ZSByZWFkb25s
eSBwYmM6Ok1hcEZpZWxkPGxvbmcsIGxvbmc+IG1hcFNmaXhlZDY0U2ZpeGVkNjRfID0gbmV3IHBi
Yzo6TWFwRmllbGQ8bG9uZywgbG9uZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxsb25n
LCBsb25nPiBNYXBTZml4ZWQ2NFNmaXhlZDY0IHsKLSAgICAgIGdldCB7IHJldHVybiBtYXBTZml4
ZWQ2NFNmaXhlZDY0XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAibWFwX2ludDMyX2Zsb2F0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBNYXBJbnQzMkZsb2F0RmllbGROdW1iZXIgPSAxMTsKLSAgICBwcml2YXRlIHN0YXRp
YyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgZmxvYXQ+LkNvZGVjIF9tYXBfbWFwSW50MzJG
bG9hdF9jb2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZmxvYXQ+LkNvZGVj
KHBiOjpGaWVsZENvZGVjLkZvckludDMyKDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JGbG9hdCgyMSks
IDkwKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBmbG9hdD4gbWFw
SW50MzJGbG9hdF8gPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGZsb2F0PigpOwotICAgIHB1Ymxp
YyBwYmM6Ok1hcEZpZWxkPGludCwgZmxvYXQ+IE1hcEludDMyRmxvYXQgewotICAgICAgZ2V0IHsg
cmV0dXJuIG1hcEludDMyRmxvYXRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJtYXBfaW50MzJfZG91YmxlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBNYXBJbnQzMkRvdWJsZUZpZWxkTnVtYmVyID0gMTI7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGRvdWJsZT4uQ29kZWMgX21h
cF9tYXBJbnQzMkRvdWJsZV9jb2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwg
ZG91YmxlPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMu
Rm9yRG91YmxlKDE3KSwgOTgpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxp
bnQsIGRvdWJsZT4gbWFwSW50MzJEb3VibGVfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBkb3Vi
bGU+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCBkb3VibGU+IE1hcEludDMyRG91
YmxlIHsKLSAgICAgIGdldCB7IHJldHVybiBtYXBJbnQzMkRvdWJsZV87IH0KLSAgICB9Ci0KLSAg
ICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm1hcF9ib29sX2Jvb2wiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcEJvb2xCb29sRmllbGROdW1iZXIg
PSAxMzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGJvb2wsIGJv
b2w+LkNvZGVjIF9tYXBfbWFwQm9vbEJvb2xfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBG
aWVsZDxib29sLCBib29sPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JCb29sKDgpLCBwYjo6Rmll
bGRDb2RlYy5Gb3JCb29sKDE2KSwgMTA2KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFw
RmllbGQ8Ym9vbCwgYm9vbD4gbWFwQm9vbEJvb2xfID0gbmV3IHBiYzo6TWFwRmllbGQ8Ym9vbCwg
Ym9vbD4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxib29sLCBib29sPiBNYXBCb29sQm9v
bCB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWFwQm9vbEJvb2xfOyB9Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJtYXBfc3RyaW5nX3N0cmluZyIgZmllbGQu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTWFwU3RyaW5nU3RyaW5nRmllbGROdW1i
ZXIgPSAxNDsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPHN0cmlu
Zywgc3RyaW5nPi5Db2RlYyBfbWFwX21hcFN0cmluZ1N0cmluZ19jb2RlYwotICAgICAgICA9IG5l
dyBwYmM6Ok1hcEZpZWxkPHN0cmluZywgc3RyaW5nPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JT
dHJpbmcoMTApLCBwYjo6RmllbGRDb2RlYy5Gb3JTdHJpbmcoMTgpLCAxMTQpOwotICAgIHByaXZh
dGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxzdHJpbmcsIHN0cmluZz4gbWFwU3RyaW5nU3RyaW5n
XyA9IG5ldyBwYmM6Ok1hcEZpZWxkPHN0cmluZywgc3RyaW5nPigpOwotICAgIHB1YmxpYyBwYmM6
Ok1hcEZpZWxkPHN0cmluZywgc3RyaW5nPiBNYXBTdHJpbmdTdHJpbmcgewotICAgICAgZ2V0IHsg
cmV0dXJuIG1hcFN0cmluZ1N0cmluZ187IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgIm1hcF9pbnQzMl9ieXRlcyIgZmllbGQuPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBjb25zdCBpbnQgTWFwSW50MzJCeXRlc0ZpZWxkTnVtYmVyID0gMTU7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIHBiOjpCeXRlU3RyaW5nPi5D
b2RlYyBfbWFwX21hcEludDMyQnl0ZXNfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVs
ZDxpbnQsIHBiOjpCeXRlU3RyaW5nPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwg
cGI6OkZpZWxkQ29kZWMuRm9yQnl0ZXMoMTgpLCAxMjIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkg
cGJjOjpNYXBGaWVsZDxpbnQsIHBiOjpCeXRlU3RyaW5nPiBtYXBJbnQzMkJ5dGVzXyA9IG5ldyBw
YmM6Ok1hcEZpZWxkPGludCwgcGI6OkJ5dGVTdHJpbmc+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFw
RmllbGQ8aW50LCBwYjo6Qnl0ZVN0cmluZz4gTWFwSW50MzJCeXRlcyB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gbWFwSW50MzJCeXRlc187IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgIm1hcF9pbnQzMl9lbnVtIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVi
bGljIGNvbnN0IGludCBNYXBJbnQzMkVudW1GaWVsZE51bWJlciA9IDE2OwotICAgIHByaXZhdGUg
c3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5UZXN0UHJvdG9zLk1hcEVudW0+LkNvZGVjIF9tYXBfbWFwSW50MzJFbnVtX2NvZGVjCi0gICAg
ICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0
UHJvdG9zLk1hcEVudW0+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvckludDMyKDgpLCBwYjo6Rmll
bGRDb2RlYy5Gb3JFbnVtKDE2LCB4ID0+IChpbnQpIHgsIHggPT4gKGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlRlc3RQcm90b3MuTWFwRW51bSkgeCksIDEzMCk7Ci0gICAgcHJpdmF0ZSByZWFkb25s
eSBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5N
YXBFbnVtPiBtYXBJbnQzMkVudW1fID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk1hcEVudW0+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFw
RmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk1hcEVudW0+IE1h
cEludDMyRW51bSB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWFwSW50MzJFbnVtXzsgfQotICAgIH0K
LQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX2ludDMyX2ZvcmVp
Z25fbWVzc2FnZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTWFwSW50
MzJGb3JlaWduTWVzc2FnZUZpZWxkTnVtYmVyID0gMTc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVh
ZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuRm9yZWlnbk1lc3NhZ2U+LkNvZGVjIF9tYXBfbWFwSW50MzJGb3JlaWduTWVzc2FnZV9jb2Rl
YwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuVGVzdFByb3Rvcy5Gb3JlaWduTWVzc2FnZT4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9ySW50
MzIoOCksIHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMTgsIGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlRlc3RQcm90b3MuRm9yZWlnbk1lc3NhZ2UuUGFyc2VyKSwgMTM4KTsKLSAgICBwcml2YXRl
IHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0
UHJvdG9zLkZvcmVpZ25NZXNzYWdlPiBtYXBJbnQzMkZvcmVpZ25NZXNzYWdlXyA9IG5ldyBwYmM6
Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb3JlaWdu
TWVzc2FnZT4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbk1lc3NhZ2U+IE1hcEludDMyRm9yZWlnbk1lc3Nh
Z2UgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcEludDMyRm9yZWlnbk1lc3NhZ2VfOyB9Ci0gICAg
fQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAg
ICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBUZXN0TWFwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
Ym9vbCBFcXVhbHMoVGVzdE1hcCBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhv
dGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYg
KFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICB9Ci0gICAgICBpZiAoIU1hcEludDMySW50MzIuRXF1YWxzKG90aGVyLk1hcEludDMySW50
MzIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIU1hcEludDY0SW50NjQuRXF1YWxzKG90aGVy
Lk1hcEludDY0SW50NjQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIU1hcFVpbnQzMlVpbnQz
Mi5FcXVhbHMob3RoZXIuTWFwVWludDMyVWludDMyKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KCFNYXBVaW50NjRVaW50NjQuRXF1YWxzKG90aGVyLk1hcFVpbnQ2NFVpbnQ2NCkpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmICghTWFwU2ludDMyU2ludDMyLkVxdWFscyhvdGhlci5NYXBTaW50MzJT
aW50MzIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIU1hcFNpbnQ2NFNpbnQ2NC5FcXVhbHMo
b3RoZXIuTWFwU2ludDY0U2ludDY0KSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFNYXBGaXhl
ZDMyRml4ZWQzMi5FcXVhbHMob3RoZXIuTWFwRml4ZWQzMkZpeGVkMzIpKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoIU1hcEZpeGVkNjRGaXhlZDY0LkVxdWFscyhvdGhlci5NYXBGaXhlZDY0Rml4
ZWQ2NCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwU2ZpeGVkMzJTZml4ZWQzMi5FcXVh
bHMob3RoZXIuTWFwU2ZpeGVkMzJTZml4ZWQzMikpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICgh
TWFwU2ZpeGVkNjRTZml4ZWQ2NC5FcXVhbHMob3RoZXIuTWFwU2ZpeGVkNjRTZml4ZWQ2NCkpIHJl
dHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwSW50MzJGbG9hdC5FcXVhbHMob3RoZXIuTWFwSW50
MzJGbG9hdCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwSW50MzJEb3VibGUuRXF1YWxz
KG90aGVyLk1hcEludDMyRG91YmxlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFNYXBCb29s
Qm9vbC5FcXVhbHMob3RoZXIuTWFwQm9vbEJvb2wpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAo
IU1hcFN0cmluZ1N0cmluZy5FcXVhbHMob3RoZXIuTWFwU3RyaW5nU3RyaW5nKSkgcmV0dXJuIGZh
bHNlOwotICAgICAgaWYgKCFNYXBJbnQzMkJ5dGVzLkVxdWFscyhvdGhlci5NYXBJbnQzMkJ5dGVz
KSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFNYXBJbnQzMkVudW0uRXF1YWxzKG90aGVyLk1h
cEludDMyRW51bSkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwSW50MzJGb3JlaWduTWVz
c2FnZS5FcXVhbHMob3RoZXIuTWFwSW50MzJGb3JlaWduTWVzc2FnZSkpIHJldHVybiBmYWxzZTsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0
SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBoYXNoIF49IE1hcEludDMy
SW50MzIuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwSW50NjRJbnQ2NC5HZXRIYXNo
Q29kZSgpOwotICAgICAgaGFzaCBePSBNYXBVaW50MzJVaW50MzIuR2V0SGFzaENvZGUoKTsKLSAg
ICAgIGhhc2ggXj0gTWFwVWludDY0VWludDY0LkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49
IE1hcFNpbnQzMlNpbnQzMi5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBTaW50NjRT
aW50NjQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwRml4ZWQzMkZpeGVkMzIuR2V0
SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwRml4ZWQ2NEZpeGVkNjQuR2V0SGFzaENvZGUo
KTsKLSAgICAgIGhhc2ggXj0gTWFwU2ZpeGVkMzJTZml4ZWQzMi5HZXRIYXNoQ29kZSgpOwotICAg
ICAgaGFzaCBePSBNYXBTZml4ZWQ2NFNmaXhlZDY0LkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNo
IF49IE1hcEludDMyRmxvYXQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwSW50MzJE
b3VibGUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwQm9vbEJvb2wuR2V0SGFzaENv
ZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwU3RyaW5nU3RyaW5nLkdldEhhc2hDb2RlKCk7Ci0gICAg
ICBoYXNoIF49IE1hcEludDMyQnl0ZXMuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFw
SW50MzJFbnVtLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IE1hcEludDMyRm9yZWlnbk1l
c3NhZ2UuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1
YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25G
b3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgbWFwSW50
MzJJbnQzMl8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwSW50MzJJbnQzMl9jb2RlYyk7Ci0gICAg
ICBtYXBJbnQ2NEludDY0Xy5Xcml0ZVRvKG91dHB1dCwgX21hcF9tYXBJbnQ2NEludDY0X2NvZGVj
KTsKLSAgICAgIG1hcFVpbnQzMlVpbnQzMl8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwVWludDMy
VWludDMyX2NvZGVjKTsKLSAgICAgIG1hcFVpbnQ2NFVpbnQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9t
YXBfbWFwVWludDY0VWludDY0X2NvZGVjKTsKLSAgICAgIG1hcFNpbnQzMlNpbnQzMl8uV3JpdGVU
byhvdXRwdXQsIF9tYXBfbWFwU2ludDMyU2ludDMyX2NvZGVjKTsKLSAgICAgIG1hcFNpbnQ2NFNp
bnQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwU2ludDY0U2ludDY0X2NvZGVjKTsKLSAgICAg
IG1hcEZpeGVkMzJGaXhlZDMyXy5Xcml0ZVRvKG91dHB1dCwgX21hcF9tYXBGaXhlZDMyRml4ZWQz
Ml9jb2RlYyk7Ci0gICAgICBtYXBGaXhlZDY0Rml4ZWQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBf
bWFwRml4ZWQ2NEZpeGVkNjRfY29kZWMpOwotICAgICAgbWFwU2ZpeGVkMzJTZml4ZWQzMl8uV3Jp
dGVUbyhvdXRwdXQsIF9tYXBfbWFwU2ZpeGVkMzJTZml4ZWQzMl9jb2RlYyk7Ci0gICAgICBtYXBT
Zml4ZWQ2NFNmaXhlZDY0Xy5Xcml0ZVRvKG91dHB1dCwgX21hcF9tYXBTZml4ZWQ2NFNmaXhlZDY0
X2NvZGVjKTsKLSAgICAgIG1hcEludDMyRmxvYXRfLldyaXRlVG8ob3V0cHV0LCBfbWFwX21hcElu
dDMyRmxvYXRfY29kZWMpOwotICAgICAgbWFwSW50MzJEb3VibGVfLldyaXRlVG8ob3V0cHV0LCBf
bWFwX21hcEludDMyRG91YmxlX2NvZGVjKTsKLSAgICAgIG1hcEJvb2xCb29sXy5Xcml0ZVRvKG91
dHB1dCwgX21hcF9tYXBCb29sQm9vbF9jb2RlYyk7Ci0gICAgICBtYXBTdHJpbmdTdHJpbmdfLldy
aXRlVG8ob3V0cHV0LCBfbWFwX21hcFN0cmluZ1N0cmluZ19jb2RlYyk7Ci0gICAgICBtYXBJbnQz
MkJ5dGVzXy5Xcml0ZVRvKG91dHB1dCwgX21hcF9tYXBJbnQzMkJ5dGVzX2NvZGVjKTsKLSAgICAg
IG1hcEludDMyRW51bV8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwSW50MzJFbnVtX2NvZGVjKTsK
LSAgICAgIG1hcEludDMyRm9yZWlnbk1lc3NhZ2VfLldyaXRlVG8ob3V0cHV0LCBfbWFwX21hcElu
dDMyRm9yZWlnbk1lc3NhZ2VfY29kZWMpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3Vs
YXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIHNpemUgKz0gbWFwSW50MzJJ
bnQzMl8uQ2FsY3VsYXRlU2l6ZShfbWFwX21hcEludDMySW50MzJfY29kZWMpOwotICAgICAgc2l6
ZSArPSBtYXBJbnQ2NEludDY0Xy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwSW50NjRJbnQ2NF9jb2Rl
Yyk7Ci0gICAgICBzaXplICs9IG1hcFVpbnQzMlVpbnQzMl8uQ2FsY3VsYXRlU2l6ZShfbWFwX21h
cFVpbnQzMlVpbnQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcFVpbnQ2NFVpbnQ2NF8uQ2Fs
Y3VsYXRlU2l6ZShfbWFwX21hcFVpbnQ2NFVpbnQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1h
cFNpbnQzMlNpbnQzMl8uQ2FsY3VsYXRlU2l6ZShfbWFwX21hcFNpbnQzMlNpbnQzMl9jb2RlYyk7
Ci0gICAgICBzaXplICs9IG1hcFNpbnQ2NFNpbnQ2NF8uQ2FsY3VsYXRlU2l6ZShfbWFwX21hcFNp
bnQ2NFNpbnQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcEZpeGVkMzJGaXhlZDMyXy5DYWxj
dWxhdGVTaXplKF9tYXBfbWFwRml4ZWQzMkZpeGVkMzJfY29kZWMpOwotICAgICAgc2l6ZSArPSBt
YXBGaXhlZDY0Rml4ZWQ2NF8uQ2FsY3VsYXRlU2l6ZShfbWFwX21hcEZpeGVkNjRGaXhlZDY0X2Nv
ZGVjKTsKLSAgICAgIHNpemUgKz0gbWFwU2ZpeGVkMzJTZml4ZWQzMl8uQ2FsY3VsYXRlU2l6ZShf
bWFwX21hcFNmaXhlZDMyU2ZpeGVkMzJfY29kZWMpOwotICAgICAgc2l6ZSArPSBtYXBTZml4ZWQ2
NFNmaXhlZDY0Xy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwU2ZpeGVkNjRTZml4ZWQ2NF9jb2RlYyk7
Ci0gICAgICBzaXplICs9IG1hcEludDMyRmxvYXRfLkNhbGN1bGF0ZVNpemUoX21hcF9tYXBJbnQz
MkZsb2F0X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFwSW50MzJEb3VibGVfLkNhbGN1bGF0ZVNp
emUoX21hcF9tYXBJbnQzMkRvdWJsZV9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcEJvb2xCb29s
Xy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwQm9vbEJvb2xfY29kZWMpOwotICAgICAgc2l6ZSArPSBt
YXBTdHJpbmdTdHJpbmdfLkNhbGN1bGF0ZVNpemUoX21hcF9tYXBTdHJpbmdTdHJpbmdfY29kZWMp
OwotICAgICAgc2l6ZSArPSBtYXBJbnQzMkJ5dGVzXy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwSW50
MzJCeXRlc19jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcEludDMyRW51bV8uQ2FsY3VsYXRlU2l6
ZShfbWFwX21hcEludDMyRW51bV9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcEludDMyRm9yZWln
bk1lc3NhZ2VfLkNhbGN1bGF0ZVNpemUoX21hcF9tYXBJbnQzMkZvcmVpZ25NZXNzYWdlX2NvZGVj
KTsKLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJv
bShUZXN0TWFwIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0gICAgICBtYXBJbnQzMkludDMyXy5BZGQob3RoZXIubWFwSW50MzJJ
bnQzMl8pOwotICAgICAgbWFwSW50NjRJbnQ2NF8uQWRkKG90aGVyLm1hcEludDY0SW50NjRfKTsK
LSAgICAgIG1hcFVpbnQzMlVpbnQzMl8uQWRkKG90aGVyLm1hcFVpbnQzMlVpbnQzMl8pOwotICAg
ICAgbWFwVWludDY0VWludDY0Xy5BZGQob3RoZXIubWFwVWludDY0VWludDY0Xyk7Ci0gICAgICBt
YXBTaW50MzJTaW50MzJfLkFkZChvdGhlci5tYXBTaW50MzJTaW50MzJfKTsKLSAgICAgIG1hcFNp
bnQ2NFNpbnQ2NF8uQWRkKG90aGVyLm1hcFNpbnQ2NFNpbnQ2NF8pOwotICAgICAgbWFwRml4ZWQz
MkZpeGVkMzJfLkFkZChvdGhlci5tYXBGaXhlZDMyRml4ZWQzMl8pOwotICAgICAgbWFwRml4ZWQ2
NEZpeGVkNjRfLkFkZChvdGhlci5tYXBGaXhlZDY0Rml4ZWQ2NF8pOwotICAgICAgbWFwU2ZpeGVk
MzJTZml4ZWQzMl8uQWRkKG90aGVyLm1hcFNmaXhlZDMyU2ZpeGVkMzJfKTsKLSAgICAgIG1hcFNm
aXhlZDY0U2ZpeGVkNjRfLkFkZChvdGhlci5tYXBTZml4ZWQ2NFNmaXhlZDY0Xyk7Ci0gICAgICBt
YXBJbnQzMkZsb2F0Xy5BZGQob3RoZXIubWFwSW50MzJGbG9hdF8pOwotICAgICAgbWFwSW50MzJE
b3VibGVfLkFkZChvdGhlci5tYXBJbnQzMkRvdWJsZV8pOwotICAgICAgbWFwQm9vbEJvb2xfLkFk
ZChvdGhlci5tYXBCb29sQm9vbF8pOwotICAgICAgbWFwU3RyaW5nU3RyaW5nXy5BZGQob3RoZXIu
bWFwU3RyaW5nU3RyaW5nXyk7Ci0gICAgICBtYXBJbnQzMkJ5dGVzXy5BZGQob3RoZXIubWFwSW50
MzJCeXRlc18pOwotICAgICAgbWFwSW50MzJFbnVtXy5BZGQob3RoZXIubWFwSW50MzJFbnVtXyk7
Ci0gICAgICBtYXBJbnQzMkZvcmVpZ25NZXNzYWdlXy5BZGQob3RoZXIubWFwSW50MzJGb3JlaWdu
TWVzc2FnZV8pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9
IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIG1hcEludDMySW50
MzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcEludDMySW50MzJfY29kZWMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTg6IHsKLSAgICAg
ICAgICAgIG1hcEludDY0SW50NjRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcEludDY0
SW50NjRfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGNhc2UgMjY6IHsKLSAgICAgICAgICAgIG1hcFVpbnQzMlVpbnQzMl8uQWRkRW50cmllc0Zyb20o
aW5wdXQsIF9tYXBfbWFwVWludDMyVWludDMyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM0OiB7Ci0gICAgICAgICAgICBtYXBVaW50NjRV
aW50NjRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcFVpbnQ2NFVpbnQ2NF9jb2RlYyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA0Mjogewot
ICAgICAgICAgICAgbWFwU2ludDMyU2ludDMyXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9t
YXBTaW50MzJTaW50MzJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgNTA6IHsKLSAgICAgICAgICAgIG1hcFNpbnQ2NFNpbnQ2NF8uQWRkRW50
cmllc0Zyb20oaW5wdXQsIF9tYXBfbWFwU2ludDY0U2ludDY0X2NvZGVjKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDU4OiB7Ci0gICAgICAgICAgICBt
YXBGaXhlZDMyRml4ZWQzMl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9tYXBfbWFwRml4ZWQzMkZp
eGVkMzJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGNhc2UgNjY6IHsKLSAgICAgICAgICAgIG1hcEZpeGVkNjRGaXhlZDY0Xy5BZGRFbnRyaWVzRnJv
bShpbnB1dCwgX21hcF9tYXBGaXhlZDY0Rml4ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA3NDogewotICAgICAgICAgICAgbWFwU2Zp
eGVkMzJTZml4ZWQzMl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9tYXBfbWFwU2ZpeGVkMzJTZml4
ZWQzMl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Y2FzZSA4MjogewotICAgICAgICAgICAgbWFwU2ZpeGVkNjRTZml4ZWQ2NF8uQWRkRW50cmllc0Zy
b20oaW5wdXQsIF9tYXBfbWFwU2ZpeGVkNjRTZml4ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA5MDogewotICAgICAgICAgICAgbWFw
SW50MzJGbG9hdF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9tYXBfbWFwSW50MzJGbG9hdF9jb2Rl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA5ODog
ewotICAgICAgICAgICAgbWFwSW50MzJEb3VibGVfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFw
X21hcEludDMyRG91YmxlX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDEwNjogewotICAgICAgICAgICAgbWFwQm9vbEJvb2xfLkFkZEVudHJp
ZXNGcm9tKGlucHV0LCBfbWFwX21hcEJvb2xCb29sX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDExNDogewotICAgICAgICAgICAgbWFwU3Ry
aW5nU3RyaW5nXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBTdHJpbmdTdHJpbmdfY29k
ZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTIy
OiB7Ci0gICAgICAgICAgICBtYXBJbnQzMkJ5dGVzXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21h
cF9tYXBJbnQzMkJ5dGVzX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDEzMDogewotICAgICAgICAgICAgbWFwSW50MzJFbnVtXy5BZGRFbnRy
aWVzRnJvbShpbnB1dCwgX21hcF9tYXBJbnQzMkVudW1fY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTM4OiB7Ci0gICAgICAgICAgICBtYXBJ
bnQzMkZvcmVpZ25NZXNzYWdlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBJbnQzMkZv
cmVpZ25NZXNzYWdlX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdu
b3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBw
YXJ0aWFsIGNsYXNzIFRlc3RNYXBTdWJtZXNzYWdlIDogcGI6OklNZXNzYWdlPFRlc3RNYXBTdWJt
ZXNzYWdlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8
VGVzdE1hcFN1Ym1lc3NhZ2U+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdE1h
cFN1Ym1lc3NhZ2U+KCgpID0+IG5ldyBUZXN0TWFwU3VibWVzc2FnZSgpKTsKLSAgICBwdWJsaWMg
c3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RNYXBTdWJtZXNzYWdlPiBQYXJzZXIgeyBnZXQg
eyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURl
c2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuVGVzdFByb3Rvcy5NYXBVbml0dGVzdFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRv
ci5NZXNzYWdlVHlwZXNbMV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9y
IHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9y
OyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RNYXBTdWJtZXNzYWdlKCkgewotICAgICAgT25D
b25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24o
KTsKLQotICAgIHB1YmxpYyBUZXN0TWFwU3VibWVzc2FnZShUZXN0TWFwU3VibWVzc2FnZSBvdGhl
cikgOiB0aGlzKCkgewotICAgICAgVGVzdE1hcCA9IG90aGVyLnRlc3RNYXBfICE9IG51bGwgPyBv
dGhlci5UZXN0TWFwLkNsb25lKCkgOiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0TWFw
U3VibWVzc2FnZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgVGVzdE1hcFN1Ym1lc3NhZ2Uo
dGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ0
ZXN0X21hcCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVGVzdE1hcEZp
ZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQ
cm90b3MuVGVzdE1hcCB0ZXN0TWFwXzsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuVGVzdFByb3Rvcy5UZXN0TWFwIFRlc3RNYXAgewotICAgICAgZ2V0IHsgcmV0dXJuIHRlc3RN
YXBfOyB9Ci0gICAgICBzZXQgewotICAgICAgICB0ZXN0TWFwXyA9IHZhbHVlOwotICAgICAgfQot
ICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsK
LSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgVGVzdE1hcFN1Ym1lc3NhZ2UpOwotICAgIH0K
LQotICAgIHB1YmxpYyBib29sIEVxdWFscyhUZXN0TWFwU3VibWVzc2FnZSBvdGhlcikgewotICAg
ICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMo
VGVzdE1hcCwgb3RoZXIuVGVzdE1hcCkpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAg
ICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAodGVzdE1hcF8gIT0gbnVsbCkgaGFzaCBePSBUZXN0
TWFwLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9y
bWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmICh0ZXN0
TWFwXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAgICAg
IG91dHB1dC5Xcml0ZU1lc3NhZ2UoVGVzdE1hcCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVi
bGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYg
KHRlc3RNYXBfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0
U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShUZXN0TWFwKTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShUZXN0TWFwU3VibWVz
c2FnZSBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgfQotICAgICAgaWYgKG90aGVyLnRlc3RNYXBfICE9IG51bGwpIHsKLSAgICAgICAg
aWYgKHRlc3RNYXBfID09IG51bGwpIHsKLSAgICAgICAgICB0ZXN0TWFwXyA9IG5ldyBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RNYXAoKTsKLSAgICAgICAgfQotICAgICAg
ICBUZXN0TWFwLk1lcmdlRnJvbShvdGhlci5UZXN0TWFwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAg
ICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDAp
IHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIDEwOiB7Ci0gICAgICAgICAgICBpZiAodGVzdE1hcF8gPT0gbnVsbCkgewotICAgICAgICAg
ICAgICB0ZXN0TWFwXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRl
c3RNYXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKHRl
c3RNYXBfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVn
Z2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNz
IFRlc3RNZXNzYWdlTWFwIDogcGI6OklNZXNzYWdlPFRlc3RNZXNzYWdlTWFwPiB7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdE1lc3NhZ2VNYXA+IF9w
YXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdE1lc3NhZ2VNYXA+KCgpID0+IG5ldyBU
ZXN0TWVzc2FnZU1hcCgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPFRl
c3RNZXNzYWdlTWFwPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBw
dWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBn
ZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5NYXBVbml0dGVz
dFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMl07IH0KLSAgICB9Ci0K
LSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAg
ICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RN
ZXNzYWdlTWFwKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0
aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBUZXN0TWVzc2FnZU1hcChU
ZXN0TWVzc2FnZU1hcCBvdGhlcikgOiB0aGlzKCkgewotICAgICAgbWFwSW50MzJNZXNzYWdlXyA9
IG90aGVyLm1hcEludDMyTWVzc2FnZV8uQ2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVGVz
dE1lc3NhZ2VNYXAgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IFRlc3RNZXNzYWdlTWFwKHRo
aXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFw
X2ludDMyX21lc3NhZ2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1h
cEludDMyTWVzc2FnZUZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25s
eSBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5U
ZXN0QWxsVHlwZXM+LkNvZGVjIF9tYXBfbWFwSW50MzJNZXNzYWdlX2NvZGVjCi0gICAgICAgID0g
bmV3IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9z
LlRlc3RBbGxUeXBlcz4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9ySW50MzIoOCksIHBiOjpGaWVs
ZENvZGVjLkZvck1lc3NhZ2UoMTgsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3Mu
VGVzdEFsbFR5cGVzLlBhcnNlciksIDEwKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFw
RmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBl
cz4gbWFwSW50MzJNZXNzYWdlXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0QWxsVHlwZXM+KCk7Ci0gICAgcHVibGljIHBiYzo6
TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxU
eXBlcz4gTWFwSW50MzJNZXNzYWdlIHsKLSAgICAgIGdldCB7IHJldHVybiBtYXBJbnQzMk1lc3Nh
Z2VfOyB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBv
dGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBUZXN0TWVzc2FnZU1hcCk7Ci0g
ICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKFRlc3RNZXNzYWdlTWFwIG90aGVyKSB7Ci0g
ICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkg
ewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmICghTWFwSW50MzJNZXNz
YWdlLkVxdWFscyhvdGhlci5NYXBJbnQzMk1lc3NhZ2UpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2Rl
KCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaGFzaCBePSBNYXBJbnQzMk1lc3NhZ2Uu
R2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBv
dmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0
ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdy
aXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgbWFwSW50MzJNZXNz
YWdlXy5Xcml0ZVRvKG91dHB1dCwgX21hcF9tYXBJbnQzMk1lc3NhZ2VfY29kZWMpOwotICAgIH0K
LQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsK
LSAgICAgIHNpemUgKz0gbWFwSW50MzJNZXNzYWdlXy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwSW50
MzJNZXNzYWdlX2NvZGVjKTsKLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIE1lcmdlRnJvbShUZXN0TWVzc2FnZU1hcCBvdGhlcikgewotICAgICAgaWYgKG90aGVy
ID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgbWFwSW50MzJNZXNz
YWdlXy5BZGQob3RoZXIubWFwSW50MzJNZXNzYWdlXyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRh
ZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAg
IHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tp
cExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewot
ICAgICAgICAgICAgbWFwSW50MzJNZXNzYWdlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9t
YXBJbnQzMk1lc3NhZ2VfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8v
LyAgVHdvIG1hcCBmaWVsZHMgc2hhcmUgdGhlIHNhbWUgZW50cnkgZGVmYXVsdCBpbnN0YW5jZS4K
LSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2Vy
Tm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFRl
c3RTYW1lVHlwZU1hcCA6IHBiOjpJTWVzc2FnZTxUZXN0U2FtZVR5cGVNYXA+IHsKLSAgICBwcml2
YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0U2FtZVR5cGVNYXA+IF9w
YXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdFNhbWVUeXBlTWFwPigoKSA9PiBuZXcg
VGVzdFNhbWVUeXBlTWFwKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8
VGVzdFNhbWVUeXBlTWFwPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAg
ICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5NYXBVbml0
dGVzdFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbM107IH0KLSAgICB9
Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRl
c3RTYW1lVHlwZU1hcCgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAg
cGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgVGVzdFNhbWVUeXBl
TWFwKFRlc3RTYW1lVHlwZU1hcCBvdGhlcikgOiB0aGlzKCkgewotICAgICAgbWFwMV8gPSBvdGhl
ci5tYXAxXy5DbG9uZSgpOwotICAgICAgbWFwMl8gPSBvdGhlci5tYXAyXy5DbG9uZSgpOwotICAg
IH0KLQotICAgIHB1YmxpYyBUZXN0U2FtZVR5cGVNYXAgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4g
bmV3IFRlc3RTYW1lVHlwZU1hcCh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgIm1hcDEiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29u
c3QgaW50IE1hcDFGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkg
cGJjOjpNYXBGaWVsZDxpbnQsIGludD4uQ29kZWMgX21hcF9tYXAxX2NvZGVjCi0gICAgICAgID0g
bmV3IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvckludDMy
KDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMigxNiksIDEwKTsKLSAgICBwcml2YXRlIHJlYWRv
bmx5IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+IG1hcDFfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50
LCBpbnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+IE1hcDEgewotICAg
ICAgZ2V0IHsgcmV0dXJuIG1hcDFfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJtYXAyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBNYXAyRmllbGROdW1iZXIgPSAyOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBi
Yzo6TWFwRmllbGQ8aW50LCBpbnQ+LkNvZGVjIF9tYXBfbWFwMl9jb2RlYwotICAgICAgICA9IG5l
dyBwYmM6Ok1hcEZpZWxkPGludCwgaW50Pi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4
KSwgcGI6OkZpZWxkQ29kZWMuRm9ySW50MzIoMTYpLCAxOCk7Ci0gICAgcHJpdmF0ZSByZWFkb25s
eSBwYmM6Ok1hcEZpZWxkPGludCwgaW50PiBtYXAyXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwg
aW50PigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxkPGludCwgaW50PiBNYXAyIHsKLSAgICAg
IGdldCB7IHJldHVybiBtYXAyXzsgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29s
IEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgVGVz
dFNhbWVUeXBlTWFwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoVGVzdFNhbWVU
eXBlTWFwIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1
YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAg
IGlmICghTWFwMS5FcXVhbHMob3RoZXIuTWFwMSkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICgh
TWFwMi5FcXVhbHMob3RoZXIuTWFwMikpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAg
ICBpbnQgaGFzaCA9IDE7Ci0gICAgICBoYXNoIF49IE1hcDEuR2V0SGFzaENvZGUoKTsKLSAgICAg
IGhhc2ggXj0gTWFwMi5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQot
Ci0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBw
Yjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAg
cHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAg
ICBtYXAxXy5Xcml0ZVRvKG91dHB1dCwgX21hcF9tYXAxX2NvZGVjKTsKLSAgICAgIG1hcDJfLldy
aXRlVG8ob3V0cHV0LCBfbWFwX21hcDJfY29kZWMpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQg
Q2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIHNpemUgKz0gbWFw
MV8uQ2FsY3VsYXRlU2l6ZShfbWFwX21hcDFfY29kZWMpOwotICAgICAgc2l6ZSArPSBtYXAyXy5D
YWxjdWxhdGVTaXplKF9tYXBfbWFwMl9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oVGVzdFNhbWVUeXBlTWFwIG90aGVyKSB7Ci0g
ICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAg
ICBtYXAxXy5BZGQob3RoZXIubWFwMV8pOwotICAgICAgbWFwMl8uQWRkKG90aGVyLm1hcDJfKTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0g
aW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFk
VGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIDEwOiB7Ci0gICAgICAgICAgICBtYXAxXy5BZGRFbnRyaWVzRnJvbShp
bnB1dCwgX21hcF9tYXAxX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBtYXAyXy5BZGRFbnRyaWVzRnJvbShp
bnB1dCwgX21hcF9tYXAyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6U3lzdGVtLkRp
YWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxl
ZCBwYXJ0aWFsIGNsYXNzIFRlc3RBcmVuYU1hcCA6IHBiOjpJTWVzc2FnZTxUZXN0QXJlbmFNYXA+
IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0QXJl
bmFNYXA+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdEFyZW5hTWFwPigoKSA9
PiBuZXcgVGVzdEFyZW5hTWFwKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJz
ZXI8VGVzdEFyZW5hTWFwPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAg
ICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5NYXBVbml0
dGVzdFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbNF07IH0KLSAgICB9
Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRl
c3RBcmVuYU1hcCgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFy
dGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgVGVzdEFyZW5hTWFwKFRl
c3RBcmVuYU1hcCBvdGhlcikgOiB0aGlzKCkgewotICAgICAgbWFwSW50MzJJbnQzMl8gPSBvdGhl
ci5tYXBJbnQzMkludDMyXy5DbG9uZSgpOwotICAgICAgbWFwSW50NjRJbnQ2NF8gPSBvdGhlci5t
YXBJbnQ2NEludDY0Xy5DbG9uZSgpOwotICAgICAgbWFwVWludDMyVWludDMyXyA9IG90aGVyLm1h
cFVpbnQzMlVpbnQzMl8uQ2xvbmUoKTsKLSAgICAgIG1hcFVpbnQ2NFVpbnQ2NF8gPSBvdGhlci5t
YXBVaW50NjRVaW50NjRfLkNsb25lKCk7Ci0gICAgICBtYXBTaW50MzJTaW50MzJfID0gb3RoZXIu
bWFwU2ludDMyU2ludDMyXy5DbG9uZSgpOwotICAgICAgbWFwU2ludDY0U2ludDY0XyA9IG90aGVy
Lm1hcFNpbnQ2NFNpbnQ2NF8uQ2xvbmUoKTsKLSAgICAgIG1hcEZpeGVkMzJGaXhlZDMyXyA9IG90
aGVyLm1hcEZpeGVkMzJGaXhlZDMyXy5DbG9uZSgpOwotICAgICAgbWFwRml4ZWQ2NEZpeGVkNjRf
ID0gb3RoZXIubWFwRml4ZWQ2NEZpeGVkNjRfLkNsb25lKCk7Ci0gICAgICBtYXBTZml4ZWQzMlNm
aXhlZDMyXyA9IG90aGVyLm1hcFNmaXhlZDMyU2ZpeGVkMzJfLkNsb25lKCk7Ci0gICAgICBtYXBT
Zml4ZWQ2NFNmaXhlZDY0XyA9IG90aGVyLm1hcFNmaXhlZDY0U2ZpeGVkNjRfLkNsb25lKCk7Ci0g
ICAgICBtYXBJbnQzMkZsb2F0XyA9IG90aGVyLm1hcEludDMyRmxvYXRfLkNsb25lKCk7Ci0gICAg
ICBtYXBJbnQzMkRvdWJsZV8gPSBvdGhlci5tYXBJbnQzMkRvdWJsZV8uQ2xvbmUoKTsKLSAgICAg
IG1hcEJvb2xCb29sXyA9IG90aGVyLm1hcEJvb2xCb29sXy5DbG9uZSgpOwotICAgICAgbWFwSW50
MzJFbnVtXyA9IG90aGVyLm1hcEludDMyRW51bV8uQ2xvbmUoKTsKLSAgICAgIG1hcEludDMyRm9y
ZWlnbk1lc3NhZ2VfID0gb3RoZXIubWFwSW50MzJGb3JlaWduTWVzc2FnZV8uQ2xvbmUoKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgVGVzdEFyZW5hTWFwIENsb25lKCkgewotICAgICAgcmV0dXJuIG5l
dyBUZXN0QXJlbmFNYXAodGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJtYXBfaW50MzJfaW50MzIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IE1hcEludDMySW50MzJGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBz
dGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4uQ29kZWMgX21hcF9tYXBJbnQz
MkludDMyX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+LkNvZGVj
KHBiOjpGaWVsZENvZGVjLkZvckludDMyKDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMigxNiks
IDEwKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+IG1hcElu
dDMySW50MzJfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+KCk7Ci0gICAgcHVibGljIHBi
Yzo6TWFwRmllbGQ8aW50LCBpbnQ+IE1hcEludDMySW50MzIgewotICAgICAgZ2V0IHsgcmV0dXJu
IG1hcEludDMySW50MzJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJtYXBfaW50NjRfaW50NjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
Y29uc3QgaW50IE1hcEludDY0SW50NjRGaWVsZE51bWJlciA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0
aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPi5Db2RlYyBfbWFwX21hcEludDY0
SW50NjRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPi5Db2Rl
YyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQ2NCg4KSwgcGI6OkZpZWxkQ29kZWMuRm9ySW50NjQoMTYp
LCAxOCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGxvbmcsIGxvbmc+IG1h
cEludDY0SW50NjRfID0gbmV3IHBiYzo6TWFwRmllbGQ8bG9uZywgbG9uZz4oKTsKLSAgICBwdWJs
aWMgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPiBNYXBJbnQ2NEludDY0IHsKLSAgICAgIGdldCB7
IHJldHVybiBtYXBJbnQ2NEludDY0XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAibWFwX3VpbnQzMl91aW50MzIiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IE1hcFVpbnQzMlVpbnQzMkZpZWxkTnVtYmVyID0gMzsKLSAgICBw
cml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPHVpbnQsIHVpbnQ+LkNvZGVjIF9t
YXBfbWFwVWludDMyVWludDMyX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8dWlu
dCwgdWludD4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9yVUludDMyKDgpLCBwYjo6RmllbGRDb2Rl
Yy5Gb3JVSW50MzIoMTYpLCAyNik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxk
PHVpbnQsIHVpbnQ+IG1hcFVpbnQzMlVpbnQzMl8gPSBuZXcgcGJjOjpNYXBGaWVsZDx1aW50LCB1
aW50PigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxkPHVpbnQsIHVpbnQ+IE1hcFVpbnQzMlVp
bnQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWFwVWludDMyVWludDMyXzsgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX3VpbnQ2NF91aW50NjQi
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcFVpbnQ2NFVpbnQ2NEZp
ZWxkTnVtYmVyID0gNDsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxk
PHVsb25nLCB1bG9uZz4uQ29kZWMgX21hcF9tYXBVaW50NjRVaW50NjRfY29kZWMKLSAgICAgICAg
PSBuZXcgcGJjOjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZv
clVJbnQ2NCg4KSwgcGI6OkZpZWxkQ29kZWMuRm9yVUludDY0KDE2KSwgMzQpOwotICAgIHByaXZh
dGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+IG1hcFVpbnQ2NFVpbnQ2NF8g
PSBuZXcgcGJjOjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFw
RmllbGQ8dWxvbmcsIHVsb25nPiBNYXBVaW50NjRVaW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJu
IG1hcFVpbnQ2NFVpbnQ2NF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgIm1hcF9zaW50MzJfc2ludDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVi
bGljIGNvbnN0IGludCBNYXBTaW50MzJTaW50MzJGaWVsZE51bWJlciA9IDU7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4uQ29kZWMgX21hcF9tYXBT
aW50MzJTaW50MzJfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4u
Q29kZWMocGI6OkZpZWxkQ29kZWMuRm9yU0ludDMyKDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JTSW50
MzIoMTYpLCA0Mik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgaW50
PiBtYXBTaW50MzJTaW50MzJfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+KCk7Ci0gICAg
cHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+IE1hcFNpbnQzMlNpbnQzMiB7Ci0gICAgICBn
ZXQgeyByZXR1cm4gbWFwU2ludDMyU2ludDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX3NpbnQ2NF9zaW50NjQiIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcFNpbnQ2NFNpbnQ2NEZpZWxkTnVtYmVyID0gNjsK
LSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGxvbmcsIGxvbmc+LkNv
ZGVjIF9tYXBfbWFwU2ludDY0U2ludDY0X2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmll
bGQ8bG9uZywgbG9uZz4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9yU0ludDY0KDgpLCBwYjo6Rmll
bGRDb2RlYy5Gb3JTSW50NjQoMTYpLCA1MCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1h
cEZpZWxkPGxvbmcsIGxvbmc+IG1hcFNpbnQ2NFNpbnQ2NF8gPSBuZXcgcGJjOjpNYXBGaWVsZDxs
b25nLCBsb25nPigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxkPGxvbmcsIGxvbmc+IE1hcFNp
bnQ2NFNpbnQ2NCB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWFwU2ludDY0U2ludDY0XzsgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX2ZpeGVkMzJf
Zml4ZWQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTWFwRml4ZWQz
MkZpeGVkMzJGaWVsZE51bWJlciA9IDc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJj
OjpNYXBGaWVsZDx1aW50LCB1aW50Pi5Db2RlYyBfbWFwX21hcEZpeGVkMzJGaXhlZDMyX2NvZGVj
Ci0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8dWludCwgdWludD4uQ29kZWMocGI6OkZpZWxk
Q29kZWMuRm9yRml4ZWQzMigxMyksIHBiOjpGaWVsZENvZGVjLkZvckZpeGVkMzIoMjEpLCA1OCk7
Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPHVpbnQsIHVpbnQ+IG1hcEZpeGVk
MzJGaXhlZDMyXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPHVpbnQsIHVpbnQ+KCk7Ci0gICAgcHVibGlj
IHBiYzo6TWFwRmllbGQ8dWludCwgdWludD4gTWFwRml4ZWQzMkZpeGVkMzIgewotICAgICAgZ2V0
IHsgcmV0dXJuIG1hcEZpeGVkMzJGaXhlZDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX2ZpeGVkNjRfZml4ZWQ2NCIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTWFwRml4ZWQ2NEZpeGVkNjRGaWVsZE51bWJlciA9
IDg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDx1bG9uZywgdWxv
bmc+LkNvZGVjIF9tYXBfbWFwRml4ZWQ2NEZpeGVkNjRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJj
OjpNYXBGaWVsZDx1bG9uZywgdWxvbmc+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvckZpeGVkNjQo
OSksIHBiOjpGaWVsZENvZGVjLkZvckZpeGVkNjQoMTcpLCA2Nik7Ci0gICAgcHJpdmF0ZSByZWFk
b25seSBwYmM6Ok1hcEZpZWxkPHVsb25nLCB1bG9uZz4gbWFwRml4ZWQ2NEZpeGVkNjRfID0gbmV3
IHBiYzo6TWFwRmllbGQ8dWxvbmcsIHVsb25nPigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxk
PHVsb25nLCB1bG9uZz4gTWFwRml4ZWQ2NEZpeGVkNjQgewotICAgICAgZ2V0IHsgcmV0dXJuIG1h
cEZpeGVkNjRGaXhlZDY0XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAibWFwX3NmaXhlZDMyX3NmaXhlZDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBNYXBTZml4ZWQzMlNmaXhlZDMyRmllbGROdW1iZXIgPSA5OwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ+LkNvZGVjIF9t
YXBfbWFwU2ZpeGVkMzJTZml4ZWQzMl9jb2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxk
PGludCwgaW50Pi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JTRml4ZWQzMigxMyksIHBiOjpGaWVs
ZENvZGVjLkZvclNGaXhlZDMyKDIxKSwgNzQpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpN
YXBGaWVsZDxpbnQsIGludD4gbWFwU2ZpeGVkMzJTZml4ZWQzMl8gPSBuZXcgcGJjOjpNYXBGaWVs
ZDxpbnQsIGludD4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4gTWFwU2Zp
eGVkMzJTZml4ZWQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWFwU2ZpeGVkMzJTZml4ZWQzMl87
IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm1hcF9z
Zml4ZWQ2NF9zZml4ZWQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
TWFwU2ZpeGVkNjRTZml4ZWQ2NEZpZWxkTnVtYmVyID0gMTA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMg
cmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPi5Db2RlYyBfbWFwX21hcFNmaXhlZDY0
U2ZpeGVkNjRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPi5D
b2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JTRml4ZWQ2NCg5KSwgcGI6OkZpZWxkQ29kZWMuRm9yU0Zp
eGVkNjQoMTcpLCA4Mik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGxvbmcs
IGxvbmc+IG1hcFNmaXhlZDY0U2ZpeGVkNjRfID0gbmV3IHBiYzo6TWFwRmllbGQ8bG9uZywgbG9u
Zz4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxsb25nLCBsb25nPiBNYXBTZml4ZWQ2NFNm
aXhlZDY0IHsKLSAgICAgIGdldCB7IHJldHVybiBtYXBTZml4ZWQ2NFNmaXhlZDY0XzsgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWFwX2ludDMyX2Zs
b2F0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBNYXBJbnQzMkZsb2F0
RmllbGROdW1iZXIgPSAxMTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZp
ZWxkPGludCwgZmxvYXQ+LkNvZGVjIF9tYXBfbWFwSW50MzJGbG9hdF9jb2RlYwotICAgICAgICA9
IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZmxvYXQ+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvcklu
dDMyKDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JGbG9hdCgyMSksIDkwKTsKLSAgICBwcml2YXRlIHJl
YWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBmbG9hdD4gbWFwSW50MzJGbG9hdF8gPSBuZXcgcGJj
OjpNYXBGaWVsZDxpbnQsIGZsb2F0PigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxkPGludCwg
ZmxvYXQ+IE1hcEludDMyRmxvYXQgewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcEludDMyRmxvYXRf
OyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJtYXBf
aW50MzJfZG91YmxlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBNYXBJ
bnQzMkRvdWJsZUZpZWxkTnVtYmVyID0gMTI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkg
cGJjOjpNYXBGaWVsZDxpbnQsIGRvdWJsZT4uQ29kZWMgX21hcF9tYXBJbnQzMkRvdWJsZV9jb2Rl
YwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZG91YmxlPi5Db2RlYyhwYjo6Rmll
bGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9yRG91YmxlKDE3KSwgOTgpOwot
ICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGRvdWJsZT4gbWFwSW50MzJE
b3VibGVfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBkb3VibGU+KCk7Ci0gICAgcHVibGljIHBi
Yzo6TWFwRmllbGQ8aW50LCBkb3VibGU+IE1hcEludDMyRG91YmxlIHsKLSAgICAgIGdldCB7IHJl
dHVybiBtYXBJbnQzMkRvdWJsZV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgIm1hcF9ib29sX2Jvb2wiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IE1hcEJvb2xCb29sRmllbGROdW1iZXIgPSAxMzsKLSAgICBwcml2YXRlIHN0
YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGJvb2wsIGJvb2w+LkNvZGVjIF9tYXBfbWFwQm9v
bEJvb2xfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDxib29sLCBib29sPi5Db2Rl
YyhwYjo6RmllbGRDb2RlYy5Gb3JCb29sKDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JCb29sKDE2KSwg
MTA2KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8Ym9vbCwgYm9vbD4gbWFw
Qm9vbEJvb2xfID0gbmV3IHBiYzo6TWFwRmllbGQ8Ym9vbCwgYm9vbD4oKTsKLSAgICBwdWJsaWMg
cGJjOjpNYXBGaWVsZDxib29sLCBib29sPiBNYXBCb29sQm9vbCB7Ci0gICAgICBnZXQgeyByZXR1
cm4gbWFwQm9vbEJvb2xfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJtYXBfaW50MzJfZW51bSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgTWFwSW50MzJFbnVtRmllbGROdW1iZXIgPSAxNDsKLSAgICBwcml2YXRlIHN0YXRp
YyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVz
dFByb3Rvcy5NYXBFbnVtPi5Db2RlYyBfbWFwX21hcEludDMyRW51bV9jb2RlYwotICAgICAgICA9
IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rv
cy5NYXBFbnVtPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29k
ZWMuRm9yRW51bSgxNiwgeCA9PiAoaW50KSB4LCB4ID0+IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5UZXN0UHJvdG9zLk1hcEVudW0pIHgpLCAxMTQpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJj
OjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuTWFwRW51
bT4gbWFwSW50MzJFbnVtXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuVGVzdFByb3Rvcy5NYXBFbnVtPigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxk
PGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5NYXBFbnVtPiBNYXBJbnQz
MkVudW0gewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcEludDMyRW51bV87IH0KLSAgICB9Ci0KLSAg
ICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm1hcF9pbnQzMl9mb3JlaWduX21l
c3NhZ2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcEludDMyRm9y
ZWlnbk1lc3NhZ2VGaWVsZE51bWJlciA9IDE1OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5
IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZv
cmVpZ25NZXNzYWdlPi5Db2RlYyBfbWFwX21hcEludDMyRm9yZWlnbk1lc3NhZ2VfY29kZWMKLSAg
ICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRl
c3RQcm90b3MuRm9yZWlnbk1lc3NhZ2U+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvckludDMyKDgp
LCBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDE4LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5U
ZXN0UHJvdG9zLkZvcmVpZ25NZXNzYWdlLlBhcnNlciksIDEyMik7Ci0gICAgcHJpdmF0ZSByZWFk
b25seSBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rv
cy5Gb3JlaWduTWVzc2FnZT4gbWFwSW50MzJGb3JlaWduTWVzc2FnZV8gPSBuZXcgcGJjOjpNYXBG
aWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbk1lc3Nh
Z2U+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25NZXNzYWdlPiBNYXBJbnQzMkZvcmVpZ25NZXNzYWdlIHsK
LSAgICAgIGdldCB7IHJldHVybiBtYXBJbnQzMkZvcmVpZ25NZXNzYWdlXzsgfQotICAgIH0KLQot
ICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJl
dHVybiBFcXVhbHMob3RoZXIgYXMgVGVzdEFyZW5hTWFwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
Ym9vbCBFcXVhbHMoVGVzdEFyZW5hTWFwIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1
YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAg
ICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIH0KLSAgICAgIGlmICghTWFwSW50MzJJbnQzMi5FcXVhbHMob3RoZXIuTWFwSW50
MzJJbnQzMikpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwSW50NjRJbnQ2NC5FcXVhbHMo
b3RoZXIuTWFwSW50NjRJbnQ2NCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwVWludDMy
VWludDMyLkVxdWFscyhvdGhlci5NYXBVaW50MzJVaW50MzIpKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICBpZiAoIU1hcFVpbnQ2NFVpbnQ2NC5FcXVhbHMob3RoZXIuTWFwVWludDY0VWludDY0KSkgcmV0
dXJuIGZhbHNlOwotICAgICAgaWYgKCFNYXBTaW50MzJTaW50MzIuRXF1YWxzKG90aGVyLk1hcFNp
bnQzMlNpbnQzMikpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghTWFwU2ludDY0U2ludDY0LkVx
dWFscyhvdGhlci5NYXBTaW50NjRTaW50NjQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIU1h
cEZpeGVkMzJGaXhlZDMyLkVxdWFscyhvdGhlci5NYXBGaXhlZDMyRml4ZWQzMikpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmICghTWFwRml4ZWQ2NEZpeGVkNjQuRXF1YWxzKG90aGVyLk1hcEZpeGVk
NjRGaXhlZDY0KSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFNYXBTZml4ZWQzMlNmaXhlZDMy
LkVxdWFscyhvdGhlci5NYXBTZml4ZWQzMlNmaXhlZDMyKSkgcmV0dXJuIGZhbHNlOwotICAgICAg
aWYgKCFNYXBTZml4ZWQ2NFNmaXhlZDY0LkVxdWFscyhvdGhlci5NYXBTZml4ZWQ2NFNmaXhlZDY0
KSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFNYXBJbnQzMkZsb2F0LkVxdWFscyhvdGhlci5N
YXBJbnQzMkZsb2F0KSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFNYXBJbnQzMkRvdWJsZS5F
cXVhbHMob3RoZXIuTWFwSW50MzJEb3VibGUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIU1h
cEJvb2xCb29sLkVxdWFscyhvdGhlci5NYXBCb29sQm9vbCkpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmICghTWFwSW50MzJFbnVtLkVxdWFscyhvdGhlci5NYXBJbnQzMkVudW0pKSByZXR1cm4gZmFs
c2U7Ci0gICAgICBpZiAoIU1hcEludDMyRm9yZWlnbk1lc3NhZ2UuRXF1YWxzKG90aGVyLk1hcElu
dDMyRm9yZWlnbk1lc3NhZ2UpKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50
IGhhc2ggPSAxOwotICAgICAgaGFzaCBePSBNYXBJbnQzMkludDMyLkdldEhhc2hDb2RlKCk7Ci0g
ICAgICBoYXNoIF49IE1hcEludDY0SW50NjQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0g
TWFwVWludDMyVWludDMyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IE1hcFVpbnQ2NFVp
bnQ2NC5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBTaW50MzJTaW50MzIuR2V0SGFz
aENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwU2ludDY0U2ludDY0LkdldEhhc2hDb2RlKCk7Ci0g
ICAgICBoYXNoIF49IE1hcEZpeGVkMzJGaXhlZDMyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNo
IF49IE1hcEZpeGVkNjRGaXhlZDY0LkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IE1hcFNm
aXhlZDMyU2ZpeGVkMzIuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gTWFwU2ZpeGVkNjRT
Zml4ZWQ2NC5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBJbnQzMkZsb2F0LkdldEhh
c2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IE1hcEludDMyRG91YmxlLkdldEhhc2hDb2RlKCk7Ci0g
ICAgICBoYXNoIF49IE1hcEJvb2xCb29sLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IE1h
cEludDMyRW51bS5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBNYXBJbnQzMkZvcmVpZ25N
ZXNzYWdlLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29u
Rm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIG1hcElu
dDMySW50MzJfLldyaXRlVG8ob3V0cHV0LCBfbWFwX21hcEludDMySW50MzJfY29kZWMpOwotICAg
ICAgbWFwSW50NjRJbnQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwSW50NjRJbnQ2NF9jb2Rl
Yyk7Ci0gICAgICBtYXBVaW50MzJVaW50MzJfLldyaXRlVG8ob3V0cHV0LCBfbWFwX21hcFVpbnQz
MlVpbnQzMl9jb2RlYyk7Ci0gICAgICBtYXBVaW50NjRVaW50NjRfLldyaXRlVG8ob3V0cHV0LCBf
bWFwX21hcFVpbnQ2NFVpbnQ2NF9jb2RlYyk7Ci0gICAgICBtYXBTaW50MzJTaW50MzJfLldyaXRl
VG8ob3V0cHV0LCBfbWFwX21hcFNpbnQzMlNpbnQzMl9jb2RlYyk7Ci0gICAgICBtYXBTaW50NjRT
aW50NjRfLldyaXRlVG8ob3V0cHV0LCBfbWFwX21hcFNpbnQ2NFNpbnQ2NF9jb2RlYyk7Ci0gICAg
ICBtYXBGaXhlZDMyRml4ZWQzMl8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwRml4ZWQzMkZpeGVk
MzJfY29kZWMpOwotICAgICAgbWFwRml4ZWQ2NEZpeGVkNjRfLldyaXRlVG8ob3V0cHV0LCBfbWFw
X21hcEZpeGVkNjRGaXhlZDY0X2NvZGVjKTsKLSAgICAgIG1hcFNmaXhlZDMyU2ZpeGVkMzJfLldy
aXRlVG8ob3V0cHV0LCBfbWFwX21hcFNmaXhlZDMyU2ZpeGVkMzJfY29kZWMpOwotICAgICAgbWFw
U2ZpeGVkNjRTZml4ZWQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwU2ZpeGVkNjRTZml4ZWQ2
NF9jb2RlYyk7Ci0gICAgICBtYXBJbnQzMkZsb2F0Xy5Xcml0ZVRvKG91dHB1dCwgX21hcF9tYXBJ
bnQzMkZsb2F0X2NvZGVjKTsKLSAgICAgIG1hcEludDMyRG91YmxlXy5Xcml0ZVRvKG91dHB1dCwg
X21hcF9tYXBJbnQzMkRvdWJsZV9jb2RlYyk7Ci0gICAgICBtYXBCb29sQm9vbF8uV3JpdGVUbyhv
dXRwdXQsIF9tYXBfbWFwQm9vbEJvb2xfY29kZWMpOwotICAgICAgbWFwSW50MzJFbnVtXy5Xcml0
ZVRvKG91dHB1dCwgX21hcF9tYXBJbnQzMkVudW1fY29kZWMpOwotICAgICAgbWFwSW50MzJGb3Jl
aWduTWVzc2FnZV8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfbWFwSW50MzJGb3JlaWduTWVzc2FnZV9j
b2RlYyk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAg
aW50IHNpemUgPSAwOwotICAgICAgc2l6ZSArPSBtYXBJbnQzMkludDMyXy5DYWxjdWxhdGVTaXpl
KF9tYXBfbWFwSW50MzJJbnQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcEludDY0SW50NjRf
LkNhbGN1bGF0ZVNpemUoX21hcF9tYXBJbnQ2NEludDY0X2NvZGVjKTsKLSAgICAgIHNpemUgKz0g
bWFwVWludDMyVWludDMyXy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwVWludDMyVWludDMyX2NvZGVj
KTsKLSAgICAgIHNpemUgKz0gbWFwVWludDY0VWludDY0Xy5DYWxjdWxhdGVTaXplKF9tYXBfbWFw
VWludDY0VWludDY0X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFwU2ludDMyU2ludDMyXy5DYWxj
dWxhdGVTaXplKF9tYXBfbWFwU2ludDMyU2ludDMyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFw
U2ludDY0U2ludDY0Xy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwU2ludDY0U2ludDY0X2NvZGVjKTsK
LSAgICAgIHNpemUgKz0gbWFwRml4ZWQzMkZpeGVkMzJfLkNhbGN1bGF0ZVNpemUoX21hcF9tYXBG
aXhlZDMyRml4ZWQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcEZpeGVkNjRGaXhlZDY0Xy5D
YWxjdWxhdGVTaXplKF9tYXBfbWFwRml4ZWQ2NEZpeGVkNjRfY29kZWMpOwotICAgICAgc2l6ZSAr
PSBtYXBTZml4ZWQzMlNmaXhlZDMyXy5DYWxjdWxhdGVTaXplKF9tYXBfbWFwU2ZpeGVkMzJTZml4
ZWQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcFNmaXhlZDY0U2ZpeGVkNjRfLkNhbGN1bGF0
ZVNpemUoX21hcF9tYXBTZml4ZWQ2NFNmaXhlZDY0X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFw
SW50MzJGbG9hdF8uQ2FsY3VsYXRlU2l6ZShfbWFwX21hcEludDMyRmxvYXRfY29kZWMpOwotICAg
ICAgc2l6ZSArPSBtYXBJbnQzMkRvdWJsZV8uQ2FsY3VsYXRlU2l6ZShfbWFwX21hcEludDMyRG91
YmxlX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbWFwQm9vbEJvb2xfLkNhbGN1bGF0ZVNpemUoX21h
cF9tYXBCb29sQm9vbF9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcEludDMyRW51bV8uQ2FsY3Vs
YXRlU2l6ZShfbWFwX21hcEludDMyRW51bV9jb2RlYyk7Ci0gICAgICBzaXplICs9IG1hcEludDMy
Rm9yZWlnbk1lc3NhZ2VfLkNhbGN1bGF0ZVNpemUoX21hcF9tYXBJbnQzMkZvcmVpZ25NZXNzYWdl
X2NvZGVjKTsKLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1l
cmdlRnJvbShUZXN0QXJlbmFNYXAgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIG1hcEludDMySW50MzJfLkFkZChvdGhl
ci5tYXBJbnQzMkludDMyXyk7Ci0gICAgICBtYXBJbnQ2NEludDY0Xy5BZGQob3RoZXIubWFwSW50
NjRJbnQ2NF8pOwotICAgICAgbWFwVWludDMyVWludDMyXy5BZGQob3RoZXIubWFwVWludDMyVWlu
dDMyXyk7Ci0gICAgICBtYXBVaW50NjRVaW50NjRfLkFkZChvdGhlci5tYXBVaW50NjRVaW50NjRf
KTsKLSAgICAgIG1hcFNpbnQzMlNpbnQzMl8uQWRkKG90aGVyLm1hcFNpbnQzMlNpbnQzMl8pOwot
ICAgICAgbWFwU2ludDY0U2ludDY0Xy5BZGQob3RoZXIubWFwU2ludDY0U2ludDY0Xyk7Ci0gICAg
ICBtYXBGaXhlZDMyRml4ZWQzMl8uQWRkKG90aGVyLm1hcEZpeGVkMzJGaXhlZDMyXyk7Ci0gICAg
ICBtYXBGaXhlZDY0Rml4ZWQ2NF8uQWRkKG90aGVyLm1hcEZpeGVkNjRGaXhlZDY0Xyk7Ci0gICAg
ICBtYXBTZml4ZWQzMlNmaXhlZDMyXy5BZGQob3RoZXIubWFwU2ZpeGVkMzJTZml4ZWQzMl8pOwot
ICAgICAgbWFwU2ZpeGVkNjRTZml4ZWQ2NF8uQWRkKG90aGVyLm1hcFNmaXhlZDY0U2ZpeGVkNjRf
KTsKLSAgICAgIG1hcEludDMyRmxvYXRfLkFkZChvdGhlci5tYXBJbnQzMkZsb2F0Xyk7Ci0gICAg
ICBtYXBJbnQzMkRvdWJsZV8uQWRkKG90aGVyLm1hcEludDMyRG91YmxlXyk7Ci0gICAgICBtYXBC
b29sQm9vbF8uQWRkKG90aGVyLm1hcEJvb2xCb29sXyk7Ci0gICAgICBtYXBJbnQzMkVudW1fLkFk
ZChvdGhlci5tYXBJbnQzMkVudW1fKTsKLSAgICAgIG1hcEludDMyRm9yZWlnbk1lc3NhZ2VfLkFk
ZChvdGhlci5tYXBJbnQzMkZvcmVpZ25NZXNzYWdlXyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRh
ZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAg
IHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tp
cExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewot
ICAgICAgICAgICAgbWFwSW50MzJJbnQzMl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9tYXBfbWFw
SW50MzJJbnQzMl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSAxODogewotICAgICAgICAgICAgbWFwSW50NjRJbnQ2NF8uQWRkRW50cmllc0Zy
b20oaW5wdXQsIF9tYXBfbWFwSW50NjRJbnQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNjogewotICAgICAgICAgICAgbWFwVWludDMy
VWludDMyXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBVaW50MzJVaW50MzJfY29kZWMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMzQ6IHsK
LSAgICAgICAgICAgIG1hcFVpbnQ2NFVpbnQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9tYXBf
bWFwVWludDY0VWludDY0X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDQyOiB7Ci0gICAgICAgICAgICBtYXBTaW50MzJTaW50MzJfLkFkZEVu
dHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcFNpbnQzMlNpbnQzMl9jb2RlYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA1MDogewotICAgICAgICAgICAg
bWFwU2ludDY0U2ludDY0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBTaW50NjRTaW50
NjRfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh
c2UgNTg6IHsKLSAgICAgICAgICAgIG1hcEZpeGVkMzJGaXhlZDMyXy5BZGRFbnRyaWVzRnJvbShp
bnB1dCwgX21hcF9tYXBGaXhlZDMyRml4ZWQzMl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA2NjogewotICAgICAgICAgICAgbWFwRml4ZWQ2
NEZpeGVkNjRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcEZpeGVkNjRGaXhlZDY0X2Nv
ZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc0
OiB7Ci0gICAgICAgICAgICBtYXBTZml4ZWQzMlNmaXhlZDMyXy5BZGRFbnRyaWVzRnJvbShpbnB1
dCwgX21hcF9tYXBTZml4ZWQzMlNmaXhlZDMyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDgyOiB7Ci0gICAgICAgICAgICBtYXBTZml4ZWQ2
NFNmaXhlZDY0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9tYXBTZml4ZWQ2NFNmaXhlZDY0
X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl
IDkwOiB7Ci0gICAgICAgICAgICBtYXBJbnQzMkZsb2F0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwg
X21hcF9tYXBJbnQzMkZsb2F0X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgICBjYXNlIDk4OiB7Ci0gICAgICAgICAgICBtYXBJbnQzMkRvdWJsZV8uQWRk
RW50cmllc0Zyb20oaW5wdXQsIF9tYXBfbWFwSW50MzJEb3VibGVfY29kZWMpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTA2OiB7Ci0gICAgICAgICAg
ICBtYXBCb29sQm9vbF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9tYXBfbWFwQm9vbEJvb2xfY29k
ZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTE0
OiB7Ci0gICAgICAgICAgICBtYXBJbnQzMkVudW1fLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFw
X21hcEludDMyRW51bV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSAxMjI6IHsKLSAgICAgICAgICAgIG1hcEludDMyRm9yZWlnbk1lc3NhZ2Vf
LkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX21hcEludDMyRm9yZWlnbk1lc3NhZ2VfY29kZWMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfQotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgUHJldmlvdXNseSwgbWVzc2Fn
ZSBjb250YWluaW5nIGVudW0gY2FsbGVkIFR5cGUgY2Fubm90IGJlIHVzZWQgYXMgdmFsdWUgb2YK
LSAgLy8vICBtYXAgZmllbGQuCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5E
aWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFs
ZWQgcGFydGlhbCBjbGFzcyBNZXNzYWdlQ29udGFpbmluZ0VudW1DYWxsZWRUeXBlIDogcGI6OklN
ZXNzYWdlPE1lc3NhZ2VDb250YWluaW5nRW51bUNhbGxlZFR5cGU+IHsKLSAgICBwcml2YXRlIHN0
YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxNZXNzYWdlQ29udGFpbmluZ0VudW1DYWxs
ZWRUeXBlPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPE1lc3NhZ2VDb250YWluaW5n
RW51bUNhbGxlZFR5cGU+KCgpID0+IG5ldyBNZXNzYWdlQ29udGFpbmluZ0VudW1DYWxsZWRUeXBl
KCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8TWVzc2FnZUNvbnRhaW5p
bmdFbnVtQ2FsbGVkVHlwZT4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0g
ICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAg
ICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuTWFwVW5p
dHRlc3RQcm90bzNSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzVdOyB9Ci0gICAg
fQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7
Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBN
ZXNzYWdlQ29udGFpbmluZ0VudW1DYWxsZWRUeXBlKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24o
KTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1
YmxpYyBNZXNzYWdlQ29udGFpbmluZ0VudW1DYWxsZWRUeXBlKE1lc3NhZ2VDb250YWluaW5nRW51
bUNhbGxlZFR5cGUgb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIHR5cGVfID0gb3RoZXIudHlwZV8u
Q2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWVzc2FnZUNvbnRhaW5pbmdFbnVtQ2FsbGVk
VHlwZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgTWVzc2FnZUNvbnRhaW5pbmdFbnVtQ2Fs
bGVkVHlwZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgInR5cGUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFR5cGVG
aWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVs
ZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuTWVzc2FnZUNvbnRhaW5p
bmdFbnVtQ2FsbGVkVHlwZT4uQ29kZWMgX21hcF90eXBlX2NvZGVjCi0gICAgICAgID0gbmV3IHBi
Yzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk1lc3Nh
Z2VDb250YWluaW5nRW51bUNhbGxlZFR5cGU+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvckludDMy
KDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDE4LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5UZXN0UHJvdG9zLk1lc3NhZ2VDb250YWluaW5nRW51bUNhbGxlZFR5cGUuUGFyc2VyKSwgMTAp
OwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuTWVzc2FnZUNvbnRhaW5pbmdFbnVtQ2FsbGVkVHlwZT4gdHlw
ZV8gPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQ
cm90b3MuTWVzc2FnZUNvbnRhaW5pbmdFbnVtQ2FsbGVkVHlwZT4oKTsKLSAgICBwdWJsaWMgcGJj
OjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuTWVzc2Fn
ZUNvbnRhaW5pbmdFbnVtQ2FsbGVkVHlwZT4gVHlwZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gdHlw
ZV87IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90
aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIE1lc3NhZ2VDb250YWluaW5nRW51
bUNhbGxlZFR5cGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhNZXNzYWdlQ29u
dGFpbmluZ0VudW1DYWxsZWRUeXBlIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxz
KG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBp
ZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIH0KLSAgICAgIGlmICghVHlwZS5FcXVhbHMob3RoZXIuVHlwZSkpIHJldHVybiBmYWxz
ZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQg
R2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBoYXNoIF49IFR5cGUu
R2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBv
dmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0
ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdy
aXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgdHlwZV8uV3JpdGVU
byhvdXRwdXQsIF9tYXBfdHlwZV9jb2RlYyk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxj
dWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgc2l6ZSArPSB0eXBlXy5D
YWxjdWxhdGVTaXplKF9tYXBfdHlwZV9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oTWVzc2FnZUNvbnRhaW5pbmdFbnVtQ2FsbGVk
VHlwZSBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgfQotICAgICAgdHlwZV8uQWRkKG90aGVyLnR5cGVfKTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAg
IHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsK
LSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBp
bnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IDEwOiB7Ci0gICAgICAgICAgICB0eXBlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF90eXBl
X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLQotICAgICNyZWdpb24gTmVzdGVkIHR5cGVzCi0gICAgLy8vIDxzdW1tYXJ5
PkNvbnRhaW5lciBmb3IgbmVzdGVkIHR5cGVzIGRlY2xhcmVkIGluIHRoZSBNZXNzYWdlQ29udGFp
bmluZ0VudW1DYWxsZWRUeXBlIG1lc3NhZ2UgdHlwZS48L3N1bW1hcnk+Ci0gICAgW2dsb2JhbDo6
U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgICBw
dWJsaWMgc3RhdGljIHBhcnRpYWwgY2xhc3MgVHlwZXMgewotICAgICAgcHVibGljIGVudW0gVHlw
ZSB7Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiVFlQRV9GT08iKV0gRm9vID0gMCwKLSAg
ICAgIH0KLQotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4K
LSAgLy8vICBQcmV2aW91c2x5LCBtZXNzYWdlIGNhbm5vdCBjb250YWluIG1hcCBmaWVsZCBjYWxs
ZWQgImVudHJ5Ii4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0
aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0
aWFsIGNsYXNzIE1lc3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkgOiBwYjo6SU1lc3NhZ2U8
TWVzc2FnZUNvbnRhaW5pbmdNYXBDYWxsZWRFbnRyeT4gewotICAgIHByaXZhdGUgc3RhdGljIHJl
YWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPE1lc3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnk+
IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8TWVzc2FnZUNvbnRhaW5pbmdNYXBDYWxs
ZWRFbnRyeT4oKCkgPT4gbmV3IE1lc3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkoKSk7Ci0g
ICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxNZXNzYWdlQ29udGFpbmluZ01hcENh
bGxlZEVudHJ5PiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJs
aWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQg
eyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5NYXBVbml0dGVzdFBy
b3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbNl07IH0KLSAgICB9Ci0KLSAg
ICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAg
IGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIE1lc3NhZ2VD
b250YWluaW5nTWFwQ2FsbGVkRW50cnkoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAg
IH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIE1l
c3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkoTWVzc2FnZUNvbnRhaW5pbmdNYXBDYWxsZWRF
bnRyeSBvdGhlcikgOiB0aGlzKCkgewotICAgICAgZW50cnlfID0gb3RoZXIuZW50cnlfLkNsb25l
KCk7Ci0gICAgfQotCi0gICAgcHVibGljIE1lc3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkg
Q2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IE1lc3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50
cnkodGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJlbnRyeSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRW50cnlGaWVs
ZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxp
bnQsIGludD4uQ29kZWMgX21hcF9lbnRyeV9jb2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZp
ZWxkPGludCwgaW50Pi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxk
Q29kZWMuRm9ySW50MzIoMTYpLCAxMCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZp
ZWxkPGludCwgaW50PiBlbnRyeV8gPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4oKTsKLSAg
ICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxpbnQsIGludD4gRW50cnkgewotICAgICAgZ2V0IHsgcmV0
dXJuIGVudHJ5XzsgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhv
YmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgTWVzc2FnZUNvbnRh
aW5pbmdNYXBDYWxsZWRFbnRyeSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKE1l
c3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVu
Y2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0K
LSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgfQotICAgICAgaWYgKCFFbnRyeS5FcXVhbHMob3RoZXIuRW50cnkpKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3Zl
cnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaGFz
aCBePSBFbnRyeS5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0g
ICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6
SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVi
bGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBl
bnRyeV8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfZW50cnlfY29kZWMpOwotICAgIH0KLQotICAgIHB1
YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIHNp
emUgKz0gZW50cnlfLkNhbGN1bGF0ZVNpemUoX21hcF9lbnRyeV9jb2RlYyk7Ci0gICAgICByZXR1
cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oTWVzc2FnZUNvbnRh
aW5pbmdNYXBDYWxsZWRFbnRyeSBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgZW50cnlfLkFkZChvdGhlci5lbnRyeV8p
OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVh
bSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJl
YWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIGVudHJ5Xy5BZGRFbnRyaWVzRnJv
bShpbnB1dCwgX21hcF9lbnRyeV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gICNlbmRyZWdpb24KLQot
fQotCi0jZW5kcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFy
cC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvVGVzdFByb3Rvcy9Vbml0dGVzdEltcG9ydFByb3Rv
My5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9UZXN0UHJvdG9zL1VuaXR0ZXN0
SW1wb3J0UHJvdG8zLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjNlMTdjMDIx
NGM1ZWRiNjBlMTM4NmFlZTgyZGE1ZmUyOGRlNDI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9UZXN0
UHJvdG9zL1VuaXR0ZXN0SW1wb3J0UHJvdG8zLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICsw
LDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8g
Tk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnRfcHJv
dG8zLnByb3RvCi0jcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSAxNTkxLCAwNjEyLCAzMDIxCi0jcmVn
aW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCi0KLXVzaW5nIHBiID0gZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWY7Ci11c2luZyBwYmMgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5Db2xsZWN0aW9u
czsKLXVzaW5nIHBiciA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb247Ci11c2lu
ZyBzY2cgPSBnbG9iYWw6OlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotbmFtZXNwYWNlIEdv
b2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zIHsKLQotICAvLy8gPHN1bW1hcnk+SG9sZGVyIGZvciBy
ZWZsZWN0aW9uIGluZm9ybWF0aW9uIGdlbmVyYXRlZCBmcm9tIGdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdF9pbXBvcnRfcHJvdG8zLnByb3RvPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlh
Z25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc3RhdGlj
IHBhcnRpYWwgY2xhc3MgVW5pdHRlc3RJbXBvcnRQcm90bzNSZWZsZWN0aW9uIHsKLQotICAgICNy
ZWdpb24gRGVzY3JpcHRvcgotICAgIC8vLyA8c3VtbWFyeT5GaWxlIGRlc2NyaXB0b3IgZm9yIGdv
b2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnRfcHJvdG8zLnByb3RvPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBzdGF0aWMgcGJyOjpGaWxlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdl
dCB7IHJldHVybiBkZXNjcmlwdG9yOyB9Ci0gICAgfQotICAgIHByaXZhdGUgc3RhdGljIHBicjo6
RmlsZURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLQotICAgIHN0YXRpYyBVbml0dGVzdEltcG9ydFBy
b3RvM1JlZmxlY3Rpb24oKSB7Ci0gICAgICBieXRlW10gZGVzY3JpcHRvckRhdGEgPSBnbG9iYWw6
OlN5c3RlbS5Db252ZXJ0LkZyb21CYXNlNjRTdHJpbmcoCi0gICAgICAgICAgc3RyaW5nLkNvbmNh
dCgKLSAgICAgICAgICAgICJDaXhuYjI5bmJHVXZjSEp2ZEc5aWRXWXZkVzVwZEhSbGMzUmZhVzF3
YjNKMFgzQnliM1J2TXk1d2NtOTAiLAotICAgICAgICAgICAgImJ4SVljSEp2ZEc5aWRXWmZkVzVw
ZEhSbGMzUmZhVzF3YjNKMEdqTm5iMjluYkdVdmNISnZkRzlpZFdZdiIsCi0gICAgICAgICAgICAi
ZFc1cGRIUmxjM1JmYVcxd2IzSjBYM0IxWW14cFkxOXdjbTkwYnpNdWNISnZkRzhpR2dvTlNXMXdi
M0owIiwKLSAgICAgICAgICAgICJUV1Z6YzJGblpSSUpDZ0ZrR0FFZ0FTZ0ZLbGtLQ2tsdGNHOXlk
RVZ1ZFcwU0d3b1hTVTFRVDFKVVgwVk8iLAotICAgICAgICAgICAgIlZVMWZWVTVUVUVWRFNVWkpS
VVFRQUJJT0NncEpUVkJQVWxSZlJrOVBFQWNTRGdvS1NVMVFUMUpVWDBKQiIsCi0gICAgICAgICAg
ICAiVWhBSUVnNEtDa2xOVUU5U1ZGOUNRVm9RQ1VJOENoaGpiMjB1WjI5dloyeGxMbkJ5YjNSdllu
Vm1MblJsIiwKLSAgICAgICAgICAgICJjM1JJQWZnQkFhb0NHa2R2YjJkc1pTNVFjbTkwYjJKMVpp
NVVaWE4wVUhKdmRHOXpVQUJpQm5CeWIzUnYiLAotICAgICAgICAgICAgIk13PT0iKSk7Ci0gICAg
ICBkZXNjcmlwdG9yID0gcGJyOjpGaWxlRGVzY3JpcHRvci5Gcm9tR2VuZXJhdGVkQ29kZShkZXNj
cmlwdG9yRGF0YSwKLSAgICAgICAgICBuZXcgcGJyOjpGaWxlRGVzY3JpcHRvcltdIHsgZ2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVzdEltcG9ydFB1YmxpY1Byb3RvM1Jl
ZmxlY3Rpb24uRGVzY3JpcHRvciwgfSwKLSAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJU
eXBlSW5mbyhuZXdbXSB7dHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3Mu
SW1wb3J0RW51bSksIH0sIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvW10gewotICAgICAg
ICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuSW1wb3J0TWVzc2FnZSksIGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlRlc3RQcm90b3MuSW1wb3J0TWVzc2FnZS5QYXJzZXIsIG5ld1tdeyAiRCIgfSwgbnVsbCwg
bnVsbCwgbnVsbCkKLSAgICAgICAgICB9KSk7Ci0gICAgfQotICAgICNlbmRyZWdpb24KLQotICB9
Ci0gICNyZWdpb24gRW51bXMKLSAgcHVibGljIGVudW0gSW1wb3J0RW51bSB7Ci0gICAgW3Bicjo6
T3JpZ2luYWxOYW1lKCJJTVBPUlRfRU5VTV9VTlNQRUNJRklFRCIpXSBVbnNwZWNpZmllZCA9IDAs
Ci0gICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJJTVBPUlRfRk9PIildIEltcG9ydEZvbyA9IDcsCi0g
ICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJJTVBPUlRfQkFSIildIEltcG9ydEJhciA9IDgsCi0gICAg
W3Bicjo6T3JpZ2luYWxOYW1lKCJJTVBPUlRfQkFaIildIEltcG9ydEJheiA9IDksCi0gIH0KLQot
ICAjZW5kcmVnaW9uCi0KLSAgI3JlZ2lvbiBNZXNzYWdlcwotICBbZ2xvYmFsOjpTeXN0ZW0uRGlh
Z25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVk
IHBhcnRpYWwgY2xhc3MgSW1wb3J0TWVzc2FnZSA6IHBiOjpJTWVzc2FnZTxJbXBvcnRNZXNzYWdl
PiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8SW1wb3J0
TWVzc2FnZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxJbXBvcnRNZXNzYWdlPigo
KSA9PiBuZXcgSW1wb3J0TWVzc2FnZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdl
UGFyc2VyPEltcG9ydE1lc3NhZ2U+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0K
LQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVu
aXR0ZXN0SW1wb3J0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1swXTsg
fQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2Ny
aXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgSW1wb3J0TWVzc2FnZSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQot
Ci0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgSW1wb3J0
TWVzc2FnZShJbXBvcnRNZXNzYWdlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBkXyA9IG90aGVy
LmRfOwotICAgIH0KLQotICAgIHB1YmxpYyBJbXBvcnRNZXNzYWdlIENsb25lKCkgewotICAgICAg
cmV0dXJuIG5ldyBJbXBvcnRNZXNzYWdlKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgREZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGludCBkXzsKLSAgICBwdWJs
aWMgaW50IEQgewotICAgICAgZ2V0IHsgcmV0dXJuIGRfOyB9Ci0gICAgICBzZXQgewotICAgICAg
ICBkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29s
IEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgSW1w
b3J0TWVzc2FnZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKEltcG9ydE1lc3Nh
Z2Ugb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMo
b3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYg
KEQgIT0gb3RoZXIuRCkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNo
ID0gMTsKLSAgICAgIGlmIChEICE9IDApIGhhc2ggXj0gRC5HZXRIYXNoQ29kZSgpOwotICAgICAg
cmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmlu
ZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmco
dGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRT
dHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoRCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZVJhd1RhZyg4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoRCk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAw
OwotICAgICAgaWYgKEQgIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRw
dXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShEKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXpl
OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShJbXBvcnRNZXNzYWdlIG90aGVy
KSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgICBpZiAob3RoZXIuRCAhPSAwKSB7Ci0gICAgICAgIEQgPSBvdGhlci5EOwotICAgICAg
fQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVh
bSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJl
YWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgODogewotICAgICAgICAgICAgRCA9IGlucHV0LlJlYWRJbnQzMigp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfQotCi0gIH0KLQotICAjZW5kcmVnaW9uCi0KLX0KLQotI2VuZHJlZ2lvbiBEZXNpZ25lciBn
ZW5lcmF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0
L1Rlc3RQcm90b3MvVW5pdHRlc3RJbXBvcnRQdWJsaWNQcm90bzMuY3MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmLlRlc3QvVGVzdFByb3Rvcy9Vbml0dGVzdEltcG9ydFB1YmxpY1Byb3RvMy5j
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ3MWE4Y2YxYWE3NjEzNmE4ZGJjZjc5
NDk2MjAyNDgwN2M5YjhkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvVGVzdFByb3Rvcy9Vbml0dGVz
dEltcG9ydFB1YmxpY1Byb3RvMy5jcworKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0v
LyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElU
IQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpY19wcm90
bzMucHJvdG8KLSNwcmFnbWEgd2FybmluZyBkaXNhYmxlIDE1OTEsIDA2MTIsIDMwMjEKLSNyZWdp
b24gRGVzaWduZXIgZ2VuZXJhdGVkIGNvZGUKLQotdXNpbmcgcGIgPSBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1ZjsKLXVzaW5nIHBiYyA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLkNvbGxlY3Rpb25z
OwotdXNpbmcgcGJyID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbjsKLXVzaW5n
IHNjZyA9IGdsb2JhbDo6U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci1uYW1lc3BhY2UgR29v
Z2xlLlByb3RvYnVmLlRlc3RQcm90b3MgewotCi0gIC8vLyA8c3VtbWFyeT5Ib2xkZXIgZm9yIHJl
ZmxlY3Rpb24gaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGZyb20gZ29vZ2xlL3Byb3RvYnVmL3VuaXR0
ZXN0X2ltcG9ydF9wdWJsaWNfcHJvdG8zLnByb3RvPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0
ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMg
c3RhdGljIHBhcnRpYWwgY2xhc3MgVW5pdHRlc3RJbXBvcnRQdWJsaWNQcm90bzNSZWZsZWN0aW9u
IHsKLQotICAgICNyZWdpb24gRGVzY3JpcHRvcgotICAgIC8vLyA8c3VtbWFyeT5GaWxlIGRlc2Ny
aXB0b3IgZm9yIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnRfcHVibGljX3Byb3RvMy5w
cm90bzwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6RmlsZURlc2NyaXB0b3IgRGVz
Y3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZGVzY3JpcHRvcjsgfQotICAgIH0KLSAgICBw
cml2YXRlIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0KLSAgICBzdGF0
aWMgVW5pdHRlc3RJbXBvcnRQdWJsaWNQcm90bzNSZWZsZWN0aW9uKCkgewotICAgICAgYnl0ZVtd
IGRlc2NyaXB0b3JEYXRhID0gZ2xvYmFsOjpTeXN0ZW0uQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5n
KAotICAgICAgICAgIHN0cmluZy5Db25jYXQoCi0gICAgICAgICAgICAiQ2pObmIyOW5iR1V2Y0hK
dmRHOWlkV1l2ZFc1cGRIUmxjM1JmYVcxd2IzSjBYM0IxWW14cFkxOXdjbTkwIiwKLSAgICAgICAg
ICAgICJiek11Y0hKdmRHOFNHSEJ5YjNSdlluVm1YM1Z1YVhSMFpYTjBYMmx0Y0c5eWRDSWdDaE5R
ZFdKc2FXTkoiLAotICAgICAgICAgICAgImJYQnZjblJOWlhOellXZGxFZ2tLQVdVWUFTQUJLQVZD
TndvWVkyOXRMbWR2YjJkc1pTNXdjbTkwYjJKMSIsCi0gICAgICAgICAgICAiWmk1MFpYTjBxZ0lh
UjI5dloyeGxMbEJ5YjNSdlluVm1MbFJsYzNSUWNtOTBiM05pQm5CeWIzUnZNdz09IikpOwotICAg
ICAgZGVzY3JpcHRvciA9IHBicjo6RmlsZURlc2NyaXB0b3IuRnJvbUdlbmVyYXRlZENvZGUoZGVz
Y3JpcHRvckRhdGEsCi0gICAgICAgICAgbmV3IHBicjo6RmlsZURlc2NyaXB0b3JbXSB7IH0sCi0g
ICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8obnVsbCwgbmV3IHBicjo6R2Vu
ZXJhdGVkQ2xyVHlwZUluZm9bXSB7Ci0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJU
eXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5QdWJsaWNJ
bXBvcnRNZXNzYWdlKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5QdWJsaWNJ
bXBvcnRNZXNzYWdlLlBhcnNlciwgbmV3W117ICJFIiB9LCBudWxsLCBudWxsLCBudWxsKQotICAg
ICAgICAgIH0pKTsKLSAgICB9Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLSAgI3JlZ2lvbiBNZXNz
YWdlcwotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0
dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgUHVibGljSW1wb3J0TWVz
c2FnZSA6IHBiOjpJTWVzc2FnZTxQdWJsaWNJbXBvcnRNZXNzYWdlPiB7Ci0gICAgcHJpdmF0ZSBz
dGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8UHVibGljSW1wb3J0TWVzc2FnZT4gX3Bh
cnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxQdWJsaWNJbXBvcnRNZXNzYWdlPigoKSA9PiBu
ZXcgUHVibGljSW1wb3J0TWVzc2FnZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdl
UGFyc2VyPFB1YmxpY0ltcG9ydE1lc3NhZ2U+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2Vy
OyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlw
dG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zLlVuaXR0ZXN0SW1wb3J0UHVibGljUHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3Nh
Z2VUeXBlc1swXTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklN
ZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAg
ICB9Ci0KLSAgICBwdWJsaWMgUHVibGljSW1wb3J0TWVzc2FnZSgpIHsKLSAgICAgIE9uQ29uc3Ry
dWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0K
LSAgICBwdWJsaWMgUHVibGljSW1wb3J0TWVzc2FnZShQdWJsaWNJbXBvcnRNZXNzYWdlIG90aGVy
KSA6IHRoaXMoKSB7Ci0gICAgICBlXyA9IG90aGVyLmVfOwotICAgIH0KLQotICAgIHB1YmxpYyBQ
dWJsaWNJbXBvcnRNZXNzYWdlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBQdWJsaWNJbXBv
cnRNZXNzYWdlKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAiZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRUZpZWxk
TnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGludCBlXzsKLSAgICBwdWJsaWMgaW50IEUgewotICAg
ICAgZ2V0IHsgcmV0dXJuIGVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBlXyA9IHZhbHVlOwot
ICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qg
b3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgUHVibGljSW1wb3J0TWVzc2Fn
ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKFB1YmxpY0ltcG9ydE1lc3NhZ2Ug
b3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3Ro
ZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKEUg
IT0gb3RoZXIuRSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0g
MTsKLSAgICAgIGlmIChFICE9IDApIGhhc2ggXj0gRS5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0
dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygp
IHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhp
cyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJl
YW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoRSAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJh
d1RhZyg4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoRSk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwot
ICAgICAgaWYgKEUgIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRT
dHJlYW0uQ29tcHV0ZUludDMyU2l6ZShFKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwot
ICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShQdWJsaWNJbXBvcnRNZXNzYWdlIG90
aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0gICAgICBpZiAob3RoZXIuRSAhPSAwKSB7Ci0gICAgICAgIEUgPSBvdGhlci5FOwotICAg
ICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0
cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0
LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgODogewotICAgICAgICAgICAgRSA9IGlucHV0LlJlYWRJbnQz
MigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotCi0gIH0KLQotICAjZW5kcmVnaW9uCi0KLX0KLQotI2VuZHJlZ2lvbiBEZXNpZ25l
ciBnZW5lcmF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5U
ZXN0L1Rlc3RQcm90b3MvVW5pdHRlc3RJc3N1ZXMuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmLlRlc3QvVGVzdFByb3Rvcy9Vbml0dGVzdElzc3Vlcy5jcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2Q0NDUxYjA5MzFmMmVmZDVhMzY5MGQwYzg0NjUwOTIyMTQ5ZTdlZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmLlRlc3QvVGVzdFByb3Rvcy9Vbml0dGVzdElzc3Vlcy5jcworKysgL2Rldi9u
dWxsCkBAIC0xLDE1NjkgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZm
ZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTogdW5pdHRlc3RfaXNzdWVzLnBy
b3RvCi0jcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSAxNTkxLCAwNjEyLCAzMDIxCi0jcmVnaW9uIERl
c2lnbmVyIGdlbmVyYXRlZCBjb2RlCi0KLXVzaW5nIHBiID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWY7Ci11c2luZyBwYmMgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5Db2xsZWN0aW9uczsKLXVz
aW5nIHBiciA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb247Ci11c2luZyBzY2cg
PSBnbG9iYWw6OlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotbmFtZXNwYWNlIFVuaXRUZXN0
Lklzc3Vlcy5UZXN0UHJvdG9zIHsKLQotICAvLy8gPHN1bW1hcnk+SG9sZGVyIGZvciByZWZsZWN0
aW9uIGluZm9ybWF0aW9uIGdlbmVyYXRlZCBmcm9tIHVuaXR0ZXN0X2lzc3Vlcy5wcm90bzwvc3Vt
bWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVB
dHRyaWJ1dGUoKV0KLSAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIGNsYXNzIFVuaXR0ZXN0SXNzdWVz
UmVmbGVjdGlvbiB7Ci0KLSAgICAjcmVnaW9uIERlc2NyaXB0b3IKLSAgICAvLy8gPHN1bW1hcnk+
RmlsZSBkZXNjcmlwdG9yIGZvciB1bml0dGVzdF9pc3N1ZXMucHJvdG88L3N1bW1hcnk+Ci0gICAg
cHVibGljIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0
IHsgcmV0dXJuIGRlc2NyaXB0b3I7IH0KLSAgICB9Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcGJyOjpG
aWxlRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAgc3RhdGljIFVuaXR0ZXN0SXNzdWVzUmVm
bGVjdGlvbigpIHsKLSAgICAgIGJ5dGVbXSBkZXNjcmlwdG9yRGF0YSA9IGdsb2JhbDo6U3lzdGVt
LkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZygKLSAgICAgICAgICBzdHJpbmcuQ29uY2F0KAotICAg
ICAgICAgICAgIkNoVjFibWwwZEdWemRGOXBjM04xWlhNdWNISnZkRzhTRDNWdWFYUjBaWE4wWDJs
emMzVmxjeUluQ2doSiIsCi0gICAgICAgICAgICAiYzNOMVpUTXdOeG9iQ2dwT1pYTjBaV1JQYm1O
bEdnMEtDMDVsYzNSbFpGUjNhV05sSXJBQkNoTk9aV2RoIiwKLSAgICAgICAgICAgICJkR2wyWlVW
dWRXMU5aWE56WVdkbEVpd0tCWFpoYkhWbEdBRWdBU2dPTWgwdWRXNXBkSFJsYzNSZmFYTnoiLAot
ICAgICAgICAgICAgImRXVnpMazVsWjJGMGFYWmxSVzUxYlJJeENnWjJZV3gxWlhNWUFpQURLQTR5
SFM1MWJtbDBkR1Z6ZEY5cCIsCi0gICAgICAgICAgICAiYzNOMVpYTXVUbVZuWVhScGRtVkZiblZ0
UWdJUUFCSTRDZzF3WVdOclpXUmZkbUZzZFdWekdBTWdBeWdPIiwKLSAgICAgICAgICAgICJNaDB1
ZFc1cGRIUmxjM1JmYVhOemRXVnpMazVsWjJGMGFYWmxSVzUxYlVJQ0VBRWlFUW9QUkdWd2NtVmoi
LAotICAgICAgICAgICAgIllYUmxaRU5vYVd4a0lya0NDaGRFWlhCeVpXTmhkR1ZrUm1sbGJHUnpU
V1Z6YzJGblpSSWFDZzVRY21sdCIsCi0gICAgICAgICAgICAiYVhScGRtVldZV3gxWlJnQklBRW9C
VUlDR0FFU0dnb09VSEpwYldsMGFYWmxRWEp5WVhrWUFpQURLQVZDIiwKLSAgICAgICAgICAgICJB
aGdCRWpvS0RFMWxjM05oWjJWV1lXeDFaUmdESUFFb0N6SWdMblZ1YVhSMFpYTjBYMmx6YzNWbGN5
NUUiLAotICAgICAgICAgICAgIlpYQnlaV05oZEdWa1EyaHBiR1JDQWhnQkVqb0tERTFsYzNOaFoy
VkJjbkpoZVJnRUlBTW9DeklnTG5WdSIsCi0gICAgICAgICAgICAiYVhSMFpYTjBYMmx6YzNWbGN5
NUVaWEJ5WldOaGRHVmtRMmhwYkdSQ0FoZ0JFallLQ1VWdWRXMVdZV3gxIiwKLSAgICAgICAgICAg
ICJaUmdGSUFFb0RqSWZMblZ1YVhSMFpYTjBYMmx6YzNWbGN5NUVaWEJ5WldOaGRHVmtSVzUxYlVJ
Q0dBRVMiLAotICAgICAgICAgICAgIk5nb0pSVzUxYlVGeWNtRjVHQVlnQXlnT01oOHVkVzVwZEhS
bGMzUmZhWE56ZFdWekxrUmxjSEpsWTJGMCIsCi0gICAgICAgICAgICAiWldSRmJuVnRRZ0lZQVNJ
WkNnbEpkR1Z0Um1sbGJHUVNEQW9FYVhSbGJSZ0JJQUVvQlNKRUNnMVNaWE5sIiwKLSAgICAgICAg
ICAgICJjblpsWkU1aGJXVnpFZzBLQlhSNWNHVnpHQUVnQVNnRkVoSUtDbVJsYzJOeWFYQjBiM0lZ
QWlBQktBVWEiLAotICAgICAgICAgICAgIkVBb09VMjl0WlU1bGMzUmxaRlI1Y0dVaW9BRUtGVlJs
YzNSS2MyOXVSbWxsYkdSUGNtUmxjbWx1WnhJVCIsCi0gICAgICAgICAgICAiQ2d0d2JHRnBibDlw
Ym5Rek1oZ0VJQUVvQlJJVENnbHZNVjl6ZEhKcGJtY1lBaUFCS0FsSUFCSVNDZ2h2IiwKLSAgICAg
ICAgICAgICJNVjlwYm5Rek1oZ0ZJQUVvQlVnQUVoUUtESEJzWVdsdVgzTjBjbWx1WnhnQklBRW9D
UklTQ2dodk1sOXAiLAotICAgICAgICAgICAgImJuUXpNaGdHSUFFb0JVZ0JFaE1LQ1c4eVgzTjBj
bWx1WnhnRElBRW9DVWdCUWdRS0FtOHhRZ1FLQW04eSIsCi0gICAgICAgICAgICAiSWtzS0RGUmxj
M1JLYzI5dVRtRnRaUklNQ2dSdVlXMWxHQUVnQVNnSkVoa0tDMlJsYzJOeWFYQjBhVzl1IiwKLSAg
ICAgICAgICAgICJHQUlnQVNnSlVnUmtaWE5qRWhJS0JHZDFhV1FZQXlBQktBbFNCR1Y0YVdRcVZR
b01UbVZuWVhScGRtVkYiLAotICAgICAgICAgICAgImJuVnRFaFlLRWs1RlIwRlVTVlpGWDBWT1ZV
MWZXa1ZTVHhBQUVoWUtDVVpwZG1WQ1pXeHZkeEQ3Ly8vLyIsCi0gICAgICAgICAgICAiLy8vLy8v
OEJFaFVLQ0UxcGJuVnpUMjVsRVAvLy8vLy8vLy8vL3dFcUxnb09SR1Z3Y21WallYUmxaRVZ1IiwK
LSAgICAgICAgICAgICJkVzBTRXdvUFJFVlFVa1ZEUVZSRlJGOWFSVkpQRUFBU0J3b0RiMjVsRUFG
Q0gwZ0JxZ0lhVlc1cGRGUmwiLAotICAgICAgICAgICAgImMzUXVTWE56ZFdWekxsUmxjM1JRY205
MGIzTmlCbkJ5YjNSdk13PT0iKSk7Ci0gICAgICBkZXNjcmlwdG9yID0gcGJyOjpGaWxlRGVzY3Jp
cHRvci5Gcm9tR2VuZXJhdGVkQ29kZShkZXNjcmlwdG9yRGF0YSwKLSAgICAgICAgICBuZXcgcGJy
OjpGaWxlRGVzY3JpcHRvcltdIHsgfSwKLSAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJU
eXBlSW5mbyhuZXdbXSB7dHlwZW9mKGdsb2JhbDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3Mu
TmVnYXRpdmVFbnVtKSwgdHlwZW9mKGdsb2JhbDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3Mu
RGVwcmVjYXRlZEVudW0pLCB9LCBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIHsKLSAg
ICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6OlVu
aXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLklzc3VlMzA3KSwgZ2xvYmFsOjpVbml0VGVzdC5Jc3N1
ZXMuVGVzdFByb3Rvcy5Jc3N1ZTMwNy5QYXJzZXIsIG51bGwsIG51bGwsIG51bGwsIG5ldyBwYnI6
OkdlbmVyYXRlZENsclR5cGVJbmZvW10geyBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0
eXBlb2YoZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5Jc3N1ZTMwNy5UeXBlcy5O
ZXN0ZWRPbmNlKSwgZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5Jc3N1ZTMwNy5U
eXBlcy5OZXN0ZWRPbmNlLlBhcnNlciwgbnVsbCwgbnVsbCwgbnVsbCwgbmV3IHBicjo6R2VuZXJh
dGVkQ2xyVHlwZUluZm9bXSB7IG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihn
bG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLklzc3VlMzA3LlR5cGVzLk5lc3RlZE9u
Y2UuVHlwZXMuTmVzdGVkVHdpY2UpLCBnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9z
Lklzc3VlMzA3LlR5cGVzLk5lc3RlZE9uY2UuVHlwZXMuTmVzdGVkVHdpY2UuUGFyc2VyLCBudWxs
LCBudWxsLCBudWxsLCBudWxsKX0pfSksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRD
bHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5OZWdh
dGl2ZUVudW1NZXNzYWdlKSwgZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5OZWdh
dGl2ZUVudW1NZXNzYWdlLlBhcnNlciwgbmV3W117ICJWYWx1ZSIsICJWYWx1ZXMiLCAiUGFja2Vk
VmFsdWVzIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVy
YXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9z
LkRlcHJlY2F0ZWRDaGlsZCksIGdsb2JhbDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuRGVw
cmVjYXRlZENoaWxkLlBhcnNlciwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAg
ICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpVbml0VGVzdC5J
c3N1ZXMuVGVzdFByb3Rvcy5EZXByZWNhdGVkRmllbGRzTWVzc2FnZSksIGdsb2JhbDo6VW5pdFRl
c3QuSXNzdWVzLlRlc3RQcm90b3MuRGVwcmVjYXRlZEZpZWxkc01lc3NhZ2UuUGFyc2VyLCBuZXdb
XXsgIlByaW1pdGl2ZVZhbHVlIiwgIlByaW1pdGl2ZUFycmF5IiwgIk1lc3NhZ2VWYWx1ZSIsICJN
ZXNzYWdlQXJyYXkiLCAiRW51bVZhbHVlIiwgIkVudW1BcnJheSIgfSwgbnVsbCwgbnVsbCwgbnVs
bCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xv
YmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5JdGVtRmllbGQpLCBnbG9iYWw6OlVuaXRU
ZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLkl0ZW1GaWVsZC5QYXJzZXIsIG5ld1tdeyAiSXRlbSIgfSwg
bnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBl
SW5mbyh0eXBlb2YoZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5SZXNlcnZlZE5h
bWVzKSwgZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5SZXNlcnZlZE5hbWVzLlBh
cnNlciwgbmV3W117ICJUeXBlc18iLCAiRGVzY3JpcHRvcl8iIH0sIG51bGwsIG51bGwsIG5ldyBw
YnI6OkdlbmVyYXRlZENsclR5cGVJbmZvW10geyBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5m
byh0eXBlb2YoZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5SZXNlcnZlZE5hbWVz
LlR5cGVzLlNvbWVOZXN0ZWRUeXBlKSwgZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rv
cy5SZXNlcnZlZE5hbWVzLlR5cGVzLlNvbWVOZXN0ZWRUeXBlLlBhcnNlciwgbnVsbCwgbnVsbCwg
bnVsbCwgbnVsbCl9KSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZv
KHR5cGVvZihnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLlRlc3RKc29uRmllbGRP
cmRlcmluZyksIGdsb2JhbDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuVGVzdEpzb25GaWVs
ZE9yZGVyaW5nLlBhcnNlciwgbmV3W117ICJQbGFpbkludDMyIiwgIk8xU3RyaW5nIiwgIk8xSW50
MzIiLCAiUGxhaW5TdHJpbmciLCAiTzJJbnQzMiIsICJPMlN0cmluZyIgfSwgbmV3W117ICJPMSIs
ICJPMiIgfSwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJU
eXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5UZXN0SnNv
bk5hbWUpLCBnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLlRlc3RKc29uTmFtZS5Q
YXJzZXIsIG5ld1tdeyAiTmFtZSIsICJEZXNjcmlwdGlvbiIsICJHdWlkIiB9LCBudWxsLCBudWxs
LCBudWxsKQotICAgICAgICAgIH0pKTsKLSAgICB9Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLSAg
I3JlZ2lvbiBFbnVtcwotICBwdWJsaWMgZW51bSBOZWdhdGl2ZUVudW0gewotICAgIFtwYnI6Ok9y
aWdpbmFsTmFtZSgiTkVHQVRJVkVfRU5VTV9aRVJPIildIFplcm8gPSAwLAotICAgIFtwYnI6Ok9y
aWdpbmFsTmFtZSgiRml2ZUJlbG93IildIEZpdmVCZWxvdyA9IC01LAotICAgIFtwYnI6Ok9yaWdp
bmFsTmFtZSgiTWludXNPbmUiKV0gTWludXNPbmUgPSAtMSwKLSAgfQotCi0gIHB1YmxpYyBlbnVt
IERlcHJlY2F0ZWRFbnVtIHsKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkRFUFJFQ0FURURfWkVS
TyIpXSBEZXByZWNhdGVkWmVybyA9IDAsCi0gICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJvbmUiKV0g
T25lID0gMSwKLSAgfQotCi0gICNlbmRyZWdpb24KLQotICAjcmVnaW9uIE1lc3NhZ2VzCi0gIC8v
LyA8c3VtbWFyeT4KLSAgLy8vICBJc3N1ZSAzMDc6IHdoZW4gZ2VuZXJhdGluZyBkb3VibHktbmVz
dGVkIHR5cGVzLCBhbnkgcmVmZXJlbmNlcwotICAvLy8gIHNob3VsZCBiZSBvZiB0aGUgZm9ybSBB
LlR5cGVzLkIuVHlwZXMuQy4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRp
YWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxl
ZCBwYXJ0aWFsIGNsYXNzIElzc3VlMzA3IDogcGI6OklNZXNzYWdlPElzc3VlMzA3PiB7Ci0gICAg
cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8SXNzdWUzMDc+IF9wYXJz
ZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8SXNzdWUzMDc+KCgpID0+IG5ldyBJc3N1ZTMwNygp
KTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPElzc3VlMzA3PiBQYXJzZXIg
eyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVz
c2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpV
bml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5Vbml0dGVzdElzc3Vlc1JlZmxlY3Rpb24uRGVzY3Jp
cHRvci5NZXNzYWdlVHlwZXNbMF07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlw
dG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlw
dG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIElzc3VlMzA3KCkgewotICAgICAgT25Db25zdHJ1
Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQot
ICAgIHB1YmxpYyBJc3N1ZTMwNyhJc3N1ZTMwNyBvdGhlcikgOiB0aGlzKCkgewotICAgIH0KLQot
ICAgIHB1YmxpYyBJc3N1ZTMwNyBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgSXNzdWUzMDco
dGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBv
dGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBJc3N1ZTMwNyk7Ci0gICAgfQot
Ci0gICAgcHVibGljIGJvb2wgRXF1YWxzKElzc3VlMzA3IG90aGVyKSB7Ci0gICAgICBpZiAoUmVm
ZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1
YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0g
ICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRv
U3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0
cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91
dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNp
emUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oSXNzdWUzMDcgb3RoZXIpIHsKLSAgICAgIGlmIChv
dGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAg
IHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsK
LSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBp
bnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLQotICAgICNyZWdpb24gTmVzdGVkIHR5cGVzCi0gICAgLy8vIDxzdW1tYXJ5
PkNvbnRhaW5lciBmb3IgbmVzdGVkIHR5cGVzIGRlY2xhcmVkIGluIHRoZSBJc3N1ZTMwNyBtZXNz
YWdlIHR5cGUuPC9zdW1tYXJ5PgotICAgIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1
Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gICAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIGNs
YXNzIFR5cGVzIHsKLSAgICAgIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5v
blVzZXJDb2RlQXR0cmlidXRlKCldCi0gICAgICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3Mg
TmVzdGVkT25jZSA6IHBiOjpJTWVzc2FnZTxOZXN0ZWRPbmNlPiB7Ci0gICAgICAgIHByaXZhdGUg
c3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPE5lc3RlZE9uY2U+IF9wYXJzZXIgPSBu
ZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8TmVzdGVkT25jZT4oKCkgPT4gbmV3IE5lc3RlZE9uY2UoKSk7
Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8TmVzdGVkT25jZT4gUGFy
c2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMg
cGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgICAgICBnZXQgeyByZXR1
cm4gZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5Jc3N1ZTMwNy5EZXNjcmlwdG9y
Lk5lc3RlZFR5cGVzWzBdOyB9Ci0gICAgICAgIH0KLQotICAgICAgICBwYnI6Ok1lc3NhZ2VEZXNj
cmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4g
RGVzY3JpcHRvcjsgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIE5lc3RlZE9uY2UoKSB7
Ci0gICAgICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcnRp
YWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgICAgIHB1YmxpYyBOZXN0ZWRPbmNlKE5l
c3RlZE9uY2Ugb3RoZXIpIDogdGhpcygpIHsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBO
ZXN0ZWRPbmNlIENsb25lKCkgewotICAgICAgICAgIHJldHVybiBuZXcgTmVzdGVkT25jZSh0aGlz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmpl
Y3Qgb3RoZXIpIHsKLSAgICAgICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIE5lc3RlZE9uY2Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2wgRXF1YWxzKE5lc3RlZE9uY2Ugb3Ro
ZXIpIHsKLSAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoUmVmZXJl
bmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVi
bGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgICAgICBpbnQgaGFzaCA9IDE7
Ci0gICAgICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgb3Zl
cnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1h
dHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJs
aWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgICAg
fQotCi0gICAgICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgICAgICBpbnQg
c2l6ZSA9IDA7Ci0gICAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBw
dWJsaWMgdm9pZCBNZXJnZUZyb20oTmVzdGVkT25jZSBvdGhlcikgewotICAgICAgICAgIGlmIChv
dGhlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFt
IGlucHV0KSB7Ci0gICAgICAgICAgdWludCB0YWc7Ci0gICAgICAgICAgd2hpbGUgKCh0YWcgPSBp
bnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgI3JlZ2lvbiBOZXN0ZWQgdHlwZXMKLSAgICAgICAgLy8vIDxzdW1t
YXJ5PkNvbnRhaW5lciBmb3IgbmVzdGVkIHR5cGVzIGRlY2xhcmVkIGluIHRoZSBOZXN0ZWRPbmNl
IG1lc3NhZ2UgdHlwZS48L3N1bW1hcnk+Ci0gICAgICAgIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9z
dGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gICAgICAgIHB1YmxpYyBzdGF0
aWMgcGFydGlhbCBjbGFzcyBUeXBlcyB7Ci0gICAgICAgICAgW2dsb2JhbDo6U3lzdGVtLkRpYWdu
b3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgICAgICAgICBwdWJsaWMg
c2VhbGVkIHBhcnRpYWwgY2xhc3MgTmVzdGVkVHdpY2UgOiBwYjo6SU1lc3NhZ2U8TmVzdGVkVHdp
Y2U+IHsKLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFy
c2VyPE5lc3RlZFR3aWNlPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPE5lc3RlZFR3
aWNlPigoKSA9PiBuZXcgTmVzdGVkVHdpY2UoKSk7Ci0gICAgICAgICAgICBwdWJsaWMgc3RhdGlj
IHBiOjpNZXNzYWdlUGFyc2VyPE5lc3RlZFR3aWNlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3Bh
cnNlcjsgfSB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3Jp
cHRvciBEZXNjcmlwdG9yIHsKLSAgICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6VW5p
dFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuSXNzdWUzMDcuVHlwZXMuTmVzdGVkT25jZS5EZXNjcmlw
dG9yLk5lc3RlZFR5cGVzWzBdOyB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBicjo6
TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgICAgICAg
ICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBwdWJsaWMgTmVzdGVkVHdpY2UoKSB7Ci0gICAgICAgICAgICAgIE9uQ29uc3RydWN0aW9uKCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlv
bigpOwotCi0gICAgICAgICAgICBwdWJsaWMgTmVzdGVkVHdpY2UoTmVzdGVkVHdpY2Ugb3RoZXIp
IDogdGhpcygpIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIE5lc3RlZFR3
aWNlIENsb25lKCkgewotICAgICAgICAgICAgICByZXR1cm4gbmV3IE5lc3RlZFR3aWNlKHRoaXMp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVh
bHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICAgICAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMg
TmVzdGVkVHdpY2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgYm9vbCBF
cXVhbHMoTmVzdGVkVHdpY2Ugb3RoZXIpIHsKLSAgICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVx
dWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhp
cykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVi
bGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgICAgICAgICAgaW50IGhhc2gg
PSAxOwotICAgICAgICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgICAgICAgICAg
cmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRw
dXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBp
bnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgICAgICAgICAgaW50IHNpemUgPSAwOwotICAgICAg
ICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGlj
IHZvaWQgTWVyZ2VGcm9tKE5lc3RlZFR3aWNlIG90aGVyKSB7Ci0gICAgICAgICAgICAgIGlmIChv
dGhlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6
Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgICAgICAgICB1aW50IHRhZzsKLSAgICAg
ICAgICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAg
ICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgICAgI2VuZHJlZ2lvbgotCi0gICAg
ICB9Ci0KLSAgICB9Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLQotICBbZ2xvYmFsOjpTeXN0ZW0u
RGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2Vh
bGVkIHBhcnRpYWwgY2xhc3MgTmVnYXRpdmVFbnVtTWVzc2FnZSA6IHBiOjpJTWVzc2FnZTxOZWdh
dGl2ZUVudW1NZXNzYWdlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3Nh
Z2VQYXJzZXI8TmVnYXRpdmVFbnVtTWVzc2FnZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBh
cnNlcjxOZWdhdGl2ZUVudW1NZXNzYWdlPigoKSA9PiBuZXcgTmVnYXRpdmVFbnVtTWVzc2FnZSgp
KTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPE5lZ2F0aXZlRW51bU1lc3Nh
Z2U+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0
aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVy
biBnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLlVuaXR0ZXN0SXNzdWVzUmVmbGVj
dGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1sxXTsgfQotICAgIH0KLQotICAgIHBicjo6TWVz
c2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0
dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTmVnYXRpdmVFbnVtTWVzc2Fn
ZSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lk
IE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgTmVnYXRpdmVFbnVtTWVzc2FnZShOZWdh
dGl2ZUVudW1NZXNzYWdlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICB2YWx1ZV8gPSBvdGhlci52
YWx1ZV87Ci0gICAgICB2YWx1ZXNfID0gb3RoZXIudmFsdWVzXy5DbG9uZSgpOwotICAgICAgcGFj
a2VkVmFsdWVzXyA9IG90aGVyLnBhY2tlZFZhbHVlc18uQ2xvbmUoKTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgTmVnYXRpdmVFbnVtTWVzc2FnZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgTmVn
YXRpdmVFbnVtTWVzc2FnZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgInZhbHVlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBWYWx1ZUZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGdsb2JhbDo6VW5pdFRlc3Qu
SXNzdWVzLlRlc3RQcm90b3MuTmVnYXRpdmVFbnVtIHZhbHVlXyA9IDA7Ci0gICAgcHVibGljIGds
b2JhbDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuTmVnYXRpdmVFbnVtIFZhbHVlIHsKLSAg
ICAgIGdldCB7IHJldHVybiB2YWx1ZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHZhbHVlXyA9
IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAidmFsdWVzIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBW
YWx1ZXNGaWVsZE51bWJlciA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZp
ZWxkQ29kZWM8Z2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5OZWdhdGl2ZUVudW0+
IF9yZXBlYXRlZF92YWx1ZXNfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JFbnVt
KDE2LCB4ID0+IChpbnQpIHgsIHggPT4gKGdsb2JhbDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90
b3MuTmVnYXRpdmVFbnVtKSB4KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRG
aWVsZDxnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLk5lZ2F0aXZlRW51bT4gdmFs
dWVzXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVz
dFByb3Rvcy5OZWdhdGl2ZUVudW0+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxn
bG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLk5lZ2F0aXZlRW51bT4gVmFsdWVzIHsK
LSAgICAgIGdldCB7IHJldHVybiB2YWx1ZXNfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJwYWNrZWRfdmFsdWVzIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBQYWNrZWRWYWx1ZXNGaWVsZE51bWJlciA9IDM7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpVbml0VGVzdC5Jc3N1
ZXMuVGVzdFByb3Rvcy5OZWdhdGl2ZUVudW0+IF9yZXBlYXRlZF9wYWNrZWRWYWx1ZXNfY29kZWMK
LSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JFbnVtKDI2LCB4ID0+IChpbnQpIHgsIHggPT4g
KGdsb2JhbDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuTmVnYXRpdmVFbnVtKSB4KTsKLSAg
ICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6OlVuaXRUZXN0Lklz
c3Vlcy5UZXN0UHJvdG9zLk5lZ2F0aXZlRW51bT4gcGFja2VkVmFsdWVzXyA9IG5ldyBwYmM6OlJl
cGVhdGVkRmllbGQ8Z2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5OZWdhdGl2ZUVu
dW0+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6OlVuaXRUZXN0Lklz
c3Vlcy5UZXN0UHJvdG9zLk5lZ2F0aXZlRW51bT4gUGFja2VkVmFsdWVzIHsKLSAgICAgIGdldCB7
IHJldHVybiBwYWNrZWRWYWx1ZXNfOyB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJv
b2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBO
ZWdhdGl2ZUVudW1NZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoTmVn
YXRpdmVFbnVtTWVzc2FnZSBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhl
ciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJl
ZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICB9Ci0gICAgICBpZiAoVmFsdWUgIT0gb3RoZXIuVmFsdWUpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmKCF2YWx1ZXNfLkVxdWFscyhvdGhlci52YWx1ZXNfKSkgcmV0dXJuIGZhbHNlOwotICAgICAg
aWYoIXBhY2tlZFZhbHVlc18uRXF1YWxzKG90aGVyLnBhY2tlZFZhbHVlc18pKSByZXR1cm4gZmFs
c2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50
IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKFZhbHVlICE9
IDApIGhhc2ggXj0gVmFsdWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gdmFsdWVzXy5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBwYWNrZWRWYWx1ZXNfLkdldEhhc2hDb2RlKCk7
Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5n
IFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3Rp
Y1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2Rl
ZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChWYWx1ZSAhPSAwKSB7Ci0gICAgICAg
IG91dHB1dC5Xcml0ZVJhd1RhZyg4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlRW51bSgoaW50KSBW
YWx1ZSk7Ci0gICAgICB9Ci0gICAgICB2YWx1ZXNfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRf
dmFsdWVzX2NvZGVjKTsKLSAgICAgIHBhY2tlZFZhbHVlc18uV3JpdGVUbyhvdXRwdXQsIF9yZXBl
YXRlZF9wYWNrZWRWYWx1ZXNfY29kZWMpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3Vs
YXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChWYWx1ZSAhPSAwKSB7
Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlRW51bVNp
emUoKGludCkgVmFsdWUpOwotICAgICAgfQotICAgICAgc2l6ZSArPSB2YWx1ZXNfLkNhbGN1bGF0
ZVNpemUoX3JlcGVhdGVkX3ZhbHVlc19jb2RlYyk7Ci0gICAgICBzaXplICs9IHBhY2tlZFZhbHVl
c18uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcGFja2VkVmFsdWVzX2NvZGVjKTsKLSAgICAgIHJl
dHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShOZWdhdGl2ZUVu
dW1NZXNzYWdlIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuVmFsdWUgIT0gMCkgewotICAgICAgICBW
YWx1ZSA9IG90aGVyLlZhbHVlOwotICAgICAgfQotICAgICAgdmFsdWVzXy5BZGQob3RoZXIudmFs
dWVzXyk7Ci0gICAgICBwYWNrZWRWYWx1ZXNfLkFkZChvdGhlci5wYWNrZWRWYWx1ZXNfKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5w
dXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFn
KCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAgIHZhbHVlXyA9IChnbG9iYWw6OlVuaXRUZXN0
Lklzc3Vlcy5UZXN0UHJvdG9zLk5lZ2F0aXZlRW51bSkgaW5wdXQuUmVhZEVudW0oKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE4OgotICAgICAgICAg
IGNhc2UgMTY6IHsKLSAgICAgICAgICAgIHZhbHVlc18uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9y
ZXBlYXRlZF92YWx1ZXNfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgMjY6Ci0gICAgICAgICAgY2FzZSAyNDogewotICAgICAgICAgICAgcGFj
a2VkVmFsdWVzXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3BhY2tlZFZhbHVlc19j
b2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0KLSAgfQotCi0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dl
ck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBE
ZXByZWNhdGVkQ2hpbGQgOiBwYjo6SU1lc3NhZ2U8RGVwcmVjYXRlZENoaWxkPiB7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8RGVwcmVjYXRlZENoaWxkPiBf
cGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPERlcHJlY2F0ZWRDaGlsZD4oKCkgPT4gbmV3
IERlcHJlY2F0ZWRDaGlsZCgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2Vy
PERlcHJlY2F0ZWRDaGlsZD4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0g
ICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAg
ICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuVW5pdHRl
c3RJc3N1ZXNSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzJdOyB9Ci0gICAgfQot
Ci0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBEZXBy
ZWNhdGVkQ2hpbGQoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBh
cnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIERlcHJlY2F0ZWRDaGls
ZChEZXByZWNhdGVkQ2hpbGQgb3RoZXIpIDogdGhpcygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
RGVwcmVjYXRlZENoaWxkIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBEZXByZWNhdGVkQ2hp
bGQodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVj
dCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBEZXByZWNhdGVkQ2hpbGQp
OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhEZXByZWNhdGVkQ2hpbGQgb3RoZXIp
IHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRo
aXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAg
IGludCBoYXNoID0gMTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBv
dmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0
ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdy
aXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgIH0KLQotICAgIHB1Ymxp
YyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIHJldHVy
biBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShEZXByZWNhdGVkQ2hp
bGQgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5w
dXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBp
bnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6
U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVi
bGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIERlcHJlY2F0ZWRGaWVsZHNNZXNzYWdlIDogcGI6OklN
ZXNzYWdlPERlcHJlY2F0ZWRGaWVsZHNNZXNzYWdlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVh
ZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8RGVwcmVjYXRlZEZpZWxkc01lc3NhZ2U+IF9wYXJzZXIg
PSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8RGVwcmVjYXRlZEZpZWxkc01lc3NhZ2U+KCgpID0+IG5l
dyBEZXByZWNhdGVkRmllbGRzTWVzc2FnZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNz
YWdlUGFyc2VyPERlcHJlY2F0ZWRGaWVsZHNNZXNzYWdlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4g
X3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3Ig
RGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMu
VGVzdFByb3Rvcy5Vbml0dGVzdElzc3Vlc1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlw
ZXNbM107IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2Fn
ZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQot
Ci0gICAgcHVibGljIERlcHJlY2F0ZWRGaWVsZHNNZXNzYWdlKCkgewotICAgICAgT25Db25zdHJ1
Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQot
ICAgIHB1YmxpYyBEZXByZWNhdGVkRmllbGRzTWVzc2FnZShEZXByZWNhdGVkRmllbGRzTWVzc2Fn
ZSBvdGhlcikgOiB0aGlzKCkgewotICAgICAgcHJpbWl0aXZlVmFsdWVfID0gb3RoZXIucHJpbWl0
aXZlVmFsdWVfOwotICAgICAgcHJpbWl0aXZlQXJyYXlfID0gb3RoZXIucHJpbWl0aXZlQXJyYXlf
LkNsb25lKCk7Ci0gICAgICBNZXNzYWdlVmFsdWUgPSBvdGhlci5tZXNzYWdlVmFsdWVfICE9IG51
bGwgPyBvdGhlci5NZXNzYWdlVmFsdWUuQ2xvbmUoKSA6IG51bGw7Ci0gICAgICBtZXNzYWdlQXJy
YXlfID0gb3RoZXIubWVzc2FnZUFycmF5Xy5DbG9uZSgpOwotICAgICAgZW51bVZhbHVlXyA9IG90
aGVyLmVudW1WYWx1ZV87Ci0gICAgICBlbnVtQXJyYXlfID0gb3RoZXIuZW51bUFycmF5Xy5DbG9u
ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBEZXByZWNhdGVkRmllbGRzTWVzc2FnZSBDbG9uZSgp
IHsKLSAgICAgIHJldHVybiBuZXcgRGVwcmVjYXRlZEZpZWxkc01lc3NhZ2UodGhpcyk7Ci0gICAg
fQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJQcmltaXRpdmVWYWx1
ZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUHJpbWl0aXZlVmFsdWVG
aWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBpbnQgcHJpbWl0aXZlVmFsdWVfOwotICAgIFtn
bG9iYWw6OlN5c3RlbS5PYnNvbGV0ZUF0dHJpYnV0ZSgpXQotICAgIHB1YmxpYyBpbnQgUHJpbWl0
aXZlVmFsdWUgewotICAgICAgZ2V0IHsgcmV0dXJuIHByaW1pdGl2ZVZhbHVlXzsgfQotICAgICAg
c2V0IHsKLSAgICAgICAgcHJpbWl0aXZlVmFsdWVfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJQcmltaXRpdmVBcnJheSIg
ZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUHJpbWl0aXZlQXJyYXlGaWVs
ZE51bWJlciA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8
aW50PiBfcmVwZWF0ZWRfcHJpbWl0aXZlQXJyYXlfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRD
b2RlYy5Gb3JJbnQzMigxOCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmll
bGQ8aW50PiBwcmltaXRpdmVBcnJheV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGludD4oKTsK
LSAgICBbZ2xvYmFsOjpTeXN0ZW0uT2Jzb2xldGVBdHRyaWJ1dGUoKV0KLSAgICBwdWJsaWMgcGJj
OjpSZXBlYXRlZEZpZWxkPGludD4gUHJpbWl0aXZlQXJyYXkgewotICAgICAgZ2V0IHsgcmV0dXJu
IHByaW1pdGl2ZUFycmF5XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAiTWVzc2FnZVZhbHVlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBNZXNzYWdlVmFsdWVGaWVsZE51bWJlciA9IDM7Ci0gICAgcHJpdmF0ZSBnbG9iYWw6
OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLkRlcHJlY2F0ZWRDaGlsZCBtZXNzYWdlVmFsdWVf
OwotICAgIFtnbG9iYWw6OlN5c3RlbS5PYnNvbGV0ZUF0dHJpYnV0ZSgpXQotICAgIHB1YmxpYyBn
bG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLkRlcHJlY2F0ZWRDaGlsZCBNZXNzYWdl
VmFsdWUgewotICAgICAgZ2V0IHsgcmV0dXJuIG1lc3NhZ2VWYWx1ZV87IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIG1lc3NhZ2VWYWx1ZV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIk1lc3NhZ2VBcnJheSIgZmllbGQuPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTWVzc2FnZUFycmF5RmllbGROdW1iZXIgPSA0
OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6VW5p
dFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuRGVwcmVjYXRlZENoaWxkPiBfcmVwZWF0ZWRfbWVzc2Fn
ZUFycmF5X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgzNCwgZ2xv
YmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5EZXByZWNhdGVkQ2hpbGQuUGFyc2VyKTsK
LSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6OlVuaXRUZXN0
Lklzc3Vlcy5UZXN0UHJvdG9zLkRlcHJlY2F0ZWRDaGlsZD4gbWVzc2FnZUFycmF5XyA9IG5ldyBw
YmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5EZXBy
ZWNhdGVkQ2hpbGQ+KCk7Ci0gICAgW2dsb2JhbDo6U3lzdGVtLk9ic29sZXRlQXR0cmlidXRlKCld
Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5U
ZXN0UHJvdG9zLkRlcHJlY2F0ZWRDaGlsZD4gTWVzc2FnZUFycmF5IHsKLSAgICAgIGdldCB7IHJl
dHVybiBtZXNzYWdlQXJyYXlfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJFbnVtVmFsdWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29u
c3QgaW50IEVudW1WYWx1ZUZpZWxkTnVtYmVyID0gNTsKLSAgICBwcml2YXRlIGdsb2JhbDo6VW5p
dFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuRGVwcmVjYXRlZEVudW0gZW51bVZhbHVlXyA9IDA7Ci0g
ICAgW2dsb2JhbDo6U3lzdGVtLk9ic29sZXRlQXR0cmlidXRlKCldCi0gICAgcHVibGljIGdsb2Jh
bDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuRGVwcmVjYXRlZEVudW0gRW51bVZhbHVlIHsK
LSAgICAgIGdldCB7IHJldHVybiBlbnVtVmFsdWVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBl
bnVtVmFsdWVfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZp
ZWxkIG51bWJlciBmb3IgdGhlICJFbnVtQXJyYXkiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IEVudW1BcnJheUZpZWxkTnVtYmVyID0gNjsKLSAgICBwcml2YXRlIHN0YXRp
YyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJv
dG9zLkRlcHJlY2F0ZWRFbnVtPiBfcmVwZWF0ZWRfZW51bUFycmF5X2NvZGVjCi0gICAgICAgID0g
cGI6OkZpZWxkQ29kZWMuRm9yRW51bSg1MCwgeCA9PiAoaW50KSB4LCB4ID0+IChnbG9iYWw6OlVu
aXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLkRlcHJlY2F0ZWRFbnVtKSB4KTsKLSAgICBwcml2YXRl
IHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0
UHJvdG9zLkRlcHJlY2F0ZWRFbnVtPiBlbnVtQXJyYXlfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVs
ZDxnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLkRlcHJlY2F0ZWRFbnVtPigpOwot
ICAgIFtnbG9iYWw6OlN5c3RlbS5PYnNvbGV0ZUF0dHJpYnV0ZSgpXQotICAgIHB1YmxpYyBwYmM6
OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5EZXByZWNh
dGVkRW51bT4gRW51bUFycmF5IHsKLSAgICAgIGdldCB7IHJldHVybiBlbnVtQXJyYXlfOyB9Ci0g
ICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewot
ICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBEZXByZWNhdGVkRmllbGRzTWVzc2FnZSk7Ci0g
ICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKERlcHJlY2F0ZWRGaWVsZHNNZXNzYWdlIG90
aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVy
LCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChQcmlt
aXRpdmVWYWx1ZSAhPSBvdGhlci5QcmltaXRpdmVWYWx1ZSkgcmV0dXJuIGZhbHNlOwotICAgICAg
aWYoIXByaW1pdGl2ZUFycmF5Xy5FcXVhbHMob3RoZXIucHJpbWl0aXZlQXJyYXlfKSkgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKE1lc3NhZ2VWYWx1ZSwgb3RoZXIuTWVz
c2FnZVZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIW1lc3NhZ2VBcnJheV8uRXF1YWxz
KG90aGVyLm1lc3NhZ2VBcnJheV8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoRW51bVZhbHVl
ICE9IG90aGVyLkVudW1WYWx1ZSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIWVudW1BcnJheV8u
RXF1YWxzKG90aGVyLmVudW1BcnJheV8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAg
ICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKFByaW1pdGl2ZVZhbHVlICE9IDApIGhhc2ggXj0g
UHJpbWl0aXZlVmFsdWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcHJpbWl0aXZlQXJy
YXlfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAobWVzc2FnZVZhbHVlXyAhPSBudWxsKSBoYXNo
IF49IE1lc3NhZ2VWYWx1ZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBtZXNzYWdlQXJy
YXlfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoRW51bVZhbHVlICE9IDApIGhhc2ggXj0gRW51
bVZhbHVlLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IGVudW1BcnJheV8uR2V0SGFzaENv
ZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBz
dHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFn
bm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6
OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKFByaW1pdGl2ZVZhbHVlICE9
IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDgpOwotICAgICAgICBvdXRwdXQuV3Jp
dGVJbnQzMihQcmltaXRpdmVWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICBwcmltaXRpdmVBcnJheV8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9wcmltaXRpdmVBcnJheV9jb2RlYyk7Ci0gICAgICBp
ZiAobWVzc2FnZVZhbHVlXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygy
Nik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoTWVzc2FnZVZhbHVlKTsKLSAgICAgIH0K
LSAgICAgIG1lc3NhZ2VBcnJheV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9tZXNzYWdlQXJy
YXlfY29kZWMpOwotICAgICAgaWYgKEVudW1WYWx1ZSAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5X
cml0ZVJhd1RhZyg0MCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUVudW0oKGludCkgRW51bVZhbHVl
KTsKLSAgICAgIH0KLSAgICAgIGVudW1BcnJheV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9l
bnVtQXJyYXlfY29kZWMpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgp
IHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChQcmltaXRpdmVWYWx1ZSAhPSAwKSB7
Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJT
aXplKFByaW1pdGl2ZVZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHNpemUgKz0gcHJpbWl0aXZlQXJy
YXlfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3ByaW1pdGl2ZUFycmF5X2NvZGVjKTsKLSAgICAg
IGlmIChtZXNzYWdlVmFsdWVfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNv
ZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShNZXNzYWdlVmFsdWUpOwotICAgICAg
fQotICAgICAgc2l6ZSArPSBtZXNzYWdlQXJyYXlfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX21l
c3NhZ2VBcnJheV9jb2RlYyk7Ci0gICAgICBpZiAoRW51bVZhbHVlICE9IDApIHsKLSAgICAgICAg
c2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBF
bnVtVmFsdWUpOwotICAgICAgfQotICAgICAgc2l6ZSArPSBlbnVtQXJyYXlfLkNhbGN1bGF0ZVNp
emUoX3JlcGVhdGVkX2VudW1BcnJheV9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oRGVwcmVjYXRlZEZpZWxkc01lc3NhZ2Ugb3Ro
ZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLSAgICAgIGlmIChvdGhlci5QcmltaXRpdmVWYWx1ZSAhPSAwKSB7Ci0gICAgICAgIFByaW1p
dGl2ZVZhbHVlID0gb3RoZXIuUHJpbWl0aXZlVmFsdWU7Ci0gICAgICB9Ci0gICAgICBwcmltaXRp
dmVBcnJheV8uQWRkKG90aGVyLnByaW1pdGl2ZUFycmF5Xyk7Ci0gICAgICBpZiAob3RoZXIubWVz
c2FnZVZhbHVlXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChtZXNzYWdlVmFsdWVfID09IG51bGwp
IHsKLSAgICAgICAgICBtZXNzYWdlVmFsdWVfID0gbmV3IGdsb2JhbDo6VW5pdFRlc3QuSXNzdWVz
LlRlc3RQcm90b3MuRGVwcmVjYXRlZENoaWxkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgTWVzc2Fn
ZVZhbHVlLk1lcmdlRnJvbShvdGhlci5NZXNzYWdlVmFsdWUpOwotICAgICAgfQotICAgICAgbWVz
c2FnZUFycmF5Xy5BZGQob3RoZXIubWVzc2FnZUFycmF5Xyk7Ci0gICAgICBpZiAob3RoZXIuRW51
bVZhbHVlICE9IDApIHsKLSAgICAgICAgRW51bVZhbHVlID0gb3RoZXIuRW51bVZhbHVlOwotICAg
ICAgfQotICAgICAgZW51bUFycmF5Xy5BZGQob3RoZXIuZW51bUFycmF5Xyk7Ci0gICAgfQotCi0g
ICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0g
ICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAw
KSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSA4OiB7Ci0gICAgICAgICAgICBQcmltaXRpdmVWYWx1ZSA9IGlucHV0LlJlYWRJbnQzMigp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTg6Ci0g
ICAgICAgICAgY2FzZSAxNjogewotICAgICAgICAgICAgcHJpbWl0aXZlQXJyYXlfLkFkZEVudHJp
ZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcHJpbWl0aXZlQXJyYXlfY29kZWMpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjY6IHsKLSAgICAgICAgICAg
IGlmIChtZXNzYWdlVmFsdWVfID09IG51bGwpIHsKLSAgICAgICAgICAgICAgbWVzc2FnZVZhbHVl
XyA9IG5ldyBnbG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLkRlcHJlY2F0ZWRDaGls
ZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2UobWVzc2Fn
ZVZhbHVlXyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSAzNDogewotICAgICAgICAgICAgbWVzc2FnZUFycmF5Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwg
X3JlcGVhdGVkX21lc3NhZ2VBcnJheV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgY2FzZSA0MDogewotICAgICAgICAgICAgZW51bVZhbHVlXyA9IChn
bG9iYWw6OlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9zLkRlcHJlY2F0ZWRFbnVtKSBpbnB1dC5S
ZWFkRW51bSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh
c2UgNTA6Ci0gICAgICAgICAgY2FzZSA0ODogewotICAgICAgICAgICAgZW51bUFycmF5Xy5BZGRF
bnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX2VudW1BcnJheV9jb2RlYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQot
Ci0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBJc3N1ZSA0NTogaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL3Byb3RvYnVmLWNzaGFycC1wb3J0L2lzc3Vlcy9kZXRhaWw/aWQ9NDUKLSAgLy8vIDwvc3Vt
bWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVB
dHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIEl0ZW1GaWVsZCA6IHBi
OjpJTWVzc2FnZTxJdGVtRmllbGQ+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6
TWVzc2FnZVBhcnNlcjxJdGVtRmllbGQ+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8
SXRlbUZpZWxkPigoKSA9PiBuZXcgSXRlbUZpZWxkKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6
Ok1lc3NhZ2VQYXJzZXI8SXRlbUZpZWxkPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsg
fSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRv
ciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rv
cy5Vbml0dGVzdElzc3Vlc1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbNF07IH0K
LSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlw
dG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVi
bGljIEl0ZW1GaWVsZCgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAg
cGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgSXRlbUZpZWxkKEl0
ZW1GaWVsZCBvdGhlcikgOiB0aGlzKCkgewotICAgICAgaXRlbV8gPSBvdGhlci5pdGVtXzsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgSXRlbUZpZWxkIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBJ
dGVtRmllbGQodGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBm
b3IgdGhlICJpdGVtIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBJdGVt
RmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgaW50IGl0ZW1fOwotICAgIHB1YmxpYyBpbnQg
SXRlbSB7Ci0gICAgICBnZXQgeyByZXR1cm4gaXRlbV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IGl0ZW1fID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJv
b2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBJ
dGVtRmllbGQpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhJdGVtRmllbGQgb3Ro
ZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIs
IHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKEl0ZW0g
IT0gb3RoZXIuSXRlbSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNo
ID0gMTsKLSAgICAgIGlmIChJdGVtICE9IDApIGhhc2ggXj0gSXRlbS5HZXRIYXNoQ29kZSgpOwot
ICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBU
b1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNT
dHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRP
dXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoSXRlbSAhPSAwKSB7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZVJhd1RhZyg4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoSXRlbSk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAg
aW50IHNpemUgPSAwOwotICAgICAgaWYgKEl0ZW0gIT0gMCkgewotICAgICAgICBzaXplICs9IDEg
KyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShJdGVtKTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShJ
dGVtRmllbGQgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5JdGVtICE9IDApIHsKLSAgICAgICAgSXRl
bSA9IG90aGVyLkl0ZW07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VG
cm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAg
IHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0
YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVs
ZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4OiB7Ci0gICAgICAgICAg
ICBJdGVtID0gaW5wdXQuUmVhZEludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIFtnbG9iYWw6OlN5c3Rl
bS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBz
ZWFsZWQgcGFydGlhbCBjbGFzcyBSZXNlcnZlZE5hbWVzIDogcGI6OklNZXNzYWdlPFJlc2VydmVk
TmFtZXM+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxS
ZXNlcnZlZE5hbWVzPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPFJlc2VydmVkTmFt
ZXM+KCgpID0+IG5ldyBSZXNlcnZlZE5hbWVzKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1l
c3NhZ2VQYXJzZXI8UmVzZXJ2ZWROYW1lcz4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7
IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0
b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90
b3MuVW5pdHRlc3RJc3N1ZXNSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzVdOyB9
Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3Jp
cHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1
YmxpYyBSZXNlcnZlZE5hbWVzKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0K
LSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBSZXNlcnZl
ZE5hbWVzKFJlc2VydmVkTmFtZXMgb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIHR5cGVzXyA9IG90
aGVyLnR5cGVzXzsKLSAgICAgIGRlc2NyaXB0b3JfID0gb3RoZXIuZGVzY3JpcHRvcl87Ci0gICAg
fQotCi0gICAgcHVibGljIFJlc2VydmVkTmFtZXMgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3
IFJlc2VydmVkTmFtZXModGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJ0eXBlcyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBp
bnQgVHlwZXNfRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgaW50IHR5cGVzXzsKLSAgICBw
dWJsaWMgaW50IFR5cGVzXyB7Ci0gICAgICBnZXQgeyByZXR1cm4gdHlwZXNfOyB9Ci0gICAgICBz
ZXQgewotICAgICAgICB0eXBlc18gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8g
PHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImRlc2NyaXB0b3IiIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IERlc2NyaXB0b3JfRmllbGROdW1iZXIgPSAyOwotICAg
IHByaXZhdGUgaW50IGRlc2NyaXB0b3JfOwotICAgIHB1YmxpYyBpbnQgRGVzY3JpcHRvcl8gewot
ICAgICAgZ2V0IHsgcmV0dXJuIGRlc2NyaXB0b3JfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBk
ZXNjcmlwdG9yXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlk
ZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIg
YXMgUmVzZXJ2ZWROYW1lcyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKFJlc2Vy
dmVkTmFtZXMgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwp
KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VF
cXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAg
ICAgaWYgKFR5cGVzXyAhPSBvdGhlci5UeXBlc18pIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChE
ZXNjcmlwdG9yXyAhPSBvdGhlci5EZXNjcmlwdG9yXykgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgp
IHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChUeXBlc18gIT0gMCkgaGFzaCBePSBU
eXBlc18uR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChEZXNjcmlwdG9yXyAhPSAwKSBoYXNoIF49
IERlc2NyaXB0b3JfLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBi
OjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAg
IGlmIChUeXBlc18gIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZUludDMyKFR5cGVzXyk7Ci0gICAgICB9Ci0gICAgICBpZiAoRGVzY3Jp
cHRvcl8gIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTYpOwotICAgICAgICBv
dXRwdXQuV3JpdGVJbnQzMihEZXNjcmlwdG9yXyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVi
bGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYg
KFR5cGVzXyAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVh
bS5Db21wdXRlSW50MzJTaXplKFR5cGVzXyk7Ci0gICAgICB9Ci0gICAgICBpZiAoRGVzY3JpcHRv
cl8gIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29t
cHV0ZUludDMyU2l6ZShEZXNjcmlwdG9yXyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oUmVzZXJ2ZWROYW1lcyBvdGhlcikg
ewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQot
ICAgICAgaWYgKG90aGVyLlR5cGVzXyAhPSAwKSB7Ci0gICAgICAgIFR5cGVzXyA9IG90aGVyLlR5
cGVzXzsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5EZXNjcmlwdG9yXyAhPSAwKSB7Ci0gICAg
ICAgIERlc2NyaXB0b3JfID0gb3RoZXIuRGVzY3JpcHRvcl87Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0g
ICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAw
KSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSA4OiB7Ci0gICAgICAgICAgICBUeXBlc18gPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE2OiB7Ci0gICAgICAg
ICAgICBEZXNjcmlwdG9yXyA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgI3JlZ2lvbiBO
ZXN0ZWQgdHlwZXMKLSAgICAvLy8gPHN1bW1hcnk+Q29udGFpbmVyIGZvciBuZXN0ZWQgdHlwZXMg
ZGVjbGFyZWQgaW4gdGhlIFJlc2VydmVkTmFtZXMgbWVzc2FnZSB0eXBlLjwvc3VtbWFyeT4KLSAg
ICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0
ZSgpXQotICAgIHB1YmxpYyBzdGF0aWMgcGFydGlhbCBjbGFzcyBUeXBlcyB7Ci0gICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAvLy8gIEZvcmNlIGEgbmVzdGVkIHR5cGUgY2FsbGVkIFR5cGVzCi0g
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRl
YnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgICAgIHB1YmxpYyBzZWFsZWQgcGFydGlh
bCBjbGFzcyBTb21lTmVzdGVkVHlwZSA6IHBiOjpJTWVzc2FnZTxTb21lTmVzdGVkVHlwZT4gewot
ICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxTb21lTmVz
dGVkVHlwZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxTb21lTmVzdGVkVHlwZT4o
KCkgPT4gbmV3IFNvbWVOZXN0ZWRUeXBlKCkpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHBiOjpN
ZXNzYWdlUGFyc2VyPFNvbWVOZXN0ZWRUeXBlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNl
cjsgfSB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERl
c2NyaXB0b3IgewotICAgICAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6OlVuaXRUZXN0Lklzc3Vl
cy5UZXN0UHJvdG9zLlJlc2VydmVkTmFtZXMuRGVzY3JpcHRvci5OZXN0ZWRUeXBlc1swXTsgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2Uu
RGVzY3JpcHRvciB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHB1YmxpYyBTb21lTmVzdGVkVHlwZSgpIHsKLSAgICAgICAgICBPbkNv
bnN0cnVjdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFydGlhbCB2b2lkIE9uQ29uc3Ry
dWN0aW9uKCk7Ci0KLSAgICAgICAgcHVibGljIFNvbWVOZXN0ZWRUeXBlKFNvbWVOZXN0ZWRUeXBl
IG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU29tZU5lc3Rl
ZFR5cGUgQ2xvbmUoKSB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBTb21lTmVzdGVkVHlwZSh0aGlz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmpl
Y3Qgb3RoZXIpIHsKLSAgICAgICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIFNvbWVOZXN0ZWRU
eXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sIEVxdWFscyhTb21lTmVzdGVk
VHlwZSBvdGhlcikgewotICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwp
KSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlm
IChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgICAgIGludCBo
YXNoID0gMTsKLSAgICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1
YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICAgICAgcmV0dXJuIHBiOjpK
c29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewot
ICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAg
ICAgIGludCBzaXplID0gMDsKLSAgICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShTb21lTmVzdGVkVHlwZSBvdGhlcikgewotICAg
ICAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2Rl
ZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICAgICAgdWludCB0YWc7Ci0gICAgICAgICAgd2hp
bGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgICAgIHN3aXRjaCh0
YWcpIHsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbnB1dC5Ta2lw
TGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0K
LSAgfQotCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBUaGVzZSBmaWVsZHMgYXJlIGRlbGliZXJh
dGVseSBub3QgZGVjbGFyZWQgaW4gbnVtZXJpYwotICAvLy8gIG9yZGVyLCBhbmQgdGhlIG9uZW9m
IGZpZWxkcyBhcmVuJ3QgY29udGlndW91cyBlaXRoZXIuCi0gIC8vLyAgVGhpcyBhbGxvd3MgZm9y
IHJlYXNvbmFibHkgcm9idXN0IHRlc3RzIG9mIEpTT04gb3V0cHV0Ci0gIC8vLyAgb3JkZXJpbmcu
Ci0gIC8vLyAgVGVzdEZpZWxkT3JkZXJpbmdzIGluIHVuaXR0ZXN0X3Byb3RvMy5wcm90byBpcyBz
aW1pbGFyLAotICAvLy8gIGJ1dCBkb2Vzbid0IGluY2x1ZGUgb25lb2ZzLgotICAvLy8gIFRPRE86
IENvbnNpZGVyIGFkZGluZyBvbmVvZnMgdG8gVGVzdEZpZWxkT3JkZXJpbmdzLCBhbHRob3VnaAot
ICAvLy8gIHRoYXQgd2lsbCByZXF1aXJlIGZpeGluZyBvdGhlciB0ZXN0cyBpbiBtdWx0aXBsZSBw
bGF0Zm9ybXMuCi0gIC8vLyAgQWx0ZXJuYXRpdmVseSwgY29uc2lkZXIganVzdCBhZGRpbmcgdGhp
cyB0bwotICAvLy8gIHVuaXR0ZXN0X3Byb3RvMy5wcm90byBpZiBtdWx0aXBsZSBwbGF0Zm9ybXMg
d2FudCBpdC4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNz
LkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFs
IGNsYXNzIFRlc3RKc29uRmllbGRPcmRlcmluZyA6IHBiOjpJTWVzc2FnZTxUZXN0SnNvbkZpZWxk
T3JkZXJpbmc+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNl
cjxUZXN0SnNvbkZpZWxkT3JkZXJpbmc+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8
VGVzdEpzb25GaWVsZE9yZGVyaW5nPigoKSA9PiBuZXcgVGVzdEpzb25GaWVsZE9yZGVyaW5nKCkp
OwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdEpzb25GaWVsZE9yZGVy
aW5nPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3Rh
dGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1
cm4gZ2xvYmFsOjpVbml0VGVzdC5Jc3N1ZXMuVGVzdFByb3Rvcy5Vbml0dGVzdElzc3Vlc1JlZmxl
Y3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbNl07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1l
c3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJl
dHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RKc29uRmllbGRPcmRl
cmluZygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2
b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgVGVzdEpzb25GaWVsZE9yZGVyaW5n
KFRlc3RKc29uRmllbGRPcmRlcmluZyBvdGhlcikgOiB0aGlzKCkgewotICAgICAgcGxhaW5JbnQz
Ml8gPSBvdGhlci5wbGFpbkludDMyXzsKLSAgICAgIHBsYWluU3RyaW5nXyA9IG90aGVyLnBsYWlu
U3RyaW5nXzsKLSAgICAgIHN3aXRjaCAob3RoZXIuTzFDYXNlKSB7Ci0gICAgICAgIGNhc2UgTzFP
bmVvZkNhc2UuTzFTdHJpbmc6Ci0gICAgICAgICAgTzFTdHJpbmcgPSBvdGhlci5PMVN0cmluZzsK
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPMU9uZW9mQ2FzZS5PMUludDMyOgotICAg
ICAgICAgIE8xSW50MzIgPSBvdGhlci5PMUludDMyOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
fQotCi0gICAgICBzd2l0Y2ggKG90aGVyLk8yQ2FzZSkgewotICAgICAgICBjYXNlIE8yT25lb2ZD
YXNlLk8ySW50MzI6Ci0gICAgICAgICAgTzJJbnQzMiA9IG90aGVyLk8ySW50MzI7Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTzJPbmVvZkNhc2UuTzJTdHJpbmc6Ci0gICAgICAgICAg
TzJTdHJpbmcgPSBvdGhlci5PMlN0cmluZzsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQot
ICAgIH0KLQotICAgIHB1YmxpYyBUZXN0SnNvbkZpZWxkT3JkZXJpbmcgQ2xvbmUoKSB7Ci0gICAg
ICByZXR1cm4gbmV3IFRlc3RKc29uRmllbGRPcmRlcmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInBsYWluX2ludDMyIiBmaWVsZC48L3N1
bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBQbGFpbkludDMyRmllbGROdW1iZXIgPSA0Owot
ICAgIHByaXZhdGUgaW50IHBsYWluSW50MzJfOwotICAgIHB1YmxpYyBpbnQgUGxhaW5JbnQzMiB7
Ci0gICAgICBnZXQgeyByZXR1cm4gcGxhaW5JbnQzMl87IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IHBsYWluSW50MzJfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJvMV9zdHJpbmciIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IE8xU3RyaW5nRmllbGROdW1iZXIgPSAyOwotICAgIHB1YmxpYyBzdHJp
bmcgTzFTdHJpbmcgewotICAgICAgZ2V0IHsgcmV0dXJuIG8xQ2FzZV8gPT0gTzFPbmVvZkNhc2Uu
TzFTdHJpbmcgPyAoc3RyaW5nKSBvMV8gOiAiIjsgfQotICAgICAgc2V0IHsKLSAgICAgICAgbzFf
ID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwot
ICAgICAgICBvMUNhc2VfID0gTzFPbmVvZkNhc2UuTzFTdHJpbmc7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvMV9pbnQzMiIgZmllbGQu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTzFJbnQzMkZpZWxkTnVtYmVyID0gNTsK
LSAgICBwdWJsaWMgaW50IE8xSW50MzIgewotICAgICAgZ2V0IHsgcmV0dXJuIG8xQ2FzZV8gPT0g
TzFPbmVvZkNhc2UuTzFJbnQzMiA/IChpbnQpIG8xXyA6IDA7IH0KLSAgICAgIHNldCB7Ci0gICAg
ICAgIG8xXyA9IHZhbHVlOwotICAgICAgICBvMUNhc2VfID0gTzFPbmVvZkNhc2UuTzFJbnQzMjsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
InBsYWluX3N0cmluZyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUGxh
aW5TdHJpbmdGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgcGxhaW5TdHJpbmdf
ID0gIiI7Ci0gICAgcHVibGljIHN0cmluZyBQbGFpblN0cmluZyB7Ci0gICAgICBnZXQgeyByZXR1
cm4gcGxhaW5TdHJpbmdfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBwbGFpblN0cmluZ18gPSBw
Yjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvMl9p
bnQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTzJJbnQzMkZpZWxk
TnVtYmVyID0gNjsKLSAgICBwdWJsaWMgaW50IE8ySW50MzIgewotICAgICAgZ2V0IHsgcmV0dXJu
IG8yQ2FzZV8gPT0gTzJPbmVvZkNhc2UuTzJJbnQzMiA/IChpbnQpIG8yXyA6IDA7IH0KLSAgICAg
IHNldCB7Ci0gICAgICAgIG8yXyA9IHZhbHVlOwotICAgICAgICBvMkNhc2VfID0gTzJPbmVvZkNh
c2UuTzJJbnQzMjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgIm8yX3N0cmluZyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgTzJTdHJpbmdGaWVsZE51bWJlciA9IDM7Ci0gICAgcHVibGljIHN0cmluZyBPMlN0cmlu
ZyB7Ci0gICAgICBnZXQgeyByZXR1cm4gbzJDYXNlXyA9PSBPMk9uZW9mQ2FzZS5PMlN0cmluZyA/
IChzdHJpbmcpIG8yXyA6ICIiOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvMl8gPSBwYjo6UHJv
dG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICAgIG8y
Q2FzZV8gPSBPMk9uZW9mQ2FzZS5PMlN0cmluZzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2
YXRlIG9iamVjdCBvMV87Ci0gICAgLy8vIDxzdW1tYXJ5PkVudW0gb2YgcG9zc2libGUgY2FzZXMg
Zm9yIHRoZSAibzEiIG9uZW9mLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgZW51bSBPMU9uZW9mQ2Fz
ZSB7Ci0gICAgICBOb25lID0gMCwKLSAgICAgIE8xU3RyaW5nID0gMiwKLSAgICAgIE8xSW50MzIg
PSA1LAotICAgIH0KLSAgICBwcml2YXRlIE8xT25lb2ZDYXNlIG8xQ2FzZV8gPSBPMU9uZW9mQ2Fz
ZS5Ob25lOwotICAgIHB1YmxpYyBPMU9uZW9mQ2FzZSBPMUNhc2UgewotICAgICAgZ2V0IHsgcmV0
dXJuIG8xQ2FzZV87IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBDbGVhck8xKCkgewotICAg
ICAgbzFDYXNlXyA9IE8xT25lb2ZDYXNlLk5vbmU7Ci0gICAgICBvMV8gPSBudWxsOwotICAgIH0K
LQotICAgIHByaXZhdGUgb2JqZWN0IG8yXzsKLSAgICAvLy8gPHN1bW1hcnk+RW51bSBvZiBwb3Nz
aWJsZSBjYXNlcyBmb3IgdGhlICJvMiIgb25lb2YuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBlbnVt
IE8yT25lb2ZDYXNlIHsKLSAgICAgIE5vbmUgPSAwLAotICAgICAgTzJJbnQzMiA9IDYsCi0gICAg
ICBPMlN0cmluZyA9IDMsCi0gICAgfQotICAgIHByaXZhdGUgTzJPbmVvZkNhc2UgbzJDYXNlXyA9
IE8yT25lb2ZDYXNlLk5vbmU7Ci0gICAgcHVibGljIE8yT25lb2ZDYXNlIE8yQ2FzZSB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gbzJDYXNlXzsgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIENsZWFy
TzIoKSB7Ci0gICAgICBvMkNhc2VfID0gTzJPbmVvZkNhc2UuTm9uZTsKLSAgICAgIG8yXyA9IG51
bGw7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhl
cikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBUZXN0SnNvbkZpZWxkT3JkZXJpbmcp
OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhUZXN0SnNvbkZpZWxkT3JkZXJpbmcg
b3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3Ro
ZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKFBs
YWluSW50MzIgIT0gb3RoZXIuUGxhaW5JbnQzMikgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE8x
U3RyaW5nICE9IG90aGVyLk8xU3RyaW5nKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoTzFJbnQz
MiAhPSBvdGhlci5PMUludDMyKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoUGxhaW5TdHJpbmcg
IT0gb3RoZXIuUGxhaW5TdHJpbmcpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPMkludDMyICE9
IG90aGVyLk8ySW50MzIpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPMlN0cmluZyAhPSBvdGhl
ci5PMlN0cmluZykgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE8xQ2FzZSAhPSBvdGhlci5PMUNh
c2UpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPMkNhc2UgIT0gb3RoZXIuTzJDYXNlKSByZXR1
cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJp
ZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKFBs
YWluSW50MzIgIT0gMCkgaGFzaCBePSBQbGFpbkludDMyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBp
ZiAobzFDYXNlXyA9PSBPMU9uZW9mQ2FzZS5PMVN0cmluZykgaGFzaCBePSBPMVN0cmluZy5HZXRI
YXNoQ29kZSgpOwotICAgICAgaWYgKG8xQ2FzZV8gPT0gTzFPbmVvZkNhc2UuTzFJbnQzMikgaGFz
aCBePSBPMUludDMyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoUGxhaW5TdHJpbmcuTGVuZ3Ro
ICE9IDApIGhhc2ggXj0gUGxhaW5TdHJpbmcuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChvMkNh
c2VfID09IE8yT25lb2ZDYXNlLk8ySW50MzIpIGhhc2ggXj0gTzJJbnQzMi5HZXRIYXNoQ29kZSgp
OwotICAgICAgaWYgKG8yQ2FzZV8gPT0gTzJPbmVvZkNhc2UuTzJTdHJpbmcpIGhhc2ggXj0gTzJT
dHJpbmcuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gKGludCkgbzFDYXNlXzsKLSAgICAg
IGhhc2ggXj0gKGludCkgbzJDYXNlXzsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAg
IHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpz
b25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYg
KFBsYWluU3RyaW5nLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygx
MCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhQbGFpblN0cmluZyk7Ci0gICAgICB9Ci0g
ICAgICBpZiAobzFDYXNlXyA9PSBPMU9uZW9mQ2FzZS5PMVN0cmluZykgewotICAgICAgICBvdXRw
dXQuV3JpdGVSYXdUYWcoMTgpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoTzFTdHJpbmcp
OwotICAgICAgfQotICAgICAgaWYgKG8yQ2FzZV8gPT0gTzJPbmVvZkNhc2UuTzJTdHJpbmcpIHsK
LSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDI2KTsKLSAgICAgICAgb3V0cHV0LldyaXRlU3Ry
aW5nKE8yU3RyaW5nKTsKLSAgICAgIH0KLSAgICAgIGlmIChQbGFpbkludDMyICE9IDApIHsKLSAg
ICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDMyKTsKLSAgICAgICAgb3V0cHV0LldyaXRlSW50MzIo
UGxhaW5JbnQzMik7Ci0gICAgICB9Ci0gICAgICBpZiAobzFDYXNlXyA9PSBPMU9uZW9mQ2FzZS5P
MUludDMyKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg0MCk7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZUludDMyKE8xSW50MzIpOwotICAgICAgfQotICAgICAgaWYgKG8yQ2FzZV8gPT0gTzJP
bmVvZkNhc2UuTzJJbnQzMikgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNDgpOwotICAg
ICAgICBvdXRwdXQuV3JpdGVJbnQzMihPMkludDMyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBp
ZiAoUGxhaW5JbnQzMiAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1
dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKFBsYWluSW50MzIpOwotICAgICAgfQotICAgICAgaWYg
KG8xQ2FzZV8gPT0gTzFPbmVvZkNhc2UuTzFTdHJpbmcpIHsKLSAgICAgICAgc2l6ZSArPSAxICsg
cGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKE8xU3RyaW5nKTsKLSAgICAg
IH0KLSAgICAgIGlmIChvMUNhc2VfID09IE8xT25lb2ZDYXNlLk8xSW50MzIpIHsKLSAgICAgICAg
c2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoTzFJbnQz
Mik7Ci0gICAgICB9Ci0gICAgICBpZiAoUGxhaW5TdHJpbmcuTGVuZ3RoICE9IDApIHsKLSAgICAg
ICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKFBs
YWluU3RyaW5nKTsKLSAgICAgIH0KLSAgICAgIGlmIChvMkNhc2VfID09IE8yT25lb2ZDYXNlLk8y
SW50MzIpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1
dGVJbnQzMlNpemUoTzJJbnQzMik7Ci0gICAgICB9Ci0gICAgICBpZiAobzJDYXNlXyA9PSBPMk9u
ZW9mQ2FzZS5PMlN0cmluZykgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRT
dHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoTzJTdHJpbmcpOwotICAgICAgfQotICAgICAgcmV0dXJu
IHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKFRlc3RKc29uRmllbGRP
cmRlcmluZyBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLlBsYWluSW50MzIgIT0gMCkgewotICAgICAg
ICBQbGFpbkludDMyID0gb3RoZXIuUGxhaW5JbnQzMjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhl
ci5QbGFpblN0cmluZy5MZW5ndGggIT0gMCkgewotICAgICAgICBQbGFpblN0cmluZyA9IG90aGVy
LlBsYWluU3RyaW5nOwotICAgICAgfQotICAgICAgc3dpdGNoIChvdGhlci5PMUNhc2UpIHsKLSAg
ICAgICAgY2FzZSBPMU9uZW9mQ2FzZS5PMVN0cmluZzoKLSAgICAgICAgICBPMVN0cmluZyA9IG90
aGVyLk8xU3RyaW5nOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE8xT25lb2ZDYXNl
Lk8xSW50MzI6Ci0gICAgICAgICAgTzFJbnQzMiA9IG90aGVyLk8xSW50MzI7Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIHN3aXRjaCAob3RoZXIuTzJDYXNlKSB7Ci0gICAgICAg
IGNhc2UgTzJPbmVvZkNhc2UuTzJJbnQzMjoKLSAgICAgICAgICBPMkludDMyID0gb3RoZXIuTzJJ
bnQzMjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPMk9uZW9mQ2FzZS5PMlN0cmlu
ZzoKLSAgICAgICAgICBPMlN0cmluZyA9IG90aGVyLk8yU3RyaW5nOwotICAgICAgICAgIGJyZWFr
OwotICAgICAgfQotCi0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2Rl
ZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFn
ID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgUGxhaW5TdHJp
bmcgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgY2FzZSAxODogewotICAgICAgICAgICAgTzFTdHJpbmcgPSBpbnB1dC5SZWFk
U3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSAyNjogewotICAgICAgICAgICAgTzJTdHJpbmcgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAzMjogewotICAgICAg
ICAgICAgUGxhaW5JbnQzMiA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDA6IHsKLSAgICAgICAgICAgIE8xSW50MzIg
PSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDQ4OiB7Ci0gICAgICAgICAgICBPMkludDMyID0gaW5wdXQuUmVhZEludDMy
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9Ci0KLSAgfQotCi0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5v
blVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBUZXN0
SnNvbk5hbWUgOiBwYjo6SU1lc3NhZ2U8VGVzdEpzb25OYW1lPiB7Ci0gICAgcHJpdmF0ZSBzdGF0
aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdEpzb25OYW1lPiBfcGFyc2VyID0gbmV3
IHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RKc29uTmFtZT4oKCkgPT4gbmV3IFRlc3RKc29uTmFtZSgp
KTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RKc29uTmFtZT4gUGFy
c2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6
Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2Jh
bDo6VW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3MuVW5pdHRlc3RJc3N1ZXNSZWZsZWN0aW9uLkRl
c2NyaXB0b3IuTWVzc2FnZVR5cGVzWzddOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVz
Y3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVz
Y3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0SnNvbk5hbWUoKSB7Ci0gICAgICBP
bkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlv
bigpOwotCi0gICAgcHVibGljIFRlc3RKc29uTmFtZShUZXN0SnNvbk5hbWUgb3RoZXIpIDogdGhp
cygpIHsKLSAgICAgIG5hbWVfID0gb3RoZXIubmFtZV87Ci0gICAgICBkZXNjcmlwdGlvbl8gPSBv
dGhlci5kZXNjcmlwdGlvbl87Ci0gICAgICBndWlkXyA9IG90aGVyLmd1aWRfOwotICAgIH0KLQot
ICAgIHB1YmxpYyBUZXN0SnNvbk5hbWUgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IFRlc3RK
c29uTmFtZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgIm5hbWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE5hbWVG
aWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgbmFtZV8gPSAiIjsKLSAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgLy8vICBNZXNzYWdlIGZvciB0ZXN0aW5nIHRoZSBlZmZlY3RzIGZvciBv
ZiB0aGUganNvbl9uYW1lIG9wdGlvbgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0
cmluZyBOYW1lIHsKLSAgICAgIGdldCB7IHJldHVybiBuYW1lXzsgfQotICAgICAgc2V0IHsKLSAg
ICAgICAgbmFtZV8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwg
InZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJkZXNjcmlwdGlvbiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgRGVzY3JpcHRpb25GaWVsZE51bWJlciA9IDI7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgZGVz
Y3JpcHRpb25fID0gIiI7Ci0gICAgcHVibGljIHN0cmluZyBEZXNjcmlwdGlvbiB7Ci0gICAgICBn
ZXQgeyByZXR1cm4gZGVzY3JpcHRpb25fOyB9Ci0gICAgICBzZXQgewotICAgICAgICBkZXNjcmlw
dGlvbl8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVl
Iik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3Ig
dGhlICJndWlkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBHdWlkRmll
bGROdW1iZXIgPSAzOwotICAgIHByaXZhdGUgc3RyaW5nIGd1aWRfID0gIiI7Ci0gICAgcHVibGlj
IHN0cmluZyBHdWlkIHsKLSAgICAgIGdldCB7IHJldHVybiBndWlkXzsgfQotICAgICAgc2V0IHsK
LSAgICAgICAgZ3VpZF8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1
ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wg
RXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBUZXN0
SnNvbk5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhUZXN0SnNvbk5hbWUg
b3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3Ro
ZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKE5h
bWUgIT0gb3RoZXIuTmFtZSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKERlc2NyaXB0aW9uICE9
IG90aGVyLkRlc2NyaXB0aW9uKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoR3VpZCAhPSBvdGhl
ci5HdWlkKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwot
ICAgICAgaWYgKE5hbWUuTGVuZ3RoICE9IDApIGhhc2ggXj0gTmFtZS5HZXRIYXNoQ29kZSgpOwot
ICAgICAgaWYgKERlc2NyaXB0aW9uLkxlbmd0aCAhPSAwKSBoYXNoIF49IERlc2NyaXB0aW9uLkdl
dEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoR3VpZC5MZW5ndGggIT0gMCkgaGFzaCBePSBHdWlkLkdl
dEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3Zl
cnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVy
LlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0
ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChOYW1lLkxlbmd0
aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZVN0cmluZyhOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmIChEZXNjcmlwdGlvbi5MZW5n
dGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTgpOwotICAgICAgICBvdXRw
dXQuV3JpdGVTdHJpbmcoRGVzY3JpcHRpb24pOwotICAgICAgfQotICAgICAgaWYgKEd1aWQuTGVu
Z3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDI2KTsKLSAgICAgICAgb3V0
cHV0LldyaXRlU3RyaW5nKEd1aWQpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQg
Q2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChOYW1lLkxl
bmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5D
b21wdXRlU3RyaW5nU2l6ZShOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmIChEZXNjcmlwdGlvbi5M
ZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0u
Q29tcHV0ZVN0cmluZ1NpemUoRGVzY3JpcHRpb24pOwotICAgICAgfQotICAgICAgaWYgKEd1aWQu
TGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFt
LkNvbXB1dGVTdHJpbmdTaXplKEd1aWQpOwotICAgICAgfQotICAgICAgcmV0dXJuIHNpemU7Ci0g
ICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKFRlc3RKc29uTmFtZSBvdGhlcikgewot
ICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAg
ICAgaWYgKG90aGVyLk5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgTmFtZSA9IG90aGVyLk5h
bWU7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuRGVzY3JpcHRpb24uTGVuZ3RoICE9IDApIHsK
LSAgICAgICAgRGVzY3JpcHRpb24gPSBvdGhlci5EZXNjcmlwdGlvbjsKLSAgICAgIH0KLSAgICAg
IGlmIChvdGhlci5HdWlkLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIEd1aWQgPSBvdGhlci5HdWlk
OwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9
IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIE5hbWUgPSBpbnB1
dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgY2FzZSAxODogewotICAgICAgICAgICAgRGVzY3JpcHRpb24gPSBpbnB1dC5SZWFkU3RyaW5n
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNjog
ewotICAgICAgICAgICAgR3VpZCA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAg
I2VuZHJlZ2lvbgotCi19Ci0KLSNlbmRyZWdpb24gRGVzaWduZXIgZ2VuZXJhdGVkIGNvZGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9UZXN0UHJvdG9zL1VuaXR0
ZXN0UHJvdG8zLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Rlc3RQcm90b3Mv
VW5pdHRlc3RQcm90bzMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZDE1OWJi
NWE5NjVmZDVmNThkZWQ4NzQ3YzAyMWFlNDYzYTllNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1Rl
c3RQcm90b3MvVW5pdHRlc3RQcm90bzMuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw2MDY0ICswLDAg
QEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9U
IEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcm90bzMucHJvdG8K
LSNwcmFnbWEgd2FybmluZyBkaXNhYmxlIDE1OTEsIDA2MTIsIDMwMjEKLSNyZWdpb24gRGVzaWdu
ZXIgZ2VuZXJhdGVkIGNvZGUKLQotdXNpbmcgcGIgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1ZjsK
LXVzaW5nIHBiYyA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLkNvbGxlY3Rpb25zOwotdXNpbmcg
cGJyID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbjsKLXVzaW5nIHNjZyA9IGds
b2JhbDo6U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci1uYW1lc3BhY2UgR29vZ2xlLlByb3Rv
YnVmLlRlc3RQcm90b3MgewotCi0gIC8vLyA8c3VtbWFyeT5Ib2xkZXIgZm9yIHJlZmxlY3Rpb24g
aW5mb3JtYXRpb24gZ2VuZXJhdGVkIGZyb20gZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3Byb3Rv
My5wcm90bzwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2Vy
Tm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIGNsYXNzIFVu
aXR0ZXN0UHJvdG8zUmVmbGVjdGlvbiB7Ci0KLSAgICAjcmVnaW9uIERlc2NyaXB0b3IKLSAgICAv
Ly8gPHN1bW1hcnk+RmlsZSBkZXNjcmlwdG9yIGZvciBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rf
cHJvdG8zLnByb3RvPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpGaWxlRGVzY3Jp
cHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBkZXNjcmlwdG9yOyB9Ci0gICAg
fQotICAgIHByaXZhdGUgc3RhdGljIHBicjo6RmlsZURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLQot
ICAgIHN0YXRpYyBVbml0dGVzdFByb3RvM1JlZmxlY3Rpb24oKSB7Ci0gICAgICBieXRlW10gZGVz
Y3JpcHRvckRhdGEgPSBnbG9iYWw6OlN5c3RlbS5Db252ZXJ0LkZyb21CYXNlNjRTdHJpbmcoCi0g
ICAgICAgICAgc3RyaW5nLkNvbmNhdCgKLSAgICAgICAgICAgICJDaVZuYjI5bmJHVXZjSEp2ZEc5
aWRXWXZkVzVwZEhSbGMzUmZjSEp2ZEc4ekxuQnliM1J2RWhGd2NtOTAiLAotICAgICAgICAgICAg
ImIySjFabDkxYm1sMGRHVnpkQm9zWjI5dloyeGxMM0J5YjNSdlluVm1MM1Z1YVhSMFpYTjBYMmx0
Y0c5eSIsCi0gICAgICAgICAgICAiZEY5d2NtOTBiek11Y0hKdmRHOGk4QThLREZSbGMzUkJiR3hV
ZVhCbGN4SVVDZ3h6YVc1bmJHVmZhVzUwIiwKLSAgICAgICAgICAgICJNeklZQVNBQktBVVNGQW9N
YzJsdVoyeGxYMmx1ZERZMEdBSWdBU2dERWhVS0RYTnBibWRzWlY5MWFXNTAiLAotICAgICAgICAg
ICAgIk16SVlBeUFCS0EwU0ZRb05jMmx1WjJ4bFgzVnBiblEyTkJnRUlBRW9CQklWQ2cxemFXNW5i
R1ZmYzJsdSIsCi0gICAgICAgICAgICAiZERNeUdBVWdBU2dSRWhVS0RYTnBibWRzWlY5emFXNTBO
alFZQmlBQktCSVNGZ29PYzJsdVoyeGxYMlpwIiwKLSAgICAgICAgICAgICJlR1ZrTXpJWUJ5QUJL
QWNTRmdvT2MybHVaMnhsWDJacGVHVmtOalFZQ0NBQktBWVNGd29QYzJsdVoyeGwiLAotICAgICAg
ICAgICAgIlgzTm1hWGhsWkRNeUdBa2dBU2dQRWhjS0QzTnBibWRzWlY5elptbDRaV1EyTkJnS0lB
RW9FQklVQ2d4eiIsCi0gICAgICAgICAgICAiYVc1bmJHVmZabXh2WVhRWUN5QUJLQUlTRlFvTmMy
bHVaMnhsWDJSdmRXSnNaUmdNSUFFb0FSSVRDZ3R6IiwKLSAgICAgICAgICAgICJhVzVuYkdWZllt
OXZiQmdOSUFFb0NCSVZDZzF6YVc1bmJHVmZjM1J5YVc1bkdBNGdBU2dKRWhRS0RITnAiLAotICAg
ICAgICAgICAgImJtZHNaVjlpZVhSbGN4Z1BJQUVvREJKTUNoVnphVzVuYkdWZmJtVnpkR1ZrWDIx
bGMzTmhaMlVZRWlBQiIsCi0gICAgICAgICAgICAiS0FzeUxTNXdjbTkwYjJKMVpsOTFibWwwZEdW
emRDNVVaWE4wUVd4c1ZIbHdaWE11VG1WemRHVmtUV1Z6IiwKLSAgICAgICAgICAgICJjMkZuWlJK
QkNoWnphVzVuYkdWZlptOXlaV2xuYmw5dFpYTnpZV2RsR0JNZ0FTZ0xNaUV1Y0hKdmRHOWkiLAot
ICAgICAgICAgICAgImRXWmZkVzVwZEhSbGMzUXVSbTl5WldsbmJrMWxjM05oWjJVU1Jnb1ZjMmx1
WjJ4bFgybHRjRzl5ZEY5dCIsCi0gICAgICAgICAgICAiWlhOellXZGxHQlFnQVNnTE1pY3VjSEp2
ZEc5aWRXWmZkVzVwZEhSbGMzUmZhVzF3YjNKMExrbHRjRzl5IiwKLSAgICAgICAgICAgICJkRTFs
YzNOaFoyVVNSZ29TYzJsdVoyeGxYMjVsYzNSbFpGOWxiblZ0R0JVZ0FTZ09NaW91Y0hKdmRHOWki
LAotICAgICAgICAgICAgImRXWmZkVzVwZEhSbGMzUXVWR1Z6ZEVGc2JGUjVjR1Z6TGs1bGMzUmxa
RVZ1ZFcwU093b1RjMmx1WjJ4bCIsCi0gICAgICAgICAgICAiWDJadmNtVnBaMjVmWlc1MWJSZ1dJ
QUVvRGpJZUxuQnliM1J2WW5WbVgzVnVhWFIwWlhOMExrWnZjbVZwIiwKLSAgICAgICAgICAgICJa
MjVGYm5WdEVrQUtFbk5wYm1kc1pWOXBiWEJ2Y25SZlpXNTFiUmdYSUFFb0RqSWtMbkJ5YjNSdllu
Vm0iLAotICAgICAgICAgICAgIlgzVnVhWFIwWlhOMFgybHRjRzl5ZEM1SmJYQnZjblJGYm5WdEVs
TUtISE5wYm1kc1pWOXdkV0pzYVdOZiIsCi0gICAgICAgICAgICAiYVcxd2IzSjBYMjFsYzNOaFoy
VVlHaUFCS0FzeUxTNXdjbTkwYjJKMVpsOTFibWwwZEdWemRGOXBiWEJ2IiwKLSAgICAgICAgICAg
ICJjblF1VUhWaWJHbGpTVzF3YjNKMFRXVnpjMkZuWlJJV0NnNXlaWEJsWVhSbFpGOXBiblF6TWhn
ZklBTW8iLAotICAgICAgICAgICAgIkJSSVdDZzV5WlhCbFlYUmxaRjlwYm5RMk5CZ2dJQU1vQXhJ
WENnOXlaWEJsWVhSbFpGOTFhVzUwTXpJWSIsCi0gICAgICAgICAgICAiSVNBREtBMFNGd29QY21W
d1pXRjBaV1JmZFdsdWREWTBHQ0lnQXlnRUVoY0tEM0psY0dWaGRHVmtYM05wIiwKLSAgICAgICAg
ICAgICJiblF6TWhnaklBTW9FUklYQ2c5eVpYQmxZWFJsWkY5emFXNTBOalFZSkNBREtCSVNHQW9R
Y21Wd1pXRjAiLAotICAgICAgICAgICAgIlpXUmZabWw0WldRek1oZ2xJQU1vQnhJWUNoQnlaWEJs
WVhSbFpGOW1hWGhsWkRZMEdDWWdBeWdHRWhrSyIsCi0gICAgICAgICAgICAiRVhKbGNHVmhkR1Zr
WDNObWFYaGxaRE15R0NjZ0F5Z1BFaGtLRVhKbGNHVmhkR1ZrWDNObWFYaGxaRFkwIiwKLSAgICAg
ICAgICAgICJHQ2dnQXlnUUVoWUtEbkpsY0dWaGRHVmtYMlpzYjJGMEdDa2dBeWdDRWhjS0QzSmxj
R1ZoZEdWa1gyUnYiLAotICAgICAgICAgICAgImRXSnNaUmdxSUFNb0FSSVZDZzF5WlhCbFlYUmxa
RjlpYjI5c0dDc2dBeWdJRWhjS0QzSmxjR1ZoZEdWayIsCi0gICAgICAgICAgICAiWDNOMGNtbHVa
eGdzSUFNb0NSSVdDZzV5WlhCbFlYUmxaRjlpZVhSbGN4Z3RJQU1vREJKT0NoZHlaWEJsIiwKLSAg
ICAgICAgICAgICJZWFJsWkY5dVpYTjBaV1JmYldWemMyRm5aUmd3SUFNb0N6SXRMbkJ5YjNSdllu
Vm1YM1Z1YVhSMFpYTjAiLAotICAgICAgICAgICAgIkxsUmxjM1JCYkd4VWVYQmxjeTVPWlhOMFpX
Uk5aWE56WVdkbEVrTUtHSEpsY0dWaGRHVmtYMlp2Y21WcCIsCi0gICAgICAgICAgICAiWjI1ZmJX
VnpjMkZuWlJneElBTW9DekloTG5CeWIzUnZZblZtWDNWdWFYUjBaWE4wTGtadmNtVnBaMjVOIiwK
LSAgICAgICAgICAgICJaWE56WVdkbEVrZ0tGM0psY0dWaGRHVmtYMmx0Y0c5eWRGOXRaWE56WVdk
bEdESWdBeWdMTWljdWNISnYiLAotICAgICAgICAgICAgImRHOWlkV1pmZFc1cGRIUmxjM1JmYVcx
d2IzSjBMa2x0Y0c5eWRFMWxjM05oWjJVU1NBb1VjbVZ3WldGMCIsCi0gICAgICAgICAgICAiWldS
ZmJtVnpkR1ZrWDJWdWRXMFlNeUFES0E0eUtpNXdjbTkwYjJKMVpsOTFibWwwZEdWemRDNVVaWE4w
IiwKLSAgICAgICAgICAgICJRV3hzVkhsd1pYTXVUbVZ6ZEdWa1JXNTFiUkk5Q2hWeVpYQmxZWFJs
WkY5bWIzSmxhV2R1WDJWdWRXMFkiLAotICAgICAgICAgICAgIk5DQURLQTR5SGk1d2NtOTBiMkox
Wmw5MWJtbDBkR1Z6ZEM1R2IzSmxhV2R1Ulc1MWJSSkNDaFJ5WlhCbCIsCi0gICAgICAgICAgICAi
WVhSbFpGOXBiWEJ2Y25SZlpXNTFiUmcxSUFNb0RqSWtMbkJ5YjNSdlluVm1YM1Z1YVhSMFpYTjBY
Mmx0IiwKLSAgICAgICAgICAgICJjRzl5ZEM1SmJYQnZjblJGYm5WdEVsVUtIbkpsY0dWaGRHVmtY
M0IxWW14cFkxOXBiWEJ2Y25SZmJXVnoiLAotICAgICAgICAgICAgImMyRm5aUmcySUFNb0N6SXRM
bkJ5YjNSdlluVm1YM1Z1YVhSMFpYTjBYMmx0Y0c5eWRDNVFkV0pzYVdOSiIsCi0gICAgICAgICAg
ICAiYlhCdmNuUk5aWE56WVdkbEVoWUtERzl1Wlc5bVgzVnBiblF6TWhodklBRW9EVWdBRWswS0ZH
OXVaVzltIiwKLSAgICAgICAgICAgICJYMjVsYzNSbFpGOXRaWE56WVdkbEdIQWdBU2dMTWkwdWNI
SnZkRzlpZFdaZmRXNXBkSFJsYzNRdVZHVnoiLAotICAgICAgICAgICAgImRFRnNiRlI1Y0dWekxr
NWxjM1JsWkUxbGMzTmhaMlZJQUJJV0NneHZibVZ2Wmw5emRISnBibWNZY1NBQiIsCi0gICAgICAg
ICAgICAiS0FsSUFCSVZDZ3R2Ym1WdlpsOWllWFJsY3hoeUlBRW9ERWdBR2hzS0RVNWxjM1JsWkUx
bGMzTmhaMlVTIiwKLSAgICAgICAgICAgICJDZ29DWW1JWUFTQUJLQVVpVmdvS1RtVnpkR1ZrUlc1
MWJSSWJDaGRPUlZOVVJVUmZSVTVWVFY5VlRsTlEiLAotICAgICAgICAgICAgIlJVTkpSa2xGUkJB
QUVnY0tBMFpQVHhBQkVnY0tBMEpCVWhBQ0VnY0tBMEpCV2hBREVoQUtBMDVGUnhELyIsCi0gICAg
ICAgICAgICAiLy8vLy8vLy8vLzhCUWcwS0MyOXVaVzltWDJacFpXeGtJcnNCQ2hKT1pYTjBaV1JV
WlhOMFFXeHNWSGx3IiwKLSAgICAgICAgICAgICJaWE1TTkFvRlkyaHBiR1FZQVNBQktBc3lKUzV3
Y205MGIySjFabDkxYm1sMGRHVnpkQzVPWlhOMFpXUlUiLAotICAgICAgICAgICAgIlpYTjBRV3hz
Vkhsd1pYTVNNQW9IY0dGNWJHOWhaQmdDSUFFb0N6SWZMbkJ5YjNSdlluVm1YM1Z1YVhSMCIsCi0g
ICAgICAgICAgICAiWlhOMExsUmxjM1JCYkd4VWVYQmxjeEk5Q2c1eVpYQmxZWFJsWkY5amFHbHNa
QmdESUFNb0N6SWxMbkJ5IiwKLSAgICAgICAgICAgICJiM1J2WW5WbVgzVnVhWFIwWlhOMExrNWxj
M1JsWkZSbGMzUkJiR3hVZVhCbGN5STBDaFJVWlhOMFJHVnciLAotICAgICAgICAgICAgImNtVmpZ
WFJsWkVacFpXeGtjeEljQ2hCa1pYQnlaV05oZEdWa1gybHVkRE15R0FFZ0FTZ0ZRZ0lZQVNJYiIs
Ci0gICAgICAgICAgICAiQ2c1R2IzSmxhV2R1VFdWemMyRm5aUklKQ2dGakdBRWdBU2dGSWpBS0Vs
UmxjM1JTWlhObGNuWmxaRVpwIiwKLSAgICAgICAgICAgICJaV3hrYzBvRUNBSVFBMG9FQ0E4UUVF
b0VDQWtRREZJRFltRnlVZ05pWVhvaVdnb1JWR1Z6ZEVadmNtVnAiLAotICAgICAgICAgICAgIloy
NU9aWE4wWldRU1JRb09abTl5WldsbmJsOXVaWE4wWldRWUFTQUJLQXN5TFM1d2NtOTBiMkoxWmw5
MSIsCi0gICAgICAgICAgICAiYm1sMGRHVnpkQzVVWlhOMFFXeHNWSGx3WlhNdVRtVnpkR1ZrVFdW
emMyRm5aU0kwQ2hoVVpYTjBVbVZoIiwKLSAgICAgICAgICAgICJiR3g1VEdGeVoyVlVZV2RPZFcx
aVpYSVNDUW9CWVJnQklBRW9CUklOQ2dKaVloai8vLzkvSUFFb0JTSlYiLAotICAgICAgICAgICAg
IkNoUlVaWE4wVW1WamRYSnphWFpsVFdWemMyRm5aUkl5Q2dGaEdBRWdBU2dMTWljdWNISnZkRzlp
ZFdaZiIsCi0gICAgICAgICAgICAiZFc1cGRIUmxjM1F1VkdWemRGSmxZM1Z5YzJsMlpVMWxjM05o
WjJVU0NRb0JhUmdDSUFFb0JTSkxDaFJVIiwKLSAgICAgICAgICAgICJaWE4wVFhWMGRXRnNVbVZq
ZFhKemFXOXVRUkl6Q2dKaVloZ0JJQUVvQ3pJbkxuQnliM1J2WW5WbVgzVnUiLAotICAgICAgICAg
ICAgImFYUjBaWE4wTGxSbGMzUk5kWFIxWVd4U1pXTjFjbk5wYjI1Q0ltSUtGRlJsYzNSTmRYUjFZ
V3hTWldOMSIsCi0gICAgICAgICAgICAiY25OcGIyNUNFaklLQVdFWUFTQUJLQXN5Snk1d2NtOTBi
MkoxWmw5MWJtbDBkR1Z6ZEM1VVpYTjBUWFYwIiwKLSAgICAgICAgICAgICJkV0ZzVW1WamRYSnph
Vzl1UVJJV0NnNXZjSFJwYjI1aGJGOXBiblF6TWhnQ0lBRW9CU0xyQWdvWFZHVnoiLAotICAgICAg
ICAgICAgImRFTmhiV1ZzUTJGelpVWnBaV3hrVG1GdFpYTVNGZ29PVUhKcGJXbDBhWFpsUm1sbGJH
UVlBU0FCS0FVUyIsCi0gICAgICAgICAgICAiRXdvTFUzUnlhVzVuUm1sbGJHUVlBaUFCS0FrU01R
b0pSVzUxYlVacFpXeGtHQU1nQVNnT01oNHVjSEp2IiwKLSAgICAgICAgICAgICJkRzlpZFdaZmRX
NXBkSFJsYzNRdVJtOXlaV2xuYmtWdWRXMFNOd29NVFdWemMyRm5aVVpwWld4a0dBUWciLAotICAg
ICAgICAgICAgIkFTZ0xNaUV1Y0hKdmRHOWlkV1pmZFc1cGRIUmxjM1F1Um05eVpXbG5iazFsYzNO
aFoyVVNIZ29XVW1WdyIsCi0gICAgICAgICAgICAiWldGMFpXUlFjbWx0YVhScGRtVkdhV1ZzWkJn
SElBTW9CUkliQ2hOU1pYQmxZWFJsWkZOMGNtbHVaMFpwIiwKLSAgICAgICAgICAgICJaV3hrR0Fn
Z0F5Z0pFamtLRVZKbGNHVmhkR1ZrUlc1MWJVWnBaV3hrR0FrZ0F5Z09NaDR1Y0hKdmRHOWkiLAot
ICAgICAgICAgICAgImRXWmZkVzVwZEhSbGMzUXVSbTl5WldsbmJrVnVkVzBTUHdvVVVtVndaV0Yw
WldSTlpYTnpZV2RsUm1sbCIsCi0gICAgICAgICAgICAiYkdRWUNpQURLQXN5SVM1d2NtOTBiMkox
Wmw5MWJtbDBkR1Z6ZEM1R2IzSmxhV2R1VFdWemMyRm5aU0xIIiwKLSAgICAgICAgICAgICJBUW9T
VkdWemRFWnBaV3hrVDNKa1pYSnBibWR6RWhFS0NXMTVYM04wY21sdVp4Z0xJQUVvQ1JJT0NnWnQi
LAotICAgICAgICAgICAgImVWOXBiblFZQVNBQktBTVNFQW9JYlhsZlpteHZZWFFZWlNBQktBSVNV
d29WYzJsdVoyeGxYMjVsYzNSbCIsCi0gICAgICAgICAgICAiWkY5dFpYTnpZV2RsR01nQklBRW9D
ekl6TG5CeWIzUnZZblZtWDNWdWFYUjBaWE4wTGxSbGMzUkdhV1ZzIiwKLSAgICAgICAgICAgICJa
RTl5WkdWeWFXNW5jeTVPWlhOMFpXUk5aWE56WVdkbEdpY0tEVTVsYzNSbFpFMWxjM05oWjJVU0Nn
b0MiLAotICAgICAgICAgICAgImIyOFlBaUFCS0FNU0Nnb0NZbUlZQVNBQktBVWlTd29SVTNCaGNu
TmxSVzUxYlUxbGMzTmhaMlVTTmdvTCIsCi0gICAgICAgICAgICAiYzNCaGNuTmxYMlZ1ZFcwWUFT
QUJLQTR5SVM1d2NtOTBiMkoxWmw5MWJtbDBkR1Z6ZEM1VVpYTjBVM0JoIiwKLSAgICAgICAgICAg
ICJjbk5sUlc1MWJTSVpDZ2xQYm1WVGRISnBibWNTREFvRVpHRjBZUmdCSUFFb0NTSWFDZ3BOYjNK
bFUzUnkiLAotICAgICAgICAgICAgImFXNW5FZ3dLQkdSaGRHRVlBU0FES0FraUdBb0lUMjVsUW5s
MFpYTVNEQW9FWkdGMFlSZ0JJQUVvRENJWiIsCi0gICAgICAgICAgICAiQ2dsTmIzSmxRbmwwWlhN
U0RBb0VaR0YwWVJnQklBRW9EQ0ljQ2d4SmJuUXpNazFsYzNOaFoyVVNEQW9FIiwKLSAgICAgICAg
ICAgICJaR0YwWVJnQklBRW9CU0lkQ2cxVmFXNTBNekpOWlhOellXZGxFZ3dLQkdSaGRHRVlBU0FC
S0EwaUhBb00iLAotICAgICAgICAgICAgIlNXNTBOalJOWlhOellXZGxFZ3dLQkdSaGRHRVlBU0FC
S0FNaUhRb05WV2x1ZERZMFRXVnpjMkZuWlJJTSIsCi0gICAgICAgICAgICAiQ2dSa1lYUmhHQUVn
QVNnRUloc0tDMEp2YjJ4TlpYTnpZV2RsRWd3S0JHUmhkR0VZQVNBQktBZ2ljd29KIiwKLSAgICAg
ICAgICAgICJWR1Z6ZEU5dVpXOW1FaEVLQjJadmIxOXBiblFZQVNBQktBVklBQklVQ2dwbWIyOWZj
M1J5YVc1bkdBSWciLAotICAgICAgICAgICAgIkFTZ0pTQUFTTmdvTFptOXZYMjFsYzNOaFoyVVlB
eUFCS0FzeUh5NXdjbTkwYjJKMVpsOTFibWwwZEdWeiIsCi0gICAgICAgICAgICAiZEM1VVpYTjBR
V3hzVkhsd1pYTklBRUlGQ2dObWIyOGlxZ01LRDFSbGMzUlFZV05yWldSVWVYQmxjeElZIiwKLSAg
ICAgICAgICAgICJDZ3h3WVdOclpXUmZhVzUwTXpJWVdpQURLQVZDQWhBQkVoZ0tESEJoWTJ0bFpG
OXBiblEyTkJoYklBTW8iLAotICAgICAgICAgICAgIkEwSUNFQUVTR1FvTmNHRmphMlZrWDNWcGJu
UXpNaGhjSUFNb0RVSUNFQUVTR1FvTmNHRmphMlZrWDNWcCIsCi0gICAgICAgICAgICAiYm5RMk5C
aGRJQU1vQkVJQ0VBRVNHUW9OY0dGamEyVmtYM05wYm5Rek1oaGVJQU1vRVVJQ0VBRVNHUW9OIiwK
LSAgICAgICAgICAgICJjR0ZqYTJWa1gzTnBiblEyTkJoZklBTW9Fa0lDRUFFU0dnb09jR0ZqYTJW
a1gyWnBlR1ZrTXpJWVlDQUQiLAotICAgICAgICAgICAgIktBZENBaEFCRWhvS0RuQmhZMnRsWkY5
bWFYaGxaRFkwR0dFZ0F5Z0dRZ0lRQVJJYkNnOXdZV05yWldSZiIsCi0gICAgICAgICAgICAiYzJa
cGVHVmtNeklZWWlBREtBOUNBaEFCRWhzS0QzQmhZMnRsWkY5elptbDRaV1EyTkJoaklBTW9FRUlD
IiwKLSAgICAgICAgICAgICJFQUVTR0FvTWNHRmphMlZrWDJac2IyRjBHR1FnQXlnQ1FnSVFBUkla
Q2cxd1lXTnJaV1JmWkc5MVlteGwiLAotICAgICAgICAgICAgIkdHVWdBeWdCUWdJUUFSSVhDZ3R3
WVdOclpXUmZZbTl2YkJobUlBTW9DRUlDRUFFU053b0xjR0ZqYTJWayIsCi0gICAgICAgICAgICAi
WDJWdWRXMFlaeUFES0E0eUhpNXdjbTkwYjJKMVpsOTFibWwwZEdWemRDNUdiM0psYVdkdVJXNTFi
VUlDIiwKLSAgICAgICAgICAgICJFQUVpeUFNS0VWUmxjM1JWYm5CaFkydGxaRlI1Y0dWekVob0tE
blZ1Y0dGamEyVmtYMmx1ZERNeUdGb2ciLAotICAgICAgICAgICAgIkF5Z0ZRZ0lRQUJJYUNnNTFi
bkJoWTJ0bFpGOXBiblEyTkJoYklBTW9BMElDRUFBU0d3b1BkVzV3WVdOciIsCi0gICAgICAgICAg
ICAiWldSZmRXbHVkRE15R0Z3Z0F5Z05RZ0lRQUJJYkNnOTFibkJoWTJ0bFpGOTFhVzUwTmpRWVhT
QURLQVJDIiwKLSAgICAgICAgICAgICJBaEFBRWhzS0QzVnVjR0ZqYTJWa1gzTnBiblF6TWhoZUlB
TW9FVUlDRUFBU0d3b1BkVzV3WVdOclpXUmYiLAotICAgICAgICAgICAgImMybHVkRFkwR0Y4Z0F5
Z1NRZ0lRQUJJY0NoQjFibkJoWTJ0bFpGOW1hWGhsWkRNeUdHQWdBeWdIUWdJUSIsCi0gICAgICAg
ICAgICAiQUJJY0NoQjFibkJoWTJ0bFpGOW1hWGhsWkRZMEdHRWdBeWdHUWdJUUFCSWRDaEYxYm5C
aFkydGxaRjl6IiwKLSAgICAgICAgICAgICJabWw0WldRek1oaGlJQU1vRDBJQ0VBQVNIUW9SZFc1
d1lXTnJaV1JmYzJacGVHVmtOalFZWXlBREtCQkMiLAotICAgICAgICAgICAgIkFoQUFFaG9LRG5W
dWNHRmphMlZrWDJac2IyRjBHR1FnQXlnQ1FnSVFBQkliQ2c5MWJuQmhZMnRsWkY5ayIsCi0gICAg
ICAgICAgICAiYjNWaWJHVVlaU0FES0FGQ0FoQUFFaGtLRFhWdWNHRmphMlZrWDJKdmIyd1laaUFE
S0FoQ0FoQUFFamtLIiwKLSAgICAgICAgICAgICJEWFZ1Y0dGamEyVmtYMlZ1ZFcwWVp5QURLQTR5
SGk1d2NtOTBiMkoxWmw5MWJtbDBkR1Z6ZEM1R2IzSmwiLAotICAgICAgICAgICAgImFXZHVSVzUx
YlVJQ0VBQWl3QUVLSTFSbGMzUlNaWEJsWVhSbFpGTmpZV3hoY2tScFptWmxjbVZ1ZEZSaCIsCi0g
ICAgICAgICAgICAiWjFOcGVtVnpFaGdLRUhKbGNHVmhkR1ZrWDJacGVHVmtNeklZRENBREtBY1NG
Z29PY21Wd1pXRjBaV1JmIiwKLSAgICAgICAgICAgICJhVzUwTXpJWURTQURLQVVTR1FvUWNtVnda
V0YwWldSZlptbDRaV1EyTkJqK0R5QURLQVlTRndvT2NtVnciLAotICAgICAgICAgICAgIlpXRjBa
V1JmYVc1ME5qUVkvdzhnQXlnREVoZ0tEbkpsY0dWaGRHVmtYMlpzYjJGMEdQNy9EeUFES0FJUyIs
Ci0gICAgICAgICAgICAiR1FvUGNtVndaV0YwWldSZmRXbHVkRFkwR1AvL0R5QURLQVFpS0FvYlZH
VnpkRU52YlcxbGJuUkpibXBsIiwKLSAgICAgICAgICAgICJZM1JwYjI1TlpYTnpZV2RsRWdrS0FX
RVlBU0FCS0FraURBb0tSbTl2VW1WeGRXVnpkQ0lOQ2d0R2IyOVMiLAotICAgICAgICAgICAgIlpY
TndiMjV6WlNJU0NoQkdiMjlEYkdsbGJuUk5aWE56WVdkbEloSUtFRVp2YjFObGNuWmxjazFsYzNO
aCIsCi0gICAgICAgICAgICAiWjJVaURBb0tRbUZ5VW1WeGRXVnpkQ0lOQ2d0Q1lYSlNaWE53YjI1
elpTcFpDZ3RHYjNKbGFXZHVSVzUxIiwKLSAgICAgICAgICAgICJiUklYQ2hOR1QxSkZTVWRPWDFW
T1UxQkZRMGxHU1VWRUVBQVNEd29MUms5U1JVbEhUbDlHVDA4UUJCSVAiLAotICAgICAgICAgICAg
IkNndEdUMUpGU1VkT1gwSkJVaEFGRWc4S0MwWlBVa1ZKUjA1ZlFrRmFFQVlxZFFvVVZHVnpkRVZ1
ZFcxWCIsCi0gICAgICAgICAgICAiYVhSb1JIVndWbUZzZFdVU0tBb2tWRVZUVkY5RlRsVk5YMWRK
VkVoZlJGVlFYMVpCVEZWRlgxVk9VMUJGIiwKLSAgICAgICAgICAgICJRMGxHU1VWRUVBQVNDQW9F
Ums5UE1SQUJFZ2dLQkVKQlVqRVFBaElIQ2dOQ1FWb1FBeElJQ2dSR1QwOHkiLAotICAgICAgICAg
ICAgIkVBRVNDQW9FUWtGU01oQUNHZ0lRQVNxZEFRb09WR1Z6ZEZOd1lYSnpaVVZ1ZFcwU0lBb2NW
RVZUVkY5VCIsCi0gICAgICAgICAgICAiVUVGU1UwVmZSVTVWVFY5VlRsTlFSVU5KUmtsRlJCQUFF
Z3dLQ0ZOUVFWSlRSVjlCRUhzU0Rnb0lVMUJCIiwKLSAgICAgICAgICAgICJVbE5GWDBJUXB1Y0RF
ZzhLQ0ZOUVFWSlRSVjlERUxLeGdBWVNGUW9JVTFCQlVsTkZYMFFROGYvLy8vLy8iLAotICAgICAg
ICAgICAgIi8vLy9BUklWQ2doVFVFRlNVMFZmUlJDMDN2ei8vLy8vLy84QkVnd0tDRk5RUVZKVFJW
OUhFQUl5bVFFSyIsCi0gICAgICAgICAgICAiQzFSbGMzUlRaWEoyYVdObEVrUUtBMFp2YnhJZExu
QnliM1J2WW5WbVgzVnVhWFIwWlhOMExrWnZiMUpsIiwKLSAgICAgICAgICAgICJjWFZsYzNRYUhp
NXdjbTkwYjJKMVpsOTFibWwwZEdWemRDNUdiMjlTWlhOd2IyNXpaUkpFQ2dOQ1lYSVMiLAotICAg
ICAgICAgICAgIkhTNXdjbTkwYjJKMVpsOTFibWwwZEdWemRDNUNZWEpTWlhGMVpYTjBHaDR1Y0hK
dmRHOWlkV1pmZFc1cCIsCi0gICAgICAgICAgICAiZEhSbGMzUXVRbUZ5VW1WemNHOXVjMlZDT2tJ
TlZXNXBkSFJsYzNSUWNtOTBiMGdCZ0FFQmlBRUJrQUVCIiwKLSAgICAgICAgICAgICIrQUVCcWdJ
YVIyOXZaMnhsTGxCeWIzUnZZblZtTGxSbGMzUlFjbTkwYjNOaUJuQnliM1J2TXc9PSIpKTsKLSAg
ICAgIGRlc2NyaXB0b3IgPSBwYnI6OkZpbGVEZXNjcmlwdG9yLkZyb21HZW5lcmF0ZWRDb2RlKGRl
c2NyaXB0b3JEYXRhLAotICAgICAgICAgIG5ldyBwYnI6OkZpbGVEZXNjcmlwdG9yW10geyBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0SW1wb3J0UHJvdG8zUmVmbGVj
dGlvbi5EZXNjcmlwdG9yLCB9LAotICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJ
bmZvKG5ld1tdIHt0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb3Jl
aWduRW51bSksIHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RF
bnVtV2l0aER1cFZhbHVlKSwgdHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuVGVzdFNwYXJzZUVudW0pLCB9LCBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIHsK
LSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBlcyksIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzLlBhcnNlciwgbmV3W117ICJTaW5nbGVJ
bnQzMiIsICJTaW5nbGVJbnQ2NCIsICJTaW5nbGVVaW50MzIiLCAiU2luZ2xlVWludDY0IiwgIlNp
bmdsZVNpbnQzMiIsICJTaW5nbGVTaW50NjQiLCAiU2luZ2xlRml4ZWQzMiIsICJTaW5nbGVGaXhl
ZDY0IiwgIlNpbmdsZVNmaXhlZDMyIiwgIlNpbmdsZVNmaXhlZDY0IiwgIlNpbmdsZUZsb2F0Iiwg
IlNpbmdsZURvdWJsZSIsICJTaW5nbGVCb29sIiwgIlNpbmdsZVN0cmluZyIsICJTaW5nbGVCeXRl
cyIsICJTaW5nbGVOZXN0ZWRNZXNzYWdlIiwgIlNpbmdsZUZvcmVpZ25NZXNzYWdlIiwgIlNpbmds
ZUltcG9ydE1lc3NhZ2UiLCAiU2luZ2xlTmVzdGVkRW51bSIsICJTaW5nbGVGb3JlaWduRW51bSIs
ICJTaW5nbGVJbXBvcnRFbnVtIiwgIlNpbmdsZVB1YmxpY0ltcG9ydE1lc3NhZ2UiLCAiUmVwZWF0
ZWRJbnQzMiIsICJSZXBlYXRlZEludDY0IiwgIlJlcGVhdGVkVWludDMyIiwgIlJlcGVhdGVkVWlu
dDY0IiwgIlJlcGVhdGVkU2ludDMyIiwgIlJlcGVhdGVkU2ludDY0IiwgIlJlcGVhdGVkRml4ZWQz
MiIsICJSZXBlYXRlZEZpeGVkNjQiLCAiUmVwZWF0ZWRTZml4ZWQzMiIsICJSZXBlYXRlZFNmaXhl
ZDY0IiwgIlJlcGVhdGVkRmxvYXQiLCAiUmVwZWF0ZWREb3VibGUiLCAiUmVwZWF0ZWRCb29sIiwg
IlJlcGVhdGVkU3RyaW5nIiwgIlJlcGVhdGVkQnl0ZXMiLCAiUmVwZWF0ZWROZXN0ZWRNZXNzYWdl
IiwgIlJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UiLCAiUmVwZWF0ZWRJbXBvcnRNZXNzYWdlIiwgIlJl
cGVhdGVkTmVzdGVkRW51bSIsICJSZXBlYXRlZEZvcmVpZ25FbnVtIiwgIlJlcGVhdGVkSW1wb3J0
RW51bSIsICJSZXBlYXRlZFB1YmxpY0ltcG9ydE1lc3NhZ2UiLCAiT25lb2ZVaW50MzIiLCAiT25l
b2ZOZXN0ZWRNZXNzYWdlIiwgIk9uZW9mU3RyaW5nIiwgIk9uZW9mQnl0ZXMiIH0sIG5ld1tdeyAi
T25lb2ZGaWVsZCIgfSwgbmV3W117IHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0
UHJvdG9zLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRFbnVtKSB9LCBuZXcgcGJyOjpHZW5lcmF0
ZWRDbHJUeXBlSW5mb1tdIHsgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3Rl
ZE1lc3NhZ2UpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBl
cy5UeXBlcy5OZXN0ZWRNZXNzYWdlLlBhcnNlciwgbmV3W117ICJCYiIgfSwgbnVsbCwgbnVsbCwg
bnVsbCl9KSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVv
ZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk5lc3RlZFRlc3RBbGxUeXBlcyks
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuTmVzdGVkVGVzdEFsbFR5cGVzLlBh
cnNlciwgbmV3W117ICJDaGlsZCIsICJQYXlsb2FkIiwgIlJlcGVhdGVkQ2hpbGQiIH0sIG51bGws
IG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8o
dHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdERlcHJlY2F0ZWRG
aWVsZHMpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3REZXByZWNhdGVk
RmllbGRzLlBhcnNlciwgbmV3W117ICJEZXByZWNhdGVkSW50MzIiIH0sIG51bGwsIG51bGwsIG51
bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbk1lc3NhZ2UpLCBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25NZXNzYWdlLlBhcnNlciwgbmV3W117
ICJDIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRl
ZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRl
c3RSZXNlcnZlZEZpZWxkcyksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVz
dFJlc2VydmVkRmllbGRzLlBhcnNlciwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAg
ICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0Rm9yZWlnbk5lc3RlZCksIGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlRlc3RQcm90b3MuVGVzdEZvcmVpZ25OZXN0ZWQuUGFyc2VyLCBuZXdbXXsgIkZvcmVp
Z25OZXN0ZWQiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2Vu
ZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuVGVzdFJlYWxseUxhcmdlVGFnTnVtYmVyKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVz
dFByb3Rvcy5UZXN0UmVhbGx5TGFyZ2VUYWdOdW1iZXIuUGFyc2VyLCBuZXdbXXsgIkEiLCAiQmIi
IH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xy
VHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdFJl
Y3Vyc2l2ZU1lc3NhZ2UpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RS
ZWN1cnNpdmVNZXNzYWdlLlBhcnNlciwgbmV3W117ICJBIiwgIkkiIH0sIG51bGwsIG51bGwsIG51
bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdE11dHVhbFJlY3Vyc2lvbkEpLCBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RNdXR1YWxSZWN1cnNpb25BLlBh
cnNlciwgbmV3W117ICJCYiIgfSwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcg
cGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
VGVzdFByb3Rvcy5UZXN0TXV0dWFsUmVjdXJzaW9uQiksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LlRlc3RQcm90b3MuVGVzdE11dHVhbFJlY3Vyc2lvbkIuUGFyc2VyLCBuZXdbXXsgIkEiLCAiT3B0
aW9uYWxJbnQzMiIgfSwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpH
ZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3Rvcy5UZXN0Q2FtZWxDYXNlRmllbGROYW1lcyksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRl
c3RQcm90b3MuVGVzdENhbWVsQ2FzZUZpZWxkTmFtZXMuUGFyc2VyLCBuZXdbXXsgIlByaW1pdGl2
ZUZpZWxkIiwgIlN0cmluZ0ZpZWxkIiwgIkVudW1GaWVsZCIsICJNZXNzYWdlRmllbGQiLCAiUmVw
ZWF0ZWRQcmltaXRpdmVGaWVsZCIsICJSZXBlYXRlZFN0cmluZ0ZpZWxkIiwgIlJlcGVhdGVkRW51
bUZpZWxkIiwgIlJlcGVhdGVkTWVzc2FnZUZpZWxkIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAg
ICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RGaWVsZE9yZGVyaW5ncyksIGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEZpZWxkT3JkZXJpbmdzLlBhcnNlciwgbmV3W117
ICJNeVN0cmluZyIsICJNeUludCIsICJNeUZsb2F0IiwgIlNpbmdsZU5lc3RlZE1lc3NhZ2UiIH0s
IG51bGwsIG51bGwsIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvW10geyBuZXcgcGJyOjpH
ZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3Rvcy5UZXN0RmllbGRPcmRlcmluZ3MuVHlwZXMuTmVzdGVkTWVzc2FnZSksIGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEZpZWxkT3JkZXJpbmdzLlR5cGVzLk5lc3RlZE1l
c3NhZ2UuUGFyc2VyLCBuZXdbXXsgIk9vIiwgIkJiIiB9LCBudWxsLCBudWxsLCBudWxsKX0pLAot
ICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuU3BhcnNlRW51bU1lc3NhZ2UpLCBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlNwYXJzZUVudW1NZXNzYWdlLlBhcnNlciwgbmV3W117
ICJTcGFyc2VFbnVtIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6
OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0
UHJvdG9zLk9uZVN0cmluZyksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuT25l
U3RyaW5nLlBhcnNlciwgbmV3W117ICJEYXRhIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAg
ICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk1vcmVTdHJpbmcpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5UZXN0UHJvdG9zLk1vcmVTdHJpbmcuUGFyc2VyLCBuZXdbXXsgIkRhdGEiIH0sIG51bGwsIG51
bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlw
ZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuT25lQnl0ZXMpLCBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk9uZUJ5dGVzLlBhcnNlciwgbmV3W117ICJEYXRh
IiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENs
clR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk1vcmVC
eXRlcyksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuTW9yZUJ5dGVzLlBhcnNl
ciwgbmV3W117ICJEYXRhIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBw
YnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5U
ZXN0UHJvdG9zLkludDMyTWVzc2FnZSksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuSW50MzJNZXNzYWdlLlBhcnNlciwgbmV3W117ICJEYXRhIiB9LCBudWxsLCBudWxsLCBudWxs
KSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVpbnQzMk1lc3NhZ2UpLCBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVpbnQzMk1lc3NhZ2UuUGFyc2VyLCBuZXdbXXsgIkRh
dGEiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVk
Q2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuSW50
NjRNZXNzYWdlKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5JbnQ2NE1lc3Nh
Z2UuUGFyc2VyLCBuZXdbXXsgIkRhdGEiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAg
ICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlRlc3RQcm90b3MuVWludDY0TWVzc2FnZSksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LlRlc3RQcm90b3MuVWludDY0TWVzc2FnZS5QYXJzZXIsIG5ld1tdeyAiRGF0YSIgfSwgbnVsbCwg
bnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0
eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Cb29sTWVzc2FnZSksIGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuQm9vbE1lc3NhZ2UuUGFyc2VyLCBuZXdb
XXsgIkRhdGEiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2Vu
ZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuVGVzdE9uZW9mKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0T25l
b2YuUGFyc2VyLCBuZXdbXXsgIkZvb0ludCIsICJGb29TdHJpbmciLCAiRm9vTWVzc2FnZSIgfSwg
bmV3W117ICJGb28iIH0sIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJh
dGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3Mu
VGVzdFBhY2tlZFR5cGVzKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0
UGFja2VkVHlwZXMuUGFyc2VyLCBuZXdbXXsgIlBhY2tlZEludDMyIiwgIlBhY2tlZEludDY0Iiwg
IlBhY2tlZFVpbnQzMiIsICJQYWNrZWRVaW50NjQiLCAiUGFja2VkU2ludDMyIiwgIlBhY2tlZFNp
bnQ2NCIsICJQYWNrZWRGaXhlZDMyIiwgIlBhY2tlZEZpeGVkNjQiLCAiUGFja2VkU2ZpeGVkMzIi
LCAiUGFja2VkU2ZpeGVkNjQiLCAiUGFja2VkRmxvYXQiLCAiUGFja2VkRG91YmxlIiwgIlBhY2tl
ZEJvb2wiLCAiUGFja2VkRW51bSIgfSwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBu
ZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuVGVzdFByb3Rvcy5UZXN0VW5wYWNrZWRUeXBlcyksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LlRlc3RQcm90b3MuVGVzdFVucGFja2VkVHlwZXMuUGFyc2VyLCBuZXdbXXsgIlVucGFja2VkSW50
MzIiLCAiVW5wYWNrZWRJbnQ2NCIsICJVbnBhY2tlZFVpbnQzMiIsICJVbnBhY2tlZFVpbnQ2NCIs
ICJVbnBhY2tlZFNpbnQzMiIsICJVbnBhY2tlZFNpbnQ2NCIsICJVbnBhY2tlZEZpeGVkMzIiLCAi
VW5wYWNrZWRGaXhlZDY0IiwgIlVucGFja2VkU2ZpeGVkMzIiLCAiVW5wYWNrZWRTZml4ZWQ2NCIs
ICJVbnBhY2tlZEZsb2F0IiwgIlVucGFja2VkRG91YmxlIiwgIlVucGFja2VkQm9vbCIsICJVbnBh
Y2tlZEVudW0iIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2Vu
ZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuVGVzdFJlcGVhdGVkU2NhbGFyRGlmZmVyZW50VGFnU2l6ZXMpLCBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RSZXBlYXRlZFNjYWxhckRpZmZlcmVudFRhZ1NpemVzLlBh
cnNlciwgbmV3W117ICJSZXBlYXRlZEZpeGVkMzIiLCAiUmVwZWF0ZWRJbnQzMiIsICJSZXBlYXRl
ZEZpeGVkNjQiLCAiUmVwZWF0ZWRJbnQ2NCIsICJSZXBlYXRlZEZsb2F0IiwgIlJlcGVhdGVkVWlu
dDY0IiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRl
ZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRl
c3RDb21tZW50SW5qZWN0aW9uTWVzc2FnZSksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQ
cm90b3MuVGVzdENvbW1lbnRJbmplY3Rpb25NZXNzYWdlLlBhcnNlciwgbmV3W117ICJBIiB9LCBu
dWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJ
bmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvb1JlcXVlc3Qp
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvb1JlcXVlc3QuUGFyc2VyLCBu
dWxsLCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENs
clR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvb1Jl
c3BvbnNlKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb29SZXNwb25zZS5Q
YXJzZXIsIG51bGwsIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2Vu
ZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuRm9vQ2xpZW50TWVzc2FnZSksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3Mu
Rm9vQ2xpZW50TWVzc2FnZS5QYXJzZXIsIG51bGwsIG51bGwsIG51bGwsIG51bGwpLAotICAgICAg
ICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuRm9vU2VydmVyTWVzc2FnZSksIGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlRlc3RQcm90b3MuRm9vU2VydmVyTWVzc2FnZS5QYXJzZXIsIG51bGwsIG51bGwsIG51
bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlw
ZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuQmFyUmVxdWVzdCksIGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuQmFyUmVxdWVzdC5QYXJzZXIsIG51bGwsIG51
bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUlu
Zm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuQmFyUmVzcG9uc2Up
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkJhclJlc3BvbnNlLlBhcnNlciwg
bnVsbCwgbnVsbCwgbnVsbCwgbnVsbCkKLSAgICAgICAgICB9KSk7Ci0gICAgfQotICAgICNlbmRy
ZWdpb24KLQotICB9Ci0gICNyZWdpb24gRW51bXMKLSAgcHVibGljIGVudW0gRm9yZWlnbkVudW0g
ewotICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiRk9SRUlHTl9VTlNQRUNJRklFRCIpXSBGb3JlaWdu
VW5zcGVjaWZpZWQgPSAwLAotICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiRk9SRUlHTl9GT08iKV0g
Rm9yZWlnbkZvbyA9IDQsCi0gICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJGT1JFSUdOX0JBUiIpXSBG
b3JlaWduQmFyID0gNSwKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkZPUkVJR05fQkFaIildIEZv
cmVpZ25CYXogPSA2LAotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIFRlc3QgYW4gZW51
bSB0aGF0IGhhcyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCB0aGUgc2FtZSBudW1iZXIuCi0gIC8vLyA8
L3N1bW1hcnk+Ci0gIHB1YmxpYyBlbnVtIFRlc3RFbnVtV2l0aER1cFZhbHVlIHsKLSAgICBbcGJy
OjpPcmlnaW5hbE5hbWUoIlRFU1RfRU5VTV9XSVRIX0RVUF9WQUxVRV9VTlNQRUNJRklFRCIpXSBV
bnNwZWNpZmllZCA9IDAsCi0gICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJGT08xIildIEZvbzEgPSAx
LAotICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiQkFSMSIpXSBCYXIxID0gMiwKLSAgICBbcGJyOjpP
cmlnaW5hbE5hbWUoIkJBWiIpXSBCYXogPSAzLAotICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiRk9P
MiIpXSBGb28yID0gMSwKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkJBUjIiKV0gQmFyMiA9IDIs
Ci0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgVGVzdCBhbiBlbnVtIHdpdGggbGFyZ2Us
IHVub3JkZXJlZCB2YWx1ZXMuCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIHB1YmxpYyBlbnVtIFRlc3RT
cGFyc2VFbnVtIHsKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRFU1RfU1BBUlNFX0VOVU1fVU5T
UEVDSUZJRUQiKV0gVW5zcGVjaWZpZWQgPSAwLAotICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiU1BB
UlNFX0EiKV0gU3BhcnNlQSA9IDEyMywKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlNQQVJTRV9C
IildIFNwYXJzZUIgPSA2MjM3NCwKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlNQQVJTRV9DIild
IFNwYXJzZUMgPSAxMjU4OTIzNCwKLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlNQQVJTRV9EIild
IFNwYXJzZUQgPSAtMTUsCi0gICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJTUEFSU0VfRSIpXSBTcGFy
c2VFID0gLTUzNDUyLAotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIEluIHByb3RvMywgdmFs
dWUgMCBtdXN0IGJlIHRoZSBmaXJzdCBvbmUgc3BlY2lmaWVkCi0gICAgLy8vICBTUEFSU0VfRiA9
IDA7Ci0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlNQQVJTRV9H
IildIFNwYXJzZUcgPSAyLAotICB9Ci0KLSAgI2VuZHJlZ2lvbgotCi0gICNyZWdpb24gTWVzc2Fn
ZXMKLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIFRoaXMgcHJvdG8gaW5jbHVkZXMgZXZlcnkgdHlw
ZSBvZiBmaWVsZCBpbiBib3RoIHNpbmd1bGFyIGFuZCByZXBlYXRlZAotICAvLy8gIGZvcm1zLgot
ICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJO
b25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgVGVz
dEFsbFR5cGVzIDogcGI6OklNZXNzYWdlPFRlc3RBbGxUeXBlcz4gewotICAgIHByaXZhdGUgc3Rh
dGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RBbGxUeXBlcz4gX3BhcnNlciA9IG5l
dyBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0QWxsVHlwZXM+KCgpID0+IG5ldyBUZXN0QWxsVHlwZXMo
KSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0QWxsVHlwZXM+IFBh
cnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJy
OjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5E
ZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1swXTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURl
c2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERl
c2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgVGVzdEFsbFR5cGVzKCkgewotICAgICAg
T25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rp
b24oKTsKLQotICAgIHB1YmxpYyBUZXN0QWxsVHlwZXMoVGVzdEFsbFR5cGVzIG90aGVyKSA6IHRo
aXMoKSB7Ci0gICAgICBzaW5nbGVJbnQzMl8gPSBvdGhlci5zaW5nbGVJbnQzMl87Ci0gICAgICBz
aW5nbGVJbnQ2NF8gPSBvdGhlci5zaW5nbGVJbnQ2NF87Ci0gICAgICBzaW5nbGVVaW50MzJfID0g
b3RoZXIuc2luZ2xlVWludDMyXzsKLSAgICAgIHNpbmdsZVVpbnQ2NF8gPSBvdGhlci5zaW5nbGVV
aW50NjRfOwotICAgICAgc2luZ2xlU2ludDMyXyA9IG90aGVyLnNpbmdsZVNpbnQzMl87Ci0gICAg
ICBzaW5nbGVTaW50NjRfID0gb3RoZXIuc2luZ2xlU2ludDY0XzsKLSAgICAgIHNpbmdsZUZpeGVk
MzJfID0gb3RoZXIuc2luZ2xlRml4ZWQzMl87Ci0gICAgICBzaW5nbGVGaXhlZDY0XyA9IG90aGVy
LnNpbmdsZUZpeGVkNjRfOwotICAgICAgc2luZ2xlU2ZpeGVkMzJfID0gb3RoZXIuc2luZ2xlU2Zp
eGVkMzJfOwotICAgICAgc2luZ2xlU2ZpeGVkNjRfID0gb3RoZXIuc2luZ2xlU2ZpeGVkNjRfOwot
ICAgICAgc2luZ2xlRmxvYXRfID0gb3RoZXIuc2luZ2xlRmxvYXRfOwotICAgICAgc2luZ2xlRG91
YmxlXyA9IG90aGVyLnNpbmdsZURvdWJsZV87Ci0gICAgICBzaW5nbGVCb29sXyA9IG90aGVyLnNp
bmdsZUJvb2xfOwotICAgICAgc2luZ2xlU3RyaW5nXyA9IG90aGVyLnNpbmdsZVN0cmluZ187Ci0g
ICAgICBzaW5nbGVCeXRlc18gPSBvdGhlci5zaW5nbGVCeXRlc187Ci0gICAgICBTaW5nbGVOZXN0
ZWRNZXNzYWdlID0gb3RoZXIuc2luZ2xlTmVzdGVkTWVzc2FnZV8gIT0gbnVsbCA/IG90aGVyLlNp
bmdsZU5lc3RlZE1lc3NhZ2UuQ2xvbmUoKSA6IG51bGw7Ci0gICAgICBTaW5nbGVGb3JlaWduTWVz
c2FnZSA9IG90aGVyLnNpbmdsZUZvcmVpZ25NZXNzYWdlXyAhPSBudWxsID8gb3RoZXIuU2luZ2xl
Rm9yZWlnbk1lc3NhZ2UuQ2xvbmUoKSA6IG51bGw7Ci0gICAgICBTaW5nbGVJbXBvcnRNZXNzYWdl
ID0gb3RoZXIuc2luZ2xlSW1wb3J0TWVzc2FnZV8gIT0gbnVsbCA/IG90aGVyLlNpbmdsZUltcG9y
dE1lc3NhZ2UuQ2xvbmUoKSA6IG51bGw7Ci0gICAgICBzaW5nbGVOZXN0ZWRFbnVtXyA9IG90aGVy
LnNpbmdsZU5lc3RlZEVudW1fOwotICAgICAgc2luZ2xlRm9yZWlnbkVudW1fID0gb3RoZXIuc2lu
Z2xlRm9yZWlnbkVudW1fOwotICAgICAgc2luZ2xlSW1wb3J0RW51bV8gPSBvdGhlci5zaW5nbGVJ
bXBvcnRFbnVtXzsKLSAgICAgIFNpbmdsZVB1YmxpY0ltcG9ydE1lc3NhZ2UgPSBvdGhlci5zaW5n
bGVQdWJsaWNJbXBvcnRNZXNzYWdlXyAhPSBudWxsID8gb3RoZXIuU2luZ2xlUHVibGljSW1wb3J0
TWVzc2FnZS5DbG9uZSgpIDogbnVsbDsKLSAgICAgIHJlcGVhdGVkSW50MzJfID0gb3RoZXIucmVw
ZWF0ZWRJbnQzMl8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkSW50NjRfID0gb3RoZXIucmVwZWF0
ZWRJbnQ2NF8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkVWludDMyXyA9IG90aGVyLnJlcGVhdGVk
VWludDMyXy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRVaW50NjRfID0gb3RoZXIucmVwZWF0ZWRV
aW50NjRfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZFNpbnQzMl8gPSBvdGhlci5yZXBlYXRlZFNp
bnQzMl8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkU2ludDY0XyA9IG90aGVyLnJlcGVhdGVkU2lu
dDY0Xy5DbG9uZSgpOwotICAgICAgcmVwZWF0ZWRGaXhlZDMyXyA9IG90aGVyLnJlcGVhdGVkRml4
ZWQzMl8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkRml4ZWQ2NF8gPSBvdGhlci5yZXBlYXRlZEZp
eGVkNjRfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZFNmaXhlZDMyXyA9IG90aGVyLnJlcGVhdGVk
U2ZpeGVkMzJfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZFNmaXhlZDY0XyA9IG90aGVyLnJlcGVh
dGVkU2ZpeGVkNjRfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZEZsb2F0XyA9IG90aGVyLnJlcGVh
dGVkRmxvYXRfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZERvdWJsZV8gPSBvdGhlci5yZXBlYXRl
ZERvdWJsZV8uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkQm9vbF8gPSBvdGhlci5yZXBlYXRlZEJv
b2xfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZFN0cmluZ18gPSBvdGhlci5yZXBlYXRlZFN0cmlu
Z18uQ2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkQnl0ZXNfID0gb3RoZXIucmVwZWF0ZWRCeXRlc18u
Q2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkTmVzdGVkTWVzc2FnZV8gPSBvdGhlci5yZXBlYXRlZE5l
c3RlZE1lc3NhZ2VfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZEZvcmVpZ25NZXNzYWdlXyA9IG90
aGVyLnJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZEltcG9y
dE1lc3NhZ2VfID0gb3RoZXIucmVwZWF0ZWRJbXBvcnRNZXNzYWdlXy5DbG9uZSgpOwotICAgICAg
cmVwZWF0ZWROZXN0ZWRFbnVtXyA9IG90aGVyLnJlcGVhdGVkTmVzdGVkRW51bV8uQ2xvbmUoKTsK
LSAgICAgIHJlcGVhdGVkRm9yZWlnbkVudW1fID0gb3RoZXIucmVwZWF0ZWRGb3JlaWduRW51bV8u
Q2xvbmUoKTsKLSAgICAgIHJlcGVhdGVkSW1wb3J0RW51bV8gPSBvdGhlci5yZXBlYXRlZEltcG9y
dEVudW1fLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZFB1YmxpY0ltcG9ydE1lc3NhZ2VfID0gb3Ro
ZXIucmVwZWF0ZWRQdWJsaWNJbXBvcnRNZXNzYWdlXy5DbG9uZSgpOwotICAgICAgc3dpdGNoIChv
dGhlci5PbmVvZkZpZWxkQ2FzZSkgewotICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2Uu
T25lb2ZVaW50MzI6Ci0gICAgICAgICAgT25lb2ZVaW50MzIgPSBvdGhlci5PbmVvZlVpbnQzMjsK
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9m
TmVzdGVkTWVzc2FnZToKLSAgICAgICAgICBPbmVvZk5lc3RlZE1lc3NhZ2UgPSBvdGhlci5PbmVv
Zk5lc3RlZE1lc3NhZ2UuQ2xvbmUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBP
bmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mU3RyaW5nOgotICAgICAgICAgIE9uZW9mU3RyaW5nID0g
b3RoZXIuT25lb2ZTdHJpbmc7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25lb2ZG
aWVsZE9uZW9mQ2FzZS5PbmVvZkJ5dGVzOgotICAgICAgICAgIE9uZW9mQnl0ZXMgPSBvdGhlci5P
bmVvZkJ5dGVzOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgfQotCi0gICAgcHVi
bGljIFRlc3RBbGxUeXBlcyBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgVGVzdEFsbFR5cGVz
KHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAi
c2luZ2xlX2ludDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTaW5n
bGVJbnQzMkZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGludCBzaW5nbGVJbnQzMl87Ci0g
ICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgU2luZ3VsYXIKLSAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBpbnQgU2luZ2xlSW50MzIgewotICAgICAgZ2V0IHsgcmV0dXJuIHNpbmdsZUlu
dDMyXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgc2luZ2xlSW50MzJfID0gdmFsdWU7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzaW5n
bGVfaW50NjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFNpbmdsZUlu
dDY0RmllbGROdW1iZXIgPSAyOwotICAgIHByaXZhdGUgbG9uZyBzaW5nbGVJbnQ2NF87Ci0gICAg
cHVibGljIGxvbmcgU2luZ2xlSW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJuIHNpbmdsZUludDY0
XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgc2luZ2xlSW50NjRfID0gdmFsdWU7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzaW5nbGVf
dWludDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTaW5nbGVVaW50
MzJGaWVsZE51bWJlciA9IDM7Ci0gICAgcHJpdmF0ZSB1aW50IHNpbmdsZVVpbnQzMl87Ci0gICAg
cHVibGljIHVpbnQgU2luZ2xlVWludDMyIHsKLSAgICAgIGdldCB7IHJldHVybiBzaW5nbGVVaW50
MzJfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBzaW5nbGVVaW50MzJfID0gdmFsdWU7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzaW5n
bGVfdWludDY0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTaW5nbGVV
aW50NjRGaWVsZE51bWJlciA9IDQ7Ci0gICAgcHJpdmF0ZSB1bG9uZyBzaW5nbGVVaW50NjRfOwot
ICAgIHB1YmxpYyB1bG9uZyBTaW5nbGVVaW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJuIHNpbmds
ZVVpbnQ2NF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHNpbmdsZVVpbnQ2NF8gPSB2YWx1ZTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
InNpbmdsZV9zaW50MzIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFNp
bmdsZVNpbnQzMkZpZWxkTnVtYmVyID0gNTsKLSAgICBwcml2YXRlIGludCBzaW5nbGVTaW50MzJf
OwotICAgIHB1YmxpYyBpbnQgU2luZ2xlU2ludDMyIHsKLSAgICAgIGdldCB7IHJldHVybiBzaW5n
bGVTaW50MzJfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBzaW5nbGVTaW50MzJfID0gdmFsdWU7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJzaW5nbGVfc2ludDY0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBT
aW5nbGVTaW50NjRGaWVsZE51bWJlciA9IDY7Ci0gICAgcHJpdmF0ZSBsb25nIHNpbmdsZVNpbnQ2
NF87Ci0gICAgcHVibGljIGxvbmcgU2luZ2xlU2ludDY0IHsKLSAgICAgIGdldCB7IHJldHVybiBz
aW5nbGVTaW50NjRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBzaW5nbGVTaW50NjRfID0gdmFs
dWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3Ig
dGhlICJzaW5nbGVfZml4ZWQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBp
bnQgU2luZ2xlRml4ZWQzMkZpZWxkTnVtYmVyID0gNzsKLSAgICBwcml2YXRlIHVpbnQgc2luZ2xl
Rml4ZWQzMl87Ci0gICAgcHVibGljIHVpbnQgU2luZ2xlRml4ZWQzMiB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gc2luZ2xlRml4ZWQzMl87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHNpbmdsZUZpeGVk
MzJfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJzaW5nbGVfZml4ZWQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgU2luZ2xlRml4ZWQ2NEZpZWxkTnVtYmVyID0gODsKLSAgICBwcml2YXRlIHVs
b25nIHNpbmdsZUZpeGVkNjRfOwotICAgIHB1YmxpYyB1bG9uZyBTaW5nbGVGaXhlZDY0IHsKLSAg
ICAgIGdldCB7IHJldHVybiBzaW5nbGVGaXhlZDY0XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
c2luZ2xlRml4ZWQ2NF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1h
cnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInNpbmdsZV9zZml4ZWQzMiIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU2luZ2xlU2ZpeGVkMzJGaWVsZE51bWJlciA9IDk7Ci0g
ICAgcHJpdmF0ZSBpbnQgc2luZ2xlU2ZpeGVkMzJfOwotICAgIHB1YmxpYyBpbnQgU2luZ2xlU2Zp
eGVkMzIgewotICAgICAgZ2V0IHsgcmV0dXJuIHNpbmdsZVNmaXhlZDMyXzsgfQotICAgICAgc2V0
IHsKLSAgICAgICAgc2luZ2xlU2ZpeGVkMzJfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzaW5nbGVfc2ZpeGVkNjQiIGZp
ZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFNpbmdsZVNmaXhlZDY0RmllbGRO
dW1iZXIgPSAxMDsKLSAgICBwcml2YXRlIGxvbmcgc2luZ2xlU2ZpeGVkNjRfOwotICAgIHB1Ymxp
YyBsb25nIFNpbmdsZVNmaXhlZDY0IHsKLSAgICAgIGdldCB7IHJldHVybiBzaW5nbGVTZml4ZWQ2
NF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHNpbmdsZVNmaXhlZDY0XyA9IHZhbHVlOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic2lu
Z2xlX2Zsb2F0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTaW5nbGVG
bG9hdEZpZWxkTnVtYmVyID0gMTE7Ci0gICAgcHJpdmF0ZSBmbG9hdCBzaW5nbGVGbG9hdF87Ci0g
ICAgcHVibGljIGZsb2F0IFNpbmdsZUZsb2F0IHsKLSAgICAgIGdldCB7IHJldHVybiBzaW5nbGVG
bG9hdF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHNpbmdsZUZsb2F0XyA9IHZhbHVlOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic2lu
Z2xlX2RvdWJsZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU2luZ2xl
RG91YmxlRmllbGROdW1iZXIgPSAxMjsKLSAgICBwcml2YXRlIGRvdWJsZSBzaW5nbGVEb3VibGVf
OwotICAgIHB1YmxpYyBkb3VibGUgU2luZ2xlRG91YmxlIHsKLSAgICAgIGdldCB7IHJldHVybiBz
aW5nbGVEb3VibGVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBzaW5nbGVEb3VibGVfID0gdmFs
dWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3Ig
dGhlICJzaW5nbGVfYm9vbCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
U2luZ2xlQm9vbEZpZWxkTnVtYmVyID0gMTM7Ci0gICAgcHJpdmF0ZSBib29sIHNpbmdsZUJvb2xf
OwotICAgIHB1YmxpYyBib29sIFNpbmdsZUJvb2wgewotICAgICAgZ2V0IHsgcmV0dXJuIHNpbmds
ZUJvb2xfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBzaW5nbGVCb29sXyA9IHZhbHVlOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic2lu
Z2xlX3N0cmluZyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU2luZ2xl
U3RyaW5nRmllbGROdW1iZXIgPSAxNDsKLSAgICBwcml2YXRlIHN0cmluZyBzaW5nbGVTdHJpbmdf
ID0gIiI7Ci0gICAgcHVibGljIHN0cmluZyBTaW5nbGVTdHJpbmcgewotICAgICAgZ2V0IHsgcmV0
dXJuIHNpbmdsZVN0cmluZ187IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHNpbmdsZVN0cmluZ18g
PSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJz
aW5nbGVfYnl0ZXMiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFNpbmds
ZUJ5dGVzRmllbGROdW1iZXIgPSAxNTsKLSAgICBwcml2YXRlIHBiOjpCeXRlU3RyaW5nIHNpbmds
ZUJ5dGVzXyA9IHBiOjpCeXRlU3RyaW5nLkVtcHR5OwotICAgIHB1YmxpYyBwYjo6Qnl0ZVN0cmlu
ZyBTaW5nbGVCeXRlcyB7Ci0gICAgICBnZXQgeyByZXR1cm4gc2luZ2xlQnl0ZXNfOyB9Ci0gICAg
ICBzZXQgewotICAgICAgICBzaW5nbGVCeXRlc18gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNo
ZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxz
dW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzaW5nbGVfbmVzdGVkX21lc3NhZ2UiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFNpbmdsZU5lc3RlZE1lc3NhZ2VGaWVs
ZE51bWJlciA9IDE4OwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3Rvcy5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkTWVzc2FnZSBzaW5nbGVOZXN0ZWRNZXNzYWdl
XzsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0QWxs
VHlwZXMuVHlwZXMuTmVzdGVkTWVzc2FnZSBTaW5nbGVOZXN0ZWRNZXNzYWdlIHsKLSAgICAgIGdl
dCB7IHJldHVybiBzaW5nbGVOZXN0ZWRNZXNzYWdlXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
c2luZ2xlTmVzdGVkTWVzc2FnZV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8g
PHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInNpbmdsZV9mb3JlaWduX21lc3NhZ2UiIGZp
ZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFNpbmdsZUZvcmVpZ25NZXNzYWdl
RmllbGROdW1iZXIgPSAxOTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRl
c3RQcm90b3MuRm9yZWlnbk1lc3NhZ2Ugc2luZ2xlRm9yZWlnbk1lc3NhZ2VfOwotICAgIHB1Ymxp
YyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25NZXNzYWdlIFNpbmds
ZUZvcmVpZ25NZXNzYWdlIHsKLSAgICAgIGdldCB7IHJldHVybiBzaW5nbGVGb3JlaWduTWVzc2Fn
ZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHNpbmdsZUZvcmVpZ25NZXNzYWdlXyA9IHZhbHVl
OwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRo
ZSAic2luZ2xlX2ltcG9ydF9tZXNzYWdlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBTaW5nbGVJbXBvcnRNZXNzYWdlRmllbGROdW1iZXIgPSAyMDsKLSAgICBwcml2YXRl
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuSW1wb3J0TWVzc2FnZSBzaW5nbGVJ
bXBvcnRNZXNzYWdlXzsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3Rvcy5JbXBvcnRNZXNzYWdlIFNpbmdsZUltcG9ydE1lc3NhZ2UgewotICAgICAgZ2V0IHsgcmV0
dXJuIHNpbmdsZUltcG9ydE1lc3NhZ2VfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBzaW5nbGVJ
bXBvcnRNZXNzYWdlXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic2luZ2xlX25lc3RlZF9lbnVtIiBmaWVsZC48L3N1bW1h
cnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTaW5nbGVOZXN0ZWRFbnVtRmllbGROdW1iZXIgPSAy
MTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFs
bFR5cGVzLlR5cGVzLk5lc3RlZEVudW0gc2luZ2xlTmVzdGVkRW51bV8gPSAwOwotICAgIHB1Ymxp
YyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBlcy5UeXBlcy5O
ZXN0ZWRFbnVtIFNpbmdsZU5lc3RlZEVudW0gewotICAgICAgZ2V0IHsgcmV0dXJuIHNpbmdsZU5l
c3RlZEVudW1fOyB9Ci0gICAgICBzZXQgewotICAgICAgICBzaW5nbGVOZXN0ZWRFbnVtXyA9IHZh
bHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAic2luZ2xlX2ZvcmVpZ25fZW51bSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgU2luZ2xlRm9yZWlnbkVudW1GaWVsZE51bWJlciA9IDIyOwotICAgIHByaXZhdGUg
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb3JlaWduRW51bSBzaW5nbGVGb3Jl
aWduRW51bV8gPSAwOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zLkZvcmVpZ25FbnVtIFNpbmdsZUZvcmVpZ25FbnVtIHsKLSAgICAgIGdldCB7IHJldHVybiBz
aW5nbGVGb3JlaWduRW51bV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHNpbmdsZUZvcmVpZ25F
bnVtXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBu
dW1iZXIgZm9yIHRoZSAic2luZ2xlX2ltcG9ydF9lbnVtIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBTaW5nbGVJbXBvcnRFbnVtRmllbGROdW1iZXIgPSAyMzsKLSAgICBw
cml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuSW1wb3J0RW51bSBzaW5n
bGVJbXBvcnRFbnVtXyA9IDA7Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRl
c3RQcm90b3MuSW1wb3J0RW51bSBTaW5nbGVJbXBvcnRFbnVtIHsKLSAgICAgIGdldCB7IHJldHVy
biBzaW5nbGVJbXBvcnRFbnVtXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgc2luZ2xlSW1wb3J0
RW51bV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgInNpbmdsZV9wdWJsaWNfaW1wb3J0X21lc3NhZ2UiIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFNpbmdsZVB1YmxpY0ltcG9ydE1lc3NhZ2VGaWVs
ZE51bWJlciA9IDI2OwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3Rvcy5QdWJsaWNJbXBvcnRNZXNzYWdlIHNpbmdsZVB1YmxpY0ltcG9ydE1lc3NhZ2VfOwotICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIERlZmluZWQgaW4gdW5pdHRlc3RfaW1wb3J0X3B1Ymxp
Yy5wcm90bwotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlRlc3RQcm90b3MuUHVibGljSW1wb3J0TWVzc2FnZSBTaW5nbGVQdWJsaWNJbXBvcnRN
ZXNzYWdlIHsKLSAgICAgIGdldCB7IHJldHVybiBzaW5nbGVQdWJsaWNJbXBvcnRNZXNzYWdlXzsg
fQotICAgICAgc2V0IHsKLSAgICAgICAgc2luZ2xlUHVibGljSW1wb3J0TWVzc2FnZV8gPSB2YWx1
ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0
aGUgInJlcGVhdGVkX2ludDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGlu
dCBSZXBlYXRlZEludDMyRmllbGROdW1iZXIgPSAzMTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFk
b25seSBwYjo6RmllbGRDb2RlYzxpbnQ+IF9yZXBlYXRlZF9yZXBlYXRlZEludDMyX2NvZGVjCi0g
ICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9ySW50MzIoMjUwKTsKLSAgICBwcml2YXRlIHJlYWRv
bmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+IHJlcGVhdGVkSW50MzJfID0gbmV3IHBiYzo6UmVw
ZWF0ZWRGaWVsZDxpbnQ+KCk7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgUmVwZWF0ZWQK
LSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PiBS
ZXBlYXRlZEludDMyIHsKLSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZEludDMyXzsgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfaW50
NjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkSW50NjRG
aWVsZE51bWJlciA9IDMyOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENv
ZGVjPGxvbmc+IF9yZXBlYXRlZF9yZXBlYXRlZEludDY0X2NvZGVjCi0gICAgICAgID0gcGI6OkZp
ZWxkQ29kZWMuRm9ySW50NjQoMjU4KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0
ZWRGaWVsZDxsb25nPiByZXBlYXRlZEludDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9u
Zz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc+IFJlcGVhdGVkSW50NjQg
ewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkSW50NjRfOyB9Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF91aW50MzIiIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkVWludDMyRmllbGROdW1iZXIg
PSAzMzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1aW50PiBf
cmVwZWF0ZWRfcmVwZWF0ZWRVaW50MzJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5G
b3JVSW50MzIoMjY2KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDx1
aW50PiByZXBlYXRlZFVpbnQzMl8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPHVpbnQ+KCk7Ci0g
ICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDx1aW50PiBSZXBlYXRlZFVpbnQzMiB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRVaW50MzJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1t
YXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF91aW50NjQiIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkVWludDY0RmllbGROdW1iZXIgPSAzNDsK
LSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1bG9uZz4gX3JlcGVh
dGVkX3JlcGVhdGVkVWludDY0X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yVUlu
dDY0KDI3NCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8dWxvbmc+
IHJlcGVhdGVkVWludDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8dWxvbmc+KCk7Ci0gICAg
cHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDx1bG9uZz4gUmVwZWF0ZWRVaW50NjQgewotICAgICAg
Z2V0IHsgcmV0dXJuIHJlcGVhdGVkVWludDY0XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfc2ludDMyIiBmaWVsZC48L3N1bW1hcnk+
Ci0gICAgcHVibGljIGNvbnN0IGludCBSZXBlYXRlZFNpbnQzMkZpZWxkTnVtYmVyID0gMzU7Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8aW50PiBfcmVwZWF0ZWRf
cmVwZWF0ZWRTaW50MzJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JTSW50MzIo
MjgyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+IHJlcGVh
dGVkU2ludDMyXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PigpOwotICAgIHB1YmxpYyBw
YmM6OlJlcGVhdGVkRmllbGQ8aW50PiBSZXBlYXRlZFNpbnQzMiB7Ci0gICAgICBnZXQgeyByZXR1
cm4gcmVwZWF0ZWRTaW50MzJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJyZXBlYXRlZF9zaW50NjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IFJlcGVhdGVkU2ludDY0RmllbGROdW1iZXIgPSAzNjsKLSAgICBwcml2YXRl
IHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxsb25nPiBfcmVwZWF0ZWRfcmVwZWF0ZWRT
aW50NjRfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JTSW50NjQoMjkwKTsKLSAg
ICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxsb25nPiByZXBlYXRlZFNpbnQ2
NF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVw
ZWF0ZWRGaWVsZDxsb25nPiBSZXBlYXRlZFNpbnQ2NCB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVw
ZWF0ZWRTaW50NjRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBm
b3IgdGhlICJyZXBlYXRlZF9maXhlZDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBSZXBlYXRlZEZpeGVkMzJGaWVsZE51bWJlciA9IDM3OwotICAgIHByaXZhdGUgc3Rh
dGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHVpbnQ+IF9yZXBlYXRlZF9yZXBlYXRlZEZpeGVk
MzJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JGaXhlZDMyKDI5OCk7Ci0gICAg
cHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8dWludD4gcmVwZWF0ZWRGaXhlZDMy
XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8dWludD4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBl
YXRlZEZpZWxkPHVpbnQ+IFJlcGVhdGVkRml4ZWQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVw
ZWF0ZWRGaXhlZDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAicmVwZWF0ZWRfZml4ZWQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgUmVwZWF0ZWRGaXhlZDY0RmllbGROdW1iZXIgPSAzODsKLSAgICBwcml2YXRlIHN0
YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1bG9uZz4gX3JlcGVhdGVkX3JlcGVhdGVkRml4
ZWQ2NF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckZpeGVkNjQoMzA2KTsKLSAg
ICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDx1bG9uZz4gcmVwZWF0ZWRGaXhl
ZDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8dWxvbmc+KCk7Ci0gICAgcHVibGljIHBiYzo6
UmVwZWF0ZWRGaWVsZDx1bG9uZz4gUmVwZWF0ZWRGaXhlZDY0IHsKLSAgICAgIGdldCB7IHJldHVy
biByZXBlYXRlZEZpeGVkNjRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJyZXBlYXRlZF9zZml4ZWQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRTZml4ZWQzMkZpZWxkTnVtYmVyID0gMzk7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8aW50PiBfcmVwZWF0ZWRfcmVwZWF0
ZWRTZml4ZWQzMl9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvclNGaXhlZDMyKDMx
NCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PiByZXBlYXRl
ZFNmaXhlZDMyXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PigpOwotICAgIHB1YmxpYyBw
YmM6OlJlcGVhdGVkRmllbGQ8aW50PiBSZXBlYXRlZFNmaXhlZDMyIHsKLSAgICAgIGdldCB7IHJl
dHVybiByZXBlYXRlZFNmaXhlZDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfc2ZpeGVkNjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkU2ZpeGVkNjRGaWVsZE51bWJlciA9IDQwOwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGxvbmc+IF9yZXBlYXRlZF9y
ZXBlYXRlZFNmaXhlZDY0X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU0ZpeGVk
NjQoMzIyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxsb25nPiBy
ZXBlYXRlZFNmaXhlZDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz4oKTsKLSAgICBw
dWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc+IFJlcGVhdGVkU2ZpeGVkNjQgewotICAgICAg
Z2V0IHsgcmV0dXJuIHJlcGVhdGVkU2ZpeGVkNjRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1t
YXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9mbG9hdCIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRGbG9hdEZpZWxkTnVtYmVyID0gNDE7Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8ZmxvYXQ+IF9yZXBlYXRl
ZF9yZXBlYXRlZEZsb2F0X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yRmxvYXQo
MzMwKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxmbG9hdD4gcmVw
ZWF0ZWRGbG9hdF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGZsb2F0PigpOwotICAgIHB1Ymxp
YyBwYmM6OlJlcGVhdGVkRmllbGQ8ZmxvYXQ+IFJlcGVhdGVkRmxvYXQgewotICAgICAgZ2V0IHsg
cmV0dXJuIHJlcGVhdGVkRmxvYXRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9kb3VibGUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IFJlcGVhdGVkRG91YmxlRmllbGROdW1iZXIgPSA0MjsKLSAgICBwcml2
YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxkb3VibGU+IF9yZXBlYXRlZF9yZXBl
YXRlZERvdWJsZV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckRvdWJsZSgzMzgp
OwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGRvdWJsZT4gcmVwZWF0
ZWREb3VibGVfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxkb3VibGU+KCk7Ci0gICAgcHVibGlj
IHBiYzo6UmVwZWF0ZWRGaWVsZDxkb3VibGU+IFJlcGVhdGVkRG91YmxlIHsKLSAgICAgIGdldCB7
IHJldHVybiByZXBlYXRlZERvdWJsZV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX2Jvb2wiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IFJlcGVhdGVkQm9vbEZpZWxkTnVtYmVyID0gNDM7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Ym9vbD4gX3JlcGVhdGVkX3JlcGVhdGVk
Qm9vbF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckJvb2woMzQ2KTsKLSAgICBw
cml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxib29sPiByZXBlYXRlZEJvb2xfID0g
bmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxib29sPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVk
RmllbGQ8Ym9vbD4gUmVwZWF0ZWRCb29sIHsKLSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZEJv
b2xfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJy
ZXBlYXRlZF9zdHJpbmciIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJl
cGVhdGVkU3RyaW5nRmllbGROdW1iZXIgPSA0NDsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25s
eSBwYjo6RmllbGRDb2RlYzxzdHJpbmc+IF9yZXBlYXRlZF9yZXBlYXRlZFN0cmluZ19jb2RlYwot
ICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvclN0cmluZygzNTQpOwotICAgIHByaXZhdGUgcmVh
ZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPHN0cmluZz4gcmVwZWF0ZWRTdHJpbmdfID0gbmV3IHBi
Yzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVs
ZDxzdHJpbmc+IFJlcGVhdGVkU3RyaW5nIHsKLSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZFN0
cmluZ187IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
InJlcGVhdGVkX2J5dGVzIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBS
ZXBlYXRlZEJ5dGVzRmllbGROdW1iZXIgPSA0NTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25s
eSBwYjo6RmllbGRDb2RlYzxwYjo6Qnl0ZVN0cmluZz4gX3JlcGVhdGVkX3JlcGVhdGVkQnl0ZXNf
Y29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JCeXRlcygzNjIpOwotICAgIHByaXZh
dGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPHBiOjpCeXRlU3RyaW5nPiByZXBlYXRlZEJ5
dGVzXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8cGI6OkJ5dGVTdHJpbmc+KCk7Ci0gICAgcHVi
bGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxwYjo6Qnl0ZVN0cmluZz4gUmVwZWF0ZWRCeXRlcyB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRCeXRlc187IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBSZXBlYXRlZE5lc3RlZE1lc3NhZ2VG
aWVsZE51bWJlciA9IDQ4OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENv
ZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzLlR5cGVz
Lk5lc3RlZE1lc3NhZ2U+IF9yZXBlYXRlZF9yZXBlYXRlZE5lc3RlZE1lc3NhZ2VfY29kZWMKLSAg
ICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDM4NiwgZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuVGVzdFByb3Rvcy5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkTWVzc2FnZS5QYXJzZXIp
OwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2U+IHJl
cGVhdGVkTmVzdGVkTWVzc2FnZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2U+
KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlPiBSZXBlYXRlZE5l
c3RlZE1lc3NhZ2UgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkTmVzdGVkTWVzc2FnZV87
IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVh
dGVkX2ZvcmVpZ25fbWVzc2FnZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBp
bnQgUmVwZWF0ZWRGb3JlaWduTWVzc2FnZUZpZWxkTnVtYmVyID0gNDk7Ci0gICAgcHJpdmF0ZSBz
dGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVz
dFByb3Rvcy5Gb3JlaWduTWVzc2FnZT4gX3JlcGVhdGVkX3JlcGVhdGVkRm9yZWlnbk1lc3NhZ2Vf
Y29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDM5NCwgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb3JlaWduTWVzc2FnZS5QYXJzZXIpOwotICAgIHBy
aXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LlRlc3RQcm90b3MuRm9yZWlnbk1lc3NhZ2U+IHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VfID0gbmV3
IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZv
cmVpZ25NZXNzYWdlPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb3JlaWduTWVzc2FnZT4gUmVwZWF0ZWRGb3JlaWdu
TWVzc2FnZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRGb3JlaWduTWVzc2FnZV87IH0K
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVk
X2ltcG9ydF9tZXNzYWdlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBS
ZXBlYXRlZEltcG9ydE1lc3NhZ2VGaWVsZE51bWJlciA9IDUwOwotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuSW1wb3J0TWVzc2FnZT4gX3JlcGVhdGVkX3JlcGVhdGVkSW1wb3J0TWVzc2FnZV9jb2RlYwot
ICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoNDAyLCBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5UZXN0UHJvdG9zLkltcG9ydE1lc3NhZ2UuUGFyc2VyKTsKLSAgICBwcml2YXRlIHJl
YWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zLkltcG9ydE1lc3NhZ2U+IHJlcGVhdGVkSW1wb3J0TWVzc2FnZV8gPSBuZXcgcGJjOjpSZXBl
YXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuSW1wb3J0TWVzc2Fn
ZT4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlRlc3RQcm90b3MuSW1wb3J0TWVzc2FnZT4gUmVwZWF0ZWRJbXBvcnRNZXNzYWdlIHsKLSAg
ICAgIGdldCB7IHJldHVybiByZXBlYXRlZEltcG9ydE1lc3NhZ2VfOyB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9uZXN0ZWRfZW51bSIg
ZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWROZXN0ZWRFbnVt
RmllbGROdW1iZXIgPSA1MTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRD
b2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBlcy5UeXBl
cy5OZXN0ZWRFbnVtPiBfcmVwZWF0ZWRfcmVwZWF0ZWROZXN0ZWRFbnVtX2NvZGVjCi0gICAgICAg
ID0gcGI6OkZpZWxkQ29kZWMuRm9yRW51bSg0MTAsIHggPT4gKGludCkgeCwgeCA9PiAoZ2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51
bSkgeCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51bT4g
cmVwZWF0ZWROZXN0ZWRFbnVtXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkRW51bT4oKTsK
LSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRl
c3RQcm90b3MuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZEVudW0+IFJlcGVhdGVkTmVzdGVkRW51
bSB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWROZXN0ZWRFbnVtXzsgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfZm9yZWlnbl9l
bnVtIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBSZXBlYXRlZEZvcmVp
Z25FbnVtRmllbGROdW1iZXIgPSA1MjsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6
RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25FbnVt
PiBfcmVwZWF0ZWRfcmVwZWF0ZWRGb3JlaWduRW51bV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVs
ZENvZGVjLkZvckVudW0oNDE4LCB4ID0+IChpbnQpIHgsIHggPT4gKGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbkVudW0pIHgpOwotICAgIHByaXZhdGUgcmVhZG9ubHkg
cGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9y
ZWlnbkVudW0+IHJlcGVhdGVkRm9yZWlnbkVudW1fID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25FbnVtPigpOwotICAgIHB1
YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rv
cy5Gb3JlaWduRW51bT4gUmVwZWF0ZWRGb3JlaWduRW51bSB7Ci0gICAgICBnZXQgeyByZXR1cm4g
cmVwZWF0ZWRGb3JlaWduRW51bV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX2ltcG9ydF9lbnVtIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBSZXBlYXRlZEltcG9ydEVudW1GaWVsZE51bWJlciA9IDUzOwot
ICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuSW1wb3J0RW51bT4gX3JlcGVhdGVkX3JlcGVhdGVkSW1wb3J0
RW51bV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckVudW0oNDI2LCB4ID0+IChp
bnQpIHgsIHggPT4gKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuSW1wb3J0RW51
bSkgeCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5JbXBvcnRFbnVtPiByZXBlYXRlZEltcG9ydEVudW1f
ID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zLkltcG9ydEVudW0+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkltcG9ydEVudW0+IFJlcGVhdGVkSW1wb3J0RW51
bSB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRJbXBvcnRFbnVtXzsgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfcHVibGljX2lt
cG9ydF9tZXNzYWdlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBSZXBl
YXRlZFB1YmxpY0ltcG9ydE1lc3NhZ2VGaWVsZE51bWJlciA9IDU0OwotICAgIHByaXZhdGUgc3Rh
dGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQ
cm90b3MuUHVibGljSW1wb3J0TWVzc2FnZT4gX3JlcGVhdGVkX3JlcGVhdGVkUHVibGljSW1wb3J0
TWVzc2FnZV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoNDM0LCBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlB1YmxpY0ltcG9ydE1lc3NhZ2UuUGFy
c2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlB1YmxpY0ltcG9ydE1lc3NhZ2U+IHJlcGVhdGVkUHVi
bGljSW1wb3J0TWVzc2FnZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuUHVibGljSW1wb3J0TWVzc2FnZT4oKTsKLSAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgLy8vICBEZWZpbmVkIGluIHVuaXR0ZXN0X2ltcG9ydF9wdWJsaWMucHJvdG8K
LSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5QdWJsaWNJbXBvcnRNZXNzYWdlPiBSZXBlYXRl
ZFB1YmxpY0ltcG9ydE1lc3NhZ2UgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkUHVibGlj
SW1wb3J0TWVzc2FnZV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVy
IGZvciB0aGUgIm9uZW9mX3VpbnQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgT25lb2ZVaW50MzJGaWVsZE51bWJlciA9IDExMTsKLSAgICBwdWJsaWMgdWludCBPbmVv
ZlVpbnQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gb25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmll
bGRPbmVvZkNhc2UuT25lb2ZVaW50MzIgPyAodWludCkgb25lb2ZGaWVsZF8gOiAwOyB9Ci0gICAg
ICBzZXQgewotICAgICAgICBvbmVvZkZpZWxkXyA9IHZhbHVlOwotICAgICAgICBvbmVvZkZpZWxk
Q2FzZV8gPSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mVWludDMyOwotICAgICAgfQotICAgIH0K
LQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib25lb2ZfbmVzdGVkX21l
c3NhZ2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9uZW9mTmVzdGVk
TWVzc2FnZUZpZWxkTnVtYmVyID0gMTEyOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlIE9uZW9mTmVz
dGVkTWVzc2FnZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gb25lb2ZGaWVsZENhc2VfID09IE9uZW9m
RmllbGRPbmVvZkNhc2UuT25lb2ZOZXN0ZWRNZXNzYWdlID8gKGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UpIG9uZW9mRmll
bGRfIDogbnVsbDsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb25lb2ZGaWVsZF8gPSB2YWx1ZTsK
LSAgICAgICAgb25lb2ZGaWVsZENhc2VfID0gdmFsdWUgPT0gbnVsbCA/IE9uZW9mRmllbGRPbmVv
ZkNhc2UuTm9uZSA6IE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZOZXN0ZWRNZXNzYWdlOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib25l
b2Zfc3RyaW5nIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPbmVvZlN0
cmluZ0ZpZWxkTnVtYmVyID0gMTEzOwotICAgIHB1YmxpYyBzdHJpbmcgT25lb2ZTdHJpbmcgewot
ICAgICAgZ2V0IHsgcmV0dXJuIG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNl
Lk9uZW9mU3RyaW5nID8gKHN0cmluZykgb25lb2ZGaWVsZF8gOiAiIjsgfQotICAgICAgc2V0IHsK
LSAgICAgICAgb25lb2ZGaWVsZF8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVs
bCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICAgIG9uZW9mRmllbGRDYXNlXyA9IE9uZW9mRmllbGRP
bmVvZkNhc2UuT25lb2ZTdHJpbmc7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJvbmVvZl9ieXRlcyIgZmllbGQuPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBjb25zdCBpbnQgT25lb2ZCeXRlc0ZpZWxkTnVtYmVyID0gMTE0OwotICAgIHB1Ymxp
YyBwYjo6Qnl0ZVN0cmluZyBPbmVvZkJ5dGVzIHsKLSAgICAgIGdldCB7IHJldHVybiBvbmVvZkZp
ZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZkJ5dGVzID8gKHBiOjpCeXRlU3Ry
aW5nKSBvbmVvZkZpZWxkXyA6IHBiOjpCeXRlU3RyaW5nLkVtcHR5OyB9Ci0gICAgICBzZXQgewot
ICAgICAgICBvbmVvZkZpZWxkXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxs
KHZhbHVlLCAidmFsdWUiKTsKLSAgICAgICAgb25lb2ZGaWVsZENhc2VfID0gT25lb2ZGaWVsZE9u
ZW9mQ2FzZS5PbmVvZkJ5dGVzOwotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgb2JqZWN0
IG9uZW9mRmllbGRfOwotICAgIC8vLyA8c3VtbWFyeT5FbnVtIG9mIHBvc3NpYmxlIGNhc2VzIGZv
ciB0aGUgIm9uZW9mX2ZpZWxkIiBvbmVvZi48L3N1bW1hcnk+Ci0gICAgcHVibGljIGVudW0gT25l
b2ZGaWVsZE9uZW9mQ2FzZSB7Ci0gICAgICBOb25lID0gMCwKLSAgICAgIE9uZW9mVWludDMyID0g
MTExLAotICAgICAgT25lb2ZOZXN0ZWRNZXNzYWdlID0gMTEyLAotICAgICAgT25lb2ZTdHJpbmcg
PSAxMTMsCi0gICAgICBPbmVvZkJ5dGVzID0gMTE0LAotICAgIH0KLSAgICBwcml2YXRlIE9uZW9m
RmllbGRPbmVvZkNhc2Ugb25lb2ZGaWVsZENhc2VfID0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5Ob25l
OwotICAgIHB1YmxpYyBPbmVvZkZpZWxkT25lb2ZDYXNlIE9uZW9mRmllbGRDYXNlIHsKLSAgICAg
IGdldCB7IHJldHVybiBvbmVvZkZpZWxkQ2FzZV87IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBDbGVhck9uZW9mRmllbGQoKSB7Ci0gICAgICBvbmVvZkZpZWxkQ2FzZV8gPSBPbmVvZkZpZWxk
T25lb2ZDYXNlLk5vbmU7Ci0gICAgICBvbmVvZkZpZWxkXyA9IG51bGw7Ci0gICAgfQotCi0gICAg
cHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJu
IEVxdWFscyhvdGhlciBhcyBUZXN0QWxsVHlwZXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29s
IEVxdWFscyhUZXN0QWxsVHlwZXMgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMo
b3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlm
IChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgfQotICAgICAgaWYgKFNpbmdsZUludDMyICE9IG90aGVyLlNpbmdsZUludDMyKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZiAoU2luZ2xlSW50NjQgIT0gb3RoZXIuU2luZ2xlSW50NjQpIHJl
dHVybiBmYWxzZTsKLSAgICAgIGlmIChTaW5nbGVVaW50MzIgIT0gb3RoZXIuU2luZ2xlVWludDMy
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoU2luZ2xlVWludDY0ICE9IG90aGVyLlNpbmdsZVVp
bnQ2NCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKFNpbmdsZVNpbnQzMiAhPSBvdGhlci5TaW5n
bGVTaW50MzIpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChTaW5nbGVTaW50NjQgIT0gb3RoZXIu
U2luZ2xlU2ludDY0KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoU2luZ2xlRml4ZWQzMiAhPSBv
dGhlci5TaW5nbGVGaXhlZDMyKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoU2luZ2xlRml4ZWQ2
NCAhPSBvdGhlci5TaW5nbGVGaXhlZDY0KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoU2luZ2xl
U2ZpeGVkMzIgIT0gb3RoZXIuU2luZ2xlU2ZpeGVkMzIpIHJldHVybiBmYWxzZTsKLSAgICAgIGlm
IChTaW5nbGVTZml4ZWQ2NCAhPSBvdGhlci5TaW5nbGVTZml4ZWQ2NCkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYgKFNpbmdsZUZsb2F0ICE9IG90aGVyLlNpbmdsZUZsb2F0KSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoU2luZ2xlRG91YmxlICE9IG90aGVyLlNpbmdsZURvdWJsZSkgcmV0dXJuIGZh
bHNlOwotICAgICAgaWYgKFNpbmdsZUJvb2wgIT0gb3RoZXIuU2luZ2xlQm9vbCkgcmV0dXJuIGZh
bHNlOwotICAgICAgaWYgKFNpbmdsZVN0cmluZyAhPSBvdGhlci5TaW5nbGVTdHJpbmcpIHJldHVy
biBmYWxzZTsKLSAgICAgIGlmIChTaW5nbGVCeXRlcyAhPSBvdGhlci5TaW5nbGVCeXRlcykgcmV0
dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKFNpbmdsZU5lc3RlZE1lc3NhZ2Us
IG90aGVyLlNpbmdsZU5lc3RlZE1lc3NhZ2UpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9i
amVjdC5FcXVhbHMoU2luZ2xlRm9yZWlnbk1lc3NhZ2UsIG90aGVyLlNpbmdsZUZvcmVpZ25NZXNz
YWdlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKFNpbmdsZUltcG9y
dE1lc3NhZ2UsIG90aGVyLlNpbmdsZUltcG9ydE1lc3NhZ2UpKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICBpZiAoU2luZ2xlTmVzdGVkRW51bSAhPSBvdGhlci5TaW5nbGVOZXN0ZWRFbnVtKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICBpZiAoU2luZ2xlRm9yZWlnbkVudW0gIT0gb3RoZXIuU2luZ2xlRm9yZWln
bkVudW0pIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChTaW5nbGVJbXBvcnRFbnVtICE9IG90aGVy
LlNpbmdsZUltcG9ydEVudW0pIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghb2JqZWN0LkVxdWFs
cyhTaW5nbGVQdWJsaWNJbXBvcnRNZXNzYWdlLCBvdGhlci5TaW5nbGVQdWJsaWNJbXBvcnRNZXNz
YWdlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkSW50MzJfLkVxdWFscyhvdGhl
ci5yZXBlYXRlZEludDMyXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZEludDY0
Xy5FcXVhbHMob3RoZXIucmVwZWF0ZWRJbnQ2NF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZigh
cmVwZWF0ZWRVaW50MzJfLkVxdWFscyhvdGhlci5yZXBlYXRlZFVpbnQzMl8pKSByZXR1cm4gZmFs
c2U7Ci0gICAgICBpZighcmVwZWF0ZWRVaW50NjRfLkVxdWFscyhvdGhlci5yZXBlYXRlZFVpbnQ2
NF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWRTaW50MzJfLkVxdWFscyhvdGhl
ci5yZXBlYXRlZFNpbnQzMl8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWRTaW50
NjRfLkVxdWFscyhvdGhlci5yZXBlYXRlZFNpbnQ2NF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZighcmVwZWF0ZWRGaXhlZDMyXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRGaXhlZDMyXykpIHJldHVy
biBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZEZpeGVkNjRfLkVxdWFscyhvdGhlci5yZXBlYXRl
ZEZpeGVkNjRfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkU2ZpeGVkMzJfLkVx
dWFscyhvdGhlci5yZXBlYXRlZFNmaXhlZDMyXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFy
ZXBlYXRlZFNmaXhlZDY0Xy5FcXVhbHMob3RoZXIucmVwZWF0ZWRTZml4ZWQ2NF8pKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWRGbG9hdF8uRXF1YWxzKG90aGVyLnJlcGVhdGVkRmxv
YXRfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkRG91YmxlXy5FcXVhbHMob3Ro
ZXIucmVwZWF0ZWREb3VibGVfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkQm9v
bF8uRXF1YWxzKG90aGVyLnJlcGVhdGVkQm9vbF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZigh
cmVwZWF0ZWRTdHJpbmdfLkVxdWFscyhvdGhlci5yZXBlYXRlZFN0cmluZ18pKSByZXR1cm4gZmFs
c2U7Ci0gICAgICBpZighcmVwZWF0ZWRCeXRlc18uRXF1YWxzKG90aGVyLnJlcGVhdGVkQnl0ZXNf
KSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkTmVzdGVkTWVzc2FnZV8uRXF1YWxz
KG90aGVyLnJlcGVhdGVkTmVzdGVkTWVzc2FnZV8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZigh
cmVwZWF0ZWRGb3JlaWduTWVzc2FnZV8uRXF1YWxzKG90aGVyLnJlcGVhdGVkRm9yZWlnbk1lc3Nh
Z2VfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkSW1wb3J0TWVzc2FnZV8uRXF1
YWxzKG90aGVyLnJlcGVhdGVkSW1wb3J0TWVzc2FnZV8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZighcmVwZWF0ZWROZXN0ZWRFbnVtXy5FcXVhbHMob3RoZXIucmVwZWF0ZWROZXN0ZWRFbnVtXykp
IHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZEZvcmVpZ25FbnVtXy5FcXVhbHMob3Ro
ZXIucmVwZWF0ZWRGb3JlaWduRW51bV8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcmVwZWF0
ZWRJbXBvcnRFbnVtXy5FcXVhbHMob3RoZXIucmVwZWF0ZWRJbXBvcnRFbnVtXykpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZFB1YmxpY0ltcG9ydE1lc3NhZ2VfLkVxdWFscyhvdGhl
ci5yZXBlYXRlZFB1YmxpY0ltcG9ydE1lc3NhZ2VfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KE9uZW9mVWludDMyICE9IG90aGVyLk9uZW9mVWludDMyKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZiAoIW9iamVjdC5FcXVhbHMoT25lb2ZOZXN0ZWRNZXNzYWdlLCBvdGhlci5PbmVvZk5lc3RlZE1l
c3NhZ2UpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT25lb2ZTdHJpbmcgIT0gb3RoZXIuT25l
b2ZTdHJpbmcpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPbmVvZkJ5dGVzICE9IG90aGVyLk9u
ZW9mQnl0ZXMpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPbmVvZkZpZWxkQ2FzZSAhPSBvdGhl
ci5PbmVvZkZpZWxkQ2FzZSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBo
YXNoID0gMTsKLSAgICAgIGlmIChTaW5nbGVJbnQzMiAhPSAwKSBoYXNoIF49IFNpbmdsZUludDMy
LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoU2luZ2xlSW50NjQgIT0gMEwpIGhhc2ggXj0gU2lu
Z2xlSW50NjQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChTaW5nbGVVaW50MzIgIT0gMCkgaGFz
aCBePSBTaW5nbGVVaW50MzIuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChTaW5nbGVVaW50NjQg
IT0gMFVMKSBoYXNoIF49IFNpbmdsZVVpbnQ2NC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKFNp
bmdsZVNpbnQzMiAhPSAwKSBoYXNoIF49IFNpbmdsZVNpbnQzMi5HZXRIYXNoQ29kZSgpOwotICAg
ICAgaWYgKFNpbmdsZVNpbnQ2NCAhPSAwTCkgaGFzaCBePSBTaW5nbGVTaW50NjQuR2V0SGFzaENv
ZGUoKTsKLSAgICAgIGlmIChTaW5nbGVGaXhlZDMyICE9IDApIGhhc2ggXj0gU2luZ2xlRml4ZWQz
Mi5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKFNpbmdsZUZpeGVkNjQgIT0gMFVMKSBoYXNoIF49
IFNpbmdsZUZpeGVkNjQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChTaW5nbGVTZml4ZWQzMiAh
PSAwKSBoYXNoIF49IFNpbmdsZVNmaXhlZDMyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoU2lu
Z2xlU2ZpeGVkNjQgIT0gMEwpIGhhc2ggXj0gU2luZ2xlU2ZpeGVkNjQuR2V0SGFzaENvZGUoKTsK
LSAgICAgIGlmIChTaW5nbGVGbG9hdCAhPSAwRikgaGFzaCBePSBTaW5nbGVGbG9hdC5HZXRIYXNo
Q29kZSgpOwotICAgICAgaWYgKFNpbmdsZURvdWJsZSAhPSAwRCkgaGFzaCBePSBTaW5nbGVEb3Vi
bGUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChTaW5nbGVCb29sICE9IGZhbHNlKSBoYXNoIF49
IFNpbmdsZUJvb2wuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChTaW5nbGVTdHJpbmcuTGVuZ3Ro
ICE9IDApIGhhc2ggXj0gU2luZ2xlU3RyaW5nLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoU2lu
Z2xlQnl0ZXMuTGVuZ3RoICE9IDApIGhhc2ggXj0gU2luZ2xlQnl0ZXMuR2V0SGFzaENvZGUoKTsK
LSAgICAgIGlmIChzaW5nbGVOZXN0ZWRNZXNzYWdlXyAhPSBudWxsKSBoYXNoIF49IFNpbmdsZU5l
c3RlZE1lc3NhZ2UuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChzaW5nbGVGb3JlaWduTWVzc2Fn
ZV8gIT0gbnVsbCkgaGFzaCBePSBTaW5nbGVGb3JlaWduTWVzc2FnZS5HZXRIYXNoQ29kZSgpOwot
ICAgICAgaWYgKHNpbmdsZUltcG9ydE1lc3NhZ2VfICE9IG51bGwpIGhhc2ggXj0gU2luZ2xlSW1w
b3J0TWVzc2FnZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKFNpbmdsZU5lc3RlZEVudW0gIT0g
MCkgaGFzaCBePSBTaW5nbGVOZXN0ZWRFbnVtLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoU2lu
Z2xlRm9yZWlnbkVudW0gIT0gMCkgaGFzaCBePSBTaW5nbGVGb3JlaWduRW51bS5HZXRIYXNoQ29k
ZSgpOwotICAgICAgaWYgKFNpbmdsZUltcG9ydEVudW0gIT0gMCkgaGFzaCBePSBTaW5nbGVJbXBv
cnRFbnVtLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoc2luZ2xlUHVibGljSW1wb3J0TWVzc2Fn
ZV8gIT0gbnVsbCkgaGFzaCBePSBTaW5nbGVQdWJsaWNJbXBvcnRNZXNzYWdlLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICBoYXNoIF49IHJlcGVhdGVkSW50MzJfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBo
YXNoIF49IHJlcGVhdGVkSW50NjRfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHJlcGVh
dGVkVWludDMyXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZFVpbnQ2NF8u
R2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRTaW50MzJfLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICBoYXNoIF49IHJlcGVhdGVkU2ludDY0Xy5HZXRIYXNoQ29kZSgpOwotICAgICAg
aGFzaCBePSByZXBlYXRlZEZpeGVkMzJfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHJl
cGVhdGVkRml4ZWQ2NF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRTZml4
ZWQzMl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRTZml4ZWQ2NF8uR2V0
SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRGbG9hdF8uR2V0SGFzaENvZGUoKTsK
LSAgICAgIGhhc2ggXj0gcmVwZWF0ZWREb3VibGVfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNo
IF49IHJlcGVhdGVkQm9vbF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRT
dHJpbmdfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHJlcGVhdGVkQnl0ZXNfLkdldEhh
c2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHJlcGVhdGVkTmVzdGVkTWVzc2FnZV8uR2V0SGFzaENv
ZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRGb3JlaWduTWVzc2FnZV8uR2V0SGFzaENvZGUo
KTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRJbXBvcnRNZXNzYWdlXy5HZXRIYXNoQ29kZSgpOwot
ICAgICAgaGFzaCBePSByZXBlYXRlZE5lc3RlZEVudW1fLkdldEhhc2hDb2RlKCk7Ci0gICAgICBo
YXNoIF49IHJlcGVhdGVkRm9yZWlnbkVudW1fLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49
IHJlcGVhdGVkSW1wb3J0RW51bV8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0
ZWRQdWJsaWNJbXBvcnRNZXNzYWdlXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG9uZW9mRmll
bGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mVWludDMyKSBoYXNoIF49IE9uZW9m
VWludDMyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9m
RmllbGRPbmVvZkNhc2UuT25lb2ZOZXN0ZWRNZXNzYWdlKSBoYXNoIF49IE9uZW9mTmVzdGVkTWVz
c2FnZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZp
ZWxkT25lb2ZDYXNlLk9uZW9mU3RyaW5nKSBoYXNoIF49IE9uZW9mU3RyaW5nLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuT25l
b2ZCeXRlcykgaGFzaCBePSBPbmVvZkJ5dGVzLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49
IChpbnQpIG9uZW9mRmllbGRDYXNlXzsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAg
IHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpz
b25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYg
KFNpbmdsZUludDMyICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDgpOwotICAg
ICAgICBvdXRwdXQuV3JpdGVJbnQzMihTaW5nbGVJbnQzMik7Ci0gICAgICB9Ci0gICAgICBpZiAo
U2luZ2xlSW50NjQgIT0gMEwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE2KTsKLSAg
ICAgICAgb3V0cHV0LldyaXRlSW50NjQoU2luZ2xlSW50NjQpOwotICAgICAgfQotICAgICAgaWYg
KFNpbmdsZVVpbnQzMiAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygyNCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZVVJbnQzMihTaW5nbGVVaW50MzIpOwotICAgICAgfQotICAgICAg
aWYgKFNpbmdsZVVpbnQ2NCAhPSAwVUwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDMy
KTsKLSAgICAgICAgb3V0cHV0LldyaXRlVUludDY0KFNpbmdsZVVpbnQ2NCk7Ci0gICAgICB9Ci0g
ICAgICBpZiAoU2luZ2xlU2ludDMyICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFn
KDQwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlU0ludDMyKFNpbmdsZVNpbnQzMik7Ci0gICAgICB9
Ci0gICAgICBpZiAoU2luZ2xlU2ludDY0ICE9IDBMKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJh
d1RhZyg0OCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVNJbnQ2NChTaW5nbGVTaW50NjQpOwotICAg
ICAgfQotICAgICAgaWYgKFNpbmdsZUZpeGVkMzIgIT0gMCkgewotICAgICAgICBvdXRwdXQuV3Jp
dGVSYXdUYWcoNjEpOwotICAgICAgICBvdXRwdXQuV3JpdGVGaXhlZDMyKFNpbmdsZUZpeGVkMzIp
OwotICAgICAgfQotICAgICAgaWYgKFNpbmdsZUZpeGVkNjQgIT0gMFVMKSB7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZVJhd1RhZyg2NSk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUZpeGVkNjQoU2luZ2xl
Rml4ZWQ2NCk7Ci0gICAgICB9Ci0gICAgICBpZiAoU2luZ2xlU2ZpeGVkMzIgIT0gMCkgewotICAg
ICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNzcpOwotICAgICAgICBvdXRwdXQuV3JpdGVTRml4ZWQz
MihTaW5nbGVTZml4ZWQzMik7Ci0gICAgICB9Ci0gICAgICBpZiAoU2luZ2xlU2ZpeGVkNjQgIT0g
MEwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDgxKTsKLSAgICAgICAgb3V0cHV0Lldy
aXRlU0ZpeGVkNjQoU2luZ2xlU2ZpeGVkNjQpOwotICAgICAgfQotICAgICAgaWYgKFNpbmdsZUZs
b2F0ICE9IDBGKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg5Myk7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZUZsb2F0KFNpbmdsZUZsb2F0KTsKLSAgICAgIH0KLSAgICAgIGlmIChTaW5nbGVE
b3VibGUgIT0gMEQpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDk3KTsKLSAgICAgICAg
b3V0cHV0LldyaXRlRG91YmxlKFNpbmdsZURvdWJsZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoU2lu
Z2xlQm9vbCAhPSBmYWxzZSkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTA0KTsKLSAg
ICAgICAgb3V0cHV0LldyaXRlQm9vbChTaW5nbGVCb29sKTsKLSAgICAgIH0KLSAgICAgIGlmIChT
aW5nbGVTdHJpbmcuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDEx
NCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhTaW5nbGVTdHJpbmcpOwotICAgICAgfQot
ICAgICAgaWYgKFNpbmdsZUJ5dGVzLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZVJhd1RhZygxMjIpOwotICAgICAgICBvdXRwdXQuV3JpdGVCeXRlcyhTaW5nbGVCeXRlcyk7Ci0g
ICAgICB9Ci0gICAgICBpZiAoc2luZ2xlTmVzdGVkTWVzc2FnZV8gIT0gbnVsbCkgewotICAgICAg
ICBvdXRwdXQuV3JpdGVSYXdUYWcoMTQ2LCAxKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2Fn
ZShTaW5nbGVOZXN0ZWRNZXNzYWdlKTsKLSAgICAgIH0KLSAgICAgIGlmIChzaW5nbGVGb3JlaWdu
TWVzc2FnZV8gIT0gbnVsbCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTU0LCAxKTsK
LSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShTaW5nbGVGb3JlaWduTWVzc2FnZSk7Ci0gICAg
ICB9Ci0gICAgICBpZiAoc2luZ2xlSW1wb3J0TWVzc2FnZV8gIT0gbnVsbCkgewotICAgICAgICBv
dXRwdXQuV3JpdGVSYXdUYWcoMTYyLCAxKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShT
aW5nbGVJbXBvcnRNZXNzYWdlKTsKLSAgICAgIH0KLSAgICAgIGlmIChTaW5nbGVOZXN0ZWRFbnVt
ICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE2OCwgMSk7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZUVudW0oKGludCkgU2luZ2xlTmVzdGVkRW51bSk7Ci0gICAgICB9Ci0gICAgICBp
ZiAoU2luZ2xlRm9yZWlnbkVudW0gIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWco
MTc2LCAxKTsKLSAgICAgICAgb3V0cHV0LldyaXRlRW51bSgoaW50KSBTaW5nbGVGb3JlaWduRW51
bSk7Ci0gICAgICB9Ci0gICAgICBpZiAoU2luZ2xlSW1wb3J0RW51bSAhPSAwKSB7Ci0gICAgICAg
IG91dHB1dC5Xcml0ZVJhd1RhZygxODQsIDEpOwotICAgICAgICBvdXRwdXQuV3JpdGVFbnVtKChp
bnQpIFNpbmdsZUltcG9ydEVudW0pOwotICAgICAgfQotICAgICAgaWYgKHNpbmdsZVB1YmxpY0lt
cG9ydE1lc3NhZ2VfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDIxMCwg
MSk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoU2luZ2xlUHVibGljSW1wb3J0TWVzc2Fn
ZSk7Ci0gICAgICB9Ci0gICAgICByZXBlYXRlZEludDMyXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVh
dGVkX3JlcGVhdGVkSW50MzJfY29kZWMpOwotICAgICAgcmVwZWF0ZWRJbnQ2NF8uV3JpdGVUbyhv
dXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZEludDY0X2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkVWlu
dDMyXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkVWludDMyX2NvZGVjKTsKLSAg
ICAgIHJlcGVhdGVkVWludDY0Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkVWlu
dDY0X2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkU2ludDMyXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVh
dGVkX3JlcGVhdGVkU2ludDMyX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkU2ludDY0Xy5Xcml0ZVRv
KG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkU2ludDY0X2NvZGVjKTsKLSAgICAgIHJlcGVhdGVk
Rml4ZWQzMl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZEZpeGVkMzJfY29kZWMp
OwotICAgICAgcmVwZWF0ZWRGaXhlZDY0Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVh
dGVkRml4ZWQ2NF9jb2RlYyk7Ci0gICAgICByZXBlYXRlZFNmaXhlZDMyXy5Xcml0ZVRvKG91dHB1
dCwgX3JlcGVhdGVkX3JlcGVhdGVkU2ZpeGVkMzJfY29kZWMpOwotICAgICAgcmVwZWF0ZWRTZml4
ZWQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFNmaXhlZDY0X2NvZGVjKTsK
LSAgICAgIHJlcGVhdGVkRmxvYXRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRG
bG9hdF9jb2RlYyk7Ci0gICAgICByZXBlYXRlZERvdWJsZV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBl
YXRlZF9yZXBlYXRlZERvdWJsZV9jb2RlYyk7Ci0gICAgICByZXBlYXRlZEJvb2xfLldyaXRlVG8o
b3V0cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRCb29sX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkU3Ry
aW5nXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkU3RyaW5nX2NvZGVjKTsKLSAg
ICAgIHJlcGVhdGVkQnl0ZXNfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRCeXRl
c19jb2RlYyk7Ci0gICAgICByZXBlYXRlZE5lc3RlZE1lc3NhZ2VfLldyaXRlVG8ob3V0cHV0LCBf
cmVwZWF0ZWRfcmVwZWF0ZWROZXN0ZWRNZXNzYWdlX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkRm9y
ZWlnbk1lc3NhZ2VfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRGb3JlaWduTWVz
c2FnZV9jb2RlYyk7Ci0gICAgICByZXBlYXRlZEltcG9ydE1lc3NhZ2VfLldyaXRlVG8ob3V0cHV0
LCBfcmVwZWF0ZWRfcmVwZWF0ZWRJbXBvcnRNZXNzYWdlX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVk
TmVzdGVkRW51bV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZE5lc3RlZEVudW1f
Y29kZWMpOwotICAgICAgcmVwZWF0ZWRGb3JlaWduRW51bV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBl
YXRlZF9yZXBlYXRlZEZvcmVpZ25FbnVtX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkSW1wb3J0RW51
bV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZEltcG9ydEVudW1fY29kZWMpOwot
ICAgICAgcmVwZWF0ZWRQdWJsaWNJbXBvcnRNZXNzYWdlXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVh
dGVkX3JlcGVhdGVkUHVibGljSW1wb3J0TWVzc2FnZV9jb2RlYyk7Ci0gICAgICBpZiAob25lb2ZG
aWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZVaW50MzIpIHsKLSAgICAgICAg
b3V0cHV0LldyaXRlUmF3VGFnKDI0OCwgNik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVVJbnQzMihP
bmVvZlVpbnQzMik7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9m
RmllbGRPbmVvZkNhc2UuT25lb2ZOZXN0ZWRNZXNzYWdlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZVJhd1RhZygxMzAsIDcpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKE9uZW9mTmVzdGVk
TWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmll
bGRPbmVvZkNhc2UuT25lb2ZTdHJpbmcpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDEz
OCwgNyk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhPbmVvZlN0cmluZyk7Ci0gICAgICB9
Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZC
eXRlcykgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTQ2LCA3KTsKLSAgICAgICAgb3V0
cHV0LldyaXRlQnl0ZXMoT25lb2ZCeXRlcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGlj
IGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYgKFNp
bmdsZUludDMyICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtLkNvbXB1dGVJbnQzMlNpemUoU2luZ2xlSW50MzIpOwotICAgICAgfQotICAgICAgaWYgKFNp
bmdsZUludDY0ICE9IDBMKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0
cmVhbS5Db21wdXRlSW50NjRTaXplKFNpbmdsZUludDY0KTsKLSAgICAgIH0KLSAgICAgIGlmIChT
aW5nbGVVaW50MzIgIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRT
dHJlYW0uQ29tcHV0ZVVJbnQzMlNpemUoU2luZ2xlVWludDMyKTsKLSAgICAgIH0KLSAgICAgIGlm
IChTaW5nbGVVaW50NjQgIT0gMFVMKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91
dHB1dFN0cmVhbS5Db21wdXRlVUludDY0U2l6ZShTaW5nbGVVaW50NjQpOwotICAgICAgfQotICAg
ICAgaWYgKFNpbmdsZVNpbnQzMiAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2Rl
ZE91dHB1dFN0cmVhbS5Db21wdXRlU0ludDMyU2l6ZShTaW5nbGVTaW50MzIpOwotICAgICAgfQot
ICAgICAgaWYgKFNpbmdsZVNpbnQ2NCAhPSAwTCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6
Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVNJbnQ2NFNpemUoU2luZ2xlU2ludDY0KTsKLSAgICAg
IH0KLSAgICAgIGlmIChTaW5nbGVGaXhlZDMyICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsg
NDsKLSAgICAgIH0KLSAgICAgIGlmIChTaW5nbGVGaXhlZDY0ICE9IDBVTCkgewotICAgICAgICBz
aXplICs9IDEgKyA4OwotICAgICAgfQotICAgICAgaWYgKFNpbmdsZVNmaXhlZDMyICE9IDApIHsK
LSAgICAgICAgc2l6ZSArPSAxICsgNDsKLSAgICAgIH0KLSAgICAgIGlmIChTaW5nbGVTZml4ZWQ2
NCAhPSAwTCkgewotICAgICAgICBzaXplICs9IDEgKyA4OwotICAgICAgfQotICAgICAgaWYgKFNp
bmdsZUZsb2F0ICE9IDBGKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDQ7Ci0gICAgICB9Ci0gICAg
ICBpZiAoU2luZ2xlRG91YmxlICE9IDBEKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDg7Ci0gICAg
ICB9Ci0gICAgICBpZiAoU2luZ2xlQm9vbCAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9IDEg
KyAxOwotICAgICAgfQotICAgICAgaWYgKFNpbmdsZVN0cmluZy5MZW5ndGggIT0gMCkgewotICAg
ICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUo
U2luZ2xlU3RyaW5nKTsKLSAgICAgIH0KLSAgICAgIGlmIChTaW5nbGVCeXRlcy5MZW5ndGggIT0g
MCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUJ5
dGVzU2l6ZShTaW5nbGVCeXRlcyk7Ci0gICAgICB9Ci0gICAgICBpZiAoc2luZ2xlTmVzdGVkTWVz
c2FnZV8gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDIgKyBwYjo6Q29kZWRPdXRwdXRTdHJl
YW0uQ29tcHV0ZU1lc3NhZ2VTaXplKFNpbmdsZU5lc3RlZE1lc3NhZ2UpOwotICAgICAgfQotICAg
ICAgaWYgKHNpbmdsZUZvcmVpZ25NZXNzYWdlXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0g
MiArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoU2luZ2xlRm9yZWln
bk1lc3NhZ2UpOwotICAgICAgfQotICAgICAgaWYgKHNpbmdsZUltcG9ydE1lc3NhZ2VfICE9IG51
bGwpIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVN
ZXNzYWdlU2l6ZShTaW5nbGVJbXBvcnRNZXNzYWdlKTsKLSAgICAgIH0KLSAgICAgIGlmIChTaW5n
bGVOZXN0ZWRFbnVtICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6OkNvZGVkT3V0cHV0
U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBTaW5nbGVOZXN0ZWRFbnVtKTsKLSAgICAgIH0K
LSAgICAgIGlmIChTaW5nbGVGb3JlaWduRW51bSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiAr
IHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlRW51bVNpemUoKGludCkgU2luZ2xlRm9yZWln
bkVudW0pOwotICAgICAgfQotICAgICAgaWYgKFNpbmdsZUltcG9ydEVudW0gIT0gMCkgewotICAg
ICAgICBzaXplICs9IDIgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUVudW1TaXplKChp
bnQpIFNpbmdsZUltcG9ydEVudW0pOwotICAgICAgfQotICAgICAgaWYgKHNpbmdsZVB1YmxpY0lt
cG9ydE1lc3NhZ2VfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6OkNvZGVkT3V0
cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShTaW5nbGVQdWJsaWNJbXBvcnRNZXNzYWdlKTsK
LSAgICAgIH0KLSAgICAgIHNpemUgKz0gcmVwZWF0ZWRJbnQzMl8uQ2FsY3VsYXRlU2l6ZShfcmVw
ZWF0ZWRfcmVwZWF0ZWRJbnQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkSW50NjRf
LkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkSW50NjRfY29kZWMpOwotICAgICAgc2l6
ZSArPSByZXBlYXRlZFVpbnQzMl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRVaW50
MzJfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZFVpbnQ2NF8uQ2FsY3VsYXRlU2l6ZShf
cmVwZWF0ZWRfcmVwZWF0ZWRVaW50NjRfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZFNp
bnQzMl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRTaW50MzJfY29kZWMpOwotICAg
ICAgc2l6ZSArPSByZXBlYXRlZFNpbnQ2NF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0
ZWRTaW50NjRfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZEZpeGVkMzJfLkNhbGN1bGF0
ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkRml4ZWQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJl
cGVhdGVkRml4ZWQ2NF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRGaXhlZDY0X2Nv
ZGVjKTsKLSAgICAgIHNpemUgKz0gcmVwZWF0ZWRTZml4ZWQzMl8uQ2FsY3VsYXRlU2l6ZShfcmVw
ZWF0ZWRfcmVwZWF0ZWRTZml4ZWQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkU2Zp
eGVkNjRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkU2ZpeGVkNjRfY29kZWMpOwot
ICAgICAgc2l6ZSArPSByZXBlYXRlZEZsb2F0Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBl
YXRlZEZsb2F0X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVwZWF0ZWREb3VibGVfLkNhbGN1bGF0
ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkRG91YmxlX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVw
ZWF0ZWRCb29sXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZEJvb2xfY29kZWMpOwot
ICAgICAgc2l6ZSArPSByZXBlYXRlZFN0cmluZ18uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVw
ZWF0ZWRTdHJpbmdfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZEJ5dGVzXy5DYWxjdWxh
dGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZEJ5dGVzX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVw
ZWF0ZWROZXN0ZWRNZXNzYWdlXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZE5lc3Rl
ZE1lc3NhZ2VfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZEZvcmVpZ25NZXNzYWdlXy5D
YWxjdWxhdGVTaXplKF9yZXBlYXRlZF9yZXBlYXRlZEZvcmVpZ25NZXNzYWdlX2NvZGVjKTsKLSAg
ICAgIHNpemUgKz0gcmVwZWF0ZWRJbXBvcnRNZXNzYWdlXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRl
ZF9yZXBlYXRlZEltcG9ydE1lc3NhZ2VfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZE5l
c3RlZEVudW1fLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkTmVzdGVkRW51bV9jb2Rl
Yyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkRm9yZWlnbkVudW1fLkNhbGN1bGF0ZVNpemUoX3Jl
cGVhdGVkX3JlcGVhdGVkRm9yZWlnbkVudW1fY29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRl
ZEltcG9ydEVudW1fLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkSW1wb3J0RW51bV9j
b2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkUHVibGljSW1wb3J0TWVzc2FnZV8uQ2FsY3Vs
YXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRQdWJsaWNJbXBvcnRNZXNzYWdlX2NvZGVjKTsKLSAg
ICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZlVpbnQz
MikgewotICAgICAgICBzaXplICs9IDIgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVVJ
bnQzMlNpemUoT25lb2ZVaW50MzIpOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNl
XyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mTmVzdGVkTWVzc2FnZSkgewotICAgICAgICBz
aXplICs9IDIgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKE9uZW9m
TmVzdGVkTWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9u
ZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZTdHJpbmcpIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6
OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKE9uZW9mU3RyaW5nKTsKLSAgICAg
IH0KLSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVv
ZkJ5dGVzKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21w
dXRlQnl0ZXNTaXplKE9uZW9mQnl0ZXMpOwotICAgICAgfQotICAgICAgcmV0dXJuIHNpemU7Ci0g
ICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKFRlc3RBbGxUeXBlcyBvdGhlcikgewot
ICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAg
ICAgaWYgKG90aGVyLlNpbmdsZUludDMyICE9IDApIHsKLSAgICAgICAgU2luZ2xlSW50MzIgPSBv
dGhlci5TaW5nbGVJbnQzMjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5TaW5nbGVJbnQ2NCAh
PSAwTCkgewotICAgICAgICBTaW5nbGVJbnQ2NCA9IG90aGVyLlNpbmdsZUludDY0OwotICAgICAg
fQotICAgICAgaWYgKG90aGVyLlNpbmdsZVVpbnQzMiAhPSAwKSB7Ci0gICAgICAgIFNpbmdsZVVp
bnQzMiA9IG90aGVyLlNpbmdsZVVpbnQzMjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5TaW5n
bGVVaW50NjQgIT0gMFVMKSB7Ci0gICAgICAgIFNpbmdsZVVpbnQ2NCA9IG90aGVyLlNpbmdsZVVp
bnQ2NDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5TaW5nbGVTaW50MzIgIT0gMCkgewotICAg
ICAgICBTaW5nbGVTaW50MzIgPSBvdGhlci5TaW5nbGVTaW50MzI7Ci0gICAgICB9Ci0gICAgICBp
ZiAob3RoZXIuU2luZ2xlU2ludDY0ICE9IDBMKSB7Ci0gICAgICAgIFNpbmdsZVNpbnQ2NCA9IG90
aGVyLlNpbmdsZVNpbnQ2NDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5TaW5nbGVGaXhlZDMy
ICE9IDApIHsKLSAgICAgICAgU2luZ2xlRml4ZWQzMiA9IG90aGVyLlNpbmdsZUZpeGVkMzI7Ci0g
ICAgICB9Ci0gICAgICBpZiAob3RoZXIuU2luZ2xlRml4ZWQ2NCAhPSAwVUwpIHsKLSAgICAgICAg
U2luZ2xlRml4ZWQ2NCA9IG90aGVyLlNpbmdsZUZpeGVkNjQ7Ci0gICAgICB9Ci0gICAgICBpZiAo
b3RoZXIuU2luZ2xlU2ZpeGVkMzIgIT0gMCkgewotICAgICAgICBTaW5nbGVTZml4ZWQzMiA9IG90
aGVyLlNpbmdsZVNmaXhlZDMyOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLlNpbmdsZVNmaXhl
ZDY0ICE9IDBMKSB7Ci0gICAgICAgIFNpbmdsZVNmaXhlZDY0ID0gb3RoZXIuU2luZ2xlU2ZpeGVk
NjQ7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuU2luZ2xlRmxvYXQgIT0gMEYpIHsKLSAgICAg
ICAgU2luZ2xlRmxvYXQgPSBvdGhlci5TaW5nbGVGbG9hdDsKLSAgICAgIH0KLSAgICAgIGlmIChv
dGhlci5TaW5nbGVEb3VibGUgIT0gMEQpIHsKLSAgICAgICAgU2luZ2xlRG91YmxlID0gb3RoZXIu
U2luZ2xlRG91YmxlOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLlNpbmdsZUJvb2wgIT0gZmFs
c2UpIHsKLSAgICAgICAgU2luZ2xlQm9vbCA9IG90aGVyLlNpbmdsZUJvb2w7Ci0gICAgICB9Ci0g
ICAgICBpZiAob3RoZXIuU2luZ2xlU3RyaW5nLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIFNpbmds
ZVN0cmluZyA9IG90aGVyLlNpbmdsZVN0cmluZzsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5T
aW5nbGVCeXRlcy5MZW5ndGggIT0gMCkgewotICAgICAgICBTaW5nbGVCeXRlcyA9IG90aGVyLlNp
bmdsZUJ5dGVzOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLnNpbmdsZU5lc3RlZE1lc3NhZ2Vf
ICE9IG51bGwpIHsKLSAgICAgICAgaWYgKHNpbmdsZU5lc3RlZE1lc3NhZ2VfID09IG51bGwpIHsK
LSAgICAgICAgICBzaW5nbGVOZXN0ZWRNZXNzYWdlXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgU2luZ2xlTmVzdGVkTWVzc2FnZS5NZXJnZUZyb20ob3RoZXIuU2luZ2xl
TmVzdGVkTWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuc2luZ2xlRm9yZWlnbk1l
c3NhZ2VfICE9IG51bGwpIHsKLSAgICAgICAgaWYgKHNpbmdsZUZvcmVpZ25NZXNzYWdlXyA9PSBu
dWxsKSB7Ci0gICAgICAgICAgc2luZ2xlRm9yZWlnbk1lc3NhZ2VfID0gbmV3IGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbk1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAg
ICAgICBTaW5nbGVGb3JlaWduTWVzc2FnZS5NZXJnZUZyb20ob3RoZXIuU2luZ2xlRm9yZWlnbk1l
c3NhZ2UpOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLnNpbmdsZUltcG9ydE1lc3NhZ2VfICE9
IG51bGwpIHsKLSAgICAgICAgaWYgKHNpbmdsZUltcG9ydE1lc3NhZ2VfID09IG51bGwpIHsKLSAg
ICAgICAgICBzaW5nbGVJbXBvcnRNZXNzYWdlXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5UZXN0UHJvdG9zLkltcG9ydE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgICBTaW5nbGVJ
bXBvcnRNZXNzYWdlLk1lcmdlRnJvbShvdGhlci5TaW5nbGVJbXBvcnRNZXNzYWdlKTsKLSAgICAg
IH0KLSAgICAgIGlmIChvdGhlci5TaW5nbGVOZXN0ZWRFbnVtICE9IDApIHsKLSAgICAgICAgU2lu
Z2xlTmVzdGVkRW51bSA9IG90aGVyLlNpbmdsZU5lc3RlZEVudW07Ci0gICAgICB9Ci0gICAgICBp
ZiAob3RoZXIuU2luZ2xlRm9yZWlnbkVudW0gIT0gMCkgewotICAgICAgICBTaW5nbGVGb3JlaWdu
RW51bSA9IG90aGVyLlNpbmdsZUZvcmVpZ25FbnVtOwotICAgICAgfQotICAgICAgaWYgKG90aGVy
LlNpbmdsZUltcG9ydEVudW0gIT0gMCkgewotICAgICAgICBTaW5nbGVJbXBvcnRFbnVtID0gb3Ro
ZXIuU2luZ2xlSW1wb3J0RW51bTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5zaW5nbGVQdWJs
aWNJbXBvcnRNZXNzYWdlXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChzaW5nbGVQdWJsaWNJbXBv
cnRNZXNzYWdlXyA9PSBudWxsKSB7Ci0gICAgICAgICAgc2luZ2xlUHVibGljSW1wb3J0TWVzc2Fn
ZV8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5QdWJsaWNJbXBvcnRN
ZXNzYWdlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgU2luZ2xlUHVibGljSW1wb3J0TWVzc2FnZS5N
ZXJnZUZyb20ob3RoZXIuU2luZ2xlUHVibGljSW1wb3J0TWVzc2FnZSk7Ci0gICAgICB9Ci0gICAg
ICByZXBlYXRlZEludDMyXy5BZGQob3RoZXIucmVwZWF0ZWRJbnQzMl8pOwotICAgICAgcmVwZWF0
ZWRJbnQ2NF8uQWRkKG90aGVyLnJlcGVhdGVkSW50NjRfKTsKLSAgICAgIHJlcGVhdGVkVWludDMy
Xy5BZGQob3RoZXIucmVwZWF0ZWRVaW50MzJfKTsKLSAgICAgIHJlcGVhdGVkVWludDY0Xy5BZGQo
b3RoZXIucmVwZWF0ZWRVaW50NjRfKTsKLSAgICAgIHJlcGVhdGVkU2ludDMyXy5BZGQob3RoZXIu
cmVwZWF0ZWRTaW50MzJfKTsKLSAgICAgIHJlcGVhdGVkU2ludDY0Xy5BZGQob3RoZXIucmVwZWF0
ZWRTaW50NjRfKTsKLSAgICAgIHJlcGVhdGVkRml4ZWQzMl8uQWRkKG90aGVyLnJlcGVhdGVkRml4
ZWQzMl8pOwotICAgICAgcmVwZWF0ZWRGaXhlZDY0Xy5BZGQob3RoZXIucmVwZWF0ZWRGaXhlZDY0
Xyk7Ci0gICAgICByZXBlYXRlZFNmaXhlZDMyXy5BZGQob3RoZXIucmVwZWF0ZWRTZml4ZWQzMl8p
OwotICAgICAgcmVwZWF0ZWRTZml4ZWQ2NF8uQWRkKG90aGVyLnJlcGVhdGVkU2ZpeGVkNjRfKTsK
LSAgICAgIHJlcGVhdGVkRmxvYXRfLkFkZChvdGhlci5yZXBlYXRlZEZsb2F0Xyk7Ci0gICAgICBy
ZXBlYXRlZERvdWJsZV8uQWRkKG90aGVyLnJlcGVhdGVkRG91YmxlXyk7Ci0gICAgICByZXBlYXRl
ZEJvb2xfLkFkZChvdGhlci5yZXBlYXRlZEJvb2xfKTsKLSAgICAgIHJlcGVhdGVkU3RyaW5nXy5B
ZGQob3RoZXIucmVwZWF0ZWRTdHJpbmdfKTsKLSAgICAgIHJlcGVhdGVkQnl0ZXNfLkFkZChvdGhl
ci5yZXBlYXRlZEJ5dGVzXyk7Ci0gICAgICByZXBlYXRlZE5lc3RlZE1lc3NhZ2VfLkFkZChvdGhl
ci5yZXBlYXRlZE5lc3RlZE1lc3NhZ2VfKTsKLSAgICAgIHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2Vf
LkFkZChvdGhlci5yZXBlYXRlZEZvcmVpZ25NZXNzYWdlXyk7Ci0gICAgICByZXBlYXRlZEltcG9y
dE1lc3NhZ2VfLkFkZChvdGhlci5yZXBlYXRlZEltcG9ydE1lc3NhZ2VfKTsKLSAgICAgIHJlcGVh
dGVkTmVzdGVkRW51bV8uQWRkKG90aGVyLnJlcGVhdGVkTmVzdGVkRW51bV8pOwotICAgICAgcmVw
ZWF0ZWRGb3JlaWduRW51bV8uQWRkKG90aGVyLnJlcGVhdGVkRm9yZWlnbkVudW1fKTsKLSAgICAg
IHJlcGVhdGVkSW1wb3J0RW51bV8uQWRkKG90aGVyLnJlcGVhdGVkSW1wb3J0RW51bV8pOwotICAg
ICAgcmVwZWF0ZWRQdWJsaWNJbXBvcnRNZXNzYWdlXy5BZGQob3RoZXIucmVwZWF0ZWRQdWJsaWNJ
bXBvcnRNZXNzYWdlXyk7Ci0gICAgICBzd2l0Y2ggKG90aGVyLk9uZW9mRmllbGRDYXNlKSB7Ci0g
ICAgICAgIGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZlVpbnQzMjoKLSAgICAgICAgICBP
bmVvZlVpbnQzMiA9IG90aGVyLk9uZW9mVWludDMyOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuT25lb2ZOZXN0ZWRNZXNzYWdlOgotICAgICAgICAg
IE9uZW9mTmVzdGVkTWVzc2FnZSA9IG90aGVyLk9uZW9mTmVzdGVkTWVzc2FnZTsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNlLk9uZW9mU3RyaW5nOgot
ICAgICAgICAgIE9uZW9mU3RyaW5nID0gb3RoZXIuT25lb2ZTdHJpbmc7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2FzZS5PbmVvZkJ5dGVzOgotICAgICAg
ICAgIE9uZW9mQnl0ZXMgPSBvdGhlci5PbmVvZkJ5dGVzOwotICAgICAgICAgIGJyZWFrOwotICAg
ICAgfQotCi0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0
U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5w
dXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSA4OiB7Ci0gICAgICAgICAgICBTaW5nbGVJbnQzMiA9IGlu
cHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGNhc2UgMTY6IHsKLSAgICAgICAgICAgIFNpbmdsZUludDY0ID0gaW5wdXQuUmVhZEludDY0
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNDog
ewotICAgICAgICAgICAgU2luZ2xlVWludDMyID0gaW5wdXQuUmVhZFVJbnQzMigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMzI6IHsKLSAgICAgICAg
ICAgIFNpbmdsZVVpbnQ2NCA9IGlucHV0LlJlYWRVSW50NjQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDQwOiB7Ci0gICAgICAgICAgICBTaW5nbGVT
aW50MzIgPSBpbnB1dC5SZWFkU0ludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgY2FzZSA0ODogewotICAgICAgICAgICAgU2luZ2xlU2ludDY0ID0gaW5w
dXQuUmVhZFNJbnQ2NCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGNhc2UgNjE6IHsKLSAgICAgICAgICAgIFNpbmdsZUZpeGVkMzIgPSBpbnB1dC5SZWFkRml4
ZWQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2Ug
NjU6IHsKLSAgICAgICAgICAgIFNpbmdsZUZpeGVkNjQgPSBpbnB1dC5SZWFkRml4ZWQ2NCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNzc6IHsKLSAg
ICAgICAgICAgIFNpbmdsZVNmaXhlZDMyID0gaW5wdXQuUmVhZFNGaXhlZDMyKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA4MTogewotICAgICAgICAg
ICAgU2luZ2xlU2ZpeGVkNjQgPSBpbnB1dC5SZWFkU0ZpeGVkNjQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDkzOiB7Ci0gICAgICAgICAgICBTaW5n
bGVGbG9hdCA9IGlucHV0LlJlYWRGbG9hdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGNhc2UgOTc6IHsKLSAgICAgICAgICAgIFNpbmdsZURvdWJsZSA9IGlu
cHV0LlJlYWREb3VibGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBjYXNlIDEwNDogewotICAgICAgICAgICAgU2luZ2xlQm9vbCA9IGlucHV0LlJlYWRCb29s
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxMTQ6
IHsKLSAgICAgICAgICAgIFNpbmdsZVN0cmluZyA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDEyMjogewotICAgICAg
ICAgICAgU2luZ2xlQnl0ZXMgPSBpbnB1dC5SZWFkQnl0ZXMoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE0NjogewotICAgICAgICAgICAgaWYgKHNp
bmdsZU5lc3RlZE1lc3NhZ2VfID09IG51bGwpIHsKLSAgICAgICAgICAgICAgc2luZ2xlTmVzdGVk
TWVzc2FnZV8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0QWxs
VHlwZXMuVHlwZXMuTmVzdGVkTWVzc2FnZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aW5wdXQuUmVhZE1lc3NhZ2Uoc2luZ2xlTmVzdGVkTWVzc2FnZV8pOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTU0OiB7Ci0gICAgICAgICAgICBpZiAo
c2luZ2xlRm9yZWlnbk1lc3NhZ2VfID09IG51bGwpIHsKLSAgICAgICAgICAgICAgc2luZ2xlRm9y
ZWlnbk1lc3NhZ2VfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9y
ZWlnbk1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNz
YWdlKHNpbmdsZUZvcmVpZ25NZXNzYWdlXyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgY2FzZSAxNjI6IHsKLSAgICAgICAgICAgIGlmIChzaW5nbGVJbXBvcnRN
ZXNzYWdlXyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIHNpbmdsZUltcG9ydE1lc3NhZ2VfID0g
bmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuSW1wb3J0TWVzc2FnZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2Uoc2luZ2xlSW1wb3J0
TWVzc2FnZV8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh
c2UgMTY4OiB7Ci0gICAgICAgICAgICBzaW5nbGVOZXN0ZWRFbnVtXyA9IChnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRFbnVtKSBpbnB1
dC5SZWFkRW51bSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGNhc2UgMTc2OiB7Ci0gICAgICAgICAgICBzaW5nbGVGb3JlaWduRW51bV8gPSAoZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb3JlaWduRW51bSkgaW5wdXQuUmVhZEVudW0oKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE4NDogewot
ICAgICAgICAgICAgc2luZ2xlSW1wb3J0RW51bV8gPSAoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
VGVzdFByb3Rvcy5JbXBvcnRFbnVtKSBpbnB1dC5SZWFkRW51bSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjEwOiB7Ci0gICAgICAgICAgICBpZiAo
c2luZ2xlUHVibGljSW1wb3J0TWVzc2FnZV8gPT0gbnVsbCkgewotICAgICAgICAgICAgICBzaW5n
bGVQdWJsaWNJbXBvcnRNZXNzYWdlXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0
UHJvdG9zLlB1YmxpY0ltcG9ydE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlucHV0LlJlYWRNZXNzYWdlKHNpbmdsZVB1YmxpY0ltcG9ydE1lc3NhZ2VfKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI1MDoKLSAgICAgICAgICBj
YXNlIDI0ODogewotICAgICAgICAgICAgcmVwZWF0ZWRJbnQzMl8uQWRkRW50cmllc0Zyb20oaW5w
dXQsIF9yZXBlYXRlZF9yZXBlYXRlZEludDMyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI1ODoKLSAgICAgICAgICBjYXNlIDI1Njogewot
ICAgICAgICAgICAgcmVwZWF0ZWRJbnQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRl
ZF9yZXBlYXRlZEludDY0X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDI2NjoKLSAgICAgICAgICBjYXNlIDI2NDogewotICAgICAgICAgICAg
cmVwZWF0ZWRVaW50MzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRV
aW50MzJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGNhc2UgMjc0OgotICAgICAgICAgIGNhc2UgMjcyOiB7Ci0gICAgICAgICAgICByZXBlYXRlZFVp
bnQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFVpbnQ2NF9jb2Rl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyODI6
Ci0gICAgICAgICAgY2FzZSAyODA6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkU2ludDMyXy5BZGRF
bnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkU2ludDMyX2NvZGVjKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI5MDoKLSAgICAgICAg
ICBjYXNlIDI4ODogewotICAgICAgICAgICAgcmVwZWF0ZWRTaW50NjRfLkFkZEVudHJpZXNGcm9t
KGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRTaW50NjRfY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjk4OgotICAgICAgICAgIGNhc2UgMzAx
OiB7Ci0gICAgICAgICAgICByZXBlYXRlZEZpeGVkMzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBf
cmVwZWF0ZWRfcmVwZWF0ZWRGaXhlZDMyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDMwNjoKLSAgICAgICAgICBjYXNlIDMwNTogewotICAg
ICAgICAgICAgcmVwZWF0ZWRGaXhlZDY0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVk
X3JlcGVhdGVkRml4ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgY2FzZSAzMTQ6Ci0gICAgICAgICAgY2FzZSAzMTc6IHsKLSAgICAgICAgICAg
IHJlcGVhdGVkU2ZpeGVkMzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0
ZWRTZml4ZWQzMl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSAzMjI6Ci0gICAgICAgICAgY2FzZSAzMjE6IHsKLSAgICAgICAgICAgIHJlcGVh
dGVkU2ZpeGVkNjRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRTZml4
ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Y2FzZSAzMzA6Ci0gICAgICAgICAgY2FzZSAzMzM6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkRmxv
YXRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRGbG9hdF9jb2RlYyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAzMzg6Ci0g
ICAgICAgICAgY2FzZSAzMzc6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkRG91YmxlXy5BZGRFbnRy
aWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkRG91YmxlX2NvZGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM0NjoKLSAgICAgICAgICBj
YXNlIDM0NDogewotICAgICAgICAgICAgcmVwZWF0ZWRCb29sXy5BZGRFbnRyaWVzRnJvbShpbnB1
dCwgX3JlcGVhdGVkX3JlcGVhdGVkQm9vbF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAzNTQ6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkU3Ry
aW5nXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkU3RyaW5nX2NvZGVj
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM2Mjog
ewotICAgICAgICAgICAgcmVwZWF0ZWRCeXRlc18uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBl
YXRlZF9yZXBlYXRlZEJ5dGVzX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgICBjYXNlIDM4NjogewotICAgICAgICAgICAgcmVwZWF0ZWROZXN0ZWRNZXNz
YWdlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkTmVzdGVkTWVzc2Fn
ZV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSAzOTQ6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VfLkFkZEVudHJpZXNG
cm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRGb3JlaWduTWVzc2FnZV9jb2RlYyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA0MDI6IHsKLSAgICAg
ICAgICAgIHJlcGVhdGVkSW1wb3J0TWVzc2FnZV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBl
YXRlZF9yZXBlYXRlZEltcG9ydE1lc3NhZ2VfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDEwOgotICAgICAgICAgIGNhc2UgNDA4OiB7Ci0g
ICAgICAgICAgICByZXBlYXRlZE5lc3RlZEVudW1fLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVw
ZWF0ZWRfcmVwZWF0ZWROZXN0ZWRFbnVtX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDQxODoKLSAgICAgICAgICBjYXNlIDQxNjogewotICAg
ICAgICAgICAgcmVwZWF0ZWRGb3JlaWduRW51bV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBl
YXRlZF9yZXBlYXRlZEZvcmVpZ25FbnVtX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDQyNjoKLSAgICAgICAgICBjYXNlIDQyNDogewotICAg
ICAgICAgICAgcmVwZWF0ZWRJbXBvcnRFbnVtXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVh
dGVkX3JlcGVhdGVkSW1wb3J0RW51bV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgY2FzZSA0MzQ6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkUHVibGlj
SW1wb3J0TWVzc2FnZV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9yZXBlYXRlZFB1
YmxpY0ltcG9ydE1lc3NhZ2VfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
fQotICAgICAgICAgIGNhc2UgODg4OiB7Ci0gICAgICAgICAgICBPbmVvZlVpbnQzMiA9IGlucHV0
LlJlYWRVSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBjYXNlIDg5ODogewotICAgICAgICAgICAgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3Rvcy5UZXN0QWxsVHlwZXMuVHlwZXMuTmVzdGVkTWVzc2FnZSBzdWJCdWlsZGVyID0gbmV3IGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3Rl
ZE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVs
ZE9uZW9mQ2FzZS5PbmVvZk5lc3RlZE1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgc3ViQnVpbGRl
ci5NZXJnZUZyb20oT25lb2ZOZXN0ZWRNZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlucHV0LlJlYWRNZXNzYWdlKHN1YkJ1aWxkZXIpOwotICAgICAgICAgICAgT25lb2ZOZXN0
ZWRNZXNzYWdlID0gc3ViQnVpbGRlcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDkwNjogewotICAgICAgICAgICAgT25lb2ZTdHJpbmcgPSBpbnB1dC5S
ZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Y2FzZSA5MTQ6IHsKLSAgICAgICAgICAgIE9uZW9mQnl0ZXMgPSBpbnB1dC5SZWFkQnl0ZXMoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLQotICAgICNyZWdpb24gTmVzdGVkIHR5cGVzCi0gICAgLy8vIDxzdW1tYXJ5PkNvbnRhaW5l
ciBmb3IgbmVzdGVkIHR5cGVzIGRlY2xhcmVkIGluIHRoZSBUZXN0QWxsVHlwZXMgbWVzc2FnZSB0
eXBlLjwvc3VtbWFyeT4KLSAgICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJO
b25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICAgIHB1YmxpYyBzdGF0aWMgcGFydGlhbCBjbGFzcyBU
eXBlcyB7Ci0gICAgICBwdWJsaWMgZW51bSBOZXN0ZWRFbnVtIHsKLSAgICAgICAgW3Bicjo6T3Jp
Z2luYWxOYW1lKCJORVNURURfRU5VTV9VTlNQRUNJRklFRCIpXSBVbnNwZWNpZmllZCA9IDAsCi0g
ICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiRk9PIildIEZvbyA9IDEsCi0gICAgICAgIFtwYnI6
Ok9yaWdpbmFsTmFtZSgiQkFSIildIEJhciA9IDIsCi0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFt
ZSgiQkFaIildIEJheiA9IDMsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBJ
bnRlbnRpb25hbGx5IG5lZ2F0aXZlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBb
cGJyOjpPcmlnaW5hbE5hbWUoIk5FRyIpXSBOZWcgPSAtMSwKLSAgICAgIH0KLQotICAgICAgW2ds
b2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0K
LSAgICAgIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBOZXN0ZWRNZXNzYWdlIDogcGI6OklN
ZXNzYWdlPE5lc3RlZE1lc3NhZ2U+IHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkg
cGI6Ok1lc3NhZ2VQYXJzZXI8TmVzdGVkTWVzc2FnZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2Fn
ZVBhcnNlcjxOZXN0ZWRNZXNzYWdlPigoKSA9PiBuZXcgTmVzdGVkTWVzc2FnZSgpKTsKLSAgICAg
ICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxOZXN0ZWRNZXNzYWdlPiBQYXJzZXIg
eyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBwYnI6
Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgICAgIGdldCB7IHJldHVybiBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RBbGxUeXBlcy5EZXNjcmlwdG9y
Lk5lc3RlZFR5cGVzWzBdOyB9Ci0gICAgICAgIH0KLQotICAgICAgICBwYnI6Ok1lc3NhZ2VEZXNj
cmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4g
RGVzY3JpcHRvcjsgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIE5lc3RlZE1lc3NhZ2Uo
KSB7Ci0gICAgICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBh
cnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgICAgIHB1YmxpYyBOZXN0ZWRNZXNz
YWdlKE5lc3RlZE1lc3NhZ2Ugb3RoZXIpIDogdGhpcygpIHsKLSAgICAgICAgICBiYl8gPSBvdGhl
ci5iYl87Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgTmVzdGVkTWVzc2FnZSBDbG9uZSgp
IHsKLSAgICAgICAgICByZXR1cm4gbmV3IE5lc3RlZE1lc3NhZ2UodGhpcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImJiIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBpbnQgQmJGaWVsZE51bWJlciA9IDE7Ci0g
ICAgICAgIHByaXZhdGUgaW50IGJiXzsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAv
Ly8gIFRoZSBmaWVsZCBuYW1lICJiIiBmYWlscyB0byBjb21waWxlIGluIHByb3RvMSBiZWNhdXNl
IGl0IGNvbmZsaWN0cyB3aXRoCi0gICAgICAgIC8vLyAgYSBsb2NhbCB2YXJpYWJsZSBuYW1lZCAi
YiIgaW4gb25lIG9mIHRoZSBnZW5lcmF0ZWQgbWV0aG9kcy4gIERvaC4KLSAgICAgICAgLy8vICBU
aGlzIGZpbGUgbmVlZHMgdG8gY29tcGlsZSBpbiBwcm90bzEgdG8gdGVzdCBiYWNrd2FyZHMtY29t
cGF0aWJpbGl0eS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGludCBC
YiB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIGJiXzsgfQotICAgICAgICAgIHNldCB7Ci0gICAg
ICAgICAgICBiYl8gPSB2YWx1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBw
dWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICAgICAgcmV0
dXJuIEVxdWFscyhvdGhlciBhcyBOZXN0ZWRNZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHB1YmxpYyBib29sIEVxdWFscyhOZXN0ZWRNZXNzYWdlIG90aGVyKSB7Ci0gICAgICAgICAgaWYg
KFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhp
cykpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBp
ZiAoQmIgIT0gb3RoZXIuQmIpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7
Ci0gICAgICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgICAgIGlmIChCYiAhPSAwKSBoYXNoIF49
IEJiLkdldEhhc2hDb2RlKCk7Ci0gICAgICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgICAgIH0KLQot
ICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgICAgIHJl
dHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBv
dXRwdXQpIHsKLSAgICAgICAgICBpZiAoQmIgIT0gMCkgewotICAgICAgICAgICAgb3V0cHV0Lldy
aXRlUmF3VGFnKDgpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoQmIpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsK
LSAgICAgICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICAgICAgaWYgKEJiICE9IDApIHsKLSAgICAg
ICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXpl
KEJiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oTmVzdGVkTWVzc2FnZSBvdGhlcikgewotICAg
ICAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGlmIChvdGhlci5CYiAhPSAwKSB7Ci0gICAgICAgICAgICBCYiA9IG90
aGVyLkJiOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIE1l
cmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgICAgIHVpbnQgdGFn
OwotICAgICAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAgICAgICBCYiA9IGlucHV0LlJlYWRJbnQz
MigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICAjZW5k
cmVnaW9uCi0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBUaGlzIHByb3RvIGluY2x1
ZGVzIGEgcmVjdXNpdmVseSBuZXN0ZWQgbWVzc2FnZS4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2ds
b2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0K
LSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIE5lc3RlZFRlc3RBbGxUeXBlcyA6IHBiOjpJ
TWVzc2FnZTxOZXN0ZWRUZXN0QWxsVHlwZXM+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25s
eSBwYjo6TWVzc2FnZVBhcnNlcjxOZXN0ZWRUZXN0QWxsVHlwZXM+IF9wYXJzZXIgPSBuZXcgcGI6
Ok1lc3NhZ2VQYXJzZXI8TmVzdGVkVGVzdEFsbFR5cGVzPigoKSA9PiBuZXcgTmVzdGVkVGVzdEFs
bFR5cGVzKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8TmVzdGVkVGVz
dEFsbFR5cGVzPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJs
aWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQg
eyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVzdFByb3Rv
M1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMV07IH0KLSAgICB9Ci0KLSAgICBw
YnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdl
dCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIE5lc3RlZFRlc3RB
bGxUeXBlcygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlh
bCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgTmVzdGVkVGVzdEFsbFR5cGVz
KE5lc3RlZFRlc3RBbGxUeXBlcyBvdGhlcikgOiB0aGlzKCkgewotICAgICAgQ2hpbGQgPSBvdGhl
ci5jaGlsZF8gIT0gbnVsbCA/IG90aGVyLkNoaWxkLkNsb25lKCkgOiBudWxsOwotICAgICAgUGF5
bG9hZCA9IG90aGVyLnBheWxvYWRfICE9IG51bGwgPyBvdGhlci5QYXlsb2FkLkNsb25lKCkgOiBu
dWxsOwotICAgICAgcmVwZWF0ZWRDaGlsZF8gPSBvdGhlci5yZXBlYXRlZENoaWxkXy5DbG9uZSgp
OwotICAgIH0KLQotICAgIHB1YmxpYyBOZXN0ZWRUZXN0QWxsVHlwZXMgQ2xvbmUoKSB7Ci0gICAg
ICByZXR1cm4gbmV3IE5lc3RlZFRlc3RBbGxUeXBlcyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8g
PHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImNoaWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBDaGlsZEZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuTmVzdGVkVGVzdEFsbFR5cGVzIGNoaWxk
XzsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5OZXN0ZWRU
ZXN0QWxsVHlwZXMgQ2hpbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIGNoaWxkXzsgfQotICAgICAg
c2V0IHsKLSAgICAgICAgY2hpbGRfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJwYXlsb2FkIiBmaWVsZC48L3N1bW1hcnk+
Ci0gICAgcHVibGljIGNvbnN0IGludCBQYXlsb2FkRmllbGROdW1iZXIgPSAyOwotICAgIHByaXZh
dGUgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0QWxsVHlwZXMgcGF5bG9h
ZF87Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFs
bFR5cGVzIFBheWxvYWQgewotICAgICAgZ2V0IHsgcmV0dXJuIHBheWxvYWRfOyB9Ci0gICAgICBz
ZXQgewotICAgICAgICBwYXlsb2FkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfY2hpbGQiIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkQ2hpbGRGaWVsZE51bWJlciA9
IDM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5OZXN0ZWRUZXN0QWxsVHlwZXM+IF9yZXBlYXRlZF9y
ZXBlYXRlZENoaWxkX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgy
NiwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5OZXN0ZWRUZXN0QWxsVHlwZXMu
UGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk5lc3RlZFRlc3RBbGxUeXBlcz4gcmVwZWF0ZWRD
aGlsZF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRl
c3RQcm90b3MuTmVzdGVkVGVzdEFsbFR5cGVzPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVk
RmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5OZXN0ZWRUZXN0QWxsVHlw
ZXM+IFJlcGVhdGVkQ2hpbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkQ2hpbGRfOyB9
Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikg
ewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBOZXN0ZWRUZXN0QWxsVHlwZXMpOwotICAg
IH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhOZXN0ZWRUZXN0QWxsVHlwZXMgb3RoZXIpIHsK
LSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMp
KSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKCFvYmplY3QuRXF1
YWxzKENoaWxkLCBvdGhlci5DaGlsZCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghb2JqZWN0
LkVxdWFscyhQYXlsb2FkLCBvdGhlci5QYXlsb2FkKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYo
IXJlcGVhdGVkQ2hpbGRfLkVxdWFscyhvdGhlci5yZXBlYXRlZENoaWxkXykpIHJldHVybiBmYWxz
ZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQg
R2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoY2hpbGRfICE9
IG51bGwpIGhhc2ggXj0gQ2hpbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChwYXlsb2FkXyAh
PSBudWxsKSBoYXNoIF49IFBheWxvYWQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVw
ZWF0ZWRDaGlsZF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQot
ICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6
Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1
YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAg
aWYgKGNoaWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoQ2hpbGQpOwotICAgICAgfQotICAgICAgaWYgKHBh
eWxvYWRfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE4KTsKLSAgICAg
ICAgb3V0cHV0LldyaXRlTWVzc2FnZShQYXlsb2FkKTsKLSAgICAgIH0KLSAgICAgIHJlcGVhdGVk
Q2hpbGRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRDaGlsZF9jb2RlYyk7Ci0g
ICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUg
PSAwOwotICAgICAgaWYgKGNoaWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBi
OjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoQ2hpbGQpOwotICAgICAgfQot
ICAgICAgaWYgKHBheWxvYWRfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNv
ZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShQYXlsb2FkKTsKLSAgICAgIH0KLSAg
ICAgIHNpemUgKz0gcmVwZWF0ZWRDaGlsZF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0
ZWRDaGlsZF9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBNZXJnZUZyb20oTmVzdGVkVGVzdEFsbFR5cGVzIG90aGVyKSB7Ci0gICAgICBpZiAob3Ro
ZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIu
Y2hpbGRfICE9IG51bGwpIHsKLSAgICAgICAgaWYgKGNoaWxkXyA9PSBudWxsKSB7Ci0gICAgICAg
ICAgY2hpbGRfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuTmVzdGVk
VGVzdEFsbFR5cGVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQ2hpbGQuTWVyZ2VGcm9tKG90aGVy
LkNoaWxkKTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5wYXlsb2FkXyAhPSBudWxsKSB7Ci0g
ICAgICAgIGlmIChwYXlsb2FkXyA9PSBudWxsKSB7Ci0gICAgICAgICAgcGF5bG9hZF8gPSBuZXcg
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0QWxsVHlwZXMoKTsKLSAgICAg
ICAgfQotICAgICAgICBQYXlsb2FkLk1lcmdlRnJvbShvdGhlci5QYXlsb2FkKTsKLSAgICAgIH0K
LSAgICAgIHJlcGVhdGVkQ2hpbGRfLkFkZChvdGhlci5yZXBlYXRlZENoaWxkXyk7Ci0gICAgfQot
Ci0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7
Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAh
PSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSAxMDogewotICAgICAgICAgICAgaWYgKGNoaWxkXyA9PSBudWxsKSB7Ci0gICAgICAg
ICAgICAgIGNoaWxkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk5l
c3RlZFRlc3RBbGxUeXBlcygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVh
ZE1lc3NhZ2UoY2hpbGRfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBpZiAocGF5bG9hZF8gPT0gbnVsbCkgewotICAg
ICAgICAgICAgICBwYXlsb2FkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zLlRlc3RBbGxUeXBlcygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVh
ZE1lc3NhZ2UocGF5bG9hZF8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIGNhc2UgMjY6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkQ2hpbGRfLkFkZEVudHJpZXNG
cm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRDaGlsZF9jb2RlYyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0g
IFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRl
KCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBUZXN0RGVwcmVjYXRlZEZpZWxkcyA6
IHBiOjpJTWVzc2FnZTxUZXN0RGVwcmVjYXRlZEZpZWxkcz4gewotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFRlc3REZXByZWNhdGVkRmllbGRzPiBfcGFyc2Vy
ID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPFRlc3REZXByZWNhdGVkRmllbGRzPigoKSA9PiBuZXcg
VGVzdERlcHJlY2F0ZWRGaWVsZHMoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBh
cnNlcjxUZXN0RGVwcmVjYXRlZEZpZWxkcz4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7
IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0
b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuVW5pdHRlc3RQcm90bzNSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzJdOyB9
Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3Jp
cHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1
YmxpYyBUZXN0RGVwcmVjYXRlZEZpZWxkcygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0g
ICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMg
VGVzdERlcHJlY2F0ZWRGaWVsZHMoVGVzdERlcHJlY2F0ZWRGaWVsZHMgb3RoZXIpIDogdGhpcygp
IHsKLSAgICAgIGRlcHJlY2F0ZWRJbnQzMl8gPSBvdGhlci5kZXByZWNhdGVkSW50MzJfOwotICAg
IH0KLQotICAgIHB1YmxpYyBUZXN0RGVwcmVjYXRlZEZpZWxkcyBDbG9uZSgpIHsKLSAgICAgIHJl
dHVybiBuZXcgVGVzdERlcHJlY2F0ZWRGaWVsZHModGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxz
dW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJkZXByZWNhdGVkX2ludDMyIiBmaWVsZC48L3N1
bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBEZXByZWNhdGVkSW50MzJGaWVsZE51bWJlciA9
IDE7Ci0gICAgcHJpdmF0ZSBpbnQgZGVwcmVjYXRlZEludDMyXzsKLSAgICBbZ2xvYmFsOjpTeXN0
ZW0uT2Jzb2xldGVBdHRyaWJ1dGUoKV0KLSAgICBwdWJsaWMgaW50IERlcHJlY2F0ZWRJbnQzMiB7
Ci0gICAgICBnZXQgeyByZXR1cm4gZGVwcmVjYXRlZEludDMyXzsgfQotICAgICAgc2V0IHsKLSAg
ICAgICAgZGVwcmVjYXRlZEludDMyXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1
YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBF
cXVhbHMob3RoZXIgYXMgVGVzdERlcHJlY2F0ZWRGaWVsZHMpOwotICAgIH0KLQotICAgIHB1Ymxp
YyBib29sIEVxdWFscyhUZXN0RGVwcmVjYXRlZEZpZWxkcyBvdGhlcikgewotICAgICAgaWYgKFJl
ZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoRGVwcmVjYXRlZEludDMyICE9IG90aGVy
LkRlcHJlY2F0ZWRJbnQzMikgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBo
YXNoID0gMTsKLSAgICAgIGlmIChEZXByZWNhdGVkSW50MzIgIT0gMCkgaGFzaCBePSBEZXByZWNh
dGVkSW50MzIuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAg
IHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpz
b25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYg
KERlcHJlY2F0ZWRJbnQzMiAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg4KTsK
LSAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoRGVwcmVjYXRlZEludDMyKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9
IDA7Ci0gICAgICBpZiAoRGVwcmVjYXRlZEludDMyICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAx
ICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoRGVwcmVjYXRlZEludDMy
KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lk
IE1lcmdlRnJvbShUZXN0RGVwcmVjYXRlZEZpZWxkcyBvdGhlcikgewotICAgICAgaWYgKG90aGVy
ID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkRl
cHJlY2F0ZWRJbnQzMiAhPSAwKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRJbnQzMiA9IG90aGVyLkRl
cHJlY2F0ZWRJbnQzMjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZy
b20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAg
d2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRh
ZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxk
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAg
IERlcHJlY2F0ZWRJbnQzMiA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAvLy8g
PHN1bW1hcnk+Ci0gIC8vLyAgRGVmaW5lIHRoZXNlIGFmdGVyIFRlc3RBbGxUeXBlcyB0byBtYWtl
IHN1cmUgdGhlIGNvbXBpbGVyIGNhbiBoYW5kbGUKLSAgLy8vICB0aGF0LgotICAvLy8gPC9zdW1t
YXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0
dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgRm9yZWlnbk1lc3NhZ2Ug
OiBwYjo6SU1lc3NhZ2U8Rm9yZWlnbk1lc3NhZ2U+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFk
b25seSBwYjo6TWVzc2FnZVBhcnNlcjxGb3JlaWduTWVzc2FnZT4gX3BhcnNlciA9IG5ldyBwYjo6
TWVzc2FnZVBhcnNlcjxGb3JlaWduTWVzc2FnZT4oKCkgPT4gbmV3IEZvcmVpZ25NZXNzYWdlKCkp
OwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8Rm9yZWlnbk1lc3NhZ2U+IFBh
cnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJy
OjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5E
ZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1szXTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURl
c2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERl
c2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgRm9yZWlnbk1lc3NhZ2UoKSB7Ci0gICAg
ICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVj
dGlvbigpOwotCi0gICAgcHVibGljIEZvcmVpZ25NZXNzYWdlKEZvcmVpZ25NZXNzYWdlIG90aGVy
KSA6IHRoaXMoKSB7Ci0gICAgICBjXyA9IG90aGVyLmNfOwotICAgIH0KLQotICAgIHB1YmxpYyBG
b3JlaWduTWVzc2FnZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgRm9yZWlnbk1lc3NhZ2Uo
dGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJj
IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBDRmllbGROdW1iZXIgPSAx
OwotICAgIHByaXZhdGUgaW50IGNfOwotICAgIHB1YmxpYyBpbnQgQyB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gY187IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGNfID0gdmFsdWU7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewot
ICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBGb3JlaWduTWVzc2FnZSk7Ci0gICAgfQotCi0g
ICAgcHVibGljIGJvb2wgRXF1YWxzKEZvcmVpZ25NZXNzYWdlIG90aGVyKSB7Ci0gICAgICBpZiAo
UmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChDICE9IG90aGVyLkMpIHJldHVybiBm
YWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBp
bnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoQyAhPSAw
KSBoYXNoIF49IEMuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQot
ICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6
Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1
YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAg
aWYgKEMgIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZUludDMyKEMpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2Fs
Y3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChDICE9IDApIHsK
LSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNp
emUoQyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBNZXJnZUZyb20oRm9yZWlnbk1lc3NhZ2Ugb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9
PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5DICE9
IDApIHsKLSAgICAgICAgQyA9IG90aGVyLkM7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGlj
IHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50
IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAg
ICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQu
U2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4OiB7
Ci0gICAgICAgICAgICBDID0gaW5wdXQuUmVhZEludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIFtnbG9i
YWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0g
IHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBUZXN0UmVzZXJ2ZWRGaWVsZHMgOiBwYjo6SU1l
c3NhZ2U8VGVzdFJlc2VydmVkRmllbGRzPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkg
cGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdFJlc2VydmVkRmllbGRzPiBfcGFyc2VyID0gbmV3IHBiOjpN
ZXNzYWdlUGFyc2VyPFRlc3RSZXNlcnZlZEZpZWxkcz4oKCkgPT4gbmV3IFRlc3RSZXNlcnZlZEZp
ZWxkcygpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RSZXNlcnZl
ZEZpZWxkcz4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGlj
IHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsg
cmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVW5pdHRlc3RQcm90bzNS
ZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzRdOyB9Ci0gICAgfQotCi0gICAgcGJy
OjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQg
eyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0UmVzZXJ2ZWRG
aWVsZHMoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwg
dm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIFRlc3RSZXNlcnZlZEZpZWxkcyhU
ZXN0UmVzZXJ2ZWRGaWVsZHMgb3RoZXIpIDogdGhpcygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
VGVzdFJlc2VydmVkRmllbGRzIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBUZXN0UmVzZXJ2
ZWRGaWVsZHModGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxz
KG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBUZXN0UmVzZXJ2
ZWRGaWVsZHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhUZXN0UmVzZXJ2ZWRG
aWVsZHMgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVh
bHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29k
ZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQot
ICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6
Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1
YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgIH0K
LQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsK
LSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShU
ZXN0UmVzZXJ2ZWRGaWVsZHMgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZy
b20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAg
d2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRh
ZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxk
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9
Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIFRlc3QgdGhhdCB3ZSBjYW4gdXNlIE5lc3RlZE1l
c3NhZ2UgZnJvbSBvdXRzaWRlIFRlc3RBbGxUeXBlcy4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2ds
b2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0K
LSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFRlc3RGb3JlaWduTmVzdGVkIDogcGI6OklN
ZXNzYWdlPFRlc3RGb3JlaWduTmVzdGVkPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkg
cGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdEZvcmVpZ25OZXN0ZWQ+IF9wYXJzZXIgPSBuZXcgcGI6Ok1l
c3NhZ2VQYXJzZXI8VGVzdEZvcmVpZ25OZXN0ZWQ+KCgpID0+IG5ldyBUZXN0Rm9yZWlnbk5lc3Rl
ZCgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RGb3JlaWduTmVz
dGVkPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3Rh
dGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1
cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVzdFByb3RvM1JlZmxl
Y3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbNV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1l
c3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJl
dHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RGb3JlaWduTmVzdGVk
KCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQg
T25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBUZXN0Rm9yZWlnbk5lc3RlZChUZXN0Rm9y
ZWlnbk5lc3RlZCBvdGhlcikgOiB0aGlzKCkgewotICAgICAgRm9yZWlnbk5lc3RlZCA9IG90aGVy
LmZvcmVpZ25OZXN0ZWRfICE9IG51bGwgPyBvdGhlci5Gb3JlaWduTmVzdGVkLkNsb25lKCkgOiBu
dWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0Rm9yZWlnbk5lc3RlZCBDbG9uZSgpIHsKLSAg
ICAgIHJldHVybiBuZXcgVGVzdEZvcmVpZ25OZXN0ZWQodGhpcyk7Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJmb3JlaWduX25lc3RlZCIgZmllbGQuPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRm9yZWlnbk5lc3RlZEZpZWxkTnVtYmVyID0g
MTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFs
bFR5cGVzLlR5cGVzLk5lc3RlZE1lc3NhZ2UgZm9yZWlnbk5lc3RlZF87Ci0gICAgcHVibGljIGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzLlR5cGVzLk5lc3Rl
ZE1lc3NhZ2UgRm9yZWlnbk5lc3RlZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gZm9yZWlnbk5lc3Rl
ZF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGZvcmVpZ25OZXN0ZWRfID0gdmFsdWU7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhl
cikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBUZXN0Rm9yZWlnbk5lc3RlZCk7Ci0g
ICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKFRlc3RGb3JlaWduTmVzdGVkIG90aGVyKSB7
Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlz
KSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmICghb2JqZWN0LkVx
dWFscyhGb3JlaWduTmVzdGVkLCBvdGhlci5Gb3JlaWduTmVzdGVkKSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRI
YXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChmb3JlaWduTmVzdGVk
XyAhPSBudWxsKSBoYXNoIF49IEZvcmVpZ25OZXN0ZWQuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJl
dHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmco
KSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRo
aXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtIG91dHB1dCkgewotICAgICAgaWYgKGZvcmVpZ25OZXN0ZWRfICE9IG51bGwpIHsKLSAgICAg
ICAgb3V0cHV0LldyaXRlUmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShG
b3JlaWduTmVzdGVkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0
ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoZm9yZWlnbk5lc3RlZF8g
IT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29t
cHV0ZU1lc3NhZ2VTaXplKEZvcmVpZ25OZXN0ZWQpOwotICAgICAgfQotICAgICAgcmV0dXJuIHNp
emU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKFRlc3RGb3JlaWduTmVzdGVk
IG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0g
ICAgICB9Ci0gICAgICBpZiAob3RoZXIuZm9yZWlnbk5lc3RlZF8gIT0gbnVsbCkgewotICAgICAg
ICBpZiAoZm9yZWlnbk5lc3RlZF8gPT0gbnVsbCkgewotICAgICAgICAgIGZvcmVpZ25OZXN0ZWRf
ID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzLlR5
cGVzLk5lc3RlZE1lc3NhZ2UoKTsKLSAgICAgICAgfQotICAgICAgICBGb3JlaWduTmVzdGVkLk1l
cmdlRnJvbShvdGhlci5Gb3JlaWduTmVzdGVkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJs
aWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVp
bnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAg
ICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1
dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDEw
OiB7Ci0gICAgICAgICAgICBpZiAoZm9yZWlnbk5lc3RlZF8gPT0gbnVsbCkgewotICAgICAgICAg
ICAgICBmb3JlaWduTmVzdGVkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zLlRlc3RBbGxUeXBlcy5UeXBlcy5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZShmb3JlaWduTmVzdGVkXyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQot
Ci0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBUZXN0IHRoYXQgcmVhbGx5IGxhcmdlIHRhZyBudW1i
ZXJzIGRvbid0IGJyZWFrIGFueXRoaW5nLgotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpT
eXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJs
aWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgVGVzdFJlYWxseUxhcmdlVGFnTnVtYmVyIDogcGI6OklN
ZXNzYWdlPFRlc3RSZWFsbHlMYXJnZVRhZ051bWJlcj4gewotICAgIHByaXZhdGUgc3RhdGljIHJl
YWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RSZWFsbHlMYXJnZVRhZ051bWJlcj4gX3BhcnNl
ciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0UmVhbGx5TGFyZ2VUYWdOdW1iZXI+KCgpID0+
IG5ldyBUZXN0UmVhbGx5TGFyZ2VUYWdOdW1iZXIoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6
TWVzc2FnZVBhcnNlcjxUZXN0UmVhbGx5TGFyZ2VUYWdOdW1iZXI+IFBhcnNlciB7IGdldCB7IHJl
dHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3Jp
cHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3Nh
Z2VUeXBlc1s2XTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklN
ZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAg
ICB9Ci0KLSAgICBwdWJsaWMgVGVzdFJlYWxseUxhcmdlVGFnTnVtYmVyKCkgewotICAgICAgT25D
b25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24o
KTsKLQotICAgIHB1YmxpYyBUZXN0UmVhbGx5TGFyZ2VUYWdOdW1iZXIoVGVzdFJlYWxseUxhcmdl
VGFnTnVtYmVyIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBhXyA9IG90aGVyLmFfOwotICAgICAg
YmJfID0gb3RoZXIuYmJfOwotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0UmVhbGx5TGFyZ2VUYWdO
dW1iZXIgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IFRlc3RSZWFsbHlMYXJnZVRhZ051bWJl
cih0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
ImEiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEFGaWVsZE51bWJlciA9
IDE7Ci0gICAgcHJpdmF0ZSBpbnQgYV87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhl
IGxhcmdlc3QgcG9zc2libGUgdGFnIG51bWJlciBpcyAyXjI4IC0gMSwgc2luY2UgdGhlIHdpcmUg
Zm9ybWF0IHVzZXMKLSAgICAvLy8gIHRocmVlIGJpdHMgdG8gY29tbXVuaWNhdGUgd2lyZSB0eXBl
LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGludCBBIHsKLSAgICAgIGdldCB7IHJl
dHVybiBhXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgYV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImJiIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBCYkZpZWxkTnVtYmVyID0gMjY4NDM1NDU1
OwotICAgIHByaXZhdGUgaW50IGJiXzsKLSAgICBwdWJsaWMgaW50IEJiIHsKLSAgICAgIGdldCB7
IHJldHVybiBiYl87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGJiXyA9IHZhbHVlOwotICAgICAg
fQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIp
IHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgVGVzdFJlYWxseUxhcmdlVGFnTnVtYmVy
KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoVGVzdFJlYWxseUxhcmdlVGFnTnVt
YmVyIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxz
KG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlm
IChBICE9IG90aGVyLkEpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChCYiAhPSBvdGhlci5CYikg
cmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92
ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlm
IChBICE9IDApIGhhc2ggXj0gQS5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKEJiICE9IDApIGhh
c2ggXj0gQmIuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAg
IHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpz
b25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYg
KEEgIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZUludDMyKEEpOwotICAgICAgfQotICAgICAgaWYgKEJiICE9IDApIHsKLSAgICAgICAg
b3V0cHV0LldyaXRlUmF3VGFnKDI0OCwgMjU1LCAyNTUsIDI1NSwgNyk7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZUludDMyKEJiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1
bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoQSAhPSAwKSB7Ci0g
ICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXpl
KEEpOwotICAgICAgfQotICAgICAgaWYgKEJiICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSA1ICsg
cGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoQmIpOwotICAgICAgfQotICAg
ICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKFRlc3RS
ZWFsbHlMYXJnZVRhZ051bWJlciBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkEgIT0gMCkgewotICAg
ICAgICBBID0gb3RoZXIuQTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5CYiAhPSAwKSB7Ci0g
ICAgICAgIEJiID0gb3RoZXIuQmI7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
TWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsK
LSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3
aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExh
c3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4OiB7Ci0gICAg
ICAgICAgICBBID0gaW5wdXQuUmVhZEludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgY2FzZSAyMTQ3NDgzNjQwOiB7Ci0gICAgICAgICAgICBCYiA9IGlu
cHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3Rp
Y3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRp
YWwgY2xhc3MgVGVzdFJlY3Vyc2l2ZU1lc3NhZ2UgOiBwYjo6SU1lc3NhZ2U8VGVzdFJlY3Vyc2l2
ZU1lc3NhZ2U+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNl
cjxUZXN0UmVjdXJzaXZlTWVzc2FnZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxU
ZXN0UmVjdXJzaXZlTWVzc2FnZT4oKCkgPT4gbmV3IFRlc3RSZWN1cnNpdmVNZXNzYWdlKCkpOwot
ICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdFJlY3Vyc2l2ZU1lc3NhZ2U+
IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMg
cGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlv
bi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1s3XTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2Fn
ZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJu
IERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgVGVzdFJlY3Vyc2l2ZU1lc3NhZ2Uo
KSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBP
bkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIFRlc3RSZWN1cnNpdmVNZXNzYWdlKFRlc3RS
ZWN1cnNpdmVNZXNzYWdlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBBID0gb3RoZXIuYV8gIT0g
bnVsbCA/IG90aGVyLkEuQ2xvbmUoKSA6IG51bGw7Ci0gICAgICBpXyA9IG90aGVyLmlfOwotICAg
IH0KLQotICAgIHB1YmxpYyBUZXN0UmVjdXJzaXZlTWVzc2FnZSBDbG9uZSgpIHsKLSAgICAgIHJl
dHVybiBuZXcgVGVzdFJlY3Vyc2l2ZU1lc3NhZ2UodGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxz
dW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJhIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVi
bGljIGNvbnN0IGludCBBRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0UmVjdXJzaXZlTWVzc2FnZSBhXzsKLSAgICBwdWJs
aWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0UmVjdXJzaXZlTWVzc2Fn
ZSBBIHsKLSAgICAgIGdldCB7IHJldHVybiBhXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgYV8g
PSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVy
IGZvciB0aGUgImkiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IElGaWVs
ZE51bWJlciA9IDI7Ci0gICAgcHJpdmF0ZSBpbnQgaV87Ci0gICAgcHVibGljIGludCBJIHsKLSAg
ICAgIGdldCB7IHJldHVybiBpXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgaV8gPSB2YWx1ZTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0
IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIFRlc3RSZWN1cnNpdmVNZXNz
YWdlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoVGVzdFJlY3Vyc2l2ZU1lc3Nh
Z2Ugb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMo
b3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYg
KCFvYmplY3QuRXF1YWxzKEEsIG90aGVyLkEpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoSSAh
PSBvdGhlci5JKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAx
OwotICAgICAgaWYgKGFfICE9IG51bGwpIGhhc2ggXj0gQS5HZXRIYXNoQ29kZSgpOwotICAgICAg
aWYgKEkgIT0gMCkgaGFzaCBePSBJLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAg
cmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQp
IHsKLSAgICAgIGlmIChhXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygx
MCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoQSk7Ci0gICAgICB9Ci0gICAgICBpZiAo
SSAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxNik7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZUludDMyKEkpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3Vs
YXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChhXyAhPSBudWxsKSB7
Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2Fn
ZVNpemUoQSk7Ci0gICAgICB9Ci0gICAgICBpZiAoSSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0g
MSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEkpOwotICAgICAgfQot
ICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKFRl
c3RSZWN1cnNpdmVNZXNzYWdlIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuYV8gIT0gbnVsbCkgewot
ICAgICAgICBpZiAoYV8gPT0gbnVsbCkgewotICAgICAgICAgIGFfID0gbmV3IGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdFJlY3Vyc2l2ZU1lc3NhZ2UoKTsKLSAgICAgICAg
fQotICAgICAgICBBLk1lcmdlRnJvbShvdGhlci5BKTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhl
ci5JICE9IDApIHsKLSAgICAgICAgSSA9IG90aGVyLkk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAg
ICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7
Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
aW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSAxMDogewotICAgICAgICAgICAgaWYgKGFfID09IG51bGwpIHsKLSAgICAgICAgICAgICAgYV8g
PSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0UmVjdXJzaXZlTWVz
c2FnZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2UoYV8p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTY6IHsK
LSAgICAgICAgICAgIEkgPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgLy8vIDxz
dW1tYXJ5PgotICAvLy8gIFRlc3QgdGhhdCBtdXR1YWwgcmVjdXJzaW9uIHdvcmtzLgotICAvLy8g
PC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2Vy
Q29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgVGVzdE11dHVh
bFJlY3Vyc2lvbkEgOiBwYjo6SU1lc3NhZ2U8VGVzdE11dHVhbFJlY3Vyc2lvbkE+IHsKLSAgICBw
cml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0TXV0dWFsUmVjdXJz
aW9uQT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0TXV0dWFsUmVjdXJzaW9u
QT4oKCkgPT4gbmV3IFRlc3RNdXR1YWxSZWN1cnNpb25BKCkpOwotICAgIHB1YmxpYyBzdGF0aWMg
cGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdE11dHVhbFJlY3Vyc2lvbkE+IFBhcnNlciB7IGdldCB7IHJl
dHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3Jp
cHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3Nh
Z2VUeXBlc1s4XTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklN
ZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAg
ICB9Ci0KLSAgICBwdWJsaWMgVGVzdE11dHVhbFJlY3Vyc2lvbkEoKSB7Ci0gICAgICBPbkNvbnN0
cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwot
Ci0gICAgcHVibGljIFRlc3RNdXR1YWxSZWN1cnNpb25BKFRlc3RNdXR1YWxSZWN1cnNpb25BIG90
aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBCYiA9IG90aGVyLmJiXyAhPSBudWxsID8gb3RoZXIuQmIu
Q2xvbmUoKSA6IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RNdXR1YWxSZWN1cnNpb25B
IENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBUZXN0TXV0dWFsUmVjdXJzaW9uQSh0aGlzKTsK
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImJiIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBCYkZpZWxkTnVtYmVyID0gMTsKLSAg
ICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdE11dHVhbFJl
Y3Vyc2lvbkIgYmJfOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zLlRlc3RNdXR1YWxSZWN1cnNpb25CIEJiIHsKLSAgICAgIGdldCB7IHJldHVybiBiYl87IH0K
LSAgICAgIHNldCB7Ci0gICAgICAgIGJiXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAg
IHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVy
biBFcXVhbHMob3RoZXIgYXMgVGVzdE11dHVhbFJlY3Vyc2lvbkEpOwotICAgIH0KLQotICAgIHB1
YmxpYyBib29sIEVxdWFscyhUZXN0TXV0dWFsUmVjdXJzaW9uQSBvdGhlcikgewotICAgICAgaWYg
KFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoQmIsIG90
aGVyLkJiKSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
cHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsK
LSAgICAgIGlmIChiYl8gIT0gbnVsbCkgaGFzaCBePSBCYi5HZXRIYXNoQ29kZSgpOwotICAgICAg
cmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmlu
ZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmco
dGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRT
dHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoYmJfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0
LldyaXRlUmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShCYik7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50
IHNpemUgPSAwOwotICAgICAgaWYgKGJiXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gMSAr
IHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoQmIpOwotICAgICAgfQot
ICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKFRl
c3RNdXR1YWxSZWN1cnNpb25BIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuYmJfICE9IG51bGwpIHsK
LSAgICAgICAgaWYgKGJiXyA9PSBudWxsKSB7Ci0gICAgICAgICAgYmJfID0gbmV3IGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdE11dHVhbFJlY3Vyc2lvbkIoKTsKLSAgICAg
ICAgfQotICAgICAgICBCYi5NZXJnZUZyb20ob3RoZXIuQmIpOwotICAgICAgfQotICAgIH0KLQot
ICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewot
ICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0g
MCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgMTA6IHsKLSAgICAgICAgICAgIGlmIChiYl8gPT0gbnVsbCkgewotICAgICAgICAgICAg
ICBiYl8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0TXV0dWFs
UmVjdXJzaW9uQigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3Nh
Z2UoYmJfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVn
Z2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNz
IFRlc3RNdXR1YWxSZWN1cnNpb25CIDogcGI6OklNZXNzYWdlPFRlc3RNdXR1YWxSZWN1cnNpb25C
PiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdE11
dHVhbFJlY3Vyc2lvbkI+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdE11dHVh
bFJlY3Vyc2lvbkI+KCgpID0+IG5ldyBUZXN0TXV0dWFsUmVjdXJzaW9uQigpKTsKLSAgICBwdWJs
aWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RNdXR1YWxSZWN1cnNpb25CPiBQYXJzZXIg
eyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVz
c2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVzdFByb3RvM1JlZmxlY3Rpb24uRGVzY3Jp
cHRvci5NZXNzYWdlVHlwZXNbOV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlw
dG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlw
dG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RNdXR1YWxSZWN1cnNpb25CKCkgewotICAg
ICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1
Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBUZXN0TXV0dWFsUmVjdXJzaW9uQihUZXN0TXV0dWFsUmVj
dXJzaW9uQiBvdGhlcikgOiB0aGlzKCkgewotICAgICAgQSA9IG90aGVyLmFfICE9IG51bGwgPyBv
dGhlci5BLkNsb25lKCkgOiBudWxsOwotICAgICAgb3B0aW9uYWxJbnQzMl8gPSBvdGhlci5vcHRp
b25hbEludDMyXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVGVzdE11dHVhbFJlY3Vyc2lvbkIgQ2xv
bmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IFRlc3RNdXR1YWxSZWN1cnNpb25CKHRoaXMpOwotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiYSIgZmllbGQuPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQUZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2
YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdE11dHVhbFJlY3Vyc2lv
bkEgYV87Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVz
dE11dHVhbFJlY3Vyc2lvbkEgQSB7Ci0gICAgICBnZXQgeyByZXR1cm4gYV87IH0KLSAgICAgIHNl
dCB7Ci0gICAgICAgIGFfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1t
YXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvcHRpb25hbF9pbnQzMiIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgT3B0aW9uYWxJbnQzMkZpZWxkTnVtYmVyID0gMjsKLSAg
ICBwcml2YXRlIGludCBvcHRpb25hbEludDMyXzsKLSAgICBwdWJsaWMgaW50IE9wdGlvbmFsSW50
MzIgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbmFsSW50MzJfOyB9Ci0gICAgICBzZXQgewot
ICAgICAgICBvcHRpb25hbEludDMyXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1
YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBF
cXVhbHMob3RoZXIgYXMgVGVzdE11dHVhbFJlY3Vyc2lvbkIpOwotICAgIH0KLQotICAgIHB1Ymxp
YyBib29sIEVxdWFscyhUZXN0TXV0dWFsUmVjdXJzaW9uQiBvdGhlcikgewotICAgICAgaWYgKFJl
ZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoQSwgb3RoZXIu
QSkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPcHRpb25hbEludDMyICE9IG90aGVyLk9wdGlv
bmFsSW50MzIpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7
Ci0gICAgICBpZiAoYV8gIT0gbnVsbCkgaGFzaCBePSBBLkdldEhhc2hDb2RlKCk7Ci0gICAgICBp
ZiAoT3B0aW9uYWxJbnQzMiAhPSAwKSBoYXNoIF49IE9wdGlvbmFsSW50MzIuR2V0SGFzaENvZGUo
KTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJp
bmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9z
dGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNv
ZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKGFfICE9IG51bGwpIHsKLSAgICAg
ICAgb3V0cHV0LldyaXRlUmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShB
KTsKLSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbEludDMyICE9IDApIHsKLSAgICAgICAgb3V0
cHV0LldyaXRlUmF3VGFnKDE2KTsKLSAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoT3B0aW9uYWxJ
bnQzMik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkg
ewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYgKGFfICE9IG51bGwpIHsKLSAgICAgICAg
c2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShBKTsK
LSAgICAgIH0KLSAgICAgIGlmIChPcHRpb25hbEludDMyICE9IDApIHsKLSAgICAgICAgc2l6ZSAr
PSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoT3B0aW9uYWxJbnQz
Mik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBNZXJnZUZyb20oVGVzdE11dHVhbFJlY3Vyc2lvbkIgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhl
ciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5h
XyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChhXyA9PSBudWxsKSB7Ci0gICAgICAgICAgYV8gPSBu
ZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0TXV0dWFsUmVjdXJzaW9u
QSgpOwotICAgICAgICB9Ci0gICAgICAgIEEuTWVyZ2VGcm9tKG90aGVyLkEpOwotICAgICAgfQot
ICAgICAgaWYgKG90aGVyLk9wdGlvbmFsSW50MzIgIT0gMCkgewotICAgICAgICBPcHRpb25hbElu
dDMyID0gb3RoZXIuT3B0aW9uYWxJbnQzMjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQg
dGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAg
ICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5T
a2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDEwOiB7
Ci0gICAgICAgICAgICBpZiAoYV8gPT0gbnVsbCkgewotICAgICAgICAgICAgICBhXyA9IG5ldyBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RNdXR1YWxSZWN1cnNpb25BKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZShhXyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxNjogewotICAgICAg
ICAgICAgT3B0aW9uYWxJbnQzMiA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAv
Ly8gPHN1bW1hcnk+Ci0gIC8vLyAgVGVzdCBtZXNzYWdlIHdpdGggQ2FtZWxDYXNlIGZpZWxkIG5h
bWVzLiAgVGhpcyB2aW9sYXRlcyBQcm90b2NvbCBCdWZmZXIKLSAgLy8vICBzdGFuZGFyZCBzdHls
ZS4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVn
Z2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNz
IFRlc3RDYW1lbENhc2VGaWVsZE5hbWVzIDogcGI6OklNZXNzYWdlPFRlc3RDYW1lbENhc2VGaWVs
ZE5hbWVzPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8
VGVzdENhbWVsQ2FzZUZpZWxkTmFtZXM+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8
VGVzdENhbWVsQ2FzZUZpZWxkTmFtZXM+KCgpID0+IG5ldyBUZXN0Q2FtZWxDYXNlRmllbGROYW1l
cygpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RDYW1lbENhc2VG
aWVsZE5hbWVzPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJs
aWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQg
eyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVzdFByb3Rv
M1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMTBdOyB9Ci0gICAgfQotCi0gICAg
cGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBn
ZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0Q2FtZWxD
YXNlRmllbGROYW1lcygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAg
cGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgVGVzdENhbWVsQ2Fz
ZUZpZWxkTmFtZXMoVGVzdENhbWVsQ2FzZUZpZWxkTmFtZXMgb3RoZXIpIDogdGhpcygpIHsKLSAg
ICAgIHByaW1pdGl2ZUZpZWxkXyA9IG90aGVyLnByaW1pdGl2ZUZpZWxkXzsKLSAgICAgIHN0cmlu
Z0ZpZWxkXyA9IG90aGVyLnN0cmluZ0ZpZWxkXzsKLSAgICAgIGVudW1GaWVsZF8gPSBvdGhlci5l
bnVtRmllbGRfOwotICAgICAgTWVzc2FnZUZpZWxkID0gb3RoZXIubWVzc2FnZUZpZWxkXyAhPSBu
dWxsID8gb3RoZXIuTWVzc2FnZUZpZWxkLkNsb25lKCkgOiBudWxsOwotICAgICAgcmVwZWF0ZWRQ
cmltaXRpdmVGaWVsZF8gPSBvdGhlci5yZXBlYXRlZFByaW1pdGl2ZUZpZWxkXy5DbG9uZSgpOwot
ICAgICAgcmVwZWF0ZWRTdHJpbmdGaWVsZF8gPSBvdGhlci5yZXBlYXRlZFN0cmluZ0ZpZWxkXy5D
bG9uZSgpOwotICAgICAgcmVwZWF0ZWRFbnVtRmllbGRfID0gb3RoZXIucmVwZWF0ZWRFbnVtRmll
bGRfLkNsb25lKCk7Ci0gICAgICByZXBlYXRlZE1lc3NhZ2VGaWVsZF8gPSBvdGhlci5yZXBlYXRl
ZE1lc3NhZ2VGaWVsZF8uQ2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVGVzdENhbWVsQ2Fz
ZUZpZWxkTmFtZXMgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IFRlc3RDYW1lbENhc2VGaWVs
ZE5hbWVzKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAiUHJpbWl0aXZlRmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3Qg
aW50IFByaW1pdGl2ZUZpZWxkRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgaW50IHByaW1p
dGl2ZUZpZWxkXzsKLSAgICBwdWJsaWMgaW50IFByaW1pdGl2ZUZpZWxkIHsKLSAgICAgIGdldCB7
IHJldHVybiBwcmltaXRpdmVGaWVsZF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHByaW1pdGl2
ZUZpZWxkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAiU3RyaW5nRmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IFN0cmluZ0ZpZWxkRmllbGROdW1iZXIgPSAyOwotICAgIHByaXZhdGUgc3Ry
aW5nIHN0cmluZ0ZpZWxkXyA9ICIiOwotICAgIHB1YmxpYyBzdHJpbmcgU3RyaW5nRmllbGQgewot
ICAgICAgZ2V0IHsgcmV0dXJuIHN0cmluZ0ZpZWxkXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
c3RyaW5nRmllbGRfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUs
ICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAiRW51bUZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBFbnVtRmllbGRGaWVsZE51bWJlciA9IDM7Ci0gICAgcHJpdmF0ZSBnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25FbnVtIGVudW1GaWVsZF8gPSAwOwotICAgIHB1
YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25FbnVtIEVudW1G
aWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gZW51bUZpZWxkXzsgfQotICAgICAgc2V0IHsKLSAg
ICAgICAgZW51bUZpZWxkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3Vt
bWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiTWVzc2FnZUZpZWxkIiBmaWVsZC48L3N1bW1hcnk+
Ci0gICAgcHVibGljIGNvbnN0IGludCBNZXNzYWdlRmllbGRGaWVsZE51bWJlciA9IDQ7Ci0gICAg
cHJpdmF0ZSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25NZXNzYWdl
IG1lc3NhZ2VGaWVsZF87Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQ
cm90b3MuRm9yZWlnbk1lc3NhZ2UgTWVzc2FnZUZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBt
ZXNzYWdlRmllbGRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBtZXNzYWdlRmllbGRfID0gdmFs
dWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3Ig
dGhlICJSZXBlYXRlZFByaW1pdGl2ZUZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGlj
IGNvbnN0IGludCBSZXBlYXRlZFByaW1pdGl2ZUZpZWxkRmllbGROdW1iZXIgPSA3OwotICAgIHBy
aXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGludD4gX3JlcGVhdGVkX3JlcGVh
dGVkUHJpbWl0aXZlRmllbGRfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JJbnQz
Mig1OCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PiByZXBl
YXRlZFByaW1pdGl2ZUZpZWxkXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PigpOwotICAg
IHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PiBSZXBlYXRlZFByaW1pdGl2ZUZpZWxkIHsK
LSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZFByaW1pdGl2ZUZpZWxkXzsgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiUmVwZWF0ZWRTdHJpbmdGaWVs
ZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRTdHJpbmdG
aWVsZEZpZWxkTnVtYmVyID0gODsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6Rmll
bGRDb2RlYzxzdHJpbmc+IF9yZXBlYXRlZF9yZXBlYXRlZFN0cmluZ0ZpZWxkX2NvZGVjCi0gICAg
ICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RyaW5nKDY2KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5
IHBiYzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHJlcGVhdGVkU3RyaW5nRmllbGRfID0gbmV3IHBi
Yzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVs
ZDxzdHJpbmc+IFJlcGVhdGVkU3RyaW5nRmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVh
dGVkU3RyaW5nRmllbGRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJSZXBlYXRlZEVudW1GaWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgUmVwZWF0ZWRFbnVtRmllbGRGaWVsZE51bWJlciA9IDk7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
VGVzdFByb3Rvcy5Gb3JlaWduRW51bT4gX3JlcGVhdGVkX3JlcGVhdGVkRW51bUZpZWxkX2NvZGVj
Ci0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yRW51bSg3NCwgeCA9PiAoaW50KSB4LCB4ID0+
IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25FbnVtKSB4KTsKLSAg
ICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25FbnVtPiByZXBlYXRlZEVudW1GaWVsZF8gPSBuZXcgcGJj
OjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWln
bkVudW0+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25FbnVtPiBSZXBlYXRlZEVudW1GaWVsZCB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRFbnVtRmllbGRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxz
dW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJSZXBlYXRlZE1lc3NhZ2VGaWVsZCIgZmllbGQu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRNZXNzYWdlRmllbGRGaWVs
ZE51bWJlciA9IDEwOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVj
PGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbk1lc3NhZ2U+IF9yZXBl
YXRlZF9yZXBlYXRlZE1lc3NhZ2VGaWVsZF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVj
LkZvck1lc3NhZ2UoODIsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWln
bk1lc3NhZ2UuUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVs
ZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25NZXNzYWdlPiByZXBl
YXRlZE1lc3NhZ2VGaWVsZF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbk1lc3NhZ2U+KCk7Ci0gICAgcHVibGljIHBiYzo6
UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25N
ZXNzYWdlPiBSZXBlYXRlZE1lc3NhZ2VGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0
ZWRNZXNzYWdlRmllbGRfOyB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1
YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBUZXN0Q2Ft
ZWxDYXNlRmllbGROYW1lcyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKFRlc3RD
YW1lbENhc2VGaWVsZE5hbWVzIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90
aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAo
UmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIH0KLSAgICAgIGlmIChQcmltaXRpdmVGaWVsZCAhPSBvdGhlci5QcmltaXRpdmVGaWVsZCkg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKFN0cmluZ0ZpZWxkICE9IG90aGVyLlN0cmluZ0ZpZWxk
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoRW51bUZpZWxkICE9IG90aGVyLkVudW1GaWVsZCkg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKE1lc3NhZ2VGaWVsZCwgb3Ro
ZXIuTWVzc2FnZUZpZWxkKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkUHJpbWl0
aXZlRmllbGRfLkVxdWFscyhvdGhlci5yZXBlYXRlZFByaW1pdGl2ZUZpZWxkXykpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZFN0cmluZ0ZpZWxkXy5FcXVhbHMob3RoZXIucmVwZWF0
ZWRTdHJpbmdGaWVsZF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWRFbnVtRmll
bGRfLkVxdWFscyhvdGhlci5yZXBlYXRlZEVudW1GaWVsZF8pKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICBpZighcmVwZWF0ZWRNZXNzYWdlRmllbGRfLkVxdWFscyhvdGhlci5yZXBlYXRlZE1lc3NhZ2VG
aWVsZF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwot
ICAgICAgaWYgKFByaW1pdGl2ZUZpZWxkICE9IDApIGhhc2ggXj0gUHJpbWl0aXZlRmllbGQuR2V0
SGFzaENvZGUoKTsKLSAgICAgIGlmIChTdHJpbmdGaWVsZC5MZW5ndGggIT0gMCkgaGFzaCBePSBT
dHJpbmdGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKEVudW1GaWVsZCAhPSAwKSBoYXNo
IF49IEVudW1GaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG1lc3NhZ2VGaWVsZF8gIT0g
bnVsbCkgaGFzaCBePSBNZXNzYWdlRmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0g
cmVwZWF0ZWRQcmltaXRpdmVGaWVsZF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVw
ZWF0ZWRTdHJpbmdGaWVsZF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0ZWRF
bnVtRmllbGRfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHJlcGVhdGVkTWVzc2FnZUZp
ZWxkXy5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVi
bGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZv
cm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoUHJp
bWl0aXZlRmllbGQgIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZUludDMyKFByaW1pdGl2ZUZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlm
IChTdHJpbmdGaWVsZC5MZW5ndGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWco
MTgpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoU3RyaW5nRmllbGQpOwotICAgICAgfQot
ICAgICAgaWYgKEVudW1GaWVsZCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygy
NCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUVudW0oKGludCkgRW51bUZpZWxkKTsKLSAgICAgIH0K
LSAgICAgIGlmIChtZXNzYWdlRmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRl
UmF3VGFnKDM0KTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShNZXNzYWdlRmllbGQpOwot
ICAgICAgfQotICAgICAgcmVwZWF0ZWRQcmltaXRpdmVGaWVsZF8uV3JpdGVUbyhvdXRwdXQsIF9y
ZXBlYXRlZF9yZXBlYXRlZFByaW1pdGl2ZUZpZWxkX2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkU3Ry
aW5nRmllbGRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRTdHJpbmdGaWVsZF9j
b2RlYyk7Ci0gICAgICByZXBlYXRlZEVudW1GaWVsZF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRl
ZF9yZXBlYXRlZEVudW1GaWVsZF9jb2RlYyk7Ci0gICAgICByZXBlYXRlZE1lc3NhZ2VGaWVsZF8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9yZXBlYXRlZE1lc3NhZ2VGaWVsZF9jb2RlYyk7Ci0g
ICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUg
PSAwOwotICAgICAgaWYgKFByaW1pdGl2ZUZpZWxkICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAx
ICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoUHJpbWl0aXZlRmllbGQp
OwotICAgICAgfQotICAgICAgaWYgKFN0cmluZ0ZpZWxkLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAg
IHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShTdHJp
bmdGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoRW51bUZpZWxkICE9IDApIHsKLSAgICAgICAg
c2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBF
bnVtRmllbGQpOwotICAgICAgfQotICAgICAgaWYgKG1lc3NhZ2VGaWVsZF8gIT0gbnVsbCkgewot
ICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VT
aXplKE1lc3NhZ2VGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBzaXplICs9IHJlcGVhdGVkUHJpbWl0
aXZlRmllbGRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkUHJpbWl0aXZlRmllbGRf
Y29kZWMpOwotICAgICAgc2l6ZSArPSByZXBlYXRlZFN0cmluZ0ZpZWxkXy5DYWxjdWxhdGVTaXpl
KF9yZXBlYXRlZF9yZXBlYXRlZFN0cmluZ0ZpZWxkX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVw
ZWF0ZWRFbnVtRmllbGRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkRW51bUZpZWxk
X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVwZWF0ZWRNZXNzYWdlRmllbGRfLkNhbGN1bGF0ZVNp
emUoX3JlcGVhdGVkX3JlcGVhdGVkTWVzc2FnZUZpZWxkX2NvZGVjKTsKLSAgICAgIHJldHVybiBz
aXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShUZXN0Q2FtZWxDYXNlRmll
bGROYW1lcyBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLlByaW1pdGl2ZUZpZWxkICE9IDApIHsKLSAg
ICAgICAgUHJpbWl0aXZlRmllbGQgPSBvdGhlci5QcmltaXRpdmVGaWVsZDsKLSAgICAgIH0KLSAg
ICAgIGlmIChvdGhlci5TdHJpbmdGaWVsZC5MZW5ndGggIT0gMCkgewotICAgICAgICBTdHJpbmdG
aWVsZCA9IG90aGVyLlN0cmluZ0ZpZWxkOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkVudW1G
aWVsZCAhPSAwKSB7Ci0gICAgICAgIEVudW1GaWVsZCA9IG90aGVyLkVudW1GaWVsZDsKLSAgICAg
IH0KLSAgICAgIGlmIChvdGhlci5tZXNzYWdlRmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgaWYg
KG1lc3NhZ2VGaWVsZF8gPT0gbnVsbCkgewotICAgICAgICAgIG1lc3NhZ2VGaWVsZF8gPSBuZXcg
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb3JlaWduTWVzc2FnZSgpOwotICAg
ICAgICB9Ci0gICAgICAgIE1lc3NhZ2VGaWVsZC5NZXJnZUZyb20ob3RoZXIuTWVzc2FnZUZpZWxk
KTsKLSAgICAgIH0KLSAgICAgIHJlcGVhdGVkUHJpbWl0aXZlRmllbGRfLkFkZChvdGhlci5yZXBl
YXRlZFByaW1pdGl2ZUZpZWxkXyk7Ci0gICAgICByZXBlYXRlZFN0cmluZ0ZpZWxkXy5BZGQob3Ro
ZXIucmVwZWF0ZWRTdHJpbmdGaWVsZF8pOwotICAgICAgcmVwZWF0ZWRFbnVtRmllbGRfLkFkZChv
dGhlci5yZXBlYXRlZEVudW1GaWVsZF8pOwotICAgICAgcmVwZWF0ZWRNZXNzYWdlRmllbGRfLkFk
ZChvdGhlci5yZXBlYXRlZE1lc3NhZ2VGaWVsZF8pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lk
IE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7
Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBz
d2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBM
YXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgODogewotICAg
ICAgICAgICAgUHJpbWl0aXZlRmllbGQgPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBT
dHJpbmdGaWVsZCA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI0OiB7Ci0gICAgICAgICAgICBlbnVtRmllbGRfID0g
KGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbkVudW0pIGlucHV0LlJl
YWRFbnVtKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSAzNDogewotICAgICAgICAgICAgaWYgKG1lc3NhZ2VGaWVsZF8gPT0gbnVsbCkgewotICAgICAg
ICAgICAgICBtZXNzYWdlRmllbGRfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQ
cm90b3MuRm9yZWlnbk1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlucHV0
LlJlYWRNZXNzYWdlKG1lc3NhZ2VGaWVsZF8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGNhc2UgNTg6Ci0gICAgICAgICAgY2FzZSA1NjogewotICAgICAgICAg
ICAgcmVwZWF0ZWRQcmltaXRpdmVGaWVsZF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRl
ZF9yZXBlYXRlZFByaW1pdGl2ZUZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDY2OiB7Ci0gICAgICAgICAgICByZXBlYXRlZFN0cmlu
Z0ZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkU3RyaW5nRmll
bGRfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh
c2UgNzQ6Ci0gICAgICAgICAgY2FzZSA3MjogewotICAgICAgICAgICAgcmVwZWF0ZWRFbnVtRmll
bGRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRFbnVtRmllbGRfY29k
ZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgODI6
IHsKLSAgICAgICAgICAgIHJlcGVhdGVkTWVzc2FnZUZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1
dCwgX3JlcGVhdGVkX3JlcGVhdGVkTWVzc2FnZUZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAg
Ly8vIDxzdW1tYXJ5PgotICAvLy8gIFdlIGxpc3QgZmllbGRzIG91dCBvZiBvcmRlciwgdG8gZW5z
dXJlIHRoYXQgd2UncmUgdXNpbmcgZmllbGQgbnVtYmVyIGFuZCBub3QKLSAgLy8vICBmaWVsZCBp
bmRleCB0byBkZXRlcm1pbmUgc2VyaWFsaXphdGlvbiBvcmRlci4KLSAgLy8vIDwvc3VtbWFyeT4K
LSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1
dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFRlc3RGaWVsZE9yZGVyaW5ncyA6
IHBiOjpJTWVzc2FnZTxUZXN0RmllbGRPcmRlcmluZ3M+IHsKLSAgICBwcml2YXRlIHN0YXRpYyBy
ZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0RmllbGRPcmRlcmluZ3M+IF9wYXJzZXIgPSBu
ZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdEZpZWxkT3JkZXJpbmdzPigoKSA9PiBuZXcgVGVzdEZp
ZWxkT3JkZXJpbmdzKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVz
dEZpZWxkT3JkZXJpbmdzPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAg
ICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVz
dFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMTFdOyB9Ci0gICAgfQot
Ci0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0
RmllbGRPcmRlcmluZ3MoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAg
IHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIFRlc3RGaWVsZE9y
ZGVyaW5ncyhUZXN0RmllbGRPcmRlcmluZ3Mgb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIG15U3Ry
aW5nXyA9IG90aGVyLm15U3RyaW5nXzsKLSAgICAgIG15SW50XyA9IG90aGVyLm15SW50XzsKLSAg
ICAgIG15RmxvYXRfID0gb3RoZXIubXlGbG9hdF87Ci0gICAgICBTaW5nbGVOZXN0ZWRNZXNzYWdl
ID0gb3RoZXIuc2luZ2xlTmVzdGVkTWVzc2FnZV8gIT0gbnVsbCA/IG90aGVyLlNpbmdsZU5lc3Rl
ZE1lc3NhZ2UuQ2xvbmUoKSA6IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFRlc3RGaWVsZE9y
ZGVyaW5ncyBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgVGVzdEZpZWxkT3JkZXJpbmdzKHRo
aXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibXlf
c3RyaW5nIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBNeVN0cmluZ0Zp
ZWxkTnVtYmVyID0gMTE7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgbXlTdHJpbmdfID0gIiI7Ci0gICAg
cHVibGljIHN0cmluZyBNeVN0cmluZyB7Ci0gICAgICBnZXQgeyByZXR1cm4gbXlTdHJpbmdfOyB9
Ci0gICAgICBzZXQgewotICAgICAgICBteVN0cmluZ18gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25z
LkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJteV9pbnQiIGZpZWxkLjwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgY29uc3QgaW50IE15SW50RmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUg
bG9uZyBteUludF87Ci0gICAgcHVibGljIGxvbmcgTXlJbnQgewotICAgICAgZ2V0IHsgcmV0dXJu
IG15SW50XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgbXlJbnRfID0gdmFsdWU7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJteV9mbG9h
dCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTXlGbG9hdEZpZWxkTnVt
YmVyID0gMTAxOwotICAgIHByaXZhdGUgZmxvYXQgbXlGbG9hdF87Ci0gICAgcHVibGljIGZsb2F0
IE15RmxvYXQgewotICAgICAgZ2V0IHsgcmV0dXJuIG15RmxvYXRfOyB9Ci0gICAgICBzZXQgewot
ICAgICAgICBteUZsb2F0XyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3Vt
bWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic2luZ2xlX25lc3RlZF9tZXNzYWdlIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTaW5nbGVOZXN0ZWRNZXNzYWdlRmllbGRO
dW1iZXIgPSAyMDA7Ci0gICAgcHJpdmF0ZSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zLlRlc3RGaWVsZE9yZGVyaW5ncy5UeXBlcy5OZXN0ZWRNZXNzYWdlIHNpbmdsZU5lc3RlZE1l
c3NhZ2VfOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRl
c3RGaWVsZE9yZGVyaW5ncy5UeXBlcy5OZXN0ZWRNZXNzYWdlIFNpbmdsZU5lc3RlZE1lc3NhZ2Ug
ewotICAgICAgZ2V0IHsgcmV0dXJuIHNpbmdsZU5lc3RlZE1lc3NhZ2VfOyB9Ci0gICAgICBzZXQg
ewotICAgICAgICBzaW5nbGVOZXN0ZWRNZXNzYWdlXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0K
LQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAg
IHJldHVybiBFcXVhbHMob3RoZXIgYXMgVGVzdEZpZWxkT3JkZXJpbmdzKTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgYm9vbCBFcXVhbHMoVGVzdEZpZWxkT3JkZXJpbmdzIG90aGVyKSB7Ci0gICAgICBp
ZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChNeVN0cmluZyAhPSBvdGhlci5N
eVN0cmluZykgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE15SW50ICE9IG90aGVyLk15SW50KSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoTXlGbG9hdCAhPSBvdGhlci5NeUZsb2F0KSByZXR1cm4g
ZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoU2luZ2xlTmVzdGVkTWVzc2FnZSwgb3Ro
ZXIuU2luZ2xlTmVzdGVkTWVzc2FnZSkpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAg
ICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoTXlTdHJpbmcuTGVuZ3RoICE9IDApIGhhc2ggXj0g
TXlTdHJpbmcuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChNeUludCAhPSAwTCkgaGFzaCBePSBN
eUludC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKE15RmxvYXQgIT0gMEYpIGhhc2ggXj0gTXlG
bG9hdC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKHNpbmdsZU5lc3RlZE1lc3NhZ2VfICE9IG51
bGwpIGhhc2ggXj0gU2luZ2xlTmVzdGVkTWVzc2FnZS5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0
dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygp
IHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhp
cyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJl
YW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoTXlJbnQgIT0gMEwpIHsKLSAgICAgICAgb3V0cHV0Lldy
aXRlUmF3VGFnKDgpOwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQ2NChNeUludCk7Ci0gICAgICB9
Ci0gICAgICBpZiAoTXlTdHJpbmcuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRl
UmF3VGFnKDkwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKE15U3RyaW5nKTsKLSAgICAg
IH0KLSAgICAgIGlmIChNeUZsb2F0ICE9IDBGKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1Rh
ZygxNzMsIDYpOwotICAgICAgICBvdXRwdXQuV3JpdGVGbG9hdChNeUZsb2F0KTsKLSAgICAgIH0K
LSAgICAgIGlmIChzaW5nbGVOZXN0ZWRNZXNzYWdlXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZVJhd1RhZygxOTQsIDEyKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShTaW5n
bGVOZXN0ZWRNZXNzYWdlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1
bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoTXlTdHJpbmcuTGVu
Z3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNv
bXB1dGVTdHJpbmdTaXplKE15U3RyaW5nKTsKLSAgICAgIH0KLSAgICAgIGlmIChNeUludCAhPSAw
TCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUlu
dDY0U2l6ZShNeUludCk7Ci0gICAgICB9Ci0gICAgICBpZiAoTXlGbG9hdCAhPSAwRikgewotICAg
ICAgICBzaXplICs9IDIgKyA0OwotICAgICAgfQotICAgICAgaWYgKHNpbmdsZU5lc3RlZE1lc3Nh
Z2VfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAyICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFt
LkNvbXB1dGVNZXNzYWdlU2l6ZShTaW5nbGVOZXN0ZWRNZXNzYWdlKTsKLSAgICAgIH0KLSAgICAg
IHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShUZXN0Rmll
bGRPcmRlcmluZ3Mgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5NeVN0cmluZy5MZW5ndGggIT0gMCkg
ewotICAgICAgICBNeVN0cmluZyA9IG90aGVyLk15U3RyaW5nOwotICAgICAgfQotICAgICAgaWYg
KG90aGVyLk15SW50ICE9IDBMKSB7Ci0gICAgICAgIE15SW50ID0gb3RoZXIuTXlJbnQ7Ci0gICAg
ICB9Ci0gICAgICBpZiAob3RoZXIuTXlGbG9hdCAhPSAwRikgewotICAgICAgICBNeUZsb2F0ID0g
b3RoZXIuTXlGbG9hdDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5zaW5nbGVOZXN0ZWRNZXNz
YWdlXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChzaW5nbGVOZXN0ZWRNZXNzYWdlXyA9PSBudWxs
KSB7Ci0gICAgICAgICAgc2luZ2xlTmVzdGVkTWVzc2FnZV8gPSBuZXcgZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0RmllbGRPcmRlcmluZ3MuVHlwZXMuTmVzdGVkTWVzc2Fn
ZSgpOwotICAgICAgICB9Ci0gICAgICAgIFNpbmdsZU5lc3RlZE1lc3NhZ2UuTWVyZ2VGcm9tKG90
aGVyLlNpbmdsZU5lc3RlZE1lc3NhZ2UpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0
YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAg
ICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNr
aXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgODogewot
ICAgICAgICAgICAgTXlJbnQgPSBpbnB1dC5SZWFkSW50NjQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDkwOiB7Ci0gICAgICAgICAgICBNeVN0cmlu
ZyA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDgxMzogewotICAgICAgICAgICAgTXlGbG9hdCA9IGlucHV0LlJlYWRG
bG9hdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2Ug
MTYwMjogewotICAgICAgICAgICAgaWYgKHNpbmdsZU5lc3RlZE1lc3NhZ2VfID09IG51bGwpIHsK
LSAgICAgICAgICAgICAgc2luZ2xlTmVzdGVkTWVzc2FnZV8gPSBuZXcgZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0RmllbGRPcmRlcmluZ3MuVHlwZXMuTmVzdGVkTWVzc2Fn
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2Uoc2luZ2xl
TmVzdGVkTWVzc2FnZV8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgI3JlZ2lvbiBOZXN0ZWQgdHlwZXMKLSAgICAvLy8g
PHN1bW1hcnk+Q29udGFpbmVyIGZvciBuZXN0ZWQgdHlwZXMgZGVjbGFyZWQgaW4gdGhlIFRlc3RG
aWVsZE9yZGVyaW5ncyBtZXNzYWdlIHR5cGUuPC9zdW1tYXJ5PgotICAgIFtnbG9iYWw6OlN5c3Rl
bS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gICAgcHVibGlj
IHN0YXRpYyBwYXJ0aWFsIGNsYXNzIFR5cGVzIHsKLSAgICAgIFtnbG9iYWw6OlN5c3RlbS5EaWFn
bm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gICAgICBwdWJsaWMgc2Vh
bGVkIHBhcnRpYWwgY2xhc3MgTmVzdGVkTWVzc2FnZSA6IHBiOjpJTWVzc2FnZTxOZXN0ZWRNZXNz
YWdlPiB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2Vy
PE5lc3RlZE1lc3NhZ2U+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8TmVzdGVkTWVz
c2FnZT4oKCkgPT4gbmV3IE5lc3RlZE1lc3NhZ2UoKSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMg
cGI6Ok1lc3NhZ2VQYXJzZXI8TmVzdGVkTWVzc2FnZT4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9w
YXJzZXI7IH0gfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRv
ciBEZXNjcmlwdG9yIHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuVGVzdFByb3Rvcy5UZXN0RmllbGRPcmRlcmluZ3MuRGVzY3JpcHRvci5OZXN0ZWRUeXBl
c1swXTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6
SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBOZXN0ZWRNZXNzYWdlKCkgewotICAgICAg
ICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJ0aWFsIHZvaWQg
T25Db25zdHJ1Y3Rpb24oKTsKLQotICAgICAgICBwdWJsaWMgTmVzdGVkTWVzc2FnZShOZXN0ZWRN
ZXNzYWdlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICAgICAgb29fID0gb3RoZXIub29fOwotICAg
ICAgICAgIGJiXyA9IG90aGVyLmJiXzsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBOZXN0
ZWRNZXNzYWdlIENsb25lKCkgewotICAgICAgICAgIHJldHVybiBuZXcgTmVzdGVkTWVzc2FnZSh0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAib28iIGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBPb0Zp
ZWxkTnVtYmVyID0gMjsKLSAgICAgICAgcHJpdmF0ZSBsb25nIG9vXzsKLSAgICAgICAgcHVibGlj
IGxvbmcgT28gewotICAgICAgICAgIGdldCB7IHJldHVybiBvb187IH0KLSAgICAgICAgICBzZXQg
ewotICAgICAgICAgICAgb29fID0gdmFsdWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJiYiIgZmllbGQuPC9zdW1t
YXJ5PgotICAgICAgICBwdWJsaWMgY29uc3QgaW50IEJiRmllbGROdW1iZXIgPSAxOwotICAgICAg
ICBwcml2YXRlIGludCBiYl87Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBU
aGUgZmllbGQgbmFtZSAiYiIgZmFpbHMgdG8gY29tcGlsZSBpbiBwcm90bzEgYmVjYXVzZSBpdCBj
b25mbGljdHMgd2l0aAotICAgICAgICAvLy8gIGEgbG9jYWwgdmFyaWFibGUgbmFtZWQgImIiIGlu
IG9uZSBvZiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMuICBEb2guCi0gICAgICAgIC8vLyAgVGhpcyBm
aWxlIG5lZWRzIHRvIGNvbXBpbGUgaW4gcHJvdG8xIHRvIHRlc3QgYmFja3dhcmRzLWNvbXBhdGli
aWxpdHkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBpbnQgQmIgewot
ICAgICAgICAgIGdldCB7IHJldHVybiBiYl87IH0KLSAgICAgICAgICBzZXQgewotICAgICAgICAg
ICAgYmJfID0gdmFsdWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGlj
IG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgICAgIHJldHVybiBF
cXVhbHMob3RoZXIgYXMgTmVzdGVkTWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJs
aWMgYm9vbCBFcXVhbHMoTmVzdGVkTWVzc2FnZSBvdGhlcikgewotICAgICAgICAgIGlmIChSZWZl
cmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKE9v
ICE9IG90aGVyLk9vKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgaWYgKEJiICE9IG90aGVyLkJi
KSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgICAgIGludCBo
YXNoID0gMTsKLSAgICAgICAgICBpZiAoT28gIT0gMEwpIGhhc2ggXj0gT28uR2V0SGFzaENvZGUo
KTsKLSAgICAgICAgICBpZiAoQmIgIT0gMCkgaGFzaCBePSBCYi5HZXRIYXNoQ29kZSgpOwotICAg
ICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIG92ZXJyaWRl
IHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIu
VG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZv
aWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICAgICAgaWYg
KEJiICE9IDApIHsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg4KTsKLSAgICAgICAg
ICAgIG91dHB1dC5Xcml0ZUludDMyKEJiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKE9v
ICE9IDBMKSB7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTYpOwotICAgICAgICAg
ICAgb3V0cHV0LldyaXRlSW50NjQoT28pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgICAgICBpbnQgc2l6ZSA9IDA7
Ci0gICAgICAgICAgaWYgKE9vICE9IDBMKSB7Ci0gICAgICAgICAgICBzaXplICs9IDEgKyBwYjo6
Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDY0U2l6ZShPbyk7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIGlmIChCYiAhPSAwKSB7Ci0gICAgICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRP
dXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShCYik7Ci0gICAgICAgICAgfQotICAgICAgICAg
IHJldHVybiBzaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgTWVyZ2VGcm9t
KE5lc3RlZE1lc3NhZ2Ugb3RoZXIpIHsKLSAgICAgICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAob3RoZXIuT28g
IT0gMEwpIHsKLSAgICAgICAgICAgIE9vID0gb3RoZXIuT287Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGlmIChvdGhlci5CYiAhPSAwKSB7Ci0gICAgICAgICAgICBCYiA9IG90aGVyLkJiOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6
Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgICAgIHVpbnQgdGFnOwotICAgICAgICAg
IHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgICAgICBzd2l0
Y2godGFnKSB7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaW5wdXQu
U2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIDg6IHsKLSAgICAgICAgICAgICAgICBCYiA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhc2UgMTY6
IHsKLSAgICAgICAgICAgICAgICBPbyA9IGlucHV0LlJlYWRJbnQ2NCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotCi0g
IFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRl
KCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBTcGFyc2VFbnVtTWVzc2FnZSA6IHBi
OjpJTWVzc2FnZTxTcGFyc2VFbnVtTWVzc2FnZT4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRv
bmx5IHBiOjpNZXNzYWdlUGFyc2VyPFNwYXJzZUVudW1NZXNzYWdlPiBfcGFyc2VyID0gbmV3IHBi
OjpNZXNzYWdlUGFyc2VyPFNwYXJzZUVudW1NZXNzYWdlPigoKSA9PiBuZXcgU3BhcnNlRW51bU1l
c3NhZ2UoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxTcGFyc2VFbnVt
TWVzc2FnZT4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGlj
IHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsg
cmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVW5pdHRlc3RQcm90bzNS
ZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzEyXTsgfQotICAgIH0KLQotICAgIHBi
cjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0
IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3BhcnNlRW51bU1l
c3NhZ2UoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwg
dm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIFNwYXJzZUVudW1NZXNzYWdlKFNw
YXJzZUVudW1NZXNzYWdlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBzcGFyc2VFbnVtXyA9IG90
aGVyLnNwYXJzZUVudW1fOwotICAgIH0KLQotICAgIHB1YmxpYyBTcGFyc2VFbnVtTWVzc2FnZSBD
bG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgU3BhcnNlRW51bU1lc3NhZ2UodGhpcyk7Ci0gICAg
fQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzcGFyc2VfZW51bSIg
ZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU3BhcnNlRW51bUZpZWxkTnVt
YmVyID0gMTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3Mu
VGVzdFNwYXJzZUVudW0gc3BhcnNlRW51bV8gPSAwOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RTcGFyc2VFbnVtIFNwYXJzZUVudW0gewotICAgICAg
Z2V0IHsgcmV0dXJuIHNwYXJzZUVudW1fOyB9Ci0gICAgICBzZXQgewotICAgICAgICBzcGFyc2VF
bnVtXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29s
IEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgU3Bh
cnNlRW51bU1lc3NhZ2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhTcGFyc2VF
bnVtTWVzc2FnZSBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVs
bCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5j
ZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0g
ICAgICBpZiAoU3BhcnNlRW51bSAhPSBvdGhlci5TcGFyc2VFbnVtKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhh
c2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKFNwYXJzZUVudW0gIT0g
MCkgaGFzaCBePSBTcGFyc2VFbnVtLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAg
cmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQp
IHsKLSAgICAgIGlmIChTcGFyc2VFbnVtICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3
VGFnKDgpOwotICAgICAgICBvdXRwdXQuV3JpdGVFbnVtKChpbnQpIFNwYXJzZUVudW0pOwotICAg
ICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGlu
dCBzaXplID0gMDsKLSAgICAgIGlmIChTcGFyc2VFbnVtICE9IDApIHsKLSAgICAgICAgc2l6ZSAr
PSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBTcGFyc2VF
bnVtKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIE1lcmdlRnJvbShTcGFyc2VFbnVtTWVzc2FnZSBvdGhlcikgewotICAgICAgaWYgKG90aGVy
ID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLlNw
YXJzZUVudW0gIT0gMCkgewotICAgICAgICBTcGFyc2VFbnVtID0gb3RoZXIuU3BhcnNlRW51bTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5w
dXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBp
bnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAgIHNwYXJzZUVudW1fID0g
KGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdFNwYXJzZUVudW0pIGlucHV0
LlJlYWRFbnVtKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBUZXN0IFN0
cmluZyBhbmQgQnl0ZXM6IHN0cmluZyBpcyBmb3IgdmFsaWQgVVRGLTggc3RyaW5ncwotICAvLy8g
PC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2Vy
Q29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgT25lU3RyaW5n
IDogcGI6OklNZXNzYWdlPE9uZVN0cmluZz4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5
IHBiOjpNZXNzYWdlUGFyc2VyPE9uZVN0cmluZz4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBh
cnNlcjxPbmVTdHJpbmc+KCgpID0+IG5ldyBPbmVTdHJpbmcoKSk7Ci0gICAgcHVibGljIHN0YXRp
YyBwYjo6TWVzc2FnZVBhcnNlcjxPbmVTdHJpbmc+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFy
c2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNj
cmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0
UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1sx
M107IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5E
ZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0g
ICAgcHVibGljIE9uZVN0cmluZygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQot
Ci0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgT25lU3Ry
aW5nKE9uZVN0cmluZyBvdGhlcikgOiB0aGlzKCkgewotICAgICAgZGF0YV8gPSBvdGhlci5kYXRh
XzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT25lU3RyaW5nIENsb25lKCkgewotICAgICAgcmV0dXJu
IG5ldyBPbmVTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJkYXRhIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGlu
dCBEYXRhRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgc3RyaW5nIGRhdGFfID0gIiI7Ci0g
ICAgcHVibGljIHN0cmluZyBEYXRhIHsKLSAgICAgIGdldCB7IHJldHVybiBkYXRhXzsgfQotICAg
ICAgc2V0IHsKLSAgICAgICAgZGF0YV8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90
TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJy
aWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhl
ciBhcyBPbmVTdHJpbmcpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhPbmVTdHJp
bmcgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMo
b3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYg
KERhdGEgIT0gb3RoZXIuRGF0YSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGlu
dCBoYXNoID0gMTsKLSAgICAgIGlmIChEYXRhLkxlbmd0aCAhPSAwKSBoYXNoIF49IERhdGEuR2V0
SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVy
cmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIu
VG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRl
VG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKERhdGEuTGVuZ3Ro
ICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0
LldyaXRlU3RyaW5nKERhdGEpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2Fs
Y3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChEYXRhLkxlbmd0
aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21w
dXRlU3RyaW5nU2l6ZShEYXRhKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShPbmVTdHJpbmcgb3RoZXIpIHsKLSAgICAgIGlm
IChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChv
dGhlci5EYXRhLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIERhdGEgPSBvdGhlci5EYXRhOwotICAg
ICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0
cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0
LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIERhdGEgPSBpbnB1dC5SZWFk
U3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1
Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFz
cyBNb3JlU3RyaW5nIDogcGI6OklNZXNzYWdlPE1vcmVTdHJpbmc+IHsKLSAgICBwcml2YXRlIHN0
YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxNb3JlU3RyaW5nPiBfcGFyc2VyID0gbmV3
IHBiOjpNZXNzYWdlUGFyc2VyPE1vcmVTdHJpbmc+KCgpID0+IG5ldyBNb3JlU3RyaW5nKCkpOwot
ICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8TW9yZVN0cmluZz4gUGFyc2VyIHsg
Z2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3Nh
Z2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVW5pdHRlc3RQcm90bzNSZWZsZWN0aW9uLkRlc2NyaXB0
b3IuTWVzc2FnZVR5cGVzWzE0XTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0
b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0
b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTW9yZVN0cmluZygpIHsKLSAgICAgIE9uQ29uc3Ry
dWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0K
LSAgICBwdWJsaWMgTW9yZVN0cmluZyhNb3JlU3RyaW5nIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAg
ICBkYXRhXyA9IG90aGVyLmRhdGFfLkNsb25lKCk7Ci0gICAgfQotCi0gICAgcHVibGljIE1vcmVT
dHJpbmcgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IE1vcmVTdHJpbmcodGhpcyk7Ci0gICAg
fQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJkYXRhIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBEYXRhRmllbGROdW1iZXIgPSAxOwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHN0cmluZz4gX3JlcGVhdGVk
X2RhdGFfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJpbmcoMTApOwotICAg
IHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPHN0cmluZz4gZGF0YV8gPSBuZXcg
cGJjOjpSZXBlYXRlZEZpZWxkPHN0cmluZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZp
ZWxkPHN0cmluZz4gRGF0YSB7Ci0gICAgICBnZXQgeyByZXR1cm4gZGF0YV87IH0KLSAgICB9Ci0K
LSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICBy
ZXR1cm4gRXF1YWxzKG90aGVyIGFzIE1vcmVTdHJpbmcpOwotICAgIH0KLQotICAgIHB1YmxpYyBi
b29sIEVxdWFscyhNb3JlU3RyaW5nIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxz
KG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBp
ZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIH0KLSAgICAgIGlmKCFkYXRhXy5FcXVhbHMob3RoZXIuZGF0YV8pKSByZXR1cm4gZmFs
c2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50
IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaGFzaCBePSBkYXRh
Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGlj
IG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1h
dHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
V3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBkYXRhXy5Xcml0
ZVRvKG91dHB1dCwgX3JlcGVhdGVkX2RhdGFfY29kZWMpOwotICAgIH0KLQotICAgIHB1YmxpYyBp
bnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIHNpemUgKz0g
ZGF0YV8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfZGF0YV9jb2RlYyk7Ci0gICAgICByZXR1cm4g
c2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oTW9yZVN0cmluZyBvdGhl
cikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotICAgICAgZGF0YV8uQWRkKG90aGVyLmRhdGFfKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFn
OwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAg
c3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lw
TGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDEwOiB7Ci0g
ICAgICAgICAgICBkYXRhXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX2RhdGFfY29k
ZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotCi0gIH0KLQotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJO
b25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgT25l
Qnl0ZXMgOiBwYjo6SU1lc3NhZ2U8T25lQnl0ZXM+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFk
b25seSBwYjo6TWVzc2FnZVBhcnNlcjxPbmVCeXRlcz4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2Fn
ZVBhcnNlcjxPbmVCeXRlcz4oKCkgPT4gbmV3IE9uZUJ5dGVzKCkpOwotICAgIHB1YmxpYyBzdGF0
aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8T25lQnl0ZXM+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFy
c2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNj
cmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0
UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1sx
NV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5E
ZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0g
ICAgcHVibGljIE9uZUJ5dGVzKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0K
LSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBPbmVCeXRl
cyhPbmVCeXRlcyBvdGhlcikgOiB0aGlzKCkgewotICAgICAgZGF0YV8gPSBvdGhlci5kYXRhXzsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgT25lQnl0ZXMgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3
IE9uZUJ5dGVzKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAiZGF0YSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRGF0
YUZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIHBiOjpCeXRlU3RyaW5nIGRhdGFfID0gcGI6
OkJ5dGVTdHJpbmcuRW1wdHk7Ci0gICAgcHVibGljIHBiOjpCeXRlU3RyaW5nIERhdGEgewotICAg
ICAgZ2V0IHsgcmV0dXJuIGRhdGFfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBkYXRhXyA9IHBi
OjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVy
KSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIE9uZUJ5dGVzKTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgYm9vbCBFcXVhbHMoT25lQnl0ZXMgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVu
Y2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0K
LSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgfQotICAgICAgaWYgKERhdGEgIT0gb3RoZXIuRGF0YSkgcmV0dXJuIGZh
bHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGlu
dCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChEYXRhLkxl
bmd0aCAhPSAwKSBoYXNoIF49IERhdGEuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNo
OwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAg
ICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1
dCkgewotICAgICAgaWYgKERhdGEuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRl
UmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlQnl0ZXMoRGF0YSk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUg
PSAwOwotICAgICAgaWYgKERhdGEuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsg
cGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVCeXRlc1NpemUoRGF0YSk7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oT25l
Qnl0ZXMgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5EYXRhLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAg
IERhdGEgPSBvdGhlci5EYXRhOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1l
cmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0g
ICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0
Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0
RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAg
ICAgICAgIERhdGEgPSBpbnB1dC5SZWFkQnl0ZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6
U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVi
bGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIE1vcmVCeXRlcyA6IHBiOjpJTWVzc2FnZTxNb3JlQnl0
ZXM+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxNb3Jl
Qnl0ZXM+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8TW9yZUJ5dGVzPigoKSA9PiBu
ZXcgTW9yZUJ5dGVzKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8TW9y
ZUJ5dGVzPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMg
c3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVzdFByb3RvM1Jl
ZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMTZdOyB9Ci0gICAgfQotCi0gICAgcGJy
OjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQg
eyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBNb3JlQnl0ZXMoKSB7
Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNv
bnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIE1vcmVCeXRlcyhNb3JlQnl0ZXMgb3RoZXIpIDog
dGhpcygpIHsKLSAgICAgIGRhdGFfID0gb3RoZXIuZGF0YV87Ci0gICAgfQotCi0gICAgcHVibGlj
IE1vcmVCeXRlcyBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgTW9yZUJ5dGVzKHRoaXMpOwot
ICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZGF0YSIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRGF0YUZpZWxkTnVtYmVyID0gMTsK
LSAgICBwcml2YXRlIHBiOjpCeXRlU3RyaW5nIGRhdGFfID0gcGI6OkJ5dGVTdHJpbmcuRW1wdHk7
Ci0gICAgcHVibGljIHBiOjpCeXRlU3RyaW5nIERhdGEgewotICAgICAgZ2V0IHsgcmV0dXJuIGRh
dGFfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBkYXRhXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlv
bnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4g
RXF1YWxzKG90aGVyIGFzIE1vcmVCeXRlcyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1
YWxzKE1vcmVCeXRlcyBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwg
bnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVy
ZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9
Ci0gICAgICBpZiAoRGF0YSAhPSBvdGhlci5EYXRhKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkg
ewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKERhdGEuTGVuZ3RoICE9IDApIGhhc2gg
Xj0gRGF0YS5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAg
cHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNv
bkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGlj
IHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAo
RGF0YS5MZW5ndGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTApOwotICAg
ICAgICBvdXRwdXQuV3JpdGVCeXRlcyhEYXRhKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJs
aWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAo
RGF0YS5MZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRT
dHJlYW0uQ29tcHV0ZUJ5dGVzU2l6ZShEYXRhKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXpl
OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShNb3JlQnl0ZXMgb3RoZXIpIHsK
LSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAg
ICAgIGlmIChvdGhlci5EYXRhLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIERhdGEgPSBvdGhlci5E
YXRhOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29k
ZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRh
ZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIERhdGEgPSBp
bnB1dC5SZWFkQnl0ZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIFRl
c3QgaW50MzIsIHVpbnQzMiwgaW50NjQsIHVpbnQ2NCwgYW5kIGJvb2wgYXJlIGFsbCBjb21wYXRp
YmxlCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1
Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFz
cyBJbnQzMk1lc3NhZ2UgOiBwYjo6SU1lc3NhZ2U8SW50MzJNZXNzYWdlPiB7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8SW50MzJNZXNzYWdlPiBfcGFyc2Vy
ID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPEludDMyTWVzc2FnZT4oKCkgPT4gbmV3IEludDMyTWVz
c2FnZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPEludDMyTWVzc2Fn
ZT4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRp
YyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJu
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVW5pdHRlc3RQcm90bzNSZWZsZWN0
aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzE3XTsgfQotICAgIH0KLQotICAgIHBicjo6TWVz
c2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0
dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50MzJNZXNzYWdlKCkgewot
ICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25z
dHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBJbnQzMk1lc3NhZ2UoSW50MzJNZXNzYWdlIG90aGVy
KSA6IHRoaXMoKSB7Ci0gICAgICBkYXRhXyA9IG90aGVyLmRhdGFfOwotICAgIH0KLQotICAgIHB1
YmxpYyBJbnQzMk1lc3NhZ2UgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IEludDMyTWVzc2Fn
ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
ImRhdGEiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IERhdGFGaWVsZE51
bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBpbnQgZGF0YV87Ci0gICAgcHVibGljIGludCBEYXRhIHsK
LSAgICAgIGdldCB7IHJldHVybiBkYXRhXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgZGF0YV8g
PSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVh
bHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIEludDMyTWVz
c2FnZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKEludDMyTWVzc2FnZSBvdGhl
cikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwg
dGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoRGF0YSAh
PSBvdGhlci5EYXRhKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2gg
PSAxOwotICAgICAgaWYgKERhdGEgIT0gMCkgaGFzaCBePSBEYXRhLkdldEhhc2hDb2RlKCk7Ci0g
ICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRv
U3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0
cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91
dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChEYXRhICE9IDApIHsKLSAgICAgICAgb3V0
cHV0LldyaXRlUmF3VGFnKDgpOwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQzMihEYXRhKTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBp
bnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoRGF0YSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSAr
IHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKERhdGEpOwotICAgICAgfQot
ICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKElu
dDMyTWVzc2FnZSBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkRhdGEgIT0gMCkgewotICAgICAgICBE
YXRhID0gb3RoZXIuRGF0YTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJn
ZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAg
ICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNo
KHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZp
ZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAg
ICAgIERhdGEgPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6U3lz
dGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGlj
IHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFVpbnQzMk1lc3NhZ2UgOiBwYjo6SU1lc3NhZ2U8VWludDMy
TWVzc2FnZT4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2Vy
PFVpbnQzMk1lc3NhZ2U+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VWludDMyTWVz
c2FnZT4oKCkgPT4gbmV3IFVpbnQzMk1lc3NhZ2UoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6
TWVzc2FnZVBhcnNlcjxVaW50MzJNZXNzYWdlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNl
cjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3Jp
cHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3Rvcy5Vbml0dGVzdFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMThd
OyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVz
Y3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAg
IHB1YmxpYyBVaW50MzJNZXNzYWdlKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9
Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBVaW50
MzJNZXNzYWdlKFVpbnQzMk1lc3NhZ2Ugb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIGRhdGFfID0g
b3RoZXIuZGF0YV87Ci0gICAgfQotCi0gICAgcHVibGljIFVpbnQzMk1lc3NhZ2UgQ2xvbmUoKSB7
Ci0gICAgICByZXR1cm4gbmV3IFVpbnQzMk1lc3NhZ2UodGhpcyk7Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJkYXRhIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBEYXRhRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgdWlu
dCBkYXRhXzsKLSAgICBwdWJsaWMgdWludCBEYXRhIHsKLSAgICAgIGdldCB7IHJldHVybiBkYXRh
XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgZGF0YV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAg
ICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIFVpbnQzMk1lc3NhZ2UpOwotICAgIH0KLQotICAgIHB1
YmxpYyBib29sIEVxdWFscyhVaW50MzJNZXNzYWdlIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJl
bmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9
Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChEYXRhICE9IG90aGVyLkRhdGEpIHJldHVybiBm
YWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBp
bnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoRGF0YSAh
PSAwKSBoYXNoIF49IERhdGEuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAg
IH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1
cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQot
ICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewot
ICAgICAgaWYgKERhdGEgIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZVVJbnQzMihEYXRhKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBp
ZiAoRGF0YSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVh
bS5Db21wdXRlVUludDMyU2l6ZShEYXRhKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwot
ICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShVaW50MzJNZXNzYWdlIG90aGVyKSB7
Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0g
ICAgICBpZiAob3RoZXIuRGF0YSAhPSAwKSB7Ci0gICAgICAgIERhdGEgPSBvdGhlci5EYXRhOwot
ICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1
dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlu
cHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgODogewotICAgICAgICAgICAgRGF0YSA9IGlucHV0LlJl
YWRVSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRl
YnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNs
YXNzIEludDY0TWVzc2FnZSA6IHBiOjpJTWVzc2FnZTxJbnQ2NE1lc3NhZ2U+IHsKLSAgICBwcml2
YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxJbnQ2NE1lc3NhZ2U+IF9wYXJz
ZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8SW50NjRNZXNzYWdlPigoKSA9PiBuZXcgSW50NjRN
ZXNzYWdlKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8SW50NjRNZXNz
YWdlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3Rh
dGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1
cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVzdFByb3RvM1JlZmxl
Y3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMTldOyB9Ci0gICAgfQotCi0gICAgcGJyOjpN
ZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBJbnQ2NE1lc3NhZ2UoKSB7
Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNv
bnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIEludDY0TWVzc2FnZShJbnQ2NE1lc3NhZ2Ugb3Ro
ZXIpIDogdGhpcygpIHsKLSAgICAgIGRhdGFfID0gb3RoZXIuZGF0YV87Ci0gICAgfQotCi0gICAg
cHVibGljIEludDY0TWVzc2FnZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgSW50NjRNZXNz
YWdlKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRo
ZSAiZGF0YSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRGF0YUZpZWxk
TnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGxvbmcgZGF0YV87Ci0gICAgcHVibGljIGxvbmcgRGF0
YSB7Ci0gICAgICBnZXQgeyByZXR1cm4gZGF0YV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGRh
dGFfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wg
RXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBJbnQ2
NE1lc3NhZ2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhJbnQ2NE1lc3NhZ2Ug
b3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3Ro
ZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKERh
dGEgIT0gb3RoZXIuRGF0YSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBo
YXNoID0gMTsKLSAgICAgIGlmIChEYXRhICE9IDBMKSBoYXNoIF49IERhdGEuR2V0SGFzaENvZGUo
KTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJp
bmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9z
dGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNv
ZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKERhdGEgIT0gMEwpIHsKLSAgICAg
ICAgb3V0cHV0LldyaXRlUmF3VGFnKDgpOwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQ2NChEYXRh
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0g
ICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoRGF0YSAhPSAwTCkgewotICAgICAgICBzaXpl
ICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDY0U2l6ZShEYXRhKTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdl
RnJvbShJbnQ2NE1lc3NhZ2Ugb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5EYXRhICE9IDBMKSB7Ci0g
ICAgICAgIERhdGEgPSBvdGhlci5EYXRhOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0
YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAg
ICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNr
aXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgODogewot
ICAgICAgICAgICAgRGF0YSA9IGlucHV0LlJlYWRJbnQ2NCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBbZ2xv
YmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQot
ICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgVWludDY0TWVzc2FnZSA6IHBiOjpJTWVzc2Fn
ZTxVaW50NjRNZXNzYWdlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3Nh
Z2VQYXJzZXI8VWludDY0TWVzc2FnZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxV
aW50NjRNZXNzYWdlPigoKSA9PiBuZXcgVWludDY0TWVzc2FnZSgpKTsKLSAgICBwdWJsaWMgc3Rh
dGljIHBiOjpNZXNzYWdlUGFyc2VyPFVpbnQ2NE1lc3NhZ2U+IFBhcnNlciB7IGdldCB7IHJldHVy
biBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRv
ciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VU
eXBlc1syMF07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVz
c2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAg
fQotCi0gICAgcHVibGljIFVpbnQ2NE1lc3NhZ2UoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigp
OwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVi
bGljIFVpbnQ2NE1lc3NhZ2UoVWludDY0TWVzc2FnZSBvdGhlcikgOiB0aGlzKCkgewotICAgICAg
ZGF0YV8gPSBvdGhlci5kYXRhXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVWludDY0TWVzc2FnZSBD
bG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgVWludDY0TWVzc2FnZSh0aGlzKTsKLSAgICB9Ci0K
LSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImRhdGEiIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IERhdGFGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJp
dmF0ZSB1bG9uZyBkYXRhXzsKLSAgICBwdWJsaWMgdWxvbmcgRGF0YSB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gZGF0YV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGRhdGFfID0gdmFsdWU7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhl
cikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBVaW50NjRNZXNzYWdlKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoVWludDY0TWVzc2FnZSBvdGhlcikgewotICAgICAg
aWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoRGF0YSAhPSBvdGhlci5EYXRh
KSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
b3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAg
aWYgKERhdGEgIT0gMFVMKSBoYXNoIF49IERhdGEuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVy
biBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7
Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMp
OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFt
IG91dHB1dCkgewotICAgICAgaWYgKERhdGEgIT0gMFVMKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZVJhd1RhZyg4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlVUludDY0KERhdGEpOwotICAgICAgfQot
ICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXpl
ID0gMDsKLSAgICAgIGlmIChEYXRhICE9IDBVTCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6
Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVVJbnQ2NFNpemUoRGF0YSk7Ci0gICAgICB9Ci0gICAg
ICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oVWludDY0
TWVzc2FnZSBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkRhdGEgIT0gMFVMKSB7Ci0gICAgICAgIERh
dGEgPSBvdGhlci5EYXRhOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdl
RnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAg
ICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2go
dGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0Rmll
bGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgODogewotICAgICAgICAg
ICAgRGF0YSA9IGlucHV0LlJlYWRVSW50NjQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6U3lz
dGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGlj
IHNlYWxlZCBwYXJ0aWFsIGNsYXNzIEJvb2xNZXNzYWdlIDogcGI6OklNZXNzYWdlPEJvb2xNZXNz
YWdlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8Qm9v
bE1lc3NhZ2U+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8Qm9vbE1lc3NhZ2U+KCgp
ID0+IG5ldyBCb29sTWVzc2FnZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFy
c2VyPEJvb2xNZXNzYWdlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAg
ICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVz
dFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMjFdOyB9Ci0gICAgfQot
Ci0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBCb29s
TWVzc2FnZSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlh
bCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgQm9vbE1lc3NhZ2UoQm9vbE1l
c3NhZ2Ugb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIGRhdGFfID0gb3RoZXIuZGF0YV87Ci0gICAg
fQotCi0gICAgcHVibGljIEJvb2xNZXNzYWdlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBC
b29sTWVzc2FnZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVy
IGZvciB0aGUgImRhdGEiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IERh
dGFGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBib29sIGRhdGFfOwotICAgIHB1YmxpYyBi
b29sIERhdGEgewotICAgICAgZ2V0IHsgcmV0dXJuIGRhdGFfOyB9Ci0gICAgICBzZXQgewotICAg
ICAgICBkYXRhXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlk
ZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIg
YXMgQm9vbE1lc3NhZ2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhCb29sTWVz
c2FnZSBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFs
cyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBp
ZiAoRGF0YSAhPSBvdGhlci5EYXRhKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAg
aW50IGhhc2ggPSAxOwotICAgICAgaWYgKERhdGEgIT0gZmFsc2UpIGhhc2ggXj0gRGF0YS5HZXRI
YXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJy
aWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5U
b0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVU
byhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoRGF0YSAhPSBmYWxz
ZSkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZUJvb2woRGF0YSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVT
aXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYgKERhdGEgIT0gZmFsc2UpIHsK
LSAgICAgICAgc2l6ZSArPSAxICsgMTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShCb29sTWVzc2FnZSBvdGhlcikgewotICAg
ICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAg
aWYgKG90aGVyLkRhdGEgIT0gZmFsc2UpIHsKLSAgICAgICAgRGF0YSA9IG90aGVyLkRhdGE7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0
U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5w
dXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSA4OiB7Ci0gICAgICAgICAgICBEYXRhID0gaW5wdXQuUmVh
ZEJvb2woKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIFRlc3Qgb25lb2Zz
LgotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdn
ZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3Mg
VGVzdE9uZW9mIDogcGI6OklNZXNzYWdlPFRlc3RPbmVvZj4gewotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RPbmVvZj4gX3BhcnNlciA9IG5ldyBwYjo6
TWVzc2FnZVBhcnNlcjxUZXN0T25lb2Y+KCgpID0+IG5ldyBUZXN0T25lb2YoKSk7Ci0gICAgcHVi
bGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0T25lb2Y+IFBhcnNlciB7IGdldCB7IHJl
dHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3Jp
cHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3Nh
Z2VUeXBlc1syMl07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJ
TWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0g
ICAgfQotCi0gICAgcHVibGljIFRlc3RPbmVvZigpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7
Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJs
aWMgVGVzdE9uZW9mKFRlc3RPbmVvZiBvdGhlcikgOiB0aGlzKCkgewotICAgICAgc3dpdGNoIChv
dGhlci5Gb29DYXNlKSB7Ci0gICAgICAgIGNhc2UgRm9vT25lb2ZDYXNlLkZvb0ludDoKLSAgICAg
ICAgICBGb29JbnQgPSBvdGhlci5Gb29JbnQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRm9vT25lb2ZDYXNlLkZvb1N0cmluZzoKLSAgICAgICAgICBGb29TdHJpbmcgPSBvdGhlci5G
b29TdHJpbmc7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9vT25lb2ZDYXNlLkZv
b01lc3NhZ2U6Ci0gICAgICAgICAgRm9vTWVzc2FnZSA9IG90aGVyLkZvb01lc3NhZ2UuQ2xvbmUo
KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0
T25lb2YgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IFRlc3RPbmVvZih0aGlzKTsKLSAgICB9
Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImZvb19pbnQiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEZvb0ludEZpZWxkTnVtYmVyID0gMTsK
LSAgICBwdWJsaWMgaW50IEZvb0ludCB7Ci0gICAgICBnZXQgeyByZXR1cm4gZm9vQ2FzZV8gPT0g
Rm9vT25lb2ZDYXNlLkZvb0ludCA/IChpbnQpIGZvb18gOiAwOyB9Ci0gICAgICBzZXQgewotICAg
ICAgICBmb29fID0gdmFsdWU7Ci0gICAgICAgIGZvb0Nhc2VfID0gRm9vT25lb2ZDYXNlLkZvb0lu
dDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0
aGUgImZvb19zdHJpbmciIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEZv
b1N0cmluZ0ZpZWxkTnVtYmVyID0gMjsKLSAgICBwdWJsaWMgc3RyaW5nIEZvb1N0cmluZyB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gZm9vQ2FzZV8gPT0gRm9vT25lb2ZDYXNlLkZvb1N0cmluZyA/IChz
dHJpbmcpIGZvb18gOiAiIjsgfQotICAgICAgc2V0IHsKLSAgICAgICAgZm9vXyA9IHBiOjpQcm90
b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgICAgZm9v
Q2FzZV8gPSBGb29PbmVvZkNhc2UuRm9vU3RyaW5nOwotICAgICAgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZm9vX21lc3NhZ2UiIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEZvb01lc3NhZ2VGaWVsZE51bWJlciA9IDM7Ci0g
ICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVz
IEZvb01lc3NhZ2UgewotICAgICAgZ2V0IHsgcmV0dXJuIGZvb0Nhc2VfID09IEZvb09uZW9mQ2Fz
ZS5Gb29NZXNzYWdlID8gKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFs
bFR5cGVzKSBmb29fIDogbnVsbDsgfQotICAgICAgc2V0IHsKLSAgICAgICAgZm9vXyA9IHZhbHVl
OwotICAgICAgICBmb29DYXNlXyA9IHZhbHVlID09IG51bGwgPyBGb29PbmVvZkNhc2UuTm9uZSA6
IEZvb09uZW9mQ2FzZS5Gb29NZXNzYWdlOwotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUg
b2JqZWN0IGZvb187Ci0gICAgLy8vIDxzdW1tYXJ5PkVudW0gb2YgcG9zc2libGUgY2FzZXMgZm9y
IHRoZSAiZm9vIiBvbmVvZi48L3N1bW1hcnk+Ci0gICAgcHVibGljIGVudW0gRm9vT25lb2ZDYXNl
IHsKLSAgICAgIE5vbmUgPSAwLAotICAgICAgRm9vSW50ID0gMSwKLSAgICAgIEZvb1N0cmluZyA9
IDIsCi0gICAgICBGb29NZXNzYWdlID0gMywKLSAgICB9Ci0gICAgcHJpdmF0ZSBGb29PbmVvZkNh
c2UgZm9vQ2FzZV8gPSBGb29PbmVvZkNhc2UuTm9uZTsKLSAgICBwdWJsaWMgRm9vT25lb2ZDYXNl
IEZvb0Nhc2UgewotICAgICAgZ2V0IHsgcmV0dXJuIGZvb0Nhc2VfOyB9Ci0gICAgfQotCi0gICAg
cHVibGljIHZvaWQgQ2xlYXJGb28oKSB7Ci0gICAgICBmb29DYXNlXyA9IEZvb09uZW9mQ2FzZS5O
b25lOwotICAgICAgZm9vXyA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJv
b2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBU
ZXN0T25lb2YpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhUZXN0T25lb2Ygb3Ro
ZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIs
IHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKEZvb0lu
dCAhPSBvdGhlci5Gb29JbnQpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChGb29TdHJpbmcgIT0g
b3RoZXIuRm9vU3RyaW5nKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMo
Rm9vTWVzc2FnZSwgb3RoZXIuRm9vTWVzc2FnZSkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChG
b29DYXNlICE9IG90aGVyLkZvb0Nhc2UpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAg
ICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoZm9vQ2FzZV8gPT0gRm9vT25lb2ZDYXNlLkZvb0lu
dCkgaGFzaCBePSBGb29JbnQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChmb29DYXNlXyA9PSBG
b29PbmVvZkNhc2UuRm9vU3RyaW5nKSBoYXNoIF49IEZvb1N0cmluZy5HZXRIYXNoQ29kZSgpOwot
ICAgICAgaWYgKGZvb0Nhc2VfID09IEZvb09uZW9mQ2FzZS5Gb29NZXNzYWdlKSBoYXNoIF49IEZv
b01lc3NhZ2UuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gKGludCkgZm9vQ2FzZV87Ci0g
ICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRv
U3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0
cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91
dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChmb29DYXNlXyA9PSBGb29PbmVvZkNhc2Uu
Rm9vSW50KSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg4KTsKLSAgICAgICAgb3V0cHV0
LldyaXRlSW50MzIoRm9vSW50KTsKLSAgICAgIH0KLSAgICAgIGlmIChmb29DYXNlXyA9PSBGb29P
bmVvZkNhc2UuRm9vU3RyaW5nKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxOCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhGb29TdHJpbmcpOwotICAgICAgfQotICAgICAgaWYg
KGZvb0Nhc2VfID09IEZvb09uZW9mQ2FzZS5Gb29NZXNzYWdlKSB7Ci0gICAgICAgIG91dHB1dC5X
cml0ZVJhd1RhZygyNik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoRm9vTWVzc2FnZSk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAg
ICAgaW50IHNpemUgPSAwOwotICAgICAgaWYgKGZvb0Nhc2VfID09IEZvb09uZW9mQ2FzZS5Gb29J
bnQpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJ
bnQzMlNpemUoRm9vSW50KTsKLSAgICAgIH0KLSAgICAgIGlmIChmb29DYXNlXyA9PSBGb29PbmVv
ZkNhc2UuRm9vU3RyaW5nKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0
cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShGb29TdHJpbmcpOwotICAgICAgfQotICAgICAgaWYgKGZv
b0Nhc2VfID09IEZvb09uZW9mQ2FzZS5Gb29NZXNzYWdlKSB7Ci0gICAgICAgIHNpemUgKz0gMSAr
IHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoRm9vTWVzc2FnZSk7Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJn
ZUZyb20oVGVzdE9uZW9mIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBzd2l0Y2ggKG90aGVyLkZvb0Nhc2UpIHsKLSAg
ICAgICAgY2FzZSBGb29PbmVvZkNhc2UuRm9vSW50OgotICAgICAgICAgIEZvb0ludCA9IG90aGVy
LkZvb0ludDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb29PbmVvZkNhc2UuRm9v
U3RyaW5nOgotICAgICAgICAgIEZvb1N0cmluZyA9IG90aGVyLkZvb1N0cmluZzsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBGb29PbmVvZkNhc2UuRm9vTWVzc2FnZToKLSAgICAgICAg
ICBGb29NZXNzYWdlID0gb3RoZXIuRm9vTWVzc2FnZTsKLSAgICAgICAgICBicmVhazsKLSAgICAg
IH0KLQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0
cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0
LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgODogewotICAgICAgICAgICAgRm9vSW50ID0gaW5wdXQuUmVh
ZEludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSAxODogewotICAgICAgICAgICAgRm9vU3RyaW5nID0gaW5wdXQuUmVhZFN0cmluZygpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjY6IHsKLSAgICAg
ICAgICAgIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdEFsbFR5cGVzIHN1
YkJ1aWxkZXIgPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5UZXN0QWxs
VHlwZXMoKTsKLSAgICAgICAgICAgIGlmIChmb29DYXNlXyA9PSBGb29PbmVvZkNhc2UuRm9vTWVz
c2FnZSkgewotICAgICAgICAgICAgICBzdWJCdWlsZGVyLk1lcmdlRnJvbShGb29NZXNzYWdlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKHN1YkJ1aWxkZXIp
OwotICAgICAgICAgICAgRm9vTWVzc2FnZSA9IHN1YkJ1aWxkZXI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIFtn
bG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCld
Ci0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBUZXN0UGFja2VkVHlwZXMgOiBwYjo6SU1l
c3NhZ2U8VGVzdFBhY2tlZFR5cGVzPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6
Ok1lc3NhZ2VQYXJzZXI8VGVzdFBhY2tlZFR5cGVzPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdl
UGFyc2VyPFRlc3RQYWNrZWRUeXBlcz4oKCkgPT4gbmV3IFRlc3RQYWNrZWRUeXBlcygpKTsKLSAg
ICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RQYWNrZWRUeXBlcz4gUGFyc2Vy
IHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1l
c3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVW5pdHRlc3RQcm90bzNSZWZsZWN0aW9uLkRlc2Ny
aXB0b3IuTWVzc2FnZVR5cGVzWzIzXTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2Ny
aXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2Ny
aXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgVGVzdFBhY2tlZFR5cGVzKCkgewotICAgICAg
T25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rp
b24oKTsKLQotICAgIHB1YmxpYyBUZXN0UGFja2VkVHlwZXMoVGVzdFBhY2tlZFR5cGVzIG90aGVy
KSA6IHRoaXMoKSB7Ci0gICAgICBwYWNrZWRJbnQzMl8gPSBvdGhlci5wYWNrZWRJbnQzMl8uQ2xv
bmUoKTsKLSAgICAgIHBhY2tlZEludDY0XyA9IG90aGVyLnBhY2tlZEludDY0Xy5DbG9uZSgpOwot
ICAgICAgcGFja2VkVWludDMyXyA9IG90aGVyLnBhY2tlZFVpbnQzMl8uQ2xvbmUoKTsKLSAgICAg
IHBhY2tlZFVpbnQ2NF8gPSBvdGhlci5wYWNrZWRVaW50NjRfLkNsb25lKCk7Ci0gICAgICBwYWNr
ZWRTaW50MzJfID0gb3RoZXIucGFja2VkU2ludDMyXy5DbG9uZSgpOwotICAgICAgcGFja2VkU2lu
dDY0XyA9IG90aGVyLnBhY2tlZFNpbnQ2NF8uQ2xvbmUoKTsKLSAgICAgIHBhY2tlZEZpeGVkMzJf
ID0gb3RoZXIucGFja2VkRml4ZWQzMl8uQ2xvbmUoKTsKLSAgICAgIHBhY2tlZEZpeGVkNjRfID0g
b3RoZXIucGFja2VkRml4ZWQ2NF8uQ2xvbmUoKTsKLSAgICAgIHBhY2tlZFNmaXhlZDMyXyA9IG90
aGVyLnBhY2tlZFNmaXhlZDMyXy5DbG9uZSgpOwotICAgICAgcGFja2VkU2ZpeGVkNjRfID0gb3Ro
ZXIucGFja2VkU2ZpeGVkNjRfLkNsb25lKCk7Ci0gICAgICBwYWNrZWRGbG9hdF8gPSBvdGhlci5w
YWNrZWRGbG9hdF8uQ2xvbmUoKTsKLSAgICAgIHBhY2tlZERvdWJsZV8gPSBvdGhlci5wYWNrZWRE
b3VibGVfLkNsb25lKCk7Ci0gICAgICBwYWNrZWRCb29sXyA9IG90aGVyLnBhY2tlZEJvb2xfLkNs
b25lKCk7Ci0gICAgICBwYWNrZWRFbnVtXyA9IG90aGVyLnBhY2tlZEVudW1fLkNsb25lKCk7Ci0g
ICAgfQotCi0gICAgcHVibGljIFRlc3RQYWNrZWRUeXBlcyBDbG9uZSgpIHsKLSAgICAgIHJldHVy
biBuZXcgVGVzdFBhY2tlZFR5cGVzKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAicGFja2VkX2ludDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBQYWNrZWRJbnQzMkZpZWxkTnVtYmVyID0gOTA7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8aW50PiBfcmVwZWF0ZWRfcGFja2VkSW50
MzJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig3MjIpOwotICAgIHBy
aXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGludD4gcGFja2VkSW50MzJfID0gbmV3
IHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVs
ZDxpbnQ+IFBhY2tlZEludDMyIHsKLSAgICAgIGdldCB7IHJldHVybiBwYWNrZWRJbnQzMl87IH0K
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInBhY2tlZF9p
bnQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUGFja2VkSW50NjRG
aWVsZE51bWJlciA9IDkxOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENv
ZGVjPGxvbmc+IF9yZXBlYXRlZF9wYWNrZWRJbnQ2NF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVs
ZENvZGVjLkZvckludDY0KDczMCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVk
RmllbGQ8bG9uZz4gcGFja2VkSW50NjRfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxsb25nPigp
OwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz4gUGFja2VkSW50NjQgewotICAg
ICAgZ2V0IHsgcmV0dXJuIHBhY2tlZEludDY0XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicGFja2VkX3VpbnQzMiIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgUGFja2VkVWludDMyRmllbGROdW1iZXIgPSA5MjsKLSAgICBw
cml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1aW50PiBfcmVwZWF0ZWRfcGFj
a2VkVWludDMyX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yVUludDMyKDczOCk7
Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8dWludD4gcGFja2VkVWlu
dDMyXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8dWludD4oKTsKLSAgICBwdWJsaWMgcGJjOjpS
ZXBlYXRlZEZpZWxkPHVpbnQ+IFBhY2tlZFVpbnQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gcGFj
a2VkVWludDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAicGFja2VkX3VpbnQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBp
bnQgUGFja2VkVWludDY0RmllbGROdW1iZXIgPSA5MzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFk
b25seSBwYjo6RmllbGRDb2RlYzx1bG9uZz4gX3JlcGVhdGVkX3BhY2tlZFVpbnQ2NF9jb2RlYwot
ICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvclVJbnQ2NCg3NDYpOwotICAgIHByaXZhdGUgcmVh
ZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPHVsb25nPiBwYWNrZWRVaW50NjRfID0gbmV3IHBiYzo6
UmVwZWF0ZWRGaWVsZDx1bG9uZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVs
b25nPiBQYWNrZWRVaW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJuIHBhY2tlZFVpbnQ2NF87IH0K
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInBhY2tlZF9z
aW50MzIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFBhY2tlZFNpbnQz
MkZpZWxkTnVtYmVyID0gOTQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxk
Q29kZWM8aW50PiBfcmVwZWF0ZWRfcGFja2VkU2ludDMyX2NvZGVjCi0gICAgICAgID0gcGI6OkZp
ZWxkQ29kZWMuRm9yU0ludDMyKDc1NCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVh
dGVkRmllbGQ8aW50PiBwYWNrZWRTaW50MzJfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+
KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+IFBhY2tlZFNpbnQzMiB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gcGFja2VkU2ludDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3Vt
bWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicGFja2VkX3NpbnQ2NCIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUGFja2VkU2ludDY0RmllbGROdW1iZXIgPSA5NTsKLSAg
ICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxsb25nPiBfcmVwZWF0ZWRf
cGFja2VkU2ludDY0X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU0ludDY0KDc2
Mik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz4gcGFja2Vk
U2ludDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz4oKTsKLSAgICBwdWJsaWMgcGJj
OjpSZXBlYXRlZEZpZWxkPGxvbmc+IFBhY2tlZFNpbnQ2NCB7Ci0gICAgICBnZXQgeyByZXR1cm4g
cGFja2VkU2ludDY0XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAicGFja2VkX2ZpeGVkMzIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29u
c3QgaW50IFBhY2tlZEZpeGVkMzJGaWVsZE51bWJlciA9IDk2OwotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHVpbnQ+IF9yZXBlYXRlZF9wYWNrZWRGaXhlZDMyX2Nv
ZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yRml4ZWQzMig3NzApOwotICAgIHByaXZh
dGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPHVpbnQ+IHBhY2tlZEZpeGVkMzJfID0gbmV3
IHBiYzo6UmVwZWF0ZWRGaWVsZDx1aW50PigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmll
bGQ8dWludD4gUGFja2VkRml4ZWQzMiB7Ci0gICAgICBnZXQgeyByZXR1cm4gcGFja2VkRml4ZWQz
Ml87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInBh
Y2tlZF9maXhlZDY0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBQYWNr
ZWRGaXhlZDY0RmllbGROdW1iZXIgPSA5NzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBw
Yjo6RmllbGRDb2RlYzx1bG9uZz4gX3JlcGVhdGVkX3BhY2tlZEZpeGVkNjRfY29kZWMKLSAgICAg
ICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JGaXhlZDY0KDc3OCk7Ci0gICAgcHJpdmF0ZSByZWFkb25s
eSBwYmM6OlJlcGVhdGVkRmllbGQ8dWxvbmc+IHBhY2tlZEZpeGVkNjRfID0gbmV3IHBiYzo6UmVw
ZWF0ZWRGaWVsZDx1bG9uZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVsb25n
PiBQYWNrZWRGaXhlZDY0IHsKLSAgICAgIGdldCB7IHJldHVybiBwYWNrZWRGaXhlZDY0XzsgfQot
ICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicGFja2VkX3Nm
aXhlZDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBQYWNrZWRTZml4
ZWQzMkZpZWxkTnVtYmVyID0gOTg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZp
ZWxkQ29kZWM8aW50PiBfcmVwZWF0ZWRfcGFja2VkU2ZpeGVkMzJfY29kZWMKLSAgICAgICAgPSBw
Yjo6RmllbGRDb2RlYy5Gb3JTRml4ZWQzMig3ODYpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJj
OjpSZXBlYXRlZEZpZWxkPGludD4gcGFja2VkU2ZpeGVkMzJfID0gbmV3IHBiYzo6UmVwZWF0ZWRG
aWVsZDxpbnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+IFBhY2tlZFNm
aXhlZDMyIHsKLSAgICAgIGdldCB7IHJldHVybiBwYWNrZWRTZml4ZWQzMl87IH0KLSAgICB9Ci0K
LSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInBhY2tlZF9zZml4ZWQ2NCIg
ZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUGFja2VkU2ZpeGVkNjRGaWVs
ZE51bWJlciA9IDk5OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVj
PGxvbmc+IF9yZXBlYXRlZF9wYWNrZWRTZml4ZWQ2NF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVs
ZENvZGVjLkZvclNGaXhlZDY0KDc5NCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVh
dGVkRmllbGQ8bG9uZz4gcGFja2VkU2ZpeGVkNjRfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxs
b25nPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz4gUGFja2VkU2ZpeGVk
NjQgewotICAgICAgZ2V0IHsgcmV0dXJuIHBhY2tlZFNmaXhlZDY0XzsgfQotICAgIH0KLQotICAg
IC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicGFja2VkX2Zsb2F0IiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBQYWNrZWRGbG9hdEZpZWxkTnVtYmVyID0g
MTAwOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGZsb2F0PiBf
cmVwZWF0ZWRfcGFja2VkRmxvYXRfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JG
bG9hdCg4MDIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGZsb2F0
PiBwYWNrZWRGbG9hdF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGZsb2F0PigpOwotICAgIHB1
YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8ZmxvYXQ+IFBhY2tlZEZsb2F0IHsKLSAgICAgIGdldCB7
IHJldHVybiBwYWNrZWRGbG9hdF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgInBhY2tlZF9kb3VibGUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IFBhY2tlZERvdWJsZUZpZWxkTnVtYmVyID0gMTAxOwotICAgIHByaXZhdGUg
c3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGRvdWJsZT4gX3JlcGVhdGVkX3BhY2tlZERv
dWJsZV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckRvdWJsZSg4MTApOwotICAg
IHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGRvdWJsZT4gcGFja2VkRG91Ymxl
XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8ZG91YmxlPigpOwotICAgIHB1YmxpYyBwYmM6OlJl
cGVhdGVkRmllbGQ8ZG91YmxlPiBQYWNrZWREb3VibGUgewotICAgICAgZ2V0IHsgcmV0dXJuIHBh
Y2tlZERvdWJsZV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgInBhY2tlZF9ib29sIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGlu
dCBQYWNrZWRCb29sRmllbGROdW1iZXIgPSAxMDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9u
bHkgcGI6OkZpZWxkQ29kZWM8Ym9vbD4gX3JlcGVhdGVkX3BhY2tlZEJvb2xfY29kZWMKLSAgICAg
ICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JCb29sKDgxOCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBw
YmM6OlJlcGVhdGVkRmllbGQ8Ym9vbD4gcGFja2VkQm9vbF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZp
ZWxkPGJvb2w+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxib29sPiBQYWNrZWRC
b29sIHsKLSAgICAgIGdldCB7IHJldHVybiBwYWNrZWRCb29sXzsgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicGFja2VkX2VudW0iIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFBhY2tlZEVudW1GaWVsZE51bWJlciA9IDEwMzsK
LSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25FbnVtPiBfcmVwZWF0ZWRfcGFja2VkRW51bV9j
b2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckVudW0oODI2LCB4ID0+IChpbnQpIHgs
IHggPT4gKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbkVudW0pIHgp
OwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlRlc3RQcm90b3MuRm9yZWlnbkVudW0+IHBhY2tlZEVudW1fID0gbmV3IHBiYzo6
UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLkZvcmVpZ25F
bnVtPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuVGVzdFByb3Rvcy5Gb3JlaWduRW51bT4gUGFja2VkRW51bSB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gcGFja2VkRW51bV87IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBF
cXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIFRlc3RQ
YWNrZWRUeXBlcyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKFRlc3RQYWNrZWRU
eXBlcyBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFs
cyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBp
ZighcGFja2VkSW50MzJfLkVxdWFscyhvdGhlci5wYWNrZWRJbnQzMl8pKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZighcGFja2VkSW50NjRfLkVxdWFscyhvdGhlci5wYWNrZWRJbnQ2NF8pKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZighcGFja2VkVWludDMyXy5FcXVhbHMob3RoZXIucGFja2VkVWlu
dDMyXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFwYWNrZWRVaW50NjRfLkVxdWFscyhvdGhl
ci5wYWNrZWRVaW50NjRfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXBhY2tlZFNpbnQzMl8u
RXF1YWxzKG90aGVyLnBhY2tlZFNpbnQzMl8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcGFj
a2VkU2ludDY0Xy5FcXVhbHMob3RoZXIucGFja2VkU2ludDY0XykpIHJldHVybiBmYWxzZTsKLSAg
ICAgIGlmKCFwYWNrZWRGaXhlZDMyXy5FcXVhbHMob3RoZXIucGFja2VkRml4ZWQzMl8pKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZighcGFja2VkRml4ZWQ2NF8uRXF1YWxzKG90aGVyLnBhY2tlZEZp
eGVkNjRfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXBhY2tlZFNmaXhlZDMyXy5FcXVhbHMo
b3RoZXIucGFja2VkU2ZpeGVkMzJfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXBhY2tlZFNm
aXhlZDY0Xy5FcXVhbHMob3RoZXIucGFja2VkU2ZpeGVkNjRfKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgaWYoIXBhY2tlZEZsb2F0Xy5FcXVhbHMob3RoZXIucGFja2VkRmxvYXRfKSkgcmV0dXJuIGZh
bHNlOwotICAgICAgaWYoIXBhY2tlZERvdWJsZV8uRXF1YWxzKG90aGVyLnBhY2tlZERvdWJsZV8p
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcGFja2VkQm9vbF8uRXF1YWxzKG90aGVyLnBhY2tl
ZEJvb2xfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXBhY2tlZEVudW1fLkVxdWFscyhvdGhl
ci5wYWNrZWRFbnVtXykpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFz
aCA9IDE7Ci0gICAgICBoYXNoIF49IHBhY2tlZEludDMyXy5HZXRIYXNoQ29kZSgpOwotICAgICAg
aGFzaCBePSBwYWNrZWRJbnQ2NF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcGFja2Vk
VWludDMyXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBwYWNrZWRVaW50NjRfLkdldEhh
c2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHBhY2tlZFNpbnQzMl8uR2V0SGFzaENvZGUoKTsKLSAg
ICAgIGhhc2ggXj0gcGFja2VkU2ludDY0Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBw
YWNrZWRGaXhlZDMyXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBwYWNrZWRGaXhlZDY0
Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBwYWNrZWRTZml4ZWQzMl8uR2V0SGFzaENv
ZGUoKTsKLSAgICAgIGhhc2ggXj0gcGFja2VkU2ZpeGVkNjRfLkdldEhhc2hDb2RlKCk7Ci0gICAg
ICBoYXNoIF49IHBhY2tlZEZsb2F0Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBwYWNr
ZWREb3VibGVfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHBhY2tlZEJvb2xfLkdldEhh
c2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHBhY2tlZEVudW1fLkdldEhhc2hDb2RlKCk7Ci0gICAg
ICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3Ry
aW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmlu
Zyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1
dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIHBhY2tlZEludDMyXy5Xcml0ZVRvKG91dHB1dCwgX3Jl
cGVhdGVkX3BhY2tlZEludDMyX2NvZGVjKTsKLSAgICAgIHBhY2tlZEludDY0Xy5Xcml0ZVRvKG91
dHB1dCwgX3JlcGVhdGVkX3BhY2tlZEludDY0X2NvZGVjKTsKLSAgICAgIHBhY2tlZFVpbnQzMl8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9wYWNrZWRVaW50MzJfY29kZWMpOwotICAgICAgcGFj
a2VkVWludDY0Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3BhY2tlZFVpbnQ2NF9jb2RlYyk7
Ci0gICAgICBwYWNrZWRTaW50MzJfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcGFja2VkU2lu
dDMyX2NvZGVjKTsKLSAgICAgIHBhY2tlZFNpbnQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRl
ZF9wYWNrZWRTaW50NjRfY29kZWMpOwotICAgICAgcGFja2VkRml4ZWQzMl8uV3JpdGVUbyhvdXRw
dXQsIF9yZXBlYXRlZF9wYWNrZWRGaXhlZDMyX2NvZGVjKTsKLSAgICAgIHBhY2tlZEZpeGVkNjRf
LldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcGFja2VkRml4ZWQ2NF9jb2RlYyk7Ci0gICAgICBw
YWNrZWRTZml4ZWQzMl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9wYWNrZWRTZml4ZWQzMl9j
b2RlYyk7Ci0gICAgICBwYWNrZWRTZml4ZWQ2NF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9w
YWNrZWRTZml4ZWQ2NF9jb2RlYyk7Ci0gICAgICBwYWNrZWRGbG9hdF8uV3JpdGVUbyhvdXRwdXQs
IF9yZXBlYXRlZF9wYWNrZWRGbG9hdF9jb2RlYyk7Ci0gICAgICBwYWNrZWREb3VibGVfLldyaXRl
VG8ob3V0cHV0LCBfcmVwZWF0ZWRfcGFja2VkRG91YmxlX2NvZGVjKTsKLSAgICAgIHBhY2tlZEJv
b2xfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcGFja2VkQm9vbF9jb2RlYyk7Ci0gICAgICBw
YWNrZWRFbnVtXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3BhY2tlZEVudW1fY29kZWMpOwot
ICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXpl
ID0gMDsKLSAgICAgIHNpemUgKz0gcGFja2VkSW50MzJfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVk
X3BhY2tlZEludDMyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcGFja2VkSW50NjRfLkNhbGN1bGF0
ZVNpemUoX3JlcGVhdGVkX3BhY2tlZEludDY0X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcGFja2Vk
VWludDMyXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9wYWNrZWRVaW50MzJfY29kZWMpOwotICAg
ICAgc2l6ZSArPSBwYWNrZWRVaW50NjRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3BhY2tlZFVp
bnQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHBhY2tlZFNpbnQzMl8uQ2FsY3VsYXRlU2l6ZShf
cmVwZWF0ZWRfcGFja2VkU2ludDMyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcGFja2VkU2ludDY0
Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9wYWNrZWRTaW50NjRfY29kZWMpOwotICAgICAgc2l6
ZSArPSBwYWNrZWRGaXhlZDMyXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9wYWNrZWRGaXhlZDMy
X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcGFja2VkRml4ZWQ2NF8uQ2FsY3VsYXRlU2l6ZShfcmVw
ZWF0ZWRfcGFja2VkRml4ZWQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHBhY2tlZFNmaXhlZDMy
Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9wYWNrZWRTZml4ZWQzMl9jb2RlYyk7Ci0gICAgICBz
aXplICs9IHBhY2tlZFNmaXhlZDY0Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9wYWNrZWRTZml4
ZWQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHBhY2tlZEZsb2F0Xy5DYWxjdWxhdGVTaXplKF9y
ZXBlYXRlZF9wYWNrZWRGbG9hdF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHBhY2tlZERvdWJsZV8u
Q2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcGFja2VkRG91YmxlX2NvZGVjKTsKLSAgICAgIHNpemUg
Kz0gcGFja2VkQm9vbF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcGFja2VkQm9vbF9jb2RlYyk7
Ci0gICAgICBzaXplICs9IHBhY2tlZEVudW1fLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3BhY2tl
ZEVudW1fY29kZWMpOwotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgTWVyZ2VGcm9tKFRlc3RQYWNrZWRUeXBlcyBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09
IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgcGFja2VkSW50MzJfLkFk
ZChvdGhlci5wYWNrZWRJbnQzMl8pOwotICAgICAgcGFja2VkSW50NjRfLkFkZChvdGhlci5wYWNr
ZWRJbnQ2NF8pOwotICAgICAgcGFja2VkVWludDMyXy5BZGQob3RoZXIucGFja2VkVWludDMyXyk7
Ci0gICAgICBwYWNrZWRVaW50NjRfLkFkZChvdGhlci5wYWNrZWRVaW50NjRfKTsKLSAgICAgIHBh
Y2tlZFNpbnQzMl8uQWRkKG90aGVyLnBhY2tlZFNpbnQzMl8pOwotICAgICAgcGFja2VkU2ludDY0
Xy5BZGQob3RoZXIucGFja2VkU2ludDY0Xyk7Ci0gICAgICBwYWNrZWRGaXhlZDMyXy5BZGQob3Ro
ZXIucGFja2VkRml4ZWQzMl8pOwotICAgICAgcGFja2VkRml4ZWQ2NF8uQWRkKG90aGVyLnBhY2tl
ZEZpeGVkNjRfKTsKLSAgICAgIHBhY2tlZFNmaXhlZDMyXy5BZGQob3RoZXIucGFja2VkU2ZpeGVk
MzJfKTsKLSAgICAgIHBhY2tlZFNmaXhlZDY0Xy5BZGQob3RoZXIucGFja2VkU2ZpeGVkNjRfKTsK
LSAgICAgIHBhY2tlZEZsb2F0Xy5BZGQob3RoZXIucGFja2VkRmxvYXRfKTsKLSAgICAgIHBhY2tl
ZERvdWJsZV8uQWRkKG90aGVyLnBhY2tlZERvdWJsZV8pOwotICAgICAgcGFja2VkQm9vbF8uQWRk
KG90aGVyLnBhY2tlZEJvb2xfKTsKLSAgICAgIHBhY2tlZEVudW1fLkFkZChvdGhlci5wYWNrZWRF
bnVtXyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0
U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5w
dXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSA3MjI6Ci0gICAgICAgICAgY2FzZSA3MjA6IHsKLSAgICAg
ICAgICAgIHBhY2tlZEludDMyXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3BhY2tl
ZEludDMyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBjYXNlIDczMDoKLSAgICAgICAgICBjYXNlIDcyODogewotICAgICAgICAgICAgcGFja2VkSW50
NjRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcGFja2VkSW50NjRfY29kZWMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNzM4OgotICAg
ICAgICAgIGNhc2UgNzM2OiB7Ci0gICAgICAgICAgICBwYWNrZWRVaW50MzJfLkFkZEVudHJpZXNG
cm9tKGlucHV0LCBfcmVwZWF0ZWRfcGFja2VkVWludDMyX2NvZGVjKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc0NjoKLSAgICAgICAgICBjYXNlIDc0
NDogewotICAgICAgICAgICAgcGFja2VkVWludDY0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3Jl
cGVhdGVkX3BhY2tlZFVpbnQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgY2FzZSA3NTQ6Ci0gICAgICAgICAgY2FzZSA3NTI6IHsKLSAgICAgICAg
ICAgIHBhY2tlZFNpbnQzMl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9wYWNrZWRT
aW50MzJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGNhc2UgNzYyOgotICAgICAgICAgIGNhc2UgNzYwOiB7Ci0gICAgICAgICAgICBwYWNrZWRTaW50
NjRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcGFja2VkU2ludDY0X2NvZGVjKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc3MDoKLSAg
ICAgICAgICBjYXNlIDc3MzogewotICAgICAgICAgICAgcGFja2VkRml4ZWQzMl8uQWRkRW50cmll
c0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9wYWNrZWRGaXhlZDMyX2NvZGVjKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc3ODoKLSAgICAgICAgICBjYXNl
IDc3NzogewotICAgICAgICAgICAgcGFja2VkRml4ZWQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQs
IF9yZXBlYXRlZF9wYWNrZWRGaXhlZDY0X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc4NjoKLSAgICAgICAgICBjYXNlIDc4OTogewotICAg
ICAgICAgICAgcGFja2VkU2ZpeGVkMzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRf
cGFja2VkU2ZpeGVkMzJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgNzk0OgotICAgICAgICAgIGNhc2UgNzkzOiB7Ci0gICAgICAgICAgICBw
YWNrZWRTZml4ZWQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9wYWNrZWRTZml4
ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Y2FzZSA4MDI6Ci0gICAgICAgICAgY2FzZSA4MDU6IHsKLSAgICAgICAgICAgIHBhY2tlZEZsb2F0
Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3BhY2tlZEZsb2F0X2NvZGVjKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDgxMDoKLSAgICAg
ICAgICBjYXNlIDgwOTogewotICAgICAgICAgICAgcGFja2VkRG91YmxlXy5BZGRFbnRyaWVzRnJv
bShpbnB1dCwgX3JlcGVhdGVkX3BhY2tlZERvdWJsZV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA4MTg6Ci0gICAgICAgICAgY2FzZSA4MTY6
IHsKLSAgICAgICAgICAgIHBhY2tlZEJvb2xfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0
ZWRfcGFja2VkQm9vbF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSA4MjY6Ci0gICAgICAgICAgY2FzZSA4MjQ6IHsKLSAgICAgICAgICAgIHBh
Y2tlZEVudW1fLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcGFja2VkRW51bV9jb2Rl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBBIG1lc3NhZ2Ugd2l0aCB0
aGUgc2FtZSBmaWVsZHMgYXMgVGVzdFBhY2tlZFR5cGVzLCBidXQgd2l0aG91dCBwYWNraW5nLiBV
c2VkCi0gIC8vLyAgdG8gdGVzdCBwYWNrZWQgJmx0Oy0+IHVucGFja2VkIHdpcmUgY29tcGF0aWJp
bGl0eS4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRl
YnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNs
YXNzIFRlc3RVbnBhY2tlZFR5cGVzIDogcGI6OklNZXNzYWdlPFRlc3RVbnBhY2tlZFR5cGVzPiB7
Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdFVucGFj
a2VkVHlwZXM+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdFVucGFja2VkVHlw
ZXM+KCgpID0+IG5ldyBUZXN0VW5wYWNrZWRUeXBlcygpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBi
OjpNZXNzYWdlUGFyc2VyPFRlc3RVbnBhY2tlZFR5cGVzPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4g
X3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3Ig
RGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
VGVzdFByb3Rvcy5Vbml0dGVzdFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlw
ZXNbMjRdOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3Nh
Z2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0K
LQotICAgIHB1YmxpYyBUZXN0VW5wYWNrZWRUeXBlcygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9u
KCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBw
dWJsaWMgVGVzdFVucGFja2VkVHlwZXMoVGVzdFVucGFja2VkVHlwZXMgb3RoZXIpIDogdGhpcygp
IHsKLSAgICAgIHVucGFja2VkSW50MzJfID0gb3RoZXIudW5wYWNrZWRJbnQzMl8uQ2xvbmUoKTsK
LSAgICAgIHVucGFja2VkSW50NjRfID0gb3RoZXIudW5wYWNrZWRJbnQ2NF8uQ2xvbmUoKTsKLSAg
ICAgIHVucGFja2VkVWludDMyXyA9IG90aGVyLnVucGFja2VkVWludDMyXy5DbG9uZSgpOwotICAg
ICAgdW5wYWNrZWRVaW50NjRfID0gb3RoZXIudW5wYWNrZWRVaW50NjRfLkNsb25lKCk7Ci0gICAg
ICB1bnBhY2tlZFNpbnQzMl8gPSBvdGhlci51bnBhY2tlZFNpbnQzMl8uQ2xvbmUoKTsKLSAgICAg
IHVucGFja2VkU2ludDY0XyA9IG90aGVyLnVucGFja2VkU2ludDY0Xy5DbG9uZSgpOwotICAgICAg
dW5wYWNrZWRGaXhlZDMyXyA9IG90aGVyLnVucGFja2VkRml4ZWQzMl8uQ2xvbmUoKTsKLSAgICAg
IHVucGFja2VkRml4ZWQ2NF8gPSBvdGhlci51bnBhY2tlZEZpeGVkNjRfLkNsb25lKCk7Ci0gICAg
ICB1bnBhY2tlZFNmaXhlZDMyXyA9IG90aGVyLnVucGFja2VkU2ZpeGVkMzJfLkNsb25lKCk7Ci0g
ICAgICB1bnBhY2tlZFNmaXhlZDY0XyA9IG90aGVyLnVucGFja2VkU2ZpeGVkNjRfLkNsb25lKCk7
Ci0gICAgICB1bnBhY2tlZEZsb2F0XyA9IG90aGVyLnVucGFja2VkRmxvYXRfLkNsb25lKCk7Ci0g
ICAgICB1bnBhY2tlZERvdWJsZV8gPSBvdGhlci51bnBhY2tlZERvdWJsZV8uQ2xvbmUoKTsKLSAg
ICAgIHVucGFja2VkQm9vbF8gPSBvdGhlci51bnBhY2tlZEJvb2xfLkNsb25lKCk7Ci0gICAgICB1
bnBhY2tlZEVudW1fID0gb3RoZXIudW5wYWNrZWRFbnVtXy5DbG9uZSgpOwotICAgIH0KLQotICAg
IHB1YmxpYyBUZXN0VW5wYWNrZWRUeXBlcyBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgVGVz
dFVucGFja2VkVHlwZXModGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJ1bnBhY2tlZF9pbnQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgVW5wYWNrZWRJbnQzMkZpZWxkTnVtYmVyID0gOTA7Ci0gICAgcHJpdmF0ZSBz
dGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8aW50PiBfcmVwZWF0ZWRfdW5wYWNrZWRJbnQz
Ml9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckludDMyKDcyMCk7Ci0gICAgcHJp
dmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PiB1bnBhY2tlZEludDMyXyA9IG5l
dyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmll
bGQ8aW50PiBVbnBhY2tlZEludDMyIHsKLSAgICAgIGdldCB7IHJldHVybiB1bnBhY2tlZEludDMy
XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAidW5w
YWNrZWRfaW50NjQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFVucGFj
a2VkSW50NjRGaWVsZE51bWJlciA9IDkxOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBi
OjpGaWVsZENvZGVjPGxvbmc+IF9yZXBlYXRlZF91bnBhY2tlZEludDY0X2NvZGVjCi0gICAgICAg
ID0gcGI6OkZpZWxkQ29kZWMuRm9ySW50NjQoNzI4KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBi
Yzo6UmVwZWF0ZWRGaWVsZDxsb25nPiB1bnBhY2tlZEludDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVk
RmllbGQ8bG9uZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc+IFVucGFj
a2VkSW50NjQgewotICAgICAgZ2V0IHsgcmV0dXJuIHVucGFja2VkSW50NjRfOyB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ1bnBhY2tlZF91aW50MzIi
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFVucGFja2VkVWludDMyRmll
bGROdW1iZXIgPSA5MjsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2Rl
Yzx1aW50PiBfcmVwZWF0ZWRfdW5wYWNrZWRVaW50MzJfY29kZWMKLSAgICAgICAgPSBwYjo6Rmll
bGRDb2RlYy5Gb3JVSW50MzIoNzM2KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0
ZWRGaWVsZDx1aW50PiB1bnBhY2tlZFVpbnQzMl8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPHVp
bnQ+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDx1aW50PiBVbnBhY2tlZFVpbnQz
MiB7Ci0gICAgICBnZXQgeyByZXR1cm4gdW5wYWNrZWRVaW50MzJfOyB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ1bnBhY2tlZF91aW50NjQiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFVucGFja2VkVWludDY0RmllbGROdW1i
ZXIgPSA5MzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1bG9u
Zz4gX3JlcGVhdGVkX3VucGFja2VkVWludDY0X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29k
ZWMuRm9yVUludDY0KDc0NCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmll
bGQ8dWxvbmc+IHVucGFja2VkVWludDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8dWxvbmc+
KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDx1bG9uZz4gVW5wYWNrZWRVaW50NjQg
ewotICAgICAgZ2V0IHsgcmV0dXJuIHVucGFja2VkVWludDY0XzsgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAidW5wYWNrZWRfc2ludDMyIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBVbnBhY2tlZFNpbnQzMkZpZWxkTnVtYmVy
ID0gOTQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8aW50PiBf
cmVwZWF0ZWRfdW5wYWNrZWRTaW50MzJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5G
b3JTSW50MzIoNzUyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxp
bnQ+IHVucGFja2VkU2ludDMyXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PigpOwotICAg
IHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PiBVbnBhY2tlZFNpbnQzMiB7Ci0gICAgICBn
ZXQgeyByZXR1cm4gdW5wYWNrZWRTaW50MzJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJ1bnBhY2tlZF9zaW50NjQiIGZpZWxkLjwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgY29uc3QgaW50IFVucGFja2VkU2ludDY0RmllbGROdW1iZXIgPSA5NTsKLSAg
ICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxsb25nPiBfcmVwZWF0ZWRf
dW5wYWNrZWRTaW50NjRfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JTSW50NjQo
NzYwKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxsb25nPiB1bnBh
Y2tlZFNpbnQ2NF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc+KCk7Ci0gICAgcHVibGlj
IHBiYzo6UmVwZWF0ZWRGaWVsZDxsb25nPiBVbnBhY2tlZFNpbnQ2NCB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gdW5wYWNrZWRTaW50NjRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJ1bnBhY2tlZF9maXhlZDMyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBVbnBhY2tlZEZpeGVkMzJGaWVsZE51bWJlciA9IDk2OwotICAgIHBy
aXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHVpbnQ+IF9yZXBlYXRlZF91bnBh
Y2tlZEZpeGVkMzJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JGaXhlZDMyKDc3
Myk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8dWludD4gdW5wYWNr
ZWRGaXhlZDMyXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8dWludD4oKTsKLSAgICBwdWJsaWMg
cGJjOjpSZXBlYXRlZEZpZWxkPHVpbnQ+IFVucGFja2VkRml4ZWQzMiB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gdW5wYWNrZWRGaXhlZDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAidW5wYWNrZWRfZml4ZWQ2NCIgZmllbGQuPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBjb25zdCBpbnQgVW5wYWNrZWRGaXhlZDY0RmllbGROdW1iZXIgPSA5NzsKLSAgICBw
cml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1bG9uZz4gX3JlcGVhdGVkX3Vu
cGFja2VkRml4ZWQ2NF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckZpeGVkNjQo
Nzc3KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDx1bG9uZz4gdW5w
YWNrZWRGaXhlZDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8dWxvbmc+KCk7Ci0gICAgcHVi
bGljIHBiYzo6UmVwZWF0ZWRGaWVsZDx1bG9uZz4gVW5wYWNrZWRGaXhlZDY0IHsKLSAgICAgIGdl
dCB7IHJldHVybiB1bnBhY2tlZEZpeGVkNjRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJ1bnBhY2tlZF9zZml4ZWQzMiIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVW5wYWNrZWRTZml4ZWQzMkZpZWxkTnVtYmVyID0gOTg7
Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8aW50PiBfcmVwZWF0
ZWRfdW5wYWNrZWRTZml4ZWQzMl9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvclNG
aXhlZDMyKDc4OSk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8aW50
PiB1bnBhY2tlZFNmaXhlZDMyXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PigpOwotICAg
IHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PiBVbnBhY2tlZFNmaXhlZDMyIHsKLSAgICAg
IGdldCB7IHJldHVybiB1bnBhY2tlZFNmaXhlZDMyXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3Vt
bWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAidW5wYWNrZWRfc2ZpeGVkNjQiIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFVucGFja2VkU2ZpeGVkNjRGaWVsZE51bWJlciA9
IDk5OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGxvbmc+IF9y
ZXBlYXRlZF91bnBhY2tlZFNmaXhlZDY0X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMu
Rm9yU0ZpeGVkNjQoNzkzKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVs
ZDxsb25nPiB1bnBhY2tlZFNmaXhlZDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz4o
KTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc+IFVucGFja2VkU2ZpeGVkNjQg
ewotICAgICAgZ2V0IHsgcmV0dXJuIHVucGFja2VkU2ZpeGVkNjRfOyB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ1bnBhY2tlZF9mbG9hdCIgZmllbGQu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVW5wYWNrZWRGbG9hdEZpZWxkTnVtYmVy
ID0gMTAwOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGZsb2F0
PiBfcmVwZWF0ZWRfdW5wYWNrZWRGbG9hdF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVj
LkZvckZsb2F0KDgwNSk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8
ZmxvYXQ+IHVucGFja2VkRmxvYXRfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxmbG9hdD4oKTsK
LSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGZsb2F0PiBVbnBhY2tlZEZsb2F0IHsKLSAg
ICAgIGdldCB7IHJldHVybiB1bnBhY2tlZEZsb2F0XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3Vt
bWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAidW5wYWNrZWRfZG91YmxlIiBmaWVsZC48L3N1bW1h
cnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBVbnBhY2tlZERvdWJsZUZpZWxkTnVtYmVyID0gMTAx
OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGRvdWJsZT4gX3Jl
cGVhdGVkX3VucGFja2VkRG91YmxlX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9y
RG91YmxlKDgwOSk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8ZG91
YmxlPiB1bnBhY2tlZERvdWJsZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGRvdWJsZT4oKTsK
LSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGRvdWJsZT4gVW5wYWNrZWREb3VibGUgewot
ICAgICAgZ2V0IHsgcmV0dXJuIHVucGFja2VkRG91YmxlXzsgfQotICAgIH0KLQotICAgIC8vLyA8
c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAidW5wYWNrZWRfYm9vbCIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVW5wYWNrZWRCb29sRmllbGROdW1iZXIgPSAxMDI7
Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Ym9vbD4gX3JlcGVh
dGVkX3VucGFja2VkQm9vbF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckJvb2wo
ODE2KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxib29sPiB1bnBh
Y2tlZEJvb2xfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxib29sPigpOwotICAgIHB1YmxpYyBw
YmM6OlJlcGVhdGVkRmllbGQ8Ym9vbD4gVW5wYWNrZWRCb29sIHsKLSAgICAgIGdldCB7IHJldHVy
biB1bnBhY2tlZEJvb2xfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJ1bnBhY2tlZF9lbnVtIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBVbnBhY2tlZEVudW1GaWVsZE51bWJlciA9IDEwMzsKLSAgICBwcml2YXRlIHN0YXRp
YyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zLkZvcmVpZ25FbnVtPiBfcmVwZWF0ZWRfdW5wYWNrZWRFbnVtX2NvZGVjCi0gICAgICAgID0g
cGI6OkZpZWxkQ29kZWMuRm9yRW51bSg4MjQsIHggPT4gKGludCkgeCwgeCA9PiAoZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb3JlaWduRW51bSkgeCk7Ci0gICAgcHJpdmF0ZSBy
ZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFBy
b3Rvcy5Gb3JlaWduRW51bT4gdW5wYWNrZWRFbnVtXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Gb3JlaWduRW51bT4oKTsKLSAgICBw
dWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuRm9yZWlnbkVudW0+IFVucGFja2VkRW51bSB7Ci0gICAgICBnZXQgeyByZXR1cm4gdW5wYWNr
ZWRFbnVtXzsgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmpl
Y3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgVGVzdFVucGFja2VkVHlw
ZXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhUZXN0VW5wYWNrZWRUeXBlcyBv
dGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhl
ciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZighdW5w
YWNrZWRJbnQzMl8uRXF1YWxzKG90aGVyLnVucGFja2VkSW50MzJfKSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYoIXVucGFja2VkSW50NjRfLkVxdWFscyhvdGhlci51bnBhY2tlZEludDY0XykpIHJl
dHVybiBmYWxzZTsKLSAgICAgIGlmKCF1bnBhY2tlZFVpbnQzMl8uRXF1YWxzKG90aGVyLnVucGFj
a2VkVWludDMyXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCF1bnBhY2tlZFVpbnQ2NF8uRXF1
YWxzKG90aGVyLnVucGFja2VkVWludDY0XykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCF1bnBh
Y2tlZFNpbnQzMl8uRXF1YWxzKG90aGVyLnVucGFja2VkU2ludDMyXykpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmKCF1bnBhY2tlZFNpbnQ2NF8uRXF1YWxzKG90aGVyLnVucGFja2VkU2ludDY0Xykp
IHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCF1bnBhY2tlZEZpeGVkMzJfLkVxdWFscyhvdGhlci51
bnBhY2tlZEZpeGVkMzJfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXVucGFja2VkRml4ZWQ2
NF8uRXF1YWxzKG90aGVyLnVucGFja2VkRml4ZWQ2NF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZighdW5wYWNrZWRTZml4ZWQzMl8uRXF1YWxzKG90aGVyLnVucGFja2VkU2ZpeGVkMzJfKSkgcmV0
dXJuIGZhbHNlOwotICAgICAgaWYoIXVucGFja2VkU2ZpeGVkNjRfLkVxdWFscyhvdGhlci51bnBh
Y2tlZFNmaXhlZDY0XykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCF1bnBhY2tlZEZsb2F0Xy5F
cXVhbHMob3RoZXIudW5wYWNrZWRGbG9hdF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighdW5w
YWNrZWREb3VibGVfLkVxdWFscyhvdGhlci51bnBhY2tlZERvdWJsZV8pKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZighdW5wYWNrZWRCb29sXy5FcXVhbHMob3RoZXIudW5wYWNrZWRCb29sXykpIHJl
dHVybiBmYWxzZTsKLSAgICAgIGlmKCF1bnBhY2tlZEVudW1fLkVxdWFscyhvdGhlci51bnBhY2tl
ZEVudW1fKSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
cHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsK
LSAgICAgIGhhc2ggXj0gdW5wYWNrZWRJbnQzMl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2gg
Xj0gdW5wYWNrZWRJbnQ2NF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gdW5wYWNrZWRV
aW50MzJfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHVucGFja2VkVWludDY0Xy5HZXRI
YXNoQ29kZSgpOwotICAgICAgaGFzaCBePSB1bnBhY2tlZFNpbnQzMl8uR2V0SGFzaENvZGUoKTsK
LSAgICAgIGhhc2ggXj0gdW5wYWNrZWRTaW50NjRfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNo
IF49IHVucGFja2VkRml4ZWQzMl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gdW5wYWNr
ZWRGaXhlZDY0Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSB1bnBhY2tlZFNmaXhlZDMy
Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSB1bnBhY2tlZFNmaXhlZDY0Xy5HZXRIYXNo
Q29kZSgpOwotICAgICAgaGFzaCBePSB1bnBhY2tlZEZsb2F0Xy5HZXRIYXNoQ29kZSgpOwotICAg
ICAgaGFzaCBePSB1bnBhY2tlZERvdWJsZV8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0g
dW5wYWNrZWRCb29sXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSB1bnBhY2tlZEVudW1f
LkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
b3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0
dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBX
cml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIHVucGFja2VkSW50
MzJfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfdW5wYWNrZWRJbnQzMl9jb2RlYyk7Ci0gICAg
ICB1bnBhY2tlZEludDY0Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3VucGFja2VkSW50NjRf
Y29kZWMpOwotICAgICAgdW5wYWNrZWRVaW50MzJfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRf
dW5wYWNrZWRVaW50MzJfY29kZWMpOwotICAgICAgdW5wYWNrZWRVaW50NjRfLldyaXRlVG8ob3V0
cHV0LCBfcmVwZWF0ZWRfdW5wYWNrZWRVaW50NjRfY29kZWMpOwotICAgICAgdW5wYWNrZWRTaW50
MzJfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfdW5wYWNrZWRTaW50MzJfY29kZWMpOwotICAg
ICAgdW5wYWNrZWRTaW50NjRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfdW5wYWNrZWRTaW50
NjRfY29kZWMpOwotICAgICAgdW5wYWNrZWRGaXhlZDMyXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVh
dGVkX3VucGFja2VkRml4ZWQzMl9jb2RlYyk7Ci0gICAgICB1bnBhY2tlZEZpeGVkNjRfLldyaXRl
VG8ob3V0cHV0LCBfcmVwZWF0ZWRfdW5wYWNrZWRGaXhlZDY0X2NvZGVjKTsKLSAgICAgIHVucGFj
a2VkU2ZpeGVkMzJfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfdW5wYWNrZWRTZml4ZWQzMl9j
b2RlYyk7Ci0gICAgICB1bnBhY2tlZFNmaXhlZDY0Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVk
X3VucGFja2VkU2ZpeGVkNjRfY29kZWMpOwotICAgICAgdW5wYWNrZWRGbG9hdF8uV3JpdGVUbyhv
dXRwdXQsIF9yZXBlYXRlZF91bnBhY2tlZEZsb2F0X2NvZGVjKTsKLSAgICAgIHVucGFja2VkRG91
YmxlXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3VucGFja2VkRG91YmxlX2NvZGVjKTsKLSAg
ICAgIHVucGFja2VkQm9vbF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF91bnBhY2tlZEJvb2xf
Y29kZWMpOwotICAgICAgdW5wYWNrZWRFbnVtXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3Vu
cGFja2VkRW51bV9jb2RlYyk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXpl
KCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgc2l6ZSArPSB1bnBhY2tlZEludDMyXy5D
YWxjdWxhdGVTaXplKF9yZXBlYXRlZF91bnBhY2tlZEludDMyX2NvZGVjKTsKLSAgICAgIHNpemUg
Kz0gdW5wYWNrZWRJbnQ2NF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfdW5wYWNrZWRJbnQ2NF9j
b2RlYyk7Ci0gICAgICBzaXplICs9IHVucGFja2VkVWludDMyXy5DYWxjdWxhdGVTaXplKF9yZXBl
YXRlZF91bnBhY2tlZFVpbnQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IHVucGFja2VkVWludDY0
Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF91bnBhY2tlZFVpbnQ2NF9jb2RlYyk7Ci0gICAgICBz
aXplICs9IHVucGFja2VkU2ludDMyXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF91bnBhY2tlZFNp
bnQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IHVucGFja2VkU2ludDY0Xy5DYWxjdWxhdGVTaXpl
KF9yZXBlYXRlZF91bnBhY2tlZFNpbnQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHVucGFja2Vk
Rml4ZWQzMl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfdW5wYWNrZWRGaXhlZDMyX2NvZGVjKTsK
LSAgICAgIHNpemUgKz0gdW5wYWNrZWRGaXhlZDY0Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF91
bnBhY2tlZEZpeGVkNjRfY29kZWMpOwotICAgICAgc2l6ZSArPSB1bnBhY2tlZFNmaXhlZDMyXy5D
YWxjdWxhdGVTaXplKF9yZXBlYXRlZF91bnBhY2tlZFNmaXhlZDMyX2NvZGVjKTsKLSAgICAgIHNp
emUgKz0gdW5wYWNrZWRTZml4ZWQ2NF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfdW5wYWNrZWRT
Zml4ZWQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHVucGFja2VkRmxvYXRfLkNhbGN1bGF0ZVNp
emUoX3JlcGVhdGVkX3VucGFja2VkRmxvYXRfY29kZWMpOwotICAgICAgc2l6ZSArPSB1bnBhY2tl
ZERvdWJsZV8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfdW5wYWNrZWREb3VibGVfY29kZWMpOwot
ICAgICAgc2l6ZSArPSB1bnBhY2tlZEJvb2xfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3VucGFj
a2VkQm9vbF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHVucGFja2VkRW51bV8uQ2FsY3VsYXRlU2l6
ZShfcmVwZWF0ZWRfdW5wYWNrZWRFbnVtX2NvZGVjKTsKLSAgICAgIHJldHVybiBzaXplOwotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShUZXN0VW5wYWNrZWRUeXBlcyBvdGhlcikg
ewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQot
ICAgICAgdW5wYWNrZWRJbnQzMl8uQWRkKG90aGVyLnVucGFja2VkSW50MzJfKTsKLSAgICAgIHVu
cGFja2VkSW50NjRfLkFkZChvdGhlci51bnBhY2tlZEludDY0Xyk7Ci0gICAgICB1bnBhY2tlZFVp
bnQzMl8uQWRkKG90aGVyLnVucGFja2VkVWludDMyXyk7Ci0gICAgICB1bnBhY2tlZFVpbnQ2NF8u
QWRkKG90aGVyLnVucGFja2VkVWludDY0Xyk7Ci0gICAgICB1bnBhY2tlZFNpbnQzMl8uQWRkKG90
aGVyLnVucGFja2VkU2ludDMyXyk7Ci0gICAgICB1bnBhY2tlZFNpbnQ2NF8uQWRkKG90aGVyLnVu
cGFja2VkU2ludDY0Xyk7Ci0gICAgICB1bnBhY2tlZEZpeGVkMzJfLkFkZChvdGhlci51bnBhY2tl
ZEZpeGVkMzJfKTsKLSAgICAgIHVucGFja2VkRml4ZWQ2NF8uQWRkKG90aGVyLnVucGFja2VkRml4
ZWQ2NF8pOwotICAgICAgdW5wYWNrZWRTZml4ZWQzMl8uQWRkKG90aGVyLnVucGFja2VkU2ZpeGVk
MzJfKTsKLSAgICAgIHVucGFja2VkU2ZpeGVkNjRfLkFkZChvdGhlci51bnBhY2tlZFNmaXhlZDY0
Xyk7Ci0gICAgICB1bnBhY2tlZEZsb2F0Xy5BZGQob3RoZXIudW5wYWNrZWRGbG9hdF8pOwotICAg
ICAgdW5wYWNrZWREb3VibGVfLkFkZChvdGhlci51bnBhY2tlZERvdWJsZV8pOwotICAgICAgdW5w
YWNrZWRCb29sXy5BZGQob3RoZXIudW5wYWNrZWRCb29sXyk7Ci0gICAgICB1bnBhY2tlZEVudW1f
LkFkZChvdGhlci51bnBhY2tlZEVudW1fKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJn
ZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAg
ICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNo
KHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZp
ZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDcyMjoKLSAgICAgICAg
ICBjYXNlIDcyMDogewotICAgICAgICAgICAgdW5wYWNrZWRJbnQzMl8uQWRkRW50cmllc0Zyb20o
aW5wdXQsIF9yZXBlYXRlZF91bnBhY2tlZEludDMyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDczMDoKLSAgICAgICAgICBjYXNlIDcyODog
ewotICAgICAgICAgICAgdW5wYWNrZWRJbnQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBl
YXRlZF91bnBhY2tlZEludDY0X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgICBjYXNlIDczODoKLSAgICAgICAgICBjYXNlIDczNjogewotICAgICAgICAg
ICAgdW5wYWNrZWRVaW50MzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfdW5wYWNr
ZWRVaW50MzJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGNhc2UgNzQ2OgotICAgICAgICAgIGNhc2UgNzQ0OiB7Ci0gICAgICAgICAgICB1bnBhY2tl
ZFVpbnQ2NF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF91bnBhY2tlZFVpbnQ2NF9j
b2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA3
NTQ6Ci0gICAgICAgICAgY2FzZSA3NTI6IHsKLSAgICAgICAgICAgIHVucGFja2VkU2ludDMyXy5B
ZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3VucGFja2VkU2ludDMyX2NvZGVjKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc2MjoKLSAgICAg
ICAgICBjYXNlIDc2MDogewotICAgICAgICAgICAgdW5wYWNrZWRTaW50NjRfLkFkZEVudHJpZXNG
cm9tKGlucHV0LCBfcmVwZWF0ZWRfdW5wYWNrZWRTaW50NjRfY29kZWMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNzcwOgotICAgICAgICAgIGNhc2Ug
NzczOiB7Ci0gICAgICAgICAgICB1bnBhY2tlZEZpeGVkMzJfLkFkZEVudHJpZXNGcm9tKGlucHV0
LCBfcmVwZWF0ZWRfdW5wYWNrZWRGaXhlZDMyX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc3ODoKLSAgICAgICAgICBjYXNlIDc3Nzogewot
ICAgICAgICAgICAgdW5wYWNrZWRGaXhlZDY0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVh
dGVkX3VucGFja2VkRml4ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgY2FzZSA3ODY6Ci0gICAgICAgICAgY2FzZSA3ODk6IHsKLSAgICAgICAg
ICAgIHVucGFja2VkU2ZpeGVkMzJfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfdW5w
YWNrZWRTZml4ZWQzMl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSA3OTQ6Ci0gICAgICAgICAgY2FzZSA3OTM6IHsKLSAgICAgICAgICAgIHVu
cGFja2VkU2ZpeGVkNjRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfdW5wYWNrZWRT
Zml4ZWQ2NF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgY2FzZSA4MDI6Ci0gICAgICAgICAgY2FzZSA4MDU6IHsKLSAgICAgICAgICAgIHVucGFja2Vk
RmxvYXRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfdW5wYWNrZWRGbG9hdF9jb2Rl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA4MTA6
Ci0gICAgICAgICAgY2FzZSA4MDk6IHsKLSAgICAgICAgICAgIHVucGFja2VkRG91YmxlXy5BZGRF
bnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3VucGFja2VkRG91YmxlX2NvZGVjKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDgxODoKLSAgICAgICAg
ICBjYXNlIDgxNjogewotICAgICAgICAgICAgdW5wYWNrZWRCb29sXy5BZGRFbnRyaWVzRnJvbShp
bnB1dCwgX3JlcGVhdGVkX3VucGFja2VkQm9vbF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA4MjY6Ci0gICAgICAgICAgY2FzZSA4MjQ6IHsK
LSAgICAgICAgICAgIHVucGFja2VkRW51bV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRl
ZF91bnBhY2tlZEVudW1fY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBbZ2xvYmFsOjpTeXN0ZW0uRGlh
Z25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVk
IHBhcnRpYWwgY2xhc3MgVGVzdFJlcGVhdGVkU2NhbGFyRGlmZmVyZW50VGFnU2l6ZXMgOiBwYjo6
SU1lc3NhZ2U8VGVzdFJlcGVhdGVkU2NhbGFyRGlmZmVyZW50VGFnU2l6ZXM+IHsKLSAgICBwcml2
YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0UmVwZWF0ZWRTY2FsYXJE
aWZmZXJlbnRUYWdTaXplcz4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0UmVw
ZWF0ZWRTY2FsYXJEaWZmZXJlbnRUYWdTaXplcz4oKCkgPT4gbmV3IFRlc3RSZXBlYXRlZFNjYWxh
ckRpZmZlcmVudFRhZ1NpemVzKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJz
ZXI8VGVzdFJlcGVhdGVkU2NhbGFyRGlmZmVyZW50VGFnU2l6ZXM+IFBhcnNlciB7IGdldCB7IHJl
dHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3Jp
cHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3Nh
Z2VUeXBlc1syNV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJ
TWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0g
ICAgfQotCi0gICAgcHVibGljIFRlc3RSZXBlYXRlZFNjYWxhckRpZmZlcmVudFRhZ1NpemVzKCkg
ewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25D
b25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBUZXN0UmVwZWF0ZWRTY2FsYXJEaWZmZXJlbnRU
YWdTaXplcyhUZXN0UmVwZWF0ZWRTY2FsYXJEaWZmZXJlbnRUYWdTaXplcyBvdGhlcikgOiB0aGlz
KCkgewotICAgICAgcmVwZWF0ZWRGaXhlZDMyXyA9IG90aGVyLnJlcGVhdGVkRml4ZWQzMl8uQ2xv
bmUoKTsKLSAgICAgIHJlcGVhdGVkSW50MzJfID0gb3RoZXIucmVwZWF0ZWRJbnQzMl8uQ2xvbmUo
KTsKLSAgICAgIHJlcGVhdGVkRml4ZWQ2NF8gPSBvdGhlci5yZXBlYXRlZEZpeGVkNjRfLkNsb25l
KCk7Ci0gICAgICByZXBlYXRlZEludDY0XyA9IG90aGVyLnJlcGVhdGVkSW50NjRfLkNsb25lKCk7
Ci0gICAgICByZXBlYXRlZEZsb2F0XyA9IG90aGVyLnJlcGVhdGVkRmxvYXRfLkNsb25lKCk7Ci0g
ICAgICByZXBlYXRlZFVpbnQ2NF8gPSBvdGhlci5yZXBlYXRlZFVpbnQ2NF8uQ2xvbmUoKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgVGVzdFJlcGVhdGVkU2NhbGFyRGlmZmVyZW50VGFnU2l6ZXMgQ2xv
bmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IFRlc3RSZXBlYXRlZFNjYWxhckRpZmZlcmVudFRhZ1Np
emVzKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRo
ZSAicmVwZWF0ZWRfZml4ZWQzMiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBp
bnQgUmVwZWF0ZWRGaXhlZDMyRmllbGROdW1iZXIgPSAxMjsKLSAgICBwcml2YXRlIHN0YXRpYyBy
ZWFkb25seSBwYjo6RmllbGRDb2RlYzx1aW50PiBfcmVwZWF0ZWRfcmVwZWF0ZWRGaXhlZDMyX2Nv
ZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yRml4ZWQzMig5OCk7Ci0gICAgcHJpdmF0
ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8dWludD4gcmVwZWF0ZWRGaXhlZDMyXyA9IG5l
dyBwYmM6OlJlcGVhdGVkRmllbGQ8dWludD4oKTsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8v
ICBQYXJzaW5nIHJlcGVhdGVkIGZpeGVkIHNpemUgdmFsdWVzIHVzZWQgdG8gZmFpbC4gVGhpcyBt
ZXNzYWdlIG5lZWRzIHRvIGJlCi0gICAgLy8vICB1c2VkIGluIG9yZGVyIHRvIGdldCBhIHRhZyBv
ZiB0aGUgcmlnaHQgc2l6ZTsgYWxsIG9mIHRoZSByZXBlYXRlZCBmaWVsZHMKLSAgICAvLy8gIGlu
IFRlc3RBbGxUeXBlcyBkaWRuJ3QgdHJpZ2dlciB0aGUgY2hlY2suCi0gICAgLy8vIDwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVpbnQ+IFJlcGVhdGVkRml4ZWQzMiB7
Ci0gICAgICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRGaXhlZDMyXzsgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicmVwZWF0ZWRfaW50MzIiIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlcGVhdGVkSW50MzJGaWVsZE51bWJlciA9
IDEzOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGludD4gX3Jl
cGVhdGVkX3JlcGVhdGVkSW50MzJfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JJ
bnQzMigxMDYpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGludD4g
cmVwZWF0ZWRJbnQzMl8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGludD4oKTsKLSAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgLy8vICBDaGVjayBmb3IgYSB2YXJpbnQgdHlwZSwganVzdCBmb3IgZ29v
ZCBtZWFzdXJlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRG
aWVsZDxpbnQ+IFJlcGVhdGVkSW50MzIgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlcGVhdGVkSW50
MzJfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJy
ZXBlYXRlZF9maXhlZDY0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBS
ZXBlYXRlZEZpeGVkNjRGaWVsZE51bWJlciA9IDIwNDY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVh
ZG9ubHkgcGI6OkZpZWxkQ29kZWM8dWxvbmc+IF9yZXBlYXRlZF9yZXBlYXRlZEZpeGVkNjRfY29k
ZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JGaXhlZDY0KDE2MzcwKTsKLSAgICBwcml2
YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDx1bG9uZz4gcmVwZWF0ZWRGaXhlZDY0XyA9
IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8dWxvbmc+KCk7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAg
IC8vLyAgVGhlc2UgaGF2ZSB0d28tYnl0ZSB0YWdzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
cHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDx1bG9uZz4gUmVwZWF0ZWRGaXhlZDY0IHsKLSAgICAg
IGdldCB7IHJldHVybiByZXBlYXRlZEZpeGVkNjRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1t
YXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9pbnQ2NCIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRJbnQ2NEZpZWxkTnVtYmVyID0gMjA0NzsK
LSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxsb25nPiBfcmVwZWF0
ZWRfcmVwZWF0ZWRJbnQ2NF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckludDY0
KDE2Mzc4KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxsb25nPiBy
ZXBlYXRlZEludDY0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz4oKTsKLSAgICBwdWJs
aWMgcGJjOjpSZXBlYXRlZEZpZWxkPGxvbmc+IFJlcGVhdGVkSW50NjQgewotICAgICAgZ2V0IHsg
cmV0dXJuIHJlcGVhdGVkSW50NjRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJyZXBlYXRlZF9mbG9hdCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRGbG9hdEZpZWxkTnVtYmVyID0gMjYyMTQyOwotICAgIHBy
aXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGZsb2F0PiBfcmVwZWF0ZWRfcmVw
ZWF0ZWRGbG9hdF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckZsb2F0KDIwOTcx
MzgpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGZsb2F0PiByZXBl
YXRlZEZsb2F0XyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8ZmxvYXQ+KCk7Ci0gICAgLy8vIDxz
dW1tYXJ5PgotICAgIC8vLyAgVGhyZWUgYnl0ZSB0YWdzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxmbG9hdD4gUmVwZWF0ZWRGbG9hdCB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gcmVwZWF0ZWRGbG9hdF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1h
cnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlcGVhdGVkX3VpbnQ2NCIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUmVwZWF0ZWRVaW50NjRGaWVsZE51bWJlciA9IDI2MjE0
MzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1bG9uZz4gX3Jl
cGVhdGVkX3JlcGVhdGVkVWludDY0X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9y
VUludDY0KDIwOTcxNDYpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxk
PHVsb25nPiByZXBlYXRlZFVpbnQ2NF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPHVsb25nPigp
OwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8dWxvbmc+IFJlcGVhdGVkVWludDY0IHsK
LSAgICAgIGdldCB7IHJldHVybiByZXBlYXRlZFVpbnQ2NF87IH0KLSAgICB9Ci0KLSAgICBwdWJs
aWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1
YWxzKG90aGVyIGFzIFRlc3RSZXBlYXRlZFNjYWxhckRpZmZlcmVudFRhZ1NpemVzKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoVGVzdFJlcGVhdGVkU2NhbGFyRGlmZmVyZW50VGFn
U2l6ZXMgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVh
bHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAg
aWYoIXJlcGVhdGVkRml4ZWQzMl8uRXF1YWxzKG90aGVyLnJlcGVhdGVkRml4ZWQzMl8pKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZighcmVwZWF0ZWRJbnQzMl8uRXF1YWxzKG90aGVyLnJlcGVhdGVk
SW50MzJfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXJlcGVhdGVkRml4ZWQ2NF8uRXF1YWxz
KG90aGVyLnJlcGVhdGVkRml4ZWQ2NF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighcmVwZWF0
ZWRJbnQ2NF8uRXF1YWxzKG90aGVyLnJlcGVhdGVkSW50NjRfKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgaWYoIXJlcGVhdGVkRmxvYXRfLkVxdWFscyhvdGhlci5yZXBlYXRlZEZsb2F0XykpIHJldHVy
biBmYWxzZTsKLSAgICAgIGlmKCFyZXBlYXRlZFVpbnQ2NF8uRXF1YWxzKG90aGVyLnJlcGVhdGVk
VWludDY0XykpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7
Ci0gICAgICBoYXNoIF49IHJlcGVhdGVkRml4ZWQzMl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhh
c2ggXj0gcmVwZWF0ZWRJbnQzMl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gcmVwZWF0
ZWRGaXhlZDY0Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZEludDY0Xy5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXBlYXRlZEZsb2F0Xy5HZXRIYXNoQ29kZSgp
OwotICAgICAgaGFzaCBePSByZXBlYXRlZFVpbnQ2NF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIHJl
dHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmco
KSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRo
aXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtIG91dHB1dCkgewotICAgICAgcmVwZWF0ZWRGaXhlZDMyXy5Xcml0ZVRvKG91dHB1dCwgX3Jl
cGVhdGVkX3JlcGVhdGVkRml4ZWQzMl9jb2RlYyk7Ci0gICAgICByZXBlYXRlZEludDMyXy5Xcml0
ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkSW50MzJfY29kZWMpOwotICAgICAgcmVwZWF0
ZWRGaXhlZDY0Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkRml4ZWQ2NF9jb2Rl
Yyk7Ci0gICAgICByZXBlYXRlZEludDY0Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVh
dGVkSW50NjRfY29kZWMpOwotICAgICAgcmVwZWF0ZWRGbG9hdF8uV3JpdGVUbyhvdXRwdXQsIF9y
ZXBlYXRlZF9yZXBlYXRlZEZsb2F0X2NvZGVjKTsKLSAgICAgIHJlcGVhdGVkVWludDY0Xy5Xcml0
ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkVWludDY0X2NvZGVjKTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAg
ICBzaXplICs9IHJlcGVhdGVkRml4ZWQzMl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0
ZWRGaXhlZDMyX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcmVwZWF0ZWRJbnQzMl8uQ2FsY3VsYXRl
U2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRJbnQzMl9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVh
dGVkRml4ZWQ2NF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRGaXhlZDY0X2NvZGVj
KTsKLSAgICAgIHNpemUgKz0gcmVwZWF0ZWRJbnQ2NF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRf
cmVwZWF0ZWRJbnQ2NF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHJlcGVhdGVkRmxvYXRfLkNhbGN1
bGF0ZVNpemUoX3JlcGVhdGVkX3JlcGVhdGVkRmxvYXRfY29kZWMpOwotICAgICAgc2l6ZSArPSBy
ZXBlYXRlZFVpbnQ2NF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfcmVwZWF0ZWRVaW50NjRfY29k
ZWMpOwotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VG
cm9tKFRlc3RSZXBlYXRlZFNjYWxhckRpZmZlcmVudFRhZ1NpemVzIG90aGVyKSB7Ci0gICAgICBp
ZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICByZXBl
YXRlZEZpeGVkMzJfLkFkZChvdGhlci5yZXBlYXRlZEZpeGVkMzJfKTsKLSAgICAgIHJlcGVhdGVk
SW50MzJfLkFkZChvdGhlci5yZXBlYXRlZEludDMyXyk7Ci0gICAgICByZXBlYXRlZEZpeGVkNjRf
LkFkZChvdGhlci5yZXBlYXRlZEZpeGVkNjRfKTsKLSAgICAgIHJlcGVhdGVkSW50NjRfLkFkZChv
dGhlci5yZXBlYXRlZEludDY0Xyk7Ci0gICAgICByZXBlYXRlZEZsb2F0Xy5BZGQob3RoZXIucmVw
ZWF0ZWRGbG9hdF8pOwotICAgICAgcmVwZWF0ZWRVaW50NjRfLkFkZChvdGhlci5yZXBlYXRlZFVp
bnQ2NF8pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1
dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlu
cHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgOTg6Ci0gICAgICAgICAgY2FzZSAxMDE6IHsKLSAgICAg
ICAgICAgIHJlcGVhdGVkRml4ZWQzMl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9y
ZXBlYXRlZEZpeGVkMzJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgMTA2OgotICAgICAgICAgIGNhc2UgMTA0OiB7Ci0gICAgICAgICAgICBy
ZXBlYXRlZEludDMyXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkSW50
MzJfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh
c2UgMTYzNzA6Ci0gICAgICAgICAgY2FzZSAxNjM2OTogewotICAgICAgICAgICAgcmVwZWF0ZWRG
aXhlZDY0Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkRml4ZWQ2NF9j
b2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAx
NjM3ODoKLSAgICAgICAgICBjYXNlIDE2Mzc2OiB7Ci0gICAgICAgICAgICByZXBlYXRlZEludDY0
Xy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3JlcGVhdGVkSW50NjRfY29kZWMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjA5NzEzODoK
LSAgICAgICAgICBjYXNlIDIwOTcxNDE6IHsKLSAgICAgICAgICAgIHJlcGVhdGVkRmxvYXRfLkFk
ZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRGbG9hdF9jb2RlYyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyMDk3MTQ2OgotICAg
ICAgICAgIGNhc2UgMjA5NzE0NDogewotICAgICAgICAgICAgcmVwZWF0ZWRVaW50NjRfLkFkZEVu
dHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcmVwZWF0ZWRVaW50NjRfY29kZWMpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0g
IH0KLQotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0
dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgVGVzdENvbW1lbnRJbmpl
Y3Rpb25NZXNzYWdlIDogcGI6OklNZXNzYWdlPFRlc3RDb21tZW50SW5qZWN0aW9uTWVzc2FnZT4g
ewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RDb21t
ZW50SW5qZWN0aW9uTWVzc2FnZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0
Q29tbWVudEluamVjdGlvbk1lc3NhZ2U+KCgpID0+IG5ldyBUZXN0Q29tbWVudEluamVjdGlvbk1l
c3NhZ2UoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxUZXN0Q29tbWVu
dEluamVjdGlvbk1lc3NhZ2U+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQot
ICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAg
ICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVuaXR0
ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1syNl07IH0KLSAgICB9
Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFRl
c3RDb21tZW50SW5qZWN0aW9uTWVzc2FnZSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0g
ICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMg
VGVzdENvbW1lbnRJbmplY3Rpb25NZXNzYWdlKFRlc3RDb21tZW50SW5qZWN0aW9uTWVzc2FnZSBv
dGhlcikgOiB0aGlzKCkgewotICAgICAgYV8gPSBvdGhlci5hXzsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgVGVzdENvbW1lbnRJbmplY3Rpb25NZXNzYWdlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5l
dyBUZXN0Q29tbWVudEluamVjdGlvbk1lc3NhZ2UodGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxz
dW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJhIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVi
bGljIGNvbnN0IGludCBBRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgc3RyaW5nIGFfID0g
IiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgKi8gJmx0Oy0gVGhpcyBzaG91bGQgbm90
IGNsb3NlIHRoZSBnZW5lcmF0ZWQgZG9jIGNvbW1lbnQKLSAgICAvLy8gPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBzdHJpbmcgQSB7Ci0gICAgICBnZXQgeyByZXR1cm4gYV87IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIGFfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUs
ICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVx
dWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgVGVzdENv
bW1lbnRJbmplY3Rpb25NZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMo
VGVzdENvbW1lbnRJbmplY3Rpb25NZXNzYWdlIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNl
RXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChBICE9IG90aGVyLkEpIHJldHVybiBmYWxzZTsKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFz
aENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoQS5MZW5ndGggIT0gMCkg
aGFzaCBePSBBLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpK
c29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlm
IChBLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZVN0cmluZyhBKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMg
aW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoQS5M
ZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0u
Q29tcHV0ZVN0cmluZ1NpemUoQSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oVGVzdENvbW1lbnRJbmplY3Rpb25NZXNzYWdl
IG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0g
ICAgICB9Ci0gICAgICBpZiAob3RoZXIuQS5MZW5ndGggIT0gMCkgewotICAgICAgICBBID0gb3Ro
ZXIuQTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNv
ZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0
YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDEwOiB7Ci0gICAgICAgICAgICBBID0gaW5w
dXQuUmVhZFN0cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgVGVz
dCB0aGF0IFJQQyBzZXJ2aWNlcyB3b3JrLgotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpT
eXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJs
aWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgRm9vUmVxdWVzdCA6IHBiOjpJTWVzc2FnZTxGb29SZXF1
ZXN0PiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8Rm9v
UmVxdWVzdD4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxGb29SZXF1ZXN0PigoKSA9
PiBuZXcgRm9vUmVxdWVzdCgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2Vy
PEZvb1JlcXVlc3Q+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1
YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdl
dCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJv
dG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1syN107IH0KLSAgICB9Ci0KLSAg
ICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAg
IGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIEZvb1JlcXVl
c3QoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9p
ZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIEZvb1JlcXVlc3QoRm9vUmVxdWVzdCBv
dGhlcikgOiB0aGlzKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBGb29SZXF1ZXN0IENsb25lKCkg
ewotICAgICAgcmV0dXJuIG5ldyBGb29SZXF1ZXN0KHRoaXMpOwotICAgIH0KLQotICAgIHB1Ymxp
YyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVh
bHMob3RoZXIgYXMgRm9vUmVxdWVzdCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxz
KEZvb1JlcXVlc3Qgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51
bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVu
Y2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRI
YXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIHJldHVybiBoYXNoOwotICAg
IH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1
cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQot
ICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewot
ICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXpl
ID0gMDsKLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdl
RnJvbShGb29SZXF1ZXN0IG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9t
KHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdo
aWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcp
IHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQot
Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmli
dXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBGb29SZXNwb25zZSA6IHBiOjpJ
TWVzc2FnZTxGb29SZXNwb25zZT4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpN
ZXNzYWdlUGFyc2VyPEZvb1Jlc3BvbnNlPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2Vy
PEZvb1Jlc3BvbnNlPigoKSA9PiBuZXcgRm9vUmVzcG9uc2UoKSk7Ci0gICAgcHVibGljIHN0YXRp
YyBwYjo6TWVzc2FnZVBhcnNlcjxGb29SZXNwb25zZT4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9w
YXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERl
c2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRl
c3RQcm90b3MuVW5pdHRlc3RQcm90bzNSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVz
WzI4XTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdl
LkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0K
LSAgICBwdWJsaWMgRm9vUmVzcG9uc2UoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAg
IH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIEZv
b1Jlc3BvbnNlKEZvb1Jlc3BvbnNlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgfQotCi0gICAgcHVi
bGljIEZvb1Jlc3BvbnNlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBGb29SZXNwb25zZSh0
aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90
aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIEZvb1Jlc3BvbnNlKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoRm9vUmVzcG9uc2Ugb3RoZXIpIHsKLSAgICAgIGlm
IChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0g
MTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJp
bmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9z
dGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNv
ZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3Vs
YXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIHJldHVybiBzaXplOwotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShGb29SZXNwb25zZSBvdGhlcikgewotICAg
ICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkg
ewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkg
IT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3Rp
Y3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRp
YWwgY2xhc3MgRm9vQ2xpZW50TWVzc2FnZSA6IHBiOjpJTWVzc2FnZTxGb29DbGllbnRNZXNzYWdl
PiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8Rm9vQ2xp
ZW50TWVzc2FnZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxGb29DbGllbnRNZXNz
YWdlPigoKSA9PiBuZXcgRm9vQ2xpZW50TWVzc2FnZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBi
OjpNZXNzYWdlUGFyc2VyPEZvb0NsaWVudE1lc3NhZ2U+IFBhcnNlciB7IGdldCB7IHJldHVybiBf
cGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBE
ZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5U
ZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBl
c1syOV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2Fn
ZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQot
Ci0gICAgcHVibGljIEZvb0NsaWVudE1lc3NhZ2UoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigp
OwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVi
bGljIEZvb0NsaWVudE1lc3NhZ2UoRm9vQ2xpZW50TWVzc2FnZSBvdGhlcikgOiB0aGlzKCkgewot
ICAgIH0KLQotICAgIHB1YmxpYyBGb29DbGllbnRNZXNzYWdlIENsb25lKCkgewotICAgICAgcmV0
dXJuIG5ldyBGb29DbGllbnRNZXNzYWdlKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVy
cmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3Ro
ZXIgYXMgRm9vQ2xpZW50TWVzc2FnZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxz
KEZvb0NsaWVudE1lc3NhZ2Ugb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3Ro
ZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChS
ZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGlu
dCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIHJldHVybiBoYXNo
OwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAg
ICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1
dCkgewotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGlu
dCBzaXplID0gMDsKLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lk
IE1lcmdlRnJvbShGb29DbGllbnRNZXNzYWdlIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0g
bnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRh
ZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAg
IHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tp
cExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0KLSAgfQotCi0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVz
ZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBGb29TZXJ2
ZXJNZXNzYWdlIDogcGI6OklNZXNzYWdlPEZvb1NlcnZlck1lc3NhZ2U+IHsKLSAgICBwcml2YXRl
IHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxGb29TZXJ2ZXJNZXNzYWdlPiBfcGFy
c2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPEZvb1NlcnZlck1lc3NhZ2U+KCgpID0+IG5ldyBG
b29TZXJ2ZXJNZXNzYWdlKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8
Rm9vU2VydmVyTWVzc2FnZT4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0g
ICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAg
ICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVW5pdHRl
c3RQcm90bzNSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzMwXTsgfQotICAgIH0K
LQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3Igewot
ICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgRm9v
U2VydmVyTWVzc2FnZSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAg
cGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgRm9vU2VydmVyTWVz
c2FnZShGb29TZXJ2ZXJNZXNzYWdlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgfQotCi0gICAgcHVi
bGljIEZvb1NlcnZlck1lc3NhZ2UgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IEZvb1NlcnZl
ck1lc3NhZ2UodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxz
KG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBGb29TZXJ2ZXJN
ZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoRm9vU2VydmVyTWVzc2Fn
ZSBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhv
dGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkg
ewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAg
cHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNv
bkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGlj
IHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgfQotCi0g
ICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAg
ICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKEZvb1Nl
cnZlck1lc3NhZ2Ugb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6
OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUg
KCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAg
W2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUo
KV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIEJhclJlcXVlc3QgOiBwYjo6SU1lc3Nh
Z2U8QmFyUmVxdWVzdD4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdl
UGFyc2VyPEJhclJlcXVlc3Q+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8QmFyUmVx
dWVzdD4oKCkgPT4gbmV3IEJhclJlcXVlc3QoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVz
c2FnZVBhcnNlcjxCYXJSZXF1ZXN0PiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9
Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7
Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5V
bml0dGVzdFByb3RvM1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMzFdOyB9Ci0g
ICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRv
ciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1Ymxp
YyBCYXJSZXF1ZXN0KCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBw
YXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBCYXJSZXF1ZXN0KEJh
clJlcXVlc3Qgb3RoZXIpIDogdGhpcygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmFyUmVxdWVz
dCBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgQmFyUmVxdWVzdCh0aGlzKTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICBy
ZXR1cm4gRXF1YWxzKG90aGVyIGFzIEJhclJlcXVlc3QpOwotICAgIH0KLQotICAgIHB1YmxpYyBi
b29sIEVxdWFscyhCYXJSZXF1ZXN0IG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxz
KG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBp
ZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlk
ZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICByZXR1cm4g
aGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewot
ICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBv
dXRwdXQpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAg
ICBpbnQgc2l6ZSA9IDA7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBNZXJnZUZyb20oQmFyUmVxdWVzdCBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51
bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lk
IE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7
Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBz
d2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBM
YXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotCi0gIH0KLQotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2Vy
Q29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgQmFyUmVzcG9u
c2UgOiBwYjo6SU1lc3NhZ2U8QmFyUmVzcG9uc2U+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFk
b25seSBwYjo6TWVzc2FnZVBhcnNlcjxCYXJSZXNwb25zZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVz
c2FnZVBhcnNlcjxCYXJSZXNwb25zZT4oKCkgPT4gbmV3IEJhclJlc3BvbnNlKCkpOwotICAgIHB1
YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8QmFyUmVzcG9uc2U+IFBhcnNlciB7IGdldCB7
IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVz
Y3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0UHJvdG8zUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1l
c3NhZ2VUeXBlc1szMl07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBi
OjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9
Ci0gICAgfQotCi0gICAgcHVibGljIEJhclJlc3BvbnNlKCkgewotICAgICAgT25Db25zdHJ1Y3Rp
b24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAg
IHB1YmxpYyBCYXJSZXNwb25zZShCYXJSZXNwb25zZSBvdGhlcikgOiB0aGlzKCkgewotICAgIH0K
LQotICAgIHB1YmxpYyBCYXJSZXNwb25zZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgQmFy
UmVzcG9uc2UodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxz
KG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBCYXJSZXNwb25z
ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKEJhclJlc3BvbnNlIG90aGVyKSB7
Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlz
KSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBp
bnQgaGFzaCA9IDE7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3Zl
cnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVy
LlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0
ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
aW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICByZXR1cm4g
c2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oQmFyUmVzcG9uc2Ugb3Ro
ZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJl
YW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5S
ZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgI2VuZHJlZ2lvbgotCi19
Ci0KLSNlbmRyZWdpb24gRGVzaWduZXIgZ2VuZXJhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJw
L3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9UZXN0UHJvdG9zL1VuaXR0ZXN0V2VsbEtub3duVHlw
ZXMuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvVGVzdFByb3Rvcy9Vbml0dGVz
dFdlbGxLbm93blR5cGVzLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTEyZjRh
NGI5YzMzZTYxZDRhYzRlMjg5YzJkMmJmNWQ2NWVhOGZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9U
ZXN0UHJvdG9zL1VuaXR0ZXN0V2VsbEtub3duVHlwZXMuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwy
NDEzICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVy
LiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF93ZWxs
X2tub3duX3R5cGVzLnByb3RvCi0jcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSAxNTkxLCAwNjEyLCAz
MDIxCi0jcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCi0KLXVzaW5nIHBiID0gZ2xvYmFs
OjpHb29nbGUuUHJvdG9idWY7Ci11c2luZyBwYmMgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5D
b2xsZWN0aW9uczsKLXVzaW5nIHBiciA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rp
b247Ci11c2luZyBzY2cgPSBnbG9iYWw6OlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotbmFt
ZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zIHsKLQotICAvLy8gPHN1bW1hcnk+SG9s
ZGVyIGZvciByZWZsZWN0aW9uIGluZm9ybWF0aW9uIGdlbmVyYXRlZCBmcm9tIGdvb2dsZS9wcm90
b2J1Zi91bml0dGVzdF93ZWxsX2tub3duX3R5cGVzLnByb3RvPC9zdW1tYXJ5PgotICBbZ2xvYmFs
OjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBw
dWJsaWMgc3RhdGljIHBhcnRpYWwgY2xhc3MgVW5pdHRlc3RXZWxsS25vd25UeXBlc1JlZmxlY3Rp
b24gewotCi0gICAgI3JlZ2lvbiBEZXNjcmlwdG9yCi0gICAgLy8vIDxzdW1tYXJ5PkZpbGUgZGVz
Y3JpcHRvciBmb3IgZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3dlbGxfa25vd25fdHlwZXMucHJv
dG88L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9yIERlc2Ny
aXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGRlc2NyaXB0b3I7IH0KLSAgICB9Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcGJyOjpGaWxlRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAgc3RhdGlj
IFVuaXR0ZXN0V2VsbEtub3duVHlwZXNSZWZsZWN0aW9uKCkgewotICAgICAgYnl0ZVtdIGRlc2Ny
aXB0b3JEYXRhID0gZ2xvYmFsOjpTeXN0ZW0uQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKAotICAg
ICAgICAgIHN0cmluZy5Db25jYXQoCi0gICAgICAgICAgICAiQ2k5bmIyOW5iR1V2Y0hKdmRHOWlk
V1l2ZFc1cGRIUmxjM1JmZDJWc2JGOXJibTkzYmw5MGVYQmxjeTV3IiwKLSAgICAgICAgICAgICJj
bTkwYnhJUmNISnZkRzlpZFdaZmRXNXBkSFJsYzNRYUdXZHZiMmRzWlM5d2NtOTBiMkoxWmk5aGJu
a3UiLAotICAgICAgICAgICAgImNISnZkRzhhR1dkdmIyZHNaUzl3Y205MGIySjFaaTloY0drdWNI
SnZkRzhhSG1kdmIyZHNaUzl3Y205MCIsCi0gICAgICAgICAgICAiYjJKMVppOWtkWEpoZEdsdmJp
NXdjbTkwYnhvYloyOXZaMnhsTDNCeWIzUnZZblZtTDJWdGNIUjVMbkJ5IiwKLSAgICAgICAgICAg
ICJiM1J2R2lCbmIyOW5iR1V2Y0hKdmRHOWlkV1l2Wm1sbGJHUmZiV0Z6YXk1d2NtOTBieG9rWjI5
dloyeGwiLAotICAgICAgICAgICAgIkwzQnliM1J2WW5WbUwzTnZkWEpqWlY5amIyNTBaWGgwTG5C
eWIzUnZHaHhuYjI5bmJHVXZjSEp2ZEc5aSIsCi0gICAgICAgICAgICAiZFdZdmMzUnlkV04wTG5C
eWIzUnZHaDluYjI5bmJHVXZjSEp2ZEc5aWRXWXZkR2x0WlhOMFlXMXdMbkJ5IiwKLSAgICAgICAg
ICAgICJiM1J2R2hwbmIyOW5iR1V2Y0hKdmRHOWlkV1l2ZEhsd1pTNXdjbTkwYnhvZVoyOXZaMnhs
TDNCeWIzUnYiLAotICAgICAgICAgICAgIlluVm1MM2R5WVhCd1pYSnpMbkJ5YjNSdklyNEhDaEpV
WlhOMFYyVnNiRXR1YjNkdVZIbHdaWE1TSndvSiIsCi0gICAgICAgICAgICAiWVc1NVgyWnBaV3hr
R0FFZ0FTZ0xNaFF1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma0Z1ZVJJbkNnbGhjR2xmIiwKLSAgICAg
ICAgICAgICJabWxsYkdRWUFpQUJLQXN5RkM1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UVhCcEVqRUtE
bVIxY21GMGFXOXUiLAotICAgICAgICAgICAgIlgyWnBaV3hrR0FNZ0FTZ0xNaGt1WjI5dloyeGxM
bkJ5YjNSdlluVm1Ma1IxY21GMGFXOXVFaXNLQzJWdCIsCi0gICAgICAgICAgICAiY0hSNVgyWnBa
V3hrR0FRZ0FTZ0xNaFl1WjI5dloyeGxMbkJ5YjNSdlluVm1Ma1Z0Y0hSNUVqUUtFR1pwIiwKLSAg
ICAgICAgICAgICJaV3hrWDIxaGMydGZabWxsYkdRWUJTQUJLQXN5R2k1bmIyOW5iR1V1Y0hKdmRH
OWlkV1l1Um1sbGJHUk4iLAotICAgICAgICAgICAgIllYTnJFandLRkhOdmRYSmpaVjlqYjI1MFpY
aDBYMlpwWld4a0dBWWdBU2dMTWg0dVoyOXZaMnhsTG5CeSIsCi0gICAgICAgICAgICAiYjNSdllu
Vm1MbE52ZFhKalpVTnZiblJsZUhRU0xRb01jM1J5ZFdOMFgyWnBaV3hrR0FjZ0FTZ0xNaGN1IiwK
LSAgICAgICAgICAgICJaMjl2WjJ4bExuQnliM1J2WW5WbUxsTjBjblZqZEJJekNnOTBhVzFsYzNS
aGJYQmZabWxsYkdRWUNDQUIiLAotICAgICAgICAgICAgIktBc3lHaTVuYjI5bmJHVXVjSEp2ZEc5
aWRXWXVWR2x0WlhOMFlXMXdFaWtLQ25SNWNHVmZabWxsYkdRWSIsCi0gICAgICAgICAgICAiQ1NB
QktBc3lGUzVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWSGx3WlJJeUNneGtiM1ZpYkdWZlptbGxiR1FZ
IiwKLSAgICAgICAgICAgICJDaUFCS0FzeUhDNW5iMjluYkdVdWNISnZkRzlpZFdZdVJHOTFZbXhs
Vm1Gc2RXVVNNQW9MWm14dllYUmYiLAotICAgICAgICAgICAgIlptbGxiR1FZQ3lBQktBc3lHeTVu
YjI5bmJHVXVjSEp2ZEc5aWRXWXVSbXh2WVhSV1lXeDFaUkl3Q2d0cCIsCi0gICAgICAgICAgICAi
Ym5RMk5GOW1hV1ZzWkJnTUlBRW9DekliTG1kdmIyZHNaUzV3Y205MGIySjFaaTVKYm5RMk5GWmhi
SFZsIiwKLSAgICAgICAgICAgICJFaklLREhWcGJuUTJORjltYVdWc1pCZ05JQUVvQ3pJY0xtZHZi
MmRzWlM1d2NtOTBiMkoxWmk1VlNXNTAiLAotICAgICAgICAgICAgIk5qUldZV3gxWlJJd0NndHBi
blF6TWw5bWFXVnNaQmdPSUFFb0N6SWJMbWR2YjJkc1pTNXdjbTkwYjJKMSIsCi0gICAgICAgICAg
ICAiWmk1SmJuUXpNbFpoYkhWbEVqSUtESFZwYm5Rek1sOW1hV1ZzWkJnUElBRW9DekljTG1kdmIy
ZHNaUzV3IiwKLSAgICAgICAgICAgICJjbTkwYjJKMVppNVZTVzUwTXpKV1lXeDFaUkl1Q2dwaWIy
OXNYMlpwWld4a0dCQWdBU2dMTWhvdVoyOXYiLAotICAgICAgICAgICAgIloyeGxMbkJ5YjNSdllu
Vm1Ma0p2YjJ4V1lXeDFaUkl5Q2d4emRISnBibWRmWm1sbGJHUVlFU0FCS0FzeSIsCi0gICAgICAg
ICAgICAiSEM1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTNSeWFXNW5WbUZzZFdVU01Bb0xZbmwwWlhO
ZlptbGxiR1FZIiwKLSAgICAgICAgICAgICJFaUFCS0FzeUd5NW5iMjluYkdVdWNISnZkRzlpZFdZ
dVFubDBaWE5XWVd4MVpSSXJDZ3QyWVd4MVpWOW0iLAotICAgICAgICAgICAgImFXVnNaQmdUSUFF
b0N6SVdMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVdZV3gxWlNLVkJ3b1dVbVZ3WldGMCIsCi0gICAg
ICAgICAgICAiWldSWFpXeHNTMjV2ZDI1VWVYQmxjeEluQ2dsaGJubGZabWxsYkdRWUFTQURLQXN5
RkM1bmIyOW5iR1V1IiwKLSAgICAgICAgICAgICJjSEp2ZEc5aWRXWXVRVzU1RWljS0NXRndhVjlt
YVdWc1pCZ0NJQU1vQ3pJVUxtZHZiMmRzWlM1d2NtOTAiLAotICAgICAgICAgICAgImIySjFaaTVC
Y0drU01Rb09aSFZ5WVhScGIyNWZabWxsYkdRWUF5QURLQXN5R1M1bmIyOW5iR1V1Y0hKdiIsCi0g
ICAgICAgICAgICAiZEc5aWRXWXVSSFZ5WVhScGIyNFNLd29MWlcxd2RIbGZabWxsYkdRWUJDQURL
QXN5Rmk1bmIyOW5iR1V1IiwKLSAgICAgICAgICAgICJjSEp2ZEc5aWRXWXVSVzF3ZEhrU05Bb1Fa
bWxsYkdSZmJXRnphMTltYVdWc1pCZ0ZJQU1vQ3pJYUxtZHYiLAotICAgICAgICAgICAgImIyZHNa
UzV3Y205MGIySjFaaTVHYVdWc1pFMWhjMnNTUEFvVWMyOTFjbU5sWDJOdmJuUmxlSFJmWm1sbCIs
Ci0gICAgICAgICAgICAiYkdRWUJpQURLQXN5SGk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VTI5MWNt
TmxRMjl1ZEdWNGRCSXRDZ3h6IiwKLSAgICAgICAgICAgICJkSEoxWTNSZlptbGxiR1FZQnlBREtB
c3lGeTVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVM1J5ZFdOMEVqTUsiLAotICAgICAgICAgICAgIkQz
UnBiV1Z6ZEdGdGNGOW1hV1ZzWkJnSUlBTW9DeklhTG1kdmIyZHNaUzV3Y205MGIySjFaaTVVYVcx
bCIsCi0gICAgICAgICAgICAiYzNSaGJYQVNLUW9LZEhsd1pWOW1hV1ZzWkJnSklBTW9DeklWTG1k
dmIyZHNaUzV3Y205MGIySjFaaTVVIiwKLSAgICAgICAgICAgICJlWEJsRWpJS0RHUnZkV0pzWlY5
bWFXVnNaQmdLSUFNb0N6SWNMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUUiLAotICAgICAgICAgICAg
ImIzVmliR1ZXWVd4MVpSSXdDZ3RtYkc5aGRGOW1hV1ZzWkJnTElBTW9DekliTG1kdmIyZHNaUzV3
Y205MCIsCi0gICAgICAgICAgICAiYjJKMVppNUdiRzloZEZaaGJIVmxFakFLQzJsdWREWTBYMlpw
Wld4a0dBd2dBeWdMTWhzdVoyOXZaMnhsIiwKLSAgICAgICAgICAgICJMbkJ5YjNSdlluVm1Ma2x1
ZERZMFZtRnNkV1VTTWdvTWRXbHVkRFkwWDJacFpXeGtHQTBnQXlnTE1od3UiLAotICAgICAgICAg
ICAgIloyOXZaMnhsTG5CeWIzUnZZblZtTGxWSmJuUTJORlpoYkhWbEVqQUtDMmx1ZERNeVgyWnBa
V3hrR0E0ZyIsCi0gICAgICAgICAgICAiQXlnTE1oc3VaMjl2WjJ4bExuQnliM1J2WW5WbUxrbHVk
RE15Vm1Gc2RXVVNNZ29NZFdsdWRETXlYMlpwIiwKLSAgICAgICAgICAgICJaV3hrR0E4Z0F5Z0xN
aHd1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZKYm5Rek1sWmhiSFZsRWk0S0NtSnYiLAotICAgICAg
ICAgICAgImIyeGZabWxsYkdRWUVDQURLQXN5R2k1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UW05dmJG
WmhiSFZsRWpJSyIsCi0gICAgICAgICAgICAiREhOMGNtbHVaMTltYVdWc1pCZ1JJQU1vQ3pJY0xt
ZHZiMmRzWlM1d2NtOTBiMkoxWmk1VGRISnBibWRXIiwKLSAgICAgICAgICAgICJZV3gxWlJJd0Nn
dGllWFJsYzE5bWFXVnNaQmdTSUFNb0N6SWJMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUMiLAotICAg
ICAgICAgICAgImVYUmxjMVpoYkhWbElzVUhDaE5QYm1WdlpsZGxiR3hMYm05M2JsUjVjR1Z6RWlr
S0NXRnVlVjltYVdWcyIsCi0gICAgICAgICAgICAiWkJnQklBRW9DeklVTG1kdmIyZHNaUzV3Y205
MGIySjFaaTVCYm5sSUFCSXBDZ2xoY0dsZlptbGxiR1FZIiwKLSAgICAgICAgICAgICJBaUFCS0Fz
eUZDNW5iMjluYkdVdWNISnZkRzlpZFdZdVFYQnBTQUFTTXdvT1pIVnlZWFJwYjI1ZlptbGwiLAot
ICAgICAgICAgICAgImJHUVlBeUFCS0FzeUdTNW5iMjluYkdVdWNISnZkRzlpZFdZdVJIVnlZWFJw
YjI1SUFCSXRDZ3RsYlhCMCIsCi0gICAgICAgICAgICAiZVY5bWFXVnNaQmdFSUFFb0N6SVdMbWR2
YjJkc1pTNXdjbTkwYjJKMVppNUZiWEIwZVVnQUVqWUtFR1pwIiwKLSAgICAgICAgICAgICJaV3hr
WDIxaGMydGZabWxsYkdRWUJTQUJLQXN5R2k1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUk4i
LAotICAgICAgICAgICAgIllYTnJTQUFTUGdvVWMyOTFjbU5sWDJOdmJuUmxlSFJmWm1sbGJHUVlC
aUFCS0FzeUhpNW5iMjluYkdVdSIsCi0gICAgICAgICAgICAiY0hKdmRHOWlkV1l1VTI5MWNtTmxR
Mjl1ZEdWNGRFZ0FFaThLREhOMGNuVmpkRjltYVdWc1pCZ0hJQUVvIiwKLSAgICAgICAgICAgICJD
eklYTG1kdmIyZHNaUzV3Y205MGIySjFaaTVUZEhKMVkzUklBQkkxQ2c5MGFXMWxjM1JoYlhCZlpt
bGwiLAotICAgICAgICAgICAgImJHUVlDQ0FCS0FzeUdpNW5iMjluYkdVdWNISnZkRzlpZFdZdVZH
bHRaWE4wWVcxd1NBQVNLd29LZEhsdyIsCi0gICAgICAgICAgICAiWlY5bWFXVnNaQmdKSUFFb0N6
SVZMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVVlWEJsU0FBU05Bb01aRzkxIiwKLSAgICAgICAgICAg
ICJZbXhsWDJacFpXeGtHQW9nQVNnTE1od3VaMjl2WjJ4bExuQnliM1J2WW5WbUxrUnZkV0pzWlZa
aGJIVmwiLAotICAgICAgICAgICAgIlNBQVNNZ29MWm14dllYUmZabWxsYkdRWUN5QUJLQXN5R3k1
bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um14diIsCi0gICAgICAgICAgICAiWVhSV1lXeDFaVWdBRWpJ
S0MybHVkRFkwWDJacFpXeGtHQXdnQVNnTE1oc3VaMjl2WjJ4bExuQnliM1J2IiwKLSAgICAgICAg
ICAgICJZblZtTGtsdWREWTBWbUZzZFdWSUFCSTBDZ3gxYVc1ME5qUmZabWxsYkdRWURTQUJLQXN5
SEM1bmIyOW4iLAotICAgICAgICAgICAgImJHVXVjSEp2ZEc5aWRXWXVWVWx1ZERZMFZtRnNkV1ZJ
QUJJeUNndHBiblF6TWw5bWFXVnNaQmdPSUFFbyIsCi0gICAgICAgICAgICAiQ3pJYkxtZHZiMmRz
WlM1d2NtOTBiMkoxWmk1SmJuUXpNbFpoYkhWbFNBQVNOQW9NZFdsdWRETXlYMlpwIiwKLSAgICAg
ICAgICAgICJaV3hrR0E4Z0FTZ0xNaHd1WjI5dloyeGxMbkJ5YjNSdlluVm1MbFZKYm5Rek1sWmhi
SFZsU0FBU01Bb0siLAotICAgICAgICAgICAgIlltOXZiRjltYVdWc1pCZ1FJQUVvQ3pJYUxtZHZi
MmRzWlM1d2NtOTBiMkoxWmk1Q2IyOXNWbUZzZFdWSSIsCi0gICAgICAgICAgICAiQUJJMENneHpk
SEpwYm1kZlptbGxiR1FZRVNBQktBc3lIQzVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVM1J5IiwKLSAg
ICAgICAgICAgICJhVzVuVm1Gc2RXVklBQkl5Q2d0aWVYUmxjMTltYVdWc1pCZ1NJQUVvQ3pJYkxt
ZHZiMmRzWlM1d2NtOTAiLAotICAgICAgICAgICAgImIySjFaaTVDZVhSbGMxWmhiSFZsU0FCQ0RR
b0xiMjVsYjJaZlptbGxiR1FpbGhZS0VVMWhjRmRsYkd4TCIsCi0gICAgICAgICAgICAiYm05M2Js
UjVjR1Z6RWtVS0NXRnVlVjltYVdWc1pCZ0JJQU1vQ3pJeUxuQnliM1J2WW5WbVgzVnVhWFIwIiwK
LSAgICAgICAgICAgICJaWE4wTGsxaGNGZGxiR3hMYm05M2JsUjVjR1Z6TGtGdWVVWnBaV3hrUlc1
MGNua1NSUW9KWVhCcFgyWnAiLAotICAgICAgICAgICAgIlpXeGtHQUlnQXlnTE1qSXVjSEp2ZEc5
aWRXWmZkVzVwZEhSbGMzUXVUV0Z3VjJWc2JFdHViM2R1VkhsdyIsCi0gICAgICAgICAgICAiWlhN
dVFYQnBSbWxsYkdSRmJuUnllUkpQQ2c1a2RYSmhkR2x2Ymw5bWFXVnNaQmdESUFNb0N6STNMbkJ5
IiwKLSAgICAgICAgICAgICJiM1J2WW5WbVgzVnVhWFIwWlhOMExrMWhjRmRsYkd4TGJtOTNibFI1
Y0dWekxrUjFjbUYwYVc5dVJtbGwiLAotICAgICAgICAgICAgImJHUkZiblJ5ZVJKSkNndGxiWEIw
ZVY5bWFXVnNaQmdFSUFNb0N6STBMbkJ5YjNSdlluVm1YM1Z1YVhSMCIsCi0gICAgICAgICAgICAi
WlhOMExrMWhjRmRsYkd4TGJtOTNibFI1Y0dWekxrVnRjSFI1Um1sbGJHUkZiblJ5ZVJKU0NoQm1h
V1ZzIiwKLSAgICAgICAgICAgICJaRjl0WVhOclgyWnBaV3hrR0FVZ0F5Z0xNamd1Y0hKdmRHOWlk
V1pmZFc1cGRIUmxjM1F1VFdGd1YyVnMiLAotICAgICAgICAgICAgImJFdHViM2R1Vkhsd1pYTXVS
bWxsYkdSTllYTnJSbWxsYkdSRmJuUnllUkphQ2hSemIzVnlZMlZmWTI5dSIsCi0gICAgICAgICAg
ICAiZEdWNGRGOW1hV1ZzWkJnR0lBTW9Dekk4TG5CeWIzUnZZblZtWDNWdWFYUjBaWE4wTGsxaGNG
ZGxiR3hMIiwKLSAgICAgICAgICAgICJibTkzYmxSNWNHVnpMbE52ZFhKalpVTnZiblJsZUhSR2FX
VnNaRVZ1ZEhKNUVrc0tESE4wY25WamRGOW0iLAotICAgICAgICAgICAgImFXVnNaQmdISUFNb0N6
STFMbkJ5YjNSdlluVm1YM1Z1YVhSMFpYTjBMazFoY0ZkbGJHeExibTkzYmxSNSIsCi0gICAgICAg
ICAgICAiY0dWekxsTjBjblZqZEVacFpXeGtSVzUwY25rU1VRb1BkR2x0WlhOMFlXMXdYMlpwWld4
a0dBZ2dBeWdMIiwKLSAgICAgICAgICAgICJNamd1Y0hKdmRHOWlkV1pmZFc1cGRIUmxjM1F1VFdG
d1YyVnNiRXR1YjNkdVZIbHdaWE11VkdsdFpYTjAiLAotICAgICAgICAgICAgIllXMXdSbWxsYkdS
RmJuUnllUkpIQ2dwMGVYQmxYMlpwWld4a0dBa2dBeWdMTWpNdWNISnZkRzlpZFdaZiIsCi0gICAg
ICAgICAgICAiZFc1cGRIUmxjM1F1VFdGd1YyVnNiRXR1YjNkdVZIbHdaWE11Vkhsd1pVWnBaV3hr
Ulc1MGNua1NTd29NIiwKLSAgICAgICAgICAgICJaRzkxWW14bFgyWnBaV3hrR0FvZ0F5Z0xNalV1
Y0hKdmRHOWlkV1pmZFc1cGRIUmxjM1F1VFdGd1YyVnMiLAotICAgICAgICAgICAgImJFdHViM2R1
Vkhsd1pYTXVSRzkxWW14bFJtbGxiR1JGYm5SeWVSSkpDZ3RtYkc5aGRGOW1hV1ZzWkJnTCIsCi0g
ICAgICAgICAgICAiSUFNb0N6STBMbkJ5YjNSdlluVm1YM1Z1YVhSMFpYTjBMazFoY0ZkbGJHeExi
bTkzYmxSNWNHVnpMa1pzIiwKLSAgICAgICAgICAgICJiMkYwUm1sbGJHUkZiblJ5ZVJKSkNndHBi
blEyTkY5bWFXVnNaQmdNSUFNb0N6STBMbkJ5YjNSdlluVm0iLAotICAgICAgICAgICAgIlgzVnVh
WFIwWlhOMExrMWhjRmRsYkd4TGJtOTNibFI1Y0dWekxrbHVkRFkwUm1sbGJHUkZiblJ5ZVJKTCIs
Ci0gICAgICAgICAgICAiQ2d4MWFXNTBOalJmWm1sbGJHUVlEU0FES0FzeU5TNXdjbTkwYjJKMVps
OTFibWwwZEdWemRDNU5ZWEJYIiwKLSAgICAgICAgICAgICJaV3hzUzI1dmQyNVVlWEJsY3k1VmFX
NTBOalJHYVdWc1pFVnVkSEo1RWtrS0MybHVkRE15WDJacFpXeGsiLAotICAgICAgICAgICAgIkdB
NGdBeWdMTWpRdWNISnZkRzlpZFdaZmRXNXBkSFJsYzNRdVRXRndWMlZzYkV0dWIzZHVWSGx3WlhN
dSIsCi0gICAgICAgICAgICAiU1c1ME16SkdhV1ZzWkVWdWRISjVFa3NLREhWcGJuUXpNbDltYVdW
c1pCZ1BJQU1vQ3pJMUxuQnliM1J2IiwKLSAgICAgICAgICAgICJZblZtWDNWdWFYUjBaWE4wTGsx
aGNGZGxiR3hMYm05M2JsUjVjR1Z6TGxWcGJuUXpNa1pwWld4a1JXNTAiLAotICAgICAgICAgICAg
ImNua1NSd29LWW05dmJGOW1hV1ZzWkJnUUlBTW9Dekl6TG5CeWIzUnZZblZtWDNWdWFYUjBaWE4w
TGsxaCIsCi0gICAgICAgICAgICAiY0ZkbGJHeExibTkzYmxSNWNHVnpMa0p2YjJ4R2FXVnNaRVZ1
ZEhKNUVrc0tESE4wY21sdVoxOW1hV1ZzIiwKLSAgICAgICAgICAgICJaQmdSSUFNb0N6STFMbkJ5
YjNSdlluVm1YM1Z1YVhSMFpYTjBMazFoY0ZkbGJHeExibTkzYmxSNWNHVnoiLAotICAgICAgICAg
ICAgIkxsTjBjbWx1WjBacFpXeGtSVzUwY25rU1NRb0xZbmwwWlhOZlptbGxiR1FZRWlBREtBc3lO
QzV3Y205MCIsCi0gICAgICAgICAgICAiYjJKMVpsOTFibWwwZEdWemRDNU5ZWEJYWld4c1MyNXZk
MjVVZVhCbGN5NUNlWFJsYzBacFpXeGtSVzUwIiwKLSAgICAgICAgICAgICJjbmthUlFvTlFXNTVS
bWxsYkdSRmJuUnllUklMQ2dOclpYa1lBU0FCS0FVU0l3b0ZkbUZzZFdVWUFpQUIiLAotICAgICAg
ICAgICAgIktBc3lGQzVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVRVzU1T2dJNEFScEZDZzFCY0dsR2FX
VnNaRVZ1ZEhKNSIsCi0gICAgICAgICAgICAiRWdzS0EydGxlUmdCSUFFb0JSSWpDZ1YyWVd4MVpS
Z0NJQUVvQ3pJVUxtZHZiMmRzWlM1d2NtOTBiMkoxIiwKLSAgICAgICAgICAgICJaaTVCY0drNkFq
Z0JHazhLRWtSMWNtRjBhVzl1Um1sbGJHUkZiblJ5ZVJJTENnTnJaWGtZQVNBQktBVVMiLAotICAg
ICAgICAgICAgIktBb0ZkbUZzZFdVWUFpQUJLQXN5R1M1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1UkhW
eVlYUnBiMjQ2QWpnQiIsCi0gICAgICAgICAgICAiR2trS0QwVnRjSFI1Um1sbGJHUkZiblJ5ZVJJ
TENnTnJaWGtZQVNBQktBVVNKUW9GZG1Gc2RXVVlBaUFCIiwKLSAgICAgICAgICAgICJLQXN5Rmk1
bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulcxd2RIazZBamdCR2xFS0UwWnBaV3hrVFdGemEwWnAiLAot
ICAgICAgICAgICAgIlpXeGtSVzUwY25rU0N3b0RhMlY1R0FFZ0FTZ0ZFaWtLQlhaaGJIVmxHQUln
QVNnTE1ob3VaMjl2WjJ4bCIsCi0gICAgICAgICAgICAiTG5CeWIzUnZZblZtTGtacFpXeGtUV0Z6
YXpvQ09BRWFXUW9YVTI5MWNtTmxRMjl1ZEdWNGRFWnBaV3hrIiwKLSAgICAgICAgICAgICJSVzUw
Y25rU0N3b0RhMlY1R0FFZ0FTZ0ZFaTBLQlhaaGJIVmxHQUlnQVNnTE1oNHVaMjl2WjJ4bExuQnki
LAotICAgICAgICAgICAgImIzUnZZblZtTGxOdmRYSmpaVU52Ym5SbGVIUTZBamdCR2tzS0VGTjBj
blZqZEVacFpXeGtSVzUwY25rUyIsCi0gICAgICAgICAgICAiQ3dvRGEyVjVHQUVnQVNnRkVpWUtC
WFpoYkhWbEdBSWdBU2dMTWhjdVoyOXZaMnhsTG5CeWIzUnZZblZtIiwKLSAgICAgICAgICAgICJM
bE4wY25WamREb0NPQUVhVVFvVFZHbHRaWE4wWVcxd1JtbGxiR1JGYm5SeWVSSUxDZ05yWlhrWUFT
QUIiLAotICAgICAgICAgICAgIktBVVNLUW9GZG1Gc2RXVVlBaUFCS0FzeUdpNW5iMjluYkdVdWNI
SnZkRzlpZFdZdVZHbHRaWE4wWVcxdyIsCi0gICAgICAgICAgICAiT2dJNEFScEhDZzVVZVhCbFJt
bGxiR1JGYm5SeWVSSUxDZ05yWlhrWUFTQUJLQVVTSkFvRmRtRnNkV1VZIiwKLSAgICAgICAgICAg
ICJBaUFCS0FzeUZTNW5iMjluYkdVdWNISnZkRzlpZFdZdVZIbHdaVG9DT0FFYVVBb1FSRzkxWW14
bFJtbGwiLAotICAgICAgICAgICAgImJHUkZiblJ5ZVJJTENnTnJaWGtZQVNBQktBVVNLd29GZG1G
c2RXVVlBaUFCS0FzeUhDNW5iMjluYkdVdSIsCi0gICAgICAgICAgICAiY0hKdmRHOWlkV1l1Ukc5
MVlteGxWbUZzZFdVNkFqZ0JHazRLRDBac2IyRjBSbWxsYkdSRmJuUnllUklMIiwKLSAgICAgICAg
ICAgICJDZ05yWlhrWUFTQUJLQVVTS2dvRmRtRnNkV1VZQWlBQktBc3lHeTVuYjI5bmJHVXVjSEp2
ZEc5aWRXWXUiLAotICAgICAgICAgICAgIlJteHZZWFJXWVd4MVpUb0NPQUVhVGdvUFNXNTBOalJH
YVdWc1pFVnVkSEo1RWdzS0EydGxlUmdCSUFFbyIsCi0gICAgICAgICAgICAiQlJJcUNnVjJZV3gx
WlJnQ0lBRW9DekliTG1kdmIyZHNaUzV3Y205MGIySjFaaTVKYm5RMk5GWmhiSFZsIiwKLSAgICAg
ICAgICAgICJPZ0k0QVJwUUNoQlZhVzUwTmpSR2FXVnNaRVZ1ZEhKNUVnc0tBMnRsZVJnQklBRW9C
UklyQ2dWMllXeDEiLAotICAgICAgICAgICAgIlpSZ0NJQUVvQ3pJY0xtZHZiMmRzWlM1d2NtOTBi
MkoxWmk1VlNXNTBOalJXWVd4MVpUb0NPQUVhVGdvUCIsCi0gICAgICAgICAgICAiU1c1ME16Skdh
V1ZzWkVWdWRISjVFZ3NLQTJ0bGVSZ0JJQUVvQlJJcUNnVjJZV3gxWlJnQ0lBRW9DekliIiwKLSAg
ICAgICAgICAgICJMbWR2YjJkc1pTNXdjbTkwYjJKMVppNUpiblF6TWxaaGJIVmxPZ0k0QVJwUUNo
QlZhVzUwTXpKR2FXVnMiLAotICAgICAgICAgICAgIlpFVnVkSEo1RWdzS0EydGxlUmdCSUFFb0JS
SXJDZ1YyWVd4MVpSZ0NJQUVvQ3pJY0xtZHZiMmRzWlM1dyIsCi0gICAgICAgICAgICAiY205MGIy
SjFaaTVWU1c1ME16SldZV3gxWlRvQ09BRWFUQW9PUW05dmJFWnBaV3hrUlc1MGNua1NDd29EIiwK
LSAgICAgICAgICAgICJhMlY1R0FFZ0FTZ0ZFaWtLQlhaaGJIVmxHQUlnQVNnTE1ob3VaMjl2WjJ4
bExuQnliM1J2WW5WbUxrSnYiLAotICAgICAgICAgICAgImIyeFdZV3gxWlRvQ09BRWFVQW9RVTNS
eWFXNW5SbWxsYkdSRmJuUnllUklMQ2dOclpYa1lBU0FCS0FVUyIsCi0gICAgICAgICAgICAiS3dv
RmRtRnNkV1VZQWlBQktBc3lIQzVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVVM1J5YVc1blZtRnNkV1U2
IiwKLSAgICAgICAgICAgICJBamdCR2s0S0QwSjVkR1Z6Um1sbGJHUkZiblJ5ZVJJTENnTnJaWGtZ
QVNBQktBVVNLZ29GZG1Gc2RXVVkiLAotICAgICAgICAgICAgIkFpQUJLQXN5R3k1bmIyOW5iR1V1
Y0hKdmRHOWlkV1l1UW5sMFpYTldZV3gxWlRvQ09BRkNPUW9ZWTI5dCIsCi0gICAgICAgICAgICAi
TG1kdmIyZHNaUzV3Y205MGIySjFaaTUwWlhOMFVBR3FBaHBIYjI5bmJHVXVVSEp2ZEc5aWRXWXVW
R1Z6IiwKLSAgICAgICAgICAgICJkRkJ5YjNSdmMySUdjSEp2ZEc4eiIpKTsKLSAgICAgIGRlc2Ny
aXB0b3IgPSBwYnI6OkZpbGVEZXNjcmlwdG9yLkZyb21HZW5lcmF0ZWRDb2RlKGRlc2NyaXB0b3JE
YXRhLAotICAgICAgICAgIG5ldyBwYnI6OkZpbGVEZXNjcmlwdG9yW10geyBnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnlSZWZsZWN0aW9uLkRlc2NyaXB0b3IsIGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFwaVJlZmxlY3Rpb24uRGVzY3JpcHRv
ciwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRHVyYXRpb25SZWZsZWN0
aW9uLkRlc2NyaXB0b3IsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkVt
cHR5UmVmbGVjdGlvbi5EZXNjcmlwdG9yLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5GaWVsZE1hc2tSZWZsZWN0aW9uLkRlc2NyaXB0b3IsIGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLlNvdXJjZUNvbnRleHRSZWZsZWN0aW9uLkRlc2NyaXB0b3Is
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cnVjdFJlZmxlY3Rpb24u
RGVzY3JpcHRvciwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVGltZXN0
YW1wUmVmbGVjdGlvbi5EZXNjcmlwdG9yLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5UeXBlUmVmbGVjdGlvbi5EZXNjcmlwdG9yLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5XZWxsS25vd25UeXBlcy5XcmFwcGVyc1JlZmxlY3Rpb24uRGVzY3JpcHRvciwgfSwKLSAgICAg
ICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyhudWxsLCBuZXcgcGJyOjpHZW5lcmF0
ZWRDbHJUeXBlSW5mb1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJ
bmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlRlc3RXZWxsS25v
d25UeXBlcyksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVGVzdFdlbGxLbm93
blR5cGVzLlBhcnNlciwgbmV3W117ICJBbnlGaWVsZCIsICJBcGlGaWVsZCIsICJEdXJhdGlvbkZp
ZWxkIiwgIkVtcHR5RmllbGQiLCAiRmllbGRNYXNrRmllbGQiLCAiU291cmNlQ29udGV4dEZpZWxk
IiwgIlN0cnVjdEZpZWxkIiwgIlRpbWVzdGFtcEZpZWxkIiwgIlR5cGVGaWVsZCIsICJEb3VibGVG
aWVsZCIsICJGbG9hdEZpZWxkIiwgIkludDY0RmllbGQiLCAiVWludDY0RmllbGQiLCAiSW50MzJG
aWVsZCIsICJVaW50MzJGaWVsZCIsICJCb29sRmllbGQiLCAiU3RyaW5nRmllbGQiLCAiQnl0ZXNG
aWVsZCIsICJWYWx1ZUZpZWxkIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5l
dyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5UZXN0UHJvdG9zLlJlcGVhdGVkV2VsbEtub3duVHlwZXMpLCBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zLlJlcGVhdGVkV2VsbEtub3duVHlwZXMuUGFyc2VyLCBuZXdbXXsgIkFu
eUZpZWxkIiwgIkFwaUZpZWxkIiwgIkR1cmF0aW9uRmllbGQiLCAiRW1wdHlGaWVsZCIsICJGaWVs
ZE1hc2tGaWVsZCIsICJTb3VyY2VDb250ZXh0RmllbGQiLCAiU3RydWN0RmllbGQiLCAiVGltZXN0
YW1wRmllbGQiLCAiVHlwZUZpZWxkIiwgIkRvdWJsZUZpZWxkIiwgIkZsb2F0RmllbGQiLCAiSW50
NjRGaWVsZCIsICJVaW50NjRGaWVsZCIsICJJbnQzMkZpZWxkIiwgIlVpbnQzMkZpZWxkIiwgIkJv
b2xGaWVsZCIsICJTdHJpbmdGaWVsZCIsICJCeXRlc0ZpZWxkIiB9LCBudWxsLCBudWxsLCBudWxs
KSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk9uZW9mV2VsbEtub3duVHlwZXMpLCBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLk9uZW9mV2VsbEtub3duVHlwZXMuUGFyc2Vy
LCBuZXdbXXsgIkFueUZpZWxkIiwgIkFwaUZpZWxkIiwgIkR1cmF0aW9uRmllbGQiLCAiRW1wdHlG
aWVsZCIsICJGaWVsZE1hc2tGaWVsZCIsICJTb3VyY2VDb250ZXh0RmllbGQiLCAiU3RydWN0Rmll
bGQiLCAiVGltZXN0YW1wRmllbGQiLCAiVHlwZUZpZWxkIiwgIkRvdWJsZUZpZWxkIiwgIkZsb2F0
RmllbGQiLCAiSW50NjRGaWVsZCIsICJVaW50NjRGaWVsZCIsICJJbnQzMkZpZWxkIiwgIlVpbnQz
MkZpZWxkIiwgIkJvb2xGaWVsZCIsICJTdHJpbmdGaWVsZCIsICJCeXRlc0ZpZWxkIiB9LCBuZXdb
XXsgIk9uZW9mRmllbGQiIH0sIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2Vu
ZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90
b3MuTWFwV2VsbEtub3duVHlwZXMpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9z
Lk1hcFdlbGxLbm93blR5cGVzLlBhcnNlciwgbmV3W117ICJBbnlGaWVsZCIsICJBcGlGaWVsZCIs
ICJEdXJhdGlvbkZpZWxkIiwgIkVtcHR5RmllbGQiLCAiRmllbGRNYXNrRmllbGQiLCAiU291cmNl
Q29udGV4dEZpZWxkIiwgIlN0cnVjdEZpZWxkIiwgIlRpbWVzdGFtcEZpZWxkIiwgIlR5cGVGaWVs
ZCIsICJEb3VibGVGaWVsZCIsICJGbG9hdEZpZWxkIiwgIkludDY0RmllbGQiLCAiVWludDY0Rmll
bGQiLCAiSW50MzJGaWVsZCIsICJVaW50MzJGaWVsZCIsICJCb29sRmllbGQiLCAiU3RyaW5nRmll
bGQiLCAiQnl0ZXNGaWVsZCIgfSwgbnVsbCwgbnVsbCwgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlw
ZUluZm9bXSB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGws
IG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51
bGwsIH0pCi0gICAgICAgICAgfSkpOwotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotICAj
cmVnaW9uIE1lc3NhZ2VzCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBUZXN0IHRoYXQgd2UgY2Fu
IGluY2x1ZGUgYWxsIHdlbGwta25vd24gdHlwZXMuCi0gIC8vLyAgRWFjaCB3cmFwcGVyIHR5cGUg
aXMgaW5jbHVkZWQgc2VwYXJhdGVseSwgYXMgbGFuZ3VhZ2VzCi0gIC8vLyAgbWFwIGhhbmRsZSBk
aWZmZXJlbnQgd3JhcHBlcnMgaW4gZGlmZmVyZW50IHdheXMuCi0gIC8vLyA8L3N1bW1hcnk+Ci0g
IFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRl
KCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBUZXN0V2VsbEtub3duVHlwZXMgOiBw
Yjo6SU1lc3NhZ2U8VGVzdFdlbGxLbm93blR5cGVzPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVh
ZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8VGVzdFdlbGxLbm93blR5cGVzPiBfcGFyc2VyID0gbmV3
IHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RXZWxsS25vd25UeXBlcz4oKCkgPT4gbmV3IFRlc3RXZWxs
S25vd25UeXBlcygpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPFRlc3RX
ZWxsS25vd25UeXBlcz4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAg
cHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAg
Z2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3MuVW5pdHRlc3RX
ZWxsS25vd25UeXBlc1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMF07IH0KLSAg
ICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9y
IHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGlj
IFRlc3RXZWxsS25vd25UeXBlcygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQot
Ci0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgVGVzdFdl
bGxLbm93blR5cGVzKFRlc3RXZWxsS25vd25UeXBlcyBvdGhlcikgOiB0aGlzKCkgewotICAgICAg
QW55RmllbGQgPSBvdGhlci5hbnlGaWVsZF8gIT0gbnVsbCA/IG90aGVyLkFueUZpZWxkLkNsb25l
KCkgOiBudWxsOwotICAgICAgQXBpRmllbGQgPSBvdGhlci5hcGlGaWVsZF8gIT0gbnVsbCA/IG90
aGVyLkFwaUZpZWxkLkNsb25lKCkgOiBudWxsOwotICAgICAgRHVyYXRpb25GaWVsZCA9IG90aGVy
LmR1cmF0aW9uRmllbGRfICE9IG51bGwgPyBvdGhlci5EdXJhdGlvbkZpZWxkLkNsb25lKCkgOiBu
dWxsOwotICAgICAgRW1wdHlGaWVsZCA9IG90aGVyLmVtcHR5RmllbGRfICE9IG51bGwgPyBvdGhl
ci5FbXB0eUZpZWxkLkNsb25lKCkgOiBudWxsOwotICAgICAgRmllbGRNYXNrRmllbGQgPSBvdGhl
ci5maWVsZE1hc2tGaWVsZF8gIT0gbnVsbCA/IG90aGVyLkZpZWxkTWFza0ZpZWxkLkNsb25lKCkg
OiBudWxsOwotICAgICAgU291cmNlQ29udGV4dEZpZWxkID0gb3RoZXIuc291cmNlQ29udGV4dEZp
ZWxkXyAhPSBudWxsID8gb3RoZXIuU291cmNlQ29udGV4dEZpZWxkLkNsb25lKCkgOiBudWxsOwot
ICAgICAgU3RydWN0RmllbGQgPSBvdGhlci5zdHJ1Y3RGaWVsZF8gIT0gbnVsbCA/IG90aGVyLlN0
cnVjdEZpZWxkLkNsb25lKCkgOiBudWxsOwotICAgICAgVGltZXN0YW1wRmllbGQgPSBvdGhlci50
aW1lc3RhbXBGaWVsZF8gIT0gbnVsbCA/IG90aGVyLlRpbWVzdGFtcEZpZWxkLkNsb25lKCkgOiBu
dWxsOwotICAgICAgVHlwZUZpZWxkID0gb3RoZXIudHlwZUZpZWxkXyAhPSBudWxsID8gb3RoZXIu
VHlwZUZpZWxkLkNsb25lKCkgOiBudWxsOwotICAgICAgRG91YmxlRmllbGQgPSBvdGhlci5Eb3Vi
bGVGaWVsZDsKLSAgICAgIEZsb2F0RmllbGQgPSBvdGhlci5GbG9hdEZpZWxkOwotICAgICAgSW50
NjRGaWVsZCA9IG90aGVyLkludDY0RmllbGQ7Ci0gICAgICBVaW50NjRGaWVsZCA9IG90aGVyLlVp
bnQ2NEZpZWxkOwotICAgICAgSW50MzJGaWVsZCA9IG90aGVyLkludDMyRmllbGQ7Ci0gICAgICBV
aW50MzJGaWVsZCA9IG90aGVyLlVpbnQzMkZpZWxkOwotICAgICAgQm9vbEZpZWxkID0gb3RoZXIu
Qm9vbEZpZWxkOwotICAgICAgU3RyaW5nRmllbGQgPSBvdGhlci5TdHJpbmdGaWVsZDsKLSAgICAg
IEJ5dGVzRmllbGQgPSBvdGhlci5CeXRlc0ZpZWxkOwotICAgICAgVmFsdWVGaWVsZCA9IG90aGVy
LnZhbHVlRmllbGRfICE9IG51bGwgPyBvdGhlci5WYWx1ZUZpZWxkLkNsb25lKCkgOiBudWxsOwot
ICAgIH0KLQotICAgIHB1YmxpYyBUZXN0V2VsbEtub3duVHlwZXMgQ2xvbmUoKSB7Ci0gICAgICBy
ZXR1cm4gbmV3IFRlc3RXZWxsS25vd25UeXBlcyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImFueV9maWVsZCIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgQW55RmllbGRGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0
ZSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnkgYW55RmllbGRfOwot
ICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnkgQW55
RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIGFueUZpZWxkXzsgfQotICAgICAgc2V0IHsKLSAg
ICAgICAgYW55RmllbGRfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1t
YXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJhcGlfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IEFwaUZpZWxkRmllbGROdW1iZXIgPSAyOwotICAgIHByaXZhdGUg
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQXBpIGFwaUZpZWxkXzsKLSAg
ICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQXBpIEFwaUZp
ZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBhcGlGaWVsZF87IH0KLSAgICAgIHNldCB7Ci0gICAg
ICAgIGFwaUZpZWxkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZHVyYXRpb25fZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgY29uc3QgaW50IER1cmF0aW9uRmllbGRGaWVsZE51bWJlciA9IDM7Ci0gICAg
cHJpdmF0ZSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5EdXJhdGlvbiBk
dXJhdGlvbkZpZWxkXzsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtu
b3duVHlwZXMuRHVyYXRpb24gRHVyYXRpb25GaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gZHVy
YXRpb25GaWVsZF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGR1cmF0aW9uRmllbGRfID0gdmFs
dWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3Ig
dGhlICJlbXB0eV9maWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
RW1wdHlGaWVsZEZpZWxkTnVtYmVyID0gNDsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLkVtcHR5IGVtcHR5RmllbGRfOwotICAgIHB1YmxpYyBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5FbXB0eSBFbXB0eUZpZWxkIHsKLSAg
ICAgIGdldCB7IHJldHVybiBlbXB0eUZpZWxkXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgZW1w
dHlGaWVsZF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgImZpZWxkX21hc2tfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IEZpZWxkTWFza0ZpZWxkRmllbGROdW1iZXIgPSA1OwotICAgIHBy
aXZhdGUgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRmllbGRNYXNrIGZp
ZWxkTWFza0ZpZWxkXzsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtu
b3duVHlwZXMuRmllbGRNYXNrIEZpZWxkTWFza0ZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBm
aWVsZE1hc2tGaWVsZF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGZpZWxkTWFza0ZpZWxkXyA9
IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAic291cmNlX2NvbnRleHRfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IFNvdXJjZUNvbnRleHRGaWVsZEZpZWxkTnVtYmVyID0gNjsKLSAgICBwcml2
YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlNvdXJjZUNvbnRleHQg
c291cmNlQ29udGV4dEZpZWxkXzsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
V2VsbEtub3duVHlwZXMuU291cmNlQ29udGV4dCBTb3VyY2VDb250ZXh0RmllbGQgewotICAgICAg
Z2V0IHsgcmV0dXJuIHNvdXJjZUNvbnRleHRGaWVsZF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IHNvdXJjZUNvbnRleHRGaWVsZF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8g
PHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInN0cnVjdF9maWVsZCIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU3RydWN0RmllbGRGaWVsZE51bWJlciA9IDc7Ci0g
ICAgcHJpdmF0ZSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5TdHJ1Y3Qg
c3RydWN0RmllbGRfOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5TdHJ1Y3QgU3RydWN0RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIHN0cnVjdEZp
ZWxkXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgc3RydWN0RmllbGRfID0gdmFsdWU7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ0aW1l
c3RhbXBfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFRpbWVz
dGFtcEZpZWxkRmllbGROdW1iZXIgPSA4OwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuVGltZXN0YW1wIHRpbWVzdGFtcEZpZWxkXzsKLSAgICBwdWJs
aWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVGltZXN0YW1wIFRpbWVz
dGFtcEZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiB0aW1lc3RhbXBGaWVsZF87IH0KLSAgICAg
IHNldCB7Ci0gICAgICAgIHRpbWVzdGFtcEZpZWxkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0K
LQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAidHlwZV9maWVsZCIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVHlwZUZpZWxkRmllbGROdW1iZXIg
PSA5OwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
VHlwZSB0eXBlRmllbGRfOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5UeXBlIFR5cGVGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gdHlwZUZpZWxk
XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgdHlwZUZpZWxkXyA9IHZhbHVlOwotICAgICAgfQot
ICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZG91YmxlX2Zp
ZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBEb3VibGVGaWVsZEZp
ZWxkTnVtYmVyID0gMTA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29k
ZWM8ZG91YmxlPz4gX3NpbmdsZV9kb3VibGVGaWVsZF9jb2RlYyA9IHBiOjpGaWVsZENvZGVjLkZv
clN0cnVjdFdyYXBwZXI8ZG91YmxlPig4Mik7Ci0gICAgcHJpdmF0ZSBkb3VibGU/IGRvdWJsZUZp
ZWxkXzsKLSAgICBwdWJsaWMgZG91YmxlPyBEb3VibGVGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1
cm4gZG91YmxlRmllbGRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBkb3VibGVGaWVsZF8gPSB2
YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgImZsb2F0X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGlu
dCBGbG9hdEZpZWxkRmllbGROdW1iZXIgPSAxMTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25s
eSBwYjo6RmllbGRDb2RlYzxmbG9hdD8+IF9zaW5nbGVfZmxvYXRGaWVsZF9jb2RlYyA9IHBiOjpG
aWVsZENvZGVjLkZvclN0cnVjdFdyYXBwZXI8ZmxvYXQ+KDkwKTsKLSAgICBwcml2YXRlIGZsb2F0
PyBmbG9hdEZpZWxkXzsKLSAgICBwdWJsaWMgZmxvYXQ/IEZsb2F0RmllbGQgewotICAgICAgZ2V0
IHsgcmV0dXJuIGZsb2F0RmllbGRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBmbG9hdEZpZWxk
XyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAiaW50NjRfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29u
c3QgaW50IEludDY0RmllbGRGaWVsZE51bWJlciA9IDEyOwotICAgIHByaXZhdGUgc3RhdGljIHJl
YWRvbmx5IHBiOjpGaWVsZENvZGVjPGxvbmc/PiBfc2luZ2xlX2ludDY0RmllbGRfY29kZWMgPSBw
Yjo6RmllbGRDb2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPGxvbmc+KDk4KTsKLSAgICBwcml2YXRlIGxv
bmc/IGludDY0RmllbGRfOwotICAgIHB1YmxpYyBsb25nPyBJbnQ2NEZpZWxkIHsKLSAgICAgIGdl
dCB7IHJldHVybiBpbnQ2NEZpZWxkXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgaW50NjRGaWVs
ZF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgInVpbnQ2NF9maWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgVWludDY0RmllbGRGaWVsZE51bWJlciA9IDEzOwotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHVsb25nPz4gX3NpbmdsZV91aW50NjRGaWVsZF9jb2Rl
YyA9IHBiOjpGaWVsZENvZGVjLkZvclN0cnVjdFdyYXBwZXI8dWxvbmc+KDEwNik7Ci0gICAgcHJp
dmF0ZSB1bG9uZz8gdWludDY0RmllbGRfOwotICAgIHB1YmxpYyB1bG9uZz8gVWludDY0RmllbGQg
ewotICAgICAgZ2V0IHsgcmV0dXJuIHVpbnQ2NEZpZWxkXzsgfQotICAgICAgc2V0IHsKLSAgICAg
ICAgdWludDY0RmllbGRfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1t
YXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJpbnQzMl9maWVsZCIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgSW50MzJGaWVsZEZpZWxkTnVtYmVyID0gMTQ7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8aW50Pz4gX3NpbmdsZV9pbnQzMkZp
ZWxkX2NvZGVjID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RydWN0V3JhcHBlcjxpbnQ+KDExNCk7Ci0g
ICAgcHJpdmF0ZSBpbnQ/IGludDMyRmllbGRfOwotICAgIHB1YmxpYyBpbnQ/IEludDMyRmllbGQg
ewotICAgICAgZ2V0IHsgcmV0dXJuIGludDMyRmllbGRfOyB9Ci0gICAgICBzZXQgewotICAgICAg
ICBpbnQzMkZpZWxkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAidWludDMyX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBVaW50MzJGaWVsZEZpZWxkTnVtYmVyID0gMTU7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8dWludD8+IF9zaW5nbGVfdWludDMy
RmllbGRfY29kZWMgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPHVpbnQ+KDEyMik7
Ci0gICAgcHJpdmF0ZSB1aW50PyB1aW50MzJGaWVsZF87Ci0gICAgcHVibGljIHVpbnQ/IFVpbnQz
MkZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiB1aW50MzJGaWVsZF87IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIHVpbnQzMkZpZWxkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiYm9vbF9maWVsZCIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQm9vbEZpZWxkRmllbGROdW1iZXIgPSAxNjsKLSAg
ICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxib29sPz4gX3NpbmdsZV9i
b29sRmllbGRfY29kZWMgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPGJvb2w+KDEz
MCk7Ci0gICAgcHJpdmF0ZSBib29sPyBib29sRmllbGRfOwotICAgIHB1YmxpYyBib29sPyBCb29s
RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIGJvb2xGaWVsZF87IH0KLSAgICAgIHNldCB7Ci0g
ICAgICAgIGJvb2xGaWVsZF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInN0cmluZ19maWVsZCIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU3RyaW5nRmllbGRGaWVsZE51bWJlciA9IDE3OwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHN0cmluZz4gX3NpbmdsZV9z
dHJpbmdGaWVsZF9jb2RlYyA9IHBiOjpGaWVsZENvZGVjLkZvckNsYXNzV3JhcHBlcjxzdHJpbmc+
KDEzOCk7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgc3RyaW5nRmllbGRfOwotICAgIHB1YmxpYyBzdHJp
bmcgU3RyaW5nRmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIHN0cmluZ0ZpZWxkXzsgfQotICAg
ICAgc2V0IHsKLSAgICAgICAgc3RyaW5nRmllbGRfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJieXRlc19maWVsZCIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQnl0ZXNGaWVsZEZpZWxkTnVtYmVy
ID0gMTg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8cGI6OkJ5
dGVTdHJpbmc+IF9zaW5nbGVfYnl0ZXNGaWVsZF9jb2RlYyA9IHBiOjpGaWVsZENvZGVjLkZvckNs
YXNzV3JhcHBlcjxwYjo6Qnl0ZVN0cmluZz4oMTQ2KTsKLSAgICBwcml2YXRlIHBiOjpCeXRlU3Ry
aW5nIGJ5dGVzRmllbGRfOwotICAgIHB1YmxpYyBwYjo6Qnl0ZVN0cmluZyBCeXRlc0ZpZWxkIHsK
LSAgICAgIGdldCB7IHJldHVybiBieXRlc0ZpZWxkXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
Ynl0ZXNGaWVsZF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+
RmllbGQgbnVtYmVyIGZvciB0aGUgInZhbHVlX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBWYWx1ZUZpZWxkRmllbGROdW1iZXIgPSAxOTsKLSAgICBwcml2YXRl
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlZhbHVlIHZhbHVlRmllbGRf
OwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFBhcnQgb2Ygc3RydWN0LCBidXQgdXNlZnVs
IHRvIGJlIGFibGUgdG8gdGVzdCBzZXBhcmF0ZWx5Ci0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVmFsdWUgVmFsdWVG
aWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gdmFsdWVGaWVsZF87IH0KLSAgICAgIHNldCB7Ci0g
ICAgICAgIHZhbHVlRmllbGRfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGlj
IG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFs
cyhvdGhlciBhcyBUZXN0V2VsbEtub3duVHlwZXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29s
IEVxdWFscyhUZXN0V2VsbEtub3duVHlwZXMgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VF
cXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAg
ICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfQotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKEFueUZpZWxkLCBvdGhlci5B
bnlGaWVsZCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghb2JqZWN0LkVxdWFscyhBcGlGaWVs
ZCwgb3RoZXIuQXBpRmllbGQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVh
bHMoRHVyYXRpb25GaWVsZCwgb3RoZXIuRHVyYXRpb25GaWVsZCkpIHJldHVybiBmYWxzZTsKLSAg
ICAgIGlmICghb2JqZWN0LkVxdWFscyhFbXB0eUZpZWxkLCBvdGhlci5FbXB0eUZpZWxkKSkgcmV0
dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKEZpZWxkTWFza0ZpZWxkLCBvdGhl
ci5GaWVsZE1hc2tGaWVsZCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghb2JqZWN0LkVxdWFs
cyhTb3VyY2VDb250ZXh0RmllbGQsIG90aGVyLlNvdXJjZUNvbnRleHRGaWVsZCkpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmICghb2JqZWN0LkVxdWFscyhTdHJ1Y3RGaWVsZCwgb3RoZXIuU3RydWN0
RmllbGQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoVGltZXN0YW1w
RmllbGQsIG90aGVyLlRpbWVzdGFtcEZpZWxkKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFv
YmplY3QuRXF1YWxzKFR5cGVGaWVsZCwgb3RoZXIuVHlwZUZpZWxkKSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYgKERvdWJsZUZpZWxkICE9IG90aGVyLkRvdWJsZUZpZWxkKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoRmxvYXRGaWVsZCAhPSBvdGhlci5GbG9hdEZpZWxkKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoSW50NjRGaWVsZCAhPSBvdGhlci5JbnQ2NEZpZWxkKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoVWludDY0RmllbGQgIT0gb3RoZXIuVWludDY0RmllbGQpIHJldHVybiBmYWxz
ZTsKLSAgICAgIGlmIChJbnQzMkZpZWxkICE9IG90aGVyLkludDMyRmllbGQpIHJldHVybiBmYWxz
ZTsKLSAgICAgIGlmIChVaW50MzJGaWVsZCAhPSBvdGhlci5VaW50MzJGaWVsZCkgcmV0dXJuIGZh
bHNlOwotICAgICAgaWYgKEJvb2xGaWVsZCAhPSBvdGhlci5Cb29sRmllbGQpIHJldHVybiBmYWxz
ZTsKLSAgICAgIGlmIChTdHJpbmdGaWVsZCAhPSBvdGhlci5TdHJpbmdGaWVsZCkgcmV0dXJuIGZh
bHNlOwotICAgICAgaWYgKEJ5dGVzRmllbGQgIT0gb3RoZXIuQnl0ZXNGaWVsZCkgcmV0dXJuIGZh
bHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKFZhbHVlRmllbGQsIG90aGVyLlZhbHVlRmll
bGQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAg
ICAgaWYgKGFueUZpZWxkXyAhPSBudWxsKSBoYXNoIF49IEFueUZpZWxkLkdldEhhc2hDb2RlKCk7
Ci0gICAgICBpZiAoYXBpRmllbGRfICE9IG51bGwpIGhhc2ggXj0gQXBpRmllbGQuR2V0SGFzaENv
ZGUoKTsKLSAgICAgIGlmIChkdXJhdGlvbkZpZWxkXyAhPSBudWxsKSBoYXNoIF49IER1cmF0aW9u
RmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChlbXB0eUZpZWxkXyAhPSBudWxsKSBoYXNo
IF49IEVtcHR5RmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChmaWVsZE1hc2tGaWVsZF8g
IT0gbnVsbCkgaGFzaCBePSBGaWVsZE1hc2tGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYg
KHNvdXJjZUNvbnRleHRGaWVsZF8gIT0gbnVsbCkgaGFzaCBePSBTb3VyY2VDb250ZXh0RmllbGQu
R2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChzdHJ1Y3RGaWVsZF8gIT0gbnVsbCkgaGFzaCBePSBT
dHJ1Y3RGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKHRpbWVzdGFtcEZpZWxkXyAhPSBu
dWxsKSBoYXNoIF49IFRpbWVzdGFtcEZpZWxkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAodHlw
ZUZpZWxkXyAhPSBudWxsKSBoYXNoIF49IFR5cGVGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAg
aWYgKGRvdWJsZUZpZWxkXyAhPSBudWxsKSBoYXNoIF49IERvdWJsZUZpZWxkLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICBpZiAoZmxvYXRGaWVsZF8gIT0gbnVsbCkgaGFzaCBePSBGbG9hdEZpZWxkLkdl
dEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoaW50NjRGaWVsZF8gIT0gbnVsbCkgaGFzaCBePSBJbnQ2
NEZpZWxkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAodWludDY0RmllbGRfICE9IG51bGwpIGhh
c2ggXj0gVWludDY0RmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChpbnQzMkZpZWxkXyAh
PSBudWxsKSBoYXNoIF49IEludDMyRmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmICh1aW50
MzJGaWVsZF8gIT0gbnVsbCkgaGFzaCBePSBVaW50MzJGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAg
ICAgaWYgKGJvb2xGaWVsZF8gIT0gbnVsbCkgaGFzaCBePSBCb29sRmllbGQuR2V0SGFzaENvZGUo
KTsKLSAgICAgIGlmIChzdHJpbmdGaWVsZF8gIT0gbnVsbCkgaGFzaCBePSBTdHJpbmdGaWVsZC5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKGJ5dGVzRmllbGRfICE9IG51bGwpIGhhc2ggXj0gQnl0
ZXNGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKHZhbHVlRmllbGRfICE9IG51bGwpIGhh
c2ggXj0gVmFsdWVGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAg
fQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVy
biBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0g
ICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0g
ICAgICBpZiAoYW55RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFn
KDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShBbnlGaWVsZCk7Ci0gICAgICB9Ci0g
ICAgICBpZiAoYXBpRmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFn
KDE4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShBcGlGaWVsZCk7Ci0gICAgICB9Ci0g
ICAgICBpZiAoZHVyYXRpb25GaWVsZF8gIT0gbnVsbCkgewotICAgICAgICBvdXRwdXQuV3JpdGVS
YXdUYWcoMjYpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKER1cmF0aW9uRmllbGQpOwot
ICAgICAgfQotICAgICAgaWYgKGVtcHR5RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0
LldyaXRlUmF3VGFnKDM0KTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShFbXB0eUZpZWxk
KTsKLSAgICAgIH0KLSAgICAgIGlmIChmaWVsZE1hc2tGaWVsZF8gIT0gbnVsbCkgewotICAgICAg
ICBvdXRwdXQuV3JpdGVSYXdUYWcoNDIpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKEZp
ZWxkTWFza0ZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmIChzb3VyY2VDb250ZXh0RmllbGRfICE9
IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDUwKTsKLSAgICAgICAgb3V0cHV0
LldyaXRlTWVzc2FnZShTb3VyY2VDb250ZXh0RmllbGQpOwotICAgICAgfQotICAgICAgaWYgKHN0
cnVjdEZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg1OCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoU3RydWN0RmllbGQpOwotICAgICAgfQotICAgICAg
aWYgKHRpbWVzdGFtcEZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1Rh
Zyg2Nik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoVGltZXN0YW1wRmllbGQpOwotICAg
ICAgfQotICAgICAgaWYgKHR5cGVGaWVsZF8gIT0gbnVsbCkgewotICAgICAgICBvdXRwdXQuV3Jp
dGVSYXdUYWcoNzQpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKFR5cGVGaWVsZCk7Ci0g
ICAgICB9Ci0gICAgICBpZiAoZG91YmxlRmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgX3Npbmds
ZV9kb3VibGVGaWVsZF9jb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1dCwgRG91YmxlRmllbGQp
OwotICAgICAgfQotICAgICAgaWYgKGZsb2F0RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgX3Np
bmdsZV9mbG9hdEZpZWxkX2NvZGVjLldyaXRlVGFnQW5kVmFsdWUob3V0cHV0LCBGbG9hdEZpZWxk
KTsKLSAgICAgIH0KLSAgICAgIGlmIChpbnQ2NEZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIF9z
aW5nbGVfaW50NjRGaWVsZF9jb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1dCwgSW50NjRGaWVs
ZCk7Ci0gICAgICB9Ci0gICAgICBpZiAodWludDY0RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAg
X3NpbmdsZV91aW50NjRGaWVsZF9jb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1dCwgVWludDY0
RmllbGQpOwotICAgICAgfQotICAgICAgaWYgKGludDMyRmllbGRfICE9IG51bGwpIHsKLSAgICAg
ICAgX3NpbmdsZV9pbnQzMkZpZWxkX2NvZGVjLldyaXRlVGFnQW5kVmFsdWUob3V0cHV0LCBJbnQz
MkZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmICh1aW50MzJGaWVsZF8gIT0gbnVsbCkgewotICAg
ICAgICBfc2luZ2xlX3VpbnQzMkZpZWxkX2NvZGVjLldyaXRlVGFnQW5kVmFsdWUob3V0cHV0LCBV
aW50MzJGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoYm9vbEZpZWxkXyAhPSBudWxsKSB7Ci0g
ICAgICAgIF9zaW5nbGVfYm9vbEZpZWxkX2NvZGVjLldyaXRlVGFnQW5kVmFsdWUob3V0cHV0LCBC
b29sRmllbGQpOwotICAgICAgfQotICAgICAgaWYgKHN0cmluZ0ZpZWxkXyAhPSBudWxsKSB7Ci0g
ICAgICAgIF9zaW5nbGVfc3RyaW5nRmllbGRfY29kZWMuV3JpdGVUYWdBbmRWYWx1ZShvdXRwdXQs
IFN0cmluZ0ZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmIChieXRlc0ZpZWxkXyAhPSBudWxsKSB7
Ci0gICAgICAgIF9zaW5nbGVfYnl0ZXNGaWVsZF9jb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1
dCwgQnl0ZXNGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAodmFsdWVGaWVsZF8gIT0gbnVsbCkg
ewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTU0LCAxKTsKLSAgICAgICAgb3V0cHV0Lldy
aXRlTWVzc2FnZShWYWx1ZUZpZWxkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50
IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoYW55Rmll
bGRfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFt
LkNvbXB1dGVNZXNzYWdlU2l6ZShBbnlGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoYXBpRmll
bGRfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFt
LkNvbXB1dGVNZXNzYWdlU2l6ZShBcGlGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoZHVyYXRp
b25GaWVsZF8gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRT
dHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKER1cmF0aW9uRmllbGQpOwotICAgICAgfQotICAgICAg
aWYgKGVtcHR5RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVk
T3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShFbXB0eUZpZWxkKTsKLSAgICAgIH0KLSAg
ICAgIGlmIChmaWVsZE1hc2tGaWVsZF8gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDEgKyBw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKEZpZWxkTWFza0ZpZWxkKTsK
LSAgICAgIH0KLSAgICAgIGlmIChzb3VyY2VDb250ZXh0RmllbGRfICE9IG51bGwpIHsKLSAgICAg
ICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShT
b3VyY2VDb250ZXh0RmllbGQpOwotICAgICAgfQotICAgICAgaWYgKHN0cnVjdEZpZWxkXyAhPSBu
dWxsKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRl
TWVzc2FnZVNpemUoU3RydWN0RmllbGQpOwotICAgICAgfQotICAgICAgaWYgKHRpbWVzdGFtcEZp
ZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVh
bS5Db21wdXRlTWVzc2FnZVNpemUoVGltZXN0YW1wRmllbGQpOwotICAgICAgfQotICAgICAgaWYg
KHR5cGVGaWVsZF8gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRw
dXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKFR5cGVGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBp
ZiAoZG91YmxlRmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSBfc2luZ2xlX2RvdWJs
ZUZpZWxkX2NvZGVjLkNhbGN1bGF0ZVNpemVXaXRoVGFnKERvdWJsZUZpZWxkKTsKLSAgICAgIH0K
LSAgICAgIGlmIChmbG9hdEZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gX3Npbmds
ZV9mbG9hdEZpZWxkX2NvZGVjLkNhbGN1bGF0ZVNpemVXaXRoVGFnKEZsb2F0RmllbGQpOwotICAg
ICAgfQotICAgICAgaWYgKGludDY0RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSBf
c2luZ2xlX2ludDY0RmllbGRfY29kZWMuQ2FsY3VsYXRlU2l6ZVdpdGhUYWcoSW50NjRGaWVsZCk7
Ci0gICAgICB9Ci0gICAgICBpZiAodWludDY0RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgc2l6
ZSArPSBfc2luZ2xlX3VpbnQ2NEZpZWxkX2NvZGVjLkNhbGN1bGF0ZVNpemVXaXRoVGFnKFVpbnQ2
NEZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmIChpbnQzMkZpZWxkXyAhPSBudWxsKSB7Ci0gICAg
ICAgIHNpemUgKz0gX3NpbmdsZV9pbnQzMkZpZWxkX2NvZGVjLkNhbGN1bGF0ZVNpemVXaXRoVGFn
KEludDMyRmllbGQpOwotICAgICAgfQotICAgICAgaWYgKHVpbnQzMkZpZWxkXyAhPSBudWxsKSB7
Ci0gICAgICAgIHNpemUgKz0gX3NpbmdsZV91aW50MzJGaWVsZF9jb2RlYy5DYWxjdWxhdGVTaXpl
V2l0aFRhZyhVaW50MzJGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoYm9vbEZpZWxkXyAhPSBu
dWxsKSB7Ci0gICAgICAgIHNpemUgKz0gX3NpbmdsZV9ib29sRmllbGRfY29kZWMuQ2FsY3VsYXRl
U2l6ZVdpdGhUYWcoQm9vbEZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmIChzdHJpbmdGaWVsZF8g
IT0gbnVsbCkgewotICAgICAgICBzaXplICs9IF9zaW5nbGVfc3RyaW5nRmllbGRfY29kZWMuQ2Fs
Y3VsYXRlU2l6ZVdpdGhUYWcoU3RyaW5nRmllbGQpOwotICAgICAgfQotICAgICAgaWYgKGJ5dGVz
RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSBfc2luZ2xlX2J5dGVzRmllbGRfY29k
ZWMuQ2FsY3VsYXRlU2l6ZVdpdGhUYWcoQnl0ZXNGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAo
dmFsdWVGaWVsZF8gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDIgKyBwYjo6Q29kZWRPdXRw
dXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKFZhbHVlRmllbGQpOwotICAgICAgfQotICAgICAg
cmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKFRlc3RXZWxs
S25vd25UeXBlcyBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLmFueUZpZWxkXyAhPSBudWxsKSB7Ci0g
ICAgICAgIGlmIChhbnlGaWVsZF8gPT0gbnVsbCkgewotICAgICAgICAgIGFueUZpZWxkXyA9IG5l
dyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnkoKTsKLSAgICAgICAg
fQotICAgICAgICBBbnlGaWVsZC5NZXJnZUZyb20ob3RoZXIuQW55RmllbGQpOwotICAgICAgfQot
ICAgICAgaWYgKG90aGVyLmFwaUZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChhcGlGaWVs
ZF8gPT0gbnVsbCkgewotICAgICAgICAgIGFwaUZpZWxkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGkoKTsKLSAgICAgICAgfQotICAgICAgICBBcGlGaWVs
ZC5NZXJnZUZyb20ob3RoZXIuQXBpRmllbGQpOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLmR1
cmF0aW9uRmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgaWYgKGR1cmF0aW9uRmllbGRfID09IG51
bGwpIHsKLSAgICAgICAgICBkdXJhdGlvbkZpZWxkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5XZWxsS25vd25UeXBlcy5EdXJhdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIER1cmF0
aW9uRmllbGQuTWVyZ2VGcm9tKG90aGVyLkR1cmF0aW9uRmllbGQpOwotICAgICAgfQotICAgICAg
aWYgKG90aGVyLmVtcHR5RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgaWYgKGVtcHR5RmllbGRf
ID09IG51bGwpIHsKLSAgICAgICAgICBlbXB0eUZpZWxkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5XZWxsS25vd25UeXBlcy5FbXB0eSgpOwotICAgICAgICB9Ci0gICAgICAgIEVtcHR5
RmllbGQuTWVyZ2VGcm9tKG90aGVyLkVtcHR5RmllbGQpOwotICAgICAgfQotICAgICAgaWYgKG90
aGVyLmZpZWxkTWFza0ZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChmaWVsZE1hc2tGaWVs
ZF8gPT0gbnVsbCkgewotICAgICAgICAgIGZpZWxkTWFza0ZpZWxkXyA9IG5ldyBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2soKTsKLSAgICAgICAgfQotICAg
ICAgICBGaWVsZE1hc2tGaWVsZC5NZXJnZUZyb20ob3RoZXIuRmllbGRNYXNrRmllbGQpOwotICAg
ICAgfQotICAgICAgaWYgKG90aGVyLnNvdXJjZUNvbnRleHRGaWVsZF8gIT0gbnVsbCkgewotICAg
ICAgICBpZiAoc291cmNlQ29udGV4dEZpZWxkXyA9PSBudWxsKSB7Ci0gICAgICAgICAgc291cmNl
Q29udGV4dEZpZWxkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5Tb3VyY2VDb250ZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgU291cmNlQ29udGV4dEZpZWxk
Lk1lcmdlRnJvbShvdGhlci5Tb3VyY2VDb250ZXh0RmllbGQpOwotICAgICAgfQotICAgICAgaWYg
KG90aGVyLnN0cnVjdEZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChzdHJ1Y3RGaWVsZF8g
PT0gbnVsbCkgewotICAgICAgICAgIHN0cnVjdEZpZWxkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5XZWxsS25vd25UeXBlcy5TdHJ1Y3QoKTsKLSAgICAgICAgfQotICAgICAgICBTdHJ1
Y3RGaWVsZC5NZXJnZUZyb20ob3RoZXIuU3RydWN0RmllbGQpOwotICAgICAgfQotICAgICAgaWYg
KG90aGVyLnRpbWVzdGFtcEZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmICh0aW1lc3RhbXBG
aWVsZF8gPT0gbnVsbCkgewotICAgICAgICAgIHRpbWVzdGFtcEZpZWxkXyA9IG5ldyBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UaW1lc3RhbXAoKTsKLSAgICAgICAgfQot
ICAgICAgICBUaW1lc3RhbXBGaWVsZC5NZXJnZUZyb20ob3RoZXIuVGltZXN0YW1wRmllbGQpOwot
ICAgICAgfQotICAgICAgaWYgKG90aGVyLnR5cGVGaWVsZF8gIT0gbnVsbCkgewotICAgICAgICBp
ZiAodHlwZUZpZWxkXyA9PSBudWxsKSB7Ci0gICAgICAgICAgdHlwZUZpZWxkXyA9IG5ldyBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UeXBlKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgVHlwZUZpZWxkLk1lcmdlRnJvbShvdGhlci5UeXBlRmllbGQpOwotICAgICAgfQotICAg
ICAgaWYgKG90aGVyLmRvdWJsZUZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChkb3VibGVG
aWVsZF8gPT0gbnVsbCB8fCBvdGhlci5Eb3VibGVGaWVsZCAhPSAwRCkgewotICAgICAgICAgIERv
dWJsZUZpZWxkID0gb3RoZXIuRG91YmxlRmllbGQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAg
IGlmIChvdGhlci5mbG9hdEZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChmbG9hdEZpZWxk
XyA9PSBudWxsIHx8IG90aGVyLkZsb2F0RmllbGQgIT0gMEYpIHsKLSAgICAgICAgICBGbG9hdEZp
ZWxkID0gb3RoZXIuRmxvYXRGaWVsZDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKG90
aGVyLmludDY0RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgaWYgKGludDY0RmllbGRfID09IG51
bGwgfHwgb3RoZXIuSW50NjRGaWVsZCAhPSAwTCkgewotICAgICAgICAgIEludDY0RmllbGQgPSBv
dGhlci5JbnQ2NEZpZWxkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIudWlu
dDY0RmllbGRfICE9IG51bGwpIHsKLSAgICAgICAgaWYgKHVpbnQ2NEZpZWxkXyA9PSBudWxsIHx8
IG90aGVyLlVpbnQ2NEZpZWxkICE9IDBVTCkgewotICAgICAgICAgIFVpbnQ2NEZpZWxkID0gb3Ro
ZXIuVWludDY0RmllbGQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5pbnQz
MkZpZWxkXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChpbnQzMkZpZWxkXyA9PSBudWxsIHx8IG90
aGVyLkludDMyRmllbGQgIT0gMCkgewotICAgICAgICAgIEludDMyRmllbGQgPSBvdGhlci5JbnQz
MkZpZWxkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIudWludDMyRmllbGRf
ICE9IG51bGwpIHsKLSAgICAgICAgaWYgKHVpbnQzMkZpZWxkXyA9PSBudWxsIHx8IG90aGVyLlVp
bnQzMkZpZWxkICE9IDApIHsKLSAgICAgICAgICBVaW50MzJGaWVsZCA9IG90aGVyLlVpbnQzMkZp
ZWxkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuYm9vbEZpZWxkXyAhPSBu
dWxsKSB7Ci0gICAgICAgIGlmIChib29sRmllbGRfID09IG51bGwgfHwgb3RoZXIuQm9vbEZpZWxk
ICE9IGZhbHNlKSB7Ci0gICAgICAgICAgQm9vbEZpZWxkID0gb3RoZXIuQm9vbEZpZWxkOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuc3RyaW5nRmllbGRfICE9IG51bGwpIHsK
LSAgICAgICAgaWYgKHN0cmluZ0ZpZWxkXyA9PSBudWxsIHx8IG90aGVyLlN0cmluZ0ZpZWxkICE9
ICIiKSB7Ci0gICAgICAgICAgU3RyaW5nRmllbGQgPSBvdGhlci5TdHJpbmdGaWVsZDsKLSAgICAg
ICAgfQotICAgICAgfQotICAgICAgaWYgKG90aGVyLmJ5dGVzRmllbGRfICE9IG51bGwpIHsKLSAg
ICAgICAgaWYgKGJ5dGVzRmllbGRfID09IG51bGwgfHwgb3RoZXIuQnl0ZXNGaWVsZCAhPSBwYjo6
Qnl0ZVN0cmluZy5FbXB0eSkgewotICAgICAgICAgIEJ5dGVzRmllbGQgPSBvdGhlci5CeXRlc0Zp
ZWxkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIudmFsdWVGaWVsZF8gIT0g
bnVsbCkgewotICAgICAgICBpZiAodmFsdWVGaWVsZF8gPT0gbnVsbCkgewotICAgICAgICAgIHZh
bHVlRmllbGRfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlZh
bHVlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgVmFsdWVGaWVsZC5NZXJnZUZyb20ob3RoZXIuVmFs
dWVGaWVsZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBi
OjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxl
ICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgaWYg
KGFueUZpZWxkXyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIGFueUZpZWxkXyA9IG5ldyBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnkoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKGFueUZpZWxkXyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxODogewotICAgICAgICAgICAgaWYg
KGFwaUZpZWxkXyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIGFwaUZpZWxkXyA9IG5ldyBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGkoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKGFwaUZpZWxkXyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNjogewotICAgICAgICAgICAgaWYg
KGR1cmF0aW9uRmllbGRfID09IG51bGwpIHsKLSAgICAgICAgICAgICAgZHVyYXRpb25GaWVsZF8g
PSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRHVyYXRpb24oKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKGR1cmF0aW9uRmll
bGRfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM0
OiB7Ci0gICAgICAgICAgICBpZiAoZW1wdHlGaWVsZF8gPT0gbnVsbCkgewotICAgICAgICAgICAg
ICBlbXB0eUZpZWxkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5FbXB0eSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2Uo
ZW1wdHlGaWVsZF8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGNhc2UgNDI6IHsKLSAgICAgICAgICAgIGlmIChmaWVsZE1hc2tGaWVsZF8gPT0gbnVsbCkgewot
ICAgICAgICAgICAgICBmaWVsZE1hc2tGaWVsZF8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuV2VsbEtub3duVHlwZXMuRmllbGRNYXNrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpbnB1dC5SZWFkTWVzc2FnZShmaWVsZE1hc2tGaWVsZF8pOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNTA6IHsKLSAgICAgICAgICAgIGlmIChzb3Vy
Y2VDb250ZXh0RmllbGRfID09IG51bGwpIHsKLSAgICAgICAgICAgICAgc291cmNlQ29udGV4dEZp
ZWxkXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5Tb3VyY2VD
b250ZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZShz
b3VyY2VDb250ZXh0RmllbGRfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDU4OiB7Ci0gICAgICAgICAgICBpZiAoc3RydWN0RmllbGRfID09IG51bGwp
IHsKLSAgICAgICAgICAgICAgc3RydWN0RmllbGRfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLldlbGxLbm93blR5cGVzLlN0cnVjdCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aW5wdXQuUmVhZE1lc3NhZ2Uoc3RydWN0RmllbGRfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDY2OiB7Ci0gICAgICAgICAgICBpZiAodGltZXN0YW1w
RmllbGRfID09IG51bGwpIHsKLSAgICAgICAgICAgICAgdGltZXN0YW1wRmllbGRfID0gbmV3IGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlRpbWVzdGFtcCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2UodGltZXN0YW1wRmllbGRfKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc0OiB7Ci0g
ICAgICAgICAgICBpZiAodHlwZUZpZWxkXyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIHR5cGVG
aWVsZF8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVHlwZSgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2UodHlwZUZpZWxk
Xyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA4Mjog
ewotICAgICAgICAgICAgZG91YmxlPyB2YWx1ZSA9IF9zaW5nbGVfZG91YmxlRmllbGRfY29kZWMu
UmVhZChpbnB1dCk7Ci0gICAgICAgICAgICBpZiAoZG91YmxlRmllbGRfID09IG51bGwgfHwgdmFs
dWUgIT0gMEQpIHsKLSAgICAgICAgICAgICAgRG91YmxlRmllbGQgPSB2YWx1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDkw
OiB7Ci0gICAgICAgICAgICBmbG9hdD8gdmFsdWUgPSBfc2luZ2xlX2Zsb2F0RmllbGRfY29kZWMu
UmVhZChpbnB1dCk7Ci0gICAgICAgICAgICBpZiAoZmxvYXRGaWVsZF8gPT0gbnVsbCB8fCB2YWx1
ZSAhPSAwRikgewotICAgICAgICAgICAgICBGbG9hdEZpZWxkID0gdmFsdWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA5ODog
ewotICAgICAgICAgICAgbG9uZz8gdmFsdWUgPSBfc2luZ2xlX2ludDY0RmllbGRfY29kZWMuUmVh
ZChpbnB1dCk7Ci0gICAgICAgICAgICBpZiAoaW50NjRGaWVsZF8gPT0gbnVsbCB8fCB2YWx1ZSAh
PSAwTCkgewotICAgICAgICAgICAgICBJbnQ2NEZpZWxkID0gdmFsdWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxMDY6IHsK
LSAgICAgICAgICAgIHVsb25nPyB2YWx1ZSA9IF9zaW5nbGVfdWludDY0RmllbGRfY29kZWMuUmVh
ZChpbnB1dCk7Ci0gICAgICAgICAgICBpZiAodWludDY0RmllbGRfID09IG51bGwgfHwgdmFsdWUg
IT0gMFVMKSB7Ci0gICAgICAgICAgICAgIFVpbnQ2NEZpZWxkID0gdmFsdWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxMTQ6
IHsKLSAgICAgICAgICAgIGludD8gdmFsdWUgPSBfc2luZ2xlX2ludDMyRmllbGRfY29kZWMuUmVh
ZChpbnB1dCk7Ci0gICAgICAgICAgICBpZiAoaW50MzJGaWVsZF8gPT0gbnVsbCB8fCB2YWx1ZSAh
PSAwKSB7Ci0gICAgICAgICAgICAgIEludDMyRmllbGQgPSB2YWx1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDEyMjogewot
ICAgICAgICAgICAgdWludD8gdmFsdWUgPSBfc2luZ2xlX3VpbnQzMkZpZWxkX2NvZGVjLlJlYWQo
aW5wdXQpOwotICAgICAgICAgICAgaWYgKHVpbnQzMkZpZWxkXyA9PSBudWxsIHx8IHZhbHVlICE9
IDApIHsKLSAgICAgICAgICAgICAgVWludDMyRmllbGQgPSB2YWx1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDEzMDogewot
ICAgICAgICAgICAgYm9vbD8gdmFsdWUgPSBfc2luZ2xlX2Jvb2xGaWVsZF9jb2RlYy5SZWFkKGlu
cHV0KTsKLSAgICAgICAgICAgIGlmIChib29sRmllbGRfID09IG51bGwgfHwgdmFsdWUgIT0gZmFs
c2UpIHsKLSAgICAgICAgICAgICAgQm9vbEZpZWxkID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxMzg6IHsKLSAg
ICAgICAgICAgIHN0cmluZyB2YWx1ZSA9IF9zaW5nbGVfc3RyaW5nRmllbGRfY29kZWMuUmVhZChp
bnB1dCk7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nRmllbGRfID09IG51bGwgfHwgdmFsdWUgIT0g
IiIpIHsKLSAgICAgICAgICAgICAgU3RyaW5nRmllbGQgPSB2YWx1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE0Njogewot
ICAgICAgICAgICAgcGI6OkJ5dGVTdHJpbmcgdmFsdWUgPSBfc2luZ2xlX2J5dGVzRmllbGRfY29k
ZWMuUmVhZChpbnB1dCk7Ci0gICAgICAgICAgICBpZiAoYnl0ZXNGaWVsZF8gPT0gbnVsbCB8fCB2
YWx1ZSAhPSBwYjo6Qnl0ZVN0cmluZy5FbXB0eSkgewotICAgICAgICAgICAgICBCeXRlc0ZpZWxk
ID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgY2FzZSAxNTQ6IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZUZpZWxkXyA9PSBu
dWxsKSB7Ci0gICAgICAgICAgICAgIHZhbHVlRmllbGRfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLlZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpbnB1dC5SZWFkTWVzc2FnZSh2YWx1ZUZpZWxkXyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8c3Vt
bWFyeT4KLSAgLy8vICBBIHJlcGVhdGVkIGZpZWxkIGZvciBlYWNoIHdlbGwta25vd24gdHlwZS4K
LSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2Vy
Tm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFJl
cGVhdGVkV2VsbEtub3duVHlwZXMgOiBwYjo6SU1lc3NhZ2U8UmVwZWF0ZWRXZWxsS25vd25UeXBl
cz4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFJlcGVh
dGVkV2VsbEtub3duVHlwZXM+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8UmVwZWF0
ZWRXZWxsS25vd25UeXBlcz4oKCkgPT4gbmV3IFJlcGVhdGVkV2VsbEtub3duVHlwZXMoKSk7Ci0g
ICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxSZXBlYXRlZFdlbGxLbm93blR5cGVz
PiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGlj
IHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4g
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVzdFdlbGxLbm93blR5cGVz
UmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1sxXTsgfQotICAgIH0KLQotICAgIHBi
cjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0
IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgUmVwZWF0ZWRXZWxs
S25vd25UeXBlcygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFy
dGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgUmVwZWF0ZWRXZWxsS25v
d25UeXBlcyhSZXBlYXRlZFdlbGxLbm93blR5cGVzIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBh
bnlGaWVsZF8gPSBvdGhlci5hbnlGaWVsZF8uQ2xvbmUoKTsKLSAgICAgIGFwaUZpZWxkXyA9IG90
aGVyLmFwaUZpZWxkXy5DbG9uZSgpOwotICAgICAgZHVyYXRpb25GaWVsZF8gPSBvdGhlci5kdXJh
dGlvbkZpZWxkXy5DbG9uZSgpOwotICAgICAgZW1wdHlGaWVsZF8gPSBvdGhlci5lbXB0eUZpZWxk
Xy5DbG9uZSgpOwotICAgICAgZmllbGRNYXNrRmllbGRfID0gb3RoZXIuZmllbGRNYXNrRmllbGRf
LkNsb25lKCk7Ci0gICAgICBzb3VyY2VDb250ZXh0RmllbGRfID0gb3RoZXIuc291cmNlQ29udGV4
dEZpZWxkXy5DbG9uZSgpOwotICAgICAgc3RydWN0RmllbGRfID0gb3RoZXIuc3RydWN0RmllbGRf
LkNsb25lKCk7Ci0gICAgICB0aW1lc3RhbXBGaWVsZF8gPSBvdGhlci50aW1lc3RhbXBGaWVsZF8u
Q2xvbmUoKTsKLSAgICAgIHR5cGVGaWVsZF8gPSBvdGhlci50eXBlRmllbGRfLkNsb25lKCk7Ci0g
ICAgICBkb3VibGVGaWVsZF8gPSBvdGhlci5kb3VibGVGaWVsZF8uQ2xvbmUoKTsKLSAgICAgIGZs
b2F0RmllbGRfID0gb3RoZXIuZmxvYXRGaWVsZF8uQ2xvbmUoKTsKLSAgICAgIGludDY0RmllbGRf
ID0gb3RoZXIuaW50NjRGaWVsZF8uQ2xvbmUoKTsKLSAgICAgIHVpbnQ2NEZpZWxkXyA9IG90aGVy
LnVpbnQ2NEZpZWxkXy5DbG9uZSgpOwotICAgICAgaW50MzJGaWVsZF8gPSBvdGhlci5pbnQzMkZp
ZWxkXy5DbG9uZSgpOwotICAgICAgdWludDMyRmllbGRfID0gb3RoZXIudWludDMyRmllbGRfLkNs
b25lKCk7Ci0gICAgICBib29sRmllbGRfID0gb3RoZXIuYm9vbEZpZWxkXy5DbG9uZSgpOwotICAg
ICAgc3RyaW5nRmllbGRfID0gb3RoZXIuc3RyaW5nRmllbGRfLkNsb25lKCk7Ci0gICAgICBieXRl
c0ZpZWxkXyA9IG90aGVyLmJ5dGVzRmllbGRfLkNsb25lKCk7Ci0gICAgfQotCi0gICAgcHVibGlj
IFJlcGVhdGVkV2VsbEtub3duVHlwZXMgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IFJlcGVh
dGVkV2VsbEtub3duVHlwZXModGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJhbnlfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
Y29uc3QgaW50IEFueUZpZWxkRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIHJl
YWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5
cGVzLkFueT4gX3JlcGVhdGVkX2FueUZpZWxkX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29k
ZWMuRm9yTWVzc2FnZSgxMCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
QW55LlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQW55PiBhbnlGaWVsZF8gPSBuZXcg
cGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVz
LkFueT4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLkFueT4gQW55RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJu
IGFueUZpZWxkXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAiYXBpX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBB
cGlGaWVsZEZpZWxkTnVtYmVyID0gMjsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6
RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGk+IF9y
ZXBlYXRlZF9hcGlGaWVsZF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3Nh
Z2UoMTgsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFwaS5QYXJzZXIp
OwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFwaT4gYXBpRmllbGRfID0gbmV3IHBiYzo6UmVwZWF0
ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGk+KCk7Ci0g
ICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5BcGk+IEFwaUZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBhcGlGaWVsZF87
IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImR1cmF0
aW9uX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBEdXJhdGlv
bkZpZWxkRmllbGROdW1iZXIgPSAzOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpG
aWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9u
PiBfcmVwZWF0ZWRfZHVyYXRpb25GaWVsZF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVj
LkZvck1lc3NhZ2UoMjYsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1
cmF0aW9uLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRHVyYXRpb24+IGR1cmF0aW9u
RmllbGRfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5X
ZWxsS25vd25UeXBlcy5EdXJhdGlvbj4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxk
PGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9uPiBEdXJhdGlv
bkZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBkdXJhdGlvbkZpZWxkXzsgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZW1wdHlfZmllbGQiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEVtcHR5RmllbGRGaWVsZE51bWJlciA9
IDQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRW1wdHk+IF9yZXBlYXRlZF9lbXB0eUZpZWxk
X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgzNCwgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRW1wdHkuUGFyc2VyKTsKLSAgICBwcml2YXRl
IHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5FbXB0eT4gZW1wdHlGaWVsZF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkVtcHR5PigpOwotICAgIHB1Ymxp
YyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMuRW1wdHk+IEVtcHR5RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIGVtcHR5RmllbGRfOyB9
Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJmaWVsZF9t
YXNrX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBGaWVsZE1h
c2tGaWVsZEZpZWxkTnVtYmVyID0gNTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6
RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1h
c2s+IF9yZXBlYXRlZF9maWVsZE1hc2tGaWVsZF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENv
ZGVjLkZvck1lc3NhZ2UoNDIsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVz
LkZpZWxkTWFzay5QYXJzZXIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZp
ZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkZpZWxkTWFzaz4gZmll
bGRNYXNrRmllbGRfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2s+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0
ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2s+
IEZpZWxkTWFza0ZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBmaWVsZE1hc2tGaWVsZF87IH0K
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInNvdXJjZV9j
b250ZXh0X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTb3Vy
Y2VDb250ZXh0RmllbGRGaWVsZE51bWJlciA9IDY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9u
bHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
U291cmNlQ29udGV4dD4gX3JlcGVhdGVkX3NvdXJjZUNvbnRleHRGaWVsZF9jb2RlYwotICAgICAg
ICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoNTAsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LldlbGxLbm93blR5cGVzLlNvdXJjZUNvbnRleHQuUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRv
bmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcy5Tb3VyY2VDb250ZXh0PiBzb3VyY2VDb250ZXh0RmllbGRfID0gbmV3IHBiYzo6UmVwZWF0
ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5Tb3VyY2VDb250
ZXh0PigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuU291cmNlQ29udGV4dD4gU291cmNlQ29udGV4dEZpZWxkIHsK
LSAgICAgIGdldCB7IHJldHVybiBzb3VyY2VDb250ZXh0RmllbGRfOyB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzdHJ1Y3RfZmllbGQiIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFN0cnVjdEZpZWxkRmllbGROdW1iZXIgPSA3
OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cnVjdD4gX3JlcGVhdGVkX3N0cnVjdEZpZWxk
X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSg1OCwgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU3RydWN0LlBhcnNlcik7Ci0gICAgcHJpdmF0
ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2Vs
bEtub3duVHlwZXMuU3RydWN0PiBzdHJ1Y3RGaWVsZF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxk
PGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cnVjdD4oKTsKLSAgICBw
dWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93
blR5cGVzLlN0cnVjdD4gU3RydWN0RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIHN0cnVjdEZp
ZWxkXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAi
dGltZXN0YW1wX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBU
aW1lc3RhbXBGaWVsZEZpZWxkTnVtYmVyID0gODsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25s
eSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5U
aW1lc3RhbXA+IF9yZXBlYXRlZF90aW1lc3RhbXBGaWVsZF9jb2RlYwotICAgICAgICA9IHBiOjpG
aWVsZENvZGVjLkZvck1lc3NhZ2UoNjYsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93
blR5cGVzLlRpbWVzdGFtcC5QYXJzZXIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBl
YXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlRpbWVzdGFt
cD4gdGltZXN0YW1wRmllbGRfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UaW1lc3RhbXA+KCk7Ci0gICAgcHVibGljIHBiYzo6
UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UaW1l
c3RhbXA+IFRpbWVzdGFtcEZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiB0aW1lc3RhbXBGaWVs
ZF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInR5
cGVfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFR5cGVGaWVs
ZEZpZWxkTnVtYmVyID0gOTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRD
b2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UeXBlPiBfcmVwZWF0
ZWRfdHlwZUZpZWxkX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSg3
NCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVHlwZS5QYXJzZXIpOwot
ICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLlR5cGU+IHR5cGVGaWVsZF8gPSBuZXcgcGJjOjpSZXBlYXRl
ZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlR5cGU+KCk7Ci0g
ICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5UeXBlPiBUeXBlRmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIHR5cGVGaWVs
ZF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImRv
dWJsZV9maWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRG91Ymxl
RmllbGRGaWVsZE51bWJlciA9IDEwOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpG
aWVsZENvZGVjPGRvdWJsZT8+IF9yZXBlYXRlZF9kb3VibGVGaWVsZF9jb2RlYwotICAgICAgICA9
IHBiOjpGaWVsZENvZGVjLkZvclN0cnVjdFdyYXBwZXI8ZG91YmxlPig4Mik7Ci0gICAgcHJpdmF0
ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8ZG91YmxlPz4gZG91YmxlRmllbGRfID0gbmV3
IHBiYzo6UmVwZWF0ZWRGaWVsZDxkb3VibGU/PigpOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAv
Ly8gIFRoZXNlIGRvbid0IGFjdHVhbGx5IG1ha2UgYSBsb3Qgb2Ygc2Vuc2UsIGJ1dCB0aGV5J3Jl
IG5vdCBwcm9oaWJpdGVkLi4uCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgcGJjOjpS
ZXBlYXRlZEZpZWxkPGRvdWJsZT8+IERvdWJsZUZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBk
b3VibGVGaWVsZF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgImZsb2F0X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGlu
dCBGbG9hdEZpZWxkRmllbGROdW1iZXIgPSAxMTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25s
eSBwYjo6RmllbGRDb2RlYzxmbG9hdD8+IF9yZXBlYXRlZF9mbG9hdEZpZWxkX2NvZGVjCi0gICAg
ICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RydWN0V3JhcHBlcjxmbG9hdD4oOTApOwotICAgIHBy
aXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGZsb2F0Pz4gZmxvYXRGaWVsZF8gPSBu
ZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGZsb2F0Pz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRl
ZEZpZWxkPGZsb2F0Pz4gRmxvYXRGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gZmxvYXRGaWVs
ZF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImlu
dDY0X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBJbnQ2NEZp
ZWxkRmllbGROdW1iZXIgPSAxMjsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6Rmll
bGRDb2RlYzxsb25nPz4gX3JlcGVhdGVkX2ludDY0RmllbGRfY29kZWMKLSAgICAgICAgPSBwYjo6
RmllbGRDb2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPGxvbmc+KDk4KTsKLSAgICBwcml2YXRlIHJlYWRv
bmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxsb25nPz4gaW50NjRGaWVsZF8gPSBuZXcgcGJjOjpSZXBl
YXRlZEZpZWxkPGxvbmc/PigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8bG9uZz8+
IEludDY0RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIGludDY0RmllbGRfOyB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ1aW50NjRfZmllbGQiIGZp
ZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFVpbnQ2NEZpZWxkRmllbGROdW1i
ZXIgPSAxMzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1bG9u
Zz8+IF9yZXBlYXRlZF91aW50NjRGaWVsZF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVj
LkZvclN0cnVjdFdyYXBwZXI8dWxvbmc+KDEwNik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6
OlJlcGVhdGVkRmllbGQ8dWxvbmc/PiB1aW50NjRGaWVsZF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZp
ZWxkPHVsb25nPz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVsb25nPz4gVWlu
dDY0RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIHVpbnQ2NEZpZWxkXzsgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiaW50MzJfZmllbGQiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEludDMyRmllbGRGaWVsZE51bWJlciA9
IDE0OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGludD8+IF9y
ZXBlYXRlZF9pbnQzMkZpZWxkX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3Ry
dWN0V3JhcHBlcjxpbnQ+KDExNCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVk
RmllbGQ8aW50Pz4gaW50MzJGaWVsZF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGludD8+KCk7
Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ/PiBJbnQzMkZpZWxkIHsKLSAgICAg
IGdldCB7IHJldHVybiBpbnQzMkZpZWxkXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAidWludDMyX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBVaW50MzJGaWVsZEZpZWxkTnVtYmVyID0gMTU7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8dWludD8+IF9yZXBlYXRlZF91aW50MzJG
aWVsZF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvclN0cnVjdFdyYXBwZXI8dWlu
dD4oMTIyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDx1aW50Pz4g
dWludDMyRmllbGRfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDx1aW50Pz4oKTsKLSAgICBwdWJs
aWMgcGJjOjpSZXBlYXRlZEZpZWxkPHVpbnQ/PiBVaW50MzJGaWVsZCB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gdWludDMyRmllbGRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJib29sX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBCb29sRmllbGRGaWVsZE51bWJlciA9IDE2OwotICAgIHByaXZhdGUgc3RhdGljIHJl
YWRvbmx5IHBiOjpGaWVsZENvZGVjPGJvb2w/PiBfcmVwZWF0ZWRfYm9vbEZpZWxkX2NvZGVjCi0g
ICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RydWN0V3JhcHBlcjxib29sPigxMzApOwotICAg
IHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGJvb2w/PiBib29sRmllbGRfID0g
bmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxib29sPz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRl
ZEZpZWxkPGJvb2w/PiBCb29sRmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIGJvb2xGaWVsZF87
IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInN0cmlu
Z19maWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU3RyaW5nRmll
bGRGaWVsZE51bWJlciA9IDE3OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVs
ZENvZGVjPHN0cmluZz4gX3JlcGVhdGVkX3N0cmluZ0ZpZWxkX2NvZGVjCi0gICAgICAgID0gcGI6
OkZpZWxkQ29kZWMuRm9yQ2xhc3NXcmFwcGVyPHN0cmluZz4oMTM4KTsKLSAgICBwcml2YXRlIHJl
YWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+IHN0cmluZ0ZpZWxkXyA9IG5ldyBwYmM6
OlJlcGVhdGVkRmllbGQ8c3RyaW5nPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8
c3RyaW5nPiBTdHJpbmdGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gc3RyaW5nRmllbGRfOyB9
Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJieXRlc19m
aWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQnl0ZXNGaWVsZEZp
ZWxkTnVtYmVyID0gMTg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29k
ZWM8cGI6OkJ5dGVTdHJpbmc+IF9yZXBlYXRlZF9ieXRlc0ZpZWxkX2NvZGVjCi0gICAgICAgID0g
cGI6OkZpZWxkQ29kZWMuRm9yQ2xhc3NXcmFwcGVyPHBiOjpCeXRlU3RyaW5nPigxNDYpOwotICAg
IHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPHBiOjpCeXRlU3RyaW5nPiBieXRl
c0ZpZWxkXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8cGI6OkJ5dGVTdHJpbmc+KCk7Ci0gICAg
cHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxwYjo6Qnl0ZVN0cmluZz4gQnl0ZXNGaWVsZCB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gYnl0ZXNGaWVsZF87IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3Zl
cnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90
aGVyIGFzIFJlcGVhdGVkV2VsbEtub3duVHlwZXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29s
IEVxdWFscyhSZXBlYXRlZFdlbGxLbm93blR5cGVzIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJl
bmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9
Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmKCFhbnlGaWVsZF8uRXF1YWxzKG90aGVyLmFueUZp
ZWxkXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFhcGlGaWVsZF8uRXF1YWxzKG90aGVyLmFw
aUZpZWxkXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFkdXJhdGlvbkZpZWxkXy5FcXVhbHMo
b3RoZXIuZHVyYXRpb25GaWVsZF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighZW1wdHlGaWVs
ZF8uRXF1YWxzKG90aGVyLmVtcHR5RmllbGRfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIWZp
ZWxkTWFza0ZpZWxkXy5FcXVhbHMob3RoZXIuZmllbGRNYXNrRmllbGRfKSkgcmV0dXJuIGZhbHNl
OwotICAgICAgaWYoIXNvdXJjZUNvbnRleHRGaWVsZF8uRXF1YWxzKG90aGVyLnNvdXJjZUNvbnRl
eHRGaWVsZF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighc3RydWN0RmllbGRfLkVxdWFscyhv
dGhlci5zdHJ1Y3RGaWVsZF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighdGltZXN0YW1wRmll
bGRfLkVxdWFscyhvdGhlci50aW1lc3RhbXBGaWVsZF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZighdHlwZUZpZWxkXy5FcXVhbHMob3RoZXIudHlwZUZpZWxkXykpIHJldHVybiBmYWxzZTsKLSAg
ICAgIGlmKCFkb3VibGVGaWVsZF8uRXF1YWxzKG90aGVyLmRvdWJsZUZpZWxkXykpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmKCFmbG9hdEZpZWxkXy5FcXVhbHMob3RoZXIuZmxvYXRGaWVsZF8pKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICBpZighaW50NjRGaWVsZF8uRXF1YWxzKG90aGVyLmludDY0Rmll
bGRfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXVpbnQ2NEZpZWxkXy5FcXVhbHMob3RoZXIu
dWludDY0RmllbGRfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIWludDMyRmllbGRfLkVxdWFs
cyhvdGhlci5pbnQzMkZpZWxkXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCF1aW50MzJGaWVs
ZF8uRXF1YWxzKG90aGVyLnVpbnQzMkZpZWxkXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFi
b29sRmllbGRfLkVxdWFscyhvdGhlci5ib29sRmllbGRfKSkgcmV0dXJuIGZhbHNlOwotICAgICAg
aWYoIXN0cmluZ0ZpZWxkXy5FcXVhbHMob3RoZXIuc3RyaW5nRmllbGRfKSkgcmV0dXJuIGZhbHNl
OwotICAgICAgaWYoIWJ5dGVzRmllbGRfLkVxdWFscyhvdGhlci5ieXRlc0ZpZWxkXykpIHJldHVy
biBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlk
ZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBoYXNoIF49
IGFueUZpZWxkXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBhcGlGaWVsZF8uR2V0SGFz
aENvZGUoKTsKLSAgICAgIGhhc2ggXj0gZHVyYXRpb25GaWVsZF8uR2V0SGFzaENvZGUoKTsKLSAg
ICAgIGhhc2ggXj0gZW1wdHlGaWVsZF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gZmll
bGRNYXNrRmllbGRfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHNvdXJjZUNvbnRleHRG
aWVsZF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gc3RydWN0RmllbGRfLkdldEhhc2hD
b2RlKCk7Ci0gICAgICBoYXNoIF49IHRpbWVzdGFtcEZpZWxkXy5HZXRIYXNoQ29kZSgpOwotICAg
ICAgaGFzaCBePSB0eXBlRmllbGRfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IGRvdWJs
ZUZpZWxkXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBmbG9hdEZpZWxkXy5HZXRIYXNo
Q29kZSgpOwotICAgICAgaGFzaCBePSBpbnQ2NEZpZWxkXy5HZXRIYXNoQ29kZSgpOwotICAgICAg
aGFzaCBePSB1aW50NjRGaWVsZF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gaW50MzJG
aWVsZF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gdWludDMyRmllbGRfLkdldEhhc2hD
b2RlKCk7Ci0gICAgICBoYXNoIF49IGJvb2xGaWVsZF8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhh
c2ggXj0gc3RyaW5nRmllbGRfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IGJ5dGVzRmll
bGRfLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9y
bWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGFueUZpZWxk
Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX2FueUZpZWxkX2NvZGVjKTsKLSAgICAgIGFwaUZp
ZWxkXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX2FwaUZpZWxkX2NvZGVjKTsKLSAgICAgIGR1
cmF0aW9uRmllbGRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfZHVyYXRpb25GaWVsZF9jb2Rl
Yyk7Ci0gICAgICBlbXB0eUZpZWxkXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX2VtcHR5Rmll
bGRfY29kZWMpOwotICAgICAgZmllbGRNYXNrRmllbGRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0
ZWRfZmllbGRNYXNrRmllbGRfY29kZWMpOwotICAgICAgc291cmNlQ29udGV4dEZpZWxkXy5Xcml0
ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3NvdXJjZUNvbnRleHRGaWVsZF9jb2RlYyk7Ci0gICAgICBz
dHJ1Y3RGaWVsZF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9zdHJ1Y3RGaWVsZF9jb2RlYyk7
Ci0gICAgICB0aW1lc3RhbXBGaWVsZF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF90aW1lc3Rh
bXBGaWVsZF9jb2RlYyk7Ci0gICAgICB0eXBlRmllbGRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0
ZWRfdHlwZUZpZWxkX2NvZGVjKTsKLSAgICAgIGRvdWJsZUZpZWxkXy5Xcml0ZVRvKG91dHB1dCwg
X3JlcGVhdGVkX2RvdWJsZUZpZWxkX2NvZGVjKTsKLSAgICAgIGZsb2F0RmllbGRfLldyaXRlVG8o
b3V0cHV0LCBfcmVwZWF0ZWRfZmxvYXRGaWVsZF9jb2RlYyk7Ci0gICAgICBpbnQ2NEZpZWxkXy5X
cml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX2ludDY0RmllbGRfY29kZWMpOwotICAgICAgdWludDY0
RmllbGRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfdWludDY0RmllbGRfY29kZWMpOwotICAg
ICAgaW50MzJGaWVsZF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9pbnQzMkZpZWxkX2NvZGVj
KTsKLSAgICAgIHVpbnQzMkZpZWxkXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3VpbnQzMkZp
ZWxkX2NvZGVjKTsKLSAgICAgIGJvb2xGaWVsZF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9i
b29sRmllbGRfY29kZWMpOwotICAgICAgc3RyaW5nRmllbGRfLldyaXRlVG8ob3V0cHV0LCBfcmVw
ZWF0ZWRfc3RyaW5nRmllbGRfY29kZWMpOwotICAgICAgYnl0ZXNGaWVsZF8uV3JpdGVUbyhvdXRw
dXQsIF9yZXBlYXRlZF9ieXRlc0ZpZWxkX2NvZGVjKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50
IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBzaXplICs9IGFu
eUZpZWxkXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9hbnlGaWVsZF9jb2RlYyk7Ci0gICAgICBz
aXplICs9IGFwaUZpZWxkXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9hcGlGaWVsZF9jb2RlYyk7
Ci0gICAgICBzaXplICs9IGR1cmF0aW9uRmllbGRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX2R1
cmF0aW9uRmllbGRfY29kZWMpOwotICAgICAgc2l6ZSArPSBlbXB0eUZpZWxkXy5DYWxjdWxhdGVT
aXplKF9yZXBlYXRlZF9lbXB0eUZpZWxkX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gZmllbGRNYXNr
RmllbGRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX2ZpZWxkTWFza0ZpZWxkX2NvZGVjKTsKLSAg
ICAgIHNpemUgKz0gc291cmNlQ29udGV4dEZpZWxkXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9z
b3VyY2VDb250ZXh0RmllbGRfY29kZWMpOwotICAgICAgc2l6ZSArPSBzdHJ1Y3RGaWVsZF8uQ2Fs
Y3VsYXRlU2l6ZShfcmVwZWF0ZWRfc3RydWN0RmllbGRfY29kZWMpOwotICAgICAgc2l6ZSArPSB0
aW1lc3RhbXBGaWVsZF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfdGltZXN0YW1wRmllbGRfY29k
ZWMpOwotICAgICAgc2l6ZSArPSB0eXBlRmllbGRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3R5
cGVGaWVsZF9jb2RlYyk7Ci0gICAgICBzaXplICs9IGRvdWJsZUZpZWxkXy5DYWxjdWxhdGVTaXpl
KF9yZXBlYXRlZF9kb3VibGVGaWVsZF9jb2RlYyk7Ci0gICAgICBzaXplICs9IGZsb2F0RmllbGRf
LkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX2Zsb2F0RmllbGRfY29kZWMpOwotICAgICAgc2l6ZSAr
PSBpbnQ2NEZpZWxkXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9pbnQ2NEZpZWxkX2NvZGVjKTsK
LSAgICAgIHNpemUgKz0gdWludDY0RmllbGRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3VpbnQ2
NEZpZWxkX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gaW50MzJGaWVsZF8uQ2FsY3VsYXRlU2l6ZShf
cmVwZWF0ZWRfaW50MzJGaWVsZF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHVpbnQzMkZpZWxkXy5D
YWxjdWxhdGVTaXplKF9yZXBlYXRlZF91aW50MzJGaWVsZF9jb2RlYyk7Ci0gICAgICBzaXplICs9
IGJvb2xGaWVsZF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfYm9vbEZpZWxkX2NvZGVjKTsKLSAg
ICAgIHNpemUgKz0gc3RyaW5nRmllbGRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3N0cmluZ0Zp
ZWxkX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gYnl0ZXNGaWVsZF8uQ2FsY3VsYXRlU2l6ZShfcmVw
ZWF0ZWRfYnl0ZXNGaWVsZF9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oUmVwZWF0ZWRXZWxsS25vd25UeXBlcyBvdGhlcikgewot
ICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAg
ICAgYW55RmllbGRfLkFkZChvdGhlci5hbnlGaWVsZF8pOwotICAgICAgYXBpRmllbGRfLkFkZChv
dGhlci5hcGlGaWVsZF8pOwotICAgICAgZHVyYXRpb25GaWVsZF8uQWRkKG90aGVyLmR1cmF0aW9u
RmllbGRfKTsKLSAgICAgIGVtcHR5RmllbGRfLkFkZChvdGhlci5lbXB0eUZpZWxkXyk7Ci0gICAg
ICBmaWVsZE1hc2tGaWVsZF8uQWRkKG90aGVyLmZpZWxkTWFza0ZpZWxkXyk7Ci0gICAgICBzb3Vy
Y2VDb250ZXh0RmllbGRfLkFkZChvdGhlci5zb3VyY2VDb250ZXh0RmllbGRfKTsKLSAgICAgIHN0
cnVjdEZpZWxkXy5BZGQob3RoZXIuc3RydWN0RmllbGRfKTsKLSAgICAgIHRpbWVzdGFtcEZpZWxk
Xy5BZGQob3RoZXIudGltZXN0YW1wRmllbGRfKTsKLSAgICAgIHR5cGVGaWVsZF8uQWRkKG90aGVy
LnR5cGVGaWVsZF8pOwotICAgICAgZG91YmxlRmllbGRfLkFkZChvdGhlci5kb3VibGVGaWVsZF8p
OwotICAgICAgZmxvYXRGaWVsZF8uQWRkKG90aGVyLmZsb2F0RmllbGRfKTsKLSAgICAgIGludDY0
RmllbGRfLkFkZChvdGhlci5pbnQ2NEZpZWxkXyk7Ci0gICAgICB1aW50NjRGaWVsZF8uQWRkKG90
aGVyLnVpbnQ2NEZpZWxkXyk7Ci0gICAgICBpbnQzMkZpZWxkXy5BZGQob3RoZXIuaW50MzJGaWVs
ZF8pOwotICAgICAgdWludDMyRmllbGRfLkFkZChvdGhlci51aW50MzJGaWVsZF8pOwotICAgICAg
Ym9vbEZpZWxkXy5BZGQob3RoZXIuYm9vbEZpZWxkXyk7Ci0gICAgICBzdHJpbmdGaWVsZF8uQWRk
KG90aGVyLnN0cmluZ0ZpZWxkXyk7Ci0gICAgICBieXRlc0ZpZWxkXy5BZGQob3RoZXIuYnl0ZXNG
aWVsZF8pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1
dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlu
cHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIGFueUZpZWxkXy5BZGRF
bnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX2FueUZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBh
cGlGaWVsZF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9hcGlGaWVsZF9jb2RlYyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNjogewot
ICAgICAgICAgICAgZHVyYXRpb25GaWVsZF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRl
ZF9kdXJhdGlvbkZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDM0OiB7Ci0gICAgICAgICAgICBlbXB0eUZpZWxkXy5BZGRFbnRyaWVz
RnJvbShpbnB1dCwgX3JlcGVhdGVkX2VtcHR5RmllbGRfY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDI6IHsKLSAgICAgICAgICAgIGZpZWxk
TWFza0ZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX2ZpZWxkTWFza0ZpZWxk
X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl
IDUwOiB7Ci0gICAgICAgICAgICBzb3VyY2VDb250ZXh0RmllbGRfLkFkZEVudHJpZXNGcm9tKGlu
cHV0LCBfcmVwZWF0ZWRfc291cmNlQ29udGV4dEZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDU4OiB7Ci0gICAgICAgICAgICBzdHJ1
Y3RGaWVsZF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9zdHJ1Y3RGaWVsZF9jb2Rl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA2Njog
ewotICAgICAgICAgICAgdGltZXN0YW1wRmllbGRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVw
ZWF0ZWRfdGltZXN0YW1wRmllbGRfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGNhc2UgNzQ6IHsKLSAgICAgICAgICAgIHR5cGVGaWVsZF8uQWRkRW50
cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF90eXBlRmllbGRfY29kZWMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgODI6IHsKLSAgICAgICAgICAgIGRv
dWJsZUZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX2RvdWJsZUZpZWxkX2Nv
ZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDkw
OiB7Ci0gICAgICAgICAgICBmbG9hdEZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVh
dGVkX2Zsb2F0RmllbGRfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgOTg6IHsKLSAgICAgICAgICAgIGludDY0RmllbGRfLkFkZEVudHJpZXNG
cm9tKGlucHV0LCBfcmVwZWF0ZWRfaW50NjRGaWVsZF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxMDY6IHsKLSAgICAgICAgICAgIHVpbnQ2
NEZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3VpbnQ2NEZpZWxkX2NvZGVj
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDExNDog
ewotICAgICAgICAgICAgaW50MzJGaWVsZF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRl
ZF9pbnQzMkZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDEyMjogewotICAgICAgICAgICAgdWludDMyRmllbGRfLkFkZEVudHJpZXNG
cm9tKGlucHV0LCBfcmVwZWF0ZWRfdWludDMyRmllbGRfY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTMwOiB7Ci0gICAgICAgICAgICBib29s
RmllbGRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfYm9vbEZpZWxkX2NvZGVjKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDEzODogewot
ICAgICAgICAgICAgc3RyaW5nRmllbGRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRf
c3RyaW5nRmllbGRfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIGNhc2UgMTQ2OiB7Ci0gICAgICAgICAgICBieXRlc0ZpZWxkXy5BZGRFbnRyaWVzRnJv
bShpbnB1dCwgX3JlcGVhdGVkX2J5dGVzRmllbGRfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICBbZ2xv
YmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQot
ICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgT25lb2ZXZWxsS25vd25UeXBlcyA6IHBiOjpJ
TWVzc2FnZTxPbmVvZldlbGxLbm93blR5cGVzPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9u
bHkgcGI6Ok1lc3NhZ2VQYXJzZXI8T25lb2ZXZWxsS25vd25UeXBlcz4gX3BhcnNlciA9IG5ldyBw
Yjo6TWVzc2FnZVBhcnNlcjxPbmVvZldlbGxLbm93blR5cGVzPigoKSA9PiBuZXcgT25lb2ZXZWxs
S25vd25UeXBlcygpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPE9uZW9m
V2VsbEtub3duVHlwZXM+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAg
IHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAg
IGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zLlVuaXR0ZXN0
V2VsbEtub3duVHlwZXNSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzJdOyB9Ci0g
ICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRv
ciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1Ymxp
YyBPbmVvZldlbGxLbm93blR5cGVzKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9
Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBPbmVv
ZldlbGxLbm93blR5cGVzKE9uZW9mV2VsbEtub3duVHlwZXMgb3RoZXIpIDogdGhpcygpIHsKLSAg
ICAgIHN3aXRjaCAob3RoZXIuT25lb2ZGaWVsZENhc2UpIHsKLSAgICAgICAgY2FzZSBPbmVvZkZp
ZWxkT25lb2ZDYXNlLkFueUZpZWxkOgotICAgICAgICAgIEFueUZpZWxkID0gb3RoZXIuQW55Rmll
bGQuQ2xvbmUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25l
b2ZDYXNlLkFwaUZpZWxkOgotICAgICAgICAgIEFwaUZpZWxkID0gb3RoZXIuQXBpRmllbGQuQ2xv
bmUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNl
LkR1cmF0aW9uRmllbGQ6Ci0gICAgICAgICAgRHVyYXRpb25GaWVsZCA9IG90aGVyLkR1cmF0aW9u
RmllbGQuQ2xvbmUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxk
T25lb2ZDYXNlLkVtcHR5RmllbGQ6Ci0gICAgICAgICAgRW1wdHlGaWVsZCA9IG90aGVyLkVtcHR5
RmllbGQuQ2xvbmUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxk
T25lb2ZDYXNlLkZpZWxkTWFza0ZpZWxkOgotICAgICAgICAgIEZpZWxkTWFza0ZpZWxkID0gb3Ro
ZXIuRmllbGRNYXNrRmllbGQuQ2xvbmUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBPbmVvZkZpZWxkT25lb2ZDYXNlLlNvdXJjZUNvbnRleHRGaWVsZDoKLSAgICAgICAgICBTb3Vy
Y2VDb250ZXh0RmllbGQgPSBvdGhlci5Tb3VyY2VDb250ZXh0RmllbGQuQ2xvbmUoKTsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNlLlN0cnVjdEZpZWxk
OgotICAgICAgICAgIFN0cnVjdEZpZWxkID0gb3RoZXIuU3RydWN0RmllbGQuQ2xvbmUoKTsKLSAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNlLlRpbWVzdGFt
cEZpZWxkOgotICAgICAgICAgIFRpbWVzdGFtcEZpZWxkID0gb3RoZXIuVGltZXN0YW1wRmllbGQu
Q2xvbmUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZD
YXNlLlR5cGVGaWVsZDoKLSAgICAgICAgICBUeXBlRmllbGQgPSBvdGhlci5UeXBlRmllbGQuQ2xv
bmUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNl
LkRvdWJsZUZpZWxkOgotICAgICAgICAgIERvdWJsZUZpZWxkID0gb3RoZXIuRG91YmxlRmllbGQ7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2FzZS5GbG9h
dEZpZWxkOgotICAgICAgICAgIEZsb2F0RmllbGQgPSBvdGhlci5GbG9hdEZpZWxkOwotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuSW50NjRGaWVsZDoK
LSAgICAgICAgICBJbnQ2NEZpZWxkID0gb3RoZXIuSW50NjRGaWVsZDsKLSAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNlLlVpbnQ2NEZpZWxkOgotICAgICAg
ICAgIFVpbnQ2NEZpZWxkID0gb3RoZXIuVWludDY0RmllbGQ7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2FzZS5JbnQzMkZpZWxkOgotICAgICAgICAgIElu
dDMyRmllbGQgPSBvdGhlci5JbnQzMkZpZWxkOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuVWludDMyRmllbGQ6Ci0gICAgICAgICAgVWludDMyRmll
bGQgPSBvdGhlci5VaW50MzJGaWVsZDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBP
bmVvZkZpZWxkT25lb2ZDYXNlLkJvb2xGaWVsZDoKLSAgICAgICAgICBCb29sRmllbGQgPSBvdGhl
ci5Cb29sRmllbGQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25lb2ZGaWVsZE9u
ZW9mQ2FzZS5TdHJpbmdGaWVsZDoKLSAgICAgICAgICBTdHJpbmdGaWVsZCA9IG90aGVyLlN0cmlu
Z0ZpZWxkOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNh
c2UuQnl0ZXNGaWVsZDoKLSAgICAgICAgICBCeXRlc0ZpZWxkID0gb3RoZXIuQnl0ZXNGaWVsZDsK
LSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgIH0KLQotICAgIHB1YmxpYyBPbmVvZldl
bGxLbm93blR5cGVzIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBPbmVvZldlbGxLbm93blR5
cGVzKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRo
ZSAiYW55X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBBbnlG
aWVsZEZpZWxkTnVtYmVyID0gMTsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
V2VsbEtub3duVHlwZXMuQW55IEFueUZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBvbmVvZkZp
ZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5BbnlGaWVsZCA/IChnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnkpIG9uZW9mRmllbGRfIDogbnVsbDsgfQotICAg
ICAgc2V0IHsKLSAgICAgICAgb25lb2ZGaWVsZF8gPSB2YWx1ZTsKLSAgICAgICAgb25lb2ZGaWVs
ZENhc2VfID0gdmFsdWUgPT0gbnVsbCA/IE9uZW9mRmllbGRPbmVvZkNhc2UuTm9uZSA6IE9uZW9m
RmllbGRPbmVvZkNhc2UuQW55RmllbGQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1t
YXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJhcGlfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IEFwaUZpZWxkRmllbGROdW1iZXIgPSAyOwotICAgIHB1YmxpYyBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGkgQXBpRmllbGQgewotICAg
ICAgZ2V0IHsgcmV0dXJuIG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLkFw
aUZpZWxkID8gKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFwaSkgb25l
b2ZGaWVsZF8gOiBudWxsOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvbmVvZkZpZWxkXyA9IHZh
bHVlOwotICAgICAgICBvbmVvZkZpZWxkQ2FzZV8gPSB2YWx1ZSA9PSBudWxsID8gT25lb2ZGaWVs
ZE9uZW9mQ2FzZS5Ob25lIDogT25lb2ZGaWVsZE9uZW9mQ2FzZS5BcGlGaWVsZDsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImR1cmF0aW9u
X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBEdXJhdGlvbkZp
ZWxkRmllbGROdW1iZXIgPSAzOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5X
ZWxsS25vd25UeXBlcy5EdXJhdGlvbiBEdXJhdGlvbkZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVy
biBvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5EdXJhdGlvbkZpZWxkID8g
KGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9uKSBvbmVvZkZp
ZWxkXyA6IG51bGw7IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9uZW9mRmllbGRfID0gdmFsdWU7
Ci0gICAgICAgIG9uZW9mRmllbGRDYXNlXyA9IHZhbHVlID09IG51bGwgPyBPbmVvZkZpZWxkT25l
b2ZDYXNlLk5vbmUgOiBPbmVvZkZpZWxkT25lb2ZDYXNlLkR1cmF0aW9uRmllbGQ7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJlbXB0eV9m
aWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRW1wdHlGaWVsZEZp
ZWxkTnVtYmVyID0gNDsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtu
b3duVHlwZXMuRW1wdHkgRW1wdHlGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gb25lb2ZGaWVs
ZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRW1wdHlGaWVsZCA/IChnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5FbXB0eSkgb25lb2ZGaWVsZF8gOiBudWxsOyB9Ci0g
ICAgICBzZXQgewotICAgICAgICBvbmVvZkZpZWxkXyA9IHZhbHVlOwotICAgICAgICBvbmVvZkZp
ZWxkQ2FzZV8gPSB2YWx1ZSA9PSBudWxsID8gT25lb2ZGaWVsZE9uZW9mQ2FzZS5Ob25lIDogT25l
b2ZGaWVsZE9uZW9mQ2FzZS5FbXB0eUZpZWxkOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8
c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZmllbGRfbWFza19maWVsZCIgZmllbGQuPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRmllbGRNYXNrRmllbGRGaWVsZE51bWJlciA9
IDU7Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkZp
ZWxkTWFzayBGaWVsZE1hc2tGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gb25lb2ZGaWVsZENh
c2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRmllbGRNYXNrRmllbGQgPyAoZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRmllbGRNYXNrKSBvbmVvZkZpZWxkXyA6IG51bGw7
IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9uZW9mRmllbGRfID0gdmFsdWU7Ci0gICAgICAgIG9u
ZW9mRmllbGRDYXNlXyA9IHZhbHVlID09IG51bGwgPyBPbmVvZkZpZWxkT25lb2ZDYXNlLk5vbmUg
OiBPbmVvZkZpZWxkT25lb2ZDYXNlLkZpZWxkTWFza0ZpZWxkOwotICAgICAgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic291cmNlX2NvbnRleHRfZmll
bGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFNvdXJjZUNvbnRleHRG
aWVsZEZpZWxkTnVtYmVyID0gNjsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
V2VsbEtub3duVHlwZXMuU291cmNlQ29udGV4dCBTb3VyY2VDb250ZXh0RmllbGQgewotICAgICAg
Z2V0IHsgcmV0dXJuIG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLlNvdXJj
ZUNvbnRleHRGaWVsZCA/IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5T
b3VyY2VDb250ZXh0KSBvbmVvZkZpZWxkXyA6IG51bGw7IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IG9uZW9mRmllbGRfID0gdmFsdWU7Ci0gICAgICAgIG9uZW9mRmllbGRDYXNlXyA9IHZhbHVlID09
IG51bGwgPyBPbmVvZkZpZWxkT25lb2ZDYXNlLk5vbmUgOiBPbmVvZkZpZWxkT25lb2ZDYXNlLlNv
dXJjZUNvbnRleHRGaWVsZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgInN0cnVjdF9maWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBjb25zdCBpbnQgU3RydWN0RmllbGRGaWVsZE51bWJlciA9IDc7Ci0gICAgcHVibGljIGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cnVjdCBTdHJ1Y3RGaWVsZCB7
Ci0gICAgICBnZXQgeyByZXR1cm4gb25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNh
c2UuU3RydWN0RmllbGQgPyAoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
U3RydWN0KSBvbmVvZkZpZWxkXyA6IG51bGw7IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9uZW9m
RmllbGRfID0gdmFsdWU7Ci0gICAgICAgIG9uZW9mRmllbGRDYXNlXyA9IHZhbHVlID09IG51bGwg
PyBPbmVvZkZpZWxkT25lb2ZDYXNlLk5vbmUgOiBPbmVvZkZpZWxkT25lb2ZDYXNlLlN0cnVjdEZp
ZWxkOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAidGltZXN0YW1wX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBUaW1lc3RhbXBGaWVsZEZpZWxkTnVtYmVyID0gODsKLSAgICBwdWJsaWMgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVGltZXN0YW1wIFRpbWVzdGFtcEZpZWxkIHsK
LSAgICAgIGdldCB7IHJldHVybiBvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2Fz
ZS5UaW1lc3RhbXBGaWVsZCA/IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5UaW1lc3RhbXApIG9uZW9mRmllbGRfIDogbnVsbDsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
b25lb2ZGaWVsZF8gPSB2YWx1ZTsKLSAgICAgICAgb25lb2ZGaWVsZENhc2VfID0gdmFsdWUgPT0g
bnVsbCA/IE9uZW9mRmllbGRPbmVvZkNhc2UuTm9uZSA6IE9uZW9mRmllbGRPbmVvZkNhc2UuVGlt
ZXN0YW1wRmllbGQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJ0eXBlX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBUeXBlRmllbGRGaWVsZE51bWJlciA9IDk7Ci0gICAgcHVibGljIGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlR5cGUgVHlwZUZpZWxkIHsKLSAgICAgIGdldCB7
IHJldHVybiBvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5UeXBlRmllbGQg
PyAoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVHlwZSkgb25lb2ZGaWVs
ZF8gOiBudWxsOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvbmVvZkZpZWxkXyA9IHZhbHVlOwot
ICAgICAgICBvbmVvZkZpZWxkQ2FzZV8gPSB2YWx1ZSA9PSBudWxsID8gT25lb2ZGaWVsZE9uZW9m
Q2FzZS5Ob25lIDogT25lb2ZGaWVsZE9uZW9mQ2FzZS5UeXBlRmllbGQ7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJkb3VibGVfZmllbGQi
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IERvdWJsZUZpZWxkRmllbGRO
dW1iZXIgPSAxMDsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxk
b3VibGU/PiBfb25lb2ZfZG91YmxlRmllbGRfY29kZWMgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJ1
Y3RXcmFwcGVyPGRvdWJsZT4oODIpOwotICAgIHB1YmxpYyBkb3VibGU/IERvdWJsZUZpZWxkIHsK
LSAgICAgIGdldCB7IHJldHVybiBvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2Fz
ZS5Eb3VibGVGaWVsZCA/IChkb3VibGU/KSBvbmVvZkZpZWxkXyA6IChkb3VibGU/KSBudWxsOyB9
Ci0gICAgICBzZXQgewotICAgICAgICBvbmVvZkZpZWxkXyA9IHZhbHVlOwotICAgICAgICBvbmVv
ZkZpZWxkQ2FzZV8gPSB2YWx1ZSA9PSBudWxsID8gT25lb2ZGaWVsZE9uZW9mQ2FzZS5Ob25lIDog
T25lb2ZGaWVsZE9uZW9mQ2FzZS5Eb3VibGVGaWVsZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImZsb2F0X2ZpZWxkIiBmaWVsZC48L3N1
bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBGbG9hdEZpZWxkRmllbGROdW1iZXIgPSAxMTsK
LSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxmbG9hdD8+IF9vbmVv
Zl9mbG9hdEZpZWxkX2NvZGVjID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RydWN0V3JhcHBlcjxmbG9h
dD4oOTApOwotICAgIHB1YmxpYyBmbG9hdD8gRmxvYXRGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1
cm4gb25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRmxvYXRGaWVsZCA/IChm
bG9hdD8pIG9uZW9mRmllbGRfIDogKGZsb2F0PykgbnVsbDsgfQotICAgICAgc2V0IHsKLSAgICAg
ICAgb25lb2ZGaWVsZF8gPSB2YWx1ZTsKLSAgICAgICAgb25lb2ZGaWVsZENhc2VfID0gdmFsdWUg
PT0gbnVsbCA/IE9uZW9mRmllbGRPbmVvZkNhc2UuTm9uZSA6IE9uZW9mRmllbGRPbmVvZkNhc2Uu
RmxvYXRGaWVsZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgImludDY0X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBJbnQ2NEZpZWxkRmllbGROdW1iZXIgPSAxMjsKLSAgICBwcml2YXRlIHN0YXRpYyBy
ZWFkb25seSBwYjo6RmllbGRDb2RlYzxsb25nPz4gX29uZW9mX2ludDY0RmllbGRfY29kZWMgPSBw
Yjo6RmllbGRDb2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPGxvbmc+KDk4KTsKLSAgICBwdWJsaWMgbG9u
Zz8gSW50NjRGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gb25lb2ZGaWVsZENhc2VfID09IE9u
ZW9mRmllbGRPbmVvZkNhc2UuSW50NjRGaWVsZCA/IChsb25nPykgb25lb2ZGaWVsZF8gOiAobG9u
Zz8pIG51bGw7IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9uZW9mRmllbGRfID0gdmFsdWU7Ci0g
ICAgICAgIG9uZW9mRmllbGRDYXNlXyA9IHZhbHVlID09IG51bGwgPyBPbmVvZkZpZWxkT25lb2ZD
YXNlLk5vbmUgOiBPbmVvZkZpZWxkT25lb2ZDYXNlLkludDY0RmllbGQ7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ1aW50NjRfZmllbGQi
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFVpbnQ2NEZpZWxkRmllbGRO
dW1iZXIgPSAxMzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzx1
bG9uZz8+IF9vbmVvZl91aW50NjRGaWVsZF9jb2RlYyA9IHBiOjpGaWVsZENvZGVjLkZvclN0cnVj
dFdyYXBwZXI8dWxvbmc+KDEwNik7Ci0gICAgcHVibGljIHVsb25nPyBVaW50NjRGaWVsZCB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gb25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2Uu
VWludDY0RmllbGQgPyAodWxvbmc/KSBvbmVvZkZpZWxkXyA6ICh1bG9uZz8pIG51bGw7IH0KLSAg
ICAgIHNldCB7Ci0gICAgICAgIG9uZW9mRmllbGRfID0gdmFsdWU7Ci0gICAgICAgIG9uZW9mRmll
bGRDYXNlXyA9IHZhbHVlID09IG51bGwgPyBPbmVvZkZpZWxkT25lb2ZDYXNlLk5vbmUgOiBPbmVv
ZkZpZWxkT25lb2ZDYXNlLlVpbnQ2NEZpZWxkOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8
c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiaW50MzJfZmllbGQiIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEludDMyRmllbGRGaWVsZE51bWJlciA9IDE0OwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGludD8+IF9vbmVvZl9pbnQz
MkZpZWxkX2NvZGVjID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RydWN0V3JhcHBlcjxpbnQ+KDExNCk7
Ci0gICAgcHVibGljIGludD8gSW50MzJGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gb25lb2ZG
aWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuSW50MzJGaWVsZCA/IChpbnQ/KSBvbmVv
ZkZpZWxkXyA6IChpbnQ/KSBudWxsOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvbmVvZkZpZWxk
XyA9IHZhbHVlOwotICAgICAgICBvbmVvZkZpZWxkQ2FzZV8gPSB2YWx1ZSA9PSBudWxsID8gT25l
b2ZGaWVsZE9uZW9mQ2FzZS5Ob25lIDogT25lb2ZGaWVsZE9uZW9mQ2FzZS5JbnQzMkZpZWxkOwot
ICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAi
dWludDMyX2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBVaW50
MzJGaWVsZEZpZWxkTnVtYmVyID0gMTU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6
OkZpZWxkQ29kZWM8dWludD8+IF9vbmVvZl91aW50MzJGaWVsZF9jb2RlYyA9IHBiOjpGaWVsZENv
ZGVjLkZvclN0cnVjdFdyYXBwZXI8dWludD4oMTIyKTsKLSAgICBwdWJsaWMgdWludD8gVWludDMy
RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxk
T25lb2ZDYXNlLlVpbnQzMkZpZWxkID8gKHVpbnQ/KSBvbmVvZkZpZWxkXyA6ICh1aW50PykgbnVs
bDsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb25lb2ZGaWVsZF8gPSB2YWx1ZTsKLSAgICAgICAg
b25lb2ZGaWVsZENhc2VfID0gdmFsdWUgPT0gbnVsbCA/IE9uZW9mRmllbGRPbmVvZkNhc2UuTm9u
ZSA6IE9uZW9mRmllbGRPbmVvZkNhc2UuVWludDMyRmllbGQ7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJib29sX2ZpZWxkIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBCb29sRmllbGRGaWVsZE51bWJlciA9IDE2
OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGJvb2w/PiBfb25l
b2ZfYm9vbEZpZWxkX2NvZGVjID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RydWN0V3JhcHBlcjxib29s
PigxMzApOwotICAgIHB1YmxpYyBib29sPyBCb29sRmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJu
IG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLkJvb2xGaWVsZCA/IChib29s
Pykgb25lb2ZGaWVsZF8gOiAoYm9vbD8pIG51bGw7IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9u
ZW9mRmllbGRfID0gdmFsdWU7Ci0gICAgICAgIG9uZW9mRmllbGRDYXNlXyA9IHZhbHVlID09IG51
bGwgPyBPbmVvZkZpZWxkT25lb2ZDYXNlLk5vbmUgOiBPbmVvZkZpZWxkT25lb2ZDYXNlLkJvb2xG
aWVsZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgInN0cmluZ19maWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBp
bnQgU3RyaW5nRmllbGRGaWVsZE51bWJlciA9IDE3OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRv
bmx5IHBiOjpGaWVsZENvZGVjPHN0cmluZz4gX29uZW9mX3N0cmluZ0ZpZWxkX2NvZGVjID0gcGI6
OkZpZWxkQ29kZWMuRm9yQ2xhc3NXcmFwcGVyPHN0cmluZz4oMTM4KTsKLSAgICBwdWJsaWMgc3Ry
aW5nIFN0cmluZ0ZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBvbmVvZkZpZWxkQ2FzZV8gPT0g
T25lb2ZGaWVsZE9uZW9mQ2FzZS5TdHJpbmdGaWVsZCA/IChzdHJpbmcpIG9uZW9mRmllbGRfIDog
KHN0cmluZykgbnVsbDsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb25lb2ZGaWVsZF8gPSB2YWx1
ZTsKLSAgICAgICAgb25lb2ZGaWVsZENhc2VfID0gdmFsdWUgPT0gbnVsbCA/IE9uZW9mRmllbGRP
bmVvZkNhc2UuTm9uZSA6IE9uZW9mRmllbGRPbmVvZkNhc2UuU3RyaW5nRmllbGQ7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJieXRlc19m
aWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQnl0ZXNGaWVsZEZp
ZWxkTnVtYmVyID0gMTg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29k
ZWM8cGI6OkJ5dGVTdHJpbmc+IF9vbmVvZl9ieXRlc0ZpZWxkX2NvZGVjID0gcGI6OkZpZWxkQ29k
ZWMuRm9yQ2xhc3NXcmFwcGVyPHBiOjpCeXRlU3RyaW5nPigxNDYpOwotICAgIHB1YmxpYyBwYjo6
Qnl0ZVN0cmluZyBCeXRlc0ZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBvbmVvZkZpZWxkQ2Fz
ZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5CeXRlc0ZpZWxkID8gKHBiOjpCeXRlU3RyaW5nKSBv
bmVvZkZpZWxkXyA6IChwYjo6Qnl0ZVN0cmluZykgbnVsbDsgfQotICAgICAgc2V0IHsKLSAgICAg
ICAgb25lb2ZGaWVsZF8gPSB2YWx1ZTsKLSAgICAgICAgb25lb2ZGaWVsZENhc2VfID0gdmFsdWUg
PT0gbnVsbCA/IE9uZW9mRmllbGRPbmVvZkNhc2UuTm9uZSA6IE9uZW9mRmllbGRPbmVvZkNhc2Uu
Qnl0ZXNGaWVsZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIG9iamVjdCBvbmVvZkZp
ZWxkXzsKLSAgICAvLy8gPHN1bW1hcnk+RW51bSBvZiBwb3NzaWJsZSBjYXNlcyBmb3IgdGhlICJv
bmVvZl9maWVsZCIgb25lb2YuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBlbnVtIE9uZW9mRmllbGRP
bmVvZkNhc2UgewotICAgICAgTm9uZSA9IDAsCi0gICAgICBBbnlGaWVsZCA9IDEsCi0gICAgICBB
cGlGaWVsZCA9IDIsCi0gICAgICBEdXJhdGlvbkZpZWxkID0gMywKLSAgICAgIEVtcHR5RmllbGQg
PSA0LAotICAgICAgRmllbGRNYXNrRmllbGQgPSA1LAotICAgICAgU291cmNlQ29udGV4dEZpZWxk
ID0gNiwKLSAgICAgIFN0cnVjdEZpZWxkID0gNywKLSAgICAgIFRpbWVzdGFtcEZpZWxkID0gOCwK
LSAgICAgIFR5cGVGaWVsZCA9IDksCi0gICAgICBEb3VibGVGaWVsZCA9IDEwLAotICAgICAgRmxv
YXRGaWVsZCA9IDExLAotICAgICAgSW50NjRGaWVsZCA9IDEyLAotICAgICAgVWludDY0RmllbGQg
PSAxMywKLSAgICAgIEludDMyRmllbGQgPSAxNCwKLSAgICAgIFVpbnQzMkZpZWxkID0gMTUsCi0g
ICAgICBCb29sRmllbGQgPSAxNiwKLSAgICAgIFN0cmluZ0ZpZWxkID0gMTcsCi0gICAgICBCeXRl
c0ZpZWxkID0gMTgsCi0gICAgfQotICAgIHByaXZhdGUgT25lb2ZGaWVsZE9uZW9mQ2FzZSBvbmVv
ZkZpZWxkQ2FzZV8gPSBPbmVvZkZpZWxkT25lb2ZDYXNlLk5vbmU7Ci0gICAgcHVibGljIE9uZW9m
RmllbGRPbmVvZkNhc2UgT25lb2ZGaWVsZENhc2UgewotICAgICAgZ2V0IHsgcmV0dXJuIG9uZW9m
RmllbGRDYXNlXzsgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIENsZWFyT25lb2ZGaWVsZCgp
IHsKLSAgICAgIG9uZW9mRmllbGRDYXNlXyA9IE9uZW9mRmllbGRPbmVvZkNhc2UuTm9uZTsKLSAg
ICAgIG9uZW9mRmllbGRfID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9v
bCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIE9u
ZW9mV2VsbEtub3duVHlwZXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhPbmVv
ZldlbGxLbm93blR5cGVzIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVy
LCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVm
ZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
IH0KLSAgICAgIGlmICghb2JqZWN0LkVxdWFscyhBbnlGaWVsZCwgb3RoZXIuQW55RmllbGQpKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoQXBpRmllbGQsIG90aGVyLkFw
aUZpZWxkKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKER1cmF0aW9u
RmllbGQsIG90aGVyLkR1cmF0aW9uRmllbGQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9i
amVjdC5FcXVhbHMoRW1wdHlGaWVsZCwgb3RoZXIuRW1wdHlGaWVsZCkpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmICghb2JqZWN0LkVxdWFscyhGaWVsZE1hc2tGaWVsZCwgb3RoZXIuRmllbGRNYXNr
RmllbGQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoU291cmNlQ29u
dGV4dEZpZWxkLCBvdGhlci5Tb3VyY2VDb250ZXh0RmllbGQpKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICBpZiAoIW9iamVjdC5FcXVhbHMoU3RydWN0RmllbGQsIG90aGVyLlN0cnVjdEZpZWxkKSkgcmV0
dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKFRpbWVzdGFtcEZpZWxkLCBvdGhl
ci5UaW1lc3RhbXBGaWVsZCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghb2JqZWN0LkVxdWFs
cyhUeXBlRmllbGQsIG90aGVyLlR5cGVGaWVsZCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChE
b3VibGVGaWVsZCAhPSBvdGhlci5Eb3VibGVGaWVsZCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KEZsb2F0RmllbGQgIT0gb3RoZXIuRmxvYXRGaWVsZCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KEludDY0RmllbGQgIT0gb3RoZXIuSW50NjRGaWVsZCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KFVpbnQ2NEZpZWxkICE9IG90aGVyLlVpbnQ2NEZpZWxkKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZiAoSW50MzJGaWVsZCAhPSBvdGhlci5JbnQzMkZpZWxkKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZiAoVWludDMyRmllbGQgIT0gb3RoZXIuVWludDMyRmllbGQpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmIChCb29sRmllbGQgIT0gb3RoZXIuQm9vbEZpZWxkKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZiAoU3RyaW5nRmllbGQgIT0gb3RoZXIuU3RyaW5nRmllbGQpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmIChCeXRlc0ZpZWxkICE9IG90aGVyLkJ5dGVzRmllbGQpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmIChPbmVvZkZpZWxkQ2FzZSAhPSBvdGhlci5PbmVvZkZpZWxkQ2FzZSkgcmV0dXJuIGZhbHNl
OwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBH
ZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChvbmVvZkZpZWxk
Q2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5BbnlGaWVsZCkgaGFzaCBePSBBbnlGaWVsZC5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25l
b2ZDYXNlLkFwaUZpZWxkKSBoYXNoIF49IEFwaUZpZWxkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBp
ZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRHVyYXRpb25GaWVsZCkg
aGFzaCBePSBEdXJhdGlvbkZpZWxkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAob25lb2ZGaWVs
ZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRW1wdHlGaWVsZCkgaGFzaCBePSBFbXB0eUZp
ZWxkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmll
bGRPbmVvZkNhc2UuRmllbGRNYXNrRmllbGQpIGhhc2ggXj0gRmllbGRNYXNrRmllbGQuR2V0SGFz
aENvZGUoKTsKLSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2Fz
ZS5Tb3VyY2VDb250ZXh0RmllbGQpIGhhc2ggXj0gU291cmNlQ29udGV4dEZpZWxkLkdldEhhc2hD
b2RlKCk7Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2Uu
U3RydWN0RmllbGQpIGhhc2ggXj0gU3RydWN0RmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlm
IChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5UaW1lc3RhbXBGaWVsZCkg
aGFzaCBePSBUaW1lc3RhbXBGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG9uZW9mRmll
bGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLlR5cGVGaWVsZCkgaGFzaCBePSBUeXBlRmll
bGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVs
ZE9uZW9mQ2FzZS5Eb3VibGVGaWVsZCkgaGFzaCBePSBEb3VibGVGaWVsZC5HZXRIYXNoQ29kZSgp
OwotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLkZsb2F0
RmllbGQpIGhhc2ggXj0gRmxvYXRGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG9uZW9m
RmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLkludDY0RmllbGQpIGhhc2ggXj0gSW50
NjRGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVv
ZkZpZWxkT25lb2ZDYXNlLlVpbnQ2NEZpZWxkKSBoYXNoIF49IFVpbnQ2NEZpZWxkLkdldEhhc2hD
b2RlKCk7Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2Uu
SW50MzJGaWVsZCkgaGFzaCBePSBJbnQzMkZpZWxkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAo
b25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuVWludDMyRmllbGQpIGhhc2gg
Xj0gVWludDMyRmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8g
PT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5Cb29sRmllbGQpIGhhc2ggXj0gQm9vbEZpZWxkLkdldEhh
c2hDb2RlKCk7Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNh
c2UuU3RyaW5nRmllbGQpIGhhc2ggXj0gU3RyaW5nRmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAg
IGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5CeXRlc0ZpZWxkKSBo
YXNoIF49IEJ5dGVzRmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gKGludCkgb25l
b2ZGaWVsZENhc2VfOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92
ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRl
ci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3Jp
dGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAob25lb2ZGaWVs
ZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuQW55RmllbGQpIHsKLSAgICAgICAgb3V0cHV0
LldyaXRlUmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShBbnlGaWVsZCk7
Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNh
c2UuQXBpRmllbGQpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE4KTsKLSAgICAgICAg
b3V0cHV0LldyaXRlTWVzc2FnZShBcGlGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZG
aWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRHVyYXRpb25GaWVsZCkgewotICAgICAg
ICBvdXRwdXQuV3JpdGVSYXdUYWcoMjYpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKER1
cmF0aW9uRmllbGQpOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVv
ZkZpZWxkT25lb2ZDYXNlLkVtcHR5RmllbGQpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFn
KDM0KTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShFbXB0eUZpZWxkKTsKLSAgICAgIH0K
LSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5GaWVsZE1h
c2tGaWVsZCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNDIpOwotICAgICAgICBvdXRw
dXQuV3JpdGVNZXNzYWdlKEZpZWxkTWFza0ZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmIChvbmVv
ZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5Tb3VyY2VDb250ZXh0RmllbGQpIHsK
LSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDUwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVz
c2FnZShTb3VyY2VDb250ZXh0RmllbGQpOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRD
YXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLlN0cnVjdEZpZWxkKSB7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZVJhd1RhZyg1OCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoU3RydWN0Rmll
bGQpOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25l
b2ZDYXNlLlRpbWVzdGFtcEZpZWxkKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg2Nik7
Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoVGltZXN0YW1wRmllbGQpOwotICAgICAgfQot
ICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLlR5cGVGaWVs
ZCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNzQpOwotICAgICAgICBvdXRwdXQuV3Jp
dGVNZXNzYWdlKFR5cGVGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2Vf
ID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRG91YmxlRmllbGQpIHsKLSAgICAgICAgX29uZW9mX2Rv
dWJsZUZpZWxkX2NvZGVjLldyaXRlVGFnQW5kVmFsdWUob3V0cHV0LCAoZG91YmxlPykgb25lb2ZG
aWVsZF8pOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxk
T25lb2ZDYXNlLkZsb2F0RmllbGQpIHsKLSAgICAgICAgX29uZW9mX2Zsb2F0RmllbGRfY29kZWMu
V3JpdGVUYWdBbmRWYWx1ZShvdXRwdXQsIChmbG9hdD8pIG9uZW9mRmllbGRfKTsKLSAgICAgIH0K
LSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5JbnQ2NEZp
ZWxkKSB7Ci0gICAgICAgIF9vbmVvZl9pbnQ2NEZpZWxkX2NvZGVjLldyaXRlVGFnQW5kVmFsdWUo
b3V0cHV0LCAobG9uZz8pIG9uZW9mRmllbGRfKTsKLSAgICAgIH0KLSAgICAgIGlmIChvbmVvZkZp
ZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5VaW50NjRGaWVsZCkgewotICAgICAgICBf
b25lb2ZfdWludDY0RmllbGRfY29kZWMuV3JpdGVUYWdBbmRWYWx1ZShvdXRwdXQsICh1bG9uZz8p
IG9uZW9mRmllbGRfKTsKLSAgICAgIH0KLSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25l
b2ZGaWVsZE9uZW9mQ2FzZS5JbnQzMkZpZWxkKSB7Ci0gICAgICAgIF9vbmVvZl9pbnQzMkZpZWxk
X2NvZGVjLldyaXRlVGFnQW5kVmFsdWUob3V0cHV0LCAoaW50Pykgb25lb2ZGaWVsZF8pOwotICAg
ICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLlVp
bnQzMkZpZWxkKSB7Ci0gICAgICAgIF9vbmVvZl91aW50MzJGaWVsZF9jb2RlYy5Xcml0ZVRhZ0Fu
ZFZhbHVlKG91dHB1dCwgKHVpbnQ/KSBvbmVvZkZpZWxkXyk7Ci0gICAgICB9Ci0gICAgICBpZiAo
b25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuQm9vbEZpZWxkKSB7Ci0gICAg
ICAgIF9vbmVvZl9ib29sRmllbGRfY29kZWMuV3JpdGVUYWdBbmRWYWx1ZShvdXRwdXQsIChib29s
Pykgb25lb2ZGaWVsZF8pOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBP
bmVvZkZpZWxkT25lb2ZDYXNlLlN0cmluZ0ZpZWxkKSB7Ci0gICAgICAgIF9vbmVvZl9zdHJpbmdG
aWVsZF9jb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1dCwgKHN0cmluZykgb25lb2ZGaWVsZF8p
OwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZD
YXNlLkJ5dGVzRmllbGQpIHsKLSAgICAgICAgX29uZW9mX2J5dGVzRmllbGRfY29kZWMuV3JpdGVU
YWdBbmRWYWx1ZShvdXRwdXQsIChwYjo6Qnl0ZVN0cmluZykgb25lb2ZGaWVsZF8pOwotICAgICAg
fQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBz
aXplID0gMDsKLSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2Fz
ZS5BbnlGaWVsZCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0u
Q29tcHV0ZU1lc3NhZ2VTaXplKEFueUZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmIChvbmVvZkZp
ZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5BcGlGaWVsZCkgewotICAgICAgICBzaXpl
ICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKEFwaUZpZWxk
KTsKLSAgICAgIH0KLSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9m
Q2FzZS5EdXJhdGlvbkZpZWxkKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1
dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoRHVyYXRpb25GaWVsZCk7Ci0gICAgICB9Ci0gICAg
ICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRW1wdHlGaWVsZCkg
ewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3Nh
Z2VTaXplKEVtcHR5RmllbGQpOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9
PSBPbmVvZkZpZWxkT25lb2ZDYXNlLkZpZWxkTWFza0ZpZWxkKSB7Ci0gICAgICAgIHNpemUgKz0g
MSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoRmllbGRNYXNrRmll
bGQpOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25l
b2ZDYXNlLlNvdXJjZUNvbnRleHRGaWVsZCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29k
ZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKFNvdXJjZUNvbnRleHRGaWVsZCk7Ci0g
ICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2Uu
U3RydWN0RmllbGQpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFt
LkNvbXB1dGVNZXNzYWdlU2l6ZShTdHJ1Y3RGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAob25l
b2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuVGltZXN0YW1wRmllbGQpIHsKLSAg
ICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6
ZShUaW1lc3RhbXBGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09
IE9uZW9mRmllbGRPbmVvZkNhc2UuVHlwZUZpZWxkKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBi
OjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoVHlwZUZpZWxkKTsKLSAgICAg
IH0KLSAgICAgIGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5Eb3Vi
bGVGaWVsZCkgewotICAgICAgICBzaXplICs9IF9vbmVvZl9kb3VibGVGaWVsZF9jb2RlYy5DYWxj
dWxhdGVTaXplV2l0aFRhZyhEb3VibGVGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZG
aWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRmxvYXRGaWVsZCkgewotICAgICAgICBz
aXplICs9IF9vbmVvZl9mbG9hdEZpZWxkX2NvZGVjLkNhbGN1bGF0ZVNpemVXaXRoVGFnKEZsb2F0
RmllbGQpOwotICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxk
T25lb2ZDYXNlLkludDY0RmllbGQpIHsKLSAgICAgICAgc2l6ZSArPSBfb25lb2ZfaW50NjRGaWVs
ZF9jb2RlYy5DYWxjdWxhdGVTaXplV2l0aFRhZyhJbnQ2NEZpZWxkKTsKLSAgICAgIH0KLSAgICAg
IGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5VaW50NjRGaWVsZCkg
ewotICAgICAgICBzaXplICs9IF9vbmVvZl91aW50NjRGaWVsZF9jb2RlYy5DYWxjdWxhdGVTaXpl
V2l0aFRhZyhVaW50NjRGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2Vf
ID09IE9uZW9mRmllbGRPbmVvZkNhc2UuSW50MzJGaWVsZCkgewotICAgICAgICBzaXplICs9IF9v
bmVvZl9pbnQzMkZpZWxkX2NvZGVjLkNhbGN1bGF0ZVNpemVXaXRoVGFnKEludDMyRmllbGQpOwot
ICAgICAgfQotICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNl
LlVpbnQzMkZpZWxkKSB7Ci0gICAgICAgIHNpemUgKz0gX29uZW9mX3VpbnQzMkZpZWxkX2NvZGVj
LkNhbGN1bGF0ZVNpemVXaXRoVGFnKFVpbnQzMkZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmIChv
bmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5Cb29sRmllbGQpIHsKLSAgICAg
ICAgc2l6ZSArPSBfb25lb2ZfYm9vbEZpZWxkX2NvZGVjLkNhbGN1bGF0ZVNpemVXaXRoVGFnKEJv
b2xGaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmll
bGRPbmVvZkNhc2UuU3RyaW5nRmllbGQpIHsKLSAgICAgICAgc2l6ZSArPSBfb25lb2Zfc3RyaW5n
RmllbGRfY29kZWMuQ2FsY3VsYXRlU2l6ZVdpdGhUYWcoU3RyaW5nRmllbGQpOwotICAgICAgfQot
ICAgICAgaWYgKG9uZW9mRmllbGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLkJ5dGVzRmll
bGQpIHsKLSAgICAgICAgc2l6ZSArPSBfb25lb2ZfYnl0ZXNGaWVsZF9jb2RlYy5DYWxjdWxhdGVT
aXplV2l0aFRhZyhCeXRlc0ZpZWxkKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShPbmVvZldlbGxLbm93blR5cGVzIG90aGVy
KSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgICBzd2l0Y2ggKG90aGVyLk9uZW9mRmllbGRDYXNlKSB7Ci0gICAgICAgIGNhc2UgT25l
b2ZGaWVsZE9uZW9mQ2FzZS5BbnlGaWVsZDoKLSAgICAgICAgICBBbnlGaWVsZCA9IG90aGVyLkFu
eUZpZWxkOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNh
c2UuQXBpRmllbGQ6Ci0gICAgICAgICAgQXBpRmllbGQgPSBvdGhlci5BcGlGaWVsZDsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNlLkR1cmF0aW9uRmll
bGQ6Ci0gICAgICAgICAgRHVyYXRpb25GaWVsZCA9IG90aGVyLkR1cmF0aW9uRmllbGQ7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2FzZS5FbXB0eUZpZWxk
OgotICAgICAgICAgIEVtcHR5RmllbGQgPSBvdGhlci5FbXB0eUZpZWxkOwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuRmllbGRNYXNrRmllbGQ6Ci0g
ICAgICAgICAgRmllbGRNYXNrRmllbGQgPSBvdGhlci5GaWVsZE1hc2tGaWVsZDsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNlLlNvdXJjZUNvbnRleHRG
aWVsZDoKLSAgICAgICAgICBTb3VyY2VDb250ZXh0RmllbGQgPSBvdGhlci5Tb3VyY2VDb250ZXh0
RmllbGQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2Fz
ZS5TdHJ1Y3RGaWVsZDoKLSAgICAgICAgICBTdHJ1Y3RGaWVsZCA9IG90aGVyLlN0cnVjdEZpZWxk
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuVGlt
ZXN0YW1wRmllbGQ6Ci0gICAgICAgICAgVGltZXN0YW1wRmllbGQgPSBvdGhlci5UaW1lc3RhbXBG
aWVsZDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNl
LlR5cGVGaWVsZDoKLSAgICAgICAgICBUeXBlRmllbGQgPSBvdGhlci5UeXBlRmllbGQ7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2FzZS5Eb3VibGVGaWVs
ZDoKLSAgICAgICAgICBEb3VibGVGaWVsZCA9IG90aGVyLkRvdWJsZUZpZWxkOwotICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuRmxvYXRGaWVsZDoKLSAg
ICAgICAgICBGbG9hdEZpZWxkID0gb3RoZXIuRmxvYXRGaWVsZDsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNlLkludDY0RmllbGQ6Ci0gICAgICAgICAg
SW50NjRGaWVsZCA9IG90aGVyLkludDY0RmllbGQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgT25lb2ZGaWVsZE9uZW9mQ2FzZS5VaW50NjRGaWVsZDoKLSAgICAgICAgICBVaW50NjRG
aWVsZCA9IG90aGVyLlVpbnQ2NEZpZWxkOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IE9uZW9mRmllbGRPbmVvZkNhc2UuSW50MzJGaWVsZDoKLSAgICAgICAgICBJbnQzMkZpZWxkID0g
b3RoZXIuSW50MzJGaWVsZDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZp
ZWxkT25lb2ZDYXNlLlVpbnQzMkZpZWxkOgotICAgICAgICAgIFVpbnQzMkZpZWxkID0gb3RoZXIu
VWludDMyRmllbGQ7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25lb2ZGaWVsZE9u
ZW9mQ2FzZS5Cb29sRmllbGQ6Ci0gICAgICAgICAgQm9vbEZpZWxkID0gb3RoZXIuQm9vbEZpZWxk
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uZW9mRmllbGRPbmVvZkNhc2UuU3Ry
aW5nRmllbGQ6Ci0gICAgICAgICAgU3RyaW5nRmllbGQgPSBvdGhlci5TdHJpbmdGaWVsZDsKLSAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbmVvZkZpZWxkT25lb2ZDYXNlLkJ5dGVzRmll
bGQ6Ci0gICAgICAgICAgQnl0ZXNGaWVsZCA9IG90aGVyLkJ5dGVzRmllbGQ7Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6
OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUg
KCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDEwOiB7Ci0gICAgICAgICAgICBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5Bbnkgc3ViQnVpbGRlciA9IG5ldyBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnkoKTsKLSAgICAgICAgICAg
IGlmIChvbmVvZkZpZWxkQ2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5BbnlGaWVsZCkgewot
ICAgICAgICAgICAgICBzdWJCdWlsZGVyLk1lcmdlRnJvbShBbnlGaWVsZCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZShzdWJCdWlsZGVyKTsKLSAgICAgICAg
ICAgIEFueUZpZWxkID0gc3ViQnVpbGRlcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5XZWxsS25vd25UeXBlcy5BcGkgc3ViQnVpbGRlciA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGkoKTsKLSAgICAgICAgICAgIGlmIChvbmVvZkZpZWxk
Q2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5BcGlGaWVsZCkgewotICAgICAgICAgICAgICBz
dWJCdWlsZGVyLk1lcmdlRnJvbShBcGlGaWVsZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpbnB1dC5SZWFkTWVzc2FnZShzdWJCdWlsZGVyKTsKLSAgICAgICAgICAgIEFwaUZpZWxkID0g
c3ViQnVpbGRlcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBj
YXNlIDI2OiB7Ci0gICAgICAgICAgICBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcy5EdXJhdGlvbiBzdWJCdWlsZGVyID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldl
bGxLbm93blR5cGVzLkR1cmF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAob25lb2ZGaWVsZENhc2Vf
ID09IE9uZW9mRmllbGRPbmVvZkNhc2UuRHVyYXRpb25GaWVsZCkgewotICAgICAgICAgICAgICBz
dWJCdWlsZGVyLk1lcmdlRnJvbShEdXJhdGlvbkZpZWxkKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKHN1YkJ1aWxkZXIpOwotICAgICAgICAgICAgRHVyYXRp
b25GaWVsZCA9IHN1YkJ1aWxkZXI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSAzNDogewotICAgICAgICAgICAgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
V2VsbEtub3duVHlwZXMuRW1wdHkgc3ViQnVpbGRlciA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5XZWxsS25vd25UeXBlcy5FbXB0eSgpOwotICAgICAgICAgICAgaWYgKG9uZW9mRmllbGRD
YXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLkVtcHR5RmllbGQpIHsKLSAgICAgICAgICAgICAg
c3ViQnVpbGRlci5NZXJnZUZyb20oRW1wdHlGaWVsZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpbnB1dC5SZWFkTWVzc2FnZShzdWJCdWlsZGVyKTsKLSAgICAgICAgICAgIEVtcHR5Rmll
bGQgPSBzdWJCdWlsZGVyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGNhc2UgNDI6IHsKLSAgICAgICAgICAgIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzLkZpZWxkTWFzayBzdWJCdWlsZGVyID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLldlbGxLbm93blR5cGVzLkZpZWxkTWFzaygpOwotICAgICAgICAgICAgaWYgKG9uZW9mRmll
bGRDYXNlXyA9PSBPbmVvZkZpZWxkT25lb2ZDYXNlLkZpZWxkTWFza0ZpZWxkKSB7Ci0gICAgICAg
ICAgICAgIHN1YkJ1aWxkZXIuTWVyZ2VGcm9tKEZpZWxkTWFza0ZpZWxkKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKHN1YkJ1aWxkZXIpOwotICAgICAgICAg
ICAgRmllbGRNYXNrRmllbGQgPSBzdWJCdWlsZGVyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGNhc2UgNTA6IHsKLSAgICAgICAgICAgIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLlNvdXJjZUNvbnRleHQgc3ViQnVpbGRlciA9IG5ldyBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5Tb3VyY2VDb250ZXh0KCk7Ci0g
ICAgICAgICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9uZW9mRmllbGRPbmVvZkNhc2UuU291
cmNlQ29udGV4dEZpZWxkKSB7Ci0gICAgICAgICAgICAgIHN1YkJ1aWxkZXIuTWVyZ2VGcm9tKFNv
dXJjZUNvbnRleHRGaWVsZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnB1dC5SZWFk
TWVzc2FnZShzdWJCdWlsZGVyKTsKLSAgICAgICAgICAgIFNvdXJjZUNvbnRleHRGaWVsZCA9IHN1
YkJ1aWxkZXI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSA1ODogewotICAgICAgICAgICAgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMuU3RydWN0IHN1YkJ1aWxkZXIgPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtu
b3duVHlwZXMuU3RydWN0KCk7Ci0gICAgICAgICAgICBpZiAob25lb2ZGaWVsZENhc2VfID09IE9u
ZW9mRmllbGRPbmVvZkNhc2UuU3RydWN0RmllbGQpIHsKLSAgICAgICAgICAgICAgc3ViQnVpbGRl
ci5NZXJnZUZyb20oU3RydWN0RmllbGQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5w
dXQuUmVhZE1lc3NhZ2Uoc3ViQnVpbGRlcik7Ci0gICAgICAgICAgICBTdHJ1Y3RGaWVsZCA9IHN1
YkJ1aWxkZXI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSA2NjogewotICAgICAgICAgICAgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMuVGltZXN0YW1wIHN1YkJ1aWxkZXIgPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2Vs
bEtub3duVHlwZXMuVGltZXN0YW1wKCk7Ci0gICAgICAgICAgICBpZiAob25lb2ZGaWVsZENhc2Vf
ID09IE9uZW9mRmllbGRPbmVvZkNhc2UuVGltZXN0YW1wRmllbGQpIHsKLSAgICAgICAgICAgICAg
c3ViQnVpbGRlci5NZXJnZUZyb20oVGltZXN0YW1wRmllbGQpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2Uoc3ViQnVpbGRlcik7Ci0gICAgICAgICAgICBUaW1l
c3RhbXBGaWVsZCA9IHN1YkJ1aWxkZXI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgY2FzZSA3NDogewotICAgICAgICAgICAgZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuV2VsbEtub3duVHlwZXMuVHlwZSBzdWJCdWlsZGVyID0gbmV3IGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLlR5cGUoKTsKLSAgICAgICAgICAgIGlmIChvbmVvZkZpZWxk
Q2FzZV8gPT0gT25lb2ZGaWVsZE9uZW9mQ2FzZS5UeXBlRmllbGQpIHsKLSAgICAgICAgICAgICAg
c3ViQnVpbGRlci5NZXJnZUZyb20oVHlwZUZpZWxkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlucHV0LlJlYWRNZXNzYWdlKHN1YkJ1aWxkZXIpOwotICAgICAgICAgICAgVHlwZUZpZWxk
ID0gc3ViQnVpbGRlcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBjYXNlIDgyOiB7Ci0gICAgICAgICAgICBEb3VibGVGaWVsZCA9IF9vbmVvZl9kb3VibGVGaWVs
ZF9jb2RlYy5SZWFkKGlucHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDkwOiB7Ci0gICAgICAgICAgICBGbG9hdEZpZWxkID0gX29uZW9mX2Zsb2F0
RmllbGRfY29kZWMuUmVhZChpbnB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgY2FzZSA5ODogewotICAgICAgICAgICAgSW50NjRGaWVsZCA9IF9vbmVvZl9p
bnQ2NEZpZWxkX2NvZGVjLlJlYWQoaW5wdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGNhc2UgMTA2OiB7Ci0gICAgICAgICAgICBVaW50NjRGaWVsZCA9IF9v
bmVvZl91aW50NjRGaWVsZF9jb2RlYy5SZWFkKGlucHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDExNDogewotICAgICAgICAgICAgSW50MzJGaWVs
ZCA9IF9vbmVvZl9pbnQzMkZpZWxkX2NvZGVjLlJlYWQoaW5wdXQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTIyOiB7Ci0gICAgICAgICAgICBVaW50
MzJGaWVsZCA9IF9vbmVvZl91aW50MzJGaWVsZF9jb2RlYy5SZWFkKGlucHV0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDEzMDogewotICAgICAgICAg
ICAgQm9vbEZpZWxkID0gX29uZW9mX2Jvb2xGaWVsZF9jb2RlYy5SZWFkKGlucHV0KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDEzODogewotICAgICAg
ICAgICAgU3RyaW5nRmllbGQgPSBfb25lb2Zfc3RyaW5nRmllbGRfY29kZWMuUmVhZChpbnB1dCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxNDY6IHsK
LSAgICAgICAgICAgIEJ5dGVzRmllbGQgPSBfb25lb2ZfYnl0ZXNGaWVsZF9jb2RlYy5SZWFkKGlu
cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIEEgbWFwIGZpZWxkIGZv
ciBlYWNoIHdlbGwta25vd24gdHlwZS4gV2Ugb25seQotICAvLy8gIG5lZWQgdG8gd29ycnkgYWJv
dXQgdGhlIHZhbHVlIHBhcnQgb2YgdGhlIG1hcCBiZWluZyB0aGUKLSAgLy8vICB3ZWxsLWtub3du
IHR5cGVzLCBhcyBtZXNzYWdlcyBjYW4ndCBiZSBtYXAga2V5cy4KLSAgLy8vIDwvc3VtbWFyeT4K
LSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1
dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIE1hcFdlbGxLbm93blR5cGVzIDog
cGI6OklNZXNzYWdlPE1hcFdlbGxLbm93blR5cGVzPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVh
ZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8TWFwV2VsbEtub3duVHlwZXM+IF9wYXJzZXIgPSBuZXcg
cGI6Ok1lc3NhZ2VQYXJzZXI8TWFwV2VsbEtub3duVHlwZXM+KCgpID0+IG5ldyBNYXBXZWxsS25v
d25UeXBlcygpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPE1hcFdlbGxL
bm93blR5cGVzPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJs
aWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQg
eyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvcy5Vbml0dGVzdFdlbGxL
bm93blR5cGVzUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1szXTsgfQotICAgIH0K
LQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3Igewot
ICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFw
V2VsbEtub3duVHlwZXMoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAg
IHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIE1hcFdlbGxLbm93
blR5cGVzKE1hcFdlbGxLbm93blR5cGVzIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBhbnlGaWVs
ZF8gPSBvdGhlci5hbnlGaWVsZF8uQ2xvbmUoKTsKLSAgICAgIGFwaUZpZWxkXyA9IG90aGVyLmFw
aUZpZWxkXy5DbG9uZSgpOwotICAgICAgZHVyYXRpb25GaWVsZF8gPSBvdGhlci5kdXJhdGlvbkZp
ZWxkXy5DbG9uZSgpOwotICAgICAgZW1wdHlGaWVsZF8gPSBvdGhlci5lbXB0eUZpZWxkXy5DbG9u
ZSgpOwotICAgICAgZmllbGRNYXNrRmllbGRfID0gb3RoZXIuZmllbGRNYXNrRmllbGRfLkNsb25l
KCk7Ci0gICAgICBzb3VyY2VDb250ZXh0RmllbGRfID0gb3RoZXIuc291cmNlQ29udGV4dEZpZWxk
Xy5DbG9uZSgpOwotICAgICAgc3RydWN0RmllbGRfID0gb3RoZXIuc3RydWN0RmllbGRfLkNsb25l
KCk7Ci0gICAgICB0aW1lc3RhbXBGaWVsZF8gPSBvdGhlci50aW1lc3RhbXBGaWVsZF8uQ2xvbmUo
KTsKLSAgICAgIHR5cGVGaWVsZF8gPSBvdGhlci50eXBlRmllbGRfLkNsb25lKCk7Ci0gICAgICBk
b3VibGVGaWVsZF8gPSBvdGhlci5kb3VibGVGaWVsZF8uQ2xvbmUoKTsKLSAgICAgIGZsb2F0Rmll
bGRfID0gb3RoZXIuZmxvYXRGaWVsZF8uQ2xvbmUoKTsKLSAgICAgIGludDY0RmllbGRfID0gb3Ro
ZXIuaW50NjRGaWVsZF8uQ2xvbmUoKTsKLSAgICAgIHVpbnQ2NEZpZWxkXyA9IG90aGVyLnVpbnQ2
NEZpZWxkXy5DbG9uZSgpOwotICAgICAgaW50MzJGaWVsZF8gPSBvdGhlci5pbnQzMkZpZWxkXy5D
bG9uZSgpOwotICAgICAgdWludDMyRmllbGRfID0gb3RoZXIudWludDMyRmllbGRfLkNsb25lKCk7
Ci0gICAgICBib29sRmllbGRfID0gb3RoZXIuYm9vbEZpZWxkXy5DbG9uZSgpOwotICAgICAgc3Ry
aW5nRmllbGRfID0gb3RoZXIuc3RyaW5nRmllbGRfLkNsb25lKCk7Ci0gICAgICBieXRlc0ZpZWxk
XyA9IG90aGVyLmJ5dGVzRmllbGRfLkNsb25lKCk7Ci0gICAgfQotCi0gICAgcHVibGljIE1hcFdl
bGxLbm93blR5cGVzIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBNYXBXZWxsS25vd25UeXBl
cyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
ImFueV9maWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQW55Rmll
bGRGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBG
aWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFueT4uQ29k
ZWMgX21hcF9hbnlGaWVsZF9jb2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwg
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQW55Pi5Db2RlYyhwYjo6Rmll
bGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgxOCwgZ2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQW55LlBhcnNlciksIDEwKTsKLSAgICBw
cml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5XZWxsS25vd25UeXBlcy5Bbnk+IGFueUZpZWxkXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwg
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQW55PigpOwotICAgIHB1Ymxp
YyBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMuQW55PiBBbnlGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gYW55RmllbGRfOyB9Ci0gICAg
fQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJhcGlfZmllbGQiIGZp
ZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEFwaUZpZWxkRmllbGROdW1iZXIg
PSAyOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGk+LkNvZGVjIF9tYXBfYXBpRmll
bGRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFwaT4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9ySW50
MzIoOCksIHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMTgsIGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLldlbGxLbm93blR5cGVzLkFwaS5QYXJzZXIpLCAxOCk7Ci0gICAgcHJpdmF0ZSByZWFkb25s
eSBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMuQXBpPiBhcGlGaWVsZF8gPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFwaT4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVs
ZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFwaT4gQXBpRmll
bGQgewotICAgICAgZ2V0IHsgcmV0dXJuIGFwaUZpZWxkXzsgfQotICAgIH0KLQotICAgIC8vLyA8
c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZHVyYXRpb25fZmllbGQiIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IER1cmF0aW9uRmllbGRGaWVsZE51bWJlciA9IDM7
Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9uPi5Db2RlYyBfbWFwX2R1cmF0
aW9uRmllbGRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9uPi5Db2RlYyhwYjo6RmllbGRD
b2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgxOCwgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRHVyYXRpb24uUGFyc2VyKSwgMjYpOwotICAg
IHByaXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9uPiBkdXJhdGlvbkZpZWxkXyA9IG5ldyBwYmM6Ok1h
cEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRHVyYXRp
b24+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5XZWxsS25vd25UeXBlcy5EdXJhdGlvbj4gRHVyYXRpb25GaWVsZCB7Ci0gICAgICBnZXQg
eyByZXR1cm4gZHVyYXRpb25GaWVsZF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgImVtcHR5X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVi
bGljIGNvbnN0IGludCBFbXB0eUZpZWxkRmllbGROdW1iZXIgPSA0OwotICAgIHByaXZhdGUgc3Rh
dGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5X
ZWxsS25vd25UeXBlcy5FbXB0eT4uQ29kZWMgX21hcF9lbXB0eUZpZWxkX2NvZGVjCi0gICAgICAg
ID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5FbXB0eT4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9ySW50MzIoOCksIHBiOjpGaWVs
ZENvZGVjLkZvck1lc3NhZ2UoMTgsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5
cGVzLkVtcHR5LlBhcnNlciksIDM0KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmll
bGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5FbXB0eT4gZW1w
dHlGaWVsZF8gPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LldlbGxLbm93blR5cGVzLkVtcHR5PigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxkPGludCwg
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRW1wdHk+IEVtcHR5RmllbGQg
ewotICAgICAgZ2V0IHsgcmV0dXJuIGVtcHR5RmllbGRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxz
dW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJmaWVsZF9tYXNrX2ZpZWxkIiBmaWVsZC48L3N1
bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBGaWVsZE1hc2tGaWVsZEZpZWxkTnVtYmVyID0g
NTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRmllbGRNYXNrPi5Db2RlYyBfbWFwX2Zp
ZWxkTWFza0ZpZWxkX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2s+LkNvZGVjKHBiOjpG
aWVsZENvZGVjLkZvckludDMyKDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDE4LCBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2suUGFyc2VyKSwgNDIp
OwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLkZpZWxkTWFzaz4gZmllbGRNYXNrRmllbGRfID0gbmV3
IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5GaWVsZE1hc2s+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2s+IEZpZWxkTWFza0ZpZWxkIHsK
LSAgICAgIGdldCB7IHJldHVybiBmaWVsZE1hc2tGaWVsZF87IH0KLSAgICB9Ci0KLSAgICAvLy8g
PHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInNvdXJjZV9jb250ZXh0X2ZpZWxkIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTb3VyY2VDb250ZXh0RmllbGRGaWVs
ZE51bWJlciA9IDY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxp
bnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlNvdXJjZUNvbnRleHQ+
LkNvZGVjIF9tYXBfc291cmNlQ29udGV4dEZpZWxkX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6
TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5Tb3Vy
Y2VDb250ZXh0Pi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29k
ZWMuRm9yTWVzc2FnZSgxOCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
U291cmNlQ29udGV4dC5QYXJzZXIpLCA1MCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1h
cEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU291cmNl
Q29udGV4dD4gc291cmNlQ29udGV4dEZpZWxkXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU291cmNlQ29udGV4dD4oKTsKLSAg
ICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzLlNvdXJjZUNvbnRleHQ+IFNvdXJjZUNvbnRleHRGaWVsZCB7Ci0gICAgICBnZXQg
eyByZXR1cm4gc291cmNlQ29udGV4dEZpZWxkXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic3RydWN0X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBTdHJ1Y3RGaWVsZEZpZWxkTnVtYmVyID0gNzsKLSAgICBwcml2
YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuU3RydWN0Pi5Db2RlYyBfbWFwX3N0cnVjdEZpZWxkX2NvZGVj
Ci0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5XZWxsS25vd25UeXBlcy5TdHJ1Y3Q+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvckludDMyKDgp
LCBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDE4LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5X
ZWxsS25vd25UeXBlcy5TdHJ1Y3QuUGFyc2VyKSwgNTgpOwotICAgIHByaXZhdGUgcmVhZG9ubHkg
cGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVz
LlN0cnVjdD4gc3RydWN0RmllbGRfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5TdHJ1Y3Q+KCk7Ci0gICAgcHVibGljIHBiYzo6
TWFwRmllbGQ8aW50LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5TdHJ1
Y3Q+IFN0cnVjdEZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBzdHJ1Y3RGaWVsZF87IH0KLSAg
ICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInRpbWVzdGFtcF9m
aWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVGltZXN0YW1wRmll
bGRGaWVsZE51bWJlciA9IDg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBG
aWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlRpbWVzdGFt
cD4uQ29kZWMgX21hcF90aW1lc3RhbXBGaWVsZF9jb2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1h
cEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVGltZXN0
YW1wPi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9y
TWVzc2FnZSgxOCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVGltZXN0
YW1wLlBhcnNlciksIDY2KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UaW1lc3RhbXA+IHRpbWVz
dGFtcEZpZWxkXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuV2VsbEtub3duVHlwZXMuVGltZXN0YW1wPigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZpZWxk
PGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVGltZXN0YW1wPiBU
aW1lc3RhbXBGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gdGltZXN0YW1wRmllbGRfOyB9Ci0g
ICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ0eXBlX2ZpZWxk
IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBUeXBlRmllbGRGaWVsZE51
bWJlciA9IDk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQs
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlR5cGU+LkNvZGVjIF9tYXBf
dHlwZUZpZWxkX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UeXBlPi5Db2RlYyhwYjo6RmllbGRDb2Rl
Yy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgxOCwgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVHlwZS5QYXJzZXIpLCA3NCk7Ci0gICAgcHJpdmF0
ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2Vs
bEtub3duVHlwZXMuVHlwZT4gdHlwZUZpZWxkXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVHlwZT4oKTsKLSAgICBwdWJsaWMg
cGJjOjpNYXBGaWVsZDxpbnQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVz
LlR5cGU+IFR5cGVGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gdHlwZUZpZWxkXzsgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZG91YmxlX2ZpZWxk
IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBEb3VibGVGaWVsZEZpZWxk
TnVtYmVyID0gMTA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxp
bnQsIGRvdWJsZT8+LkNvZGVjIF9tYXBfZG91YmxlRmllbGRfY29kZWMKLSAgICAgICAgPSBuZXcg
cGJjOjpNYXBGaWVsZDxpbnQsIGRvdWJsZT8+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvckludDMy
KDgpLCBwYjo6RmllbGRDb2RlYy5Gb3JTdHJ1Y3RXcmFwcGVyPGRvdWJsZT4oMTgpLCA4Mik7Ci0g
ICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgZG91YmxlPz4gZG91YmxlRmll
bGRfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBkb3VibGU/PigpOwotICAgIHB1YmxpYyBwYmM6
Ok1hcEZpZWxkPGludCwgZG91YmxlPz4gRG91YmxlRmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJu
IGRvdWJsZUZpZWxkXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAiZmxvYXRfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3Qg
aW50IEZsb2F0RmllbGRGaWVsZE51bWJlciA9IDExOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRv
bmx5IHBiYzo6TWFwRmllbGQ8aW50LCBmbG9hdD8+LkNvZGVjIF9tYXBfZmxvYXRGaWVsZF9jb2Rl
YwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZmxvYXQ/Pi5Db2RlYyhwYjo6Rmll
bGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9yU3RydWN0V3JhcHBlcjxmbG9h
dD4oMTgpLCA5MCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgZmxv
YXQ/PiBmbG9hdEZpZWxkXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgZmxvYXQ/PigpOwotICAg
IHB1YmxpYyBwYmM6Ok1hcEZpZWxkPGludCwgZmxvYXQ/PiBGbG9hdEZpZWxkIHsKLSAgICAgIGdl
dCB7IHJldHVybiBmbG9hdEZpZWxkXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAiaW50NjRfZmllbGQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IEludDY0RmllbGRGaWVsZE51bWJlciA9IDEyOwotICAgIHByaXZhdGUgc3Rh
dGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBsb25nPz4uQ29kZWMgX21hcF9pbnQ2NEZp
ZWxkX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBsb25nPz4uQ29kZWMo
cGI6OkZpZWxkQ29kZWMuRm9ySW50MzIoOCksIHBiOjpGaWVsZENvZGVjLkZvclN0cnVjdFdyYXBw
ZXI8bG9uZz4oMTgpLCA5OCk7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGlu
dCwgbG9uZz8+IGludDY0RmllbGRfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50LCBsb25nPz4oKTsK
LSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxpbnQsIGxvbmc/PiBJbnQ2NEZpZWxkIHsKLSAgICAg
IGdldCB7IHJldHVybiBpbnQ2NEZpZWxkXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAidWludDY0X2ZpZWxkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBVaW50NjRGaWVsZEZpZWxkTnVtYmVyID0gMTM7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIHVsb25nPz4uQ29kZWMgX21hcF91
aW50NjRGaWVsZF9jb2RlYwotICAgICAgICA9IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgdWxvbmc/
Pi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9yU3Ry
dWN0V3JhcHBlcjx1bG9uZz4oMTgpLCAxMDYpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpN
YXBGaWVsZDxpbnQsIHVsb25nPz4gdWludDY0RmllbGRfID0gbmV3IHBiYzo6TWFwRmllbGQ8aW50
LCB1bG9uZz8+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCB1bG9uZz8+IFVpbnQ2
NEZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiB1aW50NjRGaWVsZF87IH0KLSAgICB9Ci0KLSAg
ICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImludDMyX2ZpZWxkIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBJbnQzMkZpZWxkRmllbGROdW1iZXIgPSAx
NDsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgaW50Pz4u
Q29kZWMgX21hcF9pbnQzMkZpZWxkX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFwRmllbGQ8
aW50LCBpbnQ/Pi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29k
ZWMuRm9yU3RydWN0V3JhcHBlcjxpbnQ+KDE4KSwgMTE0KTsKLSAgICBwcml2YXRlIHJlYWRvbmx5
IHBiYzo6TWFwRmllbGQ8aW50LCBpbnQ/PiBpbnQzMkZpZWxkXyA9IG5ldyBwYmM6Ok1hcEZpZWxk
PGludCwgaW50Pz4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxpbnQsIGludD8+IEludDMy
RmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIGludDMyRmllbGRfOyB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ1aW50MzJfZmllbGQiIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFVpbnQzMkZpZWxkRmllbGROdW1iZXIgPSAx
NTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwgdWludD8+
LkNvZGVjIF9tYXBfdWludDMyRmllbGRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVs
ZDxpbnQsIHVpbnQ/Pi5Db2RlYyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxk
Q29kZWMuRm9yU3RydWN0V3JhcHBlcjx1aW50PigxOCksIDEyMik7Ci0gICAgcHJpdmF0ZSByZWFk
b25seSBwYmM6Ok1hcEZpZWxkPGludCwgdWludD8+IHVpbnQzMkZpZWxkXyA9IG5ldyBwYmM6Ok1h
cEZpZWxkPGludCwgdWludD8+KCk7Ci0gICAgcHVibGljIHBiYzo6TWFwRmllbGQ8aW50LCB1aW50
Pz4gVWludDMyRmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIHVpbnQzMkZpZWxkXzsgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiYm9vbF9maWVsZCIg
ZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQm9vbEZpZWxkRmllbGROdW1i
ZXIgPSAxNjsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYmM6Ok1hcEZpZWxkPGludCwg
Ym9vbD8+LkNvZGVjIF9tYXBfYm9vbEZpZWxkX2NvZGVjCi0gICAgICAgID0gbmV3IHBiYzo6TWFw
RmllbGQ8aW50LCBib29sPz4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9ySW50MzIoOCksIHBiOjpG
aWVsZENvZGVjLkZvclN0cnVjdFdyYXBwZXI8Ym9vbD4oMTgpLCAxMzApOwotICAgIHByaXZhdGUg
cmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxpbnQsIGJvb2w/PiBib29sRmllbGRfID0gbmV3IHBiYzo6
TWFwRmllbGQ8aW50LCBib29sPz4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxpbnQsIGJv
b2w/PiBCb29sRmllbGQgewotICAgICAgZ2V0IHsgcmV0dXJuIGJvb2xGaWVsZF87IH0KLSAgICB9
Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInN0cmluZ19maWVsZCIg
ZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU3RyaW5nRmllbGRGaWVsZE51
bWJlciA9IDE3OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50
LCBzdHJpbmc+LkNvZGVjIF9tYXBfc3RyaW5nRmllbGRfY29kZWMKLSAgICAgICAgPSBuZXcgcGJj
OjpNYXBGaWVsZDxpbnQsIHN0cmluZz4uQ29kZWMocGI6OkZpZWxkQ29kZWMuRm9ySW50MzIoOCks
IHBiOjpGaWVsZENvZGVjLkZvckNsYXNzV3JhcHBlcjxzdHJpbmc+KDE4KSwgMTM4KTsKLSAgICBw
cml2YXRlIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8aW50LCBzdHJpbmc+IHN0cmluZ0ZpZWxkXyA9
IG5ldyBwYmM6Ok1hcEZpZWxkPGludCwgc3RyaW5nPigpOwotICAgIHB1YmxpYyBwYmM6Ok1hcEZp
ZWxkPGludCwgc3RyaW5nPiBTdHJpbmdGaWVsZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gc3RyaW5n
RmllbGRfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJieXRlc19maWVsZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQnl0
ZXNGaWVsZEZpZWxkTnVtYmVyID0gMTg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGJj
OjpNYXBGaWVsZDxpbnQsIHBiOjpCeXRlU3RyaW5nPi5Db2RlYyBfbWFwX2J5dGVzRmllbGRfY29k
ZWMKLSAgICAgICAgPSBuZXcgcGJjOjpNYXBGaWVsZDxpbnQsIHBiOjpCeXRlU3RyaW5nPi5Db2Rl
YyhwYjo6RmllbGRDb2RlYy5Gb3JJbnQzMig4KSwgcGI6OkZpZWxkQ29kZWMuRm9yQ2xhc3NXcmFw
cGVyPHBiOjpCeXRlU3RyaW5nPigxOCksIDE0Nik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6
Ok1hcEZpZWxkPGludCwgcGI6OkJ5dGVTdHJpbmc+IGJ5dGVzRmllbGRfID0gbmV3IHBiYzo6TWFw
RmllbGQ8aW50LCBwYjo6Qnl0ZVN0cmluZz4oKTsKLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxp
bnQsIHBiOjpCeXRlU3RyaW5nPiBCeXRlc0ZpZWxkIHsKLSAgICAgIGdldCB7IHJldHVybiBieXRl
c0ZpZWxkXzsgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmpl
Y3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgTWFwV2VsbEtub3duVHlw
ZXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhNYXBXZWxsS25vd25UeXBlcyBv
dGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhl
ciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoIUFu
eUZpZWxkLkVxdWFscyhvdGhlci5BbnlGaWVsZCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICgh
QXBpRmllbGQuRXF1YWxzKG90aGVyLkFwaUZpZWxkKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KCFEdXJhdGlvbkZpZWxkLkVxdWFscyhvdGhlci5EdXJhdGlvbkZpZWxkKSkgcmV0dXJuIGZhbHNl
OwotICAgICAgaWYgKCFFbXB0eUZpZWxkLkVxdWFscyhvdGhlci5FbXB0eUZpZWxkKSkgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYgKCFGaWVsZE1hc2tGaWVsZC5FcXVhbHMob3RoZXIuRmllbGRNYXNr
RmllbGQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIVNvdXJjZUNvbnRleHRGaWVsZC5FcXVh
bHMob3RoZXIuU291cmNlQ29udGV4dEZpZWxkKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFT
dHJ1Y3RGaWVsZC5FcXVhbHMob3RoZXIuU3RydWN0RmllbGQpKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICBpZiAoIVRpbWVzdGFtcEZpZWxkLkVxdWFscyhvdGhlci5UaW1lc3RhbXBGaWVsZCkpIHJldHVy
biBmYWxzZTsKLSAgICAgIGlmICghVHlwZUZpZWxkLkVxdWFscyhvdGhlci5UeXBlRmllbGQpKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIURvdWJsZUZpZWxkLkVxdWFscyhvdGhlci5Eb3VibGVG
aWVsZCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghRmxvYXRGaWVsZC5FcXVhbHMob3RoZXIu
RmxvYXRGaWVsZCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghSW50NjRGaWVsZC5FcXVhbHMo
b3RoZXIuSW50NjRGaWVsZCkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghVWludDY0RmllbGQu
RXF1YWxzKG90aGVyLlVpbnQ2NEZpZWxkKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFJbnQz
MkZpZWxkLkVxdWFscyhvdGhlci5JbnQzMkZpZWxkKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KCFVaW50MzJGaWVsZC5FcXVhbHMob3RoZXIuVWludDMyRmllbGQpKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICBpZiAoIUJvb2xGaWVsZC5FcXVhbHMob3RoZXIuQm9vbEZpZWxkKSkgcmV0dXJuIGZhbHNl
OwotICAgICAgaWYgKCFTdHJpbmdGaWVsZC5FcXVhbHMob3RoZXIuU3RyaW5nRmllbGQpKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZiAoIUJ5dGVzRmllbGQuRXF1YWxzKG90aGVyLkJ5dGVzRmllbGQp
KSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
b3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAg
aGFzaCBePSBBbnlGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBBcGlGaWVsZC5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBEdXJhdGlvbkZpZWxkLkdldEhhc2hDb2RlKCk7
Ci0gICAgICBoYXNoIF49IEVtcHR5RmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0g
RmllbGRNYXNrRmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gU291cmNlQ29udGV4
dEZpZWxkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IFN0cnVjdEZpZWxkLkdldEhhc2hD
b2RlKCk7Ci0gICAgICBoYXNoIF49IFRpbWVzdGFtcEZpZWxkLkdldEhhc2hDb2RlKCk7Ci0gICAg
ICBoYXNoIF49IFR5cGVGaWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBEb3VibGVG
aWVsZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBGbG9hdEZpZWxkLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICBoYXNoIF49IEludDY0RmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2gg
Xj0gVWludDY0RmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gSW50MzJGaWVsZC5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBVaW50MzJGaWVsZC5HZXRIYXNoQ29kZSgpOwot
ICAgICAgaGFzaCBePSBCb29sRmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gU3Ry
aW5nRmllbGQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gQnl0ZXNGaWVsZC5HZXRIYXNo
Q29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRl
IHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0Rp
YWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBhbnlGaWVsZF8uV3JpdGVUbyhv
dXRwdXQsIF9tYXBfYW55RmllbGRfY29kZWMpOwotICAgICAgYXBpRmllbGRfLldyaXRlVG8ob3V0
cHV0LCBfbWFwX2FwaUZpZWxkX2NvZGVjKTsKLSAgICAgIGR1cmF0aW9uRmllbGRfLldyaXRlVG8o
b3V0cHV0LCBfbWFwX2R1cmF0aW9uRmllbGRfY29kZWMpOwotICAgICAgZW1wdHlGaWVsZF8uV3Jp
dGVUbyhvdXRwdXQsIF9tYXBfZW1wdHlGaWVsZF9jb2RlYyk7Ci0gICAgICBmaWVsZE1hc2tGaWVs
ZF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfZmllbGRNYXNrRmllbGRfY29kZWMpOwotICAgICAgc291
cmNlQ29udGV4dEZpZWxkXy5Xcml0ZVRvKG91dHB1dCwgX21hcF9zb3VyY2VDb250ZXh0RmllbGRf
Y29kZWMpOwotICAgICAgc3RydWN0RmllbGRfLldyaXRlVG8ob3V0cHV0LCBfbWFwX3N0cnVjdEZp
ZWxkX2NvZGVjKTsKLSAgICAgIHRpbWVzdGFtcEZpZWxkXy5Xcml0ZVRvKG91dHB1dCwgX21hcF90
aW1lc3RhbXBGaWVsZF9jb2RlYyk7Ci0gICAgICB0eXBlRmllbGRfLldyaXRlVG8ob3V0cHV0LCBf
bWFwX3R5cGVGaWVsZF9jb2RlYyk7Ci0gICAgICBkb3VibGVGaWVsZF8uV3JpdGVUbyhvdXRwdXQs
IF9tYXBfZG91YmxlRmllbGRfY29kZWMpOwotICAgICAgZmxvYXRGaWVsZF8uV3JpdGVUbyhvdXRw
dXQsIF9tYXBfZmxvYXRGaWVsZF9jb2RlYyk7Ci0gICAgICBpbnQ2NEZpZWxkXy5Xcml0ZVRvKG91
dHB1dCwgX21hcF9pbnQ2NEZpZWxkX2NvZGVjKTsKLSAgICAgIHVpbnQ2NEZpZWxkXy5Xcml0ZVRv
KG91dHB1dCwgX21hcF91aW50NjRGaWVsZF9jb2RlYyk7Ci0gICAgICBpbnQzMkZpZWxkXy5Xcml0
ZVRvKG91dHB1dCwgX21hcF9pbnQzMkZpZWxkX2NvZGVjKTsKLSAgICAgIHVpbnQzMkZpZWxkXy5X
cml0ZVRvKG91dHB1dCwgX21hcF91aW50MzJGaWVsZF9jb2RlYyk7Ci0gICAgICBib29sRmllbGRf
LldyaXRlVG8ob3V0cHV0LCBfbWFwX2Jvb2xGaWVsZF9jb2RlYyk7Ci0gICAgICBzdHJpbmdGaWVs
ZF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfc3RyaW5nRmllbGRfY29kZWMpOwotICAgICAgYnl0ZXNG
aWVsZF8uV3JpdGVUbyhvdXRwdXQsIF9tYXBfYnl0ZXNGaWVsZF9jb2RlYyk7Ci0gICAgfQotCi0g
ICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAg
ICAgc2l6ZSArPSBhbnlGaWVsZF8uQ2FsY3VsYXRlU2l6ZShfbWFwX2FueUZpZWxkX2NvZGVjKTsK
LSAgICAgIHNpemUgKz0gYXBpRmllbGRfLkNhbGN1bGF0ZVNpemUoX21hcF9hcGlGaWVsZF9jb2Rl
Yyk7Ci0gICAgICBzaXplICs9IGR1cmF0aW9uRmllbGRfLkNhbGN1bGF0ZVNpemUoX21hcF9kdXJh
dGlvbkZpZWxkX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gZW1wdHlGaWVsZF8uQ2FsY3VsYXRlU2l6
ZShfbWFwX2VtcHR5RmllbGRfY29kZWMpOwotICAgICAgc2l6ZSArPSBmaWVsZE1hc2tGaWVsZF8u
Q2FsY3VsYXRlU2l6ZShfbWFwX2ZpZWxkTWFza0ZpZWxkX2NvZGVjKTsKLSAgICAgIHNpemUgKz0g
c291cmNlQ29udGV4dEZpZWxkXy5DYWxjdWxhdGVTaXplKF9tYXBfc291cmNlQ29udGV4dEZpZWxk
X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gc3RydWN0RmllbGRfLkNhbGN1bGF0ZVNpemUoX21hcF9z
dHJ1Y3RGaWVsZF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHRpbWVzdGFtcEZpZWxkXy5DYWxjdWxh
dGVTaXplKF9tYXBfdGltZXN0YW1wRmllbGRfY29kZWMpOwotICAgICAgc2l6ZSArPSB0eXBlRmll
bGRfLkNhbGN1bGF0ZVNpemUoX21hcF90eXBlRmllbGRfY29kZWMpOwotICAgICAgc2l6ZSArPSBk
b3VibGVGaWVsZF8uQ2FsY3VsYXRlU2l6ZShfbWFwX2RvdWJsZUZpZWxkX2NvZGVjKTsKLSAgICAg
IHNpemUgKz0gZmxvYXRGaWVsZF8uQ2FsY3VsYXRlU2l6ZShfbWFwX2Zsb2F0RmllbGRfY29kZWMp
OwotICAgICAgc2l6ZSArPSBpbnQ2NEZpZWxkXy5DYWxjdWxhdGVTaXplKF9tYXBfaW50NjRGaWVs
ZF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHVpbnQ2NEZpZWxkXy5DYWxjdWxhdGVTaXplKF9tYXBf
dWludDY0RmllbGRfY29kZWMpOwotICAgICAgc2l6ZSArPSBpbnQzMkZpZWxkXy5DYWxjdWxhdGVT
aXplKF9tYXBfaW50MzJGaWVsZF9jb2RlYyk7Ci0gICAgICBzaXplICs9IHVpbnQzMkZpZWxkXy5D
YWxjdWxhdGVTaXplKF9tYXBfdWludDMyRmllbGRfY29kZWMpOwotICAgICAgc2l6ZSArPSBib29s
RmllbGRfLkNhbGN1bGF0ZVNpemUoX21hcF9ib29sRmllbGRfY29kZWMpOwotICAgICAgc2l6ZSAr
PSBzdHJpbmdGaWVsZF8uQ2FsY3VsYXRlU2l6ZShfbWFwX3N0cmluZ0ZpZWxkX2NvZGVjKTsKLSAg
ICAgIHNpemUgKz0gYnl0ZXNGaWVsZF8uQ2FsY3VsYXRlU2l6ZShfbWFwX2J5dGVzRmllbGRfY29k
ZWMpOwotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VG
cm9tKE1hcFdlbGxLbm93blR5cGVzIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkg
ewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBhbnlGaWVsZF8uQWRkKG90aGVyLmFu
eUZpZWxkXyk7Ci0gICAgICBhcGlGaWVsZF8uQWRkKG90aGVyLmFwaUZpZWxkXyk7Ci0gICAgICBk
dXJhdGlvbkZpZWxkXy5BZGQob3RoZXIuZHVyYXRpb25GaWVsZF8pOwotICAgICAgZW1wdHlGaWVs
ZF8uQWRkKG90aGVyLmVtcHR5RmllbGRfKTsKLSAgICAgIGZpZWxkTWFza0ZpZWxkXy5BZGQob3Ro
ZXIuZmllbGRNYXNrRmllbGRfKTsKLSAgICAgIHNvdXJjZUNvbnRleHRGaWVsZF8uQWRkKG90aGVy
LnNvdXJjZUNvbnRleHRGaWVsZF8pOwotICAgICAgc3RydWN0RmllbGRfLkFkZChvdGhlci5zdHJ1
Y3RGaWVsZF8pOwotICAgICAgdGltZXN0YW1wRmllbGRfLkFkZChvdGhlci50aW1lc3RhbXBGaWVs
ZF8pOwotICAgICAgdHlwZUZpZWxkXy5BZGQob3RoZXIudHlwZUZpZWxkXyk7Ci0gICAgICBkb3Vi
bGVGaWVsZF8uQWRkKG90aGVyLmRvdWJsZUZpZWxkXyk7Ci0gICAgICBmbG9hdEZpZWxkXy5BZGQo
b3RoZXIuZmxvYXRGaWVsZF8pOwotICAgICAgaW50NjRGaWVsZF8uQWRkKG90aGVyLmludDY0Rmll
bGRfKTsKLSAgICAgIHVpbnQ2NEZpZWxkXy5BZGQob3RoZXIudWludDY0RmllbGRfKTsKLSAgICAg
IGludDMyRmllbGRfLkFkZChvdGhlci5pbnQzMkZpZWxkXyk7Ci0gICAgICB1aW50MzJGaWVsZF8u
QWRkKG90aGVyLnVpbnQzMkZpZWxkXyk7Ci0gICAgICBib29sRmllbGRfLkFkZChvdGhlci5ib29s
RmllbGRfKTsKLSAgICAgIHN0cmluZ0ZpZWxkXy5BZGQob3RoZXIuc3RyaW5nRmllbGRfKTsKLSAg
ICAgIGJ5dGVzRmllbGRfLkFkZChvdGhlci5ieXRlc0ZpZWxkXyk7Ci0gICAgfQotCi0gICAgcHVi
bGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1
aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0g
ICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5w
dXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAx
MDogewotICAgICAgICAgICAgYW55RmllbGRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX2Fu
eUZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBhcGlGaWVsZF8uQWRkRW50cmllc0Zyb20oaW5wdXQs
IF9tYXBfYXBpRmllbGRfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgMjY6IHsKLSAgICAgICAgICAgIGR1cmF0aW9uRmllbGRfLkFkZEVudHJp
ZXNGcm9tKGlucHV0LCBfbWFwX2R1cmF0aW9uRmllbGRfY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMzQ6IHsKLSAgICAgICAgICAgIGVtcHR5
RmllbGRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX2VtcHR5RmllbGRfY29kZWMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDI6IHsKLSAgICAg
ICAgICAgIGZpZWxkTWFza0ZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9maWVsZE1h
c2tGaWVsZF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgY2FzZSA1MDogewotICAgICAgICAgICAgc291cmNlQ29udGV4dEZpZWxkXy5BZGRFbnRyaWVz
RnJvbShpbnB1dCwgX21hcF9zb3VyY2VDb250ZXh0RmllbGRfY29kZWMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNTg6IHsKLSAgICAgICAgICAgIHN0
cnVjdEZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9zdHJ1Y3RGaWVsZF9jb2RlYyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA2Njogewot
ICAgICAgICAgICAgdGltZXN0YW1wRmllbGRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX3Rp
bWVzdGFtcEZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDc0OiB7Ci0gICAgICAgICAgICB0eXBlRmllbGRfLkFkZEVudHJpZXNGcm9t
KGlucHV0LCBfbWFwX3R5cGVGaWVsZF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgY2FzZSA4MjogewotICAgICAgICAgICAgZG91YmxlRmllbGRfLkFk
ZEVudHJpZXNGcm9tKGlucHV0LCBfbWFwX2RvdWJsZUZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDkwOiB7Ci0gICAgICAgICAgICBm
bG9hdEZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9mbG9hdEZpZWxkX2NvZGVjKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDk4OiB7Ci0g
ICAgICAgICAgICBpbnQ2NEZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF9pbnQ2NEZp
ZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBj
YXNlIDEwNjogewotICAgICAgICAgICAgdWludDY0RmllbGRfLkFkZEVudHJpZXNGcm9tKGlucHV0
LCBfbWFwX3VpbnQ2NEZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgICBjYXNlIDExNDogewotICAgICAgICAgICAgaW50MzJGaWVsZF8uQWRkRW50
cmllc0Zyb20oaW5wdXQsIF9tYXBfaW50MzJGaWVsZF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxMjI6IHsKLSAgICAgICAgICAgIHVpbnQz
MkZpZWxkXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF91aW50MzJGaWVsZF9jb2RlYyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxMzA6IHsKLSAg
ICAgICAgICAgIGJvb2xGaWVsZF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9tYXBfYm9vbEZpZWxk
X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl
IDEzODogewotICAgICAgICAgICAgc3RyaW5nRmllbGRfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBf
bWFwX3N0cmluZ0ZpZWxkX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDE0NjogewotICAgICAgICAgICAgYnl0ZXNGaWVsZF8uQWRkRW50cmll
c0Zyb20oaW5wdXQsIF9tYXBfYnl0ZXNGaWVsZF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gICNlbmRy
ZWdpb24KLQotfQotCi0jZW5kcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvV2VsbEtub3duVHlwZXMvQW55VGVz
dC5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9XZWxsS25vd25UeXBlcy9BbnlU
ZXN0LmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjFiZTdkOWI5ZTQ3NGI4NzAx
ZGI2ZjgyYmExNmRkZDk4ODg3ZWI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYuVGVzdC9XZWxsS25vd25UeXBl
cy9BbnlUZXN0LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLe+7vyNyZWdpb24g
Q29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zOwot
dXNpbmcgTlVuaXQuRnJhbWV3b3JrOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzCi17Ci0gICAgcHVibGljIGNsYXNzIEFueVRlc3QKLSAgICB7Ci0gICAgICAgIFtU
ZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBQYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAg
dmFyIG1lc3NhZ2UgPSBTYW1wbGVNZXNzYWdlcy5DcmVhdGVGdWxsVGVzdEFsbFR5cGVzKCk7Ci0g
ICAgICAgICAgICB2YXIgYW55ID0gQW55LlBhY2sobWVzc2FnZSk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoInR5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs
bFR5cGVzIiwgYW55LlR5cGVVcmwpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3Nh
Z2UuQ2FsY3VsYXRlU2l6ZSgpLCBhbnkuVmFsdWUuTGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBQYWNrX1dpdGhDdXN0b21QcmVmaXgoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IFNhbXBsZU1lc3NhZ2VzLkNyZWF0
ZUZ1bGxUZXN0QWxsVHlwZXMoKTsKLSAgICAgICAgICAgIHZhciBhbnkgPSBBbnkuUGFjayhtZXNz
YWdlLCAiZm9vLmJhci9iYXoiKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgiZm9vLmJh
ci9iYXovcHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzIiwgYW55LlR5cGVVcmwpOwotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UuQ2FsY3VsYXRlU2l6ZSgpLCBhbnkuVmFs
dWUuTGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMg
dm9pZCBQYWNrX1dpdGhDdXN0b21QcmVmaXhUcmFpbGluZ1NsYXNoKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdmFyIG1lc3NhZ2UgPSBTYW1wbGVNZXNzYWdlcy5DcmVhdGVGdWxsVGVzdEFsbFR5
cGVzKCk7Ci0gICAgICAgICAgICB2YXIgYW55ID0gQW55LlBhY2sobWVzc2FnZSwgImZvby5iYXIv
YmF6LyIpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKCJmb28uYmFyL2Jhei9wcm90b2J1
Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMiLCBhbnkuVHlwZVVybCk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwobWVzc2FnZS5DYWxjdWxhdGVTaXplKCksIGFueS5WYWx1ZS5MZW5ndGgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFVucGFja19X
cm9uZ1R5cGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IFNhbXBsZU1l
c3NhZ2VzLkNyZWF0ZUZ1bGxUZXN0QWxsVHlwZXMoKTsKLSAgICAgICAgICAgIHZhciBhbnkgPSBB
bnkuUGFjayhtZXNzYWdlKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uPigoKSA9PiBhbnkuVW5wYWNrPFRlc3RPbmVvZj4oKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgVW5wYWNrX1N1Y2Nl
c3MoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IFNhbXBsZU1lc3NhZ2Vz
LkNyZWF0ZUZ1bGxUZXN0QWxsVHlwZXMoKTsKLSAgICAgICAgICAgIHZhciBhbnkgPSBBbnkuUGFj
ayhtZXNzYWdlKTsKLSAgICAgICAgICAgIHZhciB1bnBhY2tlZCA9IGFueS5VbnBhY2s8VGVzdEFs
bFR5cGVzPigpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UsIHVucGFja2Vk
KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBVbnBh
Y2tfQ3VzdG9tUHJlZml4X1N1Y2Nlc3MoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVz
c2FnZSA9IFNhbXBsZU1lc3NhZ2VzLkNyZWF0ZUZ1bGxUZXN0QWxsVHlwZXMoKTsKLSAgICAgICAg
ICAgIHZhciBhbnkgPSBBbnkuUGFjayhtZXNzYWdlLCAiZm9vLmJhci9iYXoiKTsKLSAgICAgICAg
ICAgIHZhciB1bnBhY2tlZCA9IGFueS5VbnBhY2s8VGVzdEFsbFR5cGVzPigpOwotICAgICAgICAg
ICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UsIHVucGFja2VkKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBUb1N0cmluZ19XaXRoVmFsdWVzKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBTYW1wbGVNZXNzYWdlcy5DcmVhdGVG
dWxsVGVzdEFsbFR5cGVzKCk7Ci0gICAgICAgICAgICB2YXIgYW55ID0gQW55LlBhY2sobWVzc2Fn
ZSk7Ci0gICAgICAgICAgICB2YXIgdGV4dCA9IGFueS5Ub1N0cmluZygpOwotICAgICAgICAgICAg
QXNzZXJ0LlRoYXQodGV4dCwgSXMuU3RyaW5nQ29udGFpbmluZygiXCJAdmFsdWVcIjogXCIiICsg
bWVzc2FnZS5Ub0J5dGVTdHJpbmcoKS5Ub0Jhc2U2NCgpICsgIlwiIikpOwotICAgICAgICB9Ci0K
LSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFRvU3RyaW5nX0VtcHR5KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdmFyIGFueSA9IG5ldyBBbnkoKTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbCgieyBcIkB0eXBlXCI6IFwiXCIsIFwiQHZhbHVlXCI6IFwiXCIgfSIsIGFu
eS5Ub1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJs
aWMgdm9pZCBUb1N0cmluZ19NZXNzYWdlQ29udGFpbmluZ0FueSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RXZWxsS25vd25UeXBlcyB7IEFueUZpZWxkID0g
bmV3IEFueSgpIH07Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoInsgXCJhbnlGaWVsZFwi
OiB7IFwiQHR5cGVcIjogXCJcIiwgXCJAdmFsdWVcIjogXCJcIiB9IH0iLCBtZXNzYWdlLlRvU3Ry
aW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi5UZXN0L1dlbGxLbm93blR5cGVzL0R1cmF0aW9uVGVzdC5jcyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3Ny
Yy9Hb29nbGUuUHJvdG9idWYuVGVzdC9XZWxsS25vd25UeXBlcy9EdXJhdGlvblRlc3QuY3MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MWZhZjgwZTA5NjBjM2ExYmQ2MTg3YmI2MGE2
OWQ2YjQwMGI1N2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1dlbGxLbm93blR5cGVzL0R1cmF0aW9u
VGVzdC5jcworKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi3vu78jcmVnaW9uIENvcHly
aWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotI2VuZHJlZ2lvbgotCi11c2luZyBOVW5pdC5GcmFtZXdvcms7Ci11c2luZyBTeXN0ZW07Ci0K
LW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMKLXsKLSAgICBwdWJsaWMg
Y2xhc3MgRHVyYXRpb25UZXN0Ci0gICAgewotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGlj
IHZvaWQgVG9UaW1lU3BhbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bChUaW1lU3Bhbi5Gcm9tU2Vjb25kcygxKSwgbmV3IER1cmF0aW9uIHsgU2Vjb25kcyA9IDEgfS5U
b1RpbWVTcGFuKCkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKFRpbWVTcGFuLkZyb21T
ZWNvbmRzKC0xKSwgbmV3IER1cmF0aW9uIHsgU2Vjb25kcyA9IC0xIH0uVG9UaW1lU3BhbigpKTsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKDEp
LCBuZXcgRHVyYXRpb24geyBOYW5vcyA9IDEwMDAwMDAgfS5Ub1RpbWVTcGFuKCkpOwotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoLTEpLCBuZXcg
RHVyYXRpb24geyBOYW5vcyA9IC0xMDAwMDAwIH0uVG9UaW1lU3BhbigpKTsKLSAgICAgICAgICAg
IEFzc2VydC5BcmVFcXVhbChUaW1lU3Bhbi5Gcm9tVGlja3MoMSksIG5ldyBEdXJhdGlvbiB7IE5h
bm9zID0gMTAwIH0uVG9UaW1lU3BhbigpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChU
aW1lU3Bhbi5Gcm9tVGlja3MoLTEpLCBuZXcgRHVyYXRpb24geyBOYW5vcyA9IC0xMDAgfS5Ub1Rp
bWVTcGFuKCkpOwotCi0gICAgICAgICAgICAvLyBSb3VuZGluZyBpcyB0b3dhcmRzIDAKLSAgICAg
ICAgICAgIEFzc2VydC5BcmVFcXVhbChUaW1lU3Bhbi5Gcm9tVGlja3MoMiksIG5ldyBEdXJhdGlv
biB7IE5hbm9zID0gMjUwIH0uVG9UaW1lU3BhbigpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVF
cXVhbChUaW1lU3Bhbi5Gcm9tVGlja3MoLTIpLCBuZXcgRHVyYXRpb24geyBOYW5vcyA9IC0yNTAg
fS5Ub1RpbWVTcGFuKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1
YmxpYyB2b2lkIEFkZGl0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKG5ldyBEdXJhdGlvbiB7IFNlY29uZHMgPSAyLCBOYW5vcyA9IDEwMDAwMDAwMCB9LAotICAg
ICAgICAgICAgICAgIG5ldyBEdXJhdGlvbiB7IFNlY29uZHMgPSAxLCBOYW5vcyA9IDYwMDAwMDAw
MCB9ICsgbmV3IER1cmF0aW9uIHsgTmFub3MgPSA1MDAwMDAwMDAgfSk7Ci0gICAgICAgICAgICBB
c3NlcnQuQXJlRXF1YWwobmV3IER1cmF0aW9uIHsgU2Vjb25kcyA9IC0yLCBOYW5vcyA9IC0xMDAw
MDAwMDAgfSwKLSAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb24geyBTZWNvbmRzID0gLTEsIE5h
bm9zID0gLTYwMDAwMDAwMCB9ICsgbmV3IER1cmF0aW9uIHsgTmFub3MgPSAtNTAwMDAwMDAwIH0p
OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG5ldyBEdXJhdGlvbiB7IFNlY29uZHMgPSAx
LCBOYW5vcyA9IDEwMDAwMDAwMCB9LAotICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbiB7IFNl
Y29uZHMgPSAxLCBOYW5vcyA9IDYwMDAwMDAwMCB9ICsgbmV3IER1cmF0aW9uIHsgTmFub3MgPSAt
NTAwMDAwMDAwIH0pOwotCi0gICAgICAgICAgICAvLyBOb24tbm9ybWFsaXplZCBkdXJhdGlvbnMs
IG9yIG5vbi1ub3JtYWxpemVkIGludGVybWVkaWF0ZSByZXN1bHRzCi0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwobmV3IER1cmF0aW9uIHsgU2Vjb25kcyA9IDEgfSwKLSAgICAgICAgICAgICAg
ICBuZXcgRHVyYXRpb24geyBTZWNvbmRzID0gMSwgTmFub3MgPSAtNTAwMDAwMDAwIH0gKyBuZXcg
RHVyYXRpb24geyBOYW5vcyA9IDUwMDAwMDAwMCB9KTsKLQotICAgICAgICAgICAgQXNzZXJ0LkFy
ZUVxdWFsKG5ldyBEdXJhdGlvbiB7IE5hbm9zID0gLTkwMDAwMDAwMCB9LAotICAgICAgICAgICAg
ICAgIG5ldyBEdXJhdGlvbiB7IFNlY29uZHMgPSAtMSwgTmFub3MgPSAtMTAwMDAwMDAwIH0gKyBu
ZXcgRHVyYXRpb24geyBOYW5vcyA9IDIwMDAwMDAwMCB9KTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbChuZXcgRHVyYXRpb24geyBOYW5vcyA9IDkwMDAwMDAwMCB9LAotICAgICAgICAgICAg
ICAgIG5ldyBEdXJhdGlvbiB7IFNlY29uZHMgPSAxLCBOYW5vcyA9IDEwMDAwMDAwMCB9ICsgbmV3
IER1cmF0aW9uIHsgTmFub3MgPSAtMjAwMDAwMDAwIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFN1YnRyYWN0aW9uKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG5ldyBEdXJhdGlvbiB7IFNlY29uZHMgPSAxLCBOYW5v
cyA9IDEwMDAwMDAwMCB9LAotICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbiB7IFNlY29uZHMg
PSAxLCBOYW5vcyA9IDYwMDAwMDAwMCB9IC0gbmV3IER1cmF0aW9uIHsgTmFub3MgPSA1MDAwMDAw
MDAgfSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobmV3IER1cmF0aW9uIHsgU2Vjb25k
cyA9IC0xLCBOYW5vcyA9IC0xMDAwMDAwMDAgfSwKLSAgICAgICAgICAgICAgICBuZXcgRHVyYXRp
b24geyBTZWNvbmRzID0gLTEsIE5hbm9zID0gLTYwMDAwMDAwMCB9IC0gbmV3IER1cmF0aW9uIHsg
TmFub3MgPSAtNTAwMDAwMDAwIH0pOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG5ldyBE
dXJhdGlvbiB7IFNlY29uZHMgPSAyLCBOYW5vcyA9IDEwMDAwMDAwMCB9LAotICAgICAgICAgICAg
ICAgIG5ldyBEdXJhdGlvbiB7IFNlY29uZHMgPSAxLCBOYW5vcyA9IDYwMDAwMDAwMCB9IC0gbmV3
IER1cmF0aW9uIHsgTmFub3MgPSAtNTAwMDAwMDAwIH0pOwotCi0gICAgICAgICAgICAvLyBOb24t
bm9ybWFsaXplZCBkdXJhdGlvbnMKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgRHVy
YXRpb24oKSwKLSAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb24geyBTZWNvbmRzID0gMSwgTmFu
b3MgPSAtNTAwMDAwMDAwIH0gLSBuZXcgRHVyYXRpb24geyBOYW5vcyA9IDUwMDAwMDAwMCB9KTsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgRHVyYXRpb24geyBTZWNvbmRzID0gMSB9
LAotICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbiB7IE5hbm9zID0gMjAwMDAwMDAwMCB9IC0g
bmV3IER1cmF0aW9uIHsgTmFub3MgPSAxMDAwMDAwMDAwIH0pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEZyb21UaW1lU3BhbigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgRHVyYXRpb24geyBTZWNvbmRzID0gMSB9
LCBEdXJhdGlvbi5Gcm9tVGltZVNwYW4oVGltZVNwYW4uRnJvbVNlY29uZHMoMSkpKTsKLSAgICAg
ICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgRHVyYXRpb24geyBOYW5vcyA9IER1cmF0aW9uLk5h
bm9zZWNvbmRzUGVyVGljayB9LCBEdXJhdGlvbi5Gcm9tVGltZVNwYW4oVGltZVNwYW4uRnJvbVRp
Y2tzKDEpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RDYXNl
KDAsIER1cmF0aW9uLk1heE5hbm9zZWNvbmRzICsgMSldCi0gICAgICAgIFtUZXN0Q2FzZSgwLCBE
dXJhdGlvbi5NaW5OYW5vc2Vjb25kcyAtIDEpXQotICAgICAgICBbVGVzdENhc2UoRHVyYXRpb24u
TWluU2Vjb25kcyAtIDEsIDApXQotICAgICAgICBbVGVzdENhc2UoRHVyYXRpb24uTWF4U2Vjb25k
cyArIDEsIDApXQotICAgICAgICBbVGVzdENhc2UoMSwgLTEpXQotICAgICAgICBbVGVzdENhc2Uo
LTEsIDEpXQotICAgICAgICBwdWJsaWMgdm9pZCBUb1RpbWVTcGFuX0ludmFsaWQobG9uZyBzZWNv
bmRzLCBpbnQgbmFub3NlY29uZHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBkdXJhdGlv
biA9IG5ldyBEdXJhdGlvbiB7IFNlY29uZHMgPSBzZWNvbmRzLCBOYW5vcyA9IG5hbm9zZWNvbmRz
IH07Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+
KCgpID0+IGR1cmF0aW9uLlRvVGltZVNwYW4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVz
dF0KLSAgICAgICAgW1Rlc3RDYXNlKDAsIER1cmF0aW9uLk1heE5hbm9zZWNvbmRzKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKDAsIER1cmF0aW9uLk1pbk5hbm9zZWNvbmRzKV0KLSAgICAgICAgW1Rlc3RD
YXNlKER1cmF0aW9uLk1pblNlY29uZHMsIER1cmF0aW9uLk1pbk5hbm9zZWNvbmRzKV0KLSAgICAg
ICAgW1Rlc3RDYXNlKER1cmF0aW9uLk1heFNlY29uZHMsIER1cmF0aW9uLk1heE5hbm9zZWNvbmRz
KV0KLSAgICAgICAgcHVibGljIHZvaWQgVG9UaW1lU3Bhbl9WYWxpZChsb25nIHNlY29uZHMsIGlu
dCBuYW5vc2Vjb25kcykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gT25seSB0ZXN0aW5nIHRo
YXQgdGhlc2UgdmFsdWVzIGRvbid0IHRocm93LCB1bmxpa2UgdGhlaXIgc2ltaWxhciB0ZXN0cyBp
biBUb1RpbWVTcGFuX0ludmFsaWQKLSAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IG5ldyBEdXJh
dGlvbiB7IFNlY29uZHMgPSBzZWNvbmRzLCBOYW5vcyA9IG5hbm9zZWNvbmRzIH07Ci0gICAgICAg
ICAgICBkdXJhdGlvbi5Ub1RpbWVTcGFuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0K
LSAgICAgICAgcHVibGljIHZvaWQgVG9TdHJpbmdfTm9uTm9ybWFsaXplZCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIEp1c3QgYSBzaW5nbGUgZXhhbXBsZSBzaG91bGQgYmUgc3VmZmljaWVu
dC4uLgotICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gbmV3IER1cmF0aW9uIHsgU2Vjb25kcyA9
IDEsIE5hbm9zID0gLTEgfTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgieyBcIkB3YXJu
aW5nXCI6IFwiSW52YWxpZCBEdXJhdGlvblwiLCBcInNlY29uZHNcIjogXCIxXCIsIFwibmFub3Nc
IjogLTEgfSIsIGR1cmF0aW9uLlRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1dlbGxLbm93blR5cGVzL0Zp
ZWxkTWFza1Rlc3QuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvV2VsbEtub3du
VHlwZXMvRmllbGRNYXNrVGVzdC5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODli
YzgyNzU5YzU5ZWE0MTUxNjU0ZGM3YTRiYTdkNzhjZmMzMjMxMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRl
c3QvV2VsbEtub3duVHlwZXMvRmllbGRNYXNrVGVzdC5jcworKysgL2Rldi9udWxsCkBAIC0xLDYy
ICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAxNiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLQotdXNpbmcgTlVuaXQu
RnJhbWV3b3JrOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzCi17
Ci0gICAgcHVibGljIGNsYXNzIEZpZWxkTWFza1Rlc3QKLSAgICB7Ci0gICAgICAgIFtUZXN0XQot
ICAgICAgICBbVGVzdENhc2UoImZvb19fYmFyIildCi0gICAgICAgIFtUZXN0Q2FzZSgiZm9vXzNf
YXIiKV0KLSAgICAgICAgW1Rlc3RDYXNlKCJmb29CYXIiKV0KLSAgICAgICAgcHVibGljIHZvaWQg
VG9TdHJpbmdfSW52YWxpZChzdHJpbmcgaW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZh
ciBtYXNrID0gbmV3IEZpZWxkTWFzayB7IFBhdGhzID0geyBpbnB1dCB9IH07Ci0gICAgICAgICAg
ICB2YXIgdGV4dCA9IG1hc2suVG9TdHJpbmcoKTsKLSAgICAgICAgICAgIC8vIE1vcmUgc3BlY2lm
aWMgdGVzdCBiZWxvdwotICAgICAgICAgICAgQXNzZXJ0LlRoYXQodGV4dCwgSXMuU3RyaW5nQ29u
dGFpbmluZygiQHdhcm5pbmciKSk7Ci0gICAgICAgICAgICBBc3NlcnQuVGhhdCh0ZXh0LCBJcy5T
dHJpbmdDb250YWluaW5nKGlucHV0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAg
ICAgICAgcHVibGljIHZvaWQgVG9TdHJpbmdfSW52YWxpZF9QcmVjaXNlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgdmFyIG1hc2sgPSBuZXcgRmllbGRNYXNrIHsgUGF0aHMgPSB7ICJ4IiwgImZv
b19fYmFyIiwgQCJ4XHkiIH0gfTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgKLSAgICAg
ICAgICAgICAgICAieyBcIkB3YXJuaW5nXCI6IFwiSW52YWxpZCBGaWVsZE1hc2tcIiwgXCJwYXRo
c1wiOiBbIFwieFwiLCBcImZvb19fYmFyXCIsIFwieFxcXFx5XCIgXSB9IiwKLSAgICAgICAgICAg
ICAgICBtYXNrLlRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9j
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1dlbGxLbm93blR5cGVzL1RpbWVzdGFtcFRl
c3QuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvV2VsbEtub3duVHlwZXMvVGlt
ZXN0YW1wVGVzdC5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVjZDI0YzYyYTVi
NjhmYTEwNThhZjViMmZmMWEyODVhYjU1ZTgxOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRlc3QvV2VsbEtu
b3duVHlwZXMvVGltZXN0YW1wVGVzdC5jcworKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBA
Ci3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBOVW5pdC5GcmFtZXdvcms7
Ci11c2luZyBTeXN0ZW07Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMKLXsKLSAgICBwdWJsaWMgY2xhc3MgVGltZXN0YW1wVGVzdAotICAgIHsKLSAgICAgICAgW1Rl
c3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEZyb21BbmRUb0RhdGVUaW1lKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgRGF0ZVRpbWUgdXRjTWluID0gRGF0ZVRpbWUuU3BlY2lmeUtpbmQoRGF0ZVRp
bWUuTWluVmFsdWUsIERhdGVUaW1lS2luZC5VdGMpOwotICAgICAgICAgICAgRGF0ZVRpbWUgdXRj
TWF4ID0gRGF0ZVRpbWUuU3BlY2lmeUtpbmQoRGF0ZVRpbWUuTWF4VmFsdWUsIERhdGVUaW1lS2lu
ZC5VdGMpOwotICAgICAgICAgICAgQXNzZXJ0Um91bmR0cmlwKG5ldyBUaW1lc3RhbXAgeyBTZWNv
bmRzID0gLTYyMTM1NTk2ODAwIH0sIHV0Y01pbik7Ci0gICAgICAgICAgICBBc3NlcnRSb3VuZHRy
aXAobmV3IFRpbWVzdGFtcCB7IFNlY29uZHMgPSAyNTM0MDIzMDA3OTksIE5hbm9zID0gOTk5OTk5
OTAwIH0sIHV0Y01heCk7Ci0gICAgICAgICAgICBBc3NlcnRSb3VuZHRyaXAobmV3IFRpbWVzdGFt
cCgpLCBuZXcgRGF0ZVRpbWUoMTk3MCwgMSwgMSwgMCwgMCwgMCwgRGF0ZVRpbWVLaW5kLlV0Yykp
OwotICAgICAgICAgICAgQXNzZXJ0Um91bmR0cmlwKG5ldyBUaW1lc3RhbXAgeyBOYW5vcyA9IDEw
MDAwMDB9LCBuZXcgRGF0ZVRpbWUoMTk3MCwgMSwgMSwgMCwgMCwgMCwgMSwgRGF0ZVRpbWVLaW5k
LlV0YykpOwotICAgICAgICAgICAgQXNzZXJ0Um91bmR0cmlwKG5ldyBUaW1lc3RhbXAgeyBTZWNv
bmRzID0gLTEsIE5hbm9zID0gOTk5MDAwMDAwIH0sIG5ldyBEYXRlVGltZSgxOTY5LCAxMiwgMzEs
IDIzLCA1OSwgNTksIDk5OSwgRGF0ZVRpbWVLaW5kLlV0YykpOwotICAgICAgICAgICAgQXNzZXJ0
Um91bmR0cmlwKG5ldyBUaW1lc3RhbXAgeyBTZWNvbmRzID0gMzYwMCB9LCBuZXcgRGF0ZVRpbWUo
MTk3MCwgMSwgMSwgMSwgMCwgMCwgRGF0ZVRpbWVLaW5kLlV0YykpOwotICAgICAgICAgICAgQXNz
ZXJ0Um91bmR0cmlwKG5ldyBUaW1lc3RhbXAgeyBTZWNvbmRzID0gLTM2MDAgfSwgbmV3IERhdGVU
aW1lKDE5NjksIDEyLCAzMSwgMjMsIDAsIDAsIERhdGVUaW1lS2luZC5VdGMpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBUb0RhdGVUaW1lVHJ1bmNh
dGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0MSA9IG5ldyBUaW1lc3RhbXAgeyBT
ZWNvbmRzID0gMSwgTmFub3MgPSAxMDAwMDAwICsgRHVyYXRpb24uTmFub3NlY29uZHNQZXJUaWNr
IC0gMSB9OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKG5ldyBEYXRlVGltZSgxOTcwLCAx
LCAxLCAwLCAwLCAxLCBEYXRlVGltZUtpbmQuVXRjKS5BZGRNaWxsaXNlY29uZHMoMSksIHQxLlRv
RGF0ZVRpbWUoKSk7Ci0KLSAgICAgICAgICAgIHZhciB0MiA9IG5ldyBUaW1lc3RhbXAgeyBTZWNv
bmRzID0gLTEsIE5hbm9zID0gMTAwMDAwMCArIER1cmF0aW9uLk5hbm9zZWNvbmRzUGVyVGljayAt
IDEgfTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChuZXcgRGF0ZVRpbWUoMTk2OSwgMTIs
IDMxLCAyMywgNTksIDU5KS5BZGRNaWxsaXNlY29uZHMoMSksIHQyLlRvRGF0ZVRpbWUoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAgW1Rlc3RDYXNlKFRpbWVzdGFtcC5V
bml4U2Vjb25kc0F0QmNsTWluVmFsdWUgLSAxLCBUaW1lc3RhbXAuTWF4TmFub3MpXQotICAgICAg
ICBbVGVzdENhc2UoVGltZXN0YW1wLlVuaXhTZWNvbmRzQXRCY2xNYXhWYWx1ZSArIDEsIDApXQot
ICAgICAgICBbVGVzdENhc2UoMCwgLTEpXQotICAgICAgICBbVGVzdENhc2UoMCwgVGltZXN0YW1w
Lk1heE5hbm9zICsgMSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFRvRGF0ZVRpbWVfT3V0T2ZSYW5n
ZShsb25nIHNlY29uZHMsIGludCBuYW5vc2Vjb25kcykKLSAgICAgICAgewotICAgICAgICAgICAg
dmFyIHZhbHVlID0gbmV3IFRpbWVzdGFtcCB7IFNlY29uZHMgPSBzZWNvbmRzLCBOYW5vcyA9IG5h
bm9zZWNvbmRzIH07Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRPcGVyYXRpb25F
eGNlcHRpb24+KCgpID0+IHZhbHVlLlRvRGF0ZVRpbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyAxbnMgbGFyZ2VyIG9yIHNtYWxsZXIgdGhhbiB0aGUgYWJvdmUgdmFsdWVzCi0gICAgICAg
IFtUZXN0XQotICAgICAgICBbVGVzdENhc2UoVGltZXN0YW1wLlVuaXhTZWNvbmRzQXRCY2xNaW5W
YWx1ZSwgMCldCi0gICAgICAgIFtUZXN0Q2FzZShUaW1lc3RhbXAuVW5peFNlY29uZHNBdEJjbE1h
eFZhbHVlLCBUaW1lc3RhbXAuTWF4TmFub3MpXQotICAgICAgICBbVGVzdENhc2UoMCwgMCldCi0g
ICAgICAgIFtUZXN0Q2FzZSgwLCBUaW1lc3RhbXAuTWF4TmFub3MpXQotICAgICAgICBwdWJsaWMg
dm9pZCBUb0RhdGVUaW1lX1ZhbGlkQm91bmRhcmllcyhsb25nIHNlY29uZHMsIGludCBuYW5vc2Vj
b25kcykKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHZhbHVlID0gbmV3IFRpbWVzdGFtcCB7
IFNlY29uZHMgPSBzZWNvbmRzLCBOYW5vcyA9IG5hbm9zZWNvbmRzIH07Ci0gICAgICAgICAgICB2
YWx1ZS5Ub0RhdGVUaW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyB2
b2lkIEFzc2VydFJvdW5kdHJpcChUaW1lc3RhbXAgdGltZXN0YW1wLCBEYXRlVGltZSBkYXRlVGlt
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHRpbWVzdGFtcCwgVGlt
ZXN0YW1wLkZyb21EYXRlVGltZShkYXRlVGltZSkpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKGRhdGVUaW1lLCB0aW1lc3RhbXAuVG9EYXRlVGltZSgpKTsKLSAgICAgICAgICAgIEFzc2Vy
dC5BcmVFcXVhbChEYXRlVGltZUtpbmQuVXRjLCB0aW1lc3RhbXAuVG9EYXRlVGltZSgpLktpbmQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEFyaXRo
bWV0aWMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBUaW1lc3RhbXAgdDEgPSBuZXcgVGltZXN0
YW1wIHsgU2Vjb25kcyA9IDEwMDAwLCBOYW5vcyA9IDUwMDAgfTsKLSAgICAgICAgICAgIFRpbWVz
dGFtcCB0MiA9IG5ldyBUaW1lc3RhbXAgeyBTZWNvbmRzID0gODAwMCwgTmFub3MgPSAxMDAwMCB9
OwotICAgICAgICAgICAgRHVyYXRpb24gZGlmZmVyZW5jZSA9IG5ldyBEdXJhdGlvbiB7IFNlY29u
ZHMgPSAxOTk5LCBOYW5vcyA9IER1cmF0aW9uLk5hbm9zZWNvbmRzUGVyU2Vjb25kIC0gNTAwMCB9
OwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKGRpZmZlcmVuY2UsIHQxIC0gdDIpOwotICAg
ICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKC1kaWZmZXJlbmNlLCB0MiAtIHQxKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHQxLCB0MiArIGRpZmZlcmVuY2UpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHQyLCB0MSAtIGRpZmZlcmVuY2UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFRvU3RyaW5nX05vbk5v
cm1hbGl6ZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBKdXN0IGEgc2luZ2xlIGV4YW1w
bGUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuLi4KLSAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IG5l
dyBUaW1lc3RhbXAgeyBTZWNvbmRzID0gMSwgTmFub3MgPSAtMSB9OwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKCJ7IFwiQHdhcm5pbmdcIjogXCJJbnZhbGlkIFRpbWVzdGFtcFwiLCBcInNl
Y29uZHNcIjogXCIxXCIsIFwibmFub3NcIjogLTEgfSIsIGR1cmF0aW9uLlRvU3RyaW5nKCkpOwot
ICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1
Zi5UZXN0L1dlbGxLbm93blR5cGVzL1dyYXBwZXJzVGVzdC5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYuVGVzdC9XZWxsS25vd25UeXBlcy9XcmFwcGVyc1Rlc3QuY3MKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDViNzE4NWRjZDJkYmFjNTg0NmJkMmMyNDIzOWM4Y2E0ZDEyNDli
MmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAv
c3JjL0dvb2dsZS5Qcm90b2J1Zi5UZXN0L1dlbGxLbm93blR5cGVzL1dyYXBwZXJzVGVzdC5jcwor
KysgL2Rldi9udWxsCkBAIC0xLDQyMSArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3Rp
Y2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJl
Z2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBHb29nbGUuUHJvdG9idWYuVGVzdFByb3RvczsK
LXVzaW5nIE5Vbml0LkZyYW1ld29yazsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKLXVzaW5n
IFN5c3RlbS5JTzsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcwot
ewotICAgIHB1YmxpYyBjbGFzcyBXcmFwcGVyc1Rlc3QKLSAgICB7Ci0gICAgICAgIFtUZXN0XQot
ICAgICAgICBwdWJsaWMgdm9pZCBOdWxsSXNEZWZhdWx0KCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVzdFdlbGxLbm93blR5cGVzKCk7Ci0gICAgICAgICAgICBB
c3NlcnQuSXNOdWxsKG1lc3NhZ2UuU3RyaW5nRmllbGQpOwotICAgICAgICAgICAgQXNzZXJ0Lklz
TnVsbChtZXNzYWdlLkJ5dGVzRmllbGQpOwotICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChtZXNz
YWdlLkJvb2xGaWVsZCk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNOdWxsKG1lc3NhZ2UuRmxvYXRG
aWVsZCk7Ci0gICAgICAgICAgICBBc3NlcnQuSXNOdWxsKG1lc3NhZ2UuRG91YmxlRmllbGQpOwot
ICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChtZXNzYWdlLkludDMyRmllbGQpOwotICAgICAgICAg
ICAgQXNzZXJ0LklzTnVsbChtZXNzYWdlLkludDY0RmllbGQpOwotICAgICAgICAgICAgQXNzZXJ0
LklzTnVsbChtZXNzYWdlLlVpbnQzMkZpZWxkKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc051bGwo
bWVzc2FnZS5VaW50NjRGaWVsZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAg
ICAgcHVibGljIHZvaWQgTm9uRGVmYXVsdFNpbmdsZVZhbHVlcygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RXZWxsS25vd25UeXBlcwotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIFN0cmluZ0ZpZWxkID0gIngiLAotICAgICAgICAgICAgICAgIEJ5
dGVzRmllbGQgPSBCeXRlU3RyaW5nLkNvcHlGcm9tKDEsIDIsIDMpLAotICAgICAgICAgICAgICAg
IEJvb2xGaWVsZCA9IHRydWUsCi0gICAgICAgICAgICAgICAgRmxvYXRGaWVsZCA9IDEyLjVmLAot
ICAgICAgICAgICAgICAgIERvdWJsZUZpZWxkID0gMTIuMjVkLAotICAgICAgICAgICAgICAgIElu
dDMyRmllbGQgPSAxLAotICAgICAgICAgICAgICAgIEludDY0RmllbGQgPSAyLAotICAgICAgICAg
ICAgICAgIFVpbnQzMkZpZWxkID0gMywKLSAgICAgICAgICAgICAgICBVaW50NjRGaWVsZCA9IDQK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHZhciBieXRlcyA9IG1lc3NhZ2UuVG9CeXRl
QXJyYXkoKTsKLSAgICAgICAgICAgIHZhciBwYXJzZWQgPSBUZXN0V2VsbEtub3duVHlwZXMuUGFy
c2VyLlBhcnNlRnJvbShieXRlcyk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgieCIs
IHBhcnNlZC5TdHJpbmdGaWVsZCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoQnl0ZVN0
cmluZy5Db3B5RnJvbSgxLCAyLCAzKSwgcGFyc2VkLkJ5dGVzRmllbGQpOwotICAgICAgICAgICAg
QXNzZXJ0LkFyZUVxdWFsKHRydWUsIHBhcnNlZC5Cb29sRmllbGQpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKDEyLjVmLCBwYXJzZWQuRmxvYXRGaWVsZCk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoMTIuMjVkLCBwYXJzZWQuRG91YmxlRmllbGQpOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKDEsIHBhcnNlZC5JbnQzMkZpZWxkKTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbCgyTCwgcGFyc2VkLkludDY0RmllbGQpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVx
dWFsKDNVLCBwYXJzZWQuVWludDMyRmllbGQpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFs
KDRVTCwgcGFyc2VkLlVpbnQ2NEZpZWxkKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQot
ICAgICAgICBwdWJsaWMgdm9pZCBOb25OdWxsRGVmYXVsdElzUHJlc2VydmVkVGhyb3VnaFNlcmlh
bGl6YXRpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyBUZXN0
V2VsbEtub3duVHlwZXMKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdGaWVs
ZCA9ICIiLAotICAgICAgICAgICAgICAgIEJ5dGVzRmllbGQgPSBCeXRlU3RyaW5nLkVtcHR5LAot
ICAgICAgICAgICAgICAgIEJvb2xGaWVsZCA9IGZhbHNlLAotICAgICAgICAgICAgICAgIEZsb2F0
RmllbGQgPSAwZiwKLSAgICAgICAgICAgICAgICBEb3VibGVGaWVsZCA9IDBkLAotICAgICAgICAg
ICAgICAgIEludDMyRmllbGQgPSAwLAotICAgICAgICAgICAgICAgIEludDY0RmllbGQgPSAwLAot
ICAgICAgICAgICAgICAgIFVpbnQzMkZpZWxkID0gMCwKLSAgICAgICAgICAgICAgICBVaW50NjRG
aWVsZCA9IDAKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHZhciBieXRlcyA9IG1lc3Nh
Z2UuVG9CeXRlQXJyYXkoKTsKLSAgICAgICAgICAgIHZhciBwYXJzZWQgPSBUZXN0V2VsbEtub3du
VHlwZXMuUGFyc2VyLlBhcnNlRnJvbShieXRlcyk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5BcmVF
cXVhbCgiIiwgcGFyc2VkLlN0cmluZ0ZpZWxkKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bChCeXRlU3RyaW5nLkVtcHR5LCBwYXJzZWQuQnl0ZXNGaWVsZCk7Ci0gICAgICAgICAgICBBc3Nl
cnQuQXJlRXF1YWwoZmFsc2UsIHBhcnNlZC5Cb29sRmllbGQpOwotICAgICAgICAgICAgQXNzZXJ0
LkFyZUVxdWFsKDBmLCBwYXJzZWQuRmxvYXRGaWVsZCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoMGQsIHBhcnNlZC5Eb3VibGVGaWVsZCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwoMCwgcGFyc2VkLkludDMyRmllbGQpOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDBM
LCBwYXJzZWQuSW50NjRGaWVsZCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMFUsIHBh
cnNlZC5VaW50MzJGaWVsZCk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMFVMLCBwYXJz
ZWQuVWludDY0RmllbGQpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1Rlc3RdCi0gICAgICAgIHB1
YmxpYyB2b2lkIFJlcGVhdGVkV3JhcHBlcnNQcm9oaWJpdE51bGxJdGVtcygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFJlcGVhdGVkV2VsbEtub3duVHlwZXMoKTsK
LSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnROdWxsRXhjZXB0aW9uPigoKSA9PiBt
ZXNzYWdlLkJvb2xGaWVsZC5BZGQoKGJvb2w/KSBudWxsKSk7Ci0gICAgICAgICAgICBBc3NlcnQu
VGhyb3dzPEFyZ3VtZW50TnVsbEV4Y2VwdGlvbj4oKCkgPT4gbWVzc2FnZS5JbnQzMkZpZWxkLkFk
ZCgoaW50PykgbnVsbCkpOwotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE51bGxF
eGNlcHRpb24+KCgpID0+IG1lc3NhZ2UuU3RyaW5nRmllbGQuQWRkKChzdHJpbmcpIG51bGwpKTsK
LSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnROdWxsRXhjZXB0aW9uPigoKSA9PiBt
ZXNzYWdlLkJ5dGVzRmllbGQuQWRkKChCeXRlU3RyaW5nKSBudWxsKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgUmVwZWF0ZWRXcmFwcGVyc1Nlcmlh
bGl6ZURlc2VyaWFsaXplKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBu
ZXcgUmVwZWF0ZWRXZWxsS25vd25UeXBlcwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEJvb2xGaWVsZCA9IHsgdHJ1ZSwgZmFsc2UgfSwKLSAgICAgICAgICAgICAgICBCeXRlc0ZpZWxk
ID0geyBCeXRlU3RyaW5nLkNvcHlGcm9tKDEsIDIsIDMpLCBCeXRlU3RyaW5nLkNvcHlGcm9tKDQs
IDUsIDYpLCBCeXRlU3RyaW5nLkVtcHR5IH0sCi0gICAgICAgICAgICAgICAgRG91YmxlRmllbGQg
PSB7IDEyLjUsIC0xLjUsIDBkIH0sCi0gICAgICAgICAgICAgICAgRmxvYXRGaWVsZCA9IHsgMTIz
LjI1ZiwgLTIwZiwgMGYgfSwKLSAgICAgICAgICAgICAgICBJbnQzMkZpZWxkID0geyBpbnQuTWF4
VmFsdWUsIGludC5NaW5WYWx1ZSwgMCB9LAotICAgICAgICAgICAgICAgIEludDY0RmllbGQgPSB7
IGxvbmcuTWF4VmFsdWUsIGxvbmcuTWluVmFsdWUsIDBMIH0sICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIFN0cmluZ0ZpZWxkID0geyAiRmlyc3QiLCAiU2Vjb25kIiwgIiIgfSwKLSAg
ICAgICAgICAgICAgICBVaW50MzJGaWVsZCA9IHsgdWludC5NYXhWYWx1ZSwgdWludC5NaW5WYWx1
ZSwgMFUgfSwKLSAgICAgICAgICAgICAgICBVaW50NjRGaWVsZCA9IHsgdWxvbmcuTWF4VmFsdWUs
IHVsb25nLk1pblZhbHVlLCAwVUwgfSwKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB2YXIg
Ynl0ZXMgPSBtZXNzYWdlLlRvQnl0ZUFycmF5KCk7Ci0gICAgICAgICAgICB2YXIgcGFyc2VkID0g
UmVwZWF0ZWRXZWxsS25vd25UeXBlcy5QYXJzZXIuUGFyc2VGcm9tKGJ5dGVzKTsKLQotICAgICAg
ICAgICAgQXNzZXJ0LkFyZUVxdWFsKG1lc3NhZ2UsIHBhcnNlZCk7Ci0gICAgICAgICAgICAvLyBK
dXN0IHRvIHRlc3QgYSBzaW5nbGUgdmFsdWUgZm9yIHNhbml0eS4uLgotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKCJTZWNvbmQiLCBtZXNzYWdlLlN0cmluZ0ZpZWxkWzFdKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBSZXBlYXRlZFdyYXBwZXJz
QmluYXJ5Rm9ybWF0KCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQXQgb25lIHBvaW50IHdl
IGFjY2lkZW50YWxseSB1c2VkIGEgcGFja2VkIGZvcm1hdCBmb3IgcmVwZWF0ZWQgd3JhcHBlcnMs
IHdoaWNoIGlzIHdyb25nIChhbmQgd2VpcmQpLgotICAgICAgICAgICAgLy8gVGhpcyB0ZXN0IGlz
IGp1c3QgdG8gcHJvdmUgdGhhdCB3ZSB1c2UgdGhlIHJpZ2h0IGZvcm1hdC4KLQotICAgICAgICAg
ICAgdmFyIHJhd091dHB1dCA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIHZhciBv
dXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0ocmF3T3V0cHV0KTsKLSAgICAgICAgICAgIC8v
IFdyaXRlIGEgdmFsdWUgb2YgNQotICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKFJlcGVhdGVk
V2VsbEtub3duVHlwZXMuSW50MzJGaWVsZEZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldpcmVUeXBl
Lkxlbmd0aERlbGltaXRlZCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVMZW5ndGgoMik7Ci0g
ICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoV3JhcHBlcnNSZWZsZWN0aW9uLldyYXBwZXJWYWx1
ZUZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAgICBv
dXRwdXQuV3JpdGVJbnQzMig1KTsKLSAgICAgICAgICAgIC8vIFdyaXRlIGEgdmFsdWUgb2YgMCAo
ZW1wdHkgbWVzc2FnZSkKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZyhSZXBlYXRlZFdlbGxL
bm93blR5cGVzLkludDMyRmllbGRGaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XaXJlVHlwZS5MZW5n
dGhEZWxpbWl0ZWQpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlTGVuZ3RoKDApOwotICAgICAg
ICAgICAgb3V0cHV0LkZsdXNoKCk7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRCeXRlcyA9IHJh
d091dHB1dC5Ub0FycmF5KCk7Ci0KLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFJlcGVh
dGVkV2VsbEtub3duVHlwZXMgeyBJbnQzMkZpZWxkID0geyA1LCAwIH0gfTsKLSAgICAgICAgICAg
IHZhciBhY3R1YWxCeXRlcyA9IG1lc3NhZ2UuVG9CeXRlQXJyYXkoKTsKLSAgICAgICAgICAgIEFz
c2VydC5BcmVFcXVhbChleHBlY3RlZEJ5dGVzLCBhY3R1YWxCeXRlcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgTWFwV3JhcHBlcnNTZXJpYWxpemVE
ZXNlcmlhbGl6ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vdGU6IG5vIG51bGwgdmFs
dWVzIGhlcmUsIGFzIHRoZXkgYXJlIHByb2hpYml0ZWQgaW4gbWFwIGZpZWxkcwotICAgICAgICAg
ICAgLy8gKGRlc3BpdGUgYmVpbmcgcmVwcmVzZW50YWJsZSkuCi0gICAgICAgICAgICB2YXIgbWVz
c2FnZSA9IG5ldyBNYXBXZWxsS25vd25UeXBlcwotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEJvb2xGaWVsZCA9IHsgeyAxMCwgZmFsc2UgfSwgeyAyMCwgdHJ1ZSB9IH0sCi0gICAgICAg
ICAgICAgICAgQnl0ZXNGaWVsZCA9IHsKLSAgICAgICAgICAgICAgICAgICAgeyAtMSwgQnl0ZVN0
cmluZy5Db3B5RnJvbSgxLCAyLCAzKSB9LAotICAgICAgICAgICAgICAgICAgICB7IDEwLCBCeXRl
U3RyaW5nLkNvcHlGcm9tKDQsIDUsIDYpIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgMTAwMCwg
Qnl0ZVN0cmluZy5FbXB0eSB9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
RG91YmxlRmllbGQgPSB7IHsgMSwgMTIuNSB9LCB7IDEwLCAtMS41IH0sIHsgMjAsIDBkIH0gfSwK
LSAgICAgICAgICAgICAgICBGbG9hdEZpZWxkID0geyB7IDIsIDEyMy4yNWYgfSwgeyAzLCAtMjBm
IH0sIHsgNCwgMGYgfSB9LAotICAgICAgICAgICAgICAgIEludDMyRmllbGQgPSB7IHsgNSwgaW50
Lk1heFZhbHVlIH0sIHsgNiwgaW50Lk1pblZhbHVlIH0sIHsgNywgMCB9IH0sCi0gICAgICAgICAg
ICAgICAgSW50NjRGaWVsZCA9IHsgeyA4LCBsb25nLk1heFZhbHVlIH0sIHsgOSwgbG9uZy5NaW5W
YWx1ZSB9LCB7IDEwLCAwTCB9IH0sCi0gICAgICAgICAgICAgICAgU3RyaW5nRmllbGQgPSB7IHsg
MTEsICJGaXJzdCIgfSwgeyAxMiwgIlNlY29uZCIgfSwgeyAxMywgIiIgfSB9LAotICAgICAgICAg
ICAgICAgIFVpbnQzMkZpZWxkID0geyB7IDE1LCB1aW50Lk1heFZhbHVlIH0sIHsgMTYsIHVpbnQu
TWluVmFsdWUgfSwgeyAxNywgMFUgfSB9LAotICAgICAgICAgICAgICAgIFVpbnQ2NEZpZWxkID0g
eyB7IDE4LCB1bG9uZy5NYXhWYWx1ZSB9LCB7IDE5LCB1bG9uZy5NaW5WYWx1ZSB9LCB7IDIwLCAw
VUwgfSB9LAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgdmFyIGJ5dGVzID0gbWVzc2Fn
ZS5Ub0J5dGVBcnJheSgpOwotICAgICAgICAgICAgdmFyIHBhcnNlZCA9IE1hcFdlbGxLbm93blR5
cGVzLlBhcnNlci5QYXJzZUZyb20oYnl0ZXMpOwotCi0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1
YWwobWVzc2FnZSwgcGFyc2VkKTsKLSAgICAgICAgICAgIC8vIEp1c3QgdG8gdGVzdCBhIHNpbmds
ZSB2YWx1ZSBmb3Igc2FuaXR5Li4uCi0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoIlNlY29u
ZCIsIG1lc3NhZ2UuU3RyaW5nRmllbGRbMTJdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0
XQotICAgICAgICBwdWJsaWMgdm9pZCBSZWZsZWN0aW9uX1NpbmdsZVZhbHVlcygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFRlc3RXZWxsS25vd25UeXBlcwotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZ0ZpZWxkID0gIngiLAotICAgICAgICAg
ICAgICAgIEJ5dGVzRmllbGQgPSBCeXRlU3RyaW5nLkNvcHlGcm9tKDEsIDIsIDMpLAotICAgICAg
ICAgICAgICAgIEJvb2xGaWVsZCA9IHRydWUsCi0gICAgICAgICAgICAgICAgRmxvYXRGaWVsZCA9
IDEyLjVmLAotICAgICAgICAgICAgICAgIERvdWJsZUZpZWxkID0gMTIuMjVkLAotICAgICAgICAg
ICAgICAgIEludDMyRmllbGQgPSAxLAotICAgICAgICAgICAgICAgIEludDY0RmllbGQgPSAyLAot
ICAgICAgICAgICAgICAgIFVpbnQzMkZpZWxkID0gMywKLSAgICAgICAgICAgICAgICBVaW50NjRG
aWVsZCA9IDQKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB2YXIgZmllbGRzID0gVGVzdFdl
bGxLbm93blR5cGVzLkRlc2NyaXB0b3IuRmllbGRzOwotCi0gICAgICAgICAgICBBc3NlcnQuQXJl
RXF1YWwoIngiLCBmaWVsZHNbVGVzdFdlbGxLbm93blR5cGVzLlN0cmluZ0ZpZWxkRmllbGROdW1i
ZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVF
cXVhbChCeXRlU3RyaW5nLkNvcHlGcm9tKDEsIDIsIDMpLCBmaWVsZHNbVGVzdFdlbGxLbm93blR5
cGVzLkJ5dGVzRmllbGRGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUobWVzc2FnZSkpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKHRydWUsIGZpZWxkc1tUZXN0V2VsbEtub3duVHlw
ZXMuQm9vbEZpZWxkRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxMi41ZiwgZmllbGRzW1Rlc3RXZWxsS25vd25UeXBl
cy5GbG9hdEZpZWxkRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpKTsKLSAg
ICAgICAgICAgIEFzc2VydC5BcmVFcXVhbCgxMi4yNWQsIGZpZWxkc1tUZXN0V2VsbEtub3duVHlw
ZXMuRG91YmxlRmllbGRGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUobWVzc2FnZSkpOwot
ICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDEsIGZpZWxkc1tUZXN0V2VsbEtub3duVHlwZXMu
SW50MzJGaWVsZEZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoMkwsIGZpZWxkc1tUZXN0V2VsbEtub3duVHlwZXMuSW50
NjRGaWVsZEZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0gICAgICAg
ICAgICBBc3NlcnQuQXJlRXF1YWwoM1UsIGZpZWxkc1tUZXN0V2VsbEtub3duVHlwZXMuVWludDMy
RmllbGRGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUobWVzc2FnZSkpOwotICAgICAgICAg
ICAgQXNzZXJ0LkFyZUVxdWFsKDRVTCwgZmllbGRzW1Rlc3RXZWxsS25vd25UeXBlcy5VaW50NjRG
aWVsZEZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKSk7Ci0KLSAgICAgICAg
ICAgIC8vIEFuZCBhIGNvdXBsZSBvZiBudWxsIGZpZWxkcy4uLgotICAgICAgICAgICAgbWVzc2Fn
ZS5TdHJpbmdGaWVsZCA9IG51bGw7Ci0gICAgICAgICAgICBtZXNzYWdlLkZsb2F0RmllbGQgPSBu
dWxsOwotICAgICAgICAgICAgQXNzZXJ0LklzTnVsbChmaWVsZHNbVGVzdFdlbGxLbm93blR5cGVz
LlN0cmluZ0ZpZWxkRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpKTsKLSAg
ICAgICAgICAgIEFzc2VydC5Jc051bGwoZmllbGRzW1Rlc3RXZWxsS25vd25UeXBlcy5GbG9hdEZp
ZWxkRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBSZWZsZWN0aW9uX1JlcGVhdGVk
RmllbGRzKCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSnVzdCBhIHNpbmdsZSBleGFtcGxl
Li4uIG5vdGUgdGhhdCB3ZSBjYW4ndCBoYXZlIGEgbnVsbCB2YWx1ZSBoZXJlCi0gICAgICAgICAg
ICB2YXIgbWVzc2FnZSA9IG5ldyBSZXBlYXRlZFdlbGxLbm93blR5cGVzIHsgSW50MzJGaWVsZCA9
IHsgMSwgMiB9IH07Ci0gICAgICAgICAgICB2YXIgZmllbGRzID0gUmVwZWF0ZWRXZWxsS25vd25U
eXBlcy5EZXNjcmlwdG9yLkZpZWxkczsKLSAgICAgICAgICAgIHZhciBsaXN0ID0gKElMaXN0KSBm
aWVsZHNbUmVwZWF0ZWRXZWxsS25vd25UeXBlcy5JbnQzMkZpZWxkRmllbGROdW1iZXJdLkFjY2Vz
c29yLkdldFZhbHVlKG1lc3NhZ2UpOwotICAgICAgICAgICAgQ29sbGVjdGlvbkFzc2VydC5BcmVF
cXVhbChuZXdbXSB7IDEsIDIgfSwgbGlzdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0K
LSAgICAgICAgcHVibGljIHZvaWQgUmVmbGVjdGlvbl9NYXBGaWVsZHMoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyBKdXN0IGEgc2luZ2xlIGV4YW1wbGUuLi4gbm90ZSB0aGF0IHdlIGNhbid0
IGhhdmUgYSBudWxsIHZhbHVlIGhlcmUgZGVzcGl0ZSB0aGUgdmFsdWUgdHlwZSBiZWluZyBpbnQ/
Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyBNYXBXZWxsS25vd25UeXBlcyB7IEludDMy
RmllbGQgPSB7IHsgMSwgMiB9IH0gfTsKLSAgICAgICAgICAgIHZhciBmaWVsZHMgPSBNYXBXZWxs
S25vd25UeXBlcy5EZXNjcmlwdG9yLkZpZWxkczsKLSAgICAgICAgICAgIHZhciBkaWN0aW9uYXJ5
ID0gKElEaWN0aW9uYXJ5KSBmaWVsZHNbTWFwV2VsbEtub3duVHlwZXMuSW50MzJGaWVsZEZpZWxk
TnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbCgyLCBkaWN0aW9uYXJ5WzFdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUZXN0XQot
ICAgICAgICBwdWJsaWMgdm9pZCBPbmVvZigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBt
ZXNzYWdlID0gbmV3IE9uZW9mV2VsbEtub3duVHlwZXMgeyBFbXB0eUZpZWxkID0gbmV3IEVtcHR5
KCkgfTsKLSAgICAgICAgICAgIC8vIFN0YXJ0IG9mZiB3aXRoIGEgbm9uLXdyYXBwZXIKLSAgICAg
ICAgICAgIEFzc2VydC5BcmVFcXVhbChPbmVvZldlbGxLbm93blR5cGVzLk9uZW9mRmllbGRPbmVv
ZkNhc2UuRW1wdHlGaWVsZCwgbWVzc2FnZS5PbmVvZkZpZWxkQ2FzZSk7Ci0gICAgICAgICAgICBB
c3NlcnRPbmVvZlJvdW5kVHJpcChtZXNzYWdlKTsKLQotICAgICAgICAgICAgbWVzc2FnZS5TdHJp
bmdGaWVsZCA9ICJmb28iOwotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKE9uZW9mV2VsbEtu
b3duVHlwZXMuT25lb2ZGaWVsZE9uZW9mQ2FzZS5TdHJpbmdGaWVsZCwgbWVzc2FnZS5PbmVvZkZp
ZWxkQ2FzZSk7Ci0gICAgICAgICAgICBBc3NlcnRPbmVvZlJvdW5kVHJpcChtZXNzYWdlKTsKLQot
ICAgICAgICAgICAgbWVzc2FnZS5TdHJpbmdGaWVsZCA9ICJmb28iOwotICAgICAgICAgICAgQXNz
ZXJ0LkFyZUVxdWFsKE9uZW9mV2VsbEtub3duVHlwZXMuT25lb2ZGaWVsZE9uZW9mQ2FzZS5TdHJp
bmdGaWVsZCwgbWVzc2FnZS5PbmVvZkZpZWxkQ2FzZSk7Ci0gICAgICAgICAgICBBc3NlcnRPbmVv
ZlJvdW5kVHJpcChtZXNzYWdlKTsKLQotICAgICAgICAgICAgbWVzc2FnZS5Eb3VibGVGaWVsZCA9
IDAuMGY7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoT25lb2ZXZWxsS25vd25UeXBlcy5P
bmVvZkZpZWxkT25lb2ZDYXNlLkRvdWJsZUZpZWxkLCBtZXNzYWdlLk9uZW9mRmllbGRDYXNlKTsK
LSAgICAgICAgICAgIEFzc2VydE9uZW9mUm91bmRUcmlwKG1lc3NhZ2UpOwotCi0gICAgICAgICAg
ICBtZXNzYWdlLkRvdWJsZUZpZWxkID0gMS4wZjsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVh
bChPbmVvZldlbGxLbm93blR5cGVzLk9uZW9mRmllbGRPbmVvZkNhc2UuRG91YmxlRmllbGQsIG1l
c3NhZ2UuT25lb2ZGaWVsZENhc2UpOwotICAgICAgICAgICAgQXNzZXJ0T25lb2ZSb3VuZFRyaXAo
bWVzc2FnZSk7Ci0KLSAgICAgICAgICAgIG1lc3NhZ2UuQ2xlYXJPbmVvZkZpZWxkKCk7Ci0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoT25lb2ZXZWxsS25vd25UeXBlcy5PbmVvZkZpZWxkT25l
b2ZDYXNlLk5vbmUsIG1lc3NhZ2UuT25lb2ZGaWVsZENhc2UpOwotICAgICAgICAgICAgQXNzZXJ0
T25lb2ZSb3VuZFRyaXAobWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZv
aWQgQXNzZXJ0T25lb2ZSb3VuZFRyaXAoT25lb2ZXZWxsS25vd25UeXBlcyBtZXNzYWdlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBOb3JtYWwgcm91bmR0cmlwLCBidXQgZXhwbGljaXRseSBj
aGVja2luZyB0aGUgY2FzZS4uLgotICAgICAgICAgICAgdmFyIGJ5dGVzID0gbWVzc2FnZS5Ub0J5
dGVBcnJheSgpOwotICAgICAgICAgICAgdmFyIHBhcnNlZCA9IE9uZW9mV2VsbEtub3duVHlwZXMu
UGFyc2VyLlBhcnNlRnJvbShieXRlcyk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwobWVz
c2FnZSwgcGFyc2VkKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChtZXNzYWdlLk9uZW9m
RmllbGRDYXNlLCBwYXJzZWQuT25lb2ZGaWVsZENhc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAg
W1Rlc3RdCi0gICAgICAgIFtUZXN0Q2FzZSgieCIsICJ5IiwgInkiKV0KLSAgICAgICAgW1Rlc3RD
YXNlKCJ4IiwgIiIsICJ4IildCi0gICAgICAgIFtUZXN0Q2FzZSgieCIsIG51bGwsICJ4IildCi0g
ICAgICAgIFtUZXN0Q2FzZSgiIiwgInkiLCAieSIpXQotICAgICAgICBbVGVzdENhc2UoIiIsICIi
LCAiIildCi0gICAgICAgIFtUZXN0Q2FzZSgiIiwgbnVsbCwgIiIpXQotICAgICAgICBbVGVzdENh
c2UobnVsbCwgInkiLCAieSIpXQotICAgICAgICBbVGVzdENhc2UobnVsbCwgIiIsICIiKV0KLSAg
ICAgICAgW1Rlc3RDYXNlKG51bGwsIG51bGwsIG51bGwpXQotICAgICAgICBwdWJsaWMgdm9pZCBN
ZXJnaW5nKHN0cmluZyBvcmlnaW5hbCwgc3RyaW5nIG1lcmdlZCwgc3RyaW5nIGV4cGVjdGVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgb3JpZ2luYWxNZXNzYWdlID0gbmV3IFRlc3RXZWxs
S25vd25UeXBlcyB7IFN0cmluZ0ZpZWxkID0gb3JpZ2luYWwgfTsKLSAgICAgICAgICAgIHZhciBt
ZXJnaW5nTWVzc2FnZSA9IG5ldyBUZXN0V2VsbEtub3duVHlwZXMgeyBTdHJpbmdGaWVsZCA9IG1l
cmdlZCB9OwotICAgICAgICAgICAgb3JpZ2luYWxNZXNzYWdlLk1lcmdlRnJvbShtZXJnaW5nTWVz
c2FnZSk7Ci0gICAgICAgICAgICBBc3NlcnQuQXJlRXF1YWwoZXhwZWN0ZWQsIG9yaWdpbmFsTWVz
c2FnZS5TdHJpbmdGaWVsZCk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSBpdCB1c2luZyBNZXJnZUZy
b20oQ29kZWRJbnB1dFN0cmVhbSkgdG9vLi4uCi0gICAgICAgICAgICBvcmlnaW5hbE1lc3NhZ2Ug
PSBuZXcgVGVzdFdlbGxLbm93blR5cGVzIHsgU3RyaW5nRmllbGQgPSBvcmlnaW5hbCB9OwotICAg
ICAgICAgICAgb3JpZ2luYWxNZXNzYWdlLk1lcmdlRnJvbShtZXJnaW5nTWVzc2FnZS5Ub0J5dGVB
cnJheSgpKTsKLSAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChleHBlY3RlZCwgb3JpZ2luYWxN
ZXNzYWdlLlN0cmluZ0ZpZWxkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1lcmdpbmcgaXMg
b2RkIHdpdGggd3JhcHBlciB0eXBlcywgZHVlIHRvIHRoZSB3YXkgdGhhdCBkZWZhdWx0IHZhbHVl
cyBhcmVuJ3QgZW1pdHRlZCBpbgotICAgICAgICAvLyB0aGUgYmluYXJ5IHN0cmVhbS4gSW4gZmFj
dCB3ZSBjaGVhdCBhIGxpdHRsZSBiaXQgLSBhIG1lc3NhZ2Ugd2l0aCBhbiBleHBsaWNpdGx5IHBy
ZXNlbnQgZGVmYXVsdAotICAgICAgICAvLyB2YWx1ZSB3aWxsIGhhdmUgdGhhdCBkZWZhdWx0IHZh
bHVlIGlnbm9yZWQuIFNlZSBpc3N1ZSA2MTUuIEZpeGluZyB0aGlzIHdvdWxkIHJlcXVpcmUgc2ln
bmlmaWNhbnQgdXBoZWF2YWwgdG8KLSAgICAgICAgLy8gdGhlIEZpZWxkQ29kZWMgc2lkZSBvZiB0
aGluZ3MuCi0gICAgICAgIFtUZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBNZXJnaW5nU3RyZWFt
RXhwbGljaXRWYWx1ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3
IFRlc3RXZWxsS25vd25UeXBlcyB7IEludDMyRmllbGQgPSA1IH07Ci0KLSAgICAgICAgICAgIC8v
IENyZWF0ZSBhIGJ5dGUgYXJyYXkgd2hpY2ggaGFzIHRoZSBkYXRhIG9mIGFuIEludDMyVmFsdWUg
ZXhwbGljaXRseSBjb250YWluaW5nIGEgdmFsdWUgb2YgMC4KLSAgICAgICAgICAgIC8vIFRoaXMg
d291bGRuJ3Qgbm9ybWFsbHkgaGFwcGVuLgotICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzOwotICAg
ICAgICAgICAgdmFyIHdyYXBwZXJUYWcgPSBXaXJlRm9ybWF0Lk1ha2VUYWcoVGVzdFdlbGxLbm93
blR5cGVzLkludDMyRmllbGRGaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XaXJlVHlwZS5MZW5ndGhE
ZWxpbWl0ZWQpOwotICAgICAgICAgICAgdmFyIHZhbHVlVGFnID0gV2lyZUZvcm1hdC5NYWtlVGFn
KEludDMyVmFsdWUuVmFsdWVGaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XaXJlVHlwZS5WYXJpbnQp
OwotICAgICAgICAgICAgdXNpbmcgKHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvZGVkID0gbmV3IENvZGVkT3V0cHV0
U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgICAgICAgICAgY29kZWQuV3JpdGVUYWcod3JhcHBlclRh
Zyk7Ci0gICAgICAgICAgICAgICAgY29kZWQuV3JpdGVMZW5ndGgoMik7IC8vIHZhbHVlVGFnICsg
YSB2YWx1ZSAwLCBlYWNoIG9uZSBieXRlCi0gICAgICAgICAgICAgICAgY29kZWQuV3JpdGVUYWco
dmFsdWVUYWcpOwotICAgICAgICAgICAgICAgIGNvZGVkLldyaXRlSW50MzIoMCk7Ci0gICAgICAg
ICAgICAgICAgY29kZWQuRmx1c2goKTsKLSAgICAgICAgICAgICAgICBieXRlcyA9IHN0cmVhbS5U
b0FycmF5KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1lc3NhZ2UuTWVyZ2VGcm9t
KGJ5dGVzKTsKLSAgICAgICAgICAgIC8vIEEgbm9ybWFsIGltcGxlbWVudGF0aW9uIHdvdWxkIGhh
dmUgMCBub3csIGFzIHRoZSBleHBsaWNpdCBkZWZhdWx0IHdvdWxkIGhhdmUgYmVlbiBvdmVyd3Jp
dHRlbiB0aGUgNS4KLSAgICAgICAgICAgIC8vIFdpdGggdGhlIEZpZWxkQ29kZWMgZm9yIE51bGxh
YmxlPGludD4sIHdlIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbiBpbXBsaWNp
dCAwIGFuZCBhbiBleHBsaWNpdCAwLgotICAgICAgICAgICAgQXNzZXJ0LkFyZUVxdWFsKDUsIG1l
c3NhZ2UuSW50MzJGaWVsZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGVzdF0KLSAgICAgICAg
cHVibGljIHZvaWQgTWVyZ2luZ1N0cmVhbU5vVmFsdWUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB2YXIgbWVzc2FnZSA9IG5ldyBUZXN0V2VsbEtub3duVHlwZXMgeyBJbnQzMkZpZWxkID0gNSB9
OwotCi0gICAgICAgICAgICAvLyBDcmVhdGUgYSBieXRlIGFycmF5IHdoaWNoIGFuIEludDMyIGZp
ZWxkLCBidXQgd2l0aCBubyB2YWx1ZS4KLSAgICAgICAgICAgIHZhciBieXRlcyA9IG5ldyBUZXN0
V2VsbEtub3duVHlwZXMgeyBJbnQzMkZpZWxkID0gMCB9LlRvQnl0ZUFycmF5KCk7Ci0gICAgICAg
ICAgICBBc3NlcnQuQXJlRXF1YWwoMiwgYnl0ZXMuTGVuZ3RoKTsgLy8gVGhlIHRhZyBmb3IgSW50
MzJGaWVsZCBpcyBhIHNpbmdsZSBieXRlLCB0aGVuIGEgYnl0ZSBpbmRpY2F0aW5nIGEgMC1sZW5n
dGggbWVzc2FnZS4KLSAgICAgICAgICAgIG1lc3NhZ2UuTWVyZ2VGcm9tKGJ5dGVzKTsKLQotICAg
ICAgICAgICAgLy8gVGhlICJpbXBsaWNpdCIgMCBkaWQgKm5vdCogb3ZlcndyaXRlIHRoZSB2YWx1
ZS4KLSAgICAgICAgICAgIC8vIChUaGlzIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW91ci4pCi0gICAg
ICAgICAgICBBc3NlcnQuQXJlRXF1YWwoNSwgbWVzc2FnZS5JbnQzMkZpZWxkKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIEFsbCBwZXJtdXRhdGlvbnMgb2Ygb3JpZ2luL21lcmdpbmcgdmFsdWUg
YmVpbmcgbnVsbCwgemVybyAoZGVmYXVsdCkgb3Igbm9uLWRlZmF1bHQuCi0gICAgICAgIC8vIEFz
IHRoaXMgaXMgdGhlIGluLW1lbW9yeSB2ZXJzaW9uLCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFi
b3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaW1wbGljaXQgYW5kIGV4cGxpY2l0IDAuCi0gICAg
ICAgIFtUZXN0XQotICAgICAgICBbVGVzdENhc2UobnVsbCwgbnVsbCwgbnVsbCldCi0gICAgICAg
IFtUZXN0Q2FzZShudWxsLCAwLCAwKV0KLSAgICAgICAgW1Rlc3RDYXNlKG51bGwsIDUsIDUpXQot
ICAgICAgICBbVGVzdENhc2UoMCwgbnVsbCwgMCldCi0gICAgICAgIFtUZXN0Q2FzZSgwLCAwLCAw
KV0KLSAgICAgICAgW1Rlc3RDYXNlKDAsIDUsIDUpXQotICAgICAgICBbVGVzdENhc2UoNSwgbnVs
bCwgNSldCi0gICAgICAgIFtUZXN0Q2FzZSg1LCAwLCA1KV0KLSAgICAgICAgW1Rlc3RDYXNlKDUs
IDEwLCAxMCldCi0gICAgICAgIHB1YmxpYyB2b2lkIE1lcmdpbmdNZXNzYWdlV2l0aFplcm8oaW50
PyBvcmlnaW5WYWx1ZSwgaW50PyBtZXJnaW5nVmFsdWUsIGludD8gZXhwZWN0ZWRSZXN1bHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBNZXJnaW5nU3Ry
ZWFtQ29ybmVyQ2FzZSBiZWNhdXNlIHdoZW4gd2UgbWVyZ2UgbWVzc2FnZSAqb2JqZWN0cyosCi0g
ICAgICAgICAgICAvLyB3ZSBpZ25vcmUgZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgInNvdXJjZSIu
Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZTEgPSBuZXcgVGVzdFdlbGxLbm93blR5cGVzIHsgSW50
MzJGaWVsZCA9IG9yaWdpblZhbHVlIH07Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZTIgPSBuZXcg
VGVzdFdlbGxLbm93blR5cGVzIHsgSW50MzJGaWVsZCA9IG1lcmdpbmdWYWx1ZSB9OwotICAgICAg
ICAgICAgbWVzc2FnZTEuTWVyZ2VGcm9tKG1lc3NhZ2UyKTsKLSAgICAgICAgICAgIEFzc2VydC5B
cmVFcXVhbChleHBlY3RlZFJlc3VsdCwgbWVzc2FnZTEuSW50MzJGaWVsZCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBbVGVzdF0KLSAgICAgICAgcHVibGljIHZvaWQgVW5rbm93bkZpZWxkSW5XcmFw
cGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBNZW1vcnlTdHJl
YW0oKTsKLSAgICAgICAgICAgIHZhciBvdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0oc3Ry
ZWFtKTsKLSAgICAgICAgICAgIHZhciB3cmFwcGVyVGFnID0gV2lyZUZvcm1hdC5NYWtlVGFnKFRl
c3RXZWxsS25vd25UeXBlcy5JbnQzMkZpZWxkRmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV2lyZVR5
cGUuTGVuZ3RoRGVsaW1pdGVkKTsKLSAgICAgICAgICAgIHZhciB1bmtub3duVGFnID0gV2lyZUZv
cm1hdC5NYWtlVGFnKDE1LCBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCk7Ci0gICAgICAgICAg
ICB2YXIgdmFsdWVUYWcgPSBXaXJlRm9ybWF0Lk1ha2VUYWcoSW50MzJWYWx1ZS5WYWx1ZUZpZWxk
TnVtYmVyLCBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCk7Ci0KLSAgICAgICAgICAgIG91dHB1
dC5Xcml0ZVRhZyh3cmFwcGVyVGFnKTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUxlbmd0aCg0
KTsgLy8gdW5rbm93blRhZyArIHZhbHVlIDUgKyB2YWx1ZVR5cGUgKyB2YWx1ZSA2LCBlYWNoIDEg
Ynl0ZQotICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKHVua25vd25UYWcpOwotICAgICAgICAg
ICAgb3V0cHV0LldyaXRlSW50MzIoKGludCkgdmFsdWVUYWcpOyAvLyBTbmVha2lseSAicHJldGVu
ZCIgaXQncyBhIHRhZyB3aGVuIGl0J3MgcmVhbGx5IGEgdmFsdWUKLSAgICAgICAgICAgIG91dHB1
dC5Xcml0ZVRhZyh2YWx1ZVRhZyk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVJbnQzMig2KTsK
LQotICAgICAgICAgICAgb3V0cHV0LkZsdXNoKCk7Ci0gICAgICAgICAgICBzdHJlYW0uUG9zaXRp
b24gPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IFRlc3RXZWxs
S25vd25UeXBlcy5QYXJzZXIuUGFyc2VGcm9tKHN0cmVhbSk7Ci0gICAgICAgICAgICBBc3NlcnQu
QXJlRXF1YWwoNiwgbWVzc2FnZS5JbnQzMkZpZWxkKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtU
ZXN0XQotICAgICAgICBwdWJsaWMgdm9pZCBDbGVhcldpdGhSZWZsZWN0aW9uKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgLy8gU3RyaW5nIGFuZCBCeXRlcyBhcmUgdGhlIHRyaWNreSBvbmVzIGhl
cmUsIGFzIHRoZSBDTFIgdHlwZSBvZiB0aGUgcHJvcGVydHkKLSAgICAgICAgICAgIC8vIGlzIHRo
ZSBzYW1lIGJldHdlZW4gdGhlIHdyYXBwZXIgYW5kIG5vbi13cmFwcGVyIHR5cGVzLgotICAgICAg
ICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgVGVzdFdlbGxLbm93blR5cGVzIHsgU3RyaW5nRmllbGQg
PSAiZm9vIiB9OwotICAgICAgICAgICAgVGVzdFdlbGxLbm93blR5cGVzLkRlc2NyaXB0b3IuRmll
bGRzW1Rlc3RXZWxsS25vd25UeXBlcy5TdHJpbmdGaWVsZEZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5D
bGVhcihtZXNzYWdlKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc051bGwobWVzc2FnZS5TdHJpbmdG
aWVsZCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xl
LlByb3RvYnVmLlRlc3QvcGFja2FnZXMuY29uZmlnIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1
Zi5UZXN0L3BhY2thZ2VzLmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc2
NTM5OTI4YzNhNzYxM2JkNmQ4YWI4NTYzMjA1ZjA4YTBjYzRhMS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmLlRl
c3QvcGFja2FnZXMuY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi3vu788P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHBhY2thZ2VzPgotICA8cGFja2Fn
ZSBpZD0iTlVuaXQiIHZlcnNpb249IjIuNi40IiB0YXJnZXRGcmFtZXdvcms9Im5ldDQ1IiB1c2Vy
SW5zdGFsbGVkPSJ0cnVlIiAvPgotICA8cGFja2FnZSBpZD0iTlVuaXRUZXN0QWRhcHRlciIgdmVy
c2lvbj0iMi4wLjAiIHRhcmdldEZyYW1ld29yaz0ibmV0NDUiIHVzZXJJbnN0YWxsZWQ9InRydWUi
IC8+Ci08L3BhY2thZ2VzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvQnl0ZUFycmF5LmNzIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi9CeXRlQXJyYXkuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIx
OTk2Mjc5NGIwZDA1MmI0NjdmZDIwMDdmZDA5YWQxZDdmZTZkNTQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9C
eXRlQXJyYXkuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi3vu78jcmVnaW9uIENv
cHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJv
dG9idWYKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIFByb3ZpZGVzIGEgdXRpbGl0eSBy
b3V0aW5lIHRvIGNvcHkgc21hbGwgYXJyYXlzIG11Y2ggbW9yZSBxdWlja2x5IHRoYW4gQnVmZmVy
LkJsb2NrQ29weQotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgaW50ZXJuYWwgc3RhdGljIGNsYXNz
IEJ5dGVBcnJheQotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhl
IHRocmVzaG9sZCBhYm92ZSB3aGljaCB5b3Ugc2hvdWxkIHVzZSBCdWZmZXIuQmxvY2tDb3B5IHJh
dGhlciB0aGFuIEJ5dGVBcnJheS5Db3B5Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IHByaXZhdGUgY29uc3QgaW50IENvcHlUaHJlc2hvbGQgPSAxMjsKLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBEZXRlcm1pbmVzIHdoaWNoIGNvcHkgcm91dGluZSB0byB1c2Ug
YmFzZWQgb24gdGhlIG51bWJlciBvZiBieXRlcyB0byBiZSBjb3BpZWQuCi0gICAgICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyB2b2lkIENvcHkoYnl0ZVtdIHNyYywg
aW50IHNyY09mZnNldCwgYnl0ZVtdIGRzdCwgaW50IGRzdE9mZnNldCwgaW50IGNvdW50KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoY291bnQgPiBDb3B5VGhyZXNob2xkKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIEJ1ZmZlci5CbG9ja0NvcHkoc3JjLCBzcmNPZmZzZXQsIGRz
dCwgZHN0T2Zmc2V0LCBjb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHN0b3AgPSBzcmNPZmZzZXQgKyBjb3Vu
dDsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gc3JjT2Zmc2V0OyBpIDwgc3RvcDsgaSsr
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZHN0W2RzdE9mZnNldCsr
XSA9IHNyY1tpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXZlcnNlcyB0aGUgb3JkZXIg
b2YgYnl0ZXMgaW4gdGhlIGFycmF5Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIGlu
dGVybmFsIHN0YXRpYyB2b2lkIFJldmVyc2UoYnl0ZVtdIGJ5dGVzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCBmaXJzdCA9IDAsIGxhc3QgPSBieXRlcy5MZW5ndGggLSAxOyBmaXJz
dCA8IGxhc3Q7IGZpcnN0KyssIGxhc3QtLSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBieXRlIHRlbXAgPSBieXRlc1tmaXJzdF07Ci0gICAgICAgICAgICAgICAgYnl0ZXNbZmlyc3Rd
ID0gYnl0ZXNbbGFzdF07Ci0gICAgICAgICAgICAgICAgYnl0ZXNbbGFzdF0gPSB0ZW1wOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvQnl0ZVN0cmluZy5jcyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvQnl0ZVN0cmluZy5jcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTFhZDYyMTZkZDM2ZDRkN2Y0MzgxYWJhMWM1NDc1NmEwZDE3N2U5MS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMv
R29vZ2xlLlByb3RvYnVmL0J5dGVTdHJpbmcuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAs
MCBAQAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcg
U3lzdGVtLkNvbGxlY3Rpb25zOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11
c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGV4dDsKLQotbmFtZXNwYWNlIEdvb2dsZS5Q
cm90b2J1ZgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gSW1tdXRhYmxlIGFycmF5IG9m
IGJ5dGVzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHNlYWxlZCBjbGFzcyBCeXRl
U3RyaW5nIDogSUVudW1lcmFibGU8Ynl0ZT4sIElFcXVhdGFibGU8Qnl0ZVN0cmluZz4KLSAgICB7
Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEJ5dGVTdHJpbmcgZW1wdHkgPSBuZXcg
Qnl0ZVN0cmluZyhuZXcgYnl0ZVswXSk7Ci0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBieXRl
W10gYnl0ZXM7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVW5zYWZlIG9w
ZXJhdGlvbnMgdGhhdCBjYW4gY2F1c2UgSU8gRmFpbHVyZSBhbmQvb3Igb3RoZXIgY2F0ZXN0cm9w
aGljIHNpZGUtZWZmZWN0cy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJu
YWwgc3RhdGljIGNsYXNzIFVuc2FmZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgICAgICAvLy8gQ29uc3RydWN0cyBhIG5ldyBCeXRlU3RyaW5nIGZyb20gdGhl
IGdpdmVuIGJ5dGUgYXJyYXkuIFRoZSBhcnJheSBpcwotICAgICAgICAgICAgLy8vICpub3QqIGNv
cGllZCwgYW5kIG11c3Qgbm90IGJlIG1vZGlmaWVkIGFmdGVyIHRoaXMgY29uc3RydWN0b3IgaXMg
Y2FsbGVkLgotICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgIGludGVybmFs
IHN0YXRpYyBCeXRlU3RyaW5nIEZyb21CeXRlcyhieXRlW10gYnl0ZXMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlU3RyaW5nKGJ5dGVzKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAgICAgLy8vIFByb3Zp
ZGVzIGRpcmVjdCwgdW5yZXN0cmljdGVkIGFjY2VzcyB0byB0aGUgYnl0ZXMgY29udGFpbmVkIGlu
IHRoaXMgaW5zdGFuY2UuCi0gICAgICAgICAgICAvLy8gWW91IG11c3Qgbm90IG1vZGlmeSBvciBy
ZXNpemUgdGhlIGJ5dGUgYXJyYXkgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QuCi0gICAgICAgICAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgaW50ZXJuYWwgc3RhdGljIGJ5dGVbXSBHZXRC
dWZmZXIoQnl0ZVN0cmluZyBieXRlcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYnl0ZXMuYnl0ZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBJbnRlcm5hbCB1c2Ugb25seS4gIEVuc3VyZSB0aGF0
IHRoZSBwcm92aWRlZCBhcnJheSBpcyBub3QgbXV0YXRlZCBhbmQgYmVsb25ncyB0byB0aGlzIGlu
c3RhbmNlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBpbnRlcm5hbCBzdGF0aWMg
Qnl0ZVN0cmluZyBBdHRhY2hCeXRlcyhieXRlW10gYnl0ZXMpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgQnl0ZVN0cmluZyhieXRlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb25zdHJ1Y3RzIGEgbmV3IEJ5dGVTdHJpbmcgZnJv
bSB0aGUgZ2l2ZW4gYnl0ZSBhcnJheS4gVGhlIGFycmF5IGlzCi0gICAgICAgIC8vLyAqbm90KiBj
b3BpZWQsIGFuZCBtdXN0IG5vdCBiZSBtb2RpZmllZCBhZnRlciB0aGlzIGNvbnN0cnVjdG9yIGlz
IGNhbGxlZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJpdmF0ZSBCeXRlU3Ry
aW5nKGJ5dGVbXSBieXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5ieXRlcyA9IGJ5
dGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0
dXJucyBhbiBlbXB0eSBCeXRlU3RyaW5nLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAg
ICBwdWJsaWMgc3RhdGljIEJ5dGVTdHJpbmcgRW1wdHkKLSAgICAgICAgewotICAgICAgICAgICAg
Z2V0IHsgcmV0dXJuIGVtcHR5OyB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhpcyBCeXRlU3RyaW5nIGluIGJ5
dGVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgaW50IExlbmd0aAot
ICAgICAgICB7Ci0gICAgICAgICAgICBnZXQgeyByZXR1cm4gYnl0ZXMuTGVuZ3RoOyB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIDxjPnRy
dWU8L2M+IGlmIHRoaXMgYnl0ZSBzdHJpbmcgaXMgZW1wdHksIDxjPmZhbHNlPC9jPiBvdGhlcndp
c2UuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBib29sIElzRW1wdHkK
LSAgICAgICAgewotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIExlbmd0aCA9PSAwOyB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb252ZXJ0cyB0aGlz
IDxzZWUgY3JlZj0iQnl0ZVN0cmluZyIvPiBpbnRvIGEgYnl0ZSBhcnJheS4KLSAgICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPlRoZSBkYXRhIGlzIGNvcGllZCAtIGNo
YW5nZXMgdG8gdGhlIHJldHVybmVkIGFycmF5IHdpbGwgbm90IGJlIHJlZmxlY3RlZCBpbiB0aGlz
IDxjPkJ5dGVTdHJpbmc8L2M+LjwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgYnl0
ZSBhcnJheSB3aXRoIHRoZSBzYW1lIGRhdGEgYXMgdGhpcyA8Yz5CeXRlU3RyaW5nPC9jPi48L3Jl
dHVybnM+Ci0gICAgICAgIHB1YmxpYyBieXRlW10gVG9CeXRlQXJyYXkoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gKGJ5dGVbXSkgYnl0ZXMuQ2xvbmUoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbnZlcnRzIHRoaXMgPHNlZSBjcmVm
PSJCeXRlU3RyaW5nIi8+IGludG8gYSBzdGFuZGFyZCBiYXNlNjQgcmVwcmVzZW50YXRpb24uCi0g
ICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIGJhc2U2NCByZXBy
ZXNlbnRhdGlvbiBvZiB0aGlzIDxjPkJ5dGVTdHJpbmc8L2M+LjwvcmV0dXJucz4KLSAgICAgICAg
cHVibGljIHN0cmluZyBUb0Jhc2U2NCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBD
b252ZXJ0LlRvQmFzZTY0U3RyaW5nKGJ5dGVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbnN0cnVjdHMgYSA8c2VlIGNyZWY9IkJ5dGVTdHJpbmci
IC8+IGZyb20gdGhlIEJhc2U2NCBFbmNvZGVkIFN0cmluZy4KLSAgICAgICAgLy8vIDwvc3VtbWFy
eT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBCeXRlU3RyaW5nIEZyb21CYXNlNjQoc3RyaW5nIGJ5
dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBCeSBoYW5kbGluZyB0aGUgZW1wdHkgc3Ry
aW5nIGV4cGxpY2l0bHksIHdlIG5vdCBvbmx5IG9wdGltaXplIGJ1dCB3ZSBmaXggYQotICAgICAg
ICAgICAgLy8gcHJvYmxlbSBvbiBDRiAyLjAuIFNlZSBpc3N1ZSA2MSBmb3IgZGV0YWlscy4KLSAg
ICAgICAgICAgIHJldHVybiBieXRlcyA9PSAiIiA/IEVtcHR5IDogbmV3IEJ5dGVTdHJpbmcoQ29u
dmVydC5Gcm9tQmFzZTY0U3RyaW5nKGJ5dGVzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb25zdHJ1Y3RzIGEgPHNlZSBjcmVmPSJCeXRlU3RyaW5n
IiAvPiBmcm9tIHRoZSBnaXZlbiBhcnJheS4gVGhlIGNvbnRlbnRzCi0gICAgICAgIC8vLyBhcmUg
Y29waWVkLCBzbyBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGFycmF5IHdpbGwgbm90Ci0g
ICAgICAgIC8vLyBiZSByZWZsZWN0ZWQgaW4gdGhlIHJldHVybmVkIEJ5dGVTdHJpbmcuCi0gICAg
ICAgIC8vLyBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSBpbnZva2VkIGluIDxjPkJ5dGVTdHJpbmcu
Q29weUZyb20oMHhhYSwgMHhiYiwgLi4uKTwvYz4gZm9ybQotICAgICAgICAvLy8gd2hpY2ggaXMg
cHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAgICAgcHVibGljIHN0YXRpYyBCeXRlU3RyaW5nIENvcHlGcm9tKHBhcmFtcyBieXRlW10gYnl0
ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZVN0cmluZygoYnl0ZVtd
KSBieXRlcy5DbG9uZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgLy8vIENvbnN0cnVjdHMgYSA8c2VlIGNyZWY9IkJ5dGVTdHJpbmciIC8+IGZyb20gYSBw
b3J0aW9uIG9mIGEgYnl0ZSBhcnJheS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
cHVibGljIHN0YXRpYyBCeXRlU3RyaW5nIENvcHlGcm9tKGJ5dGVbXSBieXRlcywgaW50IG9mZnNl
dCwgaW50IGNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBieXRlW10gcG9ydGlvbiA9IG5l
dyBieXRlW2NvdW50XTsKLSAgICAgICAgICAgIEJ5dGVBcnJheS5Db3B5KGJ5dGVzLCBvZmZzZXQs
IHBvcnRpb24sIDAsIGNvdW50KTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZVN0cmluZyhw
b3J0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IENyZWF0ZXMgYSBuZXcgPHNlZSBjcmVmPSJCeXRlU3RyaW5nIiAvPiBieSBlbmNvZGluZyB0aGUg
c3BlY2lmaWVkIHRleHQgd2l0aAotICAgICAgICAvLy8gdGhlIGdpdmVuIGVuY29kaW5nLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIEJ5dGVTdHJpbmcgQ29w
eUZyb20oc3RyaW5nIHRleHQsIEVuY29kaW5nIGVuY29kaW5nKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IEJ5dGVTdHJpbmcoZW5jb2RpbmcuR2V0Qnl0ZXModGV4dCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIG5l
dyA8c2VlIGNyZWY9IkJ5dGVTdHJpbmciIC8+IGJ5IGVuY29kaW5nIHRoZSBzcGVjaWZpZWQgdGV4
dCBpbiBVVEYtOC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRp
YyBCeXRlU3RyaW5nIENvcHlGcm9tVXRmOChzdHJpbmcgdGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIENvcHlGcm9tKHRleHQsIEVuY29kaW5nLlVURjgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dW5zIHRoZSBieXRlIGF0IHRo
ZSBnaXZlbiBpbmRleC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGJ5
dGUgdGhpc1tpbnQgaW5kZXhdCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdldCB7IHJldHVybiBi
eXRlc1tpbmRleF07IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIENvbnZlcnRzIHRoaXMgPHNlZSBjcmVmPSJCeXRlU3RyaW5nIi8+IGludG8gYSBzdHJp
bmcgYnkgYXBwbHlpbmcgdGhlIGdpdmVuIGVuY29kaW5nLgotICAgICAgICAvLy8gPC9zdW1tYXJ5
PgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSB1c2VkIHRvIGNvbnZlcnQgYmluYXJ5IGRhdGEgd2hpY2ggd2FzIHRoZSByZXN1bHQg
b2YgZW5jb2RpbmcKLSAgICAgICAgLy8vIHRleHQgd2l0aCB0aGUgZ2l2ZW4gZW5jb2RpbmcuCi0g
ICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZW5jb2Rpbmci
PlRoZSBlbmNvZGluZyB0byB1c2UgdG8gZGVjb2RlIHRoZSBiaW5hcnkgZGF0YSBpbnRvIHRleHQu
PC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZXN1bHQgb2YgZGVjb2RpbmcgdGhl
IGJpbmFyeSBkYXRhIHdpdGggdGhlIGdpdmVuIGRlY29kaW5nLjwvcmV0dXJucz4KLSAgICAgICAg
cHVibGljIHN0cmluZyBUb1N0cmluZyhFbmNvZGluZyBlbmNvZGluZykKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVuY29kaW5nLkdldFN0cmluZyhieXRlcywgMCwgYnl0ZXMuTGVuZ3Ro
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbnZl
cnRzIHRoaXMgPHNlZSBjcmVmPSJCeXRlU3RyaW5nIi8+IGludG8gYSBzdHJpbmcgYnkgYXBwbHlp
bmcgdGhlIFVURi04IGVuY29kaW5nLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAv
Ly8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2Vk
IHRvIGNvbnZlcnQgYmluYXJ5IGRhdGEgd2hpY2ggd2FzIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcK
LSAgICAgICAgLy8vIHRleHQgd2l0aCBVVEYtOC4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAg
ICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZXN1bHQgb2YgZGVjb2RpbmcgdGhlIGJpbmFyeSBkYXRh
IHdpdGggdGhlIGdpdmVuIGRlY29kaW5nLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0cmlu
ZyBUb1N0cmluZ1V0ZjgoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gVG9TdHJpbmco
RW5jb2RpbmcuVVRGOCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgIC8vLyBSZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGJ5dGVzIGluIHRoaXMgPHNlZSBj
cmVmPSJCeXRlU3RyaW5nIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8g
PHJldHVybnM+QW4gaXRlcmF0b3Igb3ZlciB0aGUgYnl0ZXMgaW4gdGhpcyBvYmplY3QuPC9yZXR1
cm5zPgotICAgICAgICBwdWJsaWMgSUVudW1lcmF0b3I8Ynl0ZT4gR2V0RW51bWVyYXRvcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoKElFbnVtZXJhYmxlPGJ5dGU+KSBieXRlcyku
R2V0RW51bWVyYXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIHRoZSBieXRlcyBpbiB0aGlzIDxzZWUg
Y3JlZj0iQnl0ZVN0cmluZyIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8v
IDxyZXR1cm5zPkFuIGl0ZXJhdG9yIG92ZXIgdGhlIGJ5dGVzIGluIHRoaXMgb2JqZWN0LjwvcmV0
dXJucz4KLSAgICAgICAgSUVudW1lcmF0b3IgSUVudW1lcmFibGUuR2V0RW51bWVyYXRvcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHZXRFbnVtZXJhdG9yKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgQ29kZWRJbnB1
dFN0cmVhbSBmcm9tIHRoaXMgQnl0ZVN0cmluZydzIGRhdGEuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIHB1YmxpYyBDb2RlZElucHV0U3RyZWFtIENyZWF0ZUNvZGVkSW5wdXQoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSB0cnVzdCBDb2RlZElucHV0U3RyZWFtIG5vdCB0
byByZXZlYWwgdGhlIHByb3ZpZGVkIGJ5dGUgYXJyYXkgb3IgbW9kaWZ5IGl0Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IENvZGVkSW5wdXRTdHJlYW0oYnl0ZXMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29tcGFyZXMgdHdvIGJ5dGUgc3RyaW5ncyBm
b3IgZXF1YWxpdHkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0g
bmFtZT0ibGhzIj5UaGUgZmlyc3QgYnl0ZSBzdHJpbmcgdG8gY29tcGFyZS48L3BhcmFtPgotICAg
ICAgICAvLy8gPHBhcmFtIG5hbWU9InJocyI+VGhlIHNlY29uZCBieXRlIHN0cmluZyB0byBjb21w
YXJlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz48Yz50cnVlPC9jPiBpZiB0aGUgYnl0
ZSBzdHJpbmdzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlLjwvcmV0dXJucz4KLSAgICAgICAg
cHVibGljIHN0YXRpYyBib29sIG9wZXJhdG9yID09KEJ5dGVTdHJpbmcgbGhzLCBCeXRlU3RyaW5n
IHJocykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhsaHMsIHJo
cykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKGxocywgbnVsbCkgfHwgUmVm
ZXJlbmNlRXF1YWxzKHJocywgbnVsbCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxocy5ieXRlcy5M
ZW5ndGggIT0gcmhzLmJ5dGVzLkxlbmd0aCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxocy5MZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAocmhzLmJ5dGVzW2ldICE9IGxocy5ieXRlc1tpXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbXBhcmVzIHR3byBieXRlIHN0cmluZ3MgZm9yIGlu
ZXF1YWxpdHkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFt
ZT0ibGhzIj5UaGUgZmlyc3QgYnl0ZSBzdHJpbmcgdG8gY29tcGFyZS48L3BhcmFtPgotICAgICAg
ICAvLy8gPHBhcmFtIG5hbWU9InJocyI+VGhlIHNlY29uZCBieXRlIHN0cmluZyB0byBjb21wYXJl
LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz48Yz5mYWxzZTwvYz4gaWYgdGhlIGJ5dGUg
c3RyaW5ncyBhcmUgZXF1YWw7IHRydWUgb3RoZXJ3aXNlLjwvcmV0dXJucz4KLSAgICAgICAgcHVi
bGljIHN0YXRpYyBib29sIG9wZXJhdG9yICE9KEJ5dGVTdHJpbmcgbGhzLCBCeXRlU3RyaW5nIHJo
cykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICEobGhzID09IHJocyk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb21wYXJlcyB0aGlzIGJ5
dGUgc3RyaW5nIHdpdGggYW5vdGhlciBvYmplY3QuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib2JqIj5UaGUgb2JqZWN0IHRvIGNvbXBhcmUgdGhpcyB3
aXRoLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz48Yz50cnVlPC9jPiBpZiA8cGFyYW1y
ZWYgbmFtZT0ib2JqIi8+IHJlZmVycyB0byBhbiBlcXVhbCA8c2VlIGNyZWY9IkJ5dGVTdHJpbmci
Lz47IDxjPmZhbHNlPC9jPiBvdGhlcndpc2UuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgb3Zl
cnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG9iaikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIHRoaXMgPT0gKG9iaiBhcyBCeXRlU3RyaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgYSBoYXNoIGNvZGUgZm9yIHRoaXMgb2Jq
ZWN0LiBUd28gZXF1YWwgYnl0ZSBzdHJpbmdzCi0gICAgICAgIC8vLyB3aWxsIHJldHVybiB0aGUg
c2FtZSBoYXNoIGNvZGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmV0
dXJucz5BIGhhc2ggY29kZSBmb3IgdGhpcyBvYmplY3QuPC9yZXR1cm5zPgotICAgICAgICBwdWJs
aWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50
IHJldCA9IDIzOwotICAgICAgICAgICAgZm9yZWFjaCAoYnl0ZSBiIGluIGJ5dGVzKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IChyZXQgPDwgOCkgfCBiOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbXBhcmVzIHRoaXMgYnl0ZSBzdHJpbmcgd2l0aCBhbm90
aGVyLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im90
aGVyIj5UaGUgPHNlZSBjcmVmPSJCeXRlU3RyaW5nIi8+IHRvIGNvbXBhcmUgdGhpcyB3aXRoLjwv
cGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz48Yz50cnVlPC9jPiBpZiA8cGFyYW1yZWYgbmFt
ZT0ib3RoZXIiLz4gcmVmZXJzIHRvIGFuIGVxdWFsIGJ5dGUgc3RyaW5nOyA8Yz5mYWxzZTwvYz4g
b3RoZXJ3aXNlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIGJvb2wgRXF1YWxzKEJ5dGVTdHJp
bmcgb3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzID09IG90aGVyOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVXNlZCBpbnRl
cm5hbGx5IGJ5IENvZGVkT3V0cHV0U3RyZWFtIHRvIGF2b2lkIGNyZWF0aW5nIGEgY29weSBmb3Ig
dGhlIHdyaXRlCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIGludGVybmFsIHZvaWQg
V3JpdGVSYXdCeXRlc1RvKENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSkKLSAgICAgICAg
ewotICAgICAgICAgICAgb3V0cHV0U3RyZWFtLldyaXRlUmF3Qnl0ZXMoYnl0ZXMsIDAsIGJ5dGVz
Lkxlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyBDb3BpZXMgdGhlIGVudGlyZSBieXRlIGFycmF5IHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheSBw
cm92aWRlZCBhdCB0aGUgb2Zmc2V0IHNwZWNpZmllZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgcHVibGljIHZvaWQgQ29weVRvKGJ5dGVbXSBhcnJheSwgaW50IHBvc2l0aW9uKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlQXJyYXkuQ29weShieXRlcywgMCwgYXJyYXksIHBv
c2l0aW9uLCBieXRlcy5MZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gV3JpdGVzIHRoZSBlbnRpcmUgYnl0ZSBhcnJheSB0byB0aGUgcHJvdmlk
ZWQgc3RyZWFtCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyB2b2lkIFdy
aXRlVG8oU3RyZWFtIG91dHB1dFN0cmVhbSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0cHV0
U3RyZWFtLldyaXRlKGJ5dGVzLCAwLCBieXRlcy5MZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQot
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYvQ29kZWRJbnB1dFN0cmVhbS5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9i
dWYvQ29kZWRJbnB1dFN0cmVhbS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4
NDQ1N2Y2NDc1MmUwODRlNWVhYzZjMzY5YTJlZWQ2ZGI1ZTk4Yi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0Nv
ZGVkSW5wdXRTdHJlYW0uY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjc3ICswLDAgQEAKLSNyZWdp
b24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5Db2xsZWN0aW9u
czsKLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNp
bmcgU3lzdGVtLklPOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmCi17Ci0gICAgLy8vIDxz
dW1tYXJ5PgotICAgIC8vLyBSZWFkcyBhbmQgZGVjb2RlcyBwcm90b2NvbCBtZXNzYWdlIGZpZWxk
cy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIC8vLyA8cmVtYXJrcz4KLSAgICAvLy8gPHBhcmE+
Ci0gICAgLy8vIFRoaXMgY2xhc3MgaXMgZ2VuZXJhbGx5IHVzZWQgYnkgZ2VuZXJhdGVkIGNvZGUg
dG8gcmVhZCBhcHByb3ByaWF0ZQotICAgIC8vLyBwcmltaXRpdmVzIGZyb20gdGhlIHN0cmVhbS4g
SXQgZWZmZWN0aXZlbHkgZW5jYXBzdWxhdGVzIHRoZSBsb3dlc3QKLSAgICAvLy8gbGV2ZWxzIG9m
IHByb3RvY29sIGJ1ZmZlciBmb3JtYXQuCi0gICAgLy8vIDwvcGFyYT4KLSAgICAvLy8gPHBhcmE+
Ci0gICAgLy8vIFJlcGVhdGVkIGZpZWxkcyBhbmQgbWFwIGZpZWxkcyBhcmUgbm90IGhhbmRsZWQg
YnkgdGhpcyBjbGFzczsgdXNlIDxzZWUgY3JlZj0iUmVwZWF0ZWRGaWVsZHtUfSIvPgotICAgIC8v
LyBhbmQgPHNlZSBjcmVmPSJNYXBGaWVsZHtUS2V5LCBUVmFsdWV9Ii8+IHRvIHNlcmlhbGl6ZSBz
dWNoIGZpZWxkcy4KLSAgICAvLy8gPC9wYXJhPgotICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgcHVi
bGljIHNlYWxlZCBjbGFzcyBDb2RlZElucHV0U3RyZWFtIDogSURpc3Bvc2FibGUKLSAgICB7Ci0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdoZXRoZXIgdG8gbGVhdmUgdGhlIHVu
ZGVybHlpbmcgc3RyZWFtIG9wZW4gd2hlbiBkaXNwb3Npbmcgb2YgdGhpcyBzdHJlYW0uCi0gICAg
ICAgIC8vLyBUaGlzIGlzIGFsd2F5cyB0cnVlIHdoZW4gdGhlcmUncyBubyBzdHJlYW0uCi0gICAg
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYm9vbCBsZWF2ZU9w
ZW47Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQnVmZmVyIG9mIGRhdGEg
cmVhZCBmcm9tIHRoZSBzdHJlYW0gb3IgcHJvdmlkZWQgYXQgY29uc3RydWN0aW9uIHRpbWUuCi0g
ICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYnl0ZVtdIGJ1
ZmZlcjsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUaGUgaW5kZXggb2Yg
dGhlIGJ1ZmZlciBhdCB3aGljaCB3ZSBuZWVkIHRvIHJlZmlsbCBmcm9tIHRoZSBzdHJlYW0gKGlm
IHRoZXJlIGlzIG9uZSkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUg
aW50IGJ1ZmZlclNpemU7Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgYnVmZmVyU2l6ZUFmdGVyTGlt
aXQgPSAwOwotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUaGUgcG9zaXRpb24g
d2l0aGluIHRoZSBjdXJyZW50IGJ1ZmZlciAoaS5lLiB0aGUgbmV4dCBieXRlIHRvIHJlYWQpCi0g
ICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUgaW50IGJ1ZmZlclBvcyA9IDA7
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIHN0cmVhbSB0byByZWFk
IGZ1cnRoZXIgaW5wdXQgZnJvbSwgb3IgbnVsbCBpZiB0aGUgYnl0ZSBhcnJheSBidWZmZXIgd2Fz
IHByb3ZpZGVkCi0gICAgICAgIC8vLyBkaXJlY3RseSBvbiBjb25zdHJ1Y3Rpb24sIHdpdGggbm8g
ZnVydGhlciBkYXRhIGF2YWlsYWJsZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
cHJpdmF0ZSByZWFkb25seSBTdHJlYW0gaW5wdXQ7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gVGhlIGxhc3QgdGFnIHdlIHJlYWQuIDAgaW5kaWNhdGVzIHdlJ3ZlIHJlYWQg
dG8gdGhlIGVuZCBvZiB0aGUgc3RyZWFtCi0gICAgICAgIC8vLyAob3IgaGF2ZW4ndCByZWFkIGFu
eXRoaW5nIHlldCkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUgdWlu
dCBsYXN0VGFnID0gMDsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUaGUg
bmV4dCB0YWcsIHVzZWQgdG8gc3RvcmUgdGhlIHZhbHVlIHJlYWQgYnkgUGVla1RhZy4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJpdmF0ZSB1aW50IG5leHRUYWcgPSAwOwotICAg
ICAgICBwcml2YXRlIGJvb2wgaGFzTmV4dFRhZyA9IGZhbHNlOwotCi0gICAgICAgIGludGVybmFs
IGNvbnN0IGludCBEZWZhdWx0UmVjdXJzaW9uTGltaXQgPSA2NDsKLSAgICAgICAgaW50ZXJuYWwg
Y29uc3QgaW50IERlZmF1bHRTaXplTGltaXQgPSA2NCA8PCAyMDsgLy8gNjRNQgotICAgICAgICBp
bnRlcm5hbCBjb25zdCBpbnQgQnVmZmVyU2l6ZSA9IDQwOTY7Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyByZWFkIGJlZm9yZSB0
aGUgY3VycmVudCBidWZmZXIuIFRoZQotICAgICAgICAvLy8gdG90YWwgYnl0ZXMgcmVhZCB1cCB0
byB0aGUgY3VycmVudCBwb3NpdGlvbiBjYW4gYmUgY29tcHV0ZWQgYXMKLSAgICAgICAgLy8vIHRv
dGFsQnl0ZXNSZXRpcmVkICsgYnVmZmVyUG9zLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAg
ICAgICBwcml2YXRlIGludCB0b3RhbEJ5dGVzUmV0aXJlZCA9IDA7Ci0KLSAgICAgICAgLy8vIDxz
dW1tYXJ5PgotICAgICAgICAvLy8gVGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2Yg
dGhlIGN1cnJlbnQgbWVzc2FnZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4gCi0gICAgICAgIHBy
aXZhdGUgaW50IGN1cnJlbnRMaW1pdCA9IGludC5NYXhWYWx1ZTsKLQotICAgICAgICBwcml2YXRl
IGludCByZWN1cnNpb25EZXB0aCA9IDA7Ci0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbnQg
cmVjdXJzaW9uTGltaXQ7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW50IHNpemVMaW1pdDsK
LQotICAgICAgICAjcmVnaW9uIENvbnN0cnVjdGlvbgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhl
IGNoZWNrcyBhcmUgcGVyZm9ybWVkIHN1Y2ggdGhhdCB3ZSBkb24ndCBlbmQgdXAgY2hlY2tpbmcg
b2J2aW91c2x5LXZhbGlkIHRoaW5ncwotICAgICAgICAvLyBsaWtlIG5vbi1udWxsIHJlZmVyZW5j
ZXMgZm9yIGFycmF5cyB3ZSd2ZSBqdXN0IGNyZWF0ZWQuCi0KLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIG5ldyBDb2RlZElucHV0U3RyZWFtIHJlYWRpbmcgZGF0
YSBmcm9tIHRoZSBnaXZlbiBieXRlIGFycmF5LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAg
ICAgICBwdWJsaWMgQ29kZWRJbnB1dFN0cmVhbShieXRlW10gYnVmZmVyKSA6IHRoaXMobnVsbCwg
UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbChidWZmZXIsICJidWZmZXIiKSwgMCwgYnVm
ZmVyLkxlbmd0aCkKLSAgICAgICAgeyAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIG5ldyA8c2VlIGNyZWY9IkNvZGVk
SW5wdXRTdHJlYW0iLz4gdGhhdCByZWFkcyBmcm9tIHRoZSBnaXZlbiBieXRlIGFycmF5IHNsaWNl
LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgQ29kZWRJbnB1dFN0cmVh
bShieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKQotICAgICAgICAgICAgOiB0
aGlzKG51bGwsIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwoYnVmZmVyLCAiYnVmZmVy
IiksIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKQotICAgICAgICB7ICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXIuTGVuZ3RoKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFeGNl
cHRpb24oIm9mZnNldCIsICJPZmZzZXQgbXVzdCBiZSB3aXRoaW4gdGhlIGJ1ZmZlciIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0ICsgbGVuZ3Ro
ID4gYnVmZmVyLkxlbmd0aCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKCJsZW5ndGgiLCAiTGVuZ3RoIG11c3QgYmUg
bm9uLW5lZ2F0aXZlIGFuZCB3aXRoaW4gdGhlIGJ1ZmZlciIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIG5l
dyA8c2VlIGNyZWY9IkNvZGVkSW5wdXRTdHJlYW0iLz4gcmVhZGluZyBkYXRhIGZyb20gdGhlIGdp
dmVuIHN0cmVhbSwgd2hpY2ggd2lsbCBiZSBkaXNwb3NlZAotICAgICAgICAvLy8gd2hlbiB0aGUg
cmV0dXJuZWQgb2JqZWN0IGlzIGRpc3Bvc2VkLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAg
ICAgICAvLy8gPHBhcmFtIG5hbWU9ImlucHV0Ij5UaGUgc3RyZWFtIHRvIHJlYWQgZnJvbS48L3Bh
cmFtPgotICAgICAgICBwdWJsaWMgQ29kZWRJbnB1dFN0cmVhbShTdHJlYW0gaW5wdXQpIDogdGhp
cyhpbnB1dCwgZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vIENyZWF0ZXMgYSBuZXcgPHNlZSBjcmVmPSJDb2RlZElucHV0U3Ry
ZWFtIi8+IHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBnaXZlbiBzdHJlYW0uCi0gICAgICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5wdXQiPlRoZSBzdHJlYW0gdG8g
cmVhZCBmcm9tLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibGVhdmVPcGVuIj48
Yz50cnVlPC9jPiB0byBsZWF2ZSA8cGFyYW1yZWYgbmFtZT0iaW5wdXQiLz4gb3BlbiB3aGVuIHRo
ZSByZXR1cm5lZAotICAgICAgICAvLy8gPGMgY3JlZj0iQ29kZWRJbnB1dFN0cmVhbSIvPiBpcyBk
aXNwb3NlZDsgPGM+ZmFsc2U8L2M+IHRvIGRpc3Bvc2Ugb2YgdGhlIGdpdmVuIHN0cmVhbSB3aGVu
IHRoZQotICAgICAgICAvLy8gcmV0dXJuZWQgb2JqZWN0IGlzIGRpc3Bvc2VkLjwvcGFyYW0+Ci0g
ICAgICAgIHB1YmxpYyBDb2RlZElucHV0U3RyZWFtKFN0cmVhbSBpbnB1dCwgYm9vbCBsZWF2ZU9w
ZW4pCi0gICAgICAgICAgICA6IHRoaXMoUHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbChp
bnB1dCwgImlucHV0IiksIG5ldyBieXRlW0J1ZmZlclNpemVdLCAwLCAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB0aGlzLmxlYXZlT3BlbiA9IGxlYXZlT3BlbjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIG5ldyBDb2Rl
ZElucHV0U3RyZWFtIHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBnaXZlbgotICAgICAgICAvLy8gc3Ry
ZWFtIGFuZCBidWZmZXIsIHVzaW5nIHRoZSBkZWZhdWx0IGxpbWl0cy4KLSAgICAgICAgLy8vIDwv
c3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgQ29kZWRJbnB1dFN0cmVhbShTdHJlYW0gaW5wdXQs
IGJ5dGVbXSBidWZmZXIsIGludCBidWZmZXJQb3MsIGludCBidWZmZXJTaXplKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7Ci0gICAgICAgICAgICB0aGlzLmJ1ZmZl
ciA9IGJ1ZmZlcjsKLSAgICAgICAgICAgIHRoaXMuYnVmZmVyUG9zID0gYnVmZmVyUG9zOwotICAg
ICAgICAgICAgdGhpcy5idWZmZXJTaXplID0gYnVmZmVyU2l6ZTsKLSAgICAgICAgICAgIHRoaXMu
c2l6ZUxpbWl0ID0gRGVmYXVsdFNpemVMaW1pdDsKLSAgICAgICAgICAgIHRoaXMucmVjdXJzaW9u
TGltaXQgPSBEZWZhdWx0UmVjdXJzaW9uTGltaXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgbmV3IENvZGVkSW5wdXRTdHJlYW0gcmVh
ZGluZyBkYXRhIGZyb20gdGhlIGdpdmVuCi0gICAgICAgIC8vLyBzdHJlYW0gYW5kIGJ1ZmZlciwg
dXNpbmcgdGhlIHNwZWNpZmllZCBsaW1pdHMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
ICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFRoaXMgY2hhaW5zIHRvIHRoZSB2ZXJzaW9u
IHdpdGggdGhlIGRlZmF1bHQgbGltaXRzIGluc3RlYWQgb2YgdmljZSB2ZXJzYSB0byBhdm9pZAot
ICAgICAgICAvLy8gaGF2aW5nIHRvIGNoZWNrIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSB2
YWxpZCBldmVyeSB0aW1lLgotICAgICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICBpbnRlcm5h
bCBDb2RlZElucHV0U3RyZWFtKFN0cmVhbSBpbnB1dCwgYnl0ZVtdIGJ1ZmZlciwgaW50IGJ1ZmZl
clBvcywgaW50IGJ1ZmZlclNpemUsIGludCBzaXplTGltaXQsIGludCByZWN1cnNpb25MaW1pdCkK
LSAgICAgICAgICAgIDogdGhpcyhpbnB1dCwgYnVmZmVyLCBidWZmZXJQb3MsIGJ1ZmZlclNpemUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzaXplTGltaXQgPD0gMCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9u
KCJzaXplTGltaXQiLCAiU2l6ZSBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlIik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAocmVjdXJzaW9uTGltaXQgPD0gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKCJy
ZWN1cnNpb25MaW1pdCEiLCAiUmVjdXJzaW9uIGxpbWl0IG11c3QgYmUgcG9zaXRpdmUiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuc2l6ZUxpbWl0ID0gc2l6ZUxpbWl0OwotICAg
ICAgICAgICAgdGhpcy5yZWN1cnNpb25MaW1pdCA9IHJlY3Vyc2lvbkxpbWl0OwotICAgICAgICB9
Ci0gICAgICAgICNlbmRyZWdpb24KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyBDcmVhdGVzIGEgPHNlZSBjcmVmPSJDb2RlZElucHV0U3RyZWFtIi8+IHdpdGggdGhlIHNwZWNp
ZmllZCBzaXplIGFuZCByZWN1cnNpb24gbGltaXRzLCByZWFkaW5nCi0gICAgICAgIC8vLyBmcm9t
IGFuIGlucHV0IHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxy
ZW1hcmtzPgotICAgICAgICAvLy8gVGhpcyBtZXRob2QgZXhpc3RzIHNlcGFyYXRlbHkgZnJvbSB0
aGUgY29uc3RydWN0b3IgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgY29uc3RydWN0b3Igb3Zlcmxv
YWRzLgotICAgICAgICAvLy8gSXQgaXMgbGlrZWx5IHRvIGJlIHVzZWQgY29uc2lkZXJhYmx5IGxl
c3MgZnJlcXVlbnRseSB0aGFuIHRoZSBjb25zdHJ1Y3RvcnMsIGFzIHRoZSBkZWZhdWx0IGxpbWl0
cwotICAgICAgICAvLy8gYXJlIHN1aXRhYmxlIGZvciBtb3N0IHVzZSBjYXNlcy4KLSAgICAgICAg
Ly8vIDwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJpbnB1dCI+VGhlIGlucHV0
IHN0cmVhbSB0byByZWFkIGZyb208L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InNp
emVMaW1pdCI+VGhlIHRvdGFsIGxpbWl0IG9mIGRhdGEgdG8gcmVhZCBmcm9tIHRoZSBzdHJlYW0u
PC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZWN1cnNpb25MaW1pdCI+VGhlIG1h
eGltdW0gcmVjdXJzaW9uIGRlcHRoIHRvIGFsbG93IHdoaWxlIHJlYWRpbmcuPC9wYXJhbT4KLSAg
ICAgICAgLy8vIDxyZXR1cm5zPkEgPGM+Q29kZWRJbnB1dFN0cmVhbTwvYz4gcmVhZGluZyBmcm9t
IDxwYXJhbXJlZiBuYW1lPSJpbnB1dCIvPiB3aXRoIHRoZSBzcGVjaWZpZWQgc2l6ZQotICAgICAg
ICAvLy8gYW5kIHJlY3Vyc2lvbiBsaW1pdHMuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3Rh
dGljIENvZGVkSW5wdXRTdHJlYW0gQ3JlYXRlV2l0aExpbWl0cyhTdHJlYW0gaW5wdXQsIGludCBz
aXplTGltaXQsIGludCByZWN1cnNpb25MaW1pdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG5ldyBDb2RlZElucHV0U3RyZWFtKGlucHV0LCBuZXcgYnl0ZVtCdWZmZXJTaXplXSwgMCwg
MCwgc2l6ZUxpbWl0LCByZWN1cnNpb25MaW1pdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRo
ZSBpbnB1dCBzdHJlYW0sIG9yIHRoZSBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgYnVmZmVyCi0gICAg
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBsb25nIFBvc2l0aW9uIAotICAgICAg
ICB7Ci0gICAgICAgICAgICBnZXQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
aW5wdXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpbnB1dC5Qb3NpdGlvbiAtICgoYnVmZmVyU2l6ZSArIGJ1ZmZlclNpemVBZnRlckxpbWl0
KSAtIGJ1ZmZlclBvcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biBidWZmZXJQb3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRoZSBsYXN0IHRhZyByZWFkLCBvciAwIGlmIG5v
IHRhZ3MgaGF2ZSBiZWVuIHJlYWQgb3Igd2UndmUgcmVhZCBiZXlvbmQKLSAgICAgICAgLy8vIHRo
ZSBlbmQgb2YgdGhlIHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50
ZXJuYWwgdWludCBMYXN0VGFnIHsgZ2V0IHsgcmV0dXJuIGxhc3RUYWc7IH0gfQotCi0gICAgICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgdGhlIHNpemUgbGltaXQgZm9yIHRo
aXMgc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+
Ci0gICAgICAgIC8vLyBUaGlzIGxpbWl0IGlzIGFwcGxpZWQgd2hlbiByZWFkaW5nIGZyb20gdGhl
IHVuZGVybHlpbmcgc3RyZWFtLCBhcyBhIHNhbml0eSBjaGVjay4gSXQgaXMKLSAgICAgICAgLy8v
IG5vdCBhcHBsaWVkIHdoZW4gcmVhZGluZyBmcm9tIGEgYnl0ZSBhcnJheSBkYXRhIHNvdXJjZSB3
aXRob3V0IGFuIHVuZGVybHlpbmcgc3RyZWFtLgotICAgICAgICAvLy8gVGhlIGRlZmF1bHQgdmFs
dWUgaXMgNjRNQi4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDx2YWx1ZT4K
LSAgICAgICAgLy8vIFRoZSBzaXplIGxpbWl0LgotICAgICAgICAvLy8gPC92YWx1ZT4KLSAgICAg
ICAgcHVibGljIGludCBTaXplTGltaXQgeyBnZXQgeyByZXR1cm4gc2l6ZUxpbWl0OyB9IH0KLQot
ICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRoZSByZWN1cnNpb24g
bGltaXQgZm9yIHRoaXMgc3RyZWFtLiBUaGlzIGxpbWl0IGlzIGFwcGxpZWQgd2hpbHN0IHJlYWRp
bmcgbWVzc2FnZXMsCi0gICAgICAgIC8vLyB0byBhdm9pZCBtYWxpY2lvdXNseS1yZWN1cnNpdmUg
ZGF0YS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAg
ICAgICAvLy8gVGhlIGRlZmF1bHQgbGltaXQgaXMgNjQuCi0gICAgICAgIC8vLyA8L3JlbWFya3M+
Ci0gICAgICAgIC8vLyA8dmFsdWU+Ci0gICAgICAgIC8vLyBUaGUgcmVjdXJzaW9uIGxpbWl0IGZv
ciB0aGlzIHN0cmVhbS4KLSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBpbnQg
UmVjdXJzaW9uTGltaXQgeyBnZXQgeyByZXR1cm4gcmVjdXJzaW9uTGltaXQ7IH0gfQotCi0gICAg
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIERpc3Bvc2VzIG9mIHRoaXMgaW5zdGFuY2Us
IHBvdGVudGlhbGx5IGNsb3NpbmcgYW55IHVuZGVybHlpbmcgc3RyZWFtLgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBBcyB0aGVyZSBp
cyBubyBmbHVzaGluZyB0byBwZXJmb3JtIGhlcmUsIGRpc3Bvc2luZyBvZiBhIDxzZWUgY3JlZj0i
Q29kZWRJbnB1dFN0cmVhbSIvPiB3aGljaAotICAgICAgICAvLy8gd2FzIGNvbnN0cnVjdGVkIHdp
dGggdGhlIDxjPmxlYXZlT3BlbjwvYz4gb3B0aW9uIHBhcmFtZXRlciBzZXQgdG8gPGM+dHJ1ZTwv
Yz4gKG9yIG9uZSB3aGljaAotICAgICAgICAvLy8gd2FzIGNvbnN0cnVjdGVkIHRvIHJlYWQgZnJv
bSBhIGJ5dGUgYXJyYXkpIGhhcyBubyBlZmZlY3QuCi0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0g
ICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IWxlYXZlT3BlbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnB1dC5EaXNwb3Nl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAjcmVnaW9uIFZhbGlkYXRp
b24KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVmVyaWZpZXMgdGhhdCB0aGUg
bGFzdCBjYWxsIHRvIFJlYWRUYWcoKSByZXR1cm5lZCB0YWcgMCAtIGluIG90aGVyIHdvcmRzLAot
ICAgICAgICAvLy8gd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gd2hlbiB3ZSBl
eHBlY3RlZCB0by4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxleGNlcHRp
b24gY3JlZj0iSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIj5UaGUgCi0gICAgICAgIC8v
LyB0YWcgcmVhZCB3YXMgbm90IHRoZSBvbmUgc3BlY2lmaWVkPC9leGNlcHRpb24+Ci0gICAgICAg
IGludGVybmFsIHZvaWQgQ2hlY2tSZWFkRW5kT2ZTdHJlYW1UYWcoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobGFzdFRhZyAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5Nb3JlRGF0YUF2YWlsYWJsZSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICNlbmRyZWdpb24KLQotICAgICAg
ICAjcmVnaW9uIFJlYWRpbmcgb2YgdGFncyBldGMKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgICAgIC8vLyBQZWVrcyBhdCB0aGUgbmV4dCBmaWVsZCB0YWcuIFRoaXMgaXMgbGlrZSBjYWxs
aW5nIDxzZWUgY3JlZj0iUmVhZFRhZyIvPiwgYnV0IHRoZQotICAgICAgICAvLy8gdGFnIGlzIG5v
dCBjb25zdW1lZC4gKFNvIGEgc3Vic2VxdWVudCBjYWxsIHRvIDxzZWUgY3JlZj0iUmVhZFRhZyIv
PiB3aWxsIHJldHVybiB0aGUKLSAgICAgICAgLy8vIHNhbWUgdmFsdWUuKQotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgdWludCBQZWVrVGFnKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGhhc05leHRUYWcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG5leHRUYWc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVpbnQgc2F2ZWRM
YXN0ID0gbGFzdFRhZzsKLSAgICAgICAgICAgIG5leHRUYWcgPSBSZWFkVGFnKCk7Ci0gICAgICAg
ICAgICBoYXNOZXh0VGFnID0gdHJ1ZTsKLSAgICAgICAgICAgIGxhc3RUYWcgPSBzYXZlZExhc3Q7
IC8vIFVuZG8gdGhlIHNpZGUgZWZmZWN0IG9mIFJlYWRUYWcKLSAgICAgICAgICAgIHJldHVybiBu
ZXh0VGFnOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8g
UmVhZHMgYSBmaWVsZCB0YWcsIHJldHVybmluZyB0aGUgdGFnIG9mIDAgZm9yICJlbmQgb2Ygc3Ry
ZWFtIi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAg
ICAgICAvLy8gSWYgdGhpcyBtZXRob2QgcmV0dXJucyAwLCBpdCBkb2Vzbid0IG5lY2Vzc2FyaWx5
IG1lYW4gdGhlIGVuZCBvZiBhbGwKLSAgICAgICAgLy8vIHRoZSBkYXRhIGluIHRoaXMgQ29kZWRJ
bnB1dFN0cmVhbTsgaXQgbWF5IGJlIHRoZSBlbmQgb2YgdGhlIGxvZ2ljYWwgc3RyZWFtCi0gICAg
ICAgIC8vLyBmb3IgYW4gZW1iZWRkZWQgbWVzc2FnZSwgZm9yIGV4YW1wbGUuCi0gICAgICAgIC8v
LyA8L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgbmV4dCBmaWVsZCB0YWcsIG9y
IDAgZm9yIGVuZCBvZiBzdHJlYW0uICgwIGlzIG5ldmVyIGEgdmFsaWQgdGFnLik8L3JldHVybnM+
Ci0gICAgICAgIHB1YmxpYyB1aW50IFJlYWRUYWcoKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaGFzTmV4dFRhZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsYXN0VGFnID0g
bmV4dFRhZzsKLSAgICAgICAgICAgICAgICBoYXNOZXh0VGFnID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGxhc3RUYWc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE9w
dGltaXplIGZvciB0aGUgaW5jcmVkaWJseSBjb21tb24gY2FzZSBvZiBoYXZpbmcgYXQgbGVhc3Qg
dHdvIGJ5dGVzIGxlZnQgaW4gdGhlIGJ1ZmZlciwKLSAgICAgICAgICAgIC8vIGFuZCB0aG9zZSB0
d28gYnl0ZXMgYmVpbmcgZW5vdWdoIHRvIGdldCB0aGUgdGFnLiBUaGlzIHdpbGwgYmUgdHJ1ZSBm
b3IgZmllbGRzIHVwIHRvIDQwOTUuCi0gICAgICAgICAgICBpZiAoYnVmZmVyUG9zICsgMiA8PSBi
dWZmZXJTaXplKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCB0bXAgPSBidWZm
ZXJbYnVmZmVyUG9zKytdOwotICAgICAgICAgICAgICAgIGlmICh0bXAgPCAxMjgpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBsYXN0VGFnID0gKHVpbnQpdG1wOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gdG1wICYgMHg3ZjsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCh0bXAgPSBidWZmZXJbYnVmZmVyUG9zKytdKSA8IDEyOCkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IHRtcCA8PCA3
OwotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFRhZyA9ICh1aW50KSByZXN1bHQ7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3BlLCByZXdpbmQgYW5kIGdv
IHRoZSBwb3RlbnRpYWxseSBzbG93IHJvdXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyUG9zIC09IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VGFnID0gUmVhZFJhd1Zh
cmludDMyKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKElzQXRFbmQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBs
YXN0VGFnID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7IC8vIFRoaXMgaXMgdGhl
IG9ubHkgY2FzZSBpbiB3aGljaCB3ZSByZXR1cm4gMC4KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBsYXN0VGFnID0gUmVhZFJhd1ZhcmludDMyKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobGFzdFRhZyA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIC8vIElmIHdlIGFjdHVhbGx5IHJlYWQgemVybywgdGhhdCdzIG5vdCBhIHZhbGlkIHRh
Zy4KLSAgICAgICAgICAgICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24u
SW52YWxpZFRhZygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGxhc3RUYWc7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBTa2lwcyB0
aGUgZGF0YSBmb3IgdGhlIGZpZWxkIHdpdGggdGhlIHRhZyB3ZSd2ZSBqdXN0IHJlYWQuCi0gICAg
ICAgIC8vLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZGlyZWN0bHkgYWZ0ZXIgPHNlZSBjcmVmPSJS
ZWFkVGFnIi8+LCB3aGVuCi0gICAgICAgIC8vLyB0aGUgY2FsbGVyIHdpc2hlcyB0byBza2lwIGFu
IHVua25vd24gZmllbGQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVt
YXJrcz4KLSAgICAgICAgLy8vIFRoaXMgbWV0aG9kIHRocm93cyA8c2VlIGNyZWY9IkludmFsaWRQ
cm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiIvPiBpZiB0aGUgbGFzdC1yZWFkIHRhZyB3YXMgYW4gZW5k
LWdyb3VwIHRhZy4KLSAgICAgICAgLy8vIElmIGEgY2FsbGVyIHdpc2hlcyB0byBza2lwIGEgZ3Jv
dXAsIHRoZXkgc2hvdWxkIHNraXAgdGhlIHdob2xlIGdyb3VwLCBieSBjYWxsaW5nIHRoaXMgbWV0
aG9kIGFmdGVyIHJlYWRpbmcgdGhlCi0gICAgICAgIC8vLyBzdGFydC1ncm91cCB0YWcuIFRoaXMg
YmVoYXZpb3IgYWxsb3dzIGNhbGxlcnMgdG8gY2FsbCB0aGlzIG1ldGhvZCBvbiBhbnkgZmllbGQg
dGhleSBkb24ndCB1bmRlcnN0YW5kLCBjb3JyZWN0bHkKLSAgICAgICAgLy8vIHJlc3VsdGluZyBp
biBhbiBlcnJvciBpZiBhbiBlbmQtZ3JvdXAgdGFnIGhhcyBub3QgYmVlbiBwYWlyZWQgd2l0aCBh
biBlYXJsaWVyIHN0YXJ0LWdyb3VwIHRhZy4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAg
ICAgLy8vIDxleGNlcHRpb24gY3JlZj0iSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIj5U
aGUgbGFzdCB0YWcgd2FzIGFuIGVuZC1ncm91cCB0YWc8L2V4Y2VwdGlvbj4KLSAgICAgICAgLy8v
IDxleGNlcHRpb24gY3JlZj0iSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbiI+VGhlIGxhc3QgcmVh
ZCBvcGVyYXRpb24gcmVhZCB0byB0aGUgZW5kIG9mIHRoZSBsb2dpY2FsIHN0cmVhbTwvZXhjZXB0
aW9uPgotICAgICAgICBwdWJsaWMgdm9pZCBTa2lwTGFzdEZpZWxkKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGxhc3RUYWcgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiU2tpcExhc3RGaWVsZCBjYW5u
b3QgYmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYSBzdHJlYW0iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHN3aXRjaCAoV2lyZUZvcm1hdC5HZXRUYWdXaXJlVHlwZShsYXN0VGFnKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpcmVGb3JtYXQuV2lyZVR5cGUuU3Rh
cnRHcm91cDoKLSAgICAgICAgICAgICAgICAgICAgU2tpcEdyb3VwKGxhc3RUYWcpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpcmVGb3JtYXQuV2ly
ZVR5cGUuRW5kR3JvdXA6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJv
dG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAiU2tpcExhc3RG
aWVsZCBjYWxsZWQgb24gYW4gZW5kLWdyb3VwIHRhZywgaW5kaWNhdGluZyB0aGF0IHRoZSBjb3Jy
ZXNwb25kaW5nIHN0YXJ0LWdyb3VwIHdhcyBtaXNzaW5nIik7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBXaXJlRm9ybWF0LldpcmVUeXBlLkZpeGVkMzI6Ci0gICAgICAgICAgICAgICAgICAgIFJlYWRG
aXhlZDMyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNh
c2UgV2lyZUZvcm1hdC5XaXJlVHlwZS5GaXhlZDY0OgotICAgICAgICAgICAgICAgICAgICBSZWFk
Rml4ZWQ2NCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkOgotICAgICAgICAgICAgICAg
ICAgICB2YXIgbGVuZ3RoID0gUmVhZExlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBTa2lw
UmF3Qnl0ZXMobGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludDoKLSAgICAgICAgICAgICAgICAg
ICAgUmVhZFJhd1ZhcmludDMyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIFNraXBHcm91cCh1aW50
IHN0YXJ0R3JvdXBUYWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5vdGU6IEN1cnJlbnRs
eSB3ZSBleHBlY3QgdGhpcyB0byBiZSB0aGUgd2F5IHRoYXQgZ3JvdXBzIGFyZSByZWFkLiBXZSBj
b3VsZCBwdXQgdGhlIHJlY3Vyc2lvbgotICAgICAgICAgICAgLy8gZGVwdGggY2hhbmdlcyBpbnRv
IHRoZSBSZWFkVGFnIG1ldGhvZCBpbnN0ZWFkLCBwb3RlbnRpYWxseS4uLgotICAgICAgICAgICAg
cmVjdXJzaW9uRGVwdGgrKzsKLSAgICAgICAgICAgIGlmIChyZWN1cnNpb25EZXB0aCA+PSByZWN1
cnNpb25MaW1pdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24uUmVjdXJzaW9uTGltaXRFeGNlZWRlZCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdWludCB0YWc7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0YWcgPSBSZWFkVGFnKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRhZyA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLlRydW5jYXRlZE1lc3Nh
Z2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gQ2FuJ3QgY2FsbCBT
a2lwTGFzdEZpZWxkIGZvciB0aGlzIGNhc2UtIHRoYXQgd291bGQgdGhyb3cuCi0gICAgICAgICAg
ICAgICAgaWYgKFdpcmVGb3JtYXQuR2V0VGFnV2lyZVR5cGUodGFnKSA9PSBXaXJlRm9ybWF0Lldp
cmVUeXBlLkVuZEdyb3VwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIFRoaXMgcmVjdXJz
aW9uIHdpbGwgYWxsb3cgdXMgdG8gaGFuZGxlIG5lc3RlZCBncm91cHMuCi0gICAgICAgICAgICAg
ICAgU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IHN0YXJ0
RmllbGQgPSBXaXJlRm9ybWF0LkdldFRhZ0ZpZWxkTnVtYmVyKHN0YXJ0R3JvdXBUYWcpOwotICAg
ICAgICAgICAgaW50IGVuZEZpZWxkID0gV2lyZUZvcm1hdC5HZXRUYWdGaWVsZE51bWJlcih0YWcp
OwotICAgICAgICAgICAgaWYgKHN0YXJ0RmllbGQgIT0gZW5kRmllbGQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
bigKLSAgICAgICAgICAgICAgICAgICAgJCJNaXNtYXRjaGVkIGVuZC1ncm91cCB0YWcuIFN0YXJ0
ZWQgd2l0aCBmaWVsZCB7c3RhcnRGaWVsZH07IGVuZGVkIHdpdGggZmllbGQge2VuZEZpZWxkfSIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVjdXJzaW9uRGVwdGgtLTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJlYWRzIGEgZG91YmxlIGZp
ZWxkIGZyb20gdGhlIHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVi
bGljIGRvdWJsZSBSZWFkRG91YmxlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEJp
dENvbnZlcnRlci5JbnQ2NEJpdHNUb0RvdWJsZSgobG9uZykgUmVhZFJhd0xpdHRsZUVuZGlhbjY0
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVh
ZHMgYSBmbG9hdCBmaWVsZCBmcm9tIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIHB1YmxpYyBmbG9hdCBSZWFkRmxvYXQoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoQml0Q29udmVydGVyLklzTGl0dGxlRW5kaWFuICYmIDQgPD0gYnVmZmVyU2l6ZSAtIGJ1
ZmZlclBvcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdCByZXQgPSBCaXRD
b252ZXJ0ZXIuVG9TaW5nbGUoYnVmZmVyLCBidWZmZXJQb3MpOwotICAgICAgICAgICAgICAgIGJ1
ZmZlclBvcyArPSA0OwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnl0ZVtd
IHJhd0J5dGVzID0gUmVhZFJhd0J5dGVzKDQpOwotICAgICAgICAgICAgICAgIGlmICghQml0Q29u
dmVydGVyLklzTGl0dGxlRW5kaWFuKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgQnl0ZUFycmF5LlJldmVyc2UocmF3Qnl0ZXMpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gQml0Q29udmVydGVyLlRvU2luZ2xlKHJhd0J5dGVzLCAwKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIFJlYWRzIGEgdWludDY0IGZpZWxkIGZyb20gdGhlIHN0cmVhbS4KLSAgICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHVsb25nIFJlYWRVSW50NjQoKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gUmVhZFJhd1ZhcmludDY0KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZWFkcyBhbiBpbnQ2NCBmaWVsZCBmcm9t
IHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBsb25n
IFJlYWRJbnQ2NCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAobG9uZykgUmVhZFJh
d1ZhcmludDY0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBSZWFkcyBhbiBpbnQzMiBmaWVsZCBmcm9tIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBpbnQgUmVhZEludDMyKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIChpbnQpIFJlYWRSYXdWYXJpbnQzMigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZHMgYSBmaXhlZDY0IGZpZWxkIGZy
b20gdGhlIHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHVs
b25nIFJlYWRGaXhlZDY0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlYWRSYXdM
aXR0bGVFbmRpYW42NCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gUmVhZHMgYSBmaXhlZDMyIGZpZWxkIGZyb20gdGhlIHN0cmVhbS4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHVpbnQgUmVhZEZpeGVkMzIoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVhZFJhd0xpdHRsZUVuZGlhbjMyKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZWFkcyBhIGJvb2wgZmll
bGQgZnJvbSB0aGUgc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJs
aWMgYm9vbCBSZWFkQm9vbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZWFkUmF3
VmFyaW50MzIoKSAhPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gUmVhZHMgYSBzdHJpbmcgZmllbGQgZnJvbSB0aGUgc3RyZWFtLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RyaW5nIFJlYWRTdHJpbmcoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gUmVhZExlbmd0aCgpOwotICAgICAgICAgICAg
Ly8gTm8gbmVlZCB0byByZWFkIGFueSBkYXRhIGZvciBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAg
ICAgICBpZiAobGVuZ3RoID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSBidWZmZXJT
aXplIC0gYnVmZmVyUG9zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIEZhc3Qg
cGF0aDogIFdlIGFscmVhZHkgaGF2ZSB0aGUgYnl0ZXMgaW4gYSBjb250aWd1b3VzIGJ1ZmZlciwg
c28KLSAgICAgICAgICAgICAgICAvLyAgIGp1c3QgY29weSBkaXJlY3RseSBmcm9tIGl0LgotICAg
ICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBDb2RlZE91dHB1dFN0cmVhbS5VdGY4RW5jb2Rp
bmcuR2V0U3RyaW5nKGJ1ZmZlciwgYnVmZmVyUG9zLCBsZW5ndGgpOwotICAgICAgICAgICAgICAg
IGJ1ZmZlclBvcyArPSBsZW5ndGg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFNsb3cgcGF0aDogQnVpbGQgYSBieXRlIGFycmF5
IGZpcnN0IHRoZW4gY29weSBpdC4KLSAgICAgICAgICAgIHJldHVybiBDb2RlZE91dHB1dFN0cmVh
bS5VdGY4RW5jb2RpbmcuR2V0U3RyaW5nKFJlYWRSYXdCeXRlcyhsZW5ndGgpLCAwLCBsZW5ndGgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZHMg
YW4gZW1iZWRkZWQgbWVzc2FnZSBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+ICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIFJlYWRNZXNzYWdlKElNZXNz
YWdlIGJ1aWxkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZW5ndGggPSBSZWFkTGVu
Z3RoKCk7Ci0gICAgICAgICAgICBpZiAocmVjdXJzaW9uRGVwdGggPj0gcmVjdXJzaW9uTGltaXQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uLlJlY3Vyc2lvbkxpbWl0RXhjZWVkZWQoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGludCBvbGRMaW1pdCA9IFB1c2hMaW1pdChsZW5ndGgpOwotICAgICAgICAgICAg
KytyZWN1cnNpb25EZXB0aDsKLSAgICAgICAgICAgIGJ1aWxkZXIuTWVyZ2VGcm9tKHRoaXMpOwot
ICAgICAgICAgICAgQ2hlY2tSZWFkRW5kT2ZTdHJlYW1UYWcoKTsKLSAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgd2UndmUgcmVhZCBleGFjdGx5IGFzIG11Y2ggZGF0YSBhcyBleHBlY3RlZC4KLSAg
ICAgICAgICAgIGlmICghUmVhY2hlZExpbWl0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5UcnVuY2F0ZWRNZXNzYWdl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAtLXJlY3Vyc2lvbkRlcHRoOwotICAgICAg
ICAgICAgUG9wTGltaXQob2xkTGltaXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gUmVhZHMgYSBieXRlcyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBzdHJl
YW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+ICAgCi0gICAgICAgIHB1YmxpYyBCeXRlU3RyaW5n
IFJlYWRCeXRlcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZW5ndGggPSBSZWFkTGVu
Z3RoKCk7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoIDw9IGJ1ZmZlclNpemUgLSBidWZmZXJQb3Mg
JiYgbGVuZ3RoID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBGYXN0IHBh
dGg6ICBXZSBhbHJlYWR5IGhhdmUgdGhlIGJ5dGVzIGluIGEgY29udGlndW91cyBidWZmZXIsIHNv
Ci0gICAgICAgICAgICAgICAgLy8gICBqdXN0IGNvcHkgZGlyZWN0bHkgZnJvbSBpdC4KLSAgICAg
ICAgICAgICAgICBCeXRlU3RyaW5nIHJlc3VsdCA9IEJ5dGVTdHJpbmcuQ29weUZyb20oYnVmZmVy
LCBidWZmZXJQb3MsIGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgYnVmZmVyUG9zICs9IGxlbmd0
aDsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFNsb3cgcGF0aDog
IEJ1aWxkIGEgYnl0ZSBhcnJheSBhbmQgYXR0YWNoIGl0IHRvIGEgbmV3IEJ5dGVTdHJpbmcuCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEJ5dGVTdHJpbmcuQXR0YWNoQnl0ZXMoUmVhZFJhd0J5dGVz
KGxlbmd0aCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gUmVhZHMgYSB1aW50MzIgZmllbGQgdmFsdWUgZnJvbSB0aGUgc3Ry
ZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PiAgIAotICAgICAgICBwdWJsaWMgdWludCBSZWFk
VUludDMyKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlYWRSYXdWYXJpbnQzMigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZHMg
YW4gZW51bSBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uIElmIHRoZSBlbnVtIGlzIHZhbGlk
IGZvciB0eXBlIFQsCi0gICAgICAgIC8vLyB0aGVuIHRoZSByZWYgdmFsdWUgaXMgc2V0IGFuZCBp
dCByZXR1cm5zIHRydWUuICBPdGhlcndpc2UgdGhlIHVua25vd24gb3V0cHV0Ci0gICAgICAgIC8v
LyB2YWx1ZSBpcyBzZXQgYW5kIHRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICAgICAgIC8v
LyA8L3N1bW1hcnk+ICAgCi0gICAgICAgIHB1YmxpYyBpbnQgUmVhZEVudW0oKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBDdXJyZW50bHkganVzdCBhIHBhc3MtdGhyb3VnaCwgYnV0IGl0J3Mg
bmljZSB0byBzZXBhcmF0ZSBpdCBsb2dpY2FsbHkgZnJvbSBXcml0ZUludDMyLgotICAgICAgICAg
ICAgcmV0dXJuIChpbnQpIFJlYWRSYXdWYXJpbnQzMigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZHMgYW4gc2ZpeGVkMzIgZmllbGQgdmFsdWUg
ZnJvbSB0aGUgc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PiAgIAotICAgICAgICBwdWJs
aWMgaW50IFJlYWRTRml4ZWQzMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoaW50
KSBSZWFkUmF3TGl0dGxlRW5kaWFuMzIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vIFJlYWRzIGFuIHNmaXhlZDY0IGZpZWxkIHZhbHVlIGZyb20gdGhl
IHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4gICAKLSAgICAgICAgcHVibGljIGxvbmcg
UmVhZFNGaXhlZDY0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChsb25nKSBSZWFk
UmF3TGl0dGxlRW5kaWFuNjQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgLy8vIFJlYWRzIGFuIHNpbnQzMiBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0u
Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+ICAgCi0gICAgICAgIHB1YmxpYyBpbnQgUmVhZFNJbnQz
MigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEZWNvZGVaaWdaYWczMihSZWFkUmF3
VmFyaW50MzIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBSZWFkcyBhbiBzaW50NjQgZmllbGQgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLgotICAgICAg
ICAvLy8gPC9zdW1tYXJ5PiAgIAotICAgICAgICBwdWJsaWMgbG9uZyBSZWFkU0ludDY0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIERlY29kZVppZ1phZzY0KFJlYWRSYXdWYXJpbnQ2
NCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJl
YWRzIGEgbGVuZ3RoIGZvciBsZW5ndGgtZGVsaW1pdGVkIGRhdGEuCi0gICAgICAgIC8vLyA8L3N1
bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFRoaXMgaXMgaW50ZXJu
YWxseSBqdXN0IHJlYWRpbmcgYSB2YXJpbnQsIGJ1dCB0aGlzIG1ldGhvZCBleGlzdHMKLSAgICAg
ICAgLy8vIHRvIG1ha2UgdGhlIGNhbGxpbmcgY29kZSBjbGVhcmVyLgotICAgICAgICAvLy8gPC9y
ZW1hcmtzPgotICAgICAgICBwdWJsaWMgaW50IFJlYWRMZW5ndGgoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKGludCkgUmVhZFJhd1ZhcmludDMyKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQZWVrcyBhdCB0aGUgbmV4dCB0YWcgaW4g
dGhlIHN0cmVhbS4gSWYgaXQgbWF0Y2hlcyA8cGFyYW1yZWYgbmFtZT0idGFnIi8+LAotICAgICAg
ICAvLy8gdGhlIHRhZyBpcyBjb25zdW1lZCBhbmQgdGhlIG1ldGhvZCByZXR1cm5zIDxjPnRydWU8
L2M+OyBvdGhlcndpc2UsIHRoZQotICAgICAgICAvLy8gc3RyZWFtIGlzIGxlZnQgaW4gdGhlIG9y
aWdpbmFsIHBvc2l0aW9uIGFuZCB0aGUgbWV0aG9kIHJldHVybnMgPGM+ZmFsc2U8L2M+LgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgYm9vbCBNYXliZUNvbnN1bWVUYWco
dWludCB0YWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChQZWVrVGFnKCkgPT0gdGFnKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGhhc05leHRUYWcgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgICNlbmRyZWdpb24KLQotICAgICAgICAjcmVn
aW9uIFVuZGVybHlpbmcgcmVhZGluZyBwcmltaXRpdmVzCi0KLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gU2FtZSBjb2RlIGFzIFJlYWRSYXdWYXJpbnQzMiwgYnV0IHJlYWQgZWFj
aCBieXRlIGluZGl2aWR1YWxseSwgY2hlY2tpbmcgZm9yCi0gICAgICAgIC8vLyBidWZmZXIgb3Zl
cmZsb3cuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUgdWludCBTbG93
UmVhZFJhd1ZhcmludDMyKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHRtcCA9IFJlYWRS
YXdCeXRlKCk7Ci0gICAgICAgICAgICBpZiAodG1wIDwgMTI4KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiAodWludCkgdG1wOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaW50IHJlc3VsdCA9IHRtcCAmIDB4N2Y7Ci0gICAgICAgICAgICBpZiAoKHRtcCA9IFJlYWRS
YXdCeXRlKCkpIDwgMTI4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdCB8
PSB0bXAgPDwgNzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXN1bHQgfD0gKHRtcCAmIDB4N2YpIDw8IDc7Ci0gICAgICAg
ICAgICAgICAgaWYgKCh0bXAgPSBSZWFkUmF3Qnl0ZSgpKSA8IDEyOCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSB0bXAgPDwgMTQ7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCB8PSAodG1wICYgMHg3ZikgPDwgMTQ7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICgodG1wID0gUmVhZFJhd0J5dGUoKSkgPCAxMjgpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSB0bXAgPDwgMjE7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gKHRtcCAmIDB4N2Yp
IDw8IDIxOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9ICh0bXAgPSBSZWFkUmF3
Qnl0ZSgpKSA8PCAyODsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPj0gMTI4KQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IERpc2NhcmQgdXBwZXIgMzIgYml0cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkUmF3Qnl0ZSgpIDwgMTI4KQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKHVpbnQpIHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24uTWFs
Zm9ybWVkVmFyaW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gKHVpbnQpIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgLy8vIFJlYWRzIGEgcmF3IFZhcmludCBmcm9tIHRoZSBzdHJlYW0uICBJZiBsYXJn
ZXIgdGhhbiAzMiBiaXRzLCBkaXNjYXJkIHRoZSB1cHBlciBiaXRzLgotICAgICAgICAvLy8gVGhp
cyBtZXRob2QgaXMgb3B0aW1pc2VkIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBnb3QgbG90cyBv
ZiBkYXRhIGluIHRoZSBidWZmZXIuCi0gICAgICAgIC8vLyBUaGF0IG1lYW5zIHdlIGNhbiBjaGVj
ayB0aGUgc2l6ZSBqdXN0IG9uY2UsIHRoZW4ganVzdCByZWFkIGRpcmVjdGx5IGZyb20gdGhlIGJ1
ZmZlcgotICAgICAgICAvLy8gd2l0aG91dCBjb25zdGFudCByZWNoZWNraW5nIG9mIHRoZSBidWZm
ZXIgbGVuZ3RoLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBpbnRlcm5hbCB1aW50
IFJlYWRSYXdWYXJpbnQzMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChidWZmZXJQb3Mg
KyA1ID4gYnVmZmVyU2l6ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
U2xvd1JlYWRSYXdWYXJpbnQzMigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQg
dG1wID0gYnVmZmVyW2J1ZmZlclBvcysrXTsKLSAgICAgICAgICAgIGlmICh0bXAgPCAxMjgpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICh1aW50KSB0bXA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpbnQgcmVzdWx0ID0gdG1wICYgMHg3ZjsKLSAgICAgICAgICAg
IGlmICgodG1wID0gYnVmZmVyW2J1ZmZlclBvcysrXSkgPCAxMjgpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0IHw9IHRtcCA8PCA3OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAodG1w
ICYgMHg3ZikgPDwgNzsKLSAgICAgICAgICAgICAgICBpZiAoKHRtcCA9IGJ1ZmZlcltidWZmZXJQ
b3MrK10pIDwgMTI4KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0IHw9IHRtcCA8PCAxNDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9ICh0bXAg
JiAweDdmKSA8PCAxNDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh0bXAgPSBidWZmZXJbYnVm
ZmVyUG9zKytdKSA8IDEyOCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0IHw9IHRtcCA8PCAyMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCB8PSAodG1wICYgMHg3ZikgPDwgMjE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgfD0gKHRtcCA9IGJ1ZmZlcltidWZmZXJQb3MrK10pIDw8IDI4Owot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCA+PSAxMjgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzY2FyZCB1cHBlciAz
MiBiaXRzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGhh
cyB0byB1c2UgUmVhZFJhd0J5dGUoKSBhcyB3ZSBvbmx5IGVuc3VyZSB3ZSd2ZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGdvdCBhdCBsZWFzdCA1IGJ5dGVzIGF0IHRoZSBzdGFydCBv
ZiB0aGUgbWV0aG9kLiBUaGlzIGxldHMgdXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB1c2UgdGhlIGZhc3QgcGF0aCBpbiBtb3JlIGNhc2VzLCBhbmQgd2UgcmFyZWx5IGhpdCB0aGlz
IHNlY3Rpb24gb2YgY29kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkUmF3Qnl0ZSgpIDwgMTI4KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKHVpbnQpIHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24uTWFsZm9ybWVk
VmFyaW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
KHVpbnQpIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIFJlYWRzIGEgdmFyaW50IGZyb20gdGhlIGlucHV0IG9uZSBieXRlIGF0IGEgdGltZSwg
c28gdGhhdCBpdCBkb2VzIG5vdAotICAgICAgICAvLy8gcmVhZCBhbnkgYnl0ZXMgYWZ0ZXIgdGhl
IGVuZCBvZiB0aGUgdmFyaW50LiBJZiB5b3Ugc2ltcGx5IHdyYXBwZWQgdGhlCi0gICAgICAgIC8v
LyBzdHJlYW0gaW4gYSBDb2RlZElucHV0U3RyZWFtIGFuZCB1c2VkIFJlYWRSYXdWYXJpbnQzMihT
dHJlYW0pCi0gICAgICAgIC8vLyB0aGVuIHlvdSB3b3VsZCBwcm9iYWJseSBlbmQgdXAgcmVhZGlu
ZyBwYXN0IHRoZSBlbmQgb2YgdGhlIHZhcmludCBzaW5jZQotICAgICAgICAvLy8gQ29kZWRJbnB1
dFN0cmVhbSBidWZmZXJzIGl0cyBpbnB1dC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgLy8vIDxwYXJhbSBuYW1lPSJpbnB1dCI+PC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5z
PjwvcmV0dXJucz4KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIHVpbnQgUmVhZFJhd1ZhcmludDMy
KFN0cmVhbSBpbnB1dCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7Ci0g
ICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAoOyBvZmZzZXQgPCAz
Mjsgb2Zmc2V0ICs9IDcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGIgPSBp
bnB1dC5SZWFkQnl0ZSgpOwotICAgICAgICAgICAgICAgIGlmIChiID09IC0xKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uLlRydW5jYXRlZE1lc3NhZ2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0IHw9IChiICYgMHg3ZikgPDwgb2Zmc2V0OwotICAgICAgICAgICAgICAg
IGlmICgoYiAmIDB4ODApID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKHVpbnQpIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAvLyBLZWVwIHJlYWRpbmcgdXAgdG8gNjQgYml0cy4KLSAgICAgICAg
ICAgIGZvciAoOyBvZmZzZXQgPCA2NDsgb2Zmc2V0ICs9IDcpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaW50IGIgPSBpbnB1dC5SZWFkQnl0ZSgpOwotICAgICAgICAgICAgICAgIGlm
IChiID09IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cg
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLlRydW5jYXRlZE1lc3NhZ2UoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChiICYgMHg4MCkgPT0gMCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAodWludCkgcmVzdWx0Owot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocm93IEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5NYWxmb3JtZWRWYXJpbnQoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJlYWRzIGEgcmF3IHZhcmludCBm
cm9tIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIGludGVybmFs
IHVsb25nIFJlYWRSYXdWYXJpbnQ2NCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzaGlm
dCA9IDA7Ci0gICAgICAgICAgICB1bG9uZyByZXN1bHQgPSAwOwotICAgICAgICAgICAgd2hpbGUg
KHNoaWZ0IDwgNjQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnl0ZSBiID0gUmVh
ZFJhd0J5dGUoKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgfD0gKHVsb25nKSAoYiAmIDB4N0Yp
IDw8IHNoaWZ0OwotICAgICAgICAgICAgICAgIGlmICgoYiAmIDB4ODApID09IDApCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBzaGlmdCArPSA3OwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLk1hbGZvcm1lZFZh
cmludCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8g
UmVhZHMgYSAzMi1iaXQgbGl0dGxlLWVuZGlhbiBpbnRlZ2VyIGZyb20gdGhlIHN0cmVhbS4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgdWludCBSZWFkUmF3TGl0dGxl
RW5kaWFuMzIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1aW50IGIxID0gUmVhZFJhd0J5dGUo
KTsKLSAgICAgICAgICAgIHVpbnQgYjIgPSBSZWFkUmF3Qnl0ZSgpOwotICAgICAgICAgICAgdWlu
dCBiMyA9IFJlYWRSYXdCeXRlKCk7Ci0gICAgICAgICAgICB1aW50IGI0ID0gUmVhZFJhd0J5dGUo
KTsKLSAgICAgICAgICAgIHJldHVybiBiMSB8IChiMiA8PCA4KSB8IChiMyA8PCAxNikgfCAoYjQg
PDwgMjQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8g
UmVhZHMgYSA2NC1iaXQgbGl0dGxlLWVuZGlhbiBpbnRlZ2VyIGZyb20gdGhlIHN0cmVhbS4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgdWxvbmcgUmVhZFJhd0xpdHRs
ZUVuZGlhbjY0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdWxvbmcgYjEgPSBSZWFkUmF3Qnl0
ZSgpOwotICAgICAgICAgICAgdWxvbmcgYjIgPSBSZWFkUmF3Qnl0ZSgpOwotICAgICAgICAgICAg
dWxvbmcgYjMgPSBSZWFkUmF3Qnl0ZSgpOwotICAgICAgICAgICAgdWxvbmcgYjQgPSBSZWFkUmF3
Qnl0ZSgpOwotICAgICAgICAgICAgdWxvbmcgYjUgPSBSZWFkUmF3Qnl0ZSgpOwotICAgICAgICAg
ICAgdWxvbmcgYjYgPSBSZWFkUmF3Qnl0ZSgpOwotICAgICAgICAgICAgdWxvbmcgYjcgPSBSZWFk
UmF3Qnl0ZSgpOwotICAgICAgICAgICAgdWxvbmcgYjggPSBSZWFkUmF3Qnl0ZSgpOwotICAgICAg
ICAgICAgcmV0dXJuIGIxIHwgKGIyIDw8IDgpIHwgKGIzIDw8IDE2KSB8IChiNCA8PCAyNCkKLSAg
ICAgICAgICAgICAgICAgICB8IChiNSA8PCAzMikgfCAoYjYgPDwgNDApIHwgKGI3IDw8IDQ4KSB8
IChiOCA8PCA1Nik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBEZWNvZGUgYSAzMi1iaXQgdmFsdWUgd2l0aCBaaWdaYWcgZW5jb2RpbmcuCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFppZ1ph
ZyBlbmNvZGVzIHNpZ25lZCBpbnRlZ2VycyBpbnRvIHZhbHVlcyB0aGF0IGNhbiBiZSBlZmZpY2ll
bnRseQotICAgICAgICAvLy8gZW5jb2RlZCB3aXRoIHZhcmludC4gIChPdGhlcndpc2UsIG5lZ2F0
aXZlIHZhbHVlcyBtdXN0IGJlIAotICAgICAgICAvLy8gc2lnbi1leHRlbmRlZCB0byA2NCBiaXRz
IHRvIGJlIHZhcmludCBlbmNvZGVkLCB0aHVzIGFsd2F5cyB0YWtpbmcKLSAgICAgICAgLy8vIDEw
IGJ5dGVzIG9uIHRoZSB3aXJlLikKLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgaW50
ZXJuYWwgc3RhdGljIGludCBEZWNvZGVaaWdaYWczMih1aW50IG4pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAoaW50KShuID4+IDEpIF4gLShpbnQpKG4gJiAxKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIERlY29kZSBhIDMyLWJpdCB2YWx1
ZSB3aXRoIFppZ1phZyBlbmNvZGluZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
Ly8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gWmlnWmFnIGVuY29kZXMgc2lnbmVkIGludGVnZXJz
IGludG8gdmFsdWVzIHRoYXQgY2FuIGJlIGVmZmljaWVudGx5Ci0gICAgICAgIC8vLyBlbmNvZGVk
IHdpdGggdmFyaW50LiAgKE90aGVyd2lzZSwgbmVnYXRpdmUgdmFsdWVzIG11c3QgYmUgCi0gICAg
ICAgIC8vLyBzaWduLWV4dGVuZGVkIHRvIDY0IGJpdHMgdG8gYmUgdmFyaW50IGVuY29kZWQsIHRo
dXMgYWx3YXlzIHRha2luZwotICAgICAgICAvLy8gMTAgYnl0ZXMgb24gdGhlIHdpcmUuKQotICAg
ICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgbG9uZyBEZWNvZGVa
aWdaYWc2NCh1bG9uZyBuKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGxvbmcpKG4g
Pj4gMSkgXiAtKGxvbmcpKG4gJiAxKTsKLSAgICAgICAgfQotICAgICAgICAjZW5kcmVnaW9uCi0K
LSAgICAgICAgI3JlZ2lvbiBJbnRlcm5hbCByZWFkaW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudAot
Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFNldHMgY3VycmVudExpbWl0IHRv
IChjdXJyZW50IHBvc2l0aW9uKSArIGJ5dGVMaW1pdC4gVGhpcyBpcyBjYWxsZWQKLSAgICAgICAg
Ly8vIHdoZW4gZGVzY2VuZGluZyBpbnRvIGEgbGVuZ3RoLWRlbGltaXRlZCBlbWJlZGRlZCBtZXNz
YWdlLiBUaGUgcHJldmlvdXMKLSAgICAgICAgLy8vIGxpbWl0IGlzIHJldHVybmVkLgotICAgICAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIG9sZCBsaW1pdC48L3Jl
dHVybnM+Ci0gICAgICAgIGludGVybmFsIGludCBQdXNoTGltaXQoaW50IGJ5dGVMaW1pdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGJ5dGVMaW1pdCA8IDApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLk5lZ2F0
aXZlU2l6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnl0ZUxpbWl0ICs9IHRvdGFs
Qnl0ZXNSZXRpcmVkICsgYnVmZmVyUG9zOwotICAgICAgICAgICAgaW50IG9sZExpbWl0ID0gY3Vy
cmVudExpbWl0OwotICAgICAgICAgICAgaWYgKGJ5dGVMaW1pdCA+IG9sZExpbWl0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbi5UcnVuY2F0ZWRNZXNzYWdlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJy
ZW50TGltaXQgPSBieXRlTGltaXQ7Ci0KLSAgICAgICAgICAgIFJlY29tcHV0ZUJ1ZmZlclNpemVB
ZnRlckxpbWl0KCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBvbGRMaW1pdDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHByaXZhdGUgdm9pZCBSZWNvbXB1dGVCdWZmZXJTaXplQWZ0ZXJMaW1pdCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGJ1ZmZlclNpemUgKz0gYnVmZmVyU2l6ZUFmdGVyTGltaXQ7
Ci0gICAgICAgICAgICBpbnQgYnVmZmVyRW5kID0gdG90YWxCeXRlc1JldGlyZWQgKyBidWZmZXJT
aXplOwotICAgICAgICAgICAgaWYgKGJ1ZmZlckVuZCA+IGN1cnJlbnRMaW1pdCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMaW1pdCBpcyBpbiBjdXJyZW50IGJ1ZmZlci4KLSAg
ICAgICAgICAgICAgICBidWZmZXJTaXplQWZ0ZXJMaW1pdCA9IGJ1ZmZlckVuZCAtIGN1cnJlbnRM
aW1pdDsKLSAgICAgICAgICAgICAgICBidWZmZXJTaXplIC09IGJ1ZmZlclNpemVBZnRlckxpbWl0
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJ1ZmZlclNpemVBZnRlckxpbWl0ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIERpc2NhcmRzIHRoZSBj
dXJyZW50IGxpbWl0LCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIGxpbWl0LgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICBpbnRlcm5hbCB2b2lkIFBvcExpbWl0KGludCBvbGRMaW1pdCkK
LSAgICAgICAgewotICAgICAgICAgICAgY3VycmVudExpbWl0ID0gb2xkTGltaXQ7Ci0gICAgICAg
ICAgICBSZWNvbXB1dGVCdWZmZXJTaXplQWZ0ZXJMaW1pdCgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCBhbGwg
dGhlIGRhdGEgYmVmb3JlIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFkLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPgotICAgICAgICBpbnRlcm5h
bCBib29sIFJlYWNoZWRMaW1pdAotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudExpbWl0ID09IGludC5NYXhWYWx1ZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW50IGN1cnJlbnRBYnNvbHV0ZVBvc2l0
aW9uID0gdG90YWxCeXRlc1JldGlyZWQgKyBidWZmZXJQb3M7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGN1cnJlbnRBYnNvbHV0ZVBvc2l0aW9uID49IGN1cnJlbnRMaW1pdDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgc3RyZWFtIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGlucHV0LiBU
aGlzIGlzIHRoZQotICAgICAgICAvLy8gY2FzZSBpZiBlaXRoZXIgdGhlIGVuZCBvZiB0aGUgdW5k
ZXJseWluZyBpbnB1dCBzb3VyY2UgaGFzIGJlZW4gcmVhY2hlZCBvcgotICAgICAgICAvLy8gdGhl
IHN0cmVhbSBoYXMgcmVhY2hlZCBhIGxpbWl0IGNyZWF0ZWQgdXNpbmcgUHVzaExpbWl0LgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgYm9vbCBJc0F0RW5kCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdldCB7IHJldHVybiBidWZmZXJQb3MgPT0gYnVmZmVyU2l6ZSAmJiAh
UmVmaWxsQnVmZmVyKGZhbHNlKTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gQ2FsbGVkIHdoZW4gYnVmZmVyIGlzIGVtcHR5IHRvIHJlYWQgbW9yZSBi
eXRlcyBmcm9tIHRoZQotICAgICAgICAvLy8gaW5wdXQuICBJZiA8cGFyYW1yZWYgbmFtZT0ibXVz
dFN1Y2NlZWQiLz4gaXMgdHJ1ZSwgUmVmaWxsQnVmZmVyKCkgZ3VyYW50ZWVzIHRoYXQKLSAgICAg
ICAgLy8vIGVpdGhlciB0aGVyZSB3aWxsIGJlIGF0IGxlYXN0IG9uZSBieXRlIGluIHRoZSBidWZm
ZXIgd2hlbiBpdCByZXR1cm5zCi0gICAgICAgIC8vLyBvciBpdCB3aWxsIHRocm93IGFuIGV4Y2Vw
dGlvbi4gIElmIDxwYXJhbXJlZiBuYW1lPSJtdXN0U3VjY2VlZCIvPiBpcyBmYWxzZSwKLSAgICAg
ICAgLy8vIFJlZmlsbEJ1ZmZlcigpIHJldHVybnMgZmFsc2UgaWYgbm8gbW9yZSBieXRlcyB3ZXJl
IGF2YWlsYWJsZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBu
YW1lPSJtdXN0U3VjY2VlZCI+PC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPjwvcmV0dXJu
cz4KLSAgICAgICAgcHJpdmF0ZSBib29sIFJlZmlsbEJ1ZmZlcihib29sIG11c3RTdWNjZWVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyUG9zIDwgYnVmZmVyU2l6ZSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2Vw
dGlvbigiUmVmaWxsQnVmZmVyKCkgY2FsbGVkIHdoZW4gYnVmZmVyIHdhc24ndCBlbXB0eS4iKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRvdGFsQnl0ZXNSZXRpcmVkICsgYnVm
ZmVyU2l6ZSA9PSBjdXJyZW50TGltaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ly8gT29wcywgd2UgaGl0IGEgbGltaXQuCi0gICAgICAgICAgICAgICAgaWYgKG11c3RTdWNjZWVk
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uLlRydW5jYXRlZE1lc3NhZ2UoKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdG90YWxCeXRlc1JldGlyZWQgKz0gYnVmZmVyU2l6ZTsKLQotICAgICAg
ICAgICAgYnVmZmVyUG9zID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlclNpemUgPSAoaW5wdXQgPT0g
bnVsbCkgPyAwIDogaW5wdXQuUmVhZChidWZmZXIsIDAsIGJ1ZmZlci5MZW5ndGgpOwotICAgICAg
ICAgICAgaWYgKGJ1ZmZlclNpemUgPCAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHJlYW0uUmVhZCByZXR1cm5l
ZCBhIG5lZ2F0aXZlIGNvdW50Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYnVm
ZmVyU2l6ZSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdXN0U3Vj
Y2VlZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5UcnVuY2F0ZWRNZXNzYWdlKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUmVj
b21wdXRlQnVmZmVyU2l6ZUFmdGVyTGltaXQoKTsKLSAgICAgICAgICAgICAgICBpbnQgdG90YWxC
eXRlc1JlYWQgPQotICAgICAgICAgICAgICAgICAgICB0b3RhbEJ5dGVzUmV0aXJlZCArIGJ1ZmZl
clNpemUgKyBidWZmZXJTaXplQWZ0ZXJMaW1pdDsKLSAgICAgICAgICAgICAgICBpZiAodG90YWxC
eXRlc1JlYWQgPiBzaXplTGltaXQgfHwgdG90YWxCeXRlc1JlYWQgPCAwKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhj
ZXB0aW9uLlNpemVMaW1pdEV4Y2VlZGVkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZCBvbmUgYnl0ZSBmcm9tIHRoZSBpbnB1dC4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iSW52
YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIj4KLSAgICAgICAgLy8vIHRoZSBlbmQgb2YgdGhl
IHN0cmVhbSBvciB0aGUgY3VycmVudCBsaW1pdCB3YXMgcmVhY2hlZAotICAgICAgICAvLy8gPC9l
eGNlcHRpb24+Ci0gICAgICAgIGludGVybmFsIGJ5dGUgUmVhZFJhd0J5dGUoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoYnVmZmVyUG9zID09IGJ1ZmZlclNpemUpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgUmVmaWxsQnVmZmVyKHRydWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIGJ1ZmZlcltidWZmZXJQb3MrK107Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZWFkcyBhIGZpeGVkIHNpemUgb2YgYnl0ZXMg
ZnJvbSB0aGUgaW5wdXQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8ZXhj
ZXB0aW9uIGNyZWY9IkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiI+Ci0gICAgICAgIC8v
LyB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gb3IgdGhlIGN1cnJlbnQgbGltaXQgd2FzIHJlYWNoZWQK
LSAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgotICAgICAgICBpbnRlcm5hbCBieXRlW10gUmVhZFJh
d0J5dGVzKGludCBzaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA8IDApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uLk5lZ2F0aXZlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodG90YWxCeXRlc1JldGlyZWQgKyBidWZmZXJQb3MgKyBzaXplID4gY3VycmVudExpbWl0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFJlYWQgdG8gdGhlIGVuZCBvZiB0aGUg
c3RyZWFtICh1cCB0byB0aGUgY3VycmVudCBsaW1pdCkgYW55d2F5LgotICAgICAgICAgICAgICAg
IFNraXBSYXdCeXRlcyhjdXJyZW50TGltaXQgLSB0b3RhbEJ5dGVzUmV0aXJlZCAtIGJ1ZmZlclBv
cyk7Ci0gICAgICAgICAgICAgICAgLy8gVGhlbiBmYWlsLgotICAgICAgICAgICAgICAgIHRocm93
IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5UcnVuY2F0ZWRNZXNzYWdlKCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzaXplIDw9IGJ1ZmZlclNpemUgLSBidWZmZXJQ
b3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhbGwgdGhlIGJ5
dGVzIHdlIG5lZWQgYWxyZWFkeS4KLSAgICAgICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBuZXcg
Ynl0ZVtzaXplXTsKLSAgICAgICAgICAgICAgICBCeXRlQXJyYXkuQ29weShidWZmZXIsIGJ1ZmZl
clBvcywgYnl0ZXMsIDAsIHNpemUpOwotICAgICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBzaXpl
OwotICAgICAgICAgICAgICAgIHJldHVybiBieXRlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKHNpemUgPCBidWZmZXIuTGVuZ3RoKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIFJlYWRpbmcgbW9yZSBieXRlcyB0aGFuIGFyZSBpbiB0aGUgYnVmZmVyLCBi
dXQgbm90IGFuIGV4Y2Vzc2l2ZSBudW1iZXIKLSAgICAgICAgICAgICAgICAvLyBvZiBieXRlcy4g
IFdlIGNhbiBzYWZlbHkgYWxsb2NhdGUgdGhlIHJlc3VsdGluZyBhcnJheSBhaGVhZCBvZiB0aW1l
LgotCi0gICAgICAgICAgICAgICAgLy8gRmlyc3QgY29weSB3aGF0IHdlIGhhdmUuCi0gICAgICAg
ICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbc2l6ZV07Ci0gICAgICAgICAgICAgICAg
aW50IHBvcyA9IGJ1ZmZlclNpemUgLSBidWZmZXJQb3M7Ci0gICAgICAgICAgICAgICAgQnl0ZUFy
cmF5LkNvcHkoYnVmZmVyLCBidWZmZXJQb3MsIGJ5dGVzLCAwLCBwb3MpOwotICAgICAgICAgICAg
ICAgIGJ1ZmZlclBvcyA9IGJ1ZmZlclNpemU7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSB3YW50
IHRvIHVzZSBSZWZpbGxCdWZmZXIoKSBhbmQgdGhlbiBjb3B5IGZyb20gdGhlIGJ1ZmZlciBpbnRv
IG91cgotICAgICAgICAgICAgICAgIC8vIGJ5dGUgYXJyYXkgcmF0aGVyIHRoYW4gcmVhZGluZyBk
aXJlY3RseSBpbnRvIG91ciBieXRlIGFycmF5IGJlY2F1c2UKLSAgICAgICAgICAgICAgICAvLyB0
aGUgaW5wdXQgbWF5IGJlIHVuYnVmZmVyZWQuCi0gICAgICAgICAgICAgICAgUmVmaWxsQnVmZmVy
KHRydWUpOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKHNpemUgLSBwb3MgPiBidWZmZXJTaXpl
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQnVmZmVyLkJsb2NrQ29w
eShidWZmZXIsIDAsIGJ5dGVzLCBwb3MsIGJ1ZmZlclNpemUpOwotICAgICAgICAgICAgICAgICAg
ICBwb3MgKz0gYnVmZmVyU2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyUG9zID0gYnVm
ZmVyU2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgUmVmaWxsQnVmZmVyKHRydWUpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEJ5dGVBcnJheS5Db3B5KGJ1ZmZlciwgMCwg
Ynl0ZXMsIHBvcywgc2l6ZSAtIHBvcyk7Ci0gICAgICAgICAgICAgICAgYnVmZmVyUG9zID0gc2l6
ZSAtIHBvczsKLQotICAgICAgICAgICAgICAgIHJldHVybiBieXRlczsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUg
c2l6ZSBpcyB2ZXJ5IGxhcmdlLiAgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHdlIGNhbid0IGFsbG9j
YXRlIHRoZQotICAgICAgICAgICAgICAgIC8vIGVudGlyZSBieXRlIGFycmF5IHlldC4gIFRoZSBz
aXplIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIGlucHV0LCBzbyBhCi0gICAgICAgICAgICAgICAg
Ly8gbWFsaWNpb3VzbHktY3JhZnRlZCBtZXNzYWdlIGNvdWxkIHByb3ZpZGUgYSBib2d1cyB2ZXJ5
IGxhcmdlIHNpemUgaW4KLSAgICAgICAgICAgICAgICAvLyBvcmRlciB0byB0cmljayB0aGUgYXBw
IGludG8gYWxsb2NhdGluZyBhIGxvdCBvZiBtZW1vcnkuICBXZSBhdm9pZCB0aGlzCi0gICAgICAg
ICAgICAgICAgLy8gYnkgYWxsb2NhdGluZyBhbmQgcmVhZGluZyBvbmx5IGEgc21hbGwgY2h1bmsg
YXQgYSB0aW1lLCBzbyB0aGF0IHRoZQotICAgICAgICAgICAgICAgIC8vIG1hbGljaW91cyBtZXNz
YWdlIG11c3QgYWN0dWFsbHkgKmJlKiBleHRyZW1lbHkgbGFyZ2UgdG8gY2F1c2UKLSAgICAgICAg
ICAgICAgICAvLyBwcm9ibGVtcy4gIE1lYW53aGlsZSwgd2UgbGltaXQgdGhlIGFsbG93ZWQgc2l6
ZSBvZiBhIG1lc3NhZ2UgZWxzZXdoZXJlLgotCi0gICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIg
dGhlIGJ1ZmZlciBtYXJrZXJzIHNpbmNlIHdlJ2xsIGhhdmUgdG8gY29weSB0aGUgYnl0ZXMgb3V0
IG9mCi0gICAgICAgICAgICAgICAgLy8gaXQgbGF0ZXIuCi0gICAgICAgICAgICAgICAgaW50IG9y
aWdpbmFsQnVmZmVyUG9zID0gYnVmZmVyUG9zOwotICAgICAgICAgICAgICAgIGludCBvcmlnaW5h
bEJ1ZmZlclNpemUgPSBidWZmZXJTaXplOwotCi0gICAgICAgICAgICAgICAgLy8gTWFyayB0aGUg
Y3VycmVudCBidWZmZXIgY29uc3VtZWQuCi0gICAgICAgICAgICAgICAgdG90YWxCeXRlc1JldGly
ZWQgKz0gYnVmZmVyU2l6ZTsKLSAgICAgICAgICAgICAgICBidWZmZXJQb3MgPSAwOwotICAgICAg
ICAgICAgICAgIGJ1ZmZlclNpemUgPSAwOwotCi0gICAgICAgICAgICAgICAgLy8gUmVhZCBhbGwg
dGhlIHJlc3Qgb2YgdGhlIGJ5dGVzIHdlIG5lZWQuCi0gICAgICAgICAgICAgICAgaW50IHNpemVM
ZWZ0ID0gc2l6ZSAtIChvcmlnaW5hbEJ1ZmZlclNpemUgLSBvcmlnaW5hbEJ1ZmZlclBvcyk7Ci0g
ICAgICAgICAgICAgICAgTGlzdDxieXRlW10+IGNodW5rcyA9IG5ldyBMaXN0PGJ5dGVbXT4oKTsK
LQotICAgICAgICAgICAgICAgIHdoaWxlIChzaXplTGVmdCA+IDApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBieXRlW10gY2h1bmsgPSBuZXcgYnl0ZVtNYXRoLk1pbihz
aXplTGVmdCwgYnVmZmVyLkxlbmd0aCldOwotICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0g
MDsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGNodW5rLkxlbmd0aCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG4gPSAoaW5wdXQg
PT0gbnVsbCkgPyAtMSA6IGlucHV0LlJlYWQoY2h1bmssIHBvcywgY2h1bmsuTGVuZ3RoIC0gcG9z
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuIDw9IDApCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uLlRydW5jYXRlZE1lc3NhZ2UoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXNSZXRpcmVkICs9IG47
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gbjsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBzaXplTGVmdCAtPSBjaHVuay5MZW5ndGg7Ci0gICAgICAg
ICAgICAgICAgICAgIGNodW5rcy5BZGQoY2h1bmspOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIE9LLCBnb3QgZXZlcnl0aGluZy4gIE5vdyBjb25jYXRlbmF0ZSBpdCBh
bGwgaW50byBvbmUgYnVmZmVyLgotICAgICAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBi
eXRlW3NpemVdOwotCi0gICAgICAgICAgICAgICAgLy8gU3RhcnQgYnkgY29weWluZyB0aGUgbGVm
dG92ZXIgYnl0ZXMgZnJvbSB0aGlzLmJ1ZmZlci4KLSAgICAgICAgICAgICAgICBpbnQgbmV3UG9z
ID0gb3JpZ2luYWxCdWZmZXJTaXplIC0gb3JpZ2luYWxCdWZmZXJQb3M7Ci0gICAgICAgICAgICAg
ICAgQnl0ZUFycmF5LkNvcHkoYnVmZmVyLCBvcmlnaW5hbEJ1ZmZlclBvcywgYnl0ZXMsIDAsIG5l
d1Bvcyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBbmQgbm93IGFsbCB0aGUgY2h1bmtzLgotICAg
ICAgICAgICAgICAgIGZvcmVhY2ggKGJ5dGVbXSBjaHVuayBpbiBjaHVua3MpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBCdWZmZXIuQmxvY2tDb3B5KGNodW5rLCAwLCBi
eXRlcywgbmV3UG9zLCBjaHVuay5MZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBuZXdQb3Mg
Kz0gY2h1bmsuTGVuZ3RoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IERvbmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZHMgYW5kIGRp
c2NhcmRzIDxwYXJhbXJlZiBuYW1lPSJzaXplIi8+IGJ5dGVzLgotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24iPnRoZSBlbmQgb2YgdGhlIHN0cmVhbQotICAgICAgICAvLy8gb3IgdGhlIGN1cnJl
bnQgbGltaXQgd2FzIHJlYWNoZWQ8L2V4Y2VwdGlvbj4KLSAgICAgICAgcHJpdmF0ZSB2b2lkIFNr
aXBSYXdCeXRlcyhpbnQgc2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNpemUgPCAw
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbi5OZWdhdGl2ZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHRvdGFsQnl0ZXNSZXRpcmVkICsgYnVmZmVyUG9zICsgc2l6ZSA+IGN1cnJlbnRMaW1p
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBSZWFkIHRvIHRoZSBlbmQgb2Yg
dGhlIHN0cmVhbSBhbnl3YXkuCi0gICAgICAgICAgICAgICAgU2tpcFJhd0J5dGVzKGN1cnJlbnRM
aW1pdCAtIHRvdGFsQnl0ZXNSZXRpcmVkIC0gYnVmZmVyUG9zKTsKLSAgICAgICAgICAgICAgICAv
LyBUaGVuIGZhaWwuCi0gICAgICAgICAgICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uLlRydW5jYXRlZE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHNpemUgPD0gYnVmZmVyU2l6ZSAtIGJ1ZmZlclBvcykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIGFsbCB0aGUgYnl0ZXMgd2UgbmVlZCBhbHJlYWR5Lgot
ICAgICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBzaXplOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFNraXBwaW5nIG1v
cmUgYnl0ZXMgdGhhbiBhcmUgaW4gdGhlIGJ1ZmZlci4gIEZpcnN0IHNraXAgd2hhdCB3ZSBoYXZl
LgotICAgICAgICAgICAgICAgIGludCBwb3MgPSBidWZmZXJTaXplIC0gYnVmZmVyUG9zOwotCi0g
ICAgICAgICAgICAgICAgLy8gUk9LIDUvNy8yMDEzIElzc3VlICM1NDogc2hvdWxkIHJldGlyZSBh
bGwgYnl0ZXMgaW4gYnVmZmVyIChidWZmZXJTaXplKQotICAgICAgICAgICAgICAgIC8vIHRvdGFs
Qnl0ZXNSZXRpcmVkICs9IHBvczsKLSAgICAgICAgICAgICAgICB0b3RhbEJ5dGVzUmV0aXJlZCAr
PSBidWZmZXJTaXplOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJ1ZmZlclBv
cyA9IDA7Ci0gICAgICAgICAgICAgICAgYnVmZmVyU2l6ZSA9IDA7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBUaGVuIHNraXAgZGlyZWN0bHkgZnJvbSB0aGUgSW5wdXRTdHJlYW0gZm9yIHRoZSByZXN0
LgotICAgICAgICAgICAgICAgIGlmIChwb3MgPCBzaXplKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbi5UcnVuY2F0ZWRNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgU2tpcEltcGwoc2l6ZSAtIHBvcyk7Ci0gICAgICAgICAgICAgICAgICAg
IHRvdGFsQnl0ZXNSZXRpcmVkICs9IHNpemUgLSBwb3M7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAv
Ly8gQWJzdHJhY3Rpb24gb2Ygc2tpcHBpbmcgdG8gY29wZSB3aXRoIHN0cmVhbXMgd2hpY2ggY2Fu
J3QgcmVhbGx5IHNraXAuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUg
dm9pZCBTa2lwSW1wbChpbnQgYW1vdW50VG9Ta2lwKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaW5wdXQuQ2FuU2VlaykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb25nIHBy
ZXZpb3VzUG9zaXRpb24gPSBpbnB1dC5Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICBpbnB1dC5Q
b3NpdGlvbiArPSBhbW91bnRUb1NraXA7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0LlBvc2l0
aW9uICE9IHByZXZpb3VzUG9zaXRpb24gKyBhbW91bnRUb1NraXApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24uVHJ1bmNhdGVkTWVzc2FnZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBieXRlW10g
c2tpcEJ1ZmZlciA9IG5ldyBieXRlW01hdGguTWluKDEwMjQsIGFtb3VudFRvU2tpcCldOwotICAg
ICAgICAgICAgICAgIHdoaWxlIChhbW91bnRUb1NraXAgPiAwKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGlucHV0LlJlYWQoc2tpcEJ1ZmZl
ciwgMCwgTWF0aC5NaW4oc2tpcEJ1ZmZlci5MZW5ndGgsIGFtb3VudFRvU2tpcCkpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbi5UcnVuY2F0ZWRNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgYW1vdW50VG9Ta2lwIC09IGJ5dGVzUmVhZDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAjZW5kcmVnaW9uCi0gICAgfQot
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYvQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVNpemUuY3MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMv
R29vZ2xlLlByb3RvYnVmL0NvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTaXplLmNzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjI5MzdjMTNkZDBiZDUyYTQ2MjAyNzdlY2Y4MDQzYTA3
MjA1MDZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3No
YXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVNpemUuY3MK
KysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAsMCBAQAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNl
IGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdp
b24KLQotdXNpbmcgU3lzdGVtOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmCi17Ci0gICAg
Ly8gVGhpcyBwYXJ0IG9mIENvZGVkT3V0cHV0U3RyZWFtIHByb3ZpZGVzIGFsbCB0aGUgc3RhdGlj
IGVudHJ5IHBvaW50cyB0aGF0IGFyZSB1c2VkCi0gICAgLy8gYnkgZ2VuZXJhdGVkIGNvZGUgYW5k
IGludGVybmFsbHkgdG8gY29tcHV0ZSB0aGUgc2l6ZSBvZiBtZXNzYWdlcyBwcmlvciB0byBiZWlu
ZwotICAgIC8vIHdyaXR0ZW4gdG8gYW4gaW5zdGFuY2Ugb2YgQ29kZWRPdXRwdXRTdHJlYW0uCi0g
ICAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIENvZGVkT3V0cHV0U3RyZWFtCi0gICAgewot
ICAgICAgICBwcml2YXRlIGNvbnN0IGludCBMaXR0bGVFbmRpYW42NFNpemUgPSA4OwotICAgICAg
ICBwcml2YXRlIGNvbnN0IGludCBMaXR0bGVFbmRpYW4zMlNpemUgPSA0OyAgICAgICAgCi0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiBi
eXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgICAgICAvLy8gZG91Ymxl
IGZpZWxkLCBpbmNsdWRpbmcgdGhlIHRhZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgcHVibGljIHN0YXRpYyBpbnQgQ29tcHV0ZURvdWJsZVNpemUoZG91YmxlIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTGl0dGxlRW5kaWFuNjRTaXplOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29tcHV0ZXMgdGhlIG51bWJl
ciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgICAgICAvLy8g
ZmxvYXQgZmllbGQsIGluY2x1ZGluZyB0aGUgdGFnLgotICAgICAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgICAgICBwdWJsaWMgc3RhdGljIGludCBDb21wdXRlRmxvYXRTaXplKGZsb2F0IHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTGl0dGxlRW5kaWFuMzJTaXplOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29tcHV0ZXMgdGhlIG51
bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgICAgICAv
Ly8gdWludDY0IGZpZWxkLCBpbmNsdWRpbmcgdGhlIHRhZy4KLSAgICAgICAgLy8vIDwvc3VtbWFy
eT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgQ29tcHV0ZVVJbnQ2NFNpemUodWxvbmcgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb21wdXRlUmF3VmFyaW50NjRTaXpl
KHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IENvbXB1dGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5j
b2RlIGFuCi0gICAgICAgIC8vLyBpbnQ2NCBmaWVsZCwgaW5jbHVkaW5nIHRoZSB0YWcuCi0gICAg
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IENvbXB1dGVJbnQ2
NFNpemUobG9uZyB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENvbXB1dGVS
YXdWYXJpbnQ2NFNpemUoKHVsb25nKSB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQg
d291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAgICAgICAvLy8gaW50MzIgZmllbGQsIGlu
Y2x1ZGluZyB0aGUgdGFnLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMg
c3RhdGljIGludCBDb21wdXRlSW50MzJTaXplKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHZhbHVlID49IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIENvbXB1dGVSYXdWYXJpbnQzMlNpemUoKHVpbnQpIHZhbHVlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBNdXN0
IHNpZ24tZXh0ZW5kLgotICAgICAgICAgICAgICAgIHJldHVybiAxMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbXB1dGVz
IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAg
ICAgICAgLy8vIGZpeGVkNjQgZmllbGQsIGluY2x1ZGluZyB0aGUgdGFnLgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIGludCBDb21wdXRlRml4ZWQ2NFNpemUo
dWxvbmcgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBMaXR0bGVFbmRpYW42
NFNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBD
b21wdXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29k
ZSBhCi0gICAgICAgIC8vLyBmaXhlZDMyIGZpZWxkLCBpbmNsdWRpbmcgdGhlIHRhZy4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgQ29tcHV0ZUZpeGVk
MzJTaXplKHVpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBMaXR0bGVF
bmRpYW4zMlNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRv
IGVuY29kZSBhCi0gICAgICAgIC8vLyBib29sIGZpZWxkLCBpbmNsdWRpbmcgdGhlIHRhZy4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgQ29tcHV0ZUJv
b2xTaXplKGJvb2wgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29tcHV0ZXMgdGhl
IG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgICAg
ICAvLy8gc3RyaW5nIGZpZWxkLCBpbmNsdWRpbmcgdGhlIHRhZy4KLSAgICAgICAgLy8vIDwvc3Vt
bWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgQ29tcHV0ZVN0cmluZ1NpemUoU3RyaW5n
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYnl0ZUFycmF5U2l6ZSA9IFV0ZjhF
bmNvZGluZy5HZXRCeXRlQ291bnQodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIENvbXB1dGVM
ZW5ndGhTaXplKGJ5dGVBcnJheVNpemUpICsgYnl0ZUFycmF5U2l6ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICAgICAgLy8vIGdyb3Vw
IGZpZWxkLCBpbmNsdWRpbmcgdGhlIHRhZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgcHVibGljIHN0YXRpYyBpbnQgQ29tcHV0ZUdyb3VwU2l6ZShJTWVzc2FnZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLkNhbGN1bGF0ZVNpemUoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbXB1dGVzIHRoZSBu
dW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGFuCi0gICAgICAg
IC8vLyBlbWJlZGRlZCBtZXNzYWdlIGZpZWxkLCBpbmNsdWRpbmcgdGhlIHRhZy4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgQ29tcHV0ZU1lc3NhZ2VT
aXplKElNZXNzYWdlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IHZh
bHVlLkNhbGN1bGF0ZVNpemUoKTsKLSAgICAgICAgICAgIHJldHVybiBDb21wdXRlTGVuZ3RoU2l6
ZShzaXplKSArIHNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgIC8vLyBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVk
IHRvIGVuY29kZSBhCi0gICAgICAgIC8vLyBieXRlcyBmaWVsZCwgaW5jbHVkaW5nIHRoZSB0YWcu
Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IENvbXB1
dGVCeXRlc1NpemUoQnl0ZVN0cmluZyB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIENvbXB1dGVMZW5ndGhTaXplKHZhbHVlLkxlbmd0aCkgKyB2YWx1ZS5MZW5ndGg7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb21wdXRlcyB0aGUg
bnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhCi0gICAgICAg
IC8vLyB1aW50MzIgZmllbGQsIGluY2x1ZGluZyB0aGUgdGFnLgotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIGludCBDb21wdXRlVUludDMyU2l6ZSh1aW50IHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29tcHV0ZVJhd1ZhcmludDMyU2l6
ZSh2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVu
Y29kZSBhCi0gICAgICAgIC8vLyBlbnVtIGZpZWxkLCBpbmNsdWRpbmcgdGhlIHRhZy4gVGhlIGNh
bGxlciBpcyByZXNwb25zaWJsZSBmb3IKLSAgICAgICAgLy8vIGNvbnZlcnRpbmcgdGhlIGVudW0g
dmFsdWUgdG8gaXRzIG51bWVyaWMgdmFsdWUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
ICAgIHB1YmxpYyBzdGF0aWMgaW50IENvbXB1dGVFbnVtU2l6ZShpbnQgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIEN1cnJlbnRseSBqdXN0IGEgcGFzcy10aHJvdWdoLCBidXQgaXQn
cyBuaWNlIHRvIHNlcGFyYXRlIGl0IGxvZ2ljYWxseS4KLSAgICAgICAgICAgIHJldHVybiBDb21w
dXRlSW50MzJTaXplKHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgLy8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBu
ZWVkZWQgdG8gZW5jb2RlIGFuCi0gICAgICAgIC8vLyBzZml4ZWQzMiBmaWVsZCwgaW5jbHVkaW5n
IHRoZSB0YWcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMg
aW50IENvbXB1dGVTRml4ZWQzMlNpemUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gTGl0dGxlRW5kaWFuMzJTaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxz
dW1tYXJ5PgotICAgICAgICAvLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdv
dWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICAgICAgLy8vIHNmaXhlZDY0IGZpZWxkLCBp
bmNsdWRpbmcgdGhlIHRhZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGlj
IHN0YXRpYyBpbnQgQ29tcHV0ZVNGaXhlZDY0U2l6ZShsb25nIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gTGl0dGxlRW5kaWFuNjRTaXplOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiBieXRl
cyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICAgICAgLy8vIHNpbnQzMiBm
aWVsZCwgaW5jbHVkaW5nIHRoZSB0YWcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IHB1YmxpYyBzdGF0aWMgaW50IENvbXB1dGVTSW50MzJTaXplKGludCB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIENvbXB1dGVSYXdWYXJpbnQzMlNpemUoRW5jb2RlWmlnWmFn
MzIodmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAg
Ly8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8g
ZW5jb2RlIGFuCi0gICAgICAgIC8vLyBzaW50NjQgZmllbGQsIGluY2x1ZGluZyB0aGUgdGFnLgot
ICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIGludCBDb21wdXRl
U0ludDY0U2l6ZShsb25nIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29t
cHV0ZVJhd1ZhcmludDY0U2l6ZShFbmNvZGVaaWdaYWc2NCh2YWx1ZSkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBv
ZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYSBsZW5ndGgsCi0gICAgICAg
IC8vLyBhcyB3cml0dGVuIGJ5IDxzZWUgY3JlZj0iV3JpdGVMZW5ndGgiLz4uCi0gICAgICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IENvbXB1dGVMZW5ndGhTaXpl
KGludCBsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb21wdXRlUmF3VmFy
aW50MzJTaXplKCh1aW50KSBsZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxk
IGJlIG5lZWRlZCB0byBlbmNvZGUgYSB2YXJpbnQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IENvbXB1dGVSYXdWYXJpbnQzMlNpemUodWludCB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmIDw8IDcp
KSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmIDw8IDE0KSkgPT0g
MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmICgodmFsdWUgJiAoMHhmZmZmZmZmZiA8PCAyMSkpID09IDApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmYgPDwgMjgpKSA9PSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiA0OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIDU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgIC8vLyBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVk
IHRvIGVuY29kZSBhIHZhcmludC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVi
bGljIHN0YXRpYyBpbnQgQ29tcHV0ZVJhd1ZhcmludDY0U2l6ZSh1bG9uZyB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmZmZmZmZmZmZMIDw8IDcp
KSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmZmZmZmZmZmZMIDw8
IDE0KSkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgodmFsdWUgJiAoMHhmZmZmZmZmZmZmZmZmZmZm
TCA8PCAyMSkpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDM7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZm
ZmZmZkwgPDwgMjgpKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZm
ZmZmZmZmZmZMIDw8IDM1KSkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gNTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgodmFsdWUgJiAoMHhmZmZm
ZmZmZmZmZmZmZmZmTCA8PCA0MikpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHZhbHVlICYgKDB4
ZmZmZmZmZmZmZmZmZmZmZkwgPDwgNDkpKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiA3OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh2YWx1ZSAm
ICgweGZmZmZmZmZmZmZmZmZmZmZMIDw8IDU2KSkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gODsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgodmFs
dWUgJiAoMHhmZmZmZmZmZmZmZmZmZmZmTCA8PCA2MykpID09IDApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIDk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gMTA7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBD
b21wdXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29k
ZSBhIHRhZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBp
bnQgQ29tcHV0ZVRhZ1NpemUoaW50IGZpZWxkTnVtYmVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZShXaXJlRm9ybWF0Lk1ha2VUYWcoZmllbGRO
dW1iZXIsIDApKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0NvZGVkT3V0cHV0U3Ry
ZWFtLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Db2RlZE91dHB1dFN0cmVhbS5jcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI3ZjAzOThjZjg0NjY3MDA4NzM0MTE0MTNh
NWFkZmJjOWQ1OWE3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0NvZGVkT3V0cHV0U3RyZWFtLmNzCisrKyAv
ZGV2L251bGwKQEAgLTEsNzYxICswLDAgQEAKLSNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQg
bGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0K
LXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5Db2xsZWN0aW9uczsKLXVzaW5nIFN5c3RlbTsKLXVzaW5n
IFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UZXh0OwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3Rv
YnVmCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBFbmNvZGVzIGFuZCB3cml0ZXMgcHJv
dG9jb2wgbWVzc2FnZSBmaWVsZHMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICAvLy8gPHJlbWFy
a3M+Ci0gICAgLy8vIDxwYXJhPgotICAgIC8vLyBUaGlzIGNsYXNzIGlzIGdlbmVyYWxseSB1c2Vk
IGJ5IGdlbmVyYXRlZCBjb2RlIHRvIHdyaXRlIGFwcHJvcHJpYXRlCi0gICAgLy8vIHByaW1pdGl2
ZXMgdG8gdGhlIHN0cmVhbS4gSXQgZWZmZWN0aXZlbHkgZW5jYXBzdWxhdGVzIHRoZSBsb3dlc3QK
LSAgICAvLy8gbGV2ZWxzIG9mIHByb3RvY29sIGJ1ZmZlciBmb3JtYXQuIFVubGlrZSBzb21lIG90
aGVyIGltcGxlbWVudGF0aW9ucywKLSAgICAvLy8gdGhpcyBkb2VzIG5vdCBpbmNsdWRlIGNvbWJp
bmVkICJ3cml0ZSB0YWcgYW5kIHZhbHVlIiBtZXRob2RzLiBHZW5lcmF0ZWQKLSAgICAvLy8gY29k
ZSBrbm93cyB0aGUgZXhhY3QgYnl0ZSByZXByZXNlbnRhdGlvbnMgb2YgdGhlIHRhZ3MgdGhleSdy
ZSBnb2luZyB0byB3cml0ZSwKLSAgICAvLy8gc28gdGhlcmUncyBubyBuZWVkIHRvIHJlLWVuY29k
ZSB0aGVtIGVhY2ggdGltZS4gTWFudWFsbHktd3JpdHRlbiBjb2RlIGNhbGxpbmcKLSAgICAvLy8g
dGhpcyBjbGFzcyBzaG91bGQganVzdCBjYWxsIG9uZSBvZiB0aGUgPGM+V3JpdGVUYWc8L2M+IG92
ZXJsb2FkcyBiZWZvcmUgZWFjaCB2YWx1ZS4KLSAgICAvLy8gPC9wYXJhPgotICAgIC8vLyA8cGFy
YT4KLSAgICAvLy8gUmVwZWF0ZWQgZmllbGRzIGFuZCBtYXAgZmllbGRzIGFyZSBub3QgaGFuZGxl
ZCBieSB0aGlzIGNsYXNzOyB1c2UgPGM+UmVwZWF0ZWRGaWVsZCZsdDtUJmd0OzwvYz4KLSAgICAv
Ly8gYW5kIDxjPk1hcEZpZWxkJmx0O1RLZXksIFRWYWx1ZSZndDs8L2M+IHRvIHNlcmlhbGl6ZSBz
dWNoIGZpZWxkcy4KLSAgICAvLy8gPC9wYXJhPgotICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgcHVi
bGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIENvZGVkT3V0cHV0U3RyZWFtIDogSURpc3Bvc2FibGUK
LSAgICB7Ci0gICAgICAgIC8vICJMb2NhbCIgY29weSBvZiBFbmNvZGluZy5VVEY4LCBmb3IgZWZm
aWNpZW5jeS4gKFllcywgaXQgbWFrZXMgYSBkaWZmZXJlbmNlLikKLSAgICAgICAgaW50ZXJuYWwg
c3RhdGljIHJlYWRvbmx5IEVuY29kaW5nIFV0ZjhFbmNvZGluZyA9IEVuY29kaW5nLlVURjg7Ci0K
LSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIGJ1ZmZlciBzaXplIHVzZWQg
YnkgQ3JlYXRlSW5zdGFuY2UoU3RyZWFtKS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgcHVibGljIHN0YXRpYyByZWFkb25seSBpbnQgRGVmYXVsdEJ1ZmZlclNpemUgPSA0MDk2Owot
Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYm9vbCBsZWF2ZU9wZW47Ci0gICAgICAgIHByaXZh
dGUgcmVhZG9ubHkgYnl0ZVtdIGJ1ZmZlcjsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbnQg
bGltaXQ7Ci0gICAgICAgIHByaXZhdGUgaW50IHBvc2l0aW9uOwotICAgICAgICBwcml2YXRlIHJl
YWRvbmx5IFN0cmVhbSBvdXRwdXQ7Ci0KLSAgICAgICAgI3JlZ2lvbiBDb25zdHJ1Y3Rpb24KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIG5ldyBDb2RlZE91dHB1
dFN0cmVhbSB0aGF0IHdyaXRlcyBkaXJlY3RseSB0byB0aGUgZ2l2ZW4KLSAgICAgICAgLy8vIGJ5
dGUgYXJyYXkuIElmIG1vcmUgYnl0ZXMgYXJlIHdyaXR0ZW4gdGhhbiBmaXQgaW4gdGhlIGFycmF5
LAotICAgICAgICAvLy8gT3V0T2ZTcGFjZUV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIENvZGVkT3V0cHV0U3RyZWFtKGJ5dGVb
XSBmbGF0QXJyYXkpIDogdGhpcyhmbGF0QXJyYXksIDAsIGZsYXRBcnJheS5MZW5ndGgpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENy
ZWF0ZXMgYSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0gdGhhdCB3cml0ZXMgZGlyZWN0bHkgdG8gdGhl
IGdpdmVuCi0gICAgICAgIC8vLyBieXRlIGFycmF5IHNsaWNlLiBJZiBtb3JlIGJ5dGVzIGFyZSB3
cml0dGVuIHRoYW4gZml0IGluIHRoZSBhcnJheSwKLSAgICAgICAgLy8vIE91dE9mU3BhY2VFeGNl
cHRpb24gd2lsbCBiZSB0aHJvd24uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHBy
aXZhdGUgQ29kZWRPdXRwdXRTdHJlYW0oYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGxl
bmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBudWxsOwotICAgICAg
ICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7Ci0gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0g
b2Zmc2V0OwotICAgICAgICAgICAgdGhpcy5saW1pdCA9IG9mZnNldCArIGxlbmd0aDsKLSAgICAg
ICAgICAgIGxlYXZlT3BlbiA9IHRydWU7IC8vIFNpbXBsZSB3YXkgb2YgYXZvaWRpbmcgdHJ5aW5n
IHRvIGRpc3Bvc2Ugb2YgYSBudWxsIHJlZmVyZW5jZQotICAgICAgICB9Ci0KLSAgICAgICAgcHJp
dmF0ZSBDb2RlZE91dHB1dFN0cmVhbShTdHJlYW0gb3V0cHV0LCBieXRlW10gYnVmZmVyLCBib29s
IGxlYXZlT3BlbikKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBQcm90b1By
ZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKG91dHB1dCwgbmFtZW9mKG91dHB1dCkpOwotICAgICAg
ICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7Ci0gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0g
MDsKLSAgICAgICAgICAgIHRoaXMubGltaXQgPSBidWZmZXIuTGVuZ3RoOwotICAgICAgICAgICAg
dGhpcy5sZWF2ZU9wZW4gPSBsZWF2ZU9wZW47Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgbmV3IDxzZWUgY3JlZj0iQ29kZWRPdXRwdXRT
dHJlYW0iIC8+IHdoaWNoIHdyaXRlIHRvIHRoZSBnaXZlbiBzdHJlYW0sIGFuZCBkaXNwb3NlcyBv
ZiB0aGF0Ci0gICAgICAgIC8vLyBzdHJlYW0gd2hlbiB0aGUgcmV0dXJuZWQgPGM+Q29kZWRPdXRw
dXRTdHJlYW08L2M+IGlzIGRpc3Bvc2VkLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAg
ICAvLy8gPHBhcmFtIG5hbWU9Im91dHB1dCI+VGhlIHN0cmVhbSB0byB3cml0ZSB0by4gSXQgd2ls
bCBiZSBkaXNwb3NlZCB3aGVuIHRoZSByZXR1cm5lZCA8Yz5Db2RlZE91dHB1dFN0cmVhbSBpcyBk
aXNwb3NlZC48L2M+PC9wYXJhbT4KLSAgICAgICAgcHVibGljIENvZGVkT3V0cHV0U3RyZWFtKFN0
cmVhbSBvdXRwdXQpIDogdGhpcyhvdXRwdXQsIERlZmF1bHRCdWZmZXJTaXplLCBmYWxzZSkKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8g
Q3JlYXRlcyBhIG5ldyBDb2RlZE91dHB1dFN0cmVhbSB3aGljaCB3cml0ZSB0byB0aGUgZ2l2ZW4g
c3RyZWFtIGFuZCB1c2VzCi0gICAgICAgIC8vLyB0aGUgc3BlY2lmaWVkIGJ1ZmZlciBzaXplLgot
ICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im91dHB1dCI+
VGhlIHN0cmVhbSB0byB3cml0ZSB0by4gSXQgd2lsbCBiZSBkaXNwb3NlZCB3aGVuIHRoZSByZXR1
cm5lZCA8Yz5Db2RlZE91dHB1dFN0cmVhbSBpcyBkaXNwb3NlZC48L2M+PC9wYXJhbT4KLSAgICAg
ICAgLy8vIDxwYXJhbSBuYW1lPSJidWZmZXJTaXplIj5UaGUgc2l6ZSBvZiBidWZmZXIgdG8gdXNl
IGludGVybmFsbHkuPC9wYXJhbT4KLSAgICAgICAgcHVibGljIENvZGVkT3V0cHV0U3RyZWFtKFN0
cmVhbSBvdXRwdXQsIGludCBidWZmZXJTaXplKSA6IHRoaXMob3V0cHV0LCBuZXcgYnl0ZVtidWZm
ZXJTaXplXSwgZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vIENyZWF0ZXMgYSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0gd2hpY2gg
d3JpdGUgdG8gdGhlIGdpdmVuIHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgLy8vIDxwYXJhbSBuYW1lPSJvdXRwdXQiPlRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJh
bT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJsZWF2ZU9wZW4iPklmIDxjPnRydWU8L2M+LCA8
cGFyYW1yZWYgbmFtZT0ib3V0cHV0Ii8+IGlzIGxlZnQgb3BlbiB3aGVuIHRoZSByZXR1cm5lZCA8
Yz5Db2RlZE91dHB1dFN0cmVhbTwvYz4gaXMgZGlzcG9zZWQ7Ci0gICAgICAgIC8vLyBpZiA8Yz5m
YWxzZTwvYz4sIHRoZSBwcm92aWRlZCBzdHJlYW0gaXMgZGlzcG9zZWQgYXMgd2VsbC48L3BhcmFt
PgotICAgICAgICBwdWJsaWMgQ29kZWRPdXRwdXRTdHJlYW0oU3RyZWFtIG91dHB1dCwgYm9vbCBs
ZWF2ZU9wZW4pIDogdGhpcyhvdXRwdXQsIERlZmF1bHRCdWZmZXJTaXplLCBsZWF2ZU9wZW4pCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IENyZWF0ZXMgYSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0gd2hpY2ggd3JpdGUgdG8gdGhlIGdpdmVu
IHN0cmVhbSBhbmQgdXNlcwotICAgICAgICAvLy8gdGhlIHNwZWNpZmllZCBidWZmZXIgc2l6ZS4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJvdXRwdXQi
PlRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1l
PSJidWZmZXJTaXplIj5UaGUgc2l6ZSBvZiBidWZmZXIgdG8gdXNlIGludGVybmFsbHkuPC9wYXJh
bT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJsZWF2ZU9wZW4iPklmIDxjPnRydWU8L2M+LCA8
cGFyYW1yZWYgbmFtZT0ib3V0cHV0Ii8+IGlzIGxlZnQgb3BlbiB3aGVuIHRoZSByZXR1cm5lZCA8
Yz5Db2RlZE91dHB1dFN0cmVhbTwvYz4gaXMgZGlzcG9zZWQ7Ci0gICAgICAgIC8vLyBpZiA8Yz5m
YWxzZTwvYz4sIHRoZSBwcm92aWRlZCBzdHJlYW0gaXMgZGlzcG9zZWQgYXMgd2VsbC48L3BhcmFt
PgotICAgICAgICBwdWJsaWMgQ29kZWRPdXRwdXRTdHJlYW0oU3RyZWFtIG91dHB1dCwgaW50IGJ1
ZmZlclNpemUsIGJvb2wgbGVhdmVPcGVuKSA6IHRoaXMob3V0cHV0LCBuZXcgYnl0ZVtidWZmZXJT
aXplXSwgbGVhdmVPcGVuKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgI2VuZHJlZ2lv
bgotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgdGhlIGN1cnJl
bnQgcG9zaXRpb24gaW4gdGhlIHN0cmVhbSwgb3IgdGhlIHBvc2l0aW9uIGluIHRoZSBvdXRwdXQg
YnVmZmVyCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBsb25nIFBvc2l0
aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdldAotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBvdXRwdXQuUG9zaXRpb24gKyBwb3NpdGlvbjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgI3JlZ2lvbiBXcml0aW5nIG9mIHZhbHVlcyAobm90IGluY2x1
ZGluZyB0YWdzKQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlcyBh
IGRvdWJsZSBmaWVsZCB2YWx1ZSwgd2l0aG91dCBhIHRhZywgdG8gdGhlIHN0cmVhbS4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZh
bHVlIHRvIHdyaXRlPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgV3JpdGVEb3VibGUoZG91
YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBXcml0ZVJhd0xpdHRsZUVuZGlhbjY0
KCh1bG9uZylCaXRDb252ZXJ0ZXIuRG91YmxlVG9JbnQ2NEJpdHModmFsdWUpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlcyBhIGZsb2F0IGZp
ZWxkIHZhbHVlLCB3aXRob3V0IGEgdGFnLCB0byB0aGUgc3RyZWFtLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd3Jp
dGU8L3BhcmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZUZsb2F0KGZsb2F0IHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBieXRlW10gcmF3Qnl0ZXMgPSBCaXRDb252ZXJ0ZXIuR2V0
Qnl0ZXModmFsdWUpOwotICAgICAgICAgICAgaWYgKCFCaXRDb252ZXJ0ZXIuSXNMaXR0bGVFbmRp
YW4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQnl0ZUFycmF5LlJldmVyc2UocmF3
Qnl0ZXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGltaXQgLSBwb3NpdGlv
biA+PSA0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3NpdGlvbisr
XSA9IHJhd0J5dGVzWzBdOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3NpdGlvbisrXSA9IHJh
d0J5dGVzWzFdOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3NpdGlvbisrXSA9IHJhd0J5dGVz
WzJdOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3NpdGlvbisrXSA9IHJhd0J5dGVzWzNdOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIFdyaXRlUmF3Qnl0ZXMocmF3Qnl0ZXMsIDAsIDQpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVzIGEgdWlu
dDY0IGZpZWxkIHZhbHVlLCB3aXRob3V0IGEgdGFnLCB0byB0aGUgc3RyZWFtLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUg
dG8gd3JpdGU8L3BhcmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZVVJbnQ2NCh1bG9uZyB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgV3JpdGVSYXdWYXJpbnQ2NCh2YWx1ZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgYW4g
aW50NjQgZmllbGQgdmFsdWUsIHdpdGhvdXQgYSB0YWcsIHRvIHRoZSBzdHJlYW0uCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSB2YWx1
ZSB0byB3cml0ZTwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyB2b2lkIFdyaXRlSW50NjQobG9uZyB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgV3JpdGVSYXdWYXJpbnQ2NCgodWxvbmcpIHZh
bHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdy
aXRlcyBhbiBpbnQzMiBmaWVsZCB2YWx1ZSwgd2l0aG91dCBhIHRhZywgdG8gdGhlIHN0cmVhbS4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+
VGhlIHZhbHVlIHRvIHdyaXRlPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgV3JpdGVJbnQz
MihpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA+PSAwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIFdyaXRlUmF3VmFyaW50MzIoKHVpbnQpIHZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAvLyBNdXN0IHNpZ24tZXh0ZW5kLgotICAgICAgICAgICAgICAgIFdyaXRlUmF3
VmFyaW50NjQoKHVsb25nKSB2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgYSBmaXhlZDY0IGZpZWxkIHZh
bHVlLCB3aXRob3V0IGEgdGFnLCB0byB0aGUgc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5
PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd3JpdGU8L3Bh
cmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZUZpeGVkNjQodWxvbmcgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFdyaXRlUmF3TGl0dGxlRW5kaWFuNjQodmFsdWUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVzIGEgZml4ZWQz
MiBmaWVsZCB2YWx1ZSwgd2l0aG91dCBhIHRhZywgdG8gdGhlIHN0cmVhbS4KLSAgICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRv
IHdyaXRlPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgV3JpdGVGaXhlZDMyKHVpbnQgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdyaXRlUmF3TGl0dGxlRW5kaWFuMzIodmFsdWUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVz
IGEgYm9vbCBmaWVsZCB2YWx1ZSwgd2l0aG91dCBhIHRhZywgdG8gdGhlIHN0cmVhbS4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZh
bHVlIHRvIHdyaXRlPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgV3JpdGVCb29sKGJvb2wg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdyaXRlUmF3Qnl0ZSh2YWx1ZSA/IChieXRl
KSAxIDogKGJ5dGUpIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gV3JpdGVzIGEgc3RyaW5nIGZpZWxkIHZhbHVlLCB3aXRob3V0IGEgdGFnLCB0byB0
aGUgc3RyZWFtLgotICAgICAgICAvLy8gVGhlIGRhdGEgaXMgbGVuZ3RoLXByZWZpeGVkLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUg
dmFsdWUgdG8gd3JpdGU8L3BhcmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZVN0cmluZyhz
dHJpbmcgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE9wdGltaXNlIHRoZSBjYXNl
IHdoZXJlIHdlIGhhdmUgZW5vdWdoIHNwYWNlIHRvIHdyaXRlCi0gICAgICAgICAgICAvLyB0aGUg
c3RyaW5nIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIsIHdoaWNoIHNob3VsZCBiZSBjb21tb24uCi0g
ICAgICAgICAgICBpbnQgbGVuZ3RoID0gVXRmOEVuY29kaW5nLkdldEJ5dGVDb3VudCh2YWx1ZSk7
Ci0gICAgICAgICAgICBXcml0ZUxlbmd0aChsZW5ndGgpOwotICAgICAgICAgICAgaWYgKGxpbWl0
IC0gcG9zaXRpb24gPj0gbGVuZ3RoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChsZW5ndGggPT0gdmFsdWUuTGVuZ3RoKSAvLyBNdXN0IGJlIGFsbCBBU0NJSS4uLgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyW3Bvc2l0aW9uICsgaV0gPSAoYnl0ZSl2YWx1ZVtpXTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBVdGY4RW5jb2RpbmcuR2V0Qnl0ZXModmFsdWUs
IDAsIHZhbHVlLkxlbmd0aCwgYnVmZmVyLCBwb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBieXRlW10gYnl0ZXMg
PSBVdGY4RW5jb2RpbmcuR2V0Qnl0ZXModmFsdWUpOwotICAgICAgICAgICAgICAgIFdyaXRlUmF3
Qnl0ZXMoYnl0ZXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxz
dW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVzIGEgbWVzc2FnZSwgd2l0aG91dCBhIHRhZywgdG8g
dGhlIHN0cmVhbS4KLSAgICAgICAgLy8vIFRoZSBkYXRhIGlzIGxlbmd0aC1wcmVmaXhlZC4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhl
IHZhbHVlIHRvIHdyaXRlPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgV3JpdGVNZXNzYWdl
KElNZXNzYWdlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBXcml0ZUxlbmd0aCh2YWx1
ZS5DYWxjdWxhdGVTaXplKCkpOwotICAgICAgICAgICAgdmFsdWUuV3JpdGVUbyh0aGlzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlIGEgYnl0
ZSBzdHJpbmcsIHdpdGhvdXQgYSB0YWcsIHRvIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyBUaGUg
ZGF0YSBpcyBsZW5ndGgtcHJlZml4ZWQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSB2YWx1ZSB0byB3cml0ZTwvcGFyYW0+Ci0gICAg
ICAgIHB1YmxpYyB2b2lkIFdyaXRlQnl0ZXMoQnl0ZVN0cmluZyB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgV3JpdGVMZW5ndGgodmFsdWUuTGVuZ3RoKTsKLSAgICAgICAgICAgIHZhbHVl
LldyaXRlUmF3Qnl0ZXNUbyh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAgICAgLy8vIFdyaXRlcyBhIHVpbnQzMiB2YWx1ZSwgd2l0aG91dCBhIHRhZywgdG8g
dGhlIHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBu
YW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRvIHdyaXRlPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZv
aWQgV3JpdGVVSW50MzIodWludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgV3JpdGVS
YXdWYXJpbnQzMih2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgICAgIC8vLyBXcml0ZXMgYW4gZW51bSB2YWx1ZSwgd2l0aG91dCBhIHRhZywgdG8gdGhlIHN0
cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2
YWx1ZSI+VGhlIHZhbHVlIHRvIHdyaXRlPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgV3Jp
dGVFbnVtKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgV3JpdGVJbnQzMih2YWx1
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0
ZXMgYW4gc2ZpeGVkMzIgdmFsdWUsIHdpdGhvdXQgYSB0YWcsIHRvIHRoZSBzdHJlYW0uCi0gICAg
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSB2
YWx1ZSB0byB3cml0ZS48L3BhcmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZVNGaXhlZDMy
KGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgV3JpdGVSYXdMaXR0bGVFbmRpYW4z
MigodWludCkgdmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gV3JpdGVzIGFuIHNmaXhlZDY0IHZhbHVlLCB3aXRob3V0IGEgdGFnLCB0byB0aGUg
c3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9
InZhbHVlIj5UaGUgdmFsdWUgdG8gd3JpdGU8L3BhcmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBX
cml0ZVNGaXhlZDY0KGxvbmcgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdyaXRlUmF3
TGl0dGxlRW5kaWFuNjQoKHVsb25nKSB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgYW4gc2ludDMyIHZhbHVlLCB3aXRob3V0IGEg
dGFnLCB0byB0aGUgc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8g
PHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd3JpdGU8L3BhcmFtPgotICAgICAgICBw
dWJsaWMgdm9pZCBXcml0ZVNJbnQzMihpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFdyaXRlUmF3VmFyaW50MzIoRW5jb2RlWmlnWmFnMzIodmFsdWUpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlcyBhbiBzaW50NjQgdmFsdWUs
IHdpdGhvdXQgYSB0YWcsIHRvIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSB2YWx1ZSB0byB3cml0ZTwvcGFyYW0+
Ci0gICAgICAgIHB1YmxpYyB2b2lkIFdyaXRlU0ludDY0KGxvbmcgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFdyaXRlUmF3VmFyaW50NjQoRW5jb2RlWmlnWmFnNjQodmFsdWUpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlcyBhIGxl
bmd0aCAoaW4gYnl0ZXMpIGZvciBsZW5ndGgtZGVsaW1pdGVkIGRhdGEuCi0gICAgICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFRoaXMgbWV0aG9k
IHNpbXBseSB3cml0ZXMgYSByYXdpbnQsIGJ1dCBleGlzdHMgZm9yIGNsYXJpdHkgaW4gY2FsbGlu
ZyBjb2RlLgotICAgICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9
Imxlbmd0aCI+TGVuZ3RoIHZhbHVlLCBpbiBieXRlcy48L3BhcmFtPgotICAgICAgICBwdWJsaWMg
dm9pZCBXcml0ZUxlbmd0aChpbnQgbGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICBXcml0
ZVJhd1ZhcmludDMyKCh1aW50KSBsZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgI2VuZHJl
Z2lvbgotCi0gICAgICAgICNyZWdpb24gUmF3IHRhZyB3cml0aW5nCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vIEVuY29kZXMgYW5kIHdyaXRlcyBhIHRhZy4KLSAgICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJmaWVsZE51bWJlciI+VGhlIG51
bWJlciBvZiB0aGUgZmllbGQgdG8gd3JpdGUgdGhlIHRhZyBmb3I8L3BhcmFtPgotICAgICAgICAv
Ly8gPHBhcmFtIG5hbWU9InR5cGUiPlRoZSB3aXJlIGZvcm1hdCB0eXBlIG9mIHRoZSB0YWcgdG8g
d3JpdGU8L3BhcmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZVRhZyhpbnQgZmllbGROdW1i
ZXIsIFdpcmVGb3JtYXQuV2lyZVR5cGUgdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgV3Jp
dGVSYXdWYXJpbnQzMihXaXJlRm9ybWF0Lk1ha2VUYWcoZmllbGROdW1iZXIsIHR5cGUpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlcyBhbiBh
bHJlYWR5LWVuY29kZWQgdGFnLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8g
PHBhcmFtIG5hbWU9InRhZyI+VGhlIGVuY29kZWQgdGFnPC9wYXJhbT4KLSAgICAgICAgcHVibGlj
IHZvaWQgV3JpdGVUYWcodWludCB0YWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdyaXRlUmF3
VmFyaW50MzIodGFnKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIFdyaXRlcyB0aGUgZ2l2ZW4gc2luZ2xlLWJ5dGUgdGFnIGRpcmVjdGx5IHRvIHRoZSBz
dHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0i
YjEiPlRoZSBlbmNvZGVkIHRhZzwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyB2b2lkIFdyaXRlUmF3
VGFnKGJ5dGUgYjEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdyaXRlUmF3Qnl0ZShiMSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgdGhl
IGdpdmVuIHR3by1ieXRlIHRhZyBkaXJlY3RseSB0byB0aGUgc3RyZWFtLgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImIxIj5UaGUgZmlyc3QgYnl0ZSBv
ZiB0aGUgZW5jb2RlZCB0YWc8L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImIyIj5U
aGUgc2Vjb25kIGJ5dGUgb2YgdGhlIGVuY29kZWQgdGFnPC9wYXJhbT4KLSAgICAgICAgcHVibGlj
IHZvaWQgV3JpdGVSYXdUYWcoYnl0ZSBiMSwgYnl0ZSBiMikKLSAgICAgICAgewotICAgICAgICAg
ICAgV3JpdGVSYXdCeXRlKGIxKTsKLSAgICAgICAgICAgIFdyaXRlUmF3Qnl0ZShiMik7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgdGhlIGdp
dmVuIHRocmVlLWJ5dGUgdGFnIGRpcmVjdGx5IHRvIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYjEiPlRoZSBmaXJzdCBieXRlIG9m
IHRoZSBlbmNvZGVkIHRhZzwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYjIiPlRo
ZSBzZWNvbmQgYnl0ZSBvZiB0aGUgZW5jb2RlZCB0YWc8L3BhcmFtPgotICAgICAgICAvLy8gPHBh
cmFtIG5hbWU9ImIzIj5UaGUgdGhpcmQgYnl0ZSBvZiB0aGUgZW5jb2RlZCB0YWc8L3BhcmFtPgot
ICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZVJhd1RhZyhieXRlIGIxLCBieXRlIGIyLCBieXRlIGIz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBXcml0ZVJhd0J5dGUoYjEpOwotICAgICAgICAgICAg
V3JpdGVSYXdCeXRlKGIyKTsKLSAgICAgICAgICAgIFdyaXRlUmF3Qnl0ZShiMyk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgdGhlIGdpdmVu
IGZvdXItYnl0ZSB0YWcgZGlyZWN0bHkgdG8gdGhlIHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3Vt
bWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJiMSI+VGhlIGZpcnN0IGJ5dGUgb2YgdGhl
IGVuY29kZWQgdGFnPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJiMiI+VGhlIHNl
Y29uZCBieXRlIG9mIHRoZSBlbmNvZGVkIHRhZzwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0g
bmFtZT0iYjMiPlRoZSB0aGlyZCBieXRlIG9mIHRoZSBlbmNvZGVkIHRhZzwvcGFyYW0+Ci0gICAg
ICAgIC8vLyA8cGFyYW0gbmFtZT0iYjQiPlRoZSBmb3VydGggYnl0ZSBvZiB0aGUgZW5jb2RlZCB0
YWc8L3BhcmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZVJhd1RhZyhieXRlIGIxLCBieXRl
IGIyLCBieXRlIGIzLCBieXRlIGI0KQotICAgICAgICB7Ci0gICAgICAgICAgICBXcml0ZVJhd0J5
dGUoYjEpOwotICAgICAgICAgICAgV3JpdGVSYXdCeXRlKGIyKTsKLSAgICAgICAgICAgIFdyaXRl
UmF3Qnl0ZShiMyk7Ci0gICAgICAgICAgICBXcml0ZVJhd0J5dGUoYjQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVzIHRoZSBnaXZlbiBmaXZl
LWJ5dGUgdGFnIGRpcmVjdGx5IHRvIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYjEiPlRoZSBmaXJzdCBieXRlIG9mIHRoZSBlbmNv
ZGVkIHRhZzwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYjIiPlRoZSBzZWNvbmQg
Ynl0ZSBvZiB0aGUgZW5jb2RlZCB0YWc8L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9
ImIzIj5UaGUgdGhpcmQgYnl0ZSBvZiB0aGUgZW5jb2RlZCB0YWc8L3BhcmFtPgotICAgICAgICAv
Ly8gPHBhcmFtIG5hbWU9ImI0Ij5UaGUgZm91cnRoIGJ5dGUgb2YgdGhlIGVuY29kZWQgdGFnPC9w
YXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJiNSI+VGhlIGZpZnRoIGJ5dGUgb2YgdGhl
IGVuY29kZWQgdGFnPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgV3JpdGVSYXdUYWcoYnl0
ZSBiMSwgYnl0ZSBiMiwgYnl0ZSBiMywgYnl0ZSBiNCwgYnl0ZSBiNSkKLSAgICAgICAgewotICAg
ICAgICAgICAgV3JpdGVSYXdCeXRlKGIxKTsKLSAgICAgICAgICAgIFdyaXRlUmF3Qnl0ZShiMik7
Ci0gICAgICAgICAgICBXcml0ZVJhd0J5dGUoYjMpOwotICAgICAgICAgICAgV3JpdGVSYXdCeXRl
KGI0KTsKLSAgICAgICAgICAgIFdyaXRlUmF3Qnl0ZShiNSk7Ci0gICAgICAgIH0KLSAgICAgICAg
I2VuZHJlZ2lvbgotCi0gICAgICAgICNyZWdpb24gVW5kZXJseWluZyB3cml0aW5nIHByaW1pdGl2
ZXMKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVzIGEgMzIgYml0IHZh
bHVlIGFzIGEgdmFyaW50LiBUaGUgZmFzdCByb3V0ZSBpcyB0YWtlbiB3aGVuCi0gICAgICAgIC8v
LyB0aGVyZSdzIGVub3VnaCBidWZmZXIgc3BhY2UgbGVmdCB0byB3aGl6eiB0aHJvdWdoIHdpdGhv
dXQgY2hlY2tpbmcKLSAgICAgICAgLy8vIGZvciBlYWNoIGJ5dGU7IG90aGVyd2lzZSwgd2UgcmVz
b3J0IHRvIGNhbGxpbmcgV3JpdGVSYXdCeXRlIGVhY2ggdGltZS4KLSAgICAgICAgLy8vIDwvc3Vt
bWFyeT4KLSAgICAgICAgaW50ZXJuYWwgdm9pZCBXcml0ZVJhd1ZhcmludDMyKHVpbnQgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ug
b2YgYSBzaW5nbGUgYnl0ZSB2YWx1ZQotICAgICAgICAgICAgaWYgKHZhbHVlIDwgMTI4ICYmIHBv
c2l0aW9uIDwgbGltaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW3Bv
c2l0aW9uKytdID0gKGJ5dGUpdmFsdWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAodmFsdWUgPiAxMjcgJiYgcG9zaXRpb24gPCBs
aW1pdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbcG9zaXRpb24rK10g
PSAoYnl0ZSkgKCh2YWx1ZSAmIDB4N0YpIHwgMHg4MCk7Ci0gICAgICAgICAgICAgICAgdmFsdWUg
Pj49IDc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAodmFsdWUgPiAxMjcpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV3JpdGVSYXdCeXRlKChieXRlKSAoKHZhbHVl
ICYgMHg3RikgfCAweDgwKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPj49IDc7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPCBsaW1pdCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAoYnl0ZSkgdmFsdWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgV3JpdGVSYXdCeXRlKChieXRlKSB2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpbnRlcm5hbCB2b2lkIFdyaXRlUmF3VmFyaW50NjQodWxvbmcgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlICh2YWx1ZSA+IDEyNyAmJiBwb3NpdGlvbiA8IGxp
bWl0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3NpdGlvbisrXSA9
IChieXRlKSAoKHZhbHVlICYgMHg3RikgfCAweDgwKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA+
Pj0gNzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICh2YWx1ZSA+IDEyNykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBXcml0ZVJhd0J5dGUoKGJ5dGUpICgodmFsdWUg
JiAweDdGKSB8IDB4ODApKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA+Pj0gNzsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGxpbWl0KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3NpdGlvbisrXSA9IChieXRlKSB2YWx1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBXcml0ZVJhd0J5dGUoKGJ5dGUpIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGludGVybmFsIHZvaWQgV3JpdGVSYXdMaXR0bGVFbmRpYW4zMih1aW50IHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gKyA0ID4gbGltaXQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV3JpdGVSYXdCeXRlKChieXRlKSB2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgV3JpdGVSYXdCeXRlKChieXRlKSAodmFsdWUgPj4gOCkpOwotICAgICAg
ICAgICAgICAgIFdyaXRlUmF3Qnl0ZSgoYnl0ZSkgKHZhbHVlID4+IDE2KSk7Ci0gICAgICAgICAg
ICAgICAgV3JpdGVSYXdCeXRlKChieXRlKSAodmFsdWUgPj4gMjQpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBidWZmZXJb
cG9zaXRpb24rK10gPSAoKGJ5dGUpIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBidWZmZXJbcG9z
aXRpb24rK10gPSAoKGJ5dGUpICh2YWx1ZSA+PiA4KSk7Ci0gICAgICAgICAgICAgICAgYnVmZmVy
W3Bvc2l0aW9uKytdID0gKChieXRlKSAodmFsdWUgPj4gMTYpKTsKLSAgICAgICAgICAgICAgICBi
dWZmZXJbcG9zaXRpb24rK10gPSAoKGJ5dGUpICh2YWx1ZSA+PiAyNCkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaW50ZXJuYWwgdm9pZCBXcml0ZVJhd0xpdHRsZUVuZGlh
bjY0KHVsb25nIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gKyA4
ID4gbGltaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV3JpdGVSYXdCeXRlKChi
eXRlKSB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgV3JpdGVSYXdCeXRlKChieXRlKSAodmFsdWUg
Pj4gOCkpOwotICAgICAgICAgICAgICAgIFdyaXRlUmF3Qnl0ZSgoYnl0ZSkgKHZhbHVlID4+IDE2
KSk7Ci0gICAgICAgICAgICAgICAgV3JpdGVSYXdCeXRlKChieXRlKSAodmFsdWUgPj4gMjQpKTsK
LSAgICAgICAgICAgICAgICBXcml0ZVJhd0J5dGUoKGJ5dGUpICh2YWx1ZSA+PiAzMikpOwotICAg
ICAgICAgICAgICAgIFdyaXRlUmF3Qnl0ZSgoYnl0ZSkgKHZhbHVlID4+IDQwKSk7Ci0gICAgICAg
ICAgICAgICAgV3JpdGVSYXdCeXRlKChieXRlKSAodmFsdWUgPj4gNDgpKTsKLSAgICAgICAgICAg
ICAgICBXcml0ZVJhd0J5dGUoKGJ5dGUpICh2YWx1ZSA+PiA1NikpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltw
b3NpdGlvbisrXSA9ICgoYnl0ZSkgdmFsdWUpOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3Np
dGlvbisrXSA9ICgoYnl0ZSkgKHZhbHVlID4+IDgpKTsKLSAgICAgICAgICAgICAgICBidWZmZXJb
cG9zaXRpb24rK10gPSAoKGJ5dGUpICh2YWx1ZSA+PiAxNikpOwotICAgICAgICAgICAgICAgIGJ1
ZmZlcltwb3NpdGlvbisrXSA9ICgoYnl0ZSkgKHZhbHVlID4+IDI0KSk7Ci0gICAgICAgICAgICAg
ICAgYnVmZmVyW3Bvc2l0aW9uKytdID0gKChieXRlKSAodmFsdWUgPj4gMzIpKTsKLSAgICAgICAg
ICAgICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAoKGJ5dGUpICh2YWx1ZSA+PiA0MCkpOwotICAg
ICAgICAgICAgICAgIGJ1ZmZlcltwb3NpdGlvbisrXSA9ICgoYnl0ZSkgKHZhbHVlID4+IDQ4KSk7
Ci0gICAgICAgICAgICAgICAgYnVmZmVyW3Bvc2l0aW9uKytdID0gKChieXRlKSAodmFsdWUgPj4g
NTYpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludGVybmFsIHZvaWQg
V3JpdGVSYXdCeXRlKGJ5dGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwb3Np
dGlvbiA9PSBsaW1pdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZWZyZXNoQnVm
ZmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1ZmZlcltwb3NpdGlvbisrXSA9
IHZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50ZXJuYWwgdm9pZCBXcml0ZVJhd0J5dGUo
dWludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgV3JpdGVSYXdCeXRlKChieXRlKSB2
YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBX
cml0ZXMgb3V0IGFuIGFycmF5IG9mIGJ5dGVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAg
ICAgICBpbnRlcm5hbCB2b2lkIFdyaXRlUmF3Qnl0ZXMoYnl0ZVtdIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBXcml0ZVJhd0J5dGVzKHZhbHVlLCAwLCB2YWx1ZS5MZW5ndGgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVzIG91dCBw
YXJ0IG9mIGFuIGFycmF5IG9mIGJ5dGVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAg
ICBpbnRlcm5hbCB2b2lkIFdyaXRlUmF3Qnl0ZXMoYnl0ZVtdIHZhbHVlLCBpbnQgb2Zmc2V0LCBp
bnQgbGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGltaXQgLSBwb3NpdGlvbiA+
PSBsZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQnl0ZUFycmF5LkNvcHko
dmFsdWUsIG9mZnNldCwgYnVmZmVyLCBwb3NpdGlvbiwgbGVuZ3RoKTsKLSAgICAgICAgICAgICAg
ICAvLyBXZSBoYXZlIHJvb20gaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotICAgICAgICAgICAgICAg
IHBvc2l0aW9uICs9IGxlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBXcml0ZSBleHRlbmRzIHBhc3QgY3VycmVu
dCBidWZmZXIuICBGaWxsIHRoZSByZXN0IG9mIHRoaXMgYnVmZmVyIGFuZAotICAgICAgICAgICAg
ICAgIC8vIGZsdXNoLgotICAgICAgICAgICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBsaW1pdCAt
IHBvc2l0aW9uOwotICAgICAgICAgICAgICAgIEJ5dGVBcnJheS5Db3B5KHZhbHVlLCBvZmZzZXQs
IGJ1ZmZlciwgcG9zaXRpb24sIGJ5dGVzV3JpdHRlbik7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0
ICs9IGJ5dGVzV3JpdHRlbjsKLSAgICAgICAgICAgICAgICBsZW5ndGggLT0gYnl0ZXNXcml0dGVu
OwotICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gbGltaXQ7Ci0gICAgICAgICAgICAgICAgUmVm
cmVzaEJ1ZmZlcigpOwotCi0gICAgICAgICAgICAgICAgLy8gTm93IGRlYWwgd2l0aCB0aGUgcmVz
dC4KLSAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYXZlIGFuIG91dHB1dCBzdHJlYW0sIHRo
aXMgaXMgb3VyIGJ1ZmZlcgotICAgICAgICAgICAgICAgIC8vIGFuZCBidWZmZXIgb2Zmc2V0ID09
IDAKLSAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDw9IGxpbWl0KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRml0cyBpbiBuZXcgYnVmZmVyLgotICAgICAgICAg
ICAgICAgICAgICBCeXRlQXJyYXkuQ29weSh2YWx1ZSwgb2Zmc2V0LCBidWZmZXIsIDAsIGxlbmd0
aCk7Ci0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gbGVuZ3RoOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAvLyBXcml0ZSBpcyB2ZXJ5IGJpZy4gIExldCdzIGRvIGl0IGFsbCBhdCBvbmNl
LgotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuV3JpdGUodmFsdWUsIG9mZnNldCwgbGVuZ3Ro
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAjZW5kcmVnaW9uCi0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gRW5jb2Rl
IGEgMzItYml0IHZhbHVlIHdpdGggWmlnWmFnIGVuY29kaW5nLgotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBaaWdaYWcgZW5jb2RlcyBz
aWduZWQgaW50ZWdlcnMgaW50byB2YWx1ZXMgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkKLSAgICAg
ICAgLy8vIGVuY29kZWQgd2l0aCB2YXJpbnQuICAoT3RoZXJ3aXNlLCBuZWdhdGl2ZSB2YWx1ZXMg
bXVzdCBiZSAKLSAgICAgICAgLy8vIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyB0byBiZSB2YXJp
bnQgZW5jb2RlZCwgdGh1cyBhbHdheXMgdGFraW5nCi0gICAgICAgIC8vLyAxMCBieXRlcyBvbiB0
aGUgd2lyZS4pCi0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAgIGludGVybmFsIHN0YXRp
YyB1aW50IEVuY29kZVppZ1phZzMyKGludCBuKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBO
b3RlOiAgdGhlIHJpZ2h0LXNoaWZ0IG11c3QgYmUgYXJpdGhtZXRpYwotICAgICAgICAgICAgcmV0
dXJuICh1aW50KSAoKG4gPDwgMSkgXiAobiA+PiAzMSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gRW5jb2RlIGEgNjQtYml0IHZhbHVlIHdpdGggWmln
WmFnIGVuY29kaW5nLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFy
a3M+Ci0gICAgICAgIC8vLyBaaWdaYWcgZW5jb2RlcyBzaWduZWQgaW50ZWdlcnMgaW50byB2YWx1
ZXMgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkKLSAgICAgICAgLy8vIGVuY29kZWQgd2l0aCB2YXJp
bnQuICAoT3RoZXJ3aXNlLCBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSAKLSAgICAgICAgLy8vIHNp
Z24tZXh0ZW5kZWQgdG8gNjQgYml0cyB0byBiZSB2YXJpbnQgZW5jb2RlZCwgdGh1cyBhbHdheXMg
dGFraW5nCi0gICAgICAgIC8vLyAxMCBieXRlcyBvbiB0aGUgd2lyZS4pCi0gICAgICAgIC8vLyA8
L3JlbWFya3M+Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyB1bG9uZyBFbmNvZGVaaWdaYWc2NChs
b25nIG4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAodWxvbmcpICgobiA8PCAxKSBe
IChuID4+IDYzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgUmVmcmVzaEJ1
ZmZlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdXRwdXQgPT0gbnVsbCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSB3cml0aW5nIHRvIGEgc2luZ2xlIGJ1
ZmZlci4KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3V0T2ZTcGFjZUV4Y2VwdGlvbigpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYXZlIGFuIG91dHB1dCBz
dHJlYW0sIHRoaXMgaXMgb3VyIGJ1ZmZlcgotICAgICAgICAgICAgLy8gYW5kIGJ1ZmZlciBvZmZz
ZXQgPT0gMAotICAgICAgICAgICAgb3V0cHV0LldyaXRlKGJ1ZmZlciwgMCwgcG9zaXRpb24pOwot
ICAgICAgICAgICAgcG9zaXRpb24gPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gSW5kaWNhdGVzIHRoYXQgYSBDb2RlZE91dHB1dFN0cmVhbSB3cmFw
cGluZyBhIGZsYXQgYnl0ZSBhcnJheQotICAgICAgICAvLy8gcmFuIG91dCBvZiBzcGFjZS4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHNlYWxlZCBjbGFzcyBPdXRPZlNw
YWNlRXhjZXB0aW9uIDogSU9FeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaW50ZXJu
YWwgT3V0T2ZTcGFjZUV4Y2VwdGlvbigpCi0gICAgICAgICAgICAgICAgOiBiYXNlKCJDb2RlZE91
dHB1dFN0cmVhbSB3YXMgd3JpdGluZyB0byBhIGZsYXQgYnl0ZSBhcnJheSBhbmQgcmFuIG91dCBv
ZiBzcGFjZS4iKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gRmx1c2hlcyBhbnkgYnVmZmVyZWQgZGF0
YSBhbmQgb3B0aW9uYWxseSBjbG9zZXMgdGhlIHVuZGVybHlpbmcgc3RyZWFtLCBpZiBhbnkuCi0g
ICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8v
IDxwYXJhPgotICAgICAgICAvLy8gQnkgZGVmYXVsdCwgYW55IHVuZGVybHlpbmcgc3RyZWFtIGlz
IGNsb3NlZCBieSB0aGlzIG1ldGhvZC4gVG8gY29uZmlndXJlIHRoaXMgYmVoYXZpb3VyLAotICAg
ICAgICAvLy8gdXNlIGEgY29uc3RydWN0b3Igb3ZlcmxvYWQgd2l0aCBhIDxjPmxlYXZlT3Blbjwv
Yz4gcGFyYW1ldGVyLiBJZiB0aGlzIGluc3RhbmNlIGRvZXMgbm90Ci0gICAgICAgIC8vLyBoYXZl
IGFuIHVuZGVybHlpbmcgc3RyZWFtLCB0aGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcuCi0gICAgICAg
IC8vLyA8L3BhcmE+Ci0gICAgICAgIC8vLyA8cGFyYT4KLSAgICAgICAgLy8vIEZvciB0aGUgc2Fr
ZSBvZiBlZmZpY2llbmN5LCBjYWxsaW5nIHRoaXMgbWV0aG9kIGRvZXMgbm90IHByZXZlbnQgZnV0
dXJlIHdyaXRlIGNhbGxzIC0gYnV0Ci0gICAgICAgIC8vLyBpZiBhIGxhdGVyIHdyaXRlIGVuZHMg
dXAgd3JpdGluZyB0byBhIHN0cmVhbSB3aGljaCBoYXMgYmVlbiBkaXNwb3NlZCwgdGhhdCBpcyBs
aWtlbHkgdG8KLSAgICAgICAgLy8vIGZhaWwuIEl0IGlzIHJlY29tbWVuZCB0aGF0IHlvdSBub3Qg
Y2FsbCBhbnkgb3RoZXIgbWV0aG9kcyBhZnRlciB0aGlzLgotICAgICAgICAvLy8gPC9wYXJhPgot
ICAgICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgRmx1c2goKTsKLSAgICAgICAgICAgIGlmICghbGVhdmVPcGVu
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dC5EaXNwb3NlKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyBGbHVzaGVzIGFueSBidWZmZXJlZCBkYXRhIHRvIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSAoaWYg
dGhlcmUgaXMgb25lKS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHZv
aWQgRmx1c2goKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUmVmcmVzaEJ1ZmZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVmVy
aWZpZXMgdGhhdCBTcGFjZUxlZnQgcmV0dXJucyB6ZXJvLiBJdCdzIGNvbW1vbiB0byBjcmVhdGUg
YSBieXRlIGFycmF5Ci0gICAgICAgIC8vLyB0aGF0IGlzIGV4YWN0bHkgYmlnIGVub3VnaCB0byBo
b2xkIGEgbWVzc2FnZSwgdGhlbiB3cml0ZSB0byBpdCB3aXRoCi0gICAgICAgIC8vLyBhIENvZGVk
T3V0cHV0U3RyZWFtLiBDYWxsaW5nIENoZWNrTm9TcGFjZUxlZnQgYWZ0ZXIgd3JpdGluZyB2ZXJp
ZmllcyB0aGF0Ci0gICAgICAgIC8vLyB0aGUgbWVzc2FnZSB3YXMgYWN0dWFsbHkgYXMgYmlnIGFz
IGV4cGVjdGVkLCB3aGljaCBjYW4gaGVscCBidWdzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgICAgICBwdWJsaWMgdm9pZCBDaGVja05vU3BhY2VMZWZ0KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKFNwYWNlTGVmdCAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJEaWQgbm90IHdyaXRlIGFzIG11
Y2ggZGF0YSBhcyBleHBlY3RlZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIElmIHdyaXRpbmcgdG8gYSBmbGF0IGFycmF5
LCByZXR1cm5zIHRoZSBzcGFjZSBsZWZ0IGluIHRoZSBhcnJheS4gT3RoZXJ3aXNlLAotICAgICAg
ICAvLy8gdGhyb3dzIGFuIEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24uCi0gICAgICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBpbnQgU3BhY2VMZWZ0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdldAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChvdXRwdXQgPT0g
bnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW1p
dCAtIHBvc2l0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9w
ZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICJTcGFjZUxlZnQgY2Fu
IG9ubHkgYmUgY2FsbGVkIG9uIENvZGVkT3V0cHV0U3RyZWFtcyB0aGF0IGFyZSAiICsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICJ3cml0aW5nIHRvIGEgZmxhdCBhcnJheS4iKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0NvbGxlY3Rpb25zL01hcEZpZWxkLmNzIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hh
cnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Db2xsZWN0aW9ucy9NYXBGaWVsZC5jcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTkzYTg5ZDc3NjVmNzM4N2IzOGU4ZmJlZmY1MTRjNTcxNmM0
YmY5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFy
cC9zcmMvR29vZ2xlLlByb3RvYnVmL0NvbGxlY3Rpb25zL01hcEZpZWxkLmNzCisrKyAvZGV2L251
bGwKQEAgLTEsNzYwICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGlj
ZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVz
aW5nIEdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uOwotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lz
dGVtLkNvbGxlY3Rpb25zOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2lu
ZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uTGlucTsKLXVzaW5nIFN5c3RlbS5UZXh0OwotdXNp
bmcgR29vZ2xlLlByb3RvYnVmLkNvbXBhdGliaWxpdHk7Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJv
dG9idWYuQ29sbGVjdGlvbnMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIFJlcHJlc2Vu
dGF0aW9uIG9mIGEgbWFwIGZpZWxkIGluIGEgUHJvdG9jb2wgQnVmZmVyIG1lc3NhZ2UuCi0gICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAvLy8gPHR5cGVwYXJhbSBuYW1lPSJUS2V5Ij5LZXkgdHlwZSBp
biB0aGUgbWFwLiBNdXN0IGJlIGEgdHlwZSBzdXBwb3J0ZWQgYnkgUHJvdG9jb2wgQnVmZmVyIG1h
cCBrZXlzLjwvdHlwZXBhcmFtPgotICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlRWYWx1ZSI+VmFs
dWUgdHlwZSBpbiB0aGUgbWFwLiBNdXN0IGJlIGEgdHlwZSBzdXBwb3J0ZWQgYnkgUHJvdG9jb2wg
QnVmZmVycy48L3R5cGVwYXJhbT4KLSAgICAvLy8gPHJlbWFya3M+Ci0gICAgLy8vIDxwYXJhPgot
ICAgIC8vLyBUaGlzIGltcGxlbWVudGF0aW9uIHByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIgZm9y
IHNpbXBsaWNpdHkgb2YgdGVzdGluZwotICAgIC8vLyBjb2RlIHVzaW5nIG1hcHMgZmllbGRzLiBP
dmVyd3JpdGluZyBhbiBleGlzdGluZyBlbnRyeSBkb2VzIG5vdCBjaGFuZ2UgdGhlCi0gICAgLy8v
IHBvc2l0aW9uIG9mIHRoYXQgZW50cnkgd2l0aGluIHRoZSBtYXAuIEVxdWFsaXR5IGlzIG5vdCBv
cmRlci1zZW5zaXRpdmUuCi0gICAgLy8vIEZvciBzdHJpbmcga2V5cywgdGhlIGVxdWFsaXR5IGNv
bXBhcmlzb24gaXMgcHJvdmlkZWQgYnkgPHNlZSBjcmVmPSJTdHJpbmdDb21wYXJlci5PcmRpbmFs
IiAvPi4KLSAgICAvLy8gPC9wYXJhPgotICAgIC8vLyA8cGFyYT4KLSAgICAvLy8gTnVsbCB2YWx1
ZXMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdGhlIG1hcCwgZWl0aGVyIGZvciB3cmFwcGVyIHR5cGVz
IG9yIHJlZ3VsYXIgbWVzc2FnZXMuCi0gICAgLy8vIElmIGEgbWFwIGlzIGRlc2VyaWFsaXplZCBm
cm9tIGEgZGF0YSBzdHJlYW0gYW5kIHRoZSB2YWx1ZSBpcyBtaXNzaW5nIGZyb20gYW4gZW50cnks
IGEgZGVmYXVsdCB2YWx1ZQotICAgIC8vLyBpcyBjcmVhdGVkIGluc3RlYWQuIEZvciBwcmltaXRp
dmUgdHlwZXMsIHRoYXQgaXMgdGhlIHJlZ3VsYXIgZGVmYXVsdCB2YWx1ZSAoMCwgdGhlIGVtcHR5
IHN0cmluZyBhbmQgc28KLSAgICAvLy8gb24pOyBmb3IgbWVzc2FnZSB0eXBlcywgYW4gZW1wdHkg
aW5zdGFuY2Ugb2YgdGhlIG1lc3NhZ2UgaXMgY3JlYXRlZCwgYXMgaWYgdGhlIG1hcCBlbnRyeSBj
b250YWluZWQgYSAwLWxlbmd0aAotICAgIC8vLyBlbmNvZGVkIHZhbHVlIGZvciB0aGUgZmllbGQu
Ci0gICAgLy8vIDwvcGFyYT4KLSAgICAvLy8gPHBhcmE+Ci0gICAgLy8vIFRoaXMgaW1wbGVtZW50
YXRpb24gZG9lcyBub3QgZ2VuZXJhbGx5IHByb2hpYml0IHRoZSB1c2Ugb2Yga2V5L3ZhbHVlIHR5
cGVzIHdoaWNoIGFyZSBub3QKLSAgICAvLy8gc3VwcG9ydGVkIGJ5IFByb3RvY29sIEJ1ZmZlcnMg
KGUuZy4gdXNpbmcgYSBrZXkgdHlwZSBvZiA8Y29kZT5ieXRlPC9jb2RlPikgYnV0IG5vciBkb2Vz
IGl0IGd1YXJhbnRlZQotICAgIC8vLyB0aGF0IGFsbCBvcGVyYXRpb25zIHdpbGwgd29yayBpbiBz
dWNoIGNhc2VzLgotICAgIC8vLyA8L3BhcmE+Ci0gICAgLy8vIDwvcmVtYXJrcz4KLSAgICBwdWJs
aWMgc2VhbGVkIGNsYXNzIE1hcEZpZWxkPFRLZXksIFRWYWx1ZT4gOiBJRGVlcENsb25lYWJsZTxN
YXBGaWVsZDxUS2V5LCBUVmFsdWU+PiwgSURpY3Rpb25hcnk8VEtleSwgVFZhbHVlPiwgSUVxdWF0
YWJsZTxNYXBGaWVsZDxUS2V5LCBUVmFsdWU+PiwgSURpY3Rpb25hcnkKLSAgICB7Ci0gICAgICAg
IC8vIFRPRE86IERvbid0IGNyZWF0ZSB0aGUgbWFwL2xpc3QgdW50aWwgd2UgaGF2ZSBhbiBlbnRy
eS4gKEFzc3VtZSBtYW55IG1hcHMgd2lsbCBiZSBlbXB0eS4pCi0gICAgICAgIHByaXZhdGUgcmVh
ZG9ubHkgRGljdGlvbmFyeTxUS2V5LCBMaW5rZWRMaXN0Tm9kZTxLZXlWYWx1ZVBhaXI8VEtleSwg
VFZhbHVlPj4+IG1hcCA9Ci0gICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxUS2V5LCBMaW5rZWRM
aXN0Tm9kZTxLZXlWYWx1ZVBhaXI8VEtleSwgVFZhbHVlPj4+KCk7Ci0gICAgICAgIHByaXZhdGUg
cmVhZG9ubHkgTGlua2VkTGlzdDxLZXlWYWx1ZVBhaXI8VEtleSwgVFZhbHVlPj4gbGlzdCA9IG5l
dyBMaW5rZWRMaXN0PEtleVZhbHVlUGFpcjxUS2V5LCBUVmFsdWU+PigpOwotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENyZWF0ZXMgYSBkZWVwIGNsb25lIG9mIHRoaXMgb2Jq
ZWN0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJldHVybnM+Ci0gICAg
ICAgIC8vLyBBIGRlZXAgY2xvbmUgb2YgdGhpcyBvYmplY3QuCi0gICAgICAgIC8vLyA8L3JldHVy
bnM+Ci0gICAgICAgIHB1YmxpYyBNYXBGaWVsZDxUS2V5LCBUVmFsdWU+IENsb25lKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdmFyIGNsb25lID0gbmV3IE1hcEZpZWxkPFRLZXksIFRWYWx1ZT4o
KTsKLSAgICAgICAgICAgIC8vIEtleXMgYXJlIG5ldmVyIGNsb25lYWJsZS4gVmFsdWVzIG1pZ2h0
IGJlLgotICAgICAgICAgICAgaWYgKHR5cGVvZihJRGVlcENsb25lYWJsZTxUVmFsdWU+KS5Jc0Fz
c2lnbmFibGVGcm9tKHR5cGVvZihUVmFsdWUpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBmb3JlYWNoICh2YXIgcGFpciBpbiBsaXN0KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2xvbmUuQWRkKHBhaXIuS2V5LCAoKElEZWVwQ2xvbmVhYmxlPFRWYWx1
ZT4pcGFpci5WYWx1ZSkuQ2xvbmUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIE5v
dGhpbmcgaXMgY2xvbmVhYmxlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5LgotICAgICAgICAg
ICAgICAgIGNsb25lLkFkZCh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBjbG9uZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IEFkZHMgdGhlIHNwZWNpZmllZCBrZXkvdmFsdWUgcGFpciB0byB0aGUgbWFwLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBUaGlzIG9w
ZXJhdGlvbiBmYWlscyBpZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBtYXAuIFRvIHJl
cGxhY2UgYW4gZXhpc3RpbmcgZW50cnksIHVzZSB0aGUgaW5kZXhlci4KLSAgICAgICAgLy8vIDwv
cmVtYXJrcz4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJrZXkiPlRoZSBrZXkgdG8gYWRkPC9w
YXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRvIGFkZC48
L3BhcmFtPgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJTeXN0ZW0uQXJndW1lbnRFeGNl
cHRpb24iPlRoZSBnaXZlbiBrZXkgYWxyZWFkeSBleGlzdHMgaW4gbWFwLjwvZXhjZXB0aW9uPgot
ICAgICAgICBwdWJsaWMgdm9pZCBBZGQoVEtleSBrZXksIFRWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiBvZiBhcmd1bWVudHMgaGFwcGVucyBpbiBDb250
YWluc0tleSBhbmQgdGhlIGluZGV4ZXIKLSAgICAgICAgICAgIGlmIChDb250YWluc0tleShrZXkp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2Vw
dGlvbigiS2V5IGFscmVhZHkgZXhpc3RzIGluIG1hcCIsICJrZXkiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8v
IDxzdW1tYXJ5PgotICAgICAgICAvLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQg
a2V5IGlzIHByZXNlbnQgaW4gdGhlIG1hcC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgLy8vIDxwYXJhbSBuYW1lPSJrZXkiPlRoZSBrZXkgdG8gY2hlY2suPC9wYXJhbT4KLSAgICAg
ICAgLy8vIDxyZXR1cm5zPjxjPnRydWU8L2M+IGlmIHRoZSBtYXAgY29udGFpbnMgdGhlIGdpdmVu
IGtleTsgPGM+ZmFsc2U8L2M+IG90aGVyd2lzZS48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBi
b29sIENvbnRhaW5zS2V5KFRLZXkga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBQcm90b1By
ZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsVW5jb25zdHJhaW5lZChrZXksICJrZXkiKTsKLSAgICAg
ICAgICAgIHJldHVybiBtYXAuQ29udGFpbnNLZXkoa2V5KTsKLSAgICAgICAgfQotCi0gICAgICAg
IHByaXZhdGUgYm9vbCBDb250YWluc1ZhbHVlKFRWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgdmFyIGNvbXBhcmVyID0gRXF1YWxpdHlDb21wYXJlcjxUVmFsdWU+LkRlZmF1bHQ7
Ci0gICAgICAgICAgICByZXR1cm4gbGlzdC5BbnkocGFpciA9PiBjb21wYXJlci5FcXVhbHMocGFp
ci5WYWx1ZSwgdmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgLy8vIFJlbW92ZXMgdGhlIGVudHJ5IGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGtleSBm
cm9tIHRoZSBtYXAuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0g
bmFtZT0ia2V5Ij5UaGUga2V5IGluZGljYXRpbmcgdGhlIGVudHJ5IHRvIHJlbW92ZSBmcm9tIHRo
ZSBtYXAuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPjxjPnRydWU8L2M+IGlmIHRoZSBt
YXAgY29udGFpbmVkIHRoZSBnaXZlbiBrZXkgYmVmb3JlIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZDsg
PGM+ZmFsc2U8L2M+IG90aGVyd2lzZS48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBib29sIFJl
bW92ZShUS2V5IGtleSkKLSAgICAgICAgewotICAgICAgICAgICAgUHJvdG9QcmVjb25kaXRpb25z
LkNoZWNrTm90TnVsbFVuY29uc3RyYWluZWQoa2V5LCAia2V5Iik7Ci0gICAgICAgICAgICBMaW5r
ZWRMaXN0Tm9kZTxLZXlWYWx1ZVBhaXI8VEtleSwgVFZhbHVlPj4gbm9kZTsKLSAgICAgICAgICAg
IGlmIChtYXAuVHJ5R2V0VmFsdWUoa2V5LCBvdXQgbm9kZSkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbWFwLlJlbW92ZShrZXkpOwotICAgICAgICAgICAgICAgIG5vZGUuTGlzdC5S
ZW1vdmUobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gR2V0cyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZp
ZWQga2V5LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9
ImtleSI+VGhlIGtleSB3aG9zZSB2YWx1ZSB0byBnZXQuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxw
YXJhbSBuYW1lPSJ2YWx1ZSI+V2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zLCB0aGUgdmFsdWUgYXNz
b2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LCBpZiB0aGUga2V5IGlzIGZvdW5kOwotICAg
ICAgICAvLy8gb3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHR5cGUgb2YgdGhl
IDxwYXJhbXJlZiBuYW1lPSJ2YWx1ZSIvPiBwYXJhbWV0ZXIuCi0gICAgICAgIC8vLyBUaGlzIHBh
cmFtZXRlciBpcyBwYXNzZWQgdW5pbml0aWFsaXplZC48L3BhcmFtPgotICAgICAgICAvLy8gPHJl
dHVybnM+PGM+dHJ1ZTwvYz4gaWYgdGhlIG1hcCBjb250YWlucyBhbiBlbGVtZW50IHdpdGggdGhl
IHNwZWNpZmllZCBrZXk7IG90aGVyd2lzZSwgPGM+ZmFsc2U8L2M+LjwvcmV0dXJucz4KLSAgICAg
ICAgcHVibGljIGJvb2wgVHJ5R2V0VmFsdWUoVEtleSBrZXksIG91dCBUVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIExpbmtlZExpc3ROb2RlPEtleVZhbHVlUGFpcjxUS2V5LCBU
VmFsdWU+PiBub2RlOwotICAgICAgICAgICAgaWYgKG1hcC5UcnlHZXRWYWx1ZShrZXksIG91dCBu
b2RlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG5vZGUuVmFsdWUu
VmFsdWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBkZWZh
dWx0KFRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gR2V0cyBv
ciBzZXRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuCi0gICAg
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ia2V5Ij5UaGUga2V5
IG9mIHRoZSB2YWx1ZSB0byBnZXQgb3Igc2V0LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8ZXhjZXB0
aW9uIGNyZWY9IktleU5vdEZvdW5kRXhjZXB0aW9uIj5UaGUgcHJvcGVydHkgaXMgcmV0cmlldmVk
IGFuZCBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNvbGxlY3Rpb24uPC9leGNlcHRpb24+Ci0g
ICAgICAgIC8vLyA8cmV0dXJucz5UaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZp
ZWQga2V5LiBJZiB0aGUgc3BlY2lmaWVkIGtleSBpcyBub3QgZm91bmQsCi0gICAgICAgIC8vLyBh
IGdldCBvcGVyYXRpb24gdGhyb3dzIGEgPHNlZSBjcmVmPSJLZXlOb3RGb3VuZEV4Y2VwdGlvbiIv
PiwgYW5kIGEgc2V0IG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IGVsZW1lbnQgd2l0aCB0aGUgc3Bl
Y2lmaWVkIGtleS48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBUVmFsdWUgdGhpc1tUS2V5IGtl
eV0KLSAgICAgICAgewotICAgICAgICAgICAgZ2V0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgUHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbFVuY29uc3RyYWluZWQoa2V5LCAi
a2V5Iik7Ci0gICAgICAgICAgICAgICAgVFZhbHVlIHZhbHVlOwotICAgICAgICAgICAgICAgIGlm
IChUcnlHZXRWYWx1ZShrZXksIG91dCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBLZXlOb3RGb3VuZEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc2V0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHJvdG9QcmVj
b25kaXRpb25zLkNoZWNrTm90TnVsbFVuY29uc3RyYWluZWQoa2V5LCAia2V5Iik7Ci0gICAgICAg
ICAgICAgICAgLy8gdmFsdWUgPT0gbnVsbCBjaGVjayBoZXJlIGlzIHJlZHVuZGFudCwgYnV0IGF2
b2lkcyBib3hpbmcuCi0gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tO
b3ROdWxsVW5jb25zdHJhaW5lZCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIExpbmtlZExpc3ROb2RlPEtleVZhbHVlUGFpcjxUS2V5LCBUVmFsdWU+
PiBub2RlOwotICAgICAgICAgICAgICAgIHZhciBwYWlyID0gbmV3IEtleVZhbHVlUGFpcjxUS2V5
LCBUVmFsdWU+KGtleSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChtYXAuVHJ5R2V0VmFs
dWUoa2V5LCBvdXQgbm9kZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBub2RlLlZhbHVlID0gcGFpcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGxpc3Qu
QWRkTGFzdChwYWlyKTsKLSAgICAgICAgICAgICAgICAgICAgbWFwW2tleV0gPSBub2RlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vIEdldHMgYSBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGtl
eXMgaW4gdGhlIG1hcC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIElD
b2xsZWN0aW9uPFRLZXk+IEtleXMgeyBnZXQgeyByZXR1cm4gbmV3IE1hcFZpZXc8VEtleT4odGhp
cywgcGFpciA9PiBwYWlyLktleSwgQ29udGFpbnNLZXkpOyB9IH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRzIGEgY29sbGVjdGlvbiBjb250YWluaW5nIHRoZSB2YWx1
ZXMgaW4gdGhlIG1hcC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIElD
b2xsZWN0aW9uPFRWYWx1ZT4gVmFsdWVzIHsgZ2V0IHsgcmV0dXJuIG5ldyBNYXBWaWV3PFRWYWx1
ZT4odGhpcywgcGFpciA9PiBwYWlyLlZhbHVlLCBDb250YWluc1ZhbHVlKTsgfSB9Ci0KLSAgICAg
ICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQWRkcyB0aGUgc3BlY2lmaWVkIGVudHJpZXMg
dG8gdGhlIG1hcC4gVGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgY2xv
bmVkLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImVu
dHJpZXMiPlRoZSBlbnRyaWVzIHRvIGFkZCB0byB0aGUgbWFwLjwvcGFyYW0+Ci0gICAgICAgIHB1
YmxpYyB2b2lkIEFkZChJRGljdGlvbmFyeTxUS2V5LCBUVmFsdWU+IGVudHJpZXMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwoZW50cmllcywg
ImVudHJpZXMiKTsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBwYWlyIGluIGVudHJpZXMpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQWRkKHBhaXIuS2V5LCBwYWlyLlZhbHVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIFJldHVybnMgYW4gZW51bWVyYXRvciB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGNv
bGxlY3Rpb24uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmV0dXJucz4K
LSAgICAgICAgLy8vIEFuIGVudW1lcmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBpdGVyYXRlIHRo
cm91Z2ggdGhlIGNvbGxlY3Rpb24uCi0gICAgICAgIC8vLyA8L3JldHVybnM+Ci0gICAgICAgIHB1
YmxpYyBJRW51bWVyYXRvcjxLZXlWYWx1ZVBhaXI8VEtleSwgVFZhbHVlPj4gR2V0RW51bWVyYXRv
cigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsaXN0LkdldEVudW1lcmF0b3IoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMg
YW4gZW51bWVyYXRvciB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggYSBjb2xsZWN0aW9uLgotICAgICAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJldHVybnM+Ci0gICAgICAgIC8vLyBBbiA8
c2VlIGNyZWY9IlQ6U3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhdG9yIiAvPiBvYmplY3QgdGhh
dCBjYW4gYmUgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb24uCi0gICAgICAg
IC8vLyA8L3JldHVybnM+Ci0gICAgICAgIElFbnVtZXJhdG9yIElFbnVtZXJhYmxlLkdldEVudW1l
cmF0b3IoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR2V0RW51bWVyYXRvcigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQWRkcyB0aGUg
c3BlY2lmaWVkIGl0ZW0gdG8gdGhlIG1hcC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgLy8vIDxwYXJhbSBuYW1lPSJpdGVtIj5UaGUgaXRlbSB0byBhZGQgdG8gdGhlIG1hcC48L3Bh
cmFtPgotICAgICAgICB2b2lkIElDb2xsZWN0aW9uPEtleVZhbHVlUGFpcjxUS2V5LCBUVmFsdWU+
Pi5BZGQoS2V5VmFsdWVQYWlyPFRLZXksIFRWYWx1ZT4gaXRlbSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQWRkKGl0ZW0uS2V5LCBpdGVtLlZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJlbW92ZXMgYWxsIGl0ZW1zIGZyb20gdGhlIG1hcC4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHZvaWQgQ2xlYXIoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBsaXN0LkNsZWFyKCk7Ci0gICAgICAgICAgICBtYXAuQ2xlYXIo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIERldGVy
bWluZXMgd2hldGhlciBtYXAgY29udGFpbnMgYW4gZW50cnkgZXF1aXZhbGVudCB0byB0aGUgZ2l2
ZW4ga2V5L3ZhbHVlIHBhaXIuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8
cGFyYW0gbmFtZT0iaXRlbSI+VGhlIGtleS92YWx1ZSBwYWlyIHRvIGZpbmQuPC9wYXJhbT4KLSAg
ICAgICAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz4KLSAgICAgICAgYm9vbCBJQ29sbGVjdGlvbjxL
ZXlWYWx1ZVBhaXI8VEtleSwgVFZhbHVlPj4uQ29udGFpbnMoS2V5VmFsdWVQYWlyPFRLZXksIFRW
YWx1ZT4gaXRlbSkKLSAgICAgICAgewotICAgICAgICAgICAgVFZhbHVlIHZhbHVlOwotICAgICAg
ICAgICAgcmV0dXJuIFRyeUdldFZhbHVlKGl0ZW0uS2V5LCBvdXQgdmFsdWUpCi0gICAgICAgICAg
ICAgICAgJiYgRXF1YWxpdHlDb21wYXJlcjxUVmFsdWU+LkRlZmF1bHQuRXF1YWxzKGl0ZW0uVmFs
dWUsIHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAg
Ly8vIENvcGllcyB0aGUga2V5L3ZhbHVlIHBhaXJzIGluIHRoaXMgbWFwIHRvIGFuIGFycmF5Lgot
ICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImFycmF5Ij5U
aGUgYXJyYXkgdG8gY29weSB0aGUgZW50cmllcyBpbnRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8
cGFyYW0gbmFtZT0iYXJyYXlJbmRleCI+VGhlIGluZGV4IG9mIHRoZSBhcnJheSBhdCB3aGljaCB0
byBzdGFydCBjb3B5aW5nIHZhbHVlcy48L3BhcmFtPgotICAgICAgICB2b2lkIElDb2xsZWN0aW9u
PEtleVZhbHVlUGFpcjxUS2V5LCBUVmFsdWU+Pi5Db3B5VG8oS2V5VmFsdWVQYWlyPFRLZXksIFRW
YWx1ZT5bXSBhcnJheSwgaW50IGFycmF5SW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxp
c3QuQ29weVRvKGFycmF5LCBhcnJheUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkvdmFsdWUgcGFp
ciBmcm9tIHRoZSBtYXAuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVt
YXJrcz5Cb3RoIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZSBtdXN0IGJlIGZvdW5kIGZvciB0aGUgZW50
cnkgdG8gYmUgcmVtb3ZlZC48L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaXRl
bSI+VGhlIGtleS92YWx1ZSBwYWlyIHRvIHJlbW92ZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJl
dHVybnM+PGM+dHJ1ZTwvYz4gaWYgdGhlIGtleS92YWx1ZSBwYWlyIHdhcyBmb3VuZCBhbmQgcmVt
b3ZlZDsgPGM+ZmFsc2U8L2M+IG90aGVyd2lzZS48L3JldHVybnM+Ci0gICAgICAgIGJvb2wgSUNv
bGxlY3Rpb248S2V5VmFsdWVQYWlyPFRLZXksIFRWYWx1ZT4+LlJlbW92ZShLZXlWYWx1ZVBhaXI8
VEtleSwgVFZhbHVlPiBpdGVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlbS5LZXkg
PT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1l
bnRFeGNlcHRpb24oIktleSBpcyBudWxsIiwgIml0ZW0iKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIExpbmtlZExpc3ROb2RlPEtleVZhbHVlUGFpcjxUS2V5LCBUVmFsdWU+PiBub2RlOwot
ICAgICAgICAgICAgaWYgKG1hcC5UcnlHZXRWYWx1ZShpdGVtLktleSwgb3V0IG5vZGUpICYmCi0g
ICAgICAgICAgICAgICAgRXF1YWxpdHlDb21wYXJlcjxUVmFsdWU+LkRlZmF1bHQuRXF1YWxzKGl0
ZW0uVmFsdWUsIG5vZGUuVmFsdWUuVmFsdWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1hcC5SZW1vdmUoaXRlbS5LZXkpOwotICAgICAgICAgICAgICAgIG5vZGUuTGlzdC5SZW1v
dmUobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUg
bWFwLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgaW50IENvdW50IHsg
Z2V0IHsgcmV0dXJuIGxpc3QuQ291bnQ7IH0gfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgLy8vIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCBpcyByZWFk
LW9ubHkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBib29sIElzUmVh
ZE9ubHkgeyBnZXQgeyByZXR1cm4gZmFsc2U7IH0gfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgLy8vIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIDxzZWUgY3JlZj0i
U3lzdGVtLk9iamVjdCIgLz4sIGlzIGVxdWFsIHRvIHRoaXMgaW5zdGFuY2UuCi0gICAgICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib3RoZXIiPlRoZSA8c2VlIGNy
ZWY9IlN5c3RlbS5PYmplY3QiIC8+IHRvIGNvbXBhcmUgd2l0aCB0aGlzIGluc3RhbmNlLjwvcGFy
YW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz4KLSAgICAgICAgLy8vICAgPGM+dHJ1ZTwvYz4gaWYg
dGhlIHNwZWNpZmllZCA8c2VlIGNyZWY9IlN5c3RlbS5PYmplY3QiIC8+IGlzIGVxdWFsIHRvIHRo
aXMgaW5zdGFuY2U7IG90aGVyd2lzZSwgPGM+ZmFsc2U8L2M+LgotICAgICAgICAvLy8gPC9yZXR1
cm5zPgotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIE1hcEZpZWxkPFRL
ZXksIFRWYWx1ZT4pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAg
ICAvLy8gUmV0dXJucyBhIGhhc2ggY29kZSBmb3IgdGhpcyBpbnN0YW5jZS4KLSAgICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPgotICAgICAgICAvLy8gQSBoYXNoIGNv
ZGUgZm9yIHRoaXMgaW5zdGFuY2UsIHN1aXRhYmxlIGZvciB1c2UgaW4gaGFzaGluZyBhbGdvcml0
aG1zIGFuZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBhIGhhc2ggdGFibGUuIAotICAgICAgICAvLy8g
PC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdmFyIHZhbHVlQ29tcGFyZXIgPSBFcXVhbGl0eUNvbXBhcmVy
PFRWYWx1ZT4uRGVmYXVsdDsKLSAgICAgICAgICAgIGludCBoYXNoID0gMDsKLSAgICAgICAgICAg
IGZvcmVhY2ggKHZhciBwYWlyIGluIGxpc3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaGFzaCBePSBwYWlyLktleS5HZXRIYXNoQ29kZSgpICogMzEgKyB2YWx1ZUNvbXBhcmVyLkdl
dEhhc2hDb2RlKHBhaXIuVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGhhc2g7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBD
b21wYXJlcyB0aGlzIG1hcCB3aXRoIGFub3RoZXIgZm9yIGVxdWFsaXR5LgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBUaGUgb3JkZXIg
b2YgdGhlIGtleS92YWx1ZSBwYWlycyBpbiB0aGUgbWFwcyBpcyBub3QgZGVlbWVkIHNpZ25pZmlj
YW50IGluIHRoaXMgY29tcGFyaXNvbi4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAg
Ly8vIDxwYXJhbSBuYW1lPSJvdGhlciI+VGhlIG1hcCB0byBjb21wYXJlIHRoaXMgd2l0aC48L3Bh
cmFtPgotICAgICAgICAvLy8gPHJldHVybnM+PGM+dHJ1ZTwvYz4gaWYgPHBhcmFtcmVmIG5hbWU9
Im90aGVyIi8+IHJlZmVycyB0byBhbiBlcXVhbCBtYXA7IDxjPmZhbHNlPC9jPiBvdGhlcndpc2Uu
PC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgYm9vbCBFcXVhbHMoTWFwRmllbGQ8VEtleSwgVFZh
bHVlPiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG90aGVyID09IG51bGwpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKG90aGVyID09IHRoaXMpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3Ro
ZXIuQ291bnQgIT0gdGhpcy5Db3VudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgdmFsdWVDb21wYXJl
ciA9IEVxdWFsaXR5Q29tcGFyZXI8VFZhbHVlPi5EZWZhdWx0OwotICAgICAgICAgICAgZm9yZWFj
aCAodmFyIHBhaXIgaW4gdGhpcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUVmFs
dWUgdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFvdGhlci5UcnlHZXRWYWx1ZShwYWlyLktl
eSwgb3V0IHZhbHVlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF2YWx1
ZUNvbXBhcmVyLkVxdWFscyh2YWx1ZSwgcGFpci5WYWx1ZSkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBZGRzIGVudHJpZXMgdG8gdGhlIG1hcCBmcm9t
IHRoZSBnaXZlbiBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8
cmVtYXJrcz4KLSAgICAgICAgLy8vIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgc3RyZWFtIGlzIGlu
aXRpYWxseSBwb3NpdGlvbmVkIGFmdGVyIHRoZSB0YWcgc3BlY2lmaWVkIGJ5IHRoZSBjb2RlYy4K
LSAgICAgICAgLy8vIFRoaXMgbWV0aG9kIHdpbGwgY29udGludWUgcmVhZGluZyBlbnRyaWVzIGZy
b20gdGhlIHN0cmVhbSB1bnRpbCB0aGUgZW5kIGlzIHJlYWNoZWQsIG9yCi0gICAgICAgIC8vLyBh
IGRpZmZlcmVudCB0YWcgaXMgZW5jb3VudGVyZWQuCi0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0g
ICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5wdXQiPlN0cmVhbSB0byByZWFkIGZyb208L3BhcmFt
PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvZGVjIj5Db2RlYyBkZXNjcmliaW5nIGhvdyB0
aGUga2V5L3ZhbHVlIHBhaXJzIGFyZSBlbmNvZGVkPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZv
aWQgQWRkRW50cmllc0Zyb20oQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwgQ29kZWMgY29kZWMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZhciBhZGFwdGVyID0gbmV3IENvZGVjLk1lc3NhZ2VBZGFw
dGVyKGNvZGVjKTsKLSAgICAgICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYWRhcHRlci5SZXNldCgpOwotICAgICAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKGFk
YXB0ZXIpOwotICAgICAgICAgICAgICAgIHRoaXNbYWRhcHRlci5LZXldID0gYWRhcHRlci5WYWx1
ZTsKLSAgICAgICAgICAgIH0gd2hpbGUgKGlucHV0Lk1heWJlQ29uc3VtZVRhZyhjb2RlYy5NYXBU
YWcpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdy
aXRlcyB0aGUgY29udGVudHMgb2YgdGhpcyBtYXAgdG8gdGhlIGdpdmVuIGNvZGVkIG91dHB1dCBz
dHJlYW0sIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29kZWMKLSAgICAgICAgLy8vIHRvIGVuY29kZSBl
YWNoIGVudHJ5LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5h
bWU9Im91dHB1dCI+VGhlIG91dHB1dCBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJhbT4KLSAgICAg
ICAgLy8vIDxwYXJhbSBuYW1lPSJjb2RlYyI+VGhlIGNvZGVjIHRvIHVzZSBmb3IgZWFjaCBlbnRy
eS48L3BhcmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKENvZGVkT3V0cHV0U3RyZWFt
IG91dHB1dCwgQ29kZWMgY29kZWMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXNzYWdl
ID0gbmV3IENvZGVjLk1lc3NhZ2VBZGFwdGVyKGNvZGVjKTsKLSAgICAgICAgICAgIGZvcmVhY2gg
KHZhciBlbnRyeSBpbiBsaXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lc3Nh
Z2UuS2V5ID0gZW50cnkuS2V5OwotICAgICAgICAgICAgICAgIG1lc3NhZ2UuVmFsdWUgPSBlbnRy
eS5WYWx1ZTsKLSAgICAgICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWcoY29kZWMuTWFwVGFnKTsK
LSAgICAgICAgICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ2Fs
Y3VsYXRlcyB0aGUgc2l6ZSBvZiB0aGlzIG1hcCBiYXNlZCBvbiB0aGUgZ2l2ZW4gZW50cnkgY29k
ZWMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY29k
ZWMiPlRoZSBjb2RlYyB0byB1c2UgdG8gZW5jb2RlIGVhY2ggZW50cnkuPC9wYXJhbT4KLSAgICAg
ICAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIGludCBDYWxjdWxhdGVT
aXplKENvZGVjIGNvZGVjKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoQ291bnQgPT0gMCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3IENvZGVjLk1lc3NhZ2VBZGFwdGVyKGNvZGVj
KTsKLSAgICAgICAgICAgIGludCBzaXplID0gMDsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBl
bnRyeSBpbiBsaXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lc3NhZ2UuS2V5
ID0gZW50cnkuS2V5OwotICAgICAgICAgICAgICAgIG1lc3NhZ2UuVmFsdWUgPSBlbnRyeS5WYWx1
ZTsKLSAgICAgICAgICAgICAgICBzaXplICs9IENvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVSYXdW
YXJpbnQzMlNpemUoY29kZWMuTWFwVGFnKTsKLSAgICAgICAgICAgICAgICBzaXplICs9IENvZGVk
T3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShtZXNzYWdlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBzaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlz
IHJlcGVhdGVkIGZpZWxkLCBpbiB0aGUgc2FtZQotICAgICAgICAvLy8gd2F5IGFzIGl0IHdvdWxk
IGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBkZWZhdWx0IEpTT04gZm9ybWF0dGVyLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkK
LSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IG5ldyBTdHJpbmdXcml0ZXIoKTsK
LSAgICAgICAgICAgIEpzb25Gb3JtYXR0ZXIuRGVmYXVsdC5Xcml0ZURpY3Rpb25hcnkod3JpdGVy
LCB0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiB3cml0ZXIuVG9TdHJpbmcoKTsKLSAgICAgICAg
fQotCi0gICAgICAgICNyZWdpb24gSURpY3Rpb25hcnkgZXhwbGljaXQgaW50ZXJmYWNlIGltcGxl
bWVudGF0aW9uCi0gICAgICAgIHZvaWQgSURpY3Rpb25hcnkuQWRkKG9iamVjdCBrZXksIG9iamVj
dCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQWRkKChUS2V5KWtleSwgKFRWYWx1ZSl2
YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIElEaWN0aW9uYXJ5LkNvbnRhaW5zKG9i
amVjdCBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGtleSBpcyBUS2V5KSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gQ29udGFpbnNLZXkoKFRLZXkpa2V5KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIElEaWN0aW9uYXJ5RW51bWVyYXRvciBJRGljdGlvbmFyeS5HZXRFbnVtZXJhdG9y
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBEaWN0aW9uYXJ5RW51bWVyYXRv
cihHZXRFbnVtZXJhdG9yKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBJRGljdGlvbmFy
eS5SZW1vdmUob2JqZWN0IGtleSkKLSAgICAgICAgewotICAgICAgICAgICAgUHJvdG9QcmVjb25k
aXRpb25zLkNoZWNrTm90TnVsbChrZXksICJrZXkiKTsKLSAgICAgICAgICAgIGlmICghKGtleSBp
cyBUS2V5KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSZW1vdmUoKFRLZXkpa2V5KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgSUNvbGxlY3Rpb24uQ29weVRvKEFycmF5IGFycmF5LCBpbnQgaW5kZXgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdWdseSBhbmQgc2xvdyBhcyBoZWNrLCBidXQg
d2l0aCBhbnkgbHVjayBpdCB3aWxsIG5ldmVyIGJlIHVzZWQgYW55d2F5LgotICAgICAgICAgICAg
SUNvbGxlY3Rpb24gdGVtcCA9IHRoaXMuU2VsZWN0KHBhaXIgPT4gbmV3IERpY3Rpb25hcnlFbnRy
eShwYWlyLktleSwgcGFpci5WYWx1ZSkpLlRvTGlzdCgpOwotICAgICAgICAgICAgdGVtcC5Db3B5
VG8oYXJyYXksIGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgSURpY3Rpb25hcnku
SXNGaXhlZFNpemUgeyBnZXQgeyByZXR1cm4gZmFsc2U7IH0gfQotCi0gICAgICAgIElDb2xsZWN0
aW9uIElEaWN0aW9uYXJ5LktleXMgeyBnZXQgeyByZXR1cm4gKElDb2xsZWN0aW9uKUtleXM7IH0g
fQotCi0gICAgICAgIElDb2xsZWN0aW9uIElEaWN0aW9uYXJ5LlZhbHVlcyB7IGdldCB7IHJldHVy
biAoSUNvbGxlY3Rpb24pVmFsdWVzOyB9IH0KLQotICAgICAgICBib29sIElDb2xsZWN0aW9uLklz
U3luY2hyb25pemVkIHsgZ2V0IHsgcmV0dXJuIGZhbHNlOyB9IH0KLQotICAgICAgICBvYmplY3Qg
SUNvbGxlY3Rpb24uU3luY1Jvb3QgeyBnZXQgeyByZXR1cm4gdGhpczsgfSB9Ci0KLSAgICAgICAg
b2JqZWN0IElEaWN0aW9uYXJ5LnRoaXNbb2JqZWN0IGtleV0KLSAgICAgICAgewotICAgICAgICAg
ICAgZ2V0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHJvdG9QcmVjb25kaXRpb25z
LkNoZWNrTm90TnVsbChrZXksICJrZXkiKTsKLSAgICAgICAgICAgICAgICBpZiAoIShrZXkgaXMg
VEtleSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgVFZhbHVlIHZhbHVlOwotICAg
ICAgICAgICAgICAgIFRyeUdldFZhbHVlKChUS2V5KWtleSwgb3V0IHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldAot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXNbKFRLZXkpa2V5XSA9IChUVmFsdWUp
dmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgI2VuZHJlZ2lvbgotCi0g
ICAgICAgIHByaXZhdGUgY2xhc3MgRGljdGlvbmFyeUVudW1lcmF0b3IgOiBJRGljdGlvbmFyeUVu
dW1lcmF0b3IKLSAgICAgICAgewotICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBJRW51bWVy
YXRvcjxLZXlWYWx1ZVBhaXI8VEtleSwgVFZhbHVlPj4gZW51bWVyYXRvcjsKLQotICAgICAgICAg
ICAgaW50ZXJuYWwgRGljdGlvbmFyeUVudW1lcmF0b3IoSUVudW1lcmF0b3I8S2V5VmFsdWVQYWly
PFRLZXksIFRWYWx1ZT4+IGVudW1lcmF0b3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5lbnVtZXJhdG9yID0gZW51bWVyYXRvcjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcHVibGljIGJvb2wgTW92ZU5leHQoKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlbnVtZXJhdG9yLk1vdmVOZXh0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHB1YmxpYyB2b2lkIFJlc2V0KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBlbnVtZXJhdG9yLlJlc2V0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1Ymxp
YyBvYmplY3QgQ3VycmVudCB7IGdldCB7IHJldHVybiBFbnRyeTsgfSB9Ci0gICAgICAgICAgICBw
dWJsaWMgRGljdGlvbmFyeUVudHJ5IEVudHJ5IHsgZ2V0IHsgcmV0dXJuIG5ldyBEaWN0aW9uYXJ5
RW50cnkoS2V5LCBWYWx1ZSk7IH0gfQotICAgICAgICAgICAgcHVibGljIG9iamVjdCBLZXkgeyBn
ZXQgeyByZXR1cm4gZW51bWVyYXRvci5DdXJyZW50LktleTsgfSB9Ci0gICAgICAgICAgICBwdWJs
aWMgb2JqZWN0IFZhbHVlIHsgZ2V0IHsgcmV0dXJuIGVudW1lcmF0b3IuQ3VycmVudC5WYWx1ZTsg
fSB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIGNv
ZGVjIGZvciBhIHNwZWNpZmljIG1hcCBmaWVsZC4gVGhpcyBjb250YWlucyBhbGwgdGhlIGluZm9y
bWF0aW9uIHJlcXVpcmVkIHRvIGVuY29kZSBhbmQKLSAgICAgICAgLy8vIGRlY29kZSB0aGUgbmVz
dGVkIG1lc3NhZ2VzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc2Vh
bGVkIGNsYXNzIENvZGVjCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkg
RmllbGRDb2RlYzxUS2V5PiBrZXlDb2RlYzsKLSAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkg
RmllbGRDb2RlYzxUVmFsdWU+IHZhbHVlQ29kZWM7Ci0gICAgICAgICAgICBwcml2YXRlIHJlYWRv
bmx5IHVpbnQgbWFwVGFnOwotCi0gICAgICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgICAg
ICAvLy8gQ3JlYXRlcyBhIG5ldyBlbnRyeSBjb2RlYyBiYXNlZCBvbiBhIHNlcGFyYXRlIGtleSBj
b2RlYyBhbmQgdmFsdWUgY29kZWMsCi0gICAgICAgICAgICAvLy8gYW5kIHRoZSB0YWcgdG8gdXNl
IGZvciBlYWNoIG1hcCBlbnRyeS4KLSAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
ICAgICAvLy8gPHBhcmFtIG5hbWU9ImtleUNvZGVjIj5UaGUga2V5IGNvZGVjLjwvcGFyYW0+Ci0g
ICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlQ29kZWMiPlRoZSB2YWx1ZSBjb2RlYy48
L3BhcmFtPgotICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJtYXBUYWciPlRoZSBtYXAgdGFn
IHRvIHVzZSB0byBpbnRyb2R1Y2UgZWFjaCBtYXAgZW50cnkuPC9wYXJhbT4KLSAgICAgICAgICAg
IHB1YmxpYyBDb2RlYyhGaWVsZENvZGVjPFRLZXk+IGtleUNvZGVjLCBGaWVsZENvZGVjPFRWYWx1
ZT4gdmFsdWVDb2RlYywgdWludCBtYXBUYWcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5rZXlDb2RlYyA9IGtleUNvZGVjOwotICAgICAgICAgICAgICAgIHRoaXMudmFsdWVD
b2RlYyA9IHZhbHVlQ29kZWM7Ci0gICAgICAgICAgICAgICAgdGhpcy5tYXBUYWcgPSBtYXBUYWc7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAg
IC8vLyBUaGUgdGFnIHVzZWQgaW4gdGhlIGVuY2xvc2luZyBtZXNzYWdlIHRvIGluZGljYXRlIG1h
cCBlbnRyaWVzLgotICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgIGludGVy
bmFsIHVpbnQgTWFwVGFnIHsgZ2V0IHsgcmV0dXJuIG1hcFRhZzsgfSB9Ci0KLSAgICAgICAgICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBBIG11dGFibGUgbWVzc2FnZSBjbGFzcywg
dXNlZCBmb3IgcGFyc2luZyBhbmQgc2VyaWFsaXppbmcuIFRoaXMKLSAgICAgICAgICAgIC8vLyBk
ZWxlZ2F0ZXMgdGhlIHdvcmsgdG8gYSBjb2RlYywgYnV0IGltcGxlbWVudHMgdGhlIDxzZWUgY3Jl
Zj0iSU1lc3NhZ2UiLz4gaW50ZXJmYWNlCi0gICAgICAgICAgICAvLy8gZm9yIGludGVyb3Agd2l0
aCA8c2VlIGNyZWY9IkNvZGVkSW5wdXRTdHJlYW0iLz4gYW5kIDxzZWUgY3JlZj0iQ29kZWRPdXRw
dXRTdHJlYW0iLz4uCi0gICAgICAgICAgICAvLy8gVGhpcyBpcyBuZXN0ZWQgaW5zaWRlIENvZGVj
IGFzIGl0J3MgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBhc3NvY2lhdGVkIGNvZGVjLAotICAgICAg
ICAgICAgLy8vIGFuZCBpdCdzIHNpbXBsZXIgaWYgaXQgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gYWxs
IGl0cyBmaWVsZHMuCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgaW50
ZXJuYWwgY2xhc3MgTWVzc2FnZUFkYXB0ZXIgOiBJTWVzc2FnZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGJ5dGVbXSBaZXJvTGVuZ3RoTWVz
c2FnZVN0cmVhbURhdGEgPSBuZXcgYnl0ZVtdIHsgMCB9OwotCi0gICAgICAgICAgICAgICAgcHJp
dmF0ZSByZWFkb25seSBDb2RlYyBjb2RlYzsKLSAgICAgICAgICAgICAgICBpbnRlcm5hbCBUS2V5
IEtleSB7IGdldDsgc2V0OyB9Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWwgVFZhbHVlIFZhbHVl
IHsgZ2V0OyBzZXQ7IH0KLQotICAgICAgICAgICAgICAgIGludGVybmFsIE1lc3NhZ2VBZGFwdGVy
KENvZGVjIGNvZGVjKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb2RlYyA9IGNvZGVjOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlu
dGVybmFsIHZvaWQgUmVzZXQoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgS2V5ID0gY29kZWMua2V5Q29kZWMuRGVmYXVsdFZhbHVlOwotICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSA9IGNvZGVjLnZhbHVlQ29kZWMuRGVmYXVsdFZhbHVlOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShDb2RlZElucHV0U3Ry
ZWFtIGlucHV0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdWludCB0
YWc7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAh
PSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGFnID09IGNvZGVjLmtleUNvZGVjLlRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBLZXkgPSBjb2RlYy5rZXlDb2RlYy5SZWFkKGlucHV0
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHRhZyA9PSBjb2RlYy52YWx1ZUNvZGVjLlRhZykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9IGNvZGVjLnZhbHVlQ29k
ZWMuUmVhZChpbnB1dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8v
IENvcm5lciBjYXNlOiBhIG1hcCBlbnRyeSB3aXRoIGEga2V5IGJ1dCBubyB2YWx1ZSwgd2hlcmUg
dGhlIHZhbHVlIHR5cGUgaXMgYSBtZXNzYWdlLgotICAgICAgICAgICAgICAgICAgICAvLyBSZWFk
IGl0IGFzIGlmIHdlJ2Qgc2VlbiBhbiBpbnB1dCBzdHJlYW0gd2l0aCBubyBkYXRhIChpLmUuIGNy
ZWF0ZSBhICJkZWZhdWx0IiBtZXNzYWdlKS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVl
ID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFZhbHVlID0gY29kZWMudmFsdWVDb2RlYy5SZWFkKG5ldyBDb2RlZElucHV0U3RyZWFtKFplcm9M
ZW5ndGhNZXNzYWdlU3RyZWFtRGF0YSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgV3JpdGVUbyhDb2RlZE91
dHB1dFN0cmVhbSBvdXRwdXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBjb2RlYy5rZXlDb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1dCwgS2V5KTsKLSAgICAgICAg
ICAgICAgICAgICAgY29kZWMudmFsdWVDb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1dCwgVmFs
dWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyBpbnQgQ2Fs
Y3VsYXRlU2l6ZSgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY29kZWMua2V5Q29kZWMuQ2FsY3VsYXRlU2l6ZVdpdGhUYWcoS2V5KSArIGNvZGVjLnZhbHVl
Q29kZWMuQ2FsY3VsYXRlU2l6ZVdpdGhUYWcoVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIE1lc3NhZ2VEZXNjcmlwdG9yIElNZXNzYWdlLkRlc2NyaXB0b3IgeyBn
ZXQgeyByZXR1cm4gbnVsbDsgfSB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBwcml2YXRlIGNsYXNzIE1hcFZpZXc8VD4gOiBJQ29sbGVjdGlvbjxUPiwgSUNvbGxlY3Rpb24K
LSAgICAgICAgewotICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBNYXBGaWVsZDxUS2V5LCBU
VmFsdWU+IHBhcmVudDsKLSAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRnVuYzxLZXlWYWx1
ZVBhaXI8VEtleSwgVFZhbHVlPiwgVD4gcHJvamVjdGlvbjsKLSAgICAgICAgICAgIHByaXZhdGUg
cmVhZG9ubHkgRnVuYzxULCBib29sPiBjb250YWluc0NoZWNrOwotCi0gICAgICAgICAgICBpbnRl
cm5hbCBNYXBWaWV3KAotICAgICAgICAgICAgICAgIE1hcEZpZWxkPFRLZXksIFRWYWx1ZT4gcGFy
ZW50LAotICAgICAgICAgICAgICAgIEZ1bmM8S2V5VmFsdWVQYWlyPFRLZXksIFRWYWx1ZT4sIFQ+
IHByb2plY3Rpb24sCi0gICAgICAgICAgICAgICAgRnVuYzxULCBib29sPiBjb250YWluc0NoZWNr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50Owot
ICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbiA9IHByb2plY3Rpb247Ci0gICAgICAgICAg
ICAgICAgdGhpcy5jb250YWluc0NoZWNrID0gY29udGFpbnNDaGVjazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcHVibGljIGludCBDb3VudCB7IGdldCB7IHJldHVybiBwYXJlbnQuQ291
bnQ7IH0gfQotCi0gICAgICAgICAgICBwdWJsaWMgYm9vbCBJc1JlYWRPbmx5IHsgZ2V0IHsgcmV0
dXJuIHRydWU7IH0gfQotCi0gICAgICAgICAgICBwdWJsaWMgYm9vbCBJc1N5bmNocm9uaXplZCB7
IGdldCB7IHJldHVybiBmYWxzZTsgfSB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBvYmplY3QgU3lu
Y1Jvb3QgeyBnZXQgeyByZXR1cm4gcGFyZW50OyB9IH0KLQotICAgICAgICAgICAgcHVibGljIHZv
aWQgQWRkKFQgaXRlbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
Tm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1
YmxpYyB2b2lkIENsZWFyKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHB1YmxpYyBib29sIENvbnRhaW5zKFQgaXRlbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY29udGFpbnNDaGVjayhpdGVtKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcHVibGljIHZvaWQgQ29weVRvKFRbXSBhcnJheSwgaW50IGFycmF5SW5kZXgpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5SW5kZXggPCAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50T3V0T2ZSYW5n
ZUV4Y2VwdGlvbigiYXJyYXlJbmRleCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoYXJyYXlJbmRleCArIENvdW50ICA+PSBhcnJheS5MZW5ndGgpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24o
Ik5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIGFycmF5IiwgImFycmF5Iik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIHRoaXMpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcnJheVthcnJheUluZGV4KytdID0gaXRl
bTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1Ymxp
YyBJRW51bWVyYXRvcjxUPiBHZXRFbnVtZXJhdG9yKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcGFyZW50Lmxpc3QuU2VsZWN0KHByb2plY3Rpb24pLkdldEVudW1lcmF0
b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIGJvb2wgUmVtb3ZlKFQg
aXRlbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9y
dGVkRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIElFbnVtZXJhdG9y
IElFbnVtZXJhYmxlLkdldEVudW1lcmF0b3IoKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBHZXRFbnVtZXJhdG9yKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHB1YmxpYyB2b2lkIENvcHlUbyhBcnJheSBhcnJheSwgaW50IGluZGV4KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKCJp
bmRleCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggKyBD
b3VudCA+PSBhcnJheS5MZW5ndGgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oIk5vdCBlbm91Z2ggc3BhY2UgaW4gdGhl
IGFycmF5IiwgImFycmF5Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZv
cmVhY2ggKHZhciBpdGVtIGluIHRoaXMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBhcnJheS5TZXRWYWx1ZShpdGVtLCBpbmRleCsrKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmL0NvbGxlY3Rpb25zL1JlYWRPbmx5RGljdGlvbmFyeS5jcyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3No
YXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvQ29sbGVjdGlvbnMvUmVhZE9ubHlEaWN0aW9uYXJ5LmNz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODUzMGEyOWE4NDZlNGZmODJkYTIzMzZh
MjdkODhiYWViNjIxZjIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvQ29sbGVjdGlvbnMvUmVhZE9ubHlEaWN0
aW9uYXJ5LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLSNyZWdpb24gQ29weXJp
Z2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsK
LXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotCi1uYW1lc3BhY2UgR29vZ2xlLlBy
b3RvYnVmLkNvbGxlY3Rpb25zCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBSZWFkLW9u
bHkgd3JhcHBlciBhcm91bmQgYW5vdGhlciBkaWN0aW9uYXJ5LgotICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgaW50ZXJuYWwgc2VhbGVkIGNsYXNzIFJlYWRPbmx5RGljdGlvbmFyeTxUS2V5LCBUVmFs
dWU+IDogSURpY3Rpb25hcnk8VEtleSwgVFZhbHVlPgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBy
ZWFkb25seSBJRGljdGlvbmFyeTxUS2V5LCBUVmFsdWU+IHdyYXBwZWQ7Ci0KLSAgICAgICAgcHVi
bGljIFJlYWRPbmx5RGljdGlvbmFyeShJRGljdGlvbmFyeTxUS2V5LCBUVmFsdWU+IHdyYXBwZWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMud3JhcHBlZCA9IHdyYXBwZWQ7Ci0gICAgICAg
IH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBBZGQoVEtleSBrZXksIFRWYWx1ZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sIENvbnRhaW5zS2V5KFRLZXkga2V5
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gd3JhcHBlZC5Db250YWluc0tleShrZXkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIElDb2xsZWN0aW9uPFRLZXk+IEtleXMKLSAg
ICAgICAgewotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHdyYXBwZWQuS2V5czsgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2wgUmVtb3ZlKFRLZXkga2V5KQotICAgICAgICB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2wgVHJ5R2V0VmFsdWUoVEtleSBrZXksIG91dCBUVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLlRyeUdldFZh
bHVlKGtleSwgb3V0IHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBJQ29sbGVj
dGlvbjxUVmFsdWU+IFZhbHVlcwotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQgeyByZXR1cm4g
d3JhcHBlZC5WYWx1ZXM7IH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBUVmFsdWUgdGhp
c1tUS2V5IGtleV0KLSAgICAgICAgewotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIHdyYXBwZWRb
a2V5XTsgfQotICAgICAgICAgICAgc2V0IHsgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNl
cHRpb24oKTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgQWRkKEtleVZhbHVl
UGFpcjxUS2V5LCBUVmFsdWU+IGl0ZW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5l
dyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJs
aWMgdm9pZCBDbGVhcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlk
T3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbCBD
b250YWlucyhLZXlWYWx1ZVBhaXI8VEtleSwgVFZhbHVlPiBpdGVtKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gd3JhcHBlZC5Db250YWlucyhpdGVtKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHB1YmxpYyB2b2lkIENvcHlUbyhLZXlWYWx1ZVBhaXI8VEtleSwgVFZhbHVlPltdIGFycmF5
LCBpbnQgYXJyYXlJbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgd3JhcHBlZC5Db3B5VG8o
YXJyYXksIGFycmF5SW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBDb3Vu
dAotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQgeyByZXR1cm4gd3JhcHBlZC5Db3VudDsgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2wgSXNSZWFkT25seQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnZXQgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVi
bGljIGJvb2wgUmVtb3ZlKEtleVZhbHVlUGFpcjxUS2V5LCBUVmFsdWU+IGl0ZW0pCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgSUVudW1lcmF0b3I8S2V5VmFsdWVQYWlyPFRLZXks
IFRWYWx1ZT4+IEdldEVudW1lcmF0b3IoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
d3JhcHBlZC5HZXRFbnVtZXJhdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBJRW51bWVyYXRv
ciBJRW51bWVyYWJsZS5HZXRFbnVtZXJhdG9yKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICgoSUVudW1lcmFibGUpIHdyYXBwZWQpLkdldEVudW1lcmF0b3IoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb2JqKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gd3JhcHBlZC5FcXVhbHMob2JqKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gd3JhcHBlZC5HZXRIYXNoQ29kZSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiB3cmFwcGVkLlRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Q
cm90b2J1Zi9Db2xsZWN0aW9ucy9SZXBlYXRlZEZpZWxkLmNzIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Q
cm90b2J1Zi9Db2xsZWN0aW9ucy9SZXBlYXRlZEZpZWxkLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMWRiODU2YzljODAwOGZiMzBhYWZkNThhYTU4M2ZhMWI2NzFkNWYwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYvQ29sbGVjdGlvbnMvUmVwZWF0ZWRGaWVsZC5jcworKysgL2Rldi9udWxsCkBA
IC0xLDU2OCArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBT
eXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlv
bnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UZXh0OwotCi1uYW1l
c3BhY2UgR29vZ2xlLlByb3RvYnVmLkNvbGxlY3Rpb25zCi17Ci0gICAgLy8vIDxzdW1tYXJ5Pgot
ICAgIC8vLyBUaGUgY29udGVudHMgb2YgYSByZXBlYXRlZCBmaWVsZDogZXNzZW50aWFsbHksIGEg
Y29sbGVjdGlvbiB3aXRoIHNvbWUgZXh0cmEKLSAgICAvLy8gcmVzdHJpY3Rpb25zIChubyBudWxs
IHZhbHVlcykgYW5kIGNhcGFiaWxpdGllcyAoZGVlcCBjbG9uaW5nKS4KLSAgICAvLy8gPC9zdW1t
YXJ5PgotICAgIC8vLyA8cmVtYXJrcz4KLSAgICAvLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vz
IG5vdCBnZW5lcmFsbHkgcHJvaGliaXQgdGhlIHVzZSBvZiB0eXBlcyB3aGljaCBhcmUgbm90Ci0g
ICAgLy8vIHN1cHBvcnRlZCBieSBQcm90b2NvbCBCdWZmZXJzIGJ1dCBub3IgZG9lcyBpdCBndWFy
YW50ZWUgdGhhdCBhbGwgb3BlcmF0aW9ucyB3aWxsIHdvcmsgaW4gc3VjaCBjYXNlcy4KLSAgICAv
Ly8gPC9yZW1hcmtzPgotICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlQiPlRoZSBlbGVtZW50IHR5
cGUgb2YgdGhlIHJlcGVhdGVkIGZpZWxkLjwvdHlwZXBhcmFtPgotICAgIHB1YmxpYyBzZWFsZWQg
Y2xhc3MgUmVwZWF0ZWRGaWVsZDxUPiA6IElMaXN0PFQ+LCBJTGlzdCwgSURlZXBDbG9uZWFibGU8
UmVwZWF0ZWRGaWVsZDxUPj4sIElFcXVhdGFibGU8UmVwZWF0ZWRGaWVsZDxUPj4KLSAgICB7Ci0g
ICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRbXSBFbXB0eUFycmF5ID0gbmV3IFRbMF07
Ci0gICAgICAgIHByaXZhdGUgY29uc3QgaW50IE1pbkFycmF5U2l6ZSA9IDg7Ci0KLSAgICAgICAg
cHJpdmF0ZSBUW10gYXJyYXkgPSBFbXB0eUFycmF5OwotICAgICAgICBwcml2YXRlIGludCBjb3Vu
dCA9IDA7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIGRl
ZXAgY2xvbmUgb2YgdGhpcyByZXBlYXRlZCBmaWVsZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gSWYgdGhlIGZpZWxkIHR5cGUgaXMK
LSAgICAgICAgLy8vIGEgbWVzc2FnZSB0eXBlLCBlYWNoIGVsZW1lbnQgaXMgYWxzbyBjbG9uZWQ7
IG90aGVyd2lzZSwgaXQgaXMKLSAgICAgICAgLy8vIGFzc3VtZWQgdGhhdCB0aGUgZmllbGQgdHlw
ZSBpcyBwcmltaXRpdmUgKGluY2x1ZGluZyBzdHJpbmcgYW5kCi0gICAgICAgIC8vLyBieXRlcywg
Ym90aCBvZiB3aGljaCBhcmUgaW1tdXRhYmxlKSBhbmQgc28gYSBzaW1wbGUgY29weSBpcwotICAg
ICAgICAvLy8gZXF1aXZhbGVudCB0byBhIGRlZXAgY2xvbmUuCi0gICAgICAgIC8vLyA8L3JlbWFy
a3M+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIGRlZXAgY2xvbmUgb2YgdGhpcyByZXBlYXRlZCBm
aWVsZC48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBSZXBlYXRlZEZpZWxkPFQ+IENsb25lKCkK
LSAgICAgICAgewotICAgICAgICAgICAgUmVwZWF0ZWRGaWVsZDxUPiBjbG9uZSA9IG5ldyBSZXBl
YXRlZEZpZWxkPFQ+KCk7Ci0gICAgICAgICAgICBpZiAoYXJyYXkgIT0gRW1wdHlBcnJheSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjbG9uZS5hcnJheSA9IChUW10pYXJyYXkuQ2xv
bmUoKTsKLSAgICAgICAgICAgICAgICBJRGVlcENsb25lYWJsZTxUPltdIGNsb25lYWJsZUFycmF5
ID0gY2xvbmUuYXJyYXkgYXMgSURlZXBDbG9uZWFibGU8VD5bXTsKLSAgICAgICAgICAgICAgICBp
ZiAoY2xvbmVhYmxlQXJyYXkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUuYXJyYXlbaV0gPSBjbG9uZWFi
bGVBcnJheVtpXS5DbG9uZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xvbmUuY291bnQgPSBjb3VudDsKLSAg
ICAgICAgICAgIHJldHVybiBjbG9uZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAgICAgLy8vIEFkZHMgdGhlIGVudHJpZXMgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgc3Ry
ZWFtLCBkZWNvZGluZyB0aGVtIHdpdGggdGhlIHNwZWNpZmllZCBjb2RlYy4KLSAgICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJpbnB1dCI+VGhlIGlucHV0IHN0
cmVhbSB0byByZWFkIGZyb20uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjb2Rl
YyI+VGhlIGNvZGVjIHRvIHVzZSBpbiBvcmRlciB0byByZWFkIGVhY2ggZW50cnkuPC9wYXJhbT4K
LSAgICAgICAgcHVibGljIHZvaWQgQWRkRW50cmllc0Zyb20oQ29kZWRJbnB1dFN0cmVhbSBpbnB1
dCwgRmllbGRDb2RlYzxUPiBjb2RlYykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETzog
SW5saW5lIHNvbWUgb2YgdGhlIEFkZCBjb2RlLCBzbyB3ZSBjYW4gYXZvaWQgY2hlY2tpbmcgdGhl
IHNpemUgb24gZXZlcnkKLSAgICAgICAgICAgIC8vIGl0ZXJhdGlvbi4KLSAgICAgICAgICAgIHVp
bnQgdGFnID0gaW5wdXQuTGFzdFRhZzsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBjb2RlYy5W
YWx1ZVJlYWRlcjsKLSAgICAgICAgICAgIC8vIE5vbi1udWxsYWJsZSB2YWx1ZSB0eXBlcyBjYW4g
YmUgcGFja2VkIG9yIG5vdC4KLSAgICAgICAgICAgIGlmIChGaWVsZENvZGVjPFQ+LklzUGFja2Vk
UmVwZWF0ZWRGaWVsZCh0YWcpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBs
ZW5ndGggPSBpbnB1dC5SZWFkTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+
IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgb2xkTGltaXQg
PSBpbnB1dC5QdXNoTGltaXQobGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFp
bnB1dC5SZWFjaGVkTGltaXQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFkZChyZWFkZXIoaW5wdXQpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBpbnB1dC5Qb3BMaW1pdChvbGRMaW1pdCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIC8vIEVtcHR5IHBhY2tlZCBmaWVsZC4gT2RkLCBidXQgdmFs
aWQgLSBqdXN0IGlnbm9yZS4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBOb3QgcGFja2VkLi4uIChwb3NzaWJseSBub3Qg
cGFja2FibGUpCi0gICAgICAgICAgICAgICAgZG8KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEFkZChyZWFkZXIoaW5wdXQpKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxl
IChpbnB1dC5NYXliZUNvbnN1bWVUYWcodGFnKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDYWxjdWxhdGVzIHRoZSBzaXpl
IG9mIHRoaXMgY29sbGVjdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gY29kZWMuCi0gICAgICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY29kZWMiPlRoZSBjb2RlYyB0
byB1c2Ugd2hlbiBlbmNvZGluZyBlYWNoIGZpZWxkLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0
dXJucz5UaGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgd3JpdHRlbiB0byBhIDxzZWUg
Y3JlZj0iQ29kZWRPdXRwdXRTdHJlYW0iLz4gYnkgPHNlZSBjcmVmPSJXcml0ZVRvIi8+LAotICAg
ICAgICAvLy8gdXNpbmcgdGhlIHNhbWUgY29kZWMuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMg
aW50IENhbGN1bGF0ZVNpemUoRmllbGRDb2RlYzxUPiBjb2RlYykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGNvdW50ID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1aW50IHRhZyA9IGNvZGVjLlRhZzsK
LSAgICAgICAgICAgIGlmIChjb2RlYy5QYWNrZWRSZXBlYXRlZEZpZWxkKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGludCBkYXRhU2l6ZSA9IENhbGN1bGF0ZVBhY2tlZERhdGFTaXpl
KGNvZGVjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0
ZVJhd1ZhcmludDMyU2l6ZSh0YWcpICsKLSAgICAgICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRT
dHJlYW0uQ29tcHV0ZUxlbmd0aFNpemUoZGF0YVNpemUpICsKLSAgICAgICAgICAgICAgICAgICAg
ZGF0YVNpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdmFyIHNpemVDYWxjdWxhdG9yID0gY29kZWMuVmFsdWVTaXplQ2Fs
Y3VsYXRvcjsKLSAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IGNvdW50ICogQ29kZWRPdXRwdXRT
dHJlYW0uQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZSh0YWcpOwotICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHNpemUgKz0gc2l6ZUNhbGN1bGF0b3IoYXJyYXlbaV0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHByaXZhdGUgaW50IENhbGN1bGF0ZVBhY2tlZERhdGFTaXplKEZpZWxk
Q29kZWM8VD4gY29kZWMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaXhlZFNpemUgPSBj
b2RlYy5GaXhlZFNpemU7Ci0gICAgICAgICAgICBpZiAoZml4ZWRTaXplID09IDApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGNhbGN1bGF0b3IgPSBjb2RlYy5WYWx1ZVNpemVD
YWxjdWxhdG9yOwotICAgICAgICAgICAgICAgIGludCB0bXAgPSAwOwotICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRtcCArPSBjYWxjdWxhdG9yKGFycmF5W2ldKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZml4ZWRT
aXplICogQ291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgY29sbGVjdGlv
biB0byB0aGUgZ2l2ZW4gPHNlZSBjcmVmPSJDb2RlZE91dHB1dFN0cmVhbSIvPiwKLSAgICAgICAg
Ly8vIGVuY29kaW5nIGVhY2ggdmFsdWUgdXNpbmcgdGhlIHNwZWNpZmllZCBjb2RlYy4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJvdXRwdXQiPlRoZSBv
dXRwdXQgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFt
ZT0iY29kZWMiPlRoZSBjb2RlYyB0byB1c2Ugd2hlbiBlbmNvZGluZyBlYWNoIHZhbHVlLjwvcGFy
YW0+Ci0gICAgICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8oQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0
LCBGaWVsZENvZGVjPFQ+IGNvZGVjKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY291bnQg
PT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gY29kZWMuVmFsdWVXcml0ZXI7Ci0gICAgICAg
ICAgICB2YXIgdGFnID0gY29kZWMuVGFnOwotICAgICAgICAgICAgaWYgKGNvZGVjLlBhY2tlZFJl
cGVhdGVkRmllbGQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gUGFja2VkIHBy
aW1pdGl2ZSB0eXBlCi0gICAgICAgICAgICAgICAgdWludCBzaXplID0gKHVpbnQpQ2FsY3VsYXRl
UGFja2VkRGF0YVNpemUoY29kZWMpOwotICAgICAgICAgICAgICAgIG91dHB1dC5Xcml0ZVRhZyh0
YWcpOwotICAgICAgICAgICAgICAgIG91dHB1dC5Xcml0ZVJhd1ZhcmludDMyKHNpemUpOwotICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlcihvdXRwdXQsIGFycmF5W2ldKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTm90IHBhY2tlZDogYSBzaW1wbGUgdGFnL3ZhbHVl
IHBhaXIgZm9yIGVhY2ggdmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIGNvZGVj
LldyaXRlVGFnQW5kVmFsdWUsIGFzIHRoYXQgb21pdHMgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0LldyaXRlVGFnKHRhZyk7Ci0gICAgICAgICAg
ICAgICAgICAgIHdyaXRlcihvdXRwdXQsIGFycmF5W2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgRW5zdXJlU2l6
ZShpbnQgc2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFycmF5Lkxlbmd0aCA8IHNp
emUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IE1hdGguTWF4KHNpemUs
IE1pbkFycmF5U2l6ZSk7Ci0gICAgICAgICAgICAgICAgaW50IG5ld1NpemUgPSBNYXRoLk1heChh
cnJheS5MZW5ndGggKiAyLCBzaXplKTsKLSAgICAgICAgICAgICAgICB2YXIgdG1wID0gbmV3IFRb
bmV3U2l6ZV07Ci0gICAgICAgICAgICAgICAgQXJyYXkuQ29weShhcnJheSwgMCwgdG1wLCAwLCBh
cnJheS5MZW5ndGgpOwotICAgICAgICAgICAgICAgIGFycmF5ID0gdG1wOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQWRkcyB0
aGUgc3BlY2lmaWVkIGl0ZW0gdG8gdGhlIGNvbGxlY3Rpb24uCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaXRlbSI+VGhlIGl0ZW0gdG8gYWRkLjwvcGFy
YW0+Ci0gICAgICAgIHB1YmxpYyB2b2lkIEFkZChUIGl0ZW0pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChpdGVtID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbigiaXRlbSIpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgRW5zdXJlU2l6ZShjb3VudCArIDEpOwotICAgICAgICAgICAgYXJyYXlbY291bnQr
K10gPSBpdGVtOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAv
Ly8gUmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSB0aGUgY29sbGVjdGlvbi4KLSAgICAgICAgLy8vIDwv
c3VtbWFyeT4KLSAgICAgICAgcHVibGljIHZvaWQgQ2xlYXIoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBhcnJheSA9IEVtcHR5QXJyYXk7Ci0gICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBEZXRlcm1pbmVzIHdoZXRo
ZXIgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5zIHRoZSBnaXZlbiBpdGVtLgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Iml0ZW0iPlRoZSBpdGVtIHRvIGZp
bmQuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPjxjPnRydWU8L2M+IGlmIHRoaXMgY29s
bGVjdGlvbiBjb250YWlucyB0aGUgZ2l2ZW4gaXRlbTsgPGM+ZmFsc2U8L2M+IG90aGVyd2lzZS48
L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBib29sIENvbnRhaW5zKFQgaXRlbSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIEluZGV4T2YoaXRlbSkgIT0gLTE7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb3BpZXMgdGhpcyBjb2xsZWN0aW9u
IHRvIHRoZSBnaXZlbiBhcnJheS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8v
IDxwYXJhbSBuYW1lPSJhcnJheSI+VGhlIGFycmF5IHRvIGNvcHkgdG8uPC9wYXJhbT4KLSAgICAg
ICAgLy8vIDxwYXJhbSBuYW1lPSJhcnJheUluZGV4Ij5UaGUgZmlyc3QgaW5kZXggb2YgdGhlIGFy
cmF5IHRvIGNvcHkgdG8uPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgQ29weVRvKFRbXSBh
cnJheSwgaW50IGFycmF5SW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFycmF5LkNvcHko
dGhpcy5hcnJheSwgMCwgYXJyYXksIGFycmF5SW5kZXgsIGNvdW50KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBp
dGVtIGZyb20gdGhlIGNvbGxlY3Rpb24KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
Ly8vIDxwYXJhbSBuYW1lPSJpdGVtIj5UaGUgaXRlbSB0byByZW1vdmUuPC9wYXJhbT4KLSAgICAg
ICAgLy8vIDxyZXR1cm5zPjxjPnRydWU8L2M+IGlmIHRoZSBpdGVtIHdhcyBmb3VuZCBhbmQgcmVt
b3ZlZDsgPGM+ZmFsc2U8L2M+IG90aGVyd2lzZS48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBi
b29sIFJlbW92ZShUIGl0ZW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IElu
ZGV4T2YoaXRlbSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSAgICAgICAgICAg
IAotICAgICAgICAgICAgQXJyYXkuQ29weShhcnJheSwgaW5kZXggKyAxLCBhcnJheSwgaW5kZXgs
IGNvdW50IC0gaW5kZXggLSAxKTsKLSAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICBh
cnJheVtjb3VudF0gPSBkZWZhdWx0KFQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRzIHRoZSBudW1i
ZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBjb2xsZWN0aW9uLgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgaW50IENvdW50IHsgZ2V0IHsgcmV0dXJuIGNvdW50
OyB9IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRzIGEgdmFsdWUg
aW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb2xsZWN0aW9uIGlzIHJlYWQtb25seS4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGJvb2wgSXNSZWFkT25seSB7IGdldCB7IHJl
dHVybiBmYWxzZTsgfSB9Ci0KLSAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgb3ZlcmxvYWQg
YW5kIGp1c3QgaGFuZGxlIGl0IGluIHRoZSBvbmUgYmVsb3csIGF0IGV4ZWN1dGlvbiB0aW1lPwot
Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEFkZHMgYWxsIG9mIHRoZSBzcGVj
aWZpZWQgdmFsdWVzIGludG8gdGhpcyBjb2xsZWN0aW9uLgotICAgICAgICAvLy8gPC9zdW1tYXJ5
PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlcyI+VGhlIHZhbHVlcyB0byBhZGQgdG8g
dGhpcyBjb2xsZWN0aW9uLjwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyB2b2lkIEFkZChSZXBlYXRl
ZEZpZWxkPFQ+IHZhbHVlcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZhbHVlcyA9PSBu
dWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE51
bGxFeGNlcHRpb24oInZhbHVlcyIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRW5zdXJl
U2l6ZShjb3VudCArIHZhbHVlcy5jb3VudCk7Ci0gICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQg
YWxsIHRoZSB2YWx1ZXMgd2lsbCBiZSB2YWxpZCwgYmVjYXVzZSBpdCdzIGEgUmVwZWF0ZWRGaWVs
ZC4KLSAgICAgICAgICAgIEFycmF5LkNvcHkodmFsdWVzLmFycmF5LCAwLCBhcnJheSwgY291bnQs
IHZhbHVlcy5jb3VudCk7Ci0gICAgICAgICAgICBjb3VudCArPSB2YWx1ZXMuY291bnQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBZGRzIGFsbCBvZiB0
aGUgc3BlY2lmaWVkIHZhbHVlcyBpbnRvIHRoaXMgY29sbGVjdGlvbi4KLSAgICAgICAgLy8vIDwv
c3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZXMiPlRoZSB2YWx1ZXMgdG8g
YWRkIHRvIHRoaXMgY29sbGVjdGlvbi48L3BhcmFtPgotICAgICAgICBwdWJsaWMgdm9pZCBBZGQo
SUVudW1lcmFibGU8VD4gdmFsdWVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmFsdWVz
ID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3Vt
ZW50TnVsbEV4Y2VwdGlvbigidmFsdWVzIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAv
LyBUT0RPOiBDaGVjayBmb3IgSUNvbGxlY3Rpb24gYW5kIGdldCB0aGUgQ291bnQsIHRvIG9wdGlt
aXplPwotICAgICAgICAgICAgZm9yZWFjaCAoVCBpdGVtIGluIHZhbHVlcykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBBZGQoaXRlbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIGFuIGVudW1lcmF0
b3IgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBjb2xsZWN0aW9uLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICAvLy8gPHJldHVybnM+Ci0gICAgICAgIC8vLyBBbiBlbnVtZXJhdG9y
IHRoYXQgY2FuIGJlIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjb2xsZWN0aW9uLgotICAg
ICAgICAvLy8gPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgSUVudW1lcmF0b3I8VD4gR2V0RW51
bWVyYXRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5aWVsZCByZXR1cm4gYXJy
YXlbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgICAgIC8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCA8c2VlIGNyZWY9
IlN5c3RlbS5PYmplY3QiIC8+LCBpcyBlcXVhbCB0byB0aGlzIGluc3RhbmNlLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im9iaiI+VGhlIDxzZWUgY3Jl
Zj0iU3lzdGVtLk9iamVjdCIgLz4gdG8gY29tcGFyZSB3aXRoIHRoaXMgaW5zdGFuY2UuPC9wYXJh
bT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPgotICAgICAgICAvLy8gICA8Yz50cnVlPC9jPiBpZiB0
aGUgc3BlY2lmaWVkIDxzZWUgY3JlZj0iU3lzdGVtLk9iamVjdCIgLz4gaXMgZXF1YWwgdG8gdGhp
cyBpbnN0YW5jZTsgb3RoZXJ3aXNlLCA8Yz5mYWxzZTwvYz4uCi0gICAgICAgIC8vLyA8L3JldHVy
bnM+Ci0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb2JqKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRXF1YWxzKG9iaiBhcyBSZXBlYXRlZEZpZWxkPFQ+
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVy
bnMgYW4gZW51bWVyYXRvciB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggYSBjb2xsZWN0aW9uLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJldHVybnM+Ci0gICAgICAgIC8vLyBB
biA8c2VlIGNyZWY9IlQ6U3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhdG9yIiAvPiBvYmplY3Qg
dGhhdCBjYW4gYmUgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb24uCi0gICAg
ICAgIC8vLyA8L3JldHVybnM+Ci0gICAgICAgIElFbnVtZXJhdG9yIElFbnVtZXJhYmxlLkdldEVu
dW1lcmF0b3IoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR2V0RW51bWVyYXRvcigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJu
cyBhIGhhc2ggY29kZSBmb3IgdGhpcyBpbnN0YW5jZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgLy8vIDxyZXR1cm5zPgotICAgICAgICAvLy8gQSBoYXNoIGNvZGUgZm9yIHRoaXMg
aW5zdGFuY2UsIHN1aXRhYmxlIGZvciB1c2UgaW4gaGFzaGluZyBhbGdvcml0aG1zIGFuZCBkYXRh
IHN0cnVjdHVyZXMgbGlrZSBhIGhhc2ggdGFibGUuIAotICAgICAgICAvLy8gPC9yZXR1cm5zPgot
ICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IGhhc2ggPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGhhc2ggPSBoYXNoICog
MzEgKyBhcnJheVtpXS5HZXRIYXNoQ29kZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGhhc2g7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBDb21wYXJlcyB0aGlzIHJlcGVhdGVkIGZpZWxkIHdpdGggYW5vdGhlciBmb3IgZXF1YWxp
dHkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib3Ro
ZXIiPlRoZSByZXBlYXRlZCBmaWVsZCB0byBjb21wYXJlIHRoaXMgd2l0aC48L3BhcmFtPgotICAg
ICAgICAvLy8gPHJldHVybnM+PGM+dHJ1ZTwvYz4gaWYgPHBhcmFtcmVmIG5hbWU9Im90aGVyIi8+
IHJlZmVycyB0byBhbiBlcXVhbCByZXBlYXRlZCBmaWVsZDsgPGM+ZmFsc2U8L2M+IG90aGVyd2lz
ZS48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBib29sIEVxdWFscyhSZXBlYXRlZEZpZWxkPFQ+
IG90aGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVy
LCBudWxsKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlz
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChvdGhlci5Db3VudCAhPSB0aGlzLkNvdW50KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIEVxdWFsaXR5Q29tcGFyZXI8VD4gY29tcGFyZXIgPSBFcXVhbGl0eUNvbXBhcmVy
PFQ+LkRlZmF1bHQ7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlci5FcXVhbHMoYXJy
YXlbaV0sIG90aGVyLmFycmF5W2ldKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAgICAgLy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBpdGVtIHdpdGhp
biB0aGUgY29sbGVjdGlvbiwgb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90Ci0gICAgICAgIC8vLyBw
cmVzZW50LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9
Iml0ZW0iPlRoZSBpdGVtIHRvIGZpbmQgaW4gdGhlIGNvbGxlY3Rpb24uPC9wYXJhbT4KLSAgICAg
ICAgLy8vIDxyZXR1cm5zPlRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBpdGVtLCBvciAtMSBp
ZiBpdCBpcyBub3QgZm91bmQuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgaW50IEluZGV4T2Yo
VCBpdGVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24o
Iml0ZW0iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEVxdWFsaXR5Q29tcGFyZXI8VD4g
Y29tcGFyZXIgPSBFcXVhbGl0eUNvbXBhcmVyPFQ+LkRlZmF1bHQ7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbXBhcmVyLkVxdWFscyhhcnJheVtpXSwgaXRlbSkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBJbnNlcnRzIHRoZSBnaXZlbiBpdGVtIGF0IHRoZSBz
cGVjaWZpZWQgaW5kZXguCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFy
YW0gbmFtZT0iaW5kZXgiPlRoZSBpbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGl0ZW0uPC9w
YXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJpdGVtIj5UaGUgaXRlbSB0byBpbnNlcnQu
PC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgSW5zZXJ0KGludCBpbmRleCwgVCBpdGVtKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24oIml0ZW0iKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBjb3Vu
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRP
ZlJhbmdlRXhjZXB0aW9uKCJpbmRleCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRW5z
dXJlU2l6ZShjb3VudCArIDEpOwotICAgICAgICAgICAgQXJyYXkuQ29weShhcnJheSwgaW5kZXgs
IGFycmF5LCBpbmRleCArIDEsIGNvdW50IC0gaW5kZXgpOwotICAgICAgICAgICAgYXJyYXlbaW5k
ZXhdID0gaXRlbTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZW1vdmVzIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBp
bmRleC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJp
bmRleCI+VGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGl0ZW0gdG8gcmVtb3ZlLjwvcGFyYW0+
Ci0gICAgICAgIHB1YmxpYyB2b2lkIFJlbW92ZUF0KGludCBpbmRleCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBjb3VudCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKCJp
bmRleCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQXJyYXkuQ29weShhcnJheSwgaW5k
ZXggKyAxLCBhcnJheSwgaW5kZXgsIGNvdW50IC0gaW5kZXggLSAxKTsKLSAgICAgICAgICAgIGNv
dW50LS07Ci0gICAgICAgICAgICBhcnJheVtjb3VudF0gPSBkZWZhdWx0KFQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyBhIHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBvZiB0aGlzIHJlcGVhdGVkIGZpZWxkLCBpbiB0aGUgc2FtZQotICAgICAg
ICAvLy8gd2F5IGFzIGl0IHdvdWxkIGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBkZWZhdWx0IEpTT04g
Zm9ybWF0dGVyLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgb3ZlcnJp
ZGUgc3RyaW5nIFRvU3RyaW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9
IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgICAgIEpzb25Gb3JtYXR0ZXIuRGVmYXVsdC5X
cml0ZUxpc3Qod3JpdGVyLCB0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiB3cml0ZXIuVG9TdHJp
bmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEdl
dHMgb3Igc2V0cyB0aGUgaXRlbSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gVGhlIGVsZW1lbnQg
YXQgdGhlIHNwZWNpZmllZCBpbmRleC4KLSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIC8v
LyA8cGFyYW0gbmFtZT0iaW5kZXgiPlRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBlbGVtZW50
IHRvIGdldCBvciBzZXQuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSBpdGVtIGF0
IHRoZSBzcGVjaWZpZWQgaW5kZXguPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgVCB0aGlzW2lu
dCBpbmRleF0KLSAgICAgICAgewotICAgICAgICAgICAgZ2V0Ci0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBjb3VudCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VF
eGNlcHRpb24oImluZGV4Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiBhcnJheVtpbmRleF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXQKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGNvdW50
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3Vt
ZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbigiaW5kZXgiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKCJ2YWx1ZSIpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgICNyZWdpb24gRXhwbGljaXQgaW50
ZXJmYWNlIGltcGxlbWVudGF0aW9uIGZvciBJTGlzdCBhbmQgSUNvbGxlY3Rpb24uCi0gICAgICAg
IGJvb2wgSUxpc3QuSXNGaXhlZFNpemUgeyBnZXQgeyByZXR1cm4gZmFsc2U7IH0gfQotCi0gICAg
ICAgIHZvaWQgSUNvbGxlY3Rpb24uQ29weVRvKEFycmF5IGFycmF5LCBpbnQgaW5kZXgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFycmF5LkNvcHkodGhpcy5hcnJheSwgMCwgYXJyYXksIGluZGV4
LCBjb3VudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIElDb2xsZWN0aW9uLklzU3luY2hy
b25pemVkIHsgZ2V0IHsgcmV0dXJuIGZhbHNlOyB9IH0KLQotICAgICAgICBvYmplY3QgSUNvbGxl
Y3Rpb24uU3luY1Jvb3QgeyBnZXQgeyByZXR1cm4gdGhpczsgfSB9Ci0KLSAgICAgICAgb2JqZWN0
IElMaXN0LnRoaXNbaW50IGluZGV4XQotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQgeyByZXR1
cm4gdGhpc1tpbmRleF07IH0KLSAgICAgICAgICAgIHNldCB7IHRoaXNbaW5kZXhdID0gKFQpdmFs
dWU7IH0KLSAgICAgICAgfQotCi0gICAgICAgIGludCBJTGlzdC5BZGQob2JqZWN0IHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBZGQoKFQpIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjb3VudCAtIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIElMaXN0LkNvbnRhaW5zKG9i
amVjdCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSBpcyBUICYm
IENvbnRhaW5zKChUKXZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgSUxpc3QuSW5k
ZXhPZihvYmplY3QgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKHZhbHVlIGlz
IFQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBJbmRleE9mKChUKXZhbHVlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgSUxpc3QuSW5zZXJ0KGludCBpbmRleCwgb2JqZWN0IHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBJbnNlcnQoaW5kZXgsIChUKSB2YWx1ZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIElMaXN0LlJlbW92ZShvYmplY3QgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghKHZhbHVlIGlzIFQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlbW92ZSgoVCl2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgI2VuZHJlZ2lvbiAgICAgICAgCi0gICAgfQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Db21wYXRpYmlsaXR5L1Byb3BlcnR5SW5m
b0V4dGVuc2lvbnMuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0NvbXBhdGliaWxpdHkv
UHJvcGVydHlJbmZvRXh0ZW5zaW9ucy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OGE2ZmVmYTc0ZTg4YWI5OWUyODc2ZTcyNjVkY2FhNjgyYzE1ZTY1Yy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVm
L0NvbXBhdGliaWxpdHkvUHJvcGVydHlJbmZvRXh0ZW5zaW9ucy5jcworKysgL2Rldi9udWxsCkBA
IC0xLDY0ICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5
c3RlbS5SZWZsZWN0aW9uOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLkNvbXBhdGliaWxp
dHkKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEV4dGVuc2lvbiBtZXRob2RzIGZvciA8
c2VlIGNyZWY9IlByb3BlcnR5SW5mbyIvPiwgZWZmZWN0aXZlbHkgcHJvdmlkaW5nCi0gICAgLy8v
IHRoZSBmYW1pbGlhciBtZW1iZXJzIGZyb20gcHJldmlvdXMgZGVza3RvcCBmcmFtZXdvcmsgdmVy
c2lvbnMgd2hpbGUKLSAgICAvLy8gdGFyZ2V0aW5nIHRoZSBuZXdlciByZWxlYXNlcywgLk5FVCBD
b3JlIGV0Yy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIGludGVybmFsIHN0YXRpYyBjbGFzcyBQ
cm9wZXJ0eUluZm9FeHRlbnNpb25zCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgIC8vLyBSZXR1cm5zIHRoZSBwdWJsaWMgZ2V0dGVyIG9mIGEgcHJvcGVydHksIG9yIG51bGwg
aWYgdGhlcmUgaXMgbm8gc3VjaCBnZXR0ZXIKLSAgICAgICAgLy8vIChlaXRoZXIgYmVjYXVzZSBp
dCdzIHJlYWQtb25seSwgb3IgdGhlIGdldHRlciBpc24ndCBwdWJsaWMpLgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgTWV0aG9kSW5mbyBHZXRHZXRNZXRo
b2QodGhpcyBQcm9wZXJ0eUluZm8gdGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
bWV0aG9kID0gdGFyZ2V0LkdldE1ldGhvZDsKLSAgICAgICAgICAgIHJldHVybiBtZXRob2QgIT0g
bnVsbCAmJiBtZXRob2QuSXNQdWJsaWMgPyBtZXRob2QgOiBudWxsOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyB0aGUgcHVibGljIHNldHRl
ciBvZiBhIHByb3BlcnR5LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHN1Y2ggc2V0dGVyCi0gICAg
ICAgIC8vLyAoZWl0aGVyIGJlY2F1c2UgaXQncyB3cml0ZS1vbmx5LCBvciB0aGUgc2V0dGVyIGlz
bid0IHB1YmxpYykuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIGludGVybmFsIHN0
YXRpYyBNZXRob2RJbmZvIEdldFNldE1ldGhvZCh0aGlzIFByb3BlcnR5SW5mbyB0YXJnZXQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtZXRob2QgPSB0YXJnZXQuU2V0TWV0aG9kOwotICAg
ICAgICAgICAgcmV0dXJuIG1ldGhvZCAhPSBudWxsICYmIG1ldGhvZC5Jc1B1YmxpYyA/IG1ldGhv
ZCA6IG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmL0NvbXBhdGliaWxpdHkvVHlwZUV4dGVuc2lvbnMuY3MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMv
R29vZ2xlLlByb3RvYnVmL0NvbXBhdGliaWxpdHkvVHlwZUV4dGVuc2lvbnMuY3MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MmEyOWViMGEzMDE4ZDhmNWQ4ZWIzN2Y4M2E1MDMyNmMz
NGQzYmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hh
cnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Db21wYXRpYmlsaXR5L1R5cGVFeHRlbnNpb25zLmNzCisr
KyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGlj
ZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVn
aW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOwotCi1uYW1lc3Bh
Y2UgR29vZ2xlLlByb3RvYnVmLkNvbXBhdGliaWxpdHkKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgLy8vIFByb3ZpZGVzIGV4dGVuc2lvbiBtZXRob2RzIG9uIFR5cGUgdGhhdCBqdXN0IHByb3h5
IHRvIFR5cGVJbmZvLgotICAgIC8vLyBUaGVzZSBhcmUgdXNlZCB0byBzdXBwb3J0IHRoZSBuZXcg
dHlwZSBzeXN0ZW0gZnJvbSAuTkVUIDQuNSwgd2l0aG91dAotICAgIC8vLyBoYXZpbmcgY2FsbHMg
dG8gR2V0VHlwZUluZm8gYWxsIG92ZXIgdGhlIHBsYWNlLiBXaGlsZSB0aGUgbWV0aG9kcyBoZXJl
IGFyZSBtZWFudCB0byBiZQotICAgIC8vLyBicm9hZGx5IGNvbXBhdGlibGUgd2l0aCB0aGUgZGVz
a3RvcCBmcmFtZXdvcmssIHRoZXJlIGFyZSBzb21lIHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhh
dmlvdXIgLSBidXQKLSAgICAvLy8gdGhleSdyZSBub3QgZXhwZWN0ZWQgdG8gYWZmZWN0IG91ciB1
c2UgY2FzZXMuIFdoaWxlIHRoZSBjbGFzcyBpcyBpbnRlcm5hbCwgdGhhdCBzaG91bGQgYmUgZmlu
ZTogd2UgY2FuCi0gICAgLy8vIGV2YWx1YXRlIGVhY2ggbmV3IHVzZSBhcHByb3ByaWF0ZWx5Lgot
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgaW50ZXJuYWwgc3RhdGljIGNsYXNzIFR5cGVFeHRlbnNp
b25zCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHRhcmdldCB0eXBlIGlzIGEgdmFsdWUgdHlwZSwgaW5jbHVkaW5nIGEgbnVsbGFi
bGUgdmFsdWUgdHlwZSBvciBhbiBlbnVtLCBvciBmYWxzZQotICAgICAgICAvLy8gaWYgaXQncyBh
IHJlZmVyZW5jZSB0eXBlIChjbGFzcywgZGVsZWdhdGUsIGludGVyZmFjZSAtIGluY2x1ZGluZyBT
eXN0ZW0uVmFsdWVUeXBlIGFuZCBTeXN0ZW0uRW51bSkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyBib29sIElzVmFsdWVUeXBlKHRoaXMgVHlwZSB0YXJn
ZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXQuR2V0VHlwZUluZm8oKS5J
c1ZhbHVlVHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAg
Ly8vIFNlZSBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3N5c3RlbS50
eXBlLmlzYXNzaWduYWJsZWZyb20KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50
ZXJuYWwgc3RhdGljIGJvb2wgSXNBc3NpZ25hYmxlRnJvbSh0aGlzIFR5cGUgdGFyZ2V0LCBUeXBl
IGMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXQuR2V0VHlwZUluZm8oKS5J
c0Fzc2lnbmFibGVGcm9tKGMuR2V0VHlwZUluZm8oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgdGhl
IHB1YmxpYyBwcm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGdp
dmVuIHR5cGUsCi0gICAgICAgIC8vLyBpbmNsdWRpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3Ig
bnVsbCBpZiB0aGVyZSBpcyBubyBzdWNoIHB1YmxpYyBwcm9wZXJ0eS4KLSAgICAgICAgLy8vIEhl
cmUsICJwdWJsaWMgcHJvcGVydHkiIG1lYW5zIGEgcHJvcGVydHkgd2hlcmUgZWl0aGVyIHRoZSBn
ZXR0ZXIsIG9yIHRoZSBzZXR0ZXIsIG9yIGJvdGgsIGlzIHB1YmxpYy4KLSAgICAgICAgLy8vIDwv
c3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIFByb3BlcnR5SW5mbyBHZXRQcm9wZXJ0
eSh0aGlzIFR5cGUgdGFyZ2V0LCBzdHJpbmcgbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gR2V0RGVjbGFyZWRQcm9wZXJ0eSBvbmx5IHJldHVybnMgcHJvcGVydGllcyBkZWNsYXJlZCBp
biB0aGUgZ2l2ZW4gdHlwZSwgc28gd2UgbmVlZCB0byByZWN1cnNlLgotICAgICAgICAgICAgd2hp
bGUgKHRhcmdldCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciB0
eXBlSW5mbyA9IHRhcmdldC5HZXRUeXBlSW5mbygpOwotICAgICAgICAgICAgICAgIHZhciByZXQg
PSB0eXBlSW5mby5HZXREZWNsYXJlZFByb3BlcnR5KG5hbWUpOwotICAgICAgICAgICAgICAgIGlm
IChyZXQgIT0gbnVsbCAmJiAoKHJldC5DYW5SZWFkICYmIHJldC5HZXRNZXRob2QuSXNQdWJsaWMp
IHx8IChyZXQuQ2FuV3JpdGUgJiYgcmV0LlNldE1ldGhvZC5Jc1B1YmxpYykpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdHlwZUluZm8uQmFzZVR5cGU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUg
cHVibGljIG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGdpdmVu
IHR5cGUsCi0gICAgICAgIC8vLyBpbmNsdWRpbmcgaW5oZXJpdGVkIG1ldGhvZHMuCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFRoaXMg
aGFzIGEgZmV3IGRpZmZlcmVuY2VzIGNvbXBhcmVkIHdpdGggVHlwZS5HZXRNZXRob2QgaW4gdGhl
IGRlc2t0b3AgZnJhbWV3b3JrLiBJdCB3aWxsIHRocm93Ci0gICAgICAgIC8vLyBpZiB0aGVyZSBp
cyBhbiBhbWJpZ3VvdXMgbWF0Y2ggZXZlbiBiZXR3ZWVuIGEgcHJpdmF0ZSBtZXRob2QgYW5kIGEg
cHVibGljIG9uZSwgYnV0IGl0ICp3b24ndCogdGhyb3cKLSAgICAgICAgLy8vIGlmIHRoZXJlIGFy
ZSB0d28gb3ZlcmxvYWRzIGF0IGRpZmZlcmVudCBsZXZlbHMgaW4gdGhlIHR5cGUgaGllcmFyY2h5
IChlLmcuIGNsYXNzIEJhc2UgZGVjbGFyZXMgcHVibGljIHZvaWQgRm9vKGludCkgYW5kCi0gICAg
ICAgIC8vLyBjbGFzcyBDaGlsZCA6IEJhc2UgZGVjbGFyZXMgcHVibGljIHZvaWQgRm9vKGxvbmcp
KS4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0i
QW1iaWd1b3VzTWF0Y2hFeGNlcHRpb24iPk9uZSB0eXBlIGluIHRoZSBoaWVyYXJjaHkgZGVjbGFy
ZWQgbW9yZSB0aGFuIG9uZSBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lPC9leGNlcHRpb24+Ci0g
ICAgICAgIGludGVybmFsIHN0YXRpYyBNZXRob2RJbmZvIEdldE1ldGhvZCh0aGlzIFR5cGUgdGFy
Z2V0LCBzdHJpbmcgbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gR2V0RGVjbGFyZWRN
ZXRob2Qgb25seSByZXR1cm5zIG1ldGhvZHMgZGVjbGFyZWQgaW4gdGhlIGdpdmVuIHR5cGUsIHNv
IHdlIG5lZWQgdG8gcmVjdXJzZS4KLSAgICAgICAgICAgIHdoaWxlICh0YXJnZXQgIT0gbnVsbCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgdHlwZUluZm8gPSB0YXJnZXQuR2V0
VHlwZUluZm8oKTsKLSAgICAgICAgICAgICAgICB2YXIgcmV0ID0gdHlwZUluZm8uR2V0RGVjbGFy
ZWRNZXRob2QobmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCAhPSBudWxsICYmIHJldC5J
c1B1YmxpYykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRhcmdldCA9IHR5cGVJbmZv
LkJhc2VUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0Zp
ZWxkQ29kZWMuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0ZpZWxkQ29kZWMuY3MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MzEzMDg4ODJiMDhlOWZkZDdiNjdiZGQzOGIz
YzQ4YzA2ZDNkYzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9GaWVsZENvZGVjLmNzCisrKyAvZGV2L251bGwK
QEAgLTEsNDczICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5z
ZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5n
IEdvb2dsZS5Qcm90b2J1Zi5Db21wYXRpYmlsaXR5OwotdXNpbmcgR29vZ2xlLlByb3RvYnVmLldl
bGxLbm93blR5cGVzOwotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdl
bmVyaWM7Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYKLXsKLSAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgLy8vIEZhY3RvcnkgbWV0aG9kcyBmb3IgPHNlZSBjcmVmPSJGaWVsZENvZGVje1R9Ii8+
LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBGaWVsZENvZGVj
Ci0gICAgewotICAgICAgICAvLyBUT0RPOiBBdm9pZCB0aGUgImR1YWwgaGl0IiBvZiBsYW1iZGEg
ZXhwcmVzc2lvbnM6IGNyZWF0ZSBvcGVuIGRlbGVnYXRlcyBpbnN0ZWFkLiAoQXQgbGVhc3QgdGVz
dC4uLikKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXRyaWV2ZXMgYSBj
b2RlYyBzdWl0YWJsZSBmb3IgYSBzdHJpbmcgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gdGFnLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InRhZyI+VGhlIHRh
Zy48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSBjb2RlYyBmb3IgdGhlIGdpdmVuIHRh
Zy48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRmllbGRDb2RlYzxzdHJpbmc+IEZv
clN0cmluZyh1aW50IHRhZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWVs
ZENvZGVjPHN0cmluZz4oaW5wdXQgPT4gaW5wdXQuUmVhZFN0cmluZygpLCAob3V0cHV0LCB2YWx1
ZSkgPT4gb3V0cHV0LldyaXRlU3RyaW5nKHZhbHVlKSwgQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0
ZVN0cmluZ1NpemUsIHRhZyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgICAgIC8vLyBSZXRyaWV2ZXMgYSBjb2RlYyBzdWl0YWJsZSBmb3IgYSBieXRlcyBmaWVsZCB3
aXRoIHRoZSBnaXZlbiB0YWcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8
cGFyYW0gbmFtZT0idGFnIj5UaGUgdGFnLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5B
IGNvZGVjIGZvciB0aGUgZ2l2ZW4gdGFnLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRp
YyBGaWVsZENvZGVjPEJ5dGVTdHJpbmc+IEZvckJ5dGVzKHVpbnQgdGFnKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IEZpZWxkQ29kZWM8Qnl0ZVN0cmluZz4oaW5wdXQgPT4gaW5w
dXQuUmVhZEJ5dGVzKCksIChvdXRwdXQsIHZhbHVlKSA9PiBvdXRwdXQuV3JpdGVCeXRlcyh2YWx1
ZSksIENvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVCeXRlc1NpemUsIHRhZyk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXRyaWV2ZXMgYSBjb2RlYyBz
dWl0YWJsZSBmb3IgYSBib29sIGZpZWxkIHdpdGggdGhlIGdpdmVuIHRhZy4KLSAgICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWciPlRoZSB0YWcuPC9wYXJh
bT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgY29kZWMgZm9yIHRoZSBnaXZlbiB0YWcuPC9yZXR1
cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIEZpZWxkQ29kZWM8Ym9vbD4gRm9yQm9vbCh1aW50
IHRhZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWVsZENvZGVjPGJvb2w+
KGlucHV0ID0+IGlucHV0LlJlYWRCb29sKCksIChvdXRwdXQsIHZhbHVlKSA9PiBvdXRwdXQuV3Jp
dGVCb29sKHZhbHVlKSwgQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUJvb2xTaXplLCB0YWcpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0cmlldmVz
IGEgY29kZWMgc3VpdGFibGUgZm9yIGFuIGludDMyIGZpZWxkIHdpdGggdGhlIGdpdmVuIHRhZy4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWciPlRo
ZSB0YWcuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgY29kZWMgZm9yIHRoZSBnaXZl
biB0YWcuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIEZpZWxkQ29kZWM8aW50PiBG
b3JJbnQzMih1aW50IHRhZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWVs
ZENvZGVjPGludD4oaW5wdXQgPT4gaW5wdXQuUmVhZEludDMyKCksIChvdXRwdXQsIHZhbHVlKSA9
PiBvdXRwdXQuV3JpdGVJbnQzMih2YWx1ZSksIENvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQz
MlNpemUsIHRhZyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBSZXRyaWV2ZXMgYSBjb2RlYyBzdWl0YWJsZSBmb3IgYW4gc2ludDMyIGZpZWxkIHdpdGgg
dGhlIGdpdmVuIHRhZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJh
bSBuYW1lPSJ0YWciPlRoZSB0YWcuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgY29k
ZWMgZm9yIHRoZSBnaXZlbiB0YWcuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIEZp
ZWxkQ29kZWM8aW50PiBGb3JTSW50MzIodWludCB0YWcpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBuZXcgRmllbGRDb2RlYzxpbnQ+KGlucHV0ID0+IGlucHV0LlJlYWRTSW50MzIoKSwg
KG91dHB1dCwgdmFsdWUpID0+IG91dHB1dC5Xcml0ZVNJbnQzMih2YWx1ZSksIENvZGVkT3V0cHV0
U3RyZWFtLkNvbXB1dGVTSW50MzJTaXplLCB0YWcpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8v
IDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0cmlldmVzIGEgY29kZWMgc3VpdGFibGUgZm9yIGEg
Zml4ZWQzMiBmaWVsZCB3aXRoIHRoZSBnaXZlbiB0YWcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idGFnIj5UaGUgdGFnLjwvcGFyYW0+Ci0gICAgICAg
IC8vLyA8cmV0dXJucz5BIGNvZGVjIGZvciB0aGUgZ2l2ZW4gdGFnLjwvcmV0dXJucz4KLSAgICAg
ICAgcHVibGljIHN0YXRpYyBGaWVsZENvZGVjPHVpbnQ+IEZvckZpeGVkMzIodWludCB0YWcpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmllbGRDb2RlYzx1aW50PihpbnB1dCA9
PiBpbnB1dC5SZWFkRml4ZWQzMigpLCAob3V0cHV0LCB2YWx1ZSkgPT4gb3V0cHV0LldyaXRlRml4
ZWQzMih2YWx1ZSksIDQsIHRhZyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgICAgIC8vLyBSZXRyaWV2ZXMgYSBjb2RlYyBzdWl0YWJsZSBmb3IgYW4gc2ZpeGVkMzIg
ZmllbGQgd2l0aCB0aGUgZ2l2ZW4gdGFnLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAg
ICAvLy8gPHBhcmFtIG5hbWU9InRhZyI+VGhlIHRhZy48L3BhcmFtPgotICAgICAgICAvLy8gPHJl
dHVybnM+QSBjb2RlYyBmb3IgdGhlIGdpdmVuIHRhZy48L3JldHVybnM+Ci0gICAgICAgIHB1Ymxp
YyBzdGF0aWMgRmllbGRDb2RlYzxpbnQ+IEZvclNGaXhlZDMyKHVpbnQgdGFnKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEZpZWxkQ29kZWM8aW50PihpbnB1dCA9PiBpbnB1dC5S
ZWFkU0ZpeGVkMzIoKSwgKG91dHB1dCwgdmFsdWUpID0+IG91dHB1dC5Xcml0ZVNGaXhlZDMyKHZh
bHVlKSwgNCwgdGFnKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIFJldHJpZXZlcyBhIGNvZGVjIHN1aXRhYmxlIGZvciBhIHVpbnQzMiBmaWVsZCB3aXRo
IHRoZSBnaXZlbiB0YWcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFy
YW0gbmFtZT0idGFnIj5UaGUgdGFnLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIGNv
ZGVjIGZvciB0aGUgZ2l2ZW4gdGFnLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBG
aWVsZENvZGVjPHVpbnQ+IEZvclVJbnQzMih1aW50IHRhZykKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG5ldyBGaWVsZENvZGVjPHVpbnQ+KGlucHV0ID0+IGlucHV0LlJlYWRVSW50MzIo
KSwgKG91dHB1dCwgdmFsdWUpID0+IG91dHB1dC5Xcml0ZVVJbnQzMih2YWx1ZSksIENvZGVkT3V0
cHV0U3RyZWFtLkNvbXB1dGVVSW50MzJTaXplLCB0YWcpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0cmlldmVzIGEgY29kZWMgc3VpdGFibGUgZm9y
IGFuIGludDY0IGZpZWxkIHdpdGggdGhlIGdpdmVuIHRhZy4KLSAgICAgICAgLy8vIDwvc3VtbWFy
eT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWciPlRoZSB0YWcuPC9wYXJhbT4KLSAgICAg
ICAgLy8vIDxyZXR1cm5zPkEgY29kZWMgZm9yIHRoZSBnaXZlbiB0YWcuPC9yZXR1cm5zPgotICAg
ICAgICBwdWJsaWMgc3RhdGljIEZpZWxkQ29kZWM8bG9uZz4gRm9ySW50NjQodWludCB0YWcpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmllbGRDb2RlYzxsb25nPihpbnB1dCA9
PiBpbnB1dC5SZWFkSW50NjQoKSwgKG91dHB1dCwgdmFsdWUpID0+IG91dHB1dC5Xcml0ZUludDY0
KHZhbHVlKSwgQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDY0U2l6ZSwgdGFnKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHJpZXZlcyBhIGNv
ZGVjIHN1aXRhYmxlIGZvciBhbiBzaW50NjQgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gdGFnLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InRhZyI+VGhlIHRh
Zy48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSBjb2RlYyBmb3IgdGhlIGdpdmVuIHRh
Zy48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRmllbGRDb2RlYzxsb25nPiBGb3JT
SW50NjQodWludCB0YWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmllbGRD
b2RlYzxsb25nPihpbnB1dCA9PiBpbnB1dC5SZWFkU0ludDY0KCksIChvdXRwdXQsIHZhbHVlKSA9
PiBvdXRwdXQuV3JpdGVTSW50NjQodmFsdWUpLCBDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU0lu
dDY0U2l6ZSwgdGFnKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIFJldHJpZXZlcyBhIGNvZGVjIHN1aXRhYmxlIGZvciBhIGZpeGVkNjQgZmllbGQgd2l0
aCB0aGUgZ2l2ZW4gdGFnLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBh
cmFtIG5hbWU9InRhZyI+VGhlIHRhZy48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSBj
b2RlYyBmb3IgdGhlIGdpdmVuIHRhZy48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMg
RmllbGRDb2RlYzx1bG9uZz4gRm9yRml4ZWQ2NCh1aW50IHRhZykKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBGaWVsZENvZGVjPHVsb25nPihpbnB1dCA9PiBpbnB1dC5SZWFkRml4
ZWQ2NCgpLCAob3V0cHV0LCB2YWx1ZSkgPT4gb3V0cHV0LldyaXRlRml4ZWQ2NCh2YWx1ZSksIDgs
IHRhZyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBS
ZXRyaWV2ZXMgYSBjb2RlYyBzdWl0YWJsZSBmb3IgYW4gc2ZpeGVkNjQgZmllbGQgd2l0aCB0aGUg
Z2l2ZW4gdGFnLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5h
bWU9InRhZyI+VGhlIHRhZy48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSBjb2RlYyBm
b3IgdGhlIGdpdmVuIHRhZy48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRmllbGRD
b2RlYzxsb25nPiBGb3JTRml4ZWQ2NCh1aW50IHRhZykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG5ldyBGaWVsZENvZGVjPGxvbmc+KGlucHV0ID0+IGlucHV0LlJlYWRTRml4ZWQ2NCgp
LCAob3V0cHV0LCB2YWx1ZSkgPT4gb3V0cHV0LldyaXRlU0ZpeGVkNjQodmFsdWUpLCA4LCB0YWcp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0cmll
dmVzIGEgY29kZWMgc3VpdGFibGUgZm9yIGEgdWludDY0IGZpZWxkIHdpdGggdGhlIGdpdmVuIHRh
Zy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWci
PlRoZSB0YWcuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgY29kZWMgZm9yIHRoZSBn
aXZlbiB0YWcuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIEZpZWxkQ29kZWM8dWxv
bmc+IEZvclVJbnQ2NCh1aW50IHRhZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5l
dyBGaWVsZENvZGVjPHVsb25nPihpbnB1dCA9PiBpbnB1dC5SZWFkVUludDY0KCksIChvdXRwdXQs
IHZhbHVlKSA9PiBvdXRwdXQuV3JpdGVVSW50NjQodmFsdWUpLCBDb2RlZE91dHB1dFN0cmVhbS5D
b21wdXRlVUludDY0U2l6ZSwgdGFnKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAgICAgLy8vIFJldHJpZXZlcyBhIGNvZGVjIHN1aXRhYmxlIGZvciBhIGZsb2F0IGZp
ZWxkIHdpdGggdGhlIGdpdmVuIHRhZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
Ly8vIDxwYXJhbSBuYW1lPSJ0YWciPlRoZSB0YWcuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1
cm5zPkEgY29kZWMgZm9yIHRoZSBnaXZlbiB0YWcuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMg
c3RhdGljIEZpZWxkQ29kZWM8ZmxvYXQ+IEZvckZsb2F0KHVpbnQgdGFnKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IEZpZWxkQ29kZWM8ZmxvYXQ+KGlucHV0ID0+IGlucHV0LlJl
YWRGbG9hdCgpLCAob3V0cHV0LCB2YWx1ZSkgPT4gb3V0cHV0LldyaXRlRmxvYXQodmFsdWUpLCBD
b2RlZE91dHB1dFN0cmVhbS5Db21wdXRlRmxvYXRTaXplLCB0YWcpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0cmlldmVzIGEgY29kZWMgc3VpdGFi
bGUgZm9yIGEgZG91YmxlIGZpZWxkIHdpdGggdGhlIGdpdmVuIHRhZy4KLSAgICAgICAgLy8vIDwv
c3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWciPlRoZSB0YWcuPC9wYXJhbT4K
LSAgICAgICAgLy8vIDxyZXR1cm5zPkEgY29kZWMgZm9yIHRoZSBnaXZlbiB0YWcuPC9yZXR1cm5z
PgotICAgICAgICBwdWJsaWMgc3RhdGljIEZpZWxkQ29kZWM8ZG91YmxlPiBGb3JEb3VibGUodWlu
dCB0YWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmllbGRDb2RlYzxkb3Vi
bGU+KGlucHV0ID0+IGlucHV0LlJlYWREb3VibGUoKSwgKG91dHB1dCwgdmFsdWUpID0+IG91dHB1
dC5Xcml0ZURvdWJsZSh2YWx1ZSksIENvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVEb3VibGVTaXpl
LCB0YWcpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRW51bXMgYXJlIHRyaWNreS4gV2UgY2Fu
IHByb2JhYmx5IHVzZSBleHByZXNzaW9uIHRyZWVzIHRvIGJ1aWxkIHRoZXNlIGRlbGVnYXRlcyBh
dXRvbWF0aWNhbGx5LAotICAgICAgICAvLyBidXQgaXQncyBlYXN5IHRvIGdlbmVyYXRlIHRoZSBj
b2RlIGZvciBpdC4KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXRyaWV2
ZXMgYSBjb2RlYyBzdWl0YWJsZSBmb3IgYW4gZW51bSBmaWVsZCB3aXRoIHRoZSBnaXZlbiB0YWcu
Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idGFnIj5U
aGUgdGFnLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idG9JbnQzMiI+QSBjb252
ZXJzaW9uIGZ1bmN0aW9uIGZyb20gPHNlZSBjcmVmPSJJbnQzMiIvPiB0byB0aGUgZW51bSB0eXBl
LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZnJvbUludDMyIj5BIGNvbnZlcnNp
b24gZnVuY3Rpb24gZnJvbSB0aGUgZW51bSB0eXBlIHRvIDxzZWUgY3JlZj0iSW50MzIiLz4uPC9w
YXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgY29kZWMgZm9yIHRoZSBnaXZlbiB0YWcuPC9y
ZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIEZpZWxkQ29kZWM8VD4gRm9yRW51bTxUPih1
aW50IHRhZywgRnVuYzxULCBpbnQ+IHRvSW50MzIsIEZ1bmM8aW50LCBUPiBmcm9tSW50MzIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmllbGRDb2RlYzxUPihpbnB1dCA9PiBm
cm9tSW50MzIoCi0gICAgICAgICAgICAgICAgaW5wdXQuUmVhZEVudW0oKSksCi0gICAgICAgICAg
ICAgICAgKG91dHB1dCwgdmFsdWUpID0+IG91dHB1dC5Xcml0ZUVudW0odG9JbnQzMih2YWx1ZSkp
LAotICAgICAgICAgICAgICAgIHZhbHVlID0+IENvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVt
U2l6ZSh0b0ludDMyKHZhbHVlKSksIHRhZyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBSZXRyaWV2ZXMgYSBjb2RlYyBzdWl0YWJsZSBmb3IgYSBtZXNz
YWdlIGZpZWxkIHdpdGggdGhlIGdpdmVuIHRhZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWciPlRoZSB0YWcuPC9wYXJhbT4KLSAgICAgICAgLy8v
IDxwYXJhbSBuYW1lPSJwYXJzZXIiPkEgcGFyc2VyIHRvIHVzZSBmb3IgdGhlIG1lc3NhZ2UgdHlw
ZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSBjb2RlYyBmb3IgdGhlIGdpdmVuIHRh
Zy48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRmllbGRDb2RlYzxUPiBGb3JNZXNz
YWdlPFQ+KHVpbnQgdGFnLCBNZXNzYWdlUGFyc2VyPFQ+IHBhcnNlcikgd2hlcmUgVCA6IElNZXNz
YWdlPFQ+Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmllbGRDb2RlYzxUPihp
bnB1dCA9PiB7IFQgbWVzc2FnZSA9IHBhcnNlci5DcmVhdGVUZW1wbGF0ZSgpOyBpbnB1dC5SZWFk
TWVzc2FnZShtZXNzYWdlKTsgcmV0dXJuIG1lc3NhZ2U7IH0sCi0gICAgICAgICAgICAgICAgKG91
dHB1dCwgdmFsdWUpID0+IG91dHB1dC5Xcml0ZU1lc3NhZ2UodmFsdWUpLCBtZXNzYWdlID0+IENv
ZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShtZXNzYWdlKSwgdGFnKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENyZWF0ZXMgYSBjb2Rl
YyBmb3IgYSB3cmFwcGVyIHR5cGUgb2YgYSBjbGFzcyAtIHdoaWNoIG11c3QgYmUgc3RyaW5nIG9y
IEJ5dGVTdHJpbmcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0
aWMgRmllbGRDb2RlYzxUPiBGb3JDbGFzc1dyYXBwZXI8VD4odWludCB0YWcpIHdoZXJlIFQgOiBj
bGFzcwotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbmVzdGVkQ29kZWMgPSBXcmFwcGVyQ29k
ZWNzLkdldENvZGVjPFQ+KCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEZpZWxkQ29kZWM8VD4o
Ci0gICAgICAgICAgICAgICAgaW5wdXQgPT4gV3JhcHBlckNvZGVjcy5SZWFkPFQ+KGlucHV0LCBu
ZXN0ZWRDb2RlYyksCi0gICAgICAgICAgICAgICAgKG91dHB1dCwgdmFsdWUpID0+IFdyYXBwZXJD
b2RlY3MuV3JpdGU8VD4ob3V0cHV0LCB2YWx1ZSwgbmVzdGVkQ29kZWMpLAotICAgICAgICAgICAg
ICAgIHZhbHVlID0+IFdyYXBwZXJDb2RlY3MuQ2FsY3VsYXRlU2l6ZTxUPih2YWx1ZSwgbmVzdGVk
Q29kZWMpLAotICAgICAgICAgICAgICAgIHRhZywKLSAgICAgICAgICAgICAgICBudWxsKTsgLy8g
RGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHdyYXBwZXIKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vIENyZWF0ZXMgYSBjb2RlYyBmb3IgYSB3cmFwcGVyIHR5cGUg
b2YgYSBzdHJ1Y3QgLSB3aGljaCBtdXN0IGJlIEludDMyLCBJbnQ2NCwgVUludDMyLCBVSW50NjQs
Ci0gICAgICAgIC8vLyBCb29sLCBTaW5nbGUgb3IgRG91YmxlLgotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIEZpZWxkQ29kZWM8VD8+IEZvclN0cnVjdFdyYXBw
ZXI8VD4odWludCB0YWcpIHdoZXJlIFQgOiBzdHJ1Y3QKLSAgICAgICAgewotICAgICAgICAgICAg
dmFyIG5lc3RlZENvZGVjID0gV3JhcHBlckNvZGVjcy5HZXRDb2RlYzxUPigpOwotICAgICAgICAg
ICAgcmV0dXJuIG5ldyBGaWVsZENvZGVjPFQ/PigKLSAgICAgICAgICAgICAgICBpbnB1dCA9PiBX
cmFwcGVyQ29kZWNzLlJlYWQ8VD4oaW5wdXQsIG5lc3RlZENvZGVjKSwKLSAgICAgICAgICAgICAg
ICAob3V0cHV0LCB2YWx1ZSkgPT4gV3JhcHBlckNvZGVjcy5Xcml0ZTxUPihvdXRwdXQsIHZhbHVl
LlZhbHVlLCBuZXN0ZWRDb2RlYyksCi0gICAgICAgICAgICAgICAgdmFsdWUgPT4gdmFsdWUgPT0g
bnVsbCA/IDAgOiBXcmFwcGVyQ29kZWNzLkNhbGN1bGF0ZVNpemU8VD4odmFsdWUuVmFsdWUsIG5l
c3RlZENvZGVjKSwKLSAgICAgICAgICAgICAgICB0YWcsCi0gICAgICAgICAgICAgICAgbnVsbCk7
IC8vIERlZmF1bHQgdmFsdWUgZm9yIHRoZSB3cmFwcGVyCi0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBIZWxwZXIgY29kZSB0byBjcmVhdGUgY29kZWNzIGZv
ciB3cmFwcGVyIHR5cGVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJl
bWFya3M+Ci0gICAgICAgIC8vLyBTb21ld2hhdCB1Z2x5IHdpdGggYWxsIHRoZSBzdGF0aWMgbWV0
aG9kcywgYnV0IHRoZSBjb252ZXJzaW9ucyBpbnZvbHZlZCB0by9mcm9tIG51bGxhYmxlIHR5cGVz
IG1ha2UgaXQKLSAgICAgICAgLy8vIHNsaWdodGx5IHRyaWNreSB0byBpbXByb3ZlLiBTbyBsb25n
IGFzIHdlIGtlZXAgdGhlIHB1YmxpYyBBUEkgKEZvckNsYXNzV3JhcHBlciwgRm9yU3RydWN0V3Jh
cHBlcikgaW4gcGxhY2UsCi0gICAgICAgIC8vLyB3ZSBjYW4gcmVmYWN0b3IgbGF0ZXIgaWYgd2Ug
Y29tZSB1cCB3aXRoIHNvbWV0aGluZyBjbGVhbmVyLgotICAgICAgICAvLy8gPC9yZW1hcmtzPgot
ICAgICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBXcmFwcGVyQ29kZWNzCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERpY3Rpb25hcnk8U3lzdGVtLlR5cGUs
IG9iamVjdD4gQ29kZWNzID0gbmV3IERpY3Rpb25hcnk8U3lzdGVtLlR5cGUsIG9iamVjdD4KLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB7IHR5cGVvZihib29sKSwgRm9yQm9vbChXaXJl
Rm9ybWF0Lk1ha2VUYWcoV3JhcHBlcnNSZWZsZWN0aW9uLldyYXBwZXJWYWx1ZUZpZWxkTnVtYmVy
LCBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCkpIH0sCi0gICAgICAgICAgICAgICAgeyB0eXBl
b2YoaW50KSwgRm9ySW50MzIoV2lyZUZvcm1hdC5NYWtlVGFnKFdyYXBwZXJzUmVmbGVjdGlvbi5X
cmFwcGVyVmFsdWVGaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XaXJlVHlwZS5WYXJpbnQpKSB9LAot
ICAgICAgICAgICAgICAgIHsgdHlwZW9mKGxvbmcpLCBGb3JJbnQ2NChXaXJlRm9ybWF0Lk1ha2VU
YWcoV3JhcHBlcnNSZWZsZWN0aW9uLldyYXBwZXJWYWx1ZUZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0
LldpcmVUeXBlLlZhcmludCkpIH0sCi0gICAgICAgICAgICAgICAgeyB0eXBlb2YodWludCksIEZv
clVJbnQzMihXaXJlRm9ybWF0Lk1ha2VUYWcoV3JhcHBlcnNSZWZsZWN0aW9uLldyYXBwZXJWYWx1
ZUZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldpcmVUeXBlLlZhcmludCkpIH0sCi0gICAgICAgICAg
ICAgICAgeyB0eXBlb2YodWxvbmcpLCBGb3JVSW50NjQoV2lyZUZvcm1hdC5NYWtlVGFnKFdyYXBw
ZXJzUmVmbGVjdGlvbi5XcmFwcGVyVmFsdWVGaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XaXJlVHlw
ZS5WYXJpbnQpKSB9LAotICAgICAgICAgICAgICAgIHsgdHlwZW9mKGZsb2F0KSwgRm9yRmxvYXQo
V2lyZUZvcm1hdC5NYWtlVGFnKFdyYXBwZXJzUmVmbGVjdGlvbi5XcmFwcGVyVmFsdWVGaWVsZE51
bWJlciwgV2lyZUZvcm1hdC5XaXJlVHlwZS5GaXhlZDMyKSkgfSwKLSAgICAgICAgICAgICAgICB7
IHR5cGVvZihkb3VibGUpLCBGb3JEb3VibGUoV2lyZUZvcm1hdC5NYWtlVGFnKFdyYXBwZXJzUmVm
bGVjdGlvbi5XcmFwcGVyVmFsdWVGaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XaXJlVHlwZS5GaXhl
ZDY0KSkgfSwKLSAgICAgICAgICAgICAgICB7IHR5cGVvZihzdHJpbmcpLCBGb3JTdHJpbmcoV2ly
ZUZvcm1hdC5NYWtlVGFnKFdyYXBwZXJzUmVmbGVjdGlvbi5XcmFwcGVyVmFsdWVGaWVsZE51bWJl
ciwgV2lyZUZvcm1hdC5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpKSB9LAotICAgICAgICAgICAg
ICAgIHsgdHlwZW9mKEJ5dGVTdHJpbmcpLCBGb3JCeXRlcyhXaXJlRm9ybWF0Lk1ha2VUYWcoV3Jh
cHBlcnNSZWZsZWN0aW9uLldyYXBwZXJWYWx1ZUZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldpcmVU
eXBlLkxlbmd0aERlbGltaXRlZCkpIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBSZXR1cm5zIGEgZmllbGQgY29kZWMgd2hpY2gg
ZWZmZWN0aXZlbHkgd3JhcHMgYSB2YWx1ZSBvZiB0eXBlIFQgaW4gYSBtZXNzYWdlLgotICAgICAg
ICAgICAgLy8vIAotICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgIGludGVy
bmFsIHN0YXRpYyBGaWVsZENvZGVjPFQ+IEdldENvZGVjPFQ+KCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvYmplY3QgdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFDb2RlY3Mu
VHJ5R2V0VmFsdWUodHlwZW9mKFQpLCBvdXQgdmFsdWUpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIklu
dmFsaWQgdHlwZSBhcmd1bWVudCByZXF1ZXN0ZWQgZm9yIHdyYXBwZXIgY29kZWM6ICIgKyB0eXBl
b2YoVCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gKEZpZWxk
Q29kZWM8VD4pIHZhbHVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnRlcm5hbCBz
dGF0aWMgVCBSZWFkPFQ+KENvZGVkSW5wdXRTdHJlYW0gaW5wdXQsIEZpZWxkQ29kZWM8VD4gY29k
ZWMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGxlbmd0aCA9IGlucHV0LlJl
YWRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpbnQgb2xkTGltaXQgPSBpbnB1dC5QdXNoTGlt
aXQobGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIHVpbnQgdGFnOwotICAgICAgICAgICAgICAg
IFQgdmFsdWUgPSBjb2RlYy5EZWZhdWx0VmFsdWU7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCh0
YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAodGFnID09IGNvZGVjLlRhZykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb2RlYy5SZWFkKGlucHV0KTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlucHV0LkNoZWNrUmVhZEVuZE9mU3RyZWFtVGFnKCk7Ci0gICAgICAgICAgICAgICAgaW5w
dXQuUG9wTGltaXQob2xkTGltaXQpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnRlcm5hbCBzdGF0aWMgdm9pZCBXcml0ZTxU
PihDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQsIFQgdmFsdWUsIEZpZWxkQ29kZWM8VD4gY29kZWMp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LldyaXRlTGVuZ3RoKGNvZGVj
LkNhbGN1bGF0ZVNpemVXaXRoVGFnKHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgY29kZWMuV3Jp
dGVUYWdBbmRWYWx1ZShvdXRwdXQsIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaW50ZXJuYWwgIHN0YXRpYyBpbnQgQ2FsY3VsYXRlU2l6ZTxUPihUIHZhbHVlLCBGaWVsZENv
ZGVjPFQ+IGNvZGVjKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBmaWVsZExl
bmd0aCA9IGNvZGVjLkNhbGN1bGF0ZVNpemVXaXRoVGFnKHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUxlbmd0aFNpemUoZmllbGRMZW5ndGgp
ICsgZmllbGRMZW5ndGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgLy8vIDxwYXJhPgotICAgIC8vLyBBbiBlbmNvZGUvZGVjb2RlIHBh
aXIgZm9yIGEgc2luZ2xlIGZpZWxkLiBUaGlzIGVmZmVjdGl2ZWx5IGVuY2Fwc3VsYXRlcwotICAg
IC8vLyBhbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byByZWFkIG9yIHdyaXRlIHRoZSBmaWVs
ZCB2YWx1ZSBmcm9tL3RvIGEgY29kZWQKLSAgICAvLy8gc3RyZWFtLgotICAgIC8vLyA8L3BhcmE+
Ci0gICAgLy8vIDxwYXJhPgotICAgIC8vLyBUaGlzIGNsYXNzIGlzIHB1YmxpYyBhbmQgaGFzIHRv
IGJlIGFzIGl0IGlzIHVzZWQgYnkgZ2VuZXJhdGVkIGNvZGUsIGJ1dCBpdHMgcHVibGljCi0gICAg
Ly8vIEFQSSBpcyB2ZXJ5IGxpbWl0ZWQgLSBqdXN0IHdoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIG5l
ZWRzIHRvIGNhbGwgZGlyZWN0bHkuCi0gICAgLy8vIDwvcGFyYT4KLSAgICAvLy8gPC9zdW1tYXJ5
PgotICAgIC8vLyA8cmVtYXJrcz4KLSAgICAvLy8gVGhpcyBuZXZlciB3cml0ZXMgZGVmYXVsdCB2
YWx1ZXMgdG8gdGhlIHN0cmVhbSwgYW5kIGRvZXMgbm90IGFkZHJlc3MgInBhY2tlZG5lc3MiCi0g
ICAgLy8vIGluIHJlcGVhdGVkIGZpZWxkcyBpdHNlbGYsIG90aGVyIHRoYW4gdG8ga25vdyB3aGV0
aGVyIG9yIG5vdCB0aGUgZmllbGQgKnNob3VsZCogYmUgcGFja2VkLgotICAgIC8vLyA8L3JlbWFy
a3M+Ci0gICAgcHVibGljIHNlYWxlZCBjbGFzcyBGaWVsZENvZGVjPFQ+Ci0gICAgewotICAgICAg
ICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUIERlZmF1bHREZWZhdWx0OwotICAgICAgICBwcml2
YXRlIHN0YXRpYyByZWFkb25seSBib29sIFR5cGVTdXBwb3J0c1BhY2tpbmcgPSB0eXBlb2YoVCku
SXNWYWx1ZVR5cGUoKSAmJiBOdWxsYWJsZS5HZXRVbmRlcmx5aW5nVHlwZSh0eXBlb2YoVCkpID09
IG51bGw7Ci0KLSAgICAgICAgc3RhdGljIEZpZWxkQ29kZWMoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAodHlwZW9mKFQpID09IHR5cGVvZihzdHJpbmcpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIERlZmF1bHREZWZhdWx0ID0gKFQpKG9iamVjdCkiIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZihUKSA9PSB0eXBlb2YoQnl0ZVN0cmluZykp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGVmYXVsdERlZmF1bHQgPSAoVCkob2Jq
ZWN0KUJ5dGVTdHJpbmcuRW1wdHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBPdGhl
cndpc2UgaXQncyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgQ0xSIHR5cGUKLSAgICAgICAgfQot
Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyBib29sIElzUGFja2VkUmVwZWF0ZWRGaWVsZCh1aW50
IHRhZykgPT4KLSAgICAgICAgICAgIFR5cGVTdXBwb3J0c1BhY2tpbmcgJiYgV2lyZUZvcm1hdC5H
ZXRUYWdXaXJlVHlwZSh0YWcpID09IFdpcmVGb3JtYXQuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVk
OwotCi0gICAgICAgIGludGVybmFsIGJvb2wgUGFja2VkUmVwZWF0ZWRGaWVsZCB7IGdldDsgfQot
Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgYSBkZWxlZ2F0ZSB0
byB3cml0ZSBhIHZhbHVlICh1bmNvbmRpdGlvbmFsbHkpIHRvIGEgY29kZWQgb3V0cHV0IHN0cmVh
bS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgQWN0aW9uPENvZGVk
T3V0cHV0U3RyZWFtLCBUPiBWYWx1ZVdyaXRlciB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgdGhlIHNpemUgY2FsY3VsYXRvciBmb3IganVzdCBh
IHZhbHVlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBpbnRlcm5hbCBGdW5jPFQs
IGludD4gVmFsdWVTaXplQ2FsY3VsYXRvciB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAgICAgLy8vIFJldHVybnMgYSBkZWxlZ2F0ZSB0byByZWFkIGEgdmFsdWUgZnJvbSBh
IGNvZGVkIGlucHV0IHN0cmVhbS4gSXQgaXMgYXNzdW1lZCB0aGF0Ci0gICAgICAgIC8vLyB0aGUg
c3RyZWFtIGlzIGFscmVhZHkgcG9zaXRpb25lZCBvbiB0aGUgYXBwcm9wcmlhdGUgdGFnLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBpbnRlcm5hbCBGdW5jPENvZGVkSW5wdXRTdHJl
YW0sIFQ+IFZhbHVlUmVhZGVyIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gUmV0dXJucyB0aGUgZml4ZWQgc2l6ZSBmb3IgYW4gZW50cnksIG9yIDAgaWYgc2l6
ZXMgdmFyeS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgaW50IEZp
eGVkU2l6ZSB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEdl
dHMgdGhlIHRhZyBvZiB0aGUgY29kZWMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IC8vLyA8dmFsdWU+Ci0gICAgICAgIC8vLyBUaGUgdGFnIG9mIHRoZSBjb2RlYy4KLSAgICAgICAg
Ly8vIDwvdmFsdWU+Ci0gICAgICAgIGludGVybmFsIHVpbnQgVGFnIHsgZ2V0OyB9Ci0KLSAgICAg
ICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gRGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBjb2Rl
Yy4gVXN1YWxseSB0aGUgc2FtZSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgdGhlIHNhbWUgdHlwZSwg
YnV0Ci0gICAgICAgIC8vLyBmb3Igc3RyaW5nL0J5dGVTdHJpbmcgd3JhcHBlciBmaWVsZHMgdGhl
IGNvZGVjJ3MgZGVmYXVsdCB2YWx1ZSBpcyBudWxsLCB3aGVyZWFzIGZvcgotICAgICAgICAvLy8g
b3RoZXIgc3RyaW5nL0J5dGVTdHJpbmcgZmllbGRzIGl0J3MgIiIgb3IgQnl0ZVN0cmluZy5FbXB0
eS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDx2YWx1ZT4KLSAgICAgICAg
Ly8vIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjb2RlYydzIHR5cGUuCi0gICAgICAgIC8vLyA8
L3ZhbHVlPgotICAgICAgICBpbnRlcm5hbCBUIERlZmF1bHRWYWx1ZSB7IGdldDsgfQotCi0gICAg
ICAgIHByaXZhdGUgcmVhZG9ubHkgaW50IHRhZ1NpemU7Ci0gICAgICAgIAotICAgICAgICBpbnRl
cm5hbCBGaWVsZENvZGVjKAotICAgICAgICAgICAgICAgIEZ1bmM8Q29kZWRJbnB1dFN0cmVhbSwg
VD4gcmVhZGVyLAotICAgICAgICAgICAgICAgIEFjdGlvbjxDb2RlZE91dHB1dFN0cmVhbSwgVD4g
d3JpdGVyLAotICAgICAgICAgICAgICAgIGludCBmaXhlZFNpemUsCi0gICAgICAgICAgICAgICAg
dWludCB0YWcpIDogdGhpcyhyZWFkZXIsIHdyaXRlciwgXyA9PiBmaXhlZFNpemUsIHRhZykKLSAg
ICAgICAgewotICAgICAgICAgICAgRml4ZWRTaXplID0gZml4ZWRTaXplOwotICAgICAgICB9Ci0K
LSAgICAgICAgaW50ZXJuYWwgRmllbGRDb2RlYygKLSAgICAgICAgICAgIEZ1bmM8Q29kZWRJbnB1
dFN0cmVhbSwgVD4gcmVhZGVyLAotICAgICAgICAgICAgQWN0aW9uPENvZGVkT3V0cHV0U3RyZWFt
LCBUPiB3cml0ZXIsCi0gICAgICAgICAgICBGdW5jPFQsIGludD4gc2l6ZUNhbGN1bGF0b3IsCi0g
ICAgICAgICAgICB1aW50IHRhZykgOiB0aGlzKHJlYWRlciwgd3JpdGVyLCBzaXplQ2FsY3VsYXRv
ciwgdGFnLCBEZWZhdWx0RGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
aW50ZXJuYWwgRmllbGRDb2RlYygKLSAgICAgICAgICAgIEZ1bmM8Q29kZWRJbnB1dFN0cmVhbSwg
VD4gcmVhZGVyLAotICAgICAgICAgICAgQWN0aW9uPENvZGVkT3V0cHV0U3RyZWFtLCBUPiB3cml0
ZXIsCi0gICAgICAgICAgICBGdW5jPFQsIGludD4gc2l6ZUNhbGN1bGF0b3IsCi0gICAgICAgICAg
ICB1aW50IHRhZywKLSAgICAgICAgICAgIFQgZGVmYXVsdFZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBWYWx1ZVJlYWRlciA9IHJlYWRlcjsKLSAgICAgICAgICAgIFZhbHVlV3JpdGVyID0g
d3JpdGVyOwotICAgICAgICAgICAgVmFsdWVTaXplQ2FsY3VsYXRvciA9IHNpemVDYWxjdWxhdG9y
OwotICAgICAgICAgICAgRml4ZWRTaXplID0gMDsKLSAgICAgICAgICAgIFRhZyA9IHRhZzsKLSAg
ICAgICAgICAgIERlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgICAgIHRhZ1Np
emUgPSBDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlUmF3VmFyaW50MzJTaXplKHRhZyk7Ci0gICAg
ICAgICAgICAvLyBEZXRlY3QgcGFja2VkLW5lc3Mgb25jZSwgc28gd2UgY2FuIGNoZWNrIGZvciBp
dCB3aXRoaW4gUmVwZWF0ZWRGaWVsZDxUPi4KLSAgICAgICAgICAgIFBhY2tlZFJlcGVhdGVkRmll
bGQgPSBJc1BhY2tlZFJlcGVhdGVkRmllbGQodGFnKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlIGEgdGFnIGFuZCB0aGUgZ2l2ZW4gdmFsdWUs
ICppZiogdGhlIHZhbHVlIGlzIG5vdCB0aGUgZGVmYXVsdC4KLSAgICAgICAgLy8vIDwvc3VtbWFy
eT4KLSAgICAgICAgcHVibGljIHZvaWQgV3JpdGVUYWdBbmRWYWx1ZShDb2RlZE91dHB1dFN0cmVh
bSBvdXRwdXQsIFQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghSXNEZWZhdWx0
KHZhbHVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXQuV3JpdGVUYWco
VGFnKTsKLSAgICAgICAgICAgICAgICBWYWx1ZVdyaXRlcihvdXRwdXQsIHZhbHVlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IFJlYWRzIGEgdmFsdWUgb2YgdGhlIGNvZGVjIHR5cGUgZnJvbSB0aGUgZ2l2ZW4gPHNlZSBjcmVm
PSJDb2RlZElucHV0U3RyZWFtIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAv
Ly8gPHBhcmFtIG5hbWU9ImlucHV0Ij5UaGUgaW5wdXQgc3RyZWFtIHRvIHJlYWQgZnJvbS48L3Bh
cmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgc3RyZWFt
LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIFQgUmVhZChDb2RlZElucHV0U3RyZWFtIGlucHV0
KSA9PiBWYWx1ZVJlYWRlcihpbnB1dCk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAg
ICAvLy8gQ2FsY3VsYXRlcyB0aGUgc2l6ZSByZXF1aXJlZCB0byB3cml0ZSB0aGUgZ2l2ZW4gdmFs
dWUsIHdpdGggYSB0YWcsCi0gICAgICAgIC8vLyBpZiB0aGUgdmFsdWUgaXMgbm90IHRoZSBkZWZh
dWx0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgaW50IENhbGN1bGF0
ZVNpemVXaXRoVGFnKFQgdmFsdWUpID0+IElzRGVmYXVsdCh2YWx1ZSkgPyAwIDogVmFsdWVTaXpl
Q2FsY3VsYXRvcih2YWx1ZSkgKyB0YWdTaXplOwotCi0gICAgICAgIHByaXZhdGUgYm9vbCBJc0Rl
ZmF1bHQoVCB2YWx1ZSkgPT4gRXF1YWxpdHlDb21wYXJlcjxUPi5EZWZhdWx0LkVxdWFscyh2YWx1
ZSwgRGVmYXVsdFZhbHVlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xl
LlByb3RvYnVmL0ZyYW1ld29ya1BvcnRhYmlsaXR5LmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90
b2J1Zi9GcmFtZXdvcmtQb3J0YWJpbGl0eS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzgwNjBmNmNhOGVlM2RiM2YwNTY1YTZmZTlmYmU4Y2ZjOTI4YzliMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmL0ZyYW1ld29ya1BvcnRhYmlsaXR5LmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBA
QAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcg
U3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3Rv
YnVmCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBDbGFzcyBjb250YWluaW5nIGhlbHBm
dWwgd29ya2Fyb3VuZHMgZm9yIHZhcmlvdXMgcGxhdGZvcm0gY29tcGF0aWJpbGl0eQotICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgaW50ZXJuYWwgc3RhdGljIGNsYXNzIEZyYW1ld29ya1BvcnRhYmls
aXR5Ci0gICAgewotICAgICAgICAvLyBUaGUgdmFsdWUgb2YgUmVnZXhPcHRpb25zLkNvbXBpbGVk
IGlzIDguIFdlIGNhbiB0ZXN0IGZvciB0aGUgcHJlc2VuY2UgYXQKLSAgICAgICAgLy8gZXhlY3V0
aW9uIHRpbWUgdXNpbmcgRW51bS5Jc0RlZmluZWQsIHNvIGEgc2luZ2xlIGJ1aWxkIHdpbGwgZG8g
dGhlIHJpZ2h0IHRoaW5nCi0gICAgICAgIC8vIG9uIGVhY2ggcGxhdGZvcm0uIChSZWdleE9wdGlv
bnMuQ29tcGlsZWQgaXNuJ3Qgc3VwcG9ydGVkIGJ5IFBDTHMuKQotICAgICAgICBpbnRlcm5hbCBz
dGF0aWMgcmVhZG9ubHkgUmVnZXhPcHRpb25zIENvbXBpbGVkUmVnZXhXaGVyZUF2YWlsYWJsZSA9
Ci0gICAgICAgICAgICBFbnVtLklzRGVmaW5lZCh0eXBlb2YoUmVnZXhPcHRpb25zKSwgOCkgPyAo
UmVnZXhPcHRpb25zKTggOiBSZWdleE9wdGlvbnMuTm9uZTsKLSAgICB9Ci19ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9H
b29nbGUuUHJvdG9idWYuY3Nwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Hb29nbGUu
UHJvdG9idWYuY3Nwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGQ5N2RkZjc0
MWEwMmY5MGIzNTdlZDNlOTdlMjNiY2VhYTA4NzFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvR29vZ2xlLlBy
b3RvYnVmLmNzcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi3vu788P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0
LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29m
dC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxD
b25maWd1cmF0aW9uIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRpb24pJyA9PSAnJyAiPkRlYnVn
PC9Db25maWd1cmF0aW9uPgotICAgIDxQbGF0Zm9ybSBDb25kaXRpb249IiAnJChQbGF0Zm9ybSkn
ID09ICcnICI+QW55Q1BVPC9QbGF0Zm9ybT4KLSAgICA8UHJvZHVjdFZlcnNpb24+OS4wLjMwNzI5
PC9Qcm9kdWN0VmVyc2lvbj4KLSAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+
Ci0gICAgPFByb2plY3RHdWlkPns2OTA4QkRDRS1EOTI1LTQzRjMtOTRBQy1BNTMxRTZERjI1OTF9
PC9Qcm9qZWN0R3VpZD4KLSAgICA8T3V0cHV0VHlwZT5MaWJyYXJ5PC9PdXRwdXRUeXBlPgotICAg
IDxBcHBEZXNpZ25lckZvbGRlcj5Qcm9wZXJ0aWVzPC9BcHBEZXNpZ25lckZvbGRlcj4KLSAgICA8
Um9vdE5hbWVzcGFjZT5Hb29nbGUuUHJvdG9idWY8L1Jvb3ROYW1lc3BhY2U+Ci0gICAgPEFzc2Vt
Ymx5TmFtZT5Hb29nbGUuUHJvdG9idWY8L0Fzc2VtYmx5TmFtZT4KLSAgICA8UHJvamVjdFR5cGVH
dWlkcz57Nzg2QzgzMEYtMDdBMS00MDhCLUJEN0YtNkVFMDQ4MDlENkRCfTt7RkFFMDRFQzAtMzAx
Ri0xMUQzLUJGNEItMDBDMDRGNzlFRkJDfTwvUHJvamVjdFR5cGVHdWlkcz4KLSAgICA8VGFyZ2V0
RnJhbWV3b3JrUHJvZmlsZT5Qcm9maWxlMjU5PC9UYXJnZXRGcmFtZXdvcmtQcm9maWxlPgotICAg
IDxUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPnY0LjU8L1RhcmdldEZyYW1ld29ya1ZlcnNpb24+Ci0g
ICAgPEZpbGVBbGlnbm1lbnQ+NTEyPC9GaWxlQWxpZ25tZW50PgotICAgIDxPbGRUb29sc1ZlcnNp
b24+My41PC9PbGRUb29sc1ZlcnNpb24+Ci0gICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9u
PjEwLjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgotICAgIDxOdUdldFBhY2thZ2VJbXBv
cnRTdGFtcD4KLSAgICA8L051R2V0UGFja2FnZUltcG9ydFN0YW1wPgotICA8L1Byb3BlcnR5R3Jv
dXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJyA9PSAnRGVidWd8QW55Q1BVJyAiPgotICAgIDxEZWJ1Z1N5bWJvbHM+dHJ1ZTwvRGVi
dWdTeW1ib2xzPgotICAgIDxEZWJ1Z1R5cGU+ZnVsbDwvRGVidWdUeXBlPgotICAgIDxPcHRpbWl6
ZT5mYWxzZTwvT3B0aW1pemU+Ci0gICAgPE91dHB1dFBhdGg+YmluXERlYnVnPC9PdXRwdXRQYXRo
PgotICAgIDxJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPm9ialxEZWJ1Z1w8L0ludGVybWVkaWF0ZU91
dHB1dFBhdGg+Ci0gICAgPERvY3VtZW50YXRpb25GaWxlPmJpblxEZWJ1Z1xHb29nbGUuUHJvdG9i
dWYueG1sPC9Eb2N1bWVudGF0aW9uRmlsZT4KLSAgICA8Tm9XYXJuPgotICAgIDwvTm9XYXJuPgot
ICAgIDxEZWZpbmVDb25zdGFudHM+REVCVUc7VFJBQ0U8L0RlZmluZUNvbnN0YW50cz4KLSAgICA8
RXJyb3JSZXBvcnQ+cHJvbXB0PC9FcnJvclJlcG9ydD4KLSAgICA8V2FybmluZ0xldmVsPjQ8L1dh
cm5pbmdMZXZlbD4KLSAgICA8Tm9TdGRMaWI+dHJ1ZTwvTm9TdGRMaWI+Ci0gICAgPEdlbmVyYXRl
U2VyaWFsaXphdGlvbkFzc2VtYmxpZXM+T2ZmPC9HZW5lcmF0ZVNlcmlhbGl6YXRpb25Bc3NlbWJs
aWVzPgotICAgIDxUcmVhdFdhcm5pbmdzQXNFcnJvcnM+dHJ1ZTwvVHJlYXRXYXJuaW5nc0FzRXJy
b3JzPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iICck
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnUmVsZWFzZXxBbnlDUFUnICI+Ci0gICAg
PERlYnVnVHlwZT5wZGJvbmx5PC9EZWJ1Z1R5cGU+Ci0gICAgPE9wdGltaXplPnRydWU8L09wdGlt
aXplPgotICAgIDxPdXRwdXRQYXRoPmJpblxSZWxlYXNlPC9PdXRwdXRQYXRoPgotICAgIDxJbnRl
cm1lZGlhdGVPdXRwdXRQYXRoPm9ialxSZWxlYXNlXDwvSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4K
LSAgICA8RG9jdW1lbnRhdGlvbkZpbGU+JChPdXRwdXRQYXRoKVwkKEFzc2VtYmx5TmFtZSkueG1s
PC9Eb2N1bWVudGF0aW9uRmlsZT4KLSAgICA8Tm9XYXJuPgotICAgIDwvTm9XYXJuPgotICAgIDxE
ZWZpbmVDb25zdGFudHM+VFJBQ0U8L0RlZmluZUNvbnN0YW50cz4KLSAgICA8RXJyb3JSZXBvcnQ+
cHJvbXB0PC9FcnJvclJlcG9ydD4KLSAgICA8V2FybmluZ0xldmVsPjQ8L1dhcm5pbmdMZXZlbD4K
LSAgICA8Tm9TdGRMaWI+dHJ1ZTwvTm9TdGRMaWI+Ci0gICAgPEdlbmVyYXRlU2VyaWFsaXphdGlv
bkFzc2VtYmxpZXM+T2ZmPC9HZW5lcmF0ZVNlcmlhbGl6YXRpb25Bc3NlbWJsaWVzPgotICAgIDxU
cmVhdFdhcm5pbmdzQXNFcnJvcnM+dHJ1ZTwvVHJlYXRXYXJuaW5nc0FzRXJyb3JzPgotICA8L1By
b3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJyA9PSAnUmVsZWFzZVNpZ25lZHxBbnlDUFUnICI+Ci0gICAgPERlYnVn
VHlwZT5wZGJvbmx5PC9EZWJ1Z1R5cGU+Ci0gICAgPE9wdGltaXplPnRydWU8L09wdGltaXplPgot
ICAgIDxPdXRwdXRQYXRoPmJpblxSZWxlYXNlU2lnbmVkPC9PdXRwdXRQYXRoPgotICAgIDxJbnRl
cm1lZGlhdGVPdXRwdXRQYXRoPm9ialxSZWxlYXNlU2lnbmVkXDwvSW50ZXJtZWRpYXRlT3V0cHV0
UGF0aD4KLSAgICA8RG9jdW1lbnRhdGlvbkZpbGU+JChPdXRwdXRQYXRoKVwkKEFzc2VtYmx5TmFt
ZSkueG1sPC9Eb2N1bWVudGF0aW9uRmlsZT4KLSAgICA8Tm9XYXJuPgotICAgIDwvTm9XYXJuPgot
ICAgIDxEZWZpbmVDb25zdGFudHM+VFJBQ0U7U0lHTkVEPC9EZWZpbmVDb25zdGFudHM+Ci0gICAg
PEVycm9yUmVwb3J0PnByb21wdDwvRXJyb3JSZXBvcnQ+Ci0gICAgPFdhcm5pbmdMZXZlbD40PC9X
YXJuaW5nTGV2ZWw+Ci0gICAgPE5vU3RkTGliPnRydWU8L05vU3RkTGliPgotICAgIDxHZW5lcmF0
ZVNlcmlhbGl6YXRpb25Bc3NlbWJsaWVzPk9mZjwvR2VuZXJhdGVTZXJpYWxpemF0aW9uQXNzZW1i
bGllcz4KLSAgICA8U2lnbkFzc2VtYmx5PlRydWU8L1NpZ25Bc3NlbWJseT4KLSAgICA8QXNzZW1i
bHlPcmlnaW5hdG9yS2V5RmlsZT4uLlwuLlxrZXlzXEdvb2dsZS5Qcm90b2J1Zi5zbms8L0Fzc2Vt
Ymx5T3JpZ2luYXRvcktleUZpbGU+Ci0gICAgPFRyZWF0V2FybmluZ3NBc0Vycm9ycz50cnVlPC9U
cmVhdFdhcm5pbmdzQXNFcnJvcnM+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1Hcm91cD4K
LSAgICA8UmVmZXJlbmNlIEluY2x1ZGU9Im1zY29ybGliIiAvPgotICAgIDxSZWZlcmVuY2UgSW5j
bHVkZT0iU3lzdGVtIiAvPgotICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLlhtbCIgLz4K
LSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iQnl0
ZUFycmF5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IkJ5dGVTdHJpbmcuY3MiIC8+Ci0g
ICAgPENvbXBpbGUgSW5jbHVkZT0iQ29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVNpemUuY3MiIC8+
Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iQ29kZWRJbnB1dFN0cmVhbS5jcyIgLz4KLSAgICA8Q29t
cGlsZSBJbmNsdWRlPSJDb2RlZE91dHB1dFN0cmVhbS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNs
dWRlPSJDb2xsZWN0aW9uc1xNYXBGaWVsZC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJD
b2xsZWN0aW9uc1xSZWFkT25seURpY3Rpb25hcnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVk
ZT0iQ29sbGVjdGlvbnNcUmVwZWF0ZWRGaWVsZC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRl
PSJDb21wYXRpYmlsaXR5XFByb3BlcnR5SW5mb0V4dGVuc2lvbnMuY3MiIC8+Ci0gICAgPENvbXBp
bGUgSW5jbHVkZT0iQ29tcGF0aWJpbGl0eVxUeXBlRXh0ZW5zaW9ucy5jcyIgLz4KLSAgICA8Q29t
cGlsZSBJbmNsdWRlPSJGaWVsZENvZGVjLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IkZy
YW1ld29ya1BvcnRhYmlsaXR5LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IklDdXN0b21E
aWFnbm9zdGljTWVzc2FnZS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJJRGVlcENsb25l
YWJsZS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJJbnZhbGlkSnNvbkV4Y2VwdGlvbi5j
cyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJKc29uRm9ybWF0dGVyLmNzIiAvPgotICAgIDxD
b21waWxlIEluY2x1ZGU9Ikpzb25QYXJzZXIuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0i
SnNvblRva2VuLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9Ikpzb25Ub2tlbml6ZXIuY3Mi
IC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iTWVzc2FnZUV4dGVuc2lvbnMuY3MiIC8+Ci0gICAg
PENvbXBpbGUgSW5jbHVkZT0iSU1lc3NhZ2UuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0i
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1
ZGU9IkxpbWl0ZWRJbnB1dFN0cmVhbS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJNZXNz
YWdlUGFyc2VyLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlByb3BlcnRpZXNcQXNzZW1i
bHlJbmZvLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJlZmxlY3Rpb25cRGVzY3JpcHRv
ci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJSZWZsZWN0aW9uXERlc2NyaXB0b3JCYXNl
LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJlZmxlY3Rpb25cRGVzY3JpcHRvclBvb2wu
Y3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUmVmbGVjdGlvblxEZXNjcmlwdG9yVXRpbC5j
cyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJSZWZsZWN0aW9uXERlc2NyaXB0b3JWYWxpZGF0
aW9uRXhjZXB0aW9uLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJlZmxlY3Rpb25cRW51
bURlc2NyaXB0b3IuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUmVmbGVjdGlvblxFbnVt
VmFsdWVEZXNjcmlwdG9yLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJlZmxlY3Rpb25c
RmllbGRBY2Nlc3NvckJhc2UuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUmVmbGVjdGlv
blxGaWVsZERlc2NyaXB0b3IuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUmVmbGVjdGlv
blxGaWVsZFR5cGUuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUmVmbGVjdGlvblxGaWxl
RGVzY3JpcHRvci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJSZWZsZWN0aW9uXEdlbmVy
YXRlZENsclR5cGVJbmZvLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJlZmxlY3Rpb25c
SURlc2NyaXB0b3IuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUmVmbGVjdGlvblxJRmll
bGRBY2Nlc3Nvci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJSZWZsZWN0aW9uXE1hcEZp
ZWxkQWNjZXNzb3IuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUmVmbGVjdGlvblxNZXNz
YWdlRGVzY3JpcHRvci5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJSZWZsZWN0aW9uXE1l
dGhvZERlc2NyaXB0b3IuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUmVmbGVjdGlvblxP
bmVvZkFjY2Vzc29yLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJlZmxlY3Rpb25cT25l
b2ZEZXNjcmlwdG9yLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJlZmxlY3Rpb25cT3Jp
Z2luYWxOYW1lQXR0cmlidXRlLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJlZmxlY3Rp
b25cUGFja2FnZURlc2NyaXB0b3IuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iUmVmbGVj
dGlvblxQYXJ0aWFsQ2xhc3Nlcy5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJSZWZsZWN0
aW9uXFJlZmxlY3Rpb25VdGlsLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJlZmxlY3Rp
b25cUmVwZWF0ZWRGaWVsZEFjY2Vzc29yLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IlJl
ZmxlY3Rpb25cU2VydmljZURlc2NyaXB0b3IuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0i
UmVmbGVjdGlvblxTaW5nbGVGaWVsZEFjY2Vzc29yLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1
ZGU9IlByb3RvUHJlY29uZGl0aW9ucy5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJSZWZs
ZWN0aW9uXFR5cGVSZWdpc3RyeS5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJXZWxsS25v
d25UeXBlc1xBbnkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iV2VsbEtub3duVHlwZXNc
QW55UGFydGlhbC5jcyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJXZWxsS25vd25UeXBlc1xB
cGkuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iV2VsbEtub3duVHlwZXNcRHVyYXRpb24u
Y3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iV2VsbEtub3duVHlwZXNcRHVyYXRpb25QYXJ0
aWFsLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IldlbGxLbm93blR5cGVzXEVtcHR5LmNz
IiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IldlbGxLbm93blR5cGVzXEZpZWxkTWFzay5jcyIg
Lz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJXZWxsS25vd25UeXBlc1xGaWVsZE1hc2tQYXJ0aWFs
LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IldlbGxLbm93blR5cGVzXFNvdXJjZUNvbnRl
eHQuY3MiIC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iV2VsbEtub3duVHlwZXNcU3RydWN0LmNz
IiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IldlbGxLbm93blR5cGVzXFRpbWVFeHRlbnNpb25z
LmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IldlbGxLbm93blR5cGVzXFRpbWVzdGFtcC5j
cyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJXZWxsS25vd25UeXBlc1xUaW1lc3RhbXBQYXJ0
aWFsLmNzIiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IldlbGxLbm93blR5cGVzXFR5cGUuY3Mi
IC8+Ci0gICAgPENvbXBpbGUgSW5jbHVkZT0iV2VsbEtub3duVHlwZXNcVmFsdWVQYXJ0aWFsLmNz
IiAvPgotICAgIDxDb21waWxlIEluY2x1ZGU9IldlbGxLbm93blR5cGVzXFdyYXBwZXJzLmNzIiAv
PgotICAgIDxDb21waWxlIEluY2x1ZGU9IldlbGxLbm93blR5cGVzXFdyYXBwZXJzUGFydGlhbC5j
cyIgLz4KLSAgICA8Q29tcGlsZSBJbmNsdWRlPSJXaXJlRm9ybWF0LmNzIiAvPgotICA8L0l0ZW1H
cm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Tm9uZSBJbmNsdWRlPSJHb29nbGUuUHJvdG9idWYu
bnVzcGVjIiAvPgotICAgIDxOb25lIEluY2x1ZGU9InBhY2thZ2VzLmNvbmZpZyIgLz4KLSAgPC9J
dGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXAgLz4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKE1TQnVpbGRF
eHRlbnNpb25zUGF0aDMyKVxNaWNyb3NvZnRcUG9ydGFibGVcJChUYXJnZXRGcmFtZXdvcmtWZXJz
aW9uKVxNaWNyb3NvZnQuUG9ydGFibGUuQ1NoYXJwLnRhcmdldHMiIC8+Ci0gIDxJbXBvcnQgUHJv
amVjdD0iLi5ccGFja2FnZXNcTnVTcGVjLlJlZmVyZW5jZUdlbmVyYXRvci4xLjQuMVxidWlsZFxw
b3J0YWJsZS1uZXQ0NSt3aW4rd3BhODErd3A4MCtNb25vQW5kcm9pZDEwK3hhbWFyaW5pb3MxMCtN
b25vVG91Y2gxMFxOdVNwZWMuUmVmZXJlbmNlR2VuZXJhdG9yLnRhcmdldHMiIENvbmRpdGlvbj0i
RXhpc3RzKCcuLlxwYWNrYWdlc1xOdVNwZWMuUmVmZXJlbmNlR2VuZXJhdG9yLjEuNC4xXGJ1aWxk
XHBvcnRhYmxlLW5ldDQ1K3dpbit3cGE4MSt3cDgwK01vbm9BbmRyb2lkMTAreGFtYXJpbmlvczEw
K01vbm9Ub3VjaDEwXE51U3BlYy5SZWZlcmVuY2VHZW5lcmF0b3IudGFyZ2V0cycpIiAvPgotICA8
VGFyZ2V0IE5hbWU9IkVuc3VyZU51R2V0UGFja2FnZUJ1aWxkSW1wb3J0cyIgQmVmb3JlVGFyZ2V0
cz0iUHJlcGFyZUZvckJ1aWxkIj4KLSAgICA8UHJvcGVydHlHcm91cD4KLSAgICAgIDxFcnJvclRl
eHQ+VGhpcyBwcm9qZWN0IHJlZmVyZW5jZXMgTnVHZXQgcGFja2FnZShzKSB0aGF0IGFyZSBtaXNz
aW5nIG9uIHRoaXMgY29tcHV0ZXIuIFVzZSBOdUdldCBQYWNrYWdlIFJlc3RvcmUgdG8gZG93bmxv
YWQgdGhlbS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL2dvLm1pY3Jvc29mdC5j
b20vZndsaW5rLz9MaW5rSUQ9MzIyMTA1LiBUaGUgbWlzc2luZyBmaWxlIGlzIHswfS48L0Vycm9y
VGV4dD4KLSAgICA8L1Byb3BlcnR5R3JvdXA+Ci0gICAgPEVycm9yIENvbmRpdGlvbj0iIUV4aXN0
cygnLi5ccGFja2FnZXNcTnVTcGVjLlJlZmVyZW5jZUdlbmVyYXRvci4xLjQuMVxidWlsZFxwb3J0
YWJsZS1uZXQ0NSt3aW4rd3BhODErd3A4MCtNb25vQW5kcm9pZDEwK3hhbWFyaW5pb3MxMCtNb25v
VG91Y2gxMFxOdVNwZWMuUmVmZXJlbmNlR2VuZXJhdG9yLnRhcmdldHMnKSIgVGV4dD0iJChbU3lz
dGVtLlN0cmluZ106OkZvcm1hdCgnJChFcnJvclRleHQpJywgJy4uXHBhY2thZ2VzXE51U3BlYy5S
ZWZlcmVuY2VHZW5lcmF0b3IuMS40LjFcYnVpbGRccG9ydGFibGUtbmV0NDUrd2luK3dwYTgxK3dw
ODArTW9ub0FuZHJvaWQxMCt4YW1hcmluaW9zMTArTW9ub1RvdWNoMTBcTnVTcGVjLlJlZmVyZW5j
ZUdlbmVyYXRvci50YXJnZXRzJykpIiAvPgotICA8L1RhcmdldD4KLSAgPCEtLSBUbyBtb2RpZnkg
eW91ciBidWlsZCBwcm9jZXNzLCBhZGQgeW91ciB0YXNrIGluc2lkZSBvbmUgb2YgdGhlIHRhcmdl
dHMgYmVsb3cgYW5kIHVuY29tbWVudCBpdC4gCi0gICAgICAgT3RoZXIgc2ltaWxhciBleHRlbnNp
b24gcG9pbnRzIGV4aXN0LCBzZWUgTWljcm9zb2Z0LkNvbW1vbi50YXJnZXRzLgotICA8VGFyZ2V0
IE5hbWU9IkJlZm9yZUJ1aWxkIj4KLSAgPC9UYXJnZXQ+Ci0gIDxUYXJnZXQgTmFtZT0iQWZ0ZXJC
dWlsZCI+Ci0gIDwvVGFyZ2V0PgotICAtLT4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0dvb2dsZS5Q
cm90b2J1Zi5udXNwZWMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0dvb2dsZS5Qcm90b2J1
Zi5udXNwZWMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZTNkYTNkMGU1YzA5ZWJh
YTRhNjU5NDhkY2Q1NjI2NDIzODA5OWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Hb29nbGUuUHJvdG9idWYu
bnVzcGVjCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxwYWNrYWdlPgotICA8bWV0YWRhdGE+Ci0gICAgPGlk
Pkdvb2dsZS5Qcm90b2J1ZjwvaWQ+Ci0gICAgPHRpdGxlPkdvb2dsZSBQcm90b2NvbCBCdWZmZXJz
IEMjPC90aXRsZT4KLSAgICA8c3VtbWFyeT5DIyBydW50aW1lIGxpYnJhcnkgZm9yIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdC48L3N1bW1hcnk+Ci0g
ICAgPGRlc2NyaXB0aW9uPlNlZSBwcm9qZWN0IHNpdGUgZm9yIG1vcmUgaW5mby48L2Rlc2NyaXB0
aW9uPgotICAgIDx2ZXJzaW9uPjMuMC4wLWJldGEzPC92ZXJzaW9uPgotICAgIDxhdXRob3JzPkdv
b2dsZSBJbmMuPC9hdXRob3JzPgotICAgIDxvd25lcnM+cHJvdG9idWYtcGFja2FnZXM8L293bmVy
cz4KLSAgICA8bGljZW5zZVVybD5odHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmL2Js
b2IvbWFzdGVyL0xJQ0VOU0U8L2xpY2Vuc2VVcmw+Ci0gICAgPHByb2plY3RVcmw+aHR0cHM6Ly9n
aXRodWIuY29tL2dvb2dsZS9wcm90b2J1ZjwvcHJvamVjdFVybD4KLSAgICA8cmVxdWlyZUxpY2Vu
c2VBY2NlcHRhbmNlPmZhbHNlPC9yZXF1aXJlTGljZW5zZUFjY2VwdGFuY2U+Ci0gICAgPHJlbGVh
c2VOb3Rlcz5DIyBwcm90bzMgc3VwcG9ydDwvcmVsZWFzZU5vdGVzPgotICAgIDxjb3B5cmlnaHQ+
Q29weXJpZ2h0IDIwMTUsIEdvb2dsZSBJbmMuPC9jb3B5cmlnaHQ+Ci0gICAgPHRhZ3M+UHJvdG9j
b2wgQnVmZmVycyBCaW5hcnkgU2VyaWFsaXphdGlvbiBGb3JtYXQgR29vZ2xlIHByb3RvIHByb3Rv
MzwvdGFncz4KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgPCEtLSBEZXBlbmRlbmNpZXMgZm9y
IG9sZGVyLCBtb25vbGl0aGljLWFzc2VtYmx5IHBsYXRmb3JtcyAtLT4KLSAgICAgIDxncm91cCB0
YXJnZXRGcmFtZXdvcms9Im5ldDQ1IiAvPgotICAgICAgPGdyb3VwIHRhcmdldEZyYW1ld29yaz0i
d3A4IiAvPgotICAgICAgPGdyb3VwIHRhcmdldEZyYW1ld29yaz0id2luOCIgLz4KLSAgICAgIDxn
cm91cCB0YXJnZXRGcmFtZXdvcms9IndwYTgxIiAvPgotICAgICAgPGdyb3VwIHRhcmdldEZyYW1l
d29yaz0ieGFtYXJpbi5pb3MiIC8+Ci0gICAgICA8Z3JvdXAgdGFyZ2V0RnJhbWV3b3JrPSJtb25v
dG91Y2giIC8+Ci0gICAgICA8Z3JvdXAgdGFyZ2V0RnJhbWV3b3JrPSJtb25vYW5kcm9pZCIgLz4K
LSAgICAgIDwhLS0gRGVwZW5kZW5jaWVzIGZvciBuZXdlciwgbW9yZSBncmFudWxhciBwbGF0Zm9y
bXMgKC5ORVQgQ29yZSBldGMpIC0tPgotICAgICAgPGdyb3VwIHRhcmdldEZyYW1ld29yaz0iZG90
bmV0Ij4KLSAgICAgICAgPGRlcGVuZGVuY3kgaWQ9IlN5c3RlbS5Db2xsZWN0aW9ucyIgdmVyc2lv
bj0iNC4wLjAiIC8+Ci0gICAgICAgIDxkZXBlbmRlbmN5IGlkPSJTeXN0ZW0uRGlhZ25vc3RpY3Mu
RGVidWciIHZlcnNpb249IjQuMC4wIiAvPgotICAgICAgICA8ZGVwZW5kZW5jeSBpZD0iU3lzdGVt
Lkdsb2JhbGl6YXRpb24iIHZlcnNpb249IjQuMC4wIiAvPgotICAgICAgICA8ZGVwZW5kZW5jeSBp
ZD0iU3lzdGVtLklPIiB2ZXJzaW9uPSI0LjAuMCIgLz4KLSAgICAgICAgPGRlcGVuZGVuY3kgaWQ9
IlN5c3RlbS5MaW5xIiB2ZXJzaW9uPSI0LjAuMCIgLz4KLSAgICAgICAgPGRlcGVuZGVuY3kgaWQ9
IlN5c3RlbS5MaW5xLkV4cHJlc3Npb25zIiB2ZXJzaW9uPSI0LjAuMCIgLz4KLSAgICAgICAgPGRl
cGVuZGVuY3kgaWQ9IlN5c3RlbS5PYmplY3RNb2RlbCIgdmVyc2lvbj0iNC4wLjAiIC8+Ci0gICAg
ICAgIDxkZXBlbmRlbmN5IGlkPSJTeXN0ZW0uUmVmbGVjdGlvbiIgdmVyc2lvbj0iNC4wLjAiIC8+
Ci0gICAgICAgIDxkZXBlbmRlbmN5IGlkPSJTeXN0ZW0uUmVmbGVjdGlvbi5FeHRlbnNpb25zIiB2
ZXJzaW9uPSI0LjAuMCIgLz4KLSAgICAgICAgPGRlcGVuZGVuY3kgaWQ9IlN5c3RlbS5SdW50aW1l
IiB2ZXJzaW9uPSI0LjAuMCIgLz4KLSAgICAgICAgPGRlcGVuZGVuY3kgaWQ9IlN5c3RlbS5SdW50
aW1lLkV4dGVuc2lvbnMiIHZlcnNpb249IjQuMC4wIiAvPgotICAgICAgICA8ZGVwZW5kZW5jeSBp
ZD0iU3lzdGVtLlRleHQuRW5jb2RpbmciIHZlcnNpb249IjQuMC4wIiAvPgotICAgICAgICA8ZGVw
ZW5kZW5jeSBpZD0iU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zIiB2ZXJzaW9uPSI0LjAu
MCIgLz4KLSAgICAgICAgPGRlcGVuZGVuY3kgaWQ9IlN5c3RlbS5UaHJlYWRpbmciIHZlcnNpb249
IjQuMC4wIiAvPgotICAgICAgPC9ncm91cD4KLSAgICA8L2RlcGVuZGVuY2llcz4KLSAgPC9tZXRh
ZGF0YT4KLSAgPGZpbGVzPgotICAgIDxmaWxlIHNyYz0iYmluL1JlbGVhc2VTaWduZWQvR29vZ2xl
LlByb3RvYnVmLmRsbCIgdGFyZ2V0PSJsaWIvcG9ydGFibGUtbmV0NDUrbmV0Y29yZTQ1K3dwYTgx
K3dwOCIgLz4KLSAgICA8ZmlsZSBzcmM9ImJpbi9SZWxlYXNlU2lnbmVkL0dvb2dsZS5Qcm90b2J1
Zi5wZGIiIHRhcmdldD0ibGliL3BvcnRhYmxlLW5ldDQ1K25ldGNvcmU0NSt3cGE4MSt3cDgiIC8+
Ci0gICAgPGZpbGUgc3JjPSJiaW4vUmVsZWFzZVNpZ25lZC9Hb29nbGUuUHJvdG9idWYueG1sIiB0
YXJnZXQ9ImxpYi9wb3J0YWJsZS1uZXQ0NStuZXRjb3JlNDUrd3BhODErd3A4IiAvPgotICAgIDxm
aWxlIHNyYz0iYmluL1JlbGVhc2VTaWduZWQvR29vZ2xlLlByb3RvYnVmLmRsbCIgdGFyZ2V0PSJs
aWIvZG90bmV0IiAvPgotICAgIDxmaWxlIHNyYz0iYmluL1JlbGVhc2VTaWduZWQvR29vZ2xlLlBy
b3RvYnVmLnBkYiIgdGFyZ2V0PSJsaWIvZG90bmV0IiAvPgotICAgIDxmaWxlIHNyYz0iYmluL1Jl
bGVhc2VTaWduZWQvR29vZ2xlLlByb3RvYnVmLnhtbCIgdGFyZ2V0PSJsaWIvZG90bmV0IiAvPgot
ICAgIDxmaWxlIHNyYz0iKipcKi5jcyIgdGFyZ2V0PSJzcmMiIC8+Ci0gIDwvZmlsZXM+Ci08L3Bh
Y2thZ2U+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0lDdXN0b21EaWFn
bm9zdGljTWVzc2FnZS5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvSUN1c3RvbURpYWdu
b3N0aWNNZXNzYWdlLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDA5MDU2OWYx
ZDZmNWMzNjVkMDYzMDZjMjc2Y2FlZWIwYjc4NzQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvSUN1c3RvbURp
YWdub3N0aWNNZXNzYWdlLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAot77u/I3Jl
Z2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE2IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zgotewot
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSBtZXNzYWdlIHR5cGUgdGhhdCBoYXMgYSBjdXN0
b20gc3RyaW5nIGZvcm1hdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KLSAgICAvLy8gPC9zdW1t
YXJ5PgotICAgIC8vLyA8cmVtYXJrcz4KLSAgICAvLy8gPHBhcmE+Ci0gICAgLy8vIENhbGxpbmcg
PHNlZSBjcmVmPSJvYmplY3QuVG9TdHJpbmciLz4gb24gYSBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBl
IG5vcm1hbGx5Ci0gICAgLy8vIHJldHVybnMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24uIElmIGEg
bWVzc2FnZSB0eXBlIGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UsCi0gICAgLy8vIHRoZW4gdGhl
IDxzZWUgY3JlZj0iVG9EaWFnbm9zdGljU3RyaW5nIi8+IG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBp
bnN0ZWFkIG9mIHRoZSByZWd1bGFyCi0gICAgLy8vIEpTT04gZm9ybWF0dGluZyBjb2RlLCBidXQg
b25seSB3aGVuIDxjPlRvU3RyaW5nKCk8L2M+IGlzIGNhbGxlZCBlaXRoZXIgb24gdGhlIG1lc3Nh
Z2UgaXRzZWxmCi0gICAgLy8vIG9yIG9uIGFub3RoZXIgbWVzc2FnZSB3aGljaCBjb250YWlucyBp
dC4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIG5vcm1hbCBKU09OIGZvcm1hdHRpbmcgb2YKLSAg
ICAvLy8gdGhlIG1lc3NhZ2UuCi0gICAgLy8vIDwvcGFyYT4KLSAgICAvLy8gPHBhcmE+Ci0gICAg
Ly8vIEZvciBleGFtcGxlLCBpZiB5b3UgY3JlYXRlIGEgcHJvdG8gbWVzc2FnZSByZXByZXNlbnRp
bmcgYSBHVUlELCB0aGUgaW50ZXJuYWwKLSAgICAvLy8gcmVwcmVzZW50YXRpb24gbWF5IGJlIGEg
PGM+Ynl0ZXM8L2M+IGZpZWxkIG9yIGZvdXIgPGM+Zml4ZWQzMjwvYz4gZmllbGRzLiBIb3dldmVy
LCB3aGVuIGRlYnVnZ2luZwotICAgIC8vLyBpdCBtYXkgYmUgbW9yZSBjb252ZW5pZW50IHRvIHNl
ZSBhIHJlc3VsdCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgPHNlZSBjcmVmPSJTeXN0ZW0uR3VpZCIv
PiBwcm92aWRlcy4KLSAgICAvLy8gPC9wYXJhPgotICAgIC8vLyA8cGFyYT5UaGlzIGludGVyZmFj
ZSBleHRlbmRzIDxzZWUgY3JlZj0iSU1lc3NhZ2UiLz4gdG8gYXZvaWQgaXQgYWNjaWRlbnRhbGx5
IGJlaW5nIGltcGxlbWVudGVkCi0gICAgLy8vIG9uIHR5cGVzIG90aGVyIHRoYW4gbWVzc2FnZXMs
IHdoZXJlIGl0IHdvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueXRoaW5nIGluIHRoZSBmcmFtZXdvcmsu
PC9wYXJhPgotICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgcHVibGljIGludGVyZmFjZSBJQ3VzdG9t
RGlhZ25vc3RpY01lc3NhZ2UgOiBJTWVzc2FnZQotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9i
amVjdCwgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3
aGVuIGEgbWVzc2FnZSBpcyBmb3JtYXR0ZWQgYXMgcGFydCBvZiBhIDxzZWUgY3JlZj0ib2JqZWN0
LlRvU3RyaW5nIi8+Ci0gICAgICAgIC8vLyBjYWxsLiBJdCBkb2VzIG5vdCBhZmZlY3QgdGhlIEpT
T04gcmVwcmVzZW50YXRpb24gdXNlZCBieSA8c2VlIGNyZWY9Ikpzb25Gb3JtYXR0ZXIiLz4gb3Ro
ZXIgdGhhbgotICAgICAgICAvLy8gaW4gY2FsbHMgdG8gPHNlZSBjcmVmPSJKc29uRm9ybWF0dGVy
LlRvRGlhZ25vc3RpY1N0cmluZyhJTWVzc2FnZSkiLz4uIFdoaWxlIGl0IGlzIHJlY29tbWVuZGVk
Ci0gICAgICAgIC8vLyB0aGF0IHRoZSByZXN1bHQgaXMgdmFsaWQgSlNPTiwgdGhpcyBpcyBuZXZl
ciBhc3N1bWVkIGJ5IHRoZSBQcm90b2J1ZiBsaWJyYXJ5LgotICAgICAgICAvLy8gPC9yZW1hcmtz
PgotICAgICAgICAvLy8gPHJldHVybnM+QSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBv
YmplY3QsIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLjwvcmV0dXJucz4KLSAgICAgICAgc3RyaW5n
IFRvRGlhZ25vc3RpY1N0cmluZygpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9H
b29nbGUuUHJvdG9idWYvSURlZXBDbG9uZWFibGUuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmL0lEZWVwQ2xvbmVhYmxlLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWM3
MWJiZTJjMDEzNDY1ZjMzNzVjYmMyNmYyYzMwMWJmNjc4MjRkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvSURl
ZXBDbG9uZWFibGUuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi3vu78jcmVnaW9u
IENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotI2VuZHJlZ2lvbgotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmCi17Ci0gICAg
Ly8vIDxzdW1tYXJ5PgotICAgIC8vLyBHZW5lcmljIGludGVyZmFjZSBmb3IgYSBkZWVwbHkgY2xv
bmVhYmxlIHR5cGUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICAvLy8gPHJlbWFya3M+Ci0gICAg
Ly8vIDxwYXJhPgotICAgIC8vLyBBbGwgZ2VuZXJhdGVkIG1lc3NhZ2VzIGltcGxlbWVudCB0aGlz
IGludGVyZmFjZSwgYnV0IHNvIGRvIHNvbWUgbm9uLW1lc3NhZ2UgdHlwZXMuCi0gICAgLy8vIEFk
ZGl0aW9uYWxseSwgZHVlIHRvIHRoZSB0eXBlIGNvbnN0cmFpbnQgb24gPGM+VDwvYz4gaW4gPHNl
ZSBjcmVmPSJJTWVzc2FnZXtUfSIvPiwKLSAgICAvLy8gaXQgaXMgc2ltcGxlciB0byBrZWVwIHRo
aXMgYXMgYSBzZXBhcmF0ZSBpbnRlcmZhY2UuCi0gICAgLy8vIDwvcGFyYT4KLSAgICAvLy8gPC9y
ZW1hcmtzPgotICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlQiPlRoZSB0eXBlIGl0c2VsZiwgcmV0
dXJuZWQgYnkgdGhlIDxzZWUgY3JlZj0iQ2xvbmUiLz4gbWV0aG9kLjwvdHlwZXBhcmFtPgotICAg
IHB1YmxpYyBpbnRlcmZhY2UgSURlZXBDbG9uZWFibGU8VD4KLSAgICB7Ci0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vIENyZWF0ZXMgYSBkZWVwIGNsb25lIG9mIHRoaXMgb2JqZWN0
LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJldHVybnM+QSBkZWVwIGNs
b25lIG9mIHRoaXMgb2JqZWN0LjwvcmV0dXJucz4KLSAgICAgICAgVCBDbG9uZSgpOwotICAgIH0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvSU1lc3NhZ2UuY3MgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Nz
aGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0lNZXNzYWdlLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzZTY0NGMxNzczODJlOTFjZjQxNDVmY2JjMzE1NTg3NWIzODNlODE3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYvSU1lc3NhZ2UuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0j
cmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBHb29nbGUu
UHJvdG9idWYuUmVmbGVjdGlvbjsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1ZgotewotICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gSW50ZXJmYWNlIGZvciBhIFByb3RvY29sIEJ1ZmZlcnMg
bWVzc2FnZSwgc3VwcG9ydGluZwotICAgIC8vLyBiYXNpYyBvcGVyYXRpb25zIHJlcXVpcmVkIGZv
ciBzZXJpYWxpemF0aW9uLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGludGVyZmFj
ZSBJTWVzc2FnZQotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gTWVy
Z2VzIHRoZSBkYXRhIGZyb20gdGhlIHNwZWNpZmllZCBjb2RlZCBpbnB1dCBzdHJlYW0gd2l0aCB0
aGUgY3VycmVudCBtZXNzYWdlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8g
PHJlbWFya3M+U2VlIHRoZSB1c2VyIGd1aWRlIGZvciBwcmVjaXNlIG1lcmdlIHNlbWFudGljcy48
L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5wdXQiPjwvcGFyYW0+Ci0gICAg
ICAgIHZvaWQgTWVyZ2VGcm9tKENvZGVkSW5wdXRTdHJlYW0gaW5wdXQpOwotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlcyB0aGUgZGF0YSB0byB0aGUgZ2l2ZW4gY29k
ZWQgb3V0cHV0IHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxw
YXJhbSBuYW1lPSJvdXRwdXQiPkNvZGVkIG91dHB1dCBzdHJlYW0gdG8gd3JpdGUgdGhlIGRhdGEg
dG8uIE11c3Qgbm90IGJlIG51bGwuPC9wYXJhbT4KLSAgICAgICAgdm9pZCBXcml0ZVRvKENvZGVk
T3V0cHV0U3RyZWFtIG91dHB1dCk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAv
Ly8gQ2FsY3VsYXRlcyB0aGUgc2l6ZSBvZiB0aGlzIG1lc3NhZ2UgaW4gUHJvdG9jb2wgQnVmZmVy
IHdpcmUgZm9ybWF0LCBpbiBieXRlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
Ly8vIDxyZXR1cm5zPlRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gd3JpdGUgdGhpcyBt
ZXNzYWdlCi0gICAgICAgIC8vLyB0byBhIGNvZGVkIG91dHB1dCBzdHJlYW0uPC9yZXR1cm5zPgot
ICAgICAgICBpbnQgQ2FsY3VsYXRlU2l6ZSgpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgLy8vIERlc2NyaXB0b3IgZm9yIHRoaXMgbWVzc2FnZS4gQWxsIGluc3RhbmNlcyBhcmUg
ZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSBzYW1lIGRlc2NyaXB0b3IsCi0gICAgICAgIC8vLyBhbmQg
Zm9yIGdlbmVyYXRlZCB0eXBlcyB0aGlzIHdpbGwgYmUgYW4gZXhwbGljaXRseS1pbXBsZW1lbnRl
ZCBtZW1iZXIsIHJldHVybmluZyB0aGUKLSAgICAgICAgLy8vIHNhbWUgdmFsdWUgYXMgdGhlIHN0
YXRpYyBwcm9wZXJ0eSBkZWNsYXJlZCBvbiB0aGUgdHlwZS4KLSAgICAgICAgLy8vIDwvc3VtbWFy
eT4KLSAgICAgICAgTWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7IGdldDsgfQotICAgIH0K
LQotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gR2VuZXJpYyBpbnRlcmZhY2UgZm9yIGEgUHJv
dG9jb2wgQnVmZmVycyBtZXNzYWdlLAotICAgIC8vLyB3aGVyZSB0aGUgdHlwZSBwYXJhbWV0ZXIg
aXMgZXhwZWN0ZWQgdG8gYmUgdGhlIHNhbWUgdHlwZSBhcwotICAgIC8vLyB0aGUgaW1wbGVtZW50
YXRpb24gY2xhc3MuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICAvLy8gPHR5cGVwYXJhbSBuYW1l
PSJUIj5UaGUgbWVzc2FnZSB0eXBlLjwvdHlwZXBhcmFtPgotICAgIHB1YmxpYyBpbnRlcmZhY2Ug
SU1lc3NhZ2U8VD4gOiBJTWVzc2FnZSwgSUVxdWF0YWJsZTxUPiwgSURlZXBDbG9uZWFibGU8VD4g
d2hlcmUgVCA6IElNZXNzYWdlPFQ+Ci0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgIC8vLyBNZXJnZXMgdGhlIGdpdmVuIG1lc3NhZ2UgaW50byB0aGlzIG9uZS4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPlNlZSB0aGUgdXNlciBndWlkZSBm
b3IgcHJlY2lzZSBtZXJnZSBzZW1hbnRpY3MuPC9yZW1hcmtzPgotICAgICAgICAvLy8gPHBhcmFt
IG5hbWU9Im1lc3NhZ2UiPlRoZSBtZXNzYWdlIHRvIG1lcmdlIHdpdGggdGhpcyBvbmUuIE11c3Qg
bm90IGJlIG51bGwuPC9wYXJhbT4KLSAgICAgICAgdm9pZCBNZXJnZUZyb20oVCBtZXNzYWdlKTsK
LSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0ludmFsaWRK
c29uRXhjZXB0aW9uLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9JbnZhbGlkSnNvbkV4
Y2VwdGlvbi5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU0MzQyMDE0MjE1ZTVm
ODVjMDE0ZGE2MTdiMzk5NzhmMzdmZDhkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0ludmFsaWRKc29uRXhj
ZXB0aW9uLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotI3JlZ2lvbiBDb3B5cmln
aHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLklPOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3Rv
YnVmCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBUaHJvd24gd2hlbiBhbiBhdHRlbXB0
IGlzIG1hZGUgdG8gcGFyc2UgaW52YWxpZCBKU09OLCBlLmcuIHVzaW5nCi0gICAgLy8vIGEgbm9u
LXN0cmluZyBwcm9wZXJ0eSBrZXksIG9yIGluY2x1ZGluZyBhIHJlZHVuZGFudCBjb21tYS4gUGFy
c2luZyBhIHByb3RvY29sIGJ1ZmZlcgotICAgIC8vLyBtZXNzYWdlIHJlcHJlc2VudGVkIGluIEpT
T04gdXNpbmcgPHNlZSBjcmVmPSJKc29uUGFyc2VyIi8+IGNhbiB0aHJvdyBib3RoIHRoaXMKLSAg
ICAvLy8gZXhjZXB0aW9uIGFuZCA8c2VlIGNyZWY9IkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbiIvPiBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi4gVGhpcwotICAgIC8vLyBleGNlcHRp
b24gaXMgb25seSB0aHJvd24gZm9yICJwdXJlIEpTT04iIGVycm9ycywgd2hlcmVhcyA8Yz5JbnZh
bGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb248L2M+Ci0gICAgLy8vIGlzIHRocm93biB3aGVuIHRo
ZSBKU09OIG1heSBiZSB2YWxpZCBpbiBhbmQgb2YgaXRzZWxmLCBidXQgY2Fubm90IGJlIHBhcnNl
ZCBhcyBhIHByb3RvY29sIGJ1ZmZlcgotICAgIC8vLyBtZXNzYWdlLgotICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgcHVibGljIHNlYWxlZCBjbGFzcyBJbnZhbGlkSnNvbkV4Y2VwdGlvbiA6IElPRXhj
ZXB0aW9uCi0gICAgewotICAgICAgICBpbnRlcm5hbCBJbnZhbGlkSnNvbkV4Y2VwdGlvbihzdHJp
bmcgbWVzc2FnZSkKLSAgICAgICAgICAgIDogYmFzZShtZXNzYWdlKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9j
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24u
Y3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0ludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbi5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZhZWZiNmZhNGVkYmFkYWIz
MGQ3ZGM4ZThlMTA0NWMxY2UxN2Q4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0ludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbi5jcworKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0jcmVnaW9u
IENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci0K
LW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8v
IFRocm93biB3aGVuIGEgcHJvdG9jb2wgbWVzc2FnZSBiZWluZyBwYXJzZWQgaXMgaW52YWxpZCBp
biBzb21lIHdheSwKLSAgICAvLy8gZS5nLiBpdCBjb250YWlucyBhIG1hbGZvcm1lZCB2YXJpbnQg
b3IgYSBuZWdhdGl2ZSBieXRlIGxlbmd0aC4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBzZWFsZWQgY2xhc3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIDogSU9FeGNlcHRp
b24KLSAgICB7Ci0gICAgICAgIGludGVybmFsIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
bihzdHJpbmcgbWVzc2FnZSkKLSAgICAgICAgICAgIDogYmFzZShtZXNzYWdlKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNl
cHRpb24oc3RyaW5nIG1lc3NhZ2UsIEV4Y2VwdGlvbiBpbm5lckV4Y2VwdGlvbikKLSAgICAgICAg
ICAgIDogYmFzZShtZXNzYWdlLCBpbm5lckV4Y2VwdGlvbikKLSAgICAgICAgewotICAgICAgICB9
Ci0KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
biBNb3JlRGF0YUF2YWlsYWJsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJDb21wbGV0
ZWQgcmVhZGluZyBhIG1lc3NhZ2Ugd2hpbGUgbW9yZSBkYXRhIHdhcyBhdmFpbGFibGUgaW4gdGhl
IHN0cmVhbS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludGVybmFsIHN0YXRpYyBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gVHJ1bmNhdGVkTWVzc2FnZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAg
ICAgICAgICAgICAgICJXaGlsZSBwYXJzaW5nIGEgcHJvdG9jb2wgbWVzc2FnZSwgdGhlIGlucHV0
IGVuZGVkIHVuZXhwZWN0ZWRseSAiICsKLSAgICAgICAgICAgICAgICAiaW4gdGhlIG1pZGRsZSBv
ZiBhIGZpZWxkLiAgVGhpcyBjb3VsZCBtZWFuIGVpdGhlciB0aGFuIHRoZSAiICsKLSAgICAgICAg
ICAgICAgICAiaW5wdXQgaGFzIGJlZW4gdHJ1bmNhdGVkIG9yIHRoYXQgYW4gZW1iZWRkZWQgbWVz
c2FnZSAiICsKLSAgICAgICAgICAgICAgICAibWlzcmVwb3J0ZWQgaXRzIG93biBsZW5ndGguIik7
Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIE5lZ2F0aXZlU2l6ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJD
b2RlZElucHV0U3RyZWFtIGVuY291bnRlcmVkIGFuIGVtYmVkZGVkIHN0cmluZyBvciBtZXNzYWdl
ICIgKwotICAgICAgICAgICAgICAgICJ3aGljaCBjbGFpbWVkIHRvIGhhdmUgbmVnYXRpdmUgc2l6
ZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludGVybmFsIHN0YXRpYyBJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24gTWFsZm9ybWVkVmFyaW50KCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAg
ICAgICAgIkNvZGVkSW5wdXRTdHJlYW0gZW5jb3VudGVyZWQgYSBtYWxmb3JtZWQgdmFyaW50LiIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRl
cyBhbiBleGNlcHRpb24gZm9yIGFuIGVycm9yIGNvbmRpdGlvbiBvZiBhbiBpbnZhbGlkIHRhZyBi
ZWluZyBlbmNvdW50ZXJlZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJu
YWwgc3RhdGljIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBJbnZhbGlkVGFnKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNl
cHRpb24oCi0gICAgICAgICAgICAgICAgIlByb3RvY29sIG1lc3NhZ2UgY29udGFpbmVkIGFuIGlu
dmFsaWQgdGFnICh6ZXJvKS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludGVybmFsIHN0YXRp
YyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gSW52YWxpZEJhc2U2NChFeGNlcHRpb24g
aW5uZXJFeGNlcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgSW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKCJJbnZhbGlkIGJhc2U2NCBkYXRhIiwgaW5uZXJFeGNl
cHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbiBJbnZhbGlkRW5kVGFnKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAg
ICAgICAgIlByb3RvY29sIG1lc3NhZ2UgZW5kLWdyb3VwIHRhZyBkaWQgbm90IG1hdGNoIGV4cGVj
dGVkIHRhZy4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludGVybmFsIHN0YXRpYyBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gUmVjdXJzaW9uTGltaXRFeGNlZWRlZCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
KAotICAgICAgICAgICAgICAgICJQcm90b2NvbCBtZXNzYWdlIGhhZCB0b28gbWFueSBsZXZlbHMg
b2YgbmVzdGluZy4gIE1heSBiZSBtYWxpY2lvdXMuICAiICsKLSAgICAgICAgICAgICAgICAiVXNl
IENvZGVkSW5wdXRTdHJlYW0uU2V0UmVjdXJzaW9uTGltaXQoKSB0byBpbmNyZWFzZSB0aGUgZGVw
dGggbGltaXQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgSW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIEpzb25SZWN1cnNpb25MaW1pdEV4Y2VlZGVkKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNl
cHRpb24oCi0gICAgICAgICAgICAgICAgIlByb3RvY29sIG1lc3NhZ2UgaGFkIHRvbyBtYW55IGxl
dmVscyBvZiBuZXN0aW5nLiAgTWF5IGJlIG1hbGljaW91cy4gICIgKwotICAgICAgICAgICAgICAg
ICJVc2UgSnNvblBhcnNlci5TZXR0aW5ncyB0byBpbmNyZWFzZSB0aGUgZGVwdGggbGltaXQuIik7
Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIFNpemVMaW1pdEV4Y2VlZGVkKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAg
ICAgIlByb3RvY29sIG1lc3NhZ2Ugd2FzIHRvbyBsYXJnZS4gIE1heSBiZSBtYWxpY2lvdXMuICAi
ICsKLSAgICAgICAgICAgICAgICAiVXNlIENvZGVkSW5wdXRTdHJlYW0uU2V0U2l6ZUxpbWl0KCkg
dG8gaW5jcmVhc2UgdGhlIHNpemUgbGltaXQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRl
cm5hbCBzdGF0aWMgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIEludmFsaWRNZXNzYWdl
U3RyZWFtVGFnKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkUHJv
dG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIlN0cmVhbSBvZiBwcm90b2Nv
bCBtZXNzYWdlcyBoYWQgaW52YWxpZCB0YWcuIEV4cGVjdGVkIHRhZyBpcyBsZW5ndGgtZGVsaW1p
dGVkIGZpZWxkIDEuIik7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Kc29uRm9ybWF0
dGVyLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9Kc29uRm9ybWF0dGVyLmNzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mzc3MjQ3MzI2MGRlYTE5N2EyZmQyZWU0YWEyYjhl
OWJlZTJjYWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvSnNvbkZvcm1hdHRlci5jcworKysgL2Rldi9udWxs
CkBAIC0xLDkxMiArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vu
c2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2lu
ZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Ci11c2luZyBTeXN0ZW0uR2xvYmFs
aXphdGlvbjsKLXVzaW5nIFN5c3RlbS5UZXh0OwotdXNpbmcgR29vZ2xlLlByb3RvYnVmLlJlZmxl
Y3Rpb247Ci11c2luZyBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXM7Ci11c2luZyBTeXN0
ZW0uSU87Ci11c2luZyBTeXN0ZW0uTGlucTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
cmljOwotdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9i
dWYKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIFJlZmxlY3Rpb24tYmFzZWQgY29udmVy
dGVyIGZyb20gbWVzc2FnZXMgdG8gSlNPTi4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIC8vLyA8
cmVtYXJrcz4KLSAgICAvLy8gPHBhcmE+Ci0gICAgLy8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNz
IGFyZSB0aHJlYWQtc2FmZSwgd2l0aCBubyBtdXRhYmxlIHN0YXRlLgotICAgIC8vLyA8L3BhcmE+
Ci0gICAgLy8vIDxwYXJhPgotICAgIC8vLyBUaGlzIGlzIGEgc2ltcGxlIHN0YXJ0IHRvIGdldCBK
U09OIGZvcm1hdHRpbmcgd29ya2luZy4gQXMgaXQncyByZWZsZWN0aW9uLWJhc2VkLAotICAgIC8v
LyBpdCdzIG5vdCBhcyBxdWljayBhcyBiYWtpbmcgY2FsbHMgaW50byBnZW5lcmF0ZWQgbWVzc2Fn
ZXMgLSBidXQgaXMgYSBzaW1wbGVyIGltcGxlbWVudGF0aW9uLgotICAgIC8vLyAoVGhpcyBjb2Rl
IGlzIGdlbmVyYWxseSBub3QgaGVhdmlseSBvcHRpbWl6ZWQuKQotICAgIC8vLyA8L3BhcmE+Ci0g
ICAgLy8vIDwvcmVtYXJrcz4KLSAgICBwdWJsaWMgc2VhbGVkIGNsYXNzIEpzb25Gb3JtYXR0ZXIK
LSAgICB7Ci0gICAgICAgIGludGVybmFsIGNvbnN0IHN0cmluZyBBbnlUeXBlVXJsRmllbGQgPSAi
QHR5cGUiOwotICAgICAgICBpbnRlcm5hbCBjb25zdCBzdHJpbmcgQW55RGlhZ25vc3RpY1ZhbHVl
RmllbGQgPSAiQHZhbHVlIjsKLSAgICAgICAgaW50ZXJuYWwgY29uc3Qgc3RyaW5nIEFueVdlbGxL
bm93blR5cGVWYWx1ZUZpZWxkID0gInZhbHVlIjsKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBzdHJp
bmcgVHlwZVVybFByZWZpeCA9ICJ0eXBlLmdvb2dsZWFwaXMuY29tIjsKLSAgICAgICAgcHJpdmF0
ZSBjb25zdCBzdHJpbmcgTmFtZVZhbHVlU2VwYXJhdG9yID0gIjogIjsKLSAgICAgICAgcHJpdmF0
ZSBjb25zdCBzdHJpbmcgUHJvcGVydHlTZXBhcmF0b3IgPSAiLCAiOwotCi0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgYSBmb3JtYXR0ZXIgdXNpbmcgdGhlIGRlZmF1
bHQgc2V0dGluZ3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0
aWMgSnNvbkZvcm1hdHRlciBEZWZhdWx0IHsgZ2V0OyB9ID0gbmV3IEpzb25Gb3JtYXR0ZXIoU2V0
dGluZ3MuRGVmYXVsdCk7Ci0KLSAgICAgICAgLy8gQSBKU09OIGZvcm1hdHRlciB3aGljaCAqb25s
eSogZXhpc3RzIAotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBKc29uRm9ybWF0dGVy
IGRpYWdub3N0aWNGb3JtYXR0ZXIgPSBuZXcgSnNvbkZvcm1hdHRlcihTZXR0aW5ncy5EZWZhdWx0
KTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUaGUgSlNPTiByZXByZXNl
bnRhdGlvbiBvZiB0aGUgZmlyc3QgMTYwIGNoYXJhY3RlcnMgb2YgVW5pY29kZS4KLSAgICAgICAg
Ly8vIEVtcHR5IHN0cmluZ3MgYXJlIHJlcGxhY2VkIGJ5IHRoZSBzdGF0aWMgY29uc3RydWN0b3Iu
Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5
IHN0cmluZ1tdIENvbW1vblJlcHJlc2VudGF0aW9ucyA9IHsKLSAgICAgICAgICAgIC8vIEMwIChB
U0NJSSBhbmQgZGVyaXZhdGl2ZXMpIGNvbnRyb2wgY2hhcmFjdGVycwotICAgICAgICAgICAgIlxc
dTAwMDAiLCAiXFx1MDAwMSIsICJcXHUwMDAyIiwgIlxcdTAwMDMiLCAgLy8gMHgwMAotICAgICAg
ICAgICJcXHUwMDA0IiwgIlxcdTAwMDUiLCAiXFx1MDAwNiIsICJcXHUwMDA3IiwKLSAgICAgICAg
ICAiXFxiIiwgICAgICJcXHQiLCAgICAgIlxcbiIsICAgICAiXFx1MDAwYiIsCi0gICAgICAgICAg
IlxcZiIsICAgICAiXFxyIiwgICAgICJcXHUwMDBlIiwgIlxcdTAwMGYiLAotICAgICAgICAgICJc
XHUwMDEwIiwgIlxcdTAwMTEiLCAiXFx1MDAxMiIsICJcXHUwMDEzIiwgIC8vIDB4MTAKLSAgICAg
ICAgICAiXFx1MDAxNCIsICJcXHUwMDE1IiwgIlxcdTAwMTYiLCAiXFx1MDAxNyIsCi0gICAgICAg
ICAgIlxcdTAwMTgiLCAiXFx1MDAxOSIsICJcXHUwMDFhIiwgIlxcdTAwMWIiLAotICAgICAgICAg
ICJcXHUwMDFjIiwgIlxcdTAwMWQiLCAiXFx1MDAxZSIsICJcXHUwMDFmIiwKLSAgICAgICAgICAg
IC8vIEVzY2FwaW5nIG9mICIgYW5kIFwgYXJlIHJlcXVpcmVkIGJ5IHd3dy5qc29uLm9yZyBzdHJp
bmcgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIC8vIEVzY2FwaW5nIG9mIDwgYW5kID4gYXJlIHJl
cXVpcmVkIGZvciBIVE1MIHNlY3VyaXR5LgotICAgICAgICAgICAgIiIsICIiLCAiXFxcIiIsICIi
LCAiIiwgICAgICAgICIiLCAiIiwgICAgICAgICIiLCAgLy8gMHgyMAotICAgICAgICAgICIiLCAi
IiwgIiIsICAgICAiIiwgIiIsICAgICAgICAiIiwgIiIsICAgICAgICAiIiwKLSAgICAgICAgICAi
IiwgIiIsICIiLCAgICAgIiIsICIiLCAgICAgICAgIiIsICIiLCAgICAgICAgIiIsICAvLyAweDMw
Ci0gICAgICAgICAgIiIsICIiLCAiIiwgICAgICIiLCAiXFx1MDAzYyIsICIiLCAiXFx1MDAzZSIs
ICIiLAotICAgICAgICAgICIiLCAiIiwgIiIsICAgICAiIiwgIiIsICAgICAgICAiIiwgIiIsICAg
ICAgICAiIiwgIC8vIDB4NDAKLSAgICAgICAgICAiIiwgIiIsICIiLCAgICAgIiIsICIiLCAgICAg
ICAgIiIsICIiLCAgICAgICAgIiIsCi0gICAgICAgICAgIiIsICIiLCAiIiwgICAgICIiLCAiIiwg
ICAgICAgICIiLCAiIiwgICAgICAgICIiLCAgLy8gMHg1MAotICAgICAgICAgICIiLCAiIiwgIiIs
ICAgICAiIiwgIlxcXFwiLCAgICAiIiwgIiIsICAgICAgICAiIiwKLSAgICAgICAgICAiIiwgIiIs
ICIiLCAgICAgIiIsICIiLCAgICAgICAgIiIsICIiLCAgICAgICAgIiIsICAvLyAweDYwCi0gICAg
ICAgICAgIiIsICIiLCAiIiwgICAgICIiLCAiIiwgICAgICAgICIiLCAiIiwgICAgICAgICIiLAot
ICAgICAgICAgICIiLCAiIiwgIiIsICAgICAiIiwgIiIsICAgICAgICAiIiwgIiIsICAgICAgICAi
IiwgIC8vIDB4NzAKLSAgICAgICAgICAiIiwgIiIsICIiLCAgICAgIiIsICIiLCAgICAgICAgIiIs
ICIiLCAgICAgICAgIlxcdTAwN2YiLAotICAgICAgICAgICAgLy8gQzEgKElTTyA4ODU5IGFuZCBV
bmljb2RlKSBleHRlbmRlZCBjb250cm9sIGNoYXJhY3RlcnMKLSAgICAgICAgICAgICJcXHUwMDgw
IiwgIlxcdTAwODEiLCAiXFx1MDA4MiIsICJcXHUwMDgzIiwgIC8vIDB4ODAKLSAgICAgICAgICAi
XFx1MDA4NCIsICJcXHUwMDg1IiwgIlxcdTAwODYiLCAiXFx1MDA4NyIsCi0gICAgICAgICAgIlxc
dTAwODgiLCAiXFx1MDA4OSIsICJcXHUwMDhhIiwgIlxcdTAwOGIiLAotICAgICAgICAgICJcXHUw
MDhjIiwgIlxcdTAwOGQiLCAiXFx1MDA4ZSIsICJcXHUwMDhmIiwKLSAgICAgICAgICAiXFx1MDA5
MCIsICJcXHUwMDkxIiwgIlxcdTAwOTIiLCAiXFx1MDA5MyIsICAvLyAweDkwCi0gICAgICAgICAg
IlxcdTAwOTQiLCAiXFx1MDA5NSIsICJcXHUwMDk2IiwgIlxcdTAwOTciLAotICAgICAgICAgICJc
XHUwMDk4IiwgIlxcdTAwOTkiLCAiXFx1MDA5YSIsICJcXHUwMDliIiwKLSAgICAgICAgICAiXFx1
MDA5YyIsICJcXHUwMDlkIiwgIlxcdTAwOWUiLCAiXFx1MDA5ZiIKLSAgICAgICAgfTsKLQotICAg
ICAgICBzdGF0aWMgSnNvbkZvcm1hdHRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgQ29tbW9uUmVwcmVzZW50YXRpb25zLkxlbmd0aDsgaSsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChDb21tb25SZXByZXNlbnRhdGlvbnNbaV0gPT0g
IiIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb21tb25SZXByZXNl
bnRhdGlvbnNbaV0gPSAoKGNoYXIpIGkpLlRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBTZXR0
aW5ncyBzZXR0aW5nczsKLQotICAgICAgICBwcml2YXRlIGJvb2wgRGlhZ25vc3RpY09ubHkgPT4g
UmVmZXJlbmNlRXF1YWxzKHRoaXMsIGRpYWdub3N0aWNGb3JtYXR0ZXIpOwotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENyZWF0ZXMgYSBuZXcgZm9ybWF0dGVkIHdpdGggdGhl
IGdpdmVuIHNldHRpbmdzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBh
cmFtIG5hbWU9InNldHRpbmdzIj5UaGUgc2V0dGluZ3MuPC9wYXJhbT4KLSAgICAgICAgcHVibGlj
IEpzb25Gb3JtYXR0ZXIoU2V0dGluZ3Mgc2V0dGluZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vIEZvcm1hdHMgdGhlIHNwZWNpZmllZCBtZXNzYWdlIGFzIEpTT04u
Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVzc2Fn
ZSI+VGhlIG1lc3NhZ2UgdG8gZm9ybWF0LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5U
aGUgZm9ybWF0dGVkIG1lc3NhZ2UuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RyaW5nIEZv
cm1hdChJTWVzc2FnZSBtZXNzYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVy
ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgICAgICAgRm9ybWF0KG1lc3NhZ2UsIHdyaXRl
cik7Ci0gICAgICAgICAgICByZXR1cm4gd3JpdGVyLlRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBGb3JtYXRzIHRoZSBzcGVjaWZpZWQg
bWVzc2FnZSBhcyBKU09OLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBh
cmFtIG5hbWU9Im1lc3NhZ2UiPlRoZSBtZXNzYWdlIHRvIGZvcm1hdC48L3BhcmFtPgotICAgICAg
ICAvLy8gPHBhcmFtIG5hbWU9IndyaXRlciI+VGhlIFRleHRXcml0ZXIgdG8gd3JpdGUgdGhlIGZv
cm1hdHRlZCBtZXNzYWdlIHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgZm9y
bWF0dGVkIG1lc3NhZ2UuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgdm9pZCBGb3JtYXQoSU1l
c3NhZ2UgbWVzc2FnZSwgVGV4dFdyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwobWVzc2FnZSwgbmFtZW9mKG1lc3NhZ2Up
KTsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwod3JpdGVyLCBu
YW1lb2Yod3JpdGVyKSk7Ci0KLSAgICAgICAgICAgIGlmIChtZXNzYWdlLkRlc2NyaXB0b3IuSXNX
ZWxsS25vd25UeXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFdyaXRlV2VsbEtu
b3duVHlwZVZhbHVlKHdyaXRlciwgbWVzc2FnZS5EZXNjcmlwdG9yLCBtZXNzYWdlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBXcml0ZU1lc3NhZ2Uod3JpdGVyLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbnZlcnRzIGEgbWVzc2Fn
ZSB0byBKU09OIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzIHdpdGggbm8gZXh0cmEgY29udGV4dC4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAv
Ly8gPHBhcmE+Ci0gICAgICAgIC8vLyBUaGlzIGRpZmZlcnMgZnJvbSBjYWxsaW5nIDxzZWUgY3Jl
Zj0iRm9ybWF0KElNZXNzYWdlKSIvPiBvbiB0aGUgZGVmYXVsdCBKU09OCi0gICAgICAgIC8vLyBm
b3JtYXR0ZXIgaW4gaXRzIGhhbmRsaW5nIG9mIDxzZWUgY3JlZj0iQW55Ii8+LiBBcyBubyB0eXBl
IHJlZ2lzdHJ5IGlzIGF2YWlsYWJsZQotICAgICAgICAvLy8gaW4gPHNlZSBjcmVmPSJvYmplY3Qu
VG9TdHJpbmciLz4gY2FsbHMsIHRoZSBub3JtYWwgd2F5IG9mIHJlc29sdmluZyB0aGUgdHlwZSBv
ZgotICAgICAgICAvLy8gYW4gPGM+QW55PC9jPiBtZXNzYWdlIGNhbm5vdCBiZSBhcHBsaWVkLiBJ
bnN0ZWFkLCBhIEpTT04gcHJvcGVydHkgbmFtZWQgPGM+QHZhbHVlPC9jPgotICAgICAgICAvLy8g
aXMgaW5jbHVkZWQgd2l0aCB0aGUgYmFzZTY0IGRhdGEgZnJvbSB0aGUgPHNlZSBjcmVmPSJBbnku
VmFsdWUiLz4gcHJvcGVydHkgb2YgdGhlIG1lc3NhZ2UuCi0gICAgICAgIC8vLyA8L3BhcmE+Ci0g
ICAgICAgIC8vLyA8cGFyYT5UaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgaXMgb25s
eSBkZXNpZ25lZCB0byBiZSB1c2VkIGZvciBkaWFnbm9zdGljCi0gICAgICAgIC8vLyBwdXJwb3Nl
cy4gSXQgbWF5IG5vdCBiZSBwYXJzYWJsZSBieSA8c2VlIGNyZWY9Ikpzb25QYXJzZXIiLz4sIGFu
ZCBtYXkgbm90IGJlIHBhcnNhYmxlCi0gICAgICAgIC8vLyBieSBvdGhlciBQcm90b2NvbCBCdWZm
ZXIgaW1wbGVtZW50YXRpb25zLjwvcGFyYT4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAg
ICAgLy8vIDxwYXJhbSBuYW1lPSJtZXNzYWdlIj5UaGUgbWVzc2FnZSB0byBmb3JtYXQgZm9yIGRp
YWdub3N0aWMgcHVycG9zZXMuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSBkaWFn
bm9zdGljLW9ubHkgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZTwvcmV0dXJucz4K
LSAgICAgICAgcHVibGljIHN0YXRpYyBzdHJpbmcgVG9EaWFnbm9zdGljU3RyaW5nKElNZXNzYWdl
IG1lc3NhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVj
a05vdE51bGwobWVzc2FnZSwgbmFtZW9mKG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybiBk
aWFnbm9zdGljRm9ybWF0dGVyLkZvcm1hdChtZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHByaXZhdGUgdm9pZCBXcml0ZU1lc3NhZ2UoVGV4dFdyaXRlciB3cml0ZXIsIElNZXNzYWdlIG1l
c3NhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlID09IG51bGwpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV3JpdGVOdWxsKHdyaXRlcik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKERpYWdub3N0aWNP
bmx5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElDdXN0b21EaWFnbm9zdGljTWVz
c2FnZSBjdXN0b21EaWFnbm9zdGljTWVzc2FnZSA9IG1lc3NhZ2UgYXMgSUN1c3RvbURpYWdub3N0
aWNNZXNzYWdlOwotICAgICAgICAgICAgICAgIGlmIChjdXN0b21EaWFnbm9zdGljTWVzc2FnZSAh
PSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLldy
aXRlKGN1c3RvbURpYWdub3N0aWNNZXNzYWdlLlRvRGlhZ25vc3RpY1N0cmluZygpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHdyaXRlci5Xcml0ZSgieyAiKTsKLSAgICAgICAgICAgIGJvb2wgd3JpdHRl
bkZpZWxkcyA9IFdyaXRlTWVzc2FnZUZpZWxkcyh3cml0ZXIsIG1lc3NhZ2UsIGZhbHNlKTsKLSAg
ICAgICAgICAgIHdyaXRlci5Xcml0ZSh3cml0dGVuRmllbGRzID8gIiB9IiA6ICJ9Iik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2wgV3JpdGVNZXNzYWdlRmllbGRzKFRleHRXcml0
ZXIgd3JpdGVyLCBJTWVzc2FnZSBtZXNzYWdlLCBib29sIGFzc3VtZUZpcnN0RmllbGRXcml0dGVu
KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZmllbGRzID0gbWVzc2FnZS5EZXNjcmlwdG9y
LkZpZWxkczsKLSAgICAgICAgICAgIGJvb2wgZmlyc3QgPSAhYXNzdW1lRmlyc3RGaWVsZFdyaXR0
ZW47Ci0gICAgICAgICAgICAvLyBGaXJzdCBub24tb25lb2YgZmllbGRzCi0gICAgICAgICAgICBm
b3JlYWNoICh2YXIgZmllbGQgaW4gZmllbGRzLkluRmllbGROdW1iZXJPcmRlcigpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHZhciBhY2Nlc3NvciA9IGZpZWxkLkFjY2Vzc29yOwot
ICAgICAgICAgICAgICAgIGlmIChmaWVsZC5Db250YWluaW5nT25lb2YgIT0gbnVsbCAmJiBmaWVs
ZC5Db250YWluaW5nT25lb2YuQWNjZXNzb3IuR2V0Q2FzZUZpZWxkRGVzY3JpcHRvcihtZXNzYWdl
KSAhPSBmaWVsZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBPbWl0IGRlZmF1bHQg
dmFsdWVzIHVubGVzcyB3ZSdyZSBhc2tlZCB0byBmb3JtYXQgdGhlbSwgb3IgdGhleSdyZSBvbmVv
ZnMgKHdoZXJlIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgc3RpbGwg
Zm9ybWF0dGVkIHJlZ2FyZGxlc3MsIGJlY2F1c2UgdGhhdCdzIGhvdyB3ZSBwcmVzZXJ2ZSB0aGUg
b25lb2YgY2FzZSkuCi0gICAgICAgICAgICAgICAgb2JqZWN0IHZhbHVlID0gYWNjZXNzb3IuR2V0
VmFsdWUobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpZWxkLkNvbnRhaW5pbmdPbmVv
ZiA9PSBudWxsICYmICFzZXR0aW5ncy5Gb3JtYXREZWZhdWx0VmFsdWVzICYmIElzRGVmYXVsdFZh
bHVlKGFjY2Vzc29yLCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBP
a2F5LCBhbGwgdGVzdHMgY29tcGxldGU6IGxldCdzIHdyaXRlIHRoZSBmaWVsZCB2YWx1ZS4uLgot
ICAgICAgICAgICAgICAgIGlmICghZmlyc3QpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuV3JpdGUoUHJvcGVydHlTZXBhcmF0b3IpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIFdyaXRlU3RyaW5nKHdyaXRlciwgYWNjZXNzb3IuRGVz
Y3JpcHRvci5Kc29uTmFtZSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKE5hbWVWYWx1
ZVNlcGFyYXRvcik7Ci0gICAgICAgICAgICAgICAgV3JpdGVWYWx1ZSh3cml0ZXIsIHZhbHVlKTsK
LQotICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gIWZpcnN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gQ2FtZWwtY2FzZSBjb252ZXJ0ZXIgd2l0aCBhZGRlZCBzdHJpY3RuZXNzIGZv
ciBmaWVsZCBtYXNrIGZvcm1hdHRpbmcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkludmFsaWRPcGVyYXRpb25FeGNlcHRpb24iPlRoZSBmaWVs
ZCBtYXNrIGlzIGludmFsaWQgZm9yIEpTT04gcmVwcmVzZW50YXRpb248L2V4Y2VwdGlvbj4KLSAg
ICAgICAgcHJpdmF0ZSBzdGF0aWMgc3RyaW5nIFRvQ2FtZWxDYXNlRm9yRmllbGRNYXNrKHN0cmlu
ZyBpbnB1dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1
dC5MZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaGFyIGMgPSBp
bnB1dFtpXTsKLSAgICAgICAgICAgICAgICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJh
dGlvbkV4Y2VwdGlvbigkIkludmFsaWQgZmllbGQgbWFzayB0byBiZSBjb252ZXJ0ZWQgdG8gSlNP
Tjoge2lucHV0fSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYyA9
PSAnXycgJiYgaSA8IGlucHV0Lkxlbmd0aCAtIDEpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBjaGFyIG5leHQgPSBpbnB1dFtpICsgMV07Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChuZXh0IDwgJ2EnIHx8IG5leHQgPiAneicpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0
aW9uKCQiSW52YWxpZCBmaWVsZCBtYXNrIHRvIGJlIGNvbnZlcnRlZCB0byBKU09OOiB7aW5wdXR9
Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gVG9DYW1lbENhc2UoaW5wdXQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gQ29udmVydGVkIGZyb20gc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVy
bmFsL3V0aWxpdHkuY2MgVG9DYW1lbENhc2UKLSAgICAgICAgLy8gVE9ETzogVXNlIHRoZSBuZXcg
ZmllbGQgaW4gRmllbGREZXNjcmlwdG9yLgotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgc3RyaW5n
IFRvQ2FtZWxDYXNlKHN0cmluZyBpbnB1dCkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCBj
YXBpdGFsaXplTmV4dCA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCB3YXNDYXAgPSB0cnVlOwot
ICAgICAgICAgICAgYm9vbCBpc0NhcCA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBmaXJzdFdv
cmQgPSB0cnVlOwotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5n
QnVpbGRlcihpbnB1dC5MZW5ndGgpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGlucHV0Lkxlbmd0aDsgaSsrLCB3YXNDYXAgPSBpc0NhcCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpc0NhcCA9IGNoYXIuSXNVcHBlcihpbnB1dFtpXSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlucHV0W2ldID09ICdfJykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhcGl0YWxpemVOZXh0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5MZW5ndGggIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZmlyc3RXb3JkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGZpcnN0V29yZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIENvbnNpZGVyIHdoZW4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIEIgaXMgY2FwaXRh
bGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IHdvcmQgZW5kcyB3aGVuOgotICAg
ICAgICAgICAgICAgICAgICAvLyAxKSBmb2xsb3dpbmcgYSBsb3dlcmNhc2U6ICAgIi4uLmFCLi4u
IgotICAgICAgICAgICAgICAgICAgICAvLyAyKSBmb2xsb3dlZCBieSBhIGxvd2VyY2FzZTogIi4u
LkFCYy4uLiIKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5MZW5ndGggIT0gMCAmJiBp
c0NhcCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgKCF3YXNDYXAgfHwgKGkgKyAxIDwgaW5w
dXQuTGVuZ3RoICYmIGNoYXIuSXNMb3dlcihpbnB1dFtpICsgMV0pKSkpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0V29yZCA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LkFwcGVuZChjaGFyLlRv
TG93ZXJJbnZhcmlhbnQoaW5wdXRbaV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNhcGl0YWxpemVOZXh0KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FwaXRhbGl6ZU5leHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoYXIuSXNMb3dlcihpbnB1dFtpXSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5BcHBlbmQoY2hhci5Ub1VwcGVySW52YXJpYW50
KGlucHV0W2ldKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHQu
QXBwZW5kKGlucHV0W2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQuVG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBzdGF0
aWMgdm9pZCBXcml0ZU51bGwoVGV4dFdyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHdyaXRlci5Xcml0ZSgibnVsbCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBz
dGF0aWMgYm9vbCBJc0RlZmF1bHRWYWx1ZShJRmllbGRBY2Nlc3NvciBhY2Nlc3Nvciwgb2JqZWN0
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzb3IuRGVzY3JpcHRvci5J
c01hcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJRGljdGlvbmFyeSBkaWN0aW9u
YXJ5ID0gKElEaWN0aW9uYXJ5KSB2YWx1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGljdGlv
bmFyeS5Db3VudCA9PSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFjY2Vzc29y
LkRlc2NyaXB0b3IuSXNSZXBlYXRlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJ
TGlzdCBsaXN0ID0gKElMaXN0KSB2YWx1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbGlzdC5D
b3VudCA9PSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3Nvci5E
ZXNjcmlwdG9yLkZpZWxkVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNl
IEZpZWxkVHlwZS5Cb29sOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGJvb2wpIHZhbHVl
ID09IGZhbHNlOwotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkJ5dGVzOgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKEJ5dGVTdHJpbmcpIHZhbHVlID09IEJ5dGVTdHJpbmcuRW1w
dHk7Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuU3RyaW5nOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKHN0cmluZykgdmFsdWUgPT0gIiI7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBGaWVsZFR5cGUuRG91YmxlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGRvdWJsZSkg
dmFsdWUgPT0gMC4wOwotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLlNJbnQzMjoKLSAg
ICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5JbnQzMjoKLSAgICAgICAgICAgICAgICBjYXNl
IEZpZWxkVHlwZS5TRml4ZWQzMjoKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5FbnVt
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludCkgdmFsdWUgPT0gMDsKLSAgICAgICAg
ICAgICAgICBjYXNlIEZpZWxkVHlwZS5GaXhlZDMyOgotICAgICAgICAgICAgICAgIGNhc2UgRmll
bGRUeXBlLlVJbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1aW50KSB2YWx1ZSA9
PSAwOwotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkZpeGVkNjQ6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBGaWVsZFR5cGUuVUludDY0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KHVsb25nKSB2YWx1ZSA9PSAwOwotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLlNGaXhl
ZDY0OgotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkludDY0OgotICAgICAgICAgICAg
ICAgIGNhc2UgRmllbGRUeXBlLlNJbnQ2NDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChs
b25nKSB2YWx1ZSA9PSAwOwotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkZsb2F0Ogot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGZsb2F0KSB2YWx1ZSA9PSAwZjsKLSAgICAgICAg
ICAgICAgICBjYXNlIEZpZWxkVHlwZS5NZXNzYWdlOgotICAgICAgICAgICAgICAgIGNhc2UgRmll
bGRUeXBlLkdyb3VwOiAvLyBOZXZlciBleHBlY3QgdG8gZ2V0IHRoaXMsIGJ1dC4uLgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbDsKLSAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oIklu
dmFsaWQgZmllbGQgdHlwZSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBwcml2YXRlIHZvaWQgV3JpdGVWYWx1ZShUZXh0V3JpdGVyIHdyaXRlciwgb2JqZWN0
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBXcml0ZU51bGwod3JpdGVyKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlIGlzIGJvb2wpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKChib29sKXZhbHVlID8gInRydWUiIDogImZhbHNl
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSBpcyBCeXRlU3Ry
aW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIE5vdGhpbmcgaW4gQmFzZTY0
IG5lZWRzIGVzY2FwaW5nCi0gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKCciJyk7Ci0gICAg
ICAgICAgICAgICAgd3JpdGVyLldyaXRlKCgoQnl0ZVN0cmluZyl2YWx1ZSkuVG9CYXNlNjQoKSk7
Ci0gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKCciJyk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZSBpcyBzdHJpbmcpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgV3JpdGVTdHJpbmcod3JpdGVyLCAoc3RyaW5nKXZhbHVlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlIGlzIElEaWN0aW9uYXJ5KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIFdyaXRlRGljdGlvbmFyeSh3cml0ZXIsIChJRGljdGlvbmFy
eSl2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSBpcyBJ
TGlzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBXcml0ZUxpc3Qod3JpdGVyLCAo
SUxpc3QpdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUg
aXMgaW50IHx8IHZhbHVlIGlzIHVpbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
SUZvcm1hdHRhYmxlIGZvcm1hdHRhYmxlID0gKElGb3JtYXR0YWJsZSkgdmFsdWU7Ci0gICAgICAg
ICAgICAgICAgd3JpdGVyLldyaXRlKGZvcm1hdHRhYmxlLlRvU3RyaW5nKCJkIiwgQ3VsdHVyZUlu
Zm8uSW52YXJpYW50Q3VsdHVyZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAodmFsdWUgaXMgbG9uZyB8fCB2YWx1ZSBpcyB1bG9uZykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB3cml0ZXIuV3JpdGUoJyInKTsKLSAgICAgICAgICAgICAgICBJRm9ybWF0dGFi
bGUgZm9ybWF0dGFibGUgPSAoSUZvcm1hdHRhYmxlKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB3
cml0ZXIuV3JpdGUoZm9ybWF0dGFibGUuVG9TdHJpbmcoImQiLCBDdWx0dXJlSW5mby5JbnZhcmlh
bnRDdWx0dXJlKSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKCciJyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSBpcyBTeXN0ZW0uRW51bSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdHJpbmcgbmFtZSA9IE9yaWdpbmFsRW51bVZhbHVl
SGVscGVyLkdldE9yaWdpbmFsTmFtZSh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUg
IT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFdyaXRlU3Ry
aW5nKHdyaXRlciwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFdyaXRlVmFsdWUod3Jp
dGVyLCAoaW50KXZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZSBpcyBmbG9hdCB8fCB2YWx1ZSBpcyBkb3VibGUpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RyaW5nIHRleHQgPSAoKElGb3JtYXR0YWJsZSkg
dmFsdWUpLlRvU3RyaW5nKCJyIiwgQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRleHQgPT0gIk5hTiIgfHwgdGV4dCA9PSAiSW5maW5pdHkiIHx8IHRl
eHQgPT0gIi1JbmZpbml0eSIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuV3JpdGUoJyInKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKHRl
eHQpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIuV3JpdGUoJyInKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLldyaXRlKHRleHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlIGlzIElNZXNzYWdlKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIElNZXNzYWdlIG1lc3NhZ2UgPSAoSU1lc3NhZ2UpIHZh
bHVlOwotICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLkRlc2NyaXB0b3IuSXNXZWxsS25vd25U
eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgV3JpdGVXZWxsS25v
d25UeXBlVmFsdWUod3JpdGVyLCBtZXNzYWdlLkRlc2NyaXB0b3IsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgV3JpdGVNZXNzYWdlKHdyaXRlciwgKElNZXNzYWdlKXZhbHVlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJVbmFi
bGUgdG8gZm9ybWF0IHZhbHVlIG9mIHR5cGUgIiArIHZhbHVlLkdldFR5cGUoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBD
ZW50cmFsIGludGVyY2VwdGlvbiBwb2ludCBmb3Igd2VsbC1rbm93biB0eXBlIGZvcm1hdHRpbmcu
IEFueSB3ZWxsLWtub3duIHR5cGVzIHdoaWNoCi0gICAgICAgIC8vLyBkb24ndCBuZWVkIHNwZWNp
YWwgaGFuZGxpbmcgY2FuIGZhbGwgYmFjayB0byBXcml0ZU1lc3NhZ2UuIFdlIGF2b2lkIGFzc3Vt
aW5nIHRoYXQgdGhlCi0gICAgICAgIC8vLyB2YWx1ZXMgYXJlIHVzaW5nIHRoZSBlbWJlZGRlZCB3
ZWxsLWtub3duIHR5cGVzLCBpbiBvcmRlciB0byBhbGxvdyBmb3IgZHluYW1pYyBtZXNzYWdlcwot
ICAgICAgICAvLy8gaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgcHJpdmF0ZSB2b2lkIFdyaXRlV2VsbEtub3duVHlwZVZhbHVlKFRleHRXcml0ZXIgd3JpdGVy
LCBNZXNzYWdlRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBvYmplY3QgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgd2UgY2FuIG5ldmVyIGFjdHVhbGx5IGdldCBoZXJl
LCBiZWNhdXNlIG51bGwgdmFsdWVzIGFyZSBhbHdheXMgaGFuZGxlZCBieSB0aGUgY2FsbGVyLiBC
dXQgaWYgd2UgKmNvdWxkKiwKLSAgICAgICAgICAgIC8vIHRoaXMgd291bGQgZG8gdGhlIHJpZ2h0
IHRoaW5nLgotICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgV3JpdGVOdWxsKHdyaXRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gRm9yIHdyYXBwZXIgdHlwZXMsIHRoZSB2
YWx1ZSB3aWxsIGVpdGhlciBiZSB0aGUgKHBvc3NpYmx5IGJveGVkKSAibmF0aXZlIiB2YWx1ZSwK
LSAgICAgICAgICAgIC8vIG9yIHRoZSBtZXNzYWdlIGl0c2VsZiBpZiB3ZSdyZSBmb3JtYXR0aW5n
IGl0IGF0IHRoZSB0b3AgbGV2ZWwgKGUuZy4ganVzdCBjYWxsaW5nIFRvU3RyaW5nIG9uIHRoZSBv
YmplY3QgaXRzZWxmKS4KLSAgICAgICAgICAgIC8vIElmIGl0J3MgdGhlIG1lc3NhZ2UgZm9ybSwg
d2UgY2FuIGV4dHJhY3QgdGhlIHZhbHVlIGZpcnN0LCB3aGljaCAqd2lsbCogYmUgdGhlIChwb3Nz
aWJseSBib3hlZCkgbmF0aXZlIHZhbHVlLAotICAgICAgICAgICAgLy8gYW5kIHRoZW4gcHJvY2Vl
ZCwgd3JpdGluZyBpdCBhcyBpZiB3ZSB3ZXJlIGRlZmluaXRlbHkgaW4gYSBmaWVsZC4gKFdlIG5l
dmVyIG5lZWQgdG8gd3JhcCBpdCBpbiBhbiBleHRyYSBzdHJpbmcuLi4KLSAgICAgICAgICAgIC8v
IFdyaXRlVmFsdWUgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcuKQotICAgICAgICAgICAgaWYgKGRl
c2NyaXB0b3IuSXNXcmFwcGVyVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAodmFsdWUgaXMgSU1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgbWVzc2FnZSA9IChJTWVzc2FnZSkgdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gbWVzc2FnZS5EZXNjcmlwdG9yLkZpZWxkc1tXcmFwcGVyc1JlZmxlY3Rpb24uV3Jh
cHBlclZhbHVlRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKG1lc3NhZ2UpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBXcml0ZVZhbHVlKHdyaXRlciwgdmFsdWUpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChk
ZXNjcmlwdG9yLkZ1bGxOYW1lID09IFRpbWVzdGFtcC5EZXNjcmlwdG9yLkZ1bGxOYW1lKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIFdyaXRlVGltZXN0YW1wKHdyaXRlciwgKElNZXNz
YWdlKXZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci5GdWxsTmFtZSA9PSBEdXJhdGlvbi5EZXNjcmlwdG9yLkZ1
bGxOYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFdyaXRlRHVyYXRpb24od3Jp
dGVyLCAoSU1lc3NhZ2UpdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLkZ1bGxOYW1lID09IEZpZWxkTWFzay5E
ZXNjcmlwdG9yLkZ1bGxOYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFdyaXRl
RmllbGRNYXNrKHdyaXRlciwgKElNZXNzYWdlKXZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5GdWxsTmFtZSA9
PSBTdHJ1Y3QuRGVzY3JpcHRvci5GdWxsTmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBXcml0ZVN0cnVjdCh3cml0ZXIsIChJTWVzc2FnZSl2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuRnVs
bE5hbWUgPT0gTGlzdFZhbHVlLkRlc2NyaXB0b3IuRnVsbE5hbWUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGZpZWxkQWNjZXNzb3IgPSBkZXNjcmlwdG9yLkZpZWxkc1tMaXN0
VmFsdWUuVmFsdWVzRmllbGROdW1iZXJdLkFjY2Vzc29yOwotICAgICAgICAgICAgICAgIFdyaXRl
TGlzdCh3cml0ZXIsIChJTGlzdClmaWVsZEFjY2Vzc29yLkdldFZhbHVlKChJTWVzc2FnZSl2YWx1
ZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChkZXNjcmlwdG9yLkZ1bGxOYW1lID09IFZhbHVlLkRlc2NyaXB0b3IuRnVsbE5hbWUpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV3JpdGVTdHJ1Y3RGaWVsZFZhbHVlKHdyaXRl
ciwgKElNZXNzYWdlKXZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5GdWxsTmFtZSA9PSBBbnkuRGVzY3JpcHRv
ci5GdWxsTmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBXcml0ZUFueSh3cml0
ZXIsIChJTWVzc2FnZSl2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgV3JpdGVNZXNzYWdlKHdyaXRlciwgKElNZXNzYWdlKXZhbHVlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBXcml0ZVRpbWVzdGFtcChUZXh0V3Jp
dGVyIHdyaXRlciwgSU1lc3NhZ2UgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRP
RE86IEluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGlzICppcyogdXNpbmcgdGhlIGJ1aWx0LWlu
IFRpbWVzdGFtcCB0eXBlLCB3ZSBjb3VsZAotICAgICAgICAgICAgLy8gYXZvaWQgYWxsIHRoZSBy
ZWZsZWN0aW9uIGF0IHRoaXMgcG9pbnQsIGJ5IGNhc3RpbmcgdG8gVGltZXN0YW1wLiBJbiB0aGUg
aW50ZXJlc3RzIG9mCi0gICAgICAgICAgICAvLyBhdm9pZGluZyBzdWJ0bGUgYnVncywgZG9uJ3Qg
ZG8gdGhhdCB1bnRpbCB3ZSd2ZSBpbXBsZW1lbnRlZCBEeW5hbWljTWVzc2FnZSBzbyB0aGF0IHdl
IGNhbiBwcm92ZQotICAgICAgICAgICAgLy8gaXQgc3RpbGwgd29ya3MgaW4gdGhhdCBjYXNlLgot
ICAgICAgICAgICAgaW50IG5hbm9zID0gKGludCkgdmFsdWUuRGVzY3JpcHRvci5GaWVsZHNbVGlt
ZXN0YW1wLk5hbm9zRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgICAgIGxvbmcgc2Vjb25kcyA9IChsb25nKSB2YWx1ZS5EZXNjcmlwdG9yLkZpZWxkc1tUaW1l
c3RhbXAuU2Vjb25kc0ZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5HZXRWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgICAgICB3cml0ZXIuV3JpdGUoVGltZXN0YW1wLlRvSnNvbihzZWNvbmRzLCBuYW5vcywgRGlh
Z25vc3RpY09ubHkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBXcml0ZUR1
cmF0aW9uKFRleHRXcml0ZXIgd3JpdGVyLCBJTWVzc2FnZSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gVE9ETzogU2FtZSBhcyBmb3IgV3JpdGVUaW1lc3RhbXAKLSAgICAgICAgICAg
IGludCBuYW5vcyA9IChpbnQpIHZhbHVlLkRlc2NyaXB0b3IuRmllbGRzW0R1cmF0aW9uLk5hbm9z
RmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIGxvbmcg
c2Vjb25kcyA9IChsb25nKSB2YWx1ZS5EZXNjcmlwdG9yLkZpZWxkc1tEdXJhdGlvbi5TZWNvbmRz
RmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIHdyaXRl
ci5Xcml0ZShEdXJhdGlvbi5Ub0pzb24oc2Vjb25kcywgbmFub3MsIERpYWdub3N0aWNPbmx5KSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgV3JpdGVGaWVsZE1hc2soVGV4dFdy
aXRlciB3cml0ZXIsIElNZXNzYWdlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
cGF0aHMgPSAoSUxpc3Q8c3RyaW5nPikgdmFsdWUuRGVzY3JpcHRvci5GaWVsZHNbRmllbGRNYXNr
LlBhdGhzRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAg
IHdyaXRlci5Xcml0ZShGaWVsZE1hc2suVG9Kc29uKHBhdGhzLCBEaWFnbm9zdGljT25seSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIFdyaXRlQW55KFRleHRXcml0ZXIgd3Jp
dGVyLCBJTWVzc2FnZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKERpYWdub3N0
aWNPbmx5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFdyaXRlRGlhZ25vc3RpY09u
bHlBbnkod3JpdGVyLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzdHJpbmcgdHlwZVVybCA9IChzdHJpbmcpIHZhbHVlLkRlc2Ny
aXB0b3IuRmllbGRzW0FueS5UeXBlVXJsRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKHZh
bHVlKTsKLSAgICAgICAgICAgIEJ5dGVTdHJpbmcgZGF0YSA9IChCeXRlU3RyaW5nKSB2YWx1ZS5E
ZXNjcmlwdG9yLkZpZWxkc1tBbnkuVmFsdWVGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUo
dmFsdWUpOwotICAgICAgICAgICAgc3RyaW5nIHR5cGVOYW1lID0gQW55LkdldFR5cGVOYW1lKHR5
cGVVcmwpOwotICAgICAgICAgICAgTWVzc2FnZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHNldHRp
bmdzLlR5cGVSZWdpc3RyeS5GaW5kKHR5cGVOYW1lKTsKLSAgICAgICAgICAgIGlmIChkZXNjcmlw
dG9yID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElu
dmFsaWRPcGVyYXRpb25FeGNlcHRpb24oJCJUeXBlIHJlZ2lzdHJ5IGhhcyBubyBkZXNjcmlwdG9y
IGZvciB0eXBlIG5hbWUgJ3t0eXBlTmFtZX0nIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBJTWVzc2FnZSBtZXNzYWdlID0gZGVzY3JpcHRvci5QYXJzZXIuUGFyc2VGcm9tKGRhdGEpOwot
ICAgICAgICAgICAgd3JpdGVyLldyaXRlKCJ7ICIpOwotICAgICAgICAgICAgV3JpdGVTdHJpbmco
d3JpdGVyLCBBbnlUeXBlVXJsRmllbGQpOwotICAgICAgICAgICAgd3JpdGVyLldyaXRlKE5hbWVW
YWx1ZVNlcGFyYXRvcik7Ci0gICAgICAgICAgICBXcml0ZVN0cmluZyh3cml0ZXIsIHR5cGVVcmwp
OwotCi0gICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5Jc1dlbGxLbm93blR5cGUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKFByb3BlcnR5U2VwYXJhdG9yKTsK
LSAgICAgICAgICAgICAgICBXcml0ZVN0cmluZyh3cml0ZXIsIEFueVdlbGxLbm93blR5cGVWYWx1
ZUZpZWxkKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIuV3JpdGUoTmFtZVZhbHVlU2VwYXJhdG9y
KTsKLSAgICAgICAgICAgICAgICBXcml0ZVdlbGxLbm93blR5cGVWYWx1ZSh3cml0ZXIsIGRlc2Ny
aXB0b3IsIG1lc3NhZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIFdyaXRlTWVzc2FnZUZpZWxkcyh3cml0ZXIsIG1lc3Nh
Z2UsIHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd3JpdGVyLldyaXRlKCIgfSIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIFdyaXRlRGlhZ25vc3RpY09ubHlB
bnkoVGV4dFdyaXRlciB3cml0ZXIsIElNZXNzYWdlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzdHJpbmcgdHlwZVVybCA9IChzdHJpbmcpIHZhbHVlLkRlc2NyaXB0b3IuRmllbGRzW0Fu
eS5UeXBlVXJsRmllbGROdW1iZXJdLkFjY2Vzc29yLkdldFZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ICAgIEJ5dGVTdHJpbmcgZGF0YSA9IChCeXRlU3RyaW5nKSB2YWx1ZS5EZXNjcmlwdG9yLkZpZWxk
c1tBbnkuVmFsdWVGaWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUodmFsdWUpOwotICAgICAg
ICAgICAgd3JpdGVyLldyaXRlKCJ7ICIpOwotICAgICAgICAgICAgV3JpdGVTdHJpbmcod3JpdGVy
LCBBbnlUeXBlVXJsRmllbGQpOwotICAgICAgICAgICAgd3JpdGVyLldyaXRlKE5hbWVWYWx1ZVNl
cGFyYXRvcik7Ci0gICAgICAgICAgICBXcml0ZVN0cmluZyh3cml0ZXIsIHR5cGVVcmwpOwotICAg
ICAgICAgICAgd3JpdGVyLldyaXRlKFByb3BlcnR5U2VwYXJhdG9yKTsKLSAgICAgICAgICAgIFdy
aXRlU3RyaW5nKHdyaXRlciwgQW55RGlhZ25vc3RpY1ZhbHVlRmllbGQpOwotICAgICAgICAgICAg
d3JpdGVyLldyaXRlKE5hbWVWYWx1ZVNlcGFyYXRvcik7Ci0gICAgICAgICAgICB3cml0ZXIuV3Jp
dGUoJyInKTsKLSAgICAgICAgICAgIHdyaXRlci5Xcml0ZShkYXRhLlRvQmFzZTY0KCkpOwotICAg
ICAgICAgICAgd3JpdGVyLldyaXRlKCciJyk7Ci0gICAgICAgICAgICB3cml0ZXIuV3JpdGUoIiB9
Iik7Ci0gICAgICAgIH0gICAgICAgIAotCi0gICAgICAgIHByaXZhdGUgdm9pZCBXcml0ZVN0cnVj
dChUZXh0V3JpdGVyIHdyaXRlciwgSU1lc3NhZ2UgbWVzc2FnZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgd3JpdGVyLldyaXRlKCJ7ICIpOwotICAgICAgICAgICAgSURpY3Rpb25hcnkgZmllbGRz
ID0gKElEaWN0aW9uYXJ5KSBtZXNzYWdlLkRlc2NyaXB0b3IuRmllbGRzW1N0cnVjdC5GaWVsZHNG
aWVsZE51bWJlcl0uQWNjZXNzb3IuR2V0VmFsdWUobWVzc2FnZSk7Ci0gICAgICAgICAgICBib29s
IGZpcnN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvcmVhY2ggKERpY3Rpb25hcnlFbnRyeSBlbnRy
eSBpbiBmaWVsZHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RyaW5nIGtleSA9
IChzdHJpbmcpIGVudHJ5LktleTsKLSAgICAgICAgICAgICAgICBJTWVzc2FnZSB2YWx1ZSA9IChJ
TWVzc2FnZSkgZW50cnkuVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxP
ckVtcHR5KGtleSkgfHwgdmFsdWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHJ1Y3Qg
ZmllbGRzIGNhbm5vdCBoYXZlIGFuIGVtcHR5IGtleSBvciBhIG51bGwgdmFsdWUuIik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5Xcml0ZShQcm9wZXJ0eVNlcGFyYXRv
cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFdyaXRlU3RyaW5nKHdyaXRl
ciwga2V5KTsKLSAgICAgICAgICAgICAgICB3cml0ZXIuV3JpdGUoTmFtZVZhbHVlU2VwYXJhdG9y
KTsKLSAgICAgICAgICAgICAgICBXcml0ZVN0cnVjdEZpZWxkVmFsdWUod3JpdGVyLCB2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHdyaXRlci5Xcml0ZShmaXJzdCA/ICJ9IiA6ICIgfSIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcHJpdmF0ZSB2b2lkIFdyaXRlU3RydWN0RmllbGRWYWx1ZShUZXh0V3JpdGVyIHdyaXRlciwg
SU1lc3NhZ2UgbWVzc2FnZSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHNwZWNpZmllZEZp
ZWxkID0gbWVzc2FnZS5EZXNjcmlwdG9yLk9uZW9mc1swXS5BY2Nlc3Nvci5HZXRDYXNlRmllbGRE
ZXNjcmlwdG9yKG1lc3NhZ2UpOwotICAgICAgICAgICAgaWYgKHNwZWNpZmllZEZpZWxkID09IG51
bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVy
YXRpb25FeGNlcHRpb24oIlZhbHVlIG1lc3NhZ2UgbXVzdCBjb250YWluIGEgdmFsdWUgZm9yIHRo
ZSBvbmVvZi4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb2JqZWN0IHZhbHVlID0g
c3BlY2lmaWVkRmllbGQuQWNjZXNzb3IuR2V0VmFsdWUobWVzc2FnZSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHN3aXRjaCAoc3BlY2lmaWVkRmllbGQuRmllbGROdW1iZXIpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZS5Cb29sVmFsdWVGaWVsZE51bWJlcjoK
LSAgICAgICAgICAgICAgICBjYXNlIFZhbHVlLlN0cmluZ1ZhbHVlRmllbGROdW1iZXI6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBWYWx1ZS5OdW1iZXJWYWx1ZUZpZWxkTnVtYmVyOgotICAgICAgICAg
ICAgICAgICAgICBXcml0ZVZhbHVlKHdyaXRlciwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2FzZSBWYWx1ZS5TdHJ1Y3RWYWx1ZUZpZWxkTnVt
YmVyOgotICAgICAgICAgICAgICAgIGNhc2UgVmFsdWUuTGlzdFZhbHVlRmllbGROdW1iZXI6Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFN0cnVjdHMgYW5kIExpc3RWYWx1ZXMgYXJlIG5lc3RlZCBt
ZXNzYWdlcywgYW5kIGFscmVhZHkgd2VsbC1rbm93biB0eXBlcy4KLSAgICAgICAgICAgICAgICAg
ICAgdmFyIG5lc3RlZE1lc3NhZ2UgPSAoSU1lc3NhZ2UpIHNwZWNpZmllZEZpZWxkLkFjY2Vzc29y
LkdldFZhbHVlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBXcml0ZVdlbGxLbm93blR5
cGVWYWx1ZSh3cml0ZXIsIG5lc3RlZE1lc3NhZ2UuRGVzY3JpcHRvciwgbmVzdGVkTWVzc2FnZSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjYXNlIFZhbHVl
Lk51bGxWYWx1ZUZpZWxkTnVtYmVyOgotICAgICAgICAgICAgICAgICAgICBXcml0ZU51bGwod3Jp
dGVyKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0
aW9uKCJVbmV4cGVjdGVkIGNhc2UgaW4gc3RydWN0IGZpZWxkOiAiICsgc3BlY2lmaWVkRmllbGQu
RmllbGROdW1iZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50ZXJu
YWwgdm9pZCBXcml0ZUxpc3QoVGV4dFdyaXRlciB3cml0ZXIsIElMaXN0IGxpc3QpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHdyaXRlci5Xcml0ZSgiWyAiKTsKLSAgICAgICAgICAgIGJvb2wgZmly
c3QgPSB0cnVlOwotICAgICAgICAgICAgZm9yZWFjaCAodmFyIHZhbHVlIGluIGxpc3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5Xcml0ZShQcm9wZXJ0eVNlcGFyYXRvcik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFdyaXRlVmFsdWUod3JpdGVyLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHdyaXRlci5Xcml0ZShmaXJzdCA/ICJdIiA6ICIgXSIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaW50ZXJuYWwgdm9pZCBXcml0ZURpY3Rpb25hcnkoVGV4dFdyaXRlciB3cml0ZXIsIElE
aWN0aW9uYXJ5IGRpY3Rpb25hcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdyaXRlci5Xcml0
ZSgieyAiKTsKLSAgICAgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgICAgICAgICAgLy8g
VGhpcyB3aWxsIGJveCBlYWNoIHBhaXIuIENvdWxkIHVzZSBJRGljdGlvbmFyeUVudW1lcmF0b3Is
IGJ1dCB0aGF0J3MgdWdseSBpbiB0ZXJtcyBvZiBkaXNwb3NhbC4KLSAgICAgICAgICAgIGZvcmVh
Y2ggKERpY3Rpb25hcnlFbnRyeSBwYWlyIGluIGRpY3Rpb25hcnkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5Xcml0ZShQcm9wZXJ0eVNlcGFyYXRvcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHN0cmluZyBrZXlUZXh0OwotICAgICAgICAgICAgICAgIGlm
IChwYWlyLktleSBpcyBzdHJpbmcpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBrZXlUZXh0ID0gKHN0cmluZykgcGFpci5LZXk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHBhaXIuS2V5IGlzIGJvb2wpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBrZXlUZXh0ID0gKGJvb2wpIHBhaXIuS2V5ID8gInRydWUi
IDogImZhbHNlIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
cGFpci5LZXkgaXMgaW50IHx8IHBhaXIuS2V5IGlzIHVpbnQgfCBwYWlyLktleSBpcyBsb25nIHx8
IHBhaXIuS2V5IGlzIHVsb25nKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAga2V5VGV4dCA9ICgoSUZvcm1hdHRhYmxlKSBwYWlyLktleSkuVG9TdHJpbmcoImQiLCBDdWx0
dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBh
aXIuS2V5ID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiRGljdGlvbmFyeSBoYXMgZW50cnkg
d2l0aCBudWxsIGtleSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiVW5oYW5kbGVkIGRpY3Rpb25hcnkga2V5
IHR5cGU6ICIgKyBwYWlyLktleS5HZXRUeXBlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBXcml0ZVN0cmluZyh3cml0ZXIsIGtleVRleHQpOwotICAgICAgICAgICAgICAg
IHdyaXRlci5Xcml0ZShOYW1lVmFsdWVTZXBhcmF0b3IpOwotICAgICAgICAgICAgICAgIFdyaXRl
VmFsdWUod3JpdGVyLCBwYWlyLlZhbHVlKTsKLSAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd3JpdGVyLldyaXRlKGZpcnN0ID8gIn0iIDog
IiB9Iik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBS
ZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgc2luZ3VsYXIgdmFsdWUgY2FuIGJlIHJlcHJlc2VudGVk
IGluIEpTT04uCi0gICAgICAgIC8vLyBDdXJyZW50bHkgb25seSByZWxldmFudCBmb3IgZW51bXMs
IHdoZXJlIHVua25vd24gdmFsdWVzIGNhbid0IGJlIHJlcHJlc2VudGVkLgotICAgICAgICAvLy8g
Rm9yIHJlcGVhdGVkL21hcCBmaWVsZHMsIHRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZS4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJpdmF0ZSBib29sIENhbldyaXRlU2luZ2xlVmFs
dWUob2JqZWN0IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmFsdWUgaXMgU3lz
dGVtLkVudW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFN5c3RlbS5F
bnVtLklzRGVmaW5lZCh2YWx1ZS5HZXRUeXBlKCksIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gV3JpdGVzIGEgc3RyaW5nIChpbmNsdWRpbmcgbGVhZGluZyBhbmQgdHJh
aWxpbmcgZG91YmxlIHF1b3RlcykgdG8gYSBidWlsZGVyLCBlc2NhcGluZyBhcyByZXF1aXJlZC4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAv
Ly8gT3RoZXIgdGhhbiBzdXJyb2dhdGUgcGFpciBoYW5kbGluZywgdGhpcyBjb2RlIGlzIG1vc3Rs
eSB0YWtlbiBmcm9tIHNyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX2VzY2Fw
aW5nLmNjLgotICAgICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICBpbnRlcm5hbCBzdGF0aWMg
dm9pZCBXcml0ZVN0cmluZyhUZXh0V3JpdGVyIHdyaXRlciwgc3RyaW5nIHRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHdyaXRlci5Xcml0ZSgnIicpOwotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0ZXh0Lkxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGNoYXIgYyA9IHRleHRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGMgPCAweGEwKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKENvbW1vblJl
cHJlc2VudGF0aW9uc1tjXSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2hhci5Jc0hpZ2hTdXJyb2dhdGUoYykp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBFbmNvdW50ZXJlZCBm
aXJzdCBwYXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIuCi0gICAgICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgd2UgaGF2ZSB0aGUgd2hvbGUgcGFpciwgYW5kIGVuY29kZSBib3RoIHBhcnRzIGFz
IGhleC4KLSAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aSA9PSB0ZXh0Lkxlbmd0aCB8fCAhY2hhci5Jc0xvd1N1cnJvZ2F0ZSh0ZXh0W2ldKSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3Vt
ZW50RXhjZXB0aW9uKCJTdHJpbmcgY29udGFpbnMgbG93IHN1cnJvZ2F0ZSBub3QgZm9sbG93ZWQg
YnkgaGlnaCBzdXJyb2dhdGUiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBIZXhFbmNvZGVVdGYxNkNvZGVVbml0KHdyaXRlciwgYyk7Ci0gICAgICAgICAgICAg
ICAgICAgIEhleEVuY29kZVV0ZjE2Q29kZVVuaXQod3JpdGVyLCB0ZXh0W2ldKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNoYXIuSXNMb3dTdXJyb2dhdGUoYykpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oIlN0cmluZyBjb250
YWlucyBoaWdoIHN1cnJvZ2F0ZSBub3QgcHJlY2VkZWQgYnkgbG93IHN1cnJvZ2F0ZSIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCh1aW50KSBjKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIG5vdCByZXF1aXJl
ZCBieSBqc29uIHNwZWMKLSAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHVzZWQgdG8gcHJldmVu
dCBzZWN1cml0eSBidWdzIGluIGphdmFzY3JpcHQuCi0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
MHhmZWZmOiAgLy8gWmVybyB3aWR0aCBuby1icmVhayBzcGFjZQotICAgICAgICAgICAgICAgICAg
ICBjYXNlIDB4ZmZmOTogIC8vIEludGVybGluZWFyIGFubm90YXRpb24gYW5jaG9yCi0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgMHhmZmZhOiAgLy8gSW50ZXJsaW5lYXIgYW5ub3RhdGlvbiBzZXBh
cmF0b3IKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAweGZmZmI6ICAvLyBJbnRlcmxpbmVhciBh
bm5vdGF0aW9uIHRlcm1pbmF0b3IKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDBhZDog
IC8vIFNvZnQtaHlwaGVuCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwNmRkOiAgLy8gQXJh
YmljIGVuZCBvZiBheWFoCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwNzBmOiAgLy8gU3ly
aWFjIGFiYnJldmlhdGlvbiBtYXJrCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgMHgxN2I0OiAg
Ly8gS2htZXIgdm93ZWwgaW5oZXJlbnQgQXEKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAweDE3
YjU6ICAvLyBLaG1lciB2b3dlbCBpbmhlcmVudCBBYQotICAgICAgICAgICAgICAgICAgICAgICAg
SGV4RW5jb2RlVXRmMTZDb2RlVW5pdCh3cml0ZXIsIGMpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICgoYyA+PSAweDA2MDAgJiYgYyA8PSAweDA2MDMpIHx8ICAvLyBBcmFiaWMg
c2lnbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyA+PSAweDIwMGIgJiYgYyA8PSAw
eDIwMGYpIHx8ICAvLyBaZXJvIHdpZHRoIGV0Yy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoYyA+PSAweDIwMjggJiYgYyA8PSAweDIwMmUpIHx8ICAvLyBTZXBhcmF0b3JzIGV0Yy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoYyA+PSAweDIwNjAgJiYgYyA8PSAweDIwNjQpIHx8
ICAvLyBJbnZpc2libGUgZXRjLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjID49IDB4
MjA2YSAmJiBjIDw9IDB4MjA2ZikpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSGV4RW5jb2RlVXRmMTZDb2RlVW5pdCh3cml0ZXIsIGMpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE5vIGhhbmRsaW5nIG9mIHN1cnJvZ2F0ZXMgaGVyZSAtIHRoYXQncyBkb25lIGVhcmxpZXIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuV3JpdGUoYyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3cml0ZXIuV3JpdGUoJyInKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgY29uc3Qgc3RyaW5nIEhleCA9ICIwMTIzNDU2Nzg5
YWJjZGVmIjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBIZXhFbmNvZGVVdGYxNkNvZGVV
bml0KFRleHRXcml0ZXIgd3JpdGVyLCBjaGFyIGMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdy
aXRlci5Xcml0ZSgiXFx1Iik7Ci0gICAgICAgICAgICB3cml0ZXIuV3JpdGUoSGV4WyhjID4+IDEy
KSAmIDB4Zl0pOwotICAgICAgICAgICAgd3JpdGVyLldyaXRlKEhleFsoYyA+PiA4KSAmIDB4Zl0p
OwotICAgICAgICAgICAgd3JpdGVyLldyaXRlKEhleFsoYyA+PiA0KSAmIDB4Zl0pOwotICAgICAg
ICAgICAgd3JpdGVyLldyaXRlKEhleFsoYyA+PiAwKSAmIDB4Zl0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gU2V0dGluZ3MgY29udHJvbGxpbmcgSlNP
TiBmb3JtYXR0aW5nLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc2Vh
bGVkIGNsYXNzIFNldHRpbmdzCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgICAgIC8vLyBEZWZhdWx0IHNldHRpbmdzLCBhcyB1c2VkIGJ5IDxzZWUgY3JlZj0i
SnNvbkZvcm1hdHRlci5EZWZhdWx0Ii8+Ci0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAg
ICAgICAgICAgcHVibGljIHN0YXRpYyBTZXR0aW5ncyBEZWZhdWx0IHsgZ2V0OyB9Ci0KLSAgICAg
ICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoZSBNb25vIGNvbXBpbGVyIGNvbXBsYWluaW5nIGFi
b3V0IFhNTCBjb21tZW50cyBub3QgYmVpbmcgb24KLSAgICAgICAgICAgIC8vIHZhbGlkIGxhbmd1
YWdlIGVsZW1lbnRzLgotICAgICAgICAgICAgc3RhdGljIFNldHRpbmdzKCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBEZWZhdWx0ID0gbmV3IFNldHRpbmdzKGZhbHNlKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAgICAgLy8vIFdo
ZXRoZXIgZmllbGRzIHdob3NlIHZhbHVlcyBhcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSBmaWVsZCB0
eXBlIChlLmcuIDAgZm9yIGludGVnZXJzKQotICAgICAgICAgICAgLy8vIHNob3VsZCBiZSBmb3Jt
YXR0ZWQgKHRydWUpIG9yIG9taXR0ZWQgKGZhbHNlKS4KLSAgICAgICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgICAgICBwdWJsaWMgYm9vbCBGb3JtYXREZWZhdWx0VmFsdWVzIHsgZ2V0OyB9
Ci0KLSAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBUaGUgdHlwZSBy
ZWdpc3RyeSB1c2VkIHRvIGZvcm1hdCA8c2VlIGNyZWY9IkFueSIvPiBtZXNzYWdlcy4KLSAgICAg
ICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgICAgICBwdWJsaWMgVHlwZVJlZ2lzdHJ5IFR5
cGVSZWdpc3RyeSB7IGdldDsgfQotCi0gICAgICAgICAgICAvLyBUT0RPOiBXb3JrIG91dCBob3cg
d2UncmUgZ29pbmcgdG8gc2NhbGUgdGhpcyB0byBtdWx0aXBsZSBzZXR0aW5ncy4gIldpdGhYeXoi
IG1ldGhvZHM/Ci0KLSAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBD
cmVhdGVzIGEgbmV3IDxzZWUgY3JlZj0iU2V0dGluZ3MiLz4gb2JqZWN0IHdpdGggdGhlIHNwZWNp
ZmllZCBmb3JtYXR0aW5nIG9mIGRlZmF1bHQgdmFsdWVzCi0gICAgICAgICAgICAvLy8gYW5kIGFu
IGVtcHR5IHR5cGUgcmVnaXN0cnkuCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAg
ICAgICAgLy8vIDxwYXJhbSBuYW1lPSJmb3JtYXREZWZhdWx0VmFsdWVzIj48Yz50cnVlPC9jPiBp
ZiBkZWZhdWx0IHZhbHVlcyAoMCwgZW1wdHkgc3RyaW5ncyBldGMpIHNob3VsZCBiZSBmb3JtYXR0
ZWQ7IDxjPmZhbHNlPC9jPiBvdGhlcndpc2UuPC9wYXJhbT4KLSAgICAgICAgICAgIHB1YmxpYyBT
ZXR0aW5ncyhib29sIGZvcm1hdERlZmF1bHRWYWx1ZXMpIDogdGhpcyhmb3JtYXREZWZhdWx0VmFs
dWVzLCBUeXBlUmVnaXN0cnkuRW1wdHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBDcmVhdGVzIGEgbmV3
IDxzZWUgY3JlZj0iU2V0dGluZ3MiLz4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBmb3JtYXR0
aW5nIG9mIGRlZmF1bHQgdmFsdWVzCi0gICAgICAgICAgICAvLy8gYW5kIHR5cGUgcmVnaXN0cnku
Ci0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1l
PSJmb3JtYXREZWZhdWx0VmFsdWVzIj48Yz50cnVlPC9jPiBpZiBkZWZhdWx0IHZhbHVlcyAoMCwg
ZW1wdHkgc3RyaW5ncyBldGMpIHNob3VsZCBiZSBmb3JtYXR0ZWQ7IDxjPmZhbHNlPC9jPiBvdGhl
cndpc2UuPC9wYXJhbT4KLSAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idHlwZVJlZ2lzdHJ5
Ij5UaGUgPHNlZSBjcmVmPSJUeXBlUmVnaXN0cnkiLz4gdG8gdXNlIHdoZW4gZm9ybWF0dGluZyA8
c2VlIGNyZWY9IkFueSIvPiBtZXNzYWdlcy48L3BhcmFtPgotICAgICAgICAgICAgcHVibGljIFNl
dHRpbmdzKGJvb2wgZm9ybWF0RGVmYXVsdFZhbHVlcywgVHlwZVJlZ2lzdHJ5IHR5cGVSZWdpc3Ry
eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGb3JtYXREZWZhdWx0VmFsdWVzID0g
Zm9ybWF0RGVmYXVsdFZhbHVlczsKLSAgICAgICAgICAgICAgICBUeXBlUmVnaXN0cnkgPSBQcm90
b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHR5cGVSZWdpc3RyeSwgbmFtZW9mKHR5cGVSZWdp
c3RyeSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRWZmZWN0aXZl
bHkgYSBjYWNoZSBvZiBtYXBwaW5nIGZyb20gZW51bSB2YWx1ZXMgdG8gdGhlIG9yaWdpbmFsIG5h
bWUgYXMgc3BlY2lmaWVkIGluIHRoZSBwcm90byBmaWxlLAotICAgICAgICAvLyBmZXRjaGVkIGJ5
IHJlZmxlY3Rpb24uCi0gICAgICAgIC8vIFRoZSBuZWVkIGZvciB0aGlzIGlzIHVuZm9ydHVuYXRl
LCBhcyBpcyBpdHMgdW5ib3VuZGVkIHNpemUsIGJ1dCByZWFsaXN0aWNhbGx5IGl0IHNob3VsZG4n
dCBjYXVzZSBpc3N1ZXMuCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE9yaWdpbmFsRW51
bVZhbHVlSGVscGVyCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE86IEluIHRoZSBmdXR1
cmUgd2UgbWlnaHQgd2FudCB0byB1c2UgQ29uY3VycmVudERpY3Rpb25hcnksIGF0IHRoZSBwb2lu
dCB3aGVyZSBhbGwKLSAgICAgICAgICAgIC8vIHRoZSBwbGF0Zm9ybXMgd2UgdGFyZ2V0IGhhdmUg
aXQuCi0gICAgICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBEaWN0aW9uYXJ5PFN5c3Rl
bS5UeXBlLCBEaWN0aW9uYXJ5PG9iamVjdCwgc3RyaW5nPj4gZGljdGlvbmFyaWVzCi0gICAgICAg
ICAgICAgICAgPSBuZXcgRGljdGlvbmFyeTxTeXN0ZW0uVHlwZSwgRGljdGlvbmFyeTxvYmplY3Qs
IHN0cmluZz4+KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludGVybmFsIHN0YXRpYyBz
dHJpbmcgR2V0T3JpZ2luYWxOYW1lKG9iamVjdCB2YWx1ZSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB2YXIgZW51bVR5cGUgPSB2YWx1ZS5HZXRUeXBlKCk7Ci0gICAgICAgICAgICAg
ICAgRGljdGlvbmFyeTxvYmplY3QsIHN0cmluZz4gbmFtZU1hcHBpbmc7Ci0gICAgICAgICAgICAg
ICAgbG9jayAoZGljdGlvbmFyaWVzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFkaWN0aW9uYXJpZXMuVHJ5R2V0VmFsdWUoZW51bVR5cGUsIG91dCBuYW1lTWFw
cGluZykpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWVNYXBwaW5nID0gR2V0TmFtZU1hcHBpbmcoZW51bVR5cGUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGljdGlvbmFyaWVzW2VudW1UeXBlXSA9IG5hbWVNYXBwaW5nOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3RyaW5nIG9y
aWdpbmFsTmFtZTsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UsIG9y
aWdpbmFsTmFtZSB3aWxsIGJlIG51bGwsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudC4KLSAgICAgICAg
ICAgICAgICBuYW1lTWFwcGluZy5UcnlHZXRWYWx1ZSh2YWx1ZSwgb3V0IG9yaWdpbmFsTmFtZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRGljdGlvbmFyeTxvYmplY3QsIHN0cmluZz4gR2V0
TmFtZU1hcHBpbmcoU3lzdGVtLlR5cGUgZW51bVR5cGUpID0+Ci0gICAgICAgICAgICAgICAgZW51
bVR5cGUuR2V0VHlwZUluZm8oKS5EZWNsYXJlZEZpZWxkcwotICAgICAgICAgICAgICAgICAgICAu
V2hlcmUoZiA9PiBmLklzU3RhdGljKQotICAgICAgICAgICAgICAgICAgICAuVG9EaWN0aW9uYXJ5
KGYgPT4gZi5HZXRWYWx1ZShudWxsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmID0+IGYuR2V0Q3VzdG9tQXR0cmlidXRlczxPcmlnaW5hbE5hbWVBdHRyaWJ1dGU+KCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuRmlyc3RPckRlZmF1bHQoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhdHRyaWJ1
dGUgaGFzbid0IGJlZW4gYXBwbGllZCwgZmFsbCBiYWNrIHRvIHRoZSBuYW1lIG9mIHRoZSBmaWVs
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Lk5hbWUgPz8gZi5O
YW1lKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYvSnNvblBhcnNlci5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvSnNvblBh
cnNlci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDczOGViYjA0YjE3NDQ5Y2Nl
OWEyNjNhNGIyNjdjMzFjMGEyYzM1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0pzb25QYXJzZXIuY3MKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDE4ICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGlj
ZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVn
aW9uCi0KLXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uOwotdXNpbmcgR29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzOwotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxl
Y3Rpb25zOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0u
R2xvYmFsaXphdGlvbjsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UZXh0OwotdXNp
bmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwotCi1uYW1lc3BhY2UgR29vZ2xlLlBy
b3RvYnVmCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBSZWZsZWN0aW9uLWJhc2VkIGNv
bnZlcnRlciBmcm9tIEpTT04gdG8gbWVzc2FnZXMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICAv
Ly8gPHJlbWFya3M+Ci0gICAgLy8vIDxwYXJhPgotICAgIC8vLyBJbnN0YW5jZXMgb2YgdGhpcyBj
bGFzcyBhcmUgdGhyZWFkLXNhZmUsIHdpdGggbm8gbXV0YWJsZSBzdGF0ZS4KLSAgICAvLy8gPC9w
YXJhPgotICAgIC8vLyA8cGFyYT4KLSAgICAvLy8gVGhpcyBpcyBhIHNpbXBsZSBzdGFydCB0byBn
ZXQgSlNPTiBwYXJzaW5nIHdvcmtpbmcuIEFzIGl0J3MgcmVmbGVjdGlvbi1iYXNlZCwKLSAgICAv
Ly8gaXQncyBub3QgYXMgcXVpY2sgYXMgYmFraW5nIGNhbGxzIGludG8gZ2VuZXJhdGVkIG1lc3Nh
Z2VzIC0gYnV0IGlzIGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbi4KLSAgICAvLy8gKFRoaXMgY29k
ZSBpcyBnZW5lcmFsbHkgbm90IGhlYXZpbHkgb3B0aW1pemVkLikKLSAgICAvLy8gPC9wYXJhPgot
ICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgcHVibGljIHNlYWxlZCBjbGFzcyBKc29uUGFyc2VyCi0g
ICAgewotICAgICAgICAvLyBOb3RlOiB1c2luZyAwLTkgaW5zdGVhZCBvZiBcZCB0byBlbnN1cmUg
bm8gbm9uLUFTQ0lJIGRpZ2l0cy4KLSAgICAgICAgLy8gVGhpcyByZWdleCBpc24ndCBhIGNvbXBs
ZXRlIHZhbGlkYXRvciwgYnV0IHdpbGwgcmVtb3ZlICptb3N0KiBpbnZhbGlkIGlucHV0LiBXZSBy
ZWx5IG9uIHBhcnNpbmcgdG8gZG8gdGhlIHJlc3QuCi0gICAgICAgIHByaXZhdGUgc3RhdGljIHJl
YWRvbmx5IFJlZ2V4IFRpbWVzdGFtcFJlZ2V4ID0gbmV3IFJlZ2V4KEAiXig/PGRhdGV0aW1lPlsw
LTldezR9LVswMV1bMC05XS1bMC0zXVswLTldVFswMTJdWzAtOV06WzAtNV1bMC05XTpbMC01XVsw
LTldKSg/PHN1YnNlY29uZHM+XC5bMC05XXsxLDl9KT8oPzxvZmZzZXQ+KFp8WystXVswLTFdWzAt
OV06WzAtNV1bMC05XSkpJCIsIEZyYW1ld29ya1BvcnRhYmlsaXR5LkNvbXBpbGVkUmVnZXhXaGVy
ZUF2YWlsYWJsZSk7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFJlZ2V4IER1cmF0
aW9uUmVnZXggPSBuZXcgUmVnZXgoQCJeKD88c2lnbj4tKT8oPzxpbnQ+WzAtOV17MSwxMn0pKD88
c3Vic2Vjb25kcz5cLlswLTldezEsOX0pP3MkIiwgRnJhbWV3b3JrUG9ydGFiaWxpdHkuQ29tcGls
ZWRSZWdleFdoZXJlQXZhaWxhYmxlKTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkg
aW50W10gU3Vic2Vjb25kU2NhbGluZ0ZhY3RvcnMgPSB7IDAsIDEwMDAwMDAwMCwgMTAwMDAwMDAw
LCAxMDAwMDAwMCwgMTAwMDAwMCwgMTAwMDAwLCAxMDAwMCwgMTAwMCwgMTAwLCAxMCwgMSB9Owot
ICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBjaGFyW10gRmllbGRNYXNrUGF0aFNlcGFy
YXRvcnMgPSBuZXdbXSB7ICcsJyB9OwotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5
IEpzb25QYXJzZXIgZGVmYXVsdEluc3RhbmNlID0gbmV3IEpzb25QYXJzZXIoU2V0dGluZ3MuRGVm
YXVsdCk7Ci0KLSAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgaW50cm9kdWNpbmcgYSBjbGFzcyBj
b250YWluaW5nIHBhcnNlIHN0YXRlIG9mIHRoZSBwYXJzZXIsIHRva2VuaXplciBhbmQgZGVwdGgu
IFRoYXQgd291bGQgc2ltcGxpZnkgdGhlc2UgaGFuZGxlcnMKLSAgICAgICAgLy8gYW5kIHRoZSBz
aWduYXR1cmVzIG9mIHZhcmlvdXMgbWV0aG9kcy4KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVh
ZG9ubHkgRGljdGlvbmFyeTxzdHJpbmcsIEFjdGlvbjxKc29uUGFyc2VyLCBJTWVzc2FnZSwgSnNv
blRva2VuaXplcj4+Ci0gICAgICAgICAgICBXZWxsS25vd25UeXBlSGFuZGxlcnMgPSBuZXcgRGlj
dGlvbmFyeTxzdHJpbmcsIEFjdGlvbjxKc29uUGFyc2VyLCBJTWVzc2FnZSwgSnNvblRva2VuaXpl
cj4+Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgVGltZXN0YW1wLkRlc2NyaXB0b3IuRnVsbE5h
bWUsIChwYXJzZXIsIG1lc3NhZ2UsIHRva2VuaXplcikgPT4gTWVyZ2VUaW1lc3RhbXAobWVzc2Fn
ZSwgdG9rZW5pemVyLk5leHQoKSkgfSwKLSAgICAgICAgICAgIHsgRHVyYXRpb24uRGVzY3JpcHRv
ci5GdWxsTmFtZSwgKHBhcnNlciwgbWVzc2FnZSwgdG9rZW5pemVyKSA9PiBNZXJnZUR1cmF0aW9u
KG1lc3NhZ2UsIHRva2VuaXplci5OZXh0KCkpIH0sCi0gICAgICAgICAgICB7IFZhbHVlLkRlc2Ny
aXB0b3IuRnVsbE5hbWUsIChwYXJzZXIsIG1lc3NhZ2UsIHRva2VuaXplcikgPT4gcGFyc2VyLk1l
cmdlU3RydWN0VmFsdWUobWVzc2FnZSwgdG9rZW5pemVyKSB9LAotICAgICAgICAgICAgeyBMaXN0
VmFsdWUuRGVzY3JpcHRvci5GdWxsTmFtZSwgKHBhcnNlciwgbWVzc2FnZSwgdG9rZW5pemVyKSA9
PgotICAgICAgICAgICAgICAgIHBhcnNlci5NZXJnZVJlcGVhdGVkRmllbGQobWVzc2FnZSwgbWVz
c2FnZS5EZXNjcmlwdG9yLkZpZWxkc1tMaXN0VmFsdWUuVmFsdWVzRmllbGROdW1iZXJdLCB0b2tl
bml6ZXIpIH0sCi0gICAgICAgICAgICB7IFN0cnVjdC5EZXNjcmlwdG9yLkZ1bGxOYW1lLCAocGFy
c2VyLCBtZXNzYWdlLCB0b2tlbml6ZXIpID0+IHBhcnNlci5NZXJnZVN0cnVjdChtZXNzYWdlLCB0
b2tlbml6ZXIpIH0sCi0gICAgICAgICAgICB7IEFueS5EZXNjcmlwdG9yLkZ1bGxOYW1lLCAocGFy
c2VyLCBtZXNzYWdlLCB0b2tlbml6ZXIpID0+IHBhcnNlci5NZXJnZUFueShtZXNzYWdlLCB0b2tl
bml6ZXIpIH0sCi0gICAgICAgICAgICB7IEZpZWxkTWFzay5EZXNjcmlwdG9yLkZ1bGxOYW1lLCAo
cGFyc2VyLCBtZXNzYWdlLCB0b2tlbml6ZXIpID0+IE1lcmdlRmllbGRNYXNrKG1lc3NhZ2UsIHRv
a2VuaXplci5OZXh0KCkpIH0sCi0gICAgICAgICAgICB7IEludDMyVmFsdWUuRGVzY3JpcHRvci5G
dWxsTmFtZSwgTWVyZ2VXcmFwcGVyRmllbGQgfSwKLSAgICAgICAgICAgIHsgSW50NjRWYWx1ZS5E
ZXNjcmlwdG9yLkZ1bGxOYW1lLCBNZXJnZVdyYXBwZXJGaWVsZCB9LAotICAgICAgICAgICAgeyBV
SW50MzJWYWx1ZS5EZXNjcmlwdG9yLkZ1bGxOYW1lLCBNZXJnZVdyYXBwZXJGaWVsZCB9LAotICAg
ICAgICAgICAgeyBVSW50NjRWYWx1ZS5EZXNjcmlwdG9yLkZ1bGxOYW1lLCBNZXJnZVdyYXBwZXJG
aWVsZCB9LAotICAgICAgICAgICAgeyBGbG9hdFZhbHVlLkRlc2NyaXB0b3IuRnVsbE5hbWUsIE1l
cmdlV3JhcHBlckZpZWxkIH0sCi0gICAgICAgICAgICB7IERvdWJsZVZhbHVlLkRlc2NyaXB0b3Iu
RnVsbE5hbWUsIE1lcmdlV3JhcHBlckZpZWxkIH0sCi0gICAgICAgICAgICB7IEJ5dGVzVmFsdWUu
RGVzY3JpcHRvci5GdWxsTmFtZSwgTWVyZ2VXcmFwcGVyRmllbGQgfSwKLSAgICAgICAgICAgIHsg
U3RyaW5nVmFsdWUuRGVzY3JpcHRvci5GdWxsTmFtZSwgTWVyZ2VXcmFwcGVyRmllbGQgfQotICAg
ICAgICB9OwotCi0gICAgICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZCB0byBhdm9pZCBoYXZpbmcg
dG8gcmVwZWF0IHRoZSBzYW1lIGNvZGUgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGFib3ZlCi0gICAg
ICAgIC8vIGRpY3Rpb25hcnkgaW5pdGlhbGl6YXRpb24uCi0gICAgICAgIHByaXZhdGUgc3RhdGlj
IHZvaWQgTWVyZ2VXcmFwcGVyRmllbGQoSnNvblBhcnNlciBwYXJzZXIsIElNZXNzYWdlIG1lc3Nh
Z2UsIEpzb25Ub2tlbml6ZXIgdG9rZW5pemVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJz
ZXIuTWVyZ2VGaWVsZChtZXNzYWdlLCBtZXNzYWdlLkRlc2NyaXB0b3IuRmllbGRzW1dyYXBwZXJz
UmVmbGVjdGlvbi5XcmFwcGVyVmFsdWVGaWVsZE51bWJlcl0sIHRva2VuaXplcik7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIGEgZm9ybWF0
dGVyIHVzaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgICAgICBwdWJsaWMgc3RhdGljIEpzb25QYXJzZXIgRGVmYXVsdCB7IGdldCB7IHJldHVybiBk
ZWZhdWx0SW5zdGFuY2U7IH0gfQotCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgU2V0dGluZ3Mg
c2V0dGluZ3M7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBh
IG5ldyBmb3JtYXR0ZWQgd2l0aCB0aGUgZ2l2ZW4gc2V0dGluZ3MuCi0gICAgICAgIC8vLyA8L3N1
bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic2V0dGluZ3MiPlRoZSBzZXR0aW5ncy48
L3BhcmFtPgotICAgICAgICBwdWJsaWMgSnNvblBhcnNlcihTZXR0aW5ncyBzZXR0aW5ncykKLSAg
ICAgICAgewotICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUGFyc2VzIDxwYXJhbXJlZiBu
YW1lPSJqc29uIi8+IGFuZCBtZXJnZXMgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlIGdpdmVuIG1l
c3NhZ2UuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0i
bWVzc2FnZSI+VGhlIG1lc3NhZ2UgdG8gbWVyZ2UgdGhlIEpTT04gaW5mb3JtYXRpb24gaW50by48
L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Impzb24iPlRoZSBKU09OIHRvIHBhcnNl
LjwvcGFyYW0+Ci0gICAgICAgIGludGVybmFsIHZvaWQgTWVyZ2UoSU1lc3NhZ2UgbWVzc2FnZSwg
c3RyaW5nIGpzb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIE1lcmdlKG1lc3NhZ2UsIG5ldyBT
dHJpbmdSZWFkZXIoanNvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gUGFyc2VzIEpTT04gcmVhZCBmcm9tIDxwYXJhbXJlZiBuYW1lPSJqc29uUmVh
ZGVyIi8+IGFuZCBtZXJnZXMgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlIGdpdmVuIG1lc3NhZ2Uu
Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVzc2Fn
ZSI+VGhlIG1lc3NhZ2UgdG8gbWVyZ2UgdGhlIEpTT04gaW5mb3JtYXRpb24gaW50by48L3BhcmFt
PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Impzb25SZWFkZXIiPlJlYWRlciBwcm92aWRpbmcg
dGhlIEpTT04gdG8gcGFyc2UuPC9wYXJhbT4KLSAgICAgICAgaW50ZXJuYWwgdm9pZCBNZXJnZShJ
TWVzc2FnZSBtZXNzYWdlLCBUZXh0UmVhZGVyIGpzb25SZWFkZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZhciB0b2tlbml6ZXIgPSBKc29uVG9rZW5pemVyLkZyb21UZXh0UmVhZGVyKGpzb25S
ZWFkZXIpOwotICAgICAgICAgICAgTWVyZ2UobWVzc2FnZSwgdG9rZW5pemVyKTsKLSAgICAgICAg
ICAgIHZhciBsYXN0VG9rZW4gPSB0b2tlbml6ZXIuTmV4dCgpOwotICAgICAgICAgICAgaWYgKGxh
c3RUb2tlbiAhPSBKc29uVG9rZW4uRW5kRG9jdW1lbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiRXhwZWN0
ZWQgZW5kIG9mIEpTT04gYWZ0ZXIgb2JqZWN0Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBNZXJnZXMgdGhlIGdpdmVuIG1l
c3NhZ2UgdXNpbmcgZGF0YSBmcm9tIHRoZSBnaXZlbiB0b2tlbml6ZXIuIEluIG1vc3QgY2FzZXMs
IHRoZSBuZXh0Ci0gICAgICAgIC8vLyB0b2tlbiBzaG91bGQgYmUgYSAic3RhcnQgb2JqZWN0IiB0
b2tlbiwgYnV0IHdyYXBwZXIgdHlwZXMgYW5kIG51bGxpdHkgY2FuIGludmFsaWRhdGUKLSAgICAg
ICAgLy8vIHRoYXQgYXNzdW1wdGlvbi4gVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhbiBMTCgxKSBy
ZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIgb3ZlciB0aGUgc3RyZWFtCi0gICAgICAgIC8vLyBvZiB0
b2tlbnMgcHJvdmlkZWQgYnkgdGhlIHRva2VuaXplci4gVGhpcyB0b2tlbiBzdHJlYW0gaXMgYXNz
dW1lZCB0byBiZSB2YWxpZCBKU09OLCB3aXRoIHRoZQotICAgICAgICAvLy8gdG9rZW5pemVyIHBl
cmZvcm1pbmcgdGhhdCB2YWxpZGF0aW9uIC0gYnV0IG5vdCBldmVyeSB0b2tlbiBzdHJlYW0gaXMg
dmFsaWQgInByb3RvYnVmIEpTT04iLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBw
cml2YXRlIHZvaWQgTWVyZ2UoSU1lc3NhZ2UgbWVzc2FnZSwgSnNvblRva2VuaXplciB0b2tlbml6
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0b2tlbml6ZXIuT2JqZWN0RGVwdGggPiBz
ZXR0aW5ncy5SZWN1cnNpb25MaW1pdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0
aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24uSnNvblJlY3Vyc2lvbkxpbWl0RXhj
ZWVkZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtZXNzYWdlLkRlc2NyaXB0
b3IuSXNXZWxsS25vd25UeXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFjdGlv
bjxKc29uUGFyc2VyLCBJTWVzc2FnZSwgSnNvblRva2VuaXplcj4gaGFuZGxlcjsKLSAgICAgICAg
ICAgICAgICBpZiAoV2VsbEtub3duVHlwZUhhbmRsZXJzLlRyeUdldFZhbHVlKG1lc3NhZ2UuRGVz
Y3JpcHRvci5GdWxsTmFtZSwgb3V0IGhhbmRsZXIpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlcih0aGlzLCBtZXNzYWdlLCB0b2tlbml6ZXIpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IC8vIFdlbGwta25vd24gdHlwZXMgd2l0aCBubyBzcGVjaWFsIGhhbmRsaW5nIGNvbnRpbnVlIGlu
IHRoZSBub3JtYWwgd2F5LgotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHRva2VuID0g
dG9rZW5pemVyLk5leHQoKTsKLSAgICAgICAgICAgIGlmICh0b2tlbi5UeXBlICE9IEpzb25Ub2tl
bi5Ub2tlblR5cGUuU3RhcnRPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiRXhwZWN0ZWQgYW4gb2Jq
ZWN0Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IG1lc3Nh
Z2UuRGVzY3JpcHRvcjsKLSAgICAgICAgICAgIHZhciBqc29uRmllbGRNYXAgPSBkZXNjcmlwdG9y
LkZpZWxkcy5CeUpzb25OYW1lKCk7Ci0gICAgICAgICAgICAvLyBBbGwgdGhlIG9uZW9mIGZpZWxk
cyB3ZSd2ZSBhbHJlYWR5IGFjY291bnRlZCBmb3IgLSB3ZSBjYW4gb25seSBzZWUgZWFjaCBvZiB0
aGVtIG9uY2UuCi0gICAgICAgICAgICAvLyBUaGUgc2V0IGlzIGNyZWF0ZWQgbGF6aWx5IHRvIGF2
b2lkIHRoZSBvdmVyaGVhZCBvZiBjcmVhdGluZyBhIHNldCBmb3IgZXZlcnkgbWVzc2FnZQotICAg
ICAgICAgICAgLy8gd2UgcGFyc2VkLCB3aGVuIG9uZW9mcyBhcmUgcmVsYXRpdmVseSByYXJlLgot
ICAgICAgICAgICAgSGFzaFNldDxPbmVvZkRlc2NyaXB0b3I+IHNlZW5PbmVvZnMgPSBudWxsOwot
ICAgICAgICAgICAgd2hpbGUgKHRydWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dG9rZW4gPSB0b2tlbml6ZXIuTmV4dCgpOwotICAgICAgICAgICAgICAgIGlmICh0b2tlbi5UeXBl
ID09IEpzb25Ub2tlbi5Ub2tlblR5cGUuRW5kT2JqZWN0KQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAodG9rZW4uVHlwZSAhPSBKc29uVG9rZW4uVG9rZW5UeXBlLk5hbWUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlv
bkV4Y2VwdGlvbigiVW5leHBlY3RlZCB0b2tlbiB0eXBlICIgKyB0b2tlbi5UeXBlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3RyaW5nIG5hbWUgPSB0b2tlbi5TdHJpbmdW
YWx1ZTsKLSAgICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKGpzb25GaWVsZE1hcC5UcnlHZXRWYWx1ZShuYW1lLCBvdXQgZmllbGQpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLkNvbnRhaW5pbmdP
bmVvZiAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc2Vlbk9uZW9mcyA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5PbmVvZnMgPSBuZXcgSGFzaFNldDxPbmVv
ZkRlc2NyaXB0b3I+KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXNlZW5PbmVvZnMuQWRkKGZpZWxkLkNvbnRhaW5pbmdPbmVvZikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigkIk11bHRpcGxlIHZhbHVlcyBz
cGVjaWZpZWQgZm9yIG9uZW9mIHtmaWVsZC5Db250YWluaW5nT25lb2YuTmFtZX0iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBNZXJnZUZpZWxkKG1lc3NhZ2UsIGZpZWxkLCB0b2tlbml6ZXIpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIHdoYXQgd2Ugd2FudCB0byBkbz8gSWYgbm90
LCB3ZSdsbCBuZWVkIHRvIHNraXAgdGhlIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAvLyB3
aGljaCBtYXkgYmUgYW4gb2JqZWN0IG9yIGFycmF5LiAoV2UgbWlnaHQgd2FudCB0byBwdXQgY29k
ZSBpbiB0aGUgdG9rZW5pemVyCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIGRvIHRoYXQuKQot
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uKCJVbmtub3duIGZpZWxkOiAiICsgbmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIE1lcmdlRmllbGQoSU1l
c3NhZ2UgbWVzc2FnZSwgRmllbGREZXNjcmlwdG9yIGZpZWxkLCBKc29uVG9rZW5pemVyIHRva2Vu
aXplcikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5pemVyLk5leHQo
KTsKLSAgICAgICAgICAgIGlmICh0b2tlbi5UeXBlID09IEpzb25Ub2tlbi5Ub2tlblR5cGUuTnVs
bCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZmllbGQgaWYg
d2Ugc2VlIGEgbnVsbCB0b2tlbiwgdW5sZXNzIGl0J3MgZm9yIGEgc2luZ3VsYXIgZmllbGQgb2Yg
dHlwZQotICAgICAgICAgICAgICAgIC8vIGdvb2dsZS5wcm90b2J1Zi5WYWx1ZS4KLSAgICAgICAg
ICAgICAgICAvLyBOb3RlOiBkaWZmZXJlbnQgZnJvbSBKYXZhIEFQSSwgd2hpY2gganVzdCBpZ25v
cmVzIGl0LgotICAgICAgICAgICAgICAgIC8vIFRPRE86IEJyaW5nIGl0IG1vcmUgaW4gbGluZT8g
RGlzY3Vzcy4uLgotICAgICAgICAgICAgICAgIGlmIChmaWVsZC5Jc01hcCB8fCBmaWVsZC5Jc1Jl
cGVhdGVkIHx8ICFJc0dvb2dsZVByb3RvYnVmVmFsdWVGaWVsZChmaWVsZCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBmaWVsZC5BY2Nlc3Nvci5DbGVhcihtZXNzYWdl
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHRva2VuaXplci5QdXNoQmFjayh0b2tlbik7Ci0KLSAgICAg
ICAgICAgIGlmIChmaWVsZC5Jc01hcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBN
ZXJnZU1hcEZpZWxkKG1lc3NhZ2UsIGZpZWxkLCB0b2tlbml6ZXIpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQuSXNSZXBlYXRlZCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBNZXJnZVJlcGVhdGVkRmllbGQobWVzc2FnZSwgZmllbGQsIHRva2VuaXpl
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHZhbHVlID0gUGFyc2VTaW5nbGVWYWx1ZShmaWVsZCwgdG9rZW5pemVy
KTsKLSAgICAgICAgICAgICAgICBmaWVsZC5BY2Nlc3Nvci5TZXRWYWx1ZShtZXNzYWdlLCB2YWx1
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgTWVy
Z2VSZXBlYXRlZEZpZWxkKElNZXNzYWdlIG1lc3NhZ2UsIEZpZWxkRGVzY3JpcHRvciBmaWVsZCwg
SnNvblRva2VuaXplciB0b2tlbml6ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0b2tl
biA9IHRva2VuaXplci5OZXh0KCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4uVHlwZSAhPSBKc29u
VG9rZW4uVG9rZW5UeXBlLlN0YXJ0QXJyYXkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiUmVwZWF0ZWQgZmll
bGQgdmFsdWUgd2FzIG5vdCBhbiBhcnJheS4gVG9rZW4gdHlwZTogIiArIHRva2VuLlR5cGUpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJTGlzdCBsaXN0ID0gKElMaXN0KSBmaWVsZC5B
Y2Nlc3Nvci5HZXRWYWx1ZShtZXNzYWdlKTsKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5pemVyLk5leHQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAodG9rZW4uVHlwZSA9PSBKc29uVG9rZW4uVG9rZW5UeXBlLkVuZEFy
cmF5KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0b2tlbml6ZXIuUHVzaEJhY2sodG9rZW4p
OwotICAgICAgICAgICAgICAgIGlmICh0b2tlbi5UeXBlID09IEpzb25Ub2tlbi5Ub2tlblR5cGUu
TnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIlJlcGVhdGVkIGZpZWxkIGVsZW1lbnRzIGNh
bm5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpc3Qu
QWRkKFBhcnNlU2luZ2xlVmFsdWUoZmllbGQsIHRva2VuaXplcikpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIE1lcmdlTWFwRmllbGQoSU1lc3NhZ2Ug
bWVzc2FnZSwgRmllbGREZXNjcmlwdG9yIGZpZWxkLCBKc29uVG9rZW5pemVyIHRva2VuaXplcikK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gTWFwIGZpZWxkcyBhcmUgYWx3YXlzIG9iamVjdHMs
IGV2ZW4gaWYgdGhlIHZhbHVlcyBhcmUgd2VsbC1rbm93biB0eXBlczogUGFyc2VTaW5nbGVWYWx1
ZSBoYW5kbGVzIHRob3NlLgotICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5pemVyLk5leHQo
KTsKLSAgICAgICAgICAgIGlmICh0b2tlbi5UeXBlICE9IEpzb25Ub2tlbi5Ub2tlblR5cGUuU3Rh
cnRPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiRXhwZWN0ZWQgYW4gb2JqZWN0IHRvIHBvcHVsYXRl
IGEgbWFwIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciB0eXBlID0gZmllbGQu
TWVzc2FnZVR5cGU7Ci0gICAgICAgICAgICB2YXIga2V5RmllbGQgPSB0eXBlLkZpbmRGaWVsZEJ5
TnVtYmVyKDEpOwotICAgICAgICAgICAgdmFyIHZhbHVlRmllbGQgPSB0eXBlLkZpbmRGaWVsZEJ5
TnVtYmVyKDIpOwotICAgICAgICAgICAgaWYgKGtleUZpZWxkID09IG51bGwgfHwgdmFsdWVGaWVs
ZCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZh
bGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIkludmFsaWQgbWFwIGZpZWxkOiAiICsgZmllbGQu
RnVsbE5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgSURpY3Rpb25hcnkgZGljdGlv
bmFyeSA9IChJRGljdGlvbmFyeSkgZmllbGQuQWNjZXNzb3IuR2V0VmFsdWUobWVzc2FnZSk7Ci0K
LSAgICAgICAgICAgIHdoaWxlICh0cnVlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHRva2VuID0gdG9rZW5pemVyLk5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4uVHlw
ZSA9PSBKc29uVG9rZW4uVG9rZW5UeXBlLkVuZE9iamVjdCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgb2JqZWN0IGtleSA9IFBhcnNlTWFwS2V5KGtleUZpZWxkLCB0b2tlbi5TdHJpbmdWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgb2JqZWN0IHZhbHVlID0gUGFyc2VTaW5nbGVWYWx1ZSh2YWx1
ZUZpZWxkLCB0b2tlbml6ZXIpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQ
cm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiTWFwIHZhbHVlcyBtdXN0IG5vdCBiZSBudWxsIik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlba2V5XSA9IHZhbHVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9v
bCBJc0dvb2dsZVByb3RvYnVmVmFsdWVGaWVsZChGaWVsZERlc2NyaXB0b3IgZmllbGQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlLk1l
c3NhZ2UgJiYKLSAgICAgICAgICAgICAgICBmaWVsZC5NZXNzYWdlVHlwZS5GdWxsTmFtZSA9PSBW
YWx1ZS5EZXNjcmlwdG9yLkZ1bGxOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBv
YmplY3QgUGFyc2VTaW5nbGVWYWx1ZShGaWVsZERlc2NyaXB0b3IgZmllbGQsIEpzb25Ub2tlbml6
ZXIgdG9rZW5pemVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbml6
ZXIuTmV4dCgpOwotICAgICAgICAgICAgaWYgKHRva2VuLlR5cGUgPT0gSnNvblRva2VuLlRva2Vu
VHlwZS5OdWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IEluIG9y
ZGVyIHRvIHN1cHBvcnQgZHluYW1pYyBtZXNzYWdlcywgd2Ugc2hvdWxkIHJlYWxseSBidWlsZCB0
aGlzIHVwCi0gICAgICAgICAgICAgICAgLy8gZHluYW1pY2FsbHkuCi0gICAgICAgICAgICAgICAg
aWYgKElzR29vZ2xlUHJvdG9idWZWYWx1ZUZpZWxkKGZpZWxkKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZS5Gb3JOdWxsKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB2YXIgZmllbGRUeXBlID0gZmllbGQuRmllbGRUeXBlOwotICAgICAgICAgICAg
aWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5cGUuTWVzc2FnZSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAvLyBQYXJzZSB3cmFwcGVyIHR5cGVzIGFzIHRoZWlyIGNvbnN0aXR1ZW50IHR5
cGVzLgotICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQgZG9lcyB0aGlzIG1lYW4gZm9yIG51
bGw/Ci0gICAgICAgICAgICAgICAgaWYgKGZpZWxkLk1lc3NhZ2VUeXBlLklzV3JhcHBlclR5cGUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGZpZWxkLk1l
c3NhZ2VUeXBlLkZpZWxkc1tXcmFwcGVyc1JlZmxlY3Rpb24uV3JhcHBlclZhbHVlRmllbGROdW1i
ZXJdOwotICAgICAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBmaWVsZC5GaWVsZFR5cGU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE1lcmdlIHRoZSBjdXJyZW50IHZhbHVlIGlu
IG1lc3NhZ2U/IChQdWJsaWMgQVBJIGN1cnJlbnRseSBkb2Vzbid0IG1ha2UgdGhpcyByZWxldmFu
dCBhcyB3ZSBkb24ndCBleHBvc2UgbWVyZ2luZy4pCi0gICAgICAgICAgICAgICAgICAgIHRva2Vu
aXplci5QdXNoQmFjayh0b2tlbik7Ci0gICAgICAgICAgICAgICAgICAgIElNZXNzYWdlIHN1Yk1l
c3NhZ2UgPSBOZXdNZXNzYWdlRm9yRmllbGQoZmllbGQpOwotICAgICAgICAgICAgICAgICAgICBN
ZXJnZShzdWJNZXNzYWdlLCB0b2tlbml6ZXIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3ViTWVzc2FnZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAodG9rZW4uVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBj
YXNlIEpzb25Ub2tlbi5Ub2tlblR5cGUuVHJ1ZToKLSAgICAgICAgICAgICAgICBjYXNlIEpzb25U
b2tlbi5Ub2tlblR5cGUuRmFsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFR5cGUg
PT0gRmllbGRUeXBlLkJvb2wpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0b2tlbi5UeXBlID09IEpzb25Ub2tlbi5Ub2tlblR5cGUuVHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBGYWxsIHRocm91
Z2ggdG8gIndlIGRvbid0IHN1cHBvcnQgdGhpcyB0eXBlIGZvciB0aGlzIGNhc2UiOyBjb3VsZCBk
dXBsaWNhdGUgdGhlIGJlaGF2aW91ciBvZiB0aGUgZGVmYXVsdAotICAgICAgICAgICAgICAgICAg
ICAvLyBjYXNlIGluc3RlYWQsIGJ1dCB0aGlzIHdheSB3ZSdkIG9ubHkgbmVlZCB0byBjaGFuZ2Ug
b25lIHBsYWNlLgotICAgICAgICAgICAgICAgICAgICBnb3RvIGRlZmF1bHQ7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBKc29uVG9rZW4uVG9rZW5UeXBlLlN0cmluZ1ZhbHVlOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUGFyc2VTaW5nbGVTdHJpbmdWYWx1ZShmaWVsZCwgdG9rZW4uU3RyaW5n
VmFsdWUpOwotICAgICAgICAgICAgICAgIC8vIE5vdGU6IG5vdCBwYXNzaW5nIHRoZSBudW1iZXIg
dmFsdWUgaXRzZWxmIGhlcmUsIGFzIHdlIG1heSBlbmQgdXAgc3RvcmluZyB0aGUgc3RyaW5nIHZh
bHVlIGluIHRoZSB0b2tlbiB0b28uCi0gICAgICAgICAgICAgICAgY2FzZSBKc29uVG9rZW4uVG9r
ZW5UeXBlLk51bWJlcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU2luZ2xlTnVt
YmVyVmFsdWUoZmllbGQsIHRva2VuKTsKLSAgICAgICAgICAgICAgICBjYXNlIEpzb25Ub2tlbi5U
b2tlblR5cGUuTnVsbDoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVu
dGVkRXhjZXB0aW9uKCJIYXZlbid0IHdvcmtlZCBvdXQgd2hhdCB0byBkbyBmb3IgbnVsbCB5ZXQi
KTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBKU09OIHRva2Vu
IHR5cGUgIiArIHRva2VuLlR5cGUgKyAiIGZvciBmaWVsZCB0eXBlICIgKyBmaWVsZFR5cGUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAg
ICAvLy8gUGFyc2VzIDxwYXJhbXJlZiBuYW1lPSJqc29uIi8+IGludG8gYSBuZXcgbWVzc2FnZS4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVCI+
VGhlIHR5cGUgb2YgbWVzc2FnZSB0byBjcmVhdGUuPC90eXBlcGFyYW0+Ci0gICAgICAgIC8vLyA8
cGFyYW0gbmFtZT0ianNvbiI+VGhlIEpTT04gdG8gcGFyc2UuPC9wYXJhbT4KLSAgICAgICAgLy8v
IDxleGNlcHRpb24gY3JlZj0iSW52YWxpZEpzb25FeGNlcHRpb24iPlRoZSBKU09OIGRvZXMgbm90
IGNvbXBseSB3aXRoIFJGQyA3MTU5PC9leGNlcHRpb24+Ci0gICAgICAgIC8vLyA8ZXhjZXB0aW9u
IGNyZWY9IkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiI+VGhlIEpTT04gZG9lcyBub3Qg
cmVwcmVzZW50IGEgUHJvdG9jb2wgQnVmZmVycyBtZXNzYWdlIGNvcnJlY3RseTwvZXhjZXB0aW9u
PgotICAgICAgICBwdWJsaWMgVCBQYXJzZTxUPihzdHJpbmcganNvbikgd2hlcmUgVCA6IElNZXNz
YWdlLCBuZXcoKQotICAgICAgICB7Ci0gICAgICAgICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hl
Y2tOb3ROdWxsKGpzb24sIG5hbWVvZihqc29uKSk7Ci0gICAgICAgICAgICByZXR1cm4gUGFyc2U8
VD4obmV3IFN0cmluZ1JlYWRlcihqc29uKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBQYXJzZXMgSlNPTiByZWFkIGZyb20gPHBhcmFtcmVmIG5hbWU9
Impzb25SZWFkZXIiLz4gaW50byBhIG5ldyBtZXNzYWdlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5
PgotICAgICAgICAvLy8gPHR5cGVwYXJhbSBuYW1lPSJUIj5UaGUgdHlwZSBvZiBtZXNzYWdlIHRv
IGNyZWF0ZS48L3R5cGVwYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJqc29uUmVhZGVy
Ij5SZWFkZXIgcHJvdmlkaW5nIHRoZSBKU09OIHRvIHBhcnNlLjwvcGFyYW0+Ci0gICAgICAgIC8v
LyA8ZXhjZXB0aW9uIGNyZWY9IkludmFsaWRKc29uRXhjZXB0aW9uIj5UaGUgSlNPTiBkb2VzIG5v
dCBjb21wbHkgd2l0aCBSRkMgNzE1OTwvZXhjZXB0aW9uPgotICAgICAgICAvLy8gPGV4Y2VwdGlv
biBjcmVmPSJJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24iPlRoZSBKU09OIGRvZXMgbm90
IHJlcHJlc2VudCBhIFByb3RvY29sIEJ1ZmZlcnMgbWVzc2FnZSBjb3JyZWN0bHk8L2V4Y2VwdGlv
bj4KLSAgICAgICAgcHVibGljIFQgUGFyc2U8VD4oVGV4dFJlYWRlciBqc29uUmVhZGVyKSB3aGVy
ZSBUIDogSU1lc3NhZ2UsIG5ldygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByb3RvUHJlY29u
ZGl0aW9ucy5DaGVja05vdE51bGwoanNvblJlYWRlciwgbmFtZW9mKGpzb25SZWFkZXIpKTsKLSAg
ICAgICAgICAgIFQgbWVzc2FnZSA9IG5ldyBUKCk7Ci0gICAgICAgICAgICBNZXJnZShtZXNzYWdl
LCBqc29uUmVhZGVyKTsKLSAgICAgICAgICAgIHJldHVybiBtZXNzYWdlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUGFyc2VzIDxwYXJhbXJlZiBuYW1l
PSJqc29uIi8+IGludG8gYSBuZXcgbWVzc2FnZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAgICAgLy8vIDxwYXJhbSBuYW1lPSJqc29uIj5UaGUgSlNPTiB0byBwYXJzZS48L3BhcmFtPgot
ICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRlc2NyaXB0b3IiPkRlc2NyaXB0b3Igb2YgbWVzc2Fn
ZSB0eXBlIHRvIHBhcnNlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9Iklu
dmFsaWRKc29uRXhjZXB0aW9uIj5UaGUgSlNPTiBkb2VzIG5vdCBjb21wbHkgd2l0aCBSRkMgNzE1
OTwvZXhjZXB0aW9uPgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24iPlRoZSBKU09OIGRvZXMgbm90IHJlcHJlc2VudCBhIFByb3RvY29s
IEJ1ZmZlcnMgbWVzc2FnZSBjb3JyZWN0bHk8L2V4Y2VwdGlvbj4KLSAgICAgICAgcHVibGljIElN
ZXNzYWdlIFBhcnNlKHN0cmluZyBqc29uLCBNZXNzYWdlRGVzY3JpcHRvciBkZXNjcmlwdG9yKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKGpz
b24sIG5hbWVvZihqc29uKSk7Ci0gICAgICAgICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tO
b3ROdWxsKGRlc2NyaXB0b3IsIG5hbWVvZihkZXNjcmlwdG9yKSk7Ci0gICAgICAgICAgICByZXR1
cm4gUGFyc2UobmV3IFN0cmluZ1JlYWRlcihqc29uKSwgZGVzY3JpcHRvcik7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQYXJzZXMgSlNPTiByZWFkIGZy
b20gPHBhcmFtcmVmIG5hbWU9Impzb25SZWFkZXIiLz4gaW50byBhIG5ldyBtZXNzYWdlLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Impzb25SZWFkZXIi
PlJlYWRlciBwcm92aWRpbmcgdGhlIEpTT04gdG8gcGFyc2UuPC9wYXJhbT4KLSAgICAgICAgLy8v
IDxwYXJhbSBuYW1lPSJkZXNjcmlwdG9yIj5EZXNjcmlwdG9yIG9mIG1lc3NhZ2UgdHlwZSB0byBw
YXJzZS48L3BhcmFtPgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJJbnZhbGlkSnNvbkV4
Y2VwdGlvbiI+VGhlIEpTT04gZG9lcyBub3QgY29tcGx5IHdpdGggUkZDIDcxNTk8L2V4Y2VwdGlv
bj4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iSW52YWxpZFByb3RvY29sQnVmZmVyRXhj
ZXB0aW9uIj5UaGUgSlNPTiBkb2VzIG5vdCByZXByZXNlbnQgYSBQcm90b2NvbCBCdWZmZXJzIG1l
c3NhZ2UgY29ycmVjdGx5PC9leGNlcHRpb24+Ci0gICAgICAgIHB1YmxpYyBJTWVzc2FnZSBQYXJz
ZShUZXh0UmVhZGVyIGpzb25SZWFkZXIsIE1lc3NhZ2VEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwoanNv
blJlYWRlciwgbmFtZW9mKGpzb25SZWFkZXIpKTsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0
aW9ucy5DaGVja05vdE51bGwoZGVzY3JpcHRvciwgbmFtZW9mKGRlc2NyaXB0b3IpKTsKLSAgICAg
ICAgICAgIElNZXNzYWdlIG1lc3NhZ2UgPSBkZXNjcmlwdG9yLlBhcnNlci5DcmVhdGVUZW1wbGF0
ZSgpOwotICAgICAgICAgICAgTWVyZ2UobWVzc2FnZSwganNvblJlYWRlcik7Ci0gICAgICAgICAg
ICByZXR1cm4gbWVzc2FnZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBNZXJn
ZVN0cnVjdFZhbHVlKElNZXNzYWdlIG1lc3NhZ2UsIEpzb25Ub2tlbml6ZXIgdG9rZW5pemVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZmlyc3RUb2tlbiA9IHRva2VuaXplci5OZXh0KCk7
Ci0gICAgICAgICAgICB2YXIgZmllbGRzID0gbWVzc2FnZS5EZXNjcmlwdG9yLkZpZWxkczsKLSAg
ICAgICAgICAgIHN3aXRjaCAoZmlyc3RUb2tlbi5UeXBlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGNhc2UgSnNvblRva2VuLlRva2VuVHlwZS5OdWxsOgotICAgICAgICAgICAgICAg
ICAgICBmaWVsZHNbVmFsdWUuTnVsbFZhbHVlRmllbGROdW1iZXJdLkFjY2Vzc29yLlNldFZhbHVl
KG1lc3NhZ2UsIDApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgY2FzZSBKc29uVG9rZW4uVG9rZW5UeXBlLlN0cmluZ1ZhbHVlOgotICAgICAgICAgICAgICAg
ICAgICBmaWVsZHNbVmFsdWUuU3RyaW5nVmFsdWVGaWVsZE51bWJlcl0uQWNjZXNzb3IuU2V0VmFs
dWUobWVzc2FnZSwgZmlyc3RUb2tlbi5TdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICBjYXNlIEpzb25Ub2tlbi5Ub2tlblR5cGUuTnVtYmVy
OgotICAgICAgICAgICAgICAgICAgICBmaWVsZHNbVmFsdWUuTnVtYmVyVmFsdWVGaWVsZE51bWJl
cl0uQWNjZXNzb3IuU2V0VmFsdWUobWVzc2FnZSwgZmlyc3RUb2tlbi5OdW1iZXJWYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjYXNlIEpzb25Ub2tl
bi5Ub2tlblR5cGUuRmFsc2U6Ci0gICAgICAgICAgICAgICAgY2FzZSBKc29uVG9rZW4uVG9rZW5U
eXBlLlRydWU6Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkc1tWYWx1ZS5Cb29sVmFsdWVGaWVs
ZE51bWJlcl0uQWNjZXNzb3IuU2V0VmFsdWUobWVzc2FnZSwgZmlyc3RUb2tlbi5UeXBlID09IEpz
b25Ub2tlbi5Ub2tlblR5cGUuVHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICBjYXNlIEpzb25Ub2tlbi5Ub2tlblR5cGUuU3RhcnRPYmplY3Q6Ci0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGZp
ZWxkc1tWYWx1ZS5TdHJ1Y3RWYWx1ZUZpZWxkTnVtYmVyXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBzdHJ1Y3RNZXNzYWdlID0gTmV3TWVzc2FnZUZvckZpZWxkKGZpZWxkKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuaXplci5QdXNoQmFjayhmaXJzdFRva2VuKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE1lcmdlKHN0cnVjdE1lc3NhZ2UsIHRva2VuaXplcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZC5BY2Nlc3Nvci5TZXRWYWx1ZShtZXNzYWdlLCBzdHJ1
Y3RNZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgSnNvblRva2VuLlRva2VuVHlwZS5TdGFy
dEFycmF5OgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZmllbGQgPSBmaWVsZHNbVmFsdWUuTGlzdFZhbHVlRmllbGROdW1iZXJdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBOZXdNZXNzYWdlRm9yRmllbGQoZmllbGQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW5pemVyLlB1c2hCYWNrKGZpcnN0VG9rZW4pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgTWVyZ2UobGlzdCwgdG9rZW5pemVyKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZpZWxkLkFjY2Vzc29yLlNldFZhbHVlKG1lc3NhZ2UsIGxpc3QpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFs
aWRPcGVyYXRpb25FeGNlcHRpb24oIlVuZXhwZWN0ZWQgdG9rZW4gdHlwZTogIiArIGZpcnN0VG9r
ZW4uVHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZv
aWQgTWVyZ2VTdHJ1Y3QoSU1lc3NhZ2UgbWVzc2FnZSwgSnNvblRva2VuaXplciB0b2tlbml6ZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2VuaXplci5OZXh0KCk7Ci0g
ICAgICAgICAgICBpZiAodG9rZW4uVHlwZSAhPSBKc29uVG9rZW4uVG9rZW5UeXBlLlN0YXJ0T2Jq
ZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJv
dG9jb2xCdWZmZXJFeGNlcHRpb24oIkV4cGVjdGVkIG9iamVjdCB2YWx1ZSBmb3IgU3RydWN0Iik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b2tlbml6ZXIuUHVzaEJhY2sodG9rZW4pOwot
Ci0gICAgICAgICAgICB2YXIgZmllbGQgPSBtZXNzYWdlLkRlc2NyaXB0b3IuRmllbGRzW1N0cnVj
dC5GaWVsZHNGaWVsZE51bWJlcl07Ci0gICAgICAgICAgICBNZXJnZU1hcEZpZWxkKG1lc3NhZ2Us
IGZpZWxkLCB0b2tlbml6ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIE1l
cmdlQW55KElNZXNzYWdlIG1lc3NhZ2UsIEpzb25Ub2tlbml6ZXIgdG9rZW5pemVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBSZWNvcmQgdGhlIHRva2VuIHN0cmVhbSB1bnRpbCB3ZSBzZWUg
dGhlIEB0eXBlIHByb3BlcnR5LiBBdCB0aGF0IHBvaW50LCB3ZSBjYW4gdGFrZSB0aGUgdmFsdWUs
IGNvbnN1bHQKLSAgICAgICAgICAgIC8vIHRoZSB0eXBlIHJlZ2lzdHJ5IGZvciB0aGUgcmVsZXZh
bnQgbWVzc2FnZSwgYW5kIHJlcGxheSB0aGUgc3RyZWFtLCBvbWl0dGluZyB0aGUgQHR5cGUgcHJv
cGVydHkuCi0gICAgICAgICAgICB2YXIgdG9rZW5zID0gbmV3IExpc3Q8SnNvblRva2VuPigpOwot
Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbml6ZXIuTmV4dCgpOwotICAgICAgICAgICAg
aWYgKHRva2VuLlR5cGUgIT0gSnNvblRva2VuLlRva2VuVHlwZS5TdGFydE9iamVjdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uKCJFeHBlY3RlZCBvYmplY3QgdmFsdWUgZm9yIEFueSIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaW50IHR5cGVVcmxPYmplY3REZXB0aCA9IHRva2VuaXplci5PYmplY3RE
ZXB0aDsKLQotICAgICAgICAgICAgLy8gVGhlIGNoZWNrIGZvciB0aGUgcHJvcGVydHkgZGVwdGgg
cHJvdGVjdHMgdXMgZnJvbSBuZXN0ZWQgQW55IHZhbHVlcyB3aGljaCBvY2N1ciBiZWZvcmUgdGhl
IHR5cGUgVVJMCi0gICAgICAgICAgICAvLyBmb3IgKnRoaXMqIEFueS4KLSAgICAgICAgICAgIHdo
aWxlICh0b2tlbi5UeXBlICE9IEpzb25Ub2tlbi5Ub2tlblR5cGUuTmFtZSB8fAotICAgICAgICAg
ICAgICAgIHRva2VuLlN0cmluZ1ZhbHVlICE9IEpzb25Gb3JtYXR0ZXIuQW55VHlwZVVybEZpZWxk
IHx8Ci0gICAgICAgICAgICAgICAgdG9rZW5pemVyLk9iamVjdERlcHRoICE9IHR5cGVVcmxPYmpl
Y3REZXB0aCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0b2tlbnMuQWRkKHRva2Vu
KTsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuaXplci5OZXh0KCk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAodG9rZW5pemVyLk9iamVjdERlcHRoIDwgdHlwZVVybE9iamVjdERlcHRoKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQ
cm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiQW55IG1lc3NhZ2Ugd2l0aCBubyBAdHlwZSIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRG9uJ3QgYWRk
IHRoZSBAdHlwZSBwcm9wZXJ0eSBvciBpdHMgdmFsdWUgdG8gdGhlIHJlY29yZGVkIHRva2VuIGxp
c3QKLSAgICAgICAgICAgIHRva2VuID0gdG9rZW5pemVyLk5leHQoKTsKLSAgICAgICAgICAgIGlm
ICh0b2tlbi5UeXBlICE9IEpzb25Ub2tlbi5Ub2tlblR5cGUuU3RyaW5nVmFsdWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbigiRXhwZWN0ZWQgc3RyaW5nIHZhbHVlIGZvciBBbnkuQHR5cGUiKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHN0cmluZyB0eXBlVXJsID0gdG9rZW4uU3RyaW5nVmFsdWU7Ci0g
ICAgICAgICAgICBzdHJpbmcgdHlwZU5hbWUgPSBBbnkuR2V0VHlwZU5hbWUodHlwZVVybCk7Ci0K
LSAgICAgICAgICAgIE1lc3NhZ2VEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBzZXR0aW5ncy5UeXBl
UmVnaXN0cnkuRmluZCh0eXBlTmFtZSk7Ci0gICAgICAgICAgICBpZiAoZGVzY3JpcHRvciA9PSBu
dWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3Bl
cmF0aW9uRXhjZXB0aW9uKCQiVHlwZSByZWdpc3RyeSBoYXMgbm8gZGVzY3JpcHRvciBmb3IgdHlw
ZSBuYW1lICd7dHlwZU5hbWV9JyIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBO
b3cgcmVwbGF5IHRoZSB0b2tlbiBzdHJlYW0gd2UndmUgYWxyZWFkeSByZWFkIGFuZCBhbnl0aGlu
ZyB0aGF0IHJlbWFpbnMgb2YgdGhlIG9iamVjdCwganVzdCBwYXJzaW5nIGl0Ci0gICAgICAgICAg
ICAvLyBhcyBub3JtYWwuIE91ciBvcmlnaW5hbCB0b2tlbml6ZXIgc2hvdWxkIGVuZCB1cCBhdCB0
aGUgZW5kIG9mIHRoZSBvYmplY3QuCi0gICAgICAgICAgICB2YXIgcmVwbGF5ID0gSnNvblRva2Vu
aXplci5Gcm9tUmVwbGF5ZWRUb2tlbnModG9rZW5zLCB0b2tlbml6ZXIpOwotICAgICAgICAgICAg
dmFyIGJvZHkgPSBkZXNjcmlwdG9yLlBhcnNlci5DcmVhdGVUZW1wbGF0ZSgpOwotICAgICAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuSXNXZWxsS25vd25UeXBlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIE1lcmdlV2VsbEtub3duVHlwZUFueUJvZHkoYm9keSwgcmVwbGF5KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBNZXJnZShib2R5LCByZXBsYXkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGRh
dGEgPSBib2R5LlRvQnl0ZVN0cmluZygpOwotCi0gICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBo
YXZlIHRoZSBtZXNzYWdlIGRhdGEsIHdlIGNhbiBwYWNrIGl0IGludG8gYW4gQW55ICh0aGUgbWVz
c2FnZSByZWNlaXZlZCBhcyBhIHBhcmFtZXRlcikuCi0gICAgICAgICAgICBtZXNzYWdlLkRlc2Ny
aXB0b3IuRmllbGRzW0FueS5UeXBlVXJsRmllbGROdW1iZXJdLkFjY2Vzc29yLlNldFZhbHVlKG1l
c3NhZ2UsIHR5cGVVcmwpOwotICAgICAgICAgICAgbWVzc2FnZS5EZXNjcmlwdG9yLkZpZWxkc1tB
bnkuVmFsdWVGaWVsZE51bWJlcl0uQWNjZXNzb3IuU2V0VmFsdWUobWVzc2FnZSwgZGF0YSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBXZWxsLWtub3duIHR5cGVzIGVuZCB1cCBpbiBhIHByb3Bl
cnR5IGNhbGxlZCAidmFsdWUiIGluIHRoZSBKU09OLiBBcyB0aGVyZSdzIG5vIGxvbmdlciBhIEB0
eXBlIHByb3BlcnR5Ci0gICAgICAgIC8vIGluIHRoZSBnaXZlbiBKU09OIHRva2VuIHN0cmVhbSwg
d2Ugc2hvdWxkICpvbmx5KiBoYXZlIHRva2VucyBvZiBzdGFydC1vYmplY3QsIG5hbWUoInZhbHVl
IiksIHRoZSB2YWx1ZQotICAgICAgICAvLyBpdHNlbGYsIGFuZCB0aGVuIGVuZC1vYmplY3QuCi0g
ICAgICAgIHByaXZhdGUgdm9pZCBNZXJnZVdlbGxLbm93blR5cGVBbnlCb2R5KElNZXNzYWdlIGJv
ZHksIEpzb25Ub2tlbml6ZXIgdG9rZW5pemVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
dG9rZW4gPSB0b2tlbml6ZXIuTmV4dCgpOyAvLyBEZWZpbml0ZWx5IHN0YXJ0LW9iamVjdDsgY2hl
Y2tlZCBpbiBwcmV2aW91cyBtZXRob2QKLSAgICAgICAgICAgIHRva2VuID0gdG9rZW5pemVyLk5l
eHQoKTsKLSAgICAgICAgICAgIC8vIFRPRE86IFdoYXQgYWJvdXQgYW4gYWJzZW50IEludDMyVmFs
dWUsIGZvciBleGFtcGxlPwotICAgICAgICAgICAgaWYgKHRva2VuLlR5cGUgIT0gSnNvblRva2Vu
LlRva2VuVHlwZS5OYW1lIHx8IHRva2VuLlN0cmluZ1ZhbHVlICE9IEpzb25Gb3JtYXR0ZXIuQW55
V2VsbEtub3duVHlwZVZhbHVlRmllbGQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigkIkV4cGVjdGVkICd7SnNv
bkZvcm1hdHRlci5BbnlXZWxsS25vd25UeXBlVmFsdWVGaWVsZH0nIHByb3BlcnR5IGZvciB3ZWxs
LWtub3duIHR5cGUgQW55IGJvZHkiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE1lcmdl
KGJvZHksIHRva2VuaXplcik7Ci0gICAgICAgICAgICB0b2tlbiA9IHRva2VuaXplci5OZXh0KCk7
Ci0gICAgICAgICAgICBpZiAodG9rZW4uVHlwZSAhPSBKc29uVG9rZW4uVG9rZW5UeXBlLkVuZE9i
amVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uKCQiRXhwZWN0ZWQgZW5kLW9iamVjdCB0b2tlbiBhZnRlciBA
dHlwZS92YWx1ZSBmb3Igd2VsbC1rbm93biB0eXBlIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAjcmVnaW9uIFV0aWxpdHkgbWV0aG9kcyB3aGljaCBkb24ndCBkZXBlbmQg
b24gdGhlIHN0YXRlIChvciBzZXR0aW5ncykgb2YgdGhlIHBhcnNlci4KLSAgICAgICAgcHJpdmF0
ZSBzdGF0aWMgb2JqZWN0IFBhcnNlTWFwS2V5KEZpZWxkRGVzY3JpcHRvciBmaWVsZCwgc3RyaW5n
IGtleVRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBl
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkJvb2w6Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChrZXlUZXh0ID09ICJ0cnVlIikKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGtleVRleHQgPT0gImZhbHNlIikK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIkludmFsaWQgc3RyaW5nIGZvciBib29s
IG1hcCBrZXk6ICIgKyBrZXlUZXh0KTsKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5T
dHJpbmc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXlUZXh0OwotICAgICAgICAgICAg
ICAgIGNhc2UgRmllbGRUeXBlLkludDMyOgotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBl
LlNJbnQzMjoKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5TRml4ZWQzMjoKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlTnVtZXJpY1N0cmluZyhrZXlUZXh0LCBpbnQuUGFy
c2UpOwotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLlVJbnQzMjoKLSAgICAgICAgICAg
ICAgICBjYXNlIEZpZWxkVHlwZS5GaXhlZDMyOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UGFyc2VOdW1lcmljU3RyaW5nKGtleVRleHQsIHVpbnQuUGFyc2UpOwotICAgICAgICAgICAgICAg
IGNhc2UgRmllbGRUeXBlLkludDY0OgotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLlNJ
bnQ2NDoKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5TRml4ZWQ2NDoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFBhcnNlTnVtZXJpY1N0cmluZyhrZXlUZXh0LCBsb25nLlBhcnNl
KTsKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5VSW50NjQ6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBGaWVsZFR5cGUuRml4ZWQ2NDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBh
cnNlTnVtZXJpY1N0cmluZyhrZXlUZXh0LCB1bG9uZy5QYXJzZSk7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbigiSW52YWxpZCBmaWVsZCB0eXBlIGZvciBtYXA6ICIgKyBmaWVsZC5GaWVs
ZFR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0
aWMgb2JqZWN0IFBhcnNlU2luZ2xlTnVtYmVyVmFsdWUoRmllbGREZXNjcmlwdG9yIGZpZWxkLCBK
c29uVG9rZW4gdG9rZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IHRv
a2VuLk51bWJlclZhbHVlOwotICAgICAgICAgICAgY2hlY2tlZAotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkludDMyOgotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBGaWVsZFR5cGUuU0ludDMyOgotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWVsZFR5cGUuU0ZpeGVkMzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tJ
bnRlZ2VyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludCkg
dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5VSW50MzI6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5GaXhlZDMyOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENoZWNrSW50ZWdlcih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICh1aW50KSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgRmllbGRUeXBlLkludDY0OgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVs
ZFR5cGUuU0ludDY0OgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuU0Zp
eGVkNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tJbnRlZ2VyKHZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGxvbmcpIHZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuVUludDY0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBGaWVsZFR5cGUuRml4ZWQ2NDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDaGVja0ludGVnZXIodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAodWxvbmcpIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5
cGUuRG91YmxlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkZsb2F0OgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChkb3VibGUuSXNOYU4odmFsdWUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZs
b2F0Lk5hTjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlID4gZmxvYXQuTWF4VmFsdWUgfHwgdmFsdWUgPCBmbG9hdC5N
aW5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChkb3VibGUuSXNQb3NpdGl2ZUluZmluaXR5KHZhbHVlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZsb2F0LlBvc2l0aXZlSW5maW5pdHk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGRvdWJsZS5Jc05lZ2F0aXZlSW5maW5pdHkodmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmxvYXQuTmVnYXRpdmVJbmZpbml0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uKCQiVmFsdWUgb3V0IG9mIHJhbmdlOiB7dmFsdWV9Iik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAoZmxvYXQpIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5
cGUuRW51bToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja0ludGVnZXIodmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3QgcmV0dXJuIGl0IGFzIGFuIGlu
dCwgYW5kIGxldCB0aGUgQ0xSIGNvbnZlcnQgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSBkb24ndCBjaGVjayB0aGF0IGl0J3MgYSBr
bm93biB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludCkgdmFs
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oJCJVbnN1
cHBvcnRlZCBjb252ZXJzaW9uIGZyb20gSlNPTiBudW1iZXIgZm9yIGZpZWxkIHR5cGUge2ZpZWxk
LkZpZWxkVHlwZX0iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBjYXRjaCAoT3ZlcmZsb3dFeGNlcHRpb24pCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uKCQiVmFsdWUgb3V0IG9mIHJhbmdlOiB7dmFsdWV9Iik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMg
dm9pZCBDaGVja0ludGVnZXIoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoZG91YmxlLklzSW5maW5pdHkodmFsdWUpIHx8IGRvdWJsZS5Jc05hTih2YWx1ZSkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZl
ckV4Y2VwdGlvbigkIlZhbHVlIG5vdCBhbiBpbnRlZ2VyOiB7dmFsdWV9Iik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAodmFsdWUgIT0gTWF0aC5GbG9vcih2YWx1ZSkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbigkIlZhbHVlIG5vdCBhbiBpbnRlZ2VyOiB7dmFsdWV9Iik7Ci0gICAgICAgICAgICB9
ICAgICAgICAgICAgCi0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBvYmplY3Qg
UGFyc2VTaW5nbGVTdHJpbmdWYWx1ZShGaWVsZERlc2NyaXB0b3IgZmllbGQsIHN0cmluZyB0ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5TdHJpbmc6Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBl
LkJ5dGVzOgotICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ5dGVTdHJpbmcuRnJvbUJhc2U2NCh0ZXh0
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRm9y
bWF0RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5JbnZhbGlkQmFzZTY0
KGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5
cGUuSW50MzI6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuU0ludDMyOgotICAgICAg
ICAgICAgICAgIGNhc2UgRmllbGRUeXBlLlNGaXhlZDMyOgotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUGFyc2VOdW1lcmljU3RyaW5nKHRleHQsIGludC5QYXJzZSk7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBGaWVsZFR5cGUuVUludDMyOgotICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBl
LkZpeGVkMzI6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZU51bWVyaWNTdHJpbmco
dGV4dCwgdWludC5QYXJzZSk7Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuSW50NjQ6
Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuU0ludDY0OgotICAgICAgICAgICAgICAg
IGNhc2UgRmllbGRUeXBlLlNGaXhlZDY0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFy
c2VOdW1lcmljU3RyaW5nKHRleHQsIGxvbmcuUGFyc2UpOwotICAgICAgICAgICAgICAgIGNhc2Ug
RmllbGRUeXBlLlVJbnQ2NDoKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5GaXhlZDY0
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VOdW1lcmljU3RyaW5nKHRleHQsIHVs
b25nLlBhcnNlKTsKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5Eb3VibGU6Ci0gICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSBkID0gUGFyc2VOdW1lcmljU3RyaW5nKHRleHQsIGRvdWJs
ZS5QYXJzZSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlSW5maW5pdHlBbmROYW4odGV4
dCwgZG91YmxlLklzUG9zaXRpdmVJbmZpbml0eShkKSwgZG91YmxlLklzTmVnYXRpdmVJbmZpbml0
eShkKSwgZG91YmxlLklzTmFOKGQpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQ7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuRmxvYXQ6Ci0gICAgICAgICAgICAgICAgICAg
IGZsb2F0IGYgPSBQYXJzZU51bWVyaWNTdHJpbmcodGV4dCwgZmxvYXQuUGFyc2UpOwotICAgICAg
ICAgICAgICAgICAgICBWYWxpZGF0ZUluZmluaXR5QW5kTmFuKHRleHQsIGZsb2F0LklzUG9zaXRp
dmVJbmZpbml0eShmKSwgZmxvYXQuSXNOZWdhdGl2ZUluZmluaXR5KGYpLCBmbG9hdC5Jc05hTihm
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmOwotICAgICAgICAgICAgICAgIGNhc2Ug
RmllbGRUeXBlLkVudW06Ci0gICAgICAgICAgICAgICAgICAgIHZhciBlbnVtVmFsdWUgPSBmaWVs
ZC5FbnVtVHlwZS5GaW5kVmFsdWVCeU5hbWUodGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChlbnVtVmFsdWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigkIklu
dmFsaWQgZW51bSB2YWx1ZToge3RleHR9IGZvciBlbnVtIHR5cGU6IHtmaWVsZC5FbnVtVHlwZS5G
dWxsTmFtZX0iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAv
LyBKdXN0IHJldHVybiBpdCBhcyBhbiBpbnQsIGFuZCBsZXQgdGhlIENMUiBjb252ZXJ0IGl0Lgot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW51bVZhbHVlLk51bWJlcjsKLSAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uKCQiVW5zdXBwb3J0ZWQgY29udmVyc2lvbiBmcm9tIEpTT04gc3Ry
aW5nIGZvciBmaWVsZCB0eXBlIHtmaWVsZC5GaWVsZFR5cGV9Iik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEg
bmV3IGluc3RhbmNlIG9mIHRoZSBtZXNzYWdlIHR5cGUgZm9yIHRoZSBnaXZlbiBmaWVsZC4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgSU1lc3NhZ2UgTmV3
TWVzc2FnZUZvckZpZWxkKEZpZWxkRGVzY3JpcHRvciBmaWVsZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZpZWxkLk1lc3NhZ2VUeXBlLlBhcnNlci5DcmVhdGVUZW1wbGF0ZSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgVCBQYXJzZU51bWVyaWNTdHJpbmc8
VD4oc3RyaW5nIHRleHQsIEZ1bmM8c3RyaW5nLCBOdW1iZXJTdHlsZXMsIElGb3JtYXRQcm92aWRl
ciwgVD4gcGFyc2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDYW4ndCBwcm9oaWJpdCB0
aGlzIHdpdGggTnVtYmVyU3R5bGVzLgotICAgICAgICAgICAgaWYgKHRleHQuU3RhcnRzV2l0aCgi
KyIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJv
dG9jb2xCdWZmZXJFeGNlcHRpb24oJCJJbnZhbGlkIG51bWVyaWMgdmFsdWU6IHt0ZXh0fSIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRleHQuU3RhcnRzV2l0aCgiMCIpICYmIHRl
eHQuTGVuZ3RoID4gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAodGV4dFsx
XSA+PSAnMCcgJiYgdGV4dFsxXSA8PSAnOScpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKCQiSW52
YWxpZCBudW1lcmljIHZhbHVlOiB7dGV4dH0iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0ZXh0LlN0YXJ0c1dpdGgoIi0wIikgJiYgdGV4
dC5MZW5ndGggPiAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh0ZXh0WzJd
ID49ICcwJyAmJiB0ZXh0WzJdIDw9ICc5JykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oJCJJbnZh
bGlkIG51bWVyaWMgdmFsdWU6IHt0ZXh0fSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZXIodGV4dCwgTnVtYmVyU3R5bGVzLkFsbG93TGVhZGluZ1NpZ24gfCBOdW1iZXJT
dHlsZXMuQWxsb3dEZWNpbWFsUG9pbnQgfCBOdW1iZXJTdHlsZXMuQWxsb3dFeHBvbmVudCwgQ3Vs
dHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXRjaCAoRm9ybWF0RXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oJCJJbnZhbGlkIG51bWVyaWMg
dmFsdWUgZm9yIHR5cGU6IHt0ZXh0fSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0
Y2ggKE92ZXJmbG93RXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oJCJWYWx1ZSBvdXQgb2YgcmFu
Z2U6IHt0ZXh0fSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxz
dW1tYXJ5PgotICAgICAgICAvLy8gQ2hlY2tzIHRoYXQgYW55IGluZmluaXRlL05hTiB2YWx1ZXMg
b3JpZ2luYXRlZCBmcm9tIHRoZSBjb3JyZWN0IHRleHQuCi0gICAgICAgIC8vLyBUaGlzIGNvcnJl
Y3RzIHRoZSBsZW5pZW50IHdoaXRlc3BhY2UgaGFuZGxpbmcgb2YgZG91YmxlLlBhcnNlL2Zsb2F0
LlBhcnNlLCBhcyB3ZWxsIGFzIHRoZQotICAgICAgICAvLy8gd2F5IHRoYXQgTW9ubyBwYXJzZXMg
b3V0LW9mLXJhbmdlIHZhbHVlcyBhcyBpbmZpbml0eS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBWYWxpZGF0ZUluZmluaXR5QW5kTmFuKHN0cmlu
ZyB0ZXh0LCBib29sIGlzUG9zaXRpdmVJbmZpbml0eSwgYm9vbCBpc05lZ2F0aXZlSW5maW5pdHks
IGJvb2wgaXNOYU4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgoaXNQb3NpdGl2ZUluZmlu
aXR5ICYmIHRleHQgIT0gIkluZmluaXR5IikgfHwKLSAgICAgICAgICAgICAgICAoaXNOZWdhdGl2
ZUluZmluaXR5ICYmIHRleHQgIT0gIi1JbmZpbml0eSIpIHx8Ci0gICAgICAgICAgICAgICAgKGlz
TmFOICYmIHRleHQgIT0gIk5hTiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oJCJJbnZhbGlkIG51bWVyaWMg
dmFsdWU6IHt0ZXh0fSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJp
dmF0ZSBzdGF0aWMgdm9pZCBNZXJnZVRpbWVzdGFtcChJTWVzc2FnZSBtZXNzYWdlLCBKc29uVG9r
ZW4gdG9rZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0b2tlbi5UeXBlICE9IEpzb25U
b2tlbi5Ub2tlblR5cGUuU3RyaW5nVmFsdWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiRXhwZWN0ZWQgc3Ry
aW5nIHZhbHVlIGZvciBUaW1lc3RhbXAiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZh
ciBtYXRjaCA9IFRpbWVzdGFtcFJlZ2V4Lk1hdGNoKHRva2VuLlN0cmluZ1ZhbHVlKTsKLSAgICAg
ICAgICAgIGlmICghbWF0Y2guU3VjY2VzcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKCQiSW52YWxpZCBUaW1l
c3RhbXAgdmFsdWU6IHt0b2tlbi5TdHJpbmdWYWx1ZX0iKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHZhciBkYXRlVGltZSA9IG1hdGNoLkdyb3Vwc1siZGF0ZXRpbWUiXS5WYWx1ZTsKLSAg
ICAgICAgICAgIHZhciBzdWJzZWNvbmRzID0gbWF0Y2guR3JvdXBzWyJzdWJzZWNvbmRzIl0uVmFs
dWU7Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gbWF0Y2guR3JvdXBzWyJvZmZzZXQiXS5WYWx1
ZTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGF0
ZVRpbWUgcGFyc2VkID0gRGF0ZVRpbWUuUGFyc2VFeGFjdCgKLSAgICAgICAgICAgICAgICAgICAg
ZGF0ZVRpbWUsCi0gICAgICAgICAgICAgICAgICAgICJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MiLAot
ICAgICAgICAgICAgICAgICAgICBDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlLAotICAgICAg
ICAgICAgICAgICAgICBEYXRlVGltZVN0eWxlcy5Bc3N1bWVVbml2ZXJzYWwgfCBEYXRlVGltZVN0
eWxlcy5BZGp1c3RUb1VuaXZlcnNhbCk7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzogSXQgd291
bGQgYmUgbmljZSBub3QgdG8gaGF2ZSB0byBjcmVhdGUgYWxsIHRoZXNlIG9iamVjdHMuLi4gZWFz
eSB0byBvcHRpbWl6ZSBsYXRlciB0aG91Z2guCi0gICAgICAgICAgICAgICAgVGltZXN0YW1wIHRp
bWVzdGFtcCA9IFRpbWVzdGFtcC5Gcm9tRGF0ZVRpbWUocGFyc2VkKTsKLSAgICAgICAgICAgICAg
ICBpbnQgbmFub3NUb0FkZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHN1YnNlY29uZHMgIT0g
IiIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3Vs
ZCBhbHdheXMgd29yaywgYXMgd2UndmUgZ290IDEtOSBkaWdpdHMuCi0gICAgICAgICAgICAgICAg
ICAgIGludCBwYXJzZWRGcmFjdGlvbiA9IGludC5QYXJzZShzdWJzZWNvbmRzLlN1YnN0cmluZygx
KSwgQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5h
bm9zVG9BZGQgPSBwYXJzZWRGcmFjdGlvbiAqIFN1YnNlY29uZFNjYWxpbmdGYWN0b3JzW3N1YnNl
Y29uZHMuTGVuZ3RoXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW50IHNl
Y29uZHNUb0FkZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSAiWiIpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBhbW91bnQg
d2UgbmVlZCB0byAqc3VidHJhY3QqIGZyb20gdGhlIGxvY2FsIHRpbWUgdG8gZ2V0IHRvIFVUQyAt
IGhlbmNlIC0gPT4gKzEgYW5kIHZpY2UgdmVyc2EuCi0gICAgICAgICAgICAgICAgICAgIGludCBz
aWduID0gb2Zmc2V0WzBdID09ICctJyA/IDEgOiAtMTsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGhvdXJzID0gaW50LlBhcnNlKG9mZnNldC5TdWJzdHJpbmcoMSwgMiksIEN1bHR1cmVJbmZvLklu
dmFyaWFudEN1bHR1cmUpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbWludXRlcyA9IGludC5Q
YXJzZShvZmZzZXQuU3Vic3RyaW5nKDQsIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHRv
dGFsTWludXRlcyA9IGhvdXJzICogNjAgKyBtaW51dGVzOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodG90YWxNaW51dGVzID4gMTggKiA2MCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
bigiSW52YWxpZCBUaW1lc3RhbXAgdmFsdWU6ICIgKyB0b2tlbi5TdHJpbmdWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRvdGFsTWludXRlcyA9
PSAwICYmIHNpZ24gPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhbiBvZmZzZXQgb2YgLTAwOjAwLCB3aGljaCBtZWFucyAidW5r
bm93biBsb2NhbCBvZmZzZXQiLiBJdCBtYWtlcyBubyBzZW5zZSBmb3IgYSB0aW1lc3RhbXAuCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhj
ZXB0aW9uKCJJbnZhbGlkIFRpbWVzdGFtcCB2YWx1ZTogIiArIHRva2VuLlN0cmluZ1ZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRv
ICpzdWJ0cmFjdCogdGhlIG9mZnNldCBmcm9tIGxvY2FsIHRpbWUgdG8gZ2V0IFVUQy4KLSAgICAg
ICAgICAgICAgICAgICAgc2Vjb25kc1RvQWRkID0gc2lnbiAqIHRvdGFsTWludXRlcyAqIDYwOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBFbnN1cmUgd2UndmUgZ290IHRo
ZSByaWdodCBzaWducy4gQ3VycmVudGx5IHVubmVjZXNzYXJ5LCBidXQgZWFzeSB0byBkby4KLSAg
ICAgICAgICAgICAgICBpZiAoc2Vjb25kc1RvQWRkIDwgMCAmJiBuYW5vc1RvQWRkID4gMCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNlY29uZHNUb0FkZCsrOwotICAg
ICAgICAgICAgICAgICAgICBuYW5vc1RvQWRkID0gbmFub3NUb0FkZCAtIER1cmF0aW9uLk5hbm9z
ZWNvbmRzUGVyU2Vjb25kOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
c2Vjb25kc1RvQWRkICE9IDAgfHwgbmFub3NUb0FkZCAhPSAwKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wICs9IG5ldyBEdXJhdGlvbiB7IE5hbm9zID0g
bmFub3NUb0FkZCwgU2Vjb25kcyA9IHNlY29uZHNUb0FkZCB9OwotICAgICAgICAgICAgICAgICAg
ICAvLyBUaGUgcmVzdWx0aW5nIHRpbWVzdGFtcCBhZnRlciBvZmZzZXQgY2hhbmdlIHdvdWxkIGJl
IG91dCBvZiBvdXIgZXhwZWN0ZWQgcmFuZ2UuIEN1cnJlbnRseSB0aGUgVGltZXN0YW1wIG1lc3Nh
Z2UgZG9lc24ndCB2YWxpZGF0ZSB0aGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFueXdoZXJl
LCBidXQgd2Ugc2hvdWxkbid0IHBhcnNlIGl0LgotICAgICAgICAgICAgICAgICAgICBpZiAodGlt
ZXN0YW1wLlNlY29uZHMgPCBUaW1lc3RhbXAuVW5peFNlY29uZHNBdEJjbE1pblZhbHVlIHx8IHRp
bWVzdGFtcC5TZWNvbmRzID4gVGltZXN0YW1wLlVuaXhTZWNvbmRzQXRCY2xNYXhWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiSW52YWxpZCBUaW1lc3RhbXAgdmFsdWU6ICIg
KyB0b2tlbi5TdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbWVzc2FnZS5EZXNjcmlwdG9yLkZpZWxkc1tUaW1lc3Rh
bXAuU2Vjb25kc0ZpZWxkTnVtYmVyXS5BY2Nlc3Nvci5TZXRWYWx1ZShtZXNzYWdlLCB0aW1lc3Rh
bXAuU2Vjb25kcyk7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZS5EZXNjcmlwdG9yLkZpZWxkc1tU
aW1lc3RhbXAuTmFub3NGaWVsZE51bWJlcl0uQWNjZXNzb3IuU2V0VmFsdWUobWVzc2FnZSwgdGlt
ZXN0YW1wLk5hbm9zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChGb3JtYXRF
eGNlcHRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiSW52YWxpZCBUaW1lc3RhbXAgdmFsdWU6ICIgKyB0
b2tlbi5TdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBw
cml2YXRlIHN0YXRpYyB2b2lkIE1lcmdlRHVyYXRpb24oSU1lc3NhZ2UgbWVzc2FnZSwgSnNvblRv
a2VuIHRva2VuKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodG9rZW4uVHlwZSAhPSBKc29u
VG9rZW4uVG9rZW5UeXBlLlN0cmluZ1ZhbHVlKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIkV4cGVjdGVkIHN0
cmluZyB2YWx1ZSBmb3IgRHVyYXRpb24iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZh
ciBtYXRjaCA9IER1cmF0aW9uUmVnZXguTWF0Y2godG9rZW4uU3RyaW5nVmFsdWUpOwotICAgICAg
ICAgICAgaWYgKCFtYXRjaC5TdWNjZXNzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIkludmFsaWQgRHVyYXRp
b24gdmFsdWU6ICIgKyB0b2tlbi5TdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB2YXIgc2lnbiA9IG1hdGNoLkdyb3Vwc1sic2lnbiJdLlZhbHVlOwotICAgICAgICAgICAg
dmFyIHNlY29uZHNUZXh0ID0gbWF0Y2guR3JvdXBzWyJpbnQiXS5WYWx1ZTsKLSAgICAgICAgICAg
IC8vIFByb2hpYml0IGxlYWRpbmcgaW5zaWduZmljYW50IHplcm9lcwotICAgICAgICAgICAgaWYg
KHNlY29uZHNUZXh0WzBdID09ICcwJyAmJiBzZWNvbmRzVGV4dC5MZW5ndGggPiAxKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24oIkludmFsaWQgRHVyYXRpb24gdmFsdWU6ICIgKyB0b2tlbi5TdHJpbmdWYWx1ZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgc3Vic2Vjb25kcyA9IG1hdGNoLkdyb3Vw
c1sic3Vic2Vjb25kcyJdLlZhbHVlOwotICAgICAgICAgICAgdmFyIG11bHRpcGxpZXIgPSBzaWdu
ID09ICItIiA/IC0xIDogMTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbG9uZyBzZWNvbmRzID0gbG9uZy5QYXJzZShzZWNvbmRzVGV4dCwgQ3VsdHVy
ZUluZm8uSW52YXJpYW50Q3VsdHVyZSkgKiBtdWx0aXBsaWVyOwotICAgICAgICAgICAgICAgIGlu
dCBuYW5vcyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHN1YnNlY29uZHMgIT0gIiIpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMg
d29yaywgYXMgd2UndmUgZ290IDEtOSBkaWdpdHMuCi0gICAgICAgICAgICAgICAgICAgIGludCBw
YXJzZWRGcmFjdGlvbiA9IGludC5QYXJzZShzdWJzZWNvbmRzLlN1YnN0cmluZygxKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5hbm9zID0gcGFyc2VkRnJhY3Rpb24gKiBTdWJzZWNvbmRTY2FsaW5n
RmFjdG9yc1tzdWJzZWNvbmRzLkxlbmd0aF0gKiBtdWx0aXBsaWVyOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoIUR1cmF0aW9uLklzTm9ybWFsaXplZChzZWNvbmRzLCBu
YW5vcykpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKCQiSW52YWxpZCBEdXJhdGlvbiB2YWx1ZTog
e3Rva2VuLlN0cmluZ1ZhbHVlfSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtZXNzYWdlLkRlc2NyaXB0b3IuRmllbGRzW0R1cmF0aW9uLlNlY29uZHNGaWVsZE51bWJlcl0u
QWNjZXNzb3IuU2V0VmFsdWUobWVzc2FnZSwgc2Vjb25kcyk7Ci0gICAgICAgICAgICAgICAgbWVz
c2FnZS5EZXNjcmlwdG9yLkZpZWxkc1tEdXJhdGlvbi5OYW5vc0ZpZWxkTnVtYmVyXS5BY2Nlc3Nv
ci5TZXRWYWx1ZShtZXNzYWdlLCBuYW5vcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXRjaCAoRm9ybWF0RXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oJCJJbnZhbGlkIER1cmF0aW9u
IHZhbHVlOiB7dG9rZW4uU3RyaW5nVmFsdWV9Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE1lcmdlRmllbGRNYXNrKElNZXNzYWdlIG1l
c3NhZ2UsIEpzb25Ub2tlbiB0b2tlbikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRva2Vu
LlR5cGUgIT0gSnNvblRva2VuLlRva2VuVHlwZS5TdHJpbmdWYWx1ZSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
KCJFeHBlY3RlZCBzdHJpbmcgdmFsdWUgZm9yIEZpZWxkTWFzayIpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy8gVE9ETzogRG8gd2UgKndhbnQqIHRvIHJlbW92ZSBlbXB0eSBlbnRyaWVz
PyBQcm9iYWJseSBva2F5IHRvIHRyZWF0ICIiIGFzICJubyBwYXRocyIsIGJ1dCAiZm9vLCxiYXIi
PwotICAgICAgICAgICAgc3RyaW5nW10ganNvblBhdGhzID0gdG9rZW4uU3RyaW5nVmFsdWUuU3Bs
aXQoRmllbGRNYXNrUGF0aFNlcGFyYXRvcnMsIFN0cmluZ1NwbGl0T3B0aW9ucy5SZW1vdmVFbXB0
eUVudHJpZXMpOwotICAgICAgICAgICAgSUxpc3QgbWVzc2FnZVBhdGhzID0gKElMaXN0KSBtZXNz
YWdlLkRlc2NyaXB0b3IuRmllbGRzW0ZpZWxkTWFzay5QYXRoc0ZpZWxkTnVtYmVyXS5BY2Nlc3Nv
ci5HZXRWYWx1ZShtZXNzYWdlKTsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBwYXRoIGluIGpz
b25QYXRocykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlUGF0aHMuQWRk
KFRvU25ha2VDYXNlKHBhdGgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gUG9ydGVkIGZyb20gc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFs
L3V0aWxpdHkuY2MKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgc3RyaW5nIFRvU25ha2VDYXNlKHN0
cmluZyB0ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBTdHJp
bmdCdWlsZGVyKHRleHQuTGVuZ3RoICogMik7Ci0gICAgICAgICAgICAvLyBOb3RlOiB0aGlzIGlz
IHByb2JhYmx5IHVubmVjZXNzYXJ5IG5vdywgYnV0IGN1cnJlbnRseSByZXRhaW5lZCB0byBiZSBh
cyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUKLSAgICAgICAgICAgIC8vIEMrKywgd2hpbHN0IHN0
aWxsIHRocm93aW5nIGFuIGV4Y2VwdGlvbiBvbiB1bmRlcnNjb3Jlcy4KLSAgICAgICAgICAgIGJv
b2wgd2FzTm90VW5kZXJzY29yZSA9IGZhbHNlOyAgLy8gSW5pdGlhbGl6ZSB0byBmYWxzZSBmb3Ig
Y2FzZSAxIChiZWxvdykKLSAgICAgICAgICAgIGJvb2wgd2FzTm90Q2FwID0gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGV4dC5MZW5ndGg7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjaGFyIGMgPSB0ZXh0W2ldOwotICAgICAgICAgICAgICAg
IGlmIChjID49ICdBJyAmJiBjIDw9ICdaJykgLy8gYXNjaWlfaXN1cHBlcgotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgd2hlbiB0aGUgY3VycmVudCBj
aGFyYWN0ZXIgQiBpcyBjYXBpdGFsaXplZDoKLSAgICAgICAgICAgICAgICAgICAgLy8gMSkgQXQg
YmVnaW5uaW5nIG9mIGlucHV0OiAgICJCLi4uIiA9PiAiYi4uLiIKLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgKGUuZy4gIkJpc2N1aXQiID0+ICJiaXNjdWl0IikKLSAgICAgICAgICAgICAgICAg
ICAgLy8gMikgRm9sbG93aW5nIGEgbG93ZXJjYXNlOiAgICIuLi5hQi4uLiIgPT4gIi4uLmFfYi4u
LiIKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgKGUuZy4gImdCaWtlIiA9PiAiZ19iaWtlIikK
LSAgICAgICAgICAgICAgICAgICAgLy8gMykgQXQgdGhlIGVuZCBvZiBpbnB1dDogICAgICIuLi5B
QiIgPT4gIi4uLmFiIgotICAgICAgICAgICAgICAgICAgICAvLyAgICAoZS5nLiAiR29vZ2xlTEFC
IiA9PiAiZ29vZ2xlX2xhYiIpCi0gICAgICAgICAgICAgICAgICAgIC8vIDQpIEZvbGxvd2VkIGJ5
IGEgbG93ZXJjYXNlOiAiLi4uQUJjLi4uIiA9PiAiLi4uYV9iYy4uLiIKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgKGUuZy4gIkdCaWtlIiA9PiAiZ19iaWtlIikKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHdhc05vdFVuZGVyc2NvcmUgJiYgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGNh
c2UgMSBvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICh3YXNOb3RDYXAgfHwgICAgICAgICAg
ICAgICAgICAgICAvLyBjYXNlIDIgaW4sIGNhc2UgMyBvdXQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAoaSArIDEgPCB0ZXh0Lkxlbmd0aCAmJiAgICAgICAgIC8vICAgICAgICAgICAgY2FzZSAz
IG91dAotICAgICAgICAgICAgICAgICAgICAgICAgICAodGV4dFtpICsgMV0gPj0gJ2EnICYmIHRl
eHRbaSArIDFdIDw9ICd6JykpKSkgLy8gYXNjaWlfaXNsb3dlcih0ZXh0W2kgKyAxXSkKLSAgICAg
ICAgICAgICAgICAgICAgeyAgLy8gY2FzZSA0IGluCi0gICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGFkZCBhbiB1bmRlcnNjb3JlIGZvciBjYXNlIDIgYW5kIGNhc2UgNC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuQXBwZW5kKCdfJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgLy8gYXNjaWlfdG9sb3dlciwgYnV0IHdlIGFscmVhZHkga25v
dyB0aGF0IGMgKmlzKiBhbiB1cHBlciBjYXNlIEFTQ0lJIGNoYXJhY3Rlci4uLgotICAgICAgICAg
ICAgICAgICAgICBidWlsZGVyLkFwcGVuZCgoY2hhcikgKGMgKyAnYScgLSAnQScpKTsKLSAgICAg
ICAgICAgICAgICAgICAgd2FzTm90VW5kZXJzY29yZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIHdhc05vdENhcCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLkFw
cGVuZChjKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ18nKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uKCQiSW52YWxpZCBmaWVsZCBtYXNrOiB7dGV4dH0iKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB3YXNOb3RVbmRlcnNjb3JlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgd2FzTm90Q2FwID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYnVpbGRlci5Ub1N0cmlu
ZygpOwotICAgICAgICB9Ci0gICAgICAgICNlbmRyZWdpb24KLQotICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgIC8vLyBTZXR0aW5ncyBjb250cm9sbGluZyBKU09OIHBhcnNpbmcuCi0gICAg
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgU2V0dGluZ3MK
LSAgICAgICAgewotICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAgICAgLy8vIERl
ZmF1bHQgc2V0dGluZ3MsIGFzIHVzZWQgYnkgPHNlZSBjcmVmPSJKc29uUGFyc2VyLkRlZmF1bHQi
Lz4uIFRoaXMgaGFzIHRoZSBzYW1lIGRlZmF1bHQKLSAgICAgICAgICAgIC8vLyByZWN1cnNpb24g
bGltaXQgYXMgPHNlZSBjcmVmPSJDb2RlZElucHV0U3RyZWFtIi8+LCBhbmQgYW4gZW1wdHkgdHlw
ZSByZWdpc3RyeS4KLSAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgICAgICBwdWJs
aWMgc3RhdGljIFNldHRpbmdzIERlZmF1bHQgeyBnZXQ7IH0KLQotICAgICAgICAgICAgLy8gV29y
a2Fyb3VuZCBmb3IgdGhlIE1vbm8gY29tcGlsZXIgY29tcGxhaW5pbmcgYWJvdXQgWE1MIGNvbW1l
bnRzIG5vdCBiZWluZyBvbgotICAgICAgICAgICAgLy8gdmFsaWQgbGFuZ3VhZ2UgZWxlbWVudHMu
Ci0gICAgICAgICAgICBzdGF0aWMgU2V0dGluZ3MoKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIERlZmF1bHQgPSBuZXcgU2V0dGluZ3MoQ29kZWRJbnB1dFN0cmVhbS5EZWZhdWx0UmVj
dXJzaW9uTGltaXQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgICAgICAgICAvLy8gVGhlIG1heGltdW0gZGVwdGggb2YgbWVzc2FnZXMgdG8gcGFyc2Uu
IE5vdGUgdGhhdCB0aGlzIGxpbWl0IG9ubHkgYXBwbGllcyB0byBwYXJzaW5nCi0gICAgICAgICAg
ICAvLy8gbWVzc2FnZXMsIG5vdCBjb2xsZWN0aW9ucyAtIHNvIGEgbWVzc2FnZSB3aXRoaW4gYSBj
b2xsZWN0aW9uIHdpdGhpbiBhIG1lc3NhZ2Ugb25seSBjb3VudHMgYXMKLSAgICAgICAgICAgIC8v
LyBkZXB0aCAyLCBub3QgMy4KLSAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgICAg
ICBwdWJsaWMgaW50IFJlY3Vyc2lvbkxpbWl0IHsgZ2V0OyB9Ci0KLSAgICAgICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBUaGUgdHlwZSByZWdpc3RyeSB1c2VkIHRvIHBhcnNl
IDxzZWUgY3JlZj0iQW55Ii8+IG1lc3NhZ2VzLgotICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgICAgIHB1YmxpYyBUeXBlUmVnaXN0cnkgVHlwZVJlZ2lzdHJ5IHsgZ2V0OyB9Ci0K
LSAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBDcmVhdGVzIGEgbmV3
IDxzZWUgY3JlZj0iU2V0dGluZ3MiLz4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCByZWN1cnNp
b24gbGltaXQuCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgLy8vIDxw
YXJhbSBuYW1lPSJyZWN1cnNpb25MaW1pdCI+VGhlIG1heGltdW0gZGVwdGggb2YgbWVzc2FnZXMg
dG8gcGFyc2U8L3BhcmFtPgotICAgICAgICAgICAgcHVibGljIFNldHRpbmdzKGludCByZWN1cnNp
b25MaW1pdCkgOiB0aGlzKHJlY3Vyc2lvbkxpbWl0LCBUeXBlUmVnaXN0cnkuRW1wdHkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgICAgIC8vLyBDcmVhdGVzIGEgbmV3IDxzZWUgY3JlZj0iU2V0dGluZ3MiLz4gb2JqZWN0
IHdpdGggdGhlIHNwZWNpZmllZCByZWN1cnNpb24gbGltaXQgYW5kIHR5cGUgcmVnaXN0cnkuCi0g
ICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJy
ZWN1cnNpb25MaW1pdCI+VGhlIG1heGltdW0gZGVwdGggb2YgbWVzc2FnZXMgdG8gcGFyc2U8L3Bh
cmFtPgotICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0eXBlUmVnaXN0cnkiPlRoZSB0eXBl
IHJlZ2lzdHJ5IHVzZWQgdG8gcGFyc2UgPHNlZSBjcmVmPSJBbnkiLz4gbWVzc2FnZXM8L3BhcmFt
PgotICAgICAgICAgICAgcHVibGljIFNldHRpbmdzKGludCByZWN1cnNpb25MaW1pdCwgVHlwZVJl
Z2lzdHJ5IHR5cGVSZWdpc3RyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZWN1
cnNpb25MaW1pdCA9IHJlY3Vyc2lvbkxpbWl0OwotICAgICAgICAgICAgICAgIFR5cGVSZWdpc3Ry
eSA9IFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodHlwZVJlZ2lzdHJ5LCBuYW1lb2Yo
dHlwZVJlZ2lzdHJ5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0pzb25Ub2tlbi5jcyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3Ny
Yy9Hb29nbGUuUHJvdG9idWYvSnNvblRva2VuLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2YzAxMzhjY2I2YTBhZTgxMGEwZDA3NTNiMmZhYzQ0MmMyZTZjMWI1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJv
dG9idWYvSnNvblRva2VuLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLe+7vyNy
ZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLQotbmFtZXNwYWNlIEdv
b2dsZS5Qcm90b2J1ZgotewotICAgIGludGVybmFsIHNlYWxlZCBjbGFzcyBKc29uVG9rZW4gOiBJ
RXF1YXRhYmxlPEpzb25Ub2tlbj4KLSAgICB7Ci0gICAgICAgIC8vIFRva2VucyB3aXRoIG5vIHZh
bHVlIGNhbiBiZSByZXVzZWQuCi0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEpzb25U
b2tlbiBfdHJ1ZSA9IG5ldyBKc29uVG9rZW4oVG9rZW5UeXBlLlRydWUpOwotICAgICAgICBwcml2
YXRlIHN0YXRpYyByZWFkb25seSBKc29uVG9rZW4gX2ZhbHNlID0gbmV3IEpzb25Ub2tlbihUb2tl
blR5cGUuRmFsc2UpOwotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBKc29uVG9rZW4g
X251bGwgPSBuZXcgSnNvblRva2VuKFRva2VuVHlwZS5OdWxsKTsKLSAgICAgICAgcHJpdmF0ZSBz
dGF0aWMgcmVhZG9ubHkgSnNvblRva2VuIHN0YXJ0T2JqZWN0ID0gbmV3IEpzb25Ub2tlbihUb2tl
blR5cGUuU3RhcnRPYmplY3QpOwotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBKc29u
VG9rZW4gZW5kT2JqZWN0ID0gbmV3IEpzb25Ub2tlbihUb2tlblR5cGUuRW5kT2JqZWN0KTsKLSAg
ICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSnNvblRva2VuIHN0YXJ0QXJyYXkgPSBuZXcg
SnNvblRva2VuKFRva2VuVHlwZS5TdGFydEFycmF5KTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMg
cmVhZG9ubHkgSnNvblRva2VuIGVuZEFycmF5ID0gbmV3IEpzb25Ub2tlbihUb2tlblR5cGUuRW5k
QXJyYXkpOwotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBKc29uVG9rZW4gZW5kRG9j
dW1lbnQgPSBuZXcgSnNvblRva2VuKFRva2VuVHlwZS5FbmREb2N1bWVudCk7Ci0KLSAgICAgICAg
aW50ZXJuYWwgc3RhdGljIEpzb25Ub2tlbiBOdWxsIHsgZ2V0IHsgcmV0dXJuIF9udWxsOyB9IH0K
LSAgICAgICAgaW50ZXJuYWwgc3RhdGljIEpzb25Ub2tlbiBGYWxzZSB7IGdldCB7IHJldHVybiBf
ZmFsc2U7IH0gfQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgSnNvblRva2VuIFRydWUgeyBnZXQg
eyByZXR1cm4gX3RydWU7IH0gfQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgSnNvblRva2VuIFN0
YXJ0T2JqZWN0eyBnZXQgeyByZXR1cm4gc3RhcnRPYmplY3Q7IH0gfQotICAgICAgICBpbnRlcm5h
bCBzdGF0aWMgSnNvblRva2VuIEVuZE9iamVjdCB7IGdldCB7IHJldHVybiBlbmRPYmplY3Q7IH0g
fQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgSnNvblRva2VuIFN0YXJ0QXJyYXkgeyBnZXQgeyBy
ZXR1cm4gc3RhcnRBcnJheTsgfSB9Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyBKc29uVG9rZW4g
RW5kQXJyYXkgeyBnZXQgeyByZXR1cm4gZW5kQXJyYXk7IH0gfQotICAgICAgICBpbnRlcm5hbCBz
dGF0aWMgSnNvblRva2VuIEVuZERvY3VtZW50IHsgZ2V0IHsgcmV0dXJuIGVuZERvY3VtZW50OyB9
IH0KLQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgSnNvblRva2VuIE5hbWUoc3RyaW5nIG5hbWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgSnNvblRva2VuKFRva2VuVHlwZS5O
YW1lLCBzdHJpbmdWYWx1ZTogbmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBz
dGF0aWMgSnNvblRva2VuIFZhbHVlKHN0cmluZyB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG5ldyBKc29uVG9rZW4oVG9rZW5UeXBlLlN0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1
ZTogdmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIEpzb25Ub2tl
biBWYWx1ZShkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
SnNvblRva2VuKFRva2VuVHlwZS5OdW1iZXIsIG51bWJlclZhbHVlOiB2YWx1ZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpbnRlcm5hbCBlbnVtIFRva2VuVHlwZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBOdWxsLAotICAgICAgICAgICAgRmFsc2UsCi0gICAgICAgICAgICBUcnVlLAotICAgICAg
ICAgICAgU3RyaW5nVmFsdWUsCi0gICAgICAgICAgICBOdW1iZXIsCi0gICAgICAgICAgICBOYW1l
LAotICAgICAgICAgICAgU3RhcnRPYmplY3QsCi0gICAgICAgICAgICBFbmRPYmplY3QsCi0gICAg
ICAgICAgICBTdGFydEFycmF5LAotICAgICAgICAgICAgRW5kQXJyYXksCi0gICAgICAgICAgICBF
bmREb2N1bWVudAotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQSB2YWx1ZSBpcyBhIHN0cmluZywg
bnVtYmVyLCBhcnJheSwgb2JqZWN0LCBudWxsLCB0cnVlIG9yIGZhbHNlCi0gICAgICAgIC8vIEFy
cmF5cyBhbmQgb2JqZWN0cyBoYXZlIHN0YXJ0L2VuZAotICAgICAgICAvLyBBIGRvY3VtZW50IGNv
bnNpc3RzIG9mIGEgdmFsdWUKLSAgICAgICAgLy8gT2JqZWN0cyBhcmUgbmFtZS92YWx1ZSBzZXF1
ZW5jZXMuCi0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBUb2tlblR5cGUgdHlwZTsKLSAgICAg
ICAgcHJpdmF0ZSByZWFkb25seSBzdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIHByaXZhdGUg
cmVhZG9ubHkgZG91YmxlIG51bWJlclZhbHVlOwotCi0gICAgICAgIGludGVybmFsIFRva2VuVHlw
ZSBUeXBlIHsgZ2V0IHsgcmV0dXJuIHR5cGU7IH0gfQotICAgICAgICBpbnRlcm5hbCBzdHJpbmcg
U3RyaW5nVmFsdWUgeyBnZXQgeyByZXR1cm4gc3RyaW5nVmFsdWU7IH0gfQotICAgICAgICBpbnRl
cm5hbCBkb3VibGUgTnVtYmVyVmFsdWUgeyBnZXQgeyByZXR1cm4gbnVtYmVyVmFsdWU7IH0gfQot
Ci0gICAgICAgIHByaXZhdGUgSnNvblRva2VuKFRva2VuVHlwZSB0eXBlLCBzdHJpbmcgc3RyaW5n
VmFsdWUgPSBudWxsLCBkb3VibGUgbnVtYmVyVmFsdWUgPSAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgICAgICAgICAgdGhpcy5zdHJpbmdWYWx1ZSA9IHN0
cmluZ1ZhbHVlOwotICAgICAgICAgICAgdGhpcy5udW1iZXJWYWx1ZSA9IG51bWJlclZhbHVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBv
YmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFcXVhbHMob2JqIGFzIEpzb25Ub2tl
bik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2Rl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5jaGVja2VkCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaW50IGhhc2ggPSAxNzsKLSAgICAgICAgICAgICAgICBoYXNoID0gaGFzaCAq
IDMxICsgKGludCkgdHlwZTsKLSAgICAgICAgICAgICAgICBoYXNoID0gaGFzaCAqIDMxICsgc3Ry
aW5nVmFsdWUgPT0gbnVsbCA/IDAgOiBzdHJpbmdWYWx1ZS5HZXRIYXNoQ29kZSgpOwotICAgICAg
ICAgICAgICAgIGhhc2ggPSBoYXNoICogMzEgKyBudW1iZXJWYWx1ZS5HZXRIYXNoQ29kZSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBj
YXNlIFRva2VuVHlwZS5OdWxsOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm51bGwiOwot
ICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLlRydWU6Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAidHJ1ZSI7Ci0gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuRmFsc2U6Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmFsc2UiOwotICAgICAgICAgICAgICAgIGNhc2Ug
VG9rZW5UeXBlLk5hbWU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAibmFtZSAoIiArIHN0
cmluZ1ZhbHVlICsgIikiOwotICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLlN0cmluZ1Zh
bHVlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gInZhbHVlICgiICsgc3RyaW5nVmFsdWUg
KyAiKSI7Ci0gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuTnVtYmVyOgotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gIm51bWJlciAoIiArIG51bWJlclZhbHVlICsgIikiOwotICAgICAg
ICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLlN0YXJ0T2JqZWN0OgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gInN0YXJ0LW9iamVjdCI7Ci0gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUu
RW5kT2JqZWN0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gImVuZC1vYmplY3QiOwotICAg
ICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLlN0YXJ0QXJyYXk6Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAic3RhcnQtYXJyYXkiOwotICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBl
LkVuZEFycmF5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gImVuZC1hcnJheSI7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuRW5kRG9jdW1lbnQ6Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiZW5kLWRvY3VtZW50IjsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVG9r
ZW4gaXMgb2YgdW5rbm93biB0eXBlICIgKyB0eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHB1YmxpYyBib29sIEVxdWFscyhKc29uVG9rZW4gb3RoZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIC8vIE5vdGUgdXNlIG9mIG90aGVyLm51bWJlclZhbHVlLkVxdWFscyByYXRoZXIg
dGhhbiA9PSwgc28gdGhhdCBOYU4gY29tcGFyZXMgYXBwcm9wcmlhdGVseS4KLSAgICAgICAgICAg
IHJldHVybiBvdGhlci50eXBlID09IHR5cGUgJiYgb3RoZXIuc3RyaW5nVmFsdWUgPT0gc3RyaW5n
VmFsdWUgJiYgb3RoZXIubnVtYmVyVmFsdWUuRXF1YWxzKG51bWJlclZhbHVlKTsKLSAgICAgICAg
fQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvSnNvblRv
a2VuaXplci5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvSnNvblRva2VuaXplci5jcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlhNmQ0M2I3YmVkNzZlYzMyZjdhMWMxNWU4
MDU2MGIwYmNiYzZhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL0pzb25Ub2tlbml6ZXIuY3MKKysrIC9kZXYv
bnVsbApAQCAtMSw3MzggKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBs
aWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLXVz
aW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lz
dGVtLkdsb2JhbGl6YXRpb247Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGV4dDsK
LQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1ZgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAv
Ly8gU2ltcGxlIGJ1dCBzdHJpY3QgSlNPTiB0b2tlbml6ZXIsIHJpZ2lkbHkgZm9sbG93aW5nIFJG
QyA3MTU5LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgLy8vIDxyZW1hcmtzPgotICAgIC8vLyA8
cGFyYT4KLSAgICAvLy8gVGhpcyB0b2tlbml6ZXIgaXMgc3RhdGVmdWwsIGFuZCBvbmx5IHJldHVy
bnMgInVzZWZ1bCIgdG9rZW5zIC0gbmFtZXMsIHZhbHVlcyBldGMuCi0gICAgLy8vIEl0IGRvZXMg
bm90IGNyZWF0ZSB0b2tlbnMgZm9yIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiBuYW1lcyBhbmQgdmFs
dWVzLCBvciBmb3IgdGhlIGNvbW1hCi0gICAgLy8vIGJldHdlZW4gdmFsdWVzLiBJdCB2YWxpZGF0
ZXMgdGhlIHRva2VuIHN0cmVhbSBhcyBpdCBnb2VzIC0gc28gY2FsbGVycyBjYW4gYXNzdW1lIHRo
YXQgdGhlCi0gICAgLy8vIHRva2VucyBpdCBwcm9kdWNlcyBhcmUgYXBwcm9wcmlhdGUuIEZvciBl
eGFtcGxlLCBpdCB3b3VsZCBuZXZlciBwcm9kdWNlICJzdGFydCBvYmplY3QsIGVuZCBhcnJheS4i
Ci0gICAgLy8vIDwvcGFyYT4KLSAgICAvLy8gPHBhcmE+SW1wbGVtZW50YXRpb24gZGV0YWlsczog
dGhlIGJhc2UgY2xhc3MgaGFuZGxlcyBzaW5nbGUgdG9rZW4gcHVzaC1iYWNrIGFuZCA8L3BhcmE+
Ci0gICAgLy8vIDxwYXJhPk5vdCB0aHJlYWQtc2FmZS48L3BhcmE+Ci0gICAgLy8vIDwvcmVtYXJr
cz4KLSAgICBpbnRlcm5hbCBhYnN0cmFjdCBjbGFzcyBKc29uVG9rZW5pemVyCi0gICAgewotICAg
ICAgICBwcml2YXRlIEpzb25Ub2tlbiBidWZmZXJlZFRva2VuOwotCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vICBDcmVhdGVzIGEgdG9rZW5pemVyIHRoYXQgcmVhZHMgZnJvbSB0
aGUgZ2l2ZW4gdGV4dCByZWFkZXIuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIGlu
dGVybmFsIHN0YXRpYyBKc29uVG9rZW5pemVyIEZyb21UZXh0UmVhZGVyKFRleHRSZWFkZXIgcmVh
ZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEpzb25UZXh0VG9rZW5pemVy
KHJlYWRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyBDcmVhdGVzIGEgdG9rZW5pemVyIHRoYXQgZmlyc3QgcmVwbGF5cyB0aGUgZ2l2ZW4gbGlzdCBv
ZiB0b2tlbnMsIHRoZW4gY29udGludWVzIHJlYWRpbmcKLSAgICAgICAgLy8vIGZyb20gYW5vdGhl
ciB0b2tlbml6ZXIuIE5vdGUgdGhhdCBpZiB0aGUgcmV0dXJuZWQgdG9rZW5pemVyIGlzICJwdXNo
ZWQgYmFjayIsIHRoYXQgZG9lcyBub3QgcHVzaCBiYWNrCi0gICAgICAgIC8vLyBvbiB0aGUgY29u
dGludWF0aW9uIHRva2VuaXplciwgb3IgdmljZSB2ZXJzYS4gQ2FyZSBzaG91bGQgYmUgdGFrZW4g
d2hlbiB1c2luZyB0aGlzIG1ldGhvZCAtIGl0IHdhcwotICAgICAgICAvLy8gY3JlYXRlZCBmb3Ig
dGhlIHNha2Ugb2YgQW55IHBhcnNpbmcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IGludGVybmFsIHN0YXRpYyBKc29uVG9rZW5pemVyIEZyb21SZXBsYXllZFRva2VucyhJTGlzdDxK
c29uVG9rZW4+IHRva2VucywgSnNvblRva2VuaXplciBjb250aW51YXRpb24pCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBuZXcgSnNvblJlcGxheVRva2VuaXplcih0b2tlbnMsIGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgc3RhY2ssIHB1cmVseSBpbiBvYmplY3RzIChub3Qg
Y29sbGVjdGlvbnMpLgotICAgICAgICAvLy8gSW5mb3JtYWxseSwgdGhpcyBpcyB0aGUgbnVtYmVy
IG9mIHJlbWFpbmluZyB1bmNsb3NlZCAneycgY2hhcmFjdGVycyB3ZSBoYXZlLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICBpbnRlcm5hbCBpbnQgT2JqZWN0RGVwdGggeyBnZXQ7IHBy
aXZhdGUgc2V0OyB9Ci0KLSAgICAgICAgLy8gVE9ETzogV2h5IGRvIHdlIGFsbG93IGEgZGlmZmVy
ZW50IHRva2VuIHRvIGJlIHB1c2hlZCBiYWNrPyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gYWx3YXlz
IHJlbWVtYmVyIHRoZSBwcmV2aW91cwotICAgICAgICAvLyB0b2tlbiByZXR1cm5lZCwgYW5kIGFs
bG93IGEgcGFyYW1ldGVybGVzcyBSZXdpbmQoKSBtZXRob2QgKHdoaWNoIGNvdWxkIG9ubHkgYmUg
Y2FsbGVkIG9uY2UsIGp1c3QgbGlrZSB0aGUgY3VycmVudCBQdXNoQmFjaykuCi0gICAgICAgIGlu
dGVybmFsIHZvaWQgUHVzaEJhY2soSnNvblRva2VuIHRva2VuKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoYnVmZmVyZWRUb2tlbiAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJDYW4ndCBwdXNoIGJh
Y2sgdHdpY2UiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJ1ZmZlcmVkVG9rZW4gPSB0
b2tlbjsKLSAgICAgICAgICAgIGlmICh0b2tlbi5UeXBlID09IEpzb25Ub2tlbi5Ub2tlblR5cGUu
U3RhcnRPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0RGVwdGgt
LTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLlR5cGUgPT0gSnNv
blRva2VuLlRva2VuVHlwZS5FbmRPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgT2JqZWN0RGVwdGgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgdGhlIG5leHQgSlNPTiB0b2tlbiBpbiB0
aGUgc3RyZWFtLiBBbiBFbmREb2N1bWVudCB0b2tlbiBpcyByZXR1cm5lZCB0byBpbmRpY2F0ZSB0
aGUgZW5kIG9mIHRoZSBzdHJlYW0sCi0gICAgICAgIC8vLyBhZnRlciB3aGljaCBwb2ludCA8Yz5O
ZXh0KCk8L2M+IHNob3VsZCBub3QgYmUgY2FsbGVkIGFnYWluLgotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+VGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBz
aW5nbGUtdG9rZW4gYnVmZmVyaW5nLCBhbmQgY2FsbHMgPHNlZSBjcmVmPSJOZXh0SW1wbCIvPiBp
ZiB0aGVyZSBpcyBubyBidWZmZXJlZCB0b2tlbi48L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cmV0
dXJucz5UaGUgbmV4dCB0b2tlbiBpbiB0aGUgc3RyZWFtLiBUaGlzIGlzIG5ldmVyIG51bGwuPC9y
ZXR1cm5zPgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJJbnZhbGlkT3BlcmF0aW9uRXhj
ZXB0aW9uIj5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgYW4gRW5kRG9jdW1lbnQgdG9rZW4g
aGFzIGJlZW4gcmV0dXJuZWQ8L2V4Y2VwdGlvbj4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3Jl
Zj0iSW52YWxpZEpzb25FeGNlcHRpb24iPlRoZSBpbnB1dCB0ZXh0IGRvZXMgbm90IGNvbXBseSB3
aXRoIFJGQyA3MTU5PC9leGNlcHRpb24+Ci0gICAgICAgIGludGVybmFsIEpzb25Ub2tlbiBOZXh0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgSnNvblRva2VuIHRva2VuVG9SZXR1cm47Ci0gICAg
ICAgICAgICBpZiAoYnVmZmVyZWRUb2tlbiAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHRva2VuVG9SZXR1cm4gPSBidWZmZXJlZFRva2VuOwotICAgICAgICAgICAgICAg
IGJ1ZmZlcmVkVG9rZW4gPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRva2VuVG9SZXR1cm4gPSBOZXh0SW1wbCgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRva2VuVG9SZXR1cm4uVHlwZSA9PSBK
c29uVG9rZW4uVG9rZW5UeXBlLlN0YXJ0T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIE9iamVjdERlcHRoKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
ICh0b2tlblRvUmV0dXJuLlR5cGUgPT0gSnNvblRva2VuLlRva2VuVHlwZS5FbmRPYmplY3QpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0RGVwdGgtLTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiB0b2tlblRvUmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyB0aGUgbmV4dCBKU09OIHRva2Vu
IGluIHRoZSBzdHJlYW0sIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSBiYXNlIGNsYXNzLiAoVGhlIDxz
ZWUgY3JlZj0iTmV4dCIvPiBtZXRob2QgZGVsZWdhdGVzCi0gICAgICAgIC8vLyB0byB0aGlzIGlm
IGl0IGRvZXNuJ3QgaGF2ZSBhIGJ1ZmZlcmVkIHRva2VuLikKLSAgICAgICAgLy8vIDwvc3VtbWFy
eT4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlv
biI+VGhpcyBtZXRob2QgaXMgY2FsbGVkIGFmdGVyIGFuIEVuZERvY3VtZW50IHRva2VuIGhhcyBi
ZWVuIHJldHVybmVkPC9leGNlcHRpb24+Ci0gICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9Iklu
dmFsaWRKc29uRXhjZXB0aW9uIj5UaGUgaW5wdXQgdGV4dCBkb2VzIG5vdCBjb21wbHkgd2l0aCBS
RkMgNzE1OTwvZXhjZXB0aW9uPgotICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgSnNvblRva2Vu
IE5leHRJbXBsKCk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVG9rZW5p
emVyIHdoaWNoIGZpcnN0IGV4aGF1c3RzIGEgbGlzdCBvZiB0b2tlbnMsIHRoZW4gY29uc3VsdHMg
YW5vdGhlciB0b2tlbml6ZXIuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZh
dGUgY2xhc3MgSnNvblJlcGxheVRva2VuaXplciA6IEpzb25Ub2tlbml6ZXIKLSAgICAgICAgewot
ICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBJTGlzdDxKc29uVG9rZW4+IHRva2VuczsKLSAg
ICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgSnNvblRva2VuaXplciBuZXh0VG9rZW5pemVyOwot
ICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbmV4dFRva2VuSW5kZXg7Ci0KLSAgICAgICAgICAgIGlu
dGVybmFsIEpzb25SZXBsYXlUb2tlbml6ZXIoSUxpc3Q8SnNvblRva2VuPiB0b2tlbnMsIEpzb25U
b2tlbml6ZXIgbmV4dFRva2VuaXplcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0
aGlzLnRva2VucyA9IHRva2VuczsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbml6ZXIg
PSBuZXh0VG9rZW5pemVyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGSVhNRTog
T2JqZWN0IGRlcHRoIG5vdCBtYWludGFpbmVkLi4uCi0gICAgICAgICAgICBwcm90ZWN0ZWQgb3Zl
cnJpZGUgSnNvblRva2VuIE5leHRJbXBsKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAobmV4dFRva2VuSW5kZXggPj0gdG9rZW5zLkNvdW50KQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRUb2tlbml6ZXIuTmV4dCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5zW25leHRUb2tlbkluZGV4
KytdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gVG9rZW5pemVyIHdoaWNoIGRvZXMgYWxsIHRoZSAqcmVhbCogd29yayBvZiBw
YXJzaW5nIEpTT04uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByaXZhdGUgc2Vh
bGVkIGNsYXNzIEpzb25UZXh0VG9rZW5pemVyIDogSnNvblRva2VuaXplcgotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyBUaGUgc2V0IG9mIHN0YXRlcyBpbiB3aGljaCBhIHZhbHVlIGlzIHZhbGlk
IG5leHQgdG9rZW4uCi0gICAgICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTdGF0ZSBW
YWx1ZVN0YXRlcyA9IFN0YXRlLkFycmF5U3RhcnQgfCBTdGF0ZS5BcnJheUFmdGVyQ29tbWEgfCBT
dGF0ZS5PYmplY3RBZnRlckNvbG9uIHwgU3RhdGUuU3RhcnRPZkRvY3VtZW50OwotCi0gICAgICAg
ICAgICBwcml2YXRlIHJlYWRvbmx5IFN0YWNrPENvbnRhaW5lclR5cGU+IGNvbnRhaW5lclN0YWNr
ID0gbmV3IFN0YWNrPENvbnRhaW5lclR5cGU+KCk7Ci0gICAgICAgICAgICBwcml2YXRlIHJlYWRv
bmx5IFB1c2hCYWNrUmVhZGVyIHJlYWRlcjsKLSAgICAgICAgICAgIHByaXZhdGUgU3RhdGUgc3Rh
dGU7Ci0KLSAgICAgICAgICAgIGludGVybmFsIEpzb25UZXh0VG9rZW5pemVyKFRleHRSZWFkZXIg
cmVhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMucmVhZGVyID0gbmV3
IFB1c2hCYWNrUmVhZGVyKHJlYWRlcik7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZS5T
dGFydE9mRG9jdW1lbnQ7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyU3RhY2suUHVzaChDb250
YWluZXJUeXBlLkRvY3VtZW50KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8vIDxy
ZW1hcmtzPgotICAgICAgICAgICAgLy8vIFRoaXMgbWV0aG9kIGVzc2VudGlhbGx5IGp1c3QgbG9v
cHMgdGhyb3VnaCBjaGFyYWN0ZXJzIHNraXBwaW5nIHdoaXRlc3BhY2UsIHZhbGlkYXRpbmcgYW5k
Ci0gICAgICAgICAgICAvLy8gY2hhbmdpbmcgc3RhdGUgKGUuZy4gZnJvbSBPYmplY3RCZWZvcmVD
b2xvbiB0byBPYmplY3RBZnRlckNvbG9uKQotICAgICAgICAgICAgLy8vIHVudGlsIGl0IHJlYWNo
ZXMgc29tZXRoaW5nIHdoaWNoIHdpbGwgYmUgYSBnZW51aW5lIHRva2VuIChlLmcuIGEgc3RhcnQg
b2JqZWN0LCBvciBhIHZhbHVlKSBhdCB3aGljaCBwb2ludAotICAgICAgICAgICAgLy8vIGl0IHJl
dHVybnMgdGhlIHRva2VuLiBBbHRob3VnaCB0aGUgbWV0aG9kIGlzIGxhcmdlLCBpdCB3b3VsZCBi
ZSByZWxhdGl2ZWx5IGhhcmQgdG8gYnJlYWsgZG93biBmdXJ0aGVyLi4uIG1vc3QKLSAgICAgICAg
ICAgIC8vLyBvZiBpdCBpcyB0aGUgbGFyZ2Ugc3dpdGNoIHN0YXRlbWVudCwgd2hpY2ggc29tZXRp
bWVzIHJldHVybnMgYW5kIHNvbWV0aW1lcyBkb2Vzbid0LgotICAgICAgICAgICAgLy8vIDwvcmVt
YXJrcz4KLSAgICAgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBKc29uVG9rZW4gTmV4dEltcGwo
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBTdGF0ZS5SZWFk
ZXJFeGhhdXN0ZWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiTmV4dCgpIGNhbGxlZCBhZnRlciBlbmQg
b2YgZG9jdW1lbnQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2hpbGUg
KHRydWUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9
IHJlYWRlci5SZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09IG51bGwpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlU3Rh
dGUoU3RhdGUuRXhwZWN0ZWRFbmRPZkRvY3VtZW50LCAiVW5leHBlY3RlZCBlbmQgb2YgZG9jdW1l
bnQgaW4gc3RhdGU6ICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZS5S
ZWFkZXJFeGhhdXN0ZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSnNvblRva2Vu
LkVuZERvY3VtZW50OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAobmV4dC5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4gdG9rZW5zCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICcgJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1x0
JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZhbGlkYXRlU3RhdGUoU3RhdGUuT2JqZWN0QmVmb3JlQ29sb24sICJJbnZhbGlkIHN0YXRl
IHRvIHJlYWQgYSBjb2xvbjogIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZS5PYmplY3RBZnRlckNvbG9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLCc6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmFsaWRhdGVTdGF0ZShTdGF0ZS5PYmplY3RBZnRlclByb3BlcnR5IHwgU3Rh
dGUuQXJyYXlBZnRlclZhbHVlLCAiSW52YWxpZCBzdGF0ZSB0byByZWFkIGEgY29sb246ICIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGUgPT0gU3RhdGUuT2JqZWN0
QWZ0ZXJQcm9wZXJ0eSA/IFN0YXRlLk9iamVjdEFmdGVyQ29tbWEgOiBTdGF0ZS5BcnJheUFmdGVy
Q29tbWE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcg
c3RyaW5nVmFsdWUgPSBSZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKChzdGF0ZSAmIChTdGF0ZS5PYmplY3RTdGFydCB8IFN0YXRlLk9iamVjdEFmdGVyQ29tbWEp
KSAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZS5PYmplY3RCZWZvcmVDb2xvbjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpzb25Ub2tlbi5OYW1lKHN0cmluZ1ZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmFsaWRhdGVBbmRNb2RpZnlTdGF0ZUZvclZhbHVlKCJJbnZhbGlk
IHN0YXRlIHRvIHJlYWQgYSBkb3VibGUgcXVvdGU6ICIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSnNvblRva2VuLlZhbHVlKHN0cmluZ1ZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd7JzoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZVN0YXRlKFZhbHVlU3RhdGVzLCAi
SW52YWxpZCBzdGF0ZSB0byByZWFkIGFuIG9wZW4gYnJhY2U6ICIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlID0gU3RhdGUuT2JqZWN0U3RhcnQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmVyU3RhY2suUHVzaChDb250YWluZXJUeXBlLk9iamVjdCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpzb25Ub2tlbi5TdGFydE9iamVjdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ30nOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZhbGlkYXRlU3RhdGUoU3RhdGUuT2JqZWN0QWZ0ZXJQcm9wZXJ0eSB8IFN0YXRlLk9i
amVjdFN0YXJ0LCAiSW52YWxpZCBzdGF0ZSB0byByZWFkIGEgY2xvc2UgYnJhY2U6ICIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBvcENvbnRhaW5lcigpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBKc29uVG9rZW4uRW5kT2JqZWN0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnWyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGVT
dGF0ZShWYWx1ZVN0YXRlcywgIkludmFsaWQgc3RhdGUgdG8gcmVhZCBhbiBvcGVuIHNxdWFyZSBi
cmFja2V0OiAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlLkFy
cmF5U3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU3RhY2suUHVz
aChDb250YWluZXJUeXBlLkFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSnNvblRva2VuLlN0YXJ0QXJyYXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdd
JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZVN0YXRlKFN0YXRlLkFycmF5
QWZ0ZXJWYWx1ZSB8IFN0YXRlLkFycmF5U3RhcnQsICJJbnZhbGlkIHN0YXRlIHRvIHJlYWQgYSBj
bG9zZSBzcXVhcmUgYnJhY2tldDogIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9w
Q29udGFpbmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpzb25Ub2tl
bi5FbmRBcnJheTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOiAvLyBTdGFydCBv
ZiBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3VtZUxpdGVyYWwoIm51bGwi
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZUFuZE1vZGlmeVN0YXRlRm9y
VmFsdWUoIkludmFsaWQgc3RhdGUgdG8gcmVhZCBhIG51bGwgbGl0ZXJhbDogIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpzb25Ub2tlbi5OdWxsOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAndCc6IC8vIFN0YXJ0IG9mIHRydWUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb25zdW1lTGl0ZXJhbCgidHJ1ZSIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZhbGlkYXRlQW5kTW9kaWZ5U3RhdGVGb3JWYWx1ZSgiSW52YWxpZCBzdGF0ZSB0byBy
ZWFkIGEgdHJ1ZSBsaXRlcmFsOiAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSnNvblRva2VuLlRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzogLy8g
U3RhcnQgb2YgZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdW1lTGl0ZXJh
bCgiZmFsc2UiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZUFuZE1vZGlm
eVN0YXRlRm9yVmFsdWUoIkludmFsaWQgc3RhdGUgdG8gcmVhZCBhIGZhbHNlIGxpdGVyYWw6ICIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKc29uVG9rZW4uRmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICctJzogLy8gU3RhcnQgb2YgYSBudW1iZXIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAnOgotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnMSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJzMnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1JzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJzYnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNyc6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICc4JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
JzknOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBudW1iZXIgPSBSZWFkTnVt
YmVyKG5leHQuVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlQW5k
TW9kaWZ5U3RhdGVGb3JWYWx1ZSgiSW52YWxpZCBzdGF0ZSB0byByZWFkIGEgbnVtYmVyIHRva2Vu
OiAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSnNvblRva2VuLlZhbHVl
KG51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkSnNvbkV4Y2VwdGlvbigiSW52YWxpZCBm
aXJzdCBjaGFyYWN0ZXIgb2YgdG9rZW46ICIgKyBuZXh0LlZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cHJpdmF0ZSB2b2lkIFZhbGlkYXRlU3RhdGUoU3RhdGUgdmFsaWRTdGF0ZXMsIHN0cmluZyBlcnJv
clByZWZpeCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoKHZhbGlkU3RhdGVz
ICYgc3RhdGUpID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0
aHJvdyByZWFkZXIuQ3JlYXRlRXhjZXB0aW9uKGVycm9yUHJlZml4ICsgc3RhdGUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAgICAgLy8vIFJlYWRzIGEgc3RyaW5nIHRva2VuLiBJdCBpcyBhc3N1bWVkIHRoYXQg
dGhlIG9wZW5pbmcgIiBoYXMgYWxyZWFkeSBiZWVuIHJlYWQuCi0gICAgICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICAgICAgcHJpdmF0ZSBzdHJpbmcgUmVhZFN0cmluZygpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsK
LSAgICAgICAgICAgICAgICBib29sIGhhdmVIaWdoU3Vycm9nYXRlID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgd2hpbGUgKHRydWUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBjaGFyIGMgPSByZWFkZXIuUmVhZE9yRmFpbCgiVW5leHBlY3RlZCBlbmQgb2YgdGV4dCB3
aGlsZSByZWFkaW5nIHN0cmluZyIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA8ICcgJykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVh
ZGVyLkNyZWF0ZUV4Y2VwdGlvbihzdHJpbmcuRm9ybWF0KEN1bHR1cmVJbmZvLkludmFyaWFudEN1
bHR1cmUsICJJbnZhbGlkIGNoYXJhY3RlciBpbiBzdHJpbmcgbGl0ZXJhbDogVSt7MDp4NH0iLCAo
aW50KSBjKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGMgPT0gJyInKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGF2ZUhpZ2hTdXJyb2dhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVhZGVyLkNyZWF0ZUV4Y2VwdGlvbigiSW52
YWxpZCB1c2Ugb2Ygc3Vycm9nYXRlIHBhaXIgY29kZSB1bml0cyIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLlRvU3RyaW5n
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0g
J1xcJykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYyA9
IFJlYWRFc2NhcGVkQ2hhcmFjdGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgb25seSBhbGxvd2luZyBzdXJyb2dhdGUgcGFp
cnMgdGhhdCBhcmUgZWl0aGVyIGJvdGggZXNjYXBlZCwKLSAgICAgICAgICAgICAgICAgICAgLy8g
b3IgYm90aCBub3QgZXNjYXBlZC4gSXQgd291bGQgYmUgYSB2ZXJ5IG9kZCB0ZXh0IHN0cmVhbSB0
aGF0IGNvbnRhaW5lZCBhICJsb25lIiBoaWdoIHN1cnJvZ2F0ZQotICAgICAgICAgICAgICAgICAg
ICAvLyBmb2xsb3dlZCBieSBhbiBlc2NhcGVkIGxvdyBzdXJyb2dhdGUgb3IgdmljZSB2ZXJzYS4u
LiBhbmQgdGhhdCBjb3VsZG4ndCBldmVuIGJlIHJlcHJlc2VudGVkIGluIFVURi04LgotICAgICAg
ICAgICAgICAgICAgICBpZiAoaGF2ZUhpZ2hTdXJyb2dhdGUgIT0gY2hhci5Jc0xvd1N1cnJvZ2F0
ZShjKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3cgcmVhZGVyLkNyZWF0ZUV4Y2VwdGlvbigiSW52YWxpZCB1c2Ugb2Ygc3Vycm9nYXRlIHBhaXIg
Y29kZSB1bml0cyIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGhhdmVIaWdoU3Vycm9nYXRlID0gY2hhci5Jc0hpZ2hTdXJyb2dhdGUoYyk7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhbHVlLkFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBSZWFkcyBh
biBlc2NhcGVkIGNoYXJhY3Rlci4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBsZWFkaW5nIGJhY2tz
bGFzaCBoYXMgYWxyZWFkeSBiZWVuIHJlYWQuCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgICAgICAgICAgcHJpdmF0ZSBjaGFyIFJlYWRFc2NhcGVkQ2hhcmFjdGVyKCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjaGFyIGMgPSByZWFkZXIuUmVhZE9yRmFpbCgiVW5leHBl
Y3RlZCBlbmQgb2YgdGV4dCB3aGlsZSByZWFkaW5nIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2Ui
KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAn
XG4nOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gJ1xcJzsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gJ1xiJzsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAn
Zic6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xmJzsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xyJzsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gJ1x0JzsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJyInOwotICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAnLyc7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
J3UnOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRVbmljb2RlRXNjYXBlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdyByZWFkZXIuQ3JlYXRlRXhjZXB0aW9uKHN0cmluZy5Gb3JtYXQoQ3VsdHVyZUluZm8uSW52
YXJpYW50Q3VsdHVyZSwgIkludmFsaWQgY2hhcmFjdGVyIGluIGNoYXJhY3RlciBlc2NhcGUgc2Vx
dWVuY2U6IFUrezA6eDR9IiwgKGludCkgYykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAgICAgLy8vIFJlYWRz
IGFuIGVzY2FwZWQgVW5pY29kZSA0LW55YmJsZSBoZXggc2VxdWVuY2UuIEl0IGlzIGFzc3VtZWQg
dGhhdCB0aGUgbGVhZGluZyBcdSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQuCi0gICAgICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgcHJpdmF0ZSBjaGFyIFJlYWRVbmljb2RlRXNjYXBl
KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9IHJlYWRlci5SZWFkT3JGYWlsKCJVbmV4cGVj
dGVkIGVuZCBvZiB0ZXh0IHdoaWxlIHJlYWRpbmcgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UiKTsK
LSAgICAgICAgICAgICAgICAgICAgaW50IG55YmJsZTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGMgPj0gJzAnICYmIGMgPD0gJzknKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBueWJibGUgPSBjIC0gJzAnOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBueWJibGUgPSBjIC0gJ2En
ICsgMTA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG55YmJsZSA9IGMgLSAnQScgKyAxMDsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlYWRlci5DcmVhdGVFeGNlcHRpb24oc3RyaW5n
LkZvcm1hdChDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlLCAiSW52YWxpZCBjaGFyYWN0ZXIg
aW4gY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZTogVSt7MDp4NH0iLCAoaW50KSBjKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8
PCA0KSArIG55YmJsZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IChjaGFyKSByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAgICAgICAgIC8vLyBDb25zdW1lcyBhIHRleHQtb25seSBsaXRlcmFsLCB0aHJvd2lu
ZyBhbiBleGNlcHRpb24gaWYgdGhlIHJlYWQgdGV4dCBkb2Vzbid0IG1hdGNoIGl0LgotICAgICAg
ICAgICAgLy8vIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBsaXRl
cmFsIGhhcyBhbHJlYWR5IGJlZW4gcmVhZC4KLSAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgICAgICAgICBwcml2YXRlIHZvaWQgQ29uc3VtZUxpdGVyYWwoc3RyaW5nIHRleHQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCB0ZXh0Lkxlbmd0
aDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhcj8gbmV4
dCA9IHJlYWRlci5SZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09IG51bGwp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJl
YWRlci5DcmVhdGVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgZW5kIG9mIHRleHQgd2hpbGUgcmVhZGlu
ZyBsaXRlcmFsIHRva2VuICIgKyB0ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAobmV4dC5WYWx1ZSAhPSB0ZXh0W2ldKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFkZXIuQ3JlYXRlRXhjZXB0
aW9uKCJVbmV4cGVjdGVkIGNoYXJhY3RlciB3aGlsZSByZWFkaW5nIGxpdGVyYWwgdG9rZW4gIiAr
IHRleHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBwcml2YXRlIGRvdWJsZSBSZWFkTnVtYmVyKGNoYXIgaW5p
dGlhbENoYXJhY3RlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICAgICAgICAgIGlmIChp
bml0aWFsQ2hhcmFjdGVyID09ICctJykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuQXBwZW5kKCItIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRl
ci5QdXNoQmFjayhpbml0aWFsQ2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgLy8gRWFjaCBtZXRob2QgcmV0dXJucyB0aGUgY2hhcmFjdGVyIGl0IHJlYWQgdGhh
dCBkb2Vzbid0IGJlbG9uZyBpbiB0aGF0IHBhcnQsCi0gICAgICAgICAgICAgICAgLy8gc28gd2Ug
a25vdyB3aGF0IHRvIGRvIG5leHQsIGluY2x1ZGluZyBwdXNoaW5nIHRoZSBjaGFyYWN0ZXIgYmFj
ayBhdCB0aGUgZW5kLgotICAgICAgICAgICAgICAgIC8vIG51bGwgaXMgcmV0dXJuZWQgZm9yICJl
bmQgb2YgdGV4dCIuCi0gICAgICAgICAgICAgICAgY2hhcj8gbmV4dCA9IFJlYWRJbnQoYnVpbGRl
cik7Ci0gICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gJy4nKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbmV4dCA9IFJlYWRGcmFjKGJ1aWxkZXIpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSAnZScgfHwgbmV4dCA9PSAnRScp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZXh0ID0gUmVhZEV4cChi
dWlsZGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgcmVh
ZCBhIGNoYXJhY3RlciB3aGljaCB3YXNuJ3QgcGFydCBvZiB0aGUgbnVtYmVyLCBwdXNoIGl0IGJh
Y2sgc28gd2UgY2FuIHJlYWQgaXQgYWdhaW4KLSAgICAgICAgICAgICAgICAvLyB0byBwYXJzZSB0
aGUgbmV4dCB0b2tlbi4KLSAgICAgICAgICAgICAgICBpZiAobmV4dCAhPSBudWxsKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVhZGVyLlB1c2hCYWNrKG5leHQuVmFs
dWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQg
ZXhjZXB0aW9uIHNob3VsZCB3ZSB0aHJvdyBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgcmVwcmVzZW50
ZWQgYXMgYSBkb3VibGU/Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG91YmxlLlBhcnNlKGJ1aWxkZXIuVG9TdHJpbmco
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlclN0eWxlcy5BbGxvd0xlYWRpbmdTaWdu
IHwgTnVtYmVyU3R5bGVzLkFsbG93RGVjaW1hbFBvaW50IHwgTnVtYmVyU3R5bGVzLkFsbG93RXhw
b25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0
dXJlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKE92ZXJmbG93
RXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cg
cmVhZGVyLkNyZWF0ZUV4Y2VwdGlvbigiTnVtZXJpYyB2YWx1ZSBvdXQgb2YgcmFuZ2U6ICIgKyBi
dWlsZGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHByaXZhdGUgY2hhcj8gUmVhZEludChTdHJpbmdCdWlsZGVyIGJ1aWxkZXIpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY2hhciBmaXJzdCA9IHJlYWRlci5SZWFkT3JGYWlsKCJJbnZh
bGlkIG51bWVyaWMgbGl0ZXJhbCIpOwotICAgICAgICAgICAgICAgIGlmIChmaXJzdCA8ICcwJyB8
fCBmaXJzdCA+ICc5JykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
cm93IHJlYWRlci5DcmVhdGVFeGNlcHRpb24oIkludmFsaWQgbnVtZXJpYyBsaXRlcmFsIik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuQXBwZW5kKGZpcnN0KTsK
LSAgICAgICAgICAgICAgICBpbnQgZGlnaXRDb3VudDsKLSAgICAgICAgICAgICAgICBjaGFyPyBu
ZXh0ID0gQ29uc3VtZURpZ2l0cyhidWlsZGVyLCBvdXQgZGlnaXRDb3VudCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGZpcnN0ID09ICcwJyAmJiBkaWdpdENvdW50ICE9IDApCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFkZXIuQ3JlYXRlRXhjZXB0aW9uKCJJ
bnZhbGlkIG51bWVyaWMgbGl0ZXJhbDogbGVhZGluZyAwIGZvciBub24temVybyB2YWx1ZS4iKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgY2hhcj8gUmVhZEZyYWMoU3RyaW5nQnVpbGRl
ciBidWlsZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuQXBwZW5k
KCcuJyk7IC8vIEFscmVhZHkgY29uc3VtZWQgdGhpcwotICAgICAgICAgICAgICAgIGludCBkaWdp
dENvdW50OwotICAgICAgICAgICAgICAgIGNoYXI/IG5leHQgPSBDb25zdW1lRGlnaXRzKGJ1aWxk
ZXIsIG91dCBkaWdpdENvdW50KTsKLSAgICAgICAgICAgICAgICBpZiAoZGlnaXRDb3VudCA9PSAw
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVhZGVyLkNy
ZWF0ZUV4Y2VwdGlvbigiSW52YWxpZCBudW1lcmljIGxpdGVyYWw6IGZyYWN0aW9uIHdpdGggbm8g
dHJhaWxpbmcgZGlnaXRzIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiBuZXh0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcml2YXRlIGNoYXI/IFJl
YWRFeHAoU3RyaW5nQnVpbGRlciBidWlsZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuQXBwZW5kKCdFJyk7IC8vIEFscmVhZHkgY29uc3VtZWQgdGhpcyAob3IgJ2Un
KQotICAgICAgICAgICAgICAgIGNoYXI/IG5leHQgPSByZWFkZXIuUmVhZCgpOwotICAgICAgICAg
ICAgICAgIGlmIChuZXh0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvdyByZWFkZXIuQ3JlYXRlRXhjZXB0aW9uKCJJbnZhbGlkIG51bWVyaWMgbGl0
ZXJhbDogZXhwb25lbnQgd2l0aCBubyB0cmFpbGluZyBkaWdpdHMiKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gJy0nIHx8IG5leHQgPT0gJysnKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5BcHBlbmQobmV4dC5W
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRlci5QdXNoQmFjayhuZXh0LlZhbHVl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW50IGRpZ2l0Q291bnQ7Ci0g
ICAgICAgICAgICAgICAgbmV4dCA9IENvbnN1bWVEaWdpdHMoYnVpbGRlciwgb3V0IGRpZ2l0Q291
bnQpOwotICAgICAgICAgICAgICAgIGlmIChkaWdpdENvdW50ID09IDApCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFkZXIuQ3JlYXRlRXhjZXB0aW9uKCJJ
bnZhbGlkIG51bWVyaWMgbGl0ZXJhbDogZXhwb25lbnQgd2l0aG91dCB2YWx1ZSIpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcHJpdmF0ZSBjaGFyPyBDb25zdW1lRGlnaXRzKFN0cmluZ0J1aWxkZXIg
YnVpbGRlciwgb3V0IGludCBjb3VudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBj
b3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBjaGFyPyBuZXh0ID0gcmVhZGVyLlJlYWQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gbnVsbCB8fCBuZXh0LlZhbHVlIDwgJzAnIHx8IG5l
eHQuVmFsdWUgPiAnOScpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBuZXh0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuQXBwZW5kKG5leHQu
VmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAgICAgLy8vIFZhbGlkYXRlcyB0aGF0IHdlJ3JlIGluIGEg
dmFsaWQgc3RhdGUgdG8gcmVhZCBhIHZhbHVlICh1c2luZyB0aGUgZ2l2ZW4gZXJyb3IgcHJlZml4
IGlmIG5lY2Vzc2FyeSkKLSAgICAgICAgICAgIC8vLyBhbmQgY2hhbmdlcyB0aGUgc3RhdGUgdG8g
dGhlIGFwcHJvcHJpYXRlIG9uZSwgZS5nLiBPYmplY3RBZnRlckNvbG9uIHRvIE9iamVjdEFmdGVy
UHJvcGVydHkuCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgcHJpdmF0
ZSB2b2lkIFZhbGlkYXRlQW5kTW9kaWZ5U3RhdGVGb3JWYWx1ZShzdHJpbmcgZXJyb3JQcmVmaXgp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVmFsaWRhdGVTdGF0ZShWYWx1ZVN0YXRl
cywgZXJyb3JQcmVmaXgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFN0YXRlLlN0YXJ0T2ZEb2N1bWVu
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGUuRXhwZWN0ZWRFbmRPZkRv
Y3VtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIFN0YXRlLk9iamVjdEFmdGVyQ29sb246Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlLk9iamVjdEFmdGVyUHJvcGVydHk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU3RhdGUuQXJyYXlTdGFydDoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBTdGF0ZS5BcnJheUFmdGVyQ29tbWE6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlLkFycmF5QWZ0ZXJWYWx1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9u
KCJWYWxpZGF0ZUFuZE1vZGlmeVN0YXRlRm9yVmFsdWUgZG9lcyBub3QgaGFuZGxlIGFsbCB2YWx1
ZSBzdGF0ZXMgKGFuZCBzaG91bGQpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgICAgICAvLy8gUG9wcyB0aGUg
dG9wLW1vc3QgY29udGFpbmVyLCBhbmQgc2V0cyB0aGUgc3RhdGUgdG8gdGhlIGFwcHJvcHJpYXRl
IG9uZSBmb3IgdGhlIGVuZCBvZiBhIHZhbHVlCi0gICAgICAgICAgICAvLy8gaW4gdGhlIHBhcmVu
dCBjb250YWluZXIuCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgcHJp
dmF0ZSB2b2lkIFBvcENvbnRhaW5lcigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29udGFpbmVyU3RhY2suUG9wKCk7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRh
aW5lclN0YWNrLlBlZWsoKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhcmVudCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ29udGFpbmVyVHlwZS5PYmpl
Y3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlLk9iamVjdEFmdGVyUHJv
cGVydHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBDb250YWluZXJUeXBlLkFycmF5OgotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUgPSBTdGF0ZS5BcnJheUFmdGVyVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDb250YWluZXJUeXBlLkRvY3VtZW50OgotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZS5FeHBlY3RlZEVuZE9mRG9jdW1lbnQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9u
RXhjZXB0aW9uKCJVbmV4cGVjdGVkIGNvbnRhaW5lciB0eXBlOiAiICsgcGFyZW50KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgZW51bSBD
b250YWluZXJUeXBlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRG9jdW1lbnQsIE9i
amVjdCwgQXJyYXkKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAgICAgLy8vIFBvc3NpYmxlIHN0YXRlcyBvZiB0aGUgdG9rZW5pemVyLgotICAgICAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAg
ICAgIC8vLyA8cGFyYT5UaGlzIGlzIGEgZmxhZ3MgZW51bSBwdXJlbHkgc28gd2UgY2FuIHNpbXBs
eSBhbmQgZWZmaWNpZW50bHkgcmVwcmVzZW50IGEgc2V0IG9mIHZhbGlkIHN0YXRlcwotICAgICAg
ICAgICAgLy8vIGZvciBjaGVja2luZy48L3BhcmE+Ci0gICAgICAgICAgICAvLy8gPHBhcmE+Ci0g
ICAgICAgICAgICAvLy8gRWFjaCBpcyBkb2N1bWVudGVkIHdpdGggYW4gZXhhbXBsZSwKLSAgICAg
ICAgICAgIC8vLyB3aGVyZSBeIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aGlu
IHRoZSB0ZXh0IHN0cmVhbS4gVGhlIGV4YW1wbGVzIGFsbCB1c2Ugc3RyaW5nIHZhbHVlcywKLSAg
ICAgICAgICAgIC8vLyBidXQgY291bGQgYmUgYW55IHZhbHVlLCBpbmNsdWRpbmcgbmVzdGVkIG9i
amVjdHMvYXJyYXlzLgotICAgICAgICAgICAgLy8vIFRoZSBjb21wbGV0ZSBzdGF0ZSBvZiB0aGUg
dG9rZW5pemVyIGFsc28gaW5jbHVkZXMgYSBzdGFjayB0byBpbmRpY2F0ZSB0aGUgY29udGV4dHMg
KGFycmF5cy9vYmplY3RzKS4KLSAgICAgICAgICAgIC8vLyBBbnkgYWRkaXRpb25hbCBub3Rpb25h
bCBzdGF0ZSBvZiAiQWZ0ZXJWYWx1ZSIgaW5kaWNhdGVzIHRoYXQgYSB2YWx1ZSBoYXMgYmVlbiBj
b21wbGV0ZWQsIGF0IHdoaWNoIAotICAgICAgICAgICAgLy8vIHBvaW50IHRoZXJlJ3MgYW4gaW1t
ZWRpYXRlIHRyYW5zaXRpb24gdG8gRXhwZWN0ZWRFbmRPZkRvY3VtZW50LCAgT2JqZWN0QWZ0ZXJQ
cm9wZXJ0eSBvciBBcnJheUFmdGVyVmFsdWUuCi0gICAgICAgICAgICAvLy8gPC9wYXJhPgotICAg
ICAgICAgICAgLy8vIDxwYXJhPgotICAgICAgICAgICAgLy8vIFRoZXNlIHN0YXRlcyB3ZXJlIGRl
cml2ZWQgbWFudWFsbHkgYnkgcmVhZGluZyBSRkMgNzE1OSBjYXJlZnVsbHkuCi0gICAgICAgICAg
ICAvLy8gPC9wYXJhPgotICAgICAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgICAgIFtG
bGFnc10KLSAgICAgICAgICAgIHByaXZhdGUgZW51bSBTdGF0ZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgICAgICAvLy8gXiB7ICJmb28i
OiAiYmFyIiB9Ci0gICAgICAgICAgICAgICAgLy8vIEJlZm9yZSB0aGUgdmFsdWUgaW4gYSBkb2N1
bWVudC4gTmV4dCBzdGF0ZXM6IE9iamVjdFN0YXJ0LCBBcnJheVN0YXJ0LCAiQWZ0ZXJWYWx1ZSIK
LSAgICAgICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgICAgIFN0YXJ0T2ZE
b2N1bWVudCA9IDEgPDwgMCwKLSAgICAgICAgICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
ICAgICAgICAgLy8vIHsgImZvbyI6ICJiYXIiIH0gXgotICAgICAgICAgICAgICAgIC8vLyBBZnRl
ciB0aGUgdmFsdWUgaW4gYSBkb2N1bWVudC4gTmV4dCBzdGF0ZXM6IFJlYWRlckV4aGF1c3RlZAot
ICAgICAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgICAgICAgICAgRXhwZWN0ZWRF
bmRPZkRvY3VtZW50ID0gMSA8PCAxLAotICAgICAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgICAgICAgICAvLy8geyAiZm9vIjogImJhciIgfSBeIChhbmQgYWxyZWFkeSByZWFkIHRv
IHRoZSBlbmQgb2YgdGhlIHJlYWRlcikKLSAgICAgICAgICAgICAgICAvLy8gVGVybWluYWwgc3Rh
dGUuCi0gICAgICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgICAgICBSZWFk
ZXJFeGhhdXN0ZWQgPSAxIDw8IDIsCi0gICAgICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAgICAgICAgIC8vLyB7IF4gImZvbyI6ICJiYXIiIH0KLSAgICAgICAgICAgICAgICAvLy8g
QmVmb3JlIHRoZSAqZmlyc3QqIHByb3BlcnR5IGluIGFuIG9iamVjdC4KLSAgICAgICAgICAgICAg
ICAvLy8gTmV4dCBzdGF0ZXM6Ci0gICAgICAgICAgICAgICAgLy8vICJBZnRlclZhbHVlIiAoZW1w
dHkgb2JqZWN0KQotICAgICAgICAgICAgICAgIC8vLyBPYmplY3RCZWZvcmVDb2xvbiAocmVhZCBh
IG5hbWUpCi0gICAgICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgICAgICBP
YmplY3RTdGFydCA9IDEgPDwgMywKLSAgICAgICAgICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgICAgICAgICAgLy8vIHsgImZvbyIgXiA6ICJiYXIiLCAieCI6ICJ5IiB9Ci0gICAgICAgICAg
ICAgICAgLy8vIE5leHQgc3RhdGU6IE9iamVjdEFmdGVyQ29sb24KLSAgICAgICAgICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgICAgIE9iamVjdEJlZm9yZUNvbG9uID0gMSA8PCA0
LAotICAgICAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgICAgICAvLy8geyAi
Zm9vIiA6IF4gImJhciIsICJ4IjogInkiIH0KLSAgICAgICAgICAgICAgICAvLy8gQmVmb3JlIGFu
eSBwcm9wZXJ0eSBvdGhlciB0aGFuIHRoZSBmaXJzdCBpbiBhbiBvYmplY3QuCi0gICAgICAgICAg
ICAgICAgLy8vIChFcXVpdmFsZW50bHk6IGFmdGVyIGFueSBwcm9wZXJ0eSBpbiBhbiBvYmplY3Qp
IAotICAgICAgICAgICAgICAgIC8vLyBOZXh0IHN0YXRlczoKLSAgICAgICAgICAgICAgICAvLy8g
IkFmdGVyVmFsdWUiICh2YWx1ZSBpcyBzaW1wbGUpCi0gICAgICAgICAgICAgICAgLy8vIE9iamVj
dFN0YXJ0ICh2YWx1ZSBpcyBvYmplY3QpCi0gICAgICAgICAgICAgICAgLy8vIEFycmF5U3RhcnQg
KHZhbHVlIGlzIGFycmF5KQotICAgICAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
ICAgICAgICAgT2JqZWN0QWZ0ZXJDb2xvbiA9IDEgPDwgNSwKLSAgICAgICAgICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgICAgICAgICAgLy8vIHsgImZvbyIgOiAiYmFyIiBeICwgIngiIDog
InkiIH0KLSAgICAgICAgICAgICAgICAvLy8gQXQgdGhlIGVuZCBvZiBhIHByb3BlcnR5LCBzbyBl
eHBlY3RpbmcgZWl0aGVyIGEgY29tbWEgb3IgZW5kLW9mLW9iamVjdAotICAgICAgICAgICAgICAg
IC8vLyBOZXh0IHN0YXRlczogT2JqZWN0QWZ0ZXJDb21tYSBvciAiQWZ0ZXJWYWx1ZSIKLSAgICAg
ICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgICAgIE9iamVjdEFmdGVyUHJv
cGVydHkgPSAxIDw8IDYsCi0gICAgICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAg
ICAgICAgIC8vLyB7ICJmb28iOiJiYXIiLCBeICJ4IjoieSIgfQotICAgICAgICAgICAgICAgIC8v
LyBSZWFkIHRoZSBjb21tYSBhZnRlciB0aGUgcHJldmlvdXMgcHJvcGVydHksIHNvIGV4cGVjdGlu
ZyBhbm90aGVyIHByb3BlcnR5LgotICAgICAgICAgICAgICAgIC8vLyBUaGlzIGlzIGxpa2UgT2Jq
ZWN0U3RhcnQsIGJ1dCBjbG9zaW5nIGJyYWNlIGlzbid0IHZhbGlkIGhlcmUKLSAgICAgICAgICAg
ICAgICAvLy8gTmV4dCBzdGF0ZTogT2JqZWN0QmVmb3JlQ29sb24uCi0gICAgICAgICAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgICAgICBPYmplY3RBZnRlckNvbW1hID0gMSA8PCA3
LAotICAgICAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgICAgICAvLy8gWyBe
ICJmb28iLCAiYmFyIiBdCi0gICAgICAgICAgICAgICAgLy8vIEJlZm9yZSB0aGUgKmZpcnN0KiB2
YWx1ZSBpbiBhbiBhcnJheS4KLSAgICAgICAgICAgICAgICAvLy8gTmV4dCBzdGF0ZXM6Ci0gICAg
ICAgICAgICAgICAgLy8vICJBZnRlclZhbHVlIiAocmVhZCBhIHZhbHVlKQotICAgICAgICAgICAg
ICAgIC8vLyAiQWZ0ZXJWYWx1ZSIgKGVuZCBvZiBhcnJheTsgd2lsbCBwb3Agc3RhY2spCi0gICAg
ICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgICAgICBBcnJheVN0YXJ0ID0g
MSA8PCA4LAotICAgICAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgICAgICAv
Ly8gWyAiZm9vIiBeICwgImJhciIgXQotICAgICAgICAgICAgICAgIC8vLyBBZnRlciBhbnkgdmFs
dWUgaW4gYW4gYXJyYXksIHNvIGV4cGVjdGluZyBlaXRoZXIgYSBjb21tYSBvciBlbmQtb2YtYXJy
YXkKLSAgICAgICAgICAgICAgICAvLy8gTmV4dCBzdGF0ZXM6IEFycmF5QWZ0ZXJDb21tYSBvciAi
QWZ0ZXJWYWx1ZSIKLSAgICAgICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAg
ICAgIEFycmF5QWZ0ZXJWYWx1ZSA9IDEgPDwgOSwKLSAgICAgICAgICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgICAgICAgICAgLy8vIFsgImZvbyIsIF4gImJhciIgXQotICAgICAgICAgICAg
ICAgIC8vLyBBZnRlciBhIGNvbW1hIGluIGFuIGFycmF5LCBzbyB0aGVyZSAqbXVzdCogYmUgYW5v
dGhlciB2YWx1ZSAoc2ltcGxlIG9yIGNvbXBsZXgpLgotICAgICAgICAgICAgICAgIC8vLyBOZXh0
IHN0YXRlczogIkFmdGVyVmFsdWUiIChzaW1wbGUgdmFsdWUpLCBTdGFydE9iamVjdCwgU3RhcnRB
cnJheQotICAgICAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgICAgICAgICAgQXJy
YXlBZnRlckNvbW1hID0gMSA8PCAxMAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgICAgICAvLy8gV3JhcHBlciBhcm91bmQgYSB0ZXh0IHJlYWRlciBh
bGxvd2luZyBzbWFsbCBhbW91bnRzIG9mIGJ1ZmZlcmluZyBhbmQgbG9jYXRpb24gaGFuZGxpbmcu
Ci0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgcHJpdmF0ZSBjbGFzcyBQ
dXNoQmFja1JlYWRlcgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IEFk
ZCBsb2NhdGlvbnMgZm9yIGVycm9ycyBldGMuCi0KLSAgICAgICAgICAgICAgICBwcml2YXRlIHJl
YWRvbmx5IFRleHRSZWFkZXIgcmVhZGVyOwotCi0gICAgICAgICAgICAgICAgaW50ZXJuYWwgUHVz
aEJhY2tSZWFkZXIoVGV4dFJlYWRlciByZWFkZXIpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAvLyBUT0RPOiBXcmFwIHRoZSByZWFkZXIgaW4gYSBCdWZmZXJlZFJlYWRl
cj8KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkZXIgPSByZWFkZXI7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAgICAgICAg
IC8vLyBUaGUgYnVmZmVyZWQgbmV4dCBjaGFyYWN0ZXIsIGlmIHdlIGhhdmUgb25lLgotICAgICAg
ICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFyPyBu
ZXh0Q2hhcjsKLQotICAgICAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgICAg
ICAvLy8gUmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSwgb3IgbnVsbCBp
ZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZC4KLSAgICAgICAgICAgICAgICAvLy8gPC9zdW1tYXJ5
PgotICAgICAgICAgICAgICAgIC8vLyA8cmV0dXJucz48L3JldHVybnM+Ci0gICAgICAgICAgICAg
ICAgaW50ZXJuYWwgY2hhcj8gUmVhZCgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZiAobmV4dENoYXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhcj8gdG1wID0gbmV4dENoYXI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBuZXh0Q2hhciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdG1wOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGludCBu
ZXh0ID0gcmVhZGVyLlJlYWQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQgPT0g
LTEgPyBudWxsIDogKGNoYXI/KSBuZXh0OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGludGVybmFsIGNoYXIgUmVhZE9yRmFpbChzdHJpbmcgbWVzc2FnZU9uRmFpbHVyZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXI/IG5leHQgPSBSZWFk
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09IG51bGwpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IENyZWF0ZUV4Y2VwdGlvbiht
ZXNzYWdlT25GYWlsdXJlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbmV4dC5WYWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpbnRlcm5hbCB2b2lkIFB1c2hCYWNrKGNoYXIgYykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hhciAhPSBudWxsKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlv
bkV4Y2VwdGlvbigiQ2Fubm90IHB1c2ggYmFjayB3aGVuIGFscmVhZHkgYnVmZmVyaW5nIGEgY2hh
cmFjdGVyIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbmV4
dENoYXIgPSBjOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgICAgICAgICAvLy8gQ3JlYXRlcyBhIG5ldyBleGNlcHRpb24gYXBwcm9w
cmlhdGUgZm9yIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZWFkZXIuCi0gICAgICAgICAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgICAgICBpbnRlcm5hbCBJbnZhbGlkSnNvbkV4
Y2VwdGlvbiBDcmVhdGVFeGNlcHRpb24oc3RyaW5nIG1lc3NhZ2UpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBLZWVwIHRyYWNrIG9mIGFuZCB1c2UgdGhl
IGxvY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludmFsaWRKc29uRXhj
ZXB0aW9uKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvTGlt
aXRlZElucHV0U3RyZWFtLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9MaW1pdGVkSW5w
dXRTdHJlYW0uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMWQxOWQ5NDQwNjA0
ZGY5MjQ1OWRhYmQyNDEwNmQwMGQxMGM3NWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9MaW1pdGVkSW5wdXRT
dHJlYW0uY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5
cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSNlbmRyZWdpb24KLSAgICAKLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5JTzsKLQot
bmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1ZgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8g
U3RyZWFtIGltcGxlbWVudGF0aW9uIHdoaWNoIHByb3hpZXMgYW5vdGhlciBzdHJlYW0sIG9ubHkg
YWxsb3dpbmcgYSBjZXJ0YWluIGFtb3VudAotICAgIC8vLyBvZiBkYXRhIHRvIGJlIHJlYWQuIE5v
dGUgdGhhdCB0aGlzIGlzIG9ubHkgdXNlZCB0byByZWFkIGRlbGltaXRlZCBzdHJlYW1zLCBzbyBp
dAotICAgIC8vLyBkb2Vzbid0IGF0dGVtcHQgdG8gaW1wbGVtZW50IGV2ZXJ5dGhpbmcuCi0gICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICBpbnRlcm5hbCBzZWFsZWQgY2xhc3MgTGltaXRlZElucHV0U3Ry
ZWFtIDogU3RyZWFtCi0gICAgewotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IFN0cmVhbSBwcm94
aWVkOwotICAgICAgICBwcml2YXRlIGludCBieXRlc0xlZnQ7Ci0KLSAgICAgICAgaW50ZXJuYWwg
TGltaXRlZElucHV0U3RyZWFtKFN0cmVhbSBwcm94aWVkLCBpbnQgc2l6ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgdGhpcy5wcm94aWVkID0gcHJveGllZDsKLSAgICAgICAgICAgIGJ5dGVzTGVm
dCA9IHNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBDYW5S
ZWFkCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdldCB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAg
IH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBDYW5TZWVrCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGdldCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVi
bGljIG92ZXJyaWRlIGJvb2wgQ2FuV3JpdGUKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9p
ZCBGbHVzaCgpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlk
ZSBsb25nIExlbmd0aAotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQgeyB0aHJvdyBuZXcgTm90
U3VwcG9ydGVkRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVy
cmlkZSBsb25nIFBvc2l0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdldCB7IHRocm93IG5l
dyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oKTsgfQotICAgICAgICAgICAgc2V0IHsgdGhyb3cgbmV3
IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMg
b3ZlcnJpZGUgaW50IFJlYWQoYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGNvdW50KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYnl0ZXNMZWZ0ID4gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZWFkID0gcHJveGllZC5SZWFkKGJ1ZmZlciwgb2Zm
c2V0LCBNYXRoLk1pbihieXRlc0xlZnQsIGNvdW50KSk7Ci0gICAgICAgICAgICAgICAgYnl0ZXNM
ZWZ0IC09IGJ5dGVzUmVhZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXNSZWFkOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBw
dWJsaWMgb3ZlcnJpZGUgbG9uZyBTZWVrKGxvbmcgb2Zmc2V0LCBTZWVrT3JpZ2luIG9yaWdpbikK
LSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQgU2V0TGVuZ3RoKGxv
bmcgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRF
eGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIFdy
aXRlKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBjb3VudCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0g
ICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9NZXNzYWdlRXh0
ZW5zaW9ucy5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvTWVzc2FnZUV4dGVuc2lvbnMu
Y3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NzE1NmMzZWU3MTMyODdiZTg4ZjJi
ODZkZGY1NmQ5NWI4Zjk4MTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9NZXNzYWdlRXh0ZW5zaW9ucy5jcwor
KysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3Rp
Y2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJl
Z2lvbgotCi11c2luZyBTeXN0ZW0uSU87Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYKLXsK
LSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEV4dGVuc2lvbiBtZXRob2RzIG9uIDxzZWUgY3Jl
Zj0iSU1lc3NhZ2UiLz4gYW5kIDxzZWUgY3JlZj0iSU1lc3NhZ2V7VH0iLz4uCi0gICAgLy8vIDwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE1lc3NhZ2VFeHRlbnNpb25zCi0gICAg
ewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBNZXJnZXMgZGF0YSBmcm9tIHRo
ZSBnaXZlbiBieXRlIGFycmF5IGludG8gYW4gZXhpc3RpbmcgbWVzc2FnZS4KLSAgICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJtZXNzYWdlIj5UaGUgbWVzc2Fn
ZSB0byBtZXJnZSB0aGUgZGF0YSBpbnRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFt
ZT0iZGF0YSI+VGhlIGRhdGEgdG8gbWVyZ2UsIHdoaWNoIG11c3QgYmUgcHJvdG9idWYtZW5jb2Rl
ZCBiaW5hcnkgZGF0YS48L3BhcmFtPgotICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWVyZ2VG
cm9tKHRoaXMgSU1lc3NhZ2UgbWVzc2FnZSwgYnl0ZVtdIGRhdGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwobWVzc2FnZSwgIm1lc3NhZ2Ui
KTsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwoZGF0YSwgImRh
dGEiKTsKLSAgICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgQ29kZWRJbnB1
dFN0cmVhbShkYXRhKTsKLSAgICAgICAgICAgIG1lc3NhZ2UuTWVyZ2VGcm9tKGlucHV0KTsKLSAg
ICAgICAgICAgIGlucHV0LkNoZWNrUmVhZEVuZE9mU3RyZWFtVGFnKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBNZXJnZXMgZGF0YSBmcm9tIHRoZSBn
aXZlbiBieXRlIHN0cmluZyBpbnRvIGFuIGV4aXN0aW5nIG1lc3NhZ2UuCi0gICAgICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVzc2FnZSI+VGhlIG1lc3NhZ2Ug
dG8gbWVyZ2UgdGhlIGRhdGEgaW50by48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9
ImRhdGEiPlRoZSBkYXRhIHRvIG1lcmdlLCB3aGljaCBtdXN0IGJlIHByb3RvYnVmLWVuY29kZWQg
YmluYXJ5IGRhdGEuPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIE1lcmdlRnJv
bSh0aGlzIElNZXNzYWdlIG1lc3NhZ2UsIEJ5dGVTdHJpbmcgZGF0YSkKLSAgICAgICAgewotICAg
ICAgICAgICAgUHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbChtZXNzYWdlLCAibWVzc2Fn
ZSIpOwotICAgICAgICAgICAgUHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbChkYXRhLCAi
ZGF0YSIpOwotICAgICAgICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9IGRhdGEuQ3JlYXRl
Q29kZWRJbnB1dCgpOwotICAgICAgICAgICAgbWVzc2FnZS5NZXJnZUZyb20oaW5wdXQpOwotICAg
ICAgICAgICAgaW5wdXQuQ2hlY2tSZWFkRW5kT2ZTdHJlYW1UYWcoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIE1lcmdlcyBkYXRhIGZyb20gdGhlIGdp
dmVuIHN0cmVhbSBpbnRvIGFuIGV4aXN0aW5nIG1lc3NhZ2UuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVzc2FnZSI+VGhlIG1lc3NhZ2UgdG8gbWVy
Z2UgdGhlIGRhdGEgaW50by48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImlucHV0
Ij5TdHJlYW0gY29udGFpbmluZyB0aGUgZGF0YSB0byBtZXJnZSwgd2hpY2ggbXVzdCBiZSBwcm90
b2J1Zi1lbmNvZGVkIGJpbmFyeSBkYXRhLjwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMg
dm9pZCBNZXJnZUZyb20odGhpcyBJTWVzc2FnZSBtZXNzYWdlLCBTdHJlYW0gaW5wdXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwobWVzc2Fn
ZSwgIm1lc3NhZ2UiKTsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51
bGwoaW5wdXQsICJpbnB1dCIpOwotICAgICAgICAgICAgQ29kZWRJbnB1dFN0cmVhbSBjb2RlZElu
cHV0ID0gbmV3IENvZGVkSW5wdXRTdHJlYW0oaW5wdXQpOwotICAgICAgICAgICAgbWVzc2FnZS5N
ZXJnZUZyb20oY29kZWRJbnB1dCk7Ci0gICAgICAgICAgICBjb2RlZElucHV0LkNoZWNrUmVhZEVu
ZE9mU3RyZWFtVGFnKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgIC8vLyBNZXJnZXMgbGVuZ3RoLWRlbGltaXRlZCBkYXRhIGZyb20gdGhlIGdpdmVuIHN0cmVh
bSBpbnRvIGFuIGV4aXN0aW5nIG1lc3NhZ2UuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
ICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFRoZSBzdHJlYW0gaXMgZXhwZWN0ZWQgdG8g
Y29udGFpbiBhIGxlbmd0aCBhbmQgdGhlbiB0aGUgZGF0YS4gT25seSB0aGUgYW1vdW50IG9mIGRh
dGEKLSAgICAgICAgLy8vIHNwZWNpZmllZCBieSB0aGUgbGVuZ3RoIHdpbGwgYmUgY29uc3VtZWQu
Ci0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVzc2Fn
ZSI+VGhlIG1lc3NhZ2UgdG8gbWVyZ2UgdGhlIGRhdGEgaW50by48L3BhcmFtPgotICAgICAgICAv
Ly8gPHBhcmFtIG5hbWU9ImlucHV0Ij5TdHJlYW0gY29udGFpbmluZyB0aGUgZGF0YSB0byBtZXJn
ZSwgd2hpY2ggbXVzdCBiZSBwcm90b2J1Zi1lbmNvZGVkIGJpbmFyeSBkYXRhLjwvcGFyYW0+Ci0g
ICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNZXJnZURlbGltaXRlZEZyb20odGhpcyBJTWVzc2Fn
ZSBtZXNzYWdlLCBTdHJlYW0gaW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByb3RvUHJl
Y29uZGl0aW9ucy5DaGVja05vdE51bGwobWVzc2FnZSwgIm1lc3NhZ2UiKTsKLSAgICAgICAgICAg
IFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwoaW5wdXQsICJpbnB1dCIpOwotICAgICAg
ICAgICAgaW50IHNpemUgPSAoaW50KSBDb2RlZElucHV0U3RyZWFtLlJlYWRSYXdWYXJpbnQzMihp
bnB1dCk7Ci0gICAgICAgICAgICBTdHJlYW0gbGltaXRlZFN0cmVhbSA9IG5ldyBMaW1pdGVkSW5w
dXRTdHJlYW0oaW5wdXQsIHNpemUpOwotICAgICAgICAgICAgbWVzc2FnZS5NZXJnZUZyb20obGlt
aXRlZFN0cmVhbSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBDb252ZXJ0cyB0aGUgZ2l2ZW4gbWVzc2FnZSBpbnRvIGEgYnl0ZSBhcnJheSBpbiBwcm90
b2J1ZiBlbmNvZGluZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJh
bSBuYW1lPSJtZXNzYWdlIj5UaGUgbWVzc2FnZSB0byBjb252ZXJ0LjwvcGFyYW0+Ci0gICAgICAg
IC8vLyA8cmV0dXJucz5UaGUgbWVzc2FnZSBkYXRhIGFzIGEgYnl0ZSBhcnJheS48L3JldHVybnM+
Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIFRvQnl0ZUFycmF5KHRoaXMgSU1lc3NhZ2Ug
bWVzc2FnZSkKLSAgICAgICAgewotICAgICAgICAgICAgUHJvdG9QcmVjb25kaXRpb25zLkNoZWNr
Tm90TnVsbChtZXNzYWdlLCAibWVzc2FnZSIpOwotICAgICAgICAgICAgYnl0ZVtdIHJlc3VsdCA9
IG5ldyBieXRlW21lc3NhZ2UuQ2FsY3VsYXRlU2l6ZSgpXTsKLSAgICAgICAgICAgIENvZGVkT3V0
cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShyZXN1bHQpOwotICAgICAg
ICAgICAgbWVzc2FnZS5Xcml0ZVRvKG91dHB1dCk7Ci0gICAgICAgICAgICBvdXRwdXQuQ2hlY2tO
b1NwYWNlTGVmdCgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlcyB0aGUgZ2l2ZW4gbWVzc2Fn
ZSBkYXRhIHRvIHRoZSBnaXZlbiBzdHJlYW0gaW4gcHJvdG9idWYgZW5jb2RpbmcuCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVzc2FnZSI+VGhlIG1l
c3NhZ2UgdG8gd3JpdGUgdG8gdGhlIHN0cmVhbS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFt
IG5hbWU9Im91dHB1dCI+VGhlIHN0cmVhbSB0byB3cml0ZSB0by48L3BhcmFtPgotICAgICAgICBw
dWJsaWMgc3RhdGljIHZvaWQgV3JpdGVUbyh0aGlzIElNZXNzYWdlIG1lc3NhZ2UsIFN0cmVhbSBv
dXRwdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05v
dE51bGwobWVzc2FnZSwgIm1lc3NhZ2UiKTsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9u
cy5DaGVja05vdE51bGwob3V0cHV0LCAib3V0cHV0Iik7Ci0gICAgICAgICAgICBDb2RlZE91dHB1
dFN0cmVhbSBjb2RlZE91dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShvdXRwdXQpOwotICAg
ICAgICAgICAgbWVzc2FnZS5Xcml0ZVRvKGNvZGVkT3V0cHV0KTsKLSAgICAgICAgICAgIGNvZGVk
T3V0cHV0LkZsdXNoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgIC8vLyBXcml0ZXMgdGhlIGxlbmd0aCBhbmQgdGhlbiBkYXRhIG9mIHRoZSBnaXZlbiBtZXNz
YWdlIHRvIGEgc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBh
cmFtIG5hbWU9Im1lc3NhZ2UiPlRoZSBtZXNzYWdlIHRvIHdyaXRlLjwvcGFyYW0+Ci0gICAgICAg
IC8vLyA8cGFyYW0gbmFtZT0ib3V0cHV0Ij5UaGUgb3V0cHV0IHN0cmVhbSB0byB3cml0ZSB0by48
L3BhcmFtPgotICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgV3JpdGVEZWxpbWl0ZWRUbyh0aGlz
IElNZXNzYWdlIG1lc3NhZ2UsIFN0cmVhbSBvdXRwdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwobWVzc2FnZSwgIm1lc3NhZ2UiKTsKLSAg
ICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwob3V0cHV0LCAib3V0cHV0
Iik7Ci0gICAgICAgICAgICBDb2RlZE91dHB1dFN0cmVhbSBjb2RlZE91dHB1dCA9IG5ldyBDb2Rl
ZE91dHB1dFN0cmVhbShvdXRwdXQpOwotICAgICAgICAgICAgY29kZWRPdXRwdXQuV3JpdGVSYXdW
YXJpbnQzMigodWludCltZXNzYWdlLkNhbGN1bGF0ZVNpemUoKSk7Ci0gICAgICAgICAgICBtZXNz
YWdlLldyaXRlVG8oY29kZWRPdXRwdXQpOwotICAgICAgICAgICAgY29kZWRPdXRwdXQuRmx1c2go
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbnZl
cnRzIHRoZSBnaXZlbiBtZXNzYWdlIGludG8gYSBieXRlIHN0cmluZyBpbiBwcm90b2J1ZiBlbmNv
ZGluZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJt
ZXNzYWdlIj5UaGUgbWVzc2FnZSB0byBjb252ZXJ0LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0
dXJucz5UaGUgbWVzc2FnZSBkYXRhIGFzIGEgYnl0ZSBzdHJpbmcuPC9yZXR1cm5zPgotICAgICAg
ICBwdWJsaWMgc3RhdGljIEJ5dGVTdHJpbmcgVG9CeXRlU3RyaW5nKHRoaXMgSU1lc3NhZ2UgbWVz
c2FnZSkKLSAgICAgICAgewotICAgICAgICAgICAgUHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90
TnVsbChtZXNzYWdlLCAibWVzc2FnZSIpOwotICAgICAgICAgICAgcmV0dXJuIEJ5dGVTdHJpbmcu
QXR0YWNoQnl0ZXMobWVzc2FnZS5Ub0J5dGVBcnJheSgpKTsKLSAgICAgICAgfSAgICAgICAgCi0g
ICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9NZXNzYWdlUGFy
c2VyLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9NZXNzYWdlUGFyc2VyLmNzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODg5NjM4YjIwYTIxYzJlY2FiOTc3YjI4MWRlNTMw
YTA5OTEzMGU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvTWVzc2FnZVBhcnNlci5jcworKysgL2Rldi9udWxs
CkBAIC0xLDI2NyArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vu
c2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotICAgIAot
dXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3Rv
YnVmCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBIGdlbmVyYWwgbWVzc2FnZSBwYXJz
ZXIsIHR5cGljYWxseSB1c2VkIGJ5IHJlZmxlY3Rpb24tYmFzZWQgY29kZSBhcyBhbGwgdGhlIG1l
dGhvZHMKLSAgICAvLy8gcmV0dXJuIHNpbXBsZSA8c2VlIGNyZWY9IklNZXNzYWdlIi8+LgotICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIE1lc3NhZ2VQYXJzZXIKLSAgICB7Ci0g
ICAgICAgIHByaXZhdGUgRnVuYzxJTWVzc2FnZT4gZmFjdG9yeTsKLQotICAgICAgICBpbnRlcm5h
bCBNZXNzYWdlUGFyc2VyKEZ1bmM8SU1lc3NhZ2U+IGZhY3RvcnkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgdGVtcGxhdGUgaW5zdGFuY2UgcmVhZHkg
Zm9yIHBvcHVsYXRpb24uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmV0
dXJucz5BbiBlbXB0eSBtZXNzYWdlLjwvcmV0dXJucz4KLSAgICAgICAgaW50ZXJuYWwgSU1lc3Nh
Z2UgQ3JlYXRlVGVtcGxhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFjdG9y
eSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUGFy
c2VzIGEgbWVzc2FnZSBmcm9tIGEgYnl0ZSBhcnJheS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkYXRhIj5UaGUgYnl0ZSBhcnJheSBjb250YWluaW5n
IHRoZSBtZXNzYWdlLiBNdXN0IG5vdCBiZSBudWxsLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0
dXJucz5UaGUgbmV3bHkgcGFyc2VkIG1lc3NhZ2UuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMg
SU1lc3NhZ2UgUGFyc2VGcm9tKGJ5dGVbXSBkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBQ
cm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKGRhdGEsICJkYXRhIik7Ci0gICAgICAgICAg
ICBJTWVzc2FnZSBtZXNzYWdlID0gZmFjdG9yeSgpOwotICAgICAgICAgICAgbWVzc2FnZS5NZXJn
ZUZyb20oZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFBhcnNlcyBhIG1lc3NhZ2UgZnJvbSB0
aGUgZ2l2ZW4gYnl0ZSBzdHJpbmcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8v
LyA8cGFyYW0gbmFtZT0iZGF0YSI+VGhlIGRhdGEgdG8gcGFyc2UuPC9wYXJhbT4KLSAgICAgICAg
Ly8vIDxyZXR1cm5zPlRoZSBwYXJzZWQgbWVzc2FnZS48L3JldHVybnM+Ci0gICAgICAgIHB1Ymxp
YyBJTWVzc2FnZSBQYXJzZUZyb20oQnl0ZVN0cmluZyBkYXRhKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKGRhdGEsICJkYXRhIik7Ci0gICAg
ICAgICAgICBJTWVzc2FnZSBtZXNzYWdlID0gZmFjdG9yeSgpOwotICAgICAgICAgICAgbWVzc2Fn
ZS5NZXJnZUZyb20oZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFBhcnNlcyBhIG1lc3NhZ2Ug
ZnJvbSB0aGUgZ2l2ZW4gc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAv
Ly8gPHBhcmFtIG5hbWU9ImlucHV0Ij5UaGUgc3RyZWFtIHRvIHBhcnNlLjwvcGFyYW0+Ci0gICAg
ICAgIC8vLyA8cmV0dXJucz5UaGUgcGFyc2VkIG1lc3NhZ2UuPC9yZXR1cm5zPgotICAgICAgICBw
dWJsaWMgSU1lc3NhZ2UgUGFyc2VGcm9tKFN0cmVhbSBpbnB1dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgSU1lc3NhZ2UgbWVzc2FnZSA9IGZhY3RvcnkoKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uu
TWVyZ2VGcm9tKGlucHV0KTsKLSAgICAgICAgICAgIHJldHVybiBtZXNzYWdlOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUGFyc2VzIGEgbGVuZ3RoLWRl
bGltaXRlZCBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3Vt
bWFyeT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gVGhlIHN0cmVhbSBpcyBl
eHBlY3RlZCB0byBjb250YWluIGEgbGVuZ3RoIGFuZCB0aGVuIHRoZSBkYXRhLiBPbmx5IHRoZSBh
bW91bnQgb2YgZGF0YQotICAgICAgICAvLy8gc3BlY2lmaWVkIGJ5IHRoZSBsZW5ndGggd2lsbCBi
ZSBjb25zdW1lZC4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDxwYXJhbSBu
YW1lPSJpbnB1dCI+VGhlIHN0cmVhbSB0byBwYXJzZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJl
dHVybnM+VGhlIHBhcnNlZCBtZXNzYWdlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIElNZXNz
YWdlIFBhcnNlRGVsaW1pdGVkRnJvbShTdHJlYW0gaW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIElNZXNzYWdlIG1lc3NhZ2UgPSBmYWN0b3J5KCk7Ci0gICAgICAgICAgICBtZXNzYWdlLk1l
cmdlRGVsaW1pdGVkRnJvbShpbnB1dCk7Ci0gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFBhcnNlcyBhIG1l
c3NhZ2UgZnJvbSB0aGUgZ2l2ZW4gY29kZWQgaW5wdXQgc3RyZWFtLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImlucHV0Ij5UaGUgc3RyZWFtIHRvIHBh
cnNlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcGFyc2VkIG1lc3NhZ2UuPC9y
ZXR1cm5zPgotICAgICAgICBwdWJsaWMgSU1lc3NhZ2UgUGFyc2VGcm9tKENvZGVkSW5wdXRTdHJl
YW0gaW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElNZXNzYWdlIG1lc3NhZ2UgPSBmYWN0
b3J5KCk7Ci0gICAgICAgICAgICBtZXNzYWdlLk1lcmdlRnJvbShpbnB1dCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbWVzc2FnZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgLy8vIFBhcnNlcyBhIG1lc3NhZ2UgZnJvbSB0aGUgZ2l2ZW4gSlNPTi4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJqc29uIj5UaGUgSlNPTiB0
byBwYXJzZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHBhcnNlZCBtZXNzYWdl
LjwvcmV0dXJucz4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iSW52YWxpZEpzb25FeGNl
cHRpb24iPlRoZSBKU09OIGRvZXMgbm90IGNvbXBseSB3aXRoIFJGQyA3MTU5PC9leGNlcHRpb24+
Ci0gICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbiI+VGhlIEpTT04gZG9lcyBub3QgcmVwcmVzZW50IGEgUHJvdG9jb2wgQnVmZmVycyBtZXNz
YWdlIGNvcnJlY3RseTwvZXhjZXB0aW9uPgotICAgICAgICBwdWJsaWMgSU1lc3NhZ2UgUGFyc2VK
c29uKHN0cmluZyBqc29uKQotICAgICAgICB7Ci0gICAgICAgICAgICBJTWVzc2FnZSBtZXNzYWdl
ID0gZmFjdG9yeSgpOwotICAgICAgICAgICAgSnNvblBhcnNlci5EZWZhdWx0Lk1lcmdlKG1lc3Nh
Z2UsIGpzb24pOwotICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgcGFyc2VyIGZvciBhIHNwZWNpZmljIG1l
c3NhZ2UgdHlwZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIC8vLyA8cmVtYXJrcz4KLSAgICAv
Ly8gPHA+Ci0gICAgLy8vIFRoaXMgZGVsZWdhdGVzIG1vc3QgYmVoYXZpb3IgdG8gdGhlCi0gICAg
Ly8vIDxzZWUgY3JlZj0iSU1lc3NhZ2UuTWVyZ2VGcm9tIi8+IGltcGxlbWVudGF0aW9uIHdpdGhp
biB0aGUgb3JpZ2luYWwgdHlwZSwgYnV0Ci0gICAgLy8vIHByb3ZpZGVzIGNvbnZlbmllbnQgb3Zl
cmxvYWRzIHRvIHBhcnNlIGZyb20gYSB2YXJpZXR5IG9mIHNvdXJjZXMuCi0gICAgLy8vIDwvcD4K
LSAgICAvLy8gPHA+Ci0gICAgLy8vIE1vc3QgYXBwbGljYXRpb25zIHdpbGwgbmV2ZXIgbmVlZCB0
byBjcmVhdGUgdGhlaXIgb3duIGluc3RhbmNlcyBvZiB0aGlzIHR5cGU7Ci0gICAgLy8vIGluc3Rl
YWQsIHVzZSB0aGUgc3RhdGljIDxjPlBhcnNlcjwvYz4gcHJvcGVydHkgb2YgYSBnZW5lcmF0ZWQg
bWVzc2FnZSB0eXBlIHRvIG9idGFpbiBhCi0gICAgLy8vIHBhcnNlciBmb3IgdGhhdCB0eXBlLgot
ICAgIC8vLyA8L3A+Ci0gICAgLy8vIDwvcmVtYXJrcz4KLSAgICAvLy8gPHR5cGVwYXJhbSBuYW1l
PSJUIj5UaGUgdHlwZSBvZiBtZXNzYWdlIHRvIGJlIHBhcnNlZC48L3R5cGVwYXJhbT4KLSAgICBw
dWJsaWMgc2VhbGVkIGNsYXNzIE1lc3NhZ2VQYXJzZXI8VD4gOiBNZXNzYWdlUGFyc2VyIHdoZXJl
IFQgOiBJTWVzc2FnZTxUPgotICAgIHsKLSAgICAgICAgLy8gSW1wbGVtZW50YXRpb24gbm90ZTog
YWxsIHRoZSBtZXRob2RzIGhlcmUgKmNvdWxkKiBqdXN0IGRlbGVnYXRlIHVwIHRvIHRoZSBiYXNl
IGNsYXNzIGFuZCBjYXN0IHRoZSByZXN1bHQuCi0gICAgICAgIC8vIFRoZSBjdXJyZW50IGltcGxl
bWVudGF0aW9uIGF2b2lkcyBhIHZpcnR1YWwgbWV0aG9kIGNhbGwgYW5kIGEgY2FzdCwgd2hpY2gg
Km1heSogYmUgc2lnbmlmaWNhbnQgaW4gc29tZSBjYXNlcy4KLSAgICAgICAgLy8gQmVuY2htYXJr
aW5nIHdvcmsgaXMgcmVxdWlyZWQgdG8gbWVhc3VyZSB0aGUgc2lnbmlmaWNhbmNlIC0gYnV0IGl0
J3Mgb25seSBhIGZldyBsaW5lcyBvZiBjb2RlIGluIGFueSBjYXNlLgotICAgICAgICAvLyBUaGUg
QVBJIHdvdWxkbid0IGNoYW5nZSBhbnl3YXkgLSBqdXN0IHRoZSBpbXBsZW1lbnRhdGlvbiAtIHNv
IHRoaXMgd29yayBjYW4gYmUgZGVmZXJyZWQuCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRnVu
YzxUPiBmYWN0b3J5OyAKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVh
dGVzIGEgbmV3IHBhcnNlci4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxy
ZW1hcmtzPgotICAgICAgICAvLy8gVGhlIGZhY3RvcnkgbWV0aG9kIGlzIGVmZmVjdGl2ZWx5IGFu
IG9wdGltaXphdGlvbiBvdmVyIHVzaW5nIGEgZ2VuZXJpYyBjb25zdHJhaW50Ci0gICAgICAgIC8v
LyB0byByZXF1aXJlIGEgcGFyYW1ldGVybGVzcyBjb25zdHJ1Y3RvcjogZGVsZWdhdGVzIGFyZSBz
aWduaWZpY2FudGx5IGZhc3RlciB0byBleGVjdXRlLgotICAgICAgICAvLy8gPC9yZW1hcmtzPgot
ICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImZhY3RvcnkiPkZ1bmN0aW9uIHRvIGludm9rZSB3aGVu
IGEgbmV3LCBlbXB0eSBtZXNzYWdlIGlzIHJlcXVpcmVkLjwvcGFyYW0+Ci0gICAgICAgIHB1Ymxp
YyBNZXNzYWdlUGFyc2VyKEZ1bmM8VD4gZmFjdG9yeSkgOiBiYXNlKCgpID0+IGZhY3RvcnkoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENyZWF0ZXMgYSB0ZW1wbGF0
ZSBpbnN0YW5jZSByZWFkeSBmb3IgcG9wdWxhdGlvbi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgLy8vIDxyZXR1cm5zPkFuIGVtcHR5IG1lc3NhZ2UuPC9yZXR1cm5zPgotICAgICAg
ICBpbnRlcm5hbCBuZXcgVCBDcmVhdGVUZW1wbGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWN0b3J5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgICAgIC8vLyBQYXJzZXMgYSBtZXNzYWdlIGZyb20gYSBieXRlIGFycmF5LgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGEiPlRoZSBieXRlIGFy
cmF5IGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UuIE11c3Qgbm90IGJlIG51bGwuPC9wYXJhbT4KLSAg
ICAgICAgLy8vIDxyZXR1cm5zPlRoZSBuZXdseSBwYXJzZWQgbWVzc2FnZS48L3JldHVybnM+Ci0g
ICAgICAgIHB1YmxpYyBuZXcgVCBQYXJzZUZyb20oYnl0ZVtdIGRhdGEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwoZGF0YSwgImRhdGEiKTsK
LSAgICAgICAgICAgIFQgbWVzc2FnZSA9IGZhY3RvcnkoKTsKLSAgICAgICAgICAgIG1lc3NhZ2Uu
TWVyZ2VGcm9tKGRhdGEpOwotICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQYXJzZXMgYSBtZXNzYWdlIGZy
b20gdGhlIGdpdmVuIGJ5dGUgc3RyaW5nLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAg
ICAvLy8gPHBhcmFtIG5hbWU9ImRhdGEiPlRoZSBkYXRhIHRvIHBhcnNlLjwvcGFyYW0+Ci0gICAg
ICAgIC8vLyA8cmV0dXJucz5UaGUgcGFyc2VkIG1lc3NhZ2UuPC9yZXR1cm5zPgotICAgICAgICBw
dWJsaWMgbmV3IFQgUGFyc2VGcm9tKEJ5dGVTdHJpbmcgZGF0YSkKLSAgICAgICAgewotICAgICAg
ICAgICAgUHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbChkYXRhLCAiZGF0YSIpOwotICAg
ICAgICAgICAgVCBtZXNzYWdlID0gZmFjdG9yeSgpOwotICAgICAgICAgICAgbWVzc2FnZS5NZXJn
ZUZyb20oZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFBhcnNlcyBhIG1lc3NhZ2UgZnJvbSB0
aGUgZ2l2ZW4gc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBh
cmFtIG5hbWU9ImlucHV0Ij5UaGUgc3RyZWFtIHRvIHBhcnNlLjwvcGFyYW0+Ci0gICAgICAgIC8v
LyA8cmV0dXJucz5UaGUgcGFyc2VkIG1lc3NhZ2UuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMg
bmV3IFQgUGFyc2VGcm9tKFN0cmVhbSBpbnB1dCkKLSAgICAgICAgewotICAgICAgICAgICAgVCBt
ZXNzYWdlID0gZmFjdG9yeSgpOwotICAgICAgICAgICAgbWVzc2FnZS5NZXJnZUZyb20oaW5wdXQp
OwotICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQYXJzZXMgYSBsZW5ndGgtZGVsaW1pdGVkIG1lc3NhZ2Ug
ZnJvbSB0aGUgZ2l2ZW4gc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAv
Ly8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBUaGUgc3RyZWFtIGlzIGV4cGVjdGVkIHRvIGNvbnRh
aW4gYSBsZW5ndGggYW5kIHRoZW4gdGhlIGRhdGEuIE9ubHkgdGhlIGFtb3VudCBvZiBkYXRhCi0g
ICAgICAgIC8vLyBzcGVjaWZpZWQgYnkgdGhlIGxlbmd0aCB3aWxsIGJlIGNvbnN1bWVkLgotICAg
ICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImlucHV0Ij5UaGUg
c3RyZWFtIHRvIHBhcnNlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcGFyc2Vk
IG1lc3NhZ2UuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgbmV3IFQgUGFyc2VEZWxpbWl0ZWRG
cm9tKFN0cmVhbSBpbnB1dCkKLSAgICAgICAgewotICAgICAgICAgICAgVCBtZXNzYWdlID0gZmFj
dG9yeSgpOwotICAgICAgICAgICAgbWVzc2FnZS5NZXJnZURlbGltaXRlZEZyb20oaW5wdXQpOwot
ICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBQYXJzZXMgYSBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGNvZGVk
IGlucHV0IHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJh
bSBuYW1lPSJpbnB1dCI+VGhlIHN0cmVhbSB0byBwYXJzZS48L3BhcmFtPgotICAgICAgICAvLy8g
PHJldHVybnM+VGhlIHBhcnNlZCBtZXNzYWdlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIG5l
dyBUIFBhcnNlRnJvbShDb2RlZElucHV0U3RyZWFtIGlucHV0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBUIG1lc3NhZ2UgPSBmYWN0b3J5KCk7Ci0gICAgICAgICAgICBtZXNzYWdlLk1lcmdlRnJv
bShpbnB1dCk7Ci0gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFBhcnNlcyBhIG1lc3NhZ2UgZnJvbSB0aGUg
Z2l2ZW4gSlNPTi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBu
YW1lPSJqc29uIj5UaGUgSlNPTiB0byBwYXJzZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVy
bnM+VGhlIHBhcnNlZCBtZXNzYWdlLjwvcmV0dXJucz4KLSAgICAgICAgLy8vIDxleGNlcHRpb24g
Y3JlZj0iSW52YWxpZEpzb25FeGNlcHRpb24iPlRoZSBKU09OIGRvZXMgbm90IGNvbXBseSB3aXRo
IFJGQyA3MTU5PC9leGNlcHRpb24+Ci0gICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiI+VGhlIEpTT04gZG9lcyBub3QgcmVwcmVzZW50IGEg
UHJvdG9jb2wgQnVmZmVycyBtZXNzYWdlIGNvcnJlY3RseTwvZXhjZXB0aW9uPgotICAgICAgICBw
dWJsaWMgbmV3IFQgUGFyc2VKc29uKHN0cmluZyBqc29uKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBUIG1lc3NhZ2UgPSBmYWN0b3J5KCk7Ci0gICAgICAgICAgICBKc29uUGFyc2VyLkRlZmF1bHQu
TWVyZ2UobWVzc2FnZSwganNvbik7Ci0gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKLSAgICAg
ICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUHJv
cGVydGllcy9Bc3NlbWJseUluZm8uY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1Byb3Bl
cnRpZXMvQXNzZW1ibHlJbmZvLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDg1
MmViYTVkNjc4NDJlN2Q5NDNhOGVjODk3NGUzZDBkNjE3MDljLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUHJv
cGVydGllcy9Bc3NlbWJseUluZm8uY3MKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0j
cmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKLXVz
aW5nIFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXM7Ci11c2luZyBTeXN0ZW0uU2VjdXJp
dHk7Ci0KLS8vIEdlbmVyYWwgSW5mb3JtYXRpb24gYWJvdXQgYW4gYXNzZW1ibHkgaXMgY29udHJv
bGxlZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgCi0vLyBzZXQgb2YgYXR0cmlidXRlcy4gQ2hhbmdl
IHRoZXNlIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZSBpbmZvcm1hdGlvbgotLy8gYXNz
b2NpYXRlZCB3aXRoIGFuIGFzc2VtYmx5LgotCi1bYXNzZW1ibHk6IEFzc2VtYmx5VGl0bGUoIkdv
b2dsZS5Qcm90b2J1ZiIpXQotW2Fzc2VtYmx5OiBBc3NlbWJseURlc2NyaXB0aW9uKCIiKV0KLVth
c3NlbWJseTogQXNzZW1ibHlDb25maWd1cmF0aW9uKCIiKV0KLVthc3NlbWJseTogQXNzZW1ibHlD
b21wYW55KCIiKV0KLVthc3NlbWJseTogQXNzZW1ibHlQcm9kdWN0KCJHb29nbGUuUHJvdG9idWYi
KV0KLVthc3NlbWJseTogQXNzZW1ibHlDb3B5cmlnaHQoIkNvcHlyaWdodCDCqSAgMjAxNSIpXQot
W2Fzc2VtYmx5OiBBc3NlbWJseVRyYWRlbWFyaygiIildCi1bYXNzZW1ibHk6IEFzc2VtYmx5Q3Vs
dHVyZSgiIildCi0KLSNpZiAhTkNSVU5DSAotW2Fzc2VtYmx5OiBBbGxvd1BhcnRpYWxseVRydXN0
ZWRDYWxsZXJzXQotI2VuZGlmCi0KLSNpZiBTSUdORUQKLVthc3NlbWJseTogSW50ZXJuYWxzVmlz
aWJsZVRvKCJHb29nbGUuUHJvdG9idWYuVGVzdCwgUHVibGljS2V5PSIgKwotICAgICIwMDI0MDAw
MDA0ODAwMDAwOTQwMDAwMDAwNjAyMDAwMDAwMjQwMDAwNTI1MzQxMzEwMDA0MDAwMDAxMDAwMTAw
MjU4MDBmYmNmYzYzYTEiICsKLSAgICAiN2M2NmIzMDNhYWU4MGIwM2E2YmVhYTE3NmJiNmJlZjg4
M2JlNDM2ZjJhMTU3OWVkZDgwY2UyM2VkZjE1MWExZjRjZWQ5N2FmODNhYmNkIiArCi0gICAgIjk4
MTIwNzA0MWZkNWIyZGEzYjQ5ODM0NmZjZmNkOTQ5MTBkNTJmMjU1MzdjNGE0M2NlM2ZiZTE3ZGM3
ZDQzZTZjYmRiNGQ4ZjEyNDJkYyIgKwotICAgICJiNmJkOWI1OTA2YmU3NGRhOGRhYTdkNzI4MGY5
NzEzMGYzMThhMTZjMDdiYWYxMTg4MzliMTU2Mjk5YTQ4NTIyZjlmYWUyMzcxYzk2NjUiICsKLSAg
ICAiYzVhZTljYjYiKV0KLSNlbHNlCi1bYXNzZW1ibHk6IEludGVybmFsc1Zpc2libGVUbygiR29v
Z2xlLlByb3RvYnVmLlRlc3QiKV0KLSNlbmRpZgotCi1bYXNzZW1ibHk6IEFzc2VtYmx5VmVyc2lv
bigiMy4wLjAuMCIpXQotW2Fzc2VtYmx5OiBBc3NlbWJseUZpbGVWZXJzaW9uKCIzLjAuMC4wIild
Ci1bYXNzZW1ibHk6IEFzc2VtYmx5SW5mb3JtYXRpb25hbFZlcnNpb24oIjMuMC4wLWJldGEzIild
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1Byb3RvUHJlY29uZGl0aW9u
cy5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUHJvdG9QcmVjb25kaXRpb25zLmNzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmFlYjliNDgxZDQwNTMyMDFkZmYwMDUwOThm
NGY4ZTYwMzhhYmI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUHJvdG9QcmVjb25kaXRpb25zLmNzCisrKyAv
ZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFu
ZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24K
LQotdXNpbmcgU3lzdGVtOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmCi17Ci0gICAgLy8v
IDxzdW1tYXJ5PgotICAgIC8vLyBIZWxwZXIgbWV0aG9kcyBmb3IgdGhyb3dpbmcgZXhjZXB0aW9u
cyB3aGVuIHByZWNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAvLy8gPHJlbWFya3M+Ci0gICAgLy8vIFRoaXMgY2xhc3MgaXMgdXNlZCBpbnRlcm5hbGx5IGFu
ZCBieSBnZW5lcmF0ZWQgY29kZTsgaXQgaXMgbm90IHBhcnRpY3VsYXJseQotICAgIC8vLyBleHBl
Y3RlZCB0byBiZSB1c2VkIGZyb20gYXBwbGljYXRpb24gY29kZSwgYWx0aG91Z2ggbm90aGluZyBw
cmV2ZW50cyBpdAotICAgIC8vLyBmcm9tIGJlaW5nIHVzZWQgdGhhdCB3YXkuCi0gICAgLy8vIDwv
cmVtYXJrcz4KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFByb3RvUHJlY29uZGl0aW9ucwotICAg
IHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhyb3dzIGFuIEFyZ3VtZW50
TnVsbEV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbnVsbCwgb3RoZXJ3aXNlCi0gICAg
ICAgIC8vLyByZXR1cm4gdGhlIHZhbHVlIHRvIHRoZSBjYWxsZXIuCi0gICAgICAgIC8vLyA8L3N1
bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgVCBDaGVja05vdE51bGw8VD4oVCB2YWx1ZSwg
c3RyaW5nIG5hbWUpIHdoZXJlIFQgOiBjbGFzcwotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
QXJndW1lbnROdWxsRXhjZXB0aW9uKG5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAg
ICAvLy8gVGhyb3dzIGFuIEFyZ3VtZW50TnVsbEV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4gdmFsdWUg
aXMgbnVsbCwgb3RoZXJ3aXNlCi0gICAgICAgIC8vLyByZXR1cm4gdGhlIHZhbHVlIHRvIHRoZSBj
YWxsZXIuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4KLSAg
ICAgICAgLy8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byA8c2VlIGNyZWY9IkNoZWNrTm90TnVsbHtU
fShULCBzdHJpbmcpIi8+IGJ1dCB3aXRob3V0IHRoZSB0eXBlIHBhcmFtZXRlcgotICAgICAgICAv
Ly8gY29uc3RyYWludC4gSW4gbW9zdCBjYXNlcywgdGhlIGNvbnN0cmFpbnQgaXMgdXNlZnVsIHRv
IHByZXZlbnQgeW91IGZyb20gY2FsbGluZyBDaGVja05vdE51bGwKLSAgICAgICAgLy8vIHdpdGgg
YSB2YWx1ZSB0eXBlIC0gYnV0IGl0IGdldHMgaW4gdGhlIHdheSBpZiBlaXRoZXIgeW91IHdhbnQg
dG8gdXNlIGl0IHdpdGggYSBudWxsYWJsZQotICAgICAgICAvLy8gdmFsdWUgdHlwZSwgb3IgeW91
IHdhbnQgdG8gdXNlIGl0IHdpdGggYW4gdW5jb25zdHJhaW5lZCB0eXBlIHBhcmFtZXRlci4KLSAg
ICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIFQgQ2hlY2tOb3RO
dWxsVW5jb25zdHJhaW5lZDxUPihUIHZhbHVlLCBzdHJpbmcgbmFtZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbihuYW1lKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVm
L1JlZmxlY3Rpb24vRGVzY3JpcHRvci5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVm
bGVjdGlvbi9EZXNjcmlwdG9yLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTEz
OGRmZTkxMmNhYzJjNGE5YTc0YTZmNjM2OTBkNjVkMDZjZjQyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVm
bGVjdGlvbi9EZXNjcmlwdG9yLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNTQyMSArMCwwIEBACi0v
LyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElU
IQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bwotI3ByYWdtYSB3
YXJuaW5nIGRpc2FibGUgMTU5MSwgMDYxMiwgMzAyMQotI3JlZ2lvbiBEZXNpZ25lciBnZW5lcmF0
ZWQgY29kZQotCi11c2luZyBwYiA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmOwotdXNpbmcgcGJj
ID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuQ29sbGVjdGlvbnM7Ci11c2luZyBwYnIgPSBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uOwotdXNpbmcgc2NnID0gZ2xvYmFsOjpTeXN0
ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuUmVmbGVj
dGlvbiB7Ci0KLSAgLy8vIDxzdW1tYXJ5PkhvbGRlciBmb3IgcmVmbGVjdGlvbiBpbmZvcm1hdGlv
biBnZW5lcmF0ZWQgZnJvbSBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bzwvc3VtbWFy
eT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRy
aWJ1dGUoKV0KLSAgaW50ZXJuYWwgc3RhdGljIHBhcnRpYWwgY2xhc3MgRGVzY3JpcHRvclJlZmxl
Y3Rpb24gewotCi0gICAgI3JlZ2lvbiBEZXNjcmlwdG9yCi0gICAgLy8vIDxzdW1tYXJ5PkZpbGUg
ZGVzY3JpcHRvciBmb3IgZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG88L3N1bW1hcnk+
Ci0gICAgcHVibGljIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAg
ICAgZ2V0IHsgcmV0dXJuIGRlc2NyaXB0b3I7IH0KLSAgICB9Ci0gICAgcHJpdmF0ZSBzdGF0aWMg
cGJyOjpGaWxlRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAgc3RhdGljIERlc2NyaXB0b3JS
ZWZsZWN0aW9uKCkgewotICAgICAgYnl0ZVtdIGRlc2NyaXB0b3JEYXRhID0gZ2xvYmFsOjpTeXN0
ZW0uQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKAotICAgICAgICAgIHN0cmluZy5Db25jYXQoCi0g
ICAgICAgICAgICAiQ2lCbmIyOW5iR1V2Y0hKdmRHOWlkV1l2WkdWelkzSnBjSFJ2Y2k1d2NtOTBi
eElQWjI5dloyeGxMbkJ5IiwKLSAgICAgICAgICAgICJiM1J2WW5WbUlrY0tFVVpwYkdWRVpYTmpj
bWx3ZEc5eVUyVjBFaklLQkdacGJHVVlBU0FES0FzeUpDNW4iLAotICAgICAgICAgICAgImIyOW5i
R1V1Y0hKdmRHOWlkV1l1Um1sc1pVUmxjMk55YVhCMGIzSlFjbTkwYnlMYkF3b1RSbWxzWlVSbCIs
Ci0gICAgICAgICAgICAiYzJOeWFYQjBiM0pRY205MGJ4SU1DZ1J1WVcxbEdBRWdBU2dKRWc4S0Iz
QmhZMnRoWjJVWUFpQUJLQWtTIiwKLSAgICAgICAgICAgICJFZ29LWkdWd1pXNWtaVzVqZVJnRElB
TW9DUklaQ2hGd2RXSnNhV05mWkdWd1pXNWtaVzVqZVJnS0lBTW8iLAotICAgICAgICAgICAgIkJS
SVhDZzkzWldGclgyUmxjR1Z1WkdWdVkza1lDeUFES0FVU05nb01iV1Z6YzJGblpWOTBlWEJsR0FR
ZyIsCi0gICAgICAgICAgICAiQXlnTE1pQXVaMjl2WjJ4bExuQnliM1J2WW5WbUxrUmxjMk55YVhC
MGIzSlFjbTkwYnhJM0NnbGxiblZ0IiwKLSAgICAgICAgICAgICJYM1I1Y0dVWUJTQURLQXN5SkM1
bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Ulc1MWJVUmxjMk55YVhCMGIzSlEiLAotICAgICAgICAgICAg
ImNtOTBieEk0Q2dkelpYSjJhV05sR0FZZ0F5Z0xNaWN1WjI5dloyeGxMbkJ5YjNSdlluVm1MbE5s
Y25acCIsCi0gICAgICAgICAgICAiWTJWRVpYTmpjbWx3ZEc5eVVISnZkRzhTT0FvSlpYaDBaVzV6
YVc5dUdBY2dBeWdMTWlVdVoyOXZaMnhsIiwKLSAgICAgICAgICAgICJMbkJ5YjNSdlluVm1Ma1pw
Wld4a1JHVnpZM0pwY0hSdmNsQnliM1J2RWkwS0IyOXdkR2x2Ym5NWUNDQUIiLAotICAgICAgICAg
ICAgIktBc3lIQzVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVSbWxzWlU5d2RHbHZibk1TT1FvUWMyOTFj
bU5sWDJOdiIsCi0gICAgICAgICAgICAiWkdWZmFXNW1ieGdKSUFFb0N6SWZMbWR2YjJkc1pTNXdj
bTkwYjJKMVppNVRiM1Z5WTJWRGIyUmxTVzVtIiwKLSAgICAgICAgICAgICJieElPQ2daemVXNTBZ
WGdZRENBQktBa2k4QVFLRDBSbGMyTnlhWEIwYjNKUWNtOTBieElNQ2dSdVlXMWwiLAotICAgICAg
ICAgICAgIkdBRWdBU2dKRWpRS0JXWnBaV3hrR0FJZ0F5Z0xNaVV1WjI5dloyeGxMbkJ5YjNSdllu
Vm1Ma1pwWld4ayIsCi0gICAgICAgICAgICAiUkdWelkzSnBjSFJ2Y2xCeWIzUnZFamdLQ1dWNGRH
VnVjMmx2YmhnR0lBTW9DeklsTG1kdmIyZHNaUzV3IiwKLSAgICAgICAgICAgICJjbTkwYjJKMVpp
NUdhV1ZzWkVSbGMyTnlhWEIwYjNKUWNtOTBieEkxQ2d0dVpYTjBaV1JmZEhsd1pSZ0QiLAotICAg
ICAgICAgICAgIklBTW9DeklnTG1kdmIyZHNaUzV3Y205MGIySjFaaTVFWlhOamNtbHdkRzl5VUhK
dmRHOFNOd29KWlc1MSIsCi0gICAgICAgICAgICAiYlY5MGVYQmxHQVFnQXlnTE1pUXVaMjl2WjJ4
bExuQnliM1J2WW5WbUxrVnVkVzFFWlhOamNtbHdkRzl5IiwKLSAgICAgICAgICAgICJVSEp2ZEc4
U1NBb1BaWGgwWlc1emFXOXVYM0poYm1kbEdBVWdBeWdMTWk4dVoyOXZaMnhsTG5CeWIzUnYiLAot
ICAgICAgICAgICAgIlluVm1Ma1JsYzJOeWFYQjBiM0pRY205MGJ5NUZlSFJsYm5OcGIyNVNZVzVu
WlJJNUNncHZibVZ2Wmw5ayIsCi0gICAgICAgICAgICAiWldOc0dBZ2dBeWdMTWlVdVoyOXZaMnhs
TG5CeWIzUnZZblZtTGs5dVpXOW1SR1Z6WTNKcGNIUnZjbEJ5IiwKLSAgICAgICAgICAgICJiM1J2
RWpBS0IyOXdkR2x2Ym5NWUJ5QUJLQXN5SHk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VFdWemMyRm4i
LAotICAgICAgICAgICAgIlpVOXdkR2x2Ym5NU1Jnb09jbVZ6WlhKMlpXUmZjbUZ1WjJVWUNTQURL
QXN5TGk1bmIyOW5iR1V1Y0hKdiIsCi0gICAgICAgICAgICAiZEc5aWRXWXVSR1Z6WTNKcGNIUnZj
bEJ5YjNSdkxsSmxjMlZ5ZG1Wa1VtRnVaMlVTRlFvTmNtVnpaWEoyIiwKLSAgICAgICAgICAgICJa
V1JmYm1GdFpSZ0tJQU1vQ1Jvc0NnNUZlSFJsYm5OcGIyNVNZVzVuWlJJTkNnVnpkR0Z5ZEJnQklB
RW8iLAotICAgICAgICAgICAgIkJSSUxDZ05sYm1RWUFpQUJLQVVhS3dvTlVtVnpaWEoyWldSU1lX
NW5aUklOQ2dWemRHRnlkQmdCSUFFbyIsCi0gICAgICAgICAgICAiQlJJTENnTmxibVFZQWlBQktB
VWl2QVVLRkVacFpXeGtSR1Z6WTNKcGNIUnZjbEJ5YjNSdkVnd0tCRzVoIiwKLSAgICAgICAgICAg
ICJiV1VZQVNBQktBa1NEZ29HYm5WdFltVnlHQU1nQVNnRkVqb0tCV3hoWW1Wc0dBUWdBU2dPTWlz
dVoyOXYiLAotICAgICAgICAgICAgIloyeGxMbkJ5YjNSdlluVm1Ma1pwWld4a1JHVnpZM0pwY0hS
dmNsQnliM1J2TGt4aFltVnNFamdLQkhSNSIsCi0gICAgICAgICAgICAiY0dVWUJTQUJLQTR5S2k1
bmIyOW5iR1V1Y0hKdmRHOWlkV1l1Um1sbGJHUkVaWE5qY21sd2RHOXlVSEp2IiwKLSAgICAgICAg
ICAgICJkRzh1Vkhsd1pSSVJDZ2wwZVhCbFgyNWhiV1VZQmlBQktBa1NFQW9JWlhoMFpXNWtaV1VZ
QWlBQktBa1MiLAotICAgICAgICAgICAgIkZRb05aR1ZtWVhWc2RGOTJZV3gxWlJnSElBRW9DUklU
Q2d0dmJtVnZabDlwYm1SbGVCZ0pJQUVvQlJJUiIsCi0gICAgICAgICAgICAiQ2dscWMyOXVYMjVo
YldVWUNpQUJLQWtTTGdvSGIzQjBhVzl1Y3hnSUlBRW9DeklkTG1kdmIyZHNaUzV3IiwKLSAgICAg
ICAgICAgICJjbTkwYjJKMVppNUdhV1ZzWkU5d2RHbHZibk1pdGdJS0JGUjVjR1VTRHdvTFZGbFFS
VjlFVDFWQ1RFVVEiLAotICAgICAgICAgICAgIkFSSU9DZ3BVV1ZCRlgwWk1UMEZVRUFJU0Rnb0tW
RmxRUlY5SlRsUTJOQkFERWc4S0MxUlpVRVZmVlVsTyIsCi0gICAgICAgICAgICAiVkRZMEVBUVNE
Z29LVkZsUVJWOUpUbFF6TWhBRkVoQUtERlJaVUVWZlJrbFlSVVEyTkJBR0VoQUtERlJaIiwKLSAg
ICAgICAgICAgICJVRVZmUmtsWVJVUXpNaEFIRWcwS0NWUlpVRVZmUWs5UFRCQUlFZzhLQzFSWlVF
VmZVMVJTU1U1SEVBa1MiLAotICAgICAgICAgICAgIkRnb0tWRmxRUlY5SFVrOVZVQkFLRWhBS0RG
UlpVRVZmVFVWVFUwRkhSUkFMRWc0S0NsUlpVRVZmUWxsVSIsCi0gICAgICAgICAgICAiUlZNUURC
SVBDZ3RVV1ZCRlgxVkpUbFF6TWhBTkVnMEtDVlJaVUVWZlJVNVZUUkFPRWhFS0RWUlpVRVZmIiwK
LSAgICAgICAgICAgICJVMFpKV0VWRU16SVFEeElSQ2cxVVdWQkZYMU5HU1ZoRlJEWTBFQkFTRHdv
TFZGbFFSVjlUU1U1VU16SVEiLAotICAgICAgICAgICAgIkVSSVBDZ3RVV1ZCRlgxTkpUbFEyTkJB
U0lrTUtCVXhoWW1Wc0VoSUtEa3hCUWtWTVgwOVFWRWxQVGtGTSIsCi0gICAgICAgICAgICAiRUFF
U0Vnb09URUZDUlV4ZlVrVlJWVWxTUlVRUUFoSVNDZzVNUVVKRlRGOVNSVkJGUVZSRlJCQURJaVFL
IiwKLSAgICAgICAgICAgICJGRTl1Wlc5bVJHVnpZM0pwY0hSdmNsQnliM1J2RWd3S0JHNWhiV1VZ
QVNBQktBa2lqQUVLRTBWdWRXMUUiLAotICAgICAgICAgICAgIlpYTmpjbWx3ZEc5eVVISnZkRzhT
REFvRWJtRnRaUmdCSUFFb0NSSTRDZ1YyWVd4MVpSZ0NJQU1vQ3pJcCIsCi0gICAgICAgICAgICAi
TG1kdmIyZHNaUzV3Y205MGIySjFaaTVGYm5WdFZtRnNkV1ZFWlhOamNtbHdkRzl5VUhKdmRHOFNM
UW9IIiwKLSAgICAgICAgICAgICJiM0IwYVc5dWN4Z0RJQUVvQ3pJY0xtZHZiMmRzWlM1d2NtOTBi
MkoxWmk1RmJuVnRUM0IwYVc5dWN5SnMiLAotICAgICAgICAgICAgIkNoaEZiblZ0Vm1Gc2RXVkVa
WE5qY21sd2RHOXlVSEp2ZEc4U0RBb0VibUZ0WlJnQklBRW9DUklPQ2dadSIsCi0gICAgICAgICAg
ICAiZFcxaVpYSVlBaUFCS0FVU01nb0hiM0IwYVc5dWN4Z0RJQUVvQ3pJaExtZHZiMmRzWlM1d2Nt
OTBiMkoxIiwKLSAgICAgICAgICAgICJaaTVGYm5WdFZtRnNkV1ZQY0hScGIyNXpJcEFCQ2haVFpY
SjJhV05sUkdWelkzSnBjSFJ2Y2xCeWIzUnYiLAotICAgICAgICAgICAgIkVnd0tCRzVoYldVWUFT
QUJLQWtTTmdvR2JXVjBhRzlrR0FJZ0F5Z0xNaVl1WjI5dloyeGxMbkJ5YjNSdiIsCi0gICAgICAg
ICAgICAiWW5WbUxrMWxkR2h2WkVSbGMyTnlhWEIwYjNKUWNtOTBieEl3Q2dkdmNIUnBiMjV6R0FN
Z0FTZ0xNaDh1IiwKLSAgICAgICAgICAgICJaMjl2WjJ4bExuQnliM1J2WW5WbUxsTmxjblpwWTJW
UGNIUnBiMjV6SXNFQkNoVk5aWFJvYjJSRVpYTmoiLAotICAgICAgICAgICAgImNtbHdkRzl5VUhK
dmRHOFNEQW9FYm1GdFpSZ0JJQUVvQ1JJU0NncHBibkIxZEY5MGVYQmxHQUlnQVNnSiIsCi0gICAg
ICAgICAgICAiRWhNS0MyOTFkSEIxZEY5MGVYQmxHQU1nQVNnSkVpOEtCMjl3ZEdsdmJuTVlCQ0FC
S0FzeUhpNW5iMjluIiwKLSAgICAgICAgICAgICJiR1V1Y0hKdmRHOWlkV1l1VFdWMGFHOWtUM0Iw
YVc5dWN4SWZDaEJqYkdsbGJuUmZjM1J5WldGdGFXNW4iLAotICAgICAgICAgICAgIkdBVWdBU2dJ
T2dWbVlXeHpaUklmQ2hCelpYSjJaWEpmYzNSeVpXRnRhVzVuR0FZZ0FTZ0lPZ1ZtWVd4eiIsCi0g
ICAgICAgICAgICAiWlNLSEJRb0xSbWxzWlU5d2RHbHZibk1TRkFvTWFtRjJZVjl3WVdOcllXZGxH
QUVnQVNnSkVod0tGR3BoIiwKLSAgICAgICAgICAgICJkbUZmYjNWMFpYSmZZMnhoYzNOdVlXMWxH
QWdnQVNnSkVpSUtFMnBoZG1GZmJYVnNkR2x3YkdWZlptbHMiLAotICAgICAgICAgICAgIlpYTVlD
aUFCS0FnNkJXWmhiSE5sRWl3S0hXcGhkbUZmWjJWdVpYSmhkR1ZmWlhGMVlXeHpYMkZ1WkY5byIs
Ci0gICAgICAgICAgICAiWVhOb0dCUWdBU2dJT2dWbVlXeHpaUklsQ2hacVlYWmhYM04wY21sdVox
OWphR1ZqYTE5MWRHWTRHQnNnIiwKLSAgICAgICAgICAgICJBU2dJT2dWbVlXeHpaUkpHQ2d4dmNI
UnBiV2w2WlY5bWIzSVlDU0FCS0E0eUtTNW5iMjluYkdVdWNISnYiLAotICAgICAgICAgICAgImRH
OWlkV1l1Um1sc1pVOXdkR2x2Ym5NdVQzQjBhVzFwZW1WTmIyUmxPZ1ZUVUVWRlJCSVNDZ3BuYjE5
dyIsCi0gICAgICAgICAgICAiWVdOcllXZGxHQXNnQVNnSkVpSUtFMk5qWDJkbGJtVnlhV05mYzJW
eWRtbGpaWE1ZRUNBQktBZzZCV1poIiwKLSAgICAgICAgICAgICJiSE5sRWlRS0ZXcGhkbUZmWjJW
dVpYSnBZMTl6WlhKMmFXTmxjeGdSSUFFb0NEb0ZabUZzYzJVU0lnb1QiLAotICAgICAgICAgICAg
ImNIbGZaMlZ1WlhKcFkxOXpaWEoyYVdObGN4Z1NJQUVvQ0RvRlptRnNjMlVTR1FvS1pHVndjbVZq
WVhSbCIsCi0gICAgICAgICAgICAiWkJnWElBRW9DRG9GWm1Gc2MyVVNId29RWTJOZlpXNWhZbXhs
WDJGeVpXNWhjeGdmSUFFb0NEb0ZabUZzIiwKLSAgICAgICAgICAgICJjMlVTR1FvUmIySnFZMTlq
YkdGemMxOXdjbVZtYVhnWUpDQUJLQWtTR0FvUVkzTm9ZWEp3WDI1aGJXVnoiLAotICAgICAgICAg
ICAgImNHRmpaUmdsSUFFb0NSSkRDaFIxYm1sdWRHVnljSEpsZEdWa1gyOXdkR2x2YmhqbkJ5QURL
QXN5SkM1biIsCi0gICAgICAgICAgICAiYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNuQnla
WFJsWkU5d2RHbHZiaUk2Q2d4UGNIUnBiV2w2IiwKLSAgICAgICAgICAgICJaVTF2WkdVU0NRb0ZV
MUJGUlVRUUFSSU5DZ2xEVDBSRlgxTkpXa1VRQWhJUUNneE1TVlJGWDFKVlRsUkoiLAotICAgICAg
ICAgICAgIlRVVVFBeW9KQ09nSEVJQ0FnSUFDU2dRSUpoQW5JdVlCQ2c1TlpYTnpZV2RsVDNCMGFX
OXVjeEltQ2hkdCIsCi0gICAgICAgICAgICAiWlhOellXZGxYM05sZEY5M2FYSmxYMlp2Y20xaGRC
Z0JJQUVvQ0RvRlptRnNjMlVTTGdvZmJtOWZjM1JoIiwKLSAgICAgICAgICAgICJibVJoY21SZlpH
VnpZM0pwY0hSdmNsOWhZMk5sYzNOdmNoZ0NJQUVvQ0RvRlptRnNjMlVTR1FvS1pHVnciLAotICAg
ICAgICAgICAgImNtVmpZWFJsWkJnRElBRW9DRG9GWm1Gc2MyVVNFUW9KYldGd1gyVnVkSEo1R0Fj
Z0FTZ0lFa01LRkhWdSIsCi0gICAgICAgICAgICAiYVc1MFpYSndjbVYwWldSZmIzQjBhVzl1R09j
SElBTW9DeklrTG1kdmIyZHNaUzV3Y205MGIySjFaaTVWIiwKLSAgICAgICAgICAgICJibWx1ZEdW
eWNISmxkR1ZrVDNCMGFXOXVLZ2tJNkFjUWdJQ0FnQUlpbUFNS0RFWnBaV3hrVDNCMGFXOXUiLAot
ICAgICAgICAgICAgImN4STZDZ1ZqZEhsd1pSZ0JJQUVvRGpJakxtZHZiMmRzWlM1d2NtOTBiMkox
Wmk1R2FXVnNaRTl3ZEdsdiIsCi0gICAgICAgICAgICAiYm5NdVExUjVjR1U2QmxOVVVrbE9SeElP
Q2dad1lXTnJaV1FZQWlBQktBZ1NQd29HYW5OMGVYQmxHQVlnIiwKLSAgICAgICAgICAgICJBU2dP
TWlRdVoyOXZaMnhsTG5CeWIzUnZZblZtTGtacFpXeGtUM0IwYVc5dWN5NUtVMVI1Y0dVNkNVcFQi
LAotICAgICAgICAgICAgIlgwNVBVazFCVEJJVENnUnNZWHA1R0FVZ0FTZ0lPZ1ZtWVd4elpSSVpD
Z3BrWlhCeVpXTmhkR1ZrR0FNZyIsCi0gICAgICAgICAgICAiQVNnSU9nVm1ZV3h6WlJJVENnUjNa
V0ZyR0FvZ0FTZ0lPZ1ZtWVd4elpSSkRDaFIxYm1sdWRHVnljSEpsIiwKLSAgICAgICAgICAgICJk
R1ZrWDI5d2RHbHZiaGpuQnlBREtBc3lKQzVuYjI5bmJHVXVjSEp2ZEc5aWRXWXVWVzVwYm5SbGNu
QnkiLAotICAgICAgICAgICAgIlpYUmxaRTl3ZEdsdmJpSXZDZ1ZEVkhsd1pSSUtDZ1pUVkZKSlRr
Y1FBQklJQ2dSRFQxSkVFQUVTRUFvTSIsCi0gICAgICAgICAgICAiVTFSU1NVNUhYMUJKUlVORkVB
SWlOUW9HU2xOVWVYQmxFZzBLQ1VwVFgwNVBVazFCVEJBQUVnMEtDVXBUIiwKLSAgICAgICAgICAg
ICJYMU5VVWtsT1J4QUJFZzBLQ1VwVFgwNVZUVUpGVWhBQ0tna0k2QWNRZ0lDQWdBSWlqUUVLQzBW
dWRXMVAiLAotICAgICAgICAgICAgImNIUnBiMjV6RWhNS0MyRnNiRzkzWDJGc2FXRnpHQUlnQVNn
SUVoa0tDbVJsY0hKbFkyRjBaV1FZQXlBQiIsCi0gICAgICAgICAgICAiS0FnNkJXWmhiSE5sRWtN
S0ZIVnVhVzUwWlhKd2NtVjBaV1JmYjNCMGFXOXVHT2NISUFNb0N6SWtMbWR2IiwKLSAgICAgICAg
ICAgICJiMmRzWlM1d2NtOTBiMkoxWmk1VmJtbHVkR1Z5Y0hKbGRHVmtUM0IwYVc5dUtna0k2QWNR
Z0lDQWdBSWkiLAotICAgICAgICAgICAgImZRb1FSVzUxYlZaaGJIVmxUM0IwYVc5dWN4SVpDZ3Br
WlhCeVpXTmhkR1ZrR0FFZ0FTZ0lPZ1ZtWVd4eiIsCi0gICAgICAgICAgICAiWlJKRENoUjFibWx1
ZEdWeWNISmxkR1ZrWDI5d2RHbHZiaGpuQnlBREtBc3lKQzVuYjI5bmJHVXVjSEp2IiwKLSAgICAg
ICAgICAgICJkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdmJpb0pDT2dIRUlDQWdJQUNJ
bnNLRGxObGNuWnAiLAotICAgICAgICAgICAgIlkyVlBjSFJwYjI1ekVoa0tDbVJsY0hKbFkyRjBa
V1FZSVNBQktBZzZCV1poYkhObEVrTUtGSFZ1YVc1MCIsCi0gICAgICAgICAgICAiWlhKd2NtVjBa
V1JmYjNCMGFXOXVHT2NISUFNb0N6SWtMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVZibWx1IiwKLSAg
ICAgICAgICAgICJkR1Z5Y0hKbGRHVmtUM0IwYVc5dUtna0k2QWNRZ0lDQWdBSWllZ29OVFdWMGFH
OWtUM0IwYVc5dWN4SVoiLAotICAgICAgICAgICAgIkNncGtaWEJ5WldOaGRHVmtHQ0VnQVNnSU9n
Vm1ZV3h6WlJKRENoUjFibWx1ZEdWeWNISmxkR1ZrWDI5dyIsCi0gICAgICAgICAgICAiZEdsdmJo
am5CeUFES0FzeUpDNW5iMjluYkdVdWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3IiwK
LSAgICAgICAgICAgICJkR2x2YmlvSkNPZ0hFSUNBZ0lBQ0lwNENDaE5WYm1sdWRHVnljSEpsZEdW
a1QzQjBhVzl1RWpzS0JHNWgiLAotICAgICAgICAgICAgImJXVVlBaUFES0FzeUxTNW5iMjluYkdV
dWNISnZkRzlpZFdZdVZXNXBiblJsY25CeVpYUmxaRTl3ZEdsdiIsCi0gICAgICAgICAgICAiYmk1
T1lXMWxVR0Z5ZEJJWUNoQnBaR1Z1ZEdsbWFXVnlYM1poYkhWbEdBTWdBU2dKRWhvS0VuQnZjMmww
IiwKLSAgICAgICAgICAgICJhWFpsWDJsdWRGOTJZV3gxWlJnRUlBRW9CQklhQ2hKdVpXZGhkR2wy
WlY5cGJuUmZkbUZzZFdVWUJTQUIiLAotICAgICAgICAgICAgIktBTVNGQW9NWkc5MVlteGxYM1po
YkhWbEdBWWdBU2dCRWhRS0RITjBjbWx1WjE5MllXeDFaUmdISUFFbyIsCi0gICAgICAgICAgICAi
REJJWENnOWhaMmR5WldkaGRHVmZkbUZzZFdVWUNDQUJLQWthTXdvSVRtRnRaVkJoY25RU0VRb0pi
bUZ0IiwKLSAgICAgICAgICAgICJaVjl3WVhKMEdBRWdBaWdKRWhRS0RHbHpYMlY0ZEdWdWMybHZi
aGdDSUFJb0NDTFZBUW9PVTI5MWNtTmwiLAotICAgICAgICAgICAgIlEyOWtaVWx1Wm04U09nb0li
RzlqWVhScGIyNFlBU0FES0FzeUtDNW5iMjluYkdVdWNISnZkRzlpZFdZdSIsCi0gICAgICAgICAg
ICAiVTI5MWNtTmxRMjlrWlVsdVptOHVURzlqWVhScGIyNGFoZ0VLQ0V4dlkyRjBhVzl1RWhBS0JI
QmhkR2dZIiwKLSAgICAgICAgICAgICJBU0FES0FWQ0FoQUJFaEFLQkhOd1lXNFlBaUFES0FWQ0Fo
QUJFaGdLRUd4bFlXUnBibWRmWTI5dGJXVnUiLAotICAgICAgICAgICAgImRITVlBeUFCS0FrU0dR
b1JkSEpoYVd4cGJtZGZZMjl0YldWdWRITVlCQ0FCS0FrU0lRb1piR1ZoWkdsdSIsCi0gICAgICAg
ICAgICAiWjE5a1pYUmhZMmhsWkY5amIyMXRaVzUwY3hnR0lBTW9DU0tuQVFvUlIyVnVaWEpoZEdW
a1EyOWtaVWx1IiwKLSAgICAgICAgICAgICJabThTUVFvS1lXNXViM1JoZEdsdmJoZ0JJQU1vQ3pJ
dExtZHZiMmRzWlM1d2NtOTBiMkoxWmk1SFpXNWwiLAotICAgICAgICAgICAgImNtRjBaV1JEYjJS
bFNXNW1ieTVCYm01dmRHRjBhVzl1R2s4S0NrRnVibTkwWVhScGIyNFNFQW9FY0dGMCIsCi0gICAg
ICAgICAgICAiYUJnQklBTW9CVUlDRUFFU0V3b0xjMjkxY21ObFgyWnBiR1VZQWlBQktBa1NEUW9G
WW1WbmFXNFlBeUFCIiwKLSAgICAgICAgICAgICJLQVVTQ3dvRFpXNWtHQVFnQVNnRlFsZ0tFMk52
YlM1bmIyOW5iR1V1Y0hKdmRHOWlkV1pDRUVSbGMyTnkiLAotICAgICAgICAgICAgImFYQjBiM0pR
Y205MGIzTklBVm9LWkdWelkzSnBjSFJ2Y3FJQ0EwZFFRcW9DR2tkdmIyZHNaUzVRY205MCIsCi0g
ICAgICAgICAgICAiYjJKMVppNVNaV1pzWldOMGFXOXUiKSk7Ci0gICAgICBkZXNjcmlwdG9yID0g
cGJyOjpGaWxlRGVzY3JpcHRvci5Gcm9tR2VuZXJhdGVkQ29kZShkZXNjcmlwdG9yRGF0YSwKLSAg
ICAgICAgICBuZXcgcGJyOjpGaWxlRGVzY3JpcHRvcltdIHsgfSwKLSAgICAgICAgICBuZXcgcGJy
OjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyhudWxsLCBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5m
b1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZpbGVEZXNjcmlwdG9yU2V0KSwgZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWxlRGVzY3JpcHRvclNldC5QYXJzZXIs
IG5ld1tdeyAiRmlsZSIgfSwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJy
OjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVm
bGVjdGlvbi5GaWxlRGVzY3JpcHRvclByb3RvKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVm
bGVjdGlvbi5GaWxlRGVzY3JpcHRvclByb3RvLlBhcnNlciwgbmV3W117ICJOYW1lIiwgIlBhY2th
Z2UiLCAiRGVwZW5kZW5jeSIsICJQdWJsaWNEZXBlbmRlbmN5IiwgIldlYWtEZXBlbmRlbmN5Iiwg
Ik1lc3NhZ2VUeXBlIiwgIkVudW1UeXBlIiwgIlNlcnZpY2UiLCAiRXh0ZW5zaW9uIiwgIk9wdGlv
bnMiLCAiU291cmNlQ29kZUluZm8iLCAiU3ludGF4IiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAg
ICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRlc2NyaXB0b3JQcm90byksIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclByb3RvLlBhcnNlciwgbmV3W117ICJOYW1l
IiwgIkZpZWxkIiwgIkV4dGVuc2lvbiIsICJOZXN0ZWRUeXBlIiwgIkVudW1UeXBlIiwgIkV4dGVu
c2lvblJhbmdlIiwgIk9uZW9mRGVjbCIsICJPcHRpb25zIiwgIlJlc2VydmVkUmFuZ2UiLCAiUmVz
ZXJ2ZWROYW1lIiB9LCBudWxsLCBudWxsLCBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mb1td
IHsgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclByb3RvLlR5cGVzLkV4dGVuc2lvblJhbmdlKSwg
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUHJvdG8uVHlwZXMu
RXh0ZW5zaW9uUmFuZ2UuUGFyc2VyLCBuZXdbXXsgIlN0YXJ0IiwgIkVuZCIgfSwgbnVsbCwgbnVs
bCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBl
b2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUHJvdG8uVHlw
ZXMuUmVzZXJ2ZWRSYW5nZSksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVz
Y3JpcHRvclByb3RvLlR5cGVzLlJlc2VydmVkUmFuZ2UuUGFyc2VyLCBuZXdbXXsgIlN0YXJ0Iiwg
IkVuZCIgfSwgbnVsbCwgbnVsbCwgbnVsbCl9KSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVy
YXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9u
LkZpZWxkRGVzY3JpcHRvclByb3RvKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlv
bi5GaWVsZERlc2NyaXB0b3JQcm90by5QYXJzZXIsIG5ld1tdeyAiTmFtZSIsICJOdW1iZXIiLCAi
TGFiZWwiLCAiVHlwZSIsICJUeXBlTmFtZSIsICJFeHRlbmRlZSIsICJEZWZhdWx0VmFsdWUiLCAi
T25lb2ZJbmRleCIsICJKc29uTmFtZSIsICJPcHRpb25zIiB9LCBudWxsLCBuZXdbXXsgdHlwZW9m
KGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmllbGREZXNjcmlwdG9yUHJvdG8u
VHlwZXMuVHlwZSksIHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZp
ZWxkRGVzY3JpcHRvclByb3RvLlR5cGVzLkxhYmVsKSB9LCBudWxsKSwKLSAgICAgICAgICAgIG5l
dyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5SZWZsZWN0aW9uLk9uZW9mRGVzY3JpcHRvclByb3RvKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuUmVmbGVjdGlvbi5PbmVvZkRlc2NyaXB0b3JQcm90by5QYXJzZXIsIG5ld1tdeyAiTmFtZSIg
fSwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJU
eXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5FbnVtRGVz
Y3JpcHRvclByb3RvKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5FbnVtRGVz
Y3JpcHRvclByb3RvLlBhcnNlciwgbmV3W117ICJOYW1lIiwgIlZhbHVlIiwgIk9wdGlvbnMiIH0s
IG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlw
ZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRW51bVZhbHVl
RGVzY3JpcHRvclByb3RvKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5FbnVt
VmFsdWVEZXNjcmlwdG9yUHJvdG8uUGFyc2VyLCBuZXdbXXsgIk5hbWUiLCAiTnVtYmVyIiwgIk9w
dGlvbnMiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJh
dGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24u
U2VydmljZURlc2NyaXB0b3JQcm90byksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rp
b24uU2VydmljZURlc2NyaXB0b3JQcm90by5QYXJzZXIsIG5ld1tdeyAiTmFtZSIsICJNZXRob2Qi
LCAiT3B0aW9ucyIgfSwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpH
ZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVj
dGlvbi5NZXRob2REZXNjcmlwdG9yUHJvdG8pLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZs
ZWN0aW9uLk1ldGhvZERlc2NyaXB0b3JQcm90by5QYXJzZXIsIG5ld1tdeyAiTmFtZSIsICJJbnB1
dFR5cGUiLCAiT3V0cHV0VHlwZSIsICJPcHRpb25zIiwgIkNsaWVudFN0cmVhbWluZyIsICJTZXJ2
ZXJTdHJlYW1pbmciIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6
R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxl
Y3Rpb24uRmlsZU9wdGlvbnMpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZp
bGVPcHRpb25zLlBhcnNlciwgbmV3W117ICJKYXZhUGFja2FnZSIsICJKYXZhT3V0ZXJDbGFzc25h
bWUiLCAiSmF2YU11bHRpcGxlRmlsZXMiLCAiSmF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCIsICJK
YXZhU3RyaW5nQ2hlY2tVdGY4IiwgIk9wdGltaXplRm9yIiwgIkdvUGFja2FnZSIsICJDY0dlbmVy
aWNTZXJ2aWNlcyIsICJKYXZhR2VuZXJpY1NlcnZpY2VzIiwgIlB5R2VuZXJpY1NlcnZpY2VzIiwg
IkRlcHJlY2F0ZWQiLCAiQ2NFbmFibGVBcmVuYXMiLCAiT2JqY0NsYXNzUHJlZml4IiwgIkNzaGFy
cE5hbWVzcGFjZSIsICJVbmludGVycHJldGVkT3B0aW9uIiB9LCBudWxsLCBuZXdbXXsgdHlwZW9m
KGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmlsZU9wdGlvbnMuVHlwZXMuT3B0
aW1pemVNb2RlKSB9LCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5
cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLk1lc3NhZ2VP
cHRpb25zKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5NZXNzYWdlT3B0aW9u
cy5QYXJzZXIsIG5ld1tdeyAiTWVzc2FnZVNldFdpcmVGb3JtYXQiLCAiTm9TdGFuZGFyZERlc2Ny
aXB0b3JBY2Nlc3NvciIsICJEZXByZWNhdGVkIiwgIk1hcEVudHJ5IiwgIlVuaW50ZXJwcmV0ZWRP
cHRpb24iIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJh
dGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24u
RmllbGRPcHRpb25zKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWVsZE9w
dGlvbnMuUGFyc2VyLCBuZXdbXXsgIkN0eXBlIiwgIlBhY2tlZCIsICJKc3R5cGUiLCAiTGF6eSIs
ICJEZXByZWNhdGVkIiwgIldlYWsiLCAiVW5pbnRlcnByZXRlZE9wdGlvbiIgfSwgbnVsbCwgbmV3
W117IHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZpZWxkT3B0aW9u
cy5UeXBlcy5DVHlwZSksIHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9u
LkZpZWxkT3B0aW9ucy5UeXBlcy5KU1R5cGUpIH0sIG51bGwpLAotICAgICAgICAgICAgbmV3IHBi
cjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24uRW51bU9wdGlvbnMpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9u
LkVudW1PcHRpb25zLlBhcnNlciwgbmV3W117ICJBbGxvd0FsaWFzIiwgIkRlcHJlY2F0ZWQiLCAi
VW5pbnRlcnByZXRlZE9wdGlvbiIgfSwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBu
ZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuUmVmbGVjdGlvbi5FbnVtVmFsdWVPcHRpb25zKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
UmVmbGVjdGlvbi5FbnVtVmFsdWVPcHRpb25zLlBhcnNlciwgbmV3W117ICJEZXByZWNhdGVkIiwg
IlVuaW50ZXJwcmV0ZWRPcHRpb24iIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAg
bmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlJlZmxlY3Rpb24uU2VydmljZU9wdGlvbnMpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5S
ZWZsZWN0aW9uLlNlcnZpY2VPcHRpb25zLlBhcnNlciwgbmV3W117ICJEZXByZWNhdGVkIiwgIlVu
aW50ZXJwcmV0ZWRPcHRpb24iIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3
IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LlJlZmxlY3Rpb24uTWV0aG9kT3B0aW9ucyksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxl
Y3Rpb24uTWV0aG9kT3B0aW9ucy5QYXJzZXIsIG5ld1tdeyAiRGVwcmVjYXRlZCIsICJVbmludGVy
cHJldGVkT3B0aW9uIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6
OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZs
ZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24pLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZs
ZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24uUGFyc2VyLCBuZXdbXXsgIk5hbWUiLCAiSWRlbnRp
ZmllclZhbHVlIiwgIlBvc2l0aXZlSW50VmFsdWUiLCAiTmVnYXRpdmVJbnRWYWx1ZSIsICJEb3Vi
bGVWYWx1ZSIsICJTdHJpbmdWYWx1ZSIsICJBZ2dyZWdhdGVWYWx1ZSIgfSwgbnVsbCwgbnVsbCwg
bmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm9bXSB7IG5ldyBwYnI6OkdlbmVyYXRlZENsclR5
cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJw
cmV0ZWRPcHRpb24uVHlwZXMuTmFtZVBhcnQpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZs
ZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24uVHlwZXMuTmFtZVBhcnQuUGFyc2VyLCBuZXdbXXsg
Ik5hbWVQYXJ0XyIsICJJc0V4dGVuc2lvbiIgfSwgbnVsbCwgbnVsbCwgbnVsbCl9KSwKLSAgICAg
ICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlNvdXJjZUNvZGVJbmZvKSwgZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuUmVmbGVjdGlvbi5Tb3VyY2VDb2RlSW5mby5QYXJzZXIsIG5ld1tdeyAiTG9jYXRpb24i
IH0sIG51bGwsIG51bGwsIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvW10geyBuZXcgcGJy
OjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVm
bGVjdGlvbi5Tb3VyY2VDb2RlSW5mby5UeXBlcy5Mb2NhdGlvbiksIGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlJlZmxlY3Rpb24uU291cmNlQ29kZUluZm8uVHlwZXMuTG9jYXRpb24uUGFyc2VyLCBu
ZXdbXXsgIlBhdGgiLCAiU3BhbiIsICJMZWFkaW5nQ29tbWVudHMiLCAiVHJhaWxpbmdDb21tZW50
cyIsICJMZWFkaW5nRGV0YWNoZWRDb21tZW50cyIgfSwgbnVsbCwgbnVsbCwgbnVsbCl9KSwKLSAg
ICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkdlbmVyYXRlZENvZGVJbmZvKSwgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuUmVmbGVjdGlvbi5HZW5lcmF0ZWRDb2RlSW5mby5QYXJzZXIsIG5ld1tdeyAi
QW5ub3RhdGlvbiIgfSwgbnVsbCwgbnVsbCwgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm9b
XSB7IG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5SZWZsZWN0aW9uLkdlbmVyYXRlZENvZGVJbmZvLlR5cGVzLkFubm90YXRpb24pLCBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkdlbmVyYXRlZENvZGVJbmZvLlR5cGVz
LkFubm90YXRpb24uUGFyc2VyLCBuZXdbXXsgIlBhdGgiLCAiU291cmNlRmlsZSIsICJCZWdpbiIs
ICJFbmQiIH0sIG51bGwsIG51bGwsIG51bGwpfSkKLSAgICAgICAgICB9KSk7Ci0gICAgfQotICAg
ICNlbmRyZWdpb24KLQotICB9Ci0gICNyZWdpb24gTWVzc2FnZXMKLSAgLy8vIDxzdW1tYXJ5Pgot
ICAvLy8gIFRoZSBwcm90b2NvbCBjb21waWxlciBjYW4gb3V0cHV0IGEgRmlsZURlc2NyaXB0b3JT
ZXQgY29udGFpbmluZyB0aGUgLnByb3RvCi0gIC8vLyAgZmlsZXMgaXQgcGFyc2VzLgotICAvLy8g
PC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2Vy
Q29kZUF0dHJpYnV0ZSgpXQotICBpbnRlcm5hbCBzZWFsZWQgcGFydGlhbCBjbGFzcyBGaWxlRGVz
Y3JpcHRvclNldCA6IHBiOjpJTWVzc2FnZTxGaWxlRGVzY3JpcHRvclNldD4gewotICAgIHByaXZh
dGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPEZpbGVEZXNjcmlwdG9yU2V0PiBf
cGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPEZpbGVEZXNjcmlwdG9yU2V0PigoKSA9PiBu
ZXcgRmlsZURlc2NyaXB0b3JTZXQoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBh
cnNlcjxGaWxlRGVzY3JpcHRvclNldD4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0g
fQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3Ig
ewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24u
RGVzY3JpcHRvclJlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMF07IH0KLSAgICB9
Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIEZp
bGVEZXNjcmlwdG9yU2V0KCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAg
ICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBGaWxlRGVzY3Jp
cHRvclNldChGaWxlRGVzY3JpcHRvclNldCBvdGhlcikgOiB0aGlzKCkgewotICAgICAgZmlsZV8g
PSBvdGhlci5maWxlXy5DbG9uZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBGaWxlRGVzY3JpcHRv
clNldCBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgRmlsZURlc2NyaXB0b3JTZXQodGhpcyk7
Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJmaWxlIiBm
aWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBGaWxlRmllbGROdW1iZXIgPSAx
OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmlsZURlc2NyaXB0b3JQcm90bz4gX3JlcGVhdGVkX2Zp
bGVfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDEwLCBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZpbGVEZXNjcmlwdG9yUHJvdG8uUGFyc2VyKTsK
LSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5SZWZsZWN0aW9uLkZpbGVEZXNjcmlwdG9yUHJvdG8+IGZpbGVfID0gbmV3IHBiYzo6
UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZpbGVEZXNj
cmlwdG9yUHJvdG8+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZpbGVEZXNjcmlwdG9yUHJvdG8+IEZpbGUgewotICAg
ICAgZ2V0IHsgcmV0dXJuIGZpbGVfOyB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJv
b2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBG
aWxlRGVzY3JpcHRvclNldCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKEZpbGVE
ZXNjcmlwdG9yU2V0IG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBu
dWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJl
bmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0K
LSAgICAgIGlmKCFmaWxlXy5FcXVhbHMob3RoZXIuZmlsZV8pKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hD
b2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaGFzaCBePSBmaWxlXy5HZXRIYXNo
Q29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRl
IHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0Rp
YWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBmaWxlXy5Xcml0ZVRvKG91dHB1
dCwgX3JlcGVhdGVkX2ZpbGVfY29kZWMpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3Vs
YXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIHNpemUgKz0gZmlsZV8uQ2Fs
Y3VsYXRlU2l6ZShfcmVwZWF0ZWRfZmlsZV9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oRmlsZURlc2NyaXB0b3JTZXQgb3RoZXIp
IHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K
LSAgICAgIGZpbGVfLkFkZChvdGhlci5maWxlXyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
TWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsK
LSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3
aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExh
c3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAg
ICAgICAgICAgZmlsZV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9maWxlX2NvZGVj
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIERlc2NyaWJlcyBhIGNvbXBs
ZXRlIC5wcm90byBmaWxlLgotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlh
Z25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBpbnRlcm5hbCBzZWFs
ZWQgcGFydGlhbCBjbGFzcyBGaWxlRGVzY3JpcHRvclByb3RvIDogcGI6OklNZXNzYWdlPEZpbGVE
ZXNjcmlwdG9yUHJvdG8+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2Fn
ZVBhcnNlcjxGaWxlRGVzY3JpcHRvclByb3RvPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFy
c2VyPEZpbGVEZXNjcmlwdG9yUHJvdG8+KCgpID0+IG5ldyBGaWxlRGVzY3JpcHRvclByb3RvKCkp
OwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8RmlsZURlc2NyaXB0b3JQcm90
bz4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRp
YyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJu
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclJlZmxlY3Rpb24u
RGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VE
ZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBE
ZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIEZpbGVEZXNjcmlwdG9yUHJvdG8oKSB7
Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNv
bnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIEZpbGVEZXNjcmlwdG9yUHJvdG8oRmlsZURlc2Ny
aXB0b3JQcm90byBvdGhlcikgOiB0aGlzKCkgewotICAgICAgbmFtZV8gPSBvdGhlci5uYW1lXzsK
LSAgICAgIHBhY2thZ2VfID0gb3RoZXIucGFja2FnZV87Ci0gICAgICBkZXBlbmRlbmN5XyA9IG90
aGVyLmRlcGVuZGVuY3lfLkNsb25lKCk7Ci0gICAgICBwdWJsaWNEZXBlbmRlbmN5XyA9IG90aGVy
LnB1YmxpY0RlcGVuZGVuY3lfLkNsb25lKCk7Ci0gICAgICB3ZWFrRGVwZW5kZW5jeV8gPSBvdGhl
ci53ZWFrRGVwZW5kZW5jeV8uQ2xvbmUoKTsKLSAgICAgIG1lc3NhZ2VUeXBlXyA9IG90aGVyLm1l
c3NhZ2VUeXBlXy5DbG9uZSgpOwotICAgICAgZW51bVR5cGVfID0gb3RoZXIuZW51bVR5cGVfLkNs
b25lKCk7Ci0gICAgICBzZXJ2aWNlXyA9IG90aGVyLnNlcnZpY2VfLkNsb25lKCk7Ci0gICAgICBl
eHRlbnNpb25fID0gb3RoZXIuZXh0ZW5zaW9uXy5DbG9uZSgpOwotICAgICAgT3B0aW9ucyA9IG90
aGVyLm9wdGlvbnNfICE9IG51bGwgPyBvdGhlci5PcHRpb25zLkNsb25lKCkgOiBudWxsOwotICAg
ICAgU291cmNlQ29kZUluZm8gPSBvdGhlci5zb3VyY2VDb2RlSW5mb18gIT0gbnVsbCA/IG90aGVy
LlNvdXJjZUNvZGVJbmZvLkNsb25lKCkgOiBudWxsOwotICAgICAgc3ludGF4XyA9IG90aGVyLnN5
bnRheF87Ci0gICAgfQotCi0gICAgcHVibGljIEZpbGVEZXNjcmlwdG9yUHJvdG8gQ2xvbmUoKSB7
Ci0gICAgICByZXR1cm4gbmV3IEZpbGVEZXNjcmlwdG9yUHJvdG8odGhpcyk7Ci0gICAgfQotCi0g
ICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJuYW1lIiBmaWVsZC48L3N1bW1h
cnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBOYW1lRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZh
dGUgc3RyaW5nIG5hbWVfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgZmlsZSBu
YW1lLCByZWxhdGl2ZSB0byByb290IG9mIHNvdXJjZSB0cmVlCi0gICAgLy8vIDwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgc3RyaW5nIE5hbWUgewotICAgICAgZ2V0IHsgcmV0dXJuIG5hbWVfOyB9Ci0g
ICAgICBzZXQgewotICAgICAgICBuYW1lXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tO
b3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1h
cnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInBhY2thZ2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IFBhY2thZ2VGaWVsZE51bWJlciA9IDI7Ci0gICAgcHJpdmF0ZSBzdHJp
bmcgcGFja2FnZV8gPSAiIjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBlLmcuICJmb28i
LCAiZm9vLmJhciIsIGV0Yy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdHJpbmcg
UGFja2FnZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gcGFja2FnZV87IH0KLSAgICAgIHNldCB7Ci0g
ICAgICAgIHBhY2thZ2VfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFs
dWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBu
dW1iZXIgZm9yIHRoZSAiZGVwZW5kZW5jeSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgRGVwZW5kZW5jeUZpZWxkTnVtYmVyID0gMzsKLSAgICBwcml2YXRlIHN0YXRpYyBy
ZWFkb25seSBwYjo6RmllbGRDb2RlYzxzdHJpbmc+IF9yZXBlYXRlZF9kZXBlbmRlbmN5X2NvZGVj
Ci0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RyaW5nKDI2KTsKLSAgICBwcml2YXRlIHJl
YWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+IGRlcGVuZGVuY3lfID0gbmV3IHBiYzo6
UmVwZWF0ZWRGaWVsZDxzdHJpbmc+KCk7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgTmFt
ZXMgb2YgZmlsZXMgaW1wb3J0ZWQgYnkgdGhpcyBmaWxlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+IERlcGVuZGVuY3kgewotICAgICAg
Z2V0IHsgcmV0dXJuIGRlcGVuZGVuY3lfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZp
ZWxkIG51bWJlciBmb3IgdGhlICJwdWJsaWNfZGVwZW5kZW5jeSIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgUHVibGljRGVwZW5kZW5jeUZpZWxkTnVtYmVyID0gMTA7Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8aW50PiBfcmVwZWF0ZWRf
cHVibGljRGVwZW5kZW5jeV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckludDMy
KDgwKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+IHB1Ymxp
Y0RlcGVuZGVuY3lfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+KCk7Ci0gICAgLy8vIDxz
dW1tYXJ5PgotICAgIC8vLyAgSW5kZXhlcyBvZiB0aGUgcHVibGljIGltcG9ydGVkIGZpbGVzIGlu
IHRoZSBkZXBlbmRlbmN5IGxpc3QgYWJvdmUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgcGJjOjpSZXBlYXRlZEZpZWxkPGludD4gUHVibGljRGVwZW5kZW5jeSB7Ci0gICAgICBnZXQg
eyByZXR1cm4gcHVibGljRGVwZW5kZW5jeV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+
RmllbGQgbnVtYmVyIGZvciB0aGUgIndlYWtfZGVwZW5kZW5jeSIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgV2Vha0RlcGVuZGVuY3lGaWVsZE51bWJlciA9IDExOwotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGludD4gX3JlcGVhdGVkX3dl
YWtEZXBlbmRlbmN5X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9ySW50MzIoODgp
OwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGludD4gd2Vha0RlcGVu
ZGVuY3lfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+KCk7Ci0gICAgLy8vIDxzdW1tYXJ5
PgotICAgIC8vLyAgSW5kZXhlcyBvZiB0aGUgd2VhayBpbXBvcnRlZCBmaWxlcyBpbiB0aGUgZGVw
ZW5kZW5jeSBsaXN0LgotICAgIC8vLyAgRm9yIEdvb2dsZS1pbnRlcm5hbCBtaWdyYXRpb24gb25s
eS4gRG8gbm90IHVzZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBwYmM6OlJlcGVh
dGVkRmllbGQ8aW50PiBXZWFrRGVwZW5kZW5jeSB7Ci0gICAgICBnZXQgeyByZXR1cm4gd2Vha0Rl
cGVuZGVuY3lfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3Ig
dGhlICJtZXNzYWdlX3R5cGUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50
IE1lc3NhZ2VUeXBlRmllbGROdW1iZXIgPSA0OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5
IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3Jp
cHRvclByb3RvPiBfcmVwZWF0ZWRfbWVzc2FnZVR5cGVfY29kZWMKLSAgICAgICAgPSBwYjo6Rmll
bGRDb2RlYy5Gb3JNZXNzYWdlKDM0LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9u
LkRlc2NyaXB0b3JQcm90by5QYXJzZXIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBl
YXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclBy
b3RvPiBtZXNzYWdlVHlwZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclByb3RvPigpOwotICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAvLy8gIEFsbCB0b3AtbGV2ZWwgZGVmaW5pdGlvbnMgaW4gdGhpcyBmaWxlLgotICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRlc2NyaXB0b3JQcm90bz4gTWVzc2FnZVR5cGUgewot
ICAgICAgZ2V0IHsgcmV0dXJuIG1lc3NhZ2VUeXBlXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3Vt
bWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZW51bV90eXBlIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBFbnVtVHlwZUZpZWxkTnVtYmVyID0gNTsKLSAgICBwcml2YXRl
IHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5S
ZWZsZWN0aW9uLkVudW1EZXNjcmlwdG9yUHJvdG8+IF9yZXBlYXRlZF9lbnVtVHlwZV9jb2RlYwot
ICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoNDIsIGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlJlZmxlY3Rpb24uRW51bURlc2NyaXB0b3JQcm90by5QYXJzZXIpOwotICAgIHByaXZh
dGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24uRW51bURlc2NyaXB0b3JQcm90bz4gZW51bVR5cGVfID0gbmV3IHBiYzo6UmVwZWF0
ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkVudW1EZXNjcmlwdG9y
UHJvdG8+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5SZWZsZWN0aW9uLkVudW1EZXNjcmlwdG9yUHJvdG8+IEVudW1UeXBlIHsKLSAgICAg
IGdldCB7IHJldHVybiBlbnVtVHlwZV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgInNlcnZpY2UiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
Y29uc3QgaW50IFNlcnZpY2VGaWVsZE51bWJlciA9IDY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVh
ZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5T
ZXJ2aWNlRGVzY3JpcHRvclByb3RvPiBfcmVwZWF0ZWRfc2VydmljZV9jb2RlYwotICAgICAgICA9
IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoNTAsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24uU2VydmljZURlc2NyaXB0b3JQcm90by5QYXJzZXIpOwotICAgIHByaXZhdGUgcmVh
ZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rp
b24uU2VydmljZURlc2NyaXB0b3JQcm90bz4gc2VydmljZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZp
ZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uU2VydmljZURlc2NyaXB0b3JQ
cm90bz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlJlZmxlY3Rpb24uU2VydmljZURlc2NyaXB0b3JQcm90bz4gU2VydmljZSB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gc2VydmljZV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgImV4dGVuc2lvbiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgRXh0ZW5zaW9uRmllbGROdW1iZXIgPSA3OwotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rp
b24uRmllbGREZXNjcmlwdG9yUHJvdG8+IF9yZXBlYXRlZF9leHRlbnNpb25fY29kZWMKLSAgICAg
ICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDU4LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5SZWZsZWN0aW9uLkZpZWxkRGVzY3JpcHRvclByb3RvLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSBy
ZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVj
dGlvbi5GaWVsZERlc2NyaXB0b3JQcm90bz4gZXh0ZW5zaW9uXyA9IG5ldyBwYmM6OlJlcGVhdGVk
RmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWVsZERlc2NyaXB0b3JQ
cm90bz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlJlZmxlY3Rpb24uRmllbGREZXNjcmlwdG9yUHJvdG8+IEV4dGVuc2lvbiB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gZXh0ZW5zaW9uXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW9ucyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgT3B0aW9uc0ZpZWxkTnVtYmVyID0gODsKLSAgICBwcml2YXRlIGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmlsZU9wdGlvbnMgb3B0aW9uc187Ci0gICAgcHVi
bGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmlsZU9wdGlvbnMgT3B0aW9u
cyB7Ci0gICAgICBnZXQgeyByZXR1cm4gb3B0aW9uc187IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IG9wdGlvbnNfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZp
ZWxkIG51bWJlciBmb3IgdGhlICJzb3VyY2VfY29kZV9pbmZvIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBTb3VyY2VDb2RlSW5mb0ZpZWxkTnVtYmVyID0gOTsKLSAgICBw
cml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uU291cmNlQ29kZUluZm8g
c291cmNlQ29kZUluZm9fOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFRoaXMgZmllbGQg
Y29udGFpbnMgb3B0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBj
b2RlLgotICAgIC8vLyAgWW91IG1heSBzYWZlbHkgcmVtb3ZlIHRoaXMgZW50aXJlIGZpZWxkIHdp
dGhvdXQgaGFybWluZyBydW50aW1lCi0gICAgLy8vICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkZXNj
cmlwdG9ycyAtLSB0aGUgaW5mb3JtYXRpb24gaXMgbmVlZGVkIG9ubHkgYnkKLSAgICAvLy8gIGRl
dmVsb3BtZW50IHRvb2xzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uU291cmNlQ29kZUluZm8gU291cmNlQ29kZUluZm8g
ewotICAgICAgZ2V0IHsgcmV0dXJuIHNvdXJjZUNvZGVJbmZvXzsgfQotICAgICAgc2V0IHsKLSAg
ICAgICAgc291cmNlQ29kZUluZm9fID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzeW50YXgiIGZpZWxkLjwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgY29uc3QgaW50IFN5bnRheEZpZWxkTnVtYmVyID0gMTI7Ci0gICAgcHJpdmF0
ZSBzdHJpbmcgc3ludGF4XyA9ICIiOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFRoZSBz
eW50YXggb2YgdGhlIHByb3RvIGZpbGUuCi0gICAgLy8vICBUaGUgc3VwcG9ydGVkIHZhbHVlcyBh
cmUgInByb3RvMiIgYW5kICJwcm90bzMiLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGlj
IHN0cmluZyBTeW50YXggewotICAgICAgZ2V0IHsgcmV0dXJuIHN5bnRheF87IH0KLSAgICAgIHNl
dCB7Ci0gICAgICAgIHN5bnRheF8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVs
bCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRl
IGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBh
cyBGaWxlRGVzY3JpcHRvclByb3RvKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMo
RmlsZURlc2NyaXB0b3JQcm90byBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhv
dGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYg
KFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICB9Ci0gICAgICBpZiAoTmFtZSAhPSBvdGhlci5OYW1lKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICBpZiAoUGFja2FnZSAhPSBvdGhlci5QYWNrYWdlKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZigh
ZGVwZW5kZW5jeV8uRXF1YWxzKG90aGVyLmRlcGVuZGVuY3lfKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgaWYoIXB1YmxpY0RlcGVuZGVuY3lfLkVxdWFscyhvdGhlci5wdWJsaWNEZXBlbmRlbmN5Xykp
IHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCF3ZWFrRGVwZW5kZW5jeV8uRXF1YWxzKG90aGVyLndl
YWtEZXBlbmRlbmN5XykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFtZXNzYWdlVHlwZV8uRXF1
YWxzKG90aGVyLm1lc3NhZ2VUeXBlXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFlbnVtVHlw
ZV8uRXF1YWxzKG90aGVyLmVudW1UeXBlXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFzZXJ2
aWNlXy5FcXVhbHMob3RoZXIuc2VydmljZV8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighZXh0
ZW5zaW9uXy5FcXVhbHMob3RoZXIuZXh0ZW5zaW9uXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlm
ICghb2JqZWN0LkVxdWFscyhPcHRpb25zLCBvdGhlci5PcHRpb25zKSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKFNvdXJjZUNvZGVJbmZvLCBvdGhlci5Tb3VyY2VDb2Rl
SW5mbykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChTeW50YXggIT0gb3RoZXIuU3ludGF4KSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3Zl
cnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYg
KE5hbWUuTGVuZ3RoICE9IDApIGhhc2ggXj0gTmFtZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYg
KFBhY2thZ2UuTGVuZ3RoICE9IDApIGhhc2ggXj0gUGFja2FnZS5HZXRIYXNoQ29kZSgpOwotICAg
ICAgaGFzaCBePSBkZXBlbmRlbmN5Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBwdWJs
aWNEZXBlbmRlbmN5Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSB3ZWFrRGVwZW5kZW5j
eV8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gbWVzc2FnZVR5cGVfLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICBoYXNoIF49IGVudW1UeXBlXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBe
PSBzZXJ2aWNlXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBleHRlbnNpb25fLkdldEhh
c2hDb2RlKCk7Ci0gICAgICBpZiAob3B0aW9uc18gIT0gbnVsbCkgaGFzaCBePSBPcHRpb25zLkdl
dEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoc291cmNlQ29kZUluZm9fICE9IG51bGwpIGhhc2ggXj0g
U291cmNlQ29kZUluZm8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChTeW50YXguTGVuZ3RoICE9
IDApIGhhc2ggXj0gU3ludGF4LkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0
dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsK
LSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1Rh
ZygxMCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhOYW1lKTsKLSAgICAgIH0KLSAgICAg
IGlmIChQYWNrYWdlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygx
OCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhQYWNrYWdlKTsKLSAgICAgIH0KLSAgICAg
IGRlcGVuZGVuY3lfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfZGVwZW5kZW5jeV9jb2RlYyk7
Ci0gICAgICBtZXNzYWdlVHlwZV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9tZXNzYWdlVHlw
ZV9jb2RlYyk7Ci0gICAgICBlbnVtVHlwZV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9lbnVt
VHlwZV9jb2RlYyk7Ci0gICAgICBzZXJ2aWNlXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3Nl
cnZpY2VfY29kZWMpOwotICAgICAgZXh0ZW5zaW9uXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVk
X2V4dGVuc2lvbl9jb2RlYyk7Ci0gICAgICBpZiAob3B0aW9uc18gIT0gbnVsbCkgewotICAgICAg
ICBvdXRwdXQuV3JpdGVSYXdUYWcoNjYpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKE9w
dGlvbnMpOwotICAgICAgfQotICAgICAgaWYgKHNvdXJjZUNvZGVJbmZvXyAhPSBudWxsKSB7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg3NCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3Nh
Z2UoU291cmNlQ29kZUluZm8pOwotICAgICAgfQotICAgICAgcHVibGljRGVwZW5kZW5jeV8uV3Jp
dGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9wdWJsaWNEZXBlbmRlbmN5X2NvZGVjKTsKLSAgICAgIHdl
YWtEZXBlbmRlbmN5Xy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3dlYWtEZXBlbmRlbmN5X2Nv
ZGVjKTsKLSAgICAgIGlmIChTeW50YXguTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0Lldy
aXRlUmF3VGFnKDk4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKFN5bnRheCk7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50
IHNpemUgPSAwOwotICAgICAgaWYgKE5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSAr
PSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKE5hbWUpOwotICAg
ICAgfQotICAgICAgaWYgKFBhY2thZ2UuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAx
ICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKFBhY2thZ2UpOwotICAg
ICAgfQotICAgICAgc2l6ZSArPSBkZXBlbmRlbmN5Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9k
ZXBlbmRlbmN5X2NvZGVjKTsKLSAgICAgIHNpemUgKz0gcHVibGljRGVwZW5kZW5jeV8uQ2FsY3Vs
YXRlU2l6ZShfcmVwZWF0ZWRfcHVibGljRGVwZW5kZW5jeV9jb2RlYyk7Ci0gICAgICBzaXplICs9
IHdlYWtEZXBlbmRlbmN5Xy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF93ZWFrRGVwZW5kZW5jeV9j
b2RlYyk7Ci0gICAgICBzaXplICs9IG1lc3NhZ2VUeXBlXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRl
ZF9tZXNzYWdlVHlwZV9jb2RlYyk7Ci0gICAgICBzaXplICs9IGVudW1UeXBlXy5DYWxjdWxhdGVT
aXplKF9yZXBlYXRlZF9lbnVtVHlwZV9jb2RlYyk7Ci0gICAgICBzaXplICs9IHNlcnZpY2VfLkNh
bGN1bGF0ZVNpemUoX3JlcGVhdGVkX3NlcnZpY2VfY29kZWMpOwotICAgICAgc2l6ZSArPSBleHRl
bnNpb25fLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX2V4dGVuc2lvbl9jb2RlYyk7Ci0gICAgICBp
ZiAob3B0aW9uc18gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRw
dXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKE9wdGlvbnMpOwotICAgICAgfQotICAgICAgaWYg
KHNvdXJjZUNvZGVJbmZvXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2Rl
ZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoU291cmNlQ29kZUluZm8pOwotICAgICAg
fQotICAgICAgaWYgKFN5bnRheC5MZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoU3ludGF4KTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShG
aWxlRGVzY3JpcHRvclByb3RvIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTmFtZS5MZW5ndGggIT0g
MCkgewotICAgICAgICBOYW1lID0gb3RoZXIuTmFtZTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhl
ci5QYWNrYWdlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIFBhY2thZ2UgPSBvdGhlci5QYWNrYWdl
OwotICAgICAgfQotICAgICAgZGVwZW5kZW5jeV8uQWRkKG90aGVyLmRlcGVuZGVuY3lfKTsKLSAg
ICAgIHB1YmxpY0RlcGVuZGVuY3lfLkFkZChvdGhlci5wdWJsaWNEZXBlbmRlbmN5Xyk7Ci0gICAg
ICB3ZWFrRGVwZW5kZW5jeV8uQWRkKG90aGVyLndlYWtEZXBlbmRlbmN5Xyk7Ci0gICAgICBtZXNz
YWdlVHlwZV8uQWRkKG90aGVyLm1lc3NhZ2VUeXBlXyk7Ci0gICAgICBlbnVtVHlwZV8uQWRkKG90
aGVyLmVudW1UeXBlXyk7Ci0gICAgICBzZXJ2aWNlXy5BZGQob3RoZXIuc2VydmljZV8pOwotICAg
ICAgZXh0ZW5zaW9uXy5BZGQob3RoZXIuZXh0ZW5zaW9uXyk7Ci0gICAgICBpZiAob3RoZXIub3B0
aW9uc18gIT0gbnVsbCkgewotICAgICAgICBpZiAob3B0aW9uc18gPT0gbnVsbCkgewotICAgICAg
ICAgIG9wdGlvbnNfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmls
ZU9wdGlvbnMoKTsKLSAgICAgICAgfQotICAgICAgICBPcHRpb25zLk1lcmdlRnJvbShvdGhlci5P
cHRpb25zKTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5zb3VyY2VDb2RlSW5mb18gIT0gbnVs
bCkgewotICAgICAgICBpZiAoc291cmNlQ29kZUluZm9fID09IG51bGwpIHsKLSAgICAgICAgICBz
b3VyY2VDb2RlSW5mb18gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5T
b3VyY2VDb2RlSW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIFNvdXJjZUNvZGVJbmZvLk1lcmdl
RnJvbShvdGhlci5Tb3VyY2VDb2RlSW5mbyk7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuU3lu
dGF4Lkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIFN5bnRheCA9IG90aGVyLlN5bnRheDsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJl
YW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5S
ZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIDEwOiB7Ci0gICAgICAgICAgICBOYW1lID0gaW5wdXQuUmVhZFN0
cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2Ug
MTg6IHsKLSAgICAgICAgICAgIFBhY2thZ2UgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNjogewotICAgICAgICAg
ICAgZGVwZW5kZW5jeV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9kZXBlbmRlbmN5
X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl
IDM0OiB7Ci0gICAgICAgICAgICBtZXNzYWdlVHlwZV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9y
ZXBlYXRlZF9tZXNzYWdlVHlwZV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgY2FzZSA0MjogewotICAgICAgICAgICAgZW51bVR5cGVfLkFkZEVudHJp
ZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfZW51bVR5cGVfY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNTA6IHsKLSAgICAgICAgICAgIHNlcnZp
Y2VfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfc2VydmljZV9jb2RlYyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA1ODogewotICAgICAg
ICAgICAgZXh0ZW5zaW9uXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX2V4dGVuc2lv
bl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSA2NjogewotICAgICAgICAgICAgaWYgKG9wdGlvbnNfID09IG51bGwpIHsKLSAgICAgICAgICAg
ICAgb3B0aW9uc18gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWxl
T3B0aW9ucygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2Uo
b3B0aW9uc18pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh
c2UgNzQ6IHsKLSAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlSW5mb18gPT0gbnVsbCkgewotICAg
ICAgICAgICAgICBzb3VyY2VDb2RlSW5mb18gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
UmVmbGVjdGlvbi5Tb3VyY2VDb2RlSW5mbygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aW5wdXQuUmVhZE1lc3NhZ2Uoc291cmNlQ29kZUluZm9fKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDgyOgotICAgICAgICAgIGNhc2UgODA6IHsKLSAg
ICAgICAgICAgIHB1YmxpY0RlcGVuZGVuY3lfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0
ZWRfcHVibGljRGVwZW5kZW5jeV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgY2FzZSA5MDoKLSAgICAgICAgICBjYXNlIDg4OiB7Ci0gICAgICAgICAg
ICB3ZWFrRGVwZW5kZW5jeV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF93ZWFrRGVw
ZW5kZW5jeV9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgY2FzZSA5ODogewotICAgICAgICAgICAgU3ludGF4ID0gaW5wdXQuUmVhZFN0cmluZygpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgRGVzY3JpYmVzIGEgbWVzc2FnZSB0
eXBlLgotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVi
dWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBpbnRlcm5hbCBzZWFsZWQgcGFydGlhbCBj
bGFzcyBEZXNjcmlwdG9yUHJvdG8gOiBwYjo6SU1lc3NhZ2U8RGVzY3JpcHRvclByb3RvPiB7Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8RGVzY3JpcHRvclBy
b3RvPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPERlc2NyaXB0b3JQcm90bz4oKCkg
PT4gbmV3IERlc2NyaXB0b3JQcm90bygpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdl
UGFyc2VyPERlc2NyaXB0b3JQcm90bz4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0g
fQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3Ig
ewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24u
RGVzY3JpcHRvclJlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMl07IH0KLSAgICB9
Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIERl
c2NyaXB0b3JQcm90bygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAg
cGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgRGVzY3JpcHRvclBy
b3RvKERlc2NyaXB0b3JQcm90byBvdGhlcikgOiB0aGlzKCkgewotICAgICAgbmFtZV8gPSBvdGhl
ci5uYW1lXzsKLSAgICAgIGZpZWxkXyA9IG90aGVyLmZpZWxkXy5DbG9uZSgpOwotICAgICAgZXh0
ZW5zaW9uXyA9IG90aGVyLmV4dGVuc2lvbl8uQ2xvbmUoKTsKLSAgICAgIG5lc3RlZFR5cGVfID0g
b3RoZXIubmVzdGVkVHlwZV8uQ2xvbmUoKTsKLSAgICAgIGVudW1UeXBlXyA9IG90aGVyLmVudW1U
eXBlXy5DbG9uZSgpOwotICAgICAgZXh0ZW5zaW9uUmFuZ2VfID0gb3RoZXIuZXh0ZW5zaW9uUmFu
Z2VfLkNsb25lKCk7Ci0gICAgICBvbmVvZkRlY2xfID0gb3RoZXIub25lb2ZEZWNsXy5DbG9uZSgp
OwotICAgICAgT3B0aW9ucyA9IG90aGVyLm9wdGlvbnNfICE9IG51bGwgPyBvdGhlci5PcHRpb25z
LkNsb25lKCkgOiBudWxsOwotICAgICAgcmVzZXJ2ZWRSYW5nZV8gPSBvdGhlci5yZXNlcnZlZFJh
bmdlXy5DbG9uZSgpOwotICAgICAgcmVzZXJ2ZWROYW1lXyA9IG90aGVyLnJlc2VydmVkTmFtZV8u
Q2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGVzY3JpcHRvclByb3RvIENsb25lKCkgewot
ICAgICAgcmV0dXJuIG5ldyBEZXNjcmlwdG9yUHJvdG8odGhpcyk7Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJuYW1lIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBOYW1lRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgc3Ry
aW5nIG5hbWVfID0gIiI7Ci0gICAgcHVibGljIHN0cmluZyBOYW1lIHsKLSAgICAgIGdldCB7IHJl
dHVybiBuYW1lXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgbmFtZV8gPSBwYjo6UHJvdG9QcmVj
b25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJmaWVsZCIgZmllbGQuPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRmllbGRGaWVsZE51bWJlciA9IDI7Ci0gICAg
cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuUmVmbGVjdGlvbi5GaWVsZERlc2NyaXB0b3JQcm90bz4gX3JlcGVhdGVkX2ZpZWxkX2Nv
ZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgxOCwgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWVsZERlc2NyaXB0b3JQcm90by5QYXJzZXIpOwotICAg
IHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlJlZmxlY3Rpb24uRmllbGREZXNjcmlwdG9yUHJvdG8+IGZpZWxkXyA9IG5ldyBwYmM6OlJl
cGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWVsZERlc2Ny
aXB0b3JQcm90bz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmllbGREZXNjcmlwdG9yUHJvdG8+IEZpZWxkIHsKLSAg
ICAgIGdldCB7IHJldHVybiBmaWVsZF87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgImV4dGVuc2lvbiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgRXh0ZW5zaW9uRmllbGROdW1iZXIgPSA2OwotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rp
b24uRmllbGREZXNjcmlwdG9yUHJvdG8+IF9yZXBlYXRlZF9leHRlbnNpb25fY29kZWMKLSAgICAg
ICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDUwLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5SZWZsZWN0aW9uLkZpZWxkRGVzY3JpcHRvclByb3RvLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSBy
ZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVj
dGlvbi5GaWVsZERlc2NyaXB0b3JQcm90bz4gZXh0ZW5zaW9uXyA9IG5ldyBwYmM6OlJlcGVhdGVk
RmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWVsZERlc2NyaXB0b3JQ
cm90bz4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLlJlZmxlY3Rpb24uRmllbGREZXNjcmlwdG9yUHJvdG8+IEV4dGVuc2lvbiB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gZXh0ZW5zaW9uXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAibmVzdGVkX3R5cGUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IE5lc3RlZFR5cGVGaWVsZE51bWJlciA9IDM7Ci0gICAgcHJpdmF0ZSBz
dGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVm
bGVjdGlvbi5EZXNjcmlwdG9yUHJvdG8+IF9yZXBlYXRlZF9uZXN0ZWRUeXBlX2NvZGVjCi0gICAg
ICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgyNiwgZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUHJvdG8uUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRv
bmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9u
LkRlc2NyaXB0b3JQcm90bz4gbmVzdGVkVHlwZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclByb3RvPigpOwotICAg
IHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVj
dGlvbi5EZXNjcmlwdG9yUHJvdG8+IE5lc3RlZFR5cGUgewotICAgICAgZ2V0IHsgcmV0dXJuIG5l
c3RlZFR5cGVfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3Ig
dGhlICJlbnVtX3R5cGUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEVu
dW1UeXBlRmllbGROdW1iZXIgPSA0OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpG
aWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRW51bURlc2NyaXB0
b3JQcm90bz4gX3JlcGVhdGVkX2VudW1UeXBlX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29k
ZWMuRm9yTWVzc2FnZSgzNCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5FbnVt
RGVzY3JpcHRvclByb3RvLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVh
dGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5FbnVtRGVzY3JpcHRv
clByb3RvPiBlbnVtVHlwZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlJlZmxlY3Rpb24uRW51bURlc2NyaXB0b3JQcm90bz4oKTsKLSAgICBwdWJsaWMg
cGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRW51
bURlc2NyaXB0b3JQcm90bz4gRW51bVR5cGUgewotICAgICAgZ2V0IHsgcmV0dXJuIGVudW1UeXBl
XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZXh0
ZW5zaW9uX3JhbmdlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBFeHRl
bnNpb25SYW5nZUZpZWxkTnVtYmVyID0gNTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBw
Yjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRlc2NyaXB0
b3JQcm90by5UeXBlcy5FeHRlbnNpb25SYW5nZT4gX3JlcGVhdGVkX2V4dGVuc2lvblJhbmdlX2Nv
ZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSg0MiwgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUHJvdG8uVHlwZXMuRXh0ZW5zaW9uUmFu
Z2UuUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRlc2NyaXB0b3JQcm90by5UeXBlcy5FeHRl
bnNpb25SYW5nZT4gZXh0ZW5zaW9uUmFuZ2VfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRlc2NyaXB0b3JQcm90by5UeXBlcy5FeHRl
bnNpb25SYW5nZT4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclByb3RvLlR5cGVzLkV4dGVuc2lvblJh
bmdlPiBFeHRlbnNpb25SYW5nZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gZXh0ZW5zaW9uUmFuZ2Vf
OyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvbmVv
Zl9kZWNsIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPbmVvZkRlY2xG
aWVsZE51bWJlciA9IDg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29k
ZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5PbmVvZkRlc2NyaXB0b3JQcm90
bz4gX3JlcGVhdGVkX29uZW9mRGVjbF9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZv
ck1lc3NhZ2UoNjYsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uT25lb2ZEZXNj
cmlwdG9yUHJvdG8uUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRG
aWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLk9uZW9mRGVzY3JpcHRvclBy
b3RvPiBvbmVvZkRlY2xfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5SZWZsZWN0aW9uLk9uZW9mRGVzY3JpcHRvclByb3RvPigpOwotICAgIHB1YmxpYyBw
YmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5PbmVv
ZkRlc2NyaXB0b3JQcm90bz4gT25lb2ZEZWNsIHsKLSAgICAgIGdldCB7IHJldHVybiBvbmVvZkRl
Y2xfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJv
cHRpb25zIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPcHRpb25zRmll
bGROdW1iZXIgPSA3OwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVj
dGlvbi5NZXNzYWdlT3B0aW9ucyBvcHRpb25zXzsKLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuUmVmbGVjdGlvbi5NZXNzYWdlT3B0aW9ucyBPcHRpb25zIHsKLSAgICAgIGdldCB7
IHJldHVybiBvcHRpb25zXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb3B0aW9uc18gPSB2YWx1
ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0
aGUgInJlc2VydmVkX3JhbmdlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGlu
dCBSZXNlcnZlZFJhbmdlRmllbGROdW1iZXIgPSA5OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRv
bmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVz
Y3JpcHRvclByb3RvLlR5cGVzLlJlc2VydmVkUmFuZ2U+IF9yZXBlYXRlZF9yZXNlcnZlZFJhbmdl
X2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSg3NCwgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUHJvdG8uVHlwZXMuUmVzZXJ2ZWRS
YW5nZS5QYXJzZXIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclByb3RvLlR5cGVzLlJl
c2VydmVkUmFuZ2U+IHJlc2VydmVkUmFuZ2VfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRlc2NyaXB0b3JQcm90by5UeXBlcy5SZXNl
cnZlZFJhbmdlPigpOwotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUHJvdG8uVHlwZXMuUmVzZXJ2ZWRSYW5n
ZT4gUmVzZXJ2ZWRSYW5nZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVzZXJ2ZWRSYW5nZV87IH0K
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInJlc2VydmVk
X25hbWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlc2VydmVkTmFt
ZUZpZWxkTnVtYmVyID0gMTA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxk
Q29kZWM8c3RyaW5nPiBfcmVwZWF0ZWRfcmVzZXJ2ZWROYW1lX2NvZGVjCi0gICAgICAgID0gcGI6
OkZpZWxkQ29kZWMuRm9yU3RyaW5nKDgyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVw
ZWF0ZWRGaWVsZDxzdHJpbmc+IHJlc2VydmVkTmFtZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxk
PHN0cmluZz4oKTsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBSZXNlcnZlZCBmaWVsZCBu
YW1lcywgd2hpY2ggbWF5IG5vdCBiZSB1c2VkIGJ5IGZpZWxkcyBpbiB0aGUgc2FtZSBtZXNzYWdl
LgotICAgIC8vLyAgQSBnaXZlbiBuYW1lIG1heSBvbmx5IGJlIHJlc2VydmVkIG9uY2UuCi0gICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPHN0cmluZz4gUmVz
ZXJ2ZWROYW1lIHsKLSAgICAgIGdldCB7IHJldHVybiByZXNlcnZlZE5hbWVfOyB9Ci0gICAgfQot
Ci0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAg
cmV0dXJuIEVxdWFscyhvdGhlciBhcyBEZXNjcmlwdG9yUHJvdG8pOwotICAgIH0KLQotICAgIHB1
YmxpYyBib29sIEVxdWFscyhEZXNjcmlwdG9yUHJvdG8gb3RoZXIpIHsKLSAgICAgIGlmIChSZWZl
cmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
IH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKE5hbWUgIT0gb3RoZXIuTmFtZSkgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYoIWZpZWxkXy5FcXVhbHMob3RoZXIuZmllbGRfKSkgcmV0dXJuIGZh
bHNlOwotICAgICAgaWYoIWV4dGVuc2lvbl8uRXF1YWxzKG90aGVyLmV4dGVuc2lvbl8pKSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZighbmVzdGVkVHlwZV8uRXF1YWxzKG90aGVyLm5lc3RlZFR5cGVf
KSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIWVudW1UeXBlXy5FcXVhbHMob3RoZXIuZW51bVR5
cGVfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIWV4dGVuc2lvblJhbmdlXy5FcXVhbHMob3Ro
ZXIuZXh0ZW5zaW9uUmFuZ2VfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIW9uZW9mRGVjbF8u
RXF1YWxzKG90aGVyLm9uZW9mRGVjbF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVj
dC5FcXVhbHMoT3B0aW9ucywgb3RoZXIuT3B0aW9ucykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlm
KCFyZXNlcnZlZFJhbmdlXy5FcXVhbHMob3RoZXIucmVzZXJ2ZWRSYW5nZV8pKSByZXR1cm4gZmFs
c2U7Ci0gICAgICBpZighcmVzZXJ2ZWROYW1lXy5FcXVhbHMob3RoZXIucmVzZXJ2ZWROYW1lXykp
IHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBv
dmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBp
ZiAoTmFtZS5MZW5ndGggIT0gMCkgaGFzaCBePSBOYW1lLkdldEhhc2hDb2RlKCk7Ci0gICAgICBo
YXNoIF49IGZpZWxkXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBleHRlbnNpb25fLkdl
dEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IG5lc3RlZFR5cGVfLkdldEhhc2hDb2RlKCk7Ci0g
ICAgICBoYXNoIF49IGVudW1UeXBlXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBleHRl
bnNpb25SYW5nZV8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gb25lb2ZEZWNsXy5HZXRI
YXNoQ29kZSgpOwotICAgICAgaWYgKG9wdGlvbnNfICE9IG51bGwpIGhhc2ggXj0gT3B0aW9ucy5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSByZXNlcnZlZFJhbmdlXy5HZXRIYXNoQ29kZSgp
OwotICAgICAgaGFzaCBePSByZXNlcnZlZE5hbWVfLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1
cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkg
ewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlz
KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVh
bSBvdXRwdXQpIHsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhOYW1lKTsKLSAg
ICAgIH0KLSAgICAgIGZpZWxkXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX2ZpZWxkX2NvZGVj
KTsKLSAgICAgIG5lc3RlZFR5cGVfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfbmVzdGVkVHlw
ZV9jb2RlYyk7Ci0gICAgICBlbnVtVHlwZV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9lbnVt
VHlwZV9jb2RlYyk7Ci0gICAgICBleHRlbnNpb25SYW5nZV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBl
YXRlZF9leHRlbnNpb25SYW5nZV9jb2RlYyk7Ci0gICAgICBleHRlbnNpb25fLldyaXRlVG8ob3V0
cHV0LCBfcmVwZWF0ZWRfZXh0ZW5zaW9uX2NvZGVjKTsKLSAgICAgIGlmIChvcHRpb25zXyAhPSBu
dWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg1OCk7Ci0gICAgICAgIG91dHB1dC5X
cml0ZU1lc3NhZ2UoT3B0aW9ucyk7Ci0gICAgICB9Ci0gICAgICBvbmVvZkRlY2xfLldyaXRlVG8o
b3V0cHV0LCBfcmVwZWF0ZWRfb25lb2ZEZWNsX2NvZGVjKTsKLSAgICAgIHJlc2VydmVkUmFuZ2Vf
LldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVzZXJ2ZWRSYW5nZV9jb2RlYyk7Ci0gICAgICBy
ZXNlcnZlZE5hbWVfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfcmVzZXJ2ZWROYW1lX2NvZGVj
KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQg
c2l6ZSA9IDA7Ci0gICAgICBpZiAoTmFtZS5MZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9
IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoTmFtZSk7Ci0gICAg
ICB9Ci0gICAgICBzaXplICs9IGZpZWxkXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9maWVsZF9j
b2RlYyk7Ci0gICAgICBzaXplICs9IGV4dGVuc2lvbl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRf
ZXh0ZW5zaW9uX2NvZGVjKTsKLSAgICAgIHNpemUgKz0gbmVzdGVkVHlwZV8uQ2FsY3VsYXRlU2l6
ZShfcmVwZWF0ZWRfbmVzdGVkVHlwZV9jb2RlYyk7Ci0gICAgICBzaXplICs9IGVudW1UeXBlXy5D
YWxjdWxhdGVTaXplKF9yZXBlYXRlZF9lbnVtVHlwZV9jb2RlYyk7Ci0gICAgICBzaXplICs9IGV4
dGVuc2lvblJhbmdlXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9leHRlbnNpb25SYW5nZV9jb2Rl
Yyk7Ci0gICAgICBzaXplICs9IG9uZW9mRGVjbF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfb25l
b2ZEZWNsX2NvZGVjKTsKLSAgICAgIGlmIChvcHRpb25zXyAhPSBudWxsKSB7Ci0gICAgICAgIHNp
emUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoT3B0aW9u
cyk7Ci0gICAgICB9Ci0gICAgICBzaXplICs9IHJlc2VydmVkUmFuZ2VfLkNhbGN1bGF0ZVNpemUo
X3JlcGVhdGVkX3Jlc2VydmVkUmFuZ2VfY29kZWMpOwotICAgICAgc2l6ZSArPSByZXNlcnZlZE5h
bWVfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3Jlc2VydmVkTmFtZV9jb2RlYyk7Ci0gICAgICBy
ZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oRGVzY3JpcHRv
clByb3RvIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTmFtZS5MZW5ndGggIT0gMCkgewotICAgICAg
ICBOYW1lID0gb3RoZXIuTmFtZTsKLSAgICAgIH0KLSAgICAgIGZpZWxkXy5BZGQob3RoZXIuZmll
bGRfKTsKLSAgICAgIGV4dGVuc2lvbl8uQWRkKG90aGVyLmV4dGVuc2lvbl8pOwotICAgICAgbmVz
dGVkVHlwZV8uQWRkKG90aGVyLm5lc3RlZFR5cGVfKTsKLSAgICAgIGVudW1UeXBlXy5BZGQob3Ro
ZXIuZW51bVR5cGVfKTsKLSAgICAgIGV4dGVuc2lvblJhbmdlXy5BZGQob3RoZXIuZXh0ZW5zaW9u
UmFuZ2VfKTsKLSAgICAgIG9uZW9mRGVjbF8uQWRkKG90aGVyLm9uZW9mRGVjbF8pOwotICAgICAg
aWYgKG90aGVyLm9wdGlvbnNfICE9IG51bGwpIHsKLSAgICAgICAgaWYgKG9wdGlvbnNfID09IG51
bGwpIHsKLSAgICAgICAgICBvcHRpb25zXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5S
ZWZsZWN0aW9uLk1lc3NhZ2VPcHRpb25zKCk7Ci0gICAgICAgIH0KLSAgICAgICAgT3B0aW9ucy5N
ZXJnZUZyb20ob3RoZXIuT3B0aW9ucyk7Ci0gICAgICB9Ci0gICAgICByZXNlcnZlZFJhbmdlXy5B
ZGQob3RoZXIucmVzZXJ2ZWRSYW5nZV8pOwotICAgICAgcmVzZXJ2ZWROYW1lXy5BZGQob3RoZXIu
cmVzZXJ2ZWROYW1lXyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpD
b2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgo
dGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgTmFtZSA9
IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBmaWVsZF8uQWRkRW50cmllc0Zyb20oaW5w
dXQsIF9yZXBlYXRlZF9maWVsZF9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgY2FzZSAyNjogewotICAgICAgICAgICAgbmVzdGVkVHlwZV8uQWRkRW50
cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9uZXN0ZWRUeXBlX2NvZGVjKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM0OiB7Ci0gICAgICAgICAgICBl
bnVtVHlwZV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9lbnVtVHlwZV9jb2RlYyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA0Mjogewot
ICAgICAgICAgICAgZXh0ZW5zaW9uUmFuZ2VfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0
ZWRfZXh0ZW5zaW9uUmFuZ2VfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
fQotICAgICAgICAgIGNhc2UgNTA6IHsKLSAgICAgICAgICAgIGV4dGVuc2lvbl8uQWRkRW50cmll
c0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9leHRlbnNpb25fY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNTg6IHsKLSAgICAgICAgICAgIGlmIChv
cHRpb25zXyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIG9wdGlvbnNfID0gbmV3IGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uTWVzc2FnZU9wdGlvbnMoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKG9wdGlvbnNfKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDY2OiB7Ci0gICAgICAgICAgICBv
bmVvZkRlY2xfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfb25lb2ZEZWNsX2NvZGVj
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc0OiB7
Ci0gICAgICAgICAgICByZXNlcnZlZFJhbmdlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVh
dGVkX3Jlc2VydmVkUmFuZ2VfY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
fQotICAgICAgICAgIGNhc2UgODI6IHsKLSAgICAgICAgICAgIHJlc2VydmVkTmFtZV8uQWRkRW50
cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9yZXNlcnZlZE5hbWVfY29kZWMpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
I3JlZ2lvbiBOZXN0ZWQgdHlwZXMKLSAgICAvLy8gPHN1bW1hcnk+Q29udGFpbmVyIGZvciBuZXN0
ZWQgdHlwZXMgZGVjbGFyZWQgaW4gdGhlIERlc2NyaXB0b3JQcm90byBtZXNzYWdlIHR5cGUuPC9z
dW1tYXJ5PgotICAgIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJD
b2RlQXR0cmlidXRlKCldCi0gICAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIGNsYXNzIFR5cGVzIHsK
LSAgICAgIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0
cmlidXRlKCldCi0gICAgICBpbnRlcm5hbCBzZWFsZWQgcGFydGlhbCBjbGFzcyBFeHRlbnNpb25S
YW5nZSA6IHBiOjpJTWVzc2FnZTxFeHRlbnNpb25SYW5nZT4gewotICAgICAgICBwcml2YXRlIHN0
YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxFeHRlbnNpb25SYW5nZT4gX3BhcnNlciA9
IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxFeHRlbnNpb25SYW5nZT4oKCkgPT4gbmV3IEV4dGVuc2lv
blJhbmdlKCkpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPEV4dGVu
c2lvblJhbmdlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICAgICAg
cHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAg
ICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRlc2Ny
aXB0b3JQcm90by5EZXNjcmlwdG9yLk5lc3RlZFR5cGVzWzBdOyB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAg
ICAgICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgICAgICB9Ci0KLSAgICAgICAg
cHVibGljIEV4dGVuc2lvblJhbmdlKCkgewotICAgICAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAg
ICAgICBwdWJsaWMgRXh0ZW5zaW9uUmFuZ2UoRXh0ZW5zaW9uUmFuZ2Ugb3RoZXIpIDogdGhpcygp
IHsKLSAgICAgICAgICBzdGFydF8gPSBvdGhlci5zdGFydF87Ci0gICAgICAgICAgZW5kXyA9IG90
aGVyLmVuZF87Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgRXh0ZW5zaW9uUmFuZ2UgQ2xv
bmUoKSB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBFeHRlbnNpb25SYW5nZSh0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic3RhcnQi
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBTdGFydEZpZWxkTnVt
YmVyID0gMTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgc3RhcnRfOwotICAgICAgICBwdWJsaWMgaW50
IFN0YXJ0IHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4gc3RhcnRfOyB9Ci0gICAgICAgICAgc2V0
IHsKLSAgICAgICAgICAgIHN0YXJ0XyA9IHZhbHVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZW5kIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBpbnQgRW5kRmllbGROdW1iZXIgPSAyOwot
ICAgICAgICBwcml2YXRlIGludCBlbmRfOwotICAgICAgICBwdWJsaWMgaW50IEVuZCB7Ci0gICAg
ICAgICAgZ2V0IHsgcmV0dXJuIGVuZF87IH0KLSAgICAgICAgICBzZXQgewotICAgICAgICAgICAg
ZW5kXyA9IHZhbHVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBv
dmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgICAgICByZXR1cm4gRXF1
YWxzKG90aGVyIGFzIEV4dGVuc2lvblJhbmdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1Ymxp
YyBib29sIEVxdWFscyhFeHRlbnNpb25SYW5nZSBvdGhlcikgewotICAgICAgICAgIGlmIChSZWZl
cmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKFN0
YXJ0ICE9IG90aGVyLlN0YXJ0KSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgaWYgKEVuZCAhPSBv
dGhlci5FbmQpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICAg
ICAgaW50IGhhc2ggPSAxOwotICAgICAgICAgIGlmIChTdGFydCAhPSAwKSBoYXNoIF49IFN0YXJ0
LkdldEhhc2hDb2RlKCk7Ci0gICAgICAgICAgaWYgKEVuZCAhPSAwKSBoYXNoIF49IEVuZC5HZXRI
YXNoQ29kZSgpOwotICAgICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICB9Ci0KLSAgICAgICAg
cHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgICAgICByZXR1cm4gcGI6
Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7
Ci0gICAgICAgICAgaWYgKFN0YXJ0ICE9IDApIHsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVJh
d1RhZyg4KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUludDMyKFN0YXJ0KTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgaWYgKEVuZCAhPSAwKSB7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVS
YXdUYWcoMTYpOwotICAgICAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoRW5kKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0g
ICAgICAgICAgaW50IHNpemUgPSAwOwotICAgICAgICAgIGlmIChTdGFydCAhPSAwKSB7Ci0gICAg
ICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6
ZShTdGFydCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChFbmQgIT0gMCkgewotICAgICAg
ICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUo
RW5kKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oRXh0ZW5zaW9uUmFuZ2Ugb3RoZXIpIHsKLSAg
ICAgICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBpZiAob3RoZXIuU3RhcnQgIT0gMCkgewotICAgICAgICAgICAgU3Rh
cnQgPSBvdGhlci5TdGFydDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKG90aGVyLkVuZCAh
PSAwKSB7Ci0gICAgICAgICAgICBFbmQgPSBvdGhlci5FbmQ7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFt
IGlucHV0KSB7Ci0gICAgICAgICAgdWludCB0YWc7Ci0gICAgICAgICAgd2hpbGUgKCh0YWcgPSBp
bnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgODogewotICAgICAg
ICAgICAgICAgIFN0YXJ0ID0gaW5wdXQuUmVhZEludDMyKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2FzZSAxNjogewotICAgICAgICAg
ICAgICAgIEVuZCA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgIH0KLQotICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgLy8vICBSYW5nZSBvZiByZXNl
cnZlZCB0YWcgbnVtYmVycy4gUmVzZXJ2ZWQgdGFnIG51bWJlcnMgbWF5IG5vdCBiZSB1c2VkIGJ5
Ci0gICAgICAvLy8gIGZpZWxkcyBvciBleHRlbnNpb24gcmFuZ2VzIGluIHRoZSBzYW1lIG1lc3Nh
Z2UuIFJlc2VydmVkIHJhbmdlcyBtYXkKLSAgICAgIC8vLyAgbm90IG92ZXJsYXAuCi0gICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2Vy
Tm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgICAgIGludGVybmFsIHNlYWxlZCBwYXJ0aWFsIGNs
YXNzIFJlc2VydmVkUmFuZ2UgOiBwYjo6SU1lc3NhZ2U8UmVzZXJ2ZWRSYW5nZT4gewotICAgICAg
ICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxSZXNlcnZlZFJhbmdl
PiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPFJlc2VydmVkUmFuZ2U+KCgpID0+IG5l
dyBSZXNlcnZlZFJhbmdlKCkpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFy
c2VyPFJlc2VydmVkUmFuZ2U+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQot
ICAgICAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7
Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rp
b24uRGVzY3JpcHRvclByb3RvLkRlc2NyaXB0b3IuTmVzdGVkVHlwZXNbMV07IH0KLSAgICAgICAg
fQotCi0gICAgICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0
b3IgewotICAgICAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBwdWJsaWMgUmVzZXJ2ZWRSYW5nZSgpIHsKLSAgICAgICAgICBPbkNvbnN0cnVjdGlv
bigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7
Ci0KLSAgICAgICAgcHVibGljIFJlc2VydmVkUmFuZ2UoUmVzZXJ2ZWRSYW5nZSBvdGhlcikgOiB0
aGlzKCkgewotICAgICAgICAgIHN0YXJ0XyA9IG90aGVyLnN0YXJ0XzsKLSAgICAgICAgICBlbmRf
ID0gb3RoZXIuZW5kXzsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBSZXNlcnZlZFJhbmdl
IENsb25lKCkgewotICAgICAgICAgIHJldHVybiBuZXcgUmVzZXJ2ZWRSYW5nZSh0aGlzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic3Rh
cnQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBTdGFydEZpZWxk
TnVtYmVyID0gMTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgc3RhcnRfOwotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyAgSW5jbHVzaXZlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgICAgICBwdWJsaWMgaW50IFN0YXJ0IHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4gc3RhcnRf
OyB9Ci0gICAgICAgICAgc2V0IHsKLSAgICAgICAgICAgIHN0YXJ0XyA9IHZhbHVlOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAiZW5kIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBpbnQgRW5k
RmllbGROdW1iZXIgPSAyOwotICAgICAgICBwcml2YXRlIGludCBlbmRfOwotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgRXhjbHVzaXZlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5
PgotICAgICAgICBwdWJsaWMgaW50IEVuZCB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIGVuZF87
IH0KLSAgICAgICAgICBzZXQgewotICAgICAgICAgICAgZW5kXyA9IHZhbHVlOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmpl
Y3Qgb3RoZXIpIHsKLSAgICAgICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIFJlc2VydmVkUmFu
Z2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2wgRXF1YWxzKFJlc2VydmVkUmFu
Z2Ugb3RoZXIpIHsKLSAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAo
UmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChTdGFydCAhPSBvdGhlci5TdGFydCkgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgIGlmIChFbmQgIT0gb3RoZXIuRW5kKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJp
ZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgICAgIGludCBoYXNoID0gMTsKLSAgICAgICAg
ICBpZiAoU3RhcnQgIT0gMCkgaGFzaCBePSBTdGFydC5HZXRIYXNoQ29kZSgpOwotICAgICAgICAg
IGlmIChFbmQgIT0gMCkgaGFzaCBePSBFbmQuR2V0SGFzaENvZGUoKTsKLSAgICAgICAgICByZXR1
cm4gaGFzaDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9T
dHJpbmcoKSB7Ci0gICAgICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3Rp
Y1N0cmluZyh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8o
cGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgICAgIGlmIChTdGFydCAhPSAw
KSB7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0gICAgICAgICAgICBvdXRw
dXQuV3JpdGVJbnQzMihTdGFydCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChFbmQgIT0g
MCkgewotICAgICAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE2KTsKLSAgICAgICAgICAgIG91
dHB1dC5Xcml0ZUludDMyKEVuZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
cHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgICAgIGludCBzaXplID0gMDsKLSAg
ICAgICAgICBpZiAoU3RhcnQgIT0gMCkgewotICAgICAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNv
ZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoU3RhcnQpOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBpZiAoRW5kICE9IDApIHsKLSAgICAgICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2Rl
ZE91dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKEVuZCk7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIHJldHVybiBzaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgTWVyZ2VG
cm9tKFJlc2VydmVkUmFuZ2Ugb3RoZXIpIHsKLSAgICAgICAgICBpZiAob3RoZXIgPT0gbnVsbCkg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAob3RoZXIu
U3RhcnQgIT0gMCkgewotICAgICAgICAgICAgU3RhcnQgPSBvdGhlci5TdGFydDsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgaWYgKG90aGVyLkVuZCAhPSAwKSB7Ci0gICAgICAgICAgICBFbmQgPSBv
dGhlci5FbmQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQg
TWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICAgICAgdWludCB0
YWc7Ci0gICAgICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAg
ICAgICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgODogewotICAgICAgICAgICAgICAgIFN0YXJ0ID0gaW5wdXQuUmVh
ZEludDMyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgY2FzZSAxNjogewotICAgICAgICAgICAgICAgIEVuZCA9IGlucHV0LlJlYWRJbnQz
MigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIH0KLQotICAgIH0KLSAgICAjZW5k
cmVnaW9uCi0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBEZXNjcmliZXMgYSBmaWVs
ZCB3aXRoaW4gYSBtZXNzYWdlLgotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0u
RGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBpbnRlcm5hbCBz
ZWFsZWQgcGFydGlhbCBjbGFzcyBGaWVsZERlc2NyaXB0b3JQcm90byA6IHBiOjpJTWVzc2FnZTxG
aWVsZERlc2NyaXB0b3JQcm90bz4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpN
ZXNzYWdlUGFyc2VyPEZpZWxkRGVzY3JpcHRvclByb3RvPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNz
YWdlUGFyc2VyPEZpZWxkRGVzY3JpcHRvclByb3RvPigoKSA9PiBuZXcgRmllbGREZXNjcmlwdG9y
UHJvdG8oKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxGaWVsZERlc2Ny
aXB0b3JQcm90bz4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVi
bGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0
IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclJl
ZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbM107IH0KLSAgICB9Ci0KLSAgICBwYnI6
Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7
IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIEZpZWxkRGVzY3JpcHRv
clByb3RvKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFs
IHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBGaWVsZERlc2NyaXB0b3JQcm90
byhGaWVsZERlc2NyaXB0b3JQcm90byBvdGhlcikgOiB0aGlzKCkgewotICAgICAgbmFtZV8gPSBv
dGhlci5uYW1lXzsKLSAgICAgIG51bWJlcl8gPSBvdGhlci5udW1iZXJfOwotICAgICAgbGFiZWxf
ID0gb3RoZXIubGFiZWxfOwotICAgICAgdHlwZV8gPSBvdGhlci50eXBlXzsKLSAgICAgIHR5cGVO
YW1lXyA9IG90aGVyLnR5cGVOYW1lXzsKLSAgICAgIGV4dGVuZGVlXyA9IG90aGVyLmV4dGVuZGVl
XzsKLSAgICAgIGRlZmF1bHRWYWx1ZV8gPSBvdGhlci5kZWZhdWx0VmFsdWVfOwotICAgICAgb25l
b2ZJbmRleF8gPSBvdGhlci5vbmVvZkluZGV4XzsKLSAgICAgIGpzb25OYW1lXyA9IG90aGVyLmpz
b25OYW1lXzsKLSAgICAgIE9wdGlvbnMgPSBvdGhlci5vcHRpb25zXyAhPSBudWxsID8gb3RoZXIu
T3B0aW9ucy5DbG9uZSgpIDogbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmllbGREZXNjcmlw
dG9yUHJvdG8gQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IEZpZWxkRGVzY3JpcHRvclByb3Rv
KHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAi
bmFtZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTmFtZUZpZWxkTnVt
YmVyID0gMTsKLSAgICBwcml2YXRlIHN0cmluZyBuYW1lXyA9ICIiOwotICAgIHB1YmxpYyBzdHJp
bmcgTmFtZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gbmFtZV87IH0KLSAgICAgIHNldCB7Ci0gICAg
ICAgIG5hbWVfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2
YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAibnVtYmVyIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBO
dW1iZXJGaWVsZE51bWJlciA9IDM7Ci0gICAgcHJpdmF0ZSBpbnQgbnVtYmVyXzsKLSAgICBwdWJs
aWMgaW50IE51bWJlciB7Ci0gICAgICBnZXQgeyByZXR1cm4gbnVtYmVyXzsgfQotICAgICAgc2V0
IHsKLSAgICAgICAgbnVtYmVyXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8
c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibGFiZWwiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IExhYmVsRmllbGROdW1iZXIgPSA0OwotICAgIHByaXZhdGUgZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBl
cy5MYWJlbCBsYWJlbF8gPSAwOwotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5S
ZWZsZWN0aW9uLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGVzLkxhYmVsIExhYmVsIHsKLSAgICAg
IGdldCB7IHJldHVybiBsYWJlbF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGxhYmVsXyA9IHZh
bHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAidHlwZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVHlwZUZp
ZWxkTnVtYmVyID0gNTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxl
Y3Rpb24uRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZXMuVHlwZSB0eXBlXyA9IDA7Ci0gICAgLy8v
IDxzdW1tYXJ5PgotICAgIC8vLyAgSWYgdHlwZV9uYW1lIGlzIHNldCwgdGhpcyBuZWVkIG5vdCBi
ZSBzZXQuICBJZiBib3RoIHRoaXMgYW5kIHR5cGVfbmFtZQotICAgIC8vLyAgYXJlIHNldCwgdGhp
cyBtdXN0IGJlIG9uZSBvZiBUWVBFX0VOVU0sIFRZUEVfTUVTU0FHRSBvciBUWVBFX0dST1VQLgot
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24uRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZXMuVHlwZSBUeXBlIHsKLSAgICAgIGdl
dCB7IHJldHVybiB0eXBlXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgdHlwZV8gPSB2YWx1ZTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
InR5cGVfbmFtZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVHlwZU5h
bWVGaWVsZE51bWJlciA9IDY7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgdHlwZU5hbWVfID0gIiI7Ci0g
ICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgRm9yIG1lc3NhZ2UgYW5kIGVudW0gdHlwZXMsIHRo
aXMgaXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUuICBJZiB0aGUgbmFtZQotICAgIC8vLyAgc3RhcnRz
IHdpdGggYSAnLicsIGl0IGlzIGZ1bGx5LXF1YWxpZmllZC4gIE90aGVyd2lzZSwgQysrLWxpa2Ug
c2NvcGluZwotICAgIC8vLyAgcnVsZXMgYXJlIHVzZWQgdG8gZmluZCB0aGUgdHlwZSAoaS5lLiBm
aXJzdCB0aGUgbmVzdGVkIHR5cGVzIHdpdGhpbiB0aGlzCi0gICAgLy8vICBtZXNzYWdlIGFyZSBz
ZWFyY2hlZCwgdGhlbiB3aXRoaW4gdGhlIHBhcmVudCwgb24gdXAgdG8gdGhlIHJvb3QKLSAgICAv
Ly8gIG5hbWVzcGFjZSkuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RyaW5nIFR5
cGVOYW1lIHsKLSAgICAgIGdldCB7IHJldHVybiB0eXBlTmFtZV87IH0KLSAgICAgIHNldCB7Ci0g
ICAgICAgIHR5cGVOYW1lXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZh
bHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgImV4dGVuZGVlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBFeHRlbmRlZUZpZWxkTnVtYmVyID0gMjsKLSAgICBwcml2YXRlIHN0cmluZyBleHRl
bmRlZV8gPSAiIjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBGb3IgZXh0ZW5zaW9ucywg
dGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBiZWluZyBleHRlbmRlZC4gIEl0IGlzCi0gICAg
Ly8vICByZXNvbHZlZCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgdHlwZV9uYW1lLgotICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0cmluZyBFeHRlbmRlZSB7Ci0gICAgICBnZXQgeyByZXR1
cm4gZXh0ZW5kZWVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBleHRlbmRlZV8gPSBwYjo6UHJv
dG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJkZWZhdWx0X3Zh
bHVlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBEZWZhdWx0VmFsdWVG
aWVsZE51bWJlciA9IDc7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgZGVmYXVsdFZhbHVlXyA9ICIiOwot
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIEZvciBudW1lcmljIHR5cGVzLCBjb250YWlucyB0
aGUgb3JpZ2luYWwgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUuCi0gICAgLy8vICBG
b3IgYm9vbGVhbnMsICJ0cnVlIiBvciAiZmFsc2UiLgotICAgIC8vLyAgRm9yIHN0cmluZ3MsIGNv
bnRhaW5zIHRoZSBkZWZhdWx0IHRleHQgY29udGVudHMgKG5vdCBlc2NhcGVkIGluIGFueSB3YXkp
LgotICAgIC8vLyAgRm9yIGJ5dGVzLCBjb250YWlucyB0aGUgQyBlc2NhcGVkIHZhbHVlLiAgQWxs
IGJ5dGVzID49IDEyOCBhcmUgZXNjYXBlZC4KLSAgICAvLy8gIFRPRE8oa2VudG9uKTogIEJhc2Ut
NjQgZW5jb2RlPwotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0cmluZyBEZWZhdWx0
VmFsdWUgewotICAgICAgZ2V0IHsgcmV0dXJuIGRlZmF1bHRWYWx1ZV87IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIGRlZmF1bHRWYWx1ZV8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90
TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJvbmVvZl9pbmRleCIgZmllbGQuPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBjb25zdCBpbnQgT25lb2ZJbmRleEZpZWxkTnVtYmVyID0gOTsKLSAgICBwcml2YXRl
IGludCBvbmVvZkluZGV4XzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBJZiBzZXQsIGdp
dmVzIHRoZSBpbmRleCBvZiBhIG9uZW9mIGluIHRoZSBjb250YWluaW5nIHR5cGUncyBvbmVvZl9k
ZWNsCi0gICAgLy8vICBsaXN0LiAgVGhpcyBmaWVsZCBpcyBhIG1lbWJlciBvZiB0aGF0IG9uZW9m
LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGludCBPbmVvZkluZGV4IHsKLSAgICAg
IGdldCB7IHJldHVybiBvbmVvZkluZGV4XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgb25lb2ZJ
bmRleF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgImpzb25fbmFtZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgSnNvbk5hbWVGaWVsZE51bWJlciA9IDEwOwotICAgIHByaXZhdGUgc3RyaW5nIGpz
b25OYW1lXyA9ICIiOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIEpTT04gbmFtZSBvZiB0
aGlzIGZpZWxkLiBUaGUgdmFsdWUgaXMgc2V0IGJ5IHByb3RvY29sIGNvbXBpbGVyLiBJZiB0aGUK
LSAgICAvLy8gIHVzZXIgaGFzIHNldCBhICJqc29uX25hbWUiIG9wdGlvbiBvbiB0aGlzIGZpZWxk
LCB0aGF0IG9wdGlvbidzIHZhbHVlCi0gICAgLy8vICB3aWxsIGJlIHVzZWQuIE90aGVyd2lzZSwg
aXQncyBkZWR1Y2VkIGZyb20gdGhlIGZpZWxkJ3MgbmFtZSBieSBjb252ZXJ0aW5nCi0gICAgLy8v
ICBpdCB0byBjYW1lbENhc2UuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RyaW5n
IEpzb25OYW1lIHsKLSAgICAgIGdldCB7IHJldHVybiBqc29uTmFtZV87IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIGpzb25OYW1lXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxs
KHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgIm9wdGlvbnMiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
Y29uc3QgaW50IE9wdGlvbnNGaWVsZE51bWJlciA9IDg7Ci0gICAgcHJpdmF0ZSBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZpZWxkT3B0aW9ucyBvcHRpb25zXzsKLSAgICBwdWJs
aWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWVsZE9wdGlvbnMgT3B0aW9u
cyB7Ci0gICAgICBnZXQgeyByZXR1cm4gb3B0aW9uc187IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IG9wdGlvbnNfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRl
IGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBh
cyBGaWVsZERlc2NyaXB0b3JQcm90byk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxz
KEZpZWxkRGVzY3JpcHRvclByb3RvIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxz
KG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBp
ZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIH0KLSAgICAgIGlmIChOYW1lICE9IG90aGVyLk5hbWUpIHJldHVybiBmYWxzZTsKLSAg
ICAgIGlmIChOdW1iZXIgIT0gb3RoZXIuTnVtYmVyKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAo
TGFiZWwgIT0gb3RoZXIuTGFiZWwpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChUeXBlICE9IG90
aGVyLlR5cGUpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChUeXBlTmFtZSAhPSBvdGhlci5UeXBl
TmFtZSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEV4dGVuZGVlICE9IG90aGVyLkV4dGVuZGVl
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoRGVmYXVsdFZhbHVlICE9IG90aGVyLkRlZmF1bHRW
YWx1ZSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE9uZW9mSW5kZXggIT0gb3RoZXIuT25lb2ZJ
bmRleCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEpzb25OYW1lICE9IG90aGVyLkpzb25OYW1l
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoT3B0aW9ucywgb3RoZXIu
T3B0aW9ucykpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7
Ci0gICAgICBpZiAoTmFtZS5MZW5ndGggIT0gMCkgaGFzaCBePSBOYW1lLkdldEhhc2hDb2RlKCk7
Ci0gICAgICBpZiAoTnVtYmVyICE9IDApIGhhc2ggXj0gTnVtYmVyLkdldEhhc2hDb2RlKCk7Ci0g
ICAgICBpZiAoTGFiZWwgIT0gMCkgaGFzaCBePSBMYWJlbC5HZXRIYXNoQ29kZSgpOwotICAgICAg
aWYgKFR5cGUgIT0gMCkgaGFzaCBePSBUeXBlLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoVHlw
ZU5hbWUuTGVuZ3RoICE9IDApIGhhc2ggXj0gVHlwZU5hbWUuR2V0SGFzaENvZGUoKTsKLSAgICAg
IGlmIChFeHRlbmRlZS5MZW5ndGggIT0gMCkgaGFzaCBePSBFeHRlbmRlZS5HZXRIYXNoQ29kZSgp
OwotICAgICAgaWYgKERlZmF1bHRWYWx1ZS5MZW5ndGggIT0gMCkgaGFzaCBePSBEZWZhdWx0VmFs
dWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChPbmVvZkluZGV4ICE9IDApIGhhc2ggXj0gT25l
b2ZJbmRleC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKEpzb25OYW1lLkxlbmd0aCAhPSAwKSBo
YXNoIF49IEpzb25OYW1lLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAob3B0aW9uc18gIT0gbnVs
bCkgaGFzaCBePSBPcHRpb25zLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0
dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsK
LSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1Rh
ZygxMCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhOYW1lKTsKLSAgICAgIH0KLSAgICAg
IGlmIChFeHRlbmRlZS5MZW5ndGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWco
MTgpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoRXh0ZW5kZWUpOwotICAgICAgfQotICAg
ICAgaWYgKE51bWJlciAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygyNCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZUludDMyKE51bWJlcik7Ci0gICAgICB9Ci0gICAgICBpZiAoTGFi
ZWwgIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMzIpOwotICAgICAgICBvdXRw
dXQuV3JpdGVFbnVtKChpbnQpIExhYmVsKTsKLSAgICAgIH0KLSAgICAgIGlmIChUeXBlICE9IDAp
IHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDQwKTsKLSAgICAgICAgb3V0cHV0LldyaXRl
RW51bSgoaW50KSBUeXBlKTsKLSAgICAgIH0KLSAgICAgIGlmIChUeXBlTmFtZS5MZW5ndGggIT0g
MCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNTApOwotICAgICAgICBvdXRwdXQuV3Jp
dGVTdHJpbmcoVHlwZU5hbWUpOwotICAgICAgfQotICAgICAgaWYgKERlZmF1bHRWYWx1ZS5MZW5n
dGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNTgpOwotICAgICAgICBvdXRw
dXQuV3JpdGVTdHJpbmcoRGVmYXVsdFZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGlmIChvcHRpb25z
XyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg2Nik7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZU1lc3NhZ2UoT3B0aW9ucyk7Ci0gICAgICB9Ci0gICAgICBpZiAoT25lb2ZJbmRl
eCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg3Mik7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZUludDMyKE9uZW9mSW5kZXgpOwotICAgICAgfQotICAgICAgaWYgKEpzb25OYW1lLkxl
bmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg4Mik7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZVN0cmluZyhKc29uTmFtZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGlj
IGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYgKE5h
bWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtLkNvbXB1dGVTdHJpbmdTaXplKE5hbWUpOwotICAgICAgfQotICAgICAgaWYgKE51bWJlciAh
PSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRl
SW50MzJTaXplKE51bWJlcik7Ci0gICAgICB9Ci0gICAgICBpZiAoTGFiZWwgIT0gMCkgewotICAg
ICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUVudW1TaXplKChp
bnQpIExhYmVsKTsKLSAgICAgIH0KLSAgICAgIGlmIChUeXBlICE9IDApIHsKLSAgICAgICAgc2l6
ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBUeXBl
KTsKLSAgICAgIH0KLSAgICAgIGlmIChUeXBlTmFtZS5MZW5ndGggIT0gMCkgewotICAgICAgICBz
aXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoVHlwZU5h
bWUpOwotICAgICAgfQotICAgICAgaWYgKEV4dGVuZGVlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAg
IHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShFeHRl
bmRlZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoRGVmYXVsdFZhbHVlLkxlbmd0aCAhPSAwKSB7Ci0g
ICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6
ZShEZWZhdWx0VmFsdWUpOwotICAgICAgfQotICAgICAgaWYgKE9uZW9mSW5kZXggIT0gMCkgewot
ICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6
ZShPbmVvZkluZGV4KTsKLSAgICAgIH0KLSAgICAgIGlmIChKc29uTmFtZS5MZW5ndGggIT0gMCkg
ewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmlu
Z1NpemUoSnNvbk5hbWUpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbnNfICE9IG51bGwpIHsK
LSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdl
U2l6ZShPcHRpb25zKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAg
IHB1YmxpYyB2b2lkIE1lcmdlRnJvbShGaWVsZERlc2NyaXB0b3JQcm90byBvdGhlcikgewotICAg
ICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAg
aWYgKG90aGVyLk5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgTmFtZSA9IG90aGVyLk5hbWU7
Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTnVtYmVyICE9IDApIHsKLSAgICAgICAgTnVtYmVy
ID0gb3RoZXIuTnVtYmVyOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkxhYmVsICE9IDApIHsK
LSAgICAgICAgTGFiZWwgPSBvdGhlci5MYWJlbDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5U
eXBlICE9IDApIHsKLSAgICAgICAgVHlwZSA9IG90aGVyLlR5cGU7Ci0gICAgICB9Ci0gICAgICBp
ZiAob3RoZXIuVHlwZU5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgVHlwZU5hbWUgPSBvdGhl
ci5UeXBlTmFtZTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5FeHRlbmRlZS5MZW5ndGggIT0g
MCkgewotICAgICAgICBFeHRlbmRlZSA9IG90aGVyLkV4dGVuZGVlOwotICAgICAgfQotICAgICAg
aWYgKG90aGVyLkRlZmF1bHRWYWx1ZS5MZW5ndGggIT0gMCkgewotICAgICAgICBEZWZhdWx0VmFs
dWUgPSBvdGhlci5EZWZhdWx0VmFsdWU7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuT25lb2ZJ
bmRleCAhPSAwKSB7Ci0gICAgICAgIE9uZW9mSW5kZXggPSBvdGhlci5PbmVvZkluZGV4OwotICAg
ICAgfQotICAgICAgaWYgKG90aGVyLkpzb25OYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIEpz
b25OYW1lID0gb3RoZXIuSnNvbk5hbWU7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIub3B0aW9u
c18gIT0gbnVsbCkgewotICAgICAgICBpZiAob3B0aW9uc18gPT0gbnVsbCkgewotICAgICAgICAg
IG9wdGlvbnNfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmllbGRP
cHRpb25zKCk7Ci0gICAgICAgIH0KLSAgICAgICAgT3B0aW9ucy5NZXJnZUZyb20ob3RoZXIuT3B0
aW9ucyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpD
b2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgo
dGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgTmFtZSA9
IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBFeHRlbmRlZSA9IGlucHV0LlJlYWRTdHJp
bmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI0
OiB7Ci0gICAgICAgICAgICBOdW1iZXIgPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDMyOiB7Ci0gICAgICAgICAgICBs
YWJlbF8gPSAoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5GaWVsZERlc2NyaXB0
b3JQcm90by5UeXBlcy5MYWJlbCkgaW5wdXQuUmVhZEVudW0oKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDQwOiB7Ci0gICAgICAgICAgICB0eXBlXyA9
IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZpZWxkRGVzY3JpcHRvclByb3Rv
LlR5cGVzLlR5cGUpIGlucHV0LlJlYWRFbnVtKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgY2FzZSA1MDogewotICAgICAgICAgICAgVHlwZU5hbWUgPSBpbnB1
dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgY2FzZSA1ODogewotICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0gaW5wdXQuUmVhZFN0cmlu
ZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNjY6
IHsKLSAgICAgICAgICAgIGlmIChvcHRpb25zXyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIG9w
dGlvbnNfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmllbGRPcHRp
b25zKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZShvcHRp
b25zXyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA3
MjogewotICAgICAgICAgICAgT25lb2ZJbmRleCA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgODI6IHsKLSAgICAgICAg
ICAgIEpzb25OYW1lID0gaW5wdXQuUmVhZFN0cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgI3JlZ2lvbiBOZXN0
ZWQgdHlwZXMKLSAgICAvLy8gPHN1bW1hcnk+Q29udGFpbmVyIGZvciBuZXN0ZWQgdHlwZXMgZGVj
bGFyZWQgaW4gdGhlIEZpZWxkRGVzY3JpcHRvclByb3RvIG1lc3NhZ2UgdHlwZS48L3N1bW1hcnk+
Ci0gICAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRy
aWJ1dGUoKV0KLSAgICBwdWJsaWMgc3RhdGljIHBhcnRpYWwgY2xhc3MgVHlwZXMgewotICAgICAg
aW50ZXJuYWwgZW51bSBUeXBlIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8g
IDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycy4KLSAgICAgICAgLy8vICBPcmRlciBpcyB3ZWlyZCBm
b3IgaGlzdG9yaWNhbCByZWFzb25zLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBb
cGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfRE9VQkxFIildIERvdWJsZSA9IDEsCi0gICAgICAgIFtw
YnI6Ok9yaWdpbmFsTmFtZSgiVFlQRV9GTE9BVCIpXSBGbG9hdCA9IDIsCi0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vICBOb3QgWmlnWmFnIGVuY29kZWQuICBOZWdhdGl2ZSBudW1i
ZXJzIHRha2UgMTAgYnl0ZXMuICBVc2UgVFlQRV9TSU5UNjQgaWYKLSAgICAgICAgLy8vICBuZWdh
dGl2ZSB2YWx1ZXMgYXJlIGxpa2VseS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
W3Bicjo6T3JpZ2luYWxOYW1lKCJUWVBFX0lOVDY0IildIEludDY0ID0gMywKLSAgICAgICAgW3Bi
cjo6T3JpZ2luYWxOYW1lKCJUWVBFX1VJTlQ2NCIpXSBVaW50NjQgPSA0LAotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVt
YmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDMyIGlmCi0gICAgICAgIC8vLyAgbmVn
YXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IFtwYnI6Ok9yaWdpbmFsTmFtZSgiVFlQRV9JTlQzMiIpXSBJbnQzMiA9IDUsCi0gICAgICAgIFtw
YnI6Ok9yaWdpbmFsTmFtZSgiVFlQRV9GSVhFRDY0IildIEZpeGVkNjQgPSA2LAotICAgICAgICBb
cGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfRklYRUQzMiIpXSBGaXhlZDMyID0gNywKLSAgICAgICAg
W3Bicjo6T3JpZ2luYWxOYW1lKCJUWVBFX0JPT0wiKV0gQm9vbCA9IDgsCi0gICAgICAgIFtwYnI6
Ok9yaWdpbmFsTmFtZSgiVFlQRV9TVFJJTkciKV0gU3RyaW5nID0gOSwKLSAgICAgICAgLy8vIDxz
dW1tYXJ5PgotICAgICAgICAvLy8gIFRhZy1kZWxpbWl0ZWQgYWdncmVnYXRlLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfR1JPVVAiKV0g
R3JvdXAgPSAxMCwKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gIExlbmd0aC1k
ZWxpbWl0ZWQgYWdncmVnYXRlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBbcGJy
OjpPcmlnaW5hbE5hbWUoIlRZUEVfTUVTU0FHRSIpXSBNZXNzYWdlID0gMTEsCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBOZXcgaW4gdmVyc2lvbiAyLgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfQllURVMiKV0gQnl0
ZXMgPSAxMiwKLSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJUWVBFX1VJTlQzMiIpXSBVaW50
MzIgPSAxMywKLSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJUWVBFX0VOVU0iKV0gRW51bSA9
IDE0LAotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfU0ZJWEVEMzIiKV0gU2ZpeGVk
MzIgPSAxNSwKLSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJUWVBFX1NGSVhFRDY0IildIFNm
aXhlZDY0ID0gMTYsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBVc2VzIFpp
Z1phZyBlbmNvZGluZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgW3Bicjo6T3Jp
Z2luYWxOYW1lKCJUWVBFX1NJTlQzMiIpXSBTaW50MzIgPSAxNywKLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gIFVzZXMgWmlnWmFnIGVuY29kaW5nLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfU0lOVDY0IildIFNpbnQ2
NCA9IDE4LAotICAgICAgfQotCi0gICAgICBpbnRlcm5hbCBlbnVtIExhYmVsIHsKLSAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycwotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkxBQkVMX09Q
VElPTkFMIildIE9wdGlvbmFsID0gMSwKLSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJMQUJF
TF9SRVFVSVJFRCIpXSBSZXF1aXJlZCA9IDIsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vICBUT0RPKHNhbmpheSk6IFNob3VsZCB3ZSBhZGQgTEFCRUxfTUFQPwotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkxBQkVMX1JFUEVBVEVE
IildIFJlcGVhdGVkID0gMywKLSAgICAgIH0KLQotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAg
fQotCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBEZXNjcmliZXMgYSBvbmVvZi4KLSAgLy8vIDwv
c3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNv
ZGVBdHRyaWJ1dGUoKV0KLSAgaW50ZXJuYWwgc2VhbGVkIHBhcnRpYWwgY2xhc3MgT25lb2ZEZXNj
cmlwdG9yUHJvdG8gOiBwYjo6SU1lc3NhZ2U8T25lb2ZEZXNjcmlwdG9yUHJvdG8+IHsKLSAgICBw
cml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxPbmVvZkRlc2NyaXB0b3JQ
cm90bz4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxPbmVvZkRlc2NyaXB0b3JQcm90
bz4oKCkgPT4gbmV3IE9uZW9mRGVzY3JpcHRvclByb3RvKCkpOwotICAgIHB1YmxpYyBzdGF0aWMg
cGI6Ok1lc3NhZ2VQYXJzZXI8T25lb2ZEZXNjcmlwdG9yUHJvdG8+IFBhcnNlciB7IGdldCB7IHJl
dHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3Jp
cHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5SZWZsZWN0aW9uLkRlc2NyaXB0b3JSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5
cGVzWzRdOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3Nh
Z2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0K
LQotICAgIHB1YmxpYyBPbmVvZkRlc2NyaXB0b3JQcm90bygpIHsKLSAgICAgIE9uQ29uc3RydWN0
aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAg
ICBwdWJsaWMgT25lb2ZEZXNjcmlwdG9yUHJvdG8oT25lb2ZEZXNjcmlwdG9yUHJvdG8gb3RoZXIp
IDogdGhpcygpIHsKLSAgICAgIG5hbWVfID0gb3RoZXIubmFtZV87Ci0gICAgfQotCi0gICAgcHVi
bGljIE9uZW9mRGVzY3JpcHRvclByb3RvIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBPbmVv
ZkRlc2NyaXB0b3JQcm90byh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgIm5hbWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3Qg
aW50IE5hbWVGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgbmFtZV8gPSAiIjsK
LSAgICBwdWJsaWMgc3RyaW5nIE5hbWUgewotICAgICAgZ2V0IHsgcmV0dXJuIG5hbWVfOyB9Ci0g
ICAgICBzZXQgewotICAgICAgICBuYW1lXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tO
b3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3Zl
cnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90
aGVyIGFzIE9uZW9mRGVzY3JpcHRvclByb3RvKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBF
cXVhbHMoT25lb2ZEZXNjcmlwdG9yUHJvdG8gb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VF
cXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAg
ICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfQotICAgICAgaWYgKE5hbWUgIT0gb3RoZXIuTmFtZSkgcmV0dXJuIGZhbHNl
OwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBH
ZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChOYW1lLkxlbmd0
aCAhPSAwKSBoYXNoIF49IE5hbWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwot
ICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICBy
ZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkg
ewotICAgICAgaWYgKE5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3
VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKE5hbWUpOwotICAgICAgfQotICAg
IH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0g
MDsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBi
OjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShOYW1lKTsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShPbmVv
ZkRlc2NyaXB0b3JQcm90byBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk5hbWUuTGVuZ3RoICE9IDAp
IHsKLSAgICAgICAgTmFtZSA9IG90aGVyLk5hbWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVi
bGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1
aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0g
ICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5w
dXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAx
MDogewotICAgICAgICAgICAgTmFtZSA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0K
LSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIERlc2NyaWJlcyBhbiBlbnVtIHR5cGUuCi0gIC8vLyA8
L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJD
b2RlQXR0cmlidXRlKCldCi0gIGludGVybmFsIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIEVudW1EZXNj
cmlwdG9yUHJvdG8gOiBwYjo6SU1lc3NhZ2U8RW51bURlc2NyaXB0b3JQcm90bz4gewotICAgIHBy
aXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPEVudW1EZXNjcmlwdG9yUHJv
dG8+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8RW51bURlc2NyaXB0b3JQcm90bz4o
KCkgPT4gbmV3IEVudW1EZXNjcmlwdG9yUHJvdG8oKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6
TWVzc2FnZVBhcnNlcjxFbnVtRGVzY3JpcHRvclByb3RvPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4g
X3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3Ig
RGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
UmVmbGVjdGlvbi5EZXNjcmlwdG9yUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1s1
XTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRl
c2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAg
ICBwdWJsaWMgRW51bURlc2NyaXB0b3JQcm90bygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7
Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJs
aWMgRW51bURlc2NyaXB0b3JQcm90byhFbnVtRGVzY3JpcHRvclByb3RvIG90aGVyKSA6IHRoaXMo
KSB7Ci0gICAgICBuYW1lXyA9IG90aGVyLm5hbWVfOwotICAgICAgdmFsdWVfID0gb3RoZXIudmFs
dWVfLkNsb25lKCk7Ci0gICAgICBPcHRpb25zID0gb3RoZXIub3B0aW9uc18gIT0gbnVsbCA/IG90
aGVyLk9wdGlvbnMuQ2xvbmUoKSA6IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIEVudW1EZXNj
cmlwdG9yUHJvdG8gQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IEVudW1EZXNjcmlwdG9yUHJv
dG8odGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJuYW1lIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBOYW1lRmllbGRO
dW1iZXIgPSAxOwotICAgIHByaXZhdGUgc3RyaW5nIG5hbWVfID0gIiI7Ci0gICAgcHVibGljIHN0
cmluZyBOYW1lIHsKLSAgICAgIGdldCB7IHJldHVybiBuYW1lXzsgfQotICAgICAgc2V0IHsKLSAg
ICAgICAgbmFtZV8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwg
InZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJ2YWx1ZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
VmFsdWVGaWVsZE51bWJlciA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZp
ZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5FbnVtVmFsdWVEZXNj
cmlwdG9yUHJvdG8+IF9yZXBlYXRlZF92YWx1ZV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENv
ZGVjLkZvck1lc3NhZ2UoMTgsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRW51
bVZhbHVlRGVzY3JpcHRvclByb3RvLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6
OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5FbnVtVmFs
dWVEZXNjcmlwdG9yUHJvdG8+IHZhbHVlXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8+KCk7
Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5S
ZWZsZWN0aW9uLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bz4gVmFsdWUgewotICAgICAgZ2V0IHsg
cmV0dXJuIHZhbHVlXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAib3B0aW9ucyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
T3B0aW9uc0ZpZWxkTnVtYmVyID0gMzsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlJlZmxlY3Rpb24uRW51bU9wdGlvbnMgb3B0aW9uc187Ci0gICAgcHVibGljIGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRW51bU9wdGlvbnMgT3B0aW9ucyB7Ci0gICAgICBn
ZXQgeyByZXR1cm4gb3B0aW9uc187IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9wdGlvbnNfID0g
dmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxz
KG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBFbnVtRGVzY3Jp
cHRvclByb3RvKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoRW51bURlc2NyaXB0
b3JQcm90byBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkp
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVx
dWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAg
ICBpZiAoTmFtZSAhPSBvdGhlci5OYW1lKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighdmFsdWVf
LkVxdWFscyhvdGhlci52YWx1ZV8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5F
cXVhbHMoT3B0aW9ucywgb3RoZXIuT3B0aW9ucykpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7
Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoTmFtZS5MZW5ndGggIT0gMCkgaGFzaCBe
PSBOYW1lLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHZhbHVlXy5HZXRIYXNoQ29kZSgp
OwotICAgICAgaWYgKG9wdGlvbnNfICE9IG51bGwpIGhhc2ggXj0gT3B0aW9ucy5HZXRIYXNoQ29k
ZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0
cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdu
b3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6
Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoTmFtZS5MZW5ndGggIT0gMCkg
ewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTApOwotICAgICAgICBvdXRwdXQuV3JpdGVT
dHJpbmcoTmFtZSk7Ci0gICAgICB9Ci0gICAgICB2YWx1ZV8uV3JpdGVUbyhvdXRwdXQsIF9yZXBl
YXRlZF92YWx1ZV9jb2RlYyk7Ci0gICAgICBpZiAob3B0aW9uc18gIT0gbnVsbCkgewotICAgICAg
ICBvdXRwdXQuV3JpdGVSYXdUYWcoMjYpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKE9w
dGlvbnMpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgp
IHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0g
ICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6
ZShOYW1lKTsKLSAgICAgIH0KLSAgICAgIHNpemUgKz0gdmFsdWVfLkNhbGN1bGF0ZVNpemUoX3Jl
cGVhdGVkX3ZhbHVlX2NvZGVjKTsKLSAgICAgIGlmIChvcHRpb25zXyAhPSBudWxsKSB7Ci0gICAg
ICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUo
T3B0aW9ucyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgdm9pZCBNZXJnZUZyb20oRW51bURlc2NyaXB0b3JQcm90byBvdGhlcikgewotICAgICAgaWYg
KG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90
aGVyLk5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgTmFtZSA9IG90aGVyLk5hbWU7Ci0gICAg
ICB9Ci0gICAgICB2YWx1ZV8uQWRkKG90aGVyLnZhbHVlXyk7Ci0gICAgICBpZiAob3RoZXIub3B0
aW9uc18gIT0gbnVsbCkgewotICAgICAgICBpZiAob3B0aW9uc18gPT0gbnVsbCkgewotICAgICAg
ICAgIG9wdGlvbnNfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRW51
bU9wdGlvbnMoKTsKLSAgICAgICAgfQotICAgICAgICBPcHRpb25zLk1lcmdlRnJvbShvdGhlci5P
cHRpb25zKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6
OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUg
KCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDEwOiB7Ci0gICAgICAgICAgICBOYW1l
ID0gaW5wdXQuUmVhZFN0cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgMTg6IHsKLSAgICAgICAgICAgIHZhbHVlXy5BZGRFbnRyaWVzRnJvbShp
bnB1dCwgX3JlcGVhdGVkX3ZhbHVlX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBjYXNlIDI2OiB7Ci0gICAgICAgICAgICBpZiAob3B0aW9uc18gPT0g
bnVsbCkgewotICAgICAgICAgICAgICBvcHRpb25zXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5SZWZsZWN0aW9uLkVudW1PcHRpb25zKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpbnB1dC5SZWFkTWVzc2FnZShvcHRpb25zXyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8c3VtbWFy
eT4KLSAgLy8vICBEZXNjcmliZXMgYSB2YWx1ZSB3aXRoaW4gYW4gZW51bS4KLSAgLy8vIDwvc3Vt
bWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVB
dHRyaWJ1dGUoKV0KLSAgaW50ZXJuYWwgc2VhbGVkIHBhcnRpYWwgY2xhc3MgRW51bVZhbHVlRGVz
Y3JpcHRvclByb3RvIDogcGI6OklNZXNzYWdlPEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bz4gewot
ICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPEVudW1WYWx1ZURl
c2NyaXB0b3JQcm90bz4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxFbnVtVmFsdWVE
ZXNjcmlwdG9yUHJvdG8+KCgpID0+IG5ldyBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8oKSk7Ci0g
ICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxFbnVtVmFsdWVEZXNjcmlwdG9yUHJv
dG8+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0
aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVy
biBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRlc2NyaXB0b3JSZWZsZWN0aW9u
LkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzZdOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdl
RGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4g
RGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBFbnVtVmFsdWVEZXNjcmlwdG9yUHJv
dG8oKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9p
ZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90
byhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIG5hbWVf
ID0gb3RoZXIubmFtZV87Ci0gICAgICBudW1iZXJfID0gb3RoZXIubnVtYmVyXzsKLSAgICAgIE9w
dGlvbnMgPSBvdGhlci5vcHRpb25zXyAhPSBudWxsID8gb3RoZXIuT3B0aW9ucy5DbG9uZSgpIDog
bnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIENsb25l
KCkgewotICAgICAgcmV0dXJuIG5ldyBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8odGhpcyk7Ci0g
ICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJuYW1lIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBOYW1lRmllbGROdW1iZXIgPSAxOwot
ICAgIHByaXZhdGUgc3RyaW5nIG5hbWVfID0gIiI7Ci0gICAgcHVibGljIHN0cmluZyBOYW1lIHsK
LSAgICAgIGdldCB7IHJldHVybiBuYW1lXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgbmFtZV8g
PSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJu
dW1iZXIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE51bWJlckZpZWxk
TnVtYmVyID0gMjsKLSAgICBwcml2YXRlIGludCBudW1iZXJfOwotICAgIHB1YmxpYyBpbnQgTnVt
YmVyIHsKLSAgICAgIGdldCB7IHJldHVybiBudW1iZXJfOyB9Ci0gICAgICBzZXQgewotICAgICAg
ICBudW1iZXJfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZp
ZWxkIG51bWJlciBmb3IgdGhlICJvcHRpb25zIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGlj
IGNvbnN0IGludCBPcHRpb25zRmllbGROdW1iZXIgPSAzOwotICAgIHByaXZhdGUgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5FbnVtVmFsdWVPcHRpb25zIG9wdGlvbnNfOwotICAg
IHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkVudW1WYWx1ZU9wdGlv
bnMgT3B0aW9ucyB7Ci0gICAgICBnZXQgeyByZXR1cm4gb3B0aW9uc187IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIG9wdGlvbnNfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGlj
IG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFs
cyhvdGhlciBhcyBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8pOwotICAgIH0KLQotICAgIHB1Ymxp
YyBib29sIEVxdWFscyhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gb3RoZXIpIHsKLSAgICAgIGlm
IChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKE5hbWUgIT0gb3RoZXIuTmFtZSkg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE51bWJlciAhPSBvdGhlci5OdW1iZXIpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmICghb2JqZWN0LkVxdWFscyhPcHRpb25zLCBvdGhlci5PcHRpb25zKSkg
cmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92
ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlm
IChOYW1lLkxlbmd0aCAhPSAwKSBoYXNoIF49IE5hbWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlm
IChOdW1iZXIgIT0gMCkgaGFzaCBePSBOdW1iZXIuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChv
cHRpb25zXyAhPSBudWxsKSBoYXNoIF49IE9wdGlvbnMuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJl
dHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmco
KSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRo
aXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtIG91dHB1dCkgewotICAgICAgaWYgKE5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0
cHV0LldyaXRlUmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKE5hbWUpOwot
ICAgICAgfQotICAgICAgaWYgKE51bWJlciAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJh
d1RhZygxNik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUludDMyKE51bWJlcik7Ci0gICAgICB9Ci0g
ICAgICBpZiAob3B0aW9uc18gIT0gbnVsbCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWco
MjYpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKE9wdGlvbnMpOwotICAgICAgfQotICAg
IH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0g
MDsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBi
OjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShOYW1lKTsKLSAgICAgIH0KLSAg
ICAgIGlmIChOdW1iZXIgIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRw
dXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShOdW1iZXIpOwotICAgICAgfQotICAgICAgaWYgKG9w
dGlvbnNfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShPcHRpb25zKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBz
aXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShFbnVtVmFsdWVEZXNjcmlw
dG9yUHJvdG8gb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5OYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAg
ICAgIE5hbWUgPSBvdGhlci5OYW1lOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk51bWJlciAh
PSAwKSB7Ci0gICAgICAgIE51bWJlciA9IG90aGVyLk51bWJlcjsKLSAgICAgIH0KLSAgICAgIGlm
IChvdGhlci5vcHRpb25zXyAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChvcHRpb25zXyA9PSBudWxs
KSB7Ci0gICAgICAgICAgb3B0aW9uc18gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVm
bGVjdGlvbi5FbnVtVmFsdWVPcHRpb25zKCk7Ci0gICAgICAgIH0KLSAgICAgICAgT3B0aW9ucy5N
ZXJnZUZyb20ob3RoZXIuT3B0aW9ucyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRh
ZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAg
IHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tp
cExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewot
ICAgICAgICAgICAgTmFtZSA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE2OiB7Ci0gICAgICAgICAgICBOdW1iZXIg
PSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDI2OiB7Ci0gICAgICAgICAgICBpZiAob3B0aW9uc18gPT0gbnVsbCkgewot
ICAgICAgICAgICAgICBvcHRpb25zXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZs
ZWN0aW9uLkVudW1WYWx1ZU9wdGlvbnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlu
cHV0LlJlYWRNZXNzYWdlKG9wdGlvbnNfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5Pgot
ICAvLy8gIERlc2NyaWJlcyBhIHNlcnZpY2UuCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6
OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIGlu
dGVybmFsIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8gOiBwYjo6
SU1lc3NhZ2U8U2VydmljZURlc2NyaXB0b3JQcm90bz4gewotICAgIHByaXZhdGUgc3RhdGljIHJl
YWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8+IF9wYXJzZXIg
PSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8U2VydmljZURlc2NyaXB0b3JQcm90bz4oKCkgPT4gbmV3
IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8oKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2Fn
ZVBhcnNlcjxTZXJ2aWNlRGVzY3JpcHRvclByb3RvPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3Bh
cnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVz
Y3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVm
bGVjdGlvbi5EZXNjcmlwdG9yUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1s3XTsg
fQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2Ny
aXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgU2VydmljZURlc2NyaXB0b3JQcm90bygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7
Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJs
aWMgU2VydmljZURlc2NyaXB0b3JQcm90byhTZXJ2aWNlRGVzY3JpcHRvclByb3RvIG90aGVyKSA6
IHRoaXMoKSB7Ci0gICAgICBuYW1lXyA9IG90aGVyLm5hbWVfOwotICAgICAgbWV0aG9kXyA9IG90
aGVyLm1ldGhvZF8uQ2xvbmUoKTsKLSAgICAgIE9wdGlvbnMgPSBvdGhlci5vcHRpb25zXyAhPSBu
dWxsID8gb3RoZXIuT3B0aW9ucy5DbG9uZSgpIDogbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
U2VydmljZURlc2NyaXB0b3JQcm90byBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgU2Vydmlj
ZURlc2NyaXB0b3JQcm90byh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgIm5hbWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3Qg
aW50IE5hbWVGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgbmFtZV8gPSAiIjsK
LSAgICBwdWJsaWMgc3RyaW5nIE5hbWUgewotICAgICAgZ2V0IHsgcmV0dXJuIG5hbWVfOyB9Ci0g
ICAgICBzZXQgewotICAgICAgICBuYW1lXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tO
b3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1h
cnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm1ldGhvZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBjb25zdCBpbnQgTWV0aG9kRmllbGROdW1iZXIgPSAyOwotICAgIHByaXZhdGUgc3RhdGlj
IHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rp
b24uTWV0aG9kRGVzY3JpcHRvclByb3RvPiBfcmVwZWF0ZWRfbWV0aG9kX2NvZGVjCi0gICAgICAg
ID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgxOCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
UmVmbGVjdGlvbi5NZXRob2REZXNjcmlwdG9yUHJvdG8uUGFyc2VyKTsKLSAgICBwcml2YXRlIHJl
YWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0
aW9uLk1ldGhvZERlc2NyaXB0b3JQcm90bz4gbWV0aG9kXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmll
bGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5NZXRob2REZXNjcmlwdG9yUHJv
dG8+KCk7Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5SZWZsZWN0aW9uLk1ldGhvZERlc2NyaXB0b3JQcm90bz4gTWV0aG9kIHsKLSAgICAgIGdl
dCB7IHJldHVybiBtZXRob2RfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJvcHRpb25zIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBPcHRpb25zRmllbGROdW1iZXIgPSAzOwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuUmVmbGVjdGlvbi5TZXJ2aWNlT3B0aW9ucyBvcHRpb25zXzsKLSAgICBwdWJsaWMg
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5TZXJ2aWNlT3B0aW9ucyBPcHRpb25z
IHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25zXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
b3B0aW9uc18gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUg
Ym9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFz
IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8pOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFs
cyhTZXJ2aWNlRGVzY3JpcHRvclByb3RvIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1
YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAg
ICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIH0KLSAgICAgIGlmIChOYW1lICE9IG90aGVyLk5hbWUpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmKCFtZXRob2RfLkVxdWFscyhvdGhlci5tZXRob2RfKSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKE9wdGlvbnMsIG90aGVyLk9wdGlvbnMpKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUg
aW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKE5hbWUu
TGVuZ3RoICE9IDApIGhhc2ggXj0gTmFtZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBt
ZXRob2RfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAob3B0aW9uc18gIT0gbnVsbCkgaGFzaCBe
PSBPcHRpb25zLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpK
c29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlm
IChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhOYW1lKTsKLSAgICAgIH0KLSAgICAgIG1ldGhvZF8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9tZXRob2RfY29kZWMpOwotICAgICAgaWYgKG9wdGlv
bnNfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDI2KTsKLSAgICAgICAg
b3V0cHV0LldyaXRlTWVzc2FnZShPcHRpb25zKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJs
aWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAo
TmFtZS5MZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRT
dHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoTmFtZSk7Ci0gICAgICB9Ci0gICAgICBzaXplICs9IG1l
dGhvZF8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfbWV0aG9kX2NvZGVjKTsKLSAgICAgIGlmIChv
cHRpb25zXyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0
cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoT3B0aW9ucyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
c2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oU2VydmljZURlc2NyaXB0
b3JQcm90byBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAg
ICAgTmFtZSA9IG90aGVyLk5hbWU7Ci0gICAgICB9Ci0gICAgICBtZXRob2RfLkFkZChvdGhlci5t
ZXRob2RfKTsKLSAgICAgIGlmIChvdGhlci5vcHRpb25zXyAhPSBudWxsKSB7Ci0gICAgICAgIGlm
IChvcHRpb25zXyA9PSBudWxsKSB7Ci0gICAgICAgICAgb3B0aW9uc18gPSBuZXcgZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5TZXJ2aWNlT3B0aW9ucygpOwotICAgICAgICB9Ci0g
ICAgICAgIE9wdGlvbnMuTWVyZ2VGcm9tKG90aGVyLk9wdGlvbnMpOwotICAgICAgfQotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkg
ewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkg
IT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIE5hbWUgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxODogewotICAg
ICAgICAgICAgbWV0aG9kXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX21ldGhvZF9j
b2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAy
NjogewotICAgICAgICAgICAgaWYgKG9wdGlvbnNfID09IG51bGwpIHsKLSAgICAgICAgICAgICAg
b3B0aW9uc18gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5TZXJ2aWNl
T3B0aW9ucygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2Uo
b3B0aW9uc18pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgRGVzY3JpYmVz
IGEgbWV0aG9kIG9mIGEgc2VydmljZS4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lz
dGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgaW50ZXJu
YWwgc2VhbGVkIHBhcnRpYWwgY2xhc3MgTWV0aG9kRGVzY3JpcHRvclByb3RvIDogcGI6OklNZXNz
YWdlPE1ldGhvZERlc2NyaXB0b3JQcm90bz4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5
IHBiOjpNZXNzYWdlUGFyc2VyPE1ldGhvZERlc2NyaXB0b3JQcm90bz4gX3BhcnNlciA9IG5ldyBw
Yjo6TWVzc2FnZVBhcnNlcjxNZXRob2REZXNjcmlwdG9yUHJvdG8+KCgpID0+IG5ldyBNZXRob2RE
ZXNjcmlwdG9yUHJvdG8oKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxN
ZXRob2REZXNjcmlwdG9yUHJvdG8+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0K
LQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRl
c2NyaXB0b3JSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzhdOyB9Ci0gICAgfQot
Ci0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBNZXRo
b2REZXNjcmlwdG9yUHJvdG8oKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQot
ICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIE1ldGhvZERl
c2NyaXB0b3JQcm90byhNZXRob2REZXNjcmlwdG9yUHJvdG8gb3RoZXIpIDogdGhpcygpIHsKLSAg
ICAgIG5hbWVfID0gb3RoZXIubmFtZV87Ci0gICAgICBpbnB1dFR5cGVfID0gb3RoZXIuaW5wdXRU
eXBlXzsKLSAgICAgIG91dHB1dFR5cGVfID0gb3RoZXIub3V0cHV0VHlwZV87Ci0gICAgICBPcHRp
b25zID0gb3RoZXIub3B0aW9uc18gIT0gbnVsbCA/IG90aGVyLk9wdGlvbnMuQ2xvbmUoKSA6IG51
bGw7Ci0gICAgICBjbGllbnRTdHJlYW1pbmdfID0gb3RoZXIuY2xpZW50U3RyZWFtaW5nXzsKLSAg
ICAgIHNlcnZlclN0cmVhbWluZ18gPSBvdGhlci5zZXJ2ZXJTdHJlYW1pbmdfOwotICAgIH0KLQot
ICAgIHB1YmxpYyBNZXRob2REZXNjcmlwdG9yUHJvdG8gQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4g
bmV3IE1ldGhvZERlc2NyaXB0b3JQcm90byh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1h
cnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm5hbWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IE5hbWVGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgbmFt
ZV8gPSAiIjsKLSAgICBwdWJsaWMgc3RyaW5nIE5hbWUgewotICAgICAgZ2V0IHsgcmV0dXJuIG5h
bWVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBuYW1lXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlv
bnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImlucHV0X3R5cGUiIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IElucHV0VHlwZUZpZWxkTnVtYmVyID0gMjsKLSAg
ICBwcml2YXRlIHN0cmluZyBpbnB1dFR5cGVfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAg
IC8vLyAgSW5wdXQgYW5kIG91dHB1dCB0eXBlIG5hbWVzLiAgVGhlc2UgYXJlIHJlc29sdmVkIGlu
IHRoZSBzYW1lIHdheSBhcwotICAgIC8vLyAgRmllbGREZXNjcmlwdG9yUHJvdG8udHlwZV9uYW1l
LCBidXQgbXVzdCByZWZlciB0byBhIG1lc3NhZ2UgdHlwZS4KLSAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBzdHJpbmcgSW5wdXRUeXBlIHsKLSAgICAgIGdldCB7IHJldHVybiBpbnB1dFR5
cGVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBpbnB1dFR5cGVfID0gcGI6OlByb3RvUHJlY29u
ZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3V0cHV0X3R5cGUiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE91dHB1dFR5cGVGaWVsZE51bWJlciA9
IDM7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgb3V0cHV0VHlwZV8gPSAiIjsKLSAgICBwdWJsaWMgc3Ry
aW5nIE91dHB1dFR5cGUgewotICAgICAgZ2V0IHsgcmV0dXJuIG91dHB1dFR5cGVfOyB9Ci0gICAg
ICBzZXQgewotICAgICAgICBvdXRwdXRUeXBlXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hl
Y2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlvbnMiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IE9wdGlvbnNGaWVsZE51bWJlciA9IDQ7Ci0gICAgcHJpdmF0ZSBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLk1ldGhvZE9wdGlvbnMgb3B0aW9uc187
Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uTWV0aG9kT3B0
aW9ucyBPcHRpb25zIHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25zXzsgfQotICAgICAgc2V0
IHsKLSAgICAgICAgb3B0aW9uc18gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8g
PHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImNsaWVudF9zdHJlYW1pbmciIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IENsaWVudFN0cmVhbWluZ0ZpZWxkTnVtYmVy
ID0gNTsKLSAgICBwcml2YXRlIGJvb2wgY2xpZW50U3RyZWFtaW5nXzsKLSAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgLy8vICBJZGVudGlmaWVzIGlmIGNsaWVudCBzdHJlYW1zIG11bHRpcGxlIGNsaWVu
dCBtZXNzYWdlcwotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGJvb2wgQ2xpZW50U3Ry
ZWFtaW5nIHsKLSAgICAgIGdldCB7IHJldHVybiBjbGllbnRTdHJlYW1pbmdfOyB9Ci0gICAgICBz
ZXQgewotICAgICAgICBjbGllbnRTdHJlYW1pbmdfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzZXJ2ZXJfc3RyZWFtaW5n
IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTZXJ2ZXJTdHJlYW1pbmdG
aWVsZE51bWJlciA9IDY7Ci0gICAgcHJpdmF0ZSBib29sIHNlcnZlclN0cmVhbWluZ187Ci0gICAg
Ly8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSWRlbnRpZmllcyBpZiBzZXJ2ZXIgc3RyZWFtcyBtdWx0
aXBsZSBzZXJ2ZXIgbWVzc2FnZXMKLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBib29s
IFNlcnZlclN0cmVhbWluZyB7Ci0gICAgICBnZXQgeyByZXR1cm4gc2VydmVyU3RyZWFtaW5nXzsg
fQotICAgICAgc2V0IHsKLSAgICAgICAgc2VydmVyU3RyZWFtaW5nXyA9IHZhbHVlOwotICAgICAg
fQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIp
IHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgTWV0aG9kRGVzY3JpcHRvclByb3RvKTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoTWV0aG9kRGVzY3JpcHRvclByb3RvIG90
aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVy
LCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChOYW1l
ICE9IG90aGVyLk5hbWUpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChJbnB1dFR5cGUgIT0gb3Ro
ZXIuSW5wdXRUeXBlKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoT3V0cHV0VHlwZSAhPSBvdGhl
ci5PdXRwdXRUeXBlKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoT3B0
aW9ucywgb3RoZXIuT3B0aW9ucykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChDbGllbnRTdHJl
YW1pbmcgIT0gb3RoZXIuQ2xpZW50U3RyZWFtaW5nKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAo
U2VydmVyU3RyZWFtaW5nICE9IG90aGVyLlNlcnZlclN0cmVhbWluZykgcmV0dXJuIGZhbHNlOwot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRI
YXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAh
PSAwKSBoYXNoIF49IE5hbWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChJbnB1dFR5cGUuTGVu
Z3RoICE9IDApIGhhc2ggXj0gSW5wdXRUeXBlLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoT3V0
cHV0VHlwZS5MZW5ndGggIT0gMCkgaGFzaCBePSBPdXRwdXRUeXBlLkdldEhhc2hDb2RlKCk7Ci0g
ICAgICBpZiAob3B0aW9uc18gIT0gbnVsbCkgaGFzaCBePSBPcHRpb25zLkdldEhhc2hDb2RlKCk7
Ci0gICAgICBpZiAoQ2xpZW50U3RyZWFtaW5nICE9IGZhbHNlKSBoYXNoIF49IENsaWVudFN0cmVh
bWluZy5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKFNlcnZlclN0cmVhbWluZyAhPSBmYWxzZSkg
aGFzaCBePSBTZXJ2ZXJTdHJlYW1pbmcuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNo
OwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAg
ICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1
dCkgewotICAgICAgaWYgKE5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRl
UmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKE5hbWUpOwotICAgICAgfQot
ICAgICAgaWYgKElucHV0VHlwZS5MZW5ndGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVS
YXdUYWcoMTgpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoSW5wdXRUeXBlKTsKLSAgICAg
IH0KLSAgICAgIGlmIChPdXRwdXRUeXBlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5X
cml0ZVJhd1RhZygyNik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhPdXRwdXRUeXBlKTsK
LSAgICAgIH0KLSAgICAgIGlmIChvcHRpb25zXyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5X
cml0ZVJhd1RhZygzNCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoT3B0aW9ucyk7Ci0g
ICAgICB9Ci0gICAgICBpZiAoQ2xpZW50U3RyZWFtaW5nICE9IGZhbHNlKSB7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZVJhd1RhZyg0MCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUJvb2woQ2xpZW50U3Ry
ZWFtaW5nKTsKLSAgICAgIH0KLSAgICAgIGlmIChTZXJ2ZXJTdHJlYW1pbmcgIT0gZmFsc2UpIHsK
LSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDQ4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlQm9v
bChTZXJ2ZXJTdHJlYW1pbmcpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2Fs
Y3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChOYW1lLkxlbmd0
aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21w
dXRlU3RyaW5nU2l6ZShOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmIChJbnB1dFR5cGUuTGVuZ3Ro
ICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1
dGVTdHJpbmdTaXplKElucHV0VHlwZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoT3V0cHV0VHlwZS5M
ZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0u
Q29tcHV0ZVN0cmluZ1NpemUoT3V0cHV0VHlwZSk7Ci0gICAgICB9Ci0gICAgICBpZiAob3B0aW9u
c18gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0u
Q29tcHV0ZU1lc3NhZ2VTaXplKE9wdGlvbnMpOwotICAgICAgfQotICAgICAgaWYgKENsaWVudFN0
cmVhbWluZyAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9IDEgKyAxOwotICAgICAgfQotICAg
ICAgaWYgKFNlcnZlclN0cmVhbWluZyAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9IDEgKyAx
OwotICAgICAgfQotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
TWVyZ2VGcm9tKE1ldGhvZERlc2NyaXB0b3JQcm90byBvdGhlcikgewotICAgICAgaWYgKG90aGVy
ID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk5h
bWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgTmFtZSA9IG90aGVyLk5hbWU7Ci0gICAgICB9Ci0g
ICAgICBpZiAob3RoZXIuSW5wdXRUeXBlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIElucHV0VHlw
ZSA9IG90aGVyLklucHV0VHlwZTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5PdXRwdXRUeXBl
Lkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIE91dHB1dFR5cGUgPSBvdGhlci5PdXRwdXRUeXBlOwot
ICAgICAgfQotICAgICAgaWYgKG90aGVyLm9wdGlvbnNfICE9IG51bGwpIHsKLSAgICAgICAgaWYg
KG9wdGlvbnNfID09IG51bGwpIHsKLSAgICAgICAgICBvcHRpb25zXyA9IG5ldyBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLk1ldGhvZE9wdGlvbnMoKTsKLSAgICAgICAgfQotICAg
ICAgICBPcHRpb25zLk1lcmdlRnJvbShvdGhlci5PcHRpb25zKTsKLSAgICAgIH0KLSAgICAgIGlm
IChvdGhlci5DbGllbnRTdHJlYW1pbmcgIT0gZmFsc2UpIHsKLSAgICAgICAgQ2xpZW50U3RyZWFt
aW5nID0gb3RoZXIuQ2xpZW50U3RyZWFtaW5nOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLlNl
cnZlclN0cmVhbWluZyAhPSBmYWxzZSkgewotICAgICAgICBTZXJ2ZXJTdHJlYW1pbmcgPSBvdGhl
ci5TZXJ2ZXJTdHJlYW1pbmc7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVy
Z2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAg
ICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRj
aCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RG
aWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAgICAg
ICAgICAgTmFtZSA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBJbnB1dFR5cGUgPSBp
bnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSAyNjogewotICAgICAgICAgICAgT3V0cHV0VHlwZSA9IGlucHV0LlJlYWRTdHJp
bmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM0
OiB7Ci0gICAgICAgICAgICBpZiAob3B0aW9uc18gPT0gbnVsbCkgewotICAgICAgICAgICAgICBv
cHRpb25zXyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLk1ldGhvZE9w
dGlvbnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKG9w
dGlvbnNfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl
IDQwOiB7Ci0gICAgICAgICAgICBDbGllbnRTdHJlYW1pbmcgPSBpbnB1dC5SZWFkQm9vbCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDg6IHsKLSAg
ICAgICAgICAgIFNlcnZlclN0cmVhbWluZyA9IGlucHV0LlJlYWRCb29sKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQot
Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmli
dXRlKCldCi0gIGludGVybmFsIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIEZpbGVPcHRpb25zIDogcGI6
OklNZXNzYWdlPEZpbGVPcHRpb25zPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6
Ok1lc3NhZ2VQYXJzZXI8RmlsZU9wdGlvbnM+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJz
ZXI8RmlsZU9wdGlvbnM+KCgpID0+IG5ldyBGaWxlT3B0aW9ucygpKTsKLSAgICBwdWJsaWMgc3Rh
dGljIHBiOjpNZXNzYWdlUGFyc2VyPEZpbGVPcHRpb25zPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4g
X3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3Ig
RGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
UmVmbGVjdGlvbi5EZXNjcmlwdG9yUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1s5
XTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRl
c2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAg
ICBwdWJsaWMgRmlsZU9wdGlvbnMoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0K
LQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIEZpbGVP
cHRpb25zKEZpbGVPcHRpb25zIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBqYXZhUGFja2FnZV8g
PSBvdGhlci5qYXZhUGFja2FnZV87Ci0gICAgICBqYXZhT3V0ZXJDbGFzc25hbWVfID0gb3RoZXIu
amF2YU91dGVyQ2xhc3NuYW1lXzsKLSAgICAgIGphdmFNdWx0aXBsZUZpbGVzXyA9IG90aGVyLmph
dmFNdWx0aXBsZUZpbGVzXzsKLSAgICAgIGphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2hfID0gb3Ro
ZXIuamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaF87Ci0gICAgICBqYXZhU3RyaW5nQ2hlY2tVdGY4
XyA9IG90aGVyLmphdmFTdHJpbmdDaGVja1V0ZjhfOwotICAgICAgb3B0aW1pemVGb3JfID0gb3Ro
ZXIub3B0aW1pemVGb3JfOwotICAgICAgZ29QYWNrYWdlXyA9IG90aGVyLmdvUGFja2FnZV87Ci0g
ICAgICBjY0dlbmVyaWNTZXJ2aWNlc18gPSBvdGhlci5jY0dlbmVyaWNTZXJ2aWNlc187Ci0gICAg
ICBqYXZhR2VuZXJpY1NlcnZpY2VzXyA9IG90aGVyLmphdmFHZW5lcmljU2VydmljZXNfOwotICAg
ICAgcHlHZW5lcmljU2VydmljZXNfID0gb3RoZXIucHlHZW5lcmljU2VydmljZXNfOwotICAgICAg
ZGVwcmVjYXRlZF8gPSBvdGhlci5kZXByZWNhdGVkXzsKLSAgICAgIGNjRW5hYmxlQXJlbmFzXyA9
IG90aGVyLmNjRW5hYmxlQXJlbmFzXzsKLSAgICAgIG9iamNDbGFzc1ByZWZpeF8gPSBvdGhlci5v
YmpjQ2xhc3NQcmVmaXhfOwotICAgICAgY3NoYXJwTmFtZXNwYWNlXyA9IG90aGVyLmNzaGFycE5h
bWVzcGFjZV87Ci0gICAgICB1bmludGVycHJldGVkT3B0aW9uXyA9IG90aGVyLnVuaW50ZXJwcmV0
ZWRPcHRpb25fLkNsb25lKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEZpbGVPcHRpb25zIENsb25l
KCkgewotICAgICAgcmV0dXJuIG5ldyBGaWxlT3B0aW9ucyh0aGlzKTsKLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImphdmFfcGFja2FnZSIgZmllbGQuPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgSmF2YVBhY2thZ2VGaWVsZE51bWJlciA9IDE7
Ci0gICAgcHJpdmF0ZSBzdHJpbmcgamF2YVBhY2thZ2VfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5
PgotICAgIC8vLyAgU2V0cyB0aGUgSmF2YSBwYWNrYWdlIHdoZXJlIGNsYXNzZXMgZ2VuZXJhdGVk
IGZyb20gdGhpcyAucHJvdG8gd2lsbCBiZQotICAgIC8vLyAgcGxhY2VkLiAgQnkgZGVmYXVsdCwg
dGhlIHByb3RvIHBhY2thZ2UgaXMgdXNlZCwgYnV0IHRoaXMgaXMgb2Z0ZW4KLSAgICAvLy8gIGlu
YXBwcm9wcmlhdGUgYmVjYXVzZSBwcm90byBwYWNrYWdlcyBkbyBub3Qgbm9ybWFsbHkgc3RhcnQg
d2l0aCBiYWNrd2FyZHMKLSAgICAvLy8gIGRvbWFpbiBuYW1lcy4KLSAgICAvLy8gPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBzdHJpbmcgSmF2YVBhY2thZ2UgewotICAgICAgZ2V0IHsgcmV0dXJuIGph
dmFQYWNrYWdlXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgamF2YVBhY2thZ2VfID0gcGI6OlBy
b3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAgfQot
ICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiamF2YV9vdXRl
cl9jbGFzc25hbWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEphdmFP
dXRlckNsYXNzbmFtZUZpZWxkTnVtYmVyID0gODsKLSAgICBwcml2YXRlIHN0cmluZyBqYXZhT3V0
ZXJDbGFzc25hbWVfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSWYgc2V0LCBh
bGwgdGhlIGNsYXNzZXMgZnJvbSB0aGUgLnByb3RvIGZpbGUgYXJlIHdyYXBwZWQgaW4gYSBzaW5n
bGUKLSAgICAvLy8gIG91dGVyIGNsYXNzIHdpdGggdGhlIGdpdmVuIG5hbWUuICBUaGlzIGFwcGxp
ZXMgdG8gYm90aCBQcm90bzEKLSAgICAvLy8gIChlcXVpdmFsZW50IHRvIHRoZSBvbGQgIi0tb25l
X2phdmFfZmlsZSIgb3B0aW9uKSBhbmQgUHJvdG8yICh3aGVyZQotICAgIC8vLyAgYSAucHJvdG8g
YWx3YXlzIHRyYW5zbGF0ZXMgdG8gYSBzaW5nbGUgY2xhc3MsIGJ1dCB5b3UgbWF5IHdhbnQgdG8K
LSAgICAvLy8gIGV4cGxpY2l0bHkgY2hvb3NlIHRoZSBjbGFzcyBuYW1lKS4KLSAgICAvLy8gPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBzdHJpbmcgSmF2YU91dGVyQ2xhc3NuYW1lIHsKLSAgICAgIGdl
dCB7IHJldHVybiBqYXZhT3V0ZXJDbGFzc25hbWVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBq
YXZhT3V0ZXJDbGFzc25hbWVfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwo
dmFsdWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAiamF2YV9tdWx0aXBsZV9maWxlcyIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgSmF2YU11bHRpcGxlRmlsZXNGaWVsZE51bWJlciA9IDEwOwot
ICAgIHByaXZhdGUgYm9vbCBqYXZhTXVsdGlwbGVGaWxlc187Ci0gICAgLy8vIDxzdW1tYXJ5Pgot
ICAgIC8vLyAgSWYgc2V0IHRydWUsIHRoZW4gdGhlIEphdmEgY29kZSBnZW5lcmF0b3Igd2lsbCBn
ZW5lcmF0ZSBhIHNlcGFyYXRlIC5qYXZhCi0gICAgLy8vICBmaWxlIGZvciBlYWNoIHRvcC1sZXZl
bCBtZXNzYWdlLCBlbnVtLCBhbmQgc2VydmljZSBkZWZpbmVkIGluIHRoZSAucHJvdG8KLSAgICAv
Ly8gIGZpbGUuICBUaHVzLCB0aGVzZSB0eXBlcyB3aWxsICpub3QqIGJlIG5lc3RlZCBpbnNpZGUg
dGhlIG91dGVyIGNsYXNzCi0gICAgLy8vICBuYW1lZCBieSBqYXZhX291dGVyX2NsYXNzbmFtZS4g
IEhvd2V2ZXIsIHRoZSBvdXRlciBjbGFzcyB3aWxsIHN0aWxsIGJlCi0gICAgLy8vICBnZW5lcmF0
ZWQgdG8gY29udGFpbiB0aGUgZmlsZSdzIGdldERlc2NyaXB0b3IoKSBtZXRob2QgYXMgd2VsbCBh
cyBhbnkKLSAgICAvLy8gIHRvcC1sZXZlbCBleHRlbnNpb25zIGRlZmluZWQgaW4gdGhlIGZpbGUu
Ci0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgYm9vbCBKYXZhTXVsdGlwbGVGaWxlcyB7
Ci0gICAgICBnZXQgeyByZXR1cm4gamF2YU11bHRpcGxlRmlsZXNfOyB9Ci0gICAgICBzZXQgewot
ICAgICAgICBqYXZhTXVsdGlwbGVGaWxlc18gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImphdmFfZ2VuZXJhdGVfZXF1YWxz
X2FuZF9oYXNoIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBKYXZhR2Vu
ZXJhdGVFcXVhbHNBbmRIYXNoRmllbGROdW1iZXIgPSAyMDsKLSAgICBwcml2YXRlIGJvb2wgamF2
YUdlbmVyYXRlRXF1YWxzQW5kSGFzaF87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSWYg
c2V0IHRydWUsIHRoZW4gdGhlIEphdmEgY29kZSBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBlcXVh
bHMoKSBhbmQKLSAgICAvLy8gIGhhc2hDb2RlKCkgbWV0aG9kcyBmb3IgYWxsIG1lc3NhZ2VzIGRl
ZmluZWQgaW4gdGhlIC5wcm90byBmaWxlLgotICAgIC8vLyAgVGhpcyBpbmNyZWFzZXMgZ2VuZXJh
dGVkIGNvZGUgc2l6ZSwgcG90ZW50aWFsbHkgc3Vic3RhbnRpYWxseSBmb3IgbGFyZ2UKLSAgICAv
Ly8gIHByb3Rvcywgd2hpY2ggbWF5IGhhcm0gYSBtZW1vcnktY29uc3RyYWluZWQgYXBwbGljYXRp
b24uCi0gICAgLy8vICAtIEluIHRoZSBmdWxsIHJ1bnRpbWUgdGhpcyBpcyBhIHNwZWVkIG9wdGlt
aXphdGlvbiwgYXMgdGhlCi0gICAgLy8vICBBYnN0cmFjdE1lc3NhZ2UgYmFzZSBjbGFzcyBpbmNs
dWRlcyByZWZsZWN0aW9uLWJhc2VkIGltcGxlbWVudGF0aW9ucyBvZgotICAgIC8vLyAgdGhlc2Ug
bWV0aG9kcy4KLSAgICAvLy8gIC0gSW4gdGhlIGxpdGUgcnVudGltZSwgc2V0dGluZyB0aGlzIG9w
dGlvbiBjaGFuZ2VzIHRoZSBzZW1hbnRpY3Mgb2YKLSAgICAvLy8gIGVxdWFscygpIGFuZCBoYXNo
Q29kZSgpIHRvIG1vcmUgY2xvc2VseSBtYXRjaCB0aG9zZSBvZiB0aGUgZnVsbCBydW50aW1lOwot
ICAgIC8vLyAgdGhlIGdlbmVyYXRlZCBtZXRob2RzIGNvbXB1dGUgdGhlaXIgcmVzdWx0cyBiYXNl
ZCBvbiBmaWVsZCB2YWx1ZXMgcmF0aGVyCi0gICAgLy8vICB0aGFuIG9iamVjdCBpZGVudGl0eS4g
KEltcGxlbWVudGF0aW9ucyBzaG91bGQgbm90IGFzc3VtZSB0aGF0IGhhc2hjb2RlcwotICAgIC8v
LyAgd2lsbCBiZSBjb25zaXN0ZW50IGFjcm9zcyBydW50aW1lcyBvciB2ZXJzaW9ucyBvZiB0aGUg
cHJvdG9jb2wgY29tcGlsZXIuKQotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGJvb2wg
SmF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCB7Ci0gICAgICBnZXQgeyByZXR1cm4gamF2YUdlbmVy
YXRlRXF1YWxzQW5kSGFzaF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGphdmFHZW5lcmF0ZUVx
dWFsc0FuZEhhc2hfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJqYXZhX3N0cmluZ19jaGVja191dGY4IiBmaWVsZC48L3N1
bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBKYXZhU3RyaW5nQ2hlY2tVdGY4RmllbGROdW1i
ZXIgPSAyNzsKLSAgICBwcml2YXRlIGJvb2wgamF2YVN0cmluZ0NoZWNrVXRmOF87Ci0gICAgLy8v
IDxzdW1tYXJ5PgotICAgIC8vLyAgSWYgc2V0IHRydWUsIHRoZW4gdGhlIEphdmEyIGNvZGUgZ2Vu
ZXJhdG9yIHdpbGwgZ2VuZXJhdGUgY29kZSB0aGF0Ci0gICAgLy8vICB0aHJvd3MgYW4gZXhjZXB0
aW9uIHdoZW5ldmVyIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhc3NpZ24gYSBub24tVVRGLTgKLSAg
ICAvLy8gIGJ5dGUgc2VxdWVuY2UgdG8gYSBzdHJpbmcgZmllbGQuCi0gICAgLy8vICBNZXNzYWdl
IHJlZmxlY3Rpb24gd2lsbCBkbyB0aGUgc2FtZS4KLSAgICAvLy8gIEhvd2V2ZXIsIGFuIGV4dGVu
c2lvbiBmaWVsZCBzdGlsbCBhY2NlcHRzIG5vbi1VVEYtOCBieXRlIHNlcXVlbmNlcy4KLSAgICAv
Ly8gIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gd2hlbiB1c2VkIHdpdGggdGhlIGxpdGUg
cnVudGltZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBib29sIEphdmFTdHJpbmdD
aGVja1V0ZjggewotICAgICAgZ2V0IHsgcmV0dXJuIGphdmFTdHJpbmdDaGVja1V0ZjhfOyB9Ci0g
ICAgICBzZXQgewotICAgICAgICBqYXZhU3RyaW5nQ2hlY2tVdGY4XyA9IHZhbHVlOwotICAgICAg
fQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW1p
emVfZm9yIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPcHRpbWl6ZUZv
ckZpZWxkTnVtYmVyID0gOTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24uRmlsZU9wdGlvbnMuVHlwZXMuT3B0aW1pemVNb2RlIG9wdGltaXplRm9yXyA9IDA7
Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmlsZU9wdGlv
bnMuVHlwZXMuT3B0aW1pemVNb2RlIE9wdGltaXplRm9yIHsKLSAgICAgIGdldCB7IHJldHVybiBv
cHRpbWl6ZUZvcl87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG9wdGltaXplRm9yXyA9IHZhbHVl
OwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRo
ZSAiZ29fcGFja2FnZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgR29Q
YWNrYWdlRmllbGROdW1iZXIgPSAxMTsKLSAgICBwcml2YXRlIHN0cmluZyBnb1BhY2thZ2VfID0g
IiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgU2V0cyB0aGUgR28gcGFja2FnZSB3aGVy
ZSBzdHJ1Y3RzIGdlbmVyYXRlZCBmcm9tIHRoaXMgLnByb3RvIHdpbGwgYmUKLSAgICAvLy8gIHBs
YWNlZC4gSWYgb21pdHRlZCwgdGhlIEdvIHBhY2thZ2Ugd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhl
IGZvbGxvd2luZzoKLSAgICAvLy8gICAgLSBUaGUgYmFzZW5hbWUgb2YgdGhlIHBhY2thZ2UgaW1w
b3J0IHBhdGgsIGlmIHByb3ZpZGVkLgotICAgIC8vLyAgICAtIE90aGVyd2lzZSwgdGhlIHBhY2th
Z2Ugc3RhdGVtZW50IGluIHRoZSAucHJvdG8gZmlsZSwgaWYgcHJlc2VudC4KLSAgICAvLy8gICAg
LSBPdGhlcndpc2UsIHRoZSBiYXNlbmFtZSBvZiB0aGUgLnByb3RvIGZpbGUsIHdpdGhvdXQgZXh0
ZW5zaW9uLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0cmluZyBHb1BhY2thZ2Ug
ewotICAgICAgZ2V0IHsgcmV0dXJuIGdvUGFja2FnZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IGdvUGFja2FnZV8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwg
InZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJjY19nZW5lcmljX3NlcnZpY2VzIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVi
bGljIGNvbnN0IGludCBDY0dlbmVyaWNTZXJ2aWNlc0ZpZWxkTnVtYmVyID0gMTY7Ci0gICAgcHJp
dmF0ZSBib29sIGNjR2VuZXJpY1NlcnZpY2VzXzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8v
ICBTaG91bGQgZ2VuZXJpYyBzZXJ2aWNlcyBiZSBnZW5lcmF0ZWQgaW4gZWFjaCBsYW5ndWFnZT8g
ICJHZW5lcmljIiBzZXJ2aWNlcwotICAgIC8vLyAgYXJlIG5vdCBzcGVjaWZpYyB0byBhbnkgcGFy
dGljdWxhciBSUEMgc3lzdGVtLiAgVGhleSBhcmUgZ2VuZXJhdGVkIGJ5IHRoZQotICAgIC8vLyAg
bWFpbiBjb2RlIGdlbmVyYXRvcnMgaW4gZWFjaCBsYW5ndWFnZSAod2l0aG91dCBhZGRpdGlvbmFs
IHBsdWdpbnMpLgotICAgIC8vLyAgR2VuZXJpYyBzZXJ2aWNlcyB3ZXJlIHRoZSBvbmx5IGtpbmQg
b2Ygc2VydmljZSBnZW5lcmF0aW9uIHN1cHBvcnRlZCBieQotICAgIC8vLyAgZWFybHkgdmVyc2lv
bnMgb2YgZ29vZ2xlLnByb3RvYnVmLgotICAgIC8vLwotICAgIC8vLyAgR2VuZXJpYyBzZXJ2aWNl
cyBhcmUgbm93IGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyBwbHVnaW5z
Ci0gICAgLy8vICB0aGF0IGdlbmVyYXRlIGNvZGUgc3BlY2lmaWMgdG8geW91ciBwYXJ0aWN1bGFy
IFJQQyBzeXN0ZW0uICBUaGVyZWZvcmUsCi0gICAgLy8vICB0aGVzZSBkZWZhdWx0IHRvIGZhbHNl
LiAgT2xkIGNvZGUgd2hpY2ggZGVwZW5kcyBvbiBnZW5lcmljIHNlcnZpY2VzIHNob3VsZAotICAg
IC8vLyAgZXhwbGljaXRseSBzZXQgdGhlbSB0byB0cnVlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGJvb2wgQ2NHZW5lcmljU2VydmljZXMgewotICAgICAgZ2V0IHsgcmV0dXJuIGNj
R2VuZXJpY1NlcnZpY2VzXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgY2NHZW5lcmljU2Vydmlj
ZXNfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJqYXZhX2dlbmVyaWNfc2VydmljZXMiIGZpZWxkLjwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgY29uc3QgaW50IEphdmFHZW5lcmljU2VydmljZXNGaWVsZE51bWJlciA9IDE3Owot
ICAgIHByaXZhdGUgYm9vbCBqYXZhR2VuZXJpY1NlcnZpY2VzXzsKLSAgICBwdWJsaWMgYm9vbCBK
YXZhR2VuZXJpY1NlcnZpY2VzIHsKLSAgICAgIGdldCB7IHJldHVybiBqYXZhR2VuZXJpY1NlcnZp
Y2VzXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgamF2YUdlbmVyaWNTZXJ2aWNlc18gPSB2YWx1
ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0
aGUgInB5X2dlbmVyaWNfc2VydmljZXMiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29u
c3QgaW50IFB5R2VuZXJpY1NlcnZpY2VzRmllbGROdW1iZXIgPSAxODsKLSAgICBwcml2YXRlIGJv
b2wgcHlHZW5lcmljU2VydmljZXNfOwotICAgIHB1YmxpYyBib29sIFB5R2VuZXJpY1NlcnZpY2Vz
IHsKLSAgICAgIGdldCB7IHJldHVybiBweUdlbmVyaWNTZXJ2aWNlc187IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIHB5R2VuZXJpY1NlcnZpY2VzXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQot
ICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZGVwcmVjYXRlZCIgZmllbGQu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRGVwcmVjYXRlZEZpZWxkTnVtYmVyID0g
MjM7Ci0gICAgcHJpdmF0ZSBib29sIGRlcHJlY2F0ZWRfOwotICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAvLy8gIElzIHRoaXMgZmlsZSBkZXByZWNhdGVkPwotICAgIC8vLyAgRGVwZW5kaW5nIG9uIHRo
ZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9ucwot
ICAgIC8vLyAgZm9yIGV2ZXJ5dGhpbmcgaW4gdGhlIGZpbGUsIG9yIGl0IHdpbGwgYmUgY29tcGxl
dGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeQotICAgIC8vLyAgbGVhc3QsIHRoaXMgaXMgYSBmb3Jt
YWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBmaWxlcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBib29sIERlcHJlY2F0ZWQgewotICAgICAgZ2V0IHsgcmV0dXJuIGRlcHJlY2F0ZWRf
OyB9Ci0gICAgICBzZXQgewotICAgICAgICBkZXByZWNhdGVkXyA9IHZhbHVlOwotICAgICAgfQot
ICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiY2NfZW5hYmxl
X2FyZW5hcyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQ2NFbmFibGVB
cmVuYXNGaWVsZE51bWJlciA9IDMxOwotICAgIHByaXZhdGUgYm9vbCBjY0VuYWJsZUFyZW5hc187
Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgRW5hYmxlcyB0aGUgdXNlIG9mIGFyZW5hcyBm
b3IgdGhlIHByb3RvIG1lc3NhZ2VzIGluIHRoaXMgZmlsZS4gVGhpcyBhcHBsaWVzCi0gICAgLy8v
ICBvbmx5IHRvIGdlbmVyYXRlZCBjbGFzc2VzIGZvciBDKysuCi0gICAgLy8vIDwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgYm9vbCBDY0VuYWJsZUFyZW5hcyB7Ci0gICAgICBnZXQgeyByZXR1cm4gY2NF
bmFibGVBcmVuYXNfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBjY0VuYWJsZUFyZW5hc18gPSB2
YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgIm9iamNfY2xhc3NfcHJlZml4IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBPYmpjQ2xhc3NQcmVmaXhGaWVsZE51bWJlciA9IDM2OwotICAgIHByaXZhdGUgc3Ry
aW5nIG9iamNDbGFzc1ByZWZpeF8gPSAiIjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBT
ZXRzIHRoZSBvYmplY3RpdmUgYyBjbGFzcyBwcmVmaXggd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGFs
bCBvYmplY3RpdmUgYwotICAgIC8vLyAgZ2VuZXJhdGVkIGNsYXNzZXMgZnJvbSB0aGlzIC5wcm90
by4gVGhlcmUgaXMgbm8gZGVmYXVsdC4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBz
dHJpbmcgT2JqY0NsYXNzUHJlZml4IHsKLSAgICAgIGdldCB7IHJldHVybiBvYmpjQ2xhc3NQcmVm
aXhfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBvYmpjQ2xhc3NQcmVmaXhfID0gcGI6OlByb3Rv
UHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiY3NoYXJwX25hbWVz
cGFjZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgQ3NoYXJwTmFtZXNw
YWNlRmllbGROdW1iZXIgPSAzNzsKLSAgICBwcml2YXRlIHN0cmluZyBjc2hhcnBOYW1lc3BhY2Vf
ID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgTmFtZXNwYWNlIGZvciBnZW5lcmF0
ZWQgY2xhc3NlczsgZGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UuCi0gICAgLy8vIDwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgc3RyaW5nIENzaGFycE5hbWVzcGFjZSB7Ci0gICAgICBnZXQgeyByZXR1cm4g
Y3NoYXJwTmFtZXNwYWNlXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgY3NoYXJwTmFtZXNwYWNl
XyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
InVuaW50ZXJwcmV0ZWRfb3B0aW9uIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0
IGludCBVbmludGVycHJldGVkT3B0aW9uRmllbGROdW1iZXIgPSA5OTk7Ci0gICAgcHJpdmF0ZSBz
dGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVm
bGVjdGlvbi5VbmludGVycHJldGVkT3B0aW9uPiBfcmVwZWF0ZWRfdW5pbnRlcnByZXRlZE9wdGlv
bl9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoNzk5NCwgZ2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5VbmludGVycHJldGVkT3B0aW9uLlBhcnNlcik7
Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuUmVmbGVjdGlvbi5VbmludGVycHJldGVkT3B0aW9uPiB1bmludGVycHJldGVkT3B0
aW9uXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVm
bGVjdGlvbi5VbmludGVycHJldGVkT3B0aW9uPigpOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAv
Ly8gIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4g
U2VlIGFib3ZlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRG
aWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRp
b24+IFVuaW50ZXJwcmV0ZWRPcHRpb24gewotICAgICAgZ2V0IHsgcmV0dXJuIHVuaW50ZXJwcmV0
ZWRPcHRpb25fOyB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9i
amVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBGaWxlT3B0aW9ucyk7
Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKEZpbGVPcHRpb25zIG90aGVyKSB7Ci0g
ICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkg
ewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChKYXZhUGFja2FnZSAh
PSBvdGhlci5KYXZhUGFja2FnZSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEphdmFPdXRlckNs
YXNzbmFtZSAhPSBvdGhlci5KYXZhT3V0ZXJDbGFzc25hbWUpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmIChKYXZhTXVsdGlwbGVGaWxlcyAhPSBvdGhlci5KYXZhTXVsdGlwbGVGaWxlcykgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYgKEphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggIT0gb3RoZXIuSmF2
YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEphdmFTdHJp
bmdDaGVja1V0ZjggIT0gb3RoZXIuSmF2YVN0cmluZ0NoZWNrVXRmOCkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYgKE9wdGltaXplRm9yICE9IG90aGVyLk9wdGltaXplRm9yKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoR29QYWNrYWdlICE9IG90aGVyLkdvUGFja2FnZSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYgKENjR2VuZXJpY1NlcnZpY2VzICE9IG90aGVyLkNjR2VuZXJpY1NlcnZpY2VzKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoSmF2YUdlbmVyaWNTZXJ2aWNlcyAhPSBvdGhlci5KYXZh
R2VuZXJpY1NlcnZpY2VzKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoUHlHZW5lcmljU2Vydmlj
ZXMgIT0gb3RoZXIuUHlHZW5lcmljU2VydmljZXMpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChE
ZXByZWNhdGVkICE9IG90aGVyLkRlcHJlY2F0ZWQpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChD
Y0VuYWJsZUFyZW5hcyAhPSBvdGhlci5DY0VuYWJsZUFyZW5hcykgcmV0dXJuIGZhbHNlOwotICAg
ICAgaWYgKE9iamNDbGFzc1ByZWZpeCAhPSBvdGhlci5PYmpjQ2xhc3NQcmVmaXgpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmIChDc2hhcnBOYW1lc3BhY2UgIT0gb3RoZXIuQ3NoYXJwTmFtZXNwYWNl
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighdW5pbnRlcnByZXRlZE9wdGlvbl8uRXF1YWxzKG90
aGVyLnVuaW50ZXJwcmV0ZWRPcHRpb25fKSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAg
ICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChKYXZhUGFja2FnZS5MZW5ndGggIT0gMCkgaGFz
aCBePSBKYXZhUGFja2FnZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKEphdmFPdXRlckNsYXNz
bmFtZS5MZW5ndGggIT0gMCkgaGFzaCBePSBKYXZhT3V0ZXJDbGFzc25hbWUuR2V0SGFzaENvZGUo
KTsKLSAgICAgIGlmIChKYXZhTXVsdGlwbGVGaWxlcyAhPSBmYWxzZSkgaGFzaCBePSBKYXZhTXVs
dGlwbGVGaWxlcy5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKEphdmFHZW5lcmF0ZUVxdWFsc0Fu
ZEhhc2ggIT0gZmFsc2UpIGhhc2ggXj0gSmF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaC5HZXRIYXNo
Q29kZSgpOwotICAgICAgaWYgKEphdmFTdHJpbmdDaGVja1V0ZjggIT0gZmFsc2UpIGhhc2ggXj0g
SmF2YVN0cmluZ0NoZWNrVXRmOC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKE9wdGltaXplRm9y
ICE9IDApIGhhc2ggXj0gT3B0aW1pemVGb3IuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChHb1Bh
Y2thZ2UuTGVuZ3RoICE9IDApIGhhc2ggXj0gR29QYWNrYWdlLkdldEhhc2hDb2RlKCk7Ci0gICAg
ICBpZiAoQ2NHZW5lcmljU2VydmljZXMgIT0gZmFsc2UpIGhhc2ggXj0gQ2NHZW5lcmljU2Vydmlj
ZXMuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChKYXZhR2VuZXJpY1NlcnZpY2VzICE9IGZhbHNl
KSBoYXNoIF49IEphdmFHZW5lcmljU2VydmljZXMuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChQ
eUdlbmVyaWNTZXJ2aWNlcyAhPSBmYWxzZSkgaGFzaCBePSBQeUdlbmVyaWNTZXJ2aWNlcy5HZXRI
YXNoQ29kZSgpOwotICAgICAgaWYgKERlcHJlY2F0ZWQgIT0gZmFsc2UpIGhhc2ggXj0gRGVwcmVj
YXRlZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKENjRW5hYmxlQXJlbmFzICE9IGZhbHNlKSBo
YXNoIF49IENjRW5hYmxlQXJlbmFzLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoT2JqY0NsYXNz
UHJlZml4Lkxlbmd0aCAhPSAwKSBoYXNoIF49IE9iamNDbGFzc1ByZWZpeC5HZXRIYXNoQ29kZSgp
OwotICAgICAgaWYgKENzaGFycE5hbWVzcGFjZS5MZW5ndGggIT0gMCkgaGFzaCBePSBDc2hhcnBO
YW1lc3BhY2UuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gdW5pbnRlcnByZXRlZE9wdGlv
bl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1Ymxp
YyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3Jt
YXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lk
IFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKEphdmFQ
YWNrYWdlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhKYXZhUGFja2FnZSk7Ci0gICAgICB9Ci0gICAgICBp
ZiAoSmF2YU91dGVyQ2xhc3NuYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZVJhd1RhZyg2Nik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhKYXZhT3V0ZXJDbGFzc25h
bWUpOwotICAgICAgfQotICAgICAgaWYgKE9wdGltaXplRm9yICE9IDApIHsKLSAgICAgICAgb3V0
cHV0LldyaXRlUmF3VGFnKDcyKTsKLSAgICAgICAgb3V0cHV0LldyaXRlRW51bSgoaW50KSBPcHRp
bWl6ZUZvcik7Ci0gICAgICB9Ci0gICAgICBpZiAoSmF2YU11bHRpcGxlRmlsZXMgIT0gZmFsc2Up
IHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDgwKTsKLSAgICAgICAgb3V0cHV0LldyaXRl
Qm9vbChKYXZhTXVsdGlwbGVGaWxlcyk7Ci0gICAgICB9Ci0gICAgICBpZiAoR29QYWNrYWdlLkxl
bmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg5MCk7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZVN0cmluZyhHb1BhY2thZ2UpOwotICAgICAgfQotICAgICAgaWYgKENjR2VuZXJp
Y1NlcnZpY2VzICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMjgsIDEp
OwotICAgICAgICBvdXRwdXQuV3JpdGVCb29sKENjR2VuZXJpY1NlcnZpY2VzKTsKLSAgICAgIH0K
LSAgICAgIGlmIChKYXZhR2VuZXJpY1NlcnZpY2VzICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZVJhd1RhZygxMzYsIDEpOwotICAgICAgICBvdXRwdXQuV3JpdGVCb29sKEphdmFHZW5l
cmljU2VydmljZXMpOwotICAgICAgfQotICAgICAgaWYgKFB5R2VuZXJpY1NlcnZpY2VzICE9IGZh
bHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxNDQsIDEpOwotICAgICAgICBvdXRw
dXQuV3JpdGVCb29sKFB5R2VuZXJpY1NlcnZpY2VzKTsKLSAgICAgIH0KLSAgICAgIGlmIChKYXZh
R2VuZXJhdGVFcXVhbHNBbmRIYXNoICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJh
d1RhZygxNjAsIDEpOwotICAgICAgICBvdXRwdXQuV3JpdGVCb29sKEphdmFHZW5lcmF0ZUVxdWFs
c0FuZEhhc2gpOwotICAgICAgfQotICAgICAgaWYgKERlcHJlY2F0ZWQgIT0gZmFsc2UpIHsKLSAg
ICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE4NCwgMSk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUJv
b2woRGVwcmVjYXRlZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoSmF2YVN0cmluZ0NoZWNrVXRmOCAh
PSBmYWxzZSkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMjE2LCAxKTsKLSAgICAgICAg
b3V0cHV0LldyaXRlQm9vbChKYXZhU3RyaW5nQ2hlY2tVdGY4KTsKLSAgICAgIH0KLSAgICAgIGlm
IChDY0VuYWJsZUFyZW5hcyAhPSBmYWxzZSkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWco
MjQ4LCAxKTsKLSAgICAgICAgb3V0cHV0LldyaXRlQm9vbChDY0VuYWJsZUFyZW5hcyk7Ci0gICAg
ICB9Ci0gICAgICBpZiAoT2JqY0NsYXNzUHJlZml4Lkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZVJhd1RhZygxNjIsIDIpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoT2Jq
Y0NsYXNzUHJlZml4KTsKLSAgICAgIH0KLSAgICAgIGlmIChDc2hhcnBOYW1lc3BhY2UuTGVuZ3Ro
ICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE3MCwgMik7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZVN0cmluZyhDc2hhcnBOYW1lc3BhY2UpOwotICAgICAgfQotICAgICAgdW5pbnRl
cnByZXRlZE9wdGlvbl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF91bmludGVycHJldGVkT3B0
aW9uX2NvZGVjKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0g
ICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoSmF2YVBhY2thZ2UuTGVuZ3RoICE9IDApIHsK
LSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdT
aXplKEphdmFQYWNrYWdlKTsKLSAgICAgIH0KLSAgICAgIGlmIChKYXZhT3V0ZXJDbGFzc25hbWUu
TGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFt
LkNvbXB1dGVTdHJpbmdTaXplKEphdmFPdXRlckNsYXNzbmFtZSk7Ci0gICAgICB9Ci0gICAgICBp
ZiAoSmF2YU11bHRpcGxlRmlsZXMgIT0gZmFsc2UpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgMTsK
LSAgICAgIH0KLSAgICAgIGlmIChKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoICE9IGZhbHNlKSB7
Ci0gICAgICAgIHNpemUgKz0gMiArIDE7Ci0gICAgICB9Ci0gICAgICBpZiAoSmF2YVN0cmluZ0No
ZWNrVXRmOCAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9IDIgKyAxOwotICAgICAgfQotICAg
ICAgaWYgKE9wdGltaXplRm9yICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVk
T3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBPcHRpbWl6ZUZvcik7Ci0gICAgICB9
Ci0gICAgICBpZiAoR29QYWNrYWdlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSAr
IHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShHb1BhY2thZ2UpOwotICAg
ICAgfQotICAgICAgaWYgKENjR2VuZXJpY1NlcnZpY2VzICE9IGZhbHNlKSB7Ci0gICAgICAgIHNp
emUgKz0gMiArIDE7Ci0gICAgICB9Ci0gICAgICBpZiAoSmF2YUdlbmVyaWNTZXJ2aWNlcyAhPSBm
YWxzZSkgewotICAgICAgICBzaXplICs9IDIgKyAxOwotICAgICAgfQotICAgICAgaWYgKFB5R2Vu
ZXJpY1NlcnZpY2VzICE9IGZhbHNlKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIDE7Ci0gICAgICB9
Ci0gICAgICBpZiAoRGVwcmVjYXRlZCAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9IDIgKyAx
OwotICAgICAgfQotICAgICAgaWYgKENjRW5hYmxlQXJlbmFzICE9IGZhbHNlKSB7Ci0gICAgICAg
IHNpemUgKz0gMiArIDE7Ci0gICAgICB9Ci0gICAgICBpZiAoT2JqY0NsYXNzUHJlZml4Lkxlbmd0
aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMiArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21w
dXRlU3RyaW5nU2l6ZShPYmpjQ2xhc3NQcmVmaXgpOwotICAgICAgfQotICAgICAgaWYgKENzaGFy
cE5hbWVzcGFjZS5MZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDIgKyBwYjo6Q29kZWRP
dXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoQ3NoYXJwTmFtZXNwYWNlKTsKLSAgICAgIH0K
LSAgICAgIHNpemUgKz0gdW5pbnRlcnByZXRlZE9wdGlvbl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0
ZWRfdW5pbnRlcnByZXRlZE9wdGlvbl9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oRmlsZU9wdGlvbnMgb3RoZXIpIHsKLSAgICAg
IGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlm
IChvdGhlci5KYXZhUGFja2FnZS5MZW5ndGggIT0gMCkgewotICAgICAgICBKYXZhUGFja2FnZSA9
IG90aGVyLkphdmFQYWNrYWdlOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkphdmFPdXRlckNs
YXNzbmFtZS5MZW5ndGggIT0gMCkgewotICAgICAgICBKYXZhT3V0ZXJDbGFzc25hbWUgPSBvdGhl
ci5KYXZhT3V0ZXJDbGFzc25hbWU7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuSmF2YU11bHRp
cGxlRmlsZXMgIT0gZmFsc2UpIHsKLSAgICAgICAgSmF2YU11bHRpcGxlRmlsZXMgPSBvdGhlci5K
YXZhTXVsdGlwbGVGaWxlczsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5KYXZhR2VuZXJhdGVF
cXVhbHNBbmRIYXNoICE9IGZhbHNlKSB7Ci0gICAgICAgIEphdmFHZW5lcmF0ZUVxdWFsc0FuZEhh
c2ggPSBvdGhlci5KYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoOwotICAgICAgfQotICAgICAgaWYg
KG90aGVyLkphdmFTdHJpbmdDaGVja1V0ZjggIT0gZmFsc2UpIHsKLSAgICAgICAgSmF2YVN0cmlu
Z0NoZWNrVXRmOCA9IG90aGVyLkphdmFTdHJpbmdDaGVja1V0Zjg7Ci0gICAgICB9Ci0gICAgICBp
ZiAob3RoZXIuT3B0aW1pemVGb3IgIT0gMCkgewotICAgICAgICBPcHRpbWl6ZUZvciA9IG90aGVy
Lk9wdGltaXplRm9yOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkdvUGFja2FnZS5MZW5ndGgg
IT0gMCkgewotICAgICAgICBHb1BhY2thZ2UgPSBvdGhlci5Hb1BhY2thZ2U7Ci0gICAgICB9Ci0g
ICAgICBpZiAob3RoZXIuQ2NHZW5lcmljU2VydmljZXMgIT0gZmFsc2UpIHsKLSAgICAgICAgQ2NH
ZW5lcmljU2VydmljZXMgPSBvdGhlci5DY0dlbmVyaWNTZXJ2aWNlczsKLSAgICAgIH0KLSAgICAg
IGlmIChvdGhlci5KYXZhR2VuZXJpY1NlcnZpY2VzICE9IGZhbHNlKSB7Ci0gICAgICAgIEphdmFH
ZW5lcmljU2VydmljZXMgPSBvdGhlci5KYXZhR2VuZXJpY1NlcnZpY2VzOwotICAgICAgfQotICAg
ICAgaWYgKG90aGVyLlB5R2VuZXJpY1NlcnZpY2VzICE9IGZhbHNlKSB7Ci0gICAgICAgIFB5R2Vu
ZXJpY1NlcnZpY2VzID0gb3RoZXIuUHlHZW5lcmljU2VydmljZXM7Ci0gICAgICB9Ci0gICAgICBp
ZiAob3RoZXIuRGVwcmVjYXRlZCAhPSBmYWxzZSkgewotICAgICAgICBEZXByZWNhdGVkID0gb3Ro
ZXIuRGVwcmVjYXRlZDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5DY0VuYWJsZUFyZW5hcyAh
PSBmYWxzZSkgewotICAgICAgICBDY0VuYWJsZUFyZW5hcyA9IG90aGVyLkNjRW5hYmxlQXJlbmFz
OwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk9iamNDbGFzc1ByZWZpeC5MZW5ndGggIT0gMCkg
ewotICAgICAgICBPYmpjQ2xhc3NQcmVmaXggPSBvdGhlci5PYmpjQ2xhc3NQcmVmaXg7Ci0gICAg
ICB9Ci0gICAgICBpZiAob3RoZXIuQ3NoYXJwTmFtZXNwYWNlLkxlbmd0aCAhPSAwKSB7Ci0gICAg
ICAgIENzaGFycE5hbWVzcGFjZSA9IG90aGVyLkNzaGFycE5hbWVzcGFjZTsKLSAgICAgIH0KLSAg
ICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25fLkFkZChvdGhlci51bmludGVycHJldGVkT3B0aW9uXyk7
Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFt
IGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVh
ZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgSmF2YVBhY2thZ2UgPSBpbnB1dC5S
ZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Y2FzZSA2NjogewotICAgICAgICAgICAgSmF2YU91dGVyQ2xhc3NuYW1lID0gaW5wdXQuUmVhZFN0
cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2Ug
NzI6IHsKLSAgICAgICAgICAgIG9wdGltaXplRm9yXyA9IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5SZWZsZWN0aW9uLkZpbGVPcHRpb25zLlR5cGVzLk9wdGltaXplTW9kZSkgaW5wdXQuUmVhZEVu
dW0oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDgw
OiB7Ci0gICAgICAgICAgICBKYXZhTXVsdGlwbGVGaWxlcyA9IGlucHV0LlJlYWRCb29sKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA5MDogewotICAg
ICAgICAgICAgR29QYWNrYWdlID0gaW5wdXQuUmVhZFN0cmluZygpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTI4OiB7Ci0gICAgICAgICAgICBDY0dl
bmVyaWNTZXJ2aWNlcyA9IGlucHV0LlJlYWRCb29sKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxMzY6IHsKLSAgICAgICAgICAgIEphdmFHZW5lcmlj
U2VydmljZXMgPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGNhc2UgMTQ0OiB7Ci0gICAgICAgICAgICBQeUdlbmVyaWNTZXJ2aWNl
cyA9IGlucHV0LlJlYWRCb29sKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSAxNjA6IHsKLSAgICAgICAgICAgIEphdmFHZW5lcmF0ZUVxdWFsc0FuZEhh
c2ggPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGNhc2UgMTg0OiB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkID0gaW5wdXQuUmVh
ZEJvb2woKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl
IDIxNjogewotICAgICAgICAgICAgSmF2YVN0cmluZ0NoZWNrVXRmOCA9IGlucHV0LlJlYWRCb29s
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNDg6
IHsKLSAgICAgICAgICAgIENjRW5hYmxlQXJlbmFzID0gaW5wdXQuUmVhZEJvb2woKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI5MDogewotICAgICAg
ICAgICAgT2JqY0NsYXNzUHJlZml4ID0gaW5wdXQuUmVhZFN0cmluZygpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjk4OiB7Ci0gICAgICAgICAgICBD
c2hhcnBOYW1lc3BhY2UgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA3OTk0OiB7Ci0gICAgICAgICAgICB1bmludGVy
cHJldGVkT3B0aW9uXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX3VuaW50ZXJwcmV0
ZWRPcHRpb25fY29kZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgI3JlZ2lvbiBOZXN0ZWQgdHlwZXMKLSAgICAvLy8g
PHN1bW1hcnk+Q29udGFpbmVyIGZvciBuZXN0ZWQgdHlwZXMgZGVjbGFyZWQgaW4gdGhlIEZpbGVP
cHRpb25zIG1lc3NhZ2UgdHlwZS48L3N1bW1hcnk+Ci0gICAgW2dsb2JhbDo6U3lzdGVtLkRpYWdu
b3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgICBwdWJsaWMgc3RhdGlj
IHBhcnRpYWwgY2xhc3MgVHlwZXMgewotICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgLy8vICBH
ZW5lcmF0ZWQgY2xhc3NlcyBjYW4gYmUgb3B0aW1pemVkIGZvciBzcGVlZCBvciBjb2RlIHNpemUu
Ci0gICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgaW50ZXJuYWwgZW51bSBPcHRpbWl6ZU1vZGUg
ewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgR2VuZXJhdGUgY29tcGxldGUg
Y29kZSBmb3IgcGFyc2luZywgc2VyaWFsaXphdGlvbiwKLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJTUEVFRCIpXSBTcGVlZCA9IDEsCi0gICAgICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBldGMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiQ09ERV9TSVpFIildIENvZGVTaXplID0gMiwK
LSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gIEdlbmVyYXRlIGNvZGUgdXNpbmcg
TWVzc2FnZUxpdGUgYW5kIHRoZSBsaXRlIHJ1bnRpbWUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiTElURV9SVU5USU1FIildIExpdGVSdW50aW1l
ID0gMywKLSAgICAgIH0KLQotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotCi0gIFtnbG9i
YWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0g
IGludGVybmFsIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIE1lc3NhZ2VPcHRpb25zIDogcGI6OklNZXNz
YWdlPE1lc3NhZ2VPcHRpb25zPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1l
c3NhZ2VQYXJzZXI8TWVzc2FnZU9wdGlvbnM+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJz
ZXI8TWVzc2FnZU9wdGlvbnM+KCgpID0+IG5ldyBNZXNzYWdlT3B0aW9ucygpKTsKLSAgICBwdWJs
aWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPE1lc3NhZ2VPcHRpb25zPiBQYXJzZXIgeyBnZXQg
eyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURl
c2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3Nh
Z2VUeXBlc1sxMF07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJ
TWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0g
ICAgfQotCi0gICAgcHVibGljIE1lc3NhZ2VPcHRpb25zKCkgewotICAgICAgT25Db25zdHJ1Y3Rp
b24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAg
IHB1YmxpYyBNZXNzYWdlT3B0aW9ucyhNZXNzYWdlT3B0aW9ucyBvdGhlcikgOiB0aGlzKCkgewot
ICAgICAgbWVzc2FnZVNldFdpcmVGb3JtYXRfID0gb3RoZXIubWVzc2FnZVNldFdpcmVGb3JtYXRf
OwotICAgICAgbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3Nvcl8gPSBvdGhlci5ub1N0YW5kYXJk
RGVzY3JpcHRvckFjY2Vzc29yXzsKLSAgICAgIGRlcHJlY2F0ZWRfID0gb3RoZXIuZGVwcmVjYXRl
ZF87Ci0gICAgICBtYXBFbnRyeV8gPSBvdGhlci5tYXBFbnRyeV87Ci0gICAgICB1bmludGVycHJl
dGVkT3B0aW9uXyA9IG90aGVyLnVuaW50ZXJwcmV0ZWRPcHRpb25fLkNsb25lKCk7Ci0gICAgfQot
Ci0gICAgcHVibGljIE1lc3NhZ2VPcHRpb25zIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBN
ZXNzYWdlT3B0aW9ucyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgIm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0IiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBNZXNzYWdlU2V0V2lyZUZvcm1hdEZpZWxkTnVtYmVyID0gMTsK
LSAgICBwcml2YXRlIGJvb2wgbWVzc2FnZVNldFdpcmVGb3JtYXRfOwotICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAvLy8gIFNldCB0cnVlIHRvIHVzZSB0aGUgb2xkIHByb3RvMSBNZXNzYWdlU2V0IHdp
cmUgZm9ybWF0IGZvciBleHRlbnNpb25zLgotICAgIC8vLyAgVGhpcyBpcyBwcm92aWRlZCBmb3Ig
YmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTWVzc2FnZVNldCB3aXJlCi0gICAgLy8v
ICBmb3JtYXQuICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBmb3IgYW55IG90aGVyIHJlYXNvbjog
IEl0J3MgbGVzcwotICAgIC8vLyAgZWZmaWNpZW50LCBoYXMgZmV3ZXIgZmVhdHVyZXMsIGFuZCBp
cyBtb3JlIGNvbXBsaWNhdGVkLgotICAgIC8vLwotICAgIC8vLyAgVGhlIG1lc3NhZ2UgbXVzdCBi
ZSBkZWZpbmVkIGV4YWN0bHkgYXMgZm9sbG93czoKLSAgICAvLy8gICAgbWVzc2FnZSBGb28gewot
ICAgIC8vLyAgICAgIG9wdGlvbiBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCA9IHRydWU7Ci0gICAg
Ly8vICAgICAgZXh0ZW5zaW9ucyA0IHRvIG1heDsKLSAgICAvLy8gICAgfQotICAgIC8vLyAgTm90
ZSB0aGF0IHRoZSBtZXNzYWdlIGNhbm5vdCBoYXZlIGFueSBkZWZpbmVkIGZpZWxkczsgTWVzc2Fn
ZVNldHMgb25seQotICAgIC8vLyAgaGF2ZSBleHRlbnNpb25zLgotICAgIC8vLwotICAgIC8vLyAg
QWxsIGV4dGVuc2lvbnMgb2YgeW91ciB0eXBlIG11c3QgYmUgc2luZ3VsYXIgbWVzc2FnZXM7IGUu
Zy4gdGhleSBjYW5ub3QKLSAgICAvLy8gIGJlIGludDMycywgZW51bXMsIG9yIHJlcGVhdGVkIG1l
c3NhZ2VzLgotICAgIC8vLwotICAgIC8vLyAgQmVjYXVzZSB0aGlzIGlzIGFuIG9wdGlvbiwgdGhl
IGFib3ZlIHR3byByZXN0cmljdGlvbnMgYXJlIG5vdCBlbmZvcmNlZCBieQotICAgIC8vLyAgdGhl
IHByb3RvY29sIGNvbXBpbGVyLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGJvb2wg
TWVzc2FnZVNldFdpcmVGb3JtYXQgewotICAgICAgZ2V0IHsgcmV0dXJuIG1lc3NhZ2VTZXRXaXJl
Rm9ybWF0XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgbWVzc2FnZVNldFdpcmVGb3JtYXRfID0g
dmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBm
b3IgdGhlICJub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yIiBmaWVsZC48L3N1bW1hcnk+
Ci0gICAgcHVibGljIGNvbnN0IGludCBOb1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yRmllbGRO
dW1iZXIgPSAyOwotICAgIHByaXZhdGUgYm9vbCBub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29y
XzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBEaXNhYmxlcyB0aGUgZ2VuZXJhdGlvbiBv
ZiB0aGUgc3RhbmRhcmQgImRlc2NyaXB0b3IoKSIgYWNjZXNzb3IsIHdoaWNoIGNhbgotICAgIC8v
LyAgY29uZmxpY3Qgd2l0aCBhIGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuICBUaGlzIGlzIG1lYW50
IHRvIG1ha2UgbWlncmF0aW9uCi0gICAgLy8vICBmcm9tIHByb3RvMSBlYXNpZXI7IG5ldyBjb2Rl
IHNob3VsZCBhdm9pZCBmaWVsZHMgbmFtZWQgImRlc2NyaXB0b3IiLgotICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgcHVibGljIGJvb2wgTm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvciB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3Nvcl87IH0KLSAgICAgIHNl
dCB7Ci0gICAgICAgIG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3JfID0gdmFsdWU7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJkZXBy
ZWNhdGVkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBEZXByZWNhdGVk
RmllbGROdW1iZXIgPSAzOwotICAgIHByaXZhdGUgYm9vbCBkZXByZWNhdGVkXzsKLSAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgLy8vICBJcyB0aGlzIG1lc3NhZ2UgZGVwcmVjYXRlZD8KLSAgICAvLy8g
IERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0
ZWQgYW5ub3RhdGlvbnMKLSAgICAvLy8gIGZvciB0aGUgbWVzc2FnZSwgb3IgaXQgd2lsbCBiZSBj
b21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LAotICAgIC8vLyAgdGhpcyBpcyBh
IGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIG1lc3NhZ2VzLgotICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgcHVibGljIGJvb2wgRGVwcmVjYXRlZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gZGVw
cmVjYXRlZF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGRlcHJlY2F0ZWRfID0gdmFsdWU7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJt
YXBfZW50cnkiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE1hcEVudHJ5
RmllbGROdW1iZXIgPSA3OwotICAgIHByaXZhdGUgYm9vbCBtYXBFbnRyeV87Ci0gICAgLy8vIDxz
dW1tYXJ5PgotICAgIC8vLyAgV2hldGhlciB0aGUgbWVzc2FnZSBpcyBhbiBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBtYXAgZW50cnkgdHlwZSBmb3IgdGhlCi0gICAgLy8vICBtYXBzIGZpZWxkLgot
ICAgIC8vLwotICAgIC8vLyAgRm9yIG1hcHMgZmllbGRzOgotICAgIC8vLyAgICAgIG1hcCZsdDtL
ZXlUeXBlLCBWYWx1ZVR5cGU+IG1hcF9maWVsZCA9IDE7Ci0gICAgLy8vICBUaGUgcGFyc2VkIGRl
c2NyaXB0b3IgbG9va3MgbGlrZToKLSAgICAvLy8gICAgICBtZXNzYWdlIE1hcEZpZWxkRW50cnkg
ewotICAgIC8vLyAgICAgICAgICBvcHRpb24gbWFwX2VudHJ5ID0gdHJ1ZTsKLSAgICAvLy8gICAg
ICAgICAgb3B0aW9uYWwgS2V5VHlwZSBrZXkgPSAxOwotICAgIC8vLyAgICAgICAgICBvcHRpb25h
bCBWYWx1ZVR5cGUgdmFsdWUgPSAyOwotICAgIC8vLyAgICAgIH0KLSAgICAvLy8gICAgICByZXBl
YXRlZCBNYXBGaWVsZEVudHJ5IG1hcF9maWVsZCA9IDE7Ci0gICAgLy8vCi0gICAgLy8vICBJbXBs
ZW1lbnRhdGlvbnMgbWF5IGNob29zZSBub3QgdG8gZ2VuZXJhdGUgdGhlIG1hcF9lbnRyeT10cnVl
IG1lc3NhZ2UsIGJ1dAotICAgIC8vLyAgdXNlIGEgbmF0aXZlIG1hcCBpbiB0aGUgdGFyZ2V0IGxh
bmd1YWdlIHRvIGhvbGQgdGhlIGtleXMgYW5kIHZhbHVlcy4KLSAgICAvLy8gIFRoZSByZWZsZWN0
aW9uIEFQSXMgaW4gc3VjaCBpbXBsZW1lbnRpb25zIHN0aWxsIG5lZWQgdG8gd29yayBhcwotICAg
IC8vLyAgaWYgdGhlIGZpZWxkIGlzIGEgcmVwZWF0ZWQgbWVzc2FnZSBmaWVsZC4KLSAgICAvLy8K
LSAgICAvLy8gIE5PVEU6IERvIG5vdCBzZXQgdGhlIG9wdGlvbiBpbiAucHJvdG8gZmlsZXMuIEFs
d2F5cyB1c2UgdGhlIG1hcHMgc3ludGF4Ci0gICAgLy8vICBpbnN0ZWFkLiBUaGUgb3B0aW9uIHNo
b3VsZCBvbmx5IGJlIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSBwcm90byBjb21waWxlcgotICAgIC8v
LyAgcGFyc2VyLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGJvb2wgTWFwRW50cnkg
ewotICAgICAgZ2V0IHsgcmV0dXJuIG1hcEVudHJ5XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
bWFwRW50cnlfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZp
ZWxkIG51bWJlciBmb3IgdGhlICJ1bmludGVycHJldGVkX29wdGlvbiIgZmllbGQuPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVW5pbnRlcnByZXRlZE9wdGlvbkZpZWxkTnVtYmVyID0g
OTk5OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbj4gX3JlcGVhdGVk
X3VuaW50ZXJwcmV0ZWRPcHRpb25fY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JN
ZXNzYWdlKDc5OTQsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uVW5pbnRlcnBy
ZXRlZE9wdGlvbi5QYXJzZXIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZp
ZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlv
bj4gdW5pbnRlcnByZXRlZE9wdGlvbl8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbj4oKTsKLSAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgLy8vICBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNu
J3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlv
bi5VbmludGVycHJldGVkT3B0aW9uPiBVbmludGVycHJldGVkT3B0aW9uIHsKLSAgICAgIGdldCB7
IHJldHVybiB1bmludGVycHJldGVkT3B0aW9uXzsgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVy
cmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3Ro
ZXIgYXMgTWVzc2FnZU9wdGlvbnMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhN
ZXNzYWdlT3B0aW9ucyBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwg
bnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVy
ZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9
Ci0gICAgICBpZiAoTWVzc2FnZVNldFdpcmVGb3JtYXQgIT0gb3RoZXIuTWVzc2FnZVNldFdpcmVG
b3JtYXQpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChOb1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vz
c29yICE9IG90aGVyLk5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmIChEZXByZWNhdGVkICE9IG90aGVyLkRlcHJlY2F0ZWQpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmIChNYXBFbnRyeSAhPSBvdGhlci5NYXBFbnRyeSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgaWYoIXVuaW50ZXJwcmV0ZWRPcHRpb25fLkVxdWFscyhvdGhlci51bmludGVycHJldGVkT3B0
aW9uXykpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1
YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0g
ICAgICBpZiAoTWVzc2FnZVNldFdpcmVGb3JtYXQgIT0gZmFsc2UpIGhhc2ggXj0gTWVzc2FnZVNl
dFdpcmVGb3JtYXQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChOb1N0YW5kYXJkRGVzY3JpcHRv
ckFjY2Vzc29yICE9IGZhbHNlKSBoYXNoIF49IE5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3Iu
R2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChEZXByZWNhdGVkICE9IGZhbHNlKSBoYXNoIF49IERl
cHJlY2F0ZWQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChNYXBFbnRyeSAhPSBmYWxzZSkgaGFz
aCBePSBNYXBFbnRyeS5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSB1bmludGVycHJldGVk
T3B0aW9uXy5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAg
cHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNv
bkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGlj
IHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAo
TWVzc2FnZVNldFdpcmVGb3JtYXQgIT0gZmFsc2UpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3
VGFnKDgpOwotICAgICAgICBvdXRwdXQuV3JpdGVCb29sKE1lc3NhZ2VTZXRXaXJlRm9ybWF0KTsK
LSAgICAgIH0KLSAgICAgIGlmIChOb1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yICE9IGZhbHNl
KSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxNik7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZUJvb2woTm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3Nvcik7Ci0gICAgICB9Ci0gICAgICBpZiAo
RGVwcmVjYXRlZCAhPSBmYWxzZSkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMjQpOwot
ICAgICAgICBvdXRwdXQuV3JpdGVCb29sKERlcHJlY2F0ZWQpOwotICAgICAgfQotICAgICAgaWYg
KE1hcEVudHJ5ICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg1Nik7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZUJvb2woTWFwRW50cnkpOwotICAgICAgfQotICAgICAgdW5pbnRl
cnByZXRlZE9wdGlvbl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF91bmludGVycHJldGVkT3B0
aW9uX2NvZGVjKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0g
ICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoTWVzc2FnZVNldFdpcmVGb3JtYXQgIT0gZmFs
c2UpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgMTsKLSAgICAgIH0KLSAgICAgIGlmIChOb1N0YW5k
YXJkRGVzY3JpcHRvckFjY2Vzc29yICE9IGZhbHNlKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDE7
Ci0gICAgICB9Ci0gICAgICBpZiAoRGVwcmVjYXRlZCAhPSBmYWxzZSkgewotICAgICAgICBzaXpl
ICs9IDEgKyAxOwotICAgICAgfQotICAgICAgaWYgKE1hcEVudHJ5ICE9IGZhbHNlKSB7Ci0gICAg
ICAgIHNpemUgKz0gMSArIDE7Ci0gICAgICB9Ci0gICAgICBzaXplICs9IHVuaW50ZXJwcmV0ZWRP
cHRpb25fLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3VuaW50ZXJwcmV0ZWRPcHRpb25fY29kZWMp
OwotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9t
KE1lc3NhZ2VPcHRpb25zIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTWVzc2FnZVNldFdpcmVGb3Jt
YXQgIT0gZmFsc2UpIHsKLSAgICAgICAgTWVzc2FnZVNldFdpcmVGb3JtYXQgPSBvdGhlci5NZXNz
YWdlU2V0V2lyZUZvcm1hdDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5Ob1N0YW5kYXJkRGVz
Y3JpcHRvckFjY2Vzc29yICE9IGZhbHNlKSB7Ci0gICAgICAgIE5vU3RhbmRhcmREZXNjcmlwdG9y
QWNjZXNzb3IgPSBvdGhlci5Ob1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yOwotICAgICAgfQot
ICAgICAgaWYgKG90aGVyLkRlcHJlY2F0ZWQgIT0gZmFsc2UpIHsKLSAgICAgICAgRGVwcmVjYXRl
ZCA9IG90aGVyLkRlcHJlY2F0ZWQ7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTWFwRW50cnkg
IT0gZmFsc2UpIHsKLSAgICAgICAgTWFwRW50cnkgPSBvdGhlci5NYXBFbnRyeTsKLSAgICAgIH0K
LSAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25fLkFkZChvdGhlci51bmludGVycHJldGVkT3B0aW9u
Xyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3Ry
ZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQu
UmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSA4OiB7Ci0gICAgICAgICAgICBNZXNzYWdlU2V0V2lyZUZvcm1h
dCA9IGlucHV0LlJlYWRCb29sKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSAxNjogewotICAgICAgICAgICAgTm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nl
c3NvciA9IGlucHV0LlJlYWRCb29sKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgY2FzZSAyNDogewotICAgICAgICAgICAgRGVwcmVjYXRlZCA9IGlucHV0LlJl
YWRCb29sKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSA1NjogewotICAgICAgICAgICAgTWFwRW50cnkgPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNzk5NDogewotICAgICAg
ICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRl
ZF91bmludGVycHJldGVkT3B0aW9uX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6U3lz
dGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgaW50ZXJu
YWwgc2VhbGVkIHBhcnRpYWwgY2xhc3MgRmllbGRPcHRpb25zIDogcGI6OklNZXNzYWdlPEZpZWxk
T3B0aW9ucz4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2Vy
PEZpZWxkT3B0aW9ucz4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxGaWVsZE9wdGlv
bnM+KCgpID0+IG5ldyBGaWVsZE9wdGlvbnMoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVz
c2FnZVBhcnNlcjxGaWVsZE9wdGlvbnM+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9
IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9y
IHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9u
LkRlc2NyaXB0b3JSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzExXTsgfQotICAg
IH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3Ig
ewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMg
RmllbGRPcHRpb25zKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBw
YXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBGaWVsZE9wdGlvbnMo
RmllbGRPcHRpb25zIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBjdHlwZV8gPSBvdGhlci5jdHlw
ZV87Ci0gICAgICBwYWNrZWRfID0gb3RoZXIucGFja2VkXzsKLSAgICAgIGpzdHlwZV8gPSBvdGhl
ci5qc3R5cGVfOwotICAgICAgbGF6eV8gPSBvdGhlci5sYXp5XzsKLSAgICAgIGRlcHJlY2F0ZWRf
ID0gb3RoZXIuZGVwcmVjYXRlZF87Ci0gICAgICB3ZWFrXyA9IG90aGVyLndlYWtfOwotICAgICAg
dW5pbnRlcnByZXRlZE9wdGlvbl8gPSBvdGhlci51bmludGVycHJldGVkT3B0aW9uXy5DbG9uZSgp
OwotICAgIH0KLQotICAgIHB1YmxpYyBGaWVsZE9wdGlvbnMgQ2xvbmUoKSB7Ci0gICAgICByZXR1
cm4gbmV3IEZpZWxkT3B0aW9ucyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgImN0eXBlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBDdHlwZUZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlJlZmxlY3Rpb24uRmllbGRPcHRpb25zLlR5cGVzLkNUeXBlIGN0eXBlXyA9IDA7
Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIGN0eXBlIG9wdGlvbiBpbnN0cnVjdHMg
dGhlIEMrKyBjb2RlIGdlbmVyYXRvciB0byB1c2UgYSBkaWZmZXJlbnQKLSAgICAvLy8gIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSBmaWVsZCB0aGFuIGl0IG5vcm1hbGx5IHdvdWxkLiAgU2VlIHRoZSBz
cGVjaWZpYwotICAgIC8vLyAgb3B0aW9ucyBiZWxvdy4gIFRoaXMgb3B0aW9uIGlzIG5vdCB5ZXQg
aW1wbGVtZW50ZWQgaW4gdGhlIG9wZW4gc291cmNlCi0gICAgLy8vICByZWxlYXNlIC0tIHNvcnJ5
LCB3ZSdsbCB0cnkgdG8gaW5jbHVkZSBpdCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIQotICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24u
RmllbGRPcHRpb25zLlR5cGVzLkNUeXBlIEN0eXBlIHsKLSAgICAgIGdldCB7IHJldHVybiBjdHlw
ZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGN0eXBlXyA9IHZhbHVlOwotICAgICAgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicGFja2VkIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBQYWNrZWRGaWVsZE51bWJlciA9IDI7
Ci0gICAgcHJpdmF0ZSBib29sIHBhY2tlZF87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAg
VGhlIHBhY2tlZCBvcHRpb24gY2FuIGJlIGVuYWJsZWQgZm9yIHJlcGVhdGVkIHByaW1pdGl2ZSBm
aWVsZHMgdG8gZW5hYmxlCi0gICAgLy8vICBhIG1vcmUgZWZmaWNpZW50IHJlcHJlc2VudGF0aW9u
IG9uIHRoZSB3aXJlLiBSYXRoZXIgdGhhbiByZXBlYXRlZGx5Ci0gICAgLy8vICB3cml0aW5nIHRo
ZSB0YWcgYW5kIHR5cGUgZm9yIGVhY2ggZWxlbWVudCwgdGhlIGVudGlyZSBhcnJheSBpcyBlbmNv
ZGVkIGFzCi0gICAgLy8vICBhIHNpbmdsZSBsZW5ndGgtZGVsaW1pdGVkIGJsb2IuIEluIHByb3Rv
Mywgb25seSBleHBsaWNpdCBzZXR0aW5nIGl0IHRvCi0gICAgLy8vICBmYWxzZSB3aWxsIGF2b2lk
IHVzaW5nIHBhY2tlZCBlbmNvZGluZy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBi
b29sIFBhY2tlZCB7Ci0gICAgICBnZXQgeyByZXR1cm4gcGFja2VkXzsgfQotICAgICAgc2V0IHsK
LSAgICAgICAgcGFja2VkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3Vt
bWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAianN0eXBlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAg
cHVibGljIGNvbnN0IGludCBKc3R5cGVGaWVsZE51bWJlciA9IDY7Ci0gICAgcHJpdmF0ZSBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkZpZWxkT3B0aW9ucy5UeXBlcy5KU1R5cGUg
anN0eXBlXyA9IDA7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIGpzdHlwZSBvcHRp
b24gZGV0ZXJtaW5lcyB0aGUgSmF2YVNjcmlwdCB0eXBlIHVzZWQgZm9yIHZhbHVlcyBvZiB0aGUK
LSAgICAvLy8gIGZpZWxkLiAgVGhlIG9wdGlvbiBpcyBwZXJtaXR0ZWQgb25seSBmb3IgNjQgYml0
IGludGVncmFsIGFuZCBmaXhlZCB0eXBlcwotICAgIC8vLyAgKGludDY0LCB1aW50NjQsIHNpbnQ2
NCwgZml4ZWQ2NCwgc2ZpeGVkNjQpLiAgQnkgZGVmYXVsdCB0aGVzZSB0eXBlcyBhcmUKLSAgICAv
Ly8gIHJlcHJlc2VudGVkIGFzIEphdmFTY3JpcHQgc3RyaW5ncy4gIFRoaXMgYXZvaWRzIGxvc3Mg
b2YgcHJlY2lzaW9uIHRoYXQgY2FuCi0gICAgLy8vICBoYXBwZW4gd2hlbiBhIGxhcmdlIHZhbHVl
IGlzIGNvbnZlcnRlZCB0byBhIGZsb2F0aW5nIHBvaW50IEphdmFTY3JpcHQKLSAgICAvLy8gIG51
bWJlcnMuICBTcGVjaWZ5aW5nIEpTX05VTUJFUiBmb3IgdGhlIGpzdHlwZSBjYXVzZXMgdGhlIGdl
bmVyYXRlZAotICAgIC8vLyAgSmF2YVNjcmlwdCBjb2RlIHRvIHVzZSB0aGUgSmF2YVNjcmlwdCAi
bnVtYmVyIiB0eXBlIGluc3RlYWQgb2Ygc3RyaW5ncy4KLSAgICAvLy8gIFRoaXMgb3B0aW9uIGlz
IGFuIGVudW0gdG8gcGVybWl0IGFkZGl0aW9uYWwgdHlwZXMgdG8gYmUgYWRkZWQsCi0gICAgLy8v
ICBlLmcuIGdvb2cubWF0aC5JbnRlZ2VyLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGlj
IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRmllbGRPcHRpb25zLlR5cGVzLkpT
VHlwZSBKc3R5cGUgewotICAgICAgZ2V0IHsgcmV0dXJuIGpzdHlwZV87IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIGpzdHlwZV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImxhenkiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IExhenlGaWVsZE51bWJlciA9IDU7Ci0gICAgcHJpdmF0ZSBib29sIGxh
enlfOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFNob3VsZCB0aGlzIGZpZWxkIGJlIHBh
cnNlZCBsYXppbHk/ICBMYXp5IGFwcGxpZXMgb25seSB0byBtZXNzYWdlLXR5cGUKLSAgICAvLy8g
IGZpZWxkcy4gIEl0IG1lYW5zIHRoYXQgd2hlbiB0aGUgb3V0ZXIgbWVzc2FnZSBpcyBpbml0aWFs
bHkgcGFyc2VkLCB0aGUKLSAgICAvLy8gIGlubmVyIG1lc3NhZ2UncyBjb250ZW50cyB3aWxsIG5v
dCBiZSBwYXJzZWQgYnV0IGluc3RlYWQgc3RvcmVkIGluIGVuY29kZWQKLSAgICAvLy8gIGZvcm0u
ICBUaGUgaW5uZXIgbWVzc2FnZSB3aWxsIGFjdHVhbGx5IGJlIHBhcnNlZCB3aGVuIGl0IGlzIGZp
cnN0IGFjY2Vzc2VkLgotICAgIC8vLwotICAgIC8vLyAgVGhpcyBpcyBvbmx5IGEgaGludC4gIElt
cGxlbWVudGF0aW9ucyBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UKLSAgICAvLy8g
IGVhZ2VyIG9yIGxhenkgcGFyc2luZyByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIG9w
dGlvbi4gIEhvd2V2ZXIsCi0gICAgLy8vICBzZXR0aW5nIHRoaXMgb3B0aW9uIHRydWUgc3VnZ2Vz
dHMgdGhhdCB0aGUgcHJvdG9jb2wgYXV0aG9yIGJlbGlldmVzIHRoYXQKLSAgICAvLy8gIHVzaW5n
IGxhenkgcGFyc2luZyBvbiB0aGlzIGZpZWxkIGlzIHdvcnRoIHRoZSBhZGRpdGlvbmFsIGJvb2tr
ZWVwaW5nCi0gICAgLy8vICBvdmVyaGVhZCB0eXBpY2FsbHkgbmVlZGVkIHRvIGltcGxlbWVudCBp
dC4KLSAgICAvLy8KLSAgICAvLy8gIFRoaXMgb3B0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgcHVi
bGljIGludGVyZmFjZSBvZiBhbnkgZ2VuZXJhdGVkIGNvZGU7Ci0gICAgLy8vICBhbGwgbWV0aG9k
IHNpZ25hdHVyZXMgcmVtYWluIHRoZSBzYW1lLiAgRnVydGhlcm1vcmUsIHRocmVhZC1zYWZldHkg
b2YgdGhlCi0gICAgLy8vICBpbnRlcmZhY2UgaXMgbm90IGFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9u
OyBjb25zdCBtZXRob2RzIHJlbWFpbiBzYWZlIHRvCi0gICAgLy8vICBjYWxsIGZyb20gbXVsdGlw
bGUgdGhyZWFkcyBjb25jdXJyZW50bHksIHdoaWxlIG5vbi1jb25zdCBtZXRob2RzIGNvbnRpbnVl
Ci0gICAgLy8vICB0byByZXF1aXJlIGV4Y2x1c2l2ZSBhY2Nlc3MuCi0gICAgLy8vCi0gICAgLy8v
ICBOb3RlIHRoYXQgaW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2Ugbm90IHRvIGNoZWNrIHJlcXVp
cmVkIGZpZWxkcyB3aXRoaW4KLSAgICAvLy8gIGEgbGF6eSBzdWItbWVzc2FnZS4gIFRoYXQgaXMs
IGNhbGxpbmcgSXNJbml0aWFsaXplZCgpIG9uIHRoZSBvdXRoZXIgbWVzc2FnZQotICAgIC8vLyAg
bWF5IHJldHVybiB0cnVlIGV2ZW4gaWYgdGhlIGlubmVyIG1lc3NhZ2UgaGFzIG1pc3NpbmcgcmVx
dWlyZWQgZmllbGRzLgotICAgIC8vLyAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndp
c2UgdGhlIGlubmVyIG1lc3NhZ2Ugd291bGQgaGF2ZSB0byBiZQotICAgIC8vLyAgcGFyc2VkIGlu
IG9yZGVyIHRvIHBlcmZvcm0gdGhlIGNoZWNrLCBkZWZlYXRpbmcgdGhlIHB1cnBvc2Ugb2YgbGF6
eQotICAgIC8vLyAgcGFyc2luZy4gIEFuIGltcGxlbWVudGF0aW9uIHdoaWNoIGNob29zZXMgbm90
IHRvIGNoZWNrIHJlcXVpcmVkIGZpZWxkcwotICAgIC8vLyAgbXVzdCBiZSBjb25zaXN0ZW50IGFi
b3V0IGl0LiAgVGhhdCBpcywgZm9yIGFueSBwYXJ0aWN1bGFyIHN1Yi1tZXNzYWdlLCB0aGUKLSAg
ICAvLy8gIGltcGxlbWVudGF0aW9uIG11c3QgZWl0aGVyICphbHdheXMqIGNoZWNrIGl0cyByZXF1
aXJlZCBmaWVsZHMsIG9yICpuZXZlcioKLSAgICAvLy8gIGNoZWNrIGl0cyByZXF1aXJlZCBmaWVs
ZHMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlIG1lc3NhZ2UgaGFzCi0gICAgLy8v
ICBiZWVuIHBhcnNlZC4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBib29sIExhenkg
ewotICAgICAgZ2V0IHsgcmV0dXJuIGxhenlfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBsYXp5
XyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAiZGVwcmVjYXRlZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgRGVwcmVjYXRlZEZpZWxkTnVtYmVyID0gMzsKLSAgICBwcml2YXRlIGJvb2wgZGVwcmVj
YXRlZF87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSXMgdGhpcyBmaWVsZCBkZXByZWNh
dGVkPwotICAgIC8vLyAgRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2Fu
IGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9ucwotICAgIC8vLyAgZm9yIGFjY2Vzc29ycywgb3Ig
aXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LCB0aGlzCi0g
ICAgLy8vICBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIGZpZWxkcy4KLSAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBib29sIERlcHJlY2F0ZWQgewotICAgICAgZ2V0IHsg
cmV0dXJuIGRlcHJlY2F0ZWRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBkZXByZWNhdGVkXyA9
IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAid2VhayIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgV2Vh
a0ZpZWxkTnVtYmVyID0gMTA7Ci0gICAgcHJpdmF0ZSBib29sIHdlYWtfOwotICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAvLy8gIEZvciBHb29nbGUtaW50ZXJuYWwgbWlncmF0aW9uIG9ubHkuIERvIG5v
dCB1c2UuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgYm9vbCBXZWFrIHsKLSAgICAg
IGdldCB7IHJldHVybiB3ZWFrXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgd2Vha18gPSB2YWx1
ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0
aGUgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBVbmludGVycHJldGVkT3B0aW9uRmllbGROdW1iZXIgPSA5OTk7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
UmVmbGVjdGlvbi5VbmludGVycHJldGVkT3B0aW9uPiBfcmVwZWF0ZWRfdW5pbnRlcnByZXRlZE9w
dGlvbl9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoNzk5NCwgZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5VbmludGVycHJldGVkT3B0aW9uLlBhcnNl
cik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuUmVmbGVjdGlvbi5VbmludGVycHJldGVkT3B0aW9uPiB1bmludGVycHJldGVk
T3B0aW9uXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
UmVmbGVjdGlvbi5VbmludGVycHJldGVkT3B0aW9uPigpOwotICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAvLy8gIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVy
ZS4gU2VlIGFib3ZlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0
ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRP
cHRpb24+IFVuaW50ZXJwcmV0ZWRPcHRpb24gewotICAgICAgZ2V0IHsgcmV0dXJuIHVuaW50ZXJw
cmV0ZWRPcHRpb25fOyB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxz
KG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBGaWVsZE9wdGlv
bnMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhGaWVsZE9wdGlvbnMgb3RoZXIp
IHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRo
aXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKEN0eXBlICE9
IG90aGVyLkN0eXBlKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoUGFja2VkICE9IG90aGVyLlBh
Y2tlZCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEpzdHlwZSAhPSBvdGhlci5Kc3R5cGUpIHJl
dHVybiBmYWxzZTsKLSAgICAgIGlmIChMYXp5ICE9IG90aGVyLkxhenkpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmIChEZXByZWNhdGVkICE9IG90aGVyLkRlcHJlY2F0ZWQpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmIChXZWFrICE9IG90aGVyLldlYWspIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCF1
bmludGVycHJldGVkT3B0aW9uXy5FcXVhbHMob3RoZXIudW5pbnRlcnByZXRlZE9wdGlvbl8pKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3Zl
cnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYg
KEN0eXBlICE9IDApIGhhc2ggXj0gQ3R5cGUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChQYWNr
ZWQgIT0gZmFsc2UpIGhhc2ggXj0gUGFja2VkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoSnN0
eXBlICE9IDApIGhhc2ggXj0gSnN0eXBlLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoTGF6eSAh
PSBmYWxzZSkgaGFzaCBePSBMYXp5LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoRGVwcmVjYXRl
ZCAhPSBmYWxzZSkgaGFzaCBePSBEZXByZWNhdGVkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAo
V2VhayAhPSBmYWxzZSkgaGFzaCBePSBXZWFrLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49
IHVuaW50ZXJwcmV0ZWRPcHRpb25fLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAg
cmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQp
IHsKLSAgICAgIGlmIChDdHlwZSAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg4
KTsKLSAgICAgICAgb3V0cHV0LldyaXRlRW51bSgoaW50KSBDdHlwZSk7Ci0gICAgICB9Ci0gICAg
ICBpZiAoUGFja2VkICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxNik7
Ci0gICAgICAgIG91dHB1dC5Xcml0ZUJvb2woUGFja2VkKTsKLSAgICAgIH0KLSAgICAgIGlmIChE
ZXByZWNhdGVkICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygyNCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZUJvb2woRGVwcmVjYXRlZCk7Ci0gICAgICB9Ci0gICAgICBpZiAo
TGF6eSAhPSBmYWxzZSkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNDApOwotICAgICAg
ICBvdXRwdXQuV3JpdGVCb29sKExhenkpOwotICAgICAgfQotICAgICAgaWYgKEpzdHlwZSAhPSAw
KSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg0OCk7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZUVudW0oKGludCkgSnN0eXBlKTsKLSAgICAgIH0KLSAgICAgIGlmIChXZWFrICE9IGZhbHNlKSB7
Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg4MCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUJv
b2woV2Vhayk7Ci0gICAgICB9Ci0gICAgICB1bmludGVycHJldGVkT3B0aW9uXy5Xcml0ZVRvKG91
dHB1dCwgX3JlcGVhdGVkX3VuaW50ZXJwcmV0ZWRPcHRpb25fY29kZWMpOwotICAgIH0KLQotICAg
IHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAg
IGlmIChDdHlwZSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0
cmVhbS5Db21wdXRlRW51bVNpemUoKGludCkgQ3R5cGUpOwotICAgICAgfQotICAgICAgaWYgKFBh
Y2tlZCAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9IDEgKyAxOwotICAgICAgfQotICAgICAg
aWYgKEpzdHlwZSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0
cmVhbS5Db21wdXRlRW51bVNpemUoKGludCkgSnN0eXBlKTsKLSAgICAgIH0KLSAgICAgIGlmIChM
YXp5ICE9IGZhbHNlKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDE7Ci0gICAgICB9Ci0gICAgICBp
ZiAoRGVwcmVjYXRlZCAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9IDEgKyAxOwotICAgICAg
fQotICAgICAgaWYgKFdlYWsgIT0gZmFsc2UpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgMTsKLSAg
ICAgIH0KLSAgICAgIHNpemUgKz0gdW5pbnRlcnByZXRlZE9wdGlvbl8uQ2FsY3VsYXRlU2l6ZShf
cmVwZWF0ZWRfdW5pbnRlcnByZXRlZE9wdGlvbl9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oRmllbGRPcHRpb25zIG90aGVyKSB7
Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0g
ICAgICBpZiAob3RoZXIuQ3R5cGUgIT0gMCkgewotICAgICAgICBDdHlwZSA9IG90aGVyLkN0eXBl
OwotICAgICAgfQotICAgICAgaWYgKG90aGVyLlBhY2tlZCAhPSBmYWxzZSkgewotICAgICAgICBQ
YWNrZWQgPSBvdGhlci5QYWNrZWQ7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuSnN0eXBlICE9
IDApIHsKLSAgICAgICAgSnN0eXBlID0gb3RoZXIuSnN0eXBlOwotICAgICAgfQotICAgICAgaWYg
KG90aGVyLkxhenkgIT0gZmFsc2UpIHsKLSAgICAgICAgTGF6eSA9IG90aGVyLkxhenk7Ci0gICAg
ICB9Ci0gICAgICBpZiAob3RoZXIuRGVwcmVjYXRlZCAhPSBmYWxzZSkgewotICAgICAgICBEZXBy
ZWNhdGVkID0gb3RoZXIuRGVwcmVjYXRlZDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5XZWFr
ICE9IGZhbHNlKSB7Ci0gICAgICAgIFdlYWsgPSBvdGhlci5XZWFrOwotICAgICAgfQotICAgICAg
dW5pbnRlcnByZXRlZE9wdGlvbl8uQWRkKG90aGVyLnVuaW50ZXJwcmV0ZWRPcHRpb25fKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5w
dXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFn
KCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAgIGN0eXBlXyA9IChnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5SZWZsZWN0aW9uLkZpZWxkT3B0aW9ucy5UeXBlcy5DVHlwZSkgaW5wdXQuUmVhZEVu
dW0oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE2
OiB7Ci0gICAgICAgICAgICBQYWNrZWQgPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjQ6IHsKLSAgICAgICAgICAgIERl
cHJlY2F0ZWQgPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGNhc2UgNDA6IHsKLSAgICAgICAgICAgIExhenkgPSBpbnB1dC5SZWFk
Qm9vbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2Ug
NDg6IHsKLSAgICAgICAgICAgIGpzdHlwZV8gPSAoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVm
bGVjdGlvbi5GaWVsZE9wdGlvbnMuVHlwZXMuSlNUeXBlKSBpbnB1dC5SZWFkRW51bSgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgODA6IHsKLSAgICAg
ICAgICAgIFdlYWsgPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGNhc2UgNzk5NDogewotICAgICAgICAgICAgdW5pbnRlcnByZXRl
ZE9wdGlvbl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF91bmludGVycHJldGVkT3B0
aW9uX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLQotICAgICNyZWdpb24gTmVzdGVkIHR5cGVzCi0gICAgLy8vIDxzdW1t
YXJ5PkNvbnRhaW5lciBmb3IgbmVzdGVkIHR5cGVzIGRlY2xhcmVkIGluIHRoZSBGaWVsZE9wdGlv
bnMgbWVzc2FnZSB0eXBlLjwvc3VtbWFyeT4KLSAgICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3Rp
Y3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICAgIHB1YmxpYyBzdGF0aWMgcGFy
dGlhbCBjbGFzcyBUeXBlcyB7Ci0gICAgICBpbnRlcm5hbCBlbnVtIENUeXBlIHsKLSAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gIERlZmF1bHQgbW9kZS4KLSAgICAgICAgLy8vIDwv
c3VtbWFyeT4KLSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJTVFJJTkciKV0gU3RyaW5nID0g
MCwKLSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJDT1JEIildIENvcmQgPSAxLAotICAgICAg
ICBbcGJyOjpPcmlnaW5hbE5hbWUoIlNUUklOR19QSUVDRSIpXSBTdHJpbmdQaWVjZSA9IDIsCi0g
ICAgICB9Ci0KLSAgICAgIGludGVybmFsIGVudW0gSlNUeXBlIHsKLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gIFVzZSB0aGUgZGVmYXVsdCB0eXBlLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkpTX05PUk1BTCIpXSBKc05vcm1h
bCA9IDAsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBVc2UgSmF2YVNjcmlw
dCBzdHJpbmdzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5h
bE5hbWUoIkpTX1NUUklORyIpXSBKc1N0cmluZyA9IDEsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgLy8vICBVc2UgSmF2YVNjcmlwdCBudW1iZXJzLgotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkpTX05VTUJFUiIpXSBKc051bWJlciA9
IDIsCi0gICAgICB9Ci0KLSAgICB9Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLQotICBbZ2xvYmFs
OjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBp
bnRlcm5hbCBzZWFsZWQgcGFydGlhbCBjbGFzcyBFbnVtT3B0aW9ucyA6IHBiOjpJTWVzc2FnZTxF
bnVtT3B0aW9ucz4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFy
c2VyPEVudW1PcHRpb25zPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPEVudW1PcHRp
b25zPigoKSA9PiBuZXcgRW51bU9wdGlvbnMoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVz
c2FnZVBhcnNlcjxFbnVtT3B0aW9ucz4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0g
fQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3Ig
ewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24u
RGVzY3JpcHRvclJlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMTJdOyB9Ci0gICAg
fQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7
Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBF
bnVtT3B0aW9ucygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFy
dGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgRW51bU9wdGlvbnMoRW51
bU9wdGlvbnMgb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIGFsbG93QWxpYXNfID0gb3RoZXIuYWxs
b3dBbGlhc187Ci0gICAgICBkZXByZWNhdGVkXyA9IG90aGVyLmRlcHJlY2F0ZWRfOwotICAgICAg
dW5pbnRlcnByZXRlZE9wdGlvbl8gPSBvdGhlci51bmludGVycHJldGVkT3B0aW9uXy5DbG9uZSgp
OwotICAgIH0KLQotICAgIHB1YmxpYyBFbnVtT3B0aW9ucyBDbG9uZSgpIHsKLSAgICAgIHJldHVy
biBuZXcgRW51bU9wdGlvbnModGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxk
IG51bWJlciBmb3IgdGhlICJhbGxvd19hbGlhcyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgQWxsb3dBbGlhc0ZpZWxkTnVtYmVyID0gMjsKLSAgICBwcml2YXRlIGJvb2wg
YWxsb3dBbGlhc187Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgU2V0IHRoaXMgb3B0aW9u
IHRvIHRydWUgdG8gYWxsb3cgbWFwcGluZyBkaWZmZXJlbnQgdGFnIG5hbWVzIHRvIHRoZSBzYW1l
Ci0gICAgLy8vICB2YWx1ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBib29sIEFs
bG93QWxpYXMgewotICAgICAgZ2V0IHsgcmV0dXJuIGFsbG93QWxpYXNfOyB9Ci0gICAgICBzZXQg
ewotICAgICAgICBhbGxvd0FsaWFzXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZGVwcmVjYXRlZCIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRGVwcmVjYXRlZEZpZWxkTnVtYmVyID0gMzsKLSAg
ICBwcml2YXRlIGJvb2wgZGVwcmVjYXRlZF87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAg
SXMgdGhpcyBlbnVtIGRlcHJlY2F0ZWQ/Ci0gICAgLy8vICBEZXBlbmRpbmcgb24gdGhlIHRhcmdl
dCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCi0gICAgLy8v
ICBmb3IgdGhlIGVudW0sIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUg
dmVyeSBsZWFzdCwgdGhpcwotICAgIC8vLyAgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNh
dGluZyBlbnVtcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBib29sIERlcHJlY2F0
ZWQgewotICAgICAgZ2V0IHsgcmV0dXJuIGRlcHJlY2F0ZWRfOyB9Ci0gICAgICBzZXQgewotICAg
ICAgICBkZXByZWNhdGVkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3Vt
bWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAidW5pbnRlcnByZXRlZF9vcHRpb24iIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFVuaW50ZXJwcmV0ZWRPcHRpb25GaWVsZE51
bWJlciA9IDk5OTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24+IF9y
ZXBlYXRlZF91bmludGVycHJldGVkT3B0aW9uX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29k
ZWMuRm9yTWVzc2FnZSg3OTk0LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVu
aW50ZXJwcmV0ZWRPcHRpb24uUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVw
ZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0
ZWRPcHRpb24+IHVuaW50ZXJwcmV0ZWRPcHRpb25fID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24+KCk7
Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBp
dCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCi0gICAgLy8vIDwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbj4gVW5pbnRlcnByZXRlZE9wdGlvbiB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gdW5pbnRlcnByZXRlZE9wdGlvbl87IH0KLSAgICB9Ci0KLSAgICBwdWJs
aWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1
YWxzKG90aGVyIGFzIEVudW1PcHRpb25zKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVh
bHMoRW51bU9wdGlvbnMgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIs
IG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZl
cmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
fQotICAgICAgaWYgKEFsbG93QWxpYXMgIT0gb3RoZXIuQWxsb3dBbGlhcykgcmV0dXJuIGZhbHNl
OwotICAgICAgaWYgKERlcHJlY2F0ZWQgIT0gb3RoZXIuRGVwcmVjYXRlZCkgcmV0dXJuIGZhbHNl
OwotICAgICAgaWYoIXVuaW50ZXJwcmV0ZWRPcHRpb25fLkVxdWFscyhvdGhlci51bmludGVycHJl
dGVkT3B0aW9uXykpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9
IDE7Ci0gICAgICBpZiAoQWxsb3dBbGlhcyAhPSBmYWxzZSkgaGFzaCBePSBBbGxvd0FsaWFzLkdl
dEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoRGVwcmVjYXRlZCAhPSBmYWxzZSkgaGFzaCBePSBEZXBy
ZWNhdGVkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHVuaW50ZXJwcmV0ZWRPcHRpb25f
LkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
b3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0
dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBX
cml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChBbGxvd0Fs
aWFzICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxNik7Ci0gICAgICAg
IG91dHB1dC5Xcml0ZUJvb2woQWxsb3dBbGlhcyk7Ci0gICAgICB9Ci0gICAgICBpZiAoRGVwcmVj
YXRlZCAhPSBmYWxzZSkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMjQpOwotICAgICAg
ICBvdXRwdXQuV3JpdGVCb29sKERlcHJlY2F0ZWQpOwotICAgICAgfQotICAgICAgdW5pbnRlcnBy
ZXRlZE9wdGlvbl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF91bmludGVycHJldGVkT3B0aW9u
X2NvZGVjKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAg
ICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoQWxsb3dBbGlhcyAhPSBmYWxzZSkgewotICAgICAg
ICBzaXplICs9IDEgKyAxOwotICAgICAgfQotICAgICAgaWYgKERlcHJlY2F0ZWQgIT0gZmFsc2Up
IHsKLSAgICAgICAgc2l6ZSArPSAxICsgMTsKLSAgICAgIH0KLSAgICAgIHNpemUgKz0gdW5pbnRl
cnByZXRlZE9wdGlvbl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfdW5pbnRlcnByZXRlZE9wdGlv
bl9jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBN
ZXJnZUZyb20oRW51bU9wdGlvbnMgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5BbGxvd0FsaWFzICE9
IGZhbHNlKSB7Ci0gICAgICAgIEFsbG93QWxpYXMgPSBvdGhlci5BbGxvd0FsaWFzOwotICAgICAg
fQotICAgICAgaWYgKG90aGVyLkRlcHJlY2F0ZWQgIT0gZmFsc2UpIHsKLSAgICAgICAgRGVwcmVj
YXRlZCA9IG90aGVyLkRlcHJlY2F0ZWQ7Ci0gICAgICB9Ci0gICAgICB1bmludGVycHJldGVkT3B0
aW9uXy5BZGQob3RoZXIudW5pbnRlcnByZXRlZE9wdGlvbl8pOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWlu
dCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAg
ICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0
LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTY6
IHsKLSAgICAgICAgICAgIEFsbG93QWxpYXMgPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMjQ6IHsKLSAgICAgICAgICAg
IERlcHJlY2F0ZWQgPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGNhc2UgNzk5NDogewotICAgICAgICAgICAgdW5pbnRlcnByZXRl
ZE9wdGlvbl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF91bmludGVycHJldGVkT3B0
aW9uX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRl
YnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgaW50ZXJuYWwgc2VhbGVkIHBhcnRpYWwg
Y2xhc3MgRW51bVZhbHVlT3B0aW9ucyA6IHBiOjpJTWVzc2FnZTxFbnVtVmFsdWVPcHRpb25zPiB7
Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8RW51bVZhbHVl
T3B0aW9ucz4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxFbnVtVmFsdWVPcHRpb25z
PigoKSA9PiBuZXcgRW51bVZhbHVlT3B0aW9ucygpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpN
ZXNzYWdlUGFyc2VyPEVudW1WYWx1ZU9wdGlvbnM+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFy
c2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNj
cmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZs
ZWN0aW9uLkRlc2NyaXB0b3JSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzEzXTsg
fQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2Ny
aXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgRW51bVZhbHVlT3B0aW9ucygpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAg
fQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgRW51
bVZhbHVlT3B0aW9ucyhFbnVtVmFsdWVPcHRpb25zIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBk
ZXByZWNhdGVkXyA9IG90aGVyLmRlcHJlY2F0ZWRfOwotICAgICAgdW5pbnRlcnByZXRlZE9wdGlv
bl8gPSBvdGhlci51bmludGVycHJldGVkT3B0aW9uXy5DbG9uZSgpOwotICAgIH0KLQotICAgIHB1
YmxpYyBFbnVtVmFsdWVPcHRpb25zIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBFbnVtVmFs
dWVPcHRpb25zKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAiZGVwcmVjYXRlZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBp
bnQgRGVwcmVjYXRlZEZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGJvb2wgZGVwcmVjYXRl
ZF87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSXMgdGhpcyBlbnVtIHZhbHVlIGRlcHJl
Y2F0ZWQ/Ci0gICAgLy8vICBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBj
YW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCi0gICAgLy8vICBmb3IgdGhlIGVudW0gdmFs
dWUsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwK
LSAgICAvLy8gIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBlbnVtIHZh
bHVlcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBib29sIERlcHJlY2F0ZWQgewot
ICAgICAgZ2V0IHsgcmV0dXJuIGRlcHJlY2F0ZWRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBk
ZXByZWNhdGVkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAidW5pbnRlcnByZXRlZF9vcHRpb24iIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFVuaW50ZXJwcmV0ZWRPcHRpb25GaWVsZE51bWJlciA9
IDk5OTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24+IF9yZXBlYXRl
ZF91bmludGVycHJldGVkT3B0aW9uX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9y
TWVzc2FnZSg3OTk0LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJw
cmV0ZWRPcHRpb24uUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRG
aWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRp
b24+IHVuaW50ZXJwcmV0ZWRPcHRpb25fID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24+KCk7Ci0gICAg
Ly8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vz
bid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rp
b24uVW5pbnRlcnByZXRlZE9wdGlvbj4gVW5pbnRlcnByZXRlZE9wdGlvbiB7Ci0gICAgICBnZXQg
eyByZXR1cm4gdW5pbnRlcnByZXRlZE9wdGlvbl87IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3Zl
cnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90
aGVyIGFzIEVudW1WYWx1ZU9wdGlvbnMpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFs
cyhFbnVtVmFsdWVPcHRpb25zIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90
aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAo
UmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIH0KLSAgICAgIGlmIChEZXByZWNhdGVkICE9IG90aGVyLkRlcHJlY2F0ZWQpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmKCF1bmludGVycHJldGVkT3B0aW9uXy5FcXVhbHMob3RoZXIudW5pbnRl
cnByZXRlZE9wdGlvbl8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhh
c2ggPSAxOwotICAgICAgaWYgKERlcHJlY2F0ZWQgIT0gZmFsc2UpIGhhc2ggXj0gRGVwcmVjYXRl
ZC5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSB1bmludGVycHJldGVkT3B0aW9uXy5HZXRI
YXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJy
aWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5U
b0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVU
byhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoRGVwcmVjYXRlZCAh
PSBmYWxzZSkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZUJvb2woRGVwcmVjYXRlZCk7Ci0gICAgICB9Ci0gICAgICB1bmludGVycHJldGVkT3B0
aW9uXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX3VuaW50ZXJwcmV0ZWRPcHRpb25fY29kZWMp
OwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBz
aXplID0gMDsKLSAgICAgIGlmIChEZXByZWNhdGVkICE9IGZhbHNlKSB7Ci0gICAgICAgIHNpemUg
Kz0gMSArIDE7Ci0gICAgICB9Ci0gICAgICBzaXplICs9IHVuaW50ZXJwcmV0ZWRPcHRpb25fLkNh
bGN1bGF0ZVNpemUoX3JlcGVhdGVkX3VuaW50ZXJwcmV0ZWRPcHRpb25fY29kZWMpOwotICAgICAg
cmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKEVudW1WYWx1
ZU9wdGlvbnMgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5EZXByZWNhdGVkICE9IGZhbHNlKSB7Ci0g
ICAgICAgIERlcHJlY2F0ZWQgPSBvdGhlci5EZXByZWNhdGVkOwotICAgICAgfQotICAgICAgdW5p
bnRlcnByZXRlZE9wdGlvbl8uQWRkKG90aGVyLnVuaW50ZXJwcmV0ZWRPcHRpb25fKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQp
IHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkp
ICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAgIERlcHJlY2F0ZWQgPSBpbnB1dC5SZWFkQm9vbCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNzk5NDog
ewotICAgICAgICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbl8uQWRkRW50cmllc0Zyb20oaW5wdXQs
IF9yZXBlYXRlZF91bmludGVycHJldGVkT3B0aW9uX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgW2ds
b2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0K
LSAgaW50ZXJuYWwgc2VhbGVkIHBhcnRpYWwgY2xhc3MgU2VydmljZU9wdGlvbnMgOiBwYjo6SU1l
c3NhZ2U8U2VydmljZU9wdGlvbnM+IHsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6
TWVzc2FnZVBhcnNlcjxTZXJ2aWNlT3B0aW9ucz4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBh
cnNlcjxTZXJ2aWNlT3B0aW9ucz4oKCkgPT4gbmV3IFNlcnZpY2VPcHRpb25zKCkpOwotICAgIHB1
YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8U2VydmljZU9wdGlvbnM+IFBhcnNlciB7IGdl
dCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdl
RGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkRlc2NyaXB0b3JSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVz
c2FnZVR5cGVzWzE0XTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6
OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0K
LSAgICB9Ci0KLSAgICBwdWJsaWMgU2VydmljZU9wdGlvbnMoKSB7Ci0gICAgICBPbkNvbnN0cnVj
dGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0g
ICAgcHVibGljIFNlcnZpY2VPcHRpb25zKFNlcnZpY2VPcHRpb25zIG90aGVyKSA6IHRoaXMoKSB7
Ci0gICAgICBkZXByZWNhdGVkXyA9IG90aGVyLmRlcHJlY2F0ZWRfOwotICAgICAgdW5pbnRlcnBy
ZXRlZE9wdGlvbl8gPSBvdGhlci51bmludGVycHJldGVkT3B0aW9uXy5DbG9uZSgpOwotICAgIH0K
LQotICAgIHB1YmxpYyBTZXJ2aWNlT3B0aW9ucyBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcg
U2VydmljZU9wdGlvbnModGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJkZXByZWNhdGVkIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBEZXByZWNhdGVkRmllbGROdW1iZXIgPSAzMzsKLSAgICBwcml2YXRlIGJvb2wgZGVw
cmVjYXRlZF87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSXMgdGhpcyBzZXJ2aWNlIGRl
cHJlY2F0ZWQ/Ci0gICAgLy8vICBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhp
cyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCi0gICAgLy8vICBmb3IgdGhlIHNlcnZp
Y2UsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwK
LSAgICAvLy8gIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBzZXJ2aWNl
cy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBib29sIERlcHJlY2F0ZWQgewotICAg
ICAgZ2V0IHsgcmV0dXJuIGRlcHJlY2F0ZWRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBkZXBy
ZWNhdGVkXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAidW5pbnRlcnByZXRlZF9vcHRpb24iIGZpZWxkLjwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgY29uc3QgaW50IFVuaW50ZXJwcmV0ZWRPcHRpb25GaWVsZE51bWJlciA9IDk5
OTsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24+IF9yZXBlYXRlZF91
bmludGVycHJldGVkT3B0aW9uX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVz
c2FnZSg3OTk0LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0
ZWRPcHRpb24uUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVs
ZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24+
IHVuaW50ZXJwcmV0ZWRPcHRpb25fID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24+KCk7Ci0gICAgLy8v
IDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0
IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24u
VW5pbnRlcnByZXRlZE9wdGlvbj4gVW5pbnRlcnByZXRlZE9wdGlvbiB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gdW5pbnRlcnByZXRlZE9wdGlvbl87IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJp
ZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVy
IGFzIFNlcnZpY2VPcHRpb25zKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoU2Vy
dmljZU9wdGlvbnMgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51
bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVu
Y2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQot
ICAgICAgaWYgKERlcHJlY2F0ZWQgIT0gb3RoZXIuRGVwcmVjYXRlZCkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYoIXVuaW50ZXJwcmV0ZWRPcHRpb25fLkVxdWFscyhvdGhlci51bmludGVycHJldGVk
T3B0aW9uXykpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7
Ci0gICAgICBpZiAoRGVwcmVjYXRlZCAhPSBmYWxzZSkgaGFzaCBePSBEZXByZWNhdGVkLkdldEhh
c2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IHVuaW50ZXJwcmV0ZWRPcHRpb25fLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3Ry
aW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25v
c3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpD
b2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChEZXByZWNhdGVkICE9IGZhbHNl
KSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMzYsIDIpOwotICAgICAgICBvdXRwdXQu
V3JpdGVCb29sKERlcHJlY2F0ZWQpOwotICAgICAgfQotICAgICAgdW5pbnRlcnByZXRlZE9wdGlv
bl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF91bmludGVycHJldGVkT3B0aW9uX2NvZGVjKTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6
ZSA9IDA7Ci0gICAgICBpZiAoRGVwcmVjYXRlZCAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9
IDIgKyAxOwotICAgICAgfQotICAgICAgc2l6ZSArPSB1bmludGVycHJldGVkT3B0aW9uXy5DYWxj
dWxhdGVTaXplKF9yZXBlYXRlZF91bmludGVycHJldGVkT3B0aW9uX2NvZGVjKTsKLSAgICAgIHJl
dHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShTZXJ2aWNlT3B0
aW9ucyBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkRlcHJlY2F0ZWQgIT0gZmFsc2UpIHsKLSAgICAg
ICAgRGVwcmVjYXRlZCA9IG90aGVyLkRlcHJlY2F0ZWQ7Ci0gICAgICB9Ci0gICAgICB1bmludGVy
cHJldGVkT3B0aW9uXy5BZGQob3RoZXIudW5pbnRlcnByZXRlZE9wdGlvbl8pOwotICAgIH0KLQot
ICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewot
ICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0g
MCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgMjY0OiB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkID0gaW5wdXQuUmVhZEJvb2woKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDc5OTQ6IHsK
LSAgICAgICAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25fLkFkZEVudHJpZXNGcm9tKGlucHV0LCBf
cmVwZWF0ZWRfdW5pbnRlcnByZXRlZE9wdGlvbl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIFtnbG9i
YWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0g
IGludGVybmFsIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIE1ldGhvZE9wdGlvbnMgOiBwYjo6SU1lc3Nh
Z2U8TWV0aG9kT3B0aW9ucz4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNz
YWdlUGFyc2VyPE1ldGhvZE9wdGlvbnM+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8
TWV0aG9kT3B0aW9ucz4oKCkgPT4gbmV3IE1ldGhvZE9wdGlvbnMoKSk7Ci0gICAgcHVibGljIHN0
YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxNZXRob2RPcHRpb25zPiBQYXJzZXIgeyBnZXQgeyByZXR1
cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0
b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBl
c1sxNV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2Fn
ZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQot
Ci0gICAgcHVibGljIE1ldGhvZE9wdGlvbnMoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwot
ICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGlj
IE1ldGhvZE9wdGlvbnMoTWV0aG9kT3B0aW9ucyBvdGhlcikgOiB0aGlzKCkgewotICAgICAgZGVw
cmVjYXRlZF8gPSBvdGhlci5kZXByZWNhdGVkXzsKLSAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25f
ID0gb3RoZXIudW5pbnRlcnByZXRlZE9wdGlvbl8uQ2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgTWV0aG9kT3B0aW9ucyBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgTWV0aG9kT3B0aW9u
cyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUg
ImRlcHJlY2F0ZWQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IERlcHJl
Y2F0ZWRGaWVsZE51bWJlciA9IDMzOwotICAgIHByaXZhdGUgYm9vbCBkZXByZWNhdGVkXzsKLSAg
ICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBJcyB0aGlzIG1ldGhvZCBkZXByZWNhdGVkPwotICAg
IC8vLyAgRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVw
cmVjYXRlZCBhbm5vdGF0aW9ucwotICAgIC8vLyAgZm9yIHRoZSBtZXRob2QsIG9yIGl0IHdpbGwg
YmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwKLSAgICAvLy8gIHRoaXMg
aXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBtZXRob2RzLgotICAgIC8vLyA8L3N1
bW1hcnk+Ci0gICAgcHVibGljIGJvb2wgRGVwcmVjYXRlZCB7Ci0gICAgICBnZXQgeyByZXR1cm4g
ZGVwcmVjYXRlZF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGRlcHJlY2F0ZWRfID0gdmFsdWU7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJ1bmludGVycHJldGVkX29wdGlvbiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgVW5pbnRlcnByZXRlZE9wdGlvbkZpZWxkTnVtYmVyID0gOTk5OwotICAgIHByaXZhdGUg
c3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbj4gX3JlcGVhdGVkX3VuaW50ZXJwcmV0ZWRPcHRp
b25fY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDc5OTQsIGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbi5QYXJzZXIp
OwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlJlZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbj4gdW5pbnRlcnByZXRlZE9w
dGlvbl8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbj4oKTsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
Ly8vICBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUu
IFNlZSBhYm92ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVk
RmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5VbmludGVycHJldGVkT3B0
aW9uPiBVbmludGVycHJldGVkT3B0aW9uIHsKLSAgICAgIGdldCB7IHJldHVybiB1bmludGVycHJl
dGVkT3B0aW9uXzsgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhv
YmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgTWV0aG9kT3B0aW9u
cyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKE1ldGhvZE9wdGlvbnMgb3RoZXIp
IHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRo
aXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKERlcHJlY2F0
ZWQgIT0gb3RoZXIuRGVwcmVjYXRlZCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIXVuaW50ZXJw
cmV0ZWRPcHRpb25fLkVxdWFscyhvdGhlci51bmludGVycHJldGVkT3B0aW9uXykpIHJldHVybiBm
YWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBp
bnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoRGVwcmVj
YXRlZCAhPSBmYWxzZSkgaGFzaCBePSBEZXByZWNhdGVkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBo
YXNoIF49IHVuaW50ZXJwcmV0ZWRPcHRpb25fLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4g
aGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewot
ICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBv
dXRwdXQpIHsKLSAgICAgIGlmIChEZXByZWNhdGVkICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZVJhd1RhZygxMzYsIDIpOwotICAgICAgICBvdXRwdXQuV3JpdGVCb29sKERlcHJlY2F0
ZWQpOwotICAgICAgfQotICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbl8uV3JpdGVUbyhvdXRwdXQs
IF9yZXBlYXRlZF91bmludGVycHJldGVkT3B0aW9uX2NvZGVjKTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAo
RGVwcmVjYXRlZCAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9IDIgKyAxOwotICAgICAgfQot
ICAgICAgc2l6ZSArPSB1bmludGVycHJldGVkT3B0aW9uXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRl
ZF91bmludGVycHJldGVkT3B0aW9uX2NvZGVjKTsKLSAgICAgIHJldHVybiBzaXplOwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShNZXRob2RPcHRpb25zIG90aGVyKSB7Ci0gICAg
ICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBp
ZiAob3RoZXIuRGVwcmVjYXRlZCAhPSBmYWxzZSkgewotICAgICAgICBEZXByZWNhdGVkID0gb3Ro
ZXIuRGVwcmVjYXRlZDsKLSAgICAgIH0KLSAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb25fLkFkZChv
dGhlci51bmludGVycHJldGVkT3B0aW9uXyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVy
Z2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAg
ICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRj
aCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RG
aWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAyNjQ6IHsKLSAgICAg
ICAgICAgIERlcHJlY2F0ZWQgPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNzk5NDogewotICAgICAgICAgICAgdW5pbnRl
cnByZXRlZE9wdGlvbl8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF91bmludGVycHJl
dGVkT3B0aW9uX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIEEg
bWVzc2FnZSByZXByZXNlbnRpbmcgYSBvcHRpb24gdGhlIHBhcnNlciBkb2VzIG5vdCByZWNvZ25p
emUuIFRoaXMgb25seQotICAvLy8gIGFwcGVhcnMgaW4gb3B0aW9ucyBwcm90b3MgY3JlYXRlZCBi
eSB0aGUgY29tcGlsZXI6OlBhcnNlciBjbGFzcy4KLSAgLy8vICBEZXNjcmlwdG9yUG9vbCByZXNv
bHZlcyB0aGVzZSB3aGVuIGJ1aWxkaW5nIERlc2NyaXB0b3Igb2JqZWN0cy4gVGhlcmVmb3JlLAot
ICAvLy8gIG9wdGlvbnMgcHJvdG9zIGluIGRlc2NyaXB0b3Igb2JqZWN0cyAoZS5nLiByZXR1cm5l
ZCBieSBEZXNjcmlwdG9yOjpvcHRpb25zKCksCi0gIC8vLyAgb3IgcHJvZHVjZWQgYnkgRGVzY3Jp
cHRvcjo6Q29weVRvKCkpIHdpbGwgbmV2ZXIgaGF2ZSBVbmludGVycHJldGVkT3B0aW9ucwotICAv
Ly8gIGluIHRoZW0uCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9z
dGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIGludGVybmFsIHNlYWxlZCBw
YXJ0aWFsIGNsYXNzIFVuaW50ZXJwcmV0ZWRPcHRpb24gOiBwYjo6SU1lc3NhZ2U8VW5pbnRlcnBy
ZXRlZE9wdGlvbj4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFy
c2VyPFVuaW50ZXJwcmV0ZWRPcHRpb24+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8
VW5pbnRlcnByZXRlZE9wdGlvbj4oKCkgPT4gbmV3IFVuaW50ZXJwcmV0ZWRPcHRpb24oKSk7Ci0g
ICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxVbmludGVycHJldGVkT3B0aW9uPiBQ
YXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBi
cjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUmVmbGVjdGlvbi5EZXNj
cmlwdG9yLk1lc3NhZ2VUeXBlc1sxNl07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNj
cmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNj
cmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFVuaW50ZXJwcmV0ZWRPcHRpb24oKSB7Ci0g
ICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0
cnVjdGlvbigpOwotCi0gICAgcHVibGljIFVuaW50ZXJwcmV0ZWRPcHRpb24oVW5pbnRlcnByZXRl
ZE9wdGlvbiBvdGhlcikgOiB0aGlzKCkgewotICAgICAgbmFtZV8gPSBvdGhlci5uYW1lXy5DbG9u
ZSgpOwotICAgICAgaWRlbnRpZmllclZhbHVlXyA9IG90aGVyLmlkZW50aWZpZXJWYWx1ZV87Ci0g
ICAgICBwb3NpdGl2ZUludFZhbHVlXyA9IG90aGVyLnBvc2l0aXZlSW50VmFsdWVfOwotICAgICAg
bmVnYXRpdmVJbnRWYWx1ZV8gPSBvdGhlci5uZWdhdGl2ZUludFZhbHVlXzsKLSAgICAgIGRvdWJs
ZVZhbHVlXyA9IG90aGVyLmRvdWJsZVZhbHVlXzsKLSAgICAgIHN0cmluZ1ZhbHVlXyA9IG90aGVy
LnN0cmluZ1ZhbHVlXzsKLSAgICAgIGFnZ3JlZ2F0ZVZhbHVlXyA9IG90aGVyLmFnZ3JlZ2F0ZVZh
bHVlXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVW5pbnRlcnByZXRlZE9wdGlvbiBDbG9uZSgpIHsK
LSAgICAgIHJldHVybiBuZXcgVW5pbnRlcnByZXRlZE9wdGlvbih0aGlzKTsKLSAgICB9Ci0KLSAg
ICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm5hbWUiIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE5hbWVGaWVsZE51bWJlciA9IDI7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
UmVmbGVjdGlvbi5VbmludGVycHJldGVkT3B0aW9uLlR5cGVzLk5hbWVQYXJ0PiBfcmVwZWF0ZWRf
bmFtZV9jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMTgsIGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbi5UeXBlcy5O
YW1lUGFydC5QYXJzZXIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxk
PGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbi5U
eXBlcy5OYW1lUGFydD4gbmFtZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbi5UeXBlcy5OYW1lUGFy
dD4oKTsKLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlJlZmxlY3Rpb24uVW5pbnRlcnByZXRlZE9wdGlvbi5UeXBlcy5OYW1lUGFydD4gTmFtZSB7
Ci0gICAgICBnZXQgeyByZXR1cm4gbmFtZV87IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+
RmllbGQgbnVtYmVyIGZvciB0aGUgImlkZW50aWZpZXJfdmFsdWUiIGZpZWxkLjwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgY29uc3QgaW50IElkZW50aWZpZXJWYWx1ZUZpZWxkTnVtYmVyID0gMzsKLSAg
ICBwcml2YXRlIHN0cmluZyBpZGVudGlmaWVyVmFsdWVfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5
PgotICAgIC8vLyAgVGhlIHZhbHVlIG9mIHRoZSB1bmludGVycHJldGVkIG9wdGlvbiwgaW4gd2hh
dGV2ZXIgdHlwZSB0aGUgdG9rZW5pemVyCi0gICAgLy8vICBpZGVudGlmaWVkIGl0IGFzIGR1cmlu
ZyBwYXJzaW5nLiBFeGFjdGx5IG9uZSBvZiB0aGVzZSBzaG91bGQgYmUgc2V0LgotICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0cmluZyBJZGVudGlmaWVyVmFsdWUgewotICAgICAgZ2V0
IHsgcmV0dXJuIGlkZW50aWZpZXJWYWx1ZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGlkZW50
aWZpZXJWYWx1ZV8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwg
InZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJwb3NpdGl2ZV9pbnRfdmFsdWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IFBvc2l0aXZlSW50VmFsdWVGaWVsZE51bWJlciA9IDQ7Ci0gICAgcHJpdmF0
ZSB1bG9uZyBwb3NpdGl2ZUludFZhbHVlXzsKLSAgICBwdWJsaWMgdWxvbmcgUG9zaXRpdmVJbnRW
YWx1ZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gcG9zaXRpdmVJbnRWYWx1ZV87IH0KLSAgICAgIHNl
dCB7Ci0gICAgICAgIHBvc2l0aXZlSW50VmFsdWVfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJuZWdhdGl2ZV9pbnRfdmFs
dWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE5lZ2F0aXZlSW50VmFs
dWVGaWVsZE51bWJlciA9IDU7Ci0gICAgcHJpdmF0ZSBsb25nIG5lZ2F0aXZlSW50VmFsdWVfOwot
ICAgIHB1YmxpYyBsb25nIE5lZ2F0aXZlSW50VmFsdWUgewotICAgICAgZ2V0IHsgcmV0dXJuIG5l
Z2F0aXZlSW50VmFsdWVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBuZWdhdGl2ZUludFZhbHVl
XyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAiZG91YmxlX3ZhbHVlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBEb3VibGVWYWx1ZUZpZWxkTnVtYmVyID0gNjsKLSAgICBwcml2YXRlIGRvdWJsZSBk
b3VibGVWYWx1ZV87Ci0gICAgcHVibGljIGRvdWJsZSBEb3VibGVWYWx1ZSB7Ci0gICAgICBnZXQg
eyByZXR1cm4gZG91YmxlVmFsdWVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBkb3VibGVWYWx1
ZV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgInN0cmluZ192YWx1ZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgU3RyaW5nVmFsdWVGaWVsZE51bWJlciA9IDc7Ci0gICAgcHJpdmF0ZSBwYjo6Qnl0
ZVN0cmluZyBzdHJpbmdWYWx1ZV8gPSBwYjo6Qnl0ZVN0cmluZy5FbXB0eTsKLSAgICBwdWJsaWMg
cGI6OkJ5dGVTdHJpbmcgU3RyaW5nVmFsdWUgewotICAgICAgZ2V0IHsgcmV0dXJuIHN0cmluZ1Zh
bHVlXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgc3RyaW5nVmFsdWVfID0gcGI6OlByb3RvUHJl
Y29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0K
LQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiYWdncmVnYXRlX3ZhbHVl
IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBBZ2dyZWdhdGVWYWx1ZUZp
ZWxkTnVtYmVyID0gODsKLSAgICBwcml2YXRlIHN0cmluZyBhZ2dyZWdhdGVWYWx1ZV8gPSAiIjsK
LSAgICBwdWJsaWMgc3RyaW5nIEFnZ3JlZ2F0ZVZhbHVlIHsKLSAgICAgIGdldCB7IHJldHVybiBh
Z2dyZWdhdGVWYWx1ZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGFnZ3JlZ2F0ZVZhbHVlXyA9
IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90
aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIFVuaW50ZXJwcmV0ZWRPcHRpb24p
OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhVbmludGVycHJldGVkT3B0aW9uIG90
aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVy
LCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmKCFuYW1l
Xy5FcXVhbHMob3RoZXIubmFtZV8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoSWRlbnRpZmll
clZhbHVlICE9IG90aGVyLklkZW50aWZpZXJWYWx1ZSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KFBvc2l0aXZlSW50VmFsdWUgIT0gb3RoZXIuUG9zaXRpdmVJbnRWYWx1ZSkgcmV0dXJuIGZhbHNl
OwotICAgICAgaWYgKE5lZ2F0aXZlSW50VmFsdWUgIT0gb3RoZXIuTmVnYXRpdmVJbnRWYWx1ZSkg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKERvdWJsZVZhbHVlICE9IG90aGVyLkRvdWJsZVZhbHVl
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoU3RyaW5nVmFsdWUgIT0gb3RoZXIuU3RyaW5nVmFs
dWUpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChBZ2dyZWdhdGVWYWx1ZSAhPSBvdGhlci5BZ2dy
ZWdhdGVWYWx1ZSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0g
MTsKLSAgICAgIGhhc2ggXj0gbmFtZV8uR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChJZGVudGlm
aWVyVmFsdWUuTGVuZ3RoICE9IDApIGhhc2ggXj0gSWRlbnRpZmllclZhbHVlLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICBpZiAoUG9zaXRpdmVJbnRWYWx1ZSAhPSAwVUwpIGhhc2ggXj0gUG9zaXRpdmVJ
bnRWYWx1ZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKE5lZ2F0aXZlSW50VmFsdWUgIT0gMEwp
IGhhc2ggXj0gTmVnYXRpdmVJbnRWYWx1ZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKERvdWJs
ZVZhbHVlICE9IDBEKSBoYXNoIF49IERvdWJsZVZhbHVlLkdldEhhc2hDb2RlKCk7Ci0gICAgICBp
ZiAoU3RyaW5nVmFsdWUuTGVuZ3RoICE9IDApIGhhc2ggXj0gU3RyaW5nVmFsdWUuR2V0SGFzaENv
ZGUoKTsKLSAgICAgIGlmIChBZ2dyZWdhdGVWYWx1ZS5MZW5ndGggIT0gMCkgaGFzaCBePSBBZ2dy
ZWdhdGVWYWx1ZS5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0g
ICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6
SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVi
bGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBu
YW1lXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX25hbWVfY29kZWMpOwotICAgICAgaWYgKElk
ZW50aWZpZXJWYWx1ZS5MZW5ndGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWco
MjYpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoSWRlbnRpZmllclZhbHVlKTsKLSAgICAg
IH0KLSAgICAgIGlmIChQb3NpdGl2ZUludFZhbHVlICE9IDBVTCkgewotICAgICAgICBvdXRwdXQu
V3JpdGVSYXdUYWcoMzIpOwotICAgICAgICBvdXRwdXQuV3JpdGVVSW50NjQoUG9zaXRpdmVJbnRW
YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoTmVnYXRpdmVJbnRWYWx1ZSAhPSAwTCkgewotICAg
ICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNDApOwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQ2NChO
ZWdhdGl2ZUludFZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGlmIChEb3VibGVWYWx1ZSAhPSAwRCkg
ewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNDkpOwotICAgICAgICBvdXRwdXQuV3JpdGVE
b3VibGUoRG91YmxlVmFsdWUpOwotICAgICAgfQotICAgICAgaWYgKFN0cmluZ1ZhbHVlLkxlbmd0
aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg1OCk7Ci0gICAgICAgIG91dHB1
dC5Xcml0ZUJ5dGVzKFN0cmluZ1ZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGlmIChBZ2dyZWdhdGVW
YWx1ZS5MZW5ndGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNjYpOwotICAg
ICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoQWdncmVnYXRlVmFsdWUpOwotICAgICAgfQotICAgIH0K
LQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsK
LSAgICAgIHNpemUgKz0gbmFtZV8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfbmFtZV9jb2RlYyk7
Ci0gICAgICBpZiAoSWRlbnRpZmllclZhbHVlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUg
Kz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShJZGVudGlmaWVy
VmFsdWUpOwotICAgICAgfQotICAgICAgaWYgKFBvc2l0aXZlSW50VmFsdWUgIT0gMFVMKSB7Ci0g
ICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlVUludDY0U2l6
ZShQb3NpdGl2ZUludFZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGlmIChOZWdhdGl2ZUludFZhbHVl
ICE9IDBMKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21w
dXRlSW50NjRTaXplKE5lZ2F0aXZlSW50VmFsdWUpOwotICAgICAgfQotICAgICAgaWYgKERvdWJs
ZVZhbHVlICE9IDBEKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDg7Ci0gICAgICB9Ci0gICAgICBp
ZiAoU3RyaW5nVmFsdWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNv
ZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVCeXRlc1NpemUoU3RyaW5nVmFsdWUpOwotICAgICAgfQot
ICAgICAgaWYgKEFnZ3JlZ2F0ZVZhbHVlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0g
MSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShBZ2dyZWdhdGVWYWx1
ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBNZXJnZUZyb20oVW5pbnRlcnByZXRlZE9wdGlvbiBvdGhlcikgewotICAgICAgaWYgKG90aGVy
ID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgbmFtZV8uQWRkKG90
aGVyLm5hbWVfKTsKLSAgICAgIGlmIChvdGhlci5JZGVudGlmaWVyVmFsdWUuTGVuZ3RoICE9IDAp
IHsKLSAgICAgICAgSWRlbnRpZmllclZhbHVlID0gb3RoZXIuSWRlbnRpZmllclZhbHVlOwotICAg
ICAgfQotICAgICAgaWYgKG90aGVyLlBvc2l0aXZlSW50VmFsdWUgIT0gMFVMKSB7Ci0gICAgICAg
IFBvc2l0aXZlSW50VmFsdWUgPSBvdGhlci5Qb3NpdGl2ZUludFZhbHVlOwotICAgICAgfQotICAg
ICAgaWYgKG90aGVyLk5lZ2F0aXZlSW50VmFsdWUgIT0gMEwpIHsKLSAgICAgICAgTmVnYXRpdmVJ
bnRWYWx1ZSA9IG90aGVyLk5lZ2F0aXZlSW50VmFsdWU7Ci0gICAgICB9Ci0gICAgICBpZiAob3Ro
ZXIuRG91YmxlVmFsdWUgIT0gMEQpIHsKLSAgICAgICAgRG91YmxlVmFsdWUgPSBvdGhlci5Eb3Vi
bGVWYWx1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5TdHJpbmdWYWx1ZS5MZW5ndGggIT0g
MCkgewotICAgICAgICBTdHJpbmdWYWx1ZSA9IG90aGVyLlN0cmluZ1ZhbHVlOwotICAgICAgfQot
ICAgICAgaWYgKG90aGVyLkFnZ3JlZ2F0ZVZhbHVlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIEFn
Z3JlZ2F0ZVZhbHVlID0gb3RoZXIuQWdncmVnYXRlVmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0g
ICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAw
KSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSAxODogewotICAgICAgICAgICAgbmFtZV8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBl
YXRlZF9uYW1lX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBjYXNlIDI2OiB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyVmFsdWUgPSBpbnB1dC5SZWFk
U3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSAzMjogewotICAgICAgICAgICAgUG9zaXRpdmVJbnRWYWx1ZSA9IGlucHV0LlJlYWRVSW50NjQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDQwOiB7
Ci0gICAgICAgICAgICBOZWdhdGl2ZUludFZhbHVlID0gaW5wdXQuUmVhZEludDY0KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA0OTogewotICAgICAg
ICAgICAgRG91YmxlVmFsdWUgPSBpbnB1dC5SZWFkRG91YmxlKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA1ODogewotICAgICAgICAgICAgU3RyaW5n
VmFsdWUgPSBpbnB1dC5SZWFkQnl0ZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgICBjYXNlIDY2OiB7Ci0gICAgICAgICAgICBBZ2dyZWdhdGVWYWx1ZSA9IGlu
cHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLQotICAgICNyZWdpb24gTmVzdGVkIHR5cGVzCi0gICAgLy8v
IDxzdW1tYXJ5PkNvbnRhaW5lciBmb3IgbmVzdGVkIHR5cGVzIGRlY2xhcmVkIGluIHRoZSBVbmlu
dGVycHJldGVkT3B0aW9uIG1lc3NhZ2UgdHlwZS48L3N1bW1hcnk+Ci0gICAgW2dsb2JhbDo6U3lz
dGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgICBwdWJs
aWMgc3RhdGljIHBhcnRpYWwgY2xhc3MgVHlwZXMgewotICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgLy8vICBUaGUgbmFtZSBvZiB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24uICBFYWNoIHN0cmlu
ZyByZXByZXNlbnRzIGEgc2VnbWVudCBpbgotICAgICAgLy8vICBhIGRvdC1zZXBhcmF0ZWQgbmFt
ZS4gIGlzX2V4dGVuc2lvbiBpcyB0cnVlIGlmZiBhIHNlZ21lbnQgcmVwcmVzZW50cyBhbgotICAg
ICAgLy8vICBleHRlbnNpb24gKGRlbm90ZWQgd2l0aCBwYXJlbnRoZXNlcyBpbiBvcHRpb25zIHNw
ZWNzIGluIC5wcm90byBmaWxlcykuCi0gICAgICAvLy8gIEUuZy4seyBbImZvbyIsIGZhbHNlXSwg
WyJiYXIuYmF6IiwgdHJ1ZV0sIFsicXV4IiwgZmFsc2VdIH0gcmVwcmVzZW50cwotICAgICAgLy8v
ICAiZm9vLihiYXIuYmF6KS5xdXgiLgotICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgIFtnbG9i
YWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0g
ICAgICBpbnRlcm5hbCBzZWFsZWQgcGFydGlhbCBjbGFzcyBOYW1lUGFydCA6IHBiOjpJTWVzc2Fn
ZTxOYW1lUGFydD4gewotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2Fn
ZVBhcnNlcjxOYW1lUGFydD4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxOYW1lUGFy
dD4oKCkgPT4gbmV3IE5hbWVQYXJ0KCkpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNz
YWdlUGFyc2VyPE5hbWVQYXJ0PiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0K
LSAgICAgICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3Ig
ewotICAgICAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0
aW9uLlVuaW50ZXJwcmV0ZWRPcHRpb24uRGVzY3JpcHRvci5OZXN0ZWRUeXBlc1swXTsgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVz
Y3JpcHRvciB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICAgICAg
fQotCi0gICAgICAgIHB1YmxpYyBOYW1lUGFydCgpIHsKLSAgICAgICAgICBPbkNvbnN0cnVjdGlv
bigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7
Ci0KLSAgICAgICAgcHVibGljIE5hbWVQYXJ0KE5hbWVQYXJ0IG90aGVyKSA6IHRoaXMoKSB7Ci0g
ICAgICAgICAgbmFtZVBhcnRfID0gb3RoZXIubmFtZVBhcnRfOwotICAgICAgICAgIGlzRXh0ZW5z
aW9uXyA9IG90aGVyLmlzRXh0ZW5zaW9uXzsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBO
YW1lUGFydCBDbG9uZSgpIHsKLSAgICAgICAgICByZXR1cm4gbmV3IE5hbWVQYXJ0KHRoaXMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJu
YW1lX3BhcnQiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBOYW1l
UGFydF9GaWVsZE51bWJlciA9IDE7Ci0gICAgICAgIHByaXZhdGUgc3RyaW5nIG5hbWVQYXJ0XyA9
ICIiOwotICAgICAgICBwdWJsaWMgc3RyaW5nIE5hbWVQYXJ0XyB7Ci0gICAgICAgICAgZ2V0IHsg
cmV0dXJuIG5hbWVQYXJ0XzsgfQotICAgICAgICAgIHNldCB7Ci0gICAgICAgICAgICBuYW1lUGFy
dF8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJpc19leHRlbnNpb24iIGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVi
bGljIGNvbnN0IGludCBJc0V4dGVuc2lvbkZpZWxkTnVtYmVyID0gMjsKLSAgICAgICAgcHJpdmF0
ZSBib29sIGlzRXh0ZW5zaW9uXzsKLSAgICAgICAgcHVibGljIGJvb2wgSXNFeHRlbnNpb24gewot
ICAgICAgICAgIGdldCB7IHJldHVybiBpc0V4dGVuc2lvbl87IH0KLSAgICAgICAgICBzZXQgewot
ICAgICAgICAgICAgaXNFeHRlbnNpb25fID0gdmFsdWU7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewot
ICAgICAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgTmFtZVBhcnQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcHVibGljIGJvb2wgRXF1YWxzKE5hbWVQYXJ0IG90aGVyKSB7Ci0gICAgICAgICAg
aWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwg
dGhpcykpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBpZiAoTmFtZVBhcnRfICE9IG90aGVyLk5hbWVQYXJ0XykgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgIGlmIChJc0V4dGVuc2lvbiAhPSBvdGhlci5Jc0V4dGVuc2lvbikgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIG92ZXJy
aWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICAg
ICAgaWYgKE5hbWVQYXJ0Xy5MZW5ndGggIT0gMCkgaGFzaCBePSBOYW1lUGFydF8uR2V0SGFzaENv
ZGUoKTsKLSAgICAgICAgICBpZiAoSXNFeHRlbnNpb24gIT0gZmFsc2UpIGhhc2ggXj0gSXNFeHRl
bnNpb24uR2V0SGFzaENvZGUoKTsKLSAgICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICAgICAg
cmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFt
IG91dHB1dCkgewotICAgICAgICAgIGlmIChOYW1lUGFydF8uTGVuZ3RoICE9IDApIHsKLSAgICAg
ICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVT
dHJpbmcoTmFtZVBhcnRfKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKElzRXh0ZW5zaW9u
ICE9IGZhbHNlKSB7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTYpOwotICAgICAg
ICAgICAgb3V0cHV0LldyaXRlQm9vbChJc0V4dGVuc2lvbik7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgICAgIGlu
dCBzaXplID0gMDsKLSAgICAgICAgICBpZiAoTmFtZVBhcnRfLkxlbmd0aCAhPSAwKSB7Ci0gICAg
ICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1Np
emUoTmFtZVBhcnRfKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKElzRXh0ZW5zaW9uICE9
IGZhbHNlKSB7Ci0gICAgICAgICAgICBzaXplICs9IDEgKyAxOwotICAgICAgICAgIH0KLSAgICAg
ICAgICByZXR1cm4gc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIE1lcmdl
RnJvbShOYW1lUGFydCBvdGhlcikgewotICAgICAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChvdGhlci5OYW1l
UGFydF8uTGVuZ3RoICE9IDApIHsKLSAgICAgICAgICAgIE5hbWVQYXJ0XyA9IG90aGVyLk5hbWVQ
YXJ0XzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKG90aGVyLklzRXh0ZW5zaW9uICE9IGZh
bHNlKSB7Ci0gICAgICAgICAgICBJc0V4dGVuc2lvbiA9IG90aGVyLklzRXh0ZW5zaW9uOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6
Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgICAgIHVpbnQgdGFnOwotICAgICAgICAg
IHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgICAgICBzd2l0
Y2godGFnKSB7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaW5wdXQu
U2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIDEwOiB7Ci0gICAgICAgICAgICAgICAgTmFtZVBhcnRfID0gaW5wdXQuUmVhZFN0cmluZygp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
IGNhc2UgMTY6IHsKLSAgICAgICAgICAgICAgICBJc0V4dGVuc2lvbiA9IGlucHV0LlJlYWRCb29s
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgfQotCi0gICAgfQotICAgICNlbmRy
ZWdpb24KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIEVuY2Fwc3VsYXRlcyBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgZnJvbSB3aGljaCBhCi0gIC8v
LyAgRmlsZURlc2NyaXB0b3JQcm90byB3YXMgZ2VuZXJhdGVkLgotICAvLy8gPC9zdW1tYXJ5Pgot
ICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0
ZSgpXQotICBpbnRlcm5hbCBzZWFsZWQgcGFydGlhbCBjbGFzcyBTb3VyY2VDb2RlSW5mbyA6IHBi
OjpJTWVzc2FnZTxTb3VyY2VDb2RlSW5mbz4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5
IHBiOjpNZXNzYWdlUGFyc2VyPFNvdXJjZUNvZGVJbmZvPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNz
YWdlUGFyc2VyPFNvdXJjZUNvZGVJbmZvPigoKSA9PiBuZXcgU291cmNlQ29kZUluZm8oKSk7Ci0g
ICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxTb3VyY2VDb2RlSW5mbz4gUGFyc2Vy
IHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1l
c3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24uRGVzY3JpcHRvclJlZmxlY3Rpb24uRGVzY3JpcHRv
ci5NZXNzYWdlVHlwZXNbMTddOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRv
ciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRv
cjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBTb3VyY2VDb2RlSW5mbygpIHsKLSAgICAgIE9uQ29u
c3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7
Ci0KLSAgICBwdWJsaWMgU291cmNlQ29kZUluZm8oU291cmNlQ29kZUluZm8gb3RoZXIpIDogdGhp
cygpIHsKLSAgICAgIGxvY2F0aW9uXyA9IG90aGVyLmxvY2F0aW9uXy5DbG9uZSgpOwotICAgIH0K
LQotICAgIHB1YmxpYyBTb3VyY2VDb2RlSW5mbyBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcg
U291cmNlQ29kZUluZm8odGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51
bWJlciBmb3IgdGhlICJsb2NhdGlvbiIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgTG9jYXRpb25GaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9u
bHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbi5Tb3Vy
Y2VDb2RlSW5mby5UeXBlcy5Mb2NhdGlvbj4gX3JlcGVhdGVkX2xvY2F0aW9uX2NvZGVjCi0gICAg
ICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgxMCwgZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuUmVmbGVjdGlvbi5Tb3VyY2VDb2RlSW5mby5UeXBlcy5Mb2NhdGlvbi5QYXJzZXIpOwotICAg
IHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLlJlZmxlY3Rpb24uU291cmNlQ29kZUluZm8uVHlwZXMuTG9jYXRpb24+IGxvY2F0aW9uXyA9
IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlv
bi5Tb3VyY2VDb2RlSW5mby5UeXBlcy5Mb2NhdGlvbj4oKTsKLSAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgLy8vICBBIExvY2F0aW9uIGlkZW50aWZpZXMgYSBwaWVjZSBvZiBzb3VyY2UgY29kZSBpbiBh
IC5wcm90byBmaWxlIHdoaWNoCi0gICAgLy8vICBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIg
ZGVmaW5pdGlvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQKLSAgICAvLy8gIHRvIGJl
IHVzZWZ1bCB0byBJREVzLCBjb2RlIGluZGV4ZXJzLCBkb2N1bWVudGF0aW9uIGdlbmVyYXRvcnMs
IGFuZCBzaW1pbGFyCi0gICAgLy8vICB0b29scy4KLSAgICAvLy8KLSAgICAvLy8gIEZvciBleGFt
cGxlLCBzYXkgd2UgaGF2ZSBhIGZpbGUgbGlrZToKLSAgICAvLy8gICAgbWVzc2FnZSBGb28gewot
ICAgIC8vLyAgICAgIG9wdGlvbmFsIHN0cmluZyBmb28gPSAxOwotICAgIC8vLyAgICB9Ci0gICAg
Ly8vICBMZXQncyBsb29rIGF0IGp1c3QgdGhlIGZpZWxkIGRlZmluaXRpb246Ci0gICAgLy8vICAg
IG9wdGlvbmFsIHN0cmluZyBmb28gPSAxOwotICAgIC8vLyAgICBeICAgICAgIF5eICAgICBeXiAg
XiAgXl5eCi0gICAgLy8vICAgIGEgICAgICAgYmMgICAgIGRlICBmICBnaGkKLSAgICAvLy8gIFdl
IGhhdmUgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6Ci0gICAgLy8vICAgIHNwYW4gICBwYXRoICAg
ICAgICAgICAgICAgcmVwcmVzZW50cwotICAgIC8vLyAgICBbYSxpKSAgWyA0LCAwLCAyLCAwIF0g
ICAgIFRoZSB3aG9sZSBmaWVsZCBkZWZpbml0aW9uLgotICAgIC8vLyAgICBbYSxiKSAgWyA0LCAw
LCAyLCAwLCA0IF0gIFRoZSBsYWJlbCAob3B0aW9uYWwpLgotICAgIC8vLyAgICBbYyxkKSAgWyA0
LCAwLCAyLCAwLCA1IF0gIFRoZSB0eXBlIChzdHJpbmcpLgotICAgIC8vLyAgICBbZSxmKSAgWyA0
LCAwLCAyLCAwLCAxIF0gIFRoZSBuYW1lIChmb28pLgotICAgIC8vLyAgICBbZyxoKSAgWyA0LCAw
LCAyLCAwLCAzIF0gIFRoZSBudW1iZXIgKDEpLgotICAgIC8vLwotICAgIC8vLyAgTm90ZXM6Ci0g
ICAgLy8vICAtIEEgbG9jYXRpb24gbWF5IHJlZmVyIHRvIGEgcmVwZWF0ZWQgZmllbGQgaXRzZWxm
IChpLmUuIG5vdCB0byBhbnkKLSAgICAvLy8gICAgcGFydGljdWxhciBpbmRleCB3aXRoaW4gaXQp
LiAgVGhpcyBpcyB1c2VkIHdoZW5ldmVyIGEgc2V0IG9mIGVsZW1lbnRzIGFyZQotICAgIC8vLyAg
ICBsb2dpY2FsbHkgZW5jbG9zZWQgaW4gYSBzaW5nbGUgY29kZSBzZWdtZW50LiAgRm9yIGV4YW1w
bGUsIGFuIGVudGlyZQotICAgIC8vLyAgICBleHRlbmQgYmxvY2sgKHBvc3NpYmx5IGNvbnRhaW5p
bmcgbXVsdGlwbGUgZXh0ZW5zaW9uIGRlZmluaXRpb25zKSB3aWxsCi0gICAgLy8vICAgIGhhdmUg
YW4gb3V0ZXIgbG9jYXRpb24gd2hvc2UgcGF0aCByZWZlcnMgdG8gdGhlICJleHRlbnNpb25zIiBy
ZXBlYXRlZAotICAgIC8vLyAgICBmaWVsZCB3aXRob3V0IGFuIGluZGV4LgotICAgIC8vLyAgLSBN
dWx0aXBsZSBsb2NhdGlvbnMgbWF5IGhhdmUgdGhlIHNhbWUgcGF0aC4gIFRoaXMgaGFwcGVucyB3
aGVuIGEgc2luZ2xlCi0gICAgLy8vICAgIGxvZ2ljYWwgZGVjbGFyYXRpb24gaXMgc3ByZWFkIG91
dCBhY3Jvc3MgbXVsdGlwbGUgcGxhY2VzLiAgVGhlIG1vc3QKLSAgICAvLy8gICAgb2J2aW91cyBl
eGFtcGxlIGlzIHRoZSAiZXh0ZW5kIiBibG9jayBhZ2FpbiAtLSB0aGVyZSBtYXkgYmUgbXVsdGlw
bGUKLSAgICAvLy8gICAgZXh0ZW5kIGJsb2NrcyBpbiB0aGUgc2FtZSBzY29wZSwgZWFjaCBvZiB3
aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgcGF0aC4KLSAgICAvLy8gIC0gQSBsb2NhdGlvbidzIHNw
YW4gaXMgbm90IGFsd2F5cyBhIHN1YnNldCBvZiBpdHMgcGFyZW50J3Mgc3Bhbi4gIEZvcgotICAg
IC8vLyAgICBleGFtcGxlLCB0aGUgImV4dGVuZGVlIiBvZiBhbiBleHRlbnNpb24gZGVjbGFyYXRp
b24gYXBwZWFycyBhdCB0aGUKLSAgICAvLy8gICAgYmVnaW5uaW5nIG9mIHRoZSAiZXh0ZW5kIiBi
bG9jayBhbmQgaXMgc2hhcmVkIGJ5IGFsbCBleHRlbnNpb25zIHdpdGhpbgotICAgIC8vLyAgICB0
aGUgYmxvY2suCi0gICAgLy8vICAtIEp1c3QgYmVjYXVzZSBhIGxvY2F0aW9uJ3Mgc3BhbiBpcyBh
IHN1YnNldCBvZiBzb21lIG90aGVyIGxvY2F0aW9uJ3Mgc3BhbgotICAgIC8vLyAgICBkb2VzIG5v
dCBtZWFuIHRoYXQgaXQgaXMgYSBkZXNjZW5kZW50LiAgRm9yIGV4YW1wbGUsIGEgImdyb3VwIiBk
ZWZpbmVzCi0gICAgLy8vICAgIGJvdGggYSB0eXBlIGFuZCBhIGZpZWxkIGluIGEgc2luZ2xlIGRl
Y2xhcmF0aW9uLiAgVGh1cywgdGhlIGxvY2F0aW9ucwotICAgIC8vLyAgICBjb3JyZXNwb25kaW5n
IHRvIHRoZSB0eXBlIGFuZCBmaWVsZCBhbmQgdGhlaXIgY29tcG9uZW50cyB3aWxsIG92ZXJsYXAu
Ci0gICAgLy8vICAtIENvZGUgd2hpY2ggdHJpZXMgdG8gaW50ZXJwcmV0IGxvY2F0aW9ucyBzaG91
bGQgcHJvYmFibHkgYmUgZGVzaWduZWQgdG8KLSAgICAvLy8gICAgaWdub3JlIHRob3NlIHRoYXQg
aXQgZG9lc24ndCB1bmRlcnN0YW5kLCBhcyBtb3JlIHR5cGVzIG9mIGxvY2F0aW9ucyBjb3VsZAot
ICAgIC8vLyAgICBiZSByZWNvcmRlZCBpbiB0aGUgZnV0dXJlLgotICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5S
ZWZsZWN0aW9uLlNvdXJjZUNvZGVJbmZvLlR5cGVzLkxvY2F0aW9uPiBMb2NhdGlvbiB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gbG9jYXRpb25fOyB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRl
IGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBh
cyBTb3VyY2VDb2RlSW5mbyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKFNvdXJj
ZUNvZGVJbmZvIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxs
KSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNl
RXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAg
ICAgIGlmKCFsb2NhdGlvbl8uRXF1YWxzKG90aGVyLmxvY2F0aW9uXykpIHJldHVybiBmYWxzZTsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0
SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBoYXNoIF49IGxvY2F0aW9u
Xy5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGlj
IG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1h
dHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
V3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBsb2NhdGlvbl8u
V3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9sb2NhdGlvbl9jb2RlYyk7Ci0gICAgfQotCi0gICAg
cHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAg
c2l6ZSArPSBsb2NhdGlvbl8uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfbG9jYXRpb25fY29kZWMp
OwotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9t
KFNvdXJjZUNvZGVJbmZvIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBsb2NhdGlvbl8uQWRkKG90aGVyLmxvY2F0aW9u
Xyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3Ry
ZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQu
UmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgbG9jYXRpb25fLkFkZEVudHJp
ZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfbG9jYXRpb25fY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgI3JlZ2lv
biBOZXN0ZWQgdHlwZXMKLSAgICAvLy8gPHN1bW1hcnk+Q29udGFpbmVyIGZvciBuZXN0ZWQgdHlw
ZXMgZGVjbGFyZWQgaW4gdGhlIFNvdXJjZUNvZGVJbmZvIG1lc3NhZ2UgdHlwZS48L3N1bW1hcnk+
Ci0gICAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRy
aWJ1dGUoKV0KLSAgICBwdWJsaWMgc3RhdGljIHBhcnRpYWwgY2xhc3MgVHlwZXMgewotICAgICAg
W2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUo
KV0KLSAgICAgIGludGVybmFsIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIExvY2F0aW9uIDogcGI6OklN
ZXNzYWdlPExvY2F0aW9uPiB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpN
ZXNzYWdlUGFyc2VyPExvY2F0aW9uPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPExv
Y2F0aW9uPigoKSA9PiBuZXcgTG9jYXRpb24oKSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcGI6
Ok1lc3NhZ2VQYXJzZXI8TG9jYXRpb24+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9
IH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3Jp
cHRvciB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24uU291cmNlQ29kZUluZm8uRGVzY3JpcHRvci5OZXN0ZWRUeXBlc1swXTsgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVz
Y3JpcHRvciB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICAgICAg
fQotCi0gICAgICAgIHB1YmxpYyBMb2NhdGlvbigpIHsKLSAgICAgICAgICBPbkNvbnN0cnVjdGlv
bigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7
Ci0KLSAgICAgICAgcHVibGljIExvY2F0aW9uKExvY2F0aW9uIG90aGVyKSA6IHRoaXMoKSB7Ci0g
ICAgICAgICAgcGF0aF8gPSBvdGhlci5wYXRoXy5DbG9uZSgpOwotICAgICAgICAgIHNwYW5fID0g
b3RoZXIuc3Bhbl8uQ2xvbmUoKTsKLSAgICAgICAgICBsZWFkaW5nQ29tbWVudHNfID0gb3RoZXIu
bGVhZGluZ0NvbW1lbnRzXzsKLSAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzXyA9IG90aGVyLnRy
YWlsaW5nQ29tbWVudHNfOwotICAgICAgICAgIGxlYWRpbmdEZXRhY2hlZENvbW1lbnRzXyA9IG90
aGVyLmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzXy5DbG9uZSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcHVibGljIExvY2F0aW9uIENsb25lKCkgewotICAgICAgICAgIHJldHVybiBuZXcgTG9jYXRp
b24odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVy
IGZvciB0aGUgInBhdGgiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGlu
dCBQYXRoRmllbGROdW1iZXIgPSAxOwotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBw
Yjo6RmllbGRDb2RlYzxpbnQ+IF9yZXBlYXRlZF9wYXRoX2NvZGVjCi0gICAgICAgICAgICA9IHBi
OjpGaWVsZENvZGVjLkZvckludDMyKDEwKTsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwYmM6
OlJlcGVhdGVkRmllbGQ8aW50PiBwYXRoXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50Pigp
OwotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgSWRlbnRpZmllcyB3aGljaCBw
YXJ0IG9mIHRoZSBGaWxlRGVzY3JpcHRvclByb3RvIHdhcyBkZWZpbmVkIGF0IHRoaXMKLSAgICAg
ICAgLy8vICBsb2NhdGlvbi4KLSAgICAgICAgLy8vCi0gICAgICAgIC8vLyAgRWFjaCBlbGVtZW50
IGlzIGEgZmllbGQgbnVtYmVyIG9yIGFuIGluZGV4LiAgVGhleSBmb3JtIGEgcGF0aCBmcm9tCi0g
ICAgICAgIC8vLyAgdGhlIHJvb3QgRmlsZURlc2NyaXB0b3JQcm90byB0byB0aGUgcGxhY2Ugd2hl
cmUgdGhlIGRlZmluaXRpb24uICBGb3IKLSAgICAgICAgLy8vICBleGFtcGxlLCB0aGlzIHBhdGg6
Ci0gICAgICAgIC8vLyAgICBbIDQsIDMsIDIsIDcsIDEgXQotICAgICAgICAvLy8gIHJlZmVycyB0
bzoKLSAgICAgICAgLy8vICAgIGZpbGUubWVzc2FnZV90eXBlKDMpICAvLyA0LCAzCi0gICAgICAg
IC8vLyAgICAgICAgLmZpZWxkKDcpICAgICAgICAgLy8gMiwgNwotICAgICAgICAvLy8gICAgICAg
IC5uYW1lKCkgICAgICAgICAgIC8vIDEKLSAgICAgICAgLy8vICBUaGlzIGlzIGJlY2F1c2UgRmls
ZURlc2NyaXB0b3JQcm90by5tZXNzYWdlX3R5cGUgaGFzIGZpZWxkIG51bWJlciA0OgotICAgICAg
ICAvLy8gICAgcmVwZWF0ZWQgRGVzY3JpcHRvclByb3RvIG1lc3NhZ2VfdHlwZSA9IDQ7Ci0gICAg
ICAgIC8vLyAgYW5kIERlc2NyaXB0b3JQcm90by5maWVsZCBoYXMgZmllbGQgbnVtYmVyIDI6Ci0g
ICAgICAgIC8vLyAgICByZXBlYXRlZCBGaWVsZERlc2NyaXB0b3JQcm90byBmaWVsZCA9IDI7Ci0g
ICAgICAgIC8vLyAgYW5kIEZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUgaGFzIGZpZWxkIG51bWJl
ciAxOgotICAgICAgICAvLy8gICAgb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAgICAgICAv
Ly8KLSAgICAgICAgLy8vICBUaHVzLCB0aGUgYWJvdmUgcGF0aCBnaXZlcyB0aGUgbG9jYXRpb24g
b2YgYSBmaWVsZCBuYW1lLiAgSWYgd2UgcmVtb3ZlZAotICAgICAgICAvLy8gIHRoZSBsYXN0IGVs
ZW1lbnQ6Ci0gICAgICAgIC8vLyAgICBbIDQsIDMsIDIsIDcgXQotICAgICAgICAvLy8gIHRoaXMg
cGF0aCByZWZlcnMgdG8gdGhlIHdob2xlIGZpZWxkIGRlY2xhcmF0aW9uIChmcm9tIHRoZSBiZWdp
bm5pbmcKLSAgICAgICAgLy8vICBvZiB0aGUgbGFiZWwgdG8gdGhlIHRlcm1pbmF0aW5nIHNlbWlj
b2xvbikuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBwYmM6OlJlcGVh
dGVkRmllbGQ8aW50PiBQYXRoIHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4gcGF0aF87IH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic3Bh
biIgZmllbGQuPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgY29uc3QgaW50IFNwYW5GaWVsZE51
bWJlciA9IDI7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVj
PGludD4gX3JlcGVhdGVkX3NwYW5fY29kZWMKLSAgICAgICAgICAgID0gcGI6OkZpZWxkQ29kZWMu
Rm9ySW50MzIoMTgpOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVs
ZDxpbnQ+IHNwYW5fID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxpbnQ+KCk7Ci0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBBbHdheXMgaGFzIGV4YWN0bHkgdGhyZWUgb3IgZm91
ciBlbGVtZW50czogc3RhcnQgbGluZSwgc3RhcnQgY29sdW1uLAotICAgICAgICAvLy8gIGVuZCBs
aW5lIChvcHRpb25hbCwgb3RoZXJ3aXNlIGFzc3VtZWQgc2FtZSBhcyBzdGFydCBsaW5lKSwgZW5k
IGNvbHVtbi4KLSAgICAgICAgLy8vICBUaGVzZSBhcmUgcGFja2VkIGludG8gYSBzaW5nbGUgZmll
bGQgZm9yIGVmZmljaWVuY3kuICBOb3RlIHRoYXQgbGluZQotICAgICAgICAvLy8gIGFuZCBjb2x1
bW4gbnVtYmVycyBhcmUgemVyby1iYXNlZCAtLSB0eXBpY2FsbHkgeW91IHdpbGwgd2FudCB0byBh
ZGQKLSAgICAgICAgLy8vICAxIHRvIGVhY2ggYmVmb3JlIGRpc3BsYXlpbmcgdG8gYSB1c2VyLgot
ICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxk
PGludD4gU3BhbiB7Ci0gICAgICAgICAgZ2V0IHsgcmV0dXJuIHNwYW5fOyB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImxlYWRpbmdfY29t
bWVudHMiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBMZWFkaW5n
Q29tbWVudHNGaWVsZE51bWJlciA9IDM7Ci0gICAgICAgIHByaXZhdGUgc3RyaW5nIGxlYWRpbmdD
b21tZW50c18gPSAiIjsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gIElmIHRo
aXMgU291cmNlQ29kZUluZm8gcmVwcmVzZW50cyBhIGNvbXBsZXRlIGRlY2xhcmF0aW9uLCB0aGVz
ZSBhcmUgYW55Ci0gICAgICAgIC8vLyAgY29tbWVudHMgYXBwZWFyaW5nIGJlZm9yZSBhbmQgYWZ0
ZXIgdGhlIGRlY2xhcmF0aW9uIHdoaWNoIGFwcGVhciB0byBiZQotICAgICAgICAvLy8gIGF0dGFj
aGVkIHRvIHRoZSBkZWNsYXJhdGlvbi4KLSAgICAgICAgLy8vCi0gICAgICAgIC8vLyAgQSBzZXJp
ZXMgb2YgbGluZSBjb21tZW50cyBhcHBlYXJpbmcgb24gY29uc2VjdXRpdmUgbGluZXMsIHdpdGgg
bm8gb3RoZXIKLSAgICAgICAgLy8vICB0b2tlbnMgYXBwZWFyaW5nIG9uIHRob3NlIGxpbmVzLCB3
aWxsIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUgY29tbWVudC4KLSAgICAgICAgLy8vCi0gICAgICAg
IC8vLyAgbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cyB3aWxsIGtlZXAgcGFyYWdyYXBocyBvZiBj
b21tZW50cyB0aGF0IGFwcGVhcgotICAgICAgICAvLy8gIGJlZm9yZSAoYnV0IG5vdCBjb25uZWN0
ZWQgdG8pIHRoZSBjdXJyZW50IGVsZW1lbnQuIEVhY2ggcGFyYWdyYXBoLAotICAgICAgICAvLy8g
IHNlcGFyYXRlZCBieSBlbXB0eSBsaW5lcywgd2lsbCBiZSBvbmUgY29tbWVudCBlbGVtZW50IGlu
IHRoZSByZXBlYXRlZAotICAgICAgICAvLy8gIGZpZWxkLgotICAgICAgICAvLy8KLSAgICAgICAg
Ly8vICBPbmx5IHRoZSBjb21tZW50IGNvbnRlbnQgaXMgcHJvdmlkZWQ7IGNvbW1lbnQgbWFya2Vy
cyAoZS5nLiAvLykgYXJlCi0gICAgICAgIC8vLyAgc3RyaXBwZWQgb3V0LiAgRm9yIGJsb2NrIGNv
bW1lbnRzLCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGFuIGFzdGVyaXNrCi0gICAgICAgIC8vLyAg
d2lsbCBiZSBzdHJpcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIG90aGVyIHRo
YW4gdGhlIGZpcnN0LgotICAgICAgICAvLy8gIE5ld2xpbmVzIGFyZSBpbmNsdWRlZCBpbiB0aGUg
b3V0cHV0LgotICAgICAgICAvLy8KLSAgICAgICAgLy8vICBFeGFtcGxlczoKLSAgICAgICAgLy8v
Ci0gICAgICAgIC8vLyAgICBvcHRpb25hbCBpbnQzMiBmb28gPSAxOyAgLy8gQ29tbWVudCBhdHRh
Y2hlZCB0byBmb28uCi0gICAgICAgIC8vLyAgICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGJhci4K
LSAgICAgICAgLy8vICAgIG9wdGlvbmFsIGludDMyIGJhciA9IDI7Ci0gICAgICAgIC8vLwotICAg
ICAgICAvLy8gICAgb3B0aW9uYWwgc3RyaW5nIGJheiA9IDM7Ci0gICAgICAgIC8vLyAgICAvLyBD
b21tZW50IGF0dGFjaGVkIHRvIGJhei4KLSAgICAgICAgLy8vICAgIC8vIEFub3RoZXIgbGluZSBh
dHRhY2hlZCB0byBiYXouCi0gICAgICAgIC8vLwotICAgICAgICAvLy8gICAgLy8gQ29tbWVudCBh
dHRhY2hlZCB0byBxdXguCi0gICAgICAgIC8vLyAgICAvLwotICAgICAgICAvLy8gICAgLy8gQW5v
dGhlciBsaW5lIGF0dGFjaGVkIHRvIHF1eC4KLSAgICAgICAgLy8vICAgIG9wdGlvbmFsIGRvdWJs
ZSBxdXggPSA0OwotICAgICAgICAvLy8KLSAgICAgICAgLy8vICAgIC8vIERldGFjaGVkIGNvbW1l
bnQgZm9yIGNvcmdlLiBUaGlzIGlzIG5vdCBsZWFkaW5nIG9yIHRyYWlsaW5nIGNvbW1lbnRzCi0g
ICAgICAgIC8vLyAgICAvLyB0byBxdXggb3IgY29yZ2UgYmVjYXVzZSB0aGVyZSBhcmUgYmxhbmsg
bGluZXMgc2VwYXJhdGluZyBpdCBmcm9tCi0gICAgICAgIC8vLyAgICAvLyBib3RoLgotICAgICAg
ICAvLy8KLSAgICAgICAgLy8vICAgIC8vIERldGFjaGVkIGNvbW1lbnQgZm9yIGNvcmdlIHBhcmFn
cmFwaCAyLgotICAgICAgICAvLy8KLSAgICAgICAgLy8vICAgIG9wdGlvbmFsIHN0cmluZyBjb3Jn
ZSA9IDU7Ci0gICAgICAgIC8vLyAgICAvKiBCbG9jayBjb21tZW50IGF0dGFjaGVkCi0gICAgICAg
IC8vLyAgICAgKiB0byBjb3JnZS4gIExlYWRpbmcgYXN0ZXJpc2tzCi0gICAgICAgIC8vLyAgICAg
KiB3aWxsIGJlIHJlbW92ZWQuICovCi0gICAgICAgIC8vLyAgICAvKiBCbG9jayBjb21tZW50IGF0
dGFjaGVkIHRvCi0gICAgICAgIC8vLyAgICAgKiBncmF1bHQuICovCi0gICAgICAgIC8vLyAgICBv
cHRpb25hbCBpbnQzMiBncmF1bHQgPSA2OwotICAgICAgICAvLy8KLSAgICAgICAgLy8vICAgIC8v
IGlnbm9yZWQgZGV0YWNoZWQgY29tbWVudHMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
ICAgIHB1YmxpYyBzdHJpbmcgTGVhZGluZ0NvbW1lbnRzIHsKLSAgICAgICAgICBnZXQgeyByZXR1
cm4gbGVhZGluZ0NvbW1lbnRzXzsgfQotICAgICAgICAgIHNldCB7Ci0gICAgICAgICAgICBsZWFk
aW5nQ29tbWVudHNfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUs
ICJ2YWx1ZSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAidHJhaWxpbmdfY29tbWVudHMiIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBUcmFpbGluZ0NvbW1lbnRzRmllbGROdW1iZXIg
PSA0OwotICAgICAgICBwcml2YXRlIHN0cmluZyB0cmFpbGluZ0NvbW1lbnRzXyA9ICIiOwotICAg
ICAgICBwdWJsaWMgc3RyaW5nIFRyYWlsaW5nQ29tbWVudHMgewotICAgICAgICAgIGdldCB7IHJl
dHVybiB0cmFpbGluZ0NvbW1lbnRzXzsgfQotICAgICAgICAgIHNldCB7Ci0gICAgICAgICAgICB0
cmFpbGluZ0NvbW1lbnRzXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZh
bHVlLCAidmFsdWUiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMiIGZp
ZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBMZWFkaW5nRGV0YWNoZWRD
b21tZW50c0ZpZWxkTnVtYmVyID0gNjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkg
cGI6OkZpZWxkQ29kZWM8c3RyaW5nPiBfcmVwZWF0ZWRfbGVhZGluZ0RldGFjaGVkQ29tbWVudHNf
Y29kZWMKLSAgICAgICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3RyaW5nKDUwKTsKLSAgICAg
ICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8c3RyaW5nPiBsZWFkaW5nRGV0
YWNoZWRDb21tZW50c18gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPHN0cmluZz4oKTsKLSAgICAg
ICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+IExlYWRpbmdEZXRhY2hlZENvbW1l
bnRzIHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4gbGVhZGluZ0RldGFjaGVkQ29tbWVudHNfOyB9
Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0
IG90aGVyKSB7Ci0gICAgICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBMb2NhdGlvbik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbCBFcXVhbHMoTG9jYXRpb24gb3RoZXIpIHsK
LSAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1
YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
fQotICAgICAgICAgIGlmKCFwYXRoXy5FcXVhbHMob3RoZXIucGF0aF8pKSByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgaWYoIXNwYW5fLkVxdWFscyhvdGhlci5zcGFuXykpIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICBpZiAoTGVhZGluZ0NvbW1lbnRzICE9IG90aGVyLkxlYWRpbmdDb21tZW50cykg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgIGlmIChUcmFpbGluZ0NvbW1lbnRzICE9IG90aGVyLlRy
YWlsaW5nQ29tbWVudHMpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBpZighbGVhZGluZ0RldGFj
aGVkQ29tbWVudHNfLkVxdWFscyhvdGhlci5sZWFkaW5nRGV0YWNoZWRDb21tZW50c18pKSByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBw
dWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgICAgIGludCBoYXNoID0g
MTsKLSAgICAgICAgICBoYXNoIF49IHBhdGhfLkdldEhhc2hDb2RlKCk7Ci0gICAgICAgICAgaGFz
aCBePSBzcGFuXy5HZXRIYXNoQ29kZSgpOwotICAgICAgICAgIGlmIChMZWFkaW5nQ29tbWVudHMu
TGVuZ3RoICE9IDApIGhhc2ggXj0gTGVhZGluZ0NvbW1lbnRzLkdldEhhc2hDb2RlKCk7Ci0gICAg
ICAgICAgaWYgKFRyYWlsaW5nQ29tbWVudHMuTGVuZ3RoICE9IDApIGhhc2ggXj0gVHJhaWxpbmdD
b21tZW50cy5HZXRIYXNoQ29kZSgpOwotICAgICAgICAgIGhhc2ggXj0gbGVhZGluZ0RldGFjaGVk
Q29tbWVudHNfLkdldEhhc2hDb2RlKCk7Ci0gICAgICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgICAg
IH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAg
ICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0
cmVhbSBvdXRwdXQpIHsKLSAgICAgICAgICBwYXRoXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVk
X3BhdGhfY29kZWMpOwotICAgICAgICAgIHNwYW5fLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRf
c3Bhbl9jb2RlYyk7Ci0gICAgICAgICAgaWYgKExlYWRpbmdDb21tZW50cy5MZW5ndGggIT0gMCkg
ewotICAgICAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDI2KTsKLSAgICAgICAgICAgIG91dHB1
dC5Xcml0ZVN0cmluZyhMZWFkaW5nQ29tbWVudHMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBp
ZiAoVHJhaWxpbmdDb21tZW50cy5MZW5ndGggIT0gMCkgewotICAgICAgICAgICAgb3V0cHV0Lldy
aXRlUmF3VGFnKDM0KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhUcmFpbGluZ0Nv
bW1lbnRzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbGVhZGluZ0RldGFjaGVkQ29tbWVudHNf
LldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfbGVhZGluZ0RldGFjaGVkQ29tbWVudHNfY29kZWMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAg
ICAgICAgIGludCBzaXplID0gMDsKLSAgICAgICAgICBzaXplICs9IHBhdGhfLkNhbGN1bGF0ZVNp
emUoX3JlcGVhdGVkX3BhdGhfY29kZWMpOwotICAgICAgICAgIHNpemUgKz0gc3Bhbl8uQ2FsY3Vs
YXRlU2l6ZShfcmVwZWF0ZWRfc3Bhbl9jb2RlYyk7Ci0gICAgICAgICAgaWYgKExlYWRpbmdDb21t
ZW50cy5MZW5ndGggIT0gMCkgewotICAgICAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0
cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKExlYWRpbmdDb21tZW50cyk7Ci0gICAgICAgICAg
fQotICAgICAgICAgIGlmIChUcmFpbGluZ0NvbW1lbnRzLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAg
ICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUo
VHJhaWxpbmdDb21tZW50cyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHNpemUgKz0gbGVhZGlu
Z0RldGFjaGVkQ29tbWVudHNfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX2xlYWRpbmdEZXRhY2hl
ZENvbW1lbnRzX2NvZGVjKTsKLSAgICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShMb2NhdGlvbiBvdGhlcikgewotICAgICAgICAg
IGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQot
ICAgICAgICAgIHBhdGhfLkFkZChvdGhlci5wYXRoXyk7Ci0gICAgICAgICAgc3Bhbl8uQWRkKG90
aGVyLnNwYW5fKTsKLSAgICAgICAgICBpZiAob3RoZXIuTGVhZGluZ0NvbW1lbnRzLkxlbmd0aCAh
PSAwKSB7Ci0gICAgICAgICAgICBMZWFkaW5nQ29tbWVudHMgPSBvdGhlci5MZWFkaW5nQ29tbWVu
dHM7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChvdGhlci5UcmFpbGluZ0NvbW1lbnRzLkxl
bmd0aCAhPSAwKSB7Ci0gICAgICAgICAgICBUcmFpbGluZ0NvbW1lbnRzID0gb3RoZXIuVHJhaWxp
bmdDb21tZW50czsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbGVhZGluZ0RldGFjaGVkQ29tbWVu
dHNfLkFkZChvdGhlci5sZWFkaW5nRGV0YWNoZWRDb21tZW50c18pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7
Ci0gICAgICAgICAgdWludCB0YWc7Ci0gICAgICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFk
VGFnKCkpICE9IDApIHsKLSAgICAgICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMTA6Ci0gICAgICAgICAgICAgIGNh
c2UgODogewotICAgICAgICAgICAgICAgIHBhdGhfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVw
ZWF0ZWRfcGF0aF9jb2RlYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgY2FzZSAxODoKLSAgICAgICAgICAgICAgY2FzZSAxNjogewotICAg
ICAgICAgICAgICAgIHNwYW5fLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfc3Bhbl9j
b2RlYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgY2FzZSAyNjogewotICAgICAgICAgICAgICAgIExlYWRpbmdDb21tZW50cyA9IGlucHV0
LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICBjYXNlIDM0OiB7Ci0gICAgICAgICAgICAgICAgVHJhaWxpbmdDb21tZW50
cyA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICBjYXNlIDUwOiB7Ci0gICAgICAgICAgICAgICAgbGVhZGlu
Z0RldGFjaGVkQ29tbWVudHNfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfbGVhZGlu
Z0RldGFjaGVkQ29tbWVudHNfY29kZWMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
IH0KLQotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4KLSAg
Ly8vICBEZXNjcmliZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGdlbmVyYXRlZCBjb2RlIGFu
ZCBpdHMgb3JpZ2luYWwgc291cmNlCi0gIC8vLyAgZmlsZS4gQSBHZW5lcmF0ZWRDb2RlSW5mbyBt
ZXNzYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCBvbmx5IG9uZSBnZW5lcmF0ZWQKLSAgLy8vICBzb3Vy
Y2UgZmlsZSwgYnV0IG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gZGlmZmVyZW50IHNvdXJjZSAu
cHJvdG8gZmlsZXMuCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9z
dGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIGludGVybmFsIHNlYWxlZCBw
YXJ0aWFsIGNsYXNzIEdlbmVyYXRlZENvZGVJbmZvIDogcGI6OklNZXNzYWdlPEdlbmVyYXRlZENv
ZGVJbmZvPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8
R2VuZXJhdGVkQ29kZUluZm8+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8R2VuZXJh
dGVkQ29kZUluZm8+KCgpID0+IG5ldyBHZW5lcmF0ZWRDb2RlSW5mbygpKTsKLSAgICBwdWJsaWMg
c3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPEdlbmVyYXRlZENvZGVJbmZvPiBQYXJzZXIgeyBnZXQg
eyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURl
c2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuUmVmbGVjdGlvbi5EZXNjcmlwdG9yUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3Nh
Z2VUeXBlc1sxOF07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJ
TWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0g
ICAgfQotCi0gICAgcHVibGljIEdlbmVyYXRlZENvZGVJbmZvKCkgewotICAgICAgT25Db25zdHJ1
Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQot
ICAgIHB1YmxpYyBHZW5lcmF0ZWRDb2RlSW5mbyhHZW5lcmF0ZWRDb2RlSW5mbyBvdGhlcikgOiB0
aGlzKCkgewotICAgICAgYW5ub3RhdGlvbl8gPSBvdGhlci5hbm5vdGF0aW9uXy5DbG9uZSgpOwot
ICAgIH0KLQotICAgIHB1YmxpYyBHZW5lcmF0ZWRDb2RlSW5mbyBDbG9uZSgpIHsKLSAgICAgIHJl
dHVybiBuZXcgR2VuZXJhdGVkQ29kZUluZm8odGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1t
YXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJhbm5vdGF0aW9uIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBBbm5vdGF0aW9uRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZh
dGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LlJlZmxlY3Rpb24uR2VuZXJhdGVkQ29kZUluZm8uVHlwZXMuQW5ub3RhdGlvbj4gX3JlcGVhdGVk
X2Fubm90YXRpb25fY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDEw
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkdlbmVyYXRlZENvZGVJbmZvLlR5
cGVzLkFubm90YXRpb24uUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0
ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkdlbmVyYXRlZENvZGVJ
bmZvLlR5cGVzLkFubm90YXRpb24+IGFubm90YXRpb25fID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVs
ZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uLkdlbmVyYXRlZENvZGVJbmZvLlR5
cGVzLkFubm90YXRpb24+KCk7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgQW4gQW5ub3Rh
dGlvbiBjb25uZWN0cyBzb21lIHNwYW4gb2YgdGV4dCBpbiBnZW5lcmF0ZWQgY29kZSB0byBhbiBl
bGVtZW50Ci0gICAgLy8vICBvZiBpdHMgZ2VuZXJhdGluZyAucHJvdG8gZmlsZS4KLSAgICAvLy8g
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuUmVmbGVjdGlvbi5HZW5lcmF0ZWRDb2RlSW5mby5UeXBlcy5Bbm5vdGF0aW9uPiBB
bm5vdGF0aW9uIHsKLSAgICAgIGdldCB7IHJldHVybiBhbm5vdGF0aW9uXzsgfQotICAgIH0KLQot
ICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJl
dHVybiBFcXVhbHMob3RoZXIgYXMgR2VuZXJhdGVkQ29kZUluZm8pOwotICAgIH0KLQotICAgIHB1
YmxpYyBib29sIEVxdWFscyhHZW5lcmF0ZWRDb2RlSW5mbyBvdGhlcikgewotICAgICAgaWYgKFJl
ZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZighYW5ub3RhdGlvbl8uRXF1YWxzKG90aGVy
LmFubm90YXRpb25fKSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNo
ID0gMTsKLSAgICAgIGhhc2ggXj0gYW5ub3RhdGlvbl8uR2V0SGFzaENvZGUoKTsKLSAgICAgIHJl
dHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmco
KSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRo
aXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtIG91dHB1dCkgewotICAgICAgYW5ub3RhdGlvbl8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRl
ZF9hbm5vdGF0aW9uX2NvZGVjKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNp
emUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBzaXplICs9IGFubm90YXRpb25fLkNh
bGN1bGF0ZVNpemUoX3JlcGVhdGVkX2Fubm90YXRpb25fY29kZWMpOwotICAgICAgcmV0dXJuIHNp
emU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKEdlbmVyYXRlZENvZGVJbmZv
IG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0g
ICAgICB9Ci0gICAgICBhbm5vdGF0aW9uXy5BZGQob3RoZXIuYW5ub3RhdGlvbl8pOwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkg
ewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkg
IT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIGFubm90YXRpb25fLkFkZEVudHJpZXNGcm9tKGlu
cHV0LCBfcmVwZWF0ZWRfYW5ub3RhdGlvbl9jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAjcmVnaW9uIE5lc3Rl
ZCB0eXBlcwotICAgIC8vLyA8c3VtbWFyeT5Db250YWluZXIgZm9yIG5lc3RlZCB0eXBlcyBkZWNs
YXJlZCBpbiB0aGUgR2VuZXJhdGVkQ29kZUluZm8gbWVzc2FnZSB0eXBlLjwvc3VtbWFyeT4KLSAg
ICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0
ZSgpXQotICAgIHB1YmxpYyBzdGF0aWMgcGFydGlhbCBjbGFzcyBUeXBlcyB7Ci0gICAgICBbZ2xv
YmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQot
ICAgICAgaW50ZXJuYWwgc2VhbGVkIHBhcnRpYWwgY2xhc3MgQW5ub3RhdGlvbiA6IHBiOjpJTWVz
c2FnZTxBbm5vdGF0aW9uPiB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpN
ZXNzYWdlUGFyc2VyPEFubm90YXRpb24+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8
QW5ub3RhdGlvbj4oKCkgPT4gbmV3IEFubm90YXRpb24oKSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0
aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8QW5ub3RhdGlvbj4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9w
YXJzZXI7IH0gfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRv
ciBEZXNjcmlwdG9yIHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuUmVmbGVjdGlvbi5HZW5lcmF0ZWRDb2RlSW5mby5EZXNjcmlwdG9yLk5lc3RlZFR5cGVz
WzBdOyB9Ci0gICAgICAgIH0KLQotICAgICAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJ
TWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsg
fQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEFubm90YXRpb24oKSB7Ci0gICAgICAgICAg
T25Db25zdHJ1Y3Rpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcnRpYWwgdm9pZCBPbkNv
bnN0cnVjdGlvbigpOwotCi0gICAgICAgIHB1YmxpYyBBbm5vdGF0aW9uKEFubm90YXRpb24gb3Ro
ZXIpIDogdGhpcygpIHsKLSAgICAgICAgICBwYXRoXyA9IG90aGVyLnBhdGhfLkNsb25lKCk7Ci0g
ICAgICAgICAgc291cmNlRmlsZV8gPSBvdGhlci5zb3VyY2VGaWxlXzsKLSAgICAgICAgICBiZWdp
bl8gPSBvdGhlci5iZWdpbl87Ci0gICAgICAgICAgZW5kXyA9IG90aGVyLmVuZF87Ci0gICAgICAg
IH0KLQotICAgICAgICBwdWJsaWMgQW5ub3RhdGlvbiBDbG9uZSgpIHsKLSAgICAgICAgICByZXR1
cm4gbmV3IEFubm90YXRpb24odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1h
cnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInBhdGgiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAg
cHVibGljIGNvbnN0IGludCBQYXRoRmllbGROdW1iZXIgPSAxOwotICAgICAgICBwcml2YXRlIHN0
YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxpbnQ+IF9yZXBlYXRlZF9wYXRoX2NvZGVjCi0g
ICAgICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvckludDMyKDEwKTsKLSAgICAgICAgcHJpdmF0
ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PiBwYXRoXyA9IG5ldyBwYmM6OlJlcGVh
dGVkRmllbGQ8aW50PigpOwotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgSWRl
bnRpZmllcyB0aGUgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwgc291cmNlIC5wcm90byBmaWxlLiBU
aGlzIGZpZWxkCi0gICAgICAgIC8vLyAgaXMgZm9ybWF0dGVkIHRoZSBzYW1lIGFzIFNvdXJjZUNv
ZGVJbmZvLkxvY2F0aW9uLnBhdGguCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1
YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8aW50PiBQYXRoIHsKLSAgICAgICAgICBnZXQgeyByZXR1
cm4gcGF0aF87IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAic291cmNlX2ZpbGUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICAgICAgcHVibGlj
IGNvbnN0IGludCBTb3VyY2VGaWxlRmllbGROdW1iZXIgPSAyOwotICAgICAgICBwcml2YXRlIHN0
cmluZyBzb3VyY2VGaWxlXyA9ICIiOwotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyAgSWRlbnRpZmllcyB0aGUgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2Ug
LnByb3RvLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RyaW5nIFNv
dXJjZUZpbGUgewotICAgICAgICAgIGdldCB7IHJldHVybiBzb3VyY2VGaWxlXzsgfQotICAgICAg
ICAgIHNldCB7Ci0gICAgICAgICAgICBzb3VyY2VGaWxlXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlv
bnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImJlZ2luIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBpbnQgQmVnaW5GaWVsZE51bWJlciA9
IDM7Ci0gICAgICAgIHByaXZhdGUgaW50IGJlZ2luXzsKLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gIElkZW50aWZpZXMgdGhlIHN0YXJ0aW5nIG9mZnNldCBpbiBieXRlcyBpbiB0
aGUgZ2VuZXJhdGVkIGNvZGUKLSAgICAgICAgLy8vICB0aGF0IHJlbGF0ZXMgdG8gdGhlIGlkZW50
aWZpZWQgb2JqZWN0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgaW50
IEJlZ2luIHsKLSAgICAgICAgICBnZXQgeyByZXR1cm4gYmVnaW5fOyB9Ci0gICAgICAgICAgc2V0
IHsKLSAgICAgICAgICAgIGJlZ2luXyA9IHZhbHVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZW5kIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBpbnQgRW5kRmllbGROdW1iZXIgPSA0Owot
ICAgICAgICBwcml2YXRlIGludCBlbmRfOwotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyAgSWRlbnRpZmllcyB0aGUgZW5kaW5nIG9mZnNldCBpbiBieXRlcyBpbiB0aGUgZ2VuZXJh
dGVkIGNvZGUgdGhhdAotICAgICAgICAvLy8gIHJlbGF0ZXMgdG8gdGhlIGlkZW50aWZpZWQgb2Zm
c2V0LiBUaGUgZW5kIG9mZnNldCBzaG91bGQgYmUgb25lIHBhc3QKLSAgICAgICAgLy8vICB0aGUg
bGFzdCByZWxldmFudCBieXRlIChzbyB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0ID0gZW5kIC0gYmVn
aW4pLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgaW50IEVuZCB7Ci0g
ICAgICAgICAgZ2V0IHsgcmV0dXJuIGVuZF87IH0KLSAgICAgICAgICBzZXQgewotICAgICAgICAg
ICAgZW5kXyA9IHZhbHVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1Ymxp
YyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgICAgICByZXR1cm4g
RXF1YWxzKG90aGVyIGFzIEFubm90YXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGlj
IGJvb2wgRXF1YWxzKEFubm90YXRpb24gb3RoZXIpIHsKLSAgICAgICAgICBpZiAoUmVmZXJlbmNl
RXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmKCFwYXRoXy5F
cXVhbHMob3RoZXIucGF0aF8pKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgaWYgKFNvdXJjZUZp
bGUgIT0gb3RoZXIuU291cmNlRmlsZSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGlmIChCZWdp
biAhPSBvdGhlci5CZWdpbikgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGlmIChFbmQgIT0gb3Ro
ZXIuRW5kKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgICAg
IGludCBoYXNoID0gMTsKLSAgICAgICAgICBoYXNoIF49IHBhdGhfLkdldEhhc2hDb2RlKCk7Ci0g
ICAgICAgICAgaWYgKFNvdXJjZUZpbGUuTGVuZ3RoICE9IDApIGhhc2ggXj0gU291cmNlRmlsZS5H
ZXRIYXNoQ29kZSgpOwotICAgICAgICAgIGlmIChCZWdpbiAhPSAwKSBoYXNoIF49IEJlZ2luLkdl
dEhhc2hDb2RlKCk7Ci0gICAgICAgICAgaWYgKEVuZCAhPSAwKSBoYXNoIF49IEVuZC5HZXRIYXNo
Q29kZSgpOwotICAgICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVi
bGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgICAgICByZXR1cm4gcGI6Okpz
b25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0g
ICAgICAgICAgcGF0aF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9wYXRoX2NvZGVjKTsKLSAg
ICAgICAgICBpZiAoU291cmNlRmlsZS5MZW5ndGggIT0gMCkgewotICAgICAgICAgICAgb3V0cHV0
LldyaXRlUmF3VGFnKDE4KTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhTb3VyY2VG
aWxlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKEJlZ2luICE9IDApIHsKLSAgICAgICAg
ICAgIG91dHB1dC5Xcml0ZVJhd1RhZygyNCk7Ci0gICAgICAgICAgICBvdXRwdXQuV3JpdGVJbnQz
MihCZWdpbik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChFbmQgIT0gMCkgewotICAgICAg
ICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDMyKTsKLSAgICAgICAgICAgIG91dHB1dC5Xcml0ZUlu
dDMyKEVuZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBD
YWxjdWxhdGVTaXplKCkgewotICAgICAgICAgIGludCBzaXplID0gMDsKLSAgICAgICAgICBzaXpl
ICs9IHBhdGhfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX3BhdGhfY29kZWMpOwotICAgICAgICAg
IGlmIChTb3VyY2VGaWxlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgICAgICBzaXplICs9IDEgKyBw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoU291cmNlRmlsZSk7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGlmIChCZWdpbiAhPSAwKSB7Ci0gICAgICAgICAgICBzaXplICs9
IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShCZWdpbik7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGlmIChFbmQgIT0gMCkgewotICAgICAgICAgICAgc2l6ZSArPSAx
ICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoRW5kKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMg
dm9pZCBNZXJnZUZyb20oQW5ub3RhdGlvbiBvdGhlcikgewotICAgICAgICAgIGlmIChvdGhlciA9
PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIHBh
dGhfLkFkZChvdGhlci5wYXRoXyk7Ci0gICAgICAgICAgaWYgKG90aGVyLlNvdXJjZUZpbGUuTGVu
Z3RoICE9IDApIHsKLSAgICAgICAgICAgIFNvdXJjZUZpbGUgPSBvdGhlci5Tb3VyY2VGaWxlOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBpZiAob3RoZXIuQmVnaW4gIT0gMCkgewotICAgICAgICAg
ICAgQmVnaW4gPSBvdGhlci5CZWdpbjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKG90aGVy
LkVuZCAhPSAwKSB7Ci0gICAgICAgICAgICBFbmQgPSBvdGhlci5FbmQ7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0
U3RyZWFtIGlucHV0KSB7Ci0gICAgICAgICAgdWludCB0YWc7Ci0gICAgICAgICAgd2hpbGUgKCh0
YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgICAgIHN3aXRjaCh0YWcpIHsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZp
ZWxkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMTA6Ci0g
ICAgICAgICAgICAgIGNhc2UgODogewotICAgICAgICAgICAgICAgIHBhdGhfLkFkZEVudHJpZXNG
cm9tKGlucHV0LCBfcmVwZWF0ZWRfcGF0aF9jb2RlYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2FzZSAxODogewotICAgICAgICAgICAg
ICAgIFNvdXJjZUZpbGUgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2FzZSAyNDogewotICAgICAgICAg
ICAgICAgIEJlZ2luID0gaW5wdXQuUmVhZEludDMyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2FzZSAzMjogewotICAgICAgICAgICAg
ICAgIEVuZCA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgIH0KLQotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotCi0gICNlbmRyZWdpb24KLQot
fQotCi0jZW5kcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFy
cC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vRGVzY3JpcHRvckJhc2UuY3MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFy
cC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vRGVzY3JpcHRvckJhc2UuY3MKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NDA0MWE4ODk0MmNiNDAzY2E5YjZkZTdjZTI5MjA1
YmRlYjQzMGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9j
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0Rlc2NyaXB0b3JCYXNlLmNzCisr
KyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFu
ZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24K
LQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1t
YXJ5PgotICAgIC8vLyBCYXNlIGNsYXNzIGZvciBuZWFybHkgYWxsIGRlc2NyaXB0b3JzLCBwcm92
aWRpbmcgY29tbW9uIGZ1bmN0aW9uYWxpdHkuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgYWJzdHJhY3QgY2xhc3MgRGVzY3JpcHRvckJhc2UgOiBJRGVzY3JpcHRvcgotICAgIHsKLSAg
ICAgICAgcHJpdmF0ZSByZWFkb25seSBGaWxlRGVzY3JpcHRvciBmaWxlOwotICAgICAgICBwcml2
YXRlIHJlYWRvbmx5IHN0cmluZyBmdWxsTmFtZTsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBp
bnQgaW5kZXg7Ci0KLSAgICAgICAgaW50ZXJuYWwgRGVzY3JpcHRvckJhc2UoRmlsZURlc2NyaXB0
b3IgZmlsZSwgc3RyaW5nIGZ1bGxOYW1lLCBpbnQgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHRoaXMuZmlsZSA9IGZpbGU7Ci0gICAgICAgICAgICB0aGlzLmZ1bGxOYW1lID0gZnVsbE5h
bWU7Ci0gICAgICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gVGhlIGluZGV4IG9mIHRoaXMgZGVzY3JpcHRvciB3
aXRoaW4gaXRzIHBhcmVudCBkZXNjcmlwdG9yLiAKLSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAg
ICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFRoaXMgcmV0dXJucyB0aGUgaW5kZXggb2Yg
dGhpcyBkZXNjcmlwdG9yIHdpdGhpbiBpdHMgcGFyZW50LCBmb3IKLSAgICAgICAgLy8vIHRoaXMg
ZGVzY3JpcHRvcidzIHR5cGUuIChUaGVyZSBjYW4gYmUgZHVwbGljYXRlIHZhbHVlcyBmb3IgZGlm
ZmVyZW50Ci0gICAgICAgIC8vLyB0eXBlcywgZS5nLiBvbmUgZW51bSB0eXBlIHdpdGggaW5kZXgg
MCBhbmQgb25lIG1lc3NhZ2UgdHlwZSB3aXRoIGluZGV4IDAuKQotICAgICAgICAvLy8gPC9yZW1h
cmtzPgotICAgICAgICBwdWJsaWMgaW50IEluZGV4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdl
dCB7IHJldHVybiBpbmRleDsgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZW50aXR5IChmaWVsZCwgbWVzc2Fn
ZSBldGMpIGJlaW5nIGRlc2NyaWJlZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
cHVibGljIGFic3RyYWN0IHN0cmluZyBOYW1lIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBkZXNjcmlw
dG9yJ3MgdGFyZ2V0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3Ry
aW5nIEZ1bGxOYW1lCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdldCB7IHJldHVybiBmdWxsTmFt
ZTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDx2YWx1ZT4KLSAgICAgICAgLy8vIFRoZSBm
aWxlIHRoaXMgZGVzY3JpcHRvciB3YXMgZGVjbGFyZWQgaW4uCi0gICAgICAgIC8vLyA8L3ZhbHVl
PgotICAgICAgICBwdWJsaWMgRmlsZURlc2NyaXB0b3IgRmlsZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBnZXQgeyByZXR1cm4gZmlsZTsgfQotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYv
UmVmbGVjdGlvbi9EZXNjcmlwdG9yUG9vbC5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYv
UmVmbGVjdGlvbi9EZXNjcmlwdG9yUG9vbC5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTljYTRiZjM0ZjE0MThmYzI0MWFhNzM0YmE5ZDc1ZDRmY2FlNGE4ZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmL1JlZmxlY3Rpb24vRGVzY3JpcHRvclBvb2wuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNjgg
KzAsMCBAQAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNp
bmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uVGV4dDsKLXVzaW5n
IFN5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9uczsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90
b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBDb250YWlucyBs
b29rdXAgdGFibGVzIGNvbnRhaW5pbmcgYWxsIHRoZSBkZXNjcmlwdG9ycyBkZWZpbmVkIGluIGEg
cGFydGljdWxhciBmaWxlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgaW50ZXJuYWwgc2VhbGVk
IGNsYXNzIERlc2NyaXB0b3JQb29sCi0gICAgewotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IElE
aWN0aW9uYXJ5PHN0cmluZywgSURlc2NyaXB0b3I+IGRlc2NyaXB0b3JzQnlOYW1lID0KLSAgICAg
ICAgICAgIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgSURlc2NyaXB0b3I+KCk7Ci0KLSAgICAgICAg
cHJpdmF0ZSByZWFkb25seSBJRGljdGlvbmFyeTxEZXNjcmlwdG9ySW50UGFpciwgRmllbGREZXNj
cmlwdG9yPiBmaWVsZHNCeU51bWJlciA9Ci0gICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxEZXNj
cmlwdG9ySW50UGFpciwgRmllbGREZXNjcmlwdG9yPigpOwotCi0gICAgICAgIHByaXZhdGUgcmVh
ZG9ubHkgSURpY3Rpb25hcnk8RGVzY3JpcHRvckludFBhaXIsIEVudW1WYWx1ZURlc2NyaXB0b3I+
IGVudW1WYWx1ZXNCeU51bWJlciA9Ci0gICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxEZXNjcmlw
dG9ySW50UGFpciwgRW51bVZhbHVlRGVzY3JpcHRvcj4oKTsKLQotICAgICAgICBwcml2YXRlIHJl
YWRvbmx5IEhhc2hTZXQ8RmlsZURlc2NyaXB0b3I+IGRlcGVuZGVuY2llczsKLQotICAgICAgICBp
bnRlcm5hbCBEZXNjcmlwdG9yUG9vbChGaWxlRGVzY3JpcHRvcltdIGRlcGVuZGVuY3lGaWxlcykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVwZW5kZW5jaWVzID0gbmV3IEhhc2hTZXQ8RmlsZURl
c2NyaXB0b3I+KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcGVuZGVuY3lG
aWxlcy5MZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXBlbmRl
bmNpZXMuQWRkKGRlcGVuZGVuY3lGaWxlc1tpXSk7Ci0gICAgICAgICAgICAgICAgSW1wb3J0UHVi
bGljRGVwZW5kZW5jaWVzKGRlcGVuZGVuY3lGaWxlc1tpXSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGZvcmVhY2ggKEZpbGVEZXNjcmlwdG9yIGRlcGVuZGVuY3kgaW4gZGVwZW5kZW5j
eUZpbGVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFkZFBhY2thZ2UoZGVwZW5k
ZW5jeS5QYWNrYWdlLCBkZXBlbmRlbmN5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHByaXZhdGUgdm9pZCBJbXBvcnRQdWJsaWNEZXBlbmRlbmNpZXMoRmlsZURlc2NyaXB0
b3IgZmlsZSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yZWFjaCAoRmlsZURlc2NyaXB0b3Ig
ZGVwZW5kZW5jeSBpbiBmaWxlLlB1YmxpY0RlcGVuZGVuY2llcykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jaWVzLkFkZChkZXBlbmRlbmN5KSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEltcG9ydFB1YmxpY0RlcGVuZGVuY2llcyhk
ZXBlbmRlbmN5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBGaW5kcyBhIHN5bWJvbCBvZiB0
aGUgZ2l2ZW4gbmFtZSB3aXRoaW4gdGhlIHBvb2wuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlQiPlRoZSB0eXBlIG9mIHN5bWJvbCB0byBsb29r
IGZvcjwvdHlwZXBhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImZ1bGxOYW1lIj5GdWxs
eS1xdWFsaWZpZWQgbmFtZSB0byBsb29rIHVwPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5z
PlRoZSBzeW1ib2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgdHlwZSwKLSAgICAgICAgLy8vIG9y
IG51bGwgaWYgdGhlIHN5bWJvbCBkb2Vzbid0IGV4aXN0IG9yIGhhcyB0aGUgd3JvbmcgdHlwZTwv
cmV0dXJucz4KLSAgICAgICAgaW50ZXJuYWwgVCBGaW5kU3ltYm9sPFQ+KHN0cmluZyBmdWxsTmFt
ZSkgd2hlcmUgVCA6IGNsYXNzCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEZXNjcmlwdG9yIHJl
c3VsdDsKLSAgICAgICAgICAgIGRlc2NyaXB0b3JzQnlOYW1lLlRyeUdldFZhbHVlKGZ1bGxOYW1l
LCBvdXQgcmVzdWx0KTsKLSAgICAgICAgICAgIFQgZGVzY3JpcHRvciA9IHJlc3VsdCBhcyBUOwot
ICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gZGVwZW5kZW5jaWVzIGNvbnRhaW5zIGRpcmVjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSAq
cHVibGljKiBkZXBlbmRlbmNpZXMKLSAgICAgICAgICAgIC8vIG9mIHRob3NlIGRlcGVuZGVuY2ll
cyAodHJhbnNpdGl2ZWx5KS4uLiBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlY3Vyc2UgaGVyZS4KLSAg
ICAgICAgICAgIGZvcmVhY2ggKEZpbGVEZXNjcmlwdG9yIGRlcGVuZGVuY3kgaW4gZGVwZW5kZW5j
aWVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kuRGVzY3JpcHRv
clBvb2wuZGVzY3JpcHRvcnNCeU5hbWUuVHJ5R2V0VmFsdWUoZnVsbE5hbWUsIG91dCByZXN1bHQp
OwotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSByZXN1bHQgYXMgVDsKLSAgICAgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRvciAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEFkZHMgYSBwYWNrYWdlIHRvIHRoZSBzeW1ib2wg
dGFibGVzLiBJZiBhIHBhY2thZ2UgYnkgdGhlIHNhbWUgbmFtZQotICAgICAgICAvLy8gYWxyZWFk
eSBleGlzdHMsIHRoYXQgaXMgZmluZSwgYnV0IGlmIHNvbWUgb3RoZXIga2luZCBvZiBzeW1ib2wK
LSAgICAgICAgLy8vIGV4aXN0cyB1bmRlciB0aGUgc2FtZSBuYW1lLCBhbiBleGNlcHRpb24gaXMg
dGhyb3duLiBJZiB0aGUgcGFja2FnZQotICAgICAgICAvLy8gaGFzIG11bHRpcGxlIGNvbXBvbmVu
dHMsIHRoaXMgYWxzbyBhZGRzIHRoZSBwYXJlbnQgcGFja2FnZShzKS4KLSAgICAgICAgLy8vIDwv
c3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgdm9pZCBBZGRQYWNrYWdlKHN0cmluZyBmdWxsTmFt
ZSwgRmlsZURlc2NyaXB0b3IgZmlsZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGRvdHBv
cyA9IGZ1bGxOYW1lLkxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZTsK
LSAgICAgICAgICAgIGlmIChkb3Rwb3MgIT0gLTEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgQWRkUGFja2FnZShmdWxsTmFtZS5TdWJzdHJpbmcoMCwgZG90cG9zKSwgZmlsZSk7Ci0g
ICAgICAgICAgICAgICAgbmFtZSA9IGZ1bGxOYW1lLlN1YnN0cmluZyhkb3Rwb3MgKyAxKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBuYW1lID0gZnVsbE5hbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIElEZXNj
cmlwdG9yIG9sZDsKLSAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yc0J5TmFtZS5UcnlHZXRWYWx1
ZShmdWxsTmFtZSwgb3V0IG9sZCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KCEob2xkIGlzIFBhY2thZ2VEZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbihmaWxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlwiIiArIG5hbWUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGlzIGFscmVhZHkgZGVmaW5lZCAoYXMgc29tZXRo
aW5nIG90aGVyIHRoYW4gYSAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlKSBpbiBmaWxlIFwiIiArIG9sZC5GaWxl
Lk5hbWUgKyAiXCIuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZGVzY3JpcHRvcnNCeU5hbWVbZnVsbE5hbWVdID0gbmV3IFBhY2thZ2VEZXNjcmlwdG9y
KG5hbWUsIGZ1bGxOYW1lLCBmaWxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAgICAgLy8vIEFkZHMgYSBzeW1ib2wgdG8gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iRGVzY3JpcHRv
clZhbGlkYXRpb25FeGNlcHRpb24iPlRoZSBzeW1ib2wgYWxyZWFkeSBleGlzdGVkCi0gICAgICAg
IC8vLyBpbiB0aGUgc3ltYm9sIHRhYmxlLjwvZXhjZXB0aW9uPgotICAgICAgICBpbnRlcm5hbCB2
b2lkIEFkZFN5bWJvbChJRGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBWYWxpZGF0ZVN5bWJvbE5hbWUoZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBTdHJpbmcg
ZnVsbE5hbWUgPSBkZXNjcmlwdG9yLkZ1bGxOYW1lOwotCi0gICAgICAgICAgICBJRGVzY3JpcHRv
ciBvbGQ7Ci0gICAgICAgICAgICBpZiAoZGVzY3JpcHRvcnNCeU5hbWUuVHJ5R2V0VmFsdWUoZnVs
bE5hbWUsIG91dCBvbGQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBkb3RQ
b3MgPSBmdWxsTmFtZS5MYXN0SW5kZXhPZignLicpOwotICAgICAgICAgICAgICAgIHN0cmluZyBt
ZXNzYWdlOwotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLkZpbGUgPT0gb2xkLkZpbGUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoZG90UG9zID09IC0x
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
ID0gIlwiIiArIGZ1bGxOYW1lICsgIlwiIGlzIGFscmVhZHkgZGVmaW5lZC4iOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJcIiIgKyBmdWxsTmFtZS5T
dWJzdHJpbmcoZG90UG9zICsgMSkgKyAiXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGluIFwiIiArCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWUuU3Vic3RyaW5nKDAsIGRv
dFBvcykgKyAiXCIuIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlID0gIlwiIiArIGZ1bGxOYW1lICsgIlwiIGlzIGFscmVhZHkgZGVmaW5lZCBp
biBmaWxlIFwiIiArIG9sZC5GaWxlLk5hbWUgKyAiXCIuIjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKGRl
c2NyaXB0b3IsIG1lc3NhZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzY3JpcHRv
cnNCeU5hbWVbZnVsbE5hbWVdID0gZGVzY3JpcHRvcjsKLSAgICAgICAgfQotCi0gICAgICAgIHBy
aXZhdGUgc3RhdGljIHJlYWRvbmx5IFJlZ2V4IFZhbGlkYXRpb25SZWdleCA9IG5ldyBSZWdleCgi
XltfQS1aYS16XVtfQS1aYS16MC05XSokIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1ld29ya1BvcnRhYmlsaXR5
LkNvbXBpbGVkUmVnZXhXaGVyZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gVmVyaWZpZXMgdGhhdCB0aGUgZGVzY3JpcHRvcidzIG5hbWUgaXMgdmFsaWQg
KGkuZS4gaXQgY29udGFpbnMKLSAgICAgICAgLy8vIG9ubHkgbGV0dGVycywgZGlnaXRzIGFuZCB1
bmRlcnNjb3JlcywgYW5kIGRvZXMgbm90IHN0YXJ0IHdpdGggYSBkaWdpdCkuCi0gICAgICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZGVzY3JpcHRvciI+PC9wYXJh
bT4KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBWYWxpZGF0ZVN5bWJvbE5hbWUoSURlc2Ny
aXB0b3IgZGVzY3JpcHRvcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
TmFtZSA9PSAiIikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRGVz
Y3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24oZGVzY3JpcHRvciwgIk1pc3NpbmcgbmFtZS4iKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghVmFsaWRhdGlvblJlZ2V4LklzTWF0Y2go
ZGVzY3JpcHRvci5OYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24oZGVzY3JpcHRvciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIiArIGRlc2Ny
aXB0b3IuTmFtZSArICJcIiBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyLiIpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0
dXJucyB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIGluIHRoZSBnaXZlbiBkZXNjcmlw
dG9yLAotICAgICAgICAvLy8gb3IgbnVsbCBpZiBpdCBjYW4ndCBiZSBmb3VuZC4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgRmllbGREZXNjcmlwdG9yIEZpbmRGaWVs
ZEJ5TnVtYmVyKE1lc3NhZ2VEZXNjcmlwdG9yIG1lc3NhZ2VEZXNjcmlwdG9yLCBpbnQgbnVtYmVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBGaWVsZERlc2NyaXB0b3IgcmV0OwotICAgICAgICAg
ICAgZmllbGRzQnlOdW1iZXIuVHJ5R2V0VmFsdWUobmV3IERlc2NyaXB0b3JJbnRQYWlyKG1lc3Nh
Z2VEZXNjcmlwdG9yLCBudW1iZXIpLCBvdXQgcmV0KTsKLSAgICAgICAgICAgIHJldHVybiByZXQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBFbnVtVmFsdWVEZXNjcmlwdG9yIEZpbmRF
bnVtVmFsdWVCeU51bWJlcihFbnVtRGVzY3JpcHRvciBlbnVtRGVzY3JpcHRvciwgaW50IG51bWJl
cikKLSAgICAgICAgewotICAgICAgICAgICAgRW51bVZhbHVlRGVzY3JpcHRvciByZXQ7Ci0gICAg
ICAgICAgICBlbnVtVmFsdWVzQnlOdW1iZXIuVHJ5R2V0VmFsdWUobmV3IERlc2NyaXB0b3JJbnRQ
YWlyKGVudW1EZXNjcmlwdG9yLCBudW1iZXIpLCBvdXQgcmV0KTsKLSAgICAgICAgICAgIHJldHVy
biByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBB
ZGRzIGEgZmllbGQgdG8gdGhlIGZpZWxkc0J5TnVtYmVyIHRhYmxlLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJEZXNjcmlwdG9yVmFsaWRhdGlv
bkV4Y2VwdGlvbiI+QSBmaWVsZCB3aXRoIHRoZSBzYW1lCi0gICAgICAgIC8vLyBjb250YWluaW5n
IHR5cGUgYW5kIG51bWJlciBhbHJlYWR5IGV4aXN0cy48L2V4Y2VwdGlvbj4KLSAgICAgICAgaW50
ZXJuYWwgdm9pZCBBZGRGaWVsZEJ5TnVtYmVyKEZpZWxkRGVzY3JpcHRvciBmaWVsZCkKLSAgICAg
ICAgewotICAgICAgICAgICAgRGVzY3JpcHRvckludFBhaXIga2V5ID0gbmV3IERlc2NyaXB0b3JJ
bnRQYWlyKGZpZWxkLkNvbnRhaW5pbmdUeXBlLCBmaWVsZC5GaWVsZE51bWJlcik7Ci0gICAgICAg
ICAgICBGaWVsZERlc2NyaXB0b3Igb2xkOwotICAgICAgICAgICAgaWYgKGZpZWxkc0J5TnVtYmVy
LlRyeUdldFZhbHVlKGtleSwgb3V0IG9sZCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKGZpZWxkLCAiRmllbGQg
bnVtYmVyICIgKyBmaWVsZC5GaWVsZE51bWJlciArCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzIGFscmVhZHkgYmVlbiB1
c2VkIGluIFwiIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZC5Db250YWluaW5nVHlwZS5GdWxsTmFtZSArCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiXCIgYnkgZmllbGQgXCIiICsgb2xkLk5hbWUgKyAiXCIuIik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBmaWVsZHNCeU51bWJlcltrZXldID0gZmllbGQ7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBZGRzIGFuIGVudW0gdmFsdWUgdG8gdGhl
IGVudW1WYWx1ZXNCeU51bWJlciB0YWJsZS4gSWYgYW4gZW51bSB2YWx1ZQotICAgICAgICAvLy8g
d2l0aCB0aGUgc2FtZSB0eXBlIGFuZCBudW1iZXIgYWxyZWFkeSBleGlzdHMsIHRoaXMgbWV0aG9k
IGRvZXMgbm90aGluZy4KLSAgICAgICAgLy8vIChUaGlzIGlzIGFsbG93ZWQ7IHRoZSBmaXJzdCB2
YWx1ZSBkZWZpbmVkIHdpdGggdGhlIG51bWJlciB0YWtlcyBwcmVjZWRlbmNlLikKLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgdm9pZCBBZGRFbnVtVmFsdWVCeU51bWJl
cihFbnVtVmFsdWVEZXNjcmlwdG9yIGVudW1WYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
RGVzY3JpcHRvckludFBhaXIga2V5ID0gbmV3IERlc2NyaXB0b3JJbnRQYWlyKGVudW1WYWx1ZS5F
bnVtRGVzY3JpcHRvciwgZW51bVZhbHVlLk51bWJlcik7Ci0gICAgICAgICAgICBpZiAoIWVudW1W
YWx1ZXNCeU51bWJlci5Db250YWluc0tleShrZXkpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGVudW1WYWx1ZXNCeU51bWJlcltrZXldID0gZW51bVZhbHVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gTG9va3Mg
dXAgYSBkZXNjcmlwdG9yIGJ5IG5hbWUsIHJlbGF0aXZlIHRvIHNvbWUgb3RoZXIgZGVzY3JpcHRv
ci4KLSAgICAgICAgLy8vIFRoZSBuYW1lIG1heSBiZSBmdWxseS1xdWFsaWZpZWQgKHdpdGggYSBs
ZWFkaW5nICcuJyksIHBhcnRpYWxseS1xdWFsaWZpZWQsCi0gICAgICAgIC8vLyBvciB1bnF1YWxp
ZmllZC4gQysrLWxpa2UgbmFtZSBsb29rdXAgc2VtYW50aWNzIGFyZSB1c2VkIHRvIHNlYXJjaCBm
b3IgdGhlCi0gICAgICAgIC8vLyBtYXRjaGluZyBkZXNjcmlwdG9yLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBUaGlzIGlzbid0IGhl
YXZpbHkgb3B0aW1pemVkLCBidXQgaXQncyBvbmx5IHVzZWQgZHVyaW5nIGNyb3NzIGxpbmtpbmcg
YW55d2F5LgotICAgICAgICAvLy8gSWYgaXQgc3RhcnRzIGJlaW5nIHVzZWQgbW9yZSB3aWRlbHks
IHdlIHNob3VsZCBsb29rIGF0IHBlcmZvcm1hbmNlIG1vcmUgY2FyZWZ1bGx5LgotICAgICAgICAv
Ly8gPC9yZW1hcmtzPgotICAgICAgICBpbnRlcm5hbCBJRGVzY3JpcHRvciBMb29rdXBTeW1ib2wo
c3RyaW5nIG5hbWUsIElEZXNjcmlwdG9yIHJlbGF0aXZlVG8pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIElEZXNjcmlwdG9yIHJlc3VsdDsKLSAgICAgICAgICAgIGlmIChuYW1lLlN0YXJ0c1dpdGgo
Ii4iKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBGdWxseS1xdWFsaWZpZWQg
bmFtZS4KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBGaW5kU3ltYm9sPElEZXNjcmlwdG9yPihu
YW1lLlN1YnN0cmluZygxKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgIm5hbWUiIGlzIGEgY29tcG91bmQgaWRl
bnRpZmllciwgd2Ugd2FudCB0byBzZWFyY2ggZm9yIHRoZQotICAgICAgICAgICAgICAgIC8vIGZp
cnN0IGNvbXBvbmVudCBvZiBpdCwgdGhlbiBzZWFyY2ggd2l0aGluIGl0IGZvciB0aGUgcmVzdC4K
LSAgICAgICAgICAgICAgICBpbnQgZmlyc3RQYXJ0TGVuZ3RoID0gbmFtZS5JbmRleE9mKCcuJyk7
Ci0gICAgICAgICAgICAgICAgc3RyaW5nIGZpcnN0UGFydCA9IGZpcnN0UGFydExlbmd0aCA9PSAt
MSA/IG5hbWUgOiBuYW1lLlN1YnN0cmluZygwLCBmaXJzdFBhcnRMZW5ndGgpOwotCi0gICAgICAg
ICAgICAgICAgLy8gV2Ugd2lsbCBzZWFyY2ggZWFjaCBwYXJlbnQgc2NvcGUgb2YgInJlbGF0aXZl
VG8iIGxvb2tpbmcgZm9yIHRoZQotICAgICAgICAgICAgICAgIC8vIHN5bWJvbC4KLSAgICAgICAg
ICAgICAgICBTdHJpbmdCdWlsZGVyIHNjb3BlVG9UcnkgPSBuZXcgU3RyaW5nQnVpbGRlcihyZWxh
dGl2ZVRvLkZ1bGxOYW1lKTsKLQotICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hvcCBvZmYgdGhlIGxhc3QgY29t
cG9uZW50IG9mIHRoZSBzY29wZS4KLQotICAgICAgICAgICAgICAgICAgICBpbnQgZG90cG9zID0g
c2NvcGVUb1RyeS5Ub1N0cmluZygpLkxhc3RJbmRleE9mKCIuIik7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChkb3Rwb3MgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IEZpbmRTeW1ib2w8SURlc2NyaXB0b3I+KG5hbWUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzY29wZVRvVHJ5Lkxlbmd0aCA9IGRvdHBvcyArIDE7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFwcGVuZCBmaXJzdFBhcnQgYW5kIHRyeSB0byBmaW5kLgotICAgICAg
ICAgICAgICAgICAgICAgICAgc2NvcGVUb1RyeS5BcHBlbmQoZmlyc3RQYXJ0KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpbmRTeW1ib2w8SURlc2NyaXB0b3I+KHNjb3BlVG9U
cnkuVG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0g
bnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZmlyc3RQYXJ0TGVuZ3RoICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBmb3VuZCB0
aGUgZmlyc3QgcGFydCBvZiB0aGUgc3ltYm9sLiAgTm93IGxvb2sgZm9yCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSB3aG9sZSB0aGluZy4gIElmIHRoaXMgZmFpbHMsIHdl
ICpkb24ndCogd2FudCB0byBrZWVwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNlYXJjaGluZyBwYXJlbnQgc2NvcGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY29wZVRvVHJ5Lkxlbmd0aCA9IGRvdHBvcyArIDE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjb3BlVG9UcnkuQXBwZW5kKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBGaW5kU3ltYm9sPElEZXNjcmlwdG9yPihzY29wZVRvVHJ5LlRv
U3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTm90IGZvdW5kLiAgUmVtb3ZlIHRoZSBuYW1lIHNvIHdlIGNh
biB0cnkgYWdhaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICBzY29wZVRvVHJ5Lkxlbmd0aCA9
IGRvdHBvczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlv
bihyZWxhdGl2ZVRvLCAiXCIiICsgbmFtZSArICJcIiBpcyBub3QgZGVmaW5lZC4iKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8v
IDxzdW1tYXJ5PgotICAgICAgICAvLy8gU3RydWN0IHVzZWQgdG8gaG9sZCB0aGUga2V5cyBmb3Ig
dGhlIGZpZWxkQnlOdW1iZXIgdGFibGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IHByaXZhdGUgc3RydWN0IERlc2NyaXB0b3JJbnRQYWlyIDogSUVxdWF0YWJsZTxEZXNjcmlwdG9y
SW50UGFpcj4KLSAgICAgICAgewotICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbnQgbnVt
YmVyOwotICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBJRGVzY3JpcHRvciBkZXNjcmlwdG9y
OwotCi0gICAgICAgICAgICBpbnRlcm5hbCBEZXNjcmlwdG9ySW50UGFpcihJRGVzY3JpcHRvciBk
ZXNjcmlwdG9yLCBpbnQgbnVtYmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRo
aXMubnVtYmVyID0gbnVtYmVyOwotICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvciA9IGRl
c2NyaXB0b3I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBib29sIEVxdWFs
cyhEZXNjcmlwdG9ySW50UGFpciBvdGhlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZGVzY3JpcHRvciA9PSBvdGhlci5kZXNjcmlwdG9yCi0gICAgICAgICAgICAgICAg
ICAgICAgICYmIG51bWJlciA9PSBvdGhlci5udW1iZXI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb2JqKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChvYmogaXMgRGVzY3JpcHRvckludFBhaXIpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXF1YWxzKChEZXNjcmlw
dG9ySW50UGFpcikgb2JqKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgb3ZlcnJpZGUg
aW50IEdldEhhc2hDb2RlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZGVzY3JpcHRvci5HZXRIYXNoQ29kZSgpKigoMSA8PCAxNikgLSAxKSArIG51bWJlcjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vRGVzY3Jp
cHRvclV0aWwuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vRGVzY3Jp
cHRvclV0aWwuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NTcwZmM0MGEyNGY5
ZTkxMDE3MjgwYjRmNjM4OTYwN2JlNmUxYTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0Rl
c2NyaXB0b3JVdGlsLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotI3JlZ2lvbiBD
b3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11
c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuT2JqZWN0TW9kZWw7Ci0KLW5hbWVzcGFjZSBHb29nbGUu
UHJvdG9idWYuUmVmbGVjdGlvbgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gSW50ZXJu
YWwgY2xhc3MgY29udGFpbmluZyB1dGlsaXR5IG1ldGhvZHMgd2hlbiB3b3JraW5nIHdpdGggZGVz
Y3JpcHRvcnMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBpbnRlcm5hbCBzdGF0aWMgY2xhc3Mg
RGVzY3JpcHRvclV0aWwKLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IEVxdWl2YWxlbnQgdG8gRnVuY1tUSW5wdXQsIGludCwgVE91dHB1dF0gYnV0IHVzYWJsZSBpbiAu
TkVUIDIuMC4gT25seSB1c2VkIHRvIGNvbnZlcnQKLSAgICAgICAgLy8vIGFycmF5cy4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgZGVsZWdhdGUgVE91dHB1dCBJbmRl
eGVkQ29udmVydGVyPFRJbnB1dCwgVE91dHB1dD4oVElucHV0IGVsZW1lbnQsIGludCBpbmRleCk7
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29udmVydHMgdGhlIGdpdmVu
IGFycmF5IGludG8gYSByZWFkLW9ubHkgbGlzdCwgYXBwbHlpbmcgdGhlIHNwZWNpZmllZCBjb252
ZXJzaW9uIHRvCi0gICAgICAgIC8vLyBlYWNoIGlucHV0IGVsZW1lbnQuCi0gICAgICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyBJTGlzdDxUT3V0cHV0PiBDb252ZXJ0
QW5kTWFrZVJlYWRPbmx5PFRJbnB1dCwgVE91dHB1dD4KLSAgICAgICAgICAgIChJTGlzdDxUSW5w
dXQ+IGlucHV0LCBJbmRleGVkQ29udmVydGVyPFRJbnB1dCwgVE91dHB1dD4gY29udmVydGVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBUT3V0cHV0W10gYXJyYXkgPSBuZXcgVE91dHB1dFtpbnB1
dC5Db3VudF07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lkxlbmd0aDsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gY29udmVydGVy
KGlucHV0W2ldLCBpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXcgUmVh
ZE9ubHlDb2xsZWN0aW9uPFRPdXRwdXQ+KGFycmF5KTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlBy
b3RvYnVmL1JlZmxlY3Rpb24vRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24uY3MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFy
cC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vRGVzY3JpcHRvclZhbGlkYXRpb25FeGNl
cHRpb24uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MzY3MWRiZDQ0NDc5Y2Y1
ZGU3OTgzMmM1ZjVlNGZiMzc3ZTM5ZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0Rlc2Ny
aXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uLmNzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBA
QAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotCi1uYW1lc3Bh
Y2UgR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
Ly8vIFRocm93biB3aGVuIGJ1aWxkaW5nIGRlc2NyaXB0b3JzIGZhaWxzIGJlY2F1c2UgdGhlIHNv
dXJjZSBEZXNjcmlwdG9yUHJvdG9zCi0gICAgLy8vIGFyZSBub3QgdmFsaWQuCi0gICAgLy8vIDwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgc2VhbGVkIGNsYXNzIERlc2NyaXB0b3JWYWxpZGF0aW9uRXhj
ZXB0aW9uIDogRXhjZXB0aW9uCi0gICAgewotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IFN0cmlu
ZyBuYW1lOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmluZyBkZXNjcmlwdGlvbjsKLQot
ICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gVGhlIGZ1bGwgbmFtZSBvZiB0aGUgZGVz
Y3JpcHRvciB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuCi0gICAgICAgIC8vLyA8L3ZhbHVlPgot
ICAgICAgICBwdWJsaWMgU3RyaW5nIFByb2JsZW1TeW1ib2xOYW1lCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdldCB7IHJldHVybiBuYW1lOyB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHZh
bHVlPgotICAgICAgICAvLy8gQSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJy
b3IuIChUaGUgTWVzc2FnZSBwcm9wZXJ0eQotICAgICAgICAvLy8gaXMgbWFkZSB1cCBvZiB0aGUg
ZGVzY3JpcHRvcidzIG5hbWUgYW5kIHRoaXMgZGVzY3JpcHRpb24uKQotICAgICAgICAvLy8gPC92
YWx1ZT4KLSAgICAgICAgcHVibGljIHN0cmluZyBEZXNjcmlwdGlvbgotICAgICAgICB7Ci0gICAg
ICAgICAgICBnZXQgeyByZXR1cm4gZGVzY3JpcHRpb247IH0KLSAgICAgICAgfQotCi0gICAgICAg
IGludGVybmFsIERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKElEZXNjcmlwdG9yIHByb2Js
ZW1EZXNjcmlwdG9yLCBzdHJpbmcgZGVzY3JpcHRpb24pIDoKLSAgICAgICAgICAgIGJhc2UocHJv
YmxlbURlc2NyaXB0b3IuRnVsbE5hbWUgKyAiOiAiICsgZGVzY3JpcHRpb24pCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBwcm9ibGVtRGVzY3JpcHRvciBtYXkgYmUgcGFydGlh
bGx5IHVuaW5pdGlhbGl6ZWQsIHNvIHdlCi0gICAgICAgICAgICAvLyBkb24ndCB3YW50IHRvIGV4
cG9zZSBpdCBkaXJlY3RseSB0byB0aGUgdXNlci4gIFNvLCB3ZSBvbmx5IHByb3ZpZGUKLSAgICAg
ICAgICAgIC8vIHRoZSBuYW1lIGFuZCB0aGUgb3JpZ2luYWwgcHJvdG8uCi0gICAgICAgICAgICBu
YW1lID0gcHJvYmxlbURlc2NyaXB0b3IuRnVsbE5hbWU7Ci0gICAgICAgICAgICB0aGlzLmRlc2Ny
aXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBEZXNj
cmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbihJRGVzY3JpcHRvciBwcm9ibGVtRGVzY3JpcHRvciwg
c3RyaW5nIGRlc2NyaXB0aW9uLCBFeGNlcHRpb24gY2F1c2UpIDoKLSAgICAgICAgICAgIGJhc2Uo
cHJvYmxlbURlc2NyaXB0b3IuRnVsbE5hbWUgKyAiOiAiICsgZGVzY3JpcHRpb24sIGNhdXNlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gcHJvYmxlbURlc2NyaXB0b3IuRnVsbE5hbWU7
Ci0gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgICAgIH0K
LSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAv
c3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0VudW1EZXNjcmlwdG9yLmNzIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAv
c3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0VudW1EZXNjcmlwdG9yLmNzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzMyYzkzYTA2NTlhNTM4MGU5ZmJlZTdjNDg4NzhjMDFh
M2RlZmVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3No
YXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9FbnVtRGVzY3JpcHRvci5jcworKysg
L2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5k
IGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgot
Ci11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLQotbmFt
ZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1tYXJ5Pgot
ICAgIC8vLyBEZXNjcmlwdG9yIGZvciBhbiBlbnVtIHR5cGUgaW4gYSAucHJvdG8gZmlsZS4KLSAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgRW51bURlc2NyaXB0b3Ig
OiBEZXNjcmlwdG9yQmFzZQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBFbnVtRGVz
Y3JpcHRvclByb3RvIHByb3RvOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IE1lc3NhZ2VEZXNj
cmlwdG9yIGNvbnRhaW5pbmdUeXBlOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IElMaXN0PEVu
dW1WYWx1ZURlc2NyaXB0b3I+IHZhbHVlczsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBUeXBl
IGNsclR5cGU7Ci0KLSAgICAgICAgaW50ZXJuYWwgRW51bURlc2NyaXB0b3IoRW51bURlc2NyaXB0
b3JQcm90byBwcm90bywgRmlsZURlc2NyaXB0b3IgZmlsZSwgTWVzc2FnZURlc2NyaXB0b3IgcGFy
ZW50LCBpbnQgaW5kZXgsIFR5cGUgY2xyVHlwZSkKLSAgICAgICAgICAgIDogYmFzZShmaWxlLCBm
aWxlLkNvbXB1dGVGdWxsTmFtZShwYXJlbnQsIHByb3RvLk5hbWUpLCBpbmRleCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhpcy5wcm90byA9IHByb3RvOwotICAgICAgICAgICAgdGhpcy5jbHJU
eXBlID0gY2xyVHlwZTsKLSAgICAgICAgICAgIGNvbnRhaW5pbmdUeXBlID0gcGFyZW50OwotCi0g
ICAgICAgICAgICBpZiAocHJvdG8uVmFsdWUuQ291bnQgPT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBXZSBjYW5ub3QgYWxsb3cgZW51bXMgd2l0aCBubyB2YWx1ZXMgYmVj
YXVzZSB0aGlzIHdvdWxkIG1lYW4gdGhlcmUKLSAgICAgICAgICAgICAgICAvLyB3b3VsZCBiZSBu
byB2YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBmaWVsZHMgb2YgdGhpcyB0eXBlLgotICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLCAiRW51
bXMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSB2YWx1ZS4iKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdmFsdWVzID0gRGVzY3JpcHRvclV0aWwuQ29udmVydEFuZE1ha2VSZWFkT25s
eShwcm90by5WYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHZhbHVlLCBpKSA9PiBuZXcgRW51bVZhbHVlRGVzY3JpcHRvcih2
YWx1ZSwgZmlsZSwgdGhpcywgaSkpOwotCi0gICAgICAgICAgICBGaWxlLkRlc2NyaXB0b3JQb29s
LkFkZFN5bWJvbCh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludGVybmFsIEVudW1EZXNj
cmlwdG9yUHJvdG8gUHJvdG8geyBnZXQgeyByZXR1cm4gcHJvdG87IH0gfQotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFRoZSBicmllZiBuYW1lIG9mIHRoZSBkZXNjcmlwdG9y
J3MgdGFyZ2V0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgb3ZlcnJp
ZGUgc3RyaW5nIE5hbWUgeyBnZXQgeyByZXR1cm4gcHJvdG8uTmFtZTsgfSB9Ci0KLSAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIENMUiB0eXBlIGZvciB0aGlzIGVudW0uIEZv
ciBnZW5lcmF0ZWQgY29kZSwgdGhpcyB3aWxsIGJlIGEgQ0xSIGVudW0gdHlwZS4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFR5cGUgQ2xyVHlwZSB7IGdldCB7IHJldHVy
biBjbHJUeXBlOyB9IH0KLQotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gSWYgdGhp
cyBpcyBhIG5lc3RlZCB0eXBlLCBnZXQgdGhlIG91dGVyIGRlc2NyaXB0b3IsIG90aGVyd2lzZSBu
dWxsLgotICAgICAgICAvLy8gPC92YWx1ZT4KLSAgICAgICAgcHVibGljIE1lc3NhZ2VEZXNjcmlw
dG9yIENvbnRhaW5pbmdUeXBlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdldCB7IHJldHVybiBj
b250YWluaW5nVHlwZTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDx2YWx1ZT4KLSAgICAg
ICAgLy8vIEFuIHVubW9kaWZpYWJsZSBsaXN0IG9mIGRlZmluZWQgdmFsdWUgZGVzY3JpcHRvcnMg
Zm9yIHRoaXMgZW51bS4KLSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBJTGlz
dDxFbnVtVmFsdWVEZXNjcmlwdG9yPiBWYWx1ZXMKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0
IHsgcmV0dXJuIHZhbHVlczsgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gRmluZHMgYW4gZW51bSB2YWx1ZSBieSBudW1iZXIuIElmIG11bHRpcGxlIGVu
dW0gdmFsdWVzIGhhdmUgdGhlCi0gICAgICAgIC8vLyBzYW1lIG51bWJlciwgdGhpcyByZXR1cm5z
IHRoZSBmaXJzdCBkZWZpbmVkIHZhbHVlIHdpdGggdGhhdCBudW1iZXIuCi0gICAgICAgIC8vLyBJ
ZiB0aGVyZSBpcyBubyB2YWx1ZSBmb3IgdGhlIGdpdmVuIG51bWJlciwgdGhpcyByZXR1cm5zIDxj
Pm51bGw8L2M+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgRW51bVZh
bHVlRGVzY3JpcHRvciBGaW5kVmFsdWVCeU51bWJlcihpbnQgbnVtYmVyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gRmlsZS5EZXNjcmlwdG9yUG9vbC5GaW5kRW51bVZhbHVlQnlOdW1i
ZXIodGhpcywgbnVtYmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgLy8vIEZpbmRzIGFuIGVudW0gdmFsdWUgYnkgbmFtZS4KLSAgICAgICAgLy8vIDwvc3Vt
bWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJuYW1lIj5UaGUgdW5xdWFsaWZpZWQgbmFt
ZSBvZiB0aGUgdmFsdWUgKGUuZy4gIkZPTyIpLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJu
cz5UaGUgdmFsdWUncyBkZXNjcmlwdG9yLCBvciBudWxsIGlmIG5vdCBmb3VuZC48L3JldHVybnM+
Ci0gICAgICAgIHB1YmxpYyBFbnVtVmFsdWVEZXNjcmlwdG9yIEZpbmRWYWx1ZUJ5TmFtZShzdHJp
bmcgbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZpbGUuRGVzY3JpcHRvclBv
b2wuRmluZFN5bWJvbDxFbnVtVmFsdWVEZXNjcmlwdG9yPihGdWxsTmFtZSArICIuIiArIG5hbWUp
OwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9FbnVtVmFsdWVEZXNj
cmlwdG9yLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0VudW1WYWx1
ZURlc2NyaXB0b3IuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMTJjZTk2MTg1
NGFlNDA2NjYxOTZjYmNjNzhiMGZmMmZjYjAxNzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9u
L0VudW1WYWx1ZURlc2NyaXB0b3IuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0j
cmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIERlc2NyaXB0b3IgZm9yIGEg
c2luZ2xlIGVudW0gdmFsdWUgd2l0aGluIGFuIGVudW0gaW4gYSAucHJvdG8gZmlsZS4KLSAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgRW51bVZhbHVlRGVzY3JpcHRv
ciA6IERlc2NyaXB0b3JCYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRW51bURlc2NyaXB0b3IgZW51
bURlc2NyaXB0b3I7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRW51bVZhbHVlRGVzY3JpcHRv
clByb3RvIHByb3RvOwotCi0gICAgICAgIGludGVybmFsIEVudW1WYWx1ZURlc2NyaXB0b3IoRW51
bVZhbHVlRGVzY3JpcHRvclByb3RvIHByb3RvLCBGaWxlRGVzY3JpcHRvciBmaWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1EZXNjcmlwdG9yIHBhcmVudCwgaW50
IGluZGV4KQotICAgICAgICAgICAgOiBiYXNlKGZpbGUsIHBhcmVudC5GdWxsTmFtZSArICIuIiAr
IHByb3RvLk5hbWUsIGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnByb3RvID0g
cHJvdG87Ci0gICAgICAgICAgICBlbnVtRGVzY3JpcHRvciA9IHBhcmVudDsKLSAgICAgICAgICAg
IGZpbGUuRGVzY3JpcHRvclBvb2wuQWRkU3ltYm9sKHRoaXMpOwotICAgICAgICAgICAgZmlsZS5E
ZXNjcmlwdG9yUG9vbC5BZGRFbnVtVmFsdWVCeU51bWJlcih0aGlzKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGludGVybmFsIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byBQcm90byB7IGdldCB7IHJl
dHVybiBwcm90bzsgfSB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0
dXJucyB0aGUgbmFtZSBvZiB0aGUgZW51bSB2YWx1ZSBkZXNjcmliZWQgYnkgdGhpcyBvYmplY3Qu
Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcg
TmFtZSB7IGdldCB7IHJldHVybiBwcm90by5OYW1lOyB9IH0KLQotICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
ZW51bSB2YWx1ZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGludCBO
dW1iZXIgeyBnZXQgeyByZXR1cm4gUHJvdG8uTnVtYmVyOyB9IH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRoZSBlbnVtIGRlc2NyaXB0b3IgdGhhdCB0aGlz
IHZhbHVlIGlzIHBhcnQgb2YuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1Ymxp
YyBFbnVtRGVzY3JpcHRvciBFbnVtRGVzY3JpcHRvciB7IGdldCB7IHJldHVybiBlbnVtRGVzY3Jp
cHRvcjsgfSB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9GaWVsZEFjY2Vzc29yQmFz
ZS5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9GaWVsZEFjY2Vzc29y
QmFzZS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjZTUwNTE4ZDhlOTk5NDUy
NDkzZGU2YmQ1ZWZhZTQ4NzFiYmRkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vRmllbGRB
Y2Nlc3NvckJhc2UuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi3vu78jcmVnaW9u
IENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uUmVmbGVj
dGlvbjsKLXVzaW5nIEdvb2dsZS5Qcm90b2J1Zi5Db21wYXRpYmlsaXR5OwotCi1uYW1lc3BhY2Ug
R29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8v
IEJhc2UgY2xhc3MgZm9yIGZpZWxkIGFjY2Vzc29ycy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAg
IGludGVybmFsIGFic3RyYWN0IGNsYXNzIEZpZWxkQWNjZXNzb3JCYXNlIDogSUZpZWxkQWNjZXNz
b3IKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRnVuYzxJTWVzc2FnZSwgb2JqZWN0
PiBnZXRWYWx1ZURlbGVnYXRlOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEZpZWxkRGVzY3Jp
cHRvciBkZXNjcmlwdG9yOwotCi0gICAgICAgIGludGVybmFsIEZpZWxkQWNjZXNzb3JCYXNlKFBy
b3BlcnR5SW5mbyBwcm9wZXJ0eSwgRmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gICAgICAgICAg
ICBnZXRWYWx1ZURlbGVnYXRlID0gUmVmbGVjdGlvblV0aWwuQ3JlYXRlRnVuY0lNZXNzYWdlT2Jq
ZWN0KHByb3BlcnR5LkdldEdldE1ldGhvZCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1Ymxp
YyBGaWVsZERlc2NyaXB0b3IgRGVzY3JpcHRvciB7IGdldCB7IHJldHVybiBkZXNjcmlwdG9yOyB9
IH0KLQotICAgICAgICBwdWJsaWMgb2JqZWN0IEdldFZhbHVlKElNZXNzYWdlIG1lc3NhZ2UpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZURlbGVnYXRlKG1lc3NhZ2UpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgQ2xlYXIoSU1lc3NhZ2Ug
bWVzc2FnZSk7Ci0gICAgICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIFNldFZhbHVlKElNZXNzYWdl
IG1lc3NhZ2UsIG9iamVjdCB2YWx1ZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3Jj
L0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0ZpZWxkRGVzY3JpcHRvci5jcyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3Ny
Yy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9GaWVsZERlc2NyaXB0b3IuY3MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNmY2ZWUwNWZmMGIzYjZkMzY3MmIxNmY1MzFjMjZjYjU5
MmQ1OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hh
cnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0ZpZWxkRGVzY3JpcHRvci5jcworKysg
L2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5k
IGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgot
Ci11c2luZyBHb29nbGUuUHJvdG9idWYuQ29tcGF0aWJpbGl0eTsKLXVzaW5nIFN5c3RlbTsKLQot
bmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1tYXJ5
PgotICAgIC8vLyBEZXNjcmlwdG9yIGZvciBhIGZpZWxkIG9yIGV4dGVuc2lvbiB3aXRoaW4gYSBt
ZXNzYWdlIGluIGEgLnByb3RvIGZpbGUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
c2VhbGVkIGNsYXNzIEZpZWxkRGVzY3JpcHRvciA6IERlc2NyaXB0b3JCYXNlLCBJQ29tcGFyYWJs
ZTxGaWVsZERlc2NyaXB0b3I+Ci0gICAgewotICAgICAgICBwcml2YXRlIEVudW1EZXNjcmlwdG9y
IGVudW1UeXBlOwotICAgICAgICBwcml2YXRlIE1lc3NhZ2VEZXNjcmlwdG9yIG1lc3NhZ2VUeXBl
OwotICAgICAgICBwcml2YXRlIEZpZWxkVHlwZSBmaWVsZFR5cGU7Ci0gICAgICAgIHByaXZhdGUg
cmVhZG9ubHkgc3RyaW5nIHByb3BlcnR5TmFtZTsgLy8gQW5ub3lpbmdseSwgbmVlZGVkIGluIENy
b3NzbGluay4KLSAgICAgICAgcHJpdmF0ZSBJRmllbGRBY2Nlc3NvciBhY2Nlc3NvcjsKLQotICAg
ICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHZXQgdGhlIGZpZWxkJ3MgY29udGFpbmlu
ZyBtZXNzYWdlIHR5cGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBN
ZXNzYWdlRGVzY3JpcHRvciBDb250YWluaW5nVHlwZSB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgdGhlIG9uZW9mIGNvbnRhaW5pbmcgdGhpcyBm
aWVsZCwgb3IgPGM+bnVsbDwvYz4gaWYgaXQgaXMgbm90IHBhcnQgb2YgYSBvbmVvZi4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIE9uZW9mRGVzY3JpcHRvciBDb250YWlu
aW5nT25lb2YgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBU
aGUgZWZmZWN0aXZlIEpTT04gbmFtZSBmb3IgdGhpcyBmaWVsZC4gVGhpcyBpcyB1c3VhbGx5IHRo
ZSBsb3dlci1jYW1lbC1jYXNlZCBmb3JtIG9mIHRoZSBmaWVsZCBuYW1lLAotICAgICAgICAvLy8g
YnV0IGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSA8Yz5qc29uX25hbWU8L2M+IG9wdGlvbiBp
biB0aGUgLnByb3RvIGZpbGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1Ymxp
YyBzdHJpbmcgSnNvbk5hbWUgeyBnZXQ7IH0KLQotICAgICAgICBpbnRlcm5hbCBGaWVsZERlc2Ny
aXB0b3JQcm90byBQcm90byB7IGdldDsgfQotCi0gICAgICAgIGludGVybmFsIEZpZWxkRGVzY3Jp
cHRvcihGaWVsZERlc2NyaXB0b3JQcm90byBwcm90bywgRmlsZURlc2NyaXB0b3IgZmlsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VEZXNjcmlwdG9yIHBhcmVudCwg
aW50IGluZGV4LCBzdHJpbmcgcHJvcGVydHlOYW1lKQotICAgICAgICAgICAgOiBiYXNlKGZpbGUs
IGZpbGUuQ29tcHV0ZUZ1bGxOYW1lKHBhcmVudCwgcHJvdG8uTmFtZSksIGluZGV4KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBQcm90byA9IHByb3RvOwotICAgICAgICAgICAgaWYgKHByb3RvLlR5
cGUgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBHZXRG
aWVsZFR5cGVGcm9tUHJvdG9UeXBlKHByb3RvLlR5cGUpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoRmllbGROdW1iZXIgPD0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24odGhpcywgIkZpZWxk
IG51bWJlcnMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2Vycy4iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIENvbnRhaW5pbmdUeXBlID0gcGFyZW50OwotICAgICAgICAgICAgLy8gT25lb2ZJ
bmRleCAiZGVmYXVsdHMiIHRvIC0xIGR1ZSB0byBhIGhhY2sgaW4gRmllbGREZXNjcmlwdG9yLk9u
Q29uc3RydWN0aW9uLgotICAgICAgICAgICAgaWYgKHByb3RvLk9uZW9mSW5kZXggIT0gLTEpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHByb3RvLk9uZW9mSW5kZXggPCAwIHx8
IHByb3RvLk9uZW9mSW5kZXggPj0gcGFyZW50LlByb3RvLk9uZW9mRGVjbC5Db3VudCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9yVmFs
aWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgJCJGaWVsZERl
c2NyaXB0b3JQcm90by5vbmVvZl9pbmRleCBpcyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUge3BhcmVu
dC5OYW1lfSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBDb250YWluaW5n
T25lb2YgPSBwYXJlbnQuT25lb2ZzW3Byb3RvLk9uZW9mSW5kZXhdOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmaWxlLkRlc2NyaXB0b3JQb29sLkFkZFN5bWJvbCh0aGlzKTsKLSAgICAg
ICAgICAgIC8vIFdlIGNhbid0IGNyZWF0ZSB0aGUgYWNjZXNzb3IgdW50aWwgd2UndmUgY3Jvc3Mt
bGlua2VkLCB1bmZvcnR1bmF0ZWx5LCBhcyB3ZQotICAgICAgICAgICAgLy8gbWF5IG5vdCBrbm93
IHdoZXRoZXIgdGhlIHR5cGUgb2YgdGhlIGZpZWxkIGlzIGEgbWFwIG9yIG5vdC4gUmVtZW1iZXIg
dGhlIHByb3BlcnR5IG5hbWUKLSAgICAgICAgICAgIC8vIGZvciBsYXRlci4KLSAgICAgICAgICAg
IC8vIFdlIGNvdWxkIHRydXN0IHRoZSBnZW5lcmF0ZWQgY29kZSBhbmQgY2hlY2sgd2hldGhlciB0
aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgaXMKLSAgICAgICAgICAgIC8vIGEgTWFwRmllbGQsIGJ1
dCB0aGF0IGZlZWxzIGEgdGFkIG5hc3R5LgotICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eU5hbWUg
PSBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICBKc29uTmFtZSA9ICBQcm90by5Kc29uTmFtZSA9
PSAiIiA/IEpzb25Gb3JtYXR0ZXIuVG9DYW1lbENhc2UoUHJvdG8uTmFtZSkgOiBQcm90by5Kc29u
TmFtZTsKLSAgICAgICAgfQotICAgIAotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAg
Ly8vIFRoZSBicmllZiBuYW1lIG9mIHRoZSBkZXNjcmlwdG9yJ3MgdGFyZ2V0LgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIE5hbWUgPT4gUHJv
dG8uTmFtZTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRo
ZSBhY2Nlc3NvciBmb3IgdGhpcyBmaWVsZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gPHBhcmE+Ci0gICAgICAgIC8vLyBXaGlsZSBh
IDxzZWUgY3JlZj0iRmllbGREZXNjcmlwdG9yIi8+IGRlc2NyaWJlcyB0aGUgZmllbGQsIGl0IGRv
ZXMgbm90IHByb3ZpZGUKLSAgICAgICAgLy8vIGFueSB3YXkgb2Ygb2J0YWluaW5nIG9yIGNoYW5n
aW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aGluIGEgc3BlY2lmaWMgbWVzc2FnZTsKLSAg
ICAgICAgLy8vIHRoYXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBhY2Nlc3Nvci4KLSAg
ICAgICAgLy8vIDwvcGFyYT4KLSAgICAgICAgLy8vIDxwYXJhPgotICAgICAgICAvLy8gVGhlIHZh
bHVlIHJldHVybmVkIGJ5IHRoaXMgcHJvcGVydHkgd2lsbCBiZSBub24tbnVsbCBmb3IgYWxsIHJl
Z3VsYXIgZmllbGRzLiBIb3dldmVyLAotICAgICAgICAvLy8gaWYgYSBtZXNzYWdlIGNvbnRhaW5p
bmcgYSBtYXAgZmllbGQgaXMgaW50cm9zcGVjdGVkLCB0aGUgbGlzdCBvZiBuZXN0ZWQgbWVzc2Fn
ZXMgd2lsbCBpbmNsdWRlCi0gICAgICAgIC8vLyBhbiBhdXRvLWdlbmVyYXRlZCBuZXN0ZWQga2V5
L3ZhbHVlIHBhaXIgbWVzc2FnZSBmb3IgdGhlIGZpZWxkLiBUaGlzIGlzIG5vdCByZXByZXNlbnRl
ZCBpbiBhbnkKLSAgICAgICAgLy8vIGdlbmVyYXRlZCB0eXBlLCBhbmQgdGhlIHZhbHVlIG9mIHRo
ZSBtYXAgZmllbGQgaXRzZWxmIGlzIHJlcHJlc2VudGVkIGJ5IGEgZGljdGlvbmFyeSBpbiB0aGUK
LSAgICAgICAgLy8vIHJlZmxlY3Rpb24gQVBJLiBUaGVyZSBhcmUgbmV2ZXIgaW5zdGFuY2VzIG9m
IHRob3NlICJoaWRkZW4iIG1lc3NhZ2VzLCBzbyBubyBhY2Nlc3NvciBpcyBwcm92aWRlZAotICAg
ICAgICAvLy8gYW5kIHRoaXMgcHJvcGVydHkgd2lsbCByZXR1cm4gbnVsbC4KLSAgICAgICAgLy8v
IDwvcGFyYT4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgcHVibGljIElGaWVsZEFj
Y2Vzc29yIEFjY2Vzc29yID0+IGFjY2Vzc29yOwotICAgICAgICAKLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gTWFwcyBhIGZpZWxkIHR5cGUgYXMgaW5jbHVkZWQgaW4gdGhlIC5w
cm90byBmaWxlIHRvIGEgRmllbGRUeXBlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAg
ICBwcml2YXRlIHN0YXRpYyBGaWVsZFR5cGUgR2V0RmllbGRUeXBlRnJvbVByb3RvVHlwZShGaWVs
ZERlc2NyaXB0b3JQcm90by5UeXBlcy5UeXBlIHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvclByb3RvLlR5cGVzLlR5cGUuRG91YmxlOgotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gRmllbGRUeXBlLkRvdWJsZTsKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvclByb3RvLlR5cGVzLlR5cGUuRmxvYXQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBG
aWVsZFR5cGUuRmxvYXQ7Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90
by5UeXBlcy5UeXBlLkludDY0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRUeXBl
LkludDY0OwotICAgICAgICAgICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZXMu
VHlwZS5VaW50NjQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGUuVUludDY0
OwotICAgICAgICAgICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZXMuVHlwZS5J
bnQzMjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZS5JbnQzMjsKLSAgICAg
ICAgICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGVzLlR5cGUuRml4ZWQ2NDoK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZS5GaXhlZDY0OwotICAgICAgICAg
ICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZXMuVHlwZS5GaXhlZDMyOgotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlLkZpeGVkMzI7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90by5UeXBlcy5UeXBlLkJvb2w6Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBGaWVsZFR5cGUuQm9vbDsKLSAgICAgICAgICAgICAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvclByb3RvLlR5cGVzLlR5cGUuU3RyaW5nOgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRmllbGRUeXBlLlN0cmluZzsKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvclByb3RvLlR5cGVzLlR5cGUuR3JvdXA6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBGaWVsZFR5cGUuR3JvdXA7Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQ
cm90by5UeXBlcy5UeXBlLk1lc3NhZ2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVs
ZFR5cGUuTWVzc2FnZTsKLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3Rv
LlR5cGVzLlR5cGUuQnl0ZXM6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGUu
Qnl0ZXM7Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90by5UeXBlcy5U
eXBlLlVpbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZS5VSW50MzI7
Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90by5UeXBlcy5UeXBlLkVu
dW06Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGUuRW51bTsKLSAgICAgICAg
ICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGVzLlR5cGUuU2ZpeGVkMzI6Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGUuU0ZpeGVkMzI7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90by5UeXBlcy5UeXBlLlNmaXhlZDY0OgotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlLlNGaXhlZDY0OwotICAgICAgICAgICAg
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZXMuVHlwZS5TaW50MzI6Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGUuU0ludDMyOwotICAgICAgICAgICAgICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZXMuVHlwZS5TaW50NjQ6Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBGaWVsZFR5cGUuU0ludDY0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxp
ZCB0eXBlIHNwZWNpZmllZCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyA8Yz50cnVlPC9jPiBpZiB0aGlzIGZp
ZWxkIGlzIGEgcmVwZWF0ZWQgZmllbGQ7IDxjPmZhbHNlPC9jPiBvdGhlcndpc2UuCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBib29sIElzUmVwZWF0ZWQgPT4gUHJvdG8u
TGFiZWwgPT0gRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZXMuTGFiZWwuUmVwZWF0ZWQ7Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyA8Yz50cnVlPC9jPiBpZiB0
aGlzIGZpZWxkIGlzIGEgbWFwIGZpZWxkOyA8Yz5mYWxzZTwvYz4gb3RoZXJ3aXNlLgotICAgICAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgYm9vbCBJc01hcCA9PiBmaWVsZFR5cGUg
PT0gRmllbGRUeXBlLk1lc3NhZ2UgJiYgbWVzc2FnZVR5cGUuUHJvdG8uT3B0aW9ucyAhPSBudWxs
ICYmIG1lc3NhZ2VUeXBlLlByb3RvLk9wdGlvbnMuTWFwRW50cnk7Ci0KLSAgICAgICAgLy8vIDxz
dW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyA8Yz50cnVlPC9jPiBpZiB0aGlzIGZpZWxkIGlz
IGEgcGFja2VkLCByZXBlYXRlZCBmaWVsZDsgPGM+ZmFsc2U8L2M+IG90aGVyd2lzZS4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGJvb2wgSXNQYWNrZWQgPT4gCi0gICAg
ICAgICAgICAvLyBOb3RlIHRoZSB8fCByYXRoZXIgdGhhbiAmJiBoZXJlIC0gd2UncmUgZWZmZWN0
aXZlbHkgZGVmYXVsdGluZyB0byBwYWNrZWQsIGJlY2F1c2UgdGhhdCAqaXMqCi0gICAgICAgICAg
ICAvLyB0aGUgZGVmYXVsdCBpbiBwcm90bzMsIHdoaWNoIGlzIGFsbCB3ZSBzdXBwb3J0LiBXZSBt
YXkgZ2l2ZSB0aGUgd3JvbmcgcmVzdWx0IGZvciB0aGUgcHJvdG9zCi0gICAgICAgICAgICAvLyB3
aXRoaW4gZGVzY3JpcHRvci5wcm90bywgYnV0IHRoYXQncyBva2F5LCBhcyB0aGV5J3JlIG5ldmVy
IGV4cG9zZWQgYW5kIHdlIGRvbid0IHVzZSBJc1BhY2tlZAotICAgICAgICAgICAgLy8gd2l0aGlu
IHRoZSBydW50aW1lLgotICAgICAgICAgICAgUHJvdG8uT3B0aW9ucyA9PSBudWxsIHx8IFByb3Rv
Lk9wdGlvbnMuUGFja2VkOwotICAgICAgICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAg
ICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgZmllbGQuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIHB1YmxpYyBGaWVsZFR5cGUgRmllbGRUeXBlID0+IGZpZWxkVHlwZTsKLQot
ICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRoZSBmaWVsZCBudW1i
ZXIgZGVjbGFyZWQgaW4gdGhlIHByb3RvIGZpbGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgICAgIHB1YmxpYyBpbnQgRmllbGROdW1iZXIgPT4gUHJvdG8uTnVtYmVyOwotCi0gICAgICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbXBhcmVzIHRoaXMgZGVzY3JpcHRvciB3aXRo
IGFub3RoZXIgb25lLCBvcmRlcmluZyBpbiAiY2Fub25pY2FsIiBvcmRlcgotICAgICAgICAvLy8g
d2hpY2ggc2ltcGx5IG1lYW5zIGFzY2VuZGluZyBvcmRlciBieSBmaWVsZCBudW1iZXIuIDxwYXJh
bXJlZiBuYW1lPSJvdGhlciIvPgotICAgICAgICAvLy8gbXVzdCBiZSBhIGZpZWxkIG9mIHRoZSBz
YW1lIHR5cGUsIGkuZS4gdGhlIDxzZWUgY3JlZj0iQ29udGFpbmluZ1R5cGUiLz4gb2YKLSAgICAg
ICAgLy8vIGJvdGggZmllbGRzIG11c3QgYmUgdGhlIHNhbWUuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIHB1YmxpYyBpbnQgQ29tcGFyZVRvKEZpZWxkRGVzY3JpcHRvciBvdGhlcikK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG90aGVyLkNvbnRhaW5pbmdUeXBlICE9IENvbnRh
aW5pbmdUeXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1
bWVudEV4Y2VwdGlvbigiRmllbGREZXNjcmlwdG9ycyBjYW4gb25seSBiZSBjb21wYXJlZCB0byBv
dGhlciBGaWVsZERlc2NyaXB0b3JzICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZm9yIGZpZWxkcyBvZiB0aGUgc2FtZSBtZXNzYWdlIHR5cGUuIik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gRmllbGROdW1iZXIgLSBvdGhlci5GaWVs
ZE51bWJlcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IEZvciBlbnVtIGZpZWxkcywgcmV0dXJucyB0aGUgZmllbGQncyB0eXBlLgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgRW51bURlc2NyaXB0b3IgRW51bVR5cGUKLSAgICAg
ICAgewotICAgICAgICAgICAgZ2V0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KGZpZWxkVHlwZSAhPSBGaWVsZFR5cGUuRW51bSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJFbnVtVHlw
ZSBpcyBvbmx5IHZhbGlkIGZvciBlbnVtIGZpZWxkcy4iKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVudW1UeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gRm9yIGVtYmVkZGVkIG1lc3Nh
Z2UgYW5kIGdyb3VwIGZpZWxkcywgcmV0dXJucyB0aGUgZmllbGQncyB0eXBlLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgTWVzc2FnZURlc2NyaXB0b3IgTWVzc2FnZVR5
cGUKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGUuTWVzc2FnZSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0
aW9uKCJNZXNzYWdlVHlwZSBpcyBvbmx5IHZhbGlkIGZvciBtZXNzYWdlIGZpZWxkcy4iKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VUeXBlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAv
Ly8gTG9vayB1cCBhbmQgY3Jvc3MtbGluayBhbGwgZmllbGQgdHlwZXMgZXRjLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICBpbnRlcm5hbCB2b2lkIENyb3NzTGluaygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChQcm90by5UeXBlTmFtZSAhPSAiIikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBJRGVzY3JpcHRvciB0eXBlRGVzY3JpcHRvciA9Ci0gICAgICAgICAg
ICAgICAgICAgIEZpbGUuRGVzY3JpcHRvclBvb2wuTG9va3VwU3ltYm9sKFByb3RvLlR5cGVOYW1l
LCB0aGlzKTsKLQotICAgICAgICAgICAgICAgIGlmIChQcm90by5UeXBlICE9IDApCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBDaG9vc2UgZmllbGQgdHlwZSBiYXNl
ZCBvbiBzeW1ib2wuCi0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlRGVzY3JpcHRvciBpcyBN
ZXNzYWdlRGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZmllbGRUeXBlID0gRmllbGRUeXBlLk1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZURlc2NyaXB0b3IgaXMgRW51
bURlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZpZWxkVHlwZSA9IEZpZWxkVHlwZS5FbnVtOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKHRo
aXMsICQiXCJ7UHJvdG8uVHlwZU5hbWV9XCIgaXMgbm90IGEgdHlwZS4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChmaWVs
ZFR5cGUgPT0gRmllbGRUeXBlLk1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoISh0eXBlRGVzY3JpcHRvciBpcyBNZXNzYWdlRGVzY3JpcHRvcikpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBE
ZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLCAkIlwie1Byb3RvLlR5cGVOYW1lfVwi
IGlzIG5vdCBhIG1lc3NhZ2UgdHlwZS4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlVHlwZSA9IChNZXNzYWdlRGVzY3JpcHRvcikgdHlwZURlc2Ny
aXB0b3I7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKFByb3RvLkRlZmF1bHRWYWx1ZSAhPSAi
IikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKHRoaXMsICJNZXNzYWdlcyBjYW4ndCBo
YXZlIGRlZmF1bHQgdmFsdWVzLiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5cGUu
RW51bSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKHR5cGVE
ZXNjcmlwdG9yIGlzIEVudW1EZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0
aW9uKHRoaXMsICQiXCJ7UHJvdG8uVHlwZU5hbWV9XCIgaXMgbm90IGFuIGVudW0gdHlwZS4iKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbnVtVHlwZSA9IChF
bnVtRGVzY3JpcHRvcikgdHlwZURlc2NyaXB0b3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLCAiRmllbGQgd2l0aCBw
cmltaXRpdmUgdHlwZSBoYXMgdHlwZV9uYW1lLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZS5NZXNzYWdlIHx8IGZpZWxkVHlwZSA9PSBGaWVs
ZFR5cGUuRW51bSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLCAiRmllbGQgd2l0aCBtZXNz
YWdlIG9yIGVudW0gdHlwZSBtaXNzaW5nIHR5cGVfbmFtZS4iKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE5vdGU6IG5vIGF0dGVtcHQgdG8gcGVy
Zm9ybSBhbnkgZGVmYXVsdCB2YWx1ZSBwYXJzaW5nCi0KLSAgICAgICAgICAgIEZpbGUuRGVzY3Jp
cHRvclBvb2wuQWRkRmllbGRCeU51bWJlcih0aGlzKTsKLQotICAgICAgICAgICAgaWYgKENvbnRh
aW5pbmdUeXBlICE9IG51bGwgJiYgQ29udGFpbmluZ1R5cGUuUHJvdG8uT3B0aW9ucyAhPSBudWxs
ICYmIENvbnRhaW5pbmdUeXBlLlByb3RvLk9wdGlvbnMuTWVzc2FnZVNldFdpcmVGb3JtYXQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0
aW9uRXhjZXB0aW9uKHRoaXMsICJNZXNzYWdlU2V0IGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYWNjZXNzb3IgPSBDcmVhdGVBY2Nlc3Nvcigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBJRmllbGRBY2Nlc3NvciBDcmVhdGVBY2Nl
c3NvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIGdpdmVuIG5vIHByb3Bl
cnR5IG5hbWUsIHRoYXQncyBiZWNhdXNlIHdlIHJlYWxseSBkb24ndCB3YW50IGFuIGFjY2Vzc29y
LgotICAgICAgICAgICAgLy8gKEF0IHRoZSBtb21lbnQsIHRoYXQgbWVhbnMgaXQncyBhIG1hcCBl
bnRyeSBtZXNzYWdlLi4uKQotICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBudWxsKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gQ29udGFpbmluZ1R5cGUuQ2xyVHlwZS5HZXRQ
cm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IG51bGwp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxp
ZGF0aW9uRXhjZXB0aW9uKHRoaXMsICQiUHJvcGVydHkge3Byb3BlcnR5TmFtZX0gbm90IGZvdW5k
IGluIHtDb250YWluaW5nVHlwZS5DbHJUeXBlfSIpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIElzTWFwID8gbmV3IE1hcEZpZWxkQWNjZXNzb3IocHJvcGVydHksIHRoaXMpCi0g
ICAgICAgICAgICAgICAgOiBJc1JlcGVhdGVkID8gbmV3IFJlcGVhdGVkRmllbGRBY2Nlc3Nvcihw
cm9wZXJ0eSwgdGhpcykKLSAgICAgICAgICAgICAgICA6IChJRmllbGRBY2Nlc3NvcikgbmV3IFNp
bmdsZUZpZWxkQWNjZXNzb3IocHJvcGVydHksIHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYvUmVmbGVjdGlvbi9GaWVsZFR5cGUuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmL1JlZmxlY3Rpb24vRmllbGRUeXBlLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxNjU4ZTM0Y2QxZTE2OTdkNjUwZWU5MjU0MTQ5ZjYxMjFmNDBiYzQ3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9i
dWYvUmVmbGVjdGlvbi9GaWVsZFR5cGUuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBA
QAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1
Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBFbnVtZXJhdGlvbiBv
ZiBhbGwgdGhlIHBvc3NpYmxlIGZpZWxkIHR5cGVzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
cHVibGljIGVudW0gRmllbGRUeXBlCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
ICAgIC8vLyBUaGUgPGM+ZG91YmxlPC9jPiBmaWVsZCB0eXBlLgotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICBEb3VibGUsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IFRoZSA8Yz5mbG9hdDwvYz4gZmllbGQgdHlwZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAgICAgRmxvYXQsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFRoZSA8Yz5p
bnQ2NDwvYz4gZmllbGQgdHlwZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgSW50
NjQsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFRoZSA8Yz51aW50NjQ8L2M+
IGZpZWxkIHR5cGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFVJbnQ2NCwKLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIDxjPmludDMyPC9jPiBmaWVsZCB0
eXBlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBJbnQzMiwKLSAgICAgICAgLy8v
IDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIDxjPmZpeGVkNjQ8L2M+IGZpZWxkIHR5cGUuCi0g
ICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIEZpeGVkNjQsCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vIFRoZSA8Yz5maXhlZDMyPC9jPiBmaWVsZCB0eXBlLgotICAgICAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBGaXhlZDMyLAotICAgICAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgICAgIC8vLyBUaGUgPGM+Ym9vbDwvYz4gZmllbGQgdHlwZS4KLSAgICAgICAgLy8vIDwv
c3VtbWFyeT4KLSAgICAgICAgQm9vbCwKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAv
Ly8gVGhlIDxjPnN0cmluZzwvYz4gZmllbGQgdHlwZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgU3RyaW5nLAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUaGUg
ZmllbGQgdHlwZSB1c2VkIGZvciBncm91cHMgKG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBpbXBsZW1l
bnRhdGlvbikuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIEdyb3VwLAotICAgICAg
ICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUaGUgZmllbGQgdHlwZSB1c2VkIGZvciBtZXNz
YWdlIGZpZWxkcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgTWVzc2FnZSwKLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIDxjPmJ5dGVzPC9jPiBmaWVsZCB0
eXBlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBCeXRlcywKLSAgICAgICAgLy8v
IDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIDxjPnVpbnQzMjwvYz4gZmllbGQgdHlwZS4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgVUludDMyLAotICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgIC8vLyBUaGUgPGM+c2ZpeGVkMzI8L2M+IGZpZWxkIHR5cGUuCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFNGaXhlZDMyLAotICAgICAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgICAgIC8vLyBUaGUgPGM+c2ZpeGVkNjQ8L2M+IGZpZWxkIHR5cGUuCi0gICAgICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgICAgIFNGaXhlZDY0LAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgICAgIC8vLyBUaGUgPGM+c2ludDMyPC9jPiBmaWVsZCB0eXBlLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICBTSW50MzIsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAg
Ly8vIFRoZSA8Yz5zaW50NjQ8L2M+IGZpZWxkIHR5cGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIFNJbnQ2NCwKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhl
IGZpZWxkIHR5cGUgdXNlZCBmb3IgZW51bSBmaWVsZHMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIEVudW0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0ZpbGVEZXNjcmlw
dG9yLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL0ZpbGVEZXNjcmlw
dG9yLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjdjZDkyMjE2ZTA2Y2FkYjJi
YjE1N2Q4NWNhMWM5MGNhYTQxNjk2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9GaWxlRGVz
Y3JpcHRvci5jcworKysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0jcmVnaW9uIENvcHly
aWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMu
R2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5PYmplY3RNb2RlbDsKLQotbmFtZXNw
YWNlIEdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAg
IC8vLyBEZXNjcmliZXMgYSAucHJvdG8gZmlsZSwgaW5jbHVkaW5nIGV2ZXJ5dGhpbmcgZGVmaW5l
ZCB3aXRoaW4uCi0gICAgLy8vIElEZXNjcmlwdG9yIGlzIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0
aGUgRmlsZSBwcm9wZXJ0eSByZXR1cm5zIHRoaXMgZGVzY3JpcHRvciwKLSAgICAvLy8gYW5kIHRo
ZSBGdWxsTmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgTmFtZS4KLSAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgRmlsZURlc2NyaXB0b3IgOiBJRGVzY3JpcHRvcgotICAg
IHsKLSAgICAgICAgcHJpdmF0ZSBGaWxlRGVzY3JpcHRvcihCeXRlU3RyaW5nIGRlc2NyaXB0b3JE
YXRhLCBGaWxlRGVzY3JpcHRvclByb3RvIHByb3RvLCBGaWxlRGVzY3JpcHRvcltdIGRlcGVuZGVu
Y2llcywgRGVzY3JpcHRvclBvb2wgcG9vbCwgYm9vbCBhbGxvd1Vua25vd25EZXBlbmRlbmNpZXMs
IEdlbmVyYXRlZENsclR5cGVJbmZvIGdlbmVyYXRlZENvZGVJbmZvKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBTZXJpYWxpemVkRGF0YSA9IGRlc2NyaXB0b3JEYXRhOwotICAgICAgICAgICAgRGVz
Y3JpcHRvclBvb2wgPSBwb29sOwotICAgICAgICAgICAgUHJvdG8gPSBwcm90bzsKLSAgICAgICAg
ICAgIERlcGVuZGVuY2llcyA9IG5ldyBSZWFkT25seUNvbGxlY3Rpb248RmlsZURlc2NyaXB0b3I+
KChGaWxlRGVzY3JpcHRvcltdKSBkZXBlbmRlbmNpZXMuQ2xvbmUoKSk7Ci0KLSAgICAgICAgICAg
IFB1YmxpY0RlcGVuZGVuY2llcyA9IERldGVybWluZVB1YmxpY0RlcGVuZGVuY2llcyh0aGlzLCBw
cm90bywgZGVwZW5kZW5jaWVzLCBhbGxvd1Vua25vd25EZXBlbmRlbmNpZXMpOwotCi0gICAgICAg
ICAgICBwb29sLkFkZFBhY2thZ2UoUGFja2FnZSwgdGhpcyk7Ci0KLSAgICAgICAgICAgIE1lc3Nh
Z2VUeXBlcyA9IERlc2NyaXB0b3JVdGlsLkNvbnZlcnRBbmRNYWtlUmVhZE9ubHkocHJvdG8uTWVz
c2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLCBpbmRleCkgPT4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1lc3Nh
Z2VEZXNjcmlwdG9yKG1lc3NhZ2UsIHRoaXMsIG51bGwsIGluZGV4LCBnZW5lcmF0ZWRDb2RlSW5m
by5OZXN0ZWRUeXBlc1tpbmRleF0pKTsKLQotICAgICAgICAgICAgRW51bVR5cGVzID0gRGVzY3Jp
cHRvclV0aWwuQ29udmVydEFuZE1ha2VSZWFkT25seShwcm90by5FbnVtVHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVu
dW1UeXBlLCBpbmRleCkgPT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVudW1EZXNjcmlwdG9yKGVudW1UeXBlLCB0aGlz
LCBudWxsLCBpbmRleCwgZ2VuZXJhdGVkQ29kZUluZm8uTmVzdGVkRW51bXNbaW5kZXhdKSk7Ci0K
LSAgICAgICAgICAgIFNlcnZpY2VzID0gRGVzY3JpcHRvclV0aWwuQ29udmVydEFuZE1ha2VSZWFk
T25seShwcm90by5TZXJ2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzZXJ2aWNlLCBpbmRleCkgPT4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2Vy
dmljZURlc2NyaXB0b3Ioc2VydmljZSwgdGhpcywgaW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbXB1dGVzIHRoZSBmdWxsIG5hbWUgb2Yg
YSBkZXNjcmlwdG9yIHdpdGhpbiB0aGlzIGZpbGUsIHdpdGggYW4gb3B0aW9uYWwgcGFyZW50IG1l
c3NhZ2UuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIGludGVybmFsIHN0cmluZyBD
b21wdXRlRnVsbE5hbWUoTWVzc2FnZURlc2NyaXB0b3IgcGFyZW50LCBzdHJpbmcgbmFtZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQuRnVsbE5hbWUgKyAiLiIgKyBuYW1lOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFBhY2thZ2UuTGVuZ3RoID4gMCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gUGFja2FnZSArICIuIiArIG5hbWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbmFtZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEV4dHJhY3RzIHB1YmxpYyBkZXBlbmRlbmNpZXMg
ZnJvbSBkaXJlY3QgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGEgc3RhdGljIG1ldGhvZCBkZXNwaXRl
IGl0cwotICAgICAgICAvLy8gZmlyc3QgcGFyYW1ldGVyLCBhcyB0aGUgdmFsdWUgd2UncmUgaW4g
dGhlIG1pZGRsZSBvZiBjb25zdHJ1Y3RpbmcgaXMgb25seSB1c2VkIGZvciBleGNlcHRpb25zLgot
ICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwcml2YXRlIHN0YXRpYyBJTGlzdDxGaWxl
RGVzY3JpcHRvcj4gRGV0ZXJtaW5lUHVibGljRGVwZW5kZW5jaWVzKEZpbGVEZXNjcmlwdG9yIEB0
aGlzLCBGaWxlRGVzY3JpcHRvclByb3RvIHByb3RvLCBGaWxlRGVzY3JpcHRvcltdIGRlcGVuZGVu
Y2llcywgYm9vbCBhbGxvd1Vua25vd25EZXBlbmRlbmNpZXMpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHZhciBuYW1lVG9GaWxlTWFwID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBGaWxlRGVzY3Jp
cHRvcj4oKTsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBmaWxlIGluIGRlcGVuZGVuY2llcykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYW1lVG9GaWxlTWFwW2ZpbGUuTmFtZV0g
PSBmaWxlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHB1YmxpY0RlcGVuZGVuY2ll
cyA9IG5ldyBMaXN0PEZpbGVEZXNjcmlwdG9yPigpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBwcm90by5QdWJsaWNEZXBlbmRlbmN5LkNvdW50OyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gcHJvdG8uUHVibGljRGVwZW5kZW5jeVtpXTsK
LSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHByb3RvLkRlcGVuZGVu
Y3kuQ291bnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24oQHRoaXMsICJJbnZhbGlkIHB1YmxpYyBk
ZXBlbmRlbmN5IGluZGV4LiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBz
dHJpbmcgbmFtZSA9IHByb3RvLkRlcGVuZGVuY3lbaW5kZXhdOwotICAgICAgICAgICAgICAgIEZp
bGVEZXNjcmlwdG9yIGZpbGUgPSBuYW1lVG9GaWxlTWFwW25hbWVdOwotICAgICAgICAgICAgICAg
IGlmIChmaWxlID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWFsbG93VW5rbm93bkRlcGVuZGVuY2llcykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0aW9uRXhj
ZXB0aW9uKEB0aGlzLCAiSW52YWxpZCBwdWJsaWMgZGVwZW5kZW5jeTogIiArIG5hbWUpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB1bmtub3du
IGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHVibGljRGVwZW5kZW5jaWVz
LkFkZChmaWxlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IFJlYWRPbmx5Q29sbGVjdGlvbjxGaWxlRGVzY3JpcHRvcj4ocHVibGljRGVw
ZW5kZW5jaWVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8dmFsdWU+Ci0gICAgICAgIC8v
LyBUaGUgZGVzY3JpcHRvciBpbiBpdHMgcHJvdG9jb2wgbWVzc2FnZSByZXByZXNlbnRhdGlvbi4K
LSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIGludGVybmFsIEZpbGVEZXNjcmlwdG9yUHJv
dG8gUHJvdG8geyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gVGhl
IGZpbGUgbmFtZS4KLSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBzdHJpbmcg
TmFtZSA9PiBQcm90by5OYW1lOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IFRoZSBwYWNrYWdlIGFzIGRlY2xhcmVkIGluIHRoZSAucHJvdG8gZmlsZS4gVGhpcyBtYXkgb3Ig
bWF5IG5vdAotICAgICAgICAvLy8gYmUgZXF1aXZhbGVudCB0byB0aGUgLk5FVCBuYW1lc3BhY2Ug
b2YgdGhlIGdlbmVyYXRlZCBjbGFzc2VzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAg
ICBwdWJsaWMgc3RyaW5nIFBhY2thZ2UgPT4gUHJvdG8uUGFja2FnZTsKLQotICAgICAgICAvLy8g
PHZhbHVlPgotICAgICAgICAvLy8gVW5tb2RpZmlhYmxlIGxpc3Qgb2YgdG9wLWxldmVsIG1lc3Nh
Z2UgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBmaWxlLgotICAgICAgICAvLy8gPC92YWx1ZT4KLSAg
ICAgICAgcHVibGljIElMaXN0PE1lc3NhZ2VEZXNjcmlwdG9yPiBNZXNzYWdlVHlwZXMgeyBnZXQ7
IH0KLQotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gVW5tb2RpZmlhYmxlIGxpc3Qg
b2YgdG9wLWxldmVsIGVudW0gdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBmaWxlLgotICAgICAgICAv
Ly8gPC92YWx1ZT4KLSAgICAgICAgcHVibGljIElMaXN0PEVudW1EZXNjcmlwdG9yPiBFbnVtVHlw
ZXMgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gVW5tb2RpZmlh
YmxlIGxpc3Qgb2YgdG9wLWxldmVsIHNlcnZpY2VzIGRlY2xhcmVkIGluIHRoaXMgZmlsZS4KLSAg
ICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBJTGlzdDxTZXJ2aWNlRGVzY3JpcHRv
cj4gU2VydmljZXMgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8g
VW5tb2RpZmlhYmxlIGxpc3Qgb2YgdGhpcyBmaWxlJ3MgZGVwZW5kZW5jaWVzIChpbXBvcnRzKS4K
LSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBJTGlzdDxGaWxlRGVzY3JpcHRv
cj4gRGVwZW5kZW5jaWVzIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDx2YWx1ZT4KLSAgICAgICAg
Ly8vIFVubW9kaWZpYWJsZSBsaXN0IG9mIHRoaXMgZmlsZSdzIHB1YmxpYyBkZXBlbmRlbmNpZXMg
KHB1YmxpYyBpbXBvcnRzKS4KLSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBJ
TGlzdDxGaWxlRGVzY3JpcHRvcj4gUHVibGljRGVwZW5kZW5jaWVzIHsgZ2V0OyB9Ci0KLSAgICAg
ICAgLy8vIDx2YWx1ZT4KLSAgICAgICAgLy8vIFRoZSBvcmlnaW5hbCBzZXJpYWxpemVkIGJpbmFy
eSBmb3JtIG9mIHRoaXMgZGVzY3JpcHRvci4KLSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAg
IHB1YmxpYyBCeXRlU3RyaW5nIFNlcmlhbGl6ZWREYXRhIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8v
IDx2YWx1ZT4KLSAgICAgICAgLy8vIEltcGxlbWVudGF0aW9uIG9mIElEZXNjcmlwdG9yLkZ1bGxO
YW1lIC0ganVzdCByZXR1cm5zIHRoZSBzYW1lIGFzIE5hbWUuCi0gICAgICAgIC8vLyA8L3ZhbHVl
PgotICAgICAgICBzdHJpbmcgSURlc2NyaXB0b3IuRnVsbE5hbWUgPT4gTmFtZTsKLQotICAgICAg
ICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gSW1wbGVtZW50YXRpb24gb2YgSURlc2NyaXB0b3Iu
RmlsZSAtIGp1c3QgcmV0dXJucyB0aGlzIGRlc2NyaXB0b3IuCi0gICAgICAgIC8vLyA8L3ZhbHVl
PgotICAgICAgICBGaWxlRGVzY3JpcHRvciBJRGVzY3JpcHRvci5GaWxlID0+IHRoaXM7Ci0KLSAg
ICAgICAgLy8vIDx2YWx1ZT4KLSAgICAgICAgLy8vIFBvb2wgY29udGFpbmluZyBzeW1ib2wgZGVz
Y3JpcHRvcnMuCi0gICAgICAgIC8vLyA8L3ZhbHVlPgotICAgICAgICBpbnRlcm5hbCBEZXNjcmlw
dG9yUG9vbCBEZXNjcmlwdG9yUG9vbCB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgLy8vIEZpbmRzIGEgdHlwZSAobWVzc2FnZSwgZW51bSwgc2VydmljZSBvciBleHRl
bnNpb24pIGluIHRoZSBmaWxlIGJ5IG5hbWUuIERvZXMgbm90IGZpbmQgbmVzdGVkIHR5cGVzLgot
ICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbWUiPlRo
ZSB1bnF1YWxpZmllZCB0eXBlIG5hbWUgdG8gbG9vayBmb3IuPC9wYXJhbT4KLSAgICAgICAgLy8v
IDx0eXBlcGFyYW0gbmFtZT0iVCI+VGhlIHR5cGUgb2YgZGVzY3JpcHRvciB0byBsb29rIGZvcjwv
dHlwZXBhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHR5cGUncyBkZXNjcmlwdG9yLCBv
ciBudWxsIGlmIG5vdCBmb3VuZC48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBUIEZpbmRUeXBl
QnlOYW1lPFQ+KFN0cmluZyBuYW1lKQotICAgICAgICAgICAgd2hlcmUgVCA6IGNsYXNzLCBJRGVz
Y3JpcHRvcgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBEb24ndCBhbGxvdyBsb29raW5nIHVw
IG5lc3RlZCB0eXBlcy4gIFRoaXMgd2lsbCBtYWtlIG9wdGltaXphdGlvbgotICAgICAgICAgICAg
Ly8gZWFzaWVyIGxhdGVyLgotICAgICAgICAgICAgaWYgKG5hbWUuSW5kZXhPZignLicpICE9IC0x
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKFBhY2thZ2UuTGVuZ3RoID4gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBuYW1lID0gUGFja2FnZSArICIuIiArIG5hbWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBUIHJlc3VsdCA9IERlc2NyaXB0b3JQb29sLkZpbmRTeW1ib2w8VD4o
bmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0LkZpbGUgPT0g
dGhpcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBCdWlsZHMgYSBGaWxlRGVzY3JpcHRvciBmcm9t
IGl0cyBwcm90b2NvbCBidWZmZXIgcmVwcmVzZW50YXRpb24uCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZGVzY3JpcHRvckRhdGEiPlRoZSBvcmlnaW5h
bCBzZXJpYWxpemVkIGRlc2NyaXB0b3IgZGF0YS4KLSAgICAgICAgLy8vIFdlIGhhdmUgb25seSBs
aW1pdGVkIHByb3RvMiBzdXBwb3J0LCBzbyBzZXJpYWxpemluZyBGaWxlRGVzY3JpcHRvclByb3Rv
Ci0gICAgICAgIC8vLyB3b3VsZCBub3QgbmVjZXNzYXJpbHkgZ2l2ZSB1cyB0aGlzLjwvcGFyYW0+
Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icHJvdG8iPlRoZSBwcm90b2NvbCBtZXNzYWdlIGZv
cm0gb2YgdGhlIEZpbGVEZXNjcmlwdG9yLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFt
ZT0iZGVwZW5kZW5jaWVzIj5GaWxlRGVzY3JpcHRvcnMgY29ycmVzcG9uZGluZyB0byBhbGwgb2Yg
dGhlCi0gICAgICAgIC8vLyBmaWxlJ3MgZGVwZW5kZW5jaWVzLCBpbiB0aGUgZXhhY3Qgb3JkZXIg
bGlzdGVkIGluIHRoZSAucHJvdG8gZmlsZS4gTWF5IGJlIG51bGwsCi0gICAgICAgIC8vLyBpbiB3
aGljaCBjYXNlIGl0IGlzIHRyZWF0ZWQgYXMgYW4gZW1wdHkgYXJyYXkuPC9wYXJhbT4KLSAgICAg
ICAgLy8vIDxwYXJhbSBuYW1lPSJhbGxvd1Vua25vd25EZXBlbmRlbmNpZXMiPldoZXRoZXIgdW5r
bm93biBkZXBlbmRlbmNpZXMgYXJlIGlnbm9yZWQgKHRydWUpIG9yIGNhdXNlIGFuIGV4Y2VwdGlv
biB0byBiZSB0aHJvd24gKGZhbHNlKS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9
ImdlbmVyYXRlZENvZGVJbmZvIj5EZXRhaWxzIGFib3V0IGdlbmVyYXRlZCBjb2RlLCBmb3IgdGhl
IHB1cnBvc2VzIG9mIHJlZmxlY3Rpb24uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxleGNlcHRpb24g
Y3JlZj0iRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24iPklmIDxwYXJhbXJlZiBuYW1lPSJw
cm90byIvPiBpcyBub3QKLSAgICAgICAgLy8vIGEgdmFsaWQgZGVzY3JpcHRvci4gVGhpcyBjYW4g
b2NjdXIgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMsIHN1Y2ggYXMgYSBmaWVsZAotICAgICAgICAv
Ly8gaGF2aW5nIGFuIHVuZGVmaW5lZCB0eXBlIG9yIGJlY2F1c2UgdHdvIG1lc3NhZ2VzIHdlcmUg
ZGVmaW5lZCB3aXRoIHRoZSBzYW1lIG5hbWUuPC9leGNlcHRpb24+Ci0gICAgICAgIHByaXZhdGUg
c3RhdGljIEZpbGVEZXNjcmlwdG9yIEJ1aWxkRnJvbShCeXRlU3RyaW5nIGRlc2NyaXB0b3JEYXRh
LCBGaWxlRGVzY3JpcHRvclByb3RvIHByb3RvLCBGaWxlRGVzY3JpcHRvcltdIGRlcGVuZGVuY2ll
cywgYm9vbCBhbGxvd1Vua25vd25EZXBlbmRlbmNpZXMsIEdlbmVyYXRlZENsclR5cGVJbmZvIGdl
bmVyYXRlZENvZGVJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBCdWlsZGluZyBkZXNj
cmlwdG9ycyBpbnZvbHZlcyB0d28gc3RlcHM6IHRyYW5zbGF0aW5nIGFuZCBsaW5raW5nLgotICAg
ICAgICAgICAgLy8gSW4gdGhlIHRyYW5zbGF0aW9uIHN0ZXAgKGltcGxlbWVudGVkIGJ5IEZpbGVE
ZXNjcmlwdG9yJ3MKLSAgICAgICAgICAgIC8vIGNvbnN0cnVjdG9yKSwgd2UgYnVpbGQgYW4gb2Jq
ZWN0IHRyZWUgbWlycm9yaW5nIHRoZQotICAgICAgICAgICAgLy8gRmlsZURlc2NyaXB0b3JQcm90
bydzIHRyZWUgYW5kIHB1dCBhbGwgb2YgdGhlIGRlc2NyaXB0b3JzIGludG8gdGhlCi0gICAgICAg
ICAgICAvLyBEZXNjcmlwdG9yUG9vbCdzIGxvb2t1cCB0YWJsZXMuICBJbiB0aGUgbGlua2luZyBz
dGVwLCB3ZSBsb29rIHVwIGFsbAotICAgICAgICAgICAgLy8gdHlwZSByZWZlcmVuY2VzIGluIHRo
ZSBEZXNjcmlwdG9yUG9vbCwgc28gdGhhdCwgZm9yIGV4YW1wbGUsIGEKLSAgICAgICAgICAgIC8v
IEZpZWxkRGVzY3JpcHRvciBmb3IgYW4gZW1iZWRkZWQgbWVzc2FnZSBjb250YWlucyBhIHBvaW50
ZXIgZGlyZWN0bHkKLSAgICAgICAgICAgIC8vIHRvIHRoZSBEZXNjcmlwdG9yIGZvciB0aGF0IG1l
c3NhZ2UncyB0eXBlLiAgV2UgYWxzbyBkZXRlY3QgdW5kZWZpbmVkCi0gICAgICAgICAgICAvLyB0
eXBlcyBpbiB0aGUgbGlua2luZyBzdGVwLgotICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llcyA9
PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyA9IG5l
dyBGaWxlRGVzY3JpcHRvclswXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRGVzY3Jp
cHRvclBvb2wgcG9vbCA9IG5ldyBEZXNjcmlwdG9yUG9vbChkZXBlbmRlbmNpZXMpOwotICAgICAg
ICAgICAgRmlsZURlc2NyaXB0b3IgcmVzdWx0ID0gbmV3IEZpbGVEZXNjcmlwdG9yKGRlc2NyaXB0
b3JEYXRhLCBwcm90bywgZGVwZW5kZW5jaWVzLCBwb29sLCBhbGxvd1Vua25vd25EZXBlbmRlbmNp
ZXMsIGdlbmVyYXRlZENvZGVJbmZvKTsKLQotICAgICAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0
aGUgZGVwZW5kZW5jaWVzIHdlJ3ZlIGJlZW4gcGFzc2VkIChhcyBGaWxlRGVzY3JpcHRvcnMpIGFy
ZSBhY3R1YWxseSB0aGUgb25lcyB3ZQotICAgICAgICAgICAgLy8gbmVlZC4KLSAgICAgICAgICAg
IGlmIChkZXBlbmRlbmNpZXMuTGVuZ3RoICE9IHByb3RvLkRlcGVuZGVuY3kuQ291bnQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0aW9u
RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICByZXN1bHQsCi0gICAgICAgICAgICAgICAg
ICAgICJEZXBlbmRlbmNpZXMgcGFzc2VkIHRvIEZpbGVEZXNjcmlwdG9yLkJ1aWxkRnJvbSgpIGRv
bid0IG1hdGNoICIgKwotICAgICAgICAgICAgICAgICAgICAidGhvc2UgbGlzdGVkIGluIHRoZSBG
aWxlRGVzY3JpcHRvclByb3RvLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBwcm90by5EZXBlbmRlbmN5LkNvdW50OyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llc1tpXS5OYW1lICE9IHByb3RvLkRlcGVu
ZGVuY3lbaV0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAiRGVwZW5kZW5jaWVzIHBhc3NlZCB0
byBGaWxlRGVzY3JpcHRvci5CdWlsZEZyb20oKSBkb24ndCBtYXRjaCAiICsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICJ0aG9zZSBsaXN0ZWQgaW4gdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8uIEV4
cGVjdGVkOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLkRlcGVuZGVuY3lbaV0g
KyAiIGJ1dCB3YXM6ICIgKyBkZXBlbmRlbmNpZXNbaV0uTmFtZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXN1bHQuQ3Jvc3NMaW5rKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lk
IENyb3NzTGluaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvcmVhY2ggKE1lc3NhZ2VEZXNj
cmlwdG9yIG1lc3NhZ2UgaW4gTWVzc2FnZVR5cGVzKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1lc3NhZ2UuQ3Jvc3NMaW5rKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvcmVhY2ggKFNlcnZpY2VEZXNjcmlwdG9yIHNlcnZpY2UgaW4gU2VydmljZXMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgc2VydmljZS5Dcm9zc0xpbmsoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENyZWF0
ZXMgYSBkZXNjcmlwdG9yIGZvciBnZW5lcmF0ZWQgY29kZS4KLSAgICAgICAgLy8vIDwvc3VtbWFy
eT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gVGhpcyBtZXRob2QgaXMgb25s
eSBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IHRoZSByZXN1bHRzIG9mIGdlbmVyYXRpbmcgY29kZSB3
aXRoIHByb3RvYywKLSAgICAgICAgLy8vIHdoaWNoIGNyZWF0ZXMgdGhlIGFwcHJvcHJpYXRlIGRl
cGVuZGVuY2llcyBldGMuIEl0IGhhcyB0byBiZSBwdWJsaWMgYmVjYXVzZSB0aGUgZ2VuZXJhdGVk
Ci0gICAgICAgIC8vLyBjb2RlIGlzICJleHRlcm5hbCIsIGJ1dCBzaG91bGQgbm90IGJlIGNhbGxl
ZCBkaXJlY3RseSBieSBlbmQgdXNlcnMuCi0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAg
IHB1YmxpYyBzdGF0aWMgRmlsZURlc2NyaXB0b3IgRnJvbUdlbmVyYXRlZENvZGUoCi0gICAgICAg
ICAgICBieXRlW10gZGVzY3JpcHRvckRhdGEsCi0gICAgICAgICAgICBGaWxlRGVzY3JpcHRvcltd
IGRlcGVuZGVuY2llcywKLSAgICAgICAgICAgIEdlbmVyYXRlZENsclR5cGVJbmZvIGdlbmVyYXRl
ZENvZGVJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvIHBy
b3RvOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJv
dG8gPSBGaWxlRGVzY3JpcHRvclByb3RvLlBhcnNlci5QYXJzZUZyb20oZGVzY3JpcHRvckRhdGEp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZl
ckV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBB
cmd1bWVudEV4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIHByb3RvY29sIGJ1ZmZlciBkZXNjcmlw
dG9yIGZvciBnZW5lcmF0ZWQgY29kZS4iLCBlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiBidWlsZGluZyBk
ZXNjcmlwdG9ycyBmb3IgZ2VuZXJhdGVkIGNvZGUsIHdlIGFsbG93IHVua25vd24KLSAgICAgICAg
ICAgICAgICAvLyBkZXBlbmRlbmNpZXMgYnkgZGVmYXVsdC4KLSAgICAgICAgICAgICAgICByZXR1
cm4gQnVpbGRGcm9tKEJ5dGVTdHJpbmcuQ29weUZyb20oZGVzY3JpcHRvckRhdGEpLCBwcm90bywg
ZGVwZW5kZW5jaWVzLCB0cnVlLCBnZW5lcmF0ZWRDb2RlSW5mbyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYXRjaCAoRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24gZSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oJCJJ
bnZhbGlkIGVtYmVkZGVkIGRlc2NyaXB0b3IgZm9yIFwie3Byb3RvLk5hbWV9XCIuIiwgZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBSZXR1cm5zIGEgPHNlZSBjcmVmPSJTeXN0ZW0uU3RyaW5nIiAvPiB0aGF0IHJlcHJlc2Vu
dHMgdGhpcyBpbnN0YW5jZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxy
ZXR1cm5zPgotICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlN5c3RlbS5TdHJpbmciIC8+IHRoYXQg
cmVwcmVzZW50cyB0aGlzIGluc3RhbmNlLgotICAgICAgICAvLy8gPC9yZXR1cm5zPgotICAgICAg
ICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuICQiRmlsZURlc2NyaXB0b3IgZm9yIHtOYW1lfSI7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0
b3IgZm9yIGRlc2NyaXB0b3IucHJvdG8uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgcHJvdG9zIHdoaWNo
IHRha2UgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiA8Yz5kZXNjcmlwdG9yLnByb3RvPC9jPiwgdHlw
aWNhbGx5IGZvcgotICAgICAgICAvLy8gYW5ub3RhdGlvbnMuIFdoaWxlIDxjPmRlc2NyaXB0b3Iu
cHJvdG88L2M+IGlzIGEgcHJvdG8yIGZpbGUsIGl0IGlzIGJ1aWx0IGludG8gdGhlIEdvb2dsZS5Q
cm90b2J1ZgotICAgICAgICAvLy8gcnVudGltZSBmb3IgcmVmbGVjdGlvbiBwdXJwb3Nlcy4gVGhl
IG1lc3NhZ2VzIGFyZSBpbnRlcm5hbCB0byB0aGUgcnVudGltZSBhcyB0aGV5IHdvdWxkIHJlcXVp
cmUKLSAgICAgICAgLy8vIHByb3RvMiBzZW1hbnRpY3MgZm9yIGZ1bGwgc3VwcG9ydCwgYnV0IHRo
ZSBmaWxlIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlIHZpYSB0aGlzIHByb3BlcnR5LiBUaGUKLSAg
ICAgICAgLy8vIEMjIGNvZGVnZW4gaW4gcHJvdG9jIGF1dG9tYXRpY2FsbHkgdXNlcyB0aGlzIHBy
b3BlcnR5IHdoZW4gaXQgZGV0ZWN0cyBhIGRlcGVuZGVuY3kgb24gPGM+ZGVzY3JpcHRvci5wcm90
bzwvYz4uCi0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8dmFsdWU+Ci0gICAg
ICAgIC8vLyBUaGUgZmlsZSBkZXNjcmlwdG9yIGZvciA8Yz5kZXNjcmlwdG9yLnByb3RvPC9jPi4K
LSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRmlsZURlc2NyaXB0
b3IgRGVzY3JpcHRvclByb3RvRmlsZURlc2NyaXB0b3IgeyBnZXQgeyByZXR1cm4gRGVzY3JpcHRv
clJlZmxlY3Rpb24uRGVzY3JpcHRvcjsgfSB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlv
bi9HZW5lcmF0ZWRDbHJUeXBlSW5mby5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVm
bGVjdGlvbi9HZW5lcmF0ZWRDbHJUeXBlSW5mby5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZmU1ZGI2NTY1NmZmZmE5YzI4YmY2NjQxYjc1ZWIyZTM5NDM1MTViNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlBy
b3RvYnVmL1JlZmxlY3Rpb24vR2VuZXJhdGVkQ2xyVHlwZUluZm8uY3MKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDMgKzAsMCBAQAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLXVzaW5nIFN5c3Rl
bTsKLQotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxz
dW1tYXJ5PgotICAgIC8vLyBFeHRyYSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBnZW5lcmF0ZWQg
Y29kZSB3aGVuIGluaXRpYWxpemluZyBhIG1lc3NhZ2Ugb3IgZmlsZSBkZXNjcmlwdG9yLgotICAg
IC8vLyBUaGVzZSBhcmUgY29uc3RydWN0ZWQgYXMgcmVxdWlyZWQsIGFuZCBhcmUgbm90IGxvbmct
bGl2ZWQuIEhhbmQtd3JpdHRlbiBjb2RlIHNob3VsZAotICAgIC8vLyBuZXZlciBuZWVkIHRvIHVz
ZSB0aGlzIHR5cGUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc2VhbGVkIGNsYXNz
IEdlbmVyYXRlZENsclR5cGVJbmZvCi0gICAgewotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFk
b25seSBzdHJpbmdbXSBFbXB0eU5hbWVzID0gbmV3IHN0cmluZ1swXTsKLSAgICAgICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgR2VuZXJhdGVkQ2xyVHlwZUluZm9bXSBFbXB0eUNvZGVJbmZvID0g
bmV3IEdlbmVyYXRlZENsclR5cGVJbmZvWzBdOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgLy8vIElycmVsZXZhbnQgZm9yIGZpbGUgZGVzY3JpcHRvcnM7IHRoZSBDTFIgdHlwZSBm
b3IgdGhlIG1lc3NhZ2UgZm9yIG1lc3NhZ2UgZGVzY3JpcHRvcnMuCi0gICAgICAgIC8vLyA8L3N1
bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBUeXBlIENsclR5cGUgeyBnZXQ7IHByaXZhdGUgc2V0OyB9
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gSXJyZWxldmFudCBmb3IgZmls
ZSBkZXNjcmlwdG9yczsgdGhlIHBhcnNlciBmb3IgbWVzc2FnZSBkZXNjcmlwdG9ycy4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIE1lc3NhZ2VQYXJzZXIgUGFyc2VyIHsg
Z2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gSXJyZWxldmFudCBm
b3IgZmlsZSBkZXNjcmlwdG9yczsgdGhlIENMUiBwcm9wZXJ0eSBuYW1lcyAoaW4gbWVzc2FnZSBk
ZXNjcmlwdG9yIGZpZWxkIG9yZGVyKQotICAgICAgICAvLy8gZm9yIGZpZWxkcyBpbiB0aGUgbWVz
c2FnZSBmb3IgbWVzc2FnZSBkZXNjcmlwdG9ycy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAgICAgcHVibGljIHN0cmluZ1tdIFByb3BlcnR5TmFtZXMgeyBnZXQ7IH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBJcnJlbGV2YW50IGZvciBmaWxlIGRlc2NyaXB0b3Jz
OyB0aGUgQ0xSIHByb3BlcnR5ICJiYXNlIiBuYW1lcyAoaW4gbWVzc2FnZSBkZXNjcmlwdG9yIG9u
ZW9mIG9yZGVyKQotICAgICAgICAvLy8gZm9yIG9uZW9mcyBpbiB0aGUgbWVzc2FnZSBmb3IgbWVz
c2FnZSBkZXNjcmlwdG9ycy4gSXQgaXMgZXhwZWN0ZWQgdGhhdCBmb3IgYSBvbmVvZiBuYW1lIG9m
ICJGb28iLAotICAgICAgICAvLy8gdGhlcmUgd2lsbCBiZSBhICJGb29DYXNlIiBwcm9wZXJ0eSBh
bmQgYSAiQ2xlYXJGb28iIG1ldGhvZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
cHVibGljIHN0cmluZ1tdIE9uZW9mTmFtZXMgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgIC8vLyBUaGUgcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgdHlwZXMgd2l0
aGluIHRoaXMgZmlsZS9tZXNzYWdlIGRlc2NyaXB0b3IuIEVsZW1lbnRzIG1heSBiZSBudWxsCi0g
ICAgICAgIC8vLyBpZiB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGdlbmVyYXRlZCB0eXBlLCBl
LmcuIGZvciBtYXAgZW50cnkgdHlwZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IHB1YmxpYyBHZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIE5lc3RlZFR5cGVzIHsgZ2V0OyB9Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIENMUiB0eXBlcyBmb3IgZW51bXMg
d2l0aGluIHRoaXMgZmlsZS9tZXNzYWdlIGRlc2NyaXB0b3IuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIHB1YmxpYyBUeXBlW10gTmVzdGVkRW51bXMgeyBnZXQ7IH0KLQotICAgICAg
ICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgR2VuZXJhdGVkQ2xyVHlwZUlu
Zm8gZm9yIGEgbWVzc2FnZSBkZXNjcmlwdG9yLCB3aXRoIG5lc3RlZCB0eXBlcywgbmVzdGVkIGVu
dW1zLCB0aGUgQ0xSIHR5cGUsIHByb3BlcnR5IG5hbWVzIGFuZCBvbmVvZiBuYW1lcy4KLSAgICAg
ICAgLy8vIEVhY2ggYXJyYXkgcGFyYW1ldGVyIG1heSBiZSBudWxsLCB0byBpbmRpY2F0ZSBhIGxh
Y2sgb2YgdmFsdWVzLgotICAgICAgICAvLy8gVGhlIHBhcmFtZXRlciBvcmRlciBpcyBkZXNpZ25l
ZCB0byBtYWtlIGl0IGZlYXNpYmxlIHRvIGZvcm1hdCB0aGUgZ2VuZXJhdGVkIGNvZGUgcmVhZGFi
bHkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBHZW5lcmF0ZWRDbHJU
eXBlSW5mbyhUeXBlIGNsclR5cGUsIE1lc3NhZ2VQYXJzZXIgcGFyc2VyLCBzdHJpbmdbXSBwcm9w
ZXJ0eU5hbWVzLCBzdHJpbmdbXSBvbmVvZk5hbWVzLCBUeXBlW10gbmVzdGVkRW51bXMsIEdlbmVy
YXRlZENsclR5cGVJbmZvW10gbmVzdGVkVHlwZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5l
c3RlZFR5cGVzID0gbmVzdGVkVHlwZXMgPz8gRW1wdHlDb2RlSW5mbzsKLSAgICAgICAgICAgIE5l
c3RlZEVudW1zID0gbmVzdGVkRW51bXMgPz8gUmVmbGVjdGlvblV0aWwuRW1wdHlUeXBlczsKLSAg
ICAgICAgICAgIENsclR5cGUgPSBjbHJUeXBlOwotICAgICAgICAgICAgUGFyc2VyID0gcGFyc2Vy
OwotICAgICAgICAgICAgUHJvcGVydHlOYW1lcyA9IHByb3BlcnR5TmFtZXMgPz8gRW1wdHlOYW1l
czsKLSAgICAgICAgICAgIE9uZW9mTmFtZXMgPSBvbmVvZk5hbWVzID8/IEVtcHR5TmFtZXM7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEg
R2VuZXJhdGVkQ2xyVHlwZUluZm8gZm9yIGEgZmlsZSBkZXNjcmlwdG9yLCB3aXRoIG9ubHkgdHlw
ZXMgYW5kIGVudW1zLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgR2Vu
ZXJhdGVkQ2xyVHlwZUluZm8oVHlwZVtdIG5lc3RlZEVudW1zLCBHZW5lcmF0ZWRDbHJUeXBlSW5m
b1tdIG5lc3RlZFR5cGVzKQotICAgICAgICAgICAgOiB0aGlzKG51bGwsIG51bGwsIG51bGwsIG51
bGwsIG5lc3RlZEVudW1zLCBuZXN0ZWRUeXBlcykKLSAgICAgICAgewotICAgICAgICB9Ci0gICAg
fQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9H
b29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9JRGVzY3JpcHRvci5jcyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYvUmVmbGVjdGlvbi9JRGVzY3JpcHRvci5jcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzE4ZDU4Yzk2OGE1OGEzNWEzY2NkNDVlZTFjN2IxZjBkZjI3NTU0Ni4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vSURlc2NyaXB0b3IuY3MKKysrIC9kZXYvbnVsbApAQCAt
MSw1NSArMCwwIEBACi0jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi1uYW1lc3BhY2UgR29v
Z2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIElu
dGVyZmFjZSBpbXBsZW1lbnRlZCBieSBhbGwgZGVzY3JpcHRvciB0eXBlcy4KLSAgICAvLy8gPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBpbnRlcmZhY2UgSURlc2NyaXB0b3IKLSAgICB7Ci0gICAgICAg
IC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGVudGl0
eSAobWVzc2FnZSwgZmllbGQgZXRjKSBiZWluZyBkZXNjcmliZWQuCi0gICAgICAgIC8vLyA8L3N1
bW1hcnk+Ci0gICAgICAgIHN0cmluZyBOYW1lIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gUmV0dXJucyB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhl
IGVudGl0eSBiZWluZyBkZXNjcmliZWQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IHN0cmluZyBGdWxsTmFtZSB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIFJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSAucHJvdG8gZmlsZSB0aGF0IHRo
aXMgZW50aXR5IGlzIHBhcnQgb2YuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIEZp
bGVEZXNjcmlwdG9yIEZpbGUgeyBnZXQ7IH0KLSAgICB9ICAgIAotfQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVj
dGlvbi9JRmllbGRBY2Nlc3Nvci5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVj
dGlvbi9JRmllbGRBY2Nlc3Nvci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Zl
NTZmZGU2NzFlNGFlMDI1YjdiZTk0ZDgzMWNiZTQ2MjE3OTVlNi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1Jl
ZmxlY3Rpb24vSUZpZWxkQWNjZXNzb3IuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBA
Ci0jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0
ZW0uQ29sbGVjdGlvbnM7Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbgot
ewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQWxsb3dzIGZpZWxkcyB0byBiZSByZWZsZWN0
aXZlbHkgYWNjZXNzZWQuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgaW50ZXJmYWNl
IElGaWVsZEFjY2Vzc29yCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyBSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBGaWVsZERlc2NyaXB0b3IgRGVzY3JpcHRvciB7
IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENsZWFycyB0aGUg
ZmllbGQgaW4gdGhlIHNwZWNpZmllZCBtZXNzYWdlLiAoRm9yIHJlcGVhdGVkIGZpZWxkcywKLSAg
ICAgICAgLy8vIHRoaXMgY2xlYXJzIHRoZSBsaXN0LikKLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgdm9pZCBDbGVhcihJTWVzc2FnZSBtZXNzYWdlKTsKLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBGZXRjaGVzIHRoZSBmaWVsZCB2YWx1ZS4gRm9yIHJlcGVhdGVk
IHZhbHVlcywgdGhpcyB3aWxsIGJlIGFuCi0gICAgICAgIC8vLyA8c2VlIGNyZWY9IklMaXN0Ii8+
IGltcGxlbWVudGF0aW9uLiBGb3IgbWFwIHZhbHVlcywgdGhpcyB3aWxsIGJlIGFuCi0gICAgICAg
IC8vLyA8c2VlIGNyZWY9IklEaWN0aW9uYXJ5Ii8+IGltcGxlbWVudGF0aW9uLgotICAgICAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgICAgICBvYmplY3QgR2V0VmFsdWUoSU1lc3NhZ2UgbWVzc2FnZSk7
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gTXV0YXRvciBmb3Igc2luZ2xl
ICJzaW1wbGUiIGZpZWxkcyBvbmx5LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAv
Ly8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBSZXBlYXRlZCBmaWVsZHMgYXJlIG11dGF0ZWQgYnkg
ZmV0Y2hpbmcgdGhlIHZhbHVlIGFuZCBtYW5pcHVsYXRpbmcgaXQgYXMgYSBsaXN0LgotICAgICAg
ICAvLy8gTWFwIGZpZWxkcyBhcmUgbXV0YXRlZCBieSBmZXRjaGluZyB0aGUgdmFsdWUgYW5kIG1h
bmlwdWxhdGluZyBpdCBhcyBhIGRpY3Rpb25hcnkuCi0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0g
ICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkludmFsaWRPcGVyYXRpb25FeGNlcHRpb24iPlRo
ZSBmaWVsZCBpcyBub3QgYSAic2ltcGxlIiBmaWVsZC48L2V4Y2VwdGlvbj4KLSAgICAgICAgdm9p
ZCBTZXRWYWx1ZShJTWVzc2FnZSBtZXNzYWdlLCBvYmplY3QgdmFsdWUpOwotICAgIH0KLX0KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlBy
b3RvYnVmL1JlZmxlY3Rpb24vTWFwRmllbGRBY2Nlc3Nvci5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYvUmVmbGVjdGlvbi9NYXBGaWVsZEFjY2Vzc29yLmNzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5ZWQ3ZjhjNGRmNGMxY2E3YjM3NDM3OGMwY2Y4MDQwZTk1ZjIyNjE5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9H
b29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9NYXBGaWVsZEFjY2Vzc29yLmNzCisrKyAvZGV2L251
bGwKQEAgLTEsNTkgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNl
bnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNp
bmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwotdXNpbmcgU3lzdGVtLlJlZmxl
Y3Rpb247Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbgotewotICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAvLy8gQWNjZXNzb3IgZm9yIG1hcCBmaWVsZHMuCi0gICAgLy8vIDwv
c3VtbWFyeT4KLSAgICBpbnRlcm5hbCBzZWFsZWQgY2xhc3MgTWFwRmllbGRBY2Nlc3NvciA6IEZp
ZWxkQWNjZXNzb3JCYXNlCi0gICAgewotICAgICAgICBpbnRlcm5hbCBNYXBGaWVsZEFjY2Vzc29y
KFByb3BlcnR5SW5mbyBwcm9wZXJ0eSwgRmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IpIDogYmFz
ZShwcm9wZXJ0eSwgZGVzY3JpcHRvcikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
cHVibGljIG92ZXJyaWRlIHZvaWQgQ2xlYXIoSU1lc3NhZ2UgbWVzc2FnZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgSURpY3Rpb25hcnkgbGlzdCA9IChJRGljdGlvbmFyeSkgR2V0VmFsdWUobWVz
c2FnZSk7Ci0gICAgICAgICAgICBsaXN0LkNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBw
dWJsaWMgb3ZlcnJpZGUgdm9pZCBTZXRWYWx1ZShJTWVzc2FnZSBtZXNzYWdlLCBvYmplY3QgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhj
ZXB0aW9uKCJTZXRWYWx1ZSBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIG1hcCBmaWVsZHMiKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYv
UmVmbGVjdGlvbi9NZXNzYWdlRGVzY3JpcHRvci5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9i
dWYvUmVmbGVjdGlvbi9NZXNzYWdlRGVzY3JpcHRvci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjVhODM1ZTVjY2I1MDEyNmUzY2RiMjVkMTJlMGE0ODkyZmY5YjBjYS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xl
LlByb3RvYnVmL1JlZmxlY3Rpb24vTWVzc2FnZURlc2NyaXB0b3IuY3MKKysrIC9kZXYvbnVsbApA
QCAtMSwzMTcgKzAsMCBAQAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lz
dGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uQ29s
bGVjdGlvbnMuT2JqZWN0TW9kZWw7Ci11c2luZyBTeXN0ZW0uTGlucTsKLQotbmFtZXNwYWNlIEdv
b2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBE
ZXNjcmliZXMgYSBtZXNzYWdlIHR5cGUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
c2VhbGVkIGNsYXNzIE1lc3NhZ2VEZXNjcmlwdG9yIDogRGVzY3JpcHRvckJhc2UKLSAgICB7Ci0g
ICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEhhc2hTZXQ8c3RyaW5nPiBXZWxsS25vd25U
eXBlTmFtZXMgPSBuZXcgSGFzaFNldDxzdHJpbmc+Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJn
b29nbGUvcHJvdG9idWYvYW55LnByb3RvIiwKLSAgICAgICAgICAgICJnb29nbGUvcHJvdG9idWYv
YXBpLnByb3RvIiwKLSAgICAgICAgICAgICJnb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8i
LAotICAgICAgICAgICAgImdvb2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90byIsCi0gICAgICAgICAg
ICAiZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvIiwKLSAgICAgICAgICAgICJnb29nbGUv
cHJvdG9idWYvdGltZXN0YW1wLnByb3RvIiwKLSAgICAgICAgICAgICJnb29nbGUvcHJvdG9idWYv
ZmllbGRfbWFzay5wcm90byIsCi0gICAgICAgICAgICAiZ29vZ2xlL3Byb3RvYnVmL3NvdXJjZV9j
b250ZXh0LnByb3RvIiwKLSAgICAgICAgICAgICJnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3Rv
IiwKLSAgICAgICAgICAgICJnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90byIsCi0gICAgICAgIH07
Ci0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBJTGlzdDxGaWVsZERlc2NyaXB0b3I+IGZpZWxk
c0luRGVjbGFyYXRpb25PcmRlcjsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBJTGlzdDxGaWVs
ZERlc2NyaXB0b3I+IGZpZWxkc0luTnVtYmVyT3JkZXI7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9u
bHkgSURpY3Rpb25hcnk8c3RyaW5nLCBGaWVsZERlc2NyaXB0b3I+IGpzb25GaWVsZE1hcDsKLSAg
ICAgICAgCi0gICAgICAgIGludGVybmFsIE1lc3NhZ2VEZXNjcmlwdG9yKERlc2NyaXB0b3JQcm90
byBwcm90bywgRmlsZURlc2NyaXB0b3IgZmlsZSwgTWVzc2FnZURlc2NyaXB0b3IgcGFyZW50LCBp
bnQgdHlwZUluZGV4LCBHZW5lcmF0ZWRDbHJUeXBlSW5mbyBnZW5lcmF0ZWRDb2RlSW5mbykKLSAg
ICAgICAgICAgIDogYmFzZShmaWxlLCBmaWxlLkNvbXB1dGVGdWxsTmFtZShwYXJlbnQsIHByb3Rv
Lk5hbWUpLCB0eXBlSW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByb3RvID0gcHJvdG87
Ci0gICAgICAgICAgICBQYXJzZXIgPSBnZW5lcmF0ZWRDb2RlSW5mbz8uUGFyc2VyOwotICAgICAg
ICAgICAgQ2xyVHlwZSA9IGdlbmVyYXRlZENvZGVJbmZvPy5DbHJUeXBlOwotICAgICAgICAgICAg
Q29udGFpbmluZ1R5cGUgPSBwYXJlbnQ7Ci0KLSAgICAgICAgICAgIC8vIE5vdGUgdXNlIG9mIGdl
bmVyYXRlZENvZGVJbmZvLiByYXRoZXIgdGhhbiBnZW5lcmF0ZWRDb2RlSW5mbz8uIGhlcmUuLi4g
d2UgZG9uJ3QgZXhwZWN0Ci0gICAgICAgICAgICAvLyB0byBzZWUgYW55IG5lc3RlZCBvbmVvZnMs
IHR5cGVzIG9yIGVudW1zIGluICJub3QgYWN0dWFsbHkgZ2VuZXJhdGVkIiBjb2RlLi4uIHdlIGRv
Ci0gICAgICAgICAgICAvLyBleHBlY3QgZmllbGRzIHRob3VnaCAoZm9yIG1hcCBlbnRyeSBtZXNz
YWdlcykuCi0gICAgICAgICAgICBPbmVvZnMgPSBEZXNjcmlwdG9yVXRpbC5Db252ZXJ0QW5kTWFr
ZVJlYWRPbmx5KAotICAgICAgICAgICAgICAgIHByb3RvLk9uZW9mRGVjbCwKLSAgICAgICAgICAg
ICAgICAob25lb2YsIGluZGV4KSA9PgotICAgICAgICAgICAgICAgIG5ldyBPbmVvZkRlc2NyaXB0
b3Iob25lb2YsIGZpbGUsIHRoaXMsIGluZGV4LCBnZW5lcmF0ZWRDb2RlSW5mby5PbmVvZk5hbWVz
W2luZGV4XSkpOwotCi0gICAgICAgICAgICBOZXN0ZWRUeXBlcyA9IERlc2NyaXB0b3JVdGlsLkNv
bnZlcnRBbmRNYWtlUmVhZE9ubHkoCi0gICAgICAgICAgICAgICAgcHJvdG8uTmVzdGVkVHlwZSwK
LSAgICAgICAgICAgICAgICAodHlwZSwgaW5kZXgpID0+Ci0gICAgICAgICAgICAgICAgbmV3IE1l
c3NhZ2VEZXNjcmlwdG9yKHR5cGUsIGZpbGUsIHRoaXMsIGluZGV4LCBnZW5lcmF0ZWRDb2RlSW5m
by5OZXN0ZWRUeXBlc1tpbmRleF0pKTsKLQotICAgICAgICAgICAgRW51bVR5cGVzID0gRGVzY3Jp
cHRvclV0aWwuQ29udmVydEFuZE1ha2VSZWFkT25seSgKLSAgICAgICAgICAgICAgICBwcm90by5F
bnVtVHlwZSwKLSAgICAgICAgICAgICAgICAodHlwZSwgaW5kZXgpID0+Ci0gICAgICAgICAgICAg
ICAgbmV3IEVudW1EZXNjcmlwdG9yKHR5cGUsIGZpbGUsIHRoaXMsIGluZGV4LCBnZW5lcmF0ZWRD
b2RlSW5mby5OZXN0ZWRFbnVtc1tpbmRleF0pKTsKLQotICAgICAgICAgICAgZmllbGRzSW5EZWNs
YXJhdGlvbk9yZGVyID0gRGVzY3JpcHRvclV0aWwuQ29udmVydEFuZE1ha2VSZWFkT25seSgKLSAg
ICAgICAgICAgICAgICBwcm90by5GaWVsZCwKLSAgICAgICAgICAgICAgICAoZmllbGQsIGluZGV4
KSA9PgotICAgICAgICAgICAgICAgIG5ldyBGaWVsZERlc2NyaXB0b3IoZmllbGQsIGZpbGUsIHRo
aXMsIGluZGV4LCBnZW5lcmF0ZWRDb2RlSW5mbz8uUHJvcGVydHlOYW1lc1tpbmRleF0pKTsKLSAg
ICAgICAgICAgIGZpZWxkc0luTnVtYmVyT3JkZXIgPSBuZXcgUmVhZE9ubHlDb2xsZWN0aW9uPEZp
ZWxkRGVzY3JpcHRvcj4oZmllbGRzSW5EZWNsYXJhdGlvbk9yZGVyLk9yZGVyQnkoZmllbGQgPT4g
ZmllbGQuRmllbGROdW1iZXIpLlRvQXJyYXkoKSk7Ci0gICAgICAgICAgICAvLyBUT0RPOiBVc2Ug
ZmllbGQgPT4gZmllbGQuUHJvdG8uSnNvbk5hbWUgd2hlbiB3ZSdyZSBjb25maWRlbnQgaXQncyBh
cHByb3ByaWF0ZS4gKEFuZCB0aGVuIHVzZSBpdCBpbiB0aGUgZm9ybWF0dGVyLCB0b28uKQotICAg
ICAgICAgICAganNvbkZpZWxkTWFwID0gQ3JlYXRlSnNvbkZpZWxkTWFwKGZpZWxkc0luTnVtYmVy
T3JkZXIpOwotICAgICAgICAgICAgZmlsZS5EZXNjcmlwdG9yUG9vbC5BZGRTeW1ib2wodGhpcyk7
Ci0gICAgICAgICAgICBGaWVsZHMgPSBuZXcgRmllbGRDb2xsZWN0aW9uKHRoaXMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgUmVhZE9ubHlEaWN0aW9uYXJ5PHN0cmluZywg
RmllbGREZXNjcmlwdG9yPiBDcmVhdGVKc29uRmllbGRNYXAoSUxpc3Q8RmllbGREZXNjcmlwdG9y
PiBmaWVsZHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtYXAgPSBuZXcgRGljdGlvbmFy
eTxzdHJpbmcsIEZpZWxkRGVzY3JpcHRvcj4oKTsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBm
aWVsZCBpbiBmaWVsZHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWFwW2ZpZWxk
Lk5hbWVdID0gZmllbGQ7Ci0gICAgICAgICAgICAgICAgbWFwW2ZpZWxkLkpzb25OYW1lXSA9IGZp
ZWxkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkT25seURpY3Rp
b25hcnk8c3RyaW5nLCBGaWVsZERlc2NyaXB0b3I+KG1hcCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUaGUgYnJpZWYgbmFtZSBvZiB0aGUgZGVzY3Jp
cHRvcidzIHRhcmdldC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIG92
ZXJyaWRlIHN0cmluZyBOYW1lID0+IFByb3RvLk5hbWU7Ci0KLSAgICAgICAgaW50ZXJuYWwgRGVz
Y3JpcHRvclByb3RvIFByb3RvIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gVGhlIENMUiB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IG1lc3NhZ2UgaW5zdGFuY2Vz
IGZyb20gdGhpcyBkZXNjcmlwdG9yLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAv
Ly8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyA8cGFyYT4KLSAgICAgICAgLy8vIFRoZSB2YWx1ZSBy
ZXR1cm5lZCBieSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgbm9uLW51bGwgZm9yIGFsbCByZWd1bGFy
IGZpZWxkcy4gSG93ZXZlciwKLSAgICAgICAgLy8vIGlmIGEgbWVzc2FnZSBjb250YWluaW5nIGEg
bWFwIGZpZWxkIGlzIGludHJvc3BlY3RlZCwgdGhlIGxpc3Qgb2YgbmVzdGVkIG1lc3NhZ2VzIHdp
bGwgaW5jbHVkZQotICAgICAgICAvLy8gYW4gYXV0by1nZW5lcmF0ZWQgbmVzdGVkIGtleS92YWx1
ZSBwYWlyIG1lc3NhZ2UgZm9yIHRoZSBmaWVsZC4gVGhpcyBpcyBub3QgcmVwcmVzZW50ZWQgaW4g
YW55Ci0gICAgICAgIC8vLyBnZW5lcmF0ZWQgdHlwZSwgc28gdGhpcyBwcm9wZXJ0eSB3aWxsIHJl
dHVybiBudWxsIGluIHN1Y2ggY2FzZXMuCi0gICAgICAgIC8vLyA8L3BhcmE+Ci0gICAgICAgIC8v
LyA8cGFyYT4KLSAgICAgICAgLy8vIEZvciB3cmFwcGVyIHR5cGVzICg8c2VlIGNyZWY9Ikdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5TdHJpbmdWYWx1ZSIvPiBhbmQgdGhlIGxpa2UpLCB0
aGUgdHlwZSByZXR1cm5lZCBoZXJlCi0gICAgICAgIC8vLyB3aWxsIGJlIHRoZSBnZW5lcmF0ZWQg
bWVzc2FnZSB0eXBlLCBub3QgdGhlIG5hdGl2ZSB0eXBlIHVzZWQgYnkgcmVmbGVjdGlvbiBmb3Ig
ZmllbGRzIG9mIHRob3NlIHR5cGVzLiBDb2RlCi0gICAgICAgIC8vLyB1c2luZyByZWZsZWN0aW9u
IHNob3VsZCBjYWxsIDxzZWUgY3JlZj0iSXNXcmFwcGVyVHlwZSIvPiB0byBkZXRlcm1pbmUgd2hl
dGhlciBhIG1lc3NhZ2UgZGVzY3JpcHRvciByZXByZXNlbnRzCi0gICAgICAgIC8vLyBhIHdyYXBw
ZXIgdHlwZSwgYW5kIGhhbmRsZSB0aGUgcmVzdWx0IGFwcHJvcHJpYXRlbHkuCi0gICAgICAgIC8v
LyA8L3BhcmE+Ci0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAgIHB1YmxpYyBUeXBlIENs
clR5cGUgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIHBh
cnNlciBmb3IgdGhpcyBtZXNzYWdlIHR5cGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
ICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIDxwYXJhPgotICAgICAgICAvLy8gQXMgPHNl
ZSBjcmVmPSJNZXNzYWdlRGVzY3JpcHRvciIvPiBpcyBub3QgZ2VuZXJpYywgdGhpcyBjYW5ub3Qg
YmUgc3RhdGljYWxseQotICAgICAgICAvLy8gdHlwZWQgdG8gdGhlIHJlbGV2YW50IHR5cGUsIGJ1
dCBpdCBzaG91bGQgcHJvZHVjZSBvYmplY3RzIG9mIGEgdHlwZSBjb21wYXRpYmxlIHdpdGggPHNl
ZSBjcmVmPSJDbHJUeXBlIi8+LgotICAgICAgICAvLy8gPC9wYXJhPgotICAgICAgICAvLy8gPHBh
cmE+Ci0gICAgICAgIC8vLyBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBwcm9wZXJ0eSB3aWxs
IGJlIG5vbi1udWxsIGZvciBhbGwgcmVndWxhciBmaWVsZHMuIEhvd2V2ZXIsCi0gICAgICAgIC8v
LyBpZiBhIG1lc3NhZ2UgY29udGFpbmluZyBhIG1hcCBmaWVsZCBpcyBpbnRyb3NwZWN0ZWQsIHRo
ZSBsaXN0IG9mIG5lc3RlZCBtZXNzYWdlcyB3aWxsIGluY2x1ZGUKLSAgICAgICAgLy8vIGFuIGF1
dG8tZ2VuZXJhdGVkIG5lc3RlZCBrZXkvdmFsdWUgcGFpciBtZXNzYWdlIGZvciB0aGUgZmllbGQu
IE5vIG1lc3NhZ2UgcGFyc2VyIG9iamVjdCBpcyBjcmVhdGVkIGZvcgotICAgICAgICAvLy8gc3Vj
aCBtZXNzYWdlcywgc28gdGhpcyBwcm9wZXJ0eSB3aWxsIHJldHVybiBudWxsIGluIHN1Y2ggY2Fz
ZXMuCi0gICAgICAgIC8vLyA8L3BhcmE+Ci0gICAgICAgIC8vLyA8cGFyYT4KLSAgICAgICAgLy8v
IEZvciB3cmFwcGVyIHR5cGVzICg8c2VlIGNyZWY9Ikdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcy5TdHJpbmdWYWx1ZSIvPiBhbmQgdGhlIGxpa2UpLCB0aGUgcGFyc2VyIHJldHVybmVkIGhl
cmUKLSAgICAgICAgLy8vIHdpbGwgYmUgdGhlIGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUsIG5vdCB0
aGUgbmF0aXZlIHR5cGUgdXNlZCBieSByZWZsZWN0aW9uIGZvciBmaWVsZHMgb2YgdGhvc2UgdHlw
ZXMuIENvZGUKLSAgICAgICAgLy8vIHVzaW5nIHJlZmxlY3Rpb24gc2hvdWxkIGNhbGwgPHNlZSBj
cmVmPSJJc1dyYXBwZXJUeXBlIi8+IHRvIGRldGVybWluZSB3aGV0aGVyIGEgbWVzc2FnZSBkZXNj
cmlwdG9yIHJlcHJlc2VudHMKLSAgICAgICAgLy8vIGEgd3JhcHBlciB0eXBlLCBhbmQgaGFuZGxl
IHRoZSByZXN1bHQgYXBwcm9wcmlhdGVseS4KLSAgICAgICAgLy8vIDwvcGFyYT4KLSAgICAgICAg
Ly8vIDwvcmVtYXJrcz4KLSAgICAgICAgcHVibGljIE1lc3NhZ2VQYXJzZXIgUGFyc2VyIHsgZ2V0
OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyB3aGV0aGVy
IHRoaXMgbWVzc2FnZSBpcyBvbmUgb2YgdGhlICJ3ZWxsIGtub3duIHR5cGVzIiB3aGljaCBtYXkg
aGF2ZSBydW50aW1lL3Byb3RvYyBzdXBwb3J0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAg
ICAgICBpbnRlcm5hbCBib29sIElzV2VsbEtub3duVHlwZSA9PiBGaWxlLlBhY2thZ2UgPT0gImdv
b2dsZS5wcm90b2J1ZiIgJiYgV2VsbEtub3duVHlwZU5hbWVzLkNvbnRhaW5zKEZpbGUuTmFtZSk7
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyB3aGV0aGVyIHRo
aXMgbWVzc2FnZSBpcyBvbmUgb2YgdGhlICJ3cmFwcGVyIHR5cGVzIiB1c2VkIGZvciBmaWVsZHMg
d2hpY2ggcmVwcmVzZW50IHByaW1pdGl2ZSB2YWx1ZXMKLSAgICAgICAgLy8vIHdpdGggdGhlIGFk
ZGl0aW9uIG9mIHByZXNlbmNlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBpbnRl
cm5hbCBib29sIElzV3JhcHBlclR5cGUgPT4gRmlsZS5QYWNrYWdlID09ICJnb29nbGUucHJvdG9i
dWYiICYmIEZpbGUuTmFtZSA9PSAiZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvIjsKLQot
ICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gSWYgdGhpcyBpcyBhIG5lc3RlZCB0eXBl
LCBnZXQgdGhlIG91dGVyIGRlc2NyaXB0b3IsIG90aGVyd2lzZSBudWxsLgotICAgICAgICAvLy8g
PC92YWx1ZT4KLSAgICAgICAgcHVibGljIE1lc3NhZ2VEZXNjcmlwdG9yIENvbnRhaW5pbmdUeXBl
IHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDx2YWx1ZT4KLSAgICAgICAgLy8vIEEgY29sbGVjdGlv
biBvZiBmaWVsZHMsIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgYnkgbmFtZSBvciBmaWVsZCBudW1i
ZXIuCi0gICAgICAgIC8vLyA8L3ZhbHVlPgotICAgICAgICBwdWJsaWMgRmllbGRDb2xsZWN0aW9u
IEZpZWxkcyB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8dmFsdWU+Ci0gICAgICAgIC8vLyBBbiB1
bm1vZGlmaWFibGUgbGlzdCBvZiB0aGlzIG1lc3NhZ2UgdHlwZSdzIG5lc3RlZCB0eXBlcy4KLSAg
ICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBJTGlzdDxNZXNzYWdlRGVzY3JpcHRv
cj4gTmVzdGVkVHlwZXMgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAv
Ly8gQW4gdW5tb2RpZmlhYmxlIGxpc3Qgb2YgdGhpcyBtZXNzYWdlIHR5cGUncyBlbnVtIHR5cGVz
LgotICAgICAgICAvLy8gPC92YWx1ZT4KLSAgICAgICAgcHVibGljIElMaXN0PEVudW1EZXNjcmlw
dG9yPiBFbnVtVHlwZXMgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAv
Ly8gQW4gdW5tb2RpZmlhYmxlIGxpc3Qgb2YgdGhlICJvbmVvZiIgZmllbGQgY29sbGVjdGlvbnMg
aW4gdGhpcyBtZXNzYWdlIHR5cGUuCi0gICAgICAgIC8vLyA8L3ZhbHVlPgotICAgICAgICBwdWJs
aWMgSUxpc3Q8T25lb2ZEZXNjcmlwdG9yPiBPbmVvZnMgeyBnZXQ7IH0KLQotICAgICAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgICAgIC8vLyBGaW5kcyBhIGZpZWxkIGJ5IGZpZWxkIG5hbWUuCi0gICAg
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZSI+VGhlIHVu
cXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZpZWxkIChlLmcuICJmb28iKS48L3BhcmFtPgotICAgICAg
ICAvLy8gPHJldHVybnM+VGhlIGZpZWxkJ3MgZGVzY3JpcHRvciwgb3IgbnVsbCBpZiBub3QgZm91
bmQuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgRmllbGREZXNjcmlwdG9yIEZpbmRGaWVsZEJ5
TmFtZShTdHJpbmcgbmFtZSkgPT4gRmlsZS5EZXNjcmlwdG9yUG9vbC5GaW5kU3ltYm9sPEZpZWxk
RGVzY3JpcHRvcj4oRnVsbE5hbWUgKyAiLiIgKyBuYW1lKTsKLQotICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgIC8vLyBGaW5kcyBhIGZpZWxkIGJ5IGZpZWxkIG51bWJlci4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJudW1iZXIiPlRoZSBmaWVs
ZCBudW1iZXIgd2l0aGluIHRoaXMgbWVzc2FnZSB0eXBlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8
cmV0dXJucz5UaGUgZmllbGQncyBkZXNjcmlwdG9yLCBvciBudWxsIGlmIG5vdCBmb3VuZC48L3Jl
dHVybnM+Ci0gICAgICAgIHB1YmxpYyBGaWVsZERlc2NyaXB0b3IgRmluZEZpZWxkQnlOdW1iZXIo
aW50IG51bWJlcikgPT4gRmlsZS5EZXNjcmlwdG9yUG9vbC5GaW5kRmllbGRCeU51bWJlcih0aGlz
LCBudW1iZXIpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEZpbmRzIGEg
bmVzdGVkIGRlc2NyaXB0b3IgYnkgbmFtZS4gVGhlIGlzIHZhbGlkIGZvciBmaWVsZHMsIG5lc3Rl
ZAotICAgICAgICAvLy8gbWVzc2FnZSB0eXBlcywgb25lb2ZzIGFuZCBlbnVtcy4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJuYW1lIj5UaGUgdW5xdWFs
aWZpZWQgbmFtZSBvZiB0aGUgZGVzY3JpcHRvciwgZS5nLiAiRm9vIjwvcGFyYW0+Ci0gICAgICAg
IC8vLyA8cmV0dXJucz5UaGUgZGVzY3JpcHRvciwgb3IgbnVsbCBpZiBub3QgZm91bmQuPC9yZXR1
cm5zPgotICAgICAgICBwdWJsaWMgVCBGaW5kRGVzY3JpcHRvcjxUPihzdHJpbmcgbmFtZSkgIHdo
ZXJlIFQgOiBjbGFzcywgSURlc2NyaXB0b3IgPT4KLSAgICAgICAgICAgIEZpbGUuRGVzY3JpcHRv
clBvb2wuRmluZFN5bWJvbDxUPihGdWxsTmFtZSArICIuIiArIG5hbWUpOwotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIExvb2tzIHVwIGFuZCBjcm9zcy1saW5rcyBhbGwgZmll
bGRzIGFuZCBuZXN0ZWQgdHlwZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIGlu
dGVybmFsIHZvaWQgQ3Jvc3NMaW5rKCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yZWFjaCAo
TWVzc2FnZURlc2NyaXB0b3IgbWVzc2FnZSBpbiBOZXN0ZWRUeXBlcykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtZXNzYWdlLkNyb3NzTGluaygpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBmb3JlYWNoIChGaWVsZERlc2NyaXB0b3IgZmllbGQgaW4gZmllbGRzSW5EZWNs
YXJhdGlvbk9yZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZpZWxkLkNyb3Nz
TGluaygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3JlYWNoIChPbmVvZkRlc2Ny
aXB0b3Igb25lb2YgaW4gT25lb2ZzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9u
ZW9mLkNyb3NzTGluaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8v
IDxzdW1tYXJ5PgotICAgICAgICAvLy8gQSBjb2xsZWN0aW9uIHRvIHNpbXBsaWZ5IHJldHJpZXZp
bmcgdGhlIGZpZWxkIGFjY2Vzc29yIGZvciBhIHBhcnRpY3VsYXIgZmllbGQuCi0gICAgICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgRmllbGRDb2xsZWN0aW9u
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgTWVzc2FnZURlc2NyaXB0
b3IgbWVzc2FnZURlc2NyaXB0b3I7Ci0KLSAgICAgICAgICAgIGludGVybmFsIEZpZWxkQ29sbGVj
dGlvbihNZXNzYWdlRGVzY3JpcHRvciBtZXNzYWdlRGVzY3JpcHRvcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VEZXNjcmlwdG9yID0gbWVzc2FnZURlc2NyaXB0
b3I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vLyA8dmFsdWU+Ci0gICAgICAgICAg
ICAvLy8gUmV0dXJucyB0aGUgZmllbGRzIGluIHRoZSBtZXNzYWdlIGFzIGFuIGltbXV0YWJsZSBs
aXN0LCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQotICAgICAgICAgICAgLy8vIGFyZSBkZWNs
YXJlZCBpbiB0aGUgc291cmNlIC5wcm90byBmaWxlLgotICAgICAgICAgICAgLy8vIDwvdmFsdWU+
Ci0gICAgICAgICAgICBwdWJsaWMgSUxpc3Q8RmllbGREZXNjcmlwdG9yPiBJbkRlY2xhcmF0aW9u
T3JkZXIoKSA9PiBtZXNzYWdlRGVzY3JpcHRvci5maWVsZHNJbkRlY2xhcmF0aW9uT3JkZXI7Ci0K
LSAgICAgICAgICAgIC8vLyA8dmFsdWU+Ci0gICAgICAgICAgICAvLy8gUmV0dXJucyB0aGUgZmll
bGRzIGluIHRoZSBtZXNzYWdlIGFzIGFuIGltbXV0YWJsZSBsaXN0LCBpbiBhc2NlbmRpbmcgZmll
bGQgbnVtYmVyCi0gICAgICAgICAgICAvLy8gb3JkZXIuIEZpZWxkIG51bWJlcnMgbmVlZCBub3Qg
YmUgY29udGlndW91cywgc28gdGhlcmUgaXMgbm8gZGlyZWN0IG1hcHBpbmcgZnJvbSB0aGUKLSAg
ICAgICAgICAgIC8vLyBpbmRleCBpbiB0aGUgbGlzdCB0byB0aGUgZmllbGQgbnVtYmVyOyB0byBy
ZXRyaWV2ZSBhIGZpZWxkIGJ5IGZpZWxkIG51bWJlciwgaXQgaXMgYmV0dGVyCi0gICAgICAgICAg
ICAvLy8gdG8gdXNlIHRoZSA8c2VlIGNyZWY9IkZpZWxkQ29sbGVjdGlvbiIvPiBpbmRleGVyLgot
ICAgICAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgICAgICBwdWJsaWMgSUxpc3Q8RmllbGRE
ZXNjcmlwdG9yPiBJbkZpZWxkTnVtYmVyT3JkZXIoKSA9PiBtZXNzYWdlRGVzY3JpcHRvci5maWVs
ZHNJbk51bWJlck9yZGVyOwotCi0gICAgICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBtYWtpbmcg
dGhpcyBwdWJsaWMgaW4gdGhlIGZ1dHVyZS4gKEJlaW5nIGNvbnNlcnZhdGl2ZSBmb3Igbm93Li4u
KQotCi0gICAgICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAgICAgLy8vIFJldHVybnMgYSBy
ZWFkLW9ubHkgZGljdGlvbmFyeSBtYXBwaW5nIHRoZSBmaWVsZCBuYW1lcyBpbiB0aGlzIG1lc3Nh
Z2UgYXMgdGhleSdyZSBhdmFpbGFibGUKLSAgICAgICAgICAgIC8vLyBpbiB0aGUgSlNPTiByZXBy
ZXNlbnRhdGlvbiB0byB0aGUgZmllbGQgZGVzY3JpcHRvcnMuIEZvciBleGFtcGxlLCBhIGZpZWxk
IDxjPmZvb19iYXI8L2M+Ci0gICAgICAgICAgICAvLy8gaW4gdGhlIG1lc3NhZ2Ugd291bGQgcmVz
dWx0IHR3byBlbnRyaWVzLCBvbmUgd2l0aCBhIGtleSA8Yz5mb29CYXI8L2M+IGFuZCBvbmUgd2l0
aCBhIGtleQotICAgICAgICAgICAgLy8vIDxjPmZvb19iYXI8L2M+LCBib3RoIHJlZmVycmluZyB0
byB0aGUgc2FtZSBmaWVsZC4KLSAgICAgICAgICAgIC8vLyA8L3ZhbHVlPgotICAgICAgICAgICAg
aW50ZXJuYWwgSURpY3Rpb25hcnk8c3RyaW5nLCBGaWVsZERlc2NyaXB0b3I+IEJ5SnNvbk5hbWUo
KSA9PiBtZXNzYWdlRGVzY3JpcHRvci5qc29uRmllbGRNYXA7Ci0KLSAgICAgICAgICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0b3IgZm9yIHRo
ZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBudW1iZXIuCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5
PgotICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJudW1iZXIiPk51bWJlciBvZiB0aGUgZmll
bGQgdG8gcmV0cmlldmUgdGhlIGRlc2NyaXB0b3IgZm9yPC9wYXJhbT4KLSAgICAgICAgICAgIC8v
LyA8cmV0dXJucz5UaGUgYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBmaWVsZDwvcmV0dXJucz4KLSAg
ICAgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IktleU5vdEZvdW5kRXhjZXB0aW9uIj5UaGUg
bWVzc2FnZSBkZXNjcmlwdG9yIGRvZXMgbm90IGNvbnRhaW4gYSBmaWVsZAotICAgICAgICAgICAg
Ly8vIHdpdGggdGhlIGdpdmVuIG51bWJlcjwvZXhjZXB0aW9uPgotICAgICAgICAgICAgcHVibGlj
IEZpZWxkRGVzY3JpcHRvciB0aGlzW2ludCBudW1iZXJdCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZ2V0Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXIg
ZmllbGREZXNjcmlwdG9yID0gbWVzc2FnZURlc2NyaXB0b3IuRmluZEZpZWxkQnlOdW1iZXIobnVt
YmVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkRGVzY3JpcHRvciA9PSBudWxsKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
S2V5Tm90Rm91bmRFeGNlcHRpb24oIk5vIHN1Y2ggZmllbGQgbnVtYmVyIik7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkRGVzY3JpcHRvcjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgICAgIC8vLyBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBm
aWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZSI+TmFtZSBvZiB0aGUgZmllbGQgdG8gcmV0
cmlldmUgdGhlIGRlc2NyaXB0b3IgZm9yPC9wYXJhbT4KLSAgICAgICAgICAgIC8vLyA8cmV0dXJu
cz5UaGUgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIGZpZWxkPC9yZXR1cm5zPgotICAgICAgICAg
ICAgLy8vIDxleGNlcHRpb24gY3JlZj0iS2V5Tm90Rm91bmRFeGNlcHRpb24iPlRoZSBtZXNzYWdl
IGRlc2NyaXB0b3IgZG9lcyBub3QgY29udGFpbiBhIGZpZWxkCi0gICAgICAgICAgICAvLy8gd2l0
aCB0aGUgZ2l2ZW4gbmFtZTwvZXhjZXB0aW9uPgotICAgICAgICAgICAgcHVibGljIEZpZWxkRGVz
Y3JpcHRvciB0aGlzW3N0cmluZyBuYW1lXQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdldAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkRGVz
Y3JpcHRvciA9IG1lc3NhZ2VEZXNjcmlwdG9yLkZpbmRGaWVsZEJ5TmFtZShuYW1lKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGZpZWxkRGVzY3JpcHRvciA9PSBudWxsKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgS2V5Tm90Rm91bmRF
eGNlcHRpb24oIk5vIHN1Y2ggZmllbGQgbmFtZSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZERlc2NyaXB0b3I7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hh
cnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL01ldGhvZERlc2NyaXB0b3IuY3MgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Nz
aGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vTWV0aG9kRGVzY3JpcHRvci5jcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk1MzlmNmNiZGMyZDU1YTAzZjAzYTg0OGQx
YTBhZTZlZDRiODkyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vTWV0aG9kRGVzY3JpcHRv
ci5jcworKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0jcmVnaW9uIENvcHlyaWdodCBu
b3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2Vu
ZHJlZ2lvbgotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KLXsKLSAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgLy8vIERlc2NyaWJlcyBhIHNpbmdsZSBtZXRob2QgaW4gYSBzZXJ2
aWNlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHNlYWxlZCBjbGFzcyBNZXRob2RE
ZXNjcmlwdG9yIDogRGVzY3JpcHRvckJhc2UKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9u
bHkgTWV0aG9kRGVzY3JpcHRvclByb3RvIHByb3RvOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5
IFNlcnZpY2VEZXNjcmlwdG9yIHNlcnZpY2U7Ci0gICAgICAgIHByaXZhdGUgTWVzc2FnZURlc2Ny
aXB0b3IgaW5wdXRUeXBlOwotICAgICAgICBwcml2YXRlIE1lc3NhZ2VEZXNjcmlwdG9yIG91dHB1
dFR5cGU7Ci0KLSAgICAgICAgLy8vIDx2YWx1ZT4KLSAgICAgICAgLy8vIFRoZSBzZXJ2aWNlIHRo
aXMgbWV0aG9kIGJlbG9uZ3MgdG8uCi0gICAgICAgIC8vLyA8L3ZhbHVlPgotICAgICAgICBwdWJs
aWMgU2VydmljZURlc2NyaXB0b3IgU2VydmljZSB7IGdldCB7IHJldHVybiBzZXJ2aWNlOyB9IH0K
LQotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gVGhlIG1ldGhvZCdzIGlucHV0IHR5
cGUuCi0gICAgICAgIC8vLyA8L3ZhbHVlPgotICAgICAgICBwdWJsaWMgTWVzc2FnZURlc2NyaXB0
b3IgSW5wdXRUeXBlIHsgZ2V0IHsgcmV0dXJuIGlucHV0VHlwZTsgfSB9Ci0KLSAgICAgICAgLy8v
IDx2YWx1ZT4KLSAgICAgICAgLy8vIFRoZSBtZXRob2QncyBpbnB1dCB0eXBlLgotICAgICAgICAv
Ly8gPC92YWx1ZT4KLSAgICAgICAgcHVibGljIE1lc3NhZ2VEZXNjcmlwdG9yIE91dHB1dFR5cGUg
eyBnZXQgeyByZXR1cm4gb3V0cHV0VHlwZTsgfSB9Ci0KLSAgICAgICAgLy8vIDx2YWx1ZT4KLSAg
ICAgICAgLy8vIEluZGljYXRlcyBpZiBjbGllbnQgc3RyZWFtcyBtdWx0aXBsZSByZXF1ZXN0cy4K
LSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBib29sIElzQ2xpZW50U3RyZWFt
aW5nIHsgZ2V0IHsgcmV0dXJuIHByb3RvLkNsaWVudFN0cmVhbWluZzsgfSB9Ci0KLSAgICAgICAg
Ly8vIDx2YWx1ZT4KLSAgICAgICAgLy8vIEluZGljYXRlcyBpZiBzZXJ2ZXIgc3RyZWFtcyBtdWx0
aXBsZSByZXNwb25zZXMuCi0gICAgICAgIC8vLyA8L3ZhbHVlPgotICAgICAgICBwdWJsaWMgYm9v
bCBJc1NlcnZlclN0cmVhbWluZyB7IGdldCB7IHJldHVybiBwcm90by5TZXJ2ZXJTdHJlYW1pbmc7
IH0gfQotCi0gICAgICAgIGludGVybmFsIE1ldGhvZERlc2NyaXB0b3IoTWV0aG9kRGVzY3JpcHRv
clByb3RvIHByb3RvLCBGaWxlRGVzY3JpcHRvciBmaWxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNlcnZpY2VEZXNjcmlwdG9yIHBhcmVudCwgaW50IGluZGV4KQotICAgICAg
ICAgICAgOiBiYXNlKGZpbGUsIHBhcmVudC5GdWxsTmFtZSArICIuIiArIHByb3RvLk5hbWUsIGlu
ZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnByb3RvID0gcHJvdG87Ci0gICAgICAg
ICAgICBzZXJ2aWNlID0gcGFyZW50OwotICAgICAgICAgICAgZmlsZS5EZXNjcmlwdG9yUG9vbC5B
ZGRTeW1ib2wodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBNZXRob2REZXNj
cmlwdG9yUHJvdG8gUHJvdG8geyBnZXQgeyByZXR1cm4gcHJvdG87IH0gfQotCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFRoZSBicmllZiBuYW1lIG9mIHRoZSBkZXNjcmlwdG9y
J3MgdGFyZ2V0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgb3ZlcnJp
ZGUgc3RyaW5nIE5hbWUgeyBnZXQgeyByZXR1cm4gcHJvdG8uTmFtZTsgfSB9Ci0KLSAgICAgICAg
aW50ZXJuYWwgdm9pZCBDcm9zc0xpbmsoKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGVzY3Jp
cHRvciBsb29rdXAgPSBGaWxlLkRlc2NyaXB0b3JQb29sLkxvb2t1cFN5bWJvbChQcm90by5JbnB1
dFR5cGUsIHRoaXMpOwotICAgICAgICAgICAgaWYgKCEobG9va3VwIGlzIE1lc3NhZ2VEZXNjcmlw
dG9yKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRGVzY3JpcHRv
clZhbGlkYXRpb25FeGNlcHRpb24odGhpcywgIlwiIiArIFByb3RvLklucHV0VHlwZSArICJcIiBp
cyBub3QgYSBtZXNzYWdlIHR5cGUuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnB1
dFR5cGUgPSAoTWVzc2FnZURlc2NyaXB0b3IpIGxvb2t1cDsKLQotICAgICAgICAgICAgbG9va3Vw
ID0gRmlsZS5EZXNjcmlwdG9yUG9vbC5Mb29rdXBTeW1ib2woUHJvdG8uT3V0cHV0VHlwZSwgdGhp
cyk7Ci0gICAgICAgICAgICBpZiAoIShsb29rdXAgaXMgTWVzc2FnZURlc2NyaXB0b3IpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlv
bkV4Y2VwdGlvbih0aGlzLCAiXCIiICsgUHJvdG8uT3V0cHV0VHlwZSArICJcIiBpcyBub3QgYSBt
ZXNzYWdlIHR5cGUuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRwdXRUeXBlID0g
KE1lc3NhZ2VEZXNjcmlwdG9yKSBsb29rdXA7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1
Zi9SZWZsZWN0aW9uL09uZW9mQWNjZXNzb3IuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVm
L1JlZmxlY3Rpb24vT25lb2ZBY2Nlc3Nvci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODcxNGFiMThlZmU3YzQ5MGU5ZTcwMTVkNjVmMzY3YzAwMWY0OTVmMC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmL1JlZmxlY3Rpb24vT25lb2ZBY2Nlc3Nvci5jcworKysgL2Rldi9udWxsCkBAIC0xLDkwICsw
LDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVz
aW5nIFN5c3RlbS5SZWZsZWN0aW9uOwotdXNpbmcgR29vZ2xlLlByb3RvYnVmLkNvbXBhdGliaWxp
dHk7Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbgotewotICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAvLy8gUmVmbGVjdGlvbiBhY2Nlc3MgZm9yIGEgb25lb2YsIGFsbG93aW5n
IGNsZWFyIGFuZCAiZ2V0IGNhc2UiIGFjdGlvbnMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgc2VhbGVkIGNsYXNzIE9uZW9mQWNjZXNzb3IKLSAgICB7Ci0gICAgICAgIHByaXZhdGUg
cmVhZG9ubHkgRnVuYzxJTWVzc2FnZSwgaW50PiBjYXNlRGVsZWdhdGU7Ci0gICAgICAgIHByaXZh
dGUgcmVhZG9ubHkgQWN0aW9uPElNZXNzYWdlPiBjbGVhckRlbGVnYXRlOwotICAgICAgICBwcml2
YXRlIE9uZW9mRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAgICAgIGludGVybmFsIE9uZW9m
QWNjZXNzb3IoUHJvcGVydHlJbmZvIGNhc2VQcm9wZXJ0eSwgTWV0aG9kSW5mbyBjbGVhck1ldGhv
ZCwgT25lb2ZEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIAotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIWNhc2VQcm9wZXJ0eS5DYW5SZWFkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IHJlYWQgZnJvbSBwcm9wZXJ0eSIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRv
cjsKLSAgICAgICAgICAgIGNhc2VEZWxlZ2F0ZSA9IFJlZmxlY3Rpb25VdGlsLkNyZWF0ZUZ1bmNJ
TWVzc2FnZVQ8aW50PihjYXNlUHJvcGVydHkuR2V0R2V0TWV0aG9kKCkpOwotCi0gICAgICAgICAg
ICB0aGlzLmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwotICAgICAgICAgICAgY2xlYXJEZWxlZ2F0
ZSA9IFJlZmxlY3Rpb25VdGlsLkNyZWF0ZUFjdGlvbklNZXNzYWdlKGNsZWFyTWV0aG9kKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEdldHMgdGhlIGRl
c2NyaXB0b3IgZm9yIHRoaXMgb25lb2YuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IC8vLyA8dmFsdWU+Ci0gICAgICAgIC8vLyBUaGUgZGVzY3JpcHRvciBvZiB0aGUgb25lb2YuCi0g
ICAgICAgIC8vLyA8L3ZhbHVlPgotICAgICAgICBwdWJsaWMgT25lb2ZEZXNjcmlwdG9yIERlc2Ny
aXB0b3IgeyBnZXQgeyByZXR1cm4gZGVzY3JpcHRvcjsgfSB9Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gQ2xlYXJzIHRoZSBvbmVvZiBpbiB0aGUgc3BlY2lmaWVkIG1lc3Nh
Z2UuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyB2b2lkIENsZWFyKElN
ZXNzYWdlIG1lc3NhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNsZWFyRGVsZWdhdGUobWVz
c2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBJ
bmRpY2F0ZXMgd2hpY2ggZmllbGQgaW4gdGhlIG9uZW9mIGlzIHNldCBmb3Igc3BlY2lmaWVkIG1l
c3NhZ2UKLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIEZpZWxkRGVzY3Jp
cHRvciBHZXRDYXNlRmllbGREZXNjcmlwdG9yKElNZXNzYWdlIG1lc3NhZ2UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBmaWVsZE51bWJlciA9IGNhc2VEZWxlZ2F0ZShtZXNzYWdlKTsKLSAg
ICAgICAgICAgIGlmIChmaWVsZE51bWJlciA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuQ29udGFpbmluZ1R5cGUuRmluZEZpZWxkQnlOdW1iZXIo
ZmllbGROdW1iZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVm
L1JlZmxlY3Rpb24vT25lb2ZEZXNjcmlwdG9yLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1
Zi9SZWZsZWN0aW9uL09uZW9mRGVzY3JpcHRvci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjIwMjBhY2YwNjYwMzcyMTI5MGZhYWI3N2FiNzc0MDcyZmNjNDBiNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlBy
b3RvYnVmL1JlZmxlY3Rpb24vT25lb2ZEZXNjcmlwdG9yLmNzCisrKyAvZGV2L251bGwKQEAgLTEs
MTIyICswLDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3Rl
bS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLk9iamVjdE1v
ZGVsOwotdXNpbmcgR29vZ2xlLlByb3RvYnVmLkNvbXBhdGliaWxpdHk7Ci0KLW5hbWVzcGFjZSBH
b29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8g
RGVzY3JpYmVzIGEgIm9uZW9mIiBmaWVsZCBjb2xsZWN0aW9uIGluIGEgbWVzc2FnZSB0eXBlOiBh
IHNldCBvZgotICAgIC8vLyBmaWVsZHMgb2Ygd2hpY2ggYXQgbW9zdCBvbmUgY2FuIGJlIHNldCBp
biBhbnkgcGFydGljdWxhciBtZXNzYWdlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGlj
IHNlYWxlZCBjbGFzcyBPbmVvZkRlc2NyaXB0b3IgOiBEZXNjcmlwdG9yQmFzZQotICAgIHsKLSAg
ICAgICAgcHJpdmF0ZSByZWFkb25seSBPbmVvZkRlc2NyaXB0b3JQcm90byBwcm90bzsKLSAgICAg
ICAgcHJpdmF0ZSBNZXNzYWdlRGVzY3JpcHRvciBjb250YWluaW5nVHlwZTsKLSAgICAgICAgcHJp
dmF0ZSBJTGlzdDxGaWVsZERlc2NyaXB0b3I+IGZpZWxkczsKLSAgICAgICAgcHJpdmF0ZSByZWFk
b25seSBPbmVvZkFjY2Vzc29yIGFjY2Vzc29yOwotCi0gICAgICAgIGludGVybmFsIE9uZW9mRGVz
Y3JpcHRvcihPbmVvZkRlc2NyaXB0b3JQcm90byBwcm90bywgRmlsZURlc2NyaXB0b3IgZmlsZSwg
TWVzc2FnZURlc2NyaXB0b3IgcGFyZW50LCBpbnQgaW5kZXgsIHN0cmluZyBjbHJOYW1lKQotICAg
ICAgICAgICAgOiBiYXNlKGZpbGUsIGZpbGUuQ29tcHV0ZUZ1bGxOYW1lKHBhcmVudCwgcHJvdG8u
TmFtZSksIGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnByb3RvID0gcHJvdG87
Ci0gICAgICAgICAgICBjb250YWluaW5nVHlwZSA9IHBhcmVudDsKLQotICAgICAgICAgICAgZmls
ZS5EZXNjcmlwdG9yUG9vbC5BZGRTeW1ib2wodGhpcyk7Ci0gICAgICAgICAgICBhY2Nlc3NvciA9
IENyZWF0ZUFjY2Vzc29yKGNsck5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1t
YXJ5PgotICAgICAgICAvLy8gVGhlIGJyaWVmIG5hbWUgb2YgdGhlIGRlc2NyaXB0b3IncyB0YXJn
ZXQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJp
bmcgTmFtZSB7IGdldCB7IHJldHVybiBwcm90by5OYW1lOyB9IH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRzIHRoZSBtZXNzYWdlIHR5cGUgY29udGFpbmluZyB0aGlz
IG9uZW9mLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHZhbHVlPgotICAg
ICAgICAvLy8gVGhlIG1lc3NhZ2UgdHlwZSBjb250YWluaW5nIHRoaXMgb25lb2YuCi0gICAgICAg
IC8vLyA8L3ZhbHVlPgotICAgICAgICBwdWJsaWMgTWVzc2FnZURlc2NyaXB0b3IgQ29udGFpbmlu
Z1R5cGUKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGNvbnRhaW5pbmdUeXBl
OyB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRz
IHRoZSBmaWVsZHMgd2l0aGluIHRoaXMgb25lb2YsIGluIGRlY2xhcmF0aW9uIG9yZGVyLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAvLy8gVGhl
IGZpZWxkcyB3aXRoaW4gdGhpcyBvbmVvZiwgaW4gZGVjbGFyYXRpb24gb3JkZXIuCi0gICAgICAg
IC8vLyA8L3ZhbHVlPgotICAgICAgICBwdWJsaWMgSUxpc3Q8RmllbGREZXNjcmlwdG9yPiBGaWVs
ZHMgeyBnZXQgeyByZXR1cm4gZmllbGRzOyB9IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgICAgIC8vLyBHZXRzIGFuIGFjY2Vzc29yIGZvciByZWZsZWN0aXZlIGFjY2VzcyB0byB0aGUg
dmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb25lb2YKLSAgICAgICAgLy8vIGluIGEgcGFydGlj
dWxhciBtZXNzYWdlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHZhbHVl
PgotICAgICAgICAvLy8gVGhlIGFjY2Vzc29yIHVzZWQgZm9yIHJlZmxlY3RpdmUgYWNjZXNzLgot
ICAgICAgICAvLy8gPC92YWx1ZT4KLSAgICAgICAgcHVibGljIE9uZW9mQWNjZXNzb3IgQWNjZXNz
b3IgeyBnZXQgeyByZXR1cm4gYWNjZXNzb3I7IH0gfQotCi0gICAgICAgIGludGVybmFsIHZvaWQg
Q3Jvc3NMaW5rKCkKLSAgICAgICAgewotICAgICAgICAgICAgTGlzdDxGaWVsZERlc2NyaXB0b3I+
IGZpZWxkQ29sbGVjdGlvbiA9IG5ldyBMaXN0PEZpZWxkRGVzY3JpcHRvcj4oKTsKLSAgICAgICAg
ICAgIGZvcmVhY2ggKHZhciBmaWVsZCBpbiBDb250YWluaW5nVHlwZS5GaWVsZHMuSW5EZWNsYXJh
dGlvbk9yZGVyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpZWxkLkNv
bnRhaW5pbmdPbmVvZiA9PSB0aGlzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgZmllbGRDb2xsZWN0aW9uLkFkZChmaWVsZCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZmllbGRzID0gbmV3IFJlYWRPbmx5Q29sbGVjdGlvbjxG
aWVsZERlc2NyaXB0b3I+KGZpZWxkQ29sbGVjdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBw
cml2YXRlIE9uZW9mQWNjZXNzb3IgQ3JlYXRlQWNjZXNzb3Ioc3RyaW5nIGNsck5hbWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHZhciBjYXNlUHJvcGVydHkgPSBjb250YWluaW5nVHlwZS5DbHJU
eXBlLkdldFByb3BlcnR5KGNsck5hbWUgKyAiQ2FzZSIpOwotICAgICAgICAgICAgaWYgKGNhc2VQ
cm9wZXJ0eSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5l
dyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLCAkIlByb3BlcnR5IHtjbHJOYW1l
fUNhc2Ugbm90IGZvdW5kIGluIHtjb250YWluaW5nVHlwZS5DbHJUeXBlfSIpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdmFyIGNsZWFyTWV0aG9kID0gY29udGFpbmluZ1R5cGUuQ2xyVHlw
ZS5HZXRNZXRob2QoIkNsZWFyIiArIGNsck5hbWUpOwotICAgICAgICAgICAgaWYgKGNsZWFyTWV0
aG9kID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERl
c2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKHRoaXMsICQiTWV0aG9kIENsZWFye2Nsck5hbWV9
IG5vdCBmb3VuZCBpbiB7Y29udGFpbmluZ1R5cGUuQ2xyVHlwZX0iKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIG5ldyBPbmVvZkFjY2Vzc29yKGNhc2VQcm9wZXJ0eSwgY2xl
YXJNZXRob2QsIHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAv
c3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL09yaWdpbmFsTmFtZUF0dHJpYnV0ZS5jcyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9PcmlnaW5hbE5hbWVBdHRyaWJ1
dGUuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZjlhYjk4YzMyNDcwN2NkZGFk
YWVhMjEzMGUyM2ZkY2IwMjNmZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL09yaWdpbmFs
TmFtZUF0dHJpYnV0ZS5jcworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLe+7vyNyZWdp
b24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLQotbmFtZXNwYWNlIEdvb2ds
ZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBTcGVj
aWZpZXMgdGhlIG9yaWdpbmFsIG5hbWUgKGluIHRoZSAucHJvdG8gZmlsZSkgb2YgYSBuYW1lZCBl
bGVtZW50LAotICAgIC8vLyBzdWNoIGFzIGFuIGVudW0gdmFsdWUuCi0gICAgLy8vIDwvc3VtbWFy
eT4KLSAgICBbQXR0cmlidXRlVXNhZ2UoQXR0cmlidXRlVGFyZ2V0cy5GaWVsZCldCi0gICAgcHVi
bGljIGNsYXNzIE9yaWdpbmFsTmFtZUF0dHJpYnV0ZSA6IEF0dHJpYnV0ZQotICAgIHsKLSAgICAg
ICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgaW4g
dGhlIC5wcm90byBmaWxlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMg
c3RyaW5nIE5hbWUgeyBnZXQ7IHNldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIENvbnN0cnVjdHMgYSBuZXcgYXR0cmlidXRlIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4g
bmFtZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJu
YW1lIj5UaGUgbmFtZSBvZiB0aGUgZWxlbWVudCBpbiB0aGUgLnByb3RvIGZpbGUuPC9wYXJhbT4K
LSAgICAgICAgcHVibGljIE9yaWdpbmFsTmFtZUF0dHJpYnV0ZShzdHJpbmcgbmFtZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgTmFtZSA9IFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwo
bmFtZSwgbmFtZW9mKG5hbWUpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxl
Y3Rpb24vUGFja2FnZURlc2NyaXB0b3IuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1Jl
ZmxlY3Rpb24vUGFja2FnZURlc2NyaXB0b3IuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU1NDdkODM0OTg2ZGU4ZDgwNzAzNTA0NDY5ZTljMzliM2Q4YWU5M2QuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90
b2J1Zi9SZWZsZWN0aW9uL1BhY2thZ2VEZXNjcmlwdG9yLmNzCisrKyAvZGV2L251bGwKQEAgLTEs
NjggKzAsMCBAQAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotbmFtZXNwYWNlIEdvb2ds
ZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBSZXBy
ZXNlbnRzIGEgcGFja2FnZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgV2UgdXNlIFBhY2thZ2VEZXNj
cmlwdG9ycwotICAgIC8vLyBqdXN0IGFzIHBsYWNlaG9sZGVycyBzbyB0aGF0IHNvbWVvbmUgY2Fu
bm90IGRlZmluZSwgc2F5LCBhIG1lc3NhZ2UgdHlwZQotICAgIC8vLyB0aGF0IGhhcyB0aGUgc2Ft
ZSBuYW1lIGFzIGFuIGV4aXN0aW5nIHBhY2thZ2UuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBp
bnRlcm5hbCBzZWFsZWQgY2xhc3MgUGFja2FnZURlc2NyaXB0b3IgOiBJRGVzY3JpcHRvcgotICAg
IHsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdHJpbmcgbmFtZTsKLSAgICAgICAgcHJpdmF0
ZSByZWFkb25seSBzdHJpbmcgZnVsbE5hbWU7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRmls
ZURlc2NyaXB0b3IgZmlsZTsKLQotICAgICAgICBpbnRlcm5hbCBQYWNrYWdlRGVzY3JpcHRvcihz
dHJpbmcgbmFtZSwgc3RyaW5nIGZ1bGxOYW1lLCBGaWxlRGVzY3JpcHRvciBmaWxlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB0aGlzLmZpbGUgPSBmaWxlOwotICAgICAgICAgICAgdGhpcy5mdWxs
TmFtZSA9IGZ1bGxOYW1lOwotICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHB1YmxpYyBzdHJpbmcgTmFtZQotICAgICAgICB7Ci0gICAgICAgICAgICBn
ZXQgeyByZXR1cm4gbmFtZTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0cmluZyBG
dWxsTmFtZQotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQgeyByZXR1cm4gZnVsbE5hbWU7IH0K
LSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBGaWxlRGVzY3JpcHRvciBGaWxlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdldCB7IHJldHVybiBmaWxlOyB9Ci0gICAgICAgIH0KLSAgICB9Ci19
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL1BhcnRpYWxDbGFzc2VzLmNzIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL1BhcnRpYWxDbGFzc2VzLmNzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2YzI4NTQxMGQ0YjQwODczYTIzODYzNjdjZDU0NjIxY2YxZTFjMjNhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9H
b29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9QYXJ0aWFsQ2xhc3Nlcy5jcworKysgL2Rldi9udWxs
CkBAIC0xLDU5ICswLDAgQEAKLSNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLS8vIFRoaXMg
ZmlsZSBqdXN0IGNvbnRhaW5zIHBhcnRpYWwgY2xhc3NlcyBmb3IgYW55IGF1dG9nZW5lcmF0ZWQg
Y2xhc3NlcyB0aGF0IG5lZWQgYWRkaXRpb25hbCBzdXBwb3J0LgotbmFtZXNwYWNlIEdvb2dsZS5Q
cm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgaW50ZXJuYWwgcGFydGlhbCBjbGFzcyBGaWVsZERl
c2NyaXB0b3JQcm90bwotICAgIHsKLSAgICAgICAgLy8gV2UgY2FuJ3QgdGVsbCB0aGUgZGlmZmVy
ZW5jZSBiZXR3ZWVuICJleHBsaWNpdGx5IHNldCB0byAwIiBhbmQgIm5vdCBzZXQiCi0gICAgICAg
IC8vIGluIHByb3RvMywgYnV0IHdlIG5lZWQgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBmb3IgT25l
b2ZJbmRleC4gZGVzY3JpcHRvci5wcm90bwotICAgICAgICAvLyBpcyByZWFsbHkgYSBwcm90bzIg
ZmlsZSwgYnV0IHRoZSBydW50aW1lIGRvZXNuJ3Qga25vdyBhYm91dCBwcm90bzIgc2VtYW50aWNz
Li4uCi0gICAgICAgIC8vIFdlIGZha2UgaXQgYnkgZGVmYXVsdGluZyB0byAtMS4KLSAgICAgICAg
cGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgT25l
b2ZJbmRleCA9IC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50ZXJuYWwgcGFydGlhbCBj
bGFzcyBGaWVsZE9wdGlvbnMKLSAgICB7Ci0gICAgICAgIC8vIFdlIGNhbid0IHRlbGwgdGhlIGRp
ZmZlcmVuY2UgYmV0d2VlbiAiZXhwbGljaXRseSBzZXQgdG8gZmFsc2UiIGFuZCAibm90IHNldCIK
LSAgICAgICAgLy8gaW4gcHJvdG8zLCBidXQgd2UgbmVlZCB0byB0ZWxsIHRoZSBkaWZmZXJlbmNl
IGZvciBGaWVsZERlc2NyaXB0b3IuSXNQYWNrZWQuCi0gICAgICAgIC8vIFRoaXMgd29uJ3Qgd29y
ayBpZiB3ZSBldmVyIG5lZWQgdG8gc3VwcG9ydCBwcm90bzIsIGJ1dCBhdCB0aGF0IHBvaW50IHdl
J2xsIGJlCi0gICAgICAgIC8vIGFibGUgdG8gcmVtb3ZlIHRoaXMgaGFjayBhbmQgdXNlIGZpZWxk
IHByZXNlbmNlIGluc3RlYWQuIAotICAgICAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24o
KQotICAgICAgICB7Ci0gICAgICAgICAgICBQYWNrZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9H
b29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9SZWZsZWN0aW9uVXRpbC5jcyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9H
b29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9SZWZsZWN0aW9uVXRpbC5jcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZGY4MjBjYTM2YmQ4ZWI0MWQwZjU3N2M1NTA4ZDA5ZGI3YmY4MGIw
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vUmVmbGVjdGlvblV0aWwuY3MKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDcgKzAsMCBAQAotI3JlZ2lvbiBDb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNl
bnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNlbmRyZWdpb24KLQotdXNp
bmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0
ZW0uTGlucS5FeHByZXNzaW9uczsKLXVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOwotCi1uYW1lc3Bh
Y2UgR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
Ly8vIFRoZSBtZXRob2RzIGluIHRoaXMgY2xhc3MgYXJlIHNvbWV3aGF0IGV2aWwsIGFuZCBzaG91
bGQgbm90IGJlIHRhbXBlcmVkIHdpdGggbGlnaHRseS4KLSAgICAvLy8gQmFzaWNhbGx5IHRoZXkg
YWxsb3cgdGhlIGNyZWF0aW9uIG9mIHJlbGF0aXZlbHkgd2Vha2x5IHR5cGVkIGRlbGVnYXRlcyBm
cm9tIE1ldGhvZEluZm9zCi0gICAgLy8vIHdoaWNoIGFyZSBtb3JlIHN0cm9uZ2x5IHR5cGVkLiBU
aGV5IGRvIHRoaXMgYnkgY3JlYXRpbmcgYW4gYXBwcm9wcmlhdGUgc3Ryb25nbHkgdHlwZWQKLSAg
ICAvLy8gZGVsZWdhdGUgZnJvbSB0aGUgTWV0aG9kSW5mbywgYW5kIHRoZW4gY2FsbGluZyB0aGF0
IHdpdGhpbiBhbiBhbm9ueW1vdXMgbWV0aG9kLgotICAgIC8vLyBNaW5kLWJlbmRpbmcgc3R1ZmYg
KGF0IGxlYXN0IHRvIHlvdXIgaHVtYmxlIG5hcnJhdG9yKSBidXQgdGhlIHJlc3VsdGluZyBkZWxl
Z2F0ZXMgYXJlCi0gICAgLy8vIHZlcnkgZmFzdCBjb21wYXJlZCB3aXRoIGNhbGxpbmcgSW52b2tl
IGxhdGVyIG9uLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgaW50ZXJuYWwgc3RhdGljIGNsYXNz
IFJlZmxlY3Rpb25VdGlsCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8v
LyBFbXB0eSBUeXBlW10gdXNlZCB3aGVuIGNhbGxpbmcgR2V0UHJvcGVydHkgdG8gZm9yY2UgcHJv
cGVydHkgaW5zdGVhZCBvZiBpbmRleGVyIGZldGNoaW5nLgotICAgICAgICAvLy8gPC9zdW1tYXJ5
PgotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgcmVhZG9ubHkgVHlwZVtdIEVtcHR5VHlwZXMgPSBu
ZXcgVHlwZVswXTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVz
IGEgZGVsZWdhdGUgd2hpY2ggd2lsbCBjYXN0IHRoZSBhcmd1bWVudCB0byB0aGUgYXBwcm9wcmlh
dGUgbWV0aG9kIHRhcmdldCB0eXBlLAotICAgICAgICAvLy8gY2FsbCB0aGUgbWV0aG9kIG9uIGl0
LCB0aGVuIGNvbnZlcnQgdGhlIHJlc3VsdCB0byBvYmplY3QuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyBGdW5jPElNZXNzYWdlLCBvYmplY3Q+IENyZWF0
ZUZ1bmNJTWVzc2FnZU9iamVjdChNZXRob2RJbmZvIG1ldGhvZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgUGFyYW1ldGVyRXhwcmVzc2lvbiBwYXJhbWV0ZXIgPSBFeHByZXNzaW9uLlBhcmFtZXRl
cih0eXBlb2YoSU1lc3NhZ2UpLCAicCIpOwotICAgICAgICAgICAgRXhwcmVzc2lvbiBkb3duY2Fz
dCA9IEV4cHJlc3Npb24uQ29udmVydChwYXJhbWV0ZXIsIG1ldGhvZC5EZWNsYXJpbmdUeXBlKTsK
LSAgICAgICAgICAgIEV4cHJlc3Npb24gY2FsbCA9IEV4cHJlc3Npb24uQ2FsbChkb3duY2FzdCwg
bWV0aG9kKTsKLSAgICAgICAgICAgIEV4cHJlc3Npb24gdXBjYXN0ID0gRXhwcmVzc2lvbi5Db252
ZXJ0KGNhbGwsIHR5cGVvZihvYmplY3QpKTsKLSAgICAgICAgICAgIHJldHVybiBFeHByZXNzaW9u
LkxhbWJkYTxGdW5jPElNZXNzYWdlLCBvYmplY3Q+Pih1cGNhc3QsIHBhcmFtZXRlcikuQ29tcGls
ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3Jl
YXRlcyBhIGRlbGVnYXRlIHdoaWNoIHdpbGwgY2FzdCB0aGUgYXJndW1lbnQgdG8gdGhlIGFwcHJv
cHJpYXRlIG1ldGhvZCB0YXJnZXQgdHlwZSwKLSAgICAgICAgLy8vIGNhbGwgdGhlIG1ldGhvZCBv
biBpdCwgdGhlbiBjb252ZXJ0IHRoZSByZXN1bHQgdG8gdGhlIHNwZWNpZmllZCB0eXBlLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgRnVuYzxJTWVzc2Fn
ZSwgVD4gQ3JlYXRlRnVuY0lNZXNzYWdlVDxUPihNZXRob2RJbmZvIG1ldGhvZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgUGFyYW1ldGVyRXhwcmVzc2lvbiBwYXJhbWV0ZXIgPSBFeHByZXNzaW9u
LlBhcmFtZXRlcih0eXBlb2YoSU1lc3NhZ2UpLCAicCIpOwotICAgICAgICAgICAgRXhwcmVzc2lv
biBkb3duY2FzdCA9IEV4cHJlc3Npb24uQ29udmVydChwYXJhbWV0ZXIsIG1ldGhvZC5EZWNsYXJp
bmdUeXBlKTsKLSAgICAgICAgICAgIEV4cHJlc3Npb24gY2FsbCA9IEV4cHJlc3Npb24uQ2FsbChk
b3duY2FzdCwgbWV0aG9kKTsKLSAgICAgICAgICAgIEV4cHJlc3Npb24gdXBjYXN0ID0gRXhwcmVz
c2lvbi5Db252ZXJ0KGNhbGwsIHR5cGVvZihUKSk7Ci0gICAgICAgICAgICByZXR1cm4gRXhwcmVz
c2lvbi5MYW1iZGE8RnVuYzxJTWVzc2FnZSwgVD4+KHVwY2FzdCwgcGFyYW1ldGVyKS5Db21waWxl
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVh
dGVzIGEgZGVsZWdhdGUgd2hpY2ggd2lsbCBleGVjdXRlIHRoZSBnaXZlbiBtZXRob2QgYWZ0ZXIg
Y2FzdGluZyB0aGUgZmlyc3QgYXJndW1lbnQgdG8KLSAgICAgICAgLy8vIHRoZSB0YXJnZXQgdHlw
ZSBvZiB0aGUgbWV0aG9kLCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgZmlyc3QgcGFy
YW1ldGVyIHR5cGUgb2YgdGhlIG1ldGhvZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgaW50ZXJuYWwgc3RhdGljIEFjdGlvbjxJTWVzc2FnZSwgb2JqZWN0PiBDcmVhdGVBY3Rpb25J
TWVzc2FnZU9iamVjdChNZXRob2RJbmZvIG1ldGhvZCkKLSAgICAgICAgewotICAgICAgICAgICAg
UGFyYW1ldGVyRXhwcmVzc2lvbiB0YXJnZXRQYXJhbWV0ZXIgPSBFeHByZXNzaW9uLlBhcmFtZXRl
cih0eXBlb2YoSU1lc3NhZ2UpLCAidGFyZ2V0Iik7Ci0gICAgICAgICAgICBQYXJhbWV0ZXJFeHBy
ZXNzaW9uIGFyZ1BhcmFtZXRlciA9IEV4cHJlc3Npb24uUGFyYW1ldGVyKHR5cGVvZihvYmplY3Qp
LCAiYXJnIik7Ci0gICAgICAgICAgICBFeHByZXNzaW9uIGNhc3RUYXJnZXQgPSBFeHByZXNzaW9u
LkNvbnZlcnQodGFyZ2V0UGFyYW1ldGVyLCBtZXRob2QuRGVjbGFyaW5nVHlwZSk7Ci0gICAgICAg
ICAgICBFeHByZXNzaW9uIGNhc3RBcmd1bWVudCA9IEV4cHJlc3Npb24uQ29udmVydChhcmdQYXJh
bWV0ZXIsIG1ldGhvZC5HZXRQYXJhbWV0ZXJzKClbMF0uUGFyYW1ldGVyVHlwZSk7Ci0gICAgICAg
ICAgICBFeHByZXNzaW9uIGNhbGwgPSBFeHByZXNzaW9uLkNhbGwoY2FzdFRhcmdldCwgbWV0aG9k
LCBjYXN0QXJndW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIEV4cHJlc3Npb24uTGFtYmRhPEFj
dGlvbjxJTWVzc2FnZSwgb2JqZWN0Pj4oY2FsbCwgdGFyZ2V0UGFyYW1ldGVyLCBhcmdQYXJhbWV0
ZXIpLkNvbXBpbGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAg
ICAgLy8vIENyZWF0ZXMgYSBkZWxlZ2F0ZSB3aGljaCB3aWxsIGV4ZWN1dGUgdGhlIGdpdmVuIG1l
dGhvZCBhZnRlciBjYXN0aW5nIHRoZSBmaXJzdCBhcmd1bWVudCB0bwotICAgICAgICAvLy8gdGhl
IHRhcmdldCB0eXBlIG9mIHRoZSBtZXRob2QuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
ICAgIGludGVybmFsIHN0YXRpYyBBY3Rpb248SU1lc3NhZ2U+IENyZWF0ZUFjdGlvbklNZXNzYWdl
KE1ldGhvZEluZm8gbWV0aG9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBQYXJhbWV0ZXJFeHBy
ZXNzaW9uIHRhcmdldFBhcmFtZXRlciA9IEV4cHJlc3Npb24uUGFyYW1ldGVyKHR5cGVvZihJTWVz
c2FnZSksICJ0YXJnZXQiKTsKLSAgICAgICAgICAgIEV4cHJlc3Npb24gY2FzdFRhcmdldCA9IEV4
cHJlc3Npb24uQ29udmVydCh0YXJnZXRQYXJhbWV0ZXIsIG1ldGhvZC5EZWNsYXJpbmdUeXBlKTsK
LSAgICAgICAgICAgIEV4cHJlc3Npb24gY2FsbCA9IEV4cHJlc3Npb24uQ2FsbChjYXN0VGFyZ2V0
LCBtZXRob2QpOwotICAgICAgICAgICAgcmV0dXJuIEV4cHJlc3Npb24uTGFtYmRhPEFjdGlvbjxJ
TWVzc2FnZT4+KGNhbGwsIHRhcmdldFBhcmFtZXRlcikuQ29tcGlsZSgpOwotICAgICAgICB9ICAg
ICAgICAKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9j
c2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL1JlcGVhdGVkRmllbGRBY2Nlc3Nv
ci5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9SZXBlYXRlZEZpZWxk
QWNjZXNzb3IuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNDA4NDcwOTI5YmYy
NTBiN2YwMTA0ZjM0MjA5MTk4ZGMwZmRhNjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL1Jl
cGVhdGVkRmllbGRBY2Nlc3Nvci5jcworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLe+7
vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNSBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3Rl
bS5Db2xsZWN0aW9uczsKLXVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOwotCi1uYW1lc3BhY2UgR29v
Z2xlLlByb3RvYnVmLlJlZmxlY3Rpb24KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEFj
Y2Vzc29yIGZvciByZXBlYXRlZCBmaWVsZHMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBpbnRl
cm5hbCBzZWFsZWQgY2xhc3MgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yIDogRmllbGRBY2Nlc3NvckJh
c2UKLSAgICB7Ci0gICAgICAgIGludGVybmFsIFJlcGVhdGVkRmllbGRBY2Nlc3NvcihQcm9wZXJ0
eUluZm8gcHJvcGVydHksIEZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yKSA6IGJhc2UocHJvcGVy
dHksIGRlc2NyaXB0b3IpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBv
dmVycmlkZSB2b2lkIENsZWFyKElNZXNzYWdlIG1lc3NhZ2UpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIElMaXN0IGxpc3QgPSAoSUxpc3QpIEdldFZhbHVlKG1lc3NhZ2UpOwotICAgICAgICAgICAg
bGlzdC5DbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQg
U2V0VmFsdWUoSU1lc3NhZ2UgbWVzc2FnZSwgb2JqZWN0IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiU2V0VmFsdWUgaXMg
bm90IGltcGxlbWVudGVkIGZvciByZXBlYXRlZCBmaWVsZHMiKTsKLSAgICAgICAgfQotCi0gICAg
fQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9uL1Nl
cnZpY2VEZXNjcmlwdG9yLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9u
L1NlcnZpY2VEZXNjcmlwdG9yLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzBh
NTAxMDQyNDFhMDMwZGQ5NjkwNDAyYTNiNTNlZmM2NWQ0M2Y3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVm
bGVjdGlvbi9TZXJ2aWNlRGVzY3JpcHRvci5jcworKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAg
QEAKLSNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5
c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb24KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIERlc2NyaWJlcyBhIHNlcnZp
Y2UgdHlwZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgU2Vy
dmljZURlc2NyaXB0b3IgOiBEZXNjcmlwdG9yQmFzZQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBy
ZWFkb25seSBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIHByb3RvOwotICAgICAgICBwcml2YXRlIHJl
YWRvbmx5IElMaXN0PE1ldGhvZERlc2NyaXB0b3I+IG1ldGhvZHM7Ci0KLSAgICAgICAgaW50ZXJu
YWwgU2VydmljZURlc2NyaXB0b3IoU2VydmljZURlc2NyaXB0b3JQcm90byBwcm90bywgRmlsZURl
c2NyaXB0b3IgZmlsZSwgaW50IGluZGV4KQotICAgICAgICAgICAgOiBiYXNlKGZpbGUsIGZpbGUu
Q29tcHV0ZUZ1bGxOYW1lKG51bGwsIHByb3RvLk5hbWUpLCBpbmRleCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdGhpcy5wcm90byA9IHByb3RvOwotICAgICAgICAgICAgbWV0aG9kcyA9IERlc2Ny
aXB0b3JVdGlsLkNvbnZlcnRBbmRNYWtlUmVhZE9ubHkocHJvdG8uTWV0aG9kLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhv
ZCwgaSkgPT4gbmV3IE1ldGhvZERlc2NyaXB0b3IobWV0aG9kLCBmaWxlLCB0aGlzLCBpKSk7Ci0K
LSAgICAgICAgICAgIGZpbGUuRGVzY3JpcHRvclBvb2wuQWRkU3ltYm9sKHRoaXMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIGJyaWVmIG5hbWUg
b2YgdGhlIGRlc2NyaXB0b3IncyB0YXJnZXQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
ICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgTmFtZSB7IGdldCB7IHJldHVybiBwcm90by5OYW1l
OyB9IH0KLQotICAgICAgICBpbnRlcm5hbCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIFByb3RvIHsg
Z2V0IHsgcmV0dXJuIHByb3RvOyB9IH0KLQotICAgICAgICAvLy8gPHZhbHVlPgotICAgICAgICAv
Ly8gQW4gdW5tb2RpZmlhYmxlIGxpc3Qgb2YgbWV0aG9kcyBpbiB0aGlzIHNlcnZpY2UuCi0gICAg
ICAgIC8vLyA8L3ZhbHVlPgotICAgICAgICBwdWJsaWMgSUxpc3Q8TWV0aG9kRGVzY3JpcHRvcj4g
TWV0aG9kcwotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQgeyByZXR1cm4gbWV0aG9kczsgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gRmluZHMgYSBt
ZXRob2QgYnkgbmFtZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJh
bSBuYW1lPSJuYW1lIj5UaGUgdW5xdWFsaWZpZWQgbmFtZSBvZiB0aGUgbWV0aG9kIChlLmcuICJG
b28iKS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIG1ldGhvZCdzIGRlY3NyaXB0
b3IsIG9yIG51bGwgaWYgbm90IGZvdW5kLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIE1ldGhv
ZERlc2NyaXB0b3IgRmluZE1ldGhvZEJ5TmFtZShTdHJpbmcgbmFtZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEZpbGUuRGVzY3JpcHRvclBvb2wuRmluZFN5bWJvbDxNZXRob2REZXNj
cmlwdG9yPihGdWxsTmFtZSArICIuIiArIG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50
ZXJuYWwgdm9pZCBDcm9zc0xpbmsoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3JlYWNoIChN
ZXRob2REZXNjcmlwdG9yIG1ldGhvZCBpbiBtZXRob2RzKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG1ldGhvZC5Dcm9zc0xpbmsoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rpb24vU2luZ2xlRmllbGRBY2Nlc3Nvci5jcyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3No
YXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9TaW5nbGVGaWVsZEFjY2Vzc29yLmNz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmFjMjE3M2Q0ZDNmOWE5ZGNkZjI1ZTYw
YTkxNTEwMzQ1NmYxMzYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvUmVmbGVjdGlvbi9TaW5nbGVGaWVsZEFj
Y2Vzc29yLmNzCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5
cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247
Ci11c2luZyBHb29nbGUuUHJvdG9idWYuQ29tcGF0aWJpbGl0eTsKLQotbmFtZXNwYWNlIEdvb2ds
ZS5Qcm90b2J1Zi5SZWZsZWN0aW9uCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBY2Nl
c3NvciBmb3Igc2luZ2xlIGZpZWxkcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIGludGVybmFs
IHNlYWxlZCBjbGFzcyBTaW5nbGVGaWVsZEFjY2Vzc29yIDogRmllbGRBY2Nlc3NvckJhc2UKLSAg
ICB7Ci0gICAgICAgIC8vIEFsbCB0aGUgd29yayBoZXJlIGlzIGFjdHVhbGx5IGRvbmUgaW4gdGhl
IGNvbnN0cnVjdG9yIC0gaXQgY3JlYXRlcyB0aGUgYXBwcm9wcmlhdGUgZGVsZWdhdGVzLgotICAg
ICAgICAvLyBUaGVyZSBhcmUgdmFyaW91cyBjYXNlcyB0byBjb25zaWRlciwgYmFzZWQgb24gdGhl
IHByb3BlcnR5IHR5cGUgKG1lc3NhZ2UsIHN0cmluZy9ieXRlcywgb3IgImdlbnVpbmUiIHByaW1p
dGl2ZSkKLSAgICAgICAgLy8gYW5kIHByb3RvMiB2cyBwcm90bzMgZm9yIG5vbi1tZXNzYWdlIHR5
cGVzLCBhcyBwcm90bzMgZG9lc24ndCBzdXBwb3J0ICJmdWxsIiBwcmVzZW5jZSBkZXRlY3Rpb24g
b3IgZGVmYXVsdAotICAgICAgICAvLyB2YWx1ZXMuCi0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25s
eSBBY3Rpb248SU1lc3NhZ2UsIG9iamVjdD4gc2V0VmFsdWVEZWxlZ2F0ZTsKLSAgICAgICAgcHJp
dmF0ZSByZWFkb25seSBBY3Rpb248SU1lc3NhZ2U+IGNsZWFyRGVsZWdhdGU7Ci0KLSAgICAgICAg
aW50ZXJuYWwgU2luZ2xlRmllbGRBY2Nlc3NvcihQcm9wZXJ0eUluZm8gcHJvcGVydHksIEZpZWxk
RGVzY3JpcHRvciBkZXNjcmlwdG9yKSA6IGJhc2UocHJvcGVydHksIGRlc2NyaXB0b3IpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghcHJvcGVydHkuQ2FuV3JpdGUpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCJOb3QgYWxsIHJl
cXVpcmVkIHByb3BlcnRpZXMvbWV0aG9kcyBhdmFpbGFibGUiKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHNldFZhbHVlRGVsZWdhdGUgPSBSZWZsZWN0aW9uVXRpbC5DcmVhdGVBY3Rpb25J
TWVzc2FnZU9iamVjdChwcm9wZXJ0eS5HZXRTZXRNZXRob2QoKSk7Ci0KLSAgICAgICAgICAgIHZh
ciBjbHJUeXBlID0gcHJvcGVydHkuUHJvcGVydHlUeXBlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBUT0RPOiBWYWxpZGF0ZSB0aGF0IHRoaXMgaXMgYSByZWFzb25hYmxlIHNpbmdsZSBm
aWVsZD8gKFNob3VsZCBiZSBhIHZhbHVlIHR5cGUsIGEgbWVzc2FnZSB0eXBlLCBvciBzdHJpbmcv
Qnl0ZVN0cmluZy4pCi0gICAgICAgICAgICBvYmplY3QgZGVmYXVsdFZhbHVlID0KLSAgICAgICAg
ICAgICAgICBkZXNjcmlwdG9yLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGUuTWVzc2FnZSA/IG51bGwK
LSAgICAgICAgICAgICAgICA6IGNsclR5cGUgPT0gdHlwZW9mKHN0cmluZykgPyAiIgotICAgICAg
ICAgICAgICAgIDogY2xyVHlwZSA9PSB0eXBlb2YoQnl0ZVN0cmluZykgPyBCeXRlU3RyaW5nLkVt
cHR5Ci0gICAgICAgICAgICAgICAgOiBBY3RpdmF0b3IuQ3JlYXRlSW5zdGFuY2UoY2xyVHlwZSk7
Ci0gICAgICAgICAgICBjbGVhckRlbGVnYXRlID0gbWVzc2FnZSA9PiBTZXRWYWx1ZShtZXNzYWdl
LCBkZWZhdWx0VmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIHZv
aWQgQ2xlYXIoSU1lc3NhZ2UgbWVzc2FnZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2xlYXJE
ZWxlZ2F0ZShtZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSB2
b2lkIFNldFZhbHVlKElNZXNzYWdlIG1lc3NhZ2UsIG9iamVjdCB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgc2V0VmFsdWVEZWxlZ2F0ZShtZXNzYWdlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rp
b24vVHlwZVJlZ2lzdHJ5LmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9SZWZsZWN0aW9u
L1R5cGVSZWdpc3RyeS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk0ZTNlNmM2
MGJjZWE5NjIwZTQxMTFmOTMwZDhkMTZlMzZmMGEwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1JlZmxlY3Rp
b24vVHlwZVJlZ2lzdHJ5LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLe+7vyNy
ZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNSBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJp
YzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLlJlZmxl
Y3Rpb24KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEFuIGltbXV0YWJsZSByZWdpc3Ry
eSBvZiB0eXBlcyB3aGljaCBjYW4gYmUgbG9va2VkIHVwIGJ5IHRoZWlyIGZ1bGwgbmFtZS4KLSAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgVHlwZVJlZ2lzdHJ5Ci0g
ICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBbiBlbXB0eSB0eXBlIHJl
Z2lzdHJ5LCBjb250YWluaW5nIG5vIHR5cGVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAg
ICAgICBwdWJsaWMgc3RhdGljIFR5cGVSZWdpc3RyeSBFbXB0eSB7IGdldDsgfSA9IG5ldyBUeXBl
UmVnaXN0cnkobmV3IERpY3Rpb25hcnk8c3RyaW5nLCBNZXNzYWdlRGVzY3JpcHRvcj4oKSk7Ci0K
LSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBEaWN0aW9uYXJ5PHN0cmluZywgTWVzc2FnZURlc2Ny
aXB0b3I+IGZ1bGxOYW1lVG9NZXNzYWdlTWFwOwotCi0gICAgICAgIHByaXZhdGUgVHlwZVJlZ2lz
dHJ5KERpY3Rpb25hcnk8c3RyaW5nLCBNZXNzYWdlRGVzY3JpcHRvcj4gZnVsbE5hbWVUb01lc3Nh
Z2VNYXApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuZnVsbE5hbWVUb01lc3NhZ2VNYXAg
PSBmdWxsTmFtZVRvTWVzc2FnZU1hcDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAgICAgLy8vIEF0dGVtcHRzIHRvIGZpbmQgYSBtZXNzYWdlIGRlc2NyaXB0b3IgYnkg
aXRzIGZ1bGwgbmFtZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJh
bSBuYW1lPSJmdWxsTmFtZSI+VGhlIGZ1bGwgbmFtZSBvZiB0aGUgbWVzc2FnZSwgd2hpY2ggaXMg
dGhlIGRvdC1zZXBhcmF0ZWQKLSAgICAgICAgLy8vIGNvbWJpbmF0aW9uIG9mIHBhY2thZ2UsIGNv
bnRhaW5pbmcgbWVzc2FnZXMgYW5kIG1lc3NhZ2UgbmFtZTwvcGFyYW0+Ci0gICAgICAgIC8vLyA8
cmV0dXJucz5UaGUgbWVzc2FnZSBkZXNjcmlwdG9yIGNvcnJlc3BvbmRpbmcgdG8gPHBhcmFtcmVm
IG5hbWU9ImZ1bGxOYW1lIi8+IG9yIG51bGwKLSAgICAgICAgLy8vIGlmIHRoZXJlIGlzIG5vIHN1
Y2ggbWVzc2FnZSBkZXNjcmlwdG9yLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIE1lc3NhZ2VE
ZXNjcmlwdG9yIEZpbmQoc3RyaW5nIGZ1bGxOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBN
ZXNzYWdlRGVzY3JpcHRvciByZXQ7Ci0gICAgICAgICAgICAvLyBJZ25vcmUgdGhlIHJldHVybiB2
YWx1ZSBhcyByZXQgd2lsbCBlbmQgdXAgd2l0aCB0aGUgcmlnaHQgdmFsdWUgZWl0aGVyIHdheS4K
LSAgICAgICAgICAgIGZ1bGxOYW1lVG9NZXNzYWdlTWFwLlRyeUdldFZhbHVlKGZ1bGxOYW1lLCBv
dXQgcmV0KTsKLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgdHlwZSByZWdpc3RyeSBmcm9tIHRo
ZSBzcGVjaWZpZWQgc2V0IG9mIGZpbGUgZGVzY3JpcHRvcnMuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIFRoaXMgaXMgYSBjb252ZW5p
ZW5jZSBvdmVybG9hZCBmb3IgPHNlZSBjcmVmPSJGcm9tRmlsZXMoSUVudW1lcmFibGV7RmlsZURl
c2NyaXB0b3J9KSIvPgotICAgICAgICAvLy8gdG8gYWxsb3cgY2FsbHMgc3VjaCBhcyA8Yz5UeXBl
UmVnaXN0cnkuRnJvbUZpbGVzKGRlc2NyaXB0b3IxLCBkZXNjcmlwdG9yMik8L2M+LgotICAgICAg
ICAvLy8gPC9yZW1hcmtzPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImZpbGVEZXNjcmlwdG9y
cyI+VGhlIHNldCBvZiBmaWxlcyB0byBpbmNsdWRlIGluIHRoZSByZWdpc3RyeS4gTXVzdCBub3Qg
Y29udGFpbiBudWxsIHZhbHVlcy48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSB0eXBl
IHJlZ2lzdHJ5IGZvciB0aGUgZ2l2ZW4gZmlsZXMuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMg
c3RhdGljIFR5cGVSZWdpc3RyeSBGcm9tRmlsZXMocGFyYW1zIEZpbGVEZXNjcmlwdG9yW10gZmls
ZURlc2NyaXB0b3JzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRnJvbUZpbGVzKChJ
RW51bWVyYWJsZTxGaWxlRGVzY3JpcHRvcj4pIGZpbGVEZXNjcmlwdG9ycyk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgdHlwZSByZWdp
c3RyeSBmcm9tIHRoZSBzcGVjaWZpZWQgc2V0IG9mIGZpbGUgZGVzY3JpcHRvcnMuCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAgICAgLy8vIEFsbCBt
ZXNzYWdlIHR5cGVzIHdpdGhpbiBhbGwgdGhlIHNwZWNpZmllZCBmaWxlcyBhcmUgYWRkZWQgdG8g
dGhlIHJlZ2lzdHJ5LCBhbmQKLSAgICAgICAgLy8vIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHNw
ZWNpZmllZCBmaWxlcyBhcmUgYWxzbyBhZGRlZCwgcmVjdXJzaXZlbHkuCi0gICAgICAgIC8vLyA8
L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZmlsZURlc2NyaXB0b3JzIj5UaGUg
c2V0IG9mIGZpbGVzIHRvIGluY2x1ZGUgaW4gdGhlIHJlZ2lzdHJ5LiBNdXN0IG5vdCBjb250YWlu
IG51bGwgdmFsdWVzLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHR5cGUgcmVnaXN0
cnkgZm9yIHRoZSBnaXZlbiBmaWxlcy48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMg
VHlwZVJlZ2lzdHJ5IEZyb21GaWxlcyhJRW51bWVyYWJsZTxGaWxlRGVzY3JpcHRvcj4gZmlsZURl
c2NyaXB0b3JzKQotICAgICAgICB7Ci0gICAgICAgICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hl
Y2tOb3ROdWxsKGZpbGVEZXNjcmlwdG9ycywgbmFtZW9mKGZpbGVEZXNjcmlwdG9ycykpOwotICAg
ICAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpOwotICAgICAgICAgICAgZm9yZWFj
aCAodmFyIGZpbGUgaW4gZmlsZURlc2NyaXB0b3JzKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuQWRkRmlsZShmaWxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBidWlsZGVyLkJ1aWxkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgdHlwZSByZWdpc3RyeSBmcm9tIHRoZSBmaWxlIGRl
c2NyaXB0b3IgcGFyZW50cyBvZiB0aGUgc3BlY2lmaWVkIHNldCBvZiBtZXNzYWdlIGRlc2NyaXB0
b3JzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAg
ICAgIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2Ugb3ZlcmxvYWQgZm9yIDxzZWUgY3JlZj0iRnJv
bU1lc3NhZ2VzKElFbnVtZXJhYmxle01lc3NhZ2VEZXNjcmlwdG9yfSkiLz4KLSAgICAgICAgLy8v
IHRvIGFsbG93IGNhbGxzIHN1Y2ggYXMgPGM+VHlwZVJlZ2lzdHJ5LkZyb21GaWxlcyhkZXNjcmlw
dG9yMSwgZGVzY3JpcHRvcjIpPC9jPi4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAg
Ly8vIDxwYXJhbSBuYW1lPSJtZXNzYWdlRGVzY3JpcHRvcnMiPlRoZSBzZXQgb2YgbWVzc2FnZSBk
ZXNjcmlwdG9ycyB0byB1c2UgdG8gaWRlbnRpZnkgZmlsZSBkZXNjcmlwdG9ycyB0byBpbmNsdWRl
IGluIHRoZSByZWdpc3RyeS4KLSAgICAgICAgLy8vIE11c3Qgbm90IGNvbnRhaW4gbnVsbCB2YWx1
ZXMuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgdHlwZSByZWdpc3RyeSBmb3IgdGhl
IGdpdmVuIGZpbGVzLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBUeXBlUmVnaXN0
cnkgRnJvbU1lc3NhZ2VzKHBhcmFtcyBNZXNzYWdlRGVzY3JpcHRvcltdIG1lc3NhZ2VEZXNjcmlw
dG9ycykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZyb21NZXNzYWdlcygoSUVudW1l
cmFibGU8TWVzc2FnZURlc2NyaXB0b3I+KSBtZXNzYWdlRGVzY3JpcHRvcnMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIHR5cGUgcmVn
aXN0cnkgZnJvbSB0aGUgZmlsZSBkZXNjcmlwdG9yIHBhcmVudHMgb2YgdGhlIHNwZWNpZmllZCBz
ZXQgb2YgbWVzc2FnZSBkZXNjcmlwdG9ycy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAg
ICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gVGhlIHNwZWNpZmllZCBtZXNzYWdlIGRlc2Ny
aXB0b3JzIGFyZSBvbmx5IHVzZWQgdG8gaWRlbnRpZnkgdGhlaXIgZmlsZSBkZXNjcmlwdG9yczsg
dGhlIHJldHVybmVkIHJlZ2lzdHJ5Ci0gICAgICAgIC8vLyBjb250YWlucyBhbGwgdGhlIHR5cGVz
IHdpdGhpbiB0aGUgZmlsZSBkZXNjcmlwdG9ycyB3aGljaCBjb250YWluIHRoZSBzcGVjaWZpZWQg
bWVzc2FnZSBkZXNjcmlwdG9ycyAoYW5kCi0gICAgICAgIC8vLyB0aGUgZGVwZW5kZW5jaWVzIG9m
IHRob3NlIGZpbGVzKSwgbm90IGp1c3QgdGhlIHNwZWNpZmllZCBtZXNzYWdlcy4KLSAgICAgICAg
Ly8vIDwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJtZXNzYWdlRGVzY3JpcHRv
cnMiPlRoZSBzZXQgb2YgbWVzc2FnZSBkZXNjcmlwdG9ycyB0byB1c2UgdG8gaWRlbnRpZnkgZmls
ZSBkZXNjcmlwdG9ycyB0byBpbmNsdWRlIGluIHRoZSByZWdpc3RyeS4KLSAgICAgICAgLy8vIE11
c3Qgbm90IGNvbnRhaW4gbnVsbCB2YWx1ZXMuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5z
PkEgdHlwZSByZWdpc3RyeSBmb3IgdGhlIGdpdmVuIGZpbGVzLjwvcmV0dXJucz4KLSAgICAgICAg
cHVibGljIHN0YXRpYyBUeXBlUmVnaXN0cnkgRnJvbU1lc3NhZ2VzKElFbnVtZXJhYmxlPE1lc3Nh
Z2VEZXNjcmlwdG9yPiBtZXNzYWdlRGVzY3JpcHRvcnMpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwobWVzc2FnZURlc2NyaXB0b3JzLCBuYW1l
b2YobWVzc2FnZURlc2NyaXB0b3JzKSk7Ci0gICAgICAgICAgICByZXR1cm4gRnJvbUZpbGVzKG1l
c3NhZ2VEZXNjcmlwdG9ycy5TZWxlY3QobWQgPT4gbWQuRmlsZSkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQnVpbGRlciBjbGFzcyB3aGljaCBpc24n
dCBleHBvc2VkLCBidXQgYWN0cyBhcyBhIGNvbnZlbmllbnQgYWx0ZXJuYXRpdmUgdG8gcGFzc2lu
ZyByb3VuZCB0d28gZGljdGlvbmFyaWVzIGluIHJlY3Vyc2l2ZSBjYWxscy4KLSAgICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBCdWlsZGVyCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRGljdGlvbmFyeTxzdHJpbmcsIE1lc3NhZ2VEZXNj
cmlwdG9yPiB0eXBlczsKLSAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgSGFzaFNldDxzdHJp
bmc+IGZpbGVEZXNjcmlwdG9yTmFtZXM7Ci0KLSAgICAgICAgICAgIGludGVybmFsIEJ1aWxkZXIo
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHR5cGVzID0gbmV3IERpY3Rpb25hcnk8
c3RyaW5nLCBNZXNzYWdlRGVzY3JpcHRvcj4oKTsKLSAgICAgICAgICAgICAgICBmaWxlRGVzY3Jp
cHRvck5hbWVzID0gbmV3IEhhc2hTZXQ8c3RyaW5nPigpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpbnRlcm5hbCB2b2lkIEFkZEZpbGUoRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0
b3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmaWxlRGVzY3JpcHRvck5h
bWVzLkFkZChmaWxlRGVzY3JpcHRvci5OYW1lKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Zm9yZWFjaCAodmFyIGRlcGVuZGVuY3kgaW4gZmlsZURlc2NyaXB0b3IuRGVwZW5kZW5jaWVzKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQWRkRmlsZShkZXBlbmRlbmN5
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIG1lc3Nh
Z2UgaW4gZmlsZURlc2NyaXB0b3IuTWVzc2FnZVR5cGVzKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgQWRkTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgdm9pZCBBZGRNZXNzYWdlKE1l
c3NhZ2VEZXNjcmlwdG9yIG1lc3NhZ2VEZXNjcmlwdG9yKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGZvcmVhY2ggKHZhciBuZXN0ZWRUeXBlIGluIG1lc3NhZ2VEZXNjcmlwdG9yLk5l
c3RlZFR5cGVzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQWRkTWVz
c2FnZShuZXN0ZWRUeXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8g
VGhpcyB3aWxsIG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgZW50cnkuIEdpdmVuIHRoYXQgZWFjaCBm
aWxlIHNob3VsZAotICAgICAgICAgICAgICAgIC8vIG9ubHkgYmUgYWRkZWQgb25jZSwgdGhpcyBj
b3VsZCBiZSBhIHByb2JsZW0gc3VjaCBhcyBwYWNrYWdlIEEuQiB3aXRoIHR5cGUgQywKLSAgICAg
ICAgICAgICAgICAvLyBhbmQgcGFja2FnZSBBIHdpdGggdHlwZSBCLkMuLi4gaXQncyB1bmNsZWFy
IHdoYXQgd2Ugc2hvdWxkIGRvIGluIHRoYXQgY2FzZS4KLSAgICAgICAgICAgICAgICB0eXBlc1tt
ZXNzYWdlRGVzY3JpcHRvci5GdWxsTmFtZV0gPSBtZXNzYWdlRGVzY3JpcHRvcjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaW50ZXJuYWwgVHlwZVJlZ2lzdHJ5IEJ1aWxkKCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVSZWdpc3RyeSh0eXBlcyk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL0FueS5jcyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29n
bGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvQW55LmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NzFhMzgzZjBkN2RmNWZjOWZkMmM4NWYwMmEzMjFjYWQyMTk5YzcwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUu
UHJvdG9idWYvV2VsbEtub3duVHlwZXMvQW55LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICsw
LDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8g
Tk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8KLSNwcmFnbWEg
d2FybmluZyBkaXNhYmxlIDE1OTEsIDA2MTIsIDMwMjEKLSNyZWdpb24gRGVzaWduZXIgZ2VuZXJh
dGVkIGNvZGUKLQotdXNpbmcgcGIgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1ZjsKLXVzaW5nIHBi
YyA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLkNvbGxlY3Rpb25zOwotdXNpbmcgcGJyID0gZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbjsKLXVzaW5nIHNjZyA9IGdsb2JhbDo6U3lz
dGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzIHsKLQotICAvLy8gPHN1bW1hcnk+SG9sZGVyIGZvciByZWZsZWN0aW9uIGluZm9y
bWF0aW9uIGdlbmVyYXRlZCBmcm9tIGdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG88L3N1bW1hcnk+
Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmli
dXRlKCldCi0gIHB1YmxpYyBzdGF0aWMgcGFydGlhbCBjbGFzcyBBbnlSZWZsZWN0aW9uIHsKLQot
ICAgICNyZWdpb24gRGVzY3JpcHRvcgotICAgIC8vLyA8c3VtbWFyeT5GaWxlIGRlc2NyaXB0b3Ig
Zm9yIGdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG88L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0YXRp
YyBwYnI6OkZpbGVEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGRl
c2NyaXB0b3I7IH0KLSAgICB9Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcGJyOjpGaWxlRGVzY3JpcHRv
ciBkZXNjcmlwdG9yOwotCi0gICAgc3RhdGljIEFueVJlZmxlY3Rpb24oKSB7Ci0gICAgICBieXRl
W10gZGVzY3JpcHRvckRhdGEgPSBnbG9iYWw6OlN5c3RlbS5Db252ZXJ0LkZyb21CYXNlNjRTdHJp
bmcoCi0gICAgICAgICAgc3RyaW5nLkNvbmNhdCgKLSAgICAgICAgICAgICJDaGxuYjI5bmJHVXZj
SEp2ZEc5aWRXWXZZVzU1TG5CeWIzUnZFZzluYjI5bmJHVXVjSEp2ZEc5aWRXWWkiLAotICAgICAg
ICAgICAgIkpnb0RRVzU1RWhBS0NIUjVjR1ZmZFhKc0dBRWdBU2dKRWcwS0JYWmhiSFZsR0FJZ0FT
Z01RbklLRTJOdiIsCi0gICAgICAgICAgICAiYlM1bmIyOW5iR1V1Y0hKdmRHOWlkV1pDQ0VGdWVW
QnliM1J2VUFGYUpXZHBkR2gxWWk1amIyMHZaMjlzIiwKLSAgICAgICAgICAgICJZVzVuTDNCeWIz
UnZZblZtTDNCMGVYQmxjeTloYm5tZ0FRR2lBZ05IVUVLcUFoNUhiMjluYkdVdVVISnYiLAotICAg
ICAgICAgICAgImRHOWlkV1l1VjJWc2JFdHViM2R1Vkhsd1pYTmlCbkJ5YjNSdk13PT0iKSk7Ci0g
ICAgICBkZXNjcmlwdG9yID0gcGJyOjpGaWxlRGVzY3JpcHRvci5Gcm9tR2VuZXJhdGVkQ29kZShk
ZXNjcmlwdG9yRGF0YSwKLSAgICAgICAgICBuZXcgcGJyOjpGaWxlRGVzY3JpcHRvcltdIHsgfSwK
LSAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyhudWxsLCBuZXcgcGJyOjpH
ZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENs
clR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5B
bnkpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BbnkuUGFyc2VyLCBu
ZXdbXXsgIlR5cGVVcmwiLCAiVmFsdWUiIH0sIG51bGwsIG51bGwsIG51bGwpCi0gICAgICAgICAg
fSkpOwotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotICAjcmVnaW9uIE1lc3NhZ2VzCi0g
IC8vLyA8c3VtbWFyeT4KLSAgLy8vICBgQW55YCBjb250YWlucyBhbiBhcmJpdHJhcnkgc2VyaWFs
aXplZCBwcm90b2NvbCBidWZmZXIgbWVzc2FnZSBhbG9uZyB3aXRoIGEKLSAgLy8vICBVUkwgdGhh
dCBkZXNjcmliZXMgdGhlIHR5cGUgb2YgdGhlIHNlcmlhbGl6ZWQgbWVzc2FnZS4KLSAgLy8vCi0g
IC8vLyAgUHJvdG9idWYgbGlicmFyeSBwcm92aWRlcyBzdXBwb3J0IHRvIHBhY2svdW5wYWNrIEFu
eSB2YWx1ZXMgaW4gdGhlIGZvcm0KLSAgLy8vICBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBvciBhZGRp
dGlvbmFsIGdlbmVyYXRlZCBtZXRob2RzIG9mIHRoZSBBbnkgdHlwZS4KLSAgLy8vCi0gIC8vLyAg
RXhhbXBsZSAxOiBQYWNrIGFuZCB1bnBhY2sgYSBtZXNzYWdlIGluIEMrKy4KLSAgLy8vCi0gIC8v
LyAgICAgIEZvbyBmb28gPSAuLi47Ci0gIC8vLyAgICAgIEFueSBhbnk7Ci0gIC8vLyAgICAgIGFu
eS5QYWNrRnJvbShmb28pOwotICAvLy8gICAgICAuLi4KLSAgLy8vICAgICAgaWYgKGFueS5VbnBh
Y2tUbygmYW1wO2ZvbykpIHsKLSAgLy8vICAgICAgICAuLi4KLSAgLy8vICAgICAgfQotICAvLy8K
LSAgLy8vICBFeGFtcGxlIDI6IFBhY2sgYW5kIHVucGFjayBhIG1lc3NhZ2UgaW4gSmF2YS4KLSAg
Ly8vCi0gIC8vLyAgICAgIEZvbyBmb28gPSAuLi47Ci0gIC8vLyAgICAgIEFueSBhbnkgPSBBbnku
cGFjayhmb28pOwotICAvLy8gICAgICAuLi4KLSAgLy8vICAgICAgaWYgKGFueS5pcyhGb28uY2xh
c3MpKSB7Ci0gIC8vLyAgICAgICAgZm9vID0gYW55LnVucGFjayhGb28uY2xhc3MpOwotICAvLy8g
ICAgICB9Ci0gIC8vLwotICAvLy8gIFRoZSBwYWNrIG1ldGhvZHMgcHJvdmlkZWQgYnkgcHJvdG9i
dWYgbGlicmFyeSB3aWxsIGJ5IGRlZmF1bHQgdXNlCi0gIC8vLyAgJ3R5cGUuZ29vZ2xlYXBpcy5j
b20vZnVsbC50eXBlLm5hbWUnIGFzIHRoZSB0eXBlIFVSTCBhbmQgdGhlIHVucGFjawotICAvLy8g
IG1ldGhvZHMgb25seSB1c2UgdGhlIGZ1bGx5IHF1YWxpZmllZCB0eXBlIG5hbWUgYWZ0ZXIgdGhl
IGxhc3QgJy8nCi0gIC8vLyAgaW4gdGhlIHR5cGUgVVJMLCBmb3IgZXhhbXBsZSAiZm9vLmJhci5j
b20veC95LnoiIHdpbGwgeWllbGQgdHlwZQotICAvLy8gIG5hbWUgInkueiIuCi0gIC8vLwotICAv
Ly8gIEpTT04KLSAgLy8vICA9PT09Ci0gIC8vLyAgVGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2Yg
YW4gYEFueWAgdmFsdWUgdXNlcyB0aGUgcmVndWxhcgotICAvLy8gIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBkZXNlcmlhbGl6ZWQsIGVtYmVkZGVkIG1lc3NhZ2UsIHdpdGggYW4KLSAgLy8vICBhZGRp
dGlvbmFsIGZpZWxkIGBAdHlwZWAgd2hpY2ggY29udGFpbnMgdGhlIHR5cGUgVVJMLiBFeGFtcGxl
OgotICAvLy8KLSAgLy8vICAgICAgcGFja2FnZSBnb29nbGUucHJvZmlsZTsKLSAgLy8vICAgICAg
bWVzc2FnZSBQZXJzb24gewotICAvLy8gICAgICAgIHN0cmluZyBmaXJzdF9uYW1lID0gMTsKLSAg
Ly8vICAgICAgICBzdHJpbmcgbGFzdF9uYW1lID0gMjsKLSAgLy8vICAgICAgfQotICAvLy8KLSAg
Ly8vICAgICAgewotICAvLy8gICAgICAgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dv
b2dsZS5wcm9maWxlLlBlcnNvbiIsCi0gIC8vLyAgICAgICAgImZpcnN0TmFtZSI6ICZsdDtzdHJp
bmc+LAotICAvLy8gICAgICAgICJsYXN0TmFtZSI6ICZsdDtzdHJpbmc+Ci0gIC8vLyAgICAgIH0K
LSAgLy8vCi0gIC8vLyAgSWYgdGhlIGVtYmVkZGVkIG1lc3NhZ2UgdHlwZSBpcyB3ZWxsLWtub3du
IGFuZCBoYXMgYSBjdXN0b20gSlNPTgotICAvLy8gIHJlcHJlc2VudGF0aW9uLCB0aGF0IHJlcHJl
c2VudGF0aW9uIHdpbGwgYmUgZW1iZWRkZWQgYWRkaW5nIGEgZmllbGQKLSAgLy8vICBgdmFsdWVg
IHdoaWNoIGhvbGRzIHRoZSBjdXN0b20gSlNPTiBpbiBhZGRpdGlvbiB0byB0aGUgYEB0eXBlYAot
ICAvLy8gIGZpZWxkLiBFeGFtcGxlIChmb3IgbWVzc2FnZSBbZ29vZ2xlLnByb3RvYnVmLkR1cmF0
aW9uXVtdKToKLSAgLy8vCi0gIC8vLyAgICAgIHsKLSAgLy8vICAgICAgICAiQHR5cGUiOiAidHlw
ZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuRHVyYXRpb24iLAotICAvLy8gICAgICAg
ICJ2YWx1ZSI6ICIxLjIxMnMiCi0gIC8vLyAgICAgIH0KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2ds
b2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0K
LSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIEFueSA6IHBiOjpJTWVzc2FnZTxBbnk+IHsK
LSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxBbnk+IF9wYXJz
ZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8QW55PigoKSA9PiBuZXcgQW55KCkpOwotICAgIHB1
YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8QW55PiBQYXJzZXIgeyBnZXQgeyByZXR1cm4g
X3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3Ig
RGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
V2VsbEtub3duVHlwZXMuQW55UmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1swXTsg
fQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2Ny
aXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgQW55KCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0
aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBBbnkoQW55IG90aGVyKSA6
IHRoaXMoKSB7Ci0gICAgICB0eXBlVXJsXyA9IG90aGVyLnR5cGVVcmxfOwotICAgICAgdmFsdWVf
ID0gb3RoZXIudmFsdWVfOwotICAgIH0KLQotICAgIHB1YmxpYyBBbnkgQ2xvbmUoKSB7Ci0gICAg
ICByZXR1cm4gbmV3IEFueSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgInR5cGVfdXJsIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBUeXBlVXJsRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgc3RyaW5nIHR5cGVV
cmxfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgQSBVUkwvcmVzb3VyY2UgbmFt
ZSB3aG9zZSBjb250ZW50IGRlc2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUKLSAgICAvLy8gIHNlcmlh
bGl6ZWQgcHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2UuCi0gICAgLy8vCi0gICAgLy8vICBGb3IgVVJM
cyB3aGljaCB1c2UgdGhlIHNjaGVtYSBgaHR0cGAsIGBodHRwc2AsIG9yIG5vIHNjaGVtYSwgdGhl
Ci0gICAgLy8vICBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFuZCBpbnRlcnByZXRhdGlvbnMgYXBw
bHk6Ci0gICAgLy8vCi0gICAgLy8vICAqIElmIG5vIHNjaGVtYSBpcyBwcm92aWRlZCwgYGh0dHBz
YCBpcyBhc3N1bWVkLgotICAgIC8vLyAgKiBUaGUgbGFzdCBzZWdtZW50IG9mIHRoZSBVUkwncyBw
YXRoIG11c3QgcmVwcmVzZW50IHRoZSBmdWxseQotICAgIC8vLyAgICBxdWFsaWZpZWQgbmFtZSBv
ZiB0aGUgdHlwZSAoYXMgaW4gYHBhdGgvZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uYCkuCi0gICAg
Ly8vICAgIFRoZSBuYW1lIHNob3VsZCBiZSBpbiBhIGNhbm9uaWNhbCBmb3JtIChlLmcuLCBsZWFk
aW5nICIuIiBpcwotICAgIC8vLyAgICBub3QgYWNjZXB0ZWQpLgotICAgIC8vLyAgKiBBbiBIVFRQ
IEdFVCBvbiB0aGUgVVJMIG11c3QgeWllbGQgYSBbZ29vZ2xlLnByb3RvYnVmLlR5cGVdW10KLSAg
ICAvLy8gICAgdmFsdWUgaW4gYmluYXJ5IGZvcm1hdCwgb3IgcHJvZHVjZSBhbiBlcnJvci4KLSAg
ICAvLy8gICogQXBwbGljYXRpb25zIGFyZSBhbGxvd2VkIHRvIGNhY2hlIGxvb2t1cCByZXN1bHRz
IGJhc2VkIG9uIHRoZQotICAgIC8vLyAgICBVUkwsIG9yIGhhdmUgdGhlbSBwcmVjb21waWxlZCBp
bnRvIGEgYmluYXJ5IHRvIGF2b2lkIGFueQotICAgIC8vLyAgICBsb29rdXAuIFRoZXJlZm9yZSwg
YmluYXJ5IGNvbXBhdGliaWxpdHkgbmVlZHMgdG8gYmUgcHJlc2VydmVkCi0gICAgLy8vICAgIG9u
IGNoYW5nZXMgdG8gdHlwZXMuIChVc2UgdmVyc2lvbmVkIHR5cGUgbmFtZXMgdG8gbWFuYWdlCi0g
ICAgLy8vICAgIGJyZWFraW5nIGNoYW5nZXMuKQotICAgIC8vLwotICAgIC8vLyAgU2NoZW1hcyBv
dGhlciB0aGFuIGBodHRwYCwgYGh0dHBzYCAob3IgdGhlIGVtcHR5IHNjaGVtYSkgbWlnaHQgYmUK
LSAgICAvLy8gIHVzZWQgd2l0aCBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzZW1hbnRpY3MuCi0g
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RyaW5nIFR5cGVVcmwgewotICAgICAgZ2V0
IHsgcmV0dXJuIHR5cGVVcmxfOyB9Ci0gICAgICBzZXQgewotICAgICAgICB0eXBlVXJsXyA9IHBi
OjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInZhbHVl
IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBWYWx1ZUZpZWxkTnVtYmVy
ID0gMjsKLSAgICBwcml2YXRlIHBiOjpCeXRlU3RyaW5nIHZhbHVlXyA9IHBiOjpCeXRlU3RyaW5n
LkVtcHR5OwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIE11c3QgYmUgYSB2YWxpZCBzZXJp
YWxpemVkIHByb3RvY29sIGJ1ZmZlciBvZiB0aGUgYWJvdmUgc3BlY2lmaWVkIHR5cGUuCi0gICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgcGI6OkJ5dGVTdHJpbmcgVmFsdWUgewotICAgICAg
Z2V0IHsgcmV0dXJuIHZhbHVlXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgdmFsdWVfID0gcGI6
OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAg
fQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIp
IHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgQW55KTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgYm9vbCBFcXVhbHMoQW55IG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90
aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAo
UmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIH0KLSAgICAgIGlmIChUeXBlVXJsICE9IG90aGVyLlR5cGVVcmwpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmIChWYWx1ZSAhPSBvdGhlci5WYWx1ZSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgp
IHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChUeXBlVXJsLkxlbmd0aCAhPSAwKSBo
YXNoIF49IFR5cGVVcmwuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChWYWx1ZS5MZW5ndGggIT0g
MCkgaGFzaCBePSBWYWx1ZS5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAg
fQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVy
biBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0g
ICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0g
ICAgICBpZiAoVHlwZVVybC5MZW5ndGggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdU
YWcoMTApOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoVHlwZVVybCk7Ci0gICAgICB9Ci0g
ICAgICBpZiAoVmFsdWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFn
KDE4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlQnl0ZXMoVmFsdWUpOwotICAgICAgfQotICAgIH0K
LQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsK
LSAgICAgIGlmIChUeXBlVXJsLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBi
OjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShUeXBlVXJsKTsKLSAgICAgIH0K
LSAgICAgIGlmIChWYWx1ZS5MZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6
Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUJ5dGVzU2l6ZShWYWx1ZSk7Ci0gICAgICB9Ci0gICAg
ICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oQW55IG90
aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0gICAgICBpZiAob3RoZXIuVHlwZVVybC5MZW5ndGggIT0gMCkgewotICAgICAgICBUeXBl
VXJsID0gb3RoZXIuVHlwZVVybDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5WYWx1ZS5MZW5n
dGggIT0gMCkgewotICAgICAgICBWYWx1ZSA9IG90aGVyLlZhbHVlOwotICAgICAgfQotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkg
ewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkg
IT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIFR5cGVVcmwgPSBpbnB1dC5SZWFkU3RyaW5nKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxODogewot
ICAgICAgICAgICAgVmFsdWUgPSBpbnB1dC5SZWFkQnl0ZXMoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgI2Vu
ZHJlZ2lvbgotCi19Ci0KLSNlbmRyZWdpb24gRGVzaWduZXIgZ2VuZXJhdGVkIGNvZGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvQW55UGFydGlh
bC5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvQW55UGFydGlh
bC5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRmYWM3Mzg2NWMxNmE1Mzk5Y2Jk
Yzc4YTRmMDc2YWVlZWM5ZTI5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL0FueVBh
cnRpYWwuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAot77u/I3JlZ2lvbiBDb3B5
cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSNlbmRyZWdpb24KLQotdXNpbmcgR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb247Ci0KLW5h
bWVzcGFjZSBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMKLXsKLSAgICBwdWJsaWMgcGFy
dGlhbCBjbGFzcyBBbnkKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgY29uc3Qgc3RyaW5nIERlZmF1
bHRQcmVmaXggPSAidHlwZS5nb29nbGVhcGlzLmNvbSI7Ci0KLSAgICAgICAgLy8gVGhpcyBjb3Vs
ZCBiZSBtb3ZlZCB0byBNZXNzYWdlRGVzY3JpcHRvciBpZiB3ZSB3YW50ZWQgdG8sIGJ1dCBrZWVw
aW5nIGl0IGhlcmUgbWVhbnMKLSAgICAgICAgLy8gYWxsIHRoZSBBbnktc3BlY2lmaWMgY29kZSBp
cyBpbiB0aGUgc2FtZSBwbGFjZS4KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgc3RyaW5nIEdldFR5
cGVVcmwoTWVzc2FnZURlc2NyaXB0b3IgZGVzY3JpcHRvciwgc3RyaW5nIHByZWZpeCkgPT4KLSAg
ICAgICAgICAgIHByZWZpeC5FbmRzV2l0aCgiLyIpID8gcHJlZml4ICsgZGVzY3JpcHRvci5GdWxs
TmFtZSA6IHByZWZpeCArICIvIiArIGRlc2NyaXB0b3IuRnVsbE5hbWU7Ci0KLSAgICAgICAgLy8v
IDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0cmlldmVzIHRoZSB0eXBlIG5hbWUgZm9yIGEgdHlw
ZSBVUkwuIFRoaXMgaXMgYWx3YXlzIGp1c3QgdGhlIGxhc3QgcGFydCBvZiB0aGUgVVJMLAotICAg
ICAgICAvLy8gYWZ0ZXIgdGhlIHRyYWlsaW5nIHNsYXNoLiBObyB2YWxpZGF0aW9uIG9mIGFueXRo
aW5nIGJlZm9yZSB0aGUgdHJhaWxpbmcgc2xhc2ggaXMgcGVyZm9ybWVkLgotICAgICAgICAvLy8g
SWYgdGhlIHR5cGUgVVJMIGRvZXMgbm90IGluY2x1ZGUgYSBzbGFzaCwgYW4gZW1wdHkgc3RyaW5n
IGlzIHJldHVybmVkIHJhdGhlciB0aGFuIGFuIGV4Y2VwdGlvbgotICAgICAgICAvLy8gYmVpbmcg
dGhyb3duOyB0aGlzIHdvbid0IG1hdGNoIGFueSB0eXBlcywgYW5kIHRoZSBjYWxsaW5nIGNvZGUg
aXMgcHJvYmFibHkgaW4gYSBiZXR0ZXIgcG9zaXRpb24KLSAgICAgICAgLy8vIHRvIGdpdmUgYSBt
ZWFuaW5nZnVsIGVycm9yLgotICAgICAgICAvLy8gVGhlcmUgaXMgbm8gaGFuZGxpbmcgb2YgZnJh
Z21lbnRzIG9yIHF1ZXJpZXMgIGF0IHRoZSBtb21lbnQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idHlwZVVybCI+VGhlIFVSTCB0byBleHRyYWN0IHRo
ZSB0eXBlIG5hbWUgZnJvbTwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgdHlwZSBu
YW1lPC9yZXR1cm5zPgotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgc3RyaW5nIEdldFR5cGVOYW1l
KHN0cmluZyB0eXBlVXJsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGFzdFNsYXNoID0g
dHlwZVVybC5MYXN0SW5kZXhPZignLycpOwotICAgICAgICAgICAgcmV0dXJuIGxhc3RTbGFzaCA9
PSAtMSA/ICIiIDogdHlwZVVybC5TdWJzdHJpbmcobGFzdFNsYXNoICsgMSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBVbnBhY2tzIHRoZSBjb250ZW50
IG9mIHRoaXMgQW55IG1lc3NhZ2UgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UgdHlwZSwKLSAgICAg
ICAgLy8vIHdoaWNoIG11c3QgbWF0Y2ggdGhlIHR5cGUgVVJMIHdpdGhpbiB0aGlzIEFueSBtZXNz
YWdlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHR5cGVwYXJhbSBuYW1l
PSJUIj5UaGUgdHlwZSBvZiBtZXNzYWdlIHRvIHVucGFjayB0aGUgY29udGVudCBpbnRvLjwvdHlw
ZXBhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHVucGFja2VkIG1lc3NhZ2UuPC9yZXR1
cm5zPgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24iPlRoZSB0YXJnZXQgbWVzc2FnZSB0eXBlIGRvZXNuJ3QgbWF0Y2ggdGhlIHR5cGUg
VVJMIGluIHRoaXMgbWVzc2FnZTwvZXhjZXB0aW9uPgotICAgICAgICBwdWJsaWMgVCBVbnBhY2s8
VD4oKSB3aGVyZSBUIDogSU1lc3NhZ2UsIG5ldygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
IE5vdGU6IHRoaXMgZG9lc24ndCBwZXJmb3JtIGFzIHdlbGwgaXMgaXQgbWlnaHQuIFdlIGNvdWxk
IHRha2UgYSBNZXNzYWdlUGFyc2VyPFQ+IGluIGFuIGFsdGVybmF0aXZlIG92ZXJsb2FkLAotICAg
ICAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgZXhwZWN0ZWQgdG8gcGVyZm9ybSBzbGlnaHRseSBi
ZXR0ZXIuLi4gYWx0aG91Z2ggdGhlIGRpZmZlcmVuY2UgaXMgbGlrZWx5IHRvIGJlIG5lZ2xpZ2li
bGUuCi0gICAgICAgICAgICBUIHRhcmdldCA9IG5ldyBUKCk7Ci0gICAgICAgICAgICBpZiAoR2V0
VHlwZU5hbWUoVHlwZVVybCkgIT0gdGFyZ2V0LkRlc2NyaXB0b3IuRnVsbE5hbWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgJCJGdWxsIHR5cGUgbmFtZSBmb3Ige3Rhcmdl
dC5EZXNjcmlwdG9yLk5hbWV9IGlzIHt0YXJnZXQuRGVzY3JpcHRvci5GdWxsTmFtZX07IEFueSBt
ZXNzYWdlJ3MgdHlwZSB1cmwgaXMge1R5cGVVcmx9Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0YXJnZXQuTWVyZ2VGcm9tKFZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQYWNrcyB0
aGUgc3BlY2lmaWVkIG1lc3NhZ2UgaW50byBhbiBBbnkgbWVzc2FnZSB1c2luZyBhIHR5cGUgVVJM
IHByZWZpeCBvZiAidHlwZS5nb29nbGVhcGlzLmNvbSIuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVzc2FnZSI+VGhlIG1lc3NhZ2UgdG8gcGFjay48
L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QW4gQW55IG1lc3NhZ2Ugd2l0aCB0aGUgY29u
dGVudCBhbmQgdHlwZSBVUkwgb2YgPHBhcmFtcmVmIG5hbWU9Im1lc3NhZ2UiLz4uPC9yZXR1cm5z
PgotICAgICAgICBwdWJsaWMgc3RhdGljIEFueSBQYWNrKElNZXNzYWdlIG1lc3NhZ2UpID0+IFBh
Y2sobWVzc2FnZSwgRGVmYXVsdFByZWZpeCk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gUGFja3MgdGhlIHNwZWNpZmllZCBtZXNzYWdlIGludG8gYW4gQW55IG1lc3NhZ2Ug
dXNpbmcgdGhlIHNwZWNpZmllZCB0eXBlIFVSTCBwcmVmaXguCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVzc2FnZSI+VGhlIG1lc3NhZ2UgdG8gcGFj
ay48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InR5cGVVcmxQcmVmaXgiPlRoZSBw
cmVmaXggZm9yIHRoZSB0eXBlIFVSTC48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QW4g
QW55IG1lc3NhZ2Ugd2l0aCB0aGUgY29udGVudCBhbmQgdHlwZSBVUkwgb2YgPHBhcmFtcmVmIG5h
bWU9Im1lc3NhZ2UiLz4uPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIEFueSBQYWNr
KElNZXNzYWdlIG1lc3NhZ2UsIHN0cmluZyB0eXBlVXJsUHJlZml4KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKG1lc3NhZ2UsIG5hbWVvZiht
ZXNzYWdlKSk7Ci0gICAgICAgICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHR5
cGVVcmxQcmVmaXgsIG5hbWVvZih0eXBlVXJsUHJlZml4KSk7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IEFueQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFR5cGVVcmwgPSBHZXRUeXBl
VXJsKG1lc3NhZ2UuRGVzY3JpcHRvciwgdHlwZVVybFByZWZpeCksCi0gICAgICAgICAgICAgICAg
VmFsdWUgPSBtZXNzYWdlLlRvQnl0ZVN0cmluZygpCi0gICAgICAgICAgICB9OwotICAgICAgICB9
Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25v
d25UeXBlcy9BcGkuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVz
L0FwaS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2OGEyYzk4MWE2OTg1OTU2
MDVlM2Q2MWY0ZWQwYjJiOTU1NmQ5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL0Fw
aS5jcworKysgL2Rldi9udWxsCkBAIC0xLDg0NyArMCwwIEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhl
IHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQotLy8gc291cmNlOiBnb29n
bGUvcHJvdG9idWYvYXBpLnByb3RvCi0jcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSAxNTkxLCAwNjEy
LCAzMDIxCi0jcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCi0KLXVzaW5nIHBiID0gZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWY7Ci11c2luZyBwYmMgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5Db2xsZWN0aW9uczsKLXVzaW5nIHBiciA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJlZmxl
Y3Rpb247Ci11c2luZyBzY2cgPSBnbG9iYWw6OlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwot
bmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcyB7Ci0KLSAgLy8vIDxzdW1t
YXJ5PkhvbGRlciBmb3IgcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgZnJvbSBnb29n
bGUvcHJvdG9idWYvYXBpLnByb3RvPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25v
c3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc3RhdGljIHBh
cnRpYWwgY2xhc3MgQXBpUmVmbGVjdGlvbiB7Ci0KLSAgICAjcmVnaW9uIERlc2NyaXB0b3IKLSAg
ICAvLy8gPHN1bW1hcnk+RmlsZSBkZXNjcmlwdG9yIGZvciBnb29nbGUvcHJvdG9idWYvYXBpLnBy
b3RvPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpGaWxlRGVzY3JpcHRvciBEZXNj
cmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBkZXNjcmlwdG9yOyB9Ci0gICAgfQotICAgIHBy
aXZhdGUgc3RhdGljIHBicjo6RmlsZURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLQotICAgIHN0YXRp
YyBBcGlSZWZsZWN0aW9uKCkgewotICAgICAgYnl0ZVtdIGRlc2NyaXB0b3JEYXRhID0gZ2xvYmFs
OjpTeXN0ZW0uQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKAotICAgICAgICAgIHN0cmluZy5Db25j
YXQoCi0gICAgICAgICAgICAiQ2hsbmIyOW5iR1V2Y0hKdmRHOWlkV1l2WVhCcExuQnliM1J2RWc5
bmIyOW5iR1V1Y0hKdmRHOWlkV1lhIiwKLSAgICAgICAgICAgICJKR2R2YjJkc1pTOXdjbTkwYjJK
MVppOXpiM1Z5WTJWZlkyOXVkR1Y0ZEM1d2NtOTBieG9hWjI5dloyeGwiLAotICAgICAgICAgICAg
IkwzQnliM1J2WW5WbUwzUjVjR1V1Y0hKdmRHOGlnUUlLQTBGd2FSSU1DZ1J1WVcxbEdBRWdBU2dK
RWlnSyIsCi0gICAgICAgICAgICAiQjIxbGRHaHZaSE1ZQWlBREtBc3lGeTVuYjI5bmJHVXVjSEp2
ZEc5aWRXWXVUV1YwYUc5a0VpZ0tCMjl3IiwKLSAgICAgICAgICAgICJkR2x2Ym5NWUF5QURLQXN5
Rnk1bmIyOW5iR1V1Y0hKdmRHOWlkV1l1VDNCMGFXOXVFZzhLQjNabGNuTnAiLAotICAgICAgICAg
ICAgImIyNFlCQ0FCS0FrU05nb09jMjkxY21ObFgyTnZiblJsZUhRWUJTQUJLQXN5SGk1bmIyOW5i
R1V1Y0hKdiIsCi0gICAgICAgICAgICAiZEc5aWRXWXVVMjkxY21ObFEyOXVkR1Y0ZEJJbUNnWnRh
WGhwYm5NWUJpQURLQXN5Rmk1bmIyOW5iR1V1IiwKLSAgICAgICAgICAgICJjSEp2ZEc5aWRXWXVU
V2w0YVc0U0p3b0djM2x1ZEdGNEdBY2dBU2dPTWhjdVoyOXZaMnhsTG5CeWIzUnYiLAotICAgICAg
ICAgICAgIlluVm1MbE41Ym5SaGVDTFZBUW9HVFdWMGFHOWtFZ3dLQkc1aGJXVVlBU0FCS0FrU0dB
b1FjbVZ4ZFdWeiIsCi0gICAgICAgICAgICAiZEY5MGVYQmxYM1Z5YkJnQ0lBRW9DUklaQ2hGeVpY
RjFaWE4wWDNOMGNtVmhiV2x1WnhnRElBRW9DQklaIiwKLSAgICAgICAgICAgICJDaEZ5WlhOd2Iy
NXpaVjkwZVhCbFgzVnliQmdFSUFFb0NSSWFDaEp5WlhOd2IyNXpaVjl6ZEhKbFlXMXAiLAotICAg
ICAgICAgICAgImJtY1lCU0FCS0FnU0tBb0hiM0IwYVc5dWN4Z0dJQU1vQ3pJWExtZHZiMmRzWlM1
d2NtOTBiMkoxWmk1UCIsCi0gICAgICAgICAgICAiY0hScGIyNFNKd29HYzNsdWRHRjRHQWNnQVNn
T01oY3VaMjl2WjJ4bExuQnliM1J2WW5WbUxsTjViblJoIiwKLSAgICAgICAgICAgICJlQ0lqQ2dW
TmFYaHBiaElNQ2dSdVlXMWxHQUVnQVNnSkVnd0tCSEp2YjNRWUFpQUJLQWxDU3dvVFkyOXQiLAot
ICAgICAgICAgICAgIkxtZHZiMmRzWlM1d2NtOTBiMkoxWmtJSVFYQnBVSEp2ZEc5UUFhQUJBYUlD
QTBkUVFxb0NIa2R2YjJkcyIsCi0gICAgICAgICAgICAiWlM1UWNtOTBiMkoxWmk1WFpXeHNTMjV2
ZDI1VWVYQmxjMklHY0hKdmRHOHoiKSk7Ci0gICAgICBkZXNjcmlwdG9yID0gcGJyOjpGaWxlRGVz
Y3JpcHRvci5Gcm9tR2VuZXJhdGVkQ29kZShkZXNjcmlwdG9yRGF0YSwKLSAgICAgICAgICBuZXcg
cGJyOjpGaWxlRGVzY3JpcHRvcltdIHsgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3du
VHlwZXMuU291cmNlQ29udGV4dFJlZmxlY3Rpb24uRGVzY3JpcHRvciwgZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuV2VsbEtub3duVHlwZXMuVHlwZVJlZmxlY3Rpb24uRGVzY3JpcHRvciwgfSwKLSAg
ICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyhudWxsLCBuZXcgcGJyOjpHZW5l
cmF0ZWRDbHJUeXBlSW5mb1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5
cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGkp
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGkuUGFyc2VyLCBuZXdb
XXsgIk5hbWUiLCAiTWV0aG9kcyIsICJPcHRpb25zIiwgIlZlcnNpb24iLCAiU291cmNlQ29udGV4
dCIsICJNaXhpbnMiLCAiU3ludGF4IiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAg
IG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5XZWxsS25vd25UeXBlcy5NZXRob2QpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5NZXRob2QuUGFyc2VyLCBuZXdbXXsgIk5hbWUiLCAiUmVxdWVzdFR5cGVVcmwi
LCAiUmVxdWVzdFN0cmVhbWluZyIsICJSZXNwb25zZVR5cGVVcmwiLCAiUmVzcG9uc2VTdHJlYW1p
bmciLCAiT3B0aW9ucyIsICJTeW50YXgiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAg
ICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLk1peGluKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2Vs
bEtub3duVHlwZXMuTWl4aW4uUGFyc2VyLCBuZXdbXXsgIk5hbWUiLCAiUm9vdCIgfSwgbnVsbCwg
bnVsbCwgbnVsbCkKLSAgICAgICAgICB9KSk7Ci0gICAgfQotICAgICNlbmRyZWdpb24KLQotICB9
Ci0gICNyZWdpb24gTWVzc2FnZXMKLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIEFwaSBpcyBhIGxp
Z2h0LXdlaWdodCBkZXNjcmlwdG9yIGZvciBhIHByb3RvY29sIGJ1ZmZlciBzZXJ2aWNlLgotICAv
Ly8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25V
c2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgQXBpIDog
cGI6OklNZXNzYWdlPEFwaT4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNz
YWdlUGFyc2VyPEFwaT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxBcGk+KCgpID0+
IG5ldyBBcGkoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxBcGk+IFBh
cnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJy
OjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5BcGlSZWZsZWN0aW9uLkRlc2NyaXB0
b3IuTWVzc2FnZVR5cGVzWzBdOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRv
ciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRv
cjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBBcGkoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigp
OwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVi
bGljIEFwaShBcGkgb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIG5hbWVfID0gb3RoZXIubmFtZV87
Ci0gICAgICBtZXRob2RzXyA9IG90aGVyLm1ldGhvZHNfLkNsb25lKCk7Ci0gICAgICBvcHRpb25z
XyA9IG90aGVyLm9wdGlvbnNfLkNsb25lKCk7Ci0gICAgICB2ZXJzaW9uXyA9IG90aGVyLnZlcnNp
b25fOwotICAgICAgU291cmNlQ29udGV4dCA9IG90aGVyLnNvdXJjZUNvbnRleHRfICE9IG51bGwg
PyBvdGhlci5Tb3VyY2VDb250ZXh0LkNsb25lKCkgOiBudWxsOwotICAgICAgbWl4aW5zXyA9IG90
aGVyLm1peGluc18uQ2xvbmUoKTsKLSAgICAgIHN5bnRheF8gPSBvdGhlci5zeW50YXhfOwotICAg
IH0KLQotICAgIHB1YmxpYyBBcGkgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IEFwaSh0aGlz
KTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm5hbWUi
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE5hbWVGaWVsZE51bWJlciA9
IDE7Ci0gICAgcHJpdmF0ZSBzdHJpbmcgbmFtZV8gPSAiIjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgLy8vICBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhpcyBhcGksIGluY2x1ZGluZyBw
YWNrYWdlIG5hbWUKLSAgICAvLy8gIGZvbGxvd2VkIGJ5IHRoZSBhcGkncyBzaW1wbGUgbmFtZS4K
LSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdHJpbmcgTmFtZSB7Ci0gICAgICBnZXQg
eyByZXR1cm4gbmFtZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIG5hbWVfID0gcGI6OlByb3Rv
UHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibWV0aG9kcyIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTWV0aG9kc0ZpZWxkTnVtYmVyID0g
MjsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5NZXRob2Q+IF9yZXBlYXRlZF9tZXRob2RzX2Nv
ZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgxOCwgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuTWV0aG9kLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSBy
ZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtu
b3duVHlwZXMuTWV0aG9kPiBtZXRob2RzXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuTWV0aG9kPigpOwotICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAvLy8gIFRoZSBtZXRob2RzIG9mIHRoaXMgYXBpLCBpbiB1bnNwZWNpZmllZCBv
cmRlci4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuTWV0aG9kPiBNZXRob2RzIHsK
LSAgICAgIGdldCB7IHJldHVybiBtZXRob2RzXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAib3B0aW9ucyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBjb25zdCBpbnQgT3B0aW9uc0ZpZWxkTnVtYmVyID0gMzsKLSAgICBwcml2YXRlIHN0YXRp
YyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5PcHRpb24+IF9yZXBlYXRlZF9vcHRpb25zX2NvZGVjCi0gICAgICAgID0gcGI6OkZp
ZWxkQ29kZWMuRm9yTWVzc2FnZSgyNiwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3du
VHlwZXMuT3B0aW9uLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVk
RmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuT3B0aW9uPiBvcHRp
b25zXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2Vs
bEtub3duVHlwZXMuT3B0aW9uPigpOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIEFueSBt
ZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgQVBJLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVi
bGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcy5PcHRpb24+IE9wdGlvbnMgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbnNfOyB9Ci0g
ICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ2ZXJzaW9uIiBm
aWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBWZXJzaW9uRmllbGROdW1iZXIg
PSA0OwotICAgIHByaXZhdGUgc3RyaW5nIHZlcnNpb25fID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5
PgotICAgIC8vLyAgQSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBhcGkuIElmIHNwZWNpZmllZCwg
bXVzdCBoYXZlIHRoZSBmb3JtCi0gICAgLy8vICBgbWFqb3ItdmVyc2lvbi5taW5vci12ZXJzaW9u
YCwgYXMgaW4gYDEuMTBgLiBJZiB0aGUgbWlub3IgdmVyc2lvbgotICAgIC8vLyAgaXMgb21pdHRl
ZCwgaXQgZGVmYXVsdHMgdG8gemVyby4gSWYgdGhlIGVudGlyZSB2ZXJzaW9uIGZpZWxkIGlzCi0g
ICAgLy8vICBlbXB0eSwgdGhlIG1ham9yIHZlcnNpb24gaXMgZGVyaXZlZCBmcm9tIHRoZSBwYWNr
YWdlIG5hbWUsIGFzCi0gICAgLy8vICBvdXRsaW5lZCBiZWxvdy4gSWYgdGhlIGZpZWxkIGlzIG5v
dCBlbXB0eSwgdGhlIHZlcnNpb24gaW4gdGhlCi0gICAgLy8vICBwYWNrYWdlIG5hbWUgd2lsbCBi
ZSB2ZXJpZmllZCB0byBiZSBjb25zaXN0ZW50IHdpdGggd2hhdCBpcwotICAgIC8vLyAgcHJvdmlk
ZWQgaGVyZS4KLSAgICAvLy8KLSAgICAvLy8gIFRoZSB2ZXJzaW9uaW5nIHNjaGVtYSB1c2VzIFtz
ZW1hbnRpYwotICAgIC8vLyAgdmVyc2lvbmluZ10oaHR0cDovL3NlbXZlci5vcmcpIHdoZXJlIHRo
ZSBtYWpvciB2ZXJzaW9uIG51bWJlcgotICAgIC8vLyAgaW5kaWNhdGVzIGEgYnJlYWtpbmcgY2hh
bmdlIGFuZCB0aGUgbWlub3IgdmVyc2lvbiBhbiBhZGRpdGl2ZSwKLSAgICAvLy8gIG5vbi1icmVh
a2luZyBjaGFuZ2UuIEJvdGggdmVyc2lvbiBudW1iZXJzIGFyZSBzaWduYWxzIHRvIHVzZXJzCi0g
ICAgLy8vICB3aGF0IHRvIGV4cGVjdCBmcm9tIGRpZmZlcmVudCB2ZXJzaW9ucywgYW5kIHNob3Vs
ZCBiZSBjYXJlZnVsbHkKLSAgICAvLy8gIGNob3NlbiBiYXNlZCBvbiB0aGUgcHJvZHVjdCBwbGFu
LgotICAgIC8vLwotICAgIC8vLyAgVGhlIG1ham9yIHZlcnNpb24gaXMgYWxzbyByZWZsZWN0ZWQg
aW4gdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUKLSAgICAvLy8gIEFQSSwgd2hpY2ggbXVzdCBlbmQg
aW4gYHYmbHQ7bWFqb3ItdmVyc2lvbj5gLCBhcyBpbgotICAgIC8vLyAgYGdvb2dsZS5mZWF0dXJl
LnYxYC4gRm9yIG1ham9yIHZlcnNpb25zIDAgYW5kIDEsIHRoZSBzdWZmaXggY2FuCi0gICAgLy8v
ICBiZSBvbWl0dGVkLiBaZXJvIG1ham9yIHZlcnNpb25zIG11c3Qgb25seSBiZSB1c2VkIGZvcgot
ICAgIC8vLyAgZXhwZXJpbWVudGFsLCBub25lLUdBIGFwaXMuCi0gICAgLy8vIDwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgc3RyaW5nIFZlcnNpb24gewotICAgICAgZ2V0IHsgcmV0dXJuIHZlcnNpb25f
OyB9Ci0gICAgICBzZXQgewotICAgICAgICB2ZXJzaW9uXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlv
bnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInNvdXJjZV9jb250ZXh0IiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTb3VyY2VDb250ZXh0RmllbGROdW1iZXIg
PSA1OwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
U291cmNlQ29udGV4dCBzb3VyY2VDb250ZXh0XzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8v
ICBTb3VyY2UgY29udGV4dCBmb3IgdGhlIHByb3RvY29sIGJ1ZmZlciBzZXJ2aWNlIHJlcHJlc2Vu
dGVkIGJ5IHRoaXMKLSAgICAvLy8gIG1lc3NhZ2UuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU291cmNlQ29udGV4
dCBTb3VyY2VDb250ZXh0IHsKLSAgICAgIGdldCB7IHJldHVybiBzb3VyY2VDb250ZXh0XzsgfQot
ICAgICAgc2V0IHsKLSAgICAgICAgc291cmNlQ29udGV4dF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm1peGlucyIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTWl4aW5zRmllbGROdW1iZXIgPSA2
OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLk1peGluPiBfcmVwZWF0ZWRfbWl4aW5zX2NvZGVj
Ci0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSg1MCwgZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuV2VsbEtub3duVHlwZXMuTWl4aW4uUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRv
bmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcy5NaXhpbj4gbWl4aW5zXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuTWl4aW4+KCk7Ci0gICAgLy8vIDxzdW1tYXJ5Pgot
ICAgIC8vLyAgSW5jbHVkZWQgQVBJcy4gU2VlIFtNaXhpbl1bXS4KLSAgICAvLy8gPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
V2VsbEtub3duVHlwZXMuTWl4aW4+IE1peGlucyB7Ci0gICAgICBnZXQgeyByZXR1cm4gbWl4aW5z
XzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic3lu
dGF4IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTeW50YXhGaWVsZE51
bWJlciA9IDc7Ci0gICAgcHJpdmF0ZSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcy5TeW50YXggc3ludGF4XyA9IDA7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhl
IHNvdXJjZSBzeW50YXggb2YgdGhlIHNlcnZpY2UuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU3ludGF4IFN5bnRh
eCB7Ci0gICAgICBnZXQgeyByZXR1cm4gc3ludGF4XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
c3ludGF4XyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBi
b29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMg
QXBpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoQXBpIG90aGVyKSB7Ci0gICAg
ICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChOYW1lICE9IG90aGVyLk5h
bWUpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFtZXRob2RzXy5FcXVhbHMob3RoZXIubWV0aG9k
c18pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighb3B0aW9uc18uRXF1YWxzKG90aGVyLm9wdGlv
bnNfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKFZlcnNpb24gIT0gb3RoZXIuVmVyc2lvbikg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKFNvdXJjZUNvbnRleHQsIG90
aGVyLlNvdXJjZUNvbnRleHQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighbWl4aW5zXy5FcXVh
bHMob3RoZXIubWl4aW5zXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChTeW50YXggIT0gb3Ro
ZXIuU3ludGF4KSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAx
OwotICAgICAgaWYgKE5hbWUuTGVuZ3RoICE9IDApIGhhc2ggXj0gTmFtZS5HZXRIYXNoQ29kZSgp
OwotICAgICAgaGFzaCBePSBtZXRob2RzXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBv
cHRpb25zXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKFZlcnNpb24uTGVuZ3RoICE9IDApIGhh
c2ggXj0gVmVyc2lvbi5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKHNvdXJjZUNvbnRleHRfICE9
IG51bGwpIGhhc2ggXj0gU291cmNlQ29udGV4dC5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBe
PSBtaXhpbnNfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoU3ludGF4ICE9IDApIGhhc2ggXj0g
U3ludGF4LkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29u
Rm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChO
YW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZVN0cmluZyhOYW1lKTsKLSAgICAgIH0KLSAgICAgIG1ldGhvZHNfLldy
aXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfbWV0aG9kc19jb2RlYyk7Ci0gICAgICBvcHRpb25zXy5X
cml0ZVRvKG91dHB1dCwgX3JlcGVhdGVkX29wdGlvbnNfY29kZWMpOwotICAgICAgaWYgKFZlcnNp
b24uTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDM0KTsKLSAgICAg
ICAgb3V0cHV0LldyaXRlU3RyaW5nKFZlcnNpb24pOwotICAgICAgfQotICAgICAgaWYgKHNvdXJj
ZUNvbnRleHRfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDQyKTsKLSAg
ICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShTb3VyY2VDb250ZXh0KTsKLSAgICAgIH0KLSAgICAg
IG1peGluc18uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9taXhpbnNfY29kZWMpOwotICAgICAg
aWYgKFN5bnRheCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg1Nik7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZUVudW0oKGludCkgU3ludGF4KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAg
ICBpZiAoTmFtZS5MZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRP
dXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoTmFtZSk7Ci0gICAgICB9Ci0gICAgICBzaXpl
ICs9IG1ldGhvZHNfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX21ldGhvZHNfY29kZWMpOwotICAg
ICAgc2l6ZSArPSBvcHRpb25zXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9vcHRpb25zX2NvZGVj
KTsKLSAgICAgIGlmIChWZXJzaW9uLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSAr
IHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShWZXJzaW9uKTsKLSAgICAg
IH0KLSAgICAgIGlmIChzb3VyY2VDb250ZXh0XyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUgKz0g
MSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoU291cmNlQ29udGV4
dCk7Ci0gICAgICB9Ci0gICAgICBzaXplICs9IG1peGluc18uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0
ZWRfbWl4aW5zX2NvZGVjKTsKLSAgICAgIGlmIChTeW50YXggIT0gMCkgewotICAgICAgICBzaXpl
ICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUVudW1TaXplKChpbnQpIFN5bnRh
eCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBNZXJnZUZyb20oQXBpIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTmFtZS5MZW5ndGggIT0gMCkg
ewotICAgICAgICBOYW1lID0gb3RoZXIuTmFtZTsKLSAgICAgIH0KLSAgICAgIG1ldGhvZHNfLkFk
ZChvdGhlci5tZXRob2RzXyk7Ci0gICAgICBvcHRpb25zXy5BZGQob3RoZXIub3B0aW9uc18pOwot
ICAgICAgaWYgKG90aGVyLlZlcnNpb24uTGVuZ3RoICE9IDApIHsKLSAgICAgICAgVmVyc2lvbiA9
IG90aGVyLlZlcnNpb247Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuc291cmNlQ29udGV4dF8g
IT0gbnVsbCkgewotICAgICAgICBpZiAoc291cmNlQ29udGV4dF8gPT0gbnVsbCkgewotICAgICAg
ICAgIHNvdXJjZUNvbnRleHRfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93
blR5cGVzLlNvdXJjZUNvbnRleHQoKTsKLSAgICAgICAgfQotICAgICAgICBTb3VyY2VDb250ZXh0
Lk1lcmdlRnJvbShvdGhlci5Tb3VyY2VDb250ZXh0KTsKLSAgICAgIH0KLSAgICAgIG1peGluc18u
QWRkKG90aGVyLm1peGluc18pOwotICAgICAgaWYgKG90aGVyLlN5bnRheCAhPSAwKSB7Ci0gICAg
ICAgIFN5bnRheCA9IG90aGVyLlN5bnRheDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQg
dGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAg
ICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5T
a2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDEwOiB7
Ci0gICAgICAgICAgICBOYW1lID0gaW5wdXQuUmVhZFN0cmluZygpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTg6IHsKLSAgICAgICAgICAgIG1ldGhv
ZHNfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfbWV0aG9kc19jb2RlYyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNjogewotICAgICAg
ICAgICAgb3B0aW9uc18uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9vcHRpb25zX2Nv
ZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM0
OiB7Ci0gICAgICAgICAgICBWZXJzaW9uID0gaW5wdXQuUmVhZFN0cmluZygpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDI6IHsKLSAgICAgICAgICAg
IGlmIChzb3VyY2VDb250ZXh0XyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIHNvdXJjZUNvbnRl
eHRfID0gbmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlNvdXJjZUNv
bnRleHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKHNv
dXJjZUNvbnRleHRfKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBjYXNlIDUwOiB7Ci0gICAgICAgICAgICBtaXhpbnNfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBf
cmVwZWF0ZWRfbWl4aW5zX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDU2OiB7Ci0gICAgICAgICAgICBzeW50YXhfID0gKGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN5bnRheCkgaW5wdXQuUmVhZEVudW0oKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIE1ldGhvZCByZXByZXNlbnRzIGEgbWV0
aG9kIG9mIGFuIGFwaS4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdu
b3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBw
YXJ0aWFsIGNsYXNzIE1ldGhvZCA6IHBiOjpJTWVzc2FnZTxNZXRob2Q+IHsKLSAgICBwcml2YXRl
IHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxNZXRob2Q+IF9wYXJzZXIgPSBuZXcg
cGI6Ok1lc3NhZ2VQYXJzZXI8TWV0aG9kPigoKSA9PiBuZXcgTWV0aG9kKCkpOwotICAgIHB1Ymxp
YyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8TWV0aG9kPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4g
X3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3Ig
RGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYu
V2VsbEtub3duVHlwZXMuQXBpUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1sxXTsg
fQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2Ny
aXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgTWV0aG9kKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBw
YXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBNZXRob2QoTWV0aG9k
IG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBuYW1lXyA9IG90aGVyLm5hbWVfOwotICAgICAgcmVx
dWVzdFR5cGVVcmxfID0gb3RoZXIucmVxdWVzdFR5cGVVcmxfOwotICAgICAgcmVxdWVzdFN0cmVh
bWluZ18gPSBvdGhlci5yZXF1ZXN0U3RyZWFtaW5nXzsKLSAgICAgIHJlc3BvbnNlVHlwZVVybF8g
PSBvdGhlci5yZXNwb25zZVR5cGVVcmxfOwotICAgICAgcmVzcG9uc2VTdHJlYW1pbmdfID0gb3Ro
ZXIucmVzcG9uc2VTdHJlYW1pbmdfOwotICAgICAgb3B0aW9uc18gPSBvdGhlci5vcHRpb25zXy5D
bG9uZSgpOwotICAgICAgc3ludGF4XyA9IG90aGVyLnN5bnRheF87Ci0gICAgfQotCi0gICAgcHVi
bGljIE1ldGhvZCBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgTWV0aG9kKHRoaXMpOwotICAg
IH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibmFtZSIgZmllbGQu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTmFtZUZpZWxkTnVtYmVyID0gMTsKLSAg
ICBwcml2YXRlIHN0cmluZyBuYW1lXyA9ICIiOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8g
IFRoZSBzaW1wbGUgbmFtZSBvZiB0aGlzIG1ldGhvZC4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAg
IHB1YmxpYyBzdHJpbmcgTmFtZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gbmFtZV87IH0KLSAgICAg
IHNldCB7Ci0gICAgICAgIG5hbWVfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51
bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAicmVxdWVzdF90eXBlX3VybCIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgUmVxdWVzdFR5cGVVcmxGaWVsZE51bWJlciA9IDI7Ci0gICAg
cHJpdmF0ZSBzdHJpbmcgcmVxdWVzdFR5cGVVcmxfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5Pgot
ICAgIC8vLyAgQSBVUkwgb2YgdGhlIGlucHV0IG1lc3NhZ2UgdHlwZS4KLSAgICAvLy8gPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBzdHJpbmcgUmVxdWVzdFR5cGVVcmwgewotICAgICAgZ2V0IHsgcmV0
dXJuIHJlcXVlc3RUeXBlVXJsXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgcmVxdWVzdFR5cGVV
cmxfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2YWx1ZSIp
OwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRo
ZSAicmVxdWVzdF9zdHJlYW1pbmciIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3Qg
aW50IFJlcXVlc3RTdHJlYW1pbmdGaWVsZE51bWJlciA9IDM7Ci0gICAgcHJpdmF0ZSBib29sIHJl
cXVlc3RTdHJlYW1pbmdfOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIElmIHRydWUsIHRo
ZSByZXF1ZXN0IGlzIHN0cmVhbWVkLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGJv
b2wgUmVxdWVzdFN0cmVhbWluZyB7Ci0gICAgICBnZXQgeyByZXR1cm4gcmVxdWVzdFN0cmVhbWlu
Z187IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHJlcXVlc3RTdHJlYW1pbmdfID0gdmFsdWU7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJy
ZXNwb25zZV90eXBlX3VybCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQg
UmVzcG9uc2VUeXBlVXJsRmllbGROdW1iZXIgPSA0OwotICAgIHByaXZhdGUgc3RyaW5nIHJlc3Bv
bnNlVHlwZVVybF8gPSAiIjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBUaGUgVVJMIG9m
IHRoZSBvdXRwdXQgbWVzc2FnZSB0eXBlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGlj
IHN0cmluZyBSZXNwb25zZVR5cGVVcmwgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlc3BvbnNlVHlw
ZVVybF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHJlc3BvbnNlVHlwZVVybF8gPSBwYjo6UHJv
dG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJyZXNwb25zZV9z
dHJlYW1pbmciIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFJlc3BvbnNl
U3RyZWFtaW5nRmllbGROdW1iZXIgPSA1OwotICAgIHByaXZhdGUgYm9vbCByZXNwb25zZVN0cmVh
bWluZ187Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSWYgdHJ1ZSwgdGhlIHJlc3BvbnNl
IGlzIHN0cmVhbWVkLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGJvb2wgUmVzcG9u
c2VTdHJlYW1pbmcgewotICAgICAgZ2V0IHsgcmV0dXJuIHJlc3BvbnNlU3RyZWFtaW5nXzsgfQot
ICAgICAgc2V0IHsKLSAgICAgICAgcmVzcG9uc2VTdHJlYW1pbmdfID0gdmFsdWU7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvcHRpb25z
IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPcHRpb25zRmllbGROdW1i
ZXIgPSA2OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLk9wdGlvbj4gX3JlcGVhdGVkX29wdGlv
bnNfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDUwLCBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5PcHRpb24uUGFyc2VyKTsKLSAgICBwcml2
YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5X
ZWxsS25vd25UeXBlcy5PcHRpb24+IG9wdGlvbnNfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVsZDxn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5PcHRpb24+KCk7Ci0gICAgLy8v
IDxzdW1tYXJ5PgotICAgIC8vLyAgQW55IG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoZSBtZXRob2Qu
Ci0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLk9wdGlvbj4gT3B0aW9ucyB7Ci0gICAg
ICBnZXQgeyByZXR1cm4gb3B0aW9uc187IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Rmll
bGQgbnVtYmVyIGZvciB0aGUgInN5bnRheCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgU3ludGF4RmllbGROdW1iZXIgPSA3OwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU3ludGF4IHN5bnRheF8gPSAwOwotICAgIC8vLyA8
c3VtbWFyeT4KLSAgICAvLy8gIFRoZSBzb3VyY2Ugc3ludGF4IG9mIHRoaXMgbWV0aG9kLgotICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzLlN5bnRheCBTeW50YXggewotICAgICAgZ2V0IHsgcmV0dXJuIHN5bnRheF87IH0K
LSAgICAgIHNldCB7Ci0gICAgICAgIHN5bnRheF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICBy
ZXR1cm4gRXF1YWxzKG90aGVyIGFzIE1ldGhvZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wg
RXF1YWxzKE1ldGhvZCBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwg
bnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVy
ZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9
Ci0gICAgICBpZiAoTmFtZSAhPSBvdGhlci5OYW1lKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAo
UmVxdWVzdFR5cGVVcmwgIT0gb3RoZXIuUmVxdWVzdFR5cGVVcmwpIHJldHVybiBmYWxzZTsKLSAg
ICAgIGlmIChSZXF1ZXN0U3RyZWFtaW5nICE9IG90aGVyLlJlcXVlc3RTdHJlYW1pbmcpIHJldHVy
biBmYWxzZTsKLSAgICAgIGlmIChSZXNwb25zZVR5cGVVcmwgIT0gb3RoZXIuUmVzcG9uc2VUeXBl
VXJsKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoUmVzcG9uc2VTdHJlYW1pbmcgIT0gb3RoZXIu
UmVzcG9uc2VTdHJlYW1pbmcpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFvcHRpb25zXy5FcXVh
bHMob3RoZXIub3B0aW9uc18pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoU3ludGF4ICE9IG90
aGVyLlN5bnRheCkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0g
MTsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSBoYXNoIF49IE5hbWUuR2V0SGFzaENvZGUo
KTsKLSAgICAgIGlmIChSZXF1ZXN0VHlwZVVybC5MZW5ndGggIT0gMCkgaGFzaCBePSBSZXF1ZXN0
VHlwZVVybC5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKFJlcXVlc3RTdHJlYW1pbmcgIT0gZmFs
c2UpIGhhc2ggXj0gUmVxdWVzdFN0cmVhbWluZy5HZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKFJl
c3BvbnNlVHlwZVVybC5MZW5ndGggIT0gMCkgaGFzaCBePSBSZXNwb25zZVR5cGVVcmwuR2V0SGFz
aENvZGUoKTsKLSAgICAgIGlmIChSZXNwb25zZVN0cmVhbWluZyAhPSBmYWxzZSkgaGFzaCBePSBS
ZXNwb25zZVN0cmVhbWluZy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBvcHRpb25zXy5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKFN5bnRheCAhPSAwKSBoYXNoIF49IFN5bnRheC5HZXRI
YXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJy
aWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5U
b0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVU
byhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoTmFtZS5MZW5ndGgg
IT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTApOwotICAgICAgICBvdXRwdXQu
V3JpdGVTdHJpbmcoTmFtZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVxdWVzdFR5cGVVcmwuTGVu
Z3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE4KTsKLSAgICAgICAgb3V0
cHV0LldyaXRlU3RyaW5nKFJlcXVlc3RUeXBlVXJsKTsKLSAgICAgIH0KLSAgICAgIGlmIChSZXF1
ZXN0U3RyZWFtaW5nICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygyNCk7
Ci0gICAgICAgIG91dHB1dC5Xcml0ZUJvb2woUmVxdWVzdFN0cmVhbWluZyk7Ci0gICAgICB9Ci0g
ICAgICBpZiAoUmVzcG9uc2VUeXBlVXJsLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5X
cml0ZVJhd1RhZygzNCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhSZXNwb25zZVR5cGVV
cmwpOwotICAgICAgfQotICAgICAgaWYgKFJlc3BvbnNlU3RyZWFtaW5nICE9IGZhbHNlKSB7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg0MCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUJvb2wo
UmVzcG9uc2VTdHJlYW1pbmcpOwotICAgICAgfQotICAgICAgb3B0aW9uc18uV3JpdGVUbyhvdXRw
dXQsIF9yZXBlYXRlZF9vcHRpb25zX2NvZGVjKTsKLSAgICAgIGlmIChTeW50YXggIT0gMCkgewot
ICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNTYpOwotICAgICAgICBvdXRwdXQuV3JpdGVFbnVt
KChpbnQpIFN5bnRheCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxh
dGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYgKE5hbWUuTGVuZ3RoICE9
IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVT
dHJpbmdTaXplKE5hbWUpOwotICAgICAgfQotICAgICAgaWYgKFJlcXVlc3RUeXBlVXJsLkxlbmd0
aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21w
dXRlU3RyaW5nU2l6ZShSZXF1ZXN0VHlwZVVybCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVxdWVz
dFN0cmVhbWluZyAhPSBmYWxzZSkgewotICAgICAgICBzaXplICs9IDEgKyAxOwotICAgICAgfQot
ICAgICAgaWYgKFJlc3BvbnNlVHlwZVVybC5MZW5ndGggIT0gMCkgewotICAgICAgICBzaXplICs9
IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoUmVzcG9uc2VUeXBl
VXJsKTsKLSAgICAgIH0KLSAgICAgIGlmIChSZXNwb25zZVN0cmVhbWluZyAhPSBmYWxzZSkgewot
ICAgICAgICBzaXplICs9IDEgKyAxOwotICAgICAgfQotICAgICAgc2l6ZSArPSBvcHRpb25zXy5D
YWxjdWxhdGVTaXplKF9yZXBlYXRlZF9vcHRpb25zX2NvZGVjKTsKLSAgICAgIGlmIChTeW50YXgg
IT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0
ZUVudW1TaXplKChpbnQpIFN5bnRheCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oTWV0aG9kIG90aGVyKSB7Ci0gICAgICBp
ZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAo
b3RoZXIuTmFtZS5MZW5ndGggIT0gMCkgewotICAgICAgICBOYW1lID0gb3RoZXIuTmFtZTsKLSAg
ICAgIH0KLSAgICAgIGlmIChvdGhlci5SZXF1ZXN0VHlwZVVybC5MZW5ndGggIT0gMCkgewotICAg
ICAgICBSZXF1ZXN0VHlwZVVybCA9IG90aGVyLlJlcXVlc3RUeXBlVXJsOwotICAgICAgfQotICAg
ICAgaWYgKG90aGVyLlJlcXVlc3RTdHJlYW1pbmcgIT0gZmFsc2UpIHsKLSAgICAgICAgUmVxdWVz
dFN0cmVhbWluZyA9IG90aGVyLlJlcXVlc3RTdHJlYW1pbmc7Ci0gICAgICB9Ci0gICAgICBpZiAo
b3RoZXIuUmVzcG9uc2VUeXBlVXJsLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIFJlc3BvbnNlVHlw
ZVVybCA9IG90aGVyLlJlc3BvbnNlVHlwZVVybDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5S
ZXNwb25zZVN0cmVhbWluZyAhPSBmYWxzZSkgewotICAgICAgICBSZXNwb25zZVN0cmVhbWluZyA9
IG90aGVyLlJlc3BvbnNlU3RyZWFtaW5nOwotICAgICAgfQotICAgICAgb3B0aW9uc18uQWRkKG90
aGVyLm9wdGlvbnNfKTsKLSAgICAgIGlmIChvdGhlci5TeW50YXggIT0gMCkgewotICAgICAgICBT
eW50YXggPSBvdGhlci5TeW50YXg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
TWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsK
LSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3
aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExh
c3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAg
ICAgICAgICAgTmFtZSA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE4OiB7Ci0gICAgICAgICAgICBSZXF1ZXN0VHlw
ZVVybCA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgICBjYXNlIDI0OiB7Ci0gICAgICAgICAgICBSZXF1ZXN0U3RyZWFtaW5nID0g
aW5wdXQuUmVhZEJvb2woKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBjYXNlIDM0OiB7Ci0gICAgICAgICAgICBSZXNwb25zZVR5cGVVcmwgPSBpbnB1dC5SZWFk
U3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSA0MDogewotICAgICAgICAgICAgUmVzcG9uc2VTdHJlYW1pbmcgPSBpbnB1dC5SZWFkQm9vbCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNTA6IHsK
LSAgICAgICAgICAgIG9wdGlvbnNfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfb3B0
aW9uc19jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Y2FzZSA1NjogewotICAgICAgICAgICAgc3ludGF4XyA9IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5XZWxsS25vd25UeXBlcy5TeW50YXgpIGlucHV0LlJlYWRFbnVtKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0g
IC8vLyA8c3VtbWFyeT4KLSAgLy8vICBEZWNsYXJlcyBhbiBBUEkgdG8gYmUgaW5jbHVkZWQgaW4g
dGhpcyBBUEkuIFRoZSBpbmNsdWRpbmcgQVBJIG11c3QKLSAgLy8vICByZWRlY2xhcmUgYWxsIHRo
ZSBtZXRob2RzIGZyb20gdGhlIGluY2x1ZGVkIEFQSSwgYnV0IGRvY3VtZW50YXRpb24KLSAgLy8v
ICBhbmQgb3B0aW9ucyBhcmUgaW5oZXJpdGVkIGFzIGZvbGxvd3M6Ci0gIC8vLwotICAvLy8gIC0g
SWYgYWZ0ZXIgY29tbWVudCBhbmQgd2hpdGVzcGFjZSBzdHJpcHBpbmcsIHRoZSBkb2N1bWVudGF0
aW9uCi0gIC8vLyAgICBzdHJpbmcgb2YgdGhlIHJlZGVjbGFyZWQgbWV0aG9kIGlzIGVtcHR5LCBp
dCB3aWxsIGJlIGluaGVyaXRlZAotICAvLy8gICAgZnJvbSB0aGUgb3JpZ2luYWwgbWV0aG9kLgot
ICAvLy8KLSAgLy8vICAtIEVhY2ggYW5ub3RhdGlvbiBiZWxvbmdpbmcgdG8gdGhlIHNlcnZpY2Ug
Y29uZmlnIChodHRwLAotICAvLy8gICAgdmlzaWJpbGl0eSkgd2hpY2ggaXMgbm90IHNldCBpbiB0
aGUgcmVkZWNsYXJlZCBtZXRob2Qgd2lsbCBiZQotICAvLy8gICAgaW5oZXJpdGVkLgotICAvLy8K
LSAgLy8vICAtIElmIGFuIGh0dHAgYW5ub3RhdGlvbiBpcyBpbmhlcml0ZWQsIHRoZSBwYXRoIHBh
dHRlcm4gd2lsbCBiZQotICAvLy8gICAgbW9kaWZpZWQgYXMgZm9sbG93cy4gQW55IHZlcnNpb24g
cHJlZml4IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlCi0gIC8vLyAgICB2ZXJzaW9uIG9mIHRoZSBp
bmNsdWRpbmcgQVBJIHBsdXMgdGhlIFtyb290XVtdIHBhdGggaWYgc3BlY2lmaWVkLgotICAvLy8K
LSAgLy8vICBFeGFtcGxlIG9mIGEgc2ltcGxlIG1peGluOgotICAvLy8KLSAgLy8vICAgICAgcGFj
a2FnZSBnb29nbGUuYWNsLnYxOwotICAvLy8gICAgICBzZXJ2aWNlIEFjY2Vzc0NvbnRyb2wgewot
ICAvLy8gICAgICAgIC8vIEdldCB0aGUgdW5kZXJseWluZyBBQ0wgb2JqZWN0LgotICAvLy8gICAg
ICAgIHJwYyBHZXRBY2woR2V0QWNsUmVxdWVzdCkgcmV0dXJucyAoQWNsKSB7Ci0gIC8vLyAgICAg
ICAgICBvcHRpb24gKGdvb2dsZS5hcGkuaHR0cCkuZ2V0ID0gIi92MS97cmVzb3VyY2U9Kip9Omdl
dEFjbCI7Ci0gIC8vLyAgICAgICAgfQotICAvLy8gICAgICB9Ci0gIC8vLwotICAvLy8gICAgICBw
YWNrYWdlIGdvb2dsZS5zdG9yYWdlLnYyOwotICAvLy8gICAgICBzZXJ2aWNlIFN0b3JhZ2Ugewot
ICAvLy8gICAgICAgIHJwYyBHZXRBY2woR2V0QWNsUmVxdWVzdCkgcmV0dXJucyAoQWNsKTsKLSAg
Ly8vCi0gIC8vLyAgICAgICAgLy8gR2V0IGEgZGF0YSByZWNvcmQuCi0gIC8vLyAgICAgICAgcnBj
IEdldERhdGEoR2V0RGF0YVJlcXVlc3QpIHJldHVybnMgKERhdGEpIHsKLSAgLy8vICAgICAgICAg
IG9wdGlvbiAoZ29vZ2xlLmFwaS5odHRwKS5nZXQgPSAiL3YyL3tyZXNvdXJjZT0qKn0iOwotICAv
Ly8gICAgICAgIH0KLSAgLy8vICAgICAgfQotICAvLy8KLSAgLy8vICBFeGFtcGxlIG9mIGEgbWl4
aW4gY29uZmlndXJhdGlvbjoKLSAgLy8vCi0gIC8vLyAgICAgIGFwaXM6Ci0gIC8vLyAgICAgIC0g
bmFtZTogZ29vZ2xlLnN0b3JhZ2UudjIuU3RvcmFnZQotICAvLy8gICAgICAgIG1peGluczoKLSAg
Ly8vICAgICAgICAtIG5hbWU6IGdvb2dsZS5hY2wudjEuQWNjZXNzQ29udHJvbAotICAvLy8KLSAg
Ly8vICBUaGUgbWl4aW4gY29uc3RydWN0IGltcGxpZXMgdGhhdCBhbGwgbWV0aG9kcyBpbiBgQWNj
ZXNzQ29udHJvbGAgYXJlCi0gIC8vLyAgYWxzbyBkZWNsYXJlZCB3aXRoIHNhbWUgbmFtZSBhbmQg
cmVxdWVzdC9yZXNwb25zZSB0eXBlcyBpbgotICAvLy8gIGBTdG9yYWdlYC4gQSBkb2N1bWVudGF0
aW9uIGdlbmVyYXRvciBvciBhbm5vdGF0aW9uIHByb2Nlc3NvciB3aWxsCi0gIC8vLyAgc2VlIHRo
ZSBlZmZlY3RpdmUgYFN0b3JhZ2UuR2V0QWNsYCBtZXRob2QgYWZ0ZXIgaW5oZXJ0aW5nCi0gIC8v
LyAgZG9jdW1lbnRhdGlvbiBhbmQgYW5ub3RhdGlvbnMgYXMgZm9sbG93czoKLSAgLy8vCi0gIC8v
LyAgICAgIHNlcnZpY2UgU3RvcmFnZSB7Ci0gIC8vLyAgICAgICAgLy8gR2V0IHRoZSB1bmRlcmx5
aW5nIEFDTCBvYmplY3QuCi0gIC8vLyAgICAgICAgcnBjIEdldEFjbChHZXRBY2xSZXF1ZXN0KSBy
ZXR1cm5zIChBY2wpIHsKLSAgLy8vICAgICAgICAgIG9wdGlvbiAoZ29vZ2xlLmFwaS5odHRwKS5n
ZXQgPSAiL3YyL3tyZXNvdXJjZT0qKn06Z2V0QWNsIjsKLSAgLy8vICAgICAgICB9Ci0gIC8vLyAg
ICAgICAgLi4uCi0gIC8vLyAgICAgIH0KLSAgLy8vCi0gIC8vLyAgTm90ZSBob3cgdGhlIHZlcnNp
b24gaW4gdGhlIHBhdGggcGF0dGVybiBjaGFuZ2VkIGZyb20gYHYxYCB0byBgdjJgLgotICAvLy8K
LSAgLy8vICBJZiB0aGUgYHJvb3RgIGZpZWxkIGluIHRoZSBtaXhpbiBpcyBzcGVjaWZpZWQsIGl0
IHNob3VsZCBiZSBhCi0gIC8vLyAgcmVsYXRpdmUgcGF0aCB1bmRlciB3aGljaCBpbmhlcml0ZWQg
SFRUUCBwYXRocyBhcmUgcGxhY2VkLiBFeGFtcGxlOgotICAvLy8KLSAgLy8vICAgICAgYXBpczoK
LSAgLy8vICAgICAgLSBuYW1lOiBnb29nbGUuc3RvcmFnZS52Mi5TdG9yYWdlCi0gIC8vLyAgICAg
ICAgbWl4aW5zOgotICAvLy8gICAgICAgIC0gbmFtZTogZ29vZ2xlLmFjbC52MS5BY2Nlc3NDb250
cm9sCi0gIC8vLyAgICAgICAgICByb290OiBhY2xzCi0gIC8vLwotICAvLy8gIFRoaXMgaW1wbGll
cyB0aGUgZm9sbG93aW5nIGluaGVyaXRlZCBIVFRQIGFubm90YXRpb246Ci0gIC8vLwotICAvLy8g
ICAgICBzZXJ2aWNlIFN0b3JhZ2UgewotICAvLy8gICAgICAgIC8vIEdldCB0aGUgdW5kZXJseWlu
ZyBBQ0wgb2JqZWN0LgotICAvLy8gICAgICAgIHJwYyBHZXRBY2woR2V0QWNsUmVxdWVzdCkgcmV0
dXJucyAoQWNsKSB7Ci0gIC8vLyAgICAgICAgICBvcHRpb24gKGdvb2dsZS5hcGkuaHR0cCkuZ2V0
ID0gIi92Mi9hY2xzL3tyZXNvdXJjZT0qKn06Z2V0QWNsIjsKLSAgLy8vICAgICAgICB9Ci0gIC8v
LyAgICAgICAgLi4uCi0gIC8vLyAgICAgIH0KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6
U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVi
bGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIE1peGluIDogcGI6OklNZXNzYWdlPE1peGluPiB7Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8TWl4aW4+IF9wYXJz
ZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8TWl4aW4+KCgpID0+IG5ldyBNaXhpbigpKTsKLSAg
ICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPE1peGluPiBQYXJzZXIgeyBnZXQgeyBy
ZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2Ny
aXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuQXBpUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBl
c1syXTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdl
LkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0K
LSAgICBwdWJsaWMgTWl4aW4oKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQot
ICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIE1peGluKE1p
eGluIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICBuYW1lXyA9IG90aGVyLm5hbWVfOwotICAgICAg
cm9vdF8gPSBvdGhlci5yb290XzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWl4aW4gQ2xvbmUoKSB7
Ci0gICAgICByZXR1cm4gbmV3IE1peGluKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFy
eT5GaWVsZCBudW1iZXIgZm9yIHRoZSAibmFtZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyBjb25zdCBpbnQgTmFtZUZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIHN0cmluZyBuYW1l
XyA9ICIiOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFRoZSBmdWxseSBxdWFsaWZpZWQg
bmFtZSBvZiB0aGUgQVBJIHdoaWNoIGlzIGluY2x1ZGVkLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgcHVibGljIHN0cmluZyBOYW1lIHsKLSAgICAgIGdldCB7IHJldHVybiBuYW1lXzsgfQotICAg
ICAgc2V0IHsKLSAgICAgICAgbmFtZV8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90
TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5
PkZpZWxkIG51bWJlciBmb3IgdGhlICJyb290IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGlj
IGNvbnN0IGludCBSb290RmllbGROdW1iZXIgPSAyOwotICAgIHByaXZhdGUgc3RyaW5nIHJvb3Rf
ID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgSWYgbm9uLWVtcHR5IHNwZWNpZmll
cyBhIHBhdGggdW5kZXIgd2hpY2ggaW5oZXJpdGVkIEhUVFAgcGF0aHMKLSAgICAvLy8gIGFyZSBy
b290ZWQuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RyaW5nIFJvb3QgewotICAg
ICAgZ2V0IHsgcmV0dXJuIHJvb3RfOyB9Ci0gICAgICBzZXQgewotICAgICAgICByb290XyA9IHBi
OjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVy
KSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIE1peGluKTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgYm9vbCBFcXVhbHMoTWl4aW4gb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVh
bHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAg
IGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgfQotICAgICAgaWYgKE5hbWUgIT0gb3RoZXIuTmFtZSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgaWYgKFJvb3QgIT0gb3RoZXIuUm9vdCkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsK
LSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSBoYXNoIF49
IE5hbWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChSb290Lkxlbmd0aCAhPSAwKSBoYXNoIF49
IFJvb3QuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1
YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25G
b3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKE5h
bWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDEwKTsKLSAgICAg
ICAgb3V0cHV0LldyaXRlU3RyaW5nKE5hbWUpOwotICAgICAgfQotICAgICAgaWYgKFJvb3QuTGVu
Z3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE4KTsKLSAgICAgICAgb3V0
cHV0LldyaXRlU3RyaW5nKFJvb3QpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQg
Q2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChOYW1lLkxl
bmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5D
b21wdXRlU3RyaW5nU2l6ZShOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmIChSb290Lkxlbmd0aCAh
PSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRl
U3RyaW5nU2l6ZShSb290KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQot
ICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShNaXhpbiBvdGhlcikgewotICAgICAgaWYgKG90aGVy
ID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk5h
bWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgTmFtZSA9IG90aGVyLk5hbWU7Ci0gICAgICB9Ci0g
ICAgICBpZiAob3RoZXIuUm9vdC5MZW5ndGggIT0gMCkgewotICAgICAgICBSb290ID0gb3RoZXIu
Um9vdDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNv
ZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0
YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDEwOiB7Ci0gICAgICAgICAgICBOYW1lID0g
aW5wdXQuUmVhZFN0cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIGNhc2UgMTg6IHsKLSAgICAgICAgICAgIFJvb3QgPSBpbnB1dC5SZWFkU3RyaW5nKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0KLSAgfQotCi0gICNlbmRyZWdpb24KLQotfQotCi0jZW5kcmVnaW9uIERlc2lnbmVyIGdl
bmVyYXRlZCBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxL
bm93blR5cGVzL0R1cmF0aW9uLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25v
d25UeXBlcy9EdXJhdGlvbi5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE3MzU4
ZjRiMzgzYmIzOWRlMjNjMTM1YzU2ZjE0M2U1NTE0MmMwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxL
bm93blR5cGVzL0R1cmF0aW9uLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8v
IEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQh
Ci0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90bwotI3ByYWdtYSB3YXJu
aW5nIGRpc2FibGUgMTU5MSwgMDYxMiwgMzAyMQotI3JlZ2lvbiBEZXNpZ25lciBnZW5lcmF0ZWQg
Y29kZQotCi11c2luZyBwYiA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmOwotdXNpbmcgcGJjID0g
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuQ29sbGVjdGlvbnM7Ci11c2luZyBwYnIgPSBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uOwotdXNpbmcgc2NnID0gZ2xvYmFsOjpTeXN0ZW0u
Q29sbGVjdGlvbnMuR2VuZXJpYzsKLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuV2VsbEtub3du
VHlwZXMgewotCi0gIC8vLyA8c3VtbWFyeT5Ib2xkZXIgZm9yIHJlZmxlY3Rpb24gaW5mb3JtYXRp
b24gZ2VuZXJhdGVkIGZyb20gZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvPC9zdW1tYXJ5
PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJp
YnV0ZSgpXQotICBwdWJsaWMgc3RhdGljIHBhcnRpYWwgY2xhc3MgRHVyYXRpb25SZWZsZWN0aW9u
IHsKLQotICAgICNyZWdpb24gRGVzY3JpcHRvcgotICAgIC8vLyA8c3VtbWFyeT5GaWxlIGRlc2Ny
aXB0b3IgZm9yIGdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90bzwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgc3RhdGljIHBicjo6RmlsZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQg
eyByZXR1cm4gZGVzY3JpcHRvcjsgfQotICAgIH0KLSAgICBwcml2YXRlIHN0YXRpYyBwYnI6OkZp
bGVEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0KLSAgICBzdGF0aWMgRHVyYXRpb25SZWZsZWN0aW9u
KCkgewotICAgICAgYnl0ZVtdIGRlc2NyaXB0b3JEYXRhID0gZ2xvYmFsOjpTeXN0ZW0uQ29udmVy
dC5Gcm9tQmFzZTY0U3RyaW5nKAotICAgICAgICAgIHN0cmluZy5Db25jYXQoCi0gICAgICAgICAg
ICAiQ2g1bmIyOW5iR1V2Y0hKdmRHOWlkV1l2WkhWeVlYUnBiMjR1Y0hKdmRHOFNEMmR2YjJkc1pT
NXdjbTkwIiwKLSAgICAgICAgICAgICJiMkoxWmlJcUNnaEVkWEpoZEdsdmJoSVBDZ2R6WldOdmJt
UnpHQUVnQVNnREVnMEtCVzVoYm05ekdBSWciLAotICAgICAgICAgICAgIkFTZ0ZRbndLRTJOdmJT
NW5iMjluYkdVdWNISnZkRzlpZFdaQ0RVUjFjbUYwYVc5dVVISnZkRzlRQVZvcSIsCi0gICAgICAg
ICAgICAiWjJsMGFIVmlMbU52YlM5bmIyeGhibWN2Y0hKdmRHOWlkV1l2Y0hSNWNHVnpMMlIxY21G
MGFXOXVvQUVCIiwKLSAgICAgICAgICAgICJvZ0lEUjFCQ3FnSWVSMjl2WjJ4bExsQnliM1J2WW5W
bUxsZGxiR3hMYm05M2JsUjVjR1Z6WWdad2NtOTAiLAotICAgICAgICAgICAgImJ6TT0iKSk7Ci0g
ICAgICBkZXNjcmlwdG9yID0gcGJyOjpGaWxlRGVzY3JpcHRvci5Gcm9tR2VuZXJhdGVkQ29kZShk
ZXNjcmlwdG9yRGF0YSwKLSAgICAgICAgICBuZXcgcGJyOjpGaWxlRGVzY3JpcHRvcltdIHsgfSwK
LSAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyhudWxsLCBuZXcgcGJyOjpH
ZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENs
clR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5E
dXJhdGlvbiksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9u
LlBhcnNlciwgbmV3W117ICJTZWNvbmRzIiwgIk5hbm9zIiB9LCBudWxsLCBudWxsLCBudWxsKQot
ICAgICAgICAgIH0pKTsKLSAgICB9Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLSAgI3JlZ2lvbiBN
ZXNzYWdlcwotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgQSBEdXJhdGlvbiByZXByZXNlbnRzIGEg
c2lnbmVkLCBmaXhlZC1sZW5ndGggc3BhbiBvZiB0aW1lIHJlcHJlc2VudGVkCi0gIC8vLyAgYXMg
YSBjb3VudCBvZiBzZWNvbmRzIGFuZCBmcmFjdGlvbnMgb2Ygc2Vjb25kcyBhdCBuYW5vc2Vjb25k
Ci0gIC8vLyAgcmVzb2x1dGlvbi4gSXQgaXMgaW5kZXBlbmRlbnQgb2YgYW55IGNhbGVuZGFyIGFu
ZCBjb25jZXB0cyBsaWtlICJkYXkiCi0gIC8vLyAgb3IgIm1vbnRoIi4gSXQgaXMgcmVsYXRlZCB0
byBUaW1lc3RhbXAgaW4gdGhhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCi0gIC8vLyAgdHdvIFRp
bWVzdGFtcCB2YWx1ZXMgaXMgYSBEdXJhdGlvbiBhbmQgaXQgY2FuIGJlIGFkZGVkIG9yIHN1YnRy
YWN0ZWQKLSAgLy8vICBmcm9tIGEgVGltZXN0YW1wLiBSYW5nZSBpcyBhcHByb3hpbWF0ZWx5ICst
MTAsMDAwIHllYXJzLgotICAvLy8KLSAgLy8vICBFeGFtcGxlIDE6IENvbXB1dGUgRHVyYXRpb24g
ZnJvbSB0d28gVGltZXN0YW1wcyBpbiBwc2V1ZG8gY29kZS4KLSAgLy8vCi0gIC8vLyAgICAgIFRp
bWVzdGFtcCBzdGFydCA9IC4uLjsKLSAgLy8vICAgICAgVGltZXN0YW1wIGVuZCA9IC4uLjsKLSAg
Ly8vICAgICAgRHVyYXRpb24gZHVyYXRpb24gPSAuLi47Ci0gIC8vLwotICAvLy8gICAgICBkdXJh
dGlvbi5zZWNvbmRzID0gZW5kLnNlY29uZHMgLSBzdGFydC5zZWNvbmRzOwotICAvLy8gICAgICBk
dXJhdGlvbi5uYW5vcyA9IGVuZC5uYW5vcyAtIHN0YXJ0Lm5hbm9zOwotICAvLy8KLSAgLy8vICAg
ICAgaWYgKGR1cmF0aW9uLnNlY29uZHMgJmx0OyAwICZhbXA7JmFtcDsgZHVyYXRpb24ubmFub3Mg
PiAwKSB7Ci0gIC8vLyAgICAgICAgZHVyYXRpb24uc2Vjb25kcyArPSAxOwotICAvLy8gICAgICAg
IGR1cmF0aW9uLm5hbm9zIC09IDEwMDAwMDAwMDA7Ci0gIC8vLyAgICAgIH0gZWxzZSBpZiAoZHVy
YXRpb25zLnNlY29uZHMgPiAwICZhbXA7JmFtcDsgZHVyYXRpb24ubmFub3MgJmx0OyAwKSB7Ci0g
IC8vLyAgICAgICAgZHVyYXRpb24uc2Vjb25kcyAtPSAxOwotICAvLy8gICAgICAgIGR1cmF0aW9u
Lm5hbm9zICs9IDEwMDAwMDAwMDA7Ci0gIC8vLyAgICAgIH0KLSAgLy8vCi0gIC8vLyAgRXhhbXBs
ZSAyOiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIFRpbWVzdGFtcCArIER1cmF0aW9uIGluIHBzZXVk
byBjb2RlLgotICAvLy8KLSAgLy8vICAgICAgVGltZXN0YW1wIHN0YXJ0ID0gLi4uOwotICAvLy8g
ICAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IC4uLjsKLSAgLy8vICAgICAgVGltZXN0YW1wIGVuZCA9
IC4uLjsKLSAgLy8vCi0gIC8vLyAgICAgIGVuZC5zZWNvbmRzID0gc3RhcnQuc2Vjb25kcyArIGR1
cmF0aW9uLnNlY29uZHM7Ci0gIC8vLyAgICAgIGVuZC5uYW5vcyA9IHN0YXJ0Lm5hbm9zICsgZHVy
YXRpb24ubmFub3M7Ci0gIC8vLwotICAvLy8gICAgICBpZiAoZW5kLm5hbm9zICZsdDsgMCkgewot
ICAvLy8gICAgICAgIGVuZC5zZWNvbmRzIC09IDE7Ci0gIC8vLyAgICAgICAgZW5kLm5hbm9zICs9
IDEwMDAwMDAwMDA7Ci0gIC8vLyAgICAgIH0gZWxzZSBpZiAoZW5kLm5hbm9zID49IDEwMDAwMDAw
MDApIHsKLSAgLy8vICAgICAgICBlbmQuc2Vjb25kcyArPSAxOwotICAvLy8gICAgICAgIGVuZC5u
YW5vcyAtPSAxMDAwMDAwMDAwOwotICAvLy8gICAgICB9Ci0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtn
bG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCld
Ci0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBEdXJhdGlvbiA6IHBiOjpJTWVzc2FnZTxE
dXJhdGlvbj4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2Vy
PER1cmF0aW9uPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPER1cmF0aW9uPigoKSA9
PiBuZXcgRHVyYXRpb24oKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxE
dXJhdGlvbj4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGlj
IHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsg
cmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkR1cmF0aW9uUmVm
bGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1swXTsgfQotICAgIH0KLQotICAgIHBicjo6
TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsg
cmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgRHVyYXRpb24oKSB7Ci0g
ICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0
cnVjdGlvbigpOwotCi0gICAgcHVibGljIER1cmF0aW9uKER1cmF0aW9uIG90aGVyKSA6IHRoaXMo
KSB7Ci0gICAgICBzZWNvbmRzXyA9IG90aGVyLnNlY29uZHNfOwotICAgICAgbmFub3NfID0gb3Ro
ZXIubmFub3NfOwotICAgIH0KLQotICAgIHB1YmxpYyBEdXJhdGlvbiBDbG9uZSgpIHsKLSAgICAg
IHJldHVybiBuZXcgRHVyYXRpb24odGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZp
ZWxkIG51bWJlciBmb3IgdGhlICJzZWNvbmRzIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGlj
IGNvbnN0IGludCBTZWNvbmRzRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgbG9uZyBzZWNv
bmRzXzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBTaWduZWQgc2Vjb25kcyBvZiB0aGUg
c3BhbiBvZiB0aW1lLiBNdXN0IGJlIGZyb20gLTMxNSw1NzYsMDAwLDAwMAotICAgIC8vLyAgdG8g
KzMxNSw1NzYsMDAwLDAwMCBpbmNsdXNpdmUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgbG9uZyBTZWNvbmRzIHsKLSAgICAgIGdldCB7IHJldHVybiBzZWNvbmRzXzsgfQotICAgICAg
c2V0IHsKLSAgICAgICAgc2Vjb25kc18gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm5hbm9zIiBmaWVsZC48L3N1bW1hcnk+
Ci0gICAgcHVibGljIGNvbnN0IGludCBOYW5vc0ZpZWxkTnVtYmVyID0gMjsKLSAgICBwcml2YXRl
IGludCBuYW5vc187Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgU2lnbmVkIGZyYWN0aW9u
cyBvZiBhIHNlY29uZCBhdCBuYW5vc2Vjb25kIHJlc29sdXRpb24gb2YgdGhlIHNwYW4KLSAgICAv
Ly8gIG9mIHRpbWUuIER1cmF0aW9ucyBsZXNzIHRoYW4gb25lIHNlY29uZCBhcmUgcmVwcmVzZW50
ZWQgd2l0aCBhIDAKLSAgICAvLy8gIGBzZWNvbmRzYCBmaWVsZCBhbmQgYSBwb3NpdGl2ZSBvciBu
ZWdhdGl2ZSBgbmFub3NgIGZpZWxkLiBGb3IgZHVyYXRpb25zCi0gICAgLy8vICBvZiBvbmUgc2Vj
b25kIG9yIG1vcmUsIGEgbm9uLXplcm8gdmFsdWUgZm9yIHRoZSBgbmFub3NgIGZpZWxkIG11c3Qg
YmUKLSAgICAvLy8gIG9mIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGBzZWNvbmRzYCBmaWVsZC4gTXVz
dCBiZSBmcm9tIC05OTksOTk5LDk5OQotICAgIC8vLyAgdG8gKzk5OSw5OTksOTk5IGluY2x1c2l2
ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBpbnQgTmFub3MgewotICAgICAgZ2V0
IHsgcmV0dXJuIG5hbm9zXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgbmFub3NfID0gdmFsdWU7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVj
dCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBEdXJhdGlvbik7Ci0gICAg
fQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKER1cmF0aW9uIG90aGVyKSB7Ci0gICAgICBpZiAo
UmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChTZWNvbmRzICE9IG90aGVyLlNlY29u
ZHMpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChOYW5vcyAhPSBvdGhlci5OYW5vcykgcmV0dXJu
IGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRl
IGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChTZWNv
bmRzICE9IDBMKSBoYXNoIF49IFNlY29uZHMuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChOYW5v
cyAhPSAwKSBoYXNoIF49IE5hbm9zLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAg
cmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQp
IHsKLSAgICAgIGlmIChTZWNvbmRzICE9IDBMKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1Rh
Zyg4KTsKLSAgICAgICAgb3V0cHV0LldyaXRlSW50NjQoU2Vjb25kcyk7Ci0gICAgICB9Ci0gICAg
ICBpZiAoTmFub3MgIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMTYpOwotICAg
ICAgICBvdXRwdXQuV3JpdGVJbnQzMihOYW5vcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVi
bGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYg
KFNlY29uZHMgIT0gMEwpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtLkNvbXB1dGVJbnQ2NFNpemUoU2Vjb25kcyk7Ci0gICAgICB9Ci0gICAgICBpZiAoTmFub3Mg
IT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0
ZUludDMyU2l6ZShOYW5vcyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oRHVyYXRpb24gb3RoZXIpIHsKLSAgICAgIGlmIChv
dGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhl
ci5TZWNvbmRzICE9IDBMKSB7Ci0gICAgICAgIFNlY29uZHMgPSBvdGhlci5TZWNvbmRzOwotICAg
ICAgfQotICAgICAgaWYgKG90aGVyLk5hbm9zICE9IDApIHsKLSAgICAgICAgTmFub3MgPSBvdGhl
ci5OYW5vczsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6
OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUg
KCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAgIFNlY29u
ZHMgPSBpbnB1dC5SZWFkSW50NjQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgICBjYXNlIDE2OiB7Ci0gICAgICAgICAgICBOYW5vcyA9IGlucHV0LlJlYWRJbnQz
MigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotCi0gIH0KLQotICAjZW5kcmVnaW9uCi0KLX0KLQotI2VuZHJlZ2lvbiBEZXNpZ25l
ciBnZW5lcmF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9X
ZWxsS25vd25UeXBlcy9EdXJhdGlvblBhcnRpYWwuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3Rv
YnVmL1dlbGxLbm93blR5cGVzL0R1cmF0aW9uUGFydGlhbC5jcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjE2NGJmZDE5ZDJlNzkyMjk3YzgzNWI1MjliMTBkNmFhZTBiMTQwOS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL0R1cmF0aW9uUGFydGlhbC5jcworKysgL2Rldi9u
dWxsCkBAIC0xLDI3MCArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxp
Y2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11
c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKLXVzaW5nIFN5c3RlbS5U
ZXh0OwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzCi17Ci0gICAg
Ly8gTWFudWFsbHktd3JpdHRlbiBwYXJ0aWFsIGNsYXNzIGZvciB0aGUgRHVyYXRpb24gd2VsbC1r
bm93biB0eXBlLAotICAgIC8vIHByb3ZpZGluZyBhIGNvbnZlcnNpb24gdG8gVGltZVNwYW4gYW5k
IGNvbnZlbmllbmNlIG9wZXJhdG9ycy4KLSAgICBwdWJsaWMgcGFydGlhbCBjbGFzcyBEdXJhdGlv
biA6IElDdXN0b21EaWFnbm9zdGljTWVzc2FnZQotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gVGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBpbiBhIHNlY29uZC4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBOYW5vc2Vjb25k
c1BlclNlY29uZCA9IDEwMDAwMDAwMDA7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAg
Ly8vIFRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgaW4gYSBCQ0wgdGljayAoYXMgdXNlZCBieSA8
c2VlIGNyZWY9IlRpbWVTcGFuIi8+IGFuZCA8c2VlIGNyZWY9IkRhdGVUaW1lIi8+KS4KLSAgICAg
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IGludCBOYW5vc2Vjb25kc1Bl
clRpY2sgPSAxMDA7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gVGhlIG1h
eGltdW0gcGVybWl0dGVkIG51bWJlciBvZiBzZWNvbmRzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5
PgotICAgICAgICBwdWJsaWMgY29uc3QgbG9uZyBNYXhTZWNvbmRzID0gMzE1NTc2MDAwMDAwTDsK
LQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBUaGUgbWluaW11bSBwZXJtaXR0
ZWQgbnVtYmVyIG9mIHNlY29uZHMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1
YmxpYyBjb25zdCBsb25nIE1pblNlY29uZHMgPSAtMzE1NTc2MDAwMDAwTDsKLQotICAgICAgICBp
bnRlcm5hbCBjb25zdCBpbnQgTWF4TmFub3NlY29uZHMgPSBOYW5vc2Vjb25kc1BlclNlY29uZCAt
IDE7Ci0gICAgICAgIGludGVybmFsIGNvbnN0IGludCBNaW5OYW5vc2Vjb25kcyA9IC1OYW5vc2Vj
b25kc1BlclNlY29uZCArIDE7Ci0KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIGJvb2wgSXNOb3Jt
YWxpemVkKGxvbmcgc2Vjb25kcywgaW50IG5hbm9zZWNvbmRzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICAvLyBTaW1wbGUgYm91bmRhcmllcwotICAgICAgICAgICAgaWYgKHNlY29uZHMgPCBNaW5T
ZWNvbmRzIHx8IHNlY29uZHMgPiBNYXhTZWNvbmRzIHx8Ci0gICAgICAgICAgICAgICAgbmFub3Nl
Y29uZHMgPCBNaW5OYW5vc2Vjb25kcyB8fCBuYW5vc2Vjb25kcyA+IE1heE5hbm9zZWNvbmRzKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIC8vIFdlIG9ubHkgaGF2ZSBhIHByb2JsZW0gaXMgb25lIGlzIHN0cmlj
dGx5IG5lZ2F0aXZlIGFuZCB0aGUgb3RoZXIgaXMKLSAgICAgICAgICAgIC8vIHN0cmljdGx5IHBv
c2l0aXZlLgotICAgICAgICAgICAgcmV0dXJuIE1hdGguU2lnbihzZWNvbmRzKSAqIE1hdGguU2ln
bihuYW5vc2Vjb25kcykgIT0gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgICAgIC8vLyBDb252ZXJ0cyB0aGlzIDxzZWUgY3JlZj0iRHVyYXRpb24iLz4gdG8gYSA8
c2VlIGNyZWY9IlRpbWVTcGFuIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAv
Ly8gPHJlbWFya3M+SWYgdGhlIGR1cmF0aW9uIGlzIG5vdCBhIHByZWNpc2UgbnVtYmVyIG9mIHRp
Y2tzLCBpdCBpcyB0cnVuY2F0ZWQgdG93YXJkcyAwLjwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDxy
ZXR1cm5zPlRoZSB2YWx1ZSBvZiB0aGlzIGR1cmF0aW9uLCBhcyBhIDxjPlRpbWVTcGFuPC9jPi48
L3JldHVybnM+Ci0gICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkludmFsaWRPcGVyYXRpb25F
eGNlcHRpb24iPlRoaXMgdmFsdWUgaXNuJ3QgYSB2YWxpZCBub3JtYWxpemVkIGR1cmF0aW9uLCBh
cwotICAgICAgICAvLy8gZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uLjwvZXhjZXB0aW9u
PgotICAgICAgICBwdWJsaWMgVGltZVNwYW4gVG9UaW1lU3BhbigpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNoZWNrZWQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIUlzTm9y
bWFsaXplZChTZWNvbmRzLCBOYW5vcykpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiRHVyYXRpb24gd2Fz
IG5vdCBhIHZhbGlkIG5vcm1hbGl6ZWQgZHVyYXRpb24iKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgbG9uZyB0aWNrcyA9IFNlY29uZHMgKiBUaW1lU3Bhbi5UaWNrc1BlclNl
Y29uZCArIE5hbm9zIC8gTmFub3NlY29uZHNQZXJUaWNrOwotICAgICAgICAgICAgICAgIHJldHVy
biBUaW1lU3Bhbi5Gcm9tVGlja3ModGlja3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29udmVydHMgdGhlIGdpdmVuIDxz
ZWUgY3JlZj0iVGltZVNwYW4iLz4gdG8gYSA8c2VlIGNyZWY9IkR1cmF0aW9uIi8+LgotICAgICAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InRpbWVTcGFuIj5UaGUg
PGM+VGltZVNwYW48L2M+IHRvIGNvbnZlcnQuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5z
PlRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gPGM+VGltZVNwYW48L2M+LCBhcyBhIDxjPkR1cmF0aW9u
PC9jPi48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRHVyYXRpb24gRnJvbVRpbWVT
cGFuKFRpbWVTcGFuIHRpbWVTcGFuKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja2VkCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9uZyB0aWNrcyA9IHRpbWVTcGFuLlRpY2tz
OwotICAgICAgICAgICAgICAgIGxvbmcgc2Vjb25kcyA9IHRpY2tzIC8gVGltZVNwYW4uVGlja3NQ
ZXJTZWNvbmQ7Ci0gICAgICAgICAgICAgICAgaW50IG5hbm9zID0gKGludCkgKHRpY2tzICUgVGlt
ZVNwYW4uVGlja3NQZXJTZWNvbmQpICogTmFub3NlY29uZHNQZXJUaWNrOwotICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgRHVyYXRpb24geyBTZWNvbmRzID0gc2Vjb25kcywgTmFub3MgPSBuYW5v
cyB9OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gUmV0dXJucyB0aGUgcmVzdWx0IG9mIG5lZ2F0aW5nIHRoZSBkdXJhdGlvbi4g
Rm9yIGV4YW1wbGUsIHRoZSBuZWdhdGlvbiBvZiA1IG1pbnV0ZXMgaXMgLTUgbWludXRlcy4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhl
IGR1cmF0aW9uIHRvIG5lZ2F0ZS4gTXVzdCBub3QgYmUgbnVsbC48L3BhcmFtPgotICAgICAgICAv
Ly8gPHJldHVybnM+VGhlIG5lZ2F0ZWQgdmFsdWUgb2YgdGhpcyBkdXJhdGlvbi48L3JldHVybnM+
Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRHVyYXRpb24gb3BlcmF0b3IgLShEdXJhdGlvbiB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVs
bCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICAgICAgICBjaGVja2VkCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZSgtdmFsdWUuU2Vjb25kcywgLXZhbHVlLk5h
bm9zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgLy8vIEFkZHMgdGhlIHR3byBzcGVjaWZpZWQgPHNlZSBjcmVmPSJEdXJhdGlvbiIv
PiB2YWx1ZXMgdG9nZXRoZXIuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8
cGFyYW0gbmFtZT0ibGhzIj5UaGUgZmlyc3QgdmFsdWUgdG8gYWRkLiBNdXN0IG5vdCBiZSBudWxs
LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icmhzIj5UaGUgc2Vjb25kIHZhbHVl
IHRvIGFkZC4gTXVzdCBub3QgYmUgbnVsbC48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+
PC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIER1cmF0aW9uIG9wZXJhdG9yICsoRHVy
YXRpb24gbGhzLCBEdXJhdGlvbiByaHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByb3RvUHJl
Y29uZGl0aW9ucy5DaGVja05vdE51bGwobGhzLCAibGhzIik7Ci0gICAgICAgICAgICBQcm90b1By
ZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHJocywgInJocyIpOwotICAgICAgICAgICAgY2hlY2tl
ZAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemUobGhzLlNl
Y29uZHMgKyByaHMuU2Vjb25kcywgbGhzLk5hbm9zICsgcmhzLk5hbm9zKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFN1YnRy
YWN0cyBvbmUgPHNlZSBjcmVmPSJEdXJhdGlvbiIvPiBmcm9tIGFub3RoZXIuCi0gICAgICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibGhzIj5UaGUgZHVyYXRpb24g
dG8gc3VidHJhY3QgZnJvbS4gTXVzdCBub3QgYmUgbnVsbC48L3BhcmFtPgotICAgICAgICAvLy8g
PHBhcmFtIG5hbWU9InJocyI+VGhlIGR1cmF0aW9uIHRvIHN1YnRyYWN0LiBNdXN0IG5vdCBiZSBu
dWxsLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZSB0d28gc3BlY2lmaWVkIGR1cmF0aW9ucy48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBz
dGF0aWMgRHVyYXRpb24gb3BlcmF0b3IgLShEdXJhdGlvbiBsaHMsIER1cmF0aW9uIHJocykKLSAg
ICAgICAgewotICAgICAgICAgICAgUHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbChsaHMs
ICJsaHMiKTsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwocmhz
LCAicmhzIik7Ci0gICAgICAgICAgICBjaGVja2VkCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIE5vcm1hbGl6ZShsaHMuU2Vjb25kcyAtIHJocy5TZWNvbmRzLCBsaHMuTmFu
b3MgLSByaHMuTmFub3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgZHVyYXRpb24gd2l0aCB0
aGUgbm9ybWFsaXplZCB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgYW5k
Ci0gICAgICAgIC8vLyBuYW5vc2Vjb25kcywgY29uZm9ybWluZyB3aXRoIHRoZSBkZXNjcmlwdGlv
biBpbiB0aGUgcHJvdG8gZmlsZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50
ZXJuYWwgc3RhdGljIER1cmF0aW9uIE5vcm1hbGl6ZShsb25nIHNlY29uZHMsIGludCBuYW5vc2Vj
b25kcykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgbmFub3NlY29uZHMg
aXMgaW4gdGhlIHJhbmdlICgtMSwwMDAsMDAwLDAwMCwgKzEsMDAwLDAwMCwwMDApCi0gICAgICAg
ICAgICBpbnQgZXh0cmFTZWNvbmRzID0gbmFub3NlY29uZHMgLyBOYW5vc2Vjb25kc1BlclNlY29u
ZDsKLSAgICAgICAgICAgIHNlY29uZHMgKz0gZXh0cmFTZWNvbmRzOwotICAgICAgICAgICAgbmFu
b3NlY29uZHMgLT0gZXh0cmFTZWNvbmRzICogTmFub3NlY29uZHNQZXJTZWNvbmQ7Ci0KLSAgICAg
ICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhhdCBTaWduKHNlY29uZHMpID09IFNpZ24obmFub3Nl
Y29uZHMpIGlmIFNpZ24oc2Vjb25kcykgIT0gMC4KLSAgICAgICAgICAgIGlmIChzZWNvbmRzIDwg
MCAmJiBuYW5vc2Vjb25kcyA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2Vj
b25kcyArPSAxOwotICAgICAgICAgICAgICAgIG5hbm9zZWNvbmRzIC09IE5hbm9zZWNvbmRzUGVy
U2Vjb25kOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kcyA+IDAg
JiYgbmFub3NlY29uZHMgPCAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNlY29u
ZHMgLT0gMTsKLSAgICAgICAgICAgICAgICBuYW5vc2Vjb25kcyArPSBOYW5vc2Vjb25kc1BlclNl
Y29uZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXcgRHVyYXRpb24geyBT
ZWNvbmRzID0gc2Vjb25kcywgTmFub3MgPSBuYW5vc2Vjb25kcyB9OwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29udmVydHMgYSBkdXJhdGlvbiBzcGVj
aWZpZWQgaW4gc2Vjb25kcy9uYW5vc2Vjb25kcyB0byBhIHN0cmluZy4KLSAgICAgICAgLy8vIDwv
c3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gSWYgdGhlIHZhbHVl
IGlzIGEgbm9ybWFsaXplZCBkdXJhdGlvbiBpbiB0aGUgcmFuZ2UgZGVzY3JpYmVkIGluIDxjPmR1
cmF0aW9uLnByb3RvPC9jPiwKLSAgICAgICAgLy8vIDxwYXJhbXJlZiBuYW1lPSJkaWFnbm9zdGlj
T25seSIvPiBpcyBpZ25vcmVkLiBPdGhlcndpc2UsIGlmIHRoZSBwYXJhbWV0ZXIgaXMgPGM+dHJ1
ZTwvYz4sCi0gICAgICAgIC8vLyBhIEpTT04gb2JqZWN0IHdpdGggYSB3YXJuaW5nIGlzIHJldHVy
bmVkOyBpZiBpdCBpcyA8Yz5mYWxzZTwvYz4sIGFuIDxzZWUgY3JlZj0iSW52YWxpZE9wZXJhdGlv
bkV4Y2VwdGlvbiIvPiBpcyB0aHJvd24uCi0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAg
IC8vLyA8cGFyYW0gbmFtZT0ic2Vjb25kcyI+U2Vjb25kcyBwb3J0aW9uIG9mIHRoZSBkdXJhdGlv
bi48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbm9zZWNvbmRzIj5OYW5vc2Vj
b25kcyBwb3J0aW9uIG9mIHRoZSBkdXJhdGlvbi48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFt
IG5hbWU9ImRpYWdub3N0aWNPbmx5Ij5EZXRlcm1pbmVzIHRoZSBoYW5kbGluZyBvZiBub24tbm9y
bWFsaXplZCB2YWx1ZXM8L3BhcmFtPgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJJbnZh
bGlkT3BlcmF0aW9uRXhjZXB0aW9uIj5UaGUgcmVwcmVzZW50ZWQgZHVyYXRpb24gaXMgaW52YWxp
ZCwgYW5kIDxwYXJhbXJlZiBuYW1lPSJkaWFnbm9zdGljT25seSIvPiBpcyA8Yz5mYWxzZTwvYz4u
PC9leGNlcHRpb24+Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyBzdHJpbmcgVG9Kc29uKGxvbmcg
c2Vjb25kcywgaW50IG5hbm9zZWNvbmRzLCBib29sIGRpYWdub3N0aWNPbmx5KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoSXNOb3JtYWxpemVkKHNlY29uZHMsIG5hbm9zZWNvbmRzKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWls
ZGVyKCk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5BcHBlbmQoJyInKTsKLSAgICAgICAgICAg
ICAgICAvLyBUaGUgc2Vjb25kcyBwYXJ0IHdpbGwgbm9ybWFsbHkgcHJvdmlkZSB0aGUgbWludXMg
c2lnbiBpZiB3ZSBuZWVkIGl0LCBidXQgbm90IGlmIGl0J3MgMC4uLgotICAgICAgICAgICAgICAg
IGlmIChzZWNvbmRzID09IDAgJiYgbmFub3NlY29uZHMgPCAwKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5BcHBlbmQoJy0nKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBidWlsZGVyLkFwcGVuZChzZWNvbmRzLlRvU3RyaW5nKCJk
IiwgQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSkpOwotICAgICAgICAgICAgICAgIEFwcGVu
ZE5hbm9zZWNvbmRzKGJ1aWxkZXIsIE1hdGguQWJzKG5hbm9zZWNvbmRzKSk7Ci0gICAgICAgICAg
ICAgICAgYnVpbGRlci5BcHBlbmQoInNcIiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBidWls
ZGVyLlRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGlhZ25vc3Rp
Y09ubHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZTogdGhlIGRvdWJs
ZSBicmFjZXMgaGVyZSBhcmUgZXNjYXBpbmcgZm9yIGJyYWNlcyBpbiBmb3JtYXQgc3RyaW5ncy4K
LSAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLkZvcm1hdChDdWx0dXJlSW5mby5JbnZhcmlh
bnRDdWx0dXJlLAotICAgICAgICAgICAgICAgICAgICAie3sgXCJAd2FybmluZ1wiOiBcIkludmFs
aWQgRHVyYXRpb25cIiwgXCJzZWNvbmRzXCI6IFwiezB9XCIsIFwibmFub3NcIjogezF9IH19IiwK
LSAgICAgICAgICAgICAgICAgICAgc2Vjb25kcywKLSAgICAgICAgICAgICAgICAgICAgbmFub3Nl
Y29uZHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJOb24t
bm9ybWFsaXplZCBkdXJhdGlvbiB2YWx1ZSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyBhIHN0cmluZyByZXBy
ZXNlbnRhdGlvbiBvZiB0aGlzIDxzZWUgY3JlZj0iRHVyYXRpb24iLz4gZm9yIGRpYWdub3N0aWMg
cHVycG9zZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4K
LSAgICAgICAgLy8vIE5vcm1hbGx5IHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIGEgSlNPTiBz
dHJpbmcgdmFsdWUgKGluY2x1ZGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBxdW90ZXMpIGJ1dAot
ICAgICAgICAvLy8gd2hlbiB0aGUgdmFsdWUgaXMgbm9uLW5vcm1hbGl6ZWQgb3Igb3V0IG9mIHJh
bmdlLCBhIEpTT04gb2JqZWN0IHJlcHJlc2VudGF0aW9uIHdpbGwgYmUgcmV0dXJuZWQKLSAgICAg
ICAgLy8vIGluc3RlYWQsIGluY2x1ZGluZyBhIHdhcm5pbmcuIFRoaXMgaXMgdG8gYXZvaWQgZXhj
ZXB0aW9ucyBiZWluZyB0aHJvd24gd2hlbiB0cnlpbmcgdG8KLSAgICAgICAgLy8vIGRpYWdub3Nl
IHByb2JsZW1zIC0gdGhlIHJlZ3VsYXIgSlNPTiBmb3JtYXR0ZXIgd2lsbCBzdGlsbCB0aHJvdyBh
biBleGNlcHRpb24gZm9yIG5vbi1ub3JtYWxpemVkCi0gICAgICAgIC8vLyB2YWx1ZXMuCi0gICAg
ICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiB0aGlzIHZhbHVlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0cmluZyBU
b0RpYWdub3N0aWNTdHJpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gVG9Kc29u
KFNlY29uZHMsIE5hbm9zLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAgICAgLy8vIEFwcGVuZHMgYSBudW1iZXIgb2YgbmFub3NlY29uZHMgdG8gYSBTdHJp
bmdCdWlsZGVyLiBFaXRoZXIgMCBkaWdpdHMgYXJlIGFkZGVkIChpbiB3aGljaAotICAgICAgICAv
Ly8gY2FzZSBubyAiLiIgaXMgYXBwZW5kZWQpLCBvciAzIDYgb3IgOSBkaWdpdHMuIFRoaXMgaXMg
aW50ZXJuYWwgZm9yIHVzZSBpbiBUaW1lc3RhbXAgYXMgd2VsbAotICAgICAgICAvLy8gYXMgRHVy
YXRpb24uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIGludGVybmFsIHN0YXRpYyB2
b2lkIEFwcGVuZE5hbm9zZWNvbmRzKFN0cmluZ0J1aWxkZXIgYnVpbGRlciwgaW50IG5hbm9zKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobmFub3MgIT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBidWlsZGVyLkFwcGVuZCgnLicpOwotICAgICAgICAgICAgICAgIC8vIE91
dHB1dCB0byAzLCA2IG9yIDkgZGlnaXRzLgotICAgICAgICAgICAgICAgIGlmIChuYW5vcyAlIDEw
MDAwMDAgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuQXBwZW5kKChuYW5vcyAvIDEwMDAwMDApLlRvU3RyaW5nKCJkMyIsIEN1bHR1cmVJbmZvLklu
dmFyaWFudEN1bHR1cmUpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAobmFub3MgJSAxMDAwID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBidWlsZGVyLkFwcGVuZCgobmFub3MgLyAxMDAwKS5Ub1N0cmluZygiZDYiLCBDdWx0
dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuQXBwZW5kKG5hbm9zLlRvU3RyaW5nKCJkOSIsIEN1bHR1cmVJbmZvLkludmFyaWFudEN1bHR1
cmUpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVz
L0VtcHR5LmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBlcy9FbXB0
eS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA4ZWEyNDAwYjlkNTEyMjBiNDZl
ZDM4MWVjMTcyMDVmMDYwNGFlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL0VtcHR5
LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUg
cHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2ds
ZS9wcm90b2J1Zi9lbXB0eS5wcm90bwotI3ByYWdtYSB3YXJuaW5nIGRpc2FibGUgMTU5MSwgMDYx
MiwgMzAyMQotI3JlZ2lvbiBEZXNpZ25lciBnZW5lcmF0ZWQgY29kZQotCi11c2luZyBwYiA9IGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmOwotdXNpbmcgcGJjID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuQ29sbGVjdGlvbnM7Ci11c2luZyBwYnIgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZs
ZWN0aW9uOwotdXNpbmcgc2NnID0gZ2xvYmFsOjpTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsK
LW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMgewotCi0gIC8vLyA8c3Vt
bWFyeT5Ib2xkZXIgZm9yIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGZyb20gZ29v
Z2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlh
Z25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc3RhdGlj
IHBhcnRpYWwgY2xhc3MgRW1wdHlSZWZsZWN0aW9uIHsKLQotICAgICNyZWdpb24gRGVzY3JpcHRv
cgotICAgIC8vLyA8c3VtbWFyeT5GaWxlIGRlc2NyaXB0b3IgZm9yIGdvb2dsZS9wcm90b2J1Zi9l
bXB0eS5wcm90bzwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6RmlsZURlc2NyaXB0
b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZGVzY3JpcHRvcjsgfQotICAgIH0K
LSAgICBwcml2YXRlIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0KLSAg
ICBzdGF0aWMgRW1wdHlSZWZsZWN0aW9uKCkgewotICAgICAgYnl0ZVtdIGRlc2NyaXB0b3JEYXRh
ID0gZ2xvYmFsOjpTeXN0ZW0uQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKAotICAgICAgICAgIHN0
cmluZy5Db25jYXQoCi0gICAgICAgICAgICAiQ2h0bmIyOW5iR1V2Y0hKdmRHOWlkV1l2Wlcxd2RI
a3VjSEp2ZEc4U0QyZHZiMmRzWlM1d2NtOTBiMkoxIiwKLSAgICAgICAgICAgICJaaUlIQ2dWRmJY
QjBlVUo1Q2hOamIyMHVaMjl2WjJ4bExuQnliM1J2WW5WbVFncEZiWEIwZVZCeWIzUnYiLAotICAg
ICAgICAgICAgIlVBRmFKMmRwZEdoMVlpNWpiMjB2WjI5c1lXNW5MM0J5YjNSdlluVm1MM0IwZVhC
bGN5OWxiWEIwZWFBQiIsCi0gICAgICAgICAgICAiQWZnQkFhSUNBMGRRUXFvQ0hrZHZiMmRzWlM1
UWNtOTBiMkoxWmk1WFpXeHNTMjV2ZDI1VWVYQmxjMklHIiwKLSAgICAgICAgICAgICJjSEp2ZEc4
eiIpKTsKLSAgICAgIGRlc2NyaXB0b3IgPSBwYnI6OkZpbGVEZXNjcmlwdG9yLkZyb21HZW5lcmF0
ZWRDb2RlKGRlc2NyaXB0b3JEYXRhLAotICAgICAgICAgIG5ldyBwYnI6OkZpbGVEZXNjcmlwdG9y
W10geyB9LAotICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKG51bGwsIG5l
dyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvW10gewotICAgICAgICAgICAgbmV3IHBicjo6R2Vu
ZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93
blR5cGVzLkVtcHR5KSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRW1w
dHkuUGFyc2VyLCBudWxsLCBudWxsLCBudWxsLCBudWxsKQotICAgICAgICAgIH0pKTsKLSAgICB9
Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLSAgI3JlZ2lvbiBNZXNzYWdlcwotICAvLy8gPHN1bW1h
cnk+Ci0gIC8vLyAgQSBnZW5lcmljIGVtcHR5IG1lc3NhZ2UgdGhhdCB5b3UgY2FuIHJlLXVzZSB0
byBhdm9pZCBkZWZpbmluZyBkdXBsaWNhdGVkCi0gIC8vLyAgZW1wdHkgbWVzc2FnZXMgaW4geW91
ciBBUElzLiBBIHR5cGljYWwgZXhhbXBsZSBpcyB0byB1c2UgaXQgYXMgdGhlIHJlcXVlc3QKLSAg
Ly8vICBvciB0aGUgcmVzcG9uc2UgdHlwZSBvZiBhbiBBUEkgbWV0aG9kLiBGb3IgaW5zdGFuY2U6
Ci0gIC8vLwotICAvLy8gICAgICBzZXJ2aWNlIEZvbyB7Ci0gIC8vLyAgICAgICAgcnBjIEJhcihn
b29nbGUucHJvdG9idWYuRW1wdHkpIHJldHVybnMgKGdvb2dsZS5wcm90b2J1Zi5FbXB0eSk7Ci0g
IC8vLyAgICAgIH0KLSAgLy8vCi0gIC8vLyAgVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBF
bXB0eWAgaXMgZW1wdHkgSlNPTiBvYmplY3QgYHt9YC4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2ds
b2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0K
LSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIEVtcHR5IDogcGI6OklNZXNzYWdlPEVtcHR5
PiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8RW1wdHk+
IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8RW1wdHk+KCgpID0+IG5ldyBFbXB0eSgp
KTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPEVtcHR5PiBQYXJzZXIgeyBn
ZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2Fn
ZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRW1wdHlSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVz
c2FnZVR5cGVzWzBdOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6
SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQot
ICAgIH0KLQotICAgIHB1YmxpYyBFbXB0eSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0g
ICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMg
RW1wdHkoRW1wdHkgb3RoZXIpIDogdGhpcygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRW1wdHkg
Q2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IEVtcHR5KHRoaXMpOwotICAgIH0KLQotICAgIHB1
YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBF
cXVhbHMob3RoZXIgYXMgRW1wdHkpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhF
bXB0eSBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFs
cyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2Rl
KCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0g
ICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6
SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVi
bGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgfQot
Ci0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwot
ICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKEVt
cHR5IG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElu
cHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0g
aW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gICNlbmRyZWdp
b24KLQotfQotCi0jZW5kcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL0ZpZWxkTWFzay5jcyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvRmllbGRNYXNrLmNzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjBhNjRkNmFlZTYyY2U2MjkwNDQxMTI2YmM4
OWM5NDdmMmQ4MWRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvRmllbGRNYXNrLmNz
CisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJv
dG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9w
cm90b2J1Zi9maWVsZF9tYXNrLnByb3RvCi0jcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSAxNTkxLCAw
NjEyLCAzMDIxCi0jcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCi0KLXVzaW5nIHBiID0g
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWY7Ci11c2luZyBwYmMgPSBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5Db2xsZWN0aW9uczsKLXVzaW5nIHBiciA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLlJl
ZmxlY3Rpb247Ci11c2luZyBzY2cgPSBnbG9iYWw6OlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmlj
OwotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcyB7Ci0KLSAgLy8vIDxz
dW1tYXJ5PkhvbGRlciBmb3IgcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgZnJvbSBn
b29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90bzwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lz
dGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGlj
IHN0YXRpYyBwYXJ0aWFsIGNsYXNzIEZpZWxkTWFza1JlZmxlY3Rpb24gewotCi0gICAgI3JlZ2lv
biBEZXNjcmlwdG9yCi0gICAgLy8vIDxzdW1tYXJ5PkZpbGUgZGVzY3JpcHRvciBmb3IgZ29vZ2xl
L3Byb3RvYnVmL2ZpZWxkX21hc2sucHJvdG88L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0YXRpYyBw
YnI6OkZpbGVEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGRlc2Ny
aXB0b3I7IH0KLSAgICB9Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcGJyOjpGaWxlRGVzY3JpcHRvciBk
ZXNjcmlwdG9yOwotCi0gICAgc3RhdGljIEZpZWxkTWFza1JlZmxlY3Rpb24oKSB7Ci0gICAgICBi
eXRlW10gZGVzY3JpcHRvckRhdGEgPSBnbG9iYWw6OlN5c3RlbS5Db252ZXJ0LkZyb21CYXNlNjRT
dHJpbmcoCi0gICAgICAgICAgc3RyaW5nLkNvbmNhdCgKLSAgICAgICAgICAgICJDaUJuYjI5bmJH
VXZjSEp2ZEc5aWRXWXZabWxsYkdSZmJXRnpheTV3Y205MGJ4SVBaMjl2WjJ4bExuQnkiLAotICAg
ICAgICAgICAgImIzUnZZblZtSWhvS0NVWnBaV3hrVFdGemF4SU5DZ1Z3WVhSb2N4Z0JJQU1vQ1VK
UkNoTmpiMjB1WjI5diIsCi0gICAgICAgICAgICAiWjJ4bExuQnliM1J2WW5WbVFnNUdhV1ZzWkUx
aGMydFFjbTkwYjFBQm9BRUJvZ0lEUjFCQ3FnSWVSMjl2IiwKLSAgICAgICAgICAgICJaMnhsTGxC
eWIzUnZZblZtTGxkbGJHeExibTkzYmxSNWNHVnpZZ1p3Y205MGJ6TT0iKSk7Ci0gICAgICBkZXNj
cmlwdG9yID0gcGJyOjpGaWxlRGVzY3JpcHRvci5Gcm9tR2VuZXJhdGVkQ29kZShkZXNjcmlwdG9y
RGF0YSwKLSAgICAgICAgICBuZXcgcGJyOjpGaWxlRGVzY3JpcHRvcltdIHsgfSwKLSAgICAgICAg
ICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyhudWxsLCBuZXcgcGJyOjpHZW5lcmF0ZWRD
bHJUeXBlSW5mb1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZv
KHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2sp
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZE1hc2suUGFyc2Vy
LCBuZXdbXXsgIlBhdGhzIiB9LCBudWxsLCBudWxsLCBudWxsKQotICAgICAgICAgIH0pKTsKLSAg
ICB9Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLSAgI3JlZ2lvbiBNZXNzYWdlcwotICAvLy8gPHN1
bW1hcnk+Ci0gIC8vLyAgYEZpZWxkTWFza2AgcmVwcmVzZW50cyBhIHNldCBvZiBzeW1ib2xpYyBm
aWVsZCBwYXRocywgZm9yIGV4YW1wbGU6Ci0gIC8vLwotICAvLy8gICAgICBwYXRoczogImYuYSIK
LSAgLy8vICAgICAgcGF0aHM6ICJmLmIuZCIKLSAgLy8vCi0gIC8vLyAgSGVyZSBgZmAgcmVwcmVz
ZW50cyBhIGZpZWxkIGluIHNvbWUgcm9vdCBtZXNzYWdlLCBgYWAgYW5kIGBiYAotICAvLy8gIGZp
ZWxkcyBpbiB0aGUgbWVzc2FnZSBmb3VuZCBpbiBgZmAsIGFuZCBgZGAgYSBmaWVsZCBmb3VuZCBp
biB0aGUKLSAgLy8vICBtZXNzYWdlIGluIGBmLmJgLgotICAvLy8KLSAgLy8vICBGaWVsZCBtYXNr
cyBhcmUgdXNlZCB0byBzcGVjaWZ5IGEgc3Vic2V0IG9mIGZpZWxkcyB0aGF0IHNob3VsZCBiZQot
ICAvLy8gIHJldHVybmVkIGJ5IGEgZ2V0IG9wZXJhdGlvbiBvciBtb2RpZmllZCBieSBhbiB1cGRh
dGUgb3BlcmF0aW9uLgotICAvLy8gIEZpZWxkIG1hc2tzIGFsc28gaGF2ZSBhIGN1c3RvbSBKU09O
IGVuY29kaW5nIChzZWUgYmVsb3cpLgotICAvLy8KLSAgLy8vICAjIEZpZWxkIE1hc2tzIGluIFBy
b2plY3Rpb25zCi0gIC8vLwotICAvLy8gIFdoZW4gdXNlZCBpbiB0aGUgY29udGV4dCBvZiBhIHBy
b2plY3Rpb24sIGEgcmVzcG9uc2UgbWVzc2FnZSBvcgotICAvLy8gIHN1Yi1tZXNzYWdlIGlzIGZp
bHRlcmVkIGJ5IHRoZSBBUEkgdG8gb25seSBjb250YWluIHRob3NlIGZpZWxkcyBhcwotICAvLy8g
IHNwZWNpZmllZCBpbiB0aGUgbWFzay4gRm9yIGV4YW1wbGUsIGlmIHRoZSBtYXNrIGluIHRoZSBw
cmV2aW91cwotICAvLy8gIGV4YW1wbGUgaXMgYXBwbGllZCB0byBhIHJlc3BvbnNlIG1lc3NhZ2Ug
YXMgZm9sbG93czoKLSAgLy8vCi0gIC8vLyAgICAgIGYgewotICAvLy8gICAgICAgIGEgOiAyMgot
ICAvLy8gICAgICAgIGIgewotICAvLy8gICAgICAgICAgZCA6IDEKLSAgLy8vICAgICAgICAgIHgg
OiAyCi0gIC8vLyAgICAgICAgfQotICAvLy8gICAgICAgIHkgOiAxMwotICAvLy8gICAgICB9Ci0g
IC8vLyAgICAgIHo6IDgKLSAgLy8vCi0gIC8vLyAgVGhlIHJlc3VsdCB3aWxsIG5vdCBjb250YWlu
IHNwZWNpZmljIHZhbHVlcyBmb3IgZmllbGRzIHgseSBhbmQgegotICAvLy8gICh0aGVpciB2YWx1
ZSB3aWxsIGJlIHNldCB0byB0aGUgZGVmYXVsdCwgYW5kIG9taXR0ZWQgaW4gcHJvdG8gdGV4dAot
ICAvLy8gIG91dHB1dCk6Ci0gIC8vLwotICAvLy8gICAgICBmIHsKLSAgLy8vICAgICAgICBhIDog
MjIKLSAgLy8vICAgICAgICBiIHsKLSAgLy8vICAgICAgICAgIGQgOiAxCi0gIC8vLyAgICAgICAg
fQotICAvLy8gICAgICB9Ci0gIC8vLwotICAvLy8gIEEgcmVwZWF0ZWQgZmllbGQgaXMgbm90IGFs
bG93ZWQgZXhjZXB0IGF0IHRoZSBsYXN0IHBvc2l0aW9uIG9mIGEKLSAgLy8vICBmaWVsZCBtYXNr
LgotICAvLy8KLSAgLy8vICBJZiBhIEZpZWxkTWFzayBvYmplY3QgaXMgbm90IHByZXNlbnQgaW4g
YSBnZXQgb3BlcmF0aW9uLCB0aGUKLSAgLy8vICBvcGVyYXRpb24gYXBwbGllcyB0byBhbGwgZmll
bGRzIChhcyBpZiBhIEZpZWxkTWFzayBvZiBhbGwgZmllbGRzCi0gIC8vLyAgaGFkIGJlZW4gc3Bl
Y2lmaWVkKS4KLSAgLy8vCi0gIC8vLyAgTm90ZSB0aGF0IGEgZmllbGQgbWFzayBkb2VzIG5vdCBu
ZWNlc3NhcmlseSBhcHBseSB0byB0aGUKLSAgLy8vICB0b3AtbGV2ZWwgcmVzcG9uc2UgbWVzc2Fn
ZS4gSW4gY2FzZSBvZiBhIFJFU1QgZ2V0IG9wZXJhdGlvbiwgdGhlCi0gIC8vLyAgZmllbGQgbWFz
ayBhcHBsaWVzIGRpcmVjdGx5IHRvIHRoZSByZXNwb25zZSwgYnV0IGluIGNhc2Ugb2YgYSBSRVNU
Ci0gIC8vLyAgbGlzdCBvcGVyYXRpb24sIHRoZSBtYXNrIGluc3RlYWQgYXBwbGllcyB0byBlYWNo
IGluZGl2aWR1YWwgbWVzc2FnZQotICAvLy8gIGluIHRoZSByZXR1cm5lZCByZXNvdXJjZSBsaXN0
LiBJbiBjYXNlIG9mIGEgUkVTVCBjdXN0b20gbWV0aG9kLAotICAvLy8gIG90aGVyIGRlZmluaXRp
b25zIG1heSBiZSB1c2VkLiBXaGVyZSB0aGUgbWFzayBhcHBsaWVzIHdpbGwgYmUKLSAgLy8vICBj
bGVhcmx5IGRvY3VtZW50ZWQgdG9nZXRoZXIgd2l0aCBpdHMgZGVjbGFyYXRpb24gaW4gdGhlIEFQ
SS4gIEluCi0gIC8vLyAgYW55IGNhc2UsIHRoZSBlZmZlY3Qgb24gdGhlIHJldHVybmVkIHJlc291
cmNlL3Jlc291cmNlcyBpcyByZXF1aXJlZAotICAvLy8gIGJlaGF2aW9yIGZvciBBUElzLgotICAv
Ly8KLSAgLy8vICAjIEZpZWxkIE1hc2tzIGluIFVwZGF0ZSBPcGVyYXRpb25zCi0gIC8vLwotICAv
Ly8gIEEgZmllbGQgbWFzayBpbiB1cGRhdGUgb3BlcmF0aW9ucyBzcGVjaWZpZXMgd2hpY2ggZmll
bGRzIG9mIHRoZQotICAvLy8gIHRhcmdldGVkIHJlc291cmNlIGFyZSBnb2luZyB0byBiZSB1cGRh
dGVkLiBUaGUgQVBJIGlzIHJlcXVpcmVkCi0gIC8vLyAgdG8gb25seSBjaGFuZ2UgdGhlIHZhbHVl
cyBvZiB0aGUgZmllbGRzIGFzIHNwZWNpZmllZCBpbiB0aGUgbWFzawotICAvLy8gIGFuZCBsZWF2
ZSB0aGUgb3RoZXJzIHVudG91Y2hlZC4gSWYgYSByZXNvdXJjZSBpcyBwYXNzZWQgaW4gdG8KLSAg
Ly8vICBkZXNjcmliZSB0aGUgdXBkYXRlZCB2YWx1ZXMsIHRoZSBBUEkgaWdub3JlcyB0aGUgdmFs
dWVzIG9mIGFsbAotICAvLy8gIGZpZWxkcyBub3QgY292ZXJlZCBieSB0aGUgbWFzay4KLSAgLy8v
Ci0gIC8vLyAgSW4gb3JkZXIgdG8gcmVzZXQgYSBmaWVsZCdzIHZhbHVlIHRvIHRoZSBkZWZhdWx0
LCB0aGUgZmllbGQgbXVzdAotICAvLy8gIGJlIGluIHRoZSBtYXNrIGFuZCBzZXQgdG8gdGhlIGRl
ZmF1bHQgdmFsdWUgaW4gdGhlIHByb3ZpZGVkIHJlc291cmNlLgotICAvLy8gIEhlbmNlLCBpbiBv
cmRlciB0byByZXNldCBhbGwgZmllbGRzIG9mIGEgcmVzb3VyY2UsIHByb3ZpZGUgYSBkZWZhdWx0
Ci0gIC8vLyAgaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGFuZCBzZXQgYWxsIGZpZWxkcyBpbiB0
aGUgbWFzaywgb3IgZG8KLSAgLy8vICBub3QgcHJvdmlkZSBhIG1hc2sgYXMgZGVzY3JpYmVkIGJl
bG93LgotICAvLy8KLSAgLy8vICBJZiBhIGZpZWxkIG1hc2sgaXMgbm90IHByZXNlbnQgb24gdXBk
YXRlLCB0aGUgb3BlcmF0aW9uIGFwcGxpZXMgdG8KLSAgLy8vICBhbGwgZmllbGRzIChhcyBpZiBh
IGZpZWxkIG1hc2sgb2YgYWxsIGZpZWxkcyBoYXMgYmVlbiBzcGVjaWZpZWQpLgotICAvLy8gIE5v
dGUgdGhhdCBpbiB0aGUgcHJlc2VuY2Ugb2Ygc2NoZW1hIGV2b2x1dGlvbiwgdGhpcyBtYXkgbWVh
biB0aGF0Ci0gIC8vLyAgZmllbGRzIHRoZSBjbGllbnQgZG9lcyBub3Qga25vdyBhbmQgaGFzIHRo
ZXJlZm9yZSBub3QgZmlsbGVkIGludG8KLSAgLy8vICB0aGUgcmVxdWVzdCB3aWxsIGJlIHJlc2V0
IHRvIHRoZWlyIGRlZmF1bHQuIElmIHRoaXMgaXMgdW53YW50ZWQKLSAgLy8vICBiZWhhdmlvciwg
YSBzcGVjaWZpYyBzZXJ2aWNlIG1heSByZXF1aXJlIGEgY2xpZW50IHRvIGFsd2F5cyBzcGVjaWZ5
Ci0gIC8vLyAgYSBmaWVsZCBtYXNrLCBwcm9kdWNpbmcgYW4gZXJyb3IgaWYgbm90LgotICAvLy8K
LSAgLy8vICBBcyB3aXRoIGdldCBvcGVyYXRpb25zLCB0aGUgbG9jYXRpb24gb2YgdGhlIHJlc291
cmNlIHdoaWNoCi0gIC8vLyAgZGVzY3JpYmVzIHRoZSB1cGRhdGVkIHZhbHVlcyBpbiB0aGUgcmVx
dWVzdCBtZXNzYWdlIGRlcGVuZHMgb24gdGhlCi0gIC8vLyAgb3BlcmF0aW9uIGtpbmQuIEluIGFu
eSBjYXNlLCB0aGUgZWZmZWN0IG9mIHRoZSBmaWVsZCBtYXNrIGlzCi0gIC8vLyAgcmVxdWlyZWQg
dG8gYmUgaG9ub3JlZCBieSB0aGUgQVBJLgotICAvLy8KLSAgLy8vICAjIyBDb25zaWRlcmF0aW9u
cyBmb3IgSFRUUCBSRVNUCi0gIC8vLwotICAvLy8gIFRoZSBIVFRQIGtpbmQgb2YgYW4gdXBkYXRl
IG9wZXJhdGlvbiB3aGljaCB1c2VzIGEgZmllbGQgbWFzayBtdXN0Ci0gIC8vLyAgYmUgc2V0IHRv
IFBBVENIIGluc3RlYWQgb2YgUFVUIGluIG9yZGVyIHRvIHNhdGlzZnkgSFRUUCBzZW1hbnRpY3MK
LSAgLy8vICAoUFVUIG11c3Qgb25seSBiZSB1c2VkIGZvciBmdWxsIHVwZGF0ZXMpLgotICAvLy8K
LSAgLy8vICAjIEpTT04gRW5jb2Rpbmcgb2YgRmllbGQgTWFza3MKLSAgLy8vCi0gIC8vLyAgSW4g
SlNPTiwgYSBmaWVsZCBtYXNrIGlzIGVuY29kZWQgYXMgYSBzaW5nbGUgc3RyaW5nIHdoZXJlIHBh
dGhzIGFyZQotICAvLy8gIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBGaWVsZHMgbmFtZSBpbiBlYWNo
IHBhdGggYXJlIGNvbnZlcnRlZAotICAvLy8gIHRvL2Zyb20gbG93ZXItY2FtZWwgbmFtaW5nIGNv
bnZlbnRpb25zLgotICAvLy8KLSAgLy8vICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9s
bG93aW5nIG1lc3NhZ2UgZGVjbGFyYXRpb25zOgotICAvLy8KLSAgLy8vICAgICAgbWVzc2FnZSBQ
cm9maWxlIHsKLSAgLy8vICAgICAgICBVc2VyIHVzZXIgPSAxOwotICAvLy8gICAgICAgIFBob3Rv
IHBob3RvID0gMjsKLSAgLy8vICAgICAgfQotICAvLy8gICAgICBtZXNzYWdlIFVzZXIgewotICAv
Ly8gICAgICAgIHN0cmluZyBkaXNwbGF5X25hbWUgPSAxOwotICAvLy8gICAgICAgIHN0cmluZyBh
ZGRyZXNzID0gMjsKLSAgLy8vICAgICAgfQotICAvLy8KLSAgLy8vICBJbiBwcm90byBhIGZpZWxk
IG1hc2sgZm9yIGBQcm9maWxlYCBtYXkgbG9vayBhcyBzdWNoOgotICAvLy8KLSAgLy8vICAgICAg
bWFzayB7Ci0gIC8vLyAgICAgICAgcGF0aHM6ICJ1c2VyLmRpc3BsYXlfbmFtZSIKLSAgLy8vICAg
ICAgICBwYXRoczogInBob3RvIgotICAvLy8gICAgICB9Ci0gIC8vLwotICAvLy8gIEluIEpTT04s
IHRoZSBzYW1lIG1hc2sgaXMgcmVwcmVzZW50ZWQgYXMgYmVsb3c6Ci0gIC8vLwotICAvLy8gICAg
ICB7Ci0gIC8vLyAgICAgICAgbWFzazogInVzZXIuZGlzcGxheU5hbWUscGhvdG8iCi0gIC8vLyAg
ICAgIH0KLSAgLy8vCi0gIC8vLyAgIyBGaWVsZCBNYXNrcyBhbmQgT25lb2YgRmllbGRzCi0gIC8v
LwotICAvLy8gIEZpZWxkIG1hc2tzIHRyZWF0IGZpZWxkcyBpbiBvbmVvZnMganVzdCBhcyByZWd1
bGFyIGZpZWxkcy4gQ29uc2lkZXIgdGhlCi0gIC8vLyAgZm9sbG93aW5nIG1lc3NhZ2U6Ci0gIC8v
LwotICAvLy8gICAgICBtZXNzYWdlIFNhbXBsZU1lc3NhZ2UgewotICAvLy8gICAgICAgIG9uZW9m
IHRlc3Rfb25lb2YgewotICAvLy8gICAgICAgICAgc3RyaW5nIG5hbWUgPSA0OwotICAvLy8gICAg
ICAgICAgU3ViTWVzc2FnZSBzdWJfbWVzc2FnZSA9IDk7Ci0gIC8vLyAgICAgICAgfQotICAvLy8g
ICAgICB9Ci0gIC8vLwotICAvLy8gIFRoZSBmaWVsZCBtYXNrIGNhbiBiZToKLSAgLy8vCi0gIC8v
LyAgICAgIG1hc2sgewotICAvLy8gICAgICAgIHBhdGhzOiAibmFtZSIKLSAgLy8vICAgICAgfQot
ICAvLy8KLSAgLy8vICBPcjoKLSAgLy8vCi0gIC8vLyAgICAgIG1hc2sgewotICAvLy8gICAgICAg
IHBhdGhzOiAic3ViX21lc3NhZ2UiCi0gIC8vLyAgICAgIH0KLSAgLy8vCi0gIC8vLyAgTm90ZSB0
aGF0IG9uZW9mIHR5cGUgbmFtZXMgKCJ0ZXN0X29uZW9mIiBpbiB0aGlzIGNhc2UpIGNhbm5vdCBi
ZSB1c2VkIGluCi0gIC8vLyAgcGF0aHMuCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5
c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1Ymxp
YyBzZWFsZWQgcGFydGlhbCBjbGFzcyBGaWVsZE1hc2sgOiBwYjo6SU1lc3NhZ2U8RmllbGRNYXNr
PiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8RmllbGRN
YXNrPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPEZpZWxkTWFzaz4oKCkgPT4gbmV3
IEZpZWxkTWFzaygpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPEZpZWxk
TWFzaz4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0
YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0
dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkZpZWxkTWFza1JlZmxl
Y3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMF07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1l
c3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJl
dHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIEZpZWxkTWFzaygpIHsKLSAg
ICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3Ry
dWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgRmllbGRNYXNrKEZpZWxkTWFzayBvdGhlcikgOiB0aGlz
KCkgewotICAgICAgcGF0aHNfID0gb3RoZXIucGF0aHNfLkNsb25lKCk7Ci0gICAgfQotCi0gICAg
cHVibGljIEZpZWxkTWFzayBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgRmllbGRNYXNrKHRo
aXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAicGF0
aHMiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFBhdGhzRmllbGROdW1i
ZXIgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPHN0cmlu
Zz4gX3JlcGVhdGVkX3BhdGhzX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yU3Ry
aW5nKDEwKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxzdHJpbmc+
IHBhdGhzXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8c3RyaW5nPigpOwotICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAvLy8gIFRoZSBzZXQgb2YgZmllbGQgbWFzayBwYXRocy4KLSAgICAvLy8gPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8c3RyaW5nPiBQYXRocyB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gcGF0aHNfOyB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRl
IGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBh
cyBGaWVsZE1hc2spOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhGaWVsZE1hc2sg
b3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3Ro
ZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYoIXBh
dGhzXy5FcXVhbHMob3RoZXIucGF0aHNfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAg
ICAgIGludCBoYXNoID0gMTsKLSAgICAgIGhhc2ggXj0gcGF0aHNfLkdldEhhc2hDb2RlKCk7Ci0g
ICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRv
U3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0
cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91
dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIHBhdGhzXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVh
dGVkX3BhdGhzX2NvZGVjKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUo
KSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBzaXplICs9IHBhdGhzXy5DYWxjdWxhdGVT
aXplKF9yZXBlYXRlZF9wYXRoc19jb2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oRmllbGRNYXNrIG90aGVyKSB7Ci0gICAgICBpZiAo
b3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBwYXRoc18u
QWRkKG90aGVyLnBhdGhzXyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBi
OjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxl
ICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgcGF0
aHNfLkFkZEVudHJpZXNGcm9tKGlucHV0LCBfcmVwZWF0ZWRfcGF0aHNfY29kZWMpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0g
IH0KLQotICAjZW5kcmVnaW9uCi0KLX0KLQotI2VuZHJlZ2lvbiBEZXNpZ25lciBnZW5lcmF0ZWQg
Y29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBl
cy9GaWVsZE1hc2tQYXJ0aWFsLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25v
d25UeXBlcy9GaWVsZE1hc2tQYXJ0aWFsLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0YmQ2MmNmM2Q0MzZiZmE5MWRiZWViMjQ4NWIxNWY2Y2JmZDFhMzk5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9i
dWYvV2VsbEtub3duVHlwZXMvRmllbGRNYXNrUGFydGlhbC5jcworKysgL2Rldi9udWxsCkBAIC0x
LDEyMyArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMTYgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0
ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMu
R2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgU3lz
dGVtLlRleHQ7Ci0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMKLXsK
LSAgICAvLyBNYW51YWxseS13cml0dGVuIHBhcnRpYWwgY2xhc3MgZm9yIHRoZSBGaWVsZE1hc2sg
d2VsbC1rbm93biB0eXBlLgotICAgIHB1YmxpYyBwYXJ0aWFsIGNsYXNzIEZpZWxkTWFzayA6IElD
dXN0b21EaWFnbm9zdGljTWVzc2FnZQotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAg
ICAgICAvLy8gQ29udmVydHMgYSB0aW1lc3RhbXAgIHNwZWNpZmllZCBpbiBzZWNvbmRzL25hbm9z
ZWNvbmRzIHRvIGEgc3RyaW5nLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8g
PHJlbWFya3M+Ci0gICAgICAgIC8vLyBJZiB0aGUgdmFsdWUgaXMgYSBub3JtYWxpemVkIGR1cmF0
aW9uIGluIHRoZSByYW5nZSBkZXNjcmliZWQgaW4gPGM+ZmllbGRfbWFzay5wcm90bzwvYz4sCi0g
ICAgICAgIC8vLyA8cGFyYW1yZWYgbmFtZT0iZGlhZ25vc3RpY09ubHkiLz4gaXMgaWdub3JlZC4g
T3RoZXJ3aXNlLCBpZiB0aGUgcGFyYW1ldGVyIGlzIDxjPnRydWU8L2M+LAotICAgICAgICAvLy8g
YSBKU09OIG9iamVjdCB3aXRoIGEgd2FybmluZyBpcyByZXR1cm5lZDsgaWYgaXQgaXMgPGM+ZmFs
c2U8L2M+LCBhbiA8c2VlIGNyZWY9IkludmFsaWRPcGVyYXRpb25FeGNlcHRpb24iLz4gaXMgdGhy
b3duLgotICAgICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBh
dGhzIj5QYXRocyBpbiB0aGUgZmllbGQgbWFzazwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0g
bmFtZT0iZGlhZ25vc3RpY09ubHkiPkRldGVybWluZXMgdGhlIGhhbmRsaW5nIG9mIG5vbi1ub3Jt
YWxpemVkIHZhbHVlczwvcGFyYW0+Ci0gICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkludmFs
aWRPcGVyYXRpb25FeGNlcHRpb24iPlRoZSByZXByZXNlbnRlZCBkdXJhdGlvbiBpcyBpbnZhbGlk
LCBhbmQgPHBhcmFtcmVmIG5hbWU9ImRpYWdub3N0aWNPbmx5Ii8+IGlzIDxjPmZhbHNlPC9jPi48
L2V4Y2VwdGlvbj4KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIHN0cmluZyBUb0pzb24oSUxpc3Q8
c3RyaW5nPiBwYXRocywgYm9vbCBkaWFnbm9zdGljT25seSkKLSAgICAgICAgewotICAgICAgICAg
ICAgdmFyIGZpcnN0SW52YWxpZCA9IHBhdGhzLkZpcnN0T3JEZWZhdWx0KHAgPT4gIVZhbGlkYXRl
UGF0aChwKSk7Ci0gICAgICAgICAgICBpZiAoZmlyc3RJbnZhbGlkID09IG51bGwpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IG5ldyBTdHJpbmdXcml0ZXIoKTsK
LSAgICAgICAgICAgICAgICBKc29uRm9ybWF0dGVyLldyaXRlU3RyaW5nKHdyaXRlciwgc3RyaW5n
LkpvaW4oIiwiLCBwYXRocy5TZWxlY3QoSnNvbkZvcm1hdHRlci5Ub0NhbWVsQ2FzZSkpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyLlRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGRpYWdu
b3N0aWNPbmx5KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHdy
aXRlciA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLldy
aXRlKCJ7IFwiQHdhcm5pbmdcIjogXCJJbnZhbGlkIEZpZWxkTWFza1wiLCBcInBhdGhzXCI6ICIp
OwotICAgICAgICAgICAgICAgICAgICBKc29uRm9ybWF0dGVyLkRlZmF1bHQuV3JpdGVMaXN0KHdy
aXRlciwgKElMaXN0KXBhdGhzKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlKCIg
fSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyLlRvU3RyaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCQi
SW52YWxpZCBmaWVsZCBtYXNrIHRvIGJlIGNvbnZlcnRlZCB0byBKU09OOiB7Zmlyc3RJbnZhbGlk
fSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENhbWVsLWNhc2UgY29udmVydGVyIHdpdGgg
YWRkZWQgc3RyaWN0bmVzcyBmb3IgZmllbGQgbWFzayBmb3JtYXR0aW5nLgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJJbnZhbGlkT3BlcmF0aW9u
RXhjZXB0aW9uIj5UaGUgZmllbGQgbWFzayBpcyBpbnZhbGlkIGZvciBKU09OIHJlcHJlc2VudGF0
aW9uPC9leGNlcHRpb24+Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2wgVmFsaWRhdGVQYXRo
KHN0cmluZyBpbnB1dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBpbnB1dC5MZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaGFy
IGMgPSBpbnB1dFtpXTsKLSAgICAgICAgICAgICAgICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjID09ICdfJyAmJiBpIDwgaW5w
dXQuTGVuZ3RoIC0gMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNo
YXIgbmV4dCA9IGlucHV0W2kgKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPCAn
YScgfHwgbmV4dCA+ICd6JykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIGEgc3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgPHNlZSBjcmVmPSJGaWVsZE1hc2siLz4gZm9yIGRpYWdu
b3N0aWMgcHVycG9zZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVt
YXJrcz4KLSAgICAgICAgLy8vIE5vcm1hbGx5IHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIGEg
SlNPTiBzdHJpbmcgdmFsdWUgKGluY2x1ZGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBxdW90ZXMp
IGJ1dAotICAgICAgICAvLy8gd2hlbiB0aGUgdmFsdWUgaXMgbm9uLW5vcm1hbGl6ZWQgb3Igb3V0
IG9mIHJhbmdlLCBhIEpTT04gb2JqZWN0IHJlcHJlc2VudGF0aW9uIHdpbGwgYmUgcmV0dXJuZWQK
LSAgICAgICAgLy8vIGluc3RlYWQsIGluY2x1ZGluZyBhIHdhcm5pbmcuIFRoaXMgaXMgdG8gYXZv
aWQgZXhjZXB0aW9ucyBiZWluZyB0aHJvd24gd2hlbiB0cnlpbmcgdG8KLSAgICAgICAgLy8vIGRp
YWdub3NlIHByb2JsZW1zIC0gdGhlIHJlZ3VsYXIgSlNPTiBmb3JtYXR0ZXIgd2lsbCBzdGlsbCB0
aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vbi1ub3JtYWxpemVkCi0gICAgICAgIC8vLyB2YWx1ZXMu
Ci0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBvZiB0aGlzIHZhbHVlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0
cmluZyBUb0RpYWdub3N0aWNTdHJpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
VG9Kc29uKFBhdGhzLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3No
YXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvU291cmNlQ29udGV4dC5jcyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
Y3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvU291cmNlQ29udGV4dC5j
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIzNWVjZWZhNmY0YzJhYTc1ODg0OThh
YWE2MjhiMzI3YmYzMDBjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL1NvdXJjZUNv
bnRleHQuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5
IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTog
Z29vZ2xlL3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnByb3RvCi0jcHJhZ21hIHdhcm5pbmcgZGlz
YWJsZSAxNTkxLCAwNjEyLCAzMDIxCi0jcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCi0K
LXVzaW5nIHBiID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWY7Ci11c2luZyBwYmMgPSBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5Db2xsZWN0aW9uczsKLXVzaW5nIHBiciA9IGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLlJlZmxlY3Rpb247Ci11c2luZyBzY2cgPSBnbG9iYWw6OlN5c3RlbS5Db2xsZWN0
aW9ucy5HZW5lcmljOwotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcyB7
Ci0KLSAgLy8vIDxzdW1tYXJ5PkhvbGRlciBmb3IgcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiBnZW5l
cmF0ZWQgZnJvbSBnb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucHJvdG88L3N1bW1hcnk+
Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmli
dXRlKCldCi0gIHB1YmxpYyBzdGF0aWMgcGFydGlhbCBjbGFzcyBTb3VyY2VDb250ZXh0UmVmbGVj
dGlvbiB7Ci0KLSAgICAjcmVnaW9uIERlc2NyaXB0b3IKLSAgICAvLy8gPHN1bW1hcnk+RmlsZSBk
ZXNjcmlwdG9yIGZvciBnb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucHJvdG88L3N1bW1h
cnk+Ci0gICAgcHVibGljIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9yIERlc2NyaXB0b3Igewot
ICAgICAgZ2V0IHsgcmV0dXJuIGRlc2NyaXB0b3I7IH0KLSAgICB9Ci0gICAgcHJpdmF0ZSBzdGF0
aWMgcGJyOjpGaWxlRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAgc3RhdGljIFNvdXJjZUNv
bnRleHRSZWZsZWN0aW9uKCkgewotICAgICAgYnl0ZVtdIGRlc2NyaXB0b3JEYXRhID0gZ2xvYmFs
OjpTeXN0ZW0uQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKAotICAgICAgICAgIHN0cmluZy5Db25j
YXQoCi0gICAgICAgICAgICAiQ2lSbmIyOW5iR1V2Y0hKdmRHOWlkV1l2YzI5MWNtTmxYMk52Ym5S
bGVIUXVjSEp2ZEc4U0QyZHZiMmRzIiwKLSAgICAgICAgICAgICJaUzV3Y205MGIySjFaaUlpQ2cx
VGIzVnlZMlZEYjI1MFpYaDBFaEVLQ1dacGJHVmZibUZ0WlJnQklBRW8iLAotICAgICAgICAgICAg
IkNVSlZDaE5qYjIwdVoyOXZaMnhsTG5CeWIzUnZZblZtUWhKVGIzVnlZMlZEYjI1MFpYaDBVSEp2
ZEc5USIsCi0gICAgICAgICAgICAiQWFBQkFhSUNBMGRRUXFvQ0hrZHZiMmRzWlM1UWNtOTBiMkox
Wmk1WFpXeHNTMjV2ZDI1VWVYQmxjMklHIiwKLSAgICAgICAgICAgICJjSEp2ZEc4eiIpKTsKLSAg
ICAgIGRlc2NyaXB0b3IgPSBwYnI6OkZpbGVEZXNjcmlwdG9yLkZyb21HZW5lcmF0ZWRDb2RlKGRl
c2NyaXB0b3JEYXRhLAotICAgICAgICAgIG5ldyBwYnI6OkZpbGVEZXNjcmlwdG9yW10geyB9LAot
ICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKG51bGwsIG5ldyBwYnI6Okdl
bmVyYXRlZENsclR5cGVJbmZvW10gewotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xy
VHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlNv
dXJjZUNvbnRleHQpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5Tb3Vy
Y2VDb250ZXh0LlBhcnNlciwgbmV3W117ICJGaWxlTmFtZSIgfSwgbnVsbCwgbnVsbCwgbnVsbCkK
LSAgICAgICAgICB9KSk7Ci0gICAgfQotICAgICNlbmRyZWdpb24KLQotICB9Ci0gICNyZWdpb24g
TWVzc2FnZXMKLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIGBTb3VyY2VDb250ZXh0YCByZXByZXNl
bnRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb3VyY2Ugb2YgYQotICAvLy8gIHByb3RvYnVmIGVs
ZW1lbnQsIGxpa2UgdGhlIGZpbGUgaW4gd2hpY2ggaXQgaXMgZGVmaW5lZC4KLSAgLy8vIDwvc3Vt
bWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVB
dHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFNvdXJjZUNvbnRleHQg
OiBwYjo6SU1lc3NhZ2U8U291cmNlQ29udGV4dD4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRv
bmx5IHBiOjpNZXNzYWdlUGFyc2VyPFNvdXJjZUNvbnRleHQ+IF9wYXJzZXIgPSBuZXcgcGI6Ok1l
c3NhZ2VQYXJzZXI8U291cmNlQ29udGV4dD4oKCkgPT4gbmV3IFNvdXJjZUNvbnRleHQoKSk7Ci0g
ICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxTb3VyY2VDb250ZXh0PiBQYXJzZXIg
eyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVz
c2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU291cmNlQ29udGV4dFJlZmxlY3Rpb24uRGVz
Y3JpcHRvci5NZXNzYWdlVHlwZXNbMF07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNj
cmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNj
cmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFNvdXJjZUNvbnRleHQoKSB7Ci0gICAgICBP
bkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlv
bigpOwotCi0gICAgcHVibGljIFNvdXJjZUNvbnRleHQoU291cmNlQ29udGV4dCBvdGhlcikgOiB0
aGlzKCkgewotICAgICAgZmlsZU5hbWVfID0gb3RoZXIuZmlsZU5hbWVfOwotICAgIH0KLQotICAg
IHB1YmxpYyBTb3VyY2VDb250ZXh0IENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBTb3VyY2VD
b250ZXh0KHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9y
IHRoZSAiZmlsZV9uYW1lIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBG
aWxlTmFtZUZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIHN0cmluZyBmaWxlTmFtZV8gPSAi
IjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBUaGUgcGF0aC1xdWFsaWZpZWQgbmFtZSBv
ZiB0aGUgLnByb3RvIGZpbGUgdGhhdCBjb250YWluZWQgdGhlIGFzc29jaWF0ZWQKLSAgICAvLy8g
IHByb3RvYnVmIGVsZW1lbnQuICBGb3IgZXhhbXBsZTogYCJnb29nbGUvcHJvdG9idWYvc291cmNl
LnByb3RvImAuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RyaW5nIEZpbGVOYW1l
IHsKLSAgICAgIGdldCB7IHJldHVybiBmaWxlTmFtZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IGZpbGVOYW1lXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAi
dmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVh
bHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIFNvdXJjZUNv
bnRleHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhTb3VyY2VDb250ZXh0IG90
aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVy
LCB0aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChGaWxl
TmFtZSAhPSBvdGhlci5GaWxlTmFtZSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAg
IGludCBoYXNoID0gMTsKLSAgICAgIGlmIChGaWxlTmFtZS5MZW5ndGggIT0gMCkgaGFzaCBePSBG
aWxlTmFtZS5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAg
cHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNv
bkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGlj
IHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAo
RmlsZU5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDEwKTsK
LSAgICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKEZpbGVOYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0g
ICAgICBpZiAoRmlsZU5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6
OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKEZpbGVOYW1lKTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShT
b3VyY2VDb250ZXh0IG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuRmlsZU5hbWUuTGVuZ3RoICE9IDAp
IHsKLSAgICAgICAgRmlsZU5hbWUgPSBvdGhlci5GaWxlTmFtZTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsK
LSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9
IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIDEwOiB7Ci0gICAgICAgICAgICBGaWxlTmFtZSA9IGlucHV0LlJlYWRTdHJpbmcoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLQotICB9Ci0KLSAgI2VuZHJlZ2lvbgotCi19Ci0KLSNlbmRyZWdpb24gRGVzaWduZXIgZ2Vu
ZXJhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtu
b3duVHlwZXMvU3RydWN0LmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25U
eXBlcy9TdHJ1Y3QuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYzg5NDBkYjNm
YjkyNzk4MTMxYzczZDVjZDEzYjNlMjRjOWYwNzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25U
eXBlcy9TdHJ1Y3QuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw2MDAgKzAsMCBAQAotLy8gR2VuZXJh
dGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNv
dXJjZTogZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bwotI3ByYWdtYSB3YXJuaW5nIGRpc2Fi
bGUgMTU5MSwgMDYxMiwgMzAyMQotI3JlZ2lvbiBEZXNpZ25lciBnZW5lcmF0ZWQgY29kZQotCi11
c2luZyBwYiA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmOwotdXNpbmcgcGJjID0gZ2xvYmFsOjpH
b29nbGUuUHJvdG9idWYuQ29sbGVjdGlvbnM7Ci11c2luZyBwYnIgPSBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5SZWZsZWN0aW9uOwotdXNpbmcgc2NnID0gZ2xvYmFsOjpTeXN0ZW0uQ29sbGVjdGlv
bnMuR2VuZXJpYzsKLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMgewot
Ci0gIC8vLyA8c3VtbWFyeT5Ib2xkZXIgZm9yIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24gZ2VuZXJh
dGVkIGZyb20gZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bzwvc3VtbWFyeT4KLSAgW2dsb2Jh
bDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAg
cHVibGljIHN0YXRpYyBwYXJ0aWFsIGNsYXNzIFN0cnVjdFJlZmxlY3Rpb24gewotCi0gICAgI3Jl
Z2lvbiBEZXNjcmlwdG9yCi0gICAgLy8vIDxzdW1tYXJ5PkZpbGUgZGVzY3JpcHRvciBmb3IgZ29v
Z2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bzwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RhdGljIHBi
cjo6RmlsZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZGVzY3Jp
cHRvcjsgfQotICAgIH0KLSAgICBwcml2YXRlIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9yIGRl
c2NyaXB0b3I7Ci0KLSAgICBzdGF0aWMgU3RydWN0UmVmbGVjdGlvbigpIHsKLSAgICAgIGJ5dGVb
XSBkZXNjcmlwdG9yRGF0YSA9IGdsb2JhbDo6U3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmlu
ZygKLSAgICAgICAgICBzdHJpbmcuQ29uY2F0KAotICAgICAgICAgICAgIkNoeG5iMjluYkdVdmNI
SnZkRzlpZFdZdmMzUnlkV04wTG5CeWIzUnZFZzluYjI5bmJHVXVjSEp2ZEc5aSIsCi0gICAgICAg
ICAgICAiZFdZaWhBRUtCbE4wY25WamRCSXpDZ1ptYVdWc1pITVlBU0FES0FzeUl5NW5iMjluYkdV
dWNISnZkRzlpIiwKLSAgICAgICAgICAgICJkV1l1VTNSeWRXTjBMa1pwWld4a2MwVnVkSEo1R2tV
S0MwWnBaV3hrYzBWdWRISjVFZ3NLQTJ0bGVSZ0IiLAotICAgICAgICAgICAgIklBRW9DUklsQ2dW
MllXeDFaUmdDSUFFb0N6SVdMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVdZV3gxWlRvQyIsCi0gICAg
ICAgICAgICAiT0FFaTZnRUtCVlpoYkhWbEVqQUtDbTUxYkd4ZmRtRnNkV1VZQVNBQktBNHlHaTVu
YjI5bmJHVXVjSEp2IiwKLSAgICAgICAgICAgICJkRzlpZFdZdVRuVnNiRlpoYkhWbFNBQVNGZ29N
Ym5WdFltVnlYM1poYkhWbEdBSWdBU2dCU0FBU0Znb00iLAotICAgICAgICAgICAgImMzUnlhVzVu
WDNaaGJIVmxHQU1nQVNnSlNBQVNGQW9LWW05dmJGOTJZV3gxWlJnRUlBRW9DRWdBRWk4SyIsCi0g
ICAgICAgICAgICAiREhOMGNuVmpkRjkyWVd4MVpSZ0ZJQUVvQ3pJWExtZHZiMmRzWlM1d2NtOTBi
MkoxWmk1VGRISjFZM1JJIiwKLSAgICAgICAgICAgICJBQkl3Q2dwc2FYTjBYM1poYkhWbEdBWWdB
U2dMTWhvdVoyOXZaMnhsTG5CeWIzUnZZblZtTGt4cGMzUlciLAotICAgICAgICAgICAgIllXeDFa
VWdBUWdZS0JHdHBibVFpTXdvSlRHbHpkRlpoYkhWbEVpWUtCblpoYkhWbGN4Z0JJQU1vQ3pJVyIs
Ci0gICAgICAgICAgICAiTG1kdmIyZHNaUzV3Y205MGIySjFaaTVXWVd4MVpTb2JDZ2xPZFd4c1Zt
RnNkV1VTRGdvS1RsVk1URjlXIiwKLSAgICAgICAgICAgICJRVXhWUlJBQVFvRUJDaE5qYjIwdVoy
OXZaMnhsTG5CeWIzUnZZblZtUWd0VGRISjFZM1JRY205MGIxQUIiLAotICAgICAgICAgICAgIldq
Rm5hWFJvZFdJdVkyOXRMMmR2YkdGdVp5OXdjbTkwYjJKMVppOXdkSGx3WlhNdmMzUnlkV04wTzNO
MCIsCi0gICAgICAgICAgICAiY25WamRIQmlvQUVCb2dJRFIxQkNxZ0llUjI5dloyeGxMbEJ5YjNS
dlluVm1MbGRsYkd4TGJtOTNibFI1IiwKLSAgICAgICAgICAgICJjR1Z6WWdad2NtOTBiek09Iikp
OwotICAgICAgZGVzY3JpcHRvciA9IHBicjo6RmlsZURlc2NyaXB0b3IuRnJvbUdlbmVyYXRlZENv
ZGUoZGVzY3JpcHRvckRhdGEsCi0gICAgICAgICAgbmV3IHBicjo6RmlsZURlc2NyaXB0b3JbXSB7
IH0sCi0gICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8obmV3W10ge3R5cGVv
ZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5OdWxsVmFsdWUpLCB9LCBu
ZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6Okdl
bmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5TdHJ1Y3QpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5T
dHJ1Y3QuUGFyc2VyLCBuZXdbXXsgIkZpZWxkcyIgfSwgbnVsbCwgbnVsbCwgbmV3IHBicjo6R2Vu
ZXJhdGVkQ2xyVHlwZUluZm9bXSB7IG51bGwsIH0pLAotICAgICAgICAgICAgbmV3IHBicjo6R2Vu
ZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93
blR5cGVzLlZhbHVlKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVmFs
dWUuUGFyc2VyLCBuZXdbXXsgIk51bGxWYWx1ZSIsICJOdW1iZXJWYWx1ZSIsICJTdHJpbmdWYWx1
ZSIsICJCb29sVmFsdWUiLCAiU3RydWN0VmFsdWUiLCAiTGlzdFZhbHVlIiB9LCBuZXdbXXsgIktp
bmQiIH0sIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlw
ZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkxpc3RW
YWx1ZSksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkxpc3RWYWx1ZS5Q
YXJzZXIsIG5ld1tdeyAiVmFsdWVzIiB9LCBudWxsLCBudWxsLCBudWxsKQotICAgICAgICAgIH0p
KTsKLSAgICB9Ci0gICAgI2VuZHJlZ2lvbgotCi0gIH0KLSAgI3JlZ2lvbiBFbnVtcwotICAvLy8g
PHN1bW1hcnk+Ci0gIC8vLyAgYE51bGxWYWx1ZWAgaXMgYSBzaW5nbGV0b24gZW51bWVyYXRpb24g
dG8gcmVwcmVzZW50IHRoZSBudWxsIHZhbHVlIGZvciB0aGUKLSAgLy8vICBgVmFsdWVgIHR5cGUg
dW5pb24uCi0gIC8vLwotICAvLy8gICBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgYE51bGxW
YWx1ZWAgaXMgSlNPTiBgbnVsbGAuCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIHB1YmxpYyBlbnVtIE51
bGxWYWx1ZSB7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgTnVsbCB2YWx1ZS4KLSAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiTlVMTF9WQUxVRSIpXSBOdWxs
VmFsdWUgPSAwLAotICB9Ci0KLSAgI2VuZHJlZ2lvbgotCi0gICNyZWdpb24gTWVzc2FnZXMKLSAg
Ly8vIDxzdW1tYXJ5PgotICAvLy8gIGBTdHJ1Y3RgIHJlcHJlc2VudHMgYSBzdHJ1Y3R1cmVkIGRh
dGEgdmFsdWUsIGNvbnNpc3Rpbmcgb2YgZmllbGRzCi0gIC8vLyAgd2hpY2ggbWFwIHRvIGR5bmFt
aWNhbGx5IHR5cGVkIHZhbHVlcy4gSW4gc29tZSBsYW5ndWFnZXMsIGBTdHJ1Y3RgCi0gIC8vLyAg
bWlnaHQgYmUgc3VwcG9ydGVkIGJ5IGEgbmF0aXZlIHJlcHJlc2VudGF0aW9uLiBGb3IgZXhhbXBs
ZSwgaW4KLSAgLy8vICBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGxpa2UgSlMgYSBzdHJ1Y3QgaXMgcmVw
cmVzZW50ZWQgYXMgYW4KLSAgLy8vICBvYmplY3QuIFRoZSBkZXRhaWxzIG9mIHRoYXQgcmVwcmVz
ZW50YXRpb24gYXJlIGRlc2NyaWJlZCB0b2dldGhlcgotICAvLy8gIHdpdGggdGhlIHByb3RvIHN1
cHBvcnQgZm9yIHRoZSBsYW5ndWFnZS4KLSAgLy8vCi0gIC8vLyAgVGhlIEpTT04gcmVwcmVzZW50
YXRpb24gZm9yIGBTdHJ1Y3RgIGlzIEpTT04gb2JqZWN0LgotICAvLy8gPC9zdW1tYXJ5PgotICBb
Z2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgp
XQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgU3RydWN0IDogcGI6OklNZXNzYWdlPFN0
cnVjdD4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFN0
cnVjdD4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxTdHJ1Y3Q+KCgpID0+IG5ldyBT
dHJ1Y3QoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxTdHJ1Y3Q+IFBh
cnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJy
OjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5TdHJ1Y3RSZWZsZWN0aW9uLkRlc2Ny
aXB0b3IuTWVzc2FnZVR5cGVzWzBdOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3Jp
cHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3Jp
cHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJ1Y3QoKSB7Ci0gICAgICBPbkNvbnN0cnVj
dGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0g
ICAgcHVibGljIFN0cnVjdChTdHJ1Y3Qgb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIGZpZWxkc18g
PSBvdGhlci5maWVsZHNfLkNsb25lKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cnVjdCBDbG9u
ZSgpIHsKLSAgICAgIHJldHVybiBuZXcgU3RydWN0KHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8
c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAiZmllbGRzIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBGaWVsZHNGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBz
dGF0aWMgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDxzdHJpbmcsIGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLldlbGxLbm93blR5cGVzLlZhbHVlPi5Db2RlYyBfbWFwX2ZpZWxkc19jb2RlYwotICAgICAg
ICA9IG5ldyBwYmM6Ok1hcEZpZWxkPHN0cmluZywgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2Vs
bEtub3duVHlwZXMuVmFsdWU+LkNvZGVjKHBiOjpGaWVsZENvZGVjLkZvclN0cmluZygxMCksIHBi
OjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMTgsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzLlZhbHVlLlBhcnNlciksIDEwKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6
TWFwRmllbGQ8c3RyaW5nLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5W
YWx1ZT4gZmllbGRzXyA9IG5ldyBwYmM6Ok1hcEZpZWxkPHN0cmluZywgZ2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuV2VsbEtub3duVHlwZXMuVmFsdWU+KCk7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAg
IC8vLyAgVW5vcmRlcmVkIG1hcCBvZiBkeW5hbWljYWxseSB0eXBlZCB2YWx1ZXMuCi0gICAgLy8v
IDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgcGJjOjpNYXBGaWVsZDxzdHJpbmcsIGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlZhbHVlPiBGaWVsZHMgewotICAgICAgZ2V0IHsg
cmV0dXJuIGZpZWxkc187IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVh
bHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIFN0cnVjdCk7
Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKFN0cnVjdCBvdGhlcikgewotICAgICAg
aWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoIUZpZWxkcy5FcXVhbHMob3Ro
ZXIuRmllbGRzKSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNoID0g
MTsKLSAgICAgIGhhc2ggXj0gRmllbGRzLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFz
aDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAg
ICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRw
dXQpIHsKLSAgICAgIGZpZWxkc18uV3JpdGVUbyhvdXRwdXQsIF9tYXBfZmllbGRzX2NvZGVjKTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6
ZSA9IDA7Ci0gICAgICBzaXplICs9IGZpZWxkc18uQ2FsY3VsYXRlU2l6ZShfbWFwX2ZpZWxkc19j
b2RlYyk7Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJn
ZUZyb20oU3RydWN0IG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBmaWVsZHNfLkFkZChvdGhlci5maWVsZHNfKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5w
dXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFn
KCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIDEwOiB7Ci0gICAgICAgICAgICBmaWVsZHNfLkFkZEVudHJpZXNGcm9tKGlu
cHV0LCBfbWFwX2ZpZWxkc19jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4KLSAg
Ly8vICBgVmFsdWVgIHJlcHJlc2VudHMgYSBkeW5hbWljYWxseSB0eXBlZCB2YWx1ZSB3aGljaCBj
YW4gYmUgZWl0aGVyCi0gIC8vLyAgbnVsbCwgYSBudW1iZXIsIGEgc3RyaW5nLCBhIGJvb2xlYW4s
IGEgcmVjdXJzaXZlIHN0cnVjdCB2YWx1ZSwgb3IgYQotICAvLy8gIGxpc3Qgb2YgdmFsdWVzLiBB
IHByb2R1Y2VyIG9mIHZhbHVlIGlzIGV4cGVjdGVkIHRvIHNldCBvbmUgb2YgdGhhdAotICAvLy8g
IHZhcmlhbnRzLCBhYnNlbmNlIG9mIGFueSB2YXJpYW50IGluZGljYXRlcyBhbiBlcnJvci4KLSAg
Ly8vCi0gIC8vLyAgVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBWYWx1ZWAgaXMgSlNPTiB2
YWx1ZS4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRl
YnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNs
YXNzIFZhbHVlIDogcGI6OklNZXNzYWdlPFZhbHVlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVh
ZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8VmFsdWU+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQ
YXJzZXI8VmFsdWU+KCgpID0+IG5ldyBWYWx1ZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpN
ZXNzYWdlUGFyc2VyPFZhbHVlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0K
LSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
U3RydWN0UmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1sxXTsgfQotICAgIH0KLQot
ICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAg
ICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgVmFsdWUo
KSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBP
bkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIFZhbHVlKFZhbHVlIG90aGVyKSA6IHRoaXMo
KSB7Ci0gICAgICBzd2l0Y2ggKG90aGVyLktpbmRDYXNlKSB7Ci0gICAgICAgIGNhc2UgS2luZE9u
ZW9mQ2FzZS5OdWxsVmFsdWU6Ci0gICAgICAgICAgTnVsbFZhbHVlID0gb3RoZXIuTnVsbFZhbHVl
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtpbmRPbmVvZkNhc2UuTnVtYmVyVmFs
dWU6Ci0gICAgICAgICAgTnVtYmVyVmFsdWUgPSBvdGhlci5OdW1iZXJWYWx1ZTsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBLaW5kT25lb2ZDYXNlLlN0cmluZ1ZhbHVlOgotICAgICAg
ICAgIFN0cmluZ1ZhbHVlID0gb3RoZXIuU3RyaW5nVmFsdWU7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgS2luZE9uZW9mQ2FzZS5Cb29sVmFsdWU6Ci0gICAgICAgICAgQm9vbFZhbHVl
ID0gb3RoZXIuQm9vbFZhbHVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtpbmRP
bmVvZkNhc2UuU3RydWN0VmFsdWU6Ci0gICAgICAgICAgU3RydWN0VmFsdWUgPSBvdGhlci5TdHJ1
Y3RWYWx1ZS5DbG9uZSgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtpbmRPbmVv
ZkNhc2UuTGlzdFZhbHVlOgotICAgICAgICAgIExpc3RWYWx1ZSA9IG90aGVyLkxpc3RWYWx1ZS5D
bG9uZSgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgfQotCi0gICAgcHVibGlj
IFZhbHVlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBWYWx1ZSh0aGlzKTsKLSAgICB9Ci0K
LSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm51bGxfdmFsdWUiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE51bGxWYWx1ZUZpZWxkTnVtYmVyID0g
MTsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBSZXByZXNlbnRzIGEgbnVsbCB2YWx1ZS4K
LSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5X
ZWxsS25vd25UeXBlcy5OdWxsVmFsdWUgTnVsbFZhbHVlIHsKLSAgICAgIGdldCB7IHJldHVybiBr
aW5kQ2FzZV8gPT0gS2luZE9uZW9mQ2FzZS5OdWxsVmFsdWUgPyAoZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuTnVsbFZhbHVlKSBraW5kXyA6IDA7IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIGtpbmRfID0gdmFsdWU7Ci0gICAgICAgIGtpbmRDYXNlXyA9IEtpbmRPbmVvZkNh
c2UuTnVsbFZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBu
dW1iZXIgZm9yIHRoZSAibnVtYmVyX3ZhbHVlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGlj
IGNvbnN0IGludCBOdW1iZXJWYWx1ZUZpZWxkTnVtYmVyID0gMjsKLSAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgLy8vICBSZXByZXNlbnRzIGEgZG91YmxlIHZhbHVlLgotICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgcHVibGljIGRvdWJsZSBOdW1iZXJWYWx1ZSB7Ci0gICAgICBnZXQgeyByZXR1cm4ga2lu
ZENhc2VfID09IEtpbmRPbmVvZkNhc2UuTnVtYmVyVmFsdWUgPyAoZG91YmxlKSBraW5kXyA6IDBE
OyB9Ci0gICAgICBzZXQgewotICAgICAgICBraW5kXyA9IHZhbHVlOwotICAgICAgICBraW5kQ2Fz
ZV8gPSBLaW5kT25lb2ZDYXNlLk51bWJlclZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8v
LyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic3RyaW5nX3ZhbHVlIiBmaWVsZC48L3N1
bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTdHJpbmdWYWx1ZUZpZWxkTnVtYmVyID0gMzsK
LSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBSZXByZXNlbnRzIGEgc3RyaW5nIHZhbHVlLgot
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0cmluZyBTdHJpbmdWYWx1ZSB7Ci0gICAg
ICBnZXQgeyByZXR1cm4ga2luZENhc2VfID09IEtpbmRPbmVvZkNhc2UuU3RyaW5nVmFsdWUgPyAo
c3RyaW5nKSBraW5kXyA6ICIiOyB9Ci0gICAgICBzZXQgewotICAgICAgICBraW5kXyA9IHBiOjpQ
cm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgICAg
a2luZENhc2VfID0gS2luZE9uZW9mQ2FzZS5TdHJpbmdWYWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImJvb2xfdmFsdWUiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEJvb2xWYWx1ZUZpZWxkTnVtYmVyID0g
NDsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBSZXByZXNlbnRzIGEgYm9vbGVhbiB2YWx1
ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBib29sIEJvb2xWYWx1ZSB7Ci0gICAg
ICBnZXQgeyByZXR1cm4ga2luZENhc2VfID09IEtpbmRPbmVvZkNhc2UuQm9vbFZhbHVlID8gKGJv
b2wpIGtpbmRfIDogZmFsc2U7IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGtpbmRfID0gdmFsdWU7
Ci0gICAgICAgIGtpbmRDYXNlXyA9IEtpbmRPbmVvZkNhc2UuQm9vbFZhbHVlOwotICAgICAgfQot
ICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIgZm9yIHRoZSAic3RydWN0X3Zh
bHVlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTdHJ1Y3RWYWx1ZUZp
ZWxkTnVtYmVyID0gNTsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBSZXByZXNlbnRzIGEg
c3RydWN0dXJlZCB2YWx1ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5TdHJ1Y3QgU3RydWN0VmFsdWUgewotICAg
ICAgZ2V0IHsgcmV0dXJuIGtpbmRDYXNlXyA9PSBLaW5kT25lb2ZDYXNlLlN0cnVjdFZhbHVlID8g
KGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cnVjdCkga2luZF8gOiBu
dWxsOyB9Ci0gICAgICBzZXQgewotICAgICAgICBraW5kXyA9IHZhbHVlOwotICAgICAgICBraW5k
Q2FzZV8gPSB2YWx1ZSA9PSBudWxsID8gS2luZE9uZW9mQ2FzZS5Ob25lIDogS2luZE9uZW9mQ2Fz
ZS5TdHJ1Y3RWYWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQg
bnVtYmVyIGZvciB0aGUgImxpc3RfdmFsdWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
Y29uc3QgaW50IExpc3RWYWx1ZUZpZWxkTnVtYmVyID0gNjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgLy8vICBSZXByZXNlbnRzIGEgcmVwZWF0ZWQgYFZhbHVlYC4KLSAgICAvLy8gPC9zdW1tYXJ5
PgotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5MaXN0
VmFsdWUgTGlzdFZhbHVlIHsKLSAgICAgIGdldCB7IHJldHVybiBraW5kQ2FzZV8gPT0gS2luZE9u
ZW9mQ2FzZS5MaXN0VmFsdWUgPyAoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMuTGlzdFZhbHVlKSBraW5kXyA6IG51bGw7IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIGtpbmRf
ID0gdmFsdWU7Ci0gICAgICAgIGtpbmRDYXNlXyA9IHZhbHVlID09IG51bGwgPyBLaW5kT25lb2ZD
YXNlLk5vbmUgOiBLaW5kT25lb2ZDYXNlLkxpc3RWYWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBwcml2YXRlIG9iamVjdCBraW5kXzsKLSAgICAvLy8gPHN1bW1hcnk+RW51bSBvZiBwb3NzaWJs
ZSBjYXNlcyBmb3IgdGhlICJraW5kIiBvbmVvZi48L3N1bW1hcnk+Ci0gICAgcHVibGljIGVudW0g
S2luZE9uZW9mQ2FzZSB7Ci0gICAgICBOb25lID0gMCwKLSAgICAgIE51bGxWYWx1ZSA9IDEsCi0g
ICAgICBOdW1iZXJWYWx1ZSA9IDIsCi0gICAgICBTdHJpbmdWYWx1ZSA9IDMsCi0gICAgICBCb29s
VmFsdWUgPSA0LAotICAgICAgU3RydWN0VmFsdWUgPSA1LAotICAgICAgTGlzdFZhbHVlID0gNiwK
LSAgICB9Ci0gICAgcHJpdmF0ZSBLaW5kT25lb2ZDYXNlIGtpbmRDYXNlXyA9IEtpbmRPbmVvZkNh
c2UuTm9uZTsKLSAgICBwdWJsaWMgS2luZE9uZW9mQ2FzZSBLaW5kQ2FzZSB7Ci0gICAgICBnZXQg
eyByZXR1cm4ga2luZENhc2VfOyB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgQ2xlYXJLaW5k
KCkgewotICAgICAga2luZENhc2VfID0gS2luZE9uZW9mQ2FzZS5Ob25lOwotICAgICAga2luZF8g
PSBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qg
b3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgVmFsdWUpOwotICAgIH0KLQot
ICAgIHB1YmxpYyBib29sIEVxdWFscyhWYWx1ZSBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5j
ZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQot
ICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoTnVsbFZhbHVlICE9IG90aGVyLk51bGxWYWx1ZSkg
cmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE51bWJlclZhbHVlICE9IG90aGVyLk51bWJlclZhbHVl
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoU3RyaW5nVmFsdWUgIT0gb3RoZXIuU3RyaW5nVmFs
dWUpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChCb29sVmFsdWUgIT0gb3RoZXIuQm9vbFZhbHVl
KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoIW9iamVjdC5FcXVhbHMoU3RydWN0VmFsdWUsIG90
aGVyLlN0cnVjdFZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxz
KExpc3RWYWx1ZSwgb3RoZXIuTGlzdFZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKEtp
bmRDYXNlICE9IG90aGVyLktpbmRDYXNlKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAg
ICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKGtpbmRDYXNlXyA9PSBLaW5kT25lb2ZDYXNlLk51
bGxWYWx1ZSkgaGFzaCBePSBOdWxsVmFsdWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChraW5k
Q2FzZV8gPT0gS2luZE9uZW9mQ2FzZS5OdW1iZXJWYWx1ZSkgaGFzaCBePSBOdW1iZXJWYWx1ZS5H
ZXRIYXNoQ29kZSgpOwotICAgICAgaWYgKGtpbmRDYXNlXyA9PSBLaW5kT25lb2ZDYXNlLlN0cmlu
Z1ZhbHVlKSBoYXNoIF49IFN0cmluZ1ZhbHVlLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoa2lu
ZENhc2VfID09IEtpbmRPbmVvZkNhc2UuQm9vbFZhbHVlKSBoYXNoIF49IEJvb2xWYWx1ZS5HZXRI
YXNoQ29kZSgpOwotICAgICAgaWYgKGtpbmRDYXNlXyA9PSBLaW5kT25lb2ZDYXNlLlN0cnVjdFZh
bHVlKSBoYXNoIF49IFN0cnVjdFZhbHVlLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoa2luZENh
c2VfID09IEtpbmRPbmVvZkNhc2UuTGlzdFZhbHVlKSBoYXNoIF49IExpc3RWYWx1ZS5HZXRIYXNo
Q29kZSgpOwotICAgICAgaGFzaCBePSAoaW50KSBraW5kQ2FzZV87Ci0gICAgICByZXR1cm4gaGFz
aDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAg
ICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRw
dXQpIHsKLSAgICAgIGlmIChraW5kQ2FzZV8gPT0gS2luZE9uZW9mQ2FzZS5OdWxsVmFsdWUpIHsK
LSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDgpOwotICAgICAgICBvdXRwdXQuV3JpdGVFbnVt
KChpbnQpIE51bGxWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoa2luZENhc2VfID09IEtpbmRP
bmVvZkNhc2UuTnVtYmVyVmFsdWUpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDE3KTsK
LSAgICAgICAgb3V0cHV0LldyaXRlRG91YmxlKE51bWJlclZhbHVlKTsKLSAgICAgIH0KLSAgICAg
IGlmIChraW5kQ2FzZV8gPT0gS2luZE9uZW9mQ2FzZS5TdHJpbmdWYWx1ZSkgewotICAgICAgICBv
dXRwdXQuV3JpdGVSYXdUYWcoMjYpOwotICAgICAgICBvdXRwdXQuV3JpdGVTdHJpbmcoU3RyaW5n
VmFsdWUpOwotICAgICAgfQotICAgICAgaWYgKGtpbmRDYXNlXyA9PSBLaW5kT25lb2ZDYXNlLkJv
b2xWYWx1ZSkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoMzIpOwotICAgICAgICBvdXRw
dXQuV3JpdGVCb29sKEJvb2xWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoa2luZENhc2VfID09
IEtpbmRPbmVvZkNhc2UuU3RydWN0VmFsdWUpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFn
KDQyKTsKLSAgICAgICAgb3V0cHV0LldyaXRlTWVzc2FnZShTdHJ1Y3RWYWx1ZSk7Ci0gICAgICB9
Ci0gICAgICBpZiAoa2luZENhc2VfID09IEtpbmRPbmVvZkNhc2UuTGlzdFZhbHVlKSB7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg1MCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2Uo
TGlzdFZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNp
emUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoa2luZENhc2VfID09IEtpbmRP
bmVvZkNhc2UuTnVsbFZhbHVlKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1
dFN0cmVhbS5Db21wdXRlRW51bVNpemUoKGludCkgTnVsbFZhbHVlKTsKLSAgICAgIH0KLSAgICAg
IGlmIChraW5kQ2FzZV8gPT0gS2luZE9uZW9mQ2FzZS5OdW1iZXJWYWx1ZSkgewotICAgICAgICBz
aXplICs9IDEgKyA4OwotICAgICAgfQotICAgICAgaWYgKGtpbmRDYXNlXyA9PSBLaW5kT25lb2ZD
YXNlLlN0cmluZ1ZhbHVlKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0
cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShTdHJpbmdWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAo
a2luZENhc2VfID09IEtpbmRPbmVvZkNhc2UuQm9vbFZhbHVlKSB7Ci0gICAgICAgIHNpemUgKz0g
MSArIDE7Ci0gICAgICB9Ci0gICAgICBpZiAoa2luZENhc2VfID09IEtpbmRPbmVvZkNhc2UuU3Ry
dWN0VmFsdWUpIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNv
bXB1dGVNZXNzYWdlU2l6ZShTdHJ1Y3RWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoa2luZENh
c2VfID09IEtpbmRPbmVvZkNhc2UuTGlzdFZhbHVlKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBi
OjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoTGlzdFZhbHVlKTsKLSAgICAg
IH0KLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJv
bShWYWx1ZSBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgc3dpdGNoIChvdGhlci5LaW5kQ2FzZSkgewotICAgICAgICBj
YXNlIEtpbmRPbmVvZkNhc2UuTnVsbFZhbHVlOgotICAgICAgICAgIE51bGxWYWx1ZSA9IG90aGVy
Lk51bGxWYWx1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLaW5kT25lb2ZDYXNl
Lk51bWJlclZhbHVlOgotICAgICAgICAgIE51bWJlclZhbHVlID0gb3RoZXIuTnVtYmVyVmFsdWU7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2luZE9uZW9mQ2FzZS5TdHJpbmdWYWx1
ZToKLSAgICAgICAgICBTdHJpbmdWYWx1ZSA9IG90aGVyLlN0cmluZ1ZhbHVlOwotICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEtpbmRPbmVvZkNhc2UuQm9vbFZhbHVlOgotICAgICAgICAg
IEJvb2xWYWx1ZSA9IG90aGVyLkJvb2xWYWx1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBLaW5kT25lb2ZDYXNlLlN0cnVjdFZhbHVlOgotICAgICAgICAgIFN0cnVjdFZhbHVlID0g
b3RoZXIuU3RydWN0VmFsdWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS2luZE9u
ZW9mQ2FzZS5MaXN0VmFsdWU6Ci0gICAgICAgICAgTGlzdFZhbHVlID0gb3RoZXIuTGlzdFZhbHVl
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
TWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsK
LSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3
aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExh
c3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4OiB7Ci0gICAg
ICAgICAgICBraW5kXyA9IGlucHV0LlJlYWRFbnVtKCk7Ci0gICAgICAgICAgICBraW5kQ2FzZV8g
PSBLaW5kT25lb2ZDYXNlLk51bGxWYWx1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgICBjYXNlIDE3OiB7Ci0gICAgICAgICAgICBOdW1iZXJWYWx1ZSA9IGlucHV0
LlJlYWREb3VibGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBjYXNlIDI2OiB7Ci0gICAgICAgICAgICBTdHJpbmdWYWx1ZSA9IGlucHV0LlJlYWRTdHJpbmco
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDMyOiB7
Ci0gICAgICAgICAgICBCb29sVmFsdWUgPSBpbnB1dC5SZWFkQm9vbCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNDI6IHsKLSAgICAgICAgICAgIGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cnVjdCBzdWJCdWlsZGVyID0g
bmV3IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cnVjdCgpOwotICAg
ICAgICAgICAgaWYgKGtpbmRDYXNlXyA9PSBLaW5kT25lb2ZDYXNlLlN0cnVjdFZhbHVlKSB7Ci0g
ICAgICAgICAgICAgIHN1YkJ1aWxkZXIuTWVyZ2VGcm9tKFN0cnVjdFZhbHVlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlucHV0LlJlYWRNZXNzYWdlKHN1YkJ1aWxkZXIpOwotICAgICAg
ICAgICAgU3RydWN0VmFsdWUgPSBzdWJCdWlsZGVyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGNhc2UgNTA6IHsKLSAgICAgICAgICAgIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLkxpc3RWYWx1ZSBzdWJCdWlsZGVyID0gbmV3IGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkxpc3RWYWx1ZSgpOwotICAgICAgICAg
ICAgaWYgKGtpbmRDYXNlXyA9PSBLaW5kT25lb2ZDYXNlLkxpc3RWYWx1ZSkgewotICAgICAgICAg
ICAgICBzdWJCdWlsZGVyLk1lcmdlRnJvbShMaXN0VmFsdWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaW5wdXQuUmVhZE1lc3NhZ2Uoc3ViQnVpbGRlcik7Ci0gICAgICAgICAgICBMaXN0
VmFsdWUgPSBzdWJCdWlsZGVyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAg
YExpc3RWYWx1ZWAgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIHJlcGVhdGVkIGZpZWxkIG9mIHZhbHVl
cy4KLSAgLy8vCi0gIC8vLyAgVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBMaXN0VmFsdWVg
IGlzIEpTT04gYXJyYXkuCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFn
bm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQg
cGFydGlhbCBjbGFzcyBMaXN0VmFsdWUgOiBwYjo6SU1lc3NhZ2U8TGlzdFZhbHVlPiB7Ci0gICAg
cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8TGlzdFZhbHVlPiBfcGFy
c2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPExpc3RWYWx1ZT4oKCkgPT4gbmV3IExpc3RWYWx1
ZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPExpc3RWYWx1ZT4gUGFy
c2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6
Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cnVjdFJlZmxlY3Rpb24uRGVzY3Jp
cHRvci5NZXNzYWdlVHlwZXNbMl07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlw
dG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlw
dG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIExpc3RWYWx1ZSgpIHsKLSAgICAgIE9uQ29uc3Ry
dWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0K
LSAgICBwdWJsaWMgTGlzdFZhbHVlKExpc3RWYWx1ZSBvdGhlcikgOiB0aGlzKCkgewotICAgICAg
dmFsdWVzXyA9IG90aGVyLnZhbHVlc18uQ2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlz
dFZhbHVlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBMaXN0VmFsdWUodGhpcyk7Ci0gICAg
fQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ2YWx1ZXMiIGZpZWxk
Ljwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFZhbHVlc0ZpZWxkTnVtYmVyID0gMTsK
LSAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5WYWx1ZT4gX3JlcGVhdGVkX3ZhbHVlc19jb2RlYwot
ICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMTAsIGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLlZhbHVlLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25s
eSBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
ZXMuVmFsdWU+IHZhbHVlc18gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLlZhbHVlPigpOwotICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAvLy8gIFJlcGVhdGVkIGZpZWxkIG9mIGR5bmFtaWNhbGx5IHR5cGVkIHZhbHVlcy4KLSAgICAv
Ly8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29n
bGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVmFsdWU+IFZhbHVlcyB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gdmFsdWVzXzsgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFs
cyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgTGlzdFZhbHVl
KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoTGlzdFZhbHVlIG90aGVyKSB7Ci0g
ICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkg
ewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmKCF2YWx1ZXNfLkVxdWFs
cyhvdGhlci52YWx1ZXNfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBo
YXNoID0gMTsKLSAgICAgIGhhc2ggXj0gdmFsdWVzXy5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0
dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygp
IHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhp
cyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJl
YW0gb3V0cHV0KSB7Ci0gICAgICB2YWx1ZXNfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfdmFs
dWVzX2NvZGVjKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0g
ICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBzaXplICs9IHZhbHVlc18uQ2FsY3VsYXRlU2l6ZShf
cmVwZWF0ZWRfdmFsdWVzX2NvZGVjKTsKLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAg
IHB1YmxpYyB2b2lkIE1lcmdlRnJvbShMaXN0VmFsdWUgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhl
ciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHZhbHVlc18uQWRk
KG90aGVyLnZhbHVlc18pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6
Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAo
KHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIHZhbHVl
c18uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF92YWx1ZXNfY29kZWMpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0g
IH0KLQotICAjZW5kcmVnaW9uCi0KLX0KLQotI2VuZHJlZ2lvbiBEZXNpZ25lciBnZW5lcmF0ZWQg
Y29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBl
cy9UaW1lRXh0ZW5zaW9ucy5jcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3du
VHlwZXMvVGltZUV4dGVuc2lvbnMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRk
NDg1ZDMyNGFhMTI5ZjgwM2Q3YzllNDRlOTdjNWFjZGVkNjY0MWMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9X
ZWxsS25vd25UeXBlcy9UaW1lRXh0ZW5zaW9ucy5jcworKysgL2Rldi9udWxsCkBAIC0xLDgwICsw
LDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVz
aW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLkxpbnE7Ci11c2lu
ZyBTeXN0ZW0uVGV4dDsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFj
ZSBHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgLy8vIEV4dGVuc2lvbiBtZXRob2RzIG9uIEJDTCB0aW1lLXJlbGF0ZWQgdHlwZXMsIGNvbnZl
cnRpbmcgdG8gcHJvdG9idWYgdHlwZXMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMg
c3RhdGljIGNsYXNzIFRpbWVFeHRlbnNpb25zCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+
Ci0gICAgICAgIC8vLyBDb252ZXJ0cyB0aGUgZ2l2ZW4gPHNlZSBjcmVmPSJEYXRlVGltZSIvPiB0
byBhIDxzZWUgY3JlZj0iVGltZXN0YW1wIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAg
ICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGVUaW1lIj5UaGUgZGF0ZSBhbmQgdGltZSB0byBjb252
ZXJ0IHRvIGEgdGltZXN0YW1wLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9
IkFyZ3VtZW50RXhjZXB0aW9uIj5UaGUgPHBhcmFtcmVmIG5hbWU9ImRhdGVUaW1lIi8+IHZhbHVl
IGhhcyBhIDxzZWUgY3JlZj0iRGF0ZVRpbWUuS2luZCIvPm90aGVyIHRoYW4gPGM+VXRjPC9jPi48
L2V4Y2VwdGlvbj4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSBjb252ZXJ0ZWQgdGltZXN0YW1w
LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBUaW1lc3RhbXAgVG9UaW1lc3RhbXAo
dGhpcyBEYXRlVGltZSBkYXRlVGltZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFRp
bWVzdGFtcC5Gcm9tRGF0ZVRpbWUoZGF0ZVRpbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8v
IDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29udmVydHMgdGhlIGdpdmVuIDxzZWUgY3JlZj0iRGF0
ZVRpbWVPZmZzZXQiLz4gdG8gYSA8c2VlIGNyZWY9IlRpbWVzdGFtcCIvPgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+VGhlIG9mZnNldCBpcyB0YWtlbiBpbnRv
IGNvbnNpZGVyYXRpb24gd2hlbiBjb252ZXJ0aW5nIHRoZSB2YWx1ZSAoc28gdGhlIHNhbWUgaW5z
dGFudCBpbiB0aW1lCi0gICAgICAgIC8vLyBpcyByZXByZXNlbnRlZCkgYnV0IGlzIG5vdCBhIHNl
cGFyYXRlIHBhcnQgb2YgdGhlIHJlc3VsdGluZyB2YWx1ZS4gSW4gb3RoZXIgd29yZHMsIHRoZXJl
IGlzIG5vCi0gICAgICAgIC8vLyByb3VuZHRyaXAgb3BlcmF0aW9uIHRvIHJldHJpZXZlIHRoZSBv
cmlnaW5hbCA8Yz5EYXRlVGltZU9mZnNldDwvYz4uPC9yZW1hcmtzPgotICAgICAgICAvLy8gPHBh
cmFtIG5hbWU9ImRhdGVUaW1lT2Zmc2V0Ij5UaGUgZGF0ZSBhbmQgdGltZSAod2l0aCBVVEMgb2Zm
c2V0KSB0byBjb252ZXJ0IHRvIGEgdGltZXN0YW1wLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0
dXJucz5UaGUgY29udmVydGVkIHRpbWVzdGFtcC48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBz
dGF0aWMgVGltZXN0YW1wIFRvVGltZXN0YW1wKHRoaXMgRGF0ZVRpbWVPZmZzZXQgZGF0ZVRpbWVP
ZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBUaW1lc3RhbXAuRnJvbURhdGVU
aW1lT2Zmc2V0KGRhdGVUaW1lT2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vIENvbnZlcnRzIHRoZSBnaXZlbiA8c2VlIGNyZWY9IlRpbWVTcGFu
Ii8+IHRvIGEgPHNlZSBjcmVmPSJEdXJhdGlvbiIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0aW1lU3BhbiI+VGhlIHRpbWUgc3BhbiB0byBjb252
ZXJ0LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgY29udmVydGVkIGR1cmF0aW9u
LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBEdXJhdGlvbiBUb0R1cmF0aW9uKHRo
aXMgVGltZVNwYW4gdGltZVNwYW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEdXJh
dGlvbi5Gcm9tVGltZVNwYW4odGltZVNwYW4pOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBlcy9UaW1lc3RhbXAu
Y3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL1RpbWVzdGFtcC5j
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUzYjg4YmQzM2M5ZTYzOWExMmRhNGEx
M2EzNjFmMTk3NTI5MjkwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL1RpbWVzdGFt
cC5jcworKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhl
IHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQotLy8gc291cmNlOiBnb29n
bGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvCi0jcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSAxNTkx
LCAwNjEyLCAzMDIxCi0jcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRlZCBjb2RlCi0KLXVzaW5nIHBi
ID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWY7Ci11c2luZyBwYmMgPSBnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5Db2xsZWN0aW9uczsKLXVzaW5nIHBiciA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LlJlZmxlY3Rpb247Ci11c2luZyBzY2cgPSBnbG9iYWw6OlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
cmljOwotbmFtZXNwYWNlIEdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcyB7Ci0KLSAgLy8v
IDxzdW1tYXJ5PkhvbGRlciBmb3IgcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgZnJv
bSBnb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpT
eXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJs
aWMgc3RhdGljIHBhcnRpYWwgY2xhc3MgVGltZXN0YW1wUmVmbGVjdGlvbiB7Ci0KLSAgICAjcmVn
aW9uIERlc2NyaXB0b3IKLSAgICAvLy8gPHN1bW1hcnk+RmlsZSBkZXNjcmlwdG9yIGZvciBnb29n
bGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdGF0aWMg
cGJyOjpGaWxlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBkZXNj
cmlwdG9yOyB9Ci0gICAgfQotICAgIHByaXZhdGUgc3RhdGljIHBicjo6RmlsZURlc2NyaXB0b3Ig
ZGVzY3JpcHRvcjsKLQotICAgIHN0YXRpYyBUaW1lc3RhbXBSZWZsZWN0aW9uKCkgewotICAgICAg
Ynl0ZVtdIGRlc2NyaXB0b3JEYXRhID0gZ2xvYmFsOjpTeXN0ZW0uQ29udmVydC5Gcm9tQmFzZTY0
U3RyaW5nKAotICAgICAgICAgIHN0cmluZy5Db25jYXQoCi0gICAgICAgICAgICAiQ2g5bmIyOW5i
R1V2Y0hKdmRHOWlkV1l2ZEdsdFpYTjBZVzF3TG5CeWIzUnZFZzluYjI5bmJHVXVjSEp2IiwKLSAg
ICAgICAgICAgICJkRzlpZFdZaUt3b0pWR2x0WlhOMFlXMXdFZzhLQjNObFkyOXVaSE1ZQVNBQktB
TVNEUW9GYm1GdWIzTVkiLAotICAgICAgICAgICAgIkFpQUJLQVZDZ1FFS0UyTnZiUzVuYjI5bmJH
VXVjSEp2ZEc5aWRXWkNEbFJwYldWemRHRnRjRkJ5YjNSdiIsCi0gICAgICAgICAgICAiVUFGYUsy
ZHBkR2gxWWk1amIyMHZaMjlzWVc1bkwzQnliM1J2WW5WbUwzQjBlWEJsY3k5MGFXMWxjM1JoIiwK
LSAgICAgICAgICAgICJiWENnQVFINEFRR2lBZ05IVUVLcUFoNUhiMjluYkdVdVVISnZkRzlpZFdZ
dVYyVnNiRXR1YjNkdVZIbHciLAotICAgICAgICAgICAgIlpYTmlCbkJ5YjNSdk13PT0iKSk7Ci0g
ICAgICBkZXNjcmlwdG9yID0gcGJyOjpGaWxlRGVzY3JpcHRvci5Gcm9tR2VuZXJhdGVkQ29kZShk
ZXNjcmlwdG9yRGF0YSwKLSAgICAgICAgICBuZXcgcGJyOjpGaWxlRGVzY3JpcHRvcltdIHsgfSwK
LSAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyhudWxsLCBuZXcgcGJyOjpH
ZW5lcmF0ZWRDbHJUeXBlSW5mb1tdIHsKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENs
clR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5U
aW1lc3RhbXApLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UaW1lc3Rh
bXAuUGFyc2VyLCBuZXdbXXsgIlNlY29uZHMiLCAiTmFub3MiIH0sIG51bGwsIG51bGwsIG51bGwp
Ci0gICAgICAgICAgfSkpOwotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotICAjcmVnaW9u
IE1lc3NhZ2VzCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBBIFRpbWVzdGFtcCByZXByZXNlbnRz
IGEgcG9pbnQgaW4gdGltZSBpbmRlcGVuZGVudCBvZiBhbnkgdGltZSB6b25lCi0gIC8vLyAgb3Ig
Y2FsZW5kYXIsIHJlcHJlc2VudGVkIGFzIHNlY29uZHMgYW5kIGZyYWN0aW9ucyBvZiBzZWNvbmRz
IGF0Ci0gIC8vLyAgbmFub3NlY29uZCByZXNvbHV0aW9uIGluIFVUQyBFcG9jaCB0aW1lLiBJdCBp
cyBlbmNvZGVkIHVzaW5nIHRoZQotICAvLy8gIFByb2xlcHRpYyBHcmVnb3JpYW4gQ2FsZW5kYXIg
d2hpY2ggZXh0ZW5kcyB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyCi0gIC8vLyAgYmFja3dhcmRzIHRv
IHllYXIgb25lLiBJdCBpcyBlbmNvZGVkIGFzc3VtaW5nIGFsbCBtaW51dGVzIGFyZSA2MAotICAv
Ly8gIHNlY29uZHMgbG9uZywgaS5lLiBsZWFwIHNlY29uZHMgYXJlICJzbWVhcmVkIiBzbyB0aGF0
IG5vIGxlYXAgc2Vjb25kCi0gIC8vLyAgdGFibGUgaXMgbmVlZGVkIGZvciBpbnRlcnByZXRhdGlv
bi4gUmFuZ2UgaXMgZnJvbQotICAvLy8gIDAwMDEtMDEtMDFUMDA6MDA6MDBaIHRvIDk5OTktMTIt
MzFUMjM6NTk6NTkuOTk5OTk5OTk5Wi4KLSAgLy8vICBCeSByZXN0cmljdGluZyB0byB0aGF0IHJh
bmdlLCB3ZSBlbnN1cmUgdGhhdCB3ZSBjYW4gY29udmVydCB0bwotICAvLy8gIGFuZCBmcm9tICBS
RkMgMzMzOSBkYXRlIHN0cmluZ3MuCi0gIC8vLyAgU2VlIFtodHRwczovL3d3dy5pZXRmLm9yZy9y
ZmMvcmZjMzMzOS50eHRdKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMzM5LnR4dCkuCi0g
IC8vLwotICAvLy8gIEV4YW1wbGUgMTogQ29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBQT1NJWCBgdGlt
ZSgpYC4KLSAgLy8vCi0gIC8vLyAgICAgIFRpbWVzdGFtcCB0aW1lc3RhbXA7Ci0gIC8vLyAgICAg
IHRpbWVzdGFtcC5zZXRfc2Vjb25kcyh0aW1lKE5VTEwpKTsKLSAgLy8vICAgICAgdGltZXN0YW1w
LnNldF9uYW5vcygwKTsKLSAgLy8vCi0gIC8vLyAgRXhhbXBsZSAyOiBDb21wdXRlIFRpbWVzdGFt
cCBmcm9tIFBPU0lYIGBnZXR0aW1lb2ZkYXkoKWAuCi0gIC8vLwotICAvLy8gICAgICBzdHJ1Y3Qg
dGltZXZhbCB0djsKLSAgLy8vICAgICAgZ2V0dGltZW9mZGF5KCZhbXA7dHYsIE5VTEwpOwotICAv
Ly8KLSAgLy8vICAgICAgVGltZXN0YW1wIHRpbWVzdGFtcDsKLSAgLy8vICAgICAgdGltZXN0YW1w
LnNldF9zZWNvbmRzKHR2LnR2X3NlYyk7Ci0gIC8vLyAgICAgIHRpbWVzdGFtcC5zZXRfbmFub3Mo
dHYudHZfdXNlYyAqIDEwMDApOwotICAvLy8KLSAgLy8vICBFeGFtcGxlIDM6IENvbXB1dGUgVGlt
ZXN0YW1wIGZyb20gV2luMzIgYEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKClgLgotICAvLy8KLSAg
Ly8vICAgICAgRklMRVRJTUUgZnQ7Ci0gIC8vLyAgICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1l
KCZhbXA7ZnQpOwotICAvLy8gICAgICBVSU5UNjQgdGlja3MgPSAoKChVSU5UNjQpZnQuZHdIaWdo
RGF0ZVRpbWUpICZsdDsmbHQ7IDMyKSB8IGZ0LmR3TG93RGF0ZVRpbWU7Ci0gIC8vLwotICAvLy8g
ICAgICAvLyBBIFdpbmRvd3MgdGljayBpcyAxMDAgbmFub3NlY29uZHMuIFdpbmRvd3MgZXBvY2gg
MTYwMS0wMS0wMVQwMDowMDowMFoKLSAgLy8vICAgICAgLy8gaXMgMTE2NDQ0NzM2MDAgc2Vjb25k
cyBiZWZvcmUgVW5peCBlcG9jaCAxOTcwLTAxLTAxVDAwOjAwOjAwWi4KLSAgLy8vICAgICAgVGlt
ZXN0YW1wIHRpbWVzdGFtcDsKLSAgLy8vICAgICAgdGltZXN0YW1wLnNldF9zZWNvbmRzKChJTlQ2
NCkgKCh0aWNrcyAvIDEwMDAwMDAwKSAtIDExNjQ0NDczNjAwTEwpKTsKLSAgLy8vICAgICAgdGlt
ZXN0YW1wLnNldF9uYW5vcygoSU5UMzIpICgodGlja3MgJSAxMDAwMDAwMCkgKiAxMDApKTsKLSAg
Ly8vCi0gIC8vLyAgRXhhbXBsZSA0OiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIEphdmEgYFN5c3Rl
bS5jdXJyZW50VGltZU1pbGxpcygpYC4KLSAgLy8vCi0gIC8vLyAgICAgIGxvbmcgbWlsbGlzID0g
U3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gIC8vLwotICAvLy8gICAgICBUaW1lc3RhbXAg
dGltZXN0YW1wID0gVGltZXN0YW1wLm5ld0J1aWxkZXIoKS5zZXRTZWNvbmRzKG1pbGxpcyAvIDEw
MDApCi0gIC8vLyAgICAgICAgICAuc2V0TmFub3MoKGludCkgKChtaWxsaXMgJSAxMDAwKSAqIDEw
MDAwMDApKS5idWlsZCgpOwotICAvLy8KLSAgLy8vICBFeGFtcGxlIDU6IENvbXB1dGUgVGltZXN0
YW1wIGZyb20gY3VycmVudCB0aW1lIGluIFB5dGhvbi4KLSAgLy8vCi0gIC8vLyAgICAgIG5vdyA9
IHRpbWUudGltZSgpCi0gIC8vLyAgICAgIHNlY29uZHMgPSBpbnQobm93KQotICAvLy8gICAgICBu
YW5vcyA9IGludCgobm93IC0gc2Vjb25kcykgKiAxMCoqOSkKLSAgLy8vICAgICAgdGltZXN0YW1w
ID0gVGltZXN0YW1wKHNlY29uZHM9c2Vjb25kcywgbmFub3M9bmFub3MpCi0gIC8vLyA8L3N1bW1h
cnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0
cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBUaW1lc3RhbXAgOiBwYjo6
SU1lc3NhZ2U8VGltZXN0YW1wPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1l
c3NhZ2VQYXJzZXI8VGltZXN0YW1wPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPFRp
bWVzdGFtcD4oKCkgPT4gbmV3IFRpbWVzdGFtcCgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpN
ZXNzYWdlUGFyc2VyPFRpbWVzdGFtcD4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0g
fQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3Ig
ewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5
cGVzLlRpbWVzdGFtcFJlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMF07IH0KLSAg
ICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9y
IHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGlj
IFRpbWVzdGFtcCgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFy
dGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgVGltZXN0YW1wKFRpbWVz
dGFtcCBvdGhlcikgOiB0aGlzKCkgewotICAgICAgc2Vjb25kc18gPSBvdGhlci5zZWNvbmRzXzsK
LSAgICAgIG5hbm9zXyA9IG90aGVyLm5hbm9zXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVGltZXN0
YW1wIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBUaW1lc3RhbXAodGhpcyk7Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzZWNvbmRzIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBTZWNvbmRzRmllbGROdW1iZXIgPSAxOwot
ICAgIHByaXZhdGUgbG9uZyBzZWNvbmRzXzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBS
ZXByZXNlbnRzIHNlY29uZHMgb2YgVVRDIHRpbWUgc2luY2UgVW5peCBlcG9jaAotICAgIC8vLyAg
MTk3MC0wMS0wMVQwMDowMDowMFouIE11c3QgYmUgZnJvbSBmcm9tIDAwMDEtMDEtMDFUMDA6MDA6
MDBaIHRvCi0gICAgLy8vICA5OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuCi0gICAgLy8v
IDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgbG9uZyBTZWNvbmRzIHsKLSAgICAgIGdldCB7IHJldHVy
biBzZWNvbmRzXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgc2Vjb25kc18gPSB2YWx1ZTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm5h
bm9zIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBOYW5vc0ZpZWxkTnVt
YmVyID0gMjsKLSAgICBwcml2YXRlIGludCBuYW5vc187Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAg
IC8vLyAgTm9uLW5lZ2F0aXZlIGZyYWN0aW9ucyBvZiBhIHNlY29uZCBhdCBuYW5vc2Vjb25kIHJl
c29sdXRpb24uIE5lZ2F0aXZlCi0gICAgLy8vICBzZWNvbmQgdmFsdWVzIHdpdGggZnJhY3Rpb25z
IG11c3Qgc3RpbGwgaGF2ZSBub24tbmVnYXRpdmUgbmFub3MgdmFsdWVzCi0gICAgLy8vICB0aGF0
IGNvdW50IGZvcndhcmQgaW4gdGltZS4gTXVzdCBiZSBmcm9tIDAgdG8gOTk5LDk5OSw5OTkKLSAg
ICAvLy8gIGluY2x1c2l2ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBpbnQgTmFu
b3MgewotICAgICAgZ2V0IHsgcmV0dXJuIG5hbm9zXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAg
bmFub3NfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGJv
b2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIEVxdWFscyhvdGhlciBhcyBU
aW1lc3RhbXApOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhUaW1lc3RhbXAgb3Ro
ZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIs
IHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKFNlY29u
ZHMgIT0gb3RoZXIuU2Vjb25kcykgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE5hbm9zICE9IG90
aGVyLk5hbm9zKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAx
OwotICAgICAgaWYgKFNlY29uZHMgIT0gMEwpIGhhc2ggXj0gU2Vjb25kcy5HZXRIYXNoQ29kZSgp
OwotICAgICAgaWYgKE5hbm9zICE9IDApIGhhc2ggXj0gTmFub3MuR2V0SGFzaENvZGUoKTsKLSAg
ICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9T
dHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3Ry
aW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0
cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKFNlY29uZHMgIT0gMEwpIHsKLSAgICAgICAg
b3V0cHV0LldyaXRlUmF3VGFnKDgpOwotICAgICAgICBvdXRwdXQuV3JpdGVJbnQ2NChTZWNvbmRz
KTsKLSAgICAgIH0KLSAgICAgIGlmIChOYW5vcyAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZVJhd1RhZygxNik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUludDMyKE5hbm9zKTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6
ZSA9IDA7Ci0gICAgICBpZiAoU2Vjb25kcyAhPSAwTCkgewotICAgICAgICBzaXplICs9IDEgKyBw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDY0U2l6ZShTZWNvbmRzKTsKLSAgICAgIH0K
LSAgICAgIGlmIChOYW5vcyAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91
dHB1dFN0cmVhbS5Db21wdXRlSW50MzJTaXplKE5hbm9zKTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShUaW1lc3RhbXAgb3Ro
ZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLSAgICAgIGlmIChvdGhlci5TZWNvbmRzICE9IDBMKSB7Ci0gICAgICAgIFNlY29uZHMgPSBv
dGhlci5TZWNvbmRzOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLk5hbm9zICE9IDApIHsKLSAg
ICAgICAgTmFub3MgPSBvdGhlci5OYW5vczsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQg
dGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAg
ICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5T
a2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDg6IHsK
LSAgICAgICAgICAgIFNlY29uZHMgPSBpbnB1dC5SZWFkSW50NjQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE2OiB7Ci0gICAgICAgICAgICBOYW5v
cyA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAjZW5kcmVnaW9uCi0KLX0KLQot
I2VuZHJlZ2lvbiBEZXNpZ25lciBnZW5lcmF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3Jj
L0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBlcy9UaW1lc3RhbXBQYXJ0aWFsLmNzIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hh
cnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBlcy9UaW1lc3RhbXBQYXJ0aWFsLmNz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTQwMzQ3MzQyZjU2ZmE4MTYwMzc3ZjY4
NTY0Mzc1NzJiY2RjMmNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJvdG9idWYvV2VsbEtub3duVHlwZXMvVGltZXN0YW1w
UGFydGlhbC5jcworKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi3vu78jcmVnaW9uIENv
cHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uR2xvYmFsaXph
dGlvbjsKLXVzaW5nIFN5c3RlbS5UZXh0OwotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLldl
bGxLbm93blR5cGVzCi17Ci0gICAgcHVibGljIHBhcnRpYWwgY2xhc3MgVGltZXN0YW1wIDogSUN1
c3RvbURpYWdub3N0aWNNZXNzYWdlCi0gICAgewotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFk
b25seSBEYXRlVGltZSBVbml4RXBvY2ggPSBuZXcgRGF0ZVRpbWUoMTk3MCwgMSwgMSwgMCwgMCwg
MCwgRGF0ZVRpbWVLaW5kLlV0Yyk7Ci0gICAgICAgIC8vIENvbnN0YW50cyBkZXRlcm1pbmVkIHBy
b2dyYW1tYXRpY2FsbHksIGJ1dCB0aGVuIGhhcmQtY29kZWQgc28gdGhleSBjYW4gYmUgY29uc3Rh
bnQgZXhwcmVzc2lvbnMuCi0gICAgICAgIHByaXZhdGUgY29uc3QgbG9uZyBCY2xTZWNvbmRzQXRV
bml4RXBvY2ggPSA2MjEzNTU5NjgwMDsKLSAgICAgICAgaW50ZXJuYWwgY29uc3QgbG9uZyBVbml4
U2Vjb25kc0F0QmNsTWF4VmFsdWUgPSAyNTM0MDIzMDA3OTk7Ci0gICAgICAgIGludGVybmFsIGNv
bnN0IGxvbmcgVW5peFNlY29uZHNBdEJjbE1pblZhbHVlID0gLUJjbFNlY29uZHNBdFVuaXhFcG9j
aDsKLSAgICAgICAgaW50ZXJuYWwgY29uc3QgaW50IE1heE5hbm9zID0gRHVyYXRpb24uTmFub3Nl
Y29uZHNQZXJTZWNvbmQgLSAxOwotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2wgSXNOb3Jt
YWxpemVkKGxvbmcgc2Vjb25kcywgaW50IG5hbm9zZWNvbmRzKSA9PgotICAgICAgICAgICAgbmFu
b3NlY29uZHMgPj0gMCAmJgotICAgICAgICAgICAgbmFub3NlY29uZHMgPD0gTWF4TmFub3MgJiYK
LSAgICAgICAgICAgIHNlY29uZHMgPj0gVW5peFNlY29uZHNBdEJjbE1pblZhbHVlICYmCi0gICAg
ICAgICAgICBzZWNvbmRzIDw9IFVuaXhTZWNvbmRzQXRCY2xNYXhWYWx1ZTsKLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g
b25lIDxzZWUgY3JlZj0iVGltZXN0YW1wIi8+IGFuZCBhbm90aGVyLCBhcyBhIDxzZWUgY3JlZj0i
RHVyYXRpb24iLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0g
bmFtZT0ibGhzIj5UaGUgdGltZXN0YW1wIHRvIHN1YnRyYWN0IGZyb20uIE11c3Qgbm90IGJlIG51
bGwuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyaHMiPlRoZSB0aW1lc3RhbXAg
dG8gc3VidHJhY3QuIE11c3Qgbm90IGJlIG51bGwuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1
cm5zPlRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBzcGVjaWZpZWQgdGltZXN0YW1wcy48
L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRHVyYXRpb24gb3BlcmF0b3IgLShUaW1l
c3RhbXAgbGhzLCBUaW1lc3RhbXAgcmhzKQotICAgICAgICB7Ci0gICAgICAgICAgICBQcm90b1By
ZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKGxocywgImxocyIpOwotICAgICAgICAgICAgUHJvdG9Q
cmVjb25kaXRpb25zLkNoZWNrTm90TnVsbChyaHMsICJyaHMiKTsKLSAgICAgICAgICAgIGNoZWNr
ZWQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRHVyYXRpb24uTm9ybWFs
aXplKGxocy5TZWNvbmRzIC0gcmhzLlNlY29uZHMsIGxocy5OYW5vcyAtIHJocy5OYW5vcyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAg
IC8vLyBBZGRzIGEgPHNlZSBjcmVmPSJEdXJhdGlvbiIvPiB0byBhIDxzZWUgY3JlZj0iVGltZXN0
YW1wIi8+LCB0byBvYnRhaW4gYW5vdGhlciA8Yz5UaW1lc3RhbXA8L2M+LgotICAgICAgICAvLy8g
PC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImxocyI+VGhlIHRpbWVzdGFtcCB0
byBhZGQgdGhlIGR1cmF0aW9uIHRvLiBNdXN0IG5vdCBiZSBudWxsLjwvcGFyYW0+Ci0gICAgICAg
IC8vLyA8cGFyYW0gbmFtZT0icmhzIj5UaGUgZHVyYXRpb24gdG8gYWRkLiBNdXN0IG5vdCBiZSBu
dWxsLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVzdWx0IG9mIGFkZGluZyB0
aGUgZHVyYXRpb24gdG8gdGhlIHRpbWVzdGFtcC48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBz
dGF0aWMgVGltZXN0YW1wIG9wZXJhdG9yICsoVGltZXN0YW1wIGxocywgRHVyYXRpb24gcmhzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKGxo
cywgImxocyIpOwotICAgICAgICAgICAgUHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbChy
aHMsICJyaHMiKTsKLSAgICAgICAgICAgIGNoZWNrZWQKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gTm9ybWFsaXplKGxocy5TZWNvbmRzICsgcmhzLlNlY29uZHMsIGxocy5O
YW5vcyArIHJocy5OYW5vcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBTdWJ0cmFjdHMgYSA8c2VlIGNyZWY9IkR1cmF0aW9u
Ii8+IGZyb20gYSA8c2VlIGNyZWY9IlRpbWVzdGFtcCIvPiwgdG8gb2J0YWluIGFub3RoZXIgPGM+
VGltZXN0YW1wPC9jPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJh
bSBuYW1lPSJsaHMiPlRoZSB0aW1lc3RhbXAgdG8gc3VidHJhY3QgdGhlIGR1cmF0aW9uIGZyb20u
IE11c3Qgbm90IGJlIG51bGwuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyaHMi
PlRoZSBkdXJhdGlvbiB0byBzdWJ0cmFjdC48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+
VGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0aGUgZHVyYXRpb24gZnJvbSB0aGUgdGltZXN0YW1w
LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBUaW1lc3RhbXAgb3BlcmF0b3IgLShU
aW1lc3RhbXAgbGhzLCBEdXJhdGlvbiByaHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByb3Rv
UHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwobGhzLCAibGhzIik7Ci0gICAgICAgICAgICBQcm90
b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHJocywgInJocyIpOwotICAgICAgICAgICAgY2hl
Y2tlZAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBOb3JtYWxpemUobGhz
LlNlY29uZHMgLSByaHMuU2Vjb25kcywgbGhzLk5hbm9zIC0gcmhzLk5hbm9zKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENv
bnZlcnRzIHRoaXMgdGltZXN0YW1wIGludG8gYSA8c2VlIGNyZWY9IkRhdGVUaW1lIi8+LgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBU
aGUgcmVzdWx0aW5nIDxjPkRhdGVUaW1lPC9jPiB3aWxsIGFsd2F5cyBoYXZlIGEgPGM+S2luZDwv
Yz4gb2YgPGM+VXRjPC9jPi4KLSAgICAgICAgLy8vIElmIHRoZSB0aW1lc3RhbXAgaXMgbm90IGEg
cHJlY2lzZSBudW1iZXIgb2YgdGlja3MsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIHRvd2FyZHMgdGhl
IHN0YXJ0Ci0gICAgICAgIC8vLyBvZiB0aW1lLiBGb3IgZXhhbXBsZSwgYSB0aW1lc3RhbXAgd2l0
aCBhIDxzZWUgY3JlZj0iTmFub3MiLz4gdmFsdWUgb2YgOTkgd2lsbCByZXN1bHQgaW4gYQotICAg
ICAgICAvLy8gPHNlZSBjcmVmPSJEYXRlVGltZSIvPiB2YWx1ZSBwcmVjaXNlbHkgb24gYSBzZWNv
bmQuCi0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGlzIHRp
bWVzdGFtcCBhcyBhIDxjPkRhdGVUaW1lPC9jPi48L3JldHVybnM+Ci0gICAgICAgIC8vLyA8ZXhj
ZXB0aW9uIGNyZWY9IkludmFsaWRPcGVyYXRpb25FeGNlcHRpb24iPlRoZSB0aW1lc3RhbXAgY29u
dGFpbnMgaW52YWxpZCB2YWx1ZXM7IGVpdGhlciBpdCBpcwotICAgICAgICAvLy8gaW5jb3JyZWN0
bHkgbm9ybWFsaXplZCBvciBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZS48L2V4Y2VwdGlvbj4K
LSAgICAgICAgcHVibGljIERhdGVUaW1lIFRvRGF0ZVRpbWUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIUlzTm9ybWFsaXplZChTZWNvbmRzLCBOYW5vcykpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oQCJUaW1l
c3RhbXAgY29udGFpbnMgaW52YWxpZCB2YWx1ZXM6IFNlY29uZHM9e1NlY29uZHN9OyBOYW5vcz17
TmFub3N9Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gVW5peEVwb2NoLkFk
ZFNlY29uZHMoU2Vjb25kcykuQWRkVGlja3MoTmFub3MgLyBEdXJhdGlvbi5OYW5vc2Vjb25kc1Bl
clRpY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8g
Q29udmVydHMgdGhpcyB0aW1lc3RhbXAgaW50byBhIDxzZWUgY3JlZj0iRGF0ZVRpbWVPZmZzZXQi
Lz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVtYXJrcz4KLSAgICAg
ICAgLy8vIFRoZSByZXN1bHRpbmcgPGM+RGF0ZVRpbWVPZmZzZXQ8L2M+IHdpbGwgYWx3YXlzIGhh
dmUgYW4gPGM+T2Zmc2V0PC9jPiBvZiB6ZXJvLgotICAgICAgICAvLy8gSWYgdGhlIHRpbWVzdGFt
cCBpcyBub3QgYSBwcmVjaXNlIG51bWJlciBvZiB0aWNrcywgaXQgd2lsbCBiZSB0cnVuY2F0ZWQg
dG93YXJkcyB0aGUgc3RhcnQKLSAgICAgICAgLy8vIG9mIHRpbWUuIEZvciBleGFtcGxlLCBhIHRp
bWVzdGFtcCB3aXRoIGEgPHNlZSBjcmVmPSJOYW5vcyIvPiB2YWx1ZSBvZiA5OSB3aWxsIHJlc3Vs
dCBpbiBhCi0gICAgICAgIC8vLyA8c2VlIGNyZWY9IkRhdGVUaW1lT2Zmc2V0Ii8+IHZhbHVlIHBy
ZWNpc2VseSBvbiBhIHNlY29uZC4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgLy8v
IDxyZXR1cm5zPlRoaXMgdGltZXN0YW1wIGFzIGEgPGM+RGF0ZVRpbWVPZmZzZXQ8L2M+LjwvcmV0
dXJucz4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iSW52YWxpZE9wZXJhdGlvbkV4Y2Vw
dGlvbiI+VGhlIHRpbWVzdGFtcCBjb250YWlucyBpbnZhbGlkIHZhbHVlczsgZWl0aGVyIGl0IGlz
Ci0gICAgICAgIC8vLyBpbmNvcnJlY3RseSBub3JtYWxpemVkIG9yIGlzIG91dHNpZGUgdGhlIHZh
bGlkIHJhbmdlLjwvZXhjZXB0aW9uPgotICAgICAgICBwdWJsaWMgRGF0ZVRpbWVPZmZzZXQgVG9E
YXRlVGltZU9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVRp
bWVPZmZzZXQoVG9EYXRlVGltZSgpLCBUaW1lU3Bhbi5aZXJvKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgPHNl
ZSBjcmVmPSJEYXRlVGltZSIvPiB0byBhIDxzZWUgY3JlZj0iVGltZXN0YW1wIi8+LgotICAgICAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGVUaW1lIj48L3Bh
cmFtPgotICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcmd1bWVudEV4Y2VwdGlvbiI+VGhl
IDxjPktpbmQ8L2M+IG9mIDxwYXJhbXJlZiBuYW1lPSJkYXRlVGltZSIvPiBpcyBub3QgPGM+RGF0
ZVRpbWVLaW5kLlV0YzwvYz4uPC9leGNlcHRpb24+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUg
Y29udmVydGVkIHRpbWVzdGFtcC48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgVGlt
ZXN0YW1wIEZyb21EYXRlVGltZShEYXRlVGltZSBkYXRlVGltZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGRhdGVUaW1lLktpbmQgIT0gRGF0ZVRpbWVLaW5kLlV0YykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oIkNvbnZlcnNp
b24gZnJvbSBEYXRlVGltZSB0byBUaW1lc3RhbXAgcmVxdWlyZXMgdGhlIERhdGVUaW1lIGtpbmQg
dG8gYmUgVXRjIiwgImRhdGVUaW1lIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBE
byB0aGUgYXJpdGhtZXRpYyB1c2luZyBEYXRlVGltZS5UaWNrcywgd2hpY2ggaXMgYWx3YXlzIG5v
bi1uZWdhdGl2ZSwgbWFraW5nIHRoaW5ncyBzaW1wbGVyLgotICAgICAgICAgICAgbG9uZyBzZWNv
bmRzU2luY2VCY2xFcG9jaCA9IGRhdGVUaW1lLlRpY2tzIC8gVGltZVNwYW4uVGlja3NQZXJTZWNv
bmQ7Ci0gICAgICAgICAgICBpbnQgbmFub3NlY29uZHMgPSAoaW50KSAgKGRhdGVUaW1lLlRpY2tz
ICUgVGltZVNwYW4uVGlja3NQZXJTZWNvbmQpICogRHVyYXRpb24uTmFub3NlY29uZHNQZXJUaWNr
OwotICAgICAgICAgICAgcmV0dXJuIG5ldyBUaW1lc3RhbXAgeyBTZWNvbmRzID0gc2Vjb25kc1Np
bmNlQmNsRXBvY2ggLSBCY2xTZWNvbmRzQXRVbml4RXBvY2gsIE5hbm9zID0gbmFub3NlY29uZHMg
fTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbnZl
cnRzIHRoZSBnaXZlbiA8c2VlIGNyZWY9IkRhdGVUaW1lT2Zmc2V0Ii8+IHRvIGEgPHNlZSBjcmVm
PSJUaW1lc3RhbXAiLz4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZW1h
cmtzPlRoZSBvZmZzZXQgaXMgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIHdoZW4gY29udmVydGlu
ZyB0aGUgdmFsdWUgKHNvIHRoZSBzYW1lIGluc3RhbnQgaW4gdGltZQotICAgICAgICAvLy8gaXMg
cmVwcmVzZW50ZWQpIGJ1dCBpcyBub3QgYSBzZXBhcmF0ZSBwYXJ0IG9mIHRoZSByZXN1bHRpbmcg
dmFsdWUuIEluIG90aGVyIHdvcmRzLCB0aGVyZSBpcyBubwotICAgICAgICAvLy8gcm91bmR0cmlw
IG9wZXJhdGlvbiB0byByZXRyaWV2ZSB0aGUgb3JpZ2luYWwgPGM+RGF0ZVRpbWVPZmZzZXQ8L2M+
LjwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkYXRlVGltZU9mZnNldCI+VGhl
IGRhdGUgYW5kIHRpbWUgKHdpdGggVVRDIG9mZnNldCkgdG8gY29udmVydCB0byBhIHRpbWVzdGFt
cC48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIGNvbnZlcnRlZCB0aW1lc3RhbXAu
PC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIFRpbWVzdGFtcCBGcm9tRGF0ZVRpbWVP
ZmZzZXQoRGF0ZVRpbWVPZmZzZXQgZGF0ZVRpbWVPZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpcyBoYXZpbmcgbmVnYXRpdmUg
dGlja3M6IERhdGVUaW1lT2Zmc2V0IGlzIGNvbnN0cmFpbmVkIHRvIGhhbmRsZQotICAgICAgICAg
ICAgLy8gdmFsdWVzIHdob3NlICpVVEMqIHZhbHVlIGlzIGluIHRoZSByYW5nZSBvZiBEYXRlVGlt
ZS4KLSAgICAgICAgICAgIHJldHVybiBGcm9tRGF0ZVRpbWUoZGF0ZVRpbWVPZmZzZXQuVXRjRGF0
ZVRpbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIFRpbWVzdGFtcCBO
b3JtYWxpemUobG9uZyBzZWNvbmRzLCBpbnQgbmFub3NlY29uZHMpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGludCBleHRyYVNlY29uZHMgPSBuYW5vc2Vjb25kcyAvIER1cmF0aW9uLk5hbm9zZWNv
bmRzUGVyU2Vjb25kOwotICAgICAgICAgICAgc2Vjb25kcyArPSBleHRyYVNlY29uZHM7Ci0gICAg
ICAgICAgICBuYW5vc2Vjb25kcyAtPSBleHRyYVNlY29uZHMgKiBEdXJhdGlvbi5OYW5vc2Vjb25k
c1BlclNlY29uZDsKLQotICAgICAgICAgICAgaWYgKG5hbm9zZWNvbmRzIDwgMCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBuYW5vc2Vjb25kcyArPSBEdXJhdGlvbi5OYW5vc2Vjb25k
c1BlclNlY29uZDsKLSAgICAgICAgICAgICAgICBzZWNvbmRzLS07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IFRpbWVzdGFtcCB7IFNlY29uZHMgPSBzZWNvbmRzLCBOYW5v
cyA9IG5hbm9zZWNvbmRzIH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0g
ICAgICAgIC8vLyBDb252ZXJ0cyBhIHRpbWVzdGFtcCBzcGVjaWZpZWQgaW4gc2Vjb25kcy9uYW5v
c2Vjb25kcyB0byBhIHN0cmluZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8v
IDxyZW1hcmtzPgotICAgICAgICAvLy8gSWYgdGhlIHZhbHVlIGlzIGEgbm9ybWFsaXplZCBkdXJh
dGlvbiBpbiB0aGUgcmFuZ2UgZGVzY3JpYmVkIGluIDxjPnRpbWVzdGFtcC5wcm90bzwvYz4sCi0g
ICAgICAgIC8vLyA8cGFyYW1yZWYgbmFtZT0iZGlhZ25vc3RpY09ubHkiLz4gaXMgaWdub3JlZC4g
T3RoZXJ3aXNlLCBpZiB0aGUgcGFyYW1ldGVyIGlzIDxjPnRydWU8L2M+LAotICAgICAgICAvLy8g
YSBKU09OIG9iamVjdCB3aXRoIGEgd2FybmluZyBpcyByZXR1cm5lZDsgaWYgaXQgaXMgPGM+ZmFs
c2U8L2M+LCBhbiA8c2VlIGNyZWY9IkludmFsaWRPcGVyYXRpb25FeGNlcHRpb24iLz4gaXMgdGhy
b3duLgotICAgICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InNl
Y29uZHMiPlNlY29uZHMgcG9ydGlvbiBvZiB0aGUgZHVyYXRpb24uPC9wYXJhbT4KLSAgICAgICAg
Ly8vIDxwYXJhbSBuYW1lPSJuYW5vc2Vjb25kcyI+TmFub3NlY29uZHMgcG9ydGlvbiBvZiB0aGUg
ZHVyYXRpb24uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkaWFnbm9zdGljT25s
eSI+RGV0ZXJtaW5lcyB0aGUgaGFuZGxpbmcgb2Ygbm9uLW5vcm1hbGl6ZWQgdmFsdWVzPC9wYXJh
bT4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlv
biI+VGhlIHJlcHJlc2VudGVkIGR1cmF0aW9uIGlzIGludmFsaWQsIGFuZCA8cGFyYW1yZWYgbmFt
ZT0iZGlhZ25vc3RpY09ubHkiLz4gaXMgPGM+ZmFsc2U8L2M+LjwvZXhjZXB0aW9uPgotICAgICAg
ICBpbnRlcm5hbCBzdGF0aWMgc3RyaW5nIFRvSnNvbihsb25nIHNlY29uZHMsIGludCBuYW5vc2Vj
b25kcywgYm9vbCBkaWFnbm9zdGljT25seSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKElz
Tm9ybWFsaXplZChzZWNvbmRzLCBuYW5vc2Vjb25kcykpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgLy8gVXNlIC5ORVQncyBmb3JtYXR0aW5nIGZvciB0aGUgdmFsdWUgZG93biB0byB0
aGUgc2Vjb25kLCBpbmNsdWRpbmcgYW4gb3BlbmluZyBkb3VibGUgcXVvdGUgKGFzIGl0J3MgYSBz
dHJpbmcgdmFsdWUpCi0gICAgICAgICAgICAgICAgRGF0ZVRpbWUgZGF0ZVRpbWUgPSBVbml4RXBv
Y2guQWRkU2Vjb25kcyhzZWNvbmRzKTsKLSAgICAgICAgICAgICAgICB2YXIgYnVpbGRlciA9IG5l
dyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5BcHBlbmQoJyInKTsK
LSAgICAgICAgICAgICAgICBidWlsZGVyLkFwcGVuZChkYXRlVGltZS5Ub1N0cmluZygieXl5eSct
J01NJy0nZGQnVCdISDptbTpzcyIsIEN1bHR1cmVJbmZvLkludmFyaWFudEN1bHR1cmUpKTsKLSAg
ICAgICAgICAgICAgICBEdXJhdGlvbi5BcHBlbmROYW5vc2Vjb25kcyhidWlsZGVyLCBuYW5vc2Vj
b25kcyk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5BcHBlbmQoIlpcIiIpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBidWlsZGVyLlRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoZGlhZ25vc3RpY09ubHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHN0cmluZy5Gb3JtYXQoQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSwKLSAgICAg
ICAgICAgICAgICAgICAgInt7IFwiQHdhcm5pbmdcIjogXCJJbnZhbGlkIFRpbWVzdGFtcFwiLCBc
InNlY29uZHNcIjogXCJ7MH1cIiwgXCJuYW5vc1wiOiB7MX0gfX0iLAotICAgICAgICAgICAgICAg
ICAgICBzZWNvbmRzLAotICAgICAgICAgICAgICAgICAgICBuYW5vc2Vjb25kcyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIk5vbi1ub3JtYWxpemVkIHRpbWVz
dGFtcCB2YWx1ZSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxz
dW1tYXJ5PgotICAgICAgICAvLy8gUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0
aGlzIDxzZWUgY3JlZj0iVGltZXN0YW1wIi8+IGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLgotICAg
ICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyBO
b3JtYWxseSB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSBhIEpTT04gc3RyaW5nIHZhbHVlIChp
bmNsdWRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgcXVvdGVzKSBidXQKLSAgICAgICAgLy8vIHdo
ZW4gdGhlIHZhbHVlIGlzIG5vbi1ub3JtYWxpemVkIG9yIG91dCBvZiByYW5nZSwgYSBKU09OIG9i
amVjdCByZXByZXNlbnRhdGlvbiB3aWxsIGJlIHJldHVybmVkCi0gICAgICAgIC8vLyBpbnN0ZWFk
LCBpbmNsdWRpbmcgYSB3YXJuaW5nLiBUaGlzIGlzIHRvIGF2b2lkIGV4Y2VwdGlvbnMgYmVpbmcg
dGhyb3duIHdoZW4gdHJ5aW5nIHRvCi0gICAgICAgIC8vLyBkaWFnbm9zZSBwcm9ibGVtcyAtIHRo
ZSByZWd1bGFyIEpTT04gZm9ybWF0dGVyIHdpbGwgc3RpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGZv
ciBub24tbm9ybWFsaXplZAotICAgICAgICAvLy8gdmFsdWVzLgotICAgICAgICAvLy8gPC9yZW1h
cmtzPgotICAgICAgICAvLy8gPHJldHVybnM+QSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhp
cyB2YWx1ZS48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdHJpbmcgVG9EaWFnbm9zdGljU3Ry
aW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFRvSnNvbihTZWNvbmRzLCBOYW5v
cywgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29v
Z2xlLlByb3RvYnVmL1dlbGxLbm93blR5cGVzL1R5cGUuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlBy
b3RvYnVmL1dlbGxLbm93blR5cGVzL1R5cGUuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDY1N2MyNDY0NWIzNzZkYzBkODBhMGJkYTQyOTczNDg5YWVmZjZkMmIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90
b2J1Zi9XZWxsS25vd25UeXBlcy9UeXBlLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTM0NyArMCww
IEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5P
VCBFRElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90bwotI3ByYWdtYSB3
YXJuaW5nIGRpc2FibGUgMTU5MSwgMDYxMiwgMzAyMQotI3JlZ2lvbiBEZXNpZ25lciBnZW5lcmF0
ZWQgY29kZQotCi11c2luZyBwYiA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmOwotdXNpbmcgcGJj
ID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuQ29sbGVjdGlvbnM7Ci11c2luZyBwYnIgPSBnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uOwotdXNpbmcgc2NnID0gZ2xvYmFsOjpTeXN0
ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYuV2VsbEtu
b3duVHlwZXMgewotCi0gIC8vLyA8c3VtbWFyeT5Ib2xkZXIgZm9yIHJlZmxlY3Rpb24gaW5mb3Jt
YXRpb24gZ2VuZXJhdGVkIGZyb20gZ29vZ2xlL3Byb3RvYnVmL3R5cGUucHJvdG88L3N1bW1hcnk+
Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmli
dXRlKCldCi0gIHB1YmxpYyBzdGF0aWMgcGFydGlhbCBjbGFzcyBUeXBlUmVmbGVjdGlvbiB7Ci0K
LSAgICAjcmVnaW9uIERlc2NyaXB0b3IKLSAgICAvLy8gPHN1bW1hcnk+RmlsZSBkZXNjcmlwdG9y
IGZvciBnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90bzwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3Rh
dGljIHBicjo6RmlsZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4g
ZGVzY3JpcHRvcjsgfQotICAgIH0KLSAgICBwcml2YXRlIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlw
dG9yIGRlc2NyaXB0b3I7Ci0KLSAgICBzdGF0aWMgVHlwZVJlZmxlY3Rpb24oKSB7Ci0gICAgICBi
eXRlW10gZGVzY3JpcHRvckRhdGEgPSBnbG9iYWw6OlN5c3RlbS5Db252ZXJ0LkZyb21CYXNlNjRT
dHJpbmcoCi0gICAgICAgICAgc3RyaW5nLkNvbmNhdCgKLSAgICAgICAgICAgICJDaHBuYjI5bmJH
VXZjSEp2ZEc5aWRXWXZkSGx3WlM1d2NtOTBieElQWjI5dloyeGxMbkJ5YjNSdlluVm0iLAotICAg
ICAgICAgICAgIkdobG5iMjluYkdVdmNISnZkRzlpZFdZdllXNTVMbkJ5YjNSdkdpUm5iMjluYkdV
dmNISnZkRzlpZFdZdiIsCi0gICAgICAgICAgICAiYzI5MWNtTmxYMk52Ym5SbGVIUXVjSEp2ZEc4
aTF3RUtCRlI1Y0dVU0RBb0VibUZ0WlJnQklBRW9DUkltIiwKLSAgICAgICAgICAgICJDZ1ptYVdW
c1pITVlBaUFES0FzeUZpNW5iMjluYkdVdWNISnZkRzlpZFdZdVJtbGxiR1FTRGdvR2IyNWwiLAot
ICAgICAgICAgICAgImIyWnpHQU1nQXlnSkVpZ0tCMjl3ZEdsdmJuTVlCQ0FES0FzeUZ5NW5iMjlu
YkdVdWNISnZkRzlpZFdZdSIsCi0gICAgICAgICAgICAiVDNCMGFXOXVFallLRG5OdmRYSmpaVjlq
YjI1MFpYaDBHQVVnQVNnTE1oNHVaMjl2WjJ4bExuQnliM1J2IiwKLSAgICAgICAgICAgICJZblZt
TGxOdmRYSmpaVU52Ym5SbGVIUVNKd29HYzNsdWRHRjRHQVlnQVNnT01oY3VaMjl2WjJ4bExuQnki
LAotICAgICAgICAgICAgImIzUnZZblZtTGxONWJuUmhlQ0xWQlFvRlJtbGxiR1FTS1FvRWEybHVa
QmdCSUFFb0RqSWJMbWR2YjJkcyIsCi0gICAgICAgICAgICAiWlM1d2NtOTBiMkoxWmk1R2FXVnNa
QzVMYVc1a0VqY0tDMk5oY21ScGJtRnNhWFI1R0FJZ0FTZ09NaUl1IiwKLSAgICAgICAgICAgICJa
Mjl2WjJ4bExuQnliM1J2WW5WbUxrWnBaV3hrTGtOaGNtUnBibUZzYVhSNUVnNEtCbTUxYldKbGNo
Z0QiLAotICAgICAgICAgICAgIklBRW9CUklNQ2dSdVlXMWxHQVFnQVNnSkVoQUtDSFI1Y0dWZmRY
SnNHQVlnQVNnSkVoTUtDMjl1Wlc5bSIsCi0gICAgICAgICAgICAiWDJsdVpHVjRHQWNnQVNnRkVn
NEtCbkJoWTJ0bFpCZ0lJQUVvQ0JJb0NnZHZjSFJwYjI1ekdBa2dBeWdMIiwKLSAgICAgICAgICAg
ICJNaGN1WjI5dloyeGxMbkJ5YjNSdlluVm1Mazl3ZEdsdmJoSVJDZ2xxYzI5dVgyNWhiV1VZQ2lB
QktBa1MiLAotICAgICAgICAgICAgIkZRb05aR1ZtWVhWc2RGOTJZV3gxWlJnTElBRW9DU0xJQWdv
RVMybHVaQklRQ2d4VVdWQkZYMVZPUzA1UCIsCi0gICAgICAgICAgICAiVjA0UUFCSVBDZ3RVV1ZC
RlgwUlBWVUpNUlJBQkVnNEtDbFJaVUVWZlJreFBRVlFRQWhJT0NncFVXVkJGIiwKLSAgICAgICAg
ICAgICJYMGxPVkRZMEVBTVNEd29MVkZsUVJWOVZTVTVVTmpRUUJCSU9DZ3BVV1ZCRlgwbE9WRE15
RUFVU0VBb00iLAotICAgICAgICAgICAgIlZGbFFSVjlHU1ZoRlJEWTBFQVlTRUFvTVZGbFFSVjlH
U1ZoRlJETXlFQWNTRFFvSlZGbFFSVjlDVDA5TSIsCi0gICAgICAgICAgICAiRUFnU0R3b0xWRmxR
UlY5VFZGSkpUa2NRQ1JJT0NncFVXVkJGWDBkU1QxVlFFQW9TRUFvTVZGbFFSVjlOIiwKLSAgICAg
ICAgICAgICJSVk5UUVVkRkVBc1NEZ29LVkZsUVJWOUNXVlJGVXhBTUVnOEtDMVJaVUVWZlZVbE9W
RE15RUEwU0RRb0oiLAotICAgICAgICAgICAgIlZGbFFSVjlGVGxWTkVBNFNFUW9OVkZsUVJWOVRS
a2xZUlVRek1oQVBFaEVLRFZSWlVFVmZVMFpKV0VWRSIsCi0gICAgICAgICAgICAiTmpRUUVCSVBD
Z3RVV1ZCRlgxTkpUbFF6TWhBUkVnOEtDMVJaVUVWZlUwbE9WRFkwRUJJaWRBb0xRMkZ5IiwKLSAg
ICAgICAgICAgICJaR2x1WVd4cGRIa1NGd29UUTBGU1JFbE9RVXhKVkZsZlZVNUxUazlYVGhBQUVo
Z0tGRU5CVWtSSlRrRk0iLAotICAgICAgICAgICAgIlNWUlpYMDlRVkVsUFRrRk1FQUVTR0FvVVEw
RlNSRWxPUVV4SlZGbGZVa1ZSVlVsU1JVUVFBaElZQ2hSRCIsCi0gICAgICAgICAgICAiUVZKRVNV
NUJURWxVV1Y5U1JWQkZRVlJGUkJBRElzNEJDZ1JGYm5WdEVnd0tCRzVoYldVWUFTQUJLQWtTIiwK
LSAgICAgICAgICAgICJMUW9KWlc1MWJYWmhiSFZsR0FJZ0F5Z0xNaG91WjI5dloyeGxMbkJ5YjNS
dlluVm1Ma1Z1ZFcxV1lXeDEiLAotICAgICAgICAgICAgIlpSSW9DZ2R2Y0hScGIyNXpHQU1nQXln
TE1oY3VaMjl2WjJ4bExuQnliM1J2WW5WbUxrOXdkR2x2YmhJMiIsCi0gICAgICAgICAgICAiQ2c1
emIzVnlZMlZmWTI5dWRHVjRkQmdFSUFFb0N6SWVMbWR2YjJkc1pTNXdjbTkwYjJKMVppNVRiM1Z5
IiwKLSAgICAgICAgICAgICJZMlZEYjI1MFpYaDBFaWNLQm5ONWJuUmhlQmdGSUFFb0RqSVhMbWR2
YjJkc1pTNXdjbTkwYjJKMVppNVQiLAotICAgICAgICAgICAgImVXNTBZWGdpVXdvSlJXNTFiVlpo
YkhWbEVnd0tCRzVoYldVWUFTQUJLQWtTRGdvR2JuVnRZbVZ5R0FJZyIsCi0gICAgICAgICAgICAi
QVNnRkVpZ0tCMjl3ZEdsdmJuTVlBeUFES0FzeUZ5NW5iMjluYkdVdWNISnZkRzlpZFdZdVQzQjBh
Vzl1IiwKLSAgICAgICAgICAgICJJanNLQms5d2RHbHZiaElNQ2dSdVlXMWxHQUVnQVNnSkVpTUtC
WFpoYkhWbEdBSWdBU2dMTWhRdVoyOXYiLAotICAgICAgICAgICAgIloyeGxMbkJ5YjNSdlluVm1M
a0Z1ZVNvdUNnWlRlVzUwWVhnU0VRb05VMWxPVkVGWVgxQlNUMVJQTWhBQSIsCi0gICAgICAgICAg
ICAiRWhFS0RWTlpUbFJCV0Y5UVVrOVVUek1RQVVKTUNoTmpiMjB1WjI5dloyeGxMbkJ5YjNSdllu
Vm1RZ2xVIiwKLSAgICAgICAgICAgICJlWEJsVUhKdmRHOVFBYUFCQWFJQ0EwZFFRcW9DSGtkdmIy
ZHNaUzVRY205MGIySjFaaTVYWld4c1MyNXYiLAotICAgICAgICAgICAgImQyNVVlWEJsYzJJR2NI
SnZkRzh6IikpOwotICAgICAgZGVzY3JpcHRvciA9IHBicjo6RmlsZURlc2NyaXB0b3IuRnJvbUdl
bmVyYXRlZENvZGUoZGVzY3JpcHRvckRhdGEsCi0gICAgICAgICAgbmV3IHBicjo6RmlsZURlc2Ny
aXB0b3JbXSB7IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFueVJlZmxl
Y3Rpb24uRGVzY3JpcHRvciwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
U291cmNlQ29udGV4dFJlZmxlY3Rpb24uRGVzY3JpcHRvciwgfSwKLSAgICAgICAgICBuZXcgcGJy
OjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyhuZXdbXSB7dHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLldlbGxLbm93blR5cGVzLlN5bnRheCksIH0sIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJ
bmZvW10gewotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9m
KGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlR5cGUpLCBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5UeXBlLlBhcnNlciwgbmV3W117ICJOYW1lIiwg
IkZpZWxkcyIsICJPbmVvZnMiLCAiT3B0aW9ucyIsICJTb3VyY2VDb250ZXh0IiwgIlN5bnRheCIg
fSwgbnVsbCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJU
eXBlSW5mbyh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRmll
bGQpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZC5QYXJzZXIs
IG5ld1tdeyAiS2luZCIsICJDYXJkaW5hbGl0eSIsICJOdW1iZXIiLCAiTmFtZSIsICJUeXBlVXJs
IiwgIk9uZW9mSW5kZXgiLCAiUGFja2VkIiwgIk9wdGlvbnMiLCAiSnNvbk5hbWUiLCAiRGVmYXVs
dFZhbHVlIiB9LCBudWxsLCBuZXdbXXsgdHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldl
bGxLbm93blR5cGVzLkZpZWxkLlR5cGVzLktpbmQpLCB0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuRmllbGQuVHlwZXMuQ2FyZGluYWxpdHkpIH0sIG51bGwpLAot
ICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkVudW0pLCBnbG9iYWw6Okdvb2dsZS5Qcm90
b2J1Zi5XZWxsS25vd25UeXBlcy5FbnVtLlBhcnNlciwgbmV3W117ICJOYW1lIiwgIkVudW12YWx1
ZSIsICJPcHRpb25zIiwgIlNvdXJjZUNvbnRleHQiLCAiU3ludGF4IiB9LCBudWxsLCBudWxsLCBu
dWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5FbnVtVmFsdWUpLCBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5FbnVtVmFsdWUuUGFyc2VyLCBuZXdbXXsg
Ik5hbWUiLCAiTnVtYmVyIiwgIk9wdGlvbnMiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAg
ICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLk9wdGlvbiksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LldlbGxLbm93blR5cGVzLk9wdGlvbi5QYXJzZXIsIG5ld1tdeyAiTmFtZSIsICJWYWx1ZSIgfSwg
bnVsbCwgbnVsbCwgbnVsbCkKLSAgICAgICAgICB9KSk7Ci0gICAgfQotICAgICNlbmRyZWdpb24K
LQotICB9Ci0gICNyZWdpb24gRW51bXMKLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIFRoZSBzeW50
YXggaW4gd2hpY2ggYSBwcm90b2NvbCBidWZmZXIgZWxlbWVudCBpcyBkZWZpbmVkLgotICAvLy8g
PC9zdW1tYXJ5PgotICBwdWJsaWMgZW51bSBTeW50YXggewotICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAvLy8gIFN5bnRheCBgcHJvdG8yYC4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIFtwYnI6Ok9y
aWdpbmFsTmFtZSgiU1lOVEFYX1BST1RPMiIpXSBQcm90bzIgPSAwLAotICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAvLy8gIFN5bnRheCBgcHJvdG8zYC4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIFtw
YnI6Ok9yaWdpbmFsTmFtZSgiU1lOVEFYX1BST1RPMyIpXSBQcm90bzMgPSAxLAotICB9Ci0KLSAg
I2VuZHJlZ2lvbgotCi0gICNyZWdpb24gTWVzc2FnZXMKLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8g
IEEgcHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2UgdHlwZS4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2ds
b2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0K
LSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIFR5cGUgOiBwYjo6SU1lc3NhZ2U8VHlwZT4g
ewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPFR5cGU+IF9w
YXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8VHlwZT4oKCkgPT4gbmV3IFR5cGUoKSk7Ci0g
ICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxUeXBlPiBQYXJzZXIgeyBnZXQgeyBy
ZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2Ny
aXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuVHlwZVJlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlw
ZXNbMF07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2Fn
ZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQot
Ci0gICAgcHVibGljIFR5cGUoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQot
ICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIFR5cGUoVHlw
ZSBvdGhlcikgOiB0aGlzKCkgewotICAgICAgbmFtZV8gPSBvdGhlci5uYW1lXzsKLSAgICAgIGZp
ZWxkc18gPSBvdGhlci5maWVsZHNfLkNsb25lKCk7Ci0gICAgICBvbmVvZnNfID0gb3RoZXIub25l
b2ZzXy5DbG9uZSgpOwotICAgICAgb3B0aW9uc18gPSBvdGhlci5vcHRpb25zXy5DbG9uZSgpOwot
ICAgICAgU291cmNlQ29udGV4dCA9IG90aGVyLnNvdXJjZUNvbnRleHRfICE9IG51bGwgPyBvdGhl
ci5Tb3VyY2VDb250ZXh0LkNsb25lKCkgOiBudWxsOwotICAgICAgc3ludGF4XyA9IG90aGVyLnN5
bnRheF87Ci0gICAgfQotCi0gICAgcHVibGljIFR5cGUgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4g
bmV3IFR5cGUodGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBm
b3IgdGhlICJuYW1lIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBOYW1l
RmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgc3RyaW5nIG5hbWVfID0gIiI7Ci0gICAgLy8v
IDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIGZ1bGx5IHF1YWxpZmllZCBtZXNzYWdlIG5hbWUuCi0g
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RyaW5nIE5hbWUgewotICAgICAgZ2V0IHsg
cmV0dXJuIG5hbWVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBuYW1lXyA9IHBiOjpQcm90b1By
ZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgImZpZWxkcyIgZmllbGQu
PC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgRmllbGRzRmllbGROdW1iZXIgPSAyOwot
ICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLkZpZWxkPiBfcmVwZWF0ZWRfZmllbGRzX2NvZGVjCi0g
ICAgICAgID0gcGI6OkZpZWxkQ29kZWMuRm9yTWVzc2FnZSgxOCwgZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuRmllbGQuUGFyc2VyKTsKLSAgICBwcml2YXRlIHJlYWRvbmx5
IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5GaWVsZD4gZmllbGRzXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUu
UHJvdG9idWYuV2VsbEtub3duVHlwZXMuRmllbGQ+KCk7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAg
IC8vLyAgVGhlIGxpc3Qgb2YgZmllbGRzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGlj
IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5GaWVsZD4gRmllbGRzIHsKLSAgICAgIGdldCB7IHJldHVybiBmaWVsZHNfOyB9Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJvbmVvZnMiIGZpZWxkLjwv
c3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9uZW9mc0ZpZWxkTnVtYmVyID0gMzsKLSAg
ICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxzdHJpbmc+IF9yZXBlYXRl
ZF9vbmVvZnNfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JTdHJpbmcoMjYpOwot
ICAgIHByaXZhdGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPHN0cmluZz4gb25lb2ZzXyA9
IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8c3RyaW5nPigpOwotICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAvLy8gIFRoZSBsaXN0IG9mIHR5cGVzIGFwcGVhcmluZyBpbiBgb25lb2ZgIGRlZmluaXRpb25z
IGluIHRoaXMgdHlwZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBwYmM6OlJlcGVh
dGVkRmllbGQ8c3RyaW5nPiBPbmVvZnMgewotICAgICAgZ2V0IHsgcmV0dXJuIG9uZW9mc187IH0K
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlvbnMi
IGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9wdGlvbnNGaWVsZE51bWJl
ciA9IDQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuT3B0aW9uPiBfcmVwZWF0ZWRfb3B0aW9u
c19jb2RlYwotICAgICAgICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMzQsIGdsb2JhbDo6
R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLk9wdGlvbi5QYXJzZXIpOwotICAgIHByaXZh
dGUgcmVhZG9ubHkgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldl
bGxLbm93blR5cGVzLk9wdGlvbj4gb3B0aW9uc18gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGds
b2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLk9wdGlvbj4oKTsKLSAgICAvLy8g
PHN1bW1hcnk+Ci0gICAgLy8vICBUaGUgcHJvdG9jb2wgYnVmZmVyIG9wdGlvbnMuCi0gICAgLy8v
IDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLk9wdGlvbj4gT3B0aW9ucyB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gb3B0aW9uc187IH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVy
IGZvciB0aGUgInNvdXJjZV9jb250ZXh0IiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBTb3VyY2VDb250ZXh0RmllbGROdW1iZXIgPSA1OwotICAgIHByaXZhdGUgZ2xvYmFs
OjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU291cmNlQ29udGV4dCBzb3VyY2VDb250
ZXh0XzsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBUaGUgc291cmNlIGNvbnRleHQuCi0g
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2Vs
bEtub3duVHlwZXMuU291cmNlQ29udGV4dCBTb3VyY2VDb250ZXh0IHsKLSAgICAgIGdldCB7IHJl
dHVybiBzb3VyY2VDb250ZXh0XzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgc291cmNlQ29udGV4
dF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgInN5bnRheCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBp
bnQgU3ludGF4RmllbGROdW1iZXIgPSA2OwotICAgIHByaXZhdGUgZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuU3ludGF4IHN5bnRheF8gPSAwOwotICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAvLy8gIFRoZSBzb3VyY2Ugc3ludGF4LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
cHVibGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN5bnRheCBTeW50
YXggewotICAgICAgZ2V0IHsgcmV0dXJuIHN5bnRheF87IH0KLSAgICAgIHNldCB7Ci0gICAgICAg
IHN5bnRheF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUg
Ym9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFz
IFR5cGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhUeXBlIG90aGVyKSB7Ci0g
ICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkg
ewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChOYW1lICE9IG90aGVy
Lk5hbWUpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmKCFmaWVsZHNfLkVxdWFscyhvdGhlci5maWVs
ZHNfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYoIW9uZW9mc18uRXF1YWxzKG90aGVyLm9uZW9m
c18pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighb3B0aW9uc18uRXF1YWxzKG90aGVyLm9wdGlv
bnNfKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKCFvYmplY3QuRXF1YWxzKFNvdXJjZUNvbnRl
eHQsIG90aGVyLlNvdXJjZUNvbnRleHQpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoU3ludGF4
ICE9IG90aGVyLlN5bnRheCkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBo
YXNoID0gMTsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSBoYXNoIF49IE5hbWUuR2V0SGFz
aENvZGUoKTsKLSAgICAgIGhhc2ggXj0gZmllbGRzXy5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFz
aCBePSBvbmVvZnNfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IG9wdGlvbnNfLkdldEhh
c2hDb2RlKCk7Ci0gICAgICBpZiAoc291cmNlQ29udGV4dF8gIT0gbnVsbCkgaGFzaCBePSBTb3Vy
Y2VDb250ZXh0LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoU3ludGF4ICE9IDApIGhhc2ggXj0g
U3ludGF4LkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29u
Rm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChO
YW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZVN0cmluZyhOYW1lKTsKLSAgICAgIH0KLSAgICAgIGZpZWxkc18uV3Jp
dGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9maWVsZHNfY29kZWMpOwotICAgICAgb25lb2ZzXy5Xcml0
ZVRvKG91dHB1dCwgX3JlcGVhdGVkX29uZW9mc19jb2RlYyk7Ci0gICAgICBvcHRpb25zXy5Xcml0
ZVRvKG91dHB1dCwgX3JlcGVhdGVkX29wdGlvbnNfY29kZWMpOwotICAgICAgaWYgKHNvdXJjZUNv
bnRleHRfICE9IG51bGwpIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDQyKTsKLSAgICAg
ICAgb3V0cHV0LldyaXRlTWVzc2FnZShTb3VyY2VDb250ZXh0KTsKLSAgICAgIH0KLSAgICAgIGlm
IChTeW50YXggIT0gMCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoNDgpOwotICAgICAg
ICBvdXRwdXQuV3JpdGVFbnVtKChpbnQpIFN5bnRheCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAg
aWYgKE5hbWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0
cHV0U3RyZWFtLkNvbXB1dGVTdHJpbmdTaXplKE5hbWUpOwotICAgICAgfQotICAgICAgc2l6ZSAr
PSBmaWVsZHNfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX2ZpZWxkc19jb2RlYyk7Ci0gICAgICBz
aXplICs9IG9uZW9mc18uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfb25lb2ZzX2NvZGVjKTsKLSAg
ICAgIHNpemUgKz0gb3B0aW9uc18uQ2FsY3VsYXRlU2l6ZShfcmVwZWF0ZWRfb3B0aW9uc19jb2Rl
Yyk7Ci0gICAgICBpZiAoc291cmNlQ29udGV4dF8gIT0gbnVsbCkgewotICAgICAgICBzaXplICs9
IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZU1lc3NhZ2VTaXplKFNvdXJjZUNvbnRl
eHQpOwotICAgICAgfQotICAgICAgaWYgKFN5bnRheCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0g
MSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlRW51bVNpemUoKGludCkgU3ludGF4KTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1l
cmdlRnJvbShUeXBlIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTmFtZS5MZW5ndGggIT0gMCkgewot
ICAgICAgICBOYW1lID0gb3RoZXIuTmFtZTsKLSAgICAgIH0KLSAgICAgIGZpZWxkc18uQWRkKG90
aGVyLmZpZWxkc18pOwotICAgICAgb25lb2ZzXy5BZGQob3RoZXIub25lb2ZzXyk7Ci0gICAgICBv
cHRpb25zXy5BZGQob3RoZXIub3B0aW9uc18pOwotICAgICAgaWYgKG90aGVyLnNvdXJjZUNvbnRl
eHRfICE9IG51bGwpIHsKLSAgICAgICAgaWYgKHNvdXJjZUNvbnRleHRfID09IG51bGwpIHsKLSAg
ICAgICAgICBzb3VyY2VDb250ZXh0XyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5Tb3VyY2VDb250ZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgU291cmNlQ29u
dGV4dC5NZXJnZUZyb20ob3RoZXIuU291cmNlQ29udGV4dCk7Ci0gICAgICB9Ci0gICAgICBpZiAo
b3RoZXIuU3ludGF4ICE9IDApIHsKLSAgICAgICAgU3ludGF4ID0gb3RoZXIuU3ludGF4OwotICAg
ICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0
cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0
LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIE5hbWUgPSBpbnB1dC5SZWFk
U3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSAxODogewotICAgICAgICAgICAgZmllbGRzXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVh
dGVkX2ZpZWxkc19jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSAyNjogewotICAgICAgICAgICAgb25lb2ZzXy5BZGRFbnRyaWVzRnJvbShpbnB1
dCwgX3JlcGVhdGVkX29uZW9mc19jb2RlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgY2FzZSAzNDogewotICAgICAgICAgICAgb3B0aW9uc18uQWRkRW50cmll
c0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9vcHRpb25zX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDQyOiB7Ci0gICAgICAgICAgICBpZiAoc291
cmNlQ29udGV4dF8gPT0gbnVsbCkgewotICAgICAgICAgICAgICBzb3VyY2VDb250ZXh0XyA9IG5l
dyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5Tb3VyY2VDb250ZXh0KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZShzb3VyY2VDb250
ZXh0Xyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA0
ODogewotICAgICAgICAgICAgc3ludGF4XyA9IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5TeW50YXgpIGlucHV0LlJlYWRFbnVtKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8
c3VtbWFyeT4KLSAgLy8vICBBIHNpbmdsZSBmaWVsZCBvZiBhIG1lc3NhZ2UgdHlwZS4KLSAgLy8v
IDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNl
ckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIEZpZWxkIDog
cGI6OklNZXNzYWdlPEZpZWxkPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1l
c3NhZ2VQYXJzZXI8RmllbGQ+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8RmllbGQ+
KCgpID0+IG5ldyBGaWVsZCgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2Vy
PEZpZWxkPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMg
c3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyBy
ZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVHlwZVJlZmxlY3Rp
b24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbMV07IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3Nh
Z2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVy
biBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIEZpZWxkKCkgewotICAgICAgT25D
b25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24o
KTsKLQotICAgIHB1YmxpYyBGaWVsZChGaWVsZCBvdGhlcikgOiB0aGlzKCkgewotICAgICAga2lu
ZF8gPSBvdGhlci5raW5kXzsKLSAgICAgIGNhcmRpbmFsaXR5XyA9IG90aGVyLmNhcmRpbmFsaXR5
XzsKLSAgICAgIG51bWJlcl8gPSBvdGhlci5udW1iZXJfOwotICAgICAgbmFtZV8gPSBvdGhlci5u
YW1lXzsKLSAgICAgIHR5cGVVcmxfID0gb3RoZXIudHlwZVVybF87Ci0gICAgICBvbmVvZkluZGV4
XyA9IG90aGVyLm9uZW9mSW5kZXhfOwotICAgICAgcGFja2VkXyA9IG90aGVyLnBhY2tlZF87Ci0g
ICAgICBvcHRpb25zXyA9IG90aGVyLm9wdGlvbnNfLkNsb25lKCk7Ci0gICAgICBqc29uTmFtZV8g
PSBvdGhlci5qc29uTmFtZV87Ci0gICAgICBkZWZhdWx0VmFsdWVfID0gb3RoZXIuZGVmYXVsdFZh
bHVlXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmllbGQgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4g
bmV3IEZpZWxkKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAia2luZCIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgS2lu
ZEZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldl
bGxLbm93blR5cGVzLkZpZWxkLlR5cGVzLktpbmQga2luZF8gPSAwOwotICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAvLy8gIFRoZSBmaWVsZCB0eXBlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVi
bGljIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkZpZWxkLlR5cGVzLktp
bmQgS2luZCB7Ci0gICAgICBnZXQgeyByZXR1cm4ga2luZF87IH0KLSAgICAgIHNldCB7Ci0gICAg
ICAgIGtpbmRfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZp
ZWxkIG51bWJlciBmb3IgdGhlICJjYXJkaW5hbGl0eSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBjb25zdCBpbnQgQ2FyZGluYWxpdHlGaWVsZE51bWJlciA9IDI7Ci0gICAgcHJpdmF0ZSBn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZC5UeXBlcy5DYXJkaW5h
bGl0eSBjYXJkaW5hbGl0eV8gPSAwOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFRoZSBm
aWVsZCBjYXJkaW5hbGl0eS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBnbG9iYWw6
Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVsZC5UeXBlcy5DYXJkaW5hbGl0eSBD
YXJkaW5hbGl0eSB7Ci0gICAgICBnZXQgeyByZXR1cm4gY2FyZGluYWxpdHlfOyB9Ci0gICAgICBz
ZXQgewotICAgICAgICBjYXJkaW5hbGl0eV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm51bWJlciIgZmllbGQuPC9zdW1t
YXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgTnVtYmVyRmllbGROdW1iZXIgPSAzOwotICAgIHBy
aXZhdGUgaW50IG51bWJlcl87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIGZpZWxk
IG51bWJlci4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBpbnQgTnVtYmVyIHsKLSAg
ICAgIGdldCB7IHJldHVybiBudW1iZXJfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBudW1iZXJf
ID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJuYW1lIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBO
YW1lRmllbGROdW1iZXIgPSA0OwotICAgIHByaXZhdGUgc3RyaW5nIG5hbWVfID0gIiI7Ci0gICAg
Ly8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIGZpZWxkIG5hbWUuCi0gICAgLy8vIDwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgc3RyaW5nIE5hbWUgewotICAgICAgZ2V0IHsgcmV0dXJuIG5hbWVfOyB9
Ci0gICAgICBzZXQgewotICAgICAgICBuYW1lXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hl
Y2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8gPHN1
bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInR5cGVfdXJsIiBmaWVsZC48L3N1bW1hcnk+Ci0g
ICAgcHVibGljIGNvbnN0IGludCBUeXBlVXJsRmllbGROdW1iZXIgPSA2OwotICAgIHByaXZhdGUg
c3RyaW5nIHR5cGVVcmxfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIGZp
ZWxkIHR5cGUgVVJMLCB3aXRob3V0IHRoZSBzY2hlbWUsIGZvciBtZXNzYWdlIG9yIGVudW1lcmF0
aW9uCi0gICAgLy8vICB0eXBlcy4gRXhhbXBsZTogYCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2ds
ZS5wcm90b2J1Zi5UaW1lc3RhbXAiYC4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBz
dHJpbmcgVHlwZVVybCB7Ci0gICAgICBnZXQgeyByZXR1cm4gdHlwZVVybF87IH0KLSAgICAgIHNl
dCB7Ci0gICAgICAgIHR5cGVVcmxfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51
bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5G
aWVsZCBudW1iZXIgZm9yIHRoZSAib25lb2ZfaW5kZXgiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBw
dWJsaWMgY29uc3QgaW50IE9uZW9mSW5kZXhGaWVsZE51bWJlciA9IDc7Ci0gICAgcHJpdmF0ZSBp
bnQgb25lb2ZJbmRleF87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIGluZGV4IG9m
IHRoZSBmaWVsZCB0eXBlIGluIGBUeXBlLm9uZW9mc2AsIGZvciBtZXNzYWdlIG9yIGVudW1lcmF0
aW9uCi0gICAgLy8vICB0eXBlcy4gVGhlIGZpcnN0IHR5cGUgaGFzIGluZGV4IDE7IHplcm8gbWVh
bnMgdGhlIHR5cGUgaXMgbm90IGluIHRoZSBsaXN0LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
cHVibGljIGludCBPbmVvZkluZGV4IHsKLSAgICAgIGdldCB7IHJldHVybiBvbmVvZkluZGV4Xzsg
fQotICAgICAgc2V0IHsKLSAgICAgICAgb25lb2ZJbmRleF8gPSB2YWx1ZTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInBhY2tlZCIgZmll
bGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgUGFja2VkRmllbGROdW1iZXIgPSA4
OwotICAgIHByaXZhdGUgYm9vbCBwYWNrZWRfOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8g
IFdoZXRoZXIgdG8gdXNlIGFsdGVybmF0aXZlIHBhY2tlZCB3aXJlIHJlcHJlc2VudGF0aW9uLgot
ICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGJvb2wgUGFja2VkIHsKLSAgICAgIGdldCB7
IHJldHVybiBwYWNrZWRfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBwYWNrZWRfID0gdmFsdWU7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJvcHRpb25zIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBPcHRpb25z
RmllbGROdW1iZXIgPSA5OwotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENv
ZGVjPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLk9wdGlvbj4gX3JlcGVh
dGVkX29wdGlvbnNfY29kZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDc0
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5PcHRpb24uUGFyc2VyKTsK
LSAgICBwcml2YXRlIHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5XZWxsS25vd25UeXBlcy5PcHRpb24+IG9wdGlvbnNfID0gbmV3IHBiYzo6UmVwZWF0
ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5PcHRpb24+KCk7
Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIHByb3RvY29sIGJ1ZmZlciBvcHRpb25z
LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9i
YWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5PcHRpb24+IE9wdGlvbnMgewotICAg
ICAgZ2V0IHsgcmV0dXJuIG9wdGlvbnNfOyB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZp
ZWxkIG51bWJlciBmb3IgdGhlICJqc29uX25hbWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJs
aWMgY29uc3QgaW50IEpzb25OYW1lRmllbGROdW1iZXIgPSAxMDsKLSAgICBwcml2YXRlIHN0cmlu
ZyBqc29uTmFtZV8gPSAiIjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBUaGUgZmllbGQg
SlNPTiBuYW1lLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0cmluZyBKc29uTmFt
ZSB7Ci0gICAgICBnZXQgeyByZXR1cm4ganNvbk5hbWVfOyB9Ci0gICAgICBzZXQgewotICAgICAg
ICBqc29uTmFtZV8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwg
InZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJl
ciBmb3IgdGhlICJkZWZhdWx0X3ZhbHVlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNv
bnN0IGludCBEZWZhdWx0VmFsdWVGaWVsZE51bWJlciA9IDExOwotICAgIHByaXZhdGUgc3RyaW5n
IGRlZmF1bHRWYWx1ZV8gPSAiIjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBUaGUgc3Ry
aW5nIHZhbHVlIG9mIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgZmllbGQuIFByb3RvMiBzeW50
YXggb25seS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdHJpbmcgRGVmYXVsdFZh
bHVlIHsKLSAgICAgIGdldCB7IHJldHVybiBkZWZhdWx0VmFsdWVfOyB9Ci0gICAgICBzZXQgewot
ICAgICAgICBkZWZhdWx0VmFsdWVfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51
bGwodmFsdWUsICJ2YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlk
ZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIg
YXMgRmllbGQpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhGaWVsZCBvdGhlcikg
ewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhp
cykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoS2luZCAhPSBv
dGhlci5LaW5kKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoQ2FyZGluYWxpdHkgIT0gb3RoZXIu
Q2FyZGluYWxpdHkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChOdW1iZXIgIT0gb3RoZXIuTnVt
YmVyKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoTmFtZSAhPSBvdGhlci5OYW1lKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICBpZiAoVHlwZVVybCAhPSBvdGhlci5UeXBlVXJsKSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoT25lb2ZJbmRleCAhPSBvdGhlci5PbmVvZkluZGV4KSByZXR1cm4gZmFsc2U7
Ci0gICAgICBpZiAoUGFja2VkICE9IG90aGVyLlBhY2tlZCkgcmV0dXJuIGZhbHNlOwotICAgICAg
aWYoIW9wdGlvbnNfLkVxdWFscyhvdGhlci5vcHRpb25zXykpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmIChKc29uTmFtZSAhPSBvdGhlci5Kc29uTmFtZSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KERlZmF1bHRWYWx1ZSAhPSBvdGhlci5EZWZhdWx0VmFsdWUpIHJldHVybiBmYWxzZTsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENv
ZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoS2luZCAhPSAwKSBoYXNoIF49
IEtpbmQuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChDYXJkaW5hbGl0eSAhPSAwKSBoYXNoIF49
IENhcmRpbmFsaXR5LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoTnVtYmVyICE9IDApIGhhc2gg
Xj0gTnVtYmVyLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoTmFtZS5MZW5ndGggIT0gMCkgaGFz
aCBePSBOYW1lLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoVHlwZVVybC5MZW5ndGggIT0gMCkg
aGFzaCBePSBUeXBlVXJsLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoT25lb2ZJbmRleCAhPSAw
KSBoYXNoIF49IE9uZW9mSW5kZXguR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChQYWNrZWQgIT0g
ZmFsc2UpIGhhc2ggXj0gUGFja2VkLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IG9wdGlv
bnNfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoSnNvbk5hbWUuTGVuZ3RoICE9IDApIGhhc2gg
Xj0gSnNvbk5hbWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChEZWZhdWx0VmFsdWUuTGVuZ3Ro
ICE9IDApIGhhc2ggXj0gRGVmYXVsdFZhbHVlLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4g
aGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewot
ICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBv
dXRwdXQpIHsKLSAgICAgIGlmIChLaW5kICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3
VGFnKDgpOwotICAgICAgICBvdXRwdXQuV3JpdGVFbnVtKChpbnQpIEtpbmQpOwotICAgICAgfQot
ICAgICAgaWYgKENhcmRpbmFsaXR5ICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFn
KDE2KTsKLSAgICAgICAgb3V0cHV0LldyaXRlRW51bSgoaW50KSBDYXJkaW5hbGl0eSk7Ci0gICAg
ICB9Ci0gICAgICBpZiAoTnVtYmVyICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFn
KDI0KTsKLSAgICAgICAgb3V0cHV0LldyaXRlSW50MzIoTnVtYmVyKTsKLSAgICAgIH0KLSAgICAg
IGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygzNCk7
Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmIChU
eXBlVXJsLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg1MCk7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZVN0cmluZyhUeXBlVXJsKTsKLSAgICAgIH0KLSAgICAgIGlmIChP
bmVvZkluZGV4ICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDU2KTsKLSAgICAg
ICAgb3V0cHV0LldyaXRlSW50MzIoT25lb2ZJbmRleCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUGFj
a2VkICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg2NCk7Ci0gICAgICAg
IG91dHB1dC5Xcml0ZUJvb2woUGFja2VkKTsKLSAgICAgIH0KLSAgICAgIG9wdGlvbnNfLldyaXRl
VG8ob3V0cHV0LCBfcmVwZWF0ZWRfb3B0aW9uc19jb2RlYyk7Ci0gICAgICBpZiAoSnNvbk5hbWUu
TGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDgyKTsKLSAgICAgICAg
b3V0cHV0LldyaXRlU3RyaW5nKEpzb25OYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmIChEZWZhdWx0
VmFsdWUuTGVuZ3RoICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDkwKTsKLSAg
ICAgICAgb3V0cHV0LldyaXRlU3RyaW5nKERlZmF1bHRWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwot
ICAgICAgaWYgKEtpbmQgIT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRw
dXRTdHJlYW0uQ29tcHV0ZUVudW1TaXplKChpbnQpIEtpbmQpOwotICAgICAgfQotICAgICAgaWYg
KENhcmRpbmFsaXR5ICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0
U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBDYXJkaW5hbGl0eSk7Ci0gICAgICB9Ci0gICAg
ICBpZiAoTnVtYmVyICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0
U3RyZWFtLkNvbXB1dGVJbnQzMlNpemUoTnVtYmVyKTsKLSAgICAgIH0KLSAgICAgIGlmIChOYW1l
Lkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVh
bS5Db21wdXRlU3RyaW5nU2l6ZShOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmIChUeXBlVXJsLkxl
bmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5D
b21wdXRlU3RyaW5nU2l6ZShUeXBlVXJsKTsKLSAgICAgIH0KLSAgICAgIGlmIChPbmVvZkluZGV4
ICE9IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1
dGVJbnQzMlNpemUoT25lb2ZJbmRleCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUGFja2VkICE9IGZh
bHNlKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDE7Ci0gICAgICB9Ci0gICAgICBzaXplICs9IG9w
dGlvbnNfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkX29wdGlvbnNfY29kZWMpOwotICAgICAgaWYg
KEpzb25OYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91
dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShKc29uTmFtZSk7Ci0gICAgICB9Ci0gICAgICBp
ZiAoRGVmYXVsdFZhbHVlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpD
b2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShEZWZhdWx0VmFsdWUpOwotICAgICAg
fQotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9t
KEZpZWxkIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuS2luZCAhPSAwKSB7Ci0gICAgICAgIEtpbmQg
PSBvdGhlci5LaW5kOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLkNhcmRpbmFsaXR5ICE9IDAp
IHsKLSAgICAgICAgQ2FyZGluYWxpdHkgPSBvdGhlci5DYXJkaW5hbGl0eTsKLSAgICAgIH0KLSAg
ICAgIGlmIChvdGhlci5OdW1iZXIgIT0gMCkgewotICAgICAgICBOdW1iZXIgPSBvdGhlci5OdW1i
ZXI7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTmFtZS5MZW5ndGggIT0gMCkgewotICAgICAg
ICBOYW1lID0gb3RoZXIuTmFtZTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5UeXBlVXJsLkxl
bmd0aCAhPSAwKSB7Ci0gICAgICAgIFR5cGVVcmwgPSBvdGhlci5UeXBlVXJsOwotICAgICAgfQot
ICAgICAgaWYgKG90aGVyLk9uZW9mSW5kZXggIT0gMCkgewotICAgICAgICBPbmVvZkluZGV4ID0g
b3RoZXIuT25lb2ZJbmRleDsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5QYWNrZWQgIT0gZmFs
c2UpIHsKLSAgICAgICAgUGFja2VkID0gb3RoZXIuUGFja2VkOwotICAgICAgfQotICAgICAgb3B0
aW9uc18uQWRkKG90aGVyLm9wdGlvbnNfKTsKLSAgICAgIGlmIChvdGhlci5Kc29uTmFtZS5MZW5n
dGggIT0gMCkgewotICAgICAgICBKc29uTmFtZSA9IG90aGVyLkpzb25OYW1lOwotICAgICAgfQot
ICAgICAgaWYgKG90aGVyLkRlZmF1bHRWYWx1ZS5MZW5ndGggIT0gMCkgewotICAgICAgICBEZWZh
dWx0VmFsdWUgPSBvdGhlci5EZWZhdWx0VmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVi
bGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1
aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0g
ICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaW5w
dXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4
OiB7Ci0gICAgICAgICAgICBraW5kXyA9IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5GaWVsZC5UeXBlcy5LaW5kKSBpbnB1dC5SZWFkRW51bSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgMTY6IHsKLSAgICAgICAgICAgIGNh
cmRpbmFsaXR5XyA9IChnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GaWVs
ZC5UeXBlcy5DYXJkaW5hbGl0eSkgaW5wdXQuUmVhZEVudW0oKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDI0OiB7Ci0gICAgICAgICAgICBOdW1iZXIg
PSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDM0OiB7Ci0gICAgICAgICAgICBOYW1lID0gaW5wdXQuUmVhZFN0cmluZygp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgNTA6IHsK
LSAgICAgICAgICAgIFR5cGVVcmwgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA1NjogewotICAgICAgICAgICAgT25l
b2ZJbmRleCA9IGlucHV0LlJlYWRJbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGNhc2UgNjQ6IHsKLSAgICAgICAgICAgIFBhY2tlZCA9IGlucHV0LlJl
YWRCb29sKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2Fz
ZSA3NDogewotICAgICAgICAgICAgb3B0aW9uc18uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBl
YXRlZF9vcHRpb25zX2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjYXNlIDgyOiB7Ci0gICAgICAgICAgICBKc29uTmFtZSA9IGlucHV0LlJlYWRTdHJp
bmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDkw
OiB7Ci0gICAgICAgICAgICBEZWZhdWx0VmFsdWUgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0K
LSAgICAjcmVnaW9uIE5lc3RlZCB0eXBlcwotICAgIC8vLyA8c3VtbWFyeT5Db250YWluZXIgZm9y
IG5lc3RlZCB0eXBlcyBkZWNsYXJlZCBpbiB0aGUgRmllbGQgbWVzc2FnZSB0eXBlLjwvc3VtbWFy
eT4KLSAgICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0
dHJpYnV0ZSgpXQotICAgIHB1YmxpYyBzdGF0aWMgcGFydGlhbCBjbGFzcyBUeXBlcyB7Ci0gICAg
ICAvLy8gPHN1bW1hcnk+Ci0gICAgICAvLy8gIEJhc2ljIGZpZWxkIHR5cGVzLgotICAgICAgLy8v
IDwvc3VtbWFyeT4KLSAgICAgIHB1YmxpYyBlbnVtIEtpbmQgewotICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgIC8vLyAgRmllbGQgdHlwZSB1bmtub3duLgotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfVU5LTk9XTiIpXSBUeXBlVW5r
bm93biA9IDAsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBGaWVsZCB0eXBl
IGRvdWJsZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgW3Bicjo6T3JpZ2luYWxO
YW1lKCJUWVBFX0RPVUJMRSIpXSBUeXBlRG91YmxlID0gMSwKLSAgICAgICAgLy8vIDxzdW1tYXJ5
PgotICAgICAgICAvLy8gIEZpZWxkIHR5cGUgZmxvYXQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiVFlQRV9GTE9BVCIpXSBUeXBlRmxvYXQgPSAy
LAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgRmllbGQgdHlwZSBpbnQ2NC4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJUWVBF
X0lOVDY0IildIFR5cGVJbnQ2NCA9IDMsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAg
Ly8vICBGaWVsZCB0eXBlIHVpbnQ2NC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAg
W3Bicjo6T3JpZ2luYWxOYW1lKCJUWVBFX1VJTlQ2NCIpXSBUeXBlVWludDY0ID0gNCwKLSAgICAg
ICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gIEZpZWxkIHR5cGUgaW50MzIuCi0gICAgICAg
IC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiVFlQRV9JTlQzMiIp
XSBUeXBlSW50MzIgPSA1LAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgRmll
bGQgdHlwZSBmaXhlZDY0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBbcGJyOjpP
cmlnaW5hbE5hbWUoIlRZUEVfRklYRUQ2NCIpXSBUeXBlRml4ZWQ2NCA9IDYsCi0gICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBGaWVsZCB0eXBlIGZpeGVkMzIuCi0gICAgICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiVFlQRV9GSVhFRDMyIild
IFR5cGVGaXhlZDMyID0gNywKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gIEZp
ZWxkIHR5cGUgYm9vbC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgW3Bicjo6T3Jp
Z2luYWxOYW1lKCJUWVBFX0JPT0wiKV0gVHlwZUJvb2wgPSA4LAotICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgIC8vLyAgRmllbGQgdHlwZSBzdHJpbmcuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiVFlQRV9TVFJJTkciKV0gVHlwZVN0cmlu
ZyA9IDksCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBGaWVsZCB0eXBlIGdy
b3VwLiBQcm90bzIgc3ludGF4IG9ubHksIGFuZCBkZXByZWNhdGVkLgotICAgICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfR1JPVVAiKV0gVHlwZUdy
b3VwID0gMTAsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBGaWVsZCB0eXBl
IG1lc3NhZ2UuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFs
TmFtZSgiVFlQRV9NRVNTQUdFIildIFR5cGVNZXNzYWdlID0gMTEsCi0gICAgICAgIC8vLyA8c3Vt
bWFyeT4KLSAgICAgICAgLy8vICBGaWVsZCB0eXBlIGJ5dGVzLgotICAgICAgICAvLy8gPC9zdW1t
YXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfQllURVMiKV0gVHlwZUJ5dGVz
ID0gMTIsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBGaWVsZCB0eXBlIHVp
bnQzMi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1l
KCJUWVBFX1VJTlQzMiIpXSBUeXBlVWludDMyID0gMTMsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgLy8vICBGaWVsZCB0eXBlIGVudW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0g
ICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiVFlQRV9FTlVNIildIFR5cGVFbnVtID0gMTQsCi0g
ICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBGaWVsZCB0eXBlIHNmaXhlZDMyLgot
ICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVf
U0ZJWEVEMzIiKV0gVHlwZVNmaXhlZDMyID0gMTUsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgLy8vICBGaWVsZCB0eXBlIHNmaXhlZDY0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIlRZUEVfU0ZJWEVENjQiKV0gVHlwZVNmaXhlZDY0
ID0gMTYsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICBGaWVsZCB0eXBlIHNp
bnQzMi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1l
KCJUWVBFX1NJTlQzMiIpXSBUeXBlU2ludDMyID0gMTcsCi0gICAgICAgIC8vLyA8c3VtbWFyeT4K
LSAgICAgICAgLy8vICBGaWVsZCB0eXBlIHNpbnQ2NC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4K
LSAgICAgICAgW3Bicjo6T3JpZ2luYWxOYW1lKCJUWVBFX1NJTlQ2NCIpXSBUeXBlU2ludDY0ID0g
MTgsCi0gICAgICB9Ci0KLSAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgIC8vLyAgV2hldGhlciBh
IGZpZWxkIGlzIG9wdGlvbmFsLCByZXF1aXJlZCwgb3IgcmVwZWF0ZWQuCi0gICAgICAvLy8gPC9z
dW1tYXJ5PgotICAgICAgcHVibGljIGVudW0gQ2FyZGluYWxpdHkgewotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyAgRm9yIGZpZWxkcyB3aXRoIHVua25vd24gY2FyZGluYWxpdHku
Ci0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiQ0FS
RElOQUxJVFlfVU5LTk9XTiIpXSBVbmtub3duID0gMCwKLSAgICAgICAgLy8vIDxzdW1tYXJ5Pgot
ICAgICAgICAvLy8gIEZvciBvcHRpb25hbCBmaWVsZHMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+
Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFsTmFtZSgiQ0FSRElOQUxJVFlfT1BUSU9OQUwiKV0gT3B0
aW9uYWwgPSAxLAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgRm9yIHJlcXVp
cmVkIGZpZWxkcy4gUHJvdG8yIHN5bnRheCBvbmx5LgotICAgICAgICAvLy8gPC9zdW1tYXJ5Pgot
ICAgICAgICBbcGJyOjpPcmlnaW5hbE5hbWUoIkNBUkRJTkFMSVRZX1JFUVVJUkVEIildIFJlcXVp
cmVkID0gMiwKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gIEZvciByZXBlYXRl
ZCBmaWVsZHMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFtwYnI6Ok9yaWdpbmFs
TmFtZSgiQ0FSRElOQUxJVFlfUkVQRUFURUQiKV0gUmVwZWF0ZWQgPSAzLAotICAgICAgfQotCi0g
ICAgfQotICAgICNlbmRyZWdpb24KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIEVu
dW0gdHlwZSBkZWZpbml0aW9uLgotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0u
RGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2Vh
bGVkIHBhcnRpYWwgY2xhc3MgRW51bSA6IHBiOjpJTWVzc2FnZTxFbnVtPiB7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8RW51bT4gX3BhcnNlciA9IG5ldyBw
Yjo6TWVzc2FnZVBhcnNlcjxFbnVtPigoKSA9PiBuZXcgRW51bSgpKTsKLSAgICBwdWJsaWMgc3Rh
dGljIHBiOjpNZXNzYWdlUGFyc2VyPEVudW0+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2Vy
OyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlw
dG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25v
d25UeXBlcy5UeXBlUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1syXTsgfQotICAg
IH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3Ig
ewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMg
RW51bSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2
b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgRW51bShFbnVtIG90aGVyKSA6IHRo
aXMoKSB7Ci0gICAgICBuYW1lXyA9IG90aGVyLm5hbWVfOwotICAgICAgZW51bXZhbHVlXyA9IG90
aGVyLmVudW12YWx1ZV8uQ2xvbmUoKTsKLSAgICAgIG9wdGlvbnNfID0gb3RoZXIub3B0aW9uc18u
Q2xvbmUoKTsKLSAgICAgIFNvdXJjZUNvbnRleHQgPSBvdGhlci5zb3VyY2VDb250ZXh0XyAhPSBu
dWxsID8gb3RoZXIuU291cmNlQ29udGV4dC5DbG9uZSgpIDogbnVsbDsKLSAgICAgIHN5bnRheF8g
PSBvdGhlci5zeW50YXhfOwotICAgIH0KLQotICAgIHB1YmxpYyBFbnVtIENsb25lKCkgewotICAg
ICAgcmV0dXJuIG5ldyBFbnVtKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAibmFtZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25z
dCBpbnQgTmFtZUZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIHN0cmluZyBuYW1lXyA9ICIi
OwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIEVudW0gdHlwZSBuYW1lLgotICAgIC8vLyA8
L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0cmluZyBOYW1lIHsKLSAgICAgIGdldCB7IHJldHVybiBu
YW1lXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgbmFtZV8gPSBwYjo6UHJvdG9QcmVjb25kaXRp
b25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJlbnVtdmFsdWUiIGZpZWxkLjwvc3Vt
bWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IEVudW12YWx1ZUZpZWxkTnVtYmVyID0gMjsKLSAg
ICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Q
cm90b2J1Zi5XZWxsS25vd25UeXBlcy5FbnVtVmFsdWU+IF9yZXBlYXRlZF9lbnVtdmFsdWVfY29k
ZWMKLSAgICAgICAgPSBwYjo6RmllbGRDb2RlYy5Gb3JNZXNzYWdlKDE4LCBnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5FbnVtVmFsdWUuUGFyc2VyKTsKLSAgICBwcml2YXRl
IHJlYWRvbmx5IHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5FbnVtVmFsdWU+IGVudW12YWx1ZV8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxk
PGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkVudW1WYWx1ZT4oKTsKLSAg
ICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBFbnVtIHZhbHVlIGRlZmluaXRpb25zLgotICAgIC8v
LyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0ZWRGaWVsZDxnbG9iYWw6Okdvb2ds
ZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5FbnVtVmFsdWU+IEVudW12YWx1ZSB7Ci0gICAgICBn
ZXQgeyByZXR1cm4gZW51bXZhbHVlXzsgfQotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVs
ZCBudW1iZXIgZm9yIHRoZSAib3B0aW9ucyIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBj
b25zdCBpbnQgT3B0aW9uc0ZpZWxkTnVtYmVyID0gMzsKLSAgICBwcml2YXRlIHN0YXRpYyByZWFk
b25seSBwYjo6RmllbGRDb2RlYzxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5PcHRpb24+IF9yZXBlYXRlZF9vcHRpb25zX2NvZGVjCi0gICAgICAgID0gcGI6OkZpZWxkQ29k
ZWMuRm9yTWVzc2FnZSgyNiwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
T3B0aW9uLlBhcnNlcik7Ci0gICAgcHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuT3B0aW9uPiBvcHRpb25zXyA9
IG5ldyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3du
VHlwZXMuT3B0aW9uPigpOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFByb3RvY29sIGJ1
ZmZlciBvcHRpb25zLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiYzo6UmVwZWF0
ZWRGaWVsZDxnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5PcHRpb24+IE9w
dGlvbnMgewotICAgICAgZ2V0IHsgcmV0dXJuIG9wdGlvbnNfOyB9Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzb3VyY2VfY29udGV4dCIgZmllbGQuPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgU291cmNlQ29udGV4dEZpZWxkTnVtYmVyID0g
NDsKLSAgICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlNv
dXJjZUNvbnRleHQgc291cmNlQ29udGV4dF87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAg
VGhlIHNvdXJjZSBjb250ZXh0LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGdsb2Jh
bDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlNvdXJjZUNvbnRleHQgU291cmNlQ29u
dGV4dCB7Ci0gICAgICBnZXQgeyByZXR1cm4gc291cmNlQ29udGV4dF87IH0KLSAgICAgIHNldCB7
Ci0gICAgICAgIHNvdXJjZUNvbnRleHRfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
Ly8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJzeW50YXgiIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFN5bnRheEZpZWxkTnVtYmVyID0gNTsKLSAgICBwcml2
YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN5bnRheCBzeW50YXhf
ID0gMDsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICBUaGUgc291cmNlIHN5bnRheC4KLSAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5TeW50YXggU3ludGF4IHsKLSAgICAgIGdldCB7IHJldHVybiBzeW50YXhfOyB9
Ci0gICAgICBzZXQgewotICAgICAgICBzeW50YXhfID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikgewotICAgICAg
cmV0dXJuIEVxdWFscyhvdGhlciBhcyBFbnVtKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBF
cXVhbHMoRW51bSBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVs
bCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5j
ZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0g
ICAgICBpZiAoTmFtZSAhPSBvdGhlci5OYW1lKSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZighZW51
bXZhbHVlXy5FcXVhbHMob3RoZXIuZW51bXZhbHVlXykpIHJldHVybiBmYWxzZTsKLSAgICAgIGlm
KCFvcHRpb25zXy5FcXVhbHMob3RoZXIub3B0aW9uc18pKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZiAoIW9iamVjdC5FcXVhbHMoU291cmNlQ29udGV4dCwgb3RoZXIuU291cmNlQ29udGV4dCkpIHJl
dHVybiBmYWxzZTsKLSAgICAgIGlmIChTeW50YXggIT0gb3RoZXIuU3ludGF4KSByZXR1cm4gZmFs
c2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50
IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKE5hbWUuTGVu
Z3RoICE9IDApIGhhc2ggXj0gTmFtZS5HZXRIYXNoQ29kZSgpOwotICAgICAgaGFzaCBePSBlbnVt
dmFsdWVfLkdldEhhc2hDb2RlKCk7Ci0gICAgICBoYXNoIF49IG9wdGlvbnNfLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICBpZiAoc291cmNlQ29udGV4dF8gIT0gbnVsbCkgaGFzaCBePSBTb3VyY2VDb250
ZXh0LkdldEhhc2hDb2RlKCk7Ci0gICAgICBpZiAoU3ludGF4ICE9IDApIGhhc2ggXj0gU3ludGF4
LkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
b3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0
dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBX
cml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChOYW1lLkxl
bmd0aCAhPSAwKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAgICAgIG91
dHB1dC5Xcml0ZVN0cmluZyhOYW1lKTsKLSAgICAgIH0KLSAgICAgIGVudW12YWx1ZV8uV3JpdGVU
byhvdXRwdXQsIF9yZXBlYXRlZF9lbnVtdmFsdWVfY29kZWMpOwotICAgICAgb3B0aW9uc18uV3Jp
dGVUbyhvdXRwdXQsIF9yZXBlYXRlZF9vcHRpb25zX2NvZGVjKTsKLSAgICAgIGlmIChzb3VyY2VD
b250ZXh0XyAhPSBudWxsKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygzNCk7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZU1lc3NhZ2UoU291cmNlQ29udGV4dCk7Ci0gICAgICB9Ci0gICAgICBp
ZiAoU3ludGF4ICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDQwKTsKLSAgICAg
ICAgb3V0cHV0LldyaXRlRW51bSgoaW50KSBTeW50YXgpOwotICAgICAgfQotICAgIH0KLQotICAg
IHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAg
IGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91
dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6ZShOYW1lKTsKLSAgICAgIH0KLSAgICAgIHNpemUg
Kz0gZW51bXZhbHVlXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9lbnVtdmFsdWVfY29kZWMpOwot
ICAgICAgc2l6ZSArPSBvcHRpb25zXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9vcHRpb25zX2Nv
ZGVjKTsKLSAgICAgIGlmIChzb3VyY2VDb250ZXh0XyAhPSBudWxsKSB7Ci0gICAgICAgIHNpemUg
Kz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoU291cmNlQ29u
dGV4dCk7Ci0gICAgICB9Ci0gICAgICBpZiAoU3ludGF4ICE9IDApIHsKLSAgICAgICAgc2l6ZSAr
PSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6ZSgoaW50KSBTeW50YXgp
OwotICAgICAgfQotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
TWVyZ2VGcm9tKEVudW0gb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAg
ICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5OYW1lLkxlbmd0aCAhPSAwKSB7
Ci0gICAgICAgIE5hbWUgPSBvdGhlci5OYW1lOwotICAgICAgfQotICAgICAgZW51bXZhbHVlXy5B
ZGQob3RoZXIuZW51bXZhbHVlXyk7Ci0gICAgICBvcHRpb25zXy5BZGQob3RoZXIub3B0aW9uc18p
OwotICAgICAgaWYgKG90aGVyLnNvdXJjZUNvbnRleHRfICE9IG51bGwpIHsKLSAgICAgICAgaWYg
KHNvdXJjZUNvbnRleHRfID09IG51bGwpIHsKLSAgICAgICAgICBzb3VyY2VDb250ZXh0XyA9IG5l
dyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5Tb3VyY2VDb250ZXh0KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgU291cmNlQ29udGV4dC5NZXJnZUZyb20ob3RoZXIuU291cmNl
Q29udGV4dCk7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuU3ludGF4ICE9IDApIHsKLSAgICAg
ICAgU3ludGF4ID0gb3RoZXIuU3ludGF4OwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0
YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAg
ICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNr
aXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsK
LSAgICAgICAgICAgIE5hbWUgPSBpbnB1dC5SZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAxODogewotICAgICAgICAgICAgZW51bXZh
bHVlXy5BZGRFbnRyaWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX2VudW12YWx1ZV9jb2RlYyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAyNjogewotICAg
ICAgICAgICAgb3B0aW9uc18uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF9vcHRpb25z
X2NvZGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNl
IDM0OiB7Ci0gICAgICAgICAgICBpZiAoc291cmNlQ29udGV4dF8gPT0gbnVsbCkgewotICAgICAg
ICAgICAgICBzb3VyY2VDb250ZXh0XyA9IG5ldyBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5Tb3VyY2VDb250ZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
bnB1dC5SZWFkTWVzc2FnZShzb3VyY2VDb250ZXh0Xyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgY2FzZSA0MDogewotICAgICAgICAgICAgc3ludGF4XyA9IChn
bG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5TeW50YXgpIGlucHV0LlJlYWRF
bnVtKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBFbnVtIHZhbHVlIGRl
ZmluaXRpb24uCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGlj
cy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlh
bCBjbGFzcyBFbnVtVmFsdWUgOiBwYjo6SU1lc3NhZ2U8RW51bVZhbHVlPiB7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8RW51bVZhbHVlPiBfcGFyc2VyID0g
bmV3IHBiOjpNZXNzYWdlUGFyc2VyPEVudW1WYWx1ZT4oKCkgPT4gbmV3IEVudW1WYWx1ZSgpKTsK
LSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2VyPEVudW1WYWx1ZT4gUGFyc2VyIHsg
Z2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3Nh
Z2VEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29v
Z2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlR5cGVSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVz
c2FnZVR5cGVzWzNdOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6
SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQot
ICAgIH0KLQotICAgIHB1YmxpYyBFbnVtVmFsdWUoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigp
OwotICAgIH0KLQotICAgIHBhcnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVi
bGljIEVudW1WYWx1ZShFbnVtVmFsdWUgb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIG5hbWVfID0g
b3RoZXIubmFtZV87Ci0gICAgICBudW1iZXJfID0gb3RoZXIubnVtYmVyXzsKLSAgICAgIG9wdGlv
bnNfID0gb3RoZXIub3B0aW9uc18uQ2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRW51bVZh
bHVlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBFbnVtVmFsdWUodGhpcyk7Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJuYW1lIiBmaWVsZC48L3N1
bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBOYW1lRmllbGROdW1iZXIgPSAxOwotICAgIHBy
aXZhdGUgc3RyaW5nIG5hbWVfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgRW51
bSB2YWx1ZSBuYW1lLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHN0cmluZyBOYW1l
IHsKLSAgICAgIGdldCB7IHJldHVybiBuYW1lXzsgfQotICAgICAgc2V0IHsKLSAgICAgICAgbmFt
ZV8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2YWx1ZSwgInZhbHVlIik7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhl
ICJudW1iZXIiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE51bWJlckZp
ZWxkTnVtYmVyID0gMjsKLSAgICBwcml2YXRlIGludCBudW1iZXJfOwotICAgIC8vLyA8c3VtbWFy
eT4KLSAgICAvLy8gIEVudW0gdmFsdWUgbnVtYmVyLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAg
cHVibGljIGludCBOdW1iZXIgewotICAgICAgZ2V0IHsgcmV0dXJuIG51bWJlcl87IH0KLSAgICAg
IHNldCB7Ci0gICAgICAgIG51bWJlcl8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm9wdGlvbnMiIGZpZWxkLjwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE9wdGlvbnNGaWVsZE51bWJlciA9IDM7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8Z2xvYmFsOjpHb29nbGUuUHJvdG9i
dWYuV2VsbEtub3duVHlwZXMuT3B0aW9uPiBfcmVwZWF0ZWRfb3B0aW9uc19jb2RlYwotICAgICAg
ICA9IHBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoMjYsIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LldlbGxLbm93blR5cGVzLk9wdGlvbi5QYXJzZXIpOwotICAgIHByaXZhdGUgcmVhZG9ubHkgcGJj
OjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLk9w
dGlvbj4gb3B0aW9uc18gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLk9wdGlvbj4oKTsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
Ly8vICBQcm90b2NvbCBidWZmZXIgb3B0aW9ucy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1
YmxpYyBwYmM6OlJlcGVhdGVkRmllbGQ8Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3du
VHlwZXMuT3B0aW9uPiBPcHRpb25zIHsKLSAgICAgIGdldCB7IHJldHVybiBvcHRpb25zXzsgfQot
ICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsK
LSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgRW51bVZhbHVlKTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgYm9vbCBFcXVhbHMoRW51bVZhbHVlIG90aGVyKSB7Ci0gICAgICBpZiAoUmVmZXJlbmNl
RXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChOYW1lICE9IG90aGVyLk5hbWUpIHJldHVybiBmYWxz
ZTsKLSAgICAgIGlmIChOdW1iZXIgIT0gb3RoZXIuTnVtYmVyKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICBpZighb3B0aW9uc18uRXF1YWxzKG90aGVyLm9wdGlvbnNfKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNo
Q29kZSgpIHsKLSAgICAgIGludCBoYXNoID0gMTsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAw
KSBoYXNoIF49IE5hbWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIGlmIChOdW1iZXIgIT0gMCkgaGFz
aCBePSBOdW1iZXIuR2V0SGFzaENvZGUoKTsKLSAgICAgIGhhc2ggXj0gb3B0aW9uc18uR2V0SGFz
aENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlk
ZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9E
aWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8o
cGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKE5hbWUuTGVuZ3RoICE9
IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0Lldy
aXRlU3RyaW5nKE5hbWUpOwotICAgICAgfQotICAgICAgaWYgKE51bWJlciAhPSAwKSB7Ci0gICAg
ICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxNik7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUludDMyKE51
bWJlcik7Ci0gICAgICB9Ci0gICAgICBvcHRpb25zXy5Xcml0ZVRvKG91dHB1dCwgX3JlcGVhdGVk
X29wdGlvbnNfY29kZWMpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgp
IHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0g
ICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlU3RyaW5nU2l6
ZShOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmIChOdW1iZXIgIT0gMCkgewotICAgICAgICBzaXpl
ICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZUludDMyU2l6ZShOdW1iZXIpOwot
ICAgICAgfQotICAgICAgc2l6ZSArPSBvcHRpb25zXy5DYWxjdWxhdGVTaXplKF9yZXBlYXRlZF9v
cHRpb25zX2NvZGVjKTsKLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIE1lcmdlRnJvbShFbnVtVmFsdWUgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxs
KSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5OYW1lLkxlbmd0
aCAhPSAwKSB7Ci0gICAgICAgIE5hbWUgPSBvdGhlci5OYW1lOwotICAgICAgfQotICAgICAgaWYg
KG90aGVyLk51bWJlciAhPSAwKSB7Ci0gICAgICAgIE51bWJlciA9IG90aGVyLk51bWJlcjsKLSAg
ICAgIH0KLSAgICAgIG9wdGlvbnNfLkFkZChvdGhlci5vcHRpb25zXyk7Ci0gICAgfQotCi0gICAg
cHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAg
ICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7
Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
aW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSAxMDogewotICAgICAgICAgICAgTmFtZSA9IGlucHV0LlJlYWRTdHJpbmcoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDE2OiB7Ci0gICAgICAgICAg
ICBOdW1iZXIgPSBpbnB1dC5SZWFkSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBjYXNlIDI2OiB7Ci0gICAgICAgICAgICBvcHRpb25zXy5BZGRFbnRy
aWVzRnJvbShpbnB1dCwgX3JlcGVhdGVkX29wdGlvbnNfY29kZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAv
Ly8gPHN1bW1hcnk+Ci0gIC8vLyAgQSBwcm90b2NvbCBidWZmZXIgb3B0aW9uLCB3aGljaCBjYW4g
YmUgYXR0YWNoZWQgdG8gYSBtZXNzYWdlLCBmaWVsZCwKLSAgLy8vICBlbnVtZXJhdGlvbiwgZXRj
LgotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdn
ZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3Mg
T3B0aW9uIDogcGI6OklNZXNzYWdlPE9wdGlvbj4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRv
bmx5IHBiOjpNZXNzYWdlUGFyc2VyPE9wdGlvbj4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBh
cnNlcjxPcHRpb24+KCgpID0+IG5ldyBPcHRpb24oKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6
TWVzc2FnZVBhcnNlcjxPcHRpb24+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0K
LQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5UeXBlUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1s0XTsgfQotICAgIH0KLQot
ICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAg
ICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgT3B0aW9u
KCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQg
T25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBPcHRpb24oT3B0aW9uIG90aGVyKSA6IHRo
aXMoKSB7Ci0gICAgICBuYW1lXyA9IG90aGVyLm5hbWVfOwotICAgICAgVmFsdWUgPSBvdGhlci52
YWx1ZV8gIT0gbnVsbCA/IG90aGVyLlZhbHVlLkNsb25lKCkgOiBudWxsOwotICAgIH0KLQotICAg
IHB1YmxpYyBPcHRpb24gQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3IE9wdGlvbih0aGlzKTsK
LSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgIm5hbWUiIGZp
ZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IE5hbWVGaWVsZE51bWJlciA9IDE7
Ci0gICAgcHJpdmF0ZSBzdHJpbmcgbmFtZV8gPSAiIjsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAg
Ly8vICBUaGUgb3B0aW9uJ3MgbmFtZS4gRm9yIGV4YW1wbGUsIGAiamF2YV9wYWNrYWdlImAuCi0g
ICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RyaW5nIE5hbWUgewotICAgICAgZ2V0IHsg
cmV0dXJuIG5hbWVfOyB9Ci0gICAgICBzZXQgewotICAgICAgICBuYW1lXyA9IHBiOjpQcm90b1By
ZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInZhbHVlIiBmaWVsZC48
L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBWYWx1ZUZpZWxkTnVtYmVyID0gMjsKLSAg
ICBwcml2YXRlIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLkFueSB2YWx1
ZV87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIG9wdGlvbidzIHZhbHVlLiBGb3Ig
ZXhhbXBsZSwgYCJjb20uZ29vZ2xlLnByb3RvYnVmImAuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQW55IFZhbHVl
IHsKLSAgICAgIGdldCB7IHJldHVybiB2YWx1ZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHZh
bHVlXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29s
IEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgT3B0
aW9uKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMoT3B0aW9uIG90aGVyKSB7Ci0g
ICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0aGlzKSkg
ewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChOYW1lICE9IG90aGVy
Lk5hbWUpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICghb2JqZWN0LkVxdWFscyhWYWx1ZSwgb3Ro
ZXIuVmFsdWUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAx
OwotICAgICAgaWYgKE5hbWUuTGVuZ3RoICE9IDApIGhhc2ggXj0gTmFtZS5HZXRIYXNoQ29kZSgp
OwotICAgICAgaWYgKHZhbHVlXyAhPSBudWxsKSBoYXNoIF49IFZhbHVlLkdldEhhc2hDb2RlKCk7
Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5n
IFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3Rp
Y1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2Rl
ZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChOYW1lLkxlbmd0aCAhPSAwKSB7Ci0g
ICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVN0cmlu
ZyhOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmICh2YWx1ZV8gIT0gbnVsbCkgewotICAgICAgICBv
dXRwdXQuV3JpdGVSYXdUYWcoMTgpOwotICAgICAgICBvdXRwdXQuV3JpdGVNZXNzYWdlKFZhbHVl
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7Ci0g
ICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoTmFtZS5MZW5ndGggIT0gMCkgewotICAgICAg
ICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0ZVN0cmluZ1NpemUoTmFt
ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAodmFsdWVfICE9IG51bGwpIHsKLSAgICAgICAgc2l6ZSAr
PSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVNZXNzYWdlU2l6ZShWYWx1ZSk7Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJn
ZUZyb20oT3B0aW9uIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuTmFtZS5MZW5ndGggIT0gMCkgewot
ICAgICAgICBOYW1lID0gb3RoZXIuTmFtZTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci52YWx1
ZV8gIT0gbnVsbCkgewotICAgICAgICBpZiAodmFsdWVfID09IG51bGwpIHsKLSAgICAgICAgICB2
YWx1ZV8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQW55KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgVmFsdWUuTWVyZ2VGcm9tKG90aGVyLlZhbHVlKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJl
YW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5S
ZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIDEwOiB7Ci0gICAgICAgICAgICBOYW1lID0gaW5wdXQuUmVhZFN0
cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2Ug
MTg6IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZV8gPT0gbnVsbCkgewotICAgICAgICAgICAgICB2
YWx1ZV8gPSBuZXcgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuQW55KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnB1dC5SZWFkTWVzc2FnZSh2YWx1ZV8pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotCi0gIH0KLQotICAjZW5kcmVnaW9uCi0KLX0KLQotI2VuZHJlZ2lvbiBEZXNpZ25lciBnZW5l
cmF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25v
d25UeXBlcy9WYWx1ZVBhcnRpYWwuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dlbGxL
bm93blR5cGVzL1ZhbHVlUGFydGlhbC5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDM0YjU2MGRlMDRjY2MxZDE4ZGQyZmIyNTkzOTVkYzI3MThiZGI4MC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVm
L1dlbGxLbm93blR5cGVzL1ZhbHVlUGFydGlhbC5jcworKysgL2Rldi9udWxsCkBAIC0xLDk5ICsw
LDAgQEAKLe+7vyNyZWdpb24gQ29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jZW5kcmVnaW9uCi0KLW5hbWVzcGFjZSBHb29nbGUu
UHJvdG9idWYuV2VsbEtub3duVHlwZXMKLXsKLSAgICBwdWJsaWMgcGFydGlhbCBjbGFzcyBWYWx1
ZQotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29udmVuaWVuY2Ug
bWV0aG9kIHRvIGNyZWF0ZSBhIFZhbHVlIG1lc3NhZ2Ugd2l0aCBhIHN0cmluZyB2YWx1ZS4KLSAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VmFs
dWUgdG8gc2V0IGZvciB0aGUgU3RyaW5nVmFsdWUgcHJvcGVydHkuPC9wYXJhbT4KLSAgICAgICAg
Ly8vIDxyZXR1cm5zPkEgbmV3bHktY3JlYXRlZCBWYWx1ZSBtZXNzYWdlIHdpdGggdGhlIGdpdmVu
IHZhbHVlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBWYWx1ZSBGb3JTdHJpbmco
c3RyaW5nIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBQcm90b1ByZWNvbmRpdGlvbnMu
Q2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgVmFs
dWUgeyBTdHJpbmdWYWx1ZSA9IHZhbHVlIH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgICAgIC8vLyBDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgVmFsdWUg
bWVzc2FnZSB3aXRoIGEgbnVtYmVyIHZhbHVlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAg
ICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5WYWx1ZSB0byBzZXQgZm9yIHRoZSBOdW1iZXJW
YWx1ZSBwcm9wZXJ0eS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSBuZXdseS1jcmVh
dGVkIFZhbHVlIG1lc3NhZ2Ugd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuPC9yZXR1cm5zPgotICAgICAg
ICBwdWJsaWMgc3RhdGljIFZhbHVlIEZvck51bWJlcihkb3VibGUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBuZXcgVmFsdWUgeyBOdW1iZXJWYWx1ZSA9IHZhbHVlIH07Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb252ZW5pZW5j
ZSBtZXRob2QgdG8gY3JlYXRlIGEgVmFsdWUgbWVzc2FnZSB3aXRoIGEgQm9vbGVhbiB2YWx1ZS4K
LSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+
VmFsdWUgdG8gc2V0IGZvciB0aGUgQm9vbFZhbHVlIHByb3BlcnR5LjwvcGFyYW0+Ci0gICAgICAg
IC8vLyA8cmV0dXJucz5BIG5ld2x5LWNyZWF0ZWQgVmFsdWUgbWVzc2FnZSB3aXRoIHRoZSBnaXZl
biB2YWx1ZS48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgVmFsdWUgRm9yQm9vbChi
b29sIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFZhbHVlIHsgQm9v
bFZhbHVlID0gdmFsdWUgfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAg
ICAgICAgLy8vIENvbnZlbmllbmNlIG1ldGhvZCB0byBjcmVhdGUgYSBWYWx1ZSBtZXNzYWdlIHdp
dGggYSBudWxsIGluaXRpYWwgdmFsdWUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAg
IC8vLyA8cmV0dXJucz5BIG5ld2x5LWNyZWF0ZWQgVmFsdWUgbWVzc2FnZSBhIG51bGwgaW5pdGlh
bCB2YWx1ZS48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgVmFsdWUgRm9yTnVsbCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgVmFsdWUgeyBOdWxsVmFsdWUgPSAw
IH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb252
ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgVmFsdWUgbWVzc2FnZSB3aXRoIGFuIGluaXRpYWwg
bGlzdCBvZiB2YWx1ZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cmVt
YXJrcz5UaGUgdmFsdWVzIHByb3ZpZGVkIGFyZSBub3QgY2xvbmVkOyB0aGUgcmVmZXJlbmNlcyBh
cmUgY29waWVkIGRpcmVjdGx5LjwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgbmV3
bHktY3JlYXRlZCBWYWx1ZSBtZXNzYWdlIGFuIGluaXRpYWwgbGlzdCB2YWx1ZS48L3JldHVybnM+
Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgVmFsdWUgRm9yTGlzdChwYXJhbXMgVmFsdWVbXSB2YWx1
ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51
bGwodmFsdWVzLCAidmFsdWVzIik7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFZhbHVlIHsgTGlz
dFZhbHVlID0gbmV3IExpc3RWYWx1ZSB7IFZhbHVlcyA9IHsgdmFsdWVzIH0gfSB9OwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ29udmVuaWVuY2UgbWV0
aG9kIHRvIGNyZWF0ZSBhIFZhbHVlIG1lc3NhZ2Ugd2l0aCBhbiBpbml0aWFsIHN0cnVjdCB2YWx1
ZQotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJlbWFya3M+VGhlIHZhbHVl
IHByb3ZpZGVkIGlzIG5vdCBjbG9uZWQ7IHRoZSByZWZlcmVuY2UgaXMgY29waWVkIGRpcmVjdGx5
LjwvcmVtYXJrcz4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgbmV3bHktY3JlYXRlZCBWYWx1ZSBt
ZXNzYWdlIGFuIGluaXRpYWwgc3RydWN0IHZhbHVlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGlj
IHN0YXRpYyBWYWx1ZSBGb3JTdHJ1Y3QoU3RydWN0IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVlLCAidmFsdWUiKTsKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgVmFsdWUgeyBTdHJ1Y3RWYWx1ZSA9IHZhbHVlIH07Ci0gICAg
ICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dl
bGxLbm93blR5cGVzL1dyYXBwZXJzLmNzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxs
S25vd25UeXBlcy9XcmFwcGVycy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg4
NjdkMGUyNTljMDNiYzgwOTY2NTgxMWU1ZGM1YjYzYzRiMjZlYS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL1dl
bGxLbm93blR5cGVzL1dyYXBwZXJzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTA1NyArMCwwIEBA
Ci0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBF
RElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8KLSNwcmFnbWEg
d2FybmluZyBkaXNhYmxlIDE1OTEsIDA2MTIsIDMwMjEKLSNyZWdpb24gRGVzaWduZXIgZ2VuZXJh
dGVkIGNvZGUKLQotdXNpbmcgcGIgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1ZjsKLXVzaW5nIHBi
YyA9IGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLkNvbGxlY3Rpb25zOwotdXNpbmcgcGJyID0gZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbjsKLXVzaW5nIHNjZyA9IGdsb2JhbDo6U3lz
dGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzIHsKLQotICAvLy8gPHN1bW1hcnk+SG9sZGVyIGZvciByZWZsZWN0aW9uIGluZm9y
bWF0aW9uIGdlbmVyYXRlZCBmcm9tIGdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bzwvc3Vt
bWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVB
dHRyaWJ1dGUoKV0KLSAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIGNsYXNzIFdyYXBwZXJzUmVmbGVj
dGlvbiB7Ci0KLSAgICAjcmVnaW9uIERlc2NyaXB0b3IKLSAgICAvLy8gPHN1bW1hcnk+RmlsZSBk
ZXNjcmlwdG9yIGZvciBnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG88L3N1bW1hcnk+Ci0g
ICAgcHVibGljIHN0YXRpYyBwYnI6OkZpbGVEZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAg
Z2V0IHsgcmV0dXJuIGRlc2NyaXB0b3I7IH0KLSAgICB9Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcGJy
OjpGaWxlRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAgc3RhdGljIFdyYXBwZXJzUmVmbGVj
dGlvbigpIHsKLSAgICAgIGJ5dGVbXSBkZXNjcmlwdG9yRGF0YSA9IGdsb2JhbDo6U3lzdGVtLkNv
bnZlcnQuRnJvbUJhc2U2NFN0cmluZygKLSAgICAgICAgICBzdHJpbmcuQ29uY2F0KAotICAgICAg
ICAgICAgIkNoNW5iMjluYkdVdmNISnZkRzlpZFdZdmQzSmhjSEJsY25NdWNISnZkRzhTRDJkdmIy
ZHNaUzV3Y205MCIsCi0gICAgICAgICAgICAiYjJKMVppSWNDZ3RFYjNWaWJHVldZV3gxWlJJTkNn
VjJZV3gxWlJnQklBRW9BU0liQ2dwR2JHOWhkRlpoIiwKLSAgICAgICAgICAgICJiSFZsRWcwS0JY
WmhiSFZsR0FFZ0FTZ0NJaHNLQ2tsdWREWTBWbUZzZFdVU0RRb0ZkbUZzZFdVWUFTQUIiLAotICAg
ICAgICAgICAgIktBTWlIQW9MVlVsdWREWTBWbUZzZFdVU0RRb0ZkbUZzZFdVWUFTQUJLQVFpR3dv
S1NXNTBNekpXWVd4MSIsCi0gICAgICAgICAgICAiWlJJTkNnVjJZV3gxWlJnQklBRW9CU0ljQ2d0
VlNXNTBNekpXWVd4MVpSSU5DZ1YyWVd4MVpSZ0JJQUVvIiwKLSAgICAgICAgICAgICJEU0lhQ2ds
Q2IyOXNWbUZzZFdVU0RRb0ZkbUZzZFdVWUFTQUJLQWdpSEFvTFUzUnlhVzVuVm1Gc2RXVVMiLAot
ICAgICAgICAgICAgIkRRb0ZkbUZzZFdVWUFTQUJLQWtpR3dvS1FubDBaWE5XWVd4MVpSSU5DZ1Yy
WVd4MVpSZ0JJQUVvREVKLyIsCi0gICAgICAgICAgICAiQ2hOamIyMHVaMjl2WjJ4bExuQnliM1J2
WW5WbVFnMVhjbUZ3Y0dWeWMxQnliM1J2VUFGYUttZHBkR2gxIiwKLSAgICAgICAgICAgICJZaTVq
YjIwdloyOXNZVzVuTDNCeWIzUnZZblZtTDNCMGVYQmxjeTkzY21Gd2NHVnljNkFCQWZnQkFhSUMi
LAotICAgICAgICAgICAgIkEwZFFRcW9DSGtkdmIyZHNaUzVRY205MGIySjFaaTVYWld4c1MyNXZk
MjVVZVhCbGMySUdjSEp2ZEc4eiIpKTsKLSAgICAgIGRlc2NyaXB0b3IgPSBwYnI6OkZpbGVEZXNj
cmlwdG9yLkZyb21HZW5lcmF0ZWRDb2RlKGRlc2NyaXB0b3JEYXRhLAotICAgICAgICAgIG5ldyBw
YnI6OkZpbGVEZXNjcmlwdG9yW10geyB9LAotICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENs
clR5cGVJbmZvKG51bGwsIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5cGVJbmZvW10gewotICAgICAg
ICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLkRvdWJsZVZhbHVlKSwgZ2xvYmFsOjpHb29nbGUuUHJv
dG9idWYuV2VsbEtub3duVHlwZXMuRG91YmxlVmFsdWUuUGFyc2VyLCBuZXdbXXsgIlZhbHVlIiB9
LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6OkdlbmVyYXRlZENsclR5
cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5GbG9h
dFZhbHVlKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuRmxvYXRWYWx1
ZS5QYXJzZXIsIG5ld1tdeyAiVmFsdWUiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAg
ICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlBy
b3RvYnVmLldlbGxLbm93blR5cGVzLkludDY0VmFsdWUpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1
Zi5XZWxsS25vd25UeXBlcy5JbnQ2NFZhbHVlLlBhcnNlciwgbmV3W117ICJWYWx1ZSIgfSwgbnVs
bCwgbnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5m
byh0eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVUludDY0VmFs
dWUpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5VSW50NjRWYWx1ZS5Q
YXJzZXIsIG5ld1tdeyAiVmFsdWUiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAg
bmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmLldlbGxLbm93blR5cGVzLkludDMyVmFsdWUpLCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5X
ZWxsS25vd25UeXBlcy5JbnQzMlZhbHVlLlBhcnNlciwgbmV3W117ICJWYWx1ZSIgfSwgbnVsbCwg
bnVsbCwgbnVsbCksCi0gICAgICAgICAgICBuZXcgcGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbyh0
eXBlb2YoZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuVUludDMyVmFsdWUp
LCBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5VSW50MzJWYWx1ZS5QYXJz
ZXIsIG5ld1tdeyAiVmFsdWUiIH0sIG51bGwsIG51bGwsIG51bGwpLAotICAgICAgICAgICAgbmV3
IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9mKGdsb2JhbDo6R29vZ2xlLlByb3RvYnVm
LldlbGxLbm93blR5cGVzLkJvb2xWYWx1ZSksIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzLkJvb2xWYWx1ZS5QYXJzZXIsIG5ld1tdeyAiVmFsdWUiIH0sIG51bGwsIG51bGws
IG51bGwpLAotICAgICAgICAgICAgbmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm8odHlwZW9m
KGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzLlN0cmluZ1ZhbHVlKSwgZ2xv
YmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuU3RyaW5nVmFsdWUuUGFyc2VyLCBu
ZXdbXXsgIlZhbHVlIiB9LCBudWxsLCBudWxsLCBudWxsKSwKLSAgICAgICAgICAgIG5ldyBwYnI6
OkdlbmVyYXRlZENsclR5cGVJbmZvKHR5cGVvZihnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxs
S25vd25UeXBlcy5CeXRlc1ZhbHVlKSwgZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3du
VHlwZXMuQnl0ZXNWYWx1ZS5QYXJzZXIsIG5ld1tdeyAiVmFsdWUiIH0sIG51bGwsIG51bGwsIG51
bGwpCi0gICAgICAgICAgfSkpOwotICAgIH0KLSAgICAjZW5kcmVnaW9uCi0KLSAgfQotICAjcmVn
aW9uIE1lc3NhZ2VzCi0gIC8vLyA8c3VtbWFyeT4KLSAgLy8vICBXcmFwcGVyIG1lc3NhZ2UgZm9y
IGBkb3VibGVgLgotICAvLy8KLSAgLy8vICBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgYERv
dWJsZVZhbHVlYCBpcyBKU09OIG51bWJlci4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6
U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVi
bGljIHNlYWxlZCBwYXJ0aWFsIGNsYXNzIERvdWJsZVZhbHVlIDogcGI6OklNZXNzYWdlPERvdWJs
ZVZhbHVlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8
RG91YmxlVmFsdWU+IF9wYXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8RG91YmxlVmFsdWU+
KCgpID0+IG5ldyBEb3VibGVWYWx1ZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdl
UGFyc2VyPERvdWJsZVZhbHVlPiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0K
LSAgICBwdWJsaWMgc3RhdGljIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMu
V3JhcHBlcnNSZWZsZWN0aW9uLkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzBdOyB9Ci0gICAgfQot
Ci0gICAgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0g
ICAgICBnZXQgeyByZXR1cm4gRGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBEb3Vi
bGVWYWx1ZSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9uKCk7Ci0gICAgfQotCi0gICAgcGFydGlh
bCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBwdWJsaWMgRG91YmxlVmFsdWUoRG91Ymxl
VmFsdWUgb3RoZXIpIDogdGhpcygpIHsKLSAgICAgIHZhbHVlXyA9IG90aGVyLnZhbHVlXzsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgRG91YmxlVmFsdWUgQ2xvbmUoKSB7Ci0gICAgICByZXR1cm4gbmV3
IERvdWJsZVZhbHVlKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAidmFsdWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50
IFZhbHVlRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgZG91YmxlIHZhbHVlXzsKLSAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgLy8vICBUaGUgZG91YmxlIHZhbHVlLgotICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgcHVibGljIGRvdWJsZSBWYWx1ZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gdmFsdWVf
OyB9Ci0gICAgICBzZXQgewotICAgICAgICB2YWx1ZV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAg
ICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIERvdWJsZVZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgYm9vbCBFcXVhbHMoRG91YmxlVmFsdWUgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VF
cXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAg
ICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfQotICAgICAgaWYgKFZhbHVlICE9IG90aGVyLlZhbHVlKSByZXR1cm4gZmFs
c2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50
IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKFZhbHVlICE9
IDBEKSBoYXNoIF49IFZhbHVlLkdldEhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0
dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsK
LSAgICAgIGlmIChWYWx1ZSAhPSAwRCkgewotICAgICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOSk7
Ci0gICAgICAgIG91dHB1dC5Xcml0ZURvdWJsZShWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAg
ICAgaWYgKFZhbHVlICE9IDBEKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDg7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oRG91
YmxlVmFsdWUgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5WYWx1ZSAhPSAwRCkgewotICAgICAgICBW
YWx1ZSA9IG90aGVyLlZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1l
cmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0g
ICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0
Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0
RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgOTogewotICAgICAg
ICAgICAgVmFsdWUgPSBpbnB1dC5SZWFkRG91YmxlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIC8vLyA8c3Vt
bWFyeT4KLSAgLy8vICBXcmFwcGVyIG1lc3NhZ2UgZm9yIGBmbG9hdGAuCi0gIC8vLwotICAvLy8g
IFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgRmxvYXRWYWx1ZWAgaXMgSlNPTiBudW1iZXIu
Ci0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dl
ck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBG
bG9hdFZhbHVlIDogcGI6OklNZXNzYWdlPEZsb2F0VmFsdWU+IHsKLSAgICBwcml2YXRlIHN0YXRp
YyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxGbG9hdFZhbHVlPiBfcGFyc2VyID0gbmV3IHBi
OjpNZXNzYWdlUGFyc2VyPEZsb2F0VmFsdWU+KCgpID0+IG5ldyBGbG9hdFZhbHVlKCkpOwotICAg
IHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8RmxvYXRWYWx1ZT4gUGFyc2VyIHsgZ2V0
IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VE
ZXNjcmlwdG9yIERlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xl
LlByb3RvYnVmLldlbGxLbm93blR5cGVzLldyYXBwZXJzUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1l
c3NhZ2VUeXBlc1sxXTsgfQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6
OklNZXNzYWdlLkRlc2NyaXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0K
LSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXRWYWx1ZSgpIHsKLSAgICAgIE9uQ29uc3RydWN0aW9u
KCk7Ci0gICAgfQotCi0gICAgcGFydGlhbCB2b2lkIE9uQ29uc3RydWN0aW9uKCk7Ci0KLSAgICBw
dWJsaWMgRmxvYXRWYWx1ZShGbG9hdFZhbHVlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICB2YWx1
ZV8gPSBvdGhlci52YWx1ZV87Ci0gICAgfQotCi0gICAgcHVibGljIEZsb2F0VmFsdWUgQ2xvbmUo
KSB7Ci0gICAgICByZXR1cm4gbmV3IEZsb2F0VmFsdWUodGhpcyk7Ci0gICAgfQotCi0gICAgLy8v
IDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ2YWx1ZSIgZmllbGQuPC9zdW1tYXJ5Pgot
ICAgIHB1YmxpYyBjb25zdCBpbnQgVmFsdWVGaWVsZE51bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSBm
bG9hdCB2YWx1ZV87Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIGZsb2F0IHZhbHVl
LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGZsb2F0IFZhbHVlIHsKLSAgICAgIGdl
dCB7IHJldHVybiB2YWx1ZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHZhbHVlXyA9IHZhbHVl
OwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmpl
Y3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgRmxvYXRWYWx1ZSk7Ci0g
ICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKEZsb2F0VmFsdWUgb3RoZXIpIHsKLSAgICAg
IGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKFZhbHVlICE9IG90aGVyLlZh
bHVlKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAg
ICAgaWYgKFZhbHVlICE9IDBGKSBoYXNoIF49IFZhbHVlLkdldEhhc2hDb2RlKCk7Ci0gICAgICBy
ZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5n
KCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25vc3RpY1N0cmluZyh0
aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpDb2RlZE91dHB1dFN0
cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChWYWx1ZSAhPSAwRikgewotICAgICAgICBvdXRwdXQu
V3JpdGVSYXdUYWcoMTMpOwotICAgICAgICBvdXRwdXQuV3JpdGVGbG9hdChWYWx1ZSk7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50
IHNpemUgPSAwOwotICAgICAgaWYgKFZhbHVlICE9IDBGKSB7Ci0gICAgICAgIHNpemUgKz0gMSAr
IDQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBNZXJnZUZyb20oRmxvYXRWYWx1ZSBvdGhlcikgewotICAgICAgaWYgKG90aGVyID09IG51bGwp
IHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90aGVyLlZhbHVlICE9IDBG
KSB7Ci0gICAgICAgIFZhbHVlID0gb3RoZXIuVmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KSB7Ci0gICAg
ICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7
Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
aW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSAxMzogewotICAgICAgICAgICAgVmFsdWUgPSBpbnB1dC5SZWFkRmxvYXQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9
Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIFdyYXBwZXIgbWVzc2FnZSBmb3IgYGludDY0YC4K
LSAgLy8vCi0gIC8vLyAgVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBJbnQ2NFZhbHVlYCBp
cyBKU09OIHN0cmluZy4KLSAgLy8vIDwvc3VtbWFyeT4KLSAgW2dsb2JhbDo6U3lzdGVtLkRpYWdu
b3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV0KLSAgcHVibGljIHNlYWxlZCBw
YXJ0aWFsIGNsYXNzIEludDY0VmFsdWUgOiBwYjo6SU1lc3NhZ2U8SW50NjRWYWx1ZT4gewotICAg
IHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2VyPEludDY0VmFsdWU+IF9w
YXJzZXIgPSBuZXcgcGI6Ok1lc3NhZ2VQYXJzZXI8SW50NjRWYWx1ZT4oKCkgPT4gbmV3IEludDY0
VmFsdWUoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2FnZVBhcnNlcjxJbnQ2NFZhbHVl
PiBQYXJzZXIgeyBnZXQgeyByZXR1cm4gX3BhcnNlcjsgfSB9Ci0KLSAgICBwdWJsaWMgc3RhdGlj
IHBicjo6TWVzc2FnZURlc2NyaXB0b3IgRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4g
Z2xvYmFsOjpHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMuV3JhcHBlcnNSZWZsZWN0aW9u
LkRlc2NyaXB0b3IuTWVzc2FnZVR5cGVzWzJdOyB9Ci0gICAgfQotCi0gICAgcGJyOjpNZXNzYWdl
RGVzY3JpcHRvciBwYjo6SU1lc3NhZ2UuRGVzY3JpcHRvciB7Ci0gICAgICBnZXQgeyByZXR1cm4g
RGVzY3JpcHRvcjsgfQotICAgIH0KLQotICAgIHB1YmxpYyBJbnQ2NFZhbHVlKCkgewotICAgICAg
T25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rp
b24oKTsKLQotICAgIHB1YmxpYyBJbnQ2NFZhbHVlKEludDY0VmFsdWUgb3RoZXIpIDogdGhpcygp
IHsKLSAgICAgIHZhbHVlXyA9IG90aGVyLnZhbHVlXzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50
NjRWYWx1ZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgSW50NjRWYWx1ZSh0aGlzKTsKLSAg
ICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZvciB0aGUgInZhbHVlIiBmaWVs
ZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGludCBWYWx1ZUZpZWxkTnVtYmVyID0gMTsK
LSAgICBwcml2YXRlIGxvbmcgdmFsdWVfOwotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gIFRo
ZSBpbnQ2NCB2YWx1ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBsb25nIFZhbHVl
IHsKLSAgICAgIGdldCB7IHJldHVybiB2YWx1ZV87IH0KLSAgICAgIHNldCB7Ci0gICAgICAgIHZh
bHVlXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29s
IEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgSW50
NjRWYWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1YWxzKEludDY0VmFsdWUgb3Ro
ZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIs
IHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKFZhbHVl
ICE9IG90aGVyLlZhbHVlKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgewotICAgICAgaW50IGhh
c2ggPSAxOwotICAgICAgaWYgKFZhbHVlICE9IDBMKSBoYXNoIF49IFZhbHVlLkdldEhhc2hDb2Rl
KCk7Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgc3Ry
aW5nIFRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHBiOjpKc29uRm9ybWF0dGVyLlRvRGlhZ25v
c3RpY1N0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBXcml0ZVRvKHBiOjpD
b2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHsKLSAgICAgIGlmIChWYWx1ZSAhPSAwTCkgewotICAg
ICAgICBvdXRwdXQuV3JpdGVSYXdUYWcoOCk7Ci0gICAgICAgIG91dHB1dC5Xcml0ZUludDY0KFZh
bHVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7
Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoVmFsdWUgIT0gMEwpIHsKLSAgICAgICAg
c2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJbnQ2NFNpemUoVmFsdWUp
OwotICAgICAgfQotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
TWVyZ2VGcm9tKEludDY0VmFsdWUgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlci5WYWx1ZSAhPSAwTCkg
ewotICAgICAgICBWYWx1ZSA9IG90aGVyLlZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1
YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgewotICAgICAg
dWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkgewot
ICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlu
cHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
ODogewotICAgICAgICAgICAgVmFsdWUgPSBpbnB1dC5SZWFkSW50NjQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0K
LSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIFdyYXBwZXIgbWVzc2FnZSBmb3IgYHVpbnQ2NGAuCi0g
IC8vLwotICAvLy8gIFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgVUludDY0VmFsdWVgIGlz
IEpTT04gc3RyaW5nLgotICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25v
c3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBh
cnRpYWwgY2xhc3MgVUludDY0VmFsdWUgOiBwYjo6SU1lc3NhZ2U8VUludDY0VmFsdWU+IHsKLSAg
ICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxVSW50NjRWYWx1ZT4g
X3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxVSW50NjRWYWx1ZT4oKCkgPT4gbmV3IFVJ
bnQ2NFZhbHVlKCkpOwotICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8VUludDY0
VmFsdWU+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBz
dGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJl
dHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5XcmFwcGVyc1JlZmxl
Y3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbM107IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1l
c3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJl
dHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIFVJbnQ2NFZhbHVlKCkgewot
ICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25z
dHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBVSW50NjRWYWx1ZShVSW50NjRWYWx1ZSBvdGhlcikg
OiB0aGlzKCkgewotICAgICAgdmFsdWVfID0gb3RoZXIudmFsdWVfOwotICAgIH0KLQotICAgIHB1
YmxpYyBVSW50NjRWYWx1ZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgVUludDY0VmFsdWUo
dGhpcyk7Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ2
YWx1ZSIgZmllbGQuPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVmFsdWVGaWVsZE51
bWJlciA9IDE7Ci0gICAgcHJpdmF0ZSB1bG9uZyB2YWx1ZV87Ci0gICAgLy8vIDxzdW1tYXJ5Pgot
ICAgIC8vLyAgVGhlIHVpbnQ2NCB2YWx1ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1Ymxp
YyB1bG9uZyBWYWx1ZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gdmFsdWVfOyB9Ci0gICAgICBzZXQg
ewotICAgICAgICB2YWx1ZV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMg
b3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxz
KG90aGVyIGFzIFVJbnQ2NFZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbCBFcXVhbHMo
VUludDY0VmFsdWUgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIG51
bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZlcmVu
Y2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQot
ICAgICAgaWYgKFZhbHVlICE9IG90aGVyLlZhbHVlKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkg
ewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKFZhbHVlICE9IDBVTCkgaGFzaCBePSBW
YWx1ZS5HZXRIYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVi
bGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZv
cm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgV3JpdGVUbyhwYjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoVmFs
dWUgIT0gMFVMKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg4KTsKLSAgICAgICAgb3V0
cHV0LldyaXRlVUludDY0KFZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50
IENhbGN1bGF0ZVNpemUoKSB7Ci0gICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICBpZiAoVmFsdWUg
IT0gMFVMKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21w
dXRlVUludDY0U2l6ZShWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oVUludDY0VmFsdWUgb3RoZXIpIHsKLSAgICAg
IGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlm
IChvdGhlci5WYWx1ZSAhPSAwVUwpIHsKLSAgICAgICAgVmFsdWUgPSBvdGhlci5WYWx1ZTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRT
dHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAgICAgd2hpbGUgKCh0YWcgPSBpbnB1
dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNoKHRhZykgewotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZpZWxkKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAgIFZhbHVlID0gaW5wdXQuUmVh
ZFVJbnQ2NCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgV3JhcHBlciBt
ZXNzYWdlIGZvciBgaW50MzJgLgotICAvLy8KLSAgLy8vICBUaGUgSlNPTiByZXByZXNlbnRhdGlv
biBmb3IgYEludDMyVmFsdWVgIGlzIEpTT04gbnVtYmVyLgotICAvLy8gPC9zdW1tYXJ5PgotICBb
Z2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZSgp
XQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgSW50MzJWYWx1ZSA6IHBiOjpJTWVzc2Fn
ZTxJbnQzMlZhbHVlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQ
YXJzZXI8SW50MzJWYWx1ZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxJbnQzMlZh
bHVlPigoKSA9PiBuZXcgSW50MzJWYWx1ZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpNZXNz
YWdlUGFyc2VyPEludDMyVmFsdWU+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0K
LQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBl
cy5XcmFwcGVyc1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbNF07IH0KLSAgICB9
Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsK
LSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGljIElu
dDMyVmFsdWUoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRp
YWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIEludDMyVmFsdWUoSW50MzJW
YWx1ZSBvdGhlcikgOiB0aGlzKCkgewotICAgICAgdmFsdWVfID0gb3RoZXIudmFsdWVfOwotICAg
IH0KLQotICAgIHB1YmxpYyBJbnQzMlZhbHVlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5ldyBJ
bnQzMlZhbHVlKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1iZXIg
Zm9yIHRoZSAidmFsdWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50IFZh
bHVlRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgaW50IHZhbHVlXzsKLSAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgLy8vICBUaGUgaW50MzIgdmFsdWUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAg
ICBwdWJsaWMgaW50IFZhbHVlIHsKLSAgICAgIGdldCB7IHJldHVybiB2YWx1ZV87IH0KLSAgICAg
IHNldCB7Ci0gICAgICAgIHZhbHVlXyA9IHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1
YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBF
cXVhbHMob3RoZXIgYXMgSW50MzJWYWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wgRXF1
YWxzKEludDMyVmFsdWUgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIs
IG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChSZWZl
cmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
fQotICAgICAgaWYgKFZhbHVlICE9IG90aGVyLlZhbHVlKSByZXR1cm4gZmFsc2U7Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2Rl
KCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKFZhbHVlICE9IDApIGhhc2ggXj0g
VmFsdWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1
YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25G
b3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKFZh
bHVlICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDgpOwotICAgICAgICBvdXRw
dXQuV3JpdGVJbnQzMihWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBD
YWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYgKFZhbHVlICE9
IDApIHsKLSAgICAgICAgc2l6ZSArPSAxICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVJ
bnQzMlNpemUoVmFsdWUpOwotICAgICAgfQotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0g
ICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKEludDMyVmFsdWUgb3RoZXIpIHsKLSAgICAgIGlmIChv
dGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhl
ci5WYWx1ZSAhPSAwKSB7Ci0gICAgICAgIFZhbHVlID0gb3RoZXIuVmFsdWU7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0U3RyZWFtIGlu
cHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5wdXQuUmVhZFRh
ZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSA4OiB7Ci0gICAgICAgICAgICBWYWx1ZSA9IGlucHV0LlJlYWRJbnQzMigp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfQotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgV3JhcHBlciBtZXNzYWdlIGZv
ciBgdWludDMyYC4KLSAgLy8vCi0gIC8vLyAgVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBV
SW50MzJWYWx1ZWAgaXMgSlNPTiBudW1iZXIuCi0gIC8vLyA8L3N1bW1hcnk+Ci0gIFtnbG9iYWw6
OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldCi0gIHB1
YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBVSW50MzJWYWx1ZSA6IHBiOjpJTWVzc2FnZTxVSW50
MzJWYWx1ZT4gewotICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpNZXNzYWdlUGFyc2Vy
PFVJbnQzMlZhbHVlPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPFVJbnQzMlZhbHVl
PigoKSA9PiBuZXcgVUludDMyVmFsdWUoKSk7Ci0gICAgcHVibGljIHN0YXRpYyBwYjo6TWVzc2Fn
ZVBhcnNlcjxVSW50MzJWYWx1ZT4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfQot
Ci0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3Igewot
ICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVz
LldyYXBwZXJzUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1s1XTsgfQotICAgIH0K
LQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2NyaXB0b3Igewot
ICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgVUlu
dDMyVmFsdWUoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBhcnRp
YWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIFVJbnQzMlZhbHVlKFVJbnQz
MlZhbHVlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICB2YWx1ZV8gPSBvdGhlci52YWx1ZV87Ci0g
ICAgfQotCi0gICAgcHVibGljIFVJbnQzMlZhbHVlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5l
dyBVSW50MzJWYWx1ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+RmllbGQgbnVt
YmVyIGZvciB0aGUgInZhbHVlIiBmaWVsZC48L3N1bW1hcnk+Ci0gICAgcHVibGljIGNvbnN0IGlu
dCBWYWx1ZUZpZWxkTnVtYmVyID0gMTsKLSAgICBwcml2YXRlIHVpbnQgdmFsdWVfOwotICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAvLy8gIFRoZSB1aW50MzIgdmFsdWUuCi0gICAgLy8vIDwvc3VtbWFy
eT4KLSAgICBwdWJsaWMgdWludCBWYWx1ZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gdmFsdWVfOyB9
Ci0gICAgICBzZXQgewotICAgICAgICB2YWx1ZV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICBy
ZXR1cm4gRXF1YWxzKG90aGVyIGFzIFVJbnQzMlZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
Ym9vbCBFcXVhbHMoVUludDMyVmFsdWUgb3RoZXIpIHsKLSAgICAgIGlmIChSZWZlcmVuY2VFcXVh
bHMob3RoZXIsIG51bGwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAg
IGlmIChSZWZlcmVuY2VFcXVhbHMob3RoZXIsIHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgfQotICAgICAgaWYgKFZhbHVlICE9IG90aGVyLlZhbHVlKSByZXR1cm4gZmFsc2U7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgaW50IEdl
dEhhc2hDb2RlKCkgewotICAgICAgaW50IGhhc2ggPSAxOwotICAgICAgaWYgKFZhbHVlICE9IDAp
IGhhc2ggXj0gVmFsdWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0K
LQotICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4g
cGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAg
IHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAg
ICAgaWYgKFZhbHVlICE9IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDgpOwotICAg
ICAgICBvdXRwdXQuV3JpdGVVSW50MzIoVmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1
YmxpYyBpbnQgQ2FsY3VsYXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlm
IChWYWx1ZSAhPSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVh
bS5Db21wdXRlVUludDMyU2l6ZShWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oVUludDMyVmFsdWUgb3RoZXIpIHsK
LSAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAg
ICAgIGlmIChvdGhlci5WYWx1ZSAhPSAwKSB7Ci0gICAgICAgIFZhbHVlID0gb3RoZXIuVmFsdWU7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElu
cHV0U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0g
aW5wdXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4OiB7Ci0gICAgICAgICAgICBWYWx1ZSA9IGlucHV0
LlJlYWRVSW50MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5PgotICAvLy8gIFdyYXBw
ZXIgbWVzc2FnZSBmb3IgYGJvb2xgLgotICAvLy8KLSAgLy8vICBUaGUgSlNPTiByZXByZXNlbnRh
dGlvbiBmb3IgYEJvb2xWYWx1ZWAgaXMgSlNPTiBgdHJ1ZWAgYW5kIGBmYWxzZWAuCi0gIC8vLyA8
L3N1bW1hcnk+Ci0gIFtnbG9iYWw6OlN5c3RlbS5EaWFnbm9zdGljcy5EZWJ1Z2dlck5vblVzZXJD
b2RlQXR0cmlidXRlKCldCi0gIHB1YmxpYyBzZWFsZWQgcGFydGlhbCBjbGFzcyBCb29sVmFsdWUg
OiBwYjo6SU1lc3NhZ2U8Qm9vbFZhbHVlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkg
cGI6Ok1lc3NhZ2VQYXJzZXI8Qm9vbFZhbHVlPiBfcGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFy
c2VyPEJvb2xWYWx1ZT4oKCkgPT4gbmV3IEJvb2xWYWx1ZSgpKTsKLSAgICBwdWJsaWMgc3RhdGlj
IHBiOjpNZXNzYWdlUGFyc2VyPEJvb2xWYWx1ZT4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJz
ZXI7IH0gfQotCi0gICAgcHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2Ny
aXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIGdsb2JhbDo6R29vZ2xlLlByb3RvYnVmLldlbGxL
bm93blR5cGVzLldyYXBwZXJzUmVmbGVjdGlvbi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1s2XTsg
fQotICAgIH0KLQotICAgIHBicjo6TWVzc2FnZURlc2NyaXB0b3IgcGI6OklNZXNzYWdlLkRlc2Ny
aXB0b3IgewotICAgICAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgQm9vbFZhbHVlKCkgewotICAgICAgT25Db25zdHJ1Y3Rpb24oKTsKLSAgICB9Ci0KLSAg
ICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQotICAgIHB1YmxpYyBCb29sVmFsdWUo
Qm9vbFZhbHVlIG90aGVyKSA6IHRoaXMoKSB7Ci0gICAgICB2YWx1ZV8gPSBvdGhlci52YWx1ZV87
Ci0gICAgfQotCi0gICAgcHVibGljIEJvb2xWYWx1ZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBu
ZXcgQm9vbFZhbHVlKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAidmFsdWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50
IFZhbHVlRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgYm9vbCB2YWx1ZV87Ci0gICAgLy8v
IDxzdW1tYXJ5PgotICAgIC8vLyAgVGhlIGJvb2wgdmFsdWUuCi0gICAgLy8vIDwvc3VtbWFyeT4K
LSAgICBwdWJsaWMgYm9vbCBWYWx1ZSB7Ci0gICAgICBnZXQgeyByZXR1cm4gdmFsdWVfOyB9Ci0g
ICAgICBzZXQgewotICAgICAgICB2YWx1ZV8gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1
cm4gRXF1YWxzKG90aGVyIGFzIEJvb2xWYWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2wg
RXF1YWxzKEJvb2xWYWx1ZSBvdGhlcikgewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhl
ciwgbnVsbCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJl
ZmVyZW5jZUVxdWFscyhvdGhlciwgdGhpcykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICB9Ci0gICAgICBpZiAoVmFsdWUgIT0gb3RoZXIuVmFsdWUpIHJldHVybiBmYWxzZTsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENv
ZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9IDE7Ci0gICAgICBpZiAoVmFsdWUgIT0gZmFsc2UpIGhh
c2ggXj0gVmFsdWUuR2V0SGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQot
ICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6
Okpzb25Gb3JtYXR0ZXIuVG9EaWFnbm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1
YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAg
aWYgKFZhbHVlICE9IGZhbHNlKSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZyg4KTsKLSAg
ICAgICAgb3V0cHV0LldyaXRlQm9vbChWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVi
bGljIGludCBDYWxjdWxhdGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYg
KFZhbHVlICE9IGZhbHNlKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIDE7Ci0gICAgICB9Ci0gICAg
ICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oQm9vbFZh
bHVlIG90aGVyKSB7Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIuVmFsdWUgIT0gZmFsc2UpIHsKLSAgICAgICAgVmFs
dWUgPSBvdGhlci5WYWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBNZXJn
ZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICAgIHVpbnQgdGFnOwotICAg
ICAgd2hpbGUgKCh0YWcgPSBpbnB1dC5SZWFkVGFnKCkpICE9IDApIHsKLSAgICAgICAgc3dpdGNo
KHRhZykgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbnB1dC5Ta2lwTGFzdEZp
ZWxkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAg
ICAgIFZhbHVlID0gaW5wdXQuUmVhZEJvb2woKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgLy8vIDxzdW1tYXJ5
PgotICAvLy8gIFdyYXBwZXIgbWVzc2FnZSBmb3IgYHN0cmluZ2AuCi0gIC8vLwotICAvLy8gIFRo
ZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgU3RyaW5nVmFsdWVgIGlzIEpTT04gc3RyaW5nLgot
ICAvLy8gPC9zdW1tYXJ5PgotICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJO
b25Vc2VyQ29kZUF0dHJpYnV0ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgU3Ry
aW5nVmFsdWUgOiBwYjo6SU1lc3NhZ2U8U3RyaW5nVmFsdWU+IHsKLSAgICBwcml2YXRlIHN0YXRp
YyByZWFkb25seSBwYjo6TWVzc2FnZVBhcnNlcjxTdHJpbmdWYWx1ZT4gX3BhcnNlciA9IG5ldyBw
Yjo6TWVzc2FnZVBhcnNlcjxTdHJpbmdWYWx1ZT4oKCkgPT4gbmV3IFN0cmluZ1ZhbHVlKCkpOwot
ICAgIHB1YmxpYyBzdGF0aWMgcGI6Ok1lc3NhZ2VQYXJzZXI8U3RyaW5nVmFsdWU+IFBhcnNlciB7
IGdldCB7IHJldHVybiBfcGFyc2VyOyB9IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNz
YWdlRGVzY3JpcHRvciBEZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdv
b2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcy5XcmFwcGVyc1JlZmxlY3Rpb24uRGVzY3JpcHRv
ci5NZXNzYWdlVHlwZXNbN107IH0KLSAgICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9y
IHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9yIHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9y
OyB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1ZhbHVlKCkgewotICAgICAgT25Db25zdHJ1
Y3Rpb24oKTsKLSAgICB9Ci0KLSAgICBwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rpb24oKTsKLQot
ICAgIHB1YmxpYyBTdHJpbmdWYWx1ZShTdHJpbmdWYWx1ZSBvdGhlcikgOiB0aGlzKCkgewotICAg
ICAgdmFsdWVfID0gb3RoZXIudmFsdWVfOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdWYWx1
ZSBDbG9uZSgpIHsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nVmFsdWUodGhpcyk7Ci0gICAgfQot
Ci0gICAgLy8vIDxzdW1tYXJ5PkZpZWxkIG51bWJlciBmb3IgdGhlICJ2YWx1ZSIgZmllbGQuPC9z
dW1tYXJ5PgotICAgIHB1YmxpYyBjb25zdCBpbnQgVmFsdWVGaWVsZE51bWJlciA9IDE7Ci0gICAg
cHJpdmF0ZSBzdHJpbmcgdmFsdWVfID0gIiI7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAg
VGhlIHN0cmluZyB2YWx1ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdHJpbmcg
VmFsdWUgewotICAgICAgZ2V0IHsgcmV0dXJuIHZhbHVlXzsgfQotICAgICAgc2V0IHsKLSAgICAg
ICAgdmFsdWVfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFsdWUsICJ2
YWx1ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFs
cyhvYmplY3Qgb3RoZXIpIHsKLSAgICAgIHJldHVybiBFcXVhbHMob3RoZXIgYXMgU3RyaW5nVmFs
dWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhTdHJpbmdWYWx1ZSBvdGhlcikg
ewotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhvdGhlciwgdGhp
cykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoVmFsdWUgIT0g
b3RoZXIuVmFsdWUpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKSB7Ci0gICAgICBpbnQgaGFzaCA9
IDE7Ci0gICAgICBpZiAoVmFsdWUuTGVuZ3RoICE9IDApIGhhc2ggXj0gVmFsdWUuR2V0SGFzaENv
ZGUoKTsKLSAgICAgIHJldHVybiBoYXNoOwotICAgIH0KLQotICAgIHB1YmxpYyBvdmVycmlkZSBz
dHJpbmcgVG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gcGI6Okpzb25Gb3JtYXR0ZXIuVG9EaWFn
bm9zdGljU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6
OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgICAgaWYgKFZhbHVlLkxlbmd0aCAhPSAw
KSB7Ci0gICAgICAgIG91dHB1dC5Xcml0ZVJhd1RhZygxMCk7Ci0gICAgICAgIG91dHB1dC5Xcml0
ZVN0cmluZyhWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBDYWxjdWxh
dGVTaXplKCkgewotICAgICAgaW50IHNpemUgPSAwOwotICAgICAgaWYgKFZhbHVlLkxlbmd0aCAh
PSAwKSB7Ci0gICAgICAgIHNpemUgKz0gMSArIHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRl
U3RyaW5nU2l6ZShWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oU3RyaW5nVmFsdWUgb3RoZXIpIHsKLSAgICAgIGlm
IChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChv
dGhlci5WYWx1ZS5MZW5ndGggIT0gMCkgewotICAgICAgICBWYWx1ZSA9IG90aGVyLlZhbHVlOwot
ICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIE1lcmdlRnJvbShwYjo6Q29kZWRJbnB1
dFN0cmVhbSBpbnB1dCkgewotICAgICAgdWludCB0YWc7Ci0gICAgICB3aGlsZSAoKHRhZyA9IGlu
cHV0LlJlYWRUYWcoKSkgIT0gMCkgewotICAgICAgICBzd2l0Y2godGFnKSB7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGlucHV0LlNraXBMYXN0RmllbGQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIFZhbHVlID0gaW5wdXQu
UmVhZFN0cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfQotCi0gIH0KLQotICAvLy8gPHN1bW1hcnk+Ci0gIC8vLyAgV3JhcHBl
ciBtZXNzYWdlIGZvciBgYnl0ZXNgLgotICAvLy8KLSAgLy8vICBUaGUgSlNPTiByZXByZXNlbnRh
dGlvbiBmb3IgYEJ5dGVzVmFsdWVgIGlzIEpTT04gc3RyaW5nLgotICAvLy8gPC9zdW1tYXJ5Pgot
ICBbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0
ZSgpXQotICBwdWJsaWMgc2VhbGVkIHBhcnRpYWwgY2xhc3MgQnl0ZXNWYWx1ZSA6IHBiOjpJTWVz
c2FnZTxCeXRlc1ZhbHVlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3Nh
Z2VQYXJzZXI8Qnl0ZXNWYWx1ZT4gX3BhcnNlciA9IG5ldyBwYjo6TWVzc2FnZVBhcnNlcjxCeXRl
c1ZhbHVlPigoKSA9PiBuZXcgQnl0ZXNWYWx1ZSgpKTsKLSAgICBwdWJsaWMgc3RhdGljIHBiOjpN
ZXNzYWdlUGFyc2VyPEJ5dGVzVmFsdWU+IFBhcnNlciB7IGdldCB7IHJldHVybiBfcGFyc2VyOyB9
IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgcGJyOjpNZXNzYWdlRGVzY3JpcHRvciBEZXNjcmlwdG9y
IHsKLSAgICAgIGdldCB7IHJldHVybiBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcy5XcmFwcGVyc1JlZmxlY3Rpb24uRGVzY3JpcHRvci5NZXNzYWdlVHlwZXNbOF07IH0KLSAg
ICB9Ci0KLSAgICBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIHBiOjpJTWVzc2FnZS5EZXNjcmlwdG9y
IHsKLSAgICAgIGdldCB7IHJldHVybiBEZXNjcmlwdG9yOyB9Ci0gICAgfQotCi0gICAgcHVibGlj
IEJ5dGVzVmFsdWUoKSB7Ci0gICAgICBPbkNvbnN0cnVjdGlvbigpOwotICAgIH0KLQotICAgIHBh
cnRpYWwgdm9pZCBPbkNvbnN0cnVjdGlvbigpOwotCi0gICAgcHVibGljIEJ5dGVzVmFsdWUoQnl0
ZXNWYWx1ZSBvdGhlcikgOiB0aGlzKCkgewotICAgICAgdmFsdWVfID0gb3RoZXIudmFsdWVfOwot
ICAgIH0KLQotICAgIHB1YmxpYyBCeXRlc1ZhbHVlIENsb25lKCkgewotICAgICAgcmV0dXJuIG5l
dyBCeXRlc1ZhbHVlKHRoaXMpOwotICAgIH0KLQotICAgIC8vLyA8c3VtbWFyeT5GaWVsZCBudW1i
ZXIgZm9yIHRoZSAidmFsdWUiIGZpZWxkLjwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY29uc3QgaW50
IFZhbHVlRmllbGROdW1iZXIgPSAxOwotICAgIHByaXZhdGUgcGI6OkJ5dGVTdHJpbmcgdmFsdWVf
ID0gcGI6OkJ5dGVTdHJpbmcuRW1wdHk7Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgVGhl
IGJ5dGVzIHZhbHVlLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHBiOjpCeXRlU3Ry
aW5nIFZhbHVlIHsKLSAgICAgIGdldCB7IHJldHVybiB2YWx1ZV87IH0KLSAgICAgIHNldCB7Ci0g
ICAgICAgIHZhbHVlXyA9IHBiOjpQcm90b1ByZWNvbmRpdGlvbnMuQ2hlY2tOb3ROdWxsKHZhbHVl
LCAidmFsdWUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBF
cXVhbHMob2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIEJ5dGVz
VmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sIEVxdWFscyhCeXRlc1ZhbHVlIG90aGVy
KSB7Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCBudWxsKSkgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG90aGVyLCB0
aGlzKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChWYWx1ZSAh
PSBvdGhlci5WYWx1ZSkgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpIHsKLSAgICAgIGludCBoYXNo
ID0gMTsKLSAgICAgIGlmIChWYWx1ZS5MZW5ndGggIT0gMCkgaGFzaCBePSBWYWx1ZS5HZXRIYXNo
Q29kZSgpOwotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfQotCi0gICAgcHVibGljIG92ZXJyaWRl
IHN0cmluZyBUb1N0cmluZygpIHsKLSAgICAgIHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0Rp
YWdub3N0aWNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgV3JpdGVUbyhw
Yjo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB7Ci0gICAgICBpZiAoVmFsdWUuTGVuZ3RoICE9
IDApIHsKLSAgICAgICAgb3V0cHV0LldyaXRlUmF3VGFnKDEwKTsKLSAgICAgICAgb3V0cHV0Lldy
aXRlQnl0ZXMoVmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgQ2FsY3Vs
YXRlU2l6ZSgpIHsKLSAgICAgIGludCBzaXplID0gMDsKLSAgICAgIGlmIChWYWx1ZS5MZW5ndGgg
IT0gMCkgewotICAgICAgICBzaXplICs9IDEgKyBwYjo6Q29kZWRPdXRwdXRTdHJlYW0uQ29tcHV0
ZUJ5dGVzU2l6ZShWYWx1ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBNZXJnZUZyb20oQnl0ZXNWYWx1ZSBvdGhlcikgewotICAgICAgaWYg
KG90aGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKG90
aGVyLlZhbHVlLkxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIFZhbHVlID0gb3RoZXIuVmFsdWU7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgTWVyZ2VGcm9tKHBiOjpDb2RlZElucHV0
U3RyZWFtIGlucHV0KSB7Ci0gICAgICB1aW50IHRhZzsKLSAgICAgIHdoaWxlICgodGFnID0gaW5w
dXQuUmVhZFRhZygpKSAhPSAwKSB7Ci0gICAgICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgaW5wdXQuU2tpcExhc3RGaWVsZCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMDogewotICAgICAgICAgICAgVmFsdWUgPSBpbnB1dC5S
ZWFkQnl0ZXMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgI2VuZHJlZ2lvbgotCi19Ci0KLSNlbmRyZWdpb24g
RGVzaWduZXIgZ2VuZXJhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvY3NoYXJwL3NyYy9Hb29nbGUuUHJv
dG9idWYvV2VsbEtub3duVHlwZXMvV3JhcHBlcnNQYXJ0aWFsLmNzIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2ds
ZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBlcy9XcmFwcGVyc1BhcnRpYWwuY3MKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDlmNjIwZWI0MDEyZTM1NDIxMzgzY2U1NDRmNTFkNzA4N2Y0MTAw
YTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAv
c3JjL0dvb2dsZS5Qcm90b2J1Zi9XZWxsS25vd25UeXBlcy9XcmFwcGVyc1BhcnRpYWwuY3MKKysr
IC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi3vu78jcmVnaW9uIENvcHlyaWdodCBub3RpY2Ug
YW5kIGxpY2Vuc2UKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2VuZHJlZ2lv
bgotCi1uYW1lc3BhY2UgR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzCi17Ci0gICAgcHVi
bGljIHN0YXRpYyBwYXJ0aWFsIGNsYXNzIFdyYXBwZXJzUmVmbGVjdGlvbgotICAgIHsKLSAgICAg
ICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gRmllbGQgbnVtYmVyIGZvciB0aGUgc2luZ2xl
ICJ2YWx1ZSIgZmllbGQgaW4gYWxsIHdyYXBwZXIgdHlwZXMuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIGludGVybmFsIGNvbnN0IGludCBXcmFwcGVyVmFsdWVGaWVsZE51bWJlciA9
IEludDMyVmFsdWUuVmFsdWVGaWVsZE51bWJlcjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFy
cC9zcmMvR29vZ2xlLlByb3RvYnVmL1dpcmVGb3JtYXQuY3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvR29vZ2xlLlBy
b3RvYnVmL1dpcmVGb3JtYXQuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ODRk
YTUyMDUyMDRmNmU4YzIzYTNjMzA4YTAyZGM3NzFkOTM4MmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9XaXJl
Rm9ybWF0LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLSNyZWdpb24gQ29weXJp
Z2h0IG5vdGljZSBhbmQgbGljZW5zZQotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0jZW5kcmVnaW9uCi0KLW5hbWVzcGFjZSBHb29nbGUuUHJvdG9idWYKLXsKLSAgICAvLy8gPHN1
bW1hcnk+Ci0gICAgLy8vIFRoaXMgY2xhc3MgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBQcm90
b2NvbCBCdWZmZXIgTGlicmFyeSBhbmQgZ2VuZXJhdGVkCi0gICAgLy8vIG1lc3NhZ2UgaW1wbGVt
ZW50YXRpb25zLiBJdCBpcyBwdWJsaWMgb25seSBmb3IgdGhlIHNha2Ugb2YgdGhvc2UgZ2VuZXJh
dGVkCi0gICAgLy8vIG1lc3NhZ2VzLiBPdGhlcnMgc2hvdWxkIG5vdCB1c2UgdGhpcyBjbGFzcyBk
aXJlY3RseS4KLSAgICAvLy8gPHBhcmE+Ci0gICAgLy8vIFRoaXMgY2xhc3MgY29udGFpbnMgY29u
c3RhbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHVzZWZ1bCBmb3IgZGVhbGluZyB3aXRoCi0gICAg
Ly8vIHRoZSBQcm90b2NvbCBCdWZmZXIgd2lyZSBmb3JtYXQuCi0gICAgLy8vIDwvcGFyYT4KLSAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgV2lyZUZvcm1hdAotICAg
IHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV2lyZSB0eXBlcyB3aXRoaW4g
cHJvdG9idWYgZW5jb2RpbmcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1Ymxp
YyBlbnVtIFdpcmVUeXBlIDogdWludAotICAgICAgICB7Ci0gICAgICAgICAgICAvLy8gPHN1bW1h
cnk+Ci0gICAgICAgICAgICAvLy8gVmFyaWFibGUtbGVuZ3RoIGludGVnZXIuCi0gICAgICAgICAg
ICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgVmFyaW50ID0gMCwKLSAgICAgICAgICAgIC8v
LyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBBIGZpeGVkLWxlbmd0aCA2NC1iaXQgdmFsdWUu
Ci0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgRml4ZWQ2NCA9IDEsCi0g
ICAgICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgICAgICAvLy8gQSBsZW5ndGgtZGVsaW1p
dGVkIHZhbHVlLCBpLmUuIGEgbGVuZ3RoIGZvbGxvd2VkIGJ5IHRoYXQgbWFueSBieXRlcyBvZiBk
YXRhLgotICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgIExlbmd0aERlbGlt
aXRlZCA9IDIsCi0gICAgICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgICAgICAvLy8gQSAi
c3RhcnQgZ3JvdXAiIHZhbHVlIC0gbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9u
LgotICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgIFN0YXJ0R3JvdXAgPSAz
LAotICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAgICAgLy8vIEFuICJlbmQgZ3Jv
dXAiIHZhbHVlIC0gbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLgotICAgICAg
ICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgICAgIEVuZEdyb3VwID0gNCwKLSAgICAgICAg
ICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBBIGZpeGVkLWxlbmd0aCAzMi1iaXQg
dmFsdWUuCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgRml4ZWQzMiA9
IDUKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBpbnQgVGFnVHlw
ZUJpdHMgPSAzOwotICAgICAgICBwcml2YXRlIGNvbnN0IHVpbnQgVGFnVHlwZU1hc2sgPSAoMSA8
PCBUYWdUeXBlQml0cykgLSAxOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8v
IEdpdmVuIGEgdGFnIHZhbHVlLCBkZXRlcm1pbmVzIHRoZSB3aXJlIHR5cGUgKGxvd2VyIDMgYml0
cykuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgV2lyZVR5
cGUgR2V0VGFnV2lyZVR5cGUodWludCB0YWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAoV2lyZVR5cGUpICh0YWcgJiBUYWdUeXBlTWFzayk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
Ly8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHaXZlbiBhIHRhZyB2YWx1ZSwgZGV0ZXJtaW5lcyB0
aGUgZmllbGQgbnVtYmVyICh0aGUgdXBwZXIgMjkgYml0cykuCi0gICAgICAgIC8vLyA8L3N1bW1h
cnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IEdldFRhZ0ZpZWxkTnVtYmVyKHVpbnQgdGFn
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGludCkgdGFnID4+IFRhZ1R5cGVCaXRz
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gTWFrZXMg
YSB0YWcgdmFsdWUgZ2l2ZW4gYSBmaWVsZCBudW1iZXIgYW5kIHdpcmUgdHlwZS4KLSAgICAgICAg
Ly8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyB1aW50IE1ha2VUYWcoaW50IGZp
ZWxkTnVtYmVyLCBXaXJlVHlwZSB3aXJlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICh1aW50KSAoZmllbGROdW1iZXIgPDwgVGFnVHlwZUJpdHMpIHwgKHVpbnQpIHdpcmVUeXBl
OwotICAgICAgICB9ICAgICAgICAKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL0dvb2dsZS5Qcm90b2J1Zi9wYWNrYWdlcy5jb25maWcg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvR29vZ2xlLlByb3RvYnVmL3BhY2thZ2VzLmNvbmZpZwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDBiOGZkOTI3ZWMxOTMwMTEzMmI0YjdiZGU3YWJhOGI2ZGI5MmU5
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2NzaGFycC9z
cmMvR29vZ2xlLlByb3RvYnVmL3BhY2thZ2VzLmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDQg
KzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxwYWNr
YWdlcz4KLSAgPHBhY2thZ2UgaWQ9Ik51U3BlYy5SZWZlcmVuY2VHZW5lcmF0b3IiIHZlcnNpb249
IjEuNC4xIiB0YXJnZXRGcmFtZXdvcms9InBvcnRhYmxlNDUtbmV0NDUrd2luOCt3cDgrd3BhODEi
IGRldmVsb3BtZW50RGVwZW5kZW5jeT0idHJ1ZSIgLz4KLTwvcGFja2FnZXM+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9jc2hhcnAvc3JjL3BhY2thZ2VzL3JlcG9zaXRv
cmllcy5jb25maWcgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2NzaGFycC9zcmMvcGFja2FnZXMvcmVwb3NpdG9yaWVzLmNvbmZpZwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAzNzk0MTI5OTFjZTNhMjkyOWYxMjZmNTUwNzk5
MjVhOTNkNWVkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2NzaGFycC9zcmMvcGFja2FnZXMvcmVwb3NpdG9yaWVzLmNvbmZpZworKysgL2Rldi9udWxsCkBA
IC0xLDQgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4K
LTxyZXBvc2l0b3JpZXM+Ci0gIDxyZXBvc2l0b3J5IHBhdGg9Ii4uXEdvb2dsZS5Qcm90b2J1Zi5U
ZXN0XHBhY2thZ2VzLmNvbmZpZyIgLz4KLTwvcmVwb3NpdG9yaWVzPgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZG9jcy9zd2lmdC9EZXNpZ25Eb2MubWQgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2RvY3Mvc3dp
ZnQvRGVzaWduRG9jLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjRhNGQzZjFi
OGVjYTcxYTQ5NWRjZjg3NTQwYjQ3YjNkOWYwYzBjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvZG9jcy9zd2lmdC9EZXNpZ25Eb2MubWQKKysrIC9kZXYvbnVs
bApAQCAtMSw2NzQgKzAsMCBAQAotIyBQcm90b2NvbCBCdWZmZXJzIGluIFN3aWZ0Ci0KLSMjIE9i
amVjdGl2ZQotCi1UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgdXNlci1mYWNpbmcgQVBJIGFu
ZCBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZgotcHJvdG8yIGFuZCBwcm90bzMgbWVzc2FnZXMg
aW4gQXBwbGXigJlzIFN3aWZ0IHByb2dyYW1taW5nIGxhbmd1YWdlLgotCi1PbmUgb2YgdGhlIGtl
eSBnb2FscyBvZiBwcm90b2J1ZnMgaXMgdG8gcHJvdmlkZSBpZGlvbWF0aWMgQVBJcyBmb3IgZWFj
aAotbGFuZ3VhZ2UuIEluIHRoYXQgdmVpbiwgKippbnRlcm9wZXJhYmlsaXR5IHdpdGggT2JqZWN0
aXZlLUMgaXMgYSBub24tZ29hbCBvZgotdGhpcyBwcm9wb3NhbC4qKiBQcm90b2J1ZiB1c2VycyB3
aG8gbmVlZCB0byBwYXNzIG1lc3NhZ2VzIGJldHdlZW4gT2JqZWN0aXZlLUMKLWFuZCBTd2lmdCBj
b2RlIGluIHRoZSBzYW1lIGFwcGxpY2F0aW9uIHNob3VsZCB1c2UgdGhlIGV4aXN0aW5nIE9iamVj
dGl2ZS1DIHByb3RvCi1saWJyYXJ5LiBUaGUgZ29hbCBvZiB0aGUgZWZmb3J0IGRlc2NyaWJlZCBo
ZXJlIGlzIHRvIHByb3ZpZGUgYW4gQVBJIGZvciBwcm90b2J1ZgotbWVzc2FnZXMgdGhhdCB1c2Vz
IGZlYXR1cmVzIHNwZWNpZmljIHRvIFN3aWZ04oCUb3B0aW9uYWwgdHlwZXMsIGFsZ2VicmFpYwot
ZW51bWVyYXRlZCB0eXBlcywgdmFsdWUgdHlwZXMsIGFuZCBzbyBmb3J0aOKAlGluIGEgbmF0dXJh
bCB3YXkgdGhhdCB3aWxsIGRlbGlnaHQsCi1yYXRoZXIgdGhhbiBzdXJwcmlzZSwgdXNlcnMgb2Yg
dGhlIGxhbmd1YWdlLgotCi0jIyBOYW1pbmcKLQotKiAgIEJ5IGNvbnZlbnRpb24sIGJvdGggdHlw
aWNhbCBwcm90b2J1ZiBtZXNzYWdlIG5hbWVzIGFuZCBTd2lmdCBzdHJ1Y3RzL2NsYXNzZXMKLSAg
ICBhcmUgYFVwcGVyQ2FtZWxDYXNlYCwgc28gZm9yIG1vc3QgbWVzc2FnZXMsIHRoZSBuYW1lIG9m
IGEgbWVzc2FnZSBjYW4gYmUgdGhlCi0gICAgc2FtZSBhcyB0aGUgbmFtZSBvZiBpdHMgZ2VuZXJh
dGVkIHR5cGUuIChIb3dldmVyLCBzZWUgdGhlIGRpc2N1c3Npb24gYmVsb3cKLSAgICBhYm91dCBw
cmVmaXhlcyB1bmRlciBbUGFja2FnZXNdKCNwYWNrYWdlcykuKQotCi0qICAgRW51bSBjYXNlcyBp
biBwcm90b2J1ZnMgdHlwaWNhbGx5IGFyZSBgVVBQRVJDQVNFX1dJVEhfVU5ERVJTQ09SRVNgLCB3
aGVyZWFzCi0gICAgaW4gU3dpZnQgdGhleSBhcmUgYGxvd2VyQ2FtZWxDYXNlYCAoYXMgb2YgdGhl
IFN3aWZ0IDMgQVBJIGRlc2lnbgotICAgIGd1aWRlbGluZXMpLiBXZSB3aWxsIHRyYW5zZm9ybSB0
aGUgbmFtZXMgdG8gbWF0Y2ggU3dpZnQgY29udmVudGlvbiwgdXNpbmcKLSAgICBhIHdoaXRlbGlz
dCBzaW1pbGFyIHRvIHRoZSBPYmplY3RpdmUtQyBjb21waWxlciBwbHVnaW4gdG8gaGFuZGxlIGNv
bW1vbmx5Ci0gICAgdXNlZCBhY3Jvbnltcy4KLQotKiAgIFR5cGljYWwgZmllbGRzIGluIHByb3Rv
IG1lc3NhZ2VzIGFyZSBgbG93ZXJjYXNlX3dpdGhfdW5kZXJzY29yZXNgLCB3aGlsZSBpbgotICAg
IFN3aWZ0IHRoZXkgYXJlIGBsb3dlckNhbWVsQ2FzZWAuIFdlIHdpbGwgdHJhbnNmb3JtIHRoZSBu
YW1lcyB0byBtYXRjaAotICAgIFN3aWZ0IGNvbnZlbnRpb24gYnkgcmVtb3ZpbmcgdGhlIHVuZGVy
c2NvcmVzIGFuZCB1cHBlcmNhc2luZyB0aGUgc3Vic2VxdWVudAotICAgIGxldHRlci4KLQotIyMg
U3dpZnQgcmVzZXJ2ZWQgd29yZHMKLQotU3dpZnQgaGFzIGEgbGFyZ2Ugc2V0IG9mIHJlc2VydmVk
IHdvcmRz4oCUc29tZSBhbHdheXMgcmVzZXJ2ZWQgYW5kIHNvbWUKLWNvbnRleHR1YWxseSByZXNl
cnZlZCAodGhhdCBpcywgdGhleSBjYW4gYmUgdXNlZCBhcyBpZGVudGlmaWVycyBpbiBjb250ZXh0
cwotd2hlcmUgdGhleSB3b3VsZCBub3QgYmUgY29uZnVzZWQpLiBBcyBvZiBTd2lmdCAyLjIsIHRo
ZSBzZXQgb2YgYWx3YXlzLXJlc2VydmVkCi13b3JkcyBpczoKLQotYGBgCi1fLCAjYXZhaWxhYmxl
LCAjY29sdW1uLCAjZWxzZSwgI2Vsc2VpZiwgI2VuZGlmLCAjZmlsZSwgI2Z1bmN0aW9uLCAjaWYs
ICNsaW5lLAotI3NlbGVjdG9yLCBhcywgYXNzb2NpYXRlZHR5cGUsIGJyZWFrLCBjYXNlLCBjYXRj
aCwgY2xhc3MsIGNvbnRpbnVlLCBkZWZhdWx0LAotZGVmZXIsIGRlaW5pdCwgZG8sIGR5bmFtaWNU
eXBlLCBlbHNlLCBlbnVtLCBleHRlbnNpb24sIGZhbGx0aHJvdWdoLCBmYWxzZSwgZm9yLAotZnVu
YywgZ3VhcmQsIGlmLCBpbXBvcnQsIGluLCBpbml0LCBpbm91dCwgaW50ZXJuYWwsIGlzLCBsZXQs
IG5pbCwgb3BlcmF0b3IsCi1wcml2YXRlLCBwcm90b2NvbCwgcHVibGljLCByZXBlYXQsIHJldGhy
b3dzLCByZXR1cm4sIHNlbGYsIFNlbGYsIHN0YXRpYywKLXN0cnVjdCwgc3Vic2NyaXB0LCBzdXBl
ciwgc3dpdGNoLCB0aHJvdywgdGhyb3dzLCB0cnVlLCB0cnksIHR5cGVhbGlhcywgdmFyLAotd2hl
cmUsIHdoaWxlCi1gYGAKLQotVGhlIHNldCBvZiBjb250ZXh0dWFsbHkgcmVzZXJ2ZWQgd29yZHMg
aXM6Ci0KLWBgYAotYXNzb2NpYXRpdml0eSwgY29udmVuaWVuY2UsIGR5bmFtaWMsIGRpZFNldCwg
ZmluYWwsIGdldCwgaW5maXgsIGluZGlyZWN0LAotbGF6eSwgbGVmdCwgbXV0YXRpbmcsIG5vbmUs
IG5vbm11dGF0aW5nLCBvcHRpb25hbCwgb3ZlcnJpZGUsIHBvc3RmaXgsCi1wcmVjZWRlbmNlLCBw
cmVmaXgsIFByb3RvY29sLCByZXF1aXJlZCwgcmlnaHQsIHNldCwgVHlwZSwgdW5vd25lZCwgd2Vh
aywKLXdpbGxTZXQKLWBgYAotCi1JdCBpcyBwb3NzaWJsZSB0byB1c2UgYW55IHJlc2VydmVkIHdv
cmQgYXMgYW4gaWRlbnRpZmllciBieSBlc2NhcGluZyBpdCB3aXRoCi1iYWNrdGlja3MgKGZvciBl
eGFtcGxlLCBgYGxldCBgY2xhc3NgID0gNWBgKS4gT3RoZXIgbmFtZS1tYW5nbGluZyBzY2hlbWVz
IHdvdWxkCi1yZXF1aXJlIHVzIHRvIHRyYW5zZm9ybSB0aGUgbmFtZXMgdGhlbXNlbHZlcyAoZm9y
IGV4YW1wbGUsIGJ5IGFwcGVuZGluZyBhbgotdW5kZXJzY29yZSksIHdoaWNoIHJlcXVpcmVzIHVz
IHRvIHRoZW4gZW5zdXJlIHRoYXQgdGhlIG5ldyBuYW1lIGRvZXMgbm90IGNvbGxpZGUKLXdpdGgg
c29tZXRoaW5nIGVsc2UgaW4gdGhlIHNhbWUgbmFtZXNwYWNlLgotCi1XaGlsZSB0aGUgYmFja3Rp
Y2sgZmVhdHVyZSBtYXkgbm90IGJlIHdpZGVseSBrbm93biBieSBhbGwgU3dpZnQgZGV2ZWxvcGVy
cywgYQotc21hbGwgYW1vdW50IG9mIHVzZXIgZWR1Y2F0aW9uIGNhbiBhZGRyZXNzIHRoaXMgYW5k
IGl0IHNlZW1zIGxpa2UgdGhlIGJlc3QKLWFwcHJvYWNoLiBXZSBjYW4gdW5jb25kaXRpb25hbGx5
IHN1cnJvdW5kIGFsbCBwcm9wZXJ0eSBuYW1lcyB3aXRoIGJhY2t0aWNrcyB0bwotc2ltcGxpZnkg
Z2VuZXJhdGlvbi4KLQotU29tZSByZW1hcHBpbmcgd2lsbCBzdGlsbCBiZSByZXF1aXJlZCwgdGhv
dWdoLCB0byBhdm9pZCBjb2xsaXNpb25zIGJldHdlZW4KLWdlbmVyYXRlZCBwcm9wZXJ0aWVzIGFu
ZCB0aGUgbmFtZXMgb2YgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBiYXNl
Ci1wcm90b2NvbC9pbXBsZW1lbnRhdGlvbiBvZiBtZXNzYWdlcy4KLQotIyBGZWF0dXJlcyBvZiBQ
cm90b2NvbCBCdWZmZXJzCi0KLVRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRoZSBmZWF0dXJl
cyBvZiB0aGUgcHJvdG9jb2wgYnVmZmVyIHN5bnRheGVzIChwcm90bzIKLWFuZCBwcm90bzMpIG1h
cCB0byBmZWF0dXJlcyBpbiBTd2lmdOKAlHdoYXQgdGhlIGNvZGUgZ2VuZXJhdGVkIGZyb20gYSBw
cm90byB3aWxsCi1sb29rIGxpa2UsIGFuZCBob3cgaXQgd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiB0
aGUgdW5kZXJseWluZyBsaWJyYXJ5LgotCi0jIyBQYWNrYWdlcwotCi1Nb2R1bGVzIGFyZSB0aGUg
bWFpbiBmb3JtIG9mIG5hbWVzcGFjaW5nIGluIFN3aWZ0LCBidXQgdGhleSBhcmUgbm90IGRlY2xh
cmVkCi11c2luZyBzeW50YWN0aWMgY29uc3RydWN0cyBsaWtlIG5hbWVzcGFjZXMgaW4gQysrIG9y
IHBhY2thZ2VzIGluIEphdmEuIEluc3RlYWQsCi10aGV5IGFyZSB0aWVkIHRvIGJ1aWxkIHRhcmdl
dHMgaW4gWGNvZGUgKG9yLCBpbiB0aGUgZnV0dXJlIHdpdGggb3Blbi1zb3VyY2UKLVN3aWZ0LCBk
ZWNsYXJhdGlvbnMgaW4gYSBTd2lmdCBQYWNrYWdlIE1hbmFnZXIgbWFuaWZlc3QpLiBUaGV5IGFs
c28gZG8gbm90Ci1lYXNpbHkgc3VwcG9ydCBuZXN0aW5nIHN1Ym1vZHVsZXMgKENsYW5nIG1vZHVs
ZSBtYXBzIHN1cHBvcnQgdGhpcywgYnV0IHB1cmUKLVN3aWZ0IGRvZXMgbm90IHlldCBwcm92aWRl
IGEgd2F5IHRvIGRlZmluZSBzdWJtb2R1bGVzKS4KLQotV2Ugd2lsbCBnZW5lcmF0ZSB0eXBlcyB3
aXRoIGZ1bGx5LXF1YWxpZmllZCB1bmRlcnNjb3JlLWRlbGltaXRlZCBuYW1lcy4gRm9yCi1leGFt
cGxlLCBhIG1lc3NhZ2UgYEJhemAgaW4gcGFja2FnZSBgZm9vLmJhcmAgd291bGQgZ2VuZXJhdGUg
YSBzdHJ1Y3QgbmFtZWQKLWBGb29fQmFyX0JhemAuIEZvciBlYWNoIGZ1bGx5LXF1YWxpZmllZCBw
cm90byBtZXNzYWdlLCB0aGVyZSB3aWxsIGJlIGV4YWN0bHkgb25lCi11bmlxdWUgdHlwZSBzeW1i
b2wgZW1pdHRlZCBpbiB0aGUgZ2VuZXJhdGVkIGJpbmFyeS4KLQotVXNlcnMgYXJlIGxpa2VseSB0
byBiYWxrIGF0IHRoZSB1Z2xpbmVzcyBvZiB1bmRlcnNjb3JlLWRlbGltaXRlZCBuYW1lcyBmb3Ig
ZXZlcnkKLWdlbmVyYXRlZCB0eXBlLiBUbyBpbXByb3ZlIHVwb24gdGhpcyBzaXR1YXRpb24sIHdl
IHdpbGwgYWRkIGEgbmV3IHN0cmluZyBmaWxlCi1sZXZlbCBvcHRpb24sIGBzd2lmdF9wYWNrYWdl
X3R5cGVhbGlhc2AsIHRoYXQgY2FuIGJlIGFkZGVkIHRvIGAucHJvdG9gIGZpbGVzLgotV2hlbiBw
cmVzZW50LCB0aGlzIHdpbGwgY2F1c2UgYHR5cGVhbGlhc2BlcyB0byBiZSBhZGRlZCB0byB0aGUg
Z2VuZXJhdGVkIFN3aWZ0Ci1tZXNzYWdlcyB0aGF0IHJlcGxhY2UgdGhlIHBhY2thZ2UgbmFtZSBw
cmVmaXggd2l0aCB0aGUgcHJvdmlkZWQgc3RyaW5nLiBGb3IKLWV4YW1wbGUsIHRoZSBmb2xsb3dp
bmcgYC5wcm90b2AgZmlsZToKLQotYGBgcHJvdG9idWYKLW9wdGlvbiBzd2lmdF9wYWNrYWdlX3R5
cGVhbGlhcyA9ICJGQlAiOwotcGFja2FnZSBmb28uYmFyOwotCi1tZXNzYWdlIEJheiB7Ci0gIC8v
IE1lc3NhZ2UgZmllbGRzCi19Ci1gYGAKLQotd291bGQgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBT
d2lmdCBzb3VyY2U6Ci0KLWBgYHN3aWZ0Ci1wdWJsaWMgc3RydWN0IEZvb19CYXJfQmF6IHsKLSAg
Ly8gTWVzc2FnZSBmaWVsZHMgYW5kIG90aGVyIG1ldGhvZHMKLX0KLQotdHlwZWFsaWFzIEZCUEJh
eiA9IEZvb19CYXJfQmF6Ci1gYGAKLQotSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhpcyB0eXBl
IGFsaWFzIGlzIHJlY29yZGVkIGluIHRoZSBnZW5lcmF0ZWQKLWAuc3dpZnRtb2R1bGVgIHNvIHRo
YXQgY29kZSBpbXBvcnRpbmcgdGhlIG1vZHVsZSBjYW4gcmVmZXIgdG8gaXQsIGJ1dCBpdCBkb2Vz
Ci1ub3QgY2F1c2UgYSBuZXcgc3ltYm9sIHRvIGJlIGdlbmVyYXRlZCBpbiB0aGUgY29tcGlsZWQg
YmluYXJ5IChpLmUuLCB3ZSBkbyBub3QKLXJpc2sgY29tcGlsZWQgc2l6ZSBibG9hdCBieSBhZGRp
bmcgYHR5cGVhbGlhc2BlcyBmb3IgZXZlcnkgdHlwZSkuCi0KLU90aGVyIHN0cmF0ZWdpZXMgdG8g
aGFuZGxlIHBhY2thZ2VzIHRoYXQgd2VyZSBjb25zaWRlcmVkIGFuZCByZWplY3RlZCBjYW4gYmUK
LWZvdW5kIGluIFtBcHBlbmRpeCBBXSgjYXBwZW5kaXgtYS1yZWplY3RlZC1zdHJhdGVnaWVzLXRv
LWhhbmRsZS1wYWNrYWdlcykuCi0KLSMjIE1lc3NhZ2VzCi0KLVByb3RvIG1lc3NhZ2VzIGFyZSBu
YXR1cmFsIHZhbHVlIHR5cGVzIGFuZCB3ZSB3aWxsIGdlbmVyYXRlIG1lc3NhZ2VzIGFzIHN0cnVj
dHMKLWluc3RlYWQgb2YgY2xhc3Nlcy4gVXNlcnMgd2lsbCBiZW5lZml0IGZyb20gU3dpZnTigJlz
IGJ1aWx0LWluIGJlaGF2aW9yIHdpdGgKLXJlZ2FyZCB0byBtdXRhYmlsaXR5LiBXZSB3aWxsIGRl
ZmluZSBhIGBQcm90b01lc3NhZ2VgIHByb3RvY29sIHRoYXQgZGVmaW5lcyB0aGUKLWNvbW1vbiBt
ZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGZvciBhbGwgbWVzc2FnZXMgKHN1Y2ggYXMgc2VyaWFsaXph
dGlvbikgYW5kIGFsc28KLWxldHMgdXNlcnMgdHJlYXQgbWVzc2FnZXMgcG9seW1vcnBoaWNhbGx5
LiBBbnkgc2hhcmVkIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMKLXRoYXQgZG8gbm90IGRpZmZlciBi
ZXR3ZWVuIGluZGl2aWR1YWwgbWVzc2FnZXMgY2FuIGJlIGltcGxlbWVudGVkIGluIGEgcHJvdG9j
b2wKLWV4dGVuc2lvbi4KLQotVGhlIGJhY2tpbmcgc3RvcmFnZSBpdHNlbGYgZm9yIGZpZWxkcyBv
ZiBhIG1lc3NhZ2Ugd2lsbCBiZSBtYW5hZ2VkIGJ5IGEKLWBQcm90b0ZpZWxkU3RvcmFnZWAgdHlw
ZSB0aGF0IHVzZXMgYW4gaW50ZXJuYWwgZGljdGlvbmFyeSBrZXllZCBieSBmaWVsZCBudW1iZXIs
Ci1hbmQgd2hvc2UgdmFsdWVzIGFyZSB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggdGhhdCBu
dW1iZXIgKHVwLWNhc3QgdG8gU3dpZnTigJlzCi1gQW55YCB0eXBlKS4gVGhpcyBjbGFzcyB3aWxs
IHByb3ZpZGUgdHlwZS1zYWZlIGdldHRlcnMgYW5kIHNldHRlcnMgc28gdGhhdAotZ2VuZXJhdGVk
IG1lc3NhZ2VzIGNhbiBtYW5pcHVsYXRlIHRoaXMgc3RvcmFnZSwgYW5kIGNvcmUgc2VyaWFsaXph
dGlvbiBsb2dpYwotd2lsbCBsaXZlIGhlcmUgYXMgd2VsbC4gRnVydGhlcm1vcmUsIGZhY3Rvcmlu
ZyB0aGUgc3RvcmFnZSBvdXQgaW50byBhIHNlcGFyYXRlCi10eXBlLCByYXRoZXIgdGhhbiBpbmxp
bmluZyB0aGUgZmllbGRzIGFzIHN0b3JlZCBwcm9wZXJ0aWVzIGluIHRoZSBtZXNzYWdlCi1pdHNl
bGYsIGxldHMgdXMgaW1wbGVtZW50IGNvcHktb24td3JpdGUgZWZmaWNpZW50bHkgdG8gc3VwcG9y
dCBwYXNzaW5nIGFyb3VuZAotbGFyZ2UgbWVzc2FnZXMuIChGdXJ0aGVybW9yZSwgYmVjYXVzZSB0
aGUgbWVzc2FnZXMgdGhlbXNlbHZlcyBhcmUgdmFsdWUgdHlwZXMsCi1pbmxpbmluZyBmaWVsZHMg
aXMgbm90IHBvc3NpYmxlIGlmIHRoZSBmaWVsZHMgYXJlIHN1Ym1lc3NhZ2VzIG9mIHRoZSBzYW1l
IHR5cGUsCi1vciBhIHR5cGUgdGhhdCBldmVudHVhbGx5IGluY2x1ZGVzIGEgc3VibWVzc2FnZSBv
ZiB0aGUgc2FtZSB0eXBlLikKLQotIyMjIFJlcXVpcmVkIGZpZWxkcyAocHJvdG8yIG9ubHkpCi0K
LVJlcXVpcmVkIGZpZWxkcyBpbiBwcm90bzIgbWVzc2FnZXMgc2VlbSBsaWtlIHRoZXkgY291bGQg
YmUgbmF0dXJhbGx5IHJlcHJlc2VudGVkCi1ieSBub24tb3B0aW9uYWwgcHJvcGVydGllcyBpbiBT
d2lmdCwgYnV0IHRoaXMgcHJlc2VudHMgc29tZSBwcm9ibGVtcy9jb25jZXJucy4KLQotU2VyaWFs
aXphdGlvbiBBUElzIHBlcm1pdCBwYXJ0aWFsIHNlcmlhbGl6YXRpb24sIHdoaWNoIGFsbG93cyBy
ZXF1aXJlZCBmaWVsZHMgdG8KLXJlbWFpbiB1bnNldC4gRnVydGhlcm1vcmUsIG90aGVyIGxhbmd1
YWdlIEFQSXMgc3RpbGwgcHJvdmlkZSBgaGFzKmAgYW5kIGBjbGVhcipgCi1tZXRob2RzIGZvciBy
ZXF1aXJlZCBmaWVsZHMsIGFuZCBrbm93aW5nIHdoZXRoZXIgYSBwcm9wZXJ0eSBoYXMgYSB2YWx1
ZSB3aGVuIHRoZQotbWVzc2FnZSBpcyBpbiBtZW1vcnkgaXMgc3RpbGwgdXNlZnVsLgotCi1Gb3Ig
ZXhhbXBsZSwgYW4gZS1tYWlsIGRyYWZ0IG1lc3NhZ2UgbWF5IGhhdmUgdGhlIOKAnHRv4oCdIGFk
ZHJlc3MgcmVxdWlyZWQgb24gdGhlCi13aXJlLCBidXQgd2hlbiB0aGUgdXNlciBjb25zdHJ1Y3Rz
IGl0IGluIG1lbW9yeSwgaXQgZG9lc27igJl0IG1ha2Ugc2Vuc2UgdG8gZm9yY2UKLWEgdmFsdWUg
dW50aWwgdGhleSBwcm92aWRlIG9uZS4gV2Ugb25seSB3YW50IHRvIGZvcmNlIGEgdmFsdWUgdG8g
YmUgcHJlc2VudCB3aGVuCi10aGUgbWVzc2FnZSBpcyBzZXJpYWxpemVkIHRvIHRoZSB3aXJlLiBV
c2luZyBub24tb3B0aW9uYWwgcHJvcGVydGllcyBwcmV2ZW50cwotdGhpcyB1c2UgY2FzZSwgYW5k
IG1ha2VzIGNsaWVudCB1c2FnZSBhd2t3YXJkIGJlY2F1c2UgdGhlIHVzZXIgd291bGQgYmUgZm9y
Y2VkCi10byBzZWxlY3QgYSBzZW50aW5lbCBvciBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYW55IHJl
cXVpcmVkIGZpZWxkcyBhdCB0aGUgdGltZQotdGhlIG1lc3NhZ2Ugd2FzIGNyZWF0ZWQuCi0KLSMj
IyBEZWZhdWx0IHZhbHVlcwotCi1JbiBwcm90bzIsIGZpZWxkcyBjYW4gaGF2ZSBhIGRlZmF1bHQg
dmFsdWUgc3BlY2lmaWVkIHRoYXQgbWF5IGJlIGEgdmFsdWUgb3RoZXIKLXRoYW4gdGhlIGRlZmF1
bHQgdmFsdWUgZm9yIGl0cyBjb3JyZXNwb25kaW5nIGxhbmd1YWdlIHR5cGUgKGZvciBleGFtcGxl
LCBhCi1kZWZhdWx0IHZhbHVlIG9mIDUgaW5zdGVhZCBvZiAwIGZvciBhbiBpbnRlZ2VyKS4gV2hl
biByZWFkaW5nIGEgZmllbGQgdGhhdCBpcwotbm90IGV4cGxpY2l0bHkgc2V0LCB0aGUgdXNlciBl
eHBlY3RzIHRvIGdldCB0aGF0IHZhbHVlLiBUaGlzIG1ha2VzIFN3aWZ0Ci1vcHRpb25hbHMgKGku
ZS4sIGBGb28/YCkgdW5zdWl0YWJsZSBmb3IgZmllbGRzIGluIGdlbmVyYWwuIFVuZm9ydHVuYXRl
bHksIHdlCi1jYW5ub3QgaW1wbGVtZW50IG91ciBvd24g4oCcZW5oYW5jZWQgb3B0aW9uYWzigJ0g
dHlwZSB3aXRob3V0IHNldmVyZWx5IGNvbXBsaWNhdGluZwotdXNhZ2UgKFN3aWZ04oCZcyB1c2Ug
b2YgdHlwZSBpbmZlcmVuY2UgYW5kIGl0cyBsYWNrIG9mIGltcGxpY2l0IGNvbnZlcnNpb25zIHdv
dWxkCi1yZXF1aXJlIG1hbnVhbCB1bndyYXBwaW5nIG9mIGV2ZXJ5IHByb3BlcnR5IHZhbHVlKS4K
LQotSW5zdGVhZCwgd2UgY2FuIHVzZSAqKmltcGxpY2l0bHkgdW53cmFwcGVkIG9wdGlvbmFscy4q
KiBGb3IgZXhhbXBsZSwgYSBwcm9wZXJ0eQotZ2VuZXJhdGVkIGZvciBhIGZpZWxkIG9mIHR5cGUg
YGludDMyYCB3b3VsZCBoYXZlIFN3aWZ0IHR5cGUgYEludDMyIWAuIFRoZXNlCi1wcm9wZXJ0aWVz
IHdvdWxkIGJlaGF2ZSB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyaXN0aWNzLCB3aGljaCBt
aXJyb3IgdGhlCi1uaWwtcmVzZXR0YWJsZSBwcm9wZXJ0aWVzIHVzZWQgZWxzZXdoZXJlIGluIEFw
cGxl4oCZcyBTREtzIChmb3IgZXhhbXBsZSwKLWBVSVZpZXcudGludENvbG9yYCk6Ci0KLSogICBB
c3NpZ25pbmcgYSBub24tbmlsIHZhbHVlIHRvIGEgcHJvcGVydHkgc2V0cyB0aGUgZmllbGQgdG8g
dGhhdCB2YWx1ZS4KLSogICBBc3NpZ25pbmcgbmlsIHRvIGEgcHJvcGVydHkgY2xlYXJzIHRoZSBm
aWVsZCAoaXRzIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzCi0gICAgbmlsbGVkIG91dCkuCi0q
ICAgUmVhZGluZyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSByZXR1cm5zIGl0cyB2YWx1ZSBpZiBp
dCBpcyBzZXQsIG9yIHJldHVybnMKLSAgICBpdHMgZGVmYXVsdCB2YWx1ZSBpZiBpdCBpcyBub3Qg
c2V0LiBSZWFkaW5nIGEgcHJvcGVydHkgbmV2ZXIgcmV0dXJucyBuaWwuCi0KLVRoZSBmaW5hbCBw
b2ludCBpbiB0aGUgbGlzdCBhYm92ZSBpbXBsaWVzIHRoYXQgdGhlIG9wdGlvbmFsIGNhbm5vdCBi
ZSBjaGVja2VkIHRvCi1kZXRlcm1pbmUgaWYgdGhlIGZpZWxkIGlzIHNldCB0byBhIHZhbHVlIG90
aGVyIHRoYW4gaXRzIGRlZmF1bHQ6IGl0IHdpbGwgbmV2ZXIKLWJlIG5pbC4gSW5zdGVhZCwgd2Ug
bXVzdCBwcm92aWRlIGBoYXMqYCBtZXRob2RzIGZvciBlYWNoIGZpZWxkIHRvIGFsbG93IHRoZSB1
c2VyCi10byBjaGVjayB0aGlzLiBUaGVzZSBtZXRob2RzIHdpbGwgYmUgcHVibGljIGluIHByb3Rv
Mi4gSW4gcHJvdG8zLCB0aGVzZSBtZXRob2RzCi13aWxsIGJlIHByaXZhdGUgKGlmIGdlbmVyYXRl
ZCBhdCBhbGwpLCBzaW5jZSB0aGUgdXNlciBjYW4gdGVzdCB0aGUgcmV0dXJuZWQKLXZhbHVlIGFn
YWluc3QgdGhlIHplcm8gdmFsdWUgZm9yIHRoYXQgdHlwZS4KLQotIyMjIEF1dG9jcmVhdGlvbiBv
ZiBuZXN0ZWQgbWVzc2FnZXMKLQotRm9yIGNvbnZlbmllbmNlLCBkb3R0aW5nIGludG8gYW4gdW5z
ZXQgZmllbGQgcmVwcmVzZW50aW5nIGEgbmVzdGVkIG1lc3NhZ2Ugd2lsbAotcmV0dXJuIGFuIGlu
c3RhbmNlIG9mIHRoYXQgbWVzc2FnZSB3aXRoIGRlZmF1bHQgdmFsdWVzLiBBcyBpbiB0aGUgT2Jq
ZWN0aXZlLUMKLWltcGxlbWVudGF0aW9uLCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5IGNhdXNlIHRo
ZSBmaWVsZCB0byBiZSBzZXQgdW50aWwgdGhlCi1yZXR1cm5lZCBtZXNzYWdlIGlzIG11dGF0ZWQu
IEZvcnR1bmF0ZWx5LCB0aGFua3MgdG8gdGhlIHdheSBtdXRhYmlsaXR5IG9mIHZhbHVlCi10eXBl
cyBpcyBpbXBsZW1lbnRlZCBpbiBTd2lmdCwgdGhlIGxhbmd1YWdlIGF1dG9tYXRpY2FsbHkgaGFu
ZGxlcyB0aGUKLXJlYXNzaWdubWVudC1vbi1tdXRhdGlvbiBmb3IgdXMuIEEgc3RhdGljIHNpbmds
ZXRvbiBpbnN0YW5jZSBjb250YWluaW5nIGRlZmF1bHQKLXZhbHVlcyBjYW4gYmUgYXNzb2NpYXRl
ZCB3aXRoIGVhY2ggbWVzc2FnZSB0aGF0IGNhbiBiZSByZXR1cm5lZCB3aGVuIHJlYWRpbmcsIHNv
Ci1jb3BpZXMgYXJlIG9ubHkgbWFkZSBieSB0aGUgU3dpZnQgcnVudGltZSB3aGVuIG11dGF0aW9u
IG9jY3Vycy4gRm9yIGV4YW1wbGUsCi1naXZlbiB0aGUgZm9sbG93aW5nIHByb3RvOgotCi1gYGBw
cm90b2J1ZgotbWVzc2FnZSBOb2RlIHsKLSAgTm9kZSBjaGlsZCA9IDE7Ci0gIHN0cmluZyB2YWx1
ZSA9IDIgW2RlZmF1bHQgPSAiZm9vIl07Ci19Ci1gYGAKLQotVGhlIGZvbGxvd2luZyBTd2lmdCBj
b2RlIHdvdWxkIGFjdCBhcyBjb21tZW50ZWQsIHdoZXJlIHNldHRpbmcgZGVlcGx5IG5lc3RlZAot
cHJvcGVydGllcyBjYXVzZXMgdGhlIGNvcGllcyBhbmQgbXV0YXRpb25zIHRvIG9jY3VyIGFzIHRo
ZSBhc3NpZ25tZW50IHN0YXRlbWVudAotaXMgdW53b3VuZDoKLQotYGBgc3dpZnQKLXZhciBub2Rl
ID0gTm9kZSgpCi0KLWxldCBzID0gbm9kZS5jaGlsZC5jaGlsZC52YWx1ZQotLy8gMS4gbm9kZS5j
aGlsZCByZXR1cm5zIHRoZSAiZGVmYXVsdCBOb2RlIi4KLS8vIDIuIFJlYWRpbmcgLmNoaWxkIG9u
IHRoZSByZXN1bHQgb2YgKDEpIHJldHVybnMgdGhlIHNhbWUgZGVmYXVsdCBOb2RlLgotLy8gMy4g
UmVhZGluZyAudmFsdWUgb24gdGhlIHJlc3VsdCBvZiAoMikgcmV0dXJucyB0aGUgZGVmYXVsdCB2
YWx1ZSAiZm9vIi4KLQotbm9kZS5jaGlsZC5jaGlsZC52YWx1ZSA9ICJiYXIiCi0vLyA0LiBTZXR0
aW5nIC52YWx1ZSBvbiB0aGUgZGVmYXVsdCBOb2RlIGNhdXNlcyBhIGNvcHkgdG8gYmUgbWFkZSBh
bmQgc2V0cwotLy8gICAgdGhlIHByb3BlcnR5IG9uIHRoYXQgY29weS4gU3Vic2VxdWVudGx5LCB0
aGUgbGFuZ3VhZ2UgdXBkYXRlcyB0aGUKLS8vICAgIHZhbHVlIG9mICJub2RlLmNoaWxkLmNoaWxk
IiB0byBwb2ludCB0byB0aGF0IGNvcHkuCi0vLyA1LiBVcGRhdGluZyAibm9kZS5jaGlsZC5jaGls
ZCIgaW4gKDQpIHJlcXVpcmVzIGFub3RoZXIgY29weSwgYmVjYXVzZQotLy8gICAgIm5vZGUuY2hp
bGQiIHdhcyBhbHNvIHRoZSBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBub2RlLiBUaGUgY29weSBp
cwotLy8gICAgYXNzaWduZWQgYmFjayB0byAibm9kZS5jaGlsZCIuCi0vLyA2LiBTZXR0aW5nICJu
b2RlLmNoaWxkIiBpbiAoNSkgaXMgYSBzaW1wbGUgdmFsdWUgcmVhc3NpZ25tZW50LCBzaW5jZQot
Ly8gICAgIm5vZGUiIGlzIGEgbXV0YWJsZSB2YXIuCi1gYGAKLQotSW4gb3RoZXIgd29yZHMsIHRo
ZSBnZW5lcmF0ZWQgbWVzc2FnZXMgZG8gbm90IGludGVybmFsbHkgaGF2ZSB0byBtYW5hZ2UgcGFy
ZW50YWwKLXJlbGF0aW9uc2hpcHMgdG8gYmFja2ZpbGwgdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRp
ZXMgb24gbXV0YXRpb24uIFN3aWZ0IHByb3ZpZGVzCi10aGlzIGZvciBmcmVlLgotCi0jIyBTY2Fs
YXIgdmFsdWUgZmllbGRzCi0KLVByb3RvIHNjYWxhciB2YWx1ZSBmaWVsZHMgd2lsbCBtYXAgdG8g
U3dpZnQgdHlwZXMgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLS5wcm90byBUeXBlIHwgU3dpZnQg
VHlwZQotLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tCi1gZG91YmxlYCAgICB8IGBE
b3VibGVgCi1gZmxvYXRgICAgICB8IGBGbG9hdGAKLWBpbnQzMmAgICAgIHwgYEludDMyYAotYGlu
dDY0YCAgICAgfCBgSW50NjRgCi1gdWludDMyYCAgICB8IGBVSW50MzJgCi1gdWludDY0YCAgICB8
IGBVSW50NjRgCi1gc2ludDMyYCAgICB8IGBJbnQzMmAKLWBzaW50NjRgICAgIHwgYEludDY0YAot
YGZpeGVkMzJgICAgfCBgVUludDMyYAotYGZpeGVkNjRgICAgfCBgVUludDY0YAotYHNmaXhlZDMy
YCAgfCBgSW50MzJgCi1gc2ZpeGVkNjRgICB8IGBJbnQ2NGAKLWBib29sYCAgICAgIHwgYEJvb2xg
Ci1gc3RyaW5nYCAgICB8IGBTdHJpbmdgCi1gYnl0ZXNgICAgICB8IGBGb3VuZGF0aW9uLk5TRGF0
YWAKLQotVGhlIHByb3RvIHNwZWMgZGVmaW5lcyBhIG51bWJlciBvZiBpbnRlZ3JhbCB0eXBlcyB0
aGF0IG1hcCB0byB0aGUgc2FtZSBTd2lmdAotdHlwZTsgZm9yIGV4YW1wbGUsIGBpbnRYWGAsIGBz
aW50WFhgLCBhbmQgYHNmaXhlZFhYYCBhcmUgYWxsIHNpZ25lZCBpbnRlZ2VycywKLWFuZCBgdWlu
dFhYYCBhbmQgYGZpeGVkWFhgIGFyZSBib3RoIHVuc2lnbmVkIGludGVnZXJzLiBObyBvdGhlciBs
YW5ndWFnZQotaW1wbGVtZW50YXRpb24gZGlzdGluZ3Vpc2hlcyB0aGVzZSBmdXJ0aGVyLCBzbyB3
ZSBkbyBub3QgZG8gc28gZWl0aGVyLiBUaGUKLXJhdGlvbmFsZSBpcyB0aGF0IHRoZSB2YXJpb3Vz
IHR5cGVzIG9ubHkgc2VydmUgdG8gZGlzdGluZ3Vpc2ggaG93IHRoZSB2YWx1ZSBpcwotKiplbmNv
ZGVkIG9uIHRoZSB3aXJlKio7IG9uY2UgbG9hZGVkIGluIG1lbW9yeSwgdGhlIHVzZXIgaXMgbm90
IGNvbmNlcm5lZCBhYm91dAotdGhlc2UgdmFyaWF0aW9ucy4KLQotU3dpZnTigJlzIGxhY2sgb2Yg
aW1wbGljaXQgY29udmVyc2lvbnMgYW1vbmcgdHlwZXMgd2lsbCBtYWtlIGl0IHNsaWdodGx5IGFu
bm95aW5nCi10byB1c2UgdGhlc2UgdHlwZXMgaW4gYSBjb250ZXh0IGV4cGVjdGluZyBhbiBgSW50
YCwgb3IgdmljZS12ZXJzYSwgYnV0IHNpbmNlCi10aGlzIGlzIGEgZGF0YS1pbnRlcmNoYW5nZSBm
b3JtYXQgd2l0aCBleHBsaWNpdGx5LXNpemVkIGZpZWxkcywgd2Ugc2hvdWxkIG5vdAotaGlkZSB0
aGF0IGluZm9ybWF0aW9uIGZyb20gdGhlIHVzZXIuIFVzZXJzIHdpbGwgaGF2ZSB0byBleHBsaWNp
dGx5IHdyaXRlCi1gSW50KG1lc3NhZ2UubXlGaWVsZClgLCBmb3IgZXhhbXBsZS4KLQotIyMgRW1i
ZWRkZWQgbWVzc2FnZSBmaWVsZHMKLQotRW1iZWRkZWQgbWVzc2FnZSBmaWVsZHMgY2FuIGJlIHJl
cHJlc2VudGVkIHVzaW5nIGFuIG9wdGlvbmFsIHZhcmlhYmxlIG9mIHRoZQotZ2VuZXJhdGVkIG1l
c3NhZ2UgdHlwZS4gVGh1cywgdGhlIG1lc3NhZ2UKLQotYGBgcHJvdG9idWYKLW1lc3NhZ2UgRm9v
IHsKLSAgQmFyIGJhciA9IDE7Ci19Ci1gYGAKLQotd291bGQgYmUgcmVwcmVzZW50ZWQgaW4gU3dp
ZnQgYXMKLQotYGBgc3dpZnQKLXB1YmxpYyBzdHJ1Y3QgRm9vOiBQcm90b01lc3NhZ2UgewotICBw
dWJsaWMgdmFyIGJhcjogQmFyISB7Ci0gICAgZ2V0IHsgLi4uIH0KLSAgICBzZXQgeyAuLi4gfQot
ICB9Ci19Ci1gYGAKLQotSWYgdGhlIHVzZXIgZXhwbGljaXRseSBzZXRzIGBiYXJgIHRvIG5pbCwg
b3IgaWYgaXQgd2FzIG5ldmVyIHNldCB3aGVuIHJlYWQgZnJvbQotdGhlIHdpcmUsIHJldHJpZXZp
bmcgdGhlIHZhbHVlIG9mIGBiYXJgIHdvdWxkIHJldHVybiBhIGRlZmF1bHQsIHN0YXRpY2FsbHkK
LWFsbG9jYXRlZCBpbnN0YW5jZSBvZiBgQmFyYCBjb250YWluaW5nIGRlZmF1bHQgdmFsdWVzIGZv
ciBpdHMgZmllbGRzLiBUaGlzCi1hY2hpZXZlcyB0aGUgZGVzaXJlZCBiZWhhdmlvciBmb3IgZGVm
YXVsdCB2YWx1ZXMgaW4gdGhlIHNhbWUgd2F5IHRoYXQgc2NhbGFyCi1maWVsZHMgYXJlIGRlc2ln
bmVkLCBhbmQgYWxzbyBhbGxvd3MgdXNlcnMgdG8gZGVlcC1kcmlsbCBpbnRvIGNvbXBsZXggb2Jq
ZWN0Ci1ncmFwaHMgdG8gZ2V0IG9yIHNldCBmaWVsZHMgd2l0aG91dCBjaGVja2luZyBmb3Igbmls
IGF0IGVhY2ggc3RlcC4KLQotIyMgRW51bSBmaWVsZHMKLQotVGhlIGRlc2lnbiBhbmQgaW1wbGVt
ZW50YXRpb24gb2YgZW51bSBmaWVsZHMgd2lsbCBkaWZmZXIgc29tZXdoYXQgZHJhc3RpY2FsbHkK
LWRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZCBpcyBhIHBy
b3RvMiBvciBwcm90bzMgbWVzc2FnZS4KLQotIyMjIHByb3RvMiBlbnVtcwotCi1Gb3IgcHJvdG8y
LCB3ZSBkbyBub3QgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgdW5rbm93biBlbnVtIHZhbHVl
cywgc28gd2UgY2FuCi11c2UgdGhlIHNpbXBsZSByYXctdmFsdWUgZW51bSBzeW50YXggcHJvdmlk
ZWQgYnkgU3dpZnQuIFNvIHRoZSBmb2xsb3dpbmcgZW51bSBpbgotcHJvdG8yOgotCi1gYGBwcm90
b2J1ZgotZW51bSBDb250ZW50VHlwZSB7Ci0gIFRFWFQgPSAwOwotICBJTUFHRSA9IDE7Ci19Ci1g
YGAKLQotd291bGQgYmVjb21lIHRoaXMgU3dpZnQgZW51bToKLQotYGBgc3dpZnQKLXB1YmxpYyBl
bnVtIENvbnRlbnRUeXBlOiBJbnQzMiwgTmlsTGl0ZXJhbENvbnZlcnRpYmxlIHsKLSAgY2FzZSB0
ZXh0ID0gMAotICBjYXNlIGltYWdlID0gMQotCi0gIHB1YmxpYyBpbml0KG5pbExpdGVyYWw6ICgp
KSB7Ci0gICAgc2VsZiA9IC50ZXh0Ci0gIH0KLX0KLWBgYAotCi1TZWUgYmVsb3cgZm9yIHRoZSBk
aXNjdXNzaW9uIGFib3V0IGBOaWxMaXRlcmFsQ29udmVydGlibGVgLgotCi0jIyMgcHJvdG8zIGVu
dW1zCi0KLUZvciBwcm90bzMsIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBwcmVzZXJ2ZSB1bmtub3du
IGVudW0gdmFsdWVzIHRoYXQgbWF5IGNvbWUKLWFjcm9zcyB0aGUgd2lyZSBzbyB0aGF0IHRoZXkg
Y2FuIGJlIHdyaXR0ZW4gYmFjayBpZiB1bm1vZGlmaWVkLiBXZSBjYW4KLWFjY29tcGxpc2ggdGhp
cyBpbiBTd2lmdCBieSB1c2luZyBhIGNhc2Ugd2l0aCBhbiBhc3NvY2lhdGVkIHZhbHVlIGZvciB1
bmtub3ducy4KLVNvIHRoZSBmb2xsb3dpbmcgZW51bSBpbiBwcm90bzM6Ci0KLWBgYHByb3RvYnVm
Ci1lbnVtIENvbnRlbnRUeXBlIHsKLSAgVEVYVCA9IDA7Ci0gIElNQUdFID0gMTsKLX0KLWBgYAot
Ci13b3VsZCBiZWNvbWUgdGhpcyBTd2lmdCBlbnVtOgotCi1gYGBzd2lmdAotcHVibGljIGVudW0g
Q29udGVudFR5cGU6IFJhd1JlcHJlc2VudGFibGUsIE5pbExpdGVyYWxDb252ZXJ0aWJsZSB7Ci0g
IGNhc2UgdGV4dAotICBjYXNlIGltYWdlCi0gIGNhc2UgVU5LTk9XTl9WQUxVRShJbnQzMikKLQot
ICBwdWJsaWMgdHlwZWFsaWFzIFJhd1ZhbHVlID0gSW50MzIKLQotICBwdWJsaWMgaW5pdChuaWxM
aXRlcmFsOiAoKSkgewotICAgIHNlbGYgPSAudGV4dAotICB9Ci0KLSAgcHVibGljIGluaXQocmF3
VmFsdWU6IFJhd1ZhbHVlKSB7Ci0gICAgc3dpdGNoIHJhd1ZhbHVlIHsKLSAgICAgIGNhc2UgMDog
c2VsZiA9IC50ZXh0Ci0gICAgICBjYXNlIDE6IHNlbGYgPSAuaW1hZ2UKLSAgICAgIGRlZmF1bHQ6
IHNlbGYgPSAuVU5LTk9XTl9WQUxVRShyYXdWYWx1ZSkKLSAgfQotCi0gIHB1YmxpYyB2YXIgcmF3
VmFsdWU6IFJhd1ZhbHVlIHsKLSAgICBzd2l0Y2ggc2VsZiB7Ci0gICAgICBjYXNlIC50ZXh0OiBy
ZXR1cm4gMAotICAgICAgY2FzZSAuaW1hZ2U6IHJldHVybiAxCi0gICAgICBjYXNlIC5VTktOT1dO
X1ZBTFVFKGxldCB2YWx1ZSk6IHJldHVybiB2YWx1ZQotICAgIH0KLSAgfQotfQotYGBgCi0KLU5v
dGUgdGhhdCB0aGUgdXNlIG9mIGEgcGFyYW1ldGVyaXplZCBjYXNlIHByZXZlbnRzIHVzIGZyb20g
aW5oZXJpdGluZyBmcm9tIHRoZQotcmF3IGBJbnQzMmAgdHlwZTsgU3dpZnQgZG9lcyBub3QgYWxs
b3cgYW4gZW51bSB3aXRoIGEgcmF3IHR5cGUgdG8gaGF2ZSBjYXNlcwotd2l0aCBhcmd1bWVudHMu
IEluc3RlYWQsIHdlIG11c3QgaW1wbGVtZW50IHRoZSByYXcgdmFsdWUgaW5pdGlhbGl6ZXIgYW5k
Ci1jb21wdXRlZCBwcm9wZXJ0eSBtYW51YWxseS4gVGhlIGBVTktOT1dOX1ZBTFVFYCBjYXNlIGlz
IGV4cGxpY2l0bHkgY2hvc2VuIHRvIGJlCi0idWdseSIgc28gdGhhdCBpdCBzdGFuZHMgb3V0IGFu
ZCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIG90aGVyIHBvc3NpYmxlIGNhc2UKLW5hbWVzLgotCi1V
c2luZyB0aGlzIGFwcHJvYWNoLCBwcm90bzMgY29uc3VtZXJzIG11c3QgYWx3YXlzIGhhdmUgYSBk
ZWZhdWx0IGNhc2Ugb3IgaGFuZGxlCi10aGUgYC5VTktOT1dOX1ZBTFVFYCBjYXNlIHRvIHNhdGlz
ZnkgY2FzZSBleGhhdXN0aW9uIGluIGEgc3dpdGNoIHN0YXRlbWVudDsgdGhlCi1Td2lmdCBjb21w
aWxlciBjb25zaWRlcnMgaXQgYW4gZXJyb3IgaWYgc3dpdGNoIHN0YXRlbWVudHMgYXJlIG5vdCBl
eGhhdXN0aXZlLgotCi0jIyMgTmlsTGl0ZXJhbENvbnZlcnRpYmxlIGNvbmZvcm1hbmNlCi0KLVRo
aXMgaXMgcmVxdWlyZWQgdG8gY2xlYW4gdXAgdGhlIHVzYWdlIG9mIGVudW0tdHlwZWQgcHJvcGVy
dGllcyBpbiBzd2l0Y2gKLXN0YXRlbWVudHMuIFVubGlrZSBvdGhlciBmaWVsZCB0eXBlcywgZW51
bSBwcm9wZXJ0aWVzIGNhbm5vdCBiZQotaW1wbGljaXRseS11bndyYXBwZWQgb3B0aW9uYWxzIHdp
dGhvdXQgcmVxdWlyaW5nIHRoYXQgdXNlcyBpbiBzd2l0Y2ggc3RhdGVtZW50cwotYmUgZXhwbGlj
aXRseSB1bndyYXBwZWQuIEZvciBleGFtcGxlLCBpZiB3ZSBjb25zaWRlciBhIG1lc3NhZ2Ugd2l0
aCB0aGUgZW51bQotYWJvdmUsIHRoaXMgdXNhZ2Ugd2lsbCBmYWlsIHRvIGNvbXBpbGU6Ci0KLWBg
YHN3aWZ0Ci0vLyBXaXRob3V0IE5pbExpdGVyYWxDb252ZXJ0aWJsZSBjb25mb3JtYW5jZSBvbiBD
b250ZW50VHlwZQotcHVibGljIHN0cnVjdCBTb21lTWVzc2FnZTogUHJvdG9NZXNzYWdlIHsKLSAg
cHVibGljIHZhciBjb250ZW50VHlwZTogQ29udGVudFR5cGUhIHsgLi4uIH0KLX0KLQotLy8gRVJS
T1I6IG5vIGNhc2UgbmFtZWQgdGV4dCBvciBpbWFnZQotc3dpdGNoIHNvbWVNZXNzYWdlLmNvbnRl
bnRUeXBlIHsKLSAgY2FzZSAudGV4dDogeyAuLi4gfQotICBjYXNlIC5pbWFnZTogeyAuLi4gfQot
fQotYGBgCi0KLUV2ZW4gdGhvdWdoIG91ciBpbXBsZW1lbnRhdGlvbiBndWFyYW50ZWVzIHRoYXQg
YGNvbnRlbnRUeXBlYCB3aWxsIG5ldmVyIGJlIG5pbCwKLWlmIGl0IGlzIGFuIG9wdGlvbmFsIHR5
cGUsIGl0cyBjYXNlcyB3b3VsZCBiZSBgc29tZWAgYW5kIGBub25lYCwgbm90IHRoZSBjYXNlcwot
b2YgdGhlIHVuZGVybHlpbmcgZW51bSB0eXBlLiBJbiBvcmRlciB0byB1c2UgaXQgaW4gdGhpcyBj
b250ZXh0LCB0aGUgdXNlciBtdXN0Ci13cml0ZSBgc29tZU1lc3NhZ2UuY29udGVudFR5cGUhYCBp
biB0aGVpciBzd2l0Y2ggc3RhdGVtZW50LgotCi1NYWtpbmcgdGhlIGVudW0gaXRzZWxmIGBOaWxM
aXRlcmFsQ29udmVydGlibGVgIHBlcm1pdHMgdXMgdG8gbWFrZSB0aGUgcHJvcGVydHkKLW5vbi1v
cHRpb25hbCwgc28gdGhlIHVzZXIgY2FuIHN0aWxsIHNldCBpdCB0byBuaWwgdG8gY2xlYXIgaXQg
KGkuZS4sIHJlc2V0IGl0IHRvCi1pdHMgZGVmYXVsdCB2YWx1ZSksIHdoaWxlIGVsaW1pbmF0aW5n
IHRoZSBuZWVkIHRvIGV4cGxpY2l0bHkgdW53cmFwIGl0IGluIGEKLXN3aXRjaCBzdGF0ZW1lbnQu
Ci0KLWBgYHN3aWZ0Ci0vLyBXaXRoIE5pbExpdGVyYWxDb252ZXJ0aWJsZSBjb25mb3JtYW5jZSBv
biBDb250ZW50VHlwZQotcHVibGljIHN0cnVjdCBTb21lTWVzc2FnZTogUHJvdG9NZXNzYWdlIHsK
LSAgLy8gTm90ZSB0aGF0IHRoZSBwcm9wZXJ0eSB0eXBlIGlzIG5vIGxvbmdlciBvcHRpb25hbAot
ICBwdWJsaWMgdmFyIGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZSB7IC4uLiB9Ci19Ci0KLS8vIE9L
OiBDb21waWxlcyBhbmQgcnVucyBhcyBleHBlY3RlZAotc3dpdGNoIHNvbWVNZXNzYWdlLmNvbnRl
bnRUeXBlIHsKLSAgY2FzZSAudGV4dDogeyAuLi4gfQotICBjYXNlIC5pbWFnZTogeyAuLi4gfQot
fQotCi0vLyBUaGUgZW51bSBjYW4gYmUgcmVzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUgdGhpcyB3
YXkKLXNvbWVNZXNzYWdlLmNvbnRlbnRUeXBlID0gbmlsCi1gYGAKLQotT25lIG1pbm9yIG9kZGl0
eSB3aXRoIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBuaWwgd2lsbCBiZSBhdXRvLWNvbnZlcnRlZCB0
byB0aGUKLWRlZmF1bHQgdmFsdWUgb2YgdGhlIGVudW0gaW4gYW55IGNvbnRleHQsIG5vdCBqdXN0
IGZpZWxkIGFzc2lnbm1lbnQuIEluIG90aGVyCi13b3JkcywgdGhpcyBpcyB2YWxpZDoKLQotYGBg
c3dpZnQKLWZ1bmMgZm9vKGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZSkgeyAuLi4gfQotZm9vKG5p
bCkgLy8gSW5zaWRlIGZvbywgY29udGVudFR5cGUgPT0gLnRleHQKLWBgYAotCi1UaGF0IGJlaW5n
IHNhaWQsIHRoZSBhZHZhbnRhZ2Ugb2YgYmVpbmcgYWJsZSB0byBzaW11bHRhbmVvdXNseSBzdXBw
b3J0Ci1uaWwtcmVzZXR0YWJpbGl0eSBhbmQgc3dpdGNoLXdpdGhvdXQtdW53cmFwcGluZyBvdXR3
ZWlnaHMgdGhpcyBzaWRlIGVmZmVjdCwKLWVzcGVjaWFsbHkgaWYgYXBwcm9wcmlhdGVseSBkb2N1
bWVudGVkLiBJdCBpcyBvdXIgaG9wZSB0aGF0IGEgbmV3IGZvcm0gb2YKLXJlc2V0dGFibGUgcHJv
cGVydGllcyB3aWxsIGJlIGFkZGVkIHRvIFN3aWZ0IHRoYXQgZWxpbWluYXRlcyB0aGlzIGluY29u
c2lzdGVuY3kuCi1Tb21lIGNvbW11bml0eSBtZW1iZXJzIGhhdmUgYWxyZWFkeSBkcmFmdGVkIG9y
IHNlbnQgcHJvcG9zYWxzIGZvciByZXZpZXcgdGhhdAotd291bGQgYmVuZWZpdCBvdXIgZGVzaWdu
czoKLQotKiAgIFtTRS0wMDMwOiBQcm9wZXJ0eSBCZWhhdmlvcnNdCi0gICAgKGh0dHBzOi8vZ2l0
aHViLmNvbS9hcHBsZS9zd2lmdC1ldm9sdXRpb24vYmxvYi9tYXN0ZXIvcHJvcG9zYWxzLzAwMzAt
cHJvcGVydHktYmVoYXZpb3ItZGVjbHMubWQpCi0qICAgW0RyYWZ0ZWQ6IFJlc2V0dGFibGUgUHJv
cGVydGllc10KLSAgICAoaHR0cHM6Ly9naXRodWIuY29tL3BhdHRlcnMvc3dpZnQtZXZvbHV0aW9u
L2Jsb2IvbWFzdGVyL3Byb3Bvc2Fscy8wMDAwLXJlc2V0dGFibGUtcHJvcGVydGllcy5tZCkKLQot
IyMjIEVudW0gYWxpYXNlcwotCi1UaGUgYGFsbG93X2FsaWFzYCBvcHRpb24gaW4gcHJvdG9idWYg
c2xpZ2h0bHkgY29tcGxpY2F0ZXMgdGhlIHVzZSBvZiBTd2lmdCBlbnVtcwotdG8gcmVwcmVzZW50
IHRoYXQgdHlwZSwgYmVjYXVzZSByYXcgdmFsdWVzIG9mIGNhc2VzIGluIGFuIGVudW0gbXVzdCBi
ZSB1bmlxdWUuCi1Td2lmdCBsZXRzIHVzIGRlZmluZSBzdGF0aWMgdmFyaWFibGVzIGluIGFuIGVu
dW0gdGhhdCBhbGlhcyBhY3R1YWwgY2FzZXMuIEZvcgotZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBw
cm90b2J1ZiBlbnVtOgotCi1gYGBwcm90b2J1ZgotZW51bSBGb28gewotICBvcHRpb24gYWxsb3df
YWxpYXMgPSB0cnVlOwotICBCQVIgPSAwOwotICBCQVogPSAwOwotfQotYGBgCi0KLXdpbGwgYmUg
cmVwcmVzZW50ZWQgaW4gU3dpZnQgYXM6Ci0KLWBgYHN3aWZ0Ci1wdWJsaWMgZW51bSBGb286IElu
dDMyLCBOaWxMaXRlcmFsQ29udmVydGlibGUgewotICBjYXNlIGJhciA9IDAKLSAgc3RhdGljIHB1
YmxpYyBsZXQgYmF6ID0gYmFyCi0KLSAgLy8gLi4uIGV0Yy4KLX0KLQotLy8gQ2FuIHN0aWxsIHVz
ZSAuYmF6IHNob3J0aGFuZCB0byByZWZlcmVuY2UgdGhlIGFsaWFzIGluIGNvbnRleHRzCi0vLyB3
aGVyZSB0aGUgdHlwZSBpcyBpbmZlcnJlZAotYGBgCi0KLVRoYXQgaXMsIHdlIHVzZSB0aGUgZmly
c3QgbmFtZSBhcyB0aGUgYWN0dWFsIGNhc2UgYW5kIHVzZSBzdGF0aWMgdmFyaWFibGVzIGZvcgot
dGhlIG90aGVyIGFsaWFzZXMuIE9uZSBkcmF3YmFjayB0byB0aGlzIGFwcHJvYWNoIGlzIHRoYXQg
dGhlIHN0YXRpYyBhbGlhc2VzCi1jYW5ub3QgYmUgdXNlZCBhcyBjYXNlcyBpbiBhIHN3aXRjaCBz
dGF0ZW1lbnQgKHRoZSBjb21waWxlciBlbWl0cyB0aGUgZXJyb3IKLSrigJxFbnVtIGNhc2Ug4oCY
YmF64oCZIG5vdCBmb3VuZCBpbiB0eXBlIOKAmEZvb+KAmeKAnSopLiBIb3dldmVyLCBpbiBvdXIg
b3duIGNvZGUgYmFzZXMsCi10aGVyZSBhcmUgb25seSBhIGZldyBwbGFjZXMgd2hlcmUgZW51bSBh
bGlhc2VzIGFyZSBub3QgbWVyZSByZW5hbWluZ3Mgb2YgYW4KLW9sZGVyIHZhbHVlLCBidXQgdGhl
eSBhbHNvIGRvbuKAmXQgYXBwZWFyIHRvIGJlIHRoZSB0eXBlIG9mIHZhbHVlIHRoYXQgb25lIHdv
dWxkCi1leHBlY3QgdG8gc3dpdGNoIG9uIChmb3IgZXhhbXBsZSwgYSBncm91cCBvZiBuYW1lZCBj
b25zdGFudHMgcmVwcmVzZW50aW5nCi1tZXRyaWNzIHJhdGhlciB0aGFuIGEgc2V0IG9mIG9wdGlv
bnMpLCBzbyB0aGlzIHJlc3RyaWN0aW9uIGlzIG5vdCBzaWduaWZpY2FudC4KLQotVGhpcyBzdHJh
dGVneSBhbHNvIGltcGxpZXMgdGhhdCBjaGFuZ2luZyB0aGUgbmFtZSBvZiBhbiBlbnVtIGFuZCBh
ZGRpbmcgdGhlIG9sZAotbmFtZSBhcyBhbiBhbGlhcyBiZWxvdyB0aGUgbmV3IG5hbWUgd2lsbCBi
ZSBhIGJyZWFraW5nIGNoYW5nZSBpbiB0aGUgZ2VuZXJhdGVkCi1Td2lmdCBjb2RlLgotCi0jIyBP
bmVvZiB0eXBlcwotCi1UaGUgYG9uZW9mYCBmZWF0dXJlIHJlcHJlc2VudHMgYSDigJx2YXJpYW50
L3VuaW9u4oCdIGRhdGEgdHlwZSB0aGF0IG1hcHMgbmljZWx5IHRvCi1Td2lmdCBlbnVtcyB3aXRo
IGFzc29jaWF0ZWQgdmFsdWVzIChhbGdlYnJhaWMgdHlwZXMpLiBUaGVzZSBmaWVsZHMgY2FuIGFs
c28gYmUKLWFjY2Vzc2VkIGluZGVwZW5kZW50bHkgdGhvdWdoLCBhbmQsIHNwZWNpZmljYWxseSBp
biB0aGUgY2FzZSBvZiBwcm90bzIsIGl04oCZcwotcmVhc29uYWJsZSB0byBleHBlY3QgYWNjZXNz
IHRvIGRlZmF1bHQgdmFsdWVzIHdoZW4gYWNjZXNzaW5nIGEgZmllbGQgdGhhdCBpcyBub3QKLWV4
cGxpY2l0bHkgc2V0LgotCi1UYWtpbmcgYWxsIHRoaXMgaW50byBhY2NvdW50LCB3ZSBjYW4gcmVw
cmVzZW50IGEgYG9uZW9mYCBpbiBTd2lmdCB3aXRoIHR3byBzZXRzCi1vZiBjb25zdHJ1Y3RzOgot
Ci0qICAgUHJvcGVydGllcyBpbiB0aGUgbWVzc2FnZSB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGBv
bmVvZmAgZmllbGRzLgotKiAgIEEgbmVzdGVkIGVudW0gbmFtZWQgYWZ0ZXIgdGhlIGBvbmVvZmAg
YW5kIHdoaWNoIHByb3ZpZGVzIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgZmllbGQgdmFsdWVzIGFz
IGNhc2UgYXJndW1lbnRzLgotCi1UaGlzIGFwcHJvYWNoIGZ1bGZpbGxzIHRoZSBuZWVkcyBvZiBw
cm90byBjb25zdW1lcnMgYnkgcHJvdmlkaW5nIGEKLVN3aWZ0LWlkaW9tYXRpYyB3YXkgb2Ygc2lt
dWx0YW5lb3VzbHkgY2hlY2tpbmcgd2hpY2ggZmllbGQgaXMgc2V0IGFuZCBhY2Nlc3NpbmcKLWl0
cyB2YWx1ZSwgcHJvdmlkaW5nIGluZGl2aWR1YWwgcHJvcGVydGllcyB0byBhY2Nlc3MgdGhlIGRl
ZmF1bHQgdmFsdWVzCi0oaW1wb3J0YW50IGZvciBwcm90bzIpLCBhbmQgc2FmZWx5IGFsbG93cyBh
IGZpZWxkIHRvIGJlIG1vdmVkIGludG8gYSBgb25lb2ZgCi13aXRob3V0IGJyZWFraW5nIGNsaWVu
dHMuCi0KLUNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgcHJvdG86Ci0KLWBgYHByb3RvYnVmCi1tZXNz
YWdlIE15TWVzc2FnZSB7Ci0gIG9uZW9mIHJlY29yZCB7Ci0gICAgc3RyaW5nIG5hbWUgPSAxIFtk
ZWZhdWx0ID0gInVubmFtZWQiXTsKLSAgICBpbnQzMiBpZF9udW1iZXIgPSAyIFtkZWZhdWx0ID0g
MF07Ci0gIH0KLX0KLWBgYAotCi1JbiBTd2lmdCwgd2Ugd291bGQgZ2VuZXJhdGUgYW4gZW51bSwg
YSBwcm9wZXJ0eSBmb3IgdGhhdCBlbnVtLCBhbmQgcHJvcGVydGllcwotZm9yIHRoZSBmaWVsZHMg
dGhlbXNlbHZlczoKLQotYGBgc3dpZnQKLXB1YmxpYyBzdHJ1Y3QgTXlNZXNzYWdlOiBQcm90b01l
c3NhZ2UgewotICBwdWJsaWMgZW51bSBSZWNvcmQ6IE5pbExpdGVyYWxDb252ZXJ0aWJsZSB7Ci0g
ICAgY2FzZSBuYW1lKFN0cmluZykKLSAgICBjYXNlIGlkTnVtYmVyKEludDMyKQotICAgIGNhc2Ug
Tk9UX1NFVAotCi0gICAgcHVibGljIGluaXQobmlsTGl0ZXJhbDogKCkpIHsgc2VsZiA9IC5OT1Rf
U0VUIH0KLSAgfQotCi0gIC8vIFRoaXMgaXMgdGhlICJTd2lmdHkiIHdheSBvZiBhY2Nlc3Npbmcg
dGhlIHZhbHVlCi0gIHB1YmxpYyB2YXIgcmVjb3JkOiBSZWNvcmQgeyAuLi4gfQotCi0gIC8vIERp
cmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgZmllbGRzCi0gIHB1YmxpYyB2YXIgbmFtZTog
U3RyaW5nISB7IC4uLiB9Ci0gIHB1YmxpYyB2YXIgaWROdW1iZXI6IEludDMyISB7IC4uLiB9Ci19
Ci1gYGAKLQotVGhpcyBtYWtlcyBib3RoIHVzYWdlIHBhdHRlcm5zIHBvc3NpYmxlOgotCi1gYGBz
d2lmdAotLy8gVXNhZ2UgMTogQ2FzZS1iYXNlZCBkaXNwYXRjaAotc3dpdGNoIG1lc3NhZ2UucmVj
b3JkIHsKLSAgY2FzZSAubmFtZShsZXQgbmFtZSk6Ci0gICAgLy8gRG8gc29tZXRoaW5nIHdpdGgg
bmFtZSBpZiBpdCB3YXMgZXhwbGljaXRseSBzZXQKLSAgY2FzZSAuaWROdW1iZXIobGV0IGlkKToK
LSAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCBpZF9udW1iZXIgaWYgaXQgd2FzIGV4cGxpY2l0bHkg
c2V0Ci0gIGNhc2UgLk5PVF9TRVQ6Ci0gICAgLy8gRG8gc29tZXRoaW5nIGlmIGl04oCZcyBub3Qg
c2V0Ci19Ci0KLS8vIFVzYWdlIDI6IERpcmVjdCBhY2Nlc3MgZm9yIGRlZmF1bHQgdmFsdWUgZmFs
bGJhY2sKLS8vIFNldHMgdGhlIGxhYmVsIHRleHQgdG8gdGhlIG5hbWUgaWYgaXQgd2FzIGV4cGxp
Y2l0bHkgc2V0LCBvciB0bwotLy8gInVubmFtZWQiICh0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhl
IGZpZWxkKSBpZiBpZF9udW1iZXIgd2FzIHNldAotLy8gaW5zdGVhZAotbGV0IG15TGFiZWwgPSBV
SUxhYmVsKCkKLW15TGFiZWwudGV4dCA9IG1lc3NhZ2UubmFtZQotYGBgCi0KLUFzIHdpdGggcHJv
dG8gZW51bXMsIHRoZSBnZW5lcmF0ZWQgYG9uZW9mYCBlbnVtIGNvbmZvcm1zIHRvCi1gTmlsTGl0
ZXJhbENvbnZlcnRpYmxlYCB0byBhdm9pZCBzd2l0Y2ggc3RhdGVtZW50IGlzc3Vlcy4gU2V0dGlu
ZyB0aGUgcHJvcGVydHkKLXRvIG5pbCB3aWxsIGNsZWFyIGl0IChpLmUuLCByZXNldCBpdCB0byBg
Tk9UX1NFVGApLgotCi0jIyBVbmtub3duIEZpZWxkcyAocHJvdG8yIG9ubHkpCi0KLVRvIGJlIHdy
aXR0ZW4uCi0KLSMjIEV4dGVuc2lvbnMgKHByb3RvMiBvbmx5KQotCi1UbyBiZSB3cml0dGVuLgot
Ci0jIyBSZWZsZWN0aW9uIGFuZCBEZXNjcmlwdG9ycwotCi1XZSB3aWxsIG5vdCBpbmNsdWRlIHJl
ZmxlY3Rpb24gb3IgZGVzY3JpcHRvcnMgaW4gdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIFN3aWZ0
Ci1saWJyYXJ5LiBUaGUgdXNlIGNhc2VzIGZvciByZWZsZWN0aW9uIG9uIG1vYmlsZSBhcmUgbm90
IGFzIHN0cm9uZyBhbmQgdGhlIHN0YXRpYwotZGF0YSB0byByZXByZXNlbnQgdGhlIGRlc2NyaXB0
b3JzIHdvdWxkIGFkZCBibG9hdCB3aGVuIHdlIHdpc2ggdG8ga2VlcCB0aGUgY29kZQotc2l6ZSBz
bWFsbC4KLQotSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZXkg
Y2FuIGJlIGluY2x1ZGVkIGFzIGV4dGVuc2lvbnMKLXdoaWNoIG1pZ2h0IGJlIGFibGUgdG8gYmUg
ZXhjbHVkZWQgZnJvbSBhIGJ1aWxkIGFuZC9vciBhdXRvbWF0aWNhbGx5IGRlYWQKLXN0cmlwcGVk
IGJ5IHRoZSBjb21waWxlciBpZiB0aGV5IGFyZSBub3QgdXNlZC4KLQotIyMgQXBwZW5kaXggQTog
UmVqZWN0ZWQgc3RyYXRlZ2llcyB0byBoYW5kbGUgcGFja2FnZXMKLQotIyMjIEVhY2ggcGFja2Fn
ZSBpcyBpdHMgb3duIFN3aWZ0IG1vZHVsZQotCi1FYWNoIHByb3RvIHBhY2thZ2UgY291bGQgYmUg
ZGVjbGFyZWQgYXMgaXRzIG93biBTd2lmdCBtb2R1bGUsIHJlcGxhY2luZyBkb3RzCi13aXRoIHVu
ZGVyc2NvcmVzIChlLmcuLCBwYWNrYWdlIGBmb28uYmFyYCBiZWNvbWVzIG1vZHVsZSBgRm9vX0Jh
cmApLiBUaGVuLCB1c2Vycwotd291bGQgc2ltcGx5IGltcG9ydCBtb2R1bGVzIGNvbnRhaW5pbmcg
d2hhdGV2ZXIgcHJvdG8gbW9kdWxlcyB0aGV5IHdhbnQgdG8gdXNlCi1hbmQgcmVmZXIgdG8gdGhl
IGdlbmVyYXRlZCB0eXBlcyBieSB0aGVpciBzaG9ydCBuYW1lcy4KLQotKipUaGlzIHNvbHV0aW9u
IGlzIHNpbXBseSBub3QgcG9zc2libGUsIGhvd2V2ZXIuKiogU3dpZnQgbW9kdWxlcyBjYW5ub3QK
LWNpcmN1bGFybHkgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIGJ1dCB0aGVyZSBpcyBubyByZXN0cmlj
dGlvbiBhZ2FpbnN0IHByb3RvCi1wYWNrYWdlcyBkb2luZyBzby4gQ2lyY3VsYXIgaW1wb3J0cyBh
cmUgZm9yYmlkZGVuIChlLmcuLCBgZm9vLnByb3RvYCBpbXBvcnRpbmcKLWBiYXIucHJvdG9gIGlt
cG9ydGluZyBgZm9vLnByb3RvYCksIGJ1dCBub3RoaW5nIHByZXZlbnRzIHBhY2thZ2UgYGZvb2Ag
ZnJvbQotdXNpbmcgYSB0eXBlIGluIHBhY2thZ2UgYGJhcmAgd2hpY2ggdXNlcyBhIGRpZmZlcmVu
dCB0eXBlIGluIHBhY2thZ2UgYGZvb2AsIGFzCi1sb25nIGFzIHRoZXJlIGlzIG5vIGltcG9ydCBj
eWNsZS4gSWYgdGhlc2UgcGFja2FnZXMgd2VyZSBnZW5lcmF0ZWQgYXMgU3dpZnQKLW1vZHVsZXMs
IHRoZW4gYEZvb2Agd291bGQgY29udGFpbiBhbiBgaW1wb3J0IEJhcmAgc3RhdGVtZW50IGFuZCBg
QmFyYCB3b3VsZAotY29udGFpbiBhbiBgaW1wb3J0IEZvb2Agc3RhdGVtZW50LCBhbmQgdGhlcmUg
aXMgbm8gd2F5IHRvIGNvbXBpbGUgdGhpcy4KLQotIyMjIEFkIGhvYyBuYW1lc3BhY2luZyB3aXRo
IHN0cnVjdHMKLQotV2UgY2FuIOKAnGZha2XigJ0gbmFtZXNwYWNlcyBpbiBTd2lmdCBieSBkZWNs
YXJpbmcgZW1wdHkgc3RydWN0cyB3aXRoIHByaXZhdGUKLWluaXRpYWxpemVycy4gU2luY2UgbW9k
dWxlcyBhcmUgY29uc3RydWN0ZWQgYmFzZWQgb24gY29tcGlsZXIgYXJndW1lbnRzLCBub3QgYnkK
LXN5bnRhY3RpYyBjb25zdHJ1Y3RzLCBhbmQgYmVjYXVzZSB0aGVyZSBpcyBubyBwdXJlIFN3aWZ0
IHdheSB0byBkZWZpbmUKLXN1Ym1vZHVsZXMgKGV2ZW4gdGhvdWdoIENsYW5nIG1vZHVsZSBtYXBz
IHN1cHBvcnQgdGhpcyksIHRoZXJlIGlzIG5vCi1zb3VyY2UtZHJpdmUgd2F5IHRvIGdyb3VwIGdl
bmVyYXRlZCBjb2RlIGludG8gbmFtZXNwYWNlcyBhc2lkZSBmcm9tIHRoaXMKLWFwcHJvYWNoLgot
Ci1UeXBlcyBjYW4gYmUgYWRkZWQgdG8gdGhvc2UgaW50ZXJtZWRpYXRlIHBhY2thZ2Ugc3RydWN0
cyB1c2luZyBTd2lmdCBleHRlbnNpb25zLgotRm9yIGV4YW1wbGUsIGEgbWVzc2FnZSBgQmF6YCBp
biBwYWNrYWdlIGBmb28uYmFyYCBjb3VsZCBiZSByZXByZXNlbnRlZCBpbiBTd2lmdAotYXMgZm9s
bG93czoKLQotYGBgc3dpZnQKLXB1YmxpYyBzdHJ1Y3QgRm9vIHsKLSAgcHJpdmF0ZSBpbml0KCkg
e30KLX0KLQotcHVibGljIGV4dGVuc2lvbiBGb28gewotICBwdWJsaWMgc3RydWN0IEJhciB7Ci0g
ICAgcHJpdmF0ZSBpbml0KCkge30KLSAgfQotfQotCi1wdWJsaWMgZXh0ZW5zaW9uIEZvby5CYXIg
ewotICBwdWJsaWMgc3RydWN0IEJheiB7Ci0gICAgLy8gTWVzc2FnZSBmaWVsZHMgYW5kIG90aGVy
IG1ldGhvZHMKLSAgfQotfQotCi1sZXQgYmF6ID0gRm9vLkJhci5CYXooKQotYGBgCi0KLUVhY2gg
b2YgdGhlc2UgY29uc3RydWN0cyB3b3VsZCBhY3R1YWxseSBiZSBkZWZpbmVkIGluIGEgc2VwYXJh
dGUgZmlsZTsgU3dpZnQKLWxldHMgdXMga2VlcCB0aGVtIHNlcGFyYXRlIGFuZCBhZGQgbXVsdGlw
bGUgc3RydWN0cyB0byBhIHNpbmdsZSDigJxuYW1lc3BhY2XigJ0KLXRocm91Z2ggZXh0ZW5zaW9u
cy4KLQotVW5mb3J0dW5hdGVseSwgdGhlc2UgaW50ZXJtZWRpYXRlIHN0cnVjdHMgZ2VuZXJhdGUg
c3ltYm9scyBvZiB0aGVpciBvd24KLShtZXRhdHlwZSBpbmZvcm1hdGlvbiBpbiB0aGUgZGF0YSBz
ZWdtZW50KS4gVGhpcyBiZWNvbWVzIHByb2JsZW1hdGljIGlmIG11bHRpcGxlCi1idWlsZCB0YXJn
ZXRzIGNvbnRhaW4gU3dpZnQgc291cmNlcyBnZW5lcmF0ZWQgZnJvbSBkaWZmZXJlbnQgbWVzc2Fn
ZXMgaW4gdGhlCi1zYW1lIHBhY2thZ2UuIEF0IGxpbmsgdGltZSwgdGhlc2Ugc3ltYm9scyB3b3Vs
ZCBjb2xsaWRlLCByZXN1bHRpbmcgaW4gbXVsdGlwbGUKLWRlZmluaXRpb24gZXJyb3JzLgotCi1U
aGlzIGFwcHJvYWNoIGFsc28gaGFzIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB0aGVyZSBpcyBubyBh
dXRvbWF0aWMg4oCcc2hvcnTigJ0gd2F5Ci10byByZWZlciB0byB0aGUgZ2VuZXJhdGVkIG1lc3Nh
Z2VzIGF0IHRoZSBkZWVwZXN0IG5lc3RpbmcgbGV2ZWxzOyBzaW5jZSB0aGlzIHVzZQotb2Ygc3Ry
dWN0cyBpcyBhIGhhY2sgYXJvdW5kIHRoZSBsYWNrIG9mIG5hbWVzcGFjZXMsIHRoZXJlIGlzIG5v
IGVxdWl2YWxlbnQgdG8KLWltcG9ydCAoSmF2YSkgb3IgdXNpbmcgKEMrKykgdG8gc2ltcGxpZnkg
dGhpcy4gVXNlcnMgd291bGQgaGF2ZSB0byBkZWNsYXJlIHR5cGUKLWFsaWFzZXMgdG8gbWFrZSB0
aGlzIGNsZWFuZXIsIG9yIHdlIHdvdWxkIGhhdmUgdG8gZ2VuZXJhdGUgdGhlbSBmb3IgdXNlcnMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2RvY3MvdGhpcmRfcGFydHkubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2RvY3MvdGhpcmRfcGFydHkubWQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZWQ2YTM4NjhmODJjMGI2OWMwMGE5ZTRhNmI2
OWFkOGQ4NTljYjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9kb2NzL3RoaXJkX3BhcnR5Lm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLSMg
VGhpcmQtUGFydHkgQWRkLW9ucyBmb3IgUHJvdG9jb2wgQnVmZmVycwotCi1UaGlzIHBhZ2UgbGlz
dHMgY29kZSByZWxhdGVkIHRvIFByb3RvY29sIEJ1ZmZlcnMgd2hpY2ggaXMgZGV2ZWxvcGVkIGFu
ZCBtYWludGFpbmVkIGJ5IHRoaXJkIHBhcnRpZXMuICBZb3UgbWF5IGZpbmQgdGhpcyBjb2RlIHVz
ZWZ1bCwgYnV0IG5vdGUgdGhhdCAqKnRoZXNlIHByb2plY3RzIGFyZSBub3QgYWZmaWxpYXRlZCB3
aXRoIG9yIGVuZG9yc2VkIGJ5IEdvb2dsZSAodW5sZXNzIGV4cGxpY2l0bHkgbWFya2VkKSoqOyB0
cnkgdGhlbSBhdCB5b3VyIG93biByaXNrLiAgQWxzbyBub3RlIHRoYXQgbWFueSBwcm9qZWN0cyBo
ZXJlIGFyZSBpbiB0aGUgZWFybHkgc3RhZ2VzIG9mIGRldmVsb3BtZW50IGFuZCBub3QgcHJvZHVj
dGlvbi1yZWFkeS4KLQotSWYgeW91IGhhdmUgYSBwcm9qZWN0IHRoYXQgc2hvdWxkIGJlIGxpc3Rl
ZCBoZXJlLCBwbGVhc2UgW3NlbmQgdXMgYSBwdWxsIHJlcXVlc3RdKGh0dHBzOi8vZ2l0aHViLmNv
bS9nb29nbGUvcHJvdG9idWYvcHVsbHMpIHRvIHVwZGF0ZSB0aGlzIHBhZ2UuCi0KLSMjIFByb2dy
YW1taW5nIExhbmd1YWdlcwotCi1UaGVzZSBhcmUgcHJvamVjdHMgd2Uga25vdyBhYm91dCBpbXBs
ZW1lbnRpbmcgUHJvdG9jb2wgQnVmZmVycyBmb3Igb3RoZXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Vz
OgotKiBBY3Rpb24gU2NyaXB0OiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYtYWN0
aW9uc2NyaXB0My8KLSogQWN0aW9uIFNjcmlwdDogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9w
cm90b2MtZ2VuLWFzMy8KLSogQWN0aW9uIFNjcmlwdDogaHR0cHM6Ly9naXRodWIuY29tL21hdHJp
eDNkL0pQcm90b2MKLSogQzogaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvYnVmLWMvcHJvdG9idWYt
YwotKiBDOiBodHRwOi8va290aS5rYXBzaS5maS9qcGEvbmFub3BiLwotKiBDOiBodHRwczovL2dp
dGh1Yi5jb20vY2xvdWR3dS9wYmMvCi0qIEM6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYWJlcm1hbi91
cGIvd2lraQotKiBDOiBodHRwczovL2dpdGh1Yi5jb20vc3F1aWRmdW5rL3Byb3RvYmx1ZmYKLSog
QysrOiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmIChHb29nbGUtb2ZmaWNpYWwg
aW1wbGVtZW50YXRpb24pCi0qIEMvQysrOiBodHRwOi8vc3BiYy5zZi5uZXQvCi0qIEMjOiBodHRw
Oi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYtY3NoYXJwLXBvcnQKLSogQyM6IGh0dHA6Ly9j
b2RlLmdvb2dsZS5jb20vcC9wcm90b3NoYXJwLwotKiBDIzogaHR0cHM6Ly9zaWxlbnRvcmJpdC5j
b20vcHJvdG9idWYvCi0qIEMjLy5ORVQvV0NGL1ZCOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
cHJvdG9idWYtbmV0LwotKiBDbG9qdXJlOiBodHRwOi8vZ2l0aHViLmNvbS9uaW5qdWRkL2Nsb2p1
cmUtcHJvdG9idWYKLSogQ29tbW9uIExpc3A6IGh0dHA6Ly93d3cucHJpc20uZ2F0ZWNoLmVkdS9+
bmRhbnRhbTMvZG9jcy9zLXByb3RvYnVmLwotKiBDb21tb24gTGlzcDogaHR0cDovL2dpdGh1Yi5j
b20vYnJvd24vcHJvdG9idWYKLSogRDogaHR0cHM6Ly9naXRodWIuY29tL21zb3VjeS9kcHJvdG8K
LSogRDogaHR0cDovLzI1Ni5tYWtlcnNsb2NhbC5vcmcvd2lraS9pbmRleC5waHAvUHJvdG9jb2xC
dWZmZXIKLSogRDogaHR0cHM6Ly9naXRodWIuY29tL29wdGljcm9uL1Byb3RvY29sQnVmZmVyCi0q
IERhcnQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvZGFydC1wcm90b2J1ZiAocnVudGlt
ZSkgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9kYXJ0LXByb3RvYy1wbHVnaW4gKGNvZGUg
Z2VuZXJhdG9yKQotKiBEZWxwaGk6IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHJv
dG9idWYtZGVscGhpLwotKiBEZWxwaGk6IGh0dHA6Ly9mdW5kZW1lbnRhbHMuc291cmNlZm9yZ2Uu
bmV0L2RsLmh0bWwKLSogRWxpeGlyOiBodHRwczovL2dpdGh1Yi5jb20vamVyZW15b25nL2V4cHJv
dG9jCi0qIEVybGFuZzogaHR0cDovL2dpdGh1Yi5jb20vbmdlcmFraW5lcy9lcmxhbmdfcHJvdG9i
dWZmcy90cmVlL21hc3RlcgotKiBFcmxhbmc6IGh0dHA6Ly9waXFpLm9yZy8KLSogRXJsYW5nOiBo
dHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Byb3RvYy1nZW4tZXJsLwotKiBFcmxhbmc6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9iYXNoby9lcmxhbmdfcHJvdG9idWZmcwotKiBHbzogaHR0cHM6Ly9naXRo
dWIuY29tL2dvbGFuZy9wcm90b2J1ZiAoR29vZ2xlLW9mZmljaWFsIGltcGxlbWVudGF0aW9uKQot
KiBHbzogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvcHJvdG9idWYvCi0qIEdvOiBodHRwczov
L2dpdGh1Yi5jb20vYWt1bnNweS9nb3BidWYKLSogSGFza2VsbDogaHR0cDovL2hhY2thZ2UuaGFz
a2VsbC5vcmcvcGFja2FnZS9ocHJvdG9jCi0qIEhheGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9BdHJ5
L3Byb3RvYy1nZW4taGF4ZQotKiBKYXZhOiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3Rv
YnVmIChHb29nbGUtb2ZmaWNpYWwgaW1wbGVtZW50YXRpb24pCi0qIEphdmEvQW5kcm9pZDogaHR0
cHM6Ly9naXRodWIuY29tL3NxdWFyZS93aXJlCi0qIEphdmEgTUU6IGh0dHA6Ly9jb2RlLmdvb2ds
ZS5jb20vcC9wcm90b2J1Zi1qYXZhbWUvCi0qIEphdmEgTUU6IGh0dHA6Ly9zd2luZ21lLnNvdXJj
ZWZvcmdlLm5ldC9lbmNvZGUuc2h0bWwKLSogSmF2YSBNRTogaHR0cDovL2dpdGh1Yi5jb20vcG9u
ZGVyaW5ncGFuZGEvcHJvdG9idWYtajJtZQotKiBKYXZhIE1FOiBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvcHJvdG9idWYtajJtZS8KLSogSmF2YXNjcmlwdDogaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL3Byb3RvYnVmLWpzLwotKiBKYXZhc2NyaXB0OiBodHRwOi8vZ2l0aHViLmNvbS9zaXJpa2F0
YS9wcm90b2pzCi0qIEphdmFzY3JpcHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9kY29kZUlPL1Byb3Rv
QnVmLmpzCi0qIEphdmFzY3JpcHQ6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi1m
b3Itbm9kZS8KLSogSmF2YXNjcmlwdDogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Byb3Rvc3R1
ZmYvCi0qIEp1bGlhOiBodHRwczovL2dpdGh1Yi5jb20vdGFubWF5a20vUHJvdG9CdWYuamwKLSog
THVhOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9jLWdlbi1sdWEvCi0qIEx1YTogaHR0
cDovL2dpdGh1Yi5jb20vaW5keWdyZWcvbHVhLXByb3RvYnVmCi0qIEx1YTogaHR0cHM6Ly9naXRo
dWIuY29tL05lb3BhbGxpdW0vbHVhLXBiCi0qIE1hdGxhYjogaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL3Byb3RvYnVmLW1hdGxhYi8KLSogTWVyY3VyeTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9w
L3Byb3RvYnVmLW1lcmN1cnkvCi0qIE9iamVjdGl2ZSBDOiBodHRwOi8vY29kZS5nb29nbGUuY29t
L3AvcHJvdG9idWYtb2JqYy8KLSogT2JqZWN0aXZlIEM6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbGV4
ZXl4by9wcm90b2J1Zi1vYmpjCi0qIE9DYW1sOiBodHRwOi8vcGlxaS5vcmcvCi0qIFBlcmw6IGh0
dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9wcm90b2J1Zi1wZXJsCi0qIFBlcmw6IGh0dHA6
Ly9zZWFyY2guY3Bhbi5vcmcvcGVybGRvYz9Hb29nbGU6OlByb3RvY29sQnVmZmVycwotKiBQZXJs
L1hTOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYtcGVybHhzLwotKiBQSFA6IGh0
dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wYjRwaHAvCi0qIFBIUDogaHR0cHM6Ly9naXRodWIuY29t
L2FsbGVncm8vcGhwLXByb3RvYnVmLwotKiBQSFA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9iaWUv
cGhwLXByb3RvY29sYnVmZmVycwotKiBQSFA6IGh0dHA6Ly9kcnNsdW1wLmdpdGh1Yi5jb20vUHJv
dG9idWYtUEhQCi0qIFByb2xvZzogaHR0cDovL3d3dy5zd2ktcHJvbG9nLm9yZy9wbGRvYy9wYWNr
YWdlL3Byb3RvYnVmcy5odG1sCi0qIFB5dGhvbjogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9w
cm90b2J1ZiAoR29vZ2xlLW9mZmljaWFsIGltcGxlbWVudGF0aW9uKQotKiBQeXRob246IGh0dHA6
Ly9laWdlbmVpbi5naXRodWIuY29tL3Byb3RvYnVmLwotKiBSOiBodHRwOi8vY3Jhbi5yLXByb2pl
Y3Qub3JnL3BhY2thZ2U9UlByb3RvQnVmCi0qIFJ1Ynk6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9ydWJ5LXByb3RvYnVmLwotKiBSdWJ5OiBodHRwOi8vZ2l0aHViLmNvbS9tb3p5L3J1YnktcHJv
dG9jb2wtYnVmZmVycwotKiBSdWJ5OiBodHRwczovL2dpdGh1Yi5jb20vYm1pemVyYW55L2JlZWZj
YWtlL3RyZWUvbWFzdGVyL2xpYi9iZWVmY2FrZQotKiBSdWJ5OiBodHRwczovL2dpdGh1Yi5jb20v
bG9jYWxzaHJlZC9wcm90b2J1ZgotKiBSdXN0OiBodHRwczovL2dpdGh1Yi5jb20vc3RlcGFuY2hl
Zy9ydXN0LXByb3RvYnVmLwotKiBTY2FsYTogaHR0cDovL2dpdGh1Yi5jb20vamVmZnBsYWlzYW5j
ZS9zY2FsYS1wcm90b2J1ZgotKiBTY2FsYTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Byb3Rv
YnVmLXNjYWxhCi0qIFNjYWxhOiBodHRwczovL2dpdGh1Yi5jb20vU2FuZHJvR3J6aWNpYy9TY2Fs
YUJ1ZmYKLSogU2NhbGE6IGh0dHA6Ly90cnVlYWNjb3JkLmdpdGh1Yi5pby9TY2FsYVBCLwotKiBT
d2lmdDogaHR0cHM6Ly9naXRodWIuY29tL2FsZXhleXhvL3Byb3RvYnVmLXN3aWZ0Ci0qIFZhbGE6
IGh0dHBzOi8vbGF1bmNocGFkLm5ldC9wcm90b2J1Zi12YWxhCi0qIFZpc3VhbCBCYXNpYzogaHR0
cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Byb3RvYnVmLW5ldC8KLQotIyMgUlBDIEltcGxlbWVudGF0
aW9ucwotCi1HUlBDIChodHRwOi8vd3d3LmdycGMuaW8vKSBpcyBHb29nbGUncyBSUEMgaW1wbGVt
ZW50YXRpb24gZm9yIFByb3RvY29sIEJ1ZmZlcnMuIFRoZXJlIGFyZSBvdGhlciB0aGlyZC1wYXJ0
eSBSUEMgaW1wbGVtZW50YXRpb25zIGFzIHdlbGwuICBTb21lIG9mIHRoZXNlIGFjdHVhbGx5IHdv
cmsgd2l0aCBQcm90b2NvbCBCdWZmZXJzIHNlcnZpY2UgZGVmaW5pdGlvbnMgKGRlZmluZWQgdXNp
bmcgdGhlIGBzZXJ2aWNlYCBrZXl3b3JkIGluIGAucHJvdG9gIGZpbGVzKSB3aGlsZSBvdGhlcnMg
anVzdCB1c2UgUHJvdG9jb2wgQnVmZmVycyBtZXNzYWdlIG9iamVjdHMuCi0KLSogaHR0cHM6Ly9n
aXRodWIuY29tL2dycGMvZ3JwYyAoQysrLCBOb2RlLmpzLCBQeXRob24sIFJ1YnksIE9iamVjdGl2
ZS1DLCBQSFAsIEMjLCBHb29nbGUtb2ZmaWNpYWwgaW1wbGVtZW50YXRpb24pCi0qIGh0dHA6Ly96
ZXJvYy5jb20vaWNlLmh0bWwgKE11bHRpcGxlIGxhbmd1YWdlcykKLSogaHR0cDovL2NvZGUuZ29v
Z2xlLmNvbS9wL3Byb3RvYnVmLW5ldC8gKEMjLy5ORVQvV0NGL1ZCKQotKiBodHRwczovL2xhdW5j
aHBhZC5uZXQvdHhwcm90b2J1Zi8gKFB5dGhvbikKLSogaHR0cHM6Ly9naXRodWIuY29tL21vZGVz
d2l0Y2gvcHJvdG9idWYtcnBjIChQeXRob24pCi0qIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9w
cm90b2J1Zi1zb2NrZXQtcnBjLyAoSmF2YSwgUHl0aG9uKQotKiBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvcHJvdG8tc3RyZWFtZXIvIChKYXZhKQotKiBodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
c2VydmVyMS8gKEMrKykKLSogaHR0cDovL2RlbHRhdnNvZnQuY29tL1JjZlVzZXJHdWlkZS9Qcm90
b2J1ZnMgKEMrKykKLSogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Byb3RvYnVmLW1pbmEtcnBj
LyAoUHl0aG9uIGNsaWVudCwgSmF2YSBzZXJ2ZXIpCi0qIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9jYXNvY2tsaWIvIChDKyspCi0qIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jeGYtcHJvdG9i
dWYvIChKYXZhKQotKiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYtcmVtb3RlLyAo
QysrL0MjKQotKiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYtcnBjLXByby8gKEph
dmEpCi0qIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9ycGMvIChHby9DKyspCi0qIGh0
dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZW5ldGVyLXByb3RvYnVmLXNlcmlhbGl6ZXIvIChKYXZh
Ly5ORVQpCi0qIGh0dHA6Ly93d3cuZGVsdGF2c29mdC5jb20vUkNGUHJvdG8uaHRtbCAoQysrL0ph
dmEvUHl0aG9uL0MjKQotKiBodHRwczovL2dpdGh1Yi5jb20vcm9iYmluZmFuL2NsYWlyZS1wcm90
b3JwYyAoQysrKQotKiBodHRwczovL2dpdGh1Yi5jb20vQmFpZHVQUy9zb2ZhLXBicnBjIChDKysp
Ci0qIGh0dHBzOi8vZ2l0aHViLmNvbS9lYmVuY2hldW5nL2FyYWIgKEMrKykKLSogaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL3Byb3RvYnVmLWNzaGFycC1ycGMvIChDIykKLSogaHR0cHM6Ly9naXRo
dWIuY29tL3RoZXNhbWV0L3JwY3ogKEMrKy9QeXRob24sIGJhc2VkIG9uIFplcm9NUSkKLSogaHR0
cHM6Ly9naXRodWIuY29tL3czNTk0MDU5NDkvbGlibWFpZCAoQysrLCBQeXRob24pCi0qIGh0dHBz
Oi8vZ2l0aHViLmNvbS9tYWR3eW4vbGlicGJycGMgKEMrKykKLQotIyMgT3RoZXIgVXRpbGl0aWVz
Ci0KLVRoZXJlIGFyZSBtaXNjZWxsYW5lb3VzIG90aGVyIHRoaW5ncyB5b3UgbWF5IGZpbmQgdXNl
ZnVsIGFzIGEgUHJvdG9jb2wgQnVmZmVycyBkZXZlbG9wZXIuCi0KLSogW05ldEJlYW5zIElERSBw
bHVnaW5dKGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi1uZXRiZWFucy1wbHVnaW4v
KQotKiBbV2lyZXNoYXJrL0V0aGVyZWFsIHBhY2tldCBzbmlmZmVyIHBsdWdpbl0oaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL3Byb3RvYnVmLXdpcmVzaGFyay8pCi0qIFtBbHRlcm5hdGUgZW5jb2Rp
bmdzIChKU09OLCBYTUwsIEhUTUwpIGZvciBKYXZhIHByb3RvYnVmc10oaHR0cDovL2NvZGUuZ29v
Z2xlLmNvbS9wL3Byb3RvYnVmLWphdmEtZm9ybWF0LykKLSogW0Fub3RoZXIgSlNPTiBlbmNvZGVy
L2RlY29kZXIgZm9yIEphdmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9zaWp1di9wcm90b2J1Zi1jb2Rl
YykKLSogW0VkaXRvciBmb3Igc2VyaWFsaXplZCBwcm90b2J1ZnNdKGh0dHA6Ly9jb2RlLmdvb2ds
ZS5jb20vcC9wcm90b2J1ZmVkaXRvci8pCi0qIFtJbnRlbGxpaiBJREVBIHBsdWdpbl0oaHR0cDov
L2dpdGh1Yi5jb20vbm5tYXR2ZWV2L2lkZWEtcGx1Z2luLXByb3RvYnVmKQotKiBbVGV4dE1hdGUg
c3ludGF4IGhpZ2hsaWdodGluZ10oaHR0cDovL2dpdGh1Yi5jb20vbWljaGFlbGVkZ2FyL3Byb3Rv
YnVmLXRtYnVuZGxlKQotKiBbT3JhY2xlIFBMIFNRTCBwbHVnaW5dKGh0dHA6Ly9jb2RlLmdvb2ds
ZS5jb20vcC9wcm90b2NvbC1idWZmZXItcGxzcWwvKQotKiBbRWNsaXBzZSBlZGl0b3IgZm9yIHBy
b3RvYnVmIChmcm9tIEdvb2dsZSldKGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi1k
dC8pCi0qIFtDKysgQnVpbGRlciBjb21wYXRpYmxlIHByb3RvYnVmXShodHRwczovL2dpdGh1Yi5j
b20vc2FhZHdhcmUvcHJvdG9idWYtY3BwYnVpbGRlcikKLSogTWF2ZW4gUHJvdG9jb2wgQ29tcGls
ZXIgUGx1Z2luCi0gICAgKiBodHRwczovL2dpdGh1Yi5jb20vc2VyZ2VpLWl2YW5vdi9tYXZlbi1w
cm90b2MtcGx1Z2luLwotICAgICogaHR0cDovL2lnb3ItcGV0cnVrLmdpdGh1Yi5jb20vcHJvdG9i
dWYtbWF2ZW4tcGx1Z2luLwotICAgICogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL21hdmVuLXBy
b3RvYy1wbHVnaW4vCi0gICAgKiBodHRwczovL2dpdGh1Yi5jb20vb3M3Mi9wcm90b2MtamFyLW1h
dmVuLXBsdWdpbgotKiBbRG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgcGx1Z2luIChNYXJrZG93bi9I
VE1ML0RvY0Jvb2svLi4uKV0oaHR0cHM6Ly9naXRodWIuY29tL2VzdGFuL3Byb3RvYy1nZW4tZG9j
KQotKiBbRG9jQm9vayBnZW5lcmF0b3IgZm9yIC5wcm90byBmaWxlc10oaHR0cDovL2NvZGUuZ29v
Z2xlLmNvbS9wL3Byb3RvYy1nZW4tZG9jYm9vay8pCi0qIFtQcm90b2J1ZiBmb3IgbmdpbnggbW9k
dWxlXShodHRwczovL2dpdGh1Yi5jb20vZGJjb2RlL3Byb3RvYnVmLW5naW54LykKLSogW1JTcGVj
IG1hdGNoZXJzIGFuZCBDdWN1bWJlciBzdGVwIGRlZnMgZm9yIHRlc3RpbmcgUHJvdG9jb2wgQnVm
ZmVyc10oaHR0cHM6Ly9naXRodWIuY29tL2Nvbm5hbWFyYS9wcm90b2J1Zl9zcGVjKQotKiBbU2J0
IHBsdWdpbiBmb3IgUHJvdG9jb2wgQnVmZmVyc10oaHR0cHM6Ly9naXRodWIuY29tL0F0cnkvc2J0
LWNwcHApCi0qIFtHcmFkbGUgUHJvdG9idWYgUGx1Z2luXShodHRwczovL2dpdGh1Yi5jb20vYWFu
dG9uby9ncmFkbGUtcGx1Z2luLXByb3RvYnVmKQotKiBbTXVsdGktcGxhdGZvcm0gZXhlY3V0YWJs
ZSBKQVIgYW5kIEphdmEgQVBJIGZvciBwcm90b2NdKGh0dHBzOi8vZ2l0aHViLmNvbS9vczcyL3By
b3RvYy1qYXIpCi0qIFtQeXRob24gc2NyaXB0cyB0byBjb252ZXJ0IGJldHdlZW4gUHJvdG9jb2wg
QnVmZmVycyBhbmQgSlNPTl0oaHR0cHM6Ly9naXRodWIuY29tL05leHRUdWVzZGF5L3B5LXBiLWNv
bnZlcnRlcnMpCi0qIFtWaXN1YWwgU3R1ZGlvIExhbmd1YWdlIFNlcnZpY2Ugc3VwcG9ydCBmb3Ig
UHJvdG9jb2wgQnVmZmVyc10oaHR0cDovL3Zpc3VhbHN0dWRpb2dhbGxlcnkubXNkbi5taWNyb3Nv
ZnQuY29tLzRiYzBmMzhjLWIwNTgtNGUwNS1hZTM4LTE1NWUwNTNjMTljNSkKLSogW0MrKyBsaWJy
YXJ5IGZvciBzZXJpYWxpemF0aW9uL2RlLXNlcmlhbGl6YXRpb24gYmV0d2VlbiBQcm90b2NvbCBC
dWZmZXJzIGFuZCBKU09OLl0oaHR0cHM6Ly9naXRodWIuY29tL3lpbnFpd2VuL3BianNvbikKLSog
W1Byb3RvQnVmIHdpdGggSmF2YSBFRTcgRXhwcmVzc2lvbiBMYW5ndWFnZSAzLjA7IHB1cmUgSmF2
YSBQcm90b0J1ZiBQYXJzZXIgYW5kIEJ1aWxkZXIuXShodHRwczovL2dpdGh1Yi5jb20vcHJvdG9i
dWZlbC9wcm90b2J1Zi1lbCkKLSogW05vdGVwYWQrKyBTeW50YXggSGlnaGxpZ2h0aW5nIGZvciAu
cHJvdG8gZmlsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpMjAxMC9ub3RlcGFkcGx1cy1wcm90
b2J1ZikKLSogW0xpbnRlciBmb3IgLnByb3RvIGZpbGVzXShodHRwczovL2dpdGh1Yi5jb20vY2th
em5vY2hhL3Byb3RvYy1nZW4tbGludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZWRpdG9ycy9SRUFETUUudHh0IGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9l
ZGl0b3JzL1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOWZjNzll
OWNkNzNhMmVhZTQ5YTM0ZmRlMDI4MmM5OTczNGYyZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9lZGl0b3JzL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApA
QCAtMSw1ICswLDAgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHN5bnRheCBoaWdobGlnaHRp
bmcgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGVkaXRvcnMKLXRvIHByb3Blcmx5IGRpc3Bs
YXkgUHJvdG9jb2wgQnVmZmVyIGZpbGVzLgotCi1TZWUgZWFjaCBmaWxlJ3MgaGVhZGVyIGNvbW1l
bnQgZm9yIGRpcmVjdGlvbnMgb24gaG93IHRvIHVzZSBpdCB3aXRoIHRoZQotYXBwcm9wcmlhdGUg
ZWRpdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9lZGl0b3JzL3Byb3RvLnZpbSBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZWRpdG9ycy9wcm90by52aW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMWFlYjczMGExNzJhZDRlNzdmMmRlNzZi
YTBhOTQyZTE4MjdmOGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9lZGl0b3JzL3Byb3RvLnZpbQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0i
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIiBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSIgaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSIKLSIgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0iIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSIgbWV0OgotIgotIiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0iICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSIgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0iIGRpc3RyaWJ1dGlvbi4KLSIgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIgotIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0iIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSIgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSIgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0iIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSIgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0iIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSIgVGhpcyBpcyB0aGUgVmltIHN5bnRheCBmaWxlIGZvciBHb29nbGUgUHJvdG9jb2wg
QnVmZmVycy4KLSIKLSIgVXNhZ2U6Ci0iCi0iIDEuIGNwIHByb3RvLnZpbSB+Ly52aW0vc3ludGF4
LwotIiAyLiBBZGQgdGhlIGZvbGxvd2luZyB0byB+Ly52aW1yYzoKLSIKLSIgYXVncm91cCBmaWxl
dHlwZQotIiAgIGF1ISBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5wcm90byBzZXRmaWxldHlwZSBwcm90
bwotIiBhdWdyb3VwIGVuZAotIgotIiBPciBqdXN0IGNyZWF0ZSBhIG5ldyBmaWxlIGNhbGxlZCB+
Ly52aW0vZnRkZXRlY3QvcHJvdG8udmltIHdpdGggdGhlCi0iIHByZXZpb3VzIGxpbmVzIG9uIGl0
LgotCi1pZiB2ZXJzaW9uIDwgNjAwCi0gIHN5bnRheCBjbGVhcgotZWxzZWlmIGV4aXN0cygiYjpj
dXJyZW50X3N5bnRheCIpCi0gIGZpbmlzaAotZW5kaWYKLQotc3luIGNhc2UgbWF0Y2gKLQotc3lu
IGtleXdvcmQgcGJUb2RvICAgICAgIGNvbnRhaW5lZCBUT0RPIEZJWE1FIFhYWAotc3luIGNsdXN0
ZXIgcGJDb21tZW50R3JwIGNvbnRhaW5zPXBiVG9kbwotCi1zeW4ga2V5d29yZCBwYlN5bnRheCAg
ICAgc3ludGF4IGltcG9ydCBvcHRpb24KLXN5biBrZXl3b3JkIHBiU3RydWN0dXJlICBwYWNrYWdl
IG1lc3NhZ2UgZ3JvdXAgb25lb2YKLXN5biBrZXl3b3JkIHBiUmVwZWF0ICAgICBvcHRpb25hbCBy
ZXF1aXJlZCByZXBlYXRlZAotc3luIGtleXdvcmQgcGJEZWZhdWx0ICAgIGRlZmF1bHQKLXN5biBr
ZXl3b3JkIHBiRXh0ZW5kICAgICBleHRlbmQgZXh0ZW5zaW9ucyB0byBtYXggcmVzZXJ2ZWQKLXN5
biBrZXl3b3JkIHBiUlBDICAgICAgICBzZXJ2aWNlIHJwYyByZXR1cm5zCi0KLXN5biBrZXl3b3Jk
IHBiVHlwZSAgICAgIGludDMyIGludDY0IHVpbnQzMiB1aW50NjQgc2ludDMyIHNpbnQ2NAotc3lu
IGtleXdvcmQgcGJUeXBlICAgICAgZml4ZWQzMiBmaXhlZDY0IHNmaXhlZDMyIHNmaXhlZDY0Ci1z
eW4ga2V5d29yZCBwYlR5cGUgICAgICBmbG9hdCBkb3VibGUgYm9vbCBzdHJpbmcgYnl0ZXMKLXN5
biBrZXl3b3JkIHBiVHlwZWRlZiAgIGVudW0KLXN5biBrZXl3b3JkIHBiQm9vbCAgICAgIHRydWUg
ZmFsc2UKLQotc3luIG1hdGNoICAgcGJJbnQgICAgIC8tXD9cPFxkXCtcPi8KLXN5biBtYXRjaCAg
IHBiSW50ICAgICAvXDwwW3hYXVx4K1w+Lwotc3luIG1hdGNoICAgcGJGbG9hdCAgIC9cPC1cP1xk
KlwoXC5cZCpcKVw/Lwotc3luIHJlZ2lvbiAgcGJDb21tZW50IHN0YXJ0PSJcL1wqIiBlbmQ9Ilwq
XC8iIGNvbnRhaW5zPUBwYkNvbW1lbnRHcnAKLXN5biByZWdpb24gIHBiQ29tbWVudCBzdGFydD0i
Ly8iIHNraXA9IlxcJCIgZW5kPSIkIiBrZWVwZW5kIGNvbnRhaW5zPUBwYkNvbW1lbnRHcnAKLXN5
biByZWdpb24gIHBiU3RyaW5nICBzdGFydD0vIi8gc2tpcD0vXFwuLyBlbmQ9LyIvCi1zeW4gcmVn
aW9uICBwYlN0cmluZyAgc3RhcnQ9LycvIHNraXA9L1xcLi8gZW5kPS8nLwotCi1pZiB2ZXJzaW9u
ID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfcHJvdG9fc3luX2luaXRzIikKLSAgaWYgdmVyc2lvbiA8
IDUwOAotICAgIGxldCBkaWRfcHJvdG9fc3luX2luaXRzID0gMQotICAgIGNvbW1hbmQgLW5hcmdz
PSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+Ci0gIGVsc2UKLSAgICBjb21tYW5kIC1uYXJncz0rIEhp
TGluayBoaSBkZWYgbGluayA8YXJncz4KLSAgZW5kaWYKLQotICBIaUxpbmsgcGJUb2RvICAgICAg
ICAgVG9kbwotCi0gIEhpTGluayBwYlN5bnRheCAgICAgICBJbmNsdWRlCi0gIEhpTGluayBwYlN0
cnVjdHVyZSAgICBTdHJ1Y3R1cmUKLSAgSGlMaW5rIHBiUmVwZWF0ICAgICAgIFJlcGVhdAotICBI
aUxpbmsgcGJEZWZhdWx0ICAgICAgS2V5d29yZAotICBIaUxpbmsgcGJFeHRlbmQgICAgICAgS2V5
d29yZAotICBIaUxpbmsgcGJSUEMgICAgICAgICAgS2V5d29yZAotICBIaUxpbmsgcGJUeXBlICAg
ICAgICAgVHlwZQotICBIaUxpbmsgcGJUeXBlZGVmICAgICAgVHlwZWRlZgotICBIaUxpbmsgcGJC
b29sICAgICAgICAgQm9vbGVhbgotCi0gIEhpTGluayBwYkludCAgICAgICAgICBOdW1iZXIKLSAg
SGlMaW5rIHBiRmxvYXQgICAgICAgIEZsb2F0Ci0gIEhpTGluayBwYkNvbW1lbnQgICAgICBDb21t
ZW50Ci0gIEhpTGluayBwYlN0cmluZyAgICAgICBTdHJpbmcKLQotICBkZWxjb21tYW5kIEhpTGlu
awotZW5kaWYKLQotbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHJvdG8iCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2Vk
aXRvcnMvcHJvdG9idWYtbW9kZS5lbCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZWRpdG9ycy9wcm90b2J1Zi1tb2RlLmVsCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjE1YTBhZmJjNWNiMzhlYWE3NjYwOGE1YTQwMmMzOGU4
ODI1ZGQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZWRp
dG9ycy9wcm90b2J1Zi1tb2RlLmVsCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLTs7
OyBwcm90b2J1Zi1tb2RlLmVsIC0tLSBtYWpvciBtb2RlIGZvciBlZGl0aW5nIHByb3RvY29sIGJ1
ZmZlcnMuCi0KLTs7IEF1dGhvcjogQWxleGFuZHJlIFZhc3NhbG90dGkgPGFsZXhhbmRyZUBwZWFk
cm9wLmNvbT4KLTs7IENyZWF0ZWQ6IDIzLUFwci0yMDA5Ci07OyBWZXJzaW9uOiAwLjMKLTs7IEtl
eXdvcmRzOiBnb29nbGUgcHJvdG9idWYgbGFuZ3VhZ2VzCi0KLTs7IFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOzsgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotOzsgbWV0OgotOzsKLTs7ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07OyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07OyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci07OyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi07OyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi07OyBkaXN0cmlidXRpb24uCi07OyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi07OyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotOzsgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLTs7Ci07OyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi07OyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotOzsgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi07OyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotOzsgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi07OyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi07OyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLTs7IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotOzsgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotOzsgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi07OyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi07OzsgQ29tbWVudGFyeToKLQotOzsgSW5zdGFsbGF0aW9u
OgotOzsgICAtIFB1dCBgcHJvdG9idWYtbW9kZS5lbCcgaW4geW91ciBFbWFjcyBsb2FkLXBhdGgu
Ci07OyAgIC0gQWRkIHRoaXMgbGluZSB0byB5b3VyIC5lbWFjcyBmaWxlOgotOzsgICAgICAgKHJl
cXVpcmUgJ3Byb3RvYnVmLW1vZGUpCi07OwotOzsgWW91IGNhbiBjdXN0b21pemUgdGhpcyBtb2Rl
IGp1c3QgbGlrZSBhbnkgbW9kZSBkZXJpdmVkIGZyb20gQ0MgTW9kZS4gIElmCi07OyB5b3Ugd2Fu
dCB0byBhZGQgY3VzdG9taXphdGlvbnMgc3BlY2lmaWMgdG8gcHJvdG9idWYtbW9kZSwgeW91IGNh
biB1c2UgdGhlCi07OyBgcHJvdG9idWYtbW9kZS1ob29rJy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xs
b3dpbmcgd291bGQgbWFrZSBwcm90b2NvbC1tb2RlCi07OyB1c2UgMi1zcGFjZSBpbmRlbnRhdGlv
bjoKLTs7Ci07OyAgIChkZWZjb25zdCBteS1wcm90b2J1Zi1zdHlsZQotOzsgICAgICcoKGMtYmFz
aWMtb2Zmc2V0IC4gMikKLTs7ICAgICAgIChpbmRlbnQtdGFicy1tb2RlIC4gbmlsKSkpCi07Owot
OzsgICAoYWRkLWhvb2sgJ3Byb3RvYnVmLW1vZGUtaG9vawotOzsgICAgIChsYW1iZGEgKCkgKGMt
YWRkLXN0eWxlICJteS1zdHlsZSIgbXktcHJvdG9idWYtc3R5bGUgdCkpKQotOzsKLTs7IFJlZmVy
IHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mIENDIE1vZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJv
dXQKLTs7IGN1c3RvbWl6YXRpb24gZGV0YWlscyBhbmQgaG93IHRvIHVzZSB0aGlzIG1vZGUuCi07
OwotOzsgVE9ETzoKLTs7ICAgLSBNYWtlIGhpZ2hsaWdodGluZyBmb3IgZW51bSB2YWx1ZXMgd29y
ayBwcm9wZXJseS4KLTs7ICAgLSBGaXggdGhlIHBhcnNlciB0byByZWNvZ25pemUgZXh0ZW5zaW9u
cyBhcyBpZGVudGlmaWVycyBhbmQgbm90Ci07OyAgICAgYXMgY2FzdHMuCi07OyAgIC0gSW1wcm92
ZSB0aGUgcGFyc2luZyBvZiBvcHRpb24gYXNzaWdubWVudCBsaXN0cy4gRm9yIGV4YW1wbGU6Ci07
OyAgICAgICBvcHRpb25hbCBpbnQzMiBmb28gPSAxIFsobXlfZmllbGRfb3B0aW9uKSA9IDQuNV07
Ci07OyAgIC0gQWRkIHN1cHBvcnQgZm9yIGZ1bGx5LXF1YWxpZmllZCBpZGVudGlmaWVycyAoZS5n
Liwgd2l0aCBhIGxlYWRpbmcgIi4iKS4KLQotOzs7IENvZGU6Ci0KLShyZXF1aXJlICdjYy1tb2Rl
KQotCi0oZXZhbC13aGVuLWNvbXBpbGUKLSAgKHJlcXVpcmUgJ2NjLWxhbmdzKQotICAocmVxdWly
ZSAnY2MtZm9udHMpKQotCi07OyBUaGlzIG1vZGUgZG9lcyBub3QgaW5oZXJpdCBwcm9wZXJ0aWVz
IGZyb20gb3RoZXIgbW9kZXMuIFNvLCB3ZSBkbyBub3QgdXNlIAotOzsgdGhlIHVzdWFsIGBjLWFk
ZC1sYW5ndWFnZScgZnVuY3Rpb24uCi0oZXZhbC1hbmQtY29tcGlsZQotICAocHV0ICdwcm90b2J1
Zi1tb2RlICdjLW1vZGUtcHJlZml4ICJwcm90b2J1Zi0iKSkKLQotOzsgVGhlIGZvbGxvd2luZyBj
b2RlIHVzZXMgb2YgdGhlIGBjLWxhbmctZGVmY29uc3QnIG1hY3JvIGRlZmluZSBzeW50YWN0aWMK
LTs7IGZlYXR1cmVzIG9mIHByb3RvY29sIGJ1ZmZlciBsYW5ndWFnZS4gIFJlZmVyIHRvIHRoZSBk
b2N1bWVudGF0aW9uIGluIHRoZQotOzsgY2MtbGFuZ3MuZWwgZmlsZSBmb3IgaW5mb3JtYXRpb24g
YWJvdXQgdGhlIG1lYW5pbmcgb2YgdGhlIC1rd2RzIHZhcmlhYmxlcy4KLQotKGMtbGFuZy1kZWZj
b25zdCBjLXByaW1pdGl2ZS10eXBlLWt3ZHMKLSAgcHJvdG9idWYgJygiZG91YmxlIiAiZmxvYXQi
ICJpbnQzMiIgImludDY0IiAidWludDMyIiAidWludDY0IiAic2ludDMyIgotICAgICAgICAgICAg
ICJzaW50NjQiICJmaXhlZDMyIiAiZml4ZWQ2NCIgInNmaXhlZDMyIiAic2ZpeGVkNjQiICJib29s
IgotICAgICAgICAgICAgICJzdHJpbmciICJieXRlcyIgImdyb3VwIikpCi0KLShjLWxhbmctZGVm
Y29uc3QgYy1tb2RpZmllci1rd2RzCi0gIHByb3RvYnVmICcoInJlcXVpcmVkIiAib3B0aW9uYWwi
ICJyZXBlYXRlZCIpKQotCi0oYy1sYW5nLWRlZmNvbnN0IGMtY2xhc3MtZGVjbC1rd2RzCi0gIHBy
b3RvYnVmICcoIm1lc3NhZ2UiICJlbnVtIiAic2VydmljZSIpKQotCi0oYy1sYW5nLWRlZmNvbnN0
IGMtY29uc3RhbnQta3dkcwotICBwcm90b2J1ZiAnKCJ0cnVlIiAiZmFsc2UiKSkKLQotKGMtbGFu
Zy1kZWZjb25zdCBjLW90aGVyLWRlY2wta3dkcwotICBwcm90b2J1ZiAnKCJwYWNrYWdlIiAiaW1w
b3J0IikpCi0KLShjLWxhbmctZGVmY29uc3QgYy1vdGhlci1rd2RzCi0gIHByb3RvYnVmICcoImRl
ZmF1bHQiICJtYXgiKSkKLQotKGMtbGFuZy1kZWZjb25zdCBjLWlkZW50aWZpZXItb3BzCi0gIDs7
IEhhbmRsZSBleHRlbmRlZCBpZGVudGlmaWVycyBsaWtlIGdvb2dsZS5wcm90b2J1Zi5NZXNzYWdl
T3B0aW9ucwotICBwcm90b2J1ZiAnKChsZWZ0LWFzc29jICIuIikpKQotCi07OyBUaGUgZm9sbG93
aW5nIGtleXdvcmRzIGRvIG5vdCBmaXQgd2VsbCBpbiBrZXl3b3JkIGNsYXNzZXMgZGVmaW5lZCBi
eQotOzsgY2MtbW9kZS4gIFNvLCB3ZSBhcHByb3hpbWF0ZSBhcyBiZXN0IHdlIGNhbi4KLQotKGMt
bGFuZy1kZWZjb25zdCBjLXR5cGUtbGlzdC1rd2RzCi0gIHByb3RvYnVmICcoImV4dGVuc2lvbnMi
ICJ0byIgInJlc2VydmVkIikpCi0KLShjLWxhbmctZGVmY29uc3QgYy10eXBlbGVzcy1kZWNsLWt3
ZHMKLSAgcHJvdG9idWYgJygiZXh0ZW5kIiAicnBjIiAib3B0aW9uIiAicmV0dXJucyIpKQotCi0K
LTs7IEhlcmUgd2UgcmVtb3ZlIGRlZmF1bHQgc3ludGF4IGZvciBsb29wcywgaWYtc3RhdGVtZW50
cyBhbmQgb3RoZXIgQwotOzsgc3ludGFjdGljIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBsYW5ndWFnZS4KLQotKGMtbGFuZy1kZWZjb25zdCBj
LWJyYWNlLWxpc3QtZGVjbC1rd2RzCi0gIDs7IFJlbW92ZSBzeW50YXggZm9yIEMtc3R5bGUgZW51
bWVyYXRpb25zLgotICBwcm90b2J1ZiBuaWwpCi0KLShjLWxhbmctZGVmY29uc3QgYy1ibG9jay1z
dG10LTEta3dkcwotICA7OyBSZW1vdmUgc3ludGF4IGZvciAiZG8iIGFuZCAiZWxzZSIga2V5d29y
ZHMuCi0gIHByb3RvYnVmIG5pbCkKLQotKGMtbGFuZy1kZWZjb25zdCBjLWJsb2NrLXN0bXQtMi1r
d2RzCi0gIDs7IFJlbW92ZSBzeW50YXggZm9yICJmb3IiLCAiaWYiLCAic3dpdGNoIiBhbmQgIndo
aWxlIiBrZXl3b3Jkcy4KLSAgcHJvdG9idWYgbmlsKQotCi0oYy1sYW5nLWRlZmNvbnN0IGMtc2lt
cGxlLXN0bXQta3dkcwotICA7OyBSZW1vdmUgc3ludGF4IGZvciAiYnJlYWsiLCAiY29udGludWUi
LCAiZ290byIgYW5kICJyZXR1cm4iIGtleXdvcmRzLgotICBwcm90b2J1ZiBuaWwpCi0KLShjLWxh
bmctZGVmY29uc3QgYy1wYXJlbi1zdG10LWt3ZHMKLSAgOzsgUmVtb3ZlIHNwZWNpYWwgY2FzZSBm
b3IgdGhlICIoOzspIiBpbiBmb3ItbG9vcHMuCi0gIHByb3RvYnVmIG5pbCkKLQotKGMtbGFuZy1k
ZWZjb25zdCBjLWxhYmVsLWt3ZHMKLSAgOzsgUmVtb3ZlIGNhc2UgbGFiZWwgc3ludGF4IGZvciB0
aGUgImNhc2UiIGFuZCAiZGVmYXVsdCIga2V5d29yZHMuCi0gIHByb3RvYnVmIG5pbCkKLQotKGMt
bGFuZy1kZWZjb25zdCBjLWJlZm9yZS1sYWJlbC1rd2RzCi0gIDs7IFJlbW92ZSBzcGVjaWFsIGNh
c2UgZm9yIHRoZSBsYWJlbCBpbiBhIGdvdG8gc3RhdGVtZW50LgotICBwcm90b2J1ZiBuaWwpCi0K
LShjLWxhbmctZGVmY29uc3QgYy1jcHAtbWF0Y2hlcnMKLSAgOzsgRGlzYWJsZSBhbGwgdGhlIEMg
cHJlcHJvY2Vzc29yIHN5bnRheC4KLSAgcHJvdG9idWYgbmlsKQotCi0oYy1sYW5nLWRlZmNvbnN0
IGMtZGVjbC1wcmVmaXgtcmUKLSAgOzsgU2FtZSBhcyBmb3IgQywgZXhjZXB0IGl0IGRvZXMgbm90
IG1hdGNoICIoIi4gVGhpcyBpcyBuZWVkZWQgZm9yIGRpc2FibGluZwotICA7OyB0aGUgc3ludGF4
IGZvciBjYXN0cy4KLSAgcHJvdG9idWYgIlxcKFtce1x9OyxdK1xcKSIpCi0KLQotOzsgQWRkIHN1
cHBvcnQgZm9yIHZhcmlhYmxlIGxldmVscyBvZiBzeW50YXggaGlnaGxpZ2h0aW5nLgotCi0oZGVm
Y29uc3QgcHJvdG9idWYtZm9udC1sb2NrLWtleXdvcmRzLTEgKGMtbGFuZy1jb25zdCBjLW1hdGNo
ZXJzLTEgcHJvdG9idWYpCi0gICJNaW5pbWFsIGhpZ2hsaWdodGluZyBmb3IgcHJvdG9idWYtbW9k
ZS4iKQotCi0oZGVmY29uc3QgcHJvdG9idWYtZm9udC1sb2NrLWtleXdvcmRzLTIgKGMtbGFuZy1j
b25zdCBjLW1hdGNoZXJzLTIgcHJvdG9idWYpCi0gICJGYXN0IG5vcm1hbCBoaWdobGlnaHRpbmcg
Zm9yIHByb3RvYnVmLW1vZGUuIikKLQotKGRlZmNvbnN0IHByb3RvYnVmLWZvbnQtbG9jay1rZXl3
b3Jkcy0zIChjLWxhbmctY29uc3QgYy1tYXRjaGVycy0zIHByb3RvYnVmKQotICAiQWNjdXJhdGUg
bm9ybWFsIGhpZ2hsaWdodGluZyBmb3IgcHJvdG9idWYtbW9kZS4iKQotCi0oZGVmdmFyIHByb3Rv
YnVmLWZvbnQtbG9jay1rZXl3b3JkcyBwcm90b2J1Zi1mb250LWxvY2sta2V5d29yZHMtMwotICAi
RGVmYXVsdCBleHByZXNzaW9ucyB0byBoaWdobGlnaHQgaW4gcHJvdG9idWYtbW9kZS4iKQotCi07
OyBPdXIgc3ludGF4IHRhYmxlIGlzIGF1dG8tZ2VuZXJhdGVkIGZyb20gdGhlIGtleXdvcmQgY2xh
c3NlcyB3ZSBkZWZpbmVkCi07OyBwcmV2aW91c2x5IHdpdGggdGhlIGBjLWxhbmctY29uc3QnIG1h
Y3JvLgotKGRlZnZhciBwcm90b2J1Zi1tb2RlLXN5bnRheC10YWJsZSBuaWwKLSAgIlN5bnRheCB0
YWJsZSB1c2VkIGluIHByb3RvYnVmLW1vZGUgYnVmZmVycy4iKQotKG9yIHByb3RvYnVmLW1vZGUt
c3ludGF4LXRhYmxlCi0gICAgKHNldHEgcHJvdG9idWYtbW9kZS1zeW50YXgtdGFibGUKLSAgICAg
ICAgICAoZnVuY2FsbCAoYy1sYW5nLWNvbnN0IGMtbWFrZS1tb2RlLXN5bnRheC10YWJsZSBwcm90
b2J1ZikpKSkKLQotKGRlZnZhciBwcm90b2J1Zi1tb2RlLWFiYnJldi10YWJsZSBuaWwKLSAgIkFi
YnJldmlhdGlvbiB0YWJsZSB1c2VkIGluIHByb3RvYnVmLW1vZGUgYnVmZmVycy4iKQotCi0oZGVm
dmFyIHByb3RvYnVmLW1vZGUtbWFwIG5pbAotICAiS2V5bWFwIHVzZWQgaW4gcHJvdG9idWYtbW9k
ZSBidWZmZXJzLiIpCi0ob3IgcHJvdG9idWYtbW9kZS1tYXAKLSAgICAoc2V0cSBwcm90b2J1Zi1t
b2RlLW1hcCAoYy1tYWtlLWluaGVyaXRlZC1rZXltYXApKSkKLQotKGVhc3ktbWVudS1kZWZpbmUg
cHJvdG9idWYtbWVudSBwcm90b2J1Zi1tb2RlLW1hcAotICAiUHJvdG9jb2wgQnVmZmVycyBNb2Rl
IENvbW1hbmRzIgotICAoY29ucyAiUHJvdG9jb2wgQnVmZmVycyIgKGMtbGFuZy1jb25zdCBjLW1v
ZGUtbWVudSBwcm90b2J1ZikpKQotCi07OzsjIyNhdXRvbG9hZCAoYWRkLXRvLWxpc3QgJ2F1dG8t
bW9kZS1hbGlzdCAnKCJcXC5wcm90b1xcJyIgLiBwcm90b2J1Zi1tb2RlKSkKLQotOzs7IyMjYXV0
b2xvYWQKLShkZWZ1biBwcm90b2J1Zi1tb2RlICgpCi0gICJNYWpvciBtb2RlIGZvciBlZGl0aW5n
IFByb3RvY29sIEJ1ZmZlcnMgZGVzY3JpcHRpb24gbGFuZ3VhZ2UuCi0KLVRoZSBob29rIGBjLW1v
ZGUtY29tbW9uLWhvb2snIGlzIHJ1biB3aXRoIG5vIGFyZ3VtZW50IGF0IG1vZGUKLWluaXRpYWxp
emF0aW9uLCB0aGVuIGBwcm90b2J1Zi1tb2RlLWhvb2snLgotCi1LZXkgYmluZGluZ3M6Ci1cXHtw
cm90b2J1Zi1tb2RlLW1hcH0iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKGtpbGwtYWxsLWxvY2FsLXZh
cmlhYmxlcykKLSAgKHNldC1zeW50YXgtdGFibGUgcHJvdG9idWYtbW9kZS1zeW50YXgtdGFibGUp
Ci0gIChzZXRxIG1ham9yLW1vZGUgJ3Byb3RvYnVmLW1vZGUKLSAgICAgICAgbW9kZS1uYW1lICJQ
cm90b2NvbC1CdWZmZXJzIgotICAgICAgICBsb2NhbC1hYmJyZXYtdGFibGUgcHJvdG9idWYtbW9k
ZS1hYmJyZXYtdGFibGUKLSAgICAgICAgYWJicmV2LW1vZGUgdCkKLSAgKHVzZS1sb2NhbC1tYXAg
cHJvdG9idWYtbW9kZS1tYXApCi0gIChjLWluaXRpYWxpemUtY2MtbW9kZSB0KQotICAoaWYgKGZi
b3VuZHAgJ2MtbWFrZS1lbWFjcy12YXJpYWJsZXMtbG9jYWwpCi0gICAgICAoYy1tYWtlLWVtYWNz
LXZhcmlhYmxlcy1sb2NhbCkpCi0gIChjLWluaXQtbGFuZ3VhZ2UtdmFycyBwcm90b2J1Zi1tb2Rl
KQotICAoYy1jb21tb24taW5pdCAncHJvdG9idWYtbW9kZSkKLSAgKGVhc3ktbWVudS1hZGQgcHJv
dG9idWYtbWVudSkKLSAgKGMtcnVuLW1vZGUtaG9va3MgJ2MtbW9kZS1jb21tb24taG9vayAncHJv
dG9idWYtbW9kZS1ob29rKQotICAoYy11cGRhdGUtbW9kZWxpbmUpKQotCi0ocHJvdmlkZSAncHJv
dG9idWYtbW9kZSkKLQotOzs7IHByb3RvYnVmLW1vZGUuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2V4YW1wbGVzL0FkZFBlcnNvbi5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9leGFtcGxlcy9BZGRQZXJzb24uamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI2MmFiN2U2MDY0MmE3MzcwZTQyOGEyMTA5NDUxM2Yx
MzNjNGRjMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2V4
YW1wbGVzL0FkZFBlcnNvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLy8g
U2VlIFJFQURNRS50eHQgZm9yIGluZm9ybWF0aW9uIGFuZCBidWlsZCBpbnN0cnVjdGlvbnMuCi0K
LWltcG9ydCBjb20uZXhhbXBsZS50dXRvcmlhbC5BZGRyZXNzQm9va1Byb3Rvcy5BZGRyZXNzQm9v
azsKLWltcG9ydCBjb20uZXhhbXBsZS50dXRvcmlhbC5BZGRyZXNzQm9va1Byb3Rvcy5QZXJzb247
Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1
dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBq
YXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRl
cjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJl
YW07Ci0KLWNsYXNzIEFkZFBlcnNvbiB7Ci0gIC8vIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gYSBQ
ZXJzb24gbWVzc2FnZSBiYXNlZCBvbiB1c2VyIGlucHV0LgotICBzdGF0aWMgUGVyc29uIFByb21w
dEZvckFkZHJlc3MoQnVmZmVyZWRSZWFkZXIgc3RkaW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQcmludFN0cmVhbSBzdGRvdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAg
UGVyc29uLkJ1aWxkZXIgcGVyc29uID0gUGVyc29uLm5ld0J1aWxkZXIoKTsKLQotICAgIHN0ZG91
dC5wcmludCgiRW50ZXIgcGVyc29uIElEOiAiKTsKLSAgICBwZXJzb24uc2V0SWQoSW50ZWdlci52
YWx1ZU9mKHN0ZGluLnJlYWRMaW5lKCkpKTsKLQotICAgIHN0ZG91dC5wcmludCgiRW50ZXIgbmFt
ZTogIik7Ci0gICAgcGVyc29uLnNldE5hbWUoc3RkaW4ucmVhZExpbmUoKSk7Ci0KLSAgICBzdGRv
dXQucHJpbnQoIkVudGVyIGVtYWlsIGFkZHJlc3MgKGJsYW5rIGZvciBub25lKTogIik7Ci0gICAg
U3RyaW5nIGVtYWlsID0gc3RkaW4ucmVhZExpbmUoKTsKLSAgICBpZiAoZW1haWwubGVuZ3RoKCkg
PiAwKSB7Ci0gICAgICBwZXJzb24uc2V0RW1haWwoZW1haWwpOwotICAgIH0KLQotICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICBzdGRvdXQucHJpbnQoIkVudGVyIGEgcGhvbmUgbnVtYmVyIChvciBs
ZWF2ZSBibGFuayB0byBmaW5pc2gpOiAiKTsKLSAgICAgIFN0cmluZyBudW1iZXIgPSBzdGRpbi5y
ZWFkTGluZSgpOwotICAgICAgaWYgKG51bWJlci5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotCi0gICAgICBQZXJzb24uUGhvbmVOdW1iZXIuQnVpbGRlciBwaG9uZU51
bWJlciA9Ci0gICAgICAgIFBlcnNvbi5QaG9uZU51bWJlci5uZXdCdWlsZGVyKCkuc2V0TnVtYmVy
KG51bWJlcik7Ci0KLSAgICAgIHN0ZG91dC5wcmludCgiSXMgdGhpcyBhIG1vYmlsZSwgaG9tZSwg
b3Igd29yayBwaG9uZT8gIik7Ci0gICAgICBTdHJpbmcgdHlwZSA9IHN0ZGluLnJlYWRMaW5lKCk7
Ci0gICAgICBpZiAodHlwZS5lcXVhbHMoIm1vYmlsZSIpKSB7Ci0gICAgICAgIHBob25lTnVtYmVy
LnNldFR5cGUoUGVyc29uLlBob25lVHlwZS5NT0JJTEUpOwotICAgICAgfSBlbHNlIGlmICh0eXBl
LmVxdWFscygiaG9tZSIpKSB7Ci0gICAgICAgIHBob25lTnVtYmVyLnNldFR5cGUoUGVyc29uLlBo
b25lVHlwZS5IT01FKTsKLSAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoIndvcmsiKSkgewot
ICAgICAgICBwaG9uZU51bWJlci5zZXRUeXBlKFBlcnNvbi5QaG9uZVR5cGUuV09SSyk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICBzdGRvdXQucHJpbnRsbigiVW5rbm93biBwaG9uZSB0eXBlLiAg
VXNpbmcgZGVmYXVsdC4iKTsKLSAgICAgIH0KLQotICAgICAgcGVyc29uLmFkZFBob25lcyhwaG9u
ZU51bWJlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBlcnNvbi5idWlsZCgpOwotICB9Ci0KLSAg
Ly8gTWFpbiBmdW5jdGlvbjogIFJlYWRzIHRoZSBlbnRpcmUgYWRkcmVzcyBib29rIGZyb20gYSBm
aWxlLAotICAvLyAgIGFkZHMgb25lIHBlcnNvbiBiYXNlZCBvbiB1c2VyIGlucHV0LCB0aGVuIHdy
aXRlcyBpdCBiYWNrIG91dCB0byB0aGUgc2FtZQotICAvLyAgIGZpbGUuCi0gIHB1YmxpYyBzdGF0
aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmIChh
cmdzLmxlbmd0aCAhPSAxKSB7Ci0gICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiAgQWRk
UGVyc29uIEFERFJFU1NfQk9PS19GSUxFIik7Ci0gICAgICBTeXN0ZW0uZXhpdCgtMSk7Ci0gICAg
fQotCi0gICAgQWRkcmVzc0Jvb2suQnVpbGRlciBhZGRyZXNzQm9vayA9IEFkZHJlc3NCb29rLm5l
d0J1aWxkZXIoKTsKLQotICAgIC8vIFJlYWQgdGhlIGV4aXN0aW5nIGFkZHJlc3MgYm9vay4KLSAg
ICB0cnkgewotICAgICAgRmlsZUlucHV0U3RyZWFtIGlucHV0ID0gbmV3IEZpbGVJbnB1dFN0cmVh
bShhcmdzWzBdKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGFkZHJlc3NCb29rLm1lcmdlRnJvbShp
bnB1dCk7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICB0cnkgeyBpbnB1dC5jbG9zZSgpOyB9
IGNhdGNoIChUaHJvd2FibGUgaWdub3JlKSB7fQotICAgICAgfQotICAgIH0gY2F0Y2ggKEZpbGVO
b3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXJnc1swXSAr
ICI6IEZpbGUgbm90IGZvdW5kLiAgQ3JlYXRpbmcgYSBuZXcgZmlsZS4iKTsKLSAgICB9Ci0KLSAg
ICAvLyBBZGQgYW4gYWRkcmVzcy4KLSAgICBhZGRyZXNzQm9vay5hZGRQZW9wbGUoCi0gICAgICBQ
cm9tcHRGb3JBZGRyZXNzKG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIo
U3lzdGVtLmluKSksCi0gICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQpKTsKLQotICAg
IC8vIFdyaXRlIHRoZSBuZXcgYWRkcmVzcyBib29rIGJhY2sgdG8gZGlzay4KLSAgICBGaWxlT3V0
cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGFyZ3NbMF0pOwotICAgIHRy
eSB7Ci0gICAgICBhZGRyZXNzQm9vay5idWlsZCgpLndyaXRlVG8ob3V0cHV0KTsKLSAgICB9IGZp
bmFsbHkgewotICAgICAgb3V0cHV0LmNsb3NlKCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2V4YW1wbGVzL0xpc3RQZW9wbGUuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZXhhbXBsZXMvTGlzdFBlb3BsZS5qYXZhCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODkyNDMwNTA4ODhlOTViNDdhNzAxMWU3MzExY2Fi
ZWJhMDNjZTQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
ZXhhbXBsZXMvTGlzdFBlb3BsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAot
Ly8gU2VlIFJFQURNRS50eHQgZm9yIGluZm9ybWF0aW9uIGFuZCBidWlsZCBpbnN0cnVjdGlvbnMu
Ci0KLWltcG9ydCBjb20uZXhhbXBsZS50dXRvcmlhbC5BZGRyZXNzQm9va1Byb3Rvcy5BZGRyZXNz
Qm9vazsKLWltcG9ydCBjb20uZXhhbXBsZS50dXRvcmlhbC5BZGRyZXNzQm9va1Byb3Rvcy5QZXJz
b247Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4
Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotCi1jbGFzcyBMaXN0UGVvcGxl
IHsKLSAgLy8gSXRlcmF0ZXMgdGhvdWdoIGFsbCBwZW9wbGUgaW4gdGhlIEFkZHJlc3NCb29rIGFu
ZCBwcmludHMgaW5mbyBhYm91dCB0aGVtLgotICBzdGF0aWMgdm9pZCBQcmludChBZGRyZXNzQm9v
ayBhZGRyZXNzQm9vaykgewotICAgIGZvciAoUGVyc29uIHBlcnNvbjogYWRkcmVzc0Jvb2suZ2V0
UGVvcGxlTGlzdCgpKSB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBlcnNvbiBJRDogIiAr
IHBlcnNvbi5nZXRJZCgpKTsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBOYW1lOiAiICsg
cGVyc29uLmdldE5hbWUoKSk7Ci0gICAgICBpZiAoIXBlcnNvbi5nZXRFbWFpbCgpLmlzRW1wdHko
KSkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgRS1tYWlsIGFkZHJlc3M6ICIgKyBw
ZXJzb24uZ2V0RW1haWwoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoUGVyc29uLlBob25lTnVt
YmVyIHBob25lTnVtYmVyIDogcGVyc29uLmdldFBob25lc0xpc3QoKSkgewotICAgICAgICBzd2l0
Y2ggKHBob25lTnVtYmVyLmdldFR5cGUoKSkgewotICAgICAgICAgIGNhc2UgTU9CSUxFOgotICAg
ICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICBNb2JpbGUgcGhvbmUgIzogIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEhPTUU6Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0
LnByaW50KCIgIEhvbWUgcGhvbmUgIzogIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIFdPUks6Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIFdvcmsgcGhvbmUg
IzogIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBTeXN0ZW0ub3V0
LnByaW50bG4ocGhvbmVOdW1iZXIuZ2V0TnVtYmVyKCkpOwotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIC8vIE1haW4gZnVuY3Rpb246ICBSZWFkcyB0aGUgZW50aXJlIGFkZHJlc3MgYm9vayBmcm9t
IGEgZmlsZSBhbmQgcHJpbnRzIGFsbAotICAvLyAgIHRoZSBpbmZvcm1hdGlvbiBpbnNpZGUuCi0g
IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIGlmIChhcmdzLmxlbmd0aCAhPSAxKSB7Ci0gICAgICBTeXN0ZW0uZXJyLnByaW50bG4o
IlVzYWdlOiAgTGlzdFBlb3BsZSBBRERSRVNTX0JPT0tfRklMRSIpOwotICAgICAgU3lzdGVtLmV4
aXQoLTEpOwotICAgIH0KLQotICAgIC8vIFJlYWQgdGhlIGV4aXN0aW5nIGFkZHJlc3MgYm9vay4K
LSAgICBBZGRyZXNzQm9vayBhZGRyZXNzQm9vayA9Ci0gICAgICBBZGRyZXNzQm9vay5wYXJzZUZy
b20obmV3IEZpbGVJbnB1dFN0cmVhbShhcmdzWzBdKSk7Ci0KLSAgICBQcmludChhZGRyZXNzQm9v
ayk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZXhhbXBsZXMvUkVBRE1FLnR4dCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZXhhbXBsZXMvUkVB
RE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMzZjg0MTQxN2E0NDJhNjVl
NTUyZWZjMjg5ZmU2ZGI4MjcxZGYwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2V4YW1wbGVzL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1NCAr
MCwwIEBACi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBleGFtcGxlIGNvZGUgdGhhdCB1c2VzIFBy
b3RvY29sIEJ1ZmZlcnMgdG8gbWFuYWdlIGFuCi1hZGRyZXNzIGJvb2suICBUd28gcHJvZ3JhbXMg
YXJlIHByb3ZpZGVkLCBlYWNoIHdpdGggdGhyZWUgZGlmZmVyZW50Ci1pbXBsZW1lbnRhdGlvbnMs
IG9uZSB3cml0dGVuIGluIGVhY2ggb2YgQysrLCBKYXZhLCBhbmQgUHl0aG9uLiAgVGhlIGFkZF9w
ZXJzb24KLWV4YW1wbGUgYWRkcyBhIG5ldyBwZXJzb24gdG8gYW4gYWRkcmVzcyBib29rLCBwcm9t
cHRpbmcgdGhlIHVzZXIgdG8gaW5wdXQKLXRoZSBwZXJzb24ncyBpbmZvcm1hdGlvbi4gIFRoZSBs
aXN0X3Blb3BsZSBleGFtcGxlIGxpc3RzIHBlb3BsZSBhbHJlYWR5IGluIHRoZQotYWRkcmVzcyBi
b29rLiAgVGhlIGV4YW1wbGVzIHVzZSB0aGUgZXhhY3Qgc2FtZSBmb3JtYXQgaW4gYWxsIHRocmVl
IGxhbmd1YWdlcywKLXNvIHlvdSBjYW4sIGZvciBleGFtcGxlLCB1c2UgYWRkX3BlcnNvbl9qYXZh
IHRvIGNyZWF0ZSBhbiBhZGRyZXNzIGJvb2sgYW5kIHRoZW4KLXVzZSBsaXN0X3Blb3BsZV9weXRo
b24gdG8gcmVhZCBpdC4KLQotWW91IG11c3QgaW5zdGFsbCB0aGUgcHJvdG9idWYgcGFja2FnZSBi
ZWZvcmUgeW91IGNhbiBidWlsZCB0aGVzZS4KLQotVG8gYnVpbGQgYWxsIHRoZSBleGFtcGxlcyAo
b24gYSB1bml4LWxpa2Ugc3lzdGVtKSwgc2ltcGx5IHJ1biAibWFrZSIuICBUaGlzCi1jcmVhdGVz
IHRoZSBmb2xsb3dpbmcgZXhlY3V0YWJsZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk6
Ci0gIGFkZF9wZXJzb25fY3BwICAgICBsaXN0X3Blb3BsZV9jcHAKLSAgYWRkX3BlcnNvbl9qYXZh
ICAgIGxpc3RfcGVvcGxlX2phdmEKLSAgYWRkX3BlcnNvbl9weXRob24gIGxpc3RfcGVvcGxlX3B5
dGhvbgotCi1JZiB5b3Ugb25seSB3YW50IHRvIGNvbXBpbGUgZXhhbXBsZXMgaW4gb25lIGxhbmd1
YWdlLCB1c2UgIm1ha2UgY3BwIiosCi0ibWFrZSBqYXZhIiwgb3IgIm1ha2UgcHl0aG9uIi4KLQot
QWxsIG9mIHRoZXNlIHByb2dyYW1zIHNpbXBseSB0YWtlIGFuIGFkZHJlc3MgYm9vayBmaWxlIGFz
IHRoZWlyIHBhcmFtZXRlci4KLVRoZSBhZGRfcGVyc29uIHByb2dyYW1zIHdpbGwgY3JlYXRlIHRo
ZSBmaWxlIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KLQotVGhlc2UgZXhhbXBsZXMgYXJl
IHBhcnQgb2YgdGhlIFByb3RvY29sIEJ1ZmZlcnMgdHV0b3JpYWwsIGxvY2F0ZWQgYXQ6Ci0gIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy90dXRvcmlh
bHMKLQotKiBOb3RlIHRoYXQgb24gc29tZSBwbGF0Zm9ybXMgeW91IG1heSBoYXZlIHRvIGVkaXQg
dGhlIE1ha2VmaWxlIGFuZCByZW1vdmUKLSItbHB0aHJlYWQiIGZyb20gdGhlIGxpbmtlciBjb21t
YW5kcyAocGVyaGFwcyByZXBsYWNpbmcgaXQgd2l0aCBzb21ldGhpbmcgZWxzZSkuCi1XZSBkaWRu
J3QgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IGJlY2F1c2Ugd2Ugd2FudGVkIHRvIGtlZXAgdGhlIGV4
YW1wbGUgc2ltcGxlLgotCi0jIyBHbyAjIwotCi1UaGUgR28gZXhhbXBsZSByZXF1aXJlcyBhIHBs
dWdpbiB0byB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLCBzbyBpdCBpcyBub3QKLWJ1aWxk
IHdpdGggYWxsIHRoZSBvdGhlciBleGFtcGxlcy4gIFNlZToKLSAgaHR0cHM6Ly9naXRodWIuY29t
L2dvbGFuZy9wcm90b2J1ZgotZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgR28gcHJvdG9jb2wg
YnVmZmVyIHN1cHBvcnQuCi0KLUZpcnN0LCBpbnN0YWxsIHRoZSBQcm90b2NvbCBCdWZmZXJzIGNv
bXBpbGVyIChwcm90b2MpLgotVGhlbiwgaW5zdGFsbCB0aGUgR28gUHJvdG9jb2wgQnVmZmVycyBw
bHVnaW4KLSgkR09QQVRIL2JpbiBtdXN0IGJlIGluIHlvdXIgJFBBVEggZm9yIHByb3RvYyB0byBm
aW5kIGl0KToKLSAgZ28gZ2V0IGdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvYy1nZW4t
Z28KLQotQnVpbGQgdGhlIEdvIHNhbXBsZXMgaW4gdGhpcyBkaXJlY3Rvcnkgd2l0aCAibWFrZSBn
byIuICBUaGlzIGNyZWF0ZXMgdGhlCi1mb2xsb3dpbmcgZXhlY3V0YWJsZSBmaWxlcyBpbiB0aGUg
Y3VycmVudCBkaXJlY3Rvcnk6Ci0gIGFkZF9wZXJzb25fZ28gICAgICBsaXN0X3Blb3BsZV9nbwot
VG8gcnVuIHRoZSBleGFtcGxlOgotICAuL2FkZF9wZXJzb25fZ28gYWRkcmVzc2Jvb2suZGF0YQot
dG8gYWRkIGEgcGVyc29uIHRvIHRoZSBwcm90b2NvbCBidWZmZXIgZW5jb2RlZCBmaWxlIGFkZHJl
c3Nib29rLmRhdGEuICBUaGUgZmlsZQotaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdC4g
IFRvIHZpZXcgdGhlIGRhdGEsIHJ1bjoKLSAgLi9saXN0X3Blb3BsZV9nbyBhZGRyZXNzYm9vay5k
YXRhCi0KLU9ic2VydmUgdGhhdCB0aGUgQysrLCBQeXRob24sIGFuZCBKYXZhIGV4YW1wbGVzIGlu
IHRoaXMgZGlyZWN0b3J5IHJ1biBpbiBhCi1zaW1pbGFyIHdheSBhbmQgY2FuIHZpZXcvbW9kaWZ5
IGZpbGVzIGNyZWF0ZWQgYnkgdGhlIEdvIGV4YW1wbGUgYW5kIHZpY2UKLXZlcnNhLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9leGFtcGxlcy9hZGRfcGVyc29uLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9leGFtcGxlcy9hZGRfcGVyc29uLmNjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmVjNGIzNzRkODJkY2M3MjgxNGIwYjlkMjM2YmJl
Mzc4M2RjOGNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
ZXhhbXBsZXMvYWRkX3BlcnNvbi5jYworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8v
IFNlZSBSRUFETUUudHh0IGZvciBpbmZvcm1hdGlvbiBhbmQgYnVpbGQgaW5zdHJ1Y3Rpb25zLgot
Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8ZnN0cmVhbT4KLSNpbmNsdWRlIDxzdHJp
bmc+Ci0jaW5jbHVkZSAiYWRkcmVzc2Jvb2sucGIuaCIKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0K
LS8vIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gYSBQZXJzb24gbWVzc2FnZSBiYXNlZCBvbiB1c2Vy
IGlucHV0Lgotdm9pZCBQcm9tcHRGb3JBZGRyZXNzKHR1dG9yaWFsOjpQZXJzb24qIHBlcnNvbikg
ewotICBjb3V0IDw8ICJFbnRlciBwZXJzb24gSUQgbnVtYmVyOiAiOwotICBpbnQgaWQ7Ci0gIGNp
biA+PiBpZDsKLSAgcGVyc29uLT5zZXRfaWQoaWQpOwotICBjaW4uaWdub3JlKDI1NiwgJ1xuJyk7
Ci0KLSAgY291dCA8PCAiRW50ZXIgbmFtZTogIjsKLSAgZ2V0bGluZShjaW4sICpwZXJzb24tPm11
dGFibGVfbmFtZSgpKTsKLQotICBjb3V0IDw8ICJFbnRlciBlbWFpbCBhZGRyZXNzIChibGFuayBm
b3Igbm9uZSk6ICI7Ci0gIHN0cmluZyBlbWFpbDsKLSAgZ2V0bGluZShjaW4sIGVtYWlsKTsKLSAg
aWYgKCFlbWFpbC5lbXB0eSgpKSB7Ci0gICAgcGVyc29uLT5zZXRfZW1haWwoZW1haWwpOwotICB9
Ci0KLSAgd2hpbGUgKHRydWUpIHsKLSAgICBjb3V0IDw8ICJFbnRlciBhIHBob25lIG51bWJlciAo
b3IgbGVhdmUgYmxhbmsgdG8gZmluaXNoKTogIjsKLSAgICBzdHJpbmcgbnVtYmVyOwotICAgIGdl
dGxpbmUoY2luLCBudW1iZXIpOwotICAgIGlmIChudW1iZXIuZW1wdHkoKSkgewotICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgdHV0b3JpYWw6OlBlcnNvbjo6UGhvbmVOdW1iZXIqIHBob25lX251
bWJlciA9IHBlcnNvbi0+YWRkX3Bob25lcygpOwotICAgIHBob25lX251bWJlci0+c2V0X251bWJl
cihudW1iZXIpOwotCi0gICAgY291dCA8PCAiSXMgdGhpcyBhIG1vYmlsZSwgaG9tZSwgb3Igd29y
ayBwaG9uZT8gIjsKLSAgICBzdHJpbmcgdHlwZTsKLSAgICBnZXRsaW5lKGNpbiwgdHlwZSk7Ci0g
ICAgaWYgKHR5cGUgPT0gIm1vYmlsZSIpIHsKLSAgICAgIHBob25lX251bWJlci0+c2V0X3R5cGUo
dHV0b3JpYWw6OlBlcnNvbjo6TU9CSUxFKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImhvbWUi
KSB7Ci0gICAgICBwaG9uZV9udW1iZXItPnNldF90eXBlKHR1dG9yaWFsOjpQZXJzb246OkhPTUUp
OwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAid29yayIpIHsKLSAgICAgIHBob25lX251bWJlci0+
c2V0X3R5cGUodHV0b3JpYWw6OlBlcnNvbjo6V09SSyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNv
dXQgPDwgIlVua25vd24gcGhvbmUgdHlwZS4gIFVzaW5nIGRlZmF1bHQuIiA8PCBlbmRsOwotICAg
IH0KLSAgfQotfQotCi0vLyBNYWluIGZ1bmN0aW9uOiAgUmVhZHMgdGhlIGVudGlyZSBhZGRyZXNz
IGJvb2sgZnJvbSBhIGZpbGUsCi0vLyAgIGFkZHMgb25lIHBlcnNvbiBiYXNlZCBvbiB1c2VyIGlu
cHV0LCB0aGVuIHdyaXRlcyBpdCBiYWNrIG91dCB0byB0aGUgc2FtZQotLy8gICBmaWxlLgotaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgewotICAvLyBWZXJpZnkgdGhhdCB0aGUgdmVy
c2lvbiBvZiB0aGUgbGlicmFyeSB0aGF0IHdlIGxpbmtlZCBhZ2FpbnN0IGlzCi0gIC8vIGNvbXBh
dGlibGUgd2l0aCB0aGUgdmVyc2lvbiBvZiB0aGUgaGVhZGVycyB3ZSBjb21waWxlZCBhZ2FpbnN0
LgotICBHT09HTEVfUFJPVE9CVUZfVkVSSUZZX1ZFUlNJT047Ci0KLSAgaWYgKGFyZ2MgIT0gMikg
ewotICAgIGNlcnIgPDwgIlVzYWdlOiAgIiA8PCBhcmd2WzBdIDw8ICIgQUREUkVTU19CT09LX0ZJ
TEUiIDw8IGVuZGw7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgdHV0b3JpYWw6OkFkZHJlc3NC
b29rIGFkZHJlc3NfYm9vazsKLQotICB7Ci0gICAgLy8gUmVhZCB0aGUgZXhpc3RpbmcgYWRkcmVz
cyBib29rLgotICAgIGZzdHJlYW0gaW5wdXQoYXJndlsxXSwgaW9zOjppbiB8IGlvczo6YmluYXJ5
KTsKLSAgICBpZiAoIWlucHV0KSB7Ci0gICAgICBjb3V0IDw8IGFyZ3ZbMV0gPDwgIjogRmlsZSBu
b3QgZm91bmQuICBDcmVhdGluZyBhIG5ldyBmaWxlLiIgPDwgZW5kbDsKLSAgICB9IGVsc2UgaWYg
KCFhZGRyZXNzX2Jvb2suUGFyc2VGcm9tSXN0cmVhbSgmaW5wdXQpKSB7Ci0gICAgICBjZXJyIDw8
ICJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyBib29rLiIgPDwgZW5kbDsKLSAgICAgIHJldHVybiAt
MTsKLSAgICB9Ci0gIH0KLQotICAvLyBBZGQgYW4gYWRkcmVzcy4KLSAgUHJvbXB0Rm9yQWRkcmVz
cyhhZGRyZXNzX2Jvb2suYWRkX3Blb3BsZSgpKTsKLQotICB7Ci0gICAgLy8gV3JpdGUgdGhlIG5l
dyBhZGRyZXNzIGJvb2sgYmFjayB0byBkaXNrLgotICAgIGZzdHJlYW0gb3V0cHV0KGFyZ3ZbMV0s
IGlvczo6b3V0IHwgaW9zOjp0cnVuYyB8IGlvczo6YmluYXJ5KTsKLSAgICBpZiAoIWFkZHJlc3Nf
Ym9vay5TZXJpYWxpemVUb09zdHJlYW0oJm91dHB1dCkpIHsKLSAgICAgIGNlcnIgPDwgIkZhaWxl
ZCB0byB3cml0ZSBhZGRyZXNzIGJvb2suIiA8PCBlbmRsOwotICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLSAgfQotCi0gIC8vIE9wdGlvbmFsOiAgRGVsZXRlIGFsbCBnbG9iYWwgb2JqZWN0cyBhbGxv
Y2F0ZWQgYnkgbGlicHJvdG9idWYuCi0gIGdvb2dsZTo6cHJvdG9idWY6OlNodXRkb3duUHJvdG9i
dWZMaWJyYXJ5KCk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2V4YW1wbGVzL2FkZF9w
ZXJzb24uZ28gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2V4YW1wbGVzL2FkZF9wZXJzb24uZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRmMmU3Zjc0MTgyNzRhMTJjZDJiNzk4YTY4MTY4Mjc3NTNjYjI1MTQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9leGFtcGxlcy9hZGRfcGVyc29u
LmdvCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLXBhY2thZ2UgbWFpbgotCi1pbXBv
cnQgKAotCSJidWZpbyIKLQkiZm10IgotCSJpbyIKLQkiaW8vaW91dGlsIgotCSJsb2ciCi0JIm9z
IgotCSJzdHJpbmdzIgotCi0JImdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIgotCXBi
ICJnaXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi9leGFtcGxlcy90dXRvcmlhbCIKLSkKLQotZnVu
YyBwcm9tcHRGb3JBZGRyZXNzKHIgaW8uUmVhZGVyKSAoKnBiLlBlcnNvbiwgZXJyb3IpIHsKLQkv
LyBBIHByb3RvY29sIGJ1ZmZlciBjYW4gYmUgY3JlYXRlZCBsaWtlIGFueSBzdHJ1Y3QuCi0JcCA6
PSAmcGIuUGVyc29ue30KLQotCXJkIDo9IGJ1ZmlvLk5ld1JlYWRlcihyKQotCWZtdC5QcmludCgi
RW50ZXIgcGVyc29uIElEIG51bWJlcjogIikKLQkvLyBBbiBpbnQzMiBmaWVsZCBpbiB0aGUgLnBy
b3RvIGZpbGUgaXMgcmVwcmVzZW50ZWQgYXMgYW4gaW50MzIgZmllbGQKLQkvLyBpbiB0aGUgZ2Vu
ZXJhdGVkIEdvIHN0cnVjdC4KLQlpZiBfLCBlcnIgOj0gZm10LkZzY2FuZihyZCwgIiVkXG4iLCAm
cC5JZCk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gcCwgZXJyCi0JfQotCi0JZm10LlByaW50KCJF
bnRlciBuYW1lOiAiKQotCW5hbWUsIGVyciA6PSByZC5SZWFkU3RyaW5nKCdcbicpCi0JaWYgZXJy
ICE9IG5pbCB7Ci0JCXJldHVybiBwLCBlcnIKLQl9Ci0JLy8gQSBzdHJpbmcgZmllbGQgaW4gdGhl
IC5wcm90byBmaWxlIHJlc3VsdHMgaW4gYSBzdHJpbmcgZmllbGQgaW4gR28uCi0JLy8gV2UgdHJp
bSB0aGUgd2hpdGVzcGFjZSBiZWNhdXNlIHJkLlJlYWRTdHJpbmcgaW5jbHVkZXMgdGhlIHRyYWls
aW5nCi0JLy8gbmV3bGluZSBjaGFyYWN0ZXIgaW4gaXRzIG91dHB1dC4KLQlwLk5hbWUgPSBzdHJp
bmdzLlRyaW1TcGFjZShuYW1lKQotCi0JZm10LlByaW50KCJFbnRlciBlbWFpbCBhZGRyZXNzIChi
bGFuayBmb3Igbm9uZSk6ICIpCi0JZW1haWwsIGVyciA6PSByZC5SZWFkU3RyaW5nKCdcbicpCi0J
aWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBwLCBlcnIKLQl9Ci0JcC5FbWFpbCA9IHN0cmluZ3Mu
VHJpbVNwYWNlKGVtYWlsKQotCi0JZm9yIHsKLQkJZm10LlByaW50KCJFbnRlciBhIHBob25lIG51
bWJlciAob3IgbGVhdmUgYmxhbmsgdG8gZmluaXNoKTogIikKLQkJcGhvbmUsIGVyciA6PSByZC5S
ZWFkU3RyaW5nKCdcbicpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIHAsIGVycgotCQl9
Ci0JCXBob25lID0gc3RyaW5ncy5UcmltU3BhY2UocGhvbmUpCi0JCWlmIHBob25lID09ICIiIHsK
LQkJCWJyZWFrCi0JCX0KLQkJLy8gVGhlIFBob25lTnVtYmVyIG1lc3NhZ2UgdHlwZSBpcyBuZXN0
ZWQgd2l0aGluIHRoZSBQZXJzb24KLQkJLy8gbWVzc2FnZSBpbiB0aGUgLnByb3RvIGZpbGUuICBU
aGlzIHJlc3VsdHMgaW4gYSBHbyBzdHJ1Y3QKLQkJLy8gbmFtZWQgdXNpbmcgdGhlIG5hbWUgb2Yg
dGhlIHBhcmVudCBwcmVmaXhlZCB0byB0aGUgbmFtZSBvZgotCQkvLyB0aGUgbmVzdGVkIG1lc3Nh
Z2UuICBKdXN0IGFzIHdpdGggcGIuUGVyc29uLCBpdCBjYW4gYmUKLQkJLy8gY3JlYXRlZCBsaWtl
IGFueSBvdGhlciBzdHJ1Y3QuCi0JCXBuIDo9ICZwYi5QZXJzb25fUGhvbmVOdW1iZXJ7Ci0JCQlO
dW1iZXI6IHBob25lLAotCQl9Ci0KLQkJZm10LlByaW50KCJJcyB0aGlzIGEgbW9iaWxlLCBob21l
LCBvciB3b3JrIHBob25lPyAiKQotCQlwdHlwZSwgZXJyIDo9IHJkLlJlYWRTdHJpbmcoJ1xuJykK
LQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gcCwgZXJyCi0JCX0KLQkJcHR5cGUgPSBzdHJp
bmdzLlRyaW1TcGFjZShwdHlwZSkKLQotCQkvLyBBIHByb3RvIGVudW0gcmVzdWx0cyBpbiBhIEdv
IGNvbnN0YW50IGZvciBlYWNoIGVudW0gdmFsdWUuCi0JCXN3aXRjaCBwdHlwZSB7Ci0JCWNhc2Ug
Im1vYmlsZSI6Ci0JCQlwbi5UeXBlID0gcGIuUGVyc29uX01PQklMRQotCQljYXNlICJob21lIjoK
LQkJCXBuLlR5cGUgPSBwYi5QZXJzb25fSE9NRQotCQljYXNlICJ3b3JrIjoKLQkJCXBuLlR5cGUg
PSBwYi5QZXJzb25fV09SSwotCQlkZWZhdWx0OgotCQkJZm10LlByaW50ZigiVW5rbm93biBwaG9u
ZSB0eXBlICVxLiAgVXNpbmcgZGVmYXVsdC5cbiIsIHB0eXBlKQotCQl9Ci0KLQkJLy8gQSByZXBl
YXRlZCBwcm90byBmaWVsZCBtYXBzIHRvIGEgc2xpY2UgZmllbGQgaW4gR28uICBXZSBjYW4KLQkJ
Ly8gYXBwZW5kIHRvIGl0IGxpa2UgYW55IG90aGVyIHNsaWNlLgotCQlwLlBob25lcyA9IGFwcGVu
ZChwLlBob25lcywgcG4pCi0JfQotCi0JcmV0dXJuIHAsIG5pbAotfQotCi0vLyBNYWluIHJlYWRz
IHRoZSBlbnRpcmUgYWRkcmVzcyBib29rIGZyb20gYSBmaWxlLCBhZGRzIG9uZSBwZXJzb24gYmFz
ZWQgb24KLS8vIHVzZXIgaW5wdXQsIHRoZW4gd3JpdGVzIGl0IGJhY2sgb3V0IHRvIHRoZSBzYW1l
IGZpbGUuCi1mdW5jIG1haW4oKSB7Ci0JaWYgbGVuKG9zLkFyZ3MpICE9IDIgewotCQlsb2cuRmF0
YWxmKCJVc2FnZTogICVzIEFERFJFU1NfQk9PS19GSUxFXG4iLCBvcy5BcmdzWzBdKQotCX0KLQlm
bmFtZSA6PSBvcy5BcmdzWzFdCi0KLQkvLyBSZWFkIHRoZSBleGlzdGluZyBhZGRyZXNzIGJvb2su
Ci0JaW4sIGVyciA6PSBpb3V0aWwuUmVhZEZpbGUoZm5hbWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0J
CWlmIG9zLklzTm90RXhpc3QoZXJyKSB7Ci0JCQlmbXQuUHJpbnRmKCIlczogRmlsZSBub3QgZm91
bmQuICBDcmVhdGluZyBuZXcgZmlsZS5cbiIsIGZuYW1lKQotCQl9IGVsc2UgewotCQkJbG9nLkZh
dGFsbG4oIkVycm9yIHJlYWRpbmcgZmlsZToiLCBlcnIpCi0JCX0KLQl9Ci0KLQkvLyBbU1RBUlQg
bWFyc2hhbF9wcm90b10KLQlib29rIDo9ICZwYi5BZGRyZXNzQm9va3t9Ci0JLy8gW1NUQVJUX0VY
Q0xVREVdCi0JaWYgZXJyIDo9IHByb3RvLlVubWFyc2hhbChpbiwgYm9vayk7IGVyciAhPSBuaWwg
ewotCQlsb2cuRmF0YWxsbigiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgYm9vazoiLCBlcnIpCi0J
fQotCi0JLy8gQWRkIGFuIGFkZHJlc3MuCi0JYWRkciwgZXJyIDo9IHByb21wdEZvckFkZHJlc3Mo
b3MuU3RkaW4pCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbGxuKCJFcnJvciB3aXRoIGFk
ZHJlc3M6IiwgZXJyKQotCX0KLQlib29rLlBlb3BsZSA9IGFwcGVuZChib29rLlBlb3BsZSwgYWRk
cikKLQkvLyBbRU5EX0VYQ0xVREVdCi0KLQkvLyBXcml0ZSB0aGUgbmV3IGFkZHJlc3MgYm9vayBi
YWNrIHRvIGRpc2suCi0Jb3V0LCBlcnIgOj0gcHJvdG8uTWFyc2hhbChib29rKQotCWlmIGVyciAh
PSBuaWwgewotCQlsb2cuRmF0YWxsbigiRmFpbGVkIHRvIGVuY29kZSBhZGRyZXNzIGJvb2s6Iiwg
ZXJyKQotCX0KLQlpZiBlcnIgOj0gaW91dGlsLldyaXRlRmlsZShmbmFtZSwgb3V0LCAwNjQ0KTsg
ZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbGxuKCJGYWlsZWQgdG8gd3JpdGUgYWRkcmVzcyBib29r
OiIsIGVycikKLQl9Ci0JLy8gW0VORCBtYXJzaGFsX3Byb3RvXQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9leGFt
cGxlcy9hZGRfcGVyc29uLnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9leGFtcGxlcy9hZGRfcGVyc29uLnB5CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwYjY5ODU3OTJkN2E1ZmNlZjU0NWE0NGQwODVkOTI5ZGFiOTg5YzRl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZXhhbXBsZXMv
YWRkX3BlcnNvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMhIC91c3IvYmlu
L2VudiBweXRob24KLQotIyBTZWUgUkVBRE1FLnR4dCBmb3IgaW5mb3JtYXRpb24gYW5kIGJ1aWxk
IGluc3RydWN0aW9ucy4KLQotaW1wb3J0IGFkZHJlc3Nib29rX3BiMgotaW1wb3J0IHN5cwotCi0j
IFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gYSBQZXJzb24gbWVzc2FnZSBiYXNlZCBvbiB1c2VyIGlu
cHV0LgotZGVmIFByb21wdEZvckFkZHJlc3MocGVyc29uKToKLSAgcGVyc29uLmlkID0gaW50KHJh
d19pbnB1dCgiRW50ZXIgcGVyc29uIElEIG51bWJlcjogIikpCi0gIHBlcnNvbi5uYW1lID0gcmF3
X2lucHV0KCJFbnRlciBuYW1lOiAiKQotCi0gIGVtYWlsID0gcmF3X2lucHV0KCJFbnRlciBlbWFp
bCBhZGRyZXNzIChibGFuayBmb3Igbm9uZSk6ICIpCi0gIGlmIGVtYWlsICE9ICIiOgotICAgIHBl
cnNvbi5lbWFpbCA9IGVtYWlsCi0KLSAgd2hpbGUgVHJ1ZToKLSAgICBudW1iZXIgPSByYXdfaW5w
dXQoIkVudGVyIGEgcGhvbmUgbnVtYmVyIChvciBsZWF2ZSBibGFuayB0byBmaW5pc2gpOiAiKQot
ICAgIGlmIG51bWJlciA9PSAiIjoKLSAgICAgIGJyZWFrCi0KLSAgICBwaG9uZV9udW1iZXIgPSBw
ZXJzb24ucGhvbmVzLmFkZCgpCi0gICAgcGhvbmVfbnVtYmVyLm51bWJlciA9IG51bWJlcgotCi0g
ICAgdHlwZSA9IHJhd19pbnB1dCgiSXMgdGhpcyBhIG1vYmlsZSwgaG9tZSwgb3Igd29yayBwaG9u
ZT8gIikKLSAgICBpZiB0eXBlID09ICJtb2JpbGUiOgotICAgICAgcGhvbmVfbnVtYmVyLnR5cGUg
PSBhZGRyZXNzYm9va19wYjIuUGVyc29uLk1PQklMRQotICAgIGVsaWYgdHlwZSA9PSAiaG9tZSI6
Ci0gICAgICBwaG9uZV9udW1iZXIudHlwZSA9IGFkZHJlc3Nib29rX3BiMi5QZXJzb24uSE9NRQot
ICAgIGVsaWYgdHlwZSA9PSAid29yayI6Ci0gICAgICBwaG9uZV9udW1iZXIudHlwZSA9IGFkZHJl
c3Nib29rX3BiMi5QZXJzb24uV09SSwotICAgIGVsc2U6Ci0gICAgICBwcmludCAiVW5rbm93biBw
aG9uZSB0eXBlOyBsZWF2aW5nIGFzIGRlZmF1bHQgdmFsdWUuIgotCi0jIE1haW4gcHJvY2VkdXJl
OiAgUmVhZHMgdGhlIGVudGlyZSBhZGRyZXNzIGJvb2sgZnJvbSBhIGZpbGUsCi0jICAgYWRkcyBv
bmUgcGVyc29uIGJhc2VkIG9uIHVzZXIgaW5wdXQsIHRoZW4gd3JpdGVzIGl0IGJhY2sgb3V0IHRv
IHRoZSBzYW1lCi0jICAgZmlsZS4KLWlmIGxlbihzeXMuYXJndikgIT0gMjoKLSAgcHJpbnQgIlVz
YWdlOiIsIHN5cy5hcmd2WzBdLCAiQUREUkVTU19CT09LX0ZJTEUiCi0gIHN5cy5leGl0KC0xKQot
Ci1hZGRyZXNzX2Jvb2sgPSBhZGRyZXNzYm9va19wYjIuQWRkcmVzc0Jvb2soKQotCi0jIFJlYWQg
dGhlIGV4aXN0aW5nIGFkZHJlc3MgYm9vay4KLXRyeToKLSAgd2l0aCBvcGVuKHN5cy5hcmd2WzFd
LCAicmIiKSBhcyBmOgotICAgIGFkZHJlc3NfYm9vay5QYXJzZUZyb21TdHJpbmcoZi5yZWFkKCkp
Ci1leGNlcHQgSU9FcnJvcjoKLSAgcHJpbnQgc3lzLmFyZ3ZbMV0gKyAiOiBGaWxlIG5vdCBmb3Vu
ZC4gIENyZWF0aW5nIGEgbmV3IGZpbGUuIgotCi0jIEFkZCBhbiBhZGRyZXNzLgotUHJvbXB0Rm9y
QWRkcmVzcyhhZGRyZXNzX2Jvb2sucGVvcGxlLmFkZCgpKQotCi0jIFdyaXRlIHRoZSBuZXcgYWRk
cmVzcyBib29rIGJhY2sgdG8gZGlzay4KLXdpdGggb3BlbihzeXMuYXJndlsxXSwgIndiIikgYXMg
ZjoKLSAgZi53cml0ZShhZGRyZXNzX2Jvb2suU2VyaWFsaXplVG9TdHJpbmcoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvZXhhbXBsZXMvYWRkX3BlcnNvbl90ZXN0LmdvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9leGFtcGxlcy9hZGRfcGVyc29uX3Rlc3Qu
Z28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MDdkYjZmYzE0NzExMzhmNjA1NWJm
NzQxMzViMzAwODZkZmMzN2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9leGFtcGxlcy9hZGRfcGVyc29uX3Rlc3QuZ28KKysrIC9kZXYvbnVsbApAQCAtMSw1
OCArMCwwIEBACi1wYWNrYWdlIG1haW4KLQotaW1wb3J0ICgKLQkic3RyaW5ncyIKLQkidGVzdGlu
ZyIKLQotCSJnaXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90byIKLQlwYiAiZ2l0aHViLmNv
bS9nb29nbGUvcHJvdG9idWYvZXhhbXBsZXMvdHV0b3JpYWwiCi0pCi0KLWZ1bmMgVGVzdFByb21w
dEZvckFkZHJlc3NSZXR1cm5zQWRkcmVzcyh0ICp0ZXN0aW5nLlQpIHsKLQlpbiA6PSBgMTIzNDUK
LUV4YW1wbGUgTmFtZQotbmFtZUBleGFtcGxlLmNvbQotMTIzLTQ1Ni03ODkwCi1ob21lCi0yMjIt
MjIyLTIyMjIKLW1vYmlsZQotMTExLTExMS0xMTExCi13b3JrCi03NzctNzc3LTc3NzcKLXVua25v
d24KLQotYAotCWdvdCwgZXJyIDo9IHByb21wdEZvckFkZHJlc3Moc3RyaW5ncy5OZXdSZWFkZXIo
aW4pKQotCWlmIGVyciAhPSBuaWwgewotCQl0LkZhdGFsZigicHJvbXB0Rm9yQWRkcmVzcyglcSkg
aGFkIHVuZXhwZWN0ZWQgZXJyb3I6ICVzIiwgaW4sIGVyci5FcnJvcigpKQotCX0KLQlpZiBnb3Qu
SWQgIT0gMTIzNDUgewotCQl0LkVycm9yZigicHJvbXB0Rm9yQWRkcmVzcyglcSkgZ290ICVkLCB3
YW50IElEICVkIiwgaW4sIGdvdC5JZCwgMTIzNDUpCi0JfQotCWlmIGdvdC5OYW1lICE9ICJFeGFt
cGxlIE5hbWUiIHsKLQkJdC5FcnJvcmYoInByb21wdEZvckFkZHJlc3MoJXEpID0+IHdhbnQgbmFt
ZSAlcSwgZ290ICVxIiwgIkV4YW1wbGUgTmFtZSIsIGdvdC5OYW1lKQotCX0KLQlpZiBnb3QuRW1h
aWwgIT0gIm5hbWVAZXhhbXBsZS5jb20iIHsKLQkJdC5FcnJvcmYoInByb21wdEZvckFkZHJlc3Mo
JXEpID0+IHdhbnQgZW1haWwgJXEsIGdvdCAlcSIsICJuYW1lQGV4YW1wbGUuY29tIiwgZ290LkVt
YWlsKQotCX0KLQotCXdhbnQgOj0gW10qcGIuUGVyc29uX1Bob25lTnVtYmVyewotCQl7TnVtYmVy
OiAiMTIzLTQ1Ni03ODkwIiwgVHlwZTogcGIuUGVyc29uX0hPTUV9LAotCQl7TnVtYmVyOiAiMjIy
LTIyMi0yMjIyIiwgVHlwZTogcGIuUGVyc29uX01PQklMRX0sCi0JCXtOdW1iZXI6ICIxMTEtMTEx
LTExMTEiLCBUeXBlOiBwYi5QZXJzb25fV09SS30sCi0JCXtOdW1iZXI6ICI3NzctNzc3LTc3Nzci
LCBUeXBlOiBwYi5QZXJzb25fTU9CSUxFfSwKLQl9Ci0JaWYgbGVuKGdvdC5QaG9uZXMpICE9IGxl
bih3YW50KSB7Ci0JCXQuRXJyb3JmKCJ3YW50ICVkIHBob25lIG51bWJlcnMsIGdvdCAlZCIsIGxl
bih3YW50KSwgbGVuKGdvdC5QaG9uZXMpKQotCX0KLQlwaG9uZXMgOj0gbGVuKGdvdC5QaG9uZXMp
Ci0JaWYgcGhvbmVzID4gbGVuKHdhbnQpIHsKLQkJcGhvbmVzID0gbGVuKHdhbnQpCi0JfQotCWZv
ciBpIDo9IDA7IGkgPCBwaG9uZXM7IGkrKyB7Ci0JCWlmICFwcm90by5FcXVhbChnb3QuUGhvbmVz
W2ldLCB3YW50W2ldKSB7Ci0JCQl0LkVycm9yZigid2FudCBwaG9uZSAlcSwgZ290ICVxIiwgKndh
bnRbaV0sICpnb3QuUGhvbmVzW2ldKQotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2V4YW1wbGVz
L2FkZHJlc3Nib29rLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9leGFtcGxlcy9hZGRyZXNzYm9vay5wcm90bwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjNjYzJmOTdlNzZhMGQyM2FjMTRiMWZlOWI5YmZjZDYzNjQ3
NjRjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2V4YW1w
bGVzL2FkZHJlc3Nib29rLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLy8g
U2VlIFJFQURNRS50eHQgZm9yIGluZm9ybWF0aW9uIGFuZCBidWlsZCBpbnN0cnVjdGlvbnMuCi0v
LwotLy8gTm90ZTogU1RBUlQgYW5kIEVORCB0YWdzIGFyZSB1c2VkIGluIGNvbW1lbnRzIHRvIGRl
ZmluZSBzZWN0aW9ucyB1c2VkIGluCi0vLyB0dXRvcmlhbHMuICBUaGV5IGFyZSBub3QgcGFydCBv
ZiB0aGUgc3ludGF4IGZvciBQcm90b2NvbCBCdWZmZXJzLgotLy8KLS8vIFRvIGdldCBhbiBpbi1k
ZXB0aCB3YWxrdGhyb3VnaCBvZiB0aGlzIGZpbGUgYW5kIHRoZSByZWxhdGVkIGV4YW1wbGVzLCBz
ZWU6Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2Rv
Y3MvdHV0b3JpYWxzCi0KLS8vIFtTVEFSVCBkZWNsYXJhdGlvbl0KLXN5bnRheCA9ICJwcm90bzMi
OwotcGFja2FnZSB0dXRvcmlhbDsKLS8vIFtFTkQgZGVjbGFyYXRpb25dCi0KLS8vIFtTVEFSVCBq
YXZhX2RlY2xhcmF0aW9uXQotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZXhhbXBsZS50dXRv
cmlhbCI7Ci1vcHRpb24gamF2YV9vdXRlcl9jbGFzc25hbWUgPSAiQWRkcmVzc0Jvb2tQcm90b3Mi
OwotLy8gW0VORCBqYXZhX2RlY2xhcmF0aW9uXQotCi0vLyBbU1RBUlQgY3NoYXJwX2RlY2xhcmF0
aW9uXQotb3B0aW9uIGNzaGFycF9uYW1lc3BhY2UgPSAiR29vZ2xlLlByb3RvYnVmLkV4YW1wbGVz
LkFkZHJlc3NCb29rIjsKLS8vIFtFTkQgY3NoYXJwX2RlY2xhcmF0aW9uXQotCi0vLyBbU1RBUlQg
bWVzc2FnZXNdCi1tZXNzYWdlIFBlcnNvbiB7Ci0gIHN0cmluZyBuYW1lID0gMTsKLSAgaW50MzIg
aWQgPSAyOyAgLy8gVW5pcXVlIElEIG51bWJlciBmb3IgdGhpcyBwZXJzb24uCi0gIHN0cmluZyBl
bWFpbCA9IDM7Ci0KLSAgZW51bSBQaG9uZVR5cGUgewotICAgIE1PQklMRSA9IDA7Ci0gICAgSE9N
RSA9IDE7Ci0gICAgV09SSyA9IDI7Ci0gIH0KLQotICBtZXNzYWdlIFBob25lTnVtYmVyIHsKLSAg
ICBzdHJpbmcgbnVtYmVyID0gMTsKLSAgICBQaG9uZVR5cGUgdHlwZSA9IDI7Ci0gIH0KLQotICBy
ZXBlYXRlZCBQaG9uZU51bWJlciBwaG9uZXMgPSA0OwotfQotCi0vLyBPdXIgYWRkcmVzcyBib29r
IGZpbGUgaXMganVzdCBvbmUgb2YgdGhlc2UuCi1tZXNzYWdlIEFkZHJlc3NCb29rIHsKLSAgcmVw
ZWF0ZWQgUGVyc29uIHBlb3BsZSA9IDE7Ci19Ci0vLyBbRU5EIG1lc3NhZ2VzXQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9leGFtcGxlcy9saXN0X3Blb3BsZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZXhhbXBsZXMvbGlzdF9wZW9wbGUuY2MKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZTU2NjZkODRlNmY3MjlkYjdjYmFiOWZmM2U1OTg2
NzE1Mzk0MjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9l
eGFtcGxlcy9saXN0X3Blb3BsZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8v
IFNlZSBSRUFETUUudHh0IGZvciBpbmZvcm1hdGlvbiBhbmQgYnVpbGQgaW5zdHJ1Y3Rpb25zLgot
Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8ZnN0cmVhbT4KLSNpbmNsdWRlIDxzdHJp
bmc+Ci0jaW5jbHVkZSAiYWRkcmVzc2Jvb2sucGIuaCIKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0K
LS8vIEl0ZXJhdGVzIHRob3VnaCBhbGwgcGVvcGxlIGluIHRoZSBBZGRyZXNzQm9vayBhbmQgcHJp
bnRzIGluZm8gYWJvdXQgdGhlbS4KLXZvaWQgTGlzdFBlb3BsZShjb25zdCB0dXRvcmlhbDo6QWRk
cmVzc0Jvb2smIGFkZHJlc3NfYm9vaykgewotICBmb3IgKGludCBpID0gMDsgaSA8IGFkZHJlc3Nf
Ym9vay5wZW9wbGVfc2l6ZSgpOyBpKyspIHsKLSAgICBjb25zdCB0dXRvcmlhbDo6UGVyc29uJiBw
ZXJzb24gPSBhZGRyZXNzX2Jvb2sucGVvcGxlKGkpOwotCi0gICAgY291dCA8PCAiUGVyc29uIElE
OiAiIDw8IHBlcnNvbi5pZCgpIDw8IGVuZGw7Ci0gICAgY291dCA8PCAiICBOYW1lOiAiIDw8IHBl
cnNvbi5uYW1lKCkgPDwgZW5kbDsKLSAgICBpZiAocGVyc29uLmVtYWlsKCkgIT0gIiIpIHsKLSAg
ICAgIGNvdXQgPDwgIiAgRS1tYWlsIGFkZHJlc3M6ICIgPDwgcGVyc29uLmVtYWlsKCkgPDwgZW5k
bDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHBlcnNvbi5waG9uZXNfc2l6ZSgp
OyBqKyspIHsKLSAgICAgIGNvbnN0IHR1dG9yaWFsOjpQZXJzb246OlBob25lTnVtYmVyJiBwaG9u
ZV9udW1iZXIgPSBwZXJzb24ucGhvbmVzKGopOwotCi0gICAgICBzd2l0Y2ggKHBob25lX251bWJl
ci50eXBlKCkpIHsKLSAgICAgICAgY2FzZSB0dXRvcmlhbDo6UGVyc29uOjpNT0JJTEU6Ci0gICAg
ICAgICAgY291dCA8PCAiICBNb2JpbGUgcGhvbmUgIzogIjsKLSAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSB0dXRvcmlhbDo6UGVyc29uOjpIT01FOgotICAgICAgICAgIGNvdXQgPDwgIiAg
SG9tZSBwaG9uZSAjOiAiOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIHR1dG9yaWFs
OjpQZXJzb246OldPUks6Ci0gICAgICAgICAgY291dCA8PCAiICBXb3JrIHBob25lICM6ICI7Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjb3V0IDw8IHBob25lX251bWJlci5udW1i
ZXIoKSA8PCBlbmRsOwotICAgIH0KLSAgfQotfQotCi0vLyBNYWluIGZ1bmN0aW9uOiAgUmVhZHMg
dGhlIGVudGlyZSBhZGRyZXNzIGJvb2sgZnJvbSBhIGZpbGUgYW5kIHByaW50cyBhbGwKLS8vICAg
dGhlIGluZm9ybWF0aW9uIGluc2lkZS4KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10p
IHsKLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgdGhhdCB3ZSBs
aW5rZWQgYWdhaW5zdCBpcwotICAvLyBjb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gb2YgdGhl
IGhlYWRlcnMgd2UgY29tcGlsZWQgYWdhaW5zdC4KLSAgR09PR0xFX1BST1RPQlVGX1ZFUklGWV9W
RVJTSU9OOwotCi0gIGlmIChhcmdjICE9IDIpIHsKLSAgICBjZXJyIDw8ICJVc2FnZTogICIgPDwg
YXJndlswXSA8PCAiIEFERFJFU1NfQk9PS19GSUxFIiA8PCBlbmRsOwotICAgIHJldHVybiAtMTsK
LSAgfQotCi0gIHR1dG9yaWFsOjpBZGRyZXNzQm9vayBhZGRyZXNzX2Jvb2s7Ci0KLSAgewotICAg
IC8vIFJlYWQgdGhlIGV4aXN0aW5nIGFkZHJlc3MgYm9vay4KLSAgICBmc3RyZWFtIGlucHV0KGFy
Z3ZbMV0sIGlvczo6aW4gfCBpb3M6OmJpbmFyeSk7Ci0gICAgaWYgKCFhZGRyZXNzX2Jvb2suUGFy
c2VGcm9tSXN0cmVhbSgmaW5wdXQpKSB7Ci0gICAgICBjZXJyIDw8ICJGYWlsZWQgdG8gcGFyc2Ug
YWRkcmVzcyBib29rLiIgPDwgZW5kbDsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gIH0KLQot
ICBMaXN0UGVvcGxlKGFkZHJlc3NfYm9vayk7Ci0KLSAgLy8gT3B0aW9uYWw6ICBEZWxldGUgYWxs
IGdsb2JhbCBvYmplY3RzIGFsbG9jYXRlZCBieSBsaWJwcm90b2J1Zi4KLSAgZ29vZ2xlOjpwcm90
b2J1Zjo6U2h1dGRvd25Qcm90b2J1ZkxpYnJhcnkoKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvZXhhbXBsZXMvbGlzdF9wZW9wbGUuZ28gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2V4YW1wbGVzL2xpc3RfcGVvcGxlLmdvCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGJjNTg5ZWZjNWNlYmQxZDVkYmM1YjUzZjBl
MTRlNTUxYjgxNzI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvZXhhbXBsZXMvbGlzdF9wZW9wbGUuZ28KKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBA
Ci1wYWNrYWdlIG1haW4KLQotaW1wb3J0ICgKLQkiZm10IgotCSJpbyIKLQkiaW8vaW91dGlsIgot
CSJsb2ciCi0JIm9zIgotCi0JImdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIgotCXBi
ICJnaXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi9leGFtcGxlcy90dXRvcmlhbCIKLSkKLQotZnVu
YyB3cml0ZVBlcnNvbih3IGlvLldyaXRlciwgcCAqcGIuUGVyc29uKSB7Ci0JZm10LkZwcmludGxu
KHcsICJQZXJzb24gSUQ6IiwgcC5JZCkKLQlmbXQuRnByaW50bG4odywgIiAgTmFtZToiLCBwLk5h
bWUpCi0JaWYgcC5FbWFpbCAhPSAiIiB7Ci0JCWZtdC5GcHJpbnRsbih3LCAiICBFLW1haWwgYWRk
cmVzczoiLCBwLkVtYWlsKQotCX0KLQotCWZvciBfLCBwbiA6PSByYW5nZSBwLlBob25lcyB7Ci0J
CXN3aXRjaCBwbi5UeXBlIHsKLQkJY2FzZSBwYi5QZXJzb25fTU9CSUxFOgotCQkJZm10LkZwcmlu
dCh3LCAiICBNb2JpbGUgcGhvbmUgIzogIikKLQkJY2FzZSBwYi5QZXJzb25fSE9NRToKLQkJCWZt
dC5GcHJpbnQodywgIiAgSG9tZSBwaG9uZSAjOiAiKQotCQljYXNlIHBiLlBlcnNvbl9XT1JLOgot
CQkJZm10LkZwcmludCh3LCAiICBXb3JrIHBob25lICM6ICIpCi0JCX0KLQkJZm10LkZwcmludGxu
KHcsIHBuLk51bWJlcikKLQl9Ci19Ci0KLWZ1bmMgbGlzdFBlb3BsZSh3IGlvLldyaXRlciwgYm9v
ayAqcGIuQWRkcmVzc0Jvb2spIHsKLQlmb3IgXywgcCA6PSByYW5nZSBib29rLlBlb3BsZSB7Ci0J
CXdyaXRlUGVyc29uKHcsIHApCi0JfQotfQotCi0vLyBNYWluIHJlYWRzIHRoZSBlbnRpcmUgYWRk
cmVzcyBib29rIGZyb20gYSBmaWxlIGFuZCBwcmludHMgYWxsIHRoZQotLy8gaW5mb3JtYXRpb24g
aW5zaWRlLgotZnVuYyBtYWluKCkgewotCWlmIGxlbihvcy5BcmdzKSAhPSAyIHsKLQkJbG9nLkZh
dGFsZigiVXNhZ2U6ICAlcyBBRERSRVNTX0JPT0tfRklMRVxuIiwgb3MuQXJnc1swXSkKLQl9Ci0J
Zm5hbWUgOj0gb3MuQXJnc1sxXQotCi0JLy8gW1NUQVJUIHVubWFyc2hhbF9wcm90b10KLQkvLyBS
ZWFkIHRoZSBleGlzdGluZyBhZGRyZXNzIGJvb2suCi0JaW4sIGVyciA6PSBpb3V0aWwuUmVhZEZp
bGUoZm5hbWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbGxuKCJFcnJvciByZWFkaW5n
IGZpbGU6IiwgZXJyKQotCX0KLQlib29rIDo9ICZwYi5BZGRyZXNzQm9va3t9Ci0JaWYgZXJyIDo9
IHByb3RvLlVubWFyc2hhbChpbiwgYm9vayk7IGVyciAhPSBuaWwgewotCQlsb2cuRmF0YWxsbigi
RmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgYm9vazoiLCBlcnIpCi0JfQotCS8vIFtFTkQgdW5tYXJz
aGFsX3Byb3RvXQotCi0JbGlzdFBlb3BsZShvcy5TdGRvdXQsIGJvb2spCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2V4YW1wbGVzL2xpc3RfcGVvcGxlLnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9leGFtcGxlcy9saXN0X3Blb3BsZS5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjEzMTg3MmQ4NDFlZDQ5ZmQzNGFkZGVlNjNjZWViMTdi
Nzg4YjIxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2V4
YW1wbGVzL2xpc3RfcGVvcGxlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyEg
L3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIFNlZSBSRUFETUUudHh0IGZvciBpbmZvcm1hdGlvbiBh
bmQgYnVpbGQgaW5zdHJ1Y3Rpb25zLgotCi1pbXBvcnQgYWRkcmVzc2Jvb2tfcGIyCi1pbXBvcnQg
c3lzCi0KLSMgSXRlcmF0ZXMgdGhvdWdoIGFsbCBwZW9wbGUgaW4gdGhlIEFkZHJlc3NCb29rIGFu
ZCBwcmludHMgaW5mbyBhYm91dCB0aGVtLgotZGVmIExpc3RQZW9wbGUoYWRkcmVzc19ib29rKToK
LSAgZm9yIHBlcnNvbiBpbiBhZGRyZXNzX2Jvb2sucGVvcGxlOgotICAgIHByaW50ICJQZXJzb24g
SUQ6IiwgcGVyc29uLmlkCi0gICAgcHJpbnQgIiAgTmFtZToiLCBwZXJzb24ubmFtZQotICAgIGlm
IHBlcnNvbi5lbWFpbCAhPSAiIjoKLSAgICAgIHByaW50ICIgIEUtbWFpbCBhZGRyZXNzOiIsIHBl
cnNvbi5lbWFpbAotCi0gICAgZm9yIHBob25lX251bWJlciBpbiBwZXJzb24ucGhvbmVzOgotICAg
ICAgaWYgcGhvbmVfbnVtYmVyLnR5cGUgPT0gYWRkcmVzc2Jvb2tfcGIyLlBlcnNvbi5NT0JJTEU6
Ci0gICAgICAgIHByaW50ICIgIE1vYmlsZSBwaG9uZSAjOiIsCi0gICAgICBlbGlmIHBob25lX251
bWJlci50eXBlID09IGFkZHJlc3Nib29rX3BiMi5QZXJzb24uSE9NRToKLSAgICAgICAgcHJpbnQg
IiAgSG9tZSBwaG9uZSAjOiIsCi0gICAgICBlbGlmIHBob25lX251bWJlci50eXBlID09IGFkZHJl
c3Nib29rX3BiMi5QZXJzb24uV09SSzoKLSAgICAgICAgcHJpbnQgIiAgV29yayBwaG9uZSAjOiIs
Ci0gICAgICBwcmludCBwaG9uZV9udW1iZXIubnVtYmVyCi0KLSMgTWFpbiBwcm9jZWR1cmU6ICBS
ZWFkcyB0aGUgZW50aXJlIGFkZHJlc3MgYm9vayBmcm9tIGEgZmlsZSBhbmQgcHJpbnRzIGFsbAot
IyAgIHRoZSBpbmZvcm1hdGlvbiBpbnNpZGUuCi1pZiBsZW4oc3lzLmFyZ3YpICE9IDI6Ci0gIHBy
aW50ICJVc2FnZToiLCBzeXMuYXJndlswXSwgIkFERFJFU1NfQk9PS19GSUxFIgotICBzeXMuZXhp
dCgtMSkKLQotYWRkcmVzc19ib29rID0gYWRkcmVzc2Jvb2tfcGIyLkFkZHJlc3NCb29rKCkKLQot
IyBSZWFkIHRoZSBleGlzdGluZyBhZGRyZXNzIGJvb2suCi13aXRoIG9wZW4oc3lzLmFyZ3ZbMV0s
ICJyYiIpIGFzIGY6Ci0gIGFkZHJlc3NfYm9vay5QYXJzZUZyb21TdHJpbmcoZi5yZWFkKCkpCi0K
LUxpc3RQZW9wbGUoYWRkcmVzc19ib29rKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9leGFtcGxlcy9saXN0X3Blb3Bs
ZV90ZXN0LmdvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9leGFtcGxlcy9saXN0X3Blb3BsZV90ZXN0LmdvCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4N2Q2YWQ2ZWM2NzFjZTYxYjIxNmYzODdkNDUyZTQ2YzljMzQwZWNhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvZXhhbXBsZXMvbGlz
dF9wZW9wbGVfdGVzdC5nbworKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi1wYWNrYWdl
IG1haW4KLQotaW1wb3J0ICgKLQkiYnl0ZXMiCi0JInN0cmluZ3MiCi0JInRlc3RpbmciCi0KLQlw
YiAiZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWYvZXhhbXBsZXMvdHV0b3JpYWwiCi0pCi0KLWZ1
bmMgVGVzdFdyaXRlUGVyc29uV3JpdGVzUGVyc29uKHQgKnRlc3RpbmcuVCkgewotCWJ1ZiA6PSBu
ZXcoYnl0ZXMuQnVmZmVyKQotCS8vIFtTVEFSVCBwb3B1bGF0ZV9wcm90b10KLQlwIDo9IHBiLlBl
cnNvbnsKLQkJSWQ6ICAgIDEyMzQsCi0JCU5hbWU6ICAiSm9obiBEb2UiLAotCQlFbWFpbDogImpk
b2VAZXhhbXBsZS5jb20iLAotCQlQaG9uZXM6IFtdKnBiLlBlcnNvbl9QaG9uZU51bWJlcnsKLQkJ
CXtOdW1iZXI6ICI1NTUtNDMyMSIsIFR5cGU6IHBiLlBlcnNvbl9IT01FfSwKLQkJfSwKLQl9Ci0J
Ly8gW0VORCBwb3B1bGF0ZV9wcm90b10KLQl3cml0ZVBlcnNvbihidWYsICZwKQotCWdvdCA6PSBi
dWYuU3RyaW5nKCkKLQl3YW50IDo9IGBQZXJzb24gSUQ6IDEyMzQKLSAgTmFtZTogSm9obiBEb2UK
LSAgRS1tYWlsIGFkZHJlc3M6IGpkb2VAZXhhbXBsZS5jb20KLSAgSG9tZSBwaG9uZSAjOiA1NTUt
NDMyMQotYAotCWlmIGdvdCAhPSB3YW50IHsKLQkJdC5FcnJvcmYoIndyaXRlUGVyc29uKCVzKSA9
PlxuXHQlcSwgd2FudCAlcSIsIHAuU3RyaW5nKCksIGdvdCwgd2FudCkKLQl9Ci19Ci0KLWZ1bmMg
VGVzdExpc3RQZW9wbGVXcml0ZXNMaXN0KHQgKnRlc3RpbmcuVCkgewotCWJ1ZiA6PSBuZXcoYnl0
ZXMuQnVmZmVyKQotCWluIDo9IHBiLkFkZHJlc3NCb29re1tdKnBiLlBlcnNvbnsKLQkJewotCQkJ
TmFtZTogICJKb2huIERvZSIsCi0JCQlJZDogICAgMTAxLAotCQkJRW1haWw6ICJqb2huQGV4YW1w
bGUuY29tIiwKLQkJfSwKLQkJewotCQkJTmFtZTogIkphbmUgRG9lIiwKLQkJCUlkOiAgIDEwMiwK
LQkJfSwKLQkJewotCQkJTmFtZTogICJKYWNrIERvZSIsCi0JCQlJZDogICAgMjAxLAotCQkJRW1h
aWw6ICJqYWNrQGV4YW1wbGUuY29tIiwKLQkJCVBob25lczogW10qcGIuUGVyc29uX1Bob25lTnVt
YmVyewotCQkJCXtOdW1iZXI6ICI1NTUtNTU1LTU1NTUiLCBUeXBlOiBwYi5QZXJzb25fV09SS30s
Ci0JCQl9LAotCQl9LAotCQl7Ci0JCQlOYW1lOiAgIkphY2sgQnVjayIsCi0JCQlJZDogICAgMzAx
LAotCQkJRW1haWw6ICJidWNrQGV4YW1wbGUuY29tIiwKLQkJCVBob25lczogW10qcGIuUGVyc29u
X1Bob25lTnVtYmVyewotCQkJCXtOdW1iZXI6ICI1NTUtNTU1LTAwMDAiLCBUeXBlOiBwYi5QZXJz
b25fSE9NRX0sCi0JCQkJe051bWJlcjogIjU1NS01NTUtMDAwMSIsIFR5cGU6IHBiLlBlcnNvbl9N
T0JJTEV9LAotCQkJCXtOdW1iZXI6ICI1NTUtNTU1LTAwMDIiLCBUeXBlOiBwYi5QZXJzb25fV09S
S30sCi0JCQl9LAotCQl9LAotCQl7Ci0JCQlOYW1lOiAgIkphbmV0IERvZSIsCi0JCQlJZDogICAg
MTAwMSwKLQkJCUVtYWlsOiAiamFuZXRAZXhhbXBsZS5jb20iLAotCQkJUGhvbmVzOiBbXSpwYi5Q
ZXJzb25fUGhvbmVOdW1iZXJ7Ci0JCQkJe051bWJlcjogIjU1NS03NzctMDAwMCJ9LAotCQkJCXtO
dW1iZXI6ICI1NTUtNzc3LTAwMDEiLCBUeXBlOiBwYi5QZXJzb25fSE9NRX0sCi0JCQl9LAotCQl9
LAotCX19Ci0JbGlzdFBlb3BsZShidWYsICZpbikKLQl3YW50IDo9IHN0cmluZ3MuU3BsaXQoYFBl
cnNvbiBJRDogMTAxCi0gIE5hbWU6IEpvaG4gRG9lCi0gIEUtbWFpbCBhZGRyZXNzOiBqb2huQGV4
YW1wbGUuY29tCi1QZXJzb24gSUQ6IDEwMgotICBOYW1lOiBKYW5lIERvZQotUGVyc29uIElEOiAy
MDEKLSAgTmFtZTogSmFjayBEb2UKLSAgRS1tYWlsIGFkZHJlc3M6IGphY2tAZXhhbXBsZS5jb20K
LSAgV29yayBwaG9uZSAjOiA1NTUtNTU1LTU1NTUKLVBlcnNvbiBJRDogMzAxCi0gIE5hbWU6IEph
Y2sgQnVjawotICBFLW1haWwgYWRkcmVzczogYnVja0BleGFtcGxlLmNvbQotICBIb21lIHBob25l
ICM6IDU1NS01NTUtMDAwMAotICBNb2JpbGUgcGhvbmUgIzogNTU1LTU1NS0wMDAxCi0gIFdvcmsg
cGhvbmUgIzogNTU1LTU1NS0wMDAyCi1QZXJzb24gSUQ6IDEwMDEKLSAgTmFtZTogSmFuZXQgRG9l
Ci0gIEUtbWFpbCBhZGRyZXNzOiBqYW5ldEBleGFtcGxlLmNvbQotICBNb2JpbGUgcGhvbmUgIzog
NTU1LTc3Ny0wMDAwCi0gIEhvbWUgcGhvbmUgIzogNTU1LTc3Ny0wMDAxCi1gLCAiXG4iKQotCWdv
dCA6PSBzdHJpbmdzLlNwbGl0KGJ1Zi5TdHJpbmcoKSwgIlxuIikKLQlpZiBsZW4oZ290KSAhPSBs
ZW4od2FudCkgewotCQl0LkVycm9yZigKLQkJCSJsaXN0UGVvcGxlKCVzKSA9PlxuXHQlcSBoYXMg
JWQgbGluZXMsIHdhbnQgJWQiLAotCQkJaW4uU3RyaW5nKCksCi0JCQlidWYuU3RyaW5nKCksCi0J
CQlsZW4oZ290KSwKLQkJCWxlbih3YW50KSkKLQl9Ci0JbGluZXMgOj0gbGVuKGdvdCkKLQlpZiBs
aW5lcyA+IGxlbih3YW50KSB7Ci0JCWxpbmVzID0gbGVuKHdhbnQpCi0JfQotCWZvciBpIDo9IDA7
IGkgPCBsaW5lczsgaSsrIHsKLQkJaWYgZ290W2ldICE9IHdhbnRbaV0gewotCQkJdC5FcnJvcmYo
Ci0JCQkJImxpc3RQZW9wbGUoJXMpID0+XG5cdGxpbmUgJWQgJXEsIHdhbnQgJXEiLAotCQkJCWlu
LlN0cmluZygpLAotCQkJCWksCi0JCQkJZ290W2ldLAotCQkJCXdhbnRbaV0pCi0JCX0KLQl9Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2dlbmVyYXRlX2Rlc2NyaXB0b3JfcHJvdG8uc2ggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2dlbmVyYXRlX2Rlc2Ny
aXB0b3JfcHJvdG8uc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGMxNzBjODM3ZTBh
YzM1NDlkY2E1Y2ZlZTRjZTY4NjRmYjhhMjk0ZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9nZW5lcmF0ZV9kZXNjcmlwdG9yX3Byb3RvLnNoCisrKyAvZGV2
L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0jIFJ1biB0aGlzIHNjcmlwdCB0
byByZWdlbmVyYXRlIGRlc2NyaXB0b3IucGIue2gsY2N9IGFmdGVyIHRoZSBwcm90b2NvbAotIyBj
b21waWxlciBjaGFuZ2VzLiAgU2luY2UgdGhlc2UgZmlsZXMgYXJlIGNvbXBpbGVkIGludG8gdGhl
IHByb3RvY29sIGNvbXBpbGVyCi0jIGl0c2VsZiwgdGhleSBjYW5ub3QgYmUgZ2VuZXJhdGVkIGF1
dG9tYXRpY2FsbHkgYnkgYSBtYWtlIHJ1bGUuICAibWFrZSBjaGVjayIKLSMgd2lsbCBmYWlsIGlm
IHRoZXNlIGZpbGVzIGRvIG5vdCBtYXRjaCB3aGF0IHRoZSBwcm90b2NvbCBjb21waWxlciB3b3Vs
ZAotIyBnZW5lcmF0ZS4KLSMKLSMgSElOVDogIEZsYWdzIHBhc3NlZCB0byBnZW5lcmF0ZV9kZXNj
cmlwdG9yX3Byb3RvLnNoIHdpbGwgYmUgcGFzc2VkIGRpcmVjdGx5Ci0jICAgdG8gbWFrZSB3aGVu
IGJ1aWxkaW5nIHByb3RvYy4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgcGFzc2lu
ZwotIyAgIC1qNCB0byBydW4gNCBqb2JzIHNpbXVsdGFuZW91c2x5LgotCi1pZiB0ZXN0ICEgLWUg
c3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaDsgdGhlbgotICBjYXQgPiYyIDw8IF9f
RU9GX18KLUNvdWxkIG5vdCBmaW5kIHNvdXJjZSBjb2RlLiAgTWFrZSBzdXJlIHlvdSBhcmUgcnVu
bmluZyB0aGlzIHNjcmlwdCBmcm9tIHRoZQotcm9vdCBvZiB0aGUgZGlzdHJpYnV0aW9uIHRyZWUu
Ci1fX0VPRl9fCi0gIGV4aXQgMQotZmkKLQotaWYgdGVzdCAhIC1lIHNyYy9NYWtlZmlsZTsgdGhl
bgotICBjYXQgPiYyIDw8IF9fRU9GX18KLUNvdWxkIG5vdCBmaW5kIHNyYy9NYWtlZmlsZS4gIFlv
dSBtdXN0IHJ1biAuL2NvbmZpZ3VyZSAoYW5kIHBlcmhhcHMKLS4vYXV0b2dlbi5zaCkgZmlyc3Qu
Ci1fX0VPRl9fCi0gIGV4aXQgMQotZmkKLQotY2Qgc3JjCi0KLWRlY2xhcmUgLWEgUlVOVElNRV9Q
Uk9UT19GSUxFUz0oXAotICBnb29nbGUvcHJvdG9idWYvYW55LnByb3RvIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL2FwaS5wcm90byBcCi0gIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvIFwK
LSAgZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2Vt
cHR5LnByb3RvIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucHJvdG8gXAotICBnb29n
bGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucHJvdG8gXAotICBnb29nbGUvcHJvdG9idWYvc3Ry
dWN0LnByb3RvIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90byBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi90eXBlLnByb3RvIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3Rv
KQotCi1DT1JFX1BST1RPX0lTX0NPUlJFQ1Q9MAotUFJPQ0VTU19ST1VORD0xCi1UTVA9JChta3Rl
bXAgLWQpCi1lY2hvICJVcGRhdGluZyBkZXNjcmlwdG9yIHByb3Rvcy4uLiIKLXdoaWxlIFsgJENP
UkVfUFJPVE9fSVNfQ09SUkVDVCAtbmUgMSBdCi1kbwotICBlY2hvICJSb3VuZCAkUFJPQ0VTU19S
T1VORCIKLSAgQ09SRV9QUk9UT19JU19DT1JSRUNUPTEKLQotICBtYWtlICRAIHByb3RvYwotICBp
ZiB0ZXN0ICQ/IC1uZSAwOyB0aGVuCi0gICAgZWNobyAiRmFpbGVkIHRvIGJ1aWxkIHByb3RvYy4i
Ci0gICAgZXhpdCAxCi0gIGZpCi0KLSAgLi9wcm90b2MgLS1jcHBfb3V0PWRsbGV4cG9ydF9kZWNs
PUxJQlBST1RPQlVGX0VYUE9SVDokVE1QICR7UlVOVElNRV9QUk9UT19GSUxFU1tAXX0gJiYgXAot
ICAuL3Byb3RvYyAtLWNwcF9vdXQ9ZGxsZXhwb3J0X2RlY2w9TElCUFJPVE9DX0VYUE9SVDokVE1Q
IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucHJvdG8KLQotICBmb3IgUFJPVE9fRklM
RSBpbiAke1JVTlRJTUVfUFJPVE9fRklMRVNbQF19OyBkbwotICAgIEJBU0VfTkFNRT0ke1BST1RP
X0ZJTEUlLip9Ci0gICAgZGlmZiAke0JBU0VfTkFNRX0ucGIuaCAkVE1QLyR7QkFTRV9OQU1FfS5w
Yi5oID4gL2Rldi9udWxsCi0gICAgaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgotICAgICAgQ09SRV9Q
Uk9UT19JU19DT1JSRUNUPTAKLSAgICBmaQotICAgIGRpZmYgJHtCQVNFX05BTUV9LnBiLmNjICRU
TVAvJHtCQVNFX05BTUV9LnBiLmNjID4gL2Rldi9udWxsCi0gICAgaWYgdGVzdCAkPyAtbmUgMDsg
dGhlbgotICAgICAgQ09SRV9QUk9UT19JU19DT1JSRUNUPTAKLSAgICBmaQotICBkb25lCi0KLSAg
ZGlmZiBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLnBiLmggJFRNUC9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvcGx1Z2luLnBiLmggPiAvZGV2L251bGwKLSAgaWYgdGVzdCAkPyAtbmUg
MDsgdGhlbgotICAgIENPUkVfUFJPVE9fSVNfQ09SUkVDVD0wCi0gIGZpCi0gIGRpZmYgZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wYi5jYyAkVE1QL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9wbHVnaW4ucGIuY2MgPiAvZGV2L251bGwKLSAgaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgot
ICAgIENPUkVfUFJPVE9fSVNfQ09SUkVDVD0wCi0gIGZpCi0KLSAgIyBPbmx5IG92ZXJyaWRlIHRo
ZSBvdXRwdXQgaWYgdGhlIGZpbGVzIGFyZSBkaWZmZXJlbnQgdG8gYXZvaWQgcmUtY29tcGlsYXRp
b24KLSAgIyBvZiB0aGUgcHJvdG9jLgotICBpZiBbICRDT1JFX1BST1RPX0lTX0NPUlJFQ1QgLW5l
IDEgXTsgdGhlbgotICAgIGZvciBQUk9UT19GSUxFIGluICR7UlVOVElNRV9QUk9UT19GSUxFU1tA
XX07IGRvCi0gICAgICBCQVNFX05BTUU9JHtQUk9UT19GSUxFJS4qfQotICAgICAgbXYgJFRNUC8k
e0JBU0VfTkFNRX0ucGIuaCAke0JBU0VfTkFNRX0ucGIuaAotICAgICAgbXYgJFRNUC8ke0JBU0Vf
TkFNRX0ucGIuY2MgJHtCQVNFX05BTUV9LnBiLmNjCi0gICAgZG9uZQotICAgIG12ICRUTVAvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wYi4qIGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci8KLSAgZmkKLQotICBQUk9DRVNTX1JPVU5EPSQoKFBST0NFU1NfUk9VTkQgKyAxKSkKLWRvbmUK
LWNkIC4uCi0KLWlmIHRlc3QgLXggb2JqZWN0aXZlYy9nZW5lcmF0ZV93ZWxsX2tub3duX3R5cGVz
LnNoOyB0aGVuCi0gIGVjaG8gIkdlbmVyYXRpbmcgbWVzc2FnZXMgZm9yIG9iamMuIgotICBvYmpl
Y3RpdmVjL2dlbmVyYXRlX3dlbGxfa25vd25fdHlwZXMuc2ggJEAKLWZpCi0KLWlmIHRlc3QgLXgg
Y3NoYXJwL2dlbmVyYXRlX3Byb3Rvcy5zaDsgdGhlbgotICBlY2hvICJHZW5lcmF0aW5nIG1lc3Nh
Z2VzIGZvciBDIy4iCi0gIGNzaGFycC9nZW5lcmF0ZV9wcm90b3Muc2ggJEAKLWZpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2dtb2NrLkJVSUxEIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9nbW9jay5CVUlMRApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODJhYmYyNzU0MDg2YmE2NGEzZWZmOWFiZWRjYjAzZTBlYTJmYTAzNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2dtb2NrLkJVSUxECisrKyAvZGV2L251
bGwKQEAgLTEsMjggKzAsMCBAQAotY2NfbGlicmFyeSgKLSAgICBuYW1lID0gImd0ZXN0IiwKLSAg
ICBzcmNzID0gWwotICAgICAgICAiZ21vY2stMS43LjAvZ3Rlc3Qvc3JjL2d0ZXN0LWFsbC5jYyIs
Ci0gICAgICAgICJnbW9jay0xLjcuMC9zcmMvZ21vY2stYWxsLmNjIiwKLSAgICBdLAotICAgIGhk
cnMgPSBnbG9iKFsKLSAgICAgICAgImdtb2NrLTEuNy4wLyoqLyouaCIsCi0gICAgICAgICJnbW9j
ay0xLjcuMC9ndGVzdC9zcmMvKi5jYyIsCi0gICAgICAgICJnbW9jay0xLjcuMC9zcmMvKi5jYyIs
Ci0gICAgXSksCi0gICAgaW5jbHVkZXMgPSBbCi0gICAgICAgICJnbW9jay0xLjcuMCIsCi0gICAg
ICAgICJnbW9jay0xLjcuMC9ndGVzdCIsCi0gICAgICAgICJnbW9jay0xLjcuMC9ndGVzdC9pbmNs
dWRlIiwKLSAgICAgICAgImdtb2NrLTEuNy4wL2luY2x1ZGUiLAotICAgIF0sCi0gICAgbGlua29w
dHMgPSBbIi1wdGhyZWFkIl0sCi0gICAgdmlzaWJpbGl0eSA9IFsiLy92aXNpYmlsaXR5OnB1Ymxp
YyJdLAotKQotCi1jY19saWJyYXJ5KAotICAgIG5hbWUgPSAiZ3Rlc3RfbWFpbiIsCi0gICAgc3Jj
cyA9IFsiZ21vY2stMS43LjAvc3JjL2dtb2NrX21haW4uY2MiXSwKLSAgICBsaW5rb3B0cyA9IFsi
LXB0aHJlYWQiXSwKLSAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCi0g
ICAgZGVwcyA9IFsiOmd0ZXN0Il0sCi0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvUkVBRE1FLm1kIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZh
L1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwZDlhYzZiMTE1MzRi
YjZjNGJkOGIwYTE0MTczNzU5ZGE2ZjEwZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmEvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICsw
LDAgQEAKLVByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0K
LVshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly90cmF2aXMtY2kub3JnL2dvb2dsZS9wcm90b2J1Zi5z
dmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9nb29nbGUvcHJvdG9idWYp
Ci0KLUNvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCi0KLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5z
IHRoZSBKYXZhIFByb3RvY29sIEJ1ZmZlcnMgcnVudGltZSBsaWJyYXJ5LgotCi1JbnN0YWxsYXRp
b24gLSBXaXRoIE1hdmVuCi09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSBQcm90b2Nv
bCBCdWZmZXJzIGJ1aWxkIGlzIG1hbmFnZWQgdXNpbmcgTWF2ZW4uICBJZiB5b3Ugd291bGQKLXJh
dGhlciBidWlsZCB3aXRob3V0IE1hdmVuLCBzZWUgYmVsb3cuCi0KLTEpIEluc3RhbGwgQXBhY2hl
IE1hdmVuIGlmIHlvdSBkb24ndCBoYXZlIGl0OgotCi0gICAgIGh0dHA6Ly9tYXZlbi5hcGFjaGUu
b3JnLwotCi0yKSBCdWlsZCB0aGUgQysrIGNvZGUsIG9yIG9idGFpbiBhIGJpbmFyeSBkaXN0cmli
dXRpb24gb2YgcHJvdG9jLiAgSWYKLSAgIHlvdSBpbnN0YWxsIGEgYmluYXJ5IGRpc3RyaWJ1dGlv
biwgbWFrZSBzdXJlIHRoYXQgaXQgaXMgdGhlIHNhbWUKLSAgIHZlcnNpb24gYXMgdGhpcyBwYWNr
YWdlLiAgSWYgaW4gZG91YnQsIHJ1bjoKLQotICAgICAkIHByb3RvYyAtLXZlcnNpb24KLQotICAg
WW91IHdpbGwgbmVlZCB0byBwbGFjZSB0aGUgcHJvdG9jIGV4ZWN1dGFibGUgaW4gLi4vc3JjLiAg
KElmIHlvdQotICAgYnVpbHQgaXQgeW91cnNlbGYsIGl0IHNob3VsZCBhbHJlYWR5IGJlIHRoZXJl
LikKLQotMykgUnVuIHRoZSB0ZXN0czoKLQotICAgICAkIG12biB0ZXN0Ci0KLSAgIElmIHNvbWUg
dGVzdHMgZmFpbCwgdGhpcyBsaWJyYXJ5IG1heSBub3Qgd29yayBjb3JyZWN0bHkgb24geW91cgot
ICAgc3lzdGVtLiAgQ29udGludWUgYXQgeW91ciBvd24gcmlzay4KLQotNCkgSW5zdGFsbCB0aGUg
bGlicmFyeSBpbnRvIHlvdXIgTWF2ZW4gcmVwb3NpdG9yeToKLQotICAgICAkIG12biBpbnN0YWxs
Ci0KLTUpIElmIHlvdSBkbyBub3QgdXNlIE1hdmVuIHRvIG1hbmFnZSB5b3VyIG93biBidWlsZCwg
eW91IGNhbiBidWlsZCBhCi0gICAuamFyIGZpbGUgdG8gdXNlOgotCi0gICAgICQgbXZuIHBhY2th
Z2UKLQotICAgVGhlIC5qYXIgd2lsbCBiZSBwbGFjZWQgaW4gdGhlICJ0YXJnZXQiIGRpcmVjdG9y
eS4KLQotSW5zdGFsbGF0aW9uIC0gJ0xpdGUnIFZlcnNpb24gLSBXaXRoIE1hdmVuCi09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQnVpbGRpbmcgdGhlICdsaXRl
JyB2ZXJzaW9uIG9mIHRoZSBKYXZhIFByb3RvY29sIEJ1ZmZlcnMgbGlicmFyeSBpcwotdGhlIHNh
bWUgYXMgYnVpbGRpbmcgdGhlIGZ1bGwgdmVyc2lvbiwgZXhjZXB0IHRoYXQgYWxsIGNvbW1hbmRz
IGFyZQotcnVuIHVzaW5nIHRoZSAnbGl0ZScgcHJvZmlsZS4gIChzZWUKLWh0dHA6Ly9tYXZlbi5h
cGFjaGUub3JnL2d1aWRlcy9pbnRyb2R1Y3Rpb24vaW50cm9kdWN0aW9uLXRvLXByb2ZpbGVzLmh0
bWwpCi0KLUUuZy4gdG8gaW5zdGFsbCB0aGUgbGl0ZSB2ZXJzaW9uIG9mIHRoZSBqYXIsIHlvdSB3
b3VsZCBydW46Ci0KLSAgICAkIG12biBpbnN0YWxsIC1QIGxpdGUKLQotVGhlIHJlc3VsdGluZyBh
cnRpZmFjdCBoYXMgdGhlICdsaXRlJyBjbGFzc2lmaWVyLiAgVG8gcmVmZXJlbmNlIGl0Ci1mb3Ig
ZGVwZW5kZW5jeSByZXNvbHV0aW9uLCB5b3Ugd291bGQgc3BlY2lmeSBpdCBhczoKLQotYGBgCi0g
IDxkZXBlbmRlbmN5PgotICAgIDxncm91cElkPmNvbS5nb29nbGUucHJvdG9idWY8L2dyb3VwSWQ+
Ci0gICAgPGFydGlmYWN0SWQ+cHJvdG9idWYtamF2YTwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lv
bj4ke3ZlcnNpb259PC92ZXJzaW9uPgotICAgIDxjbGFzc2lmaWVyPmxpdGU8L2NsYXNzaWZpZXI+
Ci0gIDwvZGVwZW5kZW5jeT4KLWBgYAotCi1JbnN0YWxsYXRpb24gLSBXaXRob3V0IE1hdmVuCi09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlmIHlvdSB3b3VsZCByYXRoZXIgbm90IGlu
c3RhbGwgTWF2ZW4gdG8gYnVpbGQgdGhlIGxpYnJhcnksIHlvdSBtYXkKLWZvbGxvdyB0aGVzZSBp
bnN0cnVjdGlvbnMgaW5zdGVhZC4gIE5vdGUgdGhhdCB0aGVzZSBpbnN0cnVjdGlvbnMgc2tpcAot
cnVubmluZyB1bml0IHRlc3RzLgotCi0xKSBCdWlsZCB0aGUgQysrIGNvZGUsIG9yIG9idGFpbiBh
IGJpbmFyeSBkaXN0cmlidXRpb24gb2YgcHJvdG9jLiAgSWYKLSAgIHlvdSBpbnN0YWxsIGEgYmlu
YXJ5IGRpc3RyaWJ1dGlvbiwgbWFrZSBzdXJlIHRoYXQgaXQgaXMgdGhlIHNhbWUKLSAgIHZlcnNp
b24gYXMgdGhpcyBwYWNrYWdlLiAgSWYgaW4gZG91YnQsIHJ1bjoKLQotICAgICAkIHByb3RvYyAt
LXZlcnNpb24KLQotICAgSWYgeW91IGJ1aWx0IHRoZSBDKysgY29kZSB3aXRob3V0IGluc3RhbGxp
bmcsIHRoZSBjb21waWxlciBiaW5hcnkKLSAgIHNob3VsZCBiZSBsb2NhdGVkIGluIC4uL3NyYy4K
LQotMikgSW52b2tlIHByb3RvYyB0byBidWlsZCBEZXNjcmlwdG9yUHJvdG9zLmphdmE6Ci0KLSAg
ICAgJCBwcm90b2MgLS1qYXZhX291dD1zcmMvbWFpbi9qYXZhIC1JLi4vc3JjIFwKLSAgICAgICAg
IC4uL3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bwotCi0zKSBDb21waWxlIHRo
ZSBjb2RlIGluIHNyYy9tYWluL2phdmEgdXNpbmcgd2hhdGV2ZXIgbWVhbnMgeW91IHByZWZlci4K
LQotNCkgSW5zdGFsbCB0aGUgY2xhc3NlcyB3aGVyZXZlciB5b3UgcHJlZmVyLgotCi1Vc2FnZQot
PT09PT0KLQotVGhlIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gZm9yIFByb3RvY29sIEJ1ZmZlcnMg
aXMgYXZhaWxhYmxlIHZpYSB0aGUKLXdlYiBhdDoKLQotICBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvZ2VuZXJhdGUt
c291cmNlcy1idWlsZC54bWwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9nZW5lcmF0ZS1zb3VyY2VzLWJ1aWxkLnhtbApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5NmU1ZmZmNDNjOWI1ZTBjNDg4ZDNjYjMw
ZGY4YTVlMmYxNmVlYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmEvY29yZS9nZW5lcmF0ZS1zb3VyY2VzLWJ1aWxkLnhtbAorKysgL2Rldi9udWxsCkBA
IC0xLDIwICswLDAgQEAKLTxwcm9qZWN0IG5hbWU9ImdlbmVyYXRlLXNvdXJjZXMiPgotICAgIDxl
Y2hvIG1lc3NhZ2U9IlJ1bm5pbmcgcHJvdG9jIC4uLiIvPgotICAgIDxta2RpciBkaXI9IiR7Z2Vu
ZXJhdGVkLnNvdXJjZXMuZGlyfSIvPgotICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7cHJvdG9jfSI+
Ci0gICAgICAgIDxhcmcgdmFsdWU9Ii0tamF2YV9vdXQ9JHtnZW5lcmF0ZWQuc291cmNlcy5kaXJ9
Ii8+Ci0gICAgICAgIDxhcmcgdmFsdWU9Ii0tcHJvdG9fcGF0aD0ke3Byb3RvYnVmLnNvdXJjZS5k
aXJ9Ii8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xl
L3Byb3RvYnVmL2FueS5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNv
dXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1
ZT0iJHtwcm90b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90
byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9w
cm90b2J1Zi9kdXJhdGlvbi5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVm
LnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90byIvPgotICAgICAgICA8YXJn
IHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNr
LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29v
Z2xlL3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9
IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90byIvPgot
ICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1
Zi90aW1lc3RhbXAucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3Vy
Y2UuZGlyfS9nb29nbGUvcHJvdG9idWYvdHlwZS5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVl
PSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90byIv
PgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9wbHVnaW4ucHJvdG8iLz4KLSAgICA8L2V4ZWM+Ci08L3Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvZ2VuZXJhdGUt
dGVzdC1zb3VyY2VzLWJ1aWxkLnhtbCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL2dlbmVyYXRlLXRlc3Qtc291cmNlcy1i
dWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNDE1ZGI2ODgwYTkzNGYz
NjRiMGFiNzNjZjRhMzYxMzIyNTkxOGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvZ2VuZXJhdGUtdGVzdC1zb3VyY2VzLWJ1aWxkLnhtbAor
KysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTxwcm9qZWN0IG5hbWU9ImdlbmVyYXRlLXRl
c3Qtc291cmNlcyI+Ci0gICAgPG1rZGlyIGRpcj0iJHtnZW5lcmF0ZWQudGVzdHNvdXJjZXMuZGly
fSIvPgotICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7cHJvdG9jfSI+Ci0gICAgICAgIDxhcmcgdmFs
dWU9Ii0tamF2YV9vdXQ9JHtnZW5lcmF0ZWQudGVzdHNvdXJjZXMuZGlyfSIvPgotICAgICAgICA8
YXJnIHZhbHVlPSItLXByb3RvX3BhdGg9JHtwcm90b2J1Zi5zb3VyY2UuZGlyfSIvPgotICAgICAg
ICA8YXJnIHZhbHVlPSItLXByb3RvX3BhdGg9JHt0ZXN0LnByb3RvLmRpcn0iLz4KLSAgICAgICAg
PGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvdW5pdHRl
c3QucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3VyY2UuZGlyfS9n
b29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFs
dWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9y
dF9wdWJsaWMucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3VyY2Uu
ZGlyfS9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbXNldC5wcm90byIvPgotICAgICAgICA8YXJn
IHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9t
c2V0X3dpcmVfZm9ybWF0LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdG9idWYu
c291cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X29wdGltaXplX2Zvci5wcm90byIv
PgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90
b2J1Zi91bml0dGVzdF9jdXN0b21fb3B0aW9ucy5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVl
PSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9saXRlLnBy
b3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydF9saXRlLnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFs
dWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9y
dF9wdWJsaWNfbGl0ZS5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNv
dXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9saXRlX2ltcG9ydHNfbm9ubGl0ZS5w
cm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2ds
ZS9wcm90b2J1Zi91bml0dGVzdF9lbm9ybW91c19kZXNjcmlwdG9yLnByb3RvIi8+Ci0gICAgICAg
IDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVmL3VuaXR0
ZXN0X25vX2dlbmVyaWNfc2VydmljZXMucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtw
cm90b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfd2VsbF9rbm93bl90
eXBlcy5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Rlc3QucHJvdG8uZGlyfS9jb20v
Z29vZ2xlL3Byb3RvYnVmL2xhenlfZmllbGRzX2xpdGUucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2
YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1Zi9saXRlX2VxdWFsc19h
bmRfaGFzaC5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Rlc3QucHJvdG8uZGlyfS9j
b20vZ29vZ2xlL3Byb3RvYnVmL211bHRpcGxlX2ZpbGVzX3Rlc3QucHJvdG8iLz4KLSAgICAgICAg
PGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1Zi9uZXN0ZWRf
YnVpbGRlcnNfdGVzdC5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Rlc3QucHJvdG8u
ZGlyfS9jb20vZ29vZ2xlL3Byb3RvYnVmL25lc3RlZF9leHRlbnNpb24ucHJvdG8iLz4KLSAgICAg
ICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1Zi9uZXN0
ZWRfZXh0ZW5zaW9uX2xpdGUucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnBy
b3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1Zi9ub25fbmVzdGVkX2V4dGVuc2lvbi5wcm90byIv
PgotICAgICAgICA8YXJnIHZhbHVlPSIke3Rlc3QucHJvdG8uZGlyfS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL25vbl9uZXN0ZWRfZXh0ZW5zaW9uX2xpdGUucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1
ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1Zi9vdXRlcl9jbGFzc19uYW1l
X3Rlc3QucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29t
L2dvb2dsZS9wcm90b2J1Zi9vdXRlcl9jbGFzc19uYW1lX3Rlc3QyLnByb3RvIi8+Ci0gICAgICAg
IDxhcmcgdmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2NvbS9nb29nbGUvcHJvdG9idWYvb3V0ZXJf
Y2xhc3NfbmFtZV90ZXN0My5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Rlc3QucHJv
dG8uZGlyfS9jb20vZ29vZ2xlL3Byb3RvYnVmL3Rlc3RfYmFkX2lkZW50aWZpZXJzLnByb3RvIi8+
Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2NvbS9nb29nbGUvcHJvdG9i
dWYvdGVzdF9jaGVja191dGY4LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5w
cm90by5kaXJ9L2NvbS9nb29nbGUvcHJvdG9idWYvdGVzdF9jaGVja191dGY4X3NpemUucHJvdG8i
Lz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90
b2J1Zi90ZXN0X2N1c3RvbV9vcHRpb25zLnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7
dGVzdC5wcm90by5kaXJ9L2NvbS9nb29nbGUvcHJvdG9idWYvYW55X3Rlc3QucHJvdG8iLz4KLSAg
ICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1Zi9m
aWVsZF9wcmVzZW5jZV90ZXN0LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5w
cm90by5kaXJ9L2NvbS9nb29nbGUvcHJvdG9idWYvbWFwX2Zvcl9wcm90bzJfbGl0ZV90ZXN0LnBy
b3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2NvbS9nb29nbGUv
cHJvdG9idWYvbWFwX2Zvcl9wcm90bzJfdGVzdC5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVl
PSIke3Rlc3QucHJvdG8uZGlyfS9jb20vZ29vZ2xlL3Byb3RvYnVmL21hcF90ZXN0LnByb3RvIi8+
Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2NvbS9nb29nbGUvcHJvdG9i
dWYvbWFwX2luaXRpYWxpemF0aW9uX29yZGVyX3Rlc3QucHJvdG8iLz4KLSAgICA8L2V4ZWM+Ci08
L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvcG9tLnhtbCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvamF2YS9jb3JlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBkNGM1Yzc1ZDA3YjQwNzZlOWZiYTVkMDc2YzA0N2Q1NjBmMTdiMzEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvcG9tLnhtbAorKysg
L2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80
LjAuMCIKLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0
YW5jZSIKLSAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00v
NC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0gIDxtb2Rl
bFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5j
b20uZ29vZ2xlLnByb3RvYnVmPC9ncm91cElkPgotICAgIDxhcnRpZmFjdElkPnByb3RvYnVmLXBh
cmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4zLjAuMC1iZXRhLTM8L3ZlcnNpb24+Ci0g
IDwvcGFyZW50PgotCi0gIDxhcnRpZmFjdElkPnByb3RvYnVmLWphdmE8L2FydGlmYWN0SWQ+Ci0g
IDxwYWNrYWdpbmc+YnVuZGxlPC9wYWNrYWdpbmc+Ci0KLSAgPG5hbWU+UHJvdG9jb2wgQnVmZmVy
cyBbQ29yZV08L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBDb3JlIFByb3RvY29sIEJ1ZmZl
cnMgbGlicmFyeS4gUHJvdG9jb2wgQnVmZmVycyBhcmUgYSB3YXkgb2YgZW5jb2Rpbmcgc3RydWN0
dXJlZCBkYXRhIGluIGFuCi0gICAgZWZmaWNpZW50IHlldCBleHRlbnNpYmxlIGZvcm1hdC4KLSAg
PC9kZXNjcmlwdGlvbj4KLQotICA8ZGVwZW5kZW5jaWVzPgotICAgIDxkZXBlbmRlbmN5PgotICAg
ICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0
aWZhY3RJZD4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8Z3Jv
dXBJZD5vcmcuZWFzeW1vY2s8L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5lYXN5bW9jazwv
YXJ0aWZhY3RJZD4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVuY3k+Ci0gICAgICA8
Z3JvdXBJZD5vcmcuZWFzeW1vY2s8L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5lYXN5bW9j
a2NsYXNzZXh0ZW5zaW9uPC9hcnRpZmFjdElkPgotICAgIDwvZGVwZW5kZW5jeT4KLSAgPC9kZXBl
bmRlbmNpZXM+Ci0KLSAgPGJ1aWxkPgotICAgIDwhLS0gSW5jbHVkZSBjb3JlIHByb3RvcyBpbiB0
aGUgYnVuZGxlIGFzIHJlc291cmNlcyAtLT4KLSAgICA8cmVzb3VyY2VzPgotICAgICAgPHJlc291
cmNlPgotICAgICAgICA8ZGlyZWN0b3J5PiR7cHJvdG9idWYuc291cmNlLmRpcn08L2RpcmVjdG9y
eT4KLSAgICAgICAgPGluY2x1ZGVzPgotICAgICAgICAgIDxpbmNsdWRlPmdvb2dsZS9wcm90b2J1
Zi9hbnkucHJvdG88L2luY2x1ZGU+Ci0gICAgICAgICAgPGluY2x1ZGU+Z29vZ2xlL3Byb3RvYnVm
L2FwaS5wcm90bzwvaW5jbHVkZT4KLSAgICAgICAgICA8aW5jbHVkZT5nb29nbGUvcHJvdG9idWYv
ZGVzY3JpcHRvci5wcm90bzwvaW5jbHVkZT4KLSAgICAgICAgICA8aW5jbHVkZT5nb29nbGUvcHJv
dG9idWYvZHVyYXRpb24ucHJvdG88L2luY2x1ZGU+Ci0gICAgICAgICAgPGluY2x1ZGU+Z29vZ2xl
L3Byb3RvYnVmL2VtcHR5LnByb3RvPC9pbmNsdWRlPgotICAgICAgICAgIDxpbmNsdWRlPmdvb2ds
ZS9wcm90b2J1Zi9maWVsZF9tYXNrLnByb3RvPC9pbmNsdWRlPgotICAgICAgICAgIDxpbmNsdWRl
Pmdvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wcm90bzwvaW5jbHVkZT4KLSAgICAgICAg
ICA8aW5jbHVkZT5nb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvPC9pbmNsdWRlPgotICAgICAg
ICAgIDxpbmNsdWRlPmdvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG88L2luY2x1ZGU+Ci0g
ICAgICAgICAgPGluY2x1ZGU+Z29vZ2xlL3Byb3RvYnVmL3R5cGUucHJvdG88L2luY2x1ZGU+Ci0g
ICAgICAgICAgPGluY2x1ZGU+Z29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvPC9pbmNsdWRl
PgotICAgICAgICAgIDxpbmNsdWRlPmdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucHJv
dG88L2luY2x1ZGU+Ci0gICAgICAgIDwvaW5jbHVkZXM+Ci0gICAgICA8L3Jlc291cmNlPgotICAg
IDwvcmVzb3VyY2VzPgotCi0gICAgPHBsdWdpbnM+Ci0gICAgICA8IS0tIFVzZSBBbnRydW4gcGx1
Z2luIHRvIGdlbmVyYXRlIHNvdXJjZXMgd2l0aCBwcm90b2MgLS0+Ci0gICAgICA8cGx1Z2luPgot
ICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hbnRydW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAg
ICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICA8IS0tIEdlbmVyYXRlIGNvcmUgcHJvdG9zIC0t
PgotICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICA8aWQ+Z2VuZXJhdGUtc291cmNl
czwvaWQ+Ci0gICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+Ci0gICAg
ICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgPHRhcmdldD4KLSAgICAgICAg
ICAgICAgICA8YW50IGFudGZpbGU9ImdlbmVyYXRlLXNvdXJjZXMtYnVpbGQueG1sIi8+Ci0gICAg
ICAgICAgICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAg
ICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+Ci0gICAgICAgICAg
ICA8L2dvYWxzPgotICAgICAgICAgIDwvZXhlY3V0aW9uPgotCi0gICAgICAgICAgPCEtLSBHZW5l
cmF0ZSB0aGUgdGVzdCBwcm90b3MgLS0+Ci0gICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAg
ICAgIDxpZD5nZW5lcmF0ZS10ZXN0LXNvdXJjZXM8L2lkPgotICAgICAgICAgICAgPHBoYXNlPmdl
bmVyYXRlLXRlc3Qtc291cmNlczwvcGhhc2U+Ci0gICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4K
LSAgICAgICAgICAgICAgPHRhcmdldD4KLSAgICAgICAgICAgICAgICA8YW50IGFudGZpbGU9Imdl
bmVyYXRlLXRlc3Qtc291cmNlcy1idWlsZC54bWwiLz4KLSAgICAgICAgICAgICAgPC90YXJnZXQ+
Ci0gICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8Z29hbHM+Ci0gICAg
ICAgICAgICAgIDxnb2FsPnJ1bjwvZ29hbD4KLSAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAg
ICAgPC9leGVjdXRpb24+Ci0gICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgIDwvcGx1Z2luPgot
Ci0gICAgICA8IS0tIEFkZCB0aGUgZ2VuZXJhdGVkIHNvdXJjZXMgdG8gdGhlIGJ1aWxkIC0tPgot
ICAgICAgPHBsdWdpbj4KLSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2lu
PC9hcnRpZmFjdElkPgotICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICA8Z2VuZXJh
dGVkU291cmNlc0RpcmVjdG9yeT4ke2dlbmVyYXRlZC5zb3VyY2VzLmRpcn08L2dlbmVyYXRlZFNv
dXJjZXNEaXJlY3Rvcnk+Ci0gICAgICAgICAgPGdlbmVyYXRlZFRlc3RTb3VyY2VzRGlyZWN0b3J5
PiR7Z2VuZXJhdGVkLnRlc3Rzb3VyY2VzLmRpcn08L2dlbmVyYXRlZFRlc3RTb3VyY2VzRGlyZWN0
b3J5PgotICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICA8L3BsdWdpbj4KLQotICAgICAg
PCEtLSBPU0dJIGJ1bmRsZSBjb25maWd1cmF0aW9uIC0tPgotICAgICAgPHBsdWdpbj4KLSAgICAg
ICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0
SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPGV4dGVuc2lvbnM+
dHJ1ZTwvZXh0ZW5zaW9ucz4KLSAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgPGlu
c3RydWN0aW9ucz4KLSAgICAgICAgICAgIDxCdW5kbGUtRG9jVVJMPmh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvPC9CdW5kbGUtRG9jVVJMPgotICAgICAgICAg
ICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+Y29tLmdvb2dsZS5wcm90b2J1ZjwvQnVuZGxlLVN5bWJv
bGljTmFtZT4KLSAgICAgICAgICAgIDxFeHBvcnQtUGFja2FnZT5jb20uZ29vZ2xlLnByb3RvYnVm
O3ZlcnNpb249JHtwcm9qZWN0LnZlcnNpb259PC9FeHBvcnQtUGFja2FnZT4KLSAgICAgICAgICA8
L2luc3RydWN0aW9ucz4KLSAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgPC9wbHVnaW4+
Ci0gICAgPC9wbHVnaW5zPgotICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2ph
dmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQWJzdHJhY3RNZXNzYWdl
LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQWJzdHJh
Y3RNZXNzYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYzBkNTc5N2Qz
NTA3YzJlYjQ3ODcyYjllM2YzNDI3M2FiYmJjOWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL0Fic3RyYWN0TWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUzICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29n
bGUucHJvdG9idWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkVu
dW1WYWx1ZURlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9y
cy5PbmVvZkRlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5F
bnVtTGl0ZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5J
bnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5D
b2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwu
SXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsK
LQotLyoqCi0gKiBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBNZXNzYWdl
fSBpbnRlcmZhY2Ugd2hpY2ggaW1wbGVtZW50cwotICogYXMgbWFueSBtZXRob2RzIG9mIHRoYXQg
aW50ZXJmYWNlIGFzIHBvc3NpYmxlIGluIHRlcm1zIG9mIG90aGVyIG1ldGhvZHMuCi0gKgotICog
QGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqLwotcHVibGljIGFic3Ry
YWN0IGNsYXNzIEFic3RyYWN0TWVzc2FnZQotICAgIC8vIFRPRE8oZHdlaXMpOiBVcGRhdGUgR2Vu
ZXJhdGVkTWVzc2FnZSB0byBwYXJhbWV0ZXJpemUgd2l0aCBNZXNzYWdlVHlwZSBhbmQgQnVpbGRl
clR5cGUuCi0gICAgZXh0ZW5kcyBBYnN0cmFjdE1lc3NhZ2VMaXRlCi0gICAgaW1wbGVtZW50cyBN
ZXNzYWdlIHsKLSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBpc0luaXRpYWxpemVk
KCkgewotICAgIHJldHVybiBNZXNzYWdlUmVmbGVjdGlvbi5pc0luaXRpYWxpemVkKHRoaXMpOwot
ICB9Ci0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIExpc3Q8U3RyaW5nPiBmaW5kSW5pdGlhbGl6
YXRpb25FcnJvcnMoKSB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VSZWZsZWN0aW9uLmZpbmRNaXNzaW5n
RmllbGRzKHRoaXMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBTdHJpbmcgZ2V0SW5p
dGlhbGl6YXRpb25FcnJvclN0cmluZygpIHsKLSAgICByZXR1cm4gTWVzc2FnZVJlZmxlY3Rpb24u
ZGVsaW1pdFdpdGhDb21tYXMoZmluZEluaXRpYWxpemF0aW9uRXJyb3JzKCkpOwotICB9Ci0KLSAg
LyoqIFRPRE8oamllbHVvKTogQ2xlYXIgaXQgd2hlbiBhbGwgc3ViY2xhc3NlcyBoYXZlIGltcGxl
bWVudGVkIHRoaXMgbWV0aG9kLiAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaGFz
T25lb2YoT25lb2ZEZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uKCJoYXNPbmVvZigpIGlzIG5vdCBpbXBsZW1lbnRlZC4iKTsKLSAg
fQotCi0gIC8qKiBUT0RPKGppZWx1byk6IENsZWFyIGl0IHdoZW4gYWxsIHN1YmNsYXNzZXMgaGF2
ZSBpbXBsZW1lbnRlZCB0aGlzIG1ldGhvZC4gKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBGaWVs
ZERlc2NyaXB0b3IgZ2V0T25lb2ZGaWVsZERlc2NyaXB0b3IoT25lb2ZEZXNjcmlwdG9yIG9uZW9m
KSB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAg
ICAiZ2V0T25lb2ZGaWVsZERlc2NyaXB0b3IoKSBpcyBub3QgaW1wbGVtZW50ZWQuIik7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFsIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICBy
ZXR1cm4gVGV4dEZvcm1hdC5wcmludFRvU3RyaW5nKHRoaXMpOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIHdyaXRlVG8oZmluYWwgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgIE1lc3NhZ2VSZWZsZWN0aW9uLndyaXRlTWVzc2FnZVRv
KHRoaXMsIGdldEFsbEZpZWxkcygpLCBvdXRwdXQsIGZhbHNlKTsKLSAgfQotCi0gIHByb3RlY3Rl
ZCBpbnQgbWVtb2l6ZWRTaXplID0gLTE7Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgZ2V0
U2VyaWFsaXplZFNpemUoKSB7Ci0gICAgaW50IHNpemUgPSBtZW1vaXplZFNpemU7Ci0gICAgaWYg
KHNpemUgIT0gLTEpIHsKLSAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIG1lbW9pemVk
U2l6ZSA9IE1lc3NhZ2VSZWZsZWN0aW9uLmdldFNlcmlhbGl6ZWRTaXplKHRoaXMsIGdldEFsbEZp
ZWxkcygpKTsKLSAgICByZXR1cm4gbWVtb2l6ZWRTaXplOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBPYmplY3Qgb3RoZXIpIHsKLSAgICBpZiAob3Ro
ZXIgPT0gdGhpcykgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICghKG90aGVy
IGluc3RhbmNlb2YgTWVzc2FnZSkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
ZmluYWwgTWVzc2FnZSBvdGhlck1lc3NhZ2UgPSAoTWVzc2FnZSkgb3RoZXI7Ci0gICAgaWYgKGdl
dERlc2NyaXB0b3JGb3JUeXBlKCkgIT0gb3RoZXJNZXNzYWdlLmdldERlc2NyaXB0b3JGb3JUeXBl
KCkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbXBhcmVGaWVs
ZHMoZ2V0QWxsRmllbGRzKCksIG90aGVyTWVzc2FnZS5nZXRBbGxGaWVsZHMoKSkgJiYKLSAgICAg
ICAgZ2V0VW5rbm93bkZpZWxkcygpLmVxdWFscyhvdGhlck1lc3NhZ2UuZ2V0VW5rbm93bkZpZWxk
cygpKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAg
IGludCBoYXNoID0gbWVtb2l6ZWRIYXNoQ29kZTsKLSAgICBpZiAoaGFzaCA9PSAwKSB7Ci0gICAg
ICBoYXNoID0gNDE7Ci0gICAgICBoYXNoID0gKDE5ICogaGFzaCkgKyBnZXREZXNjcmlwdG9yRm9y
VHlwZSgpLmhhc2hDb2RlKCk7Ci0gICAgICBoYXNoID0gaGFzaEZpZWxkcyhoYXNoLCBnZXRBbGxG
aWVsZHMoKSk7Ci0gICAgICBoYXNoID0gKDI5ICogaGFzaCkgKyBnZXRVbmtub3duRmllbGRzKCku
aGFzaENvZGUoKTsKLSAgICAgIG1lbW9pemVkSGFzaENvZGUgPSBoYXNoOwotICAgIH0KLSAgICBy
ZXR1cm4gaGFzaDsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgQnl0ZVN0cmluZyB0b0J5dGVT
dHJpbmcoT2JqZWN0IHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgYnl0ZVtdKSB7
Ci0gICAgICByZXR1cm4gQnl0ZVN0cmluZy5jb3B5RnJvbSgoYnl0ZVtdKSB2YWx1ZSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHJldHVybiAoQnl0ZVN0cmluZykgdmFsdWU7Ci0gICAgfQotICB9Ci0g
Ci0gIC8qKgotICAgKiBDb21wYXJlcyB0d28gYnl0ZXMgZmllbGRzLiBUaGUgcGFyYW1ldGVycyBt
dXN0IGJlIGVpdGhlciBhIGJ5dGUgYXJyYXkgb3IgYQotICAgKiBCeXRlU3RyaW5nIG9iamVjdC4g
VGhleSBjYW4gYmUgb2YgZGlmZmVyZW50IHR5cGUgdGhvdWdoLgotICAgKi8KLSAgcHJpdmF0ZSBz
dGF0aWMgYm9vbGVhbiBjb21wYXJlQnl0ZXMoT2JqZWN0IGEsIE9iamVjdCBiKSB7Ci0gICAgaWYg
KGEgaW5zdGFuY2VvZiBieXRlW10gJiYgYiBpbnN0YW5jZW9mIGJ5dGVbXSkgewotICAgICAgcmV0
dXJuIEFycmF5cy5lcXVhbHMoKGJ5dGVbXSlhLCAoYnl0ZVtdKWIpOwotICAgIH0KLSAgICByZXR1
cm4gdG9CeXRlU3RyaW5nKGEpLmVxdWFscyh0b0J5dGVTdHJpbmcoYikpOwotICB9Ci0gIAotICAv
KioKLSAgICogQ29udmVydHMgYSBsaXN0IG9mIE1hcEVudHJ5IG1lc3NhZ2VzIGludG8gYSBNYXAg
dXNlZCBmb3IgZXF1YWxzKCkgYW5kCi0gICAqIGhhc2hDb2RlKCkuCi0gICAqLwotICBAU3VwcHJl
c3NXYXJuaW5ncyh7InJhd3R5cGVzIiwgInVuY2hlY2tlZCJ9KQotICBwcml2YXRlIHN0YXRpYyBN
YXAgY29udmVydE1hcEVudHJ5TGlzdFRvTWFwKExpc3QgbGlzdCkgewotICAgIGlmIChsaXN0Lmlz
RW1wdHkoKSkgewotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7Ci0gICAgfQot
ICAgIE1hcCByZXN1bHQgPSBuZXcgSGFzaE1hcCgpOwotICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0g
bGlzdC5pdGVyYXRvcigpOwotICAgIE1lc3NhZ2UgZW50cnkgPSAoTWVzc2FnZSkgaXRlcmF0b3Iu
bmV4dCgpOwotICAgIERlc2NyaXB0b3JzLkRlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGVudHJ5Lmdl
dERlc2NyaXB0b3JGb3JUeXBlKCk7Ci0gICAgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGtl
eSA9IGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgICBEZXNjcmlwdG9ycy5G
aWVsZERlc2NyaXB0b3IgdmFsdWUgPSBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgidmFsdWUi
KTsKLSAgICBPYmplY3QgZmllbGRWYWx1ZSA9IGVudHJ5LmdldEZpZWxkKHZhbHVlKTsKLSAgICBp
ZiAoZmllbGRWYWx1ZSBpbnN0YW5jZW9mIEVudW1WYWx1ZURlc2NyaXB0b3IpIHsKLSAgICAgIGZp
ZWxkVmFsdWUgPSAoKEVudW1WYWx1ZURlc2NyaXB0b3IpIGZpZWxkVmFsdWUpLmdldE51bWJlcigp
OwotICAgIH0KLSAgICByZXN1bHQucHV0KGVudHJ5LmdldEZpZWxkKGtleSksIGZpZWxkVmFsdWUp
OwotICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgICAgIGVudHJ5ID0gKE1lc3Nh
Z2UpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGZpZWxkVmFsdWUgPSBlbnRyeS5nZXRGaWVsZCh2
YWx1ZSk7Ci0gICAgICBpZiAoZmllbGRWYWx1ZSBpbnN0YW5jZW9mIEVudW1WYWx1ZURlc2NyaXB0
b3IpIHsKLSAgICAgICAgZmllbGRWYWx1ZSA9ICgoRW51bVZhbHVlRGVzY3JpcHRvcikgZmllbGRW
YWx1ZSkuZ2V0TnVtYmVyKCk7Ci0gICAgICB9Ci0gICAgICByZXN1bHQucHV0KGVudHJ5LmdldEZp
ZWxkKGtleSksIGZpZWxkVmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0g
IAotICAvKioKLSAgICogQ29tcGFyZXMgdHdvIG1hcCBmaWVsZHMuIFRoZSBwYXJhbWV0ZXJzIG11
c3QgYmUgYSBsaXN0IG9mIE1hcEVudHJ5Ci0gICAqIG1lc3NhZ2VzLgotICAgKi8KLSAgQFN1cHBy
ZXNzV2FybmluZ3MoeyJyYXd0eXBlcyIsICJ1bmNoZWNrZWQifSkKLSAgcHJpdmF0ZSBzdGF0aWMg
Ym9vbGVhbiBjb21wYXJlTWFwRmllbGQoT2JqZWN0IGEsIE9iamVjdCBiKSB7Ci0gICAgTWFwIG1h
ID0gY29udmVydE1hcEVudHJ5TGlzdFRvTWFwKChMaXN0KSBhKTsKLSAgICBNYXAgbWIgPSBjb252
ZXJ0TWFwRW50cnlMaXN0VG9NYXAoKExpc3QpIGIpOwotICAgIHJldHVybiBNYXBGaWVsZExpdGUu
ZXF1YWxzKG1hLCBtYik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb21wYXJlcyB0d28gc2V0IG9m
IGZpZWxkcy4KLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIEFi
c3RyYWN0TWVzc2FnZSNlcXVhbHMoT2JqZWN0KX0KLSAgICogYW5kIHtAbGluayBBYnN0cmFjdE11
dGFibGVNZXNzYWdlI2VxdWFscyhPYmplY3QpfS4gSXQgdGFrZXMgc3BlY2lhbCBjYXJlCi0gICAq
IG9mIGJ5dGVzIGZpZWxkcyBiZWNhdXNlIGltbXV0YWJsZSBtZXNzYWdlcyBhbmQgbXV0YWJsZSBt
ZXNzYWdlcyB1c2UKLSAgICogZGlmZmVyZW50IEphdmEgdHlwZSB0byByZXByZW5zZW50IGEgYnl0
ZXMgZmllbGQgYW5kIHRoaXMgbWV0aG9kIHNob3VsZCBiZQotICAgKiBhYmxlIHRvIGNvbXBhcmUg
aW1tdXRhYmxlIG1lc3NhZ2VzLCBtdXRhYmxlIG1lc3NhZ2VzIGFuZCBhbHNvIGFuIGltbXV0YWJs
ZQotICAgKiBtZXNzYWdlIHRvIGEgbXV0YWJsZSBtZXNzYWdlLgotICAgKi8KLSAgc3RhdGljIGJv
b2xlYW4gY29tcGFyZUZpZWxkcyhNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGEsCi0gICAg
ICBNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGIpIHsKLSAgICBpZiAoYS5zaXplKCkgIT0g
Yi5zaXplKCkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZm9yIChGaWVsZERl
c2NyaXB0b3IgZGVzY3JpcHRvciA6IGEua2V5U2V0KCkpIHsKLSAgICAgIGlmICghYi5jb250YWlu
c0tleShkZXNjcmlwdG9yKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAg
ICBPYmplY3QgdmFsdWUxID0gYS5nZXQoZGVzY3JpcHRvcik7Ci0gICAgICBPYmplY3QgdmFsdWUy
ID0gYi5nZXQoZGVzY3JpcHRvcik7Ci0gICAgICBpZiAoZGVzY3JpcHRvci5nZXRUeXBlKCkgPT0g
RmllbGREZXNjcmlwdG9yLlR5cGUuQllURVMpIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNS
ZXBlYXRlZCgpKSB7Ci0gICAgICAgICAgTGlzdCBsaXN0MSA9IChMaXN0KSB2YWx1ZTE7Ci0gICAg
ICAgICAgTGlzdCBsaXN0MiA9IChMaXN0KSB2YWx1ZTI7Ci0gICAgICAgICAgaWYgKGxpc3QxLnNp
emUoKSAhPSBsaXN0Mi5zaXplKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0MS5zaXplKCk7IGkrKykg
ewotICAgICAgICAgICAgaWYgKCFjb21wYXJlQnl0ZXMobGlzdDEuZ2V0KGkpLCBsaXN0Mi5nZXQo
aSkpKSB7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gQ29tcGFyZXMgYSBzaW5ndWxh
ciBieXRlcyBmaWVsZC4KLSAgICAgICAgICBpZiAoIWNvbXBhcmVCeXRlcyh2YWx1ZTEsIHZhbHVl
MikpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5pc01hcEZpZWxkKCkpIHsKLSAgICAgICAgaWYg
KCFjb21wYXJlTWFwRmllbGQodmFsdWUxLCB2YWx1ZTIpKSB7Ci0gICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBDb21wYXJlIG5vbi1i
eXRlcyBmaWVsZHMuCi0gICAgICAgIGlmICghdmFsdWUxLmVxdWFscyh2YWx1ZTIpKSB7Ci0gICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotICB9Ci0gIAotICAvKioKLSAgICogQ2FsY3VsYXRlcyB0aGUgaGFzaCBjb2RlIG9m
IGEgbWFwIGZpZWxkLiB7QGNvZGUgdmFsdWV9IG11c3QgYmUgYSBsaXN0IG9mCi0gICAqIE1hcEVu
dHJ5IG1lc3NhZ2VzLgotICAgKi8KLSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0g
IHByaXZhdGUgc3RhdGljIGludCBoYXNoTWFwRmllbGQoT2JqZWN0IHZhbHVlKSB7Ci0gICAgcmV0
dXJuIE1hcEZpZWxkTGl0ZS5jYWxjdWxhdGVIYXNoQ29kZUZvck1hcChjb252ZXJ0TWFwRW50cnlM
aXN0VG9NYXAoKExpc3QpIHZhbHVlKSk7Ci0gIH0KLQotICAvKiogR2V0IGEgaGFzaCBjb2RlIGZv
ciBnaXZlbiBmaWVsZHMgYW5kIHZhbHVlcywgdXNpbmcgdGhlIGdpdmVuIHNlZWQuICovCi0gIEBT
dXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwcm90ZWN0ZWQgc3RhdGljIGludCBoYXNo
RmllbGRzKGludCBoYXNoLCBNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IG1hcCkgewotICAg
IGZvciAoTWFwLkVudHJ5PEZpZWxkRGVzY3JpcHRvciwgT2JqZWN0PiBlbnRyeSA6IG1hcC5lbnRy
eVNldCgpKSB7Ci0gICAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBlbnRyeS5nZXRLZXkoKTsK
LSAgICAgIE9iamVjdCB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICBoYXNoID0gKDM3
ICogaGFzaCkgKyBmaWVsZC5nZXROdW1iZXIoKTsKLSAgICAgIGlmIChmaWVsZC5pc01hcEZpZWxk
KCkpIHsKLSAgICAgICAgaGFzaCA9ICg1MyAqIGhhc2gpICsgaGFzaE1hcEZpZWxkKHZhbHVlKTsK
LSAgICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0VHlwZSgpICE9IEZpZWxkRGVzY3JpcHRvci5UeXBl
LkVOVU0pewotICAgICAgICBoYXNoID0gKDUzICogaGFzaCkgKyB2YWx1ZS5oYXNoQ29kZSgpOwot
ICAgICAgfSBlbHNlIGlmIChmaWVsZC5pc1JlcGVhdGVkKCkpIHsKLSAgICAgICAgTGlzdDw/IGV4
dGVuZHMgRW51bUxpdGU+IGxpc3QgPSAoTGlzdDw/IGV4dGVuZHMgRW51bUxpdGU+KSB2YWx1ZTsK
LSAgICAgICAgaGFzaCA9ICg1MyAqIGhhc2gpICsgSW50ZXJuYWwuaGFzaEVudW1MaXN0KGxpc3Qp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaGFzaCA9ICg1MyAqIGhhc2gpICsgSW50ZXJuYWwu
aGFzaEVudW0oKEVudW1MaXRlKSB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBo
YXNoOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhY2thZ2UgcHJpdmF0ZSBoZWxwZXIgbWV0aG9kIGZv
ciBBYnN0cmFjdFBhcnNlciB0byBjcmVhdGUKLSAgICogVW5pbml0aWFsaXplZE1lc3NhZ2VFeGNl
cHRpb24gd2l0aCBtaXNzaW5nIGZpZWxkIGluZm9ybWF0aW9uLgotICAgKi8KLSAgQE92ZXJyaWRl
Ci0gIFVuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uIG5ld1VuaW5pdGlhbGl6ZWRNZXNzYWdl
RXhjZXB0aW9uKCkgewotICAgIHJldHVybiBCdWlsZGVyLm5ld1VuaW5pdGlhbGl6ZWRNZXNzYWdl
RXhjZXB0aW9uKHRoaXMpOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAvKioKLSAgICogQSBw
YXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgTWVzc2FnZS5CdWlsZGVyfSBpbnRl
cmZhY2Ugd2hpY2gKLSAgICogaW1wbGVtZW50cyBhcyBtYW55IG1ldGhvZHMgb2YgdGhhdCBpbnRl
cmZhY2UgYXMgcG9zc2libGUgaW4gdGVybXMgb2YKLSAgICogb3RoZXIgbWV0aG9kcy4KLSAgICov
Ci0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwdWJsaWMgc3RhdGljIGFic3Ry
YWN0IGNsYXNzIEJ1aWxkZXI8QnVpbGRlclR5cGUgZXh0ZW5kcyBCdWlsZGVyPEJ1aWxkZXJUeXBl
Pj4KLSAgICAgIGV4dGVuZHMgQWJzdHJhY3RNZXNzYWdlTGl0ZS5CdWlsZGVyCi0gICAgICBpbXBs
ZW1lbnRzIE1lc3NhZ2UuQnVpbGRlciB7Ci0gICAgLy8gVGhlIGNvbXBpbGVyIHByb2R1Y2VzIGFu
IGVycm9yIGlmIHRoaXMgaXMgbm90IGRlY2xhcmVkIGV4cGxpY2l0bHkuCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIGFic3RyYWN0IEJ1aWxkZXJUeXBlIGNsb25lKCk7Ci0KLSAgICAvKiogVE9E
TyhqaWVsdW8pOiBDbGVhciBpdCB3aGVuIGFsbCBzdWJjbGFzc2VzIGhhdmUgaW1wbGVtZW50ZWQg
dGhpcyBtZXRob2QuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaGFzT25l
b2YoT25lb2ZEZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRP
cGVyYXRpb25FeGNlcHRpb24oImhhc09uZW9mKCkgaXMgbm90IGltcGxlbWVudGVkLiIpOwotICAg
IH0KLQotICAgIC8qKiBUT0RPKGppZWx1byk6IENsZWFyIGl0IHdoZW4gYWxsIHN1YmNsYXNzZXMg
aGF2ZSBpbXBsZW1lbnRlZCB0aGlzIG1ldGhvZC4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgRmllbGREZXNjcmlwdG9yIGdldE9uZW9mRmllbGREZXNjcmlwdG9yKE9uZW9mRGVzY3JpcHRv
ciBvbmVvZikgewotICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u
KAotICAgICAgICAgICJnZXRPbmVvZkZpZWxkRGVzY3JpcHRvcigpIGlzIG5vdCBpbXBsZW1lbnRl
ZC4iKTsKLSAgICB9Ci0KLSAgICAvKiogVE9ETyhqaWVsdW8pOiBDbGVhciBpdCB3aGVuIGFsbCBz
dWJjbGFzc2VzIGhhdmUgaW1wbGVtZW50ZWQgdGhpcyBtZXRob2QuICovCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIEJ1aWxkZXJUeXBlIGNsZWFyT25lb2YoT25lb2ZEZXNjcmlwdG9yIG9uZW9m
KSB7Ci0gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oImNsZWFy
T25lb2YoKSBpcyBub3QgaW1wbGVtZW50ZWQuIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIEJ1aWxkZXJUeXBlIGNsZWFyKCkgewotICAgICAgZm9yIChmaW5hbCBNYXAuRW50
cnk8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGVudHJ5IDoKLSAgICAgICAgICAgZ2V0QWxsRmll
bGRzKCkuZW50cnlTZXQoKSkgewotICAgICAgICBjbGVhckZpZWxkKGVudHJ5LmdldEtleSgpKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiAoQnVpbGRlclR5cGUpIHRoaXM7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8U3RyaW5nPiBmaW5kSW5pdGlhbGl6YXRpb25FcnJv
cnMoKSB7Ci0gICAgICByZXR1cm4gTWVzc2FnZVJlZmxlY3Rpb24uZmluZE1pc3NpbmdGaWVsZHMo
dGhpcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRJbml0
aWFsaXphdGlvbkVycm9yU3RyaW5nKCkgewotICAgICAgcmV0dXJuIE1lc3NhZ2VSZWZsZWN0aW9u
LmRlbGltaXRXaXRoQ29tbWFzKGZpbmRJbml0aWFsaXphdGlvbkVycm9ycygpKTsKLSAgICB9Ci0g
ICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIEJ1aWxkZXJUeXBlIGludGVybmFsTWVy
Z2VGcm9tKEFic3RyYWN0TWVzc2FnZUxpdGUgb3RoZXIpIHsKLSAgICAgIHJldHVybiBtZXJnZUZy
b20oKE1lc3NhZ2UpIG90aGVyKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
QnVpbGRlclR5cGUgbWVyZ2VGcm9tKGZpbmFsIE1lc3NhZ2Ugb3RoZXIpIHsKLSAgICAgIGlmIChv
dGhlci5nZXREZXNjcmlwdG9yRm9yVHlwZSgpICE9IGdldERlc2NyaXB0b3JGb3JUeXBlKCkpIHsK
LSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAi
bWVyZ2VGcm9tKE1lc3NhZ2UpIGNhbiBvbmx5IG1lcmdlIG1lc3NhZ2VzIG9mIHRoZSBzYW1lIHR5
cGUuIik7Ci0gICAgICB9Ci0KLSAgICAgIC8vIE5vdGU6ICBXZSBkb24ndCBhdHRlbXB0IHRvIHZl
cmlmeSB0aGF0IG90aGVyJ3MgZmllbGRzIGhhdmUgdmFsaWQKLSAgICAgIC8vICAgdHlwZXMuICBE
b2luZyBzbyB3b3VsZCBiZSBhIGxvc2luZyBiYXR0bGUuICBXZSdkIGhhdmUgdG8gdmVyaWZ5Ci0g
ICAgICAvLyAgIGFsbCBzdWItbWVzc2FnZXMgYXMgd2VsbCwgYW5kIHdlJ2QgaGF2ZSB0byBtYWtl
IGNvcGllcyBvZiBhbGwgb2YKLSAgICAgIC8vICAgdGhlbSB0byBpbnN1cmUgdGhhdCB0aGV5IGRv
bid0IGNoYW5nZSBhZnRlciB2ZXJpZmljYXRpb24gKHNpbmNlCi0gICAgICAvLyAgIHRoZSBNZXNz
YWdlIGludGVyZmFjZSBpdHNlbGYgY2Fubm90IGVuZm9yY2UgaW1tdXRhYmlsaXR5IG9mCi0gICAg
ICAvLyAgIGltcGxlbWVudGF0aW9ucykuCi0gICAgICAvLyBUT0RPKGtlbnRvbik6ICBQcm92aWRl
IGEgZnVuY3Rpb24gc29tZXdoZXJlIGNhbGxlZCBtYWtlRGVlcENvcHkoKQotICAgICAgLy8gICB3
aGljaCBhbGxvd3MgcGVvcGxlIHRvIG1ha2Ugc2VjdXJlIGRlZXAgY29waWVzIG9mIG1lc3NhZ2Vz
LgotCi0gICAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTxGaWVsZERlc2NyaXB0b3IsIE9iamVjdD4g
ZW50cnkgOgotICAgICAgICAgICBvdGhlci5nZXRBbGxGaWVsZHMoKS5lbnRyeVNldCgpKSB7Ci0g
ICAgICAgIGZpbmFsIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA9IGVudHJ5LmdldEtleSgpOwotICAg
ICAgICBpZiAoZmllbGQuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICAgICAgZm9yIChmaW5hbCBPYmpl
Y3QgZWxlbWVudCA6IChMaXN0KWVudHJ5LmdldFZhbHVlKCkpIHsKLSAgICAgICAgICAgIGFkZFJl
cGVhdGVkRmllbGQoZmllbGQsIGVsZW1lbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IGlmIChmaWVsZC5nZXRKYXZhVHlwZSgpID09IEZpZWxkRGVzY3JpcHRvci5KYXZhVHlwZS5NRVNT
QUdFKSB7Ci0gICAgICAgICAgZmluYWwgTWVzc2FnZSBleGlzdGluZ1ZhbHVlID0gKE1lc3NhZ2Up
Z2V0RmllbGQoZmllbGQpOwotICAgICAgICAgIGlmIChleGlzdGluZ1ZhbHVlID09IGV4aXN0aW5n
VmFsdWUuZ2V0RGVmYXVsdEluc3RhbmNlRm9yVHlwZSgpKSB7Ci0gICAgICAgICAgICBzZXRGaWVs
ZChmaWVsZCwgZW50cnkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHNldEZpZWxkKGZpZWxkLAotICAgICAgICAgICAgICBleGlzdGluZ1ZhbHVlLm5ld0J1aWxk
ZXJGb3JUeXBlKCkKLSAgICAgICAgICAgICAgICAubWVyZ2VGcm9tKGV4aXN0aW5nVmFsdWUpCi0g
ICAgICAgICAgICAgICAgLm1lcmdlRnJvbSgoTWVzc2FnZSllbnRyeS5nZXRWYWx1ZSgpKQotICAg
ICAgICAgICAgICAgIC5idWlsZCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgc2V0RmllbGQoZmllbGQsIGVudHJ5LmdldFZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0KLSAgICAgIG1lcmdlVW5rbm93bkZpZWxkcyhvdGhlci5nZXRVbmtub3duRmllbGRz
KCkpOwotCi0gICAgICByZXR1cm4gKEJ1aWxkZXJUeXBlKSB0aGlzOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyVHlwZSBtZXJnZUZyb20oZmluYWwgQ29kZWRJbnB1
dFN0cmVhbSBpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJ
T0V4Y2VwdGlvbiB7Ci0gICAgICByZXR1cm4gbWVyZ2VGcm9tKGlucHV0LCBFeHRlbnNpb25SZWdp
c3RyeS5nZXRFbXB0eVJlZ2lzdHJ5KCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBCdWlsZGVyVHlwZSBtZXJnZUZyb20oCi0gICAgICAgIGZpbmFsIENvZGVkSW5wdXRTdHJl
YW0gaW5wdXQsCi0gICAgICAgIGZpbmFsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25S
ZWdpc3RyeSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGZpbmFsIFVua25v
d25GaWVsZFNldC5CdWlsZGVyIHVua25vd25GaWVsZHMgPQotICAgICAgICBVbmtub3duRmllbGRT
ZXQubmV3QnVpbGRlcihnZXRVbmtub3duRmllbGRzKCkpOwotICAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgZmluYWwgaW50IHRhZyA9IGlucHV0LnJlYWRUYWcoKTsKLSAgICAgICAgaWYgKHRh
ZyA9PSAwKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBNZXNzYWdl
UmVmbGVjdGlvbi5CdWlsZGVyQWRhcHRlciBidWlsZGVyQWRhcHRlciA9Ci0gICAgICAgICAgICBu
ZXcgTWVzc2FnZVJlZmxlY3Rpb24uQnVpbGRlckFkYXB0ZXIodGhpcyk7Ci0gICAgICAgIGlmICgh
TWVzc2FnZVJlZmxlY3Rpb24ubWVyZ2VGaWVsZEZyb20oaW5wdXQsIHVua25vd25GaWVsZHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uUmVn
aXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
RGVzY3JpcHRvckZvclR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidWlsZGVyQWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YWcpKSB7Ci0gICAgICAgICAgLy8gZW5kIGdyb3VwIHRhZwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzZXRVbmtub3duRmllbGRz
KHVua25vd25GaWVsZHMuYnVpbGQoKSk7Ci0gICAgICByZXR1cm4gKEJ1aWxkZXJUeXBlKSB0aGlz
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyVHlwZSBtZXJnZVVu
a25vd25GaWVsZHMoZmluYWwgVW5rbm93bkZpZWxkU2V0IHVua25vd25GaWVsZHMpIHsKLSAgICAg
IHNldFVua25vd25GaWVsZHMoCi0gICAgICAgIFVua25vd25GaWVsZFNldC5uZXdCdWlsZGVyKGdl
dFVua25vd25GaWVsZHMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgLm1lcmdlRnJvbSh1bmtu
b3duRmllbGRzKQotICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7Ci0gICAgICByZXR1
cm4gKEJ1aWxkZXJUeXBlKSB0aGlzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBNZXNzYWdlLkJ1aWxkZXIgZ2V0RmllbGRCdWlsZGVyKGZpbmFsIEZpZWxkRGVzY3JpcHRvciBm
aWVsZCkgewotICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAot
ICAgICAgICAgICJnZXRGaWVsZEJ1aWxkZXIoKSBjYWxsZWQgb24gYW4gdW5zdXBwb3J0ZWQgbWVz
c2FnZSB0eXBlLiIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZXNzYWdl
LkJ1aWxkZXIgZ2V0UmVwZWF0ZWRGaWVsZEJ1aWxkZXIoZmluYWwgRmllbGREZXNjcmlwdG9yIGZp
ZWxkLCBpbnQgaW5kZXgpIHsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4
Y2VwdGlvbigKLSAgICAgICAgICAiZ2V0UmVwZWF0ZWRGaWVsZEJ1aWxkZXIoKSBjYWxsZWQgb24g
YW4gdW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlLiIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gVGV4dEZvcm1hdC5w
cmludFRvU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBh
biBVbmluaXRpYWxpemVkTWVzc2FnZUV4Y2VwdGlvbiByZXBvcnRpbmcgbWlzc2luZyBmaWVsZHMg
aW4KLSAgICAgKiB0aGUgZ2l2ZW4gbWVzc2FnZS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgc3Rh
dGljIFVuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uCi0gICAgICAgIG5ld1VuaW5pdGlhbGl6
ZWRNZXNzYWdlRXhjZXB0aW9uKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgcmV0dXJuIG5ldyBV
bmluaXRpYWxpemVkTWVzc2FnZUV4Y2VwdGlvbigKLSAgICAgICAgICBNZXNzYWdlUmVmbGVjdGlv
bi5maW5kTWlzc2luZ0ZpZWxkcyhtZXNzYWdlKSk7Ci0gICAgfQotCi0gICAgLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g
ICAgLy8gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBzZWVtIHRvIGJlIHJlcXVpcmVkIGluIG9y
ZGVyIHRvIG1ha2UgamF2YWMKLSAgICAvLyBub3QgcHJvZHVjZSB3ZWlyZCBlcnJvcnMgbGlrZToK
LSAgICAvLwotICAgIC8vIGphdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9EeW5hbWljTWVzc2FnZS5q
YXZhOjIwMzogdHlwZXMKLSAgICAvLyAgIGNvbS5nb29nbGUucHJvdG9idWYuQWJzdHJhY3RNZXNz
YWdlLkJ1aWxkZXI8Ci0gICAgLy8gICAgIGNvbS5nb29nbGUucHJvdG9idWYuRHluYW1pY01lc3Nh
Z2UuQnVpbGRlcj4gYW5kCi0gICAgLy8gICBjb20uZ29vZ2xlLnByb3RvYnVmLkFic3RyYWN0TWVz
c2FnZS5CdWlsZGVyPAotICAgIC8vICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkR5bmFtaWNNZXNz
YWdlLkJ1aWxkZXI+IGFyZSBpbmNvbXBhdGlibGU7IGJvdGgKLSAgICAvLyAgIGRlZmluZSBtZXJn
ZUZyb20oY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nKSwgYnV0IHdpdGggdW5yZWxhdGVk
Ci0gICAgLy8gICByZXR1cm4gdHlwZXMuCi0gICAgLy8KLSAgICAvLyBTdHJhbmdlbHksIHRoZXNl
IGxpbmVzIGFyZSBvbmx5IG5lZWRlZCBpZiBqYXZhYyBpcyBpbnZva2VkIHNlcGFyYXRlbHkKLSAg
ICAvLyBvbiBBYnN0cmFjdE1lc3NhZ2UuamF2YSBhbmQgQWJzdHJhY3RNZXNzYWdlTGl0ZS5qYXZh
LiAgSWYgamF2YWMgaXMKLSAgICAvLyBpbnZva2VkIG9uIGJvdGggc2ltdWx0YW5lb3VzbHksIGl0
IHdvcmtzLiAgKE9yIG1heWJlIHRoZSBpbXBvcnRhbnQKLSAgICAvLyBwb2ludCBpcyB3aGV0aGVy
IG9yIG5vdCBEeW5hbWljTWVzc2FnZS5qYXZhIGlzIGNvbXBpbGVkIHRvZ2V0aGVyIHdpdGgKLSAg
ICAvLyBBYnN0cmFjdE1lc3NhZ2VMaXRlLmphdmEgLS0gbm90IHN1cmUuKSAgSSBzdXNwZWN0IHRo
aXMgaXMgYSBjb21waWxlcgotICAgIC8vIGJ1Zy4KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBCdWlsZGVyVHlwZSBtZXJnZUZyb20oZmluYWwgQnl0ZVN0cmluZyBkYXRhKQotICAgICAgICB0
aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiAoQnVp
bGRlclR5cGUpIHN1cGVyLm1lcmdlRnJvbShkYXRhKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgQnVpbGRlclR5cGUgbWVyZ2VGcm9tKAotICAgICAgICBmaW5hbCBCeXRlU3Ry
aW5nIGRhdGEsCi0gICAgICAgIGZpbmFsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25S
ZWdpc3RyeSkKLSAgICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7
Ci0gICAgICByZXR1cm4gKEJ1aWxkZXJUeXBlKSBzdXBlci5tZXJnZUZyb20oZGF0YSwgZXh0ZW5z
aW9uUmVnaXN0cnkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVy
VHlwZSBtZXJnZUZyb20oZmluYWwgYnl0ZVtdIGRhdGEpCi0gICAgICAgIHRocm93cyBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgc3Vw
ZXIubWVyZ2VGcm9tKGRhdGEpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBC
dWlsZGVyVHlwZSBtZXJnZUZyb20oCi0gICAgICAgIGZpbmFsIGJ5dGVbXSBkYXRhLCBmaW5hbCBp
bnQgb2ZmLCBmaW5hbCBpbnQgbGVuKQotICAgICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiAoQnVpbGRlclR5cGUpIHN1cGVyLm1lcmdlRnJv
bShkYXRhLCBvZmYsIGxlbik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1
aWxkZXJUeXBlIG1lcmdlRnJvbSgKLSAgICAgICAgZmluYWwgYnl0ZVtdIGRhdGEsCi0gICAgICAg
IGZpbmFsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgICAg
dGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICByZXR1cm4gKEJ1
aWxkZXJUeXBlKSBzdXBlci5tZXJnZUZyb20oZGF0YSwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyVHlwZSBtZXJnZUZyb20oCi0g
ICAgICAgIGZpbmFsIGJ5dGVbXSBkYXRhLCBmaW5hbCBpbnQgb2ZmLCBmaW5hbCBpbnQgbGVuLAot
ICAgICAgICBmaW5hbCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0g
ICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgcmV0
dXJuIChCdWlsZGVyVHlwZSkgc3VwZXIubWVyZ2VGcm9tKGRhdGEsIG9mZiwgbGVuLCBleHRlbnNp
b25SZWdpc3RyeSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJU
eXBlIG1lcmdlRnJvbShmaW5hbCBJbnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgICAgdGhyb3dzIElP
RXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiAoQnVpbGRlclR5cGUpIHN1cGVyLm1lcmdlRnJvbShp
bnB1dCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJUeXBlIG1l
cmdlRnJvbSgKLSAgICAgICAgZmluYWwgSW5wdXRTdHJlYW0gaW5wdXQsCi0gICAgICAgIGZpbmFs
IEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgICAgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiAoQnVpbGRlclR5cGUpIHN1cGVyLm1lcmdlRnJv
bShpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBib29sZWFuIG1lcmdlRGVsaW1pdGVkRnJvbShmaW5hbCBJbnB1dFN0cmVhbSBpbnB1
dCkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiBzdXBlci5tZXJn
ZURlbGltaXRlZEZyb20oaW5wdXQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBib29sZWFuIG1lcmdlRGVsaW1pdGVkRnJvbSgKLSAgICAgICAgZmluYWwgSW5wdXRTdHJlYW0g
aW5wdXQsCi0gICAgICAgIGZpbmFsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdp
c3RyeSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiBzdXBlci5t
ZXJnZURlbGltaXRlZEZyb20oaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICB9Ci0gIH0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9BYnN0cmFjdE1lc3NhZ2VMaXRlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvQWJzdHJhY3RNZXNzYWdlTGl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0MzczNmRkMTBkNDM3MGExMWYwZmY4N2FkZjI5MDMwYTQ2NTM4MTczLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9BYnN0cmFjdE1lc3NhZ2VMaXRlLmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSwzODYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEu
aW8uRmlsdGVySW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9y
dCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1w
b3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi0vKioKLSAqIEEgcGFydGlhbCBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUge0BsaW5rIE1lc3NhZ2VMaXRlfSBpbnRlcmZhY2Ugd2hpY2gKLSAqIGltcGxl
bWVudHMgYXMgbWFueSBtZXRob2RzIG9mIHRoYXQgaW50ZXJmYWNlIGFzIHBvc3NpYmxlIGluIHRl
cm1zIG9mIG90aGVyCi0gKiBtZXRob2RzLgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdvb2dsZS5j
b20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE1lc3Nh
Z2VMaXRlPAotICAgIE1lc3NhZ2VUeXBlIGV4dGVuZHMgQWJzdHJhY3RNZXNzYWdlTGl0ZTxNZXNz
YWdlVHlwZSwgQnVpbGRlclR5cGU+LAotICAgIEJ1aWxkZXJUeXBlIGV4dGVuZHMgQWJzdHJhY3RN
ZXNzYWdlTGl0ZS5CdWlsZGVyPE1lc3NhZ2VUeXBlLCBCdWlsZGVyVHlwZT4+IAotICAgICAgICBp
bXBsZW1lbnRzIE1lc3NhZ2VMaXRlIHsKLSAgcHJvdGVjdGVkIGludCBtZW1vaXplZEhhc2hDb2Rl
ID0gMDsKLSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQnl0ZVN0cmluZyB0b0J5dGVTdHJpbmco
KSB7Ci0gICAgdHJ5IHsKLSAgICAgIGZpbmFsIEJ5dGVTdHJpbmcuQ29kZWRCdWlsZGVyIG91dCA9
Ci0gICAgICAgIEJ5dGVTdHJpbmcubmV3Q29kZWRCdWlsZGVyKGdldFNlcmlhbGl6ZWRTaXplKCkp
OwotICAgICAgd3JpdGVUbyhvdXQuZ2V0Q29kZWRPdXRwdXQoKSk7Ci0gICAgICByZXR1cm4gb3V0
LmJ1aWxkKCk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICJTZXJpYWxpemluZyB0byBhIEJ5dGVTdHJpbmcg
dGhyZXcgYW4gSU9FeGNlcHRpb24gKHNob3VsZCAiICsKLSAgICAgICAgIm5ldmVyIGhhcHBlbiku
IiwgZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBieXRlW10gdG9CeXRl
QXJyYXkoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGZpbmFsIGJ5dGVbXSByZXN1bHQgPSBuZXcgYnl0
ZVtnZXRTZXJpYWxpemVkU2l6ZSgpXTsKLSAgICAgIGZpbmFsIENvZGVkT3V0cHV0U3RyZWFtIG91
dHB1dCA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNlKHJlc3VsdCk7Ci0gICAgICB3cml0
ZVRvKG91dHB1dCk7Ci0gICAgICBvdXRwdXQuY2hlY2tOb1NwYWNlTGVmdCgpOwotICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgIlNlcmlhbGl6aW5nIHRvIGEgYnl0ZSBhcnJh
eSB0aHJldyBhbiBJT0V4Y2VwdGlvbiAiICsKLSAgICAgICAgIihzaG91bGQgbmV2ZXIgaGFwcGVu
KS4iLCBlKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgd3JpdGVU
byhmaW5hbCBPdXRwdXRTdHJlYW0gb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZp
bmFsIGludCBidWZmZXJTaXplID0KLSAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0uY29tcHV0ZVBy
ZWZlcnJlZEJ1ZmZlclNpemUoZ2V0U2VyaWFsaXplZFNpemUoKSk7Ci0gICAgZmluYWwgQ29kZWRP
dXRwdXRTdHJlYW0gY29kZWRPdXRwdXQgPQotICAgICAgICBDb2RlZE91dHB1dFN0cmVhbS5uZXdJ
bnN0YW5jZShvdXRwdXQsIGJ1ZmZlclNpemUpOwotICAgIHdyaXRlVG8oY29kZWRPdXRwdXQpOwot
ICAgIGNvZGVkT3V0cHV0LmZsdXNoKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgd3JpdGVEZWxpbWl0ZWRUbyhmaW5hbCBPdXRwdXRTdHJlYW0gb3V0cHV0KSB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgIGZpbmFsIGludCBzZXJpYWxpemVkID0gZ2V0U2VyaWFsaXplZFNpemUo
KTsKLSAgICBmaW5hbCBpbnQgYnVmZmVyU2l6ZSA9IENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVQ
cmVmZXJyZWRCdWZmZXJTaXplKAotICAgICAgICBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlUmF3
VmFyaW50MzJTaXplKHNlcmlhbGl6ZWQpICsgc2VyaWFsaXplZCk7Ci0gICAgZmluYWwgQ29kZWRP
dXRwdXRTdHJlYW0gY29kZWRPdXRwdXQgPQotICAgICAgICBDb2RlZE91dHB1dFN0cmVhbS5uZXdJ
bnN0YW5jZShvdXRwdXQsIGJ1ZmZlclNpemUpOwotICAgIGNvZGVkT3V0cHV0LndyaXRlUmF3VmFy
aW50MzIoc2VyaWFsaXplZCk7Ci0gICAgd3JpdGVUbyhjb2RlZE91dHB1dCk7Ci0gICAgY29kZWRP
dXRwdXQuZmx1c2goKTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFBhY2thZ2UgcHJpdmF0ZSBoZWxw
ZXIgbWV0aG9kIGZvciBBYnN0cmFjdFBhcnNlciB0byBjcmVhdGUKLSAgICogVW5pbml0aWFsaXpl
ZE1lc3NhZ2VFeGNlcHRpb24uCi0gICAqLwotICBVbmluaXRpYWxpemVkTWVzc2FnZUV4Y2VwdGlv
biBuZXdVbmluaXRpYWxpemVkTWVzc2FnZUV4Y2VwdGlvbigpIHsKLSAgICByZXR1cm4gbmV3IFVu
aW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uKHRoaXMpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHN0
YXRpYyB2b2lkIGNoZWNrQnl0ZVN0cmluZ0lzVXRmOChCeXRlU3RyaW5nIGJ5dGVTdHJpbmcpCi0g
ICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKLSAgICBpZiAoIWJ5dGVTdHJp
bmcuaXNWYWxpZFV0ZjgoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2Vw
dGlvbigiQnl0ZSBzdHJpbmcgaXMgbm90IFVURi04LiIpOwotICAgIH0KLSAgfQotCi0gIHByb3Rl
Y3RlZCBzdGF0aWMgPFQ+IHZvaWQgYWRkQWxsKGZpbmFsIEl0ZXJhYmxlPFQ+IHZhbHVlcywKLSAg
ICAgIGZpbmFsIENvbGxlY3Rpb248PyBzdXBlciBUPiBsaXN0KSB7Ci0gICAgQnVpbGRlci5hZGRB
bGwodmFsdWVzLCBsaXN0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEEgcGFydGlhbCBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUge0BsaW5rIE1lc3NhZ2UuQnVpbGRlcn0gaW50ZXJmYWNlIHdoaWNoCi0g
ICAqIGltcGxlbWVudHMgYXMgbWFueSBtZXRob2RzIG9mIHRoYXQgaW50ZXJmYWNlIGFzIHBvc3Np
YmxlIGluIHRlcm1zIG9mCi0gICAqIG90aGVyIG1ldGhvZHMuCi0gICAqLwotICBAU3VwcHJlc3NX
YXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGljIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBCdWls
ZGVyPAotICAgICAgTWVzc2FnZVR5cGUgZXh0ZW5kcyBBYnN0cmFjdE1lc3NhZ2VMaXRlPE1lc3Nh
Z2VUeXBlLCBCdWlsZGVyVHlwZT4sCi0gICAgICBCdWlsZGVyVHlwZSBleHRlbmRzIEJ1aWxkZXI8
TWVzc2FnZVR5cGUsIEJ1aWxkZXJUeXBlPj4KLSAgICAgIGltcGxlbWVudHMgTWVzc2FnZUxpdGUu
QnVpbGRlciB7Ci0gICAgLy8gVGhlIGNvbXBpbGVyIHByb2R1Y2VzIGFuIGVycm9yIGlmIHRoaXMg
aXMgbm90IGRlY2xhcmVkIGV4cGxpY2l0bHkuCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGFi
c3RyYWN0IEJ1aWxkZXJUeXBlIGNsb25lKCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
QnVpbGRlclR5cGUgbWVyZ2VGcm9tKGZpbmFsIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICByZXR1cm4gbWVyZ2VGcm9tKGlucHV0LCBFeHRlbnNpb25S
ZWdpc3RyeUxpdGUuZ2V0RW1wdHlSZWdpc3RyeSgpKTsKLSAgICB9Ci0KLSAgICAvLyBSZS1kZWZp
bmVkIGhlcmUgZm9yIHJldHVybiB0eXBlIGNvdmFyaWFuY2UuCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIGFic3RyYWN0IEJ1aWxkZXJUeXBlIG1lcmdlRnJvbSgKLSAgICAgICAgZmluYWwgQ29k
ZWRJbnB1dFN0cmVhbSBpbnB1dCwgZmluYWwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lv
blJlZ2lzdHJ5KQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgQnVpbGRlclR5cGUgbWVyZ2VGcm9tKGZpbmFsIEJ5dGVTdHJpbmcgZGF0YSkg
dGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewotICAg
ICAgICBmaW5hbCBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gZGF0YS5uZXdDb2RlZElucHV0KCk7
Ci0gICAgICAgIG1lcmdlRnJvbShpbnB1dCk7Ci0gICAgICAgIGlucHV0LmNoZWNrTGFzdFRhZ1dh
cygwKTsKLSAgICAgICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgdGhpczsKLSAgICAgIH0gY2F0Y2gg
KEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IGU7Ci0g
ICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1l
RXhjZXB0aW9uKAotICAgICAgICAgICJSZWFkaW5nIGZyb20gYSBCeXRlU3RyaW5nIHRocmV3IGFu
IElPRXhjZXB0aW9uIChzaG91bGQgIiArCi0gICAgICAgICAgIm5ldmVyIGhhcHBlbikuIiwgZSk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJUeXBl
IG1lcmdlRnJvbSgKLSAgICAgICAgZmluYWwgQnl0ZVN0cmluZyBkYXRhLCBmaW5hbCBFeHRlbnNp
b25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICAgIHRocm93cyBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgZmluYWwgQ29k
ZWRJbnB1dFN0cmVhbSBpbnB1dCA9IGRhdGEubmV3Q29kZWRJbnB1dCgpOwotICAgICAgICBtZXJn
ZUZyb20oaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICAgICAgaW5wdXQuY2hlY2tMYXN0
VGFnV2FzKDApOwotICAgICAgICByZXR1cm4gKEJ1aWxkZXJUeXBlKSB0aGlzOwotICAgICAgfSBj
YXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cg
ZTsKLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIlJlYWRpbmcgZnJvbSBhIEJ5dGVTdHJpbmcgdGhy
ZXcgYW4gSU9FeGNlcHRpb24gKHNob3VsZCAiICsKLSAgICAgICAgICAibmV2ZXIgaGFwcGVuKS4i
LCBlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRl
clR5cGUgbWVyZ2VGcm9tKGZpbmFsIGJ5dGVbXSBkYXRhKSB0aHJvd3MgSW52YWxpZFByb3RvY29s
QnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiBtZXJnZUZyb20oZGF0YSwgMCwgZGF0YS5s
ZW5ndGgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyVHlwZSBt
ZXJnZUZyb20oZmluYWwgYnl0ZVtdIGRhdGEsIGZpbmFsIGludCBvZmYsIGZpbmFsIGludCBsZW4p
Ci0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAg
dHJ5IHsKLSAgICAgICAgZmluYWwgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9Ci0gICAgICAgICAg
ICBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKGRhdGEsIG9mZiwgbGVuKTsKLSAgICAgICAg
bWVyZ2VGcm9tKGlucHV0KTsKLSAgICAgICAgaW5wdXQuY2hlY2tMYXN0VGFnV2FzKDApOwotICAg
ICAgICByZXR1cm4gKEJ1aWxkZXJUeXBlKSB0aGlzOwotICAgICAgfSBjYXRjaCAoSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgZTsKLSAgICAgIH0gY2F0
Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
Ci0gICAgICAgICAgIlJlYWRpbmcgZnJvbSBhIGJ5dGUgYXJyYXkgdGhyZXcgYW4gSU9FeGNlcHRp
b24gKHNob3VsZCAiICsKLSAgICAgICAgICAibmV2ZXIgaGFwcGVuKS4iLCBlKTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlclR5cGUgbWVyZ2VGcm9t
KGZpbmFsIGJ5dGVbXSBkYXRhLCBmaW5hbCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9u
UmVnaXN0cnkpCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24g
ewotICAgICAgcmV0dXJuIG1lcmdlRnJvbShkYXRhLCAwLCBkYXRhLmxlbmd0aCwgZXh0ZW5zaW9u
UmVnaXN0cnkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyVHlw
ZSBtZXJnZUZyb20oCi0gICAgICAgIGZpbmFsIGJ5dGVbXSBkYXRhLAotICAgICAgICBmaW5hbCBp
bnQgb2ZmLAotICAgICAgICBmaW5hbCBpbnQgbGVuLAotICAgICAgICBmaW5hbCBFeHRlbnNpb25S
ZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJv
dG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgZmluYWwgQ29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCA9Ci0gICAgICAgICAgICBDb2RlZElucHV0U3RyZWFtLm5ld0luc3Rh
bmNlKGRhdGEsIG9mZiwgbGVuKTsKLSAgICAgICAgbWVyZ2VGcm9tKGlucHV0LCBleHRlbnNpb25S
ZWdpc3RyeSk7Ci0gICAgICAgIGlucHV0LmNoZWNrTGFzdFRhZ1dhcygwKTsKLSAgICAgICAgcmV0
dXJuIChCdWlsZGVyVHlwZSkgdGhpczsKLSAgICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IGU7Ci0gICAgICB9IGNhdGNoIChJT0V4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAg
ICAgICJSZWFkaW5nIGZyb20gYSBieXRlIGFycmF5IHRocmV3IGFuIElPRXhjZXB0aW9uIChzaG91
bGQgIiArCi0gICAgICAgICAgIm5ldmVyIGhhcHBlbikuIiwgZSk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJUeXBlIG1lcmdlRnJvbShmaW5hbCBJ
bnB1dFN0cmVhbSBpbnB1dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGZpbmFsIENvZGVk
SW5wdXRTdHJlYW0gY29kZWRJbnB1dCA9IENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2UoaW5w
dXQpOwotICAgICAgbWVyZ2VGcm9tKGNvZGVkSW5wdXQpOwotICAgICAgY29kZWRJbnB1dC5jaGVj
a0xhc3RUYWdXYXMoMCk7Ci0gICAgICByZXR1cm4gKEJ1aWxkZXJUeXBlKSB0aGlzOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyVHlwZSBtZXJnZUZyb20oCi0gICAg
ICAgIGZpbmFsIElucHV0U3RyZWFtIGlucHV0LCBmaW5hbCBFeHRlbnNpb25SZWdpc3RyeUxpdGUg
ZXh0ZW5zaW9uUmVnaXN0cnkpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBmaW5hbCBDb2Rl
ZElucHV0U3RyZWFtIGNvZGVkSW5wdXQgPSBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKGlu
cHV0KTsKLSAgICAgIG1lcmdlRnJvbShjb2RlZElucHV0LCBleHRlbnNpb25SZWdpc3RyeSk7Ci0g
ICAgICBjb2RlZElucHV0LmNoZWNrTGFzdFRhZ1dhcygwKTsKLSAgICAgIHJldHVybiAoQnVpbGRl
clR5cGUpIHRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQW4gSW5wdXRTdHJlYW0gaW1w
bGVtZW50YXRpb25zIHdoaWNoIHJlYWRzIGZyb20gc29tZSBvdGhlciBJbnB1dFN0cmVhbQotICAg
ICAqIGJ1dCBpcyBsaW1pdGVkIHRvIGEgcGFydGljdWxhciBudW1iZXIgb2YgYnl0ZXMuICBVc2Vk
IGJ5Ci0gICAgICogbWVyZ2VEZWxpbWl0ZWRGcm9tKCkuICBUaGlzIGlzIGludGVudGlvbmFsbHkg
cGFja2FnZS1wcml2YXRlIHNvIHRoYXQKLSAgICAgKiBVbmtub3duRmllbGRTZXQgY2FuIHNoYXJl
IGl0LgotICAgICAqLwotICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBMaW1pdGVkSW5wdXRTdHJlYW0g
ZXh0ZW5kcyBGaWx0ZXJJbnB1dFN0cmVhbSB7Ci0gICAgICBwcml2YXRlIGludCBsaW1pdDsKLQot
ICAgICAgTGltaXRlZElucHV0U3RyZWFtKElucHV0U3RyZWFtIGluLCBpbnQgbGltaXQpIHsKLSAg
ICAgICAgc3VwZXIoaW4pOwotICAgICAgICB0aGlzLmxpbWl0ID0gbGltaXQ7Ci0gICAgICB9Ci0K
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGludCBhdmFpbGFibGUoKSB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgICAgICByZXR1cm4gTWF0aC5taW4oc3VwZXIuYXZhaWxhYmxlKCksIGxp
bWl0KTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgaW50IHJlYWQo
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBpZiAobGltaXQgPD0gMCkgewotICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBpbnQgcmVzdWx0ID0gc3Vw
ZXIucmVhZCgpOwotICAgICAgICBpZiAocmVzdWx0ID49IDApIHsKLSAgICAgICAgICAtLWxpbWl0
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0KLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIGludCByZWFkKGZpbmFsIGJ5dGVbXSBiLCBmaW5hbCBpbnQg
b2ZmLCBpbnQgbGVuKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7
Ci0gICAgICAgIGlmIChsaW1pdCA8PSAwKSB7Ci0gICAgICAgICAgcmV0dXJuIC0xOwotICAgICAg
ICB9Ci0gICAgICAgIGxlbiA9IE1hdGgubWluKGxlbiwgbGltaXQpOwotICAgICAgICBmaW5hbCBp
bnQgcmVzdWx0ID0gc3VwZXIucmVhZChiLCBvZmYsIGxlbik7Ci0gICAgICAgIGlmIChyZXN1bHQg
Pj0gMCkgewotICAgICAgICAgIGxpbWl0IC09IHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBs
b25nIHNraXAoZmluYWwgbG9uZyBuKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5h
bCBsb25nIHJlc3VsdCA9IHN1cGVyLnNraXAoTWF0aC5taW4obiwgbGltaXQpKTsKLSAgICAgICAg
aWYgKHJlc3VsdCA+PSAwKSB7Ci0gICAgICAgICAgbGltaXQgLT0gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIGJvb2xlYW4gbWVyZ2VEZWxpbWl0ZWRGcm9tKAotICAgICAgICBmaW5hbCBJ
bnB1dFN0cmVhbSBpbnB1dCwgZmluYWwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJl
Z2lzdHJ5KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZmluYWwgaW50IGZpcnN0Qnl0ZSA9
IGlucHV0LnJlYWQoKTsKLSAgICAgIGlmIChmaXJzdEJ5dGUgPT0gLTEpIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZmluYWwgaW50IHNpemUgPSBDb2RlZElucHV0U3Ry
ZWFtLnJlYWRSYXdWYXJpbnQzMihmaXJzdEJ5dGUsIGlucHV0KTsKLSAgICAgIGZpbmFsIElucHV0
U3RyZWFtIGxpbWl0ZWRJbnB1dCA9IG5ldyBMaW1pdGVkSW5wdXRTdHJlYW0oaW5wdXQsIHNpemUp
OwotICAgICAgbWVyZ2VGcm9tKGxpbWl0ZWRJbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xl
YW4gbWVyZ2VEZWxpbWl0ZWRGcm9tKGZpbmFsIElucHV0U3RyZWFtIGlucHV0KSB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgICAgcmV0dXJuIG1lcmdlRGVsaW1pdGVkRnJvbShpbnB1dCwKLSAgICAg
ICAgICBFeHRlbnNpb25SZWdpc3RyeUxpdGUuZ2V0RW1wdHlSZWdpc3RyeSgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgQE92ZXJyaWRlCi0gICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpIC8v
IGlzSW5zdGFuY2UgdGFrZXMgY2FyZSBvZiB0aGlzCi0gICAgcHVibGljIEJ1aWxkZXJUeXBlIG1l
cmdlRnJvbShmaW5hbCBNZXNzYWdlTGl0ZSBvdGhlcikgewotICAgICAgaWYgKCFnZXREZWZhdWx0
SW5zdGFuY2VGb3JUeXBlKCkuZ2V0Q2xhc3MoKS5pc0luc3RhbmNlKG90aGVyKSkgewotICAgICAg
ICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgIm1lcmdl
RnJvbShNZXNzYWdlTGl0ZSkgY2FuIG9ubHkgbWVyZ2UgbWVzc2FnZXMgb2YgdGhlIHNhbWUgdHlw
ZS4iKTsKLSAgICAgIH0KLSAgICAgICAgCi0gICAgICByZXR1cm4gaW50ZXJuYWxNZXJnZUZyb20o
KE1lc3NhZ2VUeXBlKSBvdGhlcik7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCBhYnN0cmFj
dCBCdWlsZGVyVHlwZSBpbnRlcm5hbE1lcmdlRnJvbShNZXNzYWdlVHlwZSBtZXNzYWdlKTsKLQot
ICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhbiBVbmluaXRpYWxpemVkTWVzc2FnZUV4Y2VwdGlv
biByZXBvcnRpbmcgbWlzc2luZyBmaWVsZHMgaW4KLSAgICAgKiB0aGUgZ2l2ZW4gbWVzc2FnZS4K
LSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgc3RhdGljIFVuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0
aW9uCi0gICAgICAgIG5ld1VuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uKE1lc3NhZ2VMaXRl
IG1lc3NhZ2UpIHsKLSAgICAgIHJldHVybiBuZXcgVW5pbml0aWFsaXplZE1lc3NhZ2VFeGNlcHRp
b24obWVzc2FnZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyB0aGUge0Bjb2RlIHZh
bHVlc30gdG8gdGhlIHtAY29kZSBsaXN0fS4gIFRoaXMgaXMgYSBoZWxwZXIgbWV0aG9kCi0gICAg
ICogdXNlZCBieSBnZW5lcmF0ZWQgY29kZS4gIFVzZXJzIHNob3VsZCBpZ25vcmUgaXQuCi0gICAg
ICoKLSAgICAgKiBAdGhyb3dzIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIHtAY29kZSB2YWx1ZXN9
IG9yIGFueSBvZiB0aGUgZWxlbWVudHMgb2YKLSAgICAgKiB7QGNvZGUgdmFsdWVzfSBpcyBudWxs
LiBXaGVuIHRoYXQgaGFwcGVucywgc29tZSBlbGVtZW50cyBvZgotICAgICAqIHtAY29kZSB2YWx1
ZXN9IG1heSBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgcmVzdWx0IHtAY29kZSBsaXN0
fS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgc3RhdGljIDxUPiB2b2lkIGFkZEFsbChmaW5hbCBJ
dGVyYWJsZTxUPiB2YWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmluYWwgQ29sbGVjdGlvbjw/IHN1cGVyIFQ+IGxpc3QpIHsKLSAgICAgIGlmICh2YWx1ZXMgPT0g
bnVsbCkgewotICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICAg
IH0KLSAgICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBMYXp5U3RyaW5nTGlzdCkgewotICAgICAg
ICAvLyBGb3IgU3RyaW5nT3JCeXRlU3RyaW5nTGlzdHMsIGNoZWNrIHRoZSB1bmRlcmx5aW5nIGVs
ZW1lbnRzIHRvIGF2b2lkCi0gICAgICAgIC8vIGZvcmNpbmcgY29udmVyc2lvbnMgb2YgQnl0ZVN0
cmluZ3MgdG8gU3RyaW5ncy4KLSAgICAgICAgY2hlY2tGb3JOdWxsVmFsdWVzKCgoTGF6eVN0cmlu
Z0xpc3QpIHZhbHVlcykuZ2V0VW5kZXJseWluZ0VsZW1lbnRzKCkpOwotICAgICAgICBsaXN0LmFk
ZEFsbCgoQ29sbGVjdGlvbjxUPikgdmFsdWVzKTsKLSAgICAgIH0gZWxzZSBpZiAodmFsdWVzIGlu
c3RhbmNlb2YgQ29sbGVjdGlvbikgewotICAgICAgICBjaGVja0Zvck51bGxWYWx1ZXModmFsdWVz
KTsKLSAgICAgICAgbGlzdC5hZGRBbGwoKENvbGxlY3Rpb248VD4pIHZhbHVlcyk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBmb3IgKGZpbmFsIFQgdmFsdWUgOiB2YWx1ZXMpIHsKLSAgICAgICAg
ICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVy
RXhjZXB0aW9uKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGxpc3QuYWRkKHZhbHVlKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tG
b3JOdWxsVmFsdWVzKGZpbmFsIEl0ZXJhYmxlPD8+IHZhbHVlcykgewotICAgICAgZm9yIChmaW5h
bCBPYmplY3QgdmFsdWUgOiB2YWx1ZXMpIHsKLSAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsK
LSAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Fic3RyYWN0UGFyc2VyLmphdmEgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMv
bWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQWJzdHJhY3RQYXJzZXIuamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZiMGVlM2JkNTQ5NDUzN2M0ZDUzNzcyZDdjZjBhNzM2
MTczMGVkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2ph
dmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQWJzdHJhY3RQYXJzZXIu
amF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQg
Y29tLmdvb2dsZS5wcm90b2J1Zi5BYnN0cmFjdE1lc3NhZ2VMaXRlLkJ1aWxkZXIuTGltaXRlZElu
cHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlv
LklucHV0U3RyZWFtOwotCi0vKioKLSAqIEEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg
e0BsaW5rIFBhcnNlcn0gaW50ZXJmYWNlIHdoaWNoIGltcGxlbWVudHMKLSAqIGFzIG1hbnkgbWV0
aG9kcyBvZiB0aGF0IGludGVyZmFjZSBhcyBwb3NzaWJsZSBpbiB0ZXJtcyBvZiBvdGhlciBtZXRo
b2RzLgotICoKLSAqIE5vdGU6IFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbGwgdGhlIGNvbnZlbmll
bmNlIG1ldGhvZHMgaW4gdGhlCi0gKiB7QGxpbmsgUGFyc2VyfSBpbnRlcmZhY2UuIFNlZSB7QGxp
bmsgUGFyc2VyfSBmb3IgcmVsYXRlZCBqYXZhZG9jcy4KLSAqIFN1YmNsYXNzZXMgbmVlZCB0byBp
bXBsZW1lbnQKLSAqIHtAbGluayBQYXJzZXIjcGFyc2VQYXJ0aWFsRnJvbShDb2RlZElucHV0U3Ry
ZWFtLCBFeHRlbnNpb25SZWdpc3RyeUxpdGUpfQotICoKLSAqIEBhdXRob3IgbGl1amlzaUBnb29n
bGUuY29tIChQaGVybCBMaXUpCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFBh
cnNlcjxNZXNzYWdlVHlwZSBleHRlbmRzIE1lc3NhZ2VMaXRlPgotICAgIGltcGxlbWVudHMgUGFy
c2VyPE1lc3NhZ2VUeXBlPiB7Ci0gIC8qKgotICAgKiBDcmVhdGVzIGFuIFVuaW5pdGlhbGl6ZWRN
ZXNzYWdlRXhjZXB0aW9uIGZvciBNZXNzYWdlVHlwZS4KLSAgICovCi0gIHByaXZhdGUgVW5pbml0
aWFsaXplZE1lc3NhZ2VFeGNlcHRpb24KLSAgICAgIG5ld1VuaW5pdGlhbGl6ZWRNZXNzYWdlRXhj
ZXB0aW9uKE1lc3NhZ2VUeXBlIG1lc3NhZ2UpIHsKLSAgICBpZiAobWVzc2FnZSBpbnN0YW5jZW9m
IEFic3RyYWN0TWVzc2FnZUxpdGUpIHsKLSAgICAgIHJldHVybiAoKEFic3RyYWN0TWVzc2FnZUxp
dGUpIG1lc3NhZ2UpLm5ld1VuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uKCk7Ci0gICAgfQot
ICAgIHJldHVybiBuZXcgVW5pbml0aWFsaXplZE1lc3NhZ2VFeGNlcHRpb24obWVzc2FnZSk7Ci0g
IH0KLQotICAvKioKLSAgICogSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBtZXNzYWdlIGlzIGlu
aXRpYWxpemVkLgotICAgKgotICAgKiBAdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbiBpZiBpdCBpcyBub3QgaW5pdGlhbGl6ZWQuCi0gICAqIEByZXR1cm4gVGhlIG1lc3NhZ2Ug
dG8gY2hlY2suCi0gICAqLwotICBwcml2YXRlIE1lc3NhZ2VUeXBlIGNoZWNrTWVzc2FnZUluaXRp
YWxpemVkKE1lc3NhZ2VUeXBlIG1lc3NhZ2UpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29s
QnVmZmVyRXhjZXB0aW9uIHsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsICYmICFtZXNzYWdlLmlz
SW5pdGlhbGl6ZWQoKSkgewotICAgICAgdGhyb3cgbmV3VW5pbml0aWFsaXplZE1lc3NhZ2VFeGNl
cHRpb24obWVzc2FnZSkKLSAgICAgICAgICAuYXNJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24oKQotICAgICAgICAgIC5zZXRVbmZpbmlzaGVkTWVzc2FnZShtZXNzYWdlKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBFeHRlbnNp
b25SZWdpc3RyeUxpdGUgRU1QVFlfUkVHSVNUUlkKLSAgICAgID0gRXh0ZW5zaW9uUmVnaXN0cnlM
aXRlLmdldEVtcHR5UmVnaXN0cnkoKTsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIE1lc3NhZ2VU
eXBlIHBhcnNlUGFydGlhbEZyb20oQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgIHRocm93
cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgIHJldHVybiBwYXJzZVBhcnRp
YWxGcm9tKGlucHV0LCBFTVBUWV9SRUdJU1RSWSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIE1lc3NhZ2VUeXBlIHBhcnNlRnJvbShDb2RlZElucHV0U3RyZWFtIGlucHV0LCBFeHRlbnNp
b25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICB0aHJvd3MgSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gY2hlY2tNZXNzYWdlSW5pdGlhbGl6
ZWQoCi0gICAgICAgIHBhcnNlUGFydGlhbEZyb20oaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KSk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlRnJvbShDb2Rl
ZElucHV0U3RyZWFtIGlucHV0KSB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
IHsKLSAgICByZXR1cm4gcGFyc2VGcm9tKGlucHV0LCBFTVBUWV9SRUdJU1RSWSk7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlUGFydGlhbEZyb20oQnl0ZVN0
cmluZyBkYXRhLCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAg
ICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICBNZXNzYWdlVHlw
ZSBtZXNzYWdlOwotICAgIHRyeSB7Ci0gICAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gZGF0
YS5uZXdDb2RlZElucHV0KCk7Ci0gICAgICBtZXNzYWdlID0gcGFyc2VQYXJ0aWFsRnJvbShpbnB1
dCwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgICAgdHJ5IHsKLSAgICAgICAgaW5wdXQuY2hlY2tM
YXN0VGFnV2FzKDApOwotICAgICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgZS5zZXRVbmZpbmlzaGVkTWVzc2FnZShtZXNzYWdlKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBtZXNzYWdlOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VQYXJ0aWFsRnJvbShCeXRlU3Ry
aW5nIGRhdGEpIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgIHJl
dHVybiBwYXJzZVBhcnRpYWxGcm9tKGRhdGEsIEVNUFRZX1JFR0lTVFJZKTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VGcm9tKEJ5dGVTdHJpbmcgZGF0YSwg
RXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgdGhyb3dzIElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIGNoZWNrTWVzc2FnZUlu
aXRpYWxpemVkKHBhcnNlUGFydGlhbEZyb20oZGF0YSwgZXh0ZW5zaW9uUmVnaXN0cnkpKTsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VGcm9tKEJ5dGVTdHJp
bmcgZGF0YSkgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgcmV0
dXJuIHBhcnNlRnJvbShkYXRhLCBFTVBUWV9SRUdJU1RSWSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlUGFydGlhbEZyb20oCi0gICAgICBieXRlW10gZGF0
YSwgaW50IG9mZiwgaW50IGxlbiwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lz
dHJ5KQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAg
dHJ5IHsKLSAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQgPSBDb2RlZElucHV0U3RyZWFtLm5l
d0luc3RhbmNlKGRhdGEsIG9mZiwgbGVuKTsKLSAgICAgIE1lc3NhZ2VUeXBlIG1lc3NhZ2UgPSBw
YXJzZVBhcnRpYWxGcm9tKGlucHV0LCBleHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgICB0cnkgewot
ICAgICAgICBpbnB1dC5jaGVja0xhc3RUYWdXYXMoMCk7Ci0gICAgICB9IGNhdGNoIChJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBlLnNldFVuZmluaXNo
ZWRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgfQotICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAg
fSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93
IGU7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBNZXNzYWdlVHlwZSBwYXJz
ZVBhcnRpYWxGcm9tKGJ5dGVbXSBkYXRhLCBpbnQgb2ZmLCBpbnQgbGVuKQotICAgICAgdGhyb3dz
IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHBhcnNlUGFydGlh
bEZyb20oZGF0YSwgb2ZmLCBsZW4sIEVNUFRZX1JFR0lTVFJZKTsKLSAgfQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VQYXJ0aWFsRnJvbShieXRlW10gZGF0YSwgRXh0
ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgdGhyb3dzIEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHBhcnNlUGFydGlhbEZyb20o
ZGF0YSwgMCwgZGF0YS5sZW5ndGgsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VQYXJ0aWFsRnJvbShieXRlW10gZGF0YSkg
dGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHBhcnNl
UGFydGlhbEZyb20oZGF0YSwgMCwgZGF0YS5sZW5ndGgsIEVNUFRZX1JFR0lTVFJZKTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VGcm9tKAotICAgICAgYnl0
ZVtdIGRhdGEsIGludCBvZmYsIGludCBsZW4sIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNp
b25SZWdpc3RyeSkKLSAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24g
ewotICAgIHJldHVybiBjaGVja01lc3NhZ2VJbml0aWFsaXplZCgKLSAgICAgICAgcGFyc2VQYXJ0
aWFsRnJvbShkYXRhLCBvZmYsIGxlbiwgZXh0ZW5zaW9uUmVnaXN0cnkpKTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VGcm9tKGJ5dGVbXSBkYXRhLCBpbnQg
b2ZmLCBpbnQgbGVuKQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
biB7Ci0gICAgcmV0dXJuIHBhcnNlRnJvbShkYXRhLCBvZmYsIGxlbiwgRU1QVFlfUkVHSVNUUlkp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBNZXNzYWdlVHlwZSBwYXJzZUZyb20oYnl0
ZVtdIGRhdGEsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAg
IHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgIHJldHVybiBwYXJz
ZUZyb20oZGF0YSwgMCwgZGF0YS5sZW5ndGgsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VGcm9tKGJ5dGVbXSBkYXRhKSB0
aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gcGFyc2VG
cm9tKGRhdGEsIEVNUFRZX1JFR0lTVFJZKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
TWVzc2FnZVR5cGUgcGFyc2VQYXJ0aWFsRnJvbShJbnB1dFN0cmVhbSBpbnB1dCwgRXh0ZW5zaW9u
UmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgdGhyb3dzIEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSBjb2RlZElucHV0ID0g
Q29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShpbnB1dCk7Ci0gICAgTWVzc2FnZVR5cGUgbWVz
c2FnZSA9IHBhcnNlUGFydGlhbEZyb20oY29kZWRJbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpOwot
ICAgIHRyeSB7Ci0gICAgICBjb2RlZElucHV0LmNoZWNrTGFzdFRhZ1dhcygwKTsKLSAgICB9IGNh
dGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgZS5z
ZXRVbmZpbmlzaGVkTWVzc2FnZShtZXNzYWdlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1lc3NhZ2U7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlUGFydGlhbEZy
b20oSW5wdXRTdHJlYW0gaW5wdXQpIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24gewotICAgIHJldHVybiBwYXJzZVBhcnRpYWxGcm9tKGlucHV0LCBFTVBUWV9SRUdJU1RSWSk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlRnJvbShJbnB1
dFN0cmVhbSBpbnB1dCwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQot
ICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJu
IGNoZWNrTWVzc2FnZUluaXRpYWxpemVkKAotICAgICAgICBwYXJzZVBhcnRpYWxGcm9tKGlucHV0
LCBleHRlbnNpb25SZWdpc3RyeSkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBNZXNz
YWdlVHlwZSBwYXJzZUZyb20oSW5wdXRTdHJlYW0gaW5wdXQpIHRocm93cyBJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24gewotICAgIHJldHVybiBwYXJzZUZyb20oaW5wdXQsIEVNUFRZX1JF
R0lTVFJZKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VQ
YXJ0aWFsRGVsaW1pdGVkRnJvbSgKLSAgICAgIElucHV0U3RyZWFtIGlucHV0LCBFeHRlbnNpb25S
ZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICBpbnQgc2l6ZTsKLSAgICB0cnkgewotICAgICAgaW50
IGZpcnN0Qnl0ZSA9IGlucHV0LnJlYWQoKTsKLSAgICAgIGlmIChmaXJzdEJ5dGUgPT0gLTEpIHsK
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBzaXplID0gQ29kZWRJbnB1dFN0
cmVhbS5yZWFkUmF3VmFyaW50MzIoZmlyc3RCeXRlLCBpbnB1dCk7Ci0gICAgfSBjYXRjaCAoSU9F
eGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIElucHV0U3RyZWFtIGxpbWl0ZWRJbnB1
dCA9IG5ldyBMaW1pdGVkSW5wdXRTdHJlYW0oaW5wdXQsIHNpemUpOwotICAgIHJldHVybiBwYXJz
ZVBhcnRpYWxGcm9tKGxpbWl0ZWRJbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBNZXNzYWdlVHlwZSBwYXJzZVBhcnRpYWxEZWxpbWl0ZWRGcm9t
KElucHV0U3RyZWFtIGlucHV0KQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHBhcnNlUGFydGlhbERlbGltaXRlZEZyb20oaW5wdXQsIEVN
UFRZX1JFR0lTVFJZKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgTWVzc2FnZVR5cGUg
cGFyc2VEZWxpbWl0ZWRGcm9tKElucHV0U3RyZWFtIGlucHV0LCBFeHRlbnNpb25SZWdpc3RyeUxp
dGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uIHsKLSAgICByZXR1cm4gY2hlY2tNZXNzYWdlSW5pdGlhbGl6ZWQoCi0gICAgICAg
IHBhcnNlUGFydGlhbERlbGltaXRlZEZyb20oaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KSk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlRGVsaW1pdGVkRnJv
bShJbnB1dFN0cmVhbSBpbnB1dCkgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
biB7Ci0gICAgcmV0dXJuIHBhcnNlRGVsaW1pdGVkRnJvbShpbnB1dCwgRU1QVFlfUkVHSVNUUlkp
OwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvQWJzdHJhY3RQcm90b2J1Zkxpc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9BYnN0cmFjdFByb3RvYnVmTGlzdC5qYXZhCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTdkYjZlMGIzMTQ3NWFmNzdlMzM1MjUxZGUwNjIzMzBh
YmVkNWZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9BYnN0cmFjdFByb3RvYnVm
TGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWlt
cG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLlByb3RvYnVmTGlzdDsKLQotaW1wb3J0
IGphdmEudXRpbC5BYnN0cmFjdExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1p
bXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbUFjY2VzczsKLQot
LyoqCi0gKiBBbiBhYnN0cmFjdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgUHJvdG9idWZMaXN0
fSB3aGljaCBtYW5hZ2VzIG11dGFiaWxpdHkgc2VtYW50aWNzLiBBbGwgbXV0YXRlCi0gKiBtZXRo
b2RzIG11c3QgY2hlY2sgaWYgdGhlIGxpc3QgaXMgbXV0YWJsZSBiZWZvcmUgcHJvY2VlZGluZy4g
U3ViY2xhc3NlcyBtdXN0IGludm9rZQotICoge0BsaW5rICNlbnN1cmVJc011dGFibGUoKX0gbWFu
dWFsbHkgd2hlbiBvdmVycmlkaW5nIHRob3NlIG1ldGhvZHMuCi0gKiA8cD4KLSAqIFRoaXMgaW1w
bGVtZW50YXRpb24gYXNzdW1lcyBhbGwgc3ViY2xhc3NlcyBhcmUgYXJyYXkgYmFzZWQsIHN1cHBv
cnRpbmcgcmFuZG9tIGFjY2Vzcy4KLSAqLwotYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RQcm90b2J1
Zkxpc3Q8RT4gZXh0ZW5kcyBBYnN0cmFjdExpc3Q8RT4gaW1wbGVtZW50cyBQcm90b2J1Zkxpc3Q8
RT4gewotCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfQ0FQQUNJVFkgPSAx
MDsKLQotICAvKioKLSAgICogV2hldGhlciBvciBub3QgdGhpcyBsaXN0IGlzIG1vZGlmaWFibGUu
Ci0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaXNNdXRhYmxlOwotCi0gIC8qKgotICAgKiBDb25z
dHJ1Y3RzIGEgbXV0YWJsZSBsaXN0IGJ5IGRlZmF1bHQuCi0gICAqLwotICBBYnN0cmFjdFByb3Rv
YnVmTGlzdCgpIHsKLSAgICBpc011dGFibGUgPSB0cnVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgIGlmIChvID09IHRoaXMpIHsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoIShvIGluc3RhbmNlb2YgTGlzdCkp
IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gSGFuZGxlIGxpc3RzIHRoYXQg
ZG8gbm90IHN1cHBvcnQgUmFuZG9tQWNjZXNzIGFzIGVmZmljaWVudGx5IGFzIHBvc3NpYmxlIGJ5
IHVzaW5nIGFuIGl0ZXJhdG9yCi0gICAgLy8gYmFzZWQgYXBwcm9hY2ggaW4gb3VyIHN1cGVyIGNs
YXNzLiBPdGhlcndpc2Ugb3VyIGluZGV4IGJhc2VkIGFwcHJvYWNoIHdpbGwgYXZvaWQgdGhvc2UK
LSAgICAvLyBhbGxvY2F0aW9ucy4KLSAgICBpZiAoIShvIGluc3RhbmNlb2YgUmFuZG9tQWNjZXNz
KSkgewotICAgICAgcmV0dXJuIHN1cGVyLmVxdWFscyhvKTsKLSAgICB9Ci0KLSAgICBMaXN0PD8+
IG90aGVyID0gKExpc3Q8Pz4pIG87Ci0gICAgZmluYWwgaW50IHNpemUgPSBzaXplKCk7Ci0gICAg
aWYgKHNpemUgIT0gb3RoZXIuc2l6ZSgpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICBpZiAoIWdldChpKS5l
cXVhbHMob3RoZXIuZ2V0KGkpKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQg
aGFzaENvZGUoKSB7Ci0gICAgZmluYWwgaW50IHNpemUgPSBzaXplKCk7Ci0gICAgaW50IGhhc2hD
b2RlID0gMTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgaGFz
aENvZGUgPSAoMzEgKiBoYXNoQ29kZSkgKyBnZXQoaSkuaGFzaENvZGUoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGhhc2hDb2RlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGFk
ZChFIGUpIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICByZXR1cm4gc3VwZXIuYWRkKGUp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGFkZChpbnQgaW5kZXgsIEUgZWxl
bWVudCkgewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIHN1cGVyLmFkZChpbmRleCwgZWxl
bWVudCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gYWRkQWxsKENvbGxl
Y3Rpb248PyBleHRlbmRzIEU+IGMpIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICByZXR1
cm4gc3VwZXIuYWRkQWxsKGMpOwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xl
YW4gYWRkQWxsKGludCBpbmRleCwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRT4gYykgewotICAgIGVu
c3VyZUlzTXV0YWJsZSgpOwotICAgIHJldHVybiBzdXBlci5hZGRBbGwoaW5kZXgsIGMpOwotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNsZWFyKCkgewotICAgIGVuc3VyZUlzTXV0
YWJsZSgpOwotICAgIHN1cGVyLmNsZWFyKCk7Ci0gIH0KLSAgCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgYm9vbGVhbiBpc01vZGlmaWFibGUoKSB7Ci0gICAgcmV0dXJuIGlzTXV0YWJsZTsKLSAgfQot
ICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBmaW5hbCB2b2lkIG1ha2VJbW11dGFibGUoKSB7Ci0g
ICAgaXNNdXRhYmxlID0gZmFsc2U7Ci0gIH0KLSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgRSBy
ZW1vdmUoaW50IGluZGV4KSB7Ci0gICAgZW5zdXJlSXNNdXRhYmxlKCk7Ci0gICAgcmV0dXJuIHN1
cGVyLnJlbW92ZShpbmRleCk7Ci0gIH0KLSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVh
biByZW1vdmUoT2JqZWN0IG8pIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICByZXR1cm4g
c3VwZXIucmVtb3ZlKG8pOwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4g
cmVtb3ZlQWxsKENvbGxlY3Rpb248Pz4gYykgewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAg
IHJldHVybiBzdXBlci5yZW1vdmVBbGwoYyk7Ci0gIH0KLSAgCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgYm9vbGVhbiByZXRhaW5BbGwoQ29sbGVjdGlvbjw/PiBjKSB7Ci0gICAgZW5zdXJlSXNNdXRh
YmxlKCk7Ci0gICAgcmV0dXJuIHN1cGVyLnJldGFpbkFsbChjKTsKLSAgfQotICAKLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBFIHNldChpbnQgaW5kZXgsIEUgZWxlbWVudCkgewotICAgIGVuc3VyZUlz
TXV0YWJsZSgpOwotICAgIHJldHVybiBzdXBlci5zZXQoaW5kZXgsIGVsZW1lbnQpOwotICB9Ci0g
IAotICAvKioKLSAgICogVGhyb3dzIGFuIHtAbGluayBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2Vw
dGlvbn0gaWYgdGhlIGxpc3QgaXMgaW1tdXRhYmxlLiBTdWJjbGFzc2VzIGFyZQotICAgKiByZXNw
b25zaWJsZSBmb3IgaW52b2tpbmcgdGhpcyBtZXRob2Qgb24gbXV0YXRlIG9wZXJhdGlvbnMuCi0g
ICAqLwotICBwcm90ZWN0ZWQgdm9pZCBlbnN1cmVJc011dGFibGUoKSB7Ci0gICAgaWYgKCFpc011
dGFibGUpIHsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigp
OwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL0Jsb2NraW5nUnBjQ2hhbm5lbC5qYXZhIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21h
aW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Jsb2NraW5nUnBjQ2hhbm5lbC5qYXZhCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTM1ZWZiOWI2YzE5M2M5ZmY4OWJjYzkwODE4OTc4
MTI4OTliNDVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9CbG9ja2luZ1JwY0No
YW5uZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLS8q
KgotICogPHA+QWJzdHJhY3QgaW50ZXJmYWNlIGZvciBhIGJsb2NraW5nIFJQQyBjaGFubmVsLiAg
e0Bjb2RlIEJsb2NraW5nUnBjQ2hhbm5lbH0KLSAqIGlzIHRoZSBibG9ja2luZyBlcXVpdmFsZW50
IHRvIHtAbGluayBScGNDaGFubmVsfS4KLSAqCi0gKiBAYXV0aG9yIGtlbnRvbkBnb29nbGUuY29t
IEtlbnRvbiBWYXJkYQotICogQGF1dGhvciBjcG92aXJrQGdvb2dsZS5jb20gQ2hyaXMgUG92aXJr
Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQmxvY2tpbmdScGNDaGFubmVsIHsKLSAgLyoqCi0gICAq
IENhbGwgdGhlIGdpdmVuIG1ldGhvZCBvZiB0aGUgcmVtb3RlIHNlcnZpY2UgYW5kIGJsb2NrcyB1
bnRpbCBpdCByZXR1cm5zLgotICAgKiB7QGNvZGUgY2FsbEJsb2NraW5nTWV0aG9kKCl9IGlzIHRo
ZSBibG9ja2luZyBlcXVpdmFsZW50IHRvCi0gICAqIHtAbGluayBScGNDaGFubmVsI2NhbGxNZXRo
b2R9LgotICAgKi8KLSAgTWVzc2FnZSBjYWxsQmxvY2tpbmdNZXRob2QoCi0gICAgICBEZXNjcmlw
dG9ycy5NZXRob2REZXNjcmlwdG9yIG1ldGhvZCwKLSAgICAgIFJwY0NvbnRyb2xsZXIgY29udHJv
bGxlciwKLSAgICAgIE1lc3NhZ2UgcmVxdWVzdCwKLSAgICAgIE1lc3NhZ2UgcmVzcG9uc2VQcm90
b3R5cGUpIHRocm93cyBTZXJ2aWNlRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUv
c3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Jsb2NraW5nU2VydmljZS5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Jsb2NraW5nU2Vydmlj
ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDFmMGI4ZmYwZmEzMjBhMGI4
Nzc0YjFhMWQwZGI4NzYzNTE5MjIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9C
bG9ja2luZ1NlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9i
dWY7Ci0KLS8qKgotICogQmxvY2tpbmcgZXF1aXZhbGVudCB0byB7QGxpbmsgU2VydmljZX0uCi0g
KgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqIEBhdXRob3Ig
Y3Bvdmlya0Bnb29nbGUuY29tIENocmlzIFBvdmlyawotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJs
b2NraW5nU2VydmljZSB7Ci0gIC8qKgotICAgKiBFcXVpdmFsZW50IHRvIHtAbGluayBTZXJ2aWNl
I2dldERlc2NyaXB0b3JGb3JUeXBlfS4KLSAgICovCi0gIERlc2NyaXB0b3JzLlNlcnZpY2VEZXNj
cmlwdG9yIGdldERlc2NyaXB0b3JGb3JUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIEVxdWl2YWxlbnQg
dG8ge0BsaW5rIFNlcnZpY2UjY2FsbE1ldGhvZH0sIGV4Y2VwdCB0aGF0Ci0gICAqIHtAY29kZSBj
YWxsQmxvY2tpbmdNZXRob2QoKX0gcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBSUEMgb3IgdGhy
b3dzIGEKLSAgICoge0BsaW5rIFNlcnZpY2VFeGNlcHRpb259IGlmIHRoZXJlIGlzIGEgZmFpbHVy
ZSwgcmF0aGVyIHRoYW4gcGFzc2luZyB0aGUKLSAgICogaW5mb3JtYXRpb24gdG8gYSBjYWxsYmFj
ay4KLSAgICovCi0gIE1lc3NhZ2UgY2FsbEJsb2NraW5nTWV0aG9kKERlc2NyaXB0b3JzLk1ldGhv
ZERlc2NyaXB0b3IgbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBScGNDb250
cm9sbGVyIGNvbnRyb2xsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2Ug
cmVxdWVzdCkgdGhyb3dzIFNlcnZpY2VFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIEVxdWl2YWxl
bnQgdG8ge0BsaW5rIFNlcnZpY2UjZ2V0UmVxdWVzdFByb3RvdHlwZX0uCi0gICAqLwotICBNZXNz
YWdlIGdldFJlcXVlc3RQcm90b3R5cGUoRGVzY3JpcHRvcnMuTWV0aG9kRGVzY3JpcHRvciBtZXRo
b2QpOwotCi0gIC8qKgotICAgKiBFcXVpdmFsZW50IHRvIHtAbGluayBTZXJ2aWNlI2dldFJlc3Bv
bnNlUHJvdG90eXBlfS4KLSAgICovCi0gIE1lc3NhZ2UgZ2V0UmVzcG9uc2VQcm90b3R5cGUoRGVz
Y3JpcHRvcnMuTWV0aG9kRGVzY3JpcHRvciBtZXRob2QpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Jvb2xlYW5BcnJheUxpc3QuamF2
YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Cb29sZWFuQXJy
YXlMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMjgyMGI2ZTcwZmRl
MWUyNDI3NjIxMTEyN2UwZTE5MWJiNjYwNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL0Jvb2xlYW5BcnJheUxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xl
LnByb3RvYnVmOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5Cb29sZWFu
TGlzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxl
Y3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbUFjY2VzczsKLQotLyoqCi0gKiBBbiBpbXBs
ZW1lbnRhdGlvbiBvZiB7QGxpbmsgQm9vbGVhbkxpc3R9IG9uIHRvcCBvZiBhIHByaW1pdGl2ZSBh
cnJheS4KLSAqIAotICogQGF1dGhvciBkd2Vpc0Bnb29nbGUuY29tIChEYW5pZWwgV2VpcykKLSAq
LwotZmluYWwgY2xhc3MgQm9vbGVhbkFycmF5TGlzdAotICAgIGV4dGVuZHMgQWJzdHJhY3RQcm90
b2J1Zkxpc3Q8Qm9vbGVhbj4gaW1wbGVtZW50cyBCb29sZWFuTGlzdCwgUmFuZG9tQWNjZXNzIHsK
LSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEJvb2xlYW5BcnJheUxpc3QgRU1QVFlfTElTVCA9
IG5ldyBCb29sZWFuQXJyYXlMaXN0KCk7Ci0gIHN0YXRpYyB7Ci0gICAgRU1QVFlfTElTVC5tYWtl
SW1tdXRhYmxlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgQm9vbGVhbkFycmF5TGlzdCBl
bXB0eUxpc3QoKSB7Ci0gICAgcmV0dXJuIEVNUFRZX0xJU1Q7Ci0gIH0KLSAgCi0gIC8qKgotICAg
KiBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIGxpc3QuCi0gICAqLwotICBwcml2YXRlIGJvb2xl
YW5bXSBhcnJheTsKLQotICAvKioKLSAgICogVGhlIHNpemUgb2YgdGhlIGxpc3QgZGlzdGluY3Qg
ZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4gVGhhdCBpcywgaXQgaXMgdGhlIG51bWJlciBv
ZgotICAgKiBlbGVtZW50cyBzZXQgaW4gdGhlIGxpc3QuCi0gICAqLwotICBwcml2YXRlIGludCBz
aXplOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgbmV3IG11dGFibGUge0Bjb2RlIEJvb2xl
YW5BcnJheUxpc3R9IHdpdGggZGVmYXVsdCBjYXBhY2l0eS4KLSAgICovCi0gIEJvb2xlYW5BcnJh
eUxpc3QoKSB7Ci0gICAgdGhpcyhuZXcgYm9vbGVhbltERUZBVUxUX0NBUEFDSVRZXSwgMCk7Ci0g
IH0KLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG5ldyBtdXRhYmxlIHtAY29kZSBCb29sZWFu
QXJyYXlMaXN0fS4KLSAgICovCi0gIHByaXZhdGUgQm9vbGVhbkFycmF5TGlzdChib29sZWFuW10g
YXJyYXksIGludCBzaXplKSB7Ci0gICAgdGhpcy5hcnJheSA9IGFycmF5OwotICAgIHRoaXMuc2l6
ZSA9IHNpemU7Ci0gIH0KLSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMo
T2JqZWN0IG8pIHsKLSAgICBpZiAodGhpcyA9PSBvKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKCEobyBpbnN0YW5jZW9mIEJvb2xlYW5BcnJheUxpc3QpKSB7Ci0gICAgICBy
ZXR1cm4gc3VwZXIuZXF1YWxzKG8pOwotICAgIH0KLSAgICBCb29sZWFuQXJyYXlMaXN0IG90aGVy
ID0gKEJvb2xlYW5BcnJheUxpc3QpIG87Ci0gICAgaWYgKHNpemUgIT0gb3RoZXIuc2l6ZSkgewot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBmaW5hbCBib29sZWFuW10gYXJy
ID0gb3RoZXIuYXJyYXk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgIGlmIChhcnJheVtpXSAhPSBhcnJbaV0pIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIGludCByZXN1bHQgPSAxOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICByZXN1bHQgPSAoMzEgKiByZXN1bHQp
ICsgSW50ZXJuYWwuaGFzaEJvb2xlYW4oYXJyYXlbaV0pOwotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBCb29sZWFuTGlzdCBtdXRhYmxlQ29w
eVdpdGhDYXBhY2l0eShpbnQgY2FwYWNpdHkpIHsKLSAgICBpZiAoY2FwYWNpdHkgPCBzaXplKSB7
Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgfQotICAg
IHJldHVybiBuZXcgQm9vbGVhbkFycmF5TGlzdChBcnJheXMuY29weU9mKGFycmF5LCBjYXBhY2l0
eSksIHNpemUpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBCb29sZWFuIGdldChpbnQg
aW5kZXgpIHsKLSAgICByZXR1cm4gZ2V0Qm9vbGVhbihpbmRleCk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbihpbnQgaW5kZXgpIHsKLSAgICBlbnN1cmVJ
bmRleEluUmFuZ2UoaW5kZXgpOwotICAgIHJldHVybiBhcnJheVtpbmRleF07Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIGludCBzaXplKCkgewotICAgIHJldHVybiBzaXplOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBCb29sZWFuIHNldChpbnQgaW5kZXgsIEJvb2xlYW4gZWxl
bWVudCkgewotICAgIHJldHVybiBzZXRCb29sZWFuKGluZGV4LCBlbGVtZW50KTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBzZXRCb29sZWFuKGludCBpbmRleCwgYm9vbGVh
biBlbGVtZW50KSB7Ci0gICAgZW5zdXJlSXNNdXRhYmxlKCk7Ci0gICAgZW5zdXJlSW5kZXhJblJh
bmdlKGluZGV4KTsKLSAgICBib29sZWFuIHByZXZpb3VzVmFsdWUgPSBhcnJheVtpbmRleF07Ci0g
ICAgYXJyYXlbaW5kZXhdID0gZWxlbWVudDsKLSAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBhZGQoaW50IGluZGV4LCBCb29sZWFuIGVs
ZW1lbnQpIHsKLSAgICBhZGRCb29sZWFuKGluZGV4LCBlbGVtZW50KTsKLSAgfQotCi0gIC8qKgot
ICAgKiBMaWtlIHtAbGluayAjYWRkKEJvb2xlYW4pfSBidXQgbW9yZSBlZmZpY2llbnQgaW4gdGhh
dCBpdCBkb2Vzbid0IGJveCB0aGUgZWxlbWVudC4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBhZGRCb29sZWFuKGJvb2xlYW4gZWxlbWVudCkgewotICAgIGFkZEJvb2xlYW4oc2l6
ZSwgZWxlbWVudCk7Ci0gIH0KLQotICAvKioKLSAgICogTGlrZSB7QGxpbmsgI2FkZChpbnQsIEJv
b2xlYW4pfSBidXQgbW9yZSBlZmZpY2llbnQgaW4gdGhhdCBpdCBkb2Vzbid0IGJveCB0aGUgZWxl
bWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBhZGRCb29sZWFuKGludCBpbmRleCwgYm9vbGVh
biBlbGVtZW50KSB7Ci0gICAgZW5zdXJlSXNNdXRhYmxlKCk7Ci0gICAgaWYgKGluZGV4IDwgMCB8
fCBpbmRleCA+IHNpemUpIHsKLSAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0
aW9uKG1ha2VPdXRPZkJvdW5kc0V4Y2VwdGlvbk1lc3NhZ2UoaW5kZXgpKTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHNpemUgPCBhcnJheS5sZW5ndGgpIHsKLSAgICAgIC8vIFNoaWZ0IGV2ZXJ5dGhp
bmcgb3ZlciB0byBtYWtlIHJvb20KLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoYXJyYXksIGluZGV4
LCBhcnJheSwgaW5kZXggKyAxLCBzaXplIC0gaW5kZXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAv
LyBSZXNpemUgdG8gMS41eCB0aGUgc2l6ZQotICAgICAgaW50IGxlbmd0aCA9ICgoc2l6ZSAqIDMp
IC8gMikgKyAxOwotICAgICAgYm9vbGVhbltdIG5ld0FycmF5ID0gbmV3IGJvb2xlYW5bbGVuZ3Ro
XTsKLSAgICAgIAotICAgICAgLy8gQ29weSB0aGUgZmlyc3QgcGFydCBkaXJlY3RseQotICAgICAg
U3lzdGVtLmFycmF5Y29weShhcnJheSwgMCwgbmV3QXJyYXksIDAsIGluZGV4KTsKLSAgICAgIAot
ICAgICAgLy8gQ29weSB0aGUgcmVzdCBzaGlmdGVkIG92ZXIgYnkgb25lIHRvIG1ha2Ugcm9vbQot
ICAgICAgU3lzdGVtLmFycmF5Y29weShhcnJheSwgaW5kZXgsIG5ld0FycmF5LCBpbmRleCArIDEs
IHNpemUgLSBpbmRleCk7Ci0gICAgICBhcnJheSA9IG5ld0FycmF5OwotICAgIH0KLQotICAgIGFy
cmF5W2luZGV4XSA9IGVsZW1lbnQ7Ci0gICAgc2l6ZSsrOwotICAgIG1vZENvdW50Kys7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gYWRkQWxsKENvbGxlY3Rpb248PyBleHRl
bmRzIEJvb2xlYW4+IGNvbGxlY3Rpb24pIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICAK
LSAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50
ZXJFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2Ugc3BlY2lhbGl6ZSB3aGVuIGFk
ZGluZyBhbm90aGVyIEJvb2xlYW5BcnJheUxpc3QgdG8gYXZvaWQgYm94aW5nIGVsZW1lbnRzLgot
ICAgIGlmICghKGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBCb29sZWFuQXJyYXlMaXN0KSkgewotICAg
ICAgcmV0dXJuIHN1cGVyLmFkZEFsbChjb2xsZWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgQm9v
bGVhbkFycmF5TGlzdCBsaXN0ID0gKEJvb2xlYW5BcnJheUxpc3QpIGNvbGxlY3Rpb247Ci0gICAg
aWYgKGxpc3Quc2l6ZSA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAot
ICAgIGludCBvdmVyZmxvdyA9IEludGVnZXIuTUFYX1ZBTFVFIC0gc2l6ZTsKLSAgICBpZiAob3Zl
cmZsb3cgPCBsaXN0LnNpemUpIHsKLSAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlcHJlc2Vu
dCBhIGxpc3QgdGhpcyBsYXJnZS4KLSAgICAgIHRocm93IG5ldyBPdXRPZk1lbW9yeUVycm9yKCk7
Ci0gICAgfQotICAgIAotICAgIGludCBuZXdTaXplID0gc2l6ZSArIGxpc3Quc2l6ZTsKLSAgICBp
ZiAobmV3U2l6ZSA+IGFycmF5Lmxlbmd0aCkgewotICAgICAgYXJyYXkgPSBBcnJheXMuY29weU9m
KGFycmF5LCBuZXdTaXplKTsKLSAgICB9Ci0gICAgCi0gICAgU3lzdGVtLmFycmF5Y29weShsaXN0
LmFycmF5LCAwLCBhcnJheSwgc2l6ZSwgbGlzdC5zaXplKTsKLSAgICBzaXplID0gbmV3U2l6ZTsK
LSAgICBtb2RDb3VudCsrOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBAT3ZlcnJpZGUK
LSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlKE9iamVjdCBvKSB7Ci0gICAgZW5zdXJlSXNNdXRhYmxl
KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgIGlmIChvLmVx
dWFscyhhcnJheVtpXSkpIHsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShhcnJheSwgaSArIDEs
IGFycmF5LCBpLCBzaXplIC0gaSk7Ci0gICAgICAgIHNpemUtLTsKLSAgICAgICAgbW9kQ291bnQr
KzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQm9vbGVhbiByZW1vdmUoaW50IGluZGV4
KSB7Ci0gICAgZW5zdXJlSXNNdXRhYmxlKCk7Ci0gICAgZW5zdXJlSW5kZXhJblJhbmdlKGluZGV4
KTsKLSAgICBib29sZWFuIHZhbHVlID0gYXJyYXlbaW5kZXhdOwotICAgIFN5c3RlbS5hcnJheWNv
cHkoYXJyYXksIGluZGV4ICsgMSwgYXJyYXksIGluZGV4LCBzaXplIC0gaW5kZXgpOwotICAgIHNp
emUtLTsKLSAgICBtb2RDb3VudCsrOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotCi0gIC8qKgot
ICAgKiBFbnN1cmVzIHRoYXQgdGhlIHByb3ZpZGVkIHtAY29kZSBpbmRleH0gaXMgd2l0aGluIHRo
ZSByYW5nZSBvZiB7QGNvZGUgWzAsIHNpemVdfS4gVGhyb3dzIGFuCi0gICAqIHtAbGluayBJbmRl
eE91dE9mQm91bmRzRXhjZXB0aW9ufSBpZiBpdCBpcyBub3QuCi0gICAqIAotICAgKiBAcGFyYW0g
aW5kZXggdGhlIGluZGV4IHRvIHZlcmlmeSBpcyBpbiByYW5nZQotICAgKi8KLSAgcHJpdmF0ZSB2
b2lkIGVuc3VyZUluZGV4SW5SYW5nZShpbnQgaW5kZXgpIHsKLSAgICBpZiAoaW5kZXggPCAwIHx8
IGluZGV4ID49IHNpemUpIHsKLSAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0
aW9uKG1ha2VPdXRPZkJvdW5kc0V4Y2VwdGlvbk1lc3NhZ2UoaW5kZXgpKTsKLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlIFN0cmluZyBtYWtlT3V0T2ZCb3VuZHNFeGNlcHRpb25NZXNzYWdlKGludCBp
bmRleCkgewotICAgIHJldHVybiAiSW5kZXg6IiArIGluZGV4ICsgIiwgU2l6ZToiICsgc2l6ZTsK
LSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL0J5dGVCdWZmZXJXcml0ZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9CeXRlQnVmZmVyV3JpdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDBjYzM4MTc1ZjkwOGNkNDFiYjZiMmM0ZTQ2NzIzZDY3NmIzNzNmY2IuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0J5dGVCdWZmZXJXcml0ZXIuamF2YQorKysg
L2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgc3RhdGljIGph
dmEubGFuZy5NYXRoLm1heDsKLWltcG9ydCBzdGF0aWMgamF2YS5sYW5nLk1hdGgubWluOwotCi1p
bXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRp
b247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5T
b2Z0UmVmZXJlbmNlOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKgotICogVXRp
bGl0eSBjbGFzcyB0byBwcm92aWRlIGVmZmljaWVudCB3cml0aW5nIG9mIHtAbGluayBCeXRlQnVm
ZmVyfXMgdG8ge0BsaW5rIE91dHB1dFN0cmVhbX1zLgotICovCi1maW5hbCBjbGFzcyBCeXRlQnVm
ZmVyV3JpdGVyIHsKLSAgcHJpdmF0ZSBCeXRlQnVmZmVyV3JpdGVyKCkge30KLQotICAvKioKLSAg
ICogTWluaW11bSBzaXplIGZvciBhIGNhY2hlZCBidWZmZXIuIFRoaXMgcHJldmVudHMgdXMgZnJv
bSBhbGxvY2F0aW5nIGJ1ZmZlcnMgdGhhdCBhcmUgdG9vCi0gICAqIHNtYWxsIHRvIGJlIGVhc2ls
eSByZXVzZWQuCi0gICAqLwotICAvLyBUT0RPKG5hdGhhbm1pdHRsZXIpOiB0dW5lIHRoaXMgcHJv
cGVydHkgb3IgYWxsb3cgY29uZmlndXJhdGlvbj8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IE1JTl9DQUNIRURfQlVGRkVSX1NJWkUgPSAxMDI0OwotCi0gIC8qKgotICAgKiBNYXhpbXVtIHNp
emUgZm9yIGEgY2FjaGVkIGJ1ZmZlci4gSWYgYSBsYXJnZXIgYnVmZmVyIGlzIHJlcXVpcmVkLCBp
dCB3aWxsIGJlIGFsbG9jYXRlZAotICAgKiBidXQgbm90IGNhY2hlZC4KLSAgICovCi0gIC8vIFRP
RE8obmF0aGFubWl0dGxlcik6IHR1bmUgdGhpcyBwcm9wZXJ0eSBvciBhbGxvdyBjb25maWd1cmF0
aW9uPwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0NBQ0hFRF9CVUZGRVJfU0laRSA9
IDE2ICogMTAyNDsKLQotICAvKioKLSAgICogVGhlIGZyYWN0aW9uIG9mIHRoZSByZXF1ZXN0ZWQg
YnVmZmVyIHNpemUgdW5kZXIgd2hpY2ggdGhlIGJ1ZmZlciB3aWxsIGJlIHJlYWxsb2NhdGVkLgot
ICAgKi8KLSAgLy8gVE9ETyhuYXRoYW5taXR0bGVyKTogdHVuZSB0aGlzIHByb3BlcnR5IG9yIGFs
bG93IGNvbmZpZ3VyYXRpb24/Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IEJVRkZFUl9S
RUFMTE9DQVRJT05fVEhSRVNIT0xEID0gMC41ZjsKLQotICAvKioKLSAgICogS2VlcGluZyBhIHNv
ZnQgcmVmZXJlbmNlIHRvIGEgdGhyZWFkLWxvY2FsIGJ1ZmZlci4gVGhpcyBidWZmZXIgaXMgdXNl
ZCBmb3Igd3JpdGluZyBhCi0gICAqIHtAbGluayBCeXRlQnVmZmVyfSB0byBhbiB7QGxpbmsgT3V0
cHV0U3RyZWFtfSB3aGVuIG5vIHplcm8tY29weSBhbHRlcm5hdGl2ZSB3YXMgYXZhaWxhYmxlLgot
ICAgKiBVc2luZyBhICJzb2Z0IiByZWZlcmVuY2Ugc2luY2UgVk1zIG1heSBrZWVwIHRoaXMgcmVm
ZXJlbmNlIGFyb3VuZCBsb25nZXIgdGhhbiAid2VhayIKLSAgICogKGUuZy4gSG90U3BvdCB3aWxs
IG1haW50YWluIHNvZnQgcmVmZXJlbmNlcyB1bnRpbCBtZW1vcnkgcHJlc3N1cmUgd2FycmFudHMg
Y29sbGVjdGlvbikuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUaHJlYWRMb2NhbDxT
b2Z0UmVmZXJlbmNlPGJ5dGVbXT4+IEJVRkZFUiA9Ci0gICAgICBuZXcgVGhyZWFkTG9jYWw8U29m
dFJlZmVyZW5jZTxieXRlW10+PigpOwotCi0gIC8qKgotICAgKiBGb3IgdGVzdGluZyBwdXJwb3Nl
cyBvbmx5LiBDbGVhcnMgdGhlIGNhY2hlZCBidWZmZXIgdG8gZm9yY2UgYSBuZXcgYWxsb2NhdGlv
biBvbiB0aGUgbmV4dAotICAgKiBpbnZvY2F0aW9uLgotICAgKi8KLSAgc3RhdGljIHZvaWQgY2xl
YXJDYWNoZWRCdWZmZXIoKSB7Ci0gICAgQlVGRkVSLnNldChudWxsKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBXcml0ZXMgdGhlIHJlbWFpbmluZyBjb250ZW50IG9mIHRoZSBidWZmZXIgdG8gdGhlIGdp
dmVuIHN0cmVhbS4gVGhlIGJ1ZmZlciB7QGNvZGUgcG9zaXRpb259Ci0gICAqIHdpbGwgcmVtYWlu
IHVuY2hhbmdlZCBieSB0aGlzIG1ldGhvZC4KLSAgICovCi0gIHN0YXRpYyB2b2lkIHdyaXRlKEJ5
dGVCdWZmZXIgYnVmZmVyLCBPdXRwdXRTdHJlYW0gb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIGZpbmFsIGludCBpbml0aWFsUG9zID0gYnVmZmVyLnBvc2l0aW9uKCk7Ci0gICAgdHJ5
IHsKLSAgICAgIGlmIChidWZmZXIuaGFzQXJyYXkoKSkgewotICAgICAgICAvLyBPcHRpbWl6ZWQg
d3JpdGUgZm9yIGFycmF5LWJhY2tlZCBidWZmZXJzLgotICAgICAgICAvLyBOb3RlIHRoYXQgd2Un
cmUgdGFraW5nIHRoZSByaXNrIHRoYXQgYSBtYWxpY2lvdXMgT3V0cHV0U3RyZWFtIGNvdWxkIG1v
ZGlmeSB0aGUgYXJyYXkuCi0gICAgICAgIG91dHB1dC53cml0ZShidWZmZXIuYXJyYXkoKSwgYnVm
ZmVyLmFycmF5T2Zmc2V0KCkgKyBidWZmZXIucG9zaXRpb24oKSwgYnVmZmVyLnJlbWFpbmluZygp
KTsKLSAgICAgIH0gZWxzZSBpZiAob3V0cHV0IGluc3RhbmNlb2YgRmlsZU91dHB1dFN0cmVhbSkg
ewotICAgICAgICAvLyBVc2UgYSBjaGFubmVsIHRvIHdyaXRlIG91dCB0aGUgQnl0ZUJ1ZmZlci4g
VGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgZW1wdHkgdGhlIGJ1ZmZlci4KLSAgICAgICAgKChGaWxl
T3V0cHV0U3RyZWFtKSBvdXRwdXQpLmdldENoYW5uZWwoKS53cml0ZShidWZmZXIpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gUmVhZCBhbGwgb2YgdGhlIGRhdGEgZnJvbSB0aGUgYnVmZmVy
IHRvIGFuIGFycmF5LgotICAgICAgICAvLyBUT0RPKG5hdGhhbm1pdHRsZXIpOiBDb25zaWRlciBw
ZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgZm9yIG90aGVyICJrbm93biIgc3RyZWFtIHR5cGVzLgot
ICAgICAgICBmaW5hbCBieXRlW10gYXJyYXkgPSBnZXRPckNyZWF0ZUJ1ZmZlcihidWZmZXIucmVt
YWluaW5nKCkpOwotICAgICAgICB3aGlsZSAoYnVmZmVyLmhhc1JlbWFpbmluZygpKSB7Ci0gICAg
ICAgICAgaW50IGxlbmd0aCA9IG1pbihidWZmZXIucmVtYWluaW5nKCksIGFycmF5Lmxlbmd0aCk7
Ci0gICAgICAgICAgYnVmZmVyLmdldChhcnJheSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgICBvdXRw
dXQud3JpdGUoYXJyYXksIDAsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGZp
bmFsbHkgewotICAgICAgLy8gUmVzdG9yZSB0aGUgaW5pdGlhbCBwb3NpdGlvbi4KLSAgICAgIGJ1
ZmZlci5wb3NpdGlvbihpbml0aWFsUG9zKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRp
YyBieXRlW10gZ2V0T3JDcmVhdGVCdWZmZXIoaW50IHJlcXVlc3RlZFNpemUpIHsKLSAgICByZXF1
ZXN0ZWRTaXplID0gbWF4KHJlcXVlc3RlZFNpemUsIE1JTl9DQUNIRURfQlVGRkVSX1NJWkUpOwot
Ci0gICAgYnl0ZVtdIGJ1ZmZlciA9IGdldEJ1ZmZlcigpOwotICAgIC8vIE9ubHkgYWxsb2NhdGUg
aWYgd2UgbmVlZCB0by4KLSAgICBpZiAoYnVmZmVyID09IG51bGwgfHwgbmVlZFRvUmVhbGxvY2F0
ZShyZXF1ZXN0ZWRTaXplLCBidWZmZXIubGVuZ3RoKSkgewotICAgICAgYnVmZmVyID0gbmV3IGJ5
dGVbcmVxdWVzdGVkU2l6ZV07Ci0KLSAgICAgIC8vIE9ubHkgY2FjaGUgdGhlIGJ1ZmZlciBpZiBp
dCdzIG5vdCB0b28gYmlnLgotICAgICAgaWYgKHJlcXVlc3RlZFNpemUgPD0gTUFYX0NBQ0hFRF9C
VUZGRVJfU0laRSkgewotICAgICAgICBzZXRCdWZmZXIoYnVmZmVyKTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbmVl
ZFRvUmVhbGxvY2F0ZShpbnQgcmVxdWVzdGVkU2l6ZSwgaW50IGJ1ZmZlckxlbmd0aCkgewotICAg
IC8vIEZpcnN0IGNoZWNrIGFnYWluc3QganVzdCB0aGUgcmVxdWVzdGVkIGxlbmd0aCB0byBhdm9p
ZCB0aGUgbXVsdGlwbHkuCi0gICAgcmV0dXJuIGJ1ZmZlckxlbmd0aCA8IHJlcXVlc3RlZFNpemUK
LSAgICAgICAgJiYgYnVmZmVyTGVuZ3RoIDwgcmVxdWVzdGVkU2l6ZSAqIEJVRkZFUl9SRUFMTE9D
QVRJT05fVEhSRVNIT0xEOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIGdldEJ1ZmZl
cigpIHsKLSAgICBTb2Z0UmVmZXJlbmNlPGJ5dGVbXT4gc3IgPSBCVUZGRVIuZ2V0KCk7Ci0gICAg
cmV0dXJuIHNyID09IG51bGwgPyBudWxsIDogc3IuZ2V0KCk7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyB2b2lkIHNldEJ1ZmZlcihieXRlW10gdmFsdWUpIHsKLSAgICBCVUZGRVIuc2V0KG5ldyBT
b2Z0UmVmZXJlbmNlPGJ5dGVbXT4odmFsdWUpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0J5dGVPdXRwdXQuamF2YSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9CeXRlT3V0cHV0LmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiN2IwNGM4YzJjNGQ3MWMwOTRhM2JkNjI5
NmYwYTYwZDk1YzBmMmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0J5dGVPdXRw
dXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBv
cnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi0v
KioKLSAqIEFuIG91dHB1dCB0YXJnZXQgZm9yIHJhdyBieXRlcy4gVGhpcyBpbnRlcmZhY2UgcHJv
dmlkZXMgc2VtYW50aWNzIHRoYXQgc3VwcG9ydCB0d28gdHlwZXMgb2YKLSAqIHdyaXRpbmc6Ci0g
KgotICogPHAvPjxiPlRyYWRpdGlvbmFsIHdyaXRlIG9wZXJhdGlvbnM6PC9iPgotICogKGFzIGRl
ZmluZWQgYnkge0BsaW5rIGphdmEuaW8uT3V0cHV0U3RyZWFtfSkgd2hlcmUgdGhlIHRhcmdldCBt
ZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGVpdGhlcgotICogY29weWluZyB0aGUgZGF0YSBvciBj
b21wbGV0aW5nIHRoZSB3cml0ZSBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIG1ldGhvZCBjYWxs
LgotICoKLSAqIDxwLz48Yj5MYXp5IHdyaXRlIG9wZXJhdGlvbnM6PC9iPiB3aGVyZSB0aGUgY2Fs
bGVyIGd1YXJhbnRlZXMgdGhhdCBpdCB3aWxsIG5ldmVyIG1vZGlmeSB0aGUKLSAqIHByb3ZpZGVk
IGJ1ZmZlciBhbmQgaXQgY2FuIHRoZXJlZm9yZSBiZSBjb25zaWRlcmVkIGltbXV0YWJsZS4gVGhl
IHRhcmdldCBtZXRob2QgaXMgZnJlZSB0bwotICogbWFpbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhl
IGJ1ZmZlciBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoZSBtZXRob2QgY2FsbCAoZS5nLiB1bnRpbCB0
aGUgd3JpdGUKLSAqIG9wZXJhdGlvbiBjb21wbGV0ZXMpLgotICovCi1ARXhwZXJpbWVudGFsQXBp
Ci1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQnl0ZU91dHB1dCB7Ci0gIC8qKgotICAgKiBXcml0ZXMg
YSBzaW5nbGUgYnl0ZS4KLSAgICoKLSAgICogQHBhcmFtIHZhbHVlIHRoZSBieXRlIHRvIGJlIHdy
aXR0ZW4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiB0aHJvd24gaWYgYW4gZXJyb3Igb2NjdXJy
ZWQgd2hpbGUgd3JpdGluZwotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGUoYnl0
ZSB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZXMgYSBzZXF1
ZW5jZSBvZiBieXRlcy4gVGhlIHtAbGluayBCeXRlT3V0cHV0fSBtdXN0IGNvcHkge0Bjb2RlIHZh
bHVlfSBpZiBpdCB3aWxsCi0gICAqIG5vdCBiZSBwcm9jZXNzZWQgcHJpb3IgdG8gdGhlIHJldHVy
biBvZiB0aGlzIG1ldGhvZCBjYWxsLCBzaW5jZSB7QGNvZGUgdmFsdWV9IG1heSBiZQotICAgKiBy
ZXVzZWQvYWx0ZXJlZCBieSB0aGUgY2FsbGVyLgotICAgKgotICAgKiA8cD5OT1RFOiBUaGlzIG1l
dGhvZCA8c3Ryb25nPk1VU1QgTk9UPC9zdHJvbmc+IG1vZGlmeSB0aGUge0Bjb2RlIHZhbHVlfS4g
RG9pbmcgc28gaXMgYQotICAgKiBwcm9ncmFtbWluZyBlcnJvciBhbmQgd2lsbCBsZWFkIHRvIGRh
dGEgY29ycnVwdGlvbiB3aGljaCB3aWxsIGJlIGRpZmZpY3VsdCB0byBkZWJ1Zy4KLSAgICoKLSAg
ICogQHBhcmFtIHZhbHVlIHRoZSBieXRlcyB0byBiZSB3cml0dGVuCi0gICAqIEBwYXJhbSBvZmZz
ZXQgdGhlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIHdyaXRhYmxlIHJhbmdlCi0gICAqIEBw
YXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSBzdGFydGluZyBmcm9tIHtA
Y29kZSBvZmZzZXR9Ci0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gdGhyb3duIGlmIGFuIGVycm9y
IG9jY3VycmVkIHdoaWxlIHdyaXRpbmcKLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdy
aXRlKGJ5dGVbXSB2YWx1ZSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIElPRXhjZXB0
aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZXMgYSBzZXF1ZW5jZSBvZiBieXRlcy4gVGhlIHtAbGlu
ayBCeXRlT3V0cHV0fSBpcyBmcmVlIHRvIHJldGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgdmFsdWUK
LSAgICogYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIG1ldGhvZCBjYWxsIChlLmcuIHdyaXRlIGxh
dGVyKSBzaW5jZSBpdCBpcyBjb25zaWRlcmVkIGltbXV0YWJsZSBhbmQgaXMKLSAgICogZ3VhcmFu
dGVlZCBub3QgdG8gY2hhbmdlIGJ5IHRoZSBjYWxsZXIuCi0gICAqCi0gICAqIDxwPk5PVEU6IFRo
aXMgbWV0aG9kIDxzdHJvbmc+TVVTVCBOT1Q8L3N0cm9uZz4gbW9kaWZ5IHRoZSB7QGNvZGUgdmFs
dWV9LiBEb2luZyBzbyBpcyBhCi0gICAqIHByb2dyYW1taW5nIGVycm9yIGFuZCB3aWxsIGxlYWQg
dG8gZGF0YSBjb3JydXB0aW9uIHdoaWNoIHdpbGwgYmUgZGlmZmljdWx0IHRvIGRlYnVnLgotICAg
KgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIGJ5dGVzIHRvIGJlIHdyaXR0ZW4KLSAgICogQHBhcmFt
IG9mZnNldCB0aGUgb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgd3JpdGFibGUgcmFuZ2UKLSAg
ICogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlIHN0YXJ0aW5nIGZy
b20ge0Bjb2RlIG9mZnNldH0KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiB0aHJvd24gaWYgYW4g
ZXJyb3Igb2NjdXJyZWQgd2hpbGUgd3JpdGluZwotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IHZv
aWQgd3JpdGVMYXp5KGJ5dGVbXSB2YWx1ZSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dz
IElPRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZXMgYSBzZXF1ZW5jZSBvZiBieXRlcy4g
VGhlIHtAbGluayBCeXRlT3V0cHV0fSBtdXN0IGNvcHkge0Bjb2RlIHZhbHVlfSBpZiBpdCB3aWxs
Ci0gICAqIG5vdCBiZSBwcm9jZXNzZWQgcHJpb3IgdG8gdGhlIHJldHVybiBvZiB0aGlzIG1ldGhv
ZCBjYWxsLCBzaW5jZSB7QGNvZGUgdmFsdWV9IG1heSBiZQotICAgKiByZXVzZWQvYWx0ZXJlZCBi
eSB0aGUgY2FsbGVyLgotICAgKgotICAgKiA8cD5OT1RFOiBUaGlzIG1ldGhvZCA8c3Ryb25nPk1V
U1QgTk9UPC9zdHJvbmc+IG1vZGlmeSB0aGUge0Bjb2RlIHZhbHVlfS4gRG9pbmcgc28gaXMgYQot
ICAgKiBwcm9ncmFtbWluZyBlcnJvciBhbmQgd2lsbCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiB3
aGljaCB3aWxsIGJlIGRpZmZpY3VsdCB0byBkZWJ1Zy4KLSAgICoKLSAgICogQHBhcmFtIHZhbHVl
IHRoZSBieXRlcyB0byBiZSB3cml0dGVuLiBVcG9uIHJldHVybmluZyBmcm9tIHRoaXMgY2FsbCwg
dGhlIHtAY29kZSBwb3NpdGlvbn0gb2YKLSAgICogdGhpcyBidWZmZXIgd2lsbCBiZSBzZXQgdG8g
dGhlIHtAY29kZSBsaW1pdH0KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiB0aHJvd24gaWYgYW4g
ZXJyb3Igb2NjdXJyZWQgd2hpbGUgd3JpdGluZwotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IHZv
aWQgd3JpdGUoQnl0ZUJ1ZmZlciB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIC8qKgot
ICAgKiBXcml0ZXMgYSBzZXF1ZW5jZSBvZiBieXRlcy4gVGhlIHtAbGluayBCeXRlT3V0cHV0fSBp
cyBmcmVlIHRvIHJldGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgdmFsdWUKLSAgICogYmV5b25kIHRo
ZSBzY29wZSBvZiB0aGlzIG1ldGhvZCBjYWxsIChlLmcuIHdyaXRlIGxhdGVyKSBzaW5jZSBpdCBp
cyBjb25zaWRlcmVkIGltbXV0YWJsZSBhbmQgaXMKLSAgICogZ3VhcmFudGVlZCBub3QgdG8gY2hh
bmdlIGJ5IHRoZSBjYWxsZXIuCi0gICAqCi0gICAqIDxwPk5PVEU6IFRoaXMgbWV0aG9kIDxzdHJv
bmc+TVVTVCBOT1Q8L3N0cm9uZz4gbW9kaWZ5IHRoZSB7QGNvZGUgdmFsdWV9LiBEb2luZyBzbyBp
cyBhCi0gICAqIHByb2dyYW1taW5nIGVycm9yIGFuZCB3aWxsIGxlYWQgdG8gZGF0YSBjb3JydXB0
aW9uIHdoaWNoIHdpbGwgYmUgZGlmZmljdWx0IHRvIGRlYnVnLgotICAgKgotICAgKiBAcGFyYW0g
dmFsdWUgdGhlIGJ5dGVzIHRvIGJlIHdyaXR0ZW4uIFVwb24gcmV0dXJuaW5nIGZyb20gdGhpcyBj
YWxsLCB0aGUge0Bjb2RlIHBvc2l0aW9ufSBvZgotICAgKiB0aGlzIGJ1ZmZlciB3aWxsIGJlIHNl
dCB0byB0aGUge0Bjb2RlIGxpbWl0fQotICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIHRocm93biBp
ZiBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB3cml0aW5nCi0gICAqLwotICBwdWJsaWMgYWJzdHJh
Y3Qgdm9pZCB3cml0ZUxhenkoQnl0ZUJ1ZmZlciB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L0J5dGVTdHJpbmcuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9CeXRlU3RyaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyYzk0
NTA4NWY2MTk1YzVlOGFlNTg3ODg1OWMxZWQ3NjljYThjOWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL0J5dGVTdHJpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NDQgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdv
b2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1p
bXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4
Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW52
YWxpZE9iamVjdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOwot
aW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxl
OwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBq
YXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWlt
cG9ydCBqYXZhLm5pby5jaGFyc2V0LlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbjsKLWltcG9y
dCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQg
amF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1w
b3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBq
YXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBJbW11dGFibGUgc2Vx
dWVuY2Ugb2YgYnl0ZXMuICBTdWJzdHJpbmcgaXMgc3VwcG9ydGVkIGJ5IHNoYXJpbmcgdGhlIHJl
ZmVyZW5jZQotICogdG8gdGhlIGltbXV0YWJsZSB1bmRlcmx5aW5nIGJ5dGVzLCBhcyB3aXRoIHtA
bGluayBTdHJpbmd9LiAgQ29uY2F0ZW5hdGlvbiBpcwotICogbGlrZXdpc2Ugc3VwcG9ydGVkIHdp
dGhvdXQgY29weWluZyAobG9uZyBzdHJpbmdzKSBieSBidWlsZGluZyBhIHRyZWUgb2YKLSAqIHBp
ZWNlcyBpbiB7QGxpbmsgUm9wZUJ5dGVTdHJpbmd9LgotICogPHA+Ci0gKiBMaWtlIHtAbGluayBT
dHJpbmd9LCB0aGUgY29udGVudHMgb2YgYSB7QGxpbmsgQnl0ZVN0cmluZ30gY2FuIG5ldmVyIGJl
Ci0gKiBvYnNlcnZlZCB0byBjaGFuZ2UsIG5vdCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiBhIGRh
dGEgcmFjZSBvciBpbmNvcnJlY3QKLSAqIEFQSSB1c2FnZSBpbiB0aGUgY2xpZW50IGNvZGUuCi0g
KgotICogQGF1dGhvciBjcmF6eWJvYkBnb29nbGUuY29tIEJvYiBMZWUKLSAqIEBhdXRob3Iga2Vu
dG9uQGdvb2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKiBAYXV0aG9yIGNhcmxhbnRvbkBnb29nbGUu
Y29tIENhcmwgSGF2ZXJsCi0gKiBAYXV0aG9yIG1hcnRpbnJiQGdvb2dsZS5jb20gTWFydGluIEJ1
Y2hob2x6Ci0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCeXRlU3RyaW5nIGltcGxlbWVudHMg
SXRlcmFibGU8Qnl0ZT4sIFNlcmlhbGl6YWJsZSB7Ci0KLSAgLyoqCi0gICAqIFdoZW4gdHdvIHN0
cmluZ3MgdG8gYmUgY29uY2F0ZW5hdGVkIGhhdmUgYSBjb21iaW5lZCBsZW5ndGggc2hvcnRlciB0
aGFuCi0gICAqIHRoaXMsIHdlIGp1c3QgY29weSB0aGVpciBieXRlcyBvbiB7QGxpbmsgI2NvbmNh
dChCeXRlU3RyaW5nKX0uCi0gICAqIFRoZSB0cmFkZS1vZmYgaXMgY29weSBzaXplIHZlcnN1cyB0
aGUgb3ZlcmhlYWQgb2YgY3JlYXRpbmcgdHJlZSBub2RlcwotICAgKiBpbiB7QGxpbmsgUm9wZUJ5
dGVTdHJpbmd9LgotICAgKi8KLSAgc3RhdGljIGZpbmFsIGludCBDT05DQVRFTkFURV9CWV9DT1BZ
X1NJWkUgPSAxMjg7Ci0KLSAgLyoqCi0gICAqIFdoZW4gY29weWluZyBhbiBJbnB1dFN0cmVhbSBp
bnRvIGEgQnl0ZVN0cmluZyB3aXRoIC5yZWFkRnJvbSgpLAotICAgKiB0aGUgY2h1bmtzIGluIHRo
ZSB1bmRlcmx5aW5nIHJvcGUgc3RhcnQgYXQgMjU2IGJ5dGVzLCBidXQgZG91YmxlCi0gICAqIGVh
Y2ggaXRlcmF0aW9uIHVwIHRvIDgxOTIgYnl0ZXMuCi0gICAqLwotICBzdGF0aWMgZmluYWwgaW50
IE1JTl9SRUFEX0ZST01fQ0hVTktfU0laRSA9IDB4MTAwOyAgLy8gMjU2YgotICBzdGF0aWMgZmlu
YWwgaW50IE1BWF9SRUFEX0ZST01fQ0hVTktfU0laRSA9IDB4MjAwMDsgIC8vIDhrCi0KLSAgLyoq
Ci0gICAqIEVtcHR5IHtAY29kZSBCeXRlU3RyaW5nfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgQnl0ZVN0cmluZyBFTVBUWSA9IG5ldyBMaXRlcmFsQnl0ZVN0cmluZyhJbnRlcm5hbC5F
TVBUWV9CWVRFX0FSUkFZKTsKLSAgCi0gIC8qKiAKLSAgICogQW4gaW50ZXJmYWNlIHRvIGVmZmlj
aWVudGx5IGNvcHkge0Bjb2RlIGJ5dGVbXX0uCi0gICAqIAotICAgKiA8cD5PbmUgb2YgdGhlIG5v
dGljYWJsZSBjb3N0cyBvZiBjb3B5aW5nIGEgYnl0ZVtdIGludG8gYSBuZXcgYXJyYXkgdXNpbmcg
Ci0gICAqIHtAY29kZSBTeXN0ZW0uYXJyYXljb3B5fSBpcyBudWxsaWZpY2F0aW9uIG9mIGEgbmV3
IGJ1ZmZlciBiZWZvcmUgdGhlIGNvcHkuIEl0IGhhcyBiZWVuIHNob3duIAotICAgKiB0aGUgSG90
c3BvdCBWTSBpcyBjYXBhYmxlIHRvIGludHJpc2ljZnkge0Bjb2RlIEFycmF5cy5jb3B5T2ZSYW5n
ZX0gb3BlcmF0aW9uIHRvIGF2b2lkIHRoaXMKLSAgICogZXhwZW5zaXZlIG51bGxpZmljYXRpb24g
YW5kIHByb3ZpZGUgc3Vic3RhbnRpYWwgcGVyZm9ybWFuY2UgZ2Fpbi4gVW5mb3J0dW5hdGVseSB0
aGlzIGRvZXMgbm90Ci0gICAqIGhvbGQgb24gQW5kcm9pZCBydW50aW1lcyBhbmQgY291bGQgbWFr
ZSB0aGUgY29weSBzbGlnaHRseSBzbG93ZXIgZHVlIHRvIGFkZGl0aW9uYWwgY29kZSBpbgotICAg
KiB0aGUge0Bjb2RlIEFycmF5cy5jb3B5T2ZSYW5nZX0uIFRodXMgd2UgcHJvdmlkZSB0d28gZGlm
ZmVyZW50IGltcGxlbWVudGF0aW9uIGZvciBhcnJheSBjb3BpZXIKLSAgICogZm9yIEhvdHNwb3Qg
YW5kIEFuZHJvaWQgcnVudGltZXMuIAotICAgKi8KLSAgcHJpdmF0ZSBpbnRlcmZhY2UgQnl0ZUFy
cmF5Q29waWVyIHsKLSAgICAvKioKLSAgICAgKiBDb3BpZXMgdGhlIHNwZWNpZmllZCByYW5nZSBv
ZiB0aGUgc3BlY2lmaWVkIGFycmF5IGludG8gYSBuZXcgYXJyYXkKLSAgICAgKi8KLSAgICBieXRl
W10gY29weUZyb20oYnl0ZVtdIGJ5dGVzLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSk7Ci0gIH0KLSAg
Ci0gIC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB7QGNvZGUgQnl0ZUFycmF5Q29waWVyfSB3aGljaCB1
c2VzIHtAbGluayBTeXN0ZW0jYXJyYXljb3B5fS4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
Y2xhc3MgU3lzdGVtQnl0ZUFycmF5Q29waWVyIGltcGxlbWVudHMgQnl0ZUFycmF5Q29waWVyIHsK
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYnl0ZVtdIGNvcHlGcm9tKGJ5dGVbXSBieXRlcywg
aW50IG9mZnNldCwgaW50IHNpemUpIHsKLSAgICAgIGJ5dGVbXSBjb3B5ID0gbmV3IGJ5dGVbc2l6
ZV07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ5dGVzLCBvZmZzZXQsIGNvcHksIDAsIHNpemUp
OwotICAgICAgcmV0dXJuIGNvcHk7Ci0gICAgfQotICB9Ci0gIAotICAvKiogSW1wbGVtZW50YXRp
b24gb2Yge0Bjb2RlIEJ5dGVBcnJheUNvcGllcn0gd2hpY2ggdXNlcyB7QGxpbmsgQXJyYXlzI2Nv
cHlPZlJhbmdlfS4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgQXJyYXlzQnl0ZUFy
cmF5Q29waWVyIGltcGxlbWVudHMgQnl0ZUFycmF5Q29waWVyIHsKLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgYnl0ZVtdIGNvcHlGcm9tKGJ5dGVbXSBieXRlcywgaW50IG9mZnNldCwgaW50IHNp
emUpIHsKLSAgICAgIHJldHVybiBBcnJheXMuY29weU9mUmFuZ2UoYnl0ZXMsIG9mZnNldCwgb2Zm
c2V0ICsgc2l6ZSk7Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCeXRl
QXJyYXlDb3BpZXIgYnl0ZUFycmF5Q29waWVyOwotICBzdGF0aWMgewotICAgIGJvb2xlYW4gaXNB
bmRyb2lkID0gdHJ1ZTsKLSAgICB0cnkgewotICAgICAgQ2xhc3MuZm9yTmFtZSgiYW5kcm9pZC5j
b250ZW50LkNvbnRleHQiKTsKLSAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUp
IHsKLSAgICAgIGlzQW5kcm9pZCA9IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBieXRlQXJyYXlD
b3BpZXIgPSBpc0FuZHJvaWQgPyBuZXcgU3lzdGVtQnl0ZUFycmF5Q29waWVyKCkgOiBuZXcgQXJy
YXlzQnl0ZUFycmF5Q29waWVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FjaGVkIGhhc2ggdmFs
dWUuIEludGVudGlvbmFsbHkgYWNjZXNzZWQgdmlhIGEgZGF0YSByYWNlLCB3aGljaAotICAgKiBp
cyBzYWZlIGJlY2F1c2Ugb2YgdGhlIEphdmEgTWVtb3J5IE1vZGVsJ3MgIm5vIG91dC1vZi10aGlu
LWFpciB2YWx1ZXMiCi0gICAqIGd1YXJhbnRlZXMgZm9yIGludHMuIEEgdmFsdWUgb2YgMCBpbXBs
aWVzIHRoYXQgdGhlIGhhc2ggaGFzIG5vdCBiZWVuIHNldC4KLSAgICovCi0gIHByaXZhdGUgaW50
IGhhc2ggPSAwOwotCi0gIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSB0byBwcmV2ZW50IHN1
YmNsYXNzaW5nIG91dHNpZGUgb2YgdGhpcyBwYWNrYWdlLAotICBCeXRlU3RyaW5nKCkge30KLQot
ICAvKioKLSAgICogR2V0cyB0aGUgYnl0ZSBhdCB0aGUgZ2l2ZW4gaW5kZXguIFRoaXMgbWV0aG9k
IHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yCi0gICAqIHJhbmRvbSBhY2Nlc3MgdG8gaW5kaXZpZHVh
bCBieXRlcy4gVG8gYWNjZXNzIGJ5dGVzIHNlcXVlbnRpYWxseSwgdXNlIHRoZQotICAgKiB7QGxp
bmsgQnl0ZUl0ZXJhdG9yfSByZXR1cm5lZCBieSB7QGxpbmsgI2l0ZXJhdG9yKCl9LCBhbmQgY2Fs
bCB7QGxpbmsKLSAgICogI3N1YnN0cmluZyhpbnQsIGludCl9IGZpcnN0IGlmIG5lY2Vzc2FyeS4K
LSAgICoKLSAgICogQHBhcmFtIGluZGV4IGluZGV4IG9mIGJ5dGUKLSAgICogQHJldHVybiB0aGUg
dmFsdWUKLSAgICogQHRocm93cyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHtAY29kZSBpbmRl
eCA8IDAgb3IgaW5kZXggPj0gc2l6ZX0KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBieXRlIGJ5
dGVBdChpbnQgaW5kZXgpOwotCi0gIC8qKgotICAgKiBSZXR1cm4gYSB7QGxpbmsgQnl0ZVN0cmlu
Zy5CeXRlSXRlcmF0b3J9IG92ZXIgdGhlIGJ5dGVzIGluIHRoZSBCeXRlU3RyaW5nLgotICAgKiBU
byBhdm9pZCBhdXRvLWJveGluZywgeW91IG1heSBnZXQgdGhlIGl0ZXJhdG9yIG1hbnVhbGx5IGFu
ZCBjYWxsCi0gICAqIHtAbGluayBCeXRlSXRlcmF0b3IjbmV4dEJ5dGUoKX0uCi0gICAqCi0gICAq
IEByZXR1cm4gdGhlIGl0ZXJhdG9yCi0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFs
IEJ5dGVJdGVyYXRvciBpdGVyYXRvcigpIHsKLSAgICByZXR1cm4gbmV3IEJ5dGVJdGVyYXRvcigp
IHsKLSAgICAgIHByaXZhdGUgaW50IHBvc2l0aW9uID0gMDsKLSAgICAgIHByaXZhdGUgZmluYWwg
aW50IGxpbWl0ID0gc2l6ZSgpOwotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29s
ZWFuIGhhc05leHQoKSB7Ci0gICAgICAgIHJldHVybiBwb3NpdGlvbiA8IGxpbWl0OwotICAgICAg
fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBCeXRlIG5leHQoKSB7Ci0gICAgICAg
IC8vIEJveGluZyBjYWxscyBCeXRlLnZhbHVlT2YoYnl0ZSksIHdoaWNoIGRvZXMgbm90IGluc3Rh
bnRpYXRlLgotICAgICAgICByZXR1cm4gbmV4dEJ5dGUoKTsKLSAgICAgIH0KLQotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgYnl0ZSBuZXh0Qnl0ZSgpIHsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICByZXR1cm4gYnl0ZUF0KHBvc2l0aW9uKyspOwotICAgICAgICB9IGNhdGNoIChJbmRl
eE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRWxl
bWVudEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7Ci0gICAgICAgIHRocm93
IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgICAgfQotICAgIH07Ci0g
IH0KLQotICAvKioKLSAgICogVGhpcyBpbnRlcmZhY2UgZXh0ZW5kcyB7QGNvZGUgSXRlcmF0b3I8
Qnl0ZT59LCBzbyB0aGF0IHdlIGNhbiByZXR1cm4gYW4KLSAgICogdW5ib3hlZCB7QGNvZGUgYnl0
ZX0uCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIEJ5dGVJdGVyYXRvciBleHRlbmRzIEl0ZXJh
dG9yPEJ5dGU+IHsKLSAgICAvKioKLSAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byB7QGxpbmsgSXRl
cmF0b3IjbmV4dCgpfSB0aGF0IHJldHVybnMgYW4KLSAgICAgKiB1bmJveGVkIHByaW1pdGl2ZSB7
QGNvZGUgYnl0ZX0uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBuZXh0IHtAY29kZSBieXRl
fSBpbiB0aGUgaXRlcmF0aW9uCi0gICAgICogQHRocm93cyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9u
IGlmIHRoZSBpdGVyYXRpb24gaGFzIG5vIG1vcmUgZWxlbWVudHMKLSAgICAgKi8KLSAgICBieXRl
IG5leHRCeXRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGJ5dGVz
LgotICAgKgotICAgKiBAcmV0dXJuIHNpemUgaW4gYnl0ZXMKLSAgICovCi0gIHB1YmxpYyBhYnN0
cmFjdCBpbnQgc2l6ZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHtAY29kZSB0cnVlfSBpZiB0
aGUgc2l6ZSBpcyB7QGNvZGUgMH0sIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgotICAgKgotICAg
KiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpcyB6ZXJvIGJ5dGVzIGxvbmcKLSAgICovCi0gIHB1Ymxp
YyBmaW5hbCBib29sZWFuIGlzRW1wdHkoKSB7Ci0gICAgcmV0dXJuIHNpemUoKSA9PSAwOwotICB9
Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLSAgLy8gQnl0ZVN0cmluZyAtPiBzdWJzdHJpbmcKLQotICAvKioK
LSAgICogUmV0dXJuIHRoZSBzdWJzdHJpbmcgZnJvbSB7QGNvZGUgYmVnaW5JbmRleH0sIGluY2x1
c2l2ZSwgdG8gdGhlIGVuZCBvZiB0aGUKLSAgICogc3RyaW5nLgotICAgKgotICAgKiBAcGFyYW0g
YmVnaW5JbmRleCBzdGFydCBhdCB0aGlzIGluZGV4Ci0gICAqIEByZXR1cm4gc3Vic3RyaW5nIHNo
YXJpbmcgdW5kZXJseWluZyBkYXRhCi0gICAqIEB0aHJvd3MgSW5kZXhPdXRPZkJvdW5kc0V4Y2Vw
dGlvbiBpZiB7QGNvZGUgYmVnaW5JbmRleCA8IDB9IG9yCi0gICAqICAgICB7QGNvZGUgYmVnaW5J
bmRleCA+IHNpemUoKX0uCi0gICAqLwotICBwdWJsaWMgZmluYWwgQnl0ZVN0cmluZyBzdWJzdHJp
bmcoaW50IGJlZ2luSW5kZXgpIHsKLSAgICByZXR1cm4gc3Vic3RyaW5nKGJlZ2luSW5kZXgsIHNp
emUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBzdWJzdHJpbmcgZnJvbSB7QGNv
ZGUgYmVnaW5JbmRleH0sIGluY2x1c2l2ZSwgdG8ge0Bjb2RlCi0gICAqIGVuZEluZGV4fSwgZXhj
bHVzaXZlLgotICAgKgotICAgKiBAcGFyYW0gYmVnaW5JbmRleCBzdGFydCBhdCB0aGlzIGluZGV4
Ci0gICAqIEBwYXJhbSBlbmRJbmRleCAgIHRoZSBsYXN0IGNoYXJhY3RlciBpcyB0aGUgb25lIGJl
Zm9yZSB0aGlzIGluZGV4Ci0gICAqIEByZXR1cm4gc3Vic3RyaW5nIHNoYXJpbmcgdW5kZXJseWlu
ZyBkYXRhCi0gICAqIEB0aHJvd3MgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiB7QGNvZGUg
YmVnaW5JbmRleCA8IDB9LAotICAgKiAgICAge0Bjb2RlIGVuZEluZGV4ID4gc2l6ZSgpfSwgb3Ig
e0Bjb2RlIGJlZ2luSW5kZXggPiBlbmRJbmRleH0uCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3Qg
Qnl0ZVN0cmluZyBzdWJzdHJpbmcoaW50IGJlZ2luSW5kZXgsIGludCBlbmRJbmRleCk7Ci0KLSAg
LyoqCi0gICAqIFRlc3RzIGlmIHRoaXMgYnl0ZXN0cmluZyBzdGFydHMgd2l0aCB0aGUgc3BlY2lm
aWVkIHByZWZpeC4KLSAgICogU2ltaWxhciB0byB7QGxpbmsgU3RyaW5nI3N0YXJ0c1dpdGgoU3Ry
aW5nKX0KLSAgICoKLSAgICogQHBhcmFtIHByZWZpeCB0aGUgcHJlZml4LgotICAgKiBAcmV0dXJu
IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBieXRlIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRo
ZQotICAgKiAgICAgICAgIGFyZ3VtZW50IGlzIGEgcHJlZml4IG9mIHRoZSBieXRlIHNlcXVlbmNl
IHJlcHJlc2VudGVkIGJ5Ci0gICAqICAgICAgICAgdGhpcyBzdHJpbmc7IDxjb2RlPmZhbHNlPC9j
b2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBzdGFydHNXaXRo
KEJ5dGVTdHJpbmcgcHJlZml4KSB7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBwcmVmaXguc2l6ZSgp
ICYmCi0gICAgICAgICAgIHN1YnN0cmluZygwLCBwcmVmaXguc2l6ZSgpKS5lcXVhbHMocHJlZml4
KTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyBpZiB0aGlzIGJ5dGVzdHJpbmcgZW5kcyB3aXRo
IHRoZSBzcGVjaWZpZWQgc3VmZml4LgotICAgKiBTaW1pbGFyIHRvIHtAbGluayBTdHJpbmcjZW5k
c1dpdGgoU3RyaW5nKX0KLSAgICoKLSAgICogQHBhcmFtIHN1ZmZpeCB0aGUgc3VmZml4LgotICAg
KiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBieXRlIHNlcXVlbmNlIHJlcHJlc2Vu
dGVkIGJ5IHRoZQotICAgKiAgICAgICAgIGFyZ3VtZW50IGlzIGEgc3VmZml4IG9mIHRoZSBieXRl
IHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5Ci0gICAqICAgICAgICAgdGhpcyBzdHJpbmc7IDxjb2Rl
PmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgZmluYWwgYm9vbGVhbiBl
bmRzV2l0aChCeXRlU3RyaW5nIHN1ZmZpeCkgewotICAgIHJldHVybiBzaXplKCkgPj0gc3VmZml4
LnNpemUoKSAmJgotICAgICAgICBzdWJzdHJpbmcoc2l6ZSgpIC0gc3VmZml4LnNpemUoKSkuZXF1
YWxzKHN1ZmZpeCk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBieXRlW10gLT4gQnl0ZVN0
cmluZwotCi0gIC8qKgotICAgKiBDb3BpZXMgdGhlIGdpdmVuIGJ5dGVzIGludG8gYSB7QGNvZGUg
Qnl0ZVN0cmluZ30uCi0gICAqCi0gICAqIEBwYXJhbSBieXRlcyBzb3VyY2UgYXJyYXkKLSAgICog
QHBhcmFtIG9mZnNldCBvZmZzZXQgaW4gc291cmNlIGFycmF5Ci0gICAqIEBwYXJhbSBzaXplIG51
bWJlciBvZiBieXRlcyB0byBjb3B5Ci0gICAqIEByZXR1cm4gbmV3IHtAY29kZSBCeXRlU3RyaW5n
fQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBCeXRlU3RyaW5nIGNvcHlGcm9tKGJ5dGVbXSBieXRl
cywgaW50IG9mZnNldCwgaW50IHNpemUpIHsKLSAgICByZXR1cm4gbmV3IExpdGVyYWxCeXRlU3Ry
aW5nKGJ5dGVBcnJheUNvcGllci5jb3B5RnJvbShieXRlcywgb2Zmc2V0LCBzaXplKSk7Ci0gIH0K
LQotICAvKioKLSAgICogQ29waWVzIHRoZSBnaXZlbiBieXRlcyBpbnRvIGEge0Bjb2RlIEJ5dGVT
dHJpbmd9LgotICAgKgotICAgKiBAcGFyYW0gYnl0ZXMgdG8gY29weQotICAgKiBAcmV0dXJuIG5l
dyB7QGNvZGUgQnl0ZVN0cmluZ30KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnl0ZVN0cmluZyBj
b3B5RnJvbShieXRlW10gYnl0ZXMpIHsKLSAgICByZXR1cm4gY29weUZyb20oYnl0ZXMsIDAsIGJ5
dGVzLmxlbmd0aCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBXcmFwcyB0aGUgZ2l2ZW4gYnl0ZXMg
aW50byBhIHtAY29kZSBCeXRlU3RyaW5nfS4gSW50ZW5kZWQgZm9yIGludGVybmFsIG9ubHkKLSAg
ICogdXNhZ2UgdG8gZm9yY2UgYSBjbGFzc2xvYWQgb2YgQnl0ZVN0cmluZyBiZWZvcmUgTGl0ZXJh
bEJ5dGVTdHJpbmcuCi0gICAqLwotICBzdGF0aWMgQnl0ZVN0cmluZyB3cmFwKGJ5dGVbXSBieXRl
cykgewotICAgIC8vIFRPRE8oZHdlaXMpOiBSZXR1cm4gRU1QVFkgd2hlbiBieXRlcyBhcmUgZW1w
dHkgdG8gcmVkdWNlIGFsbG9jYXRpb25zPwotICAgIHJldHVybiBuZXcgTGl0ZXJhbEJ5dGVTdHJp
bmcoYnl0ZXMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFdyYXBzIHRoZSBnaXZlbiBieXRlcyBpbnRv
IGEge0Bjb2RlIEJ5dGVTdHJpbmd9LiBJbnRlbmRlZCBmb3IgaW50ZXJuYWwgb25seQotICAgKiB1
c2FnZSB0byBmb3JjZSBhIGNsYXNzbG9hZCBvZiBCeXRlU3RyaW5nIGJlZm9yZSBCb3VuZGVkQnl0
ZVN0cmluZyBhbmQKLSAgICogTGl0ZXJhbEJ5dGVTdHJpbmcuCi0gICAqLwotICBzdGF0aWMgQnl0
ZVN0cmluZyB3cmFwKGJ5dGVbXSBieXRlcywgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotICAg
IHJldHVybiBuZXcgQm91bmRlZEJ5dGVTdHJpbmcoYnl0ZXMsIG9mZnNldCwgbGVuZ3RoKTsKLSAg
fQotCi0gIC8qKgotICAgKiBDb3BpZXMgdGhlIG5leHQge0Bjb2RlIHNpemV9IGJ5dGVzIGZyb20g
YSB7QGNvZGUgamF2YS5uaW8uQnl0ZUJ1ZmZlcn0gaW50bwotICAgKiBhIHtAY29kZSBCeXRlU3Ry
aW5nfS4KLSAgICoKLSAgICogQHBhcmFtIGJ5dGVzIHNvdXJjZSBidWZmZXIKLSAgICogQHBhcmFt
IHNpemUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAgICogQHJldHVybiBuZXcge0Bjb2RlIEJ5
dGVTdHJpbmd9Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIEJ5dGVTdHJpbmcgY29weUZyb20oQnl0
ZUJ1ZmZlciBieXRlcywgaW50IHNpemUpIHsKLSAgICBieXRlW10gY29weSA9IG5ldyBieXRlW3Np
emVdOwotICAgIGJ5dGVzLmdldChjb3B5KTsKLSAgICByZXR1cm4gbmV3IExpdGVyYWxCeXRlU3Ry
aW5nKGNvcHkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvcGllcyB0aGUgcmVtYWluaW5nIGJ5dGVz
IGZyb20gYSB7QGNvZGUgamF2YS5uaW8uQnl0ZUJ1ZmZlcn0gaW50bwotICAgKiBhIHtAY29kZSBC
eXRlU3RyaW5nfS4KLSAgICoKLSAgICogQHBhcmFtIGJ5dGVzIHNvdXJjZUJ1ZmZlcgotICAgKiBA
cmV0dXJuIG5ldyB7QGNvZGUgQnl0ZVN0cmluZ30KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnl0
ZVN0cmluZyBjb3B5RnJvbShCeXRlQnVmZmVyIGJ5dGVzKSB7Ci0gICAgcmV0dXJuIGNvcHlGcm9t
KGJ5dGVzLCBieXRlcy5yZW1haW5pbmcoKSk7Ci0gIH0KLQotICAvKioKLSAgICogRW5jb2RlcyB7
QGNvZGUgdGV4dH0gaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHVzaW5nIHRoZSBuYW1lZCBjaGFy
c2V0Ci0gICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYSB7QGNvZGUgQnl0ZVN0cmluZ30u
Ci0gICAqCi0gICAqIEBwYXJhbSB0ZXh0IHNvdXJjZSBzdHJpbmcKLSAgICogQHBhcmFtIGNoYXJz
ZXROYW1lIGVuY29kaW5nIHRvIHVzZQotICAgKiBAcmV0dXJuIG5ldyB7QGNvZGUgQnl0ZVN0cmlu
Z30KLSAgICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGlmIHRoZSBlbmNv
ZGluZyBpc24ndCBmb3VuZAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBCeXRlU3RyaW5nIGNvcHlG
cm9tKFN0cmluZyB0ZXh0LCBTdHJpbmcgY2hhcnNldE5hbWUpCi0gICAgICB0aHJvd3MgVW5zdXBw
b3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIG5ldyBMaXRlcmFsQnl0ZVN0cmlu
Zyh0ZXh0LmdldEJ5dGVzKGNoYXJzZXROYW1lKSk7Ci0gIH0KLQotICAvKioKLSAgICogRW5jb2Rl
cyB7QGNvZGUgdGV4dH0gaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHVzaW5nIHRoZSBuYW1lZCBj
aGFyc2V0Ci0gICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYSB7QGNvZGUgQnl0ZVN0cmlu
Z30uCi0gICAqCi0gICAqIEBwYXJhbSB0ZXh0IHNvdXJjZSBzdHJpbmcKLSAgICogQHBhcmFtIGNo
YXJzZXQgZW5jb2RlIHVzaW5nIHRoaXMgY2hhcnNldAotICAgKiBAcmV0dXJuIG5ldyB7QGNvZGUg
Qnl0ZVN0cmluZ30KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnl0ZVN0cmluZyBjb3B5RnJvbShT
dHJpbmcgdGV4dCwgQ2hhcnNldCBjaGFyc2V0KSB7Ci0gICAgcmV0dXJuIG5ldyBMaXRlcmFsQnl0
ZVN0cmluZyh0ZXh0LmdldEJ5dGVzKGNoYXJzZXQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBFbmNv
ZGVzIHtAY29kZSB0ZXh0fSBpbnRvIGEgc2VxdWVuY2Ugb2YgVVRGLTggYnl0ZXMgYW5kIHJldHVy
bnMgdGhlCi0gICAqIHJlc3VsdCBhcyBhIHtAY29kZSBCeXRlU3RyaW5nfS4KLSAgICoKLSAgICog
QHBhcmFtIHRleHQgc291cmNlIHN0cmluZwotICAgKiBAcmV0dXJuIG5ldyB7QGNvZGUgQnl0ZVN0
cmluZ30KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnl0ZVN0cmluZyBjb3B5RnJvbVV0ZjgoU3Ry
aW5nIHRleHQpIHsKLSAgICByZXR1cm4gbmV3IExpdGVyYWxCeXRlU3RyaW5nKHRleHQuZ2V0Qnl0
ZXMoSW50ZXJuYWwuVVRGXzgpKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIElucHV0U3Ry
ZWFtIC0+IEJ5dGVTdHJpbmcKLQotICAvKioKLSAgICogQ29tcGxldGVseSByZWFkcyB0aGUgZ2l2
ZW4gc3RyZWFtJ3MgYnl0ZXMgaW50byBhCi0gICAqIHtAY29kZSBCeXRlU3RyaW5nfSwgYmxvY2tp
bmcgaWYgbmVjZXNzYXJ5IHVudGlsIGFsbCBieXRlcyBhcmUKLSAgICogcmVhZCB0aHJvdWdoIHRv
IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KLSAgICoKLSAgICogPGI+UGVyZm9ybWFuY2Ugbm90ZXM6
PC9iPiBUaGUgcmV0dXJuZWQge0Bjb2RlIEJ5dGVTdHJpbmd9IGlzIGFuCi0gICAqIGltbXV0YWJs
ZSB0cmVlIG9mIGJ5dGUgYXJyYXlzICgiY2h1bmtzIikgb2YgdGhlIHN0cmVhbSBkYXRhLiAgVGhl
Ci0gICAqIGZpcnN0IGNodW5rIGlzIHNtYWxsLCB3aXRoIHN1YnNlcXVlbnQgY2h1bmtzIGVhY2gg
YmVpbmcgZG91YmxlCi0gICAqIHRoZSBzaXplLCB1cCB0byA4Sy4KLSAgICogCi0gICAqIDxwPkVh
Y2ggYnl0ZSByZWFkIGZyb20gdGhlIGlucHV0IHN0cmVhbSB3aWxsIGJlIGNvcGllZCB0d2ljZSB0
byBlbnN1cmUKLSAgICogdGhhdCB0aGUgcmVzdWx0aW5nIEJ5dGVTdHJpbmcgaXMgdHJ1bHkgaW1t
dXRhYmxlLgotICAgKgotICAgKiBAcGFyYW0gc3RyZWFtVG9EcmFpbiBUaGUgc291cmNlIHN0cmVh
bSwgd2hpY2ggaXMgcmVhZCBjb21wbGV0ZWx5Ci0gICAqICAgICBidXQgbm90IGNsb3NlZC4KLSAg
ICogQHJldHVybiBBIG5ldyB7QGNvZGUgQnl0ZVN0cmluZ30gd2hpY2ggaXMgbWFkZSB1cCBvZiBj
aHVua3Mgb2YKLSAgICogICAgIHZhcmlvdXMgc2l6ZXMsIGRlcGVuZGluZyBvbiB0aGUgYmVoYXZp
b3Igb2YgdGhlIHVuZGVybHlpbmcKLSAgICogICAgIHN0cmVhbS4KLSAgICogQHRocm93cyBJT0V4
Y2VwdGlvbiBJT0V4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtCi0gICAq
ICAgICByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgQnl0ZVN0cmluZyByZWFkRnJvbShJbnB1dFN0cmVhbSBzdHJlYW1Ub0RyYWluKQotICAgICAg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gcmVhZEZyb20oc3RyZWFtVG9EcmFpbiwg
TUlOX1JFQURfRlJPTV9DSFVOS19TSVpFLCBNQVhfUkVBRF9GUk9NX0NIVU5LX1NJWkUpOwotICB9
Ci0KLSAgLyoqCi0gICAqIENvbXBsZXRlbHkgcmVhZHMgdGhlIGdpdmVuIHN0cmVhbSdzIGJ5dGVz
IGludG8gYQotICAgKiB7QGNvZGUgQnl0ZVN0cmluZ30sIGJsb2NraW5nIGlmIG5lY2Vzc2FyeSB1
bnRpbCBhbGwgYnl0ZXMgYXJlCi0gICAqIHJlYWQgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSBz
dHJlYW0uCi0gICAqCi0gICAqIDxiPlBlcmZvcm1hbmNlIG5vdGVzOjwvYj4gVGhlIHJldHVybmVk
IHtAY29kZSBCeXRlU3RyaW5nfSBpcyBhbgotICAgKiBpbW11dGFibGUgdHJlZSBvZiBieXRlIGFy
cmF5cyAoImNodW5rcyIpIG9mIHRoZSBzdHJlYW0gZGF0YS4gIFRoZQotICAgKiBjaHVua1NpemUg
cGFyYW1ldGVyIHNldHMgdGhlIHNpemUgb2YgdGhlc2UgYnl0ZSBhcnJheXMuCi0gICAqCi0gICAq
IDxwPkVhY2ggYnl0ZSByZWFkIGZyb20gdGhlIGlucHV0IHN0cmVhbSB3aWxsIGJlIGNvcGllZCB0
d2ljZSB0byBlbnN1cmUKLSAgICogdGhhdCB0aGUgcmVzdWx0aW5nIEJ5dGVTdHJpbmcgaXMgdHJ1
bHkgaW1tdXRhYmxlLgotICAgKgotICAgKiBAcGFyYW0gc3RyZWFtVG9EcmFpbiBUaGUgc291cmNl
IHN0cmVhbSwgd2hpY2ggaXMgcmVhZCBjb21wbGV0ZWx5Ci0gICAqICAgICBidXQgbm90IGNsb3Nl
ZC4KLSAgICogQHBhcmFtIGNodW5rU2l6ZSBUaGUgc2l6ZSBvZiB0aGUgY2h1bmtzIGluIHdoaWNo
IHRvIHJlYWQgdGhlCi0gICAqICAgICBzdHJlYW0uCi0gICAqIEByZXR1cm4gQSBuZXcge0Bjb2Rl
IEJ5dGVTdHJpbmd9IHdoaWNoIGlzIG1hZGUgdXAgb2YgY2h1bmtzIG9mCi0gICAqICAgICB0aGUg
Z2l2ZW4gc2l6ZS4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBJT0V4Y2VwdGlvbiBpcyB0aHJv
d24gaWYgdGhlcmUgaXMgYSBwcm9ibGVtCi0gICAqICAgICByZWFkaW5nIHRoZSB1bmRlcmx5aW5n
IHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnl0ZVN0cmluZyByZWFkRnJvbShJbnB1
dFN0cmVhbSBzdHJlYW1Ub0RyYWluLCBpbnQgY2h1bmtTaXplKQotICAgICAgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICByZXR1cm4gcmVhZEZyb20oc3RyZWFtVG9EcmFpbiwgY2h1bmtTaXplLCBj
aHVua1NpemUpOwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB0aGF0IHRha2VzIHRoZSBjaHVu
ayBzaXplIHJhbmdlIGFzIGEgcGFyYW1ldGVyLgotICBwdWJsaWMgc3RhdGljIEJ5dGVTdHJpbmcg
cmVhZEZyb20oSW5wdXRTdHJlYW0gc3RyZWFtVG9EcmFpbiwgaW50IG1pbkNodW5rU2l6ZSwKLSAg
ICAgIGludCBtYXhDaHVua1NpemUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgQ29sbGVjdGlv
bjxCeXRlU3RyaW5nPiByZXN1bHRzID0gbmV3IEFycmF5TGlzdDxCeXRlU3RyaW5nPigpOwotCi0g
ICAgLy8gY29weSB0aGUgaW5ib3VuZCBieXRlcyBpbnRvIGEgbGlzdCBvZiBjaHVua3M7IHRoZSBj
aHVuayBzaXplCi0gICAgLy8gZ3Jvd3MgZXhwb25lbnRpYWxseSB0byBzdXBwb3J0IGJvdGggc2hv
cnQgYW5kIGxvbmcgc3RyZWFtcy4KLSAgICBpbnQgY2h1bmtTaXplID0gbWluQ2h1bmtTaXplOwot
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBCeXRlU3RyaW5nIGNodW5rID0gcmVhZENodW5rKHN0
cmVhbVRvRHJhaW4sIGNodW5rU2l6ZSk7Ci0gICAgICBpZiAoY2h1bmsgPT0gbnVsbCkgewotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHJlc3VsdHMuYWRkKGNodW5rKTsKLSAgICAgIGNo
dW5rU2l6ZSA9IE1hdGgubWluKGNodW5rU2l6ZSAqIDIsIG1heENodW5rU2l6ZSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIEJ5dGVTdHJpbmcuY29weUZyb20ocmVzdWx0cyk7Ci0gIH0KLQotICAvKioK
LSAgICogQmxvY2tzIHVudGlsIGEgY2h1bmsgb2YgdGhlIGdpdmVuIHNpemUgY2FuIGJlIG1hZGUg
ZnJvbSB0aGUKLSAgICogc3RyZWFtLCBvciBFT0YgaXMgcmVhY2hlZC4gIENhbGxzIHJlYWQoKSBy
ZXBlYXRlZGx5IGluIGNhc2UgdGhlCi0gICAqIGdpdmVuIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiBk
b2Vzbid0IGNvbXBsZXRlbHkgZmlsbCB0aGUgZ2l2ZW4KLSAgICogYnVmZmVyIGluIG9uZSByZWFk
KCkgY2FsbC4KLSAgICoKLSAgICogQHJldHVybiBBIGNodW5rIG9mIHRoZSBkZXNpcmVkIHNpemUs
IG9yIGVsc2UgYSBjaHVuayBhcyBsYXJnZSBhcwotICAgKiB3YXMgYXZhaWxhYmxlIHdoZW4gZW5k
IG9mIHN0cmVhbSB3YXMgcmVhY2hlZC4gUmV0dXJucyBudWxsIGlmIHRoZQotICAgKiBnaXZlbiBz
dHJlYW0gaGFkIG5vIG1vcmUgZGF0YSBpbiBpdC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIEJ5
dGVTdHJpbmcgcmVhZENodW5rKElucHV0U3RyZWFtIGluLCBmaW5hbCBpbnQgY2h1bmtTaXplKQot
ICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGZpbmFsIGJ5dGVbXSBidWYgPSBuZXcg
Ynl0ZVtjaHVua1NpemVdOwotICAgICAgaW50IGJ5dGVzUmVhZCA9IDA7Ci0gICAgICB3aGlsZSAo
Ynl0ZXNSZWFkIDwgY2h1bmtTaXplKSB7Ci0gICAgICAgIGZpbmFsIGludCBjb3VudCA9IGluLnJl
YWQoYnVmLCBieXRlc1JlYWQsIGNodW5rU2l6ZSAtIGJ5dGVzUmVhZCk7Ci0gICAgICAgIGlmIChj
b3VudCA9PSAtMSkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJ5dGVz
UmVhZCArPSBjb3VudDsKLSAgICAgIH0KLQotICAgICAgaWYgKGJ5dGVzUmVhZCA9PSAwKSB7Ci0g
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotCi0gICAgICAvLyBBbHdheXMgbWFrZSBhIGNv
cHkgc2luY2UgSW5wdXRTdHJlYW0gY291bGQgc3RlYWwgYSByZWZlcmVuY2UgdG8gYnVmLgotICAg
ICAgcmV0dXJuIEJ5dGVTdHJpbmcuY29weUZyb20oYnVmLCAwLCBieXRlc1JlYWQpOwotICB9Ci0K
LSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLSAgLy8gTXVsdGlwbGUgQnl0ZVN0cmluZ3MgLT4gT25lIEJ5dGVTdHJp
bmcKLQotICAvKioKLSAgICogQ29uY2F0ZW5hdGUgdGhlIGdpdmVuIHtAY29kZSBCeXRlU3RyaW5n
fSB0byB0aGlzIG9uZS4gU2hvcnQgY29uY2F0ZW5hdGlvbnMsCi0gICAqIG9mIHRvdGFsIHNpemUg
c21hbGxlciB0aGFuIHtAbGluayBCeXRlU3RyaW5nI0NPTkNBVEVOQVRFX0JZX0NPUFlfU0laRX0s
IGFyZQotICAgKiBwcm9kdWNlZCBieSBjb3B5aW5nIHRoZSB1bmRlcmx5aW5nIGJ5dGVzIChhcyBw
ZXIgUm9wZS5qYXZhLCA8YQotICAgKiBocmVmPSJodHRwOi8vd3d3LmNzLnViYy5jYS9sb2NhbC9y
ZWFkaW5nL3Byb2NlZWRpbmdzL3NwZTkxLTk1L3NwZS92b2wyNS9pc3N1ZTEyL3NwZTk4Ni5wZGYi
PgotICAgKiBCQVA5NSA8L2E+LiBJbiBnZW5lcmFsLCB0aGUgY29uY2F0ZW5hdGUgaW52b2x2ZXMg
bm8gY29weWluZy4KLSAgICoKLSAgICogQHBhcmFtIG90aGVyIHN0cmluZyB0byBjb25jYXRlbmF0
ZQotICAgKiBAcmV0dXJuIGEgbmV3IHtAY29kZSBCeXRlU3RyaW5nfSBpbnN0YW5jZQotICAgKi8K
LSAgcHVibGljIGZpbmFsIEJ5dGVTdHJpbmcgY29uY2F0KEJ5dGVTdHJpbmcgb3RoZXIpIHsKLSAg
ICBpZiAoSW50ZWdlci5NQVhfVkFMVUUgLSBzaXplKCkgPCBvdGhlci5zaXplKCkpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJ5dGVTdHJpbmcgd291bGQgYmUg
dG9vIGxvbmc6ICIgKwotICAgICAgICAgIHNpemUoKSArICIrIiArIG90aGVyLnNpemUoKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIFJvcGVCeXRlU3RyaW5nLmNvbmNhdGVuYXRlKHRoaXMsIG90aGVy
KTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25jYXRlbmF0ZXMgYWxsIGJ5dGUgc3RyaW5ncyBpbiB0
aGUgaXRlcmFibGUgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KLSAgICogVGhpcyBpcyBkZXNpZ25l
ZCB0byBydW4gaW4gTyhsaXN0IHNpemUpLCBub3QgTyh0b3RhbCBieXRlcykuCi0gICAqCi0gICAq
IDxwPlRoZSByZXR1cm5lZCB7QGNvZGUgQnl0ZVN0cmluZ30gaXMgbm90IG5lY2Vzc2FyaWx5IGEg
dW5pcXVlIG9iamVjdC4KLSAgICogSWYgdGhlIGxpc3QgaXMgZW1wdHksIHRoZSByZXR1cm5lZCBv
YmplY3QgaXMgdGhlIHNpbmdsZXRvbiBlbXB0eQotICAgKiB7QGNvZGUgQnl0ZVN0cmluZ30uICBJ
ZiB0aGUgbGlzdCBoYXMgb25seSBvbmUgZWxlbWVudCwgdGhhdAotICAgKiB7QGNvZGUgQnl0ZVN0
cmluZ30gd2lsbCBiZSByZXR1cm5lZCB3aXRob3V0IGNvcHlpbmcuCi0gICAqCi0gICAqIEBwYXJh
bSBieXRlU3RyaW5ncyBzdHJpbmdzIHRvIGJlIGNvbmNhdGVuYXRlZAotICAgKiBAcmV0dXJuIG5l
dyB7QGNvZGUgQnl0ZVN0cmluZ30KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnl0ZVN0cmluZyBj
b3B5RnJvbShJdGVyYWJsZTxCeXRlU3RyaW5nPiBieXRlU3RyaW5ncykgewotICAgIC8vIERldGVy
bWluZSB0aGUgc2l6ZTsKLSAgICBmaW5hbCBpbnQgc2l6ZTsKLSAgICBpZiAoIShieXRlU3RyaW5n
cyBpbnN0YW5jZW9mIENvbGxlY3Rpb24pKSB7Ci0gICAgICBpbnQgdGVtcFNpemUgPSAwOwotICAg
ICAgZm9yIChJdGVyYXRvcjxCeXRlU3RyaW5nPiBpdGVyID0gYnl0ZVN0cmluZ3MuaXRlcmF0b3Io
KTsgaXRlci5oYXNOZXh0KCk7Ci0gICAgICAgICAgaXRlci5uZXh0KCksICsrdGVtcFNpemUpIHsK
LSAgICAgIH0KLSAgICAgIHNpemUgPSB0ZW1wU2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgc2l6
ZSA9ICgoQ29sbGVjdGlvbjxCeXRlU3RyaW5nPikgYnl0ZVN0cmluZ3MpLnNpemUoKTsKLSAgICB9
Ci0KLSAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICByZXR1cm4gRU1QVFk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGJhbGFuY2VkQ29uY2F0KGJ5dGVTdHJpbmdzLml0ZXJhdG9yKCksIHNpemUpOwot
ICB9Ci0KLSAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBieSBjb3B5RnJvbShJdGVyYWJsZTxC
eXRlU3RyaW5nPikuCi0gIC8vIENyZWF0ZSBhIGJhbGFuY2VkIGNvbmNhdGVuYXRpb24gb2YgdGhl
IG5leHQgImxlbmd0aCIgZWxlbWVudHMgZnJvbSB0aGUKLSAgLy8gaXRlcmFibGUuCi0gIHByaXZh
dGUgc3RhdGljIEJ5dGVTdHJpbmcgYmFsYW5jZWRDb25jYXQoSXRlcmF0b3I8Qnl0ZVN0cmluZz4g
aXRlcmF0b3IsIGludCBsZW5ndGgpIHsKLSAgICBhc3NlcnQgbGVuZ3RoID49IDE7Ci0gICAgQnl0
ZVN0cmluZyByZXN1bHQ7Ci0gICAgaWYgKGxlbmd0aCA9PSAxKSB7Ci0gICAgICByZXN1bHQgPSBp
dGVyYXRvci5uZXh0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGludCBoYWxmTGVuZ3RoID0gbGVu
Z3RoID4+PiAxOwotICAgICAgQnl0ZVN0cmluZyBsZWZ0ID0gYmFsYW5jZWRDb25jYXQoaXRlcmF0
b3IsIGhhbGZMZW5ndGgpOwotICAgICAgQnl0ZVN0cmluZyByaWdodCA9IGJhbGFuY2VkQ29uY2F0
KGl0ZXJhdG9yLCBsZW5ndGggLSBoYWxmTGVuZ3RoKTsKLSAgICAgIHJlc3VsdCA9IGxlZnQuY29u
Y2F0KHJpZ2h0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0gIC8vIEJ5dGVTdHJpbmcgLT4gYnl0ZVtdCi0KLSAgLyoqCi0gICAqIENvcGllcyBieXRl
cyBpbnRvIGEgYnVmZmVyIGF0IHRoZSBnaXZlbiBvZmZzZXQuCi0gICAqCi0gICAqIEBwYXJhbSB0
YXJnZXQgYnVmZmVyIHRvIGNvcHkgaW50bwotICAgKiBAcGFyYW0gb2Zmc2V0IGluIHRoZSB0YXJn
ZXQgYnVmZmVyCi0gICAqIEB0aHJvd3MgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiB0aGUg
b2Zmc2V0IGlzIG5lZ2F0aXZlIG9yIHRvbyBsYXJnZQotICAgKi8KLSAgcHVibGljIHZvaWQgY29w
eVRvKGJ5dGVbXSB0YXJnZXQsIGludCBvZmZzZXQpIHsKLSAgICBjb3B5VG8odGFyZ2V0LCAwLCBv
ZmZzZXQsIHNpemUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29waWVzIGJ5dGVzIGludG8gYSBi
dWZmZXIuCi0gICAqCi0gICAqIEBwYXJhbSB0YXJnZXQgICAgICAgYnVmZmVyIHRvIGNvcHkgaW50
bwotICAgKiBAcGFyYW0gc291cmNlT2Zmc2V0IG9mZnNldCB3aXRoaW4gdGhlc2UgYnl0ZXMKLSAg
ICogQHBhcmFtIHRhcmdldE9mZnNldCBvZmZzZXQgd2l0aGluIHRoZSB0YXJnZXQgYnVmZmVyCi0g
ICAqIEBwYXJhbSBudW1iZXJUb0NvcHkgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAgICogQHRo
cm93cyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIGFuIG9mZnNldCBvciBzaXplIGlzIG5l
Z2F0aXZlIG9yIHRvbwotICAgKiAgICAgbGFyZ2UKLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lk
IGNvcHlUbyhieXRlW10gdGFyZ2V0LCBpbnQgc291cmNlT2Zmc2V0LCBpbnQgdGFyZ2V0T2Zmc2V0
LAotICAgICAgaW50IG51bWJlclRvQ29weSkgewotICAgIGNoZWNrUmFuZ2Uoc291cmNlT2Zmc2V0
LCBzb3VyY2VPZmZzZXQgKyBudW1iZXJUb0NvcHksIHNpemUoKSk7Ci0gICAgY2hlY2tSYW5nZSh0
YXJnZXRPZmZzZXQsIHRhcmdldE9mZnNldCArIG51bWJlclRvQ29weSwgdGFyZ2V0Lmxlbmd0aCk7
Ci0gICAgaWYgKG51bWJlclRvQ29weSA+IDApIHsKLSAgICAgIGNvcHlUb0ludGVybmFsKHRhcmdl
dCwgc291cmNlT2Zmc2V0LCB0YXJnZXRPZmZzZXQsIG51bWJlclRvQ29weSk7Ci0gICAgfQotICB9
Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIChwYWNrYWdlIHByaXZhdGUpIGltcGxlbWVudGF0aW9u
IG9mCi0gICAqIHtAbGluayAjY29weVRvKGJ5dGVbXSxpbnQsaW50LGludCl9LgotICAgKiBJdCBh
c3N1bWVzIHRoYXQgYWxsIGVycm9yIGNoZWNraW5nIGhhcyBhbHJlYWR5IGJlZW4gcGVyZm9ybWVk
IGFuZCB0aGF0Ci0gICAqIHtAY29kZSBudW1iZXJUb0NvcHkgPiAwfS4KLSAgICovCi0gIHByb3Rl
Y3RlZCBhYnN0cmFjdCB2b2lkIGNvcHlUb0ludGVybmFsKGJ5dGVbXSB0YXJnZXQsIGludCBzb3Vy
Y2VPZmZzZXQsCi0gICAgICBpbnQgdGFyZ2V0T2Zmc2V0LCBpbnQgbnVtYmVyVG9Db3B5KTsKLQot
ICAvKioKLSAgICogQ29waWVzIGJ5dGVzIGludG8gYSBCeXRlQnVmZmVyLgotICAgKgotICAgKiBA
cGFyYW0gdGFyZ2V0IEJ5dGVCdWZmZXIgdG8gY29weSBpbnRvLgotICAgKiBAdGhyb3dzIGphdmEu
bmlvLlJlYWRPbmx5QnVmZmVyRXhjZXB0aW9uIGlmIHRoZSB7QGNvZGUgdGFyZ2V0fSBpcyByZWFk
LW9ubHkKLSAgICogQHRocm93cyBqYXZhLm5pby5CdWZmZXJPdmVyZmxvd0V4Y2VwdGlvbiBpZiB0
aGUge0Bjb2RlIHRhcmdldH0ncwotICAgKiAgICAgcmVtYWluaW5nKCkgc3BhY2UgaXMgbm90IGxh
cmdlIGVub3VnaCB0byBob2xkIHRoZSBkYXRhLgotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IHZv
aWQgY29weVRvKEJ5dGVCdWZmZXIgdGFyZ2V0KTsKLQotICAvKioKLSAgICogQ29waWVzIGJ5dGVz
IHRvIGEge0Bjb2RlIGJ5dGVbXX0uCi0gICAqCi0gICAqIEByZXR1cm4gY29waWVkIGJ5dGVzCi0g
ICAqLwotICBwdWJsaWMgZmluYWwgYnl0ZVtdIHRvQnl0ZUFycmF5KCkgewotICAgIGZpbmFsIGlu
dCBzaXplID0gc2l6ZSgpOwotICAgIGlmIChzaXplID09IDApIHsKLSAgICAgIHJldHVybiBJbnRl
cm5hbC5FTVBUWV9CWVRFX0FSUkFZOwotICAgIH0KLSAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5
dGVbc2l6ZV07Ci0gICAgY29weVRvSW50ZXJuYWwocmVzdWx0LCAwLCAwLCBzaXplKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFdyaXRlcyBhIGNvcHkgb2YgdGhlIGNv
bnRlbnRzIG9mIHRoaXMgYnl0ZSBzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBvdXRwdXQgc3RyZWFt
IGFyZ3VtZW50LgotICAgKgotICAgKiBAcGFyYW0gIG91dCAgdGhlIG91dHB1dCBzdHJlYW0gdG8g
d2hpY2ggdG8gd3JpdGUgdGhlIGRhdGEuCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gIGlmIGFu
IEkvTyBlcnJvciBvY2N1cnMuCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB3cml0ZVRv
KE91dHB1dFN0cmVhbSBvdXQpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAvKioKLSAgICogV3Jp
dGVzIGEgc3BlY2lmaWVkIHBhcnQgb2YgdGhpcyBieXRlIHN0cmluZyB0byBhbiBvdXRwdXQgc3Ry
ZWFtLgotICAgKgotICAgKiBAcGFyYW0gIG91dCAgdGhlIG91dHB1dCBzdHJlYW0gdG8gd2hpY2gg
dG8gd3JpdGUgdGhlIGRhdGEuCi0gICAqIEBwYXJhbSAgc291cmNlT2Zmc2V0IG9mZnNldCB3aXRo
aW4gdGhlc2UgYnl0ZXMKLSAgICogQHBhcmFtICBudW1iZXJUb1dyaXRlIG51bWJlciBvZiBieXRl
cyB0byB3cml0ZQotICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uICBpZiBhbiBJL08gZXJyb3Igb2Nj
dXJzLgotICAgKiBAdGhyb3dzIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgYW4gb2Zmc2V0
IG9yIHNpemUgaXMgbmVnYXRpdmUgb3IgdG9vIGxhcmdlCi0gICAqLwotICBmaW5hbCB2b2lkIHdy
aXRlVG8oT3V0cHV0U3RyZWFtIG91dCwgaW50IHNvdXJjZU9mZnNldCwgaW50IG51bWJlclRvV3Jp
dGUpCi0gICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGNoZWNrUmFuZ2Uoc291cmNlT2Zm
c2V0LCBzb3VyY2VPZmZzZXQgKyBudW1iZXJUb1dyaXRlLCBzaXplKCkpOwotICAgIGlmIChudW1i
ZXJUb1dyaXRlID4gMCkgewotICAgICAgd3JpdGVUb0ludGVybmFsKG91dCwgc291cmNlT2Zmc2V0
LCBudW1iZXJUb1dyaXRlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJuYWwgdmVy
c2lvbiBvZiB7QGxpbmsgI3dyaXRlVG8oT3V0cHV0U3RyZWFtLGludCxpbnQpfSB0aGF0IGFzc3Vt
ZXMKLSAgICogYWxsIGVycm9yIGNoZWNraW5nIGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4KLSAgICov
Ci0gIGFic3RyYWN0IHZvaWQgd3JpdGVUb0ludGVybmFsKE91dHB1dFN0cmVhbSBvdXQsIGludCBz
b3VyY2VPZmZzZXQsIGludCBudW1iZXJUb1dyaXRlKQotICAgICAgdGhyb3dzIElPRXhjZXB0aW9u
OwotCi0gIC8qKgotICAgKiBXcml0ZXMgdGhpcyB7QGxpbmsgQnl0ZVN0cmluZ30gdG8gdGhlIHBy
b3ZpZGVkIHtAbGluayBCeXRlT3V0cHV0fS4gQ2FsbGluZwotICAgKiB0aGlzIG1ldGhvZCBtYXkg
cmVzdWx0IGluIG11bHRpcGxlIG9wZXJhdGlvbnMgb24gdGhlIHRhcmdldCB7QGxpbmsgQnl0ZU91
dHB1dH0uCi0gICAqCi0gICAqIDxwPlRoaXMgbWV0aG9kIG1heSBleHBvc2UgaW50ZXJuYWwgYmFj
a2luZyBidWZmZXJzIG9mIHRoZSB7QGxpbmsgQnl0ZVN0cmluZ30gdG8gdGhlIHtAbGluawotICAg
KiBCeXRlT3V0cHV0fSBpbiBvcmRlciB0byBhdm9pZCBhZGRpdGlvbmFsIGNvcHlpbmcgb3Zlcmhl
YWQuIEl0IHdvdWxkIGJlIHBvc3NpYmxlIGZvciBhIG1hbGljaW91cwotICAgKiB7QGxpbmsgQnl0
ZU91dHB1dH0gdG8gY29ycnVwdCB0aGUge0BsaW5rIEJ5dGVTdHJpbmd9LiBVc2Ugd2l0aCBjYXV0
aW9uIQotICAgKgotICAgKiBAcGFyYW0gIGJ5dGVPdXRwdXQgIHRoZSBvdXRwdXQgdGFyZ2V0IHRv
IHJlY2VpdmUgdGhlIGJ5dGVzCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gIGlmIGFuIEkvTyBl
cnJvciBvY2N1cnMKLSAgICogQHNlZSBVbnNhZmVCeXRlT3BlcmF0aW9ucyN1bnNhZmVXcml0ZVRv
KEJ5dGVTdHJpbmcsIEJ5dGVPdXRwdXQpCi0gICAqLwotICBhYnN0cmFjdCB2b2lkIHdyaXRlVG8o
Qnl0ZU91dHB1dCBieXRlT3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLyoqCi0gICAq
IENvbnN0cnVjdHMgYSByZWFkLW9ubHkge0Bjb2RlIGphdmEubmlvLkJ5dGVCdWZmZXJ9IHdob3Nl
IGNvbnRlbnQKLSAgICogaXMgZXF1YWwgdG8gdGhlIGNvbnRlbnRzIG9mIHRoaXMgYnl0ZSBzdHJp
bmcuCi0gICAqIFRoZSByZXN1bHQgdXNlcyB0aGUgc2FtZSBiYWNraW5nIGFycmF5IGFzIHRoZSBi
eXRlIHN0cmluZywgaWYgcG9zc2libGUuCi0gICAqCi0gICAqIEByZXR1cm4gd3JhcHBlZCBieXRl
cwotICAgKi8KLSAgcHVibGljIGFic3RyYWN0IEJ5dGVCdWZmZXIgYXNSZWFkT25seUJ5dGVCdWZm
ZXIoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIGxpc3Qgb2YgcmVhZC1vbmx5IHtAY29k
ZSBqYXZhLm5pby5CeXRlQnVmZmVyfSBvYmplY3RzCi0gICAqIHN1Y2ggdGhhdCB0aGUgY29uY2F0
ZW5hdGlvbiBvZiB0aGVpciBjb250ZW50cyBpcyBlcXVhbCB0byB0aGUgY29udGVudHMKLSAgICog
b2YgdGhpcyBieXRlIHN0cmluZy4gIFRoZSByZXN1bHQgdXNlcyB0aGUgc2FtZSBiYWNraW5nIGFy
cmF5cyBhcyB0aGUKLSAgICogYnl0ZSBzdHJpbmcuCi0gICAqIDxwPgotICAgKiBCeSByZXR1cm5p
bmcgYSBsaXN0LCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgbWF5IGJlIGFibGUgdG8g
YXZvaWQKLSAgICogY29weWluZyBldmVuIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGJhY2tpbmcg
YXJyYXlzLgotICAgKgotICAgKiBAcmV0dXJuIGEgbGlzdCBvZiB3cmFwcGVkIGJ5dGVzCi0gICAq
LwotICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxCeXRlQnVmZmVyPiBhc1JlYWRPbmx5Qnl0ZUJ1ZmZl
ckxpc3QoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUgU3RyaW5nfSBi
eSBkZWNvZGluZyB0aGUgYnl0ZXMgdXNpbmcgdGhlCi0gICAqIHNwZWNpZmllZCBjaGFyc2V0Lgot
ICAgKgotICAgKiBAcGFyYW0gY2hhcnNldE5hbWUgZW5jb2RlIHVzaW5nIHRoaXMgY2hhcnNldAot
ICAgKiBAcmV0dXJuIG5ldyBzdHJpbmcKLSAgICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5n
RXhjZXB0aW9uIGlmIGNoYXJzZXQgaXNuJ3QgcmVjb2duaXplZAotICAgKi8KLSAgcHVibGljIGZp
bmFsIFN0cmluZyB0b1N0cmluZyhTdHJpbmcgY2hhcnNldE5hbWUpCi0gICAgICB0aHJvd3MgVW5z
dXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiB0b1N0
cmluZyhDaGFyc2V0LmZvck5hbWUoY2hhcnNldE5hbWUpKTsKLSAgICB9IGNhdGNoIChVbnN1cHBv
cnRlZENoYXJzZXRFeGNlcHRpb24gZSkgewotICAgICAgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2Vw
dGlvbiBleGNlcHRpb24gPSBuZXcgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbihjaGFyc2V0
TmFtZSk7Ci0gICAgICBleGNlcHRpb24uaW5pdENhdXNlKGUpOwotICAgICAgdGhyb3cgZXhjZXB0
aW9uOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBT
dHJpbmd9IGJ5IGRlY29kaW5nIHRoZSBieXRlcyB1c2luZyB0aGUKLSAgICogc3BlY2lmaWVkIGNo
YXJzZXQuIFJldHVybnMgdGhlIHNhbWUgZW1wdHkgU3RyaW5nIGlmIGVtcHR5LgotICAgKgotICAg
KiBAcGFyYW0gY2hhcnNldCBlbmNvZGUgdXNpbmcgdGhpcyBjaGFyc2V0Ci0gICAqIEByZXR1cm4g
bmV3IHN0cmluZwotICAgKi8KLSAgcHVibGljIGZpbmFsIFN0cmluZyB0b1N0cmluZyhDaGFyc2V0
IGNoYXJzZXQpIHsKLSAgICByZXR1cm4gc2l6ZSgpID09IDAgPyAiIiA6IHRvU3RyaW5nSW50ZXJu
YWwoY2hhcnNldCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUg
U3RyaW5nfSBieSBkZWNvZGluZyB0aGUgYnl0ZXMgdXNpbmcgdGhlCi0gICAqIHNwZWNpZmllZCBj
aGFyc2V0LgotICAgKgotICAgKiBAcGFyYW0gY2hhcnNldCBlbmNvZGUgdXNpbmcgdGhpcyBjaGFy
c2V0Ci0gICAqIEByZXR1cm4gbmV3IHN0cmluZwotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0
IFN0cmluZyB0b1N0cmluZ0ludGVybmFsKENoYXJzZXQgY2hhcnNldCk7Ci0KLSAgLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLSAgLy8gVVRGLTggZGVjb2RpbmcKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG5ldyB7
QGNvZGUgU3RyaW5nfSBieSBkZWNvZGluZyB0aGUgYnl0ZXMgYXMgVVRGLTguCi0gICAqCi0gICAq
IEByZXR1cm4gbmV3IHN0cmluZyB1c2luZyBVVEYtOCBlbmNvZGluZwotICAgKi8KLSAgcHVibGlj
IGZpbmFsIFN0cmluZyB0b1N0cmluZ1V0ZjgoKSB7Ci0gICAgcmV0dXJuIHRvU3RyaW5nKEludGVy
bmFsLlVURl84KTsKLSAgfQotCi0gIC8qKgotICAgKiBUZWxscyB3aGV0aGVyIHRoaXMge0Bjb2Rl
IEJ5dGVTdHJpbmd9IHJlcHJlc2VudHMgYSB3ZWxsLWZvcm1lZCBVVEYtOAotICAgKiBieXRlIHNl
cXVlbmNlLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIGJ5dGVzIGNhbiBiZSBjb252ZXJ0ZWQgdG8g
YQotICAgKiBTdHJpbmcgb2JqZWN0IGFuZCB0aGVuIHJvdW5kIHRyaXBwZWQgYmFjayB0byBieXRl
cyB3aXRob3V0IGxvc3MuCi0gICAqCi0gICAqIDxwPk1vcmUgcHJlY2lzZWx5LCByZXR1cm5zIHtA
Y29kZSB0cnVlfSB3aGVuZXZlcjogPHByZT4ge0Bjb2RlCi0gICAqIEFycmF5cy5lcXVhbHMoYnl0
ZVN0cmluZy50b0J5dGVBcnJheSgpLAotICAgKiAgICAgbmV3IFN0cmluZyhieXRlU3RyaW5nLnRv
Qnl0ZUFycmF5KCksICJVVEYtOCIpLmdldEJ5dGVzKCJVVEYtOCIpKQotICAgKiB9PC9wcmU+Ci0g
ICAqCi0gICAqIDxwPlRoaXMgbWV0aG9kIHJldHVybnMge0Bjb2RlIGZhbHNlfSBmb3IgIm92ZXJs
b25nIiBieXRlIHNlcXVlbmNlcywKLSAgICogYXMgd2VsbCBhcyBmb3IgMy1ieXRlIHNlcXVlbmNl
cyB0aGF0IHdvdWxkIG1hcCB0byBhIHN1cnJvZ2F0ZQotICAgKiBjaGFyYWN0ZXIsIGluIGFjY29y
ZGFuY2Ugd2l0aCB0aGUgcmVzdHJpY3RlZCBkZWZpbml0aW9uIG9mIFVURi04Ci0gICAqIGludHJv
ZHVjZWQgaW4gVW5pY29kZSAzLjEuICBOb3RlIHRoYXQgdGhlIFVURi04IGRlY29kZXIgaW5jbHVk
ZWQgaW4KLSAgICogT3JhY2xlJ3MgSkRLIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGFsc28gcmVqZWN0
ICJvdmVybG9uZyIgYnl0ZQotICAgKiBzZXF1ZW5jZXMsIGJ1dCAoYXMgb2YgMjAxMSkgc3RpbGwg
YWNjZXB0cyAzLWJ5dGUgc3Vycm9nYXRlCi0gICAqIGNoYXJhY3RlciBieXRlIHNlcXVlbmNlcy4K
LSAgICoKLSAgICogPHA+U2VlIHRoZSBVbmljb2RlIFN0YW5kYXJkLDxicj4KLSAgICogVGFibGUg
My02LiA8ZW0+VVRGLTggQml0IERpc3RyaWJ1dGlvbjwvZW0+LDxicj4KLSAgICogVGFibGUgMy03
LiA8ZW0+V2VsbCBGb3JtZWQgVVRGLTggQnl0ZSBTZXF1ZW5jZXM8L2VtPi4KLSAgICoKLSAgICog
QHJldHVybiB3aGV0aGVyIHRoZSBieXRlcyBpbiB0aGlzIHtAY29kZSBCeXRlU3RyaW5nfSBhcmUg
YQotICAgKiB3ZWxsLWZvcm1lZCBVVEYtOCBieXRlIHNlcXVlbmNlCi0gICAqLwotICBwdWJsaWMg
YWJzdHJhY3QgYm9vbGVhbiBpc1ZhbGlkVXRmOCgpOwotCi0gIC8qKgotICAgKiBUZWxscyB3aGV0
aGVyIHRoZSBnaXZlbiBieXRlIHNlcXVlbmNlIGlzIGEgd2VsbC1mb3JtZWQsIG1hbGZvcm1lZCwg
b3IKLSAgICogaW5jb21wbGV0ZSBVVEYtOCBieXRlIHNlcXVlbmNlLiAgVGhpcyBtZXRob2QgYWNj
ZXB0cyBhbmQgcmV0dXJucyBhIHBhcnRpYWwKLSAgICogc3RhdGUgcmVzdWx0LCBhbGxvd2luZyB0
aGUgYnl0ZXMgZm9yIGEgY29tcGxldGUgVVRGLTggYnl0ZSBzZXF1ZW5jZSB0byBiZQotICAgKiBj
b21wb3NlZCBmcm9tIG11bHRpcGxlIHtAY29kZSBCeXRlU3RyaW5nfSBzZWdtZW50cy4KLSAgICoK
LSAgICogQHBhcmFtIHN0YXRlIGVpdGhlciB7QGNvZGUgMH0gKGlmIHRoaXMgaXMgdGhlIGluaXRp
YWwgZGVjb2Rpbmcgb3BlcmF0aW9uKQotICAgKiAgICAgb3IgdGhlIHZhbHVlIHJldHVybmVkIGZy
b20gYSBjYWxsIHRvIGEgcGFydGlhbCBkZWNvZGluZyBtZXRob2QgZm9yIHRoZQotICAgKiAgICAg
cHJldmlvdXMgYnl0ZXMKLSAgICogQHBhcmFtIG9mZnNldCBvZmZzZXQgb2YgdGhlIGZpcnN0IGJ5
dGUgdG8gY2hlY2sKLSAgICogQHBhcmFtIGxlbmd0aCBudW1iZXIgb2YgYnl0ZXMgdG8gY2hlY2sK
LSAgICoKLSAgICogQHJldHVybiB7QGNvZGUgLTF9IGlmIHRoZSBwYXJ0aWFsIGJ5dGUgc2VxdWVu
Y2UgaXMgZGVmaW5pdGVseSBtYWxmb3JtZWQsCi0gICAqIHtAY29kZSAwfSBpZiBpdCBpcyB3ZWxs
LWZvcm1lZCAobm8gYWRkaXRpb25hbCBpbnB1dCBuZWVkZWQpLCBvciwgaWYgdGhlCi0gICAqIGJ5
dGUgc2VxdWVuY2UgaXMgImluY29tcGxldGUiLCBpLmUuIGFwcGFyZW50bHkgdGVybWluYXRlZCBp
biB0aGUgbWlkZGxlIG9mCi0gICAqIGEgY2hhcmFjdGVyLCBhbiBvcGFxdWUgaW50ZWdlciAic3Rh
dGUiIHZhbHVlIGNvbnRhaW5pbmcgZW5vdWdoIGluZm9ybWF0aW9uCi0gICAqIHRvIGRlY29kZSB0
aGUgY2hhcmFjdGVyIHdoZW4gcGFzc2VkIHRvIGEgc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9mIGEK
LSAgICogcGFydGlhbCBkZWNvZGluZyBtZXRob2QuCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJh
Y3QgaW50IHBhcnRpYWxJc1ZhbGlkVXRmOChpbnQgc3RhdGUsIGludCBvZmZzZXQsIGludCBsZW5n
dGgpOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIGVxdWFscygpIGFuZCBoYXNoQ29kZSgpCi0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhPYmplY3Qgbyk7Ci0K
LSAgLyoqCi0gICAqIEJhc2UgY2xhc3MgZm9yIGxlYWYge0BsaW5rIEJ5dGVTdHJpbmd9cyAoaS5l
LiBub24tcm9wZXMpLgotICAgKi8KLSAgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIExlYWZCeXRlU3Ry
aW5nIGV4dGVuZHMgQnl0ZVN0cmluZyB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIGZp
bmFsIGludCBnZXRUcmVlRGVwdGgoKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBpc0JhbGFuY2VkKCkgewotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgZXF1YWxpdHkg
b2YgdGhlIHN1YnN0cmluZyBvZiBnaXZlbiBsZW5ndGggb2YgdGhpcyBvYmplY3Qgc3RhcnRpbmcg
YXQKLSAgICAgKiB6ZXJvIHdpdGggYW5vdGhlciB7QGNvZGUgQnl0ZVN0cmluZ30gc3Vic3RyaW5n
IHN0YXJ0aW5nIGF0IG9mZnNldC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvdGhlciAgd2hhdCB0
byBjb21wYXJlIGEgc3Vic3RyaW5nIGluCi0gICAgICogQHBhcmFtIG9mZnNldCBvZmZzZXQgaW50
byBvdGhlcgotICAgICAqIEBwYXJhbSBsZW5ndGggbnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmUK
LSAgICAgKiBAcmV0dXJuIHRydWUgZm9yIGVxdWFsaXR5IG9mIHN1YnN0cmluZ3MsIGVsc2UgZmFs
c2UuCi0gICAgICovCi0gICAgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHNSYW5nZShCeXRlU3RyaW5n
IG90aGVyLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21w
dXRlIHRoZSBoYXNoQ29kZSB1c2luZyB0aGUgdHJhZGl0aW9uYWwgYWxnb3JpdGhtIGZyb20ge0Bs
aW5rCi0gICAqIEJ5dGVTdHJpbmd9LgotICAgKgotICAgKiBAcmV0dXJuIGhhc2hDb2RlIHZhbHVl
Ci0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFsIGludCBoYXNoQ29kZSgpIHsKLSAg
ICBpbnQgaCA9IGhhc2g7Ci0KLSAgICBpZiAoaCA9PSAwKSB7Ci0gICAgICBpbnQgc2l6ZSA9IHNp
emUoKTsKLSAgICAgIGggPSBwYXJ0aWFsSGFzaChzaXplLCAwLCBzaXplKTsKLSAgICAgIGlmICho
ID09IDApIHsKLSAgICAgICAgaCA9IDE7Ci0gICAgICB9Ci0gICAgICBoYXNoID0gaDsKLSAgICB9
Ci0gICAgcmV0dXJuIGg7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBJbnB1dCBzdHJlYW0K
LQotICAvKioKLSAgICogQ3JlYXRlcyBhbiB7QGNvZGUgSW5wdXRTdHJlYW19IHdoaWNoIGNhbiBi
ZSB1c2VkIHRvIHJlYWQgdGhlIGJ5dGVzLgotICAgKiA8cD4KLSAgICogVGhlIHtAbGluayBJbnB1
dFN0cmVhbX0gcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgaXMgZ3VhcmFudGVlZCB0byBiZQotICAg
KiBjb21wbGV0ZWx5IG5vbi1ibG9ja2luZy4gIFRoZSBtZXRob2Qge0BsaW5rIElucHV0U3RyZWFt
I2F2YWlsYWJsZSgpfQotICAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5n
IGluIHRoZSBzdHJlYW0uIFRoZSBtZXRob2RzCi0gICAqIHtAbGluayBJbnB1dFN0cmVhbSNyZWFk
KGJ5dGVbXSl9LCB7QGxpbmsgSW5wdXRTdHJlYW0jcmVhZChieXRlW10saW50LGludCl9Ci0gICAq
IGFuZCB7QGxpbmsgSW5wdXRTdHJlYW0jc2tpcChsb25nKX0gd2lsbCByZWFkL3NraXAgYXMgbWFu
eSBieXRlcyBhcyBhcmUKLSAgICogYXZhaWxhYmxlLiAgVGhlIG1ldGhvZCB7QGxpbmsgSW5wdXRT
dHJlYW0jbWFya1N1cHBvcnRlZCgpfSByZXR1cm5zCi0gICAqIHtAY29kZSB0cnVlfS4KLSAgICog
PHA+Ci0gICAqIFRoZSBtZXRob2RzIGluIHRoZSByZXR1cm5lZCB7QGxpbmsgSW5wdXRTdHJlYW19
IG1pZ2h0IDxiPm5vdDwvYj4gYmUKLSAgICogdGhyZWFkIHNhZmUuCi0gICAqCi0gICAqIEByZXR1
cm4gYW4gaW5wdXQgc3RyZWFtIHRoYXQgcmV0dXJucyB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIHN0
cmluZy4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBJbnB1dFN0cmVhbSBuZXdJbnB1dCgpOwot
Ci0gIC8qKgotICAgKiBDcmVhdGVzIGEge0BsaW5rIENvZGVkSW5wdXRTdHJlYW19IHdoaWNoIGNh
biBiZSB1c2VkIHRvIHJlYWQgdGhlIGJ5dGVzLgotICAgKiBVc2luZyB0aGlzIGlzIG9mdGVuIG1v
cmUgZWZmaWNpZW50IHRoYW4gY3JlYXRpbmcgYSB7QGxpbmsgQ29kZWRJbnB1dFN0cmVhbX0KLSAg
ICogdGhhdCB3cmFwcyB0aGUgcmVzdWx0IG9mIHtAbGluayAjbmV3SW5wdXQoKX0uCi0gICAqCi0g
ICAqIEByZXR1cm4gc3RyZWFtIGJhc2VkIG9uIHdyYXBwZWQgZGF0YQotICAgKi8KLSAgcHVibGlj
IGFic3RyYWN0IENvZGVkSW5wdXRTdHJlYW0gbmV3Q29kZWRJbnB1dCgpOwotCi0gIC8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0gIC8vIE91dHB1dCBzdHJlYW0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyB7QGxp
bmsgT3V0cHV0fSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsIGNhcGFjaXR5LiBDYWxsIHtAbGluawot
ICAgKiBPdXRwdXQjdG9CeXRlU3RyaW5nKCl9IHRvIGNyZWF0ZSB0aGUge0Bjb2RlIEJ5dGVTdHJp
bmd9IGluc3RhbmNlLgotICAgKiA8cD4KLSAgICogQSB7QGxpbmsgQnl0ZVN0cmluZy5PdXRwdXR9
IG9mZmVycyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIGEKLSAgICoge0BsaW5rIEJ5dGVBcnJh
eU91dHB1dFN0cmVhbX0sIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgYSB7QGxpbmsgQnl0ZVN0cmlu
Z30KLSAgICogcmF0aGVyIHRoYW4gYSB7QGNvZGUgYnl0ZX0gYXJyYXkuCi0gICAqCi0gICAqIEBw
YXJhbSBpbml0aWFsQ2FwYWNpdHkgZXN0aW1hdGUgb2YgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdy
aXR0ZW4KLSAgICogQHJldHVybiB7QGNvZGUgT3V0cHV0U3RyZWFtfSBmb3IgYnVpbGRpbmcgYSB7
QGNvZGUgQnl0ZVN0cmluZ30KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgT3V0cHV0IG5ld091dHB1
dChpbnQgaW5pdGlhbENhcGFjaXR5KSB7Ci0gICAgcmV0dXJuIG5ldyBPdXRwdXQoaW5pdGlhbENh
cGFjaXR5KTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBPdXRwdXR9
LiBDYWxsIHtAbGluayBPdXRwdXQjdG9CeXRlU3RyaW5nKCl9IHRvIGNyZWF0ZQotICAgKiB0aGUg
e0Bjb2RlIEJ5dGVTdHJpbmd9IGluc3RhbmNlLgotICAgKiA8cD4KLSAgICogQSB7QGxpbmsgQnl0
ZVN0cmluZy5PdXRwdXR9IG9mZmVycyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIGEKLSAgICog
e0BsaW5rIEJ5dGVBcnJheU91dHB1dFN0cmVhbX0sIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgYSB7
QGxpbmsgQnl0ZVN0cmluZ30KLSAgICogcmF0aGVyIHRoYW4gYSB7QGNvZGUgYnl0ZSBhcnJheX0u
Ci0gICAqCi0gICAqIEByZXR1cm4ge0Bjb2RlIE91dHB1dFN0cmVhbX0gZm9yIGJ1aWxkaW5nIGEg
e0Bjb2RlIEJ5dGVTdHJpbmd9Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIE91dHB1dCBuZXdPdXRw
dXQoKSB7Ci0gICAgcmV0dXJuIG5ldyBPdXRwdXQoQ09OQ0FURU5BVEVfQllfQ09QWV9TSVpFKTsK
LSAgfQotCi0gIC8qKgotICAgKiBPdXRwdXRzIHRvIGEge0Bjb2RlIEJ5dGVTdHJpbmd9IGluc3Rh
bmNlLiBDYWxsIHtAbGluayAjdG9CeXRlU3RyaW5nKCl9IHRvCi0gICAqIGNyZWF0ZSB0aGUge0Bj
b2RlIEJ5dGVTdHJpbmd9IGluc3RhbmNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBj
bGFzcyBPdXRwdXQgZXh0ZW5kcyBPdXRwdXRTdHJlYW0gewotICAgIC8vIEltcGxlbWVudGF0aW9u
IG5vdGUuCi0gICAgLy8gVGhlIHB1YmxpYyBtZXRob2RzIG9mIHRoaXMgY2xhc3MgbXVzdCBiZSBz
eW5jaHJvbml6ZWQuICBCeXRlU3RyaW5ncwotICAgIC8vIGFyZSBndWFyYW50ZWVkIHRvIGJlIGlt
bXV0YWJsZS4gIFdpdGhvdXQgc29tZSBzb3J0IG9mIGxvY2tpbmcsIGl0IGNvdWxkCi0gICAgLy8g
YmUgcG9zc2libGUgZm9yIG9uZSB0aHJlYWQgdG8gY2FsbCB0b0J5dGVTcmluZygpLCB3aGlsZSBh
bm90aGVyIHRocmVhZAotICAgIC8vIGlzIHN0aWxsIG1vZGlmeWluZyB0aGUgdW5kZXJseWluZyBi
eXRlIGFycmF5LgotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIEVNUFRZX0JZVEVf
QVJSQVkgPSBuZXcgYnl0ZVswXTsKLSAgICAvLyBhcmd1bWVudCBwYXNzZWQgYnkgdXNlciwgaW5k
aWNhdGluZyBpbml0aWFsIGNhcGFjaXR5LgotICAgIHByaXZhdGUgZmluYWwgaW50IGluaXRpYWxD
YXBhY2l0eTsKLSAgICAvLyBCeXRlU3RyaW5ncyB0byBiZSBjb25jYXRlbmF0ZWQgdG8gY3JlYXRl
IHRoZSByZXN1bHQKLSAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxCeXRlU3RyaW5nPiBmbHVz
aGVkQnVmZmVyczsKLSAgICAvLyBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIEJ5dGVTdHJp
bmdzIG9mIGZsdXNoZWRCdWZmZXJzCi0gICAgcHJpdmF0ZSBpbnQgZmx1c2hlZEJ1ZmZlcnNUb3Rh
bEJ5dGVzOwotICAgIC8vIEN1cnJlbnQgYnVmZmVyIHRvIHdoaWNoIHdlIGFyZSB3cml0aW5nCi0g
ICAgcHJpdmF0ZSBieXRlW10gYnVmZmVyOwotICAgIC8vIExvY2F0aW9uIGluIGJ1ZmZlcltdIHRv
IHdoaWNoIHdlIHdyaXRlIHRoZSBuZXh0IGJ5dGUuCi0gICAgcHJpdmF0ZSBpbnQgYnVmZmVyUG9z
OwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBCeXRlU3RyaW5nIG91dHB1dCBzdHJl
YW0gd2l0aCB0aGUgc3BlY2lmaWVkCi0gICAgICogaW5pdGlhbCBjYXBhY2l0eS4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgIHRoZSBpbml0aWFsIGNhcGFjaXR5IG9mIHRo
ZSBvdXRwdXQgc3RyZWFtLgotICAgICAqLwotICAgIE91dHB1dChpbnQgaW5pdGlhbENhcGFjaXR5
KSB7Ci0gICAgICBpZiAoaW5pdGlhbENhcGFjaXR5IDwgMCkgewotICAgICAgICB0aHJvdyBuZXcg
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCdWZmZXIgc2l6ZSA8IDAiKTsKLSAgICAgIH0KLSAg
ICAgIHRoaXMuaW5pdGlhbENhcGFjaXR5ID0gaW5pdGlhbENhcGFjaXR5OwotICAgICAgdGhpcy5m
bHVzaGVkQnVmZmVycyA9IG5ldyBBcnJheUxpc3Q8Qnl0ZVN0cmluZz4oKTsKLSAgICAgIHRoaXMu
YnVmZmVyID0gbmV3IGJ5dGVbaW5pdGlhbENhcGFjaXR5XTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd3JpdGUoaW50IGIpIHsKLSAgICAgIGlm
IChidWZmZXJQb3MgPT0gYnVmZmVyLmxlbmd0aCkgewotICAgICAgICBmbHVzaEZ1bGxCdWZmZXIo
MSk7Ci0gICAgICB9Ci0gICAgICBidWZmZXJbYnVmZmVyUG9zKytdID0gKGJ5dGUpYjsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd3JpdGUoYnl0
ZVtdIGIsIGludCBvZmZzZXQsIGludCBsZW5ndGgpICB7Ci0gICAgICBpZiAobGVuZ3RoIDw9IGJ1
ZmZlci5sZW5ndGggLSBidWZmZXJQb3MpIHsKLSAgICAgICAgLy8gVGhlIGJ5dGVzIGNhbiBmaXQg
aW50byB0aGUgY3VycmVudCBidWZmZXIuCi0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYiwgb2Zm
c2V0LCBidWZmZXIsIGJ1ZmZlclBvcywgbGVuZ3RoKTsKLSAgICAgICAgYnVmZmVyUG9zICs9IGxl
bmd0aDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFVzZSB1cCB0aGUgY3VycmVudCBidWZm
ZXIKLSAgICAgICAgaW50IGNvcHlTaXplICA9IGJ1ZmZlci5sZW5ndGggLSBidWZmZXJQb3M7Ci0g
ICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYiwgb2Zmc2V0LCBidWZmZXIsIGJ1ZmZlclBvcywgY29w
eVNpemUpOwotICAgICAgICBvZmZzZXQgKz0gY29weVNpemU7Ci0gICAgICAgIGxlbmd0aCAtPSBj
b3B5U2l6ZTsKLSAgICAgICAgLy8gRmx1c2ggdGhlIGJ1ZmZlciwgYW5kIGdldCBhIG5ldyBidWZm
ZXIgYXQgbGVhc3QgYmlnIGVub3VnaCB0byBjb3ZlcgotICAgICAgICAvLyB3aGF0IHdlIHN0aWxs
IG5lZWQgdG8gb3V0cHV0Ci0gICAgICAgIGZsdXNoRnVsbEJ1ZmZlcihsZW5ndGgpOwotICAgICAg
ICBTeXN0ZW0uYXJyYXljb3B5KGIsIG9mZnNldCwgYnVmZmVyLCAwIC8qIGNvdW50ICovLCBsZW5n
dGgpOwotICAgICAgICBidWZmZXJQb3MgPSBsZW5ndGg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogQ3JlYXRlcyBhIGJ5dGUgc3RyaW5nLiBJdHMgc2l6ZSBpcyB0aGUgY3VycmVu
dCBzaXplIG9mIHRoaXMgb3V0cHV0Ci0gICAgICogc3RyZWFtIGFuZCBpdHMgb3V0cHV0IGhhcyBi
ZWVuIGNvcGllZCB0byBpdC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gIHRoZSBjdXJyZW50IGNv
bnRlbnRzIG9mIHRoaXMgb3V0cHV0IHN0cmVhbSwgYXMgYSBieXRlIHN0cmluZy4KLSAgICAgKi8K
LSAgICBwdWJsaWMgc3luY2hyb25pemVkIEJ5dGVTdHJpbmcgdG9CeXRlU3RyaW5nKCkgewotICAg
ICAgZmx1c2hMYXN0QnVmZmVyKCk7Ci0gICAgICByZXR1cm4gQnl0ZVN0cmluZy5jb3B5RnJvbShm
bHVzaGVkQnVmZmVycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50IGphdmEu
dXRpbC5BcnJheXMuY29weU9mKCkgZm9yIGpkayAxLjUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBi
eXRlW10gY29weUFycmF5KGJ5dGVbXSBidWZmZXIsIGludCBsZW5ndGgpIHsKLSAgICAgIGJ5dGVb
XSByZXN1bHQgPSBuZXcgYnl0ZVtsZW5ndGhdOwotICAgICAgU3lzdGVtLmFycmF5Y29weShidWZm
ZXIsIDAsIHJlc3VsdCwgMCwgTWF0aC5taW4oYnVmZmVyLmxlbmd0aCwgbGVuZ3RoKSk7Ci0gICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdyaXRlcyB0aGUgY29t
cGxldGUgY29udGVudHMgb2YgdGhpcyBieXRlIGFycmF5IG91dHB1dCBzdHJlYW0gdG8KLSAgICAg
KiB0aGUgc3BlY2lmaWVkIG91dHB1dCBzdHJlYW0gYXJndW1lbnQuCi0gICAgICoKLSAgICAgKiBA
cGFyYW0gb3V0IHRoZSBvdXRwdXQgc3RyZWFtIHRvIHdoaWNoIHRvIHdyaXRlIHRoZSBkYXRhLgot
ICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gIGlmIGFuIEkvTyBlcnJvciBvY2N1cnMuCi0gICAg
ICovCi0gICAgcHVibGljIHZvaWQgd3JpdGVUbyhPdXRwdXRTdHJlYW0gb3V0KSB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgICAgQnl0ZVN0cmluZ1tdIGNhY2hlZEZsdXNoQnVmZmVyczsKLSAgICAg
IGJ5dGVbXSBjYWNoZWRCdWZmZXI7Ci0gICAgICBpbnQgY2FjaGVkQnVmZmVyUG9zOwotICAgICAg
c3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgIC8vIENvcHkgdGhlIGluZm9ybWF0aW9uIHdl
IG5lZWQgaW50byBsb2NhbCB2YXJpYWJsZXMgc28gYXMgdG8gaG9sZAotICAgICAgICAvLyB0aGUg
bG9jayBmb3IgYXMgc2hvcnQgYSB0aW1lIGFzIHBvc3NpYmxlLgotICAgICAgICBjYWNoZWRGbHVz
aEJ1ZmZlcnMgPQotICAgICAgICAgICAgZmx1c2hlZEJ1ZmZlcnMudG9BcnJheShuZXcgQnl0ZVN0
cmluZ1tmbHVzaGVkQnVmZmVycy5zaXplKCldKTsKLSAgICAgICAgY2FjaGVkQnVmZmVyID0gYnVm
ZmVyOwotICAgICAgICBjYWNoZWRCdWZmZXJQb3MgPSBidWZmZXJQb3M7Ci0gICAgICB9Ci0gICAg
ICBmb3IgKEJ5dGVTdHJpbmcgYnl0ZVN0cmluZyA6IGNhY2hlZEZsdXNoQnVmZmVycykgewotICAg
ICAgICBieXRlU3RyaW5nLndyaXRlVG8ob3V0KTsKLSAgICAgIH0KLQotICAgICAgb3V0LndyaXRl
KGNvcHlBcnJheShjYWNoZWRCdWZmZXIsIGNhY2hlZEJ1ZmZlclBvcykpOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgb3V0cHV0IHN0cmVh
bS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIG91dHB1
dCBzdHJlYW0KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGludCBzaXplKCkgewot
ICAgICAgcmV0dXJuIGZsdXNoZWRCdWZmZXJzVG90YWxCeXRlcyArIGJ1ZmZlclBvczsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBSZXNldHMgdGhpcyBzdHJlYW0sIHNvIHRoYXQgYWxsIGN1cnJl
bnRseSBhY2N1bXVsYXRlZCBvdXRwdXQgaW4gdGhlCi0gICAgICogb3V0cHV0IHN0cmVhbSBpcyBk
aXNjYXJkZWQuIFRoZSBvdXRwdXQgc3RyZWFtIGNhbiBiZSB1c2VkIGFnYWluLAotICAgICAqIHJl
dXNpbmcgdGhlIGFscmVhZHkgYWxsb2NhdGVkIGJ1ZmZlciBzcGFjZS4KLSAgICAgKi8KLSAgICBw
dWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQoKSB7Ci0gICAgICBmbHVzaGVkQnVmZmVycy5j
bGVhcigpOwotICAgICAgZmx1c2hlZEJ1ZmZlcnNUb3RhbEJ5dGVzID0gMDsKLSAgICAgIGJ1ZmZl
clBvcyA9IDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0
cmluZygpIHsKLSAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCI8Qnl0ZVN0cmluZy5PdXRwdXRA
JXMgc2l6ZT0lZD4iLAotICAgICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoU3lzdGVtLmlkZW50
aXR5SGFzaENvZGUodGhpcykpLCBzaXplKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIElu
dGVybmFsIGZ1bmN0aW9uIHVzZWQgYnkgd3JpdGVycy4gIFRoZSBjdXJyZW50IGJ1ZmZlciBpcyBm
dWxsLCBhbmQgdGhlCi0gICAgICogd3JpdGVyIG5lZWRzIGEgbmV3IGJ1ZmZlciB3aG9zZSBzaXpl
IGlzIGF0IGxlYXN0IHRoZSBzcGVjaWZpZWQgbWluaW11bQotICAgICAqIHNpemUuCi0gICAgICov
Ci0gICAgcHJpdmF0ZSB2b2lkIGZsdXNoRnVsbEJ1ZmZlcihpbnQgbWluU2l6ZSkgIHsKLSAgICAg
IGZsdXNoZWRCdWZmZXJzLmFkZChuZXcgTGl0ZXJhbEJ5dGVTdHJpbmcoYnVmZmVyKSk7Ci0gICAg
ICBmbHVzaGVkQnVmZmVyc1RvdGFsQnl0ZXMgKz0gYnVmZmVyLmxlbmd0aDsKLSAgICAgIC8vIFdl
IHdhbnQgdG8gaW5jcmVhc2Ugb3VyIHRvdGFsIGNhcGFjaXR5IGJ5IDUwJSwgYnV0IGFzIGEgbWlu
aW11bSwKLSAgICAgIC8vIHRoZSBuZXcgYnVmZmVyIHNob3VsZCBhbHNvIGF0IGxlYXN0IGJlID49
IG1pblNpemUgYW5kCi0gICAgICAvLyA+PSBpbml0aWFsIENhcGFjaXR5LgotICAgICAgaW50IG5l
d1NpemUgPSBNYXRoLm1heChpbml0aWFsQ2FwYWNpdHksCi0gICAgICAgICAgTWF0aC5tYXgobWlu
U2l6ZSwgZmx1c2hlZEJ1ZmZlcnNUb3RhbEJ5dGVzID4+PiAxKSk7Ci0gICAgICBidWZmZXIgPSBu
ZXcgYnl0ZVtuZXdTaXplXTsKLSAgICAgIGJ1ZmZlclBvcyA9IDA7Ci0gICAgfQotCi0gICAgLyoq
Ci0gICAgICogSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBieSB7QGxpbmsgI3RvQnl0ZVN0cmluZygp
fS4gVGhlIGN1cnJlbnQgYnVmZmVyIG1heQotICAgICAqIG9yIG1heSBub3QgYmUgZnVsbCwgYnV0
IGl0IG5lZWRzIHRvIGJlIGZsdXNoZWQuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGZsdXNo
TGFzdEJ1ZmZlcigpICB7Ci0gICAgICBpZiAoYnVmZmVyUG9zIDwgYnVmZmVyLmxlbmd0aCkgewot
ICAgICAgICBpZiAoYnVmZmVyUG9zID4gMCkgewotICAgICAgICAgIGJ5dGVbXSBidWZmZXJDb3B5
ID0gY29weUFycmF5KGJ1ZmZlciwgYnVmZmVyUG9zKTsKLSAgICAgICAgICBmbHVzaGVkQnVmZmVy
cy5hZGQobmV3IExpdGVyYWxCeXRlU3RyaW5nKGJ1ZmZlckNvcHkpKTsKLSAgICAgICAgfQotICAg
ICAgICAvLyBXZSByZXVzZSB0aGlzIGJ1ZmZlciBmb3IgZnVydGhlciB3cml0ZXMuCi0gICAgICB9
IGVsc2UgewotICAgICAgICAvLyBCdWZmZXIgaXMgY29tcGxldGVseSBmdWxsLiAgSHV6emFoLgot
ICAgICAgICBmbHVzaGVkQnVmZmVycy5hZGQobmV3IExpdGVyYWxCeXRlU3RyaW5nKGJ1ZmZlcikp
OwotICAgICAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIHdlJ3JlIG5vdCBnb2luZyB0byB1c2UgdGhp
cyBPdXRwdXRTdHJlYW0gYWdhaW4uCi0gICAgICAgIC8vIFdlIHNldCBidWZmZXIgdG8gYW4gZW1w
dHkgYnl0ZSBzdHJlYW0gc28gdGhhdCB3ZSdyZSBoYW5kbGluZyB0aGlzCi0gICAgICAgIC8vIGNh
c2Ugd2l0aG91dCB3YXN0aW5nIHNwYWNlLiAgSW4gdGhlIHJhcmUgY2FzZSB0aGF0IG1vcmUgd3Jp
dGVzCi0gICAgICAgIC8vICpkbyogb2NjdXIsIHRoaXMgZW1wdHkgYnVmZmVyIHdpbGwgYmUgZmx1
c2hlZCBhbmQgYW4gYXBwcm9wcmlhdGVseQotICAgICAgICAvLyBzaXplZCBuZXcgYnVmZmVyIHdp
bGwgYmUgY3JlYXRlZC4KLSAgICAgICAgYnVmZmVyID0gRU1QVFlfQllURV9BUlJBWTsKLSAgICAg
IH0KLSAgICAgIGZsdXNoZWRCdWZmZXJzVG90YWxCeXRlcyArPSBidWZmZXJQb3M7Ci0gICAgICBi
dWZmZXJQb3MgPSAwOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgbmV3
IHtAY29kZSBCeXRlU3RyaW5nfSBidWlsZGVyLCB3aGljaCBhbGxvd3MgeW91IHRvCi0gICAqIGVm
ZmljaWVudGx5IGNvbnN0cnVjdCBhIHtAY29kZSBCeXRlU3RyaW5nfSBieSB3cml0aW5nIHRvIGEg
e0BsaW5rCi0gICAqIENvZGVkT3V0cHV0U3RyZWFtfS4gVXNpbmcgdGhpcyBpcyBtdWNoIG1vcmUg
ZWZmaWNpZW50IHRoYW4gY2FsbGluZyB7QGNvZGUKLSAgICogbmV3T3V0cHV0KCl9IGFuZCB3cmFw
cGluZyB0aGF0IGluIGEge0Bjb2RlIENvZGVkT3V0cHV0U3RyZWFtfS4KLSAgICoKLSAgICogPHA+
VGhpcyBpcyBwYWNrYWdlLXByaXZhdGUgYmVjYXVzZSBpdCdzIGEgc29tZXdoYXQgY29uZnVzaW5n
IGludGVyZmFjZS4KLSAgICogVXNlcnMgY2FuIGNhbGwge0BsaW5rIE1lc3NhZ2UjdG9CeXRlU3Ry
aW5nKCl9IGluc3RlYWQgb2YgY2FsbGluZyB0aGlzCi0gICAqIGRpcmVjdGx5LgotICAgKgotICAg
KiBAcGFyYW0gc2l6ZSBUaGUgdGFyZ2V0IGJ5dGUgc2l6ZSBvZiB0aGUge0Bjb2RlIEJ5dGVTdHJp
bmd9LiAgWW91IG11c3Qgd3JpdGUKLSAgICogICAgIGV4YWN0bHkgdGhpcyBtYW55IGJ5dGVzIGJl
Zm9yZSBidWlsZGluZyB0aGUgcmVzdWx0LgotICAgKiBAcmV0dXJuIHRoZSBidWlsZGVyCi0gICAq
LwotICBzdGF0aWMgQ29kZWRCdWlsZGVyIG5ld0NvZGVkQnVpbGRlcihpbnQgc2l6ZSkgewotICAg
IHJldHVybiBuZXcgQ29kZWRCdWlsZGVyKHNpemUpOwotICB9Ci0KLSAgLyoqIFNlZSB7QGxpbmsg
Qnl0ZVN0cmluZyNuZXdDb2RlZEJ1aWxkZXIoaW50KX0uICovCi0gIHN0YXRpYyBmaW5hbCBjbGFz
cyBDb2RlZEJ1aWxkZXIgewotICAgIHByaXZhdGUgZmluYWwgQ29kZWRPdXRwdXRTdHJlYW0gb3V0
cHV0OwotICAgIHByaXZhdGUgZmluYWwgYnl0ZVtdIGJ1ZmZlcjsKLQotICAgIHByaXZhdGUgQ29k
ZWRCdWlsZGVyKGludCBzaXplKSB7Ci0gICAgICBidWZmZXIgPSBuZXcgYnl0ZVtzaXplXTsKLSAg
ICAgIG91dHB1dCA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNlKGJ1ZmZlcik7Ci0gICAg
fQotCi0gICAgcHVibGljIEJ5dGVTdHJpbmcgYnVpbGQoKSB7Ci0gICAgICBvdXRwdXQuY2hlY2tO
b1NwYWNlTGVmdCgpOwotCi0gICAgICAvLyBXZSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlIENv
ZGVkT3V0cHV0U3RyZWFtIHdpbGwgbm90IG1vZGlmeSB0aGUKLSAgICAgIC8vIHVuZGVybHlpbmcg
Ynl0ZXMgYW55bW9yZSBiZWNhdXNlIGl0IGFscmVhZHkgd3JvdGUgYWxsIG9mIHRoZW0uICBTbywK
LSAgICAgIC8vIG5vIG5lZWQgdG8gbWFrZSBhIGNvcHkuCi0gICAgICByZXR1cm4gbmV3IExpdGVy
YWxCeXRlU3RyaW5nKGJ1ZmZlcik7Ci0gICAgfQotCi0gICAgcHVibGljIENvZGVkT3V0cHV0U3Ry
ZWFtIGdldENvZGVkT3V0cHV0KCkgewotICAgICAgcmV0dXJuIG91dHB1dDsKLSAgICB9Ci0gIH0K
LQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotICAvLyBNZXRob2RzIHtAbGluayBSb3BlQnl0ZVN0cmluZ30gbmVl
ZHMgb24gaW5zdGFuY2VzLCB3aGljaCBhcmVuJ3QgcGFydCBvZiB0aGUKLSAgLy8gcHVibGljIEFQ
SS4KLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBkZXB0aCBvZiB0aGUgdHJlZSByZXByZXNlbnRp
bmcgdGhpcyB7QGNvZGUgQnl0ZVN0cmluZ30sIGlmIGFueSwKLSAgICogd2hvc2Ugcm9vdCBpcyB0
aGlzIG5vZGUuIElmIHRoaXMgaXMgYSBsZWFmIG5vZGUsIHJldHVybiAwLgotICAgKgotICAgKiBA
cmV0dXJuIHRyZWUgZGVwdGggb3IgemVybwotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IGlu
dCBnZXRUcmVlRGVwdGgoKTsKLQotICAvKioKLSAgICogUmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0
aGlzIEJ5dGVTdHJpbmcgaXMgbGl0ZXJhbCAoYSBsZWFmIG5vZGUpIG9yIGEKLSAgICogZmxhdC1l
bm91Z2ggdHJlZSBpbiB0aGUgc2Vuc2Ugb2Yge0BsaW5rIFJvcGVCeXRlU3RyaW5nfS4KLSAgICoK
LSAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0cmVlIGlzIGZsYXQgZW5vdWdoCi0gICAqLwotICBw
cm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBpc0JhbGFuY2VkKCk7Ci0KLSAgLyoqCi0gICAqIFJl
dHVybiB0aGUgY2FjaGVkIGhhc2ggY29kZSBpZiBhdmFpbGFibGUuCi0gICAqCi0gICAqIEByZXR1
cm4gdmFsdWUgb2YgY2FjaGVkIGhhc2ggY29kZSBvciAwIGlmIG5vdCBjb21wdXRlZCB5ZXQKLSAg
ICovCi0gIHByb3RlY3RlZCBmaW5hbCBpbnQgcGVla0NhY2hlZEhhc2hDb2RlKCkgewotICAgIHJl
dHVybiBoYXNoOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIGhhc2ggYWNyb3NzIHRo
ZSB2YWx1ZSBieXRlcyBzdGFydGluZyB3aXRoIHRoZSBnaXZlbiBoYXNoLCBhbmQKLSAgICogcmV0
dXJuIHRoZSByZXN1bHQuICBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgaGFzaCBhY3Jvc3Mg
c3RyaW5ncwotICAgKiByZXByZXNlbnRlZCBhcyBhIHNldCBvZiBwaWVjZXMgYnkgYWxsb3dpbmcg
dGhlIGhhc2ggY29tcHV0YXRpb24gdG8gYmUKLSAgICogY29udGludWVkIGZyb20gcGllY2UgdG8g
cGllY2UuCi0gICAqCi0gICAqIEBwYXJhbSBoIHN0YXJ0aW5nIGhhc2ggdmFsdWUKLSAgICogQHBh
cmFtIG9mZnNldCBvZmZzZXQgaW50byB0aGlzIHZhbHVlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgZGF0
YSB2YWx1ZXMKLSAgICogQHBhcmFtIGxlbmd0aCBudW1iZXIgb2YgZGF0YSB2YWx1ZXMgdG8gaW5j
bHVkZSBpbiB0aGUgaGFzaCBjb21wdXRhdGlvbgotICAgKiBAcmV0dXJuIGVuZGluZyBoYXNoIHZh
bHVlCi0gICAqLwotICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IHBhcnRpYWxIYXNoKGludCBoLCBp
bnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKLQotICAvKioKLSAgICogQ2hlY2tzIHRoYXQgdGhlIGdp
dmVuIGluZGV4IGZhbGxzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGFycmF5IHNpemUuCi0gICAqCi0g
ICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggcG9zaXRpb24gdG8gYmUgdGVzdGVkCi0gICAqIEBw
YXJhbSBzaXplIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5Ci0gICAqIEB0aHJvd3MgSW5kZXhPdXRP
ZkJvdW5kc0V4Y2VwdGlvbiBpZiB0aGUgaW5kZXggZG9lcyBub3QgZmFsbCB3aXRoaW4gdGhlIGFy
cmF5LgotICAgKi8KLSAgc3RhdGljIHZvaWQgY2hlY2tJbmRleChpbnQgaW5kZXgsIGludCBzaXpl
KSB7Ci0gICAgaWYgKChpbmRleCB8IChzaXplIC0gKGluZGV4ICsgMSkpKSA8IDApIHsKLSAgICAg
IGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5k
c0V4Y2VwdGlvbigiSW5kZXggPCAwOiAiICsgaW5kZXgpOwotICAgICAgfQotICAgICAgdGhyb3cg
bmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiSW5kZXggPiBsZW5ndGg6ICIgKyBp
bmRleCArICIsICIgKyBzaXplKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIHRo
YXQgdGhlIGdpdmVuIHJhbmdlIGZhbGxzIHdpdGhpbiB0aGUgYm91bmRzIG9mIGFuIGFycmF5Ci0g
ICAqCi0gICAqIEBwYXJhbSBzdGFydEluZGV4IHRoZSBzdGFydCBpbmRleCBvZiB0aGUgcmFuZ2Ug
KGluY2x1c2l2ZSkKLSAgICogQHBhcmFtIGVuZEluZGV4IHRoZSBlbmQgaW5kZXggb2YgdGhlIHJh
bmdlIChleGNsdXNpdmUpCi0gICAqIEBwYXJhbSBzaXplIHRoZSBzaXplIG9mIHRoZSBhcnJheS4K
LSAgICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSByYW5nZS4KLSAgICogQHRocm93cyBJbmRl
eE91dE9mQm91bmRzRXhjZXB0aW9uIHNvbWUgb3IgYWxsIG9mIHRoZSByYW5nZSBmYWxscyBvdXRz
aWRlIG9mIHRoZSBhcnJheS4KLSAgICovCi0gIHN0YXRpYyBpbnQgY2hlY2tSYW5nZShpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBpbnQgc2l6ZSkgewotICAgIGZpbmFsIGludCBsZW5ndGgg
PSBlbmRJbmRleCAtIHN0YXJ0SW5kZXg7Ci0gICAgaWYgKChzdGFydEluZGV4IHwgZW5kSW5kZXgg
fCBsZW5ndGggfCAoc2l6ZSAtIGVuZEluZGV4KSkgPCAwKSB7Ci0gICAgICBpZiAoc3RhcnRJbmRl
eCA8IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkJl
Z2lubmluZyBpbmRleDogIiArIHN0YXJ0SW5kZXggKyAiIDwgMCIpOwotICAgICAgfQotICAgICAg
aWYgKGVuZEluZGV4IDwgc3RhcnRJbmRleCkgewotICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRP
ZkJvdW5kc0V4Y2VwdGlvbigKLSAgICAgICAgICAgICJCZWdpbm5pbmcgaW5kZXggbGFyZ2VyIHRo
YW4gZW5kaW5nIGluZGV4OiAiICsgc3RhcnRJbmRleCArICIsICIgKyBlbmRJbmRleCk7Ci0gICAg
ICB9Ci0gICAgICAvLyBlbmRJbmRleCA+PSBzaXplCi0gICAgICB0aHJvdyBuZXcgSW5kZXhPdXRP
ZkJvdW5kc0V4Y2VwdGlvbigiRW5kIGluZGV4OiAiICsgZW5kSW5kZXggKyAiID49ICIgKyBzaXpl
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGxlbmd0aDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCI8
Qnl0ZVN0cmluZ0AlcyBzaXplPSVkPiIsCi0gICAgICAgIEludGVnZXIudG9IZXhTdHJpbmcoU3lz
dGVtLmlkZW50aXR5SGFzaENvZGUodGhpcykpLCBzaXplKCkpOwotICB9Ci0gIAotICAvKioKLSAg
ICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEge0BsaW5rIGNvbS5nb29nbGUucHJvdG9idWYuQnl0
ZVN0cmluZ30gYmFja2VkIGJ5IGEKLSAgICogc2luZ2xlIGFycmF5IG9mIGJ5dGVzLCBjb250aWd1
b3VzIGluIG1lbW9yeS4gSXQgc3VwcG9ydHMgc3Vic3RyaW5nIGJ5Ci0gICAqIHBvaW50aW5nIHRv
IG9ubHkgYSBzdWItcmFuZ2Ugb2YgdGhlIHVuZGVybHlpbmcgYnl0ZSBhcnJheSwgbWVhbmluZyB0
aGF0IGEKLSAgICogc3Vic3RyaW5nIHdpbGwgcmVmZXJlbmNlIHRoZSBmdWxsIGJ5dGUtYXJyYXkg
b2YgdGhlIHN0cmluZyBpdCdzIG1hZGUgZnJvbSwKLSAgICogZXhhY3RseSBhcyB3aXRoIHtAbGlu
ayBTdHJpbmd9LgotICAgKgotICAgKiBAYXV0aG9yIGNhcmxhbnRvbkBnb29nbGUuY29tIChDYXJs
IEhhdmVybCkKLSAgICovCi0gIC8vIEtlZXAgdGhpcyBjbGFzcyBwcml2YXRlIHRvIGF2b2lkIGRl
YWRsb2NrcyBpbiBjbGFzc2xvYWRpbmcgYWNyb3NzIHRocmVhZHMgYXMgQnl0ZVN0cmluZydzCi0g
IC8vIHN0YXRpYyBpbml0aWFsaXplciBsb2FkcyBMaXRlcmFsQnl0ZVN0cmluZyBhbmQgYW5vdGhl
ciB0aHJlYWQgbG9hZHMgTGl0ZXJhbEJ5dGVTdHJpbmcuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNz
IExpdGVyYWxCeXRlU3RyaW5nIGV4dGVuZHMgQnl0ZVN0cmluZy5MZWFmQnl0ZVN0cmluZyB7Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAg
ICBwcm90ZWN0ZWQgZmluYWwgYnl0ZVtdIGJ5dGVzOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRl
cyBhIHtAY29kZSBMaXRlcmFsQnl0ZVN0cmluZ30gYmFja2VkIGJ5IHRoZSBnaXZlbiBhcnJheSwg
d2l0aG91dAotICAgICAqIGNvcHlpbmcuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYnl0ZXMgYXJy
YXkgdG8gd3JhcAotICAgICAqLwotICAgIExpdGVyYWxCeXRlU3RyaW5nKGJ5dGVbXSBieXRlcykg
ewotICAgICAgdGhpcy5ieXRlcyA9IGJ5dGVzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBieXRlIGJ5dGVBdChpbnQgaW5kZXgpIHsKLSAgICAgIC8vIFVubGlrZSBtb3N0IG1l
dGhvZHMgaW4gdGhpcyBjbGFzcywgdGhpcyBvbmUgaXMgYSBkaXJlY3QgaW1wbGVtZW50YXRpb24K
LSAgICAgIC8vIGlnbm9yaW5nIHRoZSBwb3RlbnRpYWwgb2Zmc2V0IGJlY2F1c2Ugd2UgbmVlZCB0
byBkbyByYW5nZS1jaGVja2luZyBpbiB0aGUKLSAgICAgIC8vIHN1YnN0cmluZyBjYXNlIGFueXdh
eS4KLSAgICAgIHJldHVybiBieXRlc1tpbmRleF07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIGludCBzaXplKCkgewotICAgICAgcmV0dXJuIGJ5dGVzLmxlbmd0aDsKLSAgICB9
Ci0KLSAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotICAgIC8vIEJ5dGVTdHJpbmcgLT4gc3Vic3RyaW5nCi0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgQnl0ZVN0cmluZyBzdWJzdHJpbmcoaW50IGJl
Z2luSW5kZXgsIGludCBlbmRJbmRleCkgewotICAgICAgZmluYWwgaW50IGxlbmd0aCA9IGNoZWNr
UmFuZ2UoYmVnaW5JbmRleCwgZW5kSW5kZXgsIHNpemUoKSk7Ci0KLSAgICAgIGlmIChsZW5ndGgg
PT0gMCkgewotICAgICAgICByZXR1cm4gQnl0ZVN0cmluZy5FTVBUWTsKLSAgICAgIH0KLQotICAg
ICAgcmV0dXJuIG5ldyBCb3VuZGVkQnl0ZVN0cmluZyhieXRlcywgZ2V0T2Zmc2V0SW50b0J5dGVz
KCkgKyBiZWdpbkluZGV4LCBsZW5ndGgpOwotICAgIH0KLQotICAgIC8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAg
Ly8gQnl0ZVN0cmluZyAtPiBieXRlW10KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2
b2lkIGNvcHlUb0ludGVybmFsKAotICAgICAgICBieXRlW10gdGFyZ2V0LCBpbnQgc291cmNlT2Zm
c2V0LCBpbnQgdGFyZ2V0T2Zmc2V0LCBpbnQgbnVtYmVyVG9Db3B5KSB7Ci0gICAgICAvLyBPcHRp
bWl6ZWQgZm9ybSwgbm90IGZvciBzdWJjbGFzc2VzLCBzaW5jZSB3ZSBkb24ndCBjYWxsCi0gICAg
ICAvLyBnZXRPZmZzZXRJbnRvQnl0ZXMoKSBvciBjaGVjayB0aGUgJ251bWJlclRvQ29weScgcGFy
YW1ldGVyLgotICAgICAgLy8gVE9ETyhuYXRoYW5taXR0bGVyKTogSXMgbm90IGNhbGxpbmcgZ2V0
T2Zmc2V0SW50b0J5dGVzIHJlYWxseSBzYXZpbmcgdGhhdCBtdWNoPwotICAgICAgU3lzdGVtLmFy
cmF5Y29weShieXRlcywgc291cmNlT2Zmc2V0LCB0YXJnZXQsIHRhcmdldE9mZnNldCwgbnVtYmVy
VG9Db3B5KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBj
b3B5VG8oQnl0ZUJ1ZmZlciB0YXJnZXQpIHsKLSAgICAgIHRhcmdldC5wdXQoYnl0ZXMsIGdldE9m
ZnNldEludG9CeXRlcygpLCBzaXplKCkpOyAvLyBDb3BpZXMgYnl0ZXMKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgQnl0ZUJ1ZmZlciBhc1JlYWRPbmx5Qnl0ZUJ1ZmZl
cigpIHsKLSAgICAgIHJldHVybiBCeXRlQnVmZmVyLndyYXAoYnl0ZXMsIGdldE9mZnNldEludG9C
eXRlcygpLCBzaXplKCkpLmFzUmVhZE9ubHlCdWZmZXIoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgZmluYWwgTGlzdDxCeXRlQnVmZmVyPiBhc1JlYWRPbmx5Qnl0ZUJ1ZmZl
ckxpc3QoKSB7Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChhc1JlYWRP
bmx5Qnl0ZUJ1ZmZlcigpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmlu
YWwgdm9pZCB3cml0ZVRvKE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0pIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgICBvdXRwdXRTdHJlYW0ud3JpdGUodG9CeXRlQXJyYXkoKSk7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgZmluYWwgdm9pZCB3cml0ZVRvSW50ZXJuYWwoT3V0cHV0U3Ry
ZWFtIG91dHB1dFN0cmVhbSwgaW50IHNvdXJjZU9mZnNldCwgaW50IG51bWJlclRvV3JpdGUpCi0g
ICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoYnl0
ZXMsIGdldE9mZnNldEludG9CeXRlcygpICsgc291cmNlT2Zmc2V0LCBudW1iZXJUb1dyaXRlKTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBmaW5hbCB2b2lkIHdyaXRlVG8oQnl0ZU91dHB1
dCBvdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBvdXRwdXQud3JpdGVMYXp5KGJ5
dGVzLCBnZXRPZmZzZXRJbnRvQnl0ZXMoKSwgc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIHRvU3RyaW5nSW50ZXJuYWwoQ2hhcnNldCBj
aGFyc2V0KSB7Ci0gICAgICByZXR1cm4gbmV3IFN0cmluZyhieXRlcywgZ2V0T2Zmc2V0SW50b0J5
dGVzKCksIHNpemUoKSwgY2hhcnNldCk7Ci0gICAgfQotCi0gICAgLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAv
LyBVVEYtOCBkZWNvZGluZwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIGJvb2xl
YW4gaXNWYWxpZFV0ZjgoKSB7Ci0gICAgICBpbnQgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW50b0J5dGVz
KCk7Ci0gICAgICByZXR1cm4gVXRmOC5pc1ZhbGlkVXRmOChieXRlcywgb2Zmc2V0LCBvZmZzZXQg
KyBzaXplKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBmaW5hbCBp
bnQgcGFydGlhbElzVmFsaWRVdGY4KGludCBzdGF0ZSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkg
ewotICAgICAgaW50IGluZGV4ID0gZ2V0T2Zmc2V0SW50b0J5dGVzKCkgKyBvZmZzZXQ7Ci0gICAg
ICByZXR1cm4gVXRmOC5wYXJ0aWFsSXNWYWxpZFV0Zjgoc3RhdGUsIGJ5dGVzLCBpbmRleCwgaW5k
ZXggKyBsZW5ndGgpOwotICAgIH0KLQotICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgLy8gZXF1YWxzKCkg
YW5kIGhhc2hDb2RlKCkKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCBib29sZWFu
IGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSB0aGlzKSB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBC
eXRlU3RyaW5nKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGlm
IChzaXplKCkgIT0gKChCeXRlU3RyaW5nKSBvdGhlcikuc2l6ZSgpKSB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChzaXplKCkgPT0gMCkgewotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgTGl0ZXJhbEJ5
dGVTdHJpbmcpIHsKLSAgICAgICAgTGl0ZXJhbEJ5dGVTdHJpbmcgb3RoZXJBc0xpdGVyYWwgPSAo
TGl0ZXJhbEJ5dGVTdHJpbmcpIG90aGVyOwotICAgICAgICAvLyBJZiB3ZSBrbm93IHRoZSBoYXNo
IGNvZGVzIGFuZCB0aGV5IGFyZSBub3QgZXF1YWwsIHdlIGtub3cgdGhlIGJ5dGUKLSAgICAgICAg
Ly8gc3RyaW5ncyBhcmUgbm90IGVxdWFsLgotICAgICAgICBpbnQgdGhpc0hhc2ggPSBwZWVrQ2Fj
aGVkSGFzaENvZGUoKTsKLSAgICAgICAgaW50IHRoYXRIYXNoID0gb3RoZXJBc0xpdGVyYWwucGVl
a0NhY2hlZEhhc2hDb2RlKCk7Ci0gICAgICAgIGlmICh0aGlzSGFzaCAhPSAwICYmIHRoYXRIYXNo
ICE9IDAgJiYgdGhpc0hhc2ggIT0gdGhhdEhhc2gpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXF1YWxzUmFuZ2UoKExpdGVyYWxCeXRlU3Ry
aW5nKSBvdGhlciwgMCwgc2l6ZSgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFJvcGVC
eXRlU3RyaW5nIGFuZCBOaW9CeXRlU3RyaW5nLgotICAgICAgICByZXR1cm4gb3RoZXIuZXF1YWxz
KHRoaXMpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrIGVxdWFsaXR5
IG9mIHRoZSBzdWJzdHJpbmcgb2YgZ2l2ZW4gbGVuZ3RoIG9mIHRoaXMgb2JqZWN0IHN0YXJ0aW5n
IGF0Ci0gICAgICogemVybyB3aXRoIGFub3RoZXIge0Bjb2RlIExpdGVyYWxCeXRlU3RyaW5nfSBz
dWJzdHJpbmcgc3RhcnRpbmcgYXQgb2Zmc2V0LgotICAgICAqCi0gICAgICogQHBhcmFtIG90aGVy
ICB3aGF0IHRvIGNvbXBhcmUgYSBzdWJzdHJpbmcgaW4KLSAgICAgKiBAcGFyYW0gb2Zmc2V0IG9m
ZnNldCBpbnRvIG90aGVyCi0gICAgICogQHBhcmFtIGxlbmd0aCBudW1iZXIgb2YgYnl0ZXMgdG8g
Y29tcGFyZQotICAgICAqIEByZXR1cm4gdHJ1ZSBmb3IgZXF1YWxpdHkgb2Ygc3Vic3RyaW5ncywg
ZWxzZSBmYWxzZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBmaW5hbCBib29sZWFuIGVx
dWFsc1JhbmdlKEJ5dGVTdHJpbmcgb3RoZXIsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLSAg
ICAgIGlmIChsZW5ndGggPiBvdGhlci5zaXplKCkpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVn
YWxBcmd1bWVudEV4Y2VwdGlvbigiTGVuZ3RoIHRvbyBsYXJnZTogIiArIGxlbmd0aCArIHNpemUo
KSk7Ci0gICAgICB9Ci0gICAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gb3RoZXIuc2l6ZSgpKSB7
Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAg
ICAiUmFuIG9mZiBlbmQgb2Ygb3RoZXI6ICIgKyBvZmZzZXQgKyAiLCAiICsgbGVuZ3RoICsgIiwg
IiArIG90aGVyLnNpemUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvdGhlciBpbnN0YW5jZW9m
IExpdGVyYWxCeXRlU3RyaW5nKSB7Ci0gICAgICAgIExpdGVyYWxCeXRlU3RyaW5nIGxic090aGVy
ID0gKExpdGVyYWxCeXRlU3RyaW5nKSBvdGhlcjsKLSAgICAgICAgYnl0ZVtdIHRoaXNCeXRlcyA9
IGJ5dGVzOwotICAgICAgICBieXRlW10gb3RoZXJCeXRlcyA9IGxic090aGVyLmJ5dGVzOwotICAg
ICAgICBpbnQgdGhpc0xpbWl0ID0gZ2V0T2Zmc2V0SW50b0J5dGVzKCkgKyBsZW5ndGg7Ci0gICAg
ICAgIGZvciAoCi0gICAgICAgICAgICBpbnQgdGhpc0luZGV4ID0gZ2V0T2Zmc2V0SW50b0J5dGVz
KCksCi0gICAgICAgICAgICAgICAgb3RoZXJJbmRleCA9IGxic090aGVyLmdldE9mZnNldEludG9C
eXRlcygpICsgb2Zmc2V0OwotICAgICAgICAgICAgKHRoaXNJbmRleCA8IHRoaXNMaW1pdCk7ICsr
dGhpc0luZGV4LCArK290aGVySW5kZXgpIHsKLSAgICAgICAgICBpZiAodGhpc0J5dGVzW3RoaXNJ
bmRleF0gIT0gb3RoZXJCeXRlc1tvdGhlckluZGV4XSkgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIG90aGVyLnN1YnN0cmluZyhvZmZzZXQsIG9mZnNldCArIGxlbmd0
aCkuZXF1YWxzKHN1YnN0cmluZygwLCBsZW5ndGgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwcm90ZWN0ZWQgZmluYWwgaW50IHBhcnRpYWxIYXNoKGludCBoLCBpbnQgb2Zmc2V0LCBp
bnQgbGVuZ3RoKSB7Ci0gICAgICByZXR1cm4gSW50ZXJuYWwucGFydGlhbEhhc2goaCwgYnl0ZXMs
IGdldE9mZnNldEludG9CeXRlcygpICsgb2Zmc2V0LCBsZW5ndGgpOwotICAgIH0KLQotICAgIC8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0gICAgLy8gSW5wdXQgc3RyZWFtCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgZmluYWwgSW5wdXRTdHJlYW0gbmV3SW5wdXQoKSB7Ci0gICAgICByZXR1cm4gbmV3IEJ5dGVB
cnJheUlucHV0U3RyZWFtKGJ5dGVzLCBnZXRPZmZzZXRJbnRvQnl0ZXMoKSwgc2l6ZSgpKTsgLy8g
Tm8gY29weQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCBDb2RlZElu
cHV0U3RyZWFtIG5ld0NvZGVkSW5wdXQoKSB7Ci0gICAgICAvLyBXZSB0cnVzdCBDb2RlZElucHV0
U3RyZWFtIG5vdCB0byBtb2RpZnkgdGhlIGJ5dGVzLCBvciB0byBnaXZlIGFueW9uZQotICAgICAg
Ly8gZWxzZSBhY2Nlc3MgdG8gdGhlbS4KLSAgICAgIHJldHVybiBDb2RlZElucHV0U3RyZWFtLm5l
d0luc3RhbmNlKAotICAgICAgICAgIGJ5dGVzLCBnZXRPZmZzZXRJbnRvQnl0ZXMoKSwgc2l6ZSgp
LCB0cnVlIC8qIGJ1ZmZlcklzSW1tdXRhYmxlICovKTsKLSAgICB9Ci0KLSAgICAvLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotICAgIC8vIEludGVybmFsIG1ldGhvZHMKLQotICAgIC8qKgotICAgICAqIE9mZnNldCBpbnRv
IHtAY29kZSBieXRlc1tdfSB0byB1c2UsIG5vbi16ZXJvIGZvciBzdWJzdHJpbmdzLgotICAgICAq
Ci0gICAgICogQHJldHVybiBhbHdheXMgMCBmb3IgdGhpcyBjbGFzcwotICAgICAqLwotICAgIHBy
b3RlY3RlZCBpbnQgZ2V0T2Zmc2V0SW50b0J5dGVzKCkgewotICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICB9Ci0gIAotICAvKioKLSAgICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJlcHJlc2VudCB0
aGUgc3Vic3RyaW5nIG9mIGEge0BsaW5rIEJ5dGVTdHJpbmd9IG92ZXIgYQotICAgKiBzaW5nbGUg
Ynl0ZSBhcnJheS4gSW4gdGVybXMgb2YgdGhlIHB1YmxpYyBBUEkgb2Yge0BsaW5rIEJ5dGVTdHJp
bmd9LCB5b3UgZW5kCi0gICAqIHVwIGhlcmUgYnkgY2FsbGluZyB7QGxpbmsgQnl0ZVN0cmluZyNj
b3B5RnJvbShieXRlW10pfSBmb2xsb3dlZCBieSB7QGxpbmsKLSAgICogQnl0ZVN0cmluZyNzdWJz
dHJpbmcoaW50LCBpbnQpfS4KLSAgICoKLSAgICogPHA+VGhpcyBjbGFzcyBjb250YWlucyBtb3N0
IG9mIHRoZSBvdmVyaGVhZCBpbnZvbHZlZCBpbiBjcmVhdGluZyBhIHN1YnN0cmluZwotICAgKiBm
cm9tIGEge0BsaW5rIExpdGVyYWxCeXRlU3RyaW5nfS4gIFRoZSBvdmVyaGVhZCBpbnZvbHZlcyBz
b21lIHJhbmdlLWNoZWNraW5nCi0gICAqIGFuZCB0d28gZXh0cmEgZmllbGRzLgotICAgKgotICAg
KiBAYXV0aG9yIGNhcmxhbnRvbkBnb29nbGUuY29tIChDYXJsIEhhdmVybCkKLSAgICovCi0gIC8v
IEtlZXAgdGhpcyBjbGFzcyBwcml2YXRlIHRvIGF2b2lkIGRlYWRsb2NrcyBpbiBjbGFzc2xvYWRp
bmcgYWNyb3NzIHRocmVhZHMgYXMgQnl0ZVN0cmluZydzCi0gIC8vIHN0YXRpYyBpbml0aWFsaXpl
ciBsb2FkcyBMaXRlcmFsQnl0ZVN0cmluZyBhbmQgYW5vdGhlciB0aHJlYWQgbG9hZHMgQm91bmRl
ZEJ5dGVTdHJpbmcuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEJvdW5kZWRCeXRlU3Ry
aW5nIGV4dGVuZHMgTGl0ZXJhbEJ5dGVTdHJpbmcgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQg
Ynl0ZXNPZmZzZXQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgYnl0ZXNMZW5ndGg7Ci0KLSAgICAv
KioKLSAgICAgKiBDcmVhdGVzIGEge0Bjb2RlIEJvdW5kZWRCeXRlU3RyaW5nfSBiYWNrZWQgYnkg
dGhlIHN1Yi1yYW5nZSBvZiBnaXZlbiBhcnJheSwKLSAgICAgKiB3aXRob3V0IGNvcHlpbmcuCi0g
ICAgICoKLSAgICAgKiBAcGFyYW0gYnl0ZXMgIGFycmF5IHRvIHdyYXAKLSAgICAgKiBAcGFyYW0g
b2Zmc2V0IGluZGV4IHRvIGZpcnN0IGJ5dGUgdG8gdXNlIGluIGJ5dGVzCi0gICAgICogQHBhcmFt
IGxlbmd0aCBudW1iZXIgb2YgYnl0ZXMgdG8gdXNlIGZyb20gYnl0ZXMKLSAgICAgKiBAdGhyb3dz
IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB7QGNvZGUgb2Zmc2V0IDwgMH0sIHtAY29kZSBs
ZW5ndGggPCAwfSwKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBp
ZiB7QGNvZGUgb2Zmc2V0ICsgbGVuZ3RoID4KLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBieXRlcy5sZW5ndGh9LgotICAgICAqLwotICAgIEJvdW5kZWRCeXRlU3RyaW5n
KGJ5dGVbXSBieXRlcywgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotICAgICAgc3VwZXIoYnl0
ZXMpOwotICAgICAgY2hlY2tSYW5nZShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCwgYnl0ZXMubGVu
Z3RoKTsKLQotICAgICAgdGhpcy5ieXRlc09mZnNldCA9IG9mZnNldDsKLSAgICAgIHRoaXMuYnl0
ZXNMZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgYnl0
ZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCi0gICAgICogVGhyb3dzIHtAbGluayBBcnJheUluZGV4T3V0
T2ZCb3VuZHNFeGNlcHRpb259Ci0gICAgICogZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHJl
YXNvbnMgYWx0aG91Z2ggaXQgd291bGQgbW9yZSBwcm9wZXJseSBiZQotICAgICAqIHtAbGluayBJ
bmRleE91dE9mQm91bmRzRXhjZXB0aW9ufS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBp
bmRleCBvZiBieXRlCi0gICAgICogQHJldHVybiB0aGUgdmFsdWUKLSAgICAgKiBAdGhyb3dzIEFy
cmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB7QGNvZGUgaW5kZXh9IGlzIDwgMCBvciA+PSBz
aXplCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJ5dGUgYnl0ZUF0KGludCBp
bmRleCkgewotICAgICAgLy8gV2UgbXVzdCBjaGVjayB0aGUgaW5kZXggb3Vyc2VsdmVzIGFzIHdl
IGNhbm5vdCByZWx5IG9uIEphdmEgYXJyYXkgaW5kZXgKLSAgICAgIC8vIGNoZWNraW5nIGZvciBz
dWJzdHJpbmdzLgotICAgICAgY2hlY2tJbmRleChpbmRleCwgc2l6ZSgpKTsKLSAgICAgIHJldHVy
biBieXRlc1tieXRlc09mZnNldCArIGluZGV4XTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgaW50IHNpemUoKSB7Ci0gICAgICByZXR1cm4gYnl0ZXNMZW5ndGg7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIGludCBnZXRPZmZzZXRJbnRvQnl0ZXMoKSB7
Ci0gICAgICByZXR1cm4gYnl0ZXNPZmZzZXQ7Ci0gICAgfQotCi0gICAgLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAg
ICAvLyBCeXRlU3RyaW5nIC0+IGJ5dGVbXQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVk
IHZvaWQgY29weVRvSW50ZXJuYWwoYnl0ZVtdIHRhcmdldCwgaW50IHNvdXJjZU9mZnNldCwgaW50
IHRhcmdldE9mZnNldCwKLSAgICAgICAgaW50IG51bWJlclRvQ29weSkgewotICAgICAgU3lzdGVt
LmFycmF5Y29weShieXRlcywgZ2V0T2Zmc2V0SW50b0J5dGVzKCkgKyBzb3VyY2VPZmZzZXQsIHRh
cmdldCwKLSAgICAgICAgICB0YXJnZXRPZmZzZXQsIG51bWJlclRvQ29weSk7Ci0gICAgfQotCi0g
ICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLSAgICAvLyBTZXJpYWxpemFibGUKLQotICAgIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gICAgT2JqZWN0IHdyaXRlUmVw
bGFjZSgpIHsKLSAgICAgIHJldHVybiBCeXRlU3RyaW5nLndyYXAodG9CeXRlQXJyYXkoKSk7Ci0g
ICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoQFN1cHByZXNzV2FybmluZ3MoInVu
dXNlZCIpIE9iamVjdElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAg
dGhyb3cgbmV3IEludmFsaWRPYmplY3RFeGNlcHRpb24oCi0gICAgICAgICAgIkJvdW5kZWRCeXRl
U3RyZWFtIGluc3RhbmNlcyBhcmUgbm90IHRvIGJlIHNlcmlhbGl6ZWQgZGlyZWN0bHkiKTsKLSAg
ICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9Db2RlZElucHV0U3RyZWFtLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZh
L2NvbS9nb29nbGUvcHJvdG9idWYvQ29kZWRJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlODg2MDY1MWE0ZmRjNjA0YThmMzJjOWVhMTQyM2EwYTEzNTRlZGRi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3Jl
L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Db2RlZElucHV0U3RyZWFtLmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSwxMzAyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBqYXZh
LmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwot
aW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsK
LWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1p
bXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogUmVhZHMgYW5kIGRlY29kZXMgcHJvdG9j
b2wgbWVzc2FnZSBmaWVsZHMuCi0gKgotICogVGhpcyBjbGFzcyBjb250YWlucyB0d28ga2luZHMg
b2YgbWV0aG9kczogIG1ldGhvZHMgdGhhdCByZWFkIHNwZWNpZmljCi0gKiBwcm90b2NvbCBtZXNz
YWdlIGNvbnN0cnVjdHMgYW5kIGZpZWxkIHR5cGVzIChlLmcuIHtAbGluayAjcmVhZFRhZygpfSBh
bmQKLSAqIHtAbGluayAjcmVhZEludDMyKCl9KSBhbmQgbWV0aG9kcyB0aGF0IHJlYWQgbG93LWxl
dmVsIHZhbHVlcyAoZS5nLgotICoge0BsaW5rICNyZWFkUmF3VmFyaW50MzIoKX0gYW5kIHtAbGlu
ayAjcmVhZFJhd0J5dGVzfSkuICBJZiB5b3UgYXJlIHJlYWRpbmcKLSAqIGVuY29kZWQgcHJvdG9j
b2wgbWVzc2FnZXMsIHlvdSBzaG91bGQgdXNlIHRoZSBmb3JtZXIgbWV0aG9kcywgYnV0IGlmIHlv
dSBhcmUKLSAqIHJlYWRpbmcgc29tZSBvdGhlciBmb3JtYXQgb2YgeW91ciBvd24gZGVzaWduLCB1
c2UgdGhlIGxhdHRlci4KLSAqCi0gKiBAYXV0aG9yIGtlbnRvbkBnb29nbGUuY29tIEtlbnRvbiBW
YXJkYQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQ29kZWRJbnB1dFN0cmVhbSB7Ci0gIC8qKgot
ICAgKiBDcmVhdGUgYSBuZXcgQ29kZWRJbnB1dFN0cmVhbSB3cmFwcGluZyB0aGUgZ2l2ZW4gSW5w
dXRTdHJlYW0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIENvZGVkSW5wdXRTdHJlYW0gbmV3SW5z
dGFuY2UoZmluYWwgSW5wdXRTdHJlYW0gaW5wdXQpIHsKLSAgICByZXR1cm4gbmV3IENvZGVkSW5w
dXRTdHJlYW0oaW5wdXQsIEJVRkZFUl9TSVpFKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0
ZSBhIG5ldyBDb2RlZElucHV0U3RyZWFtIHdyYXBwaW5nIHRoZSBnaXZlbiBJbnB1dFN0cmVhbS4K
LSAgICovCi0gIHN0YXRpYyBDb2RlZElucHV0U3RyZWFtIG5ld0luc3RhbmNlKGZpbmFsIElucHV0
U3RyZWFtIGlucHV0LCBpbnQgYnVmZmVyU2l6ZSkgewotICAgIHJldHVybiBuZXcgQ29kZWRJbnB1
dFN0cmVhbShpbnB1dCwgYnVmZmVyU2l6ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEg
bmV3IENvZGVkSW5wdXRTdHJlYW0gd3JhcHBpbmcgdGhlIGdpdmVuIGJ5dGUgYXJyYXkuCi0gICAq
LwotICBwdWJsaWMgc3RhdGljIENvZGVkSW5wdXRTdHJlYW0gbmV3SW5zdGFuY2UoZmluYWwgYnl0
ZVtdIGJ1ZikgewotICAgIHJldHVybiBuZXdJbnN0YW5jZShidWYsIDAsIGJ1Zi5sZW5ndGgpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBDb2RlZElucHV0U3RyZWFtIHdyYXBwaW5n
IHRoZSBnaXZlbiBieXRlIGFycmF5IHNsaWNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBDb2Rl
ZElucHV0U3RyZWFtIG5ld0luc3RhbmNlKGZpbmFsIGJ5dGVbXSBidWYsIGZpbmFsIGludCBvZmYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQg
bGVuKSB7Ci0gICAgcmV0dXJuIG5ld0luc3RhbmNlKGJ1Ziwgb2ZmLCBsZW4sIGZhbHNlIC8qIGJ1
ZmZlcklzSW1tdXRhYmxlICovKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBD
b2RlZElucHV0U3RyZWFtIHdyYXBwaW5nIHRoZSBnaXZlbiBieXRlIGFycmF5IHNsaWNlLgotICAg
Ki8KLSAgc3RhdGljIENvZGVkSW5wdXRTdHJlYW0gbmV3SW5zdGFuY2UoCi0gICAgICBmaW5hbCBi
eXRlW10gYnVmLCBmaW5hbCBpbnQgb2ZmLCBmaW5hbCBpbnQgbGVuLCBmaW5hbCBib29sZWFuIGJ1
ZmZlcklzSW1tdXRhYmxlKSB7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSByZXN1bHQgPSBuZXcgQ29k
ZWRJbnB1dFN0cmVhbShidWYsIG9mZiwgbGVuLCBidWZmZXJJc0ltbXV0YWJsZSk7Ci0gICAgdHJ5
IHsKLSAgICAgIC8vIFNvbWUgdXNlcyBvZiBDb2RlZElucHV0U3RyZWFtIGNhbiBiZSBtb3JlIGVm
ZmljaWVudCBpZiB0aGV5IGtub3cKLSAgICAgIC8vIGV4YWN0bHkgaG93IG1hbnkgYnl0ZXMgYXJl
IGF2YWlsYWJsZS4gIEJ5IHB1c2hpbmcgdGhlIGVuZCBwb2ludCBvZiB0aGUKLSAgICAgIC8vIGJ1
ZmZlciBhcyBhIGxpbWl0LCB3ZSBhbGxvdyB0aGVtIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uIHZp
YQotICAgICAgLy8gZ2V0Qnl0ZXNVbnRpbExpbWl0KCkuICBQdXNoaW5nIGEgbGltaXQgdGhhdCB3
ZSBrbm93IGlzIGF0IHRoZSBlbmQgb2YKLSAgICAgIC8vIHRoZSBzdHJlYW0gY2FuIG5ldmVyIGh1
cnQsIHNpbmNlIHdlIGNhbiBuZXZlciBwYXN0IHRoYXQgcG9pbnQgYW55d2F5LgotICAgICAgcmVz
dWx0LnB1c2hMaW1pdChsZW4pOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbiBleCkgewotICAgICAgLy8gVGhlIG9ubHkgcmVhc29uIHB1c2hMaW1pdCgpIG1pZ2h0
IHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlIGlzIGlmIGxlbgotICAgICAgLy8gaXMgbmVnYXRpdmUu
IE5vcm1hbGx5IHB1c2hMaW1pdCgpJ3MgcGFyYW1ldGVyIGNvbWVzIGRpcmVjdGx5IG9mZiB0aGUK
LSAgICAgIC8vIHdpcmUsIHNvIGl0J3MgaW1wb3J0YW50IHRvIGNhdGNoIGV4Y2VwdGlvbnMgaW4g
Y2FzZSBvZiBjb3JydXB0IG9yCi0gICAgICAvLyBtYWxpY2lvdXMgZGF0YS4gSG93ZXZlciwgaW4g
dGhpcyBjYXNlLCB3ZSBleHBlY3QgdGhhdCBsZW4gaXMgbm90IGEKLSAgICAgIC8vIHVzZXItc3Vw
cGxpZWQgdmFsdWUsIHNvIHdlIGNhbiBhc3N1bWUgdGhhdCBpdCBiZWluZyBuZWdhdGl2ZSBpbmRp
Y2F0ZXMKLSAgICAgIC8vIGEgcHJvZ3JhbW1pbmcgZXJyb3IuIFRoZXJlZm9yZSwgdGhyb3dpbmcg
YW4gdW5jaGVja2VkIGV4Y2VwdGlvbiBpcwotICAgICAgLy8gYXBwcm9wcmlhdGUuCi0gICAgICB0
aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGV4KTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcgQ29kZWRJbnB1dFN0cmVh
bSB3cmFwcGluZyB0aGUgZ2l2ZW4gQnl0ZUJ1ZmZlci4gVGhlIGRhdGEKLSAgICogc3RhcnRpbmcg
ZnJvbSB0aGUgQnl0ZUJ1ZmZlcidzIGN1cnJlbnQgcG9zaXRpb24gdG8gaXRzIGxpbWl0IHdpbGwg
YmUgcmVhZC4KLSAgICogVGhlIHJldHVybmVkIENvZGVkSW5wdXRTdHJlYW0gbWF5IG9yIG1heSBu
b3Qgc2hhcmUgdGhlIHVuZGVybHlpbmcgZGF0YQotICAgKiBpbiB0aGUgQnl0ZUJ1ZmZlciwgdGhl
cmVmb3JlIHRoZSBCeXRlQnVmZmVyIGNhbm5vdCBiZSBjaGFuZ2VkIHdoaWxlIHRoZQotICAgKiBD
b2RlZElucHV0U3RyZWFtIGlzIGluIHVzZS4KLSAgICogTm90ZSB0aGF0IHRoZSBCeXRlQnVmZmVy
J3MgcG9zaXRpb24gd29uJ3QgYmUgY2hhbmdlZCBieSB0aGlzIGZ1bmN0aW9uLgotICAgKiBDb25j
dXJyZW50IGNhbGxzIHdpdGggdGhlIHNhbWUgQnl0ZUJ1ZmZlciBvYmplY3QgYXJlIHNhZmUgaWYg
bm8gb3RoZXIKLSAgICogdGhyZWFkIGlzIHRyeWluZyB0byBhbHRlciB0aGUgQnl0ZUJ1ZmZlcidz
IHN0YXR1cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQ29kZWRJbnB1dFN0cmVhbSBuZXdJbnN0
YW5jZShCeXRlQnVmZmVyIGJ1ZikgewotICAgIGlmIChidWYuaGFzQXJyYXkoKSkgewotICAgICAg
cmV0dXJuIG5ld0luc3RhbmNlKGJ1Zi5hcnJheSgpLCBidWYuYXJyYXlPZmZzZXQoKSArIGJ1Zi5w
b3NpdGlvbigpLAotICAgICAgICAgIGJ1Zi5yZW1haW5pbmcoKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIEJ5dGVCdWZmZXIgdGVtcCA9IGJ1Zi5kdXBsaWNhdGUoKTsKLSAgICAgIGJ5dGVbXSBidWZm
ZXIgPSBuZXcgYnl0ZVt0ZW1wLnJlbWFpbmluZygpXTsKLSAgICAgIHRlbXAuZ2V0KGJ1ZmZlcik7
Ci0gICAgICByZXR1cm4gbmV3SW5zdGFuY2UoYnVmZmVyKTsKLSAgICB9Ci0gIH0KLQotICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIC8qKgotICAgKiBBdHRlbXB0IHRvIHJlYWQgYSBmaWVsZCB0YWcsIHJldHVy
bmluZyB6ZXJvIGlmIHdlIGhhdmUgcmVhY2hlZCBFT0YuCi0gICAqIFByb3RvY29sIG1lc3NhZ2Ug
cGFyc2VycyB1c2UgdGhpcyB0byByZWFkIHRhZ3MsIHNpbmNlIGEgcHJvdG9jb2wgbWVzc2FnZQot
ICAgKiBtYXkgbGVnYWxseSBlbmQgd2hlcmV2ZXIgYSB0YWcgb2NjdXJzLCBhbmQgemVybyBpcyBu
b3QgYSB2YWxpZCB0YWcgbnVtYmVyLgotICAgKi8KLSAgcHVibGljIGludCByZWFkVGFnKCkgdGhy
b3dzIElPRXhjZXB0aW9uIHsKLSAgICBpZiAoaXNBdEVuZCgpKSB7Ci0gICAgICBsYXN0VGFnID0g
MDsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGxhc3RUYWcgPSByZWFkUmF3VmFyaW50
MzIoKTsKLSAgICBpZiAoV2lyZUZvcm1hdC5nZXRUYWdGaWVsZE51bWJlcihsYXN0VGFnKSA9PSAw
KSB7Ci0gICAgICAvLyBJZiB3ZSBhY3R1YWxseSByZWFkIHplcm8gKG9yIGFueSB0YWcgbnVtYmVy
IGNvcnJlc3BvbmRpbmcgdG8gZmllbGQKLSAgICAgIC8vIG51bWJlciB6ZXJvKSwgdGhhdCdzIG5v
dCBhIHZhbGlkIHRhZy4KLSAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
bi5pbnZhbGlkVGFnKCk7Ci0gICAgfQotICAgIHJldHVybiBsYXN0VGFnOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFZlcmlmaWVzIHRoYXQgdGhlIGxhc3QgY2FsbCB0byByZWFkVGFnKCkgcmV0dXJuZWQg
dGhlIGdpdmVuIHRhZyB2YWx1ZS4KLSAgICogVGhpcyBpcyB1c2VkIHRvIHZlcmlmeSB0aGF0IGEg
bmVzdGVkIGdyb3VwIGVuZGVkIHdpdGggdGhlIGNvcnJlY3QKLSAgICogZW5kIHRhZy4KLSAgICoK
LSAgICogQHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24ge0Bjb2RlIHZhbHVl
fSBkb2VzIG5vdCBtYXRjaCB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdCB0YWcuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjaGVja0xhc3RUYWdXYXMo
ZmluYWwgaW50IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgaWYgKGxhc3RUYWcgIT0gdmFsdWUp
IHsKLSAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5pbnZhbGlkRW5k
VGFnKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGludCBnZXRMYXN0VGFnKCkgewotICAgIHJl
dHVybiBsYXN0VGFnOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWRzIGFuZCBkaXNjYXJkcyBhIHNp
bmdsZSBmaWVsZCwgZ2l2ZW4gaXRzIHRhZyB2YWx1ZS4KLSAgICoKLSAgICogQHJldHVybiB7QGNv
ZGUgZmFsc2V9IGlmIHRoZSB0YWcgaXMgYW4gZW5kZ3JvdXAgdGFnLCBpbiB3aGljaCBjYXNlCi0g
ICAqICAgICAgICAgbm90aGluZyBpcyBza2lwcGVkLiAgT3RoZXJ3aXNlLCByZXR1cm5zIHtAY29k
ZSB0cnVlfS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHNraXBGaWVsZChmaW5hbCBpbnQgdGFn
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHN3aXRjaCAoV2lyZUZvcm1hdC5nZXRUYWdXaXJl
VHlwZSh0YWcpKSB7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfVkFSSU5UOgotICAg
ICAgICBza2lwUmF3VmFyaW50KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBX
aXJlRm9ybWF0LldJUkVUWVBFX0ZJWEVENjQ6Ci0gICAgICAgIHNraXBSYXdCeXRlcyg4KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVOR1RI
X0RFTElNSVRFRDoKLSAgICAgICAgc2tpcFJhd0J5dGVzKHJlYWRSYXdWYXJpbnQzMigpKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfU1RBUlRf
R1JPVVA6Ci0gICAgICAgIHNraXBNZXNzYWdlKCk7Ci0gICAgICAgIGNoZWNrTGFzdFRhZ1dhcygK
LSAgICAgICAgICBXaXJlRm9ybWF0Lm1ha2VUYWcoV2lyZUZvcm1hdC5nZXRUYWdGaWVsZE51bWJl
cih0YWcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXJlRm9ybWF0LldJUkVUWVBF
X0VORF9HUk9VUCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgV2lyZUZvcm1h
dC5XSVJFVFlQRV9FTkRfR1JPVVA6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2Ug
V2lyZUZvcm1hdC5XSVJFVFlQRV9GSVhFRDMyOgotICAgICAgICBza2lwUmF3Qnl0ZXMoNCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgdGhyb3cgSW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLmludmFsaWRXaXJlVHlwZSgpOwotICAgIH0KLSAgfQot
Ci0gIC8qKgotICAgKiBSZWFkcyBhIHNpbmdsZSBmaWVsZCBhbmQgd3JpdGVzIGl0IHRvIG91dHB1
dCBpbiB3aXJlIGZvcm1hdCwKLSAgICogZ2l2ZW4gaXRzIHRhZyB2YWx1ZS4KLSAgICoKLSAgICog
QHJldHVybiB7QGNvZGUgZmFsc2V9IGlmIHRoZSB0YWcgaXMgYW4gZW5kZ3JvdXAgdGFnLCBpbiB3
aGljaCBjYXNlCi0gICAqICAgICAgICAgbm90aGluZyBpcyBza2lwcGVkLiAgT3RoZXJ3aXNlLCBy
ZXR1cm5zIHtAY29kZSB0cnVlfS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHNraXBGaWVsZChm
aW5hbCBpbnQgdGFnLCBmaW5hbCBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpCi0gICAgICB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgIHN3aXRjaCAoV2lyZUZvcm1hdC5nZXRUYWdXaXJlVHlwZSh0
YWcpKSB7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfVkFSSU5UOiB7Ci0gICAgICAg
IGxvbmcgdmFsdWUgPSByZWFkSW50NjQoKTsKLSAgICAgICAgb3V0cHV0LndyaXRlUmF3VmFyaW50
MzIodGFnKTsKLSAgICAgICAgb3V0cHV0LndyaXRlVUludDY0Tm9UYWcodmFsdWUpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhc2UgV2lyZUZvcm1hdC5XSVJFVFlQRV9G
SVhFRDY0OiB7Ci0gICAgICAgIGxvbmcgdmFsdWUgPSByZWFkUmF3TGl0dGxlRW5kaWFuNjQoKTsK
LSAgICAgICAgb3V0cHV0LndyaXRlUmF3VmFyaW50MzIodGFnKTsKLSAgICAgICAgb3V0cHV0Lndy
aXRlRml4ZWQ2NE5vVGFnKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0g
ICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRDogewotICAgICAg
ICBCeXRlU3RyaW5nIHZhbHVlID0gcmVhZEJ5dGVzKCk7Ci0gICAgICAgIG91dHB1dC53cml0ZVJh
d1ZhcmludDMyKHRhZyk7Ci0gICAgICAgIG91dHB1dC53cml0ZUJ5dGVzTm9UYWcodmFsdWUpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNhc2UgV2lyZUZvcm1hdC5XSVJF
VFlQRV9TVEFSVF9HUk9VUDogewotICAgICAgICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMih0YWcp
OwotICAgICAgICBza2lwTWVzc2FnZShvdXRwdXQpOwotICAgICAgICBpbnQgZW5kdGFnID0gV2ly
ZUZvcm1hdC5tYWtlVGFnKFdpcmVGb3JtYXQuZ2V0VGFnRmllbGROdW1iZXIodGFnKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXJlRm9ybWF0LldJUkVUWVBFX0VO
RF9HUk9VUCk7Ci0gICAgICAgIGNoZWNrTGFzdFRhZ1dhcyhlbmR0YWcpOwotICAgICAgICBvdXRw
dXQud3JpdGVSYXdWYXJpbnQzMihlbmR0YWcpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
IH0KLSAgICAgIGNhc2UgV2lyZUZvcm1hdC5XSVJFVFlQRV9FTkRfR1JPVVA6IHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY2FzZSBXaXJlRm9ybWF0LldJUkVUWVBFX0ZJ
WEVEMzI6IHsKLSAgICAgICAgaW50IHZhbHVlID0gcmVhZFJhd0xpdHRsZUVuZGlhbjMyKCk7Ci0g
ICAgICAgIG91dHB1dC53cml0ZVJhd1ZhcmludDMyKHRhZyk7Ci0gICAgICAgIG91dHB1dC53cml0
ZUZpeGVkMzJOb1RhZyh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
LmludmFsaWRXaXJlVHlwZSgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZWFkcyBhbmQg
ZGlzY2FyZHMgYW4gZW50aXJlIG1lc3NhZ2UuICBUaGlzIHdpbGwgcmVhZCBlaXRoZXIgdW50aWwg
RU9GCi0gICAqIG9yIHVudGlsIGFuIGVuZGdyb3VwIHRhZywgd2hpY2hldmVyIGNvbWVzIGZpcnN0
LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2tpcE1lc3NhZ2UoKSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBmaW5hbCBpbnQgdGFnID0gcmVhZFRhZygpOwot
ICAgICAgaWYgKHRhZyA9PSAwIHx8ICFza2lwRmllbGQodGFnKSkgewotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWRzIGFuIGVudGlyZSBtZXNz
YWdlIGFuZCB3cml0ZXMgaXQgdG8gb3V0cHV0IGluIHdpcmUgZm9ybWF0LgotICAgKiBUaGlzIHdp
bGwgcmVhZCBlaXRoZXIgdW50aWwgRU9GIG9yIHVudGlsIGFuIGVuZGdyb3VwIHRhZywKLSAgICog
d2hpY2hldmVyIGNvbWVzIGZpcnN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2tpcE1lc3NhZ2Uo
Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICBmaW5hbCBpbnQgdGFnID0gcmVhZFRhZygpOwotICAgICAgaWYgKHRh
ZyA9PSAwIHx8ICFza2lwRmllbGQodGFnLCBvdXRwdXQpKSB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ29sbGVjdHMgdGhlIGJ5dGVzIHNraXBw
ZWQgYW5kIHJldHVybnMgdGhlIGRhdGEgaW4gYSBCeXRlQnVmZmVyLgotICAgKi8KLSAgcHJpdmF0
ZSBjbGFzcyBTa2lwcGVkRGF0YVNpbmsgaW1wbGVtZW50cyBSZWZpbGxDYWxsYmFjayB7Ci0gICAg
cHJpdmF0ZSBpbnQgbGFzdFBvcyA9IGJ1ZmZlclBvczsKLSAgICBwcml2YXRlIEJ5dGVBcnJheU91
dHB1dFN0cmVhbSBieXRlQXJyYXlTdHJlYW07Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCBvblJlZmlsbCgpIHsKLSAgICAgIGlmIChieXRlQXJyYXlTdHJlYW0gPT0gbnVsbCkgewot
ICAgICAgICBieXRlQXJyYXlTdHJlYW0gPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0g
ICAgICB9Ci0gICAgICBieXRlQXJyYXlTdHJlYW0ud3JpdGUoYnVmZmVyLCBsYXN0UG9zLCBidWZm
ZXJQb3MgLSBsYXN0UG9zKTsKLSAgICAgIGxhc3RQb3MgPSAwOwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIEdldHMgc2tpcHBlZCBkYXRhIGluIGEgQnl0ZUJ1ZmZlci4gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUKLSAgICAgKiBjYWxsZWQgb25jZS4KLSAgICAgKi8KLSAgICBCeXRlQnVmZmVy
IGdldFNraXBwZWREYXRhKCkgewotICAgICAgaWYgKGJ5dGVBcnJheVN0cmVhbSA9PSBudWxsKSB7
Ci0gICAgICAgIHJldHVybiBCeXRlQnVmZmVyLndyYXAoYnVmZmVyLCBsYXN0UG9zLCBidWZmZXJQ
b3MgLSBsYXN0UG9zKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ5dGVBcnJheVN0cmVhbS53
cml0ZShidWZmZXIsIGxhc3RQb3MsIGJ1ZmZlclBvcyk7Ci0gICAgICAgIHJldHVybiBCeXRlQnVm
ZmVyLndyYXAoYnl0ZUFycmF5U3RyZWFtLnRvQnl0ZUFycmF5KCkpOwotICAgICAgfQotICAgIH0K
LSAgfQotCi0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvKiogUmVhZCBhIHtAY29kZSBkb3VibGV9IGZp
ZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGRvdWJsZSByZWFkRG91Ymxl
KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gRG91YmxlLmxvbmdCaXRzVG9Eb3Vi
bGUocmVhZFJhd0xpdHRsZUVuZGlhbjY0KCkpOwotICB9Ci0KLSAgLyoqIFJlYWQgYSB7QGNvZGUg
ZmxvYXR9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGZsb2F0IHJl
YWRGbG9hdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIEZsb2F0LmludEJpdHNU
b0Zsb2F0KHJlYWRSYXdMaXR0bGVFbmRpYW4zMigpKTsKLSAgfQotCi0gIC8qKiBSZWFkIGEge0Bj
b2RlIHVpbnQ2NH0gZmllbGQgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgbG9u
ZyByZWFkVUludDY0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gcmVhZFJhd1Zh
cmludDY0KCk7Ci0gIH0KLQotICAvKiogUmVhZCBhbiB7QGNvZGUgaW50NjR9IGZpZWxkIHZhbHVl
IGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGxvbmcgcmVhZEludDY0KCkgdGhyb3dzIElP
RXhjZXB0aW9uIHsKLSAgICByZXR1cm4gcmVhZFJhd1ZhcmludDY0KCk7Ci0gIH0KLQotICAvKiog
UmVhZCBhbiB7QGNvZGUgaW50MzJ9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAg
cHVibGljIGludCByZWFkSW50MzIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHJldHVybiBy
ZWFkUmF3VmFyaW50MzIoKTsKLSAgfQotCi0gIC8qKiBSZWFkIGEge0Bjb2RlIGZpeGVkNjR9IGZp
ZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGxvbmcgcmVhZEZpeGVkNjQo
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHJldHVybiByZWFkUmF3TGl0dGxlRW5kaWFuNjQo
KTsKLSAgfQotCi0gIC8qKiBSZWFkIGEge0Bjb2RlIGZpeGVkMzJ9IGZpZWxkIHZhbHVlIGZyb20g
dGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGludCByZWFkRml4ZWQzMigpIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgcmV0dXJuIHJlYWRSYXdMaXR0bGVFbmRpYW4zMigpOwotICB9Ci0KLSAgLyoq
IFJlYWQgYSB7QGNvZGUgYm9vbH0gZmllbGQgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLiAqLwotICBw
dWJsaWMgYm9vbGVhbiByZWFkQm9vbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJu
IHJlYWRSYXdWYXJpbnQ2NCgpICE9IDA7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCBhIHtAY29k
ZSBzdHJpbmd9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4KLSAgICogSWYgdGhlIHN0cmVh
bSBjb250YWlucyBtYWxmb3JtZWQgVVRGLTgsCi0gICAqIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBi
eXRlcyB3aXRoIHRoZSBzdGFuZGFyZCBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCi0gICAq
LwotICBwdWJsaWMgU3RyaW5nIHJlYWRTdHJpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAg
IGZpbmFsIGludCBzaXplID0gcmVhZFJhd1ZhcmludDMyKCk7Ci0gICAgaWYgKHNpemUgPD0gKGJ1
ZmZlclNpemUgLSBidWZmZXJQb3MpICYmIHNpemUgPiAwKSB7Ci0gICAgICAvLyBGYXN0IHBhdGg6
ICBXZSBhbHJlYWR5IGhhdmUgdGhlIGJ5dGVzIGluIGEgY29udGlndW91cyBidWZmZXIsIHNvCi0g
ICAgICAvLyAgIGp1c3QgY29weSBkaXJlY3RseSBmcm9tIGl0LgotICAgICAgZmluYWwgU3RyaW5n
IHJlc3VsdCA9IG5ldyBTdHJpbmcoYnVmZmVyLCBidWZmZXJQb3MsIHNpemUsIEludGVybmFsLlVU
Rl84KTsKLSAgICAgIGJ1ZmZlclBvcyArPSBzaXplOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9IGVsc2UgaWYgKHNpemUgPT0gMCkgewotICAgICAgcmV0dXJuICIiOwotICAgIH0gZWxzZSBp
ZiAoc2l6ZSA8PSBidWZmZXJTaXplKSB7Ci0gICAgICByZWZpbGxCdWZmZXIoc2l6ZSk7Ci0gICAg
ICBTdHJpbmcgcmVzdWx0ID0gbmV3IFN0cmluZyhidWZmZXIsIGJ1ZmZlclBvcywgc2l6ZSwgSW50
ZXJuYWwuVVRGXzgpOwotICAgICAgYnVmZmVyUG9zICs9IHNpemU7Ci0gICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBTbG93IHBhdGg6ICBCdWlsZCBhIGJ5dGUgYXJy
YXkgZmlyc3QgdGhlbiBjb3B5IGl0LgotICAgICAgcmV0dXJuIG5ldyBTdHJpbmcocmVhZFJhd0J5
dGVzU2xvd1BhdGgoc2l6ZSksIEludGVybmFsLlVURl84KTsKLSAgICB9Ci0gIH0KLQotICAvKioK
LSAgICogUmVhZCBhIHtAY29kZSBzdHJpbmd9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4K
LSAgICogSWYgdGhlIHN0cmVhbSBjb250YWlucyBtYWxmb3JtZWQgVVRGLTgsCi0gICAqIHRocm93
IGV4Y2VwdGlvbiB7QGxpbmsgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9ufS4KLSAgICov
Ci0gIHB1YmxpYyBTdHJpbmcgcmVhZFN0cmluZ1JlcXVpcmVVdGY4KCkgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICBmaW5hbCBpbnQgc2l6ZSA9IHJlYWRSYXdWYXJpbnQzMigpOwotICAgIGZpbmFs
IGJ5dGVbXSBieXRlczsKLSAgICBmaW5hbCBpbnQgb2xkUG9zID0gYnVmZmVyUG9zOwotICAgIGZp
bmFsIGludCBwb3M7Ci0gICAgaWYgKHNpemUgPD0gKGJ1ZmZlclNpemUgLSBvbGRQb3MpICYmIHNp
emUgPiAwKSB7Ci0gICAgICAvLyBGYXN0IHBhdGg6ICBXZSBhbHJlYWR5IGhhdmUgdGhlIGJ5dGVz
IGluIGEgY29udGlndW91cyBidWZmZXIsIHNvCi0gICAgICAvLyAgIGp1c3QgY29weSBkaXJlY3Rs
eSBmcm9tIGl0LgotICAgICAgYnl0ZXMgPSBidWZmZXI7Ci0gICAgICBidWZmZXJQb3MgPSBvbGRQ
b3MgKyBzaXplOwotICAgICAgcG9zID0gb2xkUG9zOwotICAgIH0gZWxzZSBpZiAoc2l6ZSA9PSAw
KSB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfSBlbHNlIGlmIChzaXplIDw9IGJ1ZmZlclNpemUp
IHsKLSAgICAgIHJlZmlsbEJ1ZmZlcihzaXplKTsKLSAgICAgIGJ5dGVzID0gYnVmZmVyOwotICAg
ICAgcG9zID0gMDsKLSAgICAgIGJ1ZmZlclBvcyA9IHBvcyArIHNpemU7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIC8vIFNsb3cgcGF0aDogIEJ1aWxkIGEgYnl0ZSBhcnJheSBmaXJzdCB0aGVuIGNvcHkg
aXQuCi0gICAgICBieXRlcyA9IHJlYWRSYXdCeXRlc1Nsb3dQYXRoKHNpemUpOwotICAgICAgcG9z
ID0gMDsKLSAgICB9Ci0gICAgLy8gVE9ETyhtYXJ0aW5yYik6IFdlIGNvdWxkIHNhdmUgYSBwYXNz
IGJ5IHZhbGlkYXRpbmcgd2hpbGUgZGVjb2RpbmcuCi0gICAgaWYgKCFVdGY4LmlzVmFsaWRVdGY4
KGJ5dGVzLCBwb3MsIHBvcyArIHNpemUpKSB7Ci0gICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xC
dWZmZXJFeGNlcHRpb24uaW52YWxpZFV0ZjgoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBTdHJp
bmcoYnl0ZXMsIHBvcywgc2l6ZSwgSW50ZXJuYWwuVVRGXzgpOwotICB9Ci0KLSAgLyoqIFJlYWQg
YSB7QGNvZGUgZ3JvdXB9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGlj
IHZvaWQgcmVhZEdyb3VwKGZpbmFsIGludCBmaWVsZE51bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbmFsIE1lc3NhZ2VMaXRlLkJ1aWxkZXIgYnVpbGRlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbmFsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkK
LSAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKHJlY3Vyc2lvbkRlcHRoID49IHJl
Y3Vyc2lvbkxpbWl0KSB7Ci0gICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24ucmVjdXJzaW9uTGltaXRFeGNlZWRlZCgpOwotICAgIH0KLSAgICArK3JlY3Vyc2lvbkRlcHRo
OwotICAgIGJ1aWxkZXIubWVyZ2VGcm9tKHRoaXMsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICBj
aGVja0xhc3RUYWdXYXMoCi0gICAgICBXaXJlRm9ybWF0Lm1ha2VUYWcoZmllbGROdW1iZXIsIFdp
cmVGb3JtYXQuV0lSRVRZUEVfRU5EX0dST1VQKSk7Ci0gICAgLS1yZWN1cnNpb25EZXB0aDsKLSAg
fQotCi0KLSAgLyoqIFJlYWQgYSB7QGNvZGUgZ3JvdXB9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0
cmVhbS4gKi8KLSAgcHVibGljIDxUIGV4dGVuZHMgTWVzc2FnZUxpdGU+IFQgcmVhZEdyb3VwKAot
ICAgICAgZmluYWwgaW50IGZpZWxkTnVtYmVyLAotICAgICAgZmluYWwgUGFyc2VyPFQ+IHBhcnNl
ciwKLSAgICAgIGZpbmFsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkK
LSAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKHJlY3Vyc2lvbkRlcHRoID49IHJl
Y3Vyc2lvbkxpbWl0KSB7Ci0gICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24ucmVjdXJzaW9uTGltaXRFeGNlZWRlZCgpOwotICAgIH0KLSAgICArK3JlY3Vyc2lvbkRlcHRo
OwotICAgIFQgcmVzdWx0ID0gcGFyc2VyLnBhcnNlUGFydGlhbEZyb20odGhpcywgZXh0ZW5zaW9u
UmVnaXN0cnkpOwotICAgIGNoZWNrTGFzdFRhZ1dhcygKLSAgICAgIFdpcmVGb3JtYXQubWFrZVRh
ZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9FTkRfR1JPVVApKTsKLSAgICAtLXJl
Y3Vyc2lvbkRlcHRoOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogUmVh
ZHMgYSB7QGNvZGUgZ3JvdXB9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbSBhbmQgbWVyZ2Vz
IGl0IGludG8gdGhlCi0gICAqIGdpdmVuIHtAbGluayBVbmtub3duRmllbGRTZXR9LgotICAgKgot
ICAgKiBAZGVwcmVjYXRlZCBVbmtub3duRmllbGRTZXQuQnVpbGRlciBub3cgaW1wbGVtZW50cyBN
ZXNzYWdlTGl0ZS5CdWlsZGVyLCBzbwotICAgKiAgICAgICAgICAgICB5b3UgY2FuIGp1c3QgY2Fs
bCB7QGxpbmsgI3JlYWRHcm91cH0uCi0gICAqLwotICBARGVwcmVjYXRlZAotICBwdWJsaWMgdm9p
ZCByZWFkVW5rbm93bkdyb3VwKGZpbmFsIGludCBmaWVsZE51bWJlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaW5hbCBNZXNzYWdlTGl0ZS5CdWlsZGVyIGJ1aWxkZXIpCi0gICAg
ICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIC8vIFdlIGtub3cgdGhhdCBVbmtub3duRmllbGRT
ZXQgd2lsbCBpZ25vcmUgYW55IEV4dGVuc2lvblJlZ2lzdHJ5IHNvIGl0Ci0gICAgLy8gaXMgc2Fm
ZSB0byBwYXNzIG51bGwgaGVyZS4gIChXZSBjYW4ndCBjYWxsCi0gICAgLy8gRXh0ZW5zaW9uUmVn
aXN0cnkuZ2V0RW1wdHlSZWdpc3RyeSgpIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlIHRoaXMKLSAg
ICAvLyBjbGFzcyBkZXBlbmQgb24gRXh0ZW5zaW9uUmVnaXN0cnksIHdoaWNoIGlzIG5vdCBwYXJ0
IG9mIHRoZSBsaXRlCi0gICAgLy8gbGlicmFyeS4pCi0gICAgcmVhZEdyb3VwKGZpZWxkTnVtYmVy
LCBidWlsZGVyLCBudWxsKTsKLSAgfQotCi0gIC8qKiBSZWFkIGFuIGVtYmVkZGVkIG1lc3NhZ2Ug
ZmllbGQgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgdm9pZCByZWFkTWVzc2Fn
ZShmaW5hbCBNZXNzYWdlTGl0ZS5CdWlsZGVyIGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbmFsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAg
ICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgZmluYWwgaW50IGxlbmd0aCA9IHJlYWRSYXdW
YXJpbnQzMigpOwotICAgIGlmIChyZWN1cnNpb25EZXB0aCA+PSByZWN1cnNpb25MaW1pdCkgewot
ICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLnJlY3Vyc2lvbkxpbWl0
RXhjZWVkZWQoKTsKLSAgICB9Ci0gICAgZmluYWwgaW50IG9sZExpbWl0ID0gcHVzaExpbWl0KGxl
bmd0aCk7Ci0gICAgKytyZWN1cnNpb25EZXB0aDsKLSAgICBidWlsZGVyLm1lcmdlRnJvbSh0aGlz
LCBleHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgY2hlY2tMYXN0VGFnV2FzKDApOwotICAgIC0tcmVj
dXJzaW9uRGVwdGg7Ci0gICAgcG9wTGltaXQob2xkTGltaXQpOwotICB9Ci0KLQotICAvKiogUmVh
ZCBhbiBlbWJlZGRlZCBtZXNzYWdlIGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAg
cHVibGljIDxUIGV4dGVuZHMgTWVzc2FnZUxpdGU+IFQgcmVhZE1lc3NhZ2UoCi0gICAgICBmaW5h
bCBQYXJzZXI8VD4gcGFyc2VyLAotICAgICAgZmluYWwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4
dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpbnQgbGVu
Z3RoID0gcmVhZFJhd1ZhcmludDMyKCk7Ci0gICAgaWYgKHJlY3Vyc2lvbkRlcHRoID49IHJlY3Vy
c2lvbkxpbWl0KSB7Ci0gICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24u
cmVjdXJzaW9uTGltaXRFeGNlZWRlZCgpOwotICAgIH0KLSAgICBmaW5hbCBpbnQgb2xkTGltaXQg
PSBwdXNoTGltaXQobGVuZ3RoKTsKLSAgICArK3JlY3Vyc2lvbkRlcHRoOwotICAgIFQgcmVzdWx0
ID0gcGFyc2VyLnBhcnNlUGFydGlhbEZyb20odGhpcywgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAg
IGNoZWNrTGFzdFRhZ1dhcygwKTsKLSAgICAtLXJlY3Vyc2lvbkRlcHRoOwotICAgIHBvcExpbWl0
KG9sZExpbWl0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqIFJlYWQgYSB7QGNv
ZGUgYnl0ZXN9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIEJ5dGVT
dHJpbmcgcmVhZEJ5dGVzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgc2l6
ZSA9IHJlYWRSYXdWYXJpbnQzMigpOwotICAgIGlmIChzaXplIDw9IChidWZmZXJTaXplIC0gYnVm
ZmVyUG9zKSAmJiBzaXplID4gMCkgewotICAgICAgLy8gRmFzdCBwYXRoOiAgV2UgYWxyZWFkeSBo
YXZlIHRoZSBieXRlcyBpbiBhIGNvbnRpZ3VvdXMgYnVmZmVyLCBzbwotICAgICAgLy8gICBqdXN0
IGNvcHkgZGlyZWN0bHkgZnJvbSBpdC4KLSAgICAgIGZpbmFsIEJ5dGVTdHJpbmcgcmVzdWx0ID0g
YnVmZmVySXNJbW11dGFibGUgJiYgZW5hYmxlQWxpYXNpbmcKLSAgICAgICAgICA/IEJ5dGVTdHJp
bmcud3JhcChidWZmZXIsIGJ1ZmZlclBvcywgc2l6ZSkKLSAgICAgICAgICA6IEJ5dGVTdHJpbmcu
Y29weUZyb20oYnVmZmVyLCBidWZmZXJQb3MsIHNpemUpOwotICAgICAgYnVmZmVyUG9zICs9IHNp
emU7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0gZWxzZSBpZiAoc2l6ZSA9PSAwKSB7Ci0g
ICAgICByZXR1cm4gQnl0ZVN0cmluZy5FTVBUWTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gU2xv
dyBwYXRoOiAgQnVpbGQgYSBieXRlIGFycmF5IGZpcnN0IHRoZW4gY29weSBpdC4KLSAgICAgIHJl
dHVybiBCeXRlU3RyaW5nLndyYXAocmVhZFJhd0J5dGVzU2xvd1BhdGgoc2l6ZSkpOwotICAgIH0K
LSAgfQotCi0gIC8qKiBSZWFkIGEge0Bjb2RlIGJ5dGVzfSBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBz
dHJlYW0uICovCi0gIHB1YmxpYyBieXRlW10gcmVhZEJ5dGVBcnJheSgpIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgZmluYWwgaW50IHNpemUgPSByZWFkUmF3VmFyaW50MzIoKTsKLSAgICBpZiAo
c2l6ZSA8PSAoYnVmZmVyU2l6ZSAtIGJ1ZmZlclBvcykgJiYgc2l6ZSA+IDApIHsKLSAgICAgIC8v
IEZhc3QgcGF0aDogV2UgYWxyZWFkeSBoYXZlIHRoZSBieXRlcyBpbiBhIGNvbnRpZ3VvdXMgYnVm
ZmVyLCBzbwotICAgICAgLy8ganVzdCBjb3B5IGRpcmVjdGx5IGZyb20gaXQuCi0gICAgICBmaW5h
bCBieXRlW10gcmVzdWx0ID0KLSAgICAgICAgICBBcnJheXMuY29weU9mUmFuZ2UoYnVmZmVyLCBi
dWZmZXJQb3MsIGJ1ZmZlclBvcyArIHNpemUpOwotICAgICAgYnVmZmVyUG9zICs9IHNpemU7Ci0g
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBTbG93IHBhdGg6IEJ1
aWxkIGEgYnl0ZSBhcnJheSBmaXJzdCB0aGVuIGNvcHkgaXQuCi0gICAgICByZXR1cm4gcmVhZFJh
d0J5dGVzU2xvd1BhdGgoc2l6ZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIFJlYWQgYSB7QGNvZGUg
Ynl0ZXN9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIEJ5dGVCdWZm
ZXIgcmVhZEJ5dGVCdWZmZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZpbmFsIGludCBz
aXplID0gcmVhZFJhd1ZhcmludDMyKCk7Ci0gICAgaWYgKHNpemUgPD0gKGJ1ZmZlclNpemUgLSBi
dWZmZXJQb3MpICYmIHNpemUgPiAwKSB7Ci0gICAgICAvLyBGYXN0IHBhdGg6IFdlIGFscmVhZHkg
aGF2ZSB0aGUgYnl0ZXMgaW4gYSBjb250aWd1b3VzIGJ1ZmZlci4KLSAgICAgIC8vIFdoZW4gYWxp
YXNpbmcgaXMgZW5hYmxlZCwgd2UgY2FuIHJldHVybiBhIEJ5dGVCdWZmZXIgcG9pbnRpbmcgZGly
ZWN0bHkKLSAgICAgIC8vIGludG8gdGhlIHVuZGVybHlpbmcgYnl0ZSBhcnJheSB3aXRob3V0IGNv
cHkgaWYgdGhlIENvZGVkSW5wdXRTdHJlYW0gaXMKLSAgICAgIC8vIGNvbnN0cnVjdGVkIGZyb20g
YSBieXRlIGFycmF5LiBJZiBhbGlhc2luZyBpcyBkaXNhYmxlZCBvciB0aGUgaW5wdXQgaXMKLSAg
ICAgIC8vIGZyb20gYW4gSW5wdXRTdHJlYW0gb3IgQnl0ZVN0cmluZywgd2UgaGF2ZSB0byBtYWtl
IGEgY29weSBvZiB0aGUgYnl0ZXMuCi0gICAgICBCeXRlQnVmZmVyIHJlc3VsdCA9IGlucHV0ID09
IG51bGwgJiYgIWJ1ZmZlcklzSW1tdXRhYmxlICYmIGVuYWJsZUFsaWFzaW5nCi0gICAgICAgICAg
PyBCeXRlQnVmZmVyLndyYXAoYnVmZmVyLCBidWZmZXJQb3MsIHNpemUpLnNsaWNlKCkKLSAgICAg
ICAgICA6IEJ5dGVCdWZmZXIud3JhcChBcnJheXMuY29weU9mUmFuZ2UoCi0gICAgICAgICAgICAg
IGJ1ZmZlciwgYnVmZmVyUG9zLCBidWZmZXJQb3MgKyBzaXplKSk7Ci0gICAgICBidWZmZXJQb3Mg
Kz0gc2l6ZTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSBlbHNlIGlmIChzaXplID09IDAp
IHsKLSAgICAgIHJldHVybiBJbnRlcm5hbC5FTVBUWV9CWVRFX0JVRkZFUjsKLSAgICB9IGVsc2Ug
ewotICAgICAgLy8gU2xvdyBwYXRoOiBCdWlsZCBhIGJ5dGUgYXJyYXkgZmlyc3QgdGhlbiBjb3B5
IGl0LgotICAgICAgcmV0dXJuIEJ5dGVCdWZmZXIud3JhcChyZWFkUmF3Qnl0ZXNTbG93UGF0aChz
aXplKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIFJlYWQgYSB7QGNvZGUgdWludDMyfSBmaWVsZCB2
YWx1ZSBmcm9tIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyBpbnQgcmVhZFVJbnQzMigpIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHJlYWRSYXdWYXJpbnQzMigpOwotICB9Ci0KLSAg
LyoqCi0gICAqIFJlYWQgYW4gZW51bSBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uICBDYWxs
ZXIgaXMgcmVzcG9uc2libGUKLSAgICogZm9yIGNvbnZlcnRpbmcgdGhlIG51bWVyaWMgdmFsdWUg
dG8gYW4gYWN0dWFsIGVudW0uCi0gICAqLwotICBwdWJsaWMgaW50IHJlYWRFbnVtKCkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gcmVhZFJhd1ZhcmludDMyKCk7Ci0gIH0KLQotICAv
KiogUmVhZCBhbiB7QGNvZGUgc2ZpeGVkMzJ9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4g
Ki8KLSAgcHVibGljIGludCByZWFkU0ZpeGVkMzIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAg
IHJldHVybiByZWFkUmF3TGl0dGxlRW5kaWFuMzIoKTsKLSAgfQotCi0gIC8qKiBSZWFkIGFuIHtA
Y29kZSBzZml4ZWQ2NH0gZmllbGQgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMg
bG9uZyByZWFkU0ZpeGVkNjQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHJldHVybiByZWFk
UmF3TGl0dGxlRW5kaWFuNjQoKTsKLSAgfQotCi0gIC8qKiBSZWFkIGFuIHtAY29kZSBzaW50MzJ9
IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGludCByZWFkU0ludDMy
KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gZGVjb2RlWmlnWmFnMzIocmVhZFJh
d1ZhcmludDMyKCkpOwotICB9Ci0KLSAgLyoqIFJlYWQgYW4ge0Bjb2RlIHNpbnQ2NH0gZmllbGQg
dmFsdWUgZnJvbSB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgbG9uZyByZWFkU0ludDY0KCkgdGhy
b3dzIElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gZGVjb2RlWmlnWmFnNjQocmVhZFJhd1Zhcmlu
dDY0KCkpOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAvKioKLSAgICogUmVhZCBhIHJhdyBW
YXJpbnQgZnJvbSB0aGUgc3RyZWFtLiAgSWYgbGFyZ2VyIHRoYW4gMzIgYml0cywgZGlzY2FyZCB0
aGUKLSAgICogdXBwZXIgYml0cy4KLSAgICovCi0gIHB1YmxpYyBpbnQgcmVhZFJhd1ZhcmludDMy
KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAvLyBTZWUgaW1wbGVtZW50YXRpb24gbm90ZXMg
Zm9yIHJlYWRSYXdWYXJpbnQ2NAotIGZhc3RwYXRoOiB7Ci0gICAgICBpbnQgcG9zID0gYnVmZmVy
UG9zOwotCi0gICAgICBpZiAoYnVmZmVyU2l6ZSA9PSBwb3MpIHsKLSAgICAgICAgYnJlYWsgZmFz
dHBhdGg7Ci0gICAgICB9Ci0KLSAgICAgIGZpbmFsIGJ5dGVbXSBidWZmZXIgPSB0aGlzLmJ1ZmZl
cjsKLSAgICAgIGludCB4OwotICAgICAgaWYgKCh4ID0gYnVmZmVyW3BvcysrXSkgPj0gMCkgewot
ICAgICAgICBidWZmZXJQb3MgPSBwb3M7Ci0gICAgICAgIHJldHVybiB4OwotICAgICAgfSBlbHNl
IGlmIChidWZmZXJTaXplIC0gcG9zIDwgOSkgewotICAgICAgICBicmVhayBmYXN0cGF0aDsKLSAg
ICAgIH0gZWxzZSBpZiAoKHggXj0gKGJ1ZmZlcltwb3MrK10gPDwgNykpIDwgMCkgewotICAgICAg
ICB4IF49ICh+MCA8PCA3KTsKLSAgICAgIH0gZWxzZSBpZiAoKHggXj0gKGJ1ZmZlcltwb3MrK10g
PDwgMTQpKSA+PSAwKSB7Ci0gICAgICAgIHggXj0gKH4wIDw8IDcpIF4gKH4wIDw8IDE0KTsKLSAg
ICAgIH0gZWxzZSBpZiAoKHggXj0gKGJ1ZmZlcltwb3MrK10gPDwgMjEpKSA8IDApIHsKLSAgICAg
ICAgeCBePSAofjAgPDwgNykgXiAofjAgPDwgMTQpIF4gKH4wIDw8IDIxKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGludCB5ID0gYnVmZmVyW3BvcysrXTsKLSAgICAgICAgeCBePSB5IDw8IDI4
OwotICAgICAgICB4IF49ICh+MCA8PCA3KSBeICh+MCA8PCAxNCkgXiAofjAgPDwgMjEpIF4gKH4w
IDw8IDI4KTsKLSAgICAgICAgaWYgKHkgPCAwICYmCi0gICAgICAgICAgICBidWZmZXJbcG9zKytd
IDwgMCAmJgotICAgICAgICAgICAgYnVmZmVyW3BvcysrXSA8IDAgJiYKLSAgICAgICAgICAgIGJ1
ZmZlcltwb3MrK10gPCAwICYmCi0gICAgICAgICAgICBidWZmZXJbcG9zKytdIDwgMCAmJgotICAg
ICAgICAgICAgYnVmZmVyW3BvcysrXSA8IDApIHsKLSAgICAgICAgICBicmVhayBmYXN0cGF0aDsg
IC8vIFdpbGwgdGhyb3cgbWFsZm9ybWVkVmFyaW50KCkKLSAgICAgICAgfQotICAgICAgfQotICAg
ICAgYnVmZmVyUG9zID0gcG9zOwotICAgICAgcmV0dXJuIHg7Ci0gICAgfQotICAgIHJldHVybiAo
aW50KSByZWFkUmF3VmFyaW50NjRTbG93UGF0aCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNr
aXBSYXdWYXJpbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGlmIChidWZmZXJTaXplIC0g
YnVmZmVyUG9zID49IDEwKSB7Ci0gICAgICBmaW5hbCBieXRlW10gYnVmZmVyID0gdGhpcy5idWZm
ZXI7Ci0gICAgICBpbnQgcG9zID0gYnVmZmVyUG9zOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCAxMDsgaSsrKSB7Ci0gICAgICAgIGlmIChidWZmZXJbcG9zKytdID49IDApIHsKLSAgICAgICAg
ICBidWZmZXJQb3MgPSBwb3M7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotICAgIHNraXBSYXdWYXJpbnRTbG93UGF0aCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHNraXBSYXdWYXJpbnRTbG93UGF0aCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgICBpZiAocmVhZFJhd0J5dGUoKSA+PSAw
KSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhyb3cgSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uLm1hbGZvcm1lZFZhcmludCgpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIFJlYWRzIGEgdmFyaW50IGZyb20gdGhlIGlucHV0IG9uZSBieXRlIGF0IGEgdGltZSwgc28g
dGhhdCBpdCBkb2VzIG5vdAotICAgKiByZWFkIGFueSBieXRlcyBhZnRlciB0aGUgZW5kIG9mIHRo
ZSB2YXJpbnQuICBJZiB5b3Ugc2ltcGx5IHdyYXBwZWQgdGhlCi0gICAqIHN0cmVhbSBpbiBhIENv
ZGVkSW5wdXRTdHJlYW0gYW5kIHVzZWQge0BsaW5rICNyZWFkUmF3VmFyaW50MzIoSW5wdXRTdHJl
YW0pfQotICAgKiB0aGVuIHlvdSB3b3VsZCBwcm9iYWJseSBlbmQgdXAgcmVhZGluZyBwYXN0IHRo
ZSBlbmQgb2YgdGhlIHZhcmludCBzaW5jZQotICAgKiBDb2RlZElucHV0U3RyZWFtIGJ1ZmZlcnMg
aXRzIGlucHV0LgotICAgKi8KLSAgc3RhdGljIGludCByZWFkUmF3VmFyaW50MzIoZmluYWwgSW5w
dXRTdHJlYW0gaW5wdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgZmluYWwgaW50IGZpcnN0
Qnl0ZSA9IGlucHV0LnJlYWQoKTsKLSAgICBpZiAoZmlyc3RCeXRlID09IC0xKSB7Ci0gICAgICB0
aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24udHJ1bmNhdGVkTWVzc2FnZSgpOwot
ICAgIH0KLSAgICByZXR1cm4gcmVhZFJhd1ZhcmludDMyKGZpcnN0Qnl0ZSwgaW5wdXQpOwotICB9
Ci0KLSAgLyoqCi0gICAqIExpa2Uge0BsaW5rICNyZWFkUmF3VmFyaW50MzIoSW5wdXRTdHJlYW0p
fSwgYnV0IGV4cGVjdHMgdGhhdCB0aGUgY2FsbGVyCi0gICAqIGhhcyBhbHJlYWR5IHJlYWQgb25l
IGJ5dGUuICBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIGRldGVybWluZSBpZiBFT0YKLSAgICog
aGFzIGJlZW4gcmVhY2hlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkLgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyBpbnQgcmVhZFJhd1ZhcmludDMyKAotICAgICAgZmluYWwgaW50IGZpcnN0Qnl0
ZSwgZmluYWwgSW5wdXRTdHJlYW0gaW5wdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYg
KChmaXJzdEJ5dGUgJiAweDgwKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmlyc3RCeXRlOwotICAg
IH0KLQotICAgIGludCByZXN1bHQgPSBmaXJzdEJ5dGUgJiAweDdmOwotICAgIGludCBvZmZzZXQg
PSA3OwotICAgIGZvciAoOyBvZmZzZXQgPCAzMjsgb2Zmc2V0ICs9IDcpIHsKLSAgICAgIGZpbmFs
IGludCBiID0gaW5wdXQucmVhZCgpOwotICAgICAgaWYgKGIgPT0gLTEpIHsKLSAgICAgICAgdGhy
b3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLnRydW5jYXRlZE1lc3NhZ2UoKTsKLSAg
ICAgIH0KLSAgICAgIHJlc3VsdCB8PSAoYiAmIDB4N2YpIDw8IG9mZnNldDsKLSAgICAgIGlmICgo
YiAmIDB4ODApID09IDApIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICB9
Ci0gICAgLy8gS2VlcCByZWFkaW5nIHVwIHRvIDY0IGJpdHMuCi0gICAgZm9yICg7IG9mZnNldCA8
IDY0OyBvZmZzZXQgKz0gNykgewotICAgICAgZmluYWwgaW50IGIgPSBpbnB1dC5yZWFkKCk7Ci0g
ICAgICBpZiAoYiA9PSAtMSkgewotICAgICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24udHJ1bmNhdGVkTWVzc2FnZSgpOwotICAgICAgfQotICAgICAgaWYgKChiICYgMHg4
MCkgPT0gMCkgewotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgIH0KLSAgICB0
aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24ubWFsZm9ybWVkVmFyaW50KCk7Ci0g
IH0KLQotICAvKiogUmVhZCBhIHJhdyBWYXJpbnQgZnJvbSB0aGUgc3RyZWFtLiAqLwotICBwdWJs
aWMgbG9uZyByZWFkUmF3VmFyaW50NjQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIC8vIElt
cGxlbWVudGF0aW9uIG5vdGVzOgotICAgIC8vCi0gICAgLy8gT3B0aW1pemVkIGZvciBvbmUtYnl0
ZSB2YWx1ZXMsIGV4cGVjdGVkIHRvIGJlIGNvbW1vbi4KLSAgICAvLyBUaGUgcGFydGljdWxhciBj
b2RlIGJlbG93IHdhcyBzZWxlY3RlZCBmcm9tIHZhcmlvdXMgY2FuZGlkYXRlcwotICAgIC8vIGVt
cGlyaWNhbGx5LCBieSB3aW5uaW5nIFZhcmludEJlbmNobWFyay4KLSAgICAvLwotICAgIC8vIFNp
Z24gZXh0ZW5zaW9uIG9mIChzaWduZWQpIEphdmEgYnl0ZXMgaXMgdXN1YWxseSBhIG51aXNhbmNl
LCBidXQKLSAgICAvLyB3ZSBleHBsb2l0IGl0IGhlcmUgdG8gbW9yZSBlYXNpbHkgb2J0YWluIHRo
ZSBzaWduIG9mIGJ5dGVzIHJlYWQuCi0gICAgLy8gSW5zdGVhZCBvZiBjbGVhbmluZyB1cCB0aGUg
c2lnbiBleHRlbnNpb24gYml0cyBieSBtYXNraW5nIGVhZ2VybHksCi0gICAgLy8gd2UgZGVsYXkg
dW50aWwgd2UgZmluZCB0aGUgZmluYWwgKHBvc2l0aXZlKSBieXRlLCB3aGVuIHdlIGNsZWFyIGFs
bAotICAgIC8vIGFjY3VtdWxhdGVkIGJpdHMgd2l0aCBvbmUgeG9yLiAgV2UgZGVwZW5kIG9uIGph
dmFjIHRvIGNvbnN0YW50IGZvbGQuCi0gZmFzdHBhdGg6IHsKLSAgICAgIGludCBwb3MgPSBidWZm
ZXJQb3M7Ci0KLSAgICAgIGlmIChidWZmZXJTaXplID09IHBvcykgewotICAgICAgICBicmVhayBm
YXN0cGF0aDsKLSAgICAgIH0KLQotICAgICAgZmluYWwgYnl0ZVtdIGJ1ZmZlciA9IHRoaXMuYnVm
ZmVyOwotICAgICAgbG9uZyB4OwotICAgICAgaW50IHk7Ci0gICAgICBpZiAoKHkgPSBidWZmZXJb
cG9zKytdKSA+PSAwKSB7Ci0gICAgICAgIGJ1ZmZlclBvcyA9IHBvczsKLSAgICAgICAgcmV0dXJu
IHk7Ci0gICAgICB9IGVsc2UgaWYgKGJ1ZmZlclNpemUgLSBwb3MgPCA5KSB7Ci0gICAgICAgIGJy
ZWFrIGZhc3RwYXRoOwotICAgICAgfSBlbHNlIGlmICgoeSBePSAoYnVmZmVyW3BvcysrXSA8PCA3
KSkgPCAwKSB7Ci0gICAgICAgIHggPSB5IF4gKH4wIDw8IDcpOwotICAgICAgfSBlbHNlIGlmICgo
eSBePSAoYnVmZmVyW3BvcysrXSA8PCAxNCkpID49IDApIHsKLSAgICAgICAgeCA9IHkgXiAoKH4w
IDw8IDcpIF4gKH4wIDw8IDE0KSk7Ci0gICAgICB9IGVsc2UgaWYgKCh5IF49IChidWZmZXJbcG9z
KytdIDw8IDIxKSkgPCAwKSB7Ci0gICAgICAgIHggPSB5IF4gKCh+MCA8PCA3KSBeICh+MCA8PCAx
NCkgXiAofjAgPDwgMjEpKTsKLSAgICAgIH0gZWxzZSBpZiAoKHggPSAoKGxvbmcpIHkpIF4gKChs
b25nKSBidWZmZXJbcG9zKytdIDw8IDI4KSkgPj0gMEwpIHsKLSAgICAgICAgeCBePSAofjBMIDw8
IDcpIF4gKH4wTCA8PCAxNCkgXiAofjBMIDw8IDIxKSBeICh+MEwgPDwgMjgpOwotICAgICAgfSBl
bHNlIGlmICgoeCBePSAoKGxvbmcpIGJ1ZmZlcltwb3MrK10gPDwgMzUpKSA8IDBMKSB7Ci0gICAg
ICAgIHggXj0gKH4wTCA8PCA3KSBeICh+MEwgPDwgMTQpIF4gKH4wTCA8PCAyMSkgXiAofjBMIDw8
IDI4KSBeICh+MEwgPDwgMzUpOwotICAgICAgfSBlbHNlIGlmICgoeCBePSAoKGxvbmcpIGJ1ZmZl
cltwb3MrK10gPDwgNDIpKSA+PSAwTCkgewotICAgICAgICB4IF49ICh+MEwgPDwgNykgXiAofjBM
IDw8IDE0KSBeICh+MEwgPDwgMjEpIF4gKH4wTCA8PCAyOCkgXiAofjBMIDw8IDM1KSBeICh+MEwg
PDwgNDIpOwotICAgICAgfSBlbHNlIGlmICgoeCBePSAoKGxvbmcpIGJ1ZmZlcltwb3MrK10gPDwg
NDkpKSA8IDBMKSB7Ci0gICAgICAgIHggXj0gKH4wTCA8PCA3KSBeICh+MEwgPDwgMTQpIF4gKH4w
TCA8PCAyMSkgXiAofjBMIDw8IDI4KSBeICh+MEwgPDwgMzUpIF4gKH4wTCA8PCA0MikKLSAgICAg
ICAgICAgIF4gKH4wTCA8PCA0OSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB4IF49ICgobG9u
ZykgYnVmZmVyW3BvcysrXSA8PCA1Nik7Ci0gICAgICAgIHggXj0gKH4wTCA8PCA3KSBeICh+MEwg
PDwgMTQpIF4gKH4wTCA8PCAyMSkgXiAofjBMIDw8IDI4KSBeICh+MEwgPDwgMzUpIF4gKH4wTCA8
PCA0MikKLSAgICAgICAgICAgIF4gKH4wTCA8PCA0OSkgXiAofjBMIDw8IDU2KTsKLSAgICAgICAg
aWYgKHggPCAwTCkgewotICAgICAgICAgIGlmIChidWZmZXJbcG9zKytdIDwgMEwpIHsKLSAgICAg
ICAgICAgIGJyZWFrIGZhc3RwYXRoOyAgLy8gV2lsbCB0aHJvdyBtYWxmb3JtZWRWYXJpbnQoKQot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnVmZmVyUG9zID0gcG9zOwot
ICAgICAgcmV0dXJuIHg7Ci0gICAgfQotICAgIHJldHVybiByZWFkUmF3VmFyaW50NjRTbG93UGF0
aCgpOwotICB9Ci0KLSAgLyoqIFZhcmlhbnQgb2YgcmVhZFJhd1ZhcmludDY0IGZvciB3aGVuIHVu
Y29tZm9ydGFibHkgY2xvc2UgdG8gdGhlIGxpbWl0LiAqLwotICAvKiBWaXNpYmxlIGZvciB0ZXN0
aW5nICovCi0gIGxvbmcgcmVhZFJhd1ZhcmludDY0U2xvd1BhdGgoKSB0aHJvd3MgSU9FeGNlcHRp
b24gewotICAgIGxvbmcgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGludCBzaGlmdCA9IDA7IHNoaWZ0
IDwgNjQ7IHNoaWZ0ICs9IDcpIHsKLSAgICAgIGZpbmFsIGJ5dGUgYiA9IHJlYWRSYXdCeXRlKCk7
Ci0gICAgICByZXN1bHQgfD0gKGxvbmcpIChiICYgMHg3RikgPDwgc2hpZnQ7Ci0gICAgICBpZiAo
KGIgJiAweDgwKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAg
fQotICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5tYWxmb3JtZWRWYXJp
bnQoKTsKLSAgfQotCi0gIC8qKiBSZWFkIGEgMzItYml0IGxpdHRsZS1lbmRpYW4gaW50ZWdlciBm
cm9tIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyBpbnQgcmVhZFJhd0xpdHRsZUVuZGlhbjMyKCkg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpbnQgcG9zID0gYnVmZmVyUG9zOwotCi0gICAgLy8g
aGFuZC1pbmxpbmVkIGVuc3VyZUF2YWlsYWJsZSg0KTsKLSAgICBpZiAoYnVmZmVyU2l6ZSAtIHBv
cyA8IDQpIHsKLSAgICAgIHJlZmlsbEJ1ZmZlcig0KTsKLSAgICAgIHBvcyA9IGJ1ZmZlclBvczsK
LSAgICB9Ci0KLSAgICBmaW5hbCBieXRlW10gYnVmZmVyID0gdGhpcy5idWZmZXI7Ci0gICAgYnVm
ZmVyUG9zID0gcG9zICsgNDsKLSAgICByZXR1cm4gKCgoYnVmZmVyW3Bvc10gICAgICYgMHhmZikp
ICAgICAgIHwKLSAgICAgICAgICAgICgoYnVmZmVyW3BvcyArIDFdICYgMHhmZikgPDwgIDgpIHwK
LSAgICAgICAgICAgICgoYnVmZmVyW3BvcyArIDJdICYgMHhmZikgPDwgMTYpIHwKLSAgICAgICAg
ICAgICgoYnVmZmVyW3BvcyArIDNdICYgMHhmZikgPDwgMjQpKTsKLSAgfQotCi0gIC8qKiBSZWFk
IGEgNjQtYml0IGxpdHRsZS1lbmRpYW4gaW50ZWdlciBmcm9tIHRoZSBzdHJlYW0uICovCi0gIHB1
YmxpYyBsb25nIHJlYWRSYXdMaXR0bGVFbmRpYW42NCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0g
ICAgaW50IHBvcyA9IGJ1ZmZlclBvczsKLQotICAgIC8vIGhhbmQtaW5saW5lZCBlbnN1cmVBdmFp
bGFibGUoOCk7Ci0gICAgaWYgKGJ1ZmZlclNpemUgLSBwb3MgPCA4KSB7Ci0gICAgICByZWZpbGxC
dWZmZXIoOCk7Ci0gICAgICBwb3MgPSBidWZmZXJQb3M7Ci0gICAgfQotCi0gICAgZmluYWwgYnl0
ZVtdIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwotICAgIGJ1ZmZlclBvcyA9IHBvcyArIDg7Ci0gICAg
cmV0dXJuICgoKChsb25nKSBidWZmZXJbcG9zXSAgICAgJiAweGZmTCkpICAgICAgIHwKLSAgICAg
ICAgICAgICgoKGxvbmcpIGJ1ZmZlcltwb3MgKyAxXSAmIDB4ZmZMKSA8PCAgOCkgfAotICAgICAg
ICAgICAgKCgobG9uZykgYnVmZmVyW3BvcyArIDJdICYgMHhmZkwpIDw8IDE2KSB8Ci0gICAgICAg
ICAgICAoKChsb25nKSBidWZmZXJbcG9zICsgM10gJiAweGZmTCkgPDwgMjQpIHwKLSAgICAgICAg
ICAgICgoKGxvbmcpIGJ1ZmZlcltwb3MgKyA0XSAmIDB4ZmZMKSA8PCAzMikgfAotICAgICAgICAg
ICAgKCgobG9uZykgYnVmZmVyW3BvcyArIDVdICYgMHhmZkwpIDw8IDQwKSB8Ci0gICAgICAgICAg
ICAoKChsb25nKSBidWZmZXJbcG9zICsgNl0gJiAweGZmTCkgPDwgNDgpIHwKLSAgICAgICAgICAg
ICgoKGxvbmcpIGJ1ZmZlcltwb3MgKyA3XSAmIDB4ZmZMKSA8PCA1NikpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIERlY29kZSBhIFppZ1phZy1lbmNvZGVkIDMyLWJpdCB2YWx1ZS4gIFppZ1phZyBlbmNv
ZGVzIHNpZ25lZCBpbnRlZ2VycwotICAgKiBpbnRvIHZhbHVlcyB0aGF0IGNhbiBiZSBlZmZpY2ll
bnRseSBlbmNvZGVkIHdpdGggdmFyaW50LiAgKE90aGVyd2lzZSwKLSAgICogbmVnYXRpdmUgdmFs
dWVzIG11c3QgYmUgc2lnbi1leHRlbmRlZCB0byA2NCBiaXRzIHRvIGJlIHZhcmludCBlbmNvZGVk
LAotICAgKiB0aHVzIGFsd2F5cyB0YWtpbmcgMTAgYnl0ZXMgb24gdGhlIHdpcmUuKQotICAgKgot
ICAgKiBAcGFyYW0gbiBBbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciwgc3RvcmVkIGluIGEgc2ln
bmVkIGludCBiZWNhdXNlCi0gICAqICAgICAgICAgIEphdmEgaGFzIG5vIGV4cGxpY2l0IHVuc2ln
bmVkIHN1cHBvcnQuCi0gICAqIEByZXR1cm4gQSBzaWduZWQgMzItYml0IGludGVnZXIuCi0gICAq
LwotICBwdWJsaWMgc3RhdGljIGludCBkZWNvZGVaaWdaYWczMihmaW5hbCBpbnQgbikgewotICAg
IHJldHVybiAobiA+Pj4gMSkgXiAtKG4gJiAxKTsKLSAgfQotCi0gIC8qKgotICAgKiBEZWNvZGUg
YSBaaWdaYWctZW5jb2RlZCA2NC1iaXQgdmFsdWUuICBaaWdaYWcgZW5jb2RlcyBzaWduZWQgaW50
ZWdlcnMKLSAgICogaW50byB2YWx1ZXMgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgZW5jb2RlZCB3
aXRoIHZhcmludC4gIChPdGhlcndpc2UsCi0gICAqIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIHNp
Z24tZXh0ZW5kZWQgdG8gNjQgYml0cyB0byBiZSB2YXJpbnQgZW5jb2RlZCwKLSAgICogdGh1cyBh
bHdheXMgdGFraW5nIDEwIGJ5dGVzIG9uIHRoZSB3aXJlLikKLSAgICoKLSAgICogQHBhcmFtIG4g
QW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIsIHN0b3JlZCBpbiBhIHNpZ25lZCBpbnQgYmVjYXVz
ZQotICAgKiAgICAgICAgICBKYXZhIGhhcyBubyBleHBsaWNpdCB1bnNpZ25lZCBzdXBwb3J0Lgot
ICAgKiBAcmV0dXJuIEEgc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBsb25nIGRlY29kZVppZ1phZzY0KGZpbmFsIGxvbmcgbikgewotICAgIHJldHVybiAobiA+
Pj4gMSkgXiAtKG4gJiAxKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgcHJpdmF0ZSBmaW5h
bCBieXRlW10gYnVmZmVyOwotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gYnVmZmVySXNJbW11dGFi
bGU7Ci0gIHByaXZhdGUgaW50IGJ1ZmZlclNpemU7Ci0gIHByaXZhdGUgaW50IGJ1ZmZlclNpemVB
ZnRlckxpbWl0OwotICBwcml2YXRlIGludCBidWZmZXJQb3M7Ci0gIHByaXZhdGUgZmluYWwgSW5w
dXRTdHJlYW0gaW5wdXQ7Ci0gIHByaXZhdGUgaW50IGxhc3RUYWc7Ci0gIHByaXZhdGUgYm9vbGVh
biBlbmFibGVBbGlhc2luZyA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBUaGUgdG90YWwgbnVtYmVy
IG9mIGJ5dGVzIHJlYWQgYmVmb3JlIHRoZSBjdXJyZW50IGJ1ZmZlci4gIFRoZSB0b3RhbAotICAg
KiBieXRlcyByZWFkIHVwIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIGNhbiBiZSBjb21wdXRlZCBh
cwotICAgKiB7QGNvZGUgdG90YWxCeXRlc1JldGlyZWQgKyBidWZmZXJQb3N9LiAgVGhpcyB2YWx1
ZSBtYXkgYmUgbmVnYXRpdmUgaWYKLSAgICogcmVhZGluZyBzdGFydGVkIGluIHRoZSBtaWRkbGUg
b2YgdGhlIGN1cnJlbnQgYnVmZmVyIChlLmcuIGlmIHRoZQotICAgKiBjb25zdHJ1Y3RvciB0aGF0
IHRha2VzIGEgYnl0ZSBhcnJheSBhbmQgYW4gb2Zmc2V0IHdhcyB1c2VkKS4KLSAgICovCi0gIHBy
aXZhdGUgaW50IHRvdGFsQnl0ZXNSZXRpcmVkOwotCi0gIC8qKiBUaGUgYWJzb2x1dGUgcG9zaXRp
b24gb2YgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBtZXNzYWdlLiAqLwotICBwcml2YXRlIGludCBj
dXJyZW50TGltaXQgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKLQotICAvKiogU2VlIHNldFJlY3Vyc2lv
bkxpbWl0KCkgKi8KLSAgcHJpdmF0ZSBpbnQgcmVjdXJzaW9uRGVwdGg7Ci0gIHByaXZhdGUgaW50
IHJlY3Vyc2lvbkxpbWl0ID0gREVGQVVMVF9SRUNVUlNJT05fTElNSVQ7Ci0KLSAgLyoqIFNlZSBz
ZXRTaXplTGltaXQoKSAqLwotICBwcml2YXRlIGludCBzaXplTGltaXQgPSBERUZBVUxUX1NJWkVf
TElNSVQ7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfUkVDVVJTSU9OX0xJ
TUlUID0gMTAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9TSVpFX0xJTUlU
ID0gNjQgPDwgMjA7ICAvLyA2NE1CCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVJf
U0laRSA9IDQwOTY7Ci0KLSAgcHJpdmF0ZSBDb2RlZElucHV0U3RyZWFtKAotICAgICAgZmluYWwg
Ynl0ZVtdIGJ1ZmZlciwgZmluYWwgaW50IG9mZiwgZmluYWwgaW50IGxlbiwgYm9vbGVhbiBidWZm
ZXJJc0ltbXV0YWJsZSkgewotICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAgIGJ1ZmZlclNp
emUgPSBvZmYgKyBsZW47Ci0gICAgYnVmZmVyUG9zID0gb2ZmOwotICAgIHRvdGFsQnl0ZXNSZXRp
cmVkID0gLW9mZjsKLSAgICBpbnB1dCA9IG51bGw7Ci0gICAgdGhpcy5idWZmZXJJc0ltbXV0YWJs
ZSA9IGJ1ZmZlcklzSW1tdXRhYmxlOwotICB9Ci0KLSAgcHJpdmF0ZSBDb2RlZElucHV0U3RyZWFt
KGZpbmFsIElucHV0U3RyZWFtIGlucHV0LCBpbnQgYnVmZmVyU2l6ZSkgewotICAgIGJ1ZmZlciA9
IG5ldyBieXRlW2J1ZmZlclNpemVdOwotICAgIGJ1ZmZlclNpemUgPSAwOwotICAgIGJ1ZmZlclBv
cyA9IDA7Ci0gICAgdG90YWxCeXRlc1JldGlyZWQgPSAwOwotICAgIHRoaXMuaW5wdXQgPSBpbnB1
dDsKLSAgICBidWZmZXJJc0ltbXV0YWJsZSA9IGZhbHNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
ZW5hYmxlQWxpYXNpbmcoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgdGhpcy5lbmFibGVBbGlhc2lu
ZyA9IGVuYWJsZWQ7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IHRoZSBtYXhpbXVtIG1lc3NhZ2Ug
cmVjdXJzaW9uIGRlcHRoLiAgSW4gb3JkZXIgdG8gcHJldmVudCBtYWxpY2lvdXMKLSAgICogbWVz
c2FnZXMgZnJvbSBjYXVzaW5nIHN0YWNrIG92ZXJmbG93cywge0Bjb2RlIENvZGVkSW5wdXRTdHJl
YW19IGxpbWl0cwotICAgKiBob3cgZGVlcGx5IG1lc3NhZ2VzIG1heSBiZSBuZXN0ZWQuICBUaGUg
ZGVmYXVsdCBsaW1pdCBpcyA2NC4KLSAgICoKLSAgICogQHJldHVybiB0aGUgb2xkIGxpbWl0Lgot
ICAgKi8KLSAgcHVibGljIGludCBzZXRSZWN1cnNpb25MaW1pdChmaW5hbCBpbnQgbGltaXQpIHsK
LSAgICBpZiAobGltaXQgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uKAotICAgICAgICAiUmVjdXJzaW9uIGxpbWl0IGNhbm5vdCBiZSBuZWdhdGl2ZTogIiAr
IGxpbWl0KTsKLSAgICB9Ci0gICAgZmluYWwgaW50IG9sZExpbWl0ID0gcmVjdXJzaW9uTGltaXQ7
Ci0gICAgcmVjdXJzaW9uTGltaXQgPSBsaW1pdDsKLSAgICByZXR1cm4gb2xkTGltaXQ7Ci0gIH0K
LQotICAvKioKLSAgICogU2V0IHRoZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZS4gIEluIG9yZGVyIHRv
IHByZXZlbnQgbWFsaWNpb3VzCi0gICAqIG1lc3NhZ2VzIGZyb20gZXhoYXVzdGluZyBtZW1vcnkg
b3IgY2F1c2luZyBpbnRlZ2VyIG92ZXJmbG93cywKLSAgICoge0Bjb2RlIENvZGVkSW5wdXRTdHJl
YW19IGxpbWl0cyBob3cgbGFyZ2UgYSBtZXNzYWdlIG1heSBiZS4KLSAgICogVGhlIGRlZmF1bHQg
bGltaXQgaXMgNjRNQi4gIFlvdSBzaG91bGQgc2V0IHRoaXMgbGltaXQgYXMgc21hbGwKLSAgICog
YXMgeW91IGNhbiB3aXRob3V0IGhhcm1pbmcgeW91ciBhcHAncyBmdW5jdGlvbmFsaXR5LiAgTm90
ZSB0aGF0Ci0gICAqIHNpemUgbGltaXRzIG9ubHkgYXBwbHkgd2hlbiByZWFkaW5nIGZyb20gYW4g
e0Bjb2RlIElucHV0U3RyZWFtfSwgbm90Ci0gICAqIHdoZW4gY29uc3RydWN0ZWQgYXJvdW5kIGEg
cmF3IGJ5dGUgYXJyYXkgKG5vciB3aXRoCi0gICAqIHtAbGluayBCeXRlU3RyaW5nI25ld0NvZGVk
SW5wdXR9KS4KLSAgICogPHA+Ci0gICAqIElmIHlvdSB3YW50IHRvIHJlYWQgc2V2ZXJhbCBtZXNz
YWdlcyBmcm9tIGEgc2luZ2xlIENvZGVkSW5wdXRTdHJlYW0sIHlvdQotICAgKiBjb3VsZCBjYWxs
IHtAbGluayAjcmVzZXRTaXplQ291bnRlcigpfSBhZnRlciBlYWNoIG9uZSB0byBhdm9pZCBoaXR0
aW5nIHRoZQotICAgKiBzaXplIGxpbWl0LgotICAgKgotICAgKiBAcmV0dXJuIHRoZSBvbGQgbGlt
aXQuCi0gICAqLwotICBwdWJsaWMgaW50IHNldFNpemVMaW1pdChmaW5hbCBpbnQgbGltaXQpIHsK
LSAgICBpZiAobGltaXQgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uKAotICAgICAgICAiU2l6ZSBsaW1pdCBjYW5ub3QgYmUgbmVnYXRpdmU6ICIgKyBsaW1p
dCk7Ci0gICAgfQotICAgIGZpbmFsIGludCBvbGRMaW1pdCA9IHNpemVMaW1pdDsKLSAgICBzaXpl
TGltaXQgPSBsaW1pdDsKLSAgICByZXR1cm4gb2xkTGltaXQ7Ci0gIH0KLQotICAvKioKLSAgICog
UmVzZXRzIHRoZSBjdXJyZW50IHNpemUgY291bnRlciB0byB6ZXJvIChzZWUge0BsaW5rICNzZXRT
aXplTGltaXQoaW50KX0pLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzZXRTaXplQ291bnRlcigp
IHsKLSAgICB0b3RhbEJ5dGVzUmV0aXJlZCA9IC1idWZmZXJQb3M7Ci0gIH0KLQotICAvKioKLSAg
ICogU2V0cyB7QGNvZGUgY3VycmVudExpbWl0fSB0byAoY3VycmVudCBwb3NpdGlvbikgKyB7QGNv
ZGUgYnl0ZUxpbWl0fS4gIFRoaXMKLSAgICogaXMgY2FsbGVkIHdoZW4gZGVzY2VuZGluZyBpbnRv
IGEgbGVuZ3RoLWRlbGltaXRlZCBlbWJlZGRlZCBtZXNzYWdlLgotICAgKgotICAgKiA8cD5Ob3Rl
IHRoYXQge0Bjb2RlIHB1c2hMaW1pdCgpfSBkb2VzIE5PVCBhZmZlY3QgaG93IG1hbnkgYnl0ZXMg
dGhlCi0gICAqIHtAY29kZSBDb2RlZElucHV0U3RyZWFtfSByZWFkcyBmcm9tIGFuIHVuZGVybHlp
bmcge0Bjb2RlIElucHV0U3RyZWFtfSB3aGVuCi0gICAqIHJlZnJlc2hpbmcgaXRzIGJ1ZmZlci4g
IElmIHlvdSBuZWVkIHRvIHByZXZlbnQgcmVhZGluZyBwYXN0IGEgY2VydGFpbgotICAgKiBwb2lu
dCBpbiB0aGUgdW5kZXJseWluZyB7QGNvZGUgSW5wdXRTdHJlYW19IChlLmcuIGJlY2F1c2UgeW91
IGV4cGVjdCBpdCB0bwotICAgKiBjb250YWluIG1vcmUgZGF0YSBhZnRlciB0aGUgZW5kIG9mIHRo
ZSBtZXNzYWdlIHdoaWNoIHlvdSBuZWVkIHRvIGhhbmRsZQotICAgKiBkaWZmZXJlbnRseSkgdGhl
biB5b3UgbXVzdCBwbGFjZSBhIHdyYXBwZXIgYXJvdW5kIHlvdXIge0Bjb2RlIElucHV0U3RyZWFt
fQotICAgKiB3aGljaCBsaW1pdHMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgY2FuIGJlIHJlYWQg
ZnJvbSBpdC4KLSAgICoKLSAgICogQHJldHVybiB0aGUgb2xkIGxpbWl0LgotICAgKi8KLSAgcHVi
bGljIGludCBwdXNoTGltaXQoaW50IGJ5dGVMaW1pdCkgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbiB7Ci0gICAgaWYgKGJ5dGVMaW1pdCA8IDApIHsKLSAgICAgIHRocm93IElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5uZWdhdGl2ZVNpemUoKTsKLSAgICB9Ci0gICAg
Ynl0ZUxpbWl0ICs9IHRvdGFsQnl0ZXNSZXRpcmVkICsgYnVmZmVyUG9zOwotICAgIGZpbmFsIGlu
dCBvbGRMaW1pdCA9IGN1cnJlbnRMaW1pdDsKLSAgICBpZiAoYnl0ZUxpbWl0ID4gb2xkTGltaXQp
IHsKLSAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi50cnVuY2F0ZWRN
ZXNzYWdlKCk7Ci0gICAgfQotICAgIGN1cnJlbnRMaW1pdCA9IGJ5dGVMaW1pdDsKLQotICAgIHJl
Y29tcHV0ZUJ1ZmZlclNpemVBZnRlckxpbWl0KCk7Ci0KLSAgICByZXR1cm4gb2xkTGltaXQ7Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgcmVjb21wdXRlQnVmZmVyU2l6ZUFmdGVyTGltaXQoKSB7Ci0g
ICAgYnVmZmVyU2l6ZSArPSBidWZmZXJTaXplQWZ0ZXJMaW1pdDsKLSAgICBmaW5hbCBpbnQgYnVm
ZmVyRW5kID0gdG90YWxCeXRlc1JldGlyZWQgKyBidWZmZXJTaXplOwotICAgIGlmIChidWZmZXJF
bmQgPiBjdXJyZW50TGltaXQpIHsKLSAgICAgIC8vIExpbWl0IGlzIGluIGN1cnJlbnQgYnVmZmVy
LgotICAgICAgYnVmZmVyU2l6ZUFmdGVyTGltaXQgPSBidWZmZXJFbmQgLSBjdXJyZW50TGltaXQ7
Ci0gICAgICBidWZmZXJTaXplIC09IGJ1ZmZlclNpemVBZnRlckxpbWl0OwotICAgIH0gZWxzZSB7
Ci0gICAgICBidWZmZXJTaXplQWZ0ZXJMaW1pdCA9IDA7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIERpc2NhcmRzIHRoZSBjdXJyZW50IGxpbWl0LCByZXR1cm5pbmcgdG8gdGhlIHByZXZpb3Vz
IGxpbWl0LgotICAgKgotICAgKiBAcGFyYW0gb2xkTGltaXQgVGhlIG9sZCBsaW1pdCwgYXMgcmV0
dXJuZWQgYnkge0Bjb2RlIHB1c2hMaW1pdH0uCi0gICAqLwotICBwdWJsaWMgdm9pZCBwb3BMaW1p
dChmaW5hbCBpbnQgb2xkTGltaXQpIHsKLSAgICBjdXJyZW50TGltaXQgPSBvbGRMaW1pdDsKLSAg
ICByZWNvbXB1dGVCdWZmZXJTaXplQWZ0ZXJMaW1pdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJl
dHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0byBiZSByZWFkIGJlZm9yZSB0aGUgY3VycmVudCBs
aW1pdC4KLSAgICogSWYgbm8gbGltaXQgaXMgc2V0LCByZXR1cm5zIC0xLgotICAgKi8KLSAgcHVi
bGljIGludCBnZXRCeXRlc1VudGlsTGltaXQoKSB7Ci0gICAgaWYgKGN1cnJlbnRMaW1pdCA9PSBJ
bnRlZ2VyLk1BWF9WQUxVRSkgewotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGZpbmFs
IGludCBjdXJyZW50QWJzb2x1dGVQb3NpdGlvbiA9IHRvdGFsQnl0ZXNSZXRpcmVkICsgYnVmZmVy
UG9zOwotICAgIHJldHVybiBjdXJyZW50TGltaXQgLSBjdXJyZW50QWJzb2x1dGVQb3NpdGlvbjsK
LSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHN0cmVhbSBoYXMgcmVhY2hl
ZCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4gIFRoaXMgaXMgdGhlCi0gICAqIGNhc2UgaWYgZWl0aGVy
IHRoZSBlbmQgb2YgdGhlIHVuZGVybHlpbmcgaW5wdXQgc291cmNlIGhhcyBiZWVuIHJlYWNoZWQg
b3IKLSAgICogaWYgdGhlIHN0cmVhbSBoYXMgcmVhY2hlZCBhIGxpbWl0IGNyZWF0ZWQgdXNpbmcg
e0BsaW5rICNwdXNoTGltaXQoaW50KX0uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0F0RW5k
KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gYnVmZmVyUG9zID09IGJ1ZmZlclNp
emUgJiYgIXRyeVJlZmlsbEJ1ZmZlcigxKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgdG90YWwg
Ynl0ZXMgcmVhZCB1cCB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4gQ2FsbGluZwotICAgKiB7QGxp
bmsgI3Jlc2V0U2l6ZUNvdW50ZXIoKX0gcmVzZXRzIHRoaXMgdmFsdWUgdG8gemVyby4KLSAgICov
Ci0gIHB1YmxpYyBpbnQgZ2V0VG90YWxCeXRlc1JlYWQoKSB7Ci0gICAgICByZXR1cm4gdG90YWxC
eXRlc1JldGlyZWQgKyBidWZmZXJQb3M7Ci0gIH0KLQotICBwcml2YXRlIGludGVyZmFjZSBSZWZp
bGxDYWxsYmFjayB7Ci0gICAgdm9pZCBvblJlZmlsbCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBSZWZp
bGxDYWxsYmFjayByZWZpbGxDYWxsYmFjayA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIFJlYWRzIG1v
cmUgYnl0ZXMgZnJvbSB0aGUgaW5wdXQsIG1ha2luZyBhdCBsZWFzdCB7QGNvZGUgbn0gYnl0ZXMg
YXZhaWxhYmxlCi0gICAqIGluIHRoZSBidWZmZXIuICBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0
aGUgcmVxdWVzdGVkIHNwYWNlIGlzIG5vdCB5ZXQKLSAgICogYXZhaWxhYmxlLCBhbmQgdGhhdCB0
aGUgcmVxdWVzdGVkIHNwYWNlIGlzIGxlc3MgdGhhbiBCVUZGRVJfU0laRS4KLSAgICoKLSAgICog
QHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gVGhlIGVuZCBvZiB0aGUgc3Ry
ZWFtIG9yIHRoZSBjdXJyZW50Ci0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbWl0IHdhcyByZWFjaGVkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlZmlsbEJ1
ZmZlcihpbnQgbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpZiAoIXRyeVJlZmlsbEJ1ZmZl
cihuKSkgewotICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLnRydW5j
YXRlZE1lc3NhZ2UoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVHJpZXMgdG8gcmVhZCBt
b3JlIGJ5dGVzIGZyb20gdGhlIGlucHV0LCBtYWtpbmcgYXQgbGVhc3Qge0Bjb2RlIG59IGJ5dGVz
Ci0gICAqIGF2YWlsYWJsZSBpbiB0aGUgYnVmZmVyLiAgQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQg
dGhlIHJlcXVlc3RlZCBzcGFjZSBpcwotICAgKiBub3QgeWV0IGF2YWlsYWJsZSwgYW5kIHRoYXQg
dGhlIHJlcXVlc3RlZCBzcGFjZSBpcyBsZXNzIHRoYW4gQlVGRkVSX1NJWkUuCi0gICAqCi0gICAq
IEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBieXRlcyBjb3VsZCBiZSBtYWRlIGF2YWlsYWJs
ZTsge0Bjb2RlIGZhbHNlfQotICAgKiAgICAgICAgIGlmIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBv
ciB0aGUgY3VycmVudCBsaW1pdCB3YXMgcmVhY2hlZC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVh
biB0cnlSZWZpbGxCdWZmZXIoaW50IG4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKGJ1
ZmZlclBvcyArIG4gPD0gYnVmZmVyU2l6ZSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0
ZUV4Y2VwdGlvbigKLSAgICAgICAgICAicmVmaWxsQnVmZmVyKCkgY2FsbGVkIHdoZW4gIiArIG4g
KwotICAgICAgICAgICIgYnl0ZXMgd2VyZSBhbHJlYWR5IGF2YWlsYWJsZSBpbiBidWZmZXIiKTsK
LSAgICB9Ci0KLSAgICBpZiAodG90YWxCeXRlc1JldGlyZWQgKyBidWZmZXJQb3MgKyBuID4gY3Vy
cmVudExpbWl0KSB7Ci0gICAgICAvLyBPb3BzLCB3ZSBoaXQgYSBsaW1pdC4KLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmVmaWxsQ2FsbGJhY2sgIT0gbnVsbCkgewotICAg
ICAgcmVmaWxsQ2FsbGJhY2sub25SZWZpbGwoKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgIT0g
bnVsbCkgewotICAgICAgaW50IHBvcyA9IGJ1ZmZlclBvczsKLSAgICAgIGlmIChwb3MgPiAwKSB7
Ci0gICAgICAgIGlmIChidWZmZXJTaXplID4gcG9zKSB7Ci0gICAgICAgICAgU3lzdGVtLmFycmF5
Y29weShidWZmZXIsIHBvcywgYnVmZmVyLCAwLCBidWZmZXJTaXplIC0gcG9zKTsKLSAgICAgICAg
fQotICAgICAgICB0b3RhbEJ5dGVzUmV0aXJlZCArPSBwb3M7Ci0gICAgICAgIGJ1ZmZlclNpemUg
LT0gcG9zOwotICAgICAgICBidWZmZXJQb3MgPSAwOwotICAgICAgfQotCi0gICAgICBpbnQgYnl0
ZXNSZWFkID0gaW5wdXQucmVhZChidWZmZXIsIGJ1ZmZlclNpemUsIGJ1ZmZlci5sZW5ndGggLSBi
dWZmZXJTaXplKTsKLSAgICAgIGlmIChieXRlc1JlYWQgPT0gMCB8fCBieXRlc1JlYWQgPCAtMSB8
fCBieXRlc1JlYWQgPiBidWZmZXIubGVuZ3RoKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2Fs
U3RhdGVFeGNlcHRpb24oCi0gICAgICAgICAgICAiSW5wdXRTdHJlYW0jcmVhZChieXRlW10pIHJl
dHVybmVkIGludmFsaWQgcmVzdWx0OiAiICsgYnl0ZXNSZWFkICsKLSAgICAgICAgICAgICJcblRo
ZSBJbnB1dFN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyBidWdneS4iKTsKLSAgICAgIH0KLSAgICAg
IGlmIChieXRlc1JlYWQgPiAwKSB7Ci0gICAgICAgIGJ1ZmZlclNpemUgKz0gYnl0ZXNSZWFkOwot
ICAgICAgICAvLyBJbnRlZ2VyLW92ZXJmbG93LWNvbnNjaW91cyBjaGVjayBhZ2FpbnN0IHNpemVM
aW1pdAotICAgICAgICBpZiAodG90YWxCeXRlc1JldGlyZWQgKyBuIC0gc2l6ZUxpbWl0ID4gMCkg
ewotICAgICAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5zaXplTGlt
aXRFeGNlZWRlZCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlY29tcHV0ZUJ1ZmZlclNpemVBZnRl
ckxpbWl0KCk7Ci0gICAgICAgIHJldHVybiAoYnVmZmVyU2l6ZSA+PSBuKSA/IHRydWUgOiB0cnlS
ZWZpbGxCdWZmZXIobik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgLyoqCi0gICAqIFJlYWQgb25lIGJ5dGUgZnJvbSB0aGUgaW5wdXQuCi0gICAqCi0gICAq
IEB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIFRoZSBlbmQgb2YgdGhlIHN0
cmVhbSBvciB0aGUgY3VycmVudAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW1pdCB3YXMgcmVhY2hlZC4KLSAgICovCi0gIHB1YmxpYyBieXRlIHJlYWRSYXdC
eXRlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpZiAoYnVmZmVyUG9zID09IGJ1ZmZlclNp
emUpIHsKLSAgICAgIHJlZmlsbEJ1ZmZlcigxKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1ZmZlclti
dWZmZXJQb3MrK107Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCBhIGZpeGVkIHNpemUgb2YgYnl0
ZXMgZnJvbSB0aGUgaW5wdXQuCi0gICAqCi0gICAqIEB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIFRoZSBlbmQgb2YgdGhlIHN0cmVhbSBvciB0aGUgY3VycmVudAotICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCB3YXMgcmVhY2hlZC4K
LSAgICovCi0gIHB1YmxpYyBieXRlW10gcmVhZFJhd0J5dGVzKGZpbmFsIGludCBzaXplKSB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgIGZpbmFsIGludCBwb3MgPSBidWZmZXJQb3M7Ci0gICAgaWYg
KHNpemUgPD0gKGJ1ZmZlclNpemUgLSBwb3MpICYmIHNpemUgPiAwKSB7Ci0gICAgICBidWZmZXJQ
b3MgPSBwb3MgKyBzaXplOwotICAgICAgcmV0dXJuIEFycmF5cy5jb3B5T2ZSYW5nZShidWZmZXIs
IHBvcywgcG9zICsgc2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiByZWFkUmF3Qnl0
ZXNTbG93UGF0aChzaXplKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRXhhY3RseSBsaWtl
IHJlYWRSYXdCeXRlcywgYnV0IGNhbGxlciBtdXN0IGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoZSBm
YXN0Ci0gICAqIHBhdGg6IChzaXplIDw9IChidWZmZXJTaXplIC0gcG9zKSAmJiBzaXplID4gMCkK
LSAgICovCi0gIHByaXZhdGUgYnl0ZVtdIHJlYWRSYXdCeXRlc1Nsb3dQYXRoKGZpbmFsIGludCBz
aXplKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgIGlm
IChzaXplID09IDApIHsKLSAgICAgICAgcmV0dXJuIEludGVybmFsLkVNUFRZX0JZVEVfQVJSQVk7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNl
cHRpb24ubmVnYXRpdmVTaXplKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gVmVyaWZ5IHRo
YXQgdGhlIG1lc3NhZ2Ugc2l6ZSBzbyBmYXIgaGFzIG5vdCBleGNlZWRlZCBzaXplTGltaXQuCi0g
ICAgaW50IGN1cnJlbnRNZXNzYWdlU2l6ZSA9IHRvdGFsQnl0ZXNSZXRpcmVkICsgYnVmZmVyUG9z
ICsgc2l6ZTsKLSAgICBpZiAoY3VycmVudE1lc3NhZ2VTaXplID4gc2l6ZUxpbWl0KSB7Ci0gICAg
ICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24uc2l6ZUxpbWl0RXhjZWVkZWQo
KTsKLSAgICB9Ci0KLSAgICAvLyBWZXJpZnkgdGhhdCB0aGUgbWVzc2FnZSBzaXplIHNvIGZhciBo
YXMgbm90IGV4Y2VlZGVkIGN1cnJlbnRMaW1pdC4KLSAgICBpZiAoY3VycmVudE1lc3NhZ2VTaXpl
ID4gY3VycmVudExpbWl0KSB7Ci0gICAgICAvLyBSZWFkIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmVh
bSBhbnl3YXkuCi0gICAgICBza2lwUmF3Qnl0ZXMoY3VycmVudExpbWl0IC0gdG90YWxCeXRlc1Jl
dGlyZWQgLSBidWZmZXJQb3MpOwotICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhj
ZXB0aW9uLnRydW5jYXRlZE1lc3NhZ2UoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBuZWVkIHRoZSBp
bnB1dCBzdHJlYW0gdG8gcHJvY2VlZC4KLSAgICBpZiAoaW5wdXQgPT0gbnVsbCkgewotICAgICAg
dGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLnRydW5jYXRlZE1lc3NhZ2UoKTsK
LSAgICB9Ci0KLSAgICBmaW5hbCBpbnQgb3JpZ2luYWxCdWZmZXJQb3MgPSBidWZmZXJQb3M7Ci0g
ICAgZmluYWwgaW50IGJ1ZmZlcmVkQnl0ZXMgPSBidWZmZXJTaXplIC0gYnVmZmVyUG9zOwotCi0g
ICAgLy8gTWFyayB0aGUgY3VycmVudCBidWZmZXIgY29uc3VtZWQuCi0gICAgdG90YWxCeXRlc1Jl
dGlyZWQgKz0gYnVmZmVyU2l6ZTsKLSAgICBidWZmZXJQb3MgPSAwOwotICAgIGJ1ZmZlclNpemUg
PSAwOwotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgbmVlZCB0byBy
ZWFkIGZyb20gdGhlIGlucHV0IHN0cmVhbS4KLSAgICBpbnQgc2l6ZUxlZnQgPSBzaXplIC0gYnVm
ZmVyZWRCeXRlczsKLSAgICAvLyBUT0RPKG5hdGhhbm1pdHRsZXIpOiBDb25zaWRlciB1c2luZyBh
IHZhbHVlIGxhcmdlciB0aGFuIEJVRkZFUl9TSVpFLgotICAgIGlmIChzaXplTGVmdCA8IEJVRkZF
Ul9TSVpFIHx8IHNpemVMZWZ0IDw9IGlucHV0LmF2YWlsYWJsZSgpKSB7Ci0gICAgICAvLyBFaXRo
ZXIgdGhlIGJ5dGVzIHdlIG5lZWQgYXJlIGtub3duIHRvIGJlIGF2YWlsYWJsZSwgb3IgdGhlIHJl
cXVpcmVkIGJ1ZmZlciBpcwotICAgICAgLy8gd2l0aGluIGFuIGFsbG93ZWQgdGhyZXNob2xkIC0g
Z28gYWhlYWQgYW5kIGFsbG9jYXRlIHRoZSBidWZmZXIgbm93LgotICAgICAgZmluYWwgYnl0ZVtd
IGJ5dGVzID0gbmV3IGJ5dGVbc2l6ZV07Ci0KLSAgICAgIC8vIENvcHkgYWxsIG9mIHRoZSBidWZm
ZXJlZCBieXRlcyB0byB0aGUgcmVzdWx0IGJ1ZmZlci4KLSAgICAgIFN5c3RlbS5hcnJheWNvcHko
YnVmZmVyLCBvcmlnaW5hbEJ1ZmZlclBvcywgYnl0ZXMsIDAsIGJ1ZmZlcmVkQnl0ZXMpOwotCi0g
ICAgICAvLyBGaWxsIHRoZSByZW1haW5pbmcgYnl0ZXMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLgot
ICAgICAgaW50IHBvcyA9IGJ1ZmZlcmVkQnl0ZXM7Ci0gICAgICB3aGlsZSAocG9zIDwgYnl0ZXMu
bGVuZ3RoKSB7Ci0gICAgICAgIGludCBuID0gaW5wdXQucmVhZChieXRlcywgcG9zLCBzaXplIC0g
cG9zKTsKLSAgICAgICAgaWYgKG4gPT0gLTEpIHsKLSAgICAgICAgICB0aHJvdyBJbnZhbGlkUHJv
dG9jb2xCdWZmZXJFeGNlcHRpb24udHJ1bmNhdGVkTWVzc2FnZSgpOwotICAgICAgICB9Ci0gICAg
ICAgIHRvdGFsQnl0ZXNSZXRpcmVkICs9IG47Ci0gICAgICAgIHBvcyArPSBuOwotICAgICAgfQot
Ci0gICAgICByZXR1cm4gYnl0ZXM7Ci0gICAgfQotCi0gICAgLy8gVGhlIHNpemUgaXMgdmVyeSBs
YXJnZS4gIEZvciBzZWN1cml0eSByZWFzb25zLCB3ZSBjYW4ndCBhbGxvY2F0ZSB0aGUKLSAgICAv
LyBlbnRpcmUgYnl0ZSBhcnJheSB5ZXQuICBUaGUgc2l6ZSBjb21lcyBkaXJlY3RseSBmcm9tIHRo
ZSBpbnB1dCwgc28gYQotICAgIC8vIG1hbGljaW91c2x5LWNyYWZ0ZWQgbWVzc2FnZSBjb3VsZCBw
cm92aWRlIGEgYm9ndXMgdmVyeSBsYXJnZSBzaXplIGluCi0gICAgLy8gb3JkZXIgdG8gdHJpY2sg
dGhlIGFwcCBpbnRvIGFsbG9jYXRpbmcgYSBsb3Qgb2YgbWVtb3J5LiAgV2UgYXZvaWQgdGhpcwot
ICAgIC8vIGJ5IGFsbG9jYXRpbmcgYW5kIHJlYWRpbmcgb25seSBhIHNtYWxsIGNodW5rIGF0IGEg
dGltZSwgc28gdGhhdCB0aGUKLSAgICAvLyBtYWxpY2lvdXMgbWVzc2FnZSBtdXN0IGFjdHVhbGx5
ICpiZSogZXh0cmVtZWx5IGxhcmdlIHRvIGNhdXNlCi0gICAgLy8gcHJvYmxlbXMuICBNZWFud2hp
bGUsIHdlIGxpbWl0IHRoZSBhbGxvd2VkIHNpemUgb2YgYSBtZXNzYWdlIGVsc2V3aGVyZS4KLSAg
ICBmaW5hbCBMaXN0PGJ5dGVbXT4gY2h1bmtzID0gbmV3IEFycmF5TGlzdDxieXRlW10+KCk7Ci0K
LSAgICB3aGlsZSAoc2l6ZUxlZnQgPiAwKSB7Ci0gICAgICAvLyBUT0RPKG5hdGhhbm1pdHRsZXIp
OiBDb25zaWRlciB1c2luZyBhIHZhbHVlIGxhcmdlciB0aGFuIEJVRkZFUl9TSVpFLgotICAgICAg
ZmluYWwgYnl0ZVtdIGNodW5rID0gbmV3IGJ5dGVbTWF0aC5taW4oc2l6ZUxlZnQsIEJVRkZFUl9T
SVpFKV07Ci0gICAgICBpbnQgcG9zID0gMDsKLSAgICAgIHdoaWxlIChwb3MgPCBjaHVuay5sZW5n
dGgpIHsKLSAgICAgICAgZmluYWwgaW50IG4gPSBpbnB1dC5yZWFkKGNodW5rLCBwb3MsIGNodW5r
Lmxlbmd0aCAtIHBvcyk7Ci0gICAgICAgIGlmIChuID09IC0xKSB7Ci0gICAgICAgICAgdGhyb3cg
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLnRydW5jYXRlZE1lc3NhZ2UoKTsKLSAgICAg
ICAgfQotICAgICAgICB0b3RhbEJ5dGVzUmV0aXJlZCArPSBuOwotICAgICAgICBwb3MgKz0gbjsK
LSAgICAgIH0KLSAgICAgIHNpemVMZWZ0IC09IGNodW5rLmxlbmd0aDsKLSAgICAgIGNodW5rcy5h
ZGQoY2h1bmspOwotICAgIH0KLQotICAgIC8vIE9LLCBnb3QgZXZlcnl0aGluZy4gIE5vdyBjb25j
YXRlbmF0ZSBpdCBhbGwgaW50byBvbmUgYnVmZmVyLgotICAgIGZpbmFsIGJ5dGVbXSBieXRlcyA9
IG5ldyBieXRlW3NpemVdOwotCi0gICAgLy8gU3RhcnQgYnkgY29weWluZyB0aGUgbGVmdG92ZXIg
Ynl0ZXMgZnJvbSB0aGlzLmJ1ZmZlci4KLSAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZmZlciwgb3Jp
Z2luYWxCdWZmZXJQb3MsIGJ5dGVzLCAwLCBidWZmZXJlZEJ5dGVzKTsKLQotICAgIC8vIEFuZCBu
b3cgYWxsIHRoZSBjaHVua3MuCi0gICAgaW50IHBvcyA9IGJ1ZmZlcmVkQnl0ZXM7Ci0gICAgZm9y
IChmaW5hbCBieXRlW10gY2h1bmsgOiBjaHVua3MpIHsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHko
Y2h1bmssIDAsIGJ5dGVzLCBwb3MsIGNodW5rLmxlbmd0aCk7Ci0gICAgICBwb3MgKz0gY2h1bmsu
bGVuZ3RoOwotICAgIH0KLQotICAgIC8vIERvbmUuCi0gICAgcmV0dXJuIGJ5dGVzOwotICB9Ci0K
LSAgLyoqCi0gICAqIFJlYWRzIGFuZCBkaXNjYXJkcyB7QGNvZGUgc2l6ZX0gYnl0ZXMuCi0gICAq
Ci0gICAqIEB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIFRoZSBlbmQgb2Yg
dGhlIHN0cmVhbSBvciB0aGUgY3VycmVudAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW1pdCB3YXMgcmVhY2hlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNr
aXBSYXdCeXRlcyhmaW5hbCBpbnQgc2l6ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpZiAo
c2l6ZSA8PSAoYnVmZmVyU2l6ZSAtIGJ1ZmZlclBvcykgJiYgc2l6ZSA+PSAwKSB7Ci0gICAgICAv
LyBXZSBoYXZlIGFsbCB0aGUgYnl0ZXMgd2UgbmVlZCBhbHJlYWR5LgotICAgICAgYnVmZmVyUG9z
ICs9IHNpemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNraXBSYXdCeXRlc1Nsb3dQYXRoKHNpemUp
OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBFeGFjdGx5IGxpa2Ugc2tpcFJhd0J5dGVzLCBi
dXQgY2FsbGVyIG11c3QgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhlIGZhc3QKLSAgICogcGF0aDog
KHNpemUgPD0gKGJ1ZmZlclNpemUgLSBwb3MpICYmIHNpemUgPj0gMCkKLSAgICovCi0gIHByaXZh
dGUgdm9pZCBza2lwUmF3Qnl0ZXNTbG93UGF0aChmaW5hbCBpbnQgc2l6ZSkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgIHRocm93IEludmFsaWRQcm90b2Nv
bEJ1ZmZlckV4Y2VwdGlvbi5uZWdhdGl2ZVNpemUoKTsKLSAgICB9Ci0KLSAgICBpZiAodG90YWxC
eXRlc1JldGlyZWQgKyBidWZmZXJQb3MgKyBzaXplID4gY3VycmVudExpbWl0KSB7Ci0gICAgICAv
LyBSZWFkIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBhbnl3YXkuCi0gICAgICBza2lwUmF3Qnl0
ZXMoY3VycmVudExpbWl0IC0gdG90YWxCeXRlc1JldGlyZWQgLSBidWZmZXJQb3MpOwotICAgICAg
Ly8gVGhlbiBmYWlsLgotICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
LnRydW5jYXRlZE1lc3NhZ2UoKTsKLSAgICB9Ci0KLSAgICAvLyBTa2lwcGluZyBtb3JlIGJ5dGVz
IHRoYW4gYXJlIGluIHRoZSBidWZmZXIuICBGaXJzdCBza2lwIHdoYXQgd2UgaGF2ZS4KLSAgICBp
bnQgcG9zID0gYnVmZmVyU2l6ZSAtIGJ1ZmZlclBvczsKLSAgICBidWZmZXJQb3MgPSBidWZmZXJT
aXplOwotCi0gICAgLy8gS2VlcCByZWZpbGxpbmcgdGhlIGJ1ZmZlciB1bnRpbCB3ZSBnZXQgdG8g
dGhlIHBvaW50IHdlIHdhbnRlZCB0byBza2lwIHRvLgotICAgIC8vIFRoaXMgaGFzIHRoZSBzaWRl
IGVmZmVjdCBvZiBlbnN1cmluZyB0aGUgbGltaXRzIGFyZSB1cGRhdGVkIGNvcnJlY3RseS4KLSAg
ICByZWZpbGxCdWZmZXIoMSk7Ci0gICAgd2hpbGUgKHNpemUgLSBwb3MgPiBidWZmZXJTaXplKSB7
Ci0gICAgICBwb3MgKz0gYnVmZmVyU2l6ZTsKLSAgICAgIGJ1ZmZlclBvcyA9IGJ1ZmZlclNpemU7
Ci0gICAgICByZWZpbGxCdWZmZXIoMSk7Ci0gICAgfQotCi0gICAgYnVmZmVyUG9zID0gc2l6ZSAt
IHBvczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL0NvZGVkT3V0cHV0U3RyZWFtLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQ29kZWRPdXRwdXRTdHJlYW0uamF2YQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWQxNzRkMGZmNjA0OWM3M2RmYWQ0NGNjNTVlZDAyZTI5Mjg0
ZmIwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEv
Y29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQ29kZWRPdXRwdXRTdHJlYW0u
amF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NjQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0
IHN0YXRpYyBqYXZhLmxhbmcuTWF0aC5tYXg7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVm
LlV0ZjguVW5wYWlyZWRTdXJyb2dhdGVFeGNlcHRpb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhj
ZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubGFuZy5y
ZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubmlvLkJ1ZmZlck92ZXJmbG93RXhjZXB0aW9uOwot
aW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwot
aW1wb3J0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlcjsKLWltcG9ydCBqYXZhLnNlY3Vy
aXR5LlByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcu
TGV2ZWw7Ci1pbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwotCi0vKioKLSAqIEVuY29k
ZXMgYW5kIHdyaXRlcyBwcm90b2NvbCBtZXNzYWdlIGZpZWxkcy4KLSAqCi0gKiA8cD5UaGlzIGNs
YXNzIGNvbnRhaW5zIHR3byBraW5kcyBvZiBtZXRob2RzOiAgbWV0aG9kcyB0aGF0IHdyaXRlIHNw
ZWNpZmljCi0gKiBwcm90b2NvbCBtZXNzYWdlIGNvbnN0cnVjdHMgYW5kIGZpZWxkIHR5cGVzIChl
LmcuIHtAbGluayAjd3JpdGVUYWd9IGFuZAotICoge0BsaW5rICN3cml0ZUludDMyfSkgYW5kIG1l
dGhvZHMgdGhhdCB3cml0ZSBsb3ctbGV2ZWwgdmFsdWVzIChlLmcuCi0gKiB7QGxpbmsgI3dyaXRl
UmF3VmFyaW50MzJ9IGFuZCB7QGxpbmsgI3dyaXRlUmF3Qnl0ZXN9KS4gIElmIHlvdSBhcmUKLSAq
IHdyaXRpbmcgZW5jb2RlZCBwcm90b2NvbCBtZXNzYWdlcywgeW91IHNob3VsZCB1c2UgdGhlIGZv
cm1lciBtZXRob2RzLCBidXQgaWYKLSAqIHlvdSBhcmUgd3JpdGluZyBzb21lIG90aGVyIGZvcm1h
dCBvZiB5b3VyIG93biBkZXNpZ24sIHVzZSB0aGUgbGF0dGVyLgotICoKLSAqIDxwPlRoaXMgY2xh
c3MgaXMgdG90YWxseSB1bnN5bmNocm9uaXplZC4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNz
IENvZGVkT3V0cHV0U3RyZWFtIGV4dGVuZHMgQnl0ZU91dHB1dCB7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKENvZGVkT3V0cHV0U3RyZWFt
LmNsYXNzLmdldE5hbWUoKSk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIHN1bi5taXNjLlVuc2Fm
ZSBVTlNBRkUgPSBnZXRVbnNhZmUoKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBI
QVNfVU5TQUZFX0FSUkFZX09QRVJBVElPTlMgPSBzdXBwb3J0c1Vuc2FmZUFycmF5T3BlcmF0aW9u
cygpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEFSUkFZX0JBU0VfT0ZGU0VUID0gYnl0
ZUFycmF5QmFzZU9mZnNldCgpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGSVhFRF8z
Ml9TSVpFID0gNDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJWEVEXzY0X1NJWkUgPSA4
OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1ZBUklOVF9TSVpFID0gMTA7Ci0KLSAg
LyoqCi0gICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgI2NvbXB1dGVGaXhlZDMyU2l6ZU5vVGFn
KGludCl9IGluc3RlYWQuCi0gICAqLwotICBARGVwcmVjYXRlZAotICBwdWJsaWMgc3RhdGljIGZp
bmFsIGludCBMSVRUTEVfRU5ESUFOXzMyX1NJWkUgPSBGSVhFRF8zMl9TSVpFOwotCi0gIC8qKgot
ICAgKiBUaGUgYnVmZmVyIHNpemUgdXNlZCBpbiB7QGxpbmsgI25ld0luc3RhbmNlKE91dHB1dFN0
cmVhbSl9LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9CVUZGRVJf
U0laRSA9IDQwOTY7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGJ1ZmZlciBzaXplIHRvIGVm
ZmljaWVudGx5IHdyaXRlIGRhdGFMZW5ndGggYnl0ZXMgdG8gdGhpcwotICAgKiBDb2RlZE91dHB1
dFN0cmVhbS4gVXNlZCBieSBBYnN0cmFjdE1lc3NhZ2VMaXRlLgotICAgKgotICAgKiBAcmV0dXJu
IHRoZSBidWZmZXIgc2l6ZSB0byBlZmZpY2llbnRseSB3cml0ZSBkYXRhTGVuZ3RoIGJ5dGVzIHRv
IHRoaXMKLSAgICogICAgICAgICBDb2RlZE91dHB1dFN0cmVhbS4KLSAgICovCi0gIHN0YXRpYyBp
bnQgY29tcHV0ZVByZWZlcnJlZEJ1ZmZlclNpemUoaW50IGRhdGFMZW5ndGgpIHsKLSAgICBpZiAo
ZGF0YUxlbmd0aCA+IERFRkFVTFRfQlVGRkVSX1NJWkUpIHsKLSAgICAgIHJldHVybiBERUZBVUxU
X0JVRkZFUl9TSVpFOwotICAgIH0KLSAgICByZXR1cm4gZGF0YUxlbmd0aDsKLSAgfQotCi0gIC8q
KgotICAgKiBDcmVhdGUgYSBuZXcge0Bjb2RlIENvZGVkT3V0cHV0U3RyZWFtfSB3cmFwcGluZyB0
aGUgZ2l2ZW4ge0Bjb2RlIE91dHB1dFN0cmVhbX0uCi0gICAqCi0gICAqIDxwPiBOT1RFOiBUaGUg
cHJvdmlkZWQge0BsaW5rIE91dHB1dFN0cmVhbX0gPHN0cm9uZz5NVVNUIE5PVDwvc3Ryb25nPiBy
ZXRhaW4gYWNjZXNzIG9yCi0gICAqIG1vZGlmeSB0aGUgcHJvdmlkZWQgYnl0ZSBhcnJheXMuIERv
aW5nIHNvIG1heSByZXN1bHQgaW4gY29ycnVwdGVkIGRhdGEsIHdoaWNoIHdvdWxkIGJlCi0gICAq
IGRpZmZpY3VsdCB0byBkZWJ1Zy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQ29kZWRPdXRwdXRT
dHJlYW0gbmV3SW5zdGFuY2UoZmluYWwgT3V0cHV0U3RyZWFtIG91dHB1dCkgewotICAgIHJldHVy
biBuZXdJbnN0YW5jZShvdXRwdXQsIERFRkFVTFRfQlVGRkVSX1NJWkUpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIENyZWF0ZSBhIG5ldyB7QGNvZGUgQ29kZWRPdXRwdXRTdHJlYW19IHdyYXBwaW5nIHRo
ZSBnaXZlbiB7QGNvZGUgT3V0cHV0U3RyZWFtfSB3aXRoIGEgZ2l2ZW4KLSAgICogYnVmZmVyIHNp
emUuCi0gICAqCi0gICAqIDxwPiBOT1RFOiBUaGUgcHJvdmlkZWQge0BsaW5rIE91dHB1dFN0cmVh
bX0gPHN0cm9uZz5NVVNUIE5PVDwvc3Ryb25nPiByZXRhaW4gYWNjZXNzIG9yCi0gICAqIG1vZGlm
eSB0aGUgcHJvdmlkZWQgYnl0ZSBhcnJheXMuIERvaW5nIHNvIG1heSByZXN1bHQgaW4gY29ycnVw
dGVkIGRhdGEsIHdoaWNoIHdvdWxkIGJlCi0gICAqIGRpZmZpY3VsdCB0byBkZWJ1Zy4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgQ29kZWRPdXRwdXRTdHJlYW0gbmV3SW5zdGFuY2UoZmluYWwgT3V0
cHV0U3RyZWFtIG91dHB1dCwgZmluYWwgaW50IGJ1ZmZlclNpemUpIHsKLSAgICByZXR1cm4gbmV3
IE91dHB1dFN0cmVhbUVuY29kZXIob3V0cHV0LCBidWZmZXJTaXplKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBDcmVhdGUgYSBuZXcge0Bjb2RlIENvZGVkT3V0cHV0U3RyZWFtfSB0aGF0IHdyaXRlcyBk
aXJlY3RseSB0byB0aGUgZ2l2ZW4KLSAgICogYnl0ZSBhcnJheS4gIElmIG1vcmUgYnl0ZXMgYXJl
IHdyaXR0ZW4gdGhhbiBmaXQgaW4gdGhlIGFycmF5LAotICAgKiB7QGxpbmsgT3V0T2ZTcGFjZUV4
Y2VwdGlvbn0gd2lsbCBiZSB0aHJvd24uICBXcml0aW5nIGRpcmVjdGx5IHRvIGEgZmxhdAotICAg
KiBhcnJheSBpcyBmYXN0ZXIgdGhhbiB3cml0aW5nIHRvIGFuIHtAY29kZSBPdXRwdXRTdHJlYW19
LiAgU2VlIGFsc28KLSAgICoge0BsaW5rIEJ5dGVTdHJpbmcjbmV3Q29kZWRCdWlsZGVyfS4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgQ29kZWRPdXRwdXRTdHJlYW0gbmV3SW5zdGFuY2UoZmluYWwg
Ynl0ZVtdIGZsYXRBcnJheSkgewotICAgIHJldHVybiBuZXdJbnN0YW5jZShmbGF0QXJyYXksIDAs
IGZsYXRBcnJheS5sZW5ndGgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyB7QGNv
ZGUgQ29kZWRPdXRwdXRTdHJlYW19IHRoYXQgd3JpdGVzIGRpcmVjdGx5IHRvIHRoZSBnaXZlbgot
ICAgKiBieXRlIGFycmF5IHNsaWNlLiAgSWYgbW9yZSBieXRlcyBhcmUgd3JpdHRlbiB0aGFuIGZp
dCBpbiB0aGUgc2xpY2UsCi0gICAqIHtAbGluayBPdXRPZlNwYWNlRXhjZXB0aW9ufSB3aWxsIGJl
IHRocm93bi4gIFdyaXRpbmcgZGlyZWN0bHkgdG8gYSBmbGF0Ci0gICAqIGFycmF5IGlzIGZhc3Rl
ciB0aGFuIHdyaXRpbmcgdG8gYW4ge0Bjb2RlIE91dHB1dFN0cmVhbX0uICBTZWUgYWxzbwotICAg
KiB7QGxpbmsgQnl0ZVN0cmluZyNuZXdDb2RlZEJ1aWxkZXJ9LgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBDb2RlZE91dHB1dFN0cmVhbSBuZXdJbnN0YW5jZSgKLSAgICAgIGZpbmFsIGJ5dGVbXSBm
bGF0QXJyYXksIGZpbmFsIGludCBvZmZzZXQsIGZpbmFsIGludCBsZW5ndGgpIHsKLSAgICByZXR1
cm4gbmV3IEFycmF5RW5jb2RlcihmbGF0QXJyYXksIG9mZnNldCwgbGVuZ3RoKTsKLSAgfQotCi0g
IC8qKgotICAgKiBDcmVhdGUgYSBuZXcge0Bjb2RlIENvZGVkT3V0cHV0U3RyZWFtfSB0aGF0IHdy
aXRlcyB0byB0aGUgZ2l2ZW4ge0BsaW5rIEJ5dGVCdWZmZXJ9LgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBDb2RlZE91dHB1dFN0cmVhbSBuZXdJbnN0YW5jZShCeXRlQnVmZmVyIGJ5dGVCdWZmZXIp
IHsKLSAgICBpZiAoYnl0ZUJ1ZmZlci5oYXNBcnJheSgpKSB7Ci0gICAgICByZXR1cm4gbmV3IE5p
b0hlYXBFbmNvZGVyKGJ5dGVCdWZmZXIpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IE5pb0VuY29k
ZXIoYnl0ZUJ1ZmZlcik7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgbmV3IHtAY29kZSBD
b2RlZE91dHB1dFN0cmVhbX0gdGhhdCB3cml0ZXMgdG8gdGhlIGdpdmVuIHtAbGluayBCeXRlQnVm
ZmVyfS4KLSAgICoKLSAgICogQGRlcHJlY2F0ZWQgdGhlIHNpemUgcGFyYW1ldGVyIGlzIG5vIGxv
bmdlciB1c2VkIHNpbmNlIHVzZSBvZiBhbiBpbnRlcm5hbCBidWZmZXIgaXMgdXNlbGVzcwotICAg
KiAoYW5kIHdhc3RlZnVsKSB3aGVuIHdyaXRpbmcgdG8gYSB7QGxpbmsgQnl0ZUJ1ZmZlcn0uIFVz
ZSB7QGxpbmsgI25ld0luc3RhbmNlKEJ5dGVCdWZmZXIpfQotICAgKiBpbnN0ZWFkLgotICAgKi8K
LSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIHN0YXRpYyBDb2RlZE91dHB1dFN0cmVhbSBuZXdJbnN0
YW5jZShCeXRlQnVmZmVyIGJ5dGVCdWZmZXIsCi0gICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51
c2VkIikgaW50IHVudXNlZCkgewotICAgIHJldHVybiBuZXdJbnN0YW5jZShieXRlQnVmZmVyKTsK
LSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcge0Bjb2RlIENvZGVkT3V0cHV0U3RyZWFt
fSB0aGF0IHdyaXRlcyB0byB0aGUgcHJvdmlkZWQge0BsaW5rIEJ5dGVPdXRwdXR9LgotICAgKgot
ICAgKiA8cD4gTk9URTogVGhlIHtAbGluayBCeXRlT3V0cHV0fSA8c3Ryb25nPk1VU1QgTk9UPC9z
dHJvbmc+IG1vZGlmeSB0aGUgcHJvdmlkZWQgYnVmZmVycy4gRG9pbmcKLSAgICogc28gbWF5IHJl
c3VsdCBpbiBjb3JydXB0ZWQgZGF0YSwgd2hpY2ggd291bGQgYmUgZGlmZmljdWx0IHRvIGRlYnVn
LgotICAgKgotICAgKiBAcGFyYW0gYnl0ZU91dHB1dCB0aGUgb3V0cHV0IHRhcmdldCBmb3IgZW5j
b2RlZCBieXRlcy4KLSAgICogQHBhcmFtIGJ1ZmZlclNpemUgdGhlIHNpemUgb2YgdGhlIGludGVy
bmFsIHNjcmF0Y2ggYnVmZmVyIHRvIGJlIHVzZWQgZm9yIHN0cmluZyBlbmNvZGluZy4KLSAgICog
U2V0dGluZyB0aGlzIHRvIHtAY29kZSAwfSB3aWxsIGRpc2FibGUgYnVmZmVyaW5nLCByZXF1aXJp
bmcgYW4gYWxsb2NhdGlvbiBmb3IgZWFjaCBlbmNvZGVkCi0gICAqIHN0cmluZy4KLSAgICovCi0g
IHN0YXRpYyBDb2RlZE91dHB1dFN0cmVhbSBuZXdJbnN0YW5jZShCeXRlT3V0cHV0IGJ5dGVPdXRw
dXQsIGludCBidWZmZXJTaXplKSB7Ci0gICAgaWYgKGJ1ZmZlclNpemUgPCAwKSB7Ci0gICAgICB0
aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJidWZmZXJTaXplIG11c3QgYmUgcG9z
aXRpdmUiKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IEJ5dGVPdXRwdXRFbmNvZGVyKGJ5dGVP
dXRwdXQsIGJ1ZmZlclNpemUpOwotICB9Ci0KLSAgLy8gRGlzYWxsb3cgY29uc3RydWN0aW9uIG91
dHNpZGUgb2YgdGhpcyBjbGFzcy4KLSAgcHJpdmF0ZSBDb2RlZE91dHB1dFN0cmVhbSgpIHsKLSAg
fQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLyoqIEVuY29kZSBhbmQgd3JpdGUgYSB0YWcuICovCi0g
IC8vIEFic3RyYWN0IHRvIGF2b2lkIG92ZXJoZWFkIG9mIGFkZGl0aW9uYWwgdmlydHVhbCBtZXRo
b2QgY2FsbHMuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlVGFnKGludCBmaWVsZE51bWJl
ciwgaW50IHdpcmVUeXBlKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLyoqIFdyaXRlIGFuIHtA
Y29kZSBpbnQzMn0gZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJlYW0uICovCi0gIC8v
IEFic3RyYWN0IHRvIGF2b2lkIG92ZXJoZWFkIG9mIGFkZGl0aW9uYWwgdmlydHVhbCBtZXRob2Qg
Y2FsbHMuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlSW50MzIoaW50IGZpZWxkTnVtYmVy
LCBpbnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAvKiogV3JpdGUgYSB7QGNvZGUg
dWludDMyfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4gKi8KLSAgLy8gQWJz
dHJhY3QgdG8gYXZvaWQgb3ZlcmhlYWQgb2YgYWRkaXRpb25hbCB2aXJ0dWFsIG1ldGhvZCBjYWxs
cy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGVVSW50MzIoaW50IGZpZWxkTnVtYmVyLCBp
bnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAvKiogV3JpdGUgYSB7QGNvZGUgc2lu
dDMyfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGZp
bmFsIHZvaWQgd3JpdGVTSW50MzIoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBpbnQgdmFs
dWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgd3JpdGVVSW50MzIoZmllbGROdW1iZXIsIGVu
Y29kZVppZ1phZzMyKHZhbHVlKSk7Ci0gIH0KLQotICAvKiogV3JpdGUgYSB7QGNvZGUgZml4ZWQz
Mn0gZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJlYW0uICovCi0gIC8vIEFic3RyYWN0
IHRvIGF2b2lkIG92ZXJoZWFkIG9mIGFkZGl0aW9uYWwgdmlydHVhbCBtZXRob2QgY2FsbHMuCi0g
IHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlRml4ZWQzMihpbnQgZmllbGROdW1iZXIsIGludCB2
YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIC8qKiBXcml0ZSBhbiB7QGNvZGUgc2ZpeGVk
MzJ9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgZmlu
YWwgdm9pZCB3cml0ZVNGaXhlZDMyKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHZh
bHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlRml4ZWQzMihmaWVsZE51bWJlciwg
dmFsdWUpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGFuIHtAY29kZSBpbnQ2NH0gZmllbGQsIGluY2x1
ZGluZyB0YWcsIHRvIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlSW50
NjQoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBsb25nIHZhbHVlKSB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgIHdyaXRlVUludDY0KGZpZWxkTnVtYmVyLCB2YWx1ZSk7Ci0gIH0KLQotICAv
KiogV3JpdGUgYSB7QGNvZGUgdWludDY0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0
cmVhbS4gKi8KLSAgLy8gQWJzdHJhY3QgdG8gYXZvaWQgb3ZlcmhlYWQgb2YgYWRkaXRpb25hbCB2
aXJ0dWFsIG1ldGhvZCBjYWxscy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGVVSW50NjQo
aW50IGZpZWxkTnVtYmVyLCBsb25nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLyoq
IFdyaXRlIGFuIHtAY29kZSBzaW50NjR9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3Ry
ZWFtLiAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVNJbnQ2NChmaW5hbCBpbnQgZmllbGRO
dW1iZXIsIGZpbmFsIGxvbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgd3JpdGVV
SW50NjQoZmllbGROdW1iZXIsIGVuY29kZVppZ1phZzY0KHZhbHVlKSk7Ci0gIH0KLQotICAvKiog
V3JpdGUgYSB7QGNvZGUgZml4ZWQ2NH0gZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJl
YW0uICovCi0gIC8vIEFic3RyYWN0IHRvIGF2b2lkIG92ZXJoZWFkIG9mIGFkZGl0aW9uYWwgdmly
dHVhbCBtZXRob2QgY2FsbHMuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlRml4ZWQ2NChp
bnQgZmllbGROdW1iZXIsIGxvbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAvKiog
V3JpdGUgYW4ge0Bjb2RlIHNmaXhlZDY0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0
cmVhbS4gKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGVTRml4ZWQ2NChmaW5hbCBpbnQgZmll
bGROdW1iZXIsIGZpbmFsIGxvbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgd3Jp
dGVGaXhlZDY0KGZpZWxkTnVtYmVyLCB2YWx1ZSk7Ci0gIH0KLQotICAvKiogV3JpdGUgYSB7QGNv
ZGUgZmxvYXR9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJs
aWMgZmluYWwgdm9pZCB3cml0ZUZsb2F0KGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgZmxv
YXQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgd3JpdGVGaXhlZDMyKGZpZWxkTnVt
YmVyLCBGbG9hdC5mbG9hdFRvUmF3SW50Qml0cyh2YWx1ZSkpOwotICB9Ci0KLSAgLyoqIFdyaXRl
IGEge0Bjb2RlIGRvdWJsZX0gZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJlYW0uICov
Ci0gIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlRG91YmxlKGZpbmFsIGludCBmaWVsZE51bWJlciwg
ZmluYWwgZG91YmxlIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlRml4ZWQ2
NChmaWVsZE51bWJlciwgRG91YmxlLmRvdWJsZVRvUmF3TG9uZ0JpdHModmFsdWUpKTsKLSAgfQot
Ci0gIC8qKiBXcml0ZSBhIHtAY29kZSBib29sfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhl
IHN0cmVhbS4gKi8KLSAgLy8gQWJzdHJhY3QgdG8gYXZvaWQgb3ZlcmhlYWQgb2YgYWRkaXRpb25h
bCB2aXJ0dWFsIG1ldGhvZCBjYWxscy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGVCb29s
KGludCBmaWVsZE51bWJlciwgYm9vbGVhbiB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0g
IC8qKgotICAgKiBXcml0ZSBhbiBlbnVtIGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3Ry
ZWFtLiBUaGUgcHJvdmlkZWQgdmFsdWUgaXMgdGhlIG51bWVyaWMKLSAgICogdmFsdWUgdXNlZCB0
byByZXByZXNlbnQgdGhlIGVudW0gdmFsdWUgb24gdGhlIHdpcmUgKG5vdCB0aGUgZW51bSBvcmRp
bmFsIHZhbHVlKS4KLSAgICovCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlRW51bShmaW5hbCBp
bnQgZmllbGROdW1iZXIsIGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAg
ICB3cml0ZUludDMyKGZpZWxkTnVtYmVyLCB2YWx1ZSk7Ci0gIH0KLQotICAvKiogV3JpdGUgYSB7
QGNvZGUgc3RyaW5nfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4gKi8KLSAg
Ly8gQWJzdHJhY3QgdG8gYXZvaWQgb3ZlcmhlYWQgb2YgYWRkaXRpb25hbCB2aXJ0dWFsIG1ldGhv
ZCBjYWxscy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGVTdHJpbmcoaW50IGZpZWxkTnVt
YmVyLCBTdHJpbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAvKiogV3JpdGUgYSB7
QGNvZGUgYnl0ZXN9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3RyZWFtLiAqLwotICAv
LyBBYnN0cmFjdCB0byBhdm9pZCBvdmVyaGVhZCBvZiBhZGRpdGlvbmFsIHZpcnR1YWwgbWV0aG9k
IGNhbGxzLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB3cml0ZUJ5dGVzKGludCBmaWVsZE51bWJl
ciwgQnl0ZVN0cmluZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIC8qKiBXcml0ZSBh
IHtAY29kZSBieXRlc30gZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJlYW0uICovCi0g
IC8vIEFic3RyYWN0IHRvIGF2b2lkIG92ZXJoZWFkIG9mIGFkZGl0aW9uYWwgdmlydHVhbCBtZXRo
b2QgY2FsbHMuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlQnl0ZUFycmF5KGludCBmaWVs
ZE51bWJlciwgYnl0ZVtdIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLyoqIFdyaXRl
IGEge0Bjb2RlIGJ5dGVzfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4gKi8K
LSAgLy8gQWJzdHJhY3QgdG8gYXZvaWQgb3ZlcmhlYWQgb2YgYWRkaXRpb25hbCB2aXJ0dWFsIG1l
dGhvZCBjYWxscy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGVCeXRlQXJyYXkoaW50IGZp
ZWxkTnVtYmVyLCBieXRlW10gdmFsdWUsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCi0gICAgICB0
aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFdyaXRlIGEge0Bjb2RlIGJ5dGVzfSBm
aWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4KLSAgICogVGhpcyBtZXRob2Qgd2ls
bCB3cml0ZSBhbGwgY29udGVudCBvZiB0aGUgQnl0ZUJ1ZmZlciByZWdhcmRsZXNzIG9mIHRoZQot
ICAgKiBjdXJyZW50IHBvc2l0aW9uIGFuZCBsaW1pdCAoaS5lLiwgdGhlIG51bWJlciBvZiBieXRl
cyB0byBiZSB3cml0dGVuIGlzCi0gICAqIHZhbHVlLmNhcGFjaXR5KCksIG5vdCB2YWx1ZS5yZW1h
aW5pbmcoKSkuIEZ1cnRoZXJtb3JlLCB0aGlzIG1ldGhvZCBkb2Vzbid0Ci0gICAqIGFsdGVyIHRo
ZSBzdGF0ZSBvZiB0aGUgcGFzc2VkLWluIEJ5dGVCdWZmZXIuIEl0cyBwb3NpdGlvbiwgbGltaXQs
IG1hcmssCi0gICAqIGV0Yy4gd2lsbCByZW1haW4gdW5jaGFuZ2VkLiBJZiB5b3Ugb25seSB3YW50
IHRvIHdyaXRlIHRoZSByZW1haW5pbmcgYnl0ZXMKLSAgICogb2YgYSBCeXRlQnVmZmVyLCB5b3Ug
Y2FuIGNhbGwKLSAgICoge0Bjb2RlIHdyaXRlQnl0ZUJ1ZmZlcihmaWVsZE51bWJlciwgYnl0ZUJ1
ZmZlci5zbGljZSgpKX0uCi0gICAqLwotICAvLyBBYnN0cmFjdCB0byBhdm9pZCBvdmVyaGVhZCBv
ZiBhZGRpdGlvbmFsIHZpcnR1YWwgbWV0aG9kIGNhbGxzLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9p
ZCB3cml0ZUJ5dGVCdWZmZXIoaW50IGZpZWxkTnVtYmVyLCBCeXRlQnVmZmVyIHZhbHVlKSB0aHJv
d3MgSU9FeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFdyaXRlIGEgc2luZ2xlIGJ5dGUuCi0gICAq
LwotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVJhd0J5dGUoZmluYWwgYnl0ZSB2YWx1ZSkgdGhy
b3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZSh2YWx1ZSk7Ci0gIH0KLQotICAvKiogV3JpdGUg
YSBzaW5nbGUgYnl0ZSwgcmVwcmVzZW50ZWQgYnkgYW4gaW50ZWdlciB2YWx1ZS4gKi8KLSAgcHVi
bGljIGZpbmFsIHZvaWQgd3JpdGVSYXdCeXRlKGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICB3cml0ZSgoYnl0ZSkgdmFsdWUpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGFu
IGFycmF5IG9mIGJ5dGVzLiAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVJhd0J5dGVzKGZp
bmFsIGJ5dGVbXSB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZSh2YWx1ZSwg
MCwgdmFsdWUubGVuZ3RoKTsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSBwYXJ0IG9mIGFuIGFy
cmF5IG9mIGJ5dGVzLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGVSYXdCeXRlcyhm
aW5hbCBieXRlW10gdmFsdWUsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgd3JpdGUodmFsdWUsIG9mZnNldCwgbGVuZ3RoKTsKLSAgfQotCi0gIC8qKiBX
cml0ZSBhIGJ5dGUgc3RyaW5nLiAqLwotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVJhd0J5dGVz
KGZpbmFsIEJ5dGVTdHJpbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgdmFsdWUu
d3JpdGVUbyh0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSBhIEJ5dGVCdWZmZXIuIFRo
aXMgbWV0aG9kIHdpbGwgd3JpdGUgYWxsIGNvbnRlbnQgb2YgdGhlIEJ5dGVCdWZmZXIKLSAgICog
cmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgbGltaXQgKGkuZS4sIHRoZSBu
dW1iZXIgb2YgYnl0ZXMKLSAgICogdG8gYmUgd3JpdHRlbiBpcyB2YWx1ZS5jYXBhY2l0eSgpLCBu
b3QgdmFsdWUucmVtYWluaW5nKCkpLiBGdXJ0aGVybW9yZSwKLSAgICogdGhpcyBtZXRob2QgZG9l
c24ndCBhbHRlciB0aGUgc3RhdGUgb2YgdGhlIHBhc3NlZC1pbiBCeXRlQnVmZmVyLiBJdHMKLSAg
ICogcG9zaXRpb24sIGxpbWl0LCBtYXJrLCBldGMuIHdpbGwgcmVtYWluIHVuY2hhbmdlZC4gSWYg
eW91IG9ubHkgd2FudCB0bwotICAgKiB3cml0ZSB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGEgQnl0
ZUJ1ZmZlciwgeW91IGNhbiBjYWxsCi0gICAqIHtAY29kZSB3cml0ZVJhd0J5dGVzKGJ5dGVCdWZm
ZXIuc2xpY2UoKSl9LgotICAgKi8KLSAgLy8gQWJzdHJhY3QgdG8gYXZvaWQgb3ZlcmhlYWQgb2Yg
YWRkaXRpb25hbCB2aXJ0dWFsIG1ldGhvZCBjYWxscy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQg
d3JpdGVSYXdCeXRlcyhmaW5hbCBCeXRlQnVmZmVyIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb247
Ci0KLSAgLyoqIFdyaXRlIGFuIGVtYmVkZGVkIG1lc3NhZ2UgZmllbGQsIGluY2x1ZGluZyB0YWcs
IHRvIHRoZSBzdHJlYW0uICovCi0gIC8vIEFic3RyYWN0IHRvIGF2b2lkIG92ZXJoZWFkIG9mIGFk
ZGl0aW9uYWwgdmlydHVhbCBtZXRob2QgY2FsbHMuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdy
aXRlTWVzc2FnZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIE1lc3NhZ2VMaXRlIHZhbHVl
KQotICAgICAgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBXcml0ZSBhIE1lc3Nh
Z2VTZXQgZXh0ZW5zaW9uIGZpZWxkIHRvIHRoZSBzdHJlYW0uICBGb3IgaGlzdG9yaWNhbCByZWFz
b25zLAotICAgKiB0aGUgd2lyZSBmb3JtYXQgZGlmZmVycyBmcm9tIG5vcm1hbCBmaWVsZHMuCi0g
ICAqLwotICAvLyBBYnN0cmFjdCB0byBhdm9pZCBvdmVyaGVhZCBvZiBhZGRpdGlvbmFsIHZpcnR1
YWwgbWV0aG9kIGNhbGxzLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB3cml0ZU1lc3NhZ2VTZXRF
eHRlbnNpb24oZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBNZXNzYWdlTGl0ZSB2YWx1ZSkK
LSAgICAgIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAvKioKLSAgICogV3JpdGUgYW4gdW5wYXJz
ZWQgTWVzc2FnZVNldCBleHRlbnNpb24gZmllbGQgdG8gdGhlIHN0cmVhbS4gIEZvcgotICAgKiBo
aXN0b3JpY2FsIHJlYXNvbnMsIHRoZSB3aXJlIGZvcm1hdCBkaWZmZXJzIGZyb20gbm9ybWFsIGZp
ZWxkcy4KLSAgICovCi0gIC8vIEFic3RyYWN0IHRvIGF2b2lkIG92ZXJoZWFkIG9mIGFkZGl0aW9u
YWwgdmlydHVhbCBtZXRob2QgY2FsbHMuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlUmF3
TWVzc2FnZVNldEV4dGVuc2lvbihmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIEJ5dGVTdHJp
bmcgdmFsdWUpCi0gICAgICB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAvKiogV3JpdGUgYW4ge0Bjb2RlIGludDMyfSBmaWVsZCB0byB0aGUgc3RyZWFtLiAqLwotICAv
LyBBYnN0cmFjdCB0byBhdm9pZCBvdmVyaGVhZCBvZiBhZGRpdGlvbmFsIHZpcnR1YWwgbWV0aG9k
IGNhbGxzLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB3cml0ZUludDMyTm9UYWcoZmluYWwgaW50
IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLyoqIFdyaXRlIGEge0Bjb2RlIHVpbnQz
Mn0gZmllbGQgdG8gdGhlIHN0cmVhbS4gKi8KLSAgLy8gQWJzdHJhY3QgdG8gYXZvaWQgb3Zlcmhl
YWQgb2YgYWRkaXRpb25hbCB2aXJ0dWFsIG1ldGhvZCBjYWxscy4KLSAgcHVibGljIGFic3RyYWN0
IHZvaWQgd3JpdGVVSW50MzJOb1RhZyhpbnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQot
ICAvKiogV3JpdGUgYSB7QGNvZGUgc2ludDMyfSBmaWVsZCB0byB0aGUgc3RyZWFtLiAqLwotICBw
dWJsaWMgZmluYWwgdm9pZCB3cml0ZVNJbnQzMk5vVGFnKGZpbmFsIGludCB2YWx1ZSkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVVJbnQzMk5vVGFnKGVuY29kZVppZ1phZzMyKHZhbHVl
KSk7Ci0gIH0KLQotICAvKiogV3JpdGUgYSB7QGNvZGUgZml4ZWQzMn0gZmllbGQgdG8gdGhlIHN0
cmVhbS4gKi8KLSAgLy8gQWJzdHJhY3QgdG8gYXZvaWQgb3ZlcmhlYWQgb2YgYWRkaXRpb25hbCB2
aXJ0dWFsIG1ldGhvZCBjYWxscy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGVGaXhlZDMy
Tm9UYWcoaW50IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLyoqIFdyaXRlIGEge0Bj
b2RlIHNmaXhlZDMyfSBmaWVsZCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgZmluYWwgdm9p
ZCB3cml0ZVNGaXhlZDMyTm9UYWcoZmluYWwgaW50IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIHdyaXRlRml4ZWQzMk5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBhbiB7
QGNvZGUgaW50NjR9IGZpZWxkIHRvIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyBmaW5hbCB2b2lk
IHdyaXRlSW50NjROb1RhZyhmaW5hbCBsb25nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewot
ICAgIHdyaXRlVUludDY0Tm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGEge0Bjb2Rl
IHVpbnQ2NH0gZmllbGQgdG8gdGhlIHN0cmVhbS4gKi8KLSAgLy8gQWJzdHJhY3QgdG8gYXZvaWQg
b3ZlcmhlYWQgb2YgYWRkaXRpb25hbCB2aXJ0dWFsIG1ldGhvZCBjYWxscy4KLSAgcHVibGljIGFi
c3RyYWN0IHZvaWQgd3JpdGVVSW50NjROb1RhZyhsb25nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRp
b247Ci0KLSAgLyoqIFdyaXRlIGEge0Bjb2RlIHNpbnQ2NH0gZmllbGQgdG8gdGhlIHN0cmVhbS4g
Ki8KLSAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGVTSW50NjROb1RhZyhmaW5hbCBsb25nIHZhbHVl
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlVUludDY0Tm9UYWcoZW5jb2RlWmlnWmFn
NjQodmFsdWUpKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBhIHtAY29kZSBmaXhlZDY0fSBmaWVsZCB0
byB0aGUgc3RyZWFtLiAqLwotICAvLyBBYnN0cmFjdCB0byBhdm9pZCBvdmVyaGVhZCBvZiBhZGRp
dGlvbmFsIHZpcnR1YWwgbWV0aG9kIGNhbGxzLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB3cml0
ZUZpeGVkNjROb1RhZyhsb25nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLyoqIFdy
aXRlIGEge0Bjb2RlIHNmaXhlZDY0fSBmaWVsZCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMg
ZmluYWwgdm9pZCB3cml0ZVNGaXhlZDY0Tm9UYWcoZmluYWwgbG9uZyB2YWx1ZSkgdGhyb3dzIElP
RXhjZXB0aW9uIHsKLSAgICB3cml0ZUZpeGVkNjROb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKiog
V3JpdGUgYSB7QGNvZGUgZmxvYXR9IGZpZWxkIHRvIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyBm
aW5hbCB2b2lkIHdyaXRlRmxvYXROb1RhZyhmaW5hbCBmbG9hdCB2YWx1ZSkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICB3cml0ZUZpeGVkMzJOb1RhZyhGbG9hdC5mbG9hdFRvUmF3SW50Qml0cyh2
YWx1ZSkpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGEge0Bjb2RlIGRvdWJsZX0gZmllbGQgdG8gdGhl
IHN0cmVhbS4gKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGVEb3VibGVOb1RhZyhmaW5hbCBk
b3VibGUgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgd3JpdGVGaXhlZDY0Tm9UYWco
RG91YmxlLmRvdWJsZVRvUmF3TG9uZ0JpdHModmFsdWUpKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBh
IHtAY29kZSBib29sfSBmaWVsZCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgZmluYWwgdm9p
ZCB3cml0ZUJvb2xOb1RhZyhmaW5hbCBib29sZWFuIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIHdyaXRlKChieXRlKSAodmFsdWUgPyAxIDogMCkpOwotICB9Ci0KLSAgLyoqCi0gICAq
IFdyaXRlIGFuIGVudW0gZmllbGQgdG8gdGhlIHN0cmVhbS4gVGhlIHByb3ZpZGVkIHZhbHVlIGlz
IHRoZSBudW1lcmljCi0gICAqIHZhbHVlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBlbnVtIHZhbHVl
IG9uIHRoZSB3aXJlIChub3QgdGhlIGVudW0gb3JkaW5hbCB2YWx1ZSkuCi0gICAqLwotICBwdWJs
aWMgZmluYWwgdm9pZCB3cml0ZUVudW1Ob1RhZyhmaW5hbCBpbnQgdmFsdWUpIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgd3JpdGVJbnQzMk5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKiBXcml0
ZSBhIHtAY29kZSBzdHJpbmd9IGZpZWxkIHRvIHRoZSBzdHJlYW0uICovCi0gIC8vIFRPRE8oZHdl
aXMpOiBEb2N1bWVudCBiZWhhdmlvciBvbiBpbGwtZm9ybWVkIFVURi0xNiBpbnB1dC4KLSAgLy8g
QWJzdHJhY3QgdG8gYXZvaWQgb3ZlcmhlYWQgb2YgYWRkaXRpb25hbCB2aXJ0dWFsIG1ldGhvZCBj
YWxscy4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGVTdHJpbmdOb1RhZyhTdHJpbmcgdmFs
dWUpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAvKiogV3JpdGUgYSB7QGNvZGUgYnl0ZXN9IGZp
ZWxkIHRvIHRoZSBzdHJlYW0uICovCi0gIC8vIEFic3RyYWN0IHRvIGF2b2lkIG92ZXJoZWFkIG9m
IGFkZGl0aW9uYWwgdmlydHVhbCBtZXRob2QgY2FsbHMuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lk
IHdyaXRlQnl0ZXNOb1RhZyhmaW5hbCBCeXRlU3RyaW5nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRp
b247Ci0KLSAgLyoqIFdyaXRlIGEge0Bjb2RlIGJ5dGVzfSBmaWVsZCB0byB0aGUgc3RyZWFtLiAq
LwotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZUJ5dGVBcnJheU5vVGFnKGZpbmFsIGJ5dGVbXSB2
YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZUJ5dGVBcnJheU5vVGFnKHZhbHVl
LCAwLCB2YWx1ZS5sZW5ndGgpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGFuIGVtYmVkZGVkIG1lc3Nh
Z2UgZmllbGQgdG8gdGhlIHN0cmVhbS4gKi8KLSAgLy8gQWJzdHJhY3QgdG8gYXZvaWQgb3Zlcmhl
YWQgb2YgYWRkaXRpb25hbCB2aXJ0dWFsIG1ldGhvZCBjYWxscy4KLSAgcHVibGljIGFic3RyYWN0
IHZvaWQgd3JpdGVNZXNzYWdlTm9UYWcoZmluYWwgTWVzc2FnZUxpdGUgdmFsdWUpIHRocm93cyBJ
T0V4Y2VwdGlvbjsKLQotICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgQEV4cGVyaW1lbnRhbEFwaQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGUoYnl0ZSB2YWx1ZSkgdGhyb3dzIElP
RXhjZXB0aW9uOwotCi0gIEBFeHBlcmltZW50YWxBcGkKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBh
YnN0cmFjdCB2b2lkIHdyaXRlKGJ5dGVbXSB2YWx1ZSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkg
dGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIEBFeHBlcmltZW50YWxBcGkKLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlTGF6eShieXRlW10gdmFsdWUsIGludCBvZmZzZXQs
IGludCBsZW5ndGgpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IGFic3RyYWN0IHZvaWQgd3JpdGUoQnl0ZUJ1ZmZlciB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9u
OwotCi0gIEBFeHBlcmltZW50YWxBcGkKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBhYnN0cmFjdCB2
b2lkIHdyaXRlTGF6eShCeXRlQnVmZmVyIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAg
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAgKiB7QGNv
ZGUgaW50MzJ9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBp
bnQgY29tcHV0ZUludDMyU2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGludCB2YWx1
ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKyBjb21wdXRlSW50
MzJTaXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJl
ciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUg
dWludDMyfSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50
IGNvbXB1dGVVSW50MzJTaXplKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHZhbHVl
KSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSArIGNvbXB1dGVVSW50
MzJTaXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJl
ciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICoge0Bjb2Rl
IHNpbnQzMn0gZmllbGQsIGluY2x1ZGluZyB0YWcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGlu
dCBjb21wdXRlU0ludDMyU2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGludCB2YWx1
ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKyBjb21wdXRlU0lu
dDMyU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1i
ZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2Rl
IGZpeGVkMzJ9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBp
bnQgY29tcHV0ZUZpeGVkMzJTaXplKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHZh
bHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSArIGNvbXB1dGVG
aXhlZDMyU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBu
dW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGFuCi0gICAqIHtA
Y29kZSBzZml4ZWQzMn0gZmllbGQsIGluY2x1ZGluZyB0YWcuCi0gICAqLwotICBwdWJsaWMgc3Rh
dGljIGludCBjb21wdXRlU0ZpeGVkMzJTaXplKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwg
aW50IHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSArIGNv
bXB1dGVTRml4ZWQzMlNpemVOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0
ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgot
ICAgKiB7QGNvZGUgaW50NjR9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGlj
IHN0YXRpYyBpbnQgY29tcHV0ZUludDY0U2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFs
IGxvbmcgdmFsdWUpIHsKLSAgICByZXR1cm4gY29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsg
Y29tcHV0ZUludDY0U2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRl
IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAg
ICoge0Bjb2RlIHVpbnQ2NH0gZmllbGQsIGluY2x1ZGluZyB0YWcuCi0gICAqLwotICBwdWJsaWMg
c3RhdGljIGludCBjb21wdXRlVUludDY0U2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFs
IGxvbmcgdmFsdWUpIHsKLSAgICByZXR1cm4gY29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsg
Y29tcHV0ZVVJbnQ2NFNpemVOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0
ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgot
ICAgKiB7QGNvZGUgc2ludDY0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4KLSAgICovCi0gIHB1Ymxp
YyBzdGF0aWMgaW50IGNvbXB1dGVTSW50NjRTaXplKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmlu
YWwgbG9uZyB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6ZShmaWVsZE51bWJlcikg
KyBjb21wdXRlU0ludDY0U2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21w
dXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEK
LSAgICoge0Bjb2RlIGZpeGVkNjR9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyBpbnQgY29tcHV0ZUZpeGVkNjRTaXplKGZpbmFsIGludCBmaWVsZE51bWJlciwg
ZmluYWwgbG9uZyB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6ZShmaWVsZE51bWJl
cikgKyBjb21wdXRlRml4ZWQ2NFNpemVOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICog
Q29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29k
ZSBhbgotICAgKiB7QGNvZGUgc2ZpeGVkNjR9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8K
LSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVNGaXhlZDY0U2l6ZShmaW5hbCBpbnQgZmllbGRO
dW1iZXIsIGZpbmFsIGxvbmcgdmFsdWUpIHsKLSAgICByZXR1cm4gY29tcHV0ZVRhZ1NpemUoZmll
bGROdW1iZXIpICsgY29tcHV0ZVNGaXhlZDY0U2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8q
KgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQg
dG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGZsb2F0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVGbG9hdFNpemUoZmluYWwgaW50IGZpZWxk
TnVtYmVyLCBmaW5hbCBmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6ZShm
aWVsZE51bWJlcikgKyBjb21wdXRlRmxvYXRTaXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0
byBlbmNvZGUgYQotICAgKiB7QGNvZGUgZG91YmxlfSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVEb3VibGVTaXplKGZpbmFsIGludCBmaWVs
ZE51bWJlciwgZmluYWwgZG91YmxlIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXpl
KGZpZWxkTnVtYmVyKSArIGNvbXB1dGVEb3VibGVTaXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAg
LyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRl
ZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgYm9vbH0gZmllbGQsIGluY2x1ZGluZyB0YWcuCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRlQm9vbFNpemUoZmluYWwgaW50IGZpZWxk
TnVtYmVyLCBmaW5hbCBib29sZWFuIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXpl
KGZpZWxkTnVtYmVyKSArIGNvbXB1dGVCb29sU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8q
KgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQg
dG8gZW5jb2RlIGFuCi0gICAqIGVudW0gZmllbGQsIGluY2x1ZGluZyB0YWcuIFRoZSBwcm92aWRl
ZCB2YWx1ZSBpcyB0aGUgbnVtZXJpYwotICAgKiB2YWx1ZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUg
ZW51bSB2YWx1ZSBvbiB0aGUgd2lyZSAobm90IHRoZSBlbnVtIG9yZGluYWwgdmFsdWUpLgotICAg
Ki8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUVudW1TaXplKGZpbmFsIGludCBmaWVsZE51
bWJlciwgZmluYWwgaW50IHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKGZpZWxk
TnVtYmVyKSArIGNvbXB1dGVFbnVtU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAg
KiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5j
b2RlIGEKLSAgICoge0Bjb2RlIHN0cmluZ30gZmllbGQsIGluY2x1ZGluZyB0YWcuCi0gICAqLwot
ICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRlU3RyaW5nU2l6ZShmaW5hbCBpbnQgZmllbGROdW1i
ZXIsIGZpbmFsIFN0cmluZyB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6ZShmaWVs
ZE51bWJlcikgKyBjb21wdXRlU3RyaW5nU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8g
ZW5jb2RlIGEKLSAgICoge0Bjb2RlIGJ5dGVzfSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVCeXRlc1NpemUoZmluYWwgaW50IGZpZWxkTnVt
YmVyLCBmaW5hbCBCeXRlU3RyaW5nIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXpl
KGZpZWxkTnVtYmVyKSArIGNvbXB1dGVCeXRlc1NpemVOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAv
KioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVk
IHRvIGVuY29kZSBhCi0gICAqIHtAY29kZSBieXRlc30gZmllbGQsIGluY2x1ZGluZyB0YWcuCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRlQnl0ZUFycmF5U2l6ZShmaW5hbCBpbnQg
ZmllbGROdW1iZXIsIGZpbmFsIGJ5dGVbXSB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFn
U2l6ZShmaWVsZE51bWJlcikgKyBjb21wdXRlQnl0ZUFycmF5U2l6ZU5vVGFnKHZhbHVlKTsKLSAg
fQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBi
ZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGJ5dGVzfSBmaWVsZCwgaW5jbHVkaW5n
IHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVCeXRlQnVmZmVyU2l6ZShm
aW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIEJ5dGVCdWZmZXIgdmFsdWUpIHsKLSAgICByZXR1
cm4gY29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsgY29tcHV0ZUJ5dGVCdWZmZXJTaXplTm9U
YWcodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRl
cyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICogZW1iZWRkZWQgbWVzc2Fn
ZSBpbiBsYXp5IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBp
bnQgY29tcHV0ZUxhenlGaWVsZFNpemUoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBMYXp5
RmllbGRMaXRlIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVy
KSArIGNvbXB1dGVMYXp5RmllbGRTaXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAq
IENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNv
ZGUgYW4KLSAgICogZW1iZWRkZWQgbWVzc2FnZSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVNZXNzYWdlU2l6ZShmaW5hbCBpbnQgZmllbGRO
dW1iZXIsIGZpbmFsIE1lc3NhZ2VMaXRlIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdT
aXplKGZpZWxkTnVtYmVyKSArIGNvbXB1dGVNZXNzYWdlU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBu
ZWVkZWQgdG8gZW5jb2RlIGEKLSAgICogTWVzc2FnZVNldCBleHRlbnNpb24gdG8gdGhlIHN0cmVh
bS4gIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsCi0gICAqIHRoZSB3aXJlIGZvcm1hdCBkaWZmZXJz
IGZyb20gbm9ybWFsIGZpZWxkcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVN
ZXNzYWdlU2V0RXh0ZW5zaW9uU2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIE1lc3Nh
Z2VMaXRlIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKFdpcmVGb3JtYXQuTUVT
U0FHRV9TRVRfSVRFTSkgKiAyCi0gICAgICAgICsgY29tcHV0ZVVJbnQzMlNpemUoV2lyZUZvcm1h
dC5NRVNTQUdFX1NFVF9UWVBFX0lELCBmaWVsZE51bWJlcikKLSAgICAgICAgKyBjb21wdXRlTWVz
c2FnZVNpemUoV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9NRVNTQUdFLCB2YWx1ZSk7Ci0gIH0KLQot
ICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVl
ZGVkIHRvIGVuY29kZSBhbgotICAgKiB1bnBhcnNlZCBNZXNzYWdlU2V0IGV4dGVuc2lvbiBmaWVs
ZCB0byB0aGUgc3RyZWFtLiAgRm9yCi0gICAqIGhpc3RvcmljYWwgcmVhc29ucywgdGhlIHdpcmUg
Zm9ybWF0IGRpZmZlcnMgZnJvbSBub3JtYWwgZmllbGRzLgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyBpbnQgY29tcHV0ZVJhd01lc3NhZ2VTZXRFeHRlbnNpb25TaXplKAotICAgICAgZmluYWwgaW50
IGZpZWxkTnVtYmVyLCBmaW5hbCBCeXRlU3RyaW5nIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1
dGVUYWdTaXplKFdpcmVGb3JtYXQuTUVTU0FHRV9TRVRfSVRFTSkgKiAyCi0gICAgICAgICsgY29t
cHV0ZVVJbnQzMlNpemUoV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9UWVBFX0lELCBmaWVsZE51bWJl
cikKLSAgICAgICAgKyBjb21wdXRlQnl0ZXNTaXplKFdpcmVGb3JtYXQuTUVTU0FHRV9TRVRfTUVT
U0FHRSwgdmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBi
eXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICogbGF6aWx5IHBhcnNl
ZCBNZXNzYWdlU2V0IGV4dGVuc2lvbiBmaWVsZCB0byB0aGUgc3RyZWFtLiAgRm9yCi0gICAqIGhp
c3RvcmljYWwgcmVhc29ucywgdGhlIHdpcmUgZm9ybWF0IGRpZmZlcnMgZnJvbSBub3JtYWwgZmll
bGRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUxhenlGaWVsZE1lc3NhZ2VT
ZXRFeHRlbnNpb25TaXplKAotICAgICAgZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBMYXp5
RmllbGRMaXRlIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKFdpcmVGb3JtYXQu
TUVTU0FHRV9TRVRfSVRFTSkgKiAyCi0gICAgICAgICsgY29tcHV0ZVVJbnQzMlNpemUoV2lyZUZv
cm1hdC5NRVNTQUdFX1NFVF9UWVBFX0lELCBmaWVsZE51bWJlcikKLSAgICAgICAgKyBjb21wdXRl
TGF6eUZpZWxkU2l6ZShXaXJlRm9ybWF0Lk1FU1NBR0VfU0VUX01FU1NBR0UsIHZhbHVlKTsKLSAg
fQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLyoqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0
aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYSB0YWcuICovCi0gIHB1YmxpYyBzdGF0aWMg
aW50IGNvbXB1dGVUYWdTaXplKGZpbmFsIGludCBmaWVsZE51bWJlcikgewotICAgIHJldHVybiBj
b21wdXRlVUludDMyU2l6ZU5vVGFnKFdpcmVGb3JtYXQubWFrZVRhZyhmaWVsZE51bWJlciwgMCkp
OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdv
dWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICoge0Bjb2RlIGludDMyfSBmaWVsZCwgaW5j
bHVkaW5nIHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVJbnQzMlNpemVO
b1RhZyhmaW5hbCBpbnQgdmFsdWUpIHsKLSAgICBpZiAodmFsdWUgPj0gMCkgewotICAgICAgcmV0
dXJuIGNvbXB1dGVVSW50MzJTaXplTm9UYWcodmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAv
LyBNdXN0IHNpZ24tZXh0ZW5kLgotICAgICAgcmV0dXJuIE1BWF9WQVJJTlRfU0laRTsKLSAgICB9
Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291
bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhCi0gICAqIHtAY29kZSB1aW50MzJ9IGZpZWxkLgotICAg
Ki8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVVJbnQzMlNpemVOb1RhZyhmaW5hbCBpbnQg
dmFsdWUpIHsKLSAgICBpZiAoKHZhbHVlICYgKH4wIDw8ICA3KSkgPT0gMCkgewotICAgICAgcmV0
dXJuIDE7Ci0gICAgfQotICAgIGlmICgodmFsdWUgJiAofjAgPDwgMTQpKSA9PSAwKSB7Ci0gICAg
ICByZXR1cm4gMjsKLSAgICB9Ci0gICAgaWYgKCh2YWx1ZSAmICh+MCA8PCAyMSkpID09IDApIHsK
LSAgICAgIHJldHVybiAzOwotICAgIH0KLSAgICBpZiAoKHZhbHVlICYgKH4wIDw8IDI4KSkgPT0g
MCkgewotICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIHJldHVybiA1OwotICB9Ci0KLSAgLyoq
Ci0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0
byBlbmNvZGUgYW4KLSAgICoge0Bjb2RlIHNpbnQzMn0gZmllbGQuCi0gICAqLwotICBwdWJsaWMg
c3RhdGljIGludCBjb21wdXRlU0ludDMyU2l6ZU5vVGFnKGZpbmFsIGludCB2YWx1ZSkgewotICAg
IHJldHVybiBjb21wdXRlVUludDMyU2l6ZU5vVGFnKGVuY29kZVppZ1phZzMyKHZhbHVlKSk7Ci0g
IH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQg
YmUgbmVlZGVkIHRvIGVuY29kZSBhCi0gICAqIHtAY29kZSBmaXhlZDMyfSBmaWVsZC4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVGaXhlZDMyU2l6ZU5vVGFnKEBTdXBwcmVzc1dh
cm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBpbnQgdW51c2VkKSB7Ci0gICAgcmV0dXJuIEZJWEVEXzMy
X1NJWkU7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRo
YXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAgKiB7QGNvZGUgc2ZpeGVkMzJ9IGZp
ZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVNGaXhlZDMyU2l6ZU5vVGFn
KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBpbnQgdW51c2VkKSB7Ci0gICAgcmV0
dXJuIEZJWEVEXzMyX1NJWkU7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVy
IG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAgKiB7QGNvZGUg
aW50NjR9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQg
Y29tcHV0ZUludDY0U2l6ZU5vVGFnKGZpbmFsIGxvbmcgdmFsdWUpIHsKLSAgICByZXR1cm4gY29t
cHV0ZVVJbnQ2NFNpemVOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0
aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhCi0gICAq
IHtAY29kZSB1aW50NjR9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBpbnQgY29tcHV0ZVVJbnQ2NFNpemVOb1RhZyhsb25nIHZhbHVlKSB7Ci0gICAgLy8gaGFu
ZGxlIHR3byBwb3B1bGFyIHNwZWNpYWwgY2FzZXMgdXAgZnJvbnQgLi4uCi0gICAgaWYgKCh2YWx1
ZSAmICh+MEwgPDwgNykpID09IDBMKSB7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgaWYg
KHZhbHVlIDwgMEwpIHsKLSAgICAgIHJldHVybiAxMDsKLSAgICB9Ci0gICAgLy8gLi4uIGxlYXZp
bmcgdXMgd2l0aCA4IHJlbWFpbmluZywgd2hpY2ggd2UgY2FuIGRpdmlkZSBhbmQgY29ucXVlcgot
ICAgIGludCBuID0gMjsKLSAgICBpZiAoKHZhbHVlICYgKH4wTCA8PCAzNSkpICE9IDBMKSB7Ci0g
ICAgICBuICs9IDQ7IHZhbHVlID4+Pj0gMjg7Ci0gICAgfQotICAgIGlmICgodmFsdWUgJiAofjBM
IDw8IDIxKSkgIT0gMEwpIHsKLSAgICAgIG4gKz0gMjsgdmFsdWUgPj4+PSAxNDsKLSAgICB9Ci0g
ICAgaWYgKCh2YWx1ZSAmICh+MEwgPDwgMTQpKSAhPSAwTCkgewotICAgICAgbiArPSAxOwotICAg
IH0KLSAgICByZXR1cm4gbjsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIg
b2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGFuCi0gICAqIHtAY29kZSBz
aW50NjR9IGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVNJbnQ2NFNp
emVOb1RhZyhmaW5hbCBsb25nIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVVSW50NjRTaXpl
Tm9UYWcoZW5jb2RlWmlnWmFnNjQodmFsdWUpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRl
IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAg
ICoge0Bjb2RlIGZpeGVkNjR9IGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29t
cHV0ZUZpeGVkNjRTaXplTm9UYWcoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIGxv
bmcgdW51c2VkKSB7Ci0gICAgcmV0dXJuIEZJWEVEXzY0X1NJWkU7Ci0gIH0KLQotICAvKioKLSAg
ICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVu
Y29kZSBhbgotICAgKiB7QGNvZGUgc2ZpeGVkNjR9IGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBpbnQgY29tcHV0ZVNGaXhlZDY0U2l6ZU5vVGFnKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVz
ZWQiKSBmaW5hbCBsb25nIHVudXNlZCkgewotICAgIHJldHVybiBGSVhFRF82NF9TSVpFOwotICB9
Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJl
IG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgZmxvYXR9IGZpZWxkLCBpbmNsdWRpbmcg
dGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUZsb2F0U2l6ZU5vVGFnKEBT
dXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBmbG9hdCB1bnVzZWQpIHsKLSAgICByZXR1
cm4gRklYRURfMzJfU0laRTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIg
b2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGRv
dWJsZX0gZmllbGQsIGluY2x1ZGluZyB0YWcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBj
b21wdXRlRG91YmxlU2l6ZU5vVGFnKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBk
b3VibGUgdW51c2VkKSB7Ci0gICAgcmV0dXJuIEZJWEVEXzY0X1NJWkU7Ci0gIH0KLQotICAvKioK
LSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRv
IGVuY29kZSBhCi0gICAqIHtAY29kZSBib29sfSBmaWVsZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgaW50IGNvbXB1dGVCb29sU2l6ZU5vVGFnKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBm
aW5hbCBib29sZWFuIHVudXNlZCkgewotICAgIHJldHVybiAxOwotICB9Ci0KLSAgLyoqCi0gICAq
IENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNv
ZGUgYW4gZW51bSBmaWVsZC4KLSAgICogVGhlIHByb3ZpZGVkIHZhbHVlIGlzIHRoZSBudW1lcmlj
IHZhbHVlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBlbnVtIHZhbHVlIG9uIHRoZSB3aXJlCi0gICAq
IChub3QgdGhlIGVudW0gb3JkaW5hbCB2YWx1ZSkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGlu
dCBjb21wdXRlRW51bVNpemVOb1RhZyhmaW5hbCBpbnQgdmFsdWUpIHsKLSAgICByZXR1cm4gY29t
cHV0ZUludDMyU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRo
ZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICog
e0Bjb2RlIHN0cmluZ30gZmllbGQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRl
U3RyaW5nU2l6ZU5vVGFnKGZpbmFsIFN0cmluZyB2YWx1ZSkgewotICAgIGludCBsZW5ndGg7Ci0g
ICAgdHJ5IHsKLSAgICAgIGxlbmd0aCA9IFV0ZjguZW5jb2RlZExlbmd0aCh2YWx1ZSk7Ci0gICAg
fSBjYXRjaCAoVW5wYWlyZWRTdXJyb2dhdGVFeGNlcHRpb24gZSkgewotICAgICAgLy8gVE9ETyhk
d2Vpcyk6IENvbnNpZGVyIHVzaW5nIG5pbyBDaGFyc2V0IG1ldGhvZHMgaW5zdGVhZC4KLSAgICAg
IGZpbmFsIGJ5dGVbXSBieXRlcyA9IHZhbHVlLmdldEJ5dGVzKEludGVybmFsLlVURl84KTsKLSAg
ICAgIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29tcHV0ZUxl
bmd0aERlbGltaXRlZEZpZWxkU2l6ZShsZW5ndGgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1
dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4g
ZW1iZWRkZWQKLSAgICogbWVzc2FnZSBzdG9yZWQgaW4gbGF6eSBmaWVsZC4KLSAgICovCi0gIHB1
YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVMYXp5RmllbGRTaXplTm9UYWcoZmluYWwgTGF6eUZpZWxk
TGl0ZSB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlTGVuZ3RoRGVsaW1pdGVkRmllbGRTaXpl
KHZhbHVlLmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUg
dGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAg
KiB7QGNvZGUgYnl0ZXN9IGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0
ZUJ5dGVzU2l6ZU5vVGFnKGZpbmFsIEJ5dGVTdHJpbmcgdmFsdWUpIHsKLSAgICByZXR1cm4gY29t
cHV0ZUxlbmd0aERlbGltaXRlZEZpZWxkU2l6ZSh2YWx1ZS5zaXplKCkpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0
byBlbmNvZGUgYQotICAgKiB7QGNvZGUgYnl0ZXN9IGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBpbnQgY29tcHV0ZUJ5dGVBcnJheVNpemVOb1RhZyhmaW5hbCBieXRlW10gdmFsdWUpIHsK
LSAgICByZXR1cm4gY29tcHV0ZUxlbmd0aERlbGltaXRlZEZpZWxkU2l6ZSh2YWx1ZS5sZW5ndGgp
OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdv
dWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgYnl0ZXN9IGZpZWxkLgotICAg
Ki8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUJ5dGVCdWZmZXJTaXplTm9UYWcoZmluYWwg
Qnl0ZUJ1ZmZlciB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlTGVuZ3RoRGVsaW1pdGVkRmll
bGRTaXplKHZhbHVlLmNhcGFjaXR5KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhl
IG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4gZW1iZWRk
ZWQKLSAgICogbWVzc2FnZSBmaWVsZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1
dGVNZXNzYWdlU2l6ZU5vVGFnKGZpbmFsIE1lc3NhZ2VMaXRlIHZhbHVlKSB7Ci0gICAgcmV0dXJu
IGNvbXB1dGVMZW5ndGhEZWxpbWl0ZWRGaWVsZFNpemUodmFsdWUuZ2V0U2VyaWFsaXplZFNpemUo
KSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgY29tcHV0ZUxlbmd0aERlbGltaXRlZEZp
ZWxkU2l6ZShpbnQgZmllbGRMZW5ndGgpIHsKLSAgICByZXR1cm4gY29tcHV0ZVVJbnQzMlNpemVO
b1RhZyhmaWVsZExlbmd0aCkgKyBmaWVsZExlbmd0aDsKLSAgfQotCi0gIC8qKgotICAgKiBFbmNv
ZGUgYSBaaWdaYWctZW5jb2RlZCAzMi1iaXQgdmFsdWUuICBaaWdaYWcgZW5jb2RlcyBzaWduZWQg
aW50ZWdlcnMKLSAgICogaW50byB2YWx1ZXMgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgZW5jb2Rl
ZCB3aXRoIHZhcmludC4gIChPdGhlcndpc2UsCi0gICAqIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJl
IHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyB0byBiZSB2YXJpbnQgZW5jb2RlZCwKLSAgICogdGh1
cyBhbHdheXMgdGFraW5nIDEwIGJ5dGVzIG9uIHRoZSB3aXJlLikKLSAgICoKLSAgICogQHBhcmFt
IG4gQSBzaWduZWQgMzItYml0IGludGVnZXIuCi0gICAqIEByZXR1cm4gQW4gdW5zaWduZWQgMzIt
Yml0IGludGVnZXIsIHN0b3JlZCBpbiBhIHNpZ25lZCBpbnQgYmVjYXVzZQotICAgKiAgICAgICAg
IEphdmEgaGFzIG5vIGV4cGxpY2l0IHVuc2lnbmVkIHN1cHBvcnQuCi0gICAqLwotICBwdWJsaWMg
c3RhdGljIGludCBlbmNvZGVaaWdaYWczMihmaW5hbCBpbnQgbikgewotICAgIC8vIE5vdGU6ICB0
aGUgcmlnaHQtc2hpZnQgbXVzdCBiZSBhcml0aG1ldGljCi0gICAgcmV0dXJuIChuIDw8IDEpIF4g
KG4gPj4gMzEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEVuY29kZSBhIFppZ1phZy1lbmNvZGVkIDY0
LWJpdCB2YWx1ZS4gIFppZ1phZyBlbmNvZGVzIHNpZ25lZCBpbnRlZ2VycwotICAgKiBpbnRvIHZh
bHVlcyB0aGF0IGNhbiBiZSBlZmZpY2llbnRseSBlbmNvZGVkIHdpdGggdmFyaW50LiAgKE90aGVy
d2lzZSwKLSAgICogbmVnYXRpdmUgdmFsdWVzIG11c3QgYmUgc2lnbi1leHRlbmRlZCB0byA2NCBi
aXRzIHRvIGJlIHZhcmludCBlbmNvZGVkLAotICAgKiB0aHVzIGFsd2F5cyB0YWtpbmcgMTAgYnl0
ZXMgb24gdGhlIHdpcmUuKQotICAgKgotICAgKiBAcGFyYW0gbiBBIHNpZ25lZCA2NC1iaXQgaW50
ZWdlci4KLSAgICogQHJldHVybiBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciwgc3RvcmVkIGlu
IGEgc2lnbmVkIGludCBiZWNhdXNlCi0gICAqICAgICAgICAgSmF2YSBoYXMgbm8gZXhwbGljaXQg
dW5zaWduZWQgc3VwcG9ydC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgbG9uZyBlbmNvZGVaaWda
YWc2NChmaW5hbCBsb25nIG4pIHsKLSAgICAvLyBOb3RlOiAgdGhlIHJpZ2h0LXNoaWZ0IG11c3Qg
YmUgYXJpdGhtZXRpYwotICAgIHJldHVybiAobiA8PCAxKSBeIChuID4+IDYzKTsKLSAgfQotCi0g
IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0KLSAgLyoqCi0gICAqIEZsdXNoZXMgdGhlIHN0cmVhbSBhbmQgZm9yY2Vz
IGFueSBidWZmZXJlZCBieXRlcyB0byBiZSB3cml0dGVuLiAgVGhpcwotICAgKiBkb2VzIG5vdCBm
bHVzaCB0aGUgdW5kZXJseWluZyBPdXRwdXRTdHJlYW0uCi0gICAqLwotICBwdWJsaWMgYWJzdHJh
Y3Qgdm9pZCBmbHVzaCgpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAvKioKLSAgICogSWYgd3Jp
dGluZyB0byBhIGZsYXQgYXJyYXksIHJldHVybiB0aGUgc3BhY2UgbGVmdCBpbiB0aGUgYXJyYXku
Ci0gICAqIE90aGVyd2lzZSwgdGhyb3dzIHtAY29kZSBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2Vw
dGlvbn0uCi0gICAqLwotICBwdWJsaWMgYWJzdHJhY3QgaW50IHNwYWNlTGVmdCgpOwotCi0gIC8q
KgotICAgKiBWZXJpZmllcyB0aGF0IHtAbGluayAjc3BhY2VMZWZ0KCl9IHJldHVybnMgemVyby4g
IEl0J3MgY29tbW9uIHRvIGNyZWF0ZQotICAgKiBhIGJ5dGUgYXJyYXkgdGhhdCBpcyBleGFjdGx5
IGJpZyBlbm91Z2ggdG8gaG9sZCBhIG1lc3NhZ2UsIHRoZW4gd3JpdGUgdG8KLSAgICogaXQgd2l0
aCBhIHtAY29kZSBDb2RlZE91dHB1dFN0cmVhbX0uICBDYWxsaW5nIHtAY29kZSBjaGVja05vU3Bh
Y2VMZWZ0KCl9Ci0gICAqIGFmdGVyIHdyaXRpbmcgdmVyaWZpZXMgdGhhdCB0aGUgbWVzc2FnZSB3
YXMgYWN0dWFsbHkgYXMgYmlnIGFzIGV4cGVjdGVkLAotICAgKiB3aGljaCBjYW4gaGVscCBjYXRj
aCBidWdzLgotICAgKi8KLSAgcHVibGljIGZpbmFsIHZvaWQgY2hlY2tOb1NwYWNlTGVmdCgpIHsK
LSAgICBpZiAoc3BhY2VMZWZ0KCkgIT0gMCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0
ZUV4Y2VwdGlvbigiRGlkIG5vdCB3cml0ZSBhcyBtdWNoIGRhdGEgYXMgZXhwZWN0ZWQuIik7Ci0g
ICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIElmIHlvdSBjcmVhdGUgYSBDb2RlZE91dHB1dFN0cmVh
bSBhcm91bmQgYSBzaW1wbGUgZmxhdCBhcnJheSwgeW91IG11c3QKLSAgICogbm90IGF0dGVtcHQg
dG8gd3JpdGUgbW9yZSBieXRlcyB0aGFuIHRoZSBhcnJheSBoYXMgc3BhY2UuICBPdGhlcndpc2Us
Ci0gICAqIHRoaXMgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBjbGFzcyBPdXRPZlNwYWNlRXhjZXB0aW9uIGV4dGVuZHMgSU9FeGNlcHRpb24gewotICAg
IHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC02OTQ3NDg2ODg2
OTk3ODg5NDk5TDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRVNTQUdFID0K
LSAgICAgICAgIkNvZGVkT3V0cHV0U3RyZWFtIHdhcyB3cml0aW5nIHRvIGEgZmxhdCBieXRlIGFy
cmF5IGFuZCByYW4gb3V0IG9mIHNwYWNlLiI7Ci0KLSAgICBPdXRPZlNwYWNlRXhjZXB0aW9uKCkg
ewotICAgICAgc3VwZXIoTUVTU0FHRSk7Ci0gICAgfQotCi0gICAgT3V0T2ZTcGFjZUV4Y2VwdGlv
bihUaHJvd2FibGUgY2F1c2UpIHsKLSAgICAgIHN1cGVyKE1FU1NBR0UsIGNhdXNlKTsKLSAgICB9
Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vz
c2Z1bGx5IHdyaXR0ZW4gdG8gdGhpcyBzdHJlYW0uICBUaGUKLSAgICogcmV0dXJuZWQgdmFsdWUg
aXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYWNjdXJhdGUgaWYgZXhjZXB0aW9ucyBoYXZlIGJlZW4K
LSAgICogZm91bmQgaW4gdGhlIG1pZGRsZSBvZiB3cml0aW5nLgotICAgKi8KLSAgcHVibGljIGFi
c3RyYWN0IGludCBnZXRUb3RhbEJ5dGVzV3JpdHRlbigpOwotCi0gIC8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAg
LyoqIFdyaXRlIGEge0Bjb2RlIGJ5dGVzfSBmaWVsZCB0byB0aGUgc3RyZWFtLiBWaXNpYmxlIGZv
ciB0ZXN0aW5nLiAqLwotICBhYnN0cmFjdCB2b2lkIHdyaXRlQnl0ZUFycmF5Tm9UYWcoZmluYWwg
Ynl0ZVtdIHZhbHVlLCBmaW5hbCBpbnQgb2Zmc2V0LCBmaW5hbCBpbnQgbGVuZ3RoKQotICAgICAg
dGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIGZpbmFsIHZvaWQgaW5lZmZpY2llbnRXcml0ZVN0cmlu
Z05vVGFnKFN0cmluZyB2YWx1ZSwgVW5wYWlyZWRTdXJyb2dhdGVFeGNlcHRpb24gY2F1c2UpCi0g
ICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGxvZ2dlci5sb2coTGV2ZWwuV0FSTklORywK
LSAgICAgICAgIkNvbnZlcnRpbmcgaWxsLWZvcm1lZCBVVEYtMTYuIFlvdXIgUHJvdG9jb2wgQnVm
ZmVyIHdpbGwgbm90IHJvdW5kIHRyaXAgY29ycmVjdGx5ISIsIGNhdXNlKTsKLQotICAgIC8vIFVu
Zm9ydHVuYXRlbHkgdGhlcmUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGFueSB3YXkgdG8gdGVsbCBK
YXZhIHRvIGVuY29kZQotICAgIC8vIFVURi04IGRpcmVjdGx5IGludG8gb3VyIGJ1ZmZlciwgc28g
d2UgaGF2ZSB0byBsZXQgaXQgY3JlYXRlIGl0cyBvd24gYnl0ZQotICAgIC8vIGFycmF5IGFuZCB0
aGVuIGNvcHkuCi0gICAgLy8gVE9ETyhkd2Vpcyk6IENvbnNpZGVyIHVzaW5nIG5pbyBDaGFyc2V0
IG1ldGhvZHMgaW5zdGVhZC4KLSAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSB2YWx1ZS5nZXRCeXRl
cyhJbnRlcm5hbC5VVEZfOCk7Ci0gICAgdHJ5IHsKLSAgICAgIHdyaXRlVUludDMyTm9UYWcoYnl0
ZXMubGVuZ3RoKTsKLSAgICAgIHdyaXRlTGF6eShieXRlcywgMCwgYnl0ZXMubGVuZ3RoKTsKLSAg
ICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93IG5l
dyBPdXRPZlNwYWNlRXhjZXB0aW9uKGUpOwotICAgIH0gY2F0Y2ggKE91dE9mU3BhY2VFeGNlcHRp
b24gZSkgewotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0g
IC8qKgotICAgKiBXcml0ZSBhIHtAY29kZSBncm91cH0gZmllbGQsIGluY2x1ZGluZyB0YWcsIHRv
IHRoZSBzdHJlYW0uCi0gICAqCi0gICAqIEBkZXByZWNhdGVkIGdyb3VwcyBhcmUgZGVwcmVjYXRl
ZC4KLSAgICovCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlR3JvdXAo
ZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBNZXNzYWdlTGl0ZSB2YWx1ZSkgdGhyb3dzIElP
RXhjZXB0aW9uIHsKLSAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQ
RV9TVEFSVF9HUk9VUCk7Ci0gICAgd3JpdGVHcm91cE5vVGFnKHZhbHVlKTsKLSAgICB3cml0ZVRh
ZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9FTkRfR1JPVVApOwotICB9Ci0KLSAg
LyoqCi0gICAqIFdyaXRlIGEge0Bjb2RlIGdyb3VwfSBmaWVsZCB0byB0aGUgc3RyZWFtLgotICAg
KgotICAgKiBAZGVwcmVjYXRlZCBncm91cHMgYXJlIGRlcHJlY2F0ZWQuCi0gICAqLwotICBARGVw
cmVjYXRlZAotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZUdyb3VwTm9UYWcoZmluYWwgTWVzc2Fn
ZUxpdGUgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgdmFsdWUud3JpdGVUbyh0aGlz
KTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3
b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGdyb3VwfSBmaWVsZCwgaW5j
bHVkaW5nIHRhZy4KLSAgICoKLSAgICogQGRlcHJlY2F0ZWQgZ3JvdXBzIGFyZSBkZXByZWNhdGVk
LgotICAgKi8KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUdyb3Vw
U2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIE1lc3NhZ2VMaXRlIHZhbHVlKSB7Ci0g
ICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSAqIDIgKyBjb21wdXRlR3JvdXBT
aXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBv
ZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgZ3Jv
dXB9IGZpZWxkLgotICAgKi8KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIHN0YXRpYyBpbnQgY29t
cHV0ZUdyb3VwU2l6ZU5vVGFnKGZpbmFsIE1lc3NhZ2VMaXRlIHZhbHVlKSB7Ci0gICAgcmV0dXJu
IHZhbHVlLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gIH0KLQotICAvKioKLSAgICogRW5jb2RlIGFu
ZCB3cml0ZSBhIHZhcmludC4gIHtAY29kZSB2YWx1ZX0gaXMgdHJlYXRlZCBhcwotICAgKiB1bnNp
Z25lZCwgc28gaXQgd29uJ3QgYmUgc2lnbi1leHRlbmRlZCBpZiBuZWdhdGl2ZS4KLSAgICoKLSAg
ICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayAjd3JpdGVVSW50MzJOb1RhZ30gaW5zdGVhZC4KLSAg
ICovCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlUmF3VmFyaW50MzIo
aW50IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlVUludDMyTm9UYWcodmFs
dWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEVuY29kZSBhbmQgd3JpdGUgYSB2YXJpbnQuCi0gICAq
Ci0gICAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgI3dyaXRlVUludDY0Tm9UYWd9IGluc3RlYWQu
Ci0gICAqLwotICBARGVwcmVjYXRlZAotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVJhd1Zhcmlu
dDY0KGxvbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgd3JpdGVVSW50NjROb1Rh
Zyh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVz
IHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhIHZhcmludC4KLSAgICoge0Bjb2RlIHZh
bHVlfSBpcyB0cmVhdGVkIGFzIHVuc2lnbmVkLCBzbyBpdCB3b24ndCBiZSBzaWduLWV4dGVuZGVk
IGlmCi0gICAqIG5lZ2F0aXZlLgotICAgKgotICAgKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rICNj
b21wdXRlVUludDMyU2l6ZU5vVGFnKGludCl9IGluc3RlYWQuCi0gICAqLwotICBARGVwcmVjYXRl
ZAotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRlUmF3VmFyaW50MzJTaXplKGZpbmFsIGludCB2
YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVUludDMyU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBu
ZWVkZWQgdG8gZW5jb2RlIGEgdmFyaW50LgotICAgKgotICAgKiBAZGVwcmVjYXRlZCB1c2Uge0Bs
aW5rICNjb21wdXRlVUludDY0U2l6ZU5vVGFnKGxvbmcpfSBpbnN0ZWFkLgotICAgKi8KLSAgQERl
cHJlY2F0ZWQKLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVJhd1ZhcmludDY0U2l6ZShsb25n
IHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVVSW50NjRTaXplTm9UYWcodmFsdWUpOwotICB9
Ci0KLSAgLyoqCi0gICAqIFdyaXRlIGEgbGl0dGxlLWVuZGlhbiAzMi1iaXQgaW50ZWdlci4KLSAg
ICoKLSAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayAjd3JpdGVGaXhlZDMyTm9UYWd9IGluc3Rl
YWQuCi0gICAqLwotICBARGVwcmVjYXRlZAotICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVJhd0xp
dHRsZUVuZGlhbjMyKGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB3
cml0ZUZpeGVkMzJOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogV3JpdGUgYSBsaXR0
bGUtZW5kaWFuIDY0LWJpdCBpbnRlZ2VyLgotICAgKgotICAgKiBAZGVwcmVjYXRlZCBVc2Uge0Bs
aW5rICN3cml0ZUZpeGVkNjROb1RhZ30gaW5zdGVhZC4KLSAgICovCi0gIEBEZXByZWNhdGVkCi0g
IHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlUmF3TGl0dGxlRW5kaWFuNjQoZmluYWwgbG9uZyB2YWx1
ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZUZpeGVkNjROb1RhZyh2YWx1ZSk7Ci0g
IH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi0gIC8qKgotICAgKiBBIHtAbGluayBDb2RlZE91dHB1dFN0
cmVhbX0gdGhhdCB3cml0ZXMgZGlyZWN0bHkgdG8gYSBieXRlIGFycmF5LgotICAgKi8KLSAgcHJp
dmF0ZSBzdGF0aWMgY2xhc3MgQXJyYXlFbmNvZGVyIGV4dGVuZHMgQ29kZWRPdXRwdXRTdHJlYW0g
ewotICAgIHByaXZhdGUgZmluYWwgYnl0ZVtdIGJ1ZmZlcjsKLSAgICBwcml2YXRlIGZpbmFsIGlu
dCBvZmZzZXQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbGltaXQ7Ci0gICAgcHJpdmF0ZSBpbnQg
cG9zaXRpb247Ci0KLSAgICBBcnJheUVuY29kZXIoYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwg
aW50IGxlbmd0aCkgewotICAgICAgaWYgKGJ1ZmZlciA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93
IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiYnVmZmVyIik7Ci0gICAgICB9Ci0gICAgICBpZiAo
KG9mZnNldCB8IGxlbmd0aCB8IChidWZmZXIubGVuZ3RoIC0gKG9mZnNldCArIGxlbmd0aCkpKSA8
IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihTdHJpbmcu
Zm9ybWF0KAotICAgICAgICAgICAgIkFycmF5IHJhbmdlIGlzIGludmFsaWQuIEJ1ZmZlci5sZW5n
dGg9JWQsIG9mZnNldD0lZCwgbGVuZ3RoPSVkIiwKLSAgICAgICAgICAgIGJ1ZmZlci5sZW5ndGgs
IG9mZnNldCwgbGVuZ3RoKSk7Ci0gICAgICB9Ci0gICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjsK
LSAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgcG9zaXRpb24gPSBvZmZzZXQ7Ci0g
ICAgICBsaW1pdCA9IG9mZnNldCArIGxlbmd0aDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVRhZyhmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFs
IGludCB3aXJlVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVUludDMyTm9U
YWcoV2lyZUZvcm1hdC5tYWtlVGFnKGZpZWxkTnVtYmVyLCB3aXJlVHlwZSkpOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlSW50MzIoZmluYWwgaW50
IGZpZWxkTnVtYmVyLCBmaW5hbCBpbnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAg
ICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQpOwotICAg
ICAgd3JpdGVJbnQzMk5vVGFnKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgZmluYWwgdm9pZCB3cml0ZVVJbnQzMihmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFs
IGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVGFnKGZpZWxkTnVt
YmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX1ZBUklOVCk7Ci0gICAgICB3cml0ZVVJbnQzMk5vVGFn
KHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgdm9pZCB3
cml0ZUZpeGVkMzIoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBpbnQgdmFsdWUpIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5X
SVJFVFlQRV9GSVhFRDMyKTsKLSAgICAgIHdyaXRlRml4ZWQzMk5vVGFnKHZhbHVlKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZVVJbnQ2NChmaW5h
bCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGxvbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7
Ci0gICAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQp
OwotICAgICAgd3JpdGVVSW50NjROb1RhZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGVGaXhlZDY0KGZpbmFsIGludCBmaWVsZE51bWJl
ciwgZmluYWwgbG9uZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVGFn
KGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0ZJWEVENjQpOwotICAgICAgd3JpdGVG
aXhlZDY0Tm9UYWcodmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBm
aW5hbCB2b2lkIHdyaXRlQm9vbChmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGJvb2xlYW4g
dmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwg
V2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQpOwotICAgICAgd3JpdGUoKGJ5dGUpICh2YWx1ZSA/
IDEgOiAwKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIHZvaWQg
d3JpdGVTdHJpbmcoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBTdHJpbmcgdmFsdWUpIHRo
cm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1h
dC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgICAgIHdyaXRlU3RyaW5nTm9UYWcodmFs
dWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRl
Qnl0ZXMoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBCeXRlU3RyaW5nIHZhbHVlKSB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQu
V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCk7Ci0gICAgICB3cml0ZUJ5dGVzTm9UYWcodmFsdWUp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlQnl0
ZUFycmF5KGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgYnl0ZVtdIHZhbHVlKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgICAgd3JpdGVCeXRlQXJyYXkoZmllbGROdW1iZXIsIHZhbHVlLCAw
LCB2YWx1ZS5sZW5ndGgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5h
bCB2b2lkIHdyaXRlQnl0ZUFycmF5KAotICAgICAgICBmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZp
bmFsIGJ5dGVbXSB2YWx1ZSwgZmluYWwgaW50IG9mZnNldCwgZmluYWwgaW50IGxlbmd0aCkKLSAg
ICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVGFnKGZpZWxkTnVtYmVyLCBX
aXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpOwotICAgICAgd3JpdGVCeXRlQXJy
YXlOb1RhZyh2YWx1ZSwgb2Zmc2V0LCBsZW5ndGgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlQnl0ZUJ1ZmZlcihmaW5hbCBpbnQgZmllbGROdW1i
ZXIsIGZpbmFsIEJ5dGVCdWZmZXIgdmFsdWUpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7
Ci0gICAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9MRU5HVEhf
REVMSU1JVEVEKTsKLSAgICAgIHdyaXRlVUludDMyTm9UYWcodmFsdWUuY2FwYWNpdHkoKSk7Ci0g
ICAgICB3cml0ZVJhd0J5dGVzKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgZmluYWwgdm9pZCB3cml0ZUJ5dGVzTm9UYWcoZmluYWwgQnl0ZVN0cmluZyB2YWx1ZSkg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVUludDMyTm9UYWcodmFsdWUuc2l6ZSgp
KTsKLSAgICAgIHZhbHVlLndyaXRlVG8odGhpcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGVCeXRlQXJyYXlOb1RhZyhmaW5hbCBieXRlW10gdmFs
dWUsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7
Ci0gICAgICB3cml0ZVVJbnQzMk5vVGFnKGxlbmd0aCk7Ci0gICAgICB3cml0ZSh2YWx1ZSwgb2Zm
c2V0LCBsZW5ndGgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCB2
b2lkIHdyaXRlUmF3Qnl0ZXMoZmluYWwgQnl0ZUJ1ZmZlciB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICAgIGlmICh2YWx1ZS5oYXNBcnJheSgpKSB7Ci0gICAgICAgIHdyaXRlKHZhbHVl
LmFycmF5KCksIHZhbHVlLmFycmF5T2Zmc2V0KCksIHZhbHVlLmNhcGFjaXR5KCkpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgQnl0ZUJ1ZmZlciBkdXBsaWNhdGVkID0gdmFsdWUuZHVwbGljYXRl
KCk7Ci0gICAgICAgIGR1cGxpY2F0ZWQuY2xlYXIoKTsKLSAgICAgICAgd3JpdGUoZHVwbGljYXRl
ZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIHZv
aWQgd3JpdGVNZXNzYWdlKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgTWVzc2FnZUxpdGUg
dmFsdWUpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVRhZyhmaWVs
ZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgICAgIHdy
aXRlTWVzc2FnZU5vVGFnKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgZmluYWwgdm9pZCB3cml0ZU1lc3NhZ2VTZXRFeHRlbnNpb24oZmluYWwgaW50IGZpZWxkTnVt
YmVyLCBmaW5hbCBNZXNzYWdlTGl0ZSB2YWx1ZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICAgIHdyaXRlVGFnKFdpcmVGb3JtYXQuTUVTU0FHRV9TRVRfSVRFTSwgV2lyZUZvcm1h
dC5XSVJFVFlQRV9TVEFSVF9HUk9VUCk7Ci0gICAgICB3cml0ZVVJbnQzMihXaXJlRm9ybWF0Lk1F
U1NBR0VfU0VUX1RZUEVfSUQsIGZpZWxkTnVtYmVyKTsKLSAgICAgIHdyaXRlTWVzc2FnZShXaXJl
Rm9ybWF0Lk1FU1NBR0VfU0VUX01FU1NBR0UsIHZhbHVlKTsKLSAgICAgIHdyaXRlVGFnKFdpcmVG
b3JtYXQuTUVTU0FHRV9TRVRfSVRFTSwgV2lyZUZvcm1hdC5XSVJFVFlQRV9FTkRfR1JPVVApOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlUmF3TWVz
c2FnZVNldEV4dGVuc2lvbihmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIEJ5dGVTdHJpbmcg
dmFsdWUpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVRhZyhXaXJl
Rm9ybWF0Lk1FU1NBR0VfU0VUX0lURU0sIFdpcmVGb3JtYXQuV0lSRVRZUEVfU1RBUlRfR1JPVVAp
OwotICAgICAgd3JpdGVVSW50MzIoV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9UWVBFX0lELCBmaWVs
ZE51bWJlcik7Ci0gICAgICB3cml0ZUJ5dGVzKFdpcmVGb3JtYXQuTUVTU0FHRV9TRVRfTUVTU0FH
RSwgdmFsdWUpOwotICAgICAgd3JpdGVUYWcoV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9JVEVNLCBX
aXJlRm9ybWF0LldJUkVUWVBFX0VORF9HUk9VUCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGVNZXNzYWdlTm9UYWcoZmluYWwgTWVzc2FnZUxpdGUg
dmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVVJbnQzMk5vVGFnKHZhbHVl
LmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICAgICAgdmFsdWUud3JpdGVUbyh0aGlzKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZShieXRlIHZhbHVl
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgYnVmZmVyW3Bvc2l0
aW9uKytdID0gdmFsdWU7Ci0gICAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IE91dE9mU3BhY2VFeGNlcHRpb24obmV3IEluZGV4T3V0
T2ZCb3VuZHNFeGNlcHRpb24oCi0gICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJQb3M6ICVkLCBs
aW1pdDogJWQsIGxlbjogJWQiLCBwb3NpdGlvbiwgbGltaXQsIDEpKSk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGVJbnQzMk5vVGFn
KGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGlmICh2YWx1ZSA+PSAwKSB7
Ci0gICAgICAgIHdyaXRlVUludDMyTm9UYWcodmFsdWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gTXVzdCBzaWduLWV4dGVuZC4KLSAgICAgICAgd3JpdGVVSW50NjROb1RhZyh2YWx1ZSk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIHZvaWQg
d3JpdGVVSW50MzJOb1RhZyhpbnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBp
ZiAoSEFTX1VOU0FGRV9BUlJBWV9PUEVSQVRJT05TICYmIHNwYWNlTGVmdCgpID49IE1BWF9WQVJJ
TlRfU0laRSkgewotICAgICAgICBsb25nIHBvcyA9IEFSUkFZX0JBU0VfT0ZGU0VUICsgcG9zaXRp
b247Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgaWYgKCh2YWx1ZSAmIH4weDdG
KSA9PSAwKSB7Ci0gICAgICAgICAgICBVTlNBRkUucHV0Qnl0ZShidWZmZXIsIHBvcysrLCAoYnl0
ZSkgdmFsdWUpOwotICAgICAgICAgICAgcG9zaXRpb24rKzsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVU5TQUZFLnB1dEJ5dGUoYnVmZmVyLCBw
b3MrKywgKGJ5dGUpICgodmFsdWUgJiAweDdGKSB8IDB4ODApKTsKLSAgICAgICAgICAgIHBvc2l0
aW9uKys7Ci0gICAgICAgICAgICB2YWx1ZSA+Pj49IDc7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0cnkgewotICAgICAgICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgICAgICBpZiAoKHZhbHVlICYgfjB4N0YpID09IDApIHsKLSAgICAgICAgICAgICAg
YnVmZmVyW3Bvc2l0aW9uKytdID0gKGJ5dGUpIHZhbHVlOwotICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBidWZmZXJbcG9zaXRpb24rK10g
PSAoYnl0ZSkgKCh2YWx1ZSAmIDB4N0YpIHwgMHg4MCk7Ci0gICAgICAgICAgICAgIHZhbHVlID4+
Pj0gNzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEluZGV4
T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgICAgIHRocm93IG5ldyBPdXRPZlNwYWNl
RXhjZXB0aW9uKAotICAgICAgICAgICAgICBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigK
LSAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlBvczogJWQsIGxpbWl0OiAlZCwgbGVu
OiAlZCIsIHBvc2l0aW9uLCBsaW1pdCwgMSkpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlRml4ZWQzMk5vVGFn
KGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGJ1
ZmZlcltwb3NpdGlvbisrXSA9IChieXRlKSAodmFsdWUgJiAweEZGKTsKLSAgICAgICAgYnVmZmVy
W3Bvc2l0aW9uKytdID0gKGJ5dGUpICgodmFsdWUgPj4gOCkgJiAweEZGKTsKLSAgICAgICAgYnVm
ZmVyW3Bvc2l0aW9uKytdID0gKGJ5dGUpICgodmFsdWUgPj4gMTYpICYgMHhGRik7Ci0gICAgICAg
IGJ1ZmZlcltwb3NpdGlvbisrXSA9IChieXRlKSAoKHZhbHVlID4+IDI0KSAmIDB4RkYpOwotICAg
ICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93
IG5ldyBPdXRPZlNwYWNlRXhjZXB0aW9uKAotICAgICAgICAgICAgbmV3IEluZGV4T3V0T2ZCb3Vu
ZHNFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiUG9zOiAlZCwgbGlt
aXQ6ICVkLCBsZW46ICVkIiwgcG9zaXRpb24sIGxpbWl0LCAxKSkpOwotICAgICAgfQotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlVUludDY0Tm9UYWco
bG9uZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGlmIChIQVNfVU5TQUZFX0FS
UkFZX09QRVJBVElPTlMgJiYgc3BhY2VMZWZ0KCkgPj0gTUFYX1ZBUklOVF9TSVpFKSB7Ci0gICAg
ICAgIGxvbmcgcG9zID0gQVJSQVlfQkFTRV9PRkZTRVQgKyBwb3NpdGlvbjsKLSAgICAgICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgICBpZiAoKHZhbHVlICYgfjB4N0ZMKSA9PSAwKSB7Ci0gICAg
ICAgICAgICBVTlNBRkUucHV0Qnl0ZShidWZmZXIsIHBvcysrLCAoYnl0ZSkgdmFsdWUpOwotICAg
ICAgICAgICAgcG9zaXRpb24rKzsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgVU5TQUZFLnB1dEJ5dGUoYnVmZmVyLCBwb3MrKywgKGJ5dGUpICgo
KGludCkgdmFsdWUgJiAweDdGKSB8IDB4ODApKTsKLSAgICAgICAgICAgIHBvc2l0aW9uKys7Ci0g
ICAgICAgICAgICB2YWx1ZSA+Pj49IDc7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
IGVsc2UgewotICAgICAgICB0cnkgewotICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
ICAgICBpZiAoKHZhbHVlICYgfjB4N0ZMKSA9PSAwKSB7Ci0gICAgICAgICAgICAgIGJ1ZmZlcltw
b3NpdGlvbisrXSA9IChieXRlKSB2YWx1ZTsKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgYnVmZmVyW3Bvc2l0aW9uKytdID0gKGJ5dGUp
ICgoKGludCkgdmFsdWUgJiAweDdGKSB8IDB4ODApOwotICAgICAgICAgICAgICB2YWx1ZSA+Pj49
IDc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChJbmRleE91
dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgT3V0T2ZTcGFjZUV4
Y2VwdGlvbigKLSAgICAgICAgICAgICAgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oCi0g
ICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJQb3M6ICVkLCBsaW1pdDogJWQsIGxlbjog
JWQiLCBwb3NpdGlvbiwgbGltaXQsIDEpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZUZpeGVkNjROb1RhZyhs
b25nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgYnVm
ZmVyW3Bvc2l0aW9uKytdID0gKGJ5dGUpICgoaW50KSAodmFsdWUpICYgMHhGRik7Ci0gICAgICAg
IGJ1ZmZlcltwb3NpdGlvbisrXSA9IChieXRlKSAoKGludCkgKHZhbHVlID4+IDgpICYgMHhGRik7
Ci0gICAgICAgIGJ1ZmZlcltwb3NpdGlvbisrXSA9IChieXRlKSAoKGludCkgKHZhbHVlID4+IDE2
KSAmIDB4RkYpOwotICAgICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAoYnl0ZSkgKChpbnQpICh2
YWx1ZSA+PiAyNCkgJiAweEZGKTsKLSAgICAgICAgYnVmZmVyW3Bvc2l0aW9uKytdID0gKGJ5dGUp
ICgoaW50KSAodmFsdWUgPj4gMzIpICYgMHhGRik7Ci0gICAgICAgIGJ1ZmZlcltwb3NpdGlvbisr
XSA9IChieXRlKSAoKGludCkgKHZhbHVlID4+IDQwKSAmIDB4RkYpOwotICAgICAgICBidWZmZXJb
cG9zaXRpb24rK10gPSAoYnl0ZSkgKChpbnQpICh2YWx1ZSA+PiA0OCkgJiAweEZGKTsKLSAgICAg
ICAgYnVmZmVyW3Bvc2l0aW9uKytdID0gKGJ5dGUpICgoaW50KSAodmFsdWUgPj4gNTYpICYgMHhG
Rik7Ci0gICAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgdGhyb3cgbmV3IE91dE9mU3BhY2VFeGNlcHRpb24oCi0gICAgICAgICAgICBuZXcgSW5kZXhP
dXRPZkJvdW5kc0V4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJQb3M6
ICVkLCBsaW1pdDogJWQsIGxlbjogJWQiLCBwb3NpdGlvbiwgbGltaXQsIDEpKSk7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIHZvaWQgd3JpdGUoYnl0
ZVtdIHZhbHVlLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgSU9FeGNlcHRpb24gewot
ICAgICAgdHJ5IHsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weSh2YWx1ZSwgb2Zmc2V0LCBidWZm
ZXIsIHBvc2l0aW9uLCBsZW5ndGgpOwotICAgICAgICBwb3NpdGlvbiArPSBsZW5ndGg7Ci0gICAg
ICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cg
bmV3IE91dE9mU3BhY2VFeGNlcHRpb24oCi0gICAgICAgICAgICBuZXcgSW5kZXhPdXRPZkJvdW5k
c0V4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJQb3M6ICVkLCBsaW1p
dDogJWQsIGxlbjogJWQiLCBwb3NpdGlvbiwgbGltaXQsIGxlbmd0aCkpKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZUxhenkoYnl0
ZVtdIHZhbHVlLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgSU9FeGNlcHRpb24gewot
ICAgICAgd3JpdGUodmFsdWUsIG9mZnNldCwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZShCeXRlQnVmZmVyIHZhbHVlKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgICAgZmluYWwgaW50IGxlbmd0aCA9IHZhbHVlLnJlbWFpbmluZygp
OwotICAgICAgdHJ5IHsKLSAgICAgICAgdmFsdWUuZ2V0KGJ1ZmZlciwgcG9zaXRpb24sIGxlbmd0
aCk7Ci0gICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKLSAgICAgIH0gY2F0Y2ggKEluZGV4T3V0
T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgT3V0T2ZTcGFjZUV4Y2Vw
dGlvbigKLSAgICAgICAgICAgIG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKAotICAgICAg
ICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlBvczogJWQsIGxpbWl0OiAlZCwgbGVuOiAlZCIsIHBv
c2l0aW9uLCBsaW1pdCwgbGVuZ3RoKSkpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlTGF6eShCeXRlQnVmZmVyIHZhbHVlKSB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGUodmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlU3RyaW5nTm9UYWcoU3RyaW5nIHZhbHVl
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZmluYWwgaW50IG9sZFBvc2l0aW9uID0gcG9z
aXRpb247Ci0gICAgICB0cnkgewotICAgICAgICAvLyBVVEYtOCBieXRlIGxlbmd0aCBvZiB0aGUg
c3RyaW5nIGlzIGF0IGxlYXN0IGl0cyBVVEYtMTYgY29kZSB1bml0IGxlbmd0aCAodmFsdWUubGVu
Z3RoKCkpLAotICAgICAgICAvLyBhbmQgYXQgbW9zdCAzIHRpbWVzIG9mIGl0LiBXZSB0YWtlIGFk
dmFudGFnZSBvZiB0aGlzIGluIGJvdGggYnJhbmNoZXMgYmVsb3cuCi0gICAgICAgIGZpbmFsIGlu
dCBtYXhMZW5ndGggPSB2YWx1ZS5sZW5ndGgoKSAqIFV0ZjguTUFYX0JZVEVTX1BFUl9DSEFSOwot
ICAgICAgICBmaW5hbCBpbnQgbWF4TGVuZ3RoVmFySW50U2l6ZSA9IGNvbXB1dGVVSW50MzJTaXpl
Tm9UYWcobWF4TGVuZ3RoKTsKLSAgICAgICAgZmluYWwgaW50IG1pbkxlbmd0aFZhckludFNpemUg
PSBjb21wdXRlVUludDMyU2l6ZU5vVGFnKHZhbHVlLmxlbmd0aCgpKTsKLSAgICAgICAgaWYgKG1p
bkxlbmd0aFZhckludFNpemUgPT0gbWF4TGVuZ3RoVmFySW50U2l6ZSkgewotICAgICAgICAgIHBv
c2l0aW9uID0gb2xkUG9zaXRpb24gKyBtaW5MZW5ndGhWYXJJbnRTaXplOwotICAgICAgICAgIGlu
dCBuZXdQb3NpdGlvbiA9IFV0ZjguZW5jb2RlKHZhbHVlLCBidWZmZXIsIHBvc2l0aW9uLCBzcGFj
ZUxlZnQoKSk7Ci0gICAgICAgICAgLy8gU2luY2UgdGhpcyBjbGFzcyBpcyBzdGF0ZWZ1bCBhbmQg
dHJhY2tzIHRoZSBwb3NpdGlvbiwgd2UgcmV3aW5kIGFuZCBzdG9yZSB0aGUgc3RhdGUsCi0gICAg
ICAgICAgLy8gcHJlcGVuZCB0aGUgbGVuZ3RoLCB0aGVuIHJlc2V0IGl0IGJhY2sgdG8gdGhlIGVu
ZCBvZiB0aGUgc3RyaW5nLgotICAgICAgICAgIHBvc2l0aW9uID0gb2xkUG9zaXRpb247Ci0gICAg
ICAgICAgaW50IGxlbmd0aCA9IG5ld1Bvc2l0aW9uIC0gb2xkUG9zaXRpb24gLSBtaW5MZW5ndGhW
YXJJbnRTaXplOwotICAgICAgICAgIHdyaXRlVUludDMyTm9UYWcobGVuZ3RoKTsKLSAgICAgICAg
ICBwb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlu
dCBsZW5ndGggPSBVdGY4LmVuY29kZWRMZW5ndGgodmFsdWUpOwotICAgICAgICAgIHdyaXRlVUlu
dDMyTm9UYWcobGVuZ3RoKTsKLSAgICAgICAgICBwb3NpdGlvbiA9IFV0ZjguZW5jb2RlKHZhbHVl
LCBidWZmZXIsIHBvc2l0aW9uLCBzcGFjZUxlZnQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0
Y2ggKFVucGFpcmVkU3Vycm9nYXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8gUm9sbCBiYWNr
IHRoZSBjaGFuZ2UgLSB3ZSBmYWxsIGJhY2sgdG8gaW5lZmZpY2llbnQgcGF0aC4KLSAgICAgICAg
cG9zaXRpb24gPSBvbGRQb3NpdGlvbjsKLQotICAgICAgICAvLyBUT0RPKG5hdGhhbm1pdHRsZXIp
OiBXZSBzaG91bGQgdGhyb3cgYW4gSU9FeGNlcHRpb24gaGVyZSBpbnN0ZWFkLgotICAgICAgICBp
bmVmZmljaWVudFdyaXRlU3RyaW5nTm9UYWcodmFsdWUsIGUpOwotICAgICAgfSBjYXRjaCAoSW5k
ZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBPdXRPZlNwYWNl
RXhjZXB0aW9uKGUpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIGZsdXNoKCkgewotICAgICAgLy8gRG8gbm90aGluZy4KLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgZmluYWwgaW50IHNwYWNlTGVmdCgpIHsKLSAgICAgIHJldHVybiBs
aW1pdCAtIHBvc2l0aW9uOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5h
bCBpbnQgZ2V0VG90YWxCeXRlc1dyaXR0ZW4oKSB7Ci0gICAgICByZXR1cm4gcG9zaXRpb24gLSBv
ZmZzZXQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEEge0BsaW5rIENvZGVkT3V0cHV0U3Ry
ZWFtfSB0aGF0IHdyaXRlcyBkaXJlY3RseSB0byBhIGhlYXAge0BsaW5rIEJ5dGVCdWZmZXJ9LiBX
cml0ZXMgYXJlCi0gICAqIGRvbmUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgYXJyYXkuIFRo
ZSBidWZmZXIgcG9zaXRpb24gaXMgb25seSB1cGRhdGVkIGFmdGVyIGEgZmx1c2guCi0gICAqLwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBOaW9IZWFwRW5jb2RlciBleHRlbmRzIEFycmF5
RW5jb2RlciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBCeXRlQnVmZmVyIGJ5dGVCdWZmZXI7Ci0gICAg
cHJpdmF0ZSBpbnQgaW5pdGlhbFBvc2l0aW9uOwotCi0gICAgTmlvSGVhcEVuY29kZXIoQnl0ZUJ1
ZmZlciBieXRlQnVmZmVyKSB7Ci0gICAgICBzdXBlcihieXRlQnVmZmVyLmFycmF5KCksIGJ5dGVC
dWZmZXIuYXJyYXlPZmZzZXQoKSArIGJ5dGVCdWZmZXIucG9zaXRpb24oKSwKLSAgICAgICAgICBi
eXRlQnVmZmVyLnJlbWFpbmluZygpKTsKLSAgICAgIHRoaXMuYnl0ZUJ1ZmZlciA9IGJ5dGVCdWZm
ZXI7Ci0gICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9IGJ5dGVCdWZmZXIucG9zaXRpb24oKTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBmbHVzaCgpIHsKLSAgICAg
IC8vIFVwZGF0ZSB0aGUgcG9zaXRpb24gb24gdGhlIGJ1ZmZlci4KLSAgICAgIGJ5dGVCdWZmZXIu
cG9zaXRpb24oaW5pdGlhbFBvc2l0aW9uICsgZ2V0VG90YWxCeXRlc1dyaXR0ZW4oKSk7Ci0gICAg
fQotICB9Ci0KLSAgLyoqCi0gICAqIEEge0BsaW5rIENvZGVkT3V0cHV0U3RyZWFtfSB0aGF0IHdy
aXRlcyBkaXJlY3RseSB0byBhIHtAbGluayBCeXRlQnVmZmVyfS4KLSAgICovCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGNsYXNzIE5pb0VuY29kZXIgZXh0ZW5kcyBDb2RlZE91dHB1dFN0cmVhbSB7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBCeXRlQnVmZmVyIG9yaWdpbmFsQnVmZmVyOwotICAgIHByaXZh
dGUgZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgaW5pdGlh
bFBvc2l0aW9uOwotCi0gICAgTmlvRW5jb2RlcihCeXRlQnVmZmVyIGJ1ZmZlcikgewotICAgICAg
dGhpcy5vcmlnaW5hbEJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVy
LmR1cGxpY2F0ZSgpLm9yZGVyKEJ5dGVPcmRlci5MSVRUTEVfRU5ESUFOKTsKLSAgICAgIGluaXRp
YWxQb3NpdGlvbiA9IGJ1ZmZlci5wb3NpdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIHdyaXRlVGFnKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50
IHdpcmVUeXBlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVVSW50MzJOb1RhZyhX
aXJlRm9ybWF0Lm1ha2VUYWcoZmllbGROdW1iZXIsIHdpcmVUeXBlKSk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVJbnQzMihmaW5hbCBpbnQgZmllbGROdW1i
ZXIsIGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVGFn
KGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX1ZBUklOVCk7Ci0gICAgICB3cml0ZUlu
dDMyTm9UYWcodmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IHdyaXRlVUludDMyKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHZhbHVlKSB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQu
V0lSRVRZUEVfVkFSSU5UKTsKLSAgICAgIHdyaXRlVUludDMyTm9UYWcodmFsdWUpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlRml4ZWQzMihmaW5hbCBpbnQg
ZmllbGROdW1iZXIsIGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAg
IHdyaXRlVGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0ZJWEVEMzIpOwotICAg
ICAgd3JpdGVGaXhlZDMyTm9UYWcodmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIHdyaXRlVUludDY0KGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgbG9u
ZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVGFnKGZpZWxkTnVtYmVy
LCBXaXJlRm9ybWF0LldJUkVUWVBFX1ZBUklOVCk7Ci0gICAgICB3cml0ZVVJbnQ2NE5vVGFnKHZh
bHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUZpeGVk
NjQoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBsb25nIHZhbHVlKSB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVf
RklYRUQ2NCk7Ci0gICAgICB3cml0ZUZpeGVkNjROb1RhZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVCb29sKGZpbmFsIGludCBmaWVsZE51bWJl
ciwgZmluYWwgYm9vbGVhbiB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRl
VGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX1ZBUklOVCk7Ci0gICAgICB3cml0
ZSgoYnl0ZSkgKHZhbHVlID8gMSA6IDApKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCB3cml0ZVN0cmluZyhmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIFN0cmlu
ZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVGFnKGZpZWxkTnVtYmVy
LCBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpOwotICAgICAgd3JpdGVTdHJp
bmdOb1RhZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
d3JpdGVCeXRlcyhmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIEJ5dGVTdHJpbmcgdmFsdWUp
IHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZv
cm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgICAgIHdyaXRlQnl0ZXNOb1RhZyh2
YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVCeXRl
QXJyYXkoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBieXRlW10gdmFsdWUpIHRocm93cyBJ
T0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZUJ5dGVBcnJheShmaWVsZE51bWJlciwgdmFsdWUsIDAs
IHZhbHVlLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
d3JpdGVCeXRlQXJyYXkoCi0gICAgICAgIGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgYnl0
ZVtdIHZhbHVlLCBmaW5hbCBpbnQgb2Zmc2V0LCBmaW5hbCBpbnQgbGVuZ3RoKQotICAgICAgICB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3Jt
YXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCk7Ci0gICAgICB3cml0ZUJ5dGVBcnJheU5vVGFn
KHZhbHVlLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgd3JpdGVCeXRlQnVmZmVyKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgQnl0
ZUJ1ZmZlciB2YWx1ZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRl
VGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpOwot
ICAgICAgd3JpdGVVSW50MzJOb1RhZyh2YWx1ZS5jYXBhY2l0eSgpKTsKLSAgICAgIHdyaXRlUmF3
Qnl0ZXModmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdy
aXRlTWVzc2FnZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIE1lc3NhZ2VMaXRlIHZhbHVl
KQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVUYWcoZmllbGROdW1i
ZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCk7Ci0gICAgICB3cml0ZU1l
c3NhZ2VOb1RhZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgd3JpdGVNZXNzYWdlU2V0RXh0ZW5zaW9uKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwg
TWVzc2FnZUxpdGUgdmFsdWUpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3
cml0ZVRhZyhXaXJlRm9ybWF0Lk1FU1NBR0VfU0VUX0lURU0sIFdpcmVGb3JtYXQuV0lSRVRZUEVf
U1RBUlRfR1JPVVApOwotICAgICAgd3JpdGVVSW50MzIoV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9U
WVBFX0lELCBmaWVsZE51bWJlcik7Ci0gICAgICB3cml0ZU1lc3NhZ2UoV2lyZUZvcm1hdC5NRVNT
QUdFX1NFVF9NRVNTQUdFLCB2YWx1ZSk7Ci0gICAgICB3cml0ZVRhZyhXaXJlRm9ybWF0Lk1FU1NB
R0VfU0VUX0lURU0sIFdpcmVGb3JtYXQuV0lSRVRZUEVfRU5EX0dST1VQKTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZVJhd01lc3NhZ2VTZXRFeHRlbnNpb24o
ZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBCeXRlU3RyaW5nIHZhbHVlKQotICAgICAgICB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVUYWcoV2lyZUZvcm1hdC5NRVNTQUdFX1NF
VF9JVEVNLCBXaXJlRm9ybWF0LldJUkVUWVBFX1NUQVJUX0dST1VQKTsKLSAgICAgIHdyaXRlVUlu
dDMyKFdpcmVGb3JtYXQuTUVTU0FHRV9TRVRfVFlQRV9JRCwgZmllbGROdW1iZXIpOwotICAgICAg
d3JpdGVCeXRlcyhXaXJlRm9ybWF0Lk1FU1NBR0VfU0VUX01FU1NBR0UsIHZhbHVlKTsKLSAgICAg
IHdyaXRlVGFnKFdpcmVGb3JtYXQuTUVTU0FHRV9TRVRfSVRFTSwgV2lyZUZvcm1hdC5XSVJFVFlQ
RV9FTkRfR1JPVVApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdy
aXRlTWVzc2FnZU5vVGFnKGZpbmFsIE1lc3NhZ2VMaXRlIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRp
b24gewotICAgICAgd3JpdGVVSW50MzJOb1RhZyh2YWx1ZS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsK
LSAgICAgIHZhbHVlLndyaXRlVG8odGhpcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHZvaWQgd3JpdGUoYnl0ZSB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAg
IHRyeSB7Ci0gICAgICAgIGJ1ZmZlci5wdXQodmFsdWUpOwotICAgICAgfSBjYXRjaCAoQnVmZmVy
T3ZlcmZsb3dFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgT3V0T2ZTcGFjZUV4Y2Vw
dGlvbihlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9p
ZCB3cml0ZUJ5dGVzTm9UYWcoZmluYWwgQnl0ZVN0cmluZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICAgIHdyaXRlVUludDMyTm9UYWcodmFsdWUuc2l6ZSgpKTsKLSAgICAgIHZhbHVl
LndyaXRlVG8odGhpcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
d3JpdGVCeXRlQXJyYXlOb1RhZyhmaW5hbCBieXRlW10gdmFsdWUsIGludCBvZmZzZXQsIGludCBs
ZW5ndGgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVVJbnQzMk5vVGFnKGxlbmd0
aCk7Ci0gICAgICB3cml0ZSh2YWx1ZSwgb2Zmc2V0LCBsZW5ndGgpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlUmF3Qnl0ZXMoZmluYWwgQnl0ZUJ1ZmZlciB2
YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGlmICh2YWx1ZS5oYXNBcnJheSgpKSB7
Ci0gICAgICAgIHdyaXRlKHZhbHVlLmFycmF5KCksIHZhbHVlLmFycmF5T2Zmc2V0KCksIHZhbHVl
LmNhcGFjaXR5KCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgQnl0ZUJ1ZmZlciBkdXBsaWNh
dGVkID0gdmFsdWUuZHVwbGljYXRlKCk7Ci0gICAgICAgIGR1cGxpY2F0ZWQuY2xlYXIoKTsKLSAg
ICAgICAgd3JpdGUoZHVwbGljYXRlZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIHZvaWQgd3JpdGVJbnQzMk5vVGFnKGludCB2YWx1ZSkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICAgIGlmICh2YWx1ZSA+PSAwKSB7Ci0gICAgICAgIHdyaXRlVUludDMyTm9U
YWcodmFsdWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTXVzdCBzaWduLWV4dGVuZC4K
LSAgICAgICAgd3JpdGVVSW50NjROb1RhZyh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVVSW50MzJOb1RhZyhpbnQgdmFsdWUpIHRo
cm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewotICAgICAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICAgIGlmICgodmFsdWUgJiB+MHg3RikgPT0gMCkgewotICAgICAgICAgICAgYnVmZmVy
LnB1dCgoYnl0ZSkgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBidWZmZXIucHV0KChieXRlKSAoKHZhbHVlICYgMHg3RikgfCAweDgw
KSk7Ci0gICAgICAgICAgICB2YWx1ZSA+Pj49IDc7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICB9IGNhdGNoIChCdWZmZXJPdmVyZmxvd0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93
IG5ldyBPdXRPZlNwYWNlRXhjZXB0aW9uKGUpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlRml4ZWQzMk5vVGFnKGludCB2YWx1ZSkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGJ1ZmZlci5wdXRJbnQodmFsdWUp
OwotICAgICAgfSBjYXRjaCAoQnVmZmVyT3ZlcmZsb3dFeGNlcHRpb24gZSkgewotICAgICAgICB0
aHJvdyBuZXcgT3V0T2ZTcGFjZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZVVJbnQ2NE5vVGFnKGxvbmcgdmFsdWUpIHRo
cm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewotICAgICAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICAgIGlmICgodmFsdWUgJiB+MHg3RkwpID09IDApIHsKLSAgICAgICAgICAgIGJ1ZmZl
ci5wdXQoKGJ5dGUpIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgYnVmZmVyLnB1dCgoYnl0ZSkgKCgoaW50KSB2YWx1ZSAmIDB4N0Yp
IHwgMHg4MCkpOwotICAgICAgICAgICAgdmFsdWUgPj4+PSA3OwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfSBjYXRjaCAoQnVmZmVyT3ZlcmZsb3dFeGNlcHRpb24gZSkgewotICAgICAg
ICB0aHJvdyBuZXcgT3V0T2ZTcGFjZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUZpeGVkNjROb1RhZyhsb25nIHZhbHVl
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgYnVmZmVyLnB1dExv
bmcodmFsdWUpOwotICAgICAgfSBjYXRjaCAoQnVmZmVyT3ZlcmZsb3dFeGNlcHRpb24gZSkgewot
ICAgICAgICB0aHJvdyBuZXcgT3V0T2ZTcGFjZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZShieXRlW10gdmFsdWUsIGlu
dCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewot
ICAgICAgICBidWZmZXIucHV0KHZhbHVlLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgICB9IGNhdGNo
IChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IE91dE9m
U3BhY2VFeGNlcHRpb24oZSk7Ci0gICAgICB9IGNhdGNoIChCdWZmZXJPdmVyZmxvd0V4Y2VwdGlv
biBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBPdXRPZlNwYWNlRXhjZXB0aW9uKGUpOwotICAgICAg
fQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlTGF6eShieXRl
W10gdmFsdWUsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0g
ICAgICB3cml0ZSh2YWx1ZSwgb2Zmc2V0LCBsZW5ndGgpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlKEJ5dGVCdWZmZXIgdmFsdWUpIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgICB0cnkgewotICAgICAgICBidWZmZXIucHV0KHZhbHVlKTsKLSAgICAgIH0g
Y2F0Y2ggKEJ1ZmZlck92ZXJmbG93RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IE91
dE9mU3BhY2VFeGNlcHRpb24oZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgd3JpdGVMYXp5KEJ5dGVCdWZmZXIgdmFsdWUpIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgICB3cml0ZSh2YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHZvaWQgd3JpdGVTdHJpbmdOb1RhZyhTdHJpbmcgdmFsdWUpIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgICBmaW5hbCBpbnQgc3RhcnRQb3MgPSBidWZmZXIucG9zaXRpb24oKTsKLSAg
ICAgIHRyeSB7Ci0gICAgICAgIC8vIFVURi04IGJ5dGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaXMg
YXQgbGVhc3QgaXRzIFVURi0xNiBjb2RlIHVuaXQgbGVuZ3RoICh2YWx1ZS5sZW5ndGgoKSksCi0g
ICAgICAgIC8vIGFuZCBhdCBtb3N0IDMgdGltZXMgb2YgaXQuIFdlIHRha2UgYWR2YW50YWdlIG9m
IHRoaXMgaW4gYm90aCBicmFuY2hlcyBiZWxvdy4KLSAgICAgICAgZmluYWwgaW50IG1heEVuY29k
ZWRTaXplID0gdmFsdWUubGVuZ3RoKCkgKiBVdGY4Lk1BWF9CWVRFU19QRVJfQ0hBUjsKLSAgICAg
ICAgZmluYWwgaW50IG1heExlbmd0aFZhckludFNpemUgPSBjb21wdXRlVUludDMyU2l6ZU5vVGFn
KG1heEVuY29kZWRTaXplKTsKLSAgICAgICAgZmluYWwgaW50IG1pbkxlbmd0aFZhckludFNpemUg
PSBjb21wdXRlVUludDMyU2l6ZU5vVGFnKHZhbHVlLmxlbmd0aCgpKTsKLSAgICAgICAgaWYgKG1p
bkxlbmd0aFZhckludFNpemUgPT0gbWF4TGVuZ3RoVmFySW50U2l6ZSkgewotICAgICAgICAgIC8v
IFNhdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIGluY3JlbWVudCBwYXN0IHRoZSBsZW5ndGgg
ZmllbGQuIFdlJ2xsIGNvbWUgYmFjawotICAgICAgICAgIC8vIGFuZCB3cml0ZSB0aGUgbGVuZ3Ro
IGZpZWxkIGFmdGVyIHRoZSBlbmNvZGluZyBpcyBjb21wbGV0ZS4KLSAgICAgICAgICBmaW5hbCBp
bnQgc3RhcnRPZkJ5dGVzID0gYnVmZmVyLnBvc2l0aW9uKCkgKyBtaW5MZW5ndGhWYXJJbnRTaXpl
OwotICAgICAgICAgIGJ1ZmZlci5wb3NpdGlvbihzdGFydE9mQnl0ZXMpOwotCi0gICAgICAgICAg
Ly8gRW5jb2RlIHRoZSBzdHJpbmcuCi0gICAgICAgICAgZW5jb2RlKHZhbHVlKTsKLQotICAgICAg
ICAgIC8vIE5vdyBnbyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgYW5kIHdyaXRlIHRoZSBsZW5ndGgu
Ci0gICAgICAgICAgaW50IGVuZE9mQnl0ZXMgPSBidWZmZXIucG9zaXRpb24oKTsKLSAgICAgICAg
ICBidWZmZXIucG9zaXRpb24oc3RhcnRQb3MpOwotICAgICAgICAgIHdyaXRlVUludDMyTm9UYWco
ZW5kT2ZCeXRlcyAtIHN0YXJ0T2ZCeXRlcyk7Ci0KLSAgICAgICAgICAvLyBSZXBvc2l0aW9uIHRo
ZSBidWZmZXIgcGFzdCB0aGUgd3JpdHRlbiBkYXRhLgotICAgICAgICAgIGJ1ZmZlci5wb3NpdGlv
bihlbmRPZkJ5dGVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmaW5hbCBpbnQgbGVu
Z3RoID0gVXRmOC5lbmNvZGVkTGVuZ3RoKHZhbHVlKTsKLSAgICAgICAgICB3cml0ZVVJbnQzMk5v
VGFnKGxlbmd0aCk7Ci0gICAgICAgICAgZW5jb2RlKHZhbHVlKTsKLSAgICAgICAgfQotICAgICAg
fSBjYXRjaCAoVW5wYWlyZWRTdXJyb2dhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAvLyBSb2xs
IGJhY2sgdGhlIGNoYW5nZSBhbmQgY29udmVydCB0byBhbiBJT0V4Y2VwdGlvbi4KLSAgICAgICAg
YnVmZmVyLnBvc2l0aW9uKHN0YXJ0UG9zKTsKLQotICAgICAgICAvLyBUT0RPKG5hdGhhbm1pdHRs
ZXIpOiBXZSBzaG91bGQgdGhyb3cgYW4gSU9FeGNlcHRpb24gaGVyZSBpbnN0ZWFkLgotICAgICAg
ICBpbmVmZmljaWVudFdyaXRlU3RyaW5nTm9UYWcodmFsdWUsIGUpOwotICAgICAgfSBjYXRjaCAo
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8gVGhyb3duIGJ5IGJ1ZmZl
ci5wb3NpdGlvbigpIGlmIG91dCBvZiByYW5nZS4KLSAgICAgICAgdGhyb3cgbmV3IE91dE9mU3Bh
Y2VFeGNlcHRpb24oZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgZmx1c2goKSB7Ci0gICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBv
cmlnaW5hbCBidWZmZXIuCi0gICAgICBvcmlnaW5hbEJ1ZmZlci5wb3NpdGlvbihidWZmZXIucG9z
aXRpb24oKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBzcGFjZUxl
ZnQoKSB7Ci0gICAgICByZXR1cm4gYnVmZmVyLnJlbWFpbmluZygpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0VG90YWxCeXRlc1dyaXR0ZW4oKSB7Ci0gICAgICBy
ZXR1cm4gYnVmZmVyLnBvc2l0aW9uKCkgLSBpbml0aWFsUG9zaXRpb247Ci0gICAgfQotCi0gICAg
cHJpdmF0ZSB2b2lkIGVuY29kZShTdHJpbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0g
ICAgICB0cnkgewotICAgICAgICBVdGY4LmVuY29kZVV0ZjgodmFsdWUsIGJ1ZmZlcik7Ci0gICAg
ICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cg
bmV3IE91dE9mU3BhY2VFeGNlcHRpb24oZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoq
Ci0gICAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGJ1ZmZlcmVkIGVuY29kZXJzLgotICAgKi8K
LSAgcHJpdmF0ZSBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgQWJzdHJhY3RCdWZmZXJlZEVuY29kZXIg
ZXh0ZW5kcyBDb2RlZE91dHB1dFN0cmVhbSB7Ci0gICAgZmluYWwgYnl0ZVtdIGJ1ZmZlcjsKLSAg
ICBmaW5hbCBpbnQgbGltaXQ7Ci0gICAgaW50IHBvc2l0aW9uOwotICAgIGludCB0b3RhbEJ5dGVz
V3JpdHRlbjsKLQotICAgIEFic3RyYWN0QnVmZmVyZWRFbmNvZGVyKGludCBidWZmZXJTaXplKSB7
Ci0gICAgICBpZiAoYnVmZmVyU2l6ZSA8IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxB
cmd1bWVudEV4Y2VwdGlvbigiYnVmZmVyU2l6ZSBtdXN0IGJlID49IDAiKTsKLSAgICAgIH0KLSAg
ICAgIC8vIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgcmVxdWlyZSB0aGF0IHRoZSBidWZmZXIgYmUg
YWJsZSB0byBzdG9yZSBhdCBsZWFzdCAyCi0gICAgICAvLyB2YXJpbnRzIHNvIHRoYXQgd2UgY2Fu
IGJ1ZmZlciBhbnkgaW50ZWdlciB3cml0ZSAodGFnICsgdmFsdWUpLiBUaGlzIHJlZHVjZXMgdGhl
Ci0gICAgICAvLyBudW1iZXIgb2YgcmFuZ2UgY2hlY2tzIGZvciBhIHNpbmdsZSB3cml0ZSB0byAx
IChpLmUuIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UKLSAgICAgIC8vIHRvIGJ1ZmZlciB0
aGUgdGFnK3ZhbHVlLCBmbHVzaCBhbmQgdGhlbiBidWZmZXIgaXQpLgotICAgICAgdGhpcy5idWZm
ZXIgPSBuZXcgYnl0ZVttYXgoYnVmZmVyU2l6ZSwgTUFYX1ZBUklOVF9TSVpFICogMildOwotICAg
ICAgdGhpcy5saW1pdCA9IGJ1ZmZlci5sZW5ndGg7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIGZpbmFsIGludCBzcGFjZUxlZnQoKSB7Ci0gICAgICB0aHJvdyBuZXcgVW5zdXBw
b3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgInNwYWNlTGVmdCgpIGNhbiBvbmx5
IGJlIGNhbGxlZCBvbiBDb2RlZE91dHB1dFN0cmVhbXMgdGhhdCBhcmUgIgotICAgICAgICAgICAg
ICArICJ3cml0aW5nIHRvIGEgZmxhdCBhcnJheSBvciBCeXRlQnVmZmVyLiIpOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VG90YWxCeXRlc1dyaXR0ZW4o
KSB7Ci0gICAgICByZXR1cm4gdG90YWxCeXRlc1dyaXR0ZW47Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogVGhpcyBtZXRob2QgZG9lcyBub3QgcGVyZm9ybSBib3VuZHMgY2hlY2tpbmcgb24gdGhl
IGFycmF5LiBDaGVja2luZyBhcnJheSBib3VuZHMgaXMgdGhlCi0gICAgICogcmVzcG9uc2liaWxp
dHkgb2YgdGhlIGNhbGxlci4KLSAgICAgKi8KLSAgICBmaW5hbCB2b2lkIGJ1ZmZlcihieXRlIHZh
bHVlKSB7Ci0gICAgICBidWZmZXJbcG9zaXRpb24rK10gPSB2YWx1ZTsKLSAgICAgIHRvdGFsQnl0
ZXNXcml0dGVuKys7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZG9lcyBu
b3QgcGVyZm9ybSBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGFycmF5LiBDaGVja2luZyBhcnJheSBi
b3VuZHMgaXMgdGhlCi0gICAgICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlci4KLSAgICAg
Ki8KLSAgICBmaW5hbCB2b2lkIGJ1ZmZlclRhZyhmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFs
IGludCB3aXJlVHlwZSkgewotICAgICAgYnVmZmVyVUludDMyTm9UYWcoV2lyZUZvcm1hdC5tYWtl
VGFnKGZpZWxkTnVtYmVyLCB3aXJlVHlwZSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRo
aXMgbWV0aG9kIGRvZXMgbm90IHBlcmZvcm0gYm91bmRzIGNoZWNraW5nIG9uIHRoZSBhcnJheS4g
Q2hlY2tpbmcgYXJyYXkgYm91bmRzIGlzIHRoZQotICAgICAqIHJlc3BvbnNpYmlsaXR5IG9mIHRo
ZSBjYWxsZXIuCi0gICAgICovCi0gICAgZmluYWwgdm9pZCBidWZmZXJJbnQzMk5vVGFnKGZpbmFs
IGludCB2YWx1ZSkgewotICAgICAgaWYgKHZhbHVlID49IDApIHsKLSAgICAgICAgYnVmZmVyVUlu
dDMyTm9UYWcodmFsdWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTXVzdCBzaWduLWV4
dGVuZC4KLSAgICAgICAgYnVmZmVyVUludDY0Tm9UYWcodmFsdWUpOwotICAgICAgfQotICAgIH0K
LQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcmZvcm0gYm91bmRzIGNo
ZWNraW5nIG9uIHRoZSBhcnJheS4gQ2hlY2tpbmcgYXJyYXkgYm91bmRzIGlzIHRoZQotICAgICAq
IHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIuCi0gICAgICovCi0gICAgZmluYWwgdm9pZCBi
dWZmZXJVSW50MzJOb1RhZyhpbnQgdmFsdWUpIHsKLSAgICAgIGlmIChIQVNfVU5TQUZFX0FSUkFZ
X09QRVJBVElPTlMpIHsKLSAgICAgICAgZmluYWwgbG9uZyBvcmlnaW5hbFBvcyA9IEFSUkFZX0JB
U0VfT0ZGU0VUICsgcG9zaXRpb247Ci0gICAgICAgIGxvbmcgcG9zID0gb3JpZ2luYWxQb3M7Ci0g
ICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgaWYgKCh2YWx1ZSAmIH4weDdGKSA9PSAw
KSB7Ci0gICAgICAgICAgICBVTlNBRkUucHV0Qnl0ZShidWZmZXIsIHBvcysrLCAoYnl0ZSkgdmFs
dWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IFVOU0FGRS5wdXRCeXRlKGJ1ZmZlciwgcG9zKyssIChieXRlKSAoKHZhbHVlICYgMHg3RikgfCAw
eDgwKSk7Ci0gICAgICAgICAgICB2YWx1ZSA+Pj49IDc7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGludCBkZWx0YSA9IChpbnQpIChwb3MgLSBvcmlnaW5hbFBvcyk7Ci0gICAgICAg
IHBvc2l0aW9uICs9IGRlbHRhOwotICAgICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBkZWx0YTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgaWYgKCh2
YWx1ZSAmIH4weDdGKSA9PSAwKSB7Ci0gICAgICAgICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAo
Ynl0ZSkgdmFsdWU7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzV3JpdHRlbisrOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBidWZmZXJbcG9zaXRp
b24rK10gPSAoYnl0ZSkgKCh2YWx1ZSAmIDB4N0YpIHwgMHg4MCk7Ci0gICAgICAgICAgICB0b3Rh
bEJ5dGVzV3JpdHRlbisrOwotICAgICAgICAgICAgdmFsdWUgPj4+PSA3OwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9k
IGRvZXMgbm90IHBlcmZvcm0gYm91bmRzIGNoZWNraW5nIG9uIHRoZSBhcnJheS4gQ2hlY2tpbmcg
YXJyYXkgYm91bmRzIGlzIHRoZQotICAgICAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIu
Ci0gICAgICovCi0gICAgZmluYWwgdm9pZCBidWZmZXJVSW50NjROb1RhZyhsb25nIHZhbHVlKSB7
Ci0gICAgICBpZiAoSEFTX1VOU0FGRV9BUlJBWV9PUEVSQVRJT05TKSB7Ci0gICAgICAgIGZpbmFs
IGxvbmcgb3JpZ2luYWxQb3MgPSBBUlJBWV9CQVNFX09GRlNFVCArIHBvc2l0aW9uOwotICAgICAg
ICBsb25nIHBvcyA9IG9yaWdpbmFsUG9zOwotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICAgIGlmICgodmFsdWUgJiB+MHg3RkwpID09IDApIHsKLSAgICAgICAgICAgIFVOU0FGRS5wdXRC
eXRlKGJ1ZmZlciwgcG9zKyssIChieXRlKSB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVU5TQUZFLnB1dEJ5dGUoYnVmZmVyLCBwb3Mr
KywgKGJ5dGUpICgoKGludCkgdmFsdWUgJiAweDdGKSB8IDB4ODApKTsKLSAgICAgICAgICAgIHZh
bHVlID4+Pj0gNzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGRlbHRhID0g
KGludCkgKHBvcyAtIG9yaWdpbmFsUG9zKTsKLSAgICAgICAgcG9zaXRpb24gKz0gZGVsdGE7Ci0g
ICAgICAgIHRvdGFsQnl0ZXNXcml0dGVuICs9IGRlbHRhOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICBpZiAoKHZhbHVlICYgfjB4N0ZMKSA9PSAwKSB7
Ci0gICAgICAgICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAoYnl0ZSkgdmFsdWU7Ci0gICAgICAg
ICAgICB0b3RhbEJ5dGVzV3JpdHRlbisrOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAoYnl0ZSkgKCgoaW50
KSB2YWx1ZSAmIDB4N0YpIHwgMHg4MCk7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzV3JpdHRlbisr
OwotICAgICAgICAgICAgdmFsdWUgPj4+PSA3OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcmZv
cm0gYm91bmRzIGNoZWNraW5nIG9uIHRoZSBhcnJheS4gQ2hlY2tpbmcgYXJyYXkgYm91bmRzIGlz
IHRoZQotICAgICAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIuCi0gICAgICovCi0gICAg
ZmluYWwgdm9pZCBidWZmZXJGaXhlZDMyTm9UYWcoaW50IHZhbHVlKSB7Ci0gICAgICBidWZmZXJb
cG9zaXRpb24rK10gPSAoYnl0ZSkgKHZhbHVlICYgMHhGRik7Ci0gICAgICBidWZmZXJbcG9zaXRp
b24rK10gPSAoYnl0ZSkgKCh2YWx1ZSA+PiA4KSAmIDB4RkYpOwotICAgICAgYnVmZmVyW3Bvc2l0
aW9uKytdID0gKGJ5dGUpICgodmFsdWUgPj4gMTYpICYgMHhGRik7Ci0gICAgICBidWZmZXJbcG9z
aXRpb24rK10gPSAoYnl0ZSkgKCh2YWx1ZSA+PiAyNCkgJiAweEZGKTsKLSAgICAgIHRvdGFsQnl0
ZXNXcml0dGVuICs9IEZJWEVEXzMyX1NJWkU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhp
cyBtZXRob2QgZG9lcyBub3QgcGVyZm9ybSBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGFycmF5LiBD
aGVja2luZyBhcnJheSBib3VuZHMgaXMgdGhlCi0gICAgICogcmVzcG9uc2liaWxpdHkgb2YgdGhl
IGNhbGxlci4KLSAgICAgKi8KLSAgICBmaW5hbCB2b2lkIGJ1ZmZlckZpeGVkNjROb1RhZyhsb25n
IHZhbHVlKSB7Ci0gICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAoYnl0ZSkgKHZhbHVlICYgMHhG
Rik7Ci0gICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAoYnl0ZSkgKCh2YWx1ZSA+PiA4KSAmIDB4
RkYpOwotICAgICAgYnVmZmVyW3Bvc2l0aW9uKytdID0gKGJ5dGUpICgodmFsdWUgPj4gMTYpICYg
MHhGRik7Ci0gICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAoYnl0ZSkgKCh2YWx1ZSA+PiAyNCkg
JiAweEZGKTsKLSAgICAgIGJ1ZmZlcltwb3NpdGlvbisrXSA9IChieXRlKSAoKGludCkgKHZhbHVl
ID4+IDMyKSAmIDB4RkYpOwotICAgICAgYnVmZmVyW3Bvc2l0aW9uKytdID0gKGJ5dGUpICgoaW50
KSAodmFsdWUgPj4gNDApICYgMHhGRik7Ci0gICAgICBidWZmZXJbcG9zaXRpb24rK10gPSAoYnl0
ZSkgKChpbnQpICh2YWx1ZSA+PiA0OCkgJiAweEZGKTsKLSAgICAgIGJ1ZmZlcltwb3NpdGlvbisr
XSA9IChieXRlKSAoKGludCkgKHZhbHVlID4+IDU2KSAmIDB4RkYpOwotICAgICAgdG90YWxCeXRl
c1dyaXR0ZW4gKz0gRklYRURfNjRfU0laRTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQSB7
QGxpbmsgQ29kZWRPdXRwdXRTdHJlYW19IHRoYXQgZGVjb3JhdGVzIGEge0BsaW5rIEJ5dGVPdXRw
dXR9LiBJdCBpbnRlcm5hbCBidWZmZXIgb25seSB0bwotICAgKiBzdXBwb3J0IHN0cmluZyBlbmNv
ZGluZyBvcGVyYXRpb25zLiBBbGwgb3RoZXIgd3JpdGVzIGFyZSBqdXN0IHBhc3NlZCB0aHJvdWdo
IHRvIHRoZQotICAgKiB7QGxpbmsgQnl0ZU91dHB1dH0uCi0gICAqLwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBjbGFzcyBCeXRlT3V0cHV0RW5jb2RlciBleHRlbmRzIEFic3RyYWN0QnVmZmVyZWRF
bmNvZGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIEJ5dGVPdXRwdXQgb3V0OwotCi0gICAgQnl0ZU91
dHB1dEVuY29kZXIoQnl0ZU91dHB1dCBvdXQsIGludCBidWZmZXJTaXplKSB7Ci0gICAgICBzdXBl
cihidWZmZXJTaXplKTsKLSAgICAgIGlmIChvdXQgPT0gbnVsbCkgewotICAgICAgICB0aHJvdyBu
ZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oIm91dCIpOwotICAgICAgfQotICAgICAgdGhpcy5vdXQg
PSBvdXQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVUYWco
ZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBpbnQgd2lyZVR5cGUpIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgICB3cml0ZVVJbnQzMk5vVGFnKFdpcmVGb3JtYXQubWFrZVRhZyhmaWVsZE51
bWJlciwgd2lyZVR5cGUpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9p
ZCB3cml0ZUludDMyKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHZhbHVlKSB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgICAgZmx1c2hJZk5vdEF2YWlsYWJsZShNQVhfVkFSSU5UX1NJ
WkUgKiAyKTsKLSAgICAgIGJ1ZmZlclRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQ
RV9WQVJJTlQpOwotICAgICAgYnVmZmVySW50MzJOb1RhZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVVSW50MzIoZmluYWwgaW50IGZpZWxkTnVt
YmVyLCBmaW5hbCBpbnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBmbHVzaElm
Tm90QXZhaWxhYmxlKE1BWF9WQVJJTlRfU0laRSAqIDIpOwotICAgICAgYnVmZmVyVGFnKGZpZWxk
TnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX1ZBUklOVCk7Ci0gICAgICBidWZmZXJVSW50MzJO
b1RhZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3Jp
dGVGaXhlZDMyKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHZhbHVlKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgICAgZmx1c2hJZk5vdEF2YWlsYWJsZShNQVhfVkFSSU5UX1NJWkUg
KyBGSVhFRF8zMl9TSVpFKTsKLSAgICAgIGJ1ZmZlclRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1h
dC5XSVJFVFlQRV9GSVhFRDMyKTsKLSAgICAgIGJ1ZmZlckZpeGVkMzJOb1RhZyh2YWx1ZSk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVVSW50NjQoZmluYWwg
aW50IGZpZWxkTnVtYmVyLCBmaW5hbCBsb25nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewot
ICAgICAgZmx1c2hJZk5vdEF2YWlsYWJsZShNQVhfVkFSSU5UX1NJWkUgKiAyKTsKLSAgICAgIGJ1
ZmZlclRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQpOwotICAgICAg
YnVmZmVyVUludDY0Tm9UYWcodmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyB2b2lkIHdyaXRlRml4ZWQ2NChmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGxvbmcg
dmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBmbHVzaElmTm90QXZhaWxhYmxlKE1B
WF9WQVJJTlRfU0laRSArIEZJWEVEXzY0X1NJWkUpOwotICAgICAgYnVmZmVyVGFnKGZpZWxkTnVt
YmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0ZJWEVENjQpOwotICAgICAgYnVmZmVyRml4ZWQ2NE5v
VGFnKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0
ZUJvb2woZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBib29sZWFuIHZhbHVlKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgICAgZmx1c2hJZk5vdEF2YWlsYWJsZShNQVhfVkFSSU5UX1NJWkUg
KyAxKTsKLSAgICAgIGJ1ZmZlclRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9W
QVJJTlQpOwotICAgICAgYnVmZmVyKChieXRlKSAodmFsdWUgPyAxIDogMCkpOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlU3RyaW5nKGZpbmFsIGludCBmaWVs
ZE51bWJlciwgZmluYWwgU3RyaW5nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAg
d3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRF
RCk7Ci0gICAgICB3cml0ZVN0cmluZ05vVGFnKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUJ5dGVzKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmlu
YWwgQnl0ZVN0cmluZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVGFn
KGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpOwotICAg
ICAgd3JpdGVCeXRlc05vVGFnKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCB3cml0ZUJ5dGVBcnJheShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGJ5
dGVbXSB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlQnl0ZUFycmF5KGZp
ZWxkTnVtYmVyLCB2YWx1ZSwgMCwgdmFsdWUubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUJ5dGVBcnJheSgKLSAgICAgICAgZmluYWwgaW50IGZp
ZWxkTnVtYmVyLCBmaW5hbCBieXRlW10gdmFsdWUsIGZpbmFsIGludCBvZmZzZXQsIGZpbmFsIGlu
dCBsZW5ndGgpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVRhZyhm
aWVsZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgICAg
IHdyaXRlQnl0ZUFycmF5Tm9UYWcodmFsdWUsIG9mZnNldCwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUJ5dGVCdWZmZXIoZmluYWwgaW50IGZp
ZWxkTnVtYmVyLCBmaW5hbCBCeXRlQnVmZmVyIHZhbHVlKQotICAgICAgICB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVf
TEVOR1RIX0RFTElNSVRFRCk7Ci0gICAgICB3cml0ZVVJbnQzMk5vVGFnKHZhbHVlLmNhcGFjaXR5
KCkpOwotICAgICAgd3JpdGVSYXdCeXRlcyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIHZvaWQgd3JpdGVCeXRlc05vVGFnKGZpbmFsIEJ5dGVTdHJpbmcgdmFsdWUp
IHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVVJbnQzMk5vVGFnKHZhbHVlLnNpemUo
KSk7Ci0gICAgICB2YWx1ZS53cml0ZVRvKHRoaXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZUFycmF5Tm9UYWcoZmluYWwgYnl0ZVtdIHZhbHVlLCBp
bnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVV
SW50MzJOb1RhZyhsZW5ndGgpOwotICAgICAgd3JpdGUodmFsdWUsIG9mZnNldCwgbGVuZ3RoKTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZVJhd0J5dGVzKGZp
bmFsIEJ5dGVCdWZmZXIgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBpZiAodmFs
dWUuaGFzQXJyYXkoKSkgewotICAgICAgICB3cml0ZSh2YWx1ZS5hcnJheSgpLCB2YWx1ZS5hcnJh
eU9mZnNldCgpLCB2YWx1ZS5jYXBhY2l0eSgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEJ5
dGVCdWZmZXIgZHVwbGljYXRlZCA9IHZhbHVlLmR1cGxpY2F0ZSgpOwotICAgICAgICBkdXBsaWNh
dGVkLmNsZWFyKCk7Ci0gICAgICAgIHdyaXRlKGR1cGxpY2F0ZWQpOwotICAgICAgfQotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlTWVzc2FnZShmaW5hbCBpbnQg
ZmllbGROdW1iZXIsIGZpbmFsIE1lc3NhZ2VMaXRlIHZhbHVlKQotICAgICAgICB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV0lSRVRZ
UEVfTEVOR1RIX0RFTElNSVRFRCk7Ci0gICAgICB3cml0ZU1lc3NhZ2VOb1RhZyh2YWx1ZSk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVNZXNzYWdlU2V0RXh0
ZW5zaW9uKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgTWVzc2FnZUxpdGUgdmFsdWUpCi0g
ICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVRhZyhXaXJlRm9ybWF0Lk1F
U1NBR0VfU0VUX0lURU0sIFdpcmVGb3JtYXQuV0lSRVRZUEVfU1RBUlRfR1JPVVApOwotICAgICAg
d3JpdGVVSW50MzIoV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9UWVBFX0lELCBmaWVsZE51bWJlcik7
Ci0gICAgICB3cml0ZU1lc3NhZ2UoV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9NRVNTQUdFLCB2YWx1
ZSk7Ci0gICAgICB3cml0ZVRhZyhXaXJlRm9ybWF0Lk1FU1NBR0VfU0VUX0lURU0sIFdpcmVGb3Jt
YXQuV0lSRVRZUEVfRU5EX0dST1VQKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCB3cml0ZVJhd01lc3NhZ2VTZXRFeHRlbnNpb24oZmluYWwgaW50IGZpZWxkTnVtYmVy
LCBmaW5hbCBCeXRlU3RyaW5nIHZhbHVlKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewot
ICAgICAgd3JpdGVUYWcoV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9JVEVNLCBXaXJlRm9ybWF0LldJ
UkVUWVBFX1NUQVJUX0dST1VQKTsKLSAgICAgIHdyaXRlVUludDMyKFdpcmVGb3JtYXQuTUVTU0FH
RV9TRVRfVFlQRV9JRCwgZmllbGROdW1iZXIpOwotICAgICAgd3JpdGVCeXRlcyhXaXJlRm9ybWF0
Lk1FU1NBR0VfU0VUX01FU1NBR0UsIHZhbHVlKTsKLSAgICAgIHdyaXRlVGFnKFdpcmVGb3JtYXQu
TUVTU0FHRV9TRVRfSVRFTSwgV2lyZUZvcm1hdC5XSVJFVFlQRV9FTkRfR1JPVVApOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlTWVzc2FnZU5vVGFnKGZpbmFs
IE1lc3NhZ2VMaXRlIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVVSW50
MzJOb1RhZyh2YWx1ZS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICAgIHZhbHVlLndyaXRlVG8o
dGhpcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGUoYnl0
ZSB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGlmIChwb3NpdGlvbiA9PSBsaW1p
dCkgewotICAgICAgICBkb0ZsdXNoKCk7Ci0gICAgICB9Ci0KLSAgICAgIGJ1ZmZlcih2YWx1ZSk7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVJbnQzMk5vVGFn
KGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGlmICh2YWx1ZSA+PSAwKSB7
Ci0gICAgICAgIHdyaXRlVUludDMyTm9UYWcodmFsdWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gTXVzdCBzaWduLWV4dGVuZC4KLSAgICAgICAgd3JpdGVVSW50NjROb1RhZyh2YWx1ZSk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVV
SW50MzJOb1RhZyhpbnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBmbHVzaElm
Tm90QXZhaWxhYmxlKE1BWF9WQVJJTlRfU0laRSk7Ci0gICAgICBidWZmZXJVSW50MzJOb1RhZyh2
YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVGaXhl
ZDMyTm9UYWcoZmluYWwgaW50IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZmx1
c2hJZk5vdEF2YWlsYWJsZShGSVhFRF8zMl9TSVpFKTsKLSAgICAgIGJ1ZmZlckZpeGVkMzJOb1Rh
Zyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVV
SW50NjROb1RhZyhsb25nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZmx1c2hJ
Zk5vdEF2YWlsYWJsZShNQVhfVkFSSU5UX1NJWkUpOwotICAgICAgYnVmZmVyVUludDY0Tm9UYWco
dmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlRml4
ZWQ2NE5vVGFnKGZpbmFsIGxvbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBm
bHVzaElmTm90QXZhaWxhYmxlKEZJWEVEXzY0X1NJWkUpOwotICAgICAgYnVmZmVyRml4ZWQ2NE5v
VGFnKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0
ZVN0cmluZ05vVGFnKFN0cmluZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIC8v
IFVURi04IGJ5dGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaXMgYXQgbGVhc3QgaXRzIFVURi0xNiBj
b2RlIHVuaXQgbGVuZ3RoICh2YWx1ZS5sZW5ndGgoKSksCi0gICAgICAvLyBhbmQgYXQgbW9zdCAz
IHRpbWVzIG9mIGl0LiBXZSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGluIGJvdGggYnJhbmNoZXMg
YmVsb3cuCi0gICAgICBmaW5hbCBpbnQgbWF4TGVuZ3RoID0gdmFsdWUubGVuZ3RoKCkgKiBVdGY4
Lk1BWF9CWVRFU19QRVJfQ0hBUjsKLSAgICAgIGZpbmFsIGludCBtYXhMZW5ndGhWYXJJbnRTaXpl
ID0gY29tcHV0ZVVJbnQzMlNpemVOb1RhZyhtYXhMZW5ndGgpOwotCi0gICAgICAvLyBJZiB3ZSBh
cmUgc3RyZWFtaW5nIGFuZCB0aGUgcG90ZW50aWFsIGxlbmd0aCBpcyB0b28gYmlnIHRvIGZpdCBp
biBvdXIgYnVmZmVyLCB3ZSB0YWtlIHRoZQotICAgICAgLy8gc2xvd2VyIHBhdGguCi0gICAgICBp
ZiAobWF4TGVuZ3RoVmFySW50U2l6ZSArIG1heExlbmd0aCA+IGxpbWl0KSB7Ci0gICAgICAgIC8v
IEFsbG9jYXRlIGEgYnl0ZVtdIHRoYXQgd2Uga25vdyBjYW4gZml0IHRoZSBzdHJpbmcgYW5kIGVu
Y29kZSBpbnRvIGl0LiBTdHJpbmcuZ2V0Qnl0ZXMoKQotICAgICAgICAvLyBkb2VzIHRoZSBzYW1l
IGludGVybmFsbHkgYW5kIHRoZW4gZG9lcyAqYW5vdGhlciBjb3B5KiB0byByZXR1cm4gYSBieXRl
W10gb2YgZXhhY3RseSB0aGUKLSAgICAgICAgLy8gcmlnaHQgc2l6ZS4gV2UgY2FuIHNraXAgdGhh
dCBjb3B5IGFuZCBqdXN0IHdyaXRlUmF3Qnl0ZXMgdXAgdG8gdGhlIGFjdHVhbExlbmd0aCBvZiB0
aGUKLSAgICAgICAgLy8gVVRGLTggZW5jb2RlZCBieXRlcy4KLSAgICAgICAgZmluYWwgYnl0ZVtd
IGVuY29kZWRCeXRlcyA9IG5ldyBieXRlW21heExlbmd0aF07Ci0gICAgICAgIGludCBhY3R1YWxM
ZW5ndGggPSBVdGY4LmVuY29kZSh2YWx1ZSwgZW5jb2RlZEJ5dGVzLCAwLCBtYXhMZW5ndGgpOwot
ICAgICAgICB3cml0ZVVJbnQzMk5vVGFnKGFjdHVhbExlbmd0aCk7Ci0gICAgICAgIHdyaXRlTGF6
eShlbmNvZGVkQnl0ZXMsIDAsIGFjdHVhbExlbmd0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLQotICAgICAgLy8gRmFzdCBwYXRoOiB3ZSBoYXZlIGVub3VnaCBzcGFjZSBhdmFpbGFibGUg
aW4gb3VyIGJ1ZmZlciBmb3IgdGhlIHN0cmluZy4uLgotICAgICAgaWYgKG1heExlbmd0aFZhcklu
dFNpemUgKyBtYXhMZW5ndGggPiBsaW1pdCAtIHBvc2l0aW9uKSB7Ci0gICAgICAgIC8vIEZsdXNo
IHRvIGZyZWUgdXAgc3BhY2UuCi0gICAgICAgIGRvRmx1c2goKTsKLSAgICAgIH0KLQotICAgICAg
ZmluYWwgaW50IG9sZFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICB0cnkgewotICAgICAgICAv
LyBPcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGlzIGxlbmd0aCByZXN1bHRz
IGluIGEgY29uc3RhbnQgdmFyaW50IGxlbmd0aCBhcwotICAgICAgICAvLyB0aGlzIHNhdmVzIGEg
cGFzcyBmb3IgbWVhc3VyaW5nIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KLSAgICAgICAgZmlu
YWwgaW50IG1pbkxlbmd0aFZhckludFNpemUgPSBjb21wdXRlVUludDMyU2l6ZU5vVGFnKHZhbHVl
Lmxlbmd0aCgpKTsKLQotICAgICAgICBpZiAobWluTGVuZ3RoVmFySW50U2l6ZSA9PSBtYXhMZW5n
dGhWYXJJbnRTaXplKSB7Ci0gICAgICAgICAgcG9zaXRpb24gPSBvbGRQb3NpdGlvbiArIG1pbkxl
bmd0aFZhckludFNpemU7Ci0gICAgICAgICAgaW50IG5ld1Bvc2l0aW9uID0gVXRmOC5lbmNvZGUo
dmFsdWUsIGJ1ZmZlciwgcG9zaXRpb24sIGxpbWl0IC0gcG9zaXRpb24pOwotICAgICAgICAgIC8v
IFNpbmNlIHRoaXMgY2xhc3MgaXMgc3RhdGVmdWwgYW5kIHRyYWNrcyB0aGUgcG9zaXRpb24sIHdl
IHJld2luZCBhbmQgc3RvcmUgdGhlIHN0YXRlLAotICAgICAgICAgIC8vIHByZXBlbmQgdGhlIGxl
bmd0aCwgdGhlbiByZXNldCBpdCBiYWNrIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KLSAgICAg
ICAgICBwb3NpdGlvbiA9IG9sZFBvc2l0aW9uOwotICAgICAgICAgIGludCBsZW5ndGggPSBuZXdQ
b3NpdGlvbiAtIG9sZFBvc2l0aW9uIC0gbWluTGVuZ3RoVmFySW50U2l6ZTsKLSAgICAgICAgICBi
dWZmZXJVSW50MzJOb1RhZyhsZW5ndGgpOwotICAgICAgICAgIHBvc2l0aW9uID0gbmV3UG9zaXRp
b247Ci0gICAgICAgICAgdG90YWxCeXRlc1dyaXR0ZW4gKz0gbGVuZ3RoOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIGludCBsZW5ndGggPSBVdGY4LmVuY29kZWRMZW5ndGgodmFsdWUpOwot
ICAgICAgICAgIGJ1ZmZlclVJbnQzMk5vVGFnKGxlbmd0aCk7Ci0gICAgICAgICAgcG9zaXRpb24g
PSBVdGY4LmVuY29kZSh2YWx1ZSwgYnVmZmVyLCBwb3NpdGlvbiwgbGVuZ3RoKTsKLSAgICAgICAg
ICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBsZW5ndGg7Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2gg
KFVucGFpcmVkU3Vycm9nYXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8gUm9sbCBiYWNrIHRo
ZSBjaGFuZ2UgYW5kIGNvbnZlcnQgdG8gYW4gSU9FeGNlcHRpb24uCi0gICAgICAgIHRvdGFsQnl0
ZXNXcml0dGVuIC09IHBvc2l0aW9uIC0gb2xkUG9zaXRpb247Ci0gICAgICAgIHBvc2l0aW9uID0g
b2xkUG9zaXRpb247Ci0KLSAgICAgICAgLy8gVE9ETyhuYXRoYW5taXR0bGVyKTogV2Ugc2hvdWxk
IHRocm93IGFuIElPRXhjZXB0aW9uIGhlcmUgaW5zdGVhZC4KLSAgICAgICAgaW5lZmZpY2llbnRX
cml0ZVN0cmluZ05vVGFnKHZhbHVlLCBlKTsKLSAgICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3Vu
ZHNFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgT3V0T2ZTcGFjZUV4Y2VwdGlvbihl
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBmbHVz
aCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBpZiAocG9zaXRpb24gPiAwKSB7Ci0gICAg
ICAgIC8vIEZsdXNoIHRoZSBidWZmZXIuCi0gICAgICAgIGRvRmx1c2goKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZShieXRlW10gdmFsdWUs
IGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBmbHVz
aCgpOwotICAgICAgb3V0LndyaXRlKHZhbHVlLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgICB0b3Rh
bEJ5dGVzV3JpdHRlbiArPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgd3JpdGVMYXp5KGJ5dGVbXSB2YWx1ZSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGZsdXNoKCk7Ci0gICAgICBvdXQud3JpdGVMYXp5
KHZhbHVlLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBsZW5n
dGg7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGUoQnl0ZUJ1
ZmZlciB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGZsdXNoKCk7Ci0gICAgICBp
bnQgbGVuZ3RoID0gdmFsdWUucmVtYWluaW5nKCk7Ci0gICAgICBvdXQud3JpdGUodmFsdWUpOwot
ICAgICAgdG90YWxCeXRlc1dyaXR0ZW4gKz0gbGVuZ3RoOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlTGF6eShCeXRlQnVmZmVyIHZhbHVlKSB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgICAgZmx1c2goKTsKLSAgICAgIGludCBsZW5ndGggPSB2YWx1ZS5yZW1h
aW5pbmcoKTsKLSAgICAgIG91dC53cml0ZUxhenkodmFsdWUpOwotICAgICAgdG90YWxCeXRlc1dy
aXR0ZW4gKz0gbGVuZ3RoOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBmbHVzaElmTm90QXZh
aWxhYmxlKGludCByZXF1aXJlZFNpemUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBpZiAo
bGltaXQgLSBwb3NpdGlvbiA8IHJlcXVpcmVkU2l6ZSkgewotICAgICAgICBkb0ZsdXNoKCk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRvRmx1c2goKSB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgICAgb3V0LndyaXRlKGJ1ZmZlciwgMCwgcG9zaXRpb24pOwotICAgICAgcG9z
aXRpb24gPSAwOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbiB7QGxpbmsgQ29kZWRPdXRw
dXRTdHJlYW19IHRoYXQgZGVjb3JhdGVzIGFuIHtAbGluayBPdXRwdXRTdHJlYW19LiBJdCBwZXJm
b3JtcyBpbnRlcm5hbAotICAgKiBidWZmZXJpbmcgdG8gb3B0aW1pemUgd3JpdGVzIHRvIHRoZSB7
QGxpbmsgT3V0cHV0U3RyZWFtfS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNz
IE91dHB1dFN0cmVhbUVuY29kZXIgZXh0ZW5kcyBBYnN0cmFjdEJ1ZmZlcmVkRW5jb2RlciB7Ci0g
ICAgcHJpdmF0ZSBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0OwotCi0gICAgT3V0cHV0U3RyZWFtRW5j
b2RlcihPdXRwdXRTdHJlYW0gb3V0LCBpbnQgYnVmZmVyU2l6ZSkgewotICAgICAgc3VwZXIoYnVm
ZmVyU2l6ZSk7Ci0gICAgICBpZiAob3V0ID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IE51
bGxQb2ludGVyRXhjZXB0aW9uKCJvdXQiKTsKLSAgICAgIH0KLSAgICAgIHRoaXMub3V0ID0gb3V0
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVGFnKGZpbmFs
IGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHdpcmVUeXBlKSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgICAgd3JpdGVVSW50MzJOb1RhZyhXaXJlRm9ybWF0Lm1ha2VUYWcoZmllbGROdW1iZXIs
IHdpcmVUeXBlKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3Jp
dGVJbnQzMihmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElP
RXhjZXB0aW9uIHsKLSAgICAgIGZsdXNoSWZOb3RBdmFpbGFibGUoTUFYX1ZBUklOVF9TSVpFICog
Mik7Ci0gICAgICBidWZmZXJUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVfVkFS
SU5UKTsKLSAgICAgIGJ1ZmZlckludDMyTm9UYWcodmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVUludDMyKGZpbmFsIGludCBmaWVsZE51bWJlciwg
ZmluYWwgaW50IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZmx1c2hJZk5vdEF2
YWlsYWJsZShNQVhfVkFSSU5UX1NJWkUgKiAyKTsKLSAgICAgIGJ1ZmZlclRhZyhmaWVsZE51bWJl
ciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQpOwotICAgICAgYnVmZmVyVUludDMyTm9UYWco
dmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlRml4
ZWQzMihmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICAgIGZsdXNoSWZOb3RBdmFpbGFibGUoTUFYX1ZBUklOVF9TSVpFICsgRklY
RURfMzJfU0laRSk7Ci0gICAgICBidWZmZXJUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV0lS
RVRZUEVfRklYRUQzMik7Ci0gICAgICBidWZmZXJGaXhlZDMyTm9UYWcodmFsdWUpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVUludDY0KGZpbmFsIGludCBm
aWVsZE51bWJlciwgZmluYWwgbG9uZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAg
IGZsdXNoSWZOb3RBdmFpbGFibGUoTUFYX1ZBUklOVF9TSVpFICogMik7Ci0gICAgICBidWZmZXJU
YWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVfVkFSSU5UKTsKLSAgICAgIGJ1ZmZl
clVJbnQ2NE5vVGFnKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCB3cml0ZUZpeGVkNjQoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBsb25nIHZhbHVl
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZmx1c2hJZk5vdEF2YWlsYWJsZShNQVhfVkFS
SU5UX1NJWkUgKyBGSVhFRF82NF9TSVpFKTsKLSAgICAgIGJ1ZmZlclRhZyhmaWVsZE51bWJlciwg
V2lyZUZvcm1hdC5XSVJFVFlQRV9GSVhFRDY0KTsKLSAgICAgIGJ1ZmZlckZpeGVkNjROb1RhZyh2
YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVCb29s
KGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgYm9vbGVhbiB2YWx1ZSkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICAgIGZsdXNoSWZOb3RBdmFpbGFibGUoTUFYX1ZBUklOVF9TSVpFICsgMSk7
Ci0gICAgICBidWZmZXJUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVfVkFSSU5U
KTsKLSAgICAgIGJ1ZmZlcigoYnl0ZSkgKHZhbHVlID8gMSA6IDApKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZVN0cmluZyhmaW5hbCBpbnQgZmllbGROdW1i
ZXIsIGZpbmFsIFN0cmluZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRl
VGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpOwot
ICAgICAgd3JpdGVTdHJpbmdOb1RhZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgd3JpdGVCeXRlcyhmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIEJ5
dGVTdHJpbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZVRhZyhmaWVs
ZE51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgICAgIHdy
aXRlQnl0ZXNOb1RhZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgd3JpdGVCeXRlQXJyYXkoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBieXRlW10g
dmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB3cml0ZUJ5dGVBcnJheShmaWVsZE51
bWJlciwgdmFsdWUsIDAsIHZhbHVlLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgd3JpdGVCeXRlQXJyYXkoCi0gICAgICAgIGZpbmFsIGludCBmaWVsZE51
bWJlciwgZmluYWwgYnl0ZVtdIHZhbHVlLCBmaW5hbCBpbnQgb2Zmc2V0LCBmaW5hbCBpbnQgbGVu
Z3RoKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVUYWcoZmllbGRO
dW1iZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCk7Ci0gICAgICB3cml0
ZUJ5dGVBcnJheU5vVGFnKHZhbHVlLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVCeXRlQnVmZmVyKGZpbmFsIGludCBmaWVsZE51
bWJlciwgZmluYWwgQnl0ZUJ1ZmZlciB2YWx1ZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICAgIHdyaXRlVGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdU
SF9ERUxJTUlURUQpOwotICAgICAgd3JpdGVVSW50MzJOb1RhZyh2YWx1ZS5jYXBhY2l0eSgpKTsK
LSAgICAgIHdyaXRlUmF3Qnl0ZXModmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIHdyaXRlQnl0ZXNOb1RhZyhmaW5hbCBCeXRlU3RyaW5nIHZhbHVlKSB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVVSW50MzJOb1RhZyh2YWx1ZS5zaXplKCkpOwot
ICAgICAgdmFsdWUud3JpdGVUbyh0aGlzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCB3cml0ZUJ5dGVBcnJheU5vVGFnKGZpbmFsIGJ5dGVbXSB2YWx1ZSwgaW50IG9m
ZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVUludDMy
Tm9UYWcobGVuZ3RoKTsKLSAgICAgIHdyaXRlKHZhbHVlLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVSYXdCeXRlcyhmaW5hbCBC
eXRlQnVmZmVyIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgaWYgKHZhbHVlLmhh
c0FycmF5KCkpIHsKLSAgICAgICAgd3JpdGUodmFsdWUuYXJyYXkoKSwgdmFsdWUuYXJyYXlPZmZz
ZXQoKSwgdmFsdWUuY2FwYWNpdHkoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBCeXRlQnVm
ZmVyIGR1cGxpY2F0ZWQgPSB2YWx1ZS5kdXBsaWNhdGUoKTsKLSAgICAgICAgZHVwbGljYXRlZC5j
bGVhcigpOwotICAgICAgICB3cml0ZShkdXBsaWNhdGVkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZU1lc3NhZ2UoZmluYWwgaW50IGZpZWxk
TnVtYmVyLCBmaW5hbCBNZXNzYWdlTGl0ZSB2YWx1ZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICAgIHdyaXRlVGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0xF
TkdUSF9ERUxJTUlURUQpOwotICAgICAgd3JpdGVNZXNzYWdlTm9UYWcodmFsdWUpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlTWVzc2FnZVNldEV4dGVuc2lv
bihmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIE1lc3NhZ2VMaXRlIHZhbHVlKQotICAgICAg
ICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGVUYWcoV2lyZUZvcm1hdC5NRVNTQUdF
X1NFVF9JVEVNLCBXaXJlRm9ybWF0LldJUkVUWVBFX1NUQVJUX0dST1VQKTsKLSAgICAgIHdyaXRl
VUludDMyKFdpcmVGb3JtYXQuTUVTU0FHRV9TRVRfVFlQRV9JRCwgZmllbGROdW1iZXIpOwotICAg
ICAgd3JpdGVNZXNzYWdlKFdpcmVGb3JtYXQuTUVTU0FHRV9TRVRfTUVTU0FHRSwgdmFsdWUpOwot
ICAgICAgd3JpdGVUYWcoV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9JVEVNLCBXaXJlRm9ybWF0LldJ
UkVUWVBFX0VORF9HUk9VUCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgd3JpdGVSYXdNZXNzYWdlU2V0RXh0ZW5zaW9uKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmlu
YWwgQnl0ZVN0cmluZyB2YWx1ZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAg
IHdyaXRlVGFnKFdpcmVGb3JtYXQuTUVTU0FHRV9TRVRfSVRFTSwgV2lyZUZvcm1hdC5XSVJFVFlQ
RV9TVEFSVF9HUk9VUCk7Ci0gICAgICB3cml0ZVVJbnQzMihXaXJlRm9ybWF0Lk1FU1NBR0VfU0VU
X1RZUEVfSUQsIGZpZWxkTnVtYmVyKTsKLSAgICAgIHdyaXRlQnl0ZXMoV2lyZUZvcm1hdC5NRVNT
QUdFX1NFVF9NRVNTQUdFLCB2YWx1ZSk7Ci0gICAgICB3cml0ZVRhZyhXaXJlRm9ybWF0Lk1FU1NB
R0VfU0VUX0lURU0sIFdpcmVGb3JtYXQuV0lSRVRZUEVfRU5EX0dST1VQKTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZU1lc3NhZ2VOb1RhZyhmaW5hbCBNZXNz
YWdlTGl0ZSB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlVUludDMyTm9U
YWcodmFsdWUuZ2V0U2VyaWFsaXplZFNpemUoKSk7Ci0gICAgICB2YWx1ZS53cml0ZVRvKHRoaXMp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlKGJ5dGUgdmFs
dWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBpZiAocG9zaXRpb24gPT0gbGltaXQpIHsK
LSAgICAgICAgZG9GbHVzaCgpOwotICAgICAgfQotCi0gICAgICBidWZmZXIodmFsdWUpOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlSW50MzJOb1RhZyhpbnQg
dmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBpZiAodmFsdWUgPj0gMCkgewotICAg
ICAgICB3cml0ZVVJbnQzMk5vVGFnKHZhbHVlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IE11c3Qgc2lnbi1leHRlbmQuCi0gICAgICAgIHdyaXRlVUludDY0Tm9UYWcodmFsdWUpOwotICAg
ICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVUludDMy
Tm9UYWcoaW50IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZmx1c2hJZk5vdEF2
YWlsYWJsZShNQVhfVkFSSU5UX1NJWkUpOwotICAgICAgYnVmZmVyVUludDMyTm9UYWcodmFsdWUp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlRml4ZWQzMk5v
VGFnKGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGZsdXNoSWZO
b3RBdmFpbGFibGUoRklYRURfMzJfU0laRSk7Ci0gICAgICBidWZmZXJGaXhlZDMyTm9UYWcodmFs
dWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVUludDY0
Tm9UYWcobG9uZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGZsdXNoSWZOb3RB
dmFpbGFibGUoTUFYX1ZBUklOVF9TSVpFKTsKLSAgICAgIGJ1ZmZlclVJbnQ2NE5vVGFnKHZhbHVl
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUZpeGVkNjRO
b1RhZyhmaW5hbCBsb25nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZmx1c2hJ
Zk5vdEF2YWlsYWJsZShGSVhFRF82NF9TSVpFKTsKLSAgICAgIGJ1ZmZlckZpeGVkNjROb1RhZyh2
YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVTdHJp
bmdOb1RhZyhTdHJpbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewot
ICAgICAgICAvLyBVVEYtOCBieXRlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIGF0IGxlYXN0IGl0
cyBVVEYtMTYgY29kZSB1bml0IGxlbmd0aCAodmFsdWUubGVuZ3RoKCkpLAotICAgICAgICAvLyBh
bmQgYXQgbW9zdCAzIHRpbWVzIG9mIGl0LiBXZSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGluIGJv
dGggYnJhbmNoZXMgYmVsb3cuCi0gICAgICAgIGZpbmFsIGludCBtYXhMZW5ndGggPSB2YWx1ZS5s
ZW5ndGgoKSAqIFV0ZjguTUFYX0JZVEVTX1BFUl9DSEFSOwotICAgICAgICBmaW5hbCBpbnQgbWF4
TGVuZ3RoVmFySW50U2l6ZSA9IGNvbXB1dGVVSW50MzJTaXplTm9UYWcobWF4TGVuZ3RoKTsKLQot
ICAgICAgICAvLyBJZiB3ZSBhcmUgc3RyZWFtaW5nIGFuZCB0aGUgcG90ZW50aWFsIGxlbmd0aCBp
cyB0b28gYmlnIHRvIGZpdCBpbiBvdXIgYnVmZmVyLCB3ZSB0YWtlIHRoZQotICAgICAgICAvLyBz
bG93ZXIgcGF0aC4KLSAgICAgICAgaWYgKG1heExlbmd0aFZhckludFNpemUgKyBtYXhMZW5ndGgg
PiBsaW1pdCkgewotICAgICAgICAgIC8vIEFsbG9jYXRlIGEgYnl0ZVtdIHRoYXQgd2Uga25vdyBj
YW4gZml0IHRoZSBzdHJpbmcgYW5kIGVuY29kZSBpbnRvIGl0LiBTdHJpbmcuZ2V0Qnl0ZXMoKQot
ICAgICAgICAgIC8vIGRvZXMgdGhlIHNhbWUgaW50ZXJuYWxseSBhbmQgdGhlbiBkb2VzICphbm90
aGVyIGNvcHkqIHRvIHJldHVybiBhIGJ5dGVbXSBvZiBleGFjdGx5IHRoZQotICAgICAgICAgIC8v
IHJpZ2h0IHNpemUuIFdlIGNhbiBza2lwIHRoYXQgY29weSBhbmQganVzdCB3cml0ZVJhd0J5dGVz
IHVwIHRvIHRoZSBhY3R1YWxMZW5ndGggb2YgdGhlCi0gICAgICAgICAgLy8gVVRGLTggZW5jb2Rl
ZCBieXRlcy4KLSAgICAgICAgICBmaW5hbCBieXRlW10gZW5jb2RlZEJ5dGVzID0gbmV3IGJ5dGVb
bWF4TGVuZ3RoXTsKLSAgICAgICAgICBpbnQgYWN0dWFsTGVuZ3RoID0gVXRmOC5lbmNvZGUodmFs
dWUsIGVuY29kZWRCeXRlcywgMCwgbWF4TGVuZ3RoKTsKLSAgICAgICAgICB3cml0ZVVJbnQzMk5v
VGFnKGFjdHVhbExlbmd0aCk7Ci0gICAgICAgICAgd3JpdGVMYXp5KGVuY29kZWRCeXRlcywgMCwg
YWN0dWFsTGVuZ3RoKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBGYXN0IHBhdGg6IHdlIGhhdmUgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSBpbiBvdXIgYnVmZmVy
IGZvciB0aGUgc3RyaW5nLi4uCi0gICAgICAgIGlmIChtYXhMZW5ndGhWYXJJbnRTaXplICsgbWF4
TGVuZ3RoID4gbGltaXQgLSBwb3NpdGlvbikgewotICAgICAgICAgIC8vIEZsdXNoIHRvIGZyZWUg
dXAgc3BhY2UuCi0gICAgICAgICAgZG9GbHVzaCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
T3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGtub3cgdGhpcyBsZW5ndGggcmVzdWx0cyBp
biBhIGNvbnN0YW50IHZhcmludCBsZW5ndGggYXMKLSAgICAgICAgLy8gdGhpcyBzYXZlcyBhIHBh
c3MgZm9yIG1lYXN1cmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCi0gICAgICAgIGZpbmFs
IGludCBtaW5MZW5ndGhWYXJJbnRTaXplID0gY29tcHV0ZVVJbnQzMlNpemVOb1RhZyh2YWx1ZS5s
ZW5ndGgoKSk7Ci0gICAgICAgIGludCBvbGRQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgICAgICBm
aW5hbCBpbnQgbGVuZ3RoOwotICAgICAgICB0cnkgewotICAgICAgICAgIGlmIChtaW5MZW5ndGhW
YXJJbnRTaXplID09IG1heExlbmd0aFZhckludFNpemUpIHsKLSAgICAgICAgICAgIHBvc2l0aW9u
ID0gb2xkUG9zaXRpb24gKyBtaW5MZW5ndGhWYXJJbnRTaXplOwotICAgICAgICAgICAgaW50IG5l
d1Bvc2l0aW9uID0gVXRmOC5lbmNvZGUodmFsdWUsIGJ1ZmZlciwgcG9zaXRpb24sIGxpbWl0IC0g
cG9zaXRpb24pOwotICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBjbGFzcyBpcyBzdGF0ZWZ1bCBh
bmQgdHJhY2tzIHRoZSBwb3NpdGlvbiwgd2UgcmV3aW5kIGFuZCBzdG9yZSB0aGUKLSAgICAgICAg
ICAgIC8vIHN0YXRlLCBwcmVwZW5kIHRoZSBsZW5ndGgsIHRoZW4gcmVzZXQgaXQgYmFjayB0byB0
aGUgZW5kIG9mIHRoZSBzdHJpbmcuCi0gICAgICAgICAgICBwb3NpdGlvbiA9IG9sZFBvc2l0aW9u
OwotICAgICAgICAgICAgbGVuZ3RoID0gbmV3UG9zaXRpb24gLSBvbGRQb3NpdGlvbiAtIG1pbkxl
bmd0aFZhckludFNpemU7Ci0gICAgICAgICAgICBidWZmZXJVSW50MzJOb1RhZyhsZW5ndGgpOwot
ICAgICAgICAgICAgcG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLSAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgbGVuZ3RoID0gVXRmOC5lbmNvZGVkTGVuZ3RoKHZhbHVlKTsKLSAgICAgICAg
ICAgIGJ1ZmZlclVJbnQzMk5vVGFnKGxlbmd0aCk7Ci0gICAgICAgICAgICBwb3NpdGlvbiA9IFV0
ZjguZW5jb2RlKHZhbHVlLCBidWZmZXIsIHBvc2l0aW9uLCBsZW5ndGgpOwotICAgICAgICAgIH0K
LSAgICAgICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBsZW5ndGg7Ci0gICAgICAgIH0gY2F0Y2gg
KFVucGFpcmVkU3Vycm9nYXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAvLyBCZSBleHRyYSBj
YXJlZnVsIGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBmb3IgcmV0cnlpbmcgdGhl
IHdyaXRlIHdpdGggdGhlCi0gICAgICAgICAgLy8gbGVzcyBlZmZpY2llbnQgcGF0aC4KLSAgICAg
ICAgICB0b3RhbEJ5dGVzV3JpdHRlbiAtPSBwb3NpdGlvbiAtIG9sZFBvc2l0aW9uOwotICAgICAg
ICAgIHBvc2l0aW9uID0gb2xkUG9zaXRpb247Ci0gICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAg
fSBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICB0
aHJvdyBuZXcgT3V0T2ZTcGFjZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgfSBjYXRj
aCAoVW5wYWlyZWRTdXJyb2dhdGVFeGNlcHRpb24gZSkgewotICAgICAgICBpbmVmZmljaWVudFdy
aXRlU3RyaW5nTm9UYWcodmFsdWUsIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIGZsdXNoKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGlm
IChwb3NpdGlvbiA+IDApIHsKLSAgICAgICAgLy8gRmx1c2ggdGhlIGJ1ZmZlci4KLSAgICAgICAg
ZG9GbHVzaCgpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2
b2lkIHdyaXRlKGJ5dGVbXSB2YWx1ZSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkKLSAgICAgICAg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGlmIChsaW1pdCAtIHBvc2l0aW9uID49IGxlbmd0
aCkgewotICAgICAgICAvLyBXZSBoYXZlIHJvb20gaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotICAg
ICAgICBTeXN0ZW0uYXJyYXljb3B5KHZhbHVlLCBvZmZzZXQsIGJ1ZmZlciwgcG9zaXRpb24sIGxl
bmd0aCk7Ci0gICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKLSAgICAgICAgdG90YWxCeXRlc1dy
aXR0ZW4gKz0gbGVuZ3RoOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV3JpdGUgZXh0ZW5k
cyBwYXN0IGN1cnJlbnQgYnVmZmVyLiAgRmlsbCB0aGUgcmVzdCBvZiB0aGlzIGJ1ZmZlciBhbmQK
LSAgICAgICAgLy8gZmx1c2guCi0gICAgICAgIGZpbmFsIGludCBieXRlc1dyaXR0ZW4gPSBsaW1p
dCAtIHBvc2l0aW9uOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHZhbHVlLCBvZmZzZXQsIGJ1
ZmZlciwgcG9zaXRpb24sIGJ5dGVzV3JpdHRlbik7Ci0gICAgICAgIG9mZnNldCArPSBieXRlc1dy
aXR0ZW47Ci0gICAgICAgIGxlbmd0aCAtPSBieXRlc1dyaXR0ZW47Ci0gICAgICAgIHBvc2l0aW9u
ID0gbGltaXQ7Ci0gICAgICAgIHRvdGFsQnl0ZXNXcml0dGVuICs9IGJ5dGVzV3JpdHRlbjsKLSAg
ICAgICAgZG9GbHVzaCgpOwotCi0gICAgICAgIC8vIE5vdyBkZWFsIHdpdGggdGhlIHJlc3QuCi0g
ICAgICAgIC8vIFNpbmNlIHdlIGhhdmUgYW4gb3V0cHV0IHN0cmVhbSwgdGhpcyBpcyBvdXIgYnVm
ZmVyCi0gICAgICAgIC8vIGFuZCBidWZmZXIgb2Zmc2V0ID09IDAKLSAgICAgICAgaWYgKGxlbmd0
aCA8PSBsaW1pdCkgewotICAgICAgICAgIC8vIEZpdHMgaW4gbmV3IGJ1ZmZlci4KLSAgICAgICAg
ICBTeXN0ZW0uYXJyYXljb3B5KHZhbHVlLCBvZmZzZXQsIGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLSAg
ICAgICAgICBwb3NpdGlvbiA9IGxlbmd0aDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAv
LyBXcml0ZSBpcyB2ZXJ5IGJpZy4gIExldCdzIGRvIGl0IGFsbCBhdCBvbmNlLgotICAgICAgICAg
IG91dC53cml0ZSh2YWx1ZSwgb2Zmc2V0LCBsZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIHRv
dGFsQnl0ZXNXcml0dGVuICs9IGxlbmd0aDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUxhenkoYnl0ZVtdIHZhbHVlLCBpbnQgb2Zmc2V0LCBp
bnQgbGVuZ3RoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgd3JpdGUodmFsdWUsIG9mZnNl
dCwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0
ZShCeXRlQnVmZmVyIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgaW50IGxlbmd0
aCA9IHZhbHVlLnJlbWFpbmluZygpOwotICAgICAgaWYgKGxpbWl0IC0gcG9zaXRpb24gPj0gbGVu
Z3RoKSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgcm9vbSBpbiB0aGUgY3VycmVudCBidWZmZXIuCi0g
ICAgICAgIHZhbHVlLmdldChidWZmZXIsIHBvc2l0aW9uLCBsZW5ndGgpOwotICAgICAgICBwb3Np
dGlvbiArPSBsZW5ndGg7Ci0gICAgICAgIHRvdGFsQnl0ZXNXcml0dGVuICs9IGxlbmd0aDsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdyaXRlIGV4dGVuZHMgcGFzdCBjdXJyZW50IGJ1ZmZl
ci4gIEZpbGwgdGhlIHJlc3Qgb2YgdGhpcyBidWZmZXIgYW5kCi0gICAgICAgIC8vIGZsdXNoLgot
ICAgICAgICBmaW5hbCBpbnQgYnl0ZXNXcml0dGVuID0gbGltaXQgLSBwb3NpdGlvbjsKLSAgICAg
ICAgdmFsdWUuZ2V0KGJ1ZmZlciwgcG9zaXRpb24sIGJ5dGVzV3JpdHRlbik7Ci0gICAgICAgIGxl
bmd0aCAtPSBieXRlc1dyaXR0ZW47Ci0gICAgICAgIHBvc2l0aW9uID0gbGltaXQ7Ci0gICAgICAg
IHRvdGFsQnl0ZXNXcml0dGVuICs9IGJ5dGVzV3JpdHRlbjsKLSAgICAgICAgZG9GbHVzaCgpOwot
Ci0gICAgICAgIC8vIE5vdyBkZWFsIHdpdGggdGhlIHJlc3QuCi0gICAgICAgIC8vIFNpbmNlIHdl
IGhhdmUgYW4gb3V0cHV0IHN0cmVhbSwgdGhpcyBpcyBvdXIgYnVmZmVyCi0gICAgICAgIC8vIGFu
ZCBidWZmZXIgb2Zmc2V0ID09IDAKLSAgICAgICAgd2hpbGUgKGxlbmd0aCA+IGxpbWl0KSB7Ci0g
ICAgICAgICAgLy8gQ29weSBkYXRhIGludG8gdGhlIGJ1ZmZlciBiZWZvcmUgd3JpdGluZyBpdCB0
byBPdXRwdXRTdHJlYW0uCi0gICAgICAgICAgdmFsdWUuZ2V0KGJ1ZmZlciwgMCwgbGltaXQpOwot
ICAgICAgICAgIG91dC53cml0ZShidWZmZXIsIDAsIGxpbWl0KTsKLSAgICAgICAgICBsZW5ndGgg
LT0gbGltaXQ7Ci0gICAgICAgICAgdG90YWxCeXRlc1dyaXR0ZW4gKz0gbGltaXQ7Ci0gICAgICAg
IH0KLSAgICAgICAgdmFsdWUuZ2V0KGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLSAgICAgICAgcG9zaXRp
b24gPSBsZW5ndGg7Ci0gICAgICAgIHRvdGFsQnl0ZXNXcml0dGVuICs9IGxlbmd0aDsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUxhenkoQnl0
ZUJ1ZmZlciB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdyaXRlKHZhbHVlKTsK
LSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZmx1c2hJZk5vdEF2YWlsYWJsZShpbnQgcmVxdWly
ZWRTaXplKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgaWYgKGxpbWl0IC0gcG9zaXRpb24g
PCByZXF1aXJlZFNpemUpIHsKLSAgICAgICAgZG9GbHVzaCgpOwotICAgICAgfQotICAgIH0KLQot
ICAgIHByaXZhdGUgdm9pZCBkb0ZsdXNoKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIG91
dC53cml0ZShidWZmZXIsIDAsIHBvc2l0aW9uKTsKLSAgICAgIHBvc2l0aW9uID0gMDsKLSAgICB9
Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUge0Bjb2RlIHN1bi5taXNjLlVuc2FmZX0gaW5z
dGFuY2UsIG9yIHtAY29kZSBudWxsfSBpZiBub3QgYXZhaWxhYmxlIG9uIHRoaXMKLSAgICogcGxh
dGZvcm0uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBzdW4ubWlzYy5VbnNhZmUgZ2V0VW5zYWZl
KCkgewotICAgIHN1bi5taXNjLlVuc2FmZSB1bnNhZmUgPSBudWxsOwotICAgIHRyeSB7Ci0gICAg
ICB1bnNhZmUgPSBBY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChuZXcgUHJpdmlsZWdlZEV4
Y2VwdGlvbkFjdGlvbjxzdW4ubWlzYy5VbnNhZmU+KCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAg
ICAgICAgcHVibGljIHN1bi5taXNjLlVuc2FmZSBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICAgICAgICBDbGFzczxzdW4ubWlzYy5VbnNhZmU+IGsgPSBzdW4ubWlzYy5VbnNhZmUuY2xhc3M7
Ci0KLSAgICAgICAgICBmb3IgKEZpZWxkIGYgOiBrLmdldERlY2xhcmVkRmllbGRzKCkpIHsKLSAg
ICAgICAgICAgIGYuc2V0QWNjZXNzaWJsZSh0cnVlKTsKLSAgICAgICAgICAgIE9iamVjdCB4ID0g
Zi5nZXQobnVsbCk7Ci0gICAgICAgICAgICBpZiAoay5pc0luc3RhbmNlKHgpKSB7Ci0gICAgICAg
ICAgICAgIHJldHVybiBrLmNhc3QoeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAg
ICAgICAgIC8vIFRoZSBzdW4ubWlzYy5VbnNhZmUgZmllbGQgZG9lcyBub3QgZXhpc3QuCi0gICAg
ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0gY2F0Y2ggKFRo
cm93YWJsZSBlKSB7Ci0gICAgICAvLyBDYXRjaGluZyBUaHJvd2FibGUgaGVyZSBkdWUgdG8gdGhl
IGZhY3QgdGhhdCBHb29nbGUgQXBwRW5naW5lIHJhaXNlcyBOb0NsYXNzRGVmRm91bmRFcnJvcgot
ICAgICAgLy8gZm9yIFVuc2FmZS4KLSAgICB9Ci0KLSAgICBsb2dnZXIubG9nKExldmVsLkZJTkVT
VCwgInN1bi5taXNjLlVuc2FmZToge30iLAotICAgICAgICB1bnNhZmUgIT0gbnVsbCA/ICJhdmFp
bGFibGUiIDogInVuYXZhaWxhYmxlIik7Ci0gICAgcmV0dXJuIHVuc2FmZTsKLSAgfQotCi0gIC8q
KgotICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdW5zYWZlIGFycmF5IG9wZXJhdGlvbnMg
YXJlIHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLgotICAgKi8KLSAgLy8gVE9ETyhuYXRoYW5t
aXR0bGVyKTogQWRkIHN1cHBvcnQgZm9yIEFuZHJvaWQncyBNZW1vcnlCbG9jay4KLSAgcHJpdmF0
ZSBzdGF0aWMgYm9vbGVhbiBzdXBwb3J0c1Vuc2FmZUFycmF5T3BlcmF0aW9ucygpIHsKLSAgICBi
b29sZWFuIHN1cHBvcnRlZCA9IGZhbHNlOwotICAgIGlmIChVTlNBRkUgIT0gbnVsbCkgewotICAg
ICAgdHJ5IHsKLSAgICAgICAgVU5TQUZFLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJhcnJheUJhc2VP
ZmZzZXQiLCBDbGFzcy5jbGFzcyk7Ci0gICAgICAgIFVOU0FGRS5nZXRDbGFzcygpLmdldE1ldGhv
ZCgicHV0Qnl0ZSIsIE9iamVjdC5jbGFzcywgbG9uZy5jbGFzcywgYnl0ZS5jbGFzcyk7Ci0gICAg
ICAgIHN1cHBvcnRlZCA9IHRydWU7Ci0gICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewotICAg
ICAgICAvLyBEbyBub3RoaW5nLgotICAgICAgfQotICAgIH0KLSAgICBsb2dnZXIubG9nKExldmVs
LkZJTkVTVCwgIlVuc2FmZSBhcnJheSBvcGVyYXRpb25zOiB7fSIsCi0gICAgICAgIHN1cHBvcnRl
ZCA/ICJhdmFpbGFibGUiIDogInVuYXZhaWxhYmxlIik7Ci0gICAgcmV0dXJuIHN1cHBvcnRlZDsK
LSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGJhc2Ugb2Zmc2V0IGZvciBieXRlIGFycmF5cywg
b3Ige0Bjb2RlIC0xfSBpZiB7QGNvZGUgc3VuLm1pc2MuVW5zYWZlfSBpcyBub3QKLSAgICogYXZh
aWxhYmxlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgPFQ+IGludCBieXRlQXJyYXlCYXNlT2Zm
c2V0KCkgewotICAgIHJldHVybiBIQVNfVU5TQUZFX0FSUkFZX09QRVJBVElPTlMgPyBVTlNBRkUu
YXJyYXlCYXNlT2Zmc2V0KGJ5dGVbXS5jbGFzcykgOiAtMTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Rlc2NyaXB0b3JzLmph
dmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRGVzY3JpcHRv
cnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAwZWEzNDJlYTBjM2YyYzU5
ZmJkODAxMjZiNGU3MWQxNDliNGMwZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYv
RGVzY3JpcHRvcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NDggKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1
ZjsKLQotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3Rvcy4qOwotaW1w
b3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmlsZURlc2NyaXB0b3IuU3ludGF4
OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEudXRp
bC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwu
Q29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGls
Lkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsK
LWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5XZWFrSGFzaE1hcDsKLWlt
cG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7Ci0KLS8qKgotICogQ29udGFpbnMgYSBjb2xs
ZWN0aW9uIG9mIGNsYXNzZXMgd2hpY2ggZGVzY3JpYmUgcHJvdG9jb2wgbWVzc2FnZSB0eXBlcy4K
LSAqCi0gKiBFdmVyeSBtZXNzYWdlIHR5cGUgaGFzIGEge0BsaW5rIERlc2NyaXB0b3J9LCB3aGlj
aCBsaXN0cyBhbGwKLSAqIGl0cyBmaWVsZHMgYW5kIG90aGVyIGluZm9ybWF0aW9uIGFib3V0IGEg
dHlwZS4gIFlvdSBjYW4gZ2V0IGEgbWVzc2FnZQotICogdHlwZSdzIGRlc2NyaXB0b3IgYnkgY2Fs
bGluZyB7QGNvZGUgTWVzc2FnZVR5cGUuZ2V0RGVzY3JpcHRvcigpfSwgb3IKLSAqIChnaXZlbiBh
IG1lc3NhZ2Ugb2JqZWN0IG9mIHRoZSB0eXBlKSB7QGNvZGUgbWVzc2FnZS5nZXREZXNjcmlwdG9y
Rm9yVHlwZSgpfS4KLSAqIEZ1cnRoZXJtb3JlLCBlYWNoIG1lc3NhZ2UgaXMgYXNzb2NpYXRlZCB3
aXRoIGEge0BsaW5rIEZpbGVEZXNjcmlwdG9yfSBmb3IKLSAqIGEgcmVsZXZhbnQge0Bjb2RlIC5w
cm90b30gZmlsZS4gWW91IGNhbiBvYnRhaW4gaXQgYnkgY2FsbGluZwotICoge0Bjb2RlIERlc2Ny
aXB0b3IuZ2V0RmlsZSgpfS4gQSB7QGxpbmsgRmlsZURlc2NyaXB0b3J9IGNvbnRhaW5zIGRlc2Ny
aXB0b3JzCi0gKiBmb3IgYWxsIHRoZSBtZXNzYWdlcyBkZWZpbmVkIGluIHRoYXQgZmlsZSwgYW5k
IGZpbGUgZGVzY3JpcHRvcnMgZm9yIGFsbCB0aGUKLSAqIGltcG9ydGVkIHtAY29kZSAucHJvdG99
IGZpbGVzLgotICoKLSAqIERlc2NyaXB0b3JzIGFyZSBidWlsdCBmcm9tIERlc2NyaXB0b3JQcm90
b3MsIGFzIGRlZmluZWQgaW4KLSAqIHtAY29kZSBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5w
cm90b30uCi0gKgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAq
LwotcHVibGljIGZpbmFsIGNsYXNzIERlc2NyaXB0b3JzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgTG9nZ2VyIGxvZ2dlciA9Ci0gICAgICBMb2dnZXIuZ2V0TG9nZ2VyKERlc2NyaXB0b3JzLmNs
YXNzLmdldE5hbWUoKSk7Ci0gIC8qKgotICAgKiBEZXNjcmliZXMgYSB7QGNvZGUgLnByb3RvfSBm
aWxlLCBpbmNsdWRpbmcgZXZlcnl0aGluZyBkZWZpbmVkIHdpdGhpbi4KLSAgICogVGhhdCBpbmNs
dWRlcywgaW4gcGFydGljdWxhciwgZGVzY3JpcHRvcnMgZm9yIGFsbCB0aGUgbWVzc2FnZXMgYW5k
Ci0gICAqIGZpbGUgZGVzY3JpcHRvcnMgZm9yIGFsbCBvdGhlciBpbXBvcnRlZCB7QGNvZGUgLnBy
b3RvfSBmaWxlcwotICAgKiAoZGVwZW5kZW5jaWVzKS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgY2xhc3MgRmlsZURlc2NyaXB0b3IgZXh0ZW5kcyBHZW5lcmljRGVzY3JpcHRvciB7Ci0g
ICAgLyoqIENvbnZlcnQgdGhlIGRlc2NyaXB0b3IgdG8gaXRzIHByb3RvY29sIG1lc3NhZ2UgcmVw
cmVzZW50YXRpb24uICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGVEZXNjcmlwdG9y
UHJvdG8gdG9Qcm90bygpIHsKLSAgICAgIHJldHVybiBwcm90bzsKLSAgICB9Ci0KLSAgICAvKiog
R2V0IHRoZSBmaWxlIG5hbWUuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBn
ZXROYW1lKCkgewotICAgICAgcmV0dXJuIHByb3RvLmdldE5hbWUoKTsKLSAgICB9Ci0KLSAgICAv
KiogUmV0dXJucyB0aGlzIG9iamVjdC4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmls
ZURlc2NyaXB0b3IgZ2V0RmlsZSgpIHsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAg
IC8qKiBSZXR1cm5zIHRoZSBzYW1lIGFzIGdldE5hbWUoKS4gKi8KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgU3RyaW5nIGdldEZ1bGxOYW1lKCkgewotICAgICAgcmV0dXJuIHByb3RvLmdldE5h
bWUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIHByb3RvIHBhY2thZ2UgbmFt
ZS4gIFRoaXMgaXMgdGhlIHBhY2thZ2UgbmFtZSBnaXZlbiBieSB0aGUKLSAgICAgKiB7QGNvZGUg
cGFja2FnZX0gc3RhdGVtZW50IGluIHRoZSB7QGNvZGUgLnByb3RvfSBmaWxlLCB3aGljaCBkaWZm
ZXJzCi0gICAgICogZnJvbSB0aGUgSmF2YSBwYWNrYWdlLgotICAgICAqLwotICAgIHB1YmxpYyBT
dHJpbmcgZ2V0UGFja2FnZSgpIHsgcmV0dXJuIHByb3RvLmdldFBhY2thZ2UoKTsgfQotCi0gICAg
LyoqIEdldCB0aGUge0Bjb2RlIEZpbGVPcHRpb25zfSwgZGVmaW5lZCBpbiB7QGNvZGUgZGVzY3Jp
cHRvci5wcm90b30uICovCi0gICAgcHVibGljIEZpbGVPcHRpb25zIGdldE9wdGlvbnMoKSB7IHJl
dHVybiBwcm90by5nZXRPcHRpb25zKCk7IH0KLQotICAgIC8qKiBHZXQgYSBsaXN0IG9mIHRvcC1s
ZXZlbCBtZXNzYWdlIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgZmlsZS4gKi8KLSAgICBwdWJsaWMg
TGlzdDxEZXNjcmlwdG9yPiBnZXRNZXNzYWdlVHlwZXMoKSB7Ci0gICAgICByZXR1cm4gQ29sbGVj
dGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KG1lc3NhZ2VUeXBlcykpOwotICAg
IH0KLQotICAgIC8qKiBHZXQgYSBsaXN0IG9mIHRvcC1sZXZlbCBlbnVtIHR5cGVzIGRlY2xhcmVk
IGluIHRoaXMgZmlsZS4gKi8KLSAgICBwdWJsaWMgTGlzdDxFbnVtRGVzY3JpcHRvcj4gZ2V0RW51
bVR5cGVzKCkgewotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJy
YXlzLmFzTGlzdChlbnVtVHlwZXMpKTsKLSAgICB9Ci0KLSAgICAvKiogR2V0IGEgbGlzdCBvZiB0
b3AtbGV2ZWwgc2VydmljZXMgZGVjbGFyZWQgaW4gdGhpcyBmaWxlLiAqLwotICAgIHB1YmxpYyBM
aXN0PFNlcnZpY2VEZXNjcmlwdG9yPiBnZXRTZXJ2aWNlcygpIHsKLSAgICAgIHJldHVybiBDb2xs
ZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3Qoc2VydmljZXMpKTsKLSAgICB9
Ci0KLSAgICAvKiogR2V0IGEgbGlzdCBvZiB0b3AtbGV2ZWwgZXh0ZW5zaW9ucyBkZWNsYXJlZCBp
biB0aGlzIGZpbGUuICovCi0gICAgcHVibGljIExpc3Q8RmllbGREZXNjcmlwdG9yPiBnZXRFeHRl
bnNpb25zKCkgewotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJy
YXlzLmFzTGlzdChleHRlbnNpb25zKSk7Ci0gICAgfQotCi0gICAgLyoqIEdldCBhIGxpc3Qgb2Yg
dGhpcyBmaWxlJ3MgZGVwZW5kZW5jaWVzIChpbXBvcnRzKS4gKi8KLSAgICBwdWJsaWMgTGlzdDxG
aWxlRGVzY3JpcHRvcj4gZ2V0RGVwZW5kZW5jaWVzKCkgewotICAgICAgcmV0dXJuIENvbGxlY3Rp
b25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChkZXBlbmRlbmNpZXMpKTsKLSAgICB9
Ci0KLSAgICAvKiogR2V0IGEgbGlzdCBvZiB0aGlzIGZpbGUncyBwdWJsaWMgZGVwZW5kZW5jaWVz
IChwdWJsaWMgaW1wb3J0cykuICovCi0gICAgcHVibGljIExpc3Q8RmlsZURlc2NyaXB0b3I+IGdl
dFB1YmxpY0RlcGVuZGVuY2llcygpIHsKLSAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlm
aWFibGVMaXN0KEFycmF5cy5hc0xpc3QocHVibGljRGVwZW5kZW5jaWVzKSk7Ci0gICAgfQotCi0g
ICAgLyoqIFRoZSBzeW50YXggb2YgdGhlIC5wcm90byBmaWxlLiAqLwotICAgIHB1YmxpYyBlbnVt
IFN5bnRheCB7Ci0gICAgICBVTktOT1dOKCJ1bmtub3duIiksCi0gICAgICBQUk9UTzIoInByb3Rv
MiIpLAotICAgICAgUFJPVE8zKCJwcm90bzMiKTsKLQotICAgICAgU3ludGF4KFN0cmluZyBuYW1l
KSB7Ci0gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICB9Ci0gICAgICBwcml2YXRlIGZp
bmFsIFN0cmluZyBuYW1lOwotICAgIH0KLQotICAgIC8qKiBHZXQgdGhlIHN5bnRheCBvZiB0aGUg
LnByb3RvIGZpbGUuICovCi0gICAgcHVibGljIFN5bnRheCBnZXRTeW50YXgoKSB7Ci0gICAgICBp
ZiAoU3ludGF4LlBST1RPMy5uYW1lLmVxdWFscyhwcm90by5nZXRTeW50YXgoKSkpIHsKLSAgICAg
ICAgcmV0dXJuIFN5bnRheC5QUk9UTzM7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gU3ludGF4LlBS
T1RPMjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGaW5kIGEgbWVzc2FnZSB0eXBlIGluIHRo
ZSBmaWxlIGJ5IG5hbWUuICBEb2VzIG5vdCBmaW5kIG5lc3RlZCB0eXBlcy4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSBuYW1lIFRoZSB1bnF1YWxpZmllZCB0eXBlIG5hbWUgdG8gbG9vayBmb3IuCi0g
ICAgICogQHJldHVybiBUaGUgbWVzc2FnZSB0eXBlJ3MgZGVzY3JpcHRvciwgb3Ige0Bjb2RlIG51
bGx9IGlmIG5vdCBmb3VuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgRGVzY3JpcHRvciBmaW5kTWVz
c2FnZVR5cGVCeU5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICAgIC8vIERvbid0IGFsbG93IGxvb2tp
bmcgdXAgbmVzdGVkIHR5cGVzLiAgVGhpcyB3aWxsIG1ha2Ugb3B0aW1pemF0aW9uCi0gICAgICAv
LyBlYXNpZXIgbGF0ZXIuCi0gICAgICBpZiAobmFtZS5pbmRleE9mKCcuJykgIT0gLTEpIHsKLSAg
ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBpZiAoZ2V0UGFja2FnZSgpLmxlbmd0
aCgpID4gMCkgewotICAgICAgICBuYW1lID0gZ2V0UGFja2FnZSgpICsgJy4nICsgbmFtZTsKLSAg
ICAgIH0KLSAgICAgIGZpbmFsIEdlbmVyaWNEZXNjcmlwdG9yIHJlc3VsdCA9IHBvb2wuZmluZFN5
bWJvbChuYW1lKTsKLSAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQgaW5zdGFuY2Vv
ZiBEZXNjcmlwdG9yICYmCi0gICAgICAgICAgcmVzdWx0LmdldEZpbGUoKSA9PSB0aGlzKSB7Ci0g
ICAgICAgIHJldHVybiAoRGVzY3JpcHRvcilyZXN1bHQ7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGaW5kIGFu
IGVudW0gdHlwZSBpbiB0aGUgZmlsZSBieSBuYW1lLiAgRG9lcyBub3QgZmluZCBuZXN0ZWQgdHlw
ZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZSBUaGUgdW5xdWFsaWZpZWQgdHlwZSBuYW1l
IHRvIGxvb2sgZm9yLgotICAgICAqIEByZXR1cm4gVGhlIGVudW0gdHlwZSdzIGRlc2NyaXB0b3Is
IG9yIHtAY29kZSBudWxsfSBpZiBub3QgZm91bmQuCi0gICAgICovCi0gICAgcHVibGljIEVudW1E
ZXNjcmlwdG9yIGZpbmRFbnVtVHlwZUJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgLy8gRG9u
J3QgYWxsb3cgbG9va2luZyB1cCBuZXN0ZWQgdHlwZXMuICBUaGlzIHdpbGwgbWFrZSBvcHRpbWl6
YXRpb24KLSAgICAgIC8vIGVhc2llciBsYXRlci4KLSAgICAgIGlmIChuYW1lLmluZGV4T2YoJy4n
KSAhPSAtMSkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIGlmIChnZXRQ
YWNrYWdlKCkubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIG5hbWUgPSBnZXRQYWNrYWdlKCkgKyAn
LicgKyBuYW1lOwotICAgICAgfQotICAgICAgZmluYWwgR2VuZXJpY0Rlc2NyaXB0b3IgcmVzdWx0
ID0gcG9vbC5maW5kU3ltYm9sKG5hbWUpOwotICAgICAgaWYgKHJlc3VsdCAhPSBudWxsICYmIHJl
c3VsdCBpbnN0YW5jZW9mIEVudW1EZXNjcmlwdG9yICYmCi0gICAgICAgICAgcmVzdWx0LmdldEZp
bGUoKSA9PSB0aGlzKSB7Ci0gICAgICAgIHJldHVybiAoRW51bURlc2NyaXB0b3IpcmVzdWx0Owot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogRmluZCBhIHNlcnZpY2UgdHlwZSBpbiB0aGUgZmlsZSBieSBuYW1lLgot
ICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgVGhlIHVucXVhbGlmaWVkIHR5cGUgbmFtZSB0byBs
b29rIGZvci4KLSAgICAgKiBAcmV0dXJuIFRoZSBzZXJ2aWNlIHR5cGUncyBkZXNjcmlwdG9yLCBv
ciB7QGNvZGUgbnVsbH0gaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHB1YmxpYyBTZXJ2aWNl
RGVzY3JpcHRvciBmaW5kU2VydmljZUJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgLy8gRG9u
J3QgYWxsb3cgbG9va2luZyB1cCBuZXN0ZWQgdHlwZXMuICBUaGlzIHdpbGwgbWFrZSBvcHRpbWl6
YXRpb24KLSAgICAgIC8vIGVhc2llciBsYXRlci4KLSAgICAgIGlmIChuYW1lLmluZGV4T2YoJy4n
KSAhPSAtMSkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIGlmIChnZXRQ
YWNrYWdlKCkubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIG5hbWUgPSBnZXRQYWNrYWdlKCkgKyAn
LicgKyBuYW1lOwotICAgICAgfQotICAgICAgZmluYWwgR2VuZXJpY0Rlc2NyaXB0b3IgcmVzdWx0
ID0gcG9vbC5maW5kU3ltYm9sKG5hbWUpOwotICAgICAgaWYgKHJlc3VsdCAhPSBudWxsICYmIHJl
c3VsdCBpbnN0YW5jZW9mIFNlcnZpY2VEZXNjcmlwdG9yICYmCi0gICAgICAgICAgcmVzdWx0Lmdl
dEZpbGUoKSA9PSB0aGlzKSB7Ci0gICAgICAgIHJldHVybiAoU2VydmljZURlc2NyaXB0b3IpcmVz
dWx0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogRmluZCBhbiBleHRlbnNpb24gaW4gdGhlIGZpbGUgYnkgbmFt
ZS4gIERvZXMgbm90IGZpbmQgZXh0ZW5zaW9ucyBuZXN0ZWQKLSAgICAgKiBpbnNpZGUgbWVzc2Fn
ZSB0eXBlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuYW1lIFRoZSB1bnF1YWxpZmllZCBleHRl
bnNpb24gbmFtZSB0byBsb29rIGZvci4KLSAgICAgKiBAcmV0dXJuIFRoZSBleHRlbnNpb24ncyBk
ZXNjcmlwdG9yLCBvciB7QGNvZGUgbnVsbH0gaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHB1
YmxpYyBGaWVsZERlc2NyaXB0b3IgZmluZEV4dGVuc2lvbkJ5TmFtZShTdHJpbmcgbmFtZSkgewot
ICAgICAgaWYgKG5hbWUuaW5kZXhPZignLicpICE9IC0xKSB7Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgICAgfQotICAgICAgaWYgKGdldFBhY2thZ2UoKS5sZW5ndGgoKSA+IDApIHsKLSAgICAg
ICAgbmFtZSA9IGdldFBhY2thZ2UoKSArICcuJyArIG5hbWU7Ci0gICAgICB9Ci0gICAgICBmaW5h
bCBHZW5lcmljRGVzY3JpcHRvciByZXN1bHQgPSBwb29sLmZpbmRTeW1ib2wobmFtZSk7Ci0gICAg
ICBpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0IGluc3RhbmNlb2YgRmllbGREZXNjcmlwdG9y
ICYmCi0gICAgICAgICAgcmVzdWx0LmdldEZpbGUoKSA9PSB0aGlzKSB7Ci0gICAgICAgIHJldHVy
biAoRmllbGREZXNjcmlwdG9yKXJlc3VsdDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVy
biBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIHtA
Y29kZSBGaWxlRGVzY3JpcHRvcn0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJvdG8gVGhlIHBy
b3RvY29sIG1lc3NhZ2UgZm9ybSBvZiB0aGUgRmlsZURlc2NyaXB0b3IuCi0gICAgICogQHBhcmFt
IGRlcGVuZGVuY2llcyB7QGNvZGUgRmlsZURlc2NyaXB0b3J9cyBjb3JyZXNwb25kaW5nIHRvIGFs
bCBvZgotICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUncyBkZXBlbmRlbmNpZXMu
Ci0gICAgICogQHRocm93cyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbiB7QGNvZGUgcHJv
dG99IGlzIG5vdCBhIHZhbGlkCi0gICAgICogICAgICAgICAgIGRlc2NyaXB0b3IuICBUaGlzIGNh
biBvY2N1ciBmb3IgYSBudW1iZXIgb2YgcmVhc29ucywgZS5nLgotICAgICAqICAgICAgICAgICBi
ZWNhdXNlIGEgZmllbGQgaGFzIGFuIHVuZGVmaW5lZCB0eXBlIG9yIGJlY2F1c2UgdHdvIG1lc3Nh
Z2VzCi0gICAgICogICAgICAgICAgIHdlcmUgZGVmaW5lZCB3aXRoIHRoZSBzYW1lIG5hbWUuCi0g
ICAgICovCi0gICAgcHVibGljIHN0YXRpYyBGaWxlRGVzY3JpcHRvciBidWlsZEZyb20oZmluYWwg
RmlsZURlc2NyaXB0b3JQcm90byBwcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaW5hbCBGaWxlRGVzY3JpcHRvcltdIGRlcGVuZGVuY2llcykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBEZXNjcmlwdG9yVmFsaWRhdGlv
bkV4Y2VwdGlvbiB7Ci0gICAgICByZXR1cm4gYnVpbGRGcm9tKHByb3RvLCBkZXBlbmRlbmNpZXMs
IGZhbHNlKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIHtAY29kZSBG
aWxlRGVzY3JpcHRvcn0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJvdG8gVGhlIHByb3RvY29s
IG1lc3NhZ2UgZm9ybSBvZiB0aGUgRmlsZURlc2NyaXB0b3IuCi0gICAgICogQHBhcmFtIGRlcGVu
ZGVuY2llcyB7QGNvZGUgRmlsZURlc2NyaXB0b3J9cyBjb3JyZXNwb25kaW5nIHRvIGFsbCBvZgot
ICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUncyBkZXBlbmRlbmNpZXMuCi0gICAg
ICogQHBhcmFtIGFsbG93VW5rbm93bkRlcGVuZGVuY2llcyBJZiB0cnVlLCBub24tZXhpc3QgZGVw
ZW5kZW5uY2llcyB3aWxsIGJlCi0gICAgICogICAgICAgICAgIGlnbm9yZWQgYW5kIHVuZGVmaW5l
ZCBtZXNzYWdlIHR5cGVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhCi0gICAgICogICAgICAgICAg
IHBsYWNlaG9sZGVyIHR5cGUuCi0gICAgICogQHRocm93cyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4
Y2VwdGlvbiB7QGNvZGUgcHJvdG99IGlzIG5vdCBhIHZhbGlkCi0gICAgICogICAgICAgICAgIGRl
c2NyaXB0b3IuICBUaGlzIGNhbiBvY2N1ciBmb3IgYSBudW1iZXIgb2YgcmVhc29ucywgZS5nLgot
ICAgICAqICAgICAgICAgICBiZWNhdXNlIGEgZmllbGQgaGFzIGFuIHVuZGVmaW5lZCB0eXBlIG9y
IGJlY2F1c2UgdHdvIG1lc3NhZ2VzCi0gICAgICogICAgICAgICAgIHdlcmUgZGVmaW5lZCB3aXRo
IHRoZSBzYW1lIG5hbWUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBGaWxlRGVzY3JpcHRv
ciBidWlsZEZyb20oCi0gICAgICAgIGZpbmFsIEZpbGVEZXNjcmlwdG9yUHJvdG8gcHJvdG8sIGZp
bmFsIEZpbGVEZXNjcmlwdG9yW10gZGVwZW5kZW5jaWVzLAotICAgICAgICBmaW5hbCBib29sZWFu
IGFsbG93VW5rbm93bkRlcGVuZGVuY2llcykKLSAgICAgICAgdGhyb3dzIERlc2NyaXB0b3JWYWxp
ZGF0aW9uRXhjZXB0aW9uIHsKLSAgICAgIC8vIEJ1aWxkaW5nIGRlc2NyaXB0b3JzIGludm9sdmVz
IHR3byBzdGVwczogIHRyYW5zbGF0aW5nIGFuZCBsaW5raW5nLgotICAgICAgLy8gSW4gdGhlIHRy
YW5zbGF0aW9uIHN0ZXAgKGltcGxlbWVudGVkIGJ5IEZpbGVEZXNjcmlwdG9yJ3MKLSAgICAgIC8v
IGNvbnN0cnVjdG9yKSwgd2UgYnVpbGQgYW4gb2JqZWN0IHRyZWUgbWlycm9yaW5nIHRoZQotICAg
ICAgLy8gRmlsZURlc2NyaXB0b3JQcm90bydzIHRyZWUgYW5kIHB1dCBhbGwgb2YgdGhlIGRlc2Ny
aXB0b3JzIGludG8gdGhlCi0gICAgICAvLyBEZXNjcmlwdG9yUG9vbCdzIGxvb2t1cCB0YWJsZXMu
ICBJbiB0aGUgbGlua2luZyBzdGVwLCB3ZSBsb29rIHVwIGFsbAotICAgICAgLy8gdHlwZSByZWZl
cmVuY2VzIGluIHRoZSBEZXNjcmlwdG9yUG9vbCwgc28gdGhhdCwgZm9yIGV4YW1wbGUsIGEKLSAg
ICAgIC8vIEZpZWxkRGVzY3JpcHRvciBmb3IgYW4gZW1iZWRkZWQgbWVzc2FnZSBjb250YWlucyBh
IHBvaW50ZXIgZGlyZWN0bHkKLSAgICAgIC8vIHRvIHRoZSBEZXNjcmlwdG9yIGZvciB0aGF0IG1l
c3NhZ2UncyB0eXBlLiAgV2UgYWxzbyBkZXRlY3QgdW5kZWZpbmVkCi0gICAgICAvLyB0eXBlcyBp
biB0aGUgbGlua2luZyBzdGVwLgotICAgICAgZmluYWwgRGVzY3JpcHRvclBvb2wgcG9vbCA9IG5l
dyBEZXNjcmlwdG9yUG9vbCgKLSAgICAgICAgICBkZXBlbmRlbmNpZXMsIGFsbG93VW5rbm93bkRl
cGVuZGVuY2llcyk7Ci0gICAgICBmaW5hbCBGaWxlRGVzY3JpcHRvciByZXN1bHQgPSBuZXcgRmls
ZURlc2NyaXB0b3IoCi0gICAgICAgICAgcHJvdG8sIGRlcGVuZGVuY2llcywgcG9vbCwgYWxsb3dV
bmtub3duRGVwZW5kZW5jaWVzKTsKLSAgICAgIHJlc3VsdC5jcm9zc0xpbmsoKTsKLSAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgdG8g
YmUgY2FsbGVkIGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHkuICBJdCBpcyBlcXVpdmFsZW50Ci0gICAg
ICogdG8ge0Bjb2RlIGJ1aWxkRnJvbX0gZXhjZXB0IHRoYXQgdGhlIHtAY29kZSBGaWxlRGVzY3Jp
cHRvclByb3RvfSBpcwotICAgICAqIGVuY29kZWQgaW4gcHJvdG9jb2wgYnVmZmVyIHdpcmUgZm9y
bWF0LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbnRlcm5hbEJ1aWxkR2VuZXJh
dGVkRmlsZUZyb20oCi0gICAgICAgIGZpbmFsIFN0cmluZ1tdIGRlc2NyaXB0b3JEYXRhUGFydHMs
Ci0gICAgICAgIGZpbmFsIEZpbGVEZXNjcmlwdG9yW10gZGVwZW5kZW5jaWVzLAotICAgICAgICBm
aW5hbCBJbnRlcm5hbERlc2NyaXB0b3JBc3NpZ25lciBkZXNjcmlwdG9yQXNzaWduZXIpIHsKLSAg
ICAgIC8vIEhhY2s6ICBXZSBjYW4ndCBlbWJlZCBhIHJhdyBieXRlIGFycmF5IGluc2lkZSBnZW5l
cmF0ZWQgSmF2YSBjb2RlCi0gICAgICAvLyAgIChhdCBsZWFzdCwgbm90IGVmZmljaWVudGx5KSwg
YnV0IHdlIGNhbiBlbWJlZCBTdHJpbmdzLiAgU28sIHRoZQotICAgICAgLy8gICBwcm90b2NvbCBj
b21waWxlciBlbWJlZHMgdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8gYXMgYSBnaWFudAotICAgICAg
Ly8gICBzdHJpbmcgbGl0ZXJhbCB3aGljaCBpcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiB0byBj
b25zdHJ1Y3QgdGhlCi0gICAgICAvLyAgIGZpbGUncyBGaWxlRGVzY3JpcHRvci4gIFRoZSBzdHJp
bmcgbGl0ZXJhbCBjb250YWlucyBvbmx5IDgtYml0Ci0gICAgICAvLyAgIGNoYXJhY3RlcnMsIGVh
Y2ggb25lIHJlcHJlc2VudGluZyBhIGJ5dGUgb2YgdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8ncwot
ICAgICAgLy8gICBzZXJpYWxpemVkIGZvcm0uICBTbywgaWYgd2UgY29udmVydCBpdCB0byBieXRl
cyBpbiBJU08tODg1OS0xLCB3ZQotICAgICAgLy8gICBzaG91bGQgZ2V0IHRoZSBvcmlnaW5hbCBi
eXRlcyB0aGF0IHdlIHdhbnQuCi0KLSAgICAgIC8vIGRlc2NyaXB0b3JEYXRhIG1heSBjb250YWlu
IG11bHRpcGxlIHN0cmluZ3MgaW4gb3JkZXIgdG8gZ2V0IGFyb3VuZCB0aGUKLSAgICAgIC8vIEph
dmEgNjRrIHN0cmluZyBsaXRlcmFsIGxpbWl0LgotICAgICAgU3RyaW5nQnVpbGRlciBkZXNjcmlw
dG9yRGF0YSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICBmb3IgKFN0cmluZyBwYXJ0IDog
ZGVzY3JpcHRvckRhdGFQYXJ0cykgewotICAgICAgICBkZXNjcmlwdG9yRGF0YS5hcHBlbmQocGFy
dCk7Ci0gICAgICB9Ci0KLSAgICAgIGZpbmFsIGJ5dGVbXSBkZXNjcmlwdG9yQnl0ZXM7Ci0gICAg
ICBkZXNjcmlwdG9yQnl0ZXMgPSBkZXNjcmlwdG9yRGF0YS50b1N0cmluZygpLmdldEJ5dGVzKElu
dGVybmFsLklTT184ODU5XzEpOwotCi0gICAgICBGaWxlRGVzY3JpcHRvclByb3RvIHByb3RvOwot
ICAgICAgdHJ5IHsKLSAgICAgICAgcHJvdG8gPSBGaWxlRGVzY3JpcHRvclByb3RvLnBhcnNlRnJv
bShkZXNjcmlwdG9yQnl0ZXMpOwotICAgICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlv
bigKLSAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIHByb3RvY29sIGJ1ZmZlciBkZXNjcmlwdG9y
IGZvciBnZW5lcmF0ZWQgY29kZS4iLCBlKTsKLSAgICAgIH0KLQotICAgICAgZmluYWwgRmlsZURl
c2NyaXB0b3IgcmVzdWx0OwotICAgICAgdHJ5IHsKLSAgICAgICAgLy8gV2hlbiBidWlsZGluZyBk
ZXNjcmlwdG9ycyBmb3IgZ2VuZXJhdGVkIGNvZGUsIHdlIGFsbG93IHVua25vd24KLSAgICAgICAg
Ly8gZGVwZW5kZW5jaWVzIGJ5IGRlZmF1bHQuCi0gICAgICAgIHJlc3VsdCA9IGJ1aWxkRnJvbShw
cm90bywgZGVwZW5kZW5jaWVzLCB0cnVlKTsKLSAgICAgIH0gY2F0Y2ggKERlc2NyaXB0b3JWYWxp
ZGF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbigKLSAgICAgICAgICAiSW52YWxpZCBlbWJlZGRlZCBkZXNjcmlwdG9yIGZvciBcIiIg
KyBwcm90by5nZXROYW1lKCkgKyAiXCIuIiwgZSk7Ci0gICAgICB9Ci0KLSAgICAgIGZpbmFsIEV4
dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0KLSAgICAgICAgICBkZXNjcmlwdG9yQXNzaWduZXIu
YXNzaWduRGVzY3JpcHRvcnMocmVzdWx0KTsKLQotICAgICAgaWYgKHJlZ2lzdHJ5ICE9IG51bGwp
IHsKLSAgICAgICAgLy8gV2UgbXVzdCByZS1wYXJzZSB0aGUgcHJvdG8gdXNpbmcgdGhlIHJlZ2lz
dHJ5LgotICAgICAgICB0cnkgewotICAgICAgICAgIHByb3RvID0gRmlsZURlc2NyaXB0b3JQcm90
by5wYXJzZUZyb20oZGVzY3JpcHRvckJ5dGVzLCByZWdpc3RyeSk7Ci0gICAgICAgIH0gY2F0Y2gg
KEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3
IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJGYWlsZWQgdG8gcGFyc2Ug
cHJvdG9jb2wgYnVmZmVyIGRlc2NyaXB0b3IgZm9yIGdlbmVyYXRlZCBjb2RlLiIsCi0gICAgICAg
ICAgICBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5zZXRQcm90byhwcm90byk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgdG8gYmUgY2Fs
bGVkIGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHkuICBJdCB1c2VzIEphdmEKLSAgICAgKiByZWZsZWN0
aW9uIHRvIGxvYWQgdGhlIGRlcGVuZGVuY2llcycgZGVzY3JpcHRvcnMuCi0gICAgICovCi0gICAg
cHVibGljIHN0YXRpYyB2b2lkIGludGVybmFsQnVpbGRHZW5lcmF0ZWRGaWxlRnJvbSgKLSAgICAg
ICAgZmluYWwgU3RyaW5nW10gZGVzY3JpcHRvckRhdGFQYXJ0cywKLSAgICAgICAgZmluYWwgQ2xh
c3M8Pz4gZGVzY3JpcHRvck91dGVyQ2xhc3MsCi0gICAgICAgIGZpbmFsIFN0cmluZ1tdIGRlcGVu
ZGVuY2llcywKLSAgICAgICAgZmluYWwgU3RyaW5nW10gZGVwZW5kZW5jeUZpbGVOYW1lcywKLSAg
ICAgICAgZmluYWwgSW50ZXJuYWxEZXNjcmlwdG9yQXNzaWduZXIgZGVzY3JpcHRvckFzc2lnbmVy
KSB7Ci0gICAgICBMaXN0PEZpbGVEZXNjcmlwdG9yPiBkZXNjcmlwdG9ycyA9IG5ldyBBcnJheUxp
c3Q8RmlsZURlc2NyaXB0b3I+KCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcGVuZGVu
Y2llcy5sZW5ndGg7IGkrKykgewotICAgICAgICB0cnkgewotICAgICAgICAgIENsYXNzPD8+IGNs
YXp6ID0KLSAgICAgICAgICAgICAgZGVzY3JpcHRvck91dGVyQ2xhc3MuZ2V0Q2xhc3NMb2FkZXIo
KS5sb2FkQ2xhc3MoZGVwZW5kZW5jaWVzW2ldKTsKLSAgICAgICAgICBkZXNjcmlwdG9ycy5hZGQo
Ci0gICAgICAgICAgICAgIChGaWxlRGVzY3JpcHRvcikgY2xhenouZ2V0RmllbGQoImRlc2NyaXB0
b3IiKS5nZXQobnVsbCkpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAg
ICAgIC8vIFdlIGFsbG93IHVua25vd24gZGVwZW5kZW5jaWVzIGJ5IGRlZmF1bHQuIElmIGEgZGVw
ZW5kZW5jeSBjYW5ub3QKLSAgICAgICAgICAvLyBiZSBmb3VuZCB3ZSBvbmx5IGdlbmVyYXRlIGEg
d2FybmluZy4KLSAgICAgICAgICBsb2dnZXIud2FybmluZygiRGVzY3JpcHRvcnMgZm9yIFwiIiAr
IGRlcGVuZGVuY3lGaWxlTmFtZXNbaV0gKwotICAgICAgICAgICAgICAiXCIgY2FuIG5vdCBiZSBm
b3VuZC4iKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgRmlsZURlc2NyaXB0b3JbXSBkZXNj
cmlwdG9yQXJyYXkgPSBuZXcgRmlsZURlc2NyaXB0b3JbZGVzY3JpcHRvcnMuc2l6ZSgpXTsKLSAg
ICAgIGRlc2NyaXB0b3JzLnRvQXJyYXkoZGVzY3JpcHRvckFycmF5KTsKLSAgICAgIGludGVybmFs
QnVpbGRHZW5lcmF0ZWRGaWxlRnJvbSgKLSAgICAgICAgICBkZXNjcmlwdG9yRGF0YVBhcnRzLCBk
ZXNjcmlwdG9yQXJyYXksIGRlc2NyaXB0b3JBc3NpZ25lcik7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogVGhpcyBtZXRob2QgaXMgdG8gYmUgY2FsbGVkIGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHku
ICBJdCBpcyB1c2VkIHRvCi0gICAgICogdXBkYXRlIHRoZSBGaWxlRGVzY3JpcHRvclByb3RvIGFz
c29jaWF0ZWQgd2l0aCB0aGUgZGVzY3JpcHRvciBieQotICAgICAqIHBhcnNpbmcgaXQgYWdhaW4g
d2l0aCB0aGUgZ2l2ZW4gRXh0ZW5zaW9uUmVnaXN0cnkuIFRoaXMgaXMgbmVlZGVkIHRvCi0gICAg
ICogcmVjb2duaXplIGN1c3RvbSBvcHRpb25zLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMg
dm9pZCBpbnRlcm5hbFVwZGF0ZUZpbGVEZXNjcmlwdG9yKAotICAgICAgICBmaW5hbCBGaWxlRGVz
Y3JpcHRvciBkZXNjcmlwdG9yLAotICAgICAgICBmaW5hbCBFeHRlbnNpb25SZWdpc3RyeSByZWdp
c3RyeSkgewotICAgICAgQnl0ZVN0cmluZyBieXRlcyA9IGRlc2NyaXB0b3IucHJvdG8udG9CeXRl
U3RyaW5nKCk7Ci0gICAgICBGaWxlRGVzY3JpcHRvclByb3RvIHByb3RvOwotICAgICAgdHJ5IHsK
LSAgICAgICAgcHJvdG8gPSBGaWxlRGVzY3JpcHRvclByb3RvLnBhcnNlRnJvbShieXRlcywgcmVn
aXN0cnkpOwotICAgICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUp
IHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAg
ICAiRmFpbGVkIHRvIHBhcnNlIHByb3RvY29sIGJ1ZmZlciBkZXNjcmlwdG9yIGZvciBnZW5lcmF0
ZWQgY29kZS4iLCBlKTsKLSAgICAgIH0KLSAgICAgIGRlc2NyaXB0b3Iuc2V0UHJvdG8ocHJvdG8p
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIHVzZWQgYnkg
Z2VuZXJhdGVkIGNvZGUgb25seS4gIFdoZW4gY2FsbGluZwotICAgICAqIHtAbGluayBGaWxlRGVz
Y3JpcHRvciNpbnRlcm5hbEJ1aWxkR2VuZXJhdGVkRmlsZUZyb219LCB0aGUgY2FsbGVyCi0gICAg
ICogcHJvdmlkZXMgYSBjYWxsYmFjayBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UuICBUaGUg
Y2FsbGJhY2sgaXMgY2FsbGVkCi0gICAgICogYWZ0ZXIgdGhlIEZpbGVEZXNjcmlwdG9yIGhhcyBi
ZWVuIGNvbnN0cnVjdGVkLCBpbiBvcmRlciB0byBhc3NpZ24gYWxsCi0gICAgICogdGhlIGdsb2Jh
bCB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgd2hpY2ggcG9pbnQgYXQg
cGFydHMKLSAgICAgKiBvZiB0aGUgRmlsZURlc2NyaXB0b3IuICBUaGUgY2FsbGJhY2sgcmV0dXJu
cyBhbiBFeHRlbnNpb25SZWdpc3RyeSB3aGljaAotICAgICAqIGNvbnRhaW5zIGFueSBleHRlbnNp
b25zIHdoaWNoIG1pZ2h0IGJlIHVzZWQgaW4gdGhlIGRlc2NyaXB0b3IgLS0gdGhhdAotICAgICAq
IGlzLCBleHRlbnNpb25zIG9mIHRoZSB2YXJpb3VzICJPcHRpb25zIiBtZXNzYWdlcyBkZWZpbmVk
IGluCi0gICAgICogZGVzY3JpcHRvci5wcm90by4gIFRoZSBjYWxsYmFjayBtYXkgYWxzbyByZXR1
cm4gbnVsbCB0byBpbmRpY2F0ZSB0aGF0Ci0gICAgICogbm8gZXh0ZW5zaW9ucyBhcmUgdXNlZCBp
biB0aGUgZGVzY3JpcHRvci4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50ZXJmYWNlIEludGVybmFs
RGVzY3JpcHRvckFzc2lnbmVyIHsKLSAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5IGFzc2lnbkRlc2Ny
aXB0b3JzKEZpbGVEZXNjcmlwdG9yIHJvb3QpOwotICAgIH0KLQotICAgIHByaXZhdGUgRmlsZURl
c2NyaXB0b3JQcm90byBwcm90bzsKLSAgICBwcml2YXRlIGZpbmFsIERlc2NyaXB0b3JbXSBtZXNz
YWdlVHlwZXM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBFbnVtRGVzY3JpcHRvcltdIGVudW1UeXBlczsK
LSAgICBwcml2YXRlIGZpbmFsIFNlcnZpY2VEZXNjcmlwdG9yW10gc2VydmljZXM7Ci0gICAgcHJp
dmF0ZSBmaW5hbCBGaWVsZERlc2NyaXB0b3JbXSBleHRlbnNpb25zOwotICAgIHByaXZhdGUgZmlu
YWwgRmlsZURlc2NyaXB0b3JbXSBkZXBlbmRlbmNpZXM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBGaWxl
RGVzY3JpcHRvcltdIHB1YmxpY0RlcGVuZGVuY2llczsKLSAgICBwcml2YXRlIGZpbmFsIERlc2Ny
aXB0b3JQb29sIHBvb2w7Ci0KLSAgICBwcml2YXRlIEZpbGVEZXNjcmlwdG9yKGZpbmFsIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBG
aWxlRGVzY3JpcHRvcltdIGRlcGVuZGVuY2llcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpbmFsIERlc2NyaXB0b3JQb29sIHBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sZWFuIGFsbG93VW5rbm93bkRlcGVuZGVuY2llcykKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3dzIERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uIHsKLSAgICAgIHRoaXMucG9vbCA9IHBv
b2w7Ci0gICAgICB0aGlzLnByb3RvID0gcHJvdG87Ci0gICAgICB0aGlzLmRlcGVuZGVuY2llcyA9
IGRlcGVuZGVuY2llcy5jbG9uZSgpOwotICAgICAgSGFzaE1hcDxTdHJpbmcsIEZpbGVEZXNjcmlw
dG9yPiBuYW1lVG9GaWxlTWFwID0KLSAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIEZpbGVE
ZXNjcmlwdG9yPigpOwotICAgICAgZm9yIChGaWxlRGVzY3JpcHRvciBmaWxlIDogZGVwZW5kZW5j
aWVzKSB7Ci0gICAgICAgIG5hbWVUb0ZpbGVNYXAucHV0KGZpbGUuZ2V0TmFtZSgpLCBmaWxlKTsK
LSAgICAgIH0KLSAgICAgIExpc3Q8RmlsZURlc2NyaXB0b3I+IHB1YmxpY0RlcGVuZGVuY2llcyA9
IG5ldyBBcnJheUxpc3Q8RmlsZURlc2NyaXB0b3I+KCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHByb3RvLmdldFB1YmxpY0RlcGVuZGVuY3lDb3VudCgpOyBpKyspIHsKLSAgICAgICAgaW50
IGluZGV4ID0gcHJvdG8uZ2V0UHVibGljRGVwZW5kZW5jeShpKTsKLSAgICAgICAgaWYgKGluZGV4
IDwgMCB8fCBpbmRleCA+PSBwcm90by5nZXREZXBlbmRlbmN5Q291bnQoKSkgewotICAgICAgICAg
IHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAg
ICAgICAiSW52YWxpZCBwdWJsaWMgZGVwZW5kZW5jeSBpbmRleC4iKTsKLSAgICAgICAgfQotICAg
ICAgICBTdHJpbmcgbmFtZSA9IHByb3RvLmdldERlcGVuZGVuY3koaW5kZXgpOwotICAgICAgICBG
aWxlRGVzY3JpcHRvciBmaWxlID0gbmFtZVRvRmlsZU1hcC5nZXQobmFtZSk7Ci0gICAgICAgIGlm
IChmaWxlID09IG51bGwpIHsKLSAgICAgICAgICBpZiAoIWFsbG93VW5rbm93bkRlcGVuZGVuY2ll
cykgewotICAgICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9u
KHRoaXMsCi0gICAgICAgICAgICAgICAgIkludmFsaWQgcHVibGljIGRlcGVuZGVuY3k6ICIgKyBu
YW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gSWdub3JlIHVua25vd24gZGVwZW5kZW5j
aWVzLgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHB1YmxpY0RlcGVuZGVuY2llcy5hZGQo
ZmlsZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRoaXMucHVibGljRGVwZW5kZW5jaWVz
ID0gbmV3IEZpbGVEZXNjcmlwdG9yW3B1YmxpY0RlcGVuZGVuY2llcy5zaXplKCldOwotICAgICAg
cHVibGljRGVwZW5kZW5jaWVzLnRvQXJyYXkodGhpcy5wdWJsaWNEZXBlbmRlbmNpZXMpOwotCi0g
ICAgICBwb29sLmFkZFBhY2thZ2UoZ2V0UGFja2FnZSgpLCB0aGlzKTsKLQotICAgICAgbWVzc2Fn
ZVR5cGVzID0gbmV3IERlc2NyaXB0b3JbcHJvdG8uZ2V0TWVzc2FnZVR5cGVDb3VudCgpXTsKLSAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvdG8uZ2V0TWVzc2FnZVR5cGVDb3VudCgpOyBpKysp
IHsKLSAgICAgICAgbWVzc2FnZVR5cGVzW2ldID0KLSAgICAgICAgICBuZXcgRGVzY3JpcHRvcihw
cm90by5nZXRNZXNzYWdlVHlwZShpKSwgdGhpcywgbnVsbCwgaSk7Ci0gICAgICB9Ci0KLSAgICAg
IGVudW1UeXBlcyA9IG5ldyBFbnVtRGVzY3JpcHRvcltwcm90by5nZXRFbnVtVHlwZUNvdW50KCld
OwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm90by5nZXRFbnVtVHlwZUNvdW50KCk7IGkr
KykgewotICAgICAgICBlbnVtVHlwZXNbaV0gPSBuZXcgRW51bURlc2NyaXB0b3IocHJvdG8uZ2V0
RW51bVR5cGUoaSksIHRoaXMsIG51bGwsIGkpOwotICAgICAgfQotCi0gICAgICBzZXJ2aWNlcyA9
IG5ldyBTZXJ2aWNlRGVzY3JpcHRvcltwcm90by5nZXRTZXJ2aWNlQ291bnQoKV07Ci0gICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHByb3RvLmdldFNlcnZpY2VDb3VudCgpOyBpKyspIHsKLSAgICAg
ICAgc2VydmljZXNbaV0gPSBuZXcgU2VydmljZURlc2NyaXB0b3IocHJvdG8uZ2V0U2VydmljZShp
KSwgdGhpcywgaSk7Ci0gICAgICB9Ci0KLSAgICAgIGV4dGVuc2lvbnMgPSBuZXcgRmllbGREZXNj
cmlwdG9yW3Byb3RvLmdldEV4dGVuc2lvbkNvdW50KCldOwotICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBwcm90by5nZXRFeHRlbnNpb25Db3VudCgpOyBpKyspIHsKLSAgICAgICAgZXh0ZW5zaW9u
c1tpXSA9IG5ldyBGaWVsZERlc2NyaXB0b3IoCi0gICAgICAgICAgcHJvdG8uZ2V0RXh0ZW5zaW9u
KGkpLCB0aGlzLCBudWxsLCBpLCB0cnVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBDcmVhdGUgYSBwbGFjZWhvbGRlciBGaWxlRGVzY3JpcHRvciBmb3IgYSBtZXNzYWdlIERl
c2NyaXB0b3IuCi0gICAgICovCi0gICAgRmlsZURlc2NyaXB0b3IoU3RyaW5nIHBhY2thZ2VOYW1l
LCBEZXNjcmlwdG9yIG1lc3NhZ2UpCi0gICAgICAgIHRocm93cyBEZXNjcmlwdG9yVmFsaWRhdGlv
bkV4Y2VwdGlvbiB7Ci0gICAgICB0aGlzLnBvb2wgPSBuZXcgRGVzY3JpcHRvclBvb2wobmV3IEZp
bGVEZXNjcmlwdG9yWzBdLCB0cnVlKTsKLSAgICAgIHRoaXMucHJvdG8gPSBGaWxlRGVzY3JpcHRv
clByb3RvLm5ld0J1aWxkZXIoKQotICAgICAgICAgIC5zZXROYW1lKG1lc3NhZ2UuZ2V0RnVsbE5h
bWUoKSArICIucGxhY2Vob2xkZXIucHJvdG8iKQotICAgICAgICAgIC5zZXRQYWNrYWdlKHBhY2th
Z2VOYW1lKS5hZGRNZXNzYWdlVHlwZShtZXNzYWdlLnRvUHJvdG8oKSkuYnVpbGQoKTsKLSAgICAg
IHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IEZpbGVEZXNjcmlwdG9yWzBdOwotICAgICAgdGhpcy5w
dWJsaWNEZXBlbmRlbmNpZXMgPSBuZXcgRmlsZURlc2NyaXB0b3JbMF07Ci0KLSAgICAgIG1lc3Nh
Z2VUeXBlcyA9IG5ldyBEZXNjcmlwdG9yW10ge21lc3NhZ2V9OwotICAgICAgZW51bVR5cGVzID0g
bmV3IEVudW1EZXNjcmlwdG9yWzBdOwotICAgICAgc2VydmljZXMgPSBuZXcgU2VydmljZURlc2Ny
aXB0b3JbMF07Ci0gICAgICBleHRlbnNpb25zID0gbmV3IEZpZWxkRGVzY3JpcHRvclswXTsKLQot
ICAgICAgcG9vbC5hZGRQYWNrYWdlKHBhY2thZ2VOYW1lLCB0aGlzKTsKLSAgICAgIHBvb2wuYWRk
U3ltYm9sKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIC8qKiBMb29rIHVwIGFuZCBjcm9zcy1saW5r
IGFsbCBmaWVsZCB0eXBlcywgZXRjLiAqLwotICAgIHByaXZhdGUgdm9pZCBjcm9zc0xpbmsoKSB0
aHJvd3MgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24gewotICAgICAgZm9yIChmaW5hbCBE
ZXNjcmlwdG9yIG1lc3NhZ2VUeXBlIDogbWVzc2FnZVR5cGVzKSB7Ci0gICAgICAgIG1lc3NhZ2VU
eXBlLmNyb3NzTGluaygpOwotICAgICAgfQotCi0gICAgICBmb3IgKGZpbmFsIFNlcnZpY2VEZXNj
cmlwdG9yIHNlcnZpY2UgOiBzZXJ2aWNlcykgewotICAgICAgICBzZXJ2aWNlLmNyb3NzTGluaygp
OwotICAgICAgfQotCi0gICAgICBmb3IgKGZpbmFsIEZpZWxkRGVzY3JpcHRvciBleHRlbnNpb24g
OiBleHRlbnNpb25zKSB7Ci0gICAgICAgIGV4dGVuc2lvbi5jcm9zc0xpbmsoKTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXBsYWNlIG91ciB7QGxpbmsgRmlsZURlc2NyaXB0
b3JQcm90b30gd2l0aCB0aGUgZ2l2ZW4gb25lLCB3aGljaCBpcwotICAgICAqIGlkZW50aWNhbCBl
eGNlcHQgdGhhdCBpdCBtaWdodCBjb250YWluIGV4dGVuc2lvbnMgdGhhdCB3ZXJlbid0IHByZXNl
bnQKLSAgICAgKiBpbiB0aGUgb3JpZ2luYWwuICBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgZm9yIGJv
b3RzdHJhcHBpbmcgd2hlbiBhIGZpbGUKLSAgICAgKiBkZWZpbmVzIGN1c3RvbSBvcHRpb25zLiAg
VGhlIG9wdGlvbnMgbWF5IGJlIGRlZmluZWQgaW4gdGhlIGZpbGUgaXRzZWxmLAotICAgICAqIHNv
IHdlIGNhbid0IGFjdHVhbGx5IHBhcnNlIHRoZW0gdW50aWwgd2UndmUgY29uc3RydWN0ZWQgdGhl
IGRlc2NyaXB0b3JzLAotICAgICAqIGJ1dCB0byBjb25zdHJ1Y3QgdGhlIGRlc2NyaXB0b3JzIHdl
IGhhdmUgdG8gaGF2ZSBwYXJzZWQgdGhlIGRlc2NyaXB0b3IKLSAgICAgKiBwcm90b3MuICBTbywg
d2UgaGF2ZSB0byBwYXJzZSB0aGUgZGVzY3JpcHRvciBwcm90b3MgYSBzZWNvbmQgdGltZSBhZnRl
cgotICAgICAqIGNvbnN0cnVjdGluZyB0aGUgZGVzY3JpcHRvcnMuCi0gICAgICovCi0gICAgcHJp
dmF0ZSB2b2lkIHNldFByb3RvKGZpbmFsIEZpbGVEZXNjcmlwdG9yUHJvdG8gcHJvdG8pIHsKLSAg
ICAgIHRoaXMucHJvdG8gPSBwcm90bzsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNz
YWdlVHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgbWVzc2FnZVR5cGVzW2ldLnNldFByb3Rv
KHByb3RvLmdldE1lc3NhZ2VUeXBlKGkpKTsKLSAgICAgIH0KLQotICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBlbnVtVHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgZW51bVR5cGVzW2ldLnNl
dFByb3RvKHByb3RvLmdldEVudW1UeXBlKGkpKTsKLSAgICAgIH0KLQotICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzZXJ2aWNlcy5sZW5ndGg7IGkrKykgewotICAgICAgICBzZXJ2aWNlc1tpXS5z
ZXRQcm90byhwcm90by5nZXRTZXJ2aWNlKGkpKTsKLSAgICAgIH0KLQotICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNb
aV0uc2V0UHJvdG8ocHJvdG8uZ2V0RXh0ZW5zaW9uKGkpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBib29sZWFuIHN1cHBvcnRzVW5rbm93bkVudW1WYWx1ZSgpIHsKLSAgICAgIHJldHVybiBnZXRT
eW50YXgoKSA9PSBTeW50YXguUFJPVE8zOwotICAgIH0KLSAgfQotCi0gIC8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0K
LSAgLyoqIERlc2NyaWJlcyBhIG1lc3NhZ2UgdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5h
bCBjbGFzcyBEZXNjcmlwdG9yIGV4dGVuZHMgR2VuZXJpY0Rlc2NyaXB0b3IgewotICAgIC8qKgot
ICAgICAqIEdldCB0aGUgaW5kZXggb2YgdGhpcyBkZXNjcmlwdG9yIHdpdGhpbiBpdHMgcGFyZW50
LiAgSW4gb3RoZXIgd29yZHMsCi0gICAgICogZ2l2ZW4gYSB7QGxpbmsgRmlsZURlc2NyaXB0b3J9
IHtAY29kZSBmaWxlfSwgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgotICAgICAqIDxwcmU+Ci0gICAg
ICogICBmb3IgYWxsIGkgaW4gWzAsIGZpbGUuZ2V0TWVzc2FnZVR5cGVDb3VudCgpKToKLSAgICAg
KiAgICAgZmlsZS5nZXRNZXNzYWdlVHlwZShpKS5nZXRJbmRleCgpID09IGkKLSAgICAgKiA8L3By
ZT4KLSAgICAgKiBTaW1pbGFybHksIGZvciBhIHtAbGluayBEZXNjcmlwdG9yfSB7QGNvZGUgbWVz
c2FnZVR5cGV9OgotICAgICAqIDxwcmU+Ci0gICAgICogICBmb3IgYWxsIGkgaW4gWzAsIG1lc3Nh
Z2VUeXBlLmdldE5lc3RlZFR5cGVDb3VudCgpKToKLSAgICAgKiAgICAgbWVzc2FnZVR5cGUuZ2V0
TmVzdGVkVHlwZShpKS5nZXRJbmRleCgpID09IGkKLSAgICAgKiA8L3ByZT4KLSAgICAgKi8KLSAg
ICBwdWJsaWMgaW50IGdldEluZGV4KCkgeyByZXR1cm4gaW5kZXg7IH0KLQotICAgIC8qKiBDb252
ZXJ0IHRoZSBkZXNjcmlwdG9yIHRvIGl0cyBwcm90b2NvbCBtZXNzYWdlIHJlcHJlc2VudGF0aW9u
LiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEZXNjcmlwdG9yUHJvdG8gdG9Qcm90bygp
IHsKLSAgICAgIHJldHVybiBwcm90bzsKLSAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSB0eXBlJ3Mg
dW5xdWFsaWZpZWQgbmFtZS4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdl
dE5hbWUoKSB7Ci0gICAgICByZXR1cm4gcHJvdG8uZ2V0TmFtZSgpOwotICAgIH0KLQotICAgIC8q
KgotICAgICAqIEdldCB0aGUgdHlwZSdzIGZ1bGx5LXF1YWxpZmllZCBuYW1lLCB3aXRoaW4gdGhl
IHByb3RvIGxhbmd1YWdlJ3MKLSAgICAgKiBuYW1lc3BhY2UuICBUaGlzIGRpZmZlcnMgZnJvbSB0
aGUgSmF2YSBuYW1lLiAgRm9yIGV4YW1wbGUsIGdpdmVuIHRoaXMKLSAgICAgKiB7QGNvZGUgLnBy
b3RvfToKLSAgICAgKiA8cHJlPgotICAgICAqICAgcGFja2FnZSBmb28uYmFyOwotICAgICAqICAg
b3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZXhhbXBsZS5wcm90b3MiCi0gICAgICogICBtZXNz
YWdlIEJheiB7fQotICAgICAqIDwvcHJlPgotICAgICAqIHtAY29kZSBCYXp9J3MgZnVsbCBuYW1l
IGlzICJmb28uYmFyLkJheiIuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0
cmluZyBnZXRGdWxsTmFtZSgpIHsKLSAgICAgIHJldHVybiBmdWxsTmFtZTsKLSAgICB9Ci0KLSAg
ICAvKiogR2V0IHRoZSB7QGxpbmsgRmlsZURlc2NyaXB0b3J9IGNvbnRhaW5pbmcgdGhpcyBkZXNj
cmlwdG9yLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWxlRGVzY3JpcHRvciBnZXRG
aWxlKCkgewotICAgICAgcmV0dXJuIGZpbGU7Ci0gICAgfQotCi0gICAgLyoqIElmIHRoaXMgaXMg
YSBuZXN0ZWQgdHlwZSwgZ2V0IHRoZSBvdXRlciBkZXNjcmlwdG9yLCBvdGhlcndpc2UgbnVsbC4g
Ki8KLSAgICBwdWJsaWMgRGVzY3JpcHRvciBnZXRDb250YWluaW5nVHlwZSgpIHsgcmV0dXJuIGNv
bnRhaW5pbmdUeXBlOyB9Ci0KLSAgICAvKiogR2V0IHRoZSB7QGNvZGUgTWVzc2FnZU9wdGlvbnN9
LCBkZWZpbmVkIGluIHtAY29kZSBkZXNjcmlwdG9yLnByb3RvfS4gKi8KLSAgICBwdWJsaWMgTWVz
c2FnZU9wdGlvbnMgZ2V0T3B0aW9ucygpIHsgcmV0dXJuIHByb3RvLmdldE9wdGlvbnMoKTsgfQot
Ci0gICAgLyoqIEdldCBhIGxpc3Qgb2YgdGhpcyBtZXNzYWdlIHR5cGUncyBmaWVsZHMuICovCi0g
ICAgcHVibGljIExpc3Q8RmllbGREZXNjcmlwdG9yPiBnZXRGaWVsZHMoKSB7Ci0gICAgICByZXR1
cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KGZpZWxkcykpOwot
ICAgIH0KLQotICAgIC8qKiBHZXQgYSBsaXN0IG9mIHRoaXMgbWVzc2FnZSB0eXBlJ3Mgb25lb2Zz
LiAqLwotICAgIHB1YmxpYyBMaXN0PE9uZW9mRGVzY3JpcHRvcj4gZ2V0T25lb2ZzKCkgewotICAg
ICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChvbmVv
ZnMpKTsKLSAgICB9Ci0KLSAgICAvKiogR2V0IGEgbGlzdCBvZiB0aGlzIG1lc3NhZ2UgdHlwZSdz
IGV4dGVuc2lvbnMuICovCi0gICAgcHVibGljIExpc3Q8RmllbGREZXNjcmlwdG9yPiBnZXRFeHRl
bnNpb25zKCkgewotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJy
YXlzLmFzTGlzdChleHRlbnNpb25zKSk7Ci0gICAgfQotCi0gICAgLyoqIEdldCBhIGxpc3Qgb2Yg
bWVzc2FnZSB0eXBlcyBuZXN0ZWQgd2l0aGluIHRoaXMgb25lLiAqLwotICAgIHB1YmxpYyBMaXN0
PERlc2NyaXB0b3I+IGdldE5lc3RlZFR5cGVzKCkgewotICAgICAgcmV0dXJuIENvbGxlY3Rpb25z
LnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChuZXN0ZWRUeXBlcykpOwotICAgIH0KLQot
ICAgIC8qKiBHZXQgYSBsaXN0IG9mIGVudW0gdHlwZXMgbmVzdGVkIHdpdGhpbiB0aGlzIG9uZS4g
Ki8KLSAgICBwdWJsaWMgTGlzdDxFbnVtRGVzY3JpcHRvcj4gZ2V0RW51bVR5cGVzKCkgewotICAg
ICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChlbnVt
VHlwZXMpKTsKLSAgICB9Ci0KLSAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZmllbGQg
bnVtYmVyIGlzIGFuIGV4dGVuc2lvbi4gKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0V4dGVuc2lv
bk51bWJlcihmaW5hbCBpbnQgbnVtYmVyKSB7Ci0gICAgICBmb3IgKGZpbmFsIERlc2NyaXB0b3JQ
cm90by5FeHRlbnNpb25SYW5nZSByYW5nZSA6Ci0gICAgICAgICAgcHJvdG8uZ2V0RXh0ZW5zaW9u
UmFuZ2VMaXN0KCkpIHsKLSAgICAgICAgaWYgKHJhbmdlLmdldFN0YXJ0KCkgPD0gbnVtYmVyICYm
IG51bWJlciA8IHJhbmdlLmdldEVuZCgpKSB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKiogRGV0
ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyIGlzIHJlc2VydmVkLiAqLwotICAgIHB1
YmxpYyBib29sZWFuIGlzUmVzZXJ2ZWROdW1iZXIoZmluYWwgaW50IG51bWJlcikgewotICAgICAg
Zm9yIChmaW5hbCBEZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSByYW5nZSA6Ci0gICAgICAg
ICAgcHJvdG8uZ2V0UmVzZXJ2ZWRSYW5nZUxpc3QoKSkgewotICAgICAgICBpZiAocmFuZ2UuZ2V0
U3RhcnQoKSA8PSBudW1iZXIgJiYgbnVtYmVyIDwgcmFuZ2UuZ2V0RW5kKCkpIHsKLSAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBmaWVsZCBuYW1lIGlzIHJl
c2VydmVkLiAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzUmVzZXJ2ZWROYW1lKGZpbmFsIFN0cmlu
ZyBuYW1lKSB7Ci0gICAgICBpZiAobmFtZSA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBO
dWxsUG9pbnRlckV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgZm9yIChmaW5hbCBTdHJpbmcg
cmVzZXJ2ZWROYW1lIDogcHJvdG8uZ2V0UmVzZXJ2ZWROYW1lTGlzdCgpKSB7Ci0gICAgICAgIGlm
IChyZXNlcnZlZE5hbWUuZXF1YWxzKG5hbWUpKSB7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbWVzc2FnZSBjYW4gYmUgZXh0ZW5kZWQuICBU
aGF0IGlzLCB3aGV0aGVyIGl0IGhhcwotICAgICAqIGFueSAiZXh0ZW5zaW9ucyB4IHRvIHkiIHJh
bmdlcyBkZWNsYXJlZCBvbiBpdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0V4dGVu
ZGFibGUoKSB7Ci0gICAgICByZXR1cm4gcHJvdG8uZ2V0RXh0ZW5zaW9uUmFuZ2VMaXN0KCkuc2l6
ZSgpICE9IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmluZHMgYSBmaWVsZCBieSBuYW1l
LgotICAgICAqIEBwYXJhbSBuYW1lIFRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIHRoZSBmaWVsZCAo
ZS5nLiAiZm9vIikuCi0gICAgICogQHJldHVybiBUaGUgZmllbGQncyBkZXNjcmlwdG9yLCBvciB7
QGNvZGUgbnVsbH0gaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHB1YmxpYyBGaWVsZERlc2Ny
aXB0b3IgZmluZEZpZWxkQnlOYW1lKGZpbmFsIFN0cmluZyBuYW1lKSB7Ci0gICAgICBmaW5hbCBH
ZW5lcmljRGVzY3JpcHRvciByZXN1bHQgPQotICAgICAgICAgIGZpbGUucG9vbC5maW5kU3ltYm9s
KGZ1bGxOYW1lICsgJy4nICsgbmFtZSk7Ci0gICAgICBpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVz
dWx0IGluc3RhbmNlb2YgRmllbGREZXNjcmlwdG9yKSB7Ci0gICAgICAgIHJldHVybiAoRmllbGRE
ZXNjcmlwdG9yKXJlc3VsdDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZpbmRzIGEgZmllbGQgYnkgZmllbGQg
bnVtYmVyLgotICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIGZpZWxkIG51bWJlciB3aXRoaW4gdGhp
cyBtZXNzYWdlIHR5cGUuCi0gICAgICogQHJldHVybiBUaGUgZmllbGQncyBkZXNjcmlwdG9yLCBv
ciB7QGNvZGUgbnVsbH0gaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHB1YmxpYyBGaWVsZERl
c2NyaXB0b3IgZmluZEZpZWxkQnlOdW1iZXIoZmluYWwgaW50IG51bWJlcikgewotICAgICAgcmV0
dXJuIGZpbGUucG9vbC5maWVsZHNCeU51bWJlci5nZXQoCi0gICAgICAgIG5ldyBEZXNjcmlwdG9y
UG9vbC5EZXNjcmlwdG9ySW50UGFpcih0aGlzLCBudW1iZXIpKTsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBGaW5kcyBhIG5lc3RlZCBtZXNzYWdlIHR5cGUgYnkgbmFtZS4KLSAgICAgKiBAcGFy
YW0gbmFtZSBUaGUgdW5xdWFsaWZpZWQgbmFtZSBvZiB0aGUgbmVzdGVkIHR5cGUgKGUuZy4gIkZv
byIpLgotICAgICAqIEByZXR1cm4gVGhlIHR5cGVzJ3MgZGVzY3JpcHRvciwgb3Ige0Bjb2RlIG51
bGx9IGlmIG5vdCBmb3VuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgRGVzY3JpcHRvciBmaW5kTmVz
dGVkVHlwZUJ5TmFtZShmaW5hbCBTdHJpbmcgbmFtZSkgewotICAgICAgZmluYWwgR2VuZXJpY0Rl
c2NyaXB0b3IgcmVzdWx0ID0KLSAgICAgICAgICBmaWxlLnBvb2wuZmluZFN5bWJvbChmdWxsTmFt
ZSArICcuJyArIG5hbWUpOwotICAgICAgaWYgKHJlc3VsdCAhPSBudWxsICYmIHJlc3VsdCBpbnN0
YW5jZW9mIERlc2NyaXB0b3IpIHsKLSAgICAgICAgcmV0dXJuIChEZXNjcmlwdG9yKXJlc3VsdDsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIEZpbmRzIGEgbmVzdGVkIGVudW0gdHlwZSBieSBuYW1lLgotICAgICAq
IEBwYXJhbSBuYW1lIFRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIHRoZSBuZXN0ZWQgdHlwZSAoZS5n
LiAiRm9vIikuCi0gICAgICogQHJldHVybiBUaGUgdHlwZXMncyBkZXNjcmlwdG9yLCBvciB7QGNv
ZGUgbnVsbH0gaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHB1YmxpYyBFbnVtRGVzY3JpcHRv
ciBmaW5kRW51bVR5cGVCeU5hbWUoZmluYWwgU3RyaW5nIG5hbWUpIHsKLSAgICAgIGZpbmFsIEdl
bmVyaWNEZXNjcmlwdG9yIHJlc3VsdCA9Ci0gICAgICAgICAgZmlsZS5wb29sLmZpbmRTeW1ib2wo
ZnVsbE5hbWUgKyAnLicgKyBuYW1lKTsKLSAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1
bHQgaW5zdGFuY2VvZiBFbnVtRGVzY3JpcHRvcikgewotICAgICAgICByZXR1cm4gKEVudW1EZXNj
cmlwdG9yKXJlc3VsdDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAg
ICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgaW50IGluZGV4OwotICAgIHByaXZhdGUg
RGVzY3JpcHRvclByb3RvIHByb3RvOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGZ1bGxOYW1l
OwotICAgIHByaXZhdGUgZmluYWwgRmlsZURlc2NyaXB0b3IgZmlsZTsKLSAgICBwcml2YXRlIGZp
bmFsIERlc2NyaXB0b3IgY29udGFpbmluZ1R5cGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlw
dG9yW10gbmVzdGVkVHlwZXM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBFbnVtRGVzY3JpcHRvcltdIGVu
dW1UeXBlczsKLSAgICBwcml2YXRlIGZpbmFsIEZpZWxkRGVzY3JpcHRvcltdIGZpZWxkczsKLSAg
ICBwcml2YXRlIGZpbmFsIEZpZWxkRGVzY3JpcHRvcltdIGV4dGVuc2lvbnM7Ci0gICAgcHJpdmF0
ZSBmaW5hbCBPbmVvZkRlc2NyaXB0b3JbXSBvbmVvZnM7Ci0KLSAgICAvLyBVc2VkIHRvIGNyZWF0
ZSBhIHBsYWNlaG9sZGVyIHdoZW4gdGhlIHR5cGUgY2Fubm90IGJlIGZvdW5kLgotICAgIERlc2Ny
aXB0b3IoZmluYWwgU3RyaW5nIGZ1bGxuYW1lKSB0aHJvd3MgRGVzY3JpcHRvclZhbGlkYXRpb25F
eGNlcHRpb24gewotICAgICAgU3RyaW5nIG5hbWUgPSBmdWxsbmFtZTsKLSAgICAgIFN0cmluZyBw
YWNrYWdlTmFtZSA9ICIiOwotICAgICAgaW50IHBvcyA9IGZ1bGxuYW1lLmxhc3RJbmRleE9mKCcu
Jyk7Ci0gICAgICBpZiAocG9zICE9IC0xKSB7Ci0gICAgICAgIG5hbWUgPSBmdWxsbmFtZS5zdWJz
dHJpbmcocG9zICsgMSk7Ci0gICAgICAgIHBhY2thZ2VOYW1lID0gZnVsbG5hbWUuc3Vic3RyaW5n
KDAsIHBvcyk7Ci0gICAgICB9Ci0gICAgICB0aGlzLmluZGV4ID0gMDsKLSAgICAgIHRoaXMucHJv
dG8gPSBEZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpLnNldE5hbWUobmFtZSkuYWRkRXh0ZW5z
aW9uUmFuZ2UoCi0gICAgICAgICAgRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLm5ld0J1
aWxkZXIoKS5zZXRTdGFydCgxKQotICAgICAgICAgIC5zZXRFbmQoNTM2ODcwOTEyKS5idWlsZCgp
KS5idWlsZCgpOwotICAgICAgdGhpcy5mdWxsTmFtZSA9IGZ1bGxuYW1lOwotICAgICAgdGhpcy5j
b250YWluaW5nVHlwZSA9IG51bGw7Ci0KLSAgICAgIHRoaXMubmVzdGVkVHlwZXMgPSBuZXcgRGVz
Y3JpcHRvclswXTsKLSAgICAgIHRoaXMuZW51bVR5cGVzID0gbmV3IEVudW1EZXNjcmlwdG9yWzBd
OwotICAgICAgdGhpcy5maWVsZHMgPSBuZXcgRmllbGREZXNjcmlwdG9yWzBdOwotICAgICAgdGhp
cy5leHRlbnNpb25zID0gbmV3IEZpZWxkRGVzY3JpcHRvclswXTsKLSAgICAgIHRoaXMub25lb2Zz
ID0gbmV3IE9uZW9mRGVzY3JpcHRvclswXTsKLQotICAgICAgLy8gQ3JlYXRlIGEgcGxhY2Vob2xk
ZXIgRmlsZURlc2NyaXB0b3IgdG8gaG9sZCB0aGlzIG1lc3NhZ2UuCi0gICAgICB0aGlzLmZpbGUg
PSBuZXcgRmlsZURlc2NyaXB0b3IocGFja2FnZU5hbWUsIHRoaXMpOwotICAgIH0KLQotICAgIHBy
aXZhdGUgRGVzY3JpcHRvcihmaW5hbCBEZXNjcmlwdG9yUHJvdG8gcHJvdG8sCi0gICAgICAgICAg
ICAgICAgICAgICAgIGZpbmFsIEZpbGVEZXNjcmlwdG9yIGZpbGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgIGZpbmFsIERlc2NyaXB0b3IgcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICBm
aW5hbCBpbnQgaW5kZXgpCi0gICAgICAgICAgICAgICAgdGhyb3dzIERlc2NyaXB0b3JWYWxpZGF0
aW9uRXhjZXB0aW9uIHsKLSAgICAgIHRoaXMuaW5kZXggPSBpbmRleDsKLSAgICAgIHRoaXMucHJv
dG8gPSBwcm90bzsKLSAgICAgIGZ1bGxOYW1lID0gY29tcHV0ZUZ1bGxOYW1lKGZpbGUsIHBhcmVu
dCwgcHJvdG8uZ2V0TmFtZSgpKTsKLSAgICAgIHRoaXMuZmlsZSA9IGZpbGU7Ci0gICAgICBjb250
YWluaW5nVHlwZSA9IHBhcmVudDsKLQotICAgICAgb25lb2ZzID0gbmV3IE9uZW9mRGVzY3JpcHRv
cltwcm90by5nZXRPbmVvZkRlY2xDb3VudCgpXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cHJvdG8uZ2V0T25lb2ZEZWNsQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgIG9uZW9mc1tpXSA9IG5l
dyBPbmVvZkRlc2NyaXB0b3IoCi0gICAgICAgICAgcHJvdG8uZ2V0T25lb2ZEZWNsKGkpLCBmaWxl
LCB0aGlzLCBpKTsKLSAgICAgIH0KLQotICAgICAgbmVzdGVkVHlwZXMgPSBuZXcgRGVzY3JpcHRv
cltwcm90by5nZXROZXN0ZWRUeXBlQ291bnQoKV07Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHByb3RvLmdldE5lc3RlZFR5cGVDb3VudCgpOyBpKyspIHsKLSAgICAgICAgbmVzdGVkVHlwZXNb
aV0gPSBuZXcgRGVzY3JpcHRvcigKLSAgICAgICAgICBwcm90by5nZXROZXN0ZWRUeXBlKGkpLCBm
aWxlLCB0aGlzLCBpKTsKLSAgICAgIH0KLQotICAgICAgZW51bVR5cGVzID0gbmV3IEVudW1EZXNj
cmlwdG9yW3Byb3RvLmdldEVudW1UeXBlQ291bnQoKV07Ci0gICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHByb3RvLmdldEVudW1UeXBlQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgIGVudW1UeXBlc1tp
XSA9IG5ldyBFbnVtRGVzY3JpcHRvcigKLSAgICAgICAgICBwcm90by5nZXRFbnVtVHlwZShpKSwg
ZmlsZSwgdGhpcywgaSk7Ci0gICAgICB9Ci0KLSAgICAgIGZpZWxkcyA9IG5ldyBGaWVsZERlc2Ny
aXB0b3JbcHJvdG8uZ2V0RmllbGRDb3VudCgpXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cHJvdG8uZ2V0RmllbGRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgZmllbGRzW2ldID0gbmV3IEZp
ZWxkRGVzY3JpcHRvcigKLSAgICAgICAgICBwcm90by5nZXRGaWVsZChpKSwgZmlsZSwgdGhpcywg
aSwgZmFsc2UpOwotICAgICAgfQotCi0gICAgICBleHRlbnNpb25zID0gbmV3IEZpZWxkRGVzY3Jp
cHRvcltwcm90by5nZXRFeHRlbnNpb25Db3VudCgpXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgcHJvdG8uZ2V0RXh0ZW5zaW9uQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNb
aV0gPSBuZXcgRmllbGREZXNjcmlwdG9yKAotICAgICAgICAgIHByb3RvLmdldEV4dGVuc2lvbihp
KSwgZmlsZSwgdGhpcywgaSwgdHJ1ZSk7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcHJvdG8uZ2V0T25lb2ZEZWNsQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgIG9uZW9mc1tp
XS5maWVsZHMgPSBuZXcgRmllbGREZXNjcmlwdG9yW29uZW9mc1tpXS5nZXRGaWVsZENvdW50KCld
OwotICAgICAgICBvbmVvZnNbaV0uZmllbGRDb3VudCA9IDA7Ci0gICAgICB9Ci0gICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHByb3RvLmdldEZpZWxkQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgIE9u
ZW9mRGVzY3JpcHRvciBvbmVvZkRlc2NyaXB0b3IgPSBmaWVsZHNbaV0uZ2V0Q29udGFpbmluZ09u
ZW9mKCk7Ci0gICAgICAgIGlmIChvbmVvZkRlc2NyaXB0b3IgIT0gbnVsbCkgewotICAgICAgICAg
IG9uZW9mRGVzY3JpcHRvci5maWVsZHNbb25lb2ZEZXNjcmlwdG9yLmZpZWxkQ291bnQrK10gPSBm
aWVsZHNbaV07Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZmlsZS5wb29sLmFkZFN5bWJv
bCh0aGlzKTsKLSAgICB9Ci0KLSAgICAvKiogTG9vayB1cCBhbmQgY3Jvc3MtbGluayBhbGwgZmll
bGQgdHlwZXMsIGV0Yy4gKi8KLSAgICBwcml2YXRlIHZvaWQgY3Jvc3NMaW5rKCkgdGhyb3dzIERl
c2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uIHsKLSAgICAgIGZvciAoZmluYWwgRGVzY3JpcHRv
ciBuZXN0ZWRUeXBlIDogbmVzdGVkVHlwZXMpIHsKLSAgICAgICAgbmVzdGVkVHlwZS5jcm9zc0xp
bmsoKTsKLSAgICAgIH0KLQotICAgICAgZm9yIChmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQg
OiBmaWVsZHMpIHsKLSAgICAgICAgZmllbGQuY3Jvc3NMaW5rKCk7Ci0gICAgICB9Ci0KLSAgICAg
IGZvciAoZmluYWwgRmllbGREZXNjcmlwdG9yIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnMpIHsKLSAg
ICAgICAgZXh0ZW5zaW9uLmNyb3NzTGluaygpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKiBT
ZWUge0BsaW5rIEZpbGVEZXNjcmlwdG9yI3NldFByb3RvfS4gKi8KLSAgICBwcml2YXRlIHZvaWQg
c2V0UHJvdG8oZmluYWwgRGVzY3JpcHRvclByb3RvIHByb3RvKSB7Ci0gICAgICB0aGlzLnByb3Rv
ID0gcHJvdG87Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmVzdGVkVHlwZXMubGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgbmVzdGVkVHlwZXNbaV0uc2V0UHJvdG8ocHJvdG8uZ2V0TmVzdGVk
VHlwZShpKSk7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW51bVR5cGVz
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGVudW1UeXBlc1tpXS5zZXRQcm90byhwcm90by5nZXRF
bnVtVHlwZShpKSk7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRz
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGZpZWxkc1tpXS5zZXRQcm90byhwcm90by5nZXRGaWVs
ZChpKSk7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5s
ZW5ndGg7IGkrKykgewotICAgICAgICBleHRlbnNpb25zW2ldLnNldFByb3RvKHByb3RvLmdldEV4
dGVuc2lvbihpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAv
KiogRGVzY3JpYmVzIGEgZmllbGQgb2YgYSBtZXNzYWdlIHR5cGUuICovCi0gIHB1YmxpYyBzdGF0
aWMgZmluYWwgY2xhc3MgRmllbGREZXNjcmlwdG9yCi0gICAgICAgIGV4dGVuZHMgR2VuZXJpY0Rl
c2NyaXB0b3IKLSAgICAgICAgaW1wbGVtZW50cyBDb21wYXJhYmxlPEZpZWxkRGVzY3JpcHRvcj4s
Ci0gICAgICAgICAgICAgICAgIEZpZWxkU2V0LkZpZWxkRGVzY3JpcHRvckxpdGU8RmllbGREZXNj
cmlwdG9yPiB7Ci0gICAgLyoqCi0gICAgICogR2V0IHRoZSBpbmRleCBvZiB0aGlzIGRlc2NyaXB0
b3Igd2l0aGluIGl0cyBwYXJlbnQuCi0gICAgICogQHNlZSBEZXNjcmlwdG9ycy5EZXNjcmlwdG9y
I2dldEluZGV4KCkKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldEluZGV4KCkgeyByZXR1cm4g
aW5kZXg7IH0KLQotICAgIC8qKiBDb252ZXJ0IHRoZSBkZXNjcmlwdG9yIHRvIGl0cyBwcm90b2Nv
bCBtZXNzYWdlIHJlcHJlc2VudGF0aW9uLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBG
aWVsZERlc2NyaXB0b3JQcm90byB0b1Byb3RvKCkgewotICAgICAgcmV0dXJuIHByb3RvOwotICAg
IH0KLQotICAgIC8qKiBHZXQgdGhlIGZpZWxkJ3MgdW5xdWFsaWZpZWQgbmFtZS4gKi8KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICByZXR1cm4gcHJv
dG8uZ2V0TmFtZSgpOwotICAgIH0KLQotICAgIC8qKiBHZXQgdGhlIGZpZWxkJ3MgbnVtYmVyLiAq
LwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyKCkgewotICAgICAgcmV0
dXJuIHByb3RvLmdldE51bWJlcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUg
ZmllbGQncyBmdWxseS1xdWFsaWZpZWQgbmFtZS4KLSAgICAgKiBAc2VlIERlc2NyaXB0b3JzLkRl
c2NyaXB0b3IjZ2V0RnVsbE5hbWUoKQotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBTdHJpbmcgZ2V0RnVsbE5hbWUoKSB7Ci0gICAgICByZXR1cm4gZnVsbE5hbWU7Ci0gICAgfQot
Ci0gICAgLyoqIEdldCB0aGUgSlNPTiBuYW1lIG9mIHRoaXMgZmllbGQuICovCi0gICAgcHVibGlj
IFN0cmluZyBnZXRKc29uTmFtZSgpIHsKLSAgICAgIHJldHVybiBqc29uTmFtZTsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBHZXQgdGhlIGZpZWxkJ3MgamF2YSB0eXBlLiAgVGhpcyBpcyBqdXN0
IGZvciBjb252ZW5pZW5jZS4gIEV2ZXJ5Ci0gICAgICoge0Bjb2RlIEZpZWxkRGVzY3JpcHRvclBy
b3RvLlR5cGV9IG1hcHMgdG8gZXhhY3RseSBvbmUgSmF2YSB0eXBlLgotICAgICAqLwotICAgIHB1
YmxpYyBKYXZhVHlwZSBnZXRKYXZhVHlwZSgpIHsgcmV0dXJuIHR5cGUuZ2V0SmF2YVR5cGUoKTsg
fQotCi0gICAgLyoqIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gKi8KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgV2lyZUZvcm1hdC5KYXZhVHlwZSBnZXRMaXRlSmF2YVR5cGUoKSB7Ci0gICAgICBy
ZXR1cm4gZ2V0TGl0ZVR5cGUoKS5nZXRKYXZhVHlwZSgpOwotICAgIH0KLQotICAgIC8qKiBHZXQg
dGhlIHtAY29kZSBGaWxlRGVzY3JpcHRvcn0gY29udGFpbmluZyB0aGlzIGRlc2NyaXB0b3IuICov
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGVEZXNjcmlwdG9yIGdldEZpbGUoKSB7Ci0g
ICAgICByZXR1cm4gZmlsZTsKLSAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSBmaWVsZCdzIGRlY2xh
cmVkIHR5cGUuICovCi0gICAgcHVibGljIFR5cGUgZ2V0VHlwZSgpIHsgcmV0dXJuIHR5cGU7IH0K
LQotICAgIC8qKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuICovCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIFdpcmVGb3JtYXQuRmllbGRUeXBlIGdldExpdGVUeXBlKCkgewotICAgICAgcmV0dXJu
IHRhYmxlW3R5cGUub3JkaW5hbCgpXTsKLSAgICB9Ci0KLSAgICAvKiogRm9yIGludGVybmFsIHVz
ZSBvbmx5LiAqLwotICAgIHB1YmxpYyBib29sZWFuIG5lZWRzVXRmOENoZWNrKCkgewotICAgICAg
aWYgKHR5cGUgIT0gVHlwZS5TVFJJTkcpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotICAgICAgaWYgKGdldENvbnRhaW5pbmdUeXBlKCkuZ2V0T3B0aW9ucygpLmdldE1hcEVudHJ5
KCkpIHsKLSAgICAgICAgLy8gQWx3YXlzIGVuZm9yY2Ugc3RyaWN0IFVURi04IGNoZWNraW5nIGZv
ciBtYXAgZmllbGRzLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChn
ZXRGaWxlKCkuZ2V0U3ludGF4KCkgPT0gU3ludGF4LlBST1RPMykgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBnZXRGaWxlKCkuZ2V0T3B0aW9ucygpLmdldEph
dmFTdHJpbmdDaGVja1V0ZjgoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc01hcEZp
ZWxkKCkgewotICAgICAgcmV0dXJuIGdldFR5cGUoKSA9PSBUeXBlLk1FU1NBR0UgJiYgaXNSZXBl
YXRlZCgpCi0gICAgICAgICAgJiYgZ2V0TWVzc2FnZVR5cGUoKS5nZXRPcHRpb25zKCkuZ2V0TWFw
RW50cnkoKTsKLSAgICB9Ci0KLSAgICAvLyBJJ20gcHJldHR5IHN1cmUgdmFsdWVzKCkgY29uc3Ry
dWN0cyBhIG5ldyBhcnJheSBldmVyeSB0aW1lLCBzaW5jZSB0aGVyZQotICAgIC8vIGlzIG5vdGhp
bmcgc3RvcHBpbmcgdGhlIGNhbGxlciBmcm9tIG11dGF0aW5nIHRoZSBhcnJheS4gIFRoZXJlZm9y
ZSB3ZQotICAgIC8vIG1ha2UgYSBzdGF0aWMgY29weSBoZXJlLgotICAgIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFdpcmVGb3JtYXQuRmllbGRUeXBlW10gdGFibGUgPQotICAgICAgICBXaXJlRm9ybWF0
LkZpZWxkVHlwZS52YWx1ZXMoKTsKLQotICAgIC8qKiBJcyB0aGlzIGZpZWxkIGRlY2xhcmVkIHJl
cXVpcmVkPyAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzUmVxdWlyZWQoKSB7Ci0gICAgICByZXR1
cm4gcHJvdG8uZ2V0TGFiZWwoKSA9PSBGaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbC5MQUJFTF9S
RVFVSVJFRDsKLSAgICB9Ci0KLSAgICAvKiogSXMgdGhpcyBmaWVsZCBkZWNsYXJlZCBvcHRpb25h
bD8gKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc09wdGlvbmFsKCkgewotICAgICAgcmV0dXJuIHBy
b3RvLmdldExhYmVsKCkgPT0gRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwuTEFCRUxfT1BUSU9O
QUw7Ci0gICAgfQotCi0gICAgLyoqIElzIHRoaXMgZmllbGQgZGVjbGFyZWQgcmVwZWF0ZWQ/ICov
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNSZXBlYXRlZCgpIHsKLSAgICAg
IHJldHVybiBwcm90by5nZXRMYWJlbCgpID09IEZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsLkxB
QkVMX1JFUEVBVEVEOwotICAgIH0KLQotICAgIC8qKiBEb2VzIHRoaXMgZmllbGQgaGF2ZSB0aGUg
e0Bjb2RlIFtwYWNrZWQgPSB0cnVlXX0gb3B0aW9uIG9yIGlzIHRoaXMgZmllbGQKLSAgICAgKiAg
cGFja2FibGUgaW4gcHJvdG8zIGFuZCBub3QgZXhwbGljaXRseSBzZXR0ZWQgdG8gdW5wYWNrZWQ/
Ci0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNQYWNrZWQoKSB7
Ci0gICAgICBpZiAoIWlzUGFja2FibGUoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICB9Ci0gICAgICBpZiAoZ2V0RmlsZSgpLmdldFN5bnRheCgpID09IEZpbGVEZXNjcmlwdG9yLlN5
bnRheC5QUk9UTzIpIHsKLSAgICAgICAgcmV0dXJuIGdldE9wdGlvbnMoKS5nZXRQYWNrZWQoKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAhZ2V0T3B0aW9ucygpLmhhc1BhY2tlZCgp
IHx8IGdldE9wdGlvbnMoKS5nZXRQYWNrZWQoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiog
Q2FuIHRoaXMgZmllbGQgYmUgcGFja2VkPyBpLmUuIGlzIGl0IGEgcmVwZWF0ZWQgcHJpbWl0aXZl
IGZpZWxkPyAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzUGFja2FibGUoKSB7Ci0gICAgICByZXR1
cm4gaXNSZXBlYXRlZCgpICYmIGdldExpdGVUeXBlKCkuaXNQYWNrYWJsZSgpOwotICAgIH0KLQot
ICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGhhZCBhbiBleHBsaWNpdGx5LWRlZmlu
ZWQgZGVmYXVsdCB2YWx1ZS4gKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNEZWZhdWx0VmFsdWUo
KSB7IHJldHVybiBwcm90by5oYXNEZWZhdWx0VmFsdWUoKTsgfQotCi0gICAgLyoqCi0gICAgICog
UmV0dXJucyB0aGUgZmllbGQncyBkZWZhdWx0IHZhbHVlLiAgVmFsaWQgZm9yIGFsbCB0eXBlcyBl
eGNlcHQgZm9yCi0gICAgICogbWVzc2FnZXMgYW5kIGdyb3Vwcy4gIEZvciBhbGwgb3RoZXIgdHlw
ZXMsIHRoZSBvYmplY3QgcmV0dXJuZWQgaXMgb2YKLSAgICAgKiB0aGUgc2FtZSBjbGFzcyB0aGF0
IHdvdWxkIHJldHVybmVkIGJ5IE1lc3NhZ2UuZ2V0RmllbGQodGhpcykuCi0gICAgICovCi0gICAg
cHVibGljIE9iamVjdCBnZXREZWZhdWx0VmFsdWUoKSB7Ci0gICAgICBpZiAoZ2V0SmF2YVR5cGUo
KSA9PSBKYXZhVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9w
ZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAiRmllbGREZXNjcmlwdG9yLmdldERlZmF1bHRW
YWx1ZSgpIGNhbGxlZCBvbiBhbiBlbWJlZGRlZCBtZXNzYWdlICIgKwotICAgICAgICAgICJmaWVs
ZC4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAg
LyoqIEdldCB0aGUge0Bjb2RlIEZpZWxkT3B0aW9uc30sIGRlZmluZWQgaW4ge0Bjb2RlIGRlc2Ny
aXB0b3IucHJvdG99LiAqLwotICAgIHB1YmxpYyBGaWVsZE9wdGlvbnMgZ2V0T3B0aW9ucygpIHsg
cmV0dXJuIHByb3RvLmdldE9wdGlvbnMoKTsgfQotCi0gICAgLyoqIElzIHRoaXMgZmllbGQgYW4g
ZXh0ZW5zaW9uPyAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRXh0ZW5zaW9uKCkgeyByZXR1cm4g
cHJvdG8uaGFzRXh0ZW5kZWUoKTsgfQotCi0gICAgLyoqCi0gICAgICogR2V0IHRoZSBmaWVsZCdz
IGNvbnRhaW5pbmcgdHlwZS4gRm9yIGV4dGVuc2lvbnMsIHRoaXMgaXMgdGhlIHR5cGUgYmVpbmcK
LSAgICAgKiBleHRlbmRlZCwgbm90IHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgZXh0ZW5zaW9uIHdh
cyBkZWZpbmVkLiAgU2VlCi0gICAgICoge0BsaW5rICNnZXRFeHRlbnNpb25TY29wZSgpfS4KLSAg
ICAgKi8KLSAgICBwdWJsaWMgRGVzY3JpcHRvciBnZXRDb250YWluaW5nVHlwZSgpIHsgcmV0dXJu
IGNvbnRhaW5pbmdUeXBlOyB9Ci0KLSAgICAvKiogR2V0IHRoZSBmaWVsZCdzIGNvbnRhaW5pbmcg
b25lb2YuICovCi0gICAgcHVibGljIE9uZW9mRGVzY3JpcHRvciBnZXRDb250YWluaW5nT25lb2Yo
KSB7IHJldHVybiBjb250YWluaW5nT25lb2Y7IH0KLQotICAgIC8qKgotICAgICAqIEZvciBleHRl
bnNpb25zIGRlZmluZWQgbmVzdGVkIHdpdGhpbiBtZXNzYWdlIHR5cGVzLCBnZXRzIHRoZSBvdXRl
cgotICAgICAqIHR5cGUuICBOb3QgdmFsaWQgZm9yIG5vbi1leHRlbnNpb24gZmllbGRzLiAgRm9y
IGV4YW1wbGUsIGNvbnNpZGVyCi0gICAgICogdGhpcyB7QGNvZGUgLnByb3RvfSBmaWxlOgotICAg
ICAqIDxwcmU+Ci0gICAgICogICBtZXNzYWdlIEZvbyB7Ci0gICAgICogICAgIGV4dGVuc2lvbnMg
MTAwMCB0byBtYXg7Ci0gICAgICogICB9Ci0gICAgICogICBleHRlbmQgRm9vIHsKLSAgICAgKiAg
ICAgb3B0aW9uYWwgaW50MzIgYmF6ID0gMTIzNDsKLSAgICAgKiAgIH0KLSAgICAgKiAgIG1lc3Nh
Z2UgQmFyIHsKLSAgICAgKiAgICAgZXh0ZW5kIEZvbyB7Ci0gICAgICogICAgICAgb3B0aW9uYWwg
aW50MzIgcXV4ID0gNDMyMTsKLSAgICAgKiAgICAgfQotICAgICAqICAgfQotICAgICAqIDwvcHJl
PgotICAgICAqIEJvdGgge0Bjb2RlIGJhen0ncyBhbmQge0Bjb2RlIHF1eH0ncyBjb250YWluaW5n
IHR5cGUgaXMge0Bjb2RlIEZvb30uCi0gICAgICogSG93ZXZlciwge0Bjb2RlIGJhen0ncyBleHRl
bnNpb24gc2NvcGUgaXMge0Bjb2RlIG51bGx9IHdoaWxlCi0gICAgICoge0Bjb2RlIHF1eH0ncyBl
eHRlbnNpb24gc2NvcGUgaXMge0Bjb2RlIEJhcn0uCi0gICAgICovCi0gICAgcHVibGljIERlc2Ny
aXB0b3IgZ2V0RXh0ZW5zaW9uU2NvcGUoKSB7Ci0gICAgICBpZiAoIWlzRXh0ZW5zaW9uKCkpIHsK
LSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAg
ICAgICJUaGlzIGZpZWxkIGlzIG5vdCBhbiBleHRlbnNpb24uIik7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gZXh0ZW5zaW9uU2NvcGU7Ci0gICAgfQotCi0gICAgLyoqIEZvciBlbWJlZGRlZCBtZXNz
YWdlIGFuZCBncm91cCBmaWVsZHMsIGdldHMgdGhlIGZpZWxkJ3MgdHlwZS4gKi8KLSAgICBwdWJs
aWMgRGVzY3JpcHRvciBnZXRNZXNzYWdlVHlwZSgpIHsKLSAgICAgIGlmIChnZXRKYXZhVHlwZSgp
ICE9IEphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3Bl
cmF0aW9uRXhjZXB0aW9uKAotICAgICAgICAgICJUaGlzIGZpZWxkIGlzIG5vdCBvZiBtZXNzYWdl
IHR5cGUuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWVzc2FnZVR5cGU7Ci0gICAgfQotCi0g
ICAgLyoqIEZvciBlbnVtIGZpZWxkcywgZ2V0cyB0aGUgZmllbGQncyB0eXBlLiAqLwotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBFbnVtRGVzY3JpcHRvciBnZXRFbnVtVHlwZSgpIHsKLSAgICAg
IGlmIChnZXRKYXZhVHlwZSgpICE9IEphdmFUeXBlLkVOVU0pIHsKLSAgICAgICAgdGhyb3cgbmV3
IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAgICAgICJUaGlzIGZpZWxkIGlz
IG5vdCBvZiBlbnVtIHR5cGUuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZW51bVR5cGU7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGFyZSB3aXRoIGFub3RoZXIge0Bjb2RlIEZpZWxk
RGVzY3JpcHRvcn0uICBUaGlzIG9yZGVycyBmaWVsZHMgaW4KLSAgICAgKiAiY2Fub25pY2FsIiBv
cmRlciwgd2hpY2ggc2ltcGx5IG1lYW5zIGFzY2VuZGluZyBvcmRlciBieSBmaWVsZCBudW1iZXIu
Ci0gICAgICoge0Bjb2RlIG90aGVyfSBtdXN0IGJlIGEgZmllbGQgb2YgdGhlIHNhbWUgdHlwZSAt
LSBpLmUuCi0gICAgICoge0Bjb2RlIGdldENvbnRhaW5pbmdUeXBlKCl9IG11c3QgcmV0dXJuIHRo
ZSBzYW1lIHtAY29kZSBEZXNjcmlwdG9yfSBmb3IKLSAgICAgKiBib3RoIGZpZWxkcy4KLSAgICAg
KgotICAgICAqIEByZXR1cm4gbmVnYXRpdmUsIHplcm8sIG9yIHBvc2l0aXZlIGlmIHtAY29kZSB0
aGlzfSBpcyBsZXNzIHRoYW4sCi0gICAgICogICAgICAgICBlcXVhbCB0bywgb3IgZ3JlYXRlciB0
aGFuIHtAY29kZSBvdGhlcn0sIHJlc3BlY3RpdmVseS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhmaW5hbCBGaWVsZERlc2NyaXB0b3Igb3RoZXIpIHsK
LSAgICAgIGlmIChvdGhlci5jb250YWluaW5nVHlwZSAhPSBjb250YWluaW5nVHlwZSkgewotICAg
ICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJGaWVs
ZERlc2NyaXB0b3JzIGNhbiBvbmx5IGJlIGNvbXBhcmVkIHRvIG90aGVyIEZpZWxkRGVzY3JpcHRv
cnMgIiArCi0gICAgICAgICAgImZvciBmaWVsZHMgb2YgdGhlIHNhbWUgbWVzc2FnZSB0eXBlLiIp
OwotICAgICAgfQotICAgICAgcmV0dXJuIGdldE51bWJlcigpIC0gb3RoZXIuZ2V0TnVtYmVyKCk7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsK
LSAgICAgIHJldHVybiBnZXRGdWxsTmFtZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwg
aW50IGluZGV4OwotCi0gICAgcHJpdmF0ZSBGaWVsZERlc2NyaXB0b3JQcm90byBwcm90bzsKLSAg
ICBwcml2YXRlIGZpbmFsIFN0cmluZyBmdWxsTmFtZTsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmlu
ZyBqc29uTmFtZTsKLSAgICBwcml2YXRlIGZpbmFsIEZpbGVEZXNjcmlwdG9yIGZpbGU7Ci0gICAg
cHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9yIGV4dGVuc2lvblNjb3BlOwotCi0gICAgLy8gUG9zc2li
bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGNyb3NzLWxpbmtpbmcuCi0gICAgcHJpdmF0ZSBUeXBlIHR5
cGU7Ci0gICAgcHJpdmF0ZSBEZXNjcmlwdG9yIGNvbnRhaW5pbmdUeXBlOwotICAgIHByaXZhdGUg
RGVzY3JpcHRvciBtZXNzYWdlVHlwZTsKLSAgICBwcml2YXRlIE9uZW9mRGVzY3JpcHRvciBjb250
YWluaW5nT25lb2Y7Ci0gICAgcHJpdmF0ZSBFbnVtRGVzY3JpcHRvciBlbnVtVHlwZTsKLSAgICBw
cml2YXRlIE9iamVjdCBkZWZhdWx0VmFsdWU7Ci0KLSAgICBwdWJsaWMgZW51bSBUeXBlIHsKLSAg
ICAgIERPVUJMRSAgKEphdmFUeXBlLkRPVUJMRSAgICAgKSwKLSAgICAgIEZMT0FUICAgKEphdmFU
eXBlLkZMT0FUICAgICAgKSwKLSAgICAgIElOVDY0ICAgKEphdmFUeXBlLkxPTkcgICAgICAgKSwK
LSAgICAgIFVJTlQ2NCAgKEphdmFUeXBlLkxPTkcgICAgICAgKSwKLSAgICAgIElOVDMyICAgKEph
dmFUeXBlLklOVCAgICAgICAgKSwKLSAgICAgIEZJWEVENjQgKEphdmFUeXBlLkxPTkcgICAgICAg
KSwKLSAgICAgIEZJWEVEMzIgKEphdmFUeXBlLklOVCAgICAgICAgKSwKLSAgICAgIEJPT0wgICAg
KEphdmFUeXBlLkJPT0xFQU4gICAgKSwKLSAgICAgIFNUUklORyAgKEphdmFUeXBlLlNUUklORyAg
ICAgKSwKLSAgICAgIEdST1VQICAgKEphdmFUeXBlLk1FU1NBR0UgICAgKSwKLSAgICAgIE1FU1NB
R0UgKEphdmFUeXBlLk1FU1NBR0UgICAgKSwKLSAgICAgIEJZVEVTICAgKEphdmFUeXBlLkJZVEVf
U1RSSU5HKSwKLSAgICAgIFVJTlQzMiAgKEphdmFUeXBlLklOVCAgICAgICAgKSwKLSAgICAgIEVO
VU0gICAgKEphdmFUeXBlLkVOVU0gICAgICAgKSwKLSAgICAgIFNGSVhFRDMyKEphdmFUeXBlLklO
VCAgICAgICAgKSwKLSAgICAgIFNGSVhFRDY0KEphdmFUeXBlLkxPTkcgICAgICAgKSwKLSAgICAg
IFNJTlQzMiAgKEphdmFUeXBlLklOVCAgICAgICAgKSwKLSAgICAgIFNJTlQ2NCAgKEphdmFUeXBl
LkxPTkcgICAgICAgKTsKLQotICAgICAgVHlwZShmaW5hbCBKYXZhVHlwZSBqYXZhVHlwZSkgewot
ICAgICAgICB0aGlzLmphdmFUeXBlID0gamF2YVR5cGU7Ci0gICAgICB9Ci0KLSAgICAgIHByaXZh
dGUgSmF2YVR5cGUgamF2YVR5cGU7Ci0KLSAgICAgIHB1YmxpYyBGaWVsZERlc2NyaXB0b3JQcm90
by5UeXBlIHRvUHJvdG8oKSB7Ci0gICAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90by5U
eXBlLmZvck51bWJlcihvcmRpbmFsKCkgKyAxKTsKLSAgICAgIH0KLSAgICAgIHB1YmxpYyBKYXZh
VHlwZSBnZXRKYXZhVHlwZSgpIHsgcmV0dXJuIGphdmFUeXBlOyB9Ci0KLSAgICAgIHB1YmxpYyBz
dGF0aWMgVHlwZSB2YWx1ZU9mKGZpbmFsIEZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUgdHlwZSkg
ewotICAgICAgICByZXR1cm4gdmFsdWVzKClbdHlwZS5nZXROdW1iZXIoKSAtIDFdOwotICAgICAg
fQotICAgIH0KLQotICAgIHN0YXRpYyB7Ci0gICAgICAvLyBSZWZ1c2UgdG8gaW5pdCBpZiBzb21l
b25lIGFkZGVkIGEgbmV3IGRlY2xhcmVkIHR5cGUuCi0gICAgICBpZiAoVHlwZS52YWx1ZXMoKS5s
ZW5ndGggIT0gRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZS52YWx1ZXMoKS5sZW5ndGgpIHsKLSAg
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIiIKLSAgICAgICAgICAgICsgImRlc2Ny
aXB0b3IucHJvdG8gaGFzIGEgbmV3IGRlY2xhcmVkIHR5cGUgYnV0IERlc2NyaXB0b3JzLmphdmEg
IgotICAgICAgICAgICAgKyAid2Fzbid0IHVwZGF0ZWQuIik7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgcHVibGljIGVudW0gSmF2YVR5cGUgewotICAgICAgSU5UKDApLAotICAgICAgTE9ORygwTCks
Ci0gICAgICBGTE9BVCgwRiksCi0gICAgICBET1VCTEUoMEQpLAotICAgICAgQk9PTEVBTihmYWxz
ZSksCi0gICAgICBTVFJJTkcoIiIpLAotICAgICAgQllURV9TVFJJTkcoQnl0ZVN0cmluZy5FTVBU
WSksCi0gICAgICBFTlVNKG51bGwpLAotICAgICAgTUVTU0FHRShudWxsKTsKLQotICAgICAgSmF2
YVR5cGUoZmluYWwgT2JqZWN0IGRlZmF1bHREZWZhdWx0KSB7Ci0gICAgICAgIHRoaXMuZGVmYXVs
dERlZmF1bHQgPSBkZWZhdWx0RGVmYXVsdDsKLSAgICAgIH0KLQotICAgICAgLyoqCi0gICAgICAg
KiBUaGUgZGVmYXVsdCBkZWZhdWx0IHZhbHVlIGZvciBmaWVsZHMgb2YgdGhpcyB0eXBlLCBpZiBp
dCdzIGEgcHJpbWl0aXZlCi0gICAgICAgKiB0eXBlLiAgVGhpcyBpcyBtZWFudCBmb3IgdXNlIGlu
c2lkZSB0aGlzIGZpbGUgb25seSwgaGVuY2UgaXMgcHJpdmF0ZS4KLSAgICAgICAqLwotICAgICAg
cHJpdmF0ZSBmaW5hbCBPYmplY3QgZGVmYXVsdERlZmF1bHQ7Ci0gICAgfQotCi0gICAgLy8gVE9E
Tyh4aWFvZmVuZyk6IEltcGxlbWVudCBpdCBjb25zaXN0ZW50bHkgYWNyb3NzIGRpZmZlcmVudCBs
YW5ndWFnZXMuIFNlZSBiLzI0NzUxMzQ4LgotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmaWVs
ZE5hbWVUb0xvd2VyQ2FtZWxDYXNlKFN0cmluZyBuYW1lKSB7Ci0gICAgICBTdHJpbmdCdWlsZGVy
IHJlc3VsdCA9IG5ldyBTdHJpbmdCdWlsZGVyKG5hbWUubGVuZ3RoKCkpOwotICAgICAgYm9vbGVh
biBpc05leHRVcHBlckNhc2UgPSBmYWxzZTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFt
ZS5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIENoYXJhY3RlciBjaCA9IG5hbWUuY2hhckF0KGkp
OwotICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKGNoKSkgewotICAgICAgICAgIGlm
IChpc05leHRVcHBlckNhc2UpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoQ2hhcmFjdGVy
LnRvVXBwZXJDYXNlKGNoKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoY2gpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpc05leHRVcHBlckNhc2UgPSBm
YWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChDaGFyYWN0ZXIuaXNVcHBlckNhc2UoY2gpKSB7Ci0g
ICAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgICAgLy8gRm9yY2UgZmlyc3QgbGV0dGVy
IHRvIGxvd2VyLWNhc2UuCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKENoYXJhY3Rlci50b0xv
d2VyQ2FzZShjaCkpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYXBpdGFs
IGxldHRlcnMgYWZ0ZXIgdGhlIGZpcnN0IGFyZSBsZWZ0IGFzLWlzLgotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChjaCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlzTmV4dFVwcGVyQ2FzZSA9
IGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKENoYXJhY3Rlci5pc0RpZ2l0KGNoKSkgewotICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoY2gpOwotICAgICAgICAgIGlzTmV4dFVwcGVyQ2FzZSA9IGZh
bHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlzTmV4dFVwcGVyQ2FzZSA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAg
ICB9Ci0KLSAgICBwcml2YXRlIEZpZWxkRGVzY3JpcHRvcihmaW5hbCBGaWVsZERlc2NyaXB0b3JQ
cm90byBwcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGaWxlRGVzY3Jp
cHRvciBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIERlc2NyaXB0b3Ig
cGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzRXh0ZW5zaW9uKQotICAg
ICAgICAgICAgICAgICAgICAgdGhyb3dzIERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uIHsK
LSAgICAgIHRoaXMuaW5kZXggPSBpbmRleDsKLSAgICAgIHRoaXMucHJvdG8gPSBwcm90bzsKLSAg
ICAgIGZ1bGxOYW1lID0gY29tcHV0ZUZ1bGxOYW1lKGZpbGUsIHBhcmVudCwgcHJvdG8uZ2V0TmFt
ZSgpKTsKLSAgICAgIHRoaXMuZmlsZSA9IGZpbGU7Ci0gICAgICBpZiAocHJvdG8uaGFzSnNvbk5h
bWUoKSkgewotICAgICAgICBqc29uTmFtZSA9IHByb3RvLmdldEpzb25OYW1lKCk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBqc29uTmFtZSA9IGZpZWxkTmFtZVRvTG93ZXJDYW1lbENhc2UocHJv
dG8uZ2V0TmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHByb3RvLmhhc1R5cGUoKSkgewot
ICAgICAgICB0eXBlID0gVHlwZS52YWx1ZU9mKHByb3RvLmdldFR5cGUoKSk7Ci0gICAgICB9Ci0K
LSAgICAgIGlmIChnZXROdW1iZXIoKSA8PSAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBEZXNjcmlw
dG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICJGaWVsZCBudW1iZXJzIG11
c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMuIik7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpc0V4dGVu
c2lvbikgewotICAgICAgICBpZiAoIXByb3RvLmhhc0V4dGVuZGVlKCkpIHsKLSAgICAgICAgICB0
aHJvdyBuZXcgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24odGhpcywKLSAgICAgICAgICAg
ICJGaWVsZERlc2NyaXB0b3JQcm90by5leHRlbmRlZSBub3Qgc2V0IGZvciBleHRlbnNpb24gZmll
bGQuIik7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGFpbmluZ1R5cGUgPSBudWxsOyAgLy8gV2ls
bCBiZSBmaWxsZWQgaW4gd2hlbiBjcm9zcy1saW5raW5nCi0gICAgICAgIGlmIChwYXJlbnQgIT0g
bnVsbCkgewotICAgICAgICAgIGV4dGVuc2lvblNjb3BlID0gcGFyZW50OwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIGV4dGVuc2lvblNjb3BlID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChwcm90by5oYXNPbmVvZkluZGV4KCkpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRGVz
Y3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24odGhpcywKLSAgICAgICAgICAgICJGaWVsZERlc2Ny
aXB0b3JQcm90by5vbmVvZl9pbmRleCBzZXQgZm9yIGV4dGVuc2lvbiBmaWVsZC4iKTsKLSAgICAg
ICAgfQotICAgICAgICBjb250YWluaW5nT25lb2YgPSBudWxsOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKHByb3RvLmhhc0V4dGVuZGVlKCkpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRGVz
Y3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24odGhpcywKLSAgICAgICAgICAgICJGaWVsZERlc2Ny
aXB0b3JQcm90by5leHRlbmRlZSBzZXQgZm9yIG5vbi1leHRlbnNpb24gZmllbGQuIik7Ci0gICAg
ICAgIH0KLSAgICAgICAgY29udGFpbmluZ1R5cGUgPSBwYXJlbnQ7Ci0KLSAgICAgICAgaWYgKHBy
b3RvLmhhc09uZW9mSW5kZXgoKSkgewotICAgICAgICAgIGlmIChwcm90by5nZXRPbmVvZkluZGV4
KCkgPCAwIHx8Ci0gICAgICAgICAgICAgIHByb3RvLmdldE9uZW9mSW5kZXgoKSA+PSBwYXJlbnQu
dG9Qcm90bygpLmdldE9uZW9mRGVjbENvdW50KCkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBE
ZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICAgICAiRmllbGRE
ZXNjcmlwdG9yUHJvdG8ub25lb2ZfaW5kZXggaXMgb3V0IG9mIHJhbmdlIGZvciB0eXBlICIKLSAg
ICAgICAgICAgICAgKyBwYXJlbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Y29udGFpbmluZ09uZW9mID0gcGFyZW50LmdldE9uZW9mcygpLmdldChwcm90by5nZXRPbmVvZklu
ZGV4KCkpOwotICAgICAgICAgIGNvbnRhaW5pbmdPbmVvZi5maWVsZENvdW50Kys7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgY29udGFpbmluZ09uZW9mID0gbnVsbDsKLSAgICAgICAgfQot
ICAgICAgICBleHRlbnNpb25TY29wZSA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIGZpbGUucG9v
bC5hZGRTeW1ib2wodGhpcyk7Ci0gICAgfQotCi0gICAgLyoqIExvb2sgdXAgYW5kIGNyb3NzLWxp
bmsgYWxsIGZpZWxkIHR5cGVzLCBldGMuICovCi0gICAgcHJpdmF0ZSB2b2lkIGNyb3NzTGluaygp
IHRocm93cyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICBpZiAocHJvdG8u
aGFzRXh0ZW5kZWUoKSkgewotICAgICAgICBmaW5hbCBHZW5lcmljRGVzY3JpcHRvciBleHRlbmRl
ZSA9Ci0gICAgICAgICAgZmlsZS5wb29sLmxvb2t1cFN5bWJvbChwcm90by5nZXRFeHRlbmRlZSgp
LCB0aGlzLAotICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbC5TZWFyY2hGaWx0ZXIuVFlQRVNf
T05MWSk7Ci0gICAgICAgIGlmICghKGV4dGVuZGVlIGluc3RhbmNlb2YgRGVzY3JpcHRvcikpIHsK
LSAgICAgICAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24odGhpcywK
LSAgICAgICAgICAgICAgJ1wiJyArIHByb3RvLmdldEV4dGVuZGVlKCkgKyAiXCIgaXMgbm90IGEg
bWVzc2FnZSB0eXBlLiIpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRhaW5pbmdUeXBlID0gKERl
c2NyaXB0b3IpZXh0ZW5kZWU7Ci0KLSAgICAgICAgaWYgKCFnZXRDb250YWluaW5nVHlwZSgpLmlz
RXh0ZW5zaW9uTnVtYmVyKGdldE51bWJlcigpKSkgewotICAgICAgICAgIHRocm93IG5ldyBEZXNj
cmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICAgICAnXCInICsgZ2V0
Q29udGFpbmluZ1R5cGUoKS5nZXRGdWxsTmFtZSgpICsKLSAgICAgICAgICAgICAgIlwiIGRvZXMg
bm90IGRlY2xhcmUgIiArIGdldE51bWJlcigpICsKLSAgICAgICAgICAgICAgIiBhcyBhbiBleHRl
bnNpb24gbnVtYmVyLiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwcm90by5o
YXNUeXBlTmFtZSgpKSB7Ci0gICAgICAgIGZpbmFsIEdlbmVyaWNEZXNjcmlwdG9yIHR5cGVEZXNj
cmlwdG9yID0KLSAgICAgICAgICBmaWxlLnBvb2wubG9va3VwU3ltYm9sKHByb3RvLmdldFR5cGVO
YW1lKCksIHRoaXMsCi0gICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sLlNlYXJjaEZpbHRlci5U
WVBFU19PTkxZKTsKLQotICAgICAgICBpZiAoIXByb3RvLmhhc1R5cGUoKSkgewotICAgICAgICAg
IC8vIENob29zZSBmaWVsZCB0eXBlIGJhc2VkIG9uIHN5bWJvbC4KLSAgICAgICAgICBpZiAodHlw
ZURlc2NyaXB0b3IgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICB0eXBlID0g
VHlwZS5NRVNTQUdFOwotICAgICAgICAgIH0gZWxzZSBpZiAodHlwZURlc2NyaXB0b3IgaW5zdGFu
Y2VvZiBFbnVtRGVzY3JpcHRvcikgewotICAgICAgICAgICAgdHlwZSA9IFR5cGUuRU5VTTsKLSAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0
aW9uRXhjZXB0aW9uKHRoaXMsCi0gICAgICAgICAgICAgICAgJ1wiJyArIHByb3RvLmdldFR5cGVO
YW1lKCkgKyAiXCIgaXMgbm90IGEgdHlwZS4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoZ2V0SmF2YVR5cGUoKSA9PSBKYXZhVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAg
ICAgaWYgKCEodHlwZURlc2NyaXB0b3IgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKSkgewotICAgICAg
ICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKHRoaXMsCi0gICAg
ICAgICAgICAgICAgJ1wiJyArIHByb3RvLmdldFR5cGVOYW1lKCkgKyAiXCIgaXMgbm90IGEgbWVz
c2FnZSB0eXBlLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBtZXNzYWdlVHlwZSA9IChEZXNj
cmlwdG9yKXR5cGVEZXNjcmlwdG9yOwotCi0gICAgICAgICAgaWYgKHByb3RvLmhhc0RlZmF1bHRW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNl
cHRpb24odGhpcywKLSAgICAgICAgICAgICAgIk1lc3NhZ2VzIGNhbid0IGhhdmUgZGVmYXVsdCB2
YWx1ZXMuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGdldEphdmFUeXBlKCkg
PT0gSmF2YVR5cGUuRU5VTSkgewotICAgICAgICAgIGlmICghKHR5cGVEZXNjcmlwdG9yIGluc3Rh
bmNlb2YgRW51bURlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRGVzY3JpcHRv
clZhbGlkYXRpb25FeGNlcHRpb24odGhpcywKLSAgICAgICAgICAgICAgICAnXCInICsgcHJvdG8u
Z2V0VHlwZU5hbWUoKSArICJcIiBpcyBub3QgYW4gZW51bSB0eXBlLiIpOwotICAgICAgICAgIH0K
LSAgICAgICAgICBlbnVtVHlwZSA9IChFbnVtRGVzY3JpcHRvcil0eXBlRGVzY3JpcHRvcjsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclZhbGlkYXRpb25F
eGNlcHRpb24odGhpcywKLSAgICAgICAgICAgICJGaWVsZCB3aXRoIHByaW1pdGl2ZSB0eXBlIGhh
cyB0eXBlX25hbWUuIik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChn
ZXRKYXZhVHlwZSgpID09IEphdmFUeXBlLk1FU1NBR0UgfHwKLSAgICAgICAgICAgIGdldEphdmFU
eXBlKCkgPT0gSmF2YVR5cGUuRU5VTSkgewotICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9y
VmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICAgIkZpZWxkIHdpdGggbWVzc2Fn
ZSBvciBlbnVtIHR5cGUgbWlzc2luZyB0eXBlX25hbWUuIik7Ci0gICAgICAgIH0KLSAgICAgIH0K
LQotICAgICAgLy8gT25seSByZXBlYXRlZCBwcmltaXRpdmUgZmllbGRzIG1heSBiZSBwYWNrZWQu
Ci0gICAgICBpZiAocHJvdG8uZ2V0T3B0aW9ucygpLmdldFBhY2tlZCgpICYmICFpc1BhY2thYmxl
KCkpIHsKLSAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKHRo
aXMsCi0gICAgICAgICAgIltwYWNrZWQgPSB0cnVlXSBjYW4gb25seSBiZSBzcGVjaWZpZWQgZm9y
IHJlcGVhdGVkIHByaW1pdGl2ZSAiICsKLSAgICAgICAgICAiZmllbGRzLiIpOwotICAgICAgfQot
Ci0gICAgICAvLyBXZSBkb24ndCBhdHRlbXB0IHRvIHBhcnNlIHRoZSBkZWZhdWx0IHZhbHVlIHVu
dGlsIGhlcmUgYmVjYXVzZSBmb3IKLSAgICAgIC8vIGVudW1zIHdlIG5lZWQgdGhlIGVudW0gdHlw
ZSdzIGRlc2NyaXB0b3IuCi0gICAgICBpZiAocHJvdG8uaGFzRGVmYXVsdFZhbHVlKCkpIHsKLSAg
ICAgICAgaWYgKGlzUmVwZWF0ZWQoKSkgewotICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9y
VmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICAgIlJlcGVhdGVkIGZpZWxkcyBj
YW5ub3QgaGF2ZSBkZWZhdWx0IHZhbHVlcy4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7
Ci0gICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSU5UMzI6
Ci0gICAgICAgICAgICBjYXNlIFNJTlQzMjoKLSAgICAgICAgICAgIGNhc2UgU0ZJWEVEMzI6Ci0g
ICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IFRleHRGb3JtYXQucGFyc2VJbnQzMihwcm90by5n
ZXREZWZhdWx0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBVSU5UMzI6Ci0gICAgICAgICAgICBjYXNlIEZJWEVEMzI6Ci0gICAgICAgICAgICAgIGRlZmF1
bHRWYWx1ZSA9IFRleHRGb3JtYXQucGFyc2VVSW50MzIocHJvdG8uZ2V0RGVmYXVsdFZhbHVlKCkp
OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSU5UNjQ6Ci0gICAgICAg
ICAgICBjYXNlIFNJTlQ2NDoKLSAgICAgICAgICAgIGNhc2UgU0ZJWEVENjQ6Ci0gICAgICAgICAg
ICAgIGRlZmF1bHRWYWx1ZSA9IFRleHRGb3JtYXQucGFyc2VJbnQ2NChwcm90by5nZXREZWZhdWx0
VmFsdWUoKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVSU5UNjQ6
Ci0gICAgICAgICAgICBjYXNlIEZJWEVENjQ6Ci0gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9
IFRleHRGb3JtYXQucGFyc2VVSW50NjQocHJvdG8uZ2V0RGVmYXVsdFZhbHVlKCkpOwotICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRkxPQVQ6Ci0gICAgICAgICAgICAgIGlm
IChwcm90by5nZXREZWZhdWx0VmFsdWUoKS5lcXVhbHMoImluZiIpKSB7Ci0gICAgICAgICAgICAg
ICAgZGVmYXVsdFZhbHVlID0gRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFk7Ci0gICAgICAgICAgICAg
IH0gZWxzZSBpZiAocHJvdG8uZ2V0RGVmYXVsdFZhbHVlKCkuZXF1YWxzKCItaW5mIikpIHsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBGbG9hdC5ORUdBVElWRV9JTkZJTklUWTsKLSAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChwcm90by5nZXREZWZhdWx0VmFsdWUoKS5lcXVhbHMoIm5h
biIpKSB7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gRmxvYXQuTmFOOwotICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IEZsb2F0LnZh
bHVlT2YocHJvdG8uZ2V0RGVmYXVsdFZhbHVlKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET1VCTEU6Ci0gICAgICAgICAgICAgIGlm
IChwcm90by5nZXREZWZhdWx0VmFsdWUoKS5lcXVhbHMoImluZiIpKSB7Ci0gICAgICAgICAgICAg
ICAgZGVmYXVsdFZhbHVlID0gRG91YmxlLlBPU0lUSVZFX0lORklOSVRZOwotICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHByb3RvLmdldERlZmF1bHRWYWx1ZSgpLmVxdWFscygiLWluZiIpKSB7Ci0g
ICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gRG91YmxlLk5FR0FUSVZFX0lORklOSVRZOwot
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3RvLmdldERlZmF1bHRWYWx1ZSgpLmVxdWFscygi
bmFuIikpIHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBEb3VibGUuTmFOOwotICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IERvdWJs
ZS52YWx1ZU9mKHByb3RvLmdldERlZmF1bHRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQk9PTDoKLSAgICAgICAgICAgICAg
ZGVmYXVsdFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKHByb3RvLmdldERlZmF1bHRWYWx1ZSgpKTsK
LSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNUUklORzoKLSAgICAgICAg
ICAgICAgZGVmYXVsdFZhbHVlID0gcHJvdG8uZ2V0RGVmYXVsdFZhbHVlKCk7Ci0gICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCWVRFUzoKLSAgICAgICAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPQotICAgICAgICAgICAgICAgICAgVGV4dEZv
cm1hdC51bmVzY2FwZUJ5dGVzKHByb3RvLmdldERlZmF1bHRWYWx1ZSgpKTsKLSAgICAgICAgICAg
ICAgfSBjYXRjaCAoVGV4dEZvcm1hdC5JbnZhbGlkRXNjYXBlU2VxdWVuY2VFeGNlcHRpb24gZSkg
ewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlv
bih0aGlzLAotICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IHBhcnNlIGRlZmF1bHQgdmFsdWU6
ICIgKyBlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVOVU06Ci0gICAgICAgICAgICAgIGRlZmF1bHRWYWx1
ZSA9IGVudW1UeXBlLmZpbmRWYWx1ZUJ5TmFtZShwcm90by5nZXREZWZhdWx0VmFsdWUoKSk7Ci0g
ICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAg
IHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAg
ICAgICAgICAgIlVua25vd24gZW51bSBkZWZhdWx0IHZhbHVlOiBcIiIgKwotICAgICAgICAgICAg
ICAgICAgcHJvdG8uZ2V0RGVmYXVsdFZhbHVlKCkgKyAnXCInKTsKLSAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTUVTU0FHRToKLSAgICAgICAg
ICAgIGNhc2UgR1JPVVA6Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRh
dGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICAgICAgICJNZXNzYWdlIHR5cGUgaGFkIGRl
ZmF1bHQgdmFsdWUuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3Jt
YXRFeGNlcHRpb24gZSkgewotICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlv
bkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICAgICAiQ291bGQgbm90IHBhcnNlIGRlZmF1bHQg
dmFsdWU6IFwiIiArCi0gICAgICAgICAgICAgIHByb3RvLmdldERlZmF1bHRWYWx1ZSgpICsgJ1wi
JywgZSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERldGVybWluZSB0
aGUgZGVmYXVsdCBkZWZhdWx0IGZvciB0aGlzIGZpZWxkLgotICAgICAgICBpZiAoaXNSZXBlYXRl
ZCgpKSB7Ci0gICAgICAgICAgZGVmYXVsdFZhbHVlID0gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3dpdGNoIChnZXRKYXZhVHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEVOVU06Ci0gICAgICAgICAgICAgIC8vIFdlIGd1YXJhbnRlZSBlbHNl
d2hlcmUgdGhhdCBhbiBlbnVtIHR5cGUgYWx3YXlzIGhhcyBhdCBsZWFzdAotICAgICAgICAgICAg
ICAvLyBvbmUgcG9zc2libGUgdmFsdWUuCi0gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGVu
dW1UeXBlLmdldFZhbHVlcygpLmdldCgwKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIE1FU1NBR0U6Ci0gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGw7Ci0g
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ZGVmYXVsdFZhbHVlID0gZ2V0SmF2YVR5cGUoKS5kZWZhdWx0RGVmYXVsdDsKLSAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICgh
aXNFeHRlbnNpb24oKSkgewotICAgICAgICBmaWxlLnBvb2wuYWRkRmllbGRCeU51bWJlcih0aGlz
KTsKLSAgICAgIH0KLQotICAgICAgaWYgKGNvbnRhaW5pbmdUeXBlICE9IG51bGwgJiYKLSAgICAg
ICAgICBjb250YWluaW5nVHlwZS5nZXRPcHRpb25zKCkuZ2V0TWVzc2FnZVNldFdpcmVGb3JtYXQo
KSkgewotICAgICAgICBpZiAoaXNFeHRlbnNpb24oKSkgewotICAgICAgICAgIGlmICghaXNPcHRp
b25hbCgpIHx8IGdldFR5cGUoKSAhPSBUeXBlLk1FU1NBR0UpIHsKLSAgICAgICAgICAgIHRocm93
IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICAgICAi
RXh0ZW5zaW9ucyBvZiBNZXNzYWdlU2V0cyBtdXN0IGJlIG9wdGlvbmFsIG1lc3NhZ2VzLiIpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRGVzY3Jp
cHRvclZhbGlkYXRpb25FeGNlcHRpb24odGhpcywKLSAgICAgICAgICAgICJNZXNzYWdlU2V0cyBj
YW5ub3QgaGF2ZSBmaWVsZHMsIG9ubHkgZXh0ZW5zaW9ucy4iKTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLQotICAgIC8qKiBTZWUge0BsaW5rIEZpbGVEZXNjcmlwdG9yI3NldFByb3RvfS4g
Ki8KLSAgICBwcml2YXRlIHZvaWQgc2V0UHJvdG8oZmluYWwgRmllbGREZXNjcmlwdG9yUHJvdG8g
cHJvdG8pIHsKLSAgICAgIHRoaXMucHJvdG8gPSBwcm90bzsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuICBUaGlzIGlzIHRvIHNhdGlzZnkgdGhlIEZpZWxk
RGVzY3JpcHRvckxpdGUKLSAgICAgKiBpbnRlcmZhY2UuCi0gICAgICovCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIE1lc3NhZ2VMaXRlLkJ1aWxkZXIgaW50ZXJuYWxNZXJnZUZyb20oTWVzc2Fn
ZUxpdGUuQnVpbGRlciB0bywgTWVzc2FnZUxpdGUgZnJvbSkgewotICAgICAgLy8gRmllbGREZXNj
cmlwdG9ycyBhcmUgb25seSB1c2VkIHdpdGggbm9uLWxpdGUgbWVzc2FnZXMgc28gd2UgY2FuIGp1
c3QKLSAgICAgIC8vIGRvd24tY2FzdCBhbmQgY2FsbCBtZXJnZUZyb20gZGlyZWN0bHkuCi0gICAg
ICByZXR1cm4gKChNZXNzYWdlLkJ1aWxkZXIpIHRvKS5tZXJnZUZyb20oKE1lc3NhZ2UpIGZyb20p
OwotICAgIH0KLQotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAvKiogRGVzY3JpYmVzIGFuIGVu
dW0gdHlwZS4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBFbnVtRGVzY3JpcHRvciBl
eHRlbmRzIEdlbmVyaWNEZXNjcmlwdG9yCi0gICAgICBpbXBsZW1lbnRzIEludGVybmFsLkVudW1M
aXRlTWFwPEVudW1WYWx1ZURlc2NyaXB0b3I+IHsKLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIGlu
ZGV4IG9mIHRoaXMgZGVzY3JpcHRvciB3aXRoaW4gaXRzIHBhcmVudC4KLSAgICAgKiBAc2VlIERl
c2NyaXB0b3JzLkRlc2NyaXB0b3IjZ2V0SW5kZXgoKQotICAgICAqLwotICAgIHB1YmxpYyBpbnQg
Z2V0SW5kZXgoKSB7IHJldHVybiBpbmRleDsgfQotCi0gICAgLyoqIENvbnZlcnQgdGhlIGRlc2Ny
aXB0b3IgdG8gaXRzIHByb3RvY29sIG1lc3NhZ2UgcmVwcmVzZW50YXRpb24uICovCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIEVudW1EZXNjcmlwdG9yUHJvdG8gdG9Qcm90bygpIHsKLSAgICAg
IHJldHVybiBwcm90bzsKLSAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSB0eXBlJ3MgdW5xdWFsaWZp
ZWQgbmFtZS4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7
Ci0gICAgICByZXR1cm4gcHJvdG8uZ2V0TmFtZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAq
IEdldCB0aGUgdHlwZSdzIGZ1bGx5LXF1YWxpZmllZCBuYW1lLgotICAgICAqIEBzZWUgRGVzY3Jp
cHRvcnMuRGVzY3JpcHRvciNnZXRGdWxsTmFtZSgpCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIFN0cmluZyBnZXRGdWxsTmFtZSgpIHsKLSAgICAgIHJldHVybiBmdWxsTmFtZTsK
LSAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSB7QGxpbmsgRmlsZURlc2NyaXB0b3J9IGNvbnRhaW5p
bmcgdGhpcyBkZXNjcmlwdG9yLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWxlRGVz
Y3JpcHRvciBnZXRGaWxlKCkgewotICAgICAgcmV0dXJuIGZpbGU7Ci0gICAgfQotCi0gICAgLyoq
IElmIHRoaXMgaXMgYSBuZXN0ZWQgdHlwZSwgZ2V0IHRoZSBvdXRlciBkZXNjcmlwdG9yLCBvdGhl
cndpc2UgbnVsbC4gKi8KLSAgICBwdWJsaWMgRGVzY3JpcHRvciBnZXRDb250YWluaW5nVHlwZSgp
IHsgcmV0dXJuIGNvbnRhaW5pbmdUeXBlOyB9Ci0KLSAgICAvKiogR2V0IHRoZSB7QGNvZGUgRW51
bU9wdGlvbnN9LCBkZWZpbmVkIGluIHtAY29kZSBkZXNjcmlwdG9yLnByb3RvfS4gKi8KLSAgICBw
dWJsaWMgRW51bU9wdGlvbnMgZ2V0T3B0aW9ucygpIHsgcmV0dXJuIHByb3RvLmdldE9wdGlvbnMo
KTsgfQotCi0gICAgLyoqIEdldCBhIGxpc3Qgb2YgZGVmaW5lZCB2YWx1ZXMgZm9yIHRoaXMgZW51
bS4gKi8KLSAgICBwdWJsaWMgTGlzdDxFbnVtVmFsdWVEZXNjcmlwdG9yPiBnZXRWYWx1ZXMoKSB7
Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0
KHZhbHVlcykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZpbmQgYW4gZW51bSB2YWx1ZSBi
eSBuYW1lLgotICAgICAqIEBwYXJhbSBuYW1lIFRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIHRoZSB2
YWx1ZSAoZS5nLiAiRk9PIikuCi0gICAgICogQHJldHVybiB0aGUgdmFsdWUncyBkZXNjcmlwdG9y
LCBvciB7QGNvZGUgbnVsbH0gaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHB1YmxpYyBFbnVt
VmFsdWVEZXNjcmlwdG9yIGZpbmRWYWx1ZUJ5TmFtZShmaW5hbCBTdHJpbmcgbmFtZSkgewotICAg
ICAgZmluYWwgR2VuZXJpY0Rlc2NyaXB0b3IgcmVzdWx0ID0KLSAgICAgICAgICBmaWxlLnBvb2wu
ZmluZFN5bWJvbChmdWxsTmFtZSArICcuJyArIG5hbWUpOwotICAgICAgaWYgKHJlc3VsdCAhPSBu
dWxsICYmIHJlc3VsdCBpbnN0YW5jZW9mIEVudW1WYWx1ZURlc2NyaXB0b3IpIHsKLSAgICAgICAg
cmV0dXJuIChFbnVtVmFsdWVEZXNjcmlwdG9yKXJlc3VsdDsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZpbmQg
YW4gZW51bSB2YWx1ZSBieSBudW1iZXIuICBJZiBtdWx0aXBsZSBlbnVtIHZhbHVlcyBoYXZlIHRo
ZSBzYW1lCi0gICAgICogbnVtYmVyLCB0aGlzIHJldHVybnMgdGhlIGZpcnN0IGRlZmluZWQgdmFs
dWUgd2l0aCB0aGF0IG51bWJlci4KLSAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSB2YWx1ZSdzIG51
bWJlci4KLSAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSdzIGRlc2NyaXB0b3IsIG9yIHtAY29kZSBu
dWxsfSBpZiBub3QgZm91bmQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEVu
dW1WYWx1ZURlc2NyaXB0b3IgZmluZFZhbHVlQnlOdW1iZXIoZmluYWwgaW50IG51bWJlcikgewot
ICAgICAgcmV0dXJuIGZpbGUucG9vbC5lbnVtVmFsdWVzQnlOdW1iZXIuZ2V0KAotICAgICAgICBu
ZXcgRGVzY3JpcHRvclBvb2wuRGVzY3JpcHRvckludFBhaXIodGhpcywgbnVtYmVyKSk7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogR2V0IHRoZSBlbnVtIHZhbHVlIGZvciBhIG51bWJlci4gSWYg
bm8gZW51bSB2YWx1ZSBoYXMgdGhpcyBudW1iZXIsCi0gICAgICogY29uc3RydWN0IGFuIEVudW1W
YWx1ZURlc2NyaXB0b3IgZm9yIGl0LgotICAgICAqLwotICAgIHB1YmxpYyBFbnVtVmFsdWVEZXNj
cmlwdG9yIGZpbmRWYWx1ZUJ5TnVtYmVyQ3JlYXRpbmdJZlVua25vd24oZmluYWwgaW50IG51bWJl
cikgewotICAgICAgRW51bVZhbHVlRGVzY3JpcHRvciByZXN1bHQgPSBmaW5kVmFsdWVCeU51bWJl
cihudW1iZXIpOwotICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICB9Ci0gICAgICAvLyBUaGUgbnVtYmVyIHJlcHJlc2VudHMgYW4gdW5rbm93
biBlbnVtIHZhbHVlLgotICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgIC8vIERl
c2NyaXB0b3JzIGFyZSBjb21wYXJlZCBieSBvYmplY3QgaWRlbnRpdHkgc28gZm9yIHRoZSBzYW1l
IG51bWJlcgotICAgICAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiB0aGUgc2FtZSBFbnVtVmFsdWVE
ZXNjcmlwdG9yIG9iamVjdC4gVGhpcyBtZWFucwotICAgICAgICAvLyB3ZSBoYXZlIHRvIHN0b3Jl
IGNyZWF0ZWQgRW51bVZhbHVlRGVzY3JpcHRvcnMuIEhvd2V2ZXIsIGFzIHRoZXJlCi0gICAgICAg
IC8vIGFyZSBwb3RlbnRpYWxseSAyRyB1bmtub3duIGVudW0gdmFsdWVzLCBzdG9yaW5nIGFsbCBv
ZiB0aGVzZQotICAgICAgICAvLyBvYmplY3RzIHBlcnNpc3RlbnRseSB3aWxsIGNvbnN1bWUgbG90
cyBvZiBtZW1vcnkgZm9yIGxvbmctcnVubmluZwotICAgICAgICAvLyBzZXJ2aWNlcyBhbmQgaXQn
cyBhbHNvIHVubmVjZXNzYXJ5IGFzIG5vdCBtYW55IEVudW1WYWx1ZURlc2NyaXB0b3JzCi0gICAg
ICAgIC8vIHdpbGwgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAvLwotICAgICAg
ICAvLyBUbyBzb2x2ZSB0aGUgcHJvYmxlbSB3ZSB0YWtlIGFkdmFudGFnZSBvZiBKYXZhJ3Mgd2Vh
ayByZWZlcmVuY2VzIGFuZAotICAgICAgICAvLyByZWx5IG9uIGdjIHRvIHJlbGVhc2UgdW51c2Vk
IGRlc2NyaXB0b3JzLgotICAgICAgICAvLwotICAgICAgICAvLyBIZXJlIGlzIGhvdyBpdCB3b3Jr
czoKLSAgICAgICAgLy8gICAqIFdlIHN0b3JlIHVua25vd24gRW51bVZhbHVlRGVzY3JpcHRvcnMg
aW4gYSBXZWFrSGFzaE1hcCB3aXRoIHRoZQotICAgICAgICAvLyAgICAgdmFsdWUgYmVpbmcgYSB3
ZWFrIHJlZmVyZW5jZSB0byB0aGUgZGVzY3JpcHRvci4KLSAgICAgICAgLy8gICAqIFRoZSBkZXNj
cmlwdG9yIGhvbGRzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUga2V5IHNvIGFzIGxvbmcKLSAg
ICAgICAgLy8gICAgIGFzIHRoZSBFbnVtVmFsdWVEZXNjcmlwdG9yIGlzIGluIHVzZSwgdGhlIGtl
eSB3aWxsIGJlIHRoZXJlCi0gICAgICAgIC8vICAgICBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbWFw
IGVudHJ5IHdpbGwgYmUgdGhlcmUuIEZvbGxvd2luZy11cAotICAgICAgICAvLyAgICAgcXVlcmll
cyB3aXRoIHRoZSBzYW1lIG51bWJlciB3aWxsIHJldHVybiB0aGUgc2FtZSBkZXNjcmlwdG9yLgot
ICAgICAgICAvLyAgICogSWYgdGhlIHVzZXIgbm8gbG9uZ2VyIHVzZXMgYW4gdW5rbm93biBFbnVt
VmFsdWVEZXNjcmlwdG9yLAotICAgICAgICAvLyAgICAgaXQgd2lsbCBiZSBnYy1lZCBzaW5jZSB3
ZSBvbmx5IGhvbGQgYSB3ZWFrIHJlZmVyZW5jZSB0byBpdCBpbgotICAgICAgICAvLyAgICAgdGhl
IG1hcC4gVGhlIGtleSBpbiB0aGUgY29ycmVzcG9uZGluZyBtYXAgZW50cnkgd2lsbCBhbHNvIGJl
Ci0gICAgICAgIC8vICAgICBnYy1lZCBhcyB0aGUgb25seSBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0
IGlzIGluIHRoZSBkZXNjcmlwdG9yCi0gICAgICAgIC8vICAgICB3aGljaCBpcyBqdXN0IGdjLWVk
LiBXaXRoIHRoZSBrZXkgYmVpbmcgZ29uZSBXZWFrSGFzaE1hcCB3aWxsCi0gICAgICAgIC8vICAg
ICB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgZW50cnkuIFRoaXMgd2F5IHVua25vd24gZGVzY3JpcHRv
cnMgd2lsbAotICAgICAgICAvLyAgICAgYmUgZnJlZWQgYXV0b21hdGljYWxseSBhbmQgd2UgZG9u
J3QgbmVlZCB0byBkbyBhbnl0aGluZyB0bwotICAgICAgICAvLyAgICAgY2xlYW4tdXAgdW51c2Vk
IG1hcCBlbnRyaWVzLgotCi0gICAgICAgIC8vIE5vdGU6IFdlIG11c3QgdXNlICJuZXcgSW50ZWdl
cihudW1iZXIpIiBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudAotICAgICAgICAvLyB0aGVzZSBJ
bnRlZ2VyIG9iamVjdHMgdG8gYmUgY2FjaGVkLgotICAgICAgICBJbnRlZ2VyIGtleSA9IG5ldyBJ
bnRlZ2VyKG51bWJlcik7Ci0gICAgICAgIFdlYWtSZWZlcmVuY2U8RW51bVZhbHVlRGVzY3JpcHRv
cj4gcmVmZXJlbmNlID0gdW5rbm93blZhbHVlcy5nZXQoa2V5KTsKLSAgICAgICAgaWYgKHJlZmVy
ZW5jZSAhPSBudWxsKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlLmdldCgpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewotICAgICAgICAgIHJlc3VsdCA9
IG5ldyBFbnVtVmFsdWVEZXNjcmlwdG9yKGZpbGUsIHRoaXMsIGtleSk7Ci0gICAgICAgICAgdW5r
bm93blZhbHVlcy5wdXQoa2V5LCBuZXcgV2Vha1JlZmVyZW5jZTxFbnVtVmFsdWVEZXNjcmlwdG9y
PihyZXN1bHQpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0KLSAgICAvLyBVc2VkIGluIHRlc3RzIG9ubHkuCi0gICAgaW50IGdldFVua25vd25FbnVt
VmFsdWVEZXNjcmlwdG9yQ291bnQoKSB7Ci0gICAgICByZXR1cm4gdW5rbm93blZhbHVlcy5zaXpl
KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgaW5kZXg7Ci0gICAgcHJpdmF0ZSBF
bnVtRGVzY3JpcHRvclByb3RvIHByb3RvOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGZ1bGxO
YW1lOwotICAgIHByaXZhdGUgZmluYWwgRmlsZURlc2NyaXB0b3IgZmlsZTsKLSAgICBwcml2YXRl
IGZpbmFsIERlc2NyaXB0b3IgY29udGFpbmluZ1R5cGU7Ci0gICAgcHJpdmF0ZSBFbnVtVmFsdWVE
ZXNjcmlwdG9yW10gdmFsdWVzOwotICAgIHByaXZhdGUgZmluYWwgV2Vha0hhc2hNYXA8SW50ZWdl
ciwgV2Vha1JlZmVyZW5jZTxFbnVtVmFsdWVEZXNjcmlwdG9yPj4gdW5rbm93blZhbHVlcyA9Ci0g
ICAgICAgIG5ldyBXZWFrSGFzaE1hcDxJbnRlZ2VyLCBXZWFrUmVmZXJlbmNlPEVudW1WYWx1ZURl
c2NyaXB0b3I+PigpOwotCi0gICAgcHJpdmF0ZSBFbnVtRGVzY3JpcHRvcihmaW5hbCBFbnVtRGVz
Y3JpcHRvclByb3RvIHByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRmls
ZURlc2NyaXB0b3IgZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIERlc2Ny
aXB0b3IgcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGluZGV4
KQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRp
b24gewotICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwotICAgICAgdGhpcy5wcm90byA9IHByb3Rv
OwotICAgICAgZnVsbE5hbWUgPSBjb21wdXRlRnVsbE5hbWUoZmlsZSwgcGFyZW50LCBwcm90by5n
ZXROYW1lKCkpOwotICAgICAgdGhpcy5maWxlID0gZmlsZTsKLSAgICAgIGNvbnRhaW5pbmdUeXBl
ID0gcGFyZW50OwotCi0gICAgICBpZiAocHJvdG8uZ2V0VmFsdWVDb3VudCgpID09IDApIHsKLSAg
ICAgICAgLy8gV2UgY2Fubm90IGFsbG93IGVudW1zIHdpdGggbm8gdmFsdWVzIGJlY2F1c2UgdGhp
cyB3b3VsZCBtZWFuIHRoZXJlCi0gICAgICAgIC8vIHdvdWxkIGJlIG5vIHZhbGlkIGRlZmF1bHQg
dmFsdWUgZm9yIGZpZWxkcyBvZiB0aGlzIHR5cGUuCi0gICAgICAgIHRocm93IG5ldyBEZXNjcmlw
dG9yVmFsaWRhdGlvbkV4Y2VwdGlvbih0aGlzLAotICAgICAgICAgICJFbnVtcyBtdXN0IGNvbnRh
aW4gYXQgbGVhc3Qgb25lIHZhbHVlLiIpOwotICAgICAgfQotCi0gICAgICB2YWx1ZXMgPSBuZXcg
RW51bVZhbHVlRGVzY3JpcHRvcltwcm90by5nZXRWYWx1ZUNvdW50KCldOwotICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBwcm90by5nZXRWYWx1ZUNvdW50KCk7IGkrKykgewotICAgICAgICB2YWx1
ZXNbaV0gPSBuZXcgRW51bVZhbHVlRGVzY3JpcHRvcigKLSAgICAgICAgICBwcm90by5nZXRWYWx1
ZShpKSwgZmlsZSwgdGhpcywgaSk7Ci0gICAgICB9Ci0KLSAgICAgIGZpbGUucG9vbC5hZGRTeW1i
b2wodGhpcyk7Ci0gICAgfQotCi0gICAgLyoqIFNlZSB7QGxpbmsgRmlsZURlc2NyaXB0b3Ijc2V0
UHJvdG99LiAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRQcm90byhmaW5hbCBFbnVtRGVzY3JpcHRv
clByb3RvIHByb3RvKSB7Ci0gICAgICB0aGlzLnByb3RvID0gcHJvdG87Ci0KLSAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhbHVlc1tpXS5z
ZXRQcm90byhwcm90by5nZXRWYWx1ZShpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLQotICAvKioKLSAgICogRGVzY3JpYmVzIG9uZSB2YWx1ZSB3aXRoaW4gYW4gZW51
bSB0eXBlLiAgTm90ZSB0aGF0IG11bHRpcGxlIGRlZmluZWQKLSAgICogdmFsdWVzIG1heSBoYXZl
IHRoZSBzYW1lIG51bWJlci4gIEluIGdlbmVyYXRlZCBKYXZhIGNvZGUsIGFsbCB2YWx1ZXMKLSAg
ICogd2l0aCB0aGUgc2FtZSBudW1iZXIgYWZ0ZXIgdGhlIGZpcnN0IGJlY29tZSBhbGlhc2VzIG9m
IHRoZSBmaXJzdC4KLSAgICogSG93ZXZlciwgdGhleSBzdGlsbCBoYXZlIGluZGVwZW5kZW50IEVu
dW1WYWx1ZURlc2NyaXB0b3JzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBF
bnVtVmFsdWVEZXNjcmlwdG9yIGV4dGVuZHMgR2VuZXJpY0Rlc2NyaXB0b3IKLSAgICAgIGltcGxl
bWVudHMgSW50ZXJuYWwuRW51bUxpdGUgewotICAgIC8qKgotICAgICAqIEdldCB0aGUgaW5kZXgg
b2YgdGhpcyBkZXNjcmlwdG9yIHdpdGhpbiBpdHMgcGFyZW50LgotICAgICAqIEBzZWUgRGVzY3Jp
cHRvcnMuRGVzY3JpcHRvciNnZXRJbmRleCgpCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRJ
bmRleCgpIHsgcmV0dXJuIGluZGV4OyB9Ci0KLSAgICAvKiogQ29udmVydCB0aGUgZGVzY3JpcHRv
ciB0byBpdHMgcHJvdG9jb2wgbWVzc2FnZSByZXByZXNlbnRhdGlvbi4gKi8KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHRvUHJvdG8oKSB7Ci0gICAg
ICByZXR1cm4gcHJvdG87Ci0gICAgfQotCi0gICAgLyoqIEdldCB0aGUgdmFsdWUncyB1bnF1YWxp
ZmllZCBuYW1lLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgp
IHsKLSAgICAgIHJldHVybiBwcm90by5nZXROYW1lKCk7Ci0gICAgfQotCi0gICAgLyoqIEdldCB0
aGUgdmFsdWUncyBudW1iZXIuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRO
dW1iZXIoKSB7Ci0gICAgICByZXR1cm4gcHJvdG8uZ2V0TnVtYmVyKCk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIHByb3RvLmdl
dE5hbWUoKTsgfQotCi0gICAgLyoqCi0gICAgICogR2V0IHRoZSB2YWx1ZSdzIGZ1bGx5LXF1YWxp
ZmllZCBuYW1lLgotICAgICAqIEBzZWUgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciNnZXRGdWxsTmFt
ZSgpCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRGdWxsTmFt
ZSgpIHsKLSAgICAgIHJldHVybiBmdWxsTmFtZTsKLSAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSB7
QGxpbmsgRmlsZURlc2NyaXB0b3J9IGNvbnRhaW5pbmcgdGhpcyBkZXNjcmlwdG9yLiAqLwotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWxlRGVzY3JpcHRvciBnZXRGaWxlKCkgewotICAgICAg
cmV0dXJuIGZpbGU7Ci0gICAgfQotCi0gICAgLyoqIEdldCB0aGUgdmFsdWUncyBlbnVtIHR5cGUu
ICovCi0gICAgcHVibGljIEVudW1EZXNjcmlwdG9yIGdldFR5cGUoKSB7IHJldHVybiB0eXBlOyB9
Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIHtAY29kZSBFbnVtVmFsdWVPcHRpb25zfSwgZGVm
aW5lZCBpbiB7QGNvZGUgZGVzY3JpcHRvci5wcm90b30uCi0gICAgICovCi0gICAgcHVibGljIEVu
dW1WYWx1ZU9wdGlvbnMgZ2V0T3B0aW9ucygpIHsgcmV0dXJuIHByb3RvLmdldE9wdGlvbnMoKTsg
fQotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgaW5kZXg7Ci0gICAgcHJpdmF0ZSBFbnVtVmFsdWVE
ZXNjcmlwdG9yUHJvdG8gcHJvdG87Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZnVsbE5hbWU7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBGaWxlRGVzY3JpcHRvciBmaWxlOwotICAgIHByaXZhdGUgZmlu
YWwgRW51bURlc2NyaXB0b3IgdHlwZTsKLQotICAgIHByaXZhdGUgRW51bVZhbHVlRGVzY3JpcHRv
cihmaW5hbCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gcHJvdG8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbmFsIEZpbGVEZXNjcmlwdG9yIGZpbGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbmFsIEVudW1EZXNjcmlwdG9yIHBhcmVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGluZGV4KQotICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93cyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICB0
aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgICB0aGlzLnByb3RvID0gcHJvdG87Ci0gICAgICB0aGlz
LmZpbGUgPSBmaWxlOwotICAgICAgdHlwZSA9IHBhcmVudDsKLQotICAgICAgZnVsbE5hbWUgPSBw
YXJlbnQuZ2V0RnVsbE5hbWUoKSArICcuJyArIHByb3RvLmdldE5hbWUoKTsKLQotICAgICAgZmls
ZS5wb29sLmFkZFN5bWJvbCh0aGlzKTsKLSAgICAgIGZpbGUucG9vbC5hZGRFbnVtVmFsdWVCeU51
bWJlcih0aGlzKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEludGVnZXIgbnVtYmVyOwotICAgIC8v
IENyZWF0ZSBhbiB1bmtub3duIGVudW0gdmFsdWUuCi0gICAgcHJpdmF0ZSBFbnVtVmFsdWVEZXNj
cmlwdG9yKAotICAgICAgICBmaW5hbCBGaWxlRGVzY3JpcHRvciBmaWxlLAotICAgICAgICBmaW5h
bCBFbnVtRGVzY3JpcHRvciBwYXJlbnQsCi0gICAgICAgIGZpbmFsIEludGVnZXIgbnVtYmVyKSB7
Ci0gICAgICBTdHJpbmcgbmFtZSA9ICJVTktOT1dOX0VOVU1fVkFMVUVfIiArIHBhcmVudC5nZXRO
YW1lKCkgKyAiXyIgKyBudW1iZXI7Ci0gICAgICBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gcHJv
dG8gPSBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8KLSAgICAgICAgICAubmV3QnVpbGRlcigpLnNl
dE5hbWUobmFtZSkuc2V0TnVtYmVyKG51bWJlcikuYnVpbGQoKTsKLSAgICAgIHRoaXMuaW5kZXgg
PSAtMTsKLSAgICAgIHRoaXMucHJvdG8gPSBwcm90bzsKLSAgICAgIHRoaXMuZmlsZSA9IGZpbGU7
Ci0gICAgICB0aGlzLnR5cGUgPSBwYXJlbnQ7Ci0gICAgICB0aGlzLmZ1bGxOYW1lID0gcGFyZW50
LmdldEZ1bGxOYW1lKCkgKyAnLicgKyBwcm90by5nZXROYW1lKCk7Ci0gICAgICB0aGlzLm51bWJl
ciA9IG51bWJlcjsKLQotICAgICAgLy8gRG9uJ3QgYWRkIHRoaXMgZGVzY3JpcHRvciBpbnRvIHBv
b2wuCi0gICAgfQotCi0gICAgLyoqIFNlZSB7QGxpbmsgRmlsZURlc2NyaXB0b3Ijc2V0UHJvdG99
LiAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRQcm90byhmaW5hbCBFbnVtVmFsdWVEZXNjcmlwdG9y
UHJvdG8gcHJvdG8pIHsKLSAgICAgIHRoaXMucHJvdG8gPSBwcm90bzsKLSAgICB9Ci0gIH0KLQot
ICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotCi0gIC8qKiBEZXNjcmliZXMgYSBzZXJ2aWNlIHR5cGUuICovCi0gIHB1
YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgU2VydmljZURlc2NyaXB0b3IgZXh0ZW5kcyBHZW5lcmlj
RGVzY3JpcHRvciB7Ci0gICAgLyoqCi0gICAgICogR2V0IHRoZSBpbmRleCBvZiB0aGlzIGRlc2Ny
aXB0b3Igd2l0aGluIGl0cyBwYXJlbnQuCi0gICAgICogKiBAc2VlIERlc2NyaXB0b3JzLkRlc2Ny
aXB0b3IjZ2V0SW5kZXgoKQotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKSB7IHJl
dHVybiBpbmRleDsgfQotCi0gICAgLyoqIENvbnZlcnQgdGhlIGRlc2NyaXB0b3IgdG8gaXRzIHBy
b3RvY29sIG1lc3NhZ2UgcmVwcmVzZW50YXRpb24uICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8gdG9Qcm90bygpIHsKLSAgICAgIHJldHVybiBwcm90
bzsKLSAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSB0eXBlJ3MgdW5xdWFsaWZpZWQgbmFtZS4gKi8K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICByZXR1
cm4gcHJvdG8uZ2V0TmFtZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUgdHlw
ZSdzIGZ1bGx5LXF1YWxpZmllZCBuYW1lLgotICAgICAqIEBzZWUgRGVzY3JpcHRvcnMuRGVzY3Jp
cHRvciNnZXRGdWxsTmFtZSgpCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0
cmluZyBnZXRGdWxsTmFtZSgpIHsKLSAgICAgIHJldHVybiBmdWxsTmFtZTsKLSAgICB9Ci0KLSAg
ICAvKiogR2V0IHRoZSB7QGxpbmsgRmlsZURlc2NyaXB0b3J9IGNvbnRhaW5pbmcgdGhpcyBkZXNj
cmlwdG9yLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWxlRGVzY3JpcHRvciBnZXRG
aWxlKCkgewotICAgICAgcmV0dXJuIGZpbGU7Ci0gICAgfQotCi0gICAgLyoqIEdldCB0aGUge0Bj
b2RlIFNlcnZpY2VPcHRpb25zfSwgZGVmaW5lZCBpbiB7QGNvZGUgZGVzY3JpcHRvci5wcm90b30u
ICovCi0gICAgcHVibGljIFNlcnZpY2VPcHRpb25zIGdldE9wdGlvbnMoKSB7IHJldHVybiBwcm90
by5nZXRPcHRpb25zKCk7IH0KLQotICAgIC8qKiBHZXQgYSBsaXN0IG9mIG1ldGhvZHMgZm9yIHRo
aXMgc2VydmljZS4gKi8KLSAgICBwdWJsaWMgTGlzdDxNZXRob2REZXNjcmlwdG9yPiBnZXRNZXRo
b2RzKCkgewotICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlz
LmFzTGlzdChtZXRob2RzKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmluZCBhIG1ldGhv
ZCBieSBuYW1lLgotICAgICAqIEBwYXJhbSBuYW1lIFRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIHRo
ZSBtZXRob2QgKGUuZy4gIkZvbyIpLgotICAgICAqIEByZXR1cm4gdGhlIG1ldGhvZCdzIGRlc2Ny
aXB0b3IsIG9yIHtAY29kZSBudWxsfSBpZiBub3QgZm91bmQuCi0gICAgICovCi0gICAgcHVibGlj
IE1ldGhvZERlc2NyaXB0b3IgZmluZE1ldGhvZEJ5TmFtZShmaW5hbCBTdHJpbmcgbmFtZSkgewot
ICAgICAgZmluYWwgR2VuZXJpY0Rlc2NyaXB0b3IgcmVzdWx0ID0KLSAgICAgICAgICBmaWxlLnBv
b2wuZmluZFN5bWJvbChmdWxsTmFtZSArICcuJyArIG5hbWUpOwotICAgICAgaWYgKHJlc3VsdCAh
PSBudWxsICYmIHJlc3VsdCBpbnN0YW5jZW9mIE1ldGhvZERlc2NyaXB0b3IpIHsKLSAgICAgICAg
cmV0dXJuIChNZXRob2REZXNjcmlwdG9yKXJlc3VsdDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgaW50IGlu
ZGV4OwotICAgIHByaXZhdGUgU2VydmljZURlc2NyaXB0b3JQcm90byBwcm90bzsKLSAgICBwcml2
YXRlIGZpbmFsIFN0cmluZyBmdWxsTmFtZTsKLSAgICBwcml2YXRlIGZpbmFsIEZpbGVEZXNjcmlw
dG9yIGZpbGU7Ci0gICAgcHJpdmF0ZSBNZXRob2REZXNjcmlwdG9yW10gbWV0aG9kczsKLQotICAg
IHByaXZhdGUgU2VydmljZURlc2NyaXB0b3IoZmluYWwgU2VydmljZURlc2NyaXB0b3JQcm90byBw
cm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZpbGVEZXNjcmlwdG9y
IGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaW5kZXgpCi0g
ICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlv
biB7Ci0gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgICB0aGlzLnByb3RvID0gcHJvdG87
Ci0gICAgICBmdWxsTmFtZSA9IGNvbXB1dGVGdWxsTmFtZShmaWxlLCBudWxsLCBwcm90by5nZXRO
YW1lKCkpOwotICAgICAgdGhpcy5maWxlID0gZmlsZTsKLQotICAgICAgbWV0aG9kcyA9IG5ldyBN
ZXRob2REZXNjcmlwdG9yW3Byb3RvLmdldE1ldGhvZENvdW50KCldOwotICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBwcm90by5nZXRNZXRob2RDb3VudCgpOyBpKyspIHsKLSAgICAgICAgbWV0aG9k
c1tpXSA9IG5ldyBNZXRob2REZXNjcmlwdG9yKAotICAgICAgICAgIHByb3RvLmdldE1ldGhvZChp
KSwgZmlsZSwgdGhpcywgaSk7Ci0gICAgICB9Ci0KLSAgICAgIGZpbGUucG9vbC5hZGRTeW1ib2wo
dGhpcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNyb3NzTGluaygpIHRocm93cyBEZXNj
cmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICBmb3IgKGZpbmFsIE1ldGhvZERlc2Ny
aXB0b3IgbWV0aG9kIDogbWV0aG9kcykgewotICAgICAgICBtZXRob2QuY3Jvc3NMaW5rKCk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLyoqIFNlZSB7QGxpbmsgRmlsZURlc2NyaXB0b3Ijc2V0UHJv
dG99LiAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRQcm90byhmaW5hbCBTZXJ2aWNlRGVzY3JpcHRv
clByb3RvIHByb3RvKSB7Ci0gICAgICB0aGlzLnByb3RvID0gcHJvdG87Ci0KLSAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewotICAgICAgICBtZXRob2RzW2ld
LnNldFByb3RvKHByb3RvLmdldE1ldGhvZChpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLQotICAvKioKLSAgICogRGVzY3JpYmVzIG9uZSBtZXRob2Qgd2l0aGluIGEg
c2VydmljZSB0eXBlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBNZXRob2RE
ZXNjcmlwdG9yIGV4dGVuZHMgR2VuZXJpY0Rlc2NyaXB0b3IgewotICAgIC8qKgotICAgICAqIEdl
dCB0aGUgaW5kZXggb2YgdGhpcyBkZXNjcmlwdG9yIHdpdGhpbiBpdHMgcGFyZW50LgotICAgICAq
ICogQHNlZSBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yI2dldEluZGV4KCkKLSAgICAgKi8KLSAgICBw
dWJsaWMgaW50IGdldEluZGV4KCkgeyByZXR1cm4gaW5kZXg7IH0KLQotICAgIC8qKiBDb252ZXJ0
IHRoZSBkZXNjcmlwdG9yIHRvIGl0cyBwcm90b2NvbCBtZXNzYWdlIHJlcHJlc2VudGF0aW9uLiAq
LwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZXRob2REZXNjcmlwdG9yUHJvdG8gdG9Qcm90
bygpIHsKLSAgICAgIHJldHVybiBwcm90bzsKLSAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSBtZXRo
b2QncyB1bnF1YWxpZmllZCBuYW1lLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJp
bmcgZ2V0TmFtZSgpIHsKLSAgICAgIHJldHVybiBwcm90by5nZXROYW1lKCk7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogR2V0IHRoZSBtZXRob2QncyBmdWxseS1xdWFsaWZpZWQgbmFtZS4KLSAg
ICAgKiBAc2VlIERlc2NyaXB0b3JzLkRlc2NyaXB0b3IjZ2V0RnVsbE5hbWUoKQotICAgICAqLwot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RnVsbE5hbWUoKSB7Ci0gICAgICBy
ZXR1cm4gZnVsbE5hbWU7Ci0gICAgfQotCi0gICAgLyoqIEdldCB0aGUge0BsaW5rIEZpbGVEZXNj
cmlwdG9yfSBjb250YWluaW5nIHRoaXMgZGVzY3JpcHRvci4gKi8KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgRmlsZURlc2NyaXB0b3IgZ2V0RmlsZSgpIHsKLSAgICAgIHJldHVybiBmaWxlOwot
ICAgIH0KLQotICAgIC8qKiBHZXQgdGhlIG1ldGhvZCdzIHNlcnZpY2UgdHlwZS4gKi8KLSAgICBw
dWJsaWMgU2VydmljZURlc2NyaXB0b3IgZ2V0U2VydmljZSgpIHsgcmV0dXJuIHNlcnZpY2U7IH0K
LQotICAgIC8qKiBHZXQgdGhlIG1ldGhvZCdzIGlucHV0IHR5cGUuICovCi0gICAgcHVibGljIERl
c2NyaXB0b3IgZ2V0SW5wdXRUeXBlKCkgeyByZXR1cm4gaW5wdXRUeXBlOyB9Ci0KLSAgICAvKiog
R2V0IHRoZSBtZXRob2QncyBvdXRwdXQgdHlwZS4gKi8KLSAgICBwdWJsaWMgRGVzY3JpcHRvciBn
ZXRPdXRwdXRUeXBlKCkgeyByZXR1cm4gb3V0cHV0VHlwZTsgfQotCi0gICAgLyoqCi0gICAgICog
R2V0IHRoZSB7QGNvZGUgTWV0aG9kT3B0aW9uc30sIGRlZmluZWQgaW4ge0Bjb2RlIGRlc2NyaXB0
b3IucHJvdG99LgotICAgICAqLwotICAgIHB1YmxpYyBNZXRob2RPcHRpb25zIGdldE9wdGlvbnMo
KSB7IHJldHVybiBwcm90by5nZXRPcHRpb25zKCk7IH0KLQotICAgIHByaXZhdGUgZmluYWwgaW50
IGluZGV4OwotICAgIHByaXZhdGUgTWV0aG9kRGVzY3JpcHRvclByb3RvIHByb3RvOwotICAgIHBy
aXZhdGUgZmluYWwgU3RyaW5nIGZ1bGxOYW1lOwotICAgIHByaXZhdGUgZmluYWwgRmlsZURlc2Ny
aXB0b3IgZmlsZTsKLSAgICBwcml2YXRlIGZpbmFsIFNlcnZpY2VEZXNjcmlwdG9yIHNlcnZpY2U7
Ci0KLSAgICAvLyBJbml0aWFsaXplZCBkdXJpbmcgY3Jvc3MtbGlua2luZy4KLSAgICBwcml2YXRl
IERlc2NyaXB0b3IgaW5wdXRUeXBlOwotICAgIHByaXZhdGUgRGVzY3JpcHRvciBvdXRwdXRUeXBl
OwotCi0gICAgcHJpdmF0ZSBNZXRob2REZXNjcmlwdG9yKGZpbmFsIE1ldGhvZERlc2NyaXB0b3JQ
cm90byBwcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRmlsZURlc2Ny
aXB0b3IgZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VydmljZURl
c2NyaXB0b3IgcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQg
aW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIERlc2NyaXB0b3JWYWxpZGF0aW9u
RXhjZXB0aW9uIHsKLSAgICAgIHRoaXMuaW5kZXggPSBpbmRleDsKLSAgICAgIHRoaXMucHJvdG8g
PSBwcm90bzsKLSAgICAgIHRoaXMuZmlsZSA9IGZpbGU7Ci0gICAgICBzZXJ2aWNlID0gcGFyZW50
OwotCi0gICAgICBmdWxsTmFtZSA9IHBhcmVudC5nZXRGdWxsTmFtZSgpICsgJy4nICsgcHJvdG8u
Z2V0TmFtZSgpOwotCi0gICAgICBmaWxlLnBvb2wuYWRkU3ltYm9sKHRoaXMpOwotICAgIH0KLQot
ICAgIHByaXZhdGUgdm9pZCBjcm9zc0xpbmsoKSB0aHJvd3MgRGVzY3JpcHRvclZhbGlkYXRpb25F
eGNlcHRpb24gewotICAgICAgZmluYWwgR2VuZXJpY0Rlc2NyaXB0b3IgaW5wdXQgPQotICAgICAg
ICBmaWxlLnBvb2wubG9va3VwU3ltYm9sKHByb3RvLmdldElucHV0VHlwZSgpLCB0aGlzLAotICAg
ICAgICAgICAgRGVzY3JpcHRvclBvb2wuU2VhcmNoRmlsdGVyLlRZUEVTX09OTFkpOwotICAgICAg
aWYgKCEoaW5wdXQgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKSkgewotICAgICAgICB0aHJvdyBuZXcg
RGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24odGhpcywKLSAgICAgICAgICAgICdcIicgKyBw
cm90by5nZXRJbnB1dFR5cGUoKSArICJcIiBpcyBub3QgYSBtZXNzYWdlIHR5cGUuIik7Ci0gICAg
ICB9Ci0gICAgICBpbnB1dFR5cGUgPSAoRGVzY3JpcHRvcilpbnB1dDsKLQotICAgICAgZmluYWwg
R2VuZXJpY0Rlc2NyaXB0b3Igb3V0cHV0ID0KLSAgICAgICAgZmlsZS5wb29sLmxvb2t1cFN5bWJv
bChwcm90by5nZXRPdXRwdXRUeXBlKCksIHRoaXMsCi0gICAgICAgICAgICBEZXNjcmlwdG9yUG9v
bC5TZWFyY2hGaWx0ZXIuVFlQRVNfT05MWSk7Ci0gICAgICBpZiAoIShvdXRwdXQgaW5zdGFuY2Vv
ZiBEZXNjcmlwdG9yKSkgewotICAgICAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclZhbGlkYXRpb25F
eGNlcHRpb24odGhpcywKLSAgICAgICAgICAgICdcIicgKyBwcm90by5nZXRPdXRwdXRUeXBlKCkg
KyAiXCIgaXMgbm90IGEgbWVzc2FnZSB0eXBlLiIpOwotICAgICAgfQotICAgICAgb3V0cHV0VHlw
ZSA9IChEZXNjcmlwdG9yKW91dHB1dDsKLSAgICB9Ci0KLSAgICAvKiogU2VlIHtAbGluayBGaWxl
RGVzY3JpcHRvciNzZXRQcm90b30uICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldFByb3RvKGZpbmFs
IE1ldGhvZERlc2NyaXB0b3JQcm90byBwcm90bykgewotICAgICAgdGhpcy5wcm90byA9IHByb3Rv
OwotICAgIH0KLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5n
IGNvbXB1dGVGdWxsTmFtZShmaW5hbCBGaWxlRGVzY3JpcHRvciBmaWxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIERlc2NyaXB0b3IgcGFyZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lKSB7
Ci0gICAgaWYgKHBhcmVudCAhPSBudWxsKSB7Ci0gICAgICByZXR1cm4gcGFyZW50LmdldEZ1bGxO
YW1lKCkgKyAnLicgKyBuYW1lOwotICAgIH0gZWxzZSBpZiAoZmlsZS5nZXRQYWNrYWdlKCkubGVu
Z3RoKCkgPiAwKSB7Ci0gICAgICByZXR1cm4gZmlsZS5nZXRQYWNrYWdlKCkgKyAnLicgKyBuYW1l
OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0gIH0KLQotICAvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi0gIC8qKgotICAgKiBBbGwgZGVzY3JpcHRvcnMgaW1wbGVtZW50IHRoaXMgdG8g
bWFrZSBpdCBlYXNpZXIgdG8gaW1wbGVtZW50IHRvb2xzIGxpa2UKLSAgICoge0Bjb2RlIERlc2Ny
aXB0b3JQb29sfS48cD4KLSAgICoKLSAgICogVGhpcyBjbGFzcyBpcyBwdWJsaWMgc28gdGhhdCB0
aGUgbWV0aG9kcyBpdCBleHBvc2VzIGNhbiBiZSBjYWxsZWQgZnJvbQotICAgKiBvdXRzaWRlIG9m
IHRoaXMgcGFja2FnZS4gSG93ZXZlciwgaXQgc2hvdWxkIG9ubHkgYmUgc3ViY2xhc3NlZCBmcm9t
Ci0gICAqIG5lc3RlZCBjbGFzc2VzIG9mIERlc2NyaXB0b3JzLgotICAgKi8KLSAgcHVibGljIGFi
c3RyYWN0IHN0YXRpYyBjbGFzcyBHZW5lcmljRGVzY3JpcHRvciB7Ci0gICAgcHVibGljIGFic3Ry
YWN0IE1lc3NhZ2UgdG9Qcm90bygpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFt
ZSgpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0RnVsbE5hbWUoKTsKLSAgICBwdWJs
aWMgYWJzdHJhY3QgRmlsZURlc2NyaXB0b3IgZ2V0RmlsZSgpOwotICB9Ci0KLSAgLyoqCi0gICAq
IFRocm93biB3aGVuIGJ1aWxkaW5nIGRlc2NyaXB0b3JzIGZhaWxzIGJlY2F1c2UgdGhlIHNvdXJj
ZSBEZXNjcmlwdG9yUHJvdG9zCi0gICAqIGFyZSBub3QgdmFsaWQuCi0gICAqLwotICBwdWJsaWMg
c3RhdGljIGNsYXNzIERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0
aW9uIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA1
NzUwMjA1Nzc1NDkwNDgzMTQ4TDsKLQotICAgIC8qKiBHZXRzIHRoZSBmdWxsIG5hbWUgb2YgdGhl
IGRlc2NyaXB0b3Igd2hlcmUgdGhlIGVycm9yIG9jY3VycmVkLiAqLwotICAgIHB1YmxpYyBTdHJp
bmcgZ2V0UHJvYmxlbVN5bWJvbE5hbWUoKSB7IHJldHVybiBuYW1lOyB9Ci0KLSAgICAvKioKLSAg
ICAgKiBHZXRzIHRoZSBwcm90b2NvbCBtZXNzYWdlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnZh
bGlkIGRlc2NyaXB0b3IuCi0gICAgICovCi0gICAgcHVibGljIE1lc3NhZ2UgZ2V0UHJvYmxlbVBy
b3RvKCkgeyByZXR1cm4gcHJvdG87IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgYSBodW1hbi1y
ZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IuCi0gICAgICovCi0gICAgcHVibGljIFN0
cmluZyBnZXREZXNjcmlwdGlvbigpIHsgcmV0dXJuIGRlc2NyaXB0aW9uOyB9Ci0KLSAgICBwcml2
YXRlIGZpbmFsIFN0cmluZyBuYW1lOwotICAgIHByaXZhdGUgZmluYWwgTWVzc2FnZSBwcm90bzsK
LSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbjsKLQotICAgIHByaXZhdGUgRGVz
Y3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24oCi0gICAgICAgIGZpbmFsIEdlbmVyaWNEZXNjcmlw
dG9yIHByb2JsZW1EZXNjcmlwdG9yLAotICAgICAgICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24p
IHsKLSAgICAgIHN1cGVyKHByb2JsZW1EZXNjcmlwdG9yLmdldEZ1bGxOYW1lKCkgKyAiOiAiICsg
ZGVzY3JpcHRpb24pOwotCi0gICAgICAvLyBOb3RlIHRoYXQgcHJvYmxlbURlc2NyaXB0b3IgbWF5
IGJlIHBhcnRpYWxseSB1bmluaXRpYWxpemVkLCBzbyB3ZQotICAgICAgLy8gZG9uJ3Qgd2FudCB0
byBleHBvc2UgaXQgZGlyZWN0bHkgdG8gdGhlIHVzZXIuICBTbywgd2Ugb25seSBwcm92aWRlCi0g
ICAgICAvLyB0aGUgbmFtZSBhbmQgdGhlIG9yaWdpbmFsIHByb3RvLgotICAgICAgbmFtZSA9IHBy
b2JsZW1EZXNjcmlwdG9yLmdldEZ1bGxOYW1lKCk7Ci0gICAgICBwcm90byA9IHByb2JsZW1EZXNj
cmlwdG9yLnRvUHJvdG8oKTsKLSAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsK
LSAgICB9Ci0KLSAgICBwcml2YXRlIERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKAotICAg
ICAgICBmaW5hbCBHZW5lcmljRGVzY3JpcHRvciBwcm9ibGVtRGVzY3JpcHRvciwKLSAgICAgICAg
ZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uLAotICAgICAgICBmaW5hbCBUaHJvd2FibGUgY2F1c2Up
IHsKLSAgICAgIHRoaXMocHJvYmxlbURlc2NyaXB0b3IsIGRlc2NyaXB0aW9uKTsKLSAgICAgIGlu
aXRDYXVzZShjYXVzZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBEZXNjcmlwdG9yVmFsaWRhdGlv
bkV4Y2VwdGlvbigKLSAgICAgICAgZmluYWwgRmlsZURlc2NyaXB0b3IgcHJvYmxlbURlc2NyaXB0
b3IsCi0gICAgICAgIGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgICAgc3VwZXIocHJv
YmxlbURlc2NyaXB0b3IuZ2V0TmFtZSgpICsgIjogIiArIGRlc2NyaXB0aW9uKTsKLQotICAgICAg
Ly8gTm90ZSB0aGF0IHByb2JsZW1EZXNjcmlwdG9yIG1heSBiZSBwYXJ0aWFsbHkgdW5pbml0aWFs
aXplZCwgc28gd2UKLSAgICAgIC8vIGRvbid0IHdhbnQgdG8gZXhwb3NlIGl0IGRpcmVjdGx5IHRv
IHRoZSB1c2VyLiAgU28sIHdlIG9ubHkgcHJvdmlkZQotICAgICAgLy8gdGhlIG5hbWUgYW5kIHRo
ZSBvcmlnaW5hbCBwcm90by4KLSAgICAgIG5hbWUgPSBwcm9ibGVtRGVzY3JpcHRvci5nZXROYW1l
KCk7Ci0gICAgICBwcm90byA9IHByb2JsZW1EZXNjcmlwdG9yLnRvUHJvdG8oKTsKLSAgICAgIHRo
aXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9Ci0gIH0KLQotICAvLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi0gIC8qKgotICAgKiBBIHByaXZhdGUgaGVscGVyIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGxv
b2t1cCB0YWJsZXMgY29udGFpbmluZyBhbGwgdGhlCi0gICAqIGRlc2NyaXB0b3JzIGRlZmluZWQg
aW4gYSBwYXJ0aWN1bGFyIGZpbGUuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFz
cyBEZXNjcmlwdG9yUG9vbCB7Ci0KLSAgICAvKiogRGVmaW5lcyB3aGF0IHN1YmNsYXNzIG9mIGRl
c2NyaXB0b3JzIHRvIHNlYXJjaCBpbiB0aGUgZGVzY3JpcHRvciBwb29sLgotICAgICAqLwotICAg
IGVudW0gU2VhcmNoRmlsdGVyIHsKLSAgICAgIFRZUEVTX09OTFksIEFHR1JFR0FURVNfT05MWSwg
QUxMX1NZTUJPTFMKLSAgICB9Ci0KLSAgICBEZXNjcmlwdG9yUG9vbChmaW5hbCBGaWxlRGVzY3Jp
cHRvcltdIGRlcGVuZGVuY2llcywKLSAgICAgICAgYm9vbGVhbiBhbGxvd1Vua25vd25EZXBlbmRl
bmNpZXMpIHsKLSAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IEhhc2hTZXQ8RmlsZURlc2Ny
aXB0b3I+KCk7Ci0gICAgICB0aGlzLmFsbG93VW5rbm93bkRlcGVuZGVuY2llcyA9IGFsbG93VW5r
bm93bkRlcGVuZGVuY2llczsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXBlbmRlbmNp
ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVu
Y2llc1tpXSk7Ci0gICAgICAgIGltcG9ydFB1YmxpY0RlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXNb
aV0pOwotICAgICAgfQotCi0gICAgICBmb3IgKGZpbmFsIEZpbGVEZXNjcmlwdG9yIGRlcGVuZGVu
Y3kgOiB0aGlzLmRlcGVuZGVuY2llcykgewotICAgICAgICB0cnkgewotICAgICAgICAgIGFkZFBh
Y2thZ2UoZGVwZW5kZW5jeS5nZXRQYWNrYWdlKCksIGRlcGVuZGVuY3kpOwotICAgICAgICB9IGNh
dGNoIChEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgLy8gQ2Fu
J3QgaGFwcGVuLCBiZWNhdXNlIGFkZFBhY2thZ2UoKSBvbmx5IGZhaWxzIHdoZW4gdGhlIG5hbWUK
LSAgICAgICAgICAvLyBjb25mbGljdHMgd2l0aCBhIG5vbi1wYWNrYWdlLCBidXQgd2UgaGF2ZSBu
b3QgeWV0IGFkZGVkIGFueQotICAgICAgICAgIC8vIG5vbi1wYWNrYWdlcyBhdCB0aGlzIHBvaW50
LgotICAgICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQot
ICAgIC8qKiBGaW5kIGFuZCBwdXQgcHVibGljIGRlcGVuZGVuY2llcyBvZiB0aGUgZmlsZSBpbnRv
IGRlcGVuZGVuY2llcyBzZXQuKi8KLSAgICBwcml2YXRlIHZvaWQgaW1wb3J0UHVibGljRGVwZW5k
ZW5jaWVzKGZpbmFsIEZpbGVEZXNjcmlwdG9yIGZpbGUpIHsKLSAgICAgIGZvciAoRmlsZURlc2Ny
aXB0b3IgZGVwZW5kZW5jeSA6IGZpbGUuZ2V0UHVibGljRGVwZW5kZW5jaWVzKCkpIHsKLSAgICAg
ICAgaWYgKGRlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jeSkpIHsKLSAgICAgICAgICBpbXBvcnRQ
dWJsaWNEZXBlbmRlbmNpZXMoZGVwZW5kZW5jeSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBwcml2YXRlIGZpbmFsIFNldDxGaWxlRGVzY3JpcHRvcj4gZGVwZW5kZW5jaWVzOwot
ICAgIHByaXZhdGUgYm9vbGVhbiBhbGxvd1Vua25vd25EZXBlbmRlbmNpZXM7Ci0KLSAgICBwcml2
YXRlIGZpbmFsIE1hcDxTdHJpbmcsIEdlbmVyaWNEZXNjcmlwdG9yPiBkZXNjcmlwdG9yc0J5TmFt
ZSA9Ci0gICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIEdlbmVyaWNEZXNjcmlwdG9yPigpOwotICAg
IHByaXZhdGUgZmluYWwgTWFwPERlc2NyaXB0b3JJbnRQYWlyLCBGaWVsZERlc2NyaXB0b3I+IGZp
ZWxkc0J5TnVtYmVyID0KLSAgICAgIG5ldyBIYXNoTWFwPERlc2NyaXB0b3JJbnRQYWlyLCBGaWVs
ZERlc2NyaXB0b3I+KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNYXA8RGVzY3JpcHRvckludFBhaXIs
IEVudW1WYWx1ZURlc2NyaXB0b3I+IGVudW1WYWx1ZXNCeU51bWJlcgotICAgICAgICA9IG5ldyBI
YXNoTWFwPERlc2NyaXB0b3JJbnRQYWlyLCBFbnVtVmFsdWVEZXNjcmlwdG9yPigpOwotCi0gICAg
LyoqIEZpbmQgYSBnZW5lcmljIGRlc2NyaXB0b3IgYnkgZnVsbHktcXVhbGlmaWVkIG5hbWUuICov
Ci0gICAgR2VuZXJpY0Rlc2NyaXB0b3IgZmluZFN5bWJvbChmaW5hbCBTdHJpbmcgZnVsbE5hbWUp
IHsKLSAgICAgIHJldHVybiBmaW5kU3ltYm9sKGZ1bGxOYW1lLCBTZWFyY2hGaWx0ZXIuQUxMX1NZ
TUJPTFMpOwotICAgIH0KLQotICAgIC8qKiBGaW5kIGEgZGVzY3JpcHRvciBieSBmdWxseS1xdWFs
aWZpZWQgbmFtZSBhbmQgZ2l2ZW4gb3B0aW9uIHRvIG9ubHkKLSAgICAgKiBzZWFyY2ggdmFsaWQg
ZmllbGQgdHlwZSBkZXNjcmlwdG9ycy4KLSAgICAgKi8KLSAgICBHZW5lcmljRGVzY3JpcHRvciBm
aW5kU3ltYm9sKGZpbmFsIFN0cmluZyBmdWxsTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbmFsIFNlYXJjaEZpbHRlciBmaWx0ZXIpIHsKLSAgICAgIEdlbmVyaWNEZXNj
cmlwdG9yIHJlc3VsdCA9IGRlc2NyaXB0b3JzQnlOYW1lLmdldChmdWxsTmFtZSk7Ci0gICAgICBp
ZiAocmVzdWx0ICE9IG51bGwpIHsKLSAgICAgICAgaWYgKChmaWx0ZXI9PVNlYXJjaEZpbHRlci5B
TExfU1lNQk9MUykgfHwKLSAgICAgICAgICAgICgoZmlsdGVyPT1TZWFyY2hGaWx0ZXIuVFlQRVNf
T05MWSkgJiYgaXNUeXBlKHJlc3VsdCkpIHx8Ci0gICAgICAgICAgICAoKGZpbHRlcj09U2VhcmNo
RmlsdGVyLkFHR1JFR0FURVNfT05MWSkgJiYgaXNBZ2dyZWdhdGUocmVzdWx0KSkpIHsKLSAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoZmlu
YWwgRmlsZURlc2NyaXB0b3IgZGVwZW5kZW5jeSA6IGRlcGVuZGVuY2llcykgewotICAgICAgICBy
ZXN1bHQgPSBkZXBlbmRlbmN5LnBvb2wuZGVzY3JpcHRvcnNCeU5hbWUuZ2V0KGZ1bGxOYW1lKTsK
LSAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgICAgaWYgKChmaWx0ZXI9PVNl
YXJjaEZpbHRlci5BTExfU1lNQk9MUykgfHwKLSAgICAgICAgICAgICAgKChmaWx0ZXI9PVNlYXJj
aEZpbHRlci5UWVBFU19PTkxZKSAmJiBpc1R5cGUocmVzdWx0KSkgfHwKLSAgICAgICAgICAgICAg
KChmaWx0ZXI9PVNlYXJjaEZpbHRlci5BR0dSRUdBVEVTX09OTFkpICYmIGlzQWdncmVnYXRlKHJl
c3VsdCkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKiogQ2hl
Y2tzIGlmIHRoZSBkZXNjcmlwdG9yIGlzIGEgdmFsaWQgdHlwZSBmb3IgYSBtZXNzYWdlIGZpZWxk
LiAqLwotICAgIGJvb2xlYW4gaXNUeXBlKEdlbmVyaWNEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsK
LSAgICAgIHJldHVybiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIERlc2NyaXB0b3IpIHx8Ci0gICAg
ICAgIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRW51bURlc2NyaXB0b3IpOwotICAgIH0KLQotICAg
IC8qKiBDaGVja3MgaWYgdGhlIGRlc2NyaXB0b3IgaXMgYSB2YWxpZCBuYW1lc3BhY2UgdHlwZS4g
Ki8KLSAgICBib29sZWFuIGlzQWdncmVnYXRlKEdlbmVyaWNEZXNjcmlwdG9yIGRlc2NyaXB0b3Ip
IHsKLSAgICAgIHJldHVybiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIERlc2NyaXB0b3IpIHx8Ci0g
ICAgICAgIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRW51bURlc2NyaXB0b3IpIHx8Ci0gICAgICAg
IChkZXNjcmlwdG9yIGluc3RhbmNlb2YgUGFja2FnZURlc2NyaXB0b3IpIHx8Ci0gICAgICAgIChk
ZXNjcmlwdG9yIGluc3RhbmNlb2YgU2VydmljZURlc2NyaXB0b3IpOwotICAgIH0KLQotICAgIC8q
KgotICAgICAqIExvb2sgdXAgYSB0eXBlIGRlc2NyaXB0b3IgYnkgbmFtZSwgcmVsYXRpdmUgdG8g
c29tZSBvdGhlciBkZXNjcmlwdG9yLgotICAgICAqIFRoZSBuYW1lIG1heSBiZSBmdWxseS1xdWFs
aWZpZWQgKHdpdGggYSBsZWFkaW5nICcuJyksCi0gICAgICogcGFydGlhbGx5LXF1YWxpZmllZCwg
b3IgdW5xdWFsaWZpZWQuICBDKystbGlrZSBuYW1lIGxvb2t1cCBzZW1hbnRpY3MKLSAgICAgKiBh
cmUgdXNlZCB0byBzZWFyY2ggZm9yIHRoZSBtYXRjaGluZyBkZXNjcmlwdG9yLgotICAgICAqLwot
ICAgIEdlbmVyaWNEZXNjcmlwdG9yIGxvb2t1cFN5bWJvbChmaW5hbCBTdHJpbmcgbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgR2VuZXJpY0Rlc2NyaXB0b3Ig
cmVsYXRpdmVUbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRGVz
Y3JpcHRvclBvb2wuU2VhcmNoRmlsdGVyIGZpbHRlcikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvd3MgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24gewotICAgICAgLy8gVE9E
TyhrZW50b24pOiAgVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgaW4gYSBudW1iZXIgb2Ygd2F5cy4K
LQotICAgICAgR2VuZXJpY0Rlc2NyaXB0b3IgcmVzdWx0OwotICAgICAgU3RyaW5nIGZ1bGxuYW1l
OwotICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiLiIpKSB7Ci0gICAgICAgIC8vIEZ1bGx5LXF1
YWxpZmllZCBuYW1lLgotICAgICAgICBmdWxsbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDEpOwotICAg
ICAgICByZXN1bHQgPSBmaW5kU3ltYm9sKGZ1bGxuYW1lLCBmaWx0ZXIpOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gSWYgIm5hbWUiIGlzIGEgY29tcG91bmQgaWRlbnRpZmllciwgd2Ugd2Fu
dCB0byBzZWFyY2ggZm9yIHRoZQotICAgICAgICAvLyBmaXJzdCBjb21wb25lbnQgb2YgaXQsIHRo
ZW4gc2VhcmNoIHdpdGhpbiBpdCBmb3IgdGhlIHJlc3QuCi0gICAgICAgIC8vIElmIG5hbWUgaXMg
c29tZXRoaW5nIGxpa2UgIkZvby5CYXIuYmF6IiwgYW5kIHN5bWJvbHMgbmFtZWQgIkZvbyIgYXJl
Ci0gICAgICAgIC8vIGRlZmluZWQgaW4gbXVsdGlwbGUgcGFyZW50IHNjb3Blcywgd2Ugb25seSB3
YW50IHRvIGZpbmQgIkJhci5iYXoiIGluCi0gICAgICAgIC8vIHRoZSBpbm5lcm1vc3Qgb25lLiAg
RS5nLiwgdGhlIGZvbGxvd2luZyBzaG91bGQgcHJvZHVjZSBhbiBlcnJvcjoKLSAgICAgICAgLy8g
ICBtZXNzYWdlIEJhciB7IG1lc3NhZ2UgQmF6IHt9IH0KLSAgICAgICAgLy8gICBtZXNzYWdlIEZv
byB7Ci0gICAgICAgIC8vICAgICBtZXNzYWdlIEJhciB7Ci0gICAgICAgIC8vICAgICB9Ci0gICAg
ICAgIC8vICAgICBvcHRpb25hbCBCYXIuQmF6IGJheiA9IDE7Ci0gICAgICAgIC8vICAgfQotICAg
ICAgICAvLyBTbywgd2UgbG9vayBmb3IganVzdCAiRm9vIiBmaXJzdCwgdGhlbiBsb29rIGZvciAi
QmFyLmJheiIgd2l0aGluIGl0Ci0gICAgICAgIC8vIGlmIGZvdW5kLgotICAgICAgICBmaW5hbCBp
bnQgZmlyc3RQYXJ0TGVuZ3RoID0gbmFtZS5pbmRleE9mKCcuJyk7Ci0gICAgICAgIGZpbmFsIFN0
cmluZyBmaXJzdFBhcnQ7Ci0gICAgICAgIGlmIChmaXJzdFBhcnRMZW5ndGggPT0gLTEpIHsKLSAg
ICAgICAgICBmaXJzdFBhcnQgPSBuYW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZp
cnN0UGFydCA9IG5hbWUuc3Vic3RyaW5nKDAsIGZpcnN0UGFydExlbmd0aCk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBXZSB3aWxsIHNlYXJjaCBlYWNoIHBhcmVudCBzY29wZSBvZiAicmVsYXRp
dmVUbyIgbG9va2luZyBmb3IgdGhlCi0gICAgICAgIC8vIHN5bWJvbC4KLSAgICAgICAgZmluYWwg
U3RyaW5nQnVpbGRlciBzY29wZVRvVHJ5ID0KLSAgICAgICAgICAgIG5ldyBTdHJpbmdCdWlsZGVy
KHJlbGF0aXZlVG8uZ2V0RnVsbE5hbWUoKSk7Ci0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgICAvLyBDaG9wIG9mZiB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHNjb3BlLgotICAg
ICAgICAgIGZpbmFsIGludCBkb3Rwb3MgPSBzY29wZVRvVHJ5Lmxhc3RJbmRleE9mKCIuIik7Ci0g
ICAgICAgICAgaWYgKGRvdHBvcyA9PSAtMSkgewotICAgICAgICAgICAgZnVsbG5hbWUgPSBuYW1l
OwotICAgICAgICAgICAgcmVzdWx0ID0gZmluZFN5bWJvbChuYW1lLCBmaWx0ZXIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNjb3BlVG9Ucnku
c2V0TGVuZ3RoKGRvdHBvcyArIDEpOwotCi0gICAgICAgICAgICAvLyBBcHBlbmQgZmlyc3RQYXJ0
IGFuZCB0cnkgdG8gZmluZAotICAgICAgICAgICAgc2NvcGVUb1RyeS5hcHBlbmQoZmlyc3RQYXJ0
KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRTeW1ib2woc2NvcGVUb1RyeS50b1N0cmluZygp
LAotICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sLlNlYXJjaEZpbHRlci5BR0dSRUdBVEVT
X09OTFkpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKLSAgICAgICAgICAg
ICAgaWYgKGZpcnN0UGFydExlbmd0aCAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIFdlIG9u
bHkgZm91bmQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN5bWJvbC4gIE5vdyBsb29rIGZvcgotICAg
ICAgICAgICAgICAgIC8vIHRoZSB3aG9sZSB0aGluZy4gIElmIHRoaXMgZmFpbHMsIHdlICpkb24n
dCogd2FudCB0byBrZWVwCi0gICAgICAgICAgICAgICAgLy8gc2VhcmNoaW5nIHBhcmVudCBzY29w
ZXMuCi0gICAgICAgICAgICAgICAgc2NvcGVUb1RyeS5zZXRMZW5ndGgoZG90cG9zICsgMSk7Ci0g
ICAgICAgICAgICAgICAgc2NvcGVUb1RyeS5hcHBlbmQobmFtZSk7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gZmluZFN5bWJvbChzY29wZVRvVHJ5LnRvU3RyaW5nKCksIGZpbHRlcik7Ci0gICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZnVsbG5hbWUgPSBzY29wZVRvVHJ5LnRvU3RyaW5n
KCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBOb3QgZm91bmQuICBSZW1vdmUgdGhlIG5hbWUgc28gd2UgY2FuIHRyeSBhZ2Fpbi4KLSAgICAg
ICAgICAgIHNjb3BlVG9Ucnkuc2V0TGVuZ3RoKGRvdHBvcyk7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewotICAgICAgICBpZiAo
YWxsb3dVbmtub3duRGVwZW5kZW5jaWVzICYmIGZpbHRlciA9PSBTZWFyY2hGaWx0ZXIuVFlQRVNf
T05MWSkgewotICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJUaGUgZGVzY3JpcHRvciBmb3IgbWVz
c2FnZSB0eXBlIFwiIiArIG5hbWUgKwotICAgICAgICAgICAgICAiXCIgY2FuIG5vdCBiZSBmb3Vu
ZCBhbmQgYSBwbGFjZWhvbGRlciBpcyBjcmVhdGVkIGZvciBpdCIpOwotICAgICAgICAgIC8vIFdl
IGNyZWF0ZSBhIGR1bW15IG1lc3NhZ2UgZGVzY3JpcHRvciBoZXJlIHJlZ2FyZGxlc3Mgb2YgdGhl
Ci0gICAgICAgICAgLy8gZXhwZWN0ZWQgdHlwZS4gSWYgdGhlIHR5cGUgc2hvdWxkIGJlIG1lc3Nh
Z2UsIHRoaXMgZHVtbXkKLSAgICAgICAgICAvLyBkZXNjcmlwdG9yIHdpbGwgd29yayB3ZWxsIGFu
ZCBpZiB0aGUgdHlwZSBzaG91bGQgYmUgZW51bSwgYQotICAgICAgICAgIC8vIERlc2NyaXB0b3JW
YWxpZGF0aW9uRXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGxhdHRlci4gSW4gZWl0aGVyCi0gICAg
ICAgICAgLy8gY2FzZSwgdGhlIGNvZGUgd29ya3MgYXMgZXhwZWN0ZWQ6IHdlIGFsbG93IHVua25v
d24gbWVzc2FnZSB0eXBlcwotICAgICAgICAgIC8vIGJ1dCBub3QgdW5rbndvbiBlbnVtIHR5cGVz
LgotICAgICAgICAgIHJlc3VsdCA9IG5ldyBEZXNjcmlwdG9yKGZ1bGxuYW1lKTsKLSAgICAgICAg
ICAvLyBBZGQgdGhlIHBsYWNlaG9sZGVyIGZpbGUgYXMgYSBkZXBlbmRlbmN5IHNvIHdlIGNhbiBm
aW5kIHRoZQotICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIHN5bWJvbCB3aGVuIHJlc29sdmluZyBv
dGhlciByZWZlcmVuY2VzLgotICAgICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzLmFkZChyZXN1bHQu
Z2V0RmlsZSgpKTsKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIHRocm93IG5ldyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbihyZWxhdGl2
ZVRvLAotICAgICAgICAgICAgICAnXCInICsgbmFtZSArICJcIiBpcyBub3QgZGVmaW5lZC4iKTsK
LSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIGEgc3ltYm9sIHRvIHRoZSBzeW1ib2wg
dGFibGUuICBJZiBhIHN5bWJvbCB3aXRoIHRoZSBzYW1lIG5hbWUKLSAgICAgKiBhbHJlYWR5IGV4
aXN0cywgdGhyb3dzIGFuIGVycm9yLgotICAgICAqLwotICAgIHZvaWQgYWRkU3ltYm9sKGZpbmFs
IEdlbmVyaWNEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCi0gICAgICAgICAgICB0aHJvd3MgRGVzY3Jp
cHRvclZhbGlkYXRpb25FeGNlcHRpb24gewotICAgICAgdmFsaWRhdGVTeW1ib2xOYW1lKGRlc2Ny
aXB0b3IpOwotCi0gICAgICBmaW5hbCBTdHJpbmcgZnVsbE5hbWUgPSBkZXNjcmlwdG9yLmdldEZ1
bGxOYW1lKCk7Ci0gICAgICBmaW5hbCBpbnQgZG90cG9zID0gZnVsbE5hbWUubGFzdEluZGV4T2Yo
Jy4nKTsKLQotICAgICAgZmluYWwgR2VuZXJpY0Rlc2NyaXB0b3Igb2xkID0gZGVzY3JpcHRvcnNC
eU5hbWUucHV0KGZ1bGxOYW1lLCBkZXNjcmlwdG9yKTsKLSAgICAgIGlmIChvbGQgIT0gbnVsbCkg
ewotICAgICAgICBkZXNjcmlwdG9yc0J5TmFtZS5wdXQoZnVsbE5hbWUsIG9sZCk7Ci0KLSAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuZ2V0RmlsZSgpID09IG9sZC5nZXRGaWxlKCkpIHsKLSAgICAgICAg
ICBpZiAoZG90cG9zID09IC0xKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclZh
bGlkYXRpb25FeGNlcHRpb24oZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAnXCInICsgZnVs
bE5hbWUgKyAiXCIgaXMgYWxyZWFkeSBkZWZpbmVkLiIpOwotICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24oZGVzY3Jp
cHRvciwKLSAgICAgICAgICAgICAgICAnXCInICsgZnVsbE5hbWUuc3Vic3RyaW5nKGRvdHBvcyAr
IDEpICsKLSAgICAgICAgICAgICAgIlwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBcIiIgKwotICAg
ICAgICAgICAgICBmdWxsTmFtZS5zdWJzdHJpbmcoMCwgZG90cG9zKSArICJcIi4iKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JW
YWxpZGF0aW9uRXhjZXB0aW9uKGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICdcIicgKyBmdWxs
TmFtZSArICJcIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZmlsZSBcIiIgKwotICAgICAgICAgICAg
b2xkLmdldEZpbGUoKS5nZXROYW1lKCkgKyAiXCIuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXByZXNlbnRzIGEgcGFja2FnZSBpbiB0aGUgc3ltYm9s
IHRhYmxlLiAgV2UgdXNlIFBhY2thZ2VEZXNjcmlwdG9ycwotICAgICAqIGp1c3QgYXMgcGxhY2Vo
b2xkZXJzIHNvIHRoYXQgc29tZW9uZSBjYW5ub3QgZGVmaW5lLCBzYXksIGEgbWVzc2FnZSB0eXBl
Ci0gICAgICogdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBwYWNrYWdlLgot
ICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFBhY2thZ2VEZXNjcmlwdG9y
IGV4dGVuZHMgR2VuZXJpY0Rlc2NyaXB0b3IgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgTWVzc2FnZSB0b1Byb3RvKCkgewotICAgICAgICByZXR1cm4gZmlsZS50b1Byb3RvKCk7Ci0g
ICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsK
LSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyBTdHJpbmcgZ2V0RnVsbE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBmdWxsTmFtZTsKLSAg
ICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIEZpbGVEZXNjcmlwdG9yIGdldEZp
bGUoKSB7Ci0gICAgICAgIHJldHVybiBmaWxlOwotICAgICAgfQotCi0gICAgICBQYWNrYWdlRGVz
Y3JpcHRvcihmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgU3RyaW5nIGZ1bGxOYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgZmluYWwgRmlsZURlc2NyaXB0b3IgZmlsZSkgewotICAgICAgICB0
aGlzLmZpbGUgPSBmaWxlOwotICAgICAgICB0aGlzLmZ1bGxOYW1lID0gZnVsbE5hbWU7Ci0gICAg
ICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICB9Ci0KLSAgICAgIHByaXZhdGUgZmluYWwgU3Ry
aW5nIG5hbWU7Ci0gICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBmdWxsTmFtZTsKLSAgICAgIHBy
aXZhdGUgZmluYWwgRmlsZURlc2NyaXB0b3IgZmlsZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBBZGRzIGEgcGFja2FnZSB0byB0aGUgc3ltYm9sIHRhYmxlcy4gIElmIGEgcGFja2FnZSBieSB0
aGUgc2FtZSBuYW1lCi0gICAgICogYWxyZWFkeSBleGlzdHMsIHRoYXQgaXMgZmluZSwgYnV0IGlm
IHNvbWUgb3RoZXIga2luZCBvZiBzeW1ib2wgZXhpc3RzCi0gICAgICogdW5kZXIgdGhlIHNhbWUg
bmFtZSwgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4gIElmIHRoZSBwYWNrYWdlIGhhcwotICAgICAq
IG11bHRpcGxlIGNvbXBvbmVudHMsIHRoaXMgYWxzbyBhZGRzIHRoZSBwYXJlbnQgcGFja2FnZShz
KS4KLSAgICAgKi8KLSAgICB2b2lkIGFkZFBhY2thZ2UoZmluYWwgU3RyaW5nIGZ1bGxOYW1lLCBm
aW5hbCBGaWxlRGVzY3JpcHRvciBmaWxlKQotICAgICAgICAgICAgIHRocm93cyBEZXNjcmlwdG9y
VmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICBmaW5hbCBpbnQgZG90cG9zID0gZnVsbE5hbWUu
bGFzdEluZGV4T2YoJy4nKTsKLSAgICAgIGZpbmFsIFN0cmluZyBuYW1lOwotICAgICAgaWYgKGRv
dHBvcyA9PSAtMSkgewotICAgICAgICBuYW1lID0gZnVsbE5hbWU7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICBhZGRQYWNrYWdlKGZ1bGxOYW1lLnN1YnN0cmluZygwLCBkb3Rwb3MpLCBmaWxlKTsK
LSAgICAgICAgbmFtZSA9IGZ1bGxOYW1lLnN1YnN0cmluZyhkb3Rwb3MgKyAxKTsKLSAgICAgIH0K
LQotICAgICAgZmluYWwgR2VuZXJpY0Rlc2NyaXB0b3Igb2xkID0KLSAgICAgICAgZGVzY3JpcHRv
cnNCeU5hbWUucHV0KGZ1bGxOYW1lLAotICAgICAgICAgIG5ldyBQYWNrYWdlRGVzY3JpcHRvcihu
YW1lLCBmdWxsTmFtZSwgZmlsZSkpOwotICAgICAgaWYgKG9sZCAhPSBudWxsKSB7Ci0gICAgICAg
IGRlc2NyaXB0b3JzQnlOYW1lLnB1dChmdWxsTmFtZSwgb2xkKTsKLSAgICAgICAgaWYgKCEob2xk
IGluc3RhbmNlb2YgUGFja2FnZURlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IERl
c2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKGZpbGUsCi0gICAgICAgICAgICAgICdcIicgKyBu
YW1lICsgIlwiIGlzIGFscmVhZHkgZGVmaW5lZCAoYXMgc29tZXRoaW5nIG90aGVyIHRoYW4gYSAi
Ci0gICAgICAgICAgICAgICsgInBhY2thZ2UpIGluIGZpbGUgXCIiICsgb2xkLmdldEZpbGUoKS5n
ZXROYW1lKCkgKyAiXCIuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiog
QSAoR2VuZXJpY0Rlc2NyaXB0b3IsIGludCkgcGFpciwgdXNlZCBhcyBhIG1hcCBrZXkuICovCi0g
ICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgRGVzY3JpcHRvckludFBhaXIgewotICAgICAg
cHJpdmF0ZSBmaW5hbCBHZW5lcmljRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgcHJpdmF0
ZSBmaW5hbCBpbnQgbnVtYmVyOwotCi0gICAgICBEZXNjcmlwdG9ySW50UGFpcihmaW5hbCBHZW5l
cmljRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBmaW5hbCBpbnQgbnVtYmVyKSB7Ci0gICAgICAgIHRo
aXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gICAgICAgIHRoaXMubnVtYmVyID0gbnVtYmVy
OwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUo
KSB7Ci0gICAgICAgIHJldHVybiBkZXNjcmlwdG9yLmhhc2hDb2RlKCkgKiAoKDEgPDwgMTYpIC0g
MSkgKyBudW1iZXI7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29s
ZWFuIGVxdWFscyhmaW5hbCBPYmplY3Qgb2JqKSB7Ci0gICAgICAgIGlmICghKG9iaiBpbnN0YW5j
ZW9mIERlc2NyaXB0b3JJbnRQYWlyKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBmaW5hbCBEZXNjcmlwdG9ySW50UGFpciBvdGhlciA9IChEZXNjcmlwdG9y
SW50UGFpcilvYmo7Ci0gICAgICAgIHJldHVybiBkZXNjcmlwdG9yID09IG90aGVyLmRlc2NyaXB0
b3IgJiYgbnVtYmVyID09IG90aGVyLm51bWJlcjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBBZGRzIGEgZmllbGQgdG8gdGhlIGZpZWxkc0J5TnVtYmVyIHRhYmxlLiAgVGhyb3dz
IGFuIGV4Y2VwdGlvbiBpZiBhCi0gICAgICogZmllbGQgd2l0aCB0aGUgc2FtZSBjb250YWluaW5n
IHR5cGUgYW5kIG51bWJlciBhbHJlYWR5IGV4aXN0cy4KLSAgICAgKi8KLSAgICB2b2lkIGFkZEZp
ZWxkQnlOdW1iZXIoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkKQotICAgICAgICAgICAgICAg
ICAgIHRocm93cyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICBmaW5hbCBE
ZXNjcmlwdG9ySW50UGFpciBrZXkgPQotICAgICAgICBuZXcgRGVzY3JpcHRvckludFBhaXIoZmll
bGQuZ2V0Q29udGFpbmluZ1R5cGUoKSwgZmllbGQuZ2V0TnVtYmVyKCkpOwotICAgICAgZmluYWwg
RmllbGREZXNjcmlwdG9yIG9sZCA9IGZpZWxkc0J5TnVtYmVyLnB1dChrZXksIGZpZWxkKTsKLSAg
ICAgIGlmIChvbGQgIT0gbnVsbCkgewotICAgICAgICBmaWVsZHNCeU51bWJlci5wdXQoa2V5LCBv
bGQpOwotICAgICAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24oZmll
bGQsCi0gICAgICAgICAgIkZpZWxkIG51bWJlciAiICsgZmllbGQuZ2V0TnVtYmVyKCkgKwotICAg
ICAgICAgICIgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluIFwiIiArCi0gICAgICAgICAgZmllbGQu
Z2V0Q29udGFpbmluZ1R5cGUoKS5nZXRGdWxsTmFtZSgpICsKLSAgICAgICAgICAiXCIgYnkgZmll
bGQgXCIiICsgb2xkLmdldE5hbWUoKSArICJcIi4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgKiBBZGRzIGFuIGVudW0gdmFsdWUgdG8gdGhlIGVudW1WYWx1ZXNCeU51bWJlciB0
YWJsZS4gIElmIGFuIGVudW0gdmFsdWUKLSAgICAgKiB3aXRoIHRoZSBzYW1lIHR5cGUgYW5kIG51
bWJlciBhbHJlYWR5IGV4aXN0cywgZG9lcyBub3RoaW5nLiAgKFRoaXMgaXMKLSAgICAgKiBhbGxv
d2VkOyB0aGUgZmlyc3QgdmFsdWUgZGVmaW5lIHdpdGggdGhlIG51bWJlciB0YWtlcyBwcmVjZWRl
bmNlLikKLSAgICAgKi8KLSAgICB2b2lkIGFkZEVudW1WYWx1ZUJ5TnVtYmVyKGZpbmFsIEVudW1W
YWx1ZURlc2NyaXB0b3IgdmFsdWUpIHsKLSAgICAgIGZpbmFsIERlc2NyaXB0b3JJbnRQYWlyIGtl
eSA9Ci0gICAgICAgIG5ldyBEZXNjcmlwdG9ySW50UGFpcih2YWx1ZS5nZXRUeXBlKCksIHZhbHVl
LmdldE51bWJlcigpKTsKLSAgICAgIGZpbmFsIEVudW1WYWx1ZURlc2NyaXB0b3Igb2xkID0gZW51
bVZhbHVlc0J5TnVtYmVyLnB1dChrZXksIHZhbHVlKTsKLSAgICAgIGlmIChvbGQgIT0gbnVsbCkg
ewotICAgICAgICBlbnVtVmFsdWVzQnlOdW1iZXIucHV0KGtleSwgb2xkKTsKLSAgICAgICAgLy8g
Tm90IGFuIGVycm9yOiAgTXVsdGlwbGUgZW51bSB2YWx1ZXMgbWF5IGhhdmUgdGhlIHNhbWUgbnVt
YmVyLCBidXQKLSAgICAgICAgLy8gd2Ugb25seSB3YW50IHRoZSBmaXJzdCBvbmUgaW4gdGhlIG1h
cC4KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBWZXJpZmllcyB0aGF0IHRoZSBk
ZXNjcmlwdG9yJ3MgbmFtZSBpcyB2YWxpZCAoaS5lLiBpdCBjb250YWlucyBvbmx5Ci0gICAgICog
bGV0dGVycywgZGlnaXRzLCBhbmQgdW5kZXJzY29yZXMsIGFuZCBkb2VzIG5vdCBzdGFydCB3aXRo
IGEgZGlnaXQpLgotICAgICAqLwotICAgIHN0YXRpYyB2b2lkIHZhbGlkYXRlU3ltYm9sTmFtZShm
aW5hbCBHZW5lcmljRGVzY3JpcHRvciBkZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvd3MgRGVzY3JpcHRvclZhbGlkYXRpb25FeGNlcHRpb24gewotICAg
ICAgZmluYWwgU3RyaW5nIG5hbWUgPSBkZXNjcmlwdG9yLmdldE5hbWUoKTsKLSAgICAgIGlmIChu
YW1lLmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IERlc2NyaXB0b3JWYWxpZGF0
aW9uRXhjZXB0aW9uKGRlc2NyaXB0b3IsICJNaXNzaW5nIG5hbWUuIik7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuYW1lLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICBmaW5hbCBjaGFyIGMgPSBuYW1l
LmNoYXJBdChpKTsKLSAgICAgICAgICAvLyBOb24tQVNDSUkgY2hhcmFjdGVycyBhcmUgbm90IHZh
bGlkIGluIHByb3RvYnVmIGlkZW50aWZpZXJzLCBldmVuCi0gICAgICAgICAgLy8gaWYgdGhleSBh
cmUgbGV0dGVycyBvciBkaWdpdHMuCi0gICAgICAgICAgaWYgKGMgPj0gMTI4KSB7Ci0gICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBGaXJzdCBjaGFy
YWN0ZXIgbXVzdCBiZSBsZXR0ZXIgb3IgXy4gIFN1YnNlcXVlbnQgY2hhcmFjdGVycyBtYXkKLSAg
ICAgICAgICAvLyBiZSBsZXR0ZXJzLCBudW1iZXJzLCBvciBkaWdpdHMuCi0gICAgICAgICAgaWYg
KENoYXJhY3Rlci5pc0xldHRlcihjKSB8fCBjID09ICdfJyB8fAotICAgICAgICAgICAgICAoQ2hh
cmFjdGVyLmlzRGlnaXQoYykgJiYgaSA+IDApKSB7Ci0gICAgICAgICAgICAvLyBWYWxpZAotICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoIXZhbGlkKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IERl
c2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uKGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICdc
IicgKyBuYW1lICsgIlwiIGlzIG5vdCBhIHZhbGlkIGlkZW50aWZpZXIuIik7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiogRGVzY3JpYmVzIGFuIG9uZW9mIG9mIGEgbWVz
c2FnZSB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIE9uZW9mRGVzY3JpcHRv
ciB7Ci0gICAgLyoqIEdldCB0aGUgaW5kZXggb2YgdGhpcyBkZXNjcmlwdG9yIHdpdGhpbiBpdHMg
cGFyZW50LiAqLwotICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXgoKSB7IHJldHVybiBpbmRleDsgfQot
Ci0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeyByZXR1cm4gcHJvdG8uZ2V0TmFtZSgpOyB9
Ci0KLSAgICBwdWJsaWMgRmlsZURlc2NyaXB0b3IgZ2V0RmlsZSgpIHsgcmV0dXJuIGZpbGU7IH0K
LQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RnVsbE5hbWUoKSB7IHJldHVybiBmdWxsTmFtZTsgfQot
Ci0gICAgcHVibGljIERlc2NyaXB0b3IgZ2V0Q29udGFpbmluZ1R5cGUoKSB7IHJldHVybiBjb250
YWluaW5nVHlwZTsgfQotCi0gICAgcHVibGljIGludCBnZXRGaWVsZENvdW50KCkgeyByZXR1cm4g
ZmllbGRDb3VudDsgfQotCi0gICAgLyoqIEdldCBhIGxpc3Qgb2YgdGhpcyBtZXNzYWdlIHR5cGUn
cyBmaWVsZHMuICovCi0gICAgcHVibGljIExpc3Q8RmllbGREZXNjcmlwdG9yPiBnZXRGaWVsZHMo
KSB7Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNM
aXN0KGZpZWxkcykpOwotICAgIH0KLQotICAgIHB1YmxpYyBGaWVsZERlc2NyaXB0b3IgZ2V0Rmll
bGQoaW50IGluZGV4KSB7Ci0gICAgICByZXR1cm4gZmllbGRzW2luZGV4XTsKLSAgICB9Ci0KLSAg
ICBwcml2YXRlIE9uZW9mRGVzY3JpcHRvcihmaW5hbCBPbmVvZkRlc2NyaXB0b3JQcm90byBwcm90
bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGaWxlRGVzY3JpcHRvciBmaWxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIERlc2NyaXB0b3IgcGFyZW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCkKLSAgICAgICAgICAg
ICAgICAgICAgIHRocm93cyBEZXNjcmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICB0
aGlzLnByb3RvID0gcHJvdG87Ci0gICAgICBmdWxsTmFtZSA9IGNvbXB1dGVGdWxsTmFtZShmaWxl
LCBwYXJlbnQsIHByb3RvLmdldE5hbWUoKSk7Ci0gICAgICB0aGlzLmZpbGUgPSBmaWxlOwotICAg
ICAgdGhpcy5pbmRleCA9IGluZGV4OwotCi0gICAgICBjb250YWluaW5nVHlwZSA9IHBhcmVudDsK
LSAgICAgIGZpZWxkQ291bnQgPSAwOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgaW50IGlu
ZGV4OwotICAgIHByaXZhdGUgT25lb2ZEZXNjcmlwdG9yUHJvdG8gcHJvdG87Ci0gICAgcHJpdmF0
ZSBmaW5hbCBTdHJpbmcgZnVsbE5hbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBGaWxlRGVzY3JpcHRv
ciBmaWxlOwotCi0gICAgcHJpdmF0ZSBEZXNjcmlwdG9yIGNvbnRhaW5pbmdUeXBlOwotICAgIHBy
aXZhdGUgaW50IGZpZWxkQ291bnQ7Ci0gICAgcHJpdmF0ZSBGaWVsZERlc2NyaXB0b3JbXSBmaWVs
ZHM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9Eb3VibGVBcnJheUxpc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEv
Y29tL2dvb2dsZS9wcm90b2J1Zi9Eb3VibGVBcnJheUxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYTk1NDNiODM3YjAzMTkyOGVjZGRhZDJhYTg1NmE5YTljMzBiMTUwMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9z
cmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRG91YmxlQXJyYXlMaXN0LmphdmEKKysr
IC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGNvbS5nb29n
bGUucHJvdG9idWYuSW50ZXJuYWwuRG91YmxlTGlzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJh
eXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRv
bUFjY2VzczsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgRG91YmxlTGlz
dH0gb24gdG9wIG9mIGEgcHJpbWl0aXZlIGFycmF5LgotICogCi0gKiBAYXV0aG9yIGR3ZWlzQGdv
b2dsZS5jb20gKERhbmllbCBXZWlzKQotICovCi1maW5hbCBjbGFzcyBEb3VibGVBcnJheUxpc3QK
LSAgICBleHRlbmRzIEFic3RyYWN0UHJvdG9idWZMaXN0PERvdWJsZT4gaW1wbGVtZW50cyBEb3Vi
bGVMaXN0LCBSYW5kb21BY2Nlc3MgewotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRG91Ymxl
QXJyYXlMaXN0IEVNUFRZX0xJU1QgPSBuZXcgRG91YmxlQXJyYXlMaXN0KCk7Ci0gIHN0YXRpYyB7
Ci0gICAgRU1QVFlfTElTVC5tYWtlSW1tdXRhYmxlKCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0
aWMgRG91YmxlQXJyYXlMaXN0IGVtcHR5TGlzdCgpIHsKLSAgICByZXR1cm4gRU1QVFlfTElTVDsK
LSAgfQotICAKLSAgLyoqCi0gICAqIFRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgbGlzdC4KLSAg
ICovCi0gIHByaXZhdGUgZG91YmxlW10gYXJyYXk7Ci0gIAotICAvKioKLSAgICogVGhlIHNpemUg
b2YgdGhlIGxpc3QgZGlzdGluY3QgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4gVGhhdCBp
cywgaXQgaXMgdGhlIG51bWJlciBvZgotICAgKiBlbGVtZW50cyBzZXQgaW4gdGhlIGxpc3QuCi0g
ICAqLwotICBwcml2YXRlIGludCBzaXplOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgbmV3
IG11dGFibGUge0Bjb2RlIERvdWJsZUFycmF5TGlzdH0gd2l0aCBkZWZhdWx0IGNhcGFjaXR5Lgot
ICAgKi8KLSAgRG91YmxlQXJyYXlMaXN0KCkgewotICAgIHRoaXMobmV3IGRvdWJsZVtERUZBVUxU
X0NBUEFDSVRZXSwgMCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG5ldyBtdXRh
YmxlIHtAY29kZSBEb3VibGVBcnJheUxpc3R9IGNvbnRhaW5pbmcgdGhlIHNhbWUgZWxlbWVudHMg
YXMge0Bjb2RlIG90aGVyfS4KLSAgICovCi0gIHByaXZhdGUgRG91YmxlQXJyYXlMaXN0KGRvdWJs
ZVtdIGFycmF5LCBpbnQgc2l6ZSkgewotICAgIHRoaXMuYXJyYXkgPSBhcnJheTsKLSAgICB0aGlz
LnNpemUgPSBzaXplOwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gZXF1
YWxzKE9iamVjdCBvKSB7Ci0gICAgaWYgKHRoaXMgPT0gbykgewotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIGlmICghKG8gaW5zdGFuY2VvZiBEb3VibGVBcnJheUxpc3QpKSB7Ci0gICAg
ICByZXR1cm4gc3VwZXIuZXF1YWxzKG8pOwotICAgIH0KLSAgICBEb3VibGVBcnJheUxpc3Qgb3Ro
ZXIgPSAoRG91YmxlQXJyYXlMaXN0KSBvOwotICAgIGlmIChzaXplICE9IG90aGVyLnNpemUpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgZmluYWwgZG91YmxlW10gYXJy
ID0gb3RoZXIuYXJyYXk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgIGlmIChhcnJheVtpXSAhPSBhcnJbaV0pIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIGludCByZXN1bHQgPSAxOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICBsb25nIGJpdHMgPSBEb3VibGUuZG91
YmxlVG9Mb25nQml0cyhhcnJheVtpXSk7Ci0gICAgICByZXN1bHQgPSAoMzEgKiByZXN1bHQpICsg
SW50ZXJuYWwuaGFzaExvbmcoYml0cyk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIERvdWJsZUxpc3QgbXV0YWJsZUNvcHlXaXRoQ2FwYWNp
dHkoaW50IGNhcGFjaXR5KSB7Ci0gICAgaWYgKGNhcGFjaXR5IDwgc2l6ZSkgewotICAgICAgdGhy
b3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgIH0KLSAgICByZXR1cm4gbmV3
IERvdWJsZUFycmF5TGlzdChBcnJheXMuY29weU9mKGFycmF5LCBjYXBhY2l0eSksIHNpemUpOwot
ICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIERvdWJsZSBnZXQoaW50IGluZGV4KSB7Ci0g
ICAgcmV0dXJuIGdldERvdWJsZShpbmRleCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IGRvdWJsZSBnZXREb3VibGUoaW50IGluZGV4KSB7Ci0gICAgZW5zdXJlSW5kZXhJblJhbmdlKGlu
ZGV4KTsKLSAgICByZXR1cm4gYXJyYXlbaW5kZXhdOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICByZXR1cm4gc2l6ZTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgRG91YmxlIHNldChpbnQgaW5kZXgsIERvdWJsZSBlbGVtZW50KSB7Ci0gICAgcmV0
dXJuIHNldERvdWJsZShpbmRleCwgZWxlbWVudCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIGRvdWJsZSBzZXREb3VibGUoaW50IGluZGV4LCBkb3VibGUgZWxlbWVudCkgewotICAgIGVu
c3VyZUlzTXV0YWJsZSgpOwotICAgIGVuc3VyZUluZGV4SW5SYW5nZShpbmRleCk7Ci0gICAgZG91
YmxlIHByZXZpb3VzVmFsdWUgPSBhcnJheVtpbmRleF07Ci0gICAgYXJyYXlbaW5kZXhdID0gZWxl
bWVudDsKLSAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBhZGQoaW50IGluZGV4LCBEb3VibGUgZWxlbWVudCkgewotICAgIGFkZERvdWJs
ZShpbmRleCwgZWxlbWVudCk7Ci0gIH0KLQotICAvKioKLSAgICogTGlrZSB7QGxpbmsgI2FkZChE
b3VibGUpfSBidXQgbW9yZSBlZmZpY2llbnQgaW4gdGhhdCBpdCBkb2Vzbid0IGJveCB0aGUgZWxl
bWVudC4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBhZGREb3VibGUoZG91Ymxl
IGVsZW1lbnQpIHsKLSAgICBhZGREb3VibGUoc2l6ZSwgZWxlbWVudCk7Ci0gIH0KLQotICAvKioK
LSAgICogTGlrZSB7QGxpbmsgI2FkZChpbnQsIERvdWJsZSl9IGJ1dCBtb3JlIGVmZmljaWVudCBp
biB0aGF0IGl0IGRvZXNuJ3QgYm94IHRoZSBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lk
IGFkZERvdWJsZShpbnQgaW5kZXgsIGRvdWJsZSBlbGVtZW50KSB7Ci0gICAgZW5zdXJlSXNNdXRh
YmxlKCk7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHNpemUpIHsKLSAgICAgIHRocm93
IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKG1ha2VPdXRPZkJvdW5kc0V4Y2VwdGlvbk1l
c3NhZ2UoaW5kZXgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHNpemUgPCBhcnJheS5sZW5ndGgp
IHsKLSAgICAgIC8vIFNoaWZ0IGV2ZXJ5dGhpbmcgb3ZlciB0byBtYWtlIHJvb20KLSAgICAgIFN5
c3RlbS5hcnJheWNvcHkoYXJyYXksIGluZGV4LCBhcnJheSwgaW5kZXggKyAxLCBzaXplIC0gaW5k
ZXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBSZXNpemUgdG8gMS41eCB0aGUgc2l6ZQotICAg
ICAgaW50IGxlbmd0aCA9ICgoc2l6ZSAqIDMpIC8gMikgKyAxOwotICAgICAgZG91YmxlW10gbmV3
QXJyYXkgPSBuZXcgZG91YmxlW2xlbmd0aF07Ci0gICAgICAKLSAgICAgIC8vIENvcHkgdGhlIGZp
cnN0IHBhcnQgZGlyZWN0bHkKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoYXJyYXksIDAsIG5ld0Fy
cmF5LCAwLCBpbmRleCk7Ci0gICAgICAKLSAgICAgIC8vIENvcHkgdGhlIHJlc3Qgc2hpZnRlZCBv
dmVyIGJ5IG9uZSB0byBtYWtlIHJvb20KLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoYXJyYXksIGlu
ZGV4LCBuZXdBcnJheSwgaW5kZXggKyAxLCBzaXplIC0gaW5kZXgpOwotICAgICAgYXJyYXkgPSBu
ZXdBcnJheTsKLSAgICB9Ci0KLSAgICBhcnJheVtpbmRleF0gPSBlbGVtZW50OwotICAgIHNpemUr
KzsKLSAgICBtb2RDb3VudCsrOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFu
IGFkZEFsbChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+IGNvbGxlY3Rpb24pIHsKLSAgICBl
bnN1cmVJc011dGFibGUoKTsKLSAgICAKLSAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7Ci0g
ICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gV2Ugc3BlY2lhbGl6ZSB3aGVuIGFkZGluZyBhbm90aGVyIERvdWJsZUFycmF5TGlzdCB0byBh
dm9pZCBib3hpbmcgZWxlbWVudHMuCi0gICAgaWYgKCEoY29sbGVjdGlvbiBpbnN0YW5jZW9mIERv
dWJsZUFycmF5TGlzdCkpIHsKLSAgICAgIHJldHVybiBzdXBlci5hZGRBbGwoY29sbGVjdGlvbik7
Ci0gICAgfQotICAgIAotICAgIERvdWJsZUFycmF5TGlzdCBsaXN0ID0gKERvdWJsZUFycmF5TGlz
dCkgY29sbGVjdGlvbjsKLSAgICBpZiAobGlzdC5zaXplID09IDApIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaW50IG92ZXJmbG93ID0gSW50ZWdlci5NQVhfVkFMVUUg
LSBzaXplOwotICAgIGlmIChvdmVyZmxvdyA8IGxpc3Quc2l6ZSkgewotICAgICAgLy8gV2UgY2Fu
J3QgYWN0dWFsbHkgcmVwcmVzZW50IGEgbGlzdCB0aGlzIGxhcmdlLgotICAgICAgdGhyb3cgbmV3
IE91dE9mTWVtb3J5RXJyb3IoKTsKLSAgICB9Ci0gICAgCi0gICAgaW50IG5ld1NpemUgPSBzaXpl
ICsgbGlzdC5zaXplOwotICAgIGlmIChuZXdTaXplID4gYXJyYXkubGVuZ3RoKSB7Ci0gICAgICBh
cnJheSA9IEFycmF5cy5jb3B5T2YoYXJyYXksIG5ld1NpemUpOwotICAgIH0KLSAgICAKLSAgICBT
eXN0ZW0uYXJyYXljb3B5KGxpc3QuYXJyYXksIDAsIGFycmF5LCBzaXplLCBsaXN0LnNpemUpOwot
ICAgIHNpemUgPSBuZXdTaXplOwotICAgIG1vZENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci0g
IH0KLSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmUoT2JqZWN0IG8pIHsK
LSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkr
KykgewotICAgICAgaWYgKG8uZXF1YWxzKGFycmF5W2ldKSkgewotICAgICAgICBTeXN0ZW0uYXJy
YXljb3B5KGFycmF5LCBpICsgMSwgYXJyYXksIGksIHNpemUgLSBpKTsKLSAgICAgICAgc2l6ZS0t
OwotICAgICAgICBtb2RDb3VudCsrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBEb3Vi
bGUgcmVtb3ZlKGludCBpbmRleCkgewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIGVuc3Vy
ZUluZGV4SW5SYW5nZShpbmRleCk7Ci0gICAgZG91YmxlIHZhbHVlID0gYXJyYXlbaW5kZXhdOwot
ICAgIFN5c3RlbS5hcnJheWNvcHkoYXJyYXksIGluZGV4ICsgMSwgYXJyYXksIGluZGV4LCBzaXpl
IC0gaW5kZXgpOwotICAgIHNpemUtLTsKLSAgICBtb2RDb3VudCsrOwotICAgIHJldHVybiB2YWx1
ZTsKLSAgfQotCi0gIC8qKgotICAgKiBFbnN1cmVzIHRoYXQgdGhlIHByb3ZpZGVkIHtAY29kZSBp
bmRleH0gaXMgd2l0aGluIHRoZSByYW5nZSBvZiB7QGNvZGUgWzAsIHNpemVdfS4gVGhyb3dzIGFu
Ci0gICAqIHtAbGluayBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufSBpZiBpdCBpcyBub3QuCi0g
ICAqIAotICAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IHRvIHZlcmlmeSBpcyBpbiByYW5nZQot
ICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGVuc3VyZUluZGV4SW5SYW5nZShpbnQgaW5kZXgpIHsKLSAg
ICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHNpemUpIHsKLSAgICAgIHRocm93IG5ldyBJbmRl
eE91dE9mQm91bmRzRXhjZXB0aW9uKG1ha2VPdXRPZkJvdW5kc0V4Y2VwdGlvbk1lc3NhZ2UoaW5k
ZXgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBtYWtlT3V0T2ZCb3VuZHNFeGNl
cHRpb25NZXNzYWdlKGludCBpbmRleCkgewotICAgIHJldHVybiAiSW5kZXg6IiArIGluZGV4ICsg
IiwgU2l6ZToiICsgc2l6ZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4v
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0R5bmFtaWNNZXNzYWdlLmphdmEgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9z
cmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRHluYW1pY01lc3NhZ2UuamF2YQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU5YTllOGZjNTEyZTU1YzEzOGM1YTI5MzliZDVl
ZGQ0MGJkOTc0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRHluYW1pY01lc3Nh
Z2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBv
cnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5EZXNjcmlwdG9yOwotaW1wb3J0IGNv
bS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRW51bVZhbHVlRGVzY3JpcHRvcjsKLWltcG9y
dCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvcjsKLWltcG9y
dCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLk9uZW9mRGVzY3JpcHRvcjsKLQotaW1w
b3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWlt
cG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBv
cnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsg
TWVzc2FnZX0gdGhhdCBjYW4gcmVwcmVzZW50IGFyYml0cmFyeSB0eXBlcywKLSAqIGdpdmVuIGEg
e0BsaW5rIERlc2NyaXB0b3JzLkRlc2NyaXB0b3J9LgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdv
b2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBEeW5hbWljTWVz
c2FnZSBleHRlbmRzIEFic3RyYWN0TWVzc2FnZSB7Ci0gIHByaXZhdGUgZmluYWwgRGVzY3JpcHRv
ciB0eXBlOwotICBwcml2YXRlIGZpbmFsIEZpZWxkU2V0PEZpZWxkRGVzY3JpcHRvcj4gZmllbGRz
OwotICBwcml2YXRlIGZpbmFsIEZpZWxkRGVzY3JpcHRvcltdIG9uZW9mQ2FzZXM7Ci0gIHByaXZh
dGUgZmluYWwgVW5rbm93bkZpZWxkU2V0IHVua25vd25GaWVsZHM7Ci0gIHByaXZhdGUgaW50IG1l
bW9pemVkU2l6ZSA9IC0xOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3QgYSB7QGNvZGUgRHluYW1p
Y01lc3NhZ2V9IHVzaW5nIHRoZSBnaXZlbiB7QGNvZGUgRmllbGRTZXR9LgotICAgKiBvbmVvZkNh
c2VzIHN0b3JlcyB0aGUgRmllbGREZXNjcmlwdG9yIGZvciBlYWNoIG9uZW9mIHRvIGluZGljYXRl
Ci0gICAqIHdoaWNoIGZpZWxkIGlzIHNldC4gQ2FsbGVyIHNob3VsZCBtYWtlIHN1cmUgdGhlIGFy
cmF5IGlzIGltbXV0YWJsZS4KLSAgICoKLSAgICogVGhpcyBjb25zdHJ1Y3RvciBpcyBwYWNrYWdl
IHByaXZhdGUgYW5kIHdpbGwgYmUgdXNlZCBpbgotICAgKiB7QGNvZGUgRHluYW1pY011dGFibGVN
ZXNzYWdlfSB0byBjb252ZXJ0IGEgbXV0YWJsZSBtZXNzYWdlIHRvIGFuIGltbXV0YWJsZQotICAg
KiBtZXNzYWdlLgotICAgKi8KLSAgRHluYW1pY01lc3NhZ2UoRGVzY3JpcHRvciB0eXBlLCBGaWVs
ZFNldDxGaWVsZERlc2NyaXB0b3I+IGZpZWxkcywKLSAgICAgICAgICAgICAgICAgRmllbGREZXNj
cmlwdG9yW10gb25lb2ZDYXNlcywKLSAgICAgICAgICAgICAgICAgVW5rbm93bkZpZWxkU2V0IHVu
a25vd25GaWVsZHMpIHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRoaXMuZmllbGRzID0g
ZmllbGRzOwotICAgIHRoaXMub25lb2ZDYXNlcyA9IG9uZW9mQ2FzZXM7Ci0gICAgdGhpcy51bmtu
b3duRmllbGRzID0gdW5rbm93bkZpZWxkczsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSB7QGNv
ZGUgRHluYW1pY01lc3NhZ2V9IHJlcHJlc2VudGluZyB0aGUgZGVmYXVsdCBpbnN0YW5jZSBvZiB0
aGUKLSAgICogZ2l2ZW4gdHlwZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRHluYW1pY01lc3Nh
Z2UgZ2V0RGVmYXVsdEluc3RhbmNlKERlc2NyaXB0b3IgdHlwZSkgewotICAgIGludCBvbmVvZkRl
Y2xDb3VudCA9IHR5cGUudG9Qcm90bygpLmdldE9uZW9mRGVjbENvdW50KCk7Ci0gICAgRmllbGRE
ZXNjcmlwdG9yW10gb25lb2ZDYXNlcyA9IG5ldyBGaWVsZERlc2NyaXB0b3Jbb25lb2ZEZWNsQ291
bnRdOwotICAgIHJldHVybiBuZXcgRHluYW1pY01lc3NhZ2UodHlwZSwgRmllbGRTZXQuPEZpZWxk
RGVzY3JpcHRvcj5lbXB0eVNldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25l
b2ZDYXNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVua25vd25GaWVsZFNldC5n
ZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gIH0KLQotCi0gIC8qKiBQYXJzZSBhIG1lc3NhZ2Ugb2Yg
dGhlIGdpdmVuIHR5cGUgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgc3RyZWFtLiAqLwotICBwdWJsaWMg
c3RhdGljIER5bmFtaWNNZXNzYWdlIHBhcnNlRnJvbShEZXNjcmlwdG9yIHR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgcmV0dXJuIG5ld0J1aWxkZXIodHlwZSkubWVyZ2VGcm9tKGlucHV0KS5idWls
ZFBhcnNlZCgpOwotICB9Ci0KLSAgLyoqIFBhcnNlIGEgbWVzc2FnZSBvZiB0aGUgZ2l2ZW4gdHlw
ZSBmcm9tIHRoZSBnaXZlbiBpbnB1dCBzdHJlYW0uICovCi0gIHB1YmxpYyBzdGF0aWMgRHluYW1p
Y01lc3NhZ2UgcGFyc2VGcm9tKAotICAgICAgRGVzY3JpcHRvciB0eXBlLAotICAgICAgQ29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCwKLSAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lz
dHJ5KQotICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gbmV3QnVpbGRlcih0
eXBlKS5tZXJnZUZyb20oaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KS5idWlsZFBhcnNlZCgpOwot
ICB9Ci0KLSAgLyoqIFBhcnNlIHtAY29kZSBkYXRhfSBhcyBhIG1lc3NhZ2Ugb2YgdGhlIGdpdmVu
IHR5cGUgYW5kIHJldHVybiBpdC4gKi8KLSAgcHVibGljIHN0YXRpYyBEeW5hbWljTWVzc2FnZSBw
YXJzZUZyb20oRGVzY3JpcHRvciB0eXBlLCBCeXRlU3RyaW5nIGRhdGEpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24gewotICAgIHJldHVybiBuZXdCdWlsZGVyKHR5cGUpLm1lcmdlRnJvbShkYXRhKS5i
dWlsZFBhcnNlZCgpOwotICB9Ci0KLSAgLyoqIFBhcnNlIHtAY29kZSBkYXRhfSBhcyBhIG1lc3Nh
Z2Ugb2YgdGhlIGdpdmVuIHR5cGUgYW5kIHJldHVybiBpdC4gKi8KLSAgcHVibGljIHN0YXRpYyBE
eW5hbWljTWVzc2FnZSBwYXJzZUZyb20oRGVzY3JpcHRvciB0eXBlLCBCeXRlU3RyaW5nIGRhdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvblJlZ2lz
dHJ5IGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICByZXR1
cm4gbmV3QnVpbGRlcih0eXBlKS5tZXJnZUZyb20oZGF0YSwgZXh0ZW5zaW9uUmVnaXN0cnkpLmJ1
aWxkUGFyc2VkKCk7Ci0gIH0KLQotICAvKiogUGFyc2Uge0Bjb2RlIGRhdGF9IGFzIGEgbWVzc2Fn
ZSBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJuIGl0LiAqLwotICBwdWJsaWMgc3RhdGljIER5
bmFtaWNNZXNzYWdlIHBhcnNlRnJvbShEZXNjcmlwdG9yIHR5cGUsIGJ5dGVbXSBkYXRhKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gbmV3QnVpbGRlcih0eXBlKS5tZXJnZUZy
b20oZGF0YSkuYnVpbGRQYXJzZWQoKTsKLSAgfQotCi0gIC8qKiBQYXJzZSB7QGNvZGUgZGF0YX0g
YXMgYSBtZXNzYWdlIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCByZXR1cm4gaXQuICovCi0gIHB1Ymxp
YyBzdGF0aWMgRHluYW1pY01lc3NhZ2UgcGFyc2VGcm9tKERlc2NyaXB0b3IgdHlwZSwgYnl0ZVtd
IGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lv
blJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAg
ICByZXR1cm4gbmV3QnVpbGRlcih0eXBlKS5tZXJnZUZyb20oZGF0YSwgZXh0ZW5zaW9uUmVnaXN0
cnkpLmJ1aWxkUGFyc2VkKCk7Ci0gIH0KLQotICAvKiogUGFyc2UgYSBtZXNzYWdlIG9mIHRoZSBn
aXZlbiB0eXBlIGZyb20ge0Bjb2RlIGlucHV0fSBhbmQgcmV0dXJuIGl0LiAqLwotICBwdWJsaWMg
c3RhdGljIER5bmFtaWNNZXNzYWdlIHBhcnNlRnJvbShEZXNjcmlwdG9yIHR5cGUsIElucHV0U3Ry
ZWFtIGlucHV0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgIHJldHVybiBuZXdCdWlsZGVyKHR5cGUpLm1lcmdlRnJvbShp
bnB1dCkuYnVpbGRQYXJzZWQoKTsKLSAgfQotCi0gIC8qKiBQYXJzZSBhIG1lc3NhZ2Ugb2YgdGhl
IGdpdmVuIHR5cGUgZnJvbSB7QGNvZGUgaW5wdXR9IGFuZCByZXR1cm4gaXQuICovCi0gIHB1Ymxp
YyBzdGF0aWMgRHluYW1pY01lc3NhZ2UgcGFyc2VGcm9tKERlc2NyaXB0b3IgdHlwZSwgSW5wdXRT
dHJlYW0gaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4
dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHJldHVybiBuZXdC
dWlsZGVyKHR5cGUpLm1lcmdlRnJvbShpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpLmJ1aWxkUGFy
c2VkKCk7Ci0gIH0KLQotICAvKiogQ29uc3RydWN0IGEge0BsaW5rIE1lc3NhZ2UuQnVpbGRlcn0g
Zm9yIHRoZSBnaXZlbiB0eXBlLiAqLwotICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgbmV3QnVpbGRl
cihEZXNjcmlwdG9yIHR5cGUpIHsKLSAgICByZXR1cm4gbmV3IEJ1aWxkZXIodHlwZSk7Ci0gIH0K
LQotICAvKioKLSAgICogQ29uc3RydWN0IGEge0BsaW5rIE1lc3NhZ2UuQnVpbGRlcn0gZm9yIGEg
bWVzc2FnZSBvZiB0aGUgc2FtZSB0eXBlIGFzCi0gICAqIHtAY29kZSBwcm90b3R5cGV9LCBhbmQg
aW5pdGlhbGl6ZSBpdCB3aXRoIHtAY29kZSBwcm90b3R5cGV9J3MgY29udGVudHMuCi0gICAqLwot
ICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgbmV3QnVpbGRlcihNZXNzYWdlIHByb3RvdHlwZSkgewot
ICAgIHJldHVybiBuZXcgQnVpbGRlcihwcm90b3R5cGUuZ2V0RGVzY3JpcHRvckZvclR5cGUoKSku
bWVyZ2VGcm9tKHByb3RvdHlwZSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBJbXBsZW1l
bnRhdGlvbiBvZiBNZXNzYWdlIGludGVyZmFjZS4KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIERl
c2NyaXB0b3IgZ2V0RGVzY3JpcHRvckZvclR5cGUoKSB7Ci0gICAgcmV0dXJuIHR5cGU7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIER5bmFtaWNNZXNzYWdlIGdldERlZmF1bHRJbnN0YW5j
ZUZvclR5cGUoKSB7Ci0gICAgcmV0dXJuIGdldERlZmF1bHRJbnN0YW5jZSh0eXBlKTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgTWFwPEZpZWxkRGVzY3JpcHRvciwgT2JqZWN0PiBnZXRB
bGxGaWVsZHMoKSB7Ci0gICAgcmV0dXJuIGZpZWxkcy5nZXRBbGxGaWVsZHMoKTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBoYXNPbmVvZihPbmVvZkRlc2NyaXB0b3Igb25l
b2YpIHsKLSAgICB2ZXJpZnlPbmVvZkNvbnRhaW5pbmdUeXBlKG9uZW9mKTsKLSAgICBGaWVsZERl
c2NyaXB0b3IgZmllbGQgPSBvbmVvZkNhc2VzW29uZW9mLmdldEluZGV4KCldOwotICAgIGlmIChm
aWVsZCA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBGaWVsZERlc2NyaXB0b3IgZ2V0T25l
b2ZGaWVsZERlc2NyaXB0b3IoT25lb2ZEZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgdmVyaWZ5T25l
b2ZDb250YWluaW5nVHlwZShvbmVvZik7Ci0gICAgcmV0dXJuIG9uZW9mQ2FzZXNbb25lb2YuZ2V0
SW5kZXgoKV07Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaGFzRmllbGQo
RmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgdmVyaWZ5Q29udGFpbmluZ1R5cGUoZmllbGQp
OwotICAgIHJldHVybiBmaWVsZHMuaGFzRmllbGQoZmllbGQpOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBPYmplY3QgZ2V0RmllbGQoRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAg
dmVyaWZ5Q29udGFpbmluZ1R5cGUoZmllbGQpOwotICAgIE9iamVjdCByZXN1bHQgPSBmaWVsZHMu
Z2V0RmllbGQoZmllbGQpOwotICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewotICAgICAgaWYgKGZp
ZWxkLmlzUmVwZWF0ZWQoKSkgewotICAgICAgICByZXN1bHQgPSBDb2xsZWN0aW9ucy5lbXB0eUxp
c3QoKTsKLSAgICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0SmF2YVR5cGUoKSA9PSBGaWVsZERlc2Ny
aXB0b3IuSmF2YVR5cGUuTUVTU0FHRSkgewotICAgICAgICByZXN1bHQgPSBnZXREZWZhdWx0SW5z
dGFuY2UoZmllbGQuZ2V0TWVzc2FnZVR5cGUoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBy
ZXN1bHQgPSBmaWVsZC5nZXREZWZhdWx0VmFsdWUoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldFJlcGVhdGVk
RmllbGRDb3VudChGaWVsZERlc2NyaXB0b3IgZmllbGQpIHsKLSAgICB2ZXJpZnlDb250YWluaW5n
VHlwZShmaWVsZCk7Ci0gICAgcmV0dXJuIGZpZWxkcy5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZmll
bGQpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBPYmplY3QgZ2V0UmVwZWF0ZWRGaWVs
ZChGaWVsZERlc2NyaXB0b3IgZmllbGQsIGludCBpbmRleCkgewotICAgIHZlcmlmeUNvbnRhaW5p
bmdUeXBlKGZpZWxkKTsKLSAgICByZXR1cm4gZmllbGRzLmdldFJlcGVhdGVkRmllbGQoZmllbGQs
IGluZGV4KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgVW5rbm93bkZpZWxkU2V0IGdl
dFVua25vd25GaWVsZHMoKSB7Ci0gICAgcmV0dXJuIHVua25vd25GaWVsZHM7Ci0gIH0KLQotICBz
dGF0aWMgYm9vbGVhbiBpc0luaXRpYWxpemVkKERlc2NyaXB0b3IgdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGaWVsZFNldDxGaWVsZERlc2NyaXB0b3I+IGZpZWxkcykgewot
ICAgIC8vIENoZWNrIHRoYXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgcHJlc2VudC4KLSAgICBm
b3IgKGZpbmFsIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA6IHR5cGUuZ2V0RmllbGRzKCkpIHsKLSAg
ICAgIGlmIChmaWVsZC5pc1JlcXVpcmVkKCkpIHsKLSAgICAgICAgaWYgKCFmaWVsZHMuaGFzRmll
bGQoZmllbGQpKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgdGhhdCBlbWJlZGRlZCBtZXNzYWdlcyBhcmUgaW5pdGlh
bGl6ZWQuCi0gICAgcmV0dXJuIGZpZWxkcy5pc0luaXRpYWxpemVkKCk7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpIHsKLSAgICByZXR1cm4gaXNJ
bml0aWFsaXplZCh0eXBlLCBmaWVsZHMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIHdyaXRlVG8oQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIGlmICh0eXBlLmdldE9wdGlvbnMoKS5nZXRNZXNzYWdlU2V0V2lyZUZvcm1hdCgpKSB7
Ci0gICAgICBmaWVsZHMud3JpdGVNZXNzYWdlU2V0VG8ob3V0cHV0KTsKLSAgICAgIHVua25vd25G
aWVsZHMud3JpdGVBc01lc3NhZ2VTZXRUbyhvdXRwdXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBm
aWVsZHMud3JpdGVUbyhvdXRwdXQpOwotICAgICAgdW5rbm93bkZpZWxkcy53cml0ZVRvKG91dHB1
dCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgZ2V0U2VyaWFsaXpl
ZFNpemUoKSB7Ci0gICAgaW50IHNpemUgPSBtZW1vaXplZFNpemU7Ci0gICAgaWYgKHNpemUgIT0g
LTEpIHJldHVybiBzaXplOwotCi0gICAgaWYgKHR5cGUuZ2V0T3B0aW9ucygpLmdldE1lc3NhZ2VT
ZXRXaXJlRm9ybWF0KCkpIHsKLSAgICAgIHNpemUgPSBmaWVsZHMuZ2V0TWVzc2FnZVNldFNlcmlh
bGl6ZWRTaXplKCk7Ci0gICAgICBzaXplICs9IHVua25vd25GaWVsZHMuZ2V0U2VyaWFsaXplZFNp
emVBc01lc3NhZ2VTZXQoKTsKLSAgICB9IGVsc2UgewotICAgICAgc2l6ZSA9IGZpZWxkcy5nZXRT
ZXJpYWxpemVkU2l6ZSgpOwotICAgICAgc2l6ZSArPSB1bmtub3duRmllbGRzLmdldFNlcmlhbGl6
ZWRTaXplKCk7Ci0gICAgfQotCi0gICAgbWVtb2l6ZWRTaXplID0gc2l6ZTsKLSAgICByZXR1cm4g
c2l6ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQnVpbGRlciBuZXdCdWlsZGVyRm9y
VHlwZSgpIHsKLSAgICByZXR1cm4gbmV3IEJ1aWxkZXIodHlwZSk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIEJ1aWxkZXIgdG9CdWlsZGVyKCkgewotICAgIHJldHVybiBuZXdCdWlsZGVy
Rm9yVHlwZSgpLm1lcmdlRnJvbSh0aGlzKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
UGFyc2VyPER5bmFtaWNNZXNzYWdlPiBnZXRQYXJzZXJGb3JUeXBlKCkgewotICAgIHJldHVybiBu
ZXcgQWJzdHJhY3RQYXJzZXI8RHluYW1pY01lc3NhZ2U+KCkgewotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgRHluYW1pY01lc3NhZ2UgcGFyc2VQYXJ0aWFsRnJvbSgKLSAgICAgICAgICBD
b2RlZElucHV0U3RyZWFtIGlucHV0LCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVn
aXN0cnkpCi0gICAgICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7
Ci0gICAgICAgIEJ1aWxkZXIgYnVpbGRlciA9IG5ld0J1aWxkZXIodHlwZSk7Ci0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgYnVpbGRlci5tZXJnZUZyb20oaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5
KTsKLSAgICAgICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsK
LSAgICAgICAgICB0aHJvdyBlLnNldFVuZmluaXNoZWRNZXNzYWdlKGJ1aWxkZXIuYnVpbGRQYXJ0
aWFsKCkpOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgdGhy
b3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSkKLSAg
ICAgICAgICAgICAgLnNldFVuZmluaXNoZWRNZXNzYWdlKGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCkp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwotICAg
ICAgfQotICAgIH07Ci0gIH0KLQotICAvKiogVmVyaWZpZXMgdGhhdCB0aGUgZmllbGQgaXMgYSBm
aWVsZCBvZiB0aGlzIG1lc3NhZ2UuICovCi0gIHByaXZhdGUgdm9pZCB2ZXJpZnlDb250YWluaW5n
VHlwZShGaWVsZERlc2NyaXB0b3IgZmllbGQpIHsKLSAgICBpZiAoZmllbGQuZ2V0Q29udGFpbmlu
Z1R5cGUoKSAhPSB0eXBlKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uKAotICAgICAgICAiRmllbGREZXNjcmlwdG9yIGRvZXMgbm90IG1hdGNoIG1lc3NhZ2UgdHlw
ZS4iKTsKLSAgICB9Ci0gIH0KLQotICAvKiogVmVyaWZpZXMgdGhhdCB0aGUgb25lb2YgaXMgYW4g
b25lb2Ygb2YgdGhpcyBtZXNzYWdlLiAqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5T25lb2ZDb250
YWluaW5nVHlwZShPbmVvZkRlc2NyaXB0b3Igb25lb2YpIHsKLSAgICBpZiAob25lb2YuZ2V0Q29u
dGFpbmluZ1R5cGUoKSAhPSB0eXBlKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uKAotICAgICAgICAiT25lb2ZEZXNjcmlwdG9yIGRvZXMgbm90IG1hdGNoIG1lc3Nh
Z2UgdHlwZS4iKTsKLSAgICB9Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gIC8qKgotICAgKiBC
dWlsZGVyIGZvciB7QGxpbmsgRHluYW1pY01lc3NhZ2V9cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgZmluYWwgY2xhc3MgQnVpbGRlciBleHRlbmRzIEFic3RyYWN0TWVzc2FnZS5CdWlsZGVyPEJ1
aWxkZXI+IHsKLSAgICBwcml2YXRlIGZpbmFsIERlc2NyaXB0b3IgdHlwZTsKLSAgICBwcml2YXRl
IEZpZWxkU2V0PEZpZWxkRGVzY3JpcHRvcj4gZmllbGRzOwotICAgIHByaXZhdGUgZmluYWwgRmll
bGREZXNjcmlwdG9yW10gb25lb2ZDYXNlczsKLSAgICBwcml2YXRlIFVua25vd25GaWVsZFNldCB1
bmtub3duRmllbGRzOwotCi0gICAgLyoqIENvbnN0cnVjdCBhIHtAY29kZSBCdWlsZGVyfSBmb3Ig
dGhlIGdpdmVuIHR5cGUuICovCi0gICAgcHJpdmF0ZSBCdWlsZGVyKERlc2NyaXB0b3IgdHlwZSkg
ewotICAgICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICAgIHRoaXMuZmllbGRzID0gRmllbGRTZXQu
bmV3RmllbGRTZXQoKTsKLSAgICAgIHRoaXMudW5rbm93bkZpZWxkcyA9IFVua25vd25GaWVsZFNl
dC5nZXREZWZhdWx0SW5zdGFuY2UoKTsKLSAgICAgIHRoaXMub25lb2ZDYXNlcyA9IG5ldyBGaWVs
ZERlc2NyaXB0b3JbdHlwZS50b1Byb3RvKCkuZ2V0T25lb2ZEZWNsQ291bnQoKV07Ci0gICAgfQot
Ci0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSW1wbGVtZW50YXRpb24gb2YgTWVzc2FnZS5CdWlsZGVy
IGludGVyZmFjZS4KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyIGNsZWFyKCkg
ewotICAgICAgaWYgKGZpZWxkcy5pc0ltbXV0YWJsZSgpKSB7Ci0gICAgICAgIGZpZWxkcyA9IEZp
ZWxkU2V0Lm5ld0ZpZWxkU2V0KCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmaWVsZHMuY2xl
YXIoKTsKLSAgICAgIH0KLSAgICAgIHVua25vd25GaWVsZHMgPSBVbmtub3duRmllbGRTZXQuZ2V0
RGVmYXVsdEluc3RhbmNlKCk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBtZXJnZUZyb20oTWVzc2FnZSBvdGhlcikgewotICAg
ICAgaWYgKG90aGVyIGluc3RhbmNlb2YgRHluYW1pY01lc3NhZ2UpIHsKLSAgICAgICAgLy8gVGhp
cyBzaG91bGQgYmUgc29tZXdoYXQgZmFzdGVyIHRoYW4gY2FsbGluZyBzdXBlci5tZXJnZUZyb20o
KS4KLSAgICAgICAgRHluYW1pY01lc3NhZ2Ugb3RoZXJEeW5hbWljTWVzc2FnZSA9IChEeW5hbWlj
TWVzc2FnZSkgb3RoZXI7Ci0gICAgICAgIGlmIChvdGhlckR5bmFtaWNNZXNzYWdlLnR5cGUgIT0g
dHlwZSkgewotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0g
ICAgICAgICAgICAibWVyZ2VGcm9tKE1lc3NhZ2UpIGNhbiBvbmx5IG1lcmdlIG1lc3NhZ2VzIG9m
IHRoZSBzYW1lIHR5cGUuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZW5zdXJlSXNNdXRhYmxlKCk7
Ci0gICAgICAgIGZpZWxkcy5tZXJnZUZyb20ob3RoZXJEeW5hbWljTWVzc2FnZS5maWVsZHMpOwot
ICAgICAgICBtZXJnZVVua25vd25GaWVsZHMob3RoZXJEeW5hbWljTWVzc2FnZS51bmtub3duRmll
bGRzKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbmVvZkNhc2VzLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgaWYgKG9uZW9mQ2FzZXNbaV0gPT0gbnVsbCkgewotICAgICAgICAgICAg
b25lb2ZDYXNlc1tpXSA9IG90aGVyRHluYW1pY01lc3NhZ2Uub25lb2ZDYXNlc1tpXTsKLSAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKChvdGhlckR5bmFtaWNNZXNzYWdlLm9uZW9m
Q2FzZXNbaV0gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAmJiAob25lb2ZDYXNlc1tpXSAhPSBv
dGhlckR5bmFtaWNNZXNzYWdlLm9uZW9mQ2FzZXNbaV0pKSB7Ci0gICAgICAgICAgICAgIGZpZWxk
cy5jbGVhckZpZWxkKG9uZW9mQ2FzZXNbaV0pOwotICAgICAgICAgICAgICBvbmVvZkNhc2VzW2ld
ID0gb3RoZXJEeW5hbWljTWVzc2FnZS5vbmVvZkNhc2VzW2ldOwotICAgICAgICAgICAgfQotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJldHVybiBzdXBlci5tZXJnZUZyb20ob3RoZXIpOwotICAgICAgfQotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEeW5hbWljTWVzc2FnZSBidWlsZCgpIHsKLSAg
ICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIHRocm93IG5ld1VuaW5pdGlhbGl6
ZWRNZXNzYWdlRXhjZXB0aW9uKAotICAgICAgICAgIG5ldyBEeW5hbWljTWVzc2FnZSh0eXBlLCBm
aWVsZHMsCi0gICAgICAgICAgICAgIGphdmEudXRpbC5BcnJheXMuY29weU9mKG9uZW9mQ2FzZXMs
IG9uZW9mQ2FzZXMubGVuZ3RoKSwgdW5rbm93bkZpZWxkcykpOwotICAgICAgfQotICAgICAgcmV0
dXJuIGJ1aWxkUGFydGlhbCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEhlbHBlciBmb3Ig
RHluYW1pY01lc3NhZ2UucGFyc2VGcm9tKCkgbWV0aG9kcyB0byBjYWxsLiAgVGhyb3dzCi0gICAg
ICoge0BsaW5rIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbn0gaW5zdGVhZCBvZgotICAg
ICAqIHtAbGluayBVbmluaXRpYWxpemVkTWVzc2FnZUV4Y2VwdGlvbn0uCi0gICAgICovCi0gICAg
cHJpdmF0ZSBEeW5hbWljTWVzc2FnZSBidWlsZFBhcnNlZCgpIHRocm93cyBJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKLSAgICAg
ICAgdGhyb3cgbmV3VW5pbml0aWFsaXplZE1lc3NhZ2VFeGNlcHRpb24oCi0gICAgICAgICAgbmV3
IER5bmFtaWNNZXNzYWdlKHR5cGUsIGZpZWxkcywKLSAgICAgICAgICAgICAgamF2YS51dGlsLkFy
cmF5cy5jb3B5T2Yob25lb2ZDYXNlcywgb25lb2ZDYXNlcy5sZW5ndGgpLCB1bmtub3duRmllbGRz
KSkKLSAgICAgICAgICAuYXNJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oKTsKLSAgICAg
IH0KLSAgICAgIHJldHVybiBidWlsZFBhcnRpYWwoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgRHluYW1pY01lc3NhZ2UgYnVpbGRQYXJ0aWFsKCkgewotICAgICAgZmllbGRz
Lm1ha2VJbW11dGFibGUoKTsKLSAgICAgIER5bmFtaWNNZXNzYWdlIHJlc3VsdCA9Ci0gICAgICAg
IG5ldyBEeW5hbWljTWVzc2FnZSh0eXBlLCBmaWVsZHMsCi0gICAgICAgICAgICBqYXZhLnV0aWwu
QXJyYXlzLmNvcHlPZihvbmVvZkNhc2VzLCBvbmVvZkNhc2VzLmxlbmd0aCksIHVua25vd25GaWVs
ZHMpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgQnVpbGRlciBjbG9uZSgpIHsKLSAgICAgIEJ1aWxkZXIgcmVzdWx0ID0gbmV3IEJ1aWxk
ZXIodHlwZSk7Ci0gICAgICByZXN1bHQuZmllbGRzLm1lcmdlRnJvbShmaWVsZHMpOwotICAgICAg
cmVzdWx0Lm1lcmdlVW5rbm93bkZpZWxkcyh1bmtub3duRmllbGRzKTsKLSAgICAgIFN5c3RlbS5h
cnJheWNvcHkob25lb2ZDYXNlcywgMCwgcmVzdWx0Lm9uZW9mQ2FzZXMsIDAgLCBvbmVvZkNhc2Vz
Lmxlbmd0aCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBib29sZWFuIGlzSW5pdGlhbGl6ZWQoKSB7Ci0gICAgICByZXR1cm4gRHluYW1p
Y01lc3NhZ2UuaXNJbml0aWFsaXplZCh0eXBlLCBmaWVsZHMpOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBEZXNjcmlwdG9yIGdldERlc2NyaXB0b3JGb3JUeXBlKCkgewotICAg
ICAgcmV0dXJuIHR5cGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIER5bmFt
aWNNZXNzYWdlIGdldERlZmF1bHRJbnN0YW5jZUZvclR5cGUoKSB7Ci0gICAgICByZXR1cm4gZ2V0
RGVmYXVsdEluc3RhbmNlKHR5cGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGdldEFsbEZpZWxkcygpIHsKLSAgICAgIHJl
dHVybiBmaWVsZHMuZ2V0QWxsRmllbGRzKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIEJ1aWxkZXIgbmV3QnVpbGRlckZvckZpZWxkKEZpZWxkRGVzY3JpcHRvciBmaWVsZCkg
ewotICAgICAgdmVyaWZ5Q29udGFpbmluZ1R5cGUoZmllbGQpOwotCi0gICAgICBpZiAoZmllbGQu
Z2V0SmF2YVR5cGUoKSAhPSBGaWVsZERlc2NyaXB0b3IuSmF2YVR5cGUuTUVTU0FHRSkgewotICAg
ICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJuZXdC
dWlsZGVyRm9yRmllbGQgaXMgb25seSB2YWxpZCBmb3IgZmllbGRzIHdpdGggbWVzc2FnZSB0eXBl
LiIpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gbmV3IEJ1aWxkZXIoZmllbGQuZ2V0TWVzc2Fn
ZVR5cGUoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaGFz
T25lb2YoT25lb2ZEZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgICB2ZXJpZnlPbmVvZkNvbnRhaW5p
bmdUeXBlKG9uZW9mKTsKLSAgICAgIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA9IG9uZW9mQ2FzZXNb
b25lb2YuZ2V0SW5kZXgoKV07Ci0gICAgICBpZiAoZmllbGQgPT0gbnVsbCkgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgRmllbGREZXNjcmlwdG9yIGdldE9uZW9mRmllbGREZXNjcmlw
dG9yKE9uZW9mRGVzY3JpcHRvciBvbmVvZikgewotICAgICAgdmVyaWZ5T25lb2ZDb250YWluaW5n
VHlwZShvbmVvZik7Ci0gICAgICByZXR1cm4gb25lb2ZDYXNlc1tvbmVvZi5nZXRJbmRleCgpXTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBjbGVhck9uZW9mKE9u
ZW9mRGVzY3JpcHRvciBvbmVvZikgewotICAgICAgdmVyaWZ5T25lb2ZDb250YWluaW5nVHlwZShv
bmVvZik7Ci0gICAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBvbmVvZkNhc2VzW29uZW9mLmdl
dEluZGV4KCldOwotICAgICAgaWYgKGZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgY2xlYXJGaWVs
ZChmaWVsZCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNGaWVsZChGaWVsZERlc2NyaXB0b3IgZmllbGQp
IHsKLSAgICAgIHZlcmlmeUNvbnRhaW5pbmdUeXBlKGZpZWxkKTsKLSAgICAgIHJldHVybiBmaWVs
ZHMuaGFzRmllbGQoZmllbGQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBP
YmplY3QgZ2V0RmllbGQoRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICB2ZXJpZnlDb250
YWluaW5nVHlwZShmaWVsZCk7Ci0gICAgICBPYmplY3QgcmVzdWx0ID0gZmllbGRzLmdldEZpZWxk
KGZpZWxkKTsKLSAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewotICAgICAgICBpZiAoZmllbGQu
aXNSZXBlYXRlZCgpKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gQ29sbGVjdGlvbnMuZW1wdHlMaXN0
KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0SmF2YVR5cGUoKSA9PSBGaWVsZERlc2Ny
aXB0b3IuSmF2YVR5cGUuTUVTU0FHRSkgewotICAgICAgICAgIHJlc3VsdCA9IGdldERlZmF1bHRJ
bnN0YW5jZShmaWVsZC5nZXRNZXNzYWdlVHlwZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICByZXN1bHQgPSBmaWVsZC5nZXREZWZhdWx0VmFsdWUoKTsKLSAgICAgICAgfQotICAgICAg
fQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgQnVpbGRlciBzZXRGaWVsZChGaWVsZERlc2NyaXB0b3IgZmllbGQsIE9iamVjdCB2YWx1ZSkg
ewotICAgICAgdmVyaWZ5Q29udGFpbmluZ1R5cGUoZmllbGQpOwotICAgICAgZW5zdXJlSXNNdXRh
YmxlKCk7Ci0gICAgICAvLyBUT0RPKHhpYW9mZW5nKTogVGhpcyBjaGVjayBzaG91bGQgcmVhbGx5
IGJlIHB1dCBpbiBGaWVsZFNldC5zZXRGaWVsZCgpCi0gICAgICAvLyB3aGVyZSBhbGwgb3RoZXIg
c3VjaCBjaGVja3MgYXJlIGRvbmUuIEhvd2V2ZXIsIGN1cnJlbnRseQotICAgICAgLy8gRmllbGRT
ZXQuc2V0RmllbGQoKSBwZXJtaXRzIEludGVnZXIgdmFsdWUgZm9yIGVudW0gZmllbGRzIHByb2Jh
Ymx5Ci0gICAgICAvLyBiZWNhdXNlIG9mIHNvbWUgaW50ZXJuYWwgZmVhdHVyZXMgd2Ugc3VwcG9y
dC4gU2hvdWxkIGZpZ3VyZSBpdCBvdXQKLSAgICAgIC8vIGFuZCBtb3ZlIHRoaXMgY2hlY2sgdG8g
YSBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlLgotICAgICAgaWYgKGZpZWxkLmdldFR5cGUoKSA9PSBG
aWVsZERlc2NyaXB0b3IuVHlwZS5FTlVNKSB7Ci0gICAgICAgIGVuc3VyZUVudW1WYWx1ZURlc2Ny
aXB0b3IoZmllbGQsIHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIE9uZW9mRGVzY3JpcHRvciBvbmVv
ZkRlc2NyaXB0b3IgPSBmaWVsZC5nZXRDb250YWluaW5nT25lb2YoKTsKLSAgICAgIGlmIChvbmVv
ZkRlc2NyaXB0b3IgIT0gbnVsbCkgewotICAgICAgICBpbnQgaW5kZXggPSBvbmVvZkRlc2NyaXB0
b3IuZ2V0SW5kZXgoKTsKLSAgICAgICAgRmllbGREZXNjcmlwdG9yIG9sZEZpZWxkID0gb25lb2ZD
YXNlc1tpbmRleF07Ci0gICAgICAgIGlmICgob2xkRmllbGQgIT0gbnVsbCkgJiYgKG9sZEZpZWxk
ICE9IGZpZWxkKSkgewotICAgICAgICAgIGZpZWxkcy5jbGVhckZpZWxkKG9sZEZpZWxkKTsKLSAg
ICAgICAgfQotICAgICAgICBvbmVvZkNhc2VzW2luZGV4XSA9IGZpZWxkOwotICAgICAgfQotICAg
ICAgZmllbGRzLnNldEZpZWxkKGZpZWxkLCB2YWx1ZSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBjbGVhckZpZWxkKEZpZWxk
RGVzY3JpcHRvciBmaWVsZCkgewotICAgICAgdmVyaWZ5Q29udGFpbmluZ1R5cGUoZmllbGQpOwot
ICAgICAgZW5zdXJlSXNNdXRhYmxlKCk7Ci0gICAgICBPbmVvZkRlc2NyaXB0b3Igb25lb2ZEZXNj
cmlwdG9yID0gZmllbGQuZ2V0Q29udGFpbmluZ09uZW9mKCk7Ci0gICAgICBpZiAob25lb2ZEZXNj
cmlwdG9yICE9IG51bGwpIHsKLSAgICAgICAgaW50IGluZGV4ID0gb25lb2ZEZXNjcmlwdG9yLmdl
dEluZGV4KCk7Ci0gICAgICAgIGlmIChvbmVvZkNhc2VzW2luZGV4XSA9PSBmaWVsZCkgewotICAg
ICAgICAgIG9uZW9mQ2FzZXNbaW5kZXhdID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAg
ICAgZmllbGRzLmNsZWFyRmllbGQoZmllbGQpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRSZXBlYXRlZEZpZWxkQ291bnQoRmll
bGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICB2ZXJpZnlDb250YWluaW5nVHlwZShmaWVsZCk7
Ci0gICAgICByZXR1cm4gZmllbGRzLmdldFJlcGVhdGVkRmllbGRDb3VudChmaWVsZCk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBnZXRSZXBlYXRlZEZpZWxkKEZp
ZWxkRGVzY3JpcHRvciBmaWVsZCwgaW50IGluZGV4KSB7Ci0gICAgICB2ZXJpZnlDb250YWluaW5n
VHlwZShmaWVsZCk7Ci0gICAgICByZXR1cm4gZmllbGRzLmdldFJlcGVhdGVkRmllbGQoZmllbGQs
IGluZGV4KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBzZXRS
ZXBlYXRlZEZpZWxkKEZpZWxkRGVzY3JpcHRvciBmaWVsZCwgaW50IGluZGV4LCBPYmplY3QgdmFs
dWUpIHsKLSAgICAgIHZlcmlmeUNvbnRhaW5pbmdUeXBlKGZpZWxkKTsKLSAgICAgIGVuc3VyZUlz
TXV0YWJsZSgpOwotICAgICAgZmllbGRzLnNldFJlcGVhdGVkRmllbGQoZmllbGQsIGluZGV4LCB2
YWx1ZSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgQnVpbGRlciBhZGRSZXBlYXRlZEZpZWxkKEZpZWxkRGVzY3JpcHRvciBmaWVsZCwgT2Jq
ZWN0IHZhbHVlKSB7Ci0gICAgICB2ZXJpZnlDb250YWluaW5nVHlwZShmaWVsZCk7Ci0gICAgICBl
bnN1cmVJc011dGFibGUoKTsKLSAgICAgIGZpZWxkcy5hZGRSZXBlYXRlZEZpZWxkKGZpZWxkLCB2
YWx1ZSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgVW5rbm93bkZpZWxkU2V0IGdldFVua25vd25GaWVsZHMoKSB7Ci0gICAgICByZXR1cm4g
dW5rbm93bkZpZWxkczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRl
ciBzZXRVbmtub3duRmllbGRzKFVua25vd25GaWVsZFNldCB1bmtub3duRmllbGRzKSB7Ci0gICAg
ICBpZiAoZ2V0RGVzY3JpcHRvckZvclR5cGUoKS5nZXRGaWxlKCkuZ2V0U3ludGF4KCkKLSAgICAg
ICAgICA9PSBEZXNjcmlwdG9ycy5GaWxlRGVzY3JpcHRvci5TeW50YXguUFJPVE8zKSB7Ci0gICAg
ICAgIC8vIFByb3RvMyBkaXNjYXJkcyB1bmtub3duIGZpZWxkcy4KLSAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICB9Ci0gICAgICB0aGlzLnVua25vd25GaWVsZHMgPSB1bmtub3duRmllbGRzOwot
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1
aWxkZXIgbWVyZ2VVbmtub3duRmllbGRzKFVua25vd25GaWVsZFNldCB1bmtub3duRmllbGRzKSB7
Ci0gICAgICBpZiAoZ2V0RGVzY3JpcHRvckZvclR5cGUoKS5nZXRGaWxlKCkuZ2V0U3ludGF4KCkK
LSAgICAgICAgICA9PSBEZXNjcmlwdG9ycy5GaWxlRGVzY3JpcHRvci5TeW50YXguUFJPVE8zKSB7
Ci0gICAgICAgIC8vIFByb3RvMyBkaXNjYXJkcyB1bmtub3duIGZpZWxkcy4KLSAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICB9Ci0gICAgICB0aGlzLnVua25vd25GaWVsZHMgPQotICAgICAgICBV
bmtub3duRmllbGRTZXQubmV3QnVpbGRlcih0aGlzLnVua25vd25GaWVsZHMpCi0gICAgICAgICAg
ICAgICAgICAgICAgIC5tZXJnZUZyb20odW5rbm93bkZpZWxkcykKLSAgICAgICAgICAgICAgICAg
ICAgICAgLmJ1aWxkKCk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvKiogVmVy
aWZpZXMgdGhhdCB0aGUgZmllbGQgaXMgYSBmaWVsZCBvZiB0aGlzIG1lc3NhZ2UuICovCi0gICAg
cHJpdmF0ZSB2b2lkIHZlcmlmeUNvbnRhaW5pbmdUeXBlKEZpZWxkRGVzY3JpcHRvciBmaWVsZCkg
ewotICAgICAgaWYgKGZpZWxkLmdldENvbnRhaW5pbmdUeXBlKCkgIT0gdHlwZSkgewotICAgICAg
ICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJGaWVsZERl
c2NyaXB0b3IgZG9lcyBub3QgbWF0Y2ggbWVzc2FnZSB0eXBlLiIpOwotICAgICAgfQotICAgIH0K
LQotICAgIC8qKiBWZXJpZmllcyB0aGF0IHRoZSBvbmVvZiBpcyBhbiBvbmVvZiBvZiB0aGlzIG1l
c3NhZ2UuICovCi0gICAgcHJpdmF0ZSB2b2lkIHZlcmlmeU9uZW9mQ29udGFpbmluZ1R5cGUoT25l
b2ZEZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgICBpZiAob25lb2YuZ2V0Q29udGFpbmluZ1R5cGUo
KSAhPSB0eXBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24o
Ci0gICAgICAgICAgIk9uZW9mRGVzY3JpcHRvciBkb2VzIG5vdCBtYXRjaCBtZXNzYWdlIHR5cGUu
Iik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIFZlcmlmaWVzIHRoYXQgdGhlIHZhbHVlIGlz
IEVudW1WYWx1ZURlc2NyaXB0b3IgYW5kIG1hdGNoZXMgRW51bSBUeXBlLiAqLwotICAgIHByaXZh
dGUgdm9pZCBlbnN1cmVTaW5ndWxhckVudW1WYWx1ZURlc2NyaXB0b3IoCi0gICAgICAgIEZpZWxk
RGVzY3JpcHRvciBmaWVsZCwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICBpZiAodmFsdWUgPT0gbnVs
bCkgewotICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICAgIH0K
LSAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRW51bVZhbHVlRGVzY3JpcHRvcikpIHsKLSAg
ICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAiRHlu
YW1pY01lc3NhZ2Ugc2hvdWxkIHVzZSBFbnVtVmFsdWVEZXNjcmlwdG9yIHRvIHNldCBFbnVtIFZh
bHVlLiIpOwotICAgICAgfQotICAgICAgLy8gVE9ETyh4aWFvZmVuZyk6IFJlLWVuYWJsZSB0aGlz
IGNoZWNrIGFmdGVyIE9yZ3N0b3JlIGlzIGZpeGVkIHRvIG5vdAotICAgICAgLy8gc2V0IGluY29y
cmVjdCBFbnVtVmFsdWVEZXNjcmlwdG9ycy4KLSAgICAgIC8vIEVudW1EZXNjcmlwdG9yIGZpZWxk
VHlwZSA9IGZpZWxkLmdldEVudW1UeXBlKCk7Ci0gICAgICAvLyBFbnVtRGVzY3JpcHRvciBmaWVs
ZFZhbHVlVHlwZSA9ICgoRW51bVZhbHVlRGVzY3JpcHRvcikgdmFsdWUpLmdldFR5cGUoKTsKLSAg
ICAgIC8vIGlmIChmaWVsZFR5cGUgIT0gZmllbGRWYWx1ZVR5cGUpIHsKLSAgICAgIC8vICB0aHJv
dyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoCi0gICAgICAvLyAg
ICAgICJFbnVtRGVzY3JpcHRvciAlcyBvZiBmaWVsZCBkb2Vzbid0IG1hdGNoIEVudW1EZXNjcmlw
dG9yICVzIG9mIGZpZWxkIHZhbHVlIiwKLSAgICAgIC8vICAgICAgZmllbGRUeXBlLmdldEZ1bGxO
YW1lKCksIGZpZWxkVmFsdWVUeXBlLmdldEZ1bGxOYW1lKCkpKTsKLSAgICAgIC8vIH0KLSAgICB9
Ci0KLSAgICAvKiogVmVyaWZpZXMgdGhlIHZhbHVlIGZvciBhbiBlbnVtIGZpZWxkLiAqLwotICAg
IHByaXZhdGUgdm9pZCBlbnN1cmVFbnVtVmFsdWVEZXNjcmlwdG9yKAotICAgICAgICBGaWVsZERl
c2NyaXB0b3IgZmllbGQsIE9iamVjdCB2YWx1ZSkgewotICAgICAgaWYgKGZpZWxkLmlzUmVwZWF0
ZWQoKSkgewotICAgICAgICBmb3IgKE9iamVjdCBpdGVtIDogKExpc3QpIHZhbHVlKSB7Ci0gICAg
ICAgICAgZW5zdXJlU2luZ3VsYXJFbnVtVmFsdWVEZXNjcmlwdG9yKGZpZWxkLCBpdGVtKTsKLSAg
ICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgIGVuc3VyZVNpbmd1bGFyRW51bVZhbHVl
RGVzY3JpcHRvcihmaWVsZCwgdmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUg
dm9pZCBlbnN1cmVJc011dGFibGUoKSB7Ci0gICAgICBpZiAoZmllbGRzLmlzSW1tdXRhYmxlKCkp
IHsKLSAgICAgICAgZmllbGRzID0gZmllbGRzLmNsb25lKCk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGNvbS5nb29nbGUucHJvdG9idWYuTWVzc2FnZS5CdWls
ZGVyIGdldEZpZWxkQnVpbGRlcihGaWVsZERlc2NyaXB0b3IgZmllbGQpIHsKLSAgICAgIC8vIFRP
RE8oeGlhbmdsKTogbmVlZCBpbXBsZW1lbnRhdGlvbiBmb3IgZHluYW1pYyBtZXNzYWdlCi0gICAg
ICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICJnZXRG
aWVsZEJ1aWxkZXIoKSBjYWxsZWQgb24gYSBkeW5hbWljIG1lc3NhZ2UgdHlwZS4iKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgY29tLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdl
LkJ1aWxkZXIgZ2V0UmVwZWF0ZWRGaWVsZEJ1aWxkZXIoRmllbGREZXNjcmlwdG9yIGZpZWxkLAot
ICAgICAgICBpbnQgaW5kZXgpIHsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlv
bkV4Y2VwdGlvbigKLSAgICAgICAgImdldFJlcGVhdGVkRmllbGRCdWlsZGVyKCkgY2FsbGVkIG9u
IGEgZHluYW1pYyBtZXNzYWdlIHR5cGUuIik7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2ph
dmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRXhwZXJpbWVudGFsQXBp
LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRXhwZXJp
bWVudGFsQXBpLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZDRjODg0OTI4
NjJkNmUwNmU4OGE2ZTg2OWUwMGU1NDNlYWQyOTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL0V4cGVyaW1lbnRhbEFwaS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2ds
ZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQ7Ci1p
bXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGU7Ci1pbXBvcnQgamF2YS5sYW5n
LmFubm90YXRpb24uUmV0ZW50aW9uOwotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVu
dGlvblBvbGljeTsKLWltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQ7Ci0KLS8qKgot
ICogSW5kaWNhdGVzIGEgcHVibGljIEFQSSB0aGF0IGNhbiBjaGFuZ2UgYXQgYW55IHRpbWUsIGFu
ZCBoYXMgbm8gZ3VhcmFudGVlIG9mIEFQSSBzdGFiaWxpdHkgYW5kCi0gKiBiYWNrd2FyZC1jb21w
YXRpYmlsaXR5LgotICoKLSAqIDxwPlVzYWdlIGd1aWRlbGluZXM6Ci0gKiA8b2w+Ci0gKiA8bGk+
VGhpcyBhbm5vdGF0aW9uIGlzIHVzZWQgb25seSBvbiBwdWJsaWMgQVBJLiBJbnRlcm5hbCBpbnRl
cmZhY2VzIHNob3VsZCBub3QgdXNlIGl0LjwvbGk+Ci0gKiA8bGk+VGhpcyBhbm5vdGF0aW9uIHNo
b3VsZCBvbmx5IGJlIGFkZGVkIHRvIG5ldyBBUElzLiBBZGRpbmcgaXQgdG8gYW4gZXhpc3Rpbmcg
QVBJIGlzCi0gKiBjb25zaWRlcmVkIEFQSS1icmVha2luZy48L2xpPgotICogPGxpPlJlbW92aW5n
IHRoaXMgYW5ub3RhdGlvbiBmcm9tIGFuIEFQSSBnaXZlcyBpdCBzdGFibGUgc3RhdHVzLjwvbGk+
Ci0gKiA8L29sPgotICovCi1AUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCi1AVGFy
Z2V0KHsKLSAgICBFbGVtZW50VHlwZS5BTk5PVEFUSU9OX1RZUEUsCi0gICAgRWxlbWVudFR5cGUu
Q09OU1RSVUNUT1IsCi0gICAgRWxlbWVudFR5cGUuRklFTEQsCi0gICAgRWxlbWVudFR5cGUuTUVU
SE9ELAotICAgIEVsZW1lbnRUeXBlLlBBQ0tBR0UsCi0gICAgRWxlbWVudFR5cGUuVFlQRX0pCi1A
RG9jdW1lbnRlZAotcHVibGljIEBpbnRlcmZhY2UgRXhwZXJpbWVudGFsQXBpIHsKLSAgLyoqCi0g
ICAqIENvbnRleHQgaW5mb3JtYXRpb24gc3VjaCBhcyBsaW5rcyB0byBkaXNjdXNzaW9uIHRocmVh
ZCwgdHJhY2tpbmcgaXNzdWUgZXRjLgotICAgKi8KLSAgU3RyaW5nIHZhbHVlKCkgZGVmYXVsdCAi
IjsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL0V4dGVuc2lvbi5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL0V4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
OGVjNWI0NTQxNmNjMGQ1YWZmZjM5ODIzZDUxMzRkZjM0ZTc4NGE1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9FeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5n
b29nbGUucHJvdG9idWY7Ci0KLS8qKgotICogSW50ZXJmYWNlIHRoYXQgZ2VuZXJhdGVkIGV4dGVu
c2lvbnMgaW1wbGVtZW50LgotICoKLSAqIEBhdXRob3IgbGl1amlzaUBnb29nbGUuY29tIChKaXNp
IExpdSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEV4dGVuc2lvbjxDb250YWluaW5nVHlw
ZSBleHRlbmRzIE1lc3NhZ2VMaXRlLCBUeXBlPgotICAgIGV4dGVuZHMgRXh0ZW5zaW9uTGl0ZTxD
b250YWluaW5nVHlwZSwgVHlwZT4gewotCi0gIC8qKiBSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIG9m
IHRoZSBleHRlbnNpb24uICovCi0gIHB1YmxpYyBhYnN0cmFjdCBEZXNjcmlwdG9ycy5GaWVsZERl
c2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpOwotCi0gIC8qKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90
IHRoaXMgZXh0ZW5zaW9uIGlzIGEgTGl0ZSBFeHRlbnNpb24uICovCi0gIEBPdmVycmlkZQotICBm
aW5hbCBib29sZWFuIGlzTGl0ZSgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBB
bGwgdGhlIG1ldGhvZHMgYmVsb3cgYXJlIGV4dGVuc2lvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxz
LgotCi0gIC8qKgotICAgKiBUaGUgQVBJIHR5cGUgdGhhdCB0aGUgZXh0ZW5zaW9uIGlzIHVzZWQg
Zm9yLgotICAgKi8KLSAgcHJvdGVjdGVkIGVudW0gRXh0ZW5zaW9uVHlwZSB7Ci0gICAgSU1NVVRB
QkxFLAotICAgIE1VVEFCTEUsCi0gICAgUFJPVE8xLAotICB9Ci0KLSAgcHJvdGVjdGVkIEV4dGVu
c2lvblR5cGUgZ2V0RXh0ZW5zaW9uVHlwZSgpIHsKLSAgICAvLyBUT0RPKGxpdWppc2kpOiBtYWtl
IHRoaXMgYWJzdHJhY3QgYWZ0ZXIgd2UgZml4IHByb3RvMS4KLSAgICByZXR1cm4gRXh0ZW5zaW9u
VHlwZS5JTU1VVEFCTEU7Ci0gIH0KLQotICAvKioKLSAgICogVHlwZSBvZiBhIG1lc3NhZ2UgZXh0
ZW5zaW9uLgotICAgKi8KLSAgcHVibGljIGVudW0gTWVzc2FnZVR5cGUgewotICAgIFBST1RPMSwK
LSAgICBQUk9UTzIsCi0gIH0KLSAgCi0gIC8qKgotICAgKiBJZiB0aGUgZXh0ZW5zaW9uIGlzIGEg
bWVzc2FnZSBleHRlbnNpb24gKGkuZS4sIGdldExpdGVUeXBlKCkgPT0gTUVTU0FHRSksCi0gICAq
IHJldHVybnMgdGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UsIG90aGVyd2lzZSB1bmRlZmluZWQuCi0g
ICAqLwotICBwdWJsaWMgTWVzc2FnZVR5cGUgZ2V0TWVzc2FnZVR5cGUoKSB7Ci0gICAgcmV0dXJu
IE1lc3NhZ2VUeXBlLlBST1RPMjsKLSAgfQotCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBPYmplY3Qg
ZnJvbVJlZmxlY3Rpb25UeXBlKE9iamVjdCB2YWx1ZSk7Ci0gIHByb3RlY3RlZCBhYnN0cmFjdCBP
YmplY3Qgc2luZ3VsYXJGcm9tUmVmbGVjdGlvblR5cGUoT2JqZWN0IHZhbHVlKTsKLSAgcHJvdGVj
dGVkIGFic3RyYWN0IE9iamVjdCB0b1JlZmxlY3Rpb25UeXBlKE9iamVjdCB2YWx1ZSk7Ci0gIHBy
b3RlY3RlZCBhYnN0cmFjdCBPYmplY3Qgc2luZ3VsYXJUb1JlZmxlY3Rpb25UeXBlKE9iamVjdCB2
YWx1ZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvRXh0ZW5zaW9uTGl0ZS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL0V4dGVuc2lvbkxpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjhmNWJkMmM0ZmQwYzM4NDM2YTk5ZDJkMGIzYmIxZjdiZjVkM2M4Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFp
bi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRXh0ZW5zaW9uTGl0ZS5qYXZhCisrKyAvZGV2L251
bGwKQEAgLTEsNjMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotLyoqCi0gKiBMaXRlIGludGVyZmFjZSB0
aGF0IGdlbmVyYXRlZCBleHRlbnNpb25zIGltcGxlbWVudC4KLSAqIDxwPgotICogTWV0aG9kcyBh
cmUgZm9yIHVzZSBieSBnZW5lcmF0ZWQgY29kZSBvbmx5LiBZb3UgY2FuIGhvbGQgYSByZWZlcmVu
Y2UgdG8KLSAqIGV4dGVuc2lvbnMgdXNpbmcgdGhpcyB0eXBlIG5hbWUuCi0gKi8KLXB1YmxpYyBh
YnN0cmFjdCBjbGFzcyBFeHRlbnNpb25MaXRlPENvbnRhaW5pbmdUeXBlIGV4dGVuZHMgTWVzc2Fn
ZUxpdGUsIFR5cGU+IHsKLQotICAvKiogUmV0dXJucyB0aGUgZmllbGQgbnVtYmVyIG9mIHRoZSBl
eHRlbnNpb24uICovCi0gIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0TnVtYmVyKCk7Ci0KLSAgLyoq
IFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGZpZWxkLiAqLwotICBwdWJsaWMgYWJzdHJhY3QgV2ly
ZUZvcm1hdC5GaWVsZFR5cGUgZ2V0TGl0ZVR5cGUoKTsKLQotICAvKiogUmV0dXJucyB3aGV0aGVy
IGl0IGlzIGEgcmVwZWF0ZWQgZmllbGQuICovCi0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlz
UmVwZWF0ZWQoKTsKLQotICAvKiogUmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgZXh0
ZW5zaW9uIGZpZWxkLiAqLwotICBwdWJsaWMgYWJzdHJhY3QgVHlwZSBnZXREZWZhdWx0VmFsdWUo
KTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBpbnN0YW5jZSBvZiB0aGUgZXh0
ZW5zaW9uIGZpZWxkLCBpZiBpdCdzIGEgbWVzc2FnZQotICAgKiBleHRlbnNpb24uCi0gICAqLwot
ICBwdWJsaWMgYWJzdHJhY3QgTWVzc2FnZUxpdGUgZ2V0TWVzc2FnZURlZmF1bHRJbnN0YW5jZSgp
OwotICAKLSAgLyoqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhpcyBleHRlbnNpb24gaXMgYSBM
aXRlIEV4dGVuc2lvbi4gKi8KLSAgYm9vbGVhbiBpc0xpdGUoKSB7Ci0gICAgcmV0dXJuIHRydWU7
Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9FeHRlbnNpb25SZWdpc3RyeS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9j
b20vZ29vZ2xlL3Byb3RvYnVmL0V4dGVuc2lvblJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwNjczOTJmYTYwNThiNDhlYTI2ZTE4ZDlkNTQzMjNlMTIzOTk1OTYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUv
c3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0V4dGVuc2lvblJlZ2lzdHJ5LmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSwzOTIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGNvbS5n
b29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xl
LnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvcjsKLQotaW1wb3J0IGphdmEudXRp
bC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZh
LnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0
aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLS8qKgotICogQSB0YWJsZSBvZiBrbm93
biBleHRlbnNpb25zLCBzZWFyY2hhYmxlIGJ5IG5hbWUgb3IgZmllbGQgbnVtYmVyLiAgV2hlbgot
ICogcGFyc2luZyBhIHByb3RvY29sIG1lc3NhZ2UgdGhhdCBtaWdodCBoYXZlIGV4dGVuc2lvbnMs
IHlvdSBtdXN0IHByb3ZpZGUKLSAqIGFuIHtAY29kZSBFeHRlbnNpb25SZWdpc3RyeX0gaW4gd2hp
Y2ggeW91IGhhdmUgcmVnaXN0ZXJlZCBhbnkgZXh0ZW5zaW9ucwotICogdGhhdCB5b3Ugd2FudCB0
byBiZSBhYmxlIHRvIHBhcnNlLiAgT3RoZXJ3aXNlLCB0aG9zZSBleHRlbnNpb25zIHdpbGwganVz
dAotICogYmUgdHJlYXRlZCBsaWtlIHVua25vd24gZmllbGRzLgotICoKLSAqIDxwPkZvciBleGFt
cGxlLCBpZiB5b3UgaGFkIHRoZSB7QGNvZGUgLnByb3RvfSBmaWxlOgotICoKLSAqIDxwcmU+Ci0g
KiBvcHRpb24gamF2YV9jbGFzcyA9ICJNeVByb3RvIjsKLSAqCi0gKiBtZXNzYWdlIEZvbyB7Ci0g
KiAgIGV4dGVuc2lvbnMgMTAwMCB0byBtYXg7Ci0gKiB9Ci0gKgotICogZXh0ZW5kIEZvbyB7Ci0g
KiAgIG9wdGlvbmFsIGludDMyIGJhcjsKLSAqIH0KLSAqIDwvcHJlPgotICoKLSAqIFRoZW4geW91
IG1pZ2h0IHdyaXRlIGNvZGUgbGlrZToKLSAqCi0gKiA8cHJlPgotICogRXh0ZW5zaW9uUmVnaXN0
cnkgcmVnaXN0cnkgPSBFeHRlbnNpb25SZWdpc3RyeS5uZXdJbnN0YW5jZSgpOwotICogcmVnaXN0
cnkuYWRkKE15UHJvdG8uYmFyKTsKLSAqIE15UHJvdG8uRm9vIG1lc3NhZ2UgPSBNeVByb3RvLkZv
by5wYXJzZUZyb20oaW5wdXQsIHJlZ2lzdHJ5KTsKLSAqIDwvcHJlPgotICoKLSAqIDxwPkJhY2tn
cm91bmQ6Ci0gKgotICogPHA+WW91IG1pZ2h0IHdvbmRlciB3aHkgdGhpcyBpcyBuZWNlc3Nhcnku
ICBUd28gYWx0ZXJuYXRpdmVzIG1pZ2h0IGNvbWUgdG8KLSAqIG1pbmQuICBGaXJzdCwgeW91IG1p
Z2h0IGltYWdpbmUgYSBzeXN0ZW0gd2hlcmUgZ2VuZXJhdGVkIGV4dGVuc2lvbnMgYXJlCi0gKiBh
dXRvbWF0aWNhbGx5IHJlZ2lzdGVyZWQgd2hlbiB0aGVpciBjb250YWluaW5nIGNsYXNzZXMgYXJl
IGxvYWRlZC4gIFRoaXMKLSAqIGlzIGEgcG9wdWxhciB0ZWNobmlxdWUsIGJ1dCBpcyBiYWQgZGVz
aWduOyBhbW9uZyBvdGhlciB0aGluZ3MsIGl0IGNyZWF0ZXMgYQotICogc2l0dWF0aW9uIHdoZXJl
IGJlaGF2aW9yIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIHdoYXQgY2xhc3NlcyBoYXBwZW4gdG8g
YmUKLSAqIGxvYWRlZC4gIEl0IGFsc28gaW50cm9kdWNlcyBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxp
dHksIGJlY2F1c2UgYW4KLSAqIHVucHJpdmlsZWdlZCBjbGFzcyBjb3VsZCBjYXVzZSBpdHMgY29k
ZSB0byBiZSBjYWxsZWQgdW5leHBlY3RlZGx5IGZyb20gYQotICogcHJpdmlsZWdlZCBjbGFzcyBi
eSByZWdpc3RlcmluZyBpdHNlbGYgYXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSByaWdodCB0eXBlLgot
ICoKLSAqIDxwPkFub3RoZXIgb3B0aW9uIHlvdSBtaWdodCBjb25zaWRlciBpcyBsYXp5IHBhcnNp
bmc6IGRvIG5vdCBwYXJzZSBhbgotICogZXh0ZW5zaW9uIHVudGlsIGl0IGlzIGZpcnN0IHJlcXVl
c3RlZCwgYXQgd2hpY2ggcG9pbnQgdGhlIGNhbGxlciBtdXN0Ci0gKiBwcm92aWRlIGEgdHlwZSB0
byB1c2UuICBUaGlzIGludHJvZHVjZXMgYSBkaWZmZXJlbnQgc2V0IG9mIHByb2JsZW1zLiAgRmly
c3QsCi0gKiBpdCB3b3VsZCByZXF1aXJlIGEgbXV0ZXggbG9jayBhbnkgdGltZSBhbiBleHRlbnNp
b24gd2FzIGFjY2Vzc2VkLCB3aGljaAotICogd291bGQgYmUgc2xvdy4gIFNlY29uZCwgY29ycnVw
dCBkYXRhIHdvdWxkIG5vdCBiZSBkZXRlY3RlZCB1bnRpbCBmaXJzdAotICogYWNjZXNzLCBhdCB3
aGljaCBwb2ludCBpdCB3b3VsZCBiZSBtdWNoIGhhcmRlciB0byBkZWFsIHdpdGggaXQuICBUaGly
ZCwgaXQKLSAqIGNvdWxkIHZpb2xhdGUgdGhlIGV4cGVjdGF0aW9uIHRoYXQgbWVzc2FnZSBvYmpl
Y3RzIGFyZSBpbW11dGFibGUsIHNpbmNlIHRoZQotICogdHlwZSBwcm92aWRlZCBjb3VsZCBiZSBh
bnkgYXJiaXRyYXJ5IG1lc3NhZ2UgY2xhc3MuICBBbiB1bnByaXZpbGVnZWQgdXNlcgotICogY291
bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyB0byBpbmplY3QgYSBtdXRhYmxlIG9iamVjdCBpbnRv
IGEgbWVzc2FnZQotICogYmVsb25naW5nIHRvIHByaXZpbGVnZWQgY29kZSBhbmQgY3JlYXRlIG1p
c2NoaWVmLgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdvb2dsZS5jb20gS2VudG9uIFZhcmRhCi0g
Ki8KLXB1YmxpYyBjbGFzcyBFeHRlbnNpb25SZWdpc3RyeSBleHRlbmRzIEV4dGVuc2lvblJlZ2lz
dHJ5TGl0ZSB7Ci0gIC8qKiBDb25zdHJ1Y3QgYSBuZXcsIGVtcHR5IGluc3RhbmNlLiAqLwotICBw
dWJsaWMgc3RhdGljIEV4dGVuc2lvblJlZ2lzdHJ5IG5ld0luc3RhbmNlKCkgewotICAgIHJldHVy
biBuZXcgRXh0ZW5zaW9uUmVnaXN0cnkoKTsKLSAgfQotCi0gIC8qKiBHZXQgdGhlIHVubW9kaWZp
YWJsZSBzaW5nbGV0b24gZW1wdHkgaW5zdGFuY2UuICovCi0gIHB1YmxpYyBzdGF0aWMgRXh0ZW5z
aW9uUmVnaXN0cnkgZ2V0RW1wdHlSZWdpc3RyeSgpIHsKLSAgICByZXR1cm4gRU1QVFk7Ci0gIH0K
LQotCi0gIC8qKiBSZXR1cm5zIGFuIHVubW9kaWZpYWJsZSB2aWV3IG9mIHRoZSByZWdpc3RyeS4g
Ki8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBFeHRlbnNpb25SZWdpc3RyeSBnZXRVbm1vZGlmaWFi
bGUoKSB7Ci0gICAgcmV0dXJuIG5ldyBFeHRlbnNpb25SZWdpc3RyeSh0aGlzKTsKLSAgfQotCi0g
IC8qKiBBIChEZXNjcmlwdG9yLCBNZXNzYWdlKSBwYWlyLCByZXR1cm5lZCBieSBsb29rdXAgbWV0
aG9kcy4gKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBFeHRlbnNpb25JbmZvIHsKLSAg
ICAvKiogVGhlIGV4dGVuc2lvbidzIGRlc2NyaXB0b3IuICovCi0gICAgcHVibGljIGZpbmFsIEZp
ZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotCi0gICAgLyoqCi0gICAgICogQSBkZWZhdWx0IGlu
c3RhbmNlIG9mIHRoZSBleHRlbnNpb24ncyB0eXBlLCBpZiBpdCBoYXMgYSBtZXNzYWdlIHR5cGUu
Ci0gICAgICogT3RoZXJ3aXNlLCB7QGNvZGUgbnVsbH0uCi0gICAgICovCi0gICAgcHVibGljIGZp
bmFsIE1lc3NhZ2UgZGVmYXVsdEluc3RhbmNlOwotCi0gICAgcHJpdmF0ZSBFeHRlbnNpb25JbmZv
KGZpbmFsIEZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7Ci0gICAgICB0aGlzLmRlc2NyaXB0
b3IgPSBkZXNjcmlwdG9yOwotICAgICAgZGVmYXVsdEluc3RhbmNlID0gbnVsbDsKLSAgICB9Ci0g
ICAgcHJpdmF0ZSBFeHRlbnNpb25JbmZvKGZpbmFsIEZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBNZXNzYWdlIGRlZmF1bHRJbnN0YW5j
ZSkgewotICAgICAgdGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgICAgIHRoaXMuZGVm
YXVsdEluc3RhbmNlID0gZGVmYXVsdEluc3RhbmNlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAg
KiBEZXByZWNhdGVkLiBVc2Uge0BsaW5rICNmaW5kSW1tdXRhYmxlRXh0ZW5zaW9uQnlOYW1lKFN0
cmluZyl9IGluc3RlYWQuCi0gICAqLwotICBwdWJsaWMgRXh0ZW5zaW9uSW5mbyBmaW5kRXh0ZW5z
aW9uQnlOYW1lKGZpbmFsIFN0cmluZyBmdWxsTmFtZSkgewotICAgIHJldHVybiBmaW5kSW1tdXRh
YmxlRXh0ZW5zaW9uQnlOYW1lKGZ1bGxOYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBGaW5kIGFu
IGV4dGVuc2lvbiBmb3IgaW1tdXRhYmxlIEFQSXMgYnkgZnVsbHktcXVhbGlmaWVkIGZpZWxkIG5h
bWUsCi0gICAqIGluIHRoZSBwcm90byBuYW1lc3BhY2UuIGkuZS4ge0Bjb2RlIHJlc3VsdC5kZXNj
cmlwdG9yLmZ1bGxOYW1lKCl9IHdpbGwKLSAgICogbWF0Y2gge0Bjb2RlIGZ1bGxOYW1lfSBpZiBh
IG1hdGNoIGlzIGZvdW5kLgotICAgKgotICAgKiBAcmV0dXJuIEluZm9ybWF0aW9uIGFib3V0IHRo
ZSBleHRlbnNpb24gaWYgZm91bmQsIG9yIHtAY29kZSBudWxsfQotICAgKiAgICAgICAgIG90aGVy
d2lzZS4KLSAgICovCi0gIHB1YmxpYyBFeHRlbnNpb25JbmZvIGZpbmRJbW11dGFibGVFeHRlbnNp
b25CeU5hbWUoZmluYWwgU3RyaW5nIGZ1bGxOYW1lKSB7Ci0gICAgcmV0dXJuIGltbXV0YWJsZUV4
dGVuc2lvbnNCeU5hbWUuZ2V0KGZ1bGxOYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBGaW5kIGFu
IGV4dGVuc2lvbiBmb3IgbXV0YWJsZSBBUElzIGJ5IGZ1bGx5LXF1YWxpZmllZCBmaWVsZCBuYW1l
LAotICAgKiBpbiB0aGUgcHJvdG8gbmFtZXNwYWNlLiBpLmUuIHtAY29kZSByZXN1bHQuZGVzY3Jp
cHRvci5mdWxsTmFtZSgpfSB3aWxsCi0gICAqIG1hdGNoIHtAY29kZSBmdWxsTmFtZX0gaWYgYSBt
YXRjaCBpcyBmb3VuZC4KLSAgICoKLSAgICogQHJldHVybiBJbmZvcm1hdGlvbiBhYm91dCB0aGUg
ZXh0ZW5zaW9uIGlmIGZvdW5kLCBvciB7QGNvZGUgbnVsbH0KLSAgICogICAgICAgICBvdGhlcndp
c2UuCi0gICAqLwotICBwdWJsaWMgRXh0ZW5zaW9uSW5mbyBmaW5kTXV0YWJsZUV4dGVuc2lvbkJ5
TmFtZShmaW5hbCBTdHJpbmcgZnVsbE5hbWUpIHsKLSAgICByZXR1cm4gbXV0YWJsZUV4dGVuc2lv
bnNCeU5hbWUuZ2V0KGZ1bGxOYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBEZXByZWNhdGVkLiBV
c2Uge0BsaW5rICNmaW5kSW1tdXRhYmxlRXh0ZW5zaW9uQnlOdW1iZXIoCi0gICAqIERlc2NyaXB0
b3JzLkRlc2NyaXB0b3IsIGludCl9Ci0gICAqLwotICBwdWJsaWMgRXh0ZW5zaW9uSW5mbyBmaW5k
RXh0ZW5zaW9uQnlOdW1iZXIoCi0gICAgICBmaW5hbCBEZXNjcmlwdG9yIGNvbnRhaW5pbmdUeXBl
LCBmaW5hbCBpbnQgZmllbGROdW1iZXIpIHsKLSAgICByZXR1cm4gZmluZEltbXV0YWJsZUV4dGVu
c2lvbkJ5TnVtYmVyKGNvbnRhaW5pbmdUeXBlLCBmaWVsZE51bWJlcik7Ci0gIH0KLQotICAvKioK
LSAgICogRmluZCBhbiBleHRlbnNpb24gYnkgY29udGFpbmluZyB0eXBlIGFuZCBmaWVsZCBudW1i
ZXIgZm9yIGltbXV0YWJsZSBBUElzLgotICAgKgotICAgKiBAcmV0dXJuIEluZm9ybWF0aW9uIGFi
b3V0IHRoZSBleHRlbnNpb24gaWYgZm91bmQsIG9yIHtAY29kZSBudWxsfQotICAgKiAgICAgICAg
IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBFeHRlbnNpb25JbmZvIGZpbmRJbW11dGFibGVF
eHRlbnNpb25CeU51bWJlcigKLSAgICAgIGZpbmFsIERlc2NyaXB0b3IgY29udGFpbmluZ1R5cGUs
IGZpbmFsIGludCBmaWVsZE51bWJlcikgewotICAgIHJldHVybiBpbW11dGFibGVFeHRlbnNpb25z
QnlOdW1iZXIuZ2V0KAotICAgICAgbmV3IERlc2NyaXB0b3JJbnRQYWlyKGNvbnRhaW5pbmdUeXBl
LCBmaWVsZE51bWJlcikpOwotICB9Ci0KLSAgLyoqCi0gICAqIEZpbmQgYW4gZXh0ZW5zaW9uIGJ5
IGNvbnRhaW5pbmcgdHlwZSBhbmQgZmllbGQgbnVtYmVyIGZvciBtdXRhYmxlIEFQSXMuCi0gICAq
Ci0gICAqIEByZXR1cm4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4dGVuc2lvbiBpZiBmb3VuZCwg
b3Ige0Bjb2RlIG51bGx9Ci0gICAqICAgICAgICAgb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGlj
IEV4dGVuc2lvbkluZm8gZmluZE11dGFibGVFeHRlbnNpb25CeU51bWJlcigKLSAgICAgIGZpbmFs
IERlc2NyaXB0b3IgY29udGFpbmluZ1R5cGUsIGZpbmFsIGludCBmaWVsZE51bWJlcikgewotICAg
IHJldHVybiBtdXRhYmxlRXh0ZW5zaW9uc0J5TnVtYmVyLmdldCgKLSAgICAgICAgbmV3IERlc2Ny
aXB0b3JJbnRQYWlyKGNvbnRhaW5pbmdUeXBlLCBmaWVsZE51bWJlcikpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIEZpbmQgYWxsIGV4dGVuc2lvbnMgZm9yIG11dGFibGUgQVBJcyBieSBmdWxseS1xdWFs
aWZpZWQgbmFtZSBvZgotICAgKiBleHRlbmRlZCBjbGFzcy4gTm90ZSB0aGF0IHRoaXMgbWV0aG9k
IGlzIG1vcmUgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZQotICAgKiB0aGFuIGdldHRpbmcgYSBz
aW5nbGUgZXh0ZW5zaW9uIGJ5IG5hbWUgb3IgbnVtYmVyLgotICAgKgotICAgKiBAcmV0dXJuIElu
Zm9ybWF0aW9uIGFib3V0IHRoZSBleHRlbnNpb25zIGZvdW5kLCBvciB7QGNvZGUgbnVsbH0gaWYg
dGhlcmUKLSAgICogICAgIGFyZSBub25lLgotICAgKi8KLSAgcHVibGljIFNldDxFeHRlbnNpb25J
bmZvPiBnZXRBbGxNdXRhYmxlRXh0ZW5zaW9uc0J5RXh0ZW5kZWRUeXBlKGZpbmFsIFN0cmluZyBm
dWxsTmFtZSkgewotICAgIEhhc2hTZXQ8RXh0ZW5zaW9uSW5mbz4gZXh0ZW5zaW9ucyA9IG5ldyBI
YXNoU2V0PEV4dGVuc2lvbkluZm8+KCk7Ci0gICAgZm9yIChEZXNjcmlwdG9ySW50UGFpciBwYWly
IDogbXV0YWJsZUV4dGVuc2lvbnNCeU51bWJlci5rZXlTZXQoKSkgewotICAgICAgaWYgKHBhaXIu
ZGVzY3JpcHRvci5nZXRGdWxsTmFtZSgpLmVxdWFscyhmdWxsTmFtZSkpIHsKLSAgICAgICAgZXh0
ZW5zaW9ucy5hZGQobXV0YWJsZUV4dGVuc2lvbnNCeU51bWJlci5nZXQocGFpcikpOwotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gZXh0ZW5zaW9uczsKLSAgfQotCi0gIC8qKgotICAgKiBGaW5k
IGFsbCBleHRlbnNpb25zIGZvciBpbW11dGFibGUgQVBJcyBieSBmdWxseS1xdWFsaWZpZWQgbmFt
ZSBvZgotICAgKiBleHRlbmRlZCBjbGFzcy4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIG1vcmUg
Y29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZQotICAgKiB0aGFuIGdldHRpbmcgYSBzaW5nbGUgZXh0
ZW5zaW9uIGJ5IG5hbWUgb3IgbnVtYmVyLgotICAgKgotICAgKiBAcmV0dXJuIEluZm9ybWF0aW9u
IGFib3V0IHRoZSBleHRlbnNpb25zIGZvdW5kLCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlcmUKLSAg
ICogICAgIGFyZSBub25lLgotICAgKi8KLSAgcHVibGljIFNldDxFeHRlbnNpb25JbmZvPiBnZXRB
bGxJbW11dGFibGVFeHRlbnNpb25zQnlFeHRlbmRlZFR5cGUoZmluYWwgU3RyaW5nIGZ1bGxOYW1l
KSB7Ci0gICAgSGFzaFNldDxFeHRlbnNpb25JbmZvPiBleHRlbnNpb25zID0gbmV3IEhhc2hTZXQ8
RXh0ZW5zaW9uSW5mbz4oKTsKLSAgICBmb3IgKERlc2NyaXB0b3JJbnRQYWlyIHBhaXIgOiBpbW11
dGFibGVFeHRlbnNpb25zQnlOdW1iZXIua2V5U2V0KCkpIHsKLSAgICAgIGlmIChwYWlyLmRlc2Ny
aXB0b3IuZ2V0RnVsbE5hbWUoKS5lcXVhbHMoZnVsbE5hbWUpKSB7Ci0gICAgICAgIGV4dGVuc2lv
bnMuYWRkKGltbXV0YWJsZUV4dGVuc2lvbnNCeU51bWJlci5nZXQocGFpcikpOwotICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gZXh0ZW5zaW9uczsKLSAgfQotCi0gIC8qKiBBZGQgYW4gZXh0ZW5z
aW9uIGZyb20gYSBnZW5lcmF0ZWQgZmlsZSB0byB0aGUgcmVnaXN0cnkuICovCi0gIHB1YmxpYyB2
b2lkIGFkZChmaW5hbCBFeHRlbnNpb248PywgPz4gZXh0ZW5zaW9uKSB7Ci0gICAgaWYgKGV4dGVu
c2lvbi5nZXRFeHRlbnNpb25UeXBlKCkgIT0gRXh0ZW5zaW9uLkV4dGVuc2lvblR5cGUuSU1NVVRB
QkxFICYmCi0gICAgICAgIGV4dGVuc2lvbi5nZXRFeHRlbnNpb25UeXBlKCkgIT0gRXh0ZW5zaW9u
LkV4dGVuc2lvblR5cGUuTVVUQUJMRSkgewotICAgICAgLy8gZG8gbm90IHN1cHBvcnQgb3RoZXIg
ZXh0ZW5zaW9uIHR5cGVzLiBpZ25vcmUKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYWRkKG5l
d0V4dGVuc2lvbkluZm8oZXh0ZW5zaW9uKSwgZXh0ZW5zaW9uLmdldEV4dGVuc2lvblR5cGUoKSk7
Ci0gIH0KLQotICBzdGF0aWMgRXh0ZW5zaW9uSW5mbyBuZXdFeHRlbnNpb25JbmZvKGZpbmFsIEV4
dGVuc2lvbjw/LCA/PiBleHRlbnNpb24pIHsKLSAgICBpZiAoZXh0ZW5zaW9uLmdldERlc2NyaXB0
b3IoKS5nZXRKYXZhVHlwZSgpID09Ci0gICAgICAgIEZpZWxkRGVzY3JpcHRvci5KYXZhVHlwZS5N
RVNTQUdFKSB7Ci0gICAgICBpZiAoZXh0ZW5zaW9uLmdldE1lc3NhZ2VEZWZhdWx0SW5zdGFuY2Uo
KSA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0g
ICAgICAgICAgICAiUmVnaXN0ZXJlZCBtZXNzYWdlLXR5cGUgZXh0ZW5zaW9uIGhhZCBudWxsIGRl
ZmF1bHQgaW5zdGFuY2U6ICIgKwotICAgICAgICAgICAgICAgIGV4dGVuc2lvbi5nZXREZXNjcmlw
dG9yKCkuZ2V0RnVsbE5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV3IEV4dGVuc2lv
bkluZm8oZXh0ZW5zaW9uLmdldERlc2NyaXB0b3IoKSwKLSAgICAgICAgICAoTWVzc2FnZSkgZXh0
ZW5zaW9uLmdldE1lc3NhZ2VEZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHJldHVybiBuZXcgRXh0ZW5zaW9uSW5mbyhleHRlbnNpb24uZ2V0RGVzY3JpcHRvcigpLCBudWxs
KTsKLSAgICB9Ci0gIH0KLQotICAvKiogQWRkIGEgbm9uLW1lc3NhZ2UtdHlwZSBleHRlbnNpb24g
dG8gdGhlIHJlZ2lzdHJ5IGJ5IGRlc2NyaXB0b3IuICovCi0gIHB1YmxpYyB2b2lkIGFkZChmaW5h
bCBGaWVsZERlc2NyaXB0b3IgdHlwZSkgewotICAgIGlmICh0eXBlLmdldEphdmFUeXBlKCkgPT0g
RmllbGREZXNjcmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAgIHRocm93IG5ldyBJbGxl
Z2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICJFeHRlbnNpb25SZWdpc3RyeS5hZGQoKSBt
dXN0IGJlIHByb3ZpZGVkIGEgZGVmYXVsdCBpbnN0YW5jZSB3aGVuICIgKwotICAgICAgICAiYWRk
aW5nIGFuIGVtYmVkZGVkIG1lc3NhZ2UgZXh0ZW5zaW9uLiIpOwotICAgIH0KLSAgICBFeHRlbnNp
b25JbmZvIGluZm8gPSBuZXcgRXh0ZW5zaW9uSW5mbyh0eXBlLCBudWxsKTsKLSAgICBhZGQoaW5m
bywgRXh0ZW5zaW9uLkV4dGVuc2lvblR5cGUuSU1NVVRBQkxFKTsKLSAgICBhZGQoaW5mbywgRXh0
ZW5zaW9uLkV4dGVuc2lvblR5cGUuTVVUQUJMRSk7Ci0gIH0KLQotICAvKiogQWRkIGEgbWVzc2Fn
ZS10eXBlIGV4dGVuc2lvbiB0byB0aGUgcmVnaXN0cnkgYnkgZGVzY3JpcHRvci4gKi8KLSAgcHVi
bGljIHZvaWQgYWRkKGZpbmFsIEZpZWxkRGVzY3JpcHRvciB0eXBlLCBmaW5hbCBNZXNzYWdlIGRl
ZmF1bHRJbnN0YW5jZSkgewotICAgIGlmICh0eXBlLmdldEphdmFUeXBlKCkgIT0gRmllbGREZXNj
cmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24oCi0gICAgICAgICJFeHRlbnNpb25SZWdpc3RyeS5hZGQoKSBwcm92aWRlZCBh
IGRlZmF1bHQgaW5zdGFuY2UgZm9yIGEgIiArCi0gICAgICAgICJub24tbWVzc2FnZSBleHRlbnNp
b24uIik7Ci0gICAgfQotICAgICAgYWRkKG5ldyBFeHRlbnNpb25JbmZvKHR5cGUsIGRlZmF1bHRJ
bnN0YW5jZSksCi0gICAgICAgICAgRXh0ZW5zaW9uLkV4dGVuc2lvblR5cGUuSU1NVVRBQkxFKTsK
LSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFByaXZhdGUgc3R1ZmYuCi0KLSAgcHJpdmF0ZSBF
eHRlbnNpb25SZWdpc3RyeSgpIHsKLSAgICB0aGlzLmltbXV0YWJsZUV4dGVuc2lvbnNCeU5hbWUg
PSBuZXcgSGFzaE1hcDxTdHJpbmcsIEV4dGVuc2lvbkluZm8+KCk7Ci0gICAgdGhpcy5tdXRhYmxl
RXh0ZW5zaW9uc0J5TmFtZSA9IG5ldyBIYXNoTWFwPFN0cmluZywgRXh0ZW5zaW9uSW5mbz4oKTsK
LSAgICB0aGlzLmltbXV0YWJsZUV4dGVuc2lvbnNCeU51bWJlciA9Ci0gICAgICAgIG5ldyBIYXNo
TWFwPERlc2NyaXB0b3JJbnRQYWlyLCBFeHRlbnNpb25JbmZvPigpOwotICAgIHRoaXMubXV0YWJs
ZUV4dGVuc2lvbnNCeU51bWJlciA9Ci0gICAgICAgIG5ldyBIYXNoTWFwPERlc2NyaXB0b3JJbnRQ
YWlyLCBFeHRlbnNpb25JbmZvPigpOwotICB9Ci0KLSAgcHJpdmF0ZSBFeHRlbnNpb25SZWdpc3Ry
eShFeHRlbnNpb25SZWdpc3RyeSBvdGhlcikgewotICAgIHN1cGVyKG90aGVyKTsKLSAgICB0aGlz
LmltbXV0YWJsZUV4dGVuc2lvbnNCeU5hbWUgPQotICAgICAgICBDb2xsZWN0aW9ucy51bm1vZGlm
aWFibGVNYXAob3RoZXIuaW1tdXRhYmxlRXh0ZW5zaW9uc0J5TmFtZSk7Ci0gICAgdGhpcy5tdXRh
YmxlRXh0ZW5zaW9uc0J5TmFtZSA9Ci0gICAgICAgIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1h
cChvdGhlci5tdXRhYmxlRXh0ZW5zaW9uc0J5TmFtZSk7Ci0gICAgdGhpcy5pbW11dGFibGVFeHRl
bnNpb25zQnlOdW1iZXIgPQotICAgICAgICBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAob3Ro
ZXIuaW1tdXRhYmxlRXh0ZW5zaW9uc0J5TnVtYmVyKTsKLSAgICB0aGlzLm11dGFibGVFeHRlbnNp
b25zQnlOdW1iZXIgPQotICAgICAgICAgICAgQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKG90
aGVyLm11dGFibGVFeHRlbnNpb25zQnlOdW1iZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBN
YXA8U3RyaW5nLCBFeHRlbnNpb25JbmZvPiBpbW11dGFibGVFeHRlbnNpb25zQnlOYW1lOwotICBw
cml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIEV4dGVuc2lvbkluZm8+IG11dGFibGVFeHRlbnNpb25z
QnlOYW1lOwotICBwcml2YXRlIGZpbmFsIE1hcDxEZXNjcmlwdG9ySW50UGFpciwgRXh0ZW5zaW9u
SW5mbz4gaW1tdXRhYmxlRXh0ZW5zaW9uc0J5TnVtYmVyOwotICBwcml2YXRlIGZpbmFsIE1hcDxE
ZXNjcmlwdG9ySW50UGFpciwgRXh0ZW5zaW9uSW5mbz4gbXV0YWJsZUV4dGVuc2lvbnNCeU51bWJl
cjsKLQotICBFeHRlbnNpb25SZWdpc3RyeShib29sZWFuIGVtcHR5KSB7Ci0gICAgc3VwZXIoRXh0
ZW5zaW9uUmVnaXN0cnlMaXRlLmdldEVtcHR5UmVnaXN0cnkoKSk7Ci0gICAgdGhpcy5pbW11dGFi
bGVFeHRlbnNpb25zQnlOYW1lID0KLSAgICAgICAgQ29sbGVjdGlvbnMuPFN0cmluZywgRXh0ZW5z
aW9uSW5mbz5lbXB0eU1hcCgpOwotICAgIHRoaXMubXV0YWJsZUV4dGVuc2lvbnNCeU5hbWUgPQot
ICAgICAgICBDb2xsZWN0aW9ucy48U3RyaW5nLCBFeHRlbnNpb25JbmZvPmVtcHR5TWFwKCk7Ci0g
ICAgdGhpcy5pbW11dGFibGVFeHRlbnNpb25zQnlOdW1iZXIgPQotICAgICAgICBDb2xsZWN0aW9u
cy48RGVzY3JpcHRvckludFBhaXIsIEV4dGVuc2lvbkluZm8+ZW1wdHlNYXAoKTsKLSAgICB0aGlz
Lm11dGFibGVFeHRlbnNpb25zQnlOdW1iZXIgPQotICAgICAgICAgICAgQ29sbGVjdGlvbnMuPERl
c2NyaXB0b3JJbnRQYWlyLCBFeHRlbnNpb25JbmZvPmVtcHR5TWFwKCk7Ci0gIH0KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgRXh0ZW5zaW9uUmVnaXN0cnkgRU1QVFkgPSBuZXcgRXh0ZW5zaW9uUmVn
aXN0cnkodHJ1ZSk7Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZCgKLSAgICAgIGZpbmFsIEV4dGVuc2lv
bkluZm8gZXh0ZW5zaW9uLAotICAgICAgZmluYWwgRXh0ZW5zaW9uLkV4dGVuc2lvblR5cGUgZXh0
ZW5zaW9uVHlwZSkgewotICAgIGlmICghZXh0ZW5zaW9uLmRlc2NyaXB0b3IuaXNFeHRlbnNpb24o
KSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAg
ICAiRXh0ZW5zaW9uUmVnaXN0cnkuYWRkKCkgd2FzIGdpdmVuIGEgRmllbGREZXNjcmlwdG9yIGZv
ciBhIHJlZ3VsYXIgIiArCi0gICAgICAgICAgICAgICIobm9uLWV4dGVuc2lvbikgZmllbGQuIik7
Ci0gICAgfQotCi0gICAgTWFwPFN0cmluZywgRXh0ZW5zaW9uSW5mbz4gZXh0ZW5zaW9uc0J5TmFt
ZTsKLSAgICBNYXA8RGVzY3JpcHRvckludFBhaXIsIEV4dGVuc2lvbkluZm8+IGV4dGVuc2lvbnNC
eU51bWJlcjsKLSAgICBzd2l0Y2ggKGV4dGVuc2lvblR5cGUpIHsKLSAgICAgIGNhc2UgSU1NVVRB
QkxFOgotICAgICAgICBleHRlbnNpb25zQnlOYW1lID0gaW1tdXRhYmxlRXh0ZW5zaW9uc0J5TmFt
ZTsKLSAgICAgICAgZXh0ZW5zaW9uc0J5TnVtYmVyID0gaW1tdXRhYmxlRXh0ZW5zaW9uc0J5TnVt
YmVyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgTVVUQUJMRToKLSAgICAgICAgZXh0ZW5z
aW9uc0J5TmFtZSA9IG11dGFibGVFeHRlbnNpb25zQnlOYW1lOwotICAgICAgICBleHRlbnNpb25z
QnlOdW1iZXIgPSBtdXRhYmxlRXh0ZW5zaW9uc0J5TnVtYmVyOwotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIElnbm9yZSB0aGUgdW5rbm93biBzdXBwb3J0ZWQgdHlw
ZS4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGV4dGVuc2lvbnNCeU5hbWUucHV0KGV4
dGVuc2lvbi5kZXNjcmlwdG9yLmdldEZ1bGxOYW1lKCksIGV4dGVuc2lvbik7Ci0gICAgZXh0ZW5z
aW9uc0J5TnVtYmVyLnB1dCgKLSAgICAgIG5ldyBEZXNjcmlwdG9ySW50UGFpcihleHRlbnNpb24u
ZGVzY3JpcHRvci5nZXRDb250YWluaW5nVHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4dGVuc2lvbi5kZXNjcmlwdG9yLmdldE51bWJlcigpKSwKLSAgICAgIGV4dGVuc2lvbik7
Ci0KLSAgICBmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBleHRlbnNpb24uZGVzY3JpcHRv
cjsKLSAgICBpZiAoZmllbGQuZ2V0Q29udGFpbmluZ1R5cGUoKS5nZXRPcHRpb25zKCkuZ2V0TWVz
c2FnZVNldFdpcmVGb3JtYXQoKSAmJgotICAgICAgICBmaWVsZC5nZXRUeXBlKCkgPT0gRmllbGRE
ZXNjcmlwdG9yLlR5cGUuTUVTU0FHRSAmJgotICAgICAgICBmaWVsZC5pc09wdGlvbmFsKCkgJiYK
LSAgICAgICAgZmllbGQuZ2V0RXh0ZW5zaW9uU2NvcGUoKSA9PSBmaWVsZC5nZXRNZXNzYWdlVHlw
ZSgpKSB7Ci0gICAgICAvLyBUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiBhIE1lc3NhZ2VTZXQgdHlw
ZSBkZWZpbmVkIHdpdGhpbiB0aGUgZXh0ZW5zaW9uCi0gICAgICAvLyB0eXBlJ3Mgb3duIHNjb3Bl
LiAgRm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LCBhbGxvdyBpdCB0byBiZSBsb29rZWQKLSAg
ICAgIC8vIHVwIGJ5IHR5cGUgbmFtZS4KLSAgICAgIGV4dGVuc2lvbnNCeU5hbWUucHV0KGZpZWxk
LmdldE1lc3NhZ2VUeXBlKCkuZ2V0RnVsbE5hbWUoKSwgZXh0ZW5zaW9uKTsKLSAgICB9Ci0gIH0K
LQotICAvKiogQSAoR2VuZXJpY0Rlc2NyaXB0b3IsIGludCkgcGFpciwgdXNlZCBhcyBhIG1hcCBr
ZXkuICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIERlc2NyaXB0b3JJbnRQYWlyIHsK
LSAgICBwcml2YXRlIGZpbmFsIERlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICBwcml2YXRlIGZp
bmFsIGludCBudW1iZXI7Ci0KLSAgICBEZXNjcmlwdG9ySW50UGFpcihmaW5hbCBEZXNjcmlwdG9y
IGRlc2NyaXB0b3IsIGZpbmFsIGludCBudW1iZXIpIHsKLSAgICAgIHRoaXMuZGVzY3JpcHRvciA9
IGRlc2NyaXB0b3I7Ci0gICAgICB0aGlzLm51bWJlciA9IG51bWJlcjsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgcmV0dXJuIGRlc2Ny
aXB0b3IuaGFzaENvZGUoKSAqICgoMSA8PCAxNikgLSAxKSArIG51bWJlcjsKLSAgICB9Ci0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKGZpbmFsIE9iamVjdCBvYmopIHsK
LSAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIERlc2NyaXB0b3JJbnRQYWlyKSkgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmaW5hbCBEZXNjcmlwdG9ySW50UGFpciBv
dGhlciA9IChEZXNjcmlwdG9ySW50UGFpcilvYmo7Ci0gICAgICByZXR1cm4gZGVzY3JpcHRvciA9
PSBvdGhlci5kZXNjcmlwdG9yICYmIG51bWJlciA9PSBvdGhlci5udW1iZXI7Ci0gICAgfQotICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvRXh0ZW5zaW9uUmVnaXN0cnlMaXRlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvRXh0ZW5zaW9uUmVnaXN0cnlMaXRlLmphdmEKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDY1Y2Y3Mzg1NzY0MjUzNGMwZjM2ODIyOTkxOWM2ZTdmYjVmZjE2
NTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0V4dGVuc2lvblJlZ2lzdHJ5TGl0
ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9y
dCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBv
cnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBFcXVpdmFsZW50IHRvIHtAbGluayBFeHRlbnNp
b25SZWdpc3RyeX0gYnV0IHN1cHBvcnRzIG9ubHkgImxpdGUiIHR5cGVzLgotICogPHA+Ci0gKiBJ
ZiBhbGwgb2YgeW91ciB0eXBlcyBhcmUgbGl0ZSB0eXBlcywgdGhlbiB5b3Ugb25seSBuZWVkIHRv
IHVzZQotICoge0Bjb2RlIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZX0uICBTaW1pbGFybHksIGlmIGFs
bCB5b3VyIHR5cGVzIGFyZSByZWd1bGFyCi0gKiB0eXBlcywgdGhlbiB5b3Ugb25seSBuZWVkIHtA
bGluayBFeHRlbnNpb25SZWdpc3RyeX0uICBUeXBpY2FsbHkgaXQgZG9lcyBub3QKLSAqIG1ha2Ug
c2Vuc2UgdG8gbWl4IHRoZSB0d28sIHNpbmNlIGlmIHlvdSBoYXZlIGFueSByZWd1bGFyIHR5cGVz
IGluIHlvdXIKLSAqIHByb2dyYW0sIHlvdSB0aGVuIHJlcXVpcmUgdGhlIGZ1bGwgcnVudGltZSBh
bmQgbG9zZSBhbGwgdGhlIGJlbmVmaXRzIG9mCi0gKiB0aGUgbGl0ZSBydW50aW1lLCBzbyB5b3Ug
bWlnaHQgYXMgd2VsbCBtYWtlIGFsbCB5b3VyIHR5cGVzIGJlIHJlZ3VsYXIgdHlwZXMuCi0gKiBI
b3dldmVyLCBpbiBzb21lIGNhc2VzIChlLmcuIHdoZW4gZGVwZW5kaW5nIG9uIG11bHRpcGxlIHRo
aXJkLXBhcnR5IGxpYnJhcmllcwotICogd2hlcmUgb25lIHVzZXMgbGl0ZSB0eXBlcyBhbmQgb25l
IHVzZXMgcmVndWxhciksIHlvdSBtYXkgZmluZCB5b3Vyc2VsZgotICogd2FudGluZyB0byBtaXgg
dGhlIHR3by4gIEluIHRoaXMgY2FzZSB0aGluZ3MgZ2V0IG1vcmUgY29tcGxpY2F0ZWQuCi0gKiA8
cD4KLSAqIFRoZXJlIGFyZSB0aHJlZSBmYWN0b3JzIHRvIGNvbnNpZGVyOiAgV2hldGhlciB0aGUg
dHlwZSBiZWluZyBleHRlbmRlZCBpcwotICogbGl0ZSwgd2hldGhlciB0aGUgZW1iZWRkZWQgdHlw
ZSAoaW4gdGhlIGNhc2Ugb2YgYSBtZXNzYWdlLXR5cGVkIGV4dGVuc2lvbikKLSAqIGlzIGxpdGUs
IGFuZCB3aGV0aGVyIHRoZSBleHRlbnNpb24gaXRzZWxmIGlzIGxpdGUuICBTaW5jZSBhbGwgdGhy
ZWUgYXJlCi0gKiBkZWNsYXJlZCBpbiBkaWZmZXJlbnQgZmlsZXMsIHRoZXkgY291bGQgYWxsIGJl
IGRpZmZlcmVudC4gIEhlcmUgYXJlIGFsbAotICogdGhlIGNvbWJpbmF0aW9ucyBhbmQgd2hpY2gg
dHlwZSBvZiByZWdpc3RyeSB0byB1c2U6Ci0gKiA8cHJlPgotICogICBFeHRlbmRlZCB0eXBlICAg
ICBJbm5lciB0eXBlICAgIEV4dGVuc2lvbiAgICAgICAgIFVzZSByZWdpc3RyeQotICogICA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotICogICBsaXRlICAgICAgICAgICAgICBsaXRlICAgICAgICAgIGxpdGUgICAg
ICAgICAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZQotICogICBsaXRlICAgICAgICAgICAgICBy
ZWd1bGFyICAgICAgIGxpdGUgICAgICAgICAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5Ci0gKiAgIHJl
Z3VsYXIgICAgICAgICAgIHJlZ3VsYXIgICAgICAgcmVndWxhciAgICAgICAgICAgRXh0ZW5zaW9u
UmVnaXN0cnkKLSAqICAgYWxsIG90aGVyIGNvbWJpbmF0aW9ucyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub3Qgc3VwcG9ydGVkCi0gKiA8L3ByZT4KLSAqIDxwPgotICogTm90ZSB0aGF0IGp1
c3QgYXMgcmVndWxhciB0eXBlcyBhcmUgbm90IGFsbG93ZWQgdG8gY29udGFpbiBsaXRlLXR5cGUg
ZmllbGRzLAotICogdGhleSBhcmUgYWxzbyBub3QgYWxsb3dlZCB0byBjb250YWluIGxpdGUtdHlw
ZSBleHRlbnNpb25zLiAgVGhpcyBpcyBiZWNhdXNlCi0gKiByZWd1bGFyIHR5cGVzIG11c3QgYmUg
ZnVsbHkgYWNjZXNzaWJsZSB2aWEgcmVmbGVjdGlvbiwgd2hpY2ggaW4gdHVybiBtZWFucwotICog
dGhhdCBhbGwgdGhlIGlubmVyIG1lc3NhZ2VzIG11c3QgYWxzbyBzdXBwb3J0IHJlZmxlY3Rpb24u
ICBPbiB0aGUgb3RoZXIgaGFuZCwKLSAqIHNpbmNlIHJlZ3VsYXIgdHlwZXMgaW1wbGVtZW50IHRo
ZSBlbnRpcmUgbGl0ZSBpbnRlcmZhY2UsIHRoZXJlIGlzIG5vIHByb2JsZW0KLSAqIHdpdGggZW1i
ZWRkaW5nIHJlZ3VsYXIgdHlwZXMgaW5zaWRlIGxpdGUgdHlwZXMuCi0gKgotICogQGF1dGhvciBr
ZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqLwotcHVibGljIGNsYXNzIEV4dGVuc2lv
blJlZ2lzdHJ5TGl0ZSB7Ci0KLSAgLy8gU2V0IHRydWUgdG8gZW5hYmxlIGxhenkgcGFyc2luZyBm
ZWF0dXJlIGZvciBNZXNzYWdlU2V0LgotICAvLwotICAvLyBUT0RPKHhpYW5nbCk6IE5vdyB3ZSB1
c2UgYSBnbG9iYWwgZmxhZyB0byBjb250cm9sIHdoZXRoZXIgZW5hYmxlIGxhenkKLSAgLy8gcGFy
c2luZyBmZWF0dXJlIGZvciBNZXNzYWdlU2V0LCB3aGljaCBtYXkgYmUgdG9vIGNydWRlIGZvciBz
b21lCi0gIC8vIGFwcGxpY2F0aW9ucy4gTmVlZCB0byBzdXBwb3J0IHRoaXMgZmVhdHVyZSBvbiBz
bWFsbGVyIGdyYW51bGFyaXR5LgotICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGVh
Z2VybHlQYXJzZU1lc3NhZ2VTZXRzID0gZmFsc2U7Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFu
IGlzRWFnZXJseVBhcnNlTWVzc2FnZVNldHMoKSB7Ci0gICAgcmV0dXJuIGVhZ2VybHlQYXJzZU1l
c3NhZ2VTZXRzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldEVhZ2VybHlQYXJzZU1l
c3NhZ2VTZXRzKGJvb2xlYW4gaXNFYWdlcmx5UGFyc2UpIHsKLSAgICBlYWdlcmx5UGFyc2VNZXNz
YWdlU2V0cyA9IGlzRWFnZXJseVBhcnNlOwotICB9Ci0KLSAgLyoqIENvbnN0cnVjdCBhIG5ldywg
ZW1wdHkgaW5zdGFuY2UuICovCi0gIHB1YmxpYyBzdGF0aWMgRXh0ZW5zaW9uUmVnaXN0cnlMaXRl
IG5ld0luc3RhbmNlKCkgewotICAgIHJldHVybiBuZXcgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlKCk7
Ci0gIH0KLQotICAvKiogR2V0IHRoZSB1bm1vZGlmaWFibGUgc2luZ2xldG9uIGVtcHR5IGluc3Rh
bmNlLiAqLwotICBwdWJsaWMgc3RhdGljIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBnZXRFbXB0eVJl
Z2lzdHJ5KCkgewotICAgIHJldHVybiBFTVBUWTsKLSAgfQotCi0gIC8qKiBSZXR1cm5zIGFuIHVu
bW9kaWZpYWJsZSB2aWV3IG9mIHRoZSByZWdpc3RyeS4gKi8KLSAgcHVibGljIEV4dGVuc2lvblJl
Z2lzdHJ5TGl0ZSBnZXRVbm1vZGlmaWFibGUoKSB7Ci0gICAgcmV0dXJuIG5ldyBFeHRlbnNpb25S
ZWdpc3RyeUxpdGUodGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogRmluZCBhbiBleHRlbnNpb24g
YnkgY29udGFpbmluZyB0eXBlIGFuZCBmaWVsZCBudW1iZXIuCi0gICAqCi0gICAqIEByZXR1cm4g
SW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4dGVuc2lvbiBpZiBmb3VuZCwgb3Ige0Bjb2RlIG51bGx9
Ci0gICAqICAgICAgICAgb3RoZXJ3aXNlLgotICAgKi8KLSAgQFN1cHByZXNzV2FybmluZ3MoInVu
Y2hlY2tlZCIpCi0gIHB1YmxpYyA8Q29udGFpbmluZ1R5cGUgZXh0ZW5kcyBNZXNzYWdlTGl0ZT4K
LSAgICAgIEdlbmVyYXRlZE1lc3NhZ2VMaXRlLkdlbmVyYXRlZEV4dGVuc2lvbjxDb250YWluaW5n
VHlwZSwgPz4KLSAgICAgICAgZmluZExpdGVFeHRlbnNpb25CeU51bWJlcigKLSAgICAgICAgICBm
aW5hbCBDb250YWluaW5nVHlwZSBjb250YWluaW5nVHlwZURlZmF1bHRJbnN0YW5jZSwKLSAgICAg
ICAgICBmaW5hbCBpbnQgZmllbGROdW1iZXIpIHsKLSAgICByZXR1cm4gKEdlbmVyYXRlZE1lc3Nh
Z2VMaXRlLkdlbmVyYXRlZEV4dGVuc2lvbjxDb250YWluaW5nVHlwZSwgPz4pCi0gICAgICBleHRl
bnNpb25zQnlOdW1iZXIuZ2V0KAotICAgICAgICBuZXcgT2JqZWN0SW50UGFpcihjb250YWluaW5n
VHlwZURlZmF1bHRJbnN0YW5jZSwgZmllbGROdW1iZXIpKTsKLSAgfQotCi0gIC8qKiBBZGQgYW4g
ZXh0ZW5zaW9uIGZyb20gYSBsaXRlIGdlbmVyYXRlZCBmaWxlIHRvIHRoZSByZWdpc3RyeS4gKi8K
LSAgcHVibGljIGZpbmFsIHZvaWQgYWRkKAotICAgICAgZmluYWwgR2VuZXJhdGVkTWVzc2FnZUxp
dGUuR2VuZXJhdGVkRXh0ZW5zaW9uPD8sID8+IGV4dGVuc2lvbikgewotICAgIGV4dGVuc2lvbnNC
eU51bWJlci5wdXQoCi0gICAgICBuZXcgT2JqZWN0SW50UGFpcihleHRlbnNpb24uZ2V0Q29udGFp
bmluZ1R5cGVEZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVu
c2lvbi5nZXROdW1iZXIoKSksCi0gICAgICBleHRlbnNpb24pOwotICB9Ci0KLSAgLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLSAgLy8gUHJpdmF0ZSBzdHVmZi4KLQotICAvLyBDb25zdHJ1Y3RvcnMgYXJlIHBhY2thZ2Ut
cHJpdmF0ZSBzbyB0aGF0IEV4dGVuc2lvblJlZ2lzdHJ5IGNhbiBzdWJjbGFzcwotICAvLyB0aGlz
LgotCi0gIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSgpIHsKLSAgICB0aGlzLmV4dGVuc2lvbnNCeU51
bWJlciA9Ci0gICAgICAgIG5ldyBIYXNoTWFwPE9iamVjdEludFBhaXIsCi0gICAgICAgICAgICAg
ICAgICAgIEdlbmVyYXRlZE1lc3NhZ2VMaXRlLkdlbmVyYXRlZEV4dGVuc2lvbjw/LCA/Pj4oKTsK
LSAgfQotCi0gIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZShFeHRlbnNpb25SZWdpc3RyeUxpdGUgb3Ro
ZXIpIHsKLSAgICBpZiAob3RoZXIgPT0gRU1QVFkpIHsKLSAgICAgIHRoaXMuZXh0ZW5zaW9uc0J5
TnVtYmVyID0gQ29sbGVjdGlvbnMuZW1wdHlNYXAoKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhp
cy5leHRlbnNpb25zQnlOdW1iZXIgPQotICAgICAgICBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVN
YXAob3RoZXIuZXh0ZW5zaW9uc0J5TnVtYmVyKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZp
bmFsIE1hcDxPYmplY3RJbnRQYWlyLAotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWRNZXNz
YWdlTGl0ZS5HZW5lcmF0ZWRFeHRlbnNpb248PywgPz4+Ci0gICAgICBleHRlbnNpb25zQnlOdW1i
ZXI7Ci0KLSAgcHJpdmF0ZSBFeHRlbnNpb25SZWdpc3RyeUxpdGUoYm9vbGVhbiBlbXB0eSkgewot
ICAgIHRoaXMuZXh0ZW5zaW9uc0J5TnVtYmVyID0gQ29sbGVjdGlvbnMuZW1wdHlNYXAoKTsKLSAg
fQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgRU1QVFkgPQot
ICAgIG5ldyBFeHRlbnNpb25SZWdpc3RyeUxpdGUodHJ1ZSk7Ci0KLSAgLyoqIEEgKE9iamVjdCwg
aW50KSBwYWlyLCB1c2VkIGFzIGEgbWFwIGtleS4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
Y2xhc3MgT2JqZWN0SW50UGFpciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3Qgb2JqZWN0Owot
ICAgIHByaXZhdGUgZmluYWwgaW50IG51bWJlcjsKLQotICAgIE9iamVjdEludFBhaXIoZmluYWwg
T2JqZWN0IG9iamVjdCwgZmluYWwgaW50IG51bWJlcikgewotICAgICAgdGhpcy5vYmplY3QgPSBv
YmplY3Q7Ci0gICAgICB0aGlzLm51bWJlciA9IG51bWJlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgcmV0dXJuIFN5c3RlbS5pZGVu
dGl0eUhhc2hDb2RlKG9iamVjdCkgKiAoKDEgPDwgMTYpIC0gMSkgKyBudW1iZXI7Ci0gICAgfQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBPYmplY3Qgb2Jq
KSB7Ci0gICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBPYmplY3RJbnRQYWlyKSkgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmaW5hbCBPYmplY3RJbnRQYWlyIG90aGVy
ID0gKE9iamVjdEludFBhaXIpb2JqOwotICAgICAgcmV0dXJuIG9iamVjdCA9PSBvdGhlci5vYmpl
Y3QgJiYgbnVtYmVyID09IG90aGVyLm51bWJlcjsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9GaWVsZFNldC5qYXZh
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0ZpZWxkU2V0Lmph
dmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlODk3MDlmMzJjZjY3ODM3YzE1MGZj
NDM2NTQ4NzdiOTk1ZTU3ZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0ZpZWxk
U2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MDggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1w
b3J0IGNvbS5nb29nbGUucHJvdG9idWYuTGF6eUZpZWxkLkxhenlJdGVyYXRvcjsKLQotaW1wb3J0
IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9y
dCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1w
b3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogQSBj
bGFzcyB3aGljaCByZXByZXNlbnRzIGFuIGFyYml0cmFyeSBzZXQgb2YgZmllbGRzIG9mIHNvbWUg
bWVzc2FnZSB0eXBlLgotICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgRHluYW1p
Y01lc3NhZ2V9LCBhbmQgYWxzbyB0byByZXByZXNlbnQKLSAqIGV4dGVuc2lvbnMgaW4ge0BsaW5r
IEdlbmVyYXRlZE1lc3NhZ2V9LiAgVGhpcyBjbGFzcyBpcyBwYWNrYWdlLXByaXZhdGUsCi0gKiBz
aW5jZSBvdXRzaWRlIHVzZXJzIHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyB7QGxpbmsgRHluYW1p
Y01lc3NhZ2V9LgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdvb2dsZS5jb20gS2VudG9uIFZhcmRh
Ci0gKi8KLWZpbmFsIGNsYXNzIEZpZWxkU2V0PEZpZWxkRGVzY3JpcHRvclR5cGUgZXh0ZW5kcwot
ICAgICAgRmllbGRTZXQuRmllbGREZXNjcmlwdG9yTGl0ZTxGaWVsZERlc2NyaXB0b3JUeXBlPj4g
ewotICAvKioKLSAgICogSW50ZXJmYWNlIGZvciBhIEZpZWxkRGVzY3JpcHRvciBvciBsaXRlIGV4
dGVuc2lvbiBkZXNjcmlwdG9yLiAgVGhpcwotICAgKiBwcmV2ZW50cyBGaWVsZFNldCBmcm9tIGRl
cGVuZGluZyBvbiB7QGxpbmsgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yfS4KLSAgICovCi0g
IHB1YmxpYyBpbnRlcmZhY2UgRmllbGREZXNjcmlwdG9yTGl0ZTxUIGV4dGVuZHMgRmllbGREZXNj
cmlwdG9yTGl0ZTxUPj4KLSAgICAgIGV4dGVuZHMgQ29tcGFyYWJsZTxUPiB7Ci0gICAgaW50IGdl
dE51bWJlcigpOwotICAgIFdpcmVGb3JtYXQuRmllbGRUeXBlIGdldExpdGVUeXBlKCk7Ci0gICAg
V2lyZUZvcm1hdC5KYXZhVHlwZSBnZXRMaXRlSmF2YVR5cGUoKTsKLSAgICBib29sZWFuIGlzUmVw
ZWF0ZWQoKTsKLSAgICBib29sZWFuIGlzUGFja2VkKCk7Ci0gICAgSW50ZXJuYWwuRW51bUxpdGVN
YXA8Pz4gZ2V0RW51bVR5cGUoKTsKLQotICAgIC8vIElmIGdldExpdGVKYXZhVHlwZSgpID09IE1F
U1NBR0UsIHRoaXMgbWVyZ2VzIGEgbWVzc2FnZSBvYmplY3Qgb2YgdGhlCi0gICAgLy8gdHlwZSBp
bnRvIGEgYnVpbGRlciBvZiB0aGUgdHlwZS4gIFJldHVybnMge0Bjb2RlIHRvfS4KLSAgICBNZXNz
YWdlTGl0ZS5CdWlsZGVyIGludGVybmFsTWVyZ2VGcm9tKAotICAgICAgICBNZXNzYWdlTGl0ZS5C
dWlsZGVyIHRvLCBNZXNzYWdlTGl0ZSBmcm9tKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgU21h
bGxTb3J0ZWRNYXA8RmllbGREZXNjcmlwdG9yVHlwZSwgT2JqZWN0PiBmaWVsZHM7Ci0gIHByaXZh
dGUgYm9vbGVhbiBpc0ltbXV0YWJsZTsKLSAgcHJpdmF0ZSBib29sZWFuIGhhc0xhenlGaWVsZCA9
IGZhbHNlOwotCi0gIC8qKiBDb25zdHJ1Y3QgYSBuZXcgRmllbGRTZXQuICovCi0gIHByaXZhdGUg
RmllbGRTZXQoKSB7Ci0gICAgdGhpcy5maWVsZHMgPSBTbWFsbFNvcnRlZE1hcC5uZXdGaWVsZE1h
cCgxNik7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0IGFuIGVtcHR5IEZpZWxkU2V0LiAg
VGhpcyBpcyBvbmx5IHVzZWQgdG8gaW5pdGlhbGl6ZQotICAgKiBERUZBVUxUX0lOU1RBTkNFLgot
ICAgKi8KLSAgcHJpdmF0ZSBGaWVsZFNldChmaW5hbCBib29sZWFuIGR1bW15KSB7Ci0gICAgdGhp
cy5maWVsZHMgPSBTbWFsbFNvcnRlZE1hcC5uZXdGaWVsZE1hcCgwKTsKLSAgICBtYWtlSW1tdXRh
YmxlKCk7Ci0gIH0KLQotICAvKiogQ29uc3RydWN0IGEgbmV3IEZpZWxkU2V0LiAqLwotICBwdWJs
aWMgc3RhdGljIDxUIGV4dGVuZHMgRmllbGRTZXQuRmllbGREZXNjcmlwdG9yTGl0ZTxUPj4KLSAg
ICAgIEZpZWxkU2V0PFQ+IG5ld0ZpZWxkU2V0KCkgewotICAgIHJldHVybiBuZXcgRmllbGRTZXQ8
VD4oKTsKLSAgfQotCi0gIC8qKiBHZXQgYW4gaW1tdXRhYmxlIGVtcHR5IEZpZWxkU2V0LiAqLwot
ICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGljIHN0YXRpYyA8VCBleHRl
bmRzIEZpZWxkU2V0LkZpZWxkRGVzY3JpcHRvckxpdGU8VD4+Ci0gICAgICBGaWVsZFNldDxUPiBl
bXB0eVNldCgpIHsKLSAgICByZXR1cm4gREVGQVVMVF9JTlNUQU5DRTsKLSAgfQotICBAU3VwcHJl
c3NXYXJuaW5ncygicmF3dHlwZXMiKQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGaWVsZFNldCBE
RUZBVUxUX0lOU1RBTkNFID0gbmV3IEZpZWxkU2V0KHRydWUpOwotCi0gIC8qKiBNYWtlIHRoaXMg
RmllbGRTZXQgaW1tdXRhYmxlIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkLiAqLwotICBAU3VwcHJl
c3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGljIHZvaWQgbWFrZUltbXV0YWJsZSgpIHsK
LSAgICBpZiAoaXNJbW11dGFibGUpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZmllbGRz
Lm1ha2VJbW11dGFibGUoKTsKLSAgICBpc0ltbXV0YWJsZSA9IHRydWU7Ci0gIH0KLQotICAvKioK
LSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBGaWVsZFNldCBpcyBpbW11dGFibGUuIFRoaXMgaXMg
dHJ1ZSBpZiBpdCBpcyB0aGUKLSAgICoge0BsaW5rICNlbXB0eVNldH0gb3IgaWYge0BsaW5rICNt
YWtlSW1tdXRhYmxlfSB3ZXJlIGNhbGxlZC4KLSAgICoKLSAgICogQHJldHVybiB3aGV0aGVyIHRo
ZSBGaWVsZFNldCBpcyBpbW11dGFibGUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ltbXV0
YWJsZSgpIHsKLSAgICByZXR1cm4gaXNJbW11dGFibGU7Ci0gIH0KLSAgCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKLSAgICBpZiAodGhpcyA9PSBvKSB7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCEobyBpbnN0YW5jZW9m
IEZpZWxkU2V0KSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBGaWVs
ZFNldDw/PiBvdGhlciA9IChGaWVsZFNldDw/PikgbzsKLSAgICByZXR1cm4gb3RoZXIuZmllbGRz
LmVxdWFscyhvdGhlci5maWVsZHMpOwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIGlu
dCBoYXNoQ29kZSgpIHsKLSAgICByZXR1cm4gZmllbGRzLmhhc2hDb2RlKCk7Ci0gIH0KLQotICAv
KioKLSAgICogQ2xvbmVzIHRoZSBGaWVsZFNldC4gVGhlIHJldHVybmVkIEZpZWxkU2V0IHdpbGwg
YmUgbXV0YWJsZSBldmVuIGlmIHRoZQotICAgKiBvcmlnaW5hbCBGaWVsZFNldCB3YXMgaW1tdXRh
YmxlLgotICAgKgotICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjbG9uZWQgRmllbGRTZXQKLSAgICov
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgRmllbGRTZXQ8RmllbGREZXNjcmlwdG9yVHlwZT4gY2xv
bmUoKSB7Ci0gICAgLy8gV2UgY2FuJ3QganVzdCBjYWxsIGZpZWxkcy5jbG9uZSBiZWNhdXNlIExp
c3Qgb2JqZWN0cyBpbiB0aGUgbWFwCi0gICAgLy8gc2hvdWxkIG5vdCBiZSBzaGFyZWQuCi0gICAg
RmllbGRTZXQ8RmllbGREZXNjcmlwdG9yVHlwZT4gY2xvbmUgPSBGaWVsZFNldC5uZXdGaWVsZFNl
dCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLmdldE51bUFycmF5RW50cmllcygp
OyBpKyspIHsKLSAgICAgIE1hcC5FbnRyeTxGaWVsZERlc2NyaXB0b3JUeXBlLCBPYmplY3Q+IGVu
dHJ5ID0gZmllbGRzLmdldEFycmF5RW50cnlBdChpKTsKLSAgICAgIEZpZWxkRGVzY3JpcHRvclR5
cGUgZGVzY3JpcHRvciA9IGVudHJ5LmdldEtleSgpOwotICAgICAgY2xvbmUuc2V0RmllbGQoZGVz
Y3JpcHRvciwgZW50cnkuZ2V0VmFsdWUoKSk7Ci0gICAgfQotICAgIGZvciAoTWFwLkVudHJ5PEZp
ZWxkRGVzY3JpcHRvclR5cGUsIE9iamVjdD4gZW50cnkgOgotICAgICAgICAgICAgIGZpZWxkcy5n
ZXRPdmVyZmxvd0VudHJpZXMoKSkgewotICAgICAgRmllbGREZXNjcmlwdG9yVHlwZSBkZXNjcmlw
dG9yID0gZW50cnkuZ2V0S2V5KCk7Ci0gICAgICBjbG9uZS5zZXRGaWVsZChkZXNjcmlwdG9yLCBl
bnRyeS5nZXRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgY2xvbmUuaGFzTGF6eUZpZWxkID0gaGFzTGF6
eUZpZWxkOwotICAgIHJldHVybiBjbG9uZTsKLSAgfQotCi0KLSAgLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAv
KiogU2VlIHtAbGluayBNZXNzYWdlLkJ1aWxkZXIjY2xlYXIoKX0uICovCi0gIHB1YmxpYyB2b2lk
IGNsZWFyKCkgewotICAgIGZpZWxkcy5jbGVhcigpOwotICAgIGhhc0xhenlGaWVsZCA9IGZhbHNl
OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIHNpbXBsZSBtYXAgY29udGFpbmluZyBhbGwgdGhl
IGZpZWxkcy4KLSAgICovCi0gIHB1YmxpYyBNYXA8RmllbGREZXNjcmlwdG9yVHlwZSwgT2JqZWN0
PiBnZXRBbGxGaWVsZHMoKSB7Ci0gICAgaWYgKGhhc0xhenlGaWVsZCkgewotICAgICAgU21hbGxT
b3J0ZWRNYXA8RmllbGREZXNjcmlwdG9yVHlwZSwgT2JqZWN0PiByZXN1bHQgPQotICAgICAgICAg
IFNtYWxsU29ydGVkTWFwLm5ld0ZpZWxkTWFwKDE2KTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZmllbGRzLmdldE51bUFycmF5RW50cmllcygpOyBpKyspIHsKLSAgICAgICAgY2xvbmVGaWVs
ZEVudHJ5KHJlc3VsdCwgZmllbGRzLmdldEFycmF5RW50cnlBdChpKSk7Ci0gICAgICB9Ci0gICAg
ICBmb3IgKE1hcC5FbnRyeTxGaWVsZERlc2NyaXB0b3JUeXBlLCBPYmplY3Q+IGVudHJ5IDoKLSAg
ICAgICAgICBmaWVsZHMuZ2V0T3ZlcmZsb3dFbnRyaWVzKCkpIHsKLSAgICAgICAgY2xvbmVGaWVs
ZEVudHJ5KHJlc3VsdCwgZW50cnkpOwotICAgICAgfQotICAgICAgaWYgKGZpZWxkcy5pc0ltbXV0
YWJsZSgpKSB7Ci0gICAgICAgIHJlc3VsdC5tYWtlSW1tdXRhYmxlKCk7Ci0gICAgICB9Ci0gICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gZmllbGRzLmlzSW1tdXRhYmxlKCkg
PyBmaWVsZHMgOiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAoZmllbGRzKTsKLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBjbG9uZUZpZWxkRW50cnkoTWFwPEZpZWxkRGVzY3JpcHRvclR5cGUsIE9i
amVjdD4gbWFwLAotICAgICAgTWFwLkVudHJ5PEZpZWxkRGVzY3JpcHRvclR5cGUsIE9iamVjdD4g
ZW50cnkpIHsKLSAgICBGaWVsZERlc2NyaXB0b3JUeXBlIGtleSA9IGVudHJ5LmdldEtleSgpOwot
ICAgIE9iamVjdCB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgaWYgKHZhbHVlIGluc3Rh
bmNlb2YgTGF6eUZpZWxkKSB7Ci0gICAgICBtYXAucHV0KGtleSwgKChMYXp5RmllbGQpIHZhbHVl
KS5nZXRWYWx1ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgbWFwLnB1dChrZXksIHZhbHVlKTsK
LSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGFuIGl0ZXJhdG9yIHRvIHRoZSBmaWVsZCBt
YXAuIFRoaXMgaXRlcmF0b3Igc2hvdWxkIG5vdCBiZSBsZWFrZWQgb3V0Ci0gICAqIG9mIHRoZSBw
cm90b2J1ZiBsaWJyYXJ5IGFzIGl0IGlzIG5vdCBwcm90ZWN0ZWQgZnJvbSBtdXRhdGlvbiB3aGVu
IGZpZWxkcwotICAgKiBpcyBub3QgaW1tdXRhYmxlLgotICAgKi8KLSAgcHVibGljIEl0ZXJhdG9y
PE1hcC5FbnRyeTxGaWVsZERlc2NyaXB0b3JUeXBlLCBPYmplY3Q+PiBpdGVyYXRvcigpIHsKLSAg
ICBpZiAoaGFzTGF6eUZpZWxkKSB7Ci0gICAgICByZXR1cm4gbmV3IExhenlJdGVyYXRvcjxGaWVs
ZERlc2NyaXB0b3JUeXBlPigKLSAgICAgICAgICBmaWVsZHMuZW50cnlTZXQoKS5pdGVyYXRvcigp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpZWxkcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gIH0K
LQotICAvKioKLSAgICogVXNlZnVsIGZvciBpbXBsZW1lbnRpbmcKLSAgICoge0BsaW5rIE1lc3Nh
Z2UjaGFzRmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yKX0uCi0gICAqLwotICBwdWJs
aWMgYm9vbGVhbiBoYXNGaWVsZChmaW5hbCBGaWVsZERlc2NyaXB0b3JUeXBlIGRlc2NyaXB0b3Ip
IHsKLSAgICBpZiAoZGVzY3JpcHRvci5pc1JlcGVhdGVkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJ
bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICJoYXNGaWVsZCgpIGNhbiBvbmx5IGJl
IGNhbGxlZCBvbiBub24tcmVwZWF0ZWQgZmllbGRzLiIpOwotICAgIH0KLQotICAgIHJldHVybiBm
aWVsZHMuZ2V0KGRlc2NyaXB0b3IpICE9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogVXNlZnVs
IGZvciBpbXBsZW1lbnRpbmcKLSAgICoge0BsaW5rIE1lc3NhZ2UjZ2V0RmllbGQoRGVzY3JpcHRv
cnMuRmllbGREZXNjcmlwdG9yKX0uICBUaGlzIG1ldGhvZAotICAgKiByZXR1cm5zIHtAY29kZSBu
dWxsfSBpZiB0aGUgZmllbGQgaXMgbm90IHNldDsgaW4gdGhpcyBjYXNlIGl0IGlzIHVwCi0gICAq
IHRvIHRoZSBjYWxsZXIgdG8gZmV0Y2ggdGhlIGZpZWxkJ3MgZGVmYXVsdCB2YWx1ZS4KLSAgICov
Ci0gIHB1YmxpYyBPYmplY3QgZ2V0RmllbGQoZmluYWwgRmllbGREZXNjcmlwdG9yVHlwZSBkZXNj
cmlwdG9yKSB7Ci0gICAgT2JqZWN0IG8gPSBmaWVsZHMuZ2V0KGRlc2NyaXB0b3IpOwotICAgIGlm
IChvIGluc3RhbmNlb2YgTGF6eUZpZWxkKSB7Ci0gICAgICByZXR1cm4gKChMYXp5RmllbGQpIG8p
LmdldFZhbHVlKCk7Ci0gICAgfQotICAgIHJldHVybiBvOwotICB9Ci0KLSAgLyoqCi0gICAqIFVz
ZWZ1bCBmb3IgaW1wbGVtZW50aW5nCi0gICAqIHtAbGluayBNZXNzYWdlLkJ1aWxkZXIjc2V0Rmll
bGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLE9iamVjdCl9LgotICAgKi8KLSAgQFN1cHBy
ZXNzV2FybmluZ3MoeyJ1bmNoZWNrZWQiLCAicmF3dHlwZXMifSkKLSAgcHVibGljIHZvaWQgc2V0
RmllbGQoZmluYWwgRmllbGREZXNjcmlwdG9yVHlwZSBkZXNjcmlwdG9yLAotICAgICAgICAgICAg
ICAgICAgICAgICBPYmplY3QgdmFsdWUpIHsKLSAgICBpZiAoZGVzY3JpcHRvci5pc1JlcGVhdGVk
KCkpIHsKLSAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgTGlzdCkpIHsKLSAgICAgICAgdGhy
b3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAiV3Jvbmcgb2JqZWN0
IHR5cGUgdXNlZCB3aXRoIHByb3RvY29sIG1lc3NhZ2UgcmVmbGVjdGlvbi4iKTsKLSAgICAgIH0K
LQotICAgICAgLy8gV3JhcCB0aGUgY29udGVudHMgaW4gYSBuZXcgbGlzdCBzbyB0aGF0IHRoZSBj
YWxsZXIgY2Fubm90IGNoYW5nZQotICAgICAgLy8gdGhlIGxpc3QncyBjb250ZW50cyBhZnRlciBz
ZXR0aW5nIGl0LgotICAgICAgZmluYWwgTGlzdCBuZXdMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwot
ICAgICAgbmV3TGlzdC5hZGRBbGwoKExpc3QpIHZhbHVlKTsKLSAgICAgIGZvciAoZmluYWwgT2Jq
ZWN0IGVsZW1lbnQgOiBuZXdMaXN0KSB7Ci0gICAgICAgIHZlcmlmeVR5cGUoZGVzY3JpcHRvci5n
ZXRMaXRlVHlwZSgpLCBlbGVtZW50KTsKLSAgICAgIH0KLSAgICAgIHZhbHVlID0gbmV3TGlzdDsK
LSAgICB9IGVsc2UgewotICAgICAgdmVyaWZ5VHlwZShkZXNjcmlwdG9yLmdldExpdGVUeXBlKCks
IHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMYXp5RmllbGQpIHsK
LSAgICAgIGhhc0xhenlGaWVsZCA9IHRydWU7Ci0gICAgfQotICAgIGZpZWxkcy5wdXQoZGVzY3Jp
cHRvciwgdmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFVzZWZ1bCBmb3IgaW1wbGVtZW50aW5n
Ci0gICAqIHtAbGluayBNZXNzYWdlLkJ1aWxkZXIjY2xlYXJGaWVsZChEZXNjcmlwdG9ycy5GaWVs
ZERlc2NyaXB0b3IpfS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsZWFyRmllbGQoZmluYWwgRmll
bGREZXNjcmlwdG9yVHlwZSBkZXNjcmlwdG9yKSB7Ci0gICAgZmllbGRzLnJlbW92ZShkZXNjcmlw
dG9yKTsKLSAgICBpZiAoZmllbGRzLmlzRW1wdHkoKSkgewotICAgICAgaGFzTGF6eUZpZWxkID0g
ZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFVzZWZ1bCBmb3IgaW1wbGVtZW50aW5n
Ci0gICAqIHtAbGluayBNZXNzYWdlI2dldFJlcGVhdGVkRmllbGRDb3VudChEZXNjcmlwdG9ycy5G
aWVsZERlc2NyaXB0b3IpfS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0UmVwZWF0ZWRGaWVsZENv
dW50KGZpbmFsIEZpZWxkRGVzY3JpcHRvclR5cGUgZGVzY3JpcHRvcikgewotICAgIGlmICghZGVz
Y3JpcHRvci5pc1JlcGVhdGVkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24oCi0gICAgICAgICJnZXRSZXBlYXRlZEZpZWxkKCkgY2FuIG9ubHkgYmUgY2FsbGVk
IG9uIHJlcGVhdGVkIGZpZWxkcy4iKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBPYmplY3QgdmFsdWUg
PSBnZXRGaWVsZChkZXNjcmlwdG9yKTsKLSAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAg
cmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAoKExpc3Q8Pz4pIHZhbHVlKS5z
aXplKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFVzZWZ1bCBmb3IgaW1wbGVtZW50aW5n
Ci0gICAqIHtAbGluayBNZXNzYWdlI2dldFJlcGVhdGVkRmllbGQoRGVzY3JpcHRvcnMuRmllbGRE
ZXNjcmlwdG9yLGludCl9LgotICAgKi8KLSAgcHVibGljIE9iamVjdCBnZXRSZXBlYXRlZEZpZWxk
KGZpbmFsIEZpZWxkRGVzY3JpcHRvclR5cGUgZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCkgewotICAgIGlmICghZGVzY3JpcHRvci5p
c1JlcGVhdGVkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24o
Ci0gICAgICAgICJnZXRSZXBlYXRlZEZpZWxkKCkgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIHJlcGVh
dGVkIGZpZWxkcy4iKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBPYmplY3QgdmFsdWUgPSBnZXRGaWVs
ZChkZXNjcmlwdG9yKTsKLQotICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBu
ZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1
cm4gKChMaXN0PD8+KSB2YWx1ZSkuZ2V0KGluZGV4KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAg
ICogVXNlZnVsIGZvciBpbXBsZW1lbnRpbmcKLSAgICoge0BsaW5rIE1lc3NhZ2UuQnVpbGRlciNz
ZXRSZXBlYXRlZEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvcixpbnQsT2JqZWN0KX0u
Ci0gICAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGljIHZvaWQg
c2V0UmVwZWF0ZWRGaWVsZChmaW5hbCBGaWVsZERlc2NyaXB0b3JUeXBlIGRlc2NyaXB0b3IsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGluZGV4LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAgIGlmICghZGVz
Y3JpcHRvci5pc1JlcGVhdGVkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24oCi0gICAgICAgICJnZXRSZXBlYXRlZEZpZWxkKCkgY2FuIG9ubHkgYmUgY2FsbGVk
IG9uIHJlcGVhdGVkIGZpZWxkcy4iKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBPYmplY3QgbGlzdCA9
IGdldEZpZWxkKGRlc2NyaXB0b3IpOwotICAgIGlmIChsaXN0ID09IG51bGwpIHsKLSAgICAgIHRo
cm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgdmVyaWZ5
VHlwZShkZXNjcmlwdG9yLmdldExpdGVUeXBlKCksIHZhbHVlKTsKLSAgICAoKExpc3Q8T2JqZWN0
PikgbGlzdCkuc2V0KGluZGV4LCB2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogVXNlZnVsIGZv
ciBpbXBsZW1lbnRpbmcKLSAgICoge0BsaW5rIE1lc3NhZ2UuQnVpbGRlciNhZGRSZXBlYXRlZEZp
ZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvcixPYmplY3QpfS4KLSAgICovCi0gIEBTdXBw
cmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwdWJsaWMgdm9pZCBhZGRSZXBlYXRlZEZpZWxk
KGZpbmFsIEZpZWxkRGVzY3JpcHRvclR5cGUgZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgdmFsdWUpIHsKLSAgICBpZiAoIWRlc2NyaXB0b3Iu
aXNSZXBlYXRlZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u
KAotICAgICAgICAiYWRkUmVwZWF0ZWRGaWVsZCgpIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiByZXBl
YXRlZCBmaWVsZHMuIik7Ci0gICAgfQotCi0gICAgdmVyaWZ5VHlwZShkZXNjcmlwdG9yLmdldExp
dGVUeXBlKCksIHZhbHVlKTsKLQotICAgIGZpbmFsIE9iamVjdCBleGlzdGluZ1ZhbHVlID0gZ2V0
RmllbGQoZGVzY3JpcHRvcik7Ci0gICAgTGlzdDxPYmplY3Q+IGxpc3Q7Ci0gICAgaWYgKGV4aXN0
aW5nVmFsdWUgPT0gbnVsbCkgewotICAgICAgbGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0Pigp
OwotICAgICAgZmllbGRzLnB1dChkZXNjcmlwdG9yLCBsaXN0KTsKLSAgICB9IGVsc2UgewotICAg
ICAgbGlzdCA9IChMaXN0PE9iamVjdD4pIGV4aXN0aW5nVmFsdWU7Ci0gICAgfQotCi0gICAgbGlz
dC5hZGQodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVu
IG9iamVjdCBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIHRvIGJlIGEgdmFsaWQKLSAgICogdmFsdWUg
Zm9yIHRoZSBnaXZlbiBmaWVsZC4gIChGb3IgcmVwZWF0ZWQgZmllbGRzLCB0aGlzIGNoZWNrcyBp
ZiB0aGUKLSAgICogb2JqZWN0IGlzIHRoZSByaWdodCB0eXBlIHRvIGJlIG9uZSBlbGVtZW50IG9m
IHRoZSBmaWVsZC4pCi0gICAqCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u
IFRoZSB2YWx1ZSBpcyBub3Qgb2YgdGhlIHJpZ2h0IHR5cGUuCi0gICAqLwotICBwcml2YXRlIHN0
YXRpYyB2b2lkIHZlcmlmeVR5cGUoZmluYWwgV2lyZUZvcm1hdC5GaWVsZFR5cGUgdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAg
IGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRp
b24oKTsKLSAgICB9Ci0KLSAgICBib29sZWFuIGlzVmFsaWQgPSBmYWxzZTsKLSAgICBzd2l0Y2gg
KHR5cGUuZ2V0SmF2YVR5cGUoKSkgewotICAgICAgY2FzZSBJTlQ6ICAgICAgICAgIGlzVmFsaWQg
PSB2YWx1ZSBpbnN0YW5jZW9mIEludGVnZXIgICA7IGJyZWFrOwotICAgICAgY2FzZSBMT05HOiAg
ICAgICAgIGlzVmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIExvbmcgICAgICA7IGJyZWFrOwotICAg
ICAgY2FzZSBGTE9BVDogICAgICAgIGlzVmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0ICAg
ICA7IGJyZWFrOwotICAgICAgY2FzZSBET1VCTEU6ICAgICAgIGlzVmFsaWQgPSB2YWx1ZSBpbnN0
YW5jZW9mIERvdWJsZSAgICA7IGJyZWFrOwotICAgICAgY2FzZSBCT09MRUFOOiAgICAgIGlzVmFs
aWQgPSB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4gICA7IGJyZWFrOwotICAgICAgY2FzZSBTVFJJ
Tkc6ICAgICAgIGlzVmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyAgICA7IGJyZWFrOwot
ICAgICAgY2FzZSBCWVRFX1NUUklORzoKLSAgICAgICAgaXNWYWxpZCA9IHZhbHVlIGluc3RhbmNl
b2YgQnl0ZVN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIGJ5dGVbXTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVOVU06Ci0gICAgICAgIC8vIFRPRE8oa2VudG9uKTogIENhbGxlciBtdXN0
IGRvIHR5cGUgY2hlY2tpbmcgaGVyZSwgSSBndWVzcy4KLSAgICAgICAgaXNWYWxpZCA9Ci0gICAg
ICAgICAgICAodmFsdWUgaW5zdGFuY2VvZiBJbnRlZ2VyIHx8IHZhbHVlIGluc3RhbmNlb2YgSW50
ZXJuYWwuRW51bUxpdGUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgTUVTU0FHRToKLSAg
ICAgICAgLy8gVE9ETyhrZW50b24pOiAgQ2FsbGVyIG11c3QgZG8gdHlwZSBjaGVja2luZyBoZXJl
LCBJIGd1ZXNzLgotICAgICAgICBpc1ZhbGlkID0KLSAgICAgICAgICAgICh2YWx1ZSBpbnN0YW5j
ZW9mIE1lc3NhZ2VMaXRlKSB8fCAodmFsdWUgaW5zdGFuY2VvZiBMYXp5RmllbGQpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgIC8vIFRPRE8oa2Vu
dG9uKTogIFdoZW4gY2hhaW5pbmcgY2FsbHMgdG8gc2V0RmllbGQoKSwgaXQgY2FuIGJlIGhhcmQg
dG8KLSAgICAgIC8vICAgdGVsbCBmcm9tIHRoZSBzdGFjayB0cmFjZSB3aGljaCBleGFjdCBjYWxs
IGZhaWxlZCwgc2luY2UgdGhlIHdob2xlCi0gICAgICAvLyAgIGNoYWluIGlzIGNvbnNpZGVyZWQg
b25lIGxpbmUgb2YgY29kZS4gIEl0IHdvdWxkIGJlIG5pY2UgdG8gcHJpbnQKLSAgICAgIC8vICAg
bW9yZSBpbmZvcm1hdGlvbiBoZXJlLCBlLmcuIG5hbWluZyB0aGUgZmllbGQuICBXZSB1c2VkIHRv
IGRvIHRoYXQuCi0gICAgICAvLyAgIEJ1dCB3ZSBjYW4ndCBub3cgdGhhdCBGaWVsZFNldCBkb2Vz
bid0IHVzZSBkZXNjcmlwdG9ycy4gIE1heWJlIHRoaXMKLSAgICAgIC8vICAgaXNuJ3QgYSBiaWcg
ZGVhbCwgdGhvdWdoLCBzaW5jZSBpdCB3b3VsZCBvbmx5IHJlYWxseSBhcHBseSB3aGVuIHVzaW5n
Ci0gICAgICAvLyAgIHJlZmxlY3Rpb24gYW5kIGdlbmVyYWxseSBwZW9wbGUgZG9uJ3QgY2hhaW4g
cmVmbGVjdGlvbiBzZXR0ZXJzLgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2Vw
dGlvbigKLSAgICAgICAgIldyb25nIG9iamVjdCB0eXBlIHVzZWQgd2l0aCBwcm90b2NvbCBtZXNz
YWdlIHJlZmxlY3Rpb24uIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUGFy
c2luZyBhbmQgc2VyaWFsaXphdGlvbgotCi0gIC8qKgotICAgKiBTZWUge0BsaW5rIE1lc3NhZ2Uj
aXNJbml0aWFsaXplZCgpfS4gIE5vdGU6ICBTaW5jZSB7QGNvZGUgRmllbGRTZXR9Ci0gICAqIGl0
c2VsZiBkb2VzIG5vdCBoYXZlIGFueSB3YXkgb2Yga25vd2luZyBhYm91dCByZXF1aXJlZCBmaWVs
ZHMgdGhhdAotICAgKiBhcmVuJ3QgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgc2V0LCBpdCBpcyB1
cCB0byB0aGUgY2FsbGVyIHRvIGNoZWNrCi0gICAqIHRoYXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBh
cmUgcHJlc2VudC4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzSW5pdGlhbGl6ZWQoKSB7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMuZ2V0TnVtQXJyYXlFbnRyaWVzKCk7IGkrKykg
ewotICAgICAgaWYgKCFpc0luaXRpYWxpemVkKGZpZWxkcy5nZXRBcnJheUVudHJ5QXQoaSkpKSB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChmaW5hbCBN
YXAuRW50cnk8RmllbGREZXNjcmlwdG9yVHlwZSwgT2JqZWN0PiBlbnRyeSA6Ci0gICAgICAgICAg
ICAgZmllbGRzLmdldE92ZXJmbG93RW50cmllcygpKSB7Ci0gICAgICBpZiAoIWlzSW5pdGlhbGl6
ZWQoZW50cnkpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLQotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAg
cHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQoCi0gICAgICBmaW5hbCBNYXAuRW50cnk8Rmll
bGREZXNjcmlwdG9yVHlwZSwgT2JqZWN0PiBlbnRyeSkgewotICAgIGZpbmFsIEZpZWxkRGVzY3Jp
cHRvclR5cGUgZGVzY3JpcHRvciA9IGVudHJ5LmdldEtleSgpOwotICAgIGlmIChkZXNjcmlwdG9y
LmdldExpdGVKYXZhVHlwZSgpID09IFdpcmVGb3JtYXQuSmF2YVR5cGUuTUVTU0FHRSkgewotICAg
ICAgaWYgKGRlc2NyaXB0b3IuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICAgIGZvciAoZmluYWwgTWVz
c2FnZUxpdGUgZWxlbWVudDoKLSAgICAgICAgICAgICAgICAgKExpc3Q8TWVzc2FnZUxpdGU+KSBl
bnRyeS5nZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgaWYgKCFlbGVtZW50LmlzSW5pdGlhbGl6ZWQo
KSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgT2JqZWN0IHZhbHVlID0gZW50cnkuZ2V0VmFsdWUoKTsK
LSAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWVzc2FnZUxpdGUpIHsKLSAgICAgICAgICBp
ZiAoISgoTWVzc2FnZUxpdGUpIHZhbHVlKS5pc0luaXRpYWxpemVkKCkpIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5z
dGFuY2VvZiBMYXp5RmllbGQpIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAg
ICAgICAgICAgICAiV3Jvbmcgb2JqZWN0IHR5cGUgdXNlZCB3aXRoIHByb3RvY29sIG1lc3NhZ2Ug
cmVmbGVjdGlvbi4iKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotCi0gIC8qKgotICAgKiBHaXZlbiBhIGZpZWxkIHR5cGUsIHJldHVybiB0aGUgd2ly
ZSB0eXBlLgotICAgKgotICAgKiBAcmV0dXJucyBPbmUgb2YgdGhlIHtAY29kZSBXSVJFVFlQRV99
IGNvbnN0YW50cyBkZWZpbmVkIGluCi0gICAqICAgICAgICAgIHtAbGluayBXaXJlRm9ybWF0fS4K
LSAgICovCi0gIHN0YXRpYyBpbnQgZ2V0V2lyZUZvcm1hdEZvckZpZWxkVHlwZShmaW5hbCBXaXJl
Rm9ybWF0LkZpZWxkVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbGVhbiBpc1BhY2tlZCkgewotICAgIGlmIChpc1BhY2tlZCkgewotICAgICAgcmV0
dXJuIFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRDsKLSAgICB9IGVsc2Ugewot
ICAgICAgcmV0dXJuIHR5cGUuZ2V0V2lyZVR5cGUoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAg
ICogTGlrZSB7QGxpbmsgTWVzc2FnZS5CdWlsZGVyI21lcmdlRnJvbShNZXNzYWdlKX0sIGJ1dCBt
ZXJnZXMgZnJvbSBhbm90aGVyIAotICAgKiB7QGxpbmsgRmllbGRTZXR9LgotICAgKi8KLSAgcHVi
bGljIHZvaWQgbWVyZ2VGcm9tKGZpbmFsIEZpZWxkU2V0PEZpZWxkRGVzY3JpcHRvclR5cGU+IG90
aGVyKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlci5maWVsZHMuZ2V0TnVtQXJyYXlF
bnRyaWVzKCk7IGkrKykgewotICAgICAgbWVyZ2VGcm9tRmllbGQob3RoZXIuZmllbGRzLmdldEFy
cmF5RW50cnlBdChpKSk7Ci0gICAgfQotICAgIGZvciAoZmluYWwgTWFwLkVudHJ5PEZpZWxkRGVz
Y3JpcHRvclR5cGUsIE9iamVjdD4gZW50cnkgOgotICAgICAgICAgICAgIG90aGVyLmZpZWxkcy5n
ZXRPdmVyZmxvd0VudHJpZXMoKSkgewotICAgICAgbWVyZ2VGcm9tRmllbGQoZW50cnkpOwotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgT2JqZWN0IGNsb25lSWZNdXRhYmxlKE9iamVjdCB2YWx1ZSkg
ewotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIGJ5dGVbXSkgewotICAgICAgYnl0ZVtdIGJ5dGVz
ID0gKGJ5dGVbXSkgdmFsdWU7Ci0gICAgICBieXRlW10gY29weSA9IG5ldyBieXRlW2J5dGVzLmxl
bmd0aF07Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ5dGVzLCAwLCBjb3B5LCAwLCBieXRlcy5s
ZW5ndGgpOwotICAgICAgcmV0dXJuIGNvcHk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICB9Ci0gIH0KLQotICBAU3VwcHJlc3NXYXJuaW5ncyh7InVuY2hlY2tlZCIsICJy
YXd0eXBlcyJ9KQotICBwcml2YXRlIHZvaWQgbWVyZ2VGcm9tRmllbGQoCi0gICAgICBmaW5hbCBN
YXAuRW50cnk8RmllbGREZXNjcmlwdG9yVHlwZSwgT2JqZWN0PiBlbnRyeSkgewotICAgIGZpbmFs
IEZpZWxkRGVzY3JpcHRvclR5cGUgZGVzY3JpcHRvciA9IGVudHJ5LmdldEtleSgpOwotICAgIE9i
amVjdCBvdGhlclZhbHVlID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICBpZiAob3RoZXJWYWx1ZSBp
bnN0YW5jZW9mIExhenlGaWVsZCkgewotICAgICAgb3RoZXJWYWx1ZSA9ICgoTGF6eUZpZWxkKSBv
dGhlclZhbHVlKS5nZXRWYWx1ZSgpOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzUmVw
ZWF0ZWQoKSkgewotICAgICAgT2JqZWN0IHZhbHVlID0gZ2V0RmllbGQoZGVzY3JpcHRvcik7Ci0g
ICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUxpc3Qo
KTsKLSAgICAgIH0KLSAgICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgOiAoTGlzdCkgb3RoZXJWYWx1
ZSkgewotICAgICAgICAoKExpc3QpIHZhbHVlKS5hZGQoY2xvbmVJZk11dGFibGUoZWxlbWVudCkp
OwotICAgICAgfQotICAgICAgZmllbGRzLnB1dChkZXNjcmlwdG9yLCB2YWx1ZSk7Ci0gICAgfSBl
bHNlIGlmIChkZXNjcmlwdG9yLmdldExpdGVKYXZhVHlwZSgpID09IFdpcmVGb3JtYXQuSmF2YVR5
cGUuTUVTU0FHRSkgewotICAgICAgT2JqZWN0IHZhbHVlID0gZ2V0RmllbGQoZGVzY3JpcHRvcik7
Ci0gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICBmaWVsZHMucHV0KGRlc2NyaXB0
b3IsIGNsb25lSWZNdXRhYmxlKG90aGVyVmFsdWUpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIE1lcmdlIHRoZSBtZXNzYWdlcy4KLSAgICAgICAgICB2YWx1ZSA9IGRlc2NyaXB0b3IuaW50
ZXJuYWxNZXJnZUZyb20oCi0gICAgICAgICAgICAgICAgKChNZXNzYWdlTGl0ZSkgdmFsdWUpLnRv
QnVpbGRlcigpLCAoTWVzc2FnZUxpdGUpIG90aGVyVmFsdWUpCi0gICAgICAgICAgICAgICAgLmJ1
aWxkKCk7Ci0KLSAgICAgICAgZmllbGRzLnB1dChkZXNjcmlwdG9yLCB2YWx1ZSk7Ci0gICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZpZWxkcy5wdXQoZGVzY3JpcHRvciwgY2xvbmVJZk11dGFi
bGUob3RoZXJWYWx1ZSkpOwotICAgIH0KLSAgfQotCi0gIC8vIFRPRE8oa2VudG9uKTogIE1vdmUg
c3RhdGljIHBhcnNpbmcgYW5kIHNlcmlhbGl6YXRpb24gbWV0aG9kcyBpbnRvIHNvbWUKLSAgLy8g
ICBvdGhlciBjbGFzcy4gIFByb2JhYmx5IFdpcmVGb3JtYXQuCi0KLSAgLyoqCi0gICAqIFJlYWQg
YSBmaWVsZCBvZiBhbnkgcHJpbWl0aXZlIHR5cGUgZm9yIGltbXV0YWJsZSBtZXNzYWdlcyBmcm9t
IGEKLSAgICogQ29kZWRJbnB1dFN0cmVhbS4gRW51bXMsIGdyb3VwcywgYW5kIGVtYmVkZGVkIG1l
c3NhZ2VzIGFyZSBub3QgaGFuZGxlZCBieQotICAgKiB0aGlzIG1ldGhvZC4KLSAgICoKLSAgICog
QHBhcmFtIGlucHV0IFRoZSBzdHJlYW0gZnJvbSB3aGljaCB0byByZWFkLgotICAgKiBAcGFyYW0g
dHlwZSBEZWNsYXJlZCB0eXBlIG9mIHRoZSBmaWVsZC4KLSAgICogQHBhcmFtIGNoZWNrVXRmOCBX
aGVuIHRydWUsIGNoZWNrIHRoYXQgdGhlIGlucHV0IGlzIHZhbGlkIHV0ZjguCi0gICAqIEByZXR1
cm4gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZmllbGQncyB2YWx1ZSwgb2YgdGhlIGV4YWN0
Ci0gICAqICAgICAgICAgdHlwZSB3aGljaCB3b3VsZCBiZSByZXR1cm5lZCBieQotICAgKiAgICAg
ICAgIHtAbGluayBNZXNzYWdlI2dldEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvcil9
IGZvcgotICAgKiAgICAgICAgIHRoaXMgZmllbGQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE9i
amVjdCByZWFkUHJpbWl0aXZlRmllbGQoCi0gICAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0LAot
ICAgICAgZmluYWwgV2lyZUZvcm1hdC5GaWVsZFR5cGUgdHlwZSwKLSAgICAgIGJvb2xlYW4gY2hl
Y2tVdGY4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGlmIChjaGVja1V0ZjgpIHsKLSAgICAg
IHJldHVybiBXaXJlRm9ybWF0LnJlYWRQcmltaXRpdmVGaWVsZChpbnB1dCwgdHlwZSwKLSAgICAg
ICAgICBXaXJlRm9ybWF0LlV0ZjhWYWxpZGF0aW9uLlNUUklDVCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHJldHVybiBXaXJlRm9ybWF0LnJlYWRQcmltaXRpdmVGaWVsZChpbnB1dCwgdHlwZSwKLSAg
ICAgICAgICBXaXJlRm9ybWF0LlV0ZjhWYWxpZGF0aW9uLkxPT1NFKTsKLSAgICB9Ci0gIH0KLQot
Ci0gIC8qKiBTZWUge0BsaW5rIE1lc3NhZ2Ujd3JpdGVUbyhDb2RlZE91dHB1dFN0cmVhbSl9LiAq
LwotICBwdWJsaWMgdm9pZCB3cml0ZVRvKGZpbmFsIENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkK
LSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZmllbGRzLmdldE51bUFycmF5RW50cmllcygpOyBpKyspIHsKLSAgICAgIGZp
bmFsIE1hcC5FbnRyeTxGaWVsZERlc2NyaXB0b3JUeXBlLCBPYmplY3Q+IGVudHJ5ID0KLSAgICAg
ICAgICBmaWVsZHMuZ2V0QXJyYXlFbnRyeUF0KGkpOwotICAgICAgd3JpdGVGaWVsZChlbnRyeS5n
ZXRLZXkoKSwgZW50cnkuZ2V0VmFsdWUoKSwgb3V0cHV0KTsKLSAgICB9Ci0gICAgZm9yIChmaW5h
bCBNYXAuRW50cnk8RmllbGREZXNjcmlwdG9yVHlwZSwgT2JqZWN0PiBlbnRyeSA6Ci0gICAgICAg
ICBmaWVsZHMuZ2V0T3ZlcmZsb3dFbnRyaWVzKCkpIHsKLSAgICAgIHdyaXRlRmllbGQoZW50cnku
Z2V0S2V5KCksIGVudHJ5LmdldFZhbHVlKCksIG91dHB1dCk7Ci0gICAgfQotICB9Ci0KLSAgLyoq
Ci0gICAqIExpa2Uge0BsaW5rICN3cml0ZVRvfSBidXQgdXNlcyBNZXNzYWdlU2V0IHdpcmUgZm9y
bWF0LgotICAgKi8KLSAgcHVibGljIHZvaWQgd3JpdGVNZXNzYWdlU2V0VG8oZmluYWwgQ29kZWRP
dXRwdXRTdHJlYW0gb3V0cHV0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLmdldE51bUFy
cmF5RW50cmllcygpOyBpKyspIHsKLSAgICAgIHdyaXRlTWVzc2FnZVNldFRvKGZpZWxkcy5nZXRB
cnJheUVudHJ5QXQoaSksIG91dHB1dCk7Ci0gICAgfQotICAgIGZvciAoZmluYWwgTWFwLkVudHJ5
PEZpZWxkRGVzY3JpcHRvclR5cGUsIE9iamVjdD4gZW50cnkgOgotICAgICAgICAgICAgIGZpZWxk
cy5nZXRPdmVyZmxvd0VudHJpZXMoKSkgewotICAgICAgd3JpdGVNZXNzYWdlU2V0VG8oZW50cnks
IG91dHB1dCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdyaXRlTWVzc2FnZVNldFRv
KAotICAgICAgZmluYWwgTWFwLkVudHJ5PEZpZWxkRGVzY3JpcHRvclR5cGUsIE9iamVjdD4gZW50
cnksCi0gICAgICBmaW5hbCBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgZmluYWwgRmllbGREZXNjcmlwdG9yVHlwZSBkZXNjcmlwdG9yID0gZW50cnku
Z2V0S2V5KCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuZ2V0TGl0ZUphdmFUeXBlKCkgPT0gV2lyZUZv
cm1hdC5KYXZhVHlwZS5NRVNTQUdFICYmCi0gICAgICAgICFkZXNjcmlwdG9yLmlzUmVwZWF0ZWQo
KSAmJiAhZGVzY3JpcHRvci5pc1BhY2tlZCgpKSB7Ci0gICAgICBPYmplY3QgdmFsdWUgPSBlbnRy
eS5nZXRWYWx1ZSgpOwotICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eUZpZWxkKSB7Ci0g
ICAgICAgIHZhbHVlID0gKChMYXp5RmllbGQpIHZhbHVlKS5nZXRWYWx1ZSgpOwotICAgICAgfQot
ICAgICAgb3V0cHV0LndyaXRlTWVzc2FnZVNldEV4dGVuc2lvbihlbnRyeS5nZXRLZXkoKS5nZXRO
dW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1lc3NhZ2VM
aXRlKSB2YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHdyaXRlRmllbGQoZGVzY3JpcHRvciwg
ZW50cnkuZ2V0VmFsdWUoKSwgb3V0cHV0KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogV3Jp
dGUgYSBzaW5nbGUgdGFnLXZhbHVlIHBhaXIgdG8gdGhlIHN0cmVhbS4KLSAgICoKLSAgICogQHBh
cmFtIG91dHB1dCBUaGUgb3V0cHV0IHN0cmVhbS4KLSAgICogQHBhcmFtIHR5cGUgICBUaGUgZmll
bGQncyB0eXBlLgotICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBmaWVsZCdzIG51bWJlci4KLSAgICog
QHBhcmFtIHZhbHVlICBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmaWVsZCdzIHZhbHVlLiAgTXVz
dCBiZSBvZiB0aGUgZXhhY3QKLSAgICogICAgICAgICAgICAgICB0eXBlIHdoaWNoIHdvdWxkIGJl
IHJldHVybmVkIGJ5Ci0gICAqICAgICAgICAgICAgICAge0BsaW5rIE1lc3NhZ2UjZ2V0RmllbGQo
RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yKX0gZm9yCi0gICAqICAgICAgICAgICAgICAgdGhp
cyBmaWVsZC4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVFbGVtZW50KGZpbmFs
IENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmluYWwgV2lyZUZvcm1hdC5GaWVsZFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG51bWJlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewot
ICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZ3JvdXBzLCB3aGljaCBuZWVkIGEgc3RhcnQgYW5kIGVu
ZCB0YWc7IG90aGVyIGZpZWxkcwotICAgIC8vIGNhbiBqdXN0IHVzZSB3cml0ZVRhZygpIGFuZCB3
cml0ZUZpZWxkTm9UYWcoKS4KLSAgICBpZiAodHlwZSA9PSBXaXJlRm9ybWF0LkZpZWxkVHlwZS5H
Uk9VUCkgewotICAgICAgICBvdXRwdXQud3JpdGVHcm91cChudW1iZXIsIChNZXNzYWdlTGl0ZSkg
dmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBvdXRwdXQud3JpdGVUYWcobnVtYmVyLCBnZXRX
aXJlRm9ybWF0Rm9yRmllbGRUeXBlKHR5cGUsIGZhbHNlKSk7Ci0gICAgICB3cml0ZUVsZW1lbnRO
b1RhZyhvdXRwdXQsIHR5cGUsIHZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogV3Jp
dGUgYSBmaWVsZCBvZiBhcmJpdHJhcnkgdHlwZSwgd2l0aG91dCBpdHMgdGFnLCB0byB0aGUgc3Ry
ZWFtLgotICAgKgotICAgKiBAcGFyYW0gb3V0cHV0IFRoZSBvdXRwdXQgc3RyZWFtLgotICAgKiBA
cGFyYW0gdHlwZSBUaGUgZmllbGQncyB0eXBlLgotICAgKiBAcGFyYW0gdmFsdWUgIE9iamVjdCBy
ZXByZXNlbnRpbmcgdGhlIGZpZWxkJ3MgdmFsdWUuICBNdXN0IGJlIG9mIHRoZSBleGFjdAotICAg
KiAgICAgICAgICAgICAgIHR5cGUgd2hpY2ggd291bGQgYmUgcmV0dXJuZWQgYnkKLSAgICogICAg
ICAgICAgICAgICB7QGxpbmsgTWVzc2FnZSNnZXRGaWVsZChEZXNjcmlwdG9ycy5GaWVsZERlc2Ny
aXB0b3IpfSBmb3IKLSAgICogICAgICAgICAgICAgICB0aGlzIGZpZWxkLgotICAgKi8KLSAgc3Rh
dGljIHZvaWQgd3JpdGVFbGVtZW50Tm9UYWcoCi0gICAgICBmaW5hbCBDb2RlZE91dHB1dFN0cmVh
bSBvdXRwdXQsCi0gICAgICBmaW5hbCBXaXJlRm9ybWF0LkZpZWxkVHlwZSB0eXBlLAotICAgICAg
ZmluYWwgT2JqZWN0IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgICAgY2FzZSBET1VCTEUgIDogb3V0cHV0LndyaXRlRG91YmxlTm9UYWcgICgoRG91
YmxlICAgICApIHZhbHVlKTsgYnJlYWs7Ci0gICAgICBjYXNlIEZMT0FUICAgOiBvdXRwdXQud3Jp
dGVGbG9hdE5vVGFnICAgKChGbG9hdCAgICAgICkgdmFsdWUpOyBicmVhazsKLSAgICAgIGNhc2Ug
SU5UNjQgICA6IG91dHB1dC53cml0ZUludDY0Tm9UYWcgICAoKExvbmcgICAgICAgKSB2YWx1ZSk7
IGJyZWFrOwotICAgICAgY2FzZSBVSU5UNjQgIDogb3V0cHV0LndyaXRlVUludDY0Tm9UYWcgICgo
TG9uZyAgICAgICApIHZhbHVlKTsgYnJlYWs7Ci0gICAgICBjYXNlIElOVDMyICAgOiBvdXRwdXQu
d3JpdGVJbnQzMk5vVGFnICAgKChJbnRlZ2VyICAgICkgdmFsdWUpOyBicmVhazsKLSAgICAgIGNh
c2UgRklYRUQ2NCA6IG91dHB1dC53cml0ZUZpeGVkNjROb1RhZyAoKExvbmcgICAgICAgKSB2YWx1
ZSk7IGJyZWFrOwotICAgICAgY2FzZSBGSVhFRDMyIDogb3V0cHV0LndyaXRlRml4ZWQzMk5vVGFn
ICgoSW50ZWdlciAgICApIHZhbHVlKTsgYnJlYWs7Ci0gICAgICBjYXNlIEJPT0wgICAgOiBvdXRw
dXQud3JpdGVCb29sTm9UYWcgICAgKChCb29sZWFuICAgICkgdmFsdWUpOyBicmVhazsKLSAgICAg
IGNhc2UgR1JPVVAgICA6IG91dHB1dC53cml0ZUdyb3VwTm9UYWcgICAoKE1lc3NhZ2VMaXRlKSB2
YWx1ZSk7IGJyZWFrOwotICAgICAgY2FzZSBNRVNTQUdFIDogb3V0cHV0LndyaXRlTWVzc2FnZU5v
VGFnICgoTWVzc2FnZUxpdGUpIHZhbHVlKTsgYnJlYWs7Ci0gICAgICBjYXNlIFNUUklORzoKLSAg
ICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQnl0ZVN0cmluZykgewotICAgICAgICAgIG91dHB1
dC53cml0ZUJ5dGVzTm9UYWcoKEJ5dGVTdHJpbmcpIHZhbHVlKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICBvdXRwdXQud3JpdGVTdHJpbmdOb1RhZygoU3RyaW5nKSB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEJZVEVTOgotICAgICAgICBpZiAodmFs
dWUgaW5zdGFuY2VvZiBCeXRlU3RyaW5nKSB7Ci0gICAgICAgICAgb3V0cHV0LndyaXRlQnl0ZXNO
b1RhZygoQnl0ZVN0cmluZykgdmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG91
dHB1dC53cml0ZUJ5dGVBcnJheU5vVGFnKChieXRlW10pIHZhbHVlKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgVUlOVDMyICA6IG91dHB1dC53cml0ZVVJbnQzMk5vVGFn
ICAoKEludGVnZXIgICAgKSB2YWx1ZSk7IGJyZWFrOwotICAgICAgY2FzZSBTRklYRUQzMjogb3V0
cHV0LndyaXRlU0ZpeGVkMzJOb1RhZygoSW50ZWdlciAgICApIHZhbHVlKTsgYnJlYWs7Ci0gICAg
ICBjYXNlIFNGSVhFRDY0OiBvdXRwdXQud3JpdGVTRml4ZWQ2NE5vVGFnKChMb25nICAgICAgICkg
dmFsdWUpOyBicmVhazsKLSAgICAgIGNhc2UgU0lOVDMyICA6IG91dHB1dC53cml0ZVNJbnQzMk5v
VGFnICAoKEludGVnZXIgICAgKSB2YWx1ZSk7IGJyZWFrOwotICAgICAgY2FzZSBTSU5UNjQgIDog
b3V0cHV0LndyaXRlU0ludDY0Tm9UYWcgICgoTG9uZyAgICAgICApIHZhbHVlKTsgYnJlYWs7Ci0K
LSAgICAgIGNhc2UgRU5VTToKLSAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSW50ZXJuYWwu
RW51bUxpdGUpIHsKLSAgICAgICAgICBvdXRwdXQud3JpdGVFbnVtTm9UYWcoKChJbnRlcm5hbC5F
bnVtTGl0ZSkgdmFsdWUpLmdldE51bWJlcigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBvdXRwdXQud3JpdGVFbnVtTm9UYWcoKChJbnRlZ2VyKSB2YWx1ZSkuaW50VmFsdWUoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLyoqIFdyaXRlIGEgc2lu
Z2xlIGZpZWxkLiAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVGaWVsZChmaW5hbCBGaWVs
ZERlc2NyaXB0b3JMaXRlPD8+IGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbmFsIE9iamVjdCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmluYWwgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIFdpcmVGb3JtYXQuRmllbGRUeXBl
IHR5cGUgPSBkZXNjcmlwdG9yLmdldExpdGVUeXBlKCk7Ci0gICAgaW50IG51bWJlciA9IGRlc2Ny
aXB0b3IuZ2V0TnVtYmVyKCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNSZXBlYXRlZCgpKSB7Ci0g
ICAgICBmaW5hbCBMaXN0PD8+IHZhbHVlTGlzdCA9IChMaXN0PD8+KXZhbHVlOwotICAgICAgaWYg
KGRlc2NyaXB0b3IuaXNQYWNrZWQoKSkgewotICAgICAgICBvdXRwdXQud3JpdGVUYWcobnVtYmVy
LCBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpOwotICAgICAgICAvLyBDb21w
dXRlIHRoZSB0b3RhbCBkYXRhIHNpemUgc28gdGhlIGxlbmd0aCBjYW4gYmUgd3JpdHRlbi4KLSAg
ICAgICAgaW50IGRhdGFTaXplID0gMDsKLSAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgZWxlbWVu
dCA6IHZhbHVlTGlzdCkgewotICAgICAgICAgIGRhdGFTaXplICs9IGNvbXB1dGVFbGVtZW50U2l6
ZU5vVGFnKHR5cGUsIGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIG91dHB1dC53cml0ZVJh
d1ZhcmludDMyKGRhdGFTaXplKTsKLSAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEgaXRzZWxmLCB3
aXRob3V0IGFueSB0YWdzLgotICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBlbGVtZW50IDogdmFs
dWVMaXN0KSB7Ci0gICAgICAgICAgd3JpdGVFbGVtZW50Tm9UYWcob3V0cHV0LCB0eXBlLCBlbGVt
ZW50KTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChmaW5hbCBPYmpl
Y3QgZWxlbWVudCA6IHZhbHVlTGlzdCkgewotICAgICAgICAgIHdyaXRlRWxlbWVudChvdXRwdXQs
IHR5cGUsIG51bWJlciwgZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eUZpZWxkKSB7Ci0gICAgICAgIHdyaXRl
RWxlbWVudChvdXRwdXQsIHR5cGUsIG51bWJlciwgKChMYXp5RmllbGQpIHZhbHVlKS5nZXRWYWx1
ZSgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHdyaXRlRWxlbWVudChvdXRwdXQsIHR5cGUs
IG51bWJlciwgdmFsdWUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTZWUg
e0BsaW5rIE1lc3NhZ2UjZ2V0U2VyaWFsaXplZFNpemUoKX0uICBJdCdzIHVwIHRvIHRoZSBjYWxs
ZXIgdG8gY2FjaGUKLSAgICogdGhlIHJlc3VsdGluZyBzaXplIGlmIGRlc2lyZWQuCi0gICAqLwot
ICBwdWJsaWMgaW50IGdldFNlcmlhbGl6ZWRTaXplKCkgewotICAgIGludCBzaXplID0gMDsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5nZXROdW1BcnJheUVudHJpZXMoKTsgaSsrKSB7
Ci0gICAgICBmaW5hbCBNYXAuRW50cnk8RmllbGREZXNjcmlwdG9yVHlwZSwgT2JqZWN0PiBlbnRy
eSA9Ci0gICAgICAgICAgZmllbGRzLmdldEFycmF5RW50cnlBdChpKTsKLSAgICAgIHNpemUgKz0g
Y29tcHV0ZUZpZWxkU2l6ZShlbnRyeS5nZXRLZXkoKSwgZW50cnkuZ2V0VmFsdWUoKSk7Ci0gICAg
fQotICAgIGZvciAoZmluYWwgTWFwLkVudHJ5PEZpZWxkRGVzY3JpcHRvclR5cGUsIE9iamVjdD4g
ZW50cnkgOgotICAgICAgICAgZmllbGRzLmdldE92ZXJmbG93RW50cmllcygpKSB7Ci0gICAgICBz
aXplICs9IGNvbXB1dGVGaWVsZFNpemUoZW50cnkuZ2V0S2V5KCksIGVudHJ5LmdldFZhbHVlKCkp
OwotICAgIH0KLSAgICByZXR1cm4gc2l6ZTsKLSAgfQotCi0gIC8qKgotICAgKiBMaWtlIHtAbGlu
ayAjZ2V0U2VyaWFsaXplZFNpemV9IGJ1dCB1c2VzIE1lc3NhZ2VTZXQgd2lyZSBmb3JtYXQuCi0g
ICAqLwotICBwdWJsaWMgaW50IGdldE1lc3NhZ2VTZXRTZXJpYWxpemVkU2l6ZSgpIHsKLSAgICBp
bnQgc2l6ZSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMuZ2V0TnVtQXJyYXlF
bnRyaWVzKCk7IGkrKykgewotICAgICAgc2l6ZSArPSBnZXRNZXNzYWdlU2V0U2VyaWFsaXplZFNp
emUoZmllbGRzLmdldEFycmF5RW50cnlBdChpKSk7Ci0gICAgfQotICAgIGZvciAoZmluYWwgTWFw
LkVudHJ5PEZpZWxkRGVzY3JpcHRvclR5cGUsIE9iamVjdD4gZW50cnkgOgotICAgICAgICAgICAg
IGZpZWxkcy5nZXRPdmVyZmxvd0VudHJpZXMoKSkgewotICAgICAgc2l6ZSArPSBnZXRNZXNzYWdl
U2V0U2VyaWFsaXplZFNpemUoZW50cnkpOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZTsKLSAgfQot
Ci0gIHByaXZhdGUgaW50IGdldE1lc3NhZ2VTZXRTZXJpYWxpemVkU2l6ZSgKLSAgICAgIGZpbmFs
IE1hcC5FbnRyeTxGaWVsZERlc2NyaXB0b3JUeXBlLCBPYmplY3Q+IGVudHJ5KSB7Ci0gICAgZmlu
YWwgRmllbGREZXNjcmlwdG9yVHlwZSBkZXNjcmlwdG9yID0gZW50cnkuZ2V0S2V5KCk7Ci0gICAg
T2JqZWN0IHZhbHVlID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICBpZiAoZGVzY3JpcHRvci5nZXRM
aXRlSmF2YVR5cGUoKSA9PSBXaXJlRm9ybWF0LkphdmFUeXBlLk1FU1NBR0UKLSAgICAgICAgJiYg
IWRlc2NyaXB0b3IuaXNSZXBlYXRlZCgpICYmICFkZXNjcmlwdG9yLmlzUGFja2VkKCkpIHsKLSAg
ICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExhenlGaWVsZCkgewotICAgICAgICByZXR1cm4gQ29k
ZWRPdXRwdXRTdHJlYW0uY29tcHV0ZUxhenlGaWVsZE1lc3NhZ2VTZXRFeHRlbnNpb25TaXplKAot
ICAgICAgICAgICAgZW50cnkuZ2V0S2V5KCkuZ2V0TnVtYmVyKCksIChMYXp5RmllbGQpIHZhbHVl
KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21w
dXRlTWVzc2FnZVNldEV4dGVuc2lvblNpemUoCi0gICAgICAgICAgICBlbnRyeS5nZXRLZXkoKS5n
ZXROdW1iZXIoKSwgKE1lc3NhZ2VMaXRlKSB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHJldHVybiBjb21wdXRlRmllbGRTaXplKGRlc2NyaXB0b3IsIHZhbHVlKTsKLSAgICB9
Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291
bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhCi0gICAqIHNpbmdsZSB0YWcvdmFsdWUgcGFpciBvZiBh
cmJpdHJhcnkgdHlwZS4KLSAgICoKLSAgICogQHBhcmFtIHR5cGUgICBUaGUgZmllbGQncyB0eXBl
LgotICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBmaWVsZCdzIG51bWJlci4KLSAgICogQHBhcmFtIHZh
bHVlICBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmaWVsZCdzIHZhbHVlLiAgTXVzdCBiZSBvZiB0
aGUgZXhhY3QKLSAgICogICAgICAgICAgICAgICB0eXBlIHdoaWNoIHdvdWxkIGJlIHJldHVybmVk
IGJ5Ci0gICAqICAgICAgICAgICAgICAge0BsaW5rIE1lc3NhZ2UjZ2V0RmllbGQoRGVzY3JpcHRv
cnMuRmllbGREZXNjcmlwdG9yKX0gZm9yCi0gICAqICAgICAgICAgICAgICAgdGhpcyBmaWVsZC4K
LSAgICovCi0gIHByaXZhdGUgc3RhdGljIGludCBjb21wdXRlRWxlbWVudFNpemUoCi0gICAgICBm
aW5hbCBXaXJlRm9ybWF0LkZpZWxkVHlwZSB0eXBlLAotICAgICAgZmluYWwgaW50IG51bWJlciwg
ZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgaW50IHRhZ1NpemUgPSBDb2RlZE91dHB1dFN0cmVh
bS5jb21wdXRlVGFnU2l6ZShudW1iZXIpOwotICAgIGlmICh0eXBlID09IFdpcmVGb3JtYXQuRmll
bGRUeXBlLkdST1VQKSB7Ci0gICAgICAvLyBPbmx5IGNvdW50IHRoZSBlbmQgZ3JvdXAgdGFnIGZv
ciBwcm90bzIgbWVzc2FnZXMgYXMgZm9yIHByb3RvMSB0aGUgZW5kCi0gICAgICAvLyBncm91cCB0
YWcgd2lsbCBiZSBjb3VudGVkIGFzIGEgcGFydCBvZiBnZXRTZXJpYWxpemVkU2l6ZSgpLgotICAg
ICAgICB0YWdTaXplICo9IDI7Ci0gICAgfQotICAgIHJldHVybiB0YWdTaXplICsgY29tcHV0ZUVs
ZW1lbnRTaXplTm9UYWcodHlwZSwgdmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUg
dGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAg
KiBwYXJ0aWN1bGFyIHZhbHVlIG9mIGFyYml0cmFyeSB0eXBlLCBleGNsdWRpbmcgdGFnLgotICAg
KgotICAgKiBAcGFyYW0gdHlwZSAgIFRoZSBmaWVsZCdzIHR5cGUuCi0gICAqIEBwYXJhbSB2YWx1
ZSAgT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZmllbGQncyB2YWx1ZS4gIE11c3QgYmUgb2YgdGhl
IGV4YWN0Ci0gICAqICAgICAgICAgICAgICAgdHlwZSB3aGljaCB3b3VsZCBiZSByZXR1cm5lZCBi
eQotICAgKiAgICAgICAgICAgICAgIHtAbGluayBNZXNzYWdlI2dldEZpZWxkKERlc2NyaXB0b3Jz
LkZpZWxkRGVzY3JpcHRvcil9IGZvcgotICAgKiAgICAgICAgICAgICAgIHRoaXMgZmllbGQuCi0g
ICAqLwotICBzdGF0aWMgaW50IGNvbXB1dGVFbGVtZW50U2l6ZU5vVGFnKAotICAgICAgZmluYWwg
V2lyZUZvcm1hdC5GaWVsZFR5cGUgdHlwZSwgZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgICAvLyBOb3RlOiAgTWlub3IgdmlvbGF0aW9uIG9mIDgwLWNoYXIg
bGltaXQgcnVsZSBoZXJlIGJlY2F1c2UgdGhpcyB3b3VsZAotICAgICAgLy8gICBhY3R1YWxseSBi
ZSBoYXJkZXIgdG8gcmVhZCBpZiB3ZSB3cmFwcGVkIHRoZSBsaW5lcy4KLSAgICAgIGNhc2UgRE9V
QkxFICA6IHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlRG91YmxlU2l6ZU5vVGFnICAo
KERvdWJsZSAgICAgKXZhbHVlKTsKLSAgICAgIGNhc2UgRkxPQVQgICA6IHJldHVybiBDb2RlZE91
dHB1dFN0cmVhbS5jb21wdXRlRmxvYXRTaXplTm9UYWcgICAoKEZsb2F0ICAgICAgKXZhbHVlKTsK
LSAgICAgIGNhc2UgSU5UNjQgICA6IHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlSW50
NjRTaXplTm9UYWcgICAoKExvbmcgICAgICAgKXZhbHVlKTsKLSAgICAgIGNhc2UgVUlOVDY0ICA6
IHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlVUludDY0U2l6ZU5vVGFnICAoKExvbmcg
ICAgICAgKXZhbHVlKTsKLSAgICAgIGNhc2UgSU5UMzIgICA6IHJldHVybiBDb2RlZE91dHB1dFN0
cmVhbS5jb21wdXRlSW50MzJTaXplTm9UYWcgICAoKEludGVnZXIgICAgKXZhbHVlKTsKLSAgICAg
IGNhc2UgRklYRUQ2NCA6IHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlRml4ZWQ2NFNp
emVOb1RhZyAoKExvbmcgICAgICAgKXZhbHVlKTsKLSAgICAgIGNhc2UgRklYRUQzMiA6IHJldHVy
biBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlRml4ZWQzMlNpemVOb1RhZyAoKEludGVnZXIgICAg
KXZhbHVlKTsKLSAgICAgIGNhc2UgQk9PTCAgICA6IHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5j
b21wdXRlQm9vbFNpemVOb1RhZyAgICAoKEJvb2xlYW4gICAgKXZhbHVlKTsKLSAgICAgIGNhc2Ug
R1JPVVAgICA6IHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlR3JvdXBTaXplTm9UYWcg
ICAoKE1lc3NhZ2VMaXRlKXZhbHVlKTsKLSAgICAgIGNhc2UgQllURVMgICA6Ci0gICAgICAgIGlm
ICh2YWx1ZSBpbnN0YW5jZW9mIEJ5dGVTdHJpbmcpIHsKLSAgICAgICAgICByZXR1cm4gQ29kZWRP
dXRwdXRTdHJlYW0uY29tcHV0ZUJ5dGVzU2l6ZU5vVGFnKChCeXRlU3RyaW5nKSB2YWx1ZSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1
dGVCeXRlQXJyYXlTaXplTm9UYWcoKGJ5dGVbXSkgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICBj
YXNlIFNUUklORyAgOgotICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCeXRlU3RyaW5nKSB7
Ci0gICAgICAgICAgcmV0dXJuIENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVCeXRlc1NpemVOb1Rh
ZygoQnl0ZVN0cmluZykgdmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVy
biBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlU3RyaW5nU2l6ZU5vVGFnKChTdHJpbmcpIHZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgY2FzZSBVSU5UMzIgIDogcmV0dXJuIENvZGVkT3V0cHV0U3Ry
ZWFtLmNvbXB1dGVVSW50MzJTaXplTm9UYWcgICgoSW50ZWdlciAgICApdmFsdWUpOwotICAgICAg
Y2FzZSBTRklYRUQzMjogcmV0dXJuIENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVTRml4ZWQzMlNp
emVOb1RhZygoSW50ZWdlciAgICApdmFsdWUpOwotICAgICAgY2FzZSBTRklYRUQ2NDogcmV0dXJu
IENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVTRml4ZWQ2NFNpemVOb1RhZygoTG9uZyAgICAgICAp
dmFsdWUpOwotICAgICAgY2FzZSBTSU5UMzIgIDogcmV0dXJuIENvZGVkT3V0cHV0U3RyZWFtLmNv
bXB1dGVTSW50MzJTaXplTm9UYWcgICgoSW50ZWdlciAgICApdmFsdWUpOwotICAgICAgY2FzZSBT
SU5UNjQgIDogcmV0dXJuIENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVTSW50NjRTaXplTm9UYWcg
ICgoTG9uZyAgICAgICApdmFsdWUpOwotCi0gICAgICBjYXNlIE1FU1NBR0U6Ci0gICAgICAgIGlm
ICh2YWx1ZSBpbnN0YW5jZW9mIExhenlGaWVsZCkgewotICAgICAgICAgIHJldHVybiBDb2RlZE91
dHB1dFN0cmVhbS5jb21wdXRlTGF6eUZpZWxkU2l6ZU5vVGFnKChMYXp5RmllbGQpIHZhbHVlKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gQ29kZWRPdXRwdXRTdHJlYW0uY29t
cHV0ZU1lc3NhZ2VTaXplTm9UYWcoKE1lc3NhZ2VMaXRlKSB2YWx1ZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgY2FzZSBFTlVNOgotICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJbnRlcm5hbC5F
bnVtTGl0ZSkgewotICAgICAgICAgIHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlRW51
bVNpemVOb1RhZygKLSAgICAgICAgICAgICAgKChJbnRlcm5hbC5FbnVtTGl0ZSkgdmFsdWUpLmdl
dE51bWJlcigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gQ29kZWRPdXRw
dXRTdHJlYW0uY29tcHV0ZUVudW1TaXplTm9UYWcoKEludGVnZXIpIHZhbHVlKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgIlRoZXJl
IGlzIG5vIHdheSB0byBnZXQgaGVyZSwgYnV0IHRoZSBjb21waWxlciB0aGlua3Mgb3RoZXJ3aXNl
LiIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyBuZWVk
ZWQgdG8gZW5jb2RlIGEgcGFydGljdWxhciBmaWVsZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMg
aW50IGNvbXB1dGVGaWVsZFNpemUoZmluYWwgRmllbGREZXNjcmlwdG9yTGl0ZTw/PiBkZXNjcmlw
dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCB2
YWx1ZSkgewotICAgIFdpcmVGb3JtYXQuRmllbGRUeXBlIHR5cGUgPSBkZXNjcmlwdG9yLmdldExp
dGVUeXBlKCk7Ci0gICAgaW50IG51bWJlciA9IGRlc2NyaXB0b3IuZ2V0TnVtYmVyKCk7Ci0gICAg
aWYgKGRlc2NyaXB0b3IuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICBpZiAoZGVzY3JpcHRvci5pc1Bh
Y2tlZCgpKSB7Ci0gICAgICAgIGludCBkYXRhU2l6ZSA9IDA7Ci0gICAgICAgIGZvciAoZmluYWwg
T2JqZWN0IGVsZW1lbnQgOiAoTGlzdDw/Pil2YWx1ZSkgewotICAgICAgICAgIGRhdGFTaXplICs9
IGNvbXB1dGVFbGVtZW50U2l6ZU5vVGFnKHR5cGUsIGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBkYXRhU2l6ZSArCi0gICAgICAgICAgICBDb2RlZE91dHB1dFN0cmVhbS5jb21w
dXRlVGFnU2l6ZShudW1iZXIpICsKLSAgICAgICAgICAgIENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1
dGVSYXdWYXJpbnQzMlNpemUoZGF0YVNpemUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaW50
IHNpemUgPSAwOwotICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBlbGVtZW50IDogKExpc3Q8Pz4p
dmFsdWUpIHsKLSAgICAgICAgICBzaXplICs9IGNvbXB1dGVFbGVtZW50U2l6ZSh0eXBlLCBudW1i
ZXIsIGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gY29tcHV0ZUVsZW1lbnRTaXplKHR5cGUsIG51bWJl
ciwgdmFsdWUpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4v
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Zsb2F0QXJyYXlMaXN0LmphdmEgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9z
cmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRmxvYXRBcnJheUxpc3QuamF2YQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNjYjZkNzczMjBjMmRlNTUyZjViODQ5ZDkyMGRl
ZDkyODAwMzgzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRmxvYXRBcnJheUxp
c3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBv
cnQgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5GbG9hdExpc3Q7Ci0KLWltcG9ydCBqYXZh
LnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEu
dXRpbC5SYW5kb21BY2Nlc3M7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2Yge0BsaW5r
IEZsb2F0TGlzdH0gb24gdG9wIG9mIGEgcHJpbWl0aXZlIGFycmF5LgotICogCi0gKiBAYXV0aG9y
IGR3ZWlzQGdvb2dsZS5jb20gKERhbmllbCBXZWlzKQotICovCi1maW5hbCBjbGFzcyBGbG9hdEFy
cmF5TGlzdCBleHRlbmRzIEFic3RyYWN0UHJvdG9idWZMaXN0PEZsb2F0PiBpbXBsZW1lbnRzIEZs
b2F0TGlzdCwgUmFuZG9tQWNjZXNzIHsKLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0
QXJyYXlMaXN0IEVNUFRZX0xJU1QgPSBuZXcgRmxvYXRBcnJheUxpc3QoKTsKLSAgc3RhdGljIHsK
LSAgICBFTVBUWV9MSVNULm1ha2VJbW11dGFibGUoKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRp
YyBGbG9hdEFycmF5TGlzdCBlbXB0eUxpc3QoKSB7Ci0gICAgcmV0dXJuIEVNUFRZX0xJU1Q7Ci0g
IH0KLSAgCi0gIC8qKgotICAgKiBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIGxpc3QuCi0gICAq
LwotICBwcml2YXRlIGZsb2F0W10gYXJyYXk7Ci0gIAotICAvKioKLSAgICogVGhlIHNpemUgb2Yg
dGhlIGxpc3QgZGlzdGluY3QgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4gVGhhdCBpcywg
aXQgaXMgdGhlIG51bWJlciBvZgotICAgKiBlbGVtZW50cyBzZXQgaW4gdGhlIGxpc3QuCi0gICAq
LwotICBwcml2YXRlIGludCBzaXplOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgbmV3IG11
dGFibGUge0Bjb2RlIEZsb2F0QXJyYXlMaXN0fSB3aXRoIGRlZmF1bHQgY2FwYWNpdHkuCi0gICAq
LwotICBGbG9hdEFycmF5TGlzdCgpIHsKLSAgICB0aGlzKG5ldyBmbG9hdFtERUZBVUxUX0NBUEFD
SVRZXSwgMCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG5ldyBtdXRhYmxlIHtA
Y29kZSBGbG9hdEFycmF5TGlzdH0gY29udGFpbmluZyB0aGUgc2FtZSBlbGVtZW50cyBhcyB7QGNv
ZGUgb3RoZXJ9LgotICAgKi8KLSAgcHJpdmF0ZSBGbG9hdEFycmF5TGlzdChmbG9hdFtdIGFycmF5
LCBpbnQgc2l6ZSkgewotICAgIHRoaXMuYXJyYXkgPSBhcnJheTsKLSAgICB0aGlzLnNpemUgPSBz
aXplOwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVj
dCBvKSB7Ci0gICAgaWYgKHRoaXMgPT0gbykgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIGlmICghKG8gaW5zdGFuY2VvZiBGbG9hdEFycmF5TGlzdCkpIHsKLSAgICAgIHJldHVybiBz
dXBlci5lcXVhbHMobyk7Ci0gICAgfQotICAgIEZsb2F0QXJyYXlMaXN0IG90aGVyID0gKEZsb2F0
QXJyYXlMaXN0KSBvOwotICAgIGlmIChzaXplICE9IG90aGVyLnNpemUpIHsKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgZmluYWwgZmxvYXRbXSBhcnIgPSBvdGhlci5hcnJh
eTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgaWYgKGFycmF5
W2ldICE9IGFycltpXSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQg
aGFzaENvZGUoKSB7Ci0gICAgaW50IHJlc3VsdCA9IDE7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKLSAgICAgIHJlc3VsdCA9ICgzMSAqIHJlc3VsdCkgKyBGbG9hdC5mbG9h
dFRvSW50Qml0cyhhcnJheVtpXSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIEZsb2F0TGlzdCBtdXRhYmxlQ29weVdpdGhDYXBhY2l0eShp
bnQgY2FwYWNpdHkpIHsKLSAgICBpZiAoY2FwYWNpdHkgPCBzaXplKSB7Ci0gICAgICB0aHJvdyBu
ZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgRmxv
YXRBcnJheUxpc3QoQXJyYXlzLmNvcHlPZihhcnJheSwgY2FwYWNpdHkpLCBzaXplKTsKLSAgfQot
ICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBGbG9hdCBnZXQoaW50IGluZGV4KSB7Ci0gICAgcmV0
dXJuIGdldEZsb2F0KGluZGV4KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgZmxvYXQg
Z2V0RmxvYXQoaW50IGluZGV4KSB7Ci0gICAgZW5zdXJlSW5kZXhJblJhbmdlKGluZGV4KTsKLSAg
ICByZXR1cm4gYXJyYXlbaW5kZXhdOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQg
c2l6ZSgpIHsKLSAgICByZXR1cm4gc2l6ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
RmxvYXQgc2V0KGludCBpbmRleCwgRmxvYXQgZWxlbWVudCkgewotICAgIHJldHVybiBzZXRGbG9h
dChpbmRleCwgZWxlbWVudCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZsb2F0IHNl
dEZsb2F0KGludCBpbmRleCwgZmxvYXQgZWxlbWVudCkgewotICAgIGVuc3VyZUlzTXV0YWJsZSgp
OwotICAgIGVuc3VyZUluZGV4SW5SYW5nZShpbmRleCk7Ci0gICAgZmxvYXQgcHJldmlvdXNWYWx1
ZSA9IGFycmF5W2luZGV4XTsKLSAgICBhcnJheVtpbmRleF0gPSBlbGVtZW50OwotICAgIHJldHVy
biBwcmV2aW91c1ZhbHVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGFkZChp
bnQgaW5kZXgsIEZsb2F0IGVsZW1lbnQpIHsKLSAgICBhZGRGbG9hdChpbmRleCwgZWxlbWVudCk7
Ci0gIH0KLQotICAvKioKLSAgICogTGlrZSB7QGxpbmsgI2FkZChGbG9hdCl9IGJ1dCBtb3JlIGVm
ZmljaWVudCBpbiB0aGF0IGl0IGRvZXNuJ3QgYm94IHRoZSBlbGVtZW50LgotICAgKi8KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGFkZEZsb2F0KGZsb2F0IGVsZW1lbnQpIHsKLSAgICBhZGRG
bG9hdChzaXplLCBlbGVtZW50KTsKLSAgfQotCi0gIC8qKgotICAgKiBMaWtlIHtAbGluayAjYWRk
KGludCwgRmxvYXQpfSBidXQgbW9yZSBlZmZpY2llbnQgaW4gdGhhdCBpdCBkb2Vzbid0IGJveCB0
aGUgZWxlbWVudC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBhZGRGbG9hdChpbnQgaW5kZXgsIGZs
b2F0IGVsZW1lbnQpIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICBpZiAoaW5kZXggPCAw
IHx8IGluZGV4ID4gc2l6ZSkgewotICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNl
cHRpb24obWFrZU91dE9mQm91bmRzRXhjZXB0aW9uTWVzc2FnZShpbmRleCkpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoc2l6ZSA8IGFycmF5Lmxlbmd0aCkgewotICAgICAgLy8gU2hpZnQgZXZlcnl0
aGluZyBvdmVyIHRvIG1ha2Ugcm9vbQotICAgICAgU3lzdGVtLmFycmF5Y29weShhcnJheSwgaW5k
ZXgsIGFycmF5LCBpbmRleCArIDEsIHNpemUgLSBpbmRleCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IC8vIFJlc2l6ZSB0byAxLjV4IHRoZSBzaXplCi0gICAgICBpbnQgbGVuZ3RoID0gKChzaXplICog
MykgLyAyKSArIDE7Ci0gICAgICBmbG9hdFtdIG5ld0FycmF5ID0gbmV3IGZsb2F0W2xlbmd0aF07
Ci0gICAgICAKLSAgICAgIC8vIENvcHkgdGhlIGZpcnN0IHBhcnQgZGlyZWN0bHkKLSAgICAgIFN5
c3RlbS5hcnJheWNvcHkoYXJyYXksIDAsIG5ld0FycmF5LCAwLCBpbmRleCk7Ci0gICAgICAKLSAg
ICAgIC8vIENvcHkgdGhlIHJlc3Qgc2hpZnRlZCBvdmVyIGJ5IG9uZSB0byBtYWtlIHJvb20KLSAg
ICAgIFN5c3RlbS5hcnJheWNvcHkoYXJyYXksIGluZGV4LCBuZXdBcnJheSwgaW5kZXggKyAxLCBz
aXplIC0gaW5kZXgpOwotICAgICAgYXJyYXkgPSBuZXdBcnJheTsKLSAgICB9Ci0KLSAgICBhcnJh
eVtpbmRleF0gPSBlbGVtZW50OwotICAgIHNpemUrKzsKLSAgICBtb2RDb3VudCsrOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGFkZEFsbChDb2xsZWN0aW9uPD8gZXh0ZW5k
cyBGbG9hdD4gY29sbGVjdGlvbikgewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIAotICAg
IGlmIChjb2xsZWN0aW9uID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4
Y2VwdGlvbigpOwotICAgIH0KLSAgICAKLSAgICAvLyBXZSBzcGVjaWFsaXplIHdoZW4gYWRkaW5n
IGFub3RoZXIgRmxvYXRBcnJheUxpc3QgdG8gYXZvaWQgYm94aW5nIGVsZW1lbnRzLgotICAgIGlm
ICghKGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBGbG9hdEFycmF5TGlzdCkpIHsKLSAgICAgIHJldHVy
biBzdXBlci5hZGRBbGwoY29sbGVjdGlvbik7Ci0gICAgfQotICAgIAotICAgIEZsb2F0QXJyYXlM
aXN0IGxpc3QgPSAoRmxvYXRBcnJheUxpc3QpIGNvbGxlY3Rpb247Ci0gICAgaWYgKGxpc3Quc2l6
ZSA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGludCBvdmVy
ZmxvdyA9IEludGVnZXIuTUFYX1ZBTFVFIC0gc2l6ZTsKLSAgICBpZiAob3ZlcmZsb3cgPCBsaXN0
LnNpemUpIHsKLSAgICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IHJlcHJlc2VudCBhIGxpc3QgdGhp
cyBsYXJnZS4KLSAgICAgIHRocm93IG5ldyBPdXRPZk1lbW9yeUVycm9yKCk7Ci0gICAgfQotICAg
IAotICAgIGludCBuZXdTaXplID0gc2l6ZSArIGxpc3Quc2l6ZTsKLSAgICBpZiAobmV3U2l6ZSA+
IGFycmF5Lmxlbmd0aCkgewotICAgICAgYXJyYXkgPSBBcnJheXMuY29weU9mKGFycmF5LCBuZXdT
aXplKTsKLSAgICB9Ci0gICAgCi0gICAgU3lzdGVtLmFycmF5Y29weShsaXN0LmFycmF5LCAwLCBh
cnJheSwgc2l6ZSwgbGlzdC5zaXplKTsKLSAgICBzaXplID0gbmV3U2l6ZTsKLSAgICBtb2RDb3Vu
dCsrOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJv
b2xlYW4gcmVtb3ZlKE9iamVjdCBvKSB7Ci0gICAgZW5zdXJlSXNNdXRhYmxlKCk7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgIGlmIChvLmVxdWFscyhhcnJheVtp
XSkpIHsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShhcnJheSwgaSArIDEsIGFycmF5LCBpLCBz
aXplIC0gaSk7Ci0gICAgICAgIHNpemUtLTsKLSAgICAgICAgbW9kQ291bnQrKzsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgRmxvYXQgcmVtb3ZlKGludCBpbmRleCkgewotICAgIGVuc3Vy
ZUlzTXV0YWJsZSgpOwotICAgIGVuc3VyZUluZGV4SW5SYW5nZShpbmRleCk7Ci0gICAgZmxvYXQg
dmFsdWUgPSBhcnJheVtpbmRleF07Ci0gICAgU3lzdGVtLmFycmF5Y29weShhcnJheSwgaW5kZXgg
KyAxLCBhcnJheSwgaW5kZXgsIHNpemUgLSBpbmRleCk7Ci0gICAgc2l6ZS0tOwotICAgIG1vZENv
dW50Kys7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZXMgdGhh
dCB0aGUgcHJvdmlkZWQge0Bjb2RlIGluZGV4fSBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIHtAY29k
ZSBbMCwgc2l6ZV19LiBUaHJvd3MgYW4KLSAgICoge0BsaW5rIEluZGV4T3V0T2ZCb3VuZHNFeGNl
cHRpb259IGlmIGl0IGlzIG5vdC4KLSAgICogCi0gICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXgg
dG8gdmVyaWZ5IGlzIGluIHJhbmdlCi0gICAqLwotICBwcml2YXRlIHZvaWQgZW5zdXJlSW5kZXhJ
blJhbmdlKGludCBpbmRleCkgewotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc2l6ZSkg
ewotICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24obWFrZU91dE9mQm91
bmRzRXhjZXB0aW9uTWVzc2FnZShpbmRleCkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3Ry
aW5nIG1ha2VPdXRPZkJvdW5kc0V4Y2VwdGlvbk1lc3NhZ2UoaW50IGluZGV4KSB7Ci0gICAgcmV0
dXJuICJJbmRleDoiICsgaW5kZXggKyAiLCBTaXplOiIgKyBzaXplOwotICB9Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvR2VuZXJhdGVk
TWVzc2FnZS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L0dlbmVyYXRlZE1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkw
Y2I2MjJhN2ViODRkZTA3YWY1YTFmYWQxYWM1YTJjZjEyZDU5YS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvR2VuZXJhdGVkTWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
Mjg4MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2Fn
ZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNj
cmlwdG9ycy5EZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
cnMuRW51bURlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9y
cy5FbnVtVmFsdWVEZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvcnMuRmllbGREZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvcnMuRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9ycy5PbmVvZkRlc2NyaXB0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1w
b3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PYmplY3RTdHJlYW1FeGNl
cHRpb247Ci1pbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5sYW5nLnJl
ZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVj
dC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwu
Q29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRp
bC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7
Ci0KLS8qKgotICogQWxsIGdlbmVyYXRlZCBwcm90b2NvbCBtZXNzYWdlIGNsYXNzZXMgZXh0ZW5k
IHRoaXMgY2xhc3MuICBUaGlzIGNsYXNzCi0gKiBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIE1lc3Nh
Z2UgYW5kIEJ1aWxkZXIgaW50ZXJmYWNlcyB1c2luZyBKYXZhIHJlZmxlY3Rpb24uCi0gKiBVc2Vy
cyBjYW4gaWdub3JlIHRoaXMgY2xhc3MgYW5kIHByZXRlbmQgdGhhdCBnZW5lcmF0ZWQgbWVzc2Fn
ZXMgaW1wbGVtZW50Ci0gKiB0aGUgTWVzc2FnZSBpbnRlcmZhY2UgZGlyZWN0bHkuCi0gKgotICog
QGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqLwotcHVibGljIGFic3Ry
YWN0IGNsYXNzIEdlbmVyYXRlZE1lc3NhZ2UgZXh0ZW5kcyBBYnN0cmFjdE1lc3NhZ2UKLSAgICBp
bXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2Vy
aWFsVmVyc2lvblVJRCA9IDFMOwotCi0gIC8qKgotICAgKiBGb3IgdGVzdGluZy4gQWxsb3dzIGEg
dGVzdCB0byBkaXNhYmxlIHRoZSBvcHRpbWl6YXRpb24gdGhhdCBhdm9pZHMgdXNpbmcKLSAgICog
ZmllbGQgYnVpbGRlcnMgZm9yIG5lc3RlZCBtZXNzYWdlcyB1bnRpbCB0aGV5IGFyZSByZXF1ZXN0
ZWQuIEJ5IGRpc2FibGluZwotICAgKiB0aGlzIG9wdGltaXphdGlvbiwgZXhpc3RpbmcgdGVzdHMg
Y2FuIGJlIHJldXNlZCB0byB0ZXN0IHRoZSBmaWVsZCBidWlsZGVycy4KLSAgICovCi0gIHByb3Rl
Y3RlZCBzdGF0aWMgYm9vbGVhbiBhbHdheXNVc2VGaWVsZEJ1aWxkZXJzID0gZmFsc2U7Ci0KLSAg
LyoqIEZvciB1c2UgYnkgZ2VuZXJhdGVkIGNvZGUgb25seS4gICovCi0gIHByb3RlY3RlZCBVbmtu
b3duRmllbGRTZXQgdW5rbm93bkZpZWxkczsKLQotICBwcm90ZWN0ZWQgR2VuZXJhdGVkTWVzc2Fn
ZSgpIHsKLSAgICB1bmtub3duRmllbGRzID0gVW5rbm93bkZpZWxkU2V0LmdldERlZmF1bHRJbnN0
YW5jZSgpOwotICB9Ci0KLSAgcHJvdGVjdGVkIEdlbmVyYXRlZE1lc3NhZ2UoQnVpbGRlcjw/PiBi
dWlsZGVyKSB7Ci0gICAgdW5rbm93bkZpZWxkcyA9IGJ1aWxkZXIuZ2V0VW5rbm93bkZpZWxkcygp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBQYXJzZXI8PyBleHRlbmRzIEdlbmVyYXRl
ZE1lc3NhZ2U+IGdldFBhcnNlckZvclR5cGUoKSB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAgICAiVGhpcyBpcyBzdXBwb3NlZCB0byBiZSBvdmVy
cmlkZGVuIGJ5IHN1YmNsYXNzZXMuIik7Ci0gIH0KLQotIC8qKgotICAqIEZvciB0ZXN0aW5nLiBB
bGxvd3MgYSB0ZXN0IHRvIGRpc2FibGUgdGhlIG9wdGltaXphdGlvbiB0aGF0IGF2b2lkcyB1c2lu
ZwotICAqIGZpZWxkIGJ1aWxkZXJzIGZvciBuZXN0ZWQgbWVzc2FnZXMgdW50aWwgdGhleSBhcmUg
cmVxdWVzdGVkLiBCeSBkaXNhYmxpbmcKLSAgKiB0aGlzIG9wdGltaXphdGlvbiwgZXhpc3Rpbmcg
dGVzdHMgY2FuIGJlIHJldXNlZCB0byB0ZXN0IHRoZSBmaWVsZCBidWlsZGVycy4KLSAgKiBTZWUg
e0BsaW5rIFJlcGVhdGVkRmllbGRCdWlsZGVyfSBhbmQge0BsaW5rIFNpbmdsZUZpZWxkQnVpbGRl
cn0uCi0gICovCi0gIHN0YXRpYyB2b2lkIGVuYWJsZUFsd2F5c1VzZUZpZWxkQnVpbGRlcnNGb3JU
ZXN0aW5nKCkgewotICAgIGFsd2F5c1VzZUZpZWxkQnVpbGRlcnMgPSB0cnVlOwotICB9Ci0KLSAg
LyoqCi0gICAqIEdldCB0aGUgRmllbGRBY2Nlc3NvclRhYmxlIGZvciB0aGlzIHR5cGUuICBXZSBj
YW4ndCBoYXZlIHRoZSBtZXNzYWdlCi0gICAqIGNsYXNzIHBhc3MgdGhpcyBpbiB0byB0aGUgY29u
c3RydWN0b3IgYmVjYXVzZSBvZiBib290c3RyYXBwaW5nIHRyb3VibGUKLSAgICogd2l0aCBEZXNj
cmlwdG9yUHJvdG9zLgotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IEZpZWxkQWNjZXNzb3JU
YWJsZSBpbnRlcm5hbEdldEZpZWxkQWNjZXNzb3JUYWJsZSgpOwotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgRGVzY3JpcHRvciBnZXREZXNjcmlwdG9yRm9yVHlwZSgpIHsKLSAgICByZXR1cm4gaW50
ZXJuYWxHZXRGaWVsZEFjY2Vzc29yVGFibGUoKS5kZXNjcmlwdG9yOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEludGVybmFsIGhlbHBlciB0byByZXR1cm4gYSBtb2RpZmlhYmxlIG1hcCBjb250YWluaW5n
IGFsbCB0aGUgZmllbGRzLgotICAgKiBUaGUgcmV0dXJuZWQgTWFwIGlzIG1vZGlmaWFsYmUgc28g
dGhhdCB0aGUgY2FsbGVyIGNhbiBhZGQgYWRkaXRpb25hbAotICAgKiBleHRlbnNpb24gZmllbGRz
IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldEFsbEZpZWxkcygpfS4KLSAgICoKLSAgICogQHBhcmFt
IGdldEJ5dGVzRm9yU3RyaW5nIHdoZXRoZXIgdG8gZ2VuZXJhdGUgQnl0ZVN0cmluZyBmb3Igc3Ry
aW5nIGZpZWxkcwotICAgKi8KLSAgcHJpdmF0ZSBNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+
IGdldEFsbEZpZWxkc011dGFibGUoCi0gICAgICBib29sZWFuIGdldEJ5dGVzRm9yU3RyaW5nKSB7
Ci0gICAgZmluYWwgVHJlZU1hcDxGaWVsZERlc2NyaXB0b3IsIE9iamVjdD4gcmVzdWx0ID0KLSAg
ICAgIG5ldyBUcmVlTWFwPEZpZWxkRGVzY3JpcHRvciwgT2JqZWN0PigpOwotICAgIGZpbmFsIERl
c2NyaXB0b3IgZGVzY3JpcHRvciA9IGludGVybmFsR2V0RmllbGRBY2Nlc3NvclRhYmxlKCkuZGVz
Y3JpcHRvcjsKLSAgICBmaW5hbCBMaXN0PEZpZWxkRGVzY3JpcHRvcj4gZmllbGRzID0gZGVzY3Jp
cHRvci5nZXRGaWVsZHMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgaSsrKSB7Ci0gICAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBmaWVsZHMuZ2V0KGkpOwot
ICAgICAgZmluYWwgT25lb2ZEZXNjcmlwdG9yIG9uZW9mRGVzY3JpcHRvciA9IGZpZWxkLmdldENv
bnRhaW5pbmdPbmVvZigpOwotCi0gICAgICAvKgotICAgICAgICogSWYgdGhlIGZpZWxkIGlzIHBh
cnQgb2YgYSBPbmVvZiwgdGhlbiBhdCBtYXhpbXVtIG9uZSBmaWVsZCBpbiB0aGUgT25lb2YgaXMg
c2V0Ci0gICAgICAgKiBhbmQgaXQgaXMgbm90IHJlcGVhdGVkLiBUaGVyZSBpcyBubyBuZWVkIHRv
IGl0ZXJhdGUgdGhyb3VnaCB0aGUgb3RoZXJzLgotICAgICAgICovCi0gICAgICBpZiAob25lb2ZE
ZXNjcmlwdG9yICE9IG51bGwpIHsKLSAgICAgICAgLy8gU2tpcCBvdGhlciBmaWVsZHMgaW4gdGhl
IE9uZW9mIHdlIGtub3cgYXJlIG5vdCBzZXQKLSAgICAgICAgaSArPSBvbmVvZkRlc2NyaXB0b3Iu
Z2V0RmllbGRDb3VudCgpIC0gMTsKLSAgICAgICAgaWYgKCFoYXNPbmVvZihvbmVvZkRlc2NyaXB0
b3IpKSB7Ci0gICAgICAgICAgLy8gSWYgbm8gZmllbGQgaXMgc2V0IGluIHRoZSBPbmVvZiwgc2tp
cCBhbGwgdGhlIGZpZWxkcyBpbiB0aGUgT25lb2YKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgICAgICAvLyBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIG9ubHkgZmllbGQgd2hpY2gg
aXMgc2V0IGluIHRoZSBPbmVvZgotICAgICAgICBmaWVsZCA9IGdldE9uZW9mRmllbGREZXNjcmlw
dG9yKG9uZW9mRGVzY3JpcHRvcik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBh
cmUgbm90IGluIGEgT25lb2YsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGZpZWxkIGlzIHNldCBh
bmQgaWYgaXQgaXMgcmVwZWF0ZWQKLSAgICAgICAgaWYgKGZpZWxkLmlzUmVwZWF0ZWQoKSkgewot
ICAgICAgICAgIGZpbmFsIExpc3Q8Pz4gdmFsdWUgPSAoTGlzdDw/PikgZ2V0RmllbGQoZmllbGQp
OwotICAgICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
cHV0KGZpZWxkLCB2YWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICghaGFzRmllbGQoZmllbGQpKSB7Ci0gICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIEFkZCB0aGUgZmllbGQgdG8gdGhlIG1h
cAotICAgICAgaWYgKGdldEJ5dGVzRm9yU3RyaW5nICYmIGZpZWxkLmdldEphdmFUeXBlKCkgPT0g
RmllbGREZXNjcmlwdG9yLkphdmFUeXBlLlNUUklORykgewotICAgICAgICByZXN1bHQucHV0KGZp
ZWxkLCBnZXRGaWVsZFJhdyhmaWVsZCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0
LnB1dChmaWVsZCwgZ2V0RmllbGQoZmllbGQpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBpc0luaXRpYWxp
emVkKCkgewotICAgIGZvciAoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkIDogZ2V0RGVzY3Jp
cHRvckZvclR5cGUoKS5nZXRGaWVsZHMoKSkgewotICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgcmVx
dWlyZWQgZmllbGRzIGFyZSBwcmVzZW50LgotICAgICAgaWYgKGZpZWxkLmlzUmVxdWlyZWQoKSkg
ewotICAgICAgICBpZiAoIWhhc0ZpZWxkKGZpZWxkKSkgewotICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gQ2hlY2sgdGhhdCBlbWJlZGRlZCBtZXNz
YWdlcyBhcmUgaW5pdGlhbGl6ZWQuCi0gICAgICBpZiAoZmllbGQuZ2V0SmF2YVR5cGUoKSA9PSBG
aWVsZERlc2NyaXB0b3IuSmF2YVR5cGUuTUVTU0FHRSkgewotICAgICAgICBpZiAoZmllbGQuaXNS
ZXBlYXRlZCgpKSB7Ci0gICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpIGZp
bmFsCi0gICAgICAgICAgTGlzdDxNZXNzYWdlPiBtZXNzYWdlTGlzdCA9IChMaXN0PE1lc3NhZ2U+
KSBnZXRGaWVsZChmaWVsZCk7Ci0gICAgICAgICAgZm9yIChmaW5hbCBNZXNzYWdlIGVsZW1lbnQg
OiBtZXNzYWdlTGlzdCkgewotICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzSW5pdGlhbGl6ZWQo
KSkgewotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChoYXNGaWVsZChmaWVsZCkgJiYg
ISgoTWVzc2FnZSkgZ2V0RmllbGQoZmllbGQpKS5pc0luaXRpYWxpemVkKCkpIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgTWFwPEZp
ZWxkRGVzY3JpcHRvciwgT2JqZWN0PiBnZXRBbGxGaWVsZHMoKSB7Ci0gICAgcmV0dXJuIENvbGxl
Y3Rpb25zLnVubW9kaWZpYWJsZU1hcCgKLSAgICAgICAgZ2V0QWxsRmllbGRzTXV0YWJsZSgvKiBn
ZXRCeXRlc0ZvclN0cmluZyA9ICovIGZhbHNlKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJu
cyBhIGNvbGxlY3Rpb24gb2YgYWxsIHRoZSBmaWVsZHMgaW4gdGhpcyBtZXNzYWdlIHdoaWNoIGFy
ZSBzZXQKLSAgICogYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiAgQSBzaW5ndWxhciAo
InJlcXVpcmVkIiBvciAib3B0aW9uYWwiKQotICAgKiBmaWVsZCBpcyBzZXQgaWZmIGhhc0ZpZWxk
KCkgcmV0dXJucyB0cnVlIGZvciB0aGF0IGZpZWxkLiAgQSAicmVwZWF0ZWQiCi0gICAqIGZpZWxk
IGlzIHNldCBpZmYgZ2V0UmVwZWF0ZWRGaWVsZENvdW50KCkgaXMgZ3JlYXRlciB0aGFuIHplcm8u
ICBUaGUKLSAgICogdmFsdWVzIGFyZSBleGFjdGx5IHdoYXQgd291bGQgYmUgcmV0dXJuZWQgYnkg
Y2FsbGluZwotICAgKiB7QGxpbmsgI2dldEZpZWxkUmF3KERlc2NyaXB0b3JzLkZpZWxkRGVzY3Jp
cHRvcil9IGZvciBlYWNoIGZpZWxkLiAgVGhlIG1hcAotICAgKiBpcyBndWFyYW50ZWVkIHRvIGJl
IGEgc29ydGVkIG1hcCwgc28gaXRlcmF0aW5nIG92ZXIgaXQgd2lsbCByZXR1cm4gZmllbGRzCi0g
ICAqIGluIG9yZGVyIGJ5IGZpZWxkIG51bWJlci4KLSAgICovCi0gIE1hcDxGaWVsZERlc2NyaXB0
b3IsIE9iamVjdD4gZ2V0QWxsRmllbGRzUmF3KCkgewotICAgIHJldHVybiBDb2xsZWN0aW9ucy51
bm1vZGlmaWFibGVNYXAoCi0gICAgICAgIGdldEFsbEZpZWxkc011dGFibGUoLyogZ2V0Qnl0ZXNG
b3JTdHJpbmcgPSAqLyB0cnVlKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xl
YW4gaGFzT25lb2YoZmluYWwgT25lb2ZEZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgcmV0dXJuIGlu
dGVybmFsR2V0RmllbGRBY2Nlc3NvclRhYmxlKCkuZ2V0T25lb2Yob25lb2YpLmhhcyh0aGlzKTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgRmllbGREZXNjcmlwdG9yIGdldE9uZW9mRmll
bGREZXNjcmlwdG9yKGZpbmFsIE9uZW9mRGVzY3JpcHRvciBvbmVvZikgewotICAgIHJldHVybiBp
bnRlcm5hbEdldEZpZWxkQWNjZXNzb3JUYWJsZSgpLmdldE9uZW9mKG9uZW9mKS5nZXQodGhpcyk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaGFzRmllbGQoZmluYWwgRmll
bGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgcmV0dXJuIGludGVybmFsR2V0RmllbGRBY2Nlc3Nv
clRhYmxlKCkuZ2V0RmllbGQoZmllbGQpLmhhcyh0aGlzKTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgT2JqZWN0IGdldEZpZWxkKGZpbmFsIEZpZWxkRGVzY3JpcHRvciBmaWVsZCkgewot
ICAgIHJldHVybiBpbnRlcm5hbEdldEZpZWxkQWNjZXNzb3JUYWJsZSgpLmdldEZpZWxkKGZpZWxk
KS5nZXQodGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogT2J0YWlucyB0aGUgdmFsdWUgb2YgdGhl
IGdpdmVuIGZpZWxkLCBvciB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCBpcwotICAgKiBub3Qgc2V0
LiAgRm9yIHByaW1pdGl2ZSBmaWVsZHMsIHRoZSBib3hlZCBwcmltaXRpdmUgdmFsdWUgaXMgcmV0
dXJuZWQuCi0gICAqIEZvciBlbnVtIGZpZWxkcywgdGhlIEVudW1WYWx1ZURlc2NyaXB0b3IgZm9y
IHRoZSB2YWx1ZSBpcyByZXR1cm5lZC4gRm9yCi0gICAqIGVtYmVkZGVkIG1lc3NhZ2UgZmllbGRz
LCB0aGUgc3ViLW1lc3NhZ2UgaXMgcmV0dXJuZWQuICBGb3IgcmVwZWF0ZWQKLSAgICogZmllbGRz
LCBhIGphdmEudXRpbC5MaXN0IGlzIHJldHVybmVkLiBGb3IgcHJlc2VudCBzdHJpbmcgZmllbGRz
LCBhCi0gICAqIEJ5dGVTdHJpbmcgaXMgcmV0dXJuZWQgcmVwcmVzZW50aW5nIHRoZSBieXRlcyB0
aGF0IHRoZSBmaWVsZCBjb250YWlucy4KLSAgICovCi0gIE9iamVjdCBnZXRGaWVsZFJhdyhmaW5h
bCBGaWVsZERlc2NyaXB0b3IgZmllbGQpIHsKLSAgICByZXR1cm4gaW50ZXJuYWxHZXRGaWVsZEFj
Y2Vzc29yVGFibGUoKS5nZXRGaWVsZChmaWVsZCkuZ2V0UmF3KHRoaXMpOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBpbnQgZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGZpbmFsIEZpZWxkRGVz
Y3JpcHRvciBmaWVsZCkgewotICAgIHJldHVybiBpbnRlcm5hbEdldEZpZWxkQWNjZXNzb3JUYWJs
ZSgpLmdldEZpZWxkKGZpZWxkKQotICAgICAgLmdldFJlcGVhdGVkQ291bnQodGhpcyk7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIE9iamVjdCBnZXRSZXBlYXRlZEZpZWxkKGZpbmFsIEZp
ZWxkRGVzY3JpcHRvciBmaWVsZCwgZmluYWwgaW50IGluZGV4KSB7Ci0gICAgcmV0dXJuIGludGVy
bmFsR2V0RmllbGRBY2Nlc3NvclRhYmxlKCkuZ2V0RmllbGQoZmllbGQpCi0gICAgICAuZ2V0UmVw
ZWF0ZWQodGhpcywgaW5kZXgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBVbmtub3du
RmllbGRTZXQgZ2V0VW5rbm93bkZpZWxkcygpIHsKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRP
cGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICJUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIG92ZXJy
aWRkZW4gYnkgc3ViY2xhc3Nlcy4iKTsKLSAgfQotCi0gIC8qKgotICAgKiBDYWxsZWQgYnkgc3Vi
Y2xhc3NlcyB0byBwYXJzZSBhbiB1bmtub3duIGZpZWxkLgotICAgKiBAcmV0dXJuIHtAY29kZSB0
cnVlfSB1bmxlc3MgdGhlIHRhZyBpcyBhbiBlbmQtZ3JvdXAgdGFnLgotICAgKi8KLSAgcHJvdGVj
dGVkIGJvb2xlYW4gcGFyc2VVbmtub3duRmllbGQoCi0gICAgICBDb2RlZElucHV0U3RyZWFtIGlu
cHV0LAotICAgICAgVW5rbm93bkZpZWxkU2V0LkJ1aWxkZXIgdW5rbm93bkZpZWxkcywKLSAgICAg
IEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSwKLSAgICAgIGludCB0YWcp
IHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHVua25vd25GaWVsZHMubWVyZ2VGaWVs
ZEZyb20odGFnLCBpbnB1dCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgc3RhdGljIDxNIGV4dGVuZHMg
TWVzc2FnZT4gTSBwYXJzZVdpdGhJT0V4Y2VwdGlvbihQYXJzZXI8TT4gcGFyc2VyLCBJbnB1dFN0
cmVhbSBpbnB1dCkKLSAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAg
IHJldHVybiBwYXJzZXIucGFyc2VGcm9tKGlucHV0KTsKLSAgICB9IGNhdGNoIChJbnZhbGlkUHJv
dG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgZS51bndyYXBJT0V4Y2VwdGlv
bigpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgPE0gZXh0ZW5kcyBNZXNzYWdl
PiBNIHBhcnNlV2l0aElPRXhjZXB0aW9uKFBhcnNlcjxNPiBwYXJzZXIsIElucHV0U3RyZWFtIGlu
cHV0LAotICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvbnMpIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBwYXJzZXIucGFyc2VGcm9tKGlucHV0
LCBleHRlbnNpb25zKTsKLSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24gZSkgewotICAgICAgdGhyb3cgZS51bndyYXBJT0V4Y2VwdGlvbigpOwotICAgIH0KLSAgfQot
Ci0gIHByb3RlY3RlZCBzdGF0aWMgPE0gZXh0ZW5kcyBNZXNzYWdlPiBNIHBhcnNlV2l0aElPRXhj
ZXB0aW9uKFBhcnNlcjxNPiBwYXJzZXIsCi0gICAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0KSB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gcGFyc2VyLnBhcnNl
RnJvbShpbnB1dCk7Ci0gICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
IGUpIHsKLSAgICAgIHRocm93IGUudW53cmFwSU9FeGNlcHRpb24oKTsKLSAgICB9Ci0gIH0KLQot
ICBwcm90ZWN0ZWQgc3RhdGljIDxNIGV4dGVuZHMgTWVzc2FnZT4gTSBwYXJzZVdpdGhJT0V4Y2Vw
dGlvbihQYXJzZXI8TT4gcGFyc2VyLAotICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwgRXh0
ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvbnMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAg
dHJ5IHsKLSAgICAgIHJldHVybiBwYXJzZXIucGFyc2VGcm9tKGlucHV0LCBleHRlbnNpb25zKTsK
LSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAg
dGhyb3cgZS51bndyYXBJT0V4Y2VwdGlvbigpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBz
dGF0aWMgPE0gZXh0ZW5kcyBNZXNzYWdlPiBNIHBhcnNlRGVsaW1pdGVkV2l0aElPRXhjZXB0aW9u
KFBhcnNlcjxNPiBwYXJzZXIsCi0gICAgICBJbnB1dFN0cmVhbSBpbnB1dCkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZURlbGltaXRlZEZy
b20oaW5wdXQpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBl
KSB7Ci0gICAgICB0aHJvdyBlLnVud3JhcElPRXhjZXB0aW9uKCk7Ci0gICAgfQotICB9Ci0KLSAg
cHJvdGVjdGVkIHN0YXRpYyA8TSBleHRlbmRzIE1lc3NhZ2U+IE0gcGFyc2VEZWxpbWl0ZWRXaXRo
SU9FeGNlcHRpb24oUGFyc2VyPE0+IHBhcnNlciwKLSAgICAgIElucHV0U3RyZWFtIGlucHV0LCBF
eHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9ucykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAg
ICB0cnkgewotICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZURlbGltaXRlZEZyb20oaW5wdXQsIGV4
dGVuc2lvbnMpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBl
KSB7Ci0gICAgICB0aHJvdyBlLnVud3JhcElPRXhjZXB0aW9uKCk7Ci0gICAgfQotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHdyaXRlVG8oZmluYWwgQ29kZWRPdXRwdXRTdHJlYW0g
b3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIE1lc3NhZ2VSZWZsZWN0aW9uLndyaXRl
TWVzc2FnZVRvKHRoaXMsIGdldEFsbEZpZWxkc1JhdygpLCBvdXRwdXQsIGZhbHNlKTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldFNlcmlhbGl6ZWRTaXplKCkgewotICAgIGlu
dCBzaXplID0gbWVtb2l6ZWRTaXplOwotICAgIGlmIChzaXplICE9IC0xKSB7Ci0gICAgICByZXR1
cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBtZW1vaXplZFNpemUgPSBNZXNzYWdlUmVmbGVjdGlvbi5n
ZXRTZXJpYWxpemVkU2l6ZSgKLSAgICAgICAgdGhpcywgZ2V0QWxsRmllbGRzUmF3KCkpOwotICAg
IHJldHVybiBtZW1vaXplZFNpemU7Ci0gIH0KLQotCi0KLSAgLyoqCi0gICAqIFVzZWQgYnkgcGFy
c2luZyBjb25zdHJ1Y3RvcnMgaW4gZ2VuZXJhdGVkIGNsYXNzZXMuCi0gICAqLwotICBwcm90ZWN0
ZWQgdm9pZCBtYWtlRXh0ZW5zaW9uc0ltbXV0YWJsZSgpIHsKLSAgICAvLyBOb29wIGZvciBtZXNz
YWdlcyB3aXRob3V0IGV4dGVuc2lvbnMuCi0gIH0KLQotICBwcm90ZWN0ZWQgYWJzdHJhY3QgTWVz
c2FnZS5CdWlsZGVyIG5ld0J1aWxkZXJGb3JUeXBlKEJ1aWxkZXJQYXJlbnQgcGFyZW50KTsKLQot
ICAvKioKLSAgICogSW50ZXJmYWNlIGZvciB0aGUgcGFyZW50IG9mIGEgQnVpbGRlciB0aGF0IGFs
bG93cyB0aGUgYnVpbGRlciB0bwotICAgKiBjb21tdW5pY2F0ZSBpbnZhbGlkYXRpb25zIGJhY2sg
dG8gdGhlIHBhcmVudCBmb3IgdXNlIHdoZW4gdXNpbmcgbmVzdGVkCi0gICAqIGJ1aWxkZXJzLgot
ICAgKi8KLSAgcHJvdGVjdGVkIGludGVyZmFjZSBCdWlsZGVyUGFyZW50IHsKLQotICAgIC8qKgot
ICAgICAqIEEgYnVpbGRlciBiZWNvbWVzIGRpcnR5IHdoZW5ldmVyIGEgZmllbGQgaXMgbW9kaWZp
ZWQgLS0gaW5jbHVkaW5nIGZpZWxkcwotICAgICAqIGluIG5lc3RlZCBidWlsZGVycyAtLSBhbmQg
YmVjb21lcyBjbGVhbiB3aGVuIGJ1aWxkKCkgaXMgY2FsbGVkLiAgVGh1cywKLSAgICAgKiB3aGVu
IGEgYnVpbGRlciBiZWNvbWVzIGRpcnR5LCBhbGwgaXRzIHBhcmVudHMgYmVjb21lIGRpcnR5IGFz
IHdlbGwsIGFuZAotICAgICAqIHdoZW4gaXQgYmVjb21lcyBjbGVhbiwgYWxsIGl0cyBjaGlsZHJl
biBiZWNvbWUgY2xlYW4uICBUaGUgZGlydGluZXNzCi0gICAgICogc3RhdGUgaXMgdXNlZCB0byBp
bnZhbGlkYXRlIGNlcnRhaW4gY2FjaGVkIHZhbHVlcy4KLSAgICAgKiA8YnI+Ci0gICAgICogVG8g
dGhpcyBlbmQsIGEgYnVpbGRlciBjYWxscyBtYXJrQXNEaXJ0eSgpIG9uIGl0cyBwYXJlbnQgd2hl
bmV2ZXIgaXQKLSAgICAgKiB0cmFuc2l0aW9ucyBmcm9tIGNsZWFuIHRvIGRpcnR5LiAgVGhlIHBh
cmVudCBtdXN0IHByb3BhZ2F0ZSB0aGlzIGNhbGwgdG8KLSAgICAgKiBpdHMgb3duIHBhcmVudCwg
dW5sZXNzIGl0IHdhcyBhbHJlYWR5IGRpcnR5LCBpbiB3aGljaCBjYXNlIHRoZQotICAgICAqIGdy
YW5kcGFyZW50IG11c3QgbmVjZXNzYXJpbHkgYWxyZWFkeSBiZSBkaXJ0eSBhcyB3ZWxsLiAgVGhl
IHBhcmVudCBjYW4KLSAgICAgKiBvbmx5IHRyYW5zaXRpb24gYmFjayB0byAiY2xlYW4iIGFmdGVy
IGNhbGxpbmcgYnVpbGQoKSBvbiBhbGwgY2hpbGRyZW4uCi0gICAgICovCi0gICAgdm9pZCBtYXJr
RGlydHkoKTsKLSAgfQotCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwdWJs
aWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIEJ1aWxkZXIgPEJ1aWxkZXJUeXBlIGV4dGVuZHMgQnVp
bGRlcjxCdWlsZGVyVHlwZT4+Ci0gICAgICBleHRlbmRzIEFic3RyYWN0TWVzc2FnZS5CdWlsZGVy
PEJ1aWxkZXJUeXBlPiB7Ci0KLSAgICBwcml2YXRlIEJ1aWxkZXJQYXJlbnQgYnVpbGRlclBhcmVu
dDsKLQotICAgIHByaXZhdGUgQnVpbGRlclBhcmVudEltcGwgbWVBc1BhcmVudDsKLQotICAgIC8v
IEluZGljYXRlcyB0aGF0IHdlJ3ZlIGJ1aWx0IGEgbWVzc2FnZSBhbmQgc28gd2UgYXJlIG5vdyBv
YmxpZ2F0ZWQKLSAgICAvLyB0byBkaXNwYXRjaCBkaXJ0eSBpbnZhbGlkYXRpb25zLiBTZWUgR2Vu
ZXJhdGVkTWVzc2FnZS5CdWlsZGVyTGlzdGVuZXIuCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xl
YW47Ci0KLSAgICBwcml2YXRlIFVua25vd25GaWVsZFNldCB1bmtub3duRmllbGRzID0KLSAgICAg
ICAgVW5rbm93bkZpZWxkU2V0LmdldERlZmF1bHRJbnN0YW5jZSgpOwotCi0gICAgcHJvdGVjdGVk
IEJ1aWxkZXIoKSB7Ci0gICAgICB0aGlzKG51bGwpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBC
dWlsZGVyKEJ1aWxkZXJQYXJlbnQgYnVpbGRlclBhcmVudCkgewotICAgICAgdGhpcy5idWlsZGVy
UGFyZW50ID0gYnVpbGRlclBhcmVudDsKLSAgICB9Ci0KLSAgICB2b2lkIGRpc3Bvc2UoKSB7Ci0g
ICAgICBidWlsZGVyUGFyZW50ID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxs
ZWQgYnkgdGhlIHN1YmNsYXNzIHdoZW4gYSBtZXNzYWdlIGlzIGJ1aWx0LgotICAgICAqLwotICAg
IHByb3RlY3RlZCB2b2lkIG9uQnVpbHQoKSB7Ci0gICAgICBpZiAoYnVpbGRlclBhcmVudCAhPSBu
dWxsKSB7Ci0gICAgICAgIG1hcmtDbGVhbigpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIENhbGxlZCBieSB0aGUgc3ViY2xhc3Mgb3IgYSBidWlsZGVyIHRvIG5vdGlmeSB1cyB0
aGF0IGEgbWVzc2FnZSB3YXMKLSAgICAgKiBidWlsdCBhbmQgbWF5IGJlIGNhY2hlZCBhbmQgdGhl
cmVmb3JlIGludmFsaWRhdGlvbnMgYXJlIG5lZWRlZC4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQg
dm9pZCBtYXJrQ2xlYW4oKSB7Ci0gICAgICB0aGlzLmlzQ2xlYW4gPSB0cnVlOwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIEdldHMgd2hldGhlciBpbnZhbGlkYXRpb25zIGFyZSBuZWVkZWQKLSAg
ICAgKgotICAgICAqIEByZXR1cm4gd2hldGhlciBpbnZhbGlkYXRpb25zIGFyZSBuZWVkZWQKLSAg
ICAgKi8KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0NsZWFuKCkgewotICAgICAgcmV0dXJuIGlz
Q2xlYW47Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJUeXBlIGNs
b25lKCkgewotICAgICAgQnVpbGRlclR5cGUgYnVpbGRlciA9Ci0gICAgICAgICAgKEJ1aWxkZXJU
eXBlKSBnZXREZWZhdWx0SW5zdGFuY2VGb3JUeXBlKCkubmV3QnVpbGRlckZvclR5cGUoKTsKLSAg
ICAgIGJ1aWxkZXIubWVyZ2VGcm9tKGJ1aWxkUGFydGlhbCgpKTsKLSAgICAgIHJldHVybiBidWls
ZGVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBieSB0aGUgaW5pdGlhbGl6YXRp
b24gYW5kIGNsZWFyIGNvZGUgcGF0aHMgdG8gYWxsb3cgc3ViY2xhc3NlcyB0bwotICAgICAqIHJl
c2V0IGFueSBvZiB0aGVpciBidWlsdGluIGZpZWxkcyBiYWNrIHRvIHRoZSBpbml0aWFsIHZhbHVl
cy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlclR5cGUgY2xlYXIo
KSB7Ci0gICAgICB1bmtub3duRmllbGRzID0gVW5rbm93bkZpZWxkU2V0LmdldERlZmF1bHRJbnN0
YW5jZSgpOwotICAgICAgb25DaGFuZ2VkKCk7Ci0gICAgICByZXR1cm4gKEJ1aWxkZXJUeXBlKSB0
aGlzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUgRmllbGRBY2Nlc3NvclRhYmxl
IGZvciB0aGlzIHR5cGUuICBXZSBjYW4ndCBoYXZlIHRoZSBtZXNzYWdlCi0gICAgICogY2xhc3Mg
cGFzcyB0aGlzIGluIHRvIHRoZSBjb25zdHJ1Y3RvciBiZWNhdXNlIG9mIGJvb3RzdHJhcHBpbmcg
dHJvdWJsZQotICAgICAqIHdpdGggRGVzY3JpcHRvclByb3Rvcy4KLSAgICAgKi8KLSAgICBwcm90
ZWN0ZWQgYWJzdHJhY3QgRmllbGRBY2Nlc3NvclRhYmxlIGludGVybmFsR2V0RmllbGRBY2Nlc3Nv
clRhYmxlKCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRGVzY3JpcHRvciBnZXREZXNj
cmlwdG9yRm9yVHlwZSgpIHsKLSAgICAgIHJldHVybiBpbnRlcm5hbEdldEZpZWxkQWNjZXNzb3JU
YWJsZSgpLmRlc2NyaXB0b3I7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1h
cDxGaWVsZERlc2NyaXB0b3IsIE9iamVjdD4gZ2V0QWxsRmllbGRzKCkgewotICAgICAgcmV0dXJu
IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChnZXRBbGxGaWVsZHNNdXRhYmxlKCkpOwotICAg
IH0KLQotICAgIC8qKiBJbnRlcm5hbCBoZWxwZXIgd2hpY2ggcmV0dXJucyBhIG11dGFibGUgbWFw
LiAqLwotICAgIHByaXZhdGUgTWFwPEZpZWxkRGVzY3JpcHRvciwgT2JqZWN0PiBnZXRBbGxGaWVs
ZHNNdXRhYmxlKCkgewotICAgICAgZmluYWwgVHJlZU1hcDxGaWVsZERlc2NyaXB0b3IsIE9iamVj
dD4gcmVzdWx0ID0KLSAgICAgICAgbmV3IFRyZWVNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+
KCk7Ci0gICAgICBmaW5hbCBEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBpbnRlcm5hbEdldEZpZWxk
QWNjZXNzb3JUYWJsZSgpLmRlc2NyaXB0b3I7Ci0gICAgICBmaW5hbCBMaXN0PEZpZWxkRGVzY3Jp
cHRvcj4gZmllbGRzID0gZGVzY3JpcHRvci5nZXRGaWVsZHMoKTsKLQotICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgRmllbGREZXNjcmlwdG9y
IGZpZWxkID0gZmllbGRzLmdldChpKTsKLSAgICAgICAgZmluYWwgT25lb2ZEZXNjcmlwdG9yIG9u
ZW9mRGVzY3JpcHRvciA9IGZpZWxkLmdldENvbnRhaW5pbmdPbmVvZigpOwotCi0gICAgICAgIC8q
Ci0gICAgICAgICAqIElmIHRoZSBmaWVsZCBpcyBwYXJ0IG9mIGEgT25lb2YsIHRoZW4gYXQgbWF4
aW11bSBvbmUgZmllbGQgaW4gdGhlIE9uZW9mIGlzIHNldAotICAgICAgICAgKiBhbmQgaXQgaXMg
bm90IHJlcGVhdGVkLiBUaGVyZSBpcyBubyBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgb3Ro
ZXJzLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKG9uZW9mRGVzY3JpcHRvciAhPSBudWxsKSB7
Ci0gICAgICAgICAgLy8gU2tpcCBvdGhlciBmaWVsZHMgaW4gdGhlIE9uZW9mIHdlIGtub3cgYXJl
IG5vdCBzZXQKLSAgICAgICAgICBpICs9IG9uZW9mRGVzY3JpcHRvci5nZXRGaWVsZENvdW50KCkg
LSAxOwotICAgICAgICAgIGlmICghaGFzT25lb2Yob25lb2ZEZXNjcmlwdG9yKSkgewotICAgICAg
ICAgICAgLy8gSWYgbm8gZmllbGQgaXMgc2V0IGluIHRoZSBPbmVvZiwgc2tpcCBhbGwgdGhlIGZp
ZWxkcyBpbiB0aGUgT25lb2YKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAg
ICAgICAgICAvLyBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIG9ubHkgZmllbGQgd2hpY2ggaXMgc2V0
IGluIHRoZSBPbmVvZgotICAgICAgICAgIGZpZWxkID0gZ2V0T25lb2ZGaWVsZERlc2NyaXB0b3Io
b25lb2ZEZXNjcmlwdG9yKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBJZiB3ZSBh
cmUgbm90IGluIGEgT25lb2YsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGZpZWxkIGlzIHNldCBh
bmQgaWYgaXQgaXMgcmVwZWF0ZWQKLSAgICAgICAgICBpZiAoZmllbGQuaXNSZXBlYXRlZCgpKSB7
Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PD8+IHZhbHVlID0gKExpc3Q8Pz4pIGdldEZpZWxkKGZp
ZWxkKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
IHJlc3VsdC5wdXQoZmllbGQsIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoIWhhc0ZpZWxkKGZpZWxkKSkgewot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8v
IEFkZCB0aGUgZmllbGQgdG8gdGhlIG1hcAotICAgICAgICByZXN1bHQucHV0KGZpZWxkLCBnZXRG
aWVsZChmaWVsZCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVzc2FnZS5CdWlsZGVyIG5ld0J1aWxkZXJGb3JGaWVs
ZChmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQpIHsKLSAgICAgIHJldHVybiBpbnRlcm5hbEdl
dEZpZWxkQWNjZXNzb3JUYWJsZSgpLmdldEZpZWxkKGZpZWxkKS5uZXdCdWlsZGVyKCk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lc3NhZ2UuQnVpbGRlciBnZXRGaWVsZEJ1
aWxkZXIoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICByZXR1cm4gaW50ZXJu
YWxHZXRGaWVsZEFjY2Vzc29yVGFibGUoKS5nZXRGaWVsZChmaWVsZCkuZ2V0QnVpbGRlcih0aGlz
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVzc2FnZS5CdWlsZGVyIGdl
dFJlcGVhdGVkRmllbGRCdWlsZGVyKGZpbmFsIEZpZWxkRGVzY3JpcHRvciBmaWVsZCwgaW50IGlu
ZGV4KSB7Ci0gICAgICByZXR1cm4gaW50ZXJuYWxHZXRGaWVsZEFjY2Vzc29yVGFibGUoKS5nZXRG
aWVsZChmaWVsZCkuZ2V0UmVwZWF0ZWRCdWlsZGVyKAotICAgICAgICAgIHRoaXMsIGluZGV4KTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNPbmVvZihmaW5h
bCBPbmVvZkRlc2NyaXB0b3Igb25lb2YpIHsKLSAgICAgIHJldHVybiBpbnRlcm5hbEdldEZpZWxk
QWNjZXNzb3JUYWJsZSgpLmdldE9uZW9mKG9uZW9mKS5oYXModGhpcyk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIEZpZWxkRGVzY3JpcHRvciBnZXRPbmVvZkZpZWxkRGVzY3Jp
cHRvcihmaW5hbCBPbmVvZkRlc2NyaXB0b3Igb25lb2YpIHsKLSAgICAgIHJldHVybiBpbnRlcm5h
bEdldEZpZWxkQWNjZXNzb3JUYWJsZSgpLmdldE9uZW9mKG9uZW9mKS5nZXQodGhpcyk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaGFzRmllbGQoZmluYWwgRmll
bGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICByZXR1cm4gaW50ZXJuYWxHZXRGaWVsZEFjY2Vz
c29yVGFibGUoKS5nZXRGaWVsZChmaWVsZCkuaGFzKHRoaXMpOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBPYmplY3QgZ2V0RmllbGQoZmluYWwgRmllbGREZXNjcmlwdG9yIGZp
ZWxkKSB7Ci0gICAgICBPYmplY3Qgb2JqZWN0ID0gaW50ZXJuYWxHZXRGaWVsZEFjY2Vzc29yVGFi
bGUoKS5nZXRGaWVsZChmaWVsZCkuZ2V0KHRoaXMpOwotICAgICAgaWYgKGZpZWxkLmlzUmVwZWF0
ZWQoKSkgewotICAgICAgICAvLyBUaGUgdW5kZXJseWluZyBsaXN0IG9iamVjdCBpcyBzdGlsbCBt
b2RpZmlhYmxlIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIC8vIE1ha2Ugc3VyZSBub3QgdG8gZXhw
b3NlIHRoZSBtb2RpZmlhYmxlIGxpc3QgdG8gdGhlIGNhbGxlci4KLSAgICAgICAgcmV0dXJuIENv
bGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoKExpc3QpIG9iamVjdCk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBCdWlsZGVyVHlwZSBzZXRGaWVsZChmaW5hbCBGaWVsZERlc2NyaXB0b3Ig
ZmllbGQsIGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAgICAgaW50ZXJuYWxHZXRGaWVsZEFjY2Vz
c29yVGFibGUoKS5nZXRGaWVsZChmaWVsZCkuc2V0KHRoaXMsIHZhbHVlKTsKLSAgICAgIHJldHVy
biAoQnVpbGRlclR5cGUpIHRoaXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IEJ1aWxkZXJUeXBlIGNsZWFyRmllbGQoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0g
ICAgICBpbnRlcm5hbEdldEZpZWxkQWNjZXNzb3JUYWJsZSgpLmdldEZpZWxkKGZpZWxkKS5jbGVh
cih0aGlzKTsKLSAgICAgIHJldHVybiAoQnVpbGRlclR5cGUpIHRoaXM7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJUeXBlIGNsZWFyT25lb2YoZmluYWwgT25lb2ZE
ZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgICBpbnRlcm5hbEdldEZpZWxkQWNjZXNzb3JUYWJsZSgp
LmdldE9uZW9mKG9uZW9mKS5jbGVhcih0aGlzKTsKLSAgICAgIHJldHVybiAoQnVpbGRlclR5cGUp
IHRoaXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRSZXBlYXRl
ZEZpZWxkQ291bnQoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICByZXR1cm4g
aW50ZXJuYWxHZXRGaWVsZEFjY2Vzc29yVGFibGUoKS5nZXRGaWVsZChmaWVsZCkKLSAgICAgICAg
ICAuZ2V0UmVwZWF0ZWRDb3VudCh0aGlzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgT2JqZWN0IGdldFJlcGVhdGVkRmllbGQoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxk
LCBmaW5hbCBpbnQgaW5kZXgpIHsKLSAgICAgIHJldHVybiBpbnRlcm5hbEdldEZpZWxkQWNjZXNz
b3JUYWJsZSgpLmdldEZpZWxkKGZpZWxkKQotICAgICAgICAgIC5nZXRSZXBlYXRlZCh0aGlzLCBp
bmRleCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJUeXBlIHNl
dFJlcGVhdGVkRmllbGQoCi0gICAgICAgIGZpbmFsIEZpZWxkRGVzY3JpcHRvciBmaWVsZCwgZmlu
YWwgaW50IGluZGV4LCBmaW5hbCBPYmplY3QgdmFsdWUpIHsKLSAgICAgIGludGVybmFsR2V0Rmll
bGRBY2Nlc3NvclRhYmxlKCkuZ2V0RmllbGQoZmllbGQpCi0gICAgICAgIC5zZXRSZXBlYXRlZCh0
aGlzLCBpbmRleCwgdmFsdWUpOwotICAgICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgdGhpczsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlclR5cGUgYWRkUmVwZWF0ZWRG
aWVsZChmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQsIGZpbmFsIE9iamVjdCB2YWx1ZSkgewot
ICAgICAgaW50ZXJuYWxHZXRGaWVsZEFjY2Vzc29yVGFibGUoKS5nZXRGaWVsZChmaWVsZCkuYWRk
UmVwZWF0ZWQodGhpcywgdmFsdWUpOwotICAgICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgdGhpczsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlclR5cGUgc2V0VW5rbm93
bkZpZWxkcyhmaW5hbCBVbmtub3duRmllbGRTZXQgdW5rbm93bkZpZWxkcykgewotICAgICAgdGhp
cy51bmtub3duRmllbGRzID0gdW5rbm93bkZpZWxkczsKLSAgICAgIG9uQ2hhbmdlZCgpOwotICAg
ICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgdGhpczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgQnVpbGRlclR5cGUgbWVyZ2VVbmtub3duRmllbGRzKAotICAgICAgICBmaW5hbCBV
bmtub3duRmllbGRTZXQgdW5rbm93bkZpZWxkcykgewotICAgICAgdGhpcy51bmtub3duRmllbGRz
ID0KLSAgICAgICAgVW5rbm93bkZpZWxkU2V0Lm5ld0J1aWxkZXIodGhpcy51bmtub3duRmllbGRz
KQotICAgICAgICAgICAgICAgICAgICAgICAubWVyZ2VGcm9tKHVua25vd25GaWVsZHMpCi0gICAg
ICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgb25DaGFuZ2VkKCk7Ci0gICAgICBy
ZXR1cm4gKEJ1aWxkZXJUeXBlKSB0aGlzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBib29sZWFuIGlzSW5pdGlhbGl6ZWQoKSB7Ci0gICAgICBmb3IgKGZpbmFsIEZpZWxkRGVz
Y3JpcHRvciBmaWVsZCA6IGdldERlc2NyaXB0b3JGb3JUeXBlKCkuZ2V0RmllbGRzKCkpIHsKLSAg
ICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgcmVxdWlyZWQgZmllbGRzIGFyZSBwcmVzZW50LgotICAg
ICAgICBpZiAoZmllbGQuaXNSZXF1aXJlZCgpKSB7Ci0gICAgICAgICAgaWYgKCFoYXNGaWVsZChm
aWVsZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBlbWJlZGRlZCBtZXNzYWdlcyBhcmUgaW5pdGlhbGl6
ZWQuCi0gICAgICAgIGlmIChmaWVsZC5nZXRKYXZhVHlwZSgpID09IEZpZWxkRGVzY3JpcHRvci5K
YXZhVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgICAgaWYgKGZpZWxkLmlzUmVwZWF0ZWQoKSkgewot
ICAgICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpIGZpbmFsCi0gICAgICAg
ICAgICBMaXN0PE1lc3NhZ2U+IG1lc3NhZ2VMaXN0ID0gKExpc3Q8TWVzc2FnZT4pIGdldEZpZWxk
KGZpZWxkKTsKLSAgICAgICAgICAgIGZvciAoZmluYWwgTWVzc2FnZSBlbGVtZW50IDogbWVzc2Fn
ZUxpc3QpIHsKLSAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzSW5pdGlhbGl6ZWQoKSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaGFzRmllbGQoZmllbGQp
ICYmCi0gICAgICAgICAgICAgICAgISgoTWVzc2FnZSkgZ2V0RmllbGQoZmllbGQpKS5pc0luaXRp
YWxpemVkKCkpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIFVua25vd25GaWVsZFNldCBnZXRV
bmtub3duRmllbGRzKCkgewotICAgICAgcmV0dXJuIHVua25vd25GaWVsZHM7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IHN1YmNsYXNzZXMgdG8gcGFyc2UgYW4gdW5rbm93biBm
aWVsZC4KLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSB1bmxlc3MgdGhlIHRhZyBpcyBhbiBl
bmQtZ3JvdXAgdGFnLgotICAgICAqLwotICAgIHByb3RlY3RlZCBib29sZWFuIHBhcnNlVW5rbm93
bkZpZWxkKAotICAgICAgICBmaW5hbCBDb2RlZElucHV0U3RyZWFtIGlucHV0LAotICAgICAgICBm
aW5hbCBVbmtub3duRmllbGRTZXQuQnVpbGRlciB1bmtub3duRmllbGRzLAotICAgICAgICBmaW5h
bCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnksCi0gICAgICAgIGZpbmFs
IGludCB0YWcpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICByZXR1cm4gdW5rbm93bkZpZWxk
cy5tZXJnZUZpZWxkRnJvbSh0YWcsIGlucHV0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJ
bXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQnVpbGRlclBhcmVudH0gZm9yIGdpdmluZyB0byBvdXIg
Y2hpbGRyZW4uIFRoaXMKLSAgICAgKiBzbWFsbCBpbm5lciBjbGFzcyBtYWtlcyBpdCBzbyB3ZSBk
b24ndCBwdWJsaWNseSBleHBvc2UgdGhlIEJ1aWxkZXJQYXJlbnQKLSAgICAgKiBtZXRob2RzLgot
ICAgICAqLwotICAgIHByaXZhdGUgY2xhc3MgQnVpbGRlclBhcmVudEltcGwgaW1wbGVtZW50cyBC
dWlsZGVyUGFyZW50IHsKLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBtYXJr
RGlydHkoKSB7Ci0gICAgICAgIG9uQ2hhbmdlZCgpOwotICAgICAgfQotICAgIH0KLQotICAgIC8q
KgotICAgICAqIEdldHMgdGhlIHtAbGluayBCdWlsZGVyUGFyZW50fSBmb3IgZ2l2aW5nIHRvIG91
ciBjaGlsZHJlbi4KLSAgICAgKiBAcmV0dXJuIFRoZSBidWlsZGVyIHBhcmVudCBmb3Igb3VyIGNo
aWxkcmVuLgotICAgICAqLwotICAgIHByb3RlY3RlZCBCdWlsZGVyUGFyZW50IGdldFBhcmVudEZv
ckNoaWxkcmVuKCkgewotICAgICAgaWYgKG1lQXNQYXJlbnQgPT0gbnVsbCkgewotICAgICAgICBt
ZUFzUGFyZW50ID0gbmV3IEJ1aWxkZXJQYXJlbnRJbXBsKCk7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gbWVBc1BhcmVudDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgd2hlbiBhIHRo
ZSBidWlsZGVyIG9yIG9uZSBvZiBpdHMgbmVzdGVkIGNoaWxkcmVuIGhhcyBjaGFuZ2VkCi0gICAg
ICogYW5kIGFueSBwYXJlbnQgc2hvdWxkIGJlIG5vdGlmaWVkIG9mIGl0cyBpbnZhbGlkYXRpb24u
Ci0gICAgICovCi0gICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgb25DaGFuZ2VkKCkgewotICAgICAg
aWYgKGlzQ2xlYW4gJiYgYnVpbGRlclBhcmVudCAhPSBudWxsKSB7Ci0gICAgICAgIGJ1aWxkZXJQ
YXJlbnQubWFya0RpcnR5KCk7Ci0KLSAgICAgICAgLy8gRG9uJ3Qga2VlcCBkaXNwYXRjaGluZyBp
bnZhbGlkYXRpb25zIHVudGlsIGJ1aWxkIGlzIGNhbGxlZCBhZ2Fpbi4KLSAgICAgICAgaXNDbGVh
biA9IGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1h
cCBmaWVsZCB3aXRoIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIuIFRoaXMgbWV0aG9kIHNob3VsZCBi
ZQotICAgICAqIG92ZXJyaWRkZW4gaW4gdGhlIGdlbmVyYXRlZCBtZXNzYWdlIGNsYXNzIGlmIHRo
ZSBtZXNzYWdlIGNvbnRhaW5zIG1hcAotICAgICAqIGZpZWxkcy4KLSAgICAgKgotICAgICAqIFVu
bGlrZSBvdGhlciBmaWVsZCB0eXBlcywgcmVmbGVjdGlvbiBzdXBwb3J0IGZvciBtYXAgZmllbGRz
IGNhbid0IGJlCi0gICAgICogaW1wbGVtZW50ZWQgYmFzZWQgb24gZ2VuZXJhdGVkIHB1YmxpYyBB
UEkgYmVjYXVzZSB3ZSBuZWVkIHRvIGFjY2VzcyBhCi0gICAgICogbWFwIGZpZWxkIGFzIGEgbGlz
dCBpbiByZWZsZWN0aW9uIEFQSSBidXQgdGhlIGdlbmVyYXRlZCBBUEkgb25seSBhbGxvd3MKLSAg
ICAgKiB1cyB0byBhY2Nlc3MgaXQgYXMgYSBtYXAuIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHVu
ZGVybHlpbmcgbWFwIGZpZWxkCi0gICAgICogZGlyZWN0bHkgYW5kIHRodXMgZW5hYmxlcyB1cyB0
byBhY2Nlc3MgdGhlIG1hcCBmaWVsZCBhcyBhIGxpc3QuCi0gICAgICovCi0gICAgQFN1cHByZXNz
V2FybmluZ3MoeyJ1bnVzZWQiLCAicmF3dHlwZXMifSkKLSAgICBwcm90ZWN0ZWQgTWFwRmllbGQg
aW50ZXJuYWxHZXRNYXBGaWVsZChpbnQgZmllbGROdW1iZXIpIHsKLSAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBjYW4ndCB1c2UgZGVzY3JpcHRvciBuYW1lcyBoZXJlIGJlY2F1c2UgdGhpcyBtZXRob2Qg
d2lsbAotICAgICAgLy8gYmUgY2FsbGVkIHdoZW4gZGVzY3JpcHRvciBpcyBiZWluZyBpbml0aWFs
aXplZC4KLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJObyBt
YXAgZmllbGRzIGZvdW5kIGluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgfQotCi0g
ICAgLyoqIExpa2Uge0BsaW5rICNpbnRlcm5hbEdldE1hcEZpZWxkfSBidXQgcmV0dXJuIGEgbXV0
YWJsZSB2ZXJzaW9uLiAqLwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsidW51c2VkIiwgInJhd3R5
cGVzIn0pCi0gICAgcHJvdGVjdGVkIE1hcEZpZWxkIGludGVybmFsR2V0TXV0YWJsZU1hcEZpZWxk
KGludCBmaWVsZE51bWJlcikgewotICAgICAgLy8gTm90ZSB0aGF0IHdlIGNhbid0IHVzZSBkZXNj
cmlwdG9yIG5hbWVzIGhlcmUgYmVjYXVzZSB0aGlzIG1ldGhvZCB3aWxsCi0gICAgICAvLyBiZSBj
YWxsZWQgd2hlbiBkZXNjcmlwdG9yIGlzIGJlaW5nIGluaXRpYWxpemVkLgotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIk5vIG1hcCBmaWVsZHMgZm91bmQgaW4g
IiArIGdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICAvLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
ICAvLyBFeHRlbnNpb25zLXJlbGF0ZWQgc3R1ZmYKLQotICBwdWJsaWMgaW50ZXJmYWNlIEV4dGVu
ZGFibGVNZXNzYWdlT3JCdWlsZGVyPAotICAgICAgTWVzc2FnZVR5cGUgZXh0ZW5kcyBFeHRlbmRh
YmxlTWVzc2FnZT4gZXh0ZW5kcyBNZXNzYWdlT3JCdWlsZGVyIHsKLSAgICAvLyBSZS1kZWZpbmUg
Zm9yIHJldHVybiB0eXBlIGNvdmFyaWFuY2UuCi0gICAgQE92ZXJyaWRlCi0gICAgTWVzc2FnZSBn
ZXREZWZhdWx0SW5zdGFuY2VGb3JUeXBlKCk7Ci0KLSAgICAvKiogQ2hlY2sgaWYgYSBzaW5ndWxh
ciBleHRlbnNpb24gaXMgcHJlc2VudC4gKi8KLSAgICA8VHlwZT4gYm9vbGVhbiBoYXNFeHRlbnNp
b24oCi0gICAgICAgIEV4dGVuc2lvbkxpdGU8TWVzc2FnZVR5cGUsIFR5cGU+IGV4dGVuc2lvbik7
Ci0KLSAgICAvKiogR2V0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSByZXBlYXRlZCBleHRl
bnNpb24uICovCi0gICAgPFR5cGU+IGludCBnZXRFeHRlbnNpb25Db3VudCgKLSAgICAgICAgRXh0
ZW5zaW9uTGl0ZTxNZXNzYWdlVHlwZSwgTGlzdDxUeXBlPj4gZXh0ZW5zaW9uKTsKLQotICAgIC8q
KiBHZXQgdGhlIHZhbHVlIG9mIGFuIGV4dGVuc2lvbi4gKi8KLSAgICA8VHlwZT4gVHlwZSBnZXRF
eHRlbnNpb24oCi0gICAgICAgIEV4dGVuc2lvbkxpdGU8TWVzc2FnZVR5cGUsIFR5cGU+IGV4dGVu
c2lvbik7Ci0KLSAgICAvKiogR2V0IG9uZSBlbGVtZW50IG9mIGEgcmVwZWF0ZWQgZXh0ZW5zaW9u
LiAqLwotICAgIDxUeXBlPiBUeXBlIGdldEV4dGVuc2lvbigKLSAgICAgICAgRXh0ZW5zaW9uTGl0
ZTxNZXNzYWdlVHlwZSwgTGlzdDxUeXBlPj4gZXh0ZW5zaW9uLAotICAgICAgICBpbnQgaW5kZXgp
OwotICB9Ci0KLSAgLyoqCi0gICAqIEdlbmVyYXRlZCBtZXNzYWdlIGNsYXNzZXMgZm9yIG1lc3Nh
Z2UgdHlwZXMgdGhhdCBjb250YWluIGV4dGVuc2lvbiByYW5nZXMKLSAgICogc3ViY2xhc3MgdGhp
cy4KLSAgICoKLSAgICogPHA+VGhpcyBjbGFzcyBpbXBsZW1lbnRzIHR5cGUtc2FmZSBhY2Nlc3Nv
cnMgZm9yIGV4dGVuc2lvbnMuICBUaGV5Ci0gICAqIGltcGxlbWVudCBhbGwgdGhlIHNhbWUgb3Bl
cmF0aW9ucyB0aGF0IHlvdSBjYW4gZG8gd2l0aCBub3JtYWwgZmllbGRzIC0tCi0gICAqIGUuZy4g
ImhhcyIsICJnZXQiLCBhbmQgImdldENvdW50IiAtLSBidXQgZm9yIGV4dGVuc2lvbnMuICBUaGUg
ZXh0ZW5zaW9ucwotICAgKiBhcmUgaWRlbnRpZmllZCB1c2luZyBpbnN0YW5jZXMgb2YgdGhlIGNs
YXNzIHtAbGluayBHZW5lcmF0ZWRFeHRlbnNpb259OwotICAgKiB0aGUgcHJvdG9jb2wgY29tcGls
ZXIgZ2VuZXJhdGVzIGEgc3RhdGljIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZm9yIGV2ZXJ5Ci0g
ICAqIGV4dGVuc2lvbiBpbiBpdHMgaW5wdXQuICBUaHJvdWdoIHRoZSBtYWdpYyBvZiBnZW5lcmlj
cywgYWxsIGlzIG1hZGUKLSAgICogdHlwZS1zYWZlLgotICAgKgotICAgKiA8cD5Gb3IgZXhhbXBs
ZSwgaW1hZ2luZSB5b3UgaGF2ZSB0aGUge0Bjb2RlIC5wcm90b30gZmlsZToKLSAgICoKLSAgICog
PHByZT4KLSAgICogb3B0aW9uIGphdmFfY2xhc3MgPSAiTXlQcm90byI7Ci0gICAqCi0gICAqIG1l
c3NhZ2UgRm9vIHsKLSAgICogICBleHRlbnNpb25zIDEwMDAgdG8gbWF4OwotICAgKiB9Ci0gICAq
Ci0gICAqIGV4dGVuZCBGb28gewotICAgKiAgIG9wdGlvbmFsIGludDMyIGJhcjsKLSAgICogfQot
ICAgKiA8L3ByZT4KLSAgICoKLSAgICogPHA+VGhlbiB5b3UgbWlnaHQgd3JpdGUgY29kZSBsaWtl
OgotICAgKgotICAgKiA8cHJlPgotICAgKiBNeVByb3RvLkZvbyBmb28gPSBnZXRGb28oKTsKLSAg
ICogaW50IGkgPSBmb28uZ2V0RXh0ZW5zaW9uKE15UHJvdG8uYmFyKTsKLSAgICogPC9wcmU+Ci0g
ICAqCi0gICAqIDxwPlNlZSBhbHNvIHtAbGluayBFeHRlbmRhYmxlQnVpbGRlcn0uCi0gICAqLwot
ICBwdWJsaWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIEV4dGVuZGFibGVNZXNzYWdlPAotICAgICAg
ICBNZXNzYWdlVHlwZSBleHRlbmRzIEV4dGVuZGFibGVNZXNzYWdlPgotICAgICAgZXh0ZW5kcyBH
ZW5lcmF0ZWRNZXNzYWdlCi0gICAgICBpbXBsZW1lbnRzIEV4dGVuZGFibGVNZXNzYWdlT3JCdWls
ZGVyPE1lc3NhZ2VUeXBlPiB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlh
bFZlcnNpb25VSUQgPSAxTDsKLQotICAgIHByaXZhdGUgZmluYWwgRmllbGRTZXQ8RmllbGREZXNj
cmlwdG9yPiBleHRlbnNpb25zOwotCi0gICAgcHJvdGVjdGVkIEV4dGVuZGFibGVNZXNzYWdlKCkg
ewotICAgICAgdGhpcy5leHRlbnNpb25zID0gRmllbGRTZXQubmV3RmllbGRTZXQoKTsKLSAgICB9
Ci0KLSAgICBwcm90ZWN0ZWQgRXh0ZW5kYWJsZU1lc3NhZ2UoCi0gICAgICAgIEV4dGVuZGFibGVC
dWlsZGVyPE1lc3NhZ2VUeXBlLCA/PiBidWlsZGVyKSB7Ci0gICAgICBzdXBlcihidWlsZGVyKTsK
LSAgICAgIHRoaXMuZXh0ZW5zaW9ucyA9IGJ1aWxkZXIuYnVpbGRFeHRlbnNpb25zKCk7Ci0gICAg
fQotCi0gICAgcHJpdmF0ZSB2b2lkIHZlcmlmeUV4dGVuc2lvbkNvbnRhaW5pbmdUeXBlKAotICAg
ICAgICBmaW5hbCBFeHRlbnNpb248TWVzc2FnZVR5cGUsID8+IGV4dGVuc2lvbikgewotICAgICAg
aWYgKGV4dGVuc2lvbi5nZXREZXNjcmlwdG9yKCkuZ2V0Q29udGFpbmluZ1R5cGUoKSAhPQotICAg
ICAgICAgIGdldERlc2NyaXB0b3JGb3JUeXBlKCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYW4gb25s
eSBoYXBwZW4gaWYgc29tZW9uZSB1c2VzIHVuY2hlY2tlZCBvcGVyYXRpb25zLgotICAgICAgICB0
aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJFeHRlbnNpb24g
aXMgZm9yIHR5cGUgXCIiICsKLSAgICAgICAgICBleHRlbnNpb24uZ2V0RGVzY3JpcHRvcigpLmdl
dENvbnRhaW5pbmdUeXBlKCkuZ2V0RnVsbE5hbWUoKSArCi0gICAgICAgICAgIlwiIHdoaWNoIGRv
ZXMgbm90IG1hdGNoIG1lc3NhZ2UgdHlwZSBcIiIgKwotICAgICAgICAgIGdldERlc2NyaXB0b3JG
b3JUeXBlKCkuZ2V0RnVsbE5hbWUoKSArICJcIi4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
KiogQ2hlY2sgaWYgYSBzaW5ndWxhciBleHRlbnNpb24gaXMgcHJlc2VudC4gKi8KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgZmluYWwgPFR5cGU+IGJvb2xlYW4gaGFzRXh0ZW5zaW9uKGZpbmFs
IEV4dGVuc2lvbkxpdGU8TWVzc2FnZVR5cGUsIFR5cGU+IGV4dGVuc2lvbkxpdGUpIHsKLSAgICAg
IEV4dGVuc2lvbjxNZXNzYWdlVHlwZSwgVHlwZT4gZXh0ZW5zaW9uID0gY2hlY2tOb3RMaXRlKGV4
dGVuc2lvbkxpdGUpOwotCi0gICAgICB2ZXJpZnlFeHRlbnNpb25Db250YWluaW5nVHlwZShleHRl
bnNpb24pOwotICAgICAgcmV0dXJuIGV4dGVuc2lvbnMuaGFzRmllbGQoZXh0ZW5zaW9uLmdldERl
c2NyaXB0b3IoKSk7Ci0gICAgfQotCi0gICAgLyoqIEdldCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz
IGluIGEgcmVwZWF0ZWQgZXh0ZW5zaW9uLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBm
aW5hbCA8VHlwZT4gaW50IGdldEV4dGVuc2lvbkNvdW50KAotICAgICAgICBmaW5hbCBFeHRlbnNp
b25MaXRlPE1lc3NhZ2VUeXBlLCBMaXN0PFR5cGU+PiBleHRlbnNpb25MaXRlKSB7Ci0gICAgICBF
eHRlbnNpb248TWVzc2FnZVR5cGUsIExpc3Q8VHlwZT4+IGV4dGVuc2lvbiA9IGNoZWNrTm90TGl0
ZShleHRlbnNpb25MaXRlKTsKLQotICAgICAgdmVyaWZ5RXh0ZW5zaW9uQ29udGFpbmluZ1R5cGUo
ZXh0ZW5zaW9uKTsKLSAgICAgIGZpbmFsIEZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZXh0
ZW5zaW9uLmdldERlc2NyaXB0b3IoKTsKLSAgICAgIHJldHVybiBleHRlbnNpb25zLmdldFJlcGVh
dGVkRmllbGRDb3VudChkZXNjcmlwdG9yKTsKLSAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSB2YWx1
ZSBvZiBhbiBleHRlbnNpb24uICovCi0gICAgQE92ZXJyaWRlCi0gICAgQFN1cHByZXNzV2Fybmlu
Z3MoInVuY2hlY2tlZCIpCi0gICAgcHVibGljIGZpbmFsIDxUeXBlPiBUeXBlIGdldEV4dGVuc2lv
bihmaW5hbCBFeHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBUeXBlPiBleHRlbnNpb25MaXRlKSB7
Ci0gICAgICBFeHRlbnNpb248TWVzc2FnZVR5cGUsIFR5cGU+IGV4dGVuc2lvbiA9IGNoZWNrTm90
TGl0ZShleHRlbnNpb25MaXRlKTsKLQotICAgICAgdmVyaWZ5RXh0ZW5zaW9uQ29udGFpbmluZ1R5
cGUoZXh0ZW5zaW9uKTsKLSAgICAgIEZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZXh0ZW5z
aW9uLmdldERlc2NyaXB0b3IoKTsKLSAgICAgIGZpbmFsIE9iamVjdCB2YWx1ZSA9IGV4dGVuc2lv
bnMuZ2V0RmllbGQoZGVzY3JpcHRvcik7Ci0gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAg
ICAgICBpZiAoZGVzY3JpcHRvci5pc1JlcGVhdGVkKCkpIHsKLSAgICAgICAgICByZXR1cm4gKFR5
cGUpIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0
b3IuZ2V0SmF2YVR5cGUoKSA9PQotICAgICAgICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvci5K
YXZhVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgICAgcmV0dXJuIChUeXBlKSBleHRlbnNpb24uZ2V0
TWVzc2FnZURlZmF1bHRJbnN0YW5jZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJl
dHVybiAoVHlwZSkgZXh0ZW5zaW9uLmZyb21SZWZsZWN0aW9uVHlwZSgKLSAgICAgICAgICAgICAg
ZGVzY3JpcHRvci5nZXREZWZhdWx0VmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJldHVybiAoVHlwZSkgZXh0ZW5zaW9uLmZyb21SZWZsZWN0aW9uVHlwZSh2YWx1
ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEdldCBvbmUgZWxlbWVudCBvZiBhIHJlcGVh
dGVkIGV4dGVuc2lvbi4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBAU3VwcHJlc3NXYXJuaW5ncygi
dW5jaGVja2VkIikKLSAgICBwdWJsaWMgZmluYWwgPFR5cGU+IFR5cGUgZ2V0RXh0ZW5zaW9uKAot
ICAgICAgICBmaW5hbCBFeHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBMaXN0PFR5cGU+PiBleHRl
bnNpb25MaXRlLCBmaW5hbCBpbnQgaW5kZXgpIHsKLSAgICAgIEV4dGVuc2lvbjxNZXNzYWdlVHlw
ZSwgTGlzdDxUeXBlPj4gZXh0ZW5zaW9uID0gY2hlY2tOb3RMaXRlKGV4dGVuc2lvbkxpdGUpOwot
Ci0gICAgICB2ZXJpZnlFeHRlbnNpb25Db250YWluaW5nVHlwZShleHRlbnNpb24pOwotICAgICAg
RmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBleHRlbnNpb24uZ2V0RGVzY3JpcHRvcigpOwot
ICAgICAgcmV0dXJuIChUeXBlKSBleHRlbnNpb24uc2luZ3VsYXJGcm9tUmVmbGVjdGlvblR5cGUo
Ci0gICAgICAgICAgZXh0ZW5zaW9ucy5nZXRSZXBlYXRlZEZpZWxkKGRlc2NyaXB0b3IsIGluZGV4
KSk7Ci0gICAgfQotCi0gICAgLyoqIENhbGxlZCBieSBzdWJjbGFzc2VzIHRvIGNoZWNrIGlmIGFs
bCBleHRlbnNpb25zIGFyZSBpbml0aWFsaXplZC4gKi8KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBl
eHRlbnNpb25zQXJlSW5pdGlhbGl6ZWQoKSB7Ci0gICAgICByZXR1cm4gZXh0ZW5zaW9ucy5pc0lu
aXRpYWxpemVkKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4g
aXNJbml0aWFsaXplZCgpIHsKLSAgICAgIHJldHVybiBzdXBlci5pc0luaXRpYWxpemVkKCkgJiYg
ZXh0ZW5zaW9uc0FyZUluaXRpYWxpemVkKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHJvdGVjdGVkIGJvb2xlYW4gcGFyc2VVbmtub3duRmllbGQoCi0gICAgICAgIENvZGVkSW5wdXRT
dHJlYW0gaW5wdXQsCi0gICAgICAgIFVua25vd25GaWVsZFNldC5CdWlsZGVyIHVua25vd25GaWVs
ZHMsCi0gICAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSwKLSAg
ICAgICAgaW50IHRhZykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiBNZXNzYWdl
UmVmbGVjdGlvbi5tZXJnZUZpZWxkRnJvbSgKLSAgICAgICAgICBpbnB1dCwgdW5rbm93bkZpZWxk
cywgZXh0ZW5zaW9uUmVnaXN0cnksIGdldERlc2NyaXB0b3JGb3JUeXBlKCksCi0gICAgICAgICAg
bmV3IE1lc3NhZ2VSZWZsZWN0aW9uLkV4dGVuc2lvbkFkYXB0ZXIoZXh0ZW5zaW9ucyksIHRhZyk7
Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHBhcnNpbmcgY29uc3RydWN0b3Jz
IGluIGdlbmVyYXRlZCBjbGFzc2VzLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHByb3Rl
Y3RlZCB2b2lkIG1ha2VFeHRlbnNpb25zSW1tdXRhYmxlKCkgewotICAgICAgZXh0ZW5zaW9ucy5t
YWtlSW1tdXRhYmxlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXNlZCBieSBzdWJjbGFz
c2VzIHRvIHNlcmlhbGl6ZSBleHRlbnNpb25zLiAgRXh0ZW5zaW9uIHJhbmdlcyBtYXkgYmUKLSAg
ICAgKiBpbnRlcmxlYXZlZCB3aXRoIGZpZWxkIG51bWJlcnMsIGJ1dCB3ZSBtdXN0IHdyaXRlIHRo
ZW0gaW4gY2Fub25pY2FsCi0gICAgICogKHNvcnRlZCBieSBmaWVsZCBudW1iZXIpIG9yZGVyLiAg
RXh0ZW5zaW9uV3JpdGVyIGhlbHBzIHVzIHdyaXRlCi0gICAgICogaW5kaXZpZHVhbCByYW5nZXMg
b2YgZXh0ZW5zaW9ucyBhdCBvbmNlLgotICAgICAqLwotICAgIHByb3RlY3RlZCBjbGFzcyBFeHRl
bnNpb25Xcml0ZXIgewotICAgICAgLy8gSW1hZ2luZSBob3cgbXVjaCBzaW1wbGVyIHRoaXMgY29k
ZSB3b3VsZCBiZSBpZiBKYXZhIGl0ZXJhdG9ycyBoYWQKLSAgICAgIC8vIGEgd2F5IHRvIGdldCB0
aGUgbmV4dCBlbGVtZW50IHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBpdGVyYXRvci4KLQotICAgICAg
cHJpdmF0ZSBmaW5hbCBJdGVyYXRvcjxNYXAuRW50cnk8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+
PiBpdGVyID0KLSAgICAgICAgZXh0ZW5zaW9ucy5pdGVyYXRvcigpOwotICAgICAgcHJpdmF0ZSBN
YXAuRW50cnk8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IG5leHQ7Ci0gICAgICBwcml2YXRlIGZp
bmFsIGJvb2xlYW4gbWVzc2FnZVNldFdpcmVGb3JtYXQ7Ci0KLSAgICAgIHByaXZhdGUgRXh0ZW5z
aW9uV3JpdGVyKGZpbmFsIGJvb2xlYW4gbWVzc2FnZVNldFdpcmVGb3JtYXQpIHsKLSAgICAgICAg
aWYgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgbmV4dCA9IGl0ZXIubmV4dCgpOwotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMubWVzc2FnZVNldFdpcmVGb3JtYXQgPSBtZXNzYWdlU2V0V2ly
ZUZvcm1hdDsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd3JpdGVVbnRpbChmaW5hbCBp
bnQgZW5kLCBmaW5hbCBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHdoaWxlIChuZXh0ICE9
IG51bGwgJiYgbmV4dC5nZXRLZXkoKS5nZXROdW1iZXIoKSA8IGVuZCkgewotICAgICAgICAgIEZp
ZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbmV4dC5nZXRLZXkoKTsKLSAgICAgICAgICBpZiAo
bWVzc2FnZVNldFdpcmVGb3JtYXQgJiYgZGVzY3JpcHRvci5nZXRMaXRlSmF2YVR5cGUoKSA9PQot
ICAgICAgICAgICAgICAgICAgV2lyZUZvcm1hdC5KYXZhVHlwZS5NRVNTQUdFICYmCi0gICAgICAg
ICAgICAgICFkZXNjcmlwdG9yLmlzUmVwZWF0ZWQoKSkgewotICAgICAgICAgICAgaWYgKG5leHQg
aW5zdGFuY2VvZiBMYXp5RmllbGQuTGF6eUVudHJ5PD8+KSB7Ci0gICAgICAgICAgICAgIG91dHB1
dC53cml0ZVJhd01lc3NhZ2VTZXRFeHRlbnNpb24oZGVzY3JpcHRvci5nZXROdW1iZXIoKSwKLSAg
ICAgICAgICAgICAgICAgICgoTGF6eUZpZWxkLkxhenlFbnRyeTw/PikgbmV4dCkuZ2V0RmllbGQo
KS50b0J5dGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBv
dXRwdXQud3JpdGVNZXNzYWdlU2V0RXh0ZW5zaW9uKGRlc2NyaXB0b3IuZ2V0TnVtYmVyKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1lc3NhZ2UpIG5l
eHQuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIFRPRE8oeGlhbmdsKTogVGFrZW4gY2FyZSBvZiBmb2xsb3dpbmcgY29kZSwgaXQg
bWF5IGNhdXNlCi0gICAgICAgICAgICAvLyBwcm9ibGVtIHdoZW4gd2UgdXNlIExhenlGaWVsZCBm
b3Igbm9ybWFsIGZpZWxkcy9leHRlbnNpb25zLgotICAgICAgICAgICAgLy8gRHVlIHRvIHRoZSBv
cHRpb25hbCBmaWVsZCBjYW4gYmUgZHVwbGljYXRlZCBhdCB0aGUgZW5kIG9mCi0gICAgICAgICAg
ICAvLyBzZXJpYWxpemVkIGJ5dGVzLCB3aGljaCB3aWxsIG1ha2UgdGhlIHNlcmlhbGl6ZWQgc2l6
ZSBjaGFuZ2UKLSAgICAgICAgICAgIC8vIGFmdGVyIGxhenkgZmllbGQgcGFyc2VkLiBTbyB3aGVu
IHdlIHVzZSBMYXp5RmllbGQgZ2xvYmFsbHksCi0gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNo
YW5nZSB0aGUgZm9sbG93aW5nIHdyaXRlIG1ldGhvZCB0byB3cml0ZSBjYWNoZWQKLSAgICAgICAg
ICAgIC8vIGJ5dGVzIGRpcmVjdGx5IHJhdGhlciB0aGFuIHdyaXRlIHRoZSBwYXJzZWQgbWVzc2Fn
ZS4KLSAgICAgICAgICAgIEZpZWxkU2V0LndyaXRlRmllbGQoZGVzY3JpcHRvciwgbmV4dC5nZXRW
YWx1ZSgpLCBvdXRwdXQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaXRlci5oYXNOZXh0
KCkpIHsKLSAgICAgICAgICAgIG5leHQgPSBpdGVyLm5leHQoKTsKLSAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbmV4dCA9IG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIEV4dGVuc2lvbldyaXRlciBuZXdFeHRlbnNpb25X
cml0ZXIoKSB7Ci0gICAgICByZXR1cm4gbmV3IEV4dGVuc2lvbldyaXRlcihmYWxzZSk7Ci0gICAg
fQotICAgIHByb3RlY3RlZCBFeHRlbnNpb25Xcml0ZXIgbmV3TWVzc2FnZVNldEV4dGVuc2lvbldy
aXRlcigpIHsKLSAgICAgIHJldHVybiBuZXcgRXh0ZW5zaW9uV3JpdGVyKHRydWUpOwotICAgIH0K
LQotICAgIC8qKiBDYWxsZWQgYnkgc3ViY2xhc3NlcyB0byBjb21wdXRlIHRoZSBzaXplIG9mIGV4
dGVuc2lvbnMuICovCi0gICAgcHJvdGVjdGVkIGludCBleHRlbnNpb25zU2VyaWFsaXplZFNpemUo
KSB7Ci0gICAgICByZXR1cm4gZXh0ZW5zaW9ucy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIH0K
LSAgICBwcm90ZWN0ZWQgaW50IGV4dGVuc2lvbnNTZXJpYWxpemVkU2l6ZUFzTWVzc2FnZVNldCgp
IHsKLSAgICAgIHJldHVybiBleHRlbnNpb25zLmdldE1lc3NhZ2VTZXRTZXJpYWxpemVkU2l6ZSgp
OwotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFJlZmxlY3Rpb24KLQotICAgIHByb3Rl
Y3RlZCBNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGdldEV4dGVuc2lvbkZpZWxkcygpIHsK
LSAgICAgIHJldHVybiBleHRlbnNpb25zLmdldEFsbEZpZWxkcygpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGdldEFsbEZp
ZWxkcygpIHsKLSAgICAgIGZpbmFsIE1hcDxGaWVsZERlc2NyaXB0b3IsIE9iamVjdD4gcmVzdWx0
ID0KLSAgICAgICAgICBzdXBlci5nZXRBbGxGaWVsZHNNdXRhYmxlKC8qIGdldEJ5dGVzRm9yU3Ry
aW5nID0gKi8gZmFsc2UpOwotICAgICAgcmVzdWx0LnB1dEFsbChnZXRFeHRlbnNpb25GaWVsZHMo
KSk7Ci0gICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKHJlc3VsdCk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hcDxGaWVsZERlc2NyaXB0b3IsIE9i
amVjdD4gZ2V0QWxsRmllbGRzUmF3KCkgewotICAgICAgZmluYWwgTWFwPEZpZWxkRGVzY3JpcHRv
ciwgT2JqZWN0PiByZXN1bHQgPQotICAgICAgICAgIHN1cGVyLmdldEFsbEZpZWxkc011dGFibGUo
LyogZ2V0Qnl0ZXNGb3JTdHJpbmcgPSAqLyBmYWxzZSk7Ci0gICAgICByZXN1bHQucHV0QWxsKGdl
dEV4dGVuc2lvbkZpZWxkcygpKTsKLSAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFi
bGVNYXAocmVzdWx0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVh
biBoYXNGaWVsZChmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQpIHsKLSAgICAgIGlmIChmaWVs
ZC5pc0V4dGVuc2lvbigpKSB7Ci0gICAgICAgIHZlcmlmeUNvbnRhaW5pbmdUeXBlKGZpZWxkKTsK
LSAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnMuaGFzRmllbGQoZmllbGQpOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLmhhc0ZpZWxkKGZpZWxkKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGdldEZpZWxkKGZpbmFsIEZpZWxk
RGVzY3JpcHRvciBmaWVsZCkgewotICAgICAgaWYgKGZpZWxkLmlzRXh0ZW5zaW9uKCkpIHsKLSAg
ICAgICAgdmVyaWZ5Q29udGFpbmluZ1R5cGUoZmllbGQpOwotICAgICAgICBmaW5hbCBPYmplY3Qg
dmFsdWUgPSBleHRlbnNpb25zLmdldEZpZWxkKGZpZWxkKTsKLSAgICAgICAgaWYgKHZhbHVlID09
IG51bGwpIHsKLSAgICAgICAgICBpZiAoZmllbGQuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChm
aWVsZC5nZXRKYXZhVHlwZSgpID09IEZpZWxkRGVzY3JpcHRvci5KYXZhVHlwZS5NRVNTQUdFKSB7
Ci0gICAgICAgICAgICAvLyBMYWNraW5nIGFuIEV4dGVuc2lvblJlZ2lzdHJ5LCB3ZSBoYXZlIG5v
IHdheSB0byBkZXRlcm1pbmUgdGhlCi0gICAgICAgICAgICAvLyBleHRlbnNpb24ncyByZWFsIHR5
cGUsIHNvIHdlIHJldHVybiBhIER5bmFtaWNNZXNzYWdlLgotICAgICAgICAgICAgcmV0dXJuIER5
bmFtaWNNZXNzYWdlLmdldERlZmF1bHRJbnN0YW5jZShmaWVsZC5nZXRNZXNzYWdlVHlwZSgpKTsK
LSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmdldERlZmF1bHRW
YWx1ZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBzdXBlci5n
ZXRGaWVsZChmaWVsZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIGludCBnZXRSZXBlYXRlZEZpZWxkQ291bnQoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxk
KSB7Ci0gICAgICBpZiAoZmllbGQuaXNFeHRlbnNpb24oKSkgewotICAgICAgICB2ZXJpZnlDb250
YWluaW5nVHlwZShmaWVsZCk7Ci0gICAgICAgIHJldHVybiBleHRlbnNpb25zLmdldFJlcGVhdGVk
RmllbGRDb3VudChmaWVsZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gc3VwZXIu
Z2V0UmVwZWF0ZWRGaWVsZENvdW50KGZpZWxkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGdldFJlcGVhdGVkRmllbGQoZmluYWwgRmllbGREZXNj
cmlwdG9yIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBp
bnQgaW5kZXgpIHsKLSAgICAgIGlmIChmaWVsZC5pc0V4dGVuc2lvbigpKSB7Ci0gICAgICAgIHZl
cmlmeUNvbnRhaW5pbmdUeXBlKGZpZWxkKTsKLSAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnMuZ2V0
UmVwZWF0ZWRGaWVsZChmaWVsZCwgaW5kZXgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0
dXJuIHN1cGVyLmdldFJlcGVhdGVkRmllbGQoZmllbGQsIGluZGV4KTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBwcml2YXRlIHZvaWQgdmVyaWZ5Q29udGFpbmluZ1R5cGUoZmluYWwgRmllbGREZXNj
cmlwdG9yIGZpZWxkKSB7Ci0gICAgICBpZiAoZmllbGQuZ2V0Q29udGFpbmluZ1R5cGUoKSAhPSBn
ZXREZXNjcmlwdG9yRm9yVHlwZSgpKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24oCi0gICAgICAgICAgIkZpZWxkRGVzY3JpcHRvciBkb2VzIG5vdCBtYXRjaCBt
ZXNzYWdlIHR5cGUuIik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdlbmVy
YXRlZCBtZXNzYWdlIGJ1aWxkZXJzIGZvciBtZXNzYWdlIHR5cGVzIHRoYXQgY29udGFpbiBleHRl
bnNpb24gcmFuZ2VzCi0gICAqIHN1YmNsYXNzIHRoaXMuCi0gICAqCi0gICAqIDxwPlRoaXMgY2xh
c3MgaW1wbGVtZW50cyB0eXBlLXNhZmUgYWNjZXNzb3JzIGZvciBleHRlbnNpb25zLiAgVGhleQot
ICAgKiBpbXBsZW1lbnQgYWxsIHRoZSBzYW1lIG9wZXJhdGlvbnMgdGhhdCB5b3UgY2FuIGRvIHdp
dGggbm9ybWFsIGZpZWxkcyAtLQotICAgKiBlLmcuICJnZXQiLCAic2V0IiwgYW5kICJhZGQiIC0t
IGJ1dCBmb3IgZXh0ZW5zaW9ucy4gIFRoZSBleHRlbnNpb25zIGFyZQotICAgKiBpZGVudGlmaWVk
IHVzaW5nIGluc3RhbmNlcyBvZiB0aGUgY2xhc3Mge0BsaW5rIEdlbmVyYXRlZEV4dGVuc2lvbn07
IHRoZQotICAgKiBwcm90b2NvbCBjb21waWxlciBnZW5lcmF0ZXMgYSBzdGF0aWMgaW5zdGFuY2Ug
b2YgdGhpcyBjbGFzcyBmb3IgZXZlcnkKLSAgICogZXh0ZW5zaW9uIGluIGl0cyBpbnB1dC4gIFRo
cm91Z2ggdGhlIG1hZ2ljIG9mIGdlbmVyaWNzLCBhbGwgaXMgbWFkZQotICAgKiB0eXBlLXNhZmUu
Ci0gICAqCi0gICAqIDxwPkZvciBleGFtcGxlLCBpbWFnaW5lIHlvdSBoYXZlIHRoZSB7QGNvZGUg
LnByb3RvfSBmaWxlOgotICAgKgotICAgKiA8cHJlPgotICAgKiBvcHRpb24gamF2YV9jbGFzcyA9
ICJNeVByb3RvIjsKLSAgICoKLSAgICogbWVzc2FnZSBGb28gewotICAgKiAgIGV4dGVuc2lvbnMg
MTAwMCB0byBtYXg7Ci0gICAqIH0KLSAgICoKLSAgICogZXh0ZW5kIEZvbyB7Ci0gICAqICAgb3B0
aW9uYWwgaW50MzIgYmFyOwotICAgKiB9Ci0gICAqIDwvcHJlPgotICAgKgotICAgKiA8cD5UaGVu
IHlvdSBtaWdodCB3cml0ZSBjb2RlIGxpa2U6Ci0gICAqCi0gICAqIDxwcmU+Ci0gICAqIE15UHJv
dG8uRm9vIGZvbyA9Ci0gICAqICAgTXlQcm90by5Gb28ubmV3QnVpbGRlcigpCi0gICAqICAgICAu
c2V0RXh0ZW5zaW9uKE15UHJvdG8uYmFyLCAxMjMpCi0gICAqICAgICAuYnVpbGQoKTsKLSAgICog
PC9wcmU+Ci0gICAqCi0gICAqIDxwPlNlZSBhbHNvIHtAbGluayBFeHRlbmRhYmxlTWVzc2FnZX0u
Ci0gICAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGljIGFic3Ry
YWN0IHN0YXRpYyBjbGFzcyBFeHRlbmRhYmxlQnVpbGRlcjwKLSAgICAgICAgTWVzc2FnZVR5cGUg
ZXh0ZW5kcyBFeHRlbmRhYmxlTWVzc2FnZSwKLSAgICAgICAgQnVpbGRlclR5cGUgZXh0ZW5kcyBF
eHRlbmRhYmxlQnVpbGRlcjxNZXNzYWdlVHlwZSwgQnVpbGRlclR5cGU+PgotICAgICAgZXh0ZW5k
cyBCdWlsZGVyPEJ1aWxkZXJUeXBlPgotICAgICAgaW1wbGVtZW50cyBFeHRlbmRhYmxlTWVzc2Fn
ZU9yQnVpbGRlcjxNZXNzYWdlVHlwZT4gewotCi0gICAgcHJpdmF0ZSBGaWVsZFNldDxGaWVsZERl
c2NyaXB0b3I+IGV4dGVuc2lvbnMgPSBGaWVsZFNldC5lbXB0eVNldCgpOwotCi0gICAgcHJvdGVj
dGVkIEV4dGVuZGFibGVCdWlsZGVyKCkge30KLQotICAgIHByb3RlY3RlZCBFeHRlbmRhYmxlQnVp
bGRlcigKLSAgICAgICAgQnVpbGRlclBhcmVudCBwYXJlbnQpIHsKLSAgICAgIHN1cGVyKHBhcmVu
dCk7Ci0gICAgfQotCi0gICAgLy8gRm9yIGltbXV0YWJsZSBtZXNzYWdlIGNvbnZlcnNpb24uCi0g
ICAgdm9pZCBpbnRlcm5hbFNldEV4dGVuc2lvblNldChGaWVsZFNldDxGaWVsZERlc2NyaXB0b3I+
IGV4dGVuc2lvbnMpIHsKLSAgICAgIHRoaXMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJUeXBlIGNsZWFyKCkgewotICAg
ICAgZXh0ZW5zaW9ucyA9IEZpZWxkU2V0LmVtcHR5U2V0KCk7Ci0gICAgICByZXR1cm4gc3VwZXIu
Y2xlYXIoKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGlzIGltcGxlbWVudGVkIGhlcmUgb25seSB0
byB3b3JrIGFyb3VuZCBhbiBhcHBhcmVudCBidWcgaW4gdGhlCi0gICAgLy8gSmF2YSBjb21waWxl
ciBhbmQvb3IgYnVpbGQgc3lzdGVtLiAgU2VlIGJ1ZyAjMTg5ODQ2My4gIFRoZSBtZXJlIHByZXNl
bmNlCi0gICAgLy8gb2YgdGhpcyBjbG9uZSgpIGltcGxlbWVudGF0aW9uIG1ha2VzIGl0IGdvIGF3
YXkuCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJUeXBlIGNsb25lKCkgewotICAg
ICAgcmV0dXJuIHN1cGVyLmNsb25lKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuc3Vy
ZUV4dGVuc2lvbnNJc011dGFibGUoKSB7Ci0gICAgICBpZiAoZXh0ZW5zaW9ucy5pc0ltbXV0YWJs
ZSgpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnMgPSBleHRlbnNpb25zLmNsb25lKCk7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHZlcmlmeUV4dGVuc2lvbkNvbnRhaW5pbmdUeXBl
KAotICAgICAgICBmaW5hbCBFeHRlbnNpb248TWVzc2FnZVR5cGUsID8+IGV4dGVuc2lvbikgewot
ICAgICAgaWYgKGV4dGVuc2lvbi5nZXREZXNjcmlwdG9yKCkuZ2V0Q29udGFpbmluZ1R5cGUoKSAh
PQotICAgICAgICAgIGdldERlc2NyaXB0b3JGb3JUeXBlKCkpIHsKLSAgICAgICAgLy8gVGhpcyBj
YW4gb25seSBoYXBwZW4gaWYgc29tZW9uZSB1c2VzIHVuY2hlY2tlZCBvcGVyYXRpb25zLgotICAg
ICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICJFeHRl
bnNpb24gaXMgZm9yIHR5cGUgXCIiICsKLSAgICAgICAgICBleHRlbnNpb24uZ2V0RGVzY3JpcHRv
cigpLmdldENvbnRhaW5pbmdUeXBlKCkuZ2V0RnVsbE5hbWUoKSArCi0gICAgICAgICAgIlwiIHdo
aWNoIGRvZXMgbm90IG1hdGNoIG1lc3NhZ2UgdHlwZSBcIiIgKwotICAgICAgICAgIGdldERlc2Ny
aXB0b3JGb3JUeXBlKCkuZ2V0RnVsbE5hbWUoKSArICJcIi4iKTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICAvKiogQ2hlY2sgaWYgYSBzaW5ndWxhciBleHRlbnNpb24gaXMgcHJlc2VudC4gKi8KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgPFR5cGU+IGJvb2xlYW4gaGFzRXh0ZW5zaW9u
KGZpbmFsIEV4dGVuc2lvbkxpdGU8TWVzc2FnZVR5cGUsIFR5cGU+IGV4dGVuc2lvbkxpdGUpIHsK
LSAgICAgIEV4dGVuc2lvbjxNZXNzYWdlVHlwZSwgVHlwZT4gZXh0ZW5zaW9uID0gY2hlY2tOb3RM
aXRlKGV4dGVuc2lvbkxpdGUpOwotCi0gICAgICB2ZXJpZnlFeHRlbnNpb25Db250YWluaW5nVHlw
ZShleHRlbnNpb24pOwotICAgICAgcmV0dXJuIGV4dGVuc2lvbnMuaGFzRmllbGQoZXh0ZW5zaW9u
LmdldERlc2NyaXB0b3IoKSk7Ci0gICAgfQotCi0gICAgLyoqIEdldCB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIGluIGEgcmVwZWF0ZWQgZXh0ZW5zaW9uLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBmaW5hbCA8VHlwZT4gaW50IGdldEV4dGVuc2lvbkNvdW50KAotICAgICAgICBmaW5hbCBF
eHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBMaXN0PFR5cGU+PiBleHRlbnNpb25MaXRlKSB7Ci0g
ICAgICBFeHRlbnNpb248TWVzc2FnZVR5cGUsIExpc3Q8VHlwZT4+IGV4dGVuc2lvbiA9IGNoZWNr
Tm90TGl0ZShleHRlbnNpb25MaXRlKTsKLQotICAgICAgdmVyaWZ5RXh0ZW5zaW9uQ29udGFpbmlu
Z1R5cGUoZXh0ZW5zaW9uKTsKLSAgICAgIGZpbmFsIEZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9y
ID0gZXh0ZW5zaW9uLmdldERlc2NyaXB0b3IoKTsKLSAgICAgIHJldHVybiBleHRlbnNpb25zLmdl
dFJlcGVhdGVkRmllbGRDb3VudChkZXNjcmlwdG9yKTsKLSAgICB9Ci0KLSAgICAvKiogR2V0IHRo
ZSB2YWx1ZSBvZiBhbiBleHRlbnNpb24uICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZp
bmFsIDxUeXBlPiBUeXBlIGdldEV4dGVuc2lvbihmaW5hbCBFeHRlbnNpb25MaXRlPE1lc3NhZ2VU
eXBlLCBUeXBlPiBleHRlbnNpb25MaXRlKSB7Ci0gICAgICBFeHRlbnNpb248TWVzc2FnZVR5cGUs
IFR5cGU+IGV4dGVuc2lvbiA9IGNoZWNrTm90TGl0ZShleHRlbnNpb25MaXRlKTsKLQotICAgICAg
dmVyaWZ5RXh0ZW5zaW9uQ29udGFpbmluZ1R5cGUoZXh0ZW5zaW9uKTsKLSAgICAgIEZpZWxkRGVz
Y3JpcHRvciBkZXNjcmlwdG9yID0gZXh0ZW5zaW9uLmdldERlc2NyaXB0b3IoKTsKLSAgICAgIGZp
bmFsIE9iamVjdCB2YWx1ZSA9IGV4dGVuc2lvbnMuZ2V0RmllbGQoZGVzY3JpcHRvcik7Ci0gICAg
ICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci5pc1JlcGVhdGVk
KCkpIHsKLSAgICAgICAgICByZXR1cm4gKFR5cGUpIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwot
ICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZ2V0SmF2YVR5cGUoKSA9PQotICAgICAgICAg
ICAgICAgICAgIEZpZWxkRGVzY3JpcHRvci5KYXZhVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgICAg
cmV0dXJuIChUeXBlKSBleHRlbnNpb24uZ2V0TWVzc2FnZURlZmF1bHRJbnN0YW5jZSgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiAoVHlwZSkgZXh0ZW5zaW9uLmZyb21SZWZs
ZWN0aW9uVHlwZSgKLSAgICAgICAgICAgICAgZGVzY3JpcHRvci5nZXREZWZhdWx0VmFsdWUoKSk7
Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAoVHlwZSkgZXh0ZW5z
aW9uLmZyb21SZWZsZWN0aW9uVHlwZSh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoq
IEdldCBvbmUgZWxlbWVudCBvZiBhIHJlcGVhdGVkIGV4dGVuc2lvbi4gKi8KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgZmluYWwgPFR5cGU+IFR5cGUgZ2V0RXh0ZW5zaW9uKAotICAgICAgICBm
aW5hbCBFeHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBMaXN0PFR5cGU+PiBleHRlbnNpb25MaXRl
LCBmaW5hbCBpbnQgaW5kZXgpIHsKLSAgICAgIEV4dGVuc2lvbjxNZXNzYWdlVHlwZSwgTGlzdDxU
eXBlPj4gZXh0ZW5zaW9uID0gY2hlY2tOb3RMaXRlKGV4dGVuc2lvbkxpdGUpOwotCi0gICAgICB2
ZXJpZnlFeHRlbnNpb25Db250YWluaW5nVHlwZShleHRlbnNpb24pOwotICAgICAgRmllbGREZXNj
cmlwdG9yIGRlc2NyaXB0b3IgPSBleHRlbnNpb24uZ2V0RGVzY3JpcHRvcigpOwotICAgICAgcmV0
dXJuIChUeXBlKSBleHRlbnNpb24uc2luZ3VsYXJGcm9tUmVmbGVjdGlvblR5cGUoCi0gICAgICAg
ICAgZXh0ZW5zaW9ucy5nZXRSZXBlYXRlZEZpZWxkKGRlc2NyaXB0b3IsIGluZGV4KSk7Ci0gICAg
fQotCi0gICAgLyoqIFNldCB0aGUgdmFsdWUgb2YgYW4gZXh0ZW5zaW9uLiAqLwotICAgIHB1Ymxp
YyBmaW5hbCA8VHlwZT4gQnVpbGRlclR5cGUgc2V0RXh0ZW5zaW9uKAotICAgICAgICBmaW5hbCBF
eHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBUeXBlPiBleHRlbnNpb25MaXRlLAotICAgICAgICBm
aW5hbCBUeXBlIHZhbHVlKSB7Ci0gICAgICBFeHRlbnNpb248TWVzc2FnZVR5cGUsIFR5cGU+IGV4
dGVuc2lvbiA9IGNoZWNrTm90TGl0ZShleHRlbnNpb25MaXRlKTsKLQotICAgICAgdmVyaWZ5RXh0
ZW5zaW9uQ29udGFpbmluZ1R5cGUoZXh0ZW5zaW9uKTsKLSAgICAgIGVuc3VyZUV4dGVuc2lvbnNJ
c011dGFibGUoKTsKLSAgICAgIGZpbmFsIEZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZXh0
ZW5zaW9uLmdldERlc2NyaXB0b3IoKTsKLSAgICAgIGV4dGVuc2lvbnMuc2V0RmllbGQoZGVzY3Jp
cHRvciwgZXh0ZW5zaW9uLnRvUmVmbGVjdGlvblR5cGUodmFsdWUpKTsKLSAgICAgIG9uQ2hhbmdl
ZCgpOwotICAgICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgdGhpczsKLSAgICB9Ci0KLSAgICAvKiog
U2V0IHRoZSB2YWx1ZSBvZiBvbmUgZWxlbWVudCBvZiBhIHJlcGVhdGVkIGV4dGVuc2lvbi4gKi8K
LSAgICBwdWJsaWMgZmluYWwgPFR5cGU+IEJ1aWxkZXJUeXBlIHNldEV4dGVuc2lvbigKLSAgICAg
ICAgZmluYWwgRXh0ZW5zaW9uTGl0ZTxNZXNzYWdlVHlwZSwgTGlzdDxUeXBlPj4gZXh0ZW5zaW9u
TGl0ZSwKLSAgICAgICAgZmluYWwgaW50IGluZGV4LCBmaW5hbCBUeXBlIHZhbHVlKSB7Ci0gICAg
ICBFeHRlbnNpb248TWVzc2FnZVR5cGUsIExpc3Q8VHlwZT4+IGV4dGVuc2lvbiA9IGNoZWNrTm90
TGl0ZShleHRlbnNpb25MaXRlKTsKLQotICAgICAgdmVyaWZ5RXh0ZW5zaW9uQ29udGFpbmluZ1R5
cGUoZXh0ZW5zaW9uKTsKLSAgICAgIGVuc3VyZUV4dGVuc2lvbnNJc011dGFibGUoKTsKLSAgICAg
IGZpbmFsIEZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZXh0ZW5zaW9uLmdldERlc2NyaXB0
b3IoKTsKLSAgICAgIGV4dGVuc2lvbnMuc2V0UmVwZWF0ZWRGaWVsZCgKLSAgICAgICAgZGVzY3Jp
cHRvciwgaW5kZXgsCi0gICAgICAgIGV4dGVuc2lvbi5zaW5ndWxhclRvUmVmbGVjdGlvblR5cGUo
dmFsdWUpKTsKLSAgICAgIG9uQ2hhbmdlZCgpOwotICAgICAgcmV0dXJuIChCdWlsZGVyVHlwZSkg
dGhpczsKLSAgICB9Ci0KLSAgICAvKiogQXBwZW5kIGEgdmFsdWUgdG8gYSByZXBlYXRlZCBleHRl
bnNpb24uICovCi0gICAgcHVibGljIGZpbmFsIDxUeXBlPiBCdWlsZGVyVHlwZSBhZGRFeHRlbnNp
b24oCi0gICAgICAgIGZpbmFsIEV4dGVuc2lvbkxpdGU8TWVzc2FnZVR5cGUsIExpc3Q8VHlwZT4+
IGV4dGVuc2lvbkxpdGUsCi0gICAgICAgIGZpbmFsIFR5cGUgdmFsdWUpIHsKLSAgICAgIEV4dGVu
c2lvbjxNZXNzYWdlVHlwZSwgTGlzdDxUeXBlPj4gZXh0ZW5zaW9uID0gY2hlY2tOb3RMaXRlKGV4
dGVuc2lvbkxpdGUpOwotCi0gICAgICB2ZXJpZnlFeHRlbnNpb25Db250YWluaW5nVHlwZShleHRl
bnNpb24pOwotICAgICAgZW5zdXJlRXh0ZW5zaW9uc0lzTXV0YWJsZSgpOwotICAgICAgZmluYWwg
RmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBleHRlbnNpb24uZ2V0RGVzY3JpcHRvcigpOwot
ICAgICAgZXh0ZW5zaW9ucy5hZGRSZXBlYXRlZEZpZWxkKAotICAgICAgICAgIGRlc2NyaXB0b3Is
IGV4dGVuc2lvbi5zaW5ndWxhclRvUmVmbGVjdGlvblR5cGUodmFsdWUpKTsKLSAgICAgIG9uQ2hh
bmdlZCgpOwotICAgICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgdGhpczsKLSAgICB9Ci0KLSAgICAv
KiogQ2xlYXIgYW4gZXh0ZW5zaW9uLiAqLwotICAgIHB1YmxpYyBmaW5hbCA8VHlwZT4gQnVpbGRl
clR5cGUgY2xlYXJFeHRlbnNpb24oCi0gICAgICAgIGZpbmFsIEV4dGVuc2lvbkxpdGU8TWVzc2Fn
ZVR5cGUsID8+IGV4dGVuc2lvbkxpdGUpIHsKLSAgICAgIEV4dGVuc2lvbjxNZXNzYWdlVHlwZSwg
Pz4gZXh0ZW5zaW9uID0gY2hlY2tOb3RMaXRlKGV4dGVuc2lvbkxpdGUpOwotCi0gICAgICB2ZXJp
ZnlFeHRlbnNpb25Db250YWluaW5nVHlwZShleHRlbnNpb24pOwotICAgICAgZW5zdXJlRXh0ZW5z
aW9uc0lzTXV0YWJsZSgpOwotICAgICAgZXh0ZW5zaW9ucy5jbGVhckZpZWxkKGV4dGVuc2lvbi5n
ZXREZXNjcmlwdG9yKCkpOwotICAgICAgb25DaGFuZ2VkKCk7Ci0gICAgICByZXR1cm4gKEJ1aWxk
ZXJUeXBlKSB0aGlzOwotICAgIH0KLQotICAgIC8qKiBDYWxsZWQgYnkgc3ViY2xhc3NlcyB0byBj
aGVjayBpZiBhbGwgZXh0ZW5zaW9ucyBhcmUgaW5pdGlhbGl6ZWQuICovCi0gICAgcHJvdGVjdGVk
IGJvb2xlYW4gZXh0ZW5zaW9uc0FyZUluaXRpYWxpemVkKCkgewotICAgICAgcmV0dXJuIGV4dGVu
c2lvbnMuaXNJbml0aWFsaXplZCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBi
eSB0aGUgYnVpbGQgY29kZSBwYXRoIHRvIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGV4dGVuc2lvbnMg
Zm9yCi0gICAgICogYnVpbGRpbmcgdGhlIG1lc3NhZ2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBG
aWVsZFNldDxGaWVsZERlc2NyaXB0b3I+IGJ1aWxkRXh0ZW5zaW9ucygpIHsKLSAgICAgIGV4dGVu
c2lvbnMubWFrZUltbXV0YWJsZSgpOwotICAgICAgcmV0dXJuIGV4dGVuc2lvbnM7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpIHsKLSAg
ICAgIHJldHVybiBzdXBlci5pc0luaXRpYWxpemVkKCkgJiYgZXh0ZW5zaW9uc0FyZUluaXRpYWxp
emVkKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IHN1YmNsYXNzZXMgdG8g
cGFyc2UgYW4gdW5rbm93biBmaWVsZCBvciBhbiBleHRlbnNpb24uCi0gICAgICogQHJldHVybiB7
QGNvZGUgdHJ1ZX0gdW5sZXNzIHRoZSB0YWcgaXMgYW4gZW5kLWdyb3VwIHRhZy4KLSAgICAgKi8K
LSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBwYXJzZVVua25vd25GaWVsZCgK
LSAgICAgICAgZmluYWwgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwKLSAgICAgICAgZmluYWwgVW5r
bm93bkZpZWxkU2V0LkJ1aWxkZXIgdW5rbm93bkZpZWxkcywKLSAgICAgICAgZmluYWwgRXh0ZW5z
aW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5LAotICAgICAgICBmaW5hbCBpbnQgdGFn
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgcmV0dXJuIE1lc3NhZ2VSZWZsZWN0aW9uLm1l
cmdlRmllbGRGcm9tKAotICAgICAgICAgIGlucHV0LCB1bmtub3duRmllbGRzLCBleHRlbnNpb25S
ZWdpc3RyeSwgZ2V0RGVzY3JpcHRvckZvclR5cGUoKSwKLSAgICAgICAgICBuZXcgTWVzc2FnZVJl
ZmxlY3Rpb24uQnVpbGRlckFkYXB0ZXIodGhpcyksIHRhZyk7Ci0gICAgfQotCi0gICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgLy8gUmVmbGVjdGlvbgotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hcDxG
aWVsZERlc2NyaXB0b3IsIE9iamVjdD4gZ2V0QWxsRmllbGRzKCkgewotICAgICAgZmluYWwgTWFw
PEZpZWxkRGVzY3JpcHRvciwgT2JqZWN0PiByZXN1bHQgPSBzdXBlci5nZXRBbGxGaWVsZHNNdXRh
YmxlKCk7Ci0gICAgICByZXN1bHQucHV0QWxsKGV4dGVuc2lvbnMuZ2V0QWxsRmllbGRzKCkpOwot
ICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChyZXN1bHQpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgZ2V0RmllbGQoZmluYWwgRmllbGRE
ZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICBpZiAoZmllbGQuaXNFeHRlbnNpb24oKSkgewotICAg
ICAgICB2ZXJpZnlDb250YWluaW5nVHlwZShmaWVsZCk7Ci0gICAgICAgIGZpbmFsIE9iamVjdCB2
YWx1ZSA9IGV4dGVuc2lvbnMuZ2V0RmllbGQoZmllbGQpOwotICAgICAgICBpZiAodmFsdWUgPT0g
bnVsbCkgewotICAgICAgICAgIGlmIChmaWVsZC5nZXRKYXZhVHlwZSgpID09IEZpZWxkRGVzY3Jp
cHRvci5KYXZhVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgICAgICAvLyBMYWNraW5nIGFuIEV4dGVu
c2lvblJlZ2lzdHJ5LCB3ZSBoYXZlIG5vIHdheSB0byBkZXRlcm1pbmUgdGhlCi0gICAgICAgICAg
ICAvLyBleHRlbnNpb24ncyByZWFsIHR5cGUsIHNvIHdlIHJldHVybiBhIER5bmFtaWNNZXNzYWdl
LgotICAgICAgICAgICAgcmV0dXJuIER5bmFtaWNNZXNzYWdlLmdldERlZmF1bHRJbnN0YW5jZShm
aWVsZC5nZXRNZXNzYWdlVHlwZSgpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cmV0dXJuIGZpZWxkLmdldERlZmF1bHRWYWx1ZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJldHVybiBzdXBlci5nZXRGaWVsZChmaWVsZCk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRSZXBlYXRlZEZpZWxkQ291bnQoZmlu
YWwgRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICBpZiAoZmllbGQuaXNFeHRlbnNpb24o
KSkgewotICAgICAgICB2ZXJpZnlDb250YWluaW5nVHlwZShmaWVsZCk7Ci0gICAgICAgIHJldHVy
biBleHRlbnNpb25zLmdldFJlcGVhdGVkRmllbGRDb3VudChmaWVsZCk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGZpZWxkKTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGdldFJlcGVh
dGVkRmllbGQoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaW5kZXgpIHsKLSAgICAgIGlmIChmaWVsZC5pc0V4
dGVuc2lvbigpKSB7Ci0gICAgICAgIHZlcmlmeUNvbnRhaW5pbmdUeXBlKGZpZWxkKTsKLSAgICAg
ICAgcmV0dXJuIGV4dGVuc2lvbnMuZ2V0UmVwZWF0ZWRGaWVsZChmaWVsZCwgaW5kZXgpOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLmdldFJlcGVhdGVkRmllbGQoZmllbGQs
IGluZGV4KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9v
bGVhbiBoYXNGaWVsZChmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQpIHsKLSAgICAgIGlmIChm
aWVsZC5pc0V4dGVuc2lvbigpKSB7Ci0gICAgICAgIHZlcmlmeUNvbnRhaW5pbmdUeXBlKGZpZWxk
KTsKLSAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnMuaGFzRmllbGQoZmllbGQpOwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLmhhc0ZpZWxkKGZpZWxkKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlclR5cGUgc2V0RmllbGQoZmlu
YWwgRmllbGREZXNjcmlwdG9yIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaW5hbCBPYmplY3QgdmFsdWUpIHsKLSAgICAgIGlmIChmaWVsZC5pc0V4dGVuc2lvbigpKSB7
Ci0gICAgICAgIHZlcmlmeUNvbnRhaW5pbmdUeXBlKGZpZWxkKTsKLSAgICAgICAgZW5zdXJlRXh0
ZW5zaW9uc0lzTXV0YWJsZSgpOwotICAgICAgICBleHRlbnNpb25zLnNldEZpZWxkKGZpZWxkLCB2
YWx1ZSk7Ci0gICAgICAgIG9uQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gKEJ1aWxkZXJUeXBl
KSB0aGlzOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLnNldEZpZWxkKGZp
ZWxkLCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IEJ1aWxkZXJUeXBlIGNsZWFyRmllbGQoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0g
ICAgICBpZiAoZmllbGQuaXNFeHRlbnNpb24oKSkgewotICAgICAgICB2ZXJpZnlDb250YWluaW5n
VHlwZShmaWVsZCk7Ci0gICAgICAgIGVuc3VyZUV4dGVuc2lvbnNJc011dGFibGUoKTsKLSAgICAg
ICAgZXh0ZW5zaW9ucy5jbGVhckZpZWxkKGZpZWxkKTsKLSAgICAgICAgb25DaGFuZ2VkKCk7Ci0g
ICAgICAgIHJldHVybiAoQnVpbGRlclR5cGUpIHRoaXM7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICByZXR1cm4gc3VwZXIuY2xlYXJGaWVsZChmaWVsZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXJUeXBlIHNldFJlcGVhdGVkRmllbGQoZmluYWwg
RmllbGREZXNjcmlwdG9yIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbmFsIGludCBpbmRleCwgZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICBpZiAo
ZmllbGQuaXNFeHRlbnNpb24oKSkgewotICAgICAgICB2ZXJpZnlDb250YWluaW5nVHlwZShmaWVs
ZCk7Ci0gICAgICAgIGVuc3VyZUV4dGVuc2lvbnNJc011dGFibGUoKTsKLSAgICAgICAgZXh0ZW5z
aW9ucy5zZXRSZXBlYXRlZEZpZWxkKGZpZWxkLCBpbmRleCwgdmFsdWUpOwotICAgICAgICBvbkNo
YW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgdGhpczsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHJldHVybiBzdXBlci5zZXRSZXBlYXRlZEZpZWxkKGZpZWxkLCBpbmRleCwg
dmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWls
ZGVyVHlwZSBhZGRSZXBlYXRlZEZpZWxkKGZpbmFsIEZpZWxkRGVzY3JpcHRvciBmaWVsZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgdmFsdWUp
IHsKLSAgICAgIGlmIChmaWVsZC5pc0V4dGVuc2lvbigpKSB7Ci0gICAgICAgIHZlcmlmeUNvbnRh
aW5pbmdUeXBlKGZpZWxkKTsKLSAgICAgICAgZW5zdXJlRXh0ZW5zaW9uc0lzTXV0YWJsZSgpOwot
ICAgICAgICBleHRlbnNpb25zLmFkZFJlcGVhdGVkRmllbGQoZmllbGQsIHZhbHVlKTsKLSAgICAg
ICAgb25DaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybiAoQnVpbGRlclR5cGUpIHRoaXM7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICByZXR1cm4gc3VwZXIuYWRkUmVwZWF0ZWRGaWVsZChmaWVsZCwg
dmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIG1lcmdl
RXh0ZW5zaW9uRmllbGRzKGZpbmFsIEV4dGVuZGFibGVNZXNzYWdlIG90aGVyKSB7Ci0gICAgICBl
bnN1cmVFeHRlbnNpb25zSXNNdXRhYmxlKCk7Ci0gICAgICBleHRlbnNpb25zLm1lcmdlRnJvbShv
dGhlci5leHRlbnNpb25zKTsKLSAgICAgIG9uQ2hhbmdlZCgpOwotICAgIH0KLQotICAgIHByaXZh
dGUgdm9pZCB2ZXJpZnlDb250YWluaW5nVHlwZShmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQp
IHsKLSAgICAgIGlmIChmaWVsZC5nZXRDb250YWluaW5nVHlwZSgpICE9IGdldERlc2NyaXB0b3JG
b3JUeXBlKCkpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigK
LSAgICAgICAgICAiRmllbGREZXNjcmlwdG9yIGRvZXMgbm90IG1hdGNoIG1lc3NhZ2UgdHlwZS4i
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8qKgotICAgKiBH
ZXRzIHRoZSBkZXNjcmlwdG9yIGZvciBhbiBleHRlbnNpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBk
ZXBlbmRzIG9uIHdoZXRoZXIKLSAgICogdGhlIGV4dGVuc2lvbiBpcyBzY29wZWQgaW4gdGhlIHRv
cCBsZXZlbCBvZiBhIGZpbGUgb3Igc2NvcGVkIGluIGEgTWVzc2FnZS4KLSAgICovCi0gIHN0YXRp
YyBpbnRlcmZhY2UgRXh0ZW5zaW9uRGVzY3JpcHRvclJldHJpZXZlciB7Ci0gICAgRmllbGREZXNj
cmlwdG9yIGdldERlc2NyaXB0b3IoKTsKLSAgfQotCi0gIC8qKiBGb3IgdXNlIGJ5IGdlbmVyYXRl
ZCBjb2RlIG9ubHkuICovCi0gIHB1YmxpYyBzdGF0aWMgPENvbnRhaW5pbmdUeXBlIGV4dGVuZHMg
TWVzc2FnZSwgVHlwZT4KLSAgICAgIEdlbmVyYXRlZEV4dGVuc2lvbjxDb250YWluaW5nVHlwZSwg
VHlwZT4KLSAgICAgIG5ld01lc3NhZ2VTY29wZWRHZW5lcmF0ZWRFeHRlbnNpb24oZmluYWwgTWVz
c2FnZSBzY29wZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlu
YWwgaW50IGRlc2NyaXB0b3JJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmluYWwgQ2xhc3Mgc2luZ3VsYXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5hbCBNZXNzYWdlIGRlZmF1bHRJbnN0YW5jZSkgewotICAg
IC8vIEZvciBleHRlbnNpb25zIHNjb3BlZCB3aXRoaW4gYSBNZXNzYWdlLCB3ZSB1c2UgdGhlIE1l
c3NhZ2UgdG8gcmVzb2x2ZQotICAgIC8vIHRoZSBvdXRlciBjbGFzcydzIGRlc2NyaXB0b3IsIGZy
b20gd2hpY2ggdGhlIGV4dGVuc2lvbiBkZXNjcmlwdG9yIGlzCi0gICAgLy8gb2J0YWluZWQuCi0g
ICAgcmV0dXJuIG5ldyBHZW5lcmF0ZWRFeHRlbnNpb248Q29udGFpbmluZ1R5cGUsIFR5cGU+KAot
ICAgICAgICBuZXcgQ2FjaGVkRGVzY3JpcHRvclJldHJpZXZlcigpIHsKLSAgICAgICAgICBAT3Zl
cnJpZGUKLSAgICAgICAgICBwdWJsaWMgRmllbGREZXNjcmlwdG9yIGxvYWREZXNjcmlwdG9yKCkg
ewotICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmdldERlc2NyaXB0b3JGb3JUeXBlKCkuZ2V0RXh0
ZW5zaW9ucygpLmdldChkZXNjcmlwdG9ySW5kZXgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSwK
LSAgICAgICAgc2luZ3VsYXJUeXBlLAotICAgICAgICBkZWZhdWx0SW5zdGFuY2UsCi0gICAgICAg
IEV4dGVuc2lvbi5FeHRlbnNpb25UeXBlLklNTVVUQUJMRSk7Ci0gIH0KLQotICAvKiogRm9yIHVz
ZSBieSBnZW5lcmF0ZWQgY29kZSBvbmx5LiAqLwotICBwdWJsaWMgc3RhdGljIDxDb250YWluaW5n
VHlwZSBleHRlbmRzIE1lc3NhZ2UsIFR5cGU+Ci0gICAgIEdlbmVyYXRlZEV4dGVuc2lvbjxDb250
YWluaW5nVHlwZSwgVHlwZT4KLSAgICAgbmV3RmlsZVNjb3BlZEdlbmVyYXRlZEV4dGVuc2lvbihm
aW5hbCBDbGFzcyBzaW5ndWxhclR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmluYWwgTWVzc2FnZSBkZWZhdWx0SW5zdGFuY2UpIHsKLSAgICAvLyBGb3IgZXh0ZW5z
aW9ucyBzY29wZWQgd2l0aGluIGEgZmlsZSwgd2UgcmVseSBvbiB0aGUgb3V0ZXIgY2xhc3Mncwot
ICAgIC8vIHN0YXRpYyBpbml0aWFsaXplciB0byBjYWxsIGludGVybmFsSW5pdCgpIG9uIHRoZSBl
eHRlbnNpb24gd2hlbiB0aGUKLSAgICAvLyBkZXNjcmlwdG9yIGlzIGF2YWlsYWJsZS4KLSAgICBy
ZXR1cm4gbmV3IEdlbmVyYXRlZEV4dGVuc2lvbjxDb250YWluaW5nVHlwZSwgVHlwZT4oCi0gICAg
ICAgIG51bGwsICAvLyBFeHRlbnNpb25EZXNjcmlwdG9yUmV0cmlldmVyIGlzIGluaXRpYWxpemVk
IGluIGludGVybmFsSW5pdCgpOwotICAgICAgICBzaW5ndWxhclR5cGUsCi0gICAgICAgIGRlZmF1
bHRJbnN0YW5jZSwKLSAgICAgICAgRXh0ZW5zaW9uLkV4dGVuc2lvblR5cGUuSU1NVVRBQkxFKTsK
LSAgfQotCi0gIHByaXZhdGUgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIENhY2hlZERlc2NyaXB0b3JS
ZXRyaWV2ZXIKLSAgICAgIGltcGxlbWVudHMgRXh0ZW5zaW9uRGVzY3JpcHRvclJldHJpZXZlciB7
Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBGaWVsZERlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICBw
cm90ZWN0ZWQgYWJzdHJhY3QgRmllbGREZXNjcmlwdG9yIGxvYWREZXNjcmlwdG9yKCk7Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmllbGREZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKSB7
Ci0gICAgICBpZiAoZGVzY3JpcHRvciA9PSBudWxsKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAo
dGhpcykgewotICAgICAgICAgIGlmIChkZXNjcmlwdG9yID09IG51bGwpIHsKLSAgICAgICAgICAg
IGRlc2NyaXB0b3IgPSBsb2FkRGVzY3JpcHRvcigpOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIFVzZWQgaW4gcHJvdG8xIGdlbmVyYXRlZCBjb2RlIG9ubHkuCi0gICAqCi0gICAqIEFmdGVy
IGVuYWJsaW5nIGJyaWRnZSwgd2UgY2FuIGRlZmluZSBwcm90bzIgZXh0ZW5zaW9ucyAodGhlIGV4
dGVuZGVkIHR5cGUKLSAgICogaXMgYSBwcm90bzIgbXV0YWJsZSBtZXNzYWdlKSBpbiBhIHByb3Rv
MSAucHJvdG8gZmlsZS4gRm9yIHRoZXNlIGV4dGVuc2lvbnMKLSAgICogd2Ugc2hvdWxkIGdlbmVy
YXRlIHByb3RvMiBHZW5lcmF0ZWRFeHRlbnNpb25zLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyA8
Q29udGFpbmluZ1R5cGUgZXh0ZW5kcyBNZXNzYWdlLCBUeXBlPgotICAgICAgR2VuZXJhdGVkRXh0
ZW5zaW9uPENvbnRhaW5pbmdUeXBlLCBUeXBlPgotICAgICAgbmV3TWVzc2FnZVNjb3BlZEdlbmVy
YXRlZEV4dGVuc2lvbigKLSAgICAgICAgICBmaW5hbCBNZXNzYWdlIHNjb3BlLCBmaW5hbCBTdHJp
bmcgbmFtZSwKLSAgICAgICAgICBmaW5hbCBDbGFzcyBzaW5ndWxhclR5cGUsIGZpbmFsIE1lc3Nh
Z2UgZGVmYXVsdEluc3RhbmNlKSB7Ci0gICAgLy8gRm9yIGV4dGVuc2lvbnMgc2NvcGVkIHdpdGhp
biBhIE1lc3NhZ2UsIHdlIHVzZSB0aGUgTWVzc2FnZSB0byByZXNvbHZlCi0gICAgLy8gdGhlIG91
dGVyIGNsYXNzJ3MgZGVzY3JpcHRvciwgZnJvbSB3aGljaCB0aGUgZXh0ZW5zaW9uIGRlc2NyaXB0
b3IgaXMKLSAgICAvLyBvYnRhaW5lZC4KLSAgICByZXR1cm4gbmV3IEdlbmVyYXRlZEV4dGVuc2lv
bjxDb250YWluaW5nVHlwZSwgVHlwZT4oCi0gICAgICAgIG5ldyBDYWNoZWREZXNjcmlwdG9yUmV0
cmlldmVyKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHByb3RlY3RlZCBGaWVs
ZERlc2NyaXB0b3IgbG9hZERlc2NyaXB0b3IoKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NvcGUu
Z2V0RGVzY3JpcHRvckZvclR5cGUoKS5maW5kRmllbGRCeU5hbWUobmFtZSk7Ci0gICAgICAgICAg
fQotICAgICAgICB9LAotICAgICAgICBzaW5ndWxhclR5cGUsCi0gICAgICAgIGRlZmF1bHRJbnN0
YW5jZSwKLSAgICAgICAgRXh0ZW5zaW9uLkV4dGVuc2lvblR5cGUuTVVUQUJMRSk7Ci0gIH0KLQot
ICAvKioKLSAgICogVXNlZCBpbiBwcm90bzEgZ2VuZXJhdGVkIGNvZGUgb25seS4KLSAgICoKLSAg
ICogQWZ0ZXIgZW5hYmxpbmcgYnJpZGdlLCB3ZSBjYW4gZGVmaW5lIHByb3RvMiBleHRlbnNpb25z
ICh0aGUgZXh0ZW5kZWQgdHlwZQotICAgKiBpcyBhIHByb3RvMiBtdXRhYmxlIG1lc3NhZ2UpIGlu
IGEgcHJvdG8xIC5wcm90byBmaWxlLiBGb3IgdGhlc2UgZXh0ZW5zaW9ucwotICAgKiB3ZSBzaG91
bGQgZ2VuZXJhdGUgcHJvdG8yIEdlbmVyYXRlZEV4dGVuc2lvbnMuCi0gICAqLwotICBwdWJsaWMg
c3RhdGljIDxDb250YWluaW5nVHlwZSBleHRlbmRzIE1lc3NhZ2UsIFR5cGU+Ci0gICAgIEdlbmVy
YXRlZEV4dGVuc2lvbjxDb250YWluaW5nVHlwZSwgVHlwZT4KLSAgICAgbmV3RmlsZVNjb3BlZEdl
bmVyYXRlZEV4dGVuc2lvbigKLSAgICAgICAgIGZpbmFsIENsYXNzIHNpbmd1bGFyVHlwZSwgZmlu
YWwgTWVzc2FnZSBkZWZhdWx0SW5zdGFuY2UsCi0gICAgICAgICBmaW5hbCBTdHJpbmcgZGVzY3Jp
cHRvck91dGVyQ2xhc3MsIGZpbmFsIFN0cmluZyBleHRlbnNpb25OYW1lKSB7Ci0gICAgLy8gRm9y
IGV4dGVuc2lvbnMgc2NvcGVkIHdpdGhpbiBhIGZpbGUsIHdlIGxvYWQgdGhlIGRlc2NyaXB0b3Ig
b3V0ZXIKLSAgICAvLyBjbGFzcyBhbmQgcmVseSBvbiBpdCB0byBnZXQgdGhlIEZpbGVEZXNjcmlw
dG9yIHdoaWNoIHRoZW4gY2FuIGJlCi0gICAgLy8gdXNlZCB0byBvYnRhaW4gdGhlIGV4dGVuc2lv
bidzIEZpZWxkRGVzY3JpcHRvci4KLSAgICByZXR1cm4gbmV3IEdlbmVyYXRlZEV4dGVuc2lvbjxD
b250YWluaW5nVHlwZSwgVHlwZT4oCi0gICAgICAgIG5ldyBDYWNoZWREZXNjcmlwdG9yUmV0cmll
dmVyKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHByb3RlY3RlZCBGaWVsZERl
c2NyaXB0b3IgbG9hZERlc2NyaXB0b3IoKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAg
ICAgICBDbGFzcyBjbGF6eiA9IHNpbmd1bGFyVHlwZS5nZXRDbGFzc0xvYWRlcigpLmxvYWRDbGFz
cyhkZXNjcmlwdG9yT3V0ZXJDbGFzcyk7Ci0gICAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yIGZp
bGUgPSAoRmlsZURlc2NyaXB0b3IpIGNsYXp6LmdldEZpZWxkKCJkZXNjcmlwdG9yIikuZ2V0KG51
bGwpOwotICAgICAgICAgICAgICByZXR1cm4gZmlsZS5maW5kRXh0ZW5zaW9uQnlOYW1lKGV4dGVu
c2lvbk5hbWUpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAg
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAiQ2Fu
bm90IGxvYWQgZGVzY3JpcHRvcnM6ICIKLSAgICAgICAgICAgICAgICAgICAgICArIGRlc2NyaXB0
b3JPdXRlckNsYXNzCi0gICAgICAgICAgICAgICAgICAgICAgKyAiIGlzIG5vdCBhIHZhbGlkIGRl
c2NyaXB0b3IgY2xhc3MgbmFtZSIsCi0gICAgICAgICAgICAgICAgICBlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIHNpbmd1bGFyVHlwZSwKLSAgICAg
ICAgZGVmYXVsdEluc3RhbmNlLAotICAgICAgICBFeHRlbnNpb24uRXh0ZW5zaW9uVHlwZS5NVVRB
QkxFKTsKLSAgfQotCi0gIC8qKgotICAgKiBUeXBlIHVzZWQgdG8gcmVwcmVzZW50IGdlbmVyYXRl
ZCBleHRlbnNpb25zLiAgVGhlIHByb3RvY29sIGNvbXBpbGVyCi0gICAqIGdlbmVyYXRlcyBhIHN0
YXRpYyBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBmb3IgZWFjaCBleHRlbnNpb24u
Ci0gICAqCi0gICAqIDxwPkZvciBleGFtcGxlLCBpbWFnaW5lIHlvdSBoYXZlIHRoZSB7QGNvZGUg
LnByb3RvfSBmaWxlOgotICAgKgotICAgKiA8cHJlPgotICAgKiBvcHRpb24gamF2YV9jbGFzcyA9
ICJNeVByb3RvIjsKLSAgICoKLSAgICogbWVzc2FnZSBGb28gewotICAgKiAgIGV4dGVuc2lvbnMg
MTAwMCB0byBtYXg7Ci0gICAqIH0KLSAgICoKLSAgICogZXh0ZW5kIEZvbyB7Ci0gICAqICAgb3B0
aW9uYWwgaW50MzIgYmFyOwotICAgKiB9Ci0gICAqIDwvcHJlPgotICAgKgotICAgKiA8cD5UaGVu
LCB7QGNvZGUgTXlQcm90by5Gb28uYmFyfSBoYXMgdHlwZQotICAgKiB7QGNvZGUgR2VuZXJhdGVk
RXh0ZW5zaW9uPE15UHJvdG8uRm9vLCBJbnRlZ2VyPn0uCi0gICAqCi0gICAqIDxwPkluIGdlbmVy
YWwsIHVzZXJzIHNob3VsZCBpZ25vcmUgdGhlIGRldGFpbHMgb2YgdGhpcyB0eXBlLCBhbmQgc2lt
cGx5IHVzZQotICAgKiB0aGVzZSBzdGF0aWMgc2luZ2xldG9ucyBhcyBwYXJhbWV0ZXJzIHRvIHRo
ZSBleHRlbnNpb24gYWNjZXNzb3JzIGRlZmluZWQKLSAgICogaW4ge0BsaW5rIEV4dGVuZGFibGVN
ZXNzYWdlfSBhbmQge0BsaW5rIEV4dGVuZGFibGVCdWlsZGVyfS4KLSAgICovCi0gIHB1YmxpYyBz
dGF0aWMgY2xhc3MgR2VuZXJhdGVkRXh0ZW5zaW9uPAotICAgICAgQ29udGFpbmluZ1R5cGUgZXh0
ZW5kcyBNZXNzYWdlLCBUeXBlPiBleHRlbmRzCi0gICAgICBFeHRlbnNpb248Q29udGFpbmluZ1R5
cGUsIFR5cGU+IHsKLSAgICAvLyBUT0RPKGtlbnRvbik6ICBGaW5kIHdheXMgdG8gYXZvaWQgdXNp
bmcgSmF2YSByZWZsZWN0aW9uIHdpdGhpbiB0aGlzCi0gICAgLy8gICBjbGFzcy4gIEFsc28gdHJ5
IHRvIGF2b2lkIHN1cHByZXNzaW5nIHVuY2hlY2tlZCB3YXJuaW5ncy4KLQotICAgIC8vIFdlIGNh
bid0IGFsd2F5cyBpbml0aWFsaXplIHRoZSBkZXNjcmlwdG9yIG9mIGEgR2VuZXJhdGVkRXh0ZW5z
aW9uIHdoZW4KLSAgICAvLyB3ZSBmaXJzdCBjb25zdHJ1Y3QgaXQgZHVlIHRvIGluaXRpYWxpemF0
aW9uIG9yZGVyIGRpZmZpY3VsdGllcyAobmFtZWx5LAotICAgIC8vIHRoZSBkZXNjcmlwdG9yIG1h
eSBub3QgaGF2ZSBiZWVuIGNvbnN0cnVjdGVkIHlldCwgc2luY2UgaXQgaXMgb2Z0ZW4KLSAgICAv
LyBjb25zdHJ1Y3RlZCBieSB0aGUgaW5pdGlhbGl6ZXIgb2YgYSBzZXBhcmF0ZSBtb2R1bGUpLgot
ICAgIC8vCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgbmVzdGVkIGV4dGVuc2lvbnMsIHdlIGluaXRp
YWxpemUgdGhlCi0gICAgLy8gRXh0ZW5zaW9uRGVzY3JpcHRvclJldHJpZXZlciB3aXRoIGFuIGlu
c3RhbmNlIHRoYXQgdXNlcyB0aGUgc2NvcGluZwotICAgIC8vIE1lc3NhZ2UncyBkZWZhdWx0IGlu
c3RhbmNlIHRvIHJldHJpZXZlIHRoZSBleHRlbnNpb24ncyBkZXNjcmlwdG9yLgotICAgIC8vCi0g
ICAgLy8gSW4gdGhlIGNhc2Ugb2Ygbm9uLW5lc3RlZCBleHRlbnNpb25zLCB3ZSBpbml0aWFsaXpl
IHRoZQotICAgIC8vIEV4dGVuc2lvbkRlc2NyaXB0b3JSZXRyaWV2ZXIgdG8gbnVsbCBhbmQgcmVs
eSBvbiB0aGUgb3V0ZXIgY2xhc3MncyBzdGF0aWMKLSAgICAvLyBpbml0aWFsaXplciB0byBjYWxs
IGludGVybmFsSW5pdCgpIGFmdGVyIHRoZSBkZXNjcmlwdG9yIGhhcyBiZWVuIHBhcnNlZC4KLSAg
ICBHZW5lcmF0ZWRFeHRlbnNpb24oRXh0ZW5zaW9uRGVzY3JpcHRvclJldHJpZXZlciBkZXNjcmlw
dG9yUmV0cmlldmVyLAotICAgICAgICBDbGFzcyBzaW5ndWxhclR5cGUsCi0gICAgICAgIE1lc3Nh
Z2UgbWVzc2FnZURlZmF1bHRJbnN0YW5jZSwKLSAgICAgICAgRXh0ZW5zaW9uVHlwZSBleHRlbnNp
b25UeXBlKSB7Ci0gICAgICBpZiAoTWVzc2FnZS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHNpbmd1
bGFyVHlwZSkgJiYKLSAgICAgICAgICAhc2luZ3VsYXJUeXBlLmlzSW5zdGFuY2UobWVzc2FnZURl
ZmF1bHRJbnN0YW5jZSkpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2Vw
dGlvbigKLSAgICAgICAgICAgICJCYWQgbWVzc2FnZURlZmF1bHRJbnN0YW5jZSBmb3IgIiArIHNp
bmd1bGFyVHlwZS5nZXROYW1lKCkpOwotICAgICAgfQotICAgICAgdGhpcy5kZXNjcmlwdG9yUmV0
cmlldmVyID0gZGVzY3JpcHRvclJldHJpZXZlcjsKLSAgICAgIHRoaXMuc2luZ3VsYXJUeXBlID0g
c2luZ3VsYXJUeXBlOwotICAgICAgdGhpcy5tZXNzYWdlRGVmYXVsdEluc3RhbmNlID0gbWVzc2Fn
ZURlZmF1bHRJbnN0YW5jZTsKLQotICAgICAgaWYgKFByb3RvY29sTWVzc2FnZUVudW0uY2xhc3Mu
aXNBc3NpZ25hYmxlRnJvbShzaW5ndWxhclR5cGUpKSB7Ci0gICAgICAgIHRoaXMuZW51bVZhbHVl
T2YgPSBnZXRNZXRob2RPckRpZShzaW5ndWxhclR5cGUsICJ2YWx1ZU9mIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1WYWx1ZURlc2NyaXB0b3IuY2xhc3Mp
OwotICAgICAgICB0aGlzLmVudW1HZXRWYWx1ZURlc2NyaXB0b3IgPQotICAgICAgICAgICAgZ2V0
TWV0aG9kT3JEaWUoc2luZ3VsYXJUeXBlLCAiZ2V0VmFsdWVEZXNjcmlwdG9yIik7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICB0aGlzLmVudW1WYWx1ZU9mID0gbnVsbDsKLSAgICAgICAgdGhpcy5l
bnVtR2V0VmFsdWVEZXNjcmlwdG9yID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIHRoaXMuZXh0ZW5z
aW9uVHlwZSA9IGV4dGVuc2lvblR5cGU7Ci0gICAgfQotCi0gICAgLyoqIEZvciB1c2UgYnkgZ2Vu
ZXJhdGVkIGNvZGUgb25seS4gKi8KLSAgICBwdWJsaWMgdm9pZCBpbnRlcm5hbEluaXQoZmluYWwg
RmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgICAgIGlmIChkZXNjcmlwdG9yUmV0cmll
dmVyICE9IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigi
QWxyZWFkeSBpbml0aWFsaXplZC4iKTsKLSAgICAgIH0KLSAgICAgIGRlc2NyaXB0b3JSZXRyaWV2
ZXIgPQotICAgICAgICAgIG5ldyBFeHRlbnNpb25EZXNjcmlwdG9yUmV0cmlldmVyKCkgewotICAg
ICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgRmllbGREZXNjcmlwdG9yIGdl
dERlc2NyaXB0b3IoKSB7Ci0gICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwotICAgICAg
ICAgICAgfQotICAgICAgICAgIH07Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBFeHRlbnNpb25EZXNj
cmlwdG9yUmV0cmlldmVyIGRlc2NyaXB0b3JSZXRyaWV2ZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBD
bGFzcyBzaW5ndWxhclR5cGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNZXNzYWdlIG1lc3NhZ2VEZWZh
dWx0SW5zdGFuY2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNZXRob2QgZW51bVZhbHVlT2Y7Ci0gICAg
cHJpdmF0ZSBmaW5hbCBNZXRob2QgZW51bUdldFZhbHVlRGVzY3JpcHRvcjsKLSAgICBwcml2YXRl
IGZpbmFsIEV4dGVuc2lvblR5cGUgZXh0ZW5zaW9uVHlwZTsKLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBGaWVsZERlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvcigpIHsKLSAgICAgIGlmIChkZXNj
cmlwdG9yUmV0cmlldmVyID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0
ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJnZXREZXNjcmlwdG9yKCkgY2FsbGVkIGJlZm9yZSBp
bnRlcm5hbEluaXQoKSIpOwotICAgICAgfQotICAgICAgcmV0dXJuIGRlc2NyaXB0b3JSZXRyaWV2
ZXIuZ2V0RGVzY3JpcHRvcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIHRoZSBleHRl
bnNpb24gaXMgYW4gZW1iZWRkZWQgbWVzc2FnZSBvciBncm91cCwgcmV0dXJucyB0aGUgZGVmYXVs
dAotICAgICAqIGluc3RhbmNlIG9mIHRoZSBtZXNzYWdlLgotICAgICAqLwotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBNZXNzYWdlIGdldE1lc3NhZ2VEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gICAg
ICByZXR1cm4gbWVzc2FnZURlZmF1bHRJbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwcm90ZWN0ZWQgRXh0ZW5zaW9uVHlwZSBnZXRFeHRlbnNpb25UeXBlKCkgewotICAgICAg
cmV0dXJuIGV4dGVuc2lvblR5cGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVydCBm
cm9tIHRoZSB0eXBlIHVzZWQgYnkgdGhlIHJlZmxlY3Rpb24gYWNjZXNzb3JzIHRvIHRoZSB0eXBl
IHVzZWQKLSAgICAgKiBieSBuYXRpdmUgYWNjZXNzb3JzLiAgRS5nLiwgZm9yIGVudW1zLCB0aGUg
cmVmbGVjdGlvbiBhY2Nlc3NvcnMgdXNlCi0gICAgICogRW51bVZhbHVlRGVzY3JpcHRvcnMgYnV0
IHRoZSBuYXRpdmUgYWNjZXNzb3JzIHVzZSB0aGUgZ2VuZXJhdGVkIGVudW0KLSAgICAgKiB0eXBl
LgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNr
ZWQiKQotICAgIHByb3RlY3RlZCBPYmplY3QgZnJvbVJlZmxlY3Rpb25UeXBlKGZpbmFsIE9iamVj
dCB2YWx1ZSkgewotICAgICAgRmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBnZXREZXNjcmlw
dG9yKCk7Ci0gICAgICBpZiAoZGVzY3JpcHRvci5pc1JlcGVhdGVkKCkpIHsKLSAgICAgICAgaWYg
KGRlc2NyaXB0b3IuZ2V0SmF2YVR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3IuSmF2YVR5cGUuTUVT
U0FHRSB8fAotICAgICAgICAgICAgZGVzY3JpcHRvci5nZXRKYXZhVHlwZSgpID09IEZpZWxkRGVz
Y3JpcHRvci5KYXZhVHlwZS5FTlVNKSB7Ci0gICAgICAgICAgLy8gTXVzdCBjb252ZXJ0IHRoZSB3
aG9sZSBsaXN0LgotICAgICAgICAgIGZpbmFsIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgp
OwotICAgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiAoTGlzdCkgdmFsdWUpIHsK
LSAgICAgICAgICAgIHJlc3VsdC5hZGQoc2luZ3VsYXJGcm9tUmVmbGVjdGlvblR5cGUoZWxlbWVu
dCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmV0dXJuIHNpbmd1bGFyRnJvbVJlZmxlY3Rpb25UeXBlKHZhbHVlKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMaWtlIHtAbGluayAjZnJvbVJlZmxlY3Rpb25U
eXBlKE9iamVjdCl9LCBidXQgaWYgdGhlIHR5cGUgaXMgYSByZXBlYXRlZAotICAgICAqIHR5cGUs
IHRoaXMgY29udmVydHMgYSBzaW5nbGUgZWxlbWVudC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUK
LSAgICBwcm90ZWN0ZWQgT2JqZWN0IHNpbmd1bGFyRnJvbVJlZmxlY3Rpb25UeXBlKGZpbmFsIE9i
amVjdCB2YWx1ZSkgewotICAgICAgRmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBnZXREZXNj
cmlwdG9yKCk7Ci0gICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IuZ2V0SmF2YVR5cGUoKSkgewotICAg
ICAgICBjYXNlIE1FU1NBR0U6Ci0gICAgICAgICAgaWYgKHNpbmd1bGFyVHlwZS5pc0luc3RhbmNl
KHZhbHVlKSkgewotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICByZXR1cm4gbWVzc2FnZURlZmF1bHRJbnN0YW5jZS5uZXdCdWlsZGVyRm9y
VHlwZSgpCi0gICAgICAgICAgICAgICAgLm1lcmdlRnJvbSgoTWVzc2FnZSkgdmFsdWUpLmJ1aWxk
KCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIEVOVU06Ci0gICAgICAgICAgcmV0dXJuIGlu
dm9rZU9yRGllKGVudW1WYWx1ZU9mLCBudWxsLCAoRW51bVZhbHVlRGVzY3JpcHRvcikgdmFsdWUp
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0IGZyb20gdGhlIHR5cGUgdXNlZCBieSB0aGUg
bmF0aXZlIGFjY2Vzc29ycyB0byB0aGUgdHlwZSB1c2VkCi0gICAgICogYnkgcmVmbGVjdGlvbiBh
Y2Nlc3NvcnMuICBFLmcuLCBmb3IgZW51bXMsIHRoZSByZWZsZWN0aW9uIGFjY2Vzc29ycyB1c2UK
LSAgICAgKiBFbnVtVmFsdWVEZXNjcmlwdG9ycyBidXQgdGhlIG5hdGl2ZSBhY2Nlc3NvcnMgdXNl
IHRoZSBnZW5lcmF0ZWQgZW51bQotICAgICAqIHR5cGUuCi0gICAgICovCi0gICAgQE92ZXJyaWRl
Ci0gICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgcHJvdGVjdGVkIE9iamVj
dCB0b1JlZmxlY3Rpb25UeXBlKGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAgICAgRmllbGREZXNj
cmlwdG9yIGRlc2NyaXB0b3IgPSBnZXREZXNjcmlwdG9yKCk7Ci0gICAgICBpZiAoZGVzY3JpcHRv
ci5pc1JlcGVhdGVkKCkpIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0SmF2YVR5cGUoKSA9
PSBGaWVsZERlc2NyaXB0b3IuSmF2YVR5cGUuRU5VTSkgewotICAgICAgICAgIC8vIE11c3QgY29u
dmVydCB0aGUgd2hvbGUgbGlzdC4KLSAgICAgICAgICBmaW5hbCBMaXN0IHJlc3VsdCA9IG5ldyBB
cnJheUxpc3QoKTsKLSAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBlbGVtZW50IDogKExpc3Qp
IHZhbHVlKSB7Ci0gICAgICAgICAgICByZXN1bHQuYWRkKHNpbmd1bGFyVG9SZWZsZWN0aW9uVHlw
ZShlbGVtZW50KSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB9Ci0gICAgICB9
IGVsc2UgewotICAgICAgICByZXR1cm4gc2luZ3VsYXJUb1JlZmxlY3Rpb25UeXBlKHZhbHVlKTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMaWtlIHtAbGluayAjdG9SZWZsZWN0
aW9uVHlwZShPYmplY3QpfSwgYnV0IGlmIHRoZSB0eXBlIGlzIGEgcmVwZWF0ZWQKLSAgICAgKiB0
eXBlLCB0aGlzIGNvbnZlcnRzIGEgc2luZ2xlIGVsZW1lbnQuCi0gICAgICovCi0gICAgQE92ZXJy
aWRlCi0gICAgcHJvdGVjdGVkIE9iamVjdCBzaW5ndWxhclRvUmVmbGVjdGlvblR5cGUoZmluYWwg
T2JqZWN0IHZhbHVlKSB7Ci0gICAgICBGaWVsZERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGdldERl
c2NyaXB0b3IoKTsKLSAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci5nZXRKYXZhVHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgRU5VTToKLSAgICAgICAgICByZXR1cm4gaW52b2tlT3JEaWUoZW51bUdldFZh
bHVlRGVzY3JpcHRvciwgdmFsdWUpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJldHVy
biB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50
IGdldE51bWJlcigpIHsKLSAgICAgIHJldHVybiBnZXREZXNjcmlwdG9yKCkuZ2V0TnVtYmVyKCk7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFdpcmVGb3JtYXQuRmllbGRUeXBl
IGdldExpdGVUeXBlKCkgewotICAgICAgcmV0dXJuIGdldERlc2NyaXB0b3IoKS5nZXRMaXRlVHlw
ZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzUmVwZWF0
ZWQoKSB7Ci0gICAgICByZXR1cm4gZ2V0RGVzY3JpcHRvcigpLmlzUmVwZWF0ZWQoKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAg
ICBwdWJsaWMgVHlwZSBnZXREZWZhdWx0VmFsdWUoKSB7Ci0gICAgICBpZiAoaXNSZXBlYXRlZCgp
KSB7Ci0gICAgICAgIHJldHVybiAoVHlwZSkgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAg
ICB9Ci0gICAgICBpZiAoZ2V0RGVzY3JpcHRvcigpLmdldEphdmFUeXBlKCkgPT0gRmllbGREZXNj
cmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAgICAgcmV0dXJuIChUeXBlKSBtZXNzYWdl
RGVmYXVsdEluc3RhbmNlOwotICAgICAgfQotICAgICAgcmV0dXJuIChUeXBlKSBzaW5ndWxhckZy
b21SZWZsZWN0aW9uVHlwZSgKLSAgICAgICAgICBnZXREZXNjcmlwdG9yKCkuZ2V0RGVmYXVsdFZh
bHVlKCkpOwotICAgIH0KLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgLyoqIENhbGxzIENsYXNz
LmdldE1ldGhvZCBhbmQgdGhyb3dzIGEgUnVudGltZUV4Y2VwdGlvbiBpZiBpdCBmYWlscy4gKi8K
LSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHByaXZhdGUgc3RhdGljIE1ldGhv
ZCBnZXRNZXRob2RPckRpZSgKLSAgICAgIGZpbmFsIENsYXNzIGNsYXp6LCBmaW5hbCBTdHJpbmcg
bmFtZSwgZmluYWwgQ2xhc3MuLi4gcGFyYW1zKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBj
bGF6ei5nZXRNZXRob2QobmFtZSwgcGFyYW1zKTsKLSAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RF
eGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAg
ICJHZW5lcmF0ZWQgbWVzc2FnZSBjbGFzcyBcIiIgKyBjbGF6ei5nZXROYW1lKCkgKwotICAgICAg
ICAiXCIgbWlzc2luZyBtZXRob2QgXCIiICsgbmFtZSArICJcIi4iLCBlKTsKLSAgICB9Ci0gIH0K
LQotICAvKiogQ2FsbHMgaW52b2tlIGFuZCB0aHJvd3MgYSBSdW50aW1lRXhjZXB0aW9uIGlmIGl0
IGZhaWxzLiAqLwotICBwcml2YXRlIHN0YXRpYyBPYmplY3QgaW52b2tlT3JEaWUoCi0gICAgICBm
aW5hbCBNZXRob2QgbWV0aG9kLCBmaW5hbCBPYmplY3Qgb2JqZWN0LCBmaW5hbCBPYmplY3QuLi4g
cGFyYW1zKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBtZXRob2QuaW52b2tlKG9iamVjdCwg
cGFyYW1zKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAg
IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAiQ291bGRuJ3QgdXNlIEphdmEg
cmVmbGVjdGlvbiB0byBpbXBsZW1lbnQgcHJvdG9jb2wgbWVzc2FnZSAiICsKLSAgICAgICAgInJl
ZmxlY3Rpb24uIiwgZSk7Ci0gICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICBmaW5hbCBUaHJvd2FibGUgY2F1c2UgPSBlLmdldENhdXNlKCk7Ci0gICAgICBp
ZiAoY2F1c2UgaW5zdGFuY2VvZiBSdW50aW1lRXhjZXB0aW9uKSB7Ci0gICAgICAgIHRocm93IChS
dW50aW1lRXhjZXB0aW9uKSBjYXVzZTsKLSAgICAgIH0gZWxzZSBpZiAoY2F1c2UgaW5zdGFuY2Vv
ZiBFcnJvcikgewotICAgICAgICB0aHJvdyAoRXJyb3IpIGNhdXNlOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIlVuZXhwZWN0
ZWQgZXhjZXB0aW9uIHRocm93biBieSBnZW5lcmF0ZWQgYWNjZXNzb3IgbWV0aG9kLiIsIGNhdXNl
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgbWFwIGZpZWxk
IHdpdGggdGhlIGdpdmVuIGZpZWxkIG51bWJlci4gVGhpcyBtZXRob2Qgc2hvdWxkIGJlCi0gICAq
IG92ZXJyaWRkZW4gaW4gdGhlIGdlbmVyYXRlZCBtZXNzYWdlIGNsYXNzIGlmIHRoZSBtZXNzYWdl
IGNvbnRhaW5zIG1hcAotICAgKiBmaWVsZHMuCi0gICAqCi0gICAqIFVubGlrZSBvdGhlciBmaWVs
ZCB0eXBlcywgcmVmbGVjdGlvbiBzdXBwb3J0IGZvciBtYXAgZmllbGRzIGNhbid0IGJlCi0gICAq
IGltcGxlbWVudGVkIGJhc2VkIG9uIGdlbmVyYXRlZCBwdWJsaWMgQVBJIGJlY2F1c2Ugd2UgbmVl
ZCB0byBhY2Nlc3MgYQotICAgKiBtYXAgZmllbGQgYXMgYSBsaXN0IGluIHJlZmxlY3Rpb24gQVBJ
IGJ1dCB0aGUgZ2VuZXJhdGVkIEFQSSBvbmx5IGFsbG93cwotICAgKiB1cyB0byBhY2Nlc3MgaXQg
YXMgYSBtYXAuIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHVuZGVybHlpbmcgbWFwIGZpZWxkCi0g
ICAqIGRpcmVjdGx5IGFuZCB0aHVzIGVuYWJsZXMgdXMgdG8gYWNjZXNzIHRoZSBtYXAgZmllbGQg
YXMgYSBsaXN0LgotICAgKi8KLSAgQFN1cHByZXNzV2FybmluZ3MoeyJyYXd0eXBlcyIsICJ1bnVz
ZWQifSkKLSAgcHJvdGVjdGVkIE1hcEZpZWxkIGludGVybmFsR2V0TWFwRmllbGQoaW50IGZpZWxk
TnVtYmVyKSB7Ci0gICAgLy8gTm90ZSB0aGF0IHdlIGNhbid0IHVzZSBkZXNjcmlwdG9yIG5hbWVz
IGhlcmUgYmVjYXVzZSB0aGlzIG1ldGhvZCB3aWxsCi0gICAgLy8gYmUgY2FsbGVkIHdoZW4gZGVz
Y3JpcHRvciBpcyBiZWluZyBpbml0aWFsaXplZC4KLSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigKLSAgICAgICAgIk5vIG1hcCBmaWVsZHMgZm91bmQgaW4gIiArIGdldENsYXNzKCkuZ2V0
TmFtZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBVc2VycyBzaG91bGQgaWdub3JlIHRoaXMgY2xh
c3MuICBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbgotICAgKiB3aXRoIGFj
Y2VzcyB0byB0aGUgZmllbGRzIG9mIGEgbWVzc2FnZSBvYmplY3QgdXNpbmcgSmF2YSByZWZsZWN0
aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGaWVsZEFjY2Vzc29yVGFi
bGUgewotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEgRmllbGRBY2Nlc3NvclRhYmxlIGZv
ciBhIHBhcnRpY3VsYXIgbWVzc2FnZSBjbGFzcy4gIE9ubHkKLSAgICAgKiBvbmUgRmllbGRBY2Nl
c3NvclRhYmxlIHNob3VsZCBldmVyIGJlIGNvbnN0cnVjdGVkIHBlciBjbGFzcy4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSBkZXNjcmlwdG9yICAgICBUaGUgdHlwZSdzIGRlc2NyaXB0b3IuCi0gICAg
ICogQHBhcmFtIGNhbWVsQ2FzZU5hbWVzIFRoZSBjYW1lbGNhc2UgbmFtZXMgb2YgYWxsIGZpZWxk
cyBpbiB0aGUgbWVzc2FnZS4KLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgYXJl
IHVzZWQgdG8gZGVyaXZlIHRoZSBhY2Nlc3NvciBtZXRob2QgbmFtZXMuCi0gICAgICogQHBhcmFt
IG1lc3NhZ2VDbGFzcyAgIFRoZSBtZXNzYWdlIHR5cGUuCi0gICAgICogQHBhcmFtIGJ1aWxkZXJD
bGFzcyAgIFRoZSBidWlsZGVyIHR5cGUuCi0gICAgICovCi0gICAgcHVibGljIEZpZWxkQWNjZXNz
b3JUYWJsZSgKLSAgICAgICAgZmluYWwgRGVzY3JpcHRvciBkZXNjcmlwdG9yLAotICAgICAgICBm
aW5hbCBTdHJpbmdbXSBjYW1lbENhc2VOYW1lcywKLSAgICAgICAgZmluYWwgQ2xhc3M8PyBleHRl
bmRzIEdlbmVyYXRlZE1lc3NhZ2U+IG1lc3NhZ2VDbGFzcywKLSAgICAgICAgZmluYWwgQ2xhc3M8
PyBleHRlbmRzIEJ1aWxkZXI+IGJ1aWxkZXJDbGFzcykgewotICAgICAgdGhpcyhkZXNjcmlwdG9y
LCBjYW1lbENhc2VOYW1lcyk7Ci0gICAgICBlbnN1cmVGaWVsZEFjY2Vzc29yc0luaXRpYWxpemVk
KG1lc3NhZ2VDbGFzcywgYnVpbGRlckNsYXNzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBD
b25zdHJ1Y3QgYSBGaWVsZEFjY2Vzc29yVGFibGUgZm9yIGEgcGFydGljdWxhciBtZXNzYWdlIGNs
YXNzIHdpdGhvdXQKLSAgICAgKiBpbml0aWFsaXppbmcgRmllbGRBY2Nlc3NvcnMuCi0gICAgICov
Ci0gICAgcHVibGljIEZpZWxkQWNjZXNzb3JUYWJsZSgKLSAgICAgICAgZmluYWwgRGVzY3JpcHRv
ciBkZXNjcmlwdG9yLAotICAgICAgICBmaW5hbCBTdHJpbmdbXSBjYW1lbENhc2VOYW1lcykgewot
ICAgICAgdGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgICAgIHRoaXMuY2FtZWxDYXNl
TmFtZXMgPSBjYW1lbENhc2VOYW1lczsKLSAgICAgIGZpZWxkcyA9IG5ldyBGaWVsZEFjY2Vzc29y
W2Rlc2NyaXB0b3IuZ2V0RmllbGRzKCkuc2l6ZSgpXTsKLSAgICAgIG9uZW9mcyA9IG5ldyBPbmVv
ZkFjY2Vzc29yW2Rlc2NyaXB0b3IuZ2V0T25lb2ZzKCkuc2l6ZSgpXTsKLSAgICAgIGluaXRpYWxp
emVkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzTWFwRmllbGRFbmFi
bGVkKEZpZWxkRGVzY3JpcHRvciBmaWVsZCkgewotICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVl
OwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFbnN1cmVz
IHRoZSBmaWVsZCBhY2Nlc3NvcnMgYXJlIGluaXRpYWxpemVkLiBUaGlzIG1ldGhvZCBpcyB0aHJl
YWQtc2FmZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtZXNzYWdlQ2xhc3MgICBUaGUgbWVzc2Fn
ZSB0eXBlLgotICAgICAqIEBwYXJhbSBidWlsZGVyQ2xhc3MgICBUaGUgYnVpbGRlciB0eXBlLgot
ICAgICAqIEByZXR1cm4gdGhpcwotICAgICAqLwotICAgIHB1YmxpYyBGaWVsZEFjY2Vzc29yVGFi
bGUgZW5zdXJlRmllbGRBY2Nlc3NvcnNJbml0aWFsaXplZCgKLSAgICAgICAgQ2xhc3M8PyBleHRl
bmRzIEdlbmVyYXRlZE1lc3NhZ2U+IG1lc3NhZ2VDbGFzcywKLSAgICAgICAgQ2xhc3M8PyBleHRl
bmRzIEJ1aWxkZXI+IGJ1aWxkZXJDbGFzcykgewotICAgICAgaWYgKGluaXRpYWxpemVkKSB7IHJl
dHVybiB0aGlzOyB9Ci0gICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgaWYgKGlu
aXRpYWxpemVkKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgICAgIGludCBmaWVsZHNTaXplID0gZmll
bGRzLmxlbmd0aDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHNTaXplOyBpKysp
IHsKLSAgICAgICAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBkZXNjcmlwdG9yLmdldEZpZWxk
cygpLmdldChpKTsKLSAgICAgICAgICBTdHJpbmcgY29udGFpbmluZ09uZW9mQ2FtZWxDYXNlTmFt
ZSA9IG51bGw7Ci0gICAgICAgICAgaWYgKGZpZWxkLmdldENvbnRhaW5pbmdPbmVvZigpICE9IG51
bGwpIHsKLSAgICAgICAgICAgIGNvbnRhaW5pbmdPbmVvZkNhbWVsQ2FzZU5hbWUgPQotICAgICAg
ICAgICAgICAgIGNhbWVsQ2FzZU5hbWVzW2ZpZWxkc1NpemUgKyBmaWVsZC5nZXRDb250YWluaW5n
T25lb2YoKS5nZXRJbmRleCgpXTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGZpZWxkLmlz
UmVwZWF0ZWQoKSkgewotICAgICAgICAgICAgaWYgKGZpZWxkLmdldEphdmFUeXBlKCkgPT0gRmll
bGREZXNjcmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAgICAgICAgICAgaWYgKGZpZWxk
LmlzTWFwRmllbGQoKSAmJiBpc01hcEZpZWxkRW5hYmxlZChmaWVsZCkpIHsKLSAgICAgICAgICAg
ICAgICBmaWVsZHNbaV0gPSBuZXcgTWFwRmllbGRBY2Nlc3NvcigKLSAgICAgICAgICAgICAgICAg
ICAgZmllbGQsIGNhbWVsQ2FzZU5hbWVzW2ldLCBtZXNzYWdlQ2xhc3MsIGJ1aWxkZXJDbGFzcyk7
Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzW2ldID0gbmV3
IFJlcGVhdGVkTWVzc2FnZUZpZWxkQWNjZXNzb3IoCi0gICAgICAgICAgICAgICAgICAgIGZpZWxk
LCBjYW1lbENhc2VOYW1lc1tpXSwgbWVzc2FnZUNsYXNzLCBidWlsZGVyQ2xhc3MpOwotICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLmdldEphdmFUeXBlKCkgPT0g
RmllbGREZXNjcmlwdG9yLkphdmFUeXBlLkVOVU0pIHsKLSAgICAgICAgICAgICAgZmllbGRzW2ld
ID0gbmV3IFJlcGVhdGVkRW51bUZpZWxkQWNjZXNzb3IoCi0gICAgICAgICAgICAgICAgICBmaWVs
ZCwgY2FtZWxDYXNlTmFtZXNbaV0sIG1lc3NhZ2VDbGFzcywgYnVpbGRlckNsYXNzKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGZpZWxkc1tpXSA9IG5ldyBSZXBlYXRlZEZp
ZWxkQWNjZXNzb3IoCi0gICAgICAgICAgICAgICAgICBmaWVsZCwgY2FtZWxDYXNlTmFtZXNbaV0s
IG1lc3NhZ2VDbGFzcywgYnVpbGRlckNsYXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKGZpZWxkLmdldEphdmFUeXBlKCkgPT0gRmllbGREZXNj
cmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAgICAgICAgICAgZmllbGRzW2ldID0gbmV3
IFNpbmd1bGFyTWVzc2FnZUZpZWxkQWNjZXNzb3IoCi0gICAgICAgICAgICAgICAgICBmaWVsZCwg
Y2FtZWxDYXNlTmFtZXNbaV0sIG1lc3NhZ2VDbGFzcywgYnVpbGRlckNsYXNzLAotICAgICAgICAg
ICAgICAgICAgY29udGFpbmluZ09uZW9mQ2FtZWxDYXNlTmFtZSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGZpZWxkLmdldEphdmFUeXBlKCkgPT0gRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLkVO
VU0pIHsKLSAgICAgICAgICAgICAgZmllbGRzW2ldID0gbmV3IFNpbmd1bGFyRW51bUZpZWxkQWNj
ZXNzb3IoCi0gICAgICAgICAgICAgICAgICBmaWVsZCwgY2FtZWxDYXNlTmFtZXNbaV0sIG1lc3Nh
Z2VDbGFzcywgYnVpbGRlckNsYXNzLAotICAgICAgICAgICAgICAgICAgY29udGFpbmluZ09uZW9m
Q2FtZWxDYXNlTmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLmdldEphdmFUeXBl
KCkgPT0gRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLlNUUklORykgewotICAgICAgICAgICAgICBm
aWVsZHNbaV0gPSBuZXcgU2luZ3VsYXJTdHJpbmdGaWVsZEFjY2Vzc29yKAotICAgICAgICAgICAg
ICAgICAgZmllbGQsIGNhbWVsQ2FzZU5hbWVzW2ldLCBtZXNzYWdlQ2xhc3MsIGJ1aWxkZXJDbGFz
cywKLSAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdPbmVvZkNhbWVsQ2FzZU5hbWUpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgZmllbGRzW2ldID0gbmV3IFNpbmd1bGFy
RmllbGRBY2Nlc3NvcigKLSAgICAgICAgICAgICAgICAgIGZpZWxkLCBjYW1lbENhc2VOYW1lc1tp
XSwgbWVzc2FnZUNsYXNzLCBidWlsZGVyQ2xhc3MsCi0gICAgICAgICAgICAgICAgICBjb250YWlu
aW5nT25lb2ZDYW1lbENhc2VOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbnQgb25lb2ZzU2l6ZSA9IG9uZW9mcy5sZW5ndGg7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgb25lb2ZzU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgb25lb2Zz
W2ldID0gbmV3IE9uZW9mQWNjZXNzb3IoCi0gICAgICAgICAgICAgIGRlc2NyaXB0b3IsIGNhbWVs
Q2FzZU5hbWVzW2kgKyBmaWVsZHNTaXplXSwKLSAgICAgICAgICAgICAgbWVzc2FnZUNsYXNzLCBi
dWlsZGVyQ2xhc3MpOwotICAgICAgICB9Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICAgICAgY2FtZWxDYXNlTmFtZXMgPSBudWxsOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIERlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAg
ICBwcml2YXRlIGZpbmFsIEZpZWxkQWNjZXNzb3JbXSBmaWVsZHM7Ci0gICAgcHJpdmF0ZSBTdHJp
bmdbXSBjYW1lbENhc2VOYW1lczsKLSAgICBwcml2YXRlIGZpbmFsIE9uZW9mQWNjZXNzb3JbXSBv
bmVvZnM7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIGluaXRpYWxpemVkOwotCi0gICAg
LyoqIEdldCB0aGUgRmllbGRBY2Nlc3NvciBmb3IgYSBwYXJ0aWN1bGFyIGZpZWxkLiAqLwotICAg
IHByaXZhdGUgRmllbGRBY2Nlc3NvciBnZXRGaWVsZChmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmll
bGQpIHsKLSAgICAgIGlmIChmaWVsZC5nZXRDb250YWluaW5nVHlwZSgpICE9IGRlc2NyaXB0b3Ip
IHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAg
ICAiRmllbGREZXNjcmlwdG9yIGRvZXMgbm90IG1hdGNoIG1lc3NhZ2UgdHlwZS4iKTsKLSAgICAg
IH0gZWxzZSBpZiAoZmllbGQuaXNFeHRlbnNpb24oKSkgewotICAgICAgICAvLyBJZiB0aGlzIHR5
cGUgaGFkIGV4dGVuc2lvbnMsIGl0IHdvdWxkIHN1YmNsYXNzIEV4dGVuZGFibGVNZXNzYWdlLAot
ICAgICAgICAvLyB3aGljaCBvdmVycmlkZXMgdGhlIHJlZmxlY3Rpb24gaW50ZXJmYWNlIHRvIGhh
bmRsZSBleHRlbnNpb25zLgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uKAotICAgICAgICAgICJUaGlzIHR5cGUgZG9lcyBub3QgaGF2ZSBleHRlbnNpb25zLiIpOwot
ICAgICAgfQotICAgICAgcmV0dXJuIGZpZWxkc1tmaWVsZC5nZXRJbmRleCgpXTsKLSAgICB9Ci0K
LSAgICAvKiogR2V0IHRoZSBPbmVvZkFjY2Vzc29yIGZvciBhIHBhcnRpY3VsYXIgb25lb2YuICov
Ci0gICAgcHJpdmF0ZSBPbmVvZkFjY2Vzc29yIGdldE9uZW9mKGZpbmFsIE9uZW9mRGVzY3JpcHRv
ciBvbmVvZikgewotICAgICAgaWYgKG9uZW9mLmdldENvbnRhaW5pbmdUeXBlKCkgIT0gZGVzY3Jp
cHRvcikgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAg
ICAgICAgICJPbmVvZkRlc2NyaXB0b3IgZG9lcyBub3QgbWF0Y2ggbWVzc2FnZSB0eXBlLiIpOwot
ICAgICAgfQotICAgICAgcmV0dXJuIG9uZW9mc1tvbmVvZi5nZXRJbmRleCgpXTsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBBYnN0cmFjdCBpbnRlcmZhY2UgdGhhdCBwcm92aWRlcyBhY2Nlc3Mg
dG8gYSBzaW5nbGUgZmllbGQuICBUaGlzIGlzCi0gICAgICogaW1wbGVtZW50ZWQgZGlmZmVyZW50
bHkgZGVwZW5kaW5nIG9uIHRoZSBmaWVsZCB0eXBlIGFuZCBjYXJkaW5hbGl0eS4KLSAgICAgKi8K
LSAgICBwcml2YXRlIGludGVyZmFjZSBGaWVsZEFjY2Vzc29yIHsKLSAgICAgIE9iamVjdCBnZXQo
R2VuZXJhdGVkTWVzc2FnZSBtZXNzYWdlKTsKLSAgICAgIE9iamVjdCBnZXQoR2VuZXJhdGVkTWVz
c2FnZS5CdWlsZGVyIGJ1aWxkZXIpOwotICAgICAgT2JqZWN0IGdldFJhdyhHZW5lcmF0ZWRNZXNz
YWdlIG1lc3NhZ2UpOwotICAgICAgT2JqZWN0IGdldFJhdyhHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxk
ZXIgYnVpbGRlcik7Ci0gICAgICB2b2lkIHNldChCdWlsZGVyIGJ1aWxkZXIsIE9iamVjdCB2YWx1
ZSk7Ci0gICAgICBPYmplY3QgZ2V0UmVwZWF0ZWQoR2VuZXJhdGVkTWVzc2FnZSBtZXNzYWdlLCBp
bnQgaW5kZXgpOwotICAgICAgT2JqZWN0IGdldFJlcGVhdGVkKEdlbmVyYXRlZE1lc3NhZ2UuQnVp
bGRlciBidWlsZGVyLCBpbnQgaW5kZXgpOwotICAgICAgT2JqZWN0IGdldFJlcGVhdGVkUmF3KEdl
bmVyYXRlZE1lc3NhZ2UgbWVzc2FnZSwgaW50IGluZGV4KTsKLSAgICAgIE9iamVjdCBnZXRSZXBl
YXRlZFJhdyhHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciwgaW50IGluZGV4KTsKLSAg
ICAgIHZvaWQgc2V0UmVwZWF0ZWQoQnVpbGRlciBidWlsZGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5kZXgsIE9iamVjdCB2YWx1ZSk7Ci0gICAgICB2b2lkIGFkZFJlcGVhdGVkKEJ1
aWxkZXIgYnVpbGRlciwgT2JqZWN0IHZhbHVlKTsKLSAgICAgIGJvb2xlYW4gaGFzKEdlbmVyYXRl
ZE1lc3NhZ2UgbWVzc2FnZSk7Ci0gICAgICBib29sZWFuIGhhcyhHZW5lcmF0ZWRNZXNzYWdlLkJ1
aWxkZXIgYnVpbGRlcik7Ci0gICAgICBpbnQgZ2V0UmVwZWF0ZWRDb3VudChHZW5lcmF0ZWRNZXNz
YWdlIG1lc3NhZ2UpOwotICAgICAgaW50IGdldFJlcGVhdGVkQ291bnQoR2VuZXJhdGVkTWVzc2Fn
ZS5CdWlsZGVyIGJ1aWxkZXIpOwotICAgICAgdm9pZCBjbGVhcihCdWlsZGVyIGJ1aWxkZXIpOwot
ICAgICAgTWVzc2FnZS5CdWlsZGVyIG5ld0J1aWxkZXIoKTsKLSAgICAgIE1lc3NhZ2UuQnVpbGRl
ciBnZXRCdWlsZGVyKEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKTsKLSAgICAgIE1l
c3NhZ2UuQnVpbGRlciBnZXRSZXBlYXRlZEJ1aWxkZXIoR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVy
IGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bmRleCk7Ci0gICAgfQotCi0gICAgLyoqIE9uZW9mQWNjZXNzb3IgcHJvdmlkZXMgYWNjZXNzIHRv
IGEgc2luZ2xlIG9uZW9mLiAqLwotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE9uZW9mQWNjZXNz
b3IgewotICAgICAgT25lb2ZBY2Nlc3NvcigKLSAgICAgICAgICBmaW5hbCBEZXNjcmlwdG9yIGRl
c2NyaXB0b3IsIGZpbmFsIFN0cmluZyBjYW1lbENhc2VOYW1lLAotICAgICAgICAgIGZpbmFsIENs
YXNzPD8gZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlPiBtZXNzYWdlQ2xhc3MsCi0gICAgICAgICAg
ZmluYWwgQ2xhc3M8PyBleHRlbmRzIEJ1aWxkZXI+IGJ1aWxkZXJDbGFzcykgewotICAgICAgICB0
aGlzLmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwotICAgICAgICBjYXNlTWV0aG9kID0KLSAgICAg
ICAgICAgIGdldE1ldGhvZE9yRGllKG1lc3NhZ2VDbGFzcywgImdldCIgKyBjYW1lbENhc2VOYW1l
ICsgIkNhc2UiKTsKLSAgICAgICAgY2FzZU1ldGhvZEJ1aWxkZXIgPQotICAgICAgICAgICAgZ2V0
TWV0aG9kT3JEaWUoYnVpbGRlckNsYXNzLCAiZ2V0IiArIGNhbWVsQ2FzZU5hbWUgKyAiQ2FzZSIp
OwotICAgICAgICBjbGVhck1ldGhvZCA9IGdldE1ldGhvZE9yRGllKGJ1aWxkZXJDbGFzcywgImNs
ZWFyIiArIGNhbWVsQ2FzZU5hbWUpOwotICAgICAgfQotCi0gICAgICBwcml2YXRlIGZpbmFsIERl
c2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgIHByaXZhdGUgZmluYWwgTWV0aG9kIGNhc2VNZXRo
b2Q7Ci0gICAgICBwcml2YXRlIGZpbmFsIE1ldGhvZCBjYXNlTWV0aG9kQnVpbGRlcjsKLSAgICAg
IHByaXZhdGUgZmluYWwgTWV0aG9kIGNsZWFyTWV0aG9kOwotCi0gICAgICBwdWJsaWMgYm9vbGVh
biBoYXMoZmluYWwgR2VuZXJhdGVkTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgIGlmICgoKElu
dGVybmFsLkVudW1MaXRlKSBpbnZva2VPckRpZShjYXNlTWV0aG9kLCBtZXNzYWdlKSkuZ2V0TnVt
YmVyKCkgPT0gMCkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIGJvb2xlYW4gaGFzKEdlbmVy
YXRlZE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgIGlmICgoKEludGVybmFsLkVu
dW1MaXRlKSBpbnZva2VPckRpZShjYXNlTWV0aG9kQnVpbGRlciwgYnVpbGRlcikpLmdldE51bWJl
cigpID09IDApIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBGaWVsZERlc2NyaXB0b3IgZ2V0
KGZpbmFsIEdlbmVyYXRlZE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICBpbnQgZmllbGROdW1i
ZXIgPSAoKEludGVybmFsLkVudW1MaXRlKSBpbnZva2VPckRpZShjYXNlTWV0aG9kLCBtZXNzYWdl
KSkuZ2V0TnVtYmVyKCk7Ci0gICAgICAgIGlmIChmaWVsZE51bWJlciA+IDApIHsKLSAgICAgICAg
ICByZXR1cm4gZGVzY3JpcHRvci5maW5kRmllbGRCeU51bWJlcihmaWVsZE51bWJlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBGaWVs
ZERlc2NyaXB0b3IgZ2V0KEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAg
ICAgIGludCBmaWVsZE51bWJlciA9ICgoSW50ZXJuYWwuRW51bUxpdGUpIGludm9rZU9yRGllKGNh
c2VNZXRob2RCdWlsZGVyLCBidWlsZGVyKSkuZ2V0TnVtYmVyKCk7Ci0gICAgICAgIGlmIChmaWVs
ZE51bWJlciA+IDApIHsKLSAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5maW5kRmllbGRCeU51
bWJlcihmaWVsZE51bWJlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIGNsZWFyKGZpbmFsIEJ1aWxkZXIgYnVpbGRlcikgewot
ICAgICAgICBpbnZva2VPckRpZShjbGVhck1ldGhvZCwgYnVpbGRlcik7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBzdXBwb3J0RmllbGRQcmVzZW5jZShGaWxl
RGVzY3JpcHRvciBmaWxlKSB7Ci0gICAgICByZXR1cm4gZmlsZS5nZXRTeW50YXgoKSA9PSBGaWxl
RGVzY3JpcHRvci5TeW50YXguUFJPVE8yOwotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2luZ3VsYXJGaWVsZEFjY2Vzc29yIGltcGxlbWVudHMgRmll
bGRBY2Nlc3NvciB7Ci0gICAgICBTaW5ndWxhckZpZWxkQWNjZXNzb3IoCi0gICAgICAgICAgZmlu
YWwgRmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IsIGZpbmFsIFN0cmluZyBjYW1lbENhc2VOYW1l
LAotICAgICAgICAgIGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlPiBtZXNz
YWdlQ2xhc3MsCi0gICAgICAgICAgZmluYWwgQ2xhc3M8PyBleHRlbmRzIEJ1aWxkZXI+IGJ1aWxk
ZXJDbGFzcywKLSAgICAgICAgICBmaW5hbCBTdHJpbmcgY29udGFpbmluZ09uZW9mQ2FtZWxDYXNl
TmFtZSkgewotICAgICAgICBmaWVsZCA9IGRlc2NyaXB0b3I7Ci0gICAgICAgIGlzT25lb2ZGaWVs
ZCA9IGRlc2NyaXB0b3IuZ2V0Q29udGFpbmluZ09uZW9mKCkgIT0gbnVsbDsKLSAgICAgICAgaGFz
SGFzTWV0aG9kID0gc3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvci5nZXRGaWxlKCkpCi0g
ICAgICAgICAgICB8fCAoIWlzT25lb2ZGaWVsZCAmJiBkZXNjcmlwdG9yLmdldEphdmFUeXBlKCkg
PT0gRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpOwotICAgICAgICBnZXRNZXRob2Qg
PSBnZXRNZXRob2RPckRpZShtZXNzYWdlQ2xhc3MsICJnZXQiICsgY2FtZWxDYXNlTmFtZSk7Ci0g
ICAgICAgIGdldE1ldGhvZEJ1aWxkZXIgPSBnZXRNZXRob2RPckRpZShidWlsZGVyQ2xhc3MsICJn
ZXQiICsgY2FtZWxDYXNlTmFtZSk7Ci0gICAgICAgIHR5cGUgPSBnZXRNZXRob2QuZ2V0UmV0dXJu
VHlwZSgpOwotICAgICAgICBzZXRNZXRob2QgPSBnZXRNZXRob2RPckRpZShidWlsZGVyQ2xhc3Ms
ICJzZXQiICsgY2FtZWxDYXNlTmFtZSwgdHlwZSk7Ci0gICAgICAgIGhhc01ldGhvZCA9Ci0gICAg
ICAgICAgICBoYXNIYXNNZXRob2QgPyBnZXRNZXRob2RPckRpZShtZXNzYWdlQ2xhc3MsICJoYXMi
ICsgY2FtZWxDYXNlTmFtZSkgOiBudWxsOwotICAgICAgICBoYXNNZXRob2RCdWlsZGVyID0KLSAg
ICAgICAgICAgIGhhc0hhc01ldGhvZCA/IGdldE1ldGhvZE9yRGllKGJ1aWxkZXJDbGFzcywgImhh
cyIgKyBjYW1lbENhc2VOYW1lKSA6IG51bGw7Ci0gICAgICAgIGNsZWFyTWV0aG9kID0gZ2V0TWV0
aG9kT3JEaWUoYnVpbGRlckNsYXNzLCAiY2xlYXIiICsgY2FtZWxDYXNlTmFtZSk7Ci0gICAgICAg
IGNhc2VNZXRob2QgPSBpc09uZW9mRmllbGQgPyBnZXRNZXRob2RPckRpZSgKLSAgICAgICAgICAg
IG1lc3NhZ2VDbGFzcywgImdldCIgKyBjb250YWluaW5nT25lb2ZDYW1lbENhc2VOYW1lICsgIkNh
c2UiKSA6IG51bGw7Ci0gICAgICAgIGNhc2VNZXRob2RCdWlsZGVyID0gaXNPbmVvZkZpZWxkID8g
Z2V0TWV0aG9kT3JEaWUoCi0gICAgICAgICAgICBidWlsZGVyQ2xhc3MsICJnZXQiICsgY29udGFp
bmluZ09uZW9mQ2FtZWxDYXNlTmFtZSArICJDYXNlIikgOiBudWxsOwotICAgICAgfQotCi0gICAg
ICAvLyBOb3RlOiAgV2UgdXNlIEphdmEgcmVmbGVjdGlvbiB0byBjYWxsIHB1YmxpYyBtZXRob2Rz
IHJhdGhlciB0aGFuCi0gICAgICAvLyAgIGFjY2VzcyBwcml2YXRlIGZpZWxkcyBkaXJlY3RseSBh
cyB0aGlzIGF2b2lkcyBydW50aW1lIHNlY3VyaXR5Ci0gICAgICAvLyAgIGNoZWNrcy4KLSAgICAg
IHByb3RlY3RlZCBmaW5hbCBDbGFzczw/PiB0eXBlOwotICAgICAgcHJvdGVjdGVkIGZpbmFsIE1l
dGhvZCBnZXRNZXRob2Q7Ci0gICAgICBwcm90ZWN0ZWQgZmluYWwgTWV0aG9kIGdldE1ldGhvZEJ1
aWxkZXI7Ci0gICAgICBwcm90ZWN0ZWQgZmluYWwgTWV0aG9kIHNldE1ldGhvZDsKLSAgICAgIHBy
b3RlY3RlZCBmaW5hbCBNZXRob2QgaGFzTWV0aG9kOwotICAgICAgcHJvdGVjdGVkIGZpbmFsIE1l
dGhvZCBoYXNNZXRob2RCdWlsZGVyOwotICAgICAgcHJvdGVjdGVkIGZpbmFsIE1ldGhvZCBjbGVh
ck1ldGhvZDsKLSAgICAgIHByb3RlY3RlZCBmaW5hbCBNZXRob2QgY2FzZU1ldGhvZDsKLSAgICAg
IHByb3RlY3RlZCBmaW5hbCBNZXRob2QgY2FzZU1ldGhvZEJ1aWxkZXI7Ci0gICAgICBwcm90ZWN0
ZWQgZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkOwotICAgICAgcHJvdGVjdGVkIGZpbmFsIGJv
b2xlYW4gaXNPbmVvZkZpZWxkOwotICAgICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gaGFzSGFz
TWV0aG9kOwotCi0gICAgICBwcml2YXRlIGludCBnZXRPbmVvZkZpZWxkTnVtYmVyKGZpbmFsIEdl
bmVyYXRlZE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICByZXR1cm4gKChJbnRlcm5hbC5FbnVt
TGl0ZSkgaW52b2tlT3JEaWUoY2FzZU1ldGhvZCwgbWVzc2FnZSkpLmdldE51bWJlcigpOwotICAg
ICAgfQotCi0gICAgICBwcml2YXRlIGludCBnZXRPbmVvZkZpZWxkTnVtYmVyKGZpbmFsIEdlbmVy
YXRlZE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgIHJldHVybiAoKEludGVybmFs
LkVudW1MaXRlKSBpbnZva2VPckRpZShjYXNlTWV0aG9kQnVpbGRlciwgYnVpbGRlcikpLmdldE51
bWJlcigpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBPYmplY3Qg
Z2V0KGZpbmFsIEdlbmVyYXRlZE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICByZXR1cm4gaW52
b2tlT3JEaWUoZ2V0TWV0aG9kLCBtZXNzYWdlKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIE9iamVjdCBnZXQoR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIp
IHsKLSAgICAgICAgcmV0dXJuIGludm9rZU9yRGllKGdldE1ldGhvZEJ1aWxkZXIsIGJ1aWxkZXIp
OwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdldFJhdyhm
aW5hbCBHZW5lcmF0ZWRNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgcmV0dXJuIGdldChtZXNz
YWdlKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIE9iamVjdCBnZXRS
YXcoR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgcmV0dXJuIGdl
dChidWlsZGVyKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
c2V0KGZpbmFsIEJ1aWxkZXIgYnVpbGRlciwgZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAg
IGludm9rZU9yRGllKHNldE1ldGhvZCwgYnVpbGRlciwgdmFsdWUpOwotICAgICAgfQotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdldFJlcGVhdGVkKGZpbmFsIEdlbmVyYXRl
ZE1lc3NhZ2UgbWVzc2FnZSwgZmluYWwgaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAiZ2V0UmVwZWF0ZWRGaWVs
ZCgpIGNhbGxlZCBvbiBhIHNpbmd1bGFyIGZpZWxkLiIpOwotICAgICAgfQotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdldFJlcGVhdGVkUmF3KGZpbmFsIEdlbmVyYXRlZE1l
c3NhZ2UgbWVzc2FnZSwgZmluYWwgaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAiZ2V0UmVwZWF0ZWRGaWVsZFJh
dygpIGNhbGxlZCBvbiBhIHNpbmd1bGFyIGZpZWxkLiIpOwotICAgICAgfQotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdldFJlcGVhdGVkKEdlbmVyYXRlZE1lc3NhZ2UuQnVp
bGRlciBidWlsZGVyLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAgICAgICJnZXRSZXBlYXRlZEZpZWxkKCkgY2FsbGVk
IG9uIGEgc2luZ3VsYXIgZmllbGQuIik7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyBPYmplY3QgZ2V0UmVwZWF0ZWRSYXcoR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyIGJ1
aWxkZXIsIGludCBpbmRleCkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRp
b25FeGNlcHRpb24oCi0gICAgICAgICAgImdldFJlcGVhdGVkRmllbGRSYXcoKSBjYWxsZWQgb24g
YSBzaW5ndWxhciBmaWVsZC4iKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgc2V0UmVwZWF0ZWQoZmluYWwgQnVpbGRlciBidWlsZGVyLCBmaW5hbCBpbnQgaW5k
ZXgsIGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRP
cGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgInNldFJlcGVhdGVkRmllbGQoKSBjYWxsZWQg
b24gYSBzaW5ndWxhciBmaWVsZC4iKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgYWRkUmVwZWF0ZWQoZmluYWwgQnVpbGRlciBidWlsZGVyLCBmaW5hbCBPYmpl
Y3QgdmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0
aW9uKAotICAgICAgICAgICJhZGRSZXBlYXRlZEZpZWxkKCkgY2FsbGVkIG9uIGEgc2luZ3VsYXIg
ZmllbGQuIik7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFu
IGhhcyhmaW5hbCBHZW5lcmF0ZWRNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgaWYgKCFoYXNI
YXNNZXRob2QpIHsKLSAgICAgICAgICBpZiAoaXNPbmVvZkZpZWxkKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2V0T25lb2ZGaWVsZE51bWJlcihtZXNzYWdlKSA9PSBmaWVsZC5nZXROdW1iZXIoKTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuICFnZXQobWVzc2FnZSkuZXF1YWxzKGZpZWxk
LmdldERlZmF1bHRWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKEJvb2xlYW4p
IGludm9rZU9yRGllKGhhc01ldGhvZCwgbWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyBib29sZWFuIGhhcyhHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXIgYnVp
bGRlcikgewotICAgICAgICBpZiAoIWhhc0hhc01ldGhvZCkgewotICAgICAgICAgIGlmIChpc09u
ZW9mRmllbGQpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRPbmVvZkZpZWxkTnVtYmVyKGJ1aWxk
ZXIpID09IGZpZWxkLmdldE51bWJlcigpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4g
IWdldChidWlsZGVyKS5lcXVhbHMoZmllbGQuZ2V0RGVmYXVsdFZhbHVlKCkpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAoQm9vbGVhbikgaW52b2tlT3JEaWUoaGFzTWV0aG9kQnVpbGRlciwg
YnVpbGRlcik7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBpbnQgZ2V0
UmVwZWF0ZWRDb3VudChmaW5hbCBHZW5lcmF0ZWRNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAg
dGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAgICAgICJnZXRS
ZXBlYXRlZEZpZWxkU2l6ZSgpIGNhbGxlZCBvbiBhIHNpbmd1bGFyIGZpZWxkLiIpOwotICAgICAg
fQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgaW50IGdldFJlcGVhdGVkQ291bnQoR2Vu
ZXJhdGVkTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3Vw
cG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAgICAgICJnZXRSZXBlYXRlZEZpZWxkU2l6
ZSgpIGNhbGxlZCBvbiBhIHNpbmd1bGFyIGZpZWxkLiIpOwotICAgICAgfQotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBjbGVhcihmaW5hbCBCdWlsZGVyIGJ1aWxkZXIpIHsKLSAg
ICAgICAgaW52b2tlT3JEaWUoY2xlYXJNZXRob2QsIGJ1aWxkZXIpOwotICAgICAgfQotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgTWVzc2FnZS5CdWlsZGVyIG5ld0J1aWxkZXIoKSB7Ci0g
ICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAg
ICAibmV3QnVpbGRlckZvckZpZWxkKCkgY2FsbGVkIG9uIGEgbm9uLU1lc3NhZ2UgdHlwZS4iKTsK
LSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIE1lc3NhZ2UuQnVpbGRlciBn
ZXRCdWlsZGVyKEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAiZ2V0Rmll
bGRCdWlsZGVyKCkgY2FsbGVkIG9uIGEgbm9uLU1lc3NhZ2UgdHlwZS4iKTsKLSAgICAgIH0KLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIE1lc3NhZ2UuQnVpbGRlciBnZXRSZXBlYXRlZEJ1
aWxkZXIoR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIsIGludCBpbmRleCkgewotICAg
ICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAg
ImdldFJlcGVhdGVkRmllbGRCdWlsZGVyKCkgY2FsbGVkIG9uIGEgbm9uLU1lc3NhZ2UgdHlwZS4i
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBSZXBlYXRlZEZp
ZWxkQWNjZXNzb3IgaW1wbGVtZW50cyBGaWVsZEFjY2Vzc29yIHsKLSAgICAgIHByb3RlY3RlZCBm
aW5hbCBDbGFzcyB0eXBlOwotICAgICAgcHJvdGVjdGVkIGZpbmFsIE1ldGhvZCBnZXRNZXRob2Q7
Ci0gICAgICBwcm90ZWN0ZWQgZmluYWwgTWV0aG9kIGdldE1ldGhvZEJ1aWxkZXI7Ci0gICAgICBw
cm90ZWN0ZWQgZmluYWwgTWV0aG9kIGdldFJlcGVhdGVkTWV0aG9kOwotICAgICAgcHJvdGVjdGVk
IGZpbmFsIE1ldGhvZCBnZXRSZXBlYXRlZE1ldGhvZEJ1aWxkZXI7Ci0gICAgICBwcm90ZWN0ZWQg
ZmluYWwgTWV0aG9kIHNldFJlcGVhdGVkTWV0aG9kOwotICAgICAgcHJvdGVjdGVkIGZpbmFsIE1l
dGhvZCBhZGRSZXBlYXRlZE1ldGhvZDsKLSAgICAgIHByb3RlY3RlZCBmaW5hbCBNZXRob2QgZ2V0
Q291bnRNZXRob2Q7Ci0gICAgICBwcm90ZWN0ZWQgZmluYWwgTWV0aG9kIGdldENvdW50TWV0aG9k
QnVpbGRlcjsKLSAgICAgIHByb3RlY3RlZCBmaW5hbCBNZXRob2QgY2xlYXJNZXRob2Q7Ci0KLSAg
ICAgIFJlcGVhdGVkRmllbGRBY2Nlc3NvcigKLSAgICAgICAgICBmaW5hbCBGaWVsZERlc2NyaXB0
b3IgZGVzY3JpcHRvciwgZmluYWwgU3RyaW5nIGNhbWVsQ2FzZU5hbWUsCi0gICAgICAgICAgZmlu
YWwgQ2xhc3M8PyBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2U+IG1lc3NhZ2VDbGFzcywKLSAgICAg
ICAgICBmaW5hbCBDbGFzczw/IGV4dGVuZHMgQnVpbGRlcj4gYnVpbGRlckNsYXNzKSB7Ci0gICAg
ICAgIGdldE1ldGhvZCA9IGdldE1ldGhvZE9yRGllKG1lc3NhZ2VDbGFzcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImdldCIgKyBjYW1lbENhc2VOYW1lICsgIkxpc3QiKTsK
LSAgICAgICAgZ2V0TWV0aG9kQnVpbGRlciA9IGdldE1ldGhvZE9yRGllKGJ1aWxkZXJDbGFzcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldCIgKyBjYW1lbENhc2VOYW1l
ICsgIkxpc3QiKTsKLSAgICAgICAgZ2V0UmVwZWF0ZWRNZXRob2QgPQotICAgICAgICAgICAgZ2V0
TWV0aG9kT3JEaWUobWVzc2FnZUNsYXNzLCAiZ2V0IiArIGNhbWVsQ2FzZU5hbWUsIEludGVnZXIu
VFlQRSk7Ci0gICAgICAgIGdldFJlcGVhdGVkTWV0aG9kQnVpbGRlciA9Ci0gICAgICAgICAgICBn
ZXRNZXRob2RPckRpZShidWlsZGVyQ2xhc3MsICJnZXQiICsgY2FtZWxDYXNlTmFtZSwgSW50ZWdl
ci5UWVBFKTsKLSAgICAgICAgdHlwZSA9IGdldFJlcGVhdGVkTWV0aG9kLmdldFJldHVyblR5cGUo
KTsKLSAgICAgICAgc2V0UmVwZWF0ZWRNZXRob2QgPQotICAgICAgICAgICAgZ2V0TWV0aG9kT3JE
aWUoYnVpbGRlckNsYXNzLCAic2V0IiArIGNhbWVsQ2FzZU5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRlZ2VyLlRZUEUsIHR5cGUpOwotICAgICAgICBhZGRSZXBlYXRlZE1ldGhv
ZCA9Ci0gICAgICAgICAgICBnZXRNZXRob2RPckRpZShidWlsZGVyQ2xhc3MsICJhZGQiICsgY2Ft
ZWxDYXNlTmFtZSwgdHlwZSk7Ci0gICAgICAgIGdldENvdW50TWV0aG9kID0KLSAgICAgICAgICAg
IGdldE1ldGhvZE9yRGllKG1lc3NhZ2VDbGFzcywgImdldCIgKyBjYW1lbENhc2VOYW1lICsgIkNv
dW50Iik7Ci0gICAgICAgIGdldENvdW50TWV0aG9kQnVpbGRlciA9Ci0gICAgICAgICAgICBnZXRN
ZXRob2RPckRpZShidWlsZGVyQ2xhc3MsICJnZXQiICsgY2FtZWxDYXNlTmFtZSArICJDb3VudCIp
OwotCi0gICAgICAgIGNsZWFyTWV0aG9kID0gZ2V0TWV0aG9kT3JEaWUoYnVpbGRlckNsYXNzLCAi
Y2xlYXIiICsgY2FtZWxDYXNlTmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIE9iamVjdCBnZXQoZmluYWwgR2VuZXJhdGVkTWVzc2FnZSBtZXNzYWdlKSB7Ci0g
ICAgICAgIHJldHVybiBpbnZva2VPckRpZShnZXRNZXRob2QsIG1lc3NhZ2UpOwotICAgICAgfQot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdldChHZW5lcmF0ZWRNZXNzYWdl
LkJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICByZXR1cm4gaW52b2tlT3JEaWUoZ2V0TWV0aG9k
QnVpbGRlciwgYnVpbGRlcik7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyBPYmplY3QgZ2V0UmF3KGZpbmFsIEdlbmVyYXRlZE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAg
ICByZXR1cm4gZ2V0KG1lc3NhZ2UpOwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgT2JqZWN0IGdldFJhdyhHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikgewot
ICAgICAgICByZXR1cm4gZ2V0KGJ1aWxkZXIpOwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgdm9pZCBzZXQoZmluYWwgQnVpbGRlciBidWlsZGVyLCBmaW5hbCBPYmplY3Qg
dmFsdWUpIHsKLSAgICAgICAgLy8gQWRkIGFsbCB0aGUgZWxlbWVudHMgaW5kaXZpZHVhbGx5LiAg
VGhpcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgotICAgICAgICAvLyAxKSBWZXJpZmllcyB0aGF0IGVh
Y2ggZWxlbWVudCBoYXMgdGhlIGNvcnJlY3QgdHlwZS4KLSAgICAgICAgLy8gMikgSW5zdXJlcyB0
aGF0IHRoZSBjYWxsZXIgY2Fubm90IG1vZGlmeSB0aGUgbGlzdCBsYXRlciBvbiBhbmQKLSAgICAg
ICAgLy8gICAgaGF2ZSB0aGUgbW9kaWZpY2F0aW9ucyBiZSByZWZsZWN0ZWQgaW4gdGhlIG1lc3Nh
Z2UuCi0gICAgICAgIGNsZWFyKGJ1aWxkZXIpOwotICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBl
bGVtZW50IDogKExpc3Q8Pz4pIHZhbHVlKSB7Ci0gICAgICAgICAgYWRkUmVwZWF0ZWQoYnVpbGRl
ciwgZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIE9iamVjdCBnZXRSZXBlYXRlZChmaW5hbCBHZW5lcmF0ZWRNZXNzYWdlIG1lc3NhZ2Us
IGZpbmFsIGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gaW52b2tlT3JEaWUoZ2V0UmVwZWF0
ZWRNZXRob2QsIG1lc3NhZ2UsIGluZGV4KTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIE9iamVjdCBnZXRSZXBlYXRlZChHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXIgYnVp
bGRlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIHJldHVybiBpbnZva2VPckRpZShnZXRSZXBlYXRl
ZE1ldGhvZEJ1aWxkZXIsIGJ1aWxkZXIsIGluZGV4KTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIE9iamVjdCBnZXRSZXBlYXRlZFJhdyhHZW5lcmF0ZWRNZXNzYWdlIG1l
c3NhZ2UsIGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gZ2V0UmVwZWF0ZWQobWVzc2FnZSwg
aW5kZXgpOwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdl
dFJlcGVhdGVkUmF3KEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyLCBpbnQgaW5kZXgp
IHsKLSAgICAgICAgcmV0dXJuIGdldFJlcGVhdGVkKGJ1aWxkZXIsIGluZGV4KTsKLSAgICAgIH0K
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0UmVwZWF0ZWQoZmluYWwgQnVp
bGRlciBidWlsZGVyLCBmaW5hbCBpbnQgaW5kZXgsIGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAg
ICAgICBpbnZva2VPckRpZShzZXRSZXBlYXRlZE1ldGhvZCwgYnVpbGRlciwgaW5kZXgsIHZhbHVl
KTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgYWRkUmVwZWF0
ZWQoZmluYWwgQnVpbGRlciBidWlsZGVyLCBmaW5hbCBPYmplY3QgdmFsdWUpIHsKLSAgICAgICAg
aW52b2tlT3JEaWUoYWRkUmVwZWF0ZWRNZXRob2QsIGJ1aWxkZXIsIHZhbHVlKTsKLSAgICAgIH0K
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4gaGFzKGZpbmFsIEdlbmVyYXRl
ZE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRp
b25FeGNlcHRpb24oCi0gICAgICAgICAgImhhc0ZpZWxkKCkgY2FsbGVkIG9uIGEgcmVwZWF0ZWQg
ZmllbGQuIik7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFu
IGhhcyhHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICB0aHJvdyBu
ZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgImhhc0ZpZWxkKCkg
Y2FsbGVkIG9uIGEgcmVwZWF0ZWQgZmllbGQuIik7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyBpbnQgZ2V0UmVwZWF0ZWRDb3VudChmaW5hbCBHZW5lcmF0ZWRNZXNzYWdl
IG1lc3NhZ2UpIHsKLSAgICAgICAgcmV0dXJuIChJbnRlZ2VyKSBpbnZva2VPckRpZShnZXRDb3Vu
dE1ldGhvZCwgbWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyBpbnQgZ2V0UmVwZWF0ZWRDb3VudChHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikg
ewotICAgICAgICByZXR1cm4gKEludGVnZXIpIGludm9rZU9yRGllKGdldENvdW50TWV0aG9kQnVp
bGRlciwgYnVpbGRlcik7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIGNsZWFyKGZpbmFsIEJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICBpbnZva2VPckRpZShj
bGVhck1ldGhvZCwgYnVpbGRlcik7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyBNZXNzYWdlLkJ1aWxkZXIgbmV3QnVpbGRlcigpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVu
c3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAgICAgICJuZXdCdWlsZGVyRm9yRmll
bGQoKSBjYWxsZWQgb24gYSBub24tTWVzc2FnZSB0eXBlLiIpOwotICAgICAgfQotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgTWVzc2FnZS5CdWlsZGVyIGdldEJ1aWxkZXIoR2VuZXJhdGVk
TWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAgICAgICJnZXRGaWVsZEJ1aWxkZXIoKSBjYWxsZWQg
b24gYSBub24tTWVzc2FnZSB0eXBlLiIpOwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgTWVzc2FnZS5CdWlsZGVyIGdldFJlcGVhdGVkQnVpbGRlcihHZW5lcmF0ZWRNZXNz
YWdlLkJ1aWxkZXIgYnVpbGRlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAiZ2V0UmVwZWF0ZWRGaWVsZEJ1
aWxkZXIoKSBjYWxsZWQgb24gYSBub24tTWVzc2FnZSB0eXBlLiIpOwotICAgICAgfQotICAgIH0K
LQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE1hcEZpZWxkQWNjZXNzb3IgaW1wbGVtZW50cyBG
aWVsZEFjY2Vzc29yIHsKLSAgICAgIE1hcEZpZWxkQWNjZXNzb3IoCi0gICAgICAgICAgZmluYWwg
RmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IsIGZpbmFsIFN0cmluZyBjYW1lbENhc2VOYW1lLAot
ICAgICAgICAgIGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlPiBtZXNzYWdl
Q2xhc3MsCi0gICAgICAgICAgZmluYWwgQ2xhc3M8PyBleHRlbmRzIEJ1aWxkZXI+IGJ1aWxkZXJD
bGFzcykgewotICAgICAgICBmaWVsZCA9IGRlc2NyaXB0b3I7Ci0gICAgICAgIE1ldGhvZCBnZXRE
ZWZhdWx0SW5zdGFuY2VNZXRob2QgPQotICAgICAgICAgICAgZ2V0TWV0aG9kT3JEaWUobWVzc2Fn
ZUNsYXNzLCAiZ2V0RGVmYXVsdEluc3RhbmNlIik7Ci0gICAgICAgIE1hcEZpZWxkIGRlZmF1bHRN
YXBGaWVsZCA9IGdldE1hcEZpZWxkKAotICAgICAgICAgICAgKEdlbmVyYXRlZE1lc3NhZ2UpIGlu
dm9rZU9yRGllKGdldERlZmF1bHRJbnN0YW5jZU1ldGhvZCwgbnVsbCkpOwotICAgICAgICBtYXBF
bnRyeU1lc3NhZ2VEZWZhdWx0SW5zdGFuY2UgPQotICAgICAgICAgICAgZGVmYXVsdE1hcEZpZWxk
LmdldE1hcEVudHJ5TWVzc2FnZURlZmF1bHRJbnN0YW5jZSgpOwotICAgICAgfQotCi0gICAgICBw
cml2YXRlIGZpbmFsIEZpZWxkRGVzY3JpcHRvciBmaWVsZDsKLSAgICAgIHByaXZhdGUgZmluYWwg
TWVzc2FnZSBtYXBFbnRyeU1lc3NhZ2VEZWZhdWx0SW5zdGFuY2U7Ci0KLSAgICAgIHByaXZhdGUg
TWFwRmllbGQ8PywgPz4gZ2V0TWFwRmllbGQoR2VuZXJhdGVkTWVzc2FnZSBtZXNzYWdlKSB7Ci0g
ICAgICAgIHJldHVybiAoTWFwRmllbGQ8PywgPz4pIG1lc3NhZ2UuaW50ZXJuYWxHZXRNYXBGaWVs
ZChmaWVsZC5nZXROdW1iZXIoKSk7Ci0gICAgICB9Ci0KLSAgICAgIHByaXZhdGUgTWFwRmllbGQ8
PywgPz4gZ2V0TWFwRmllbGQoR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAg
ICAgICAgcmV0dXJuIChNYXBGaWVsZDw/LCA/PikgYnVpbGRlci5pbnRlcm5hbEdldE1hcEZpZWxk
KGZpZWxkLmdldE51bWJlcigpKTsKLSAgICAgIH0KLQotICAgICAgcHJpdmF0ZSBNYXBGaWVsZDw/
LCA/PiBnZXRNdXRhYmxlTWFwRmllbGQoCi0gICAgICAgICAgR2VuZXJhdGVkTWVzc2FnZS5CdWls
ZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgcmV0dXJuIChNYXBGaWVsZDw/LCA/PikgYnVpbGRlci5p
bnRlcm5hbEdldE11dGFibGVNYXBGaWVsZCgKLSAgICAgICAgICAgIGZpZWxkLmdldE51bWJlcigp
KTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdldChH
ZW5lcmF0ZWRNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgTGlzdCByZXN1bHQgPSBuZXcgQXJy
YXlMaXN0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0UmVwZWF0ZWRDb3VudCht
ZXNzYWdlKTsgaSsrKSB7Ci0gICAgICAgICAgcmVzdWx0LmFkZChnZXRSZXBlYXRlZChtZXNzYWdl
LCBpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJs
ZUxpc3QocmVzdWx0KTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
T2JqZWN0IGdldChCdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgTGlzdCByZXN1bHQgPSBuZXcg
QXJyYXlMaXN0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0UmVwZWF0ZWRDb3Vu
dChidWlsZGVyKTsgaSsrKSB7Ci0gICAgICAgICAgcmVzdWx0LmFkZChnZXRSZXBlYXRlZChidWls
ZGVyLCBpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZp
YWJsZUxpc3QocmVzdWx0KTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgT2JqZWN0IGdldFJhdyhHZW5lcmF0ZWRNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgcmV0
dXJuIGdldChtZXNzYWdlKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgT2JqZWN0IGdldFJhdyhHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikgewotICAg
ICAgICByZXR1cm4gZ2V0KGJ1aWxkZXIpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHNldChCdWlsZGVyIGJ1aWxkZXIsIE9iamVjdCB2YWx1ZSkgewotICAg
ICAgICBjbGVhcihidWlsZGVyKTsKLSAgICAgICAgZm9yIChPYmplY3QgZW50cnkgOiAoTGlzdCkg
dmFsdWUpIHsKLSAgICAgICAgICBhZGRSZXBlYXRlZChidWlsZGVyLCBlbnRyeSk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdldFJl
cGVhdGVkKEdlbmVyYXRlZE1lc3NhZ2UgbWVzc2FnZSwgaW50IGluZGV4KSB7Ci0gICAgICAgIHJl
dHVybiBnZXRNYXBGaWVsZChtZXNzYWdlKS5nZXRMaXN0KCkuZ2V0KGluZGV4KTsKLSAgICAgIH0K
LQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdldFJlcGVhdGVkKEJ1aWxk
ZXIgYnVpbGRlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIHJldHVybiBnZXRNYXBGaWVsZChidWls
ZGVyKS5nZXRMaXN0KCkuZ2V0KGluZGV4KTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgT2JqZWN0IGdldFJlcGVhdGVkUmF3KEdlbmVyYXRlZE1lc3NhZ2UgbWVzc2Fn
ZSwgaW50IGluZGV4KSB7Ci0gICAgICAgIHJldHVybiBnZXRSZXBlYXRlZChtZXNzYWdlLCBpbmRl
eCk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIE9iamVjdCBnZXRS
ZXBlYXRlZFJhdyhCdWlsZGVyIGJ1aWxkZXIsIGludCBpbmRleCkgewotICAgICAgICByZXR1cm4g
Z2V0UmVwZWF0ZWQoYnVpbGRlciwgaW5kZXgpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyB2b2lkIHNldFJlcGVhdGVkKEJ1aWxkZXIgYnVpbGRlciwgaW50IGluZGV4
LCBPYmplY3QgdmFsdWUpIHsKLSAgICAgICAgZ2V0TXV0YWJsZU1hcEZpZWxkKGJ1aWxkZXIpLmdl
dE11dGFibGVMaXN0KCkuc2V0KGluZGV4LCAoTWVzc2FnZSkgdmFsdWUpOwotICAgICAgfQotCi0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIGFkZFJlcGVhdGVkKEJ1aWxkZXIgYnVp
bGRlciwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIGdldE11dGFibGVNYXBGaWVsZChidWlsZGVy
KS5nZXRNdXRhYmxlTGlzdCgpLmFkZCgoTWVzc2FnZSkgdmFsdWUpOwotICAgICAgfQotCi0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFuIGhhcyhHZW5lcmF0ZWRNZXNzYWdlIG1l
c3NhZ2UpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u
KAotICAgICAgICAgICAgImhhc0ZpZWxkKCkgaXMgbm90IHN1cHBvcnRlZCBmb3IgcmVwZWF0ZWQg
ZmllbGRzLiIpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29s
ZWFuIGhhcyhCdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uKAotICAgICAgICAgICAgImhhc0ZpZWxkKCkgaXMgbm90IHN1cHBv
cnRlZCBmb3IgcmVwZWF0ZWQgZmllbGRzLiIpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyBpbnQgZ2V0UmVwZWF0ZWRDb3VudChHZW5lcmF0ZWRNZXNzYWdlIG1lc3Nh
Z2UpIHsKLSAgICAgICAgcmV0dXJuIGdldE1hcEZpZWxkKG1lc3NhZ2UpLmdldExpc3QoKS5zaXpl
KCk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGludCBnZXRSZXBl
YXRlZENvdW50KEJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICByZXR1cm4gZ2V0TWFwRmllbGQo
YnVpbGRlcikuZ2V0TGlzdCgpLnNpemUoKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgdm9pZCBjbGVhcihCdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgZ2V0TXV0
YWJsZU1hcEZpZWxkKGJ1aWxkZXIpLmdldE11dGFibGVMaXN0KCkuY2xlYXIoKTsKLSAgICAgIH0K
LQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgY29tLmdvb2dsZS5wcm90b2J1Zi5NZXNz
YWdlLkJ1aWxkZXIgbmV3QnVpbGRlcigpIHsKLSAgICAgICAgcmV0dXJuIG1hcEVudHJ5TWVzc2Fn
ZURlZmF1bHRJbnN0YW5jZS5uZXdCdWlsZGVyRm9yVHlwZSgpOwotICAgICAgfQotCi0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBjb20uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2UuQnVpbGRl
ciBnZXRCdWlsZGVyKEJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBw
b3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgICAiTmVzdGVkIGJ1aWxkZXIgbm90
IHN1cHBvcnRlZCBmb3IgbWFwIGZpZWxkcy4iKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgY29tLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlLkJ1aWxkZXIgZ2V0UmVw
ZWF0ZWRCdWlsZGVyKEJ1aWxkZXIgYnVpbGRlciwgaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93
IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAgICJOZXN0ZWQg
YnVpbGRlciBub3Qgc3VwcG9ydGVkIGZvciBtYXAgZmllbGRzLiIpOwotICAgICAgfQotICAgIH0K
LQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgU2luZ3Vs
YXJFbnVtRmllbGRBY2Nlc3NvcgotICAgICAgICBleHRlbmRzIFNpbmd1bGFyRmllbGRBY2Nlc3Nv
ciB7Ci0gICAgICBTaW5ndWxhckVudW1GaWVsZEFjY2Vzc29yKAotICAgICAgICAgIGZpbmFsIEZp
ZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBmaW5hbCBTdHJpbmcgY2FtZWxDYXNlTmFtZSwKLSAg
ICAgICAgICBmaW5hbCBDbGFzczw/IGV4dGVuZHMgR2VuZXJhdGVkTWVzc2FnZT4gbWVzc2FnZUNs
YXNzLAotICAgICAgICAgIGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBCdWlsZGVyPiBidWlsZGVyQ2xh
c3MsCi0gICAgICAgICAgZmluYWwgU3RyaW5nIGNvbnRhaW5pbmdPbmVvZkNhbWVsQ2FzZU5hbWUp
IHsKLSAgICAgICAgc3VwZXIoZGVzY3JpcHRvciwgY2FtZWxDYXNlTmFtZSwgbWVzc2FnZUNsYXNz
LCBidWlsZGVyQ2xhc3MsIGNvbnRhaW5pbmdPbmVvZkNhbWVsQ2FzZU5hbWUpOwotCi0gICAgICAg
IGVudW1EZXNjcmlwdG9yID0gZGVzY3JpcHRvci5nZXRFbnVtVHlwZSgpOwotCi0gICAgICAgIHZh
bHVlT2ZNZXRob2QgPSBnZXRNZXRob2RPckRpZSh0eXBlLCAidmFsdWVPZiIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtVmFsdWVEZXNjcmlwdG9yLmNsYXNzKTsK
LSAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yTWV0aG9kID0KLSAgICAgICAgICBnZXRNZXRob2RP
ckRpZSh0eXBlLCAiZ2V0VmFsdWVEZXNjcmlwdG9yIik7Ci0KLSAgICAgICAgc3VwcG9ydFVua25v
d25FbnVtVmFsdWUgPSBkZXNjcmlwdG9yLmdldEZpbGUoKS5zdXBwb3J0c1Vua25vd25FbnVtVmFs
dWUoKTsKLSAgICAgICAgaWYgKHN1cHBvcnRVbmtub3duRW51bVZhbHVlKSB7Ci0gICAgICAgICAg
Z2V0VmFsdWVNZXRob2QgPQotICAgICAgICAgICAgICBnZXRNZXRob2RPckRpZShtZXNzYWdlQ2xh
c3MsICJnZXQiICsgY2FtZWxDYXNlTmFtZSArICJWYWx1ZSIpOwotICAgICAgICAgIGdldFZhbHVl
TWV0aG9kQnVpbGRlciA9Ci0gICAgICAgICAgICAgIGdldE1ldGhvZE9yRGllKGJ1aWxkZXJDbGFz
cywgImdldCIgKyBjYW1lbENhc2VOYW1lICsgIlZhbHVlIik7Ci0gICAgICAgICAgc2V0VmFsdWVN
ZXRob2QgPQotICAgICAgICAgICAgICBnZXRNZXRob2RPckRpZShidWlsZGVyQ2xhc3MsICJzZXQi
ICsgY2FtZWxDYXNlTmFtZSArICJWYWx1ZSIsIGludC5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAg
IH0KLQotICAgICAgcHJpdmF0ZSBFbnVtRGVzY3JpcHRvciBlbnVtRGVzY3JpcHRvcjsKLQotICAg
ICAgcHJpdmF0ZSBNZXRob2QgdmFsdWVPZk1ldGhvZDsKLSAgICAgIHByaXZhdGUgTWV0aG9kIGdl
dFZhbHVlRGVzY3JpcHRvck1ldGhvZDsKLQotICAgICAgcHJpdmF0ZSBib29sZWFuIHN1cHBvcnRV
bmtub3duRW51bVZhbHVlOwotICAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0VmFsdWVNZXRob2Q7Ci0g
ICAgICBwcml2YXRlIE1ldGhvZCBnZXRWYWx1ZU1ldGhvZEJ1aWxkZXI7Ci0gICAgICBwcml2YXRl
IE1ldGhvZCBzZXRWYWx1ZU1ldGhvZDsKLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
T2JqZWN0IGdldChmaW5hbCBHZW5lcmF0ZWRNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgaWYg
KHN1cHBvcnRVbmtub3duRW51bVZhbHVlKSB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gKEludGVn
ZXIpIGludm9rZU9yRGllKGdldFZhbHVlTWV0aG9kLCBtZXNzYWdlKTsKLSAgICAgICAgICByZXR1
cm4gZW51bURlc2NyaXB0b3IuZmluZFZhbHVlQnlOdW1iZXJDcmVhdGluZ0lmVW5rbm93bih2YWx1
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGludm9rZU9yRGllKGdldFZhbHVlRGVzY3Jp
cHRvck1ldGhvZCwgc3VwZXIuZ2V0KG1lc3NhZ2UpKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdldChmaW5hbCBHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxk
ZXIgYnVpbGRlcikgewotICAgICAgICBpZiAoc3VwcG9ydFVua25vd25FbnVtVmFsdWUpIHsKLSAg
ICAgICAgICBpbnQgdmFsdWUgPSAoSW50ZWdlcikgaW52b2tlT3JEaWUoZ2V0VmFsdWVNZXRob2RC
dWlsZGVyLCBidWlsZGVyKTsKLSAgICAgICAgICByZXR1cm4gZW51bURlc2NyaXB0b3IuZmluZFZh
bHVlQnlOdW1iZXJDcmVhdGluZ0lmVW5rbm93bih2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGludm9rZU9yRGllKGdldFZhbHVlRGVzY3JpcHRvck1ldGhvZCwgc3VwZXIuZ2V0KGJ1
aWxkZXIpKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBz
ZXQoZmluYWwgQnVpbGRlciBidWlsZGVyLCBmaW5hbCBPYmplY3QgdmFsdWUpIHsKLSAgICAgICAg
aWYgKHN1cHBvcnRVbmtub3duRW51bVZhbHVlKSB7Ci0gICAgICAgICAgaW52b2tlT3JEaWUoc2V0
VmFsdWVNZXRob2QsIGJ1aWxkZXIsCi0gICAgICAgICAgICAgICgoRW51bVZhbHVlRGVzY3JpcHRv
cikgdmFsdWUpLmdldE51bWJlcigpKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgc3VwZXIuc2V0KGJ1aWxkZXIsIGludm9rZU9yRGllKHZhbHVlT2ZNZXRob2QsIG51bGws
IHZhbHVlKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xh
c3MgUmVwZWF0ZWRFbnVtRmllbGRBY2Nlc3NvcgotICAgICAgICBleHRlbmRzIFJlcGVhdGVkRmll
bGRBY2Nlc3NvciB7Ci0gICAgICBSZXBlYXRlZEVudW1GaWVsZEFjY2Vzc29yKAotICAgICAgICAg
IGZpbmFsIEZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBmaW5hbCBTdHJpbmcgY2FtZWxDYXNl
TmFtZSwKLSAgICAgICAgICBmaW5hbCBDbGFzczw/IGV4dGVuZHMgR2VuZXJhdGVkTWVzc2FnZT4g
bWVzc2FnZUNsYXNzLAotICAgICAgICAgIGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBCdWlsZGVyPiBi
dWlsZGVyQ2xhc3MpIHsKLSAgICAgICAgc3VwZXIoZGVzY3JpcHRvciwgY2FtZWxDYXNlTmFtZSwg
bWVzc2FnZUNsYXNzLCBidWlsZGVyQ2xhc3MpOwotCi0gICAgICAgIGVudW1EZXNjcmlwdG9yID0g
ZGVzY3JpcHRvci5nZXRFbnVtVHlwZSgpOwotCi0gICAgICAgIHZhbHVlT2ZNZXRob2QgPSBnZXRN
ZXRob2RPckRpZSh0eXBlLCAidmFsdWVPZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFbnVtVmFsdWVEZXNjcmlwdG9yLmNsYXNzKTsKLSAgICAgICAgZ2V0VmFsdWVE
ZXNjcmlwdG9yTWV0aG9kID0KLSAgICAgICAgICBnZXRNZXRob2RPckRpZSh0eXBlLCAiZ2V0VmFs
dWVEZXNjcmlwdG9yIik7Ci0KLSAgICAgICAgc3VwcG9ydFVua25vd25FbnVtVmFsdWUgPSBkZXNj
cmlwdG9yLmdldEZpbGUoKS5zdXBwb3J0c1Vua25vd25FbnVtVmFsdWUoKTsKLSAgICAgICAgaWYg
KHN1cHBvcnRVbmtub3duRW51bVZhbHVlKSB7Ci0gICAgICAgICAgZ2V0UmVwZWF0ZWRWYWx1ZU1l
dGhvZCA9Ci0gICAgICAgICAgICAgIGdldE1ldGhvZE9yRGllKG1lc3NhZ2VDbGFzcywgImdldCIg
KyBjYW1lbENhc2VOYW1lICsgIlZhbHVlIiwgaW50LmNsYXNzKTsKLSAgICAgICAgICBnZXRSZXBl
YXRlZFZhbHVlTWV0aG9kQnVpbGRlciA9Ci0gICAgICAgICAgICAgIGdldE1ldGhvZE9yRGllKGJ1
aWxkZXJDbGFzcywgImdldCIgKyBjYW1lbENhc2VOYW1lICsgIlZhbHVlIiwgaW50LmNsYXNzKTsK
LSAgICAgICAgICBzZXRSZXBlYXRlZFZhbHVlTWV0aG9kID0KLSAgICAgICAgICAgICAgZ2V0TWV0
aG9kT3JEaWUoYnVpbGRlckNsYXNzLCAic2V0IiArIGNhbWVsQ2FzZU5hbWUgKyAiVmFsdWUiLCBp
bnQuY2xhc3MsIGludC5jbGFzcyk7Ci0gICAgICAgICAgYWRkUmVwZWF0ZWRWYWx1ZU1ldGhvZCA9
Ci0gICAgICAgICAgICAgIGdldE1ldGhvZE9yRGllKGJ1aWxkZXJDbGFzcywgImFkZCIgKyBjYW1l
bENhc2VOYW1lICsgIlZhbHVlIiwgaW50LmNsYXNzKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
ICAgcHJpdmF0ZSBFbnVtRGVzY3JpcHRvciBlbnVtRGVzY3JpcHRvcjsKLQotICAgICAgcHJpdmF0
ZSBmaW5hbCBNZXRob2QgdmFsdWVPZk1ldGhvZDsKLSAgICAgIHByaXZhdGUgZmluYWwgTWV0aG9k
IGdldFZhbHVlRGVzY3JpcHRvck1ldGhvZDsKLQotICAgICAgcHJpdmF0ZSBib29sZWFuIHN1cHBv
cnRVbmtub3duRW51bVZhbHVlOwotICAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0UmVwZWF0ZWRWYWx1
ZU1ldGhvZDsKLSAgICAgIHByaXZhdGUgTWV0aG9kIGdldFJlcGVhdGVkVmFsdWVNZXRob2RCdWls
ZGVyOwotICAgICAgcHJpdmF0ZSBNZXRob2Qgc2V0UmVwZWF0ZWRWYWx1ZU1ldGhvZDsKLSAgICAg
IHByaXZhdGUgTWV0aG9kIGFkZFJlcGVhdGVkVmFsdWVNZXRob2Q7Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgICBwdWJsaWMgT2Jq
ZWN0IGdldChmaW5hbCBHZW5lcmF0ZWRNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgZmluYWwg
TGlzdCBuZXdMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9
IGdldFJlcGVhdGVkQ291bnQobWVzc2FnZSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgbmV3TGlzdC5hZGQoZ2V0UmVwZWF0ZWQobWVzc2FnZSwg
aSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVM
aXN0KG5ld0xpc3QpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIEBTdXBwcmVz
c1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgICAgcHVibGljIE9iamVjdCBnZXQoZmluYWwgR2Vu
ZXJhdGVkTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgZmluYWwgTGlzdCBuZXdM
aXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9IGdldFJlcGVh
dGVkQ291bnQoYnVpbGRlcik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgbmV3TGlzdC5hZGQoZ2V0UmVwZWF0ZWQoYnVpbGRlciwgaSkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KG5ld0xp
c3QpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBPYmplY3QgZ2V0
UmVwZWF0ZWQoZmluYWwgR2VuZXJhdGVkTWVzc2FnZSBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKHN1cHBvcnRV
bmtub3duRW51bVZhbHVlKSB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gKEludGVnZXIpIGludm9r
ZU9yRGllKGdldFJlcGVhdGVkVmFsdWVNZXRob2QsIG1lc3NhZ2UsIGluZGV4KTsKLSAgICAgICAg
ICByZXR1cm4gZW51bURlc2NyaXB0b3IuZmluZFZhbHVlQnlOdW1iZXJDcmVhdGluZ0lmVW5rbm93
bih2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGludm9rZU9yRGllKGdldFZhbHVl
RGVzY3JpcHRvck1ldGhvZCwKLSAgICAgICAgICBzdXBlci5nZXRSZXBlYXRlZChtZXNzYWdlLCBp
bmRleCkpOwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgT2JqZWN0IGdl
dFJlcGVhdGVkKGZpbmFsIEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYg
KHN1cHBvcnRVbmtub3duRW51bVZhbHVlKSB7Ci0gICAgICAgICAgaW50IHZhbHVlID0gKEludGVn
ZXIpIGludm9rZU9yRGllKGdldFJlcGVhdGVkVmFsdWVNZXRob2RCdWlsZGVyLCBidWlsZGVyLCBp
bmRleCk7Ci0gICAgICAgICAgcmV0dXJuIGVudW1EZXNjcmlwdG9yLmZpbmRWYWx1ZUJ5TnVtYmVy
Q3JlYXRpbmdJZlVua25vd24odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbnZv
a2VPckRpZShnZXRWYWx1ZURlc2NyaXB0b3JNZXRob2QsCi0gICAgICAgICAgc3VwZXIuZ2V0UmVw
ZWF0ZWQoYnVpbGRlciwgaW5kZXgpKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgc2V0UmVwZWF0ZWQoZmluYWwgQnVpbGRlciBidWlsZGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGluZGV4LCBmaW5hbCBPYmplY3QgdmFsdWUp
IHsKLSAgICAgICAgaWYgKHN1cHBvcnRVbmtub3duRW51bVZhbHVlKSB7Ci0gICAgICAgICAgaW52
b2tlT3JEaWUoc2V0UmVwZWF0ZWRWYWx1ZU1ldGhvZCwgYnVpbGRlciwgaW5kZXgsCi0gICAgICAg
ICAgICAgICgoRW51bVZhbHVlRGVzY3JpcHRvcikgdmFsdWUpLmdldE51bWJlcigpKTsKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3VwZXIuc2V0UmVwZWF0ZWQoYnVpbGRl
ciwgaW5kZXgsIGludm9rZU9yRGllKHZhbHVlT2ZNZXRob2QsIG51bGwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlKSk7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyB2b2lkIGFkZFJlcGVhdGVkKGZpbmFsIEJ1aWxkZXIgYnVpbGRlciwgZmluYWwgT2JqZWN0
IHZhbHVlKSB7Ci0gICAgICAgIGlmIChzdXBwb3J0VW5rbm93bkVudW1WYWx1ZSkgewotICAgICAg
ICAgIGludm9rZU9yRGllKGFkZFJlcGVhdGVkVmFsdWVNZXRob2QsIGJ1aWxkZXIsCi0gICAgICAg
ICAgICAgICgoRW51bVZhbHVlRGVzY3JpcHRvcikgdmFsdWUpLmdldE51bWJlcigpKTsKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3VwZXIuYWRkUmVwZWF0ZWQoYnVpbGRl
ciwgaW52b2tlT3JEaWUodmFsdWVPZk1ldGhvZCwgbnVsbCwgdmFsdWUpKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIEZpZWxkIGFjY2Vzc29yIGZv
ciBzdHJpbmcgZmllbGRzLgotICAgICAqCi0gICAgICogPHA+VGhpcyBjbGFzcyBtYWtlcyBnZXRG
b29CeXRlcygpIGFuZCBzZXRGb29CeXRlcygpIGF2YWlsYWJsZSBmb3IKLSAgICAgKiByZWZsZWN0
aW9uIEFQSSBzbyB0aGF0IHJlZmxlY3Rpb24gYmFzZWQgc2VyaWFsaXplL3BhcnNlIGZ1bmN0aW9u
cyBjYW4KLSAgICAgKiBhY2Nlc3MgdGhlIHJhdyBieXRlcyBvZiB0aGUgZmllbGQgdG8gcHJlc2Vy
dmUgbm9uLVVURjggYnl0ZXMgaW4gdGhlCi0gICAgICogc3RyaW5nLgotICAgICAqCi0gICAgICog
PHA+VGhpcyBlbnN1cmVzIHRoZSBzZXJpYWxpemUvcGFyc2Ugcm91bmQtdHJpcCBzYWZldHksIHdo
aWNoIGlzIGltcG9ydGFudAotICAgICAqIGZvciBzZXJ2ZXJzIHdoaWNoIGZvcndhcmQgbWVzc2Fn
ZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgU2luZ3VsYXJTdHJp
bmdGaWVsZEFjY2Vzc29yCi0gICAgICAgIGV4dGVuZHMgU2luZ3VsYXJGaWVsZEFjY2Vzc29yIHsK
LSAgICAgIFNpbmd1bGFyU3RyaW5nRmllbGRBY2Nlc3NvcigKLSAgICAgICAgICBmaW5hbCBGaWVs
ZERlc2NyaXB0b3IgZGVzY3JpcHRvciwgZmluYWwgU3RyaW5nIGNhbWVsQ2FzZU5hbWUsCi0gICAg
ICAgICAgZmluYWwgQ2xhc3M8PyBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2U+IG1lc3NhZ2VDbGFz
cywKLSAgICAgICAgICBmaW5hbCBDbGFzczw/IGV4dGVuZHMgQnVpbGRlcj4gYnVpbGRlckNsYXNz
LAotICAgICAgICAgIGZpbmFsIFN0cmluZyBjb250YWluaW5nT25lb2ZDYW1lbENhc2VOYW1lKSB7
Ci0gICAgICAgIHN1cGVyKGRlc2NyaXB0b3IsIGNhbWVsQ2FzZU5hbWUsIG1lc3NhZ2VDbGFzcywg
YnVpbGRlckNsYXNzLAotICAgICAgICAgICAgY29udGFpbmluZ09uZW9mQ2FtZWxDYXNlTmFtZSk7
Ci0gICAgICAgIGdldEJ5dGVzTWV0aG9kID0gZ2V0TWV0aG9kT3JEaWUobWVzc2FnZUNsYXNzLAot
ICAgICAgICAgICAgImdldCIgKyBjYW1lbENhc2VOYW1lICsgIkJ5dGVzIik7Ci0gICAgICAgIGdl
dEJ5dGVzTWV0aG9kQnVpbGRlciA9IGdldE1ldGhvZE9yRGllKGJ1aWxkZXJDbGFzcywKLSAgICAg
ICAgICAgICJnZXQiICsgY2FtZWxDYXNlTmFtZSArICJCeXRlcyIpOwotICAgICAgICBzZXRCeXRl
c01ldGhvZEJ1aWxkZXIgPSBnZXRNZXRob2RPckRpZShidWlsZGVyQ2xhc3MsCi0gICAgICAgICAg
ICAic2V0IiArIGNhbWVsQ2FzZU5hbWUgKyAiQnl0ZXMiLCBCeXRlU3RyaW5nLmNsYXNzKTsKLSAg
ICAgIH0KLQotICAgICAgcHJpdmF0ZSBmaW5hbCBNZXRob2QgZ2V0Qnl0ZXNNZXRob2Q7Ci0gICAg
ICBwcml2YXRlIGZpbmFsIE1ldGhvZCBnZXRCeXRlc01ldGhvZEJ1aWxkZXI7Ci0gICAgICBwcml2
YXRlIGZpbmFsIE1ldGhvZCBzZXRCeXRlc01ldGhvZEJ1aWxkZXI7Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIE9iamVjdCBnZXRSYXcoZmluYWwgR2VuZXJhdGVkTWVzc2FnZSBtZXNz
YWdlKSB7Ci0gICAgICAgIHJldHVybiBpbnZva2VPckRpZShnZXRCeXRlc01ldGhvZCwgbWVzc2Fn
ZSk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIE9iamVjdCBnZXRS
YXcoR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgcmV0dXJuIGlu
dm9rZU9yRGllKGdldEJ5dGVzTWV0aG9kQnVpbGRlciwgYnVpbGRlcik7Ci0gICAgICB9Ci0KLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0KEdlbmVyYXRlZE1lc3NhZ2UuQnVp
bGRlciBidWlsZGVyLCBPYmplY3QgdmFsdWUpIHsKLSAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNl
b2YgQnl0ZVN0cmluZykgewotICAgICAgICAgIGludm9rZU9yRGllKHNldEJ5dGVzTWV0aG9kQnVp
bGRlciwgYnVpbGRlciwgdmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHN1cGVy
LnNldChidWlsZGVyLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFNpbmd1bGFyTWVzc2Fn
ZUZpZWxkQWNjZXNzb3IKLSAgICAgICAgZXh0ZW5kcyBTaW5ndWxhckZpZWxkQWNjZXNzb3Igewot
ICAgICAgU2luZ3VsYXJNZXNzYWdlRmllbGRBY2Nlc3NvcigKLSAgICAgICAgICBmaW5hbCBGaWVs
ZERlc2NyaXB0b3IgZGVzY3JpcHRvciwgZmluYWwgU3RyaW5nIGNhbWVsQ2FzZU5hbWUsCi0gICAg
ICAgICAgZmluYWwgQ2xhc3M8PyBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2U+IG1lc3NhZ2VDbGFz
cywKLSAgICAgICAgICBmaW5hbCBDbGFzczw/IGV4dGVuZHMgQnVpbGRlcj4gYnVpbGRlckNsYXNz
LAotICAgICAgICAgIGZpbmFsIFN0cmluZyBjb250YWluaW5nT25lb2ZDYW1lbENhc2VOYW1lKSB7
Ci0gICAgICAgIHN1cGVyKGRlc2NyaXB0b3IsIGNhbWVsQ2FzZU5hbWUsIG1lc3NhZ2VDbGFzcywg
YnVpbGRlckNsYXNzLAotICAgICAgICAgICAgY29udGFpbmluZ09uZW9mQ2FtZWxDYXNlTmFtZSk7
Ci0KLSAgICAgICAgbmV3QnVpbGRlck1ldGhvZCA9IGdldE1ldGhvZE9yRGllKHR5cGUsICJuZXdC
dWlsZGVyIik7Ci0gICAgICAgIGdldEJ1aWxkZXJNZXRob2RCdWlsZGVyID0KLSAgICAgICAgICAg
IGdldE1ldGhvZE9yRGllKGJ1aWxkZXJDbGFzcywgImdldCIgKyBjYW1lbENhc2VOYW1lICsgIkJ1
aWxkZXIiKTsKLSAgICAgIH0KLQotICAgICAgcHJpdmF0ZSBmaW5hbCBNZXRob2QgbmV3QnVpbGRl
ck1ldGhvZDsKLSAgICAgIHByaXZhdGUgZmluYWwgTWV0aG9kIGdldEJ1aWxkZXJNZXRob2RCdWls
ZGVyOwotCi0gICAgICBwcml2YXRlIE9iamVjdCBjb2VyY2VUeXBlKGZpbmFsIE9iamVjdCB2YWx1
ZSkgewotICAgICAgICBpZiAodHlwZS5pc0luc3RhbmNlKHZhbHVlKSkgewotICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBUaGUgdmFsdWUgaXMg
bm90IHRoZSBleGFjdCByaWdodCBtZXNzYWdlIHR5cGUuICBIb3dldmVyLCBpZiBpdAotICAgICAg
ICAgIC8vIGlzIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzYW1lIHR5cGUg
LS0gZS5nLiBhCi0gICAgICAgICAgLy8gRHluYW1pY01lc3NhZ2UgLS0gd2Ugc2hvdWxkIGFjY2Vw
dCBpdC4gIEluIHRoaXMgY2FzZSB3ZSBjYW4gbWFrZQotICAgICAgICAgIC8vIGEgY29weSBvZiB0
aGUgbWVzc2FnZS4KLSAgICAgICAgICByZXR1cm4gKChNZXNzYWdlLkJ1aWxkZXIpIGludm9rZU9y
RGllKG5ld0J1aWxkZXJNZXRob2QsIG51bGwpKQotICAgICAgICAgICAgICAgICAgLm1lcmdlRnJv
bSgoTWVzc2FnZSkgdmFsdWUpLmJ1aWxkUGFydGlhbCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0K
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0KGZpbmFsIEJ1aWxkZXIgYnVp
bGRlciwgZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIHN1cGVyLnNldChidWlsZGVyLCBj
b2VyY2VUeXBlKHZhbHVlKSk7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyBNZXNzYWdlLkJ1aWxkZXIgbmV3QnVpbGRlcigpIHsKLSAgICAgICAgcmV0dXJuIChNZXNzYWdl
LkJ1aWxkZXIpIGludm9rZU9yRGllKG5ld0J1aWxkZXJNZXRob2QsIG51bGwpOwotICAgICAgfQot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgTWVzc2FnZS5CdWlsZGVyIGdldEJ1aWxkZXIo
R2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgcmV0dXJuIChNZXNz
YWdlLkJ1aWxkZXIpIGludm9rZU9yRGllKGdldEJ1aWxkZXJNZXRob2RCdWlsZGVyLCBidWlsZGVy
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBSZXBl
YXRlZE1lc3NhZ2VGaWVsZEFjY2Vzc29yCi0gICAgICAgIGV4dGVuZHMgUmVwZWF0ZWRGaWVsZEFj
Y2Vzc29yIHsKLSAgICAgIFJlcGVhdGVkTWVzc2FnZUZpZWxkQWNjZXNzb3IoCi0gICAgICAgICAg
ZmluYWwgRmllbGREZXNjcmlwdG9yIGRlc2NyaXB0b3IsIGZpbmFsIFN0cmluZyBjYW1lbENhc2VO
YW1lLAotICAgICAgICAgIGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlPiBt
ZXNzYWdlQ2xhc3MsCi0gICAgICAgICAgZmluYWwgQ2xhc3M8PyBleHRlbmRzIEJ1aWxkZXI+IGJ1
aWxkZXJDbGFzcykgewotICAgICAgICBzdXBlcihkZXNjcmlwdG9yLCBjYW1lbENhc2VOYW1lLCBt
ZXNzYWdlQ2xhc3MsIGJ1aWxkZXJDbGFzcyk7Ci0KLSAgICAgICAgbmV3QnVpbGRlck1ldGhvZCA9
IGdldE1ldGhvZE9yRGllKHR5cGUsICJuZXdCdWlsZGVyIik7Ci0gICAgICAgIGdldEJ1aWxkZXJN
ZXRob2RCdWlsZGVyID0gZ2V0TWV0aG9kT3JEaWUoYnVpbGRlckNsYXNzLAotICAgICAgICAgICAg
ImdldCIgKyBjYW1lbENhc2VOYW1lICsgIkJ1aWxkZXIiLCBJbnRlZ2VyLlRZUEUpOwotICAgICAg
fQotCi0gICAgICBwcml2YXRlIGZpbmFsIE1ldGhvZCBuZXdCdWlsZGVyTWV0aG9kOwotICAgICAg
cHJpdmF0ZSBmaW5hbCBNZXRob2QgZ2V0QnVpbGRlck1ldGhvZEJ1aWxkZXI7Ci0KLSAgICAgIHBy
aXZhdGUgT2JqZWN0IGNvZXJjZVR5cGUoZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIGlm
ICh0eXBlLmlzSW5zdGFuY2UodmFsdWUpKSB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBub3QgdGhlIGV4YWN0IHJp
Z2h0IG1lc3NhZ2UgdHlwZS4gIEhvd2V2ZXIsIGlmIGl0Ci0gICAgICAgICAgLy8gaXMgYW4gYWx0
ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNhbWUgdHlwZSAtLSBlLmcuIGEKLSAgICAg
ICAgICAvLyBEeW5hbWljTWVzc2FnZSAtLSB3ZSBzaG91bGQgYWNjZXB0IGl0LiAgSW4gdGhpcyBj
YXNlIHdlIGNhbiBtYWtlCi0gICAgICAgICAgLy8gYSBjb3B5IG9mIHRoZSBtZXNzYWdlLgotICAg
ICAgICAgIHJldHVybiAoKE1lc3NhZ2UuQnVpbGRlcikgaW52b2tlT3JEaWUobmV3QnVpbGRlck1l
dGhvZCwgbnVsbCkpCi0gICAgICAgICAgICAgICAgICAubWVyZ2VGcm9tKChNZXNzYWdlKSB2YWx1
ZSkuYnVpbGQoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIHNldFJlcGVhdGVkKGZpbmFsIEJ1aWxkZXIgYnVpbGRlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCwgZmluYWwgT2JqZWN0IHZhbHVl
KSB7Ci0gICAgICAgIHN1cGVyLnNldFJlcGVhdGVkKGJ1aWxkZXIsIGluZGV4LCBjb2VyY2VUeXBl
KHZhbHVlKSk7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIGFk
ZFJlcGVhdGVkKGZpbmFsIEJ1aWxkZXIgYnVpbGRlciwgZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0g
ICAgICAgIHN1cGVyLmFkZFJlcGVhdGVkKGJ1aWxkZXIsIGNvZXJjZVR5cGUodmFsdWUpKTsKLSAg
ICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIE1lc3NhZ2UuQnVpbGRlciBuZXdC
dWlsZGVyKCkgewotICAgICAgICByZXR1cm4gKE1lc3NhZ2UuQnVpbGRlcikgaW52b2tlT3JEaWUo
bmV3QnVpbGRlck1ldGhvZCwgbnVsbCk7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyBNZXNzYWdlLkJ1aWxkZXIgZ2V0UmVwZWF0ZWRCdWlsZGVyKAotICAgICAgICAgIGZp
bmFsIEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyLCBmaW5hbCBpbnQgaW5kZXgpIHsK
LSAgICAgICAgcmV0dXJuIChNZXNzYWdlLkJ1aWxkZXIpIGludm9rZU9yRGllKAotICAgICAgICAg
ICAgZ2V0QnVpbGRlck1ldGhvZEJ1aWxkZXIsIGJ1aWxkZXIsIGluZGV4KTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVwbGFjZXMgdGhpcyBvYmplY3QgaW4gdGhlIG91dHB1
dCBzdHJlYW0gd2l0aCBhIHNlcmlhbGl6ZWQgZm9ybS4KLSAgICogUGFydCBvZiBKYXZhJ3Mgc2Vy
aWFsaXphdGlvbiBtYWdpYy4gIEdlbmVyYXRlZCBzdWItY2xhc3NlcyBtdXN0IG92ZXJyaWRlCi0g
ICAqIHRoaXMgbWV0aG9kIGJ5IGNhbGxpbmcge0Bjb2RlIHJldHVybiBzdXBlci53cml0ZVJlcGxh
Y2UoKTt9Ci0gICAqIEByZXR1cm4gYSBTZXJpYWxpemVkRm9ybSBvZiB0aGlzIG1lc3NhZ2UKLSAg
ICovCi0gIHByb3RlY3RlZCBPYmplY3Qgd3JpdGVSZXBsYWNlKCkgdGhyb3dzIE9iamVjdFN0cmVh
bUV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIG5ldyBHZW5lcmF0ZWRNZXNzYWdlTGl0ZS5TZXJpYWxp
emVkRm9ybSh0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgdGhhdCB0aGUge0BsaW5r
IEV4dGVuc2lvbn0gaXMgbm9uLUxpdGUgYW5kIHJldHVybnMgaXQgYXMgYQotICAgKiB7QGxpbmsg
R2VuZXJhdGVkRXh0ZW5zaW9ufS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIDxNZXNzYWdlVHlw
ZSBleHRlbmRzIEV4dGVuZGFibGVNZXNzYWdlPE1lc3NhZ2VUeXBlPiwgVD4KLSAgICBFeHRlbnNp
b248TWVzc2FnZVR5cGUsIFQ+IGNoZWNrTm90TGl0ZSgKLSAgICAgICAgRXh0ZW5zaW9uTGl0ZTxN
ZXNzYWdlVHlwZSwgVD4gZXh0ZW5zaW9uKSB7Ci0gICAgaWYgKGV4dGVuc2lvbi5pc0xpdGUoKSkg
ewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRXhwZWN0ZWQgbm9u
LWxpdGUgZXh0ZW5zaW9uLiIpOwotICAgIH0KLQotICAgIHJldHVybiAoRXh0ZW5zaW9uPE1lc3Nh
Z2VUeXBlLCBUPikgZXh0ZW5zaW9uOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgc3RhdGljIGludCBj
b21wdXRlU3RyaW5nU2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIE9iamVjdCB2YWx1
ZSkgewotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykgewotICAgICAgcmV0dXJuIENv
ZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVTdHJpbmdTaXplKGZpZWxkTnVtYmVyLCAoU3RyaW5nKSB2
YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21w
dXRlQnl0ZXNTaXplKGZpZWxkTnVtYmVyLCAoQnl0ZVN0cmluZykgdmFsdWUpOwotICAgIH0KLSAg
fQotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBpbnQgY29tcHV0ZVN0cmluZ1NpemVOb1RhZyhmaW5h
bCBPYmplY3QgdmFsdWUpIHsKLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAg
ICAgIHJldHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlU3RyaW5nU2l6ZU5vVGFnKChTdHJp
bmcpIHZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIENvZGVkT3V0cHV0U3RyZWFt
LmNvbXB1dGVCeXRlc1NpemVOb1RhZygoQnl0ZVN0cmluZykgdmFsdWUpOwotICAgIH0KLSAgfQot
ICAKLSAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHdyaXRlU3RyaW5nKAotICAgICAgQ29kZWRPdXRw
dXRTdHJlYW0gb3V0cHV0LCBmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIE9iamVjdCB2YWx1
ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcp
IHsKLSAgICAgIG91dHB1dC53cml0ZVN0cmluZyhmaWVsZE51bWJlciwgKFN0cmluZykgdmFsdWUp
OwotICAgIH0gZWxzZSB7Ci0gICAgICBvdXRwdXQud3JpdGVCeXRlcyhmaWVsZE51bWJlciwgKEJ5
dGVTdHJpbmcpIHZhbHVlKTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgdm9p
ZCB3cml0ZVN0cmluZ05vVGFnKAotICAgICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0LCBmaW5h
bCBPYmplY3QgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKHZhbHVlIGluc3Rh
bmNlb2YgU3RyaW5nKSB7Ci0gICAgICBvdXRwdXQud3JpdGVTdHJpbmdOb1RhZygoU3RyaW5nKSB2
YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG91dHB1dC53cml0ZUJ5dGVzTm9UYWcoKEJ5dGVT
dHJpbmcpIHZhbHVlKTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9t
YWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0dlbmVyYXRlZE1lc3Nh
Z2VMaXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YWRjNWFkMDIwNTBm
OTNlOWU5NGRiOTdlY2M3YjllNzBmMWEzN2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL0dlbmVyYXRlZE1lc3NhZ2VMaXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQyICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5n
b29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkFic3RyYWN0TWVz
c2FnZUxpdGUuQnVpbGRlci5MaW1pdGVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgY29tLmdvb2dsZS5w
cm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5FcXVhbHNWaXNpdG9yLk5vdEVxdWFsc0V4Y2Vw
dGlvbjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLkJvb2xlYW5MaXN0Owot
aW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJuYWwuRG91YmxlTGlzdDsKLWltcG9ydCBj
b20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLkZsb2F0TGlzdDsKLWltcG9ydCBjb20uZ29vZ2xl
LnByb3RvYnVmLkludGVybmFsLkludExpc3Q7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5J
bnRlcm5hbC5Mb25nTGlzdDsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLlBy
b3RvYnVmTGlzdDsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLldpcmVGb3JtYXQuRmllbGRU
eXBlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0
U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0U3RyZWFtRXhjZXB0aW9uOwotaW1wb3J0IGph
dmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25U
YXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0
IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1w
b3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBq
YXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIExpdGUgdmVyc2lvbiBvZiB7QGxpbmsgR2VuZXJhdGVk
TWVzc2FnZX0uCi0gKgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEK
LSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEdlbmVyYXRlZE1lc3NhZ2VMaXRlPAotICAgIE1l
c3NhZ2VUeXBlIGV4dGVuZHMgR2VuZXJhdGVkTWVzc2FnZUxpdGU8TWVzc2FnZVR5cGUsIEJ1aWxk
ZXJUeXBlPiwKLSAgICBCdWlsZGVyVHlwZSBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2VMaXRlLkJ1
aWxkZXI8TWVzc2FnZVR5cGUsIEJ1aWxkZXJUeXBlPj4gCi0gICAgICAgIGV4dGVuZHMgQWJzdHJh
Y3RNZXNzYWdlTGl0ZTxNZXNzYWdlVHlwZSwgQnVpbGRlclR5cGU+IHsKLQotICAvKiogRm9yIHVz
ZSBieSBnZW5lcmF0ZWQgY29kZSBvbmx5LiBMYXppbHkgaW5pdGlhbGl6ZWQgdG8gcmVkdWNlIGFs
bG9jYXRpb25zLiAqLwotICBwcm90ZWN0ZWQgVW5rbm93bkZpZWxkU2V0TGl0ZSB1bmtub3duRmll
bGRzID0gVW5rbm93bkZpZWxkU2V0TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKTsKLSAgCi0gIC8q
KiBGb3IgdXNlIGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHkuICAqLwotICBwcm90ZWN0ZWQgaW50IG1l
bW9pemVkU2VyaWFsaXplZFNpemUgPSAtMTsKLSAgCi0gIEBPdmVycmlkZQotICBAU3VwcHJlc3NX
YXJuaW5ncygidW5jaGVja2VkIikgLy8gR3VhcmFudGVlZCBieSBydW50aW1lLgotICBwdWJsaWMg
ZmluYWwgUGFyc2VyPE1lc3NhZ2VUeXBlPiBnZXRQYXJzZXJGb3JUeXBlKCkgewotICAgIHJldHVy
biAoUGFyc2VyPE1lc3NhZ2VUeXBlPikgZHluYW1pY01ldGhvZChNZXRob2RUb0ludm9rZS5HRVRf
UEFSU0VSKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVj
a2VkIikgLy8gR3VhcmFudGVlZCBieSBydW50aW1lLgotICBwdWJsaWMgZmluYWwgTWVzc2FnZVR5
cGUgZ2V0RGVmYXVsdEluc3RhbmNlRm9yVHlwZSgpIHsKLSAgICByZXR1cm4gKE1lc3NhZ2VUeXBl
KSBkeW5hbWljTWV0aG9kKE1ldGhvZFRvSW52b2tlLkdFVF9ERUZBVUxUX0lOU1RBTkNFKTsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgLy8gR3Vh
cmFudGVlZCBieSBydW50aW1lLgotICBwdWJsaWMgZmluYWwgQnVpbGRlclR5cGUgbmV3QnVpbGRl
ckZvclR5cGUoKSB7Ci0gICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgZHluYW1pY01ldGhvZChNZXRo
b2RUb0ludm9rZS5ORVdfQlVJTERFUik7Ci0gIH0KLQotICAvKioKLSAgICogQSByZWZsZWN0aXZl
IHRvU3RyaW5nIGZ1bmN0aW9uLiBUaGlzIGlzIHByaW1hcmlseSBpbnRlbmRlZCBhcyBhIGRldmVs
b3BlciBhaWQsIHdoaWxlIGtlZXBpbmcKLSAgICogYmluYXJ5IHNpemUgZG93bi4gVGhlIGZpcnN0
IGxpbmUgb2YgdGhlIHtAY29kZSB0b1N0cmluZygpfSByZXByZXNlbnRhdGlvbiBpbmNsdWRlcyBh
IGNvbW1lbnRlZAotICAgKiB2ZXJzaW9uIG9mIHtAY29kZSBzdXBlci50b1N0cmluZygpfSB0byBh
Y3QgYXMgYW4gaW5kaWNhdG9yIHRoYXQgdGhpcyBzaG91bGQgbm90IGJlIHJlbGllZCBvbgotICAg
KiBmb3IgY29tcGFyaXNvbnMuCi0gICAqIDxwPgotICAgKiBOT1RFOiBUaGlzIG1ldGhvZCByZWxp
ZXMgb24gdGhlIGZpZWxkIGdldHRlciBtZXRob2RzIG5vdCBiZWluZyBzdHJpcHBlZCBvciByZW5h
bWVkIGJ5IHByb2d1YXJkLgotICAgKiBJZiB0aGV5IGFyZSwgdGhlIGZpZWxkcyB3aWxsIG5vdCBi
ZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICAgKiA8
cD4KLSAgICogTk9URTogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBsaWFibGUgdG8gY2hhbmdlIGlu
IHRoZSBmdXR1cmUsIGFuZCBzaG91bGQgbm90IGJlIHJlbGllZCBvbiBpbgotICAgKiBjb2RlLgot
ICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0
dXJuIE1lc3NhZ2VMaXRlVG9TdHJpbmcudG9TdHJpbmcodGhpcywgc3VwZXIudG9TdHJpbmcoKSk7
Ci0gIH0KLQotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgLy8gR3VhcmFudGVlZCBi
eSBydW50aW1lCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIGlm
IChtZW1vaXplZEhhc2hDb2RlID09IDApIHsKLSAgICAgIEhhc2hDb2RlVmlzaXRvciB2aXNpdG9y
ID0gbmV3IEhhc2hDb2RlVmlzaXRvcigpOwotICAgICAgdmlzaXQodmlzaXRvciwgKE1lc3NhZ2VU
eXBlKSB0aGlzKTsKLSAgICAgIG1lbW9pemVkSGFzaENvZGUgPSB2aXNpdG9yLmhhc2hDb2RlOwot
ICAgIH0KLSAgICByZXR1cm4gbWVtb2l6ZWRIYXNoQ29kZTsKLSAgfQotICAKLSAgQFN1cHByZXNz
V2FybmluZ3MoInVuY2hlY2tlZCIpIC8vIEd1YXJhbnRlZWQgYnkgcnVudGltZQotICBpbnQgaGFz
aENvZGUoSGFzaENvZGVWaXNpdG9yIHZpc2l0b3IpIHsKLSAgICBpZiAobWVtb2l6ZWRIYXNoQ29k
ZSA9PSAwKSB7Ci0gICAgICBpbnQgaW5Qcm9ncmVzc0hhc2hDb2RlID0gdmlzaXRvci5oYXNoQ29k
ZTsKLSAgICAgIHZpc2l0b3IuaGFzaENvZGUgPSAwOwotICAgICAgdmlzaXQodmlzaXRvciwgKE1l
c3NhZ2VUeXBlKSB0aGlzKTsKLSAgICAgIG1lbW9pemVkSGFzaENvZGUgPSB2aXNpdG9yLmhhc2hD
b2RlOwotICAgICAgdmlzaXRvci5oYXNoQ29kZSA9IGluUHJvZ3Jlc3NIYXNoQ29kZTsKLSAgICB9
Ci0gICAgcmV0dXJuIG1lbW9pemVkSGFzaENvZGU7Ci0gIH0KLSAgCi0gIEBTdXBwcmVzc1dhcm5p
bmdzKCJ1bmNoZWNrZWQiKSAvLyBHdWFyYW50ZWVkIGJ5IGlzSW5zdGFuY2UgKyBydW50aW1lCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7Ci0gICAg
aWYgKHRoaXMgPT0gb3RoZXIpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoIWdldERlZmF1bHRJbnN0YW5jZUZvclR5cGUoKS5nZXRDbGFzcygpLmlzSW5zdGFuY2Uo
b3RoZXIpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHRyeSB7Ci0g
ICAgICB2aXNpdChFcXVhbHNWaXNpdG9yLklOU1RBTkNFLCAoTWVzc2FnZVR5cGUpIG90aGVyKTsK
LSAgICB9IGNhdGNoIChOb3RFcXVhbHNFeGNlcHRpb24gZSkgewotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFNhbWUgYXMg
e0BsaW5rICNlcXVhbHMoT2JqZWN0KX0gYnV0IHRocm93cyB7QGNvZGUgTm90RXF1YWxzRXhjZXB0
aW9ufS4KLSAgICovCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKSAvLyBHdWFyYW50
ZWVkIGJ5IGlzSW5zdGFuY2UgKyBydW50aW1lCi0gIGJvb2xlYW4gZXF1YWxzKEVxdWFsc1Zpc2l0
b3IgdmlzaXRvciwgTWVzc2FnZUxpdGUgb3RoZXIpIHsKLSAgICBpZiAodGhpcyA9PSBvdGhlcikg
ewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmICghZ2V0RGVmYXVsdElu
c3RhbmNlRm9yVHlwZSgpLmdldENsYXNzKCkuaXNJbnN0YW5jZShvdGhlcikpIHsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2aXNpdCh2aXNpdG9yLCAoTWVzc2FnZVR5cGUpIG90
aGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLy8gVGhlIGdlbmVyYWwgc3RyYXRl
Z3kgZm9yIHVua25vd24gZmllbGRzIGlzIHRvIHVzZSBhbiBVbmtub3duRmllbGRTZXRMaXRlIHRo
YXQgaXMgdHJlYXRlZCBhcwotICAvLyBtdXRhYmxlIGR1cmluZyB0aGUgcGFyc2luZyBjb25zdHJ1
Y3RvciBhbmQgaW1tdXRhYmxlIGFmdGVyLiBUaGlzIGFsbG93cyB1cyB0byBhdm9pZAotICAvLyBh
bnkgdW5uZWNlc3NhcnkgaW50ZXJtZWRpYXJ5IGFsbG9jYXRpb25zIHdoaWxlIHJlZHVjaW5nIHRo
ZSBnZW5lcmF0ZWQgY29kZSBzaXplLgotCi0gIC8qKgotICAgKiBMYXppbHkgaW5pdGlhbGl6ZXMg
dW5rbm93biBmaWVsZHMuCi0gICAqLwotICBwcml2YXRlIGZpbmFsIHZvaWQgZW5zdXJlVW5rbm93
bkZpZWxkc0luaXRpYWxpemVkKCkgewotICAgIGlmICh1bmtub3duRmllbGRzID09IFVua25vd25G
aWVsZFNldExpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpIHsKLSAgICAgIHVua25vd25GaWVsZHMg
PSBVbmtub3duRmllbGRTZXRMaXRlLm5ld0luc3RhbmNlKCk7Ci0gICAgfQotICB9Ci0gIAotICAv
KioKLSAgICogQ2FsbGVkIGJ5IHN1YmNsYXNzZXMgdG8gcGFyc2UgYW4gdW5rbm93biBmaWVsZC4g
Rm9yIHVzZSBieSBnZW5lcmF0ZWQgY29kZSBvbmx5LgotICAgKiAKLSAgICogQHJldHVybiB7QGNv
ZGUgdHJ1ZX0gdW5sZXNzIHRoZSB0YWcgaXMgYW4gZW5kLWdyb3VwIHRhZy4KLSAgICovCi0gIHBy
b3RlY3RlZCBib29sZWFuIHBhcnNlVW5rbm93bkZpZWxkKGludCB0YWcsIENvZGVkSW5wdXRTdHJl
YW0gaW5wdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgLy8gVGhpcyB3aWxsIGF2b2lkIHRo
ZSBhbGxvY2F0aW9uIG9mIHVua25vd24gZmllbGRzIHdoZW4gYSBncm91cCB0YWcgaXMgZW5jb3Vu
dGVyZWQuCi0gICAgaWYgKFdpcmVGb3JtYXQuZ2V0VGFnV2lyZVR5cGUodGFnKSA9PSBXaXJlRm9y
bWF0LldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICAKLSAgICBlbnN1cmVVbmtub3duRmllbGRzSW5pdGlhbGl6ZWQoKTsKLSAgICByZXR1cm4gdW5r
bm93bkZpZWxkcy5tZXJnZUZpZWxkRnJvbSh0YWcsIGlucHV0KTsKLSAgfQotCi0gIC8qKgotICAg
KiBDYWxsZWQgYnkgc3ViY2xhc3NlcyB0byBwYXJzZSBhbiB1bmtub3duIGZpZWxkLiBGb3IgdXNl
IGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHkuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBtZXJnZVZh
cmludEZpZWxkKGludCB0YWcsIGludCB2YWx1ZSkgewotICAgIGVuc3VyZVVua25vd25GaWVsZHNJ
bml0aWFsaXplZCgpOwotICAgIHVua25vd25GaWVsZHMubWVyZ2VWYXJpbnRGaWVsZCh0YWcsIHZh
bHVlKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENhbGxlZCBieSBzdWJjbGFzc2VzIHRvIHBhcnNl
IGFuIHVua25vd24gZmllbGQuIEZvciB1c2UgYnkgZ2VuZXJhdGVkIGNvZGUgb25seS4KLSAgICov
Ci0gIHByb3RlY3RlZCB2b2lkIG1lcmdlTGVuZ3RoRGVsaW1pdGVkRmllbGQoaW50IGZpZWxkTnVt
YmVyLCBCeXRlU3RyaW5nIHZhbHVlKSB7Ci0gICAgZW5zdXJlVW5rbm93bkZpZWxkc0luaXRpYWxp
emVkKCk7Ci0gICAgdW5rbm93bkZpZWxkcy5tZXJnZUxlbmd0aERlbGltaXRlZEZpZWxkKGZpZWxk
TnVtYmVyLCB2YWx1ZSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDYWxsZWQgYnkgc3ViY2xhc3Nl
cyB0byBjb21wbGV0ZSBwYXJzaW5nLiBGb3IgdXNlIGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHkuCi0g
ICAqLwotICBwcm90ZWN0ZWQgdm9pZCBtYWtlSW1tdXRhYmxlKCkgewotICAgIGR5bmFtaWNNZXRo
b2QoTWV0aG9kVG9JbnZva2UuTUFLRV9JTU1VVEFCTEUpOwotCi0gICAgdW5rbm93bkZpZWxkcy5t
YWtlSW1tdXRhYmxlKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFsIGJvb2xl
YW4gaXNJbml0aWFsaXplZCgpIHsKLSAgICByZXR1cm4gZHluYW1pY01ldGhvZChNZXRob2RUb0lu
dm9rZS5JU19JTklUSUFMSVpFRCwgQm9vbGVhbi5UUlVFKSAhPSBudWxsOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBmaW5hbCBCdWlsZGVyVHlwZSB0b0J1aWxkZXIoKSB7Ci0gICAgQnVp
bGRlclR5cGUgYnVpbGRlciA9IChCdWlsZGVyVHlwZSkgZHluYW1pY01ldGhvZChNZXRob2RUb0lu
dm9rZS5ORVdfQlVJTERFUik7Ci0gICAgYnVpbGRlci5tZXJnZUZyb20oKE1lc3NhZ2VUeXBlKSB0
aGlzKTsKLSAgICByZXR1cm4gYnVpbGRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBEZWZpbmVzIHdo
aWNoIG1ldGhvZCBwYXRoIHRvIGludm9rZSBpbiB7QGxpbmsgR2VuZXJhdGVkTWVzc2FnZUxpdGUK
LSAgICogI2R5bmFtaWNNZXRob2QoTWV0aG9kVG9JbnZva2UsIE9iamVjdC4uLil9LgotICAgKiA8
cD4KLSAgICogRm9yIHVzZSBieSBnZW5lcmF0ZWQgY29kZSBvbmx5LgotICAgKi8KLSAgcHVibGlj
IHN0YXRpYyBlbnVtIE1ldGhvZFRvSW52b2tlIHsKLSAgICAvLyBSZWx5IG9uL21vZGlmeSBpbnN0
YW5jZSBzdGF0ZQotICAgIElTX0lOSVRJQUxJWkVELAotICAgIFZJU0lULAotICAgIE1FUkdFX0ZS
T01fU1RSRUFNLAotICAgIE1BS0VfSU1NVVRBQkxFLAotCi0gICAgLy8gUmVseSBvbiBzdGF0aWMg
c3RhdGUKLSAgICBORVdfTVVUQUJMRV9JTlNUQU5DRSwKLSAgICBORVdfQlVJTERFUiwKLSAgICBH
RVRfREVGQVVMVF9JTlNUQU5DRSwKLSAgICBHRVRfUEFSU0VSOwotICB9Ci0KLSAgLyoqCi0gICAq
IEEgbWV0aG9kIHRoYXQgaW1wbGVtZW50cyBkaWZmZXJlbnQgdHlwZXMgb2Ygb3BlcmF0aW9ucyBk
ZXNjcmliZWQgaW4ge0BsaW5rIE1ldGhvZFRvSW52b2tlfS4KLSAgICogVGhlc2VzIGRpZmZlcmVu
dCBraW5kcyBvZiBvcGVyYXRpb25zIGFyZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgbWVzc2FnZS1s
ZXZlbCBvcGVyYXRpb25zIGZvcgotICAgKiBidWlsZGVycyBpbiB0aGUgcnVudGltZS4gVGhpcyBt
ZXRob2QgYnVuZGxlcyB0aG9zZSBvcGVyYXRpb25zIHRvIHJlZHVjZSB0aGUgZ2VuZXJhdGVkIG1l
dGhvZHMKLSAgICogY291bnQuCi0gICAqIDx1bD4KLSAgICogPGxpPntAY29kZSBNRVJHRV9GUk9N
X1NUUkVBTX0gaXMgcGFyYW1ldGVyaXplZCB3aXRoIGFuIHtAbGluayBDb2RlZElucHV0U3RyZWFt
fSBhbmQKLSAgICoge0BsaW5rIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZX0uIEl0IGNvbnN1bWVzIHRo
ZSBpbnB1dCBzdHJlYW0sIHBhcnNpbmcgdGhlIGNvbnRlbnRzIGludG8gdGhlCi0gICAqIHJldHVy
bmVkIHByb3RvY29sIGJ1ZmZlci4gSWYgcGFyc2luZyB0aHJvd3MgYW4ge0BsaW5rIEludmFsaWRQ
cm90b2NvbEJ1ZmZlckV4Y2VwdGlvbn0sIHRoZQotICAgKiBpbXBsZW1lbnRhdGlvbiB3cmFwcyBp
dCBpbiBhIFJ1bnRpbWVFeGNlcHRpb24uCi0gICAqIDxsaT57QGNvZGUgTkVXX0lOU1RBTkNFfSBy
ZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBwcm90b2NvbCBidWZmZXIgdGhhdCBoYXMgbm90
IHlldCBiZWVuCi0gICAqIG1hZGUgaW1tdXRhYmxlLiBTZWUge0Bjb2RlIE1BS0VfSU1NVVRBQkxF
fS4KLSAgICogPGxpPntAY29kZSBJU19JTklUSUFMSVpFRH0gaXMgcGFyYW1ldGVyaXplZCB3aXRo
IGEge0Bjb2RlIEJvb2xlYW59IGRldGFpbGluZyB3aGV0aGVyIHRvCi0gICAqIG1lbW9pemUuIEl0
IHJldHVybnMge0Bjb2RlIG51bGx9IGZvciBmYWxzZSBhbmQgdGhlIGRlZmF1bHQgaW5zdGFuY2Ug
Zm9yIHRydWUuIFdlIG9wdGlvbmFsbHkKLSAgICogbWVtb2l6ZSB0byBzdXBwb3J0IHRoZSBCdWls
ZGVyIGNhc2UsIHdoZXJlIG1lbW9pemF0aW9uIGlzIG5vdCBkZXNpcmVkLgotICAgKiA8bGk+e0Bj
b2RlIE5FV19CVUlMREVSfSByZXR1cm5zIGEge0Bjb2RlIEJ1aWxkZXJUeXBlfSBpbnN0YW5jZS4K
LSAgICogPGxpPntAY29kZSBWSVNJVH0gaXMgcGFyYW1ldGVyaXplZCB3aXRoIGEge0Bjb2RlIFZp
c2l0b3J9IGFuZCBhIHtAY29kZSBNZXNzYWdlVHlwZX0gYW5kCi0gICAqIHJlY3Vyc2l2ZWx5IGl0
ZXJhdGVzIHRocm91Z2ggdGhlIGZpZWxkcyBzaWRlIGJ5IHNpZGUgYmV0d2VlbiB0aGlzIGFuZCB0
aGUgaW5zdGFuY2UuCi0gICAqIDxsaT57QGNvZGUgTUFLRV9JTU1VVEFCTEV9IHNldHMgYWxsIGlu
dGVybmFsIGZpZWxkcyB0byBhbiBpbW11dGFibGUgc3RhdGUuCi0gICAqIDwvdWw+Ci0gICAqIFRo
aXMgbWV0aG9kLCBwbHVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQnVpbGRlciwgZW5hYmxl
cyB0aGUgQnVpbGRlciBjbGFzcyB0byBiZSBwcm9ndWFyZGVkCi0gICAqIGF3YXkgZW50aXJlbHkg
b24gQW5kcm9pZC4KLSAgICogPHA+Ci0gICAqIEZvciB1c2UgYnkgZ2VuZXJhdGVkIGNvZGUgb25s
eS4KLSAgICovCi0gIHByb3RlY3RlZCBhYnN0cmFjdCBPYmplY3QgZHluYW1pY01ldGhvZChNZXRo
b2RUb0ludm9rZSBtZXRob2QsIE9iamVjdCBhcmcwLCBPYmplY3QgYXJnMSk7Ci0KLSAgLyoqCi0g
ICAqIFNhbWUgYXMge0BsaW5rICNkeW5hbWljTWV0aG9kKE1ldGhvZFRvSW52b2tlLCBPYmplY3Qs
IE9iamVjdCl9IHdpdGgge0Bjb2RlIG51bGx9IHBhZGRpbmcuCi0gICAqLwotICBwcm90ZWN0ZWQg
T2JqZWN0IGR5bmFtaWNNZXRob2QoTWV0aG9kVG9JbnZva2UgbWV0aG9kLCBPYmplY3QgYXJnMCkg
ewotICAgIHJldHVybiBkeW5hbWljTWV0aG9kKG1ldGhvZCwgYXJnMCwgbnVsbCk7Ci0gIH0KLQot
ICAvKioKLSAgICogU2FtZSBhcyB7QGxpbmsgI2R5bmFtaWNNZXRob2QoTWV0aG9kVG9JbnZva2Us
IE9iamVjdCwgT2JqZWN0KX0gd2l0aCB7QGNvZGUgbnVsbH0gcGFkZGluZy4KLSAgICovCi0gIHBy
b3RlY3RlZCBPYmplY3QgZHluYW1pY01ldGhvZChNZXRob2RUb0ludm9rZSBtZXRob2QpIHsKLSAg
ICByZXR1cm4gZHluYW1pY01ldGhvZChtZXRob2QsIG51bGwsIG51bGwpOwotICB9Ci0KLSAgdm9p
ZCB2aXNpdChWaXNpdG9yIHZpc2l0b3IsIE1lc3NhZ2VUeXBlIG90aGVyKSB7Ci0gICAgZHluYW1p
Y01ldGhvZChNZXRob2RUb0ludm9rZS5WSVNJVCwgdmlzaXRvciwgb3RoZXIpOwotICAgIHVua25v
d25GaWVsZHMgPSB2aXNpdG9yLnZpc2l0VW5rbm93bkZpZWxkcyh1bmtub3duRmllbGRzLCBvdGhl
ci51bmtub3duRmllbGRzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE1lcmdlIHNvbWUgdW5rbm93
biBmaWVsZHMgaW50byB0aGUge0BsaW5rIFVua25vd25GaWVsZFNldExpdGV9IGZvciB0aGlzCi0g
ICAqIG1lc3NhZ2UuCi0gICAqCi0gICAqIDxwPkZvciB1c2UgYnkgZ2VuZXJhdGVkIGNvZGUgb25s
eS4KLSAgICovCi0gIHByb3RlY3RlZCBmaW5hbCB2b2lkIG1lcmdlVW5rbm93bkZpZWxkcyhVbmtu
b3duRmllbGRTZXRMaXRlIHVua25vd25GaWVsZHMpIHsKLSAgICB0aGlzLnVua25vd25GaWVsZHMg
PSBVbmtub3duRmllbGRTZXRMaXRlLm11dGFibGVDb3B5T2YodGhpcy51bmtub3duRmllbGRzLCB1
bmtub3duRmllbGRzKTsKLSAgfQotCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQot
ICBwdWJsaWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIEJ1aWxkZXI8Ci0gICAgICBNZXNzYWdlVHlw
ZSBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2VMaXRlPE1lc3NhZ2VUeXBlLCBCdWlsZGVyVHlwZT4s
Ci0gICAgICBCdWlsZGVyVHlwZSBleHRlbmRzIEJ1aWxkZXI8TWVzc2FnZVR5cGUsIEJ1aWxkZXJU
eXBlPj4KLSAgICAgICAgICBleHRlbmRzIEFic3RyYWN0TWVzc2FnZUxpdGUuQnVpbGRlcjxNZXNz
YWdlVHlwZSwgQnVpbGRlclR5cGU+IHsKLQotICAgIHByaXZhdGUgZmluYWwgTWVzc2FnZVR5cGUg
ZGVmYXVsdEluc3RhbmNlOwotICAgIHByb3RlY3RlZCBNZXNzYWdlVHlwZSBpbnN0YW5jZTsKLSAg
ICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0J1aWx0OwotCi0gICAgcHJvdGVjdGVkIEJ1aWxkZXIoTWVz
c2FnZVR5cGUgZGVmYXVsdEluc3RhbmNlKSB7Ci0gICAgICB0aGlzLmRlZmF1bHRJbnN0YW5jZSA9
IGRlZmF1bHRJbnN0YW5jZTsKLSAgICAgIHRoaXMuaW5zdGFuY2UgPQotICAgICAgICAgIChNZXNz
YWdlVHlwZSkgZGVmYXVsdEluc3RhbmNlLmR5bmFtaWNNZXRob2QoTWV0aG9kVG9JbnZva2UuTkVX
X01VVEFCTEVfSU5TVEFOQ0UpOwotICAgICAgaXNCdWlsdCA9IGZhbHNlOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIENhbGxlZCBiZWZvcmUgYW55IG1ldGhvZCB0aGF0IHdvdWxkIG11dGF0ZSB0
aGUgYnVpbGRlciB0byBlbnN1cmUgdGhhdCBpdCBjb3JyZWN0bHkgY29waWVzCi0gICAgICogYW55
IHN0YXRlIGJlZm9yZSB0aGUgd3JpdGUgaGFwcGVucyB0byBwcmVzZXJ2ZSBpbW11dGFiaWxpdHkg
Z3VhcmFudGVlcy4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBjb3B5T25Xcml0ZSgpIHsK
LSAgICAgIGlmIChpc0J1aWx0KSB7Ci0gICAgICAgIE1lc3NhZ2VUeXBlIG5ld0luc3RhbmNlID0K
LSAgICAgICAgICAgIChNZXNzYWdlVHlwZSkgaW5zdGFuY2UuZHluYW1pY01ldGhvZChNZXRob2RU
b0ludm9rZS5ORVdfTVVUQUJMRV9JTlNUQU5DRSk7Ci0gICAgICAgIG5ld0luc3RhbmNlLnZpc2l0
KE1lcmdlRnJvbVZpc2l0b3IuSU5TVEFOQ0UsIGluc3RhbmNlKTsKLSAgICAgICAgaW5zdGFuY2Ug
PSBuZXdJbnN0YW5jZTsKLSAgICAgICAgaXNCdWlsdCA9IGZhbHNlOwotICAgICAgfQotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzSW5pdGlhbGl6ZWQo
KSB7Ci0gICAgICByZXR1cm4gR2VuZXJhdGVkTWVzc2FnZUxpdGUuaXNJbml0aWFsaXplZChpbnN0
YW5jZSwgZmFsc2UgLyogc2hvdWxkTWVtb2l6ZSAqLyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIGZpbmFsIEJ1aWxkZXJUeXBlIGNsZWFyKCkgewotICAgICAgLy8gTm8gbmVl
ZCB0byBjb3B5IG9uIHdyaXRlIHNpbmNlIHdlJ3JlIGRyb3BwaW5nIHRoZSBpbnN0YW5jZSBhbnl3
YXlzLgotICAgICAgaW5zdGFuY2UgPSAoTWVzc2FnZVR5cGUpIGluc3RhbmNlLmR5bmFtaWNNZXRo
b2QoTWV0aG9kVG9JbnZva2UuTkVXX01VVEFCTEVfSU5TVEFOQ0UpOwotICAgICAgcmV0dXJuIChC
dWlsZGVyVHlwZSkgdGhpczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVp
bGRlclR5cGUgY2xvbmUoKSB7Ci0gICAgICBCdWlsZGVyVHlwZSBidWlsZGVyID0KLSAgICAgICAg
ICAoQnVpbGRlclR5cGUpIGdldERlZmF1bHRJbnN0YW5jZUZvclR5cGUoKS5uZXdCdWlsZGVyRm9y
VHlwZSgpOwotICAgICAgYnVpbGRlci5tZXJnZUZyb20oYnVpbGRQYXJ0aWFsKCkpOwotICAgICAg
cmV0dXJuIGJ1aWxkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lc3Nh
Z2VUeXBlIGJ1aWxkUGFydGlhbCgpIHsKLSAgICAgIGlmIChpc0J1aWx0KSB7Ci0gICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgaW5zdGFuY2UubWFrZUltbXV0
YWJsZSgpOwotICAgICAgCi0gICAgICBpc0J1aWx0ID0gdHJ1ZTsKLSAgICAgIHJldHVybiBpbnN0
YW5jZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgTWVzc2FnZVR5
cGUgYnVpbGQoKSB7Ci0gICAgICBNZXNzYWdlVHlwZSByZXN1bHQgPSBidWlsZFBhcnRpYWwoKTsK
LSAgICAgIGlmICghcmVzdWx0LmlzSW5pdGlhbGl6ZWQoKSkgewotICAgICAgICB0aHJvdyBuZXdV
bmluaXRpYWxpemVkTWVzc2FnZUV4Y2VwdGlvbihyZXN1bHQpOwotICAgICAgfQotICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIEJ1
aWxkZXJUeXBlIGludGVybmFsTWVyZ2VGcm9tKE1lc3NhZ2VUeXBlIG1lc3NhZ2UpIHsKLSAgICAg
IHJldHVybiBtZXJnZUZyb20obWVzc2FnZSk7Ci0gICAgfQotICAgIAotICAgIC8qKiBBbGwgc3Vi
Y2xhc3NlcyBpbXBsZW1lbnQgdGhpcy4gKi8KLSAgICBwdWJsaWMgQnVpbGRlclR5cGUgbWVyZ2VG
cm9tKE1lc3NhZ2VUeXBlIG1lc3NhZ2UpIHsKLSAgICAgIGNvcHlPbldyaXRlKCk7Ci0gICAgICBp
bnN0YW5jZS52aXNpdChNZXJnZUZyb21WaXNpdG9yLklOU1RBTkNFLCBtZXNzYWdlKTsKLSAgICAg
IHJldHVybiAoQnVpbGRlclR5cGUpIHRoaXM7Ci0gICAgfQotICAgIAotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBNZXNzYWdlVHlwZSBnZXREZWZhdWx0SW5zdGFuY2VGb3JUeXBlKCkgewotICAg
ICAgcmV0dXJuIGRlZmF1bHRJbnN0YW5jZTsKLSAgICB9Ci0gICAgCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIEJ1aWxkZXJUeXBlIG1lcmdlRnJvbSgKLSAgICAgICAgY29tLmdvb2dsZS5wcm90
b2J1Zi5Db2RlZElucHV0U3RyZWFtIGlucHV0LAotICAgICAgICBjb20uZ29vZ2xlLnByb3RvYnVm
LkV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgICAgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICAgIGNvcHlPbldyaXRlKCk7Ci0gICAgICB0cnkgewotICAgICAg
ICBpbnN0YW5jZS5keW5hbWljTWV0aG9kKE1ldGhvZFRvSW52b2tlLk1FUkdFX0ZST01fU1RSRUFN
LCBpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAgIGlmIChlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBJT0V4Y2VwdGlv
bikgewotICAgICAgICAgIHRocm93IChJT0V4Y2VwdGlvbikgZS5nZXRDYXVzZSgpOwotICAgICAg
ICB9Ci0gICAgICAgIHRocm93IGU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gKEJ1aWxkZXJUeXBl
KSB0aGlzOwotICAgIH0KLSAgfQotCi0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gRXh0ZW5zaW9ucy1y
ZWxhdGVkIHN0dWZmCi0KLSAgLyoqCi0gICAqIExpdGUgZXF1aXZhbGVudCBvZiB7QGxpbmsgY29t
Lmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlLkV4dGVuZGFibGVNZXNzYWdlT3JCdWls
ZGVyfS4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgRXh0ZW5kYWJsZU1lc3NhZ2VPckJ1aWxk
ZXI8Ci0gICAgICBNZXNzYWdlVHlwZSBleHRlbmRzIEV4dGVuZGFibGVNZXNzYWdlPE1lc3NhZ2VU
eXBlLCBCdWlsZGVyVHlwZT4sCi0gICAgICBCdWlsZGVyVHlwZSBleHRlbmRzIEV4dGVuZGFibGVC
dWlsZGVyPE1lc3NhZ2VUeXBlLCBCdWlsZGVyVHlwZT4+Ci0gICAgICAgICAgZXh0ZW5kcyBNZXNz
YWdlTGl0ZU9yQnVpbGRlciB7Ci0KLSAgICAvKiogQ2hlY2sgaWYgYSBzaW5ndWxhciBleHRlbnNp
b24gaXMgcHJlc2VudC4gKi8KLSAgICA8VHlwZT4gYm9vbGVhbiBoYXNFeHRlbnNpb24oCi0gICAg
ICAgIEV4dGVuc2lvbkxpdGU8TWVzc2FnZVR5cGUsIFR5cGU+IGV4dGVuc2lvbik7Ci0KLSAgICAv
KiogR2V0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSByZXBlYXRlZCBleHRlbnNpb24uICov
Ci0gICAgPFR5cGU+IGludCBnZXRFeHRlbnNpb25Db3VudCgKLSAgICAgICAgRXh0ZW5zaW9uTGl0
ZTxNZXNzYWdlVHlwZSwgTGlzdDxUeXBlPj4gZXh0ZW5zaW9uKTsKLQotICAgIC8qKiBHZXQgdGhl
IHZhbHVlIG9mIGFuIGV4dGVuc2lvbi4gKi8KLSAgICA8VHlwZT4gVHlwZSBnZXRFeHRlbnNpb24o
RXh0ZW5zaW9uTGl0ZTxNZXNzYWdlVHlwZSwgVHlwZT4gZXh0ZW5zaW9uKTsKLQotICAgIC8qKiBH
ZXQgb25lIGVsZW1lbnQgb2YgYSByZXBlYXRlZCBleHRlbnNpb24uICovCi0gICAgPFR5cGU+IFR5
cGUgZ2V0RXh0ZW5zaW9uKAotICAgICAgICBFeHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBMaXN0
PFR5cGU+PiBleHRlbnNpb24sCi0gICAgICAgIGludCBpbmRleCk7Ci0gIH0KLQotICAvKioKLSAg
ICogTGl0ZSBlcXVpdmFsZW50IG9mIHtAbGluayBHZW5lcmF0ZWRNZXNzYWdlLkV4dGVuZGFibGVN
ZXNzYWdlfS4KLSAgICovCi0gIHB1YmxpYyBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgRXh0ZW5kYWJs
ZU1lc3NhZ2U8Ci0gICAgICAgIE1lc3NhZ2VUeXBlIGV4dGVuZHMgRXh0ZW5kYWJsZU1lc3NhZ2U8
TWVzc2FnZVR5cGUsIEJ1aWxkZXJUeXBlPiwKLSAgICAgICAgQnVpbGRlclR5cGUgZXh0ZW5kcyBF
eHRlbmRhYmxlQnVpbGRlcjxNZXNzYWdlVHlwZSwgQnVpbGRlclR5cGU+PgotICAgICAgICAgICAg
ZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlTGl0ZTxNZXNzYWdlVHlwZSwgQnVpbGRlclR5cGU+Ci0g
ICAgICAgICAgICBpbXBsZW1lbnRzIEV4dGVuZGFibGVNZXNzYWdlT3JCdWlsZGVyPE1lc3NhZ2VU
eXBlLCBCdWlsZGVyVHlwZT4gewotCi0gICAgLyoqCi0gICAgICogUmVwcmVzZW50cyB0aGUgc2V0
IG9mIGV4dGVuc2lvbnMgb24gdGhpcyBtZXNzYWdlLiBGb3IgdXNlIGJ5IGdlbmVyYXRlZAotICAg
ICAqIGNvZGUgb25seS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgRmllbGRTZXQ8RXh0ZW5zaW9u
RGVzY3JpcHRvcj4gZXh0ZW5zaW9ucyA9IEZpZWxkU2V0Lm5ld0ZpZWxkU2V0KCk7Ci0KLSAgICBw
cm90ZWN0ZWQgZmluYWwgdm9pZCBtZXJnZUV4dGVuc2lvbkZpZWxkcyhmaW5hbCBNZXNzYWdlVHlw
ZSBvdGhlcikgewotICAgICAgaWYgKGV4dGVuc2lvbnMuaXNJbW11dGFibGUoKSkgewotICAgICAg
ICBleHRlbnNpb25zID0gZXh0ZW5zaW9ucy5jbG9uZSgpOwotICAgICAgfQotICAgICAgZXh0ZW5z
aW9ucy5tZXJnZUZyb20oKChFeHRlbmRhYmxlTWVzc2FnZSkgb3RoZXIpLmV4dGVuc2lvbnMpOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGZpbmFsIHZvaWQgdmlzaXQoVmlzaXRvciB2aXNp
dG9yLCBNZXNzYWdlVHlwZSBvdGhlcikgewotICAgICAgc3VwZXIudmlzaXQodmlzaXRvciwgb3Ro
ZXIpOwotICAgICAgZXh0ZW5zaW9ucyA9IHZpc2l0b3IudmlzaXRFeHRlbnNpb25zKGV4dGVuc2lv
bnMsIG90aGVyLmV4dGVuc2lvbnMpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBQYXJz
ZSBhbiB1bmtub3duIGZpZWxkIG9yIGFuIGV4dGVuc2lvbi4gRm9yIHVzZSBieSBnZW5lcmF0ZWQg
Y29kZSBvbmx5LgotICAgICAqIAotICAgICAqIDxwPkZvciB1c2UgYnkgZ2VuZXJhdGVkIGNvZGUg
b25seS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSB1bmxlc3MgdGhlIHRh
ZyBpcyBhbiBlbmQtZ3JvdXAgdGFnLgotICAgICAqLwotICAgIHByb3RlY3RlZCA8TWVzc2FnZVR5
cGUgZXh0ZW5kcyBNZXNzYWdlTGl0ZT4gYm9vbGVhbiBwYXJzZVVua25vd25GaWVsZCgKLSAgICAg
ICAgTWVzc2FnZVR5cGUgZGVmYXVsdEluc3RhbmNlLAotICAgICAgICBDb2RlZElucHV0U3RyZWFt
IGlucHV0LAotICAgICAgICBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnks
Ci0gICAgICAgIGludCB0YWcpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBpbnQgd2lyZVR5
cGUgPSBXaXJlRm9ybWF0LmdldFRhZ1dpcmVUeXBlKHRhZyk7Ci0gICAgICBpbnQgZmllbGROdW1i
ZXIgPSBXaXJlRm9ybWF0LmdldFRhZ0ZpZWxkTnVtYmVyKHRhZyk7Ci0KLSAgICAgIC8vIFRPRE8o
ZHdlaXMpOiBIb3cgbXVjaCBieXRlY29kZSB3b3VsZCBiZSBzYXZlZCBieSBub3QgcmVxdWlyaW5n
IHRoZSBnZW5lcmF0ZWQgY29kZSB0bwotICAgICAgLy8gICAgIHByb3ZpZGUgdGhlIGRlZmF1bHQg
aW5zdGFuY2U/Ci0gICAgICBHZW5lcmF0ZWRFeHRlbnNpb248TWVzc2FnZVR5cGUsID8+IGV4dGVu
c2lvbiA9IGV4dGVuc2lvblJlZ2lzdHJ5LmZpbmRMaXRlRXh0ZW5zaW9uQnlOdW1iZXIoCi0gICAg
ICAgICAgZGVmYXVsdEluc3RhbmNlLCBmaWVsZE51bWJlcik7Ci0KLSAgICAgIGJvb2xlYW4gdW5r
bm93biA9IGZhbHNlOwotICAgICAgYm9vbGVhbiBwYWNrZWQgPSBmYWxzZTsKLSAgICAgIGlmIChl
eHRlbnNpb24gPT0gbnVsbCkgewotICAgICAgICB1bmtub3duID0gdHJ1ZTsgIC8vIFVua25vd24g
ZmllbGQuCi0gICAgICB9IGVsc2UgaWYgKHdpcmVUeXBlID09IEZpZWxkU2V0LmdldFdpcmVGb3Jt
YXRGb3JGaWVsZFR5cGUoCi0gICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLmRlc2NyaXB0b3Iu
Z2V0TGl0ZVR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICBmYWxzZSAgLyogaXNQYWNrZWQgKi8p
KSB7Ci0gICAgICAgIHBhY2tlZCA9IGZhbHNlOyAgLy8gTm9ybWFsLCB1bnBhY2tlZCB2YWx1ZS4K
LSAgICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9uLmRlc2NyaXB0b3IuaXNSZXBlYXRlZCAmJgotICAg
ICAgICAgICAgICAgICBleHRlbnNpb24uZGVzY3JpcHRvci50eXBlLmlzUGFja2FibGUoKSAmJgot
ICAgICAgICAgICAgICAgICB3aXJlVHlwZSA9PSBGaWVsZFNldC5nZXRXaXJlRm9ybWF0Rm9yRmll
bGRUeXBlKAotICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbi5kZXNjcmlwdG9yLmdldExpdGVU
eXBlKCksCi0gICAgICAgICAgICAgICAgICAgdHJ1ZSAgLyogaXNQYWNrZWQgKi8pKSB7Ci0gICAg
ICAgIHBhY2tlZCA9IHRydWU7ICAvLyBQYWNrZWQgdmFsdWUuCi0gICAgICB9IGVsc2UgewotICAg
ICAgICB1bmtub3duID0gdHJ1ZTsgIC8vIFdyb25nIHdpcmUgdHlwZS4KLSAgICAgIH0KLQotICAg
ICAgaWYgKHVua25vd24pIHsgIC8vIFVua25vd24gZmllbGQgb3Igd3Jvbmcgd2lyZSB0eXBlLiAg
U2tpcC4KLSAgICAgICAgcmV0dXJuIHBhcnNlVW5rbm93bkZpZWxkKHRhZywgaW5wdXQpOwotICAg
ICAgfQotCi0gICAgICBpZiAocGFja2VkKSB7Ci0gICAgICAgIGludCBsZW5ndGggPSBpbnB1dC5y
ZWFkUmF3VmFyaW50MzIoKTsKLSAgICAgICAgaW50IGxpbWl0ID0gaW5wdXQucHVzaExpbWl0KGxl
bmd0aCk7Ci0gICAgICAgIGlmIChleHRlbnNpb24uZGVzY3JpcHRvci5nZXRMaXRlVHlwZSgpID09
IFdpcmVGb3JtYXQuRmllbGRUeXBlLkVOVU0pIHsKLSAgICAgICAgICB3aGlsZSAoaW5wdXQuZ2V0
Qnl0ZXNVbnRpbExpbWl0KCkgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgcmF3VmFsdWUgPSBpbnB1
dC5yZWFkRW51bSgpOwotICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0KLSAgICAgICAgICAgICAg
ICBleHRlbnNpb24uZGVzY3JpcHRvci5nZXRFbnVtVHlwZSgpLmZpbmRWYWx1ZUJ5TnVtYmVyKHJh
d1ZhbHVlKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAg
IC8vIElmIHRoZSBudW1iZXIgaXNuJ3QgcmVjb2duaXplZCBhcyBhIHZhbGlkIHZhbHVlIGZvciB0
aGlzCi0gICAgICAgICAgICAgIC8vIGVudW0sIGRyb3AgaXQgKGRvbid0IGV2ZW4gYWRkIGl0IHRv
IHVua25vd25GaWVsZHMpLgotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGV4dGVuc2lvbnMuYWRkUmVwZWF0ZWRGaWVsZChleHRlbnNpb24uZGVz
Y3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNp
b24uc2luZ3VsYXJUb0ZpZWxkU2V0VHlwZSh2YWx1ZSkpOwotICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICB3aGlsZSAoaW5wdXQuZ2V0Qnl0ZXNVbnRpbExpbWl0KCkgPiAw
KSB7Ci0gICAgICAgICAgICBPYmplY3QgdmFsdWUgPQotICAgICAgICAgICAgICAgIEZpZWxkU2V0
LnJlYWRQcmltaXRpdmVGaWVsZChpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXh0ZW5zaW9uLmRlc2NyaXB0b3IuZ2V0TGl0ZVR5cGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypjaGVja1V0Zjg9Ki8gZmFs
c2UpOwotICAgICAgICAgICAgZXh0ZW5zaW9ucy5hZGRSZXBlYXRlZEZpZWxkKGV4dGVuc2lvbi5k
ZXNjcmlwdG9yLCB2YWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlucHV0
LnBvcExpbWl0KGxpbWl0KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIE9iamVjdCB2YWx1ZTsK
LSAgICAgICAgc3dpdGNoIChleHRlbnNpb24uZGVzY3JpcHRvci5nZXRMaXRlSmF2YVR5cGUoKSkg
ewotICAgICAgICAgIGNhc2UgTUVTU0FHRTogewotICAgICAgICAgICAgTWVzc2FnZUxpdGUuQnVp
bGRlciBzdWJCdWlsZGVyID0gbnVsbDsKLSAgICAgICAgICAgIGlmICghZXh0ZW5zaW9uLmRlc2Ny
aXB0b3IuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICAgICAgICAgIE1lc3NhZ2VMaXRlIGV4aXN0aW5n
VmFsdWUgPQotICAgICAgICAgICAgICAgICAgKE1lc3NhZ2VMaXRlKSBleHRlbnNpb25zLmdldEZp
ZWxkKGV4dGVuc2lvbi5kZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nVmFs
dWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN1YkJ1aWxkZXIgPSBleGlzdGluZ1ZhbHVl
LnRvQnVpbGRlcigpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoc3ViQnVpbGRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIHN1YkJ1aWxkZXIgPSBl
eHRlbnNpb24uZ2V0TWVzc2FnZURlZmF1bHRJbnN0YW5jZSgpCi0gICAgICAgICAgICAgICAgICAu
bmV3QnVpbGRlckZvclR5cGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChleHRl
bnNpb24uZGVzY3JpcHRvci5nZXRMaXRlVHlwZSgpID09Ci0gICAgICAgICAgICAgICAgV2lyZUZv
cm1hdC5GaWVsZFR5cGUuR1JPVVApIHsKLSAgICAgICAgICAgICAgaW5wdXQucmVhZEdyb3VwKGV4
dGVuc2lvbi5nZXROdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkJ1
aWxkZXIsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgIGlucHV0LnJlYWRNZXNzYWdlKHN1YkJ1aWxkZXIsIGV4dGVuc2lvblJlZ2lzdHJ5KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhbHVlID0gc3ViQnVpbGRlci5idWlsZCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgRU5VTToKLSAg
ICAgICAgICAgIGludCByYXdWYWx1ZSA9IGlucHV0LnJlYWRFbnVtKCk7Ci0gICAgICAgICAgICB2
YWx1ZSA9IGV4dGVuc2lvbi5kZXNjcmlwdG9yLmdldEVudW1UeXBlKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmZpbmRWYWx1ZUJ5TnVtYmVyKHJhd1ZhbHVlKTsKLSAgICAgICAgICAg
IC8vIElmIHRoZSBudW1iZXIgaXNuJ3QgcmVjb2duaXplZCBhcyBhIHZhbGlkIHZhbHVlIGZvciB0
aGlzIGVudW0sCi0gICAgICAgICAgICAvLyB3cml0ZSBpdCB0byB1bmtub3duIGZpZWxkcyBvYmpl
Y3QuCi0gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgICAgICBtZXJn
ZVZhcmludEZpZWxkKGZpZWxkTnVtYmVyLCByYXdWYWx1ZSk7Ci0gICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHZhbHVlID0gRmllbGRTZXQucmVhZFByaW1pdGl2ZUZpZWxkKGlu
cHV0LAotICAgICAgICAgICAgICAgIGV4dGVuc2lvbi5kZXNjcmlwdG9yLmdldExpdGVUeXBlKCks
Ci0gICAgICAgICAgICAgICAgLypjaGVja1V0Zjg9Ki8gZmFsc2UpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXh0ZW5zaW9uLmRlc2NyaXB0b3IuaXNSZXBl
YXRlZCgpKSB7Ci0gICAgICAgICAgZXh0ZW5zaW9ucy5hZGRSZXBlYXRlZEZpZWxkKGV4dGVuc2lv
bi5kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRl
bnNpb24uc2luZ3VsYXJUb0ZpZWxkU2V0VHlwZSh2YWx1ZSkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGV4dGVuc2lvbnMuc2V0RmllbGQoZXh0ZW5zaW9uLmRlc2NyaXB0b3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24uc2luZ3VsYXJUb0ZpZWxkU2V0VHlw
ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgdmVyaWZ5RXh0ZW5zaW9uQ29udGFpbmluZ1R5cGUo
Ci0gICAgICAgIGZpbmFsIEdlbmVyYXRlZEV4dGVuc2lvbjxNZXNzYWdlVHlwZSwgPz4gZXh0ZW5z
aW9uKSB7Ci0gICAgICBpZiAoZXh0ZW5zaW9uLmdldENvbnRhaW5pbmdUeXBlRGVmYXVsdEluc3Rh
bmNlKCkgIT0KLSAgICAgICAgICBnZXREZWZhdWx0SW5zdGFuY2VGb3JUeXBlKCkpIHsKLSAgICAg
ICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc29tZW9uZSB1c2VzIHVuY2hlY2tlZCBvcGVy
YXRpb25zLgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAg
ICAgICAgICJUaGlzIGV4dGVuc2lvbiBpcyBmb3IgYSBkaWZmZXJlbnQgbWVzc2FnZSB0eXBlLiAg
UGxlYXNlIG1ha2UgIiArCi0gICAgICAgICAgInN1cmUgdGhhdCB5b3UgYXJlIG5vdCBzdXBwcmVz
c2luZyBhbnkgZ2VuZXJpY3MgdHlwZSB3YXJuaW5ncy4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvKiogQ2hlY2sgaWYgYSBzaW5ndWxhciBleHRlbnNpb24gaXMgcHJlc2VudC4gKi8KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgPFR5cGU+IGJvb2xlYW4gaGFzRXh0ZW5zaW9uKGZp
bmFsIEV4dGVuc2lvbkxpdGU8TWVzc2FnZVR5cGUsIFR5cGU+IGV4dGVuc2lvbikgewotICAgICAg
R2VuZXJhdGVkRXh0ZW5zaW9uPE1lc3NhZ2VUeXBlLCBUeXBlPiBleHRlbnNpb25MaXRlID0KLSAg
ICAgICAgICBjaGVja0lzTGl0ZShleHRlbnNpb24pOwotICAgICAgCi0gICAgICB2ZXJpZnlFeHRl
bnNpb25Db250YWluaW5nVHlwZShleHRlbnNpb25MaXRlKTsKLSAgICAgIHJldHVybiBleHRlbnNp
b25zLmhhc0ZpZWxkKGV4dGVuc2lvbkxpdGUuZGVzY3JpcHRvcik7Ci0gICAgfQotCi0gICAgLyoq
IEdldCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgcmVwZWF0ZWQgZXh0ZW5zaW9uLiAqLwot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCA8VHlwZT4gaW50IGdldEV4dGVuc2lvbkNv
dW50KAotICAgICAgICBmaW5hbCBFeHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBMaXN0PFR5cGU+
PiBleHRlbnNpb24pIHsKLSAgICAgIEdlbmVyYXRlZEV4dGVuc2lvbjxNZXNzYWdlVHlwZSwgTGlz
dDxUeXBlPj4gZXh0ZW5zaW9uTGl0ZSA9Ci0gICAgICAgICAgY2hlY2tJc0xpdGUoZXh0ZW5zaW9u
KTsKLSAgICAgIAotICAgICAgdmVyaWZ5RXh0ZW5zaW9uQ29udGFpbmluZ1R5cGUoZXh0ZW5zaW9u
TGl0ZSk7Ci0gICAgICByZXR1cm4gZXh0ZW5zaW9ucy5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZXh0
ZW5zaW9uTGl0ZS5kZXNjcmlwdG9yKTsKLSAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSB2YWx1ZSBv
ZiBhbiBleHRlbnNpb24uICovCi0gICAgQE92ZXJyaWRlCi0gICAgQFN1cHByZXNzV2FybmluZ3Mo
InVuY2hlY2tlZCIpCi0gICAgcHVibGljIGZpbmFsIDxUeXBlPiBUeXBlIGdldEV4dGVuc2lvbihm
aW5hbCBFeHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBUeXBlPiBleHRlbnNpb24pIHsKLSAgICAg
IEdlbmVyYXRlZEV4dGVuc2lvbjxNZXNzYWdlVHlwZSwgVHlwZT4gZXh0ZW5zaW9uTGl0ZSA9Ci0g
ICAgICAgICAgY2hlY2tJc0xpdGUoZXh0ZW5zaW9uKTsKLSAgICAgIAotICAgICAgdmVyaWZ5RXh0
ZW5zaW9uQ29udGFpbmluZ1R5cGUoZXh0ZW5zaW9uTGl0ZSk7Ci0gICAgICBmaW5hbCBPYmplY3Qg
dmFsdWUgPSBleHRlbnNpb25zLmdldEZpZWxkKGV4dGVuc2lvbkxpdGUuZGVzY3JpcHRvcik7Ci0g
ICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICByZXR1cm4gZXh0ZW5zaW9uTGl0ZS5k
ZWZhdWx0VmFsdWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gKFR5cGUpIGV4dGVu
c2lvbkxpdGUuZnJvbUZpZWxkU2V0VHlwZSh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
LyoqIEdldCBvbmUgZWxlbWVudCBvZiBhIHJlcGVhdGVkIGV4dGVuc2lvbi4gKi8KLSAgICBAT3Zl
cnJpZGUKLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICBwdWJsaWMgZmlu
YWwgPFR5cGU+IFR5cGUgZ2V0RXh0ZW5zaW9uKAotICAgICAgICBmaW5hbCBFeHRlbnNpb25MaXRl
PE1lc3NhZ2VUeXBlLCBMaXN0PFR5cGU+PiBleHRlbnNpb24sIGZpbmFsIGludCBpbmRleCkgewot
ICAgICAgR2VuZXJhdGVkRXh0ZW5zaW9uPE1lc3NhZ2VUeXBlLCBMaXN0PFR5cGU+PiBleHRlbnNp
b25MaXRlID0KLSAgICAgICAgICBjaGVja0lzTGl0ZShleHRlbnNpb24pOwotCi0gICAgICB2ZXJp
ZnlFeHRlbnNpb25Db250YWluaW5nVHlwZShleHRlbnNpb25MaXRlKTsKLSAgICAgIHJldHVybiAo
VHlwZSkgZXh0ZW5zaW9uTGl0ZS5zaW5ndWxhckZyb21GaWVsZFNldFR5cGUoCi0gICAgICAgICAg
ZXh0ZW5zaW9ucy5nZXRSZXBlYXRlZEZpZWxkKGV4dGVuc2lvbkxpdGUuZGVzY3JpcHRvciwgaW5k
ZXgpKTsKLSAgICB9Ci0KLSAgICAvKiogQ2FsbGVkIGJ5IHN1YmNsYXNzZXMgdG8gY2hlY2sgaWYg
YWxsIGV4dGVuc2lvbnMgYXJlIGluaXRpYWxpemVkLiAqLwotICAgIHByb3RlY3RlZCBib29sZWFu
IGV4dGVuc2lvbnNBcmVJbml0aWFsaXplZCgpIHsKLSAgICAgIHJldHVybiBleHRlbnNpb25zLmlz
SW5pdGlhbGl6ZWQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgZmlu
YWwgdm9pZCBtYWtlSW1tdXRhYmxlKCkgewotICAgICAgc3VwZXIubWFrZUltbXV0YWJsZSgpOwot
ICAgICAgCi0gICAgICBleHRlbnNpb25zLm1ha2VJbW11dGFibGUoKTsKLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgKiBVc2VkIGJ5IHN1YmNsYXNzZXMgdG8gc2VyaWFsaXplIGV4dGVuc2lvbnMuICBF
eHRlbnNpb24gcmFuZ2VzIG1heSBiZQotICAgICAqIGludGVybGVhdmVkIHdpdGggZmllbGQgbnVt
YmVycywgYnV0IHdlIG11c3Qgd3JpdGUgdGhlbSBpbiBjYW5vbmljYWwKLSAgICAgKiAoc29ydGVk
IGJ5IGZpZWxkIG51bWJlcikgb3JkZXIuICBFeHRlbnNpb25Xcml0ZXIgaGVscHMgdXMgd3JpdGUK
LSAgICAgKiBpbmRpdmlkdWFsIHJhbmdlcyBvZiBleHRlbnNpb25zIGF0IG9uY2UuCi0gICAgICov
Ci0gICAgcHJvdGVjdGVkIGNsYXNzIEV4dGVuc2lvbldyaXRlciB7Ci0gICAgICAvLyBJbWFnaW5l
IGhvdyBtdWNoIHNpbXBsZXIgdGhpcyBjb2RlIHdvdWxkIGJlIGlmIEphdmEgaXRlcmF0b3JzIGhh
ZAotICAgICAgLy8gYSB3YXkgdG8gZ2V0IHRoZSBuZXh0IGVsZW1lbnQgd2l0aG91dCBhZHZhbmNp
bmcgdGhlIGl0ZXJhdG9yLgotCi0gICAgICBwcml2YXRlIGZpbmFsIEl0ZXJhdG9yPE1hcC5FbnRy
eTxFeHRlbnNpb25EZXNjcmlwdG9yLCBPYmplY3Q+PiBpdGVyID0KLSAgICAgICAgICAgIGV4dGVu
c2lvbnMuaXRlcmF0b3IoKTsKLSAgICAgIHByaXZhdGUgTWFwLkVudHJ5PEV4dGVuc2lvbkRlc2Ny
aXB0b3IsIE9iamVjdD4gbmV4dDsKLSAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtZXNzYWdl
U2V0V2lyZUZvcm1hdDsKLQotICAgICAgcHJpdmF0ZSBFeHRlbnNpb25Xcml0ZXIoYm9vbGVhbiBt
ZXNzYWdlU2V0V2lyZUZvcm1hdCkgewotICAgICAgICBpZiAoaXRlci5oYXNOZXh0KCkpIHsKLSAg
ICAgICAgICBuZXh0ID0gaXRlci5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5tZXNz
YWdlU2V0V2lyZUZvcm1hdCA9IG1lc3NhZ2VTZXRXaXJlRm9ybWF0OwotICAgICAgfQotCi0gICAg
ICBwdWJsaWMgdm9pZCB3cml0ZVVudGlsKGZpbmFsIGludCBlbmQsIGZpbmFsIENvZGVkT3V0cHV0
U3RyZWFtIG91dHB1dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICAgICAgd2hpbGUgKG5leHQgIT0gbnVsbCAmJiBuZXh0LmdldEtleSgpLmdl
dE51bWJlcigpIDwgZW5kKSB7Ci0gICAgICAgICAgRXh0ZW5zaW9uRGVzY3JpcHRvciBleHRlbnNp
b24gPSBuZXh0LmdldEtleSgpOwotICAgICAgICAgIGlmIChtZXNzYWdlU2V0V2lyZUZvcm1hdCAm
JiBleHRlbnNpb24uZ2V0TGl0ZUphdmFUeXBlKCkgPT0KLSAgICAgICAgICAgICAgICAgIFdpcmVG
b3JtYXQuSmF2YVR5cGUuTUVTU0FHRSAmJgotICAgICAgICAgICAgICAhZXh0ZW5zaW9uLmlzUmVw
ZWF0ZWQoKSkgewotICAgICAgICAgICAgb3V0cHV0LndyaXRlTWVzc2FnZVNldEV4dGVuc2lvbihl
eHRlbnNpb24uZ2V0TnVtYmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChNZXNzYWdlTGl0ZSkgbmV4dC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgRmllbGRTZXQud3JpdGVGaWVsZChleHRlbnNpb24sIG5leHQuZ2V0
VmFsdWUoKSwgb3V0cHV0KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGl0ZXIuaGFzTmV4
dCgpKSB7Ci0gICAgICAgICAgICBuZXh0ID0gaXRlci5uZXh0KCk7Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG5leHQgPSBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBFeHRlbnNpb25Xcml0ZXIgbmV3RXh0ZW5zaW9u
V3JpdGVyKCkgewotICAgICAgcmV0dXJuIG5ldyBFeHRlbnNpb25Xcml0ZXIoZmFsc2UpOwotICAg
IH0KLSAgICBwcm90ZWN0ZWQgRXh0ZW5zaW9uV3JpdGVyIG5ld01lc3NhZ2VTZXRFeHRlbnNpb25X
cml0ZXIoKSB7Ci0gICAgICByZXR1cm4gbmV3IEV4dGVuc2lvbldyaXRlcih0cnVlKTsKLSAgICB9
Ci0KLSAgICAvKiogQ2FsbGVkIGJ5IHN1YmNsYXNzZXMgdG8gY29tcHV0ZSB0aGUgc2l6ZSBvZiBl
eHRlbnNpb25zLiAqLwotICAgIHByb3RlY3RlZCBpbnQgZXh0ZW5zaW9uc1NlcmlhbGl6ZWRTaXpl
KCkgewotICAgICAgcmV0dXJuIGV4dGVuc2lvbnMuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICB9
Ci0gICAgcHJvdGVjdGVkIGludCBleHRlbnNpb25zU2VyaWFsaXplZFNpemVBc01lc3NhZ2VTZXQo
KSB7Ci0gICAgICByZXR1cm4gZXh0ZW5zaW9ucy5nZXRNZXNzYWdlU2V0U2VyaWFsaXplZFNpemUo
KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTGl0ZSBlcXVpdmFsZW50IG9mIHtAbGluayBH
ZW5lcmF0ZWRNZXNzYWdlLkV4dGVuZGFibGVCdWlsZGVyfS4KLSAgICovCi0gIEBTdXBwcmVzc1dh
cm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwdWJsaWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIEV4dGVu
ZGFibGVCdWlsZGVyPAotICAgICAgICBNZXNzYWdlVHlwZSBleHRlbmRzIEV4dGVuZGFibGVNZXNz
YWdlPE1lc3NhZ2VUeXBlLCBCdWlsZGVyVHlwZT4sCi0gICAgICAgIEJ1aWxkZXJUeXBlIGV4dGVu
ZHMgRXh0ZW5kYWJsZUJ1aWxkZXI8TWVzc2FnZVR5cGUsIEJ1aWxkZXJUeXBlPj4KLSAgICAgIGV4
dGVuZHMgQnVpbGRlcjxNZXNzYWdlVHlwZSwgQnVpbGRlclR5cGU+Ci0gICAgICBpbXBsZW1lbnRz
IEV4dGVuZGFibGVNZXNzYWdlT3JCdWlsZGVyPE1lc3NhZ2VUeXBlLCBCdWlsZGVyVHlwZT4gewot
ICAgIHByb3RlY3RlZCBFeHRlbmRhYmxlQnVpbGRlcihNZXNzYWdlVHlwZSBkZWZhdWx0SW5zdGFu
Y2UpIHsKLSAgICAgIHN1cGVyKGRlZmF1bHRJbnN0YW5jZSk7Ci0gICAgICAKLSAgICAgIC8vIFRP
RE8oZHdlaXMpOiBUaGlzIGlzIGtpbmQgb2YgYW4gdW5uZWNlc3NhcnkgY2xvbmUgc2luY2Ugd2Ug
Y29uc3RydWN0IGEKLSAgICAgIC8vICAgICBuZXcgaW5zdGFuY2UgaW4gdGhlIHBhcmVudCBjb25z
dHJ1Y3RvciB3aGljaCBtYWtlcyB0aGUgZXh0ZW5zaW9ucwotICAgICAgLy8gICAgIGltbXV0YWJs
ZS4gVGhpcyBleHRyYSBhbGxvY2F0aW9uIHNob3VsZG4ndCBtYXR0ZXIgaW4gcHJhY3RpY2UKLSAg
ICAgIC8vICAgICB0aG91Z2guCi0gICAgICBpbnN0YW5jZS5leHRlbnNpb25zID0gaW5zdGFuY2Uu
ZXh0ZW5zaW9ucy5jbG9uZSgpOwotICAgIH0KLQotICAgIC8vIEZvciBpbW11dGFibGUgbWVzc2Fn
ZSBjb252ZXJzaW9uLgotICAgIHZvaWQgaW50ZXJuYWxTZXRFeHRlbnNpb25TZXQoRmllbGRTZXQ8
RXh0ZW5zaW9uRGVzY3JpcHRvcj4gZXh0ZW5zaW9ucykgewotICAgICAgY29weU9uV3JpdGUoKTsK
LSAgICAgIGluc3RhbmNlLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGNvcHlPbldyaXRlKCkgewotICAgICAgaWYgKCFp
c0J1aWx0KSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIAotICAgICAgc3VwZXIu
Y29weU9uV3JpdGUoKTsKLSAgICAgIGluc3RhbmNlLmV4dGVuc2lvbnMgPSBpbnN0YW5jZS5leHRl
bnNpb25zLmNsb25lKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFs
IE1lc3NhZ2VUeXBlIGJ1aWxkUGFydGlhbCgpIHsKLSAgICAgIGlmIChpc0J1aWx0KSB7Ci0gICAg
ICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICAgIH0KLQotICAgICAgaW5zdGFuY2UuZXh0ZW5zaW9u
cy5tYWtlSW1tdXRhYmxlKCk7Ci0gICAgICByZXR1cm4gc3VwZXIuYnVpbGRQYXJ0aWFsKCk7Ci0g
ICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHZlcmlmeUV4dGVuc2lvbkNvbnRhaW5pbmdUeXBlKAot
ICAgICAgICBmaW5hbCBHZW5lcmF0ZWRFeHRlbnNpb248TWVzc2FnZVR5cGUsID8+IGV4dGVuc2lv
bikgewotICAgICAgaWYgKGV4dGVuc2lvbi5nZXRDb250YWluaW5nVHlwZURlZmF1bHRJbnN0YW5j
ZSgpICE9Ci0gICAgICAgICAgZ2V0RGVmYXVsdEluc3RhbmNlRm9yVHlwZSgpKSB7Ci0gICAgICAg
IC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHNvbWVvbmUgdXNlcyB1bmNoZWNrZWQgb3BlcmF0
aW9ucy4KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAg
ICAgICAiVGhpcyBleHRlbnNpb24gaXMgZm9yIGEgZGlmZmVyZW50IG1lc3NhZ2UgdHlwZS4gIFBs
ZWFzZSBtYWtlICIgKwotICAgICAgICAgICJzdXJlIHRoYXQgeW91IGFyZSBub3Qgc3VwcHJlc3Np
bmcgYW55IGdlbmVyaWNzIHR5cGUgd2FybmluZ3MuIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
LyoqIENoZWNrIGlmIGEgc2luZ3VsYXIgZXh0ZW5zaW9uIGlzIHByZXNlbnQuICovCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIDxUeXBlPiBib29sZWFuIGhhc0V4dGVuc2lvbihmaW5h
bCBFeHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBUeXBlPiBleHRlbnNpb24pIHsKLSAgICAgIHJl
dHVybiBpbnN0YW5jZS5oYXNFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLSAgICB9Ci0KLSAgICAvKiog
R2V0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSByZXBlYXRlZCBleHRlbnNpb24uICovCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIDxUeXBlPiBpbnQgZ2V0RXh0ZW5zaW9uQ291
bnQoCi0gICAgICAgIGZpbmFsIEV4dGVuc2lvbkxpdGU8TWVzc2FnZVR5cGUsIExpc3Q8VHlwZT4+
IGV4dGVuc2lvbikgewotICAgICAgcmV0dXJuIGluc3RhbmNlLmdldEV4dGVuc2lvbkNvdW50KGV4
dGVuc2lvbik7Ci0gICAgfQotCi0gICAgLyoqIEdldCB0aGUgdmFsdWUgb2YgYW4gZXh0ZW5zaW9u
LiAqLwotICAgIEBPdmVycmlkZQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQot
ICAgIHB1YmxpYyBmaW5hbCA8VHlwZT4gVHlwZSBnZXRFeHRlbnNpb24oZmluYWwgRXh0ZW5zaW9u
TGl0ZTxNZXNzYWdlVHlwZSwgVHlwZT4gZXh0ZW5zaW9uKSB7Ci0gICAgICByZXR1cm4gaW5zdGFu
Y2UuZ2V0RXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci0gICAgfQotCi0gICAgLyoqIEdldCBvbmUgZWxl
bWVudCBvZiBhIHJlcGVhdGVkIGV4dGVuc2lvbi4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBAU3Vw
cHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICBwdWJsaWMgZmluYWwgPFR5cGU+IFR5cGUg
Z2V0RXh0ZW5zaW9uKAotICAgICAgICBmaW5hbCBFeHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBM
aXN0PFR5cGU+PiBleHRlbnNpb24sIGZpbmFsIGludCBpbmRleCkgewotICAgICAgcmV0dXJuIGlu
c3RhbmNlLmdldEV4dGVuc2lvbihleHRlbnNpb24sIGluZGV4KTsKLSAgICB9Ci0KLSAgICAvLyBU
aGlzIGlzIGltcGxlbWVudGVkIGhlcmUgb25seSB0byB3b3JrIGFyb3VuZCBhbiBhcHBhcmVudCBi
dWcgaW4gdGhlCi0gICAgLy8gSmF2YSBjb21waWxlciBhbmQvb3IgYnVpbGQgc3lzdGVtLiAgU2Vl
IGJ1ZyAjMTg5ODQ2My4gIFRoZSBtZXJlIHByZXNlbmNlCi0gICAgLy8gb2YgdGhpcyBkdW1teSBj
bG9uZSgpIGltcGxlbWVudGF0aW9uIG1ha2VzIGl0IGdvIGF3YXkuCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIEJ1aWxkZXJUeXBlIGNsb25lKCkgewotICAgICAgcmV0dXJuIHN1cGVyLmNsb25l
KCk7Ci0gICAgfQotICAgIAotICAgIC8qKiBTZXQgdGhlIHZhbHVlIG9mIGFuIGV4dGVuc2lvbi4g
Ki8KLSAgICBwdWJsaWMgZmluYWwgPFR5cGU+IEJ1aWxkZXJUeXBlIHNldEV4dGVuc2lvbigKLSAg
ICAgICAgZmluYWwgRXh0ZW5zaW9uTGl0ZTxNZXNzYWdlVHlwZSwgVHlwZT4gZXh0ZW5zaW9uLAot
ICAgICAgICBmaW5hbCBUeXBlIHZhbHVlKSB7Ci0gICAgICBHZW5lcmF0ZWRFeHRlbnNpb248TWVz
c2FnZVR5cGUsIFR5cGU+IGV4dGVuc2lvbkxpdGUgPQotICAgICAgICAgIGNoZWNrSXNMaXRlKGV4
dGVuc2lvbik7Ci0gICAgICAKLSAgICAgIHZlcmlmeUV4dGVuc2lvbkNvbnRhaW5pbmdUeXBlKGV4
dGVuc2lvbkxpdGUpOwotICAgICAgY29weU9uV3JpdGUoKTsKLSAgICAgIGluc3RhbmNlLmV4dGVu
c2lvbnMuc2V0RmllbGQoZXh0ZW5zaW9uTGl0ZS5kZXNjcmlwdG9yLCBleHRlbnNpb25MaXRlLnRv
RmllbGRTZXRUeXBlKHZhbHVlKSk7Ci0gICAgICByZXR1cm4gKEJ1aWxkZXJUeXBlKSB0aGlzOwot
ICAgIH0KLQotICAgIC8qKiBTZXQgdGhlIHZhbHVlIG9mIG9uZSBlbGVtZW50IG9mIGEgcmVwZWF0
ZWQgZXh0ZW5zaW9uLiAqLwotICAgIHB1YmxpYyBmaW5hbCA8VHlwZT4gQnVpbGRlclR5cGUgc2V0
RXh0ZW5zaW9uKAotICAgICAgICBmaW5hbCBFeHRlbnNpb25MaXRlPE1lc3NhZ2VUeXBlLCBMaXN0
PFR5cGU+PiBleHRlbnNpb24sCi0gICAgICAgIGZpbmFsIGludCBpbmRleCwgZmluYWwgVHlwZSB2
YWx1ZSkgewotICAgICAgR2VuZXJhdGVkRXh0ZW5zaW9uPE1lc3NhZ2VUeXBlLCBMaXN0PFR5cGU+
PiBleHRlbnNpb25MaXRlID0KLSAgICAgICAgICBjaGVja0lzTGl0ZShleHRlbnNpb24pOwotICAg
ICAgCi0gICAgICB2ZXJpZnlFeHRlbnNpb25Db250YWluaW5nVHlwZShleHRlbnNpb25MaXRlKTsK
LSAgICAgIGNvcHlPbldyaXRlKCk7Ci0gICAgICBpbnN0YW5jZS5leHRlbnNpb25zLnNldFJlcGVh
dGVkRmllbGQoCi0gICAgICAgICAgZXh0ZW5zaW9uTGl0ZS5kZXNjcmlwdG9yLCBpbmRleCwgZXh0
ZW5zaW9uTGl0ZS5zaW5ndWxhclRvRmllbGRTZXRUeXBlKHZhbHVlKSk7Ci0gICAgICByZXR1cm4g
KEJ1aWxkZXJUeXBlKSB0aGlzOwotICAgIH0KLQotICAgIC8qKiBBcHBlbmQgYSB2YWx1ZSB0byBh
IHJlcGVhdGVkIGV4dGVuc2lvbi4gKi8KLSAgICBwdWJsaWMgZmluYWwgPFR5cGU+IEJ1aWxkZXJU
eXBlIGFkZEV4dGVuc2lvbigKLSAgICAgICAgZmluYWwgRXh0ZW5zaW9uTGl0ZTxNZXNzYWdlVHlw
ZSwgTGlzdDxUeXBlPj4gZXh0ZW5zaW9uLAotICAgICAgICBmaW5hbCBUeXBlIHZhbHVlKSB7Ci0g
ICAgICBHZW5lcmF0ZWRFeHRlbnNpb248TWVzc2FnZVR5cGUsIExpc3Q8VHlwZT4+IGV4dGVuc2lv
bkxpdGUgPQotICAgICAgICAgIGNoZWNrSXNMaXRlKGV4dGVuc2lvbik7Ci0gICAgICAKLSAgICAg
IHZlcmlmeUV4dGVuc2lvbkNvbnRhaW5pbmdUeXBlKGV4dGVuc2lvbkxpdGUpOwotICAgICAgY29w
eU9uV3JpdGUoKTsKLSAgICAgIGluc3RhbmNlLmV4dGVuc2lvbnMuYWRkUmVwZWF0ZWRGaWVsZCgK
LSAgICAgICAgICBleHRlbnNpb25MaXRlLmRlc2NyaXB0b3IsIGV4dGVuc2lvbkxpdGUuc2luZ3Vs
YXJUb0ZpZWxkU2V0VHlwZSh2YWx1ZSkpOwotICAgICAgcmV0dXJuIChCdWlsZGVyVHlwZSkgdGhp
czsKLSAgICB9Ci0KLSAgICAvKiogQ2xlYXIgYW4gZXh0ZW5zaW9uLiAqLwotICAgIHB1YmxpYyBm
aW5hbCA8VHlwZT4gQnVpbGRlclR5cGUgY2xlYXJFeHRlbnNpb24oCi0gICAgICAgIGZpbmFsIEV4
dGVuc2lvbkxpdGU8TWVzc2FnZVR5cGUsID8+IGV4dGVuc2lvbikgewotICAgICAgR2VuZXJhdGVk
RXh0ZW5zaW9uPE1lc3NhZ2VUeXBlLCA/PiBleHRlbnNpb25MaXRlID0gY2hlY2tJc0xpdGUoZXh0
ZW5zaW9uKTsKLSAgICAgIAotICAgICAgdmVyaWZ5RXh0ZW5zaW9uQ29udGFpbmluZ1R5cGUoZXh0
ZW5zaW9uTGl0ZSk7Ci0gICAgICBjb3B5T25Xcml0ZSgpOwotICAgICAgaW5zdGFuY2UuZXh0ZW5z
aW9ucy5jbGVhckZpZWxkKGV4dGVuc2lvbkxpdGUuZGVzY3JpcHRvcik7Ci0gICAgICByZXR1cm4g
KEJ1aWxkZXJUeXBlKSB0aGlzOwotICAgIH0KLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLyoq
IEZvciB1c2UgYnkgZ2VuZXJhdGVkIGNvZGUgb25seS4gKi8KLSAgcHVibGljIHN0YXRpYyA8Q29u
dGFpbmluZ1R5cGUgZXh0ZW5kcyBNZXNzYWdlTGl0ZSwgVHlwZT4KLSAgICAgIEdlbmVyYXRlZEV4
dGVuc2lvbjxDb250YWluaW5nVHlwZSwgVHlwZT4KLSAgICAgICAgICBuZXdTaW5ndWxhckdlbmVy
YXRlZEV4dGVuc2lvbigKLSAgICAgICAgICAgICAgZmluYWwgQ29udGFpbmluZ1R5cGUgY29udGFp
bmluZ1R5cGVEZWZhdWx0SW5zdGFuY2UsCi0gICAgICAgICAgICAgIGZpbmFsIFR5cGUgZGVmYXVs
dFZhbHVlLAotICAgICAgICAgICAgICBmaW5hbCBNZXNzYWdlTGl0ZSBtZXNzYWdlRGVmYXVsdElu
c3RhbmNlLAotICAgICAgICAgICAgICBmaW5hbCBJbnRlcm5hbC5FbnVtTGl0ZU1hcDw/PiBlbnVt
VHlwZU1hcCwKLSAgICAgICAgICAgICAgZmluYWwgaW50IG51bWJlciwKLSAgICAgICAgICAgICAg
ZmluYWwgV2lyZUZvcm1hdC5GaWVsZFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgZmluYWwgQ2xh
c3Mgc2luZ3VsYXJUeXBlKSB7Ci0gICAgcmV0dXJuIG5ldyBHZW5lcmF0ZWRFeHRlbnNpb248Q29u
dGFpbmluZ1R5cGUsIFR5cGU+KAotICAgICAgICBjb250YWluaW5nVHlwZURlZmF1bHRJbnN0YW5j
ZSwKLSAgICAgICAgZGVmYXVsdFZhbHVlLAotICAgICAgICBtZXNzYWdlRGVmYXVsdEluc3RhbmNl
LAotICAgICAgICBuZXcgRXh0ZW5zaW9uRGVzY3JpcHRvcihlbnVtVHlwZU1hcCwgbnVtYmVyLCB0
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBpc1JlcGVhdGVk
ICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBpc1BhY2tlZCAq
LyksCi0gICAgICAgIHNpbmd1bGFyVHlwZSk7Ci0gIH0KLQotICAvKiogRm9yIHVzZSBieSBnZW5l
cmF0ZWQgY29kZSBvbmx5LiAqLwotICBwdWJsaWMgc3RhdGljIDxDb250YWluaW5nVHlwZSBleHRl
bmRzIE1lc3NhZ2VMaXRlLCBUeXBlPgotICAgICAgR2VuZXJhdGVkRXh0ZW5zaW9uPENvbnRhaW5p
bmdUeXBlLCBUeXBlPgotICAgICAgICAgIG5ld1JlcGVhdGVkR2VuZXJhdGVkRXh0ZW5zaW9uKAot
ICAgICAgICAgICAgICBmaW5hbCBDb250YWluaW5nVHlwZSBjb250YWluaW5nVHlwZURlZmF1bHRJ
bnN0YW5jZSwKLSAgICAgICAgICAgICAgZmluYWwgTWVzc2FnZUxpdGUgbWVzc2FnZURlZmF1bHRJ
bnN0YW5jZSwKLSAgICAgICAgICAgICAgZmluYWwgSW50ZXJuYWwuRW51bUxpdGVNYXA8Pz4gZW51
bVR5cGVNYXAsCi0gICAgICAgICAgICAgIGZpbmFsIGludCBudW1iZXIsCi0gICAgICAgICAgICAg
IGZpbmFsIFdpcmVGb3JtYXQuRmllbGRUeXBlIHR5cGUsCi0gICAgICAgICAgICAgIGZpbmFsIGJv
b2xlYW4gaXNQYWNrZWQsCi0gICAgICAgICAgICAgIGZpbmFsIENsYXNzIHNpbmd1bGFyVHlwZSkg
ewotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKSAgLy8gU3ViY2xhc3NlcyBlbnN1
cmUgVHlwZSBpcyBhIExpc3QKLSAgICBUeXBlIGVtcHR5TGlzdCA9IChUeXBlKSBDb2xsZWN0aW9u
cy5lbXB0eUxpc3QoKTsKLSAgICByZXR1cm4gbmV3IEdlbmVyYXRlZEV4dGVuc2lvbjxDb250YWlu
aW5nVHlwZSwgVHlwZT4oCi0gICAgICAgIGNvbnRhaW5pbmdUeXBlRGVmYXVsdEluc3RhbmNlLAot
ICAgICAgICBlbXB0eUxpc3QsCi0gICAgICAgIG1lc3NhZ2VEZWZhdWx0SW5zdGFuY2UsCi0gICAg
ICAgIG5ldyBFeHRlbnNpb25EZXNjcmlwdG9yKAotICAgICAgICAgICAgZW51bVR5cGVNYXAsIG51
bWJlciwgdHlwZSwgdHJ1ZSAvKiBpc1JlcGVhdGVkICovLCBpc1BhY2tlZCksCi0gICAgICAgIHNp
bmd1bGFyVHlwZSk7Ci0gIH0KLQotICBzdGF0aWMgZmluYWwgY2xhc3MgRXh0ZW5zaW9uRGVzY3Jp
cHRvcgotICAgICAgaW1wbGVtZW50cyBGaWVsZFNldC5GaWVsZERlc2NyaXB0b3JMaXRlPAotICAg
ICAgICBFeHRlbnNpb25EZXNjcmlwdG9yPiB7Ci0gICAgRXh0ZW5zaW9uRGVzY3JpcHRvcigKLSAg
ICAgICAgZmluYWwgSW50ZXJuYWwuRW51bUxpdGVNYXA8Pz4gZW51bVR5cGVNYXAsCi0gICAgICAg
IGZpbmFsIGludCBudW1iZXIsCi0gICAgICAgIGZpbmFsIFdpcmVGb3JtYXQuRmllbGRUeXBlIHR5
cGUsCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gaXNSZXBlYXRlZCwKLSAgICAgICAgZmluYWwgYm9v
bGVhbiBpc1BhY2tlZCkgewotICAgICAgdGhpcy5lbnVtVHlwZU1hcCA9IGVudW1UeXBlTWFwOwot
ICAgICAgdGhpcy5udW1iZXIgPSBudW1iZXI7Ci0gICAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAg
ICAgdGhpcy5pc1JlcGVhdGVkID0gaXNSZXBlYXRlZDsKLSAgICAgIHRoaXMuaXNQYWNrZWQgPSBp
c1BhY2tlZDsKLSAgICB9Ci0KLSAgICBmaW5hbCBJbnRlcm5hbC5FbnVtTGl0ZU1hcDw/PiBlbnVt
VHlwZU1hcDsKLSAgICBmaW5hbCBpbnQgbnVtYmVyOwotICAgIGZpbmFsIFdpcmVGb3JtYXQuRmll
bGRUeXBlIHR5cGU7Ci0gICAgZmluYWwgYm9vbGVhbiBpc1JlcGVhdGVkOwotICAgIGZpbmFsIGJv
b2xlYW4gaXNQYWNrZWQ7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldE51bWJl
cigpIHsKLSAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIFdpcmVGb3JtYXQuRmllbGRUeXBlIGdldExpdGVUeXBlKCkgewotICAgICAgcmV0dXJu
IHR5cGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFdpcmVGb3JtYXQuSmF2
YVR5cGUgZ2V0TGl0ZUphdmFUeXBlKCkgewotICAgICAgcmV0dXJuIHR5cGUuZ2V0SmF2YVR5cGUo
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1JlcGVhdGVk
KCkgewotICAgICAgcmV0dXJuIGlzUmVwZWF0ZWQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIGJvb2xlYW4gaXNQYWNrZWQoKSB7Ci0gICAgICByZXR1cm4gaXNQYWNrZWQ7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEludGVybmFsLkVudW1MaXRlTWFwPD8+
IGdldEVudW1UeXBlKCkgewotICAgICAgcmV0dXJuIGVudW1UeXBlTWFwOwotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgIHB1Ymxp
YyBNZXNzYWdlTGl0ZS5CdWlsZGVyIGludGVybmFsTWVyZ2VGcm9tKE1lc3NhZ2VMaXRlLkJ1aWxk
ZXIgdG8sIE1lc3NhZ2VMaXRlIGZyb20pIHsKLSAgICAgIHJldHVybiAoKEJ1aWxkZXIpIHRvKS5t
ZXJnZUZyb20oKEdlbmVyYXRlZE1lc3NhZ2VMaXRlKSBmcm9tKTsKLSAgICB9Ci0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKEV4dGVuc2lvbkRlc2NyaXB0b3Igb3Ro
ZXIpIHsKLSAgICAgIHJldHVybiBudW1iZXIgLSBvdGhlci5udW1iZXI7Ci0gICAgfQotICB9Ci0K
LSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLQotICAvKiogQ2FsbHMgQ2xhc3MuZ2V0TWV0aG9kIGFuZCB0aHJvd3Mg
YSBSdW50aW1lRXhjZXB0aW9uIGlmIGl0IGZhaWxzLiAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygi
dW5jaGVja2VkIikKLSAgc3RhdGljIE1ldGhvZCBnZXRNZXRob2RPckRpZShDbGFzcyBjbGF6eiwg
U3RyaW5nIG5hbWUsIENsYXNzLi4uIHBhcmFtcykgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4g
Y2xhenouZ2V0TWV0aG9kKG5hbWUsIHBhcmFtcyk7Ci0gICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9k
RXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAg
ICAiR2VuZXJhdGVkIG1lc3NhZ2UgY2xhc3MgXCIiICsgY2xhenouZ2V0TmFtZSgpICsKLSAgICAg
ICAgIlwiIG1pc3NpbmcgbWV0aG9kIFwiIiArIG5hbWUgKyAiXCIuIiwgZSk7Ci0gICAgfQotICB9
Ci0KLSAgLyoqIENhbGxzIGludm9rZSBhbmQgdGhyb3dzIGEgUnVudGltZUV4Y2VwdGlvbiBpZiBp
dCBmYWlscy4gKi8KLSAgc3RhdGljIE9iamVjdCBpbnZva2VPckRpZShNZXRob2QgbWV0aG9kLCBP
YmplY3Qgb2JqZWN0LCBPYmplY3QuLi4gcGFyYW1zKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVy
biBtZXRob2QuaW52b2tlKG9iamVjdCwgcGFyYW1zKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQWNj
ZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAg
ICAgICAiQ291bGRuJ3QgdXNlIEphdmEgcmVmbGVjdGlvbiB0byBpbXBsZW1lbnQgcHJvdG9jb2wg
bWVzc2FnZSAiICsKLSAgICAgICAgInJlZmxlY3Rpb24uIiwgZSk7Ci0gICAgfSBjYXRjaCAoSW52
b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmaW5hbCBUaHJvd2FibGUgY2F1c2Ug
PSBlLmdldENhdXNlKCk7Ci0gICAgICBpZiAoY2F1c2UgaW5zdGFuY2VvZiBSdW50aW1lRXhjZXB0
aW9uKSB7Ci0gICAgICAgIHRocm93IChSdW50aW1lRXhjZXB0aW9uKSBjYXVzZTsKLSAgICAgIH0g
ZWxzZSBpZiAoY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikgewotICAgICAgICB0aHJvdyAoRXJyb3Ip
IGNhdXNlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oCi0gICAgICAgICAgIlVuZXhwZWN0ZWQgZXhjZXB0aW9uIHRocm93biBieSBnZW5lcmF0ZWQg
YWNjZXNzb3IgbWV0aG9kLiIsIGNhdXNlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioK
LSAgICogTGl0ZSBlcXVpdmFsZW50IHRvIHtAbGluayBHZW5lcmF0ZWRNZXNzYWdlLkdlbmVyYXRl
ZEV4dGVuc2lvbn0uCi0gICAqCi0gICAqIFVzZXJzIHNob3VsZCBpZ25vcmUgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgY2xhc3MgYW5kIG9ubHkgdXNlIG9iamVjdHMgb2YKLSAgICogdGhpcyB0eXBlIGFz
IHBhcmFtZXRlcnMgdG8gZXh0ZW5zaW9uIGFjY2Vzc29ycyBhbmQgRXh0ZW5zaW9uUmVnaXN0cnku
YWRkKCkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEdlbmVyYXRlZEV4dGVuc2lvbjwK
LSAgICAgIENvbnRhaW5pbmdUeXBlIGV4dGVuZHMgTWVzc2FnZUxpdGUsIFR5cGU+Ci0gICAgICAg
ICAgZXh0ZW5kcyBFeHRlbnNpb25MaXRlPENvbnRhaW5pbmdUeXBlLCBUeXBlPiB7Ci0KLSAgICAv
KioKLSAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVy
cy4KLSAgICAgKgotICAgICAqIFRoZSBsYXN0IHBhcmFtZXRlciB7QGNvZGUgc2luZ3VsYXJUeXBl
fSBpcyBvbmx5IG5lZWRlZCBmb3IgZW51bSB0eXBlcy4KLSAgICAgKiBXZSBzdG9yZSBpbnRlZ2Vy
IHZhbHVlcyBmb3IgZW51bSB0eXBlcyBpbiBhIHtAbGluayBFeHRlbmRhYmxlTWVzc2FnZX0KLSAg
ICAgKiBhbmQgdXNlIEphdmEgcmVmbGVjdGlvbiB0byBjb252ZXJ0IGFuIGludGVnZXIgdmFsdWUg
YmFjayBpbnRvIGEgY29uY3JldGUKLSAgICAgKiBlbnVtIG9iamVjdC4KLSAgICAgKi8KLSAgICBH
ZW5lcmF0ZWRFeHRlbnNpb24oCi0gICAgICAgIGZpbmFsIENvbnRhaW5pbmdUeXBlIGNvbnRhaW5p
bmdUeXBlRGVmYXVsdEluc3RhbmNlLAotICAgICAgICBmaW5hbCBUeXBlIGRlZmF1bHRWYWx1ZSwK
LSAgICAgICAgZmluYWwgTWVzc2FnZUxpdGUgbWVzc2FnZURlZmF1bHRJbnN0YW5jZSwKLSAgICAg
ICAgZmluYWwgRXh0ZW5zaW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yLAotICAgICAgICBmaW5hbCBD
bGFzcyBzaW5ndWxhclR5cGUpIHsKLSAgICAgIC8vIERlZmVuc2l2ZSBjaGVja3MgdG8gdmVyaWZ5
IHRoZSBjb3JyZWN0IGluaXRpYWxpemF0aW9uIG9yZGVyIG9mCi0gICAgICAvLyBHZW5lcmF0ZWRF
eHRlbnNpb25zIGFuZCB0aGVpciByZWxhdGVkIEdlbmVyYXRlZE1lc3NhZ2VzLgotICAgICAgaWYg
KGNvbnRhaW5pbmdUeXBlRGVmYXVsdEluc3RhbmNlID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cg
bmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJOdWxsIGNvbnRhaW5p
bmdUeXBlRGVmYXVsdEluc3RhbmNlIik7Ci0gICAgICB9Ci0gICAgICBpZiAoZGVzY3JpcHRvci5n
ZXRMaXRlVHlwZSgpID09IFdpcmVGb3JtYXQuRmllbGRUeXBlLk1FU1NBR0UgJiYKLSAgICAgICAg
ICBtZXNzYWdlRGVmYXVsdEluc3RhbmNlID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IEls
bGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJOdWxsIG1lc3NhZ2VEZWZhdWx0
SW5zdGFuY2UiKTsKLSAgICAgIH0KLSAgICAgIHRoaXMuY29udGFpbmluZ1R5cGVEZWZhdWx0SW5z
dGFuY2UgPSBjb250YWluaW5nVHlwZURlZmF1bHRJbnN0YW5jZTsKLSAgICAgIHRoaXMuZGVmYXVs
dFZhbHVlID0gZGVmYXVsdFZhbHVlOwotICAgICAgdGhpcy5tZXNzYWdlRGVmYXVsdEluc3RhbmNl
ID0gbWVzc2FnZURlZmF1bHRJbnN0YW5jZTsKLSAgICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2Ny
aXB0b3I7Ci0gICAgfQotCi0gICAgZmluYWwgQ29udGFpbmluZ1R5cGUgY29udGFpbmluZ1R5cGVE
ZWZhdWx0SW5zdGFuY2U7Ci0gICAgZmluYWwgVHlwZSBkZWZhdWx0VmFsdWU7Ci0gICAgZmluYWwg
TWVzc2FnZUxpdGUgbWVzc2FnZURlZmF1bHRJbnN0YW5jZTsKLSAgICBmaW5hbCBFeHRlbnNpb25E
ZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0KLSAgICAvKioKLSAgICAgKiBEZWZhdWx0IGluc3RhbmNl
IG9mIHRoZSB0eXBlIGJlaW5nIGV4dGVuZGVkLCB1c2VkIHRvIGlkZW50aWZ5IHRoYXQgdHlwZS4K
LSAgICAgKi8KLSAgICBwdWJsaWMgQ29udGFpbmluZ1R5cGUgZ2V0Q29udGFpbmluZ1R5cGVEZWZh
dWx0SW5zdGFuY2UoKSB7Ci0gICAgICByZXR1cm4gY29udGFpbmluZ1R5cGVEZWZhdWx0SW5zdGFu
Y2U7Ci0gICAgfQotCi0gICAgLyoqIEdldCB0aGUgZmllbGQgbnVtYmVyLiAqLwotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyKCkgewotICAgICAgcmV0dXJuIGRlc2NyaXB0
b3IuZ2V0TnVtYmVyKCk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBJZiB0aGUgZXh0ZW5z
aW9uIGlzIGFuIGVtYmVkZGVkIG1lc3NhZ2Ugb3IgZ3JvdXAsIHJldHVybnMgdGhlIGRlZmF1bHQK
LSAgICAgKiBpbnN0YW5jZSBvZiB0aGUgbWVzc2FnZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgTWVzc2FnZUxpdGUgZ2V0TWVzc2FnZURlZmF1bHRJbnN0YW5jZSgpIHsKLSAg
ICAgIHJldHVybiBtZXNzYWdlRGVmYXVsdEluc3RhbmNlOwotICAgIH0KLQotICAgIEBTdXBwcmVz
c1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgIE9iamVjdCBmcm9tRmllbGRTZXRUeXBlKGZpbmFs
IE9iamVjdCB2YWx1ZSkgewotICAgICAgaWYgKGRlc2NyaXB0b3IuaXNSZXBlYXRlZCgpKSB7Ci0g
ICAgICAgIGlmIChkZXNjcmlwdG9yLmdldExpdGVKYXZhVHlwZSgpID09IFdpcmVGb3JtYXQuSmF2
YVR5cGUuRU5VTSkgewotICAgICAgICAgIGZpbmFsIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlz
dCgpOwotICAgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiAoTGlzdCkgdmFsdWUp
IHsKLSAgICAgICAgICAgIHJlc3VsdC5hZGQoc2luZ3VsYXJGcm9tRmllbGRTZXRUeXBlKGVsZW1l
bnQpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJldHVybiBzaW5ndWxhckZyb21GaWVsZFNldFR5cGUodmFsdWUpOwotICAgICAg
fQotICAgIH0KLQotICAgIE9iamVjdCBzaW5ndWxhckZyb21GaWVsZFNldFR5cGUoZmluYWwgT2Jq
ZWN0IHZhbHVlKSB7Ci0gICAgICBpZiAoZGVzY3JpcHRvci5nZXRMaXRlSmF2YVR5cGUoKSA9PSBX
aXJlRm9ybWF0LkphdmFUeXBlLkVOVU0pIHsKLSAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZW51
bVR5cGVNYXAuZmluZFZhbHVlQnlOdW1iZXIoKEludGVnZXIpIHZhbHVlKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAU3VwcHJl
c3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICBPYmplY3QgdG9GaWVsZFNldFR5cGUoZmluYWwg
T2JqZWN0IHZhbHVlKSB7Ci0gICAgICBpZiAoZGVzY3JpcHRvci5pc1JlcGVhdGVkKCkpIHsKLSAg
ICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0TGl0ZUphdmFUeXBlKCkgPT0gV2lyZUZvcm1hdC5KYXZh
VHlwZS5FTlVNKSB7Ci0gICAgICAgICAgZmluYWwgTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0
KCk7Ci0gICAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IChMaXN0KSB2YWx1ZSkg
ewotICAgICAgICAgICAgcmVzdWx0LmFkZChzaW5ndWxhclRvRmllbGRTZXRUeXBlKGVsZW1lbnQp
KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHJldHVybiBzaW5ndWxhclRvRmllbGRTZXRUeXBlKHZhbHVlKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBPYmplY3Qgc2luZ3VsYXJUb0ZpZWxkU2V0VHlwZShmaW5hbCBPYmplY3QgdmFs
dWUpIHsKLSAgICAgIGlmIChkZXNjcmlwdG9yLmdldExpdGVKYXZhVHlwZSgpID09IFdpcmVGb3Jt
YXQuSmF2YVR5cGUuRU5VTSkgewotICAgICAgICByZXR1cm4gKChJbnRlcm5hbC5FbnVtTGl0ZSkg
dmFsdWUpLmdldE51bWJlcigpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWVsZFR5cGUg
Z2V0TGl0ZVR5cGUoKSB7Ci0gICAgICByZXR1cm4gZGVzY3JpcHRvci5nZXRMaXRlVHlwZSgpOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzUmVwZWF0ZWQoKSB7
Ci0gICAgICByZXR1cm4gZGVzY3JpcHRvci5pc1JlcGVhdGVkOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBUeXBlIGdldERlZmF1bHRWYWx1ZSgpIHsKLSAgICAgIHJldHVybiBk
ZWZhdWx0VmFsdWU7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEEgc2VyaWFsaXplZCAoc2Vy
aWFsaXphYmxlKSBmb3JtIG9mIHRoZSBnZW5lcmF0ZWQgbWVzc2FnZS4gIFN0b3JlcyB0aGUKLSAg
ICogbWVzc2FnZSBhcyBhIGNsYXNzIG5hbWUgYW5kIGEgYnl0ZSBhcnJheS4KLSAgICovCi0gIHBy
b3RlY3RlZCBzdGF0aWMgZmluYWwgY2xhc3MgU2VyaWFsaXplZEZvcm0gaW1wbGVtZW50cyBTZXJp
YWxpemFibGUgewotCi0gICAgcHVibGljIHN0YXRpYyBTZXJpYWxpemVkRm9ybSBvZihNZXNzYWdl
TGl0ZSBtZXNzYWdlKSB7Ci0gICAgICByZXR1cm4gbmV3IFNlcmlhbGl6ZWRGb3JtKG1lc3NhZ2Up
OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNp
b25VSUQgPSAwTDsKLQotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1lc3NhZ2VDbGFzc05hbWU7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBieXRlW10gYXNCeXRlczsKLQotICAgIC8qKgotICAgICAqIENy
ZWF0ZXMgdGhlIHNlcmlhbGl6ZWQgZm9ybSBieSBjYWxsaW5nIHtAbGluayBjb20uZ29vZ2xlLnBy
b3RvYnVmLk1lc3NhZ2VMaXRlI3RvQnl0ZUFycmF5fS4KLSAgICAgKiBAcGFyYW0gcmVndWxhckZv
cm0gdGhlIG1lc3NhZ2UgdG8gc2VyaWFsaXplCi0gICAgICovCi0gICAgU2VyaWFsaXplZEZvcm0o
TWVzc2FnZUxpdGUgcmVndWxhckZvcm0pIHsKLSAgICAgIG1lc3NhZ2VDbGFzc05hbWUgPSByZWd1
bGFyRm9ybS5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICAgIGFzQnl0ZXMgPSByZWd1bGFyRm9y
bS50b0J5dGVBcnJheSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdoZW4gcmVhZCBmcm9t
IGFuIE9iamVjdElucHV0U3RyZWFtLCB0aGlzIG1ldGhvZCBjb252ZXJ0cyB0aGlzIG9iamVjdAot
ICAgICAqIGJhY2sgdG8gdGhlIHJlZ3VsYXIgZm9ybS4gIFBhcnQgb2YgSmF2YSdzIHNlcmlhbGl6
YXRpb24gbWFnaWMuCi0gICAgICogQHJldHVybiBhIEdlbmVyYXRlZE1lc3NhZ2Ugb2YgdGhlIHR5
cGUgdGhhdCB3YXMgc2VyaWFsaXplZAotICAgICAqLwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1
bmNoZWNrZWQiKQotICAgIHByb3RlY3RlZCBPYmplY3QgcmVhZFJlc29sdmUoKSB0aHJvd3MgT2Jq
ZWN0U3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIENsYXNzPD8+IG1lc3Nh
Z2VDbGFzcyA9IENsYXNzLmZvck5hbWUobWVzc2FnZUNsYXNzTmFtZSk7Ci0gICAgICAgIGphdmEu
bGFuZy5yZWZsZWN0LkZpZWxkIGRlZmF1bHRJbnN0YW5jZUZpZWxkID0KLSAgICAgICAgICAgIG1l
c3NhZ2VDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJERUZBVUxUX0lOU1RBTkNFIik7Ci0gICAgICAg
IGRlZmF1bHRJbnN0YW5jZUZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0gICAgICAgIE1lc3Nh
Z2VMaXRlIGRlZmF1bHRJbnN0YW5jZSA9IChNZXNzYWdlTGl0ZSkgZGVmYXVsdEluc3RhbmNlRmll
bGQuZ2V0KG51bGwpOwotICAgICAgICByZXR1cm4gZGVmYXVsdEluc3RhbmNlLm5ld0J1aWxkZXJG
b3JUeXBlKCkKLSAgICAgICAgICAgIC5tZXJnZUZyb20oYXNCeXRlcykKLSAgICAgICAgICAgIC5i
dWlsZFBhcnRpYWwoKTsKLSAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkg
ewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGZpbmQgcHJv
dG8gYnVmZmVyIGNsYXNzOiAiICsgbWVzc2FnZUNsYXNzTmFtZSwgZSk7Ci0gICAgICB9IGNhdGNo
IChOb1N1Y2hGaWVsZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJVbmFibGUgdG8gZmluZCBERUZBVUxUX0lOU1RBTkNFIGluICIgKyBtZXNzYWdlQ2xh
c3NOYW1lLCBlKTsKLSAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBjYWxsIERFRkFVTFRfSU5T
VEFOQ0UgaW4gIiArIG1lc3NhZ2VDbGFzc05hbWUsIGUpOwotICAgICAgfSBjYXRjaCAoSWxsZWdh
bEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJVbmFibGUgdG8gY2FsbCBwYXJzZVBhcnRpYWxGcm9tIiwgZSk7Ci0gICAgICB9IGNhdGNoIChJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIHVuZGVyc3RhbmQgcHJvdG8gYnVmZmVyIiwgZSk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQ2hlY2tzIHRoYXQgdGhlIHtAbGlu
ayBFeHRlbnNpb259IGlzIExpdGUgYW5kIHJldHVybnMgaXQgYXMgYQotICAgKiB7QGxpbmsgR2Vu
ZXJhdGVkRXh0ZW5zaW9ufS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIDwKLSAgICAgIE1lc3Nh
Z2VUeXBlIGV4dGVuZHMgRXh0ZW5kYWJsZU1lc3NhZ2U8TWVzc2FnZVR5cGUsIEJ1aWxkZXJUeXBl
PiwKLSAgICAgIEJ1aWxkZXJUeXBlIGV4dGVuZHMgRXh0ZW5kYWJsZUJ1aWxkZXI8TWVzc2FnZVR5
cGUsIEJ1aWxkZXJUeXBlPiwKLSAgICAgIFQ+Ci0gICAgR2VuZXJhdGVkRXh0ZW5zaW9uPE1lc3Nh
Z2VUeXBlLCBUPiBjaGVja0lzTGl0ZSgKLSAgICAgICAgRXh0ZW5zaW9uTGl0ZTxNZXNzYWdlVHlw
ZSwgVD4gZXh0ZW5zaW9uKSB7Ci0gICAgaWYgKCFleHRlbnNpb24uaXNMaXRlKCkpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkV4cGVjdGVkIGEgbGl0ZSBleHRl
bnNpb24uIik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAoR2VuZXJhdGVkRXh0ZW5zaW9uPE1l
c3NhZ2VUeXBlLCBUPikgZXh0ZW5zaW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEEgc3RhdGljIGhl
bHBlciBtZXRob2QgZm9yIGNoZWNraW5nIGlmIGEgbWVzc2FnZSBpcyBpbml0aWFsaXplZCwgb3B0
aW9uYWxseSBtZW1vaXppbmcuCi0gICAqIDxwPgotICAgKiBGb3IgdXNlIGJ5IGdlbmVyYXRlZCBj
b2RlIG9ubHkuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIDxUIGV4dGVuZHMgR2Vu
ZXJhdGVkTWVzc2FnZUxpdGU8VCwgPz4+IGJvb2xlYW4gaXNJbml0aWFsaXplZCgKLSAgICAgIFQg
bWVzc2FnZSwgYm9vbGVhbiBzaG91bGRNZW1vaXplKSB7Ci0gICAgcmV0dXJuIG1lc3NhZ2UuZHlu
YW1pY01ldGhvZChNZXRob2RUb0ludm9rZS5JU19JTklUSUFMSVpFRCwgc2hvdWxkTWVtb2l6ZSkg
IT0gbnVsbDsKLSAgfSAKLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgPFQgZXh0ZW5kcyBH
ZW5lcmF0ZWRNZXNzYWdlTGl0ZTxULCA/Pj4gdm9pZCBtYWtlSW1tdXRhYmxlKFQgbWVzc2FnZSkg
ewotICAgIG1lc3NhZ2UuZHluYW1pY01ldGhvZChNZXRob2RUb0ludm9rZS5NQUtFX0lNTVVUQUJM
RSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgc3RhdGljIEludExpc3QgZW1wdHlJbnRMaXN0KCkgewot
ICAgIHJldHVybiBJbnRBcnJheUxpc3QuZW1wdHlMaXN0KCk7Ci0gIH0KLQotICBwcm90ZWN0ZWQg
c3RhdGljIEludExpc3QgbXV0YWJsZUNvcHkoSW50TGlzdCBsaXN0KSB7Ci0gICAgaW50IHNpemUg
PSBsaXN0LnNpemUoKTsKLSAgICByZXR1cm4gbGlzdC5tdXRhYmxlQ29weVdpdGhDYXBhY2l0eSgK
LSAgICAgICAgc2l6ZSA9PSAwID8gQWJzdHJhY3RQcm90b2J1Zkxpc3QuREVGQVVMVF9DQVBBQ0lU
WSA6IHNpemUgKiAyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgTG9uZ0xpc3QgZW1wdHlM
b25nTGlzdCgpIHsKLSAgICByZXR1cm4gTG9uZ0FycmF5TGlzdC5lbXB0eUxpc3QoKTsKLSAgfQot
ICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBMb25nTGlzdCBtdXRhYmxlQ29weShMb25nTGlzdCBsaXN0
KSB7Ci0gICAgaW50IHNpemUgPSBsaXN0LnNpemUoKTsKLSAgICByZXR1cm4gbGlzdC5tdXRhYmxl
Q29weVdpdGhDYXBhY2l0eSgKLSAgICAgICAgc2l6ZSA9PSAwID8gQWJzdHJhY3RQcm90b2J1Zkxp
c3QuREVGQVVMVF9DQVBBQ0lUWSA6IHNpemUgKiAyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0
aWMgRmxvYXRMaXN0IGVtcHR5RmxvYXRMaXN0KCkgewotICAgIHJldHVybiBGbG9hdEFycmF5TGlz
dC5lbXB0eUxpc3QoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBGbG9hdExpc3QgbXV0
YWJsZUNvcHkoRmxvYXRMaXN0IGxpc3QpIHsKLSAgICBpbnQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwot
ICAgIHJldHVybiBsaXN0Lm11dGFibGVDb3B5V2l0aENhcGFjaXR5KAotICAgICAgICBzaXplID09
IDAgPyBBYnN0cmFjdFByb3RvYnVmTGlzdC5ERUZBVUxUX0NBUEFDSVRZIDogc2l6ZSAqIDIpOwot
ICB9Ci0KLSAgcHJvdGVjdGVkIHN0YXRpYyBEb3VibGVMaXN0IGVtcHR5RG91YmxlTGlzdCgpIHsK
LSAgICByZXR1cm4gRG91YmxlQXJyYXlMaXN0LmVtcHR5TGlzdCgpOwotICB9Ci0gIAotICBwcm90
ZWN0ZWQgc3RhdGljIERvdWJsZUxpc3QgbXV0YWJsZUNvcHkoRG91YmxlTGlzdCBsaXN0KSB7Ci0g
ICAgaW50IHNpemUgPSBsaXN0LnNpemUoKTsKLSAgICByZXR1cm4gbGlzdC5tdXRhYmxlQ29weVdp
dGhDYXBhY2l0eSgKLSAgICAgICAgc2l6ZSA9PSAwID8gQWJzdHJhY3RQcm90b2J1Zkxpc3QuREVG
QVVMVF9DQVBBQ0lUWSA6IHNpemUgKiAyKTsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgQm9v
bGVhbkxpc3QgZW1wdHlCb29sZWFuTGlzdCgpIHsKLSAgICByZXR1cm4gQm9vbGVhbkFycmF5TGlz
dC5lbXB0eUxpc3QoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBCb29sZWFuTGlzdCBt
dXRhYmxlQ29weShCb29sZWFuTGlzdCBsaXN0KSB7Ci0gICAgaW50IHNpemUgPSBsaXN0LnNpemUo
KTsKLSAgICByZXR1cm4gbGlzdC5tdXRhYmxlQ29weVdpdGhDYXBhY2l0eSgKLSAgICAgICAgc2l6
ZSA9PSAwID8gQWJzdHJhY3RQcm90b2J1Zkxpc3QuREVGQVVMVF9DQVBBQ0lUWSA6IHNpemUgKiAy
KTsKLSAgfQotCi0gIHByb3RlY3RlZCBzdGF0aWMgPEU+IFByb3RvYnVmTGlzdDxFPiBlbXB0eVBy
b3RvYnVmTGlzdCgpIHsKLSAgICByZXR1cm4gUHJvdG9idWZBcnJheUxpc3QuZW1wdHlMaXN0KCk7
Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgPEU+IFByb3RvYnVmTGlzdDxFPiBtdXRhYmxl
Q29weShQcm90b2J1Zkxpc3Q8RT4gbGlzdCkgewotICAgIGludCBzaXplID0gbGlzdC5zaXplKCk7
Ci0gICAgcmV0dXJuIGxpc3QubXV0YWJsZUNvcHlXaXRoQ2FwYWNpdHkoCi0gICAgICAgIHNpemUg
PT0gMCA/IEFic3RyYWN0UHJvdG9idWZMaXN0LkRFRkFVTFRfQ0FQQUNJVFkgOiBzaXplICogMik7
Ci0gIH0KLQotICAvKioKLSAgICogQSB7QGxpbmsgUGFyc2VyfSBpbXBsZW1lbnRhdGlvbiB0aGF0
IGRlbGVnYXRlcyB0byB0aGUgZGVmYXVsdCBpbnN0YW5jZS4KLSAgICogPHA+Ci0gICAqIEZvciB1
c2UgYnkgZ2VuZXJhdGVkIGNvZGUgb25seS4KLSAgICovCi0gIHByb3RlY3RlZCBzdGF0aWMgY2xh
c3MgRGVmYXVsdEluc3RhbmNlQmFzZWRQYXJzZXI8VCBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2VM
aXRlPFQsID8+PgotICAgICAgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcjxUPiB7Ci0gICAgCi0gICAg
cHJpdmF0ZSBUIGRlZmF1bHRJbnN0YW5jZTsKLSAgICAKLSAgICBwdWJsaWMgRGVmYXVsdEluc3Rh
bmNlQmFzZWRQYXJzZXIoVCBkZWZhdWx0SW5zdGFuY2UpIHsKLSAgICAgIHRoaXMuZGVmYXVsdElu
c3RhbmNlID0gZGVmYXVsdEluc3RhbmNlOwotICAgIH0KLSAgICAKLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgVCBwYXJzZVBhcnRpYWxGcm9tKENvZGVkSW5wdXRTdHJlYW0gaW5wdXQsIEV4dGVu
c2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgICAgdGhyb3dzIEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICByZXR1cm4gR2VuZXJhdGVkTWVzc2Fn
ZUxpdGUucGFyc2VQYXJ0aWFsRnJvbShkZWZhdWx0SW5zdGFuY2UsIGlucHV0LCBleHRlbnNpb25S
ZWdpc3RyeSk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogQSBzdGF0aWMgaGVscGVyIG1l
dGhvZCBmb3IgcGFyc2luZyBhIHBhcnRpYWwgZnJvbSBpbnB1dCB1c2luZyB0aGUgZXh0ZW5zaW9u
IHJlZ2lzdHJ5IGFuZCB0aGUKLSAgICogaW5zdGFuY2UuCi0gICAqLwotICAvLyBUT0RPKGR3ZWlz
KTogU2hvdWxkIHRoaXMgdmVyaWZ5IHRoYXQgdGhlIGxhc3QgdGFnIHdhcyAwPwotICBzdGF0aWMg
PFQgZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlTGl0ZTxULCA/Pj4gVCBwYXJzZVBhcnRpYWxGcm9t
KAotICAgICAgVCBpbnN0YW5jZSwgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwgRXh0ZW5zaW9uUmVn
aXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICAgIHRocm93cyBJbnZhbGlkUHJv
dG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQi
KSAvLyBHdWFyYW50ZWVkIGJ5IHByb3RvYwotICAgIFQgcmVzdWx0ID0gKFQpIGluc3RhbmNlLmR5
bmFtaWNNZXRob2QoTWV0aG9kVG9JbnZva2UuTkVXX01VVEFCTEVfSU5TVEFOQ0UpOwotICAgIHRy
eSB7Ci0gICAgICByZXN1bHQuZHluYW1pY01ldGhvZChNZXRob2RUb0ludm9rZS5NRVJHRV9GUk9N
X1NUUkVBTSwgaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICAgIHJlc3VsdC5tYWtlSW1t
dXRhYmxlKCk7Ci0gICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBpZiAo
ZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKSB7
Ci0gICAgICAgIHRocm93IChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24pIGUuZ2V0Q2F1
c2UoKTsKLSAgICAgIH0KLSAgICAgIHRocm93IGU7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBzdGF0aWMgPFQgZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdl
TGl0ZTxULCA/Pj4gVCBwYXJzZVBhcnRpYWxGcm9tKAotICAgICAgVCBkZWZhdWx0SW5zdGFuY2Us
Ci0gICAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0KQotICAgICAgdGhyb3dzIEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHBhcnNlUGFydGlhbEZyb20oZGVmYXVs
dEluc3RhbmNlLCBpbnB1dCwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlLmdldEVtcHR5UmVnaXN0cnko
KSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIG1lc3Nh
Z2UgaXMgaW5pdGlhbGl6ZWQuCi0gICAqCi0gICAqIEB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIGlmIGl0IGlzIG5vdCBpbml0aWFsaXplZC4KLSAgICogQHJldHVybiBUaGUg
bWVzc2FnZSB0byBjaGVjay4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIDxUIGV4dGVuZHMgR2Vu
ZXJhdGVkTWVzc2FnZUxpdGU8VCwgPz4+IFQgY2hlY2tNZXNzYWdlSW5pdGlhbGl6ZWQoVCBtZXNz
YWdlKQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAg
aWYgKG1lc3NhZ2UgIT0gbnVsbCAmJiAhbWVzc2FnZS5pc0luaXRpYWxpemVkKCkpIHsKLSAgICAg
IHRocm93IG1lc3NhZ2UubmV3VW5pbml0aWFsaXplZE1lc3NhZ2VFeGNlcHRpb24oKQotICAgICAg
ICAgIC5hc0ludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigpCi0gICAgICAgICAgLnNldFVu
ZmluaXNoZWRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAg
fQotCi0gIC8vIFZhbGlkYXRlcyBsYXN0IHRhZy4KLSAgcHJvdGVjdGVkIHN0YXRpYyA8VCBleHRl
bmRzIEdlbmVyYXRlZE1lc3NhZ2VMaXRlPFQsID8+PiBUIHBhcnNlRnJvbSgKLSAgICAgIFQgZGVm
YXVsdEluc3RhbmNlLCBCeXRlU3RyaW5nIGRhdGEpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gY2hlY2tNZXNzYWdlSW5pdGlhbGl6ZWQo
Ci0gICAgICAgIHBhcnNlRnJvbShkZWZhdWx0SW5zdGFuY2UsIGRhdGEsIEV4dGVuc2lvblJlZ2lz
dHJ5TGl0ZS5nZXRFbXB0eVJlZ2lzdHJ5KCkpKTsKLSAgfQotCi0gIC8vIFZhbGlkYXRlcyBsYXN0
IHRhZy4KLSAgcHJvdGVjdGVkIHN0YXRpYyA8VCBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2VMaXRl
PFQsID8+PiBUIHBhcnNlRnJvbSgKLSAgICAgIFQgZGVmYXVsdEluc3RhbmNlLCBCeXRlU3RyaW5n
IGRhdGEsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgIHRo
cm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgIHJldHVybiBjaGVja01l
c3NhZ2VJbml0aWFsaXplZChwYXJzZVBhcnRpYWxGcm9tKGRlZmF1bHRJbnN0YW5jZSwgZGF0YSwg
ZXh0ZW5zaW9uUmVnaXN0cnkpKTsKLSAgfQotICAKLSAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2Fz
ZSBzaW5jZSB3ZSB3YW50IHRvIHZlcmlmeSB0aGF0IHRoZSBsYXN0IHRhZyBpcyAwLiBXZSBhc3N1
bWUgd2UgZXhoYXVzdCB0aGUKLSAgLy8gQnl0ZVN0cmluZy4KLSAgcHJpdmF0ZSBzdGF0aWMgPFQg
ZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlTGl0ZTxULCA/Pj4gVCBwYXJzZVBhcnRpYWxGcm9tKAot
ICAgICAgVCBkZWZhdWx0SW5zdGFuY2UsIEJ5dGVTdHJpbmcgZGF0YSwgRXh0ZW5zaW9uUmVnaXN0
cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbiB7Ci0gICAgVCBtZXNzYWdlOwotICAgIHRyeSB7Ci0gICAgICBDb2RlZElu
cHV0U3RyZWFtIGlucHV0ID0gZGF0YS5uZXdDb2RlZElucHV0KCk7Ci0gICAgICBtZXNzYWdlID0g
cGFyc2VQYXJ0aWFsRnJvbShkZWZhdWx0SW5zdGFuY2UsIGlucHV0LCBleHRlbnNpb25SZWdpc3Ry
eSk7Ci0gICAgICB0cnkgewotICAgICAgICBpbnB1dC5jaGVja0xhc3RUYWdXYXMoMCk7Ci0gICAg
ICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgICB0
aHJvdyBlLnNldFVuZmluaXNoZWRNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgfQotICAgICAgcmV0
dXJuIG1lc3NhZ2U7Ci0gICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
IGUpIHsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotICB9Ci0gIAotICAvLyBUaGlzIGlzIGEgc3Bl
Y2lhbCBjYXNlIHNpbmNlIHdlIHdhbnQgdG8gdmVyaWZ5IHRoYXQgdGhlIGxhc3QgdGFnIGlzIDAu
IFdlIGFzc3VtZSB3ZSBleGhhdXN0IHRoZQotICAvLyBCeXRlU3RyaW5nLgotICBwcml2YXRlIHN0
YXRpYyA8VCBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2VMaXRlPFQsID8+PiBUIHBhcnNlUGFydGlh
bEZyb20oCi0gICAgICBUIGRlZmF1bHRJbnN0YW5jZSwgYnl0ZVtdIGRhdGEsIEV4dGVuc2lvblJl
Z2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24gewotICAgIFQgbWVzc2FnZTsKLSAgICB0cnkgewotICAgICAgQ29k
ZWRJbnB1dFN0cmVhbSBpbnB1dCA9IENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2UoZGF0YSk7
Ci0gICAgICBtZXNzYWdlID0gcGFyc2VQYXJ0aWFsRnJvbShkZWZhdWx0SW5zdGFuY2UsIGlucHV0
LCBleHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgICB0cnkgewotICAgICAgICBpbnB1dC5jaGVja0xh
c3RUYWdXYXMoMCk7Ci0gICAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24gZSkgewotICAgICAgICB0aHJvdyBlLnNldFVuZmluaXNoZWRNZXNzYWdlKG1lc3NhZ2UpOwot
ICAgICAgfQotICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAgfSBjYXRjaCAoSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gVmFsaWRhdGVzIGxhc3QgdGFnLgotICBwcm90ZWN0ZWQgc3RhdGljIDxUIGV4dGVuZHMgR2Vu
ZXJhdGVkTWVzc2FnZUxpdGU8VCwgPz4+IFQgcGFyc2VGcm9tKAotICAgICAgVCBkZWZhdWx0SW5z
dGFuY2UsIGJ5dGVbXSBkYXRhKQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIGNoZWNrTWVzc2FnZUluaXRpYWxpemVkKAotICAgICAgICBw
YXJzZVBhcnRpYWxGcm9tKGRlZmF1bHRJbnN0YW5jZSwgZGF0YSwgRXh0ZW5zaW9uUmVnaXN0cnlM
aXRlLmdldEVtcHR5UmVnaXN0cnkoKSkpOwotICB9Ci0KLSAgLy8gVmFsaWRhdGVzIGxhc3QgdGFn
LgotICBwcm90ZWN0ZWQgc3RhdGljIDxUIGV4dGVuZHMgR2VuZXJhdGVkTWVzc2FnZUxpdGU8VCwg
Pz4+IFQgcGFyc2VGcm9tKAotICAgICAgVCBkZWZhdWx0SW5zdGFuY2UsIGJ5dGVbXSBkYXRhLCBF
eHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICB0aHJvd3MgSW52
YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gY2hlY2tNZXNzYWdlSW5p
dGlhbGl6ZWQocGFyc2VQYXJ0aWFsRnJvbShkZWZhdWx0SW5zdGFuY2UsIGRhdGEsIGV4dGVuc2lv
blJlZ2lzdHJ5KSk7Ci0gIH0KLQotICAvLyBEb2VzIG5vdCB2YWxpZGF0ZSBsYXN0IHRhZy4KLSAg
cHJvdGVjdGVkIHN0YXRpYyA8VCBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2VMaXRlPFQsID8+PiBU
IHBhcnNlRnJvbSgKLSAgICAgIFQgZGVmYXVsdEluc3RhbmNlLCBJbnB1dFN0cmVhbSBpbnB1dCkK
LSAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgIHJldHVy
biBjaGVja01lc3NhZ2VJbml0aWFsaXplZCgKLSAgICAgICAgcGFyc2VQYXJ0aWFsRnJvbShkZWZh
dWx0SW5zdGFuY2UsIENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2UoaW5wdXQpLAotICAgICAg
ICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlLmdldEVtcHR5UmVnaXN0cnkoKSkpOwotICB9Ci0K
LSAgLy8gRG9lcyBub3QgdmFsaWRhdGUgbGFzdCB0YWcuCi0gIHByb3RlY3RlZCBzdGF0aWMgPFQg
ZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlTGl0ZTxULCA/Pj4gVCBwYXJzZUZyb20oCi0gICAgICBU
IGRlZmF1bHRJbnN0YW5jZSwgSW5wdXRTdHJlYW0gaW5wdXQsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0
ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24gewotICAgIHJldHVybiBjaGVja01lc3NhZ2VJbml0aWFsaXplZCgKLSAgICAgICAg
cGFyc2VQYXJ0aWFsRnJvbShkZWZhdWx0SW5zdGFuY2UsIENvZGVkSW5wdXRTdHJlYW0ubmV3SW5z
dGFuY2UoaW5wdXQpLCBleHRlbnNpb25SZWdpc3RyeSkpOwotICB9Ci0KLSAgLy8gRG9lcyBub3Qg
dmFsaWRhdGUgbGFzdCB0YWcuCi0gIHByb3RlY3RlZCBzdGF0aWMgPFQgZXh0ZW5kcyBHZW5lcmF0
ZWRNZXNzYWdlTGl0ZTxULCA/Pj4gVCBwYXJzZUZyb20oCi0gICAgICBUIGRlZmF1bHRJbnN0YW5j
ZSwgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xC
dWZmZXJFeGNlcHRpb24gewotICAgIHJldHVybiBwYXJzZUZyb20oZGVmYXVsdEluc3RhbmNlLCBp
bnB1dCwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlLmdldEVtcHR5UmVnaXN0cnkoKSk7Ci0gIH0KLQot
ICAvLyBEb2VzIG5vdCB2YWxpZGF0ZSBsYXN0IHRhZy4KLSAgcHJvdGVjdGVkIHN0YXRpYyA8VCBl
eHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2VMaXRlPFQsID8+PiBUIHBhcnNlRnJvbSgKLSAgICAgIFQg
ZGVmYXVsdEluc3RhbmNlLCBDb2RlZElucHV0U3RyZWFtIGlucHV0LCBFeHRlbnNpb25SZWdpc3Ry
eUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gY2hlY2tNZXNzYWdlSW5pdGlhbGl6ZWQoCi0gICAg
ICAgIHBhcnNlUGFydGlhbEZyb20oZGVmYXVsdEluc3RhbmNlLCBpbnB1dCwgZXh0ZW5zaW9uUmVn
aXN0cnkpKTsKLSAgfQotCi0gIC8vIFZhbGlkYXRlcyBsYXN0IHRhZy4KLSAgcHJvdGVjdGVkIHN0
YXRpYyA8VCBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2VMaXRlPFQsID8+PiBUIHBhcnNlRGVsaW1p
dGVkRnJvbSgKLSAgICAgIFQgZGVmYXVsdEluc3RhbmNlLCBJbnB1dFN0cmVhbSBpbnB1dCkKLSAg
ICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgIHJldHVybiBj
aGVja01lc3NhZ2VJbml0aWFsaXplZCgKLSAgICAgICAgcGFyc2VQYXJ0aWFsRGVsaW1pdGVkRnJv
bShkZWZhdWx0SW5zdGFuY2UsIGlucHV0LAotICAgICAgICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlM
aXRlLmdldEVtcHR5UmVnaXN0cnkoKSkpOwotICB9Ci0KLSAgLy8gVmFsaWRhdGVzIGxhc3QgdGFn
LgotICBwcm90ZWN0ZWQgc3RhdGljIDxUIGV4dGVuZHMgR2VuZXJhdGVkTWVzc2FnZUxpdGU8VCwg
Pz4+IFQgcGFyc2VEZWxpbWl0ZWRGcm9tKAotICAgICAgVCBkZWZhdWx0SW5zdGFuY2UsIElucHV0
U3RyZWFtIGlucHV0LCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0g
ICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICByZXR1cm4g
Y2hlY2tNZXNzYWdlSW5pdGlhbGl6ZWQoCi0gICAgICAgIHBhcnNlUGFydGlhbERlbGltaXRlZEZy
b20oZGVmYXVsdEluc3RhbmNlLCBpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpKTsKLSAgfQotICAK
LSAgcHJpdmF0ZSBzdGF0aWMgPFQgZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlTGl0ZTxULCA/Pj4g
VCBwYXJzZVBhcnRpYWxEZWxpbWl0ZWRGcm9tKAotICAgICAgVCBkZWZhdWx0SW5zdGFuY2UsCi0g
ICAgICBJbnB1dFN0cmVhbSBpbnB1dCwKLSAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRl
bnNpb25SZWdpc3RyeSkKLSAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24gewotICAgIGludCBzaXplOwotICAgIHRyeSB7Ci0gICAgICBpbnQgZmlyc3RCeXRlID0gaW5w
dXQucmVhZCgpOwotICAgICAgaWYgKGZpcnN0Qnl0ZSA9PSAtMSkgewotICAgICAgICByZXR1cm4g
bnVsbDsKLSAgICAgIH0KLSAgICAgIHNpemUgPSBDb2RlZElucHV0U3RyZWFtLnJlYWRSYXdWYXJp
bnQzMihmaXJzdEJ5dGUsIGlucHV0KTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0g
ICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKGUuZ2V0TWVzc2Fn
ZSgpKTsKLSAgICB9Ci0gICAgSW5wdXRTdHJlYW0gbGltaXRlZElucHV0ID0gbmV3IExpbWl0ZWRJ
bnB1dFN0cmVhbShpbnB1dCwgc2l6ZSk7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSBjb2RlZElucHV0
ID0gQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShsaW1pdGVkSW5wdXQpOwotICAgIFQgbWVz
c2FnZSA9IHBhcnNlUGFydGlhbEZyb20oZGVmYXVsdEluc3RhbmNlLCBjb2RlZElucHV0LCBleHRl
bnNpb25SZWdpc3RyeSk7Ci0gICAgdHJ5IHsKLSAgICAgIGNvZGVkSW5wdXQuY2hlY2tMYXN0VGFn
V2FzKDApOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7
Ci0gICAgICB0aHJvdyBlLnNldFVuZmluaXNoZWRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLSAg
ICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBBbiBhYnN0cmFjdCB2aXNpdG9y
IHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGNhbGxzIGludG8gdGhhdCB3ZSB1c2UgdG8gaW1wbGVt
ZW50IHZhcmlvdXMKLSAgICogZmVhdHVyZXMuIEZpZWxkcyB0aGF0IGFyZSBub3QgbWVtYmVycyBv
ZiBvbmVvZnMgYXJlIGFsd2F5cyB2aXNpdGVkLiBNZW1iZXJzIG9mIGEgb25lb2YgYXJlIG9ubHkK
LSAgICogdmlzaXRlZCB3aGVuIHRoZXkgYXJlIHRoZSBzZXQgb25lb2YgY2FzZSB2YWx1ZSBvbiB0
aGUgIm90aGVyIiBwcm90by4gVGhlIHZpc2l0T25lb2ZOb3RTZXQKLSAgICogbWV0aG9kIGlzIGlu
dm9rZWQgaWYgb3RoZXIncyBvbmVvZiBjYXNlIGlzIG5vdCBzZXQuCi0gICAqLwotICBwcm90ZWN0
ZWQgaW50ZXJmYWNlIFZpc2l0b3IgewotICAgIGJvb2xlYW4gdmlzaXRCb29sZWFuKGJvb2xlYW4g
bWluZVByZXNlbnQsIGJvb2xlYW4gbWluZSwgYm9vbGVhbiBvdGhlclByZXNlbnQsIGJvb2xlYW4g
b3RoZXIpOwotICAgIGludCB2aXNpdEludChib29sZWFuIG1pbmVQcmVzZW50LCBpbnQgbWluZSwg
Ym9vbGVhbiBvdGhlclByZXNlbnQsIGludCBvdGhlcik7Ci0gICAgZG91YmxlIHZpc2l0RG91Ymxl
KGJvb2xlYW4gbWluZVByZXNlbnQsIGRvdWJsZSBtaW5lLCBib29sZWFuIG90aGVyUHJlc2VudCwg
ZG91YmxlIG90aGVyKTsKLSAgICBmbG9hdCB2aXNpdEZsb2F0KGJvb2xlYW4gbWluZVByZXNlbnQs
IGZsb2F0IG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBmbG9hdCBvdGhlcik7Ci0gICAgbG9u
ZyB2aXNpdExvbmcoYm9vbGVhbiBtaW5lUHJlc2VudCwgbG9uZyBtaW5lLCBib29sZWFuIG90aGVy
UHJlc2VudCwgbG9uZyBvdGhlcik7Ci0gICAgU3RyaW5nIHZpc2l0U3RyaW5nKGJvb2xlYW4gbWlu
ZVByZXNlbnQsIFN0cmluZyBtaW5lLCBib29sZWFuIG90aGVyUHJlc2VudCwgU3RyaW5nIG90aGVy
KTsKLSAgICBCeXRlU3RyaW5nIHZpc2l0Qnl0ZVN0cmluZygKLSAgICAgICAgYm9vbGVhbiBtaW5l
UHJlc2VudCwgQnl0ZVN0cmluZyBtaW5lLCBib29sZWFuIG90aGVyUHJlc2VudCwgQnl0ZVN0cmlu
ZyBvdGhlcik7Ci0KLSAgICBPYmplY3QgdmlzaXRPbmVvZkJvb2xlYW4oYm9vbGVhbiBtaW5lUHJl
c2VudCwgT2JqZWN0IG1pbmUsIE9iamVjdCBvdGhlcik7Ci0gICAgT2JqZWN0IHZpc2l0T25lb2ZJ
bnQoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1pbmUsIE9iamVjdCBvdGhlcik7Ci0gICAg
T2JqZWN0IHZpc2l0T25lb2ZEb3VibGUoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1pbmUs
IE9iamVjdCBvdGhlcik7Ci0gICAgT2JqZWN0IHZpc2l0T25lb2ZGbG9hdChib29sZWFuIG1pbmVQ
cmVzZW50LCBPYmplY3QgbWluZSwgT2JqZWN0IG90aGVyKTsKLSAgICBPYmplY3QgdmlzaXRPbmVv
ZkxvbmcoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1pbmUsIE9iamVjdCBvdGhlcik7Ci0g
ICAgT2JqZWN0IHZpc2l0T25lb2ZTdHJpbmcoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1p
bmUsIE9iamVjdCBvdGhlcik7Ci0gICAgT2JqZWN0IHZpc2l0T25lb2ZCeXRlU3RyaW5nKGJvb2xl
YW4gbWluZVByZXNlbnQsIE9iamVjdCBtaW5lLCBPYmplY3Qgb3RoZXIpOwotICAgIE9iamVjdCB2
aXNpdE9uZW9mTGF6eU1lc3NhZ2UoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1pbmUsIE9i
amVjdCBvdGhlcik7Ci0gICAgT2JqZWN0IHZpc2l0T25lb2ZNZXNzYWdlKGJvb2xlYW4gbWluZVBy
ZXNlbnQsIE9iamVjdCBtaW5lLCBPYmplY3Qgb3RoZXIpOwotICAgIHZvaWQgdmlzaXRPbmVvZk5v
dFNldChib29sZWFuIG1pbmVQcmVzZW50KTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBNZXNzYWdl
IGZpZWxkcyB1c2UgbnVsbCBzZW50aW5hbHMuCi0gICAgICovCi0gICAgPFQgZXh0ZW5kcyBNZXNz
YWdlTGl0ZT4gVCB2aXNpdE1lc3NhZ2UoVCBtaW5lLCBUIG90aGVyKTsKLSAgICBMYXp5RmllbGRM
aXRlIHZpc2l0TGF6eU1lc3NhZ2UoCi0gICAgICAgIGJvb2xlYW4gbWluZVByZXNlbnQsIExhenlG
aWVsZExpdGUgbWluZSwgYm9vbGVhbiBvdGhlclByZXNlbnQsIExhenlGaWVsZExpdGUgb3RoZXIp
OwotCi0gICAgPFQ+IFByb3RvYnVmTGlzdDxUPiB2aXNpdExpc3QoUHJvdG9idWZMaXN0PFQ+IG1p
bmUsIFByb3RvYnVmTGlzdDxUPiBvdGhlcik7Ci0gICAgQm9vbGVhbkxpc3QgdmlzaXRCb29sZWFu
TGlzdChCb29sZWFuTGlzdCBtaW5lLCBCb29sZWFuTGlzdCBvdGhlcik7Ci0gICAgSW50TGlzdCB2
aXNpdEludExpc3QoSW50TGlzdCBtaW5lLCBJbnRMaXN0IG90aGVyKTsKLSAgICBEb3VibGVMaXN0
IHZpc2l0RG91YmxlTGlzdChEb3VibGVMaXN0IG1pbmUsIERvdWJsZUxpc3Qgb3RoZXIpOwotICAg
IEZsb2F0TGlzdCB2aXNpdEZsb2F0TGlzdChGbG9hdExpc3QgbWluZSwgRmxvYXRMaXN0IG90aGVy
KTsKLSAgICBMb25nTGlzdCB2aXNpdExvbmdMaXN0KExvbmdMaXN0IG1pbmUsIExvbmdMaXN0IG90
aGVyKTsKLSAgICBGaWVsZFNldDxFeHRlbnNpb25EZXNjcmlwdG9yPiB2aXNpdEV4dGVuc2lvbnMo
Ci0gICAgICAgIEZpZWxkU2V0PEV4dGVuc2lvbkRlc2NyaXB0b3I+IG1pbmUsIEZpZWxkU2V0PEV4
dGVuc2lvbkRlc2NyaXB0b3I+IG90aGVyKTsKLSAgICBVbmtub3duRmllbGRTZXRMaXRlIHZpc2l0
VW5rbm93bkZpZWxkcyhVbmtub3duRmllbGRTZXRMaXRlIG1pbmUsIFVua25vd25GaWVsZFNldExp
dGUgb3RoZXIpOwotICAgIDxLLCBWPiBNYXBGaWVsZExpdGU8SywgVj4gdmlzaXRNYXAoTWFwRmll
bGRMaXRlPEssIFY+IG1pbmUsIE1hcEZpZWxkTGl0ZTxLLCBWPiBvdGhlcik7Ci0gIH0KLQotICAv
KioKLSAgICogSW1wbGVtZW50cyBlcXVhbHMuIFRocm93cyBhIHtAbGluayBOb3RFcXVhbHNFeGNl
cHRpb259IHdoZW4gbm90IGVxdWFsLgotICAgKi8KLSAgc3RhdGljIGNsYXNzIEVxdWFsc1Zpc2l0
b3IgaW1wbGVtZW50cyBWaXNpdG9yIHsKLQotICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBOb3RFcXVh
bHNFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9Ci0KLSAgICBzdGF0aWMgZmlu
YWwgRXF1YWxzVmlzaXRvciBJTlNUQU5DRSA9IG5ldyBFcXVhbHNWaXNpdG9yKCk7Ci0KLSAgICBz
dGF0aWMgZmluYWwgTm90RXF1YWxzRXhjZXB0aW9uIE5PVF9FUVVBTFMgPSBuZXcgTm90RXF1YWxz
RXhjZXB0aW9uKCk7Ci0KLSAgICBwcml2YXRlIEVxdWFsc1Zpc2l0b3IoKSB7fQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gdmlzaXRCb29sZWFuKAotICAgICAgICBib29sZWFu
IG1pbmVQcmVzZW50LCBib29sZWFuIG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBib29sZWFu
IG90aGVyKSB7Ci0gICAgICBpZiAobWluZVByZXNlbnQgIT0gb3RoZXJQcmVzZW50IHx8IG1pbmUg
IT0gb3RoZXIpIHsKLSAgICAgICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAgICAgIH0KLSAgICAgIHJl
dHVybiBtaW5lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgdmlzaXRJ
bnQoYm9vbGVhbiBtaW5lUHJlc2VudCwgaW50IG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBp
bnQgb3RoZXIpIHsKLSAgICAgIGlmIChtaW5lUHJlc2VudCAhPSBvdGhlclByZXNlbnQgfHwgbWlu
ZSAhPSBvdGhlcikgewotICAgICAgICB0aHJvdyBOT1RfRVFVQUxTOwotICAgICAgfQotICAgICAg
cmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGRvdWJsZSB2
aXNpdERvdWJsZSgKLSAgICAgICAgYm9vbGVhbiBtaW5lUHJlc2VudCwgZG91YmxlIG1pbmUsIGJv
b2xlYW4gb3RoZXJQcmVzZW50LCBkb3VibGUgb3RoZXIpIHsKLSAgICAgIGlmIChtaW5lUHJlc2Vu
dCAhPSBvdGhlclByZXNlbnQgfHwgbWluZSAhPSBvdGhlcikgewotICAgICAgICB0aHJvdyBOT1Rf
RVFVQUxTOwotICAgICAgfQotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIGZsb2F0IHZpc2l0RmxvYXQoYm9vbGVhbiBtaW5lUHJlc2VudCwgZmxv
YXQgbWluZSwgYm9vbGVhbiBvdGhlclByZXNlbnQsIGZsb2F0IG90aGVyKSB7Ci0gICAgICBpZiAo
bWluZVByZXNlbnQgIT0gb3RoZXJQcmVzZW50IHx8IG1pbmUgIT0gb3RoZXIpIHsKLSAgICAgICAg
dGhyb3cgTk9UX0VRVUFMUzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtaW5lOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBsb25nIHZpc2l0TG9uZyhib29sZWFuIG1pbmVQcmVz
ZW50LCBsb25nIG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBsb25nIG90aGVyKSB7Ci0gICAg
ICBpZiAobWluZVByZXNlbnQgIT0gb3RoZXJQcmVzZW50IHx8IG1pbmUgIT0gb3RoZXIpIHsKLSAg
ICAgICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtaW5lOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdmlzaXRTdHJpbmcoCi0gICAg
ICAgIGJvb2xlYW4gbWluZVByZXNlbnQsIFN0cmluZyBtaW5lLCBib29sZWFuIG90aGVyUHJlc2Vu
dCwgU3RyaW5nIG90aGVyKSB7Ci0gICAgICBpZiAobWluZVByZXNlbnQgIT0gb3RoZXJQcmVzZW50
IHx8ICFtaW5lLmVxdWFscyhvdGhlcikpIHsKLSAgICAgICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiBtaW5lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBCeXRlU3RyaW5nIHZpc2l0Qnl0ZVN0cmluZygKLSAgICAgICAgYm9vbGVhbiBtaW5lUHJl
c2VudCwgQnl0ZVN0cmluZyBtaW5lLCBib29sZWFuIG90aGVyUHJlc2VudCwgQnl0ZVN0cmluZyBv
dGhlcikgewotICAgICAgaWYgKG1pbmVQcmVzZW50ICE9IG90aGVyUHJlc2VudCB8fCAhbWluZS5l
cXVhbHMob3RoZXIpKSB7Ci0gICAgICAgIHRocm93IE5PVF9FUVVBTFM7Ci0gICAgICB9Ci0gICAg
ICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0
IHZpc2l0T25lb2ZCb29sZWFuKGJvb2xlYW4gbWluZVByZXNlbnQsIE9iamVjdCBtaW5lLCBPYmpl
Y3Qgb3RoZXIpIHsKLSAgICAgIGlmIChtaW5lUHJlc2VudCAmJiBtaW5lLmVxdWFscyhvdGhlcikp
IHsKLSAgICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgICB9Ci0gICAgICB0aHJvdyBOT1RfRVFVQUxT
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgdmlzaXRPbmVvZklu
dChib29sZWFuIG1pbmVQcmVzZW50LCBPYmplY3QgbWluZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAg
ICBpZiAobWluZVByZXNlbnQgJiYgbWluZS5lcXVhbHMob3RoZXIpKSB7Ci0gICAgICAgIHJldHVy
biBtaW5lOwotICAgICAgfQotICAgICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHZpc2l0T25lb2ZEb3VibGUoYm9vbGVhbiBtaW5l
UHJlc2VudCwgT2JqZWN0IG1pbmUsIE9iamVjdCBvdGhlcikgewotICAgICAgaWYgKG1pbmVQcmVz
ZW50ICYmIG1pbmUuZXF1YWxzKG90aGVyKSkgewotICAgICAgICByZXR1cm4gbWluZTsKLSAgICAg
IH0KLSAgICAgIHRocm93IE5PVF9FUVVBTFM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIE9iamVjdCB2aXNpdE9uZW9mRmxvYXQoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0
IG1pbmUsIE9iamVjdCBvdGhlcikgewotICAgICAgaWYgKG1pbmVQcmVzZW50ICYmIG1pbmUuZXF1
YWxzKG90aGVyKSkgewotICAgICAgICByZXR1cm4gbWluZTsKLSAgICAgIH0KLSAgICAgIHRocm93
IE5PVF9FUVVBTFM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCB2
aXNpdE9uZW9mTG9uZyhib29sZWFuIG1pbmVQcmVzZW50LCBPYmplY3QgbWluZSwgT2JqZWN0IG90
aGVyKSB7Ci0gICAgICBpZiAobWluZVByZXNlbnQgJiYgbWluZS5lcXVhbHMob3RoZXIpKSB7Ci0g
ICAgICAgIHJldHVybiBtaW5lOwotICAgICAgfQotICAgICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHZpc2l0T25lb2ZTdHJpbmco
Ym9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1pbmUsIE9iamVjdCBvdGhlcikgewotICAgICAg
aWYgKG1pbmVQcmVzZW50ICYmIG1pbmUuZXF1YWxzKG90aGVyKSkgewotICAgICAgICByZXR1cm4g
bWluZTsKLSAgICAgIH0KLSAgICAgIHRocm93IE5PVF9FUVVBTFM7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCB2aXNpdE9uZW9mQnl0ZVN0cmluZyhib29sZWFuIG1p
bmVQcmVzZW50LCBPYmplY3QgbWluZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAgICBpZiAobWluZVBy
ZXNlbnQgJiYgbWluZS5lcXVhbHMob3RoZXIpKSB7Ci0gICAgICAgIHJldHVybiBtaW5lOwotICAg
ICAgfQotICAgICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgT2JqZWN0IHZpc2l0T25lb2ZMYXp5TWVzc2FnZShib29sZWFuIG1pbmVQcmVzZW50
LCBPYmplY3QgbWluZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAgICBpZiAobWluZVByZXNlbnQgJiYg
bWluZS5lcXVhbHMob3RoZXIpKSB7Ci0gICAgICAgIHJldHVybiBtaW5lOwotICAgICAgfQotICAg
ICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAgICB9Ci0gICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIE9iamVjdCB2aXNpdE9uZW9mTWVzc2FnZShib29sZWFuIG1pbmVQcmVzZW50LCBPYmplY3Qg
bWluZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAgICBpZiAobWluZVByZXNlbnQgJiYgKChHZW5lcmF0
ZWRNZXNzYWdlTGl0ZTw/LCA/PikgbWluZSkuZXF1YWxzKHRoaXMsIChNZXNzYWdlTGl0ZSkgb3Ro
ZXIpKSB7Ci0gICAgICAgIHJldHVybiBtaW5lOwotICAgICAgfQotICAgICAgdGhyb3cgTk9UX0VR
VUFMUzsKLSAgICB9Ci0gICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRP
bmVvZk5vdFNldChib29sZWFuIG1pbmVQcmVzZW50KSB7Ci0gICAgICBpZiAobWluZVByZXNlbnQp
IHsKLSAgICAgICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgPFQgZXh0ZW5kcyBNZXNzYWdlTGl0ZT4gVCB2aXNpdE1lc3NhZ2Uo
VCBtaW5lLCBUIG90aGVyKSB7Ci0gICAgICBpZiAobWluZSA9PSBudWxsICYmIG90aGVyID09IG51
bGwpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtaW5lID09
IG51bGwgfHwgb3RoZXIgPT0gbnVsbCkgewotICAgICAgICB0aHJvdyBOT1RfRVFVQUxTOwotICAg
ICAgfQotCi0gICAgICAoKEdlbmVyYXRlZE1lc3NhZ2VMaXRlPD8sID8+KSBtaW5lKS5lcXVhbHMo
dGhpcywgb3RoZXIpOwotCi0gICAgICByZXR1cm4gbWluZTsKLSAgICB9Ci0gICAgCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIExhenlGaWVsZExpdGUgdmlzaXRMYXp5TWVzc2FnZSgKLSAgICAg
ICAgYm9vbGVhbiBtaW5lUHJlc2VudCwgTGF6eUZpZWxkTGl0ZSBtaW5lLCBib29sZWFuIG90aGVy
UHJlc2VudCwgTGF6eUZpZWxkTGl0ZSBvdGhlcikgewotICAgICAgaWYgKCFtaW5lUHJlc2VudCAm
JiAhb3RoZXJQcmVzZW50KSB7Ci0gICAgICAgIHJldHVybiBtaW5lOwotICAgICAgfSBlbHNlIGlm
IChtaW5lUHJlc2VudCAmJiBvdGhlclByZXNlbnQgJiYgbWluZS5lcXVhbHMob3RoZXIpKSB7Ci0g
ICAgICAgIHJldHVybiBtaW5lOwotICAgICAgfQotICAgICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgPFQ+IFByb3RvYnVmTGlzdDxUPiB2aXNp
dExpc3QoUHJvdG9idWZMaXN0PFQ+IG1pbmUsIFByb3RvYnVmTGlzdDxUPiBvdGhlcikgewotICAg
ICAgaWYgKCFtaW5lLmVxdWFscyhvdGhlcikpIHsKLSAgICAgICAgdGhyb3cgTk9UX0VRVUFMUzsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBtaW5lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBCb29sZWFuTGlzdCB2aXNpdEJvb2xlYW5MaXN0KEJvb2xlYW5MaXN0IG1pbmUsIEJv
b2xlYW5MaXN0IG90aGVyKSB7Ci0gICAgICBpZiAoIW1pbmUuZXF1YWxzKG90aGVyKSkgewotICAg
ICAgICB0aHJvdyBOT1RfRVFVQUxTOwotICAgICAgfQotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEludExpc3QgdmlzaXRJbnRMaXN0KEludExp
c3QgbWluZSwgSW50TGlzdCBvdGhlcikgewotICAgICAgaWYgKCFtaW5lLmVxdWFscyhvdGhlcikp
IHsKLSAgICAgICAgdGhyb3cgTk9UX0VRVUFMUzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtaW5l
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEb3VibGVMaXN0IHZpc2l0RG91
YmxlTGlzdChEb3VibGVMaXN0IG1pbmUsIERvdWJsZUxpc3Qgb3RoZXIpIHsKLSAgICAgIGlmICgh
bWluZS5lcXVhbHMob3RoZXIpKSB7Ci0gICAgICAgIHRocm93IE5PVF9FUVVBTFM7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
RmxvYXRMaXN0IHZpc2l0RmxvYXRMaXN0KEZsb2F0TGlzdCBtaW5lLCBGbG9hdExpc3Qgb3RoZXIp
IHsKLSAgICAgIGlmICghbWluZS5lcXVhbHMob3RoZXIpKSB7Ci0gICAgICAgIHRocm93IE5PVF9F
UVVBTFM7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgTG9uZ0xpc3QgdmlzaXRMb25nTGlzdChMb25nTGlzdCBtaW5lLCBMb25n
TGlzdCBvdGhlcikgewotICAgICAgaWYgKCFtaW5lLmVxdWFscyhvdGhlcikpIHsKLSAgICAgICAg
dGhyb3cgTk9UX0VRVUFMUzsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtaW5lOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWVsZFNldDxFeHRlbnNpb25EZXNjcmlwdG9yPiB2
aXNpdEV4dGVuc2lvbnMoCi0gICAgICAgIEZpZWxkU2V0PEV4dGVuc2lvbkRlc2NyaXB0b3I+IG1p
bmUsCi0gICAgICAgIEZpZWxkU2V0PEV4dGVuc2lvbkRlc2NyaXB0b3I+IG90aGVyKSB7Ci0gICAg
ICBpZiAoIW1pbmUuZXF1YWxzKG90aGVyKSkgewotICAgICAgICB0aHJvdyBOT1RfRVFVQUxTOwot
ICAgICAgfQotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIFVua25vd25GaWVsZFNldExpdGUgdmlzaXRVbmtub3duRmllbGRzKAotICAgICAgICBV
bmtub3duRmllbGRTZXRMaXRlIG1pbmUsCi0gICAgICAgIFVua25vd25GaWVsZFNldExpdGUgb3Ro
ZXIpIHsKLSAgICAgIGlmICghbWluZS5lcXVhbHMob3RoZXIpKSB7Ci0gICAgICAgIHRocm93IE5P
VF9FUVVBTFM7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgPEssIFY+IE1hcEZpZWxkTGl0ZTxLLCBWPiB2aXNpdE1hcChNYXBG
aWVsZExpdGU8SywgVj4gbWluZSwgTWFwRmllbGRMaXRlPEssIFY+IG90aGVyKSB7Ci0gICAgICBp
ZiAoIW1pbmUuZXF1YWxzKG90aGVyKSkgewotICAgICAgICB0aHJvdyBOT1RfRVFVQUxTOwotICAg
ICAgfQotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEltcGxl
bWVudHMgaGFzaENvZGUgYnkgYWNjdW11bGF0aW5nIHN0YXRlLgotICAgKi8KLSAgcHJpdmF0ZSBz
dGF0aWMgY2xhc3MgSGFzaENvZGVWaXNpdG9yIGltcGxlbWVudHMgVmlzaXRvciB7Ci0KLSAgICAv
LyBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIHZpc2l0b3IgaXMgaW52b2tlZCBwYXJh
bWV0ZXJpemVkIHdpdGggdGhpcyBhbmQgdGhpcyBzdWNoIHRoYXQKLSAgICAvLyBvdGhlciBpcyB0
aGlzLiBUaGlzIGlzIHJlcXVpcmVkIGR1ZSB0byBob3cgb25lb2YgY2FzZXMgYXJlIGhhbmRsZWQu
IFNlZSB0aGUgY2xhc3MgY29tbWVudAotICAgIC8vIG9uIFZpc2l0b3IgZm9yIG1vcmUgaW5mb3Jt
YXRpb24uCi0gICAgCi0gICAgcHJpdmF0ZSBpbnQgaGFzaENvZGUgPSAwOwotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIGJvb2xlYW4gdmlzaXRCb29sZWFuKAotICAgICAgICBib29sZWFuIG1p
bmVQcmVzZW50LCBib29sZWFuIG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBib29sZWFuIG90
aGVyKSB7Ci0gICAgICBoYXNoQ29kZSA9ICg1MyAqIGhhc2hDb2RlKSArIEludGVybmFsLmhhc2hC
b29sZWFuKG1pbmUpOwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIGludCB2aXNpdEludChib29sZWFuIG1pbmVQcmVzZW50LCBpbnQgbWluZSwg
Ym9vbGVhbiBvdGhlclByZXNlbnQsIGludCBvdGhlcikgewotICAgICAgaGFzaENvZGUgPSAoNTMg
KiBoYXNoQ29kZSkgKyBtaW5lOwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIGRvdWJsZSB2aXNpdERvdWJsZSgKLSAgICAgICAgYm9vbGVhbiBt
aW5lUHJlc2VudCwgZG91YmxlIG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBkb3VibGUgb3Ro
ZXIpIHsKLSAgICAgIGhhc2hDb2RlID0gKDUzICogaGFzaENvZGUpICsgSW50ZXJuYWwuaGFzaExv
bmcoRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHMobWluZSkpOwotICAgICAgcmV0dXJuIG1pbmU7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IHZpc2l0RmxvYXQoYm9vbGVh
biBtaW5lUHJlc2VudCwgZmxvYXQgbWluZSwgYm9vbGVhbiBvdGhlclByZXNlbnQsIGZsb2F0IG90
aGVyKSB7Ci0gICAgICBoYXNoQ29kZSA9ICg1MyAqIGhhc2hDb2RlKSArIEZsb2F0LmZsb2F0VG9J
bnRCaXRzKG1pbmUpOwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIGxvbmcgdmlzaXRMb25nKGJvb2xlYW4gbWluZVByZXNlbnQsIGxvbmcgbWlu
ZSwgYm9vbGVhbiBvdGhlclByZXNlbnQsIGxvbmcgb3RoZXIpIHsKLSAgICAgIGhhc2hDb2RlID0g
KDUzICogaGFzaENvZGUpICsgSW50ZXJuYWwuaGFzaExvbmcobWluZSk7Ci0gICAgICByZXR1cm4g
bWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHZpc2l0U3Ry
aW5nKAotICAgICAgICBib29sZWFuIG1pbmVQcmVzZW50LCBTdHJpbmcgbWluZSwgYm9vbGVhbiBv
dGhlclByZXNlbnQsIFN0cmluZyBvdGhlcikgewotICAgICAgaGFzaENvZGUgPSAoNTMgKiBoYXNo
Q29kZSkgKyBtaW5lLmhhc2hDb2RlKCk7Ci0gICAgICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnl0ZVN0cmluZyB2aXNpdEJ5dGVTdHJpbmcoCi0gICAg
ICAgIGJvb2xlYW4gbWluZVByZXNlbnQsIEJ5dGVTdHJpbmcgbWluZSwgYm9vbGVhbiBvdGhlclBy
ZXNlbnQsIEJ5dGVTdHJpbmcgb3RoZXIpIHsKLSAgICAgIGhhc2hDb2RlID0gKDUzICogaGFzaENv
ZGUpICsgbWluZS5oYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCB2aXNpdE9uZW9mQm9vbGVhbihib29sZWFuIG1p
bmVQcmVzZW50LCBPYmplY3QgbWluZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAgICBoYXNoQ29kZSA9
ICg1MyAqIGhhc2hDb2RlKSArIEludGVybmFsLmhhc2hCb29sZWFuKCgoQm9vbGVhbikgbWluZSkp
OwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IE9iamVjdCB2aXNpdE9uZW9mSW50KGJvb2xlYW4gbWluZVByZXNlbnQsIE9iamVjdCBtaW5lLCBP
YmplY3Qgb3RoZXIpIHsKLSAgICAgIGhhc2hDb2RlID0gKDUzICogaGFzaENvZGUpICsgKEludGVn
ZXIpIG1pbmU7Ci0gICAgICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgT2JqZWN0IHZpc2l0T25lb2ZEb3VibGUoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2Jq
ZWN0IG1pbmUsIE9iamVjdCBvdGhlcikgewotICAgICAgaGFzaENvZGUgPSAoNTMgKiBoYXNoQ29k
ZSkgKyBJbnRlcm5hbC5oYXNoTG9uZyhEb3VibGUuZG91YmxlVG9Mb25nQml0cygoRG91YmxlKSBt
aW5lKSk7Ci0gICAgICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgT2JqZWN0IHZpc2l0T25lb2ZGbG9hdChib29sZWFuIG1pbmVQcmVzZW50LCBPYmplY3Qg
bWluZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAgICBoYXNoQ29kZSA9ICg1MyAqIGhhc2hDb2RlKSAr
IEZsb2F0LmZsb2F0VG9JbnRCaXRzKChGbG9hdCkgbWluZSk7Ci0gICAgICByZXR1cm4gbWluZTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHZpc2l0T25lb2ZMb25n
KGJvb2xlYW4gbWluZVByZXNlbnQsIE9iamVjdCBtaW5lLCBPYmplY3Qgb3RoZXIpIHsKLSAgICAg
IGhhc2hDb2RlID0gKDUzICogaGFzaENvZGUpICsgSW50ZXJuYWwuaGFzaExvbmcoKExvbmcpIG1p
bmUpOwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIE9iamVjdCB2aXNpdE9uZW9mU3RyaW5nKGJvb2xlYW4gbWluZVByZXNlbnQsIE9iamVjdCBt
aW5lLCBPYmplY3Qgb3RoZXIpIHsKLSAgICAgIGhhc2hDb2RlID0gKDUzICogaGFzaENvZGUpICsg
bWluZS5oYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIE9iamVjdCB2aXNpdE9uZW9mQnl0ZVN0cmluZyhib29sZWFuIG1pbmVQ
cmVzZW50LCBPYmplY3QgbWluZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAgICBoYXNoQ29kZSA9ICg1
MyAqIGhhc2hDb2RlKSArIG1pbmUuaGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBtaW5lOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgdmlzaXRPbmVvZkxhenlNZXNz
YWdlKGJvb2xlYW4gbWluZVByZXNlbnQsIE9iamVjdCBtaW5lLCBPYmplY3Qgb3RoZXIpIHsKLSAg
ICAgIGhhc2hDb2RlID0gKDUzICogaGFzaENvZGUpICsgbWluZS5oYXNoQ29kZSgpOwotICAgICAg
cmV0dXJuIG1pbmU7Ci0gICAgfQotICAgIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmpl
Y3QgdmlzaXRPbmVvZk1lc3NhZ2UoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1pbmUsIE9i
amVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIHZpc2l0TWVzc2FnZSgoTWVzc2FnZUxpdGUpIG1p
bmUsIChNZXNzYWdlTGl0ZSkgb3RoZXIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyB2b2lkIHZpc2l0T25lb2ZOb3RTZXQoYm9vbGVhbiBtaW5lUHJlc2VudCkgewotICAgICAg
aWYgKG1pbmVQcmVzZW50KSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRp
b24oKTsgLy8gQ2FuJ3QgaGFwcGVuIGlmIG90aGVyID09IHRoaXMuIAotICAgICAgfQotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyA8VCBleHRlbmRzIE1lc3NhZ2VMaXRlPiBUIHZp
c2l0TWVzc2FnZShUIG1pbmUsIFQgb3RoZXIpIHsKLSAgICAgIGZpbmFsIGludCBwcm90b0hhc2g7
Ci0gICAgICBpZiAobWluZSAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChtaW5lIGluc3RhbmNlb2Yg
R2VuZXJhdGVkTWVzc2FnZUxpdGUpIHsKLSAgICAgICAgICBwcm90b0hhc2ggPSAoKEdlbmVyYXRl
ZE1lc3NhZ2VMaXRlKSBtaW5lKS5oYXNoQ29kZSh0aGlzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICBwcm90b0hhc2ggPSBtaW5lLmhhc2hDb2RlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHByb3RvSGFzaCA9IDM3OwotICAgICAgfQotICAgICAgaGFzaENvZGUg
PSAoNTMgKiBoYXNoQ29kZSkgKyBwcm90b0hhc2g7Ci0gICAgICByZXR1cm4gbWluZTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTGF6eUZpZWxkTGl0ZSB2aXNpdExhenlNZXNz
YWdlKAotICAgICAgICBib29sZWFuIG1pbmVQcmVzZW50LCBMYXp5RmllbGRMaXRlIG1pbmUsIGJv
b2xlYW4gb3RoZXJQcmVzZW50LCBMYXp5RmllbGRMaXRlIG90aGVyKSB7Ci0gICAgICBoYXNoQ29k
ZSA9ICg1MyAqIGhhc2hDb2RlKSArIG1pbmUuaGFzaENvZGUoKTsKLSAgICAgIHJldHVybiBtaW5l
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyA8VD4gUHJvdG9idWZMaXN0PFQ+
IHZpc2l0TGlzdChQcm90b2J1Zkxpc3Q8VD4gbWluZSwgUHJvdG9idWZMaXN0PFQ+IG90aGVyKSB7
Ci0gICAgICBoYXNoQ29kZSA9ICg1MyAqIGhhc2hDb2RlKSArIG1pbmUuaGFzaENvZGUoKTsKLSAg
ICAgIHJldHVybiBtaW5lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCb29s
ZWFuTGlzdCB2aXNpdEJvb2xlYW5MaXN0KEJvb2xlYW5MaXN0IG1pbmUsIEJvb2xlYW5MaXN0IG90
aGVyKSB7Ci0gICAgICBoYXNoQ29kZSA9ICg1MyAqIGhhc2hDb2RlKSArIG1pbmUuaGFzaENvZGUo
KTsKLSAgICAgIHJldHVybiBtaW5lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBJbnRMaXN0IHZpc2l0SW50TGlzdChJbnRMaXN0IG1pbmUsIEludExpc3Qgb3RoZXIpIHsKLSAg
ICAgIGhhc2hDb2RlID0gKDUzICogaGFzaENvZGUpICsgbWluZS5oYXNoQ29kZSgpOwotICAgICAg
cmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIERvdWJsZUxp
c3QgdmlzaXREb3VibGVMaXN0KERvdWJsZUxpc3QgbWluZSwgRG91YmxlTGlzdCBvdGhlcikgewot
ICAgICAgaGFzaENvZGUgPSAoNTMgKiBoYXNoQ29kZSkgKyBtaW5lLmhhc2hDb2RlKCk7Ci0gICAg
ICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmxvYXRM
aXN0IHZpc2l0RmxvYXRMaXN0KEZsb2F0TGlzdCBtaW5lLCBGbG9hdExpc3Qgb3RoZXIpIHsKLSAg
ICAgIGhhc2hDb2RlID0gKDUzICogaGFzaENvZGUpICsgbWluZS5oYXNoQ29kZSgpOwotICAgICAg
cmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExvbmdMaXN0
IHZpc2l0TG9uZ0xpc3QoTG9uZ0xpc3QgbWluZSwgTG9uZ0xpc3Qgb3RoZXIpIHsKLSAgICAgIGhh
c2hDb2RlID0gKDUzICogaGFzaENvZGUpICsgbWluZS5oYXNoQ29kZSgpOwotICAgICAgcmV0dXJu
IG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpZWxkU2V0PEV4dGVu
c2lvbkRlc2NyaXB0b3I+IHZpc2l0RXh0ZW5zaW9ucygKLSAgICAgICAgRmllbGRTZXQ8RXh0ZW5z
aW9uRGVzY3JpcHRvcj4gbWluZSwKLSAgICAgICAgRmllbGRTZXQ8RXh0ZW5zaW9uRGVzY3JpcHRv
cj4gb3RoZXIpIHsKLSAgICAgIGhhc2hDb2RlID0gKDUzICogaGFzaENvZGUpICsgbWluZS5oYXNo
Q29kZSgpOwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIFVua25vd25GaWVsZFNldExpdGUgdmlzaXRVbmtub3duRmllbGRzKAotICAgICAgICBV
bmtub3duRmllbGRTZXRMaXRlIG1pbmUsCi0gICAgICAgIFVua25vd25GaWVsZFNldExpdGUgb3Ro
ZXIpIHsKLSAgICAgIGhhc2hDb2RlID0gKDUzICogaGFzaENvZGUpICsgbWluZS5oYXNoQ29kZSgp
OwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAgfQotICAgIAotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyA8SywgVj4gTWFwRmllbGRMaXRlPEssIFY+IHZpc2l0TWFwKE1hcEZpZWxkTGl0ZTxLLCBW
PiBtaW5lLCBNYXBGaWVsZExpdGU8SywgVj4gb3RoZXIpIHsKLSAgICAgIGhhc2hDb2RlID0gKDUz
ICogaGFzaENvZGUpICsgbWluZS5oYXNoQ29kZSgpOwotICAgICAgcmV0dXJuIG1pbmU7Ci0gICAg
fQotICB9Ci0KLSAgLyoqCi0gICAqIEltcGxlbWVudHMgZmllbGQgbWVyZ2luZyBzZW1hbnRpY3Mg
b3ZlciB0aGUgdmlzaXRvciBpbnRlcmZhY2UuCi0gICAqLwotICBwcm90ZWN0ZWQgc3RhdGljIGNs
YXNzIE1lcmdlRnJvbVZpc2l0b3IgaW1wbGVtZW50cyBWaXNpdG9yIHsKLQotICAgIHB1YmxpYyBz
dGF0aWMgZmluYWwgTWVyZ2VGcm9tVmlzaXRvciBJTlNUQU5DRSA9IG5ldyBNZXJnZUZyb21WaXNp
dG9yKCk7Ci0KLSAgICBwcml2YXRlIE1lcmdlRnJvbVZpc2l0b3IoKSB7fQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIGJvb2xlYW4gdmlzaXRCb29sZWFuKAotICAgICAgICBib29sZWFuIG1p
bmVQcmVzZW50LCBib29sZWFuIG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBib29sZWFuIG90
aGVyKSB7Ci0gICAgICByZXR1cm4gb3RoZXJQcmVzZW50ID8gb3RoZXIgOiBtaW5lOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgdmlzaXRJbnQoYm9vbGVhbiBtaW5lUHJl
c2VudCwgaW50IG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBpbnQgb3RoZXIpIHsKLSAgICAg
IHJldHVybiBvdGhlclByZXNlbnQgPyBvdGhlciA6IG1pbmU7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIGRvdWJsZSB2aXNpdERvdWJsZSgKLSAgICAgICAgYm9vbGVhbiBtaW5l
UHJlc2VudCwgZG91YmxlIG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBkb3VibGUgb3RoZXIp
IHsKLSAgICAgIHJldHVybiBvdGhlclByZXNlbnQgPyBvdGhlciA6IG1pbmU7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IHZpc2l0RmxvYXQoYm9vbGVhbiBtaW5lUHJl
c2VudCwgZmxvYXQgbWluZSwgYm9vbGVhbiBvdGhlclByZXNlbnQsIGZsb2F0IG90aGVyKSB7Ci0g
ICAgICByZXR1cm4gb3RoZXJQcmVzZW50ID8gb3RoZXIgOiBtaW5lOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBsb25nIHZpc2l0TG9uZyhib29sZWFuIG1pbmVQcmVzZW50LCBs
b25nIG1pbmUsIGJvb2xlYW4gb3RoZXJQcmVzZW50LCBsb25nIG90aGVyKSB7Ci0gICAgICByZXR1
cm4gb3RoZXJQcmVzZW50ID8gb3RoZXIgOiBtaW5lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBTdHJpbmcgdmlzaXRTdHJpbmcoCi0gICAgICAgIGJvb2xlYW4gbWluZVByZXNl
bnQsIFN0cmluZyBtaW5lLCBib29sZWFuIG90aGVyUHJlc2VudCwgU3RyaW5nIG90aGVyKSB7Ci0g
ICAgICByZXR1cm4gb3RoZXJQcmVzZW50ID8gb3RoZXIgOiBtaW5lOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBCeXRlU3RyaW5nIHZpc2l0Qnl0ZVN0cmluZygKLSAgICAgICAg
Ym9vbGVhbiBtaW5lUHJlc2VudCwgQnl0ZVN0cmluZyBtaW5lLCBib29sZWFuIG90aGVyUHJlc2Vu
dCwgQnl0ZVN0cmluZyBvdGhlcikgewotICAgICAgcmV0dXJuIG90aGVyUHJlc2VudCA/IG90aGVy
IDogbWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHZpc2l0
T25lb2ZCb29sZWFuKGJvb2xlYW4gbWluZVByZXNlbnQsIE9iamVjdCBtaW5lLCBPYmplY3Qgb3Ro
ZXIpIHsKLSAgICAgIHJldHVybiBvdGhlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgT2JqZWN0IHZpc2l0T25lb2ZJbnQoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1p
bmUsIE9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIG90aGVyOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgdmlzaXRPbmVvZkRvdWJsZShib29sZWFuIG1pbmVQ
cmVzZW50LCBPYmplY3QgbWluZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gb3RoZXI7
ICAgICAgCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCB2aXNpdE9u
ZW9mRmxvYXQoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1pbmUsIE9iamVjdCBvdGhlcikg
ewotICAgICAgcmV0dXJuIG90aGVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBPYmplY3QgdmlzaXRPbmVvZkxvbmcoYm9vbGVhbiBtaW5lUHJlc2VudCwgT2JqZWN0IG1pbmUs
IE9iamVjdCBvdGhlcikgewotICAgICAgcmV0dXJuIG90aGVyOyAgICAgIAotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgdmlzaXRPbmVvZlN0cmluZyhib29sZWFuIG1p
bmVQcmVzZW50LCBPYmplY3QgbWluZSwgT2JqZWN0IG90aGVyKSB7Ci0gICAgICByZXR1cm4gb3Ro
ZXI7ICAgICAgCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCB2aXNp
dE9uZW9mQnl0ZVN0cmluZyhib29sZWFuIG1pbmVQcmVzZW50LCBPYmplY3QgbWluZSwgT2JqZWN0
IG90aGVyKSB7Ci0gICAgICByZXR1cm4gb3RoZXI7ICAgICAgCi0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIE9iamVjdCB2aXNpdE9uZW9mTGF6eU1lc3NhZ2UoYm9vbGVhbiBtaW5l
UHJlc2VudCwgT2JqZWN0IG1pbmUsIE9iamVjdCBvdGhlcikgewotICAgICAgaWYgKG1pbmVQcmVz
ZW50KSB7Ci0gICAgICAgIExhenlGaWVsZExpdGUgbGF6eSA9IChMYXp5RmllbGRMaXRlKSBtaW5l
OwotICAgICAgICBsYXp5Lm1lcmdlKChMYXp5RmllbGRMaXRlKSBvdGhlcik7Ci0gICAgICAgIHJl
dHVybiBsYXp5OwotICAgICAgfQotICAgICAgcmV0dXJuIG90aGVyOwotICAgIH0KLSAgICAKLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHZpc2l0T25lb2ZNZXNzYWdlKGJvb2xlYW4g
bWluZVByZXNlbnQsIE9iamVjdCBtaW5lLCBPYmplY3Qgb3RoZXIpIHsKLSAgICAgIGlmIChtaW5l
UHJlc2VudCkgewotICAgICAgICByZXR1cm4gdmlzaXRNZXNzYWdlKChNZXNzYWdlTGl0ZSkgbWlu
ZSwgKE1lc3NhZ2VMaXRlKSBvdGhlcik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gb3RoZXI7Ci0g
ICAgfQotICAgIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0T25lb2ZOb3RT
ZXQoYm9vbGVhbiBtaW5lUHJlc2VudCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEBT
dXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKSAvLyBHdWFyYW50ZWVkIGJ5IHJ1bnRpbWUuCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxUIGV4dGVuZHMgTWVzc2FnZUxpdGU+IFQgdmlzaXRN
ZXNzYWdlKFQgbWluZSwgVCBvdGhlcikgewotICAgICAgaWYgKG1pbmUgIT0gbnVsbCAmJiBvdGhl
ciAhPSBudWxsKSB7Ci0gICAgICAgIHJldHVybiAoVCkgbWluZS50b0J1aWxkZXIoKS5tZXJnZUZy
b20ob3RoZXIpLmJ1aWxkKCk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBtaW5lICE9IG51bGwg
PyBtaW5lIDogb3RoZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExhenlG
aWVsZExpdGUgdmlzaXRMYXp5TWVzc2FnZSgKLSAgICAgICAgYm9vbGVhbiBtaW5lUHJlc2VudCwg
TGF6eUZpZWxkTGl0ZSBtaW5lLCBib29sZWFuIG90aGVyUHJlc2VudCwgTGF6eUZpZWxkTGl0ZSBv
dGhlcikgewotICAgICAgLy8gTGF6eUZpZWxkTGl0ZSdzIGFyZSBuZXZlciBudWxsIHNvIHdlIGNh
biBqdXN0IGNvcHkgYWNyb3NzLiBOZWNlc3NhcnkgdG8gYXZvaWQgbGVha2FnZQotICAgICAgLy8g
ZnJvbSBidWlsZGVyIGludG8gaW1tdXRhYmxlIG1lc3NhZ2UuCi0gICAgICAvLyBUT0RPKGR3ZWlz
KTogQ2hhbmdlIHRvIG51bGwgc2VudGluZWxzPwotICAgICAgbWluZS5tZXJnZShvdGhlcik7Ci0g
ICAgICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgPFQ+
IFByb3RvYnVmTGlzdDxUPiB2aXNpdExpc3QoUHJvdG9idWZMaXN0PFQ+IG1pbmUsIFByb3RvYnVm
TGlzdDxUPiBvdGhlcikgewotICAgICAgaW50IHNpemUgPSBtaW5lLnNpemUoKTsKLSAgICAgIGlu
dCBvdGhlclNpemUgPSBvdGhlci5zaXplKCk7Ci0gICAgICBpZiAoc2l6ZSA+IDAgJiYgb3RoZXJT
aXplID4gMCkgewotICAgICAgICBpZiAoIW1pbmUuaXNNb2RpZmlhYmxlKCkpIHsKLSAgICAgICAg
ICBtaW5lID0gbWluZS5tdXRhYmxlQ29weVdpdGhDYXBhY2l0eShzaXplICsgb3RoZXJTaXplKTsK
LSAgICAgICAgfQotICAgICAgICBtaW5lLmFkZEFsbChvdGhlcik7Ci0gICAgICB9Ci0gICAgICAK
LSAgICAgIHJldHVybiBzaXplID4gMCA/IG1pbmUgOiBvdGhlcjsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgQm9vbGVhbkxpc3QgdmlzaXRCb29sZWFuTGlzdChCb29sZWFuTGlz
dCBtaW5lLCBCb29sZWFuTGlzdCBvdGhlcikgewotICAgICAgaW50IHNpemUgPSBtaW5lLnNpemUo
KTsKLSAgICAgIGludCBvdGhlclNpemUgPSBvdGhlci5zaXplKCk7Ci0gICAgICBpZiAoc2l6ZSA+
IDAgJiYgb3RoZXJTaXplID4gMCkgewotICAgICAgICBpZiAoIW1pbmUuaXNNb2RpZmlhYmxlKCkp
IHsKLSAgICAgICAgICBtaW5lID0gbWluZS5tdXRhYmxlQ29weVdpdGhDYXBhY2l0eShzaXplICsg
b3RoZXJTaXplKTsKLSAgICAgICAgfQotICAgICAgICBtaW5lLmFkZEFsbChvdGhlcik7Ci0gICAg
ICB9Ci0gICAgICAKLSAgICAgIHJldHVybiBzaXplID4gMCA/IG1pbmUgOiBvdGhlcjsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSW50TGlzdCB2aXNpdEludExpc3QoSW50TGlz
dCBtaW5lLCBJbnRMaXN0IG90aGVyKSB7Ci0gICAgICBpbnQgc2l6ZSA9IG1pbmUuc2l6ZSgpOwot
ICAgICAgaW50IG90aGVyU2l6ZSA9IG90aGVyLnNpemUoKTsKLSAgICAgIGlmIChzaXplID4gMCAm
JiBvdGhlclNpemUgPiAwKSB7Ci0gICAgICAgIGlmICghbWluZS5pc01vZGlmaWFibGUoKSkgewot
ICAgICAgICAgIG1pbmUgPSBtaW5lLm11dGFibGVDb3B5V2l0aENhcGFjaXR5KHNpemUgKyBvdGhl
clNpemUpOwotICAgICAgICB9Ci0gICAgICAgIG1pbmUuYWRkQWxsKG90aGVyKTsKLSAgICAgIH0K
LSAgICAgIAotICAgICAgcmV0dXJuIHNpemUgPiAwID8gbWluZSA6IG90aGVyOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEb3VibGVMaXN0IHZpc2l0RG91YmxlTGlzdChEb3Vi
bGVMaXN0IG1pbmUsIERvdWJsZUxpc3Qgb3RoZXIpIHsKLSAgICAgIGludCBzaXplID0gbWluZS5z
aXplKCk7Ci0gICAgICBpbnQgb3RoZXJTaXplID0gb3RoZXIuc2l6ZSgpOwotICAgICAgaWYgKHNp
emUgPiAwICYmIG90aGVyU2l6ZSA+IDApIHsKLSAgICAgICAgaWYgKCFtaW5lLmlzTW9kaWZpYWJs
ZSgpKSB7Ci0gICAgICAgICAgbWluZSA9IG1pbmUubXV0YWJsZUNvcHlXaXRoQ2FwYWNpdHkoc2l6
ZSArIG90aGVyU2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbWluZS5hZGRBbGwob3RoZXIpOwot
ICAgICAgfQotICAgICAgCi0gICAgICByZXR1cm4gc2l6ZSA+IDAgPyBtaW5lIDogb3RoZXI7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZsb2F0TGlzdCB2aXNpdEZsb2F0TGlz
dChGbG9hdExpc3QgbWluZSwgRmxvYXRMaXN0IG90aGVyKSB7Ci0gICAgICBpbnQgc2l6ZSA9IG1p
bmUuc2l6ZSgpOwotICAgICAgaW50IG90aGVyU2l6ZSA9IG90aGVyLnNpemUoKTsKLSAgICAgIGlm
IChzaXplID4gMCAmJiBvdGhlclNpemUgPiAwKSB7Ci0gICAgICAgIGlmICghbWluZS5pc01vZGlm
aWFibGUoKSkgewotICAgICAgICAgIG1pbmUgPSBtaW5lLm11dGFibGVDb3B5V2l0aENhcGFjaXR5
KHNpemUgKyBvdGhlclNpemUpOwotICAgICAgICB9Ci0gICAgICAgIG1pbmUuYWRkQWxsKG90aGVy
KTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIHNpemUgPiAwID8gbWluZSA6IG90aGVy
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMb25nTGlzdCB2aXNpdExvbmdM
aXN0KExvbmdMaXN0IG1pbmUsIExvbmdMaXN0IG90aGVyKSB7Ci0gICAgICBpbnQgc2l6ZSA9IG1p
bmUuc2l6ZSgpOwotICAgICAgaW50IG90aGVyU2l6ZSA9IG90aGVyLnNpemUoKTsKLSAgICAgIGlm
IChzaXplID4gMCAmJiBvdGhlclNpemUgPiAwKSB7Ci0gICAgICAgIGlmICghbWluZS5pc01vZGlm
aWFibGUoKSkgewotICAgICAgICAgIG1pbmUgPSBtaW5lLm11dGFibGVDb3B5V2l0aENhcGFjaXR5
KHNpemUgKyBvdGhlclNpemUpOwotICAgICAgICB9Ci0gICAgICAgIG1pbmUuYWRkQWxsKG90aGVy
KTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgcmV0dXJuIHNpemUgPiAwID8gbWluZSA6IG90aGVy
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWVsZFNldDxFeHRlbnNpb25E
ZXNjcmlwdG9yPiB2aXNpdEV4dGVuc2lvbnMoCi0gICAgICAgIEZpZWxkU2V0PEV4dGVuc2lvbkRl
c2NyaXB0b3I+IG1pbmUsCi0gICAgICAgIEZpZWxkU2V0PEV4dGVuc2lvbkRlc2NyaXB0b3I+IG90
aGVyKSB7Ci0gICAgICBpZiAobWluZS5pc0ltbXV0YWJsZSgpKSB7Ci0gICAgICAgIG1pbmUgPSBt
aW5lLmNsb25lKCk7Ci0gICAgICB9Ci0gICAgICBtaW5lLm1lcmdlRnJvbShvdGhlcik7Ci0gICAg
ICByZXR1cm4gbWluZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVW5rbm93
bkZpZWxkU2V0TGl0ZSB2aXNpdFVua25vd25GaWVsZHMoCi0gICAgICAgIFVua25vd25GaWVsZFNl
dExpdGUgbWluZSwKLSAgICAgICAgVW5rbm93bkZpZWxkU2V0TGl0ZSBvdGhlcikgewotICAgICAg
cmV0dXJuIG90aGVyID09IFVua25vd25GaWVsZFNldExpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkK
LSAgICAgICAgICA/IG1pbmUgOiBVbmtub3duRmllbGRTZXRMaXRlLm11dGFibGVDb3B5T2YobWlu
ZSwgb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgPEssIFY+
IE1hcEZpZWxkTGl0ZTxLLCBWPiB2aXNpdE1hcChNYXBGaWVsZExpdGU8SywgVj4gbWluZSwgTWFw
RmllbGRMaXRlPEssIFY+IG90aGVyKSB7Ci0gICAgICBtaW5lLm1lcmdlRnJvbShvdGhlcik7Ci0g
ICAgICByZXR1cm4gbWluZTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9JbnRBcnJheUxpc3QuamF2YSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9j
b3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9JbnRBcnJheUxpc3QuamF2YQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ2ZWNlNWEyODRiZmNiOGUzMmFkYzZiNDVi
ZjdiYTlhYzI3ZWZmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvSW50QXJyYXlM
aXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1w
b3J0IGNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJuYWwuSW50TGlzdDsKLQotaW1wb3J0IGphdmEu
dXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51
dGlsLlJhbmRvbUFjY2VzczsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsg
SW50TGlzdH0gb24gdG9wIG9mIGEgcHJpbWl0aXZlIGFycmF5LgotICogCi0gKiBAYXV0aG9yIGR3
ZWlzQGdvb2dsZS5jb20gKERhbmllbCBXZWlzKQotICovCi1maW5hbCBjbGFzcyBJbnRBcnJheUxp
c3QgZXh0ZW5kcyBBYnN0cmFjdFByb3RvYnVmTGlzdDxJbnRlZ2VyPiBpbXBsZW1lbnRzIEludExp
c3QsIFJhbmRvbUFjY2VzcyB7Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbnRBcnJheUxp
c3QgRU1QVFlfTElTVCA9IG5ldyBJbnRBcnJheUxpc3QoKTsKLSAgc3RhdGljIHsKLSAgICBFTVBU
WV9MSVNULm1ha2VJbW11dGFibGUoKTsKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBJbnRBcnJh
eUxpc3QgZW1wdHlMaXN0KCkgewotICAgIHJldHVybiBFTVBUWV9MSVNUOwotICB9Ci0gIAotICAv
KioKLSAgICogVGhlIGJhY2tpbmcgc3RvcmUgZm9yIHRoZSBsaXN0LgotICAgKi8KLSAgcHJpdmF0
ZSBpbnRbXSBhcnJheTsKLSAgCi0gIC8qKgotICAgKiBUaGUgc2l6ZSBvZiB0aGUgbGlzdCBkaXN0
aW5jdCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LiBUaGF0IGlzLCBpdCBpcyB0aGUgbnVt
YmVyIG9mCi0gICAqIGVsZW1lbnRzIHNldCBpbiB0aGUgbGlzdC4KLSAgICovCi0gIHByaXZhdGUg
aW50IHNpemU7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBuZXcgbXV0YWJsZSB7QGNvZGUg
SW50QXJyYXlMaXN0fSB3aXRoIGRlZmF1bHQgY2FwYWNpdHkuCi0gICAqLwotICBJbnRBcnJheUxp
c3QoKSB7Ci0gICAgdGhpcyhuZXcgaW50W0RFRkFVTFRfQ0FQQUNJVFldLCAwKTsKLSAgfQotCi0g
IC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgbmV3IG11dGFibGUge0Bjb2RlIEludEFycmF5TGlzdH0g
Y29udGFpbmluZyB0aGUgc2FtZSBlbGVtZW50cyBhcyB7QGNvZGUgb3RoZXJ9LgotICAgKi8KLSAg
cHJpdmF0ZSBJbnRBcnJheUxpc3QoaW50W10gYXJyYXksIGludCBzaXplKSB7Ci0gICAgdGhpcy5h
cnJheSA9IGFycmF5OwotICAgIHRoaXMuc2l6ZSA9IHNpemU7Ci0gIH0KLSAgCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKLSAgICBpZiAodGhpcyA9PSBv
KSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCEobyBpbnN0YW5jZW9mIElu
dEFycmF5TGlzdCkpIHsKLSAgICAgIHJldHVybiBzdXBlci5lcXVhbHMobyk7Ci0gICAgfQotICAg
IEludEFycmF5TGlzdCBvdGhlciA9IChJbnRBcnJheUxpc3QpIG87Ci0gICAgaWYgKHNpemUgIT0g
b3RoZXIuc2l6ZSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBmaW5h
bCBpbnRbXSBhcnIgPSBvdGhlci5hcnJheTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
IGkrKykgewotICAgICAgaWYgKGFycmF5W2ldICE9IGFycltpXSkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgaW50IHJlc3VsdCA9IDE7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgIHJlc3VsdCA9ICgz
MSAqIHJlc3VsdCkgKyBhcnJheVtpXTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgSW50TGlzdCBtdXRhYmxlQ29weVdpdGhDYXBhY2l0eShp
bnQgY2FwYWNpdHkpIHsKLSAgICBpZiAoY2FwYWNpdHkgPCBzaXplKSB7Ci0gICAgICB0aHJvdyBu
ZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgSW50
QXJyYXlMaXN0KEFycmF5cy5jb3B5T2YoYXJyYXksIGNhcGFjaXR5KSwgc2l6ZSk7Ci0gIH0KLSAg
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgSW50ZWdlciBnZXQoaW50IGluZGV4KSB7Ci0gICAgcmV0
dXJuIGdldEludChpbmRleCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGludCBnZXRJ
bnQoaW50IGluZGV4KSB7Ci0gICAgZW5zdXJlSW5kZXhJblJhbmdlKGluZGV4KTsKLSAgICByZXR1
cm4gYXJyYXlbaW5kZXhdOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc2l6ZSgp
IHsKLSAgICByZXR1cm4gc2l6ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgSW50ZWdl
ciBzZXQoaW50IGluZGV4LCBJbnRlZ2VyIGVsZW1lbnQpIHsKLSAgICByZXR1cm4gc2V0SW50KGlu
ZGV4LCBlbGVtZW50KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IHNldEludChp
bnQgaW5kZXgsIGludCBlbGVtZW50KSB7Ci0gICAgZW5zdXJlSXNNdXRhYmxlKCk7Ci0gICAgZW5z
dXJlSW5kZXhJblJhbmdlKGluZGV4KTsKLSAgICBpbnQgcHJldmlvdXNWYWx1ZSA9IGFycmF5W2lu
ZGV4XTsKLSAgICBhcnJheVtpbmRleF0gPSBlbGVtZW50OwotICAgIHJldHVybiBwcmV2aW91c1Zh
bHVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGFkZChpbnQgaW5kZXgsIElu
dGVnZXIgZWxlbWVudCkgewotICAgIGFkZEludChpbmRleCwgZWxlbWVudCk7Ci0gIH0KLQotICAv
KioKLSAgICogTGlrZSB7QGxpbmsgI2FkZChJbnRlZ2VyKX0gYnV0IG1vcmUgZWZmaWNpZW50IGlu
IHRoYXQgaXQgZG9lc24ndCBib3ggdGhlIGVsZW1lbnQuCi0gICAqLwotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgYWRkSW50KGludCBlbGVtZW50KSB7Ci0gICAgYWRkSW50KHNpemUsIGVsZW1l
bnQpOwotICB9Ci0KLSAgLyoqCi0gICAqIExpa2Uge0BsaW5rICNhZGQoaW50LCBJbnRlZ2VyKX0g
YnV0IG1vcmUgZWZmaWNpZW50IGluIHRoYXQgaXQgZG9lc24ndCBib3ggdGhlIGVsZW1lbnQuCi0g
ICAqLwotICBwcml2YXRlIHZvaWQgYWRkSW50KGludCBpbmRleCwgaW50IGVsZW1lbnQpIHsKLSAg
ICBlbnN1cmVJc011dGFibGUoKTsKLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gc2l6ZSkg
ewotICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24obWFrZU91dE9mQm91
bmRzRXhjZXB0aW9uTWVzc2FnZShpbmRleCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAoc2l6ZSA8
IGFycmF5Lmxlbmd0aCkgewotICAgICAgLy8gU2hpZnQgZXZlcnl0aGluZyBvdmVyIHRvIG1ha2Ug
cm9vbQotICAgICAgU3lzdGVtLmFycmF5Y29weShhcnJheSwgaW5kZXgsIGFycmF5LCBpbmRleCAr
IDEsIHNpemUgLSBpbmRleCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFJlc2l6ZSB0byAxLjV4
IHRoZSBzaXplCi0gICAgICBpbnQgbGVuZ3RoID0gKChzaXplICogMykgLyAyKSArIDE7Ci0gICAg
ICBpbnRbXSBuZXdBcnJheSA9IG5ldyBpbnRbbGVuZ3RoXTsKLSAgICAgIAotICAgICAgLy8gQ29w
eSB0aGUgZmlyc3QgcGFydCBkaXJlY3RseQotICAgICAgU3lzdGVtLmFycmF5Y29weShhcnJheSwg
MCwgbmV3QXJyYXksIDAsIGluZGV4KTsKLSAgICAgIAotICAgICAgLy8gQ29weSB0aGUgcmVzdCBz
aGlmdGVkIG92ZXIgYnkgb25lIHRvIG1ha2Ugcm9vbQotICAgICAgU3lzdGVtLmFycmF5Y29weShh
cnJheSwgaW5kZXgsIG5ld0FycmF5LCBpbmRleCArIDEsIHNpemUgLSBpbmRleCk7Ci0gICAgICBh
cnJheSA9IG5ld0FycmF5OwotICAgIH0KLQotICAgIGFycmF5W2luZGV4XSA9IGVsZW1lbnQ7Ci0g
ICAgc2l6ZSsrOwotICAgIG1vZENvdW50Kys7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IGJvb2xlYW4gYWRkQWxsKENvbGxlY3Rpb248PyBleHRlbmRzIEludGVnZXI+IGNvbGxlY3Rpb24p
IHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICAKLSAgICBpZiAoY29sbGVjdGlvbiA9PSBu
dWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gV2Ugc3BlY2lhbGl6ZSB3aGVuIGFkZGluZyBhbm90aGVyIEludEFycmF5TGlz
dCB0byBhdm9pZCBib3hpbmcgZWxlbWVudHMuCi0gICAgaWYgKCEoY29sbGVjdGlvbiBpbnN0YW5j
ZW9mIEludEFycmF5TGlzdCkpIHsKLSAgICAgIHJldHVybiBzdXBlci5hZGRBbGwoY29sbGVjdGlv
bik7Ci0gICAgfQotICAgIAotICAgIEludEFycmF5TGlzdCBsaXN0ID0gKEludEFycmF5TGlzdCkg
Y29sbGVjdGlvbjsKLSAgICBpZiAobGlzdC5zaXplID09IDApIHsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgCi0gICAgaW50IG92ZXJmbG93ID0gSW50ZWdlci5NQVhfVkFMVUUgLSBz
aXplOwotICAgIGlmIChvdmVyZmxvdyA8IGxpc3Quc2l6ZSkgewotICAgICAgLy8gV2UgY2FuJ3Qg
YWN0dWFsbHkgcmVwcmVzZW50IGEgbGlzdCB0aGlzIGxhcmdlLgotICAgICAgdGhyb3cgbmV3IE91
dE9mTWVtb3J5RXJyb3IoKTsKLSAgICB9Ci0gICAgCi0gICAgaW50IG5ld1NpemUgPSBzaXplICsg
bGlzdC5zaXplOwotICAgIGlmIChuZXdTaXplID4gYXJyYXkubGVuZ3RoKSB7Ci0gICAgICBhcnJh
eSA9IEFycmF5cy5jb3B5T2YoYXJyYXksIG5ld1NpemUpOwotICAgIH0KLSAgICAKLSAgICBTeXN0
ZW0uYXJyYXljb3B5KGxpc3QuYXJyYXksIDAsIGFycmF5LCBzaXplLCBsaXN0LnNpemUpOwotICAg
IHNpemUgPSBuZXdTaXplOwotICAgIG1vZENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmUoT2JqZWN0IG8pIHsKLSAg
ICBlbnN1cmVJc011dGFibGUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykg
ewotICAgICAgaWYgKG8uZXF1YWxzKGFycmF5W2ldKSkgewotICAgICAgICBTeXN0ZW0uYXJyYXlj
b3B5KGFycmF5LCBpICsgMSwgYXJyYXksIGksIHNpemUgLSBpKTsKLSAgICAgICAgc2l6ZS0tOwot
ICAgICAgICBtb2RDb3VudCsrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBJbnRlZ2Vy
IHJlbW92ZShpbnQgaW5kZXgpIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICBlbnN1cmVJ
bmRleEluUmFuZ2UoaW5kZXgpOwotICAgIGludCB2YWx1ZSA9IGFycmF5W2luZGV4XTsKLSAgICBT
eXN0ZW0uYXJyYXljb3B5KGFycmF5LCBpbmRleCArIDEsIGFycmF5LCBpbmRleCwgc2l6ZSAtIGlu
ZGV4KTsKLSAgICBzaXplLS07Ci0gICAgbW9kQ291bnQrKzsKLSAgICByZXR1cm4gdmFsdWU7Ci0g
IH0KLQotICAvKioKLSAgICogRW5zdXJlcyB0aGF0IHRoZSBwcm92aWRlZCB7QGNvZGUgaW5kZXh9
IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2Yge0Bjb2RlIFswLCBzaXplXX0uIFRocm93cyBhbgotICAg
KiB7QGxpbmsgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbn0gaWYgaXQgaXMgbm90LgotICAgKiAK
LSAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCB0byB2ZXJpZnkgaXMgaW4gcmFuZ2UKLSAgICov
Ci0gIHByaXZhdGUgdm9pZCBlbnN1cmVJbmRleEluUmFuZ2UoaW50IGluZGV4KSB7Ci0gICAgaWYg
KGluZGV4IDwgMCB8fCBpbmRleCA+PSBzaXplKSB7Ci0gICAgICB0aHJvdyBuZXcgSW5kZXhPdXRP
ZkJvdW5kc0V4Y2VwdGlvbihtYWtlT3V0T2ZCb3VuZHNFeGNlcHRpb25NZXNzYWdlKGluZGV4KSk7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgbWFrZU91dE9mQm91bmRzRXhjZXB0aW9u
TWVzc2FnZShpbnQgaW5kZXgpIHsKLSAgICByZXR1cm4gIkluZGV4OiIgKyBpbmRleCArICIsIFNp
emU6IiArIHNpemU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEv
Y29tL2dvb2dsZS9wcm90b2J1Zi9JbnRlcm5hbC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0ludGVybmFsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQxZGUzNzVlMTQ2ZjA3MDYxYmQ0YTVhNTZmZTZjYzRmNDNmM2QxNWYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21h
aW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0ludGVybmFsLmphdmEKKysrIC9kZXYvbnVsbApA
QCAtMSw3NDEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBh
Y2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247
Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubmlvLkJ5dGVC
dWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEudXRp
bC5BYnN0cmFjdExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TWFwOwotaW1wb3J0IGph
dmEudXRpbC5BYnN0cmFjdFNldDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGph
dmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0
aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5SYW5kb21BY2Nlc3M7Ci1pbXBvcnQgamF2YS51dGls
LlNldDsKLQotLyoqCi0gKiBUaGUgY2xhc3NlcyBjb250YWluZWQgd2l0aGluIGFyZSB1c2VkIGlu
dGVybmFsbHkgYnkgdGhlIFByb3RvY29sIEJ1ZmZlcgotICogbGlicmFyeSBhbmQgZ2VuZXJhdGVk
IG1lc3NhZ2UgaW1wbGVtZW50YXRpb25zLiBUaGV5IGFyZSBwdWJsaWMgb25seSBiZWNhdXNlCi0g
KiB0aG9zZSBnZW5lcmF0ZWQgbWVzc2FnZXMgZG8gbm90IHJlc2lkZSBpbiB0aGUge0Bjb2RlIHBy
b3RvYnVmfSBwYWNrYWdlLgotICogT3RoZXJzIHNob3VsZCBub3QgdXNlIHRoaXMgY2xhc3MgZGly
ZWN0bHkuCi0gKgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQot
ICovCi1wdWJsaWMgZmluYWwgY2xhc3MgSW50ZXJuYWwgewotCi0gIHByaXZhdGUgSW50ZXJuYWwo
KSB7fQotCi0gIHN0YXRpYyBmaW5hbCBDaGFyc2V0IFVURl84ID0gQ2hhcnNldC5mb3JOYW1lKCJV
VEYtOCIpOwotICBzdGF0aWMgZmluYWwgQ2hhcnNldCBJU09fODg1OV8xID0gQ2hhcnNldC5mb3JO
YW1lKCJJU08tODg1OS0xIik7Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBjYWxsZWQgYnkgZ2VuZXJh
dGVkIGNvZGUgdG8gY29uc3RydWN0IGRlZmF1bHQgdmFsdWVzIGZvciBzdHJpbmcKLSAgICogZmll
bGRzLgotICAgKiA8cD4KLSAgICogVGhlIHByb3RvY29sIGNvbXBpbGVyIGRvZXMgbm90IGFjdHVh
bGx5IGNvbnRhaW4gYSBVVEYtOCBkZWNvZGVyIC0tIGl0Ci0gICAqIGp1c3QgcHVzaGVzIFVURi04
LWVuY29kZWQgdGV4dCBhcm91bmQgd2l0aG91dCB0b3VjaGluZyBpdC4gIFRoZSBvbmUgcGxhY2UK
LSAgICogd2hlcmUgdGhpcyBwcmVzZW50cyBhIHByb2JsZW0gaXMgd2hlbiBnZW5lcmF0aW5nIEph
dmEgc3RyaW5nIGxpdGVyYWxzLgotICAgKiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmlu
ZyBsaXRlcmFsIHdvdWxkIG5vcm1hbGx5IG5lZWQgdG8gYmUgZW5jb2RlZAotICAgKiB1c2luZyBh
IFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLCB3aGljaCB3b3VsZCByZXF1aXJlIGRlY29kaW5nIHRo
ZW0uCi0gICAqIFRvIGdldCBhcm91bmQgdGhpcywgcHJvdG9jIGluc3RlYWQgZW1iZWRzIHRoZSBV
VEYtOCBieXRlcyBpbnRvIHRoZQotICAgKiBnZW5lcmF0ZWQgY29kZSBhbmQgbGVhdmVzIGl0IHRv
IHRoZSBydW50aW1lIGxpYnJhcnkgdG8gZGVjb2RlIHRoZW0uCi0gICAqIDxwPgotICAgKiBJdCBn
ZXRzIHdvcnNlLCB0aG91Z2guICBJZiBwcm90b2MganVzdCBnZW5lcmF0ZWQgYSBieXRlIGFycmF5
LCBsaWtlOgotICAgKiAgIG5ldyBieXRlW10gezB4MTIsIDB4MzQsIDB4NTYsIDB4Nzh9Ci0gICAq
IEphdmEgYWN0dWFsbHkgZ2VuZXJhdGVzICpjb2RlKiB3aGljaCBhbGxvY2F0ZXMgYW4gYXJyYXkg
YW5kIHRoZW4gZmlsbHMKLSAgICogaW4gZWFjaCB2YWx1ZS4gIFRoaXMgaXMgbXVjaCBsZXNzIGVm
ZmljaWVudCB0aGFuIGp1c3QgZW1iZWRkaW5nIHRoZSBieXRlcwotICAgKiBkaXJlY3RseSBpbnRv
IHRoZSBieXRlY29kZS4gIFRvIGdldCBhcm91bmQgdGhpcywgd2UgbmVlZCBhbm90aGVyCi0gICAq
IHdvcmstYXJvdW5kLiAgU3RyaW5nIGxpdGVyYWxzIGFyZSBlbWJlZGRlZCBkaXJlY3RseSwgc28g
cHJvdG9jIGFjdHVhbGx5Ci0gICAqIGdlbmVyYXRlcyBhIHN0cmluZyBsaXRlcmFsIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIGJ5dGVzLiAgVGhlIGVhc2llc3Qgd2F5Ci0gICAqIHRvIGRvIHRoaXMgaXMg
dG8gdXNlIHRoZSBJU08tODg1OS0xIGNoYXJhY3RlciBzZXQsIHdoaWNoIGNvcnJlc3BvbmRzIHRv
Ci0gICAqIHRoZSBmaXJzdCAyNTYgY2hhcmFjdGVycyBvZiB0aGUgVW5pY29kZSByYW5nZS4gIFBy
b3RvYyBjYW4gdGhlbiB1c2UKLSAgICogZ29vZCBvbGQgQ0VzY2FwZSB0byBnZW5lcmF0ZSB0aGUg
c3RyaW5nLgotICAgKiA8cD4KLSAgICogU28gd2UgaGF2ZSBhIHN0cmluZyBsaXRlcmFsIHdoaWNo
IHJlcHJlc2VudHMgYSBzZXQgb2YgYnl0ZXMgd2hpY2gKLSAgICogcmVwcmVzZW50cyBhbm90aGVy
IHN0cmluZy4gIFRoaXMgZnVuY3Rpb24gLS0gc3RyaW5nRGVmYXVsdFZhbHVlIC0tCi0gICAqIGNv
bnZlcnRzIGZyb20gdGhlIGdlbmVyYXRlZCBzdHJpbmcgdG8gdGhlIHN0cmluZyB3ZSBhY3R1YWxs
eSB3YW50LiAgVGhlCi0gICAqIGdlbmVyYXRlZCBjb2RlIGNhbGxzIHRoaXMgYXV0b21hdGljYWxs
eS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHN0cmluZ0RlZmF1bHRWYWx1ZShTdHJp
bmcgYnl0ZXMpIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZyhieXRlcy5nZXRCeXRlcyhJU09fODg1
OV8xKSwgVVRGXzgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBjYWxsZWQgYnkgZ2VuZXJh
dGVkIGNvZGUgdG8gY29uc3RydWN0IGRlZmF1bHQgdmFsdWVzIGZvciBieXRlcwotICAgKiBmaWVs
ZHMuCi0gICAqIDxwPgotICAgKiBUaGlzIGlzIGEgbG90IGxpa2Uge0BsaW5rICNzdHJpbmdEZWZh
dWx0VmFsdWV9LCBidXQgZm9yIGJ5dGVzIGZpZWxkcy4KLSAgICogSW4gdGhpcyBjYXNlIHdlIG9u
bHkgbmVlZCB0aGUgc2Vjb25kIG9mIHRoZSB0d28gaGFja3MgLS0gYWxsb3dpbmcgdXMgdG8KLSAg
ICogZW1iZWQgcmF3IGJ5dGVzIGFzIGEgc3RyaW5nIGxpdGVyYWwgd2l0aCBJU08tODg1OS0xIGVu
Y29kaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBCeXRlU3RyaW5nIGJ5dGVzRGVmYXVsdFZh
bHVlKFN0cmluZyBieXRlcykgewotICAgIHJldHVybiBCeXRlU3RyaW5nLmNvcHlGcm9tKGJ5dGVz
LmdldEJ5dGVzKElTT184ODU5XzEpKTsKLSAgfQotICAvKioKLSAgICogSGVscGVyIGNhbGxlZCBi
eSBnZW5lcmF0ZWQgY29kZSB0byBjb25zdHJ1Y3QgZGVmYXVsdCB2YWx1ZXMgZm9yIGJ5dGVzCi0g
ICAqIGZpZWxkcy4KLSAgICogPHA+Ci0gICAqIFRoaXMgaXMgbGlrZSB7QGxpbmsgI2J5dGVzRGVm
YXVsdFZhbHVlfSwgYnV0IHJldHVybnMgYSBieXRlIGFycmF5LgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBieXRlW10gYnl0ZUFycmF5RGVmYXVsdFZhbHVlKFN0cmluZyBieXRlcykgewotICAgIHJl
dHVybiBieXRlcy5nZXRCeXRlcyhJU09fODg1OV8xKTsKLSAgfQotCi0gIC8qKgotICAgKiBIZWxw
ZXIgY2FsbGVkIGJ5IGdlbmVyYXRlZCBjb2RlIHRvIGNvbnN0cnVjdCBkZWZhdWx0IHZhbHVlcyBm
b3IgYnl0ZXMKLSAgICogZmllbGRzLgotICAgKiA8cD4KLSAgICogVGhpcyBpcyBsaWtlIHtAbGlu
ayAjYnl0ZXNEZWZhdWx0VmFsdWV9LCBidXQgcmV0dXJucyBhIEJ5dGVCdWZmZXIuCi0gICAqLwot
ICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlckRlZmF1bHRWYWx1ZShTdHJpbmcg
Ynl0ZXMpIHsKLSAgICByZXR1cm4gQnl0ZUJ1ZmZlci53cmFwKGJ5dGVBcnJheURlZmF1bHRWYWx1
ZShieXRlcykpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBCeXRlQnVmZmVyIGFu
ZCBjb3B5IGFsbCB0aGUgY29udGVudCBvZiB7QGNvZGUgc291cmNlfQotICAgKiBCeXRlQnVmZmVy
IHRvIHRoZSBuZXcgQnl0ZUJ1ZmZlci4gVGhlIG5ldyBCeXRlQnVmZmVyJ3MgbGltaXQgYW5kCi0g
ICAqIGNhcGFjaXR5IHdpbGwgYmUgc291cmNlLmNhcGFjaXR5KCksIGFuZCBpdHMgcG9zaXRpb24g
d2lsbCBiZSAwLgotICAgKiBOb3RlIHRoYXQgdGhlIHN0YXRlIG9mIHtAY29kZSBzb3VyY2V9IEJ5
dGVCdWZmZXIgd29uJ3QgYmUgY2hhbmdlZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1
ZmZlciBjb3B5Qnl0ZUJ1ZmZlcihCeXRlQnVmZmVyIHNvdXJjZSkgewotICAgIC8vIE1ha2UgYSBk
dXBsaWNhdGUgb2YgdGhlIHNvdXJjZSBCeXRlQnVmZmVyIGFuZCByZWFkIGRhdGEgZnJvbSB0aGUK
LSAgICAvLyBkdXBsaWNhdGUuIFRoaXMgaXMgdG8gYXZvaWQgYWZmZWN0aW5nIHRoZSBzb3VyY2Ug
Qnl0ZUJ1ZmZlcidzIHN0YXRlLgotICAgIEJ5dGVCdWZmZXIgdGVtcCA9IHNvdXJjZS5kdXBsaWNh
dGUoKTsKLSAgICAvLyBXZSB3YW50IHRvIGNvcHkgYWxsIHRoZSBkYXRhIGluIHRoZSBzb3VyY2Ug
Qnl0ZUJ1ZmZlciwgbm90IGp1c3QgdGhlCi0gICAgLy8gcmVtYWluaW5nIGJ5dGVzLgotICAgIHRl
bXAuY2xlYXIoKTsKLSAgICBCeXRlQnVmZmVyIHJlc3VsdCA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUo
dGVtcC5jYXBhY2l0eSgpKTsKLSAgICByZXN1bHQucHV0KHRlbXApOwotICAgIHJlc3VsdC5jbGVh
cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIGNhbGxl
ZCBieSBnZW5lcmF0ZWQgY29kZSB0byBkZXRlcm1pbmUgaWYgYSBieXRlIGFycmF5IGlzIGEgdmFs
aWQKLSAgICogVVRGLTggZW5jb2RlZCBzdHJpbmcgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBieXRl
cyBjYW4gYmUgY29udmVydGVkIHRvCi0gICAqIGEgU3RyaW5nIG9iamVjdCBhbmQgdGhlbiBiYWNr
IHRvIGEgYnl0ZSBhcnJheSByb3VuZCB0cmlwcGluZyB0aGUgYnl0ZXMKLSAgICogd2l0aG91dCBs
b3NzLiAgTW9yZSBwcmVjaXNlbHksIHJldHVybnMge0Bjb2RlIHRydWV9IHdoZW5ldmVyOgotICAg
KiA8cHJlPiAgIHtAY29kZQotICAgKiBBcnJheXMuZXF1YWxzKGJ5dGVTdHJpbmcudG9CeXRlQXJy
YXkoKSwKLSAgICogICAgIG5ldyBTdHJpbmcoYnl0ZVN0cmluZy50b0J5dGVBcnJheSgpLCAiVVRG
LTgiKS5nZXRCeXRlcygiVVRGLTgiKSkKLSAgICogfTwvcHJlPgotICAgKgotICAgKiA8cD5UaGlz
IG1ldGhvZCByZWplY3RzICJvdmVybG9uZyIgYnl0ZSBzZXF1ZW5jZXMsIGFzIHdlbGwgYXMKLSAg
ICogMy1ieXRlIHNlcXVlbmNlcyB0aGF0IHdvdWxkIG1hcCB0byBhIHN1cnJvZ2F0ZSBjaGFyYWN0
ZXIsIGluCi0gICAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgcmVzdHJpY3RlZCBkZWZpbml0aW9uIG9m
IFVURi04IGludHJvZHVjZWQgaW4KLSAgICogVW5pY29kZSAzLjEuICBOb3RlIHRoYXQgdGhlIFVU
Ri04IGRlY29kZXIgaW5jbHVkZWQgaW4gT3JhY2xlJ3MKLSAgICogSkRLIGhhcyBiZWVuIG1vZGlm
aWVkIHRvIGFsc28gcmVqZWN0ICJvdmVybG9uZyIgYnl0ZSBzZXF1ZW5jZXMsCi0gICAqIGJ1dCBj
dXJyZW50bHkgKDIwMTEpIHN0aWxsIGFjY2VwdHMgMy1ieXRlIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIK
LSAgICogYnl0ZSBzZXF1ZW5jZXMuCi0gICAqCi0gICAqIDxwPlNlZSB0aGUgVW5pY29kZSBTdGFu
ZGFyZCw8YnI+Ci0gICAqIFRhYmxlIDMtNi4gPGVtPlVURi04IEJpdCBEaXN0cmlidXRpb248L2Vt
Piw8YnI+Ci0gICAqIFRhYmxlIDMtNy4gPGVtPldlbGwgRm9ybWVkIFVURi04IEJ5dGUgU2VxdWVu
Y2VzPC9lbT4uCi0gICAqCi0gICAqIDxwPkFzIG9mIDIwMTEtMDIsIHRoaXMgbWV0aG9kIHNpbXBs
eSByZXR1cm5zIHRoZSByZXN1bHQgb2Yge0BsaW5rCi0gICAqIEJ5dGVTdHJpbmcjaXNWYWxpZFV0
ZjgoKX0uICBDYWxsaW5nIHRoYXQgbWV0aG9kIGRpcmVjdGx5IGlzIHByZWZlcnJlZC4KLSAgICoK
LSAgICogQHBhcmFtIGJ5dGVTdHJpbmcgdGhlIHN0cmluZyB0byBjaGVjawotICAgKiBAcmV0dXJu
IHdoZXRoZXIgdGhlIGJ5dGUgYXJyYXkgaXMgcm91bmQgdHJpcHBhYmxlCi0gICAqLwotICBwdWJs
aWMgc3RhdGljIGJvb2xlYW4gaXNWYWxpZFV0ZjgoQnl0ZVN0cmluZyBieXRlU3RyaW5nKSB7Ci0g
ICAgcmV0dXJuIGJ5dGVTdHJpbmcuaXNWYWxpZFV0ZjgoKTsKLSAgfQotCi0gIC8qKgotICAgKiBM
aWtlIHtAbGluayAjaXNWYWxpZFV0ZjgoQnl0ZVN0cmluZyl9IGJ1dCBmb3IgYnl0ZSBhcnJheXMu
Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWYWxpZFV0ZjgoYnl0ZVtdIGJ5dGVB
cnJheSkgewotICAgIHJldHVybiBVdGY4LmlzVmFsaWRVdGY4KGJ5dGVBcnJheSk7Ci0gIH0KLQot
ICAvKioKLSAgICogSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIFVURi04IGJ5dGVzIG9mIGEgc3Ry
aW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBieXRlW10gdG9CeXRlQXJyYXkoU3RyaW5nIHZh
bHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlLmdldEJ5dGVzKFVURl84KTsKLSAgfQotCi0gIC8qKgot
ICAgKiBIZWxwZXIgbWV0aG9kIHRvIGNvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nIHVz
aW5nIFVURi04IGVuY29kaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9TdHJp
bmdVdGY4KGJ5dGVbXSBieXRlcykgewotICAgIHJldHVybiBuZXcgU3RyaW5nKGJ5dGVzLCBVVEZf
OCk7Ci0gIH0KLQotICAvKioKLSAgICogSW50ZXJmYWNlIGZvciBhbiBlbnVtIHZhbHVlIG9yIHZh
bHVlIGRlc2NyaXB0b3IsIHRvIGJlIHVzZWQgaW4gRmllbGRTZXQuCi0gICAqIFRoZSBsaXRlIGxp
YnJhcnkgc3RvcmVzIGVudW0gdmFsdWVzIGRpcmVjdGx5IGluIEZpZWxkU2V0cyBidXQgdGhlIGZ1
bGwKLSAgICogbGlicmFyeSBzdG9yZXMgRW51bVZhbHVlRGVzY3JpcHRvcnMgaW4gb3JkZXIgdG8g
YmV0dGVyIHN1cHBvcnQgcmVmbGVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgRW51
bUxpdGUgewotICAgIGludCBnZXROdW1iZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbnRlcmZh
Y2UgZm9yIGFuIG9iamVjdCB3aGljaCBtYXBzIGludGVnZXJzIHRvIHtAbGluayBFbnVtTGl0ZX1z
LgotICAgKiB7QGxpbmsgRGVzY3JpcHRvcnMuRW51bURlc2NyaXB0b3J9IGltcGxlbWVudHMgdGhp
cyBpbnRlcmZhY2UgYnkgbWFwcGluZwotICAgKiBudW1iZXJzIHRvIHtAbGluayBEZXNjcmlwdG9y
cy5FbnVtVmFsdWVEZXNjcmlwdG9yfXMuICBBZGRpdGlvbmFsbHksCi0gICAqIGV2ZXJ5IGdlbmVy
YXRlZCBlbnVtIHR5cGUgaGFzIGEgc3RhdGljIG1ldGhvZCBpbnRlcm5hbEdldFZhbHVlTWFwKCkg
d2hpY2gKLSAgICogcmV0dXJucyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHR5cGUgdGhhdCBt
YXBzIG51bWJlcnMgdG8gZW51bSB2YWx1ZXMuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIEVu
dW1MaXRlTWFwPFQgZXh0ZW5kcyBFbnVtTGl0ZT4gewotICAgIFQgZmluZFZhbHVlQnlOdW1iZXIo
aW50IG51bWJlcik7Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIG1ldGhvZCBmb3IgaW1wbGVt
ZW50aW5nIHtAbGluayBNZXNzYWdlI2hhc2hDb2RlKCl9IGZvciBsb25ncy4KLSAgICogQHNlZSBM
b25nI2hhc2hDb2RlKCkKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGhhc2hMb25nKGxvbmcg
bikgewotICAgIHJldHVybiAoaW50KSAobiBeIChuID4+PiAzMikpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEhlbHBlciBtZXRob2QgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgTWVzc2FnZSNoYXNoQ29k
ZSgpfSBmb3IKLSAgICogYm9vbGVhbnMuCi0gICAqIEBzZWUgQm9vbGVhbiNoYXNoQ29kZSgpCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIGludCBoYXNoQm9vbGVhbihib29sZWFuIGIpIHsKLSAgICBy
ZXR1cm4gYiA/IDEyMzEgOiAxMjM3OwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBtZXRob2Qg
Zm9yIGltcGxlbWVudGluZyB7QGxpbmsgTWVzc2FnZSNoYXNoQ29kZSgpfSBmb3IgZW51bXMuCi0g
ICAqIDxwPgotICAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHtAbGluayBqYXZhLmxhbmcuRW51
bSNoYXNoQ29kZSgpfSBpcyBmaW5hbCwgYnV0IHdlCi0gICAqIG5lZWQgdG8gdXNlIHRoZSBmaWVs
ZCBudW1iZXIgYXMgdGhlIGhhc2ggY29kZSB0byBlbnN1cmUgY29tcGF0aWJpbGl0eQotICAgKiBi
ZXR3ZWVuIHN0YXRpY2FsbHkgYW5kIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBlbnVtIG9iamVjdHMu
Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBoYXNoRW51bShFbnVtTGl0ZSBlKSB7Ci0gICAg
cmV0dXJuIGUuZ2V0TnVtYmVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIG1ldGhvZCBm
b3IgaW1wbGVtZW50aW5nIHtAbGluayBNZXNzYWdlI2hhc2hDb2RlKCl9IGZvcgotICAgKiBlbnVt
IGxpc3RzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgaGFzaEVudW1MaXN0KExpc3Q8PyBl
eHRlbmRzIEVudW1MaXRlPiBsaXN0KSB7Ci0gICAgaW50IGhhc2ggPSAxOwotICAgIGZvciAoRW51
bUxpdGUgZSA6IGxpc3QpIHsKLSAgICAgIGhhc2ggPSAzMSAqIGhhc2ggKyBoYXNoRW51bShlKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGhhc2g7Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIG1ldGhv
ZCBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBNZXNzYWdlI2VxdWFscyhPYmplY3QpfSBmb3IgYnl0
ZXMgZmllbGQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKExpc3Q8Ynl0
ZVtdPiBhLCBMaXN0PGJ5dGVbXT4gYikgewotICAgIGlmIChhLnNpemUoKSAhPSBiLnNpemUoKSkg
cmV0dXJuIGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYS5zaXplKCk7ICsraSkgewot
ICAgICAgaWYgKCFBcnJheXMuZXF1YWxzKGEuZ2V0KGkpLCBiLmdldChpKSkpIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIE1lc3NhZ2Uj
aGFzaENvZGUoKX0gZm9yIGJ5dGVzIGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQg
aGFzaENvZGUoTGlzdDxieXRlW10+IGxpc3QpIHsKLSAgICBpbnQgaGFzaCA9IDE7Ci0gICAgZm9y
IChieXRlW10gYnl0ZXMgOiBsaXN0KSB7Ci0gICAgICBoYXNoID0gMzEgKiBoYXNoICsgaGFzaENv
ZGUoYnl0ZXMpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaDsKLSAgfQotCi0gIC8qKgotICAgKiBI
ZWxwZXIgbWV0aG9kIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIE1lc3NhZ2UjaGFzaENvZGUoKX0g
Zm9yIGJ5dGVzIGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgaGFzaENvZGUoYnl0
ZVtdIGJ5dGVzKSB7Ci0gICAgLy8gVGhlIGhhc2ggY29kZSBmb3IgYSBieXRlIGFycmF5IHNob3Vs
ZCBiZSB0aGUgc2FtZSBhcyB0aGUgaGFzaCBjb2RlIGZvciBhCi0gICAgLy8gQnl0ZVN0cmluZyB3
aXRoIHRoZSBzYW1lIGNvbnRlbnQuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGdlbmVyYXRl
ZAotICAgIC8vIGhhc2hDb2RlKCkgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFz
IHRoZSBwdXJlIHJlZmxlY3Rpb24KLSAgICAvLyBiYXNlZCBoYXNoQ29kZSgpIG1ldGhvZC4KLSAg
ICByZXR1cm4gSW50ZXJuYWwuaGFzaENvZGUoYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCk7Ci0gIH0K
LSAgCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIExp
dGVyYWxCeXRlU3RyaW5nI2hhc2hDb2RlKCl9LgotICAgKi8KLSAgc3RhdGljIGludCBoYXNoQ29k
ZShieXRlW10gYnl0ZXMsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLSAgICAvLyBUaGUgaGFz
aCBjb2RlIGZvciBhIGJ5dGUgYXJyYXkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBoYXNoIGNv
ZGUgZm9yIGEKLSAgICAvLyBCeXRlU3RyaW5nIHdpdGggdGhlIHNhbWUgY29udGVudC4gVGhpcyBp
cyB0byBlbnN1cmUgdGhhdCB0aGUgZ2VuZXJhdGVkCi0gICAgLy8gaGFzaENvZGUoKSBtZXRob2Qg
d2lsbCByZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHB1cmUgcmVmbGVjdGlvbgotICAgIC8v
IGJhc2VkIGhhc2hDb2RlKCkgbWV0aG9kLgotICAgIGludCBoID0gSW50ZXJuYWwucGFydGlhbEhh
c2gobGVuZ3RoLCBieXRlcywgb2Zmc2V0LCBsZW5ndGgpOwotICAgIHJldHVybiBoID09IDAgPyAx
IDogaDsKLSAgfQotCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjb250aW51b3VzbHkg
aGFzaGluZyBieXRlcy4KLSAgICovCi0gIHN0YXRpYyBpbnQgcGFydGlhbEhhc2goaW50IGgsIGJ5
dGVbXSBieXRlcywgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotICAgIGZvciAoaW50IGkgPSBv
ZmZzZXQ7IGkgPCBvZmZzZXQgKyBsZW5ndGg7IGkrKykgewotICAgICAgaCA9IGggKiAzMSArIGJ5
dGVzW2ldOwotICAgIH0KLSAgICByZXR1cm4gaDsKLSAgfQotICAKLSAgLyoqCi0gICAqIEhlbHBl
ciBtZXRob2QgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgTWVzc2FnZSNlcXVhbHMoT2JqZWN0KX0g
Zm9yIGJ5dGVzCi0gICAqIGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGVx
dWFsc0J5dGVCdWZmZXIoQnl0ZUJ1ZmZlciBhLCBCeXRlQnVmZmVyIGIpIHsKLSAgICBpZiAoYS5j
YXBhY2l0eSgpICE9IGIuY2FwYWNpdHkoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAvLyBCeXRlQnVmZmVyLmVxdWFscygpIHdpbGwgb25seSBjb21wYXJlIHRoZSByZW1haW5p
bmcgYnl0ZXMsIGJ1dCB3ZSB3YW50IHRvCi0gICAgLy8gY29tcGFyZSBhbGwgdGhlIGNvbnRlbnQu
Ci0gICAgcmV0dXJuIGEuZHVwbGljYXRlKCkuY2xlYXIoKS5lcXVhbHMoYi5kdXBsaWNhdGUoKS5j
bGVhcigpKTsKLSAgfQotCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBpbXBsZW1lbnRp
bmcge0BsaW5rIE1lc3NhZ2UjZXF1YWxzKE9iamVjdCl9IGZvciBieXRlcwotICAgKiBmaWVsZC4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlcXVhbHNCeXRlQnVmZmVyKAotICAgICAg
TGlzdDxCeXRlQnVmZmVyPiBhLCBMaXN0PEJ5dGVCdWZmZXI+IGIpIHsKLSAgICBpZiAoYS5zaXpl
KCkgIT0gYi5zaXplKCkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhLnNpemUoKTsgKytpKSB7Ci0gICAgICBpZiAoIWVxdWFsc0J5dGVCdWZm
ZXIoYS5nZXQoaSksIGIuZ2V0KGkpKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBtZXRo
b2QgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgTWVzc2FnZSNoYXNoQ29kZSgpfSBmb3IgYnl0ZXMK
LSAgICogZmllbGQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBoYXNoQ29kZUJ5dGVCdWZm
ZXIoTGlzdDxCeXRlQnVmZmVyPiBsaXN0KSB7Ci0gICAgaW50IGhhc2ggPSAxOwotICAgIGZvciAo
Qnl0ZUJ1ZmZlciBieXRlcyA6IGxpc3QpIHsKLSAgICAgIGhhc2ggPSAzMSAqIGhhc2ggKyBoYXNo
Q29kZUJ5dGVCdWZmZXIoYnl0ZXMpOwotICAgIH0KLSAgICByZXR1cm4gaGFzaDsKLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0JVRkZFUl9TSVpFID0gNDA5NjsKLQot
ICAvKioKLSAgICogSGVscGVyIG1ldGhvZCBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBNZXNzYWdl
I2hhc2hDb2RlKCl9IGZvciBieXRlcwotICAgKiBmaWVsZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgaW50IGhhc2hDb2RlQnl0ZUJ1ZmZlcihCeXRlQnVmZmVyIGJ5dGVzKSB7Ci0gICAgaWYgKGJ5
dGVzLmhhc0FycmF5KCkpIHsKLSAgICAgIC8vIEZhc3QgcGF0aC4KLSAgICAgIGludCBoID0gcGFy
dGlhbEhhc2goYnl0ZXMuY2FwYWNpdHkoKSwgYnl0ZXMuYXJyYXkoKSwgYnl0ZXMuYXJyYXlPZmZz
ZXQoKSwgYnl0ZXMuY2FwYWNpdHkoKSk7Ci0gICAgICByZXR1cm4gaCA9PSAwID8gMSA6IGg7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIC8vIFJlYWQgdGhlIGRhdGEgaW50byBhIHRlbXBvcmFyeSBieXRl
IGFycmF5IGJlZm9yZSBjYWxjdWxhdGluZyB0aGUKLSAgICAgIC8vIGhhc2ggdmFsdWUuCi0gICAg
ICBmaW5hbCBpbnQgYnVmZmVyU2l6ZSA9IGJ5dGVzLmNhcGFjaXR5KCkgPiBERUZBVUxUX0JVRkZF
Ul9TSVpFCi0gICAgICAgICAgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogYnl0ZXMuY2FwYWNpdHko
KTsKLSAgICAgIGZpbmFsIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVtidWZmZXJTaXplXTsKLSAg
ICAgIGZpbmFsIEJ5dGVCdWZmZXIgZHVwbGljYXRlZCA9IGJ5dGVzLmR1cGxpY2F0ZSgpOwotICAg
ICAgZHVwbGljYXRlZC5jbGVhcigpOwotICAgICAgaW50IGggPSBieXRlcy5jYXBhY2l0eSgpOwot
ICAgICAgd2hpbGUgKGR1cGxpY2F0ZWQucmVtYWluaW5nKCkgPiAwKSB7Ci0gICAgICAgIGZpbmFs
IGludCBsZW5ndGggPSBkdXBsaWNhdGVkLnJlbWFpbmluZygpIDw9IGJ1ZmZlclNpemUgPwotICAg
ICAgICAgICAgZHVwbGljYXRlZC5yZW1haW5pbmcoKSA6IGJ1ZmZlclNpemU7Ci0gICAgICAgIGR1
cGxpY2F0ZWQuZ2V0KGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLSAgICAgICAgaCA9IHBhcnRpYWxIYXNo
KGgsIGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBoID09IDAgPyAx
IDogaDsKLSAgICB9Ci0gIH0KLQotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAg
cHVibGljIHN0YXRpYyA8VCBleHRlbmRzIE1lc3NhZ2VMaXRlPiBUIGdldERlZmF1bHRJbnN0YW5j
ZShDbGFzczxUPiBjbGF6eikgewotICAgIHRyeSB7Ci0gICAgICBNZXRob2QgbWV0aG9kID0gY2xh
enouZ2V0TWV0aG9kKCJnZXREZWZhdWx0SW5zdGFuY2UiKTsKLSAgICAgIHJldHVybiAoVCkgbWV0
aG9kLmludm9rZShtZXRob2QpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIGdldCBkZWZh
dWx0IGluc3RhbmNlIGZvciAiICsgY2xhenosIGUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAg
KiBBbiBlbXB0eSBieXRlIGFycmF5IGNvbnN0YW50IHVzZWQgaW4gZ2VuZXJhdGVkIGNvZGUuCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGJ5dGVbXSBFTVBUWV9CWVRFX0FSUkFZID0gbmV3
IGJ5dGVbMF07Ci0KLSAgLyoqCi0gICAqIEFuIGVtcHR5IGJ5dGUgYXJyYXkgY29uc3RhbnQgdXNl
ZCBpbiBnZW5lcmF0ZWQgY29kZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgQnl0ZUJ1
ZmZlciBFTVBUWV9CWVRFX0JVRkZFUiA9Ci0gICAgICBCeXRlQnVmZmVyLndyYXAoRU1QVFlfQllU
RV9BUlJBWSk7Ci0KLSAgLyoqIEFuIGVtcHR5IGNvZGVkIGlucHV0IHN0cmVhbSBjb25zdGFudCB1
c2VkIGluIGdlbmVyYXRlZCBjb2RlLiAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIENvZGVkSW5w
dXRTdHJlYW0gRU1QVFlfQ09ERURfSU5QVVRfU1RSRUFNID0KLSAgICAgIENvZGVkSW5wdXRTdHJl
YW0ubmV3SW5zdGFuY2UoRU1QVFlfQllURV9BUlJBWSk7Ci0KLQotICAvKioKLSAgICogUHJvdmlk
ZXMgYW4gaW1tdXRhYmxlIHZpZXcgb2Yge0Bjb2RlIExpc3Q8VD59IGFyb3VuZCBhIHtAY29kZSBM
aXN0PEY+fS4KLSAgICoKLSAgICogUHJvdG9idWYgaW50ZXJuYWwuIFVzZWQgaW4gcHJvdG9idWYg
Z2VuZXJhdGVkIGNvZGUgb25seS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgTGlzdEFk
YXB0ZXI8RiwgVD4gZXh0ZW5kcyBBYnN0cmFjdExpc3Q8VD4gewotICAgIC8qKgotICAgICAqIENv
bnZlcnQgaW5kaXZpZHVhbCBlbGVtZW50cyBvZiB0aGUgTGlzdCBmcm9tIEYgdG8gVC4KLSAgICAg
Ki8KLSAgICBwdWJsaWMgaW50ZXJmYWNlIENvbnZlcnRlcjxGLCBUPiB7Ci0gICAgICBUIGNvbnZl
cnQoRiBmcm9tKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8Rj4gZnJvbUxpc3Q7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBDb252ZXJ0ZXI8RiwgVD4gY29udmVydGVyOwotCi0gICAgcHVi
bGljIExpc3RBZGFwdGVyKExpc3Q8Rj4gZnJvbUxpc3QsIENvbnZlcnRlcjxGLCBUPiBjb252ZXJ0
ZXIpIHsKLSAgICAgIHRoaXMuZnJvbUxpc3QgPSBmcm9tTGlzdDsKLSAgICAgIHRoaXMuY29udmVy
dGVyID0gY29udmVydGVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUIGdl
dChpbnQgaW5kZXgpIHsKLSAgICAgIHJldHVybiBjb252ZXJ0ZXIuY29udmVydChmcm9tTGlzdC5n
ZXQoaW5kZXgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IHNpemUo
KSB7Ci0gICAgICByZXR1cm4gZnJvbUxpc3Quc2l6ZSgpOwotICAgIH0KLSAgfQotCi0gIC8qKgot
ICAgKiBXcmFwIGFyb3VuZCBhIHtAY29kZSBNYXA8SywgUmVhbFZhbHVlPn0gYW5kIHByb3ZpZGUg
YSB7QGNvZGUgTWFwPEssIFY+fQotICAgKiBpbnRlcmZhY2UuCi0gICAqLwotICBwdWJsaWMgc3Rh
dGljIGNsYXNzIE1hcEFkYXB0ZXI8SywgViwgUmVhbFZhbHVlPiBleHRlbmRzIEFic3RyYWN0TWFw
PEssIFY+IHsKLSAgICAvKioKLSAgICAgKiBBbiBpbnRlcmZhY2UgdXNlZCB0byBjb252ZXJ0IGJl
dHdlZW4gdHdvIHR5cGVzLgotICAgICAqLwotICAgIHB1YmxpYyBpbnRlcmZhY2UgQ29udmVydGVy
PEEsIEI+IHsKLSAgICAgIEIgZG9Gb3J3YXJkKEEgb2JqZWN0KTsKLSAgICAgIEEgZG9CYWNrd2Fy
ZChCIG9iamVjdCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyA8VCBleHRlbmRzIEVudW1M
aXRlPiBDb252ZXJ0ZXI8SW50ZWdlciwgVD4gbmV3RW51bUNvbnZlcnRlcigKLSAgICAgICAgZmlu
YWwgRW51bUxpdGVNYXA8VD4gZW51bU1hcCwgZmluYWwgVCB1bnJlY29nbml6ZWRWYWx1ZSkgewot
ICAgICAgcmV0dXJuIG5ldyBDb252ZXJ0ZXI8SW50ZWdlciwgVD4oKSB7Ci0gICAgICAgIEBPdmVy
cmlkZQotICAgICAgICBwdWJsaWMgVCBkb0ZvcndhcmQoSW50ZWdlciB2YWx1ZSkgewotICAgICAg
ICAgIFQgcmVzdWx0ID0gZW51bU1hcC5maW5kVmFsdWVCeU51bWJlcih2YWx1ZSk7Ci0gICAgICAg
ICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gdW5yZWNvZ25pemVkVmFsdWUgOiByZXN1bHQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEludGVnZXIgZG9C
YWNrd2FyZChUIHZhbHVlKSB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLmdldE51bWJlcigpOwot
ICAgICAgICB9Ci0gICAgICB9OwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgTWFwPEssIFJl
YWxWYWx1ZT4gcmVhbE1hcDsKLSAgICBwcml2YXRlIGZpbmFsIENvbnZlcnRlcjxSZWFsVmFsdWUs
IFY+IHZhbHVlQ29udmVydGVyOwotCi0gICAgcHVibGljIE1hcEFkYXB0ZXIoTWFwPEssIFJlYWxW
YWx1ZT4gcmVhbE1hcCwKLSAgICAgICAgQ29udmVydGVyPFJlYWxWYWx1ZSwgVj4gdmFsdWVDb252
ZXJ0ZXIpIHsKLSAgICAgIHRoaXMucmVhbE1hcCA9IHJlYWxNYXA7Ci0gICAgICB0aGlzLnZhbHVl
Q29udmVydGVyID0gdmFsdWVDb252ZXJ0ZXI7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2Fybmlu
Z3MoInVuY2hlY2tlZCIpCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFYgZ2V0KE9iamVjdCBr
ZXkpIHsKLSAgICAgIFJlYWxWYWx1ZSByZXN1bHQgPSByZWFsTWFwLmdldChrZXkpOwotICAgICAg
aWYgKHJlc3VsdCA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAg
ICAgcmV0dXJuIHZhbHVlQ29udmVydGVyLmRvRm9yd2FyZChyZXN1bHQpOwotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBWIHB1dChLIGtleSwgViB2YWx1ZSkgewotICAgICAgUmVh
bFZhbHVlIG9sZFZhbHVlID0gcmVhbE1hcC5wdXQoa2V5LCB2YWx1ZUNvbnZlcnRlci5kb0JhY2t3
YXJkKHZhbHVlKSk7Ci0gICAgICBpZiAob2xkVmFsdWUgPT0gbnVsbCkgewotICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIHJldHVybiB2YWx1ZUNvbnZlcnRlci5kb0ZvcndhcmQo
b2xkVmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTZXQ8amF2YS51
dGlsLk1hcC5FbnRyeTxLLCBWPj4gZW50cnlTZXQoKSB7Ci0gICAgICByZXR1cm4gbmV3IFNldEFk
YXB0ZXIocmVhbE1hcC5lbnRyeVNldCgpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIFNl
dEFkYXB0ZXIgZXh0ZW5kcyBBYnN0cmFjdFNldDxNYXAuRW50cnk8SywgVj4+IHsKLSAgICAgIHBy
aXZhdGUgZmluYWwgU2V0PE1hcC5FbnRyeTxLLCBSZWFsVmFsdWU+PiByZWFsU2V0OwotICAgICAg
cHVibGljIFNldEFkYXB0ZXIoU2V0PE1hcC5FbnRyeTxLLCBSZWFsVmFsdWU+PiByZWFsU2V0KSB7
Ci0gICAgICAgIHRoaXMucmVhbFNldCA9IHJlYWxTZXQ7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIEl0ZXJhdG9yPGphdmEudXRpbC5NYXAuRW50cnk8SywgVj4+IGl0
ZXJhdG9yKCkgewotICAgICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yQWRhcHRlcihyZWFsU2V0Lml0
ZXJhdG9yKCkpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBpbnQg
c2l6ZSgpIHsKLSAgICAgICAgcmV0dXJuIHJlYWxTZXQuc2l6ZSgpOwotICAgICAgfQotICAgIH0K
LQotICAgIHByaXZhdGUgY2xhc3MgSXRlcmF0b3JBZGFwdGVyIGltcGxlbWVudHMgSXRlcmF0b3I8
TWFwLkVudHJ5PEssIFY+PiB7Ci0gICAgICBwcml2YXRlIGZpbmFsIEl0ZXJhdG9yPE1hcC5FbnRy
eTxLLCBSZWFsVmFsdWU+PiByZWFsSXRlcmF0b3I7Ci0KLSAgICAgIHB1YmxpYyBJdGVyYXRvckFk
YXB0ZXIoCi0gICAgICAgICAgSXRlcmF0b3I8TWFwLkVudHJ5PEssIFJlYWxWYWx1ZT4+IHJlYWxJ
dGVyYXRvcikgewotICAgICAgICB0aGlzLnJlYWxJdGVyYXRvciA9IHJlYWxJdGVyYXRvcjsKLSAg
ICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkg
ewotICAgICAgICByZXR1cm4gcmVhbEl0ZXJhdG9yLmhhc05leHQoKTsKLSAgICAgIH0KLQotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgamF2YS51dGlsLk1hcC5FbnRyeTxLLCBWPiBuZXh0
KCkgewotICAgICAgICByZXR1cm4gbmV3IEVudHJ5QWRhcHRlcihyZWFsSXRlcmF0b3IubmV4dCgp
KTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCByZW1vdmUo
KSB7Ci0gICAgICAgIHJlYWxJdGVyYXRvci5yZW1vdmUoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBwcml2YXRlIGNsYXNzIEVudHJ5QWRhcHRlciBpbXBsZW1lbnRzIE1hcC5FbnRyeTxLLCBWPiB7
Ci0gICAgICBwcml2YXRlIGZpbmFsIE1hcC5FbnRyeTxLLCBSZWFsVmFsdWU+IHJlYWxFbnRyeTsK
LQotICAgICAgcHVibGljIEVudHJ5QWRhcHRlcihNYXAuRW50cnk8SywgUmVhbFZhbHVlPiByZWFs
RW50cnkpIHsKLSAgICAgICAgdGhpcy5yZWFsRW50cnkgPSByZWFsRW50cnk7Ci0gICAgICB9Ci0K
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIEsgZ2V0S2V5KCkgewotICAgICAgICByZXR1
cm4gcmVhbEVudHJ5LmdldEtleSgpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyBWIGdldFZhbHVlKCkgewotICAgICAgICByZXR1cm4gdmFsdWVDb252ZXJ0ZXIuZG9G
b3J3YXJkKHJlYWxFbnRyeS5nZXRWYWx1ZSgpKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgViBzZXRWYWx1ZShWIHZhbHVlKSB7Ci0gICAgICAgIFJlYWxWYWx1ZSBv
bGRWYWx1ZSA9IHJlYWxFbnRyeS5zZXRWYWx1ZSgKLSAgICAgICAgICAgIHZhbHVlQ29udmVydGVy
LmRvQmFja3dhcmQodmFsdWUpKTsKLSAgICAgICAgaWYgKG9sZFZhbHVlID09IG51bGwpIHsKLSAg
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWVDb252
ZXJ0ZXIuZG9Gb3J3YXJkKG9sZFZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioK
LSAgICogRXh0ZW5kcyB7QGxpbmsgTGlzdH0gdG8gYWRkIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2Ug
dGhlIGxpc3QgaW1tdXRhYmxlIGFuZCBpbnNwZWN0IGlmIGl0IGlzCi0gICAqIG1vZGlmaWFibGUu
Ci0gICAqIDxwPgotICAgKiBBbGwgaW1wbGVtZW50YXRpb25zIG11c3Qgc3VwcG9ydCBlZmZpY2ll
bnQgcmFuZG9tIGFjY2Vzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIFByb3Rv
YnVmTGlzdDxFPiBleHRlbmRzIExpc3Q8RT4sIFJhbmRvbUFjY2VzcyB7Ci0KLSAgICAvKioKLSAg
ICAgKiBNYWtlcyB0aGlzIGxpc3QgaW1tdXRhYmxlLiBBbGwgc3Vic2VxdWVudCBtb2RpZmljYXRp
b25zIHdpbGwgdGhyb3cgYW4KLSAgICAgKiB7QGxpbmsgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNl
cHRpb259LgotICAgICAqLwotICAgIHZvaWQgbWFrZUltbXV0YWJsZSgpOwotCi0gICAgLyoqCi0g
ICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgbGlzdCBjYW4gYmUgbW9kaWZpZWQgdmlhIHRoZSBw
dWJsaWNseSBhY2Nlc3NpYmxlIHtAbGluayBMaXN0fSBtZXRob2RzLgotICAgICAqLwotICAgIGJv
b2xlYW4gaXNNb2RpZmlhYmxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbXV0YWJs
ZSBjbG9uZSBvZiB0aGlzIGxpc3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5LgotICAgICAq
LwotICAgIFByb3RvYnVmTGlzdDxFPiBtdXRhYmxlQ29weVdpdGhDYXBhY2l0eShpbnQgY2FwYWNp
dHkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEEge0BsaW5rIGphdmEudXRpbC5MaXN0fSBpbXBsZW1l
bnRhdGlvbiB0aGF0IGF2b2lkcyBib3hpbmcgdGhlIGVsZW1lbnRzIGludG8gSW50ZWdlcnMgaWYK
LSAgICogcG9zc2libGUuIERvZXMgbm90IHN1cHBvcnQgbnVsbCBlbGVtZW50cy4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEludExpc3QgZXh0ZW5kcyBQcm90b2J1Zkxpc3Q8SW50
ZWdlcj4gewotCi0gICAgLyoqCi0gICAgICogTGlrZSB7QGxpbmsgI2dldChpbnQpfSBidXQgbW9y
ZSBlZmZpY2llbnQgaW4gdGhhdCBpdCBkb2Vzbid0IGJveCB0aGUgcmV0dXJuZWQgdmFsdWUuCi0g
ICAgICovCi0gICAgaW50IGdldEludChpbnQgaW5kZXgpOwotCi0gICAgLyoqCi0gICAgICogTGlr
ZSB7QGxpbmsgI2FkZChJbnRlZ2VyKX0gYnV0IG1vcmUgZWZmaWNpZW50IGluIHRoYXQgaXQgZG9l
c24ndCBib3ggdGhlIGVsZW1lbnQuCi0gICAgICovCi0gICAgdm9pZCBhZGRJbnQoaW50IGVsZW1l
bnQpOwotCi0gICAgLyoqCi0gICAgICogTGlrZSB7QGxpbmsgI3NldChpbnQsIEludGVnZXIpfSBi
dXQgbW9yZSBlZmZpY2llbnQgaW4gdGhhdCBpdCBkb2Vzbid0IGJveCB0aGUgZWxlbWVudC4KLSAg
ICAgKi8KLSAgICBpbnQgc2V0SW50KGludCBpbmRleCwgaW50IGVsZW1lbnQpOwotCi0gICAgLyoq
Ci0gICAgICogUmV0dXJucyBhIG11dGFibGUgY2xvbmUgb2YgdGhpcyBsaXN0IHdpdGggdGhlIHNw
ZWNpZmllZCBjYXBhY2l0eS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBJbnRMaXN0IG11
dGFibGVDb3B5V2l0aENhcGFjaXR5KGludCBjYXBhY2l0eSk7Ci0gIH0KLQotICAvKioKLSAgICog
QSB7QGxpbmsgamF2YS51dGlsLkxpc3R9IGltcGxlbWVudGF0aW9uIHRoYXQgYXZvaWRzIGJveGlu
ZyB0aGUgZWxlbWVudHMgaW50byBCb29sZWFucyBpZgotICAgKiBwb3NzaWJsZS4gRG9lcyBub3Qg
c3VwcG9ydCBudWxsIGVsZW1lbnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2Ug
Qm9vbGVhbkxpc3QgZXh0ZW5kcyBQcm90b2J1Zkxpc3Q8Qm9vbGVhbj4gewotCi0gICAgLyoqCi0g
ICAgICogTGlrZSB7QGxpbmsgI2dldChpbnQpfSBidXQgbW9yZSBlZmZpY2llbnQgaW4gdGhhdCBp
dCBkb2Vzbid0IGJveCB0aGUgcmV0dXJuZWQgdmFsdWUuCi0gICAgICovCi0gICAgYm9vbGVhbiBn
ZXRCb29sZWFuKGludCBpbmRleCk7Ci0KLSAgICAvKioKLSAgICAgKiBMaWtlIHtAbGluayAjYWRk
KEJvb2xlYW4pfSBidXQgbW9yZSBlZmZpY2llbnQgaW4gdGhhdCBpdCBkb2Vzbid0IGJveCB0aGUg
ZWxlbWVudC4KLSAgICAgKi8KLSAgICB2b2lkIGFkZEJvb2xlYW4oYm9vbGVhbiBlbGVtZW50KTsK
LQotICAgIC8qKgotICAgICAqIExpa2Uge0BsaW5rICNzZXQoaW50LCBCb29sZWFuKX0gYnV0IG1v
cmUgZWZmaWNpZW50IGluIHRoYXQgaXQgZG9lc24ndCBib3ggdGhlIGVsZW1lbnQuCi0gICAgICov
Ci0gICAgYm9vbGVhbiBzZXRCb29sZWFuKGludCBpbmRleCwgYm9vbGVhbiBlbGVtZW50KTsKLQot
ICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtdXRhYmxlIGNsb25lIG9mIHRoaXMgbGlzdCB3aXRo
IHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgQm9v
bGVhbkxpc3QgbXV0YWJsZUNvcHlXaXRoQ2FwYWNpdHkoaW50IGNhcGFjaXR5KTsKLSAgfQotCi0g
IC8qKgotICAgKiBBIHtAbGluayBqYXZhLnV0aWwuTGlzdH0gaW1wbGVtZW50YXRpb24gdGhhdCBh
dm9pZHMgYm94aW5nIHRoZSBlbGVtZW50cyBpbnRvIExvbmdzIGlmCi0gICAqIHBvc3NpYmxlLiBE
b2VzIG5vdCBzdXBwb3J0IG51bGwgZWxlbWVudHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGlu
dGVyZmFjZSBMb25nTGlzdCBleHRlbmRzIFByb3RvYnVmTGlzdDxMb25nPiB7Ci0KLSAgICAvKioK
LSAgICAgKiBMaWtlIHtAbGluayAjZ2V0KGludCl9IGJ1dCBtb3JlIGVmZmljaWVudCBpbiB0aGF0
IGl0IGRvZXNuJ3QgYm94IHRoZSByZXR1cm5lZCB2YWx1ZS4KLSAgICAgKi8KLSAgICBsb25nIGdl
dExvbmcoaW50IGluZGV4KTsKLQotICAgIC8qKgotICAgICAqIExpa2Uge0BsaW5rICNhZGQoTG9u
Zyl9IGJ1dCBtb3JlIGVmZmljaWVudCBpbiB0aGF0IGl0IGRvZXNuJ3QgYm94IHRoZSBlbGVtZW50
LgotICAgICAqLwotICAgIHZvaWQgYWRkTG9uZyhsb25nIGVsZW1lbnQpOwotCi0gICAgLyoqCi0g
ICAgICogTGlrZSB7QGxpbmsgI3NldChpbnQsIExvbmcpfSBidXQgbW9yZSBlZmZpY2llbnQgaW4g
dGhhdCBpdCBkb2Vzbid0IGJveCB0aGUgZWxlbWVudC4KLSAgICAgKi8KLSAgICBsb25nIHNldExv
bmcoaW50IGluZGV4LCBsb25nIGVsZW1lbnQpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBh
IG11dGFibGUgY2xvbmUgb2YgdGhpcyBsaXN0IHdpdGggdGhlIHNwZWNpZmllZCBjYXBhY2l0eS4K
LSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBMb25nTGlzdCBtdXRhYmxlQ29weVdpdGhDYXBh
Y2l0eShpbnQgY2FwYWNpdHkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEEge0BsaW5rIGphdmEudXRp
bC5MaXN0fSBpbXBsZW1lbnRhdGlvbiB0aGF0IGF2b2lkcyBib3hpbmcgdGhlIGVsZW1lbnRzIGlu
dG8gRG91YmxlcyBpZgotICAgKiBwb3NzaWJsZS4gRG9lcyBub3Qgc3VwcG9ydCBudWxsIGVsZW1l
bnRzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgRG91YmxlTGlzdCBleHRlbmRz
IFByb3RvYnVmTGlzdDxEb3VibGU+IHsKLQotICAgIC8qKgotICAgICAqIExpa2Uge0BsaW5rICNn
ZXQoaW50KX0gYnV0IG1vcmUgZWZmaWNpZW50IGluIHRoYXQgaXQgZG9lc24ndCBib3ggdGhlIHJl
dHVybmVkIHZhbHVlLgotICAgICAqLwotICAgIGRvdWJsZSBnZXREb3VibGUoaW50IGluZGV4KTsK
LQotICAgIC8qKgotICAgICAqIExpa2Uge0BsaW5rICNhZGQoRG91YmxlKX0gYnV0IG1vcmUgZWZm
aWNpZW50IGluIHRoYXQgaXQgZG9lc24ndCBib3ggdGhlIGVsZW1lbnQuCi0gICAgICovCi0gICAg
dm9pZCBhZGREb3VibGUoZG91YmxlIGVsZW1lbnQpOwotCi0gICAgLyoqCi0gICAgICogTGlrZSB7
QGxpbmsgI3NldChpbnQsIERvdWJsZSl9IGJ1dCBtb3JlIGVmZmljaWVudCBpbiB0aGF0IGl0IGRv
ZXNuJ3QgYm94IHRoZSBlbGVtZW50LgotICAgICAqLwotICAgIGRvdWJsZSBzZXREb3VibGUoaW50
IGluZGV4LCBkb3VibGUgZWxlbWVudCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbXV0
YWJsZSBjbG9uZSBvZiB0aGlzIGxpc3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5LgotICAg
ICAqLwotICAgIEBPdmVycmlkZQotICAgIERvdWJsZUxpc3QgbXV0YWJsZUNvcHlXaXRoQ2FwYWNp
dHkoaW50IGNhcGFjaXR5KTsKLSAgfQotCi0gIC8qKgotICAgKiBBIHtAbGluayBqYXZhLnV0aWwu
TGlzdH0gaW1wbGVtZW50YXRpb24gdGhhdCBhdm9pZHMgYm94aW5nIHRoZSBlbGVtZW50cyBpbnRv
IEZsb2F0cyBpZgotICAgKiBwb3NzaWJsZS4gRG9lcyBub3Qgc3VwcG9ydCBudWxsIGVsZW1lbnRz
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgRmxvYXRMaXN0IGV4dGVuZHMgUHJv
dG9idWZMaXN0PEZsb2F0PiB7Ci0KLSAgICAvKioKLSAgICAgKiBMaWtlIHtAbGluayAjZ2V0KGlu
dCl9IGJ1dCBtb3JlIGVmZmljaWVudCBpbiB0aGF0IGl0IGRvZXNuJ3QgYm94IHRoZSByZXR1cm5l
ZCB2YWx1ZS4KLSAgICAgKi8KLSAgICBmbG9hdCBnZXRGbG9hdChpbnQgaW5kZXgpOwotCi0gICAg
LyoqCi0gICAgICogTGlrZSB7QGxpbmsgI2FkZChGbG9hdCl9IGJ1dCBtb3JlIGVmZmljaWVudCBp
biB0aGF0IGl0IGRvZXNuJ3QgYm94IHRoZSBlbGVtZW50LgotICAgICAqLwotICAgIHZvaWQgYWRk
RmxvYXQoZmxvYXQgZWxlbWVudCk7Ci0KLSAgICAvKioKLSAgICAgKiBMaWtlIHtAbGluayAjc2V0
KGludCwgRmxvYXQpfSBidXQgbW9yZSBlZmZpY2llbnQgaW4gdGhhdCBpdCBkb2Vzbid0IGJveCB0
aGUgZWxlbWVudC4KLSAgICAgKi8KLSAgICBmbG9hdCBzZXRGbG9hdChpbnQgaW5kZXgsIGZsb2F0
IGVsZW1lbnQpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG11dGFibGUgY2xvbmUgb2Yg
dGhpcyBsaXN0IHdpdGggdGhlIHNwZWNpZmllZCBjYXBhY2l0eS4KLSAgICAgKi8KLSAgICBAT3Zl
cnJpZGUKLSAgICBGbG9hdExpc3QgbXV0YWJsZUNvcHlXaXRoQ2FwYWNpdHkoaW50IGNhcGFjaXR5
KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL0ludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5qYXZhIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUv
c3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0ludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWNlN2IyNGFjOGEx
MTZmODc2YTBjZDI3NDM2OGI0MDIxOWMyYTNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDEzNCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFj
a2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsK
LQotLyoqCi0gKiBUaHJvd24gd2hlbiBhIHByb3RvY29sIG1lc3NhZ2UgYmVpbmcgcGFyc2VkIGlz
IGludmFsaWQgaW4gc29tZSB3YXksCi0gKiBlLmcuIGl0IGNvbnRhaW5zIGEgbWFsZm9ybWVkIHZh
cmludCBvciBhIG5lZ2F0aXZlIGJ5dGUgbGVuZ3RoLgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdv
b2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBjbGFzcyBJbnZhbGlkUHJvdG9jb2xC
dWZmZXJFeGNlcHRpb24gZXh0ZW5kcyBJT0V4Y2VwdGlvbiB7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xNjE2MTUxNzYzMDcyNDUwNDc2TDsKLSAgcHJp
dmF0ZSBNZXNzYWdlTGl0ZSB1bmZpbmlzaGVkTWVzc2FnZSA9IG51bGw7Ci0KLSAgcHVibGljIElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pIHsK
LSAgICBzdXBlcihkZXNjcmlwdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgSW52YWxpZFByb3RvY29s
QnVmZmVyRXhjZXB0aW9uKElPRXhjZXB0aW9uIGUpIHsKLSAgICBzdXBlcihlLmdldE1lc3NhZ2Uo
KSwgZSk7Ci0gIH0KLQotICAvKioKLSAgICogQXR0YWNoZXMgYW4gdW5maW5pc2hlZCBtZXNzYWdl
IHRvIHRoZSBleGNlcHRpb24gdG8gc3VwcG9ydCBiZXN0LWVmZm9ydAotICAgKiBwYXJzaW5nIGlu
IHtAY29kZSBQYXJzZXJ9IGludGVyZmFjZS4KLSAgICoKLSAgICogQHJldHVybiB0aGlzCi0gICAq
LwotICBwdWJsaWMgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHNldFVuZmluaXNoZWRN
ZXNzYWdlKAotICAgICAgTWVzc2FnZUxpdGUgdW5maW5pc2hlZE1lc3NhZ2UpIHsKLSAgICB0aGlz
LnVuZmluaXNoZWRNZXNzYWdlID0gdW5maW5pc2hlZE1lc3NhZ2U7Ci0gICAgcmV0dXJuIHRoaXM7
Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdW5maW5pc2hlZCBtZXNzYWdlIGF0dGFj
aGVkIHRvIHRoZSBleGNlcHRpb24sIG9yIG51bGwgaWYKLSAgICogbm8gbWVzc2FnZSBpcyBhdHRh
Y2hlZC4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlTGl0ZSBnZXRVbmZpbmlzaGVkTWVzc2FnZSgp
IHsKLSAgICByZXR1cm4gdW5maW5pc2hlZE1lc3NhZ2U7Ci0gIH0KLQotICAvKioKLSAgICogVW53
cmFwcyB0aGUgdW5kZXJseWluZyB7QGxpbmsgSU9FeGNlcHRpb259IGlmIHRoaXMgZXhjZXB0aW9u
IHdhcyBjYXVzZWQgYnkgYW4gSS9PCi0gICAqIHByb2JsZW0uIE90aGVyd2lzZSwgcmV0dXJucyB7
QGNvZGUgdGhpc30uCi0gICAqLwotICBwdWJsaWMgSU9FeGNlcHRpb24gdW53cmFwSU9FeGNlcHRp
b24oKSB7Ci0gICAgcmV0dXJuIGdldENhdXNlKCkgaW5zdGFuY2VvZiBJT0V4Y2VwdGlvbiA/IChJ
T0V4Y2VwdGlvbikgZ2V0Q2F1c2UoKSA6IHRoaXM7Ci0gIH0KLQotICBzdGF0aWMgSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uIHRydW5jYXRlZE1lc3NhZ2UoKSB7Ci0gICAgcmV0dXJuIG5l
dyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAiV2hpbGUgcGFyc2luZyBh
IHByb3RvY29sIG1lc3NhZ2UsIHRoZSBpbnB1dCBlbmRlZCB1bmV4cGVjdGVkbHkgIiArCi0gICAg
ICAiaW4gdGhlIG1pZGRsZSBvZiBhIGZpZWxkLiAgVGhpcyBjb3VsZCBtZWFuIGVpdGhlciB0aGF0
IHRoZSAiICsKLSAgICAgICJpbnB1dCBoYXMgYmVlbiB0cnVuY2F0ZWQgb3IgdGhhdCBhbiBlbWJl
ZGRlZCBtZXNzYWdlICIgKwotICAgICAgIm1pc3JlcG9ydGVkIGl0cyBvd24gbGVuZ3RoLiIpOwot
ICB9Ci0KLSAgc3RhdGljIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBuZWdhdGl2ZVNp
emUoKSB7Ci0gICAgcmV0dXJuIG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0g
ICAgICAiQ29kZWRJbnB1dFN0cmVhbSBlbmNvdW50ZXJlZCBhbiBlbWJlZGRlZCBzdHJpbmcgb3Ig
bWVzc2FnZSAiICsKLSAgICAgICJ3aGljaCBjbGFpbWVkIHRvIGhhdmUgbmVnYXRpdmUgc2l6ZS4i
KTsKLSAgfQotCi0gIHN0YXRpYyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gbWFsZm9y
bWVkVmFyaW50KCkgewotICAgIHJldHVybiBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uKAotICAgICAgIkNvZGVkSW5wdXRTdHJlYW0gZW5jb3VudGVyZWQgYSBtYWxmb3JtZWQgdmFy
aW50LiIpOwotICB9Ci0KLSAgc3RhdGljIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBp
bnZhbGlkVGFnKCkgewotICAgIHJldHVybiBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uKAotICAgICAgIlByb3RvY29sIG1lc3NhZ2UgY29udGFpbmVkIGFuIGludmFsaWQgdGFnICh6
ZXJvKS4iKTsKLSAgfQotCi0gIHN0YXRpYyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24g
aW52YWxpZEVuZFRhZygpIHsKLSAgICByZXR1cm4gbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbigKLSAgICAgICJQcm90b2NvbCBtZXNzYWdlIGVuZC1ncm91cCB0YWcgZGlkIG5vdCBt
YXRjaCBleHBlY3RlZCB0YWcuIik7Ci0gIH0KLQotICBzdGF0aWMgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIGludmFsaWRXaXJlVHlwZSgpIHsKLSAgICByZXR1cm4gbmV3IEludmFsaWRQ
cm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigKLSAgICAgICJQcm90b2NvbCBtZXNzYWdlIHRhZyBoYWQg
aW52YWxpZCB3aXJlIHR5cGUuIik7Ci0gIH0KLQotICBzdGF0aWMgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIHJlY3Vyc2lvbkxpbWl0RXhjZWVkZWQoKSB7Ci0gICAgcmV0dXJuIG5ldyBJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAiUHJvdG9jb2wgbWVzc2FnZSBo
YWQgdG9vIG1hbnkgbGV2ZWxzIG9mIG5lc3RpbmcuICBNYXkgYmUgbWFsaWNpb3VzLiAgIiArCi0g
ICAgICAiVXNlIENvZGVkSW5wdXRTdHJlYW0uc2V0UmVjdXJzaW9uTGltaXQoKSB0byBpbmNyZWFz
ZSB0aGUgZGVwdGggbGltaXQuIik7Ci0gIH0KLQotICBzdGF0aWMgSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIHNpemVMaW1pdEV4Y2VlZGVkKCkgewotICAgIHJldHVybiBuZXcgSW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgIlByb3RvY29sIG1lc3NhZ2Ugd2FzIHRv
byBsYXJnZS4gIE1heSBiZSBtYWxpY2lvdXMuICAiICsKLSAgICAgICJVc2UgQ29kZWRJbnB1dFN0
cmVhbS5zZXRTaXplTGltaXQoKSB0byBpbmNyZWFzZSB0aGUgc2l6ZSBsaW1pdC4iKTsKLSAgfQot
Ci0gIHN0YXRpYyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gcGFyc2VGYWlsdXJlKCkg
ewotICAgIHJldHVybiBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKCJGYWlsZWQg
dG8gcGFyc2UgdGhlIG1lc3NhZ2UuIik7Ci0gIH0KLQotICBzdGF0aWMgSW52YWxpZFByb3RvY29s
QnVmZmVyRXhjZXB0aW9uIGludmFsaWRVdGY4KCkgewotICAgIHJldHVybiBuZXcgSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uKCJQcm90b2NvbCBtZXNzYWdlIGhhZCBpbnZhbGlkIFVURi04
LiIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvTGF6eUZpZWxkLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvTGF6eUZpZWxkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk4ZTEzY2ExOTkwMmZkNjNhODEyYjY1M2IwNzcyYjExMDQ2NzBiY2UuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xhenlGaWVsZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
MTU0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdl
IGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBv
cnQgamF2YS51dGlsLk1hcC5FbnRyeTsKLQotLyoqCi0gKiBMYXp5RmllbGQgZW5jYXBzdWxhdGVz
IHRoZSBsb2dpYyBvZiBsYXppbHkgcGFyc2luZyBtZXNzYWdlIGZpZWxkcy4gSXQgc3RvcmVzCi0g
KiB0aGUgbWVzc2FnZSBpbiBhIEJ5dGVTdHJpbmcgaW5pdGlhbGx5IGFuZCB0aGVuIHBhcnNlIGl0
IG9uLWRlbWFuZC4KLSAqCi0gKiBNb3N0IG9mIGtleSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBp
biB7QGxpbmsgTGF6eUZpZWxkTGl0ZX0gYnV0IHRoaXMgY2xhc3MKLSAqIGNhbiBjb250YWluIGRl
ZmF1bHQgaW5zdGFuY2Ugb2YgdGhlIG1lc3NhZ2UgdG8gcHJvdmlkZSB7QGNvZGUgaGFzaENvZGUo
KX0sCi0gKiB7QGNvZGUgZXVxYWxzKCl9IGFuZCB7QGNvZGUgdG9TdHJpbmcoKX0uCi0gKgotICog
QGF1dGhvciB4aWFuZ2xAZ29vZ2xlLmNvbSAoWGlhbmcgTGkpCi0gKi8KLXB1YmxpYyBjbGFzcyBM
YXp5RmllbGQgZXh0ZW5kcyBMYXp5RmllbGRMaXRlIHsKLQotICAvKioKLSAgICogQ2FycnkgYSBt
ZXNzYWdlJ3MgZGVmYXVsdCBpbnN0YW5jZSB3aGljaCBpcyB1c2VkIGJ5IHtAY29kZSBoYXNoQ29k
ZSgpfSwge0Bjb2RlIGV1cWFscygpfSBhbmQKLSAgICoge0Bjb2RlIHRvU3RyaW5nKCl9LgotICAg
Ki8KLSAgcHJpdmF0ZSBmaW5hbCBNZXNzYWdlTGl0ZSBkZWZhdWx0SW5zdGFuY2U7Ci0KLSAgcHVi
bGljIExhenlGaWVsZChNZXNzYWdlTGl0ZSBkZWZhdWx0SW5zdGFuY2UsCi0gICAgICBFeHRlbnNp
b25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnksIEJ5dGVTdHJpbmcgYnl0ZXMpIHsKLSAg
ICBzdXBlcihleHRlbnNpb25SZWdpc3RyeSwgYnl0ZXMpOwotCi0gICAgdGhpcy5kZWZhdWx0SW5z
dGFuY2UgPSBkZWZhdWx0SW5zdGFuY2U7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJv
b2xlYW4gY29udGFpbnNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIHN1cGVyLmNvbnRh
aW5zRGVmYXVsdEluc3RhbmNlKCkgfHwgdmFsdWUgPT0gZGVmYXVsdEluc3RhbmNlOwotICB9Ci0K
LSAgcHVibGljIE1lc3NhZ2VMaXRlIGdldFZhbHVlKCkgewotICAgIHJldHVybiBnZXRWYWx1ZShk
ZWZhdWx0SW5zdGFuY2UpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgaGFzaENv
ZGUoKSB7Ci0gICAgcmV0dXJuIGdldFZhbHVlKCkuaGFzaENvZGUoKTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgIHJldHVybiBn
ZXRWYWx1ZSgpLmVxdWFscyhvYmopOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBTdHJp
bmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIGdldFZhbHVlKCkudG9TdHJpbmcoKTsKLSAgfQot
Ci0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLQotICAvKioKLSAgICogTGF6eUVudHJ5IGFuZCBMYXp5SXRlcmF0b3IgYXJlIHVzZWQgdG8g
ZW5jYXBzdWxhdGUgdGhlIExhenlGaWVsZCwgd2hlbgotICAgKiB1c2VycyBpdGVyYXRlIGFsbCBm
aWVsZHMgZnJvbSBGaWVsZFNldC4KLSAgICovCi0gIHN0YXRpYyBjbGFzcyBMYXp5RW50cnk8Sz4g
aW1wbGVtZW50cyBFbnRyeTxLLCBPYmplY3Q+IHsKLSAgICBwcml2YXRlIEVudHJ5PEssIExhenlG
aWVsZD4gZW50cnk7Ci0KLSAgICBwcml2YXRlIExhenlFbnRyeShFbnRyeTxLLCBMYXp5RmllbGQ+
IGVudHJ5KSB7Ci0gICAgICB0aGlzLmVudHJ5ID0gZW50cnk7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIEsgZ2V0S2V5KCkgewotICAgICAgcmV0dXJuIGVudHJ5LmdldEtleSgp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgZ2V0VmFsdWUoKSB7
Ci0gICAgICBMYXp5RmllbGQgZmllbGQgPSBlbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgaWYgKGZp
ZWxkID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gZmllbGQuZ2V0VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGF6eUZpZWxkIGdldEZp
ZWxkKCkgewotICAgICAgcmV0dXJuIGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBzZXRWYWx1ZShPYmplY3QgdmFsdWUpIHsKLSAgICAg
IGlmICghKHZhbHVlIGluc3RhbmNlb2YgTWVzc2FnZUxpdGUpKSB7Ci0gICAgICAgIHRocm93IG5l
dyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAiTGF6eUZpZWxkIG5vdyBv
bmx5IHVzZWQgZm9yIE1lc3NhZ2VTZXQsICIKLSAgICAgICAgICAgICsgImFuZCB0aGUgdmFsdWUg
b2YgTWVzc2FnZVNldCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIE1lc3NhZ2VMaXRlIik7Ci0gICAg
ICB9Ci0gICAgICByZXR1cm4gZW50cnkuZ2V0VmFsdWUoKS5zZXRWYWx1ZSgoTWVzc2FnZUxpdGUp
IHZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgY2xhc3MgTGF6eUl0ZXJhdG9yPEs+IGlt
cGxlbWVudHMgSXRlcmF0b3I8RW50cnk8SywgT2JqZWN0Pj4gewotICAgIHByaXZhdGUgSXRlcmF0
b3I8RW50cnk8SywgT2JqZWN0Pj4gaXRlcmF0b3I7Ci0KLSAgICBwdWJsaWMgTGF6eUl0ZXJhdG9y
KEl0ZXJhdG9yPEVudHJ5PEssIE9iamVjdD4+IGl0ZXJhdG9yKSB7Ci0gICAgICB0aGlzLml0ZXJh
dG9yID0gaXRlcmF0b3I7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xl
YW4gaGFzTmV4dCgpIHsKLSAgICAgIHJldHVybiBpdGVyYXRvci5oYXNOZXh0KCk7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAg
cHVibGljIEVudHJ5PEssIE9iamVjdD4gbmV4dCgpIHsKLSAgICAgIEVudHJ5PEssID8+IGVudHJ5
ID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgaWYgKGVudHJ5LmdldFZhbHVlKCkgaW5zdGFuY2Vv
ZiBMYXp5RmllbGQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBMYXp5RW50cnk8Sz4oKEVudHJ5PEss
IExhenlGaWVsZD4pIGVudHJ5KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAoRW50cnk8SywgT2Jq
ZWN0PikgZW50cnk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVt
b3ZlKCkgewotICAgICAgaXRlcmF0b3IucmVtb3ZlKCk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTGF6eUZpZWxk
TGl0ZS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xh
enlGaWVsZExpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlYmFhY2Vj
YmFlMGJjMjE4MmJmOGRlYmJiY2Y2NmZjMzBhZmNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvTGF6eUZpZWxkTGl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDU4ICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29n
bGUucHJvdG9idWY7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi0vKioKLSAqIExh
enlGaWVsZExpdGUgZW5jYXBzdWxhdGVzIHRoZSBsb2dpYyBvZiBsYXppbHkgcGFyc2luZyBtZXNz
YWdlIGZpZWxkcy4gSXQgc3RvcmVzCi0gKiB0aGUgbWVzc2FnZSBpbiBhIEJ5dGVTdHJpbmcgaW5p
dGlhbGx5IGFuZCB0aGVuIHBhcnNlcyBpdCBvbi1kZW1hbmQuCi0gKgotICogTGF6eUZpZWxkTGl0
ZSBpcyB0aHJlYWQtY29tcGF0aWJsZTogY29uY3VycmVudCByZWFkcyBhcmUgc2FmZSBvbmNlIHRo
ZSBwcm90byB0aGF0IHRoaXMKLSAqIExhenlGaWVsZExpdGUgaXMgYSBwYXJ0IG9mIGlzIG5vIGxv
bmdlciBiZWluZyBtdXRhdGVkIGJ5IGl0cyBCdWlsZGVyLiBIb3dldmVyLCBleHBsaWNpdAotICog
c3luY2hyb25pemF0aW9uIGlzIG5lZWRlZCB1bmRlciByZWFkL3dyaXRlIHNpdHVhdGlvbnMuCi0g
KgotICogV2hlbiBhIExhenlGaWVsZExpdGUgaXMgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBhIE1l
c3NhZ2VMaXRlIG9iamVjdCwgaXRzIGJlaGF2aW9yIGlzIGNvbnNpZGVyZWQKLSAqIHRvIGJlIGlt
bXV0YWJsZSBhbmQgbm9uZSBvZiB0aGUgc2V0dGVyIG1ldGhvZHMgaW4gaXRzIEFQSSBhcmUgZXhw
ZWN0ZWQgdG8gYmUgaW52b2tlZC4gQWxsIG9mIHRoZQotICogZ2V0dGVycyBhcmUgZXhwZWN0ZWQg
dG8gYmUgdGhyZWFkLXNhZmUuIFdoZW4gdXNlZCBpbiB0aGUgY29udGV4dCBvZiBhIE1lc3NhZ2VM
aXRlLkJ1aWxkZXIsCi0gKiBzZXR0ZXJzIGNhbiBiZSBpbnZva2VkLCBidXQgdGhlcmUgaXMgbm8g
Z3VhcmFudGVlIG9mIHRocmVhZCBzYWZldHkuCi0gKiAKLSAqIFRPRE8oeWF0aW4sZHdlaXMpOiBD
b25zaWRlciBzcGxpdHRpbmcgdGhpcyBjbGFzcydzIGZ1bmN0aW9uYWxpdHkgYW5kIHB1dCB0aGUg
bXV0YWJsZSBtZXRob2RzCi0gKiBpbnRvIGEgc2VwYXJhdGUgYnVpbGRlciBjbGFzcyB0byBhbGxv
dyB1cyB0byBnaXZlIHN0cm9uZ2VyIGNvbXBpbGUtdGltZSBndWFyYW50ZWVzLgotICoKLSAqIFRo
aXMgY2xhc3MgaXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHRoZSBwcm90b2J1
ZiBsaWJyYXJ5LCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB1c2UgaXQKLSAqIGRpcmVjdGx5LgotICoK
LSAqIEBhdXRob3IgeGlhbmdsQGdvb2dsZS5jb20gKFhpYW5nIExpKQotICovCi1wdWJsaWMgY2xh
c3MgTGF6eUZpZWxkTGl0ZSB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEV4dGVuc2lvblJlZ2lz
dHJ5TGl0ZSBFTVBUWV9SRUdJU1RSWSA9Ci0gICAgICBFeHRlbnNpb25SZWdpc3RyeUxpdGUuZ2V0
RW1wdHlSZWdpc3RyeSgpOwotCi0gIC8qKgotICAgKiBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRo
IHRoZSBMYXp5RmllbGRMaXRlIG9iamVjdCBpcyBzdG9yZWQgaW4gb25lIG9yIG1vcmUgb2YgdGhl
IGZvbGxvd2luZwotICAgKiB0aHJlZSBmaWVsZHMgKGRlbGF5ZWRCeXRlcywgdmFsdWUsIG1lbW9p
emVkQnl0ZXMpLiBUaGV5IHNob3VsZCB0b2dldGhlciBiZSBpbnRlcnByZXRlZCBhcwotICAgKiBm
b2xsb3dzLgotICAgKiAxKSBkZWxheWVkQnl0ZXMgY2FuIGJlIG5vbi1udWxsLCB3aGlsZSB2YWx1
ZSBhbmQgbWVtb2l6ZWRCeXRlcyBpcyBudWxsLiBUaGUgb2JqZWN0IHdpbGwgYmUgaW4KLSAgICog
ICAgdGhpcyBzdGF0ZSB3aGlsZSB0aGUgdmFsdWUgZm9yIHRoZSBvYmplY3QgaGFzIG5vdCB5ZXQg
YmVlbiBwYXJzZWQuCi0gICAqIDIpIEJvdGggZGVsYXllZEJ5dGVzIGFuZCB2YWx1ZSBhcmUgbm9u
LW51bGwuIFRoZSBvYmplY3QgdHJhbnNpdGlvbnMgdG8gdGhpcyBzdGF0ZSBhcyBzb29uIGFzCi0g
ICAqICAgIHNvbWUgY2FsbGVyIG5lZWRzIHRvIGFjY2VzcyB0aGUgdmFsdWUgKGJ5IGludm9raW5n
IGdldFZhbHVlKCkpLgotICAgKiAzKSBtZW1vaXplZEJ5dGVzIGlzIG1lcmVseSBhbiBvcHRpbWl6
YXRpb24gZm9yIGNhbGxzIHRvIExhenlGaWVsZExpdGUudG9CeXRlU3RyaW5nKCkgdG8gYXZvaWQK
LSAgICogICAgcmVjb21wdXRpbmcgdGhlIEJ5dGVTdHJpbmcgcmVwcmVzZW50YXRpb24gb24gZWFj
aCBjYWxsLiBJbnN0ZWFkLCB3aGVuIHRoZSB2YWx1ZSBpcyBwYXJzZWQKLSAgICogICAgZnJvbSBk
ZWxheWVkQnl0ZXMsIHdlIHdpbGwgYWxzbyBhc3NpZ24gdGhlIGNvbnRlbnRzIG9mIGRlbGF5ZWRC
eXRlcyB0byBtZW1vaXplZEJ5dGVzIChzaW5jZQotICAgKiAgICB0aGF0IGlzIHRoZSBCeXRlU3Ry
aW5nIHJlcHJlc2VudGF0aW9uIG9mIHZhbHVlKS4KLSAgICogNCkgRmluYWxseSwgaWYgdGhlIExh
enlGaWVsZExpdGUgd2FzIGNyZWF0ZWQgZGlyZWN0bHkgd2l0aCBhIHBhcnNlZCBNZXNzYWdlTGl0
ZSB2YWx1ZSwgdGhlbgotICAgKiAgICBkZWxheWVkQnl0ZXMgd2lsbCBiZSBudWxsLCBhbmQgbWVt
b2l6ZWRCeXRlcyB3aWxsIGJlIGluaXRpYWxpemVkIG9ubHkgdXBvbiB0aGUgZmlyc3QgY2FsbCB0
bwotICAgKiAgICBMYXp5RmllbGRMaXRlLnRvQnl0ZVN0cmluZygpLgotICAgKgotICAgKiBHaXZl
biB0aGUgYWJvdmUgY29uZGl0aW9ucywgYW55IGNhbGxlciB0aGF0IG5lZWRzIGEgc2VyaWFsaXpl
ZCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG9iamVjdAotICAgKiBtdXN0IGZpcnN0IGNoZWNrIGlm
IHRoZSBtZW1vaXplZEJ5dGVzIG9yIGRlbGF5ZWRCeXRlcyBCeXRlU3RyaW5nIGlzIG5vbi1udWxs
IGFuZCB1c2UgaXQKLSAgICogZGlyZWN0bHk7IGlmIGJvdGggb2YgdGhvc2UgYXJlIG51bGwsIGl0
IGNhbiBsb29rIGF0IHRoZSBwYXJzZWQgdmFsdWUgZmllbGQuIFNpbWlsYXJseSwgYW55Ci0gICAq
IGNhbGxlciB0aGF0IG5lZWRzIGEgcGFyc2VkIHZhbHVlIG11c3QgZmlyc3QgY2hlY2sgaWYgdGhl
IHZhbHVlIGZpZWxkIGlzIGFscmVhZHkgbm9uLW51bGwsIGlmCi0gICAqIG5vdCBpdCBtdXN0IHBh
cnNlIHRoZSB2YWx1ZSBmcm9tIGRlbGF5ZWRCeXRlcy4KLSAgICovCi0KLSAgLyoqCi0gICAqIEEg
ZGVsYXllZC1wYXJzZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudHMgb2YgdGhpcyBmaWVsZC4gV2hl
biB0aGlzIGZpZWxkIGlzIG5vbi1udWxsLCB0aGVuIHRoZQotICAgKiAidmFsdWUiIGZpZWxkIGlz
IGFsbG93ZWQgdG8gYmUgbnVsbCB1bnRpbCB0aGUgdGltZSB0aGF0IHRoZSB2YWx1ZSBuZWVkcyB0
byBiZSByZWFkLgotICAgKgotICAgKiBXaGVuIGRlbGF5ZWRCeXRlcyBpcyBub24tbnVsbCB0aGVu
IHtAY29kZSBleHRlbnNpb25SZWdpc3RyeX0gaXMgcmVxdWlyZWQgdG8gYWxzbyBiZSBub24tbnVs
bC4KLSAgICoge0Bjb2RlIHZhbHVlfSBhbmQge0Bjb2RlIG1lbW9pemVkQnl0ZXN9IHdpbGwgYmUg
aW5pdGlhbGl6ZWQgbGF6aWx5LgotICAgKi8KLSAgcHJpdmF0ZSBCeXRlU3RyaW5nIGRlbGF5ZWRC
eXRlczsKLQotICAvKioKLSAgICogQW4ge0Bjb2RlIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZX0gZm9y
IHBhcnNpbmcgYnl0ZXMuIEl0IGlzIG5vbi1udWxsIG9uIGEgYmVzdC1lZmZvcnQgYmFzaXMuIEl0
Ci0gICAqIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbCBpZiB0aGlzIG1lc3NhZ2Ug
d2FzIGluaXRpYWxpemVkIHVzaW5nIGJ5dGVzIGFuZCBhbgotICAgKiB7QGNvZGUgRXh0ZW5zaW9u
UmVnaXN0cnl9LiBJZiBpdCBkaXJlY3RseSBoYWQgYSB2YWx1ZSBzZXQgdGhlbiBpdCB3aWxsIGJl
IG51bGwsIHVubGVzcyBpdCBoYXMKLSAgICogYmVlbiBtZXJnZWQgd2l0aCBhbm90aGVyIHtAY29k
ZSBMYXp5RmllbGRMaXRlfSB0aGF0IGhhZCBhbiB7QGNvZGUgRXh0ZW5zaW9uUmVnaXN0cnl9Lgot
ICAgKi8KLSAgcHJpdmF0ZSBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnk7
Ci0KLSAgLyoqCi0gICAqIFRoZSBwYXJzZWQgdmFsdWUuIFdoZW4gdGhpcyBpcyBudWxsIGFuZCBh
IGNhbGxlciBuZWVkcyBhY2Nlc3MgdG8gdGhlIE1lc3NhZ2VMaXRlIHZhbHVlLCB0aGVuCi0gICAq
IHtAY29kZSBkZWxheWVkQnl0ZXN9IHdpbGwgYmUgcGFyc2VkIGxhemlseSBhdCB0aGF0IHRpbWUu
Ci0gICAqLwotICBwcm90ZWN0ZWQgdm9sYXRpbGUgTWVzc2FnZUxpdGUgdmFsdWU7Ci0KLSAgLyoq
Ci0gICAqIFRoZSBtZW1vaXplZCBieXRlcyBmb3Ige0Bjb2RlIHZhbHVlfS4gVGhpcyBpcyBhbiBv
cHRpbWl6YXRpb24gZm9yIHRoZSB0b0J5dGVTdHJpbmcoKSBtZXRob2QgdG8KLSAgICogbm90IGhh
dmUgdG8gcmVjb21wdXRlIGl0cyByZXR1cm4tdmFsdWUgb24gZWFjaCBpbnZvY2F0aW9uLgotICAg
KiBUT0RPKHlhdGluKTogRmlndXJlIG91dCB3aGV0aGVyIHRoaXMgb3B0aW1pemF0aW9uIGlzIGFj
dHVhbGx5IG5lY2Vzc2FyeS4KLSAgICovCi0gIHByaXZhdGUgdm9sYXRpbGUgQnl0ZVN0cmluZyBt
ZW1vaXplZEJ5dGVzOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgTGF6eUZpZWxkTGl0ZSB3
aXRoIGJ5dGVzIHRoYXQgd2lsbCBiZSBwYXJzZWQgbGF6aWx5LgotICAgKi8KLSAgcHVibGljIExh
enlGaWVsZExpdGUoRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5LCBCeXRl
U3RyaW5nIGJ5dGVzKSB7Ci0gICAgY2hlY2tBcmd1bWVudHMoZXh0ZW5zaW9uUmVnaXN0cnksIGJ5
dGVzKTsKLSAgICB0aGlzLmV4dGVuc2lvblJlZ2lzdHJ5ID0gZXh0ZW5zaW9uUmVnaXN0cnk7Ci0g
ICAgdGhpcy5kZWxheWVkQnl0ZXMgPSBieXRlczsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1
Y3RzIGEgTGF6eUZpZWxkTGl0ZSB3aXRoIG5vIGNvbnRlbnRzLCBhbmQgbm8gYWJpbGl0eSB0byBw
YXJzZSBleHRlbnNpb25zLgotICAgKi8KLSAgcHVibGljIExhenlGaWVsZExpdGUoKSB7Ci0gIH0K
LQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIExhenlGaWVsZExpdGUgaW5zdGFuY2Ugd2l0aCBh
IHZhbHVlLiBUaGUgTGF6eUZpZWxkTGl0ZSBtYXkgbm90IGJlIGFibGUgdG8gcGFyc2UKLSAgICog
dGhlIGV4dGVuc2lvbnMgaW4gdGhlIHZhbHVlIGFzIGl0IGhhcyBubyBFeHRlbnNpb25SZWdpc3Ry
eS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTGF6eUZpZWxkTGl0ZSBmcm9tVmFsdWUoTWVzc2Fn
ZUxpdGUgdmFsdWUpIHsKLSAgICBMYXp5RmllbGRMaXRlIGxmID0gbmV3IExhenlGaWVsZExpdGUo
KTsKLSAgICBsZi5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgcmV0dXJuIGxmOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgIGlmICh0aGlz
ID09IG8pIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIShvIGlu
c3RhbmNlb2YgTGF6eUZpZWxkTGl0ZSkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBMYXp5RmllbGRMaXRlIG90aGVyID0gKExhenlGaWVsZExpdGUpIG87Ci0gICAgCi0gICAg
Ly8gTGF6eSBmaWVsZHMgZG8gbm90IHdvcmsgd2VsbCB3aXRoIGVxdWFscy4uLiBJZiBib3RoIGFy
ZSBkZWxheWVkQnl0ZXMsIHdlIGRvIG5vdCBoYXZlIGEKLSAgICAvLyBtZWNoYW5pc20gdG8gZGVz
ZXJpYWxpemUgdGhlbSBzbyB3ZSByZWx5IG9uIGJ5dGVzIGVxdWFsaXR5LiBPdGhlcndpc2Ugd2Ug
Y29lcmNlIGludG8gYW4KLSAgICAvLyBhY3R1YWwgbWVzc2FnZSAoaWYgbmVjZXNzYXJ5KSBhbmQg
Y2FsbCBlcXVhbHMgb24gdGhlIG1lc3NhZ2UgaXRzZWxmLiBUaGlzIGltcGxpZXMgdGhhdCB0d28K
LSAgICAvLyBtZXNzYWdlcyBjYW4gYnkgdW5lcXVhbCBidXQgdGhlbiBiZSB0dXJuZWQgZXF1YWwg
c2ltcGx5IGJlIGludm9raW5nIGEgZ2V0dGVyIG9uIGEgbGF6eSBmaWVsZC4KLSAgICBNZXNzYWdl
TGl0ZSB2YWx1ZTEgPSB2YWx1ZTsKLSAgICBNZXNzYWdlTGl0ZSB2YWx1ZTIgPSBvdGhlci52YWx1
ZTsKLSAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHsKLSAgICAgIHJl
dHVybiB0b0J5dGVTdHJpbmcoKS5lcXVhbHMob3RoZXIudG9CeXRlU3RyaW5nKCkpOwotICAgIH0g
ZWxzZSBpZiAodmFsdWUxICE9IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHsKLSAgICAgIHJldHVy
biB2YWx1ZTEuZXF1YWxzKHZhbHVlMik7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCkg
ewotICAgICAgcmV0dXJuIHZhbHVlMS5lcXVhbHMob3RoZXIuZ2V0VmFsdWUodmFsdWUxLmdldERl
ZmF1bHRJbnN0YW5jZUZvclR5cGUoKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gZ2V0
VmFsdWUodmFsdWUyLmdldERlZmF1bHRJbnN0YW5jZUZvclR5cGUoKSkuZXF1YWxzKHZhbHVlMik7
Ci0gICAgfQotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIGludCBoYXNoQ29kZSgpIHsK
LSAgICAvLyBXZSBjYW4ndCBwcm92aWRlIGEgbWVtb2l6YWJsZSBoYXNoIGNvZGUgZm9yIGxhenkg
ZmllbGRzLiBUaGUgYnl0ZSBzdHJpbmdzIG1heSBoYXZlIGRpZmZlcmVudAotICAgIC8vIGhhc2gg
Y29kZXMgYnV0IGV2YWx1YXRlIHRvIGVxdWl2YWxlbnQgbWVzc2FnZXMuIEFuZCB3ZSBoYXZlIG5v
IGZhY2lsaXR5IGZvciBjb25zdHJ1Y3RpbmcKLSAgICAvLyBhIG1lc3NhZ2UgaGVyZSBpZiB3ZSB3
ZXJlIG5vdCBhbHJlYWR5IGhvbGRpbmcgYSB2YWx1ZS4KLSAgICByZXR1cm4gMTsKLSAgfQotICAK
LSAgLyoqCi0gICAqIERldGVybWluZXMgd2hldGhlciB0aGlzIExhenlGaWVsZExpdGUgaW5zdGFu
Y2UgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCBpbnN0YW5jZSBvZiB0aGlzIHR5cGUuCi0gICAqLwot
ICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0RlZmF1bHRJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4g
bWVtb2l6ZWRCeXRlcyA9PSBCeXRlU3RyaW5nLkVNUFRZCi0gICAgICAgIHx8IHZhbHVlID09IG51
bGwgJiYgKGRlbGF5ZWRCeXRlcyA9PSBudWxsIHx8IGRlbGF5ZWRCeXRlcyA9PSBCeXRlU3RyaW5n
LkVNUFRZKTsKLSAgfQotCi0gIC8qKgotICAgKiBDbGVhcnMgdGhlIHZhbHVlIHN0YXRlIG9mIHRo
aXMgaW5zdGFuY2UuCi0gICAqCi0gICAqIDxwPkxhenlGaWVsZCBpcyBub3QgdGhyZWFkLXNhZmUg
Zm9yIHdyaXRlIGFjY2Vzcy4gU3luY2hyb25pemF0aW9ucyBhcmUgbmVlZGVkCi0gICAqIHVuZGVy
IHJlYWQvd3JpdGUgc2l0dWF0aW9ucy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsZWFyKCkgewot
ICAgIC8vIERvbid0IGNsZWFyIHRoZSBFeHRlbnNpb25SZWdpc3RyeS4gSXQgbWlnaHQgcHJvdmUg
dXNlZnVsIGxhdGVyIG9uIHdoZW4gbWVyZ2luZyBpbiBhbm90aGVyCi0gICAgLy8gdmFsdWUsIGJ1
dCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIGNvbnRhaW4gYWxsIGV4dGVuc2lv
bnMgdGhhdCB3ZXJlIGRpcmVjdGx5IHNldAotICAgIC8vIG9uIHRoZSB2YWx1ZXMgdGhhdCBuZWVk
IHRvIGJlIG1lcmdlZC4KLSAgICBkZWxheWVkQnl0ZXMgPSBudWxsOwotICAgIHZhbHVlID0gbnVs
bDsKLSAgICBtZW1vaXplZEJ5dGVzID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBPdmVycmlk
ZXMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgTGF6eUZpZWxkLgotICAgKgotICAgKiA8cD5MYXp5Rmll
bGQgaXMgbm90IHRocmVhZC1zYWZlIGZvciB3cml0ZSBhY2Nlc3MuIFN5bmNocm9uaXphdGlvbnMg
YXJlIG5lZWRlZAotICAgKiB1bmRlciByZWFkL3dyaXRlIHNpdHVhdGlvbnMuCi0gICAqLwotICBw
dWJsaWMgdm9pZCBzZXQoTGF6eUZpZWxkTGl0ZSBvdGhlcikgewotICAgIHRoaXMuZGVsYXllZEJ5
dGVzID0gb3RoZXIuZGVsYXllZEJ5dGVzOwotICAgIHRoaXMudmFsdWUgPSBvdGhlci52YWx1ZTsK
LSAgICB0aGlzLm1lbW9pemVkQnl0ZXMgPSBvdGhlci5tZW1vaXplZEJ5dGVzOwotICAgIC8vIElm
IHRoZSBvdGhlciBMYXp5RmllbGRMaXRlIHdhcyBjcmVhdGVkIGJ5IGRpcmVjdGx5IHNldHRpbmcg
dGhlIHZhbHVlIHJhdGhlciB0aGFuIGZpcnN0IGJ5Ci0gICAgLy8gcGFyc2luZywgdGhlbiBpdCB3
aWxsIG5vdCBoYXZlIGFuIGV4dGVuc2lvblJlZ2lzdHJ5LiBJbiB0aGlzIGNhc2Ugd2UgaG9sZCBv
biB0byB0aGUgZXhpc3RpbmcKLSAgICAvLyBleHRlbnNpb25SZWdpc3RyeSwgd2hpY2ggaGFzIG5v
IGd1YXJhbnRlZXMgdGhhdCBpdCBoYXMgYWxsIHRoZSBleHRlbnNpb25zIHRoYXQgd2lsbCBiZQot
ICAgIC8vIGRpcmVjdGx5IHNldCBvbiB0aGUgdmFsdWUuCi0gICAgaWYgKG90aGVyLmV4dGVuc2lv
blJlZ2lzdHJ5ICE9IG51bGwpIHsKLSAgICAgIHRoaXMuZXh0ZW5zaW9uUmVnaXN0cnkgPSBvdGhl
ci5leHRlbnNpb25SZWdpc3RyeTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBt
ZXNzYWdlIGluc3RhbmNlLiBJdCBtYXkgZG8gc29tZSB0aHJlYWQtc2FmZSBkZWxheWVkIHBhcnNp
bmcgb2YgYnl0ZXMuCi0gICAqCi0gICAqIEBwYXJhbSBkZWZhdWx0SW5zdGFuY2UgaXRzIG1lc3Nh
Z2UncyBkZWZhdWx0IGluc3RhbmNlLiBJdCdzIGFsc28gdXNlZCB0byBnZXQgcGFyc2VyIGZvciB0
aGUKLSAgICogbWVzc2FnZSB0eXBlLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VMaXRlIGdldFZh
bHVlKE1lc3NhZ2VMaXRlIGRlZmF1bHRJbnN0YW5jZSkgewotICAgIGVuc3VyZUluaXRpYWxpemVk
KGRlZmF1bHRJbnN0YW5jZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAq
IFNldHMgdGhlIHZhbHVlIG9mIHRoZSBpbnN0YW5jZSBhbmQgcmV0dXJucyB0aGUgb2xkIHZhbHVl
IHdpdGhvdXQgZGVsYXkgcGFyc2luZyBhbnl0aGluZy4KLSAgICoKLSAgICogPHA+TGF6eUZpZWxk
IGlzIG5vdCB0aHJlYWQtc2FmZSBmb3Igd3JpdGUgYWNjZXNzLiBTeW5jaHJvbml6YXRpb25zIGFy
ZSBuZWVkZWQKLSAgICogdW5kZXIgcmVhZC93cml0ZSBzaXR1YXRpb25zLgotICAgKi8KLSAgcHVi
bGljIE1lc3NhZ2VMaXRlIHNldFZhbHVlKE1lc3NhZ2VMaXRlIHZhbHVlKSB7Ci0gICAgTWVzc2Fn
ZUxpdGUgb3JpZ2luYWxWYWx1ZSA9IHRoaXMudmFsdWU7Ci0gICAgdGhpcy5kZWxheWVkQnl0ZXMg
PSBudWxsOwotICAgIHRoaXMubWVtb2l6ZWRCeXRlcyA9IG51bGw7Ci0gICAgdGhpcy52YWx1ZSA9
IHZhbHVlOwotICAgIHJldHVybiBvcmlnaW5hbFZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIE1l
cmdlcyBhbm90aGVyIGluc3RhbmNlJ3MgY29udGVudHMuIEluIHNvbWUgY2FzZXMgbWF5IGRyb3Ag
c29tZSBleHRlbnNpb25zIGlmIGJvdGggZmllbGRzCi0gICAqIGNvbnRhaW4gZGF0YS4gSWYgdGhl
IG90aGVyIGZpZWxkIGhhcyBhbiB7QGNvZGUgRXh0ZW5zaW9uUmVnaXN0cnl9IGJ1dCB0aGlzIGRv
ZXMgbm90LCB0aGVuIHRoaXMKLSAgICogZmllbGQgd2lsbCBjb3B5IG92ZXIgdGhhdCB7QGNvZGUg
RXh0ZW5zaW9uUmVnaXN0cnl9LgotICAgKgotICAgKiA8cD5MYXp5RmllbGQgaXMgbm90IHRocmVh
ZC1zYWZlIGZvciB3cml0ZSBhY2Nlc3MuIFN5bmNocm9uaXphdGlvbnMgYXJlIG5lZWRlZAotICAg
KiB1bmRlciByZWFkL3dyaXRlIHNpdHVhdGlvbnMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBtZXJn
ZShMYXp5RmllbGRMaXRlIG90aGVyKSB7Ci0gICAgaWYgKG90aGVyLmNvbnRhaW5zRGVmYXVsdElu
c3RhbmNlKCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodGhpcy5jb250YWlu
c0RlZmF1bHRJbnN0YW5jZSgpKSB7Ci0gICAgICBzZXQob3RoZXIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIElmIHRoZSBvdGhlciBmaWVsZCBoYXMgYW4gZXh0ZW5zaW9uIHJlZ2lz
dHJ5IGJ1dCB0aGlzIGRvZXMgbm90LCBjb3B5IG92ZXIgdGhlIG90aGVyIGV4dGVuc2lvbgotICAg
IC8vIHJlZ2lzdHJ5LgotICAgIGlmICh0aGlzLmV4dGVuc2lvblJlZ2lzdHJ5ID09IG51bGwpIHsK
LSAgICAgIHRoaXMuZXh0ZW5zaW9uUmVnaXN0cnkgPSBvdGhlci5leHRlbnNpb25SZWdpc3RyeTsK
LSAgICB9Ci0KLSAgICAvLyBJbiB0aGUgY2FzZSB0aGF0IGJvdGggb2YgdGhlbSBhcmUgbm90IHBh
cnNlZCB3ZSBzaW1wbHkgY29uY2F0ZW5hdGUgdGhlIGJ5dGVzIHRvIHNhdmUgdGltZS4gSW4KLSAg
ICAvLyB0aGUgKHByb2JhYmx5IHJhcmUpIGNhc2UgdGhhdCB0aGV5IGhhdmUgZGlmZmVyZW50IGV4
dGVuc2lvbiByZWdpc3RyaWVzIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQKLSAgICAvLyBzb21lIG9m
IHRoZSBleHRlbnNpb25zIG1heSBiZSBkcm9wcGVkLCBidXQgdGhlIHRyYWRlb2ZmIG9mIG1ha2lu
ZyB0aGlzIG9wZXJhdGlvbiBmYXN0IHNlZW1zCi0gICAgLy8gdG8gb3V0d2F5IHRoZSBiZW5lZml0
cyBvZiBjb21iaW5pbmcgdGhlIGV4dGVuc2lvbiByZWdpc3RyaWVzLCB3aGljaCBpcyBub3Qgbm9y
bWFsbHkgZG9uZSBmb3IKLSAgICAvLyBsaXRlIHByb3RvcyBhbnl3YXlzLgotICAgIGlmICh0aGlz
LmRlbGF5ZWRCeXRlcyAhPSBudWxsICYmIG90aGVyLmRlbGF5ZWRCeXRlcyAhPSBudWxsKSB7Ci0g
ICAgICB0aGlzLmRlbGF5ZWRCeXRlcyA9IHRoaXMuZGVsYXllZEJ5dGVzLmNvbmNhdChvdGhlci5k
ZWxheWVkQnl0ZXMpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEF0IGxlYXN0IG9u
ZSBpcyBwYXJzZWQgYW5kIGJvdGggY29udGFpbiBkYXRhLiBXZSB3b24ndCBkcm9wIGFueSBleHRl
bnNpb25zIGhlcmUgZGlyZWN0bHksIGJ1dAotICAgIC8vIGluIHRoZSBjYXNlIHRoYXQgdGhlIGV4
dGVuc2lvbiByZWdpc3RyaWVzIGFyZSBub3QgdGhlIHNhbWUgdGhlbiB3ZSBtaWdodCBpbiB0aGUg
ZnV0dXJlIGlmIHdlCi0gICAgLy8gbmVlZCB0byBzZXJpYWx6ZSBhbmQgcGFyc2UgYSBtZXNzYWdl
IGFnYWluLgotICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwgJiYgb3RoZXIudmFsdWUgIT0gbnVs
bCkgewotICAgICAgc2V0VmFsdWUobWVyZ2VWYWx1ZUFuZEJ5dGVzKG90aGVyLnZhbHVlLCB0aGlz
LmRlbGF5ZWRCeXRlcywgdGhpcy5leHRlbnNpb25SZWdpc3RyeSkpOwotICAgICAgcmV0dXJuOwot
ICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSAhPSBudWxsICYmIG90aGVyLnZhbHVlID09IG51bGwp
IHsKLSAgICAgIHNldFZhbHVlKG1lcmdlVmFsdWVBbmRCeXRlcyh0aGlzLnZhbHVlLCBvdGhlci5k
ZWxheWVkQnl0ZXMsIG90aGVyLmV4dGVuc2lvblJlZ2lzdHJ5KSk7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHR3byBmdWxseSBwYXJzZWQgbWVz
c2FnZXMuIFdlIGNhbid0IG1lcmdlIGRpcmVjdGx5IGZyb20gb25lIHRvIHRoZQotICAgIC8vIG90
aGVyIGJlY2F1c2Ugb25seSBnZW5lcmF0ZWQgYnVpbGRlciBjb2RlIGNvbnRhaW5zIG1ldGhvZHMg
dG8gbWVyZ2VGcm9tIGFub3RoZXIgcGFyc2VkCi0gICAgLy8gbWVzc2FnZS4gV2UgaGF2ZSB0byBz
ZXJpYWxpemUgb25lIGluc3RhbmNlIGFuZCB0aGVuIG1lcmdlIHRoZSBieXRlcyBpbnRvIHRoZSBv
dGhlci4gVGhpcyBtYXkKLSAgICAvLyBkcm9wIGV4dGVuc2lvbnMgZnJvbSBvbmUgb2YgdGhlIG1l
c3NhZ2VzIGlmIG9uZSBvZiB0aGUgdmFsdWVzIGhhZCBhbiBleHRlbnNpb24gc2V0IG9uIGl0Ci0g
ICAgLy8gZGlyZWN0bHkuCi0gICAgLy8KLSAgICAvLyBUbyBtaXRpZ2F0ZSB0aGlzIHdlIHByZWZl
ciBzZXJpYWxpemluZyBhIG1lc3NhZ2UgdGhhdCBoYXMgYW4gZXh0ZW5zaW9uIHJlZ2lzdHJ5LCBh
bmQKLSAgICAvLyB0aGVyZWZvcmUgYSBjaGFuY2UgdGhhdCBhbGwgZXh0ZW5zaW9ucyBzZXQgb24g
aXQgYXJlIGluIHRoYXQgcmVnaXN0cnkuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBUaGUgY2hlY2sg
Zm9yIG90aGVyLmV4dGVuc2lvblJlZ2lzdHJ5IG5vdCBiZWluZyBudWxsIG11c3QgY29tZSBmaXJz
dCBiZWNhdXNlIGF0IHRoaXMKLSAgICAvLyBwb2ludCBpbiB0aW1lIGlmIG90aGVyLmV4dGVuc2lv
blJlZ2lzdHJ5IGlzIG5vdCBudWxsIHRoZW4gdGhpcy5leHRlbnNpb25SZWdpc3RyeSB3aWxsIG5v
dCBiZQotICAgIC8vIG51bGwgZWl0aGVyLgotICAgIGlmIChvdGhlci5leHRlbnNpb25SZWdpc3Ry
eSAhPSBudWxsKSB7Ci0gICAgICBzZXRWYWx1ZShtZXJnZVZhbHVlQW5kQnl0ZXModGhpcy52YWx1
ZSwgb3RoZXIudG9CeXRlU3RyaW5nKCksIG90aGVyLmV4dGVuc2lvblJlZ2lzdHJ5KSk7Ci0gICAg
ICByZXR1cm47Ci0gICAgfSBlbHNlIGlmICh0aGlzLmV4dGVuc2lvblJlZ2lzdHJ5ICE9IG51bGwp
IHsKLSAgICAgIHNldFZhbHVlKG1lcmdlVmFsdWVBbmRCeXRlcyhvdGhlci52YWx1ZSwgdGhpcy50
b0J5dGVTdHJpbmcoKSwgdGhpcy5leHRlbnNpb25SZWdpc3RyeSkpOwotICAgICAgcmV0dXJuOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAvLyBBbGwgZXh0ZW5zaW9ucyBmcm9tIHRoZSBvdGhlciBtZXNz
YWdlIHdpbGwgYmUgZHJvcHBlZCBiZWNhdXNlIHdlIGhhdmUgbm8gcmVnaXN0cnkuCi0gICAgICBz
ZXRWYWx1ZShtZXJnZVZhbHVlQW5kQnl0ZXModGhpcy52YWx1ZSwgb3RoZXIudG9CeXRlU3RyaW5n
KCksIEVNUFRZX1JFR0lTVFJZKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0gIAotICAv
KioKLSAgICogTWVyZ2VzIGFub3RoZXIgaW5zdGFuY2UncyBjb250ZW50cyBmcm9tIGEgc3RyZWFt
LgotICAgKgotICAgKiA8cD5MYXp5RmllbGQgaXMgbm90IHRocmVhZC1zYWZlIGZvciB3cml0ZSBh
Y2Nlc3MuIFN5bmNocm9uaXphdGlvbnMgYXJlIG5lZWRlZAotICAgKiB1bmRlciByZWFkL3dyaXRl
IHNpdHVhdGlvbnMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBtZXJnZUZyb20oQ29kZWRJbnB1dFN0
cmVhbSBpbnB1dCwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAg
ICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpZiAodGhpcy5jb250YWluc0RlZmF1bHRJbnN0
YW5jZSgpKSB7Ci0gICAgICBzZXRCeXRlU3RyaW5nKGlucHV0LnJlYWRCeXRlcygpLCBleHRlbnNp
b25SZWdpc3RyeSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIG90aGVy
IGZpZWxkIGhhcyBhbiBleHRlbnNpb24gcmVnaXN0cnkgYnV0IHRoaXMgZG9lcyBub3QsIGNvcHkg
b3ZlciB0aGUgb3RoZXIgZXh0ZW5zaW9uCi0gICAgLy8gcmVnaXN0cnkuCi0gICAgaWYgKHRoaXMu
ZXh0ZW5zaW9uUmVnaXN0cnkgPT0gbnVsbCkgewotICAgICAgdGhpcy5leHRlbnNpb25SZWdpc3Ry
eSA9IGV4dGVuc2lvblJlZ2lzdHJ5OwotICAgIH0KLQotICAgIC8vIEluIHRoZSBjYXNlIHRoYXQg
Ym90aCBvZiB0aGVtIGFyZSBub3QgcGFyc2VkIHdlIHNpbXBseSBjb25jYXRlbmF0ZSB0aGUgYnl0
ZXMgdG8gc2F2ZSB0aW1lLiBJbgotICAgIC8vIHRoZSAocHJvYmFibHkgcmFyZSkgY2FzZSB0aGF0
IHRoZXkgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5zaW9uIHJlZ2lzdHJpZXMgdGhlcmUgaXMgYSBjaGFu
Y2UgdGhhdAotICAgIC8vIHNvbWUgb2YgdGhlIGV4dGVuc2lvbnMgbWF5IGJlIGRyb3BwZWQsIGJ1
dCB0aGUgdHJhZGVvZmYgb2YgbWFraW5nIHRoaXMgb3BlcmF0aW9uIGZhc3Qgc2VlbXMKLSAgICAv
LyB0byBvdXR3YXkgdGhlIGJlbmVmaXRzIG9mIGNvbWJpbmluZyB0aGUgZXh0ZW5zaW9uIHJlZ2lz
dHJpZXMsIHdoaWNoIGlzIG5vdCBub3JtYWxseSBkb25lIGZvcgotICAgIC8vIGxpdGUgcHJvdG9z
IGFueXdheXMuCi0gICAgaWYgKHRoaXMuZGVsYXllZEJ5dGVzICE9IG51bGwpIHsKLSAgICAgIHNl
dEJ5dGVTdHJpbmcodGhpcy5kZWxheWVkQnl0ZXMuY29uY2F0KGlucHV0LnJlYWRCeXRlcygpKSwg
dGhpcy5leHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
V2UgYXJlIHBhcnNlZCBhbmQgYm90aCBjb250YWluIGRhdGEuIFdlIHdvbid0IGRyb3AgYW55IGV4
dGVuc2lvbnMgaGVyZSBkaXJlY3RseSwgYnV0IGluIHRoZQotICAgIC8vIGNhc2UgdGhhdCB0aGUg
ZXh0ZW5zaW9uIHJlZ2lzdHJpZXMgYXJlIG5vdCB0aGUgc2FtZSB0aGVuIHdlIG1pZ2h0IGluIHRo
ZSBmdXR1cmUgaWYgd2UKLSAgICAvLyBuZWVkIHRvIHNlcmlhbGl6ZSBhbmQgcGFyc2UgYSBtZXNz
YWdlIGFnYWluLgotICAgIHRyeSB7Ci0gICAgICBzZXRWYWx1ZSh2YWx1ZS50b0J1aWxkZXIoKS5t
ZXJnZUZyb20oaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KS5idWlsZCgpKTsKLSAgICB9IGNhdGNo
IChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgLy8gTm90aGluZyBp
cyBsb2dnZWQgYW5kIG5vIGV4Y2VwdGlvbnMgYXJlIHRocm93bi4gQ2xpZW50cyB3aWxsIGJlIHVu
YXdhcmUgdGhhdCBhIHByb3RvCi0gICAgICAvLyB3YXMgaW52YWxpZC4KLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBNZXNzYWdlTGl0ZSBtZXJnZVZhbHVlQW5kQnl0ZXMoCi0gICAgICBN
ZXNzYWdlTGl0ZSB2YWx1ZSwgQnl0ZVN0cmluZyBvdGhlckJ5dGVzLCBFeHRlbnNpb25SZWdpc3Ry
eUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIHZhbHVl
LnRvQnVpbGRlcigpLm1lcmdlRnJvbShvdGhlckJ5dGVzLCBleHRlbnNpb25SZWdpc3RyeSkuYnVp
bGQoKTsKLSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewot
ICAgICAgLy8gTm90aGluZyBpcyBsb2dnZWQgYW5kIG5vIGV4Y2VwdGlvbnMgYXJlIHRocm93bi4g
Q2xpZW50cyB3aWxsIGJlIHVuYXdhcmUgdGhhdCBhIHByb3RvCi0gICAgICAvLyB3YXMgaW52YWxp
ZC4KLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB0
aGlzIGZpZWxkIHdpdGggYnl0ZXMgdG8gZGVsYXktcGFyc2UuCi0gICAqLwotICBwdWJsaWMgdm9p
ZCBzZXRCeXRlU3RyaW5nKEJ5dGVTdHJpbmcgYnl0ZXMsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBl
eHRlbnNpb25SZWdpc3RyeSkgewotICAgIGNoZWNrQXJndW1lbnRzKGV4dGVuc2lvblJlZ2lzdHJ5
LCBieXRlcyk7Ci0gICAgdGhpcy5kZWxheWVkQnl0ZXMgPSBieXRlczsKLSAgICB0aGlzLmV4dGVu
c2lvblJlZ2lzdHJ5ID0gZXh0ZW5zaW9uUmVnaXN0cnk7Ci0gICAgdGhpcy52YWx1ZSA9IG51bGw7
Ci0gICAgdGhpcy5tZW1vaXplZEJ5dGVzID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBEdWUg
dG8gdGhlIG9wdGlvbmFsIGZpZWxkIGNhbiBiZSBkdXBsaWNhdGVkIGF0IHRoZSBlbmQgb2Ygc2Vy
aWFsaXplZAotICAgKiBieXRlcywgd2hpY2ggd2lsbCBtYWtlIHRoZSBzZXJpYWxpemVkIHNpemUg
Y2hhbmdlZCBhZnRlciBMYXp5RmllbGQKLSAgICogcGFyc2VkLiBCZSBjYXJlZnVsIHdoZW4gdXNp
bmcgdGhpcyBtZXRob2QuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFNlcmlhbGl6ZWRTaXplKCkg
ewotICAgIC8vIFdlICptdXN0KiByZXR1cm4gZGVsYXllZCBieXRlcyBzaXplIGlmIGl0IHdhcyBl
dmVyIHNldCBiZWNhdXNlIHRoZSBkZXBlbmRlbnQgbWVzc2FnZXMgbWF5Ci0gICAgLy8gaGF2ZSBt
ZW1vaXplZCBzZXJpYWxpemVkIHNpemUgYmFzZWQgb2ZmIG9mIGl0LgotICAgIGlmIChtZW1vaXpl
ZEJ5dGVzICE9IG51bGwpIHsKLSAgICAgIHJldHVybiBtZW1vaXplZEJ5dGVzLnNpemUoKTsKLSAg
ICB9IGVsc2UgaWYgKGRlbGF5ZWRCeXRlcyAhPSBudWxsKSB7Ci0gICAgICByZXR1cm4gZGVsYXll
ZEJ5dGVzLnNpemUoKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgIHJl
dHVybiB2YWx1ZS5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIEJ5dGVzU3RyaW5nIGZv
ciB0aGlzIGZpZWxkIGluIGEgdGhyZWFkLXNhZmUgd2F5LgotICAgKi8KLSAgcHVibGljIEJ5dGVT
dHJpbmcgdG9CeXRlU3RyaW5nKCkgewotICAgIGlmIChtZW1vaXplZEJ5dGVzICE9IG51bGwpIHsK
LSAgICAgIHJldHVybiBtZW1vaXplZEJ5dGVzOwotICAgIH0KLSAgICAvLyBXZSAqbXVzdCogcmV0
dXJuIGRlbGF5ZWQgYnl0ZXMgaWYgaXQgd2FzIHNldCBiZWNhdXNlIHRoZSBkZXBlbmRlbnQgbWVz
c2FnZXMgbWF5IGhhdmUKLSAgICAvLyBtZW1vaXplZCBzZXJpYWxpemVkIHNpemUgYmFzZWQgb2Zm
IG9mIGl0LgotICAgIGlmIChkZWxheWVkQnl0ZXMgIT0gbnVsbCkgewotICAgICAgcmV0dXJuIGRl
bGF5ZWRCeXRlczsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICBpZiAo
bWVtb2l6ZWRCeXRlcyAhPSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBtZW1vaXplZEJ5dGVzOwot
ICAgICAgfQotICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgICAgbWVtb2l6ZWRCeXRl
cyA9IEJ5dGVTdHJpbmcuRU1QVFk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtZW1vaXplZEJ5
dGVzID0gdmFsdWUudG9CeXRlU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWVtb2l6
ZWRCeXRlczsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTWlnaHQgbGF6aWx5IHBhcnNlIHRo
ZSBieXRlcyB0aGF0IHdlcmUgcHJldmlvdXNseSBwYXNzZWQgaW4uIElzIHRocmVhZC1zYWZlLgot
ICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZW5zdXJlSW5pdGlhbGl6ZWQoTWVzc2FnZUxpdGUgZGVm
YXVsdEluc3RhbmNlKSB7Ci0gICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICBpZiAodmFsdWUgIT0gbnVs
bCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICB0cnkgewotICAgICAgICBpZiAo
ZGVsYXllZEJ5dGVzICE9IG51bGwpIHsKLSAgICAgICAgICAvLyBUaGUgZXh0ZW5zaW9uUmVnaXN0
cnkgc2hvdWxkbid0IGJlIG51bGwgaGVyZSBzaW5jZSB3ZSBoYXZlIGRlbGF5ZWRCeXRlcy4KLSAg
ICAgICAgICBNZXNzYWdlTGl0ZSBwYXJzZWRWYWx1ZSA9IGRlZmF1bHRJbnN0YW5jZS5nZXRQYXJz
ZXJGb3JUeXBlKCkKLSAgICAgICAgICAgICAgLnBhcnNlRnJvbShkZWxheWVkQnl0ZXMsIGV4dGVu
c2lvblJlZ2lzdHJ5KTsKLSAgICAgICAgICB0aGlzLnZhbHVlID0gcGFyc2VkVmFsdWU7Ci0gICAg
ICAgICAgdGhpcy5tZW1vaXplZEJ5dGVzID0gZGVsYXllZEJ5dGVzOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHRoaXMudmFsdWUgPSBkZWZhdWx0SW5zdGFuY2U7Ci0gICAgICAgICAgdGhp
cy5tZW1vaXplZEJ5dGVzID0gQnl0ZVN0cmluZy5FTVBUWTsKLSAgICAgICAgfQotICAgICAgfSBj
YXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8gTm90
aGluZyBpcyBsb2dnZWQgYW5kIG5vIGV4Y2VwdGlvbnMgYXJlIHRocm93bi4gQ2xpZW50cyB3aWxs
IGJlIHVuYXdhcmUgdGhhdCB0aGlzIHByb3RvCi0gICAgICAgIC8vIHdhcyBpbnZhbGlkLgotICAg
ICAgICB0aGlzLnZhbHVlID0gZGVmYXVsdEluc3RhbmNlOwotICAgICAgICB0aGlzLm1lbW9pemVk
Qnl0ZXMgPSBCeXRlU3RyaW5nLkVNUFRZOwotICAgICAgfQotICAgIH0KLSAgfQotCi0KLSAgcHJp
dmF0ZSBzdGF0aWMgdm9pZCBjaGVja0FyZ3VtZW50cyhFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0
ZW5zaW9uUmVnaXN0cnksIEJ5dGVTdHJpbmcgYnl0ZXMpIHsKLSAgICBpZiAoZXh0ZW5zaW9uUmVn
aXN0cnkgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJm
b3VuZCBudWxsIEV4dGVuc2lvblJlZ2lzdHJ5Iik7Ci0gICAgfQotICAgIGlmIChieXRlcyA9PSBu
dWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImZvdW5kIG51bGwg
Qnl0ZVN0cmluZyIpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21h
aW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xhenlTdHJpbmdBcnJheUxpc3QuamF2YSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5U3RyaW5nQXJyYXlM
aXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NzRjNTFlZjFlMGJmOGYx
ZDIxMTVmZTIxZWYwZGVlMTQ3MTk1MjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L0xhenlTdHJpbmdBcnJheUxpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyMyArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xl
LnByb3RvYnVmOwotCi1pbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TGlzdDsKLWltcG9ydCBqYXZh
LnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51
dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGph
dmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5SYW5kb21BY2Nlc3M7Ci0KLS8qKgotICog
QW4gaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIExhenlTdHJpbmdMaXN0fSB0aGF0IHdyYXBzIGFu
IEFycmF5TGlzdC4gRWFjaAotICogZWxlbWVudCBpcyBvbmUgb2YgU3RyaW5nLCBCeXRlU3RyaW5n
LCBvciBieXRlW10uIEl0IGNhY2hlcyB0aGUgbGFzdCBvbmUKLSAqIHJlcXVlc3RlZCB3aGljaCBp
cyBtb3N0IGxpa2VseSB0aGUgb25lIG5lZWRlZCBuZXh0LiBUaGlzIG1pbmltaXplcyBtZW1vcnkK
LSAqIHVzYWdlIHdoaWxlIHNhdGlzZnlpbmcgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlcy4KLSAq
IDxwPgotICogPHN0cm9uZz5Ob3RlIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgc3lu
Y2hyb25pemVkLjwvc3Ryb25nPgotICogSWYgbXVsdGlwbGUgdGhyZWFkcyBhY2Nlc3MgYW4gPHR0
PkFycmF5TGlzdDwvdHQ+IGluc3RhbmNlIGNvbmN1cnJlbnRseSwKLSAqIGFuZCBhdCBsZWFzdCBv
bmUgb2YgdGhlIHRocmVhZHMgbW9kaWZpZXMgdGhlIGxpc3Qgc3RydWN0dXJhbGx5LCBpdAotICog
PGk+bXVzdDwvaT4gYmUgc3luY2hyb25pemVkIGV4dGVybmFsbHkuICAoQSBzdHJ1Y3R1cmFsIG1v
ZGlmaWNhdGlvbiBpcwotICogYW55IG9wZXJhdGlvbiB0aGF0IGFkZHMgb3IgZGVsZXRlcyBvbmUg
b3IgbW9yZSBlbGVtZW50cywgb3IgZXhwbGljaXRseQotICogcmVzaXplcyB0aGUgYmFja2luZyBh
cnJheTsgbWVyZWx5IHNldHRpbmcgdGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQgaXMgbm90Ci0gKiBh
IHN0cnVjdHVyYWwgbW9kaWZpY2F0aW9uLikgIFRoaXMgaXMgdHlwaWNhbGx5IGFjY29tcGxpc2hl
ZCBieQotICogc3luY2hyb25pemluZyBvbiBzb21lIG9iamVjdCB0aGF0IG5hdHVyYWxseSBlbmNh
cHN1bGF0ZXMgdGhlIGxpc3QuCi0gKiA8cD4KLSAqIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBh
Y2Nlc3NlZCB2aWEgY29uY3VycmVudCByZWFkcywgdGhpcyBpcyB0aHJlYWQgc2FmZS4KLSAqIENv
bnZlcnNpb25zIGFyZSBkb25lIGluIGEgdGhyZWFkIHNhZmUgbWFubmVyLiBJdCdzIHBvc3NpYmxl
IHRoYXQgdGhlCi0gKiBjb252ZXJzaW9uIG1heSBoYXBwZW4gbW9yZSB0aGFuIG9uY2UgaWYgdHdv
IHRocmVhZHMgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlCi0gKiBzYW1lIGVsZW1lbnQgYW5kIHRoZSBt
b2RpZmljYXRpb25zIHdlcmUgbm90IHZpc2libGUgdG8gZWFjaCBvdGhlciwgYnV0IHRoaXMKLSAq
IHdpbGwgbm90IHJlc3VsdCBpbiBhbnkgY29ycnVwdGlvbiBvZiB0aGUgbGlzdCBvciBjaGFuZ2Ug
aW4gYmVoYXZpb3Igb3RoZXIKLSAqIHRoYW4gcGVyZm9ybWFuY2UuCi0gKgotICogQGF1dGhvciBq
b25wQGdvb2dsZS5jb20gKEpvbiBQZXJsb3cpCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXp5U3RyaW5n
QXJyYXlMaXN0IGV4dGVuZHMgQWJzdHJhY3RQcm90b2J1Zkxpc3Q8U3RyaW5nPgotICAgIGltcGxl
bWVudHMgTGF6eVN0cmluZ0xpc3QsIFJhbmRvbUFjY2VzcyB7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgTGF6eVN0cmluZ0FycmF5TGlzdCBFTVBUWV9MSVNUID0gbmV3IExhenlTdHJpbmdBcnJh
eUxpc3QoKTsKLSAgc3RhdGljIHsKLSAgICBFTVBUWV9MSVNULm1ha2VJbW11dGFibGUoKTsKLSAg
fQotICAKLSAgc3RhdGljIExhenlTdHJpbmdBcnJheUxpc3QgZW1wdHlMaXN0KCkgewotICAgIHJl
dHVybiBFTVBUWV9MSVNUOwotICB9Ci0KLSAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRl
ciBydW50aW1lcy4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBMYXp5U3RyaW5nTGlzdCBFTVBUWSA9
IEVNUFRZX0xJU1Q7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBMaXN0PE9iamVjdD4gbGlzdDsKLQotICBw
dWJsaWMgTGF6eVN0cmluZ0FycmF5TGlzdCgpIHsKLSAgICB0aGlzKERFRkFVTFRfQ0FQQUNJVFkp
OwotICB9Ci0KLSAgcHVibGljIExhenlTdHJpbmdBcnJheUxpc3QoaW50IGludGlhbENhcGFjaXR5
KSB7Ci0gICAgdGhpcyhuZXcgQXJyYXlMaXN0PE9iamVjdD4oaW50aWFsQ2FwYWNpdHkpKTsKLSAg
fQotCi0gIHB1YmxpYyBMYXp5U3RyaW5nQXJyYXlMaXN0KExhenlTdHJpbmdMaXN0IGZyb20pIHsK
LSAgICBsaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KGZyb20uc2l6ZSgpKTsKLSAgICBhZGRB
bGwoZnJvbSk7Ci0gIH0KLQotICBwdWJsaWMgTGF6eVN0cmluZ0FycmF5TGlzdChMaXN0PFN0cmlu
Zz4gZnJvbSkgewotICAgIHRoaXMobmV3IEFycmF5TGlzdDxPYmplY3Q+KGZyb20pKTsKLSAgfQot
ICAKLSAgcHJpdmF0ZSBMYXp5U3RyaW5nQXJyYXlMaXN0KEFycmF5TGlzdDxPYmplY3Q+IGxpc3Qp
IHsKLSAgICB0aGlzLmxpc3QgPSBsaXN0OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBM
YXp5U3RyaW5nQXJyYXlMaXN0IG11dGFibGVDb3B5V2l0aENhcGFjaXR5KGludCBjYXBhY2l0eSkg
ewotICAgIGlmIChjYXBhY2l0eSA8IHNpemUoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxB
cmd1bWVudEV4Y2VwdGlvbigpOwotICAgIH0KLSAgICBBcnJheUxpc3Q8T2JqZWN0PiBuZXdMaXN0
ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KGNhcGFjaXR5KTsKLSAgICBuZXdMaXN0LmFkZEFsbChs
aXN0KTsKLSAgICByZXR1cm4gbmV3IExhenlTdHJpbmdBcnJheUxpc3QobmV3TGlzdCk7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFN0cmluZyBnZXQoaW50IGluZGV4KSB7Ci0gICAgT2Jq
ZWN0IG8gPSBsaXN0LmdldChpbmRleCk7Ci0gICAgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsK
LSAgICAgIHJldHVybiAoU3RyaW5nKSBvOwotICAgIH0gZWxzZSBpZiAobyBpbnN0YW5jZW9mIEJ5
dGVTdHJpbmcpIHsKLSAgICAgIEJ5dGVTdHJpbmcgYnMgPSAoQnl0ZVN0cmluZykgbzsKLSAgICAg
IFN0cmluZyBzID0gYnMudG9TdHJpbmdVdGY4KCk7Ci0gICAgICBpZiAoYnMuaXNWYWxpZFV0Zjgo
KSkgewotICAgICAgICBsaXN0LnNldChpbmRleCwgcyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
czsKLSAgICB9IGVsc2UgewotICAgICAgYnl0ZVtdIGJhID0gKGJ5dGVbXSkgbzsKLSAgICAgIFN0
cmluZyBzID0gSW50ZXJuYWwudG9TdHJpbmdVdGY4KGJhKTsKLSAgICAgIGlmIChJbnRlcm5hbC5p
c1ZhbGlkVXRmOChiYSkpIHsKLSAgICAgICAgbGlzdC5zZXQoaW5kZXgsIHMpOwotICAgICAgfQot
ICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQg
c2l6ZSgpIHsKLSAgICByZXR1cm4gbGlzdC5zaXplKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIFN0cmluZyBzZXQoaW50IGluZGV4LCBTdHJpbmcgcykgewotICAgIGVuc3VyZUlzTXV0
YWJsZSgpOwotICAgIE9iamVjdCBvID0gbGlzdC5zZXQoaW5kZXgsIHMpOwotICAgIHJldHVybiBh
c1N0cmluZyhvKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBhZGQoaW50IGlu
ZGV4LCBTdHJpbmcgZWxlbWVudCkgewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIGxpc3Qu
YWRkKGluZGV4LCBlbGVtZW50KTsKLSAgICBtb2RDb3VudCsrOwotICB9Ci0gIAotICBwcml2YXRl
IHZvaWQgYWRkKGludCBpbmRleCwgQnl0ZVN0cmluZyBlbGVtZW50KSB7Ci0gICAgZW5zdXJlSXNN
dXRhYmxlKCk7Ci0gICAgbGlzdC5hZGQoaW5kZXgsIGVsZW1lbnQpOwotICAgIG1vZENvdW50Kys7
Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBhZGQoaW50IGluZGV4LCBieXRlW10gZWxlbWVudCkg
ewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIGxpc3QuYWRkKGluZGV4LCBlbGVtZW50KTsK
LSAgICBtb2RDb3VudCsrOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGFk
ZEFsbChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBTdHJpbmc+IGMpIHsKLSAgICAvLyBUaGUgZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbiBvZiBBYnN0cmFjdENvbGxlY3Rpb24uYWRkQWxsKENvbGxlY3Rpb24p
Ci0gICAgLy8gZGVsZWdhdGVzIHRvIGFkZChPYmplY3QpLiBUaGlzIGltcGxlbWVudGF0aW9uIGlu
c3RlYWQgZGVsZWdhdGVzIHRvCi0gICAgLy8gYWRkQWxsKGludCwgQ29sbGVjdGlvbiksIHdoaWNo
IG1ha2VzIGEgc3BlY2lhbCBjYXNlIGZvciBDb2xsZWN0aW9ucwotICAgIC8vIHdoaWNoIGFyZSBp
bnN0YW5jZXMgb2YgTGF6eVN0cmluZ0xpc3QuCi0gICAgcmV0dXJuIGFkZEFsbChzaXplKCksIGMp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGFkZEFsbChpbnQgaW5kZXgs
IENvbGxlY3Rpb248PyBleHRlbmRzIFN0cmluZz4gYykgewotICAgIGVuc3VyZUlzTXV0YWJsZSgp
OwotICAgIC8vIFdoZW4gY29weWluZyBmcm9tIGFub3RoZXIgTGF6eVN0cmluZ0xpc3QsIGRpcmVj
dGx5IGNvcHkgdGhlIHVuZGVybHlpbmcKLSAgICAvLyBlbGVtZW50cyByYXRoZXIgdGhhbiBmb3Jj
aW5nIGVhY2ggZWxlbWVudCB0byBiZSBkZWNvZGVkIHRvIGEgU3RyaW5nLgotICAgIENvbGxlY3Rp
b248Pz4gY29sbGVjdGlvbiA9IGMgaW5zdGFuY2VvZiBMYXp5U3RyaW5nTGlzdAotICAgICAgICA/
ICgoTGF6eVN0cmluZ0xpc3QpIGMpLmdldFVuZGVybHlpbmdFbGVtZW50cygpIDogYzsKLSAgICBi
b29sZWFuIHJldCA9IGxpc3QuYWRkQWxsKGluZGV4LCBjb2xsZWN0aW9uKTsKLSAgICBtb2RDb3Vu
dCsrOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xl
YW4gYWRkQWxsQnl0ZVN0cmluZyhDb2xsZWN0aW9uPD8gZXh0ZW5kcyBCeXRlU3RyaW5nPiB2YWx1
ZXMpIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICBib29sZWFuIHJldCA9IGxpc3QuYWRk
QWxsKHZhbHVlcyk7Ci0gICAgbW9kQ291bnQrKzsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGFkZEFsbEJ5dGVBcnJheShDb2xsZWN0aW9uPGJ5
dGVbXT4gYykgewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIGJvb2xlYW4gcmV0ID0gbGlz
dC5hZGRBbGwoYyk7Ci0gICAgbW9kQ291bnQrKzsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBTdHJpbmcgcmVtb3ZlKGludCBpbmRleCkgewotICAgIGVuc3Vy
ZUlzTXV0YWJsZSgpOwotICAgIE9iamVjdCBvID0gbGlzdC5yZW1vdmUoaW5kZXgpOwotICAgIG1v
ZENvdW50Kys7Ci0gICAgcmV0dXJuIGFzU3RyaW5nKG8pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIGNsZWFyKCkgewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIGxpc3Qu
Y2xlYXIoKTsKLSAgICBtb2RDb3VudCsrOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIGFkZChCeXRlU3RyaW5nIGVsZW1lbnQpIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAg
ICBsaXN0LmFkZChlbGVtZW50KTsKLSAgICBtb2RDb3VudCsrOwotICB9Ci0gIAotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgYWRkKGJ5dGVbXSBlbGVtZW50KSB7Ci0gICAgZW5zdXJlSXNNdXRh
YmxlKCk7Ci0gICAgbGlzdC5hZGQoZWxlbWVudCk7Ci0gICAgbW9kQ291bnQrKzsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgT2JqZWN0IGdldFJhdyhpbnQgaW5kZXgpIHsKLSAgICByZXR1
cm4gbGlzdC5nZXQoaW5kZXgpOwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIEJ5dGVT
dHJpbmcgZ2V0Qnl0ZVN0cmluZyhpbnQgaW5kZXgpIHsKLSAgICBPYmplY3QgbyA9IGxpc3QuZ2V0
KGluZGV4KTsKLSAgICBCeXRlU3RyaW5nIGIgPSBhc0J5dGVTdHJpbmcobyk7Ci0gICAgaWYgKGIg
IT0gbykgewotICAgICAgbGlzdC5zZXQoaW5kZXgsIGIpOwotICAgIH0KLSAgICByZXR1cm4gYjsK
LSAgfQotICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBieXRlW10gZ2V0Qnl0ZUFycmF5KGludCBp
bmRleCkgewotICAgIE9iamVjdCBvID0gbGlzdC5nZXQoaW5kZXgpOwotICAgIGJ5dGVbXSBiID0g
YXNCeXRlQXJyYXkobyk7Ci0gICAgaWYgKGIgIT0gbykgewotICAgICAgbGlzdC5zZXQoaW5kZXgs
IGIpOwotICAgIH0KLSAgICByZXR1cm4gYjsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBzZXQoaW50IGluZGV4LCBCeXRlU3RyaW5nIHMpIHsKLSAgICBzZXRBbmRSZXR1cm4oaW5k
ZXgsIHMpOwotICB9Ci0gIAotICBwcml2YXRlIE9iamVjdCBzZXRBbmRSZXR1cm4oaW50IGluZGV4
LCBCeXRlU3RyaW5nIHMpIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICByZXR1cm4gbGlz
dC5zZXQoaW5kZXgsIHMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNldChp
bnQgaW5kZXgsIGJ5dGVbXSBzKSB7Ci0gICAgc2V0QW5kUmV0dXJuKGluZGV4LCBzKTsKLSAgfQot
ICAKLSAgcHJpdmF0ZSBPYmplY3Qgc2V0QW5kUmV0dXJuKGludCBpbmRleCwgYnl0ZVtdIHMpIHsK
LSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICByZXR1cm4gbGlzdC5zZXQoaW5kZXgsIHMpOwot
ICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFzU3RyaW5nKE9iamVjdCBvKSB7Ci0gICAg
aWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgIHJldHVybiAoU3RyaW5nKSBvOwotICAg
IH0gZWxzZSBpZiAobyBpbnN0YW5jZW9mIEJ5dGVTdHJpbmcpIHsKLSAgICAgIHJldHVybiAoKEJ5
dGVTdHJpbmcpIG8pLnRvU3RyaW5nVXRmOCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4g
SW50ZXJuYWwudG9TdHJpbmdVdGY4KChieXRlW10pIG8pOwotICAgIH0KLSAgfQotICAKLSAgcHJp
dmF0ZSBzdGF0aWMgQnl0ZVN0cmluZyBhc0J5dGVTdHJpbmcoT2JqZWN0IG8pIHsKLSAgICBpZiAo
byBpbnN0YW5jZW9mIEJ5dGVTdHJpbmcpIHsKLSAgICAgIHJldHVybiAoQnl0ZVN0cmluZykgbzsK
LSAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgIHJldHVybiBCeXRl
U3RyaW5nLmNvcHlGcm9tVXRmOCgoU3RyaW5nKSBvKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0
dXJuIEJ5dGVTdHJpbmcuY29weUZyb20oKGJ5dGVbXSkgbyk7Ci0gICAgfQotICB9Ci0gIAotICBw
cml2YXRlIHN0YXRpYyBieXRlW10gYXNCeXRlQXJyYXkoT2JqZWN0IG8pIHsKLSAgICBpZiAobyBp
bnN0YW5jZW9mIGJ5dGVbXSkgewotICAgICAgcmV0dXJuIChieXRlW10pIG87Ci0gICAgfSBlbHNl
IGlmIChvIGluc3RhbmNlb2YgU3RyaW5nKSB7Ci0gICAgICByZXR1cm4gSW50ZXJuYWwudG9CeXRl
QXJyYXkoKFN0cmluZykgbyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAoKEJ5dGVTdHJp
bmcpIG8pLnRvQnl0ZUFycmF5KCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyBMaXN0PD8+IGdldFVuZGVybHlpbmdFbGVtZW50cygpIHsKLSAgICByZXR1cm4gQ29sbGVjdGlv
bnMudW5tb2RpZmlhYmxlTGlzdChsaXN0KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBtZXJnZUZyb20oTGF6eVN0cmluZ0xpc3Qgb3RoZXIpIHsKLSAgICBlbnN1cmVJc011dGFi
bGUoKTsKLSAgICBmb3IgKE9iamVjdCBvIDogb3RoZXIuZ2V0VW5kZXJseWluZ0VsZW1lbnRzKCkp
IHsKLSAgICAgIGlmIChvIGluc3RhbmNlb2YgYnl0ZVtdKSB7Ci0gICAgICAgIGJ5dGVbXSBiID0g
KGJ5dGVbXSkgbzsKLSAgICAgICAgLy8gQnl0ZSBhcnJheSdzIGNvbnRlbnQgaXMgbXV0YWJsZSBz
byB0aGV5IHNob3VsZCBiZSBjb3BpZWQgcmF0aGVyIHRoYW4KLSAgICAgICAgLy8gc2hhcmVkIHdo
ZW4gbWVyZ2luZyBmcm9tIG9uZSBtZXNzYWdlIHRvIGFub3RoZXIuCi0gICAgICAgIGxpc3QuYWRk
KEFycmF5cy5jb3B5T2YoYiwgYi5sZW5ndGgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGxp
c3QuYWRkKG8pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNz
IEJ5dGVBcnJheUxpc3RWaWV3IGV4dGVuZHMgQWJzdHJhY3RMaXN0PGJ5dGVbXT4KLSAgICAgIGlt
cGxlbWVudHMgUmFuZG9tQWNjZXNzIHsKLSAgICBwcml2YXRlIGZpbmFsIExhenlTdHJpbmdBcnJh
eUxpc3QgbGlzdDsKLSAgICAKLSAgICBCeXRlQXJyYXlMaXN0VmlldyhMYXp5U3RyaW5nQXJyYXlM
aXN0IGxpc3QpIHsKLSAgICAgIHRoaXMubGlzdCA9IGxpc3Q7Ci0gICAgfQotICAgIAotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBieXRlW10gZ2V0KGludCBpbmRleCkgewotICAgICAgcmV0dXJu
IGxpc3QuZ2V0Qnl0ZUFycmF5KGluZGV4KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgaW50IHNpemUoKSB7Ci0gICAgICByZXR1cm4gbGlzdC5zaXplKCk7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJ5dGVbXSBzZXQoaW50IGluZGV4LCBieXRlW10gcykg
ewotICAgICAgT2JqZWN0IG8gPSBsaXN0LnNldEFuZFJldHVybihpbmRleCwgcyk7Ci0gICAgICBt
b2RDb3VudCsrOwotICAgICAgcmV0dXJuIGFzQnl0ZUFycmF5KG8pOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGFkZChpbnQgaW5kZXgsIGJ5dGVbXSBzKSB7Ci0gICAg
ICBsaXN0LmFkZChpbmRleCwgcyk7Ci0gICAgICBtb2RDb3VudCsrOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBieXRlW10gcmVtb3ZlKGludCBpbmRleCkgewotICAgICAgT2Jq
ZWN0IG8gPSBsaXN0LnJlbW92ZShpbmRleCk7Ci0gICAgICBtb2RDb3VudCsrOwotICAgICAgcmV0
dXJuIGFzQnl0ZUFycmF5KG8pOwotICAgIH0KLSAgfQotICAKLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyBMaXN0PGJ5dGVbXT4gYXNCeXRlQXJyYXlMaXN0KCkgewotICAgIHJldHVybiBuZXcgQnl0ZUFy
cmF5TGlzdFZpZXcodGhpcyk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBCeXRlU3Ry
aW5nTGlzdFZpZXcgZXh0ZW5kcyBBYnN0cmFjdExpc3Q8Qnl0ZVN0cmluZz4KLSAgICAgIGltcGxl
bWVudHMgUmFuZG9tQWNjZXNzIHsKLSAgICBwcml2YXRlIGZpbmFsIExhenlTdHJpbmdBcnJheUxp
c3QgbGlzdDsKLQotICAgIEJ5dGVTdHJpbmdMaXN0VmlldyhMYXp5U3RyaW5nQXJyYXlMaXN0IGxp
c3QpIHsKLSAgICAgIHRoaXMubGlzdCA9IGxpc3Q7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIEJ5dGVTdHJpbmcgZ2V0KGludCBpbmRleCkgewotICAgICAgcmV0dXJuIGxpc3Qu
Z2V0Qnl0ZVN0cmluZyhpbmRleCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IGludCBzaXplKCkgewotICAgICAgcmV0dXJuIGxpc3Quc2l6ZSgpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBCeXRlU3RyaW5nIHNldChpbnQgaW5kZXgsIEJ5dGVTdHJpbmcg
cykgewotICAgICAgT2JqZWN0IG8gPSBsaXN0LnNldEFuZFJldHVybihpbmRleCwgcyk7Ci0gICAg
ICBtb2RDb3VudCsrOwotICAgICAgcmV0dXJuIGFzQnl0ZVN0cmluZyhvKTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhZGQoaW50IGluZGV4LCBCeXRlU3RyaW5nIHMp
IHsKLSAgICAgIGxpc3QuYWRkKGluZGV4LCBzKTsKLSAgICAgIG1vZENvdW50Kys7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ5dGVTdHJpbmcgcmVtb3ZlKGludCBpbmRleCkg
ewotICAgICAgT2JqZWN0IG8gPSBsaXN0LnJlbW92ZShpbmRleCk7Ci0gICAgICBtb2RDb3VudCsr
OwotICAgICAgcmV0dXJuIGFzQnl0ZVN0cmluZyhvKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIExpc3Q8Qnl0ZVN0cmluZz4gYXNCeXRlU3RyaW5nTGlzdCgpIHsKLSAgICBy
ZXR1cm4gbmV3IEJ5dGVTdHJpbmdMaXN0Vmlldyh0aGlzKTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgTGF6eVN0cmluZ0xpc3QgZ2V0VW5tb2RpZmlhYmxlVmlldygpIHsKLSAgICBpZiAo
aXNNb2RpZmlhYmxlKCkpIHsKLSAgICAgIHJldHVybiBuZXcgVW5tb2RpZmlhYmxlTGF6eVN0cmlu
Z0xpc3QodGhpcyk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5U3RyaW5n
TGlzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xh
enlTdHJpbmdMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZWVkY2Ex
ZDM4MzlmMjM5ZGUzYzEyOWQwM2FmNDI1OGI0NDg5MjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL0xhenlTdHJpbmdMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdv
b2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGph
dmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEFuIGludGVyZmFjZSBleHRlbmRpbmcge0Bjb2RlIExp
c3Q8U3RyaW5nPn0gdGhhdCBhbHNvIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUKLSAqIGl0ZW1zIG9m
IHRoZSBsaXN0IGFzIFVURjgtZW5jb2RlZCBCeXRlU3RyaW5nIG9yIGJ5dGVbXSBvYmplY3RzLiBU
aGlzIGlzCi0gKiB1c2VkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgaW1wbGVtZW50YXRpb24gdG8g
c3VwcG9ydCBsYXppbHkgY29udmVydGluZyBieXRlcwotICogcGFyc2VkIG92ZXIgdGhlIHdpcmUg
dG8gU3RyaW5nIG9iamVjdHMgdW50aWwgbmVlZGVkIGFuZCBhbHNvIGluY3JlYXNlcyB0aGUKLSAq
IGVmZmljaWVuY3kgb2Ygc2VyaWFsaXphdGlvbiBpZiB0aGUgU3RyaW5nIHdhcyBuZXZlciByZXF1
ZXN0ZWQgYXMgdGhlCi0gKiBCeXRlU3RyaW5nIG9yIGJ5dGVbXSBpcyBhbHJlYWR5IGNhY2hlZC4g
VGhlIEJ5dGVTdHJpbmcgbWV0aG9kcyBhcmUgdXNlZCBpbgotICogaW1tdXRhYmxlIEFQSSBvbmx5
IGFuZCBieXRlW10gbWV0aG9kcyB1c2VkIGluIG11dGFibGUgQVBJIG9ubHkgZm9yIHRoZXkgdXNl
Ci0gKiBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIGZvciBzdHJpbmcvYnl0ZXMgZmllbGRzLgot
ICoKLSAqIEBhdXRob3Igam9ucEBnb29nbGUuY29tIChKb24gUGVybG93KQotICovCi1wdWJsaWMg
aW50ZXJmYWNlIExhenlTdHJpbmdMaXN0IGV4dGVuZHMgUHJvdG9jb2xTdHJpbmdMaXN0IHsKLQot
ICAvKioKLSAgICogUmV0dXJucyB0aGUgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9u
IGluIHRoaXMgbGlzdCBhcyBhIEJ5dGVTdHJpbmcuCi0gICAqCi0gICAqIEBwYXJhbSBpbmRleCBp
bmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4KLSAgICogQHJldHVybiB0aGUgZWxlbWVudCBh
dCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgbGlzdAotICAgKiBAdGhyb3dzIEluZGV4
T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZQotICAgKiAg
ICAgICAgICh7QGNvZGUgaW5kZXggPCAwIHx8IGluZGV4ID49IHNpemUoKX0pCi0gICAqLwotICBC
eXRlU3RyaW5nIGdldEJ5dGVTdHJpbmcoaW50IGluZGV4KTsKLQotICAvKioKLSAgICogUmV0dXJu
cyB0aGUgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgbGlzdCBhcyBh
biBPYmplY3QKLSAgICogdGhhdCB3aWxsIGVpdGhlciBiZSBhIFN0cmluZyBvciBhIEJ5dGVTdHJp
bmcuCi0gICAqCi0gICAqIEBwYXJhbSBpbmRleCBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1
cm4KLSAgICogQHJldHVybiB0aGUgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGlu
IHRoaXMgbGlzdAotICAgKiBAdGhyb3dzIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgdGhl
IGluZGV4IGlzIG91dCBvZiByYW5nZQotICAgKiAgICAgICAgICh7QGNvZGUgaW5kZXggPCAwIHx8
IGluZGV4ID49IHNpemUoKX0pCi0gICAqLwotICBPYmplY3QgZ2V0UmF3KGludCBpbmRleCk7Ci0K
LSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlv
biBpbiB0aGlzIGxpc3QgYXMgYnl0ZVtdLgotICAgKgotICAgKiBAcGFyYW0gaW5kZXggaW5kZXgg
b2YgdGhlIGVsZW1lbnQgdG8gcmV0dXJuCi0gICAqIEByZXR1cm4gdGhlIGVsZW1lbnQgYXQgdGhl
IHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlzIGxpc3QKLSAgICogQHRocm93cyBJbmRleE91dE9m
Qm91bmRzRXhjZXB0aW9uIGlmIHRoZSBpbmRleCBpcyBvdXQgb2YgcmFuZ2UKLSAgICogICAgICAg
ICAoe0Bjb2RlIGluZGV4IDwgMCB8fCBpbmRleCA+PSBzaXplKCl9KQotICAgKi8KLSAgYnl0ZVtd
IGdldEJ5dGVBcnJheShpbnQgaW5kZXgpOwotCi0gIC8qKgotICAgKiBBcHBlbmRzIHRoZSBzcGVj
aWZpZWQgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoaXMgbGlzdCAob3B0aW9uYWwKLSAgICogb3Bl
cmF0aW9uKS4KLSAgICoKLSAgICogQHBhcmFtIGVsZW1lbnQgZWxlbWVudCB0byBiZSBhcHBlbmRl
ZCB0byB0aGlzIGxpc3QKLSAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlv
biBpZiB0aGUgPHR0PmFkZDwvdHQ+IG9wZXJhdGlvbgotICAgKiAgICAgICAgIGlzIG5vdCBzdXBw
b3J0ZWQgYnkgdGhpcyBsaXN0Ci0gICAqLwotICB2b2lkIGFkZChCeXRlU3RyaW5nIGVsZW1lbnQp
OwotCi0gIC8qKgotICAgKiBBcHBlbmRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCB0byB0aGUgZW5k
IG9mIHRoaXMgbGlzdCAob3B0aW9uYWwKLSAgICogb3BlcmF0aW9uKS4KLSAgICoKLSAgICogQHBh
cmFtIGVsZW1lbnQgZWxlbWVudCB0byBiZSBhcHBlbmRlZCB0byB0aGlzIGxpc3QKLSAgICogQHRo
cm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiB0aGUgPHR0PmFkZDwvdHQ+IG9w
ZXJhdGlvbgotICAgKiAgICAgICAgIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBsaXN0Ci0gICAq
LwotICB2b2lkIGFkZChieXRlW10gZWxlbWVudCk7Ci0KLSAgLyoqCi0gICAqIFJlcGxhY2VzIHRo
ZSBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gdGhpcyBsaXN0IHdpdGggdGhl
Ci0gICAqIHNwZWNpZmllZCBlbGVtZW50IChvcHRpb25hbCBvcGVyYXRpb24pLgotICAgKgotICAg
KiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmVwbGFjZQotICAgKiBAcGFy
YW0gZWxlbWVudCB0aGUgZWxlbWVudCB0byBiZSBzdG9yZWQgYXQgdGhlIHNwZWNpZmllZCBwb3Np
dGlvbgotICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGlmIHRoZSA8
dHQ+c2V0PC90dD4gb3BlcmF0aW9uCi0gICAqICAgICAgICAgaXMgbm90IHN1cHBvcnRlZCBieSB0
aGlzIGxpc3QKLSAgICogICAgICAgICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIHRoZSBp
bmRleCBpcyBvdXQgb2YgcmFuZ2UKLSAgICogICAgICAgICAoe0Bjb2RlIGluZGV4IDwgMCB8fCBp
bmRleCA+PSBzaXplKCl9KQotICAgKi8KLSAgdm9pZCBzZXQoaW50IGluZGV4LCBCeXRlU3RyaW5n
IGVsZW1lbnQpOwotICAKLSAgLyoqCi0gICAqIFJlcGxhY2VzIHRoZSBlbGVtZW50IGF0IHRoZSBz
cGVjaWZpZWQgcG9zaXRpb24gaW4gdGhpcyBsaXN0IHdpdGggdGhlCi0gICAqIHNwZWNpZmllZCBl
bGVtZW50IChvcHRpb25hbCBvcGVyYXRpb24pLgotICAgKgotICAgKiBAcGFyYW0gaW5kZXggaW5k
ZXggb2YgdGhlIGVsZW1lbnQgdG8gcmVwbGFjZQotICAgKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxl
bWVudCB0byBiZSBzdG9yZWQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbgotICAgKiBAdGhyb3dz
IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGlmIHRoZSA8dHQ+c2V0PC90dD4gb3BlcmF0
aW9uCi0gICAqICAgICAgICAgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGxpc3QKLSAgICogICAg
ICAgICBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIHRoZSBpbmRleCBpcyBvdXQgb2YgcmFu
Z2UKLSAgICogICAgICAgICAoe0Bjb2RlIGluZGV4IDwgMCB8fCBpbmRleCA+PSBzaXplKCl9KQot
ICAgKi8KLSAgdm9pZCBzZXQoaW50IGluZGV4LCBieXRlW10gZWxlbWVudCk7Ci0KLSAgLyoqCi0g
ICAqIEFwcGVuZHMgYWxsIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgQnl0ZVN0cmluZyBjb2xs
ZWN0aW9uIHRvIHRoZSBlbmQgb2YKLSAgICogdGhpcyBsaXN0LgotICAgKgotICAgKiBAcGFyYW0g
YyBjb2xsZWN0aW9uIHdob3NlIGVsZW1lbnRzIGFyZSB0byBiZSBhZGRlZCB0byB0aGlzIGxpc3QK
LSAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgbGlzdCBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRo
ZSBjYWxsCi0gICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gaWYgdGhl
IDx0dD5hZGRBbGxCeXRlU3RyaW5nPC90dD4KLSAgICogICAgICAgICBvcGVyYXRpb24gaXMgbm90
IHN1cHBvcnRlZCBieSB0aGlzIGxpc3QKLSAgICovCi0gIGJvb2xlYW4gYWRkQWxsQnl0ZVN0cmlu
ZyhDb2xsZWN0aW9uPD8gZXh0ZW5kcyBCeXRlU3RyaW5nPiBjKTsKLQotICAvKioKLSAgICogQXBw
ZW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBieXRlW10gY29sbGVjdGlvbiB0byB0
aGUgZW5kIG9mCi0gICAqIHRoaXMgbGlzdC4KLSAgICoKLSAgICogQHBhcmFtIGMgY29sbGVjdGlv
biB3aG9zZSBlbGVtZW50cyBhcmUgdG8gYmUgYWRkZWQgdG8gdGhpcyBsaXN0Ci0gICAqIEByZXR1
cm4gdHJ1ZSBpZiB0aGlzIGxpc3QgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUgY2FsbAotICAg
KiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGlmIHRoZSA8dHQ+YWRkQWxs
Qnl0ZUFycmF5PC90dD4KLSAgICogICAgICAgICBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBi
eSB0aGlzIGxpc3QKLSAgICovCi0gIGJvb2xlYW4gYWRkQWxsQnl0ZUFycmF5KENvbGxlY3Rpb248
Ynl0ZVtdPiBjKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhbiB1bm1vZGlmaWFibGUgTGlzdCBv
ZiB0aGUgdW5kZXJseWluZyBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBpcwotICAgKiBlaXRoZXIg
YSB7QGNvZGUgU3RyaW5nfSBvciBpdHMgZXF1aXZhbGVudCBVVEYtOCBlbmNvZGVkIHtAY29kZSBC
eXRlU3RyaW5nfQotICAgKiBvciBieXRlW10uIEl0IGlzIGFuIGVycm9yIGZvciB0aGUgY2FsbGVy
IHRvIG1vZGlmeSB0aGUgcmV0dXJuZWQKLSAgICogTGlzdCwgYW5kIGF0dGVtcHRpbmcgdG8gZG8g
c28gd2lsbCByZXN1bHQgaW4gYW4KLSAgICoge0BsaW5rIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhj
ZXB0aW9ufS4KLSAgICovCi0gIExpc3Q8Pz4gZ2V0VW5kZXJseWluZ0VsZW1lbnRzKCk7Ci0KLSAg
LyoqCi0gICAqIE1lcmdlcyBhbGwgZWxlbWVudHMgZnJvbSBhbm90aGVyIExhenlTdHJpbmdMaXN0
IGludG8gdGhpcyBvbmUuIFRoaXMgbWV0aG9kCi0gICAqIGRpZmZlcnMgZnJvbSB7QGxpbmsgI2Fk
ZEFsbChDb2xsZWN0aW9uKX0gb24gdGhhdCB1bmRlcmx5aW5nIGJ5dGUgYXJyYXlzIGFyZQotICAg
KiBjb3BpZWQgaW5zdGVhZCBvZiByZWZlcmVuY2Ugc2hhcmVkLiBJbW11dGFibGUgQVBJIGRvZXNu
J3QgbmVlZCB0byB1c2UgdGhpcwotICAgKiBtZXRob2QgYXMgYnl0ZVtdIGlzIG5vdCB1c2VkIHRo
ZXJlIGF0IGFsbC4KLSAgICovCi0gIHZvaWQgbWVyZ2VGcm9tKExhenlTdHJpbmdMaXN0IG90aGVy
KTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIG11dGFibGUgdmlldyBvZiB0aGlzIGxpc3QuIENo
YW5nZXMgdG8gdGhlIHZpZXcgd2lsbCBiZSBtYWRlIGludG8KLSAgICogdGhlIG9yaWdpbmFsIGxp
c3QuIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gbXV0YWJsZSBBUEkgb25seS4KLSAgICovCi0gIExp
c3Q8Ynl0ZVtdPiBhc0J5dGVBcnJheUxpc3QoKTsKLQotICAvKiogUmV0dXJucyBhbiB1bm1vZGlm
aWFibGUgdmlldyBvZiB0aGUgbGlzdC4gKi8KLSAgTGF6eVN0cmluZ0xpc3QgZ2V0VW5tb2RpZmlh
YmxlVmlldygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL0xvbmdBcnJheUxpc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEv
Y29tL2dvb2dsZS9wcm90b2J1Zi9Mb25nQXJyYXlMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJjNDQ3NWQxMWFhOTE2Y2Y3OTUyOWUxOGZhNjM2ZjI4ZWI3YmYzZTYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xvbmdBcnJheUxpc3QuamF2YQorKysgL2Rl
di9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgY29tLmdvb2dsZS5w
cm90b2J1Zi5JbnRlcm5hbC5Mb25nTGlzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1p
bXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbUFjY2Vz
czsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgTG9uZ0xpc3R9IG9uIHRv
cCBvZiBhIHByaW1pdGl2ZSBhcnJheS4KLSAqIAotICogQGF1dGhvciBkd2Vpc0Bnb29nbGUuY29t
IChEYW5pZWwgV2VpcykKLSAqLwotZmluYWwgY2xhc3MgTG9uZ0FycmF5TGlzdCBleHRlbmRzIEFi
c3RyYWN0UHJvdG9idWZMaXN0PExvbmc+IGltcGxlbWVudHMgTG9uZ0xpc3QsIFJhbmRvbUFjY2Vz
cyB7Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb25nQXJyYXlMaXN0IEVNUFRZX0xJU1Qg
PSBuZXcgTG9uZ0FycmF5TGlzdCgpOwotICBzdGF0aWMgewotICAgIEVNUFRZX0xJU1QubWFrZUlt
bXV0YWJsZSgpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIExvbmdBcnJheUxpc3QgZW1wdHlM
aXN0KCkgewotICAgIHJldHVybiBFTVBUWV9MSVNUOwotICB9Ci0gIAotICAvKioKLSAgICogVGhl
IGJhY2tpbmcgc3RvcmUgZm9yIHRoZSBsaXN0LgotICAgKi8KLSAgcHJpdmF0ZSBsb25nW10gYXJy
YXk7Ci0gIAotICAvKioKLSAgICogVGhlIHNpemUgb2YgdGhlIGxpc3QgZGlzdGluY3QgZnJvbSB0
aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4gVGhhdCBpcywgaXQgaXMgdGhlIG51bWJlciBvZgotICAg
KiBlbGVtZW50cyBzZXQgaW4gdGhlIGxpc3QuCi0gICAqLwotICBwcml2YXRlIGludCBzaXplOwot
Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgbmV3IG11dGFibGUge0Bjb2RlIExvbmdBcnJheUxp
c3R9IHdpdGggZGVmYXVsdCBjYXBhY2l0eS4KLSAgICovCi0gIExvbmdBcnJheUxpc3QoKSB7Ci0g
ICAgdGhpcyhuZXcgbG9uZ1tERUZBVUxUX0NBUEFDSVRZXSwgMCk7Ci0gIH0KLQotICAvKioKLSAg
ICogQ29uc3RydWN0cyBhIG5ldyBtdXRhYmxlIHtAY29kZSBMb25nQXJyYXlMaXN0fSBjb250YWlu
aW5nIHRoZSBzYW1lIGVsZW1lbnRzIGFzIHtAY29kZSBvdGhlcn0uCi0gICAqLwotICBwcml2YXRl
IExvbmdBcnJheUxpc3QobG9uZ1tdIGFycmF5LCBpbnQgc2l6ZSkgewotICAgIHRoaXMuYXJyYXkg
PSBhcnJheTsKLSAgICB0aGlzLnNpemUgPSBzaXplOwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAg
cHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7Ci0gICAgaWYgKHRoaXMgPT0gbykgewot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICghKG8gaW5zdGFuY2VvZiBJbnRBcnJh
eUxpc3QpKSB7Ci0gICAgICByZXR1cm4gc3VwZXIuZXF1YWxzKG8pOwotICAgIH0KLSAgICBMb25n
QXJyYXlMaXN0IG90aGVyID0gKExvbmdBcnJheUxpc3QpIG87Ci0gICAgaWYgKHNpemUgIT0gb3Ro
ZXIuc2l6ZSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBmaW5hbCBs
b25nW10gYXJyID0gb3RoZXIuYXJyYXk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgIGlmIChhcnJheVtpXSAhPSBhcnJbaV0pIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIGludCByZXN1bHQgPSAxOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICByZXN1bHQgPSAoMzEg
KiByZXN1bHQpICsgSW50ZXJuYWwuaGFzaExvbmcoYXJyYXlbaV0pOwotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBMb25nTGlzdCBtdXRhYmxl
Q29weVdpdGhDYXBhY2l0eShpbnQgY2FwYWNpdHkpIHsKLSAgICBpZiAoY2FwYWNpdHkgPCBzaXpl
KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgfQot
ICAgIHJldHVybiBuZXcgTG9uZ0FycmF5TGlzdChBcnJheXMuY29weU9mKGFycmF5LCBjYXBhY2l0
eSksIHNpemUpOwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIExvbmcgZ2V0KGludCBp
bmRleCkgewotICAgIHJldHVybiBnZXRMb25nKGluZGV4KTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgbG9uZyBnZXRMb25nKGludCBpbmRleCkgewotICAgIGVuc3VyZUluZGV4SW5SYW5n
ZShpbmRleCk7Ci0gICAgcmV0dXJuIGFycmF5W2luZGV4XTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgaW50IHNpemUoKSB7Ci0gICAgcmV0dXJuIHNpemU7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIExvbmcgc2V0KGludCBpbmRleCwgTG9uZyBlbGVtZW50KSB7Ci0gICAgcmV0
dXJuIHNldExvbmcoaW5kZXgsIGVsZW1lbnQpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyBsb25nIHNldExvbmcoaW50IGluZGV4LCBsb25nIGVsZW1lbnQpIHsKLSAgICBlbnN1cmVJc011
dGFibGUoKTsKLSAgICBlbnN1cmVJbmRleEluUmFuZ2UoaW5kZXgpOwotICAgIGxvbmcgcHJldmlv
dXNWYWx1ZSA9IGFycmF5W2luZGV4XTsKLSAgICBhcnJheVtpbmRleF0gPSBlbGVtZW50OwotICAg
IHJldHVybiBwcmV2aW91c1ZhbHVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IGFkZChpbnQgaW5kZXgsIExvbmcgZWxlbWVudCkgewotICAgIGFkZExvbmcoaW5kZXgsIGVsZW1l
bnQpOwotICB9Ci0KLSAgLyoqCi0gICAqIExpa2Uge0BsaW5rICNhZGQoTG9uZyl9IGJ1dCBtb3Jl
IGVmZmljaWVudCBpbiB0aGF0IGl0IGRvZXNuJ3QgYm94IHRoZSBlbGVtZW50LgotICAgKi8KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGFkZExvbmcobG9uZyBlbGVtZW50KSB7Ci0gICAgYWRk
TG9uZyhzaXplLCBlbGVtZW50KTsKLSAgfQotCi0gIC8qKgotICAgKiBMaWtlIHtAbGluayAjYWRk
KGludCwgTG9uZyl9IGJ1dCBtb3JlIGVmZmljaWVudCBpbiB0aGF0IGl0IGRvZXNuJ3QgYm94IHRo
ZSBlbGVtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGFkZExvbmcoaW50IGluZGV4LCBsb25n
IGVsZW1lbnQpIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICBpZiAoaW5kZXggPCAwIHx8
IGluZGV4ID4gc2l6ZSkgewotICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRp
b24obWFrZU91dE9mQm91bmRzRXhjZXB0aW9uTWVzc2FnZShpbmRleCkpOwotICAgIH0KLSAgICAK
LSAgICBpZiAoc2l6ZSA8IGFycmF5Lmxlbmd0aCkgewotICAgICAgLy8gU2hpZnQgZXZlcnl0aGlu
ZyBvdmVyIHRvIG1ha2Ugcm9vbQotICAgICAgU3lzdGVtLmFycmF5Y29weShhcnJheSwgaW5kZXgs
IGFycmF5LCBpbmRleCArIDEsIHNpemUgLSBpbmRleCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8v
IFJlc2l6ZSB0byAxLjV4IHRoZSBzaXplCi0gICAgICBpbnQgbGVuZ3RoID0gKChzaXplICogMykg
LyAyKSArIDE7Ci0gICAgICBsb25nW10gbmV3QXJyYXkgPSBuZXcgbG9uZ1tsZW5ndGhdOwotICAg
ICAgCi0gICAgICAvLyBDb3B5IHRoZSBmaXJzdCBwYXJ0IGRpcmVjdGx5Ci0gICAgICBTeXN0ZW0u
YXJyYXljb3B5KGFycmF5LCAwLCBuZXdBcnJheSwgMCwgaW5kZXgpOwotICAgICAgCi0gICAgICAv
LyBDb3B5IHRoZSByZXN0IHNoaWZ0ZWQgb3ZlciBieSBvbmUgdG8gbWFrZSByb29tCi0gICAgICBT
eXN0ZW0uYXJyYXljb3B5KGFycmF5LCBpbmRleCwgbmV3QXJyYXksIGluZGV4ICsgMSwgc2l6ZSAt
IGluZGV4KTsKLSAgICAgIGFycmF5ID0gbmV3QXJyYXk7Ci0gICAgfQotCi0gICAgYXJyYXlbaW5k
ZXhdID0gZWxlbWVudDsKLSAgICBzaXplKys7Ci0gICAgbW9kQ291bnQrKzsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBhZGRBbGwoQ29sbGVjdGlvbjw/IGV4dGVuZHMgTG9u
Zz4gY29sbGVjdGlvbikgewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIAotICAgIGlmIChj
b2xsZWN0aW9uID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlv
bigpOwotICAgIH0KLSAgICAKLSAgICAvLyBXZSBzcGVjaWFsaXplIHdoZW4gYWRkaW5nIGFub3Ro
ZXIgTG9uZ0FycmF5TGlzdCB0byBhdm9pZCBib3hpbmcgZWxlbWVudHMuCi0gICAgaWYgKCEoY29s
bGVjdGlvbiBpbnN0YW5jZW9mIExvbmdBcnJheUxpc3QpKSB7Ci0gICAgICByZXR1cm4gc3VwZXIu
YWRkQWxsKGNvbGxlY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICBMb25nQXJyYXlMaXN0IGxpc3Qg
PSAoTG9uZ0FycmF5TGlzdCkgY29sbGVjdGlvbjsKLSAgICBpZiAobGlzdC5zaXplID09IDApIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaW50IG92ZXJmbG93ID0gSW50
ZWdlci5NQVhfVkFMVUUgLSBzaXplOwotICAgIGlmIChvdmVyZmxvdyA8IGxpc3Quc2l6ZSkgewot
ICAgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgcmVwcmVzZW50IGEgbGlzdCB0aGlzIGxhcmdlLgot
ICAgICAgdGhyb3cgbmV3IE91dE9mTWVtb3J5RXJyb3IoKTsKLSAgICB9Ci0gICAgCi0gICAgaW50
IG5ld1NpemUgPSBzaXplICsgbGlzdC5zaXplOwotICAgIGlmIChuZXdTaXplID4gYXJyYXkubGVu
Z3RoKSB7Ci0gICAgICBhcnJheSA9IEFycmF5cy5jb3B5T2YoYXJyYXksIG5ld1NpemUpOwotICAg
IH0KLSAgICAKLSAgICBTeXN0ZW0uYXJyYXljb3B5KGxpc3QuYXJyYXksIDAsIGFycmF5LCBzaXpl
LCBsaXN0LnNpemUpOwotICAgIHNpemUgPSBuZXdTaXplOwotICAgIG1vZENvdW50Kys7Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiByZW1v
dmUoT2JqZWN0IG8pIHsKLSAgICBlbnN1cmVJc011dGFibGUoKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNpemU7IGkrKykgewotICAgICAgaWYgKG8uZXF1YWxzKGFycmF5W2ldKSkgewotICAg
ICAgICBTeXN0ZW0uYXJyYXljb3B5KGFycmF5LCBpICsgMSwgYXJyYXksIGksIHNpemUgLSBpKTsK
LSAgICAgICAgc2l6ZS0tOwotICAgICAgICBtb2RDb3VudCsrOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBMb25nIHJlbW92ZShpbnQgaW5kZXgpIHsKLSAgICBlbnN1cmVJc011dGFibGUo
KTsKLSAgICBlbnN1cmVJbmRleEluUmFuZ2UoaW5kZXgpOwotICAgIGxvbmcgdmFsdWUgPSBhcnJh
eVtpbmRleF07Ci0gICAgU3lzdGVtLmFycmF5Y29weShhcnJheSwgaW5kZXggKyAxLCBhcnJheSwg
aW5kZXgsIHNpemUgLSBpbmRleCk7Ci0gICAgc2l6ZS0tOwotICAgIG1vZENvdW50Kys7Ci0gICAg
cmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIEVuc3VyZXMgdGhhdCB0aGUgcHJvdmlk
ZWQge0Bjb2RlIGluZGV4fSBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIHtAY29kZSBbMCwgc2l6ZV19
LiBUaHJvd3MgYW4KLSAgICoge0BsaW5rIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb259IGlmIGl0
IGlzIG5vdC4KLSAgICogCi0gICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggdG8gdmVyaWZ5IGlz
IGluIHJhbmdlCi0gICAqLwotICBwcml2YXRlIHZvaWQgZW5zdXJlSW5kZXhJblJhbmdlKGludCBp
bmRleCkgewotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc2l6ZSkgewotICAgICAgdGhy
b3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24obWFrZU91dE9mQm91bmRzRXhjZXB0aW9u
TWVzc2FnZShpbmRleCkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIG1ha2VPdXRP
ZkJvdW5kc0V4Y2VwdGlvbk1lc3NhZ2UoaW50IGluZGV4KSB7Ci0gICAgcmV0dXJuICJJbmRleDoi
ICsgaW5kZXggKyAiLCBTaXplOiIgKyBzaXplOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29y
ZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWFwRW50cnkuamF2YSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9j
b3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NYXBFbnRyeS5qYXZhCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTQxNGJiNDlhYmIwOWQ0NGI3MjkzM2M2ZTRiNWRk
MmRmOTE5ZjYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NYXBFbnRyeS5qYXZh
CisrKyAvZGV2L251bGwKQEAgLTEsNDMzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBjb20u
Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkRlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2ds
ZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5FbnVtVmFsdWVEZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5n
b29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yOwotCi1pbXBvcnQgamF2
YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQg
amF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotLyoqCi0gKiBJbXBs
ZW1lbnRzIE1hcEVudHJ5IG1lc3NhZ2VzLgotICogCi0gKiBJbiByZWZsZWN0aW9uIEFQSSwgbWFw
IGZpZWxkcyB3aWxsIGJlIHRyZWF0ZWQgYXMgcmVwZWF0ZWQgbWVzc2FnZSBmaWVsZHMgYW5kCi0g
KiBlYWNoIG1hcCBlbnRyeSBpcyBhY2Nlc3NlZCBhcyBhIG1lc3NhZ2UuIFRoaXMgTWFwRW50cnkg
Y2xhc3MgaXMgdXNlZCB0bwotICogcmVwcmVzZW50IHRoZXNlIG1hcCBlbnRyeSBtZXNzYWdlcyBp
biByZWZsZWN0aW9uIEFQSS4KLSAqIAotICogUHJvdG9idWYgaW50ZXJuYWwuIFVzZXJzIHNob3Vs
ZG4ndCB1c2UgdGhpcyBjbGFzcy4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIE1hcEVudHJ5PEss
IFY+IGV4dGVuZHMgQWJzdHJhY3RNZXNzYWdlIHsKLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTWV0
YWRhdGE8SywgVj4gewotICAgIHB1YmxpYyBmaW5hbCBEZXNjcmlwdG9yIGRlc2NyaXB0b3I7ICAK
LSAgICBwdWJsaWMgZmluYWwgTWFwRW50cnk8SywgVj4gZGVmYXVsdEluc3RhbmNlOwotICAgIHB1
YmxpYyBmaW5hbCBBYnN0cmFjdFBhcnNlcjxNYXBFbnRyeTxLLCBWPj4gcGFyc2VyOwotICAgIAot
ICAgIHB1YmxpYyBNZXRhZGF0YSgKLSAgICAgICAgZmluYWwgRGVzY3JpcHRvciBkZXNjcmlwdG9y
LCBmaW5hbCBNYXBFbnRyeTxLLCBWPiBkZWZhdWx0SW5zdGFuY2UpIHsKLSAgICAgIHRoaXMuZGVz
Y3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gICAgICB0aGlzLmRlZmF1bHRJbnN0YW5jZSA9IGRlZmF1
bHRJbnN0YW5jZTsKLSAgICAgIGZpbmFsIE1ldGFkYXRhPEssIFY+IHRoaXNNZXRhZGF0YSA9IHRo
aXM7Ci0gICAgICB0aGlzLnBhcnNlciA9IG5ldyBBYnN0cmFjdFBhcnNlcjxNYXBFbnRyeTxLLCBW
Pj4oKSB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgUGFyc2VyPE1hcEVudHJ5TGl0ZTxLLCBWPj4g
ZGF0YVBhcnNlciA9Ci0gICAgICAgICAgICBkZWZhdWx0SW5zdGFuY2UuZGF0YS5nZXRQYXJzZXJG
b3JUeXBlKCk7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgTWFwRW50cnk8Sywg
Vj4gcGFyc2VQYXJ0aWFsRnJvbSgKLSAgICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQs
IEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgICAgICAgIHRo
cm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgICAgIE1hcEVudHJ5
TGl0ZTxLLCBWPiBkYXRhID0KLSAgICAgICAgICAgICAgZGF0YVBhcnNlci5wYXJzZVBhcnRpYWxG
cm9tKGlucHV0LCBleHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBNYXBF
bnRyeTxLLCBWPih0aGlzTWV0YWRhdGEsIGRhdGEpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgfTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgZmluYWwgTWV0YWRhdGE8SywgVj4gbWV0
YWRhdGE7Ci0gIHByaXZhdGUgZmluYWwgTWFwRW50cnlMaXRlPEssIFY+IGRhdGE7Ci0gIAotICAv
KiogQ3JlYXRlIGEgZGVmYXVsdCBNYXBFbnRyeSBpbnN0YW5jZS4gKi8KLSAgcHJpdmF0ZSBNYXBF
bnRyeShEZXNjcmlwdG9yIGRlc2NyaXB0b3IsCi0gICAgICBXaXJlRm9ybWF0LkZpZWxkVHlwZSBr
ZXlUeXBlLCBLIGRlZmF1bHRLZXksCi0gICAgICBXaXJlRm9ybWF0LkZpZWxkVHlwZSB2YWx1ZVR5
cGUsIFYgZGVmYXVsdFZhbHVlKSB7Ci0gICAgdGhpcy5kYXRhID0gTWFwRW50cnlMaXRlLm5ld0Rl
ZmF1bHRJbnN0YW5jZSgKLSAgICAgICAga2V5VHlwZSwgZGVmYXVsdEtleSwgdmFsdWVUeXBlLCBk
ZWZhdWx0VmFsdWUpOwotICAgIHRoaXMubWV0YWRhdGEgPSBuZXcgTWV0YWRhdGE8SywgVj4oZGVz
Y3JpcHRvciwgdGhpcyk7IAotICB9Ci0gIAotICAvKiogQ3JlYXRlIGEgbmV3IE1hcEVudHJ5IG1l
c3NhZ2UuICovCi0gIHByaXZhdGUgTWFwRW50cnkoTWV0YWRhdGE8SywgVj4gbWV0YWRhdGEsIE1h
cEVudHJ5TGl0ZTxLLCBWPiBkYXRhKSB7Ci0gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhOwot
ICAgIHRoaXMuZGF0YSA9IGRhdGE7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSBkZWZh
dWx0IE1hcEVudHJ5IGluc3RhbmNlLiBBIGRlZmF1bHQgTWFwRW50cnkgaW5zdGFuY2Ugc2hvdWxk
IGJlCi0gICAqIGNyZWF0ZWQgb25seSBvbmNlIGZvciBlYWNoIG1hcCBlbnRyeSBtZXNzYWdlIHR5
cGUuIEdlbmVyYXRlZCBjb2RlIHNob3VsZAotICAgKiBzdG9yZSB0aGUgY3JlYXRlZCBkZWZhdWx0
IGluc3RhbmNlIGFuZCB1c2UgaXQgbGF0ZXIgdG8gY3JlYXRlIG5ldyBNYXBFbnRyeQotICAgKiBt
ZXNzYWdlcyBvZiB0aGUgc2FtZSB0eXBlLiAKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgPEssIFY+
IE1hcEVudHJ5PEssIFY+IG5ld0RlZmF1bHRJbnN0YW5jZSgKLSAgICAgIERlc2NyaXB0b3IgZGVz
Y3JpcHRvciwKLSAgICAgIFdpcmVGb3JtYXQuRmllbGRUeXBlIGtleVR5cGUsIEsgZGVmYXVsdEtl
eSwKLSAgICAgIFdpcmVGb3JtYXQuRmllbGRUeXBlIHZhbHVlVHlwZSwgViBkZWZhdWx0VmFsdWUp
IHsKLSAgICByZXR1cm4gbmV3IE1hcEVudHJ5PEssIFY+KAotICAgICAgICBkZXNjcmlwdG9yLCBr
ZXlUeXBlLCBkZWZhdWx0S2V5LCB2YWx1ZVR5cGUsIGRlZmF1bHRWYWx1ZSk7Ci0gIH0KLSAgCi0g
IHB1YmxpYyBLIGdldEtleSgpIHsKLSAgICByZXR1cm4gZGF0YS5nZXRLZXkoKTsKLSAgfQotICAK
LSAgcHVibGljIFYgZ2V0VmFsdWUoKSB7Ci0gICAgcmV0dXJuIGRhdGEuZ2V0VmFsdWUoKTsKLSAg
fQotICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgZ2V0U2VyaWFsaXplZFNpemUoKSB7Ci0g
ICAgcmV0dXJuIGRhdGEuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgfQotICAKLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIHdyaXRlVG8oQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgIGRhdGEud3JpdGVUbyhvdXRwdXQpOwotICB9Ci0gIAotICBAT3Zl
cnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpIHsKLSAgICByZXR1cm4gZGF0
YS5pc0luaXRpYWxpemVkKCk7Ci0gIH0KLSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgUGFyc2Vy
PE1hcEVudHJ5PEssIFY+PiBnZXRQYXJzZXJGb3JUeXBlKCkgewotICAgIHJldHVybiBtZXRhZGF0
YS5wYXJzZXI7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIEJ1aWxkZXI8SywgVj4gbmV3
QnVpbGRlckZvclR5cGUoKSB7Ci0gICAgcmV0dXJuIG5ldyBCdWlsZGVyPEssIFY+KG1ldGFkYXRh
KTsKLSAgfQotICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBCdWlsZGVyPEssIFY+IHRvQnVpbGRl
cigpIHsKLSAgICByZXR1cm4gbmV3IEJ1aWxkZXI8SywgVj4obWV0YWRhdGEsIGRhdGEpOwotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBNYXBFbnRyeTxLLCBWPiBnZXREZWZhdWx0SW5zdGFu
Y2VGb3JUeXBlKCkgewotICAgIHJldHVybiBtZXRhZGF0YS5kZWZhdWx0SW5zdGFuY2U7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIERlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvckZvclR5cGUo
KSB7Ci0gICAgcmV0dXJuIG1ldGFkYXRhLmRlc2NyaXB0b3I7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIE1hcDxGaWVsZERlc2NyaXB0b3IsIE9iamVjdD4gZ2V0QWxsRmllbGRzKCkgewot
ICAgIGZpbmFsIFRyZWVNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IHJlc3VsdCA9Ci0gICAg
ICAgIG5ldyBUcmVlTWFwPEZpZWxkRGVzY3JpcHRvciwgT2JqZWN0PigpOwotICAgIGZvciAoZmlu
YWwgRmllbGREZXNjcmlwdG9yIGZpZWxkIDogbWV0YWRhdGEuZGVzY3JpcHRvci5nZXRGaWVsZHMo
KSkgewotICAgICAgaWYgKGhhc0ZpZWxkKGZpZWxkKSkgewotICAgICAgICByZXN1bHQucHV0KGZp
ZWxkLCBnZXRGaWVsZChmaWVsZCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gQ29sbGVj
dGlvbnMudW5tb2RpZmlhYmxlTWFwKHJlc3VsdCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBj
aGVja0ZpZWxkRGVzY3JpcHRvcihGaWVsZERlc2NyaXB0b3IgZmllbGQpIHsKLSAgICBpZiAoZmll
bGQuZ2V0Q29udGFpbmluZ1R5cGUoKSAhPSBtZXRhZGF0YS5kZXNjcmlwdG9yKSB7Ci0gICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiV3JvbmcgRmllbGREZXNjcmlw
dG9yIFwiIiArIGZpZWxkLmdldEZ1bGxOYW1lKCkKLSAgICAgICAgICArICJcIiB1c2VkIGluIG1l
c3NhZ2UgXCIiICsgbWV0YWRhdGEuZGVzY3JpcHRvci5nZXRGdWxsTmFtZSgpKTsgCi0gICAgfQot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGhhc0ZpZWxkKEZpZWxkRGVzY3Jp
cHRvciBmaWVsZCkgewotICAgIGNoZWNrRmllbGREZXNjcmlwdG9yKGZpZWxkKTs7Ci0gICAgLy8g
QSBNYXBFbnRyeSBhbHdheXMgY29udGFpbnMgdHdvIGZpZWxkcy4KLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgT2JqZWN0IGdldEZpZWxkKEZpZWxkRGVzY3Jp
cHRvciBmaWVsZCkgewotICAgIGNoZWNrRmllbGREZXNjcmlwdG9yKGZpZWxkKTsKLSAgICBPYmpl
Y3QgcmVzdWx0ID0gZmllbGQuZ2V0TnVtYmVyKCkgPT0gMSA/IGdldEtleSgpIDogZ2V0VmFsdWUo
KTsKLSAgICAvLyBDb252ZXJ0IGVudW1zIHRvIEVudW1WYWx1ZURlc2NyaXB0b3IuCi0gICAgaWYg
KGZpZWxkLmdldFR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3IuVHlwZS5FTlVNKSB7Ci0gICAgICBy
ZXN1bHQgPSBmaWVsZC5nZXRFbnVtVHlwZSgpLmZpbmRWYWx1ZUJ5TnVtYmVyQ3JlYXRpbmdJZlVu
a25vd24oCi0gICAgICAgICAgKGphdmEubGFuZy5JbnRlZ2VyKSByZXN1bHQpOwotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgZ2V0UmVw
ZWF0ZWRGaWVsZENvdW50KEZpZWxkRGVzY3JpcHRvciBmaWVsZCkgewotICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKAotICAgICAgICAiVGhlcmUgaXMgbm8gcmVwZWF0ZWQgZmllbGQgaW4g
YSBtYXAgZW50cnkgbWVzc2FnZS4iKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgT2Jq
ZWN0IGdldFJlcGVhdGVkRmllbGQoRmllbGREZXNjcmlwdG9yIGZpZWxkLCBpbnQgaW5kZXgpIHsK
LSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgIlRoZXJlIGlzIG5vIHJl
cGVhdGVkIGZpZWxkIGluIGEgbWFwIGVudHJ5IG1lc3NhZ2UuIik7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIFVua25vd25GaWVsZFNldCBnZXRVbmtub3duRmllbGRzKCkgewotICAgIHJl
dHVybiBVbmtub3duRmllbGRTZXQuZ2V0RGVmYXVsdEluc3RhbmNlKCk7Ci0gIH0KLQotICAvKioK
LSAgICogQnVpbGRlciB0byBjcmVhdGUge0BsaW5rIE1hcEVudHJ5fSBtZXNzYWdlcy4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlcjxLLCBWPgotICAgICAgZXh0ZW5kcyBBYnN0
cmFjdE1lc3NhZ2UuQnVpbGRlcjxCdWlsZGVyPEssIFY+PiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBN
ZXRhZGF0YTxLLCBWPiBtZXRhZGF0YTsKLSAgICBwcml2YXRlIE1hcEVudHJ5TGl0ZTxLLCBWPiBk
YXRhOwotICAgIHByaXZhdGUgTWFwRW50cnlMaXRlLkJ1aWxkZXI8SywgVj4gZGF0YUJ1aWxkZXI7
Ci0gICAgCi0gICAgcHJpdmF0ZSBCdWlsZGVyKE1ldGFkYXRhPEssIFY+IG1ldGFkYXRhKSB7Ci0g
ICAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7Ci0gICAgICB0aGlzLmRhdGEgPSBtZXRhZGF0
YS5kZWZhdWx0SW5zdGFuY2UuZGF0YTsKLSAgICAgIHRoaXMuZGF0YUJ1aWxkZXIgPSBudWxsOwot
ICAgIH0KLSAgICAKLSAgICBwcml2YXRlIEJ1aWxkZXIoTWV0YWRhdGE8SywgVj4gbWV0YWRhdGEs
IE1hcEVudHJ5TGl0ZTxLLCBWPiBkYXRhKSB7Ci0gICAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRh
dGE7Ci0gICAgICB0aGlzLmRhdGEgPSBkYXRhOwotICAgICAgdGhpcy5kYXRhQnVpbGRlciA9IG51
bGw7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBLIGdldEtleSgpIHsKLSAgICAgIHJldHVybiBk
YXRhQnVpbGRlciA9PSBudWxsID8gZGF0YS5nZXRLZXkoKSA6IGRhdGFCdWlsZGVyLmdldEtleSgp
OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgViBnZXRWYWx1ZSgpIHsKLSAgICAgIHJldHVybiBk
YXRhQnVpbGRlciA9PSBudWxsID8gZGF0YS5nZXRWYWx1ZSgpIDogZGF0YUJ1aWxkZXIuZ2V0VmFs
dWUoKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGVuc3VyZU11dGFibGUoKSB7Ci0g
ICAgICBpZiAoZGF0YUJ1aWxkZXIgPT0gbnVsbCkgewotICAgICAgICBkYXRhQnVpbGRlciA9IGRh
dGEudG9CdWlsZGVyKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBCdWlsZGVy
PEssIFY+IHNldEtleShLIGtleSkgewotICAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgICAgZGF0
YUJ1aWxkZXIuc2V0S2V5KGtleSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAgCi0g
ICAgcHVibGljIEJ1aWxkZXI8SywgVj4gY2xlYXJLZXkoKSB7Ci0gICAgICBlbnN1cmVNdXRhYmxl
KCk7Ci0gICAgICBkYXRhQnVpbGRlci5jbGVhcktleSgpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgfQotICAgIAotICAgIHB1YmxpYyBCdWlsZGVyPEssIFY+IHNldFZhbHVlKFYgdmFsdWUpIHsK
LSAgICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICAgIGRhdGFCdWlsZGVyLnNldFZhbHVlKHZhbHVl
KTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgQnVpbGRlcjxL
LCBWPiBjbGVhclZhbHVlKCkgewotICAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgICAgZGF0YUJ1
aWxkZXIuY2xlYXJWYWx1ZSgpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIE1hcEVudHJ5PEssIFY+IGJ1aWxkKCkgewotICAgICAgTWFwRW50
cnk8SywgVj4gcmVzdWx0ID0gYnVpbGRQYXJ0aWFsKCk7Ci0gICAgICBpZiAoIXJlc3VsdC5pc0lu
aXRpYWxpemVkKCkpIHsKLSAgICAgICAgdGhyb3cgbmV3VW5pbml0aWFsaXplZE1lc3NhZ2VFeGNl
cHRpb24ocmVzdWx0KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hcEVudHJ5PEssIFY+IGJ1aWxkUGFydGlhbCgpIHsK
LSAgICAgIGlmIChkYXRhQnVpbGRlciAhPSBudWxsKSB7Ci0gICAgICAgIGRhdGEgPSBkYXRhQnVp
bGRlci5idWlsZFBhcnRpYWwoKTsKLSAgICAgICAgZGF0YUJ1aWxkZXIgPSBudWxsOwotICAgICAg
fQotICAgICAgcmV0dXJuIG5ldyBNYXBFbnRyeTxLLCBWPihtZXRhZGF0YSwgZGF0YSk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIERlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvckZv
clR5cGUoKSB7Ci0gICAgICByZXR1cm4gbWV0YWRhdGEuZGVzY3JpcHRvcjsKLSAgICB9Ci0gICAg
Ci0gICAgcHJpdmF0ZSB2b2lkIGNoZWNrRmllbGREZXNjcmlwdG9yKEZpZWxkRGVzY3JpcHRvciBm
aWVsZCkgewotICAgICAgaWYgKGZpZWxkLmdldENvbnRhaW5pbmdUeXBlKCkgIT0gbWV0YWRhdGEu
ZGVzY3JpcHRvcikgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAg
ICAgICAgICJXcm9uZyBGaWVsZERlc2NyaXB0b3IgXCIiICsgZmllbGQuZ2V0RnVsbE5hbWUoKQot
ICAgICAgICAgICAgKyAiXCIgdXNlZCBpbiBtZXNzYWdlIFwiIiArIG1ldGFkYXRhLmRlc2NyaXB0
b3IuZ2V0RnVsbE5hbWUoKSk7IAotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBjb20uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2UuQnVpbGRlciBuZXdCdWlsZGVyRm9y
RmllbGQoCi0gICAgICAgIEZpZWxkRGVzY3JpcHRvciBmaWVsZCkgewotICAgICAgY2hlY2tGaWVs
ZERlc2NyaXB0b3IoZmllbGQpOzsKLSAgICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxs
ZWQgZm9yIG1lc3NhZ2UgZmllbGRzIGFuZCBpbiBhIE1hcEVudHJ5Ci0gICAgICAvLyBtZXNzYWdl
IG9ubHkgdGhlIHZhbHVlIGZpZWxkIGNhbiBwb3NzaWJseSBiZSBhIG1lc3NhZ2UgZmllbGQuCi0g
ICAgICBpZiAoZmllbGQuZ2V0TnVtYmVyKCkgIT0gMgotICAgICAgICAgIHx8IGZpZWxkLmdldEph
dmFUeXBlKCkgIT0gRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAiXCIiICsgZmllbGQuZ2V0
RnVsbE5hbWUoKSArICJcIiBpcyBub3QgYSBtZXNzYWdlIHZhbHVlIGZpZWxkLiIpOwotICAgICAg
fQotICAgICAgcmV0dXJuICgoTWVzc2FnZSkgZGF0YS5nZXRWYWx1ZSgpKS5uZXdCdWlsZGVyRm9y
VHlwZSgpOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyPEssIFY+IHNldEZpZWxkKEZpZWxkRGVzY3Jp
cHRvciBmaWVsZCwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICBjaGVja0ZpZWxkRGVzY3JpcHRvcihm
aWVsZCk7Ci0gICAgICBpZiAoZmllbGQuZ2V0TnVtYmVyKCkgPT0gMSkgewotICAgICAgICBzZXRL
ZXkoKEspIHZhbHVlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChmaWVsZC5nZXRUeXBl
KCkgPT0gRmllbGREZXNjcmlwdG9yLlR5cGUuRU5VTSkgewotICAgICAgICAgIHZhbHVlID0gKChF
bnVtVmFsdWVEZXNjcmlwdG9yKSB2YWx1ZSkuZ2V0TnVtYmVyKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgc2V0VmFsdWUoKFYpIHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyPEssIFY+IGNsZWFyRmllbGQo
RmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICBjaGVja0ZpZWxkRGVzY3JpcHRvcihmaWVs
ZCk7Ci0gICAgICBpZiAoZmllbGQuZ2V0TnVtYmVyKCkgPT0gMSkgewotICAgICAgICBjbGVhcktl
eSgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY2xlYXJWYWx1ZSgpOwotICAgICAgfQotICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxk
ZXI8SywgVj4gc2V0UmVwZWF0ZWRGaWVsZChGaWVsZERlc2NyaXB0b3IgZmllbGQsIGludCBpbmRl
eCwKLSAgICAgICAgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigKLSAgICAgICAgICAiVGhlcmUgaXMgbm8gcmVwZWF0ZWQgZmllbGQgaW4gYSBtYXAgZW50
cnkgbWVzc2FnZS4iKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRl
cjxLLCBWPiBhZGRSZXBlYXRlZEZpZWxkKEZpZWxkRGVzY3JpcHRvciBmaWVsZCwgT2JqZWN0IHZh
bHVlKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVGhl
cmUgaXMgbm8gcmVwZWF0ZWQgZmllbGQgaW4gYSBtYXAgZW50cnkgbWVzc2FnZS4iKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlcjxLLCBWPiBzZXRVbmtub3duRmll
bGRzKFVua25vd25GaWVsZFNldCB1bmtub3duRmllbGRzKSB7Ci0gICAgICAvLyBVbmtub3duIGZp
ZWxkcyBhcmUgZGlzY2FyZGVkIGZvciBNYXBFbnRyeSBtZXNzYWdlLgotICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hcEVudHJ5PEssIFY+IGdl
dERlZmF1bHRJbnN0YW5jZUZvclR5cGUoKSB7Ci0gICAgICByZXR1cm4gbWV0YWRhdGEuZGVmYXVs
dEluc3RhbmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlz
SW5pdGlhbGl6ZWQoKSB7Ci0gICAgICBpZiAoZGF0YUJ1aWxkZXIgIT0gbnVsbCkgewotICAgICAg
ICByZXR1cm4gZGF0YUJ1aWxkZXIuaXNJbml0aWFsaXplZCgpOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgcmV0dXJuIGRhdGEuaXNJbml0aWFsaXplZCgpOwotICAgICAgfQotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGdldEFs
bEZpZWxkcygpIHsKLSAgICAgIGZpbmFsIFRyZWVNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+
IHJlc3VsdCA9Ci0gICAgICAgICAgbmV3IFRyZWVNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+
KCk7Ci0gICAgICBmb3IgKGZpbmFsIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA6IG1ldGFkYXRhLmRl
c2NyaXB0b3IuZ2V0RmllbGRzKCkpIHsKLSAgICAgICAgaWYgKGhhc0ZpZWxkKGZpZWxkKSkgewot
ICAgICAgICAgIHJlc3VsdC5wdXQoZmllbGQsIGdldEZpZWxkKGZpZWxkKSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAocmVzdWx0
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNGaWVsZChG
aWVsZERlc2NyaXB0b3IgZmllbGQpIHsKLSAgICAgIGNoZWNrRmllbGREZXNjcmlwdG9yKGZpZWxk
KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBPYmplY3QgZ2V0RmllbGQoRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICBjaGVja0Zp
ZWxkRGVzY3JpcHRvcihmaWVsZCk7Ci0gICAgICBPYmplY3QgcmVzdWx0ID0gZmllbGQuZ2V0TnVt
YmVyKCkgPT0gMSA/IGdldEtleSgpIDogZ2V0VmFsdWUoKTsKLSAgICAgIC8vIENvbnZlcnQgZW51
bXMgdG8gRW51bVZhbHVlRGVzY3JpcHRvci4KLSAgICAgIGlmIChmaWVsZC5nZXRUeXBlKCkgPT0g
RmllbGREZXNjcmlwdG9yLlR5cGUuRU5VTSkgewotICAgICAgICByZXN1bHQgPSBmaWVsZC5nZXRF
bnVtVHlwZSgpLmZpbmRWYWx1ZUJ5TnVtYmVyQ3JlYXRpbmdJZlVua25vd24oCi0gICAgICAgICAg
ICAoamF2YS5sYW5nLkludGVnZXIpIHJlc3VsdCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0UmVwZWF0ZWRG
aWVsZENvdW50KEZpZWxkRGVzY3JpcHRvciBmaWVsZCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRp
bWVFeGNlcHRpb24oCi0gICAgICAgICAgIlRoZXJlIGlzIG5vIHJlcGVhdGVkIGZpZWxkIGluIGEg
bWFwIGVudHJ5IG1lc3NhZ2UuIik7Ci0gICAgfQotICAgIAotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBPYmplY3QgZ2V0UmVwZWF0ZWRGaWVsZChGaWVsZERlc2NyaXB0b3IgZmllbGQsIGludCBp
bmRleCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIlRo
ZXJlIGlzIG5vIHJlcGVhdGVkIGZpZWxkIGluIGEgbWFwIGVudHJ5IG1lc3NhZ2UuIik7Ci0gICAg
fQotICAgIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBVbmtub3duRmllbGRTZXQgZ2V0VW5r
bm93bkZpZWxkcygpIHsKLSAgICAgIHJldHVybiBVbmtub3duRmllbGRTZXQuZ2V0RGVmYXVsdElu
c3RhbmNlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXI8Sywg
Vj4gY2xvbmUoKSB7Ci0gICAgICBpZiAoZGF0YUJ1aWxkZXIgPT0gbnVsbCkgewotICAgICAgICBy
ZXR1cm4gbmV3IEJ1aWxkZXI8SywgVj4obWV0YWRhdGEsIGRhdGEpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyPEssIFY+KG1ldGFkYXRhLCBkYXRhQnVpbGRlci5i
dWlsZCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NYXBFbnRyeUxpdGUuamF2YSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9j
b3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NYXBFbnRyeUxpdGUuamF2YQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNjRhYmJiNGFmMzQ3M2MxOGM1MTg3OTVm
MWI1YTM5YzE4NzMzMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWFwRW50cnlM
aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1w
b3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLS8qKgotICogSW1wbGVtZW50cyB0aGUgbGl0ZSB2
ZXJzaW9uIG9mIG1hcCBlbnRyeSBtZXNzYWdlcy4KLSAqIAotICogVGhpcyBjbGFzcyBzZXJ2ZXMg
YXMgYW4gdXRpbGl0eSBjbGFzcyB0byBoZWxwIGRvIHNlcmlhbGl6YXRpb24vcGFyc2luZyBvZgot
ICogbWFwIGVudHJpZXMuIEl0J3MgdXNlZCBpbiBnZW5lcmF0ZWQgY29kZSBhbmQgYWxzbyBpbiB0
aGUgZnVsbCB2ZXJzaW9uCi0gKiBNYXBFbnRyeSBtZXNzYWdlLgotICogCi0gKiBQcm90b2J1ZiBp
bnRlcm5hbC4gVXNlcnMgc2hvdWxkbid0IHVzZS4KLSAqLwotcHVibGljIGNsYXNzIE1hcEVudHJ5
TGl0ZTxLLCBWPgotICAgIGV4dGVuZHMgQWJzdHJhY3RNZXNzYWdlTGl0ZTxNYXBFbnRyeUxpdGU8
SywgVj4sIE1hcEVudHJ5TGl0ZS5CdWlsZGVyPEssIFY+PiB7Ci0gIHByaXZhdGUgc3RhdGljIGNs
YXNzIE1ldGFkYXRhPEssIFY+IHsKLSAgICBwdWJsaWMgZmluYWwgTWFwRW50cnlMaXRlPEssIFY+
IGRlZmF1bHRJbnN0YW5jZTsKLSAgICBwdWJsaWMgZmluYWwgV2lyZUZvcm1hdC5GaWVsZFR5cGUg
a2V5VHlwZTsKLSAgICBwdWJsaWMgZmluYWwgV2lyZUZvcm1hdC5GaWVsZFR5cGUgdmFsdWVUeXBl
OwotICAgIHB1YmxpYyBmaW5hbCBQYXJzZXI8TWFwRW50cnlMaXRlPEssIFY+PiBwYXJzZXI7Ci0g
ICAgcHVibGljIE1ldGFkYXRhKAotICAgICAgICBNYXBFbnRyeUxpdGU8SywgVj4gZGVmYXVsdElu
c3RhbmNlLAotICAgICAgICBXaXJlRm9ybWF0LkZpZWxkVHlwZSBrZXlUeXBlLAotICAgICAgICBX
aXJlRm9ybWF0LkZpZWxkVHlwZSB2YWx1ZVR5cGUpIHsKLSAgICAgIHRoaXMuZGVmYXVsdEluc3Rh
bmNlID0gZGVmYXVsdEluc3RhbmNlOyAKLSAgICAgIHRoaXMua2V5VHlwZSA9IGtleVR5cGU7Ci0g
ICAgICB0aGlzLnZhbHVlVHlwZSA9IHZhbHVlVHlwZTsKLSAgICAgIGZpbmFsIE1ldGFkYXRhPEss
IFY+IGZpbmFsVGhpcyA9IHRoaXM7Ci0gICAgICB0aGlzLnBhcnNlciA9IG5ldyBBYnN0cmFjdFBh
cnNlcjxNYXBFbnRyeUxpdGU8SywgVj4+KCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAg
cHVibGljIE1hcEVudHJ5TGl0ZTxLLCBWPiBwYXJzZVBhcnRpYWxGcm9tKAotICAgICAgICAgICAg
Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJl
Z2lzdHJ5KQotICAgICAgICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
biB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBNYXBFbnRyeUxpdGU8SywgVj4oZmluYWxUaGlzLCBp
bnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgICAgICB9Ci0gICAgICB9OwotICAgIH0KLSAg
fQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtFWV9GSUVMRF9OVU1CRVIgPSAxOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVkFMVUVfRklFTERfTlVNQkVSID0gMjsKLSAgCi0g
IHByaXZhdGUgZmluYWwgTWV0YWRhdGE8SywgVj4gbWV0YWRhdGE7Ci0gIHByaXZhdGUgZmluYWwg
SyBrZXk7Ci0gIHByaXZhdGUgZmluYWwgViB2YWx1ZTsKLSAgCi0gIC8qKiBDcmVhdGVzIGEgZGVm
YXVsdCBNYXBFbnRyeUxpdGUgbWVzc2FnZSBpbnN0YW5jZS4gKi8KLSAgcHJpdmF0ZSBNYXBFbnRy
eUxpdGUoCi0gICAgICBXaXJlRm9ybWF0LkZpZWxkVHlwZSBrZXlUeXBlLCBLIGRlZmF1bHRLZXks
Ci0gICAgICBXaXJlRm9ybWF0LkZpZWxkVHlwZSB2YWx1ZVR5cGUsIFYgZGVmYXVsdFZhbHVlKSB7
Ci0gICAgdGhpcy5tZXRhZGF0YSA9IG5ldyBNZXRhZGF0YTxLLCBWPih0aGlzLCBrZXlUeXBlLCB2
YWx1ZVR5cGUpOwotICAgIHRoaXMua2V5ID0gZGVmYXVsdEtleTsKLSAgICB0aGlzLnZhbHVlID0g
ZGVmYXVsdFZhbHVlOwotICB9Ci0gIAotICAvKiogQ3JlYXRlcyBhIG5ldyBNYXBFbnRyeUxpdGUg
bWVzc2FnZS4gKi8KLSAgcHJpdmF0ZSBNYXBFbnRyeUxpdGUoTWV0YWRhdGE8SywgVj4gbWV0YWRh
dGEsIEsga2V5LCBWIHZhbHVlKSB7Ci0gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhOwotICAg
IHRoaXMua2V5ID0ga2V5OwotICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgfQotICAKLSAgcHVi
bGljIEsgZ2V0S2V5KCkgewotICAgIHJldHVybiBrZXk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBWIGdl
dFZhbHVlKCkgewotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVz
IGEgZGVmYXVsdCBNYXBFbnRyeUxpdGUgbWVzc2FnZSBpbnN0YW5jZS4KLSAgICogCi0gICAqIFRo
aXMgbWV0aG9kIGlzIHVzZWQgYnkgZ2VuZXJhdGVkIGNvZGUgdG8gY3JlYXRlIHRoZSBkZWZhdWx0
IGluc3RhbmNlIGZvcgotICAgKiBhIG1hcCBlbnRyeSBtZXNzYWdlLiBUaGUgY3JlYXRlZCBkZWZh
dWx0IGluc3RhbmNlIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZQotICAgKiBuZXcgbWFwIGVudHJ5
IG1lc3NhZ2VzIG9mIHRoZSBzYW1lIHR5cGUuIEZvciBlYWNoIG1hcCBlbnRyeSBtZXNzYWdlLCBv
bmx5Ci0gICAqIG9uZSBkZWZhdWx0IGluc3RhbmNlIHNob3VsZCBiZSBjcmVhdGVkLiAKLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgPEssIFY+IE1hcEVudHJ5TGl0ZTxLLCBWPiBuZXdEZWZhdWx0SW5z
dGFuY2UoCi0gICAgICBXaXJlRm9ybWF0LkZpZWxkVHlwZSBrZXlUeXBlLCBLIGRlZmF1bHRLZXks
Ci0gICAgICBXaXJlRm9ybWF0LkZpZWxkVHlwZSB2YWx1ZVR5cGUsIFYgZGVmYXVsdFZhbHVlKSB7
Ci0gICAgcmV0dXJuIG5ldyBNYXBFbnRyeUxpdGU8SywgVj4oCi0gICAgICAgIGtleVR5cGUsIGRl
ZmF1bHRLZXksIHZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKTsKLSAgfQotICAKLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIHdyaXRlVG8oQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgIHdyaXRlRmllbGQoS0VZX0ZJRUxEX05VTUJFUiwgbWV0YWRhdGEu
a2V5VHlwZSwga2V5LCBvdXRwdXQpOwotICAgIHdyaXRlRmllbGQoVkFMVUVfRklFTERfTlVNQkVS
LCBtZXRhZGF0YS52YWx1ZVR5cGUsIHZhbHVlLCBvdXRwdXQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHdyaXRlRmllbGQoCi0gICAgICBpbnQgbnVtYmVyLCBXaXJlRm9ybWF0LkZpZWxkVHlwZSB0
eXBlLCBPYmplY3QgdmFsdWUsCi0gICAgICBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgb3V0cHV0LndyaXRlVGFnKG51bWJlciwgdHlwZS5nZXRXaXJl
VHlwZSgpKTsKLSAgICBGaWVsZFNldC53cml0ZUVsZW1lbnROb1RhZyhvdXRwdXQsIHR5cGUsIHZh
bHVlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9sYXRpbGUgaW50IGNhY2hlZFNlcmlhbGl6ZWRTaXpl
ID0gLTE7Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IGdldFNlcmlhbGl6ZWRTaXplKCkgewot
ICAgIGlmIChjYWNoZWRTZXJpYWxpemVkU2l6ZSAhPSAtMSkgewotICAgICAgcmV0dXJuIGNhY2hl
ZFNlcmlhbGl6ZWRTaXplOwotICAgIH0KLSAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgc2l6ZSArPSBn
ZXRGaWVsZFNpemUoS0VZX0ZJRUxEX05VTUJFUiwgbWV0YWRhdGEua2V5VHlwZSwga2V5KTsKLSAg
ICBzaXplICs9IGdldEZpZWxkU2l6ZShWQUxVRV9GSUVMRF9OVU1CRVIsIG1ldGFkYXRhLnZhbHVl
VHlwZSwgdmFsdWUpOwotICAgIGNhY2hlZFNlcmlhbGl6ZWRTaXplID0gc2l6ZTsKLSAgICByZXR1
cm4gc2l6ZTsKLSAgfQotCi0gIHByaXZhdGUgaW50IGdldEZpZWxkU2l6ZSgKLSAgICAgIGludCBu
dW1iZXIsIFdpcmVGb3JtYXQuRmllbGRUeXBlIHR5cGUsIE9iamVjdCB2YWx1ZSkgewotICAgIHJl
dHVybiBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlVGFnU2l6ZShudW1iZXIpCi0gICAgICAgICsg
RmllbGRTZXQuY29tcHV0ZUVsZW1lbnRTaXplTm9UYWcodHlwZSwgdmFsdWUpOwotICB9Ci0gIAot
ICAvKiogUGFyc2luZyBjb25zdHJ1Y3Rvci4gKi8KLSAgcHJpdmF0ZSBNYXBFbnRyeUxpdGUoCi0g
ICAgICBNZXRhZGF0YTxLLCBWPiBtZXRhZGF0YSwKLSAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5w
dXQsCi0gICAgICBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAg
ICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICB0cnkgewotICAg
ICAgSyBrZXkgPSBtZXRhZGF0YS5kZWZhdWx0SW5zdGFuY2Uua2V5OwotICAgICAgViB2YWx1ZSA9
IG1ldGFkYXRhLmRlZmF1bHRJbnN0YW5jZS52YWx1ZTsKLSAgICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgICAgIGludCB0YWcgPSBpbnB1dC5yZWFkVGFnKCk7Ci0gICAgICAgIGlmICh0YWcgPT0gMCkg
ewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0YWcgPT0gV2lyZUZv
cm1hdC5tYWtlVGFnKAotICAgICAgICAgICAgICAgIEtFWV9GSUVMRF9OVU1CRVIsIG1ldGFkYXRh
LmtleVR5cGUuZ2V0V2lyZVR5cGUoKSkpIHsKLSAgICAgICAgICBrZXkgPSBtZXJnZUZpZWxkKAot
ICAgICAgICAgICAgICBpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnksIG1ldGFkYXRhLmtleVR5cGUs
IGtleSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodGFnID09IFdpcmVGb3JtYXQubWFrZVRhZygKLSAg
ICAgICAgICAgICAgICAgICAgICAgVkFMVUVfRklFTERfTlVNQkVSLCBtZXRhZGF0YS52YWx1ZVR5
cGUuZ2V0V2lyZVR5cGUoKSkpIHsKLSAgICAgICAgICB2YWx1ZSA9IG1lcmdlRmllbGQoCi0gICAg
ICAgICAgICAgIGlucHV0LCBleHRlbnNpb25SZWdpc3RyeSwgbWV0YWRhdGEudmFsdWVUeXBlLCB2
YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKCFpbnB1dC5za2lwRmllbGQo
dGFnKSkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7Ci0gICAgICB0aGlzLmtleSA9IGtl
eTsKLSAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgZS5zZXRVbmZpbmlzaGVkTWVzc2Fn
ZSh0aGlzKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvdyBuZXcg
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKQotICAgICAgICAg
IC5zZXRVbmZpbmlzaGVkTWVzc2FnZSh0aGlzKTsKLSAgICB9Ci0gIH0KLSAgCi0gIEBTdXBwcmVz
c1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwcml2YXRlIDxUPiBUIG1lcmdlRmllbGQoCi0gICAg
ICBDb2RlZElucHV0U3RyZWFtIGlucHV0LCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9u
UmVnaXN0cnksCi0gICAgICBXaXJlRm9ybWF0LkZpZWxkVHlwZSB0eXBlLCBUIHZhbHVlKSB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgY2FzZSBNRVNTQUdF
OgotICAgICAgICBNZXNzYWdlTGl0ZS5CdWlsZGVyIHN1YkJ1aWxkZXIgPSAoKE1lc3NhZ2VMaXRl
KSB2YWx1ZSkudG9CdWlsZGVyKCk7Ci0gICAgICAgIGlucHV0LnJlYWRNZXNzYWdlKHN1YkJ1aWxk
ZXIsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICAgICAgcmV0dXJuIChUKSBzdWJCdWlsZGVyLmJ1
aWxkUGFydGlhbCgpOwotICAgICAgY2FzZSBFTlVNOgotICAgICAgICByZXR1cm4gKFQpIChqYXZh
LmxhbmcuSW50ZWdlcikgaW5wdXQucmVhZEVudW0oKTsKLSAgICAgIGNhc2UgR1JPVVA6Ci0gICAg
ICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJHcm91cHMgYXJlIG5vdCBhbGxvd2VkIGlu
IG1hcHMuIik7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gKFQpIEZpZWxkU2V0LnJl
YWRQcmltaXRpdmVGaWVsZChpbnB1dCwgdHlwZSwgdHJ1ZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBQYXJzZXI8TWFwRW50cnlMaXRlPEssIFY+PiBnZXRQYXJzZXJGb3JU
eXBlKCkgewotICAgIHJldHVybiBtZXRhZGF0YS5wYXJzZXI7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIEJ1aWxkZXI8SywgVj4gbmV3QnVpbGRlckZvclR5cGUoKSB7Ci0gICAgcmV0dXJu
IG5ldyBCdWlsZGVyPEssIFY+KG1ldGFkYXRhKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgQnVpbGRlcjxLLCBWPiB0b0J1aWxkZXIoKSB7Ci0gICAgcmV0dXJuIG5ldyBCdWlsZGVyPEss
IFY+KG1ldGFkYXRhLCBrZXksIHZhbHVlKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
TWFwRW50cnlMaXRlPEssIFY+IGdldERlZmF1bHRJbnN0YW5jZUZvclR5cGUoKSB7Ci0gICAgcmV0
dXJuIG1ldGFkYXRhLmRlZmF1bHRJbnN0YW5jZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgYm9vbGVhbiBpc0luaXRpYWxpemVkKCkgewotICAgIGlmIChtZXRhZGF0YS52YWx1ZVR5cGUu
Z2V0SmF2YVR5cGUoKSA9PSBXaXJlRm9ybWF0LkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAgIHJl
dHVybiAoKE1lc3NhZ2VMaXRlKSB2YWx1ZSkuaXNJbml0aWFsaXplZCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBCdWlsZGVyIHVzZWQgdG8gY3JlYXRlIHtA
bGluayBNYXBFbnRyeUxpdGV9IG1lc3NhZ2VzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFz
cyBCdWlsZGVyPEssIFY+Ci0gICAgICBleHRlbmRzIEFic3RyYWN0TWVzc2FnZUxpdGUuQnVpbGRl
cjxNYXBFbnRyeUxpdGU8SywgVj4sIEJ1aWxkZXI8SywgVj4+IHsKLSAgICBwcml2YXRlIGZpbmFs
IE1ldGFkYXRhPEssIFY+IG1ldGFkYXRhOwotICAgIHByaXZhdGUgSyBrZXk7Ci0gICAgcHJpdmF0
ZSBWIHZhbHVlOwotICAgIAotICAgIHByaXZhdGUgQnVpbGRlcihNZXRhZGF0YTxLLCBWPiBtZXRh
ZGF0YSkgewotICAgICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhOwotICAgICAgdGhpcy5rZXkg
PSBtZXRhZGF0YS5kZWZhdWx0SW5zdGFuY2Uua2V5OwotICAgICAgdGhpcy52YWx1ZSA9IG1ldGFk
YXRhLmRlZmF1bHRJbnN0YW5jZS52YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIEsgZ2V0
S2V5KCkgewotICAgICAgcmV0dXJuIGtleTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFYgZ2V0
VmFsdWUoKSB7Ci0gICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBC
dWlsZGVyPEssIFY+IHNldEtleShLIGtleSkgewotICAgICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAg
ICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIEJ1aWxkZXI8SywgVj4gc2V0
VmFsdWUoViB2YWx1ZSkgewotICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBCdWlsZGVyPEssIFY+IGNsZWFyS2V5KCkg
ewotICAgICAgdGhpcy5rZXkgPSBtZXRhZGF0YS5kZWZhdWx0SW5zdGFuY2Uua2V5OwotICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBCdWlsZGVyPEssIFY+IGNsZWFy
VmFsdWUoKSB7Ci0gICAgICB0aGlzLnZhbHVlID0gbWV0YWRhdGEuZGVmYXVsdEluc3RhbmNlLnZh
bHVlOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIEJ1aWxkZXI8SywgVj4gY2xlYXIoKSB7Ci0gICAgICB0aGlzLmtleSA9IG1ldGFkYXRhLmRl
ZmF1bHRJbnN0YW5jZS5rZXk7Ci0gICAgICB0aGlzLnZhbHVlID0gbWV0YWRhdGEuZGVmYXVsdElu
c3RhbmNlLnZhbHVlOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIE1hcEVudHJ5TGl0ZTxLLCBWPiBidWlsZCgpIHsKLSAgICAgIE1hcEVudHJ5
TGl0ZTxLLCBWPiByZXN1bHQgPSBidWlsZFBhcnRpYWwoKTsKLSAgICAgIGlmICghcmVzdWx0Lmlz
SW5pdGlhbGl6ZWQoKSkgewotICAgICAgICB0aHJvdyBuZXdVbmluaXRpYWxpemVkTWVzc2FnZUV4
Y2VwdGlvbihyZXN1bHQpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFwRW50cnlMaXRlPEssIFY+IGJ1aWxkUGFydGlh
bCgpIHsKLSAgICAgIHJldHVybiBuZXcgTWFwRW50cnlMaXRlPEssIFY+KG1ldGFkYXRhLCBrZXks
IHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVzc2FnZUxpdGUg
Z2V0RGVmYXVsdEluc3RhbmNlRm9yVHlwZSgpIHsKLSAgICAgIHJldHVybiBtZXRhZGF0YS5kZWZh
dWx0SW5zdGFuY2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4g
aXNJbml0aWFsaXplZCgpIHsKLSAgICAgIGlmIChtZXRhZGF0YS52YWx1ZVR5cGUuZ2V0SmF2YVR5
cGUoKSA9PSBXaXJlRm9ybWF0LkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAgICAgcmV0dXJuICgo
TWVzc2FnZUxpdGUpIHZhbHVlKS5pc0luaXRpYWxpemVkKCk7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEJ1aWxkZXIoTWV0YWRhdGE8SywgVj4gbWV0
YWRhdGEsIEsga2V5LCBWIHZhbHVlKSB7Ci0gICAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7
Ci0gICAgICB0aGlzLmtleSA9IGtleTsKLSAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICB9
Ci0gICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1aWxkZXI8SywgVj4gY2xvbmUoKSB7
Ci0gICAgICByZXR1cm4gbmV3IEJ1aWxkZXI8SywgVj4obWV0YWRhdGEsIGtleSwgdmFsdWUpOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyPEssIFY+IG1lcmdlRnJv
bSgKLSAgICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwgRXh0ZW5zaW9uUmVnaXN0cnlMaXRl
IGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAg
TWFwRW50cnlMaXRlPEssIFY+IGVudHJ5ID0KLSAgICAgICAgICBuZXcgTWFwRW50cnlMaXRlPEss
IFY+KG1ldGFkYXRhLCBpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgICAgdGhpcy5rZXkg
PSBlbnRyeS5rZXk7Ci0gICAgICB0aGlzLnZhbHVlID0gZW50cnkudmFsdWU7Ci0gICAgICByZXR1
cm4gdGhpczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgQnVpbGRlcjxL
LCBWPiBpbnRlcm5hbE1lcmdlRnJvbShNYXBFbnRyeUxpdGU8SywgVj4gbWVzc2FnZSkgewotICAg
ICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvTWFwRmllbGQuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9NYXBGaWVsZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDdmMGY3
MTEyMGQ2YjBiMjkzOTljMGU5MzBlYTYwMjIzMWIxYWFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9NYXBGaWVsZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUu
cHJvdG9idWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLk1hcEZpZWxkTGl0ZS5NdXRh
dGFiaWxpdHlBd2FyZU1hcDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQg
amF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwot
aW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICog
SW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgbWFwIGZpZWxkcyBpbiBnZW5lcmF0ZWQgbWVzc2Fn
ZXMuCi0gKiAKLSAqIFRoaXMgY2xhc3Mgc3VwcG9ydHMgYWNjZXNzaW5nIHRoZSBtYXAgZmllbGQg
YXMgYSB7QGxpbmsgTWFwfSB0byBiZSB1c2VkIGluCi0gKiBnZW5lcmF0ZWQgQVBJIGFuZCBhbHNv
IHN1cHBvcnRzIGFjY2Vzc2luZyB0aGUgZmllbGQgYXMgYSB7QGxpbmsgTGlzdH0gdG8gYmUKLSAq
IHVzZWQgaW4gcmVmbGVjdGlvbiBBUEkuIEl0IGtlZXBzIHRyYWNrIG9mIHdoZXJlIHRoZSBkYXRh
IGlzIGN1cnJlbnRseSBzdG9yZWQKLSAqIGFuZCBkbyBuZWNlc3NhcnkgY29udmVyc2lvbnMgYmV0
d2VlbiBtYXAgYW5kIGxpc3QuICAKLSAqIAotICogVGhpcyBjbGFzcyBpcyBhIHByb3RvYnVmIGlt
cGxlbWVudGF0aW9uIGRldGFpbC4gVXNlcnMgc2hvdWxkbid0IHVzZSB0aGlzCi0gKiBjbGFzcyBk
aXJlY3RseS4KLSAqIAotICogVEhSRUFELVNBRkVUWSBOT1RFOiBSZWFkLW9ubHkgYWNjZXNzIGlz
IHRocmVhZC1zYWZlLiBVc2VycyBjYW4gY2FsbCBnZXRNYXAoKQotICogYW5kIGdldExpc3QoKSBj
b25jdXJyZW50bHkgaW4gbXVsdGlwbGUgdGhyZWFkcy4gSWYgd3JpdGUtYWNjZXNzIGlzIG5lZWRl
ZCwKLSAqIGFsbCBhY2Nlc3MgbXVzdCBiZSBzeW5jaHJvbml6ZWQuCi0gKi8KLXB1YmxpYyBjbGFz
cyBNYXBGaWVsZDxLLCBWPiBpbXBsZW1lbnRzIE11dGFiaWxpdHlPcmFjbGUgewotICAvKioKLSAg
ICogSW5kaWNhdGVzIHdoZXJlIHRoZSBkYXRhIG9mIHRoaXMgbWFwIGZpZWxkIGlzIGN1cnJlbnRs
eSBzdG9yZWQuCi0gICAqIAotICAgKiBNQVA6IERhdGEgaXMgc3RvcmVkIGluIG1hcERhdGEuCi0g
ICAqIExJU1Q6IERhdGEgaXMgc3RvcmVkIGluIGxpc3REYXRhLgotICAgKiBCT1RIOiBtYXBEYXRh
IGFuZCBsaXN0RGF0YSBoYXZlIHRoZSBzYW1lIGRhdGEuCi0gICAqCi0gICAqIFdoZW4gdGhlIG1h
cCBmaWVsZCBpcyBhY2Nlc3NlZCAodGhyb3VnaCBnZW5lcmF0ZWQgQVBJIG9yIHJlZmxlY3Rpb24g
QVBJKSwKLSAgICogaXQgd2lsbCBzaGlmdCBiZXR3ZWVuIHRoZXNlIDMgbW9kZXM6Ci0gICAqIAot
ICAgKiAgICAgICAgICBnZXRNYXAoKSAgIGdldExpc3QoKSAgIGdldE11dGFibGVNYXAoKSAgIGdl
dE11dGFibGVMaXN0KCkKLSAgICogICBNQVAgICAgICBNQVAgICAgICAgIEJPVEggICAgICAgICAg
TUFQICAgICAgICAgICAgICAgTElTVAotICAgKiAgIExJU1QgICAgIEJPVEggICAgICAgTElTVCAg
ICAgICAgICBNQVAgICAgICAgICAgICAgICBMSVNUCi0gICAqICAgQk9USCAgICAgQk9USCAgICAg
ICBCT1RIICAgICAgICAgIE1BUCAgICAgICAgICAgICAgIExJU1QKLSAgICogICAKLSAgICogQXMg
dGhlIG1hcCBmaWVsZCBjaGFuZ2VzIGl0cyBtb2RlLCB0aGUgbGlzdC9tYXAgcmVmZXJlbmNlIHJl
dHVybmVkIGluIGEKLSAgICogcHJldmlvdXMgbWV0aG9kIGNhbGwgbWF5IGJlIGludmFsaWRhdGVk
LiAKLSAgICovCi0gIHByaXZhdGUgZW51bSBTdG9yYWdlTW9kZSB7TUFQLCBMSVNULCBCT1RIfQot
Ci0gIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBpc011dGFibGU7Ci0gIHByaXZhdGUgdm9sYXRp
bGUgU3RvcmFnZU1vZGUgbW9kZTsKLSAgcHJpdmF0ZSBNdXRhdGFiaWxpdHlBd2FyZU1hcDxLLCBW
PiBtYXBEYXRhOwotICBwcml2YXRlIExpc3Q8TWVzc2FnZT4gbGlzdERhdGE7Ci0gIAotICAvLyBD
b252ZXJ0IGJldHdlZW4gYSBtYXAgZW50cnkgTWVzc2FnZSBhbmQgYSBrZXktdmFsdWUgcGFpci4K
LSAgcHJpdmF0ZSBzdGF0aWMgaW50ZXJmYWNlIENvbnZlcnRlcjxLLCBWPiB7Ci0gICAgTWVzc2Fn
ZSBjb252ZXJ0S2V5QW5kVmFsdWVUb01lc3NhZ2UoSyBrZXksIFYgdmFsdWUpOwotICAgIHZvaWQg
Y29udmVydE1lc3NhZ2VUb0tleUFuZFZhbHVlKE1lc3NhZ2UgbWVzc2FnZSwgTWFwPEssIFY+IG1h
cCk7Ci0gICAgCi0gICAgTWVzc2FnZSBnZXRNZXNzYWdlRGVmYXVsdEluc3RhbmNlKCk7Ci0gIH0K
LSAgCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIEltbXV0YWJsZU1lc3NhZ2VDb252ZXJ0ZXI8Sywg
Vj4gaW1wbGVtZW50cyBDb252ZXJ0ZXI8SywgVj4gewotICAgIHByaXZhdGUgZmluYWwgTWFwRW50
cnk8SywgVj4gZGVmYXVsdEVudHJ5OwotICAgIHB1YmxpYyBJbW11dGFibGVNZXNzYWdlQ29udmVy
dGVyKE1hcEVudHJ5PEssIFY+IGRlZmF1bHRFbnRyeSkgewotICAgICAgdGhpcy5kZWZhdWx0RW50
cnkgPSBkZWZhdWx0RW50cnk7Ci0gICAgfQotICAgIAotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBNZXNzYWdlIGNvbnZlcnRLZXlBbmRWYWx1ZVRvTWVzc2FnZShLIGtleSwgViB2YWx1ZSkgewot
ICAgICAgcmV0dXJuIGRlZmF1bHRFbnRyeS5uZXdCdWlsZGVyRm9yVHlwZSgpLnNldEtleShrZXkp
LnNldFZhbHVlKHZhbHVlKS5idWlsZFBhcnRpYWwoKTsKLSAgICB9Ci0gICAgCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgY29udmVydE1lc3NhZ2VUb0tleUFuZFZhbHVlKE1lc3NhZ2Ug
bWVzc2FnZSwgTWFwPEssIFY+IG1hcCkgewotICAgICAgTWFwRW50cnk8SywgVj4gZW50cnkgPSAo
TWFwRW50cnk8SywgVj4pIG1lc3NhZ2U7Ci0gICAgICBtYXAucHV0KGVudHJ5LmdldEtleSgpLCBl
bnRyeS5nZXRWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWVz
c2FnZSBnZXRNZXNzYWdlRGVmYXVsdEluc3RhbmNlKCkgewotICAgICAgcmV0dXJuIGRlZmF1bHRF
bnRyeTsKLSAgICB9Ci0gIH0KLSAgCi0KLSAgcHJpdmF0ZSBmaW5hbCBDb252ZXJ0ZXI8SywgVj4g
Y29udmVydGVyOwotICAKLSAgcHJpdmF0ZSBNYXBGaWVsZCgKLSAgICAgIENvbnZlcnRlcjxLLCBW
PiBjb252ZXJ0ZXIsCi0gICAgICBTdG9yYWdlTW9kZSBtb2RlLAotICAgICAgTWFwPEssIFY+IG1h
cERhdGEpIHsKLSAgICB0aGlzLmNvbnZlcnRlciA9IGNvbnZlcnRlcjsKLSAgICB0aGlzLmlzTXV0
YWJsZSA9IHRydWU7Ci0gICAgdGhpcy5tb2RlID0gbW9kZTsKLSAgICB0aGlzLm1hcERhdGEgPSBu
ZXcgTXV0YXRhYmlsaXR5QXdhcmVNYXA8SywgVj4odGhpcywgbWFwRGF0YSk7Ci0gICAgdGhpcy5s
aXN0RGF0YSA9IG51bGw7Ci0gIH0KLSAgICAKLSAgcHJpdmF0ZSBNYXBGaWVsZCgKLSAgICAgIE1h
cEVudHJ5PEssIFY+IGRlZmF1bHRFbnRyeSwKLSAgICAgIFN0b3JhZ2VNb2RlIG1vZGUsCi0gICAg
ICBNYXA8SywgVj4gbWFwRGF0YSkgewotICAgIHRoaXMobmV3IEltbXV0YWJsZU1lc3NhZ2VDb252
ZXJ0ZXI8SywgVj4oZGVmYXVsdEVudHJ5KSwgbW9kZSwgbWFwRGF0YSk7Ci0gIH0KLSAgCi0gIAot
ICAvKiogUmV0dXJucyBhbiBpbW11dGFibGUgZW1wdHkgTWFwRmllbGQuICovCi0gIHB1YmxpYyBz
dGF0aWMgPEssIFY+IE1hcEZpZWxkPEssIFY+IGVtcHR5TWFwRmllbGQoCi0gICAgICBNYXBFbnRy
eTxLLCBWPiBkZWZhdWx0RW50cnkpIHsKLSAgICByZXR1cm4gbmV3IE1hcEZpZWxkPEssIFY+KAot
ICAgICAgICBkZWZhdWx0RW50cnksIFN0b3JhZ2VNb2RlLk1BUCwgQ29sbGVjdGlvbnMuPEssIFY+
ZW1wdHlNYXAoKSk7Ci0gIH0KLSAgCi0gIAotICAvKiogQ3JlYXRlcyBhIG5ldyBtdXRhYmxlIGVt
cHR5IE1hcEZpZWxkLiAqLwotICBwdWJsaWMgc3RhdGljIDxLLCBWPiBNYXBGaWVsZDxLLCBWPiBu
ZXdNYXBGaWVsZChNYXBFbnRyeTxLLCBWPiBkZWZhdWx0RW50cnkpIHsKLSAgICByZXR1cm4gbmV3
IE1hcEZpZWxkPEssIFY+KAotICAgICAgICBkZWZhdWx0RW50cnksIFN0b3JhZ2VNb2RlLk1BUCwg
bmV3IExpbmtlZEhhc2hNYXA8SywgVj4oKSk7Ci0gIH0KLSAgCi0gIAotICBwcml2YXRlIE1lc3Nh
Z2UgY29udmVydEtleUFuZFZhbHVlVG9NZXNzYWdlKEsga2V5LCBWIHZhbHVlKSB7Ci0gICAgcmV0
dXJuIGNvbnZlcnRlci5jb252ZXJ0S2V5QW5kVmFsdWVUb01lc3NhZ2Uoa2V5LCB2YWx1ZSk7Ci0g
IH0KLSAgCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwcml2YXRlIHZvaWQg
Y29udmVydE1lc3NhZ2VUb0tleUFuZFZhbHVlKE1lc3NhZ2UgbWVzc2FnZSwgTWFwPEssIFY+IG1h
cCkgewotICAgIGNvbnZlcnRlci5jb252ZXJ0TWVzc2FnZVRvS2V5QW5kVmFsdWUobWVzc2FnZSwg
bWFwKTsKLSAgfQotCi0gIHByaXZhdGUgTGlzdDxNZXNzYWdlPiBjb252ZXJ0TWFwVG9MaXN0KE11
dGF0YWJpbGl0eUF3YXJlTWFwPEssIFY+IG1hcERhdGEpIHsKLSAgICBMaXN0PE1lc3NhZ2U+IGxp
c3REYXRhID0gbmV3IEFycmF5TGlzdDxNZXNzYWdlPigpOwotICAgIGZvciAoTWFwLkVudHJ5PEss
IFY+IGVudHJ5IDogbWFwRGF0YS5lbnRyeVNldCgpKSB7Ci0gICAgICBsaXN0RGF0YS5hZGQoCi0g
ICAgICAgICAgY29udmVydEtleUFuZFZhbHVlVG9NZXNzYWdlKAotICAgICAgICAgICAgICBlbnRy
eS5nZXRLZXkoKSwgZW50cnkuZ2V0VmFsdWUoKSkpOwotICAgIH0KLSAgICByZXR1cm4gbGlzdERh
dGE7Ci0gIH0KLQotICBwcml2YXRlIE11dGF0YWJpbGl0eUF3YXJlTWFwPEssIFY+IGNvbnZlcnRM
aXN0VG9NYXAoTGlzdDxNZXNzYWdlPiBsaXN0RGF0YSkgewotICAgIE1hcDxLLCBWPiBtYXBEYXRh
ID0gbmV3IExpbmtlZEhhc2hNYXA8SywgVj4oKTsKLSAgICBmb3IgKE1lc3NhZ2UgaXRlbSA6IGxp
c3REYXRhKSB7Ci0gICAgICBjb252ZXJ0TWVzc2FnZVRvS2V5QW5kVmFsdWUoaXRlbSwgbWFwRGF0
YSk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgTXV0YXRhYmlsaXR5QXdhcmVNYXA8SywgVj4odGhp
cywgbWFwRGF0YSk7Ci0gIH0KLSAgCi0gIC8qKiBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoaXMg
TWFwRmllbGQgYXMgYSByZWFkLW9ubHkgTWFwLiAqLwotICBwdWJsaWMgTWFwPEssIFY+IGdldE1h
cCgpIHsKLSAgICBpZiAobW9kZSA9PSBTdG9yYWdlTW9kZS5MSVNUKSB7Ci0gICAgICBzeW5jaHJv
bml6ZWQgKHRoaXMpIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gU3RvcmFnZU1vZGUuTElTVCkgewot
ICAgICAgICAgIG1hcERhdGEgPSBjb252ZXJ0TGlzdFRvTWFwKGxpc3REYXRhKTsKLSAgICAgICAg
ICBtb2RlID0gU3RvcmFnZU1vZGUuQk9USDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKG1hcERhdGEpOwotICB9Ci0gIAot
ICAvKiogR2V0cyBhIG11dGFibGUgTWFwIHZpZXcgb2YgdGhpcyBNYXBGaWVsZC4gKi8KLSAgcHVi
bGljIE1hcDxLLCBWPiBnZXRNdXRhYmxlTWFwKCkgewotICAgIGlmIChtb2RlICE9IFN0b3JhZ2VN
b2RlLk1BUCkgewotICAgICAgaWYgKG1vZGUgPT0gU3RvcmFnZU1vZGUuTElTVCkgewotICAgICAg
ICBtYXBEYXRhID0gY29udmVydExpc3RUb01hcChsaXN0RGF0YSk7Ci0gICAgICB9Ci0gICAgICBs
aXN0RGF0YSA9IG51bGw7Ci0gICAgICBtb2RlID0gU3RvcmFnZU1vZGUuTUFQOyAKLSAgICB9Ci0g
ICAgcmV0dXJuIG1hcERhdGE7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIG1lcmdlRnJvbShNYXBG
aWVsZDxLLCBWPiBvdGhlcikgewotICAgIGdldE11dGFibGVNYXAoKS5wdXRBbGwoTWFwRmllbGRM
aXRlLmNvcHkob3RoZXIuZ2V0TWFwKCkpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgY2xlYXIo
KSB7Ci0gICAgbWFwRGF0YSA9IG5ldyBNdXRhdGFiaWxpdHlBd2FyZU1hcDxLLCBWPih0aGlzLCBu
ZXcgTGlua2VkSGFzaE1hcDxLLCBWPigpKTsKLSAgICBtb2RlID0gU3RvcmFnZU1vZGUuTUFQOwot
ICB9Ci0gIAotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAgaWYgKCEob2JqZWN0
IGluc3RhbmNlb2YgTWFwRmllbGQpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IE1hcEZpZWxkPEssIFY+IG90aGVyID0gKE1hcEZpZWxkPEssIFY+KSBvYmplY3Q7Ci0gICAgcmV0
dXJuIE1hcEZpZWxkTGl0ZS48SywgVj5lcXVhbHMoZ2V0TWFwKCksIG90aGVyLmdldE1hcCgpKTsK
LSAgfQotICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgcmV0
dXJuIE1hcEZpZWxkTGl0ZS48SywgVj5jYWxjdWxhdGVIYXNoQ29kZUZvck1hcChnZXRNYXAoKSk7
Ci0gIH0KLSAgCi0gIC8qKiBSZXR1cm5zIGEgZGVlcCBjb3B5IG9mIHRoaXMgTWFwRmllbGQuICov
Ci0gIHB1YmxpYyBNYXBGaWVsZDxLLCBWPiBjb3B5KCkgewotICAgIHJldHVybiBuZXcgTWFwRmll
bGQ8SywgVj4oCi0gICAgICAgIGNvbnZlcnRlciwgU3RvcmFnZU1vZGUuTUFQLCBNYXBGaWVsZExp
dGUuY29weShnZXRNYXAoKSkpOwotICB9Ci0gIAotICAvKiogR2V0cyB0aGUgY29udGVudCBvZiB0
aGlzIE1hcEZpZWxkIGFzIGEgcmVhZC1vbmx5IExpc3QuICovCi0gIExpc3Q8TWVzc2FnZT4gZ2V0
TGlzdCgpIHsKLSAgICBpZiAobW9kZSA9PSBTdG9yYWdlTW9kZS5NQVApIHsKLSAgICAgIHN5bmNo
cm9uaXplZCAodGhpcykgewotICAgICAgICBpZiAobW9kZSA9PSBTdG9yYWdlTW9kZS5NQVApIHsK
LSAgICAgICAgICBsaXN0RGF0YSA9IGNvbnZlcnRNYXBUb0xpc3QobWFwRGF0YSk7Ci0gICAgICAg
ICAgbW9kZSA9IFN0b3JhZ2VNb2RlLkJPVEg7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QobGlzdERhdGEpOwotICB9Ci0g
IAotICAvKiogR2V0cyBhIG11dGFibGUgTGlzdCB2aWV3IG9mIHRoaXMgTWFwRmllbGQuICovCi0g
IExpc3Q8TWVzc2FnZT4gZ2V0TXV0YWJsZUxpc3QoKSB7Ci0gICAgaWYgKG1vZGUgIT0gU3RvcmFn
ZU1vZGUuTElTVCkgewotICAgICAgaWYgKG1vZGUgPT0gU3RvcmFnZU1vZGUuTUFQKSB7Ci0gICAg
ICAgIGxpc3REYXRhID0gY29udmVydE1hcFRvTGlzdChtYXBEYXRhKTsKLSAgICAgIH0KLSAgICAg
IG1hcERhdGEgPSBudWxsOwotICAgICAgbW9kZSA9IFN0b3JhZ2VNb2RlLkxJU1Q7Ci0gICAgfQot
ICAgIHJldHVybiBsaXN0RGF0YTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldHMgdGhlIGRlZmF1
bHQgaW5zdGFuY2Ugb2YgdGhlIG1lc3NhZ2Ugc3RvcmVkIGluIHRoZSBsaXN0IHZpZXcgb2YgdGhp
cwotICAgKiBtYXAgZmllbGQuCi0gICAqLwotICBNZXNzYWdlIGdldE1hcEVudHJ5TWVzc2FnZURl
ZmF1bHRJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gY29udmVydGVyLmdldE1lc3NhZ2VEZWZhdWx0
SW5zdGFuY2UoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE1ha2VzIHRoaXMgbGlzdCBpbW11dGFi
bGUuIEFsbCBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbnMgd2lsbCB0aHJvdyBhbgotICAgKiB7QGxp
bmsgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb259LgotICAgKi8KLSAgcHVibGljIHZvaWQg
bWFrZUltbXV0YWJsZSgpIHsKLSAgICBpc011dGFibGUgPSBmYWxzZTsKLSAgfQotICAKLSAgLyoq
Ci0gICAqIFJldHVybnMgd2hldGhlciB0aGlzIGZpZWxkIGNhbiBiZSBtb2RpZmllZC4KLSAgICov
Ci0gIHB1YmxpYyBib29sZWFuIGlzTXV0YWJsZSgpIHsKLSAgICByZXR1cm4gaXNNdXRhYmxlOwot
ICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgY29tLmdvb2dsZS5wcm90b2J1
Zi5NdXRhYmlsaXR5T3JhY2xlI2Vuc3VyZU11dGFibGUoKQotICAgKi8KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIGVuc3VyZU11dGFibGUoKSB7Ci0gICAgaWYgKCFpc011dGFibGUoKSkgewot
ICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQot
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvTWFwRmllbGRMaXRlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvTWFwRmllbGRMaXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk2MGI2MzM5MDlhMDY0YjUyNmRlZWI5YzE2OTQ4YzkyZWVkMTAyMTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01hcEZpZWxkTGl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAg
LTEsNTQ5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNr
YWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLklu
dGVybmFsLkVudW1MaXRlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZh
LnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQg
amF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1w
b3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBJbnRl
cm5hbCByZXByZXNlbnRhdGlvbiBvZiBtYXAgZmllbGRzIGluIGdlbmVyYXRlZCBsaXRlLXJ1bnRp
bWUgbWVzc2FnZXMuCi0gKiAKLSAqIFRoaXMgY2xhc3MgaXMgYSBwcm90b2J1ZiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwuIFVzZXJzIHNob3VsZG4ndCB1c2UgdGhpcwotICogY2xhc3MgZGlyZWN0bHku
Ci0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBNYXBGaWVsZExpdGU8SywgVj4gaW1wbGVtZW50cyBN
dXRhYmlsaXR5T3JhY2xlIHsKLSAgcHJpdmF0ZSBNdXRhdGFiaWxpdHlBd2FyZU1hcDxLLCBWPiBt
YXBEYXRhOwotICBwcml2YXRlIGJvb2xlYW4gaXNNdXRhYmxlOwotICAKLSAgcHJpdmF0ZSBNYXBG
aWVsZExpdGUoTWFwPEssIFY+IG1hcERhdGEpIHsKLSAgICB0aGlzLm1hcERhdGEgPSBuZXcgTXV0
YXRhYmlsaXR5QXdhcmVNYXA8SywgVj4odGhpcywgbWFwRGF0YSk7Ci0gICAgdGhpcy5pc011dGFi
bGUgPSB0cnVlOwotICB9Ci0gIAotICBAU3VwcHJlc3NXYXJuaW5ncyh7InJhd3R5cGVzIiwgInVu
Y2hlY2tlZCJ9KQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXBGaWVsZExpdGUgRU1QVFlfTUFQ
X0ZJRUxEID0KLSAgICAgIG5ldyBNYXBGaWVsZExpdGUoQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSk7
Ci0gIHN0YXRpYyB7Ci0gICAgRU1QVFlfTUFQX0ZJRUxELm1ha2VJbW11dGFibGUoKTsKLSAgfQot
ICAKLSAgLyoqIFJldHVybnMgYW4gc2luZ2xldG9uIGltbXV0YWJsZSBlbXB0eSBNYXBGaWVsZExp
dGUgaW5zdGFuY2UuICovCi0gIEBTdXBwcmVzc1dhcm5pbmdzKHsidW5jaGVja2VkIiwgImNhc3Qi
fSkKLSAgcHVibGljIHN0YXRpYyA8SywgVj4gTWFwRmllbGRMaXRlPEssIFY+IGVtcHR5TWFwRmll
bGQoKSB7Ci0gICAgcmV0dXJuIChNYXBGaWVsZExpdGU8SywgVj4pIEVNUFRZX01BUF9GSUVMRDsK
LSAgfQotICAKLSAgLyoqIENyZWF0ZXMgYSBuZXcgTWFwRmllbGRMaXRlIGluc3RhbmNlLiAqLwot
ICBwdWJsaWMgc3RhdGljIDxLLCBWPiBNYXBGaWVsZExpdGU8SywgVj4gbmV3TWFwRmllbGQoKSB7
Ci0gICAgcmV0dXJuIG5ldyBNYXBGaWVsZExpdGU8SywgVj4obmV3IExpbmtlZEhhc2hNYXA8Sywg
Vj4oKSk7Ci0gIH0KLSAgCi0gIC8qKiBHZXRzIHRoZSBjb250ZW50IG9mIHRoaXMgTWFwRmllbGQg
YXMgYSByZWFkLW9ubHkgTWFwLiAqLwotICBwdWJsaWMgTWFwPEssIFY+IGdldE1hcCgpIHsKLSAg
ICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKG1hcERhdGEpOwotICB9Ci0gIAot
ICAvKiogR2V0cyBhIG11dGFibGUgTWFwIHZpZXcgb2YgdGhpcyBNYXBGaWVsZC4gKi8KLSAgcHVi
bGljIE1hcDxLLCBWPiBnZXRNdXRhYmxlTWFwKCkgewotICAgIHJldHVybiBtYXBEYXRhOwotICB9
Ci0gIAotICBwdWJsaWMgdm9pZCBtZXJnZUZyb20oTWFwRmllbGRMaXRlPEssIFY+IG90aGVyKSB7
Ci0gICAgbWFwRGF0YS5wdXRBbGwoY29weShvdGhlci5tYXBEYXRhKSk7Ci0gIH0KLSAgCi0gIHB1
YmxpYyB2b2lkIGNsZWFyKCkgewotICAgIG1hcERhdGEuY2xlYXIoKTsKLSAgfQotICAKLSAgcHJp
dmF0ZSBzdGF0aWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IGEsIE9iamVjdCBiKSB7Ci0gICAgaWYg
KGEgaW5zdGFuY2VvZiBieXRlW10gJiYgYiBpbnN0YW5jZW9mIGJ5dGVbXSkgewotICAgICAgcmV0
dXJuIEFycmF5cy5lcXVhbHMoKGJ5dGVbXSkgYSwgKGJ5dGVbXSkgYik7Ci0gICAgfQotICAgIHJl
dHVybiBhLmVxdWFscyhiKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHR3
byB7QGxpbmsgTWFwfXMgYXJlIGVxdWFsLiBXZSBkb24ndCB1c2UgdGhlIGRlZmF1bHQgZXF1YWxz
Ci0gICAqIG1ldGhvZCBvZiB7QGxpbmsgTWFwfSBiZWNhdXNlIGl0IGNvbXBhcmVzIGJ5IGlkZW50
aXR5IG5vdCBieSBjb250ZW50IGZvcgotICAgKiBieXRlIGFycmF5cy4KLSAgICovCi0gIHN0YXRp
YyA8SywgVj4gYm9vbGVhbiBlcXVhbHMoTWFwPEssIFY+IGEsIE1hcDxLLCBWPiBiKSB7Ci0gICAg
aWYgKGEgPT0gYikgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChhLnNpemUo
KSAhPSBiLnNpemUoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmb3IgKE1h
cC5FbnRyeTxLLCBWPiBlbnRyeSA6IGEuZW50cnlTZXQoKSkgewotICAgICAgaWYgKCFiLmNvbnRh
aW5zS2V5KGVudHJ5LmdldEtleSgpKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9
Ci0gICAgICBpZiAoIWVxdWFscyhlbnRyeS5nZXRWYWx1ZSgpLCBiLmdldChlbnRyeS5nZXRLZXko
KSkpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0d28gbWFwIGZpZWxk
cyBhcmUgZXF1YWwuCi0gICAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqZWN0KSB7Ci0gICAg
aWYgKCEob2JqZWN0IGluc3RhbmNlb2YgTWFwRmllbGRMaXRlKSkgewotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBNYXBGaWVsZExpdGU8SywgVj4gb3RoZXIgPSAoTWFwRmllbGRMaXRl
PEssIFY+KSBvYmplY3Q7Ci0gICAgcmV0dXJuIGVxdWFscyhtYXBEYXRhLCBvdGhlci5tYXBEYXRh
KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGNhbGN1bGF0ZUhhc2hDb2RlRm9yT2Jq
ZWN0KE9iamVjdCBhKSB7Ci0gICAgaWYgKGEgaW5zdGFuY2VvZiBieXRlW10pIHsKLSAgICAgIHJl
dHVybiBJbnRlcm5hbC5oYXNoQ29kZSgoYnl0ZVtdKSBhKTsKLSAgICB9Ci0gICAgLy8gRW51bXMg
c2hvdWxkIGJlIHN0b3JlZCBhcyBpbnRlZ2VycyBpbnRlcm5hbGx5LgotICAgIGlmIChhIGluc3Rh
bmNlb2YgRW51bUxpdGUpIHsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4
Y2VwdGlvbigpOwotICAgIH0KLSAgICByZXR1cm4gYS5oYXNoQ29kZSgpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIENhbGN1bGF0ZXMgdGhlIGhhc2ggY29kZSBmb3IgYSB7QGxpbmsgTWFwfS4gV2UgZG9u
J3QgdXNlIHRoZSBkZWZhdWx0IGhhc2gKLSAgICogY29kZSBtZXRob2Qgb2Yge0BsaW5rIE1hcH0g
YmVjYXVzZSBmb3IgYnl0ZSBhcnJheXMgYW5kIHByb3RvYnVmIGVudW1zIGl0Ci0gICAqIHVzZSB7
QGxpbmsgT2JqZWN0I2hhc2hDb2RlKCl9LgotICAgKi8KLSAgc3RhdGljIDxLLCBWPiBpbnQgY2Fs
Y3VsYXRlSGFzaENvZGVGb3JNYXAoTWFwPEssIFY+IGEpIHsKLSAgICBpbnQgcmVzdWx0ID0gMDsK
LSAgICBmb3IgKE1hcC5FbnRyeTxLLCBWPiBlbnRyeSA6IGEuZW50cnlTZXQoKSkgewotICAgICAg
cmVzdWx0ICs9IGNhbGN1bGF0ZUhhc2hDb2RlRm9yT2JqZWN0KGVudHJ5LmdldEtleSgpKQotICAg
ICAgICAgIF4gY2FsY3VsYXRlSGFzaENvZGVGb3JPYmplY3QoZW50cnkuZ2V0VmFsdWUoKSk7Ci0g
ICAgfQotICAgIHJldHVybiByZXN1bHQ7ICAgIAotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIGludCBoYXNoQ29kZSgpIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlSGFzaENvZGVGb3JNYXAo
bWFwRGF0YSk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIE9iamVjdCBjb3B5KE9iamVjdCBv
YmplY3QpIHsKLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgYnl0ZVtdKSB7Ci0gICAgICBieXRl
W10gZGF0YSA9IChieXRlW10pIG9iamVjdDsKLSAgICAgIHJldHVybiBBcnJheXMuY29weU9mKGRh
dGEsIGRhdGEubGVuZ3RoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9iamVjdDsKLSAgfQotICAKLSAg
LyoqCi0gICAqIE1ha2VzIGEgZGVlcCBjb3B5IG9mIGEge0BsaW5rIE1hcH0uIEltbXV0YWJsZSBv
YmplY3RzIGluIHRoZSBtYXAgd2lsbCBiZQotICAgKiBzaGFyZWQgKGUuZy4sIGludGVnZXJzLCBz
dHJpbmdzLCBpbW11dGFibGUgbWVzc2FnZXMpIGFuZCBtdXRhYmxlIG9uZXMgd2lsbAotICAgKiBo
YXZlIGEgY29weSAoZS5nLiwgYnl0ZSBhcnJheXMsIG11dGFibGUgbWVzc2FnZXMpLgotICAgKi8K
LSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHN0YXRpYyA8SywgVj4gTWFwPEss
IFY+IGNvcHkoTWFwPEssIFY+IG1hcCkgewotICAgIE1hcDxLLCBWPiByZXN1bHQgPSBuZXcgTGlu
a2VkSGFzaE1hcDxLLCBWPigpOwotICAgIGZvciAoTWFwLkVudHJ5PEssIFY+IGVudHJ5IDogbWFw
LmVudHJ5U2V0KCkpIHsKLSAgICAgIHJlc3VsdC5wdXQoZW50cnkuZ2V0S2V5KCksIChWKSBjb3B5
KGVudHJ5LmdldFZhbHVlKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAK
LSAgLyoqIFJldHVybnMgYSBkZWVwIGNvcHkgb2YgdGhpcyBtYXAgZmllbGQuICovCi0gIHB1Ymxp
YyBNYXBGaWVsZExpdGU8SywgVj4gY29weSgpIHsKLSAgICByZXR1cm4gbmV3IE1hcEZpZWxkTGl0
ZTxLLCBWPihjb3B5KG1hcERhdGEpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE1ha2VzIHRoaXMg
ZmllbGQgaW1tdXRhYmxlLiBBbGwgc3Vic2VxdWVudCBtb2RpZmljYXRpb25zIHdpbGwgdGhyb3cg
YW4KLSAgICoge0BsaW5rIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9ufS4KLSAgICovCi0g
IHB1YmxpYyB2b2lkIG1ha2VJbW11dGFibGUoKSB7Ci0gICAgaXNNdXRhYmxlID0gZmFsc2U7Ci0g
IH0KLSAgCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmaWVsZCBjYW4gYmUgbW9k
aWZpZWQuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc011dGFibGUoKSB7Ci0gICAgcmV0dXJu
IGlzTXV0YWJsZTsKLSAgfQotICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGVuc3VyZU11
dGFibGUoKSB7Ci0gICAgaWYgKCFpc011dGFibGUoKSkgewotICAgICAgdGhyb3cgbmV3IFVuc3Vw
cG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFu
IGludGVybmFsIG1hcCB0aGF0IGNoZWNrcyBmb3IgbXV0YWJpbGl0eSBiZWZvcmUgZGVsZWdhdGlu
Zy4KLSAgICovCi0gIHN0YXRpYyBjbGFzcyBNdXRhdGFiaWxpdHlBd2FyZU1hcDxLLCBWPiBpbXBs
ZW1lbnRzIE1hcDxLLCBWPiB7ICAgIAotICAgIHByaXZhdGUgZmluYWwgTXV0YWJpbGl0eU9yYWNs
ZSBtdXRhYmlsaXR5T3JhY2xlOwotICAgIHByaXZhdGUgZmluYWwgTWFwPEssIFY+IGRlbGVnYXRl
OwotICAgIAotICAgIE11dGF0YWJpbGl0eUF3YXJlTWFwKE11dGFiaWxpdHlPcmFjbGUgbXV0YWJp
bGl0eU9yYWNsZSwgTWFwPEssIFY+IGRlbGVnYXRlKSB7Ci0gICAgICB0aGlzLm11dGFiaWxpdHlP
cmFjbGUgPSBtdXRhYmlsaXR5T3JhY2xlOwotICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRl
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICAg
IHJldHVybiBkZWxlZ2F0ZS5zaXplKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIGJvb2xlYW4gaXNFbXB0eSgpIHsKLSAgICAgIHJldHVybiBkZWxlZ2F0ZS5pc0VtcHR5KCk7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNLZXko
T2JqZWN0IGtleSkgewotICAgICAgcmV0dXJuIGRlbGVnYXRlLmNvbnRhaW5zS2V5KGtleSk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNWYWx1ZShP
YmplY3QgdmFsdWUpIHsKLSAgICAgIHJldHVybiBkZWxlZ2F0ZS5jb250YWluc1ZhbHVlKHZhbHVl
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgViBnZXQoT2JqZWN0IGtleSkg
ewotICAgICAgcmV0dXJuIGRlbGVnYXRlLmdldChrZXkpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBWIHB1dChLIGtleSwgViB2YWx1ZSkgewotICAgICAgbXV0YWJpbGl0eU9y
YWNsZS5lbnN1cmVNdXRhYmxlKCk7Ci0gICAgICByZXR1cm4gZGVsZWdhdGUucHV0KGtleSwgdmFs
dWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBWIHJlbW92ZShPYmplY3Qg
a2V5KSB7Ci0gICAgICBtdXRhYmlsaXR5T3JhY2xlLmVuc3VyZU11dGFibGUoKTsKLSAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5yZW1vdmUoa2V5KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBwdXRBbGwoTWFwPD8gZXh0ZW5kcyBLLCA/IGV4dGVuZHMgVj4gbSkgewotICAg
ICAgbXV0YWJpbGl0eU9yYWNsZS5lbnN1cmVNdXRhYmxlKCk7Ci0gICAgICBkZWxlZ2F0ZS5wdXRB
bGwobSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xlYXIoKSB7
Ci0gICAgICBtdXRhYmlsaXR5T3JhY2xlLmVuc3VyZU11dGFibGUoKTsKLSAgICAgIGRlbGVnYXRl
LmNsZWFyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNldDxLPiBrZXlT
ZXQoKSB7Ci0gICAgICByZXR1cm4gbmV3IE11dGF0YWJpbGl0eUF3YXJlU2V0PEs+KG11dGFiaWxp
dHlPcmFjbGUsIGRlbGVnYXRlLmtleVNldCgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgQ29sbGVjdGlvbjxWPiB2YWx1ZXMoKSB7Ci0gICAgICByZXR1cm4gbmV3IE11dGF0
YWJpbGl0eUF3YXJlQ29sbGVjdGlvbjxWPihtdXRhYmlsaXR5T3JhY2xlLCBkZWxlZ2F0ZS52YWx1
ZXMoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNldDxqYXZhLnV0aWwu
TWFwLkVudHJ5PEssIFY+PiBlbnRyeVNldCgpIHsKLSAgICAgIHJldHVybiBuZXcgTXV0YXRhYmls
aXR5QXdhcmVTZXQ8RW50cnk8SywgVj4+KG11dGFiaWxpdHlPcmFjbGUsIGRlbGVnYXRlLmVudHJ5
U2V0KCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFs
cyhPYmplY3QgbykgewotICAgICAgcmV0dXJuIGRlbGVnYXRlLmVxdWFscyhvKTsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgcmV0dXJu
IGRlbGVnYXRlLmhhc2hDb2RlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVybiBkZWxlZ2F0ZS50b1N0cmluZygpOwot
ICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbiBpbnRlcm5hbCBjb2xsZWN0aW9uIHRoYXQgY2hl
Y2tzIGZvciBtdXRhYmlsaXR5IGJlZm9yZSBkZWxlZ2F0aW5nLgotICAgKi8KLSAgcHJpdmF0ZSBz
dGF0aWMgY2xhc3MgTXV0YXRhYmlsaXR5QXdhcmVDb2xsZWN0aW9uPEU+IGltcGxlbWVudHMgQ29s
bGVjdGlvbjxFPiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNdXRhYmlsaXR5T3JhY2xlIG11dGFiaWxp
dHlPcmFjbGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDb2xsZWN0aW9uPEU+IGRlbGVnYXRlOwotICAg
IAotICAgIE11dGF0YWJpbGl0eUF3YXJlQ29sbGVjdGlvbihNdXRhYmlsaXR5T3JhY2xlIG11dGFi
aWxpdHlPcmFjbGUsIENvbGxlY3Rpb248RT4gZGVsZWdhdGUpIHsKLSAgICAgIHRoaXMubXV0YWJp
bGl0eU9yYWNsZSA9IG11dGFiaWxpdHlPcmFjbGU7Ci0gICAgICB0aGlzLmRlbGVnYXRlID0gZGVs
ZWdhdGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBzaXplKCkgewot
ICAgICAgcmV0dXJuIGRlbGVnYXRlLnNpemUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgewotICAgICAgcmV0dXJuIGRlbGVnYXRlLmlzRW1w
dHkoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlu
cyhPYmplY3QgbykgewotICAgICAgcmV0dXJuIGRlbGVnYXRlLmNvbnRhaW5zKG8pOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJdGVyYXRvcjxFPiBpdGVyYXRvcigpIHsKLSAg
ICAgIHJldHVybiBuZXcgTXV0YXRhYmlsaXR5QXdhcmVJdGVyYXRvcjxFPihtdXRhYmlsaXR5T3Jh
Y2xlLCBkZWxlZ2F0ZS5pdGVyYXRvcigpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgT2JqZWN0W10gdG9BcnJheSgpIHsKLSAgICAgIHJldHVybiBkZWxlZ2F0ZS50b0FycmF5
KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxUPiBUW10gdG9BcnJheShU
W10gYSkgewotICAgICAgcmV0dXJuIGRlbGVnYXRlLnRvQXJyYXkoYSk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gYWRkKEUgZSkgewotICAgICAgLy8gVW5zdXBw
b3J0ZWQgb3BlcmF0aW9uIGluIHRoZSBkZWxlZ2F0ZS4KLSAgICAgIHRocm93IG5ldyBVbnN1cHBv
cnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBib29sZWFuIHJlbW92ZShPYmplY3QgbykgewotICAgICAgbXV0YWJpbGl0eU9yYWNsZS5l
bnN1cmVNdXRhYmxlKCk7Ci0gICAgICByZXR1cm4gZGVsZWdhdGUucmVtb3ZlKG8pOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zQWxsKENvbGxlY3Rp
b248Pz4gYykgewotICAgICAgcmV0dXJuIGRlbGVnYXRlLmNvbnRhaW5zQWxsKGMpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGFkZEFsbChDb2xsZWN0aW9uPD8g
ZXh0ZW5kcyBFPiBjKSB7Ci0gICAgICAvLyBVbnN1cHBvcnRlZCBvcGVyYXRpb24gaW4gdGhlIGRl
bGVnYXRlLgotICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsKENv
bGxlY3Rpb248Pz4gYykgewotICAgICAgbXV0YWJpbGl0eU9yYWNsZS5lbnN1cmVNdXRhYmxlKCk7
Ci0gICAgICByZXR1cm4gZGVsZWdhdGUucmVtb3ZlQWxsKGMpOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBib29sZWFuIHJldGFpbkFsbChDb2xsZWN0aW9uPD8+IGMpIHsKLSAg
ICAgIG11dGFiaWxpdHlPcmFjbGUuZW5zdXJlTXV0YWJsZSgpOwotICAgICAgcmV0dXJuIGRlbGVn
YXRlLnJldGFpbkFsbChjKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9p
ZCBjbGVhcigpIHsKLSAgICAgIG11dGFiaWxpdHlPcmFjbGUuZW5zdXJlTXV0YWJsZSgpOwotICAg
ICAgZGVsZWdhdGUuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
Ym9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKLSAgICAgIHJldHVybiBkZWxlZ2F0ZS5lcXVhbHMo
byk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsK
LSAgICAgIHJldHVybiBkZWxlZ2F0ZS5oYXNoQ29kZSgpOwotICAgIH0KLSAgICAKLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIGRlbGVn
YXRlLnRvU3RyaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFuIGludGVybmFsIHNl
dCB0aGF0IGNoZWNrcyBmb3IgbXV0YWJpbGl0eSBiZWZvcmUgZGVsZWdhdGluZy4KLSAgICovCi0g
IHByaXZhdGUgc3RhdGljIGNsYXNzIE11dGF0YWJpbGl0eUF3YXJlU2V0PEU+IGltcGxlbWVudHMg
U2V0PEU+IHsKLSAgICBwcml2YXRlIGZpbmFsIE11dGFiaWxpdHlPcmFjbGUgbXV0YWJpbGl0eU9y
YWNsZTsKLSAgICBwcml2YXRlIGZpbmFsIFNldDxFPiBkZWxlZ2F0ZTsKLSAgICAKLSAgICBNdXRh
dGFiaWxpdHlBd2FyZVNldChNdXRhYmlsaXR5T3JhY2xlIG11dGFiaWxpdHlPcmFjbGUsIFNldDxF
PiBkZWxlZ2F0ZSkgewotICAgICAgdGhpcy5tdXRhYmlsaXR5T3JhY2xlID0gbXV0YWJpbGl0eU9y
YWNsZTsKLSAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgaW50IHNpemUoKSB7Ci0gICAgICByZXR1cm4gZGVsZWdhdGUuc2l6
ZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHko
KSB7Ci0gICAgICByZXR1cm4gZGVsZWdhdGUuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKE9iamVjdCBvKSB7Ci0gICAgICByZXR1
cm4gZGVsZWdhdGUuY29udGFpbnMobyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yKCkgewotICAgICAgcmV0dXJuIG5ldyBNdXRhdGFiaWxp
dHlBd2FyZUl0ZXJhdG9yPEU+KG11dGFiaWxpdHlPcmFjbGUsIGRlbGVnYXRlLml0ZXJhdG9yKCkp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3RbXSB0b0FycmF5KCkg
ewotICAgICAgcmV0dXJuIGRlbGVnYXRlLnRvQXJyYXkoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgPFQ+IFRbXSB0b0FycmF5KFRbXSBhKSB7Ci0gICAgICByZXR1cm4gZGVs
ZWdhdGUudG9BcnJheShhKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9v
bGVhbiBhZGQoRSBlKSB7Ci0gICAgICBtdXRhYmlsaXR5T3JhY2xlLmVuc3VyZU11dGFibGUoKTsK
LSAgICAgIHJldHVybiBkZWxlZ2F0ZS5hZGQoZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlKE9iamVjdCBvKSB7Ci0gICAgICBtdXRhYmlsaXR5T3Jh
Y2xlLmVuc3VyZU11dGFibGUoKTsKLSAgICAgIHJldHVybiBkZWxlZ2F0ZS5yZW1vdmUobyk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNBbGwoQ29s
bGVjdGlvbjw/PiBjKSB7Ci0gICAgICByZXR1cm4gZGVsZWdhdGUuY29udGFpbnNBbGwoYyk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gYWRkQWxsKENvbGxlY3Rp
b248PyBleHRlbmRzIEU+IGMpIHsKLSAgICAgIG11dGFiaWxpdHlPcmFjbGUuZW5zdXJlTXV0YWJs
ZSgpOwotICAgICAgcmV0dXJuIGRlbGVnYXRlLmFkZEFsbChjKTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiByZXRhaW5BbGwoQ29sbGVjdGlvbjw/PiBjKSB7Ci0g
ICAgICBtdXRhYmlsaXR5T3JhY2xlLmVuc3VyZU11dGFibGUoKTsKLSAgICAgIHJldHVybiBkZWxl
Z2F0ZS5yZXRhaW5BbGwoYyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJv
b2xlYW4gcmVtb3ZlQWxsKENvbGxlY3Rpb248Pz4gYykgewotICAgICAgbXV0YWJpbGl0eU9yYWNs
ZS5lbnN1cmVNdXRhYmxlKCk7Ci0gICAgICByZXR1cm4gZGVsZWdhdGUucmVtb3ZlQWxsKGMpOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsZWFyKCkgewotICAgICAg
bXV0YWJpbGl0eU9yYWNsZS5lbnN1cmVNdXRhYmxlKCk7Ci0gICAgICBkZWxlZ2F0ZS5jbGVhcigp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmpl
Y3QgbykgewotICAgICAgcmV0dXJuIGRlbGVnYXRlLmVxdWFscyhvKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgcmV0dXJuIGRlbGVn
YXRlLmhhc2hDb2RlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmlu
ZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVybiBkZWxlZ2F0ZS50b1N0cmluZygpOwotICAgIH0K
LSAgfQotICAKLSAgLyoqCi0gICAqIEFuIGludGVybmFsIGl0ZXJhdG9yIHRoYXQgY2hlY2tzIGZv
ciBtdXRhYmlsaXR5IGJlZm9yZSBkZWxlZ2F0aW5nLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMg
Y2xhc3MgTXV0YXRhYmlsaXR5QXdhcmVJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+
IHsKLSAgICBwcml2YXRlIGZpbmFsIE11dGFiaWxpdHlPcmFjbGUgbXV0YWJpbGl0eU9yYWNsZTsK
LSAgICBwcml2YXRlIGZpbmFsIEl0ZXJhdG9yPEU+IGRlbGVnYXRlOwotICAgIAotICAgIE11dGF0
YWJpbGl0eUF3YXJlSXRlcmF0b3IoTXV0YWJpbGl0eU9yYWNsZSBtdXRhYmlsaXR5T3JhY2xlLCBJ
dGVyYXRvcjxFPiBkZWxlZ2F0ZSkgewotICAgICAgdGhpcy5tdXRhYmlsaXR5T3JhY2xlID0gbXV0
YWJpbGl0eU9yYWNsZTsKLSAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgewotICAgICAgcmV0
dXJuIGRlbGVnYXRlLmhhc05leHQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgRSBuZXh0KCkgewotICAgICAgcmV0dXJuIGRlbGVnYXRlLm5leHQoKTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7Ci0gICAgICBtdXRhYmlsaXR5
T3JhY2xlLmVuc3VyZU11dGFibGUoKTsKLSAgICAgIGRlbGVnYXRlLnJlbW92ZSgpOwotICAgIH0K
LSAgICAKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9i
aikgewotICAgICAgcmV0dXJuIGRlbGVnYXRlLmVxdWFscyhvYmopOwotICAgIH0KLSAgICAKLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgcmV0dXJuIGRl
bGVnYXRlLmhhc2hDb2RlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0
cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVybiBkZWxlZ2F0ZS50b1N0cmluZygpOwotICAg
IH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL01lc3NhZ2UuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9NZXNzYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0
NTkwZmI5MWIzYjVjNzVlYjllY2QzNGUxYTRjMmEwNTM0ZmU3YjMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL01lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MiArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVE9ETyhrZW50b24p
OiAgVXNlIGdlbmVyaWNzPyAgRS5nLiBCdWlsZGVyPEJ1aWxkZXJUeXBlIGV4dGVuZHMgQnVpbGRl
cj4sIHRoZW4KLS8vICAgbWVyZ2VGcm9tKigpIGNvdWxkIHJldHVybiBCdWlsZGVyVHlwZSBmb3Ig
YmV0dGVyIHR5cGUtc2FmZXR5LgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWlt
cG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1p
bXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBBYnN0cmFjdCBpbnRlcmZhY2UgaW1wbGVt
ZW50ZWQgYnkgUHJvdG9jb2wgTWVzc2FnZSBvYmplY3RzLgotICogPHA+Ci0gKiBTZWUgYWxzbyB7
QGxpbmsgTWVzc2FnZUxpdGV9LCB3aGljaCBkZWZpbmVzIG1vc3Qgb2YgdGhlIG1ldGhvZHMgdGhh
dCB0eXBpY2FsCi0gKiB1c2VycyBjYXJlIGFib3V0LiAge0BsaW5rIE1lc3NhZ2V9IGFkZHMgdG8g
aXQgbWV0aG9kcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlCi0gKiBpbiB0aGUgImxpdGUiIHJ1bnRp
bWUuICBUaGUgYmlnZ2VzdCBhZGRlZCBmZWF0dXJlcyBhcmUgaW50cm9zcGVjdGlvbiBhbmQKLSAq
IHJlZmxlY3Rpb24gLS0gaS5lLiwgZ2V0dGluZyBkZXNjcmlwdG9ycyBmb3IgdGhlIG1lc3NhZ2Ug
dHlwZSBhbmQgYWNjZXNzaW5nCi0gKiB0aGUgZmllbGQgdmFsdWVzIGR5bmFtaWNhbGx5LgotICoK
LSAqIEBhdXRob3Iga2VudG9uQGdvb2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBp
bnRlcmZhY2UgTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2VMaXRlLCBNZXNzYWdlT3JCdWlsZGVyIHsK
LQotICAvLyAoRnJvbSBNZXNzYWdlTGl0ZSwgcmUtZGVjbGFyZWQgaGVyZSBvbmx5IGZvciByZXR1
cm4gdHlwZSBjb3ZhcmlhbmNlLikKLSAgQE92ZXJyaWRlCi0gIFBhcnNlcjw/IGV4dGVuZHMgTWVz
c2FnZT4gZ2V0UGFyc2VyRm9yVHlwZSgpOwotCi0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gQ29tcGFy
aXNvbiBhbmQgaGFzaGluZwotCi0gIC8qKgotICAgKiBDb21wYXJlcyB0aGUgc3BlY2lmaWVkIG9i
amVjdCB3aXRoIHRoaXMgbWVzc2FnZSBmb3IgZXF1YWxpdHkuICBSZXR1cm5zCi0gICAqIHtAY29k
ZSB0cnVlfSBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgbWVzc2FnZSBvZiB0aGUgc2FtZSB0eXBl
IChhcwotICAgKiBkZWZpbmVkIGJ5IHtAY29kZSBnZXREZXNjcmlwdG9yRm9yVHlwZSgpfSkgYW5k
IGhhcyBpZGVudGljYWwgdmFsdWVzIGZvcgotICAgKiBhbGwgb2YgaXRzIGZpZWxkcy4gIFN1YmNs
YXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpczsgaW5oZXJpdGluZwotICAgKiB7QGNvZGUgT2JqZWN0
LmVxdWFscygpfSBpcyBpbmNvcnJlY3QuCi0gICAqCi0gICAqIEBwYXJhbSBvdGhlciBvYmplY3Qg
dG8gYmUgY29tcGFyZWQgZm9yIGVxdWFsaXR5IHdpdGggdGhpcyBtZXNzYWdlCi0gICAqIEByZXR1
cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGVxdWFsIHRvIHRoaXMg
bWVzc2FnZQotICAgKi8KLSAgQE92ZXJyaWRlCi0gIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhl
cik7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGhhc2ggY29kZSB2YWx1ZSBmb3IgdGhpcyBt
ZXNzYWdlLiAgVGhlIGhhc2ggY29kZSBvZiBhIG1lc3NhZ2UKLSAgICogc2hvdWxkIG1peCB0aGUg
bWVzc2FnZSdzIHR5cGUgKG9iamVjdCBpZGVudGl0eSBvZiB0aGUgZGVzY3JpcHRvcikgd2l0aCBp
dHMKLSAgICogY29udGVudHMgKGtub3duIGFuZCB1bmtub3duIGZpZWxkIHZhbHVlcykuICBTdWJj
bGFzc2VzIG11c3QgaW1wbGVtZW50IHRoaXM7Ci0gICAqIGluaGVyaXRpbmcge0Bjb2RlIE9iamVj
dC5oYXNoQ29kZSgpfSBpcyBpbmNvcnJlY3QuCi0gICAqCi0gICAqIEByZXR1cm4gdGhlIGhhc2gg
Y29kZSB2YWx1ZSBmb3IgdGhpcyBtZXNzYWdlCi0gICAqIEBzZWUgTWFwI2hhc2hDb2RlKCkKLSAg
ICovCi0gIEBPdmVycmlkZQotICBpbnQgaGFzaENvZGUoKTsKLQotICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAv
LyBDb252ZW5pZW5jZSBtZXRob2RzLgotCi0gIC8qKgotICAgKiBDb252ZXJ0cyB0aGUgbWVzc2Fn
ZSB0byBhIHN0cmluZyBpbiBwcm90b2NvbCBidWZmZXIgdGV4dCBmb3JtYXQuIFRoaXMgaXMKLSAg
ICoganVzdCBhIHRyaXZpYWwgd3JhcHBlciBhcm91bmQge0BsaW5rCi0gICAqIFRleHRGb3JtYXQj
cHJpbnRUb1N0cmluZyhNZXNzYWdlT3JCdWlsZGVyKX0uCi0gICAqLwotICBAT3ZlcnJpZGUKLSAg
U3RyaW5nIHRvU3RyaW5nKCk7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQnVpbGRlcnMKLQotICAv
LyAoRnJvbSBNZXNzYWdlTGl0ZSwgcmUtZGVjbGFyZWQgaGVyZSBvbmx5IGZvciByZXR1cm4gdHlw
ZSBjb3ZhcmlhbmNlLikKLSAgQE92ZXJyaWRlCi0gIEJ1aWxkZXIgbmV3QnVpbGRlckZvclR5cGUo
KTsKLQotICBAT3ZlcnJpZGUKLSAgQnVpbGRlciB0b0J1aWxkZXIoKTsKLQotICAvKioKLSAgICog
QWJzdHJhY3QgaW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IFByb3RvY29sIE1lc3NhZ2UgYnVpbGRl
cnMuCi0gICAqLwotICBpbnRlcmZhY2UgQnVpbGRlciBleHRlbmRzIE1lc3NhZ2VMaXRlLkJ1aWxk
ZXIsIE1lc3NhZ2VPckJ1aWxkZXIgewotICAgIC8vIChGcm9tIE1lc3NhZ2VMaXRlLkJ1aWxkZXIs
IHJlLWRlY2xhcmVkIGhlcmUgb25seSBmb3IgcmV0dXJuIHR5cGUKLSAgICAvLyBjb3ZhcmlhbmNl
LikKLSAgICBAT3ZlcnJpZGUKLSAgICBCdWlsZGVyIGNsZWFyKCk7Ci0KLSAgICAvKioKLSAgICAg
KiBNZXJnZSB7QGNvZGUgb3RoZXJ9IGludG8gdGhlIG1lc3NhZ2UgYmVpbmcgYnVpbHQuICB7QGNv
ZGUgb3RoZXJ9IG11c3QKLSAgICAgKiBoYXZlIHRoZSBleGFjdCBzYW1lIHR5cGUgYXMge0Bjb2Rl
IHRoaXN9IChpLmUuCi0gICAgICoge0Bjb2RlIGdldERlc2NyaXB0b3JGb3JUeXBlKCkgPT0gb3Ro
ZXIuZ2V0RGVzY3JpcHRvckZvclR5cGUoKX0pLgotICAgICAqCi0gICAgICogTWVyZ2luZyBvY2N1
cnMgYXMgZm9sbG93cy4gIEZvciBlYWNoIGZpZWxkOjxicj4KLSAgICAgKiAqIEZvciBzaW5ndWxh
ciBwcmltaXRpdmUgZmllbGRzLCBpZiB0aGUgZmllbGQgaXMgc2V0IGluIHtAY29kZSBvdGhlcn0s
Ci0gICAgICogICB0aGVuIHtAY29kZSBvdGhlcn0ncyB2YWx1ZSBvdmVyd3JpdGVzIHRoZSB2YWx1
ZSBpbiB0aGlzIG1lc3NhZ2UuPGJyPgotICAgICAqICogRm9yIHNpbmd1bGFyIG1lc3NhZ2UgZmll
bGRzLCBpZiB0aGUgZmllbGQgaXMgc2V0IGluIHtAY29kZSBvdGhlcn0sCi0gICAgICogICBpdCBp
cyBtZXJnZWQgaW50byB0aGUgY29ycmVzcG9uZGluZyBzdWItbWVzc2FnZSBvZiB0aGlzIG1lc3Nh
Z2UKLSAgICAgKiAgIHVzaW5nIHRoZSBzYW1lIG1lcmdpbmcgcnVsZXMuPGJyPgotICAgICAqICog
Rm9yIHJlcGVhdGVkIGZpZWxkcywgdGhlIGVsZW1lbnRzIGluIHtAY29kZSBvdGhlcn0gYXJlIGNv
bmNhdGVuYXRlZAotICAgICAqICAgd2l0aCB0aGUgZWxlbWVudHMgaW4gdGhpcyBtZXNzYWdlLgot
ICAgICAqICogRm9yIG9uZW9mIGdyb3VwcywgaWYgdGhlIG90aGVyIG1lc3NhZ2UgaGFzIG9uZSBv
ZiB0aGUgZmllbGRzIHNldCwKLSAgICAgKiAgIHRoZSBncm91cCBvZiB0aGlzIG1lc3NhZ2UgaXMg
Y2xlYXJlZCBhbmQgcmVwbGFjZWQgYnkgdGhlIGZpZWxkCi0gICAgICogICBvZiB0aGUgb3RoZXIg
bWVzc2FnZSwgc28gdGhhdCB0aGUgb25lb2YgY29uc3RyYWludCBpcyBwcmVzZXJ2ZWQuCi0gICAg
ICoKLSAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHtAY29kZSBNZXNzYWdlOjpNZXJn
ZUZyb219IG1ldGhvZCBpbiBDKysuCi0gICAgICovCi0gICAgQnVpbGRlciBtZXJnZUZyb20oTWVz
c2FnZSBvdGhlcik7Ci0KLSAgICAvLyAoRnJvbSBNZXNzYWdlTGl0ZS5CdWlsZGVyLCByZS1kZWNs
YXJlZCBoZXJlIG9ubHkgZm9yIHJldHVybiB0eXBlCi0gICAgLy8gY292YXJpYW5jZS4pCi0gICAg
QE92ZXJyaWRlCi0gICAgTWVzc2FnZSBidWlsZCgpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgTWVz
c2FnZSBidWlsZFBhcnRpYWwoKTsKLQotICAgIEBPdmVycmlkZQotICAgIEJ1aWxkZXIgY2xvbmUo
KTsKLQotICAgIEBPdmVycmlkZQotICAgIEJ1aWxkZXIgbWVyZ2VGcm9tKENvZGVkSW5wdXRTdHJl
YW0gaW5wdXQpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIEBPdmVycmlkZQotICAgIEJ1aWxk
ZXIgbWVyZ2VGcm9tKENvZGVkSW5wdXRTdHJlYW0gaW5wdXQsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0
ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gICAg
LyoqCi0gICAgICogR2V0IHRoZSBtZXNzYWdlJ3MgdHlwZSdzIGRlc2NyaXB0b3IuCi0gICAgICog
U2VlIHtAbGluayBNZXNzYWdlI2dldERlc2NyaXB0b3JGb3JUeXBlKCl9LgotICAgICAqLwotICAg
IEBPdmVycmlkZQotICAgIERlc2NyaXB0b3JzLkRlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvckZvclR5
cGUoKTsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIEJ1aWxkZXIgZm9yIG1lc3NhZ2VzIG9m
IHRoZSBhcHByb3ByaWF0ZSB0eXBlIGZvciB0aGUgZ2l2ZW4KLSAgICAgKiBmaWVsZC4gIE1lc3Nh
Z2VzIGJ1aWx0IHdpdGggdGhpcyBjYW4gdGhlbiBiZSBwYXNzZWQgdG8gc2V0RmllbGQoKSwKLSAg
ICAgKiBzZXRSZXBlYXRlZEZpZWxkKCksIG9yIGFkZFJlcGVhdGVkRmllbGQoKS4KLSAgICAgKi8K
LSAgICBCdWlsZGVyIG5ld0J1aWxkZXJGb3JGaWVsZChEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0
b3IgZmllbGQpOwotCi0gICAgLyoqCi0gICAgICogR2V0IGEgbmVzdGVkIGJ1aWxkZXIgaW5zdGFu
Y2UgZm9yIHRoZSBnaXZlbiBmaWVsZC4KLSAgICAgKiA8cD4KLSAgICAgKiBOb3JtYWxseSwgd2Ug
aG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgaW1tdXRhYmxlIG1lc3NhZ2Ugb2JqZWN0IGZvciB0aGUK
LSAgICAgKiBtZXNzYWdlIHR5cGUgZmllbGQuIFNvbWUgaW1wbGVtZW50YXRpb25zKHRoZSBnZW5l
cmF0ZWQgbWVzc2FnZSBidWlsZGVycyksCi0gICAgICogaG93ZXZlciwgY2FuIGFsc28gaG9sZCBh
IHJlZmVyZW5jZSB0byB0aGUgYnVpbGRlciBvYmplY3QgKGEgbmVzdGVkCi0gICAgICogYnVpbGRl
cikgZm9yIHRoZSBmaWVsZC4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiB0aGUgZmllbGQgaXMgYWxy
ZWFkeSBiYWNrZWQgdXAgYnkgYSBuZXN0ZWQgYnVpbGRlciwgdGhlIG5lc3RlZCBidWlsZGVyCi0g
ICAgICogd2lsbCBiZSByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIG5ldyBmaWVsZCBidWlsZGVyIHdp
bGwgYmUgY3JlYXRlZCBhbmQKLSAgICAgKiByZXR1cm5lZC4gVGhlIG9yaWdpbmFsIG1lc3NhZ2Ug
ZmllbGQgKGlmIGV4aXN0KSB3aWxsIGJlIG1lcmdlZCBpbnRvIHRoZQotICAgICAqIGZpZWxkIGJ1
aWxkZXIsIHdoaWNoIHdpbGwgdGhlbiBiZSBuZXN0ZWQgaW50byBpdHMgcGFyZW50IGJ1aWxkZXIu
Ci0gICAgICogPHA+Ci0gICAgICogTk9URTogaW1wbGVtZW50YXRpb25zIHRoYXQgZG8gbm90IHN1
cHBvcnQgbmVzdGVkIGJ1aWxkZXJzIHdpbGwgdGhyb3cKLSAgICAgKiA8Y29kZT5VbnN1cHBvcnRl
ZE9wZXJhdGlvbkV4Y2VwdGlvbjwvY29kZT4uCi0gICAgICovCi0gICAgQnVpbGRlciBnZXRGaWVs
ZEJ1aWxkZXIoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkKTsKLQotICAgIC8qKgot
ICAgICAqIEdldCBhIG5lc3RlZCBidWlsZGVyIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gcmVwZWF0
ZWQgZmllbGQgaW5zdGFuY2UuCi0gICAgICogPHA+Ci0gICAgICogTm9ybWFsbHksIHdlIGhvbGQg
YSByZWZlcmVuY2UgdG8gdGhlIGltbXV0YWJsZSBtZXNzYWdlIG9iamVjdCBmb3IgdGhlCi0gICAg
ICogbWVzc2FnZSB0eXBlIGZpZWxkLiBTb21lIGltcGxlbWVudGF0aW9ucyh0aGUgZ2VuZXJhdGVk
IG1lc3NhZ2UgYnVpbGRlcnMpLAotICAgICAqIGhvd2V2ZXIsIGNhbiBhbHNvIGhvbGQgYSByZWZl
cmVuY2UgdG8gdGhlIGJ1aWxkZXIgb2JqZWN0IChhIG5lc3RlZAotICAgICAqIGJ1aWxkZXIpIGZv
ciB0aGUgZmllbGQuCi0gICAgICogPHA+Ci0gICAgICogSWYgdGhlIGZpZWxkIGlzIGFscmVhZHkg
YmFja2VkIHVwIGJ5IGEgbmVzdGVkIGJ1aWxkZXIsIHRoZSBuZXN0ZWQgYnVpbGRlcgotICAgICAq
IHdpbGwgYmUgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBuZXcgZmllbGQgYnVpbGRlciB3aWxsIGJl
IGNyZWF0ZWQgYW5kCi0gICAgICogcmV0dXJuZWQuIFRoZSBvcmlnaW5hbCBtZXNzYWdlIGZpZWxk
IChpZiBleGlzdCkgd2lsbCBiZSBtZXJnZWQgaW50byB0aGUKLSAgICAgKiBmaWVsZCBidWlsZGVy
LCB3aGljaCB3aWxsIHRoZW4gYmUgbmVzdGVkIGludG8gaXRzIHBhcmVudCBidWlsZGVyLgotICAg
ICAqIDxwPgotICAgICAqIE5PVEU6IGltcGxlbWVudGF0aW9ucyB0aGF0IGRvIG5vdCBzdXBwb3J0
IG5lc3RlZCBidWlsZGVycyB3aWxsIHRocm93Ci0gICAgICogPGNvZGU+VW5zdXBwb3J0ZWRPcGVy
YXRpb25FeGNlcHRpb248L2NvZGU+LgotICAgICAqLwotICAgIEJ1aWxkZXIgZ2V0UmVwZWF0ZWRG
aWVsZEJ1aWxkZXIoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4KTsKLQotICAgIC8qKgotICAgICAq
IFNldHMgYSBmaWVsZCB0byB0aGUgZ2l2ZW4gdmFsdWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0
aGUgY29ycmVjdCB0eXBlCi0gICAgICogZm9yIHRoaXMgZmllbGQsIGkuZS4gdGhlIHNhbWUgdHlw
ZSB0aGF0Ci0gICAgICoge0BsaW5rIE1lc3NhZ2UjZ2V0RmllbGQoRGVzY3JpcHRvcnMuRmllbGRE
ZXNjcmlwdG9yKX0gd291bGQgcmV0dXJuLgotICAgICAqLwotICAgIEJ1aWxkZXIgc2V0RmllbGQo
RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkLCBPYmplY3QgdmFsdWUpOwotCi0gICAg
LyoqCi0gICAgICogQ2xlYXJzIHRoZSBmaWVsZC4gIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50
IHRvIGNhbGxpbmcgdGhlIGdlbmVyYXRlZAotICAgICAqICJjbGVhciIgYWNjZXNzb3IgbWV0aG9k
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpZWxkLgotICAgICAqLwotICAgIEJ1aWxkZXIgY2xlYXJG
aWVsZChEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmllbGQpOwotCi0gICAgLyoqCi0gICAg
ICogQ2xlYXJzIHRoZSBvbmVvZi4gIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIGNhbGxp
bmcgdGhlIGdlbmVyYXRlZAotICAgICAqICJjbGVhciIgYWNjZXNzb3IgbWV0aG9kIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIG9uZW9mLgotICAgICAqLwotICAgIEJ1aWxkZXIgY2xlYXJPbmVvZihEZXNj
cmlwdG9ycy5PbmVvZkRlc2NyaXB0b3Igb25lb2YpOwotCi0gICAgLyoqCi0gICAgICogU2V0cyBh
biBlbGVtZW50IG9mIGEgcmVwZWF0ZWQgZmllbGQgdG8gdGhlIGdpdmVuIHZhbHVlLiAgVGhlIHZh
bHVlIG11c3QKLSAgICAgKiBiZSBvZiB0aGUgY29ycmVjdCB0eXBlIGZvciB0aGlzIGZpZWxkLCBp
LmUuIHRoZSBzYW1lIHR5cGUgdGhhdAotICAgICAqIHtAbGluayBNZXNzYWdlI2dldFJlcGVhdGVk
RmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLGludCl9IHdvdWxkCi0gICAgICogcmV0
dXJuLgotICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIFRoZSBmaWVsZCBp
cyBub3QgYSByZXBlYXRlZCBmaWVsZCwgb3IKLSAgICAgKiAgICAgICAgICAge0Bjb2RlIGZpZWxk
LmdldENvbnRhaW5pbmdUeXBlKCkgIT0gZ2V0RGVzY3JpcHRvckZvclR5cGUoKX0uCi0gICAgICov
Ci0gICAgQnVpbGRlciBzZXRSZXBlYXRlZEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRv
ciBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LCBPYmplY3Qg
dmFsdWUpOwotCi0gICAgLyoqCi0gICAgICogTGlrZSB7QGNvZGUgc2V0UmVwZWF0ZWRGaWVsZH0s
IGJ1dCBhcHBlbmRzIHRoZSB2YWx1ZSBhcyBhIG5ldyBlbGVtZW50LgotICAgICAqIEB0aHJvd3Mg
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIFRoZSBmaWVsZCBpcyBub3QgYSByZXBlYXRlZCBmaWVs
ZCwgb3IKLSAgICAgKiAgICAgICAgICAge0Bjb2RlIGZpZWxkLmdldENvbnRhaW5pbmdUeXBlKCkg
IT0gZ2V0RGVzY3JpcHRvckZvclR5cGUoKX0uCi0gICAgICovCi0gICAgQnVpbGRlciBhZGRSZXBl
YXRlZEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCwgT2JqZWN0IHZhbHVl
KTsKLQotICAgIC8qKiBTZXQgdGhlIHtAbGluayBVbmtub3duRmllbGRTZXR9IGZvciB0aGlzIG1l
c3NhZ2UuICovCi0gICAgQnVpbGRlciBzZXRVbmtub3duRmllbGRzKFVua25vd25GaWVsZFNldCB1
bmtub3duRmllbGRzKTsKLQotICAgIC8qKgotICAgICAqIE1lcmdlIHNvbWUgdW5rbm93biBmaWVs
ZHMgaW50byB0aGUge0BsaW5rIFVua25vd25GaWVsZFNldH0gZm9yIHRoaXMKLSAgICAgKiBtZXNz
YWdlLgotICAgICAqLwotICAgIEJ1aWxkZXIgbWVyZ2VVbmtub3duRmllbGRzKFVua25vd25GaWVs
ZFNldCB1bmtub3duRmllbGRzKTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIENvbnZlbmllbmNl
IG1ldGhvZHMuCi0KLSAgICAvLyAoRnJvbSBNZXNzYWdlTGl0ZS5CdWlsZGVyLCByZS1kZWNsYXJl
ZCBoZXJlIG9ubHkgZm9yIHJldHVybiB0eXBlCi0gICAgLy8gY292YXJpYW5jZS4pCi0gICAgQE92
ZXJyaWRlCi0gICAgQnVpbGRlciBtZXJnZUZyb20oQnl0ZVN0cmluZyBkYXRhKSB0aHJvd3MgSW52
YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uOwotCi0gICAgQE92ZXJyaWRlCi0gICAgQnVpbGRl
ciBtZXJnZUZyb20oQnl0ZVN0cmluZyBkYXRhLCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5z
aW9uUmVnaXN0cnkpCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b247Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBCdWlsZGVyIG1lcmdlRnJvbShieXRlW10gZGF0YSkg
dGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbjsKLQotICAgIEBPdmVycmlkZQot
ICAgIEJ1aWxkZXIgbWVyZ2VGcm9tKGJ5dGVbXSBkYXRhLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJv
d3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uOwotCi0gICAgQE92ZXJyaWRlCi0gICAg
QnVpbGRlciBtZXJnZUZyb20oYnl0ZVtdIGRhdGEsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRl
bnNpb25SZWdpc3RyeSkKLSAgICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbjsKLQotICAgIEBPdmVycmlkZQotICAgIEJ1aWxkZXIgbWVyZ2VGcm9tKGJ5dGVbXSBkYXRh
LCBpbnQgb2ZmLCBpbnQgbGVuLCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0
cnkpCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBCdWlsZGVyIG1lcmdlRnJvbShJbnB1dFN0cmVhbSBpbnB1dCkgdGhy
b3dzIElPRXhjZXB0aW9uOwotCi0gICAgQE92ZXJyaWRlCi0gICAgQnVpbGRlciBtZXJnZUZyb20o
SW5wdXRTdHJlYW0gaW5wdXQsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3Ry
eSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gICAgQE92ZXJyaWRlCi0gICAgYm9v
bGVhbiBtZXJnZURlbGltaXRlZEZyb20oSW5wdXRTdHJlYW0gaW5wdXQpIHRocm93cyBJT0V4Y2Vw
dGlvbjsKLQotICAgIEBPdmVycmlkZQotICAgIGJvb2xlYW4gbWVyZ2VEZWxpbWl0ZWRGcm9tKElu
cHV0U3RyZWFtIGlucHV0LCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkp
Ci0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01lc3NhZ2VMaXRlLmphdmEgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2ph
dmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWVzc2FnZUxpdGUuamF2
YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhmNTMxZGYzZThhNjY3MjBiMDRhYzE2
OTliZmMzYTY2YTViOTJjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWVzc2Fn
ZUxpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0MSArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVE9ETyhrZW50b24pOiAgVXNlIGdlbmVyaWNzPyAg
RS5nLiBCdWlsZGVyPEJ1aWxkZXJUeXBlIGV4dGVuZHMgQnVpbGRlcj4sIHRoZW4KLS8vICAgbWVy
Z2VGcm9tKigpIGNvdWxkIHJldHVybiBCdWlsZGVyVHlwZSBmb3IgYmV0dGVyIHR5cGUtc2FmZXR5
LgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhj
ZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRw
dXRTdHJlYW07Ci0KLS8qKgotICogQWJzdHJhY3QgaW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IFBy
b3RvY29sIE1lc3NhZ2Ugb2JqZWN0cy4KLSAqCi0gKiA8cD5UaGlzIGludGVyZmFjZSBpcyBpbXBs
ZW1lbnRlZCBieSBhbGwgcHJvdG9jb2wgbWVzc2FnZSBvYmplY3RzLiAgTm9uLWxpdGUKLSAqIG1l
c3NhZ2VzIGFkZGl0aW9uYWxseSBpbXBsZW1lbnQgdGhlIE1lc3NhZ2UgaW50ZXJmYWNlLCB3aGlj
aCBpcyBhIHN1YmNsYXNzCi0gKiBvZiBNZXNzYWdlTGl0ZS4gIFVzZSBNZXNzYWdlTGl0ZSBpbnN0
ZWFkIHdoZW4geW91IG9ubHkgbmVlZCB0aGUgc3Vic2V0IG9mCi0gKiBmZWF0dXJlcyB3aGljaCBp
dCBzdXBwb3J0cyAtLSBuYW1lbHksIG5vdGhpbmcgdGhhdCB1c2VzIGRlc2NyaXB0b3JzIG9yCi0g
KiByZWZsZWN0aW9uLiAgWW91IGNhbiBpbnN0cnVjdCB0aGUgcHJvdG9jb2wgY29tcGlsZXIgdG8g
Z2VuZXJhdGUgY2xhc3NlcwotICogd2hpY2ggaW1wbGVtZW50IG9ubHkgTWVzc2FnZUxpdGUsIG5v
dCB0aGUgZnVsbCBNZXNzYWdlIGludGVyZmFjZSwgYnkgYWRkaW5nCi0gKiB0aGUgZm9sbG93IGxp
bmUgdG8gdGhlIC5wcm90byBmaWxlOgotICogPHByZT4KLSAqICAgb3B0aW9uIG9wdGltaXplX2Zv
ciA9IExJVEVfUlVOVElNRTsKLSAqIDwvcHJlPgotICoKLSAqIDxwPlRoaXMgaXMgcGFydGljdWxh
cmx5IHVzZWZ1bCBvbiByZXNvdXJjZS1jb25zdHJhaW5lZCBzeXN0ZW1zIHdoZXJlIHRoZQotICog
ZnVsbCBwcm90b2NvbCBidWZmZXJzIHJ1bnRpbWUgbGlicmFyeSBpcyB0b28gYmlnLgotICoKLSAq
IDxwPk5vdGUgdGhhdCBvbiBub24tY29uc3RyYWluZWQgc3lzdGVtcyAoZS5nLiBzZXJ2ZXJzKSB3
aGVuIHlvdSBuZWVkIHRvIGxpbmsKLSAqIGluIGxvdHMgb2YgcHJvdG9jb2wgZGVmaW5pdGlvbnMs
IGEgYmV0dGVyIHdheSB0byByZWR1Y2UgdG90YWwgY29kZSBmb290cHJpbnQKLSAqIGlzIHRvIHVz
ZSB7QGNvZGUgb3B0aW1pemVfZm9yID0gQ09ERV9TSVpFfS4gIFRoaXMgd2lsbCBtYWtlIHRoZSBn
ZW5lcmF0ZWQKLSAqIGNvZGUgc21hbGxlciB3aGlsZSBzdGlsbCBzdXBwb3J0aW5nIGFsbCB0aGUg
c2FtZSBmZWF0dXJlcyAoYXQgdGhlIGV4cGVuc2Ugb2YKLSAqIHNwZWVkKS4gIHtAY29kZSBvcHRp
bWl6ZV9mb3IgPSBMSVRFX1JVTlRJTUV9IGlzIGJlc3Qgd2hlbiB5b3Ugb25seSBoYXZlIGEKLSAq
IHNtYWxsIG51bWJlciBvZiBtZXNzYWdlIHR5cGVzIGxpbmtlZCBpbnRvIHlvdXIgYmluYXJ5LCBp
biB3aGljaCBjYXNlIHRoZQotICogc2l6ZSBvZiB0aGUgcHJvdG9jb2wgYnVmZmVycyBydW50aW1l
IGl0c2VsZiBpcyB0aGUgYmlnZ2VzdCBwcm9ibGVtLgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdv
b2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZUxpdGUg
ZXh0ZW5kcyBNZXNzYWdlTGl0ZU9yQnVpbGRlciB7Ci0KLQotICAvKioKLSAgICogU2VyaWFsaXpl
cyB0aGUgbWVzc2FnZSBhbmQgd3JpdGVzIGl0IHRvIHtAY29kZSBvdXRwdXR9LiAgVGhpcyBkb2Vz
IG5vdAotICAgKiBmbHVzaCBvciBjbG9zZSB0aGUgc3RyZWFtLgotICAgKi8KLSAgdm9pZCB3cml0
ZVRvKENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gIC8q
KgotICAgKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0byBlbmNvZGUgdGhpcyBt
ZXNzYWdlLiAgVGhlIHJlc3VsdAotICAgKiBpcyBvbmx5IGNvbXB1dGVkIG9uIHRoZSBmaXJzdCBj
YWxsIGFuZCBtZW1vaXplZCBhZnRlciB0aGF0LgotICAgKi8KLSAgaW50IGdldFNlcmlhbGl6ZWRT
aXplKCk7Ci0KLQotICAvKioKLSAgICogR2V0cyB0aGUgcGFyc2VyIGZvciBhIG1lc3NhZ2Ugb2Yg
dGhlIHNhbWUgdHlwZSBhcyB0aGlzIG1lc3NhZ2UuCi0gICAqLwotICBQYXJzZXI8PyBleHRlbmRz
IE1lc3NhZ2VMaXRlPiBnZXRQYXJzZXJGb3JUeXBlKCk7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8g
Q29udmVuaWVuY2UgbWV0aG9kcy4KLQotICAvKioKLSAgICogU2VyaWFsaXplcyB0aGUgbWVzc2Fn
ZSB0byBhIHtAY29kZSBCeXRlU3RyaW5nfSBhbmQgcmV0dXJucyBpdC4gVGhpcyBpcwotICAgKiBq
dXN0IGEgdHJpdmlhbCB3cmFwcGVyIGFyb3VuZAotICAgKiB7QGxpbmsgI3dyaXRlVG8oQ29kZWRP
dXRwdXRTdHJlYW0pfS4KLSAgICovCi0gIEJ5dGVTdHJpbmcgdG9CeXRlU3RyaW5nKCk7Ci0KLSAg
LyoqCi0gICAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYSB7QGNvZGUgYnl0ZX0gYXJyYXkg
YW5kIHJldHVybnMgaXQuICBUaGlzIGlzCi0gICAqIGp1c3QgYSB0cml2aWFsIHdyYXBwZXIgYXJv
dW5kCi0gICAqIHtAbGluayAjd3JpdGVUbyhDb2RlZE91dHB1dFN0cmVhbSl9LgotICAgKi8KLSAg
Ynl0ZVtdIHRvQnl0ZUFycmF5KCk7Ci0KLSAgLyoqCi0gICAqIFNlcmlhbGl6ZXMgdGhlIG1lc3Nh
Z2UgYW5kIHdyaXRlcyBpdCB0byB7QGNvZGUgb3V0cHV0fS4gIFRoaXMgaXMganVzdCBhCi0gICAq
IHRyaXZpYWwgd3JhcHBlciBhcm91bmQge0BsaW5rICN3cml0ZVRvKENvZGVkT3V0cHV0U3RyZWFt
KX0uICBUaGlzIGRvZXMKLSAgICogbm90IGZsdXNoIG9yIGNsb3NlIHRoZSBzdHJlYW0uCi0gICAq
IDxwPgotICAgKiBOT1RFOiAgUHJvdG9jb2wgQnVmZmVycyBhcmUgbm90IHNlbGYtZGVsaW1pdGlu
Zy4gIFRoZXJlZm9yZSwgaWYgeW91IHdyaXRlCi0gICAqIGFueSBtb3JlIGRhdGEgdG8gdGhlIHN0
cmVhbSBhZnRlciB0aGUgbWVzc2FnZSwgeW91IG11c3Qgc29tZWhvdyBlbnN1cmUKLSAgICogdGhh
dCB0aGUgcGFyc2VyIG9uIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IGludGVycHJldCB0aGlz
IGFzIGJlaW5nCi0gICAqIHBhcnQgb2YgdGhlIHByb3RvY29sIG1lc3NhZ2UuICBUaGlzIGNhbiBi
ZSBkb25lIGUuZy4gYnkgd3JpdGluZyB0aGUgc2l6ZQotICAgKiBvZiB0aGUgbWVzc2FnZSBiZWZv
cmUgdGhlIGRhdGEsIHRoZW4gbWFraW5nIHN1cmUgdG8gbGltaXQgdGhlIGlucHV0IHRvCi0gICAq
IHRoYXQgc2l6ZSBvbiB0aGUgcmVjZWl2aW5nIGVuZCAoZS5nLiBieSB3cmFwcGluZyB0aGUgSW5w
dXRTdHJlYW0gaW4gb25lCi0gICAqIHdoaWNoIGxpbWl0cyB0aGUgaW5wdXQpLiAgQWx0ZXJuYXRp
dmVseSwganVzdCB1c2UKLSAgICoge0BsaW5rICN3cml0ZURlbGltaXRlZFRvKE91dHB1dFN0cmVh
bSl9LgotICAgKi8KLSAgdm9pZCB3cml0ZVRvKE91dHB1dFN0cmVhbSBvdXRwdXQpIHRocm93cyBJ
T0V4Y2VwdGlvbjsKLQotICAvKioKLSAgICogTGlrZSB7QGxpbmsgI3dyaXRlVG8oT3V0cHV0U3Ry
ZWFtKX0sIGJ1dCB3cml0ZXMgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UKLSAgICogYXMgYSB2YXJp
bnQgYmVmb3JlIHdyaXRpbmcgdGhlIGRhdGEuICBUaGlzIGFsbG93cyBtb3JlIGRhdGEgdG8gYmUg
d3JpdHRlbgotICAgKiB0byB0aGUgc3RyZWFtIGFmdGVyIHRoZSBtZXNzYWdlIHdpdGhvdXQgdGhl
IG5lZWQgdG8gZGVsaW1pdCB0aGUgbWVzc2FnZQotICAgKiBkYXRhIHlvdXJzZWxmLiAgVXNlIHtA
bGluayBCdWlsZGVyI21lcmdlRGVsaW1pdGVkRnJvbShJbnB1dFN0cmVhbSl9IChvcgotICAgKiB0
aGUgc3RhdGljIG1ldGhvZCB7QGNvZGUgWW91ck1lc3NhZ2VUeXBlLnBhcnNlRGVsaW1pdGVkRnJv
bShJbnB1dFN0cmVhbSl9KQotICAgKiB0byBwYXJzZSBtZXNzYWdlcyB3cml0dGVuIGJ5IHRoaXMg
bWV0aG9kLgotICAgKi8KLSAgdm9pZCB3cml0ZURlbGltaXRlZFRvKE91dHB1dFN0cmVhbSBvdXRw
dXQpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEJ1aWxkZXJz
Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBuZXcgYnVpbGRlciBmb3IgYSBtZXNzYWdlIG9m
IHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBtZXNzYWdlLgotICAgKi8KLSAgQnVpbGRlciBuZXdCdWls
ZGVyRm9yVHlwZSgpOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgYnVpbGRlciBpbml0aWFs
aXplZCB3aXRoIHRoZSBjdXJyZW50IG1lc3NhZ2UuICBVc2UgdGhpcyB0bwotICAgKiBkZXJpdmUg
YSBuZXcgbWVzc2FnZSBmcm9tIHRoZSBjdXJyZW50IG9uZS4KLSAgICovCi0gIEJ1aWxkZXIgdG9C
dWlsZGVyKCk7Ci0KLSAgLyoqCi0gICAqIEFic3RyYWN0IGludGVyZmFjZSBpbXBsZW1lbnRlZCBi
eSBQcm90b2NvbCBNZXNzYWdlIGJ1aWxkZXJzLgotICAgKi8KLSAgaW50ZXJmYWNlIEJ1aWxkZXIg
ZXh0ZW5kcyBNZXNzYWdlTGl0ZU9yQnVpbGRlciwgQ2xvbmVhYmxlIHsKLSAgICAvKiogUmVzZXRz
IGFsbCBmaWVsZHMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuICovCi0gICAgQnVpbGRlciBjbGVh
cigpOwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyB0aGUgbWVzc2FnZSBiYXNlZCBvbiB0
aGUgc3RhdGUgb2YgdGhlIEJ1aWxkZXIuIFN1YnNlcXVlbnQKLSAgICAgKiBjaGFuZ2VzIHRvIHRo
ZSBCdWlsZGVyIHdpbGwgbm90IGFmZmVjdCB0aGUgcmV0dXJuZWQgbWVzc2FnZS4KLSAgICAgKiBA
dGhyb3dzIFVuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uIFRoZSBtZXNzYWdlIGlzIG1pc3Np
bmcgb25lIG9yIG1vcmUKLSAgICAgKiAgICAgICAgIHJlcXVpcmVkIGZpZWxkcyAoaS5lLiB7QGxp
bmsgI2lzSW5pdGlhbGl6ZWQoKX0gcmV0dXJucyBmYWxzZSkuCi0gICAgICogICAgICAgICBVc2Ug
e0BsaW5rICNidWlsZFBhcnRpYWwoKX0gdG8gYnlwYXNzIHRoaXMgY2hlY2suCi0gICAgICovCi0g
ICAgTWVzc2FnZUxpdGUgYnVpbGQoKTsKLQotICAgIC8qKgotICAgICAqIExpa2Uge0BsaW5rICNi
dWlsZCgpfSwgYnV0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgbWVzc2FnZQot
ICAgICAqIGlzIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLiAgSW5zdGVhZCwgYSBwYXJ0aWFsIG1l
c3NhZ2UgaXMgcmV0dXJuZWQuCi0gICAgICogU3Vic2VxdWVudCBjaGFuZ2VzIHRvIHRoZSBCdWls
ZGVyIHdpbGwgbm90IGFmZmVjdCB0aGUgcmV0dXJuZWQgbWVzc2FnZS4KLSAgICAgKi8KLSAgICBN
ZXNzYWdlTGl0ZSBidWlsZFBhcnRpYWwoKTsKLQotICAgIC8qKgotICAgICAqIENsb25lcyB0aGUg
QnVpbGRlci4KLSAgICAgKiBAc2VlIE9iamVjdCNjbG9uZSgpCi0gICAgICovCi0gICAgQnVpbGRl
ciBjbG9uZSgpOwotCi0gICAgLyoqCi0gICAgICogUGFyc2VzIGEgbWVzc2FnZSBvZiB0aGlzIHR5
cGUgZnJvbSB0aGUgaW5wdXQgYW5kIG1lcmdlcyBpdCB3aXRoIHRoaXMKLSAgICAgKiBtZXNzYWdl
LgotICAgICAqCi0gICAgICogPHA+V2FybmluZzogIFRoaXMgZG9lcyBub3QgdmVyaWZ5IHRoYXQg
YWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgcHJlc2VudCBpbgotICAgICAqIHRoZSBpbnB1dCBtZXNz
YWdlLiAgSWYgeW91IGNhbGwge0BsaW5rICNidWlsZCgpfSB3aXRob3V0IHNldHRpbmcgYWxsCi0g
ICAgICogcmVxdWlyZWQgZmllbGRzLCBpdCB3aWxsIHRocm93IGFuIHtAbGluayBVbmluaXRpYWxp
emVkTWVzc2FnZUV4Y2VwdGlvbn0sCi0gICAgICogd2hpY2ggaXMgYSB7QGNvZGUgUnVudGltZUV4
Y2VwdGlvbn0gYW5kIHRodXMgbWlnaHQgbm90IGJlIGNhdWdodC4gIFRoZXJlCi0gICAgICogYXJl
IGEgZmV3IGdvb2Qgd2F5cyB0byBkZWFsIHdpdGggdGhpczoKLSAgICAgKiA8dWw+Ci0gICAgICog
ICA8bGk+Q2FsbCB7QGxpbmsgI2lzSW5pdGlhbGl6ZWQoKX0gdG8gdmVyaWZ5IHRoYXQgYWxsIHJl
cXVpcmVkIGZpZWxkcwotICAgICAqICAgICAgIGFyZSBzZXQgYmVmb3JlIGJ1aWxkaW5nLgotICAg
ICAqICAgPGxpPlVzZSB7QGNvZGUgYnVpbGRQYXJ0aWFsKCl9IHRvIGJ1aWxkLCB3aGljaCBpZ25v
cmVzIG1pc3NpbmcKLSAgICAgKiAgICAgICByZXF1aXJlZCBmaWVsZHMuCi0gICAgICogPC91bD4K
LSAgICAgKgotICAgICAqIDxwPk5vdGU6ICBUaGUgY2FsbGVyIHNob3VsZCBjYWxsCi0gICAgICog
e0BsaW5rIENvZGVkSW5wdXRTdHJlYW0jY2hlY2tMYXN0VGFnV2FzKGludCl9IGFmdGVyIGNhbGxp
bmcgdGhpcyB0bwotICAgICAqIHZlcmlmeSB0aGF0IHRoZSBsYXN0IHRhZyBzZWVuIHdhcyB0aGUg
YXBwcm9wcmlhdGUgZW5kLWdyb3VwIHRhZywKLSAgICAgKiBvciB6ZXJvIGZvciBFT0YuCi0gICAg
ICovCi0gICAgQnVpbGRlciBtZXJnZUZyb20oQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgdGhyb3dz
IElPRXhjZXB0aW9uOwotCi0gICAgLyoqCi0gICAgICogTGlrZSB7QGxpbmsgQnVpbGRlciNtZXJn
ZUZyb20oQ29kZWRJbnB1dFN0cmVhbSl9LCBidXQgYWxzbwotICAgICAqIHBhcnNlcyBleHRlbnNp
b25zLiAgVGhlIGV4dGVuc2lvbnMgdGhhdCB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHBhcnNlCi0g
ICAgICogbXVzdCBiZSByZWdpc3RlcmVkIGluIHtAY29kZSBleHRlbnNpb25SZWdpc3RyeX0uICBF
eHRlbnNpb25zIG5vdCBpbgotICAgICAqIHRoZSByZWdpc3RyeSB3aWxsIGJlIHRyZWF0ZWQgYXMg
dW5rbm93biBmaWVsZHMuCi0gICAgICovCi0gICAgQnVpbGRlciBtZXJnZUZyb20oQ29kZWRJbnB1
dFN0cmVhbSBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb25SZWdpc3RyeUxp
dGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhj
ZXB0aW9uOwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcy4KLQot
ICAgIC8qKgotICAgICAqIFBhcnNlIHtAY29kZSBkYXRhfSBhcyBhIG1lc3NhZ2Ugb2YgdGhpcyB0
eXBlIGFuZCBtZXJnZSBpdCB3aXRoIHRoZQotICAgICAqIG1lc3NhZ2UgYmVpbmcgYnVpbHQuICBU
aGlzIGlzIGp1c3QgYSBzbWFsbCB3cmFwcGVyIGFyb3VuZAotICAgICAqIHtAbGluayAjbWVyZ2VG
cm9tKENvZGVkSW5wdXRTdHJlYW0pfS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhpcwotICAg
ICAqLwotICAgIEJ1aWxkZXIgbWVyZ2VGcm9tKEJ5dGVTdHJpbmcgZGF0YSkgdGhyb3dzIEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbjsKLQotICAgIC8qKgotICAgICAqIFBhcnNlIHtAY29k
ZSBkYXRhfSBhcyBhIG1lc3NhZ2Ugb2YgdGhpcyB0eXBlIGFuZCBtZXJnZSBpdCB3aXRoIHRoZQot
ICAgICAqIG1lc3NhZ2UgYmVpbmcgYnVpbHQuICBUaGlzIGlzIGp1c3QgYSBzbWFsbCB3cmFwcGVy
IGFyb3VuZAotICAgICAqIHtAbGluayAjbWVyZ2VGcm9tKENvZGVkSW5wdXRTdHJlYW0sRXh0ZW5z
aW9uUmVnaXN0cnlMaXRlKX0uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAgKi8K
LSAgICBCdWlsZGVyIG1lcmdlRnJvbShCeXRlU3RyaW5nIGRhdGEsCi0gICAgICAgICAgICAgICAg
ICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICAg
ICAgICAgICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAg
ICAvKioKLSAgICAgKiBQYXJzZSB7QGNvZGUgZGF0YX0gYXMgYSBtZXNzYWdlIG9mIHRoaXMgdHlw
ZSBhbmQgbWVyZ2UgaXQgd2l0aCB0aGUKLSAgICAgKiBtZXNzYWdlIGJlaW5nIGJ1aWx0LiAgVGhp
cyBpcyBqdXN0IGEgc21hbGwgd3JhcHBlciBhcm91bmQKLSAgICAgKiB7QGxpbmsgI21lcmdlRnJv
bShDb2RlZElucHV0U3RyZWFtKX0uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoaXMKLSAgICAg
Ki8KLSAgICBCdWlsZGVyIG1lcmdlRnJvbShieXRlW10gZGF0YSkgdGhyb3dzIEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbjsKLQotICAgIC8qKgotICAgICAqIFBhcnNlIHtAY29kZSBkYXRh
fSBhcyBhIG1lc3NhZ2Ugb2YgdGhpcyB0eXBlIGFuZCBtZXJnZSBpdCB3aXRoIHRoZQotICAgICAq
IG1lc3NhZ2UgYmVpbmcgYnVpbHQuICBUaGlzIGlzIGp1c3QgYSBzbWFsbCB3cmFwcGVyIGFyb3Vu
ZAotICAgICAqIHtAbGluayAjbWVyZ2VGcm9tKENvZGVkSW5wdXRTdHJlYW0pfS4KLSAgICAgKgot
ICAgICAqIEByZXR1cm4gdGhpcwotICAgICAqLwotICAgIEJ1aWxkZXIgbWVyZ2VGcm9tKGJ5dGVb
XSBkYXRhLCBpbnQgb2ZmLCBpbnQgbGVuKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBQYXJzZSB7
QGNvZGUgZGF0YX0gYXMgYSBtZXNzYWdlIG9mIHRoaXMgdHlwZSBhbmQgbWVyZ2UgaXQgd2l0aCB0
aGUKLSAgICAgKiBtZXNzYWdlIGJlaW5nIGJ1aWx0LiAgVGhpcyBpcyBqdXN0IGEgc21hbGwgd3Jh
cHBlciBhcm91bmQKLSAgICAgKiB7QGxpbmsgI21lcmdlRnJvbShDb2RlZElucHV0U3RyZWFtLEV4
dGVuc2lvblJlZ2lzdHJ5TGl0ZSl9LgotICAgICAqCi0gICAgICogQHJldHVybiB0aGlzCi0gICAg
ICovCi0gICAgQnVpbGRlciBtZXJnZUZyb20oYnl0ZVtdIGRhdGEsCi0gICAgICAgICAgICAgICAg
ICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICAg
ICAgICAgICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAg
ICAvKioKLSAgICAgKiBQYXJzZSB7QGNvZGUgZGF0YX0gYXMgYSBtZXNzYWdlIG9mIHRoaXMgdHlw
ZSBhbmQgbWVyZ2UgaXQgd2l0aCB0aGUKLSAgICAgKiBtZXNzYWdlIGJlaW5nIGJ1aWx0LiAgVGhp
cyBpcyBqdXN0IGEgc21hbGwgd3JhcHBlciBhcm91bmQKLSAgICAgKiB7QGxpbmsgI21lcmdlRnJv
bShDb2RlZElucHV0U3RyZWFtLEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSl9LgotICAgICAqCi0gICAg
ICogQHJldHVybiB0aGlzCi0gICAgICovCi0gICAgQnVpbGRlciBtZXJnZUZyb20oYnl0ZVtdIGRh
dGEsIGludCBvZmYsIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uUmVn
aXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICAgICAgICAgICAgICAgIHRocm93
cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBQYXJz
ZSBhIG1lc3NhZ2Ugb2YgdGhpcyB0eXBlIGZyb20ge0Bjb2RlIGlucHV0fSBhbmQgbWVyZ2UgaXQg
d2l0aCB0aGUKLSAgICAgKiBtZXNzYWdlIGJlaW5nIGJ1aWx0LiAgVGhpcyBpcyBqdXN0IGEgc21h
bGwgd3JhcHBlciBhcm91bmQKLSAgICAgKiB7QGxpbmsgI21lcmdlRnJvbShDb2RlZElucHV0U3Ry
ZWFtKX0uICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgYWx3YXlzCi0gICAgICogcmVhZHMgdGhlIDxp
PmVudGlyZTwvaT4gaW5wdXQgKHVubGVzcyBpdCB0aHJvd3MgYW4gZXhjZXB0aW9uKS4gIElmIHlv
dQotICAgICAqIHdhbnQgaXQgdG8gc3RvcCBlYXJsaWVyLCB5b3Ugd2lsbCBuZWVkIHRvIHdyYXAg
eW91ciBpbnB1dCBpbiBzb21lCi0gICAgICogd3JhcHBlciBzdHJlYW0gdGhhdCBsaW1pdHMgcmVh
ZGluZy4gIE9yLCB1c2UKLSAgICAgKiB7QGxpbmsgTWVzc2FnZUxpdGUjd3JpdGVEZWxpbWl0ZWRU
byhPdXRwdXRTdHJlYW0pfSB0byB3cml0ZSB5b3VyIG1lc3NhZ2UKLSAgICAgKiBhbmQge0BsaW5r
ICNtZXJnZURlbGltaXRlZEZyb20oSW5wdXRTdHJlYW0pfSB0byByZWFkIGl0LgotICAgICAqIDxw
PgotICAgICAqIERlc3BpdGUgdXN1YWxseSByZWFkaW5nIHRoZSBlbnRpcmUgaW5wdXQsIHRoaXMg
ZG9lcyBub3QgY2xvc2UgdGhlIHN0cmVhbS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhpcwot
ICAgICAqLwotICAgIEJ1aWxkZXIgbWVyZ2VGcm9tKElucHV0U3RyZWFtIGlucHV0KSB0aHJvd3Mg
SU9FeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBQYXJzZSBhIG1lc3NhZ2Ugb2YgdGhpcyB0
eXBlIGZyb20ge0Bjb2RlIGlucHV0fSBhbmQgbWVyZ2UgaXQgd2l0aCB0aGUKLSAgICAgKiBtZXNz
YWdlIGJlaW5nIGJ1aWx0LiAgVGhpcyBpcyBqdXN0IGEgc21hbGwgd3JhcHBlciBhcm91bmQKLSAg
ICAgKiB7QGxpbmsgI21lcmdlRnJvbShDb2RlZElucHV0U3RyZWFtLEV4dGVuc2lvblJlZ2lzdHJ5
TGl0ZSl9LgotICAgICAqCi0gICAgICogQHJldHVybiB0aGlzCi0gICAgICovCi0gICAgQnVpbGRl
ciBtZXJnZUZyb20oSW5wdXRTdHJlYW0gaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgRXh0
ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICAgICAgICAgICAg
ICAgIHRocm93cyBJT0V4Y2VwdGlvbjsKLSAgICAKLSAgICAvKioKLSAgICAgKiBNZXJnZSB7QGNv
ZGUgb3RoZXJ9IGludG8gdGhlIG1lc3NhZ2UgYmVpbmcgYnVpbHQuICB7QGNvZGUgb3RoZXJ9IG11
c3QKLSAgICAgKiBoYXZlIHRoZSBleGFjdCBzYW1lIHR5cGUgYXMge0Bjb2RlIHRoaXN9IChpLmUu
Ci0gICAgICoge0Bjb2RlIGdldENsYXNzKCkuZXF1YWxzKGdldERlZmF1bHRJbnN0YW5jZUZvclR5
cGUoKS5nZXRDbGFzcygpKX0pLgotICAgICAqCi0gICAgICogTWVyZ2luZyBvY2N1cnMgYXMgZm9s
bG93cy4gIEZvciBlYWNoIGZpZWxkOjxicj4KLSAgICAgKiAqIEZvciBzaW5ndWxhciBwcmltaXRp
dmUgZmllbGRzLCBpZiB0aGUgZmllbGQgaXMgc2V0IGluIHtAY29kZSBvdGhlcn0sCi0gICAgICog
ICB0aGVuIHtAY29kZSBvdGhlcn0ncyB2YWx1ZSBvdmVyd3JpdGVzIHRoZSB2YWx1ZSBpbiB0aGlz
IG1lc3NhZ2UuPGJyPgotICAgICAqICogRm9yIHNpbmd1bGFyIG1lc3NhZ2UgZmllbGRzLCBpZiB0
aGUgZmllbGQgaXMgc2V0IGluIHtAY29kZSBvdGhlcn0sCi0gICAgICogICBpdCBpcyBtZXJnZWQg
aW50byB0aGUgY29ycmVzcG9uZGluZyBzdWItbWVzc2FnZSBvZiB0aGlzIG1lc3NhZ2UKLSAgICAg
KiAgIHVzaW5nIHRoZSBzYW1lIG1lcmdpbmcgcnVsZXMuPGJyPgotICAgICAqICogRm9yIHJlcGVh
dGVkIGZpZWxkcywgdGhlIGVsZW1lbnRzIGluIHtAY29kZSBvdGhlcn0gYXJlIGNvbmNhdGVuYXRl
ZAotICAgICAqICAgd2l0aCB0aGUgZWxlbWVudHMgaW4gdGhpcyBtZXNzYWdlLgotICAgICAqICog
Rm9yIG9uZW9mIGdyb3VwcywgaWYgdGhlIG90aGVyIG1lc3NhZ2UgaGFzIG9uZSBvZiB0aGUgZmll
bGRzIHNldCwKLSAgICAgKiAgIHRoZSBncm91cCBvZiB0aGlzIG1lc3NhZ2UgaXMgY2xlYXJlZCBh
bmQgcmVwbGFjZWQgYnkgdGhlIGZpZWxkCi0gICAgICogICBvZiB0aGUgb3RoZXIgbWVzc2FnZSwg
c28gdGhhdCB0aGUgb25lb2YgY29uc3RyYWludCBpcyBwcmVzZXJ2ZWQuCi0gICAgICoKLSAgICAg
KiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHtAY29kZSBNZXNzYWdlOjpNZXJnZUZyb219IG1l
dGhvZCBpbiBDKysuCi0gICAgICovCi0gICAgQnVpbGRlciBtZXJnZUZyb20oTWVzc2FnZUxpdGUg
b3RoZXIpOwotCi0gICAgLyoqCi0gICAgICogTGlrZSB7QGxpbmsgI21lcmdlRnJvbShJbnB1dFN0
cmVhbSl9LCBidXQgZG9lcyBub3QgcmVhZCB1bnRpbCBFT0YuCi0gICAgICogSW5zdGVhZCwgdGhl
IHNpemUgb2YgdGhlIG1lc3NhZ2UgKGVuY29kZWQgYXMgYSB2YXJpbnQpIGlzIHJlYWQgZmlyc3Qs
Ci0gICAgICogdGhlbiB0aGUgbWVzc2FnZSBkYXRhLiAgVXNlCi0gICAgICoge0BsaW5rIE1lc3Nh
Z2VMaXRlI3dyaXRlRGVsaW1pdGVkVG8oT3V0cHV0U3RyZWFtKX0gdG8gd3JpdGUgbWVzc2FnZXMg
aW4KLSAgICAgKiB0aGlzIGZvcm1hdC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiBz
dWNjZXNzZnVsLCBvciBmYWxzZSBpZiB0aGUgc3RyZWFtIGlzIGF0IEVPRiB3aGVuIHRoZQotICAg
ICAqICAgICAgICAgbWV0aG9kIHN0YXJ0cy4gIEFueSBvdGhlciBlcnJvciAoaW5jbHVkaW5nIHJl
YWNoaW5nIEVPRiBkdXJpbmcKLSAgICAgKiAgICAgICAgIHBhcnNpbmcpIHdpbGwgY2F1c2UgYW4g
ZXhjZXB0aW9uIHRvIGJlIHRocm93bi4KLSAgICAgKi8KLSAgICBib29sZWFuIG1lcmdlRGVsaW1p
dGVkRnJvbShJbnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBMaWtlIHtAbGluayAjbWVy
Z2VEZWxpbWl0ZWRGcm9tKElucHV0U3RyZWFtKX0gYnV0IHN1cHBvcnRpbmcgZXh0ZW5zaW9ucy4K
LSAgICAgKi8KLSAgICBib29sZWFuIG1lcmdlRGVsaW1pdGVkRnJvbShJbnB1dFN0cmVhbSBpbnB1
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb25SZWdpc3RyeUxpdGUg
ZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dz
IElPRXhjZXB0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZh
L2NvbS9nb29nbGUvcHJvdG9idWYvTWVzc2FnZUxpdGVPckJ1aWxkZXIuamF2YSBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3Jl
L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NZXNzYWdlTGl0ZU9yQnVpbGRlci5q
YXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTgzODZjZTU4OTIyZWE2ZDlhOTU5
M2I5YzE1MDBmNzkxNjdhNmNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NZXNz
YWdlTGl0ZU9yQnVpbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90
b2J1ZjsKLQotLyoqCi0gKiBCYXNlIGludGVyZmFjZSBmb3IgbWV0aG9kcyBjb21tb24gdG8ge0Bs
aW5rIE1lc3NhZ2VMaXRlfQotICogYW5kIHtAbGluayBNZXNzYWdlTGl0ZS5CdWlsZGVyfSB0byBw
cm92aWRlIHR5cGUgZXF1aXZhbGVuY3kuCi0gKgotICogQGF1dGhvciBqb25wQGdvb2dsZS5jb20g
KEpvbiBQZXJsb3cpCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZUxpdGVPckJ1aWxkZXIg
ewotICAvKioKLSAgICogR2V0IGFuIGluc3RhbmNlIG9mIHRoZSB0eXBlIHdpdGggbm8gZmllbGRz
IHNldC4gQmVjYXVzZSBubyBmaWVsZHMgYXJlIHNldCwKLSAgICogYWxsIGdldHRlcnMgZm9yIHNp
bmd1bGFyIGZpZWxkcyB3aWxsIHJldHVybiBkZWZhdWx0IHZhbHVlcyBhbmQgcmVwZWF0ZWQKLSAg
ICogZmllbGRzIHdpbGwgYXBwZWFyIGVtcHR5LgotICAgKiBUaGlzIG1heSBvciBtYXkgbm90IGJl
IGEgc2luZ2xldG9uLiAgVGhpcyBkaWZmZXJzIGZyb20gdGhlCi0gICAqIHtAY29kZSBnZXREZWZh
dWx0SW5zdGFuY2UoKX0gbWV0aG9kIG9mIGdlbmVyYXRlZCBtZXNzYWdlIGNsYXNzZXMgaW4gdGhh
dAotICAgKiB0aGlzIG1ldGhvZCBpcyBhbiBhYnN0cmFjdCBtZXRob2Qgb2YgdGhlIHtAY29kZSBN
ZXNzYWdlTGl0ZX0gaW50ZXJmYWNlCi0gICAqIHdoZXJlYXMge0Bjb2RlIGdldERlZmF1bHRJbnN0
YW5jZSgpfSBpcyBhIHN0YXRpYyBtZXRob2Qgb2YgYSBzcGVjaWZpYwotICAgKiBjbGFzcy4gIFRo
ZXkgcmV0dXJuIHRoZSBzYW1lIHRoaW5nLgotICAgKi8KLSAgTWVzc2FnZUxpdGUgZ2V0RGVmYXVs
dEluc3RhbmNlRm9yVHlwZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgYWxsIHJl
cXVpcmVkIGZpZWxkcyBpbiB0aGUgbWVzc2FnZSBhbmQgYWxsIGVtYmVkZGVkCi0gICAqIG1lc3Nh
Z2VzIGFyZSBzZXQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICoKLSAgICogPHA+U2VlIGFsc286IHtA
bGluayBNZXNzYWdlT3JCdWlsZGVyI2dldEluaXRpYWxpemF0aW9uRXJyb3JTdHJpbmcoKX0KLSAg
ICovCi0gIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpOwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29y
ZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWVzc2FnZUxpdGVUb1N0cmluZy5q
YXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01lc3NhZ2VM
aXRlVG9TdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM4NDc2NTFm
ZTdmZjRlNzExODI4YjNiNDE5MzRiNDg3OTEwOWJhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvTWVzc2FnZUxpdGVUb1N0cmluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM5
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNv
bS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1p
bXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1w
b3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51
dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLQotLyoqCi0gKiBIZWxwcyBnZW5l
cmF0ZSB7QGxpbmsgU3RyaW5nfSByZXByZXNlbnRhdGlvbnMgb2Yge0BsaW5rIE1lc3NhZ2VMaXRl
fSBwcm90b3MuCi0gKi8KLS8vIFRPRE8oZHdlaXMpOiBGaXggbWFwIGZpZWxkcy4KLWZpbmFsIGNs
YXNzIE1lc3NhZ2VMaXRlVG9TdHJpbmcgewotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBMSVNUX1NVRkZJWCA9ICJMaXN0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJV
SUxERVJfTElTVF9TVUZGSVggPSAiT3JCdWlsZGVyTGlzdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFN0cmluZyBCWVRFU19TVUZGSVggPSAiQnl0ZXMiOwotICAKLSAgLyoqCi0gICAqIFJldHVy
bnMgYSB7QGxpbmsgU3RyaW5nfSByZXByZXNlbnRhdGlvbiBvZiB0aGUge0BsaW5rIE1lc3NhZ2VM
aXRlfSBvYmplY3QuICBUaGUgZmlyc3QgbGluZSBvZgotICAgKiB0aGUge0Bjb2RlIFN0cmluZ30g
cmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24gaW5jbHVkZXMgYSBjb21tZW50IHN0cmluZyB0
byB1bmlxdWVseSBpZGVudGlmeQotICAgKiB0aGUgb2JqY2V0IGluc3RhbmNlLiBUaGlzIGFjdHMg
YXMgYW4gaW5kaWNhdG9yIHRoYXQgdGhpcyBzaG91bGQgbm90IGJlIHJlbGllZCBvbiBmb3IKLSAg
ICogY29tcGFyaXNvbnMuCi0gICAqCi0gICAqIDxwPkZvciB1c2UgYnkgZ2VuZXJhdGVkIGNvZGUg
b25seS4KLSAgICovCi0gIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoTWVzc2FnZUxpdGUgbWVzc2Fn
ZUxpdGUsIFN0cmluZyBjb21tZW50U3RyaW5nKSB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWZmZXIg
PSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIGJ1ZmZlci5hcHBlbmQoIiMgIikuYXBwZW5kKGNv
bW1lbnRTdHJpbmcpOwotICAgIHJlZmxlY3RpdmVQcmludFdpdGhJbmRlbnQobWVzc2FnZUxpdGUs
IGJ1ZmZlciwgMCk7Ci0gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFJlZmxlY3RpdmVseSBwcmludHMgdGhlIHtAbGluayBNZXNzYWdlTGl0ZX0gdG8gdGhl
IGJ1ZmZlciBhdCBnaXZlbiB7QGNvZGUgaW5kZW50fSBsZXZlbC4KLSAgICoKLSAgICogQHBhcmFt
IGJ1ZmZlciB0aGUgYnVmZmVyIHRvIHdyaXRlIHRvCi0gICAqIEBwYXJhbSBpbmRlbnQgdGhlIG51
bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IHRoZSBwcm90byBieQotICAgKi8KLSAgcHJpdmF0ZSBz
dGF0aWMgdm9pZCByZWZsZWN0aXZlUHJpbnRXaXRoSW5kZW50KAotICAgICAgTWVzc2FnZUxpdGUg
bWVzc2FnZUxpdGUsIFN0cmluZ0J1aWxkZXIgYnVmZmVyLCBpbnQgaW5kZW50KSB7Ci0gICAgLy8g
QnVpbGQgYSBtYXAgb2YgbWV0aG9kIG5hbWUgdG8gbWV0aG9kLiBXZSdyZSBsb29raW5nIGZvciBt
ZXRob2RzIGxpa2UgZ2V0Rm9vKCksIGhhc0ZvbygpLCBhbmQKLSAgICAvLyBnZXRGb29MaXN0KCkg
d2hpY2ggbWlnaHQgYmUgdXNlZnVsIGZvciBidWlsZGluZyBhbiBvYmplY3QncyBzdHJpbmcgcmVw
cmVzZW50YXRpb24uCi0gICAgTWFwPFN0cmluZywgTWV0aG9kPiBuYW1lVG9Ob0FyZ01ldGhvZCA9
IG5ldyBIYXNoTWFwPFN0cmluZywgTWV0aG9kPigpOwotICAgIE1hcDxTdHJpbmcsIE1ldGhvZD4g
bmFtZVRvTWV0aG9kID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBNZXRob2Q+KCk7Ci0gICAgU2V0PFN0
cmluZz4gZ2V0dGVycyA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKLSAgICBmb3IgKE1ldGhvZCBt
ZXRob2QgOiBtZXNzYWdlTGl0ZS5nZXRDbGFzcygpLmdldERlY2xhcmVkTWV0aG9kcygpKSB7Ci0g
ICAgICBuYW1lVG9NZXRob2QucHV0KG1ldGhvZC5nZXROYW1lKCksIG1ldGhvZCk7Ci0gICAgICBp
ZiAobWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDApIHsKLSAgICAgICAgbmFt
ZVRvTm9BcmdNZXRob2QucHV0KG1ldGhvZC5nZXROYW1lKCksIG1ldGhvZCk7Ci0KLSAgICAgICAg
aWYgKG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCgiZ2V0IikpIHsKLSAgICAgICAgICBnZXR0
ZXJzLmFkZChtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQot
ICAgIGZvciAoU3RyaW5nIGdldHRlciA6IGdldHRlcnMpIHsKLSAgICAgIFN0cmluZyBzdWZmaXgg
PSBnZXR0ZXIucmVwbGFjZUZpcnN0KCJnZXQiLCAiIik7Ci0gICAgICBpZiAoc3VmZml4LmVuZHNX
aXRoKExJU1RfU1VGRklYKSAmJiAhc3VmZml4LmVuZHNXaXRoKEJVSUxERVJfTElTVF9TVUZGSVgp
KSB7Ci0gICAgICAgIFN0cmluZyBjYW1lbENhc2UgPSBzdWZmaXguc3Vic3RyaW5nKDAsIDEpLnRv
TG93ZXJDYXNlKCkKLSAgICAgICAgICAgICsgc3VmZml4LnN1YnN0cmluZygxLCBzdWZmaXgubGVu
Z3RoKCkgLSBMSVNUX1NVRkZJWC5sZW5ndGgoKSk7Ci0gICAgICAgIC8vIFRyeSB0byByZWZsZWN0
aXZlbHkgZ2V0IHRoZSB2YWx1ZSBhbmQgdG9TdHJpbmcoKSB0aGUgZmllbGQgYXMgaWYgaXQgd2Vy
ZSByZXBlYXRlZC4gVGhpcwotICAgICAgICAvLyBvbmx5IHdvcmtzIGlmIHRoZSBtZXRob2QgbmFt
ZXMgaGF2ZSBub3QgYmUgcHJvZ3VhcmRlZCBvdXQgb3IgcmVuYW1lZC4KLSAgICAgICAgTWV0aG9k
IGxpc3RNZXRob2QgPSBuYW1lVG9Ob0FyZ01ldGhvZC5nZXQoImdldCIgKyBzdWZmaXgpOwotICAg
ICAgICBpZiAobGlzdE1ldGhvZCAhPSBudWxsKSB7Ci0gICAgICAgICAgcHJpbnRGaWVsZCgKLSAg
ICAgICAgICAgICAgYnVmZmVyLAotICAgICAgICAgICAgICBpbmRlbnQsCi0gICAgICAgICAgICAg
IGNhbWVsQ2FzZVRvU25ha2VDYXNlKGNhbWVsQ2FzZSksCi0gICAgICAgICAgICAgIEdlbmVyYXRl
ZE1lc3NhZ2VMaXRlLmludm9rZU9yRGllKGxpc3RNZXRob2QsIG1lc3NhZ2VMaXRlKSk7Ci0gICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgTWV0aG9kIHNldHRl
ciA9IG5hbWVUb01ldGhvZC5nZXQoInNldCIgKyBzdWZmaXgpOwotICAgICAgaWYgKHNldHRlciA9
PSBudWxsKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgaWYgKHN1ZmZpeC5l
bmRzV2l0aChCWVRFU19TVUZGSVgpCi0gICAgICAgICAgJiYgbmFtZVRvTm9BcmdNZXRob2QuY29u
dGFpbnNLZXkoCi0gICAgICAgICAgICAgICJnZXQiICsgc3VmZml4LnN1YnN0cmluZygwLCBzdWZm
aXgubGVuZ3RoKCkgLSAiQnl0ZXMiLmxlbmd0aCgpKSkpIHsKLSAgICAgICAgLy8gSGV1cmlzdGlj
IHRvIHNraXAgYnl0ZXMgYmFzZWQgYWNjZXNzb3JzIGZvciBzdHJpbmcgZmllbGRzLgotICAgICAg
ICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgU3RyaW5nIGNhbWVsQ2FzZSA9IHN1
ZmZpeC5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSArIHN1ZmZpeC5zdWJzdHJpbmcoMSk7
Ci0KLSAgICAgIC8vIFRyeSB0byByZWZsZWN0aXZlbHkgZ2V0IHRoZSB2YWx1ZSBhbmQgdG9TdHJp
bmcoKSB0aGUgZmllbGQgYXMgaWYgaXQgd2VyZSBvcHRpb25hbC4gVGhpcwotICAgICAgLy8gb25s
eSB3b3JrcyBpZiB0aGUgbWV0aG9kIG5hbWVzIGhhdmUgbm90IGJlIHByb2d1YXJkZWQgb3V0IG9y
IHJlbmFtZWQuCi0gICAgICBNZXRob2QgZ2V0TWV0aG9kID0gbmFtZVRvTm9BcmdNZXRob2QuZ2V0
KCJnZXQiICsgc3VmZml4KTsKLSAgICAgIE1ldGhvZCBoYXNNZXRob2QgPSBuYW1lVG9Ob0FyZ01l
dGhvZC5nZXQoImhhcyIgKyBzdWZmaXgpOwotICAgICAgLy8gVE9ETyhkd2Vpcyk6IEZpeCBwcm90
bzMgc2VtYW50aWNzLgotICAgICAgaWYgKGdldE1ldGhvZCAhPSBudWxsKSB7Ci0gICAgICAgIE9i
amVjdCB2YWx1ZSA9IEdlbmVyYXRlZE1lc3NhZ2VMaXRlLmludm9rZU9yRGllKGdldE1ldGhvZCwg
bWVzc2FnZUxpdGUpOwotICAgICAgICBmaW5hbCBib29sZWFuIGhhc1ZhbHVlID0gaGFzTWV0aG9k
ID09IG51bGwKLSAgICAgICAgICAgID8gIWlzRGVmYXVsdFZhbHVlKHZhbHVlKQotICAgICAgICAg
ICAgOiAoQm9vbGVhbikgR2VuZXJhdGVkTWVzc2FnZUxpdGUuaW52b2tlT3JEaWUoaGFzTWV0aG9k
LCBtZXNzYWdlTGl0ZSk7Ci0gICAgICAgICAvLyBUT0RPKGR3ZWlzKTogVGhpcyBkb2Vzbid0IHN0
b3AgcHJpbnRpbmcgb25lb2YgY2FzZSB0d2ljZTogdmFsdWUgYW5kIGVudW0gc3R5bGUuCi0gICAg
ICAgIGlmIChoYXNWYWx1ZSkgewotICAgICAgICAgIHByaW50RmllbGQoCi0gICAgICAgICAgICAg
IGJ1ZmZlciwKLSAgICAgICAgICAgICAgaW5kZW50LAotICAgICAgICAgICAgICBjYW1lbENhc2VU
b1NuYWtlQ2FzZShjYW1lbENhc2UpLAotICAgICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2VMaXRl
IGluc3RhbmNlb2YgR2VuZXJhdGVkTWVzc2FnZUxpdGUuRXh0ZW5kYWJsZU1lc3NhZ2UpIHsKLSAg
ICAgIEl0ZXJhdG9yPE1hcC5FbnRyeTxHZW5lcmF0ZWRNZXNzYWdlTGl0ZS5FeHRlbnNpb25EZXNj
cmlwdG9yLCBPYmplY3Q+PiBpdGVyID0KLSAgICAgICAgICAoKEdlbmVyYXRlZE1lc3NhZ2VMaXRl
LkV4dGVuZGFibGVNZXNzYWdlPD8sID8+KSBtZXNzYWdlTGl0ZSkuZXh0ZW5zaW9ucy5pdGVyYXRv
cigpOwotICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0gICAgICAgIE1hcC5FbnRyeTxH
ZW5lcmF0ZWRNZXNzYWdlTGl0ZS5FeHRlbnNpb25EZXNjcmlwdG9yLCBPYmplY3Q+IGVudHJ5ID0g
aXRlci5uZXh0KCk7Ci0gICAgICAgIHByaW50RmllbGQoYnVmZmVyLCBpbmRlbnQsICJbIiArIGVu
dHJ5LmdldEtleSgpLmdldE51bWJlcigpICsgIl0iLCBlbnRyeS5nZXRWYWx1ZSgpKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoKChHZW5lcmF0ZWRNZXNzYWdlTGl0ZTw/LCA/PikgbWVzc2Fn
ZUxpdGUpLnVua25vd25GaWVsZHMgIT0gbnVsbCkgewotICAgICAgKChHZW5lcmF0ZWRNZXNzYWdl
TGl0ZTw/LCA/PikgbWVzc2FnZUxpdGUpLnVua25vd25GaWVsZHMucHJpbnRXaXRoSW5kZW50KGJ1
ZmZlciwgaW5kZW50KTsKLSAgICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4g
aXNEZWZhdWx0VmFsdWUoT2JqZWN0IG8pIHsKLSAgICBpZiAobyBpbnN0YW5jZW9mIEJvb2xlYW4p
IHsKLSAgICAgIHJldHVybiAhKChCb29sZWFuKSBvKTsKLSAgICB9Ci0gICAgaWYgKG8gaW5zdGFu
Y2VvZiBJbnRlZ2VyKSB7Ci0gICAgICByZXR1cm4gKChJbnRlZ2VyKSBvKSA9PSAwOwotICAgIH0K
LSAgICBpZiAobyBpbnN0YW5jZW9mIEZsb2F0KSB7Ci0gICAgICByZXR1cm4gKChGbG9hdCkgbykg
PT0gMGY7Ci0gICAgfQotICAgIGlmIChvIGluc3RhbmNlb2YgRG91YmxlKSB7Ci0gICAgICByZXR1
cm4gKChEb3VibGUpIG8pID09IDBkOwotICAgIH0KLSAgICBpZiAobyBpbnN0YW5jZW9mIFN0cmlu
ZykgewotICAgICAgcmV0dXJuIG8uZXF1YWxzKCIiKTsKLSAgICB9Ci0gICAgaWYgKG8gaW5zdGFu
Y2VvZiBCeXRlU3RyaW5nKSB7Ci0gICAgICByZXR1cm4gby5lcXVhbHMoQnl0ZVN0cmluZy5FTVBU
WSk7Ci0gICAgfQotICAgIGlmIChvIGluc3RhbmNlb2YgTWVzc2FnZUxpdGUpIHsgLy8gQ2FuIGhh
cHBlbiBpbiBvbmVvZnMuCi0gICAgICByZXR1cm4gbyA9PSAoKE1lc3NhZ2VMaXRlKSBvKS5nZXRE
ZWZhdWx0SW5zdGFuY2VGb3JUeXBlKCk7Ci0gICAgfQotICAgIGlmIChvIGluc3RhbmNlb2YgamF2
YS5sYW5nLkVudW08Pz4pIHsgLy8gQ2F0Y2hlcyBvbmVvZiBlbnVtcy4KLSAgICAgIHJldHVybiAo
KGphdmEubGFuZy5FbnVtPD8+KSBvKS5vcmRpbmFsKCkgPT0gMDsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEZvcm1hdHMgYSB0ZXh0IHByb3RvIGZp
ZWxkLgotICAgKgotICAgKiA8cD5Gb3IgdXNlIGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHkuCi0gICAq
Ci0gICAqIEBwYXJhbSBidWZmZXIgdGhlIGJ1ZmZlciB0byB3cml0ZSB0bwotICAgKiBAcGFyYW0g
aW5kZW50IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRoZSBwcm90byBzaG91bGQgYmUgaW5kZW50ZWQg
YnkKLSAgICogQHBhcmFtIG5hbWUgdGhlIGZpZWxkIG5hbWUgKGluIGxvd2VyIHVuZGVyc2NvcmUg
Y2FzZSkKLSAgICogQHBhcmFtIG9iamVjdCB0aGUgb2JqZWN0IHZhbHVlIG9mIHRoZSBmaWVsZAot
ICAgKi8KLSAgc3RhdGljIGZpbmFsIHZvaWQgcHJpbnRGaWVsZChTdHJpbmdCdWlsZGVyIGJ1ZmZl
ciwgaW50IGluZGVudCwgU3RyaW5nIG5hbWUsIE9iamVjdCBvYmplY3QpIHsKLSAgICBpZiAob2Jq
ZWN0IGluc3RhbmNlb2YgTGlzdDw/PikgewotICAgICAgTGlzdDw/PiBsaXN0ID0gKExpc3Q8Pz4p
IG9iamVjdDsKLSAgICAgIGZvciAoT2JqZWN0IGVudHJ5IDogbGlzdCkgewotICAgICAgICBwcmlu
dEZpZWxkKGJ1ZmZlciwgaW5kZW50LCBuYW1lLCBlbnRyeSk7Ci0gICAgICB9Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYnVmZmVyLmFwcGVuZCgnXG4nKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGluZGVudDsgaSsrKSB7Ci0gICAgICBidWZmZXIuYXBwZW5kKCcgJyk7Ci0gICAgfQot
ICAgIGJ1ZmZlci5hcHBlbmQobmFtZSk7Ci0KLSAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3Ry
aW5nKSB7Ci0gICAgICBidWZmZXIuYXBwZW5kKCI6IFwiIikuYXBwZW5kKFRleHRGb3JtYXRFc2Nh
cGVyLmVzY2FwZVRleHQoKFN0cmluZykgb2JqZWN0KSkuYXBwZW5kKCciJyk7Ci0gICAgfSBlbHNl
IGlmIChvYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nKSB7Ci0gICAgICBidWZmZXIuYXBwZW5k
KCI6IFwiIikuYXBwZW5kKFRleHRGb3JtYXRFc2NhcGVyLmVzY2FwZUJ5dGVzKChCeXRlU3RyaW5n
KSBvYmplY3QpKS5hcHBlbmQoJyInKTsKLSAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9m
IEdlbmVyYXRlZE1lc3NhZ2VMaXRlKSB7Ci0gICAgICBidWZmZXIuYXBwZW5kKCIgeyIpOwotICAg
ICAgcmVmbGVjdGl2ZVByaW50V2l0aEluZGVudCgoR2VuZXJhdGVkTWVzc2FnZUxpdGU8PywgPz4p
IG9iamVjdCwgYnVmZmVyLCBpbmRlbnQgKyAyKTsKLSAgICAgIGJ1ZmZlci5hcHBlbmQoIlxuIik7
Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZGVudDsgaSsrKSB7Ci0gICAgICAgIGJ1ZmZl
ci5hcHBlbmQoJyAnKTsKLSAgICAgIH0KLSAgICAgIGJ1ZmZlci5hcHBlbmQoIn0iKTsKLSAgICB9
IGVsc2UgewotICAgICAgYnVmZmVyLmFwcGVuZCgiOiAiKS5hcHBlbmQob2JqZWN0LnRvU3RyaW5n
KCkpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNhbWVs
Q2FzZVRvU25ha2VDYXNlKFN0cmluZyBjYW1lbENhc2UpIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2Ft
ZWxDYXNlLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgIGNoYXIgY2ggPSBjYW1lbENhc2UuY2hhckF0
KGkpOwotICAgICAgaWYgKENoYXJhY3Rlci5pc1VwcGVyQ2FzZShjaCkpIHsKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoIl8iKTsKLSAgICAgIH0KLSAgICAgIGJ1aWxkZXIuYXBwZW5kKENoYXJhY3Rl
ci50b0xvd2VyQ2FzZShjaCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvTWVzc2FnZU9yQnVpbGRlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9j
b20vZ29vZ2xlL3Byb3RvYnVmL01lc3NhZ2VPckJ1aWxkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWU3ZDc4MjEzMjU0YTZmYzhkNmFhYjY1ODYyNDFiYWY0NjBjNmUxMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9z
cmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWVzc2FnZU9yQnVpbGRlci5qYXZhCisr
KyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBqYXZhLnV0
aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEJhc2UgaW50ZXJmYWNl
IGZvciBtZXRob2RzIGNvbW1vbiB0byB7QGxpbmsgTWVzc2FnZX0gYW5kCi0gKiB7QGxpbmsgTWVz
c2FnZS5CdWlsZGVyfSB0byBwcm92aWRlIHR5cGUgZXF1aXZhbGVuY3kuCi0gKgotICogQGF1dGhv
ciBqb25wQGdvb2dsZS5jb20gKEpvbiBQZXJsb3cpCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWVz
c2FnZU9yQnVpbGRlciBleHRlbmRzIE1lc3NhZ2VMaXRlT3JCdWlsZGVyIHsKLQotICAvLyAoRnJv
bSBNZXNzYWdlTGl0ZSwgcmUtZGVjbGFyZWQgaGVyZSBvbmx5IGZvciByZXR1cm4gdHlwZSBjb3Zh
cmlhbmNlLikKLSAgQE92ZXJyaWRlCi0gIE1lc3NhZ2UgZ2V0RGVmYXVsdEluc3RhbmNlRm9yVHlw
ZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBmaWVsZCBwYXRocyAoZS5nLiAi
Zm9vLmJhci5iYXoiKSBvZiByZXF1aXJlZCBmaWVsZHMKLSAgICogd2hpY2ggYXJlIG5vdCBzZXQg
aW4gdGhpcyBtZXNzYWdlLiAgWW91IHNob3VsZCBjYWxsCi0gICAqIHtAbGluayBNZXNzYWdlTGl0
ZU9yQnVpbGRlciNpc0luaXRpYWxpemVkKCl9IGZpcnN0IHRvIGNoZWNrIGlmIHRoZXJlCi0gICAq
IGFyZSBhbnkgbWlzc2luZyBmaWVsZHMsIGFzIHRoYXQgbWV0aG9kIGlzIGxpa2VseSB0byBiZSBt
dWNoIGZhc3RlcgotICAgKiB0aGFuIHRoaXMgb25lIGV2ZW4gd2hlbiB0aGUgbWVzc2FnZSBpcyBm
dWxseS1pbml0aWFsaXplZC4KLSAgICovCi0gIExpc3Q8U3RyaW5nPiBmaW5kSW5pdGlhbGl6YXRp
b25FcnJvcnMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIGNvbW1hLWRlbGltaXRlZCBsaXN0
IG9mIHJlcXVpcmVkIGZpZWxkcyB3aGljaCBhcmUgbm90IHNldAotICAgKiBpbiB0aGlzIG1lc3Nh
Z2Ugb2JqZWN0LiAgWW91IHNob3VsZCBjYWxsCi0gICAqIHtAbGluayBNZXNzYWdlTGl0ZU9yQnVp
bGRlciNpc0luaXRpYWxpemVkKCl9IGZpcnN0IHRvIGNoZWNrIGlmIHRoZXJlCi0gICAqIGFyZSBh
bnkgbWlzc2luZyBmaWVsZHMsIGFzIHRoYXQgbWV0aG9kIGlzIGxpa2VseSB0byBiZSBtdWNoIGZh
c3RlcgotICAgKiB0aGFuIHRoaXMgb25lIGV2ZW4gd2hlbiB0aGUgbWVzc2FnZSBpcyBmdWxseS1p
bml0aWFsaXplZC4KLSAgICovCi0gIFN0cmluZyBnZXRJbml0aWFsaXphdGlvbkVycm9yU3RyaW5n
KCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbWVzc2FnZSdzIHR5cGUncyBkZXNjcmlwdG9yLiAg
VGhpcyBkaWZmZXJzIGZyb20gdGhlCi0gICAqIHtAY29kZSBnZXREZXNjcmlwdG9yKCl9IG1ldGhv
ZCBvZiBnZW5lcmF0ZWQgbWVzc2FnZSBjbGFzc2VzIGluIHRoYXQKLSAgICogdGhpcyBtZXRob2Qg
aXMgYW4gYWJzdHJhY3QgbWV0aG9kIG9mIHRoZSB7QGNvZGUgTWVzc2FnZX0gaW50ZXJmYWNlCi0g
ICAqIHdoZXJlYXMge0Bjb2RlIGdldERlc2NyaXB0b3IoKX0gaXMgYSBzdGF0aWMgbWV0aG9kIG9m
IGEgc3BlY2lmaWMgY2xhc3MuCi0gICAqIFRoZXkgcmV0dXJuIHRoZSBzYW1lIHRoaW5nLgotICAg
Ki8KLSAgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciBnZXREZXNjcmlwdG9yRm9yVHlwZSgpOwotCi0g
IC8qKgotICAgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBhbGwgdGhlIGZpZWxkcyBpbiB0aGlz
IG1lc3NhZ2Ugd2hpY2ggYXJlIHNldAotICAgKiBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1
ZXMuICBBIHNpbmd1bGFyICgicmVxdWlyZWQiIG9yICJvcHRpb25hbCIpCi0gICAqIGZpZWxkIGlz
IHNldCBpZmYgaGFzRmllbGQoKSByZXR1cm5zIHRydWUgZm9yIHRoYXQgZmllbGQuICBBICJyZXBl
YXRlZCIKLSAgICogZmllbGQgaXMgc2V0IGlmZiBnZXRSZXBlYXRlZEZpZWxkQ291bnQoKSBpcyBn
cmVhdGVyIHRoYW4gemVyby4gIFRoZQotICAgKiB2YWx1ZXMgYXJlIGV4YWN0bHkgd2hhdCB3b3Vs
ZCBiZSByZXR1cm5lZCBieSBjYWxsaW5nCi0gICAqIHtAbGluayAjZ2V0RmllbGQoRGVzY3JpcHRv
cnMuRmllbGREZXNjcmlwdG9yKX0gZm9yIGVhY2ggZmllbGQuICBUaGUgbWFwCi0gICAqIGlzIGd1
YXJhbnRlZWQgdG8gYmUgYSBzb3J0ZWQgbWFwLCBzbyBpdGVyYXRpbmcgb3ZlciBpdCB3aWxsIHJl
dHVybiBmaWVsZHMKLSAgICogaW4gb3JkZXIgYnkgZmllbGQgbnVtYmVyLgotICAgKiA8YnI+Ci0g
ICAqIElmIHRoaXMgaXMgZm9yIGEgYnVpbGRlciwgdGhlIHJldHVybmVkIG1hcCBtYXkgb3IgbWF5
IG5vdCByZWZsZWN0IGZ1dHVyZQotICAgKiBjaGFuZ2VzIHRvIHRoZSBidWlsZGVyLiAgRWl0aGVy
IHdheSwgdGhlIHJldHVybmVkIG1hcCBpcyBpdHNlbGYKLSAgICogdW5tb2RpZmlhYmxlLgotICAg
Ki8KLSAgTWFwPERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciwgT2JqZWN0PiBnZXRBbGxGaWVs
ZHMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBvbmVvZiBpcyBz
ZXQuCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmCi0gICAqICAgICAg
ICAgICB7QGNvZGUgb25lb2YuZ2V0Q29udGFpbmluZ1R5cGUoKSAhPSBnZXREZXNjcmlwdG9yRm9y
VHlwZSgpfS4KLSAgICovCi0gIGJvb2xlYW4gaGFzT25lb2YoRGVzY3JpcHRvcnMuT25lb2ZEZXNj
cmlwdG9yIG9uZW9mKTsKLQotICAvKioKLSAgICogT2J0YWlucyB0aGUgRmllbGREZXNjcmlwdG9y
IGlmIHRoZSBnaXZlbiBvbmVvZiBpcyBzZXQuIFJldHVybnMgbnVsbAotICAgKiBpZiBubyBmaWVs
ZCBpcyBzZXQuCi0gICAqLwotICBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZ2V0T25lb2ZG
aWVsZERlc2NyaXB0b3IoCi0gICAgICBEZXNjcmlwdG9ycy5PbmVvZkRlc2NyaXB0b3Igb25lb2Yp
OwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGZpZWxkIGlzIHNldC4g
IFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvCi0gICAqIGNhbGxpbmcgdGhlIGdlbmVyYXRl
ZCAiaGFzIiBhY2Nlc3NvciBtZXRob2QgY29ycmVzcG9uZGluZyB0byB0aGUgZmllbGQuCi0gICAq
IEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIFRoZSBmaWVsZCBpcyBhIHJlcGVhdGVk
IGZpZWxkLCBvcgotICAgKiAgICAgICAgICAge0Bjb2RlIGZpZWxkLmdldENvbnRhaW5pbmdUeXBl
KCkgIT0gZ2V0RGVzY3JpcHRvckZvclR5cGUoKX0uCi0gICAqLwotICBib29sZWFuIGhhc0ZpZWxk
KERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCk7Ci0KLSAgLyoqCi0gICAqIE9idGFp
bnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBmaWVsZCwgb3IgdGhlIGRlZmF1bHQgdmFsdWUgaWYg
aXQgaXMKLSAgICogbm90IHNldC4gIEZvciBwcmltaXRpdmUgZmllbGRzLCB0aGUgYm94ZWQgcHJp
bWl0aXZlIHZhbHVlIGlzIHJldHVybmVkLgotICAgKiBGb3IgZW51bSBmaWVsZHMsIHRoZSBFbnVt
VmFsdWVEZXNjcmlwdG9yIGZvciB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuIEZvcgotICAgKiBlbWJl
ZGRlZCBtZXNzYWdlIGZpZWxkcywgdGhlIHN1Yi1tZXNzYWdlIGlzIHJldHVybmVkLiAgRm9yIHJl
cGVhdGVkCi0gICAqIGZpZWxkcywgYSBqYXZhLnV0aWwuTGlzdCBpcyByZXR1cm5lZC4KLSAgICov
Ci0gIE9iamVjdCBnZXRGaWVsZChEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmllbGQpOwot
Ci0gIC8qKgotICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgYSByZXBlYXRlZCBm
aWVsZC4gIFRoaXMgaXMgZXhhY3RseQotICAgKiBlcXVpdmFsZW50IHRvIGNhbGxpbmcgdGhlIGdl
bmVyYXRlZCAiQ291bnQiIGFjY2Vzc29yIG1ldGhvZCBjb3JyZXNwb25kaW5nCi0gICAqIHRvIHRo
ZSBmaWVsZC4KLSAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gVGhlIGZpZWxk
IGlzIG5vdCBhIHJlcGVhdGVkIGZpZWxkLCBvcgotICAgKiAgICAgICAgICAge0Bjb2RlIGZpZWxk
LmdldENvbnRhaW5pbmdUeXBlKCkgIT0gZ2V0RGVzY3JpcHRvckZvclR5cGUoKX0uCi0gICAqLwot
ICBpbnQgZ2V0UmVwZWF0ZWRGaWVsZENvdW50KERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBm
aWVsZCk7Ci0KLSAgLyoqCi0gICAqIEdldHMgYW4gZWxlbWVudCBvZiBhIHJlcGVhdGVkIGZpZWxk
LiAgRm9yIHByaW1pdGl2ZSBmaWVsZHMsIHRoZSBib3hlZAotICAgKiBwcmltaXRpdmUgdmFsdWUg
aXMgcmV0dXJuZWQuICBGb3IgZW51bSBmaWVsZHMsIHRoZSBFbnVtVmFsdWVEZXNjcmlwdG9yCi0g
ICAqIGZvciB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuIEZvciBlbWJlZGRlZCBtZXNzYWdlIGZpZWxk
cywgdGhlIHN1Yi1tZXNzYWdlCi0gICAqIGlzIHJldHVybmVkLgotICAgKiBAdGhyb3dzIElsbGVn
YWxBcmd1bWVudEV4Y2VwdGlvbiBUaGUgZmllbGQgaXMgbm90IGEgcmVwZWF0ZWQgZmllbGQsIG9y
Ci0gICAqICAgICAgICAgICB7QGNvZGUgZmllbGQuZ2V0Q29udGFpbmluZ1R5cGUoKSAhPSBnZXRE
ZXNjcmlwdG9yRm9yVHlwZSgpfS4KLSAgICovCi0gIE9iamVjdCBnZXRSZXBlYXRlZEZpZWxkKERl
c2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCwgaW50IGluZGV4KTsKLQotICAvKiogR2V0
IHRoZSB7QGxpbmsgVW5rbm93bkZpZWxkU2V0fSBmb3IgdGhpcyBtZXNzYWdlLiAqLwotICBVbmtu
b3duRmllbGRTZXQgZ2V0VW5rbm93bkZpZWxkcygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUv
c3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01lc3NhZ2VSZWZsZWN0aW9uLmphdmEg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWVzc2FnZVJlZmxl
Y3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3OTFkOWU2YzQwZDJh
YmNmZTRhNDllODlhZTQ1ZDliNjI1NTg1Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvTWVzc2FnZVJlZmxlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5MyArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xl
LnByb3RvYnVmOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5GaWVs
ZERlc2NyaXB0b3I7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEu
dXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGls
Lk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLQotLyoqCi0gKiBSZWZsZWN0aW9uIHV0
aWxpdHkgbWV0aG9kcyBzaGFyZWQgYnkgYm90aCBtdXRhYmxlIGFuZCBpbW11dGFibGUgbWVzc2Fn
ZXMuCi0gKgotICogQGF1dGhvciBsaXVqaXNpQGdvb2dsZS5jb20gKFBoZXJsIExpdSkKLSAqLwot
Y2xhc3MgTWVzc2FnZVJlZmxlY3Rpb24gewotCi0gIHN0YXRpYyB2b2lkIHdyaXRlTWVzc2FnZVRv
KAotICAgICAgTWVzc2FnZSBtZXNzYWdlLAotICAgICAgTWFwPEZpZWxkRGVzY3JpcHRvciwgT2Jq
ZWN0PiBmaWVsZHMsCi0gICAgICBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQsCi0gICAgICBib29s
ZWFuIGFsd2F5c1dyaXRlUmVxdWlyZWRGaWVsZHMpCi0gICAgICB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIGZpbmFsIGJvb2xlYW4gaXNNZXNzYWdlU2V0ID0KLSAgICAgICAgbWVzc2FnZS5nZXRE
ZXNjcmlwdG9yRm9yVHlwZSgpLmdldE9wdGlvbnMoKS5nZXRNZXNzYWdlU2V0V2lyZUZvcm1hdCgp
OwotICAgIGlmIChhbHdheXNXcml0ZVJlcXVpcmVkRmllbGRzKSB7Ci0gICAgICBmaWVsZHMgPSBu
ZXcgVHJlZU1hcDxGaWVsZERlc2NyaXB0b3IsIE9iamVjdD4oZmllbGRzKTsKLSAgICAgIGZvciAo
ZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkIDoKLSAgICAgICAgICBtZXNzYWdlLmdldERlc2Ny
aXB0b3JGb3JUeXBlKCkuZ2V0RmllbGRzKCkpIHsKLSAgICAgICAgaWYgKGZpZWxkLmlzUmVxdWly
ZWQoKSAmJiAhZmllbGRzLmNvbnRhaW5zS2V5KGZpZWxkKSkgewotICAgICAgICAgIGZpZWxkcy5w
dXQoZmllbGQsIG1lc3NhZ2UuZ2V0RmllbGQoZmllbGQpKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0KLSAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTxEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0
b3IsIE9iamVjdD4gZW50cnkgOgotICAgICAgICBmaWVsZHMuZW50cnlTZXQoKSkgewotICAgICAg
ZmluYWwgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkID0gZW50cnkuZ2V0S2V5KCk7
Ci0gICAgICBmaW5hbCBPYmplY3QgdmFsdWUgPSBlbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgaWYg
KGlzTWVzc2FnZVNldCAmJiBmaWVsZC5pc0V4dGVuc2lvbigpICYmCi0gICAgICAgICAgZmllbGQu
Z2V0VHlwZSgpID09IERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvci5UeXBlLk1FU1NBR0UgJiYK
LSAgICAgICAgICAhZmllbGQuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICAgIG91dHB1dC53cml0ZU1l
c3NhZ2VTZXRFeHRlbnNpb24oZmllbGQuZ2V0TnVtYmVyKCksIChNZXNzYWdlKSB2YWx1ZSk7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICBGaWVsZFNldC53cml0ZUZpZWxkKGZpZWxkLCB2YWx1ZSwg
b3V0cHV0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmaW5hbCBVbmtub3duRmllbGRTZXQgdW5r
bm93bkZpZWxkcyA9IG1lc3NhZ2UuZ2V0VW5rbm93bkZpZWxkcygpOwotICAgIGlmIChpc01lc3Nh
Z2VTZXQpIHsKLSAgICAgIHVua25vd25GaWVsZHMud3JpdGVBc01lc3NhZ2VTZXRUbyhvdXRwdXQp
OwotICAgIH0gZWxzZSB7Ci0gICAgICB1bmtub3duRmllbGRzLndyaXRlVG8ob3V0cHV0KTsKLSAg
ICB9Ci0gIH0KLQotICBzdGF0aWMgaW50IGdldFNlcmlhbGl6ZWRTaXplKAotICAgICAgTWVzc2Fn
ZSBtZXNzYWdlLAotICAgICAgTWFwPEZpZWxkRGVzY3JpcHRvciwgT2JqZWN0PiBmaWVsZHMpIHsK
LSAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgZmluYWwgYm9vbGVhbiBpc01lc3NhZ2VTZXQgPQotICAg
ICAgICBtZXNzYWdlLmdldERlc2NyaXB0b3JGb3JUeXBlKCkuZ2V0T3B0aW9ucygpLmdldE1lc3Nh
Z2VTZXRXaXJlRm9ybWF0KCk7Ci0KLSAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTxEZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3IsIE9iamVjdD4gZW50cnkgOgotICAgICAgICBmaWVsZHMuZW50cnlT
ZXQoKSkgewotICAgICAgZmluYWwgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkID0g
ZW50cnkuZ2V0S2V5KCk7Ci0gICAgICBmaW5hbCBPYmplY3QgdmFsdWUgPSBlbnRyeS5nZXRWYWx1
ZSgpOwotICAgICAgaWYgKGlzTWVzc2FnZVNldCAmJiBmaWVsZC5pc0V4dGVuc2lvbigpICYmCi0g
ICAgICAgICAgZmllbGQuZ2V0VHlwZSgpID09IERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvci5U
eXBlLk1FU1NBR0UgJiYKLSAgICAgICAgICAhZmllbGQuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICAg
IHNpemUgKz0gQ29kZWRPdXRwdXRTdHJlYW0uY29tcHV0ZU1lc3NhZ2VTZXRFeHRlbnNpb25TaXpl
KAotICAgICAgICAgICAgZmllbGQuZ2V0TnVtYmVyKCksIChNZXNzYWdlKSB2YWx1ZSk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICBzaXplICs9IEZpZWxkU2V0LmNvbXB1dGVGaWVsZFNpemUoZmll
bGQsIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmaW5hbCBVbmtub3duRmllbGRTZXQg
dW5rbm93bkZpZWxkcyA9IG1lc3NhZ2UuZ2V0VW5rbm93bkZpZWxkcygpOwotICAgIGlmIChpc01l
c3NhZ2VTZXQpIHsKLSAgICAgIHNpemUgKz0gdW5rbm93bkZpZWxkcy5nZXRTZXJpYWxpemVkU2l6
ZUFzTWVzc2FnZVNldCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzaXplICs9IHVua25vd25GaWVs
ZHMuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpemU7Ci0gIH0KLQot
ICBzdGF0aWMgU3RyaW5nIGRlbGltaXRXaXRoQ29tbWFzKExpc3Q8U3RyaW5nPiBwYXJ0cykgewot
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBmb3Ig
KFN0cmluZyBwYXJ0IDogcGFydHMpIHsKLSAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgPiAwKSB7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgIik7Ci0gICAgICB9Ci0gICAgICByZXN1bHQuYXBw
ZW5kKHBhcnQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gIH0KLQot
ICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgc3RhdGljIGJvb2xlYW4gaXNJbml0
aWFsaXplZChNZXNzYWdlT3JCdWlsZGVyIG1lc3NhZ2UpIHsKLSAgICAvLyBDaGVjayB0aGF0IGFs
bCByZXF1aXJlZCBmaWVsZHMgYXJlIHByZXNlbnQuCi0gICAgZm9yIChmaW5hbCBEZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3IgZmllbGQgOiBtZXNzYWdlCi0gICAgICAgIC5nZXREZXNjcmlwdG9y
Rm9yVHlwZSgpCi0gICAgICAgIC5nZXRGaWVsZHMoKSkgewotICAgICAgaWYgKGZpZWxkLmlzUmVx
dWlyZWQoKSkgewotICAgICAgICBpZiAoIW1lc3NhZ2UuaGFzRmllbGQoZmllbGQpKSB7Ci0gICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8g
Q2hlY2sgdGhhdCBlbWJlZGRlZCBtZXNzYWdlcyBhcmUgaW5pdGlhbGl6ZWQuCi0gICAgZm9yIChm
aW5hbCBNYXAuRW50cnk8RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGVudHJ5
IDoKLSAgICAgICAgbWVzc2FnZS5nZXRBbGxGaWVsZHMoKS5lbnRyeVNldCgpKSB7Ci0gICAgICBm
aW5hbCBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmllbGQgPSBlbnRyeS5nZXRLZXkoKTsK
LSAgICAgIGlmIChmaWVsZC5nZXRKYXZhVHlwZSgpID09IERlc2NyaXB0b3JzLkZpZWxkRGVzY3Jp
cHRvci5KYXZhVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgIGlmIChmaWVsZC5pc1JlcGVhdGVkKCkp
IHsKLSAgICAgICAgICBmb3IgKGZpbmFsIE1lc3NhZ2UgZWxlbWVudAotICAgICAgICAgICAgICA6
IChMaXN0PE1lc3NhZ2U+KSBlbnRyeS5nZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWVs
ZW1lbnQuaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYg
KCEoKE1lc3NhZ2UpIGVudHJ5LmdldFZhbHVlKCkpLmlzSW5pdGlhbGl6ZWQoKSkgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN1
Yk1lc3NhZ2VQcmVmaXgoZmluYWwgU3RyaW5nIHByZWZpeCwKLSAgICAgIGZpbmFsIERlc2NyaXB0
b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCwKLSAgICAgIGZpbmFsIGludCBpbmRleCkgewotICAg
IGZpbmFsIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIocHJlZml4KTsK
LSAgICBpZiAoZmllbGQuaXNFeHRlbnNpb24oKSkgewotICAgICAgcmVzdWx0LmFwcGVuZCgnKCcp
Ci0gICAgICAgICAgLmFwcGVuZChmaWVsZC5nZXRGdWxsTmFtZSgpKQotICAgICAgICAgIC5hcHBl
bmQoJyknKTsKLSAgICB9IGVsc2UgewotICAgICAgcmVzdWx0LmFwcGVuZChmaWVsZC5nZXROYW1l
KCkpOwotICAgIH0KLSAgICBpZiAoaW5kZXggIT0gLTEpIHsKLSAgICAgIHJlc3VsdC5hcHBlbmQo
J1snKQotICAgICAgICAgIC5hcHBlbmQoaW5kZXgpCi0gICAgICAgICAgLmFwcGVuZCgnXScpOwot
ICAgIH0KLSAgICByZXN1bHQuYXBwZW5kKCcuJyk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaW5kTWlzc2luZ0ZpZWxkcyhmaW5h
bCBNZXNzYWdlT3JCdWlsZGVyIG1lc3NhZ2UsCi0gICAgICBmaW5hbCBTdHJpbmcgcHJlZml4LAot
ICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IHJlc3VsdHMpIHsKLSAgICBmb3IgKGZpbmFsIERlc2Ny
aXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCA6Ci0gICAgICAgIG1lc3NhZ2UuZ2V0RGVzY3Jp
cHRvckZvclR5cGUoKS5nZXRGaWVsZHMoKSkgewotICAgICAgaWYgKGZpZWxkLmlzUmVxdWlyZWQo
KSAmJiAhbWVzc2FnZS5oYXNGaWVsZChmaWVsZCkpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQocHJl
Zml4ICsgZmllbGQuZ2V0TmFtZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGZpbmFs
IE1hcC5FbnRyeTxEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IsIE9iamVjdD4gZW50cnkgOgot
ICAgICAgICBtZXNzYWdlLmdldEFsbEZpZWxkcygpLmVudHJ5U2V0KCkpIHsKLSAgICAgIGZpbmFs
IERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCA9IGVudHJ5LmdldEtleSgpOwotICAg
ICAgZmluYWwgT2JqZWN0IHZhbHVlID0gZW50cnkuZ2V0VmFsdWUoKTsKLQotICAgICAgaWYgKGZp
ZWxkLmdldEphdmFUeXBlKCkgPT0gRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLkphdmFUeXBl
Lk1FU1NBR0UpIHsKLSAgICAgICAgaWYgKGZpZWxkLmlzUmVwZWF0ZWQoKSkgewotICAgICAgICAg
IGludCBpID0gMDsKLSAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBlbGVtZW50IDogKExpc3Qp
IHZhbHVlKSB7Ci0gICAgICAgICAgICBmaW5kTWlzc2luZ0ZpZWxkcygoTWVzc2FnZU9yQnVpbGRl
cikgZWxlbWVudCwKLSAgICAgICAgICAgICAgICBzdWJNZXNzYWdlUHJlZml4KHByZWZpeCwgZmll
bGQsIGkrKyksCi0gICAgICAgICAgICAgICAgcmVzdWx0cyk7Ci0gICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGlmIChtZXNzYWdlLmhhc0ZpZWxkKGZpZWxkKSkgewotICAg
ICAgICAgICAgZmluZE1pc3NpbmdGaWVsZHMoKE1lc3NhZ2VPckJ1aWxkZXIpIHZhbHVlLAotICAg
ICAgICAgICAgICAgIHN1Yk1lc3NhZ2VQcmVmaXgocHJlZml4LCBmaWVsZCwgLTEpLAotICAgICAg
ICAgICAgICAgIHJlc3VsdHMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIC8qKgotICAgKiBQb3B1bGF0ZXMge0Bjb2RlIHRoaXMubWlzc2luZ0ZpZWxk
c30gd2l0aCB0aGUgZnVsbCAicGF0aCIgb2YgZWFjaCBtaXNzaW5nCi0gICAqIHJlcXVpcmVkIGZp
ZWxkIGluIHRoZSBnaXZlbiBtZXNzYWdlLgotICAgKi8KLSAgc3RhdGljIExpc3Q8U3RyaW5nPiBm
aW5kTWlzc2luZ0ZpZWxkcygKLSAgICAgIGZpbmFsIE1lc3NhZ2VPckJ1aWxkZXIgbWVzc2FnZSkg
ewotICAgIGZpbmFsIExpc3Q8U3RyaW5nPiByZXN1bHRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+
KCk7Ci0gICAgZmluZE1pc3NpbmdGaWVsZHMobWVzc2FnZSwgIiIsIHJlc3VsdHMpOwotICAgIHJl
dHVybiByZXN1bHRzOwotICB9Ci0KLSAgc3RhdGljIGludGVyZmFjZSBNZXJnZVRhcmdldCB7Ci0g
ICAgZW51bSBDb250YWluZXJUeXBlIHsKLSAgICAgIE1FU1NBR0UsIEVYVEVOU0lPTl9TRVQKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgdGFy
Z2V0LgotICAgICAqLwotICAgIHB1YmxpYyBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIGdldERlc2Ny
aXB0b3JGb3JUeXBlKCk7Ci0KLSAgICBwdWJsaWMgQ29udGFpbmVyVHlwZSBnZXRDb250YWluZXJU
eXBlKCk7Ci0KLSAgICBwdWJsaWMgRXh0ZW5zaW9uUmVnaXN0cnkuRXh0ZW5zaW9uSW5mbyBmaW5k
RXh0ZW5zaW9uQnlOYW1lKAotICAgICAgICBFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSwgU3Ry
aW5nIG5hbWUpOwotCi0gICAgcHVibGljIEV4dGVuc2lvblJlZ2lzdHJ5LkV4dGVuc2lvbkluZm8g
ZmluZEV4dGVuc2lvbkJ5TnVtYmVyKAotICAgICAgICBFeHRlbnNpb25SZWdpc3RyeSByZWdpc3Ry
eSwgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciBjb250YWluaW5nVHlwZSwKLSAgICAgICAgaW50IGZp
ZWxkTnVtYmVyKTsKLQotICAgIC8qKgotICAgICAqIE9idGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBn
aXZlbiBmaWVsZCwgb3IgdGhlIGRlZmF1bHQgdmFsdWUgaWYgaXQgaXMgbm90Ci0gICAgICogc2V0
LiAgRm9yIHByaW1pdGl2ZSBmaWVsZHMsIHRoZSBib3hlZCBwcmltaXRpdmUgdmFsdWUgaXMgcmV0
dXJuZWQuIEZvcgotICAgICAqIGVudW0gZmllbGRzLCB0aGUgRW51bVZhbHVlRGVzY3JpcHRvciBm
b3IgdGhlIHZhbHVlIGlzIHJldHVybmVkLiBGb3IKLSAgICAgKiBlbWJlZGRlZCBtZXNzYWdlIGZp
ZWxkcywgdGhlIHN1Yi1tZXNzYWdlIGlzIHJldHVybmVkLiAgRm9yIHJlcGVhdGVkCi0gICAgICog
ZmllbGRzLCBhIGphdmEudXRpbC5MaXN0IGlzIHJldHVybmVkLgotICAgICAqLwotICAgIHB1Ymxp
YyBPYmplY3QgZ2V0RmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkKTsKLQot
ICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZmllbGQgaXMgc2V0LiAg
VGhpcyBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8KLSAgICAgKiBjYWxsaW5nIHRoZSBnZW5lcmF0
ZWQgImhhcyIgYWNjZXNzb3IgbWV0aG9kIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpZWxkLgotICAg
ICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gVGhlIGZpZWxkIGlz
IGEgcmVwZWF0ZWQgZmllbGQsIG9yIHtAY29kZQotICAgICAqICAgICBmaWVsZC5nZXRDb250YWlu
aW5nVHlwZSgpICE9IGdldERlc2NyaXB0b3JGb3JUeXBlKCl9LgotICAgICAqLwotICAgIGJvb2xl
YW4gaGFzRmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkKTsKLQotICAgIC8q
KgotICAgICAqIFNldHMgYSBmaWVsZCB0byB0aGUgZ2l2ZW4gdmFsdWUuICBUaGUgdmFsdWUgbXVz
dCBiZSBvZiB0aGUgY29ycmVjdCB0eXBlCi0gICAgICogZm9yIHRoaXMgZmllbGQsIGkuZS4gdGhl
IHNhbWUgdHlwZSB0aGF0Ci0gICAgICoge0BsaW5rIE1lc3NhZ2UjZ2V0RmllbGQoRGVzY3JpcHRv
cnMuRmllbGREZXNjcmlwdG9yKX0KLSAgICAgKiB3b3VsZCByZXR1cm4uCi0gICAgICovCi0gICAg
TWVyZ2VUYXJnZXQgc2V0RmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkLCBP
YmplY3QgdmFsdWUpOwotCi0gICAgLyoqCi0gICAgICogQ2xlYXJzIHRoZSBmaWVsZC4gIFRoaXMg
aXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIGNhbGxpbmcgdGhlIGdlbmVyYXRlZAotICAgICAqICJj
bGVhciIgYWNjZXNzb3IgbWV0aG9kIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpZWxkLgotICAgICAq
LwotICAgIE1lcmdlVGFyZ2V0IGNsZWFyRmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9y
IGZpZWxkKTsKLQotICAgIC8qKgotICAgICAqIFNldHMgYW4gZWxlbWVudCBvZiBhIHJlcGVhdGVk
IGZpZWxkIHRvIHRoZSBnaXZlbiB2YWx1ZS4gIFRoZSB2YWx1ZSBtdXN0Ci0gICAgICogYmUgb2Yg
dGhlIGNvcnJlY3QgdHlwZSBmb3IgdGhpcyBmaWVsZCwgaS5lLiB0aGUgc2FtZSB0eXBlIHRoYXQg
e0BsaW5rCi0gICAgICogTWVzc2FnZSNnZXRSZXBlYXRlZEZpZWxkKERlc2NyaXB0b3JzLkZpZWxk
RGVzY3JpcHRvciwgaW50KX0gd291bGQgcmV0dXJuLgotICAgICAqCi0gICAgICogQHRocm93cyBJ
bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gVGhlIGZpZWxkIGlzIG5vdCBhIHJlcGVhdGVkIGZpZWxk
LCBvcgotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtAY29kZSBmaWVs
ZC5nZXRDb250YWluaW5nVHlwZSgpICE9Ci0gICAgICogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0RGVzY3JpcHRvckZvclR5cGUoKX0uCi0gICAgICovCi0gICAgTWVyZ2VUYXJn
ZXQgc2V0UmVwZWF0ZWRGaWVsZChEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmllbGQsCi0g
ICAgICAgIGludCBpbmRleCwgT2JqZWN0IHZhbHVlKTsKLQotICAgIC8qKgotICAgICAqIExpa2Ug
e0Bjb2RlIHNldFJlcGVhdGVkRmllbGR9LCBidXQgYXBwZW5kcyB0aGUgdmFsdWUgYXMgYSBuZXcg
ZWxlbWVudC4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u
IFRoZSBmaWVsZCBpcyBub3QgYSByZXBlYXRlZCBmaWVsZCwgb3IKLSAgICAgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7QGNvZGUgZmllbGQuZ2V0Q29udGFpbmluZ1R5cGUoKSAh
PQotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0b3JG
b3JUeXBlKCl9LgotICAgICAqLwotICAgIE1lcmdlVGFyZ2V0IGFkZFJlcGVhdGVkRmllbGQoRGVz
Y3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkLAotICAgICAgICBPYmplY3QgdmFsdWUpOwot
Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBvbmVvZiBpcyBzZXQu
Ci0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZgotICAg
ICAqICAgICAgICAgICB7QGNvZGUgb25lb2YuZ2V0Q29udGFpbmluZ1R5cGUoKSAhPSBnZXREZXNj
cmlwdG9yRm9yVHlwZSgpfS4KLSAgICAgKi8KLSAgICBib29sZWFuIGhhc09uZW9mKERlc2NyaXB0
b3JzLk9uZW9mRGVzY3JpcHRvciBvbmVvZik7Ci0KLSAgICAvKioKLSAgICAgKiBDbGVhcnMgdGhl
IG9uZW9mLiAgVGhpcyBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gY2FsbGluZyB0aGUgZ2VuZXJh
dGVkCi0gICAgICogImNsZWFyIiBhY2Nlc3NvciBtZXRob2QgY29ycmVzcG9uZGluZyB0byB0aGUg
b25lb2YuCi0gICAgICovCi0gICAgTWVyZ2VUYXJnZXQgY2xlYXJPbmVvZihEZXNjcmlwdG9ycy5P
bmVvZkRlc2NyaXB0b3Igb25lb2YpOwotCi0gICAgLyoqCi0gICAgICogT2J0YWlucyB0aGUgRmll
bGREZXNjcmlwdG9yIGlmIHRoZSBnaXZlbiBvbmVvZiBpcyBzZXQuIFJldHVybnMgbnVsbAotICAg
ICAqIGlmIG5vIGZpZWxkIGlzIHNldC4KLSAgICAgKi8KLSAgICBEZXNjcmlwdG9ycy5GaWVsZERl
c2NyaXB0b3IgZ2V0T25lb2ZGaWVsZERlc2NyaXB0b3IoRGVzY3JpcHRvcnMuT25lb2ZEZXNjcmlw
dG9yIG9uZW9mKTsKLQotICAgIC8qKgotICAgICAqIFBhcnNlIHRoZSBpbnB1dCBzdHJlYW0gaW50
byBhIHN1YiBmaWVsZCBncm91cCBkZWZpbmVkIGJhc2VkIG9uIGVpdGhlcgotICAgICAqIEZpZWxk
RGVzY3JpcHRvciBvciB0aGUgZGVmYXVsdCBpbnN0YW5jZS4KLSAgICAgKi8KLSAgICBPYmplY3Qg
cGFyc2VHcm91cChDb2RlZElucHV0U3RyZWFtIGlucHV0LCBFeHRlbnNpb25SZWdpc3RyeUxpdGUg
cmVnaXN0cnksCi0gICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9y
LCBNZXNzYWdlIGRlZmF1bHRJbnN0YW5jZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uOwot
Ci0gICAgLyoqCi0gICAgICogUGFyc2UgdGhlIGlucHV0IHN0cmVhbSBpbnRvIGEgc3ViIGZpZWxk
IG1lc3NhZ2UgZGVmaW5lZCBiYXNlZCBvbiBlaXRoZXIKLSAgICAgKiBGaWVsZERlc2NyaXB0b3Ig
b3IgdGhlIGRlZmF1bHQgaW5zdGFuY2UuCi0gICAgICovCi0gICAgT2JqZWN0IHBhcnNlTWVzc2Fn
ZShDb2RlZElucHV0U3RyZWFtIGlucHV0LCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgcmVnaXN0cnks
Ci0gICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBNZXNzYWdl
IGRlZmF1bHRJbnN0YW5jZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gICAgLyoq
Ci0gICAgICogUGFyc2UgZnJvbSBhIEJ5dGVTdHJpbmcgaW50byBhIHN1YiBmaWVsZCBtZXNzYWdl
IGRlZmluZWQgYmFzZWQgb24gZWl0aGVyCi0gICAgICogRmllbGREZXNjcmlwdG9yIG9yIHRoZSBk
ZWZhdWx0IGluc3RhbmNlLiAgVGhlcmUgaXNuJ3QgYSB2YXJpbnQgaW5kaWNhdGluZwotICAgICAq
IHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQg
Qnl0ZVN0cmluZy4KLSAgICAgKi8KLSAgICBPYmplY3QgcGFyc2VNZXNzYWdlRnJvbUJ5dGVzKAot
ICAgICAgICBCeXRlU3RyaW5nIGJ5dGVzLCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgcmVnaXN0cnks
Ci0gICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBNZXNzYWdl
IGRlZmF1bHRJbnN0YW5jZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gICAgLyoq
Ci0gICAgICogUmV0dXJucyB0aGUgVVRGOCB2YWxpZGF0aW9uIGxldmVsIGZvciB0aGUgZmllbGQu
Ci0gICAgICovCi0gICAgV2lyZUZvcm1hdC5VdGY4VmFsaWRhdGlvbiBnZXRVdGY4VmFsaWRhdGlv
bihEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IKLSAgICAgICAgZGVzY3JpcHRvcik7Ci0KLSAg
ICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbmV3IG1lcmdlIHRhcmdldCBmb3IgYSBzdWItZmllbGQu
IFdoZW4gZGVmYXVsdEluc3RhbmNlIGlzCi0gICAgICogcHJvdmlkZWQsIGl0IGluZGljYXRlcyB0
aGUgZGVzY3JpcHRvciBpcyBmb3IgYW4gZXh0ZW5zaW9uIHR5cGUsIGFuZAotICAgICAqIGltcGxl
bWVudGF0aW9ucyBzaG91bGQgY3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gdGhlIGRlZmF1bHRJ
bnN0YW5jZQotICAgICAqIHByb3RvdHlwZSBkaXJlY3RseS4KLSAgICAgKi8KLSAgICBNZXJnZVRh
cmdldCBuZXdNZXJnZVRhcmdldEZvckZpZWxkKAotICAgICAgICBEZXNjcmlwdG9ycy5GaWVsZERl
c2NyaXB0b3IgZGVzY3JpcHRvciwKLSAgICAgICAgTWVzc2FnZSBkZWZhdWx0SW5zdGFuY2UpOwot
Ci0gICAgLyoqCi0gICAgICogRmluaXNoZXMgdGhlIG1lcmdlIGFuZCByZXR1cm5zIHRoZSB1bmRl
cmx5aW5nIG9iamVjdC4KLSAgICAgKi8KLSAgICBPYmplY3QgZmluaXNoKCk7Ci0gICAgCi0gIH0K
LQotICBzdGF0aWMgY2xhc3MgQnVpbGRlckFkYXB0ZXIgaW1wbGVtZW50cyBNZXJnZVRhcmdldCB7
Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyOwotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIERlc2NyaXB0b3JzLkRlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvckZv
clR5cGUoKSB7Ci0gICAgICByZXR1cm4gYnVpbGRlci5nZXREZXNjcmlwdG9yRm9yVHlwZSgpOwot
ICAgIH0KLQotICAgIHB1YmxpYyBCdWlsZGVyQWRhcHRlcihNZXNzYWdlLkJ1aWxkZXIgYnVpbGRl
cikgewotICAgICAgdGhpcy5idWlsZGVyID0gYnVpbGRlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgT2JqZWN0IGdldEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRv
ciBmaWVsZCkgewotICAgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0RmllbGQoZmllbGQpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGhhc0ZpZWxkKERlc2NyaXB0b3Jz
LkZpZWxkRGVzY3JpcHRvciBmaWVsZCkgewotICAgICAgcmV0dXJuIGJ1aWxkZXIuaGFzRmllbGQo
ZmllbGQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZXJnZVRhcmdldCBz
ZXRGaWVsZChEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmllbGQsIE9iamVjdCB2YWx1ZSkg
ewotICAgICAgYnVpbGRlci5zZXRGaWVsZChmaWVsZCwgdmFsdWUpOwotICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lcmdlVGFyZ2V0IGNsZWFy
RmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICBidWlsZGVy
LmNsZWFyRmllbGQoZmllbGQpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIE1lcmdlVGFyZ2V0IHNldFJlcGVhdGVkRmllbGQoCi0gICAgICAg
IERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCwgaW50IGluZGV4LCBPYmplY3QgdmFs
dWUpIHsKLSAgICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRGaWVsZChmaWVsZCwgaW5kZXgsIHZhbHVl
KTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBNZXJnZVRhcmdldCBhZGRSZXBlYXRlZEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRv
ciBmaWVsZCwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICBidWlsZGVyLmFkZFJlcGVhdGVkRmllbGQo
ZmllbGQsIHZhbHVlKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBib29sZWFuIGhhc09uZW9mKERlc2NyaXB0b3JzLk9uZW9mRGVzY3JpcHRv
ciBvbmVvZikgewotICAgICAgcmV0dXJuIGJ1aWxkZXIuaGFzT25lb2Yob25lb2YpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZXJnZVRhcmdldCBjbGVhck9uZW9mKERlc2Ny
aXB0b3JzLk9uZW9mRGVzY3JpcHRvciBvbmVvZikgewotICAgICAgYnVpbGRlci5jbGVhck9uZW9m
KG9uZW9mKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZ2V0T25lb2ZGaWVsZERlc2NyaXB0
b3IoRGVzY3JpcHRvcnMuT25lb2ZEZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgICByZXR1cm4gYnVp
bGRlci5nZXRPbmVvZkZpZWxkRGVzY3JpcHRvcihvbmVvZik7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIENvbnRhaW5lclR5cGUgZ2V0Q29udGFpbmVyVHlwZSgpIHsKLSAgICAg
IHJldHVybiBDb250YWluZXJUeXBlLk1FU1NBR0U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIEV4dGVuc2lvblJlZ2lzdHJ5LkV4dGVuc2lvbkluZm8gZmluZEV4dGVuc2lvbkJ5
TmFtZSgKLSAgICAgICAgRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnksIFN0cmluZyBuYW1lKSB7
Ci0gICAgICByZXR1cm4gcmVnaXN0cnkuZmluZEltbXV0YWJsZUV4dGVuc2lvbkJ5TmFtZShuYW1l
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRXh0ZW5zaW9uUmVnaXN0cnku
RXh0ZW5zaW9uSW5mbyBmaW5kRXh0ZW5zaW9uQnlOdW1iZXIoCi0gICAgICAgIEV4dGVuc2lvblJl
Z2lzdHJ5IHJlZ2lzdHJ5LCBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIGNvbnRhaW5pbmdUeXBlLCBp
bnQgZmllbGROdW1iZXIpIHsKLSAgICAgIHJldHVybiByZWdpc3RyeS5maW5kSW1tdXRhYmxlRXh0
ZW5zaW9uQnlOdW1iZXIoY29udGFpbmluZ1R5cGUsCi0gICAgICAgICAgZmllbGROdW1iZXIpOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgcGFyc2VHcm91cCgKLSAg
ICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwKLSAgICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlM
aXRlIGV4dGVuc2lvblJlZ2lzdHJ5LAotICAgICAgICBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0
b3IgZmllbGQsCi0gICAgICAgIE1lc3NhZ2UgZGVmYXVsdEluc3RhbmNlKQotICAgICAgICB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgICAgTWVzc2FnZS5CdWlsZGVyIHN1YkJ1aWxkZXI7Ci0gICAg
ICAvLyBXaGVuIGRlZmF1bHQgaW5zdGFuY2UgaXMgbm90IG51bGwuIFRoZSBmaWVsZCBpcyBhbiBl
eHRlbnNpb24gZmllbGQuCi0gICAgICBpZiAoZGVmYXVsdEluc3RhbmNlICE9IG51bGwpIHsKLSAg
ICAgICAgc3ViQnVpbGRlciA9IGRlZmF1bHRJbnN0YW5jZS5uZXdCdWlsZGVyRm9yVHlwZSgpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3ViQnVpbGRlciA9IGJ1aWxkZXIubmV3QnVpbGRlckZv
ckZpZWxkKGZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmICghZmllbGQuaXNSZXBlYXRlZCgpKSB7
Ci0gICAgICAgIE1lc3NhZ2Ugb3JpZ2luYWxNZXNzYWdlID0gKE1lc3NhZ2UpIGdldEZpZWxkKGZp
ZWxkKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTWVzc2FnZSAhPSBudWxsKSB7Ci0gICAgICAgICAg
c3ViQnVpbGRlci5tZXJnZUZyb20ob3JpZ2luYWxNZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAg
fQotICAgICAgaW5wdXQucmVhZEdyb3VwKGZpZWxkLmdldE51bWJlcigpLCBzdWJCdWlsZGVyLCBl
eHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgICByZXR1cm4gc3ViQnVpbGRlci5idWlsZFBhcnRpYWwo
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHBhcnNlTWVzc2Fn
ZSgKLSAgICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwKLSAgICAgICAgRXh0ZW5zaW9uUmVn
aXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5LAotICAgICAgICBEZXNjcmlwdG9ycy5GaWVsZERl
c2NyaXB0b3IgZmllbGQsCi0gICAgICAgIE1lc3NhZ2UgZGVmYXVsdEluc3RhbmNlKQotICAgICAg
ICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgTWVzc2FnZS5CdWlsZGVyIHN1YkJ1aWxkZXI7
Ci0gICAgICAvLyBXaGVuIGRlZmF1bHQgaW5zdGFuY2UgaXMgbm90IG51bGwuIFRoZSBmaWVsZCBp
cyBhbiBleHRlbnNpb24gZmllbGQuCi0gICAgICBpZiAoZGVmYXVsdEluc3RhbmNlICE9IG51bGwp
IHsKLSAgICAgICAgc3ViQnVpbGRlciA9IGRlZmF1bHRJbnN0YW5jZS5uZXdCdWlsZGVyRm9yVHlw
ZSgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3ViQnVpbGRlciA9IGJ1aWxkZXIubmV3QnVp
bGRlckZvckZpZWxkKGZpZWxkKTsKLSAgICAgIH0KLSAgICAgIGlmICghZmllbGQuaXNSZXBlYXRl
ZCgpKSB7Ci0gICAgICAgIE1lc3NhZ2Ugb3JpZ2luYWxNZXNzYWdlID0gKE1lc3NhZ2UpIGdldEZp
ZWxkKGZpZWxkKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTWVzc2FnZSAhPSBudWxsKSB7Ci0gICAg
ICAgICAgc3ViQnVpbGRlci5tZXJnZUZyb20ob3JpZ2luYWxNZXNzYWdlKTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgaW5wdXQucmVhZE1lc3NhZ2Uoc3ViQnVpbGRlciwgZXh0ZW5zaW9uUmVn
aXN0cnkpOwotICAgICAgcmV0dXJuIHN1YkJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBwYXJzZU1lc3NhZ2VGcm9tQnl0ZXMo
Ci0gICAgICAgIEJ5dGVTdHJpbmcgYnl0ZXMsCi0gICAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5TGl0
ZSBleHRlbnNpb25SZWdpc3RyeSwKLSAgICAgICAgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9y
IGZpZWxkLAotICAgICAgICBNZXNzYWdlIGRlZmF1bHRJbnN0YW5jZSkKLSAgICAgICAgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICAgIE1lc3NhZ2UuQnVpbGRlciBzdWJCdWlsZGVyOwotICAgICAg
Ly8gV2hlbiBkZWZhdWx0IGluc3RhbmNlIGlzIG5vdCBudWxsLiBUaGUgZmllbGQgaXMgYW4gZXh0
ZW5zaW9uIGZpZWxkLgotICAgICAgaWYgKGRlZmF1bHRJbnN0YW5jZSAhPSBudWxsKSB7Ci0gICAg
ICAgIHN1YkJ1aWxkZXIgPSBkZWZhdWx0SW5zdGFuY2UubmV3QnVpbGRlckZvclR5cGUoKTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1YkJ1aWxkZXIgPSBidWlsZGVyLm5ld0J1aWxkZXJGb3JG
aWVsZChmaWVsZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWZpZWxkLmlzUmVwZWF0ZWQoKSkgewot
ICAgICAgICBNZXNzYWdlIG9yaWdpbmFsTWVzc2FnZSA9IChNZXNzYWdlKSBnZXRGaWVsZChmaWVs
ZCk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE1lc3NhZ2UgIT0gbnVsbCkgewotICAgICAgICAgIHN1
YkJ1aWxkZXIubWVyZ2VGcm9tKG9yaWdpbmFsTWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICAgIHN1YkJ1aWxkZXIubWVyZ2VGcm9tKGJ5dGVzLCBleHRlbnNpb25SZWdpc3RyeSk7Ci0g
ICAgICByZXR1cm4gc3ViQnVpbGRlci5idWlsZFBhcnRpYWwoKTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgTWVyZ2VUYXJnZXQgbmV3TWVyZ2VUYXJnZXRGb3JGaWVsZCgKLSAg
ICAgICAgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkLCBNZXNzYWdlIGRlZmF1bHRJ
bnN0YW5jZSkgewotICAgICAgaWYgKGRlZmF1bHRJbnN0YW5jZSAhPSBudWxsKSB7Ci0gICAgICAg
IHJldHVybiBuZXcgQnVpbGRlckFkYXB0ZXIoCi0gICAgICAgICAgICBkZWZhdWx0SW5zdGFuY2Uu
bmV3QnVpbGRlckZvclR5cGUoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gbmV3
IEJ1aWxkZXJBZGFwdGVyKGJ1aWxkZXIubmV3QnVpbGRlckZvckZpZWxkKGZpZWxkKSk7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFdpcmVGb3JtYXQuVXRmOFZh
bGlkYXRpb24gZ2V0VXRmOFZhbGlkYXRpb24oRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGRl
c2NyaXB0b3IpIHsKLSAgICAgIGlmIChkZXNjcmlwdG9yLm5lZWRzVXRmOENoZWNrKCkpIHsKLSAg
ICAgICAgcmV0dXJuIFdpcmVGb3JtYXQuVXRmOFZhbGlkYXRpb24uU1RSSUNUOwotICAgICAgfQot
ICAgICAgLy8gVE9ETyhsaXVqaXNpKTogc3VwcG9ydCBsYXp5IHN0cmluZ3MgZm9yIHJlcGVhdGVk
IGZpZWxkcy4KLSAgICAgIGlmICghZGVzY3JpcHRvci5pc1JlcGVhdGVkKCkKLSAgICAgICAgICAm
JiBidWlsZGVyIGluc3RhbmNlb2YgR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyKSB7Ci0gICAgICAg
IHJldHVybiBXaXJlRm9ybWF0LlV0ZjhWYWxpZGF0aW9uLkxBWlk7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gV2lyZUZvcm1hdC5VdGY4VmFsaWRhdGlvbi5MT09TRTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGZpbmlzaCgpIHsKLSAgICAgIHJldHVybiBidWlsZGVy
LmJ1aWxkUGFydGlhbCgpOwotICAgIH0KLSAgICAKLSAgfQotCi0KLSAgc3RhdGljIGNsYXNzIEV4
dGVuc2lvbkFkYXB0ZXIgaW1wbGVtZW50cyBNZXJnZVRhcmdldCB7Ci0KLSAgICBwcml2YXRlIGZp
bmFsIEZpZWxkU2V0PERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvcj4gZXh0ZW5zaW9uczsKLQot
ICAgIEV4dGVuc2lvbkFkYXB0ZXIoRmllbGRTZXQ8RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9y
PiBleHRlbnNpb25zKSB7Ci0gICAgICB0aGlzLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIGdl
dERlc2NyaXB0b3JGb3JUeXBlKCkgewotICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0
aW9uRXhjZXB0aW9uKAotICAgICAgICAgICJnZXREZXNjcmlwdG9yRm9yVHlwZSgpIGNhbGxlZCBv
biBGaWVsZFNldCBvYmplY3QiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
T2JqZWN0IGdldEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCkgewotICAg
ICAgcmV0dXJuIGV4dGVuc2lvbnMuZ2V0RmllbGQoZmllbGQpOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBib29sZWFuIGhhc0ZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3Jp
cHRvciBmaWVsZCkgewotICAgICAgcmV0dXJuIGV4dGVuc2lvbnMuaGFzRmllbGQoZmllbGQpOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZXJnZVRhcmdldCBzZXRGaWVsZChE
ZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmllbGQsIE9iamVjdCB2YWx1ZSkgewotICAgICAg
ZXh0ZW5zaW9ucy5zZXRGaWVsZChmaWVsZCwgdmFsdWUpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1lcmdlVGFyZ2V0IGNsZWFyRmllbGQo
RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICBleHRlbnNpb25zLmNs
ZWFyRmllbGQoZmllbGQpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIE1lcmdlVGFyZ2V0IHNldFJlcGVhdGVkRmllbGQoCi0gICAgICAgIERl
c2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCwgaW50IGluZGV4LCBPYmplY3QgdmFsdWUp
IHsKLSAgICAgIGV4dGVuc2lvbnMuc2V0UmVwZWF0ZWRGaWVsZChmaWVsZCwgaW5kZXgsIHZhbHVl
KTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBNZXJnZVRhcmdldCBhZGRSZXBlYXRlZEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRv
ciBmaWVsZCwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICBleHRlbnNpb25zLmFkZFJlcGVhdGVkRmll
bGQoZmllbGQsIHZhbHVlKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBib29sZWFuIGhhc09uZW9mKERlc2NyaXB0b3JzLk9uZW9mRGVzY3Jp
cHRvciBvbmVvZikgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBNZXJnZVRhcmdldCBjbGVhck9uZW9mKERlc2NyaXB0b3JzLk9uZW9mRGVz
Y3JpcHRvciBvbmVvZikgewotICAgICAgLy8gTm90aGluZyB0byBjbGVhci4KLSAgICAgIHJldHVy
biB0aGlzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEZXNjcmlwdG9ycy5G
aWVsZERlc2NyaXB0b3IgZ2V0T25lb2ZGaWVsZERlc2NyaXB0b3IoRGVzY3JpcHRvcnMuT25lb2ZE
ZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgQ29udGFpbmVyVHlwZSBnZXRDb250YWluZXJUeXBlKCkgewotICAg
ICAgcmV0dXJuIENvbnRhaW5lclR5cGUuRVhURU5TSU9OX1NFVDsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgRXh0ZW5zaW9uUmVnaXN0cnkuRXh0ZW5zaW9uSW5mbyBmaW5kRXh0
ZW5zaW9uQnlOYW1lKAotICAgICAgICBFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSwgU3RyaW5n
IG5hbWUpIHsKLSAgICAgIHJldHVybiByZWdpc3RyeS5maW5kSW1tdXRhYmxlRXh0ZW5zaW9uQnlO
YW1lKG5hbWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBFeHRlbnNpb25S
ZWdpc3RyeS5FeHRlbnNpb25JbmZvIGZpbmRFeHRlbnNpb25CeU51bWJlcigKLSAgICAgICAgRXh0
ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnksIERlc2NyaXB0b3JzLkRlc2NyaXB0b3IgY29udGFpbmlu
Z1R5cGUsIGludCBmaWVsZE51bWJlcikgewotICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmZpbmRJbW11
dGFibGVFeHRlbnNpb25CeU51bWJlcihjb250YWluaW5nVHlwZSwKLSAgICAgICAgICBmaWVsZE51
bWJlcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBwYXJzZUdy
b3VwKAotICAgICAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0LAotICAgICAgICBFeHRlbnNpb25S
ZWdpc3RyeUxpdGUgcmVnaXN0cnksCi0gICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRv
ciBmaWVsZCwKLSAgICAgICAgTWVzc2FnZSBkZWZhdWx0SW5zdGFuY2UpCi0gICAgICAgIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBNZXNzYWdlLkJ1aWxkZXIgc3ViQnVpbGRlciA9Ci0gICAg
ICAgICAgZGVmYXVsdEluc3RhbmNlLm5ld0J1aWxkZXJGb3JUeXBlKCk7Ci0gICAgICBpZiAoIWZp
ZWxkLmlzUmVwZWF0ZWQoKSkgewotICAgICAgICBNZXNzYWdlIG9yaWdpbmFsTWVzc2FnZSA9IChN
ZXNzYWdlKSBnZXRGaWVsZChmaWVsZCk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE1lc3NhZ2UgIT0g
bnVsbCkgewotICAgICAgICAgIHN1YkJ1aWxkZXIubWVyZ2VGcm9tKG9yaWdpbmFsTWVzc2FnZSk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlucHV0LnJlYWRHcm91cChmaWVsZC5nZXROdW1i
ZXIoKSwgc3ViQnVpbGRlciwgcmVnaXN0cnkpOwotICAgICAgcmV0dXJuIHN1YkJ1aWxkZXIuYnVp
bGRQYXJ0aWFsKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBw
YXJzZU1lc3NhZ2UoCi0gICAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQsCi0gICAgICAgIEV4
dGVuc2lvblJlZ2lzdHJ5TGl0ZSByZWdpc3RyeSwKLSAgICAgICAgRGVzY3JpcHRvcnMuRmllbGRE
ZXNjcmlwdG9yIGZpZWxkLAotICAgICAgICBNZXNzYWdlIGRlZmF1bHRJbnN0YW5jZSkKLSAgICAg
ICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIE1lc3NhZ2UuQnVpbGRlciBzdWJCdWlsZGVy
ID0KLSAgICAgICAgICBkZWZhdWx0SW5zdGFuY2UubmV3QnVpbGRlckZvclR5cGUoKTsKLSAgICAg
IGlmICghZmllbGQuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICAgIE1lc3NhZ2Ugb3JpZ2luYWxNZXNz
YWdlID0gKE1lc3NhZ2UpIGdldEZpZWxkKGZpZWxkKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTWVz
c2FnZSAhPSBudWxsKSB7Ci0gICAgICAgICAgc3ViQnVpbGRlci5tZXJnZUZyb20ob3JpZ2luYWxN
ZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaW5wdXQucmVhZE1lc3NhZ2Uoc3Vi
QnVpbGRlciwgcmVnaXN0cnkpOwotICAgICAgcmV0dXJuIHN1YkJ1aWxkZXIuYnVpbGRQYXJ0aWFs
KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBwYXJzZU1lc3Nh
Z2VGcm9tQnl0ZXMoCi0gICAgICAgIEJ5dGVTdHJpbmcgYnl0ZXMsCi0gICAgICAgIEV4dGVuc2lv
blJlZ2lzdHJ5TGl0ZSByZWdpc3RyeSwKLSAgICAgICAgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlw
dG9yIGZpZWxkLAotICAgICAgICBNZXNzYWdlIGRlZmF1bHRJbnN0YW5jZSkKLSAgICAgICAgdGhy
b3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIE1lc3NhZ2UuQnVpbGRlciBzdWJCdWlsZGVyID0gIGRl
ZmF1bHRJbnN0YW5jZS5uZXdCdWlsZGVyRm9yVHlwZSgpOwotICAgICAgaWYgKCFmaWVsZC5pc1Jl
cGVhdGVkKCkpIHsKLSAgICAgICAgTWVzc2FnZSBvcmlnaW5hbE1lc3NhZ2UgPSAoTWVzc2FnZSkg
Z2V0RmllbGQoZmllbGQpOwotICAgICAgICBpZiAob3JpZ2luYWxNZXNzYWdlICE9IG51bGwpIHsK
LSAgICAgICAgICBzdWJCdWlsZGVyLm1lcmdlRnJvbShvcmlnaW5hbE1lc3NhZ2UpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICBzdWJCdWlsZGVyLm1lcmdlRnJvbShieXRlcywgcmVnaXN0cnkp
OwotICAgICAgcmV0dXJuIHN1YkJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIE1lcmdlVGFyZ2V0IG5ld01lcmdlVGFyZ2V0Rm9yRmllbGQo
Ci0gICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBNZXNzYWdl
IGRlZmF1bHRJbnN0YW5jZSkgewotICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9u
RXhjZXB0aW9uKAotICAgICAgICAgICJuZXdNZXJnZVRhcmdldEZvckZpZWxkKCkgY2FsbGVkIG9u
IEZpZWxkU2V0IG9iamVjdCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBX
aXJlRm9ybWF0LlV0ZjhWYWxpZGF0aW9uIGdldFV0ZjhWYWxpZGF0aW9uKERlc2NyaXB0b3JzLkZp
ZWxkRGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7Ci0gICAgICBpZiAoZGVzY3JpcHRvci5uZWVkc1V0
ZjhDaGVjaygpKSB7Ci0gICAgICAgIHJldHVybiBXaXJlRm9ybWF0LlV0ZjhWYWxpZGF0aW9uLlNU
UklDVDsKLSAgICAgIH0KLSAgICAgIC8vIFRPRE8obGl1amlzaSk6IHN1cHBvcnQgbGF6eSBzdHJp
bmdzIGZvciBFeHRlc25zaW9uU2V0LgotICAgICAgcmV0dXJuIFdpcmVGb3JtYXQuVXRmOFZhbGlk
YXRpb24uTE9PU0U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBm
aW5pc2goKSB7Ci0gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24o
Ci0gICAgICAgICAgImZpbmlzaCgpIGNhbGxlZCBvbiBGaWVsZFNldCBvYmplY3QiKTsKLSAgICB9
Ci0gICAgCi0gIH0KLQotICAvKioKLSAgICogUGFyc2VzIGEgc2luZ2xlIGZpZWxkIGludG8gTWVy
Z2VUYXJnZXQuIFRoZSB0YXJnZXQgY2FuIGJlIE1lc3NhZ2UuQnVpbGRlciwKLSAgICogRmllbGRT
ZXQgb3IgTXV0YWJsZU1lc3NhZ2UuCi0gICAqCi0gICAqIFBhY2thZ2UtcHJpdmF0ZSBiZWNhdXNl
IGl0IGlzIHVzZWQgYnkgR2VuZXJhdGVkTWVzc2FnZS5FeHRlbmRhYmxlTWVzc2FnZS4KLSAgICoK
LSAgICogQHBhcmFtIHRhZyBUaGUgdGFnLCB3aGljaCBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4g
cmVhZC4KLSAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gdW5sZXNzIHRoZSB0YWcgaXMgYW4gZW5k
LWdyb3VwIHRhZy4KLSAgICovCi0gIHN0YXRpYyBib29sZWFuIG1lcmdlRmllbGRGcm9tKAotICAg
ICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwKLSAgICAgIFVua25vd25GaWVsZFNldC5CdWlsZGVy
IHVua25vd25GaWVsZHMsCi0gICAgICBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVn
aXN0cnksCi0gICAgICBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIHR5cGUsCi0gICAgICBNZXJnZVRh
cmdldCB0YXJnZXQsCi0gICAgICBpbnQgdGFnKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGlm
ICh0eXBlLmdldE9wdGlvbnMoKS5nZXRNZXNzYWdlU2V0V2lyZUZvcm1hdCgpICYmCi0gICAgICAg
IHRhZyA9PSBXaXJlRm9ybWF0Lk1FU1NBR0VfU0VUX0lURU1fVEFHKSB7Ci0gICAgICBtZXJnZU1l
c3NhZ2VTZXRFeHRlbnNpb25Gcm9tQ29kZWRTdHJlYW0oCi0gICAgICAgICAgaW5wdXQsIHVua25v
d25GaWVsZHMsIGV4dGVuc2lvblJlZ2lzdHJ5LCB0eXBlLCB0YXJnZXQpOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgZmluYWwgaW50IHdpcmVUeXBlID0gV2lyZUZvcm1hdC5nZXRU
YWdXaXJlVHlwZSh0YWcpOwotICAgIGZpbmFsIGludCBmaWVsZE51bWJlciA9IFdpcmVGb3JtYXQu
Z2V0VGFnRmllbGROdW1iZXIodGFnKTsKLQotICAgIGZpbmFsIERlc2NyaXB0b3JzLkZpZWxkRGVz
Y3JpcHRvciBmaWVsZDsKLSAgICBNZXNzYWdlIGRlZmF1bHRJbnN0YW5jZSA9IG51bGw7Ci0KLSAg
ICBpZiAodHlwZS5pc0V4dGVuc2lvbk51bWJlcihmaWVsZE51bWJlcikpIHsKLSAgICAgIC8vIGV4
dGVuc2lvblJlZ2lzdHJ5IG1heSBiZSBlaXRoZXIgRXh0ZW5zaW9uUmVnaXN0cnkgb3IKLSAgICAg
IC8vIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZS4gIFNpbmNlIHRoZSB0eXBlIHdlIGFyZSBwYXJzaW5n
IGlzIGEgZnVsbAotICAgICAgLy8gbWVzc2FnZSwgb25seSBhIGZ1bGwgRXh0ZW5zaW9uUmVnaXN0
cnkgY291bGQgcG9zc2libHkgY29udGFpbgotICAgICAgLy8gZXh0ZW5zaW9ucyBvZiBpdC4gIE90
aGVyd2lzZSB3ZSB3aWxsIHRyZWF0IHRoZSByZWdpc3RyeSBhcyBpZiBpdAotICAgICAgLy8gd2Vy
ZSBlbXB0eS4KLSAgICAgIGlmIChleHRlbnNpb25SZWdpc3RyeSBpbnN0YW5jZW9mIEV4dGVuc2lv
blJlZ2lzdHJ5KSB7Ci0gICAgICAgIGZpbmFsIEV4dGVuc2lvblJlZ2lzdHJ5LkV4dGVuc2lvbklu
Zm8gZXh0ZW5zaW9uID0KLSAgICAgICAgICAgIHRhcmdldC5maW5kRXh0ZW5zaW9uQnlOdW1iZXIo
KEV4dGVuc2lvblJlZ2lzdHJ5KSBleHRlbnNpb25SZWdpc3RyeSwKLSAgICAgICAgICAgICAgICB0
eXBlLCBmaWVsZE51bWJlcik7Ci0gICAgICAgIGlmIChleHRlbnNpb24gPT0gbnVsbCkgewotICAg
ICAgICAgIGZpZWxkID0gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmaWVsZCA9
IGV4dGVuc2lvbi5kZXNjcmlwdG9yOwotICAgICAgICAgIGRlZmF1bHRJbnN0YW5jZSA9IGV4dGVu
c2lvbi5kZWZhdWx0SW5zdGFuY2U7Ci0gICAgICAgICAgaWYgKGRlZmF1bHRJbnN0YW5jZSA9PSBu
dWxsICYmCi0gICAgICAgICAgICAgIGZpZWxkLmdldEphdmFUeXBlKCkKLSAgICAgICAgICAgICAg
ICAgID09IERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvci5KYXZhVHlwZS5NRVNTQUdFKSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAg
ICAgICJNZXNzYWdlLXR5cGVkIGV4dGVuc2lvbiBsYWNrZWQgZGVmYXVsdCBpbnN0YW5jZTogIiAr
Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkLmdldEZ1bGxOYW1lKCkpOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmllbGQgPSBudWxsOwotICAgICAg
fQotICAgIH0gZWxzZSBpZiAodGFyZ2V0LmdldENvbnRhaW5lclR5cGUoKSA9PSBNZXJnZVRhcmdl
dC5Db250YWluZXJUeXBlLk1FU1NBR0UpIHsKLSAgICAgIGZpZWxkID0gdHlwZS5maW5kRmllbGRC
eU51bWJlcihmaWVsZE51bWJlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZpZWxkID0gbnVsbDsK
LSAgICB9Ci0KLSAgICBib29sZWFuIHVua25vd24gPSBmYWxzZTsKLSAgICBib29sZWFuIHBhY2tl
ZCA9IGZhbHNlOwotICAgIGlmIChmaWVsZCA9PSBudWxsKSB7Ci0gICAgICB1bmtub3duID0gdHJ1
ZTsgIC8vIFVua25vd24gZmllbGQuCi0gICAgfSBlbHNlIGlmICh3aXJlVHlwZSA9PSBGaWVsZFNl
dC5nZXRXaXJlRm9ybWF0Rm9yRmllbGRUeXBlKAotICAgICAgICBmaWVsZC5nZXRMaXRlVHlwZSgp
LAotICAgICAgICBmYWxzZSAgLyogaXNQYWNrZWQgKi8pKSB7Ci0gICAgICBwYWNrZWQgPSBmYWxz
ZTsKLSAgICB9IGVsc2UgaWYgKGZpZWxkLmlzUGFja2FibGUoKSAmJgotICAgICAgICB3aXJlVHlw
ZSA9PSBGaWVsZFNldC5nZXRXaXJlRm9ybWF0Rm9yRmllbGRUeXBlKAotICAgICAgICAgICAgZmll
bGQuZ2V0TGl0ZVR5cGUoKSwKLSAgICAgICAgICAgIHRydWUgIC8qIGlzUGFja2VkICovKSkgewot
ICAgICAgcGFja2VkID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgdW5rbm93biA9IHRydWU7
ICAvLyBVbmtub3duIHdpcmUgdHlwZS4KLSAgICB9Ci0KLSAgICBpZiAodW5rbm93bikgeyAgLy8g
VW5rbm93biBmaWVsZCBvciB3cm9uZyB3aXJlIHR5cGUuICBTa2lwLgotICAgICAgcmV0dXJuIHVu
a25vd25GaWVsZHMubWVyZ2VGaWVsZEZyb20odGFnLCBpbnB1dCk7Ci0gICAgfQotCi0gICAgaWYg
KHBhY2tlZCkgewotICAgICAgZmluYWwgaW50IGxlbmd0aCA9IGlucHV0LnJlYWRSYXdWYXJpbnQz
MigpOwotICAgICAgZmluYWwgaW50IGxpbWl0ID0gaW5wdXQucHVzaExpbWl0KGxlbmd0aCk7Ci0g
ICAgICBpZiAoZmllbGQuZ2V0TGl0ZVR5cGUoKSA9PSBXaXJlRm9ybWF0LkZpZWxkVHlwZS5FTlVN
KSB7Ci0gICAgICAgIHdoaWxlIChpbnB1dC5nZXRCeXRlc1VudGlsTGltaXQoKSA+IDApIHsKLSAg
ICAgICAgICBmaW5hbCBpbnQgcmF3VmFsdWUgPSBpbnB1dC5yZWFkRW51bSgpOwotICAgICAgICAg
IGlmIChmaWVsZC5nZXRGaWxlKCkuc3VwcG9ydHNVbmtub3duRW51bVZhbHVlKCkpIHsKLSAgICAg
ICAgICAgIHRhcmdldC5hZGRSZXBlYXRlZEZpZWxkKGZpZWxkLAotICAgICAgICAgICAgICAgIGZp
ZWxkLmdldEVudW1UeXBlKCkuZmluZFZhbHVlQnlOdW1iZXJDcmVhdGluZ0lmVW5rbm93bihyYXdW
YWx1ZSkpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmaW5hbCBPYmplY3QgdmFs
dWUgPSBmaWVsZC5nZXRFbnVtVHlwZSgpLmZpbmRWYWx1ZUJ5TnVtYmVyKHJhd1ZhbHVlKTsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIC8vIElmIHRoZSBu
dW1iZXIgaXNuJ3QgcmVjb2duaXplZCBhcyBhIHZhbGlkIHZhbHVlIGZvciB0aGlzCi0gICAgICAg
ICAgICAgIC8vIGVudW0sIGRyb3AgaXQgKGRvbid0IGV2ZW4gYWRkIGl0IHRvIHVua25vd25GaWVs
ZHMpLgotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHRhcmdldC5hZGRSZXBlYXRlZEZpZWxkKGZpZWxkLCB2YWx1ZSk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAoaW5wdXQuZ2V0Qnl0ZXNV
bnRpbExpbWl0KCkgPiAwKSB7Ci0gICAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlID0gV2lyZUZv
cm1hdC5yZWFkUHJpbWl0aXZlRmllbGQoCi0gICAgICAgICAgICAgIGlucHV0LCBmaWVsZC5nZXRM
aXRlVHlwZSgpLCB0YXJnZXQuZ2V0VXRmOFZhbGlkYXRpb24oZmllbGQpKTsKLSAgICAgICAgICB0
YXJnZXQuYWRkUmVwZWF0ZWRGaWVsZChmaWVsZCwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICBpbnB1dC5wb3BMaW1pdChsaW1pdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZpbmFs
IE9iamVjdCB2YWx1ZTsKLSAgICAgIHN3aXRjaCAoZmllbGQuZ2V0VHlwZSgpKSB7Ci0gICAgICAg
IGNhc2UgR1JPVVA6IHsKLSAgICAgICAgICB2YWx1ZSA9IHRhcmdldAotICAgICAgICAgICAgICAu
cGFyc2VHcm91cChpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnksIGZpZWxkLCBkZWZhdWx0SW5zdGFu
Y2UpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTUVTU0FHRTog
ewotICAgICAgICAgIHZhbHVlID0gdGFyZ2V0Ci0gICAgICAgICAgICAgIC5wYXJzZU1lc3NhZ2Uo
aW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5LCBmaWVsZCwgZGVmYXVsdEluc3RhbmNlKTsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVOVU06Ci0gICAgICAgICAgZmlu
YWwgaW50IHJhd1ZhbHVlID0gaW5wdXQucmVhZEVudW0oKTsKLSAgICAgICAgICBpZiAoZmllbGQu
Z2V0RmlsZSgpLnN1cHBvcnRzVW5rbm93bkVudW1WYWx1ZSgpKSB7Ci0gICAgICAgICAgICB2YWx1
ZSA9IGZpZWxkLmdldEVudW1UeXBlKCkuZmluZFZhbHVlQnlOdW1iZXJDcmVhdGluZ0lmVW5rbm93
bihyYXdWYWx1ZSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhbHVlID0gZmll
bGQuZ2V0RW51bVR5cGUoKS5maW5kVmFsdWVCeU51bWJlcihyYXdWYWx1ZSk7Ci0gICAgICAgICAg
ICAvLyBJZiB0aGUgbnVtYmVyIGlzbid0IHJlY29nbml6ZWQgYXMgYSB2YWxpZCB2YWx1ZSBmb3Ig
dGhpcyBlbnVtLAotICAgICAgICAgICAgLy8gZHJvcCBpdC4KLSAgICAgICAgICAgIGlmICh2YWx1
ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIHVua25vd25GaWVsZHMubWVyZ2VWYXJpbnRGaWVs
ZChmaWVsZE51bWJlciwgcmF3VmFsdWUpOwotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgdmFsdWUgPSBXaXJlRm9ybWF0LnJlYWRQcmltaXRpdmVGaWVsZCgKLSAg
ICAgICAgICAgICAgaW5wdXQsIGZpZWxkLmdldExpdGVUeXBlKCksIHRhcmdldC5nZXRVdGY4VmFs
aWRhdGlvbihmaWVsZCkpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZiAo
ZmllbGQuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICAgIHRhcmdldC5hZGRSZXBlYXRlZEZpZWxkKGZp
ZWxkLCB2YWx1ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0YXJnZXQuc2V0RmllbGQoZmll
bGQsIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IC8qKgotICAgKiBDYWxsZWQgYnkge0Bjb2RlICNtZXJnZUZpZWxkRnJvbSgpfSB0byBwYXJzZSBh
IE1lc3NhZ2VTZXQgZXh0ZW5zaW9uIGludG8KLSAgICogTWVyZ2VUYXJnZXQuCi0gICAqLwotICBw
cml2YXRlIHN0YXRpYyB2b2lkIG1lcmdlTWVzc2FnZVNldEV4dGVuc2lvbkZyb21Db2RlZFN0cmVh
bSgKLSAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQsCi0gICAgICBVbmtub3duRmllbGRTZXQu
QnVpbGRlciB1bmtub3duRmllbGRzLAotICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVu
c2lvblJlZ2lzdHJ5LAotICAgICAgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciB0eXBlLAotICAgICAg
TWVyZ2VUYXJnZXQgdGFyZ2V0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0gICAgLy8gVGhlIHdp
cmUgZm9ybWF0IGZvciBNZXNzYWdlU2V0IGlzOgotICAgIC8vICAgbWVzc2FnZSBNZXNzYWdlU2V0
IHsKLSAgICAvLyAgICAgcmVwZWF0ZWQgZ3JvdXAgSXRlbSA9IDEgewotICAgIC8vICAgICAgIHJl
cXVpcmVkIGludDMyIHR5cGVJZCA9IDI7Ci0gICAgLy8gICAgICAgcmVxdWlyZWQgYnl0ZXMgbWVz
c2FnZSA9IDM7Ci0gICAgLy8gICAgIH0KLSAgICAvLyAgIH0KLSAgICAvLyAidHlwZUlkIiBpcyB0
aGUgZXh0ZW5zaW9uJ3MgZmllbGQgbnVtYmVyLiAgVGhlIGV4dGVuc2lvbiBjYW4gb25seSBiZQot
ICAgIC8vIGEgbWVzc2FnZSB0eXBlLCB3aGVyZSAibWVzc2FnZSIgY29udGFpbnMgdGhlIGVuY29k
ZWQgYnl0ZXMgb2YgdGhhdAotICAgIC8vIG1lc3NhZ2UuCi0gICAgLy8KLSAgICAvLyBJbiBwcmFj
dGljZSwgd2Ugd2lsbCBwcm9iYWJseSBuZXZlciBzZWUgYSBNZXNzYWdlU2V0IGl0ZW0gaW4gd2hp
Y2gKLSAgICAvLyB0aGUgbWVzc2FnZSBhcHBlYXJzIGJlZm9yZSB0aGUgdHlwZSBJRCwgb3Igd2hl
cmUgZWl0aGVyIGZpZWxkIGRvZXMgbm90Ci0gICAgLy8gYXBwZWFyIGV4YWN0bHkgb25jZS4gIEhv
d2V2ZXIsIGluIHRoZW9yeSBzdWNoIGNhc2VzIGFyZSB2YWxpZCwgc28gd2UKLSAgICAvLyBzaG91
bGQgYmUgcHJlcGFyZWQgdG8gYWNjZXB0IHRoZW0uCi0KLSAgICBpbnQgdHlwZUlkID0gMDsKLSAg
ICBCeXRlU3RyaW5nIHJhd0J5dGVzID0gbnVsbDsgLy8gSWYgd2UgZW5jb3VudGVyICJtZXNzYWdl
IiBiZWZvcmUgInR5cGVJZCIKLSAgICBFeHRlbnNpb25SZWdpc3RyeS5FeHRlbnNpb25JbmZvIGV4
dGVuc2lvbiA9IG51bGw7Ci0KLSAgICAvLyBSZWFkIGJ5dGVzIGZyb20gaW5wdXQsIGlmIHdlIGdl
dCBpdCdzIHR5cGUgZmlyc3QgdGhlbiBwYXJzZSBpdCBlYWdlcmx5LAotICAgIC8vIG90aGVyd2lz
ZSB3ZSBzdG9yZSB0aGUgcmF3IGJ5dGVzIGluIGEgbG9jYWwgdmFyaWFibGUuCi0gICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgIGZpbmFsIGludCB0YWcgPSBpbnB1dC5yZWFkVGFnKCk7Ci0gICAgICBp
ZiAodGFnID09IDApIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0YWcg
PT0gV2lyZUZvcm1hdC5NRVNTQUdFX1NFVF9UWVBFX0lEX1RBRykgewotICAgICAgICB0eXBlSWQg
PSBpbnB1dC5yZWFkVUludDMyKCk7Ci0gICAgICAgIGlmICh0eXBlSWQgIT0gMCkgewotICAgICAg
ICAgIC8vIGV4dGVuc2lvblJlZ2lzdHJ5IG1heSBiZSBlaXRoZXIgRXh0ZW5zaW9uUmVnaXN0cnkg
b3IKLSAgICAgICAgICAvLyBFeHRlbnNpb25SZWdpc3RyeUxpdGUuIFNpbmNlIHRoZSB0eXBlIHdl
IGFyZSBwYXJzaW5nIGlzIGEgZnVsbAotICAgICAgICAgIC8vIG1lc3NhZ2UsIG9ubHkgYSBmdWxs
IEV4dGVuc2lvblJlZ2lzdHJ5IGNvdWxkIHBvc3NpYmx5IGNvbnRhaW4KLSAgICAgICAgICAvLyBl
eHRlbnNpb25zIG9mIGl0LiBPdGhlcndpc2Ugd2Ugd2lsbCB0cmVhdCB0aGUgcmVnaXN0cnkgYXMg
aWYgaXQKLSAgICAgICAgICAvLyB3ZXJlIGVtcHR5LgotICAgICAgICAgIGlmIChleHRlbnNpb25S
ZWdpc3RyeSBpbnN0YW5jZW9mIEV4dGVuc2lvblJlZ2lzdHJ5KSB7Ci0gICAgICAgICAgICBleHRl
bnNpb24gPSB0YXJnZXQuZmluZEV4dGVuc2lvbkJ5TnVtYmVyKAotICAgICAgICAgICAgICAgIChF
eHRlbnNpb25SZWdpc3RyeSkgZXh0ZW5zaW9uUmVnaXN0cnksIHR5cGUsIHR5cGVJZCk7Ci0gICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIH0gZWxzZSBpZiAodGFnID09IFdpcmVGb3JtYXQu
TUVTU0FHRV9TRVRfTUVTU0FHRV9UQUcpIHsKLSAgICAgICAgaWYgKHR5cGVJZCAhPSAwKSB7Ci0g
ICAgICAgICAgaWYgKGV4dGVuc2lvbiAhPSBudWxsICYmCi0gICAgICAgICAgICAgIEV4dGVuc2lv
blJlZ2lzdHJ5TGl0ZS5pc0VhZ2VybHlQYXJzZU1lc3NhZ2VTZXRzKCkpIHsKLSAgICAgICAgICAg
IC8vIFdlIGFscmVhZHkga25vdyB0aGUgdHlwZSwgc28gd2UgY2FuIHBhcnNlIGRpcmVjdGx5IGZy
b20gdGhlCi0gICAgICAgICAgICAvLyBpbnB1dCB3aXRoIG5vIGNvcHlpbmcuICBIb29yYXkhCi0g
ICAgICAgICAgICBlYWdlcmx5TWVyZ2VNZXNzYWdlU2V0RXh0ZW5zaW9uKAotICAgICAgICAgICAg
ICAgIGlucHV0LCBleHRlbnNpb24sIGV4dGVuc2lvblJlZ2lzdHJ5LCB0YXJnZXQpOwotICAgICAg
ICAgICAgcmF3Qnl0ZXMgPSBudWxsOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGhhdmVuJ3Qgc2VlbiBhIHR5cGUgSUQgeWV0IG9y
IHdlIHdhbnQgcGFyc2UgbWVzc2FnZSBsYXppbHkuCi0gICAgICAgIHJhd0J5dGVzID0gaW5wdXQu
cmVhZEJ5dGVzKCk7Ci0KLSAgICAgIH0gZWxzZSB7IC8vIFVua25vd24gdGFnLiBTa2lwIGl0Lgot
ICAgICAgICBpZiAoIWlucHV0LnNraXBGaWVsZCh0YWcpKSB7Ci0gICAgICAgICAgYnJlYWs7IC8v
IEVuZCBvZiBncm91cAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlucHV0LmNoZWNr
TGFzdFRhZ1dhcyhXaXJlRm9ybWF0Lk1FU1NBR0VfU0VUX0lURU1fRU5EX1RBRyk7Ci0KLSAgICAv
LyBQcm9jZXNzIHRoZSByYXcgYnl0ZXMuCi0gICAgaWYgKHJhd0J5dGVzICE9IG51bGwgJiYgdHlw
ZUlkICE9IDApIHsgLy8gWmVybyBpcyBub3QgYSB2YWxpZCB0eXBlIElELgotICAgICAgaWYgKGV4
dGVuc2lvbiAhPSBudWxsKSB7IC8vIFdlIGtub3duIHRoZSB0eXBlCi0gICAgICAgIG1lcmdlTWVz
c2FnZVNldEV4dGVuc2lvbkZyb21CeXRlcygKLSAgICAgICAgICAgIHJhd0J5dGVzLCBleHRlbnNp
b24sIGV4dGVuc2lvblJlZ2lzdHJ5LCB0YXJnZXQpOwotICAgICAgfSBlbHNlIHsgLy8gV2UgZG9u
J3Qga25vdyBob3cgdG8gcGFyc2UgdGhpcy4gSWdub3JlIGl0LgotICAgICAgICBpZiAocmF3Qnl0
ZXMgIT0gbnVsbCkgewotICAgICAgICAgIHVua25vd25GaWVsZHMubWVyZ2VGaWVsZCh0eXBlSWQs
IFVua25vd25GaWVsZFNldC5GaWVsZC5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgICAgLmFkZExl
bmd0aERlbGltaXRlZChyYXdCeXRlcykuYnVpbGQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIG1lcmdlTWVzc2FnZVNldEV4dGVuc2lv
bkZyb21CeXRlcygKLSAgICAgIEJ5dGVTdHJpbmcgcmF3Qnl0ZXMsCi0gICAgICBFeHRlbnNpb25S
ZWdpc3RyeS5FeHRlbnNpb25JbmZvIGV4dGVuc2lvbiwKLSAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5
TGl0ZSBleHRlbnNpb25SZWdpc3RyeSwKLSAgICAgIE1lcmdlVGFyZ2V0IHRhcmdldCkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLQotICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCA9
IGV4dGVuc2lvbi5kZXNjcmlwdG9yOwotICAgIGJvb2xlYW4gaGFzT3JpZ2luYWxWYWx1ZSA9IHRh
cmdldC5oYXNGaWVsZChmaWVsZCk7Ci0KLSAgICBpZiAoaGFzT3JpZ2luYWxWYWx1ZSB8fCBFeHRl
bnNpb25SZWdpc3RyeUxpdGUuaXNFYWdlcmx5UGFyc2VNZXNzYWdlU2V0cygpKSB7Ci0gICAgICAv
LyBJZiB0aGUgZmllbGQgYWxyZWFkeSBleGlzdHMsIHdlIGp1c3QgcGFyc2UgdGhlIGZpZWxkLgot
ICAgICAgT2JqZWN0IHZhbHVlID0gdGFyZ2V0LnBhcnNlTWVzc2FnZUZyb21CeXRlcygKLSAgICAg
ICAgICByYXdCeXRlcywgZXh0ZW5zaW9uUmVnaXN0cnksZmllbGQsIGV4dGVuc2lvbi5kZWZhdWx0
SW5zdGFuY2UpOwotICAgICAgdGFyZ2V0LnNldEZpZWxkKGZpZWxkLCB2YWx1ZSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIC8vIFVzZSBMYXp5RmllbGQgdG8gbG9hZCBNZXNzYWdlU2V0IGxhemlseS4K
LSAgICAgIExhenlGaWVsZCBsYXp5RmllbGQgPSBuZXcgTGF6eUZpZWxkKAotICAgICAgICAgIGV4
dGVuc2lvbi5kZWZhdWx0SW5zdGFuY2UsIGV4dGVuc2lvblJlZ2lzdHJ5LCByYXdCeXRlcyk7Ci0g
ICAgICB0YXJnZXQuc2V0RmllbGQoZmllbGQsIGxhenlGaWVsZCk7Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgdm9pZCBlYWdlcmx5TWVyZ2VNZXNzYWdlU2V0RXh0ZW5zaW9uKAotICAg
ICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwKLSAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5LkV4dGVu
c2lvbkluZm8gZXh0ZW5zaW9uLAotICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lv
blJlZ2lzdHJ5LAotICAgICAgTWVyZ2VUYXJnZXQgdGFyZ2V0KSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCA9IGV4dGVuc2lvbi5kZXNj
cmlwdG9yOwotICAgIE9iamVjdCB2YWx1ZSA9IHRhcmdldC5wYXJzZU1lc3NhZ2UoaW5wdXQsIGV4
dGVuc2lvblJlZ2lzdHJ5LCBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4dGVuc2lvbi5kZWZhdWx0SW5zdGFuY2UpOwotICAgIHRhcmdldC5zZXRGaWVsZChm
aWVsZCwgdmFsdWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZh
L2NvbS9nb29nbGUvcHJvdG9idWYvTXV0YWJpbGl0eU9yYWNsZS5qYXZhIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL011dGFiaWxpdHlPcmFjbGUuamF2YQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJiNzIzYzk1ZGY2MDJlOWFiMmU0MDNlMTE0MWZj
ZTZlYmIwMWI2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTXV0YWJpbGl0eU9y
YWNsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotLyoq
Ci0gKiBWZXJpZmllcyB0aGF0IGFuIG9iamVjdCBpcyBtdXRhYmxlLCB0aHJvd2luZyBpZiBub3Qu
Ci0gKi8KLWludGVyZmFjZSBNdXRhYmlsaXR5T3JhY2xlIHsKLSAgc3RhdGljIGZpbmFsIE11dGFi
aWxpdHlPcmFjbGUgSU1NVVRBQkxFID0gbmV3IE11dGFiaWxpdHlPcmFjbGUoKSB7Ci0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZW5zdXJlTXV0YWJsZSgpIHsKLSAgICAgIHRocm93IG5l
dyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLSAgfTsKLQotICAvKioK
LSAgICogVGhyb3dzIGFuIHtAbGluayBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbn0gaWYg
bm90IG11dGFibGUuCi0gICAqLwotICB2b2lkIGVuc3VyZU11dGFibGUoKTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9OaW9CeXRlU3Ry
aW5nLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTmlv
Qnl0ZVN0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTYzYzdiMWE4
MWMzZDBjNGQzNTMwNmIzOTkzMjJhMTc5Yjk0OGEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9OaW9CeXRlU3RyaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2ds
ZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5p
by5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkludmFsaWRPYmplY3RFeGNlcHRpb247Ci1p
bXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0
cmVhbTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkJ5dGVP
cmRlcjsKLWltcG9ydCBqYXZhLm5pby5JbnZhbGlkTWFya0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZh
Lm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1w
b3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEEge0BsaW5rIEJ5dGVTdHJpbmd9IHRoYXQg
d3JhcHMgYXJvdW5kIGEge0BsaW5rIEJ5dGVCdWZmZXJ9LgotICovCi1maW5hbCBjbGFzcyBOaW9C
eXRlU3RyaW5nIGV4dGVuZHMgQnl0ZVN0cmluZy5MZWFmQnl0ZVN0cmluZyB7Ci0gIHByaXZhdGUg
ZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXI7Ci0KLSAgTmlvQnl0ZVN0cmluZyhCeXRlQnVmZmVyIGJ1
ZmZlcikgewotICAgIGlmIChidWZmZXIgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IE51bGxQ
b2ludGVyRXhjZXB0aW9uKCJidWZmZXIiKTsKLSAgICB9Ci0KLSAgICB0aGlzLmJ1ZmZlciA9IGJ1
ZmZlci5zbGljZSgpLm9yZGVyKEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKTsKLSAgfQotCi0gIC8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0gIC8vIFNlcmlhbGl6YWJsZQotCi0gIC8qKgotICAgKiBNYWdpYyBtZXRob2Qg
dGhhdCBsZXRzIHVzIG92ZXJyaWRlIHNlcmlhbGl6YXRpb24gYmVoYXZpb3IuCi0gICAqLwotICBw
cml2YXRlIE9iamVjdCB3cml0ZVJlcGxhY2UoKSB7Ci0gICAgcmV0dXJuIEJ5dGVTdHJpbmcuY29w
eUZyb20oYnVmZmVyLnNsaWNlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIE1hZ2ljIG1ldGhvZCB0
aGF0IGxldHMgdXMgb3ZlcnJpZGUgZGVzZXJpYWxpemF0aW9uIGJlaGF2aW9yLgotICAgKi8KLSAg
cHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVj
dElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHRocm93IG5ldyBJbnZh
bGlkT2JqZWN0RXhjZXB0aW9uKCJOaW9CeXRlU3RyaW5nIGluc3RhbmNlcyBhcmUgbm90IHRvIGJl
IHNlcmlhbGl6ZWQgZGlyZWN0bHkiKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBieXRlIGJ5dGVBdChpbnQgaW5kZXgpIHsKLSAgICB0cnkgewotICAgICAg
cmV0dXJuIGJ1ZmZlci5nZXQoaW5kZXgpOwotICAgIH0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJv
dW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvdyBlOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0
T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJv
dW5kc0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICByZXR1cm4gYnVmZmVyLnJlbWFpbmluZygpOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBCeXRlU3RyaW5nIHN1YnN0cmluZyhpbnQgYmVn
aW5JbmRleCwgaW50IGVuZEluZGV4KSB7Ci0gICAgdHJ5IHsKLSAgICAgIEJ5dGVCdWZmZXIgc2xp
Y2UgPSBzbGljZShiZWdpbkluZGV4LCBlbmRJbmRleCk7Ci0gICAgICByZXR1cm4gbmV3IE5pb0J5
dGVTdHJpbmcoc2xpY2UpOwotICAgIH0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2Vw
dGlvbiBlKSB7Ci0gICAgICB0aHJvdyBlOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNF
eGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2Vw
dGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3Rl
Y3RlZCB2b2lkIGNvcHlUb0ludGVybmFsKAotICAgICAgYnl0ZVtdIHRhcmdldCwgaW50IHNvdXJj
ZU9mZnNldCwgaW50IHRhcmdldE9mZnNldCwgaW50IG51bWJlclRvQ29weSkgewotICAgIEJ5dGVC
dWZmZXIgc2xpY2UgPSBidWZmZXIuc2xpY2UoKTsKLSAgICBzbGljZS5wb3NpdGlvbihzb3VyY2VP
ZmZzZXQpOwotICAgIHNsaWNlLmdldCh0YXJnZXQsIHRhcmdldE9mZnNldCwgbnVtYmVyVG9Db3B5
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjb3B5VG8oQnl0ZUJ1ZmZlciB0
YXJnZXQpIHsKLSAgICB0YXJnZXQucHV0KGJ1ZmZlci5zbGljZSgpKTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCB3cml0ZVRvKE91dHB1dFN0cmVhbSBvdXQpIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgb3V0LndyaXRlKHRvQnl0ZUFycmF5KCkpOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIGJvb2xlYW4gZXF1YWxzUmFuZ2UoQnl0ZVN0cmluZyBvdGhlciwgaW50IG9mZnNldCwg
aW50IGxlbmd0aCkgewotICAgIHJldHVybiBzdWJzdHJpbmcoMCwgbGVuZ3RoKS5lcXVhbHMob3Ro
ZXIuc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKSk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgdm9pZCB3cml0ZVRvSW50ZXJuYWwoT3V0cHV0U3RyZWFtIG91dCwgaW50IHNvdXJjZU9m
ZnNldCwgaW50IG51bWJlclRvV3JpdGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKGJ1
ZmZlci5oYXNBcnJheSgpKSB7Ci0gICAgICAvLyBPcHRpbWl6ZWQgd3JpdGUgZm9yIGFycmF5LWJh
Y2tlZCBidWZmZXJzLgotICAgICAgLy8gTm90ZSB0aGF0IHdlJ3JlIHRha2luZyB0aGUgcmlzayB0
aGF0IGEgbWFsaWNpb3VzIE91dHB1dFN0cmVhbSBjb3VsZCBtb2RpZnkgdGhlIGFycmF5LgotICAg
ICAgaW50IGJ1ZmZlck9mZnNldCA9IGJ1ZmZlci5hcnJheU9mZnNldCgpICsgYnVmZmVyLnBvc2l0
aW9uKCkgKyBzb3VyY2VPZmZzZXQ7Ci0gICAgICBvdXQud3JpdGUoYnVmZmVyLmFycmF5KCksIGJ1
ZmZlck9mZnNldCwgbnVtYmVyVG9Xcml0ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Qnl0ZUJ1ZmZlcldyaXRlci53cml0ZShzbGljZShzb3VyY2VPZmZzZXQsIHNvdXJjZU9mZnNldCAr
IG51bWJlclRvV3JpdGUpLCBvdXQpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHZvaWQgd3JpdGVU
byhCeXRlT3V0cHV0IG91dHB1dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBvdXRwdXQud3Jp
dGVMYXp5KGJ1ZmZlci5zbGljZSgpKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQnl0
ZUJ1ZmZlciBhc1JlYWRPbmx5Qnl0ZUJ1ZmZlcigpIHsKLSAgICByZXR1cm4gYnVmZmVyLmFzUmVh
ZE9ubHlCdWZmZXIoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgTGlzdDxCeXRlQnVm
ZmVyPiBhc1JlYWRPbmx5Qnl0ZUJ1ZmZlckxpc3QoKSB7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25z
LnNpbmdsZXRvbkxpc3QoYXNSZWFkT25seUJ5dGVCdWZmZXIoKSk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHJvdGVjdGVkIFN0cmluZyB0b1N0cmluZ0ludGVybmFsKENoYXJzZXQgY2hhcnNldCkg
ewotICAgIGZpbmFsIGJ5dGVbXSBieXRlczsKLSAgICBmaW5hbCBpbnQgb2Zmc2V0OwotICAgIGZp
bmFsIGludCBsZW5ndGg7Ci0gICAgaWYgKGJ1ZmZlci5oYXNBcnJheSgpKSB7Ci0gICAgICBieXRl
cyA9IGJ1ZmZlci5hcnJheSgpOwotICAgICAgb2Zmc2V0ID0gYnVmZmVyLmFycmF5T2Zmc2V0KCkg
KyBidWZmZXIucG9zaXRpb24oKTsKLSAgICAgIGxlbmd0aCA9IGJ1ZmZlci5yZW1haW5pbmcoKTsK
LSAgICB9IGVsc2UgewotICAgICAgLy8gVE9ETyhuYXRoYW5taXR0bGVyKTogQ2FuIHdlIG9wdGlt
aXplIHRoaXM/Ci0gICAgICBieXRlcyA9IHRvQnl0ZUFycmF5KCk7Ci0gICAgICBvZmZzZXQgPSAw
OwotICAgICAgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFN0
cmluZyhieXRlcywgb2Zmc2V0LCBsZW5ndGgsIGNoYXJzZXQpOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBib29sZWFuIGlzVmFsaWRVdGY4KCkgewotICAgIHJldHVybiBVdGY4LmlzVmFs
aWRVdGY4KGJ1ZmZlcik7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIGludCBwYXJ0
aWFsSXNWYWxpZFV0ZjgoaW50IHN0YXRlLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0gICAg
cmV0dXJuIFV0ZjgucGFydGlhbElzVmFsaWRVdGY4KHN0YXRlLCBidWZmZXIsIG9mZnNldCwgb2Zm
c2V0ICsgbGVuZ3RoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBlcXVh
bHMoT2JqZWN0IG90aGVyKSB7Ci0gICAgaWYgKG90aGVyID09IHRoaXMpIHsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEJ5dGVTdHJpbmcpKSB7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEJ5dGVTdHJpbmcgb3RoZXJTdHJpbmcg
PSAoKEJ5dGVTdHJpbmcpIG90aGVyKTsKLSAgICBpZiAoc2l6ZSgpICE9IG90aGVyU3RyaW5nLnNp
emUoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoc2l6ZSgpID09IDAp
IHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBO
aW9CeXRlU3RyaW5nKSB7Ci0gICAgICByZXR1cm4gYnVmZmVyLmVxdWFscygoKE5pb0J5dGVTdHJp
bmcpIG90aGVyKS5idWZmZXIpOwotICAgIH0KLSAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBSb3Bl
Qnl0ZVN0cmluZykgewotICAgICAgcmV0dXJuIG90aGVyLmVxdWFscyh0aGlzKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGJ1ZmZlci5lcXVhbHMob3RoZXJTdHJpbmcuYXNSZWFkT25seUJ5dGVCdWZmZXIo
KSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIGludCBwYXJ0aWFsSGFzaChpbnQg
aCwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotICAgIGZvciAoaW50IGkgPSBvZmZzZXQ7IGkg
PCBvZmZzZXQgKyBsZW5ndGg7IGkrKykgewotICAgICAgaCA9IGggKiAzMSArIGJ1ZmZlci5nZXQo
aSk7Ci0gICAgfQotICAgIHJldHVybiBoOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBJ
bnB1dFN0cmVhbSBuZXdJbnB1dCgpIHsKLSAgICByZXR1cm4gbmV3IElucHV0U3RyZWFtKCkgewot
ICAgICAgcHJpdmF0ZSBmaW5hbCBCeXRlQnVmZmVyIGJ1ZiA9IGJ1ZmZlci5zbGljZSgpOwotCi0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG1hcmsoaW50IHJlYWRsaW1pdCkgewot
ICAgICAgICBidWYubWFyaygpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBidWYucmVzZXQoKTsKLSAg
ICAgICAgfSBjYXRjaCAoSW52YWxpZE1hcmtFeGNlcHRpb24gZSkgewotICAgICAgICAgIHRocm93
IG5ldyBJT0V4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyBpbnQgYXZhaWxhYmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAg
ICAgICAgcmV0dXJuIGJ1Zi5yZW1haW5pbmcoKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBp
ZiAoIWJ1Zi5oYXNSZW1haW5pbmcoKSkgewotICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gYnVmLmdldCgpICYgMHhGRjsKLSAgICAgIH0KLQotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGJ5dGVzLCBpbnQgb2ZmLCBpbnQg
bGVuKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBpZiAoIWJ1Zi5oYXNSZW1haW5pbmco
KSkgewotICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIGxlbiA9IE1h
dGgubWluKGxlbiwgYnVmLnJlbWFpbmluZygpKTsKLSAgICAgICAgYnVmLmdldChieXRlcywgb2Zm
LCBsZW4pOwotICAgICAgICByZXR1cm4gbGVuOwotICAgICAgfQotICAgIH07Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIENvZGVkSW5wdXRTdHJlYW0gbmV3Q29kZWRJbnB1dCgpIHsKLSAg
ICByZXR1cm4gQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShidWZmZXIpOwotICB9Ci0KLSAg
LyoqCi0gICAqIENyZWF0ZXMgYSBzbGljZSBvZiBhIHJhbmdlIG9mIHRoaXMgYnVmZmVyLgotICAg
KgotICAgKiBAcGFyYW0gYmVnaW5JbmRleCB0aGUgYmVnaW5uaW5nIGluZGV4IG9mIHRoZSBzbGlj
ZSAoaW5jbHVzaXZlKS4KLSAgICogQHBhcmFtIGVuZEluZGV4IHRoZSBlbmQgaW5kZXggb2YgdGhl
IHNsaWNlIChleGNsdXNpdmUpLgotICAgKiBAcmV0dXJuIHRoZSByZXF1ZXN0ZWQgc2xpY2UuCi0g
ICAqLwotICBwcml2YXRlIEJ5dGVCdWZmZXIgc2xpY2UoaW50IGJlZ2luSW5kZXgsIGludCBlbmRJ
bmRleCkgewotICAgIGlmIChiZWdpbkluZGV4IDwgYnVmZmVyLnBvc2l0aW9uKCkgfHwgZW5kSW5k
ZXggPiBidWZmZXIubGltaXQoKSB8fCBiZWdpbkluZGV4ID4gZW5kSW5kZXgpIHsKLSAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgU3RyaW5nLmZvcm1h
dCgiSW52YWxpZCBpbmRpY2VzIFslZCwgJWRdIiwgYmVnaW5JbmRleCwgZW5kSW5kZXgpKTsKLSAg
ICB9Ci0KLSAgICBCeXRlQnVmZmVyIHNsaWNlID0gYnVmZmVyLnNsaWNlKCk7Ci0gICAgc2xpY2Uu
cG9zaXRpb24oYmVnaW5JbmRleCAtIGJ1ZmZlci5wb3NpdGlvbigpKTsKLSAgICBzbGljZS5saW1p
dChlbmRJbmRleCAtIGJ1ZmZlci5wb3NpdGlvbigpKTsKLSAgICByZXR1cm4gc2xpY2U7Ci0gIH0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9QYXJzZXIuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9QYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiNjkyNDcyN2E3
YmUzY2E3MzAyODRhMmE4OGZhOWQxZWQ5N2Q1YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzIgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1
ZjsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLS8qKgotICogQWJzdHJhY3QgaW50
ZXJmYWNlIGZvciBwYXJzaW5nIFByb3RvY29sIE1lc3NhZ2VzLgotICoKLSAqIFRoZSBpbXBsZW1l
bnRhdGlvbiBzaG91bGQgYmUgc3RhdGVsZXNzIGFuZCB0aHJlYWQtc2FmZS4KLSAqCi0gKiA8cD5B
bGwgbWV0aG9kcyBtYXkgdGhyb3cge0BsaW5rIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
bn0uIEluIHRoZSBldmVudCBvZiBpbnZhbGlkIGRhdGEsCi0gKiBsaWtlIGFuIGVuY29kaW5nIGVy
cm9yLCB0aGUgY2F1c2Ugb2YgdGhlIHRocm93biBleGNlcHRpb24gd2lsbCBiZSB7QGNvZGUgbnVs
bH0uIEhvd2V2ZXIsIGlmIGFuCi0gKiBJL08gcHJvYmxlbSBvY2N1cnMsIGFuIGV4Y2VwdGlvbiBp
cyB0aHJvd24gd2l0aCBhbiB7QGxpbmsgSU9FeGNlcHRpb259IGNhdXNlLgotICoKLSAqIEBhdXRo
b3IgbGl1amlzaUBnb29nbGUuY29tIChQaGVybCBMaXUpCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2Ug
UGFyc2VyPE1lc3NhZ2VUeXBlPiB7Ci0KLSAgLy8gTkIoamgpOiBPdGhlciBwYXJ0cyBvZiB0aGUg
cHJvdG9idWYgQVBJIHRoYXQgcGFyc2UgbWVzc2FnZXMgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBJ
L08gcHJvYmxlbQotICAvLyAobGlrZSBmYWlsdXJlIHJlYWRpbmcgYnl0ZXMgZnJvbSBhIHNvY2tl
dCkgYW5kIGludmFsaWQgZGF0YSAoZW5jb2RpbmcgZXJyb3IpIHZpYSB0aGUgdHlwZSBvZgotICAv
LyB0aHJvd24gZXhjZXB0aW9uLiBCdXQgaXQgd291bGQgYmUgc291cmNlLWluY29tcGF0aWJsZSB0
byBtYWtlIHRoZSBtZXRob2RzIGluIHRoaXMgaW50ZXJmYWNlIGRvCi0gIC8vIHNvIHNpbmNlIHRo
ZXkgd2VyZSBvcmlnaW5hbGx5IHNwZWMnZWQgdG8gb25seSB0aHJvdyBJbnZhbGlkUHJvdG9jb2xC
dWZmZXJFeGNlcHRpb24uIFNvIGNhbGxlcnMKLSAgLy8gbXVzdCBpbnNwZWN0IHRoZSBjYXVzZSBv
ZiB0aGUgZXhjZXB0aW9uIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIHR3byBjYXNlcy4KLQotICAvKioK
LSAgICogUGFyc2VzIGEgbWVzc2FnZSBvZiB7QGNvZGUgTWVzc2FnZVR5cGV9IGZyb20gdGhlIGlu
cHV0LgotICAgKgotICAgKiA8cD5Ob3RlOiAgVGhlIGNhbGxlciBzaG91bGQgY2FsbAotICAgKiB7
QGxpbmsgQ29kZWRJbnB1dFN0cmVhbSNjaGVja0xhc3RUYWdXYXMoaW50KX0gYWZ0ZXIgY2FsbGlu
ZyB0aGlzIHRvCi0gICAqIHZlcmlmeSB0aGF0IHRoZSBsYXN0IHRhZyBzZWVuIHdhcyB0aGUgYXBw
cm9wcmlhdGUgZW5kLWdyb3VwIHRhZywKLSAgICogb3IgemVybyBmb3IgRU9GLgotICAgKi8KLSAg
cHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlRnJvbShDb2RlZElucHV0U3RyZWFtIGlucHV0KQotICAg
ICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbjsKLQotICAvKioKLSAgICog
TGlrZSB7QGxpbmsgI3BhcnNlRnJvbShDb2RlZElucHV0U3RyZWFtKX0sIGJ1dCBhbHNvIHBhcnNl
cyBleHRlbnNpb25zLgotICAgKiBUaGUgZXh0ZW5zaW9ucyB0aGF0IHlvdSB3YW50IHRvIGJlIGFi
bGUgdG8gcGFyc2UgbXVzdCBiZSByZWdpc3RlcmVkIGluCi0gICAqIHtAY29kZSBleHRlbnNpb25S
ZWdpc3RyeX0uIEV4dGVuc2lvbnMgbm90IGluIHRoZSByZWdpc3RyeSB3aWxsIGJlIHRyZWF0ZWQK
LSAgICogYXMgdW5rbm93biBmaWVsZHMuCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFy
c2VGcm9tKENvZGVkSW5wdXRTdHJlYW0gaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgdGhy
b3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogTGlrZSB7
QGxpbmsgI3BhcnNlRnJvbShDb2RlZElucHV0U3RyZWFtKX0sIGJ1dCBkb2VzIG5vdCB0aHJvdyBh
bgotICAgKiBleGNlcHRpb24gaWYgdGhlIG1lc3NhZ2UgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVs
ZHMuIEluc3RlYWQsIGEgcGFydGlhbAotICAgKiBtZXNzYWdlIGlzIHJldHVybmVkLgotICAgKi8K
LSAgcHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlUGFydGlhbEZyb20oQ29kZWRJbnB1dFN0cmVhbSBp
bnB1dCkKLSAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAg
LyoqCi0gICAqIExpa2Uge0BsaW5rICNwYXJzZUZyb20oQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwg
RXh0ZW5zaW9uUmVnaXN0cnlMaXRlKX0sCi0gICAqIGJ1dCBkb2VzIG5vdCB0aHJvdyBhbiBleGNl
cHRpb24gaWYgdGhlIG1lc3NhZ2UgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuCi0gICAqIElu
c3RlYWQsIGEgcGFydGlhbCBtZXNzYWdlIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIE1l
c3NhZ2VUeXBlIHBhcnNlUGFydGlhbEZyb20oQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4
dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbjsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcy4KLQotICAvKioK
LSAgICogUGFyc2VzIHtAY29kZSBkYXRhfSBhcyBhIG1lc3NhZ2Ugb2Yge0Bjb2RlIE1lc3NhZ2VU
eXBlfS4KLSAgICogVGhpcyBpcyBqdXN0IGEgc21hbGwgd3JhcHBlciBhcm91bmQge0BsaW5rICNw
YXJzZUZyb20oQ29kZWRJbnB1dFN0cmVhbSl9LgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VUeXBl
IHBhcnNlRnJvbShCeXRlU3RyaW5nIGRhdGEpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29s
QnVmZmVyRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBQYXJzZXMge0Bjb2RlIGRhdGF9IGFzIGEg
bWVzc2FnZSBvZiB7QGNvZGUgTWVzc2FnZVR5cGV9LgotICAgKiBUaGlzIGlzIGp1c3QgYSBzbWFs
bCB3cmFwcGVyIGFyb3VuZAotICAgKiB7QGxpbmsgI3BhcnNlRnJvbShDb2RlZElucHV0U3RyZWFt
LCBFeHRlbnNpb25SZWdpc3RyeUxpdGUpfS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVHlwZSBw
YXJzZUZyb20oQnl0ZVN0cmluZyBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgIHRocm93cyBJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIExpa2Uge0BsaW5r
ICNwYXJzZUZyb20oQnl0ZVN0cmluZyl9LCBidXQgZG9lcyBub3QgdGhyb3cgYW4KLSAgICogZXhj
ZXB0aW9uIGlmIHRoZSBtZXNzYWdlIGlzIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLiBJbnN0ZWFk
LCBhIHBhcnRpYWwKLSAgICogbWVzc2FnZSBpcyByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBN
ZXNzYWdlVHlwZSBwYXJzZVBhcnRpYWxGcm9tKEJ5dGVTdHJpbmcgZGF0YSkKLSAgICAgIHRocm93
cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIExpa2Uge0Bs
aW5rICNwYXJzZUZyb20oQnl0ZVN0cmluZywgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlKX0sCi0gICAq
IGJ1dCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlIG1lc3NhZ2UgaXMgbWlzc2lu
ZyByZXF1aXJlZCBmaWVsZHMuCi0gICAqIEluc3RlYWQsIGEgcGFydGlhbCBtZXNzYWdlIGlzIHJl
dHVybmVkLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlUGFydGlhbEZyb20oQnl0
ZVN0cmluZyBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRl
bnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICB0aHJvd3MgSW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBQYXJzZXMge0Bjb2RlIGRh
dGF9IGFzIGEgbWVzc2FnZSBvZiB7QGNvZGUgTWVzc2FnZVR5cGV9LgotICAgKiBUaGlzIGlzIGp1
c3QgYSBzbWFsbCB3cmFwcGVyIGFyb3VuZCB7QGxpbmsgI3BhcnNlRnJvbShDb2RlZElucHV0U3Ry
ZWFtKX0uCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VGcm9tKGJ5dGVbXSBkYXRh
LCBpbnQgb2ZmLCBpbnQgbGVuKQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4
Y2VwdGlvbjsKLQotICAvKioKLSAgICogUGFyc2VzIHtAY29kZSBkYXRhfSBhcyBhIG1lc3NhZ2Ug
b2Yge0Bjb2RlIE1lc3NhZ2VUeXBlfS4KLSAgICogVGhpcyBpcyBqdXN0IGEgc21hbGwgd3JhcHBl
ciBhcm91bmQKLSAgICoge0BsaW5rICNwYXJzZUZyb20oQ29kZWRJbnB1dFN0cmVhbSwgRXh0ZW5z
aW9uUmVnaXN0cnlMaXRlKX0uCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VGcm9t
KGJ5dGVbXSBkYXRhLCBpbnQgb2ZmLCBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgIHRo
cm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIFBhcnNl
cyB7QGNvZGUgZGF0YX0gYXMgYSBtZXNzYWdlIG9mIHtAY29kZSBNZXNzYWdlVHlwZX0uCi0gICAq
IFRoaXMgaXMganVzdCBhIHNtYWxsIHdyYXBwZXIgYXJvdW5kIHtAbGluayAjcGFyc2VGcm9tKENv
ZGVkSW5wdXRTdHJlYW0pfS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVHlwZSBwYXJzZUZyb20o
Ynl0ZVtdIGRhdGEpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
OwotCi0gIC8qKgotICAgKiBQYXJzZXMge0Bjb2RlIGRhdGF9IGFzIGEgbWVzc2FnZSBvZiB7QGNv
ZGUgTWVzc2FnZVR5cGV9LgotICAgKiBUaGlzIGlzIGp1c3QgYSBzbWFsbCB3cmFwcGVyIGFyb3Vu
ZAotICAgKiB7QGxpbmsgI3BhcnNlRnJvbShDb2RlZElucHV0U3RyZWFtLCBFeHRlbnNpb25SZWdp
c3RyeUxpdGUpfS4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVHlwZSBwYXJzZUZyb20oYnl0ZVtd
IGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlM
aXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZl
ckV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogTGlrZSB7QGxpbmsgI3BhcnNlRnJvbShieXRlW10s
IGludCwgaW50KX0sIGJ1dCBkb2VzIG5vdCB0aHJvdyBhbgotICAgKiBleGNlcHRpb24gaWYgdGhl
IG1lc3NhZ2UgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuIEluc3RlYWQsIGEgcGFydGlhbAot
ICAgKiBtZXNzYWdlIGlzIHJldHVybmVkLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VUeXBlIHBh
cnNlUGFydGlhbEZyb20oYnl0ZVtdIGRhdGEsIGludCBvZmYsIGludCBsZW4pCi0gICAgICB0aHJv
d3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBMaWtlIHtA
bGluayAjcGFyc2VGcm9tKEJ5dGVTdHJpbmcsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSl9LAotICAg
KiBidXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBtZXNzYWdlIGlzIG1pc3Np
bmcgcmVxdWlyZWQgZmllbGRzLgotICAgKiBJbnN0ZWFkLCBhIHBhcnRpYWwgbWVzc2FnZSBpcyBy
ZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVHlwZSBwYXJzZVBhcnRpYWxGcm9tKGJ5
dGVbXSBkYXRhLCBpbnQgb2ZmLCBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAg
ICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBM
aWtlIHtAbGluayAjcGFyc2VGcm9tKGJ5dGVbXSl9LCBidXQgZG9lcyBub3QgdGhyb3cgYW4KLSAg
ICogZXhjZXB0aW9uIGlmIHRoZSBtZXNzYWdlIGlzIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLiBJ
bnN0ZWFkLCBhIHBhcnRpYWwKLSAgICogbWVzc2FnZSBpcyByZXR1cm5lZC4KLSAgICovCi0gIHB1
YmxpYyBNZXNzYWdlVHlwZSBwYXJzZVBhcnRpYWxGcm9tKGJ5dGVbXSBkYXRhKQotICAgICAgdGhy
b3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogTGlrZSB7
QGxpbmsgI3BhcnNlRnJvbShieXRlW10sIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSl9LAotICAgKiBi
dXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBtZXNzYWdlIGlzIG1pc3Npbmcg
cmVxdWlyZWQgZmllbGRzLgotICAgKiBJbnN0ZWFkLCBhIHBhcnRpYWwgbWVzc2FnZSBpcyByZXR1
cm5lZC4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVHlwZSBwYXJzZVBhcnRpYWxGcm9tKGJ5dGVb
XSBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb25S
ZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBQYXJzZSBhIG1lc3NhZ2Ugb2Yge0Bj
b2RlIE1lc3NhZ2VUeXBlfSBmcm9tIHtAY29kZSBpbnB1dH0uCi0gICAqIFRoaXMgaXMganVzdCBh
IHNtYWxsIHdyYXBwZXIgYXJvdW5kIHtAbGluayAjcGFyc2VGcm9tKENvZGVkSW5wdXRTdHJlYW0p
fS4KLSAgICogTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGFsd2F5cyByZWFkcyB0aGUgPGk+ZW50aXJl
PC9pPiBpbnB1dCAodW5sZXNzIGl0Ci0gICAqIHRocm93cyBhbiBleGNlcHRpb24pLiAgSWYgeW91
IHdhbnQgaXQgdG8gc3RvcCBlYXJsaWVyLCB5b3Ugd2lsbCBuZWVkIHRvCi0gICAqIHdyYXAgeW91
ciBpbnB1dCBpbiBzb21lIHdyYXBwZXIgc3RyZWFtIHRoYXQgbGltaXRzIHJlYWRpbmcuICBPciwg
dXNlCi0gICAqIHtAbGluayBNZXNzYWdlTGl0ZSN3cml0ZURlbGltaXRlZFRvKGphdmEuaW8uT3V0
cHV0U3RyZWFtKX0gdG8gd3JpdGUgeW91cgotICAgKiBtZXNzYWdlIGFuZCB7QGxpbmsgI3BhcnNl
RGVsaW1pdGVkRnJvbShJbnB1dFN0cmVhbSl9IHRvIHJlYWQgaXQuCi0gICAqIDxwPgotICAgKiBE
ZXNwaXRlIHVzdWFsbHkgcmVhZGluZyB0aGUgZW50aXJlIGlucHV0LCB0aGlzIGRvZXMgbm90IGNs
b3NlIHRoZSBzdHJlYW0uCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VGcm9tKElu
cHV0U3RyZWFtIGlucHV0KQotICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbjsKLQotICAvKioKLSAgICogUGFyc2VzIGEgbWVzc2FnZSBvZiB7QGNvZGUgTWVzc2FnZVR5
cGV9IGZyb20ge0Bjb2RlIGlucHV0fS4KLSAgICogVGhpcyBpcyBqdXN0IGEgc21hbGwgd3JhcHBl
ciBhcm91bmQKLSAgICoge0BsaW5rICNwYXJzZUZyb20oQ29kZWRJbnB1dFN0cmVhbSwgRXh0ZW5z
aW9uUmVnaXN0cnlMaXRlKX0uCi0gICAqLwotICBwdWJsaWMgTWVzc2FnZVR5cGUgcGFyc2VGcm9t
KElucHV0U3RyZWFtIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVu
c2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgIHRocm93cyBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIExpa2Uge0BsaW5rICNwYXJz
ZUZyb20oSW5wdXRTdHJlYW0pfSwgYnV0IGRvZXMgbm90IHRocm93IGFuCi0gICAqIGV4Y2VwdGlv
biBpZiB0aGUgbWVzc2FnZSBpcyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcy4gSW5zdGVhZCwgYSBw
YXJ0aWFsCi0gICAqIG1lc3NhZ2UgaXMgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgTWVzc2Fn
ZVR5cGUgcGFyc2VQYXJ0aWFsRnJvbShJbnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgIHRocm93cyBJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIExpa2Uge0BsaW5r
ICNwYXJzZUZyb20oSW5wdXRTdHJlYW0sIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSl9LAotICAgKiBi
dXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBtZXNzYWdlIGlzIG1pc3Npbmcg
cmVxdWlyZWQgZmllbGRzLgotICAgKiBJbnN0ZWFkLCBhIHBhcnRpYWwgbWVzc2FnZSBpcyByZXR1
cm5lZC4KLSAgICovCi0gIHB1YmxpYyBNZXNzYWdlVHlwZSBwYXJzZVBhcnRpYWxGcm9tKElucHV0
U3RyZWFtIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRl
bnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICB0aHJvd3MgSW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBMaWtlIHtAbGluayAjcGFy
c2VGcm9tKElucHV0U3RyZWFtKX0sIGJ1dCBkb2VzIG5vdCByZWFkIHV0aWwgRU9GLgotICAgKiBJ
bnN0ZWFkLCB0aGUgc2l6ZSBvZiBtZXNzYWdlIChlbmNvZGVkIGFzIGEgdmFyaW50KSBpcyByZWFk
IGZpcnN0LAotICAgKiB0aGVuIHRoZSBtZXNzYWdlIGRhdGEuIFVzZQotICAgKiB7QGxpbmsgTWVz
c2FnZUxpdGUjd3JpdGVEZWxpbWl0ZWRUbyhqYXZhLmlvLk91dHB1dFN0cmVhbSl9IHRvIHdyaXRl
Ci0gICAqIG1lc3NhZ2VzIGluIHRoaXMgZm9ybWF0LgotICAgKgotICAgKiBAcmV0dXJuIFBhcnNl
ZCBtZXNzYWdlIGlmIHN1Y2Nlc3NmdWwsIG9yIG51bGwgaWYgdGhlIHN0cmVhbSBpcyBhdCBFT0Yg
d2hlbgotICAgKiAgICAgICAgIHRoZSBtZXRob2Qgc3RhcnRzLiBBbnkgb3RoZXIgZXJyb3IgKGlu
Y2x1ZGluZyByZWFjaGluZyBFT0YgZHVyaW5nCi0gICAqICAgICAgICAgcGFyc2luZykgd2lsbCBj
YXVzZSBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3duLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VU
eXBlIHBhcnNlRGVsaW1pdGVkRnJvbShJbnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgIHRocm93cyBJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0KLSAgLyoqCi0gICAqIExpa2Uge0BsaW5r
ICNwYXJzZURlbGltaXRlZEZyb20oSW5wdXRTdHJlYW0pfSBidXQgc3VwcG9ydGluZyBleHRlbnNp
b25zLgotICAgKi8KLSAgcHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlRGVsaW1pdGVkRnJvbShJbnB1
dFN0cmVhbSBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
eHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICB0aHJvd3MgSW52
YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBMaWtlIHtAbGluayAj
cGFyc2VEZWxpbWl0ZWRGcm9tKElucHV0U3RyZWFtKX0sIGJ1dCBkb2VzIG5vdCB0aHJvdyBhbgot
ICAgKiBleGNlcHRpb24gaWYgdGhlIG1lc3NhZ2UgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMu
IEluc3RlYWQsIGEgcGFydGlhbAotICAgKiBtZXNzYWdlIGlzIHJldHVybmVkLgotICAgKi8KLSAg
cHVibGljIE1lc3NhZ2VUeXBlIHBhcnNlUGFydGlhbERlbGltaXRlZEZyb20oSW5wdXRTdHJlYW0g
aW5wdXQpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uOwotCi0g
IC8qKgotICAgKiBMaWtlIHtAbGluayAjcGFyc2VEZWxpbWl0ZWRGcm9tKElucHV0U3RyZWFtLCBF
eHRlbnNpb25SZWdpc3RyeUxpdGUpfSwKLSAgICogYnV0IGRvZXMgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbiBpZiB0aGUgbWVzc2FnZSBpcyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcy4KLSAgICogSW5z
dGVhZCwgYSBwYXJ0aWFsIG1lc3NhZ2UgaXMgcmV0dXJuZWQuCi0gICAqLwotICBwdWJsaWMgTWVz
c2FnZVR5cGUgcGFyc2VQYXJ0aWFsRGVsaW1pdGVkRnJvbSgKLSAgICAgIElucHV0U3RyZWFtIGlu
cHV0LAotICAgICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAg
ICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Qcm90b2J1ZkFycmF5
TGlzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1By
b3RvYnVmQXJyYXlMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMjU1
ZWMyOTEyNWJhMDMyZjUyYjExNGY5MTRiMDBmMjBhOGU5NzguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL1Byb3RvYnVmQXJyYXlMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2Ug
Y29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJu
YWwuUHJvdG9idWZMaXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBq
YXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBJbXBsZW1lbnRzIHtAbGluayBQcm90b2J1Zkxpc3R9
IGZvciBub24tcHJpbWl0aXZlIGFuZCB7QGxpbmsgU3RyaW5nfSB0eXBlcy4KLSAqLwotZmluYWwg
Y2xhc3MgUHJvdG9idWZBcnJheUxpc3Q8RT4gZXh0ZW5kcyBBYnN0cmFjdFByb3RvYnVmTGlzdDxF
PiB7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUHJvdG9idWZBcnJheUxpc3Q8T2JqZWN0PiBF
TVBUWV9MSVNUID0gbmV3IFByb3RvYnVmQXJyYXlMaXN0PE9iamVjdD4oKTsKLSAgc3RhdGljIHsK
LSAgICBFTVBUWV9MSVNULm1ha2VJbW11dGFibGUoKTsKLSAgfQotICAKLSAgQFN1cHByZXNzV2Fy
bmluZ3MoInVuY2hlY2tlZCIpIC8vIEd1YXJhbnRlZWQgc2FmZSBieSBydW50aW1lLgotICBwdWJs
aWMgc3RhdGljIDxFPiBQcm90b2J1ZkFycmF5TGlzdDxFPiBlbXB0eUxpc3QoKSB7Ci0gICAgcmV0
dXJuIChQcm90b2J1ZkFycmF5TGlzdDxFPikgRU1QVFlfTElTVDsKLSAgfQotICAKLSAgcHJpdmF0
ZSBmaW5hbCBMaXN0PEU+IGxpc3Q7Ci0KLSAgUHJvdG9idWZBcnJheUxpc3QoKSB7Ci0gICAgdGhp
cyhuZXcgQXJyYXlMaXN0PEU+KERFRkFVTFRfQ0FQQUNJVFkpKTsKLSAgfQotICAKLSAgcHJpdmF0
ZSBQcm90b2J1ZkFycmF5TGlzdChMaXN0PEU+IGxpc3QpIHsKLSAgICB0aGlzLmxpc3QgPSBsaXN0
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBQcm90b2J1ZkFycmF5TGlzdDxFPiBtdXRh
YmxlQ29weVdpdGhDYXBhY2l0eShpbnQgY2FwYWNpdHkpIHsKLSAgICBpZiAoY2FwYWNpdHkgPCBz
aXplKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAg
ICB9Ci0gICAgTGlzdDxFPiBuZXdMaXN0ID0gbmV3IEFycmF5TGlzdDxFPihjYXBhY2l0eSk7Ci0g
ICAgbmV3TGlzdC5hZGRBbGwobGlzdCk7Ci0gICAgcmV0dXJuIG5ldyBQcm90b2J1ZkFycmF5TGlz
dDxFPihuZXdMaXN0KTsKLSAgfQotICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGFkZChp
bnQgaW5kZXgsIEUgZWxlbWVudCkgewotICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIGxpc3Qu
YWRkKGluZGV4LCBlbGVtZW50KTsKLSAgICBtb2RDb3VudCsrOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBFIGdldChpbnQgaW5kZXgpIHsKLSAgICByZXR1cm4gbGlzdC5nZXQoaW5kZXgp
OwotICB9Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIEUgcmVtb3ZlKGludCBpbmRleCkgewot
ICAgIGVuc3VyZUlzTXV0YWJsZSgpOwotICAgIEUgdG9SZXR1cm4gPSBsaXN0LnJlbW92ZShpbmRl
eCk7Ci0gICAgbW9kQ291bnQrKzsKLSAgICByZXR1cm4gdG9SZXR1cm47Ci0gIH0KLSAgCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgRSBzZXQoaW50IGluZGV4LCBFIGVsZW1lbnQpIHsKLSAgICBlbnN1
cmVJc011dGFibGUoKTsKLSAgICBFIHRvUmV0dXJuID0gbGlzdC5zZXQoaW5kZXgsIGVsZW1lbnQp
OwotICAgIG1vZENvdW50Kys7Ci0gICAgcmV0dXJuIHRvUmV0dXJuOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICByZXR1cm4gbGlzdC5zaXplKCk7Ci0gIH0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9Qcm90b2NvbE1lc3NhZ2VFbnVtLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvUHJvdG9jb2xNZXNzYWdlRW51bS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhNTk2ZDMwMTkwZmQ0NTc0MzczMzEzMjQ4ZTA0MGQ0ODZiY2E2ZDAwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Qcm90b2NvbE1lc3NhZ2VFbnVtLmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgY29tLmdv
b2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5FbnVtRGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29v
Z2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkVudW1WYWx1ZURlc2NyaXB0b3I7Ci0KLS8qKgotICog
SW50ZXJmYWNlIG9mIHVzZWZ1bCBtZXRob2RzIGFkZGVkIHRvIGFsbCBlbnVtcyBnZW5lcmF0ZWQg
YnkgdGhlIHByb3RvY29sCi0gKiBjb21waWxlci4KLSAqLwotcHVibGljIGludGVyZmFjZSBQcm90
b2NvbE1lc3NhZ2VFbnVtIGV4dGVuZHMgSW50ZXJuYWwuRW51bUxpdGUgewotCi0gIC8qKgotICAg
KiBSZXR1cm4gdGhlIHZhbHVlJ3MgbnVtZXJpYyB2YWx1ZSBhcyBkZWZpbmVkIGluIHRoZSAucHJv
dG8gZmlsZS4KLSAgICovCi0gIEBPdmVycmlkZQotICBpbnQgZ2V0TnVtYmVyKCk7Ci0KLSAgLyoq
Ci0gICAqIFJldHVybiB0aGUgdmFsdWUncyBkZXNjcmlwdG9yLCB3aGljaCBjb250YWlucyBpbmZv
cm1hdGlvbiBzdWNoIGFzCi0gICAqIHZhbHVlIG5hbWUsIG51bWJlciwgYW5kIHR5cGUuCi0gICAq
LwotICBFbnVtVmFsdWVEZXNjcmlwdG9yIGdldFZhbHVlRGVzY3JpcHRvcigpOwotCi0gIC8qKgot
ICAgKiBSZXR1cm4gdGhlIGVudW0gdHlwZSdzIGRlc2NyaXB0b3IsIHdoaWNoIGNvbnRhaW5zIGlu
Zm9ybWF0aW9uCi0gICAqIGFib3V0IGVhY2ggZGVmaW5lZCB2YWx1ZSwgZXRjLgotICAgKi8KLSAg
RW51bURlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvckZvclR5cGUoKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Qcm90b2NvbFN0cmluZ0xp
c3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Qcm90
b2NvbFN0cmluZ0xpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU1M2I0
MWU1MmJjY2MyOGEzMjc5NTBkMjBiMmFmOTgyOTBkMzI3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvUHJvdG9jb2xTdHJpbmdMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0
OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBj
b20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICog
QW4gaW50ZXJmYWNlIGV4dGVuZGluZyB7QGNvZGUgTGlzdDxTdHJpbmc+fSB1c2VkIGZvciByZXBl
YXRlZCBzdHJpbmcgZmllbGRzCi0gKiB0byBwcm92aWRlIG9wdGlvbmFsIGFjY2VzcyB0byB0aGUg
ZGF0YSBhcyBhIGxpc3Qgb2YgQnl0ZVN0cmluZ3MuIFRoZQotICogdW5kZXJseWluZyBpbXBsZW1l
bnRhdGlvbiBzdG9yZXMgdmFsdWVzIGFzIGVpdGhlciBCeXRlU3RyaW5ncyBvciBTdHJpbmdzCi0g
KiAoc2VlIHtAbGluayBMYXp5U3RyaW5nQXJyYXlMaXN0fSkgZGVwZW5kaW5nIG9uIGhvdyB0aGUg
dmFsdWUgd2FzIGluaXRpYWxpemVkCi0gKiBvciBsYXN0IHJlYWQsIGFuZCBpdCBpcyBvZnRlbiBt
b3JlIGVmZmljaWVudCB0byBkZWFsIHdpdGggbGlzdHMgb2YKLSAqIEJ5dGVTdHJpbmdzIHdoZW4g
aGFuZGxpbmcgcHJvdG9zIHRoYXQgaGF2ZSBiZWVuIGRlc2VyaWFsaXplZCBmcm9tIGJ5dGVzLgot
ICovCi1wdWJsaWMgaW50ZXJmYWNlIFByb3RvY29sU3RyaW5nTGlzdCBleHRlbmRzIExpc3Q8U3Ry
aW5nPiB7Ci0KLSAgLyoqIFJldHVybnMgYSB2aWV3IG9mIHRoZSBkYXRhIGFzIGEgbGlzdCBvZiBC
eXRlU3RyaW5ncy4gKi8KLSAgTGlzdDxCeXRlU3RyaW5nPiBhc0J5dGVTdHJpbmdMaXN0KCk7Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9SZXBlYXRlZEZpZWxkQnVpbGRlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL1JlcGVhdGVkRmllbGRCdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI5ZjU2N2RjZGVjNGZjY2RmMjA5MzdkYzcxYjlmYmE1YTljNzVjNjgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUv
c3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1JlcGVhdGVkRmllbGRCdWlsZGVyLmph
dmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MDggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGph
dmEudXRpbC5BYnN0cmFjdExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9y
dCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1p
bXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICoge0Bjb2RlIFJlcGVhdGVkRmllbGRCdWls
ZGVyfSBpbXBsZW1lbnRzIGEgc3RydWN0dXJlIHRoYXQgYSBwcm90b2NvbAotICogbWVzc2FnZSB1
c2VzIHRvIGhvbGQgYSByZXBlYXRlZCBmaWVsZCBvZiBvdGhlciBwcm90b2NvbCBtZXNzYWdlcy4g
SXQgc3VwcG9ydHMKLSAqIHRoZSBjbGFzc2ljYWwgdXNlIGNhc2Ugb2YgYWRkaW5nIGltbXV0YWJs
ZSB7QGxpbmsgTWVzc2FnZX0ncyB0byB0aGUKLSAqIHJlcGVhdGVkIGZpZWxkIGFuZCBpcyBoaWdo
bHkgb3B0aW1pemVkIGFyb3VuZCB0aGlzIChubyBleHRyYSBtZW1vcnkKLSAqIGFsbG9jYXRpb25z
IGFuZCBzaGFyaW5nIG9mIGltbXV0YWJsZSBhcnJheXMpLgotICogPGJyPgotICogSXQgYWxzbyBz
dXBwb3J0cyB0aGUgYWRkaXRpb25hbCB1c2UgY2FzZSBvZiBhZGRpbmcgYSB7QGxpbmsgTWVzc2Fn
ZS5CdWlsZGVyfQotICogdG8gdGhlIHJlcGVhdGVkIGZpZWxkIGFuZCBkZWZlcnJpbmcgY29udmVy
c2lvbiBvZiB0aGF0IHtAY29kZSBCdWlsZGVyfQotICogdG8gYW4gaW1tdXRhYmxlIHtAY29kZSBN
ZXNzYWdlfS4gSW4gdGhpcyB3YXksIGl0J3MgcG9zc2libGUgdG8gbWFpbnRhaW4KLSAqIGEgdHJl
ZSBvZiB7QGNvZGUgQnVpbGRlcn0ncyB0aGF0IGFjdHMgYXMgYSBmdWxseSByZWFkL3dyaXRlIGRh
dGEKLSAqIHN0cnVjdHVyZS4KLSAqIDxicj4KLSAqIExvZ2ljYWxseSwgb25lIGNhbiB0aGluayBv
ZiBhIHRyZWUgb2YgYnVpbGRlcnMgYXMgY29udmVydGluZyB0aGUgZW50aXJlIHRyZWUKLSAqIHRv
IG1lc3NhZ2VzIHdoZW4gYnVpbGQgaXMgY2FsbGVkIG9uIHRoZSByb290IG9yIHdoZW4gYW55IG1l
dGhvZCBpcyBjYWxsZWQKLSAqIHRoYXQgZGVzaXJlcyBhIE1lc3NhZ2UgaW5zdGVhZCBvZiBhIEJ1
aWxkZXIuIEluIHRlcm1zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwKLSAqIHRoZSB7QGNvZGUgU2lu
Z2xlRmllbGRCdWlsZGVyfSBhbmQge0Bjb2RlIFJlcGVhdGVkRmllbGRCdWlsZGVyfQotICogY2xh
c3NlcyBjYWNoZSBtZXNzYWdlcyB0aGF0IHdlcmUgY3JlYXRlZCBzbyB0aGF0IG1lc3NhZ2VzIG9u
bHkgbmVlZCB0byBiZQotICogY3JlYXRlZCB3aGVuIHNvbWUgY2hhbmdlIG9jY3VycmVkIGluIGl0
cyBidWlsZGVyIG9yIGEgYnVpbGRlciBmb3Igb25lIG9mIGl0cwotICogZGVzY2VuZGFudHMuCi0g
KgotICogQHBhcmFtIDxNVHlwZT4gdGhlIHR5cGUgb2YgbWVzc2FnZSBmb3IgdGhlIGZpZWxkCi0g
KiBAcGFyYW0gPEJUeXBlPiB0aGUgdHlwZSBvZiBidWlsZGVyIGZvciB0aGUgZmllbGQKLSAqIEBw
YXJhbSA8SVR5cGU+IHRoZSBjb21tb24gaW50ZXJmYWNlIGZvciB0aGUgbWVzc2FnZSBhbmQgdGhl
IGJ1aWxkZXIKLSAqCi0gKiBAYXV0aG9yIGpvbnBAZ29vZ2xlLmNvbSAoSm9uIFBlcmxvdykKLSAq
LwotcHVibGljIGNsYXNzIFJlcGVhdGVkRmllbGRCdWlsZGVyCi0gICAgPE1UeXBlIGV4dGVuZHMg
R2VuZXJhdGVkTWVzc2FnZSwKLSAgICAgQlR5cGUgZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlLkJ1
aWxkZXIsCi0gICAgIElUeXBlIGV4dGVuZHMgTWVzc2FnZU9yQnVpbGRlcj4KLSAgICBpbXBsZW1l
bnRzIEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlclBhcmVudCB7Ci0KLSAgLy8gUGFyZW50IHRvIHNl
bmQgY2hhbmdlcyB0by4KLSAgcHJpdmF0ZSBHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXJQYXJlbnQg
cGFyZW50OwotCi0gIC8vIExpc3Qgb2YgbWVzc2FnZXMuIE5ldmVyIG51bGwuIEl0IG1heSBiZSBp
bW11dGFibGUsIGluIHdoaWNoIGNhc2UKLSAgLy8gaXNNZXNzYWdlc0xpc3RNdXRhYmxlIHdpbGwg
YmUgZmFsc2UuIFNlZSBub3RlIGJlbG93LgotICBwcml2YXRlIExpc3Q8TVR5cGU+IG1lc3NhZ2Vz
OwotCi0gIC8vIFdoZXRoZXIgbWVzc2FnZXMgaXMgYW4gbXV0YWJsZSBhcnJheSB0aGF0IGNhbiBi
ZSBtb2RpZmllZC4KLSAgcHJpdmF0ZSBib29sZWFuIGlzTWVzc2FnZXNMaXN0TXV0YWJsZTsKLQot
ICAvLyBMaXN0IG9mIGJ1aWxkZXJzLiBNYXkgYmUgbnVsbCwgaW4gd2hpY2ggY2FzZSwgbm8gbmVz
dGVkIGJ1aWxkZXJzIHdlcmUKLSAgLy8gY3JlYXRlZC4gSWYgbm90IG51bGwsIGVudHJpZXMgcmVw
cmVzZW50IHRoZSBidWlsZGVyIGZvciB0aGF0IGluZGV4LgotICBwcml2YXRlIExpc3Q8U2luZ2xl
RmllbGRCdWlsZGVyPE1UeXBlLCBCVHlwZSwgSVR5cGU+PiBidWlsZGVyczsKLQotICAvLyBIZXJl
IGFyZSB0aGUgaW52YXJpYW50cyBmb3IgbWVzc2FnZXMgYW5kIGJ1aWxkZXJzOgotICAvLyAxLiBt
ZXNzYWdlcyBpcyBuZXZlciBudWxsIGFuZCBpdHMgY291bnQgY29ycmVzcG9uZHMgdG8gdGhlIG51
bWJlciBvZiBpdGVtcwotICAvLyAgICBpbiB0aGUgcmVwZWF0ZWQgZmllbGQuCi0gIC8vIDIuIElm
IGJ1aWxkZXJzIGlzIG5vbi1udWxsLCBtZXNzYWdlcyBhbmQgYnVpbGRlcnMgTVVTVCBhbHdheXMK
LSAgLy8gICAgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMuCi0gIC8vIDMuIEVudHJp
ZXMgaW4gZWl0aGVyIGFycmF5IGNhbiBiZSBudWxsLCBidXQgZm9yIGFueSBpbmRleCwgdGhlcmUg
TVVTVCBiZQotICAvLyAgICBlaXRoZXIgYSBNZXNzYWdlIGluIG1lc3NhZ2VzIG9yIGEgYnVpbGRl
ciBpbiBidWlsZGVycy4KLSAgLy8gNC4gSWYgdGhlIGJ1aWxkZXIgYXQgYW4gaW5kZXggaXMgbm9u
LW51bGwsIHRoZSBidWlsZGVyIGlzCi0gIC8vICAgIGF1dGhvcml0YXRpdmUuIFRoaXMgaXMgdGhl
IGNhc2Ugd2hlcmUgYSBCdWlsZGVyIHdhcyBzZXQgb24gdGhlIGluZGV4LgotICAvLyAgICBBbnkg
bWVzc2FnZSBpbiB0aGUgbWVzc2FnZXMgYXJyYXkgTVVTVCBiZSBpZ25vcmVkLgotICAvLyB0LiBJ
ZiB0aGUgYnVpbGRlciBhdCBhbiBpbmRleCBpcyBudWxsLCB0aGUgbWVzc2FnZSBpbiB0aGUgbWVz
c2FnZXMKLSAgLy8gICAgbGlzdCBpcyBhdXRob3JpdGF0aXZlLiBUaGlzIGlzIHRoZSBjYXNlIHdo
ZXJlIGEgTWVzc2FnZSAobm90IGEgQnVpbGRlcikKLSAgLy8gICAgd2FzIHNldCBkaXJlY3RseSBm
b3IgYW4gaW5kZXguCi0KLSAgLy8gSW5kaWNhdGVzIHRoYXQgd2UndmUgYnVpbHQgYSBtZXNzYWdl
IGFuZCBzbyB3ZSBhcmUgbm93IG9ibGlnYXRlZAotICAvLyB0byBkaXNwYXRjaCBkaXJ0eSBpbnZh
bGlkYXRpb25zLiBTZWUgR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyTGlzdGVuZXIuCi0gIHByaXZh
dGUgYm9vbGVhbiBpc0NsZWFuOwotCi0gIC8vIEEgdmlldyBvZiB0aGlzIGJ1aWxkZXIgdGhhdCBl
eHBvc2VzIGEgTGlzdCBpbnRlcmZhY2Ugb2YgbWVzc2FnZXMuIFRoaXMgaXMKLSAgLy8gaW5pdGlh
bGl6ZWQgb24gZGVtYW5kLiBUaGlzIGlzIGZ1bGx5IGJhY2tlZCBieSB0aGlzIG9iamVjdCBhbmQg
YWxsIGNoYW5nZXMKLSAgLy8gYXJlIHJlZmxlY3RlZCBpbiBpdC4gQWNjZXNzIHRvIGFueSBpdGVt
IGNvbnZlcnRzIGl0IHRvIGEgbWVzc2FnZSBpZiBpdAotICAvLyB3YXMgYSBidWlsZGVyLgotICBw
cml2YXRlIE1lc3NhZ2VFeHRlcm5hbExpc3Q8TVR5cGUsIEJUeXBlLCBJVHlwZT4gZXh0ZXJuYWxN
ZXNzYWdlTGlzdDsKLQotICAvLyBBIHZpZXcgb2YgdGhpcyBidWlsZGVyIHRoYXQgZXhwb3NlcyBh
IExpc3QgaW50ZXJmYWNlIG9mIGJ1aWxkZXJzLiBUaGlzIGlzCi0gIC8vIGluaXRpYWxpemVkIG9u
IGRlbWFuZC4gVGhpcyBpcyBmdWxseSBiYWNrZWQgYnkgdGhpcyBvYmplY3QgYW5kIGFsbCBjaGFu
Z2VzCi0gIC8vIGFyZSByZWZsZWN0ZWQgaW4gaXQuIEFjY2VzcyB0byBhbnkgaXRlbSBjb252ZXJ0
cyBpdCB0byBhIGJ1aWxkZXIgaWYgaXQKLSAgLy8gd2FzIGEgbWVzc2FnZS4KLSAgcHJpdmF0ZSBC
dWlsZGVyRXh0ZXJuYWxMaXN0PE1UeXBlLCBCVHlwZSwgSVR5cGU+IGV4dGVybmFsQnVpbGRlckxp
c3Q7Ci0KLSAgLy8gQSB2aWV3IG9mIHRoaXMgYnVpbGRlciB0aGF0IGV4cG9zZXMgYSBMaXN0IGlu
dGVyZmFjZSBvZiB0aGUgaW50ZXJmYWNlCi0gIC8vIGltcGxlbWVudGVkIGJ5IG1lc3NhZ2VzIGFu
ZCBidWlsZGVycy4gVGhpcyBpcyBpbml0aWFsaXplZCBvbiBkZW1hbmQuIFRoaXMKLSAgLy8gaXMg
ZnVsbHkgYmFja2VkIGJ5IHRoaXMgb2JqZWN0IGFuZCBhbGwgY2hhbmdlcyBhcmUgcmVmbGVjdGVk
IGluIGl0LgotICAvLyBBY2Nlc3MgdG8gYW55IGl0ZW0gcmV0dXJucyBlaXRoZXIgYSBidWlsZGVy
IG9yIG1lc3NhZ2UgZGVwZW5kaW5nIG9uCi0gIC8vIHdoYXQgaXMgbW9zdCBlZmZpY2llbnQuCi0g
IHByaXZhdGUgTWVzc2FnZU9yQnVpbGRlckV4dGVybmFsTGlzdDxNVHlwZSwgQlR5cGUsIElUeXBl
PgotICAgICAgZXh0ZXJuYWxNZXNzYWdlT3JCdWlsZGVyTGlzdDsKLQotICAvKioKLSAgICogQ29u
c3RydWN0cyBhIG5ldyBidWlsZGVyIHdpdGggYW4gZW1wdHkgbGlzdCBvZiBtZXNzYWdlcy4KLSAg
ICoKLSAgICogQHBhcmFtIG1lc3NhZ2VzIHRoZSBjdXJyZW50IGxpc3Qgb2YgbWVzc2FnZXMKLSAg
ICogQHBhcmFtIGlzTWVzc2FnZXNMaXN0TXV0YWJsZSBXaGV0aGVyIHRoZSBtZXNzYWdlcyBsaXN0
IGlzIG11dGFibGUKLSAgICogQHBhcmFtIHBhcmVudCBhIGxpc3RlbmVyIHRvIG5vdGlmeSBvZiBj
aGFuZ2VzCi0gICAqIEBwYXJhbSBpc0NsZWFuIHdoZXRoZXIgdGhlIGJ1aWxkZXIgaXMgaW5pdGlh
bGx5IG1hcmtlZCBjbGVhbgotICAgKi8KLSAgcHVibGljIFJlcGVhdGVkRmllbGRCdWlsZGVyKAot
ICAgICAgTGlzdDxNVHlwZT4gbWVzc2FnZXMsCi0gICAgICBib29sZWFuIGlzTWVzc2FnZXNMaXN0
TXV0YWJsZSwKLSAgICAgIEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlclBhcmVudCBwYXJlbnQsCi0g
ICAgICBib29sZWFuIGlzQ2xlYW4pIHsKLSAgICB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZXM7Ci0g
ICAgdGhpcy5pc01lc3NhZ2VzTGlzdE11dGFibGUgPSBpc01lc3NhZ2VzTGlzdE11dGFibGU7Ci0g
ICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgdGhpcy5pc0NsZWFuID0gaXNDbGVhbjsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgLy8gTnVsbCBvdXQgcGFyZW50IHNv
IHdlIHN0b3Agc2VuZGluZyBpdCBpbnZhbGlkYXRpb25zLgotICAgIHBhcmVudCA9IG51bGw7Ci0g
IH0KLQotICAvKioKLSAgICogRW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9mIG1lc3NhZ2VzIGlzIG11
dGFibGUgc28gaXQgY2FuIGJlIHVwZGF0ZWQuIElmIGl0J3MKLSAgICogaW1tdXRhYmxlLCBhIGNv
cHkgaXMgbWFkZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBlbnN1cmVNdXRhYmxlTWVzc2FnZUxp
c3QoKSB7Ci0gICAgaWYgKCFpc01lc3NhZ2VzTGlzdE11dGFibGUpIHsKLSAgICAgIG1lc3NhZ2Vz
ID0gbmV3IEFycmF5TGlzdDxNVHlwZT4obWVzc2FnZXMpOwotICAgICAgaXNNZXNzYWdlc0xpc3RN
dXRhYmxlID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRW5zdXJlcyB0aGF0IHRo
ZSBsaXN0IG9mIGJ1aWxkZXJzIGlzIG5vdCBudWxsLiBJZiBpdCdzIG51bGwsIHRoZSBsaXN0IGlz
Ci0gICAqIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkIHRvIGJlIHRoZSBzYW1lIHNpemUgYXMgdGhl
IG1lc3NhZ2VzIGxpc3Qgd2l0aAotICAgKiBudWxsIGVudHJpZXMuCi0gICAqLwotICBwcml2YXRl
IHZvaWQgZW5zdXJlQnVpbGRlcnMoKSB7Ci0gICAgaWYgKHRoaXMuYnVpbGRlcnMgPT0gbnVsbCkg
ewotICAgICAgdGhpcy5idWlsZGVycyA9Ci0gICAgICAgICAgbmV3IEFycmF5TGlzdDxTaW5nbGVG
aWVsZEJ1aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4+KAotICAgICAgICAgICAgICBtZXNzYWdl
cy5zaXplKCkpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlcy5zaXplKCk7IGkr
KykgewotICAgICAgICBidWlsZGVycy5hZGQobnVsbCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSAgLyoqCi0gICAqIEdldHMgdGhlIGNvdW50IG9mIGl0ZW1zIGluIHRoZSBsaXN0LgotICAgKgot
ICAgKiBAcmV0dXJuIHRoZSBjb3VudCBvZiBpdGVtcyBpbiB0aGUgbGlzdC4KLSAgICovCi0gIHB1
YmxpYyBpbnQgZ2V0Q291bnQoKSB7Ci0gICAgcmV0dXJuIG1lc3NhZ2VzLnNpemUoKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBHZXRzIHdoZXRoZXIgdGhlIGxpc3QgaXMgZW1wdHkuCi0gICAqCi0gICAq
IEByZXR1cm4gd2hldGhlciB0aGUgbGlzdCBpcyBlbXB0eQotICAgKi8KLSAgcHVibGljIGJvb2xl
YW4gaXNFbXB0eSgpIHsKLSAgICByZXR1cm4gbWVzc2FnZXMuaXNFbXB0eSgpOwotICB9Ci0KLSAg
LyoqCi0gICAqIEdldCB0aGUgbWVzc2FnZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUg
bWVzc2FnZSBpcyBjdXJyZW50bHkgc3RvcmVkCi0gICAqIGFzIGEge0Bjb2RlIEJ1aWxkZXJ9LCBp
dCBpcyBjb252ZXJ0ZWQgdG8gYSB7QGNvZGUgTWVzc2FnZX0gYnkKLSAgICogY2FsbGluZyB7QGxp
bmsgTWVzc2FnZS5CdWlsZGVyI2J1aWxkUGFydGlhbH0gb24gaXQuCi0gICAqCi0gICAqIEBwYXJh
bSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIG1lc3NhZ2UgdG8gZ2V0Ci0gICAqIEByZXR1cm4gdGhl
IG1lc3NhZ2UgZm9yIHRoZSBzcGVjaWZpZWQgaW5kZXgKLSAgICovCi0gIHB1YmxpYyBNVHlwZSBn
ZXRNZXNzYWdlKGludCBpbmRleCkgewotICAgIHJldHVybiBnZXRNZXNzYWdlKGluZGV4LCBmYWxz
ZSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBtZXNzYWdlIGF0IHRoZSBzcGVjaWZpZWQg
aW5kZXguIElmIHRoZSBtZXNzYWdlIGlzIGN1cnJlbnRseSBzdG9yZWQKLSAgICogYXMgYSB7QGNv
ZGUgQnVpbGRlcn0sIGl0IGlzIGNvbnZlcnRlZCB0byBhIHtAY29kZSBNZXNzYWdlfSBieQotICAg
KiBjYWxsaW5nIHtAbGluayBNZXNzYWdlLkJ1aWxkZXIjYnVpbGRQYXJ0aWFsfSBvbiBpdC4KLSAg
ICoKLSAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgbWVzc2FnZSB0byBnZXQKLSAg
ICogQHBhcmFtIGZvckJ1aWxkIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBidWlsZCBzbyB3ZSB3
YW50IHRvIG1ha2Ugc3VyZQotICAgKiAgICAgd2UgU2luZ2xlRmllbGRCdWlsZGVyLmJ1aWxkIHRv
IHNlbmQgZGlydHkgaW52YWxpZGF0aW9ucwotICAgKiBAcmV0dXJuIHRoZSBtZXNzYWdlIGZvciB0
aGUgc3BlY2lmaWVkIGluZGV4Ci0gICAqLwotICBwcml2YXRlIE1UeXBlIGdldE1lc3NhZ2UoaW50
IGluZGV4LCBib29sZWFuIGZvckJ1aWxkKSB7Ci0gICAgaWYgKHRoaXMuYnVpbGRlcnMgPT0gbnVs
bCkgewotICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgYnVpbGRlcnMgLS0gcmV0dXJuIHRoZSBj
dXJyZW50IE1lc3NhZ2UuCi0gICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIG5vIGJ1aWxk
ZXIgd2FzIGNyZWF0ZWQsIHNvIHdlIE1VU1QgaGF2ZSBhCi0gICAgICAvLyBNZXNzYWdlLgotICAg
ICAgcmV0dXJuIG1lc3NhZ2VzLmdldChpbmRleCk7Ci0gICAgfQotCi0gICAgU2luZ2xlRmllbGRC
dWlsZGVyPE1UeXBlLCBCVHlwZSwgSVR5cGU+IGJ1aWxkZXIgPSBidWlsZGVycy5nZXQoaW5kZXgp
OwotICAgIGlmIChidWlsZGVyID09IG51bGwpIHsKLSAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBi
dWlsZGVyIC0tIHJldHVybiB0aGUgY3VycmVudCBtZXNzYWdlLgotICAgICAgLy8gVGhpcyBpcyB0
aGUgY2FzZSB3aGVyZSBubyBidWlsZGVyIHdhcyBjcmVhdGVkIGZvciB0aGUgZW50cnkgYXQgaW5k
ZXgsCi0gICAgICAvLyBzbyB3ZSBNVVNUIGhhdmUgYSBtZXNzYWdlLgotICAgICAgcmV0dXJuIG1l
c3NhZ2VzLmdldChpbmRleCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGZvckJ1aWxk
ID8gYnVpbGRlci5idWlsZCgpIDogYnVpbGRlci5nZXRNZXNzYWdlKCk7Ci0gICAgfQotICB9Ci0K
LSAgLyoqCi0gICAqIEdldHMgYSBidWlsZGVyIGZvciB0aGUgc3BlY2lmaWVkIGluZGV4LiBJZiBu
byBidWlsZGVyIGhhcyBiZWVuIGNyZWF0ZWQgZm9yCi0gICAqIHRoYXQgaW5kZXgsIGEgYnVpbGRl
ciBpcyBjcmVhdGVkIG9uIGRlbWFuZCBieSBjYWxsaW5nCi0gICAqIHtAbGluayBNZXNzYWdlI3Rv
QnVpbGRlcn0uCi0gICAqCi0gICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIG1lc3Nh
Z2UgdG8gZ2V0Ci0gICAqIEByZXR1cm4gVGhlIGJ1aWxkZXIgZm9yIHRoYXQgaW5kZXgKLSAgICov
Ci0gIHB1YmxpYyBCVHlwZSBnZXRCdWlsZGVyKGludCBpbmRleCkgewotICAgIGVuc3VyZUJ1aWxk
ZXJzKCk7Ci0gICAgU2luZ2xlRmllbGRCdWlsZGVyPE1UeXBlLCBCVHlwZSwgSVR5cGU+IGJ1aWxk
ZXIgPSBidWlsZGVycy5nZXQoaW5kZXgpOwotICAgIGlmIChidWlsZGVyID09IG51bGwpIHsKLSAg
ICAgIE1UeXBlIG1lc3NhZ2UgPSBtZXNzYWdlcy5nZXQoaW5kZXgpOwotICAgICAgYnVpbGRlciA9
IG5ldyBTaW5nbGVGaWVsZEJ1aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4oCi0gICAgICAgICAg
bWVzc2FnZSwgdGhpcywgaXNDbGVhbik7Ci0gICAgICBidWlsZGVycy5zZXQoaW5kZXgsIGJ1aWxk
ZXIpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci5nZXRCdWlsZGVyKCk7Ci0gIH0KLQotICAv
KioKLSAgICogR2V0cyB0aGUgYmFzZSBjbGFzcyBpbnRlcmZhY2UgZm9yIHRoZSBzcGVjaWZpZWQg
aW5kZXguIFRoaXMgbWF5IGVpdGhlciBiZQotICAgKiBhIGJ1aWxkZXIgb3IgYSBtZXNzYWdlLiBJ
dCB3aWxsIHJldHVybiB3aGF0ZXZlciBpcyBtb3JlIGVmZmljaWVudC4KLSAgICoKLSAgICogQHBh
cmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgbWVzc2FnZSB0byBnZXQKLSAgICogQHJldHVybiB0
aGUgbWVzc2FnZSBvciBidWlsZGVyIGZvciB0aGUgaW5kZXggYXMgdGhlIGJhc2UgY2xhc3MgaW50
ZXJmYWNlCi0gICAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGlj
IElUeXBlIGdldE1lc3NhZ2VPckJ1aWxkZXIoaW50IGluZGV4KSB7Ci0gICAgaWYgKHRoaXMuYnVp
bGRlcnMgPT0gbnVsbCkgewotICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgYnVpbGRlcnMgLS0g
cmV0dXJuIHRoZSBjdXJyZW50IE1lc3NhZ2UuCi0gICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdo
ZXJlIG5vIGJ1aWxkZXIgd2FzIGNyZWF0ZWQsIHNvIHdlIE1VU1QgaGF2ZSBhCi0gICAgICAvLyBN
ZXNzYWdlLgotICAgICAgcmV0dXJuIChJVHlwZSkgbWVzc2FnZXMuZ2V0KGluZGV4KTsKLSAgICB9
Ci0KLSAgICBTaW5nbGVGaWVsZEJ1aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4gYnVpbGRlciA9
IGJ1aWxkZXJzLmdldChpbmRleCk7Ci0gICAgaWYgKGJ1aWxkZXIgPT0gbnVsbCkgewotICAgICAg
Ly8gV2UgZG9uJ3QgaGF2ZSBhIGJ1aWxkZXIgLS0gcmV0dXJuIHRoZSBjdXJyZW50IG1lc3NhZ2Uu
Ci0gICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIG5vIGJ1aWxkZXIgd2FzIGNyZWF0ZWQg
Zm9yIHRoZSBlbnRyeSBhdCBpbmRleCwKLSAgICAgIC8vIHNvIHdlIE1VU1QgaGF2ZSBhIG1lc3Nh
Z2UuCi0gICAgICByZXR1cm4gKElUeXBlKSBtZXNzYWdlcy5nZXQoaW5kZXgpOwotCi0gICAgfSBl
bHNlIHsKLSAgICAgIHJldHVybiBidWlsZGVyLmdldE1lc3NhZ2VPckJ1aWxkZXIoKTsKLSAgICB9
Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyBhICBtZXNzYWdlIGF0IHRoZSBzcGVjaWZpZWQgaW5k
ZXggcmVwbGFjaW5nIHRoZSBleGlzdGluZyBpdGVtIGF0Ci0gICAqIHRoYXQgaW5kZXguCi0gICAq
Ci0gICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggdG8gc2V0LgotICAgKiBAcGFyYW0gbWVzc2Fn
ZSB0aGUgbWVzc2FnZSB0byBzZXQKLSAgICogQHJldHVybiB0aGUgYnVpbGRlcgotICAgKi8KLSAg
cHVibGljIFJlcGVhdGVkRmllbGRCdWlsZGVyPE1UeXBlLCBCVHlwZSwgSVR5cGU+IHNldE1lc3Nh
Z2UoCi0gICAgICBpbnQgaW5kZXgsIE1UeXBlIG1lc3NhZ2UpIHsKLSAgICBpZiAobWVzc2FnZSA9
PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICB9
Ci0gICAgZW5zdXJlTXV0YWJsZU1lc3NhZ2VMaXN0KCk7Ci0gICAgbWVzc2FnZXMuc2V0KGluZGV4
LCBtZXNzYWdlKTsKLSAgICBpZiAoYnVpbGRlcnMgIT0gbnVsbCkgewotICAgICAgU2luZ2xlRmll
bGRCdWlsZGVyPE1UeXBlLCBCVHlwZSwgSVR5cGU+IGVudHJ5ID0KLSAgICAgICAgICBidWlsZGVy
cy5zZXQoaW5kZXgsIG51bGwpOwotICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKLSAgICAgICAg
ZW50cnkuZGlzcG9zZSgpOwotICAgICAgfQotICAgIH0KLSAgICBvbkNoYW5nZWQoKTsKLSAgICBp
bmNyZW1lbnRNb2RDb3VudHMoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAg
KiBBcHBlbmRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoaXMgbGlzdC4K
LSAgICoKLSAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2UgdG8gYWRkCi0gICAqIEByZXR1
cm4gdGhlIGJ1aWxkZXIKLSAgICovCi0gIHB1YmxpYyBSZXBlYXRlZEZpZWxkQnVpbGRlcjxNVHlw
ZSwgQlR5cGUsIElUeXBlPiBhZGRNZXNzYWdlKAotICAgICAgTVR5cGUgbWVzc2FnZSkgewotICAg
IGlmIChtZXNzYWdlID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2Vw
dGlvbigpOwotICAgIH0KLSAgICBlbnN1cmVNdXRhYmxlTWVzc2FnZUxpc3QoKTsKLSAgICBtZXNz
YWdlcy5hZGQobWVzc2FnZSk7Ci0gICAgaWYgKGJ1aWxkZXJzICE9IG51bGwpIHsKLSAgICAgIGJ1
aWxkZXJzLmFkZChudWxsKTsKLSAgICB9Ci0gICAgb25DaGFuZ2VkKCk7Ci0gICAgaW5jcmVtZW50
TW9kQ291bnRzKCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogSW5zZXJ0
cyB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlz
IGxpc3QuCi0gICAqIFNoaWZ0cyB0aGUgZWxlbWVudCBjdXJyZW50bHkgYXQgdGhhdCBwb3NpdGlv
biAoaWYgYW55KSBhbmQgYW55IHN1YnNlcXVlbnQKLSAgICogZWxlbWVudHMgdG8gdGhlIHJpZ2h0
IChhZGRzIG9uZSB0byB0aGVpciBpbmRpY2VzKS4KLSAgICoKLSAgICogQHBhcmFtIGluZGV4IHRo
ZSBpbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIG1lc3NhZ2UKLSAgICogQHBhcmFtIG1lc3Nh
Z2UgdGhlIG1lc3NhZ2UgdG8gYWRkCi0gICAqIEByZXR1cm4gdGhlIGJ1aWxkZXIKLSAgICovCi0g
IHB1YmxpYyBSZXBlYXRlZEZpZWxkQnVpbGRlcjxNVHlwZSwgQlR5cGUsIElUeXBlPiBhZGRNZXNz
YWdlKAotICAgICAgaW50IGluZGV4LCBNVHlwZSBtZXNzYWdlKSB7Ci0gICAgaWYgKG1lc3NhZ2Ug
PT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7Ci0gICAg
fQotICAgIGVuc3VyZU11dGFibGVNZXNzYWdlTGlzdCgpOwotICAgIG1lc3NhZ2VzLmFkZChpbmRl
eCwgbWVzc2FnZSk7Ci0gICAgaWYgKGJ1aWxkZXJzICE9IG51bGwpIHsKLSAgICAgIGJ1aWxkZXJz
LmFkZChpbmRleCwgbnVsbCk7Ci0gICAgfQotICAgIG9uQ2hhbmdlZCgpOwotICAgIGluY3JlbWVu
dE1vZENvdW50cygpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEFwcGVu
ZHMgYWxsIG9mIHRoZSBtZXNzYWdlcyBpbiB0aGUgc3BlY2lmaWVkIGNvbGxlY3Rpb24gdG8gdGhl
IGVuZCBvZgotICAgKiB0aGlzIGxpc3QsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlIHJldHVy
bmVkIGJ5IHRoZSBzcGVjaWZpZWQKLSAgICogY29sbGVjdGlvbidzIGl0ZXJhdG9yLgotICAgKgot
ICAgKiBAcGFyYW0gdmFsdWVzIHRoZSBtZXNzYWdlcyB0byBhZGQKLSAgICogQHJldHVybiB0aGUg
YnVpbGRlcgotICAgKi8KLSAgcHVibGljIFJlcGVhdGVkRmllbGRCdWlsZGVyPE1UeXBlLCBCVHlw
ZSwgSVR5cGU+IGFkZEFsbE1lc3NhZ2VzKAotICAgICAgSXRlcmFibGU8PyBleHRlbmRzIE1UeXBl
PiB2YWx1ZXMpIHsKLSAgICBmb3IgKGZpbmFsIE1UeXBlIHZhbHVlIDogdmFsdWVzKSB7Ci0gICAg
ICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNl
cHRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBjYW4gaW5zcGVjdCB0aGUg
c2l6ZSwgd2UgY2FuIG1vcmUgZWZmaWNpZW50bHkgYWRkIG1lc3NhZ2VzLgotICAgIGludCBzaXpl
ID0gLTE7Ci0gICAgaWYgKHZhbHVlcyBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHsKLSAgICAgIEBT
dXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKSBmaW5hbAotICAgICAgQ29sbGVjdGlvbjxNVHlw
ZT4gY29sbGVjdGlvbiA9IChDb2xsZWN0aW9uPE1UeXBlPikgdmFsdWVzOwotICAgICAgaWYgKGNv
bGxlY3Rpb24uc2l6ZSgpID09IDApIHsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0g
ICAgICBzaXplID0gY29sbGVjdGlvbi5zaXplKCk7Ci0gICAgfQotICAgIGVuc3VyZU11dGFibGVN
ZXNzYWdlTGlzdCgpOwotCi0gICAgaWYgKHNpemUgPj0gMCAmJiBtZXNzYWdlcyBpbnN0YW5jZW9m
IEFycmF5TGlzdCkgewotICAgICAgKChBcnJheUxpc3Q8TVR5cGU+KSBtZXNzYWdlcykKLSAgICAg
ICAgICAuZW5zdXJlQ2FwYWNpdHkobWVzc2FnZXMuc2l6ZSgpICsgc2l6ZSk7Ci0gICAgfQotCi0g
ICAgZm9yIChNVHlwZSB2YWx1ZSA6IHZhbHVlcykgewotICAgICAgYWRkTWVzc2FnZSh2YWx1ZSk7
Ci0gICAgfQotCi0gICAgb25DaGFuZ2VkKCk7Ci0gICAgaW5jcmVtZW50TW9kQ291bnRzKCk7Ci0g
ICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQXBwZW5kcyBhIG5ldyBidWlsZGVy
IHRvIHRoZSBlbmQgb2YgdGhpcyBsaXN0IGFuZCByZXR1cm5zIHRoZSBidWlsZGVyLgotICAgKgot
ICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZSB0byBhZGQgd2hpY2ggaXMgdGhlIGJhc2lz
IG9mIHRoZSBidWlsZGVyCi0gICAqIEByZXR1cm4gdGhlIG5ldyBidWlsZGVyCi0gICAqLwotICBw
dWJsaWMgQlR5cGUgYWRkQnVpbGRlcihNVHlwZSBtZXNzYWdlKSB7Ci0gICAgZW5zdXJlTXV0YWJs
ZU1lc3NhZ2VMaXN0KCk7Ci0gICAgZW5zdXJlQnVpbGRlcnMoKTsKLSAgICBTaW5nbGVGaWVsZEJ1
aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4gYnVpbGRlciA9Ci0gICAgICAgIG5ldyBTaW5nbGVG
aWVsZEJ1aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4oCi0gICAgICAgICAgICBtZXNzYWdlLCB0
aGlzLCBpc0NsZWFuKTsKLSAgICBtZXNzYWdlcy5hZGQobnVsbCk7Ci0gICAgYnVpbGRlcnMuYWRk
KGJ1aWxkZXIpOwotICAgIG9uQ2hhbmdlZCgpOwotICAgIGluY3JlbWVudE1vZENvdW50cygpOwot
ICAgIHJldHVybiBidWlsZGVyLmdldEJ1aWxkZXIoKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbnNl
cnRzIGEgbmV3IGJ1aWxkZXIgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlzIGxpc3Qu
Ci0gICAqIFNoaWZ0cyB0aGUgZWxlbWVudCBjdXJyZW50bHkgYXQgdGhhdCBwb3NpdGlvbiAoaWYg
YW55KSBhbmQgYW55IHN1YnNlcXVlbnQKLSAgICogZWxlbWVudHMgdG8gdGhlIHJpZ2h0IChhZGRz
IG9uZSB0byB0aGVpciBpbmRpY2VzKS4KLSAgICoKLSAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRl
eCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGJ1aWxkZXIKLSAgICogQHBhcmFtIG1lc3NhZ2UgdGhl
IG1lc3NhZ2UgdG8gYWRkIHdoaWNoIGlzIHRoZSBiYXNpcyBvZiB0aGUgYnVpbGRlcgotICAgKiBA
cmV0dXJuIHRoZSBidWlsZGVyCi0gICAqLwotICBwdWJsaWMgQlR5cGUgYWRkQnVpbGRlcihpbnQg
aW5kZXgsIE1UeXBlIG1lc3NhZ2UpIHsKLSAgICBlbnN1cmVNdXRhYmxlTWVzc2FnZUxpc3QoKTsK
LSAgICBlbnN1cmVCdWlsZGVycygpOwotICAgIFNpbmdsZUZpZWxkQnVpbGRlcjxNVHlwZSwgQlR5
cGUsIElUeXBlPiBidWlsZGVyID0KLSAgICAgICAgbmV3IFNpbmdsZUZpZWxkQnVpbGRlcjxNVHlw
ZSwgQlR5cGUsIElUeXBlPigKLSAgICAgICAgICAgIG1lc3NhZ2UsIHRoaXMsIGlzQ2xlYW4pOwot
ICAgIG1lc3NhZ2VzLmFkZChpbmRleCwgbnVsbCk7Ci0gICAgYnVpbGRlcnMuYWRkKGluZGV4LCBi
dWlsZGVyKTsKLSAgICBvbkNoYW5nZWQoKTsKLSAgICBpbmNyZW1lbnRNb2RDb3VudHMoKTsKLSAg
ICByZXR1cm4gYnVpbGRlci5nZXRCdWlsZGVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3Zl
cyB0aGUgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgbGlzdC4gU2hp
ZnRzIGFueQotICAgKiBzdWJzZXF1ZW50IGVsZW1lbnRzIHRvIHRoZSBsZWZ0IChzdWJ0cmFjdHMg
b25lIGZyb20gdGhlaXIgaW5kaWNlcykuCi0gICAqIFJldHVybnMgdGhlIGVsZW1lbnQgdGhhdCB3
YXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LgotICAgKgotICAgKiBAcGFyYW0gaW5kZXggdGhlIGlu
ZGV4IGF0IHdoaWNoIHRvIHJlbW92ZSB0aGUgbWVzc2FnZQotICAgKi8KLSAgcHVibGljIHZvaWQg
cmVtb3ZlKGludCBpbmRleCkgewotICAgIGVuc3VyZU11dGFibGVNZXNzYWdlTGlzdCgpOwotICAg
IG1lc3NhZ2VzLnJlbW92ZShpbmRleCk7Ci0gICAgaWYgKGJ1aWxkZXJzICE9IG51bGwpIHsKLSAg
ICAgIFNpbmdsZUZpZWxkQnVpbGRlcjxNVHlwZSwgQlR5cGUsIElUeXBlPiBlbnRyeSA9Ci0gICAg
ICAgICAgYnVpbGRlcnMucmVtb3ZlKGluZGV4KTsKLSAgICAgIGlmIChlbnRyeSAhPSBudWxsKSB7
Ci0gICAgICAgIGVudHJ5LmRpc3Bvc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgb25DaGFuZ2Vk
KCk7Ci0gICAgaW5jcmVtZW50TW9kQ291bnRzKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3Zl
cyBhbGwgb2YgdGhlIGVsZW1lbnRzIGZyb20gdGhpcyBsaXN0LgotICAgKiBUaGUgbGlzdCB3aWxs
IGJlIGVtcHR5IGFmdGVyIHRoaXMgY2FsbCByZXR1cm5zLgotICAgKi8KLSAgcHVibGljIHZvaWQg
Y2xlYXIoKSB7Ci0gICAgbWVzc2FnZXMgPSBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLSAgICBp
c01lc3NhZ2VzTGlzdE11dGFibGUgPSBmYWxzZTsKLSAgICBpZiAoYnVpbGRlcnMgIT0gbnVsbCkg
ewotICAgICAgZm9yIChTaW5nbGVGaWVsZEJ1aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4gZW50
cnkgOgotICAgICAgICAgIGJ1aWxkZXJzKSB7Ci0gICAgICAgIGlmIChlbnRyeSAhPSBudWxsKSB7
Ci0gICAgICAgICAgZW50cnkuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBi
dWlsZGVycyA9IG51bGw7Ci0gICAgfQotICAgIG9uQ2hhbmdlZCgpOwotICAgIGluY3JlbWVudE1v
ZENvdW50cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJ1aWxkcyB0aGUgbGlzdCBvZiBtZXNzYWdl
cyBmcm9tIHRoZSBidWlsZGVyIGFuZCByZXR1cm5zIHRoZW0uCi0gICAqCi0gICAqIEByZXR1cm4g
YW4gaW1tdXRhYmxlIGxpc3Qgb2YgbWVzc2FnZXMKLSAgICovCi0gIHB1YmxpYyBMaXN0PE1UeXBl
PiBidWlsZCgpIHsKLSAgICAvLyBOb3cgdGhhdCBidWlsZCBoYXMgYmVlbiBjYWxsZWQsIHdlIGFy
ZSByZXF1aXJlZCB0byBkaXNwYXRjaAotICAgIC8vIGludmFsaWRhdGlvbnMuCi0gICAgaXNDbGVh
biA9IHRydWU7Ci0KLSAgICBpZiAoIWlzTWVzc2FnZXNMaXN0TXV0YWJsZSAmJiBidWlsZGVycyA9
PSBudWxsKSB7Ci0gICAgICAvLyBXZSBzdGlsbCBoYXZlIGFuIGltbXV0YWJsZSBsaXN0IGFuZCB3
ZSBuZXZlciBjcmVhdGVkIGEgYnVpbGRlci4KLSAgICAgIHJldHVybiBtZXNzYWdlczsKLSAgICB9
Ci0KLSAgICBib29sZWFuIGFsbE1lc3NhZ2VzSW5TeW5jID0gdHJ1ZTsKLSAgICBpZiAoIWlzTWVz
c2FnZXNMaXN0TXV0YWJsZSkgewotICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhbiBpbW11dGFibGUg
bGlzdC4gTGV0J3Mgc2VlIGlmIGFueSBvZiB0aGVtIGFyZSBvdXQKLSAgICAgIC8vIG9mIHN5bmMg
d2l0aCB0aGVpciBidWlsZGVycy4KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gbWVzc2FnZXMuZ2V0KGkp
OwotICAgICAgICBTaW5nbGVGaWVsZEJ1aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4gYnVpbGRl
ciA9IGJ1aWxkZXJzLmdldChpKTsKLSAgICAgICAgaWYgKGJ1aWxkZXIgIT0gbnVsbCkgewotICAg
ICAgICAgIGlmIChidWlsZGVyLmJ1aWxkKCkgIT0gbWVzc2FnZSkgewotICAgICAgICAgICAgYWxs
TWVzc2FnZXNJblN5bmMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGFsbE1lc3NhZ2VzSW5TeW5jKSB7Ci0gICAg
ICAgIC8vIEltbXV0YWJsZSBsaXN0IGlzIHN0aWxsIGluIHN5bmMuCi0gICAgICAgIHJldHVybiBt
ZXNzYWdlczsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBtZXNz
YWdlcyBpcyB1cCB0byBkYXRlCi0gICAgZW5zdXJlTXV0YWJsZU1lc3NhZ2VMaXN0KCk7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlcy5zaXplKCk7IGkrKykgewotICAgICAgbWVzc2Fn
ZXMuc2V0KGksIGdldE1lc3NhZ2UoaSwgdHJ1ZSkpOwotICAgIH0KLQotICAgIC8vIFdlJ3JlIGdv
aW5nIHRvIHJldHVybiBvdXIgbGlzdCBhcyBpbW11dGFibGUgc28gd2UgbWFyayB0aGF0IHdlIGNh
bgotICAgIC8vIG5vIGxvbmdlciB1cGRhdGUgaXQuCi0gICAgbWVzc2FnZXMgPSBDb2xsZWN0aW9u
cy51bm1vZGlmaWFibGVMaXN0KG1lc3NhZ2VzKTsKLSAgICBpc01lc3NhZ2VzTGlzdE11dGFibGUg
PSBmYWxzZTsKLSAgICByZXR1cm4gbWVzc2FnZXM7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyBh
IHZpZXcgb2YgdGhlIGJ1aWxkZXIgYXMgYSBsaXN0IG9mIG1lc3NhZ2VzLiBUaGUgcmV0dXJuZWQg
bGlzdCBpcyBsaXZlCi0gICAqIGFuZCB3aWxsIHJlZmxlY3QgYW55IGNoYW5nZXMgdG8gdGhlIHVu
ZGVybHlpbmcgYnVpbGRlci4KLSAgICoKLSAgICogQHJldHVybiB0aGUgbWVzc2FnZXMgaW4gdGhl
IGxpc3QKLSAgICovCi0gIHB1YmxpYyBMaXN0PE1UeXBlPiBnZXRNZXNzYWdlTGlzdCgpIHsKLSAg
ICBpZiAoZXh0ZXJuYWxNZXNzYWdlTGlzdCA9PSBudWxsKSB7Ci0gICAgICBleHRlcm5hbE1lc3Nh
Z2VMaXN0ID0KLSAgICAgICAgICBuZXcgTWVzc2FnZUV4dGVybmFsTGlzdDxNVHlwZSwgQlR5cGUs
IElUeXBlPih0aGlzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dGVybmFsTWVzc2FnZUxpc3Q7Ci0g
IH0KLQotICAvKioKLSAgICogR2V0cyBhIHZpZXcgb2YgdGhlIGJ1aWxkZXIgYXMgYSBsaXN0IG9m
IGJ1aWxkZXJzLiBUaGlzIHJldHVybmVkIGxpc3QgaXMKLSAgICogbGl2ZSBhbmQgd2lsbCByZWZs
ZWN0IGFueSBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGJ1aWxkZXIuCi0gICAqCi0gICAqIEBy
ZXR1cm4gdGhlIGJ1aWxkZXJzIGluIHRoZSBsaXN0Ci0gICAqLwotICBwdWJsaWMgTGlzdDxCVHlw
ZT4gZ2V0QnVpbGRlckxpc3QoKSB7Ci0gICAgaWYgKGV4dGVybmFsQnVpbGRlckxpc3QgPT0gbnVs
bCkgewotICAgICAgZXh0ZXJuYWxCdWlsZGVyTGlzdCA9Ci0gICAgICAgICAgbmV3IEJ1aWxkZXJF
eHRlcm5hbExpc3Q8TVR5cGUsIEJUeXBlLCBJVHlwZT4odGhpcyk7Ci0gICAgfQotICAgIHJldHVy
biBleHRlcm5hbEJ1aWxkZXJMaXN0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgYSB2aWV3IG9m
IHRoZSBidWlsZGVyIGFzIGEgbGlzdCBvZiBNZXNzYWdlT3JCdWlsZGVycy4gVGhpcyByZXR1cm5l
ZAotICAgKiBsaXN0IGlzIGxpdmUgYW5kIHdpbGwgcmVmbGVjdCBhbnkgY2hhbmdlcyB0byB0aGUg
dW5kZXJseWluZyBidWlsZGVyLgotICAgKgotICAgKiBAcmV0dXJuIHRoZSBidWlsZGVycyBpbiB0
aGUgbGlzdAotICAgKi8KLSAgcHVibGljIExpc3Q8SVR5cGU+IGdldE1lc3NhZ2VPckJ1aWxkZXJM
aXN0KCkgewotICAgIGlmIChleHRlcm5hbE1lc3NhZ2VPckJ1aWxkZXJMaXN0ID09IG51bGwpIHsK
LSAgICAgIGV4dGVybmFsTWVzc2FnZU9yQnVpbGRlckxpc3QgPQotICAgICAgICAgIG5ldyBNZXNz
YWdlT3JCdWlsZGVyRXh0ZXJuYWxMaXN0PE1UeXBlLCBCVHlwZSwgSVR5cGU+KHRoaXMpOwotICAg
IH0KLSAgICByZXR1cm4gZXh0ZXJuYWxNZXNzYWdlT3JCdWlsZGVyTGlzdDsKLSAgfQotCi0gIC8q
KgotICAgKiBDYWxsZWQgd2hlbiBhIHRoZSBidWlsZGVyIG9yIG9uZSBvZiBpdHMgbmVzdGVkIGNo
aWxkcmVuIGhhcyBjaGFuZ2VkCi0gICAqIGFuZCBhbnkgcGFyZW50IHNob3VsZCBiZSBub3RpZmll
ZCBvZiBpdHMgaW52YWxpZGF0aW9uLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIG9uQ2hhbmdlZCgp
IHsKLSAgICBpZiAoaXNDbGVhbiAmJiBwYXJlbnQgIT0gbnVsbCkgewotICAgICAgcGFyZW50Lm1h
cmtEaXJ0eSgpOwotCi0gICAgICAvLyBEb24ndCBrZWVwIGRpc3BhdGNoaW5nIGludmFsaWRhdGlv
bnMgdW50aWwgYnVpbGQgaXMgY2FsbGVkIGFnYWluLgotICAgICAgaXNDbGVhbiA9IGZhbHNlOwot
ICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBtYXJrRGlydHkoKSB7Ci0g
ICAgb25DaGFuZ2VkKCk7Ci0gIH0KLQotICAvKioKLSAgICogSW5jcmVtZW50cyB0aGUgbW9kIGNv
dW50cyBzbyB0aGF0IGFuIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24gY2FuCi0gICAq
IGJlIHRocm93biBpZiBjYWxsaW5nIGNvZGUgdHJpZXMgdG8gbW9kaWZ5IHRoZSBidWlsZGVyIHdo
aWxlIGl0cyBpdGVyYXRpbmcKLSAgICogdGhlIGxpc3QuCi0gICAqLwotICBwcml2YXRlIHZvaWQg
aW5jcmVtZW50TW9kQ291bnRzKCkgewotICAgIGlmIChleHRlcm5hbE1lc3NhZ2VMaXN0ICE9IG51
bGwpIHsKLSAgICAgIGV4dGVybmFsTWVzc2FnZUxpc3QuaW5jcmVtZW50TW9kQ291bnQoKTsKLSAg
ICB9Ci0gICAgaWYgKGV4dGVybmFsQnVpbGRlckxpc3QgIT0gbnVsbCkgewotICAgICAgZXh0ZXJu
YWxCdWlsZGVyTGlzdC5pbmNyZW1lbnRNb2RDb3VudCgpOwotICAgIH0KLSAgICBpZiAoZXh0ZXJu
YWxNZXNzYWdlT3JCdWlsZGVyTGlzdCAhPSBudWxsKSB7Ci0gICAgICBleHRlcm5hbE1lc3NhZ2VP
ckJ1aWxkZXJMaXN0LmluY3JlbWVudE1vZENvdW50KCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIFByb3ZpZGVzIGEgbGl2ZSB2aWV3IG9mIHRoZSBidWlsZGVyIGFzIGEgbGlzdCBvZiBtZXNz
YWdlcy4KLSAgICoKLSAgICogQHBhcmFtIDxNVHlwZT4gdGhlIHR5cGUgb2YgbWVzc2FnZSBmb3Ig
dGhlIGZpZWxkCi0gICAqIEBwYXJhbSA8QlR5cGU+IHRoZSB0eXBlIG9mIGJ1aWxkZXIgZm9yIHRo
ZSBmaWVsZAotICAgKiBAcGFyYW0gPElUeXBlPiB0aGUgY29tbW9uIGludGVyZmFjZSBmb3IgdGhl
IG1lc3NhZ2UgYW5kIHRoZSBidWlsZGVyCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBN
ZXNzYWdlRXh0ZXJuYWxMaXN0PAotICAgICAgTVR5cGUgZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdl
LAotICAgICAgQlR5cGUgZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXIsCi0gICAgICBJ
VHlwZSBleHRlbmRzIE1lc3NhZ2VPckJ1aWxkZXI+Ci0gICAgICBleHRlbmRzIEFic3RyYWN0TGlz
dDxNVHlwZT4gaW1wbGVtZW50cyBMaXN0PE1UeXBlPiB7Ci0KLSAgICBSZXBlYXRlZEZpZWxkQnVp
bGRlcjxNVHlwZSwgQlR5cGUsIElUeXBlPiBidWlsZGVyOwotCi0gICAgTWVzc2FnZUV4dGVybmFs
TGlzdCgKLSAgICAgICAgUmVwZWF0ZWRGaWVsZEJ1aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4g
YnVpbGRlcikgewotICAgICAgdGhpcy5idWlsZGVyID0gYnVpbGRlcjsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IHNpemUoKSB7Ci0gICAgICByZXR1cm4gdGhpcy5idWls
ZGVyLmdldENvdW50KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1UeXBl
IGdldChpbnQgaW5kZXgpIHsKLSAgICAgIHJldHVybiBidWlsZGVyLmdldE1lc3NhZ2UoaW5kZXgp
OwotICAgIH0KLQotICAgIHZvaWQgaW5jcmVtZW50TW9kQ291bnQoKSB7Ci0gICAgICBtb2RDb3Vu
dCsrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcm92aWRlcyBhIGxpdmUgdmlldyBvZiB0
aGUgYnVpbGRlciBhcyBhIGxpc3Qgb2YgYnVpbGRlcnMuCi0gICAqCi0gICAqIEBwYXJhbSA8TVR5
cGU+IHRoZSB0eXBlIG9mIG1lc3NhZ2UgZm9yIHRoZSBmaWVsZAotICAgKiBAcGFyYW0gPEJUeXBl
PiB0aGUgdHlwZSBvZiBidWlsZGVyIGZvciB0aGUgZmllbGQKLSAgICogQHBhcmFtIDxJVHlwZT4g
dGhlIGNvbW1vbiBpbnRlcmZhY2UgZm9yIHRoZSBtZXNzYWdlIGFuZCB0aGUgYnVpbGRlcgotICAg
Ki8KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQnVpbGRlckV4dGVybmFsTGlzdDwKLSAgICAgIE1U
eXBlIGV4dGVuZHMgR2VuZXJhdGVkTWVzc2FnZSwKLSAgICAgIEJUeXBlIGV4dGVuZHMgR2VuZXJh
dGVkTWVzc2FnZS5CdWlsZGVyLAotICAgICAgSVR5cGUgZXh0ZW5kcyBNZXNzYWdlT3JCdWlsZGVy
PgotICAgICAgZXh0ZW5kcyBBYnN0cmFjdExpc3Q8QlR5cGU+IGltcGxlbWVudHMgTGlzdDxCVHlw
ZT4gewotCi0gICAgUmVwZWF0ZWRGaWVsZEJ1aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4gYnVp
bGRlcjsKLQotICAgIEJ1aWxkZXJFeHRlcm5hbExpc3QoCi0gICAgICAgIFJlcGVhdGVkRmllbGRC
dWlsZGVyPE1UeXBlLCBCVHlwZSwgSVR5cGU+IGJ1aWxkZXIpIHsKLSAgICAgIHRoaXMuYnVpbGRl
ciA9IGJ1aWxkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBzaXpl
KCkgewotICAgICAgcmV0dXJuIHRoaXMuYnVpbGRlci5nZXRDb3VudCgpOwotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBCVHlwZSBnZXQoaW50IGluZGV4KSB7Ci0gICAgICByZXR1
cm4gYnVpbGRlci5nZXRCdWlsZGVyKGluZGV4KTsKLSAgICB9Ci0KLSAgICB2b2lkIGluY3JlbWVu
dE1vZENvdW50KCkgewotICAgICAgbW9kQ291bnQrKzsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAg
ICogUHJvdmlkZXMgYSBsaXZlIHZpZXcgb2YgdGhlIGJ1aWxkZXIgYXMgYSBsaXN0IG9mIGJ1aWxk
ZXJzLgotICAgKgotICAgKiBAcGFyYW0gPE1UeXBlPiB0aGUgdHlwZSBvZiBtZXNzYWdlIGZvciB0
aGUgZmllbGQKLSAgICogQHBhcmFtIDxCVHlwZT4gdGhlIHR5cGUgb2YgYnVpbGRlciBmb3IgdGhl
IGZpZWxkCi0gICAqIEBwYXJhbSA8SVR5cGU+IHRoZSBjb21tb24gaW50ZXJmYWNlIGZvciB0aGUg
bWVzc2FnZSBhbmQgdGhlIGJ1aWxkZXIKLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE1l
c3NhZ2VPckJ1aWxkZXJFeHRlcm5hbExpc3Q8Ci0gICAgICBNVHlwZSBleHRlbmRzIEdlbmVyYXRl
ZE1lc3NhZ2UsCi0gICAgICBCVHlwZSBleHRlbmRzIEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlciwK
LSAgICAgIElUeXBlIGV4dGVuZHMgTWVzc2FnZU9yQnVpbGRlcj4KLSAgICAgIGV4dGVuZHMgQWJz
dHJhY3RMaXN0PElUeXBlPiBpbXBsZW1lbnRzIExpc3Q8SVR5cGU+IHsKLQotICAgIFJlcGVhdGVk
RmllbGRCdWlsZGVyPE1UeXBlLCBCVHlwZSwgSVR5cGU+IGJ1aWxkZXI7Ci0KLSAgICBNZXNzYWdl
T3JCdWlsZGVyRXh0ZXJuYWxMaXN0KAotICAgICAgICBSZXBlYXRlZEZpZWxkQnVpbGRlcjxNVHlw
ZSwgQlR5cGUsIElUeXBlPiBidWlsZGVyKSB7Ci0gICAgICB0aGlzLmJ1aWxkZXIgPSBidWlsZGVy
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICAg
IHJldHVybiB0aGlzLmJ1aWxkZXIuZ2V0Q291bnQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgSVR5cGUgZ2V0KGludCBpbmRleCkgewotICAgICAgcmV0dXJuIGJ1aWxkZXIu
Z2V0TWVzc2FnZU9yQnVpbGRlcihpbmRleCk7Ci0gICAgfQotCi0gICAgdm9pZCBpbmNyZW1lbnRN
b2RDb3VudCgpIHsKLSAgICAgIG1vZENvdW50Kys7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvUm9wZUJ5dGVTdHJp
bmcuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Sb3Bl
Qnl0ZVN0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNlOWJkMTVl
YWEwODk5NGNiMTMxMjJlZmRhZmEzZDM2MzhhZWQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9Sb3BlQnl0ZVN0cmluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODk2ICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29n
bGUucHJvdG9idWY7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1w
b3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWlt
cG9ydCBqYXZhLmlvLkludmFsaWRPYmplY3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PYmpl
Y3RJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZh
Lm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9y
dCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQg
amF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEu
dXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQot
LyoqCi0gKiBDbGFzcyB0byByZXByZXNlbnQge0Bjb2RlIEJ5dGVTdHJpbmdzfSBmb3JtZWQgYnkg
Y29uY2F0ZW5hdGlvbiBvZiBvdGhlcgotICogQnl0ZVN0cmluZ3MsIHdpdGhvdXQgY29weWluZyB0
aGUgZGF0YSBpbiB0aGUgcGllY2VzLiBUaGUgY29uY2F0ZW5hdGlvbiBpcwotICogcmVwcmVzZW50
ZWQgYXMgYSB0cmVlIHdob3NlIGxlYWYgbm9kZXMgYXJlIGVhY2ggYQotICoge0BsaW5rIGNvbS5n
b29nbGUucHJvdG9idWYuQnl0ZVN0cmluZy5MZWFmQnl0ZVN0cmluZ30uCi0gKgotICogPHA+TW9z
dCBvZiB0aGUgb3BlcmF0aW9uIGhlcmUgaXMgaW5zcGlyZWQgYnkgdGhlIG5vdy1mYW1vdXMgcGFw
ZXIgPGEKLSAqIGhyZWY9Imh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA2MDIwMjAxNTQ1
Ni9odHRwOi8vd3d3LmNzLnViYy5jYS9sb2NhbC9yZWFkaW5nL3Byb2NlZWRpbmdzL3NwZTkxLTk1
L3NwZS92b2wyNS9pc3N1ZTEyL3NwZTk4Ni5wZGYiPgotICogQkFQOTUgPC9hPiBSb3BlczogYW4g
QWx0ZXJuYXRpdmUgdG8gU3RyaW5ncyBoYW5zLWouIGJvZWhtLCBydXNzIGF0a2luc29uIGFuZAot
ICogbWljaGFlbCBwbGFzcwotICoKLSAqIDxwPlRoZSBhbGdvcml0aG1zIGRlc2NyaWJlZCBpbiB0
aGUgcGFwZXIgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGZvciBjaGFyYWN0ZXIKLSAqIHN0cmluZ3Mg
aW4ge0Bjb2RlIGNvbS5nb29nbGUuY29tbW9uLnN0cmluZy5Sb3BlfSBhbmQgaW4gdGhlIGMrKyBj
bGFzcyB7QGNvZGUKLSAqIGNvcmQuY2N9LgotICoKLSAqIDxwPkZ1bmRhbWVudGFsbHkgdGhlIFJv
cGUgYWxnb3JpdGhtIHJlcHJlc2VudHMgdGhlIGNvbGxlY3Rpb24gb2YgcGllY2VzIGFzIGEKLSAq
IGJpbmFyeSB0cmVlLiBCQVA5NSB1c2VzIGEgRmlib25hY2NpIGJvdW5kIHJlbGF0aW5nIGRlcHRo
IHRvIGEgbWluaW11bQotICogc2VxdWVuY2UgbGVuZ3RoLCBzZXF1ZW5jZXMgdGhhdCBhcmUgdG9v
IHNob3J0IHJlbGF0aXZlIHRvIHRoZWlyIGRlcHRoIGNhdXNlIGEKLSAqIHRyZWUgcmViYWxhbmNl
LiAgTW9yZSBwcmVjaXNlbHksIGEgdHJlZSBvZiBkZXB0aCBkIGlzICJiYWxhbmNlZCIgaW4gdGhl
Ci0gKiB0ZXJtaW5vbG9neSBvZiBCQVA5NSBpZiBpdHMgbGVuZ3RoIGlzIGF0IGxlYXN0IEYoZCsy
KSwgd2hlcmUgRihuKSBpcyB0aGUKLSAqIG4tdGhlIEZpYm9uYWNjaSBudW1iZXIuIFRodXMgZm9y
IGRlcHRocyAwLCAxLCAyLCAzLCA0LCA1LC4uLiB3ZSBoYXZlIG1pbmltdW0KLSAqIGxlbmd0aHMg
MSwgMiwgMywgNSwgOCwgMTMsLi4uCi0gKgotICogQGF1dGhvciBjYXJsYW50b25AZ29vZ2xlLmNv
bSAoQ2FybCBIYXZlcmwpCi0gKi8KLWZpbmFsIGNsYXNzIFJvcGVCeXRlU3RyaW5nIGV4dGVuZHMg
Qnl0ZVN0cmluZyB7Ci0KLSAgLyoqCi0gICAqIEJBUDk1LiBMZXQgRm4gYmUgdGhlIG50aCBGaWJv
bmFjY2kgbnVtYmVyLiBBIHtAbGluayBSb3BlQnl0ZVN0cmluZ30gb2YKLSAgICogZGVwdGggbiBp
cyAiYmFsYW5jZWQiLCBpLmUgZmxhdCBlbm91Z2gsIGlmIGl0cyBsZW5ndGggaXMgYXQgbGVhc3Qg
Rm4rMiwKLSAgICogZS5nLiBhICJiYWxhbmNlZCIge0BsaW5rIFJvcGVCeXRlU3RyaW5nfSBvZiBk
ZXB0aCAxIG11c3QgaGF2ZSBsZW5ndGggYXQKLSAgICogbGVhc3QgMiwgb2YgZGVwdGggNCBtdXN0
IGhhdmUgbGVuZ3RoID49IDgsIGV0Yy4KLSAgICoKLSAgICogPHA+VGhlcmUncyBub3RoaW5nIHNw
ZWNpYWwgYWJvdXQgdXNpbmcgdGhlIEZpYm9uYWNjaSBudW1iZXJzIGZvciB0aGlzLCBidXQKLSAg
ICogdGhleSBhcmUgYSByZWFzb25hYmxlIHNlcXVlbmNlIGZvciBlbmNhcHN1bGF0aW5nIHRoZSBp
ZGVhIHRoYXQgd2UgYXJlIE9LCi0gICAqIHdpdGggbG9uZ2VyIHN0cmluZ3MgYmVpbmcgZW5jb2Rl
ZCBpbiBkZWVwZXIgYmluYXJ5IHRyZWVzLgotICAgKgotICAgKiA8cD5Gb3IgMzItYml0IGludGVn
ZXJzLCB0aGlzIGFycmF5IGhhcyBsZW5ndGggNDYuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnRbXSBtaW5MZW5ndGhCeURlcHRoOwotCi0gIHN0YXRpYyB7Ci0gICAgLy8gRHluYW1p
Y2FsbHkgZ2VuZXJhdGUgdGhlIGxpc3Qgb2YgRmlib25hY2NpIG51bWJlcnMgdGhlIGZpcnN0IHRp
bWUgdGhpcwotICAgIC8vIGNsYXNzIGlzIGFjY2Vzc2VkLgotICAgIExpc3Q8SW50ZWdlcj4gbnVt
YmVycyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKLQotICAgIC8vIHdlIHNraXAgdGhlIGZp
cnN0IEZpYm9uYWNjaSBudW1iZXIgKDEpLiAgU28gaW5zdGVhZCBvZjogMSAxIDIgMyA1IDggLi4u
Ci0gICAgLy8gd2UgaGF2ZTogMSAyIDMgNSA4IC4uLgotICAgIGludCBmMSA9IDE7Ci0gICAgaW50
IGYyID0gMTsKLQotICAgIC8vIGdldCBhbGwgdGhlIHZhbHVlcyB1bnRpbCB3ZSByb2xsIG92ZXIu
Ci0gICAgd2hpbGUgKGYyID4gMCkgewotICAgICAgbnVtYmVycy5hZGQoZjIpOwotICAgICAgaW50
IHRlbXAgPSBmMSArIGYyOwotICAgICAgZjEgPSBmMjsKLSAgICAgIGYyID0gdGVtcDsKLSAgICB9
Ci0KLSAgICAvLyB3ZSBpbmNsdWRlIHRoaXMgaGVyZSBzbyB0aGF0IHdlIGNhbiBpbmRleCB0aGlz
IGFycmF5IHRvIFt4ICsgMV0gaW4gdGhlCi0gICAgLy8gbG9vcHMgYmVsb3cuCi0gICAgbnVtYmVy
cy5hZGQoSW50ZWdlci5NQVhfVkFMVUUpOwotICAgIG1pbkxlbmd0aEJ5RGVwdGggPSBuZXcgaW50
W251bWJlcnMuc2l6ZSgpXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbkxlbmd0aEJ5RGVw
dGgubGVuZ3RoOyBpKyspIHsKLSAgICAgIC8vIHVuYm94IGFsbCB0aGUgdmFsdWVzCi0gICAgICBt
aW5MZW5ndGhCeURlcHRoW2ldID0gbnVtYmVycy5nZXQoaSk7Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSBmaW5hbCBpbnQgdG90YWxMZW5ndGg7Ci0gIHByaXZhdGUgZmluYWwgQnl0ZVN0cmluZyBs
ZWZ0OwotICBwcml2YXRlIGZpbmFsIEJ5dGVTdHJpbmcgcmlnaHQ7Ci0gIHByaXZhdGUgZmluYWwg
aW50IGxlZnRMZW5ndGg7Ci0gIHByaXZhdGUgZmluYWwgaW50IHRyZWVEZXB0aDsKLQotICAvKioK
LSAgICogQ3JlYXRlIGEgbmV3IFJvcGVCeXRlU3RyaW5nLCB3aGljaCBjYW4gYmUgdGhvdWdodCBv
ZiBhcyBhIG5ldyB0cmVlIG5vZGUsIGJ5Ci0gICAqIHJlY29yZGluZyByZWZlcmVuY2VzIHRvIHRo
ZSB0d28gZ2l2ZW4gc3RyaW5ncy4KLSAgICoKLSAgICogQHBhcmFtIGxlZnQgIHN0cmluZyBvbiB0
aGUgbGVmdCBvZiB0aGlzIG5vZGUsIHNob3VsZCBoYXZlIHtAY29kZSBzaXplKCkgPgotICAgKiAg
ICAgICAgICAgICAgMH0KLSAgICogQHBhcmFtIHJpZ2h0IHN0cmluZyBvbiB0aGUgcmlnaHQgb2Yg
dGhpcyBub2RlLCBzaG91bGQgaGF2ZSB7QGNvZGUgc2l6ZSgpID4KLSAgICogICAgICAgICAgICAg
IDB9Ci0gICAqLwotICBwcml2YXRlIFJvcGVCeXRlU3RyaW5nKEJ5dGVTdHJpbmcgbGVmdCwgQnl0
ZVN0cmluZyByaWdodCkgewotICAgIHRoaXMubGVmdCA9IGxlZnQ7Ci0gICAgdGhpcy5yaWdodCA9
IHJpZ2h0OwotICAgIGxlZnRMZW5ndGggPSBsZWZ0LnNpemUoKTsKLSAgICB0b3RhbExlbmd0aCA9
IGxlZnRMZW5ndGggKyByaWdodC5zaXplKCk7Ci0gICAgdHJlZURlcHRoID0gTWF0aC5tYXgobGVm
dC5nZXRUcmVlRGVwdGgoKSwgcmlnaHQuZ2V0VHJlZURlcHRoKCkpICsgMTsKLSAgfQotCi0gIC8q
KgotICAgKiBDb25jYXRlbmF0ZSB0aGUgZ2l2ZW4gc3RyaW5ncyB3aGlsZSBwZXJmb3JtaW5nIHZh
cmlvdXMgb3B0aW1pemF0aW9ucyB0bwotICAgKiBzbG93IHRoZSBncm93dGggcmF0ZSBvZiB0cmVl
IGRlcHRoIGFuZCB0cmVlIG5vZGUgY291bnQuIFRoZSByZXN1bHQgaXMKLSAgICogZWl0aGVyIGEg
e0BsaW5rIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZy5MZWFmQnl0ZVN0cmluZ30gb3Ig
YQotICAgKiB7QGxpbmsgUm9wZUJ5dGVTdHJpbmd9IGRlcGVuZGluZyBvbiB3aGljaCBvcHRpbWl6
YXRpb25zLCBpZiBhbnksIHdlcmUKLSAgICogYXBwbGllZC4KLSAgICoKLSAgICogPHA+U21hbGwg
cGllY2VzIG9mIGxlbmd0aCBsZXNzIHRoYW4ge0BsaW5rCi0gICAqIEJ5dGVTdHJpbmcjQ09OQ0FU
RU5BVEVfQllfQ09QWV9TSVpFfSBtYXkgYmUgY29waWVkIGJ5IHZhbHVlIGhlcmUsIGFzIGluCi0g
ICAqIEJBUDk1LiAgTGFyZ2UgcGllY2VzIGFyZSByZWZlcmVuY2VkIHdpdGhvdXQgY29weS4KLSAg
ICoKLSAgICogQHBhcmFtIGxlZnQgIHN0cmluZyBvbiB0aGUgbGVmdAotICAgKiBAcGFyYW0gcmln
aHQgc3RyaW5nIG9uIHRoZSByaWdodAotICAgKiBAcmV0dXJuIGNvbmNhdGVuYXRpb24gcmVwcmVz
ZW50aW5nIHRoZSBzYW1lIHNlcXVlbmNlIGFzIHRoZSBnaXZlbiBzdHJpbmdzCi0gICAqLwotICBz
dGF0aWMgQnl0ZVN0cmluZyBjb25jYXRlbmF0ZShCeXRlU3RyaW5nIGxlZnQsIEJ5dGVTdHJpbmcg
cmlnaHQpIHsKLSAgICBpZiAocmlnaHQuc2l6ZSgpID09IDApIHsKLSAgICAgIHJldHVybiBsZWZ0
OwotICAgIH0KLQotICAgIGlmIChsZWZ0LnNpemUoKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gcmln
aHQ7Ci0gICAgfQotCi0gICAgZmluYWwgaW50IG5ld0xlbmd0aCA9IGxlZnQuc2l6ZSgpICsgcmln
aHQuc2l6ZSgpOwotICAgIGlmIChuZXdMZW5ndGggPCBCeXRlU3RyaW5nLkNPTkNBVEVOQVRFX0JZ
X0NPUFlfU0laRSkgewotICAgICAgLy8gT3B0aW1pemF0aW9uIGZyb20gQkFQOTU6IEZvciBzaG9y
dCAobGVhdmVzIGluIHBhcGVyLCBidXQganVzdCBzaG9ydAotICAgICAgLy8gaGVyZSkgdG90YWwg
bGVuZ3RoLCBkbyBhIGNvcHkgb2YgZGF0YSB0byBhIG5ldyBsZWFmLgotICAgICAgcmV0dXJuIGNv
bmNhdGVuYXRlQnl0ZXMobGVmdCwgcmlnaHQpOwotICAgIH0KLQotICAgIGlmIChsZWZ0IGluc3Rh
bmNlb2YgUm9wZUJ5dGVTdHJpbmcpIHsKLSAgICAgIGZpbmFsIFJvcGVCeXRlU3RyaW5nIGxlZnRS
b3BlID0gKFJvcGVCeXRlU3RyaW5nKSBsZWZ0OwotICAgICAgaWYgKGxlZnRSb3BlLnJpZ2h0LnNp
emUoKSArIHJpZ2h0LnNpemUoKSA8IENPTkNBVEVOQVRFX0JZX0NPUFlfU0laRSkgewotICAgICAg
ICAvLyBPcHRpbWl6YXRpb24gZnJvbSBCQVA5NTogQXMgYW4gb3B0aW1pemF0aW9uIG9mIHRoZSBj
YXNlIHdoZXJlIHRoZQotICAgICAgICAvLyBCeXRlU3RyaW5nIGlzIGNvbnN0cnVjdGVkIGJ5IHJl
cGVhdGVkIGNvbmNhdGVuYXRlLCByZWNvZ25pemUgdGhlIGNhc2UKLSAgICAgICAgLy8gd2hlcmUg
YSBzaG9ydCBzdHJpbmcgaXMgY29uY2F0ZW5hdGVkIHRvIGEgbGVmdC1oYW5kIG5vZGUgd2hvc2UK
LSAgICAgICAgLy8gcmlnaHQtaGFuZCBicmFuY2ggaXMgc2hvcnQuICBJbiB0aGUgcGFwZXIgdGhp
cyBhcHBsaWVzIHRvIGxlYXZlcywgYnV0Ci0gICAgICAgIC8vIHdlIGp1c3QgbG9vayBhdCB0aGUg
bGVuZ3RoIGhlcmUuIFRoaXMgaGFzIHRoZSBhZHZhbnRhZ2Ugb2Ygc2hlZGRpbmcKLSAgICAgICAg
Ly8gcmVmZXJlbmNlcyB0byB1bm5lZWRlZCBkYXRhIHdoZW4gc3Vic3RyaW5ncyBoYXZlIGJlZW4g
dGFrZW4uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gd2UgcmVjb2duaXplIHRoaXMgY2Fz
ZSwgd2UgZG8gYSBjb3B5IG9mIHRoZSBkYXRhIGFuZCBjcmVhdGUgYQotICAgICAgICAvLyBuZXcg
cGFyZW50IG5vZGUgc28gdGhhdCB0aGUgZGVwdGggb2YgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBh
cyB0aGUKLSAgICAgICAgLy8gZ2l2ZW4gbGVmdCB0cmVlLgotICAgICAgICBCeXRlU3RyaW5nIG5l
d1JpZ2h0ID0gY29uY2F0ZW5hdGVCeXRlcyhsZWZ0Um9wZS5yaWdodCwgcmlnaHQpOwotICAgICAg
ICByZXR1cm4gbmV3IFJvcGVCeXRlU3RyaW5nKGxlZnRSb3BlLmxlZnQsIG5ld1JpZ2h0KTsKLSAg
ICAgIH0KLQotICAgICAgaWYgKGxlZnRSb3BlLmxlZnQuZ2V0VHJlZURlcHRoKCkgPiBsZWZ0Um9w
ZS5yaWdodC5nZXRUcmVlRGVwdGgoKQotICAgICAgICAgICYmIGxlZnRSb3BlLmdldFRyZWVEZXB0
aCgpID4gcmlnaHQuZ2V0VHJlZURlcHRoKCkpIHsKLSAgICAgICAgLy8gVHlwaWNhbGx5IGZvciBj
b25jYXRlbmF0ZS1idWlsdCBzdHJpbmdzIHRoZSBsZWZ0LXNpZGUgaXMgZGVlcGVyIHRoYW4KLSAg
ICAgICAgLy8gdGhlIHJpZ2h0LiAgVGhpcyBpcyBvdXIgZmluYWwgYXR0ZW1wdCB0byBjb25jYXRl
bmF0ZSB3aXRob3V0Ci0gICAgICAgIC8vIGluY3JlYXNpbmcgdGhlIHRyZWUgZGVwdGguICBXZSds
bCByZWRvIHRoZSBub2RlIG9uIHRoZSBSSFMuICBUaGlzCi0gICAgICAgIC8vIGlzIHlldCBhbm90
aGVyIG9wdGltaXphdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHN0cmluZyBieSByZXBlYXRlZGx5Ci0g
ICAgICAgIC8vIGNvbmNhdGVuYXRpbmcgb24gdGhlIHJpZ2h0LgotICAgICAgICBCeXRlU3RyaW5n
IG5ld1JpZ2h0ID0gbmV3IFJvcGVCeXRlU3RyaW5nKGxlZnRSb3BlLnJpZ2h0LCByaWdodCk7Ci0g
ICAgICAgIHJldHVybiBuZXcgUm9wZUJ5dGVTdHJpbmcobGVmdFJvcGUubGVmdCwgbmV3UmlnaHQp
OwotICAgICAgfQotICAgIH0KLQotICAgIC8vIEZpbmUsIHdlJ2xsIGFkZCBhIG5vZGUgYW5kIGlu
Y3JlYXNlIHRoZSB0cmVlIGRlcHRoLS11bmxlc3Mgd2UgcmViYWxhbmNlIDteKQotICAgIGludCBu
ZXdEZXB0aCA9IE1hdGgubWF4KGxlZnQuZ2V0VHJlZURlcHRoKCksIHJpZ2h0LmdldFRyZWVEZXB0
aCgpKSArIDE7Ci0gICAgaWYgKG5ld0xlbmd0aCA+PSBtaW5MZW5ndGhCeURlcHRoW25ld0RlcHRo
XSkgewotICAgICAgLy8gVGhlIHRyZWUgaXMgc2hhbGxvdyBlbm91Z2gsIHNvIGRvbid0IHJlYmFs
YW5jZQotICAgICAgcmV0dXJuIG5ldyBSb3BlQnl0ZVN0cmluZyhsZWZ0LCByaWdodCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG5ldyBCYWxhbmNlcigpLmJhbGFuY2UobGVmdCwgcmlnaHQpOwotICB9
Ci0KLSAgLyoqCi0gICAqIENvbmNhdGVuYXRlcyB0d28gc3RyaW5ncyBieSBjb3B5aW5nIGRhdGEg
dmFsdWVzLiBUaGlzIGlzIGNhbGxlZCBpbiBhIGZldwotICAgKiBjYXNlcyBpbiBvcmRlciB0byBy
ZWR1Y2UgdGhlIGdyb3d0aCBvZiB0aGUgbnVtYmVyIG9mIHRyZWUgbm9kZXMuCi0gICAqCi0gICAq
IEBwYXJhbSBsZWZ0ICBzdHJpbmcgb24gdGhlIGxlZnQKLSAgICogQHBhcmFtIHJpZ2h0IHN0cmlu
ZyBvbiB0aGUgcmlnaHQKLSAgICogQHJldHVybiBzdHJpbmcgZm9ybWVkIGJ5IGNvcHlpbmcgZGF0
YSBieXRlcwotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgQnl0ZVN0cmluZyBjb25jYXRlbmF0ZUJ5
dGVzKEJ5dGVTdHJpbmcgbGVmdCwKLSAgICAgIEJ5dGVTdHJpbmcgcmlnaHQpIHsKLSAgICBpbnQg
bGVmdFNpemUgPSBsZWZ0LnNpemUoKTsKLSAgICBpbnQgcmlnaHRTaXplID0gcmlnaHQuc2l6ZSgp
OwotICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW2xlZnRTaXplICsgcmlnaHRTaXplXTsKLSAg
ICBsZWZ0LmNvcHlUbyhieXRlcywgMCwgMCwgbGVmdFNpemUpOwotICAgIHJpZ2h0LmNvcHlUbyhi
eXRlcywgMCwgbGVmdFNpemUsIHJpZ2h0U2l6ZSk7Ci0gICAgcmV0dXJuIEJ5dGVTdHJpbmcud3Jh
cChieXRlcyk7ICAvLyBDb25zdHJ1Y3RvciB3cmFwcyBieXRlcwotICB9Ci0KLSAgLyoqCi0gICAq
IENyZWF0ZSBhIG5ldyBSb3BlQnl0ZVN0cmluZyBmb3IgdGVzdGluZyBvbmx5IHdoaWxlIGJ5cGFz
c2luZyBhbGwgdGhlCi0gICAqIGRlZmVuc2VzIG9mIHtAbGluayAjY29uY2F0ZW5hdGUoQnl0ZVN0
cmluZywgQnl0ZVN0cmluZyl9LiBUaGlzIGFsbG93cwotICAgKiB0ZXN0aW5nIHRyZWVzIG9mIHNw
ZWNpZmljIHN0cnVjdHVyZS4gV2UgYXJlIGFsc28gYWJsZSB0byBpbnNlcnQgZW1wdHkKLSAgICog
bGVhdmVzLCB0aG91Z2ggdGhlc2UgYXJlIGRpcy1hbGxvd2VkLCBzbyB0aGF0IHdlIGNhbiBtYWtl
IHN1cmUgdGhlCi0gICAqIGltcGxlbWVudGF0aW9uIGNhbiB3aXRoc3RhbmQgdGhlaXIgcHJlc2Vu
Y2UuCi0gICAqCi0gICAqIEBwYXJhbSBsZWZ0ICBzdHJpbmcgb24gdGhlIGxlZnQgb2YgdGhpcyBu
b2RlCi0gICAqIEBwYXJhbSByaWdodCBzdHJpbmcgb24gdGhlIHJpZ2h0IG9mIHRoaXMgbm9kZQot
ICAgKiBAcmV0dXJuIGFuIHVuc2FmZSBpbnN0YW5jZSBmb3IgdGVzdGluZyBvbmx5Ci0gICAqLwot
ICBzdGF0aWMgUm9wZUJ5dGVTdHJpbmcgbmV3SW5zdGFuY2VGb3JUZXN0KEJ5dGVTdHJpbmcgbGVm
dCwgQnl0ZVN0cmluZyByaWdodCkgewotICAgIHJldHVybiBuZXcgUm9wZUJ5dGVTdHJpbmcobGVm
dCwgcmlnaHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGJ5dGUgYXQgdGhlIGdpdmVu
IGluZGV4LgotICAgKiBUaHJvd3Mge0BsaW5rIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlv
bn0gZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5Ci0gICAqIHJlYXNvbnMgYWx0aG91Z2ggaXQg
d291bGQgbW9yZSBwcm9wZXJseSBiZSB7QGxpbmsKLSAgICogSW5kZXhPdXRPZkJvdW5kc0V4Y2Vw
dGlvbn0uCi0gICAqCi0gICAqIEBwYXJhbSBpbmRleCBpbmRleCBvZiBieXRlCi0gICAqIEByZXR1
cm4gdGhlIHZhbHVlCi0gICAqIEB0aHJvd3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9u
IHtAY29kZSBpbmRleH0gaXMgPCAwIG9yID49IHNpemUKLSAgICovCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgYnl0ZSBieXRlQXQoaW50IGluZGV4KSB7Ci0gICAgY2hlY2tJbmRleChpbmRleCwgdG90
YWxMZW5ndGgpOwotCi0gICAgLy8gRmluZCB0aGUgcmVsZXZhbnQgcGllY2UgYnkgcmVjdXJzaXZl
IGRlc2NlbnQKLSAgICBpZiAoaW5kZXggPCBsZWZ0TGVuZ3RoKSB7Ci0gICAgICByZXR1cm4gbGVm
dC5ieXRlQXQoaW5kZXgpOwotICAgIH0KLQotICAgIHJldHVybiByaWdodC5ieXRlQXQoaW5kZXgg
LSBsZWZ0TGVuZ3RoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IHNpemUoKSB7
Ci0gICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUGll
Y2VzCi0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCBpbnQgZ2V0VHJlZURlcHRoKCkgewotICAg
IHJldHVybiB0cmVlRGVwdGg7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiB0aGUg
dHJlZSBpcyBiYWxhbmNlZCBhY2NvcmRpbmcgdG8gQkFQOTUsIHdoaWNoIG1lYW5zIHRoZSB0cmVl
Ci0gICAqIGlzIGZsYXQtZW5vdWdoIHdpdGggcmVzcGVjdCB0byB0aGUgYm91bmRzLiBOb3RlIHRo
YXQgdGhpcyBkZWZpbml0aW9uIG9mCi0gICAqIGJhbGFuY2VkIGlzIG9uZSB3aGVyZSBzdWItdHJl
ZXMgb2YgYmFsYW5jZWQgdHJlZXMgYXJlIG5vdCBuZWNlc3NhcmlseQotICAgKiBiYWxhbmNlZC4K
LSAgICoKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0cmVlIGlzIGJhbGFuY2VkCi0gICAqLwot
ICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIGJvb2xlYW4gaXNCYWxhbmNlZCgpIHsKLSAgICByZXR1
cm4gdG90YWxMZW5ndGggPj0gbWluTGVuZ3RoQnlEZXB0aFt0cmVlRGVwdGhdOwotICB9Ci0KLSAg
LyoqCi0gICAqIFRha2VzIGEgc3Vic3RyaW5nIG9mIHRoaXMgb25lLiBUaGlzIGludm9sdmVzIHJl
Y3Vyc2l2ZSBkZXNjZW50IGFsb25nIHRoZQotICAgKiBsZWZ0IGFuZCByaWdodCBlZGdlcyBvZiB0
aGUgc3Vic3RyaW5nLCBhbmQgcmVmZXJlbmNpbmcgYW55IHdob2xseSBjb250YWluZWQKLSAgICog
c2VnbWVudHMgaW4gYmV0d2Vlbi4gQW55IGxlYWYgbm9kZXMgZW50aXJlbHkgdW5pbnZvbHZlZCBp
biB0aGUgc3Vic3RyaW5nCi0gICAqIHdpbGwgbm90IGJlIHJlZmVyZW5jZWQgYnkgdGhlIHN1YnN0
cmluZy4KLSAgICoKLSAgICogPHA+U3Vic3RyaW5ncyBvZiB7QGNvZGUgbGVuZ3RoIDwgMn0gc2hv
dWxkIHJlc3VsdCBpbiBhdCBtb3N0IGEgc2luZ2xlCi0gICAqIHJlY3Vyc2l2ZSBjYWxsIGNoYWlu
LCB0ZXJtaW5hdGluZyBhdCBhIGxlYWYgbm9kZS4gVGh1cyB0aGUgcmVzdWx0IHdpbGwgYmUgYQot
ICAgKiB7QGxpbmsgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nLkxlYWZCeXRlU3RyaW5n
fS4KLSAgICoKLSAgICogQHBhcmFtIGJlZ2luSW5kZXggc3RhcnQgYXQgdGhpcyBpbmRleAotICAg
KiBAcGFyYW0gZW5kSW5kZXggICB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgdGhlIG9uZSBiZWZvcmUg
dGhpcyBpbmRleAotICAgKiBAcmV0dXJuIHN1YnN0cmluZyBsZWFmIG5vZGUgb3IgdHJlZQotICAg
Ki8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBCeXRlU3RyaW5nIHN1YnN0cmluZyhpbnQgYmVnaW5J
bmRleCwgaW50IGVuZEluZGV4KSB7Ci0gICAgZmluYWwgaW50IGxlbmd0aCA9IGNoZWNrUmFuZ2Uo
YmVnaW5JbmRleCwgZW5kSW5kZXgsIHRvdGFsTGVuZ3RoKTsKLQotICAgIGlmIChsZW5ndGggPT0g
MCkgewotICAgICAgLy8gRW1wdHkgc3Vic3RyaW5nCi0gICAgICByZXR1cm4gQnl0ZVN0cmluZy5F
TVBUWTsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoID09IHRvdGFsTGVuZ3RoKSB7Ci0gICAgICAv
LyBUaGUgd2hvbGUgc3RyaW5nCi0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvLyBQ
cm9wZXIgc3Vic3RyaW5nCi0gICAgaWYgKGVuZEluZGV4IDw9IGxlZnRMZW5ndGgpIHsKLSAgICAg
IC8vIFN1YnN0cmluZyBvbiB0aGUgbGVmdAotICAgICAgcmV0dXJuIGxlZnQuc3Vic3RyaW5nKGJl
Z2luSW5kZXgsIGVuZEluZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAoYmVnaW5JbmRleCA+PSBsZWZ0
TGVuZ3RoKSB7Ci0gICAgICAvLyBTdWJzdHJpbmcgb24gdGhlIHJpZ2h0Ci0gICAgICByZXR1cm4g
cmlnaHQuc3Vic3RyaW5nKGJlZ2luSW5kZXggLSBsZWZ0TGVuZ3RoLCBlbmRJbmRleCAtIGxlZnRM
ZW5ndGgpOwotICAgIH0KLQotICAgIC8vIFNwbGl0IHN1YnN0cmluZwotICAgIEJ5dGVTdHJpbmcg
bGVmdFN1YiA9IGxlZnQuc3Vic3RyaW5nKGJlZ2luSW5kZXgpOwotICAgIEJ5dGVTdHJpbmcgcmln
aHRTdWIgPSByaWdodC5zdWJzdHJpbmcoMCwgZW5kSW5kZXggLSBsZWZ0TGVuZ3RoKTsKLSAgICAv
LyBJbnRlbnRpb25hbGx5IG5vdCByZWJhbGFuY2luZywgc2luY2UgaW4gbWFueSBjYXNlcyB0aGVz
ZSB0d28KLSAgICAvLyBzdWJzdHJpbmdzIHdpbGwgYWxyZWFkeSBiZSBsZXNzIGRlZXAgdGhhbiB0
aGUgdG9wLWxldmVsCi0gICAgLy8gUm9wZUJ5dGVTdHJpbmcgd2UncmUgdGFraW5nIGEgc3Vic3Ry
aW5nIG9mLgotICAgIHJldHVybiBuZXcgUm9wZUJ5dGVTdHJpbmcobGVmdFN1YiwgcmlnaHRTdWIp
OwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQnl0ZVN0cmluZyAtPiBieXRlW10KLQotICBA
T3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgY29weVRvSW50ZXJuYWwoYnl0ZVtdIHRhcmdldCwg
aW50IHNvdXJjZU9mZnNldCwKLSAgICAgIGludCB0YXJnZXRPZmZzZXQsIGludCBudW1iZXJUb0Nv
cHkpIHsKLSAgIGlmIChzb3VyY2VPZmZzZXQgKyBudW1iZXJUb0NvcHkgPD0gbGVmdExlbmd0aCkg
ewotICAgICAgbGVmdC5jb3B5VG9JbnRlcm5hbCh0YXJnZXQsIHNvdXJjZU9mZnNldCwgdGFyZ2V0
T2Zmc2V0LCBudW1iZXJUb0NvcHkpOwotICAgIH0gZWxzZSBpZiAoc291cmNlT2Zmc2V0ID49IGxl
ZnRMZW5ndGgpIHsKLSAgICAgIHJpZ2h0LmNvcHlUb0ludGVybmFsKHRhcmdldCwgc291cmNlT2Zm
c2V0IC0gbGVmdExlbmd0aCwgdGFyZ2V0T2Zmc2V0LAotICAgICAgICAgIG51bWJlclRvQ29weSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIGludCBsZWZ0TGVuZ3RoID0gdGhpcy5sZWZ0TGVuZ3RoIC0g
c291cmNlT2Zmc2V0OwotICAgICAgbGVmdC5jb3B5VG9JbnRlcm5hbCh0YXJnZXQsIHNvdXJjZU9m
ZnNldCwgdGFyZ2V0T2Zmc2V0LCBsZWZ0TGVuZ3RoKTsKLSAgICAgIHJpZ2h0LmNvcHlUb0ludGVy
bmFsKHRhcmdldCwgMCwgdGFyZ2V0T2Zmc2V0ICsgbGVmdExlbmd0aCwKLSAgICAgICAgICBudW1i
ZXJUb0NvcHkgLSBsZWZ0TGVuZ3RoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgY29weVRvKEJ5dGVCdWZmZXIgdGFyZ2V0KSB7Ci0gICAgbGVmdC5jb3B5VG8odGFy
Z2V0KTsKLSAgICByaWdodC5jb3B5VG8odGFyZ2V0KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgQnl0ZUJ1ZmZlciBhc1JlYWRPbmx5Qnl0ZUJ1ZmZlcigpIHsKLSAgICBCeXRlQnVmZmVy
IGJ5dGVCdWZmZXIgPSBCeXRlQnVmZmVyLndyYXAodG9CeXRlQXJyYXkoKSk7Ci0gICAgcmV0dXJu
IGJ5dGVCdWZmZXIuYXNSZWFkT25seUJ1ZmZlcigpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyBMaXN0PEJ5dGVCdWZmZXI+IGFzUmVhZE9ubHlCeXRlQnVmZmVyTGlzdCgpIHsKLSAgICAv
LyBXYWxrIHRocm91Z2ggdGhlIGxpc3Qgb2YgTGVhZkJ5dGVTdHJpbmcncyB0aGF0IG1ha2UgdXAg
dGhpcwotICAgIC8vIHJvcGUsIGFuZCBhZGQgZWFjaCBvbmUgYXMgYSByZWFkLW9ubHkgQnl0ZUJ1
ZmZlci4KLSAgICBMaXN0PEJ5dGVCdWZmZXI+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8Qnl0ZUJ1
ZmZlcj4oKTsKLSAgICBQaWVjZUl0ZXJhdG9yIHBpZWNlcyA9IG5ldyBQaWVjZUl0ZXJhdG9yKHRo
aXMpOwotICAgIHdoaWxlIChwaWVjZXMuaGFzTmV4dCgpKSB7Ci0gICAgICBMZWFmQnl0ZVN0cmlu
ZyBieXRlU3RyaW5nID0gcGllY2VzLm5leHQoKTsKLSAgICAgIHJlc3VsdC5hZGQoYnl0ZVN0cmlu
Zy5hc1JlYWRPbmx5Qnl0ZUJ1ZmZlcigpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCB3cml0ZVRvKE91dHB1dFN0cmVhbSBvdXRw
dXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgbGVmdC53cml0ZVRvKG91dHB1dFN0
cmVhbSk7Ci0gICAgcmlnaHQud3JpdGVUbyhvdXRwdXRTdHJlYW0pOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHZvaWQgd3JpdGVUb0ludGVybmFsKE91dHB1dFN0cmVhbSBvdXQsIGludCBzb3VyY2VP
ZmZzZXQsCi0gICAgICBpbnQgbnVtYmVyVG9Xcml0ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAg
ICBpZiAoc291cmNlT2Zmc2V0ICsgbnVtYmVyVG9Xcml0ZSA8PSBsZWZ0TGVuZ3RoKSB7Ci0gICAg
ICBsZWZ0LndyaXRlVG9JbnRlcm5hbChvdXQsIHNvdXJjZU9mZnNldCwgbnVtYmVyVG9Xcml0ZSk7
Ci0gICAgfSBlbHNlIGlmIChzb3VyY2VPZmZzZXQgPj0gbGVmdExlbmd0aCkgewotICAgICAgcmln
aHQud3JpdGVUb0ludGVybmFsKG91dCwgc291cmNlT2Zmc2V0IC0gbGVmdExlbmd0aCwgbnVtYmVy
VG9Xcml0ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGludCBudW1iZXJUb1dyaXRlSW5MZWZ0ID0g
bGVmdExlbmd0aCAtIHNvdXJjZU9mZnNldDsKLSAgICAgIGxlZnQud3JpdGVUb0ludGVybmFsKG91
dCwgc291cmNlT2Zmc2V0LCBudW1iZXJUb1dyaXRlSW5MZWZ0KTsKLSAgICAgIHJpZ2h0LndyaXRl
VG9JbnRlcm5hbChvdXQsIDAsIG51bWJlclRvV3JpdGUgLSBudW1iZXJUb1dyaXRlSW5MZWZ0KTsK
LSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgdm9pZCB3cml0ZVRvKEJ5dGVPdXRwdXQgb3V0
cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGxlZnQud3JpdGVUbyhvdXRwdXQpOwotICAg
IHJpZ2h0LndyaXRlVG8ob3V0cHV0KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQg
U3RyaW5nIHRvU3RyaW5nSW50ZXJuYWwoQ2hhcnNldCBjaGFyc2V0KSB7Ci0gICAgcmV0dXJuIG5l
dyBTdHJpbmcodG9CeXRlQXJyYXkoKSwgY2hhcnNldCk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
ICAvLyBVVEYtOCBkZWNvZGluZwotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBpc1Zh
bGlkVXRmOCgpIHsKLSAgICBpbnQgbGVmdFBhcnRpYWwgPSBsZWZ0LnBhcnRpYWxJc1ZhbGlkVXRm
OChVdGY4LkNPTVBMRVRFLCAwLCBsZWZ0TGVuZ3RoKTsKLSAgICBpbnQgc3RhdGUgPSByaWdodC5w
YXJ0aWFsSXNWYWxpZFV0ZjgobGVmdFBhcnRpYWwsIDAsIHJpZ2h0LnNpemUoKSk7Ci0gICAgcmV0
dXJuIHN0YXRlID09IFV0ZjguQ09NUExFVEU7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVj
dGVkIGludCBwYXJ0aWFsSXNWYWxpZFV0ZjgoaW50IHN0YXRlLCBpbnQgb2Zmc2V0LCBpbnQgbGVu
Z3RoKSB7Ci0gICAgaW50IHRvSW5kZXggPSBvZmZzZXQgKyBsZW5ndGg7Ci0gICAgaWYgKHRvSW5k
ZXggPD0gbGVmdExlbmd0aCkgewotICAgICAgcmV0dXJuIGxlZnQucGFydGlhbElzVmFsaWRVdGY4
KHN0YXRlLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChvZmZzZXQgPj0gbGVmdExl
bmd0aCkgewotICAgICAgcmV0dXJuIHJpZ2h0LnBhcnRpYWxJc1ZhbGlkVXRmOChzdGF0ZSwgb2Zm
c2V0IC0gbGVmdExlbmd0aCwgbGVuZ3RoKTsKLSAgICB9IGVsc2UgewotICAgICAgaW50IGxlZnRM
ZW5ndGggPSB0aGlzLmxlZnRMZW5ndGggLSBvZmZzZXQ7Ci0gICAgICBpbnQgbGVmdFBhcnRpYWwg
PSBsZWZ0LnBhcnRpYWxJc1ZhbGlkVXRmOChzdGF0ZSwgb2Zmc2V0LCBsZWZ0TGVuZ3RoKTsKLSAg
ICAgIHJldHVybiByaWdodC5wYXJ0aWFsSXNWYWxpZFV0ZjgobGVmdFBhcnRpYWwsIDAsIGxlbmd0
aCAtIGxlZnRMZW5ndGgpOwotICAgIH0KLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIGVxdWFs
cygpIGFuZCBoYXNoQ29kZSgpCi0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGVxdWFs
cyhPYmplY3Qgb3RoZXIpIHsKLSAgICBpZiAob3RoZXIgPT0gdGhpcykgewotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgQnl0ZVN0cmluZykpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBCeXRlU3RyaW5nIG90aGVyQnl0ZVN0
cmluZyA9IChCeXRlU3RyaW5nKSBvdGhlcjsKLSAgICBpZiAodG90YWxMZW5ndGggIT0gb3RoZXJC
eXRlU3RyaW5nLnNpemUoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAo
dG90YWxMZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8g
WW91IGRvbid0IHJlYWxseSB3YW50IHRvIGJlIGNhbGxpbmcgZXF1YWxzIG9uIGxvbmcgc3RyaW5n
cywgYnV0IHNpbmNlCi0gICAgLy8gd2UgY2FjaGUgdGhlIGhhc2hDb2RlLCB3ZSBlZmZlY3RpdmVs
eSBjYWNoZSBpbmVxdWFsaXR5LiBXZSB1c2UgdGhlIGNhY2hlZAotICAgIC8vIGhhc2hDb2RlIGlm
IGl0J3MgYWxyZWFkeSBjb21wdXRlZC4gIEl0J3MgYXJndWFibGUgd2Ugc2hvdWxkIGNvbXB1dGUg
dGhlCi0gICAgLy8gaGFzaENvZGUgaGVyZSwgYW5kIGlmIHdlJ3JlIGdvaW5nIHRvIGJlIHRlc3Rp
bmcgYSBidW5jaCBvZiBieXRlU3RyaW5ncywKLSAgICAvLyBpdCBtaWdodCBldmVuIG1ha2Ugc2Vu
c2UuCi0gICAgaW50IHRoaXNIYXNoID0gcGVla0NhY2hlZEhhc2hDb2RlKCk7Ci0gICAgaW50IHRo
YXRIYXNoID0gb3RoZXJCeXRlU3RyaW5nLnBlZWtDYWNoZWRIYXNoQ29kZSgpOwotICAgIGlmICh0
aGlzSGFzaCAhPSAwICYmIHRoYXRIYXNoICE9IDAgJiYgdGhpc0hhc2ggIT0gdGhhdEhhc2gpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXF1YWxzRnJhZ21lbnRz
KG90aGVyQnl0ZVN0cmluZyk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiB0aGlz
IHN0cmluZyBpcyBlcXVhbCB0byBhbm90aGVyIG9mIHRoZSBzYW1lIGxlbmd0aCBieQotICAgKiBp
dGVyYXRpbmcgb3ZlciB0aGUgbGVhZiBub2Rlcy4gT24gZWFjaCBzdGVwIG9mIHRoZSBpdGVyYXRp
b24sIHRoZQotICAgKiBvdmVybGFwcGluZyBzZWdtZW50cyBvZiB0aGUgbGVhdmVzIGFyZSBjb21w
YXJlZC4KLSAgICoKLSAgICogQHBhcmFtIG90aGVyIHN0cmluZyBvZiB0aGUgc2FtZSBsZW5ndGgg
YXMgdGhpcyBvbmUKLSAgICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZXMgb2YgdGhpcyBzdHJp
bmcgZXF1YWxzIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4KLSAgICogICAgICAgICBvbmUKLSAgICov
Ci0gIHByaXZhdGUgYm9vbGVhbiBlcXVhbHNGcmFnbWVudHMoQnl0ZVN0cmluZyBvdGhlcikgewot
ICAgIGludCB0aGlzT2Zmc2V0ID0gMDsKLSAgICBJdGVyYXRvcjxMZWFmQnl0ZVN0cmluZz4gdGhp
c0l0ZXIgPSBuZXcgUGllY2VJdGVyYXRvcih0aGlzKTsKLSAgICBMZWFmQnl0ZVN0cmluZyB0aGlz
U3RyaW5nID0gdGhpc0l0ZXIubmV4dCgpOwotCi0gICAgaW50IHRoYXRPZmZzZXQgPSAwOwotICAg
IEl0ZXJhdG9yPExlYWZCeXRlU3RyaW5nPiB0aGF0SXRlciA9IG5ldyBQaWVjZUl0ZXJhdG9yKG90
aGVyKTsKLSAgICBMZWFmQnl0ZVN0cmluZyB0aGF0U3RyaW5nID0gdGhhdEl0ZXIubmV4dCgpOwot
Ci0gICAgaW50IHBvcyA9IDA7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIGludCB0aGlzUmVt
YWluaW5nID0gdGhpc1N0cmluZy5zaXplKCkgLSB0aGlzT2Zmc2V0OwotICAgICAgaW50IHRoYXRS
ZW1haW5pbmcgPSB0aGF0U3RyaW5nLnNpemUoKSAtIHRoYXRPZmZzZXQ7Ci0gICAgICBpbnQgYnl0
ZXNUb0NvbXBhcmUgPSBNYXRoLm1pbih0aGlzUmVtYWluaW5nLCB0aGF0UmVtYWluaW5nKTsKLQot
ICAgICAgLy8gQXQgbGVhc3Qgb25lIG9mIHRoZSBvZmZzZXRzIHdpbGwgYmUgemVybwotICAgICAg
Ym9vbGVhbiBzdGlsbEVxdWFsID0gKHRoaXNPZmZzZXQgPT0gMCkKLSAgICAgICAgICA/IHRoaXNT
dHJpbmcuZXF1YWxzUmFuZ2UodGhhdFN0cmluZywgdGhhdE9mZnNldCwgYnl0ZXNUb0NvbXBhcmUp
Ci0gICAgICAgICAgOiB0aGF0U3RyaW5nLmVxdWFsc1JhbmdlKHRoaXNTdHJpbmcsIHRoaXNPZmZz
ZXQsIGJ5dGVzVG9Db21wYXJlKTsKLSAgICAgIGlmICghc3RpbGxFcXVhbCkgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIHBvcyArPSBieXRlc1RvQ29tcGFyZTsKLSAg
ICAgIGlmIChwb3MgPj0gdG90YWxMZW5ndGgpIHsKLSAgICAgICAgaWYgKHBvcyA9PSB0b3RhbExl
bmd0aCkgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHRocm93
IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICAgIC8vIFdlIGFsd2F5
cyBnZXQgdG8gdGhlIGVuZCBvZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHBpZWNlcwotICAgICAgaWYg
KGJ5dGVzVG9Db21wYXJlID09IHRoaXNSZW1haW5pbmcpIHsgLy8gSWYgcmVhY2hlZCBlbmQgb2Yg
dGhpcwotICAgICAgICB0aGlzT2Zmc2V0ID0gMDsKLSAgICAgICAgdGhpc1N0cmluZyA9IHRoaXNJ
dGVyLm5leHQoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXNPZmZzZXQgKz0gYnl0ZXNU
b0NvbXBhcmU7Ci0gICAgICB9Ci0gICAgICBpZiAoYnl0ZXNUb0NvbXBhcmUgPT0gdGhhdFJlbWFp
bmluZykgeyAvLyBJZiByZWFjaGVkIGVuZCBvZiB0aGF0Ci0gICAgICAgIHRoYXRPZmZzZXQgPSAw
OwotICAgICAgICB0aGF0U3RyaW5nID0gdGhhdEl0ZXIubmV4dCgpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgdGhhdE9mZnNldCArPSBieXRlc1RvQ29tcGFyZTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIGludCBwYXJ0aWFsSGFzaChpbnQgaCwgaW50
IG9mZnNldCwgaW50IGxlbmd0aCkgewotICAgIGludCB0b0luZGV4ID0gb2Zmc2V0ICsgbGVuZ3Ro
OwotICAgIGlmICh0b0luZGV4IDw9IGxlZnRMZW5ndGgpIHsKLSAgICAgIHJldHVybiBsZWZ0LnBh
cnRpYWxIYXNoKGgsIG9mZnNldCwgbGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYgKG9mZnNldCA+PSBs
ZWZ0TGVuZ3RoKSB7Ci0gICAgICByZXR1cm4gcmlnaHQucGFydGlhbEhhc2goaCwgb2Zmc2V0IC0g
bGVmdExlbmd0aCwgbGVuZ3RoKTsKLSAgICB9IGVsc2UgewotICAgICAgaW50IGxlZnRMZW5ndGgg
PSB0aGlzLmxlZnRMZW5ndGggLSBvZmZzZXQ7Ci0gICAgICBpbnQgbGVmdFBhcnRpYWwgPSBsZWZ0
LnBhcnRpYWxIYXNoKGgsIG9mZnNldCwgbGVmdExlbmd0aCk7Ci0gICAgICByZXR1cm4gcmlnaHQu
cGFydGlhbEhhc2gobGVmdFBhcnRpYWwsIDAsIGxlbmd0aCAtIGxlZnRMZW5ndGgpOwotICAgIH0K
LSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIElucHV0IHN0cmVhbQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgQ29kZWRJbnB1dFN0cmVhbSBuZXdDb2RlZElucHV0KCkgewotICAgIHJldHVybiBD
b2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKG5ldyBSb3BlSW5wdXRTdHJlYW0oKSk7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIElucHV0U3RyZWFtIG5ld0lucHV0KCkgewotICAgIHJl
dHVybiBuZXcgUm9wZUlucHV0U3RyZWFtKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBjbGFz
cyBpbXBsZW1lbnRzIHRoZSBiYWxhbmNpbmcgYWxnb3JpdGhtIG9mIEJBUDk1LiBJbiB0aGUgcGFw
ZXIgdGhlCi0gICAqIGF1dGhvcnMgdXNlIGFuIGFycmF5IHRvIGtlZXAgdHJhY2sgb2YgcGllY2Vz
LCB3aGlsZSBoZXJlIHdlIHVzZSBhIHN0YWNrLgotICAgKiBUaGUgdHJlZSBpcyBiYWxhbmNlZCBi
eSB0cmF2ZXJzaW5nIHN1YnRyZWVzIGluIGxlZnQgdG8gcmlnaHQgb3JkZXIsIGFuZCB0aGUKLSAg
ICogc3RhY2sgYWx3YXlzIGNvbnRhaW5zIHRoZSBwYXJ0IG9mIHRoZSBzdHJpbmcgd2UndmUgdHJh
dmVyc2VkIHNvIGZhci4KLSAgICoKLSAgICogPHA+T25lIHN1cnByaXNpbmcgYXNwZWN0IG9mIHRo
ZSBhbGdvcml0aG0gaXMgdGhlIHJlc3VsdCBvZiBiYWxhbmNpbmcgaXMgbm90Ci0gICAqIG5lY2Vz
c2FyaWx5IGJhbGFuY2VkLCB0aG91Z2ggaXQgaXMgbmVhcmx5IGJhbGFuY2VkLiAgRm9yIGRldGFp
bHMsIHNlZQotICAgKiBCQVA5NS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIEJhbGFu
Y2VyIHsKLSAgICAvLyBTdGFjayBjb250YWluaW5nIHRoZSBwYXJ0IG9mIHRoZSBzdHJpbmcsIHN0
YXJ0aW5nIGZyb20gdGhlIGxlZnQsIHRoYXQKLSAgICAvLyB3ZSd2ZSBhbHJlYWR5IHRyYXZlcnNl
ZC4gIFRoZSBmaW5hbCBzdHJpbmcgc2hvdWxkIGJlIHRoZSBlcXVpdmFsZW50IG9mCi0gICAgLy8g
Y29uY2F0ZW5hdGluZyB0aGUgc3RyaW5ncyBvbiB0aGUgc3RhY2sgZnJvbSBib3R0b20gdG8gdG9w
LgotICAgIHByaXZhdGUgZmluYWwgU3RhY2s8Qnl0ZVN0cmluZz4gcHJlZml4ZXNTdGFjayA9IG5l
dyBTdGFjazxCeXRlU3RyaW5nPigpOwotCi0gICAgcHJpdmF0ZSBCeXRlU3RyaW5nIGJhbGFuY2Uo
Qnl0ZVN0cmluZyBsZWZ0LCBCeXRlU3RyaW5nIHJpZ2h0KSB7Ci0gICAgICBkb0JhbGFuY2UobGVm
dCk7Ci0gICAgICBkb0JhbGFuY2UocmlnaHQpOwotCi0gICAgICAvLyBTd2VlcCBzdGFjayB0byBn
YXRoZXIgdGhlIHJlc3VsdAotICAgICAgQnl0ZVN0cmluZyBwYXJ0aWFsU3RyaW5nID0gcHJlZml4
ZXNTdGFjay5wb3AoKTsKLSAgICAgIHdoaWxlICghcHJlZml4ZXNTdGFjay5pc0VtcHR5KCkpIHsK
LSAgICAgICAgQnl0ZVN0cmluZyBuZXdMZWZ0ID0gcHJlZml4ZXNTdGFjay5wb3AoKTsKLSAgICAg
ICAgcGFydGlhbFN0cmluZyA9IG5ldyBSb3BlQnl0ZVN0cmluZyhuZXdMZWZ0LCBwYXJ0aWFsU3Ry
aW5nKTsKLSAgICAgIH0KLSAgICAgIC8vIFdlIHNob3VsZCBlbmQgdXAgd2l0aCBhIFJvcGVCeXRl
U3RyaW5nIHNpbmNlIGF0IGEgbWluaW11bSB3ZSB3aWxsCi0gICAgICAvLyBjcmVhdGUgb25lIGZy
b20gY29uY2F0ZW5hdGluZyBsZWZ0IGFuZCByaWdodAotICAgICAgcmV0dXJuIHBhcnRpYWxTdHJp
bmc7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRvQmFsYW5jZShCeXRlU3RyaW5nIHJvb3Qp
IHsKLSAgICAgIC8vIEJBUDk1OiBJbnNlcnQgYmFsYW5jZWQgc3VidHJlZXMgd2hvbGUuIFRoaXMg
bWVhbnMgdGhlIHJlc3VsdCBtaWdodCBub3QKLSAgICAgIC8vIGJlIGJhbGFuY2VkLCBsZWFkaW5n
IHRvIHJlcGVhdGVkIHJlYmFsYW5jaW5ncyBvbiBjb25jYXRlbmF0ZS4gSG93ZXZlciwKLSAgICAg
IC8vIHRoZXNlIHJlYmFsYW5jaW5ncyBhcmUgc2hhbGxvdyBkdWUgdG8gaWdub3JpbmcgYmFsYW5j
ZWQgc3VidHJlZXMsIGFuZAotICAgICAgLy8gcmVsYXRpdmVseSBmZXcgY2FsbHMgdG8gaW5zZXJ0
KCkgcmVzdWx0LgotICAgICAgaWYgKHJvb3QuaXNCYWxhbmNlZCgpKSB7Ci0gICAgICAgIGluc2Vy
dChyb290KTsKLSAgICAgIH0gZWxzZSBpZiAocm9vdCBpbnN0YW5jZW9mIFJvcGVCeXRlU3RyaW5n
KSB7Ci0gICAgICAgIFJvcGVCeXRlU3RyaW5nIHJicyA9IChSb3BlQnl0ZVN0cmluZykgcm9vdDsK
LSAgICAgICAgZG9CYWxhbmNlKHJicy5sZWZ0KTsKLSAgICAgICAgZG9CYWxhbmNlKHJicy5yaWdo
dCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uKAotICAgICAgICAgICAgIkhhcyBhIG5ldyB0eXBlIG9mIEJ5dGVTdHJpbmcgYmVlbiBj
cmVhdGVkPyBGb3VuZCAiICsKLSAgICAgICAgICAgICAgICByb290LmdldENsYXNzKCkpOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFB1c2ggYSBzdHJpbmcgb24gdGhlIGJhbGFu
Y2Ugc3RhY2sgKEJBUDk1KS4gIEJBUDk1IHVzZXMgYW4gYXJyYXkgYW5kCi0gICAgICogY2FsbHMg
dGhlIGVsZW1lbnRzIGluIHRoZSBhcnJheSAnYmlucycuICBXZSBpbnN0ZWFkIHVzZSBhIHN0YWNr
LCBzbyB0aGUKLSAgICAgKiAnYmlucycgb2YgbGVuZ3RocyBhcmUgcmVwcmVzZW50ZWQgYnkgZGlm
ZmVyZW5jZXMgYmV0d2VlbiB0aGUgZWxlbWVudHMgb2YKLSAgICAgKiBtaW5MZW5ndGhCeURlcHRo
LgotICAgICAqCi0gICAgICogPHA+SWYgdGhlIGxlbmd0aCBiaW4gZm9yIG91ciBzdHJpbmcsIGFu
ZCBhbGwgc2hvcnRlciBsZW5ndGggYmlucywgYXJlCi0gICAgICogZW1wdHksIHdlIGp1c3QgcHVz
aCBpdCBvbiB0aGUgc3RhY2suICBPdGhlcndpc2UsIHdlIG5lZWQgdG8gc3RhcnQKLSAgICAgKiBj
b25jYXRlbmF0aW5nLCBwdXR0aW5nIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlICJtaWRkbGUiIGFu
ZCBjb250aW51aW5nCi0gICAgICogdW50aWwgd2UgbGFuZCBpbiBhbiBlbXB0eSBsZW5ndGggYmlu
IHRoYXQgbWF0Y2hlcyB0aGUgbGVuZ3RoIG9mIG91cgotICAgICAqIGNvbmNhdGVuYXRpb24uCi0g
ICAgICoKLSAgICAgKiBAcGFyYW0gYnl0ZVN0cmluZyBzdHJpbmcgdG8gcGxhY2Ugb24gdGhlIGJh
bGFuY2Ugc3RhY2sKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgaW5zZXJ0KEJ5dGVTdHJpbmcg
Ynl0ZVN0cmluZykgewotICAgICAgaW50IGRlcHRoQmluID0gZ2V0RGVwdGhCaW5Gb3JMZW5ndGgo
Ynl0ZVN0cmluZy5zaXplKCkpOwotICAgICAgaW50IGJpbkVuZCA9IG1pbkxlbmd0aEJ5RGVwdGhb
ZGVwdGhCaW4gKyAxXTsKLQotICAgICAgLy8gQkFQOTU6IENvbmNhdGVuYXRlIGFsbCB0cmVlcyBv
Y2N1cHlpbmcgYmlucyByZXByZXNlbnRpbmcgdGhlIGxlbmd0aCBvZgotICAgICAgLy8gb3VyIG5l
dyBwaWVjZSBvciBvZiBzaG9ydGVyIHBpZWNlcywgdG8gdGhlIGV4dGVudCB0aGF0IGlzIHBvc3Np
YmxlLgotICAgICAgLy8gVGhlIGdvYWwgaXMgdG8gY2xlYXIgdGhlIGJpbiB3aGljaCBvdXIgcGll
Y2UgYmVsb25ncyBpbiwgYnV0IHRoYXQgbWF5Ci0gICAgICAvLyBub3QgYmUgZW50aXJlbHkgcG9z
c2libGUgaWYgdGhlcmUgYXJlbid0IGVub3VnaCBsb25nZXIgYmlucyBvY2N1cGllZC4KLSAgICAg
IGlmIChwcmVmaXhlc1N0YWNrLmlzRW1wdHkoKSB8fCBwcmVmaXhlc1N0YWNrLnBlZWsoKS5zaXpl
KCkgPj0gYmluRW5kKSB7Ci0gICAgICAgIHByZWZpeGVzU3RhY2sucHVzaChieXRlU3RyaW5nKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBiaW5TdGFydCA9IG1pbkxlbmd0aEJ5RGVwdGhb
ZGVwdGhCaW5dOwotCi0gICAgICAgIC8vIENvbmNhdGVuYXRlIHRoZSBzdWJ0cmVlcyBvZiBzaG9y
dGVyIGxlbmd0aAotICAgICAgICBCeXRlU3RyaW5nIG5ld1RyZWUgPSBwcmVmaXhlc1N0YWNrLnBv
cCgpOwotICAgICAgICB3aGlsZSAoIXByZWZpeGVzU3RhY2suaXNFbXB0eSgpCi0gICAgICAgICAg
ICAmJiBwcmVmaXhlc1N0YWNrLnBlZWsoKS5zaXplKCkgPCBiaW5TdGFydCkgewotICAgICAgICAg
IEJ5dGVTdHJpbmcgbGVmdCA9IHByZWZpeGVzU3RhY2sucG9wKCk7Ci0gICAgICAgICAgbmV3VHJl
ZSA9IG5ldyBSb3BlQnl0ZVN0cmluZyhsZWZ0LCBuZXdUcmVlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIENvbmNhdGVuYXRlIHRoZSBnaXZlbiBzdHJpbmcKLSAgICAgICAgbmV3VHJlZSA9IG5l
dyBSb3BlQnl0ZVN0cmluZyhuZXdUcmVlLCBieXRlU3RyaW5nKTsKLQotICAgICAgICAvLyBDb250
aW51ZSBjb25jYXRlbmF0aW5nIHVudGlsIHdlIGxhbmQgaW4gYW4gZW1wdHkgYmluCi0gICAgICAg
IHdoaWxlICghcHJlZml4ZXNTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICBkZXB0aEJpbiA9
IGdldERlcHRoQmluRm9yTGVuZ3RoKG5ld1RyZWUuc2l6ZSgpKTsKLSAgICAgICAgICBiaW5FbmQg
PSBtaW5MZW5ndGhCeURlcHRoW2RlcHRoQmluICsgMV07Ci0gICAgICAgICAgaWYgKHByZWZpeGVz
U3RhY2sucGVlaygpLnNpemUoKSA8IGJpbkVuZCkgewotICAgICAgICAgICAgQnl0ZVN0cmluZyBs
ZWZ0ID0gcHJlZml4ZXNTdGFjay5wb3AoKTsKLSAgICAgICAgICAgIG5ld1RyZWUgPSBuZXcgUm9w
ZUJ5dGVTdHJpbmcobGVmdCwgbmV3VHJlZSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwcmVmaXhlc1N0YWNr
LnB1c2gobmV3VHJlZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgZ2V0RGVw
dGhCaW5Gb3JMZW5ndGgoaW50IGxlbmd0aCkgewotICAgICAgaW50IGRlcHRoID0gQXJyYXlzLmJp
bmFyeVNlYXJjaChtaW5MZW5ndGhCeURlcHRoLCBsZW5ndGgpOwotICAgICAgaWYgKGRlcHRoIDwg
MCkgewotICAgICAgICAvLyBJdCB3YXNuJ3QgYW4gZXhhY3QgbWF0Y2gsIHNvIGNvbnZlcnQgdG8g
dGhlIGluZGV4IG9mIHRoZSBjb250YWluaW5nCi0gICAgICAgIC8vIGZyYWdtZW50LCB3aGljaCBp
cyBvbmUgbGVzcyBldmVuIHRoYW4gdGhlIGluc2VydGlvbiBwb2ludC4KLSAgICAgICAgaW50IGlu
c2VydGlvblBvaW50ID0gLShkZXB0aCArIDEpOwotICAgICAgICBkZXB0aCA9IGluc2VydGlvblBv
aW50IC0gMTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGRlcHRoOwotICAgIH0KLSAgfQotCi0g
IC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIGEgY29udGludWFibGUgdHJlZSB0cmF2ZXJzYWwsIHdo
aWNoIGtlZXBzIHRoZSBzdGF0ZQotICAgKiBpbmZvcm1hdGlvbiB3aGljaCB3b3VsZCBleGlzdCBv
biB0aGUgc3RhY2sgaW4gYSByZWN1cnNpdmUgdHJhdmVyc2FsIGluc3RlYWQKLSAgICogb24gYSBz
dGFjayBvZiAiQnJlYWQgQ3J1bWJzIi4gVGhlIG1heGltdW0gZGVwdGggb2YgdGhlIHN0YWNrIGlu
IHRoaXMKLSAgICogaXRlcmF0b3IgaXMgdGhlIHNhbWUgYXMgdGhlIGRlcHRoIG9mIHRoZSB0cmVl
IGJlaW5nIHRyYXZlcnNlZC4KLSAgICoKLSAgICogPHA+VGhpcyBpdGVyYXRvciBpcyB1c2VkIHRv
IGltcGxlbWVudAotICAgKiB7QGxpbmsgUm9wZUJ5dGVTdHJpbmcjZXF1YWxzRnJhZ21lbnRzKEJ5
dGVTdHJpbmcpfS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFBpZWNlSXRlcmF0b3Ig
aW1wbGVtZW50cyBJdGVyYXRvcjxMZWFmQnl0ZVN0cmluZz4gewotCi0gICAgcHJpdmF0ZSBmaW5h
bCBTdGFjazxSb3BlQnl0ZVN0cmluZz4gYnJlYWRDcnVtYnMgPQotICAgICAgICBuZXcgU3RhY2s8
Um9wZUJ5dGVTdHJpbmc+KCk7Ci0gICAgcHJpdmF0ZSBMZWFmQnl0ZVN0cmluZyBuZXh0OwotCi0g
ICAgcHJpdmF0ZSBQaWVjZUl0ZXJhdG9yKEJ5dGVTdHJpbmcgcm9vdCkgewotICAgICAgbmV4dCA9
IGdldExlYWZCeUxlZnQocm9vdCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBMZWFmQnl0ZVN0cmlu
ZyBnZXRMZWFmQnlMZWZ0KEJ5dGVTdHJpbmcgcm9vdCkgewotICAgICAgQnl0ZVN0cmluZyBwb3Mg
PSByb290OwotICAgICAgd2hpbGUgKHBvcyBpbnN0YW5jZW9mIFJvcGVCeXRlU3RyaW5nKSB7Ci0g
ICAgICAgIFJvcGVCeXRlU3RyaW5nIHJicyA9IChSb3BlQnl0ZVN0cmluZykgcG9zOwotICAgICAg
ICBicmVhZENydW1icy5wdXNoKHJicyk7Ci0gICAgICAgIHBvcyA9IHJicy5sZWZ0OwotICAgICAg
fQotICAgICAgcmV0dXJuIChMZWFmQnl0ZVN0cmluZykgcG9zOwotICAgIH0KLQotICAgIHByaXZh
dGUgTGVhZkJ5dGVTdHJpbmcgZ2V0TmV4dE5vbkVtcHR5TGVhZigpIHsKLSAgICAgIHdoaWxlICh0
cnVlKSB7Ci0gICAgICAgIC8vIEFsbW9zdCBhbHdheXMsIHdlIGdvIHRocm91Z2ggdGhpcyBsb29w
IGV4YWN0bHkgb25jZS4gIEhvd2V2ZXIsIGlmCi0gICAgICAgIC8vIHdlIGRpc2NvdmVyIGFuIGVt
cHR5IHN0cmluZyBpbiB0aGUgcm9wZSwgd2UgdG9zcyBpdCBhbmQgdHJ5IGFnYWluLgotICAgICAg
ICBpZiAoYnJlYWRDcnVtYnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgTGVhZkJ5dGVTdHJpbmcgcmVzdWx0ID0gZ2V0TGVh
ZkJ5TGVmdChicmVhZENydW1icy5wb3AoKS5yaWdodCk7Ci0gICAgICAgICAgaWYgKCFyZXN1bHQu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29s
ZWFuIGhhc05leHQoKSB7Ci0gICAgICByZXR1cm4gbmV4dCAhPSBudWxsOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIFJldHVybnMgdGhlIG5leHQgaXRlbSBhbmQgYWR2YW5jZXMgb25lCi0gICAg
ICoge0BsaW5rIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZy5MZWFmQnl0ZVN0cmluZ30u
Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIG5leHQgbm9uLWVtcHR5IExlYWZCeXRlU3RyaW5nIG9y
IHtAY29kZSBudWxsfQotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMZWFmQnl0
ZVN0cmluZyBuZXh0KCkgewotICAgICAgaWYgKG5leHQgPT0gbnVsbCkgewotICAgICAgICB0aHJv
dyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgTGVhZkJ5dGVT
dHJpbmcgcmVzdWx0ID0gbmV4dDsKLSAgICAgIG5leHQgPSBnZXROZXh0Tm9uRW1wdHlMZWFmKCk7
Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIHJlbW92ZSgpIHsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4
Y2VwdGlvbigpOwotICAgIH0KLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFNlcmlhbGl6YWJs
ZQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwot
Ci0gIE9iamVjdCB3cml0ZVJlcGxhY2UoKSB7Ci0gICAgcmV0dXJuIEJ5dGVTdHJpbmcud3JhcCh0
b0J5dGVBcnJheSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZWFkT2JqZWN0KEBTdXBwcmVz
c1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3RJbnB1dFN0cmVhbSBpbikgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICB0aHJvdyBuZXcgSW52YWxpZE9iamVjdEV4Y2VwdGlvbigKLSAgICAgICAgIlJv
cGVCeXRlU3RyZWFtIGluc3RhbmNlcyBhcmUgbm90IHRvIGJlIHNlcmlhbGl6ZWQgZGlyZWN0bHki
KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIGNsYXNzIGlzIHRoZSB7QGxpbmsgUm9wZUJ5dGVT
dHJpbmd9IGVxdWl2YWxlbnQgZm9yCi0gICAqIHtAbGluayBCeXRlQXJyYXlJbnB1dFN0cmVhbX0u
Ci0gICAqLwotICBwcml2YXRlIGNsYXNzIFJvcGVJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3Ry
ZWFtIHsKLSAgICAvLyBJdGVyYXRlcyB0aHJvdWdoIHRoZSBwaWVjZXMgb2YgdGhlIHJvcGUKLSAg
ICBwcml2YXRlIFBpZWNlSXRlcmF0b3IgcGllY2VJdGVyYXRvcjsKLSAgICAvLyBUaGUgY3VycmVu
dCBwaWVjZQotICAgIHByaXZhdGUgTGVhZkJ5dGVTdHJpbmcgY3VycmVudFBpZWNlOwotICAgIC8v
IFRoZSBzaXplIG9mIHRoZSBjdXJyZW50IHBpZWNlCi0gICAgcHJpdmF0ZSBpbnQgY3VycmVudFBp
ZWNlU2l6ZTsKLSAgICAvLyBUaGUgaW5kZXggb2YgdGhlIG5leHQgYnl0ZSB0byByZWFkIGluIHRo
ZSBjdXJyZW50IHBpZWNlCi0gICAgcHJpdmF0ZSBpbnQgY3VycmVudFBpZWNlSW5kZXg7Ci0gICAg
Ly8gVGhlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgcGllY2UgaW4gdGhlIHJv
cGUgYnl0ZSBzdHJpbmcKLSAgICBwcml2YXRlIGludCBjdXJyZW50UGllY2VPZmZzZXRJblJvcGU7
Ci0gICAgLy8gT2Zmc2V0IGluIHRoZSBidWZmZXIgYXQgd2hpY2ggdXNlciBjYWxsZWQgbWFyaygp
OwotICAgIHByaXZhdGUgaW50IG1hcms7Ci0KLSAgICBwdWJsaWMgUm9wZUlucHV0U3RyZWFtKCkg
ewotICAgICAgaW5pdGlhbGl6ZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBpbnQgcmVhZChieXRlIGJbXSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgIHsKLSAgICAgIGlm
IChiID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7
Ci0gICAgICB9IGVsc2UgaWYgKG9mZnNldCA8IDAgfHwgbGVuZ3RoIDwgMCB8fCBsZW5ndGggPiBi
Lmxlbmd0aCAtIG9mZnNldCkgewotICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4
Y2VwdGlvbigpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlYWRTa2lwSW50ZXJuYWwoYiwgb2Zm
c2V0LCBsZW5ndGgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBsb25nIHNr
aXAobG9uZyBsZW5ndGgpIHsKLSAgICAgIGlmIChsZW5ndGggPCAwKSB7Ci0gICAgICAgIHRocm93
IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7Ci0gICAgICB9IGVsc2UgaWYgKGxlbmd0
aCA+IEludGVnZXIuTUFYX1ZBTFVFKSB7Ci0gICAgICAgIGxlbmd0aCA9IEludGVnZXIuTUFYX1ZB
TFVFOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlYWRTa2lwSW50ZXJuYWwobnVsbCwgMCwgKGlu
dCkgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbnRlcm5hbCBpbXBsZW1lbnRh
dGlvbiBvZiByZWFkIGFuZCBza2lwLiAgSWYgYiAhPSBudWxsLCB0aGVuIHJlYWQgdGhlCi0gICAg
ICogbmV4dCB7QGNvZGUgbGVuZ3RofSBieXRlcyBpbnRvIHRoZSBidWZmZXIge0Bjb2RlIGJ9IGF0
Ci0gICAgICogb2Zmc2V0IHtAY29kZSBvZmZzZXR9LiAgSWYgYiA9PSBudWxsLCB0aGVuIHNraXAg
dGhlIG5leHQge0Bjb2RlIGxlbmd0aH0KLSAgICAgKiBieXRlcy4KLSAgICAgKiA8cD4KLSAgICAg
KiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgYWxsIGVycm9yIGNoZWNraW5nIGhhcyBhbHJlYWR5
IGhhcHBlbmVkLgotICAgICAqIDxwPgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIg
b2YgYnl0ZXMgcmVhZCBvciBza2lwcGVkLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IHJlYWRT
a2lwSW50ZXJuYWwoYnl0ZSBiW10sIGludCBvZmZzZXQsIGludCBsZW5ndGgpICB7Ci0gICAgICBp
bnQgYnl0ZXNSZW1haW5pbmcgPSBsZW5ndGg7Ci0gICAgICB3aGlsZSAoYnl0ZXNSZW1haW5pbmcg
PiAwKSB7Ci0gICAgICAgIGFkdmFuY2VJZkN1cnJlbnRQaWVjZUZ1bGx5UmVhZCgpOwotICAgICAg
ICBpZiAoY3VycmVudFBpZWNlID09IG51bGwpIHsKLSAgICAgICAgICBpZiAoYnl0ZXNSZW1haW5p
bmcgPT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgLy8gV2UgZGlkbid0IG1hbmFnZSB0byByZWFk
IGFueXRoaW5nCi0gICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICB9Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gQ29weSB0aGUgYnl0ZXMg
ZnJvbSB0aGlzIHBpZWNlLgotICAgICAgICAgIGludCBjdXJyZW50UGllY2VSZW1haW5pbmcgPSBj
dXJyZW50UGllY2VTaXplIC0gY3VycmVudFBpZWNlSW5kZXg7Ci0gICAgICAgICAgaW50IGNvdW50
ID0gTWF0aC5taW4oY3VycmVudFBpZWNlUmVtYWluaW5nLCBieXRlc1JlbWFpbmluZyk7Ci0gICAg
ICAgICAgaWYgKGIgIT0gbnVsbCkgewotICAgICAgICAgICAgY3VycmVudFBpZWNlLmNvcHlUbyhi
LCBjdXJyZW50UGllY2VJbmRleCwgb2Zmc2V0LCBjb3VudCk7Ci0gICAgICAgICAgICBvZmZzZXQg
Kz0gY291bnQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGN1cnJlbnRQaWVjZUluZGV4ICs9IGNv
dW50OwotICAgICAgICAgIGJ5dGVzUmVtYWluaW5nIC09IGNvdW50OwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KLSAgICAgIHJl
dHVybiBsZW5ndGggLSBieXRlc1JlbWFpbmluZzsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgYWR2YW5jZUlm
Q3VycmVudFBpZWNlRnVsbHlSZWFkKCk7Ci0gICAgICBpZiAoY3VycmVudFBpZWNlID09IG51bGwp
IHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGN1
cnJlbnRQaWVjZS5ieXRlQXQoY3VycmVudFBpZWNlSW5kZXgrKykgJiAweEZGOwotICAgICAgfQot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgYXZhaWxhYmxlKCkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICAgIGludCBieXRlc1JlYWQgPSBjdXJyZW50UGllY2VPZmZzZXRJ
blJvcGUgKyBjdXJyZW50UGllY2VJbmRleDsKLSAgICAgIHJldHVybiBSb3BlQnl0ZVN0cmluZy50
aGlzLnNpemUoKSAtIGJ5dGVzUmVhZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgbWFyayhpbnQgcmVhZEFoZWFkTGltaXQp
IHsKLSAgICAgIC8vIFNldCB0aGUgbWFyayB0byBvdXIgcG9zaXRpb24gaW4gdGhlIGJ5dGUgc3Ry
aW5nCi0gICAgICBtYXJrID0gY3VycmVudFBpZWNlT2Zmc2V0SW5Sb3BlICsgY3VycmVudFBpZWNl
SW5kZXg7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2
b2lkIHJlc2V0KCkgewotICAgICAgLy8gSnVzdCByZWluaXRpYWxpemUgYW5kIHNraXAgdGhlIHNw
ZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMuCi0gICAgICBpbml0aWFsaXplKCk7Ci0gICAgICByZWFk
U2tpcEludGVybmFsKG51bGwsIDAsIG1hcmspOwotICAgIH0KLQotICAgIC8qKiBDb21tb24gaW5p
dGlhbGl6YXRpb24gY29kZSB1c2VkIGJ5IGJvdGggdGhlIGNvbnN0cnVjdG9yIGFuZCByZXNldCgp
ICovCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemUoKSB7Ci0gICAgICBwaWVjZUl0ZXJhdG9y
ID0gbmV3IFBpZWNlSXRlcmF0b3IoUm9wZUJ5dGVTdHJpbmcudGhpcyk7Ci0gICAgICBjdXJyZW50
UGllY2UgPSBwaWVjZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGN1cnJlbnRQaWVjZVNpemUgPSBj
dXJyZW50UGllY2Uuc2l6ZSgpOwotICAgICAgY3VycmVudFBpZWNlSW5kZXggPSAwOwotICAgICAg
Y3VycmVudFBpZWNlT2Zmc2V0SW5Sb3BlID0gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBT
a2lwcyB0byB0aGUgbmV4dCBwaWVjZSBpZiB3ZSBoYXZlIHJlYWQgYWxsIHRoZSBkYXRhIGluIHRo
ZSBjdXJyZW50Ci0gICAgICogcGllY2UuICBTZXRzIGN1cnJlbnRQaWVjZSB0byBudWxsIGlmIHdl
IGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZQotICAgICAqIGlucHV0LgotICAgICAqLwotICAg
IHByaXZhdGUgdm9pZCBhZHZhbmNlSWZDdXJyZW50UGllY2VGdWxseVJlYWQoKSB7Ci0gICAgICBp
ZiAoY3VycmVudFBpZWNlICE9IG51bGwgJiYgY3VycmVudFBpZWNlSW5kZXggPT0gY3VycmVudFBp
ZWNlU2l6ZSkgewotICAgICAgICAvLyBHZW5lcmFsbHksIHdlIGNhbiBvbmx5IGdvIHRocm91Z2gg
dGhpcyBsb29wIGF0IG1vc3Qgb25jZSwgc2luY2UKLSAgICAgICAgLy8gZW1wdHkgc3RyaW5ncyBj
YW4ndCBlbmQgdXAgaW4gYSByb3BlLiAgQnV0IGJldHRlciB0byB0ZXN0LgotICAgICAgICBjdXJy
ZW50UGllY2VPZmZzZXRJblJvcGUgKz0gY3VycmVudFBpZWNlU2l6ZTsKLSAgICAgICAgY3VycmVu
dFBpZWNlSW5kZXggPSAwOwotICAgICAgICBpZiAocGllY2VJdGVyYXRvci5oYXNOZXh0KCkpIHsK
LSAgICAgICAgICBjdXJyZW50UGllY2UgPSBwaWVjZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAg
ICBjdXJyZW50UGllY2VTaXplID0gY3VycmVudFBpZWNlLnNpemUoKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICBjdXJyZW50UGllY2UgPSBudWxsOwotICAgICAgICAgIGN1cnJlbnRQaWVj
ZVNpemUgPSAwOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvUnBjQ2FsbGJhY2su
amF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9ScGNDYWxs
YmFjay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDc1Mjk2OGUyN2YxZTMy
YzIwZGQzNGVkMGU0MmEyNzFmZDU5YjJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9ScGNDYWxsYmFjay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1
ZjsKLQotLyoqCi0gKiBJbnRlcmZhY2UgZm9yIGFuIFJQQyBjYWxsYmFjaywgbm9ybWFsbHkgY2Fs
bGVkIHdoZW4gYW4gUlBDIGNvbXBsZXRlcy4KLSAqIHtAY29kZSBQYXJhbWV0ZXJUeXBlfSBpcyBu
b3JtYWxseSB0aGUgbWV0aG9kJ3MgcmVzcG9uc2UgbWVzc2FnZSB0eXBlLgotICoKLSAqIDxwPlN0
YXJ0aW5nIHdpdGggdmVyc2lvbiAyLjMuMCwgUlBDIGltcGxlbWVudGF0aW9ucyBzaG91bGQgbm90
IHRyeSB0byBidWlsZAotICogb24gdGhpcywgYnV0IHNob3VsZCBpbnN0ZWFkIHByb3ZpZGUgY29k
ZSBnZW5lcmF0b3IgcGx1Z2lucyB3aGljaCBnZW5lcmF0ZQotICogY29kZSBzcGVjaWZpYyB0byB0
aGUgcGFydGljdWxhciBSUEMgaW1wbGVtZW50YXRpb24uICBUaGlzIHdheSB0aGUgZ2VuZXJhdGVk
Ci0gKiBjb2RlIGNhbiBiZSBtb3JlIGFwcHJvcHJpYXRlIGZvciB0aGUgaW1wbGVtZW50YXRpb24g
aW4gdXNlIGFuZCBjYW4gYXZvaWQKLSAqIHVubmVjZXNzYXJ5IGxheWVycyBvZiBpbmRpcmVjdGlv
bi4KLSAqCi0gKiBAYXV0aG9yIGtlbnRvbkBnb29nbGUuY29tIEtlbnRvbiBWYXJkYQotICovCi1w
dWJsaWMgaW50ZXJmYWNlIFJwY0NhbGxiYWNrPFBhcmFtZXRlclR5cGU+IHsKLSAgdm9pZCBydW4o
UGFyYW1ldGVyVHlwZSBwYXJhbWV0ZXIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21h
aW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1JwY0NoYW5uZWwuamF2YSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9ScGNDaGFubmVsLmphdmEKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNzJmNGFkNzJiZjUwMjU3ZTUyMGM1NWJiZGFiNWY2NjVm
NDBlYWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZh
L2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1JwY0NoYW5uZWwuamF2YQor
KysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLS8qKgotICogPHA+QWJz
dHJhY3QgaW50ZXJmYWNlIGZvciBhbiBSUEMgY2hhbm5lbC4gIEFuIHtAY29kZSBScGNDaGFubmVs
fSByZXByZXNlbnRzIGEKLSAqIGNvbW11bmljYXRpb24gbGluZSB0byBhIHtAbGluayBTZXJ2aWNl
fSB3aGljaCBjYW4gYmUgdXNlZCB0byBjYWxsIHRoYXQKLSAqIHtAbGluayBTZXJ2aWNlfSdzIG1l
dGhvZHMuICBUaGUge0BsaW5rIFNlcnZpY2V9IG1heSBiZSBydW5uaW5nIG9uIGFub3RoZXIKLSAq
IG1hY2hpbmUuICBOb3JtYWxseSwgeW91IHNob3VsZCBub3QgY2FsbCBhbiB7QGNvZGUgUnBjQ2hh
bm5lbH0gZGlyZWN0bHksIGJ1dAotICogaW5zdGVhZCBjb25zdHJ1Y3QgYSBzdHViIHtAbGluayBT
ZXJ2aWNlfSB3cmFwcGluZyBpdC4gIEV4YW1wbGU6Ci0gKgotICogPHByZT4KLSAqICAgUnBjQ2hh
bm5lbCBjaGFubmVsID0gcnBjSW1wbC5uZXdDaGFubmVsKCJyZW1vdGVob3N0LmV4YW1wbGUuY29t
OjEyMzQiKTsKLSAqICAgUnBjQ29udHJvbGxlciBjb250cm9sbGVyID0gcnBjSW1wbC5uZXdDb250
cm9sbGVyKCk7Ci0gKiAgIE15U2VydmljZSBzZXJ2aWNlID0gTXlTZXJ2aWNlLm5ld1N0dWIoY2hh
bm5lbCk7Ci0gKiAgIHNlcnZpY2UubXlNZXRob2QoY29udHJvbGxlciwgcmVxdWVzdCwgY2FsbGJh
Y2spOwotICogPC9wcmU+Ci0gKgotICogPHA+U3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDIuMy4wLCBS
UEMgaW1wbGVtZW50YXRpb25zIHNob3VsZCBub3QgdHJ5IHRvIGJ1aWxkCi0gKiBvbiB0aGlzLCBi
dXQgc2hvdWxkIGluc3RlYWQgcHJvdmlkZSBjb2RlIGdlbmVyYXRvciBwbHVnaW5zIHdoaWNoIGdl
bmVyYXRlCi0gKiBjb2RlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIFJQQyBpbXBsZW1lbnRh
dGlvbi4gIFRoaXMgd2F5IHRoZSBnZW5lcmF0ZWQKLSAqIGNvZGUgY2FuIGJlIG1vcmUgYXBwcm9w
cmlhdGUgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiB1c2UgYW5kIGNhbiBhdm9pZAotICogdW5u
ZWNlc3NhcnkgbGF5ZXJzIG9mIGluZGlyZWN0aW9uLgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdv
b2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgUnBjQ2hhbm5lbCB7
Ci0gIC8qKgotICAgKiBDYWxsIHRoZSBnaXZlbiBtZXRob2Qgb2YgdGhlIHJlbW90ZSBzZXJ2aWNl
LiAgVGhpcyBtZXRob2QgaXMgc2ltaWxhciB0bwotICAgKiB7QGNvZGUgU2VydmljZS5jYWxsTWV0
aG9kKCl9IHdpdGggb25lIGltcG9ydGFudCBkaWZmZXJlbmNlOiAgdGhlIGNhbGxlcgotICAgKiBk
ZWNpZGVzIHRoZSB0eXBlcyBvZiB0aGUge0Bjb2RlIE1lc3NhZ2V9IG9iamVjdHMsIG5vdCB0aGUg
Y2FsbGVlLiAgVGhlCi0gICAqIHJlcXVlc3QgbWF5IGJlIG9mIGFueSB0eXBlIGFzIGxvbmcgYXMK
LSAgICoge0Bjb2RlIHJlcXVlc3QuZ2V0RGVzY3JpcHRvcigpID09IG1ldGhvZC5nZXRJbnB1dFR5
cGUoKX0uCi0gICAqIFRoZSByZXNwb25zZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHdpbGwgYmUg
b2YgdGhlIHNhbWUgdHlwZSBhcwotICAgKiB7QGNvZGUgcmVzcG9uc2VQcm90b3R5cGV9ICh3aGlj
aCBtdXN0IGhhdmUKLSAgICoge0Bjb2RlIGdldERlc2NyaXB0b3IoKSA9PSBtZXRob2QuZ2V0T3V0
cHV0VHlwZSgpfSkuCi0gICAqLwotICB2b2lkIGNhbGxNZXRob2QoRGVzY3JpcHRvcnMuTWV0aG9k
RGVzY3JpcHRvciBtZXRob2QsCi0gICAgICAgICAgICAgICAgICBScGNDb250cm9sbGVyIGNvbnRy
b2xsZXIsCi0gICAgICAgICAgICAgICAgICBNZXNzYWdlIHJlcXVlc3QsCi0gICAgICAgICAgICAg
ICAgICBNZXNzYWdlIHJlc3BvbnNlUHJvdG90eXBlLAotICAgICAgICAgICAgICAgICAgUnBjQ2Fs
bGJhY2s8TWVzc2FnZT4gZG9uZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvUnBjQ29udHJvbGxlci5qYXZhIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1JwY0NvbnRyb2xsZXIuamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyZGQ3YmU2ZDUwMjc3MmU4N2I4NTE5OGNlNTk4Y2U4
YzFkYTkyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2ph
dmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvUnBjQ29udHJvbGxlci5q
YXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLS8qKgotICog
PHA+QW4ge0Bjb2RlIFJwY0NvbnRyb2xsZXJ9IG1lZGlhdGVzIGEgc2luZ2xlIG1ldGhvZCBjYWxs
LiAgVGhlIHByaW1hcnkKLSAqIHB1cnBvc2Ugb2YgdGhlIGNvbnRyb2xsZXIgaXMgdG8gcHJvdmlk
ZSBhIHdheSB0byBtYW5pcHVsYXRlIHNldHRpbmdzCi0gKiBzcGVjaWZpYyB0byB0aGUgUlBDIGlt
cGxlbWVudGF0aW9uIGFuZCB0byBmaW5kIG91dCBhYm91dCBSUEMtbGV2ZWwgZXJyb3JzLgotICoK
LSAqIDxwPlN0YXJ0aW5nIHdpdGggdmVyc2lvbiAyLjMuMCwgUlBDIGltcGxlbWVudGF0aW9ucyBz
aG91bGQgbm90IHRyeSB0byBidWlsZAotICogb24gdGhpcywgYnV0IHNob3VsZCBpbnN0ZWFkIHBy
b3ZpZGUgY29kZSBnZW5lcmF0b3IgcGx1Z2lucyB3aGljaCBnZW5lcmF0ZQotICogY29kZSBzcGVj
aWZpYyB0byB0aGUgcGFydGljdWxhciBSUEMgaW1wbGVtZW50YXRpb24uICBUaGlzIHdheSB0aGUg
Z2VuZXJhdGVkCi0gKiBjb2RlIGNhbiBiZSBtb3JlIGFwcHJvcHJpYXRlIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gaW4gdXNlIGFuZCBjYW4gYXZvaWQKLSAqIHVubmVjZXNzYXJ5IGxheWVycyBvZiBp
bmRpcmVjdGlvbi4KLSAqCi0gKiA8cD5UaGUgbWV0aG9kcyBwcm92aWRlZCBieSB0aGUge0Bjb2Rl
IFJwY0NvbnRyb2xsZXJ9IGludGVyZmFjZSBhcmUgaW50ZW5kZWQKLSAqIHRvIGJlIGEgImxlYXN0
IGNvbW1vbiBkZW5vbWluYXRvciIgc2V0IG9mIGZlYXR1cmVzIHdoaWNoIHdlIGV4cGVjdCBhbGwK
LSAqIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0LiAgU3BlY2lmaWMgaW1wbGVtZW50YXRpb25z
IG1heSBwcm92aWRlIG1vcmUKLSAqIGFkdmFuY2VkIGZlYXR1cmVzIChlLmcuIGRlYWRsaW5lIHBy
b3BhZ2F0aW9uKS4KLSAqCi0gKiBAYXV0aG9yIGtlbnRvbkBnb29nbGUuY29tIEtlbnRvbiBWYXJk
YQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJwY0NvbnRyb2xsZXIgewotICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAvLyBUaGVzZSBjYWxscyBtYXkgYmUgbWFkZSBmcm9tIHRoZSBjbGllbnQgc2lkZSBvbmx5LiAg
VGhlaXIgcmVzdWx0cwotICAvLyBhcmUgdW5kZWZpbmVkIG9uIHRoZSBzZXJ2ZXIgc2lkZSAobWF5
IHRocm93IFJ1bnRpbWVFeGNlcHRpb25zKS4KLQotICAvKioKLSAgICogUmVzZXRzIHRoZSBScGND
b250cm9sbGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlIHNvIHRoYXQgaXQgbWF5IGJlIHJldXNlZCBp
bgotICAgKiBhIG5ldyBjYWxsLiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIGNsaWVudCBz
aWRlIG9ubHkuICBJdCBtdXN0IG5vdAotICAgKiBiZSBjYWxsZWQgd2hpbGUgYW4gUlBDIGlzIGlu
IHByb2dyZXNzLgotICAgKi8KLSAgdm9pZCByZXNldCgpOwotCi0gIC8qKgotICAgKiBBZnRlciBh
IGNhbGwgaGFzIGZpbmlzaGVkLCByZXR1cm5zIHRydWUgaWYgdGhlIGNhbGwgZmFpbGVkLiAgVGhl
IHBvc3NpYmxlCi0gICAqIHJlYXNvbnMgZm9yIGZhaWx1cmUgZGVwZW5kIG9uIHRoZSBSUEMgaW1w
bGVtZW50YXRpb24uICB7QGNvZGUgZmFpbGVkKCl9Ci0gICAqIG1vc3Qgb25seSBiZSBjYWxsZWQg
b24gdGhlIGNsaWVudCBzaWRlLCBhbmQgbXVzdCBub3QgYmUgY2FsbGVkIGJlZm9yZSBhCi0gICAq
IGNhbGwgaGFzIGZpbmlzaGVkLgotICAgKi8KLSAgYm9vbGVhbiBmYWlsZWQoKTsKLQotICAvKioK
LSAgICogSWYge0Bjb2RlIGZhaWxlZCgpfSBpcyB7QGNvZGUgdHJ1ZX0sIHJldHVybnMgYSBodW1h
bi1yZWFkYWJsZSBkZXNjcmlwdGlvbgotICAgKiBvZiB0aGUgZXJyb3IuCi0gICAqLwotICBTdHJp
bmcgZXJyb3JUZXh0KCk7Ci0KLSAgLyoqCi0gICAqIEFkdmlzZXMgdGhlIFJQQyBzeXN0ZW0gdGhh
dCB0aGUgY2FsbGVyIGRlc2lyZXMgdGhhdCB0aGUgUlBDIGNhbGwgYmUKLSAgICogY2FuY2VsZWQu
ICBUaGUgUlBDIHN5c3RlbSBtYXkgY2FuY2VsIGl0IGltbWVkaWF0ZWx5LCBtYXkgd2FpdCBhd2hp
bGUgYW5kCi0gICAqIHRoZW4gY2FuY2VsIGl0LCBvciBtYXkgbm90IGV2ZW4gY2FuY2VsIHRoZSBj
YWxsIGF0IGFsbC4gIElmIHRoZSBjYWxsIGlzCi0gICAqIGNhbmNlbGVkLCB0aGUgImRvbmUiIGNh
bGxiYWNrIHdpbGwgc3RpbGwgYmUgY2FsbGVkIGFuZCB0aGUgUnBjQ29udHJvbGxlcgotICAgKiB3
aWxsIGluZGljYXRlIHRoYXQgdGhlIGNhbGwgZmFpbGVkIGF0IHRoYXQgdGltZS4KLSAgICovCi0g
IHZvaWQgc3RhcnRDYW5jZWwoKTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBUaGVzZSBjYWxscyBt
YXkgYmUgbWFkZSBmcm9tIHRoZSBzZXJ2ZXIgc2lkZSBvbmx5LiAgVGhlaXIgcmVzdWx0cwotICAv
LyBhcmUgdW5kZWZpbmVkIG9uIHRoZSBjbGllbnQgc2lkZSAobWF5IHRocm93IFJ1bnRpbWVFeGNl
cHRpb25zKS4KLQotICAvKioKLSAgICogQ2F1c2VzIHtAY29kZSBmYWlsZWQoKX0gdG8gcmV0dXJu
IHRydWUgb24gdGhlIGNsaWVudCBzaWRlLiAge0Bjb2RlIHJlYXNvbn0KLSAgICogd2lsbCBiZSBp
bmNvcnBvcmF0ZWQgaW50byB0aGUgbWVzc2FnZSByZXR1cm5lZCBieSB7QGNvZGUgZXJyb3JUZXh0
KCl9LgotICAgKiBJZiB5b3UgZmluZCB5b3UgbmVlZCB0byByZXR1cm4gbWFjaGluZS1yZWFkYWJs
ZSBpbmZvcm1hdGlvbiBhYm91dAotICAgKiBmYWlsdXJlcywgeW91IHNob3VsZCBpbmNvcnBvcmF0
ZSBpdCBpbnRvIHlvdXIgcmVzcG9uc2UgcHJvdG9jb2wgYnVmZmVyCi0gICAqIGFuZCBzaG91bGQg
Tk9UIGNhbGwge0Bjb2RlIHNldEZhaWxlZCgpfS4KLSAgICovCi0gIHZvaWQgc2V0RmFpbGVkKFN0
cmluZyByZWFzb24pOwotCi0gIC8qKgotICAgKiBJZiB7QGNvZGUgdHJ1ZX0sIGluZGljYXRlcyB0
aGF0IHRoZSBjbGllbnQgY2FuY2VsZWQgdGhlIFJQQywgc28gdGhlIHNlcnZlcgotICAgKiBtYXkg
YXMgd2VsbCBnaXZlIHVwIG9uIHJlcGx5aW5nIHRvIGl0LiAgVGhpcyBtZXRob2QgbXVzdCBiZSBj
YWxsZWQgb24gdGhlCi0gICAqIHNlcnZlciBzaWRlIG9ubHkuICBUaGUgc2VydmVyIHNob3VsZCBz
dGlsbCBjYWxsIHRoZSBmaW5hbCAiZG9uZSIgY2FsbGJhY2suCi0gICAqLwotICBib29sZWFuIGlz
Q2FuY2VsZWQoKTsKLQotICAvKioKLSAgICogQXNrcyB0aGF0IHRoZSBnaXZlbiBjYWxsYmFjayBi
ZSBjYWxsZWQgd2hlbiB0aGUgUlBDIGlzIGNhbmNlbGVkLiAgVGhlCi0gICAqIHBhcmFtZXRlciBw
YXNzZWQgdG8gdGhlIGNhbGxiYWNrIHdpbGwgYWx3YXlzIGJlIHtAY29kZSBudWxsfS4gIFRoZQot
ICAgKiBjYWxsYmFjayB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLiAgSWYgdGhl
IFJQQyBjb21wbGV0ZXMgd2l0aG91dAotICAgKiBiZWluZyBjYW5jZWxlZCwgdGhlIGNhbGxiYWNr
IHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNvbXBsZXRpb24uICBJZiB0aGUgUlBDCi0gICAqIGhhcyBh
bHJlYWR5IGJlZW4gY2FuY2VsZWQgd2hlbiBOb3RpZnlPbkNhbmNlbCgpIGlzIGNhbGxlZCwgdGhl
IGNhbGxiYWNrCi0gICAqIHdpbGwgYmUgY2FsbGVkIGltbWVkaWF0ZWx5LgotICAgKgotICAgKiA8
cD57QGNvZGUgbm90aWZ5T25DYW5jZWwoKX0gbXVzdCBiZSBjYWxsZWQgbm8gbW9yZSB0aGFuIG9u
Y2UgcGVyIHJlcXVlc3QuCi0gICAqIEl0IG11c3QgYmUgY2FsbGVkIG9uIHRoZSBzZXJ2ZXIgc2lk
ZSBvbmx5LgotICAgKi8KLSAgdm9pZCBub3RpZnlPbkNhbmNlbChScGNDYWxsYmFjazxPYmplY3Q+
IGNhbGxiYWNrKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dv
b2dsZS9wcm90b2J1Zi9ScGNVdGlsLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvUnBjVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmN2Q1NTVhZTE1NWY1MWU1NWQ1NDYxMGY2MjUxZTc0MzE2M2RjMThkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEv
Y29tL2dvb2dsZS9wcm90b2J1Zi9ScGNVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29t
Lmdvb2dsZS5wcm90b2J1ZjsKLQotLyoqCi0gKiBHcmFiLWJhZyBvZiB1dGlsaXR5IGZ1bmN0aW9u
cyB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggUlBDcy4KLSAqCi0gKiBAYXV0aG9yIGtlbnRvbkBn
b29nbGUuY29tIEtlbnRvbiBWYXJkYQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUnBjVXRpbCB7
Ci0gIHByaXZhdGUgUnBjVXRpbCgpIHt9Ci0KLSAgLyoqCi0gICAqIFRha2UgYW4ge0Bjb2RlIFJw
Y0NhbGxiYWNrPE1lc3NhZ2U+fSBhbmQgY29udmVydCBpdCB0byBhbgotICAgKiB7QGNvZGUgUnBj
Q2FsbGJhY2t9IGFjY2VwdGluZyBhIHNwZWNpZmljIG1lc3NhZ2UgdHlwZS4gIFRoaXMgaXMgYWx3
YXlzCi0gICAqIHR5cGUtc2FmZSAocGFyYW1ldGVyIHR5cGUgY29udHJhdmFyaWFuY2UpLgotICAg
Ki8KLSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHB1YmxpYyBzdGF0aWMgPFR5
cGUgZXh0ZW5kcyBNZXNzYWdlPiBScGNDYWxsYmFjazxUeXBlPgotICBzcGVjaWFsaXplQ2FsbGJh
Y2soZmluYWwgUnBjQ2FsbGJhY2s8TWVzc2FnZT4gb3JpZ2luYWxDYWxsYmFjaykgewotICAgIHJl
dHVybiAoUnBjQ2FsbGJhY2s8VHlwZT4pb3JpZ2luYWxDYWxsYmFjazsKLSAgICAvLyBUaGUgYWJv
dmUgY2FzdCB3b3JrcywgYnV0IG9ubHkgZHVlIHRvIHRlY2huaWNhbCBkZXRhaWxzIG9mIHRoZSBK
YXZhCi0gICAgLy8gaW1wbGVtZW50YXRpb24uICBBIG1vcmUgdGhlb3JldGljYWxseSBjb3JyZWN0
IC0tIGJ1dCBsZXNzIGVmZmljaWVudCAtLQotICAgIC8vIGltcGxlbWVudGF0aW9uIHdvdWxkIGJl
IGFzIGZvbGxvd3M6Ci0gICAgLy8gICByZXR1cm4gbmV3IFJwY0NhbGxiYWNrPFR5cGU+KCkgewot
ICAgIC8vICAgICBwdWJsaWMgdm9pZCBydW4oVHlwZSBwYXJhbWV0ZXIpIHsKLSAgICAvLyAgICAg
ICBvcmlnaW5hbENhbGxiYWNrLnJ1bihwYXJhbWV0ZXIpOwotICAgIC8vICAgICB9Ci0gICAgLy8g
ICB9OwotICB9Ci0KLSAgLyoqCi0gICAqIFRha2UgYW4ge0Bjb2RlIFJwY0NhbGxiYWNrfSBhY2Nl
cHRpbmcgYSBzcGVjaWZpYyBtZXNzYWdlIHR5cGUgYW5kIGNvbnZlcnQKLSAgICogaXQgdG8gYW4g
e0Bjb2RlIFJwY0NhbGxiYWNrPE1lc3NhZ2U+fS4gIFRoZSBnZW5lcmFsaXplZCBjYWxsYmFjayB3
aWxsCi0gICAqIGFjY2VwdCBhbnkgbWVzc2FnZSBvYmplY3Qgd2hpY2ggaGFzIHRoZSBzYW1lIGRl
c2NyaXB0b3IsIGFuZCB3aWxsIGNvbnZlcnQKLSAgICogaXQgdG8gdGhlIGNvcnJlY3QgY2xhc3Mg
YmVmb3JlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIGNhbGxiYWNrLiAgSG93ZXZlciwKLSAgICogaWYg
dGhlIGdlbmVyYWxpemVkIGNhbGxiYWNrIGlzIGdpdmVuIGEgbWVzc2FnZSB3aXRoIGEgZGlmZmVy
ZW50IGRlc2NyaXB0b3IsCi0gICAqIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgPFR5cGUgZXh0ZW5kcyBNZXNzYWdlPgotICBScGNDYWxsYmFjazxN
ZXNzYWdlPiBnZW5lcmFsaXplQ2FsbGJhY2soCi0gICAgICBmaW5hbCBScGNDYWxsYmFjazxUeXBl
PiBvcmlnaW5hbENhbGxiYWNrLAotICAgICAgZmluYWwgQ2xhc3M8VHlwZT4gb3JpZ2luYWxDbGFz
cywKLSAgICAgIGZpbmFsIFR5cGUgZGVmYXVsdEluc3RhbmNlKSB7Ci0gICAgcmV0dXJuIG5ldyBS
cGNDYWxsYmFjazxNZXNzYWdlPigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZv
aWQgcnVuKGZpbmFsIE1lc3NhZ2UgcGFyYW1ldGVyKSB7Ci0gICAgICAgIFR5cGUgdHlwZWRQYXJh
bWV0ZXI7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgdHlwZWRQYXJhbWV0ZXIgPSBvcmlnaW5h
bENsYXNzLmNhc3QocGFyYW1ldGVyKTsKLSAgICAgICAgfSBjYXRjaCAoQ2xhc3NDYXN0RXhjZXB0
aW9uIGlnbm9yZWQpIHsKLSAgICAgICAgICB0eXBlZFBhcmFtZXRlciA9IGNvcHlBc1R5cGUoZGVm
YXVsdEluc3RhbmNlLCBwYXJhbWV0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIG9yaWdpbmFsQ2Fs
bGJhY2sucnVuKHR5cGVkUGFyYW1ldGVyKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgLyoq
Ci0gICAqIENyZWF0ZXMgYSBuZXcgbWVzc2FnZSBvZiB0eXBlICJUeXBlIiB3aGljaCBpcyBhIGNv
cHkgb2YgInNvdXJjZSIuICAic291cmNlIgotICAgKiBtdXN0IGhhdmUgdGhlIHNhbWUgZGVzY3Jp
cHRvciBidXQgbWF5IGJlIGEgZGlmZmVyZW50IGNsYXNzIChlLmcuCi0gICAqIER5bmFtaWNNZXNz
YWdlKS4KLSAgICovCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwcml2YXRl
IHN0YXRpYyA8VHlwZSBleHRlbmRzIE1lc3NhZ2U+IFR5cGUgY29weUFzVHlwZSgKLSAgICAgIGZp
bmFsIFR5cGUgdHlwZURlZmF1bHRJbnN0YW5jZSwgZmluYWwgTWVzc2FnZSBzb3VyY2UpIHsKLSAg
ICByZXR1cm4gKFR5cGUpIHR5cGVEZWZhdWx0SW5zdGFuY2UKLSAgICAgICAgLm5ld0J1aWxkZXJG
b3JUeXBlKCkubWVyZ2VGcm9tKHNvdXJjZSkuYnVpbGQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBD
cmVhdGVzIGEgY2FsbGJhY2sgd2hpY2ggY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuICBUaGlzIG1h
eSBiZSB1c2VmdWwgZm9yCi0gICAqIHNlY3VyaXR5LCB3aGVuIHBhc3NpbmcgYSBjYWxsYmFjayB0
byB1bnRydXN0ZWQgY29kZTogIG1vc3QgY2FsbGJhY2tzIGRvCi0gICAqIG5vdCBleHBlY3QgdG8g
YmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLCBzbyBkb2luZyBzbyBtYXkgZXhwb3NlIGJ1Z3MgaWYg
aXQKLSAgICogaXMgbm90IHByZXZlbnRlZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgPFBhcmFt
ZXRlclR5cGU+Ci0gICAgUnBjQ2FsbGJhY2s8UGFyYW1ldGVyVHlwZT4gbmV3T25lVGltZUNhbGxi
YWNrKAotICAgICAgZmluYWwgUnBjQ2FsbGJhY2s8UGFyYW1ldGVyVHlwZT4gb3JpZ2luYWxDYWxs
YmFjaykgewotICAgIHJldHVybiBuZXcgUnBjQ2FsbGJhY2s8UGFyYW1ldGVyVHlwZT4oKSB7Ci0g
ICAgICBwcml2YXRlIGJvb2xlYW4gYWxyZWFkeUNhbGxlZCA9IGZhbHNlOwotCi0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bihmaW5hbCBQYXJhbWV0ZXJUeXBlIHBhcmFtZXRl
cikgewotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICBpZiAoYWxyZWFk
eUNhbGxlZCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFscmVhZHlDYWxsZWRFeGNlcHRpb24o
KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBvcmlnaW5hbENhbGxiYWNrLnJ1bihwYXJhbWV0ZXIpOwotICAgICAgfQot
ICAgIH07Ci0gIH0KLQotICAvKioKLSAgICogRXhjZXB0aW9uIHRocm93biB3aGVuIGEgb25lLXRp
bWUgY2FsbGJhY2sgaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBmaW5hbCBjbGFzcyBBbHJlYWR5Q2FsbGVkRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4
Y2VwdGlvbiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlE
ID0gNTQ2OTc0MTI3OTUwNzg0ODI2Nkw7Ci0KLSAgICBwdWJsaWMgQWxyZWFkeUNhbGxlZEV4Y2Vw
dGlvbigpIHsKLSAgICAgIHN1cGVyKCJUaGlzIFJwY0NhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxl
ZCBhbmQgY2Fubm90IGJlIGNhbGxlZCAiICsKLSAgICAgICAgICAgICJtdWx0aXBsZSB0aW1lcy4i
KTsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9TZXJ2aWNlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiYTdiMDMzZWQ0Mzg3YmFlYjI0YThmZWUzZTA2ZjQyNTk2NWVkZTQzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9TZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2Ug
Y29tLmdvb2dsZS5wcm90b2J1ZjsKLQotLyoqCi0gKiBBYnN0cmFjdCBiYXNlIGludGVyZmFjZSBm
b3IgcHJvdG9jb2wtYnVmZmVyLWJhc2VkIFJQQyBzZXJ2aWNlcy4gIFNlcnZpY2VzCi0gKiB0aGVt
c2VsdmVzIGFyZSBhYnN0cmFjdCBjbGFzc2VzIChpbXBsZW1lbnRlZCBlaXRoZXIgYnkgc2VydmVy
cyBvciBhcwotICogc3R1YnMpLCBidXQgdGhleSBzdWJjbGFzcyB0aGlzIGJhc2UgaW50ZXJmYWNl
LiAgVGhlIG1ldGhvZHMgb2YgdGhpcwotICogaW50ZXJmYWNlIGNhbiBiZSB1c2VkIHRvIGNhbGwg
dGhlIG1ldGhvZHMgb2YgdGhlIHNlcnZpY2Ugd2l0aG91dCBrbm93aW5nCi0gKiBpdHMgZXhhY3Qg
dHlwZSBhdCBjb21waWxlIHRpbWUgKGFuYWxvZ291cyB0byB0aGUgTWVzc2FnZSBpbnRlcmZhY2Up
LgotICoKLSAqIDxwPlN0YXJ0aW5nIHdpdGggdmVyc2lvbiAyLjMuMCwgUlBDIGltcGxlbWVudGF0
aW9ucyBzaG91bGQgbm90IHRyeSB0byBidWlsZAotICogb24gdGhpcywgYnV0IHNob3VsZCBpbnN0
ZWFkIHByb3ZpZGUgY29kZSBnZW5lcmF0b3IgcGx1Z2lucyB3aGljaCBnZW5lcmF0ZQotICogY29k
ZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBSUEMgaW1wbGVtZW50YXRpb24uICBUaGlzIHdh
eSB0aGUgZ2VuZXJhdGVkCi0gKiBjb2RlIGNhbiBiZSBtb3JlIGFwcHJvcHJpYXRlIGZvciB0aGUg
aW1wbGVtZW50YXRpb24gaW4gdXNlIGFuZCBjYW4gYXZvaWQKLSAqIHVubmVjZXNzYXJ5IGxheWVy
cyBvZiBpbmRpcmVjdGlvbi4KLSAqCi0gKiBAYXV0aG9yIGtlbnRvbkBnb29nbGUuY29tIEtlbnRv
biBWYXJkYQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNlcnZpY2UgewotICAvKioKLSAgICogR2V0
IHRoZSB7QGNvZGUgU2VydmljZURlc2NyaXB0b3J9IGRlc2NyaWJpbmcgdGhpcyBzZXJ2aWNlIGFu
ZCBpdHMgbWV0aG9kcy4KLSAgICovCi0gIERlc2NyaXB0b3JzLlNlcnZpY2VEZXNjcmlwdG9yIGdl
dERlc2NyaXB0b3JGb3JUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIDxwPkNhbGwgYSBtZXRob2Qgb2Yg
dGhlIHNlcnZpY2Ugc3BlY2lmaWVkIGJ5IE1ldGhvZERlc2NyaXB0b3IuICBUaGlzIGlzCi0gICAq
IG5vcm1hbGx5IGltcGxlbWVudGVkIGFzIGEgc2ltcGxlIHtAY29kZSBzd2l0Y2goKX0gdGhhdCBj
YWxscyB0aGUgc3RhbmRhcmQKLSAgICogZGVmaW5pdGlvbnMgb2YgdGhlIHNlcnZpY2UncyBtZXRo
b2RzLgotICAgKgotICAgKiA8cD5QcmVjb25kaXRpb25zOgotICAgKiA8dWw+Ci0gICAqICAgPGxp
PntAY29kZSBtZXRob2QuZ2V0U2VydmljZSgpID09IGdldERlc2NyaXB0b3JGb3JUeXBlKCl9Ci0g
ICAqICAgPGxpPntAY29kZSByZXF1ZXN0fSBpcyBvZiB0aGUgZXhhY3Qgc2FtZSBjbGFzcyBhcyB0
aGUgb2JqZWN0IHJldHVybmVkIGJ5Ci0gICAqICAgICAgIHtAY29kZSBnZXRSZXF1ZXN0UHJvdG90
eXBlKG1ldGhvZCl9LgotICAgKiAgIDxsaT57QGNvZGUgY29udHJvbGxlcn0gaXMgb2YgdGhlIGNv
cnJlY3QgdHlwZSBmb3IgdGhlIFJQQyBpbXBsZW1lbnRhdGlvbgotICAgKiAgICAgICBiZWluZyB1
c2VkIGJ5IHRoaXMgU2VydmljZS4gIEZvciBzdHVicywgdGhlICJjb3JyZWN0IHR5cGUiIGRlcGVu
ZHMKLSAgICogICAgICAgb24gdGhlIFJwY0NoYW5uZWwgd2hpY2ggdGhlIHN0dWIgaXMgdXNpbmcu
ICBTZXJ2ZXItc2lkZSBTZXJ2aWNlCi0gICAqICAgICAgIGltcGxlbWVudGF0aW9ucyBhcmUgZXhw
ZWN0ZWQgdG8gYWNjZXB0IHdoYXRldmVyIHR5cGUgb2YKLSAgICogICAgICAge0Bjb2RlIFJwY0Nv
bnRyb2xsZXJ9IHRoZSBzZXJ2ZXItc2lkZSBSUEMgaW1wbGVtZW50YXRpb24gdXNlcy4KLSAgICog
PC91bD4KLSAgICoKLSAgICogPHA+UG9zdGNvbmRpdGlvbnM6Ci0gICAqIDx1bD4KLSAgICogICA8
bGk+e0Bjb2RlIGRvbmV9IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIG1ldGhvZCBpcyBjb21wbGV0
ZS4gIFRoaXMgbWF5IGJlCi0gICAqICAgICAgIGJlZm9yZSB7QGNvZGUgY2FsbE1ldGhvZCgpfSBy
ZXR1cm5zIG9yIGl0IG1heSBiZSBhdCBzb21lIHBvaW50IGluCi0gICAqICAgICAgIHRoZSBmdXR1
cmUuCi0gICAqICAgPGxpPlRoZSBwYXJhbWV0ZXIgdG8ge0Bjb2RlIGRvbmV9IGlzIHRoZSByZXNw
b25zZS4gIEl0IG11c3QgYmUgb2YgdGhlCi0gICAqICAgICAgIGV4YWN0IHNhbWUgdHlwZSBhcyB3
b3VsZCBiZSByZXR1cm5lZCBieQotICAgKiAgICAgICB7QGNvZGUgZ2V0UmVzcG9uc2VQcm90b3R5
cGUobWV0aG9kKX0uCi0gICAqICAgPGxpPklmIHRoZSBSUEMgZmFpbGVkLCB0aGUgcGFyYW1ldGVy
IHRvIHtAY29kZSBkb25lfSB3aWxsIGJlCi0gICAqICAgICAgIHtAY29kZSBudWxsfS4gIEZ1cnRo
ZXIgZGV0YWlscyBhYm91dCB0aGUgZmFpbHVyZSBjYW4gYmUgZm91bmQgYnkKLSAgICogICAgICAg
cXVlcnlpbmcge0Bjb2RlIGNvbnRyb2xsZXJ9LgotICAgKiA8L3VsPgotICAgKi8KLSAgdm9pZCBj
YWxsTWV0aG9kKERlc2NyaXB0b3JzLk1ldGhvZERlc2NyaXB0b3IgbWV0aG9kLAotICAgICAgICAg
ICAgICAgICAgUnBjQ29udHJvbGxlciBjb250cm9sbGVyLAotICAgICAgICAgICAgICAgICAgTWVz
c2FnZSByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgUnBjQ2FsbGJhY2s8TWVzc2FnZT4gZG9u
ZSk7Ci0KLSAgLyoqCi0gICAqIDxwPntAY29kZSBjYWxsTWV0aG9kKCl9IHJlcXVpcmVzIHRoYXQg
dGhlIHJlcXVlc3QgcGFzc2VkIGluIGlzIG9mIGEKLSAgICogcGFydGljdWxhciBzdWJjbGFzcyBv
ZiB7QGNvZGUgTWVzc2FnZX0uICB7QGNvZGUgZ2V0UmVxdWVzdFByb3RvdHlwZSgpfQotICAgKiBn
ZXRzIHRoZSBkZWZhdWx0IGluc3RhbmNlcyBvZiB0aGlzIHR5cGUgZm9yIGEgZ2l2ZW4gbWV0aG9k
LiAgWW91IGNhbiB0aGVuCi0gICAqIGNhbGwge0Bjb2RlIE1lc3NhZ2UubmV3QnVpbGRlckZvclR5
cGUoKX0gb24gdGhpcyBpbnN0YW5jZSB0bwotICAgKiBjb25zdHJ1Y3QgYSBidWlsZGVyIHRvIGJ1
aWxkIGFuIG9iamVjdCB3aGljaCB5b3UgY2FuIHRoZW4gcGFzcyB0bwotICAgKiB7QGNvZGUgY2Fs
bE1ldGhvZCgpfS4KLSAgICoKLSAgICogPHA+RXhhbXBsZToKLSAgICogPHByZT4KLSAgICogICBN
ZXRob2REZXNjcmlwdG9yIG1ldGhvZCA9Ci0gICAqICAgICBzZXJ2aWNlLmdldERlc2NyaXB0b3JG
b3JUeXBlKCkuZmluZE1ldGhvZEJ5TmFtZSgiRm9vIik7Ci0gICAqICAgTWVzc2FnZSByZXF1ZXN0
ID0KLSAgICogICAgIHN0dWIuZ2V0UmVxdWVzdFByb3RvdHlwZShtZXRob2QpLm5ld0J1aWxkZXJG
b3JUeXBlKCkKLSAgICogICAgICAgICAubWVyZ2VGcm9tKGlucHV0KS5idWlsZCgpOwotICAgKiAg
IHNlcnZpY2UuY2FsbE1ldGhvZChtZXRob2QsIHJlcXVlc3QsIGNhbGxiYWNrKTsKLSAgICogPC9w
cmU+Ci0gICAqLwotICBNZXNzYWdlIGdldFJlcXVlc3RQcm90b3R5cGUoRGVzY3JpcHRvcnMuTWV0
aG9kRGVzY3JpcHRvciBtZXRob2QpOwotCi0gIC8qKgotICAgKiBMaWtlIHtAY29kZSBnZXRSZXF1
ZXN0UHJvdG90eXBlKCl9LCBidXQgZ2V0cyBhIHByb3RvdHlwZSBvZiB0aGUgcmVzcG9uc2UKLSAg
ICogbWVzc2FnZS4gIHtAY29kZSBnZXRSZXNwb25zZVByb3RvdHlwZSgpfSBpcyBnZW5lcmFsbHkg
bm90IG5lZWRlZCBiZWNhdXNlCi0gICAqIHRoZSB7QGNvZGUgU2VydmljZX0gaW1wbGVtZW50YXRp
b24gY29uc3RydWN0cyB0aGUgcmVzcG9uc2UgbWVzc2FnZSBpdHNlbGYsCi0gICAqIGJ1dCBpdCBt
YXkgYmUgdXNlZnVsIGluIHNvbWUgY2FzZXMgdG8ga25vdyBhaGVhZCBvZiB0aW1lIHdoYXQgdHlw
ZSBvZgotICAgKiBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4KLSAgICovCi0gIE1lc3NhZ2UgZ2V0
UmVzcG9uc2VQcm90b3R5cGUoRGVzY3JpcHRvcnMuTWV0aG9kRGVzY3JpcHRvciBtZXRob2QpOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L1NlcnZpY2VFeGNlcHRpb24uamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9TZXJ2aWNlRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwZDU3MDc1MjM1MjNjYjM2MjBhNzY0YjlmZDM2Y2Y3NTM3OTc1NDkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4v
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1NlcnZpY2VFeGNlcHRpb24uamF2YQorKysgL2Rldi9u
dWxsCkBAIC0xLDUyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLS8qKgotICogVGhyb3duIGJ5IGJsb2Nr
aW5nIFJQQyBtZXRob2RzIHdoZW4gYSBmYWlsdXJlIG9jY3Vycy4KLSAqCi0gKiBAYXV0aG9yIGNw
b3ZpcmtAZ29vZ2xlLmNvbSAoQ2hyaXMgUG92aXJrKQotICovCi1wdWJsaWMgY2xhc3MgU2Vydmlj
ZUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxv
bmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xMjE5MjYyMzM1NzI5ODkxOTIwTDsKLQotICBwdWJsaWMg
U2VydmljZUV4Y2VwdGlvbihmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotICAgIHN1cGVyKG1lc3Nh
Z2UpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2VFeGNlcHRpb24oZmluYWwgVGhyb3dhYmxlIGNh
dXNlKSB7Ci0gICAgc3VwZXIoY2F1c2UpOwotICB9Ci0KLSAgcHVibGljIFNlcnZpY2VFeGNlcHRp
b24oZmluYWwgU3RyaW5nIG1lc3NhZ2UsIGZpbmFsIFRocm93YWJsZSBjYXVzZSkgewotICAgIHN1
cGVyKG1lc3NhZ2UsIGNhdXNlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21h
aW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1NpbmdsZUZpZWxkQnVpbGRlci5qYXZhIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZh
L2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1NpbmdsZUZpZWxkQnVpbGRl
ci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDFiNWRlZmM5NTVjNmEwODE5
Mzk4NmZhNjAyYTUwYjJhMzUxMGM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9T
aW5nbGVGaWVsZEJ1aWxkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnBy
b3RvYnVmOwotCi0vKioKLSAqIHtAY29kZSBTaW5nbGVGaWVsZEJ1aWxkZXJ9IGltcGxlbWVudHMg
YSBzdHJ1Y3R1cmUgdGhhdCBhIHByb3RvY29sCi0gKiBtZXNzYWdlIHVzZXMgdG8gaG9sZCBhIHNp
bmdsZSBmaWVsZCBvZiBhbm90aGVyIHByb3RvY29sIG1lc3NhZ2UuIEl0IHN1cHBvcnRzCi0gKiB0
aGUgY2xhc3NpY2FsIHVzZSBjYXNlIG9mIHNldHRpbmcgYW4gaW1tdXRhYmxlIHtAbGluayBNZXNz
YWdlfSBhcyB0aGUgdmFsdWUKLSAqIG9mIHRoZSBmaWVsZCBhbmQgaXMgaGlnaGx5IG9wdGltaXpl
ZCBhcm91bmQgdGhpcy4KLSAqIDxicj4KLSAqIEl0IGFsc28gc3VwcG9ydHMgdGhlIGFkZGl0aW9u
YWwgdXNlIGNhc2Ugb2Ygc2V0dGluZyBhIHtAbGluayBNZXNzYWdlLkJ1aWxkZXJ9Ci0gKiBhcyB0
aGUgZmllbGQgYW5kIGRlZmVycmluZyBjb252ZXJzaW9uIG9mIHRoYXQge0Bjb2RlIEJ1aWxkZXJ9
Ci0gKiB0byBhbiBpbW11dGFibGUge0Bjb2RlIE1lc3NhZ2V9LiBJbiB0aGlzIHdheSwgaXQncyBw
b3NzaWJsZSB0byBtYWludGFpbgotICogYSB0cmVlIG9mIHtAY29kZSBCdWlsZGVyfSdzIHRoYXQg
YWN0cyBhcyBhIGZ1bGx5IHJlYWQvd3JpdGUgZGF0YQotICogc3RydWN0dXJlLgotICogPGJyPgot
ICogTG9naWNhbGx5LCBvbmUgY2FuIHRoaW5rIG9mIGEgdHJlZSBvZiBidWlsZGVycyBhcyBjb252
ZXJ0aW5nIHRoZSBlbnRpcmUgdHJlZQotICogdG8gbWVzc2FnZXMgd2hlbiBidWlsZCBpcyBjYWxs
ZWQgb24gdGhlIHJvb3Qgb3Igd2hlbiBhbnkgbWV0aG9kIGlzIGNhbGxlZAotICogdGhhdCBkZXNp
cmVzIGEgTWVzc2FnZSBpbnN0ZWFkIG9mIGEgQnVpbGRlci4gSW4gdGVybXMgb2YgdGhlIGltcGxl
bWVudGF0aW9uLAotICogdGhlIHtAY29kZSBTaW5nbGVGaWVsZEJ1aWxkZXJ9IGFuZCB7QGNvZGUg
UmVwZWF0ZWRGaWVsZEJ1aWxkZXJ9Ci0gKiBjbGFzc2VzIGNhY2hlIG1lc3NhZ2VzIHRoYXQgd2Vy
ZSBjcmVhdGVkIHNvIHRoYXQgbWVzc2FnZXMgb25seSBuZWVkIHRvIGJlCi0gKiBjcmVhdGVkIHdo
ZW4gc29tZSBjaGFuZ2Ugb2NjdXJyZWQgaW4gaXRzIGJ1aWxkZXIgb3IgYSBidWlsZGVyIGZvciBv
bmUgb2YgaXRzCi0gKiBkZXNjZW5kYW50cy4KLSAqCi0gKiBAcGFyYW0gPE1UeXBlPiB0aGUgdHlw
ZSBvZiBtZXNzYWdlIGZvciB0aGUgZmllbGQKLSAqIEBwYXJhbSA8QlR5cGU+IHRoZSB0eXBlIG9m
IGJ1aWxkZXIgZm9yIHRoZSBmaWVsZAotICogQHBhcmFtIDxJVHlwZT4gdGhlIGNvbW1vbiBpbnRl
cmZhY2UgZm9yIHRoZSBtZXNzYWdlIGFuZCB0aGUgYnVpbGRlcgotICoKLSAqIEBhdXRob3Igam9u
cEBnb29nbGUuY29tIChKb24gUGVybG93KQotICovCi1wdWJsaWMgY2xhc3MgU2luZ2xlRmllbGRC
dWlsZGVyCi0gICAgPE1UeXBlIGV4dGVuZHMgR2VuZXJhdGVkTWVzc2FnZSwKLSAgICAgQlR5cGUg
ZXh0ZW5kcyBHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXIsCi0gICAgIElUeXBlIGV4dGVuZHMgTWVz
c2FnZU9yQnVpbGRlcj4KLSAgICBpbXBsZW1lbnRzIEdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlclBh
cmVudCB7Ci0KLSAgLy8gUGFyZW50IHRvIHNlbmQgY2hhbmdlcyB0by4KLSAgcHJpdmF0ZSBHZW5l
cmF0ZWRNZXNzYWdlLkJ1aWxkZXJQYXJlbnQgcGFyZW50OwotCi0gIC8vIEludmFyaWFudDogb25l
IG9mIGJ1aWxkZXIgb3IgbWVzc2FnZSBmaWVsZHMgbXVzdCBiZSBub24tbnVsbC4KLQotICAvLyBJ
ZiBzZXQsIHRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGJhY2tlZCBieSBhIGJ1aWxkZXIu
IEluIHRoaXMgY2FzZSwKLSAgLy8gbWVzc2FnZSBmaWVsZCByZXByZXNlbnRzIGEgY2FjaGVkIG1l
c3NhZ2UgZm9yIHRoZSBidWlsZGVyIChvciBudWxsIGlmCi0gIC8vIHRoZXJlIGlzIG5vIGNhY2hl
ZCBtZXNzYWdlKS4KLSAgcHJpdmF0ZSBCVHlwZSBidWlsZGVyOwotCi0gIC8vIElmIGJ1aWxkZXIg
aXMgbm9uLW51bGwsIHRoaXMgcmVwcmVzZW50cyBhIGNhY2hlZCBtZXNzYWdlIGZyb20gdGhlIGJ1
aWxkZXIuCi0gIC8vIElmIGJ1aWxkZXIgaXMgbnVsbCwgdGhpcyBpcyB0aGUgYXV0aG9yaXRhdGl2
ZSBtZXNzYWdlIGZvciB0aGUgZmllbGQuCi0gIHByaXZhdGUgTVR5cGUgbWVzc2FnZTsKLQotICAv
LyBJbmRpY2F0ZXMgdGhhdCB3ZSd2ZSBidWlsdCBhIG1lc3NhZ2UgYW5kIHNvIHdlIGFyZSBub3cg
b2JsaWdhdGVkCi0gIC8vIHRvIGRpc3BhdGNoIGRpcnR5IGludmFsaWRhdGlvbnMuIFNlZSBHZW5l
cmF0ZWRNZXNzYWdlLkJ1aWxkZXJMaXN0ZW5lci4KLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2xlYW47
Ci0KLSAgcHVibGljIFNpbmdsZUZpZWxkQnVpbGRlcigKLSAgICAgIE1UeXBlIG1lc3NhZ2UsCi0g
ICAgICBHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXJQYXJlbnQgcGFyZW50LAotICAgICAgYm9vbGVh
biBpc0NsZWFuKSB7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3
IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIHRoaXMubWVzc2FnZSA9IG1lc3Nh
Z2U7Ci0gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgdGhpcy5pc0NsZWFuID0gaXNDbGVh
bjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgLy8gTnVsbCBvdXQgcGFy
ZW50IHNvIHdlIHN0b3Agc2VuZGluZyBpdCBpbnZhbGlkYXRpb25zLgotICAgIHBhcmVudCA9IG51
bGw7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBtZXNzYWdlIGZvciB0aGUgZmllbGQuIElm
IHRoZSBtZXNzYWdlIGlzIGN1cnJlbnRseSBzdG9yZWQKLSAgICogYXMgYSB7QGNvZGUgQnVpbGRl
cn0sIGl0IGlzIGNvbnZlcnRlZCB0byBhIHtAY29kZSBNZXNzYWdlfSBieQotICAgKiBjYWxsaW5n
IHtAbGluayBNZXNzYWdlLkJ1aWxkZXIjYnVpbGRQYXJ0aWFsfSBvbiBpdC4gSWYgbm8gbWVzc2Fn
ZSBoYXMKLSAgICogYmVlbiBzZXQsIHJldHVybnMgdGhlIGRlZmF1bHQgaW5zdGFuY2Ugb2YgdGhl
IG1lc3NhZ2UuCi0gICAqCi0gICAqIEByZXR1cm4gdGhlIG1lc3NhZ2UgZm9yIHRoZSBmaWVsZAot
ICAgKi8KLSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHB1YmxpYyBNVHlwZSBn
ZXRNZXNzYWdlKCkgewotICAgIGlmIChtZXNzYWdlID09IG51bGwpIHsKLSAgICAgIC8vIElmIG1l
c3NhZ2UgaXMgbnVsbCwgdGhlIGludmFyaWFudCBpcyB0aGF0IHdlIG11c3QgYmUgaGF2ZSBhIGJ1
aWxkZXIuCi0gICAgICBtZXNzYWdlID0gKE1UeXBlKSBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwot
ICAgIH0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIC8qKgotICAgKiBCdWlsZHMgdGhl
IG1lc3NhZ2UgYW5kIHJldHVybnMgaXQuCi0gICAqCi0gICAqIEByZXR1cm4gdGhlIG1lc3NhZ2UK
LSAgICovCi0gIHB1YmxpYyBNVHlwZSBidWlsZCgpIHsKLSAgICAvLyBOb3cgdGhhdCBidWlsZCBo
YXMgYmVlbiBjYWxsZWQsIHdlIGFyZSByZXF1aXJlZCB0byBkaXNwYXRjaAotICAgIC8vIGludmFs
aWRhdGlvbnMuCi0gICAgaXNDbGVhbiA9IHRydWU7Ci0gICAgcmV0dXJuIGdldE1lc3NhZ2UoKTsK
LSAgfQotCi0gIC8qKgotICAgKiBHZXRzIGEgYnVpbGRlciBmb3IgdGhlIGZpZWxkLiBJZiBubyBi
dWlsZGVyIGhhcyBiZWVuIGNyZWF0ZWQgeWV0LCBhCi0gICAqIGJ1aWxkZXIgaXMgY3JlYXRlZCBv
biBkZW1hbmQgYnkgY2FsbGluZyB7QGxpbmsgTWVzc2FnZSN0b0J1aWxkZXJ9LgotICAgKgotICAg
KiBAcmV0dXJuIFRoZSBidWlsZGVyIGZvciB0aGUgZmllbGQKLSAgICovCi0gIEBTdXBwcmVzc1dh
cm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwdWJsaWMgQlR5cGUgZ2V0QnVpbGRlcigpIHsKLSAgICBp
ZiAoYnVpbGRlciA9PSBudWxsKSB7Ci0gICAgICAvLyBidWlsZGVyLm1lcmdlRnJvbSgpIG9uIGEg
ZnJlc2ggYnVpbGRlcgotICAgICAgLy8gZG9lcyBub3QgY3JlYXRlIGFueSBzdWItb2JqZWN0cyB3
aXRoIGluZGVwZW5kZW50IGNsZWFuL2RpcnR5IHN0YXRlcywKLSAgICAgIC8vIHRoZXJlZm9yZSBz
ZXR0aW5nIHRoZSBidWlsZGVyIGl0c2VsZiB0byBjbGVhbiB3aXRob3V0IGFjdHVhbGx5IGNhbGxp
bmcKLSAgICAgIC8vIGJ1aWxkKCkgY2Fubm90IGJyZWFrIGFueSBpbnZhcmlhbnRzLgotICAgICAg
YnVpbGRlciA9IChCVHlwZSkgbWVzc2FnZS5uZXdCdWlsZGVyRm9yVHlwZSh0aGlzKTsKLSAgICAg
IGJ1aWxkZXIubWVyZ2VGcm9tKG1lc3NhZ2UpOyAvLyBuby1vcCBpZiBtZXNzYWdlIGlzIHRoZSBk
ZWZhdWx0IG1lc3NhZ2UKLSAgICAgIGJ1aWxkZXIubWFya0NsZWFuKCk7Ci0gICAgfQotICAgIHJl
dHVybiBidWlsZGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGJhc2UgY2xhc3MgaW50
ZXJmYWNlIGZvciB0aGUgZmllbGQuIFRoaXMgbWF5IGVpdGhlciBiZSBhIGJ1aWxkZXIKLSAgICog
b3IgYSBtZXNzYWdlLiBJdCB3aWxsIHJldHVybiB3aGF0ZXZlciBpcyBtb3JlIGVmZmljaWVudC4K
LSAgICoKLSAgICogQHJldHVybiB0aGUgbWVzc2FnZSBvciBidWlsZGVyIGZvciB0aGUgZmllbGQg
YXMgdGhlIGJhc2UgY2xhc3MgaW50ZXJmYWNlCi0gICAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygi
dW5jaGVja2VkIikKLSAgcHVibGljIElUeXBlIGdldE1lc3NhZ2VPckJ1aWxkZXIoKSB7Ci0gICAg
aWYgKGJ1aWxkZXIgIT0gbnVsbCkgewotICAgICAgcmV0dXJuICAoSVR5cGUpIGJ1aWxkZXI7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAoSVR5cGUpIG1lc3NhZ2U7Ci0gICAgfQotICB9Ci0K
LSAgLyoqCi0gICAqIFNldHMgYSAgbWVzc2FnZSBmb3IgdGhlIGZpZWxkIHJlcGxhY2luZyBhbnkg
ZXhpc3RpbmcgdmFsdWUuCi0gICAqCi0gICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIHRv
IHNldAotICAgKiBAcmV0dXJuIHRoZSBidWlsZGVyCi0gICAqLwotICBwdWJsaWMgU2luZ2xlRmll
bGRCdWlsZGVyPE1UeXBlLCBCVHlwZSwgSVR5cGU+IHNldE1lc3NhZ2UoCi0gICAgICBNVHlwZSBt
ZXNzYWdlKSB7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IE51
bGxQb2ludGVyRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7
Ci0gICAgaWYgKGJ1aWxkZXIgIT0gbnVsbCkgewotICAgICAgYnVpbGRlci5kaXNwb3NlKCk7Ci0g
ICAgICBidWlsZGVyID0gbnVsbDsKLSAgICB9Ci0gICAgb25DaGFuZ2VkKCk7Ci0gICAgcmV0dXJu
IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogTWVyZ2VzIHRoZSBmaWVsZCBmcm9tIGFub3RoZXIg
ZmllbGQuCi0gICAqCi0gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gbWVyZ2UgZnJvbQot
ICAgKiBAcmV0dXJuIHRoZSBidWlsZGVyCi0gICAqLwotICBwdWJsaWMgU2luZ2xlRmllbGRCdWls
ZGVyPE1UeXBlLCBCVHlwZSwgSVR5cGU+IG1lcmdlRnJvbSgKLSAgICAgIE1UeXBlIHZhbHVlKSB7
Ci0gICAgaWYgKGJ1aWxkZXIgPT0gbnVsbCAmJiBtZXNzYWdlID09IG1lc3NhZ2UuZ2V0RGVmYXVs
dEluc3RhbmNlRm9yVHlwZSgpKSB7Ci0gICAgICBtZXNzYWdlID0gdmFsdWU7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGdldEJ1aWxkZXIoKS5tZXJnZUZyb20odmFsdWUpOwotICAgIH0KLSAgICBvbkNo
YW5nZWQoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBDbGVhcnMgdGhl
IHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICoKLSAgICogQHJldHVybiB0aGUgYnVpbGRlcgotICAg
Ki8KLSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHB1YmxpYyBTaW5nbGVGaWVs
ZEJ1aWxkZXI8TVR5cGUsIEJUeXBlLCBJVHlwZT4gY2xlYXIoKSB7Ci0gICAgbWVzc2FnZSA9IChN
VHlwZSkgKG1lc3NhZ2UgIT0gbnVsbCA/Ci0gICAgICAgIG1lc3NhZ2UuZ2V0RGVmYXVsdEluc3Rh
bmNlRm9yVHlwZSgpIDoKLSAgICAgICAgYnVpbGRlci5nZXREZWZhdWx0SW5zdGFuY2VGb3JUeXBl
KCkpOwotICAgIGlmIChidWlsZGVyICE9IG51bGwpIHsKLSAgICAgIGJ1aWxkZXIuZGlzcG9zZSgp
OwotICAgICAgYnVpbGRlciA9IG51bGw7Ci0gICAgfQotICAgIG9uQ2hhbmdlZCgpOwotICAgIHJl
dHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxlZCB3aGVuIGEgdGhlIGJ1aWxkZXIg
b3Igb25lIG9mIGl0cyBuZXN0ZWQgY2hpbGRyZW4gaGFzIGNoYW5nZWQKLSAgICogYW5kIGFueSBw
YXJlbnQgc2hvdWxkIGJlIG5vdGlmaWVkIG9mIGl0cyBpbnZhbGlkYXRpb24uCi0gICAqLwotICBw
cml2YXRlIHZvaWQgb25DaGFuZ2VkKCkgewotICAgIC8vIElmIGJ1aWxkZXIgaXMgbnVsbCwgdGhp
cyBpcyB0aGUgY2FzZSB3aGVyZSBvbkNoYW5nZWQgaXMgYmVpbmcgY2FsbGVkCi0gICAgLy8gZnJv
bSBzZXRNZXNzYWdlIG9yIGNsZWFyLgotICAgIGlmIChidWlsZGVyICE9IG51bGwpIHsKLSAgICAg
IG1lc3NhZ2UgPSBudWxsOwotICAgIH0KLSAgICBpZiAoaXNDbGVhbiAmJiBwYXJlbnQgIT0gbnVs
bCkgewotICAgICAgcGFyZW50Lm1hcmtEaXJ0eSgpOwotCi0gICAgICAvLyBEb24ndCBrZWVwIGRp
c3BhdGNoaW5nIGludmFsaWRhdGlvbnMgdW50aWwgYnVpbGQgaXMgY2FsbGVkIGFnYWluLgotICAg
ICAgaXNDbGVhbiA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBtYXJrRGlydHkoKSB7Ci0gICAgb25DaGFuZ2VkKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9TbWFsbFNvcnRlZE1h
cC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1NtYWxs
U29ydGVkTWFwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwOWZlYzEwZTU5
ODk0YzM1N2Y1MzdiNWNhMGM1MWI1NmRkYzk3ZjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL1NtYWxsU29ydGVkTWFwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NzAgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2ds
ZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdE1hcDsKLWltcG9ydCBqYXZh
LnV0aWwuQWJzdHJhY3RTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBq
YXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0
IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGls
Lk5vU3VjaEVsZW1lbnRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBq
YXZhLnV0aWwuU29ydGVkTWFwOwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi0vKioKLSAq
IEEgY3VzdG9tIG1hcCBpbXBsZW1lbnRhdGlvbiBmcm9tIEZpZWxkRGVzY3JpcHRvciB0byBPYmpl
Y3Qgb3B0aW1pemVkIHRvCi0gKiBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIG1lbW9yeSBhbGxvY2F0
aW9ucyBmb3IgaW5zdGFuY2VzIHdpdGggYSBzbWFsbCBudW1iZXIKLSAqIG9mIG1hcHBpbmdzLiBU
aGUgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBmaXJzdCB7QGNvZGUga30gbWFwcGluZ3MgaW4g
YW4KLSAqIGFycmF5IGZvciBhIGNvbmZpZ3VyYWJsZSB2YWx1ZSBvZiB7QGNvZGUga30sIGFsbG93
aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlCi0gKiBjb3JyZXNwb25kaW5nIHtAY29kZSBFbnRyeX1z
IHdpdGhvdXQgdGhlIG5lZWQgdG8gY3JlYXRlIGFuIEl0ZXJhdG9yLiBUaGUKLSAqIHJlbWFpbmlu
ZyBlbnRyaWVzIGFyZSBzdG9yZWQgaW4gYW4gb3ZlcmZsb3cgbWFwLiBJdGVyYXRpb24gb3ZlciB0
aGUgZW50cmllcwotICogaW4gdGhlIG1hcCBzaG91bGQgYmUgZG9uZSBhcyBmb2xsb3dzOgotICoK
LSAqIDxwcmU+ICAge0Bjb2RlCi0gKiBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkTWFwLmdldE51
bUFycmF5RW50cmllcygpOyBpKyspIHsKLSAqICAgcHJvY2VzcyhmaWVsZE1hcC5nZXRBcnJheUVu
dHJ5QXQoaSkpOwotICogfQotICogZm9yIChNYXAuRW50cnk8SywgVj4gZW50cnkgOiBmaWVsZE1h
cC5nZXRPdmVyZmxvd0VudHJpZXMoKSkgewotICogICBwcm9jZXNzKGVudHJ5KTsKLSAqIH0KLSAq
IH08L3ByZT4KLSAqCi0gKiBUaGUgcmVzdWx0aW5nIGl0ZXJhdGlvbiBpcyBpbiBvcmRlciBvZiBh
c2NlbmRpbmcgZmllbGQgdGFnIG51bWJlci4gVGhlCi0gKiBvYmplY3QgcmV0dXJuZWQgYnkge0Bs
aW5rICNlbnRyeVNldCgpfSBhZGhlcmVzIHRvIHRoZSBzYW1lIGNvbnRyYWN0IGJ1dCBpcwotICog
bGVzcyBlZmZpY2llbnQgYXMgaXQgbmVjZXNzYXJpbHkgaW52b2x2ZXMgY3JlYXRpbmcgYW4gb2Jq
ZWN0IGZvciBpdGVyYXRpb24uCi0gKiA8cD4KLSAqIFRoZSB0cmFkZW9mZiBmb3IgdGhpcyBtZW1v
cnkgZWZmaWNpZW5jeSBpcyB0aGF0IHRoZSB3b3JzdCBjYXNlIHJ1bm5pbmcgdGltZQotICogb2Yg
dGhlIHtAY29kZSBwdXQoKX0gb3BlcmF0aW9uIGlzIHtAY29kZSBPKGsgKyBsZyBuKX0sIHdoaWNo
IGhhcHBlbnMgd2hlbgotICogZW50cmllcyBhcmUgYWRkZWQgaW4gZGVzY2VuZGluZyBvcmRlci4g
e0Bjb2RlIGt9IHNob3VsZCBiZSBjaG9zZW4gc3VjaCB0aGF0Ci0gKiBpdCBjb3ZlcnMgZW5vdWdo
IGNvbW1vbiBjYXNlcyB3aXRob3V0IGFkdmVyc2VseSBhZmZlY3RpbmcgbGFyZ2VyIG1hcHMuIElu
Ci0gKiBwcmFjdGljZSwgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gZG9lcyBub3QgaGFwcGVuIGZv
ciBleHRlbnNpb25zIGJlY2F1c2UKLSAqIGV4dGVuc2lvbiBmaWVsZHMgYXJlIHNlcmlhbGl6ZWQg
YW5kIGRlc2VyaWFsaXplZCBpbiBvcmRlciBvZiBhc2NlbmRpbmcgdGFnCi0gKiBudW1iZXIsIGJ1
dCB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbyBjYW4gaGFwcGVuIGZvciBEeW5hbWljTWVzc2FnZXMu
Ci0gKiA8cD4KLSAqIFRoZSBydW5uaW5nIHRpbWUgZm9yIGFsbCBvdGhlciBvcGVyYXRpb25zIGlz
IHNpbWlsYXIgdG8gdGhhdCBvZgotICoge0Bjb2RlIFRyZWVNYXB9LgotICogPHA+Ci0gKiBJbnN0
YW5jZXMgYXJlIG5vdCB0aHJlYWQtc2FmZSB1bnRpbCB7QGxpbmsgI21ha2VJbW11dGFibGUoKX0g
aXMgY2FsbGVkLAotICogYWZ0ZXIgd2hpY2ggYW55IG1vZGlmeWluZyBvcGVyYXRpb24gd2lsbCBy
ZXN1bHQgaW4gYW4KLSAqIHtAbGluayBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbn0uCi0g
KgotICogQGF1dGhvciBkYXJpY2tAZ29vZ2xlLmNvbSBEYXJpY2sgVG9uZwotICovCi0vLyBUaGlz
IGNsYXNzIGlzIGZpbmFsIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgYmVjYXVzZSB0aGUg
Y29uc3RydWN0b3IgaXMKLS8vIHByaXZhdGUuIEhvd2V2ZXIsIHRoZSBGaWVsZERlc2NyaXB0b3It
c3BlY2lmaWMgbG9naWMgaXMgZW5jYXBzdWxhdGVkIGluCi0vLyBhIHN1YmNsYXNzIHRvIGFpZCB0
ZXN0YWJpbGl0eSBvZiB0aGUgY29yZSBsb2dpYy4KLWNsYXNzIFNtYWxsU29ydGVkTWFwPEsgZXh0
ZW5kcyBDb21wYXJhYmxlPEs+LCBWPiBleHRlbmRzIEFic3RyYWN0TWFwPEssIFY+IHsKLQotICAv
KioKLSAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBmb3IgbWFwcGluZyBGaWVsZERlc2NyaXB0
b3JzIHRvIHRoZWlyIHZhbHVlcy4KLSAgICogVGhlIHtAbGluayAjbWFrZUltbXV0YWJsZSgpfSBp
bXBsZW1lbnRhdGlvbiB3aWxsIGNvbnZlcnQgdGhlIExpc3QgdmFsdWVzCi0gICAqIG9mIGFueSBy
ZXBlYXRlZCBmaWVsZHMgdG8gdW5tb2RpZmlhYmxlIGxpc3RzLgotICAgKgotICAgKiBAcGFyYW0g
YXJyYXlTaXplIFRoZSBzaXplIG9mIHRoZSBlbnRyeSBhcnJheSBjb250YWluaW5nIHRoZQotICAg
KiAgICAgICAgbGV4aWNvZ3JhcGhpY2FsbHkgc21hbGxlc3QgbWFwcGluZ3MuCi0gICAqLwotICBz
dGF0aWMgPEZpZWxkRGVzY3JpcHRvclR5cGUgZXh0ZW5kcwotICAgICAgRmllbGRTZXQuRmllbGRE
ZXNjcmlwdG9yTGl0ZTxGaWVsZERlc2NyaXB0b3JUeXBlPj4KLSAgICAgIFNtYWxsU29ydGVkTWFw
PEZpZWxkRGVzY3JpcHRvclR5cGUsIE9iamVjdD4gbmV3RmllbGRNYXAoaW50IGFycmF5U2l6ZSkg
ewotICAgIHJldHVybiBuZXcgU21hbGxTb3J0ZWRNYXA8RmllbGREZXNjcmlwdG9yVHlwZSwgT2Jq
ZWN0PihhcnJheVNpemUpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgQFN1cHByZXNzV2Fybmlu
Z3MoInVuY2hlY2tlZCIpCi0gICAgICBwdWJsaWMgdm9pZCBtYWtlSW1tdXRhYmxlKCkgewotICAg
ICAgICBpZiAoIWlzSW1tdXRhYmxlKCkpIHsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGdldE51bUFycmF5RW50cmllcygpOyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcC5FbnRy
eTxGaWVsZERlc2NyaXB0b3JUeXBlLCBPYmplY3Q+IGVudHJ5ID0KLSAgICAgICAgICAgICAgICBn
ZXRBcnJheUVudHJ5QXQoaSk7Ci0gICAgICAgICAgICBpZiAoZW50cnkuZ2V0S2V5KCkuaXNSZXBl
YXRlZCgpKSB7Ci0gICAgICAgICAgICAgIGZpbmFsIExpc3QgdmFsdWUgPSAoTGlzdCkgZW50cnku
Z2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgZW50cnkuc2V0VmFsdWUoQ29sbGVjdGlvbnMudW5t
b2RpZmlhYmxlTGlzdCh2YWx1ZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAg
ICAgICBmb3IgKE1hcC5FbnRyeTxGaWVsZERlc2NyaXB0b3JUeXBlLCBPYmplY3Q+IGVudHJ5IDoK
LSAgICAgICAgICAgICAgICAgICBnZXRPdmVyZmxvd0VudHJpZXMoKSkgewotICAgICAgICAgICAg
aWYgKGVudHJ5LmdldEtleSgpLmlzUmVwZWF0ZWQoKSkgewotICAgICAgICAgICAgICBmaW5hbCBM
aXN0IHZhbHVlID0gKExpc3QpIGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgIGVudHJ5
LnNldFZhbHVlKENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QodmFsdWUpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3VwZXIubWFrZUltbXV0YWJs
ZSgpOwotICAgICAgfQotICAgIH07Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBp
bnN0YW5jZSBmb3IgdGVzdGluZy4KLSAgICoKLSAgICogQHBhcmFtIGFycmF5U2l6ZSBUaGUgc2l6
ZSBvZiB0aGUgZW50cnkgYXJyYXkgY29udGFpbmluZyB0aGUKLSAgICogICAgICAgIGxleGljb2dy
YXBoaWNhbGx5IHNtYWxsZXN0IG1hcHBpbmdzLgotICAgKi8KLSAgc3RhdGljIDxLIGV4dGVuZHMg
Q29tcGFyYWJsZTxLPiwgVj4gU21hbGxTb3J0ZWRNYXA8SywgVj4gbmV3SW5zdGFuY2VGb3JUZXN0
KAotICAgICAgaW50IGFycmF5U2l6ZSkgewotICAgIHJldHVybiBuZXcgU21hbGxTb3J0ZWRNYXA8
SywgVj4oYXJyYXlTaXplKTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgaW50IG1heEFycmF5U2l6
ZTsKLSAgLy8gVGhlICJlbnRyeSBhcnJheSIgaXMgYWN0dWFsbHkgYSBMaXN0IGJlY2F1c2UgZ2Vu
ZXJpYyBhcnJheXMgYXJlIG5vdAotICAvLyBhbGxvd2VkLiBBcnJheUxpc3QgYWxzbyBuaWNlbHkg
aGFuZGxlcyB0aGUgZW50cnkgc2hpZnRpbmcgb24gaW5zZXJ0cyBhbmQKLSAgLy8gcmVtb3Zlcy4K
LSAgcHJpdmF0ZSBMaXN0PEVudHJ5PiBlbnRyeUxpc3Q7Ci0gIHByaXZhdGUgTWFwPEssIFY+IG92
ZXJmbG93RW50cmllczsKLSAgcHJpdmF0ZSBib29sZWFuIGlzSW1tdXRhYmxlOwotICAvLyBUaGUg
RW50cnlTZXQgaXMgYSBzdGF0ZWxlc3MgdmlldyBvZiB0aGUgTWFwLiBJdCdzIGluaXRpYWxpemVk
IHRoZSBmaXJzdAotICAvLyB0aW1lIGl0IGlzIHJlcXVlc3RlZCBhbmQgcmV1c2VkIGhlbmNlZm9y
dGguCi0gIHByaXZhdGUgdm9sYXRpbGUgRW50cnlTZXQgbGF6eUVudHJ5U2V0OwotCi0gIC8qKgot
ICAgKiBAY29kZSBhcnJheVNpemUgU2l6ZSBvZiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIGxleGlj
b2dyYXBoaWNhbGx5IHNtYWxsZXN0Ci0gICAqICAgICAgIG1hcHBpbmdzIGFyZSBzdG9yZWQuIChp
LmUuIHRoZSB7QGNvZGUga30gcmVmZXJyZWQgdG8gaW4gdGhlIGNsYXNzCi0gICAqICAgICAgIGRv
Y3VtZW50YXRpb24pLgotICAgKi8KLSAgcHJpdmF0ZSBTbWFsbFNvcnRlZE1hcChpbnQgYXJyYXlT
aXplKSB7Ci0gICAgdGhpcy5tYXhBcnJheVNpemUgPSBhcnJheVNpemU7Ci0gICAgdGhpcy5lbnRy
eUxpc3QgPSBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLSAgICB0aGlzLm92ZXJmbG93RW50cmll
cyA9IENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7Ci0gIH0KLQotICAvKiogTWFrZSB0aGlzIG1hcCBp
bW11dGFibGUgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQuICovCi0gIHB1YmxpYyB2b2lkIG1ha2VJ
bW11dGFibGUoKSB7Ci0gICAgaWYgKCFpc0ltbXV0YWJsZSkgewotICAgICAgLy8gTm90ZTogVGhl
cmUncyBubyBuZWVkIHRvIHdyYXAgdGhlIGVudHJ5TGlzdCBpbiBhbiB1bm1vZGlmaWFibGVMaXN0
Ci0gICAgICAvLyBiZWNhdXNlIG5vbmUgb2YgdGhlIGxpc3QncyBhY2Nlc3NvcnMgYXJlIGV4cG9z
ZWQuIFRoZSBpdGVyYXRvcigpIG9mCi0gICAgICAvLyBvdmVyZmxvd0VudHJpZXMsIG9uIHRoZSBv
dGhlciBoYW5kLCBpcyBleHBvc2VkIHNvIGl0IG11c3QgYmUgbWFkZQotICAgICAgLy8gdW5tb2Rp
ZmlhYmxlLgotICAgICAgb3ZlcmZsb3dFbnRyaWVzID0gb3ZlcmZsb3dFbnRyaWVzLmlzRW1wdHko
KSA/Ci0gICAgICAgICAgQ29sbGVjdGlvbnMuPEssIFY+ZW1wdHlNYXAoKSA6Ci0gICAgICAgICAg
Q29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKG92ZXJmbG93RW50cmllcyk7Ci0gICAgICBpc0lt
bXV0YWJsZSA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEByZXR1cm4gV2hldGhlciB7QGxp
bmsgI21ha2VJbW11dGFibGUoKX0gaGFzIGJlZW4gY2FsbGVkLiAqLwotICBwdWJsaWMgYm9vbGVh
biBpc0ltbXV0YWJsZSgpIHsKLSAgICByZXR1cm4gaXNJbW11dGFibGU7Ci0gIH0KLQotICAvKiog
QHJldHVybiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGVudHJ5IGFycmF5LiAqLwotICBw
dWJsaWMgaW50IGdldE51bUFycmF5RW50cmllcygpIHsKLSAgICByZXR1cm4gZW50cnlMaXN0LnNp
emUoKTsKLSAgfQotCi0gIC8qKiBAcmV0dXJuIFRoZSBhcnJheSBlbnRyeSBhdCB0aGUgZ2l2ZW4g
e0Bjb2RlIGluZGV4fS4gKi8KLSAgcHVibGljIE1hcC5FbnRyeTxLLCBWPiBnZXRBcnJheUVudHJ5
QXQoaW50IGluZGV4KSB7Ci0gICAgcmV0dXJuIGVudHJ5TGlzdC5nZXQoaW5kZXgpOwotICB9Ci0K
LSAgLyoqIEByZXR1cm4gVGhlcmUgbnVtYmVyIG9mIG92ZXJmbG93IGVudHJpZXMuICovCi0gIHB1
YmxpYyBpbnQgZ2V0TnVtT3ZlcmZsb3dFbnRyaWVzKCkgewotICAgIHJldHVybiBvdmVyZmxvd0Vu
dHJpZXMuc2l6ZSgpOwotICB9Ci0KLSAgLyoqIEByZXR1cm4gQW4gaXRlcmFibGUgb3ZlciB0aGUg
b3ZlcmZsb3cgZW50cmllcy4gKi8KLSAgcHVibGljIEl0ZXJhYmxlPE1hcC5FbnRyeTxLLCBWPj4g
Z2V0T3ZlcmZsb3dFbnRyaWVzKCkgewotICAgIHJldHVybiBvdmVyZmxvd0VudHJpZXMuaXNFbXB0
eSgpID8KLSAgICAgICAgRW1wdHlTZXQuPE1hcC5FbnRyeTxLLCBWPj5pdGVyYWJsZSgpIDoKLSAg
ICAgICAgb3ZlcmZsb3dFbnRyaWVzLmVudHJ5U2V0KCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIGludCBzaXplKCkgewotICAgIHJldHVybiBlbnRyeUxpc3Quc2l6ZSgpICsgb3ZlcmZs
b3dFbnRyaWVzLnNpemUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgaW1wbGVtZW50YXRpb24g
dGhyb3dzIGEge0Bjb2RlIENsYXNzQ2FzdEV4Y2VwdGlvbn0gaWYgbyBpcyBub3QgYW4KLSAgICog
b2JqZWN0IG9mIHR5cGUge0Bjb2RlIEt9LgotICAgKgotICAgKiB7QGluaGVyaXREb2N9Ci0gICAq
LwotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gY29udGFpbnNLZXkoT2JqZWN0IG8pIHsK
LSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICBmaW5hbCBLIGtleSA9IChL
KSBvOwotICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbkFycmF5KGtleSkgPj0gMCB8fCBvdmVyZmxv
d0VudHJpZXMuY29udGFpbnNLZXkoa2V5KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGUgaW1wbGVt
ZW50YXRpb24gdGhyb3dzIGEge0Bjb2RlIENsYXNzQ2FzdEV4Y2VwdGlvbn0gaWYgbyBpcyBub3Qg
YW4KLSAgICogb2JqZWN0IG9mIHR5cGUge0Bjb2RlIEt9LgotICAgKgotICAgKiB7QGluaGVyaXRE
b2N9Ci0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIFYgZ2V0KE9iamVjdCBvKSB7Ci0gICAg
QFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgZmluYWwgSyBrZXkgPSAoSykgbzsK
LSAgICBmaW5hbCBpbnQgaW5kZXggPSBiaW5hcnlTZWFyY2hJbkFycmF5KGtleSk7Ci0gICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgIHJldHVybiBlbnRyeUxpc3QuZ2V0KGluZGV4KS5nZXRWYWx1
ZSgpOwotICAgIH0KLSAgICByZXR1cm4gb3ZlcmZsb3dFbnRyaWVzLmdldChrZXkpOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBWIHB1dChLIGtleSwgViB2YWx1ZSkgewotICAgIGNoZWNr
TXV0YWJsZSgpOwotICAgIGZpbmFsIGludCBpbmRleCA9IGJpbmFyeVNlYXJjaEluQXJyYXkoa2V5
KTsKLSAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgLy8gUmVwbGFjZSBleGlzdGluZyBhcnJh
eSBlbnRyeS4KLSAgICAgIHJldHVybiBlbnRyeUxpc3QuZ2V0KGluZGV4KS5zZXRWYWx1ZSh2YWx1
ZSk7Ci0gICAgfQotICAgIGVuc3VyZUVudHJ5QXJyYXlNdXRhYmxlKCk7Ci0gICAgZmluYWwgaW50
IGluc2VydGlvblBvaW50ID0gLShpbmRleCArIDEpOwotICAgIGlmIChpbnNlcnRpb25Qb2ludCA+
PSBtYXhBcnJheVNpemUpIHsKLSAgICAgIC8vIFB1dCBkaXJlY3RseSBpbiBvdmVyZmxvdy4KLSAg
ICAgIHJldHVybiBnZXRPdmVyZmxvd0VudHJpZXNNdXRhYmxlKCkucHV0KGtleSwgdmFsdWUpOwot
ICAgIH0KLSAgICAvLyBJbnNlcnQgbmV3IEVudHJ5IGluIGFycmF5LgotICAgIGlmIChlbnRyeUxp
c3Quc2l6ZSgpID09IG1heEFycmF5U2l6ZSkgewotICAgICAgLy8gU2hpZnQgdGhlIGxhc3QgYXJy
YXkgZW50cnkgaW50byBvdmVyZmxvdy4KLSAgICAgIGZpbmFsIEVudHJ5IGxhc3RFbnRyeUluQXJy
YXkgPSBlbnRyeUxpc3QucmVtb3ZlKG1heEFycmF5U2l6ZSAtIDEpOwotICAgICAgZ2V0T3ZlcmZs
b3dFbnRyaWVzTXV0YWJsZSgpLnB1dChsYXN0RW50cnlJbkFycmF5LmdldEtleSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RW50cnlJbkFycmF5LmdldFZhbHVl
KCkpOwotICAgIH0KLSAgICBlbnRyeUxpc3QuYWRkKGluc2VydGlvblBvaW50LCBuZXcgRW50cnko
a2V5LCB2YWx1ZSkpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIGNsZWFyKCkgewotICAgIGNoZWNrTXV0YWJsZSgpOwotICAgIGlmICghZW50cnlM
aXN0LmlzRW1wdHkoKSkgewotICAgICAgZW50cnlMaXN0LmNsZWFyKCk7Ci0gICAgfQotICAgIGlm
ICghb3ZlcmZsb3dFbnRyaWVzLmlzRW1wdHkoKSkgewotICAgICAgb3ZlcmZsb3dFbnRyaWVzLmNs
ZWFyKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBpbXBsZW1lbnRhdGlvbiB0aHJv
d3MgYSB7QGNvZGUgQ2xhc3NDYXN0RXhjZXB0aW9ufSBpZiBvIGlzIG5vdCBhbgotICAgKiBvYmpl
Y3Qgb2YgdHlwZSB7QGNvZGUgS30uCi0gICAqCi0gICAqIHtAaW5oZXJpdERvY30KLSAgICovCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgViByZW1vdmUoT2JqZWN0IG8pIHsKLSAgICBjaGVja011dGFi
bGUoKTsKLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICBmaW5hbCBLIGtl
eSA9IChLKSBvOwotICAgIGZpbmFsIGludCBpbmRleCA9IGJpbmFyeVNlYXJjaEluQXJyYXkoa2V5
KTsKLSAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgcmV0dXJuIHJlbW92ZUFycmF5RW50cnlB
dChpbmRleCk7Ci0gICAgfQotICAgIC8vIG92ZXJmbG93RW50cmllcyBtaWdodCBiZSBDb2xsZWN0
aW9ucy51bm1vZGlmaWFibGVNYXAoKSwgc28gb25seQotICAgIC8vIGNhbGwgcmVtb3ZlKCkgaWYg
aXQgaXMgbm9uLWVtcHR5LgotICAgIGlmIChvdmVyZmxvd0VudHJpZXMuaXNFbXB0eSgpKSB7Ci0g
ICAgICByZXR1cm4gbnVsbDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIG92ZXJmbG93RW50
cmllcy5yZW1vdmUoa2V5KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFYgcmVtb3ZlQXJyYXlF
bnRyeUF0KGludCBpbmRleCkgewotICAgIGNoZWNrTXV0YWJsZSgpOwotICAgIGZpbmFsIFYgcmVt
b3ZlZCA9IGVudHJ5TGlzdC5yZW1vdmUoaW5kZXgpLmdldFZhbHVlKCk7Ci0gICAgaWYgKCFvdmVy
Zmxvd0VudHJpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAvLyBTaGlmdCB0aGUgZmlyc3QgZW50cnkg
aW4gdGhlIG92ZXJmbG93IHRvIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZQotICAgICAgLy8gYXJy
YXkuCi0gICAgICBmaW5hbCBJdGVyYXRvcjxNYXAuRW50cnk8SywgVj4+IGl0ZXJhdG9yID0KLSAg
ICAgICAgICBnZXRPdmVyZmxvd0VudHJpZXNNdXRhYmxlKCkuZW50cnlTZXQoKS5pdGVyYXRvcigp
OwotICAgICAgZW50cnlMaXN0LmFkZChuZXcgRW50cnkoaXRlcmF0b3IubmV4dCgpKSk7Ci0gICAg
ICBpdGVyYXRvci5yZW1vdmUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlbW92ZWQ7Ci0gIH0KLQot
ICAvKioKLSAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIGZpbmQgaW4gdGhlIGVudHJ5IGFycmF5
LgotICAgKiBAcmV0dXJuIFRoZSByZXR1cm5lZCBpbnRlZ2VyIHBvc2l0aW9uIGZvbGxvd3MgdGhl
IHNhbWUgc2VtYW50aWNzIGFzIHRoZQotICAgKiAgICAgdmFsdWUgcmV0dXJuZWQgYnkge0BsaW5r
IGphdmEudXRpbC5BcnJheXMjYmluYXJ5U2VhcmNoKCl9LgotICAgKi8KLSAgcHJpdmF0ZSBpbnQg
YmluYXJ5U2VhcmNoSW5BcnJheShLIGtleSkgewotICAgIGludCBsZWZ0ID0gMDsKLSAgICBpbnQg
cmlnaHQgPSBlbnRyeUxpc3Quc2l6ZSgpIC0gMTsKLQotICAgIC8vIE9wdGltaXphdGlvbjogRm9y
IHRoZSBjb21tb24gY2FzZSBpbiB3aGljaCBlbnRyaWVzIGFyZSBhZGRlZCBpbgotICAgIC8vIGFz
Y2VuZGluZyB0YWcgb3JkZXIsIGNoZWNrIHRoZSBsYXJnZXN0IGVsZW1lbnQgaW4gdGhlIGFycmF5
IGJlZm9yZQotICAgIC8vIGRvaW5nIGEgZnVsbCBiaW5hcnkgc2VhcmNoLgotICAgIGlmIChyaWdo
dCA+PSAwKSB7Ci0gICAgICBpbnQgY21wID0ga2V5LmNvbXBhcmVUbyhlbnRyeUxpc3QuZ2V0KHJp
Z2h0KS5nZXRLZXkoKSk7Ci0gICAgICBpZiAoY21wID4gMCkgewotICAgICAgICByZXR1cm4gLShy
aWdodCArIDIpOyAgLy8gSW5zZXJ0IHBvaW50IGlzIGFmdGVyICJyaWdodCIuCi0gICAgICB9IGVs
c2UgaWYgKGNtcCA9PSAwKSB7Ci0gICAgICAgIHJldHVybiByaWdodDsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICB3aGlsZSAobGVmdCA8PSByaWdodCkgewotICAgICAgaW50IG1pZCA9IChsZWZ0ICsg
cmlnaHQpIC8gMjsKLSAgICAgIGludCBjbXAgPSBrZXkuY29tcGFyZVRvKGVudHJ5TGlzdC5nZXQo
bWlkKS5nZXRLZXkoKSk7Ci0gICAgICBpZiAoY21wIDwgMCkgewotICAgICAgICByaWdodCA9IG1p
ZCAtIDE7Ci0gICAgICB9IGVsc2UgaWYgKGNtcCA+IDApIHsKLSAgICAgICAgbGVmdCA9IG1pZCAr
IDE7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gbWlkOwotICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gLShsZWZ0ICsgMSk7Ci0gIH0KLQotICAvKioKLSAgICogU2ltaWxhciB0byB0
aGUgQWJzdHJhY3RNYXAgaW1wbGVtZW50YXRpb24gb2Yge0Bjb2RlIGtleVNldCgpfSBhbmQKLSAg
ICoge0Bjb2RlIHZhbHVlcygpfSwgdGhlIGVudHJ5IHNldCBpcyBjcmVhdGVkIHRoZSBmaXJzdCB0
aW1lIHRoaXMgbWV0aG9kIGlzCi0gICAqIGNhbGxlZCwgYW5kIHJldHVybmVkIGluIHJlc3BvbnNl
IHRvIGFsbCBzdWJzZXF1ZW50IGNhbGxzLgotICAgKgotICAgKiB7QGluaGVyaXREb2N9Ci0gICAq
LwotICBAT3ZlcnJpZGUKLSAgcHVibGljIFNldDxNYXAuRW50cnk8SywgVj4+IGVudHJ5U2V0KCkg
ewotICAgIGlmIChsYXp5RW50cnlTZXQgPT0gbnVsbCkgewotICAgICAgbGF6eUVudHJ5U2V0ID0g
bmV3IEVudHJ5U2V0KCk7Ci0gICAgfQotICAgIHJldHVybiBsYXp5RW50cnlTZXQ7Ci0gIH0KLQot
ICAvKioKLSAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiB7QGxp
bmsgI21ha2VJbW11dGFibGUoKX0gaGFzCi0gICAqICAgICAgICAgaGFzIGJlZW4gY2FsbGVkLgot
ICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrTXV0YWJsZSgpIHsKLSAgICBpZiAoaXNJbW11dGFi
bGUpIHsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwot
ICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJuIGEge0BsaW5rIFNvcnRlZE1hcH0gdG8g
d2hpY2ggb3ZlcmZsb3cgZW50cmllcyBtYXBwaW5ncyBjYW4gYmUKLSAgICogICAgICAgICBhZGRl
ZCBvciByZW1vdmVkLgotICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u
IGlmIHtAbGluayAjbWFrZUltbXV0YWJsZSgpfSBoYXMgYmVlbgotICAgKiAgICAgICAgIGNhbGxl
ZC4KLSAgICovCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwcml2YXRlIFNv
cnRlZE1hcDxLLCBWPiBnZXRPdmVyZmxvd0VudHJpZXNNdXRhYmxlKCkgewotICAgIGNoZWNrTXV0
YWJsZSgpOwotICAgIGlmIChvdmVyZmxvd0VudHJpZXMuaXNFbXB0eSgpICYmICEob3ZlcmZsb3dF
bnRyaWVzIGluc3RhbmNlb2YgVHJlZU1hcCkpIHsKLSAgICAgIG92ZXJmbG93RW50cmllcyA9IG5l
dyBUcmVlTWFwPEssIFY+KCk7Ci0gICAgfQotICAgIHJldHVybiAoU29ydGVkTWFwPEssIFY+KSBv
dmVyZmxvd0VudHJpZXM7Ci0gIH0KLQotICAvKioKLSAgICogTGF6aWx5IGNyZWF0ZXMgdGhlIGVu
dHJ5IGxpc3QuIEFueSBjb2RlIHRoYXQgYWRkcyB0byB0aGUgbGlzdCBtdXN0IGZpcnN0Ci0gICAq
IGNhbGwgdGhpcyBtZXRob2QuCi0gICAqLwotICBwcml2YXRlIHZvaWQgZW5zdXJlRW50cnlBcnJh
eU11dGFibGUoKSB7Ci0gICAgY2hlY2tNdXRhYmxlKCk7Ci0gICAgaWYgKGVudHJ5TGlzdC5pc0Vt
cHR5KCkgJiYgIShlbnRyeUxpc3QgaW5zdGFuY2VvZiBBcnJheUxpc3QpKSB7Ci0gICAgICBlbnRy
eUxpc3QgPSBuZXcgQXJyYXlMaXN0PEVudHJ5PihtYXhBcnJheVNpemUpOwotICAgIH0KLSAgfQot
Ci0gIC8qKgotICAgKiBFbnRyeSBpbXBsZW1lbnRhdGlvbiB0aGF0IGltcGxlbWVudHMgQ29tcGFy
YWJsZSBpbiBvcmRlciB0byBzdXBwb3J0Ci0gICAqIGJpbmFyeSBzZWFyY2ggd2l0aGluIHRoZSBl
bnRyeSBhcnJheS4gQWxzbyBjaGVja3MgbXV0YWJpbGl0eSBpbgotICAgKiB7QGxpbmsgI3NldFZh
bHVlKCl9LgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBFbnRyeSBpbXBsZW1lbnRzIE1hcC5FbnRy
eTxLLCBWPiwgQ29tcGFyYWJsZTxFbnRyeT4gewotCi0gICAgcHJpdmF0ZSBmaW5hbCBLIGtleTsK
LSAgICBwcml2YXRlIFYgdmFsdWU7Ci0KLSAgICBFbnRyeShNYXAuRW50cnk8SywgVj4gY29weSkg
ewotICAgICAgdGhpcyhjb3B5LmdldEtleSgpLCBjb3B5LmdldFZhbHVlKCkpOwotICAgIH0KLQot
ICAgIEVudHJ5KEsga2V5LCBWIHZhbHVlKSB7Ci0gICAgICB0aGlzLmtleSA9IGtleTsKLSAgICAg
IHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
SyBnZXRLZXkoKSB7Ci0gICAgICByZXR1cm4ga2V5OwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBWIGdldFZhbHVlKCkgewotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKEVudHJ5IG90aGVyKSB7Ci0g
ICAgICByZXR1cm4gZ2V0S2V5KCkuY29tcGFyZVRvKG90aGVyLmdldEtleSgpKTsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgViBzZXRWYWx1ZShWIG5ld1ZhbHVlKSB7Ci0gICAg
ICBjaGVja011dGFibGUoKTsKLSAgICAgIGZpbmFsIFYgb2xkVmFsdWUgPSB0aGlzLnZhbHVlOwot
ICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlOwotICAgICAgcmV0dXJuIG9sZFZhbHVlOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgbykg
ewotICAgICAgaWYgKG8gPT0gdGhpcykgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0K
LSAgICAgIGlmICghKG8gaW5zdGFuY2VvZiBNYXAuRW50cnkpKSB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgIH0KLSAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAg
ICAgTWFwLkVudHJ5PD8sID8+IG90aGVyID0gKE1hcC5FbnRyeTw/LCA/PikgbzsKLSAgICAgIHJl
dHVybiBlcXVhbHMoa2V5LCBvdGhlci5nZXRLZXkoKSkgJiYgZXF1YWxzKHZhbHVlLCBvdGhlci5n
ZXRWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hD
b2RlKCkgewotICAgICAgcmV0dXJuIChrZXkgPT0gbnVsbCA/IDAgOiBrZXkuaGFzaENvZGUoKSkg
XgotICAgICAgICAgICh2YWx1ZSA9PSBudWxsID8gMCA6IHZhbHVlLmhhc2hDb2RlKCkpOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAg
ICByZXR1cm4ga2V5ICsgIj0iICsgdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqIGVxdWFscygpIHRo
YXQgaGFuZGxlcyBudWxsIHZhbHVlcy4gKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gZXF1YWxzKE9i
amVjdCBvMSwgT2JqZWN0IG8yKSB7Ci0gICAgICByZXR1cm4gbzEgPT0gbnVsbCA/IG8yID09IG51
bGwgOiBvMS5lcXVhbHMobzIpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBTdGF0ZWxlc3Mg
dmlldyBvZiB0aGUgZW50cmllcyBpbiB0aGUgZmllbGQgbWFwLgotICAgKi8KLSAgcHJpdmF0ZSBj
bGFzcyBFbnRyeVNldCBleHRlbmRzIEFic3RyYWN0U2V0PE1hcC5FbnRyeTxLLCBWPj4gewotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEl0ZXJhdG9yPE1hcC5FbnRyeTxLLCBWPj4gaXRlcmF0
b3IoKSB7Ci0gICAgICByZXR1cm4gbmV3IEVudHJ5SXRlcmF0b3IoKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IHNpemUoKSB7Ci0gICAgICByZXR1cm4gU21hbGxTb3J0
ZWRNYXAudGhpcy5zaXplKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhyb3dzIGEge0Bs
aW5rIENsYXNzQ2FzdEV4Y2VwdGlvbn0gaWYgbyBpcyBub3Qgb2YgdGhlIGV4cGVjdGVkIHR5cGUu
Ci0gICAgICoKLSAgICAgKiB7QGluaGVyaXREb2N9Ci0gICAgICovCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoT2JqZWN0IG8pIHsKLSAgICAgIEBTdXBwcmVzc1dh
cm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgICAgZmluYWwgTWFwLkVudHJ5PEssIFY+IGVudHJ5ID0g
KE1hcC5FbnRyeTxLLCBWPikgbzsKLSAgICAgIGZpbmFsIFYgZXhpc3RpbmcgPSBnZXQoZW50cnku
Z2V0S2V5KCkpOwotICAgICAgZmluYWwgViB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAg
ICByZXR1cm4gZXhpc3RpbmcgPT0gdmFsdWUgfHwKLSAgICAgICAgICAoZXhpc3RpbmcgIT0gbnVs
bCAmJiBleGlzdGluZy5lcXVhbHModmFsdWUpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgYm9vbGVhbiBhZGQoTWFwLkVudHJ5PEssIFY+IGVudHJ5KSB7Ci0gICAgICBpZiAo
IWNvbnRhaW5zKGVudHJ5KSkgewotICAgICAgICBwdXQoZW50cnkuZ2V0S2V5KCksIGVudHJ5Lmdl
dFZhbHVlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaHJvd3MgYSB7QGxpbmsgQ2xhc3NDYXN0
RXhjZXB0aW9ufSBpZiBvIGlzIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZS4KLSAgICAgKgotICAg
ICAqIHtAaW5oZXJpdERvY30KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9v
bGVhbiByZW1vdmUoT2JqZWN0IG8pIHsKLSAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNr
ZWQiKQotICAgICAgZmluYWwgTWFwLkVudHJ5PEssIFY+IGVudHJ5ID0gKE1hcC5FbnRyeTxLLCBW
PikgbzsKLSAgICAgIGlmIChjb250YWlucyhlbnRyeSkpIHsKLSAgICAgICAgU21hbGxTb3J0ZWRN
YXAudGhpcy5yZW1vdmUoZW50cnkuZ2V0S2V5KCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBjbGVhcigpIHsKLSAgICAgIFNtYWxsU29ydGVkTWFwLnRoaXMuY2xlYXIoKTsK
LSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSXRlcmF0b3IgaW1wbGVtZW50YXRpb24gdGhhdCBz
d2l0Y2hlcyBmcm9tIHRoZSBlbnRyeSBhcnJheSB0byB0aGUgb3ZlcmZsb3cKLSAgICogZW50cmll
cyBhcHByb3ByaWF0ZWx5LgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBFbnRyeUl0ZXJhdG9yIGlt
cGxlbWVudHMgSXRlcmF0b3I8TWFwLkVudHJ5PEssIFY+PiB7Ci0KLSAgICBwcml2YXRlIGludCBw
b3MgPSAtMTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbmV4dENhbGxlZEJlZm9yZVJlbW92ZTsKLSAg
ICBwcml2YXRlIEl0ZXJhdG9yPE1hcC5FbnRyeTxLLCBWPj4gbGF6eU92ZXJmbG93SXRlcmF0b3I7
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgewotICAgICAg
cmV0dXJuIChwb3MgKyAxKSA8IGVudHJ5TGlzdC5zaXplKCkgfHwKLSAgICAgICAgICBnZXRPdmVy
Zmxvd0l0ZXJhdG9yKCkuaGFzTmV4dCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBNYXAuRW50cnk8SywgVj4gbmV4dCgpIHsKLSAgICAgIG5leHRDYWxsZWRCZWZvcmVSZW1v
dmUgPSB0cnVlOwotICAgICAgLy8gQWx3YXlzIGluY3JlbWVudCBwb3Mgc28gdGhhdCB3ZSBrbm93
IHdoZXRoZXIgdGhlIGxhc3QgcmV0dXJuZWQgdmFsdWUKLSAgICAgIC8vIHdhcyBmcm9tIHRoZSBh
cnJheSBvciBmcm9tIG92ZXJmbG93LgotICAgICAgaWYgKCsrcG9zIDwgZW50cnlMaXN0LnNpemUo
KSkgewotICAgICAgICByZXR1cm4gZW50cnlMaXN0LmdldChwb3MpOwotICAgICAgfQotICAgICAg
cmV0dXJuIGdldE92ZXJmbG93SXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKCkgewotICAgICAgaWYgKCFuZXh0Q2FsbGVkQmVm
b3JlUmVtb3ZlKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInJl
bW92ZSgpIHdhcyBjYWxsZWQgYmVmb3JlIG5leHQoKSIpOwotICAgICAgfQotICAgICAgbmV4dENh
bGxlZEJlZm9yZVJlbW92ZSA9IGZhbHNlOwotICAgICAgY2hlY2tNdXRhYmxlKCk7Ci0KLSAgICAg
IGlmIChwb3MgPCBlbnRyeUxpc3Quc2l6ZSgpKSB7Ci0gICAgICAgIHJlbW92ZUFycmF5RW50cnlB
dChwb3MtLSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnZXRPdmVyZmxvd0l0ZXJhdG9yKCku
cmVtb3ZlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSXQgaXMgaW1wb3J0
YW50IHRvIGNyZWF0ZSB0aGUgb3ZlcmZsb3cgaXRlcmF0b3Igb25seSBhZnRlciB0aGUgYXJyYXkK
LSAgICAgKiBlbnRyaWVzIGhhdmUgYmVlbiBpdGVyYXRlZCBvdmVyIGJlY2F1c2UgdGhlIG92ZXJm
bG93IGVudHJ5IHNldCBjaGFuZ2VzCi0gICAgICogd2hlbiB0aGUgY2xpZW50IGNhbGxzIHJlbW92
ZSgpIG9uIHRoZSBhcnJheSBlbnRyaWVzLCB3aGljaCBpbnZhbGlkYXRlcwotICAgICAqIGFueSBl
eGlzdGluZyBpdGVyYXRvcnMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBJdGVyYXRvcjxNYXAuRW50
cnk8SywgVj4+IGdldE92ZXJmbG93SXRlcmF0b3IoKSB7Ci0gICAgICBpZiAobGF6eU92ZXJmbG93
SXRlcmF0b3IgPT0gbnVsbCkgewotICAgICAgICBsYXp5T3ZlcmZsb3dJdGVyYXRvciA9IG92ZXJm
bG93RW50cmllcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
bGF6eU92ZXJmbG93SXRlcmF0b3I7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBj
bGFzcyB0aGF0IGhvbGRzIGltbXV0YWJsZSBpbnN0YW5jZXMgb2YgYW4gSXRlcmFibGUvSXRlcmF0
b3IgdGhhdAotICAgKiB3ZSByZXR1cm4gd2hlbiB0aGUgb3ZlcmZsb3cgZW50cmllcyBpcyBlbXB0
eS4gVGhpcyBlbGltaW5hdGVzIHRoZSBjcmVhdGlvbgotICAgKiBvZiBhbiBJdGVyYXRvciBvYmpl
Y3Qgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGl0ZXJhdGUgb3Zlci4KLSAgICovCi0gIHByaXZh
dGUgc3RhdGljIGNsYXNzIEVtcHR5U2V0IHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEl0
ZXJhdG9yPE9iamVjdD4gSVRFUkFUT1IgPQotICAgICAgICBuZXcgSXRlcmF0b3I8T2JqZWN0Pigp
IHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0
KCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgT2JqZWN0IG5leHQoKSB7Ci0gICAgICAgICAgICB0
aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigpOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7Ci0gICAgICAgICAg
ICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJdGVyYWJsZTxPYmplY3Q+
IElURVJBQkxFID0KLSAgICAgICAgbmV3IEl0ZXJhYmxlPE9iamVjdD4oKSB7Ci0gICAgICAgICAg
QE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIEl0ZXJhdG9yPE9iamVjdD4gaXRlcmF0b3IoKSB7
Ci0gICAgICAgICAgICByZXR1cm4gSVRFUkFUT1I7Ci0gICAgICAgICAgfQotICAgICAgICB9Owot
Ci0gICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgc3RhdGljIDxUPiBJdGVy
YWJsZTxUPiBpdGVyYWJsZSgpIHsKLSAgICAgIHJldHVybiAoSXRlcmFibGU8VD4pIElURVJBQkxF
OwotICAgIH0KLSAgfQotICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGVxdWFscyhP
YmplY3QgbykgewotICAgIGlmICh0aGlzID09IG8pIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICBpZiAoIShvIGluc3RhbmNlb2YgU21hbGxTb3J0ZWRNYXApKSB7Ci0gICAg
ICByZXR1cm4gc3VwZXIuZXF1YWxzKG8pOwotICAgIH0KLSAgICAKLSAgICBTbWFsbFNvcnRlZE1h
cDw/LCA/PiBvdGhlciA9IChTbWFsbFNvcnRlZE1hcDw/LCA/PikgbzsKLSAgICBmaW5hbCBpbnQg
c2l6ZSA9IHNpemUoKTsKLSAgICBpZiAoc2l6ZSAhPSBvdGhlci5zaXplKCkpIHsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQmVzdCBlZmZvcnQgdHJ5IHRvIGF2b2lk
IGFsbG9jYXRpbmcgYW4gZW50cnkgc2V0LgotICAgIGZpbmFsIGludCBudW1BcnJheUVudHJpZXMg
PSBnZXROdW1BcnJheUVudHJpZXMoKTsKLSAgICBpZiAobnVtQXJyYXlFbnRyaWVzICE9IG90aGVy
LmdldE51bUFycmF5RW50cmllcygpKSB7Ci0gICAgICByZXR1cm4gZW50cnlTZXQoKS5lcXVhbHMo
b3RoZXIuZW50cnlTZXQoKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtQXJyYXlFbnRyaWVzOyBpKyspIHsKLSAgICAgIGlmICghZ2V0QXJyYXlFbnRyeUF0KGkpLmVx
dWFscyhvdGhlci5nZXRBcnJheUVudHJ5QXQoaSkpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG51bUFycmF5RW50cmllcyAhPSBzaXplKSB7
Ci0gICAgICByZXR1cm4gb3ZlcmZsb3dFbnRyaWVzLmVxdWFscyhvdGhlci5vdmVyZmxvd0VudHJp
ZXMpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgaW50IGggPSAwOwotICAgIGZp
bmFsIGludCBsaXN0U2l6ZSA9IGdldE51bUFycmF5RW50cmllcygpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGlzdFNpemU7IGkrKykgewotICAgICAgaCArPSBlbnRyeUxpc3QuZ2V0KGkpLmhh
c2hDb2RlKCk7Ci0gICAgfQotICAgIC8vIEF2b2lkIHRoZSBpdGVyYXRvciBhbGxvY2F0aW9uIGlm
IHBvc3NpYmxlLgotICAgIGlmIChnZXROdW1PdmVyZmxvd0VudHJpZXMoKSA+IDApIHsKLSAgICAg
IGggKz0gb3ZlcmZsb3dFbnRyaWVzLmhhc2hDb2RlKCk7Ci0gICAgfQotICAgIHJldHVybiBoOwot
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvVGV4dEZvcm1hdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL1RleHRGb3JtYXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzFjMzI4ZmM3ZDhkNmFiMDFmYTU1MjFjNzNlMzgxNGVjOWMzOTY5Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvVGV4dEZvcm1hdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA3
MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBj
b20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9ycy5EZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMu
RW51bURlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5F
bnVtVmFsdWVEZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
cnMuRmllbGREZXNjcmlwdG9yOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9y
dCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLm5pby5DaGFyQnVmZmVyOwotaW1w
b3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQg
amF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRp
bC5sb2dnaW5nLkxvZ2dlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9y
dCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotLyoqCi0gKiBQcm92aWRlIHRleHQgcGFyc2lu
ZyBhbmQgZm9ybWF0dGluZyBzdXBwb3J0IGZvciBwcm90bzIgaW5zdGFuY2VzLgotICogVGhlIGlt
cGxlbWVudGF0aW9uIGxhcmdlbHkgZm9sbG93cyBnb29nbGUvcHJvdG9idWYvdGV4dF9mb3JtYXQu
Y2MuCi0gKgotICogQGF1dGhvciB3ZW5ib3pAZ29vZ2xlLmNvbSBXZW5ibyBaaHUKLSAqIEBhdXRo
b3Iga2VudG9uQGdvb2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFz
cyBUZXh0Rm9ybWF0IHsKLSAgcHJpdmF0ZSBUZXh0Rm9ybWF0KCkge30KLQotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0KLSAgICAgIExvZ2dlci5nZXRMb2dnZXIoVGV4dEZv
cm1hdC5jbGFzcy5nZXROYW1lKCkpOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFByaW50ZXIg
REVGQVVMVF9QUklOVEVSID0gbmV3IFByaW50ZXIoKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
UHJpbnRlciBTSU5HTEVfTElORV9QUklOVEVSID0KLSAgICAgIChuZXcgUHJpbnRlcigpKS5zZXRT
aW5nbGVMaW5lTW9kZSh0cnVlKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUHJpbnRlciBVTklD
T0RFX1BSSU5URVIgPQotICAgICAgKG5ldyBQcmludGVyKCkpLnNldEVzY2FwZU5vbkFzY2lpKGZh
bHNlKTsKLQotICAvKioKLSAgICogT3V0cHV0cyBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2Yg
dGhlIFByb3RvY29sIE1lc3NhZ2Ugc3VwcGxpZWQgaW50bwotICAgKiB0aGUgcGFyYW1ldGVyIG91
dHB1dC4gKFRoaXMgcmVwcmVzZW50YXRpb24gaXMgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZQotICAg
KiBjbGFzc2ljICJQcm90b2NvbFByaW50ZXIiIG91dHB1dCBmcm9tIHRoZSBvcmlnaW5hbCBQcm90
b2NvbCBCdWZmZXIgc3lzdGVtKQotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50KAot
ICAgICAgZmluYWwgTWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlLCBmaW5hbCBBcHBlbmRhYmxlIG91
dHB1dCkKLSAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgREVGQVVMVF9QUklOVEVSLnBy
aW50KG1lc3NhZ2UsIG5ldyBUZXh0R2VuZXJhdG9yKG91dHB1dCkpOwotICB9Ci0KLSAgLyoqIE91
dHB1dHMgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHtAY29kZSBmaWVsZHN9IHRvIHtAY29k
ZSBvdXRwdXR9LiAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnQoZmluYWwgVW5rbm93bkZp
ZWxkU2V0IGZpZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEFwcGVuZGFi
bGUgb3V0cHV0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICBERUZBVUxUX1BSSU5URVIucHJpbnRVbmtub3duRmllbGRzKGZpZWxkcywgbmV3IFRl
eHRHZW5lcmF0b3Iob3V0cHV0KSk7Ci0gIH0KLQotICAvKioKLSAgICogU2FtZSBhcyB7QGNvZGUg
cHJpbnQoKX0sIGV4Y2VwdCB0aGF0IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFyZSBub3QKLSAgICog
ZXNjYXBlZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFVuaWNvZGUoCi0gICAg
ICBmaW5hbCBNZXNzYWdlT3JCdWlsZGVyIG1lc3NhZ2UsIGZpbmFsIEFwcGVuZGFibGUgb3V0cHV0
KQotICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBVTklDT0RFX1BSSU5URVIucHJpbnQo
bWVzc2FnZSwgbmV3IFRleHRHZW5lcmF0b3Iob3V0cHV0KSk7Ci0gIH0KLQotICAvKioKLSAgICog
U2FtZSBhcyB7QGNvZGUgcHJpbnQoKX0sIGV4Y2VwdCB0aGF0IG5vbi1BU0NJSSBjaGFyYWN0ZXJz
IGFyZSBub3QKLSAgICogZXNjYXBlZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmlu
dFVuaWNvZGUoZmluYWwgVW5rbm93bkZpZWxkU2V0IGZpZWxkcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaW5hbCBBcHBlbmRhYmxlIG91dHB1dCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIFVOSUNPREVfUFJJ
TlRFUi5wcmludFVua25vd25GaWVsZHMoZmllbGRzLCBuZXcgVGV4dEdlbmVyYXRvcihvdXRwdXQp
KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZW5lcmF0ZXMgYSBodW1hbiByZWFkYWJsZSBmb3JtIG9m
IHRoaXMgbWVzc2FnZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kCi0gICAqIG90aGVyIHB1cnBv
c2VzLCB3aXRoIG5vIG5ld2xpbmUgY2hhcmFjdGVycy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMg
U3RyaW5nIHNob3J0RGVidWdTdHJpbmcoZmluYWwgTWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlKSB7
Ci0gICAgdHJ5IHsKLSAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVp
bGRlcigpOwotICAgICAgU0lOR0xFX0xJTkVfUFJJTlRFUi5wcmludChtZXNzYWdlLCBuZXcgVGV4
dEdlbmVyYXRvcihzYikpOwotICAgICAgLy8gU2luZ2xlIGxpbmUgbW9kZSBjdXJyZW50bHkgbWln
aHQgaGF2ZSBhbiBleHRyYSBzcGFjZSBhdCB0aGUgZW5kLgotICAgICAgcmV0dXJuIHNiLnRvU3Ry
aW5nKCkudHJpbSgpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93
IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IEdlbmVyYXRlcyBhIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgdGhlIGZpZWxkLCB1c2VmdWwgZm9y
IGRlYnVnZ2luZwotICAgKiBhbmQgb3RoZXIgcHVycG9zZXMsIHdpdGggbm8gbmV3bGluZSBjaGFy
YWN0ZXJzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgc2hvcnREZWJ1Z1N0cmluZyhm
aW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGZpbmFs
IFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgU0lOR0xFX0xJ
TkVfUFJJTlRFUi5wcmludEZpZWxkKGZpZWxkLCB2YWx1ZSwgbmV3IFRleHRHZW5lcmF0b3Ioc2Ip
KTsKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpLnRyaW0oKTsKLSAgICB9IGNhdGNoIChJT0V4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7
Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdlbmVyYXRlcyBhIGh1bWFuIHJlYWRhYmxlIGZv
cm0gb2YgdGhlIHVua25vd24gZmllbGRzLCB1c2VmdWwgZm9yIGRlYnVnZ2luZwotICAgKiBhbmQg
b3RoZXIgcHVycG9zZXMsIHdpdGggbm8gbmV3bGluZSBjaGFyYWN0ZXJzLgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyBTdHJpbmcgc2hvcnREZWJ1Z1N0cmluZyhmaW5hbCBVbmtub3duRmllbGRTZXQg
ZmllbGRzKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcg
U3RyaW5nQnVpbGRlcigpOwotICAgICAgU0lOR0xFX0xJTkVfUFJJTlRFUi5wcmludFVua25vd25G
aWVsZHMoZmllbGRzLCBuZXcgVGV4dEdlbmVyYXRvcihzYikpOwotICAgICAgLy8gU2luZ2xlIGxp
bmUgbW9kZSBjdXJyZW50bHkgbWlnaHQgaGF2ZSBhbiBleHRyYSBzcGFjZSBhdCB0aGUgZW5kLgot
ICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkudHJpbSgpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0
aW9uIGUpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7Ci0gICAg
fQotICB9Ci0KLSAgLyoqCi0gICAqIExpa2Uge0Bjb2RlIHByaW50KCl9LCBidXQgd3JpdGVzIGRp
cmVjdGx5IHRvIGEge0Bjb2RlIFN0cmluZ30gYW5kCi0gICAqIHJldHVybnMgaXQuCi0gICAqLwot
ICBwdWJsaWMgc3RhdGljIFN0cmluZyBwcmludFRvU3RyaW5nKGZpbmFsIE1lc3NhZ2VPckJ1aWxk
ZXIgbWVzc2FnZSkgewotICAgIHRyeSB7Ci0gICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHRleHQg
PSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgcHJpbnQobWVzc2FnZSwgdGV4dCk7Ci0gICAg
ICByZXR1cm4gdGV4dC50b1N0cmluZygpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsK
LSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9Ci0K
LSAgLyoqCi0gICAqIExpa2Uge0Bjb2RlIHByaW50KCl9LCBidXQgd3JpdGVzIGRpcmVjdGx5IHRv
IGEge0Bjb2RlIFN0cmluZ30gYW5kCi0gICAqIHJldHVybnMgaXQuCi0gICAqLwotICBwdWJsaWMg
c3RhdGljIFN0cmluZyBwcmludFRvU3RyaW5nKGZpbmFsIFVua25vd25GaWVsZFNldCBmaWVsZHMp
IHsKLSAgICB0cnkgewotICAgICAgZmluYWwgU3RyaW5nQnVpbGRlciB0ZXh0ID0gbmV3IFN0cmlu
Z0J1aWxkZXIoKTsKLSAgICAgIHByaW50KGZpZWxkcywgdGV4dCk7Ci0gICAgICByZXR1cm4gdGV4
dC50b1N0cmluZygpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93
IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IFNhbWUgYXMge0Bjb2RlIHByaW50VG9TdHJpbmcoKX0sIGV4Y2VwdCB0aGF0IG5vbi1BU0NJSSBj
aGFyYWN0ZXJzCi0gICAqIGluIHN0cmluZyB0eXBlIGZpZWxkcyBhcmUgbm90IGVzY2FwZWQgaW4g
YmFja3NsYXNoK29jdGFscy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHByaW50VG9V
bmljb2RlU3RyaW5nKGZpbmFsIE1lc3NhZ2VPckJ1aWxkZXIgbWVzc2FnZSkgewotICAgIHRyeSB7
Ci0gICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHRleHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwot
ICAgICAgVU5JQ09ERV9QUklOVEVSLnByaW50KG1lc3NhZ2UsIG5ldyBUZXh0R2VuZXJhdG9yKHRl
eHQpKTsKLSAgICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7Ci0gICAgfSBjYXRjaCAoSU9FeGNl
cHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlKTsKLSAg
ICB9Ci0gIH0KLQotICAvKioKLSAgICogU2FtZSBhcyB7QGNvZGUgcHJpbnRUb1N0cmluZygpfSwg
ZXhjZXB0IHRoYXQgbm9uLUFTQ0lJIGNoYXJhY3RlcnMKLSAgICogaW4gc3RyaW5nIHR5cGUgZmll
bGRzIGFyZSBub3QgZXNjYXBlZCBpbiBiYWNrc2xhc2grb2N0YWxzLgotICAgKi8KLSAgcHVibGlj
IHN0YXRpYyBTdHJpbmcgcHJpbnRUb1VuaWNvZGVTdHJpbmcoZmluYWwgVW5rbm93bkZpZWxkU2V0
IGZpZWxkcykgewotICAgIHRyeSB7Ci0gICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHRleHQgPSBu
ZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgVU5JQ09ERV9QUklOVEVSLnByaW50VW5rbm93bkZp
ZWxkcyhmaWVsZHMsIG5ldyBUZXh0R2VuZXJhdG9yKHRleHQpKTsKLSAgICAgIHJldHVybiB0ZXh0
LnRvU3RyaW5nKCk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cg
bmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3Rh
dGljIHZvaWQgcHJpbnRGaWVsZChmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCB2YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmluYWwgQXBwZW5kYWJsZSBvdXRwdXQpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgREVGQVVMVF9Q
UklOVEVSLnByaW50RmllbGQoZmllbGQsIHZhbHVlLCBuZXcgVGV4dEdlbmVyYXRvcihvdXRwdXQp
KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHByaW50RmllbGRUb1N0cmluZyhmaW5h
bCBGaWVsZERlc2NyaXB0b3IgZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaW5hbCBPYmplY3QgdmFsdWUpIHsKLSAgICB0cnkgewotICAgICAgZmluYWwg
U3RyaW5nQnVpbGRlciB0ZXh0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgIHByaW50Rmll
bGQoZmllbGQsIHZhbHVlLCB0ZXh0KTsKLSAgICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7Ci0g
ICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0
ZUV4Y2VwdGlvbihlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogT3V0cHV0cyBhIHRleHR1
YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIGdpdmVuIGZpZWxkIHZhbHVlLgotICAg
KgotICAgKiBAcGFyYW0gZmllbGQgdGhlIGRlc2NyaXB0b3Igb2YgdGhlIGZpZWxkCi0gICAqIEBw
YXJhbSB2YWx1ZSB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkCi0gICAqIEBwYXJhbSBvdXRwdXQgdGhl
IG91dHB1dCB0byB3aGljaCB0byBhcHBlbmQgdGhlIGZvcm1hdHRlZCB2YWx1ZQotICAgKiBAdGhy
b3dzIENsYXNzQ2FzdEV4Y2VwdGlvbiBpZiB0aGUgdmFsdWUgaXMgbm90IGFwcHJvcHJpYXRlIGZv
ciB0aGUKLSAgICogICAgIGdpdmVuIGZpZWxkIGRlc2NyaXB0b3IKLSAgICogQHRocm93cyBJT0V4
Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbiBleGNlcHRpb24gd3JpdGluZyB0byB0aGUgb3V0cHV0Ci0g
ICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRGaWVsZFZhbHVlKGZpbmFsIEZpZWxkRGVz
Y3JpcHRvciBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5h
bCBPYmplY3QgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlu
YWwgQXBwZW5kYWJsZSBvdXRwdXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBERUZBVUxUX1BSSU5URVIucHJpbnRGaWVsZFZh
bHVlKGZpZWxkLCB2YWx1ZSwgbmV3IFRleHRHZW5lcmF0b3Iob3V0cHV0KSk7Ci0gIH0KLQotICAv
KioKLSAgICogT3V0cHV0cyBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9m
IGFuIHVua25vd24gZmllbGQuCi0gICAqCi0gICAqIEBwYXJhbSB0YWcgdGhlIGZpZWxkJ3MgdGFn
IG51bWJlcgotICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotICAgKiBA
cGFyYW0gb3V0cHV0IHRoZSBvdXRwdXQgdG8gd2hpY2ggdG8gYXBwZW5kIHRoZSBmb3JtYXR0ZWQg
dmFsdWUKLSAgICogQHRocm93cyBDbGFzc0Nhc3RFeGNlcHRpb24gaWYgdGhlIHZhbHVlIGlzIG5v
dCBhcHByb3ByaWF0ZSBmb3IgdGhlCi0gICAqICAgICBnaXZlbiBmaWVsZCBkZXNjcmlwdG9yCi0g
ICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gZXhjZXB0aW9uIHdyaXRpbmcg
dG8gdGhlIG91dHB1dAotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50VW5rbm93bkZp
ZWxkVmFsdWUoZmluYWwgaW50IHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5hbCBBcHBlbmRhYmxlIG91dHB1dCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAg
ICBwcmludFVua25vd25GaWVsZFZhbHVlKHRhZywgdmFsdWUsIG5ldyBUZXh0R2VuZXJhdG9yKG91
dHB1dCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFVua25vd25GaWVsZFZh
bHVlKGZpbmFsIGludCB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaW5hbCBPYmplY3QgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaW5hbCBUZXh0R2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7
Ci0gICAgc3dpdGNoIChXaXJlRm9ybWF0LmdldFRhZ1dpcmVUeXBlKHRhZykpIHsKLSAgICAgIGNh
c2UgV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQ6Ci0gICAgICAgIGdlbmVyYXRvci5wcmludCh1
bnNpZ25lZFRvU3RyaW5nKChMb25nKSB2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgV2lyZUZvcm1hdC5XSVJFVFlQRV9GSVhFRDMyOgotICAgICAgICBnZW5lcmF0b3IucHJpbnQo
Ci0gICAgICAgICAgICBTdHJpbmcuZm9ybWF0KChMb2NhbGUpIG51bGwsICIweCUwOHgiLCAoSW50
ZWdlcikgdmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXQuV0lS
RVRZUEVfRklYRUQ2NDoKLSAgICAgICAgZ2VuZXJhdG9yLnByaW50KFN0cmluZy5mb3JtYXQoKExv
Y2FsZSkgbnVsbCwgIjB4JTAxNngiLCAoTG9uZykgdmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRDoKLSAgICAgICAg
Z2VuZXJhdG9yLnByaW50KCJcIiIpOwotICAgICAgICBnZW5lcmF0b3IucHJpbnQoZXNjYXBlQnl0
ZXMoKEJ5dGVTdHJpbmcpIHZhbHVlKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmludCgiXCIiKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfU1RBUlRfR1JP
VVA6Ci0gICAgICAgIERFRkFVTFRfUFJJTlRFUi5wcmludFVua25vd25GaWVsZHMoKFVua25vd25G
aWVsZFNldCkgdmFsdWUsIGdlbmVyYXRvcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFkIHRhZzog
IiArIHRhZyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEhlbHBlciBjbGFzcyBmb3IgY29udmVydGlu
ZyBwcm90b2J1ZnMgdG8gdGV4dC4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgUHJp
bnRlciB7Ci0gICAgLyoqIFdoZXRoZXIgdG8gb21pdCBuZXdsaW5lcyBmcm9tIHRoZSBvdXRwdXQu
ICovCi0gICAgYm9vbGVhbiBzaW5nbGVMaW5lTW9kZSA9IGZhbHNlOwotCi0gICAgLyoqIFdoZXRo
ZXIgdG8gZXNjYXBlIG5vbiBBU0NJSSBjaGFyYWN0ZXJzIHdpdGggYmFja3NsYXNoIGFuZCBvY3Rh
bC4gKi8KLSAgICBib29sZWFuIGVzY2FwZU5vbkFzY2lpID0gdHJ1ZTsKLQotICAgIHByaXZhdGUg
UHJpbnRlcigpIHt9Ci0KLSAgICAvKiogU2V0dGVyIG9mIHNpbmdsZUxpbmVNb2RlICovCi0gICAg
cHJpdmF0ZSBQcmludGVyIHNldFNpbmdsZUxpbmVNb2RlKGJvb2xlYW4gc2luZ2xlTGluZU1vZGUp
IHsKLSAgICAgIHRoaXMuc2luZ2xlTGluZU1vZGUgPSBzaW5nbGVMaW5lTW9kZTsKLSAgICAgIHJl
dHVybiB0aGlzOwotICAgIH0KLQotICAgIC8qKiBTZXR0ZXIgb2YgZXNjYXBlTm9uQXNjaWkgKi8K
LSAgICBwcml2YXRlIFByaW50ZXIgc2V0RXNjYXBlTm9uQXNjaWkoYm9vbGVhbiBlc2NhcGVOb25B
c2NpaSkgewotICAgICAgdGhpcy5lc2NhcGVOb25Bc2NpaSA9IGVzY2FwZU5vbkFzY2lpOwotICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHByaW50KAotICAgICAg
ICBmaW5hbCBNZXNzYWdlT3JCdWlsZGVyIG1lc3NhZ2UsIGZpbmFsIFRleHRHZW5lcmF0b3IgZ2Vu
ZXJhdG9yKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZm9yIChNYXAuRW50
cnk8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGZpZWxkCi0gICAgICAgICAgOiBtZXNzYWdlLmdl
dEFsbEZpZWxkcygpLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgcHJpbnRGaWVsZChmaWVsZC5nZXRL
ZXkoKSwgZmllbGQuZ2V0VmFsdWUoKSwgZ2VuZXJhdG9yKTsKLSAgICAgIH0KLSAgICAgIHByaW50
VW5rbm93bkZpZWxkcyhtZXNzYWdlLmdldFVua25vd25GaWVsZHMoKSwgZ2VuZXJhdG9yKTsKLSAg
ICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcHJpbnRGaWVsZChmaW5hbCBGaWVsZERlc2NyaXB0b3Ig
ZmllbGQsIGZpbmFsIE9iamVjdCB2YWx1ZSwKLSAgICAgICAgZmluYWwgVGV4dEdlbmVyYXRvciBn
ZW5lcmF0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBpZiAoZmllbGQuaXNSZXBlYXRl
ZCgpKSB7Ci0gICAgICAgIC8vIFJlcGVhdGVkIGZpZWxkLiAgUHJpbnQgZWFjaCBlbGVtZW50Lgot
ICAgICAgICBmb3IgKE9iamVjdCBlbGVtZW50IDogKExpc3Q8Pz4pIHZhbHVlKSB7Ci0gICAgICAg
ICAgcHJpbnRTaW5nbGVGaWVsZChmaWVsZCwgZWxlbWVudCwgZ2VuZXJhdG9yKTsKLSAgICAgICAg
fQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTaW5nbGVGaWVsZChmaWVsZCwgdmFsdWUs
IGdlbmVyYXRvcik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHByaW50U2lu
Z2xlRmllbGQoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaW5hbCBUZXh0R2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgaWYgKGZp
ZWxkLmlzRXh0ZW5zaW9uKCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLnByaW50KCJbIik7Ci0gICAg
ICAgIC8vIFdlIHNwZWNpYWwtY2FzZSBNZXNzYWdlU2V0IGVsZW1lbnRzIGZvciBjb21wYXRpYmls
aXR5IHdpdGggcHJvdG8xLgotICAgICAgICBpZiAoZmllbGQuZ2V0Q29udGFpbmluZ1R5cGUoKS5n
ZXRPcHRpb25zKCkuZ2V0TWVzc2FnZVNldFdpcmVGb3JtYXQoKQotICAgICAgICAgICAgJiYgKGZp
ZWxkLmdldFR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3IuVHlwZS5NRVNTQUdFKQotICAgICAgICAg
ICAgJiYgKGZpZWxkLmlzT3B0aW9uYWwoKSkKLSAgICAgICAgICAgIC8vIG9iamVjdCBlcXVhbGl0
eQotICAgICAgICAgICAgJiYgKGZpZWxkLmdldEV4dGVuc2lvblNjb3BlKCkgPT0gZmllbGQuZ2V0
TWVzc2FnZVR5cGUoKSkpIHsKLSAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoZmllbGQuZ2V0TWVz
c2FnZVR5cGUoKS5nZXRGdWxsTmFtZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBn
ZW5lcmF0b3IucHJpbnQoZmllbGQuZ2V0RnVsbE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Z2VuZXJhdG9yLnByaW50KCJdIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoZmllbGQu
Z2V0VHlwZSgpID09IEZpZWxkRGVzY3JpcHRvci5UeXBlLkdST1VQKSB7Ci0gICAgICAgICAgLy8g
R3JvdXBzIG11c3QgYmUgc2VyaWFsaXplZCB3aXRoIHRoZWlyIG9yaWdpbmFsIGNhcGl0YWxpemF0
aW9uLgotICAgICAgICAgIGdlbmVyYXRvci5wcmludChmaWVsZC5nZXRNZXNzYWdlVHlwZSgpLmdl
dE5hbWUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ2VuZXJhdG9yLnByaW50KGZp
ZWxkLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGZpZWxkLmdl
dEphdmFUeXBlKCkgPT0gRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAg
ICAgaWYgKHNpbmdsZUxpbmVNb2RlKSB7Ci0gICAgICAgICAgZ2VuZXJhdG9yLnByaW50KCIgeyAi
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIiB7XG4iKTsK
LSAgICAgICAgICBnZW5lcmF0b3IuaW5kZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIGdlbmVyYXRvci5wcmludCgiOiAiKTsKLSAgICAgIH0KLQotICAgICAgcHJpbnRG
aWVsZFZhbHVlKGZpZWxkLCB2YWx1ZSwgZ2VuZXJhdG9yKTsKLQotICAgICAgaWYgKGZpZWxkLmdl
dEphdmFUeXBlKCkgPT0gRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAg
ICAgaWYgKHNpbmdsZUxpbmVNb2RlKSB7Ci0gICAgICAgICAgZ2VuZXJhdG9yLnByaW50KCJ9ICIp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdlbmVyYXRvci5vdXRkZW50KCk7Ci0gICAg
ICAgICAgZ2VuZXJhdG9yLnByaW50KCJ9XG4iKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKHNpbmdsZUxpbmVNb2RlKSB7Ci0gICAgICAgICAgZ2VuZXJhdG9yLnByaW50
KCIgIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ2VuZXJhdG9yLnByaW50KCJcbiIp
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHByaW50Rmll
bGRWYWx1ZShmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaW5hbCBUZXh0R2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBzd2l0Y2ggKGZp
ZWxkLmdldFR5cGUoKSkgewotICAgICAgICBjYXNlIElOVDMyOgotICAgICAgICBjYXNlIFNJTlQz
MjoKLSAgICAgICAgY2FzZSBTRklYRUQzMjoKLSAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoKChJ
bnRlZ2VyKSB2YWx1ZSkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBJTlQ2NDoKLSAgICAgICAgY2FzZSBTSU5UNjQ6Ci0gICAgICAgIGNhc2UgU0ZJWEVENjQ6
Ci0gICAgICAgICAgZ2VuZXJhdG9yLnByaW50KCgoTG9uZykgdmFsdWUpLnRvU3RyaW5nKCkpOwot
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQk9PTDoKLSAgICAgICAgICBnZW5lcmF0
b3IucHJpbnQoKChCb29sZWFuKSB2YWx1ZSkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBGTE9BVDoKLSAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoKChGbG9h
dCkgdmFsdWUpLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
RE9VQkxFOgotICAgICAgICAgIGdlbmVyYXRvci5wcmludCgoKERvdWJsZSkgdmFsdWUpLnRvU3Ry
aW5nKCkpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVUlOVDMyOgotICAgICAg
ICBjYXNlIEZJWEVEMzI6Ci0gICAgICAgICAgZ2VuZXJhdG9yLnByaW50KHVuc2lnbmVkVG9TdHJp
bmcoKEludGVnZXIpIHZhbHVlKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBV
SU5UNjQ6Ci0gICAgICAgIGNhc2UgRklYRUQ2NDoKLSAgICAgICAgICBnZW5lcmF0b3IucHJpbnQo
dW5zaWduZWRUb1N0cmluZygoTG9uZykgdmFsdWUpKTsKLSAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIFNUUklORzoKLSAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIlwiIik7Ci0gICAg
ICAgICAgZ2VuZXJhdG9yLnByaW50KGVzY2FwZU5vbkFzY2lpCi0gICAgICAgICAgICAgID8gVGV4
dEZvcm1hdEVzY2FwZXIuZXNjYXBlVGV4dCgoU3RyaW5nKSB2YWx1ZSkKLSAgICAgICAgICAgICAg
OiBlc2NhcGVEb3VibGVRdW90ZXNBbmRCYWNrc2xhc2hlcygoU3RyaW5nKSB2YWx1ZSkKLSAgICAg
ICAgICAgICAgICAgIC5yZXBsYWNlKCJcbiIsICJcXG4iKSk7Ci0gICAgICAgICAgZ2VuZXJhdG9y
LnByaW50KCJcIiIpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQllURVM6Ci0g
ICAgICAgICAgZ2VuZXJhdG9yLnByaW50KCJcIiIpOwotICAgICAgICAgIGlmICh2YWx1ZSBpbnN0
YW5jZW9mIEJ5dGVTdHJpbmcpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5wcmludChlc2NhcGVC
eXRlcygoQnl0ZVN0cmluZykgdmFsdWUpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZ2VuZXJhdG9yLnByaW50KGVzY2FwZUJ5dGVzKChieXRlW10pIHZhbHVlKSk7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGdlbmVyYXRvci5wcmludCgiXCIiKTsKLSAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEVOVU06Ci0gICAgICAgICAgZ2VuZXJhdG9yLnByaW50KCgoRW51bVZh
bHVlRGVzY3JpcHRvcikgdmFsdWUpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBNRVNTQUdFOgotICAgICAgICBjYXNlIEdST1VQOgotICAgICAgICAgIHByaW50
KChNZXNzYWdlKSB2YWx1ZSwgZ2VuZXJhdG9yKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcHJpbnRVbmtub3duRmllbGRzKGZpbmFsIFVua25v
d25GaWVsZFNldCB1bmtub3duRmllbGRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmluYWwgVGV4dEdlbmVyYXRvciBnZW5lcmF0b3IpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZm9yIChNYXAuRW50
cnk8SW50ZWdlciwgVW5rbm93bkZpZWxkU2V0LkZpZWxkPiBlbnRyeSA6Ci0gICAgICAgICAgICAg
ICB1bmtub3duRmllbGRzLmFzTWFwKCkuZW50cnlTZXQoKSkgewotICAgICAgICBmaW5hbCBpbnQg
bnVtYmVyID0gZW50cnkuZ2V0S2V5KCk7Ci0gICAgICAgIGZpbmFsIFVua25vd25GaWVsZFNldC5G
aWVsZCBmaWVsZCA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgIHByaW50VW5rbm93bkZpZWxk
KG51bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQsCi0gICAgICAgICAgICBmaWVsZC5n
ZXRWYXJpbnRMaXN0KCksIGdlbmVyYXRvcik7Ci0gICAgICAgIHByaW50VW5rbm93bkZpZWxkKG51
bWJlciwgV2lyZUZvcm1hdC5XSVJFVFlQRV9GSVhFRDMyLAotICAgICAgICAgICAgZmllbGQuZ2V0
Rml4ZWQzMkxpc3QoKSwgZ2VuZXJhdG9yKTsKLSAgICAgICAgcHJpbnRVbmtub3duRmllbGQobnVt
YmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0ZJWEVENjQsCi0gICAgICAgICAgICBmaWVsZC5nZXRG
aXhlZDY0TGlzdCgpLCBnZW5lcmF0b3IpOwotICAgICAgICBwcmludFVua25vd25GaWVsZChudW1i
ZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCwKLSAgICAgICAgICAgIGZp
ZWxkLmdldExlbmd0aERlbGltaXRlZExpc3QoKSwgZ2VuZXJhdG9yKTsKLSAgICAgICAgZm9yIChm
aW5hbCBVbmtub3duRmllbGRTZXQgdmFsdWUgOiBmaWVsZC5nZXRHcm91cExpc3QoKSkgewotICAg
ICAgICAgIGdlbmVyYXRvci5wcmludChlbnRyeS5nZXRLZXkoKS50b1N0cmluZygpKTsKLSAgICAg
ICAgICBpZiAoc2luZ2xlTGluZU1vZGUpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5wcmludCgi
IHsgIik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5wcmludCgi
IHtcbiIpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmluZGVudCgpOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBwcmludFVua25vd25GaWVsZHModmFsdWUsIGdlbmVyYXRvcik7Ci0gICAgICAgICAg
aWYgKHNpbmdsZUxpbmVNb2RlKSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIn0gIik7
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5vdXRkZW50KCk7Ci0g
ICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIn1cbiIpOwotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBwcmludFVua25vd25GaWVsZChm
aW5hbCBpbnQgbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5h
bCBpbnQgd2lyZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFs
IExpc3Q8Pz4gdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5h
bCBUZXh0R2VuZXJhdG9yIGdlbmVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGZvciAoZmluYWwgT2JqZWN0IHZhbHVl
IDogdmFsdWVzKSB7Ci0gICAgICAgIGdlbmVyYXRvci5wcmludChTdHJpbmcudmFsdWVPZihudW1i
ZXIpKTsKLSAgICAgICAgZ2VuZXJhdG9yLnByaW50KCI6ICIpOwotICAgICAgICBwcmludFVua25v
d25GaWVsZFZhbHVlKHdpcmVUeXBlLCB2YWx1ZSwgZ2VuZXJhdG9yKTsKLSAgICAgICAgZ2VuZXJh
dG9yLnByaW50KHNpbmdsZUxpbmVNb2RlID8gIiAiIDogIlxuIik7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgLyoqIENvbnZlcnQgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgdG8gYSBzdHJp
bmcuICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHVuc2lnbmVkVG9TdHJpbmcoZmluYWwgaW50
IHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlID49IDApIHsKLSAgICAgIHJldHVybiBJbnRlZ2VyLnRv
U3RyaW5nKHZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIExvbmcudG9TdHJpbmco
dmFsdWUgJiAweDAwMDAwMDAwRkZGRkZGRkZMKTsKLSAgICB9Ci0gIH0KLQotICAvKiogQ29udmVy
dCBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB0byBhIHN0cmluZy4gKi8KLSAgcHVibGljIHN0
YXRpYyBTdHJpbmcgdW5zaWduZWRUb1N0cmluZyhmaW5hbCBsb25nIHZhbHVlKSB7Ci0gICAgaWYg
KHZhbHVlID49IDApIHsKLSAgICAgIHJldHVybiBMb25nLnRvU3RyaW5nKHZhbHVlKTsKLSAgICB9
IGVsc2UgewotICAgICAgLy8gUHVsbCBvZmYgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IHNvIHRo
YXQgQmlnSW50ZWdlciBkb2Vzbid0IHRoaW5rCi0gICAgICAvLyB0aGUgbnVtYmVyIGlzIG5lZ2F0
aXZlLCB0aGVuIHNldCBpdCBhZ2FpbiB1c2luZyBzZXRCaXQoKS4KLSAgICAgIHJldHVybiBCaWdJ
bnRlZ2VyLnZhbHVlT2YodmFsdWUgJiAweDdGRkZGRkZGRkZGRkZGRkZMKQotICAgICAgICAgICAg
ICAgICAgICAgICAuc2V0Qml0KDYzKS50b1N0cmluZygpOwotICAgIH0KLSAgfQotCi0gIC8qKgot
ICAgKiBBbiBpbm5lciBjbGFzcyBmb3Igd3JpdGluZyB0ZXh0IHRvIHRoZSBvdXRwdXQgc3RyZWFt
LgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgVGV4dEdlbmVyYXRvciB7Ci0g
ICAgcHJpdmF0ZSBmaW5hbCBBcHBlbmRhYmxlIG91dHB1dDsKLSAgICBwcml2YXRlIGZpbmFsIFN0
cmluZ0J1aWxkZXIgaW5kZW50ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBwcml2YXRlIGJv
b2xlYW4gYXRTdGFydE9mTGluZSA9IHRydWU7Ci0KLSAgICBwcml2YXRlIFRleHRHZW5lcmF0b3Io
ZmluYWwgQXBwZW5kYWJsZSBvdXRwdXQpIHsKLSAgICAgIHRoaXMub3V0cHV0ID0gb3V0cHV0Owot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIEluZGVudCB0ZXh0IGJ5IHR3byBzcGFjZXMuICBBZnRl
ciBjYWxsaW5nIEluZGVudCgpLCB0d28gc3BhY2VzIHdpbGwgYmUKLSAgICAgKiBpbnNlcnRlZCBh
dCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZSBvZiB0ZXh0LiAgSW5kZW50KCkgbWF5IGJlIGNh
bGxlZAotICAgICAqIG11bHRpcGxlIHRpbWVzIHRvIHByb2R1Y2UgZGVlcGVyIGluZGVudHMuCi0g
ICAgICovCi0gICAgcHVibGljIHZvaWQgaW5kZW50KCkgewotICAgICAgaW5kZW50LmFwcGVuZCgi
ICAiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWR1Y2VzIHRoZSBjdXJyZW50IGluZGVu
dCBsZXZlbCBieSB0d28gc3BhY2VzLCBvciBjcmFzaGVzIGlmIHRoZSBpbmRlbnQKLSAgICAgKiBs
ZXZlbCBpcyB6ZXJvLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG91dGRlbnQoKSB7Ci0gICAg
ICBmaW5hbCBpbnQgbGVuZ3RoID0gaW5kZW50Lmxlbmd0aCgpOwotICAgICAgaWYgKGxlbmd0aCA9
PSAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAg
ICAgICAgICAiIE91dGRlbnQoKSB3aXRob3V0IG1hdGNoaW5nIEluZGVudCgpLiIpOwotICAgICAg
fQotICAgICAgaW5kZW50LmRlbGV0ZShsZW5ndGggLSAyLCBsZW5ndGgpOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIFByaW50IHRleHQgdG8gdGhlIG91dHB1dCBzdHJlYW0uCi0gICAgICovCi0g
ICAgcHVibGljIHZvaWQgcHJpbnQoZmluYWwgQ2hhclNlcXVlbmNlIHRleHQpIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgICBmaW5hbCBpbnQgc2l6ZSA9IHRleHQubGVuZ3RoKCk7Ci0gICAgICBp
bnQgcG9zID0gMDsKLQotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09ICdcbicpIHsKLSAgICAgICAgICB3cml0ZSh0ZXh0
LnN1YlNlcXVlbmNlKHBvcywgaSArIDEpKTsKLSAgICAgICAgICBwb3MgPSBpICsgMTsKLSAgICAg
ICAgICBhdFN0YXJ0T2ZMaW5lID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgd3Jp
dGUodGV4dC5zdWJTZXF1ZW5jZShwb3MsIHNpemUpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZv
aWQgd3JpdGUoZmluYWwgQ2hhclNlcXVlbmNlIGRhdGEpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0g
ICAgICBpZiAoZGF0YS5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K
LSAgICAgIGlmIChhdFN0YXJ0T2ZMaW5lKSB7Ci0gICAgICAgIGF0U3RhcnRPZkxpbmUgPSBmYWxz
ZTsKLSAgICAgICAgb3V0cHV0LmFwcGVuZChpbmRlbnQpOwotICAgICAgfQotICAgICAgb3V0cHV0
LmFwcGVuZChkYXRhKTsKLSAgICB9Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBQYXJzaW5n
Ci0KLSAgLyoqCi0gICAqIFJlcHJlc2VudHMgYSBzdHJlYW0gb2YgdG9rZW5zIHBhcnNlZCBmcm9t
IGEge0Bjb2RlIFN0cmluZ30uCi0gICAqCi0gICAqIDxwPlRoZSBKYXZhIHN0YW5kYXJkIGxpYnJh
cnkgcHJvdmlkZXMgbWFueSBjbGFzc2VzIHRoYXQgeW91IG1pZ2h0IHRoaW5rCi0gICAqIHdvdWxk
IGJlIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIHRoaXMsIGJ1dCBhcmVuJ3QuICBGb3IgZXhhbXBs
ZToKLSAgICoKLSAgICogPHVsPgotICAgKiA8bGk+e0Bjb2RlIGphdmEuaW8uU3RyZWFtVG9rZW5p
emVyfTogIFRoaXMgYWxtb3N0IGRvZXMgd2hhdCB3ZSB3YW50IC0tIG9yLAotICAgKiAgIGF0IGxl
YXN0LCBzb21ldGhpbmcgdGhhdCB3b3VsZCBnZXQgdXMgY2xvc2UgdG8gd2hhdCB3ZSB3YW50IC0t
IGV4Y2VwdAotICAgKiAgIGZvciBvbmUgZmF0YWwgZmxhdzogIEl0IGF1dG9tYXRpY2FsbHkgdW4t
ZXNjYXBlcyBzdHJpbmdzIHVzaW5nIEphdmEKLSAgICogICBlc2NhcGUgc2VxdWVuY2VzLCB3aGlj
aCBkbyBub3QgaW5jbHVkZSBhbGwgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgd2UKLSAgICogICBuZWVk
IHRvIHN1cHBvcnQgKGUuZy4gJ1x4JykuCi0gICAqIDxsaT57QGNvZGUgamF2YS51dGlsLlNjYW5u
ZXJ9OiAgVGhpcyBzZWVtcyBsaWtlIGEgZ3JlYXQgd2F5IGF0IGxlYXN0IHRvCi0gICAqICAgcGFy
c2UgcmVndWxhciBleHByZXNzaW9ucyBvdXQgb2YgYSBzdHJlYW0gKHNvIHdlIHdvdWxkbid0IGhh
dmUgdG8gbG9hZAotICAgKiAgIHRoZSBlbnRpcmUgaW5wdXQgaW50byBhIHNpbmdsZSBzdHJpbmcg
YmVmb3JlIHBhcnNpbmcpLiAgU2FkbHksCi0gICAqICAge0Bjb2RlIFNjYW5uZXJ9IHJlcXVpcmVz
IHRoYXQgdG9rZW5zIGJlIGRlbGltaXRlZCB3aXRoIHNvbWUgZGVsaW1pdGVyLgotICAgKiAgIFRo
dXMsIGFsdGhvdWdoIHRoZSB0ZXh0ICJmb286IiBzaG91bGQgcGFyc2UgdG8gdHdvIHRva2VucyAo
ImZvbyIgYW5kCi0gICAqICAgIjoiKSwge0Bjb2RlIFNjYW5uZXJ9IHdvdWxkIHJlY29nbml6ZSBp
dCBvbmx5IGFzIGEgc2luZ2xlIHRva2VuLgotICAgKiAgIEZ1cnRoZXJtb3JlLCB7QGNvZGUgU2Nh
bm5lcn0gcHJvdmlkZXMgbm8gd2F5IHRvIGluc3BlY3QgdGhlIGNvbnRlbnRzCi0gICAqICAgb2Yg
ZGVsaW1pdGVycywgbWFraW5nIGl0IGltcG9zc2libGUgdG8ga2VlcCB0cmFjayBvZiBsaW5lIGFu
ZCBjb2x1bW4KLSAgICogICBudW1iZXJzLgotICAgKiA8L3VsPgotICAgKgotICAgKiA8cD5MdWNr
aWx5LCBKYXZhJ3MgcmVndWxhciBleHByZXNzaW9uIHN1cHBvcnQgZG9lcyBtYW5hZ2UgdG8gYmUg
dXNlZnVsIHRvCi0gICAqIHVzLiAgKEJhcmVseTogIFdlIG5lZWQge0Bjb2RlIE1hdGNoZXIudXNl
UGF0dGVybigpfSwgd2hpY2ggaXMgbmV3IGluCi0gICAqIEphdmEgMS41LikgIFNvLCB3ZSBjYW4g
dXNlIHRoYXQsIGF0IGxlYXN0LiAgVW5mb3J0dW5hdGVseSwgdGhpcyBpbXBsaWVzCi0gICAqIHRo
YXQgd2UgbmVlZCB0byBoYXZlIHRoZSBlbnRpcmUgaW5wdXQgaW4gb25lIGNvbnRpZ3VvdXMgc3Ry
aW5nLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgVG9rZW5pemVyIHsKLSAg
ICBwcml2YXRlIGZpbmFsIENoYXJTZXF1ZW5jZSB0ZXh0OwotICAgIHByaXZhdGUgZmluYWwgTWF0
Y2hlciBtYXRjaGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGN1cnJlbnRUb2tlbjsKLQotICAgIC8v
IFRoZSBjaGFyYWN0ZXIgaW5kZXggd2l0aGluIHRoaXMudGV4dCBhdCB3aGljaCB0aGUgY3VycmVu
dCB0b2tlbiBiZWdpbnMuCi0gICAgcHJpdmF0ZSBpbnQgcG9zID0gMDsKLQotICAgIC8vIFRoZSBs
aW5lIGFuZCBjb2x1bW4gbnVtYmVycyBvZiB0aGUgY3VycmVudCB0b2tlbi4KLSAgICBwcml2YXRl
IGludCBsaW5lID0gMDsKLSAgICBwcml2YXRlIGludCBjb2x1bW4gPSAwOwotCi0gICAgLy8gVGhl
IGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIG9mIHRoZSBwcmV2aW91cyB0b2tlbiAoYWxsb3dzIHRo
cm93aW5nCi0gICAgLy8gZXJyb3JzICphZnRlciogY29uc3VtaW5nKS4KLSAgICBwcml2YXRlIGlu
dCBwcmV2aW91c0xpbmUgPSAwOwotICAgIHByaXZhdGUgaW50IHByZXZpb3VzQ29sdW1uID0gMDsK
LQotICAgIC8vIFdlIHVzZSBwb3NzZXNzaXZlIHF1YW50aWZpZXJzICgqKyBhbmQgKyspIGJlY2F1
c2Ugb3RoZXJ3aXNlIHRoZSBKYXZhCi0gICAgLy8gcmVnZXggbWF0Y2hlciBoYXMgc3RhY2sgb3Zl
cmZsb3dzIG9uIGxhcmdlIGlucHV0cy4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJu
IFdISVRFU1BBQ0UgPQotICAgICAgUGF0dGVybi5jb21waWxlKCIoXFxzfCgjLiokKSkrKyIsIFBh
dHRlcm4uTVVMVElMSU5FKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIFRPS0VO
ID0gUGF0dGVybi5jb21waWxlKAotICAgICAgIlthLXpBLVpfXVswLTlhLXpBLVpfKy1dKit8IiAr
ICAgICAgICAgICAgICAgIC8vIGFuIGlkZW50aWZpZXIKLSAgICAgICJbLl0/WzAtOSstXVswLTlh
LXpBLVpfListXSorfCIgKyAgICAgICAgICAgICAvLyBhIG51bWJlcgotICAgICAgIlwiKFteXCJc
blxcXFxdfFxcXFwuKSorKFwifFxcXFw/JCl8IiArICAgICAgIC8vIGEgZG91YmxlLXF1b3RlZCBz
dHJpbmcKLSAgICAgICJcJyhbXlwnXG5cXFxcXXxcXFxcLikqKyhcJ3xcXFxcPyQpIiwgICAgICAg
ICAvLyBhIHNpbmdsZS1xdW90ZWQgc3RyaW5nCi0gICAgICBQYXR0ZXJuLk1VTFRJTElORSk7Ci0K
LSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIERPVUJMRV9JTkZJTklUWSA9IFBhdHRl
cm4uY29tcGlsZSgKLSAgICAgICItP2luZihpbml0eSk/IiwKLSAgICAgIFBhdHRlcm4uQ0FTRV9J
TlNFTlNJVElWRSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBGTE9BVF9JTkZJ
TklUWSA9IFBhdHRlcm4uY29tcGlsZSgKLSAgICAgICItP2luZihpbml0eSk/Zj8iLAotICAgICAg
UGF0dGVybi5DQVNFX0lOU0VOU0lUSVZFKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0
ZXJuIEZMT0FUX05BTiA9IFBhdHRlcm4uY29tcGlsZSgKLSAgICAgICJuYW5mPyIsCi0gICAgICBQ
YXR0ZXJuLkNBU0VfSU5TRU5TSVRJVkUpOwotCi0gICAgLyoqIENvbnN0cnVjdCBhIHRva2VuaXpl
ciB0aGF0IHBhcnNlcyB0b2tlbnMgZnJvbSB0aGUgZ2l2ZW4gdGV4dC4gKi8KLSAgICBwcml2YXRl
IFRva2VuaXplcihmaW5hbCBDaGFyU2VxdWVuY2UgdGV4dCkgewotICAgICAgdGhpcy50ZXh0ID0g
dGV4dDsKLSAgICAgIHRoaXMubWF0Y2hlciA9IFdISVRFU1BBQ0UubWF0Y2hlcih0ZXh0KTsKLSAg
ICAgIHNraXBXaGl0ZXNwYWNlKCk7Ci0gICAgICBuZXh0VG9rZW4oKTsKLSAgICB9Ci0KLSAgICBp
bnQgZ2V0TGluZSgpIHsKLSAgICAgIHJldHVybiBsaW5lOwotICAgIH0KLQotICAgIGludCBnZXRD
b2x1bW4oKSB7Ci0gICAgICByZXR1cm4gY29sdW1uOwotICAgIH0KLQotICAgIC8qKiBBcmUgd2Ug
YXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQ/ICovCi0gICAgcHVibGljIGJvb2xlYW4gYXRFbmQoKSB7
Ci0gICAgICByZXR1cm4gY3VycmVudFRva2VuLmxlbmd0aCgpID09IDA7Ci0gICAgfQotCi0gICAg
LyoqIEFkdmFuY2UgdG8gdGhlIG5leHQgdG9rZW4uICovCi0gICAgcHVibGljIHZvaWQgbmV4dFRv
a2VuKCkgewotICAgICAgcHJldmlvdXNMaW5lID0gbGluZTsKLSAgICAgIHByZXZpb3VzQ29sdW1u
ID0gY29sdW1uOwotCi0gICAgICAvLyBBZHZhbmNlIHRoZSBsaW5lIGNvdW50ZXIgdG8gdGhlIGN1
cnJlbnQgcG9zaXRpb24uCi0gICAgICB3aGlsZSAocG9zIDwgbWF0Y2hlci5yZWdpb25TdGFydCgp
KSB7Ci0gICAgICAgIGlmICh0ZXh0LmNoYXJBdChwb3MpID09ICdcbicpIHsKLSAgICAgICAgICAr
K2xpbmU7Ci0gICAgICAgICAgY29sdW1uID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICArK2NvbHVtbjsKLSAgICAgICAgfQotICAgICAgICArK3BvczsKLSAgICAgIH0KLQotICAgICAg
Ly8gTWF0Y2ggdGhlIG5leHQgdG9rZW4uCi0gICAgICBpZiAobWF0Y2hlci5yZWdpb25TdGFydCgp
ID09IG1hdGNoZXIucmVnaW9uRW5kKCkpIHsKLSAgICAgICAgLy8gRU9GCi0gICAgICAgIGN1cnJl
bnRUb2tlbiA9ICIiOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbWF0Y2hlci51c2VQYXR0ZXJu
KFRPS0VOKTsKLSAgICAgICAgaWYgKG1hdGNoZXIubG9va2luZ0F0KCkpIHsKLSAgICAgICAgICBj
dXJyZW50VG9rZW4gPSBtYXRjaGVyLmdyb3VwKCk7Ci0gICAgICAgICAgbWF0Y2hlci5yZWdpb24o
bWF0Y2hlci5lbmQoKSwgbWF0Y2hlci5yZWdpb25FbmQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgLy8gVGFrZSBvbmUgY2hhcmFjdGVyLgotICAgICAgICAgIGN1cnJlbnRUb2tlbiA9
IFN0cmluZy52YWx1ZU9mKHRleHQuY2hhckF0KHBvcykpOwotICAgICAgICAgIG1hdGNoZXIucmVn
aW9uKHBvcyArIDEsIG1hdGNoZXIucmVnaW9uRW5kKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
c2tpcFdoaXRlc3BhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTa2lw
IG92ZXIgYW55IHdoaXRlc3BhY2Ugc28gdGhhdCB0aGUgbWF0Y2hlciByZWdpb24gc3RhcnRzIGF0
IHRoZSBuZXh0Ci0gICAgICogdG9rZW4uCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNraXBX
aGl0ZXNwYWNlKCkgewotICAgICAgbWF0Y2hlci51c2VQYXR0ZXJuKFdISVRFU1BBQ0UpOwotICAg
ICAgaWYgKG1hdGNoZXIubG9va2luZ0F0KCkpIHsKLSAgICAgICAgbWF0Y2hlci5yZWdpb24obWF0
Y2hlci5lbmQoKSwgbWF0Y2hlci5yZWdpb25FbmQoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogSWYgdGhlIG5leHQgdG9rZW4gZXhhY3RseSBtYXRjaGVzIHtAY29kZSB0b2tl
bn0sIGNvbnN1bWUgaXQgYW5kIHJldHVybgotICAgICAqIHtAY29kZSB0cnVlfS4gIE90aGVyd2lz
ZSwgcmV0dXJuIHtAY29kZSBmYWxzZX0gd2l0aG91dCBkb2luZyBhbnl0aGluZy4KLSAgICAgKi8K
LSAgICBwdWJsaWMgYm9vbGVhbiB0cnlDb25zdW1lKGZpbmFsIFN0cmluZyB0b2tlbikgewotICAg
ICAgaWYgKGN1cnJlbnRUb2tlbi5lcXVhbHModG9rZW4pKSB7Ci0gICAgICAgIG5leHRUb2tlbigp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGUgbmV4dCB0b2tl
biBleGFjdGx5IG1hdGNoZXMge0Bjb2RlIHRva2VufSwgY29uc3VtZSBpdC4gIE90aGVyd2lzZSwK
LSAgICAgKiB0aHJvdyBhIHtAbGluayBQYXJzZUV4Y2VwdGlvbn0uCi0gICAgICovCi0gICAgcHVi
bGljIHZvaWQgY29uc3VtZShmaW5hbCBTdHJpbmcgdG9rZW4pIHRocm93cyBQYXJzZUV4Y2VwdGlv
biB7Ci0gICAgICBpZiAoIXRyeUNvbnN1bWUodG9rZW4pKSB7Ci0gICAgICAgIHRocm93IHBhcnNl
RXhjZXB0aW9uKCJFeHBlY3RlZCBcIiIgKyB0b2tlbiArICJcIi4iKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHtAY29kZSB0cnVlfSBpZiB0aGUgbmV4dCB0b2tl
biBpcyBhbiBpbnRlZ2VyLCBidXQgZG9lcwotICAgICAqIG5vdCBjb25zdW1lIGl0LgotICAgICAq
LwotICAgIHB1YmxpYyBib29sZWFuIGxvb2tpbmdBdEludGVnZXIoKSB7Ci0gICAgICBpZiAoY3Vy
cmVudFRva2VuLmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotCi0gICAgICBmaW5hbCBjaGFyIGMgPSBjdXJyZW50VG9rZW4uY2hhckF0KDApOwotICAgICAg
cmV0dXJuICgnMCcgPD0gYyAmJiBjIDw9ICc5JykKLSAgICAgICAgICB8fCBjID09ICctJyB8fCBj
ID09ICcrJzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHtAY29kZSB0cnVlfSBp
ZiB0aGUgY3VycmVudCB0b2tlbidzIHRleHQgaXMgZXF1YWwgdG8gdGhhdAotICAgICAqIHNwZWNp
ZmllZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBsb29raW5nQXQoU3RyaW5nIHRleHQp
IHsKLSAgICAgIHJldHVybiBjdXJyZW50VG9rZW4uZXF1YWxzKHRleHQpOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIElmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGlkZW50aWZpZXIsIGNvbnN1bWUg
aXQgYW5kIHJldHVybiBpdHMgdmFsdWUuCi0gICAgICogT3RoZXJ3aXNlLCB0aHJvdyBhIHtAbGlu
ayBQYXJzZUV4Y2VwdGlvbn0uCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBjb25zdW1lSWRl
bnRpZmllcigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGN1cnJlbnRUb2tlbi5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIGZpbmFsIGNoYXIgYyA9
IGN1cnJlbnRUb2tlbi5jaGFyQXQoaSk7Ci0gICAgICAgIGlmICgoJ2EnIDw9IGMgJiYgYyA8PSAn
eicpCi0gICAgICAgICAgICB8fCAoJ0EnIDw9IGMgJiYgYyA8PSAnWicpCi0gICAgICAgICAgICB8
fCAoJzAnIDw9IGMgJiYgYyA8PSAnOScpCi0gICAgICAgICAgICB8fCAoYyA9PSAnXycpIHx8IChj
ID09ICcuJykpIHsKLSAgICAgICAgICAvLyBPSwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IHRocm93IHBhcnNlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiRXhwZWN0ZWQgaWRlbnRpZmll
ci4gRm91bmQgJyIgKyBjdXJyZW50VG9rZW4gKyAiJyIpOwotICAgICAgICB9Ci0gICAgICB9Ci0K
LSAgICAgIGZpbmFsIFN0cmluZyByZXN1bHQgPSBjdXJyZW50VG9rZW47Ci0gICAgICBuZXh0VG9r
ZW4oKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYg
dGhlIG5leHQgdG9rZW4gaXMgYW4gaWRlbnRpZmllciwgY29uc3VtZSBpdCBhbmQgcmV0dXJuIHtA
Y29kZSB0cnVlfS4KLSAgICAgKiBPdGhlcndpc2UsIHJldHVybiB7QGNvZGUgZmFsc2V9IHdpdGhv
dXQgZG9pbmcgYW55dGhpbmcuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gdHJ5Q29uc3Vt
ZUlkZW50aWZpZXIoKSB7Ci0gICAgICB0cnkgewotICAgICAgICBjb25zdW1lSWRlbnRpZmllcigp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUp
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIElmIHRoZSBuZXh0IHRva2VuIGlzIGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyLCBjb25zdW1l
IGl0IGFuZCByZXR1cm4gaXRzCi0gICAgICogdmFsdWUuICBPdGhlcndpc2UsIHRocm93IGEge0Bs
aW5rIFBhcnNlRXhjZXB0aW9ufS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGNvbnN1bWVJbnQz
MigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewotICAgICAgICBmaW5hbCBp
bnQgcmVzdWx0ID0gcGFyc2VJbnQzMihjdXJyZW50VG9rZW4pOwotICAgICAgICBuZXh0VG9rZW4o
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IGludGVnZXJQYXJzZUV4Y2VwdGlvbihlKTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIDMy
LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLCBjb25zdW1lIGl0IGFuZCByZXR1cm4gaXRzCi0gICAgICog
dmFsdWUuICBPdGhlcndpc2UsIHRocm93IGEge0BsaW5rIFBhcnNlRXhjZXB0aW9ufS4KLSAgICAg
Ki8KLSAgICBwdWJsaWMgaW50IGNvbnN1bWVVSW50MzIoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24g
ewotICAgICAgdHJ5IHsKLSAgICAgICAgZmluYWwgaW50IHJlc3VsdCA9IHBhcnNlVUludDMyKGN1
cnJlbnRUb2tlbik7Ci0gICAgICAgIG5leHRUb2tlbigpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhy
b3cgaW50ZWdlclBhcnNlRXhjZXB0aW9uKGUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIElmIHRoZSBuZXh0IHRva2VuIGlzIGEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyLCBjb25z
dW1lIGl0IGFuZCByZXR1cm4gaXRzCi0gICAgICogdmFsdWUuICBPdGhlcndpc2UsIHRocm93IGEg
e0BsaW5rIFBhcnNlRXhjZXB0aW9ufS4KLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBjb25zdW1l
SW50NjQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgZmlu
YWwgbG9uZyByZXN1bHQgPSBwYXJzZUludDY0KGN1cnJlbnRUb2tlbik7Ci0gICAgICAgIG5leHRU
b2tlbigpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfSBjYXRjaCAoTnVtYmVyRm9y
bWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgaW50ZWdlclBhcnNlRXhjZXB0aW9uKGUp
OwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIHRoZSBuZXh0IHRva2VuIGlz
IGEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyLCBjb25zdW1lIGl0IGFuZCByZXR1cm4KLSAgICAgKiB7
QGNvZGUgdHJ1ZX0uICBPdGhlcndpc2UsIHJldHVybiB7QGNvZGUgZmFsc2V9IHdpdGhvdXQgZG9p
bmcgYW55dGhpbmcuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gdHJ5Q29uc3VtZUludDY0
KCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgY29uc3VtZUludDY0KCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYgdGhlIG5leHQg
dG9rZW4gaXMgYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciwgY29uc3VtZSBpdCBhbmQgcmV0dXJu
IGl0cwotICAgICAqIHZhbHVlLiAgT3RoZXJ3aXNlLCB0aHJvdyBhIHtAbGluayBQYXJzZUV4Y2Vw
dGlvbn0uCi0gICAgICovCi0gICAgcHVibGljIGxvbmcgY29uc3VtZVVJbnQ2NCgpIHRocm93cyBQ
YXJzZUV4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewotICAgICAgICBmaW5hbCBsb25nIHJlc3VsdCA9
IHBhcnNlVUludDY0KGN1cnJlbnRUb2tlbik7Ci0gICAgICAgIG5leHRUb2tlbigpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUp
IHsKLSAgICAgICAgdGhyb3cgaW50ZWdlclBhcnNlRXhjZXB0aW9uKGUpOwotICAgICAgfQotICAg
IH0KLQotICAgIC8qKgotICAgICAqIElmIHRoZSBuZXh0IHRva2VuIGlzIGEgNjQtYml0IHVuc2ln
bmVkIGludGVnZXIsIGNvbnN1bWUgaXQgYW5kIHJldHVybgotICAgICAqIHtAY29kZSB0cnVlfS4g
IE90aGVyd2lzZSwgcmV0dXJuIHtAY29kZSBmYWxzZX0gd2l0aG91dCBkb2luZyBhbnl0aGluZy4K
LSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiB0cnlDb25zdW1lVUludDY0KCkgewotICAgICAg
dHJ5IHsKLSAgICAgICAgY29uc3VtZVVJbnQ2NCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIHRoZSBuZXh0IHRva2VuIGlzIGEg
ZG91YmxlLCBjb25zdW1lIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLgotICAgICAqIE90aGVyd2lz
ZSwgdGhyb3cgYSB7QGxpbmsgUGFyc2VFeGNlcHRpb259LgotICAgICAqLwotICAgIHB1YmxpYyBk
b3VibGUgY29uc3VtZURvdWJsZSgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAvLyBX
ZSBuZWVkIHRvIHBhcnNlIGluZmluaXR5IGFuZCBuYW4gc2VwYXJhdGVseSBiZWNhdXNlCi0gICAg
ICAvLyBEb3VibGUucGFyc2VEb3VibGUoKSBkb2VzIG5vdCBhY2NlcHQgImluZiIsICJpbmZpbml0
eSIsIG9yICJuYW4iLgotICAgICAgaWYgKERPVUJMRV9JTkZJTklUWS5tYXRjaGVyKGN1cnJlbnRU
b2tlbikubWF0Y2hlcygpKSB7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbmVnYXRpdmUgPSBjdXJy
ZW50VG9rZW4uc3RhcnRzV2l0aCgiLSIpOwotICAgICAgICBuZXh0VG9rZW4oKTsKLSAgICAgICAg
cmV0dXJuIG5lZ2F0aXZlID8gRG91YmxlLk5FR0FUSVZFX0lORklOSVRZIDogRG91YmxlLlBPU0lU
SVZFX0lORklOSVRZOwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnRUb2tlbi5lcXVhbHNJZ25v
cmVDYXNlKCJuYW4iKSkgewotICAgICAgICBuZXh0VG9rZW4oKTsKLSAgICAgICAgcmV0dXJuIERv
dWJsZS5OYU47Ci0gICAgICB9Ci0gICAgICB0cnkgewotICAgICAgICBmaW5hbCBkb3VibGUgcmVz
dWx0ID0gRG91YmxlLnBhcnNlRG91YmxlKGN1cnJlbnRUb2tlbik7Ci0gICAgICAgIG5leHRUb2tl
bigpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgZmxvYXRQYXJzZUV4Y2VwdGlvbihlKTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIGRv
dWJsZSwgY29uc3VtZSBpdCBhbmQgcmV0dXJuIHtAY29kZSB0cnVlfS4KLSAgICAgKiBPdGhlcndp
c2UsIHJldHVybiB7QGNvZGUgZmFsc2V9IHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuCi0gICAgICov
Ci0gICAgcHVibGljIGJvb2xlYW4gdHJ5Q29uc3VtZURvdWJsZSgpIHsKLSAgICAgIHRyeSB7Ci0g
ICAgICAgIGNvbnN1bWVEb3VibGUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGNh
dGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIGZsb2F0LCBj
b25zdW1lIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLgotICAgICAqIE90aGVyd2lzZSwgdGhyb3cg
YSB7QGxpbmsgUGFyc2VFeGNlcHRpb259LgotICAgICAqLwotICAgIHB1YmxpYyBmbG9hdCBjb25z
dW1lRmxvYXQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgLy8gV2UgbmVlZCB0byBw
YXJzZSBpbmZpbml0eSBhbmQgbmFuIHNlcGFyYXRlbHkgYmVjYXVzZQotICAgICAgLy8gRmxvYXQu
cGFyc2VGbG9hdCgpIGRvZXMgbm90IGFjY2VwdCAiaW5mIiwgImluZmluaXR5Iiwgb3IgIm5hbiIu
Ci0gICAgICBpZiAoRkxPQVRfSU5GSU5JVFkubWF0Y2hlcihjdXJyZW50VG9rZW4pLm1hdGNoZXMo
KSkgewotICAgICAgICBmaW5hbCBib29sZWFuIG5lZ2F0aXZlID0gY3VycmVudFRva2VuLnN0YXJ0
c1dpdGgoIi0iKTsKLSAgICAgICAgbmV4dFRva2VuKCk7Ci0gICAgICAgIHJldHVybiBuZWdhdGl2
ZSA/IEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZIDogRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFk7Ci0g
ICAgICB9Ci0gICAgICBpZiAoRkxPQVRfTkFOLm1hdGNoZXIoY3VycmVudFRva2VuKS5tYXRjaGVz
KCkpIHsKLSAgICAgICAgbmV4dFRva2VuKCk7Ci0gICAgICAgIHJldHVybiBGbG9hdC5OYU47Ci0g
ICAgICB9Ci0gICAgICB0cnkgewotICAgICAgICBmaW5hbCBmbG9hdCByZXN1bHQgPSBGbG9hdC5w
YXJzZUZsb2F0KGN1cnJlbnRUb2tlbik7Ci0gICAgICAgIG5leHRUb2tlbigpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsK
LSAgICAgICAgdGhyb3cgZmxvYXRQYXJzZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIGZsb2F0LCBjb25zdW1lIGl0
IGFuZCByZXR1cm4ge0Bjb2RlIHRydWV9LgotICAgICAqIE90aGVyd2lzZSwgcmV0dXJuIHtAY29k
ZSBmYWxzZX0gd2l0aG91dCBkb2luZyBhbnl0aGluZy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9v
bGVhbiB0cnlDb25zdW1lRmxvYXQoKSB7Ci0gICAgICB0cnkgewotICAgICAgICBjb25zdW1lRmxv
YXQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlv
biBlKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIGJvb2xlYW4sIGNvbnN1bWUgaXQgYW5kIHJl
dHVybiBpdHMgdmFsdWUuCi0gICAgICogT3RoZXJ3aXNlLCB0aHJvdyBhIHtAbGluayBQYXJzZUV4
Y2VwdGlvbn0uCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gY29uc3VtZUJvb2xlYW4oKSB0
aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgaWYgKGN1cnJlbnRUb2tlbi5lcXVhbHMoInRy
dWUiKQotICAgICAgICAgIHx8IGN1cnJlbnRUb2tlbi5lcXVhbHMoIlRydWUiKQotICAgICAgICAg
IHx8IGN1cnJlbnRUb2tlbi5lcXVhbHMoInQiKQotICAgICAgICAgIHx8IGN1cnJlbnRUb2tlbi5l
cXVhbHMoIjEiKSkgewotICAgICAgICBuZXh0VG9rZW4oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRUb2tlbi5lcXVhbHMoImZhbHNlIikKLSAgICAgICAg
ICB8fCBjdXJyZW50VG9rZW4uZXF1YWxzKCJGYWxzZSIpCi0gICAgICAgICAgfHwgY3VycmVudFRv
a2VuLmVxdWFscygiZiIpCi0gICAgICAgICAgfHwgY3VycmVudFRva2VuLmVxdWFscygiMCIpKSB7
Ci0gICAgICAgIG5leHRUb2tlbigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICB0aHJvdyBwYXJzZUV4Y2VwdGlvbigiRXhwZWN0ZWQgXCJ0cnVlXCIgb3Ig
XCJmYWxzZVwiLiIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIHRoZSBu
ZXh0IHRva2VuIGlzIGEgc3RyaW5nLCBjb25zdW1lIGl0IGFuZCByZXR1cm4gaXRzICh1bmVzY2Fw
ZWQpCi0gICAgICogdmFsdWUuICBPdGhlcndpc2UsIHRocm93IGEge0BsaW5rIFBhcnNlRXhjZXB0
aW9ufS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGNvbnN1bWVTdHJpbmcoKSB0aHJvd3Mg
UGFyc2VFeGNlcHRpb24gewotICAgICAgcmV0dXJuIGNvbnN1bWVCeXRlU3RyaW5nKCkudG9TdHJp
bmdVdGY4KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYgdGhlIG5leHQgdG9rZW4gaXMg
YSBzdHJpbmcsIGNvbnN1bWUgaXQgYW5kIHJldHVybiB0cnVlLiAgT3RoZXJ3aXNlLAotICAgICAq
IHJldHVybiBmYWxzZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiB0cnlDb25zdW1lU3Ry
aW5nKCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgY29uc3VtZVN0cmluZygpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIHRoZSBu
ZXh0IHRva2VuIGlzIGEgc3RyaW5nLCBjb25zdW1lIGl0LCB1bmVzY2FwZSBpdCBhcyBhCi0gICAg
ICoge0BsaW5rIEJ5dGVTdHJpbmd9LCBhbmQgcmV0dXJuIGl0LiAgT3RoZXJ3aXNlLCB0aHJvdyBh
Ci0gICAgICoge0BsaW5rIFBhcnNlRXhjZXB0aW9ufS4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnl0
ZVN0cmluZyBjb25zdW1lQnl0ZVN0cmluZygpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAg
ICBMaXN0PEJ5dGVTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PEJ5dGVTdHJpbmc+KCk7Ci0g
ICAgICBjb25zdW1lQnl0ZVN0cmluZyhsaXN0KTsKLSAgICAgIHdoaWxlIChjdXJyZW50VG9rZW4u
c3RhcnRzV2l0aCgiJyIpIHx8IGN1cnJlbnRUb2tlbi5zdGFydHNXaXRoKCJcIiIpKSB7Ci0gICAg
ICAgIGNvbnN1bWVCeXRlU3RyaW5nKGxpc3QpOwotICAgICAgfQotICAgICAgcmV0dXJuIEJ5dGVT
dHJpbmcuY29weUZyb20obGlzdCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTGlrZSB7QGxp
bmsgI2NvbnN1bWVCeXRlU3RyaW5nKCl9IGJ1dCBhZGRzIGVhY2ggdG9rZW4gb2YgdGhlIHN0cmlu
ZyB0bwotICAgICAqIHRoZSBnaXZlbiBsaXN0LiAgU3RyaW5nIGxpdGVyYWxzICh3aGV0aGVyIGJ5
dGVzIG9yIHRleHQpIG1heSBjb21lIGluCi0gICAgICogbXVsdGlwbGUgYWRqYWNlbnQgdG9rZW5z
IHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGNvbmNhdGVuYXRlZCwgbGlrZSBpbgotICAgICAqIEMg
b3IgUHl0aG9uLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBjb25zdW1lQnl0ZVN0cmluZyhM
aXN0PEJ5dGVTdHJpbmc+IGxpc3QpCi0gICAgICAgIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0g
ICAgICBmaW5hbCBjaGFyIHF1b3RlID0gY3VycmVudFRva2VuLmxlbmd0aCgpID4gMAotICAgICAg
ICAgID8gY3VycmVudFRva2VuLmNoYXJBdCgwKQotICAgICAgICAgIDogJ1wwJzsKLSAgICAgIGlm
IChxdW90ZSAhPSAnXCInICYmIHF1b3RlICE9ICdcJycpIHsKLSAgICAgICAgdGhyb3cgcGFyc2VF
eGNlcHRpb24oIkV4cGVjdGVkIHN0cmluZy4iKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGN1cnJl
bnRUb2tlbi5sZW5ndGgoKSA8IDIKLSAgICAgICAgICB8fCBjdXJyZW50VG9rZW4uY2hhckF0KGN1
cnJlbnRUb2tlbi5sZW5ndGgoKSAtIDEpICE9IHF1b3RlKSB7Ci0gICAgICAgIHRocm93IHBhcnNl
RXhjZXB0aW9uKCJTdHJpbmcgbWlzc2luZyBlbmRpbmcgcXVvdGUuIik7Ci0gICAgICB9Ci0KLSAg
ICAgIHRyeSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBlc2NhcGVkID0KLSAgICAgICAgICAgIGN1
cnJlbnRUb2tlbi5zdWJzdHJpbmcoMSwgY3VycmVudFRva2VuLmxlbmd0aCgpIC0gMSk7Ci0gICAg
ICAgIGZpbmFsIEJ5dGVTdHJpbmcgcmVzdWx0ID0gdW5lc2NhcGVCeXRlcyhlc2NhcGVkKTsKLSAg
ICAgICAgbmV4dFRva2VuKCk7Ci0gICAgICAgIGxpc3QuYWRkKHJlc3VsdCk7Ci0gICAgICB9IGNh
dGNoIChJbnZhbGlkRXNjYXBlU2VxdWVuY2VFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBw
YXJzZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoq
Ci0gICAgICogUmV0dXJucyBhIHtAbGluayBQYXJzZUV4Y2VwdGlvbn0gd2l0aCB0aGUgY3VycmVu
dCBsaW5lIGFuZCBjb2x1bW4KLSAgICAgKiBudW1iZXJzIGluIHRoZSBkZXNjcmlwdGlvbiwgc3Vp
dGFibGUgZm9yIHRocm93aW5nLgotICAgICAqLwotICAgIHB1YmxpYyBQYXJzZUV4Y2VwdGlvbiBw
YXJzZUV4Y2VwdGlvbihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICAgIC8vIE5vdGU6
ICBQZW9wbGUgZ2VuZXJhbGx5IHByZWZlciBvbmUtYmFzZWQgbGluZSBhbmQgY29sdW1uIG51bWJl
cnMuCi0gICAgICByZXR1cm4gbmV3IFBhcnNlRXhjZXB0aW9uKAotICAgICAgICBsaW5lICsgMSwg
Y29sdW1uICsgMSwgZGVzY3JpcHRpb24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVy
bnMgYSB7QGxpbmsgUGFyc2VFeGNlcHRpb259IHdpdGggdGhlIGxpbmUgYW5kIGNvbHVtbiBudW1i
ZXJzIG9mCi0gICAgICogdGhlIHByZXZpb3VzIHRva2VuIGluIHRoZSBkZXNjcmlwdGlvbiwgc3Vp
dGFibGUgZm9yIHRocm93aW5nLgotICAgICAqLwotICAgIHB1YmxpYyBQYXJzZUV4Y2VwdGlvbiBw
YXJzZUV4Y2VwdGlvblByZXZpb3VzVG9rZW4oCi0gICAgICAgIGZpbmFsIFN0cmluZyBkZXNjcmlw
dGlvbikgewotICAgICAgLy8gTm90ZTogIFBlb3BsZSBnZW5lcmFsbHkgcHJlZmVyIG9uZS1iYXNl
ZCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KLSAgICAgIHJldHVybiBuZXcgUGFyc2VFeGNlcHRp
b24oCi0gICAgICAgIHByZXZpb3VzTGluZSArIDEsIHByZXZpb3VzQ29sdW1uICsgMSwgZGVzY3Jp
cHRpb24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gYXBwcm9wcmlh
dGUge0BsaW5rIFBhcnNlRXhjZXB0aW9ufSBmb3IgdGhlIGdpdmVuCi0gICAgICoge0Bjb2RlIE51
bWJlckZvcm1hdEV4Y2VwdGlvbn0gd2hlbiB0cnlpbmcgdG8gcGFyc2UgYW4gaW50ZWdlci4KLSAg
ICAgKi8KLSAgICBwcml2YXRlIFBhcnNlRXhjZXB0aW9uIGludGVnZXJQYXJzZUV4Y2VwdGlvbigK
LSAgICAgICAgZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBw
YXJzZUV4Y2VwdGlvbigiQ291bGRuJ3QgcGFyc2UgaW50ZWdlcjogIiArIGUuZ2V0TWVzc2FnZSgp
KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIGFwcHJvcHJpYXRlIHtA
bGluayBQYXJzZUV4Y2VwdGlvbn0gZm9yIHRoZSBnaXZlbgotICAgICAqIHtAY29kZSBOdW1iZXJG
b3JtYXRFeGNlcHRpb259IHdoZW4gdHJ5aW5nIHRvIHBhcnNlIGEgZmxvYXQgb3IgZG91YmxlLgot
ICAgICAqLwotICAgIHByaXZhdGUgUGFyc2VFeGNlcHRpb24gZmxvYXRQYXJzZUV4Y2VwdGlvbihm
aW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgcmV0dXJuIHBhcnNlRXhjZXB0
aW9uKCJDb3VsZG4ndCBwYXJzZSBudW1iZXI6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHtAbGluayBVbmtub3duRmllbGRQYXJzZUV4Y2Vw
dGlvbn0gd2l0aCB0aGUgbGluZSBhbmQgY29sdW1uCi0gICAgICogbnVtYmVycyBvZiB0aGUgcHJl
dmlvdXMgdG9rZW4gaW4gdGhlIGRlc2NyaXB0aW9uLCBhbmQgdGhlIHVua25vd24gZmllbGQKLSAg
ICAgKiBuYW1lLCBzdWl0YWJsZSBmb3IgdGhyb3dpbmcuCi0gICAgICovCi0gICAgcHVibGljIFVu
a25vd25GaWVsZFBhcnNlRXhjZXB0aW9uIHVua25vd25GaWVsZFBhcnNlRXhjZXB0aW9uUHJldmlv
dXNUb2tlbigKLSAgICAgICAgZmluYWwgU3RyaW5nIHVua25vd25GaWVsZCwgZmluYWwgU3RyaW5n
IGRlc2NyaXB0aW9uKSB7Ci0gICAgICAvLyBOb3RlOiAgUGVvcGxlIGdlbmVyYWxseSBwcmVmZXIg
b25lLWJhc2VkIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzLgotICAgICAgcmV0dXJuIG5ldyBVbmtu
b3duRmllbGRQYXJzZUV4Y2VwdGlvbigKLSAgICAgICAgcHJldmlvdXNMaW5lICsgMSwgcHJldmlv
dXNDb2x1bW4gKyAxLCB1bmtub3duRmllbGQsIGRlc2NyaXB0aW9uKTsKLSAgICB9Ci0gIH0KLQot
ICAvKiogVGhyb3duIHdoZW4gcGFyc2luZyBhbiBpbnZhbGlkIHRleHQgZm9ybWF0IG1lc3NhZ2Uu
ICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgUGFyc2VFeGNlcHRpb24gZXh0ZW5kcyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0g
MzE5NjE4ODA2MDIyNTEwNzcwMkw7Ci0KLSAgICBwcml2YXRlIGZpbmFsIGludCBsaW5lOwotICAg
IHByaXZhdGUgZmluYWwgaW50IGNvbHVtbjsKLQotICAgIC8qKiBDcmVhdGUgYSBuZXcgaW5zdGFu
Y2UsIHdpdGggLTEgYXMgdGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzLiAqLwotICAgIHB1Ymxp
YyBQYXJzZUV4Y2VwdGlvbihmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotICAgICAgdGhpcygtMSwg
LTEsIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIG5ldyBpbnN0
YW5jZQotICAgICAqCi0gICAgICogQHBhcmFtIGxpbmUgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRo
ZSBwYXJzZSBlcnJvciBvY2N1cnJlZCwKLSAgICAgKiB1c2luZyAxLW9mZnNldC4KLSAgICAgKiBA
cGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gbnVtYmVyIHdoZXJlIHRoZSBwYXJzZXIgZXJyb3Igb2Nj
dXJyZWQsCi0gICAgICogdXNpbmcgMS1vZmZzZXQuCi0gICAgICovCi0gICAgcHVibGljIFBhcnNl
RXhjZXB0aW9uKGZpbmFsIGludCBsaW5lLCBmaW5hbCBpbnQgY29sdW1uLAotICAgICAgICBmaW5h
bCBTdHJpbmcgbWVzc2FnZSkgewotICAgICAgc3VwZXIoSW50ZWdlci50b1N0cmluZyhsaW5lKSAr
ICI6IiArIGNvbHVtbiArICI6ICIgKyBtZXNzYWdlKTsKLSAgICAgIHRoaXMubGluZSA9IGxpbmU7
Ci0gICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBS
ZXR1cm4gdGhlIGxpbmUgd2hlcmUgdGhlIHBhcnNlIGV4Y2VwdGlvbiBvY2N1cnJlZCwgb3IgLTEg
d2hlbgotICAgICAqIG5vbmUgaXMgcHJvdmlkZWQuIFRoZSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMg
MS1vZmZzZXQsIHNvIHRoZSBmaXJzdAotICAgICAqIGxpbmUgaXMgbGluZSAxLgotICAgICAqLwot
ICAgIHB1YmxpYyBpbnQgZ2V0TGluZSgpIHsKLSAgICAgIHJldHVybiBsaW5lOwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgY29sdW1uIHdoZXJlIHRoZSBwYXJzZSBleGNlcHRp
b24gb2NjdXJyZWQsIG9yIC0xIHdoZW4KLSAgICAgKiBub25lIGlzIHByb3ZpZGVkLiBUaGUgdmFs
dWUgaXMgc3BlY2lmaWVkIGFzIDEtb2Zmc2V0LCBzbyB0aGUgZmlyc3QKLSAgICAgKiBsaW5lIGlz
IGxpbmUgMS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldENvbHVtbigpIHsKLSAgICAgIHJl
dHVybiBjb2x1bW47Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRocm93biB3aGVuIGVuY291
bnRlcmluZyBhbiB1bmtub3duIGZpZWxkIHdoaWxlIHBhcnNpbmcKLSAgICogYSB0ZXh0IGZvcm1h
dCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBVbmtub3duRmllbGRQYXJz
ZUV4Y2VwdGlvbiBleHRlbmRzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICBwcml2YXRlIGZpbmFsIFN0
cmluZyB1bmtub3duRmllbGQ7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFu
Y2UsIHdpdGggLTEgYXMgdGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzLCBhbmQgYW4KLSAgICAg
KiBlbXB0eSB1bmtub3duIGZpZWxkIG5hbWUuCi0gICAgICovCi0gICAgcHVibGljIFVua25vd25G
aWVsZFBhcnNlRXhjZXB0aW9uKGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgICB0aGlzKC0x
LCAtMSwgIiIsIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIG5l
dyBpbnN0YW5jZQotICAgICAqCi0gICAgICogQHBhcmFtIGxpbmUgdGhlIGxpbmUgbnVtYmVyIHdo
ZXJlIHRoZSBwYXJzZSBlcnJvciBvY2N1cnJlZCwKLSAgICAgKiB1c2luZyAxLW9mZnNldC4KLSAg
ICAgKiBAcGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gbnVtYmVyIHdoZXJlIHRoZSBwYXJzZXIgZXJy
b3Igb2NjdXJyZWQsCi0gICAgICogdXNpbmcgMS1vZmZzZXQuCi0gICAgICogQHBhcmFtIHVua25v
d25GaWVsZCB0aGUgbmFtZSBvZiB0aGUgdW5rbm93biBmaWVsZCBmb3VuZCB3aGlsZSBwYXJzaW5n
LgotICAgICAqLwotICAgIHB1YmxpYyBVbmtub3duRmllbGRQYXJzZUV4Y2VwdGlvbihmaW5hbCBp
bnQgbGluZSwgZmluYWwgaW50IGNvbHVtbiwKLSAgICAgICAgZmluYWwgU3RyaW5nIHVua25vd25G
aWVsZCwgZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICAgIHN1cGVyKGxpbmUsIGNvbHVtbiwg
bWVzc2FnZSk7Ci0gICAgICB0aGlzLnVua25vd25GaWVsZCA9IHVua25vd25GaWVsZDsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHVua25vd24gZmllbGQg
ZW5jb3VudGVyZWQgd2hpbGUgcGFyc2luZyB0aGUKLSAgICAgKiBwcm90b2NvbCBidWZmZXIgc3Ry
aW5nLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VW5rbm93bkZpZWxkKCkgewotICAg
ICAgcmV0dXJuIHVua25vd25GaWVsZDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBQYXJzZXIgUEFSU0VSID0gUGFyc2VyLm5ld0J1aWxkZXIoKS5idWlsZCgpOwotCi0gIC8q
KgotICAgKiBSZXR1cm4gYSB7QGxpbmsgUGFyc2VyfSBpbnN0YW5jZSB3aGljaCBjYW4gcGFyc2Ug
dGV4dC1mb3JtYXQKLSAgICogbWVzc2FnZXMuIFRoZSByZXR1cm5lZCBpbnN0YW5jZSBpcyB0aHJl
YWQtc2FmZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgUGFyc2VyIGdldFBhcnNlcigpIHsKLSAg
ICByZXR1cm4gUEFSU0VSOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgdGV4dC1mb3JtYXQg
bWVzc2FnZSBmcm9tIHtAY29kZSBpbnB1dH0gYW5kIG1lcmdlIHRoZSBjb250ZW50cwotICAgKiBp
bnRvIHtAY29kZSBidWlsZGVyfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtZXJnZShm
aW5hbCBSZWFkYWJsZSBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE1l
c3NhZ2UuQnVpbGRlciBidWlsZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICBQQVJTRVIubWVyZ2UoaW5wdXQsIGJ1aWxkZXIpOwotICB9Ci0K
LSAgLyoqCi0gICAqIFBhcnNlIGEgdGV4dC1mb3JtYXQgbWVzc2FnZSBmcm9tIHtAY29kZSBpbnB1
dH0gYW5kIG1lcmdlIHRoZSBjb250ZW50cwotICAgKiBpbnRvIHtAY29kZSBidWlsZGVyfS4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtZXJnZShmaW5hbCBDaGFyU2VxdWVuY2UgaW5wdXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBNZXNzYWdlLkJ1aWxkZXIgYnVpbGRl
cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0g
ICAgUEFSU0VSLm1lcmdlKGlucHV0LCBidWlsZGVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJz
ZSBhIHRleHQtZm9ybWF0IG1lc3NhZ2UgZnJvbSB7QGNvZGUgaW5wdXR9IGFuZCBtZXJnZSB0aGUg
Y29udGVudHMKLSAgICogaW50byB7QGNvZGUgYnVpbGRlcn0uICBFeHRlbnNpb25zIHdpbGwgYmUg
cmVjb2duaXplZCBpZiB0aGV5IGFyZQotICAgKiByZWdpc3RlcmVkIGluIHtAY29kZSBleHRlbnNp
b25SZWdpc3RyeX0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWVyZ2UoZmluYWwgUmVh
ZGFibGUgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBFeHRlbnNpb25S
ZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bmFsIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBQQVJTRVIubWVyZ2UoaW5wdXQsIGV4dGVuc2lvblJl
Z2lzdHJ5LCBidWlsZGVyKTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFBhcnNlIGEgdGV4dC1mb3Jt
YXQgbWVzc2FnZSBmcm9tIHtAY29kZSBpbnB1dH0gYW5kIG1lcmdlIHRoZSBjb250ZW50cwotICAg
KiBpbnRvIHtAY29kZSBidWlsZGVyfS4gIEV4dGVuc2lvbnMgd2lsbCBiZSByZWNvZ25pemVkIGlm
IHRoZXkgYXJlCi0gICAqIHJlZ2lzdGVyZWQgaW4ge0Bjb2RlIGV4dGVuc2lvblJlZ2lzdHJ5fS4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtZXJnZShmaW5hbCBDaGFyU2VxdWVuY2UgaW5w
dXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBFeHRlbnNpb25SZWdpc3RyeSBl
eHRlbnNpb25SZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE1lc3Nh
Z2UuQnVpbGRlciBidWlsZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFBh
cnNlRXhjZXB0aW9uIHsKLSAgICBQQVJTRVIubWVyZ2UoaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5
LCBidWlsZGVyKTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFBhcnNlciBmb3IgdGV4dC1mb3JtYXQg
cHJvdG8yIGluc3RhbmNlcy4gVGhpcyBjbGFzcyBpcyB0aHJlYWQtc2FmZS4KLSAgICogVGhlIGlt
cGxlbWVudGF0aW9uIGxhcmdlbHkgZm9sbG93cyBnb29nbGUvcHJvdG9idWYvdGV4dF9mb3JtYXQu
Y2MuCi0gICAqCi0gICAqIDxwPlVzZSB7QGxpbmsgVGV4dEZvcm1hdCNnZXRQYXJzZXIoKX0gdG8g
b2J0YWluIHRoZSBkZWZhdWx0IHBhcnNlciwgb3IKLSAgICoge0BsaW5rIEJ1aWxkZXJ9IHRvIGNv
bnRyb2wgdGhlIHBhcnNlciBiZWhhdmlvci4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3Mg
UGFyc2VyIHsKLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIGlmIHJlcGVhdGVkIHZhbHVlcyBm
b3Igbm9uLXJlcGVhdGVkIGZpZWxkcyBhbmQKLSAgICAgKiBvbmVvZnMgYXJlIHBlcm1pdHRlZC4g
Rm9yIGV4YW1wbGUsIGdpdmVuIHJlcXVpcmVkL29wdGlvbmFsIGZpZWxkICJmb28iCi0gICAgICog
YW5kIGEgb25lb2YgY29udGFpbmluZyAiYmF6IiBhbmQgInF1eCI6Ci0gICAgICogPHVsPgotICAg
ICAqIDxsaT4iZm9vOiAxIGZvbzogMiIKLSAgICAgKiA8bGk+ImJhejogMSBxdXg6IDIiCi0gICAg
ICogPGxpPm1lcmdpbmcgImZvbzogMiIgaW50byBhIHByb3RvIGluIHdoaWNoIGZvbyBpcyBhbHJl
YWR5IHNldCwgb3IKLSAgICAgKiA8bGk+bWVyZ2luZyAicXV4OiAyIiBpbnRvIGEgcHJvdG8gaW4g
d2hpY2ggYmF6IGlzIGFscmVhZHkgc2V0LgotICAgICAqIDwvdWw+Ci0gICAgICovCi0gICAgcHVi
bGljIGVudW0gU2luZ3VsYXJPdmVyd3JpdGVQb2xpY3kgewotICAgICAgLyoqIFRoZSBsYXN0IHZh
bHVlIGlzIHJldGFpbmVkLiAqLwotICAgICAgQUxMT1dfU0lOR1VMQVJfT1ZFUldSSVRFUywKLSAg
ICAgIC8qKiBBbiBlcnJvciBpcyBpc3N1ZWQuICovCi0gICAgICBGT1JCSURfU0lOR1VMQVJfT1ZF
UldSSVRFUwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBhbGxvd1Vua25vd25G
aWVsZHM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTaW5ndWxhck92ZXJ3cml0ZVBvbGljeSBzaW5ndWxh
ck92ZXJ3cml0ZVBvbGljeTsKLSAgICBwcml2YXRlIFRleHRGb3JtYXRQYXJzZUluZm9UcmVlLkJ1
aWxkZXIgcGFyc2VJbmZvVHJlZUJ1aWxkZXI7Ci0KLSAgICBwcml2YXRlIFBhcnNlcigKLSAgICAg
ICAgYm9vbGVhbiBhbGxvd1Vua25vd25GaWVsZHMsIFNpbmd1bGFyT3ZlcndyaXRlUG9saWN5IHNp
bmd1bGFyT3ZlcndyaXRlUG9saWN5LAotICAgICAgICBUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZS5C
dWlsZGVyIHBhcnNlSW5mb1RyZWVCdWlsZGVyKSB7Ci0gICAgICB0aGlzLmFsbG93VW5rbm93bkZp
ZWxkcyA9IGFsbG93VW5rbm93bkZpZWxkczsKLSAgICAgIHRoaXMuc2luZ3VsYXJPdmVyd3JpdGVQ
b2xpY3kgPSBzaW5ndWxhck92ZXJ3cml0ZVBvbGljeTsKLSAgICAgIHRoaXMucGFyc2VJbmZvVHJl
ZUJ1aWxkZXIgPSBwYXJzZUluZm9UcmVlQnVpbGRlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBCdWlsZGVyfS4KLSAgICAgKi8KLSAg
ICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgbmV3QnVpbGRlcigpIHsKLSAgICAgIHJldHVybiBuZXcg
QnVpbGRlcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkZXIgdGhhdCBjYW4gYmUg
dXNlZCB0byBvYnRhaW4gbmV3IGluc3RhbmNlcyBvZiB7QGxpbmsgUGFyc2VyfS4KLSAgICAgKi8K
LSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewotICAgICAgcHJpdmF0ZSBib29sZWFu
IGFsbG93VW5rbm93bkZpZWxkcyA9IGZhbHNlOwotICAgICAgcHJpdmF0ZSBTaW5ndWxhck92ZXJ3
cml0ZVBvbGljeSBzaW5ndWxhck92ZXJ3cml0ZVBvbGljeSA9Ci0gICAgICAgICAgU2luZ3VsYXJP
dmVyd3JpdGVQb2xpY3kuQUxMT1dfU0lOR1VMQVJfT1ZFUldSSVRFUzsKLSAgICAgIHByaXZhdGUg
VGV4dEZvcm1hdFBhcnNlSW5mb1RyZWUuQnVpbGRlciBwYXJzZUluZm9UcmVlQnVpbGRlciA9IG51
bGw7Ci0KLQotICAgICAgLyoqCi0gICAgICAgKiBTZXRzIHBhcnNlciBiZWhhdmlvciB3aGVuIGEg
bm9uLXJlcGVhdGVkIGZpZWxkIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UuCi0gICAgICAgKi8KLSAg
ICAgIHB1YmxpYyBCdWlsZGVyIHNldFNpbmd1bGFyT3ZlcndyaXRlUG9saWN5KFNpbmd1bGFyT3Zl
cndyaXRlUG9saWN5IHApIHsKLSAgICAgICAgdGhpcy5zaW5ndWxhck92ZXJ3cml0ZVBvbGljeSA9
IHA7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgQnVpbGRl
ciBzZXRQYXJzZUluZm9UcmVlQnVpbGRlcigKLSAgICAgICAgICBUZXh0Rm9ybWF0UGFyc2VJbmZv
VHJlZS5CdWlsZGVyIHBhcnNlSW5mb1RyZWVCdWlsZGVyKSB7Ci0gICAgICAgIHRoaXMucGFyc2VJ
bmZvVHJlZUJ1aWxkZXIgPSBwYXJzZUluZm9UcmVlQnVpbGRlcjsKLSAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBQYXJzZXIgYnVpbGQoKSB7Ci0gICAgICAgIHJl
dHVybiBuZXcgUGFyc2VyKAotICAgICAgICAgICAgYWxsb3dVbmtub3duRmllbGRzLCBzaW5ndWxh
ck92ZXJ3cml0ZVBvbGljeSwgcGFyc2VJbmZvVHJlZUJ1aWxkZXIpOwotICAgICAgfQotICAgIH0K
LQotICAgIC8qKgotICAgICAqIFBhcnNlIGEgdGV4dC1mb3JtYXQgbWVzc2FnZSBmcm9tIHtAY29k
ZSBpbnB1dH0gYW5kIG1lcmdlIHRoZSBjb250ZW50cwotICAgICAqIGludG8ge0Bjb2RlIGJ1aWxk
ZXJ9LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG1lcmdlKGZpbmFsIFJlYWRhYmxlIGlucHV0
LAotICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKQot
ICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBtZXJnZShp
bnB1dCwgRXh0ZW5zaW9uUmVnaXN0cnkuZ2V0RW1wdHlSZWdpc3RyeSgpLCBidWlsZGVyKTsKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBQYXJzZSBhIHRleHQtZm9ybWF0IG1lc3NhZ2UgZnJvbSB7
QGNvZGUgaW5wdXR9IGFuZCBtZXJnZSB0aGUgY29udGVudHMKLSAgICAgKiBpbnRvIHtAY29kZSBi
dWlsZGVyfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtZXJnZShmaW5hbCBDaGFyU2VxdWVu
Y2UgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgZmluYWwgTWVzc2FnZS5CdWlsZGVyIGJ1
aWxkZXIpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAg
ICAgIG1lcmdlKGlucHV0LCBFeHRlbnNpb25SZWdpc3RyeS5nZXRFbXB0eVJlZ2lzdHJ5KCksIGJ1
aWxkZXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlIGEgdGV4dC1mb3JtYXQgbWVz
c2FnZSBmcm9tIHtAY29kZSBpbnB1dH0gYW5kIG1lcmdlIHRoZSBjb250ZW50cwotICAgICAqIGlu
dG8ge0Bjb2RlIGJ1aWxkZXJ9LiAgRXh0ZW5zaW9ucyB3aWxsIGJlIHJlY29nbml6ZWQgaWYgdGhl
eSBhcmUKLSAgICAgKiByZWdpc3RlcmVkIGluIHtAY29kZSBleHRlbnNpb25SZWdpc3RyeX0uCi0g
ICAgICovCi0gICAgcHVibGljIHZvaWQgbWVyZ2UoZmluYWwgUmVhZGFibGUgaW5wdXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgZmluYWwgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0
cnksCi0gICAgICAgICAgICAgICAgICAgICAgZmluYWwgTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIp
Ci0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIC8vIFJl
YWQgdGhlIGVudGlyZSBpbnB1dCB0byBhIFN0cmluZyB0aGVuIHBhcnNlIHRoYXQuCi0KLSAgICAg
IC8vIElmIFN0cmVhbVRva2VuaXplciB3ZXJlIG5vdCBxdWl0ZSBzbyBjcmlwcGxlZCwgb3IgaWYg
dGhlcmUgd2VyZSBhIGtpbmQKLSAgICAgIC8vIG9mIFJlYWRlciB0aGF0IGNvdWxkIHJlYWQgaW4g
Y2h1bmtzIHRoYXQgbWF0Y2ggc29tZSBwYXJ0aWN1bGFyIHJlZ2V4LAotICAgICAgLy8gb3IgaWYg
d2Ugd2FudGVkIHRvIHdyaXRlIGEgY3VzdG9tIFJlYWRlciB0byB0b2tlbml6ZSBvdXIgc3RyZWFt
LCB0aGVuCi0gICAgICAvLyB3ZSB3b3VsZCBub3QgaGF2ZSB0byByZWFkIHRvIG9uZSBiaWcgU3Ry
aW5nLiAgQWxhcywgbm9uZSBvZiB0aGVzZSBpcwotICAgICAgLy8gdGhlIGNhc2UuICBPaCB3ZWxs
LgotCi0gICAgICBtZXJnZSh0b1N0cmluZ0J1aWxkZXIoaW5wdXQpLCBleHRlbnNpb25SZWdpc3Ry
eSwgYnVpbGRlcik7Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVG
RkVSX1NJWkUgPSA0MDk2OwotCi0gICAgLy8gVE9ETyhjaHJpc24pOiBTZWUgaWYgd29ya2luZyBh
cm91bmQgamF2YS5pby5SZWFkZXIjcmVhZChDaGFyQnVmZmVyKQotICAgIC8vIG92ZXJoZWFkIGlz
IHdvcnRod2hpbGUKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdCdWlsZGVyIHRvU3RyaW5nQnVp
bGRlcihmaW5hbCBSZWFkYWJsZSBpbnB1dCkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsK
LSAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgdGV4dCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0g
ICAgICBmaW5hbCBDaGFyQnVmZmVyIGJ1ZmZlciA9IENoYXJCdWZmZXIuYWxsb2NhdGUoQlVGRkVS
X1NJWkUpOwotICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgZmluYWwgaW50IG4gPSBpbnB1
dC5yZWFkKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChuID09IC0xKSB7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgYnVmZmVyLmZsaXAoKTsKLSAgICAgICAgdGV4dC5hcHBlbmQo
YnVmZmVyLCAwLCBuKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0ZXh0OwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIFBhcnNlIGEgdGV4dC1mb3JtYXQgbWVzc2FnZSBmcm9tIHtAY29kZSBpbnB1
dH0gYW5kIG1lcmdlIHRoZSBjb250ZW50cwotICAgICAqIGludG8ge0Bjb2RlIGJ1aWxkZXJ9LiAg
RXh0ZW5zaW9ucyB3aWxsIGJlIHJlY29nbml6ZWQgaWYgdGhleSBhcmUKLSAgICAgKiByZWdpc3Rl
cmVkIGluIHtAY29kZSBleHRlbnNpb25SZWdpc3RyeX0uCi0gICAgICovCi0gICAgcHVibGljIHZv
aWQgbWVyZ2UoZmluYWwgQ2hhclNlcXVlbmNlIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAg
IGZpbmFsIEV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5LAotICAgICAgICAgICAg
ICAgICAgICAgIGZpbmFsIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKQotICAgICAgICAgICAgICAg
ICAgICAgIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICBmaW5hbCBUb2tlbml6ZXIgdG9r
ZW5pemVyID0gbmV3IFRva2VuaXplcihpbnB1dCk7Ci0gICAgICBNZXNzYWdlUmVmbGVjdGlvbi5C
dWlsZGVyQWRhcHRlciB0YXJnZXQgPQotICAgICAgICAgIG5ldyBNZXNzYWdlUmVmbGVjdGlvbi5C
dWlsZGVyQWRhcHRlcihidWlsZGVyKTsKLQotICAgICAgd2hpbGUgKCF0b2tlbml6ZXIuYXRFbmQo
KSkgewotICAgICAgICBtZXJnZUZpZWxkKHRva2VuaXplciwgZXh0ZW5zaW9uUmVnaXN0cnksIHRh
cmdldCk7Ci0gICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBQYXJzZSBhIHNpbmds
ZSBmaWVsZCBmcm9tIHtAY29kZSB0b2tlbml6ZXJ9IGFuZCBtZXJnZSBpdCBpbnRvCi0gICAgICog
e0Bjb2RlIGJ1aWxkZXJ9LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBtZXJnZUZpZWxkKGZp
bmFsIFRva2VuaXplciB0b2tlbml6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlu
YWwgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmluYWwgTWVzc2FnZVJlZmxlY3Rpb24uTWVyZ2VUYXJnZXQgdGFyZ2V0KQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAg
ICBtZXJnZUZpZWxkKHRva2VuaXplciwgZXh0ZW5zaW9uUmVnaXN0cnksIHRhcmdldCwgcGFyc2VJ
bmZvVHJlZUJ1aWxkZXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlIGEgc2luZ2xl
IGZpZWxkIGZyb20ge0Bjb2RlIHRva2VuaXplcn0gYW5kIG1lcmdlIGl0IGludG8KLSAgICAgKiB7
QGNvZGUgYnVpbGRlcn0uCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIG1lcmdlRmllbGQoZmlu
YWwgVG9rZW5pemVyIHRva2VuaXplciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5h
bCBFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaW5hbCBNZXNzYWdlUmVmbGVjdGlvbi5NZXJnZVRhcmdldCB0YXJnZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWUuQnVpbGRl
ciBwYXJzZVRyZWVCdWlsZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBQ
YXJzZUV4Y2VwdGlvbiB7Ci0gICAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBudWxsOwotICAg
ICAgaW50IHN0YXJ0TGluZSA9IHRva2VuaXplci5nZXRMaW5lKCk7Ci0gICAgICBpbnQgc3RhcnRD
b2x1bW4gPSB0b2tlbml6ZXIuZ2V0Q29sdW1uKCk7Ci0gICAgICBmaW5hbCBEZXNjcmlwdG9yIHR5
cGUgPSB0YXJnZXQuZ2V0RGVzY3JpcHRvckZvclR5cGUoKTsKLSAgICAgIEV4dGVuc2lvblJlZ2lz
dHJ5LkV4dGVuc2lvbkluZm8gZXh0ZW5zaW9uID0gbnVsbDsKLQotICAgICAgaWYgKHRva2VuaXpl
ci50cnlDb25zdW1lKCJbIikpIHsKLSAgICAgICAgLy8gQW4gZXh0ZW5zaW9uLgotICAgICAgICBm
aW5hbCBTdHJpbmdCdWlsZGVyIG5hbWUgPQotICAgICAgICAgICAgbmV3IFN0cmluZ0J1aWxkZXIo
dG9rZW5pemVyLmNvbnN1bWVJZGVudGlmaWVyKCkpOwotICAgICAgICB3aGlsZSAodG9rZW5pemVy
LnRyeUNvbnN1bWUoIi4iKSkgewotICAgICAgICAgIG5hbWUuYXBwZW5kKCcuJyk7Ci0gICAgICAg
ICAgbmFtZS5hcHBlbmQodG9rZW5pemVyLmNvbnN1bWVJZGVudGlmaWVyKCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZXh0ZW5zaW9uID0gdGFyZ2V0LmZpbmRFeHRlbnNpb25CeU5hbWUoCi0gICAg
ICAgICAgICBleHRlbnNpb25SZWdpc3RyeSwgbmFtZS50b1N0cmluZygpKTsKLQotICAgICAgICBp
ZiAoZXh0ZW5zaW9uID09IG51bGwpIHsKLSAgICAgICAgICBpZiAoIWFsbG93VW5rbm93bkZpZWxk
cykgewotICAgICAgICAgICAgdGhyb3cgdG9rZW5pemVyLnBhcnNlRXhjZXB0aW9uUHJldmlvdXNU
b2tlbigKLSAgICAgICAgICAgICAgIkV4dGVuc2lvbiBcIiIgKyBuYW1lICsgIlwiIG5vdCBmb3Vu
ZCBpbiB0aGUgRXh0ZW5zaW9uUmVnaXN0cnkuIik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGxvZ2dlci53YXJuaW5nKAotICAgICAgICAgICAgICAiRXh0ZW5zaW9uIFwiIiArIG5h
bWUgKyAiXCIgbm90IGZvdW5kIGluIHRoZSBFeHRlbnNpb25SZWdpc3RyeS4iKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGV4dGVuc2lvbi5kZXNjcmlwdG9y
LmdldENvbnRhaW5pbmdUeXBlKCkgIT0gdHlwZSkgewotICAgICAgICAgICAgdGhyb3cgdG9rZW5p
emVyLnBhcnNlRXhjZXB0aW9uUHJldmlvdXNUb2tlbigKLSAgICAgICAgICAgICAgIkV4dGVuc2lv
biBcIiIgKyBuYW1lICsgIlwiIGRvZXMgbm90IGV4dGVuZCBtZXNzYWdlIHR5cGUgXCIiCi0gICAg
ICAgICAgICAgICsgdHlwZS5nZXRGdWxsTmFtZSgpICsgIlwiLiIpOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBmaWVsZCA9IGV4dGVuc2lvbi5kZXNjcmlwdG9yOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdG9rZW5pemVyLmNvbnN1bWUoIl0iKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbmFs
IFN0cmluZyBuYW1lID0gdG9rZW5pemVyLmNvbnN1bWVJZGVudGlmaWVyKCk7Ci0gICAgICAgIGZp
ZWxkID0gdHlwZS5maW5kRmllbGRCeU5hbWUobmFtZSk7Ci0KLSAgICAgICAgLy8gR3JvdXAgbmFt
ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGNhcGl0YWxpemVkIGFzIHRoZXkgYXBwZWFyIGluIHRoZQot
ICAgICAgICAvLyAucHJvdG8gZmlsZSwgd2hpY2ggYWN0dWFsbHkgbWF0Y2hlcyB0aGVpciB0eXBl
IG5hbWVzLCBub3QgdGhlaXIgZmllbGQKLSAgICAgICAgLy8gbmFtZXMuCi0gICAgICAgIGlmIChm
aWVsZCA9PSBudWxsKSB7Ci0gICAgICAgICAgLy8gRXhwbGljaXRseSBzcGVjaWZ5IFVTIGxvY2Fs
ZSBzbyB0aGF0IHRoaXMgY29kZSBkb2VzIG5vdCBicmVhayB3aGVuCi0gICAgICAgICAgLy8gZXhl
Y3V0aW5nIGluIFR1cmtleS4KLSAgICAgICAgICBmaW5hbCBTdHJpbmcgbG93ZXJOYW1lID0gbmFt
ZS50b0xvd2VyQ2FzZShMb2NhbGUuVVMpOwotICAgICAgICAgIGZpZWxkID0gdHlwZS5maW5kRmll
bGRCeU5hbWUobG93ZXJOYW1lKTsKLSAgICAgICAgICAvLyBJZiB0aGUgY2FzZS1pbnNlbnNpdGl2
ZSBtYXRjaCB3b3JrZWQgYnV0IHRoZSBmaWVsZCBpcyBOT1QgYSBncm91cCwKLSAgICAgICAgICBp
ZiAoZmllbGQgIT0gbnVsbCAmJiBmaWVsZC5nZXRUeXBlKCkgIT0gRmllbGREZXNjcmlwdG9yLlR5
cGUuR1JPVVApIHsKLSAgICAgICAgICAgIGZpZWxkID0gbnVsbDsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gQWdhaW4sIHNwZWNpYWwtY2FzZSBncm91cCBuYW1lcyBhcyBkZXNj
cmliZWQgYWJvdmUuCi0gICAgICAgIGlmIChmaWVsZCAhPSBudWxsICYmIGZpZWxkLmdldFR5cGUo
KSA9PSBGaWVsZERlc2NyaXB0b3IuVHlwZS5HUk9VUAotICAgICAgICAgICAgJiYgIWZpZWxkLmdl
dE1lc3NhZ2VUeXBlKCkuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgIGZpZWxk
ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmaWVsZCA9PSBudWxsKSB7Ci0gICAg
ICAgICAgaWYgKCFhbGxvd1Vua25vd25GaWVsZHMpIHsKLSAgICAgICAgICAgIHRocm93IHRva2Vu
aXplci51bmtub3duRmllbGRQYXJzZUV4Y2VwdGlvblByZXZpb3VzVG9rZW4oCi0gICAgICAgICAg
ICAgIG5hbWUsCi0gICAgICAgICAgICAgICJNZXNzYWdlIHR5cGUgXCIiICsgdHlwZS5nZXRGdWxs
TmFtZSgpCi0gICAgICAgICAgICAgICsgIlwiIGhhcyBubyBmaWVsZCBuYW1lZCBcIiIgKyBuYW1l
ICsgIlwiLiIpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2dnZXIud2Fybmlu
ZygKLSAgICAgICAgICAgICAgIk1lc3NhZ2UgdHlwZSBcIiIgKyB0eXBlLmdldEZ1bGxOYW1lKCkK
LSAgICAgICAgICAgICAgKyAiXCIgaGFzIG5vIGZpZWxkIG5hbWVkIFwiIiArIG5hbWUgKyAiXCIu
Iik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNraXBzIHVu
a25vd24gZmllbGRzLgotICAgICAgaWYgKGZpZWxkID09IG51bGwpIHsKLSAgICAgICAgLy8gVHJ5
IHRvIGd1ZXNzIHRoZSB0eXBlIG9mIHRoaXMgZmllbGQuCi0gICAgICAgIC8vIElmIHRoaXMgZmll
bGQgaXMgbm90IGEgbWVzc2FnZSwgdGhlcmUgc2hvdWxkIGJlIGEgIjoiIGJldHdlZW4gdGhlCi0g
ICAgICAgIC8vIGZpZWxkIG5hbWUgYW5kIHRoZSBmaWVsZCB2YWx1ZSBhbmQgYWxzbyB0aGUgZmll
bGQgdmFsdWUgc2hvdWxkIG5vdAotICAgICAgICAvLyBzdGFydCB3aXRoICJ7IiBvciAiPCIgd2hp
Y2ggaW5kaWNhdGVzIHRoZSBiZWdpbm5pbmcgb2YgYSBtZXNzYWdlIGJvZHkuCi0gICAgICAgIC8v
IElmIHRoZXJlIGlzIG5vICI6IiBvciB0aGVyZSBpcyBhICJ7IiBvciAiPCIgYWZ0ZXIgIjoiLCB0
aGlzIGZpZWxkIGhhcwotICAgICAgICAvLyB0byBiZSBhIG1lc3NhZ2Ugb3IgdGhlIGlucHV0IGlz
IGlsbC1mb3JtZWQuCi0gICAgICAgIGlmICh0b2tlbml6ZXIudHJ5Q29uc3VtZSgiOiIpCi0gICAg
ICAgICAgICAmJiAhdG9rZW5pemVyLmxvb2tpbmdBdCgieyIpCi0gICAgICAgICAgICAmJiAhdG9r
ZW5pemVyLmxvb2tpbmdBdCgiPCIpKSB7Ci0gICAgICAgICAgc2tpcEZpZWxkVmFsdWUodG9rZW5p
emVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBza2lwRmllbGRNZXNzYWdlKHRva2Vu
aXplcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBI
YW5kbGUgcG90ZW50aWFsICc6Jy4KLSAgICAgIGlmIChmaWVsZC5nZXRKYXZhVHlwZSgpID09IEZp
ZWxkRGVzY3JpcHRvci5KYXZhVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgIHRva2VuaXplci50cnlD
b25zdW1lKCI6Iik7ICAvLyBvcHRpb25hbAotICAgICAgICBpZiAocGFyc2VUcmVlQnVpbGRlciAh
PSBudWxsKSB7Ci0gICAgICAgICAgVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWUuQnVpbGRlciBjaGls
ZFBhcnNlVHJlZUJ1aWxkZXIgPQotICAgICAgICAgICAgICBwYXJzZVRyZWVCdWlsZGVyLmdldEJ1
aWxkZXJGb3JTdWJNZXNzYWdlRmllbGQoZmllbGQpOwotICAgICAgICAgIGNvbnN1bWVGaWVsZFZh
bHVlcyh0b2tlbml6ZXIsIGV4dGVuc2lvblJlZ2lzdHJ5LCB0YXJnZXQsIGZpZWxkLCBleHRlbnNp
b24sCi0gICAgICAgICAgICAgIGNoaWxkUGFyc2VUcmVlQnVpbGRlcik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgY29uc3VtZUZpZWxkVmFsdWVzKHRva2VuaXplciwgZXh0ZW5zaW9uUmVn
aXN0cnksIHRhcmdldCwgZmllbGQsIGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgcGFyc2VUcmVl
QnVpbGRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRva2VuaXplci5j
b25zdW1lKCI6Iik7ICAvLyByZXF1aXJlZAotICAgICAgICBjb25zdW1lRmllbGRWYWx1ZXMoCi0g
ICAgICAgICAgICB0b2tlbml6ZXIsIGV4dGVuc2lvblJlZ2lzdHJ5LCB0YXJnZXQsIGZpZWxkLCBl
eHRlbnNpb24sIHBhcnNlVHJlZUJ1aWxkZXIpOwotICAgICAgfQotCi0gICAgICBpZiAocGFyc2VU
cmVlQnVpbGRlciAhPSBudWxsKSB7Ci0gICAgICAgIHBhcnNlVHJlZUJ1aWxkZXIuc2V0TG9jYXRp
b24oCi0gICAgICAgICAgICBmaWVsZCwgVGV4dEZvcm1hdFBhcnNlTG9jYXRpb24uY3JlYXRlKHN0
YXJ0TGluZSwgc3RhcnRDb2x1bW4pKTsKLSAgICAgIH0KLQotICAgICAgLy8gRm9yIGhpc3Rvcmlj
YWwgcmVhc29ucywgZmllbGRzIG1heSBvcHRpb25hbGx5IGJlIHNlcGFyYXRlZCBieSBjb21tYXMg
b3IKLSAgICAgIC8vIHNlbWljb2xvbnMuCi0gICAgICBpZiAoIXRva2VuaXplci50cnlDb25zdW1l
KCI7IikpIHsKLSAgICAgICAgdG9rZW5pemVyLnRyeUNvbnN1bWUoIiwiKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBQYXJzZSBhIG9uZSBvciBtb3JlIGZpZWxkIHZhbHVlcyBm
cm9tIHtAY29kZSB0b2tlbml6ZXJ9IGFuZCBtZXJnZSBpdCBpbnRvCi0gICAgICoge0Bjb2RlIGJ1
aWxkZXJ9LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBjb25zdW1lRmllbGRWYWx1ZXMoCi0g
ICAgICAgIGZpbmFsIFRva2VuaXplciB0b2tlbml6ZXIsCi0gICAgICAgIGZpbmFsIEV4dGVuc2lv
blJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5LAotICAgICAgICBmaW5hbCBNZXNzYWdlUmVmbGVj
dGlvbi5NZXJnZVRhcmdldCB0YXJnZXQsCi0gICAgICAgIGZpbmFsIEZpZWxkRGVzY3JpcHRvciBm
aWVsZCwKLSAgICAgICAgZmluYWwgRXh0ZW5zaW9uUmVnaXN0cnkuRXh0ZW5zaW9uSW5mbyBleHRl
bnNpb24sCi0gICAgICAgIGZpbmFsIFRleHRGb3JtYXRQYXJzZUluZm9UcmVlLkJ1aWxkZXIgcGFy
c2VUcmVlQnVpbGRlcikKLSAgICAgICAgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgIC8v
IFN1cHBvcnQgc3BlY2lmeWluZyByZXBlYXRlZCBmaWVsZCB2YWx1ZXMgYXMgYSBjb21tYS1zZXBh
cmF0ZWQgbGlzdC4KLSAgICAgIC8vIEV4LiJmb286IFsxLCAyLCAzXSIKLSAgICAgIGlmIChmaWVs
ZC5pc1JlcGVhdGVkKCkgJiYgdG9rZW5pemVyLnRyeUNvbnN1bWUoIlsiKSkgewotICAgICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICAgIGNvbnN1bWVGaWVsZFZhbHVlKHRva2VuaXplciwgZXh0
ZW5zaW9uUmVnaXN0cnksIHRhcmdldCwgZmllbGQsIGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAg
cGFyc2VUcmVlQnVpbGRlcik7Ci0gICAgICAgICAgaWYgKHRva2VuaXplci50cnlDb25zdW1lKCJd
IikpIHsKLSAgICAgICAgICAgIC8vIEVuZCBvZiBsaXN0LgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIHRva2VuaXplci5jb25zdW1lKCIsIik7Ci0gICAgICAgIH0K
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN1bWVGaWVsZFZhbHVlKAotICAgICAgICAgICAg
dG9rZW5pemVyLCBleHRlbnNpb25SZWdpc3RyeSwgdGFyZ2V0LCBmaWVsZCwgZXh0ZW5zaW9uLCBw
YXJzZVRyZWVCdWlsZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQYXJz
ZSBhIHNpbmdsZSBmaWVsZCB2YWx1ZSBmcm9tIHtAY29kZSB0b2tlbml6ZXJ9IGFuZCBtZXJnZSBp
dCBpbnRvCi0gICAgICoge0Bjb2RlIGJ1aWxkZXJ9LgotICAgICAqLwotICAgIHByaXZhdGUgdm9p
ZCBjb25zdW1lRmllbGRWYWx1ZSgKLSAgICAgICAgZmluYWwgVG9rZW5pemVyIHRva2VuaXplciwK
LSAgICAgICAgZmluYWwgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnksCi0gICAg
ICAgIGZpbmFsIE1lc3NhZ2VSZWZsZWN0aW9uLk1lcmdlVGFyZ2V0IHRhcmdldCwKLSAgICAgICAg
ZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkLAotICAgICAgICBmaW5hbCBFeHRlbnNpb25SZWdp
c3RyeS5FeHRlbnNpb25JbmZvIGV4dGVuc2lvbiwKLSAgICAgICAgZmluYWwgVGV4dEZvcm1hdFBh
cnNlSW5mb1RyZWUuQnVpbGRlciBwYXJzZVRyZWVCdWlsZGVyKQotICAgICAgICB0aHJvd3MgUGFy
c2VFeGNlcHRpb24gewotICAgICAgT2JqZWN0IHZhbHVlID0gbnVsbDsKLQotICAgICAgaWYgKGZp
ZWxkLmdldEphdmFUeXBlKCkgPT0gRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsK
LSAgICAgICAgZmluYWwgU3RyaW5nIGVuZFRva2VuOwotICAgICAgICBpZiAodG9rZW5pemVyLnRy
eUNvbnN1bWUoIjwiKSkgewotICAgICAgICAgIGVuZFRva2VuID0gIj4iOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHRva2VuaXplci5jb25zdW1lKCJ7Iik7Ci0gICAgICAgICAgZW5kVG9r
ZW4gPSAifSI7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBNZXNzYWdlUmVmbGVjdGlvbi5N
ZXJnZVRhcmdldCBzdWJGaWVsZDsKLSAgICAgICAgc3ViRmllbGQgPSB0YXJnZXQubmV3TWVyZ2VU
YXJnZXRGb3JGaWVsZChmaWVsZCwKLSAgICAgICAgICAgIChleHRlbnNpb24gPT0gbnVsbCkgPyBu
dWxsIDogZXh0ZW5zaW9uLmRlZmF1bHRJbnN0YW5jZSk7Ci0KLSAgICAgICAgd2hpbGUgKCF0b2tl
bml6ZXIudHJ5Q29uc3VtZShlbmRUb2tlbikpIHsKLSAgICAgICAgICBpZiAodG9rZW5pemVyLmF0
RW5kKCkpIHsKLSAgICAgICAgICAgIHRocm93IHRva2VuaXplci5wYXJzZUV4Y2VwdGlvbigKLSAg
ICAgICAgICAgICAgIkV4cGVjdGVkIFwiIiArIGVuZFRva2VuICsgIlwiLiIpOwotICAgICAgICAg
IH0KLSAgICAgICAgICBtZXJnZUZpZWxkKHRva2VuaXplciwgZXh0ZW5zaW9uUmVnaXN0cnksIHN1
YkZpZWxkLCBwYXJzZVRyZWVCdWlsZGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhbHVlID0g
c3ViRmllbGQuZmluaXNoKCk7Ci0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAoZmll
bGQuZ2V0VHlwZSgpKSB7Ci0gICAgICAgICAgY2FzZSBJTlQzMjoKLSAgICAgICAgICBjYXNlIFNJ
TlQzMjoKLSAgICAgICAgICBjYXNlIFNGSVhFRDMyOgotICAgICAgICAgICAgdmFsdWUgPSB0b2tl
bml6ZXIuY29uc3VtZUludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNh
c2UgSU5UNjQ6Ci0gICAgICAgICAgY2FzZSBTSU5UNjQ6Ci0gICAgICAgICAgY2FzZSBTRklYRUQ2
NDoKLSAgICAgICAgICAgIHZhbHVlID0gdG9rZW5pemVyLmNvbnN1bWVJbnQ2NCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFVJTlQzMjoKLSAgICAgICAgICBjYXNlIEZJ
WEVEMzI6Ci0gICAgICAgICAgICB2YWx1ZSA9IHRva2VuaXplci5jb25zdW1lVUludDMyKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgVUlOVDY0OgotICAgICAgICAgIGNh
c2UgRklYRUQ2NDoKLSAgICAgICAgICAgIHZhbHVlID0gdG9rZW5pemVyLmNvbnN1bWVVSW50NjQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBGTE9BVDoKLSAgICAgICAg
ICAgIHZhbHVlID0gdG9rZW5pemVyLmNvbnN1bWVGbG9hdCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICBjYXNlIERPVUJMRToKLSAgICAgICAgICAgIHZhbHVlID0gdG9rZW5pemVy
LmNvbnN1bWVEb3VibGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBC
T09MOgotICAgICAgICAgICAgdmFsdWUgPSB0b2tlbml6ZXIuY29uc3VtZUJvb2xlYW4oKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgICAgICB2
YWx1ZSA9IHRva2VuaXplci5jb25zdW1lU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgIGNhc2UgQllURVM6Ci0gICAgICAgICAgICB2YWx1ZSA9IHRva2VuaXplci5jb25z
dW1lQnl0ZVN0cmluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEVO
VU06Ci0gICAgICAgICAgICBmaW5hbCBFbnVtRGVzY3JpcHRvciBlbnVtVHlwZSA9IGZpZWxkLmdl
dEVudW1UeXBlKCk7Ci0KLSAgICAgICAgICAgIGlmICh0b2tlbml6ZXIubG9va2luZ0F0SW50ZWdl
cigpKSB7Ci0gICAgICAgICAgICAgIGZpbmFsIGludCBudW1iZXIgPSB0b2tlbml6ZXIuY29uc3Vt
ZUludDMyKCk7Ci0gICAgICAgICAgICAgIHZhbHVlID0gZW51bVR5cGUuZmluZFZhbHVlQnlOdW1i
ZXIobnVtYmVyKTsKLSAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgICAg
ICAgICAgICB0aHJvdyB0b2tlbml6ZXIucGFyc2VFeGNlcHRpb25QcmV2aW91c1Rva2VuKAotICAg
ICAgICAgICAgICAgICAgIkVudW0gdHlwZSBcIiIgKyBlbnVtVHlwZS5nZXRGdWxsTmFtZSgpCi0g
ICAgICAgICAgICAgICAgICArICJcIiBoYXMgbm8gdmFsdWUgd2l0aCBudW1iZXIgIiArIG51bWJl
ciArICcuJyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgIGZpbmFsIFN0cmluZyBpZCA9IHRva2VuaXplci5jb25zdW1lSWRlbnRpZmllcigpOwot
ICAgICAgICAgICAgICB2YWx1ZSA9IGVudW1UeXBlLmZpbmRWYWx1ZUJ5TmFtZShpZCk7Ci0gICAg
ICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgdG9r
ZW5pemVyLnBhcnNlRXhjZXB0aW9uUHJldmlvdXNUb2tlbigKLSAgICAgICAgICAgICAgICAgICJF
bnVtIHR5cGUgXCIiICsgZW51bVR5cGUuZ2V0RnVsbE5hbWUoKQotICAgICAgICAgICAgICAgICAg
KyAiXCIgaGFzIG5vIHZhbHVlIG5hbWVkIFwiIiArIGlkICsgIlwiLiIpOwotICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2Fz
ZSBNRVNTQUdFOgotICAgICAgICAgIGNhc2UgR1JPVVA6Ci0gICAgICAgICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigiQ2FuJ3QgZ2V0IGhlcmUuIik7Ci0gICAgICAgIH0KLSAgICAgIH0K
LQotICAgICAgaWYgKGZpZWxkLmlzUmVwZWF0ZWQoKSkgewotICAgICAgICB0YXJnZXQuYWRkUmVw
ZWF0ZWRGaWVsZChmaWVsZCwgdmFsdWUpOwotICAgICAgfSBlbHNlIGlmICgoc2luZ3VsYXJPdmVy
d3JpdGVQb2xpY3kKLSAgICAgICAgICAgICAgPT0gU2luZ3VsYXJPdmVyd3JpdGVQb2xpY3kuRk9S
QklEX1NJTkdVTEFSX09WRVJXUklURVMpCi0gICAgICAgICAgJiYgdGFyZ2V0Lmhhc0ZpZWxkKGZp
ZWxkKSkgewotICAgICAgICB0aHJvdyB0b2tlbml6ZXIucGFyc2VFeGNlcHRpb25QcmV2aW91c1Rv
a2VuKCJOb24tcmVwZWF0ZWQgZmllbGQgXCIiCi0gICAgICAgICAgICArIGZpZWxkLmdldEZ1bGxO
YW1lKCkgKyAiXCIgY2Fubm90IGJlIG92ZXJ3cml0dGVuLiIpOwotICAgICAgfSBlbHNlIGlmICgo
c2luZ3VsYXJPdmVyd3JpdGVQb2xpY3kKLSAgICAgICAgICAgICAgPT0gU2luZ3VsYXJPdmVyd3Jp
dGVQb2xpY3kuRk9SQklEX1NJTkdVTEFSX09WRVJXUklURVMpCi0gICAgICAgICAgJiYgZmllbGQu
Z2V0Q29udGFpbmluZ09uZW9mKCkgIT0gbnVsbAotICAgICAgICAgICYmIHRhcmdldC5oYXNPbmVv
ZihmaWVsZC5nZXRDb250YWluaW5nT25lb2YoKSkpIHsKLSAgICAgICAgRGVzY3JpcHRvcnMuT25l
b2ZEZXNjcmlwdG9yIG9uZW9mID0gZmllbGQuZ2V0Q29udGFpbmluZ09uZW9mKCk7Ci0gICAgICAg
IHRocm93IHRva2VuaXplci5wYXJzZUV4Y2VwdGlvblByZXZpb3VzVG9rZW4oIkZpZWxkIFwiIgot
ICAgICAgICAgICAgKyBmaWVsZC5nZXRGdWxsTmFtZSgpICsgIlwiIGlzIHNwZWNpZmllZCBhbG9u
ZyB3aXRoIGZpZWxkIFwiIgotICAgICAgICAgICAgKyB0YXJnZXQuZ2V0T25lb2ZGaWVsZERlc2Ny
aXB0b3Iob25lb2YpLmdldEZ1bGxOYW1lKCkKLSAgICAgICAgICAgICsgIlwiLCBhbm90aGVyIG1l
bWJlciBvZiBvbmVvZiBcIiIgKyBvbmVvZi5nZXROYW1lKCkgKyAiXCIuIik7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICB0YXJnZXQuc2V0RmllbGQoZmllbGQsIHZhbHVlKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBTa2lwcyB0aGUgbmV4dCBmaWVsZCBpbmNsdWRpbmcgdGhl
IGZpZWxkJ3MgbmFtZSBhbmQgdmFsdWUuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNraXBG
aWVsZChUb2tlbml6ZXIgdG9rZW5pemVyKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAg
aWYgKHRva2VuaXplci50cnlDb25zdW1lKCJbIikpIHsKLSAgICAgICAgLy8gRXh0ZW5zaW9uIG5h
bWUuCi0gICAgICAgIGRvIHsKLSAgICAgICAgICB0b2tlbml6ZXIuY29uc3VtZUlkZW50aWZpZXIo
KTsKLSAgICAgICAgfSB3aGlsZSAodG9rZW5pemVyLnRyeUNvbnN1bWUoIi4iKSk7Ci0gICAgICAg
IHRva2VuaXplci5jb25zdW1lKCJdIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0b2tlbml6
ZXIuY29uc3VtZUlkZW50aWZpZXIoKTsKLSAgICAgIH0KLQotICAgICAgLy8gVHJ5IHRvIGd1ZXNz
IHRoZSB0eXBlIG9mIHRoaXMgZmllbGQuCi0gICAgICAvLyBJZiB0aGlzIGZpZWxkIGlzIG5vdCBh
IG1lc3NhZ2UsIHRoZXJlIHNob3VsZCBiZSBhICI6IiBiZXR3ZWVuIHRoZQotICAgICAgLy8gZmll
bGQgbmFtZSBhbmQgdGhlIGZpZWxkIHZhbHVlIGFuZCBhbHNvIHRoZSBmaWVsZCB2YWx1ZSBzaG91
bGQgbm90Ci0gICAgICAvLyBzdGFydCB3aXRoICJ7IiBvciAiPCIgd2hpY2ggaW5kaWNhdGVzIHRo
ZSBiZWdpbm5pbmcgb2YgYSBtZXNzYWdlIGJvZHkuCi0gICAgICAvLyBJZiB0aGVyZSBpcyBubyAi
OiIgb3IgdGhlcmUgaXMgYSAieyIgb3IgIjwiIGFmdGVyICI6IiwgdGhpcyBmaWVsZCBoYXMKLSAg
ICAgIC8vIHRvIGJlIGEgbWVzc2FnZSBvciB0aGUgaW5wdXQgaXMgaWxsLWZvcm1lZC4KLSAgICAg
IGlmICh0b2tlbml6ZXIudHJ5Q29uc3VtZSgiOiIpCi0gICAgICAgICAgJiYgIXRva2VuaXplci5s
b29raW5nQXQoIjwiKQotICAgICAgICAgICYmICF0b2tlbml6ZXIubG9va2luZ0F0KCJ7IikpIHsK
LSAgICAgICAgc2tpcEZpZWxkVmFsdWUodG9rZW5pemVyKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHNraXBGaWVsZE1lc3NhZ2UodG9rZW5pemVyKTsKLSAgICAgIH0KLSAgICAgIC8vIEZvciBo
aXN0b3JpY2FsIHJlYXNvbnMsIGZpZWxkcyBtYXkgb3B0aW9uYWxseSBiZSBzZXBhcmF0ZWQgYnkg
Y29tbWFzIG9yCi0gICAgICAvLyBzZW1pY29sb25zLgotICAgICAgaWYgKCF0b2tlbml6ZXIudHJ5
Q29uc3VtZSgiOyIpKSB7Ci0gICAgICAgIHRva2VuaXplci50cnlDb25zdW1lKCIsIik7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2tpcHMgdGhlIHdob2xlIGJvZHkgb2YgYSBt
ZXNzYWdlIGluY2x1ZGluZyB0aGUgYmVnaW5uaW5nIGRlbGltaXRlciBhbmQKLSAgICAgKiB0aGUg
ZW5kaW5nIGRlbGltaXRlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2tpcEZpZWxkTWVz
c2FnZShUb2tlbml6ZXIgdG9rZW5pemVyKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAg
ZmluYWwgU3RyaW5nIGRlbGltaXRlcjsKLSAgICAgIGlmICh0b2tlbml6ZXIudHJ5Q29uc3VtZSgi
PCIpKSB7Ci0gICAgICAgIGRlbGltaXRlciA9ICI+IjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHRva2VuaXplci5jb25zdW1lKCJ7Iik7Ci0gICAgICAgIGRlbGltaXRlciA9ICJ9IjsKLSAgICAg
IH0KLSAgICAgIHdoaWxlICghdG9rZW5pemVyLmxvb2tpbmdBdCgiPiIpICYmICF0b2tlbml6ZXIu
bG9va2luZ0F0KCJ9IikpIHsKLSAgICAgICAgc2tpcEZpZWxkKHRva2VuaXplcik7Ci0gICAgICB9
Ci0gICAgICB0b2tlbml6ZXIuY29uc3VtZShkZWxpbWl0ZXIpOwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIFNraXBzIGEgZmllbGQgdmFsdWUuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNr
aXBGaWVsZFZhbHVlKFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7
Ci0gICAgICBpZiAodG9rZW5pemVyLnRyeUNvbnN1bWVTdHJpbmcoKSkgewotICAgICAgICB3aGls
ZSAodG9rZW5pemVyLnRyeUNvbnN1bWVTdHJpbmcoKSkge30KLSAgICAgICAgcmV0dXJuOwotICAg
ICAgfQotICAgICAgaWYgKCF0b2tlbml6ZXIudHJ5Q29uc3VtZUlkZW50aWZpZXIoKSAgIC8vIGlu
Y2x1ZGVzIGVudW0gJiBib29sZWFuCi0gICAgICAgICAgJiYgIXRva2VuaXplci50cnlDb25zdW1l
SW50NjQoKSAgICAgLy8gaW5jbHVkZXMgaW50MzIKLSAgICAgICAgICAmJiAhdG9rZW5pemVyLnRy
eUNvbnN1bWVVSW50NjQoKSAgICAvLyBpbmNsdWRlcyB1aW50MzIKLSAgICAgICAgICAmJiAhdG9r
ZW5pemVyLnRyeUNvbnN1bWVEb3VibGUoKQotICAgICAgICAgICYmICF0b2tlbml6ZXIudHJ5Q29u
c3VtZUZsb2F0KCkpIHsKLSAgICAgICAgdGhyb3cgdG9rZW5pemVyLnBhcnNlRXhjZXB0aW9uKAot
ICAgICAgICAgICAgIkludmFsaWQgZmllbGQgdmFsdWU6ICIgKyB0b2tlbml6ZXIuY3VycmVudFRv
a2VuKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBVdGlsaXR5
IGZ1bmN0aW9ucwotICAvLwotICAvLyBTb21lIG9mIHRoZXNlIG1ldGhvZHMgYXJlIHBhY2thZ2Ut
cHJpdmF0ZSBiZWNhdXNlIERlc2NyaXB0b3JzLmphdmEgdXNlcwotICAvLyB0aGVtLgotCi0gIC8q
KgotICAgKiBFc2NhcGVzIGJ5dGVzIGluIHRoZSBmb3JtYXQgdXNlZCBpbiBwcm90b2NvbCBidWZm
ZXIgdGV4dCBmb3JtYXQsIHdoaWNoCi0gICAqIGlzIHRoZSBzYW1lIGFzIHRoZSBmb3JtYXQgdXNl
ZCBmb3IgQyBzdHJpbmcgbGl0ZXJhbHMuICBBbGwgYnl0ZXMKLSAgICogdGhhdCBhcmUgbm90IHBy
aW50YWJsZSA3LWJpdCBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLCBhcyB3ZWxsIGFzCi0g
ICAqIGJhY2tzbGFzaCwgc2luZ2xlLXF1b3RlLCBhbmQgZG91YmxlLXF1b3RlIGNoYXJhY3RlcnMu
ICBDaGFyYWN0ZXJzIGZvcgotICAgKiB3aGljaCBubyBkZWZpbmVkIHNob3J0LWhhbmQgZXNjYXBl
IHNlcXVlbmNlIGlzIGRlZmluZWQgd2lsbCBiZSBlc2NhcGVkCi0gICAqIHVzaW5nIDMtZGlnaXQg
b2N0YWwgc2VxdWVuY2VzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXNjYXBlQnl0
ZXMoQnl0ZVN0cmluZyBpbnB1dCkgewotICAgIHJldHVybiBUZXh0Rm9ybWF0RXNjYXBlci5lc2Nh
cGVCeXRlcyhpbnB1dCk7Ci0gIH0KLQotICAvKioKLSAgICogTGlrZSB7QGxpbmsgI2VzY2FwZUJ5
dGVzKEJ5dGVTdHJpbmcpfSwgYnV0IHVzZWQgZm9yIGJ5dGUgYXJyYXkuCi0gICAqLwotICBwdWJs
aWMgc3RhdGljIFN0cmluZyBlc2NhcGVCeXRlcyhieXRlW10gaW5wdXQpIHsKLSAgICByZXR1cm4g
VGV4dEZvcm1hdEVzY2FwZXIuZXNjYXBlQnl0ZXMoaW5wdXQpOwotICB9Ci0KLSAgLyoqCi0gICAq
IFVuLWVzY2FwZSBhIGJ5dGUgc2VxdWVuY2UgYXMgZXNjYXBlZCB1c2luZwotICAgKiB7QGxpbmsg
I2VzY2FwZUJ5dGVzKEJ5dGVTdHJpbmcpfS4gIFR3by1kaWdpdCBoZXggZXNjYXBlcyAoc3RhcnRp
bmcgd2l0aAotICAgKiAiXHgiKSBhcmUgYWxzbyByZWNvZ25pemVkLgotICAgKi8KLSAgcHVibGlj
IHN0YXRpYyBCeXRlU3RyaW5nIHVuZXNjYXBlQnl0ZXMoZmluYWwgQ2hhclNlcXVlbmNlIGNoYXJT
dHJpbmcpCi0gICAgICB0aHJvd3MgSW52YWxpZEVzY2FwZVNlcXVlbmNlRXhjZXB0aW9uIHsKLSAg
ICAvLyBGaXJzdCBjb252ZXJ0IHRoZSBKYXZhIGNoYXJhY3RlciBzZXF1ZW5jZSB0byBVVEYtOCBi
eXRlcy4KLSAgICBCeXRlU3RyaW5nIGlucHV0ID0gQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoY2hh
clN0cmluZy50b1N0cmluZygpKTsKLSAgICAvLyBUaGVuIHVuZXNjYXBlIGNlcnRhaW4gYnl0ZSBz
ZXF1ZW5jZXMgaW50cm9kdWNlZCBieSBBU0NJSSAnXFwnLiAgVGhlIHZhbGlkCi0gICAgLy8gZXNj
YXBlcyBjYW4gYWxsIGJlIGV4cHJlc3NlZCB3aXRoIEFTQ0lJIGNoYXJhY3RlcnMsIHNvIGl0IGlz
IHNhZmUgdG8KLSAgICAvLyBvcGVyYXRlIG9uIGJ5dGVzIGhlcmUuCi0gICAgLy8KLSAgICAvLyBV
bmVzY2FwaW5nIHRoZSBpbnB1dCBieXRlIGFycmF5IHdpbGwgcmVzdWx0IGluIGEgYnl0ZSBzZXF1
ZW5jZSB0aGF0J3Mgbm8KLSAgICAvLyBsb25nZXIgdGhhbiB0aGUgaW5wdXQuICBUaGF0J3MgYmVj
YXVzZSBlYWNoIGVzY2FwZSBzZXF1ZW5jZSBpcyBiZXR3ZWVuCi0gICAgLy8gdHdvIGFuZCBmb3Vy
IGJ5dGVzIGxvbmcgYW5kIHN0YW5kcyBmb3IgYSBzaW5nbGUgYnl0ZS4KLSAgICBmaW5hbCBieXRl
W10gcmVzdWx0ID0gbmV3IGJ5dGVbaW5wdXQuc2l6ZSgpXTsKLSAgICBpbnQgcG9zID0gMDsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0LnNpemUoKTsgaSsrKSB7Ci0gICAgICBieXRlIGMg
PSBpbnB1dC5ieXRlQXQoaSk7Ci0gICAgICBpZiAoYyA9PSAnXFwnKSB7Ci0gICAgICAgIGlmIChp
ICsgMSA8IGlucHV0LnNpemUoKSkgewotICAgICAgICAgICsraTsKLSAgICAgICAgICBjID0gaW5w
dXQuYnl0ZUF0KGkpOwotICAgICAgICAgIGlmIChpc09jdGFsKGMpKSB7Ci0gICAgICAgICAgICAv
LyBPY3RhbCBlc2NhcGUuCi0gICAgICAgICAgICBpbnQgY29kZSA9IGRpZ2l0VmFsdWUoYyk7Ci0g
ICAgICAgICAgICBpZiAoaSArIDEgPCBpbnB1dC5zaXplKCkgJiYgaXNPY3RhbChpbnB1dC5ieXRl
QXQoaSArIDEpKSkgewotICAgICAgICAgICAgICArK2k7Ci0gICAgICAgICAgICAgIGNvZGUgPSBj
b2RlICogOCArIGRpZ2l0VmFsdWUoaW5wdXQuYnl0ZUF0KGkpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpICsgMSA8IGlucHV0LnNpemUoKSAmJiBpc09jdGFsKGlucHV0LmJ5dGVB
dChpICsgMSkpKSB7Ci0gICAgICAgICAgICAgICsraTsKLSAgICAgICAgICAgICAgY29kZSA9IGNv
ZGUgKiA4ICsgZGlnaXRWYWx1ZShpbnB1dC5ieXRlQXQoaSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLy8gVE9ETzogQ2hlY2sgdGhhdCAwIDw9IGNvZGUgJiYgY29kZSA8PSAweEZGLgot
ICAgICAgICAgICAgcmVzdWx0W3BvcysrXSA9IChieXRlKSBjb2RlOwotICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgY2FzZSAnYScgOiBy
ZXN1bHRbcG9zKytdID0gMHgwNzsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJ2InIDogcmVz
dWx0W3BvcysrXSA9ICdcYic7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlICdmJyA6IHJlc3Vs
dFtwb3MrK10gPSAnXGYnOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAnbicgOiByZXN1bHRb
cG9zKytdID0gJ1xuJzsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJ3InIDogcmVzdWx0W3Bv
cysrXSA9ICdccic7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlICd0JyA6IHJlc3VsdFtwb3Mr
K10gPSAnXHQnOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAndicgOiByZXN1bHRbcG9zKytd
ID0gMHgwYjsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJ1xcJzogcmVzdWx0W3BvcysrXSA9
ICdcXCc7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlICdcJyc6IHJlc3VsdFtwb3MrK10gPSAn
XCcnOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAnIicgOiByZXN1bHRbcG9zKytdID0gJ1wi
JzsgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgLy8g
aGV4IGVzY2FwZQotICAgICAgICAgICAgICAgIGludCBjb2RlID0gMDsKLSAgICAgICAgICAgICAg
ICBpZiAoaSArIDEgPCBpbnB1dC5zaXplKCkgJiYgaXNIZXgoaW5wdXQuYnl0ZUF0KGkgKyAxKSkp
IHsKLSAgICAgICAgICAgICAgICAgICsraTsKLSAgICAgICAgICAgICAgICAgIGNvZGUgPSBkaWdp
dFZhbHVlKGlucHV0LmJ5dGVBdChpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkRXNjYXBlU2VxdWVuY2VFeGNlcHRpb24oCi0g
ICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgZXNjYXBlIHNlcXVlbmNlOiAnXFx4JyB3aXRo
IG5vIGRpZ2l0cyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaSAr
IDEgPCBpbnB1dC5zaXplKCkgJiYgaXNIZXgoaW5wdXQuYnl0ZUF0KGkgKyAxKSkpIHsKLSAgICAg
ICAgICAgICAgICAgICsraTsKLSAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyBk
aWdpdFZhbHVlKGlucHV0LmJ5dGVBdChpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJlc3VsdFtwb3MrK10gPSAoYnl0ZSkgY29kZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJ
bnZhbGlkRXNjYXBlU2VxdWVuY2VFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJJbnZh
bGlkIGVzY2FwZSBzZXF1ZW5jZTogJ1xcIiArIChjaGFyKSBjICsgJ1wnJyk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRocm93IG5ldyBJ
bnZhbGlkRXNjYXBlU2VxdWVuY2VFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJJbnZhbGlkIGVz
Y2FwZSBzZXF1ZW5jZTogJ1xcJyBhdCBlbmQgb2Ygc3RyaW5nLiIpOwotICAgICAgICB9Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICByZXN1bHRbcG9zKytdID0gYzsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PSBwb3MKLSAgICAgICAgPyBCeXRlU3RyaW5nLndy
YXAocmVzdWx0KSAgLy8gVGhpcyByZWZlcmVuY2UgaGFzIG5vdCBiZWVuIG91dCBvZiBvdXIgY29u
dHJvbC4KLSAgICAgICAgOiBCeXRlU3RyaW5nLmNvcHlGcm9tKHJlc3VsdCwgMCwgcG9zKTsKLSAg
fQotCi0gIC8qKgotICAgKiBUaHJvd24gYnkge0BsaW5rIFRleHRGb3JtYXQjdW5lc2NhcGVCeXRl
c30gYW5kCi0gICAqIHtAbGluayBUZXh0Rm9ybWF0I3VuZXNjYXBlVGV4dH0gd2hlbiBhbiBpbnZh
bGlkIGVzY2FwZSBzZXF1ZW5jZSBpcyBzZWVuLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFz
cyBJbnZhbGlkRXNjYXBlU2VxdWVuY2VFeGNlcHRpb24gZXh0ZW5kcyBJT0V4Y2VwdGlvbiB7Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTgxNjQwMzM2
NTAxNDI1OTMzMDRMOwotCi0gICAgSW52YWxpZEVzY2FwZVNlcXVlbmNlRXhjZXB0aW9uKGZpbmFs
IFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgICAgc3VwZXIoZGVzY3JpcHRpb24pOwotICAgIH0K
LSAgfQotCi0gIC8qKgotICAgKiBMaWtlIHtAbGluayAjZXNjYXBlQnl0ZXMoQnl0ZVN0cmluZyl9
LCBidXQgZXNjYXBlcyBhIHRleHQgc3RyaW5nLgotICAgKiBOb24tQVNDSUkgY2hhcmFjdGVycyBh
cmUgZmlyc3QgZW5jb2RlZCBhcyBVVEYtOCwgdGhlbiBlYWNoIGJ5dGUgaXMgZXNjYXBlZAotICAg
KiBpbmRpdmlkdWFsbHkgYXMgYSAzLWRpZ2l0IG9jdGFsIGVzY2FwZS4gIFllcywgaXQncyB3ZWly
ZC4KLSAgICovCi0gIHN0YXRpYyBTdHJpbmcgZXNjYXBlVGV4dChmaW5hbCBTdHJpbmcgaW5wdXQp
IHsKLSAgICByZXR1cm4gZXNjYXBlQnl0ZXMoQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoaW5wdXQp
KTsKLSAgfQotCi0gIC8qKgotICAgKiBFc2NhcGUgZG91YmxlIHF1b3RlcyBhbmQgYmFja3NsYXNo
ZXMgaW4gYSBTdHJpbmcgZm9yIHVuaWNvZGUgb3V0cHV0IG9mIGEgbWVzc2FnZS4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVzY2FwZURvdWJsZVF1b3Rlc0FuZEJhY2tzbGFzaGVzKGZp
bmFsIFN0cmluZyBpbnB1dCkgewotICAgIHJldHVybiBUZXh0Rm9ybWF0RXNjYXBlci5lc2NhcGVE
b3VibGVRdW90ZXNBbmRCYWNrc2xhc2hlcyhpbnB1dCk7Ci0gIH0KLQotICAvKioKLSAgICogVW4t
ZXNjYXBlIGEgdGV4dCBzdHJpbmcgYXMgZXNjYXBlZCB1c2luZyB7QGxpbmsgI2VzY2FwZVRleHQo
U3RyaW5nKX0uCi0gICAqIFR3by1kaWdpdCBoZXggZXNjYXBlcyAoc3RhcnRpbmcgd2l0aCAiXHgi
KSBhcmUgYWxzbyByZWNvZ25pemVkLgotICAgKi8KLSAgc3RhdGljIFN0cmluZyB1bmVzY2FwZVRl
eHQoZmluYWwgU3RyaW5nIGlucHV0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
d3MgSW52YWxpZEVzY2FwZVNlcXVlbmNlRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gdW5lc2NhcGVC
eXRlcyhpbnB1dCkudG9TdHJpbmdVdGY4KCk7Ci0gIH0KLQotICAvKiogSXMgdGhpcyBhbiBvY3Rh
bCBkaWdpdD8gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc09jdGFsKGZpbmFsIGJ5dGUg
YykgewotICAgIHJldHVybiAnMCcgPD0gYyAmJiBjIDw9ICc3JzsKLSAgfQotCi0gIC8qKiBJcyB0
aGlzIGEgaGV4IGRpZ2l0PyAqLwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSGV4KGZpbmFs
IGJ5dGUgYykgewotICAgIHJldHVybiAoJzAnIDw9IGMgJiYgYyA8PSAnOScpCi0gICAgICAgIHx8
ICgnYScgPD0gYyAmJiBjIDw9ICdmJykKLSAgICAgICAgfHwgKCdBJyA8PSBjICYmIGMgPD0gJ0Yn
KTsKLSAgfQotCi0gIC8qKgotICAgKiBJbnRlcnByZXQgYSBjaGFyYWN0ZXIgYXMgYSBkaWdpdCAo
aW4gYW55IGJhc2UgdXAgdG8gMzYpIGFuZCByZXR1cm4gdGhlCi0gICAqIG51bWVyaWMgdmFsdWUu
ICBUaGlzIGlzIGxpa2Uge0Bjb2RlIENoYXJhY3Rlci5kaWdpdCgpfSBidXQgd2UgZG9uJ3QgYWNj
ZXB0Ci0gICAqIG5vbi1BU0NJSSBkaWdpdHMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQg
ZGlnaXRWYWx1ZShmaW5hbCBieXRlIGMpIHsKLSAgICBpZiAoJzAnIDw9IGMgJiYgYyA8PSAnOScp
IHsKLSAgICAgIHJldHVybiBjIC0gJzAnOwotICAgIH0gZWxzZSBpZiAoJ2EnIDw9IGMgJiYgYyA8
PSAneicpIHsKLSAgICAgIHJldHVybiBjIC0gJ2EnICsgMTA7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHJldHVybiBjIC0gJ0EnICsgMTA7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEg
MzItYml0IHNpZ25lZCBpbnRlZ2VyIGZyb20gdGhlIHRleHQuICBVbmxpa2UgdGhlIEphdmEgc3Rh
bmRhcmQKLSAgICoge0Bjb2RlIEludGVnZXIucGFyc2VJbnQoKX0sIHRoaXMgZnVuY3Rpb24gcmVj
b2duaXplcyB0aGUgcHJlZml4ZXMgIjB4IgotICAgKiBhbmQgIjAiIHRvIHNpZ25pZnkgaGV4YWRl
Y2ltYWwgYW5kIG9jdGFsIG51bWJlcnMsIHJlc3BlY3RpdmVseS4KLSAgICovCi0gIHN0YXRpYyBp
bnQgcGFyc2VJbnQzMihmaW5hbCBTdHJpbmcgdGV4dCkgdGhyb3dzIE51bWJlckZvcm1hdEV4Y2Vw
dGlvbiB7Ci0gICAgcmV0dXJuIChpbnQpIHBhcnNlSW50ZWdlcih0ZXh0LCB0cnVlLCBmYWxzZSk7
Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2UgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBmcm9t
IHRoZSB0ZXh0LiAgVW5saWtlIHRoZSBKYXZhIHN0YW5kYXJkCi0gICAqIHtAY29kZSBJbnRlZ2Vy
LnBhcnNlSW50KCl9LCB0aGlzIGZ1bmN0aW9uIHJlY29nbml6ZXMgdGhlIHByZWZpeGVzICIweCIK
LSAgICogYW5kICIwIiB0byBzaWduaWZ5IGhleGFkZWNpbWFsIGFuZCBvY3RhbCBudW1iZXJzLCBy
ZXNwZWN0aXZlbHkuICBUaGUKLSAgICogcmVzdWx0IGlzIGNvZXJjZWQgdG8gYSAoc2lnbmVkKSB7
QGNvZGUgaW50fSB3aGVuIHJldHVybmVkIHNpbmNlIEphdmEgaGFzCi0gICAqIG5vIHVuc2lnbmVk
IGludGVnZXIgdHlwZS4KLSAgICovCi0gIHN0YXRpYyBpbnQgcGFyc2VVSW50MzIoZmluYWwgU3Ry
aW5nIHRleHQpIHRocm93cyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gewotICAgIHJldHVybiAoaW50
KSBwYXJzZUludGVnZXIodGV4dCwgZmFsc2UsIGZhbHNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBQ
YXJzZSBhIDY0LWJpdCBzaWduZWQgaW50ZWdlciBmcm9tIHRoZSB0ZXh0LiAgVW5saWtlIHRoZSBK
YXZhIHN0YW5kYXJkCi0gICAqIHtAY29kZSBJbnRlZ2VyLnBhcnNlSW50KCl9LCB0aGlzIGZ1bmN0
aW9uIHJlY29nbml6ZXMgdGhlIHByZWZpeGVzICIweCIKLSAgICogYW5kICIwIiB0byBzaWduaWZ5
IGhleGFkZWNpbWFsIGFuZCBvY3RhbCBudW1iZXJzLCByZXNwZWN0aXZlbHkuCi0gICAqLwotICBz
dGF0aWMgbG9uZyBwYXJzZUludDY0KGZpbmFsIFN0cmluZyB0ZXh0KSB0aHJvd3MgTnVtYmVyRm9y
bWF0RXhjZXB0aW9uIHsKLSAgICByZXR1cm4gcGFyc2VJbnRlZ2VyKHRleHQsIHRydWUsIHRydWUp
OwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGEgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgZnJv
bSB0aGUgdGV4dC4gIFVubGlrZSB0aGUgSmF2YSBzdGFuZGFyZAotICAgKiB7QGNvZGUgSW50ZWdl
ci5wYXJzZUludCgpfSwgdGhpcyBmdW5jdGlvbiByZWNvZ25pemVzIHRoZSBwcmVmaXhlcyAiMHgi
Ci0gICAqIGFuZCAiMCIgdG8gc2lnbmlmeSBoZXhhZGVjaW1hbCBhbmQgb2N0YWwgbnVtYmVycywg
cmVzcGVjdGl2ZWx5LiAgVGhlCi0gICAqIHJlc3VsdCBpcyBjb2VyY2VkIHRvIGEgKHNpZ25lZCkg
e0Bjb2RlIGxvbmd9IHdoZW4gcmV0dXJuZWQgc2luY2UgSmF2YSBoYXMKLSAgICogbm8gdW5zaWdu
ZWQgbG9uZyB0eXBlLgotICAgKi8KLSAgc3RhdGljIGxvbmcgcGFyc2VVSW50NjQoZmluYWwgU3Ry
aW5nIHRleHQpIHRocm93cyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gewotICAgIHJldHVybiBwYXJz
ZUludGVnZXIodGV4dCwgZmFsc2UsIHRydWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbG9u
ZyBwYXJzZUludGVnZXIoZmluYWwgU3RyaW5nIHRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNTaWduZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMb25nKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIHsKLSAgICBpbnQg
cG9zID0gMDsKLQotICAgIGJvb2xlYW4gbmVnYXRpdmUgPSBmYWxzZTsKLSAgICBpZiAodGV4dC5z
dGFydHNXaXRoKCItIiwgcG9zKSkgewotICAgICAgaWYgKCFpc1NpZ25lZCkgewotICAgICAgICB0
aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJOdW1iZXIgbXVzdCBiZSBwb3NpdGl2ZTog
IiArIHRleHQpOwotICAgICAgfQotICAgICAgKytwb3M7Ci0gICAgICBuZWdhdGl2ZSA9IHRydWU7
Ci0gICAgfQotCi0gICAgaW50IHJhZGl4ID0gMTA7Ci0gICAgaWYgKHRleHQuc3RhcnRzV2l0aCgi
MHgiLCBwb3MpKSB7Ci0gICAgICBwb3MgKz0gMjsKLSAgICAgIHJhZGl4ID0gMTY7Ci0gICAgfSBl
bHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgoIjAiLCBwb3MpKSB7Ci0gICAgICByYWRpeCA9IDg7Ci0g
ICAgfQotCi0gICAgZmluYWwgU3RyaW5nIG51bWJlclRleHQgPSB0ZXh0LnN1YnN0cmluZyhwb3Mp
OwotCi0gICAgbG9uZyByZXN1bHQgPSAwOwotICAgIGlmIChudW1iZXJUZXh0Lmxlbmd0aCgpIDwg
MTYpIHsKLSAgICAgIC8vIENhbiBzYWZlbHkgYXNzdW1lIG5vIG92ZXJmbG93LgotICAgICAgcmVz
dWx0ID0gTG9uZy5wYXJzZUxvbmcobnVtYmVyVGV4dCwgcmFkaXgpOwotICAgICAgaWYgKG5lZ2F0
aXZlKSB7Ci0gICAgICAgIHJlc3VsdCA9IC1yZXN1bHQ7Ci0gICAgICB9Ci0KLSAgICAgIC8vIENo
ZWNrIGJvdW5kcy4KLSAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIDY0LWJpdCBudW1iZXJz
IHNpbmNlIHRoZXknZCBoYXZlIHRvIGJlIDE2IGNoYXJzCi0gICAgICAvLyBvciBsb25nZXIgdG8g
b3ZlcmZsb3cuCi0gICAgICBpZiAoIWlzTG9uZykgewotICAgICAgICBpZiAoaXNTaWduZWQpIHsK
LSAgICAgICAgICBpZiAocmVzdWx0ID4gSW50ZWdlci5NQVhfVkFMVUUgfHwgcmVzdWx0IDwgSW50
ZWdlci5NSU5fVkFMVUUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNl
cHRpb24oCi0gICAgICAgICAgICAgICJOdW1iZXIgb3V0IG9mIHJhbmdlIGZvciAzMi1iaXQgc2ln
bmVkIGludGVnZXI6ICIgKyB0ZXh0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgaWYgKHJlc3VsdCA+PSAoMUwgPDwgMzIpIHx8IHJlc3VsdCA8IDApIHsKLSAgICAg
ICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJO
dW1iZXIgb3V0IG9mIHJhbmdlIGZvciAzMi1iaXQgdW5zaWduZWQgaW50ZWdlcjogIiArIHRleHQp
OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBC
aWdJbnRlZ2VyIGJpZ1ZhbHVlID0gbmV3IEJpZ0ludGVnZXIobnVtYmVyVGV4dCwgcmFkaXgpOwot
ICAgICAgaWYgKG5lZ2F0aXZlKSB7Ci0gICAgICAgIGJpZ1ZhbHVlID0gYmlnVmFsdWUubmVnYXRl
KCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIENoZWNrIGJvdW5kcy4KLSAgICAgIGlmICghaXNMb25n
KSB7Ci0gICAgICAgIGlmIChpc1NpZ25lZCkgewotICAgICAgICAgIGlmIChiaWdWYWx1ZS5iaXRM
ZW5ndGgoKSA+IDMxKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0
aW9uKAotICAgICAgICAgICAgICAiTnVtYmVyIG91dCBvZiByYW5nZSBmb3IgMzItYml0IHNpZ25l
ZCBpbnRlZ2VyOiAiICsgdGV4dCk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIGlmIChiaWdWYWx1ZS5iaXRMZW5ndGgoKSA+IDMyKSB7Ci0gICAgICAgICAgICB0aHJv
dyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKAotICAgICAgICAgICAgICAiTnVtYmVyIG91dCBv
ZiByYW5nZSBmb3IgMzItYml0IHVuc2lnbmVkIGludGVnZXI6ICIgKyB0ZXh0KTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChpc1NpZ25lZCkgewot
ICAgICAgICAgIGlmIChiaWdWYWx1ZS5iaXRMZW5ndGgoKSA+IDYzKSB7Ci0gICAgICAgICAgICB0
aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKAotICAgICAgICAgICAgICAiTnVtYmVyIG91
dCBvZiByYW5nZSBmb3IgNjQtYml0IHNpZ25lZCBpbnRlZ2VyOiAiICsgdGV4dCk7Ci0gICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChiaWdWYWx1ZS5iaXRMZW5ndGgo
KSA+IDY0KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKAot
ICAgICAgICAgICAgICAiTnVtYmVyIG91dCBvZiByYW5nZSBmb3IgNjQtYml0IHVuc2lnbmVkIGlu
dGVnZXI6ICIgKyB0ZXh0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAg
ICAgcmVzdWx0ID0gYmlnVmFsdWUubG9uZ1ZhbHVlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL1RleHRGb3JtYXRFc2NhcGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVGV4dEZvcm1hdEVzY2FwZXIuamF2YQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZGE5Y2VhZGQxNjg1ODRhNjQ5ZTFjYjE0M2NjMzQ0MzdkMTJh
ZTQ5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEv
Y29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVGV4dEZvcm1hdEVzY2FwZXIu
amF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi0vKioKLSAq
IFByb3ZpZGUgdGV4dCBmb3JtYXQgZXNjYXBpbmcgc3VwcG9ydCBmb3IgcHJvdG8yIGluc3RhbmNl
cy4KLSAqLwotZmluYWwgY2xhc3MgVGV4dEZvcm1hdEVzY2FwZXIgewotICBwcml2YXRlIFRleHRG
b3JtYXRFc2NhcGVyKCkge30KLQotICBwcml2YXRlIGludGVyZmFjZSBCeXRlU2VxdWVuY2Ugewot
ICAgIGludCBzaXplKCk7Ci0gICAgYnl0ZSBieXRlQXQoaW50IG9mZnNldCk7Ci0gIH0KLQotICAv
KioKLSAgICogRXNjYXBlcyBieXRlcyBpbiB0aGUgZm9ybWF0IHVzZWQgaW4gcHJvdG9jb2wgYnVm
ZmVyIHRleHQgZm9ybWF0LCB3aGljaAotICAgKiBpcyB0aGUgc2FtZSBhcyB0aGUgZm9ybWF0IHVz
ZWQgZm9yIEMgc3RyaW5nIGxpdGVyYWxzLiAgQWxsIGJ5dGVzCi0gICAqIHRoYXQgYXJlIG5vdCBw
cmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCwgYXMgd2VsbCBhcwot
ICAgKiBiYWNrc2xhc2gsIHNpbmdsZS1xdW90ZSwgYW5kIGRvdWJsZS1xdW90ZSBjaGFyYWN0ZXJz
LiAgQ2hhcmFjdGVycyBmb3IKLSAgICogd2hpY2ggbm8gZGVmaW5lZCBzaG9ydC1oYW5kIGVzY2Fw
ZSBzZXF1ZW5jZSBpcyBkZWZpbmVkIHdpbGwgYmUgZXNjYXBlZAotICAgKiB1c2luZyAzLWRpZ2l0
IG9jdGFsIHNlcXVlbmNlcy4KLSAgICovCi0gIHN0YXRpYyBTdHJpbmcgZXNjYXBlQnl0ZXMoZmlu
YWwgQnl0ZVNlcXVlbmNlIGlucHV0KSB7Ci0gICAgZmluYWwgU3RyaW5nQnVpbGRlciBidWlsZGVy
ID0gbmV3IFN0cmluZ0J1aWxkZXIoaW5wdXQuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGlucHV0LnNpemUoKTsgaSsrKSB7Ci0gICAgICBmaW5hbCBieXRlIGIgPSBpbnB1dC5ieXRl
QXQoaSk7Ci0gICAgICBzd2l0Y2ggKGIpIHsKLSAgICAgICAgLy8gSmF2YSBkb2VzIG5vdCByZWNv
Z25pemUgXGEgb3IgXHYsIGFwcGFyZW50bHkuCi0gICAgICAgIGNhc2UgMHgwNzogYnVpbGRlci5h
cHBlbmQoIlxcYSIpOyBicmVhazsKLSAgICAgICAgY2FzZSAnXGInOiBidWlsZGVyLmFwcGVuZCgi
XFxiIik7IGJyZWFrOwotICAgICAgICBjYXNlICdcZic6IGJ1aWxkZXIuYXBwZW5kKCJcXGYiKTsg
YnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xuJzogYnVpbGRlci5hcHBlbmQoIlxcbiIpOyBicmVhazsK
LSAgICAgICAgY2FzZSAnXHInOiBidWlsZGVyLmFwcGVuZCgiXFxyIik7IGJyZWFrOwotICAgICAg
ICBjYXNlICdcdCc6IGJ1aWxkZXIuYXBwZW5kKCJcXHQiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
MHgwYjogYnVpbGRlci5hcHBlbmQoIlxcdiIpOyBicmVhazsKLSAgICAgICAgY2FzZSAnXFwnOiBi
dWlsZGVyLmFwcGVuZCgiXFxcXCIpOyBicmVhazsKLSAgICAgICAgY2FzZSAnXCcnOiBidWlsZGVy
LmFwcGVuZCgiXFxcJyIpOyBicmVhazsKLSAgICAgICAgY2FzZSAnIicgOiBidWlsZGVyLmFwcGVu
ZCgiXFxcIiIpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAvLyBPbmx5IEFT
Q0lJIGNoYXJhY3RlcnMgYmV0d2VlbiAweDIwIChzcGFjZSkgYW5kIDB4N2UgKHRpbGRlKSBhcmUK
LSAgICAgICAgICAvLyBwcmludGFibGUuICBPdGhlciBieXRlIHZhbHVlcyBtdXN0IGJlIGVzY2Fw
ZWQuCi0gICAgICAgICAgaWYgKGIgPj0gMHgyMCAmJiBiIDw9IDB4N2UpIHsKLSAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKChjaGFyKSBiKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgoY2hh
cikgKCcwJyArICgoYiA+Pj4gNikgJiAzKSkpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
KGNoYXIpICgnMCcgKyAoKGIgPj4+IDMpICYgNykpKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKChjaGFyKSAoJzAnICsgKGIgJiA3KSkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVh
azsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBFc2NhcGVzIGJ5dGVzIGluIHRoZSBmb3JtYXQgdXNlZCBpbiBwcm90b2Nv
bCBidWZmZXIgdGV4dCBmb3JtYXQsIHdoaWNoCi0gICAqIGlzIHRoZSBzYW1lIGFzIHRoZSBmb3Jt
YXQgdXNlZCBmb3IgQyBzdHJpbmcgbGl0ZXJhbHMuICBBbGwgYnl0ZXMKLSAgICogdGhhdCBhcmUg
bm90IHByaW50YWJsZSA3LWJpdCBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLCBhcyB3ZWxs
IGFzCi0gICAqIGJhY2tzbGFzaCwgc2luZ2xlLXF1b3RlLCBhbmQgZG91YmxlLXF1b3RlIGNoYXJh
Y3RlcnMuICBDaGFyYWN0ZXJzIGZvcgotICAgKiB3aGljaCBubyBkZWZpbmVkIHNob3J0LWhhbmQg
ZXNjYXBlIHNlcXVlbmNlIGlzIGRlZmluZWQgd2lsbCBiZSBlc2NhcGVkCi0gICAqIHVzaW5nIDMt
ZGlnaXQgb2N0YWwgc2VxdWVuY2VzLgotICAgKi8KLSAgc3RhdGljIFN0cmluZyBlc2NhcGVCeXRl
cyhmaW5hbCBCeXRlU3RyaW5nIGlucHV0KSB7Ci0gICAgcmV0dXJuIGVzY2FwZUJ5dGVzKG5ldyBC
eXRlU2VxdWVuY2UoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBpbnQgc2l6ZSgp
IHsKLSAgICAgICAgcmV0dXJuIGlucHV0LnNpemUoKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIGJ5dGUgYnl0ZUF0KGludCBvZmZzZXQpIHsKLSAgICAgICAgcmV0dXJu
IGlucHV0LmJ5dGVBdChvZmZzZXQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0g
ICAqIExpa2Uge0BsaW5rICNlc2NhcGVCeXRlcyhCeXRlU3RyaW5nKX0sIGJ1dCB1c2VkIGZvciBi
eXRlIGFycmF5LgotICAgKi8KLSAgc3RhdGljIFN0cmluZyBlc2NhcGVCeXRlcyhmaW5hbCBieXRl
W10gaW5wdXQpIHsKLSAgICByZXR1cm4gZXNjYXBlQnl0ZXMobmV3IEJ5dGVTZXF1ZW5jZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGludCBzaXplKCkgewotICAgICAgICByZXR1
cm4gaW5wdXQubGVuZ3RoOwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
Ynl0ZSBieXRlQXQoaW50IG9mZnNldCkgewotICAgICAgICByZXR1cm4gaW5wdXRbb2Zmc2V0XTsK
LSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBMaWtlIHtAbGluayAjZXNjYXBl
Qnl0ZXMoQnl0ZVN0cmluZyl9LCBidXQgZXNjYXBlcyBhIHRleHQgc3RyaW5nLgotICAgKiBOb24t
QVNDSUkgY2hhcmFjdGVycyBhcmUgZmlyc3QgZW5jb2RlZCBhcyBVVEYtOCwgdGhlbiBlYWNoIGJ5
dGUgaXMgZXNjYXBlZAotICAgKiBpbmRpdmlkdWFsbHkgYXMgYSAzLWRpZ2l0IG9jdGFsIGVzY2Fw
ZS4gIFllcywgaXQncyB3ZWlyZC4KLSAgICovCi0gIHN0YXRpYyBTdHJpbmcgZXNjYXBlVGV4dChm
aW5hbCBTdHJpbmcgaW5wdXQpIHsKLSAgICByZXR1cm4gZXNjYXBlQnl0ZXMoQnl0ZVN0cmluZy5j
b3B5RnJvbVV0ZjgoaW5wdXQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBFc2NhcGUgZG91YmxlIHF1
b3RlcyBhbmQgYmFja3NsYXNoZXMgaW4gYSBTdHJpbmcgZm9yIHVuaWNvZGUgb3V0cHV0IG9mIGEg
bWVzc2FnZS4KLSAgICovCi0gIHN0YXRpYyBTdHJpbmcgZXNjYXBlRG91YmxlUXVvdGVzQW5kQmFj
a3NsYXNoZXMoZmluYWwgU3RyaW5nIGlucHV0KSB7Ci0gICAgcmV0dXJuIGlucHV0LnJlcGxhY2Uo
IlxcIiwgIlxcXFwiKS5yZXBsYWNlKCJcIiIsICJcXFwiIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9UZXh0Rm9ybWF0UGFy
c2VJbmZvVHJlZS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL1RleHRGb3JtYXRQYXJzZUluZm9UcmVlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJlY2Y5MTJlNjc3YjZhNjNlYjE2OWU0NjNkMjA4N2NjNjkwY2UyMjkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4v
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1RleHRGb3JtYXRQYXJzZUluZm9UcmVlLmphdmEKKysr
IC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGNvbS5nb29n
bGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yOwotCi1pbXBvcnQgamF2YS51
dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2
YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGls
Lk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OwotCi0KLS8qKgotICogRGF0YSBzdHJ1
Y3R1cmUgd2hpY2ggaXMgcG9wdWxhdGVkIHdpdGggdGhlIGxvY2F0aW9ucyBvZiBlYWNoIGZpZWxk
IHZhbHVlIHBhcnNlZCBmcm9tIHRoZSB0ZXh0LgotICoKLSAqIDxwPlRoZSBsb2NhdGlvbnMgb2Yg
cHJpbWFyeSBmaWVsZHMgdmFsdWVzIGFyZSByZXRyaWV2ZWQgYnkge0Bjb2RlIGdldExvY2F0aW9u
fSBvcgotICoge0Bjb2RlIGdldExvY2F0aW9uc30uICBUaGUgbG9jYXRpb25zIG9mIHN1YiBtZXNz
YWdlIHZhbHVlcyBhcmUgd2l0aGluIG5lc3RlZAotICoge0Bjb2RlIFRleHRGb3JtYXRQYXJzZUlu
Zm9UcmVlfXMgYW5kIGFyZSByZXRyaWV2ZSBieSB7QGdldE5lc3RlZFRyZWV9IG9yIHtjb2RlIEBn
ZXROZXN0ZWRUcmVlc30uCi0gKgotICogPHA+VGhlIHtAY29kZSBUZXh0Rm9ybWF0UGFyc2VJbmZv
VHJlZX0gaXMgY3JlYXRlZCBieSBhIEJ1aWxkZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXh0Rm9y
bWF0UGFyc2VJbmZvVHJlZSB7Ci0KLSAgLy8gRGVmaW5lcyBhIG1hcHBpbmcgYmV0d2VlbiBlYWNo
IGZpZWxkJ3MgZGVzY3JpcHRvciB0byB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgd2hlcmUKLSAgLy8g
aXRzIHZhbHVlKHMpIHdlcmUgd2FzIGVuY291bnRlcmVkLgotICBwcml2YXRlIE1hcDxGaWVsZERl
c2NyaXB0b3IsIExpc3Q8VGV4dEZvcm1hdFBhcnNlTG9jYXRpb24+PiBsb2NhdGlvbnNGcm9tRmll
bGQ7Ci0KLSAgLy8gRGVmaW5lcyBhIG1hcHBpbmcgYmV0d2VlbiBhIGZpZWxkJ3MgZGVzY3JpcHRv
ciB0byBhIGxpc3Qgb2YgVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWVzIGZvcgotICAvLyBzdWIgbWVz
c2FnZSBsb2NhdGlvbiBpbmZvcm1hdGlvbi4KLSAgTWFwPEZpZWxkRGVzY3JpcHRvciwgTGlzdDxU
ZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZT4+IHN1YnRyZWVzRnJvbUZpZWxkOwotCi0gIC8qKgotICAg
KiBDb25zdHJ1Y3QgYSB7QGNvZGUgVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWV9LgotICAgKgotICAg
KiBAcGFyYW0gbG9jYXRpb25zRnJvbUZpZWxkIGEgbWFwIG9mIGZpZWxkcyB0byBsb2NhdGlvbiBp
biB0aGUgc291cmNlIGNvZGUKLSAgICogQHBhcmFtIHN1YnRyZWVCdWlsZGVyc0Zyb21GaWVsZCBh
IG1hcCBvZiBmaWVsZHMgdG8gcGFyc2UgdHJlZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBidWlsZGVy
cwotICAgKi8KLSAgcHJpdmF0ZSBUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZSgKLSAgICAgIE1hcDxG
aWVsZERlc2NyaXB0b3IsIExpc3Q8VGV4dEZvcm1hdFBhcnNlTG9jYXRpb24+PiBsb2NhdGlvbnNG
cm9tRmllbGQsCi0gICAgICBNYXA8RmllbGREZXNjcmlwdG9yLCBMaXN0PFRleHRGb3JtYXRQYXJz
ZUluZm9UcmVlLkJ1aWxkZXI+PiBzdWJ0cmVlQnVpbGRlcnNGcm9tRmllbGQpIHsKLQotICAgIC8v
IFRoZSBtYXBzIGFyZSB1bm1vZGlmaWFibGUuICBUaGUgdmFsdWVzIGluIHRoZSBtYXBzIGFyZSB1
bm1vZGlmaWFibGUuCi0gICAgTWFwPEZpZWxkRGVzY3JpcHRvciwgTGlzdDxUZXh0Rm9ybWF0UGFy
c2VMb2NhdGlvbj4+IGxvY3MgPQotICAgICAgICBuZXcgSGFzaE1hcDxGaWVsZERlc2NyaXB0b3Is
IExpc3Q8VGV4dEZvcm1hdFBhcnNlTG9jYXRpb24+PigpOwotICAgIGZvciAoRW50cnk8RmllbGRE
ZXNjcmlwdG9yLCBMaXN0PFRleHRGb3JtYXRQYXJzZUxvY2F0aW9uPj4ga3YgOiBsb2NhdGlvbnNG
cm9tRmllbGQuZW50cnlTZXQoKSkgewotICAgICAgbG9jcy5wdXQoa3YuZ2V0S2V5KCksIENvbGxl
Y3Rpb25zLnVubW9kaWZpYWJsZUxpc3Qoa3YuZ2V0VmFsdWUoKSkpOwotICAgIH0KLSAgICB0aGlz
LmxvY2F0aW9uc0Zyb21GaWVsZCA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChsb2NzKTsK
LQotICAgIE1hcDxGaWVsZERlc2NyaXB0b3IsIExpc3Q8VGV4dEZvcm1hdFBhcnNlSW5mb1RyZWU+
PiBzdWJzID0KLSAgICAgICAgbmV3IEhhc2hNYXA8RmllbGREZXNjcmlwdG9yLCBMaXN0PFRleHRG
b3JtYXRQYXJzZUluZm9UcmVlPj4oKTsKLSAgICBmb3IgKEVudHJ5PEZpZWxkRGVzY3JpcHRvciwg
TGlzdDxCdWlsZGVyPj4ga3YgOiBzdWJ0cmVlQnVpbGRlcnNGcm9tRmllbGQuZW50cnlTZXQoKSkg
ewotICAgICAgTGlzdDxUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZT4gc3VibWVzc2FnZXNPZkZpZWxk
ID0gbmV3IEFycmF5TGlzdDxUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZT4oKTsKLSAgICAgIGZvciAo
QnVpbGRlciBzdWJCdWlsZGVyIDoga3YuZ2V0VmFsdWUoKSkgewotICAgICAgICBzdWJtZXNzYWdl
c09mRmllbGQuYWRkKHN1YkJ1aWxkZXIuYnVpbGQoKSk7Ci0gICAgICB9Ci0gICAgICBzdWJzLnB1
dChrdi5nZXRLZXkoKSwgQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChzdWJtZXNzYWdlc09m
RmllbGQpKTsKLSAgICB9Ci0gICAgdGhpcy5zdWJ0cmVlc0Zyb21GaWVsZCA9IENvbGxlY3Rpb25z
LnVubW9kaWZpYWJsZU1hcChzdWJzKTsKLSAgfQotCi0gLyoqCi0gICogUmV0cmlldmUgYWxsIHRo
ZSBsb2NhdGlvbnMgb2YgYSBmaWVsZC4KLSAgKgotICAqIEBwYXJhbSBmaWVsZERlc2NyaXB0b3Ig
dGhlIHRoZSBAe2xpbmsgRmllbGREZXNjcmlwdG9yfSBvZiB0aGUgZGVzaXJlZCBmaWVsZAotICAq
IEByZXR1cm4gYSBsaXN0IG9mIHRoZSBsb2NhdGlvbnMgb2YgdmFsdWVzIG9mIHRoZSBmaWVsZC4g
IElmIHRoZXJlIGFyZSBub3QgdmFsdWVzCi0gICogICAgICAgICBvciB0aGUgZmllbGQgZG9lc24n
dCBleGlzdCwgYW4gZW1wdHkgbGlzdCBpcyByZXR1cm5lZC4KLSAgKi8KLSAgcHVibGljIExpc3Q8
VGV4dEZvcm1hdFBhcnNlTG9jYXRpb24+IGdldExvY2F0aW9ucyhmaW5hbCBGaWVsZERlc2NyaXB0
b3IgZmllbGREZXNjcmlwdG9yKSB7Ci0gICAgTGlzdDxUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbj4g
cmVzdWx0ID0gbG9jYXRpb25zRnJvbUZpZWxkLmdldChmaWVsZERlc2NyaXB0b3IpOwotICAgIHJl
dHVybiAocmVzdWx0ID09IG51bGwpID8gQ29sbGVjdGlvbnMuPFRleHRGb3JtYXRQYXJzZUxvY2F0
aW9uPmVtcHR5TGlzdCgpIDogcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgbG9j
YXRpb24gaW4gdGhlIHNvdXJjZSBvZiBhIGZpZWxkJ3MgdmFsdWUuCi0gICAqCi0gICAqIDxwPlJl
dHVybnMgdGhlIHtAbGluayBUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbn0gZm9yIGluZGV4LXRoIHZh
bHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgcGFyc2VkCi0gICAqIHRleHQuCi0gICAqCi0gICAqIEBw
YXJhbSBmaWVsZERlc2NyaXB0b3IgdGhlIEB7bGluayBGaWVsZERlc2NyaXB0b3J9IG9mIHRoZSBk
ZXNpcmVkIGZpZWxkCi0gICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIHZhbHVlLgot
ICAgKiBAcmV0dXJuIHRoZSB7QGxpbmsgVGV4dEZvcm1hdFBhcnNlTG9jYXRpb259IG9mIHRoZSB2
YWx1ZQotICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpbmRleCBpcyBvdXQg
b2YgcmFuZ2UKLSAgICovCi0gIHB1YmxpYyBUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbiBnZXRMb2Nh
dGlvbihmaW5hbCBGaWVsZERlc2NyaXB0b3IgZmllbGREZXNjcmlwdG9yLCBpbnQgaW5kZXgpIHsK
LSAgICByZXR1cm4gZ2V0RnJvbUxpc3QoZ2V0TG9jYXRpb25zKGZpZWxkRGVzY3JpcHRvciksIGlu
ZGV4LCBmaWVsZERlc2NyaXB0b3IpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHJpZXZlIGEgbGlz
dCBvZiBhbGwgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIHRyZWVzIGZvciBhIHN1YiBtZXNzYWdl
IGZpZWxkLgotICAgKgotICAgKiBAcGFyYW0gZmllbGREZXNjcmlwdG9yIHRoZSBAe2xpbmsgRmll
bGREZXNjcmlwdG9yfSBvZiB0aGUgZGVzaXJlZCBmaWVsZAotICAgKiBAcmV0dXJuIEEgbGlzdCBv
ZiB7QGxpbmsgVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWV9Ci0gICAqLwotICBwdWJsaWMgTGlzdDxU
ZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZT4gZ2V0TmVzdGVkVHJlZXMoZmluYWwgRmllbGREZXNjcmlw
dG9yIGZpZWxkRGVzY3JpcHRvcikgewotICAgIExpc3Q8VGV4dEZvcm1hdFBhcnNlSW5mb1RyZWU+
IHJlc3VsdCA9IHN1YnRyZWVzRnJvbUZpZWxkLmdldChmaWVsZERlc2NyaXB0b3IpOwotICAgIHJl
dHVybiByZXN1bHQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLjxUZXh0Rm9ybWF0UGFyc2VJbmZvVHJl
ZT5lbXB0eUxpc3QoKSA6IHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBw
YXJzZSBpbmZvIHRyZWUgZm9yIHRoZSBnaXZlbiBmaWVsZCwgd2hpY2ggbXVzdCBiZSBhIG1lc3Nh
Z2UgdHlwZS4KLSAgICoKLSAgICogQHBhcmFtIGZpZWxkRGVzY3JpcHRvciB0aGUgQHtsaW5rIEZp
ZWxkRGVzY3JpcHRvcn0gb2YgdGhlIGRlc2lyZWQgc3ViIG1lc3NhZ2UKLSAgICogQHBhcmFtIGlu
ZGV4IHRoZSBpbmRleCBvZiBtZXNzYWdlIHZhbHVlLgotICAgKiBAcmV0dXJuIHRoZSB7QGNvZGUg
UGFyc2VJbmZvVHJlZX0gb2YgdGhlIG1lc3NhZ2UgdmFsdWUuIHtAY29kZSBudWxsfSBpcyByZXR1
cm5lZCBpZiB0aGUgZmllbGQKLSAgICogICAgICAgICBkb2Vzbid0IGV4aXN0IG9yIHRoZSBpbmRl
eCBpcyBvdXQgb2YgcmFuZ2UuCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u
IGlmIGluZGV4IGlzIG91dCBvZiByYW5nZQotICAgKi8KLSAgcHVibGljIFRleHRGb3JtYXRQYXJz
ZUluZm9UcmVlIGdldE5lc3RlZFRyZWUoZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkRGVzY3Jp
cHRvciwgaW50IGluZGV4KSB7Ci0gICAgcmV0dXJuIGdldEZyb21MaXN0KGdldE5lc3RlZFRyZWVz
KGZpZWxkRGVzY3JpcHRvciksIGluZGV4LCBmaWVsZERlc2NyaXB0b3IpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIENyZWF0ZSBhIGJ1aWxkZXIgZm9yIGEge0Bjb2RlIFBhcnNlSW5mb1RyZWV9LgotICAg
KgotICAgKiBAcmV0dXJuIHRoZSBidWlsZGVyCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJ1aWxk
ZXIgYnVpbGRlcigpIHsKLSAgICByZXR1cm4gbmV3IEJ1aWxkZXIoKTsKLSAgfQotCi0gIHByaXZh
dGUgc3RhdGljIDxUPiBUIGdldEZyb21MaXN0KExpc3Q8VD4gbGlzdCwgaW50IGluZGV4LCBGaWVs
ZERlc2NyaXB0b3IgZmllbGREZXNjcmlwdG9yKSB7Ci0gICAgaWYgKGluZGV4ID49IGxpc3Quc2l6
ZSgpIHx8IGluZGV4IDwgMCkgIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNl
cHRpb24oU3RyaW5nLmZvcm1hdCgiSWxsZWdhbCBpbmRleCBmaWVsZDogJXMsIGluZGV4ICVkIiwK
LSAgICAgICAgICBmaWVsZERlc2NyaXB0b3IgPT0gbnVsbCA/ICI8bnVsbD4iIDogZmllbGREZXNj
cmlwdG9yLmdldE5hbWUoKSwgaW5kZXgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3QuZ2V0KGlu
ZGV4KTsKLSAgfQotCi0gIC8qKgotICAgKiBCdWlsZGVyIGZvciBhIHtAbGluayBUZXh0Rm9ybWF0
UGFyc2VJbmZvVHJlZX0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewot
Ci0gICAgcHJpdmF0ZSBNYXA8RmllbGREZXNjcmlwdG9yLCBMaXN0PFRleHRGb3JtYXRQYXJzZUxv
Y2F0aW9uPj4gbG9jYXRpb25zRnJvbUZpZWxkOwotCi0gICAgLy8gRGVmaW5lcyBhIG1hcHBpbmcg
YmV0d2VlbiBhIGZpZWxkJ3MgZGVzY3JpcHRvciB0byBhIGxpc3Qgb2YgUGFyc2VJbmZvVHJlZXMg
YnVpbGRlcnMgZm9yCi0gICAgLy8gc3ViIG1lc3NhZ2UgbG9jYXRpb24gaW5mb3JtYXRpb24uCi0g
ICAgcHJpdmF0ZSBNYXA8RmllbGREZXNjcmlwdG9yLCBMaXN0PEJ1aWxkZXI+PiBzdWJ0cmVlQnVp
bGRlcnNGcm9tRmllbGQ7Ci0KLSAgICAgLyoqCi0gICAgICogQ3JlYXRlIGEgcm9vdCBsZXZlbCB7
QFBhcnNlSW5mb1RyZWV9IGJ1aWxkZXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBCdWlsZGVyKCkg
ewotICAgICAgbG9jYXRpb25zRnJvbUZpZWxkID0gbmV3IEhhc2hNYXA8RmllbGREZXNjcmlwdG9y
LCBMaXN0PFRleHRGb3JtYXRQYXJzZUxvY2F0aW9uPj4oKTsKLSAgICAgIHN1YnRyZWVCdWlsZGVy
c0Zyb21GaWVsZCA9IG5ldyBIYXNoTWFwPEZpZWxkRGVzY3JpcHRvciwgTGlzdDxCdWlsZGVyPj4o
KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWNvcmQgdGhlIHN0YXJ0aW5nIGxvY2F0aW9u
IG9mIGEgc2luZ2xlIHZhbHVlIGZvciBhIGZpZWxkLgotICAgICAqCi0gICAgICogQHBhcmFtIGZp
ZWxkRGVzY3JpcHRvciB0aGUgZmllbGQKLSAgICAgKiBAcGFyYW0gbG9jYXRpb24gc291cmNlIGNv
ZGUgbG9jYXRpb24gaW5mb3JtYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQnVpbGRlciBzZXRM
b2NhdGlvbigKLSAgICAgICAgZmluYWwgRmllbGREZXNjcmlwdG9yIGZpZWxkRGVzY3JpcHRvciwg
VGV4dEZvcm1hdFBhcnNlTG9jYXRpb24gbG9jYXRpb24pIHsKLSAgICAgIExpc3Q8VGV4dEZvcm1h
dFBhcnNlTG9jYXRpb24+IGZpZWxkTG9jYXRpb25zID0gbG9jYXRpb25zRnJvbUZpZWxkLmdldChm
aWVsZERlc2NyaXB0b3IpOwotICAgICAgaWYgKGZpZWxkTG9jYXRpb25zID09IG51bGwpIHsKLSAg
ICAgICAgZmllbGRMb2NhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PFRleHRGb3JtYXRQYXJzZUxvY2F0
aW9uPigpOwotICAgICAgICBsb2NhdGlvbnNGcm9tRmllbGQucHV0KGZpZWxkRGVzY3JpcHRvciwg
ZmllbGRMb2NhdGlvbnMpOwotICAgICAgfQotICAgICAgZmllbGRMb2NhdGlvbnMuYWRkKGxvY2F0
aW9uKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCBm
b3IgYSBzdWIgbWVzc2FnZS4KLSAgICAgKgotICAgICAqIDxwPkEgbmV3IGJ1aWxkZXIgaXMgY3Jl
YXRlZCBmb3IgYSBzdWIgbWVzc2FnZS4gVGhlIGJ1aWxkZXIgdGhhdCBpcyByZXR1cm5lZCBpcyBh
IG5ldyBidWlsZGVyLgotICAgICAqIFRoZSByZXR1cm4gaXMgPGVtcGg+bm90PC9lbXBoPiB0aGUg
aW52b2tlZCB7QGNvZGUgYnVpbGRlci5nZXRCdWlsZGVyRm9yU3ViTWVzc2FnZUZpZWxkfS4KLSAg
ICAgKgotICAgICAqIEBwYXJhbSBmaWVsZERlc2NyaXB0b3IgdGhlIGZpZWxkIHdob3NlIHZhbHVl
IGlzIHRoZSBzdWJtZXNzYWdlCi0gICAgICogQHJldHVybiBhIG5ldyBCdWlsZGVyIGZvciB0aGUg
c3ViIG1lc3NhZ2UKLSAgICAgKi8KLSAgICBwdWJsaWMgQnVpbGRlciBnZXRCdWlsZGVyRm9yU3Vi
TWVzc2FnZUZpZWxkKGZpbmFsIEZpZWxkRGVzY3JpcHRvciBmaWVsZERlc2NyaXB0b3IpIHsKLSAg
ICAgIExpc3Q8QnVpbGRlcj4gc3VibWVzc2FnZUJ1aWxkZXJzID0gc3VidHJlZUJ1aWxkZXJzRnJv
bUZpZWxkLmdldChmaWVsZERlc2NyaXB0b3IpOwotICAgICAgaWYgKHN1Ym1lc3NhZ2VCdWlsZGVy
cyA9PSBudWxsKSB7Ci0gICAgICAgIHN1Ym1lc3NhZ2VCdWlsZGVycyA9IG5ldyBBcnJheUxpc3Q8
QnVpbGRlcj4oKTsKLSAgICAgICAgc3VidHJlZUJ1aWxkZXJzRnJvbUZpZWxkLnB1dChmaWVsZERl
c2NyaXB0b3IsIHN1Ym1lc3NhZ2VCdWlsZGVycyk7Ci0gICAgICB9Ci0gICAgICBCdWlsZGVyIHN1
YnRyZWVCdWlsZGVyID0gbmV3IEJ1aWxkZXIoKTsKLSAgICAgIHN1Ym1lc3NhZ2VCdWlsZGVycy5h
ZGQoc3VidHJlZUJ1aWxkZXIpOwotICAgICAgcmV0dXJuIHN1YnRyZWVCdWlsZGVyOwotICAgIH0K
LQotICAgIC8qKgotICAgICAqIEJ1aWxkIHRoZSB7QGNvZGUgVGV4dEZvcm1hdFBhcnNlSW5mb1Ry
ZWV9LgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUge0Bjb2RlIFRleHRGb3JtYXRQYXJzZUlu
Zm9UcmVlfQotICAgICAqLwotICAgIHB1YmxpYyBUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZSBidWls
ZCgpIHsKLSAgICAgIHJldHVybiBuZXcgVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWUobG9jYXRpb25z
RnJvbUZpZWxkLCBzdWJ0cmVlQnVpbGRlcnNGcm9tRmllbGQpOwotICAgIH0KLSAgfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1RleHRG
b3JtYXRQYXJzZUxvY2F0aW9uLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvVGV4dEZvcm1hdFBhcnNlTG9jYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2NlMjg2ZTEwZmI0OTkxMjkxMWFjOTk3ZWJmMzAyOTU5YTNhYzViMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9z
cmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVGV4dEZvcm1hdFBhcnNlTG9jYXRpb24u
amF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQg
amF2YS51dGlsLkFycmF5czsKLQotLyoqCi0gKiBBIGxvY2F0aW9uIGluIHRoZSBzb3VyY2UgY29k
ZS4KLSAqCi0gKiA8cD5BIGxvY2F0aW9uIGlzIHRoZSBzdGFydGluZyBsaW5lIG51bWJlciBhbmQg
c3RhcnRpbmcgY29sdW1uIG51bWJlci4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFRleHRGb3Jt
YXRQYXJzZUxvY2F0aW9uIHsKLQotICAvKioKLSAgICogVGhlIGVtcHR5IGxvY2F0aW9uLgotICAg
Ki8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbiBFTVBUWSA9
IG5ldyBUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbigtMSwgLTEpOwotCi0gIC8qKgotICAgKiBDcmVh
dGUgYSBsb2NhdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIGxpbmUgdGhlIHN0YXJ0aW5nIGxpbmUg
bnVtYmVyCi0gICAqIEBwYXJhbSBjb2x1bW4gdGhlIHN0YXJ0aW5nIGNvbHVtbiBudW1iZXIKLSAg
ICogQHJldHVybiBhIHtAY29kZSBQYXJzZUxvY2F0aW9ufQotICAgKi8KLSAgc3RhdGljIFRleHRG
b3JtYXRQYXJzZUxvY2F0aW9uIGNyZWF0ZShpbnQgbGluZSwgaW50IGNvbHVtbikgewotICAgIGlm
IChsaW5lID09IC0xICYmIGNvbHVtbiA9PSAtMSkgewotICAgICAgcmV0dXJuIEVNUFRZOwotICAg
IH0KLSAgICBpZiAobGluZSA8IDAgfHwgY29sdW1uIDwgMCkgewotICAgICAgdGhyb3cgbmV3IEls
bGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJsaW5lIGFu
ZCBjb2x1bW4gdmFsdWVzIG11c3QgYmUgPj0gMDogbGluZSAlZCwgY29sdW1uOiAlZCIsIGxpbmUs
IGNvbHVtbikpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFRleHRGb3JtYXRQYXJzZUxvY2F0aW9u
KGxpbmUsIGNvbHVtbik7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGludCBsaW5lOwotICBwcml2
YXRlIGZpbmFsIGludCBjb2x1bW47Ci0KLSAgcHJpdmF0ZSBUZXh0Rm9ybWF0UGFyc2VMb2NhdGlv
bihpbnQgbGluZSwgaW50IGNvbHVtbikgewotICAgIHRoaXMubGluZSA9IGxpbmU7Ci0gICAgdGhp
cy5jb2x1bW4gPSBjb2x1bW47Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldExpbmUoKSB7Ci0gICAg
cmV0dXJuIGxpbmU7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldENvbHVtbigpIHsKLSAgICByZXR1
cm4gY29sdW1uOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmco
KSB7Ci0gICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIlBhcnNlTG9jYXRpb257bGluZT0lZCwgY29s
dW1uPSVkfSIsIGxpbmUsIGNvbHVtbik7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJv
b2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7Ci0gICAgaWYgKG8gPT0gdGhpcykgewotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICghKG8gaW5zdGFuY2VvZiBUZXh0Rm9ybWF0UGFyc2VM
b2NhdGlvbikpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgVGV4dEZvcm1hdFBh
cnNlTG9jYXRpb24gdGhhdCA9IChUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbikgbzsKLSAgICByZXR1
cm4gKHRoaXMubGluZSA9PSB0aGF0LmdldExpbmUoKSkKLSAgICAgICAgICYmICh0aGlzLmNvbHVt
biA9PSB0aGF0LmdldENvbHVtbigpKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50
IGhhc2hDb2RlKCkgewotICAgIGludFtdIHZhbHVlcyA9IHtsaW5lLCBjb2x1bW59OwotICAgIHJl
dHVybiBBcnJheXMuaGFzaENvZGUodmFsdWVzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1VuaW5pdGlhbGl6ZWRNZXNzYWdl
RXhjZXB0aW9uLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvVW5pbml0aWFsaXplZE1lc3NhZ2VFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTcxNGMwNjNhOTdmMTU0MWVhODkwZjE1NzBjOTZiYmNmNjU1N2QzOC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMv
bWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVW5pbml0aWFsaXplZE1lc3NhZ2VFeGNlcHRp
b24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9y
dCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgot
ICogVGhyb3duIHdoZW4gYXR0ZW1wdGluZyB0byBidWlsZCBhIHByb3RvY29sIG1lc3NhZ2UgdGhh
dCBpcyBtaXNzaW5nIHJlcXVpcmVkCi0gKiBmaWVsZHMuICBUaGlzIGlzIGEge0Bjb2RlIFJ1bnRp
bWVFeGNlcHRpb259IGJlY2F1c2UgaXQgbm9ybWFsbHkgcmVwcmVzZW50cwotICogYSBwcm9ncmFt
bWluZyBlcnJvcjogIGl0IGhhcHBlbnMgd2hlbiBzb21lIGNvZGUgd2hpY2ggY29uc3RydWN0cyBh
IG1lc3NhZ2UKLSAqIGZhaWxzIHRvIHNldCBhbGwgdGhlIGZpZWxkcy4gIHtAY29kZSBwYXJzZUZy
b20oKX0gbWV0aG9kcyA8Yj5kbyBub3Q8L2I+Ci0gKiB0aHJvdyB0aGlzOyB0aGV5IHRocm93IGFu
IHtAbGluayBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb259IGlmCi0gKiByZXF1aXJlZCBm
aWVsZHMgYXJlIG1pc3NpbmcsIGJlY2F1c2UgaXQgaXMgbm90IGEgcHJvZ3JhbW1pbmcgZXJyb3Ig
dG8KLSAqIHJlY2VpdmUgYW4gaW5jb21wbGV0ZSBtZXNzYWdlLiAgSW4gb3RoZXIgd29yZHMsCi0g
KiB7QGNvZGUgVW5pbml0aWFsaXplZE1lc3NhZ2VFeGNlcHRpb259IHNob3VsZCBuZXZlciBiZSB0
aHJvd24gYnkgY29ycmVjdAotICogY29kZSwgYnV0IHtAY29kZSBJbnZhbGlkUHJvdG9jb2xCdWZm
ZXJFeGNlcHRpb259IG1pZ2h0IGJlLgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdvb2dsZS5jb20g
S2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBjbGFzcyBVbmluaXRpYWxpemVkTWVzc2FnZUV4Y2Vw
dGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24gewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBs
b25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNzQ2NjkyOTk1MzM3NDg4MzUwN0w7Ci0KLSAgcHVibGlj
IFVuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uKGZpbmFsIE1lc3NhZ2VMaXRlIG1lc3NhZ2Up
IHsKLSAgICBzdXBlcigiTWVzc2FnZSB3YXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuICAoTGl0
ZSBydW50aW1lIGNvdWxkIG5vdCAiICsKLSAgICAgICAgICAiZGV0ZXJtaW5lIHdoaWNoIGZpZWxk
cyB3ZXJlIG1pc3NpbmcpLiIpOwotICAgIG1pc3NpbmdGaWVsZHMgPSBudWxsOwotICB9Ci0KLSAg
cHVibGljIFVuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uKGZpbmFsIExpc3Q8U3RyaW5nPiBt
aXNzaW5nRmllbGRzKSB7Ci0gICAgc3VwZXIoYnVpbGREZXNjcmlwdGlvbihtaXNzaW5nRmllbGRz
KSk7Ci0gICAgdGhpcy5taXNzaW5nRmllbGRzID0gbWlzc2luZ0ZpZWxkczsKLSAgfQotCi0gIHBy
aXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IG1pc3NpbmdGaWVsZHM7Ci0KLSAgLyoqCi0gICAqIEdl
dCBhIGxpc3Qgb2YgaHVtYW4tcmVhZGFibGUgbmFtZXMgb2YgcmVxdWlyZWQgZmllbGRzIG1pc3Np
bmcgZnJvbSB0aGlzCi0gICAqIG1lc3NhZ2UuICBFYWNoIG5hbWUgaXMgYSBmdWxsIHBhdGggdG8g
YSBmaWVsZCwgZS5nLiAiZm9vLmJhcls1XS5iYXoiLgotICAgKiBSZXR1cm5zIG51bGwgaWYgdGhl
IGxpdGUgcnVudGltZSB3YXMgdXNlZCwgc2luY2UgaXQgbGFja3MgdGhlIGFiaWxpdHkgdG8KLSAg
ICogZmluZCBtaXNzaW5nIGZpZWxkcy4KLSAgICovCi0gIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0
TWlzc2luZ0ZpZWxkcygpIHsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlz
dChtaXNzaW5nRmllbGRzKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0cyB0aGlzIGV4Y2Vw
dGlvbiB0byBhbiB7QGxpbmsgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9ufS4KLSAgICog
V2hlbiBhIHBhcnNlZCBtZXNzYWdlIGlzIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLCB0aGlzIHNo
b3VsZCBiZSB0aHJvd24KLSAgICogaW5zdGVhZCBvZiB7QGNvZGUgVW5pbml0aWFsaXplZE1lc3Nh
Z2VFeGNlcHRpb259LgotICAgKi8KLSAgcHVibGljIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbiBhc0ludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigpIHsKLSAgICByZXR1cm4gbmV3
IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbihnZXRNZXNzYWdlKCkpOwotICB9Ci0KLSAg
LyoqIENvbnN0cnVjdCB0aGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciB0aGlzIGV4Y2VwdGlvbi4g
Ki8KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGJ1aWxkRGVzY3JpcHRpb24oZmluYWwgTGlzdDxT
dHJpbmc+IG1pc3NpbmdGaWVsZHMpIHsKLSAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIGRlc2NyaXB0
aW9uID0KLSAgICAgIG5ldyBTdHJpbmdCdWlsZGVyKCJNZXNzYWdlIG1pc3NpbmcgcmVxdWlyZWQg
ZmllbGRzOiAiKTsKLSAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKLSAgICBmb3IgKGZpbmFsIFN0
cmluZyBmaWVsZCA6IG1pc3NpbmdGaWVsZHMpIHsKLSAgICAgIGlmIChmaXJzdCkgewotICAgICAg
ICBmaXJzdCA9IGZhbHNlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVzY3JpcHRpb24uYXBw
ZW5kKCIsICIpOwotICAgICAgfQotICAgICAgZGVzY3JpcHRpb24uYXBwZW5kKGZpZWxkKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uLnRvU3RyaW5nKCk7Ci0gIH0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Vbmtub3duRmll
bGRTZXQuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9V
bmtub3duRmllbGRTZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkwNjQy
MGRhMWE2ZWEwNWJiZDRmMzZiNDg4MGY4NGEyZWVjMDBlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvVW5rbm93bkZpZWxkU2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDM1
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNv
bS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkFic3RyYWN0
TWVzc2FnZUxpdGUuQnVpbGRlci5MaW1pdGVkSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZhLmlv
LklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5p
by5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZh
LnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5UcmVl
TWFwOwotCi0vKioKLSAqIHtAY29kZSBVbmtub3duRmllbGRTZXR9IGlzIHVzZWQgdG8ga2VlcCB0
cmFjayBvZiBmaWVsZHMgd2hpY2ggd2VyZSBzZWVuIHdoZW4KLSAqIHBhcnNpbmcgYSBwcm90b2Nv
bCBtZXNzYWdlIGJ1dCB3aG9zZSBmaWVsZCBudW1iZXJzIG9yIHR5cGVzIGFyZSB1bnJlY29nbml6
ZWQuCi0gKiBUaGlzIG1vc3QgZnJlcXVlbnRseSBvY2N1cnMgd2hlbiBuZXcgZmllbGRzIGFyZSBh
ZGRlZCB0byBhIG1lc3NhZ2UgdHlwZQotICogYW5kIHRoZW4gbWVzc2FnZXMgY29udGFpbmluZyB0
aG9zZSBmaWVsZHMgYXJlIHJlYWQgYnkgb2xkIHNvZnR3YXJlIHRoYXQgd2FzCi0gKiBjb21waWxl
ZCBiZWZvcmUgdGhlIG5ldyB0eXBlcyB3ZXJlIGFkZGVkLgotICoKLSAqIDxwPkV2ZXJ5IHtAbGlu
ayBNZXNzYWdlfSBjb250YWlucyBhbiB7QGNvZGUgVW5rbm93bkZpZWxkU2V0fSAoYW5kIGV2ZXJ5
Ci0gKiB7QGxpbmsgTWVzc2FnZS5CdWlsZGVyfSBjb250YWlucyBhbiB7QGxpbmsgQnVpbGRlcn0p
LgotICoKLSAqIDxwPk1vc3QgdXNlcnMgd2lsbCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIGNsYXNz
LgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdvb2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1
YmxpYyBmaW5hbCBjbGFzcyBVbmtub3duRmllbGRTZXQgaW1wbGVtZW50cyBNZXNzYWdlTGl0ZSB7
Ci0gIHByaXZhdGUgVW5rbm93bkZpZWxkU2V0KCkge30KLQotICAvKiogQ3JlYXRlIGEgbmV3IHtA
bGluayBCdWlsZGVyfS4gKi8KLSAgcHVibGljIHN0YXRpYyBCdWlsZGVyIG5ld0J1aWxkZXIoKSB7
Ci0gICAgcmV0dXJuIEJ1aWxkZXIuY3JlYXRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRl
IGEgbmV3IHtAbGluayBCdWlsZGVyfSBhbmQgaW5pdGlhbGl6ZSBpdCB0byBiZSBhIGNvcHkKLSAg
ICogb2Yge0Bjb2RlIGNvcHlGcm9tfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBu
ZXdCdWlsZGVyKGZpbmFsIFVua25vd25GaWVsZFNldCBjb3B5RnJvbSkgewotICAgIHJldHVybiBu
ZXdCdWlsZGVyKCkubWVyZ2VGcm9tKGNvcHlGcm9tKTsKLSAgfQotCi0gIC8qKiBHZXQgYW4gZW1w
dHkge0Bjb2RlIFVua25vd25GaWVsZFNldH0uICovCi0gIHB1YmxpYyBzdGF0aWMgVW5rbm93bkZp
ZWxkU2V0IGdldERlZmF1bHRJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gZGVmYXVsdEluc3RhbmNl
OwotICB9Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgVW5rbm93bkZpZWxkU2V0IGdldERlZmF1bHRJ
bnN0YW5jZUZvclR5cGUoKSB7Ci0gICAgcmV0dXJuIGRlZmF1bHRJbnN0YW5jZTsKLSAgfQotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBVbmtub3duRmllbGRTZXQgZGVmYXVsdEluc3RhbmNlID0KLSAg
ICBuZXcgVW5rbm93bkZpZWxkU2V0KENvbGxlY3Rpb25zLjxJbnRlZ2VyLCBGaWVsZD5lbXB0eU1h
cCgpKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0IGFuIHtAY29kZSBVbmtub3duRmllbGRTZXR9
IGFyb3VuZCB0aGUgZ2l2ZW4gbWFwLiAgVGhlIG1hcCBpcwotICAgKiBleHBlY3RlZCB0byBiZSBp
bW11dGFibGUuCi0gICAqLwotICBwcml2YXRlIFVua25vd25GaWVsZFNldChmaW5hbCBNYXA8SW50
ZWdlciwgRmllbGQ+IGZpZWxkcykgewotICAgIHRoaXMuZmllbGRzID0gZmllbGRzOwotICB9Ci0g
IHByaXZhdGUgTWFwPEludGVnZXIsIEZpZWxkPiBmaWVsZHM7Ci0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIGJvb2xlYW4gZXF1YWxzKGZpbmFsIE9iamVjdCBvdGhlcikgewotICAgIGlmICh0aGlz
ID09IG90aGVyKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIChvdGhl
ciBpbnN0YW5jZW9mIFVua25vd25GaWVsZFNldCkgJiYKLSAgICAgICAgICAgZmllbGRzLmVxdWFs
cygoKFVua25vd25GaWVsZFNldCkgb3RoZXIpLmZpZWxkcyk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICByZXR1cm4gZmllbGRzLmhhc2hDb2RlKCk7
Ci0gIH0KLQotICAvKiogR2V0IGEgbWFwIG9mIGZpZWxkcyBpbiB0aGUgc2V0IGJ5IG51bWJlci4g
Ki8KLSAgcHVibGljIE1hcDxJbnRlZ2VyLCBGaWVsZD4gYXNNYXAoKSB7Ci0gICAgcmV0dXJuIGZp
ZWxkczsKLSAgfQotCi0gIC8qKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyIGlzIHBy
ZXNlbnQgaW4gdGhlIHNldC4gKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzRmllbGQoZmluYWwgaW50
IG51bWJlcikgewotICAgIHJldHVybiBmaWVsZHMuY29udGFpbnNLZXkobnVtYmVyKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBHZXQgYSBmaWVsZCBieSBudW1iZXIuICBSZXR1cm5zIGFuIGVtcHR5IGZp
ZWxkIGlmIG5vdCBwcmVzZW50LiAgTmV2ZXIKLSAgICogcmV0dXJucyB7QGNvZGUgbnVsbH0uCi0g
ICAqLwotICBwdWJsaWMgRmllbGQgZ2V0RmllbGQoZmluYWwgaW50IG51bWJlcikgewotICAgIGZp
bmFsIEZpZWxkIHJlc3VsdCA9IGZpZWxkcy5nZXQobnVtYmVyKTsKLSAgICByZXR1cm4gKHJlc3Vs
dCA9PSBudWxsKSA/IEZpZWxkLmdldERlZmF1bHRJbnN0YW5jZSgpIDogcmVzdWx0OwotICB9Ci0K
LSAgLyoqIFNlcmlhbGl6ZXMgdGhlIHNldCBhbmQgd3JpdGVzIGl0IHRvIHtAY29kZSBvdXRwdXR9
LiAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgd3JpdGVUbyhmaW5hbCBDb2RlZE91dHB1
dFN0cmVhbSBvdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgZm9yIChmaW5hbCBNYXAu
RW50cnk8SW50ZWdlciwgRmllbGQ+IGVudHJ5IDogZmllbGRzLmVudHJ5U2V0KCkpIHsKLSAgICAg
IGVudHJ5LmdldFZhbHVlKCkud3JpdGVUbyhlbnRyeS5nZXRLZXkoKSwgb3V0cHV0KTsKLSAgICB9
Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVydHMgdGhlIHNldCB0byBhIHN0cmluZyBpbiBwcm90
b2NvbCBidWZmZXIgdGV4dCBmb3JtYXQuIFRoaXMgaXMKLSAgICoganVzdCBhIHRyaXZpYWwgd3Jh
cHBlciBhcm91bmQKLSAgICoge0BsaW5rIFRleHRGb3JtYXQjcHJpbnRUb1N0cmluZyhVbmtub3du
RmllbGRTZXQpfS4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5n
KCkgewotICAgIHJldHVybiBUZXh0Rm9ybWF0LnByaW50VG9TdHJpbmcodGhpcyk7Ci0gIH0KLQot
ICAvKioKLSAgICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSB0byBhIHtAY29kZSBCeXRlU3RyaW5n
fSBhbmQgcmV0dXJucyBpdC4gVGhpcyBpcwotICAgKiBqdXN0IGEgdHJpdmlhbCB3cmFwcGVyIGFy
b3VuZCB7QGxpbmsgI3dyaXRlVG8oQ29kZWRPdXRwdXRTdHJlYW0pfS4KLSAgICovCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgQnl0ZVN0cmluZyB0b0J5dGVTdHJpbmcoKSB7Ci0gICAgdHJ5IHsKLSAg
ICAgIGZpbmFsIEJ5dGVTdHJpbmcuQ29kZWRCdWlsZGVyIG91dCA9Ci0gICAgICAgIEJ5dGVTdHJp
bmcubmV3Q29kZWRCdWlsZGVyKGdldFNlcmlhbGl6ZWRTaXplKCkpOwotICAgICAgd3JpdGVUbyhv
dXQuZ2V0Q29kZWRPdXRwdXQoKSk7Ci0gICAgICByZXR1cm4gb3V0LmJ1aWxkKCk7Ci0gICAgfSBj
YXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oCi0gICAgICAgICJTZXJpYWxpemluZyB0byBhIEJ5dGVTdHJpbmcgdGhyZXcgYW4gSU9F
eGNlcHRpb24gKHNob3VsZCAiICsKLSAgICAgICAgIm5ldmVyIGhhcHBlbikuIiwgZSk7Ci0gICAg
fQotICB9Ci0KLSAgLyoqCi0gICAqIFNlcmlhbGl6ZXMgdGhlIG1lc3NhZ2UgdG8gYSB7QGNvZGUg
Ynl0ZX0gYXJyYXkgYW5kIHJldHVybnMgaXQuICBUaGlzIGlzCi0gICAqIGp1c3QgYSB0cml2aWFs
IHdyYXBwZXIgYXJvdW5kIHtAbGluayAjd3JpdGVUbyhDb2RlZE91dHB1dFN0cmVhbSl9LgotICAg
Ki8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBieXRlW10gdG9CeXRlQXJyYXkoKSB7Ci0gICAgdHJ5
IHsKLSAgICAgIGZpbmFsIGJ5dGVbXSByZXN1bHQgPSBuZXcgYnl0ZVtnZXRTZXJpYWxpemVkU2l6
ZSgpXTsKLSAgICAgIGZpbmFsIENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCA9IENvZGVkT3V0cHV0
U3RyZWFtLm5ld0luc3RhbmNlKHJlc3VsdCk7Ci0gICAgICB3cml0ZVRvKG91dHB1dCk7Ci0gICAg
ICBvdXRwdXQuY2hlY2tOb1NwYWNlTGVmdCgpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigKLSAgICAgICAgIlNlcmlhbGl6aW5nIHRvIGEgYnl0ZSBhcnJheSB0aHJldyBhbiBJ
T0V4Y2VwdGlvbiAiICsKLSAgICAgICAgIihzaG91bGQgbmV2ZXIgaGFwcGVuKS4iLCBlKTsKLSAg
ICB9Ci0gIH0KLQotICAvKioKLSAgICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSBhbmQgd3JpdGVz
IGl0IHRvIHtAY29kZSBvdXRwdXR9LiAgVGhpcyBpcyBqdXN0IGEKLSAgICogdHJpdmlhbCB3cmFw
cGVyIGFyb3VuZCB7QGxpbmsgI3dyaXRlVG8oQ29kZWRPdXRwdXRTdHJlYW0pfS4KLSAgICovCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCB3cml0ZVRvKGZpbmFsIE91dHB1dFN0cmVhbSBvdXRw
dXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ29kZWRPdXRwdXRTdHJlYW0gY29k
ZWRPdXRwdXQgPSBDb2RlZE91dHB1dFN0cmVhbS5uZXdJbnN0YW5jZShvdXRwdXQpOwotICAgIHdy
aXRlVG8oY29kZWRPdXRwdXQpOwotICAgIGNvZGVkT3V0cHV0LmZsdXNoKCk7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgd3JpdGVEZWxpbWl0ZWRUbyhPdXRwdXRTdHJlYW0gb3V0
cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZpbmFsIENvZGVkT3V0cHV0U3RyZWFtIGNv
ZGVkT3V0cHV0ID0gQ29kZWRPdXRwdXRTdHJlYW0ubmV3SW5zdGFuY2Uob3V0cHV0KTsKLSAgICBj
b2RlZE91dHB1dC53cml0ZVJhd1ZhcmludDMyKGdldFNlcmlhbGl6ZWRTaXplKCkpOwotICAgIHdy
aXRlVG8oY29kZWRPdXRwdXQpOwotICAgIGNvZGVkT3V0cHV0LmZsdXNoKCk7Ci0gIH0KLQotICAv
KiogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gZW5jb2RlIHRoaXMgc2V0LiAq
LwotICBAT3ZlcnJpZGUKLSAgcHVibGljIGludCBnZXRTZXJpYWxpemVkU2l6ZSgpIHsKLSAgICBp
bnQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTxJbnRlZ2VyLCBGaWVsZD4g
ZW50cnkgOiBmaWVsZHMuZW50cnlTZXQoKSkgewotICAgICAgcmVzdWx0ICs9IGVudHJ5LmdldFZh
bHVlKCkuZ2V0U2VyaWFsaXplZFNpemUoZW50cnkuZ2V0S2V5KCkpOwotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIFNlcmlhbGl6ZXMgdGhlIHNldCBhbmQgd3Jp
dGVzIGl0IHRvIHtAY29kZSBvdXRwdXR9IHVzaW5nCi0gICAqIHtAY29kZSBNZXNzYWdlU2V0fSB3
aXJlIGZvcm1hdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlQXNNZXNzYWdlU2V0VG8oZmlu
YWwgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KQotICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsK
LSAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTxJbnRlZ2VyLCBGaWVsZD4gZW50cnkgOiBmaWVsZHMu
ZW50cnlTZXQoKSkgewotICAgICAgZW50cnkuZ2V0VmFsdWUoKS53cml0ZUFzTWVzc2FnZVNldEV4
dGVuc2lvblRvKAotICAgICAgICBlbnRyeS5nZXRLZXkoKSwgb3V0cHV0KTsKLSAgICB9Ci0gIH0K
LQotICAvKioKLSAgICogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gZW5jb2Rl
IHRoaXMgc2V0IHVzaW5nCi0gICAqIHtAY29kZSBNZXNzYWdlU2V0fSB3aXJlIGZvcm1hdC4KLSAg
ICovCi0gIHB1YmxpYyBpbnQgZ2V0U2VyaWFsaXplZFNpemVBc01lc3NhZ2VTZXQoKSB7Ci0gICAg
aW50IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChmaW5hbCBNYXAuRW50cnk8SW50ZWdlciwgRmllbGQ+
IGVudHJ5IDogZmllbGRzLmVudHJ5U2V0KCkpIHsKLSAgICAgIHJlc3VsdCArPSBlbnRyeS5nZXRW
YWx1ZSgpLmdldFNlcmlhbGl6ZWRTaXplQXNNZXNzYWdlU2V0RXh0ZW5zaW9uKAotICAgICAgICBl
bnRyeS5nZXRLZXkoKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpIHsKLSAgICAvLyBVbmtub3du
RmllbGRTZXRzIGRvIG5vdCBoYXZlIHJlcXVpcmVkIGZpZWxkcywgc28gdGhleSBhcmUgYWx3YXlz
Ci0gICAgLy8gaW5pdGlhbGl6ZWQuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKiogUGFy
c2UgYW4ge0Bjb2RlIFVua25vd25GaWVsZFNldH0gZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgc3RyZWFt
LiAqLwotICBwdWJsaWMgc3RhdGljIFVua25vd25GaWVsZFNldCBwYXJzZUZyb20oZmluYWwgQ29k
ZWRJbnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIG5ld0J1aWxkZXIoKS5tZXJn
ZUZyb20oaW5wdXQpLmJ1aWxkKCk7Ci0gIH0KLQotICAvKiogUGFyc2Uge0Bjb2RlIGRhdGF9IGFz
IGFuIHtAY29kZSBVbmtub3duRmllbGRTZXR9IGFuZCByZXR1cm4gaXQuICovCi0gIHB1YmxpYyBz
dGF0aWMgVW5rbm93bkZpZWxkU2V0IHBhcnNlRnJvbShmaW5hbCBCeXRlU3RyaW5nIGRhdGEpCi0g
ICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICByZXR1cm4g
bmV3QnVpbGRlcigpLm1lcmdlRnJvbShkYXRhKS5idWlsZCgpOwotICB9Ci0KLSAgLyoqIFBhcnNl
IHtAY29kZSBkYXRhfSBhcyBhbiB7QGNvZGUgVW5rbm93bkZpZWxkU2V0fSBhbmQgcmV0dXJuIGl0
LiAqLwotICBwdWJsaWMgc3RhdGljIFVua25vd25GaWVsZFNldCBwYXJzZUZyb20oZmluYWwgYnl0
ZVtdIGRhdGEpCi0gICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsK
LSAgICByZXR1cm4gbmV3QnVpbGRlcigpLm1lcmdlRnJvbShkYXRhKS5idWlsZCgpOwotICB9Ci0K
LSAgLyoqIFBhcnNlIGFuIHtAY29kZSBVbmtub3duRmllbGRTZXR9IGZyb20ge0Bjb2RlIGlucHV0
fSBhbmQgcmV0dXJuIGl0LiAqLwotICBwdWJsaWMgc3RhdGljIFVua25vd25GaWVsZFNldCBwYXJz
ZUZyb20oZmluYWwgSW5wdXRTdHJlYW0gaW5wdXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHJldHVybiBuZXdCdWls
ZGVyKCkubWVyZ2VGcm9tKGlucHV0KS5idWlsZCgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyBCdWlsZGVyIG5ld0J1aWxkZXJGb3JUeXBlKCkgewotICAgIHJldHVybiBuZXdCdWlsZGVy
KCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIEJ1aWxkZXIgdG9CdWlsZGVyKCkgewot
ICAgIHJldHVybiBuZXdCdWlsZGVyKCkubWVyZ2VGcm9tKHRoaXMpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEJ1aWxkZXIgZm9yIHtAbGluayBVbmtub3duRmllbGRTZXR9cy4KLSAgICoKLSAgICogPHA+
Tm90ZSB0aGF0IHRoaXMgY2xhc3MgbWFpbnRhaW5zIHtAbGluayBGaWVsZC5CdWlsZGVyfXMgZm9y
IGFsbCBmaWVsZHMKLSAgICogaW4gdGhlIHNldC4gIFRodXMsIGFkZGluZyBvbmUgZWxlbWVudCB0
byBhbiBleGlzdGluZyB7QGxpbmsgRmllbGR9IGRvZXMgbm90Ci0gICAqIHJlcXVpcmUgbWFraW5n
IGEgY29weS4gIFRoaXMgaXMgaW1wb3J0YW50IGZvciBlZmZpY2llbnQgcGFyc2luZyBvZgotICAg
KiB1bmtub3duIHJlcGVhdGVkIGZpZWxkcy4gIEhvd2V2ZXIsIGl0IGltcGxpZXMgdGhhdCB7QGxp
bmsgRmllbGR9cyBjYW5ub3QKLSAgICogYmUgY29uc3RydWN0ZWQgaW5kZXBlbmRlbnRseSwgbm9y
IGNhbiB0d28ge0BsaW5rIFVua25vd25GaWVsZFNldH1zIHNoYXJlCi0gICAqIHRoZSBzYW1lIHtA
Y29kZSBGaWVsZH0gb2JqZWN0LgotICAgKgotICAgKiA8cD5Vc2Uge0BsaW5rIFVua25vd25GaWVs
ZFNldCNuZXdCdWlsZGVyKCl9IHRvIGNvbnN0cnVjdCBhIHtAY29kZSBCdWlsZGVyfS4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciBpbXBsZW1lbnRzIE1lc3NhZ2VM
aXRlLkJ1aWxkZXIgewotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG5ldmVyIGJlIGNh
bGxlZCBkaXJlY3RseSAoZXhjZXB0IGZyb20gJ2NyZWF0ZScpLgotICAgIHByaXZhdGUgQnVpbGRl
cigpIHt9Ci0KLSAgICBwcml2YXRlIE1hcDxJbnRlZ2VyLCBGaWVsZD4gZmllbGRzOwotCi0gICAg
Ly8gT3B0aW1pemF0aW9uOiAgV2Uga2VlcCBhcm91bmQgYSBidWlsZGVyIGZvciB0aGUgbGFzdCBm
aWVsZCB0aGF0IHdhcwotICAgIC8vICAgbW9kaWZpZWQgc28gdGhhdCB3ZSBjYW4gZWZmaWNpZW50
bHkgYWRkIHRvIGl0IG11bHRpcGxlIHRpbWVzIGluIGEKLSAgICAvLyAgIHJvdyAoaW1wb3J0YW50
IHdoZW4gcGFyc2luZyBhbiB1bmtub3duIHJlcGVhdGVkIGZpZWxkKS4KLSAgICBwcml2YXRlIGlu
dCBsYXN0RmllbGROdW1iZXI7Ci0gICAgcHJpdmF0ZSBGaWVsZC5CdWlsZGVyIGxhc3RGaWVsZDsK
LQotICAgIHByaXZhdGUgc3RhdGljIEJ1aWxkZXIgY3JlYXRlKCkgewotICAgICAgQnVpbGRlciBi
dWlsZGVyID0gbmV3IEJ1aWxkZXIoKTsKLSAgICAgIGJ1aWxkZXIucmVpbml0aWFsaXplKCk7Ci0g
ICAgICByZXR1cm4gYnVpbGRlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBmaWVs
ZCBidWlsZGVyIGZvciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyIHdoaWNoIGluY2x1ZGVzIGFueQot
ICAgICAqIHZhbHVlcyB0aGF0IGFscmVhZHkgZXhpc3QuCi0gICAgICovCi0gICAgcHJpdmF0ZSBG
aWVsZC5CdWlsZGVyIGdldEZpZWxkQnVpbGRlcihmaW5hbCBpbnQgbnVtYmVyKSB7Ci0gICAgICBp
ZiAobGFzdEZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgaWYgKG51bWJlciA9PSBsYXN0RmllbGRO
dW1iZXIpIHsKLSAgICAgICAgICByZXR1cm4gbGFzdEZpZWxkOwotICAgICAgICB9Ci0gICAgICAg
IC8vIE5vdGU6ICBhZGRGaWVsZCgpIHdpbGwgcmVzZXQgbGFzdEZpZWxkIGFuZCBsYXN0RmllbGRO
dW1iZXIuCi0gICAgICAgIGFkZEZpZWxkKGxhc3RGaWVsZE51bWJlciwgbGFzdEZpZWxkLmJ1aWxk
KCkpOwotICAgICAgfQotICAgICAgaWYgKG51bWJlciA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmluYWwgRmllbGQgZXhpc3RpbmcgPSBmaWVs
ZHMuZ2V0KG51bWJlcik7Ci0gICAgICAgIGxhc3RGaWVsZE51bWJlciA9IG51bWJlcjsKLSAgICAg
ICAgbGFzdEZpZWxkID0gRmllbGQubmV3QnVpbGRlcigpOwotICAgICAgICBpZiAoZXhpc3Rpbmcg
IT0gbnVsbCkgewotICAgICAgICAgIGxhc3RGaWVsZC5tZXJnZUZyb20oZXhpc3RpbmcpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBsYXN0RmllbGQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogQnVpbGQgdGhlIHtAbGluayBVbmtub3duRmllbGRTZXR9IGFuZCByZXR1cm4g
aXQuCi0gICAgICoKLSAgICAgKiA8cD5PbmNlIHtAY29kZSBidWlsZCgpfSBoYXMgYmVlbiBjYWxs
ZWQsIHRoZSB7QGNvZGUgQnVpbGRlcn0gd2lsbCBubwotICAgICAqIGxvbmdlciBiZSB1c2FibGUu
ICBDYWxsaW5nIGFueSBtZXRob2QgYWZ0ZXIge0Bjb2RlIGJ1aWxkKCl9IHdpbGwgcmVzdWx0Ci0g
ICAgICogaW4gdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCBjYW4gY2F1c2UgYSB7QGNvZGUgTnVsbFBv
aW50ZXJFeGNlcHRpb259IHRvIGJlCi0gICAgICogdGhyb3duLgotICAgICAqLwotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBVbmtub3duRmllbGRTZXQgYnVpbGQoKSB7Ci0gICAgICBnZXRGaWVs
ZEJ1aWxkZXIoMCk7ICAvLyBGb3JjZSBsYXN0RmllbGQgdG8gYmUgYnVpbHQuCi0gICAgICBmaW5h
bCBVbmtub3duRmllbGRTZXQgcmVzdWx0OwotICAgICAgaWYgKGZpZWxkcy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgcmVzdWx0ID0gZ2V0RGVmYXVsdEluc3RhbmNlKCk7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICByZXN1bHQgPSBuZXcgVW5rbm93bkZpZWxkU2V0KENvbGxlY3Rpb25zLnVubW9kaWZp
YWJsZU1hcChmaWVsZHMpKTsKLSAgICAgIH0KLSAgICAgIGZpZWxkcyA9IG51bGw7Ci0gICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBVbmtub3du
RmllbGRTZXQgYnVpbGRQYXJ0aWFsKCkgewotICAgICAgLy8gTm8gcmVxdWlyZWQgZmllbGRzLCBz
byB0aGlzIGlzIHRoZSBzYW1lIGFzIGJ1aWxkKCkuCi0gICAgICByZXR1cm4gYnVpbGQoKTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBjbG9uZSgpIHsKLSAgICAg
IGdldEZpZWxkQnVpbGRlcigwKTsgIC8vIEZvcmNlIGxhc3RGaWVsZCB0byBiZSBidWlsdC4KLSAg
ICAgIHJldHVybiBVbmtub3duRmllbGRTZXQubmV3QnVpbGRlcigpLm1lcmdlRnJvbSgKLSAgICAg
ICAgICBuZXcgVW5rbm93bkZpZWxkU2V0KGZpZWxkcykpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBVbmtub3duRmllbGRTZXQgZ2V0RGVmYXVsdEluc3RhbmNlRm9yVHlwZSgp
IHsKLSAgICAgIHJldHVybiBVbmtub3duRmllbGRTZXQuZ2V0RGVmYXVsdEluc3RhbmNlKCk7Ci0g
ICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlaW5pdGlhbGl6ZSgpIHsKLSAgICAgIGZpZWxkcyA9
IENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7Ci0gICAgICBsYXN0RmllbGROdW1iZXIgPSAwOwotICAg
ICAgbGFzdEZpZWxkID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKiogUmVzZXQgdGhlIGJ1aWxkZXIg
dG8gYW4gZW1wdHkgc2V0LiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyIGNs
ZWFyKCkgewotICAgICAgcmVpbml0aWFsaXplKCk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9
Ci0gICAgCi0gICAgLyoqIENsZWFyIGZpZWxkcyBmcm9tIHRoZSBzZXQgd2l0aCBhIGdpdmVuIGZp
ZWxkIG51bWJlci4gKi8KLSAgICBwdWJsaWMgQnVpbGRlciBjbGVhckZpZWxkKGZpbmFsIGludCBu
dW1iZXIpIHsKLSAgICAgIGlmIChudW1iZXIgPT0gMCkgewotICAgICAgICB0aHJvdyBuZXcgSWxs
ZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJaZXJvIGlzIG5vdCBhIHZhbGlkIGZpZWxkIG51bWJlci4i
KTsKLSAgICAgIH0KLSAgICAgIGlmIChsYXN0RmllbGQgIT0gbnVsbCAmJiBsYXN0RmllbGROdW1i
ZXIgPT0gbnVtYmVyKSB7Ci0gICAgICAgIC8vIERpc2NhcmQgdGhpcy4KLSAgICAgICAgbGFzdEZp
ZWxkID0gbnVsbDsKLSAgICAgICAgbGFzdEZpZWxkTnVtYmVyID0gMDsKLSAgICAgIH0KLSAgICAg
IGlmIChmaWVsZHMuY29udGFpbnNLZXkobnVtYmVyKSkgewotICAgICAgICBmaWVsZHMucmVtb3Zl
KG51bWJlcik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBNZXJnZSB0aGUgZmllbGRzIGZyb20ge0Bjb2RlIG90aGVyfSBpbnRvIHRoaXMgc2V0
LiAgSWYgYSBmaWVsZCBudW1iZXIKLSAgICAgKiBleGlzdHMgaW4gYm90aCBzZXRzLCB7QGNvZGUg
b3RoZXJ9J3MgdmFsdWVzIGZvciB0aGF0IGZpZWxkIHdpbGwgYmUKLSAgICAgKiBhcHBlbmRlZCB0
byB0aGUgdmFsdWVzIGluIHRoaXMgc2V0LgotICAgICAqLwotICAgIHB1YmxpYyBCdWlsZGVyIG1l
cmdlRnJvbShmaW5hbCBVbmtub3duRmllbGRTZXQgb3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciAh
PSBnZXREZWZhdWx0SW5zdGFuY2UoKSkgewotICAgICAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTxJ
bnRlZ2VyLCBGaWVsZD4gZW50cnkgOiBvdGhlci5maWVsZHMuZW50cnlTZXQoKSkgewotICAgICAg
ICAgIG1lcmdlRmllbGQoZW50cnkuZ2V0S2V5KCksIGVudHJ5LmdldFZhbHVlKCkpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBBZGQgYSBmaWVsZCB0byB0aGUge0Bjb2RlIFVua25vd25GaWVsZFNldH0uICBJZiBhIGZpZWxk
IHdpdGggdGhlIHNhbWUKLSAgICAgKiBudW1iZXIgYWxyZWFkeSBleGlzdHMsIHRoZSB0d28gYXJl
IG1lcmdlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnVpbGRlciBtZXJnZUZpZWxkKGZpbmFsIGlu
dCBudW1iZXIsIGZpbmFsIEZpZWxkIGZpZWxkKSB7Ci0gICAgICBpZiAobnVtYmVyID09IDApIHsK
LSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiWmVybyBpcyBub3Qg
YSB2YWxpZCBmaWVsZCBudW1iZXIuIik7Ci0gICAgICB9Ci0gICAgICBpZiAoaGFzRmllbGQobnVt
YmVyKSkgewotICAgICAgICBnZXRGaWVsZEJ1aWxkZXIobnVtYmVyKS5tZXJnZUZyb20oZmllbGQp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gT3B0aW1pemF0aW9uOiAgV2UgY291bGQgY2Fs
bCBnZXRGaWVsZEJ1aWxkZXIobnVtYmVyKS5tZXJnZUZyb20oZmllbGQpCi0gICAgICAgIC8vIGlu
IHRoaXMgY2FzZSwgYnV0IHRoYXQgd291bGQgY3JlYXRlIGEgY29weSBvZiB0aGUgRmllbGQgb2Jq
ZWN0LgotICAgICAgICAvLyBXZSdkIHJhdGhlciByZXVzZSB0aGUgb25lIHBhc3NlZCB0byB1cywg
c28gY2FsbCBhZGRGaWVsZCgpIGluc3RlYWQuCi0gICAgICAgIGFkZEZpZWxkKG51bWJlciwgZmll
bGQpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBtZXJnaW5nIGEgbmV3IGZpZWxkIGNvbnRhaW5pbmcg
YSBzaW5nbGUgdmFyaW50Ci0gICAgICogdmFsdWUuICBUaGlzIGlzIHVzZWQgaW4gcGFydGljdWxh
ciB3aGVuIGFuIHVua25vd24gZW51bSB2YWx1ZSBpcwotICAgICAqIGVuY291bnRlcmVkLgotICAg
ICAqLwotICAgIHB1YmxpYyBCdWlsZGVyIG1lcmdlVmFyaW50RmllbGQoZmluYWwgaW50IG51bWJl
ciwgZmluYWwgaW50IHZhbHVlKSB7Ci0gICAgICBpZiAobnVtYmVyID09IDApIHsKLSAgICAgICAg
dGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiWmVybyBpcyBub3QgYSB2YWxpZCBm
aWVsZCBudW1iZXIuIik7Ci0gICAgICB9Ci0gICAgICBnZXRGaWVsZEJ1aWxkZXIobnVtYmVyKS5h
ZGRWYXJpbnQodmFsdWUpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0KLSAgICAvKioK
LSAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIG1lcmdpbmcgYSBsZW5ndGgtZGVsaW1pdGVk
IGZpZWxkLgotICAgICAqCi0gICAgICogPHA+Rm9yIHVzZSBieSBnZW5lcmF0ZWQgY29kZSBvbmx5
LgotICAgICAqLwotICAgIHB1YmxpYyBCdWlsZGVyIG1lcmdlTGVuZ3RoRGVsaW1pdGVkRmllbGQo
Ci0gICAgICAgIGZpbmFsIGludCBudW1iZXIsIGZpbmFsIEJ5dGVTdHJpbmcgdmFsdWUpIHsgIAot
ICAgICAgaWYgKG51bWJlciA9PSAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24oIlplcm8gaXMgbm90IGEgdmFsaWQgZmllbGQgbnVtYmVyLiIpOwotICAgICAg
fQotICAgICAgZ2V0RmllbGRCdWlsZGVyKG51bWJlcikuYWRkTGVuZ3RoRGVsaW1pdGVkKHZhbHVl
KTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8qKiBDaGVjayBpZiB0aGUgZ2l2
ZW4gZmllbGQgbnVtYmVyIGlzIHByZXNlbnQgaW4gdGhlIHNldC4gKi8KLSAgICBwdWJsaWMgYm9v
bGVhbiBoYXNGaWVsZChmaW5hbCBpbnQgbnVtYmVyKSB7Ci0gICAgICBpZiAobnVtYmVyID09IDAp
IHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiWmVybyBpcyBu
b3QgYSB2YWxpZCBmaWVsZCBudW1iZXIuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVtYmVy
ID09IGxhc3RGaWVsZE51bWJlciB8fCBmaWVsZHMuY29udGFpbnNLZXkobnVtYmVyKTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBBZGQgYSBmaWVsZCB0byB0aGUge0Bjb2RlIFVua25vd25GaWVs
ZFNldH0uICBJZiBhIGZpZWxkIHdpdGggdGhlIHNhbWUKLSAgICAgKiBudW1iZXIgYWxyZWFkeSBl
eGlzdHMsIGl0IGlzIHJlbW92ZWQuCi0gICAgICovCi0gICAgcHVibGljIEJ1aWxkZXIgYWRkRmll
bGQoZmluYWwgaW50IG51bWJlciwgZmluYWwgRmllbGQgZmllbGQpIHsKLSAgICAgIGlmIChudW1i
ZXIgPT0gMCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJa
ZXJvIGlzIG5vdCBhIHZhbGlkIGZpZWxkIG51bWJlci4iKTsKLSAgICAgIH0KLSAgICAgIGlmIChs
YXN0RmllbGQgIT0gbnVsbCAmJiBsYXN0RmllbGROdW1iZXIgPT0gbnVtYmVyKSB7Ci0gICAgICAg
IC8vIERpc2NhcmQgdGhpcy4KLSAgICAgICAgbGFzdEZpZWxkID0gbnVsbDsKLSAgICAgICAgbGFz
dEZpZWxkTnVtYmVyID0gMDsKLSAgICAgIH0KLSAgICAgIGlmIChmaWVsZHMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGZpZWxkcyA9IG5ldyBUcmVlTWFwPEludGVnZXIsRmllbGQ+KCk7Ci0gICAgICB9
Ci0gICAgICBmaWVsZHMucHV0KG51bWJlciwgZmllbGQpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGFsbCBwcmVzZW50IHtAY29kZSBGaWVsZH1zIGFz
IGFuIGltbXV0YWJsZSB7QGNvZGUgTWFwfS4gIElmIG1vcmUKLSAgICAgKiBmaWVsZHMgYXJlIGFk
ZGVkLCB0aGUgY2hhbmdlcyBtYXkgb3IgbWF5IG5vdCBiZSByZWZsZWN0ZWQgaW4gdGhpcyBtYXAu
Ci0gICAgICovCi0gICAgcHVibGljIE1hcDxJbnRlZ2VyLCBGaWVsZD4gYXNNYXAoKSB7Ci0gICAg
ICBnZXRGaWVsZEJ1aWxkZXIoMCk7ICAvLyBGb3JjZSBsYXN0RmllbGQgdG8gYmUgYnVpbHQuCi0g
ICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKGZpZWxkcyk7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogUGFyc2UgYW4gZW50aXJlIG1lc3NhZ2UgZnJvbSB7QGNvZGUgaW5w
dXR9IGFuZCBtZXJnZSBpdHMgZmllbGRzIGludG8KLSAgICAgKiB0aGlzIHNldC4KLSAgICAgKi8K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBtZXJnZUZyb20oZmluYWwgQ29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICAgIGZpbmFsIGludCB0YWcgPSBpbnB1dC5yZWFkVGFnKCk7Ci0gICAgICAgIGlm
ICh0YWcgPT0gMCB8fCAhbWVyZ2VGaWVsZEZyb20odGFnLCBpbnB1dCkpIHsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogUGFyc2UgYSBzaW5nbGUgZmllbGQgZnJvbSB7QGNvZGUgaW5wdXR9IGFu
ZCBtZXJnZSBpdCBpbnRvIHRoaXMgc2V0LgotICAgICAqIEBwYXJhbSB0YWcgVGhlIGZpZWxkJ3Mg
dGFnIG51bWJlciwgd2hpY2ggd2FzIGFscmVhZHkgcGFyc2VkLgotICAgICAqIEByZXR1cm4ge0Bj
b2RlIGZhbHNlfSBpZiB0aGUgdGFnIGlzIGFuIGVuZCBncm91cCB0YWcuCi0gICAgICovCi0gICAg
cHVibGljIGJvb2xlYW4gbWVyZ2VGaWVsZEZyb20oZmluYWwgaW50IHRhZywgZmluYWwgQ29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgICAgZmluYWwgaW50IG51bWJlciA9IFdpcmVGb3JtYXQuZ2V0
VGFnRmllbGROdW1iZXIodGFnKTsKLSAgICAgIHN3aXRjaCAoV2lyZUZvcm1hdC5nZXRUYWdXaXJl
VHlwZSh0YWcpKSB7Ci0gICAgICAgIGNhc2UgV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQ6Ci0g
ICAgICAgICAgZ2V0RmllbGRCdWlsZGVyKG51bWJlcikuYWRkVmFyaW50KGlucHV0LnJlYWRJbnQ2
NCgpKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBXaXJlRm9ybWF0LldJ
UkVUWVBFX0ZJWEVENjQ6Ci0gICAgICAgICAgZ2V0RmllbGRCdWlsZGVyKG51bWJlcikuYWRkRml4
ZWQ2NChpbnB1dC5yZWFkRml4ZWQ2NCgpKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgY2FzZSBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQ6Ci0gICAgICAgICAg
Z2V0RmllbGRCdWlsZGVyKG51bWJlcikuYWRkTGVuZ3RoRGVsaW1pdGVkKGlucHV0LnJlYWRCeXRl
cygpKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBXaXJlRm9ybWF0LldJ
UkVUWVBFX1NUQVJUX0dST1VQOgotICAgICAgICAgIGZpbmFsIEJ1aWxkZXIgc3ViQnVpbGRlciA9
IG5ld0J1aWxkZXIoKTsKLSAgICAgICAgICBpbnB1dC5yZWFkR3JvdXAobnVtYmVyLCBzdWJCdWls
ZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb25SZWdpc3RyeS5nZXRFbXB0
eVJlZ2lzdHJ5KCkpOwotICAgICAgICAgIGdldEZpZWxkQnVpbGRlcihudW1iZXIpLmFkZEdyb3Vw
KHN1YkJ1aWxkZXIuYnVpbGQoKSk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNh
c2UgV2lyZUZvcm1hdC5XSVJFVFlQRV9FTkRfR1JPVVA6Ci0gICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfRklYRUQzMjoKLSAgICAgICAgICBn
ZXRGaWVsZEJ1aWxkZXIobnVtYmVyKS5hZGRGaXhlZDMyKGlucHV0LnJlYWRGaXhlZDMyKCkpOwot
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHRocm93
IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5pbnZhbGlkV2lyZVR5cGUoKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQYXJzZSB7QGNvZGUgZGF0YX0gYXMgYW4ge0Bj
b2RlIFVua25vd25GaWVsZFNldH0gYW5kIG1lcmdlIGl0IHdpdGggdGhlCi0gICAgICogc2V0IGJl
aW5nIGJ1aWx0LiAgVGhpcyBpcyBqdXN0IGEgc21hbGwgd3JhcHBlciBhcm91bmQKLSAgICAgKiB7
QGxpbmsgI21lcmdlRnJvbShDb2RlZElucHV0U3RyZWFtKX0uCi0gICAgICovCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIEJ1aWxkZXIgbWVyZ2VGcm9tKGZpbmFsIEJ5dGVTdHJpbmcgZGF0YSkg
dGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewotICAg
ICAgICBmaW5hbCBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gZGF0YS5uZXdDb2RlZElucHV0KCk7
Ci0gICAgICAgIG1lcmdlRnJvbShpbnB1dCk7Ci0gICAgICAgIGlucHV0LmNoZWNrTGFzdFRhZ1dh
cygwKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9IGNhdGNoIChmaW5hbCBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBlOwotICAgICAgfSBj
YXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigKLSAgICAgICAgICAiUmVhZGluZyBmcm9tIGEgQnl0ZVN0cmluZyB0aHJldyBhbiBJ
T0V4Y2VwdGlvbiAoc2hvdWxkICIgKwotICAgICAgICAgICJuZXZlciBoYXBwZW4pLiIsIGUpOwot
ICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlIHtAY29kZSBkYXRhfSBhcyBh
biB7QGNvZGUgVW5rbm93bkZpZWxkU2V0fSBhbmQgbWVyZ2UgaXQgd2l0aCB0aGUKLSAgICAgKiBz
ZXQgYmVpbmcgYnVpbHQuICBUaGlzIGlzIGp1c3QgYSBzbWFsbCB3cmFwcGVyIGFyb3VuZAotICAg
ICAqIHtAbGluayAjbWVyZ2VGcm9tKENvZGVkSW5wdXRTdHJlYW0pfS4KLSAgICAgKi8KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBtZXJnZUZyb20oZmluYWwgYnl0ZVtdIGRhdGEp
IHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAg
ICAgICAgZmluYWwgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9IENvZGVkSW5wdXRTdHJlYW0ubmV3
SW5zdGFuY2UoZGF0YSk7Ci0gICAgICAgIG1lcmdlRnJvbShpbnB1dCk7Ci0gICAgICAgIGlucHV0
LmNoZWNrTGFzdFRhZ1dhcygwKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9IGNhdGNo
IChmaW5hbCBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJv
dyBlOwotICAgICAgfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgewotICAgICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiUmVhZGluZyBmcm9tIGEgYnl0ZSBh
cnJheSB0aHJldyBhbiBJT0V4Y2VwdGlvbiAoc2hvdWxkICIgKwotICAgICAgICAgICJuZXZlciBo
YXBwZW4pLiIsIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlIGFu
IHtAY29kZSBVbmtub3duRmllbGRTZXR9IGZyb20ge0Bjb2RlIGlucHV0fSBhbmQgbWVyZ2UgaXQg
d2l0aCB0aGUKLSAgICAgKiBzZXQgYmVpbmcgYnVpbHQuICBUaGlzIGlzIGp1c3QgYSBzbWFsbCB3
cmFwcGVyIGFyb3VuZAotICAgICAqIHtAbGluayAjbWVyZ2VGcm9tKENvZGVkSW5wdXRTdHJlYW0p
fS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBtZXJnZUZyb20o
ZmluYWwgSW5wdXRTdHJlYW0gaW5wdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBmaW5h
bCBDb2RlZElucHV0U3RyZWFtIGNvZGVkSW5wdXQgPSBDb2RlZElucHV0U3RyZWFtLm5ld0luc3Rh
bmNlKGlucHV0KTsKLSAgICAgIG1lcmdlRnJvbShjb2RlZElucHV0KTsKLSAgICAgIGNvZGVkSW5w
dXQuY2hlY2tMYXN0VGFnV2FzKDApOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gbWVyZ2VEZWxpbWl0ZWRGcm9tKElucHV0U3Ry
ZWFtIGlucHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZmluYWwgaW50IGZpcnN0Qnl0
ZSA9IGlucHV0LnJlYWQoKTsKLSAgICAgIGlmIChmaXJzdEJ5dGUgPT0gLTEpIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZmluYWwgaW50IHNpemUgPSBDb2RlZElucHV0
U3RyZWFtLnJlYWRSYXdWYXJpbnQzMihmaXJzdEJ5dGUsIGlucHV0KTsKLSAgICAgIGZpbmFsIElu
cHV0U3RyZWFtIGxpbWl0ZWRJbnB1dCA9IG5ldyBMaW1pdGVkSW5wdXRTdHJlYW0oaW5wdXQsIHNp
emUpOwotICAgICAgbWVyZ2VGcm9tKGxpbWl0ZWRJbnB1dCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBtZXJnZURlbGltaXRl
ZEZyb20oSW5wdXRTdHJlYW0gaW5wdXQsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25S
ZWdpc3RyeSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIC8vIFVua25vd25G
aWVsZFNldCBoYXMgbm8gZXh0ZW5zaW9ucy4KLSAgICAgIHJldHVybiBtZXJnZURlbGltaXRlZEZy
b20oaW5wdXQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyIG1l
cmdlRnJvbShDb2RlZElucHV0U3RyZWFtIGlucHV0LCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0
ZW5zaW9uUmVnaXN0cnkpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAvLyBV
bmtub3duRmllbGRTZXQgaGFzIG5vIGV4dGVuc2lvbnMuCi0gICAgICByZXR1cm4gbWVyZ2VGcm9t
KGlucHV0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBtZXJn
ZUZyb20oQnl0ZVN0cmluZyBkYXRhLCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVn
aXN0cnkpCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewot
ICAgICAgLy8gVW5rbm93bkZpZWxkU2V0IGhhcyBubyBleHRlbnNpb25zLgotICAgICAgcmV0dXJu
IG1lcmdlRnJvbShkYXRhKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVp
bGRlciBtZXJnZUZyb20oYnl0ZVtdIGRhdGEsIGludCBvZmYsIGludCBsZW4pIHRocm93cyBJbnZh
bGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgZmluYWwg
Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9Ci0gICAgICAgICAgICBDb2RlZElucHV0U3RyZWFtLm5l
d0luc3RhbmNlKGRhdGEsIG9mZiwgbGVuKTsKLSAgICAgICAgbWVyZ2VGcm9tKGlucHV0KTsKLSAg
ICAgICAgaW5wdXQuY2hlY2tMYXN0VGFnV2FzKDApOwotICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAg
IHRocm93IGU7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJSZWFkaW5nIGZyb20gYSBieXRlIGFy
cmF5IHRocmV3IGFuIElPRXhjZXB0aW9uIChzaG91bGQgIiArCi0gICAgICAgICAgIm5ldmVyIGhh
cHBlbikuIiwgZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IEJ1aWxkZXIgbWVyZ2VGcm9tKGJ5dGVbXSBkYXRhLCBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0
ZW5zaW9uUmVnaXN0cnkpCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNl
cHRpb24gewotICAgICAgLy8gVW5rbm93bkZpZWxkU2V0IGhhcyBubyBleHRlbnNpb25zLgotICAg
ICAgcmV0dXJuIG1lcmdlRnJvbShkYXRhKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgQnVpbGRlciBtZXJnZUZyb20oYnl0ZVtdIGRhdGEsIGludCBvZmYsIGludCBsZW4sIEV4
dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgICAgdGhyb3dzIElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICAvLyBVbmtub3duRmllbGRTZXQg
aGFzIG5vIGV4dGVuc2lvbnMuCi0gICAgICByZXR1cm4gbWVyZ2VGcm9tKGRhdGEsIG9mZiwgbGVu
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVpbGRlciBtZXJnZUZyb20o
SW5wdXRTdHJlYW0gaW5wdXQsIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3Ry
eSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIC8vIFVua25vd25GaWVsZFNl
dCBoYXMgbm8gZXh0ZW5zaW9ucy4KLSAgICAgIHJldHVybiBtZXJnZUZyb20oaW5wdXQpOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyIG1lcmdlRnJvbShNZXNzYWdl
TGl0ZSBtKSB7Ci0gICAgICBpZiAobSBpbnN0YW5jZW9mIFVua25vd25GaWVsZFNldCkgewotICAg
ICAgICByZXR1cm4gbWVyZ2VGcm9tKChVbmtub3duRmllbGRTZXQpIG0pOwotICAgICAgfQotICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAibWVyZ2VG
cm9tKE1lc3NhZ2VMaXRlKSBjYW4gb25seSBtZXJnZSBtZXNzYWdlcyBvZiB0aGUgc2FtZSB0eXBl
LiIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzSW5pdGlh
bGl6ZWQoKSB7Ci0gICAgICAvLyBVbmtub3duRmllbGRTZXRzIGRvIG5vdCBoYXZlIHJlcXVpcmVk
IGZpZWxkcywgc28gdGhleSBhcmUgYWx3YXlzCi0gICAgICAvLyBpbml0aWFsaXplZC4KLSAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXByZXNlbnRzIGEgc2lu
Z2xlIGZpZWxkIGluIGFuIHtAY29kZSBVbmtub3duRmllbGRTZXR9LgotICAgKgotICAgKiA8cD5B
IHtAY29kZSBGaWVsZH0gY29uc2lzdHMgb2YgZml2ZSBsaXN0cyBvZiB2YWx1ZXMuICBUaGUgbGlz
dHMgY29ycmVzcG9uZAotICAgKiB0byB0aGUgZml2ZSAid2lyZSB0eXBlcyIgdXNlZCBpbiB0aGUg
cHJvdG9jb2wgYnVmZmVyIGJpbmFyeSBmb3JtYXQuCi0gICAqIFRoZSB3aXJlIHR5cGUgb2YgZWFj
aCBmaWVsZCBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBlbmNvZGVkIGZvcm0gYWxvbmUsCi0g
ICAqIHdpdGhvdXQga25vd2luZyB0aGUgZmllbGQncyBkZWNsYXJlZCB0eXBlLiAgU28sIHdlIGFy
ZSBhYmxlIHRvIHBhcnNlCi0gICAqIHVua25vd24gdmFsdWVzIGF0IGxlYXN0IHRoaXMgZmFyIGFu
ZCBzZXBhcmF0ZSB0aGVtLiAgTm9ybWFsbHksIG9ubHkgb25lCi0gICAqIG9mIHRoZSBmaXZlIGxp
c3RzIHdpbGwgY29udGFpbiBhbnkgdmFsdWVzLCBzaW5jZSBpdCBpcyBpbXBvc3NpYmxlIHRvCi0g
ICAqIGRlZmluZSBhIHZhbGlkIG1lc3NhZ2UgdHlwZSB0aGF0IGRlY2xhcmVzIHR3byBkaWZmZXJl
bnQgdHlwZXMgZm9yIHRoZQotICAgKiBzYW1lIGZpZWxkIG51bWJlci4gIEhvd2V2ZXIsIHRoZSBj
b2RlIGlzIGRlc2lnbmVkIHRvIGFsbG93IGZvciB0aGUgY2FzZQotICAgKiB3aGVyZSB0aGUgc2Ft
ZSB1bmtub3duIGZpZWxkIG51bWJlciBpcyBlbmNvdW50ZXJlZCB1c2luZyBtdWx0aXBsZSBkaWZm
ZXJlbnQKLSAgICogd2lyZSB0eXBlcy4KLSAgICoKLSAgICogPHA+e0Bjb2RlIEZpZWxkfSBpcyBh
biBpbW11dGFibGUgY2xhc3MuICBUbyBjb25zdHJ1Y3Qgb25lLCB5b3UgbXVzdCB1c2UgYQotICAg
KiB7QGxpbmsgQnVpbGRlcn0uCi0gICAqCi0gICAqIEBzZWUgVW5rbm93bkZpZWxkU2V0Ci0gICAq
LwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZpZWxkIHsKLSAgICBwcml2YXRlIEZpZWxk
KCkge30KLQotICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcge0BsaW5rIEJ1aWxkZXJ9LiAqLwotICAg
IHB1YmxpYyBzdGF0aWMgQnVpbGRlciBuZXdCdWlsZGVyKCkgewotICAgICAgcmV0dXJuIEJ1aWxk
ZXIuY3JlYXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEgbmV3IHtA
bGluayBCdWlsZGVyfSBhbmQgaW5pdGlhbGl6ZSBpdCB0byBhIGNvcHkgb2YKLSAgICAgKiB7QGNv
ZGUgY29weUZyb219LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBuZXdCdWls
ZGVyKGZpbmFsIEZpZWxkIGNvcHlGcm9tKSB7Ci0gICAgICByZXR1cm4gbmV3QnVpbGRlcigpLm1l
cmdlRnJvbShjb3B5RnJvbSk7Ci0gICAgfQotCi0gICAgLyoqIEdldCBhbiBlbXB0eSB7QGNvZGUg
RmllbGR9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgRmllbGQgZ2V0RGVmYXVsdEluc3RhbmNlKCkg
ewotICAgICAgcmV0dXJuIGZpZWxkRGVmYXVsdEluc3RhbmNlOwotICAgIH0KLSAgICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBGaWVsZCBmaWVsZERlZmF1bHRJbnN0YW5jZSA9IG5ld0J1aWxkZXIoKS5i
dWlsZCgpOwotCi0gICAgLyoqIEdldCB0aGUgbGlzdCBvZiB2YXJpbnQgdmFsdWVzIGZvciB0aGlz
IGZpZWxkLiAqLwotICAgIHB1YmxpYyBMaXN0PExvbmc+IGdldFZhcmludExpc3QoKSAgICAgICAg
ICAgICAgIHsgcmV0dXJuIHZhcmludDsgICAgICAgICAgfQotCi0gICAgLyoqIEdldCB0aGUgbGlz
dCBvZiBmaXhlZDMyIHZhbHVlcyBmb3IgdGhpcyBmaWVsZC4gKi8KLSAgICBwdWJsaWMgTGlzdDxJ
bnRlZ2VyPiBnZXRGaXhlZDMyTGlzdCgpICAgICAgICAgICB7IHJldHVybiBmaXhlZDMyOyAgICAg
ICAgIH0KLQotICAgIC8qKiBHZXQgdGhlIGxpc3Qgb2YgZml4ZWQ2NCB2YWx1ZXMgZm9yIHRoaXMg
ZmllbGQuICovCi0gICAgcHVibGljIExpc3Q8TG9uZz4gZ2V0Rml4ZWQ2NExpc3QoKSAgICAgICAg
ICAgICAgeyByZXR1cm4gZml4ZWQ2NDsgICAgICAgICB9Ci0KLSAgICAvKiogR2V0IHRoZSBsaXN0
IG9mIGxlbmd0aC1kZWxpbWl0ZWQgdmFsdWVzIGZvciB0aGlzIGZpZWxkLiAqLwotICAgIHB1Ymxp
YyBMaXN0PEJ5dGVTdHJpbmc+IGdldExlbmd0aERlbGltaXRlZExpc3QoKSB7IHJldHVybiBsZW5n
dGhEZWxpbWl0ZWQ7IH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUgbGlzdCBvZiBlbWJlZGRl
ZCBncm91cCB2YWx1ZXMgZm9yIHRoaXMgZmllbGQuICBUaGVzZSBhcmUKLSAgICAgKiByZXByZXNl
bnRlZCB1c2luZyB7QGxpbmsgVW5rbm93bkZpZWxkU2V0fXMgcmF0aGVyIHRoYW4ge0BsaW5rIE1l
c3NhZ2V9cwotICAgICAqIHNpbmNlIHRoZSBncm91cCdzIHR5cGUgaXMgcHJlc3VtYWJseSB1bmtu
b3duLgotICAgICAqLwotICAgIHB1YmxpYyBMaXN0PFVua25vd25GaWVsZFNldD4gZ2V0R3JvdXBM
aXN0KCkgICAgICB7IHJldHVybiBncm91cDsgICAgICAgICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBPYmplY3Qgb3RoZXIpIHsKLSAgICAgIGlm
ICh0aGlzID09IG90aGVyKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAg
aWYgKCEob3RoZXIgaW5zdGFuY2VvZiBGaWVsZCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgfQotICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoZ2V0SWRlbnRpdHlBcnJheSgpLAot
ICAgICAgICAgICgoRmllbGQpIG90aGVyKS5nZXRJZGVudGl0eUFycmF5KCkpOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICByZXR1cm4g
QXJyYXlzLmhhc2hDb2RlKGdldElkZW50aXR5QXJyYXkoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogUmV0dXJucyB0aGUgYXJyYXkgb2Ygb2JqZWN0cyB0byBiZSB1c2VkIHRvIHVuaXF1ZWx5
IGlkZW50aWZ5IHRoaXMKLSAgICAgKiB7QGxpbmsgRmllbGR9IGluc3RhbmNlLgotICAgICAqLwot
ICAgIHByaXZhdGUgT2JqZWN0W10gZ2V0SWRlbnRpdHlBcnJheSgpIHsKLSAgICAgIHJldHVybiBu
ZXcgT2JqZWN0W10gewotICAgICAgICAgIHZhcmludCwKLSAgICAgICAgICBmaXhlZDMyLAotICAg
ICAgICAgIGZpeGVkNjQsCi0gICAgICAgICAgbGVuZ3RoRGVsaW1pdGVkLAotICAgICAgICAgIGdy
b3VwfTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXJpYWxpemVzIHRoZSBmaWVsZCwgaW5j
bHVkaW5nIGZpZWxkIG51bWJlciwgYW5kIHdyaXRlcyBpdCB0bwotICAgICAqIHtAY29kZSBvdXRw
dXR9LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oZmluYWwgaW50IGZpZWxkTnVt
YmVyLCBmaW5hbCBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZm9yIChmaW5hbCBsb25nIHZhbHVlIDog
dmFyaW50KSB7Ci0gICAgICAgIG91dHB1dC53cml0ZVVJbnQ2NChmaWVsZE51bWJlciwgdmFsdWUp
OwotICAgICAgfQotICAgICAgZm9yIChmaW5hbCBpbnQgdmFsdWUgOiBmaXhlZDMyKSB7Ci0gICAg
ICAgIG91dHB1dC53cml0ZUZpeGVkMzIoZmllbGROdW1iZXIsIHZhbHVlKTsKLSAgICAgIH0KLSAg
ICAgIGZvciAoZmluYWwgbG9uZyB2YWx1ZSA6IGZpeGVkNjQpIHsKLSAgICAgICAgb3V0cHV0Lndy
aXRlRml4ZWQ2NChmaWVsZE51bWJlciwgdmFsdWUpOwotICAgICAgfQotICAgICAgZm9yIChmaW5h
bCBCeXRlU3RyaW5nIHZhbHVlIDogbGVuZ3RoRGVsaW1pdGVkKSB7Ci0gICAgICAgIG91dHB1dC53
cml0ZUJ5dGVzKGZpZWxkTnVtYmVyLCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGZpbmFs
IFVua25vd25GaWVsZFNldCB2YWx1ZSA6IGdyb3VwKSB7Ci0gICAgICAgIG91dHB1dC53cml0ZUdy
b3VwKGZpZWxkTnVtYmVyLCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gZW5jb2RlIHRoaXMgZmllbGQs
IGluY2x1ZGluZyBmaWVsZAotICAgICAqIG51bWJlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50
IGdldFNlcmlhbGl6ZWRTaXplKGZpbmFsIGludCBmaWVsZE51bWJlcikgewotICAgICAgaW50IHJl
c3VsdCA9IDA7Ci0gICAgICBmb3IgKGZpbmFsIGxvbmcgdmFsdWUgOiB2YXJpbnQpIHsKLSAgICAg
ICAgcmVzdWx0ICs9IENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVVSW50NjRTaXplKGZpZWxkTnVt
YmVyLCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGZpbmFsIGludCB2YWx1ZSA6IGZpeGVk
MzIpIHsKLSAgICAgICAgcmVzdWx0ICs9IENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVGaXhlZDMy
U2l6ZShmaWVsZE51bWJlciwgdmFsdWUpOwotICAgICAgfQotICAgICAgZm9yIChmaW5hbCBsb25n
IHZhbHVlIDogZml4ZWQ2NCkgewotICAgICAgICByZXN1bHQgKz0gQ29kZWRPdXRwdXRTdHJlYW0u
Y29tcHV0ZUZpeGVkNjRTaXplKGZpZWxkTnVtYmVyLCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBm
b3IgKGZpbmFsIEJ5dGVTdHJpbmcgdmFsdWUgOiBsZW5ndGhEZWxpbWl0ZWQpIHsKLSAgICAgICAg
cmVzdWx0ICs9IENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVCeXRlc1NpemUoZmllbGROdW1iZXIs
IHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGZvciAoZmluYWwgVW5rbm93bkZpZWxkU2V0IHZhbHVl
IDogZ3JvdXApIHsKLSAgICAgICAgcmVzdWx0ICs9IENvZGVkT3V0cHV0U3RyZWFtLmNvbXB1dGVH
cm91cFNpemUoZmllbGROdW1iZXIsIHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VyaWFsaXplcyB0aGUgZmllbGQsIGluY2x1
ZGluZyBmaWVsZCBudW1iZXIsIGFuZCB3cml0ZXMgaXQgdG8KLSAgICAgKiB7QGNvZGUgb3V0cHV0
fSwgdXNpbmcge0Bjb2RlIE1lc3NhZ2VTZXR9IHdpcmUgZm9ybWF0LgotICAgICAqLwotICAgIHB1
YmxpYyB2b2lkIHdyaXRlQXNNZXNzYWdlU2V0RXh0ZW5zaW9uVG8oCi0gICAgICAgIGZpbmFsIGlu
dCBmaWVsZE51bWJlciwKLSAgICAgICAgZmluYWwgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KQot
ICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgZm9yIChmaW5hbCBCeXRlU3RyaW5n
IHZhbHVlIDogbGVuZ3RoRGVsaW1pdGVkKSB7Ci0gICAgICAgIG91dHB1dC53cml0ZVJhd01lc3Nh
Z2VTZXRFeHRlbnNpb24oZmllbGROdW1iZXIsIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvKioKLSAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0byBlbmNvZGUg
dGhpcyBmaWVsZCwgaW5jbHVkaW5nIGZpZWxkCi0gICAgICogbnVtYmVyLCB1c2luZyB7QGNvZGUg
TWVzc2FnZVNldH0gd2lyZSBmb3JtYXQuCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRTZXJp
YWxpemVkU2l6ZUFzTWVzc2FnZVNldEV4dGVuc2lvbihmaW5hbCBpbnQgZmllbGROdW1iZXIpIHsK
LSAgICAgIGludCByZXN1bHQgPSAwOwotICAgICAgZm9yIChmaW5hbCBCeXRlU3RyaW5nIHZhbHVl
IDogbGVuZ3RoRGVsaW1pdGVkKSB7Ci0gICAgICAgIHJlc3VsdCArPSBDb2RlZE91dHB1dFN0cmVh
bS5jb21wdXRlUmF3TWVzc2FnZVNldEV4dGVuc2lvblNpemUoCi0gICAgICAgICAgZmllbGROdW1i
ZXIsIHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAg
cHJpdmF0ZSBMaXN0PExvbmc+IHZhcmludDsKLSAgICBwcml2YXRlIExpc3Q8SW50ZWdlcj4gZml4
ZWQzMjsKLSAgICBwcml2YXRlIExpc3Q8TG9uZz4gZml4ZWQ2NDsKLSAgICBwcml2YXRlIExpc3Q8
Qnl0ZVN0cmluZz4gbGVuZ3RoRGVsaW1pdGVkOwotICAgIHByaXZhdGUgTGlzdDxVbmtub3duRmll
bGRTZXQ+IGdyb3VwOwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBidWlsZCBhIHtAbGluayBG
aWVsZH0gd2l0aGluIGFuIHtAbGluayBVbmtub3duRmllbGRTZXR9LgotICAgICAqCi0gICAgICog
PHA+VXNlIHtAbGluayBGaWVsZCNuZXdCdWlsZGVyKCl9IHRvIGNvbnN0cnVjdCBhIHtAY29kZSBC
dWlsZGVyfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEJ1aWxkZXIg
ewotICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGRpcmVj
dGx5IChleGNlcHQgZnJvbSAnY3JlYXRlJykuCi0gICAgICBwcml2YXRlIEJ1aWxkZXIoKSB7fQot
Ci0gICAgICBwcml2YXRlIHN0YXRpYyBCdWlsZGVyIGNyZWF0ZSgpIHsKLSAgICAgICAgQnVpbGRl
ciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5yZXN1bHQgPSBuZXcg
RmllbGQoKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXI7Ci0gICAgICB9Ci0KLSAgICAgIHByaXZh
dGUgRmllbGQgcmVzdWx0OwotCi0gICAgICAvKioKLSAgICAgICAqIEJ1aWxkIHRoZSBmaWVsZC4g
IEFmdGVyIHtAY29kZSBidWlsZCgpfSBoYXMgYmVlbiBjYWxsZWQsIHRoZQotICAgICAgICoge0Bj
b2RlIEJ1aWxkZXJ9IGlzIG5vIGxvbmdlciB1c2FibGUuICBDYWxsaW5nIGFueSBvdGhlciBtZXRo
b2Qgd2lsbAotICAgICAgICogcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgY2FuIGNh
dXNlIGEKLSAgICAgICAqIHtAY29kZSBOdWxsUG9pbnRlckV4Y2VwdGlvbn0gdG8gYmUgdGhyb3du
LgotICAgICAgICovCi0gICAgICBwdWJsaWMgRmllbGQgYnVpbGQoKSB7Ci0gICAgICAgIGlmIChy
ZXN1bHQudmFyaW50ID09IG51bGwpIHsKLSAgICAgICAgICByZXN1bHQudmFyaW50ID0gQ29sbGVj
dGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmVzdWx0LnZh
cmludCA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QocmVzdWx0LnZhcmludCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdC5maXhlZDMyID09IG51bGwpIHsKLSAgICAgICAgICBy
ZXN1bHQuZml4ZWQzMiA9IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHJlc3VsdC5maXhlZDMyID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlz
dChyZXN1bHQuZml4ZWQzMik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdC5maXhlZDY0
ID09IG51bGwpIHsKLSAgICAgICAgICByZXN1bHQuZml4ZWQ2NCA9IENvbGxlY3Rpb25zLmVtcHR5
TGlzdCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJlc3VsdC5maXhlZDY0ID0gQ29s
bGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChyZXN1bHQuZml4ZWQ2NCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHJlc3VsdC5sZW5ndGhEZWxpbWl0ZWQgPT0gbnVsbCkgewotICAgICAgICAgIHJl
c3VsdC5sZW5ndGhEZWxpbWl0ZWQgPSBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICByZXN1bHQubGVuZ3RoRGVsaW1pdGVkID0KLSAgICAgICAgICAg
IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QocmVzdWx0Lmxlbmd0aERlbGltaXRlZCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdC5ncm91cCA9PSBudWxsKSB7Ci0gICAgICAgICAg
cmVzdWx0Lmdyb3VwID0gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgcmVzdWx0Lmdyb3VwID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChy
ZXN1bHQuZ3JvdXApOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgRmllbGQgcmV0dXJuTWUg
PSByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdCA9IG51bGw7Ci0gICAgICAgIHJldHVybiByZXR1cm5N
ZTsKLSAgICAgIH0KLQotICAgICAgLyoqIERpc2NhcmQgdGhlIGZpZWxkJ3MgY29udGVudHMuICov
Ci0gICAgICBwdWJsaWMgQnVpbGRlciBjbGVhcigpIHsKLSAgICAgICAgcmVzdWx0ID0gbmV3IEZp
ZWxkKCk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotCi0gICAgICAvKioKLSAgICAg
ICAqIE1lcmdlIHRoZSB2YWx1ZXMgaW4ge0Bjb2RlIG90aGVyfSBpbnRvIHRoaXMgZmllbGQuICBG
b3IgZWFjaCBsaXN0Ci0gICAgICAgKiBvZiB2YWx1ZXMsIHtAY29kZSBvdGhlcn0ncyB2YWx1ZXMg
YXJlIGFwcGVuZCB0byB0aGUgb25lcyBpbiB0aGlzCi0gICAgICAgKiBmaWVsZC4KLSAgICAgICAq
LwotICAgICAgcHVibGljIEJ1aWxkZXIgbWVyZ2VGcm9tKGZpbmFsIEZpZWxkIG90aGVyKSB7Ci0g
ICAgICAgIGlmICghb3RoZXIudmFyaW50LmlzRW1wdHkoKSkgewotICAgICAgICAgIGlmIChyZXN1
bHQudmFyaW50ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJlc3VsdC52YXJpbnQgPSBuZXcgQXJy
YXlMaXN0PExvbmc+KCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJlc3VsdC52YXJpbnQuYWRk
QWxsKG90aGVyLnZhcmludCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFvdGhlci5maXhlZDMy
LmlzRW1wdHkoKSkgewotICAgICAgICAgIGlmIChyZXN1bHQuZml4ZWQzMiA9PSBudWxsKSB7Ci0g
ICAgICAgICAgICByZXN1bHQuZml4ZWQzMiA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgcmVzdWx0LmZpeGVkMzIuYWRkQWxsKG90aGVyLmZpeGVkMzIp
OwotICAgICAgICB9Ci0gICAgICAgIGlmICghb3RoZXIuZml4ZWQ2NC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICBpZiAocmVzdWx0LmZpeGVkNjQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmVzdWx0
LmZpeGVkNjQgPSBuZXcgQXJyYXlMaXN0PExvbmc+KCk7Ci0gICAgICAgICAgfQotICAgICAgICAg
IHJlc3VsdC5maXhlZDY0LmFkZEFsbChvdGhlci5maXhlZDY0KTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoIW90aGVyLmxlbmd0aERlbGltaXRlZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICBpZiAo
cmVzdWx0Lmxlbmd0aERlbGltaXRlZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXN1bHQubGVu
Z3RoRGVsaW1pdGVkID0gbmV3IEFycmF5TGlzdDxCeXRlU3RyaW5nPigpOwotICAgICAgICAgIH0K
LSAgICAgICAgICByZXN1bHQubGVuZ3RoRGVsaW1pdGVkLmFkZEFsbChvdGhlci5sZW5ndGhEZWxp
bWl0ZWQpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghb3RoZXIuZ3JvdXAuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgaWYgKHJlc3VsdC5ncm91cCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXN1
bHQuZ3JvdXAgPSBuZXcgQXJyYXlMaXN0PFVua25vd25GaWVsZFNldD4oKTsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgcmVzdWx0Lmdyb3VwLmFkZEFsbChvdGhlci5ncm91cCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0KLSAgICAgIC8qKiBBZGQgYSB2YXJpbnQg
dmFsdWUuICovCi0gICAgICBwdWJsaWMgQnVpbGRlciBhZGRWYXJpbnQoZmluYWwgbG9uZyB2YWx1
ZSkgewotICAgICAgICBpZiAocmVzdWx0LnZhcmludCA9PSBudWxsKSB7Ci0gICAgICAgICAgcmVz
dWx0LnZhcmludCA9IG5ldyBBcnJheUxpc3Q8TG9uZz4oKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXN1bHQudmFyaW50LmFkZCh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQot
Ci0gICAgICAvKiogQWRkIGEgZml4ZWQzMiB2YWx1ZS4gKi8KLSAgICAgIHB1YmxpYyBCdWlsZGVy
IGFkZEZpeGVkMzIoZmluYWwgaW50IHZhbHVlKSB7Ci0gICAgICAgIGlmIChyZXN1bHQuZml4ZWQz
MiA9PSBudWxsKSB7Ci0gICAgICAgICAgcmVzdWx0LmZpeGVkMzIgPSBuZXcgQXJyYXlMaXN0PElu
dGVnZXI+KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmZpeGVkMzIuYWRkKHZhbHVlKTsK
LSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0KLSAgICAgIC8qKiBBZGQgYSBmaXhlZDY0
IHZhbHVlLiAqLwotICAgICAgcHVibGljIEJ1aWxkZXIgYWRkRml4ZWQ2NChmaW5hbCBsb25nIHZh
bHVlKSB7Ci0gICAgICAgIGlmIChyZXN1bHQuZml4ZWQ2NCA9PSBudWxsKSB7Ci0gICAgICAgICAg
cmVzdWx0LmZpeGVkNjQgPSBuZXcgQXJyYXlMaXN0PExvbmc+KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmVzdWx0LmZpeGVkNjQuYWRkKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICB9Ci0KLSAgICAgIC8qKiBBZGQgYSBsZW5ndGgtZGVsaW1pdGVkIHZhbHVlLiAqLwotICAgICAg
cHVibGljIEJ1aWxkZXIgYWRkTGVuZ3RoRGVsaW1pdGVkKGZpbmFsIEJ5dGVTdHJpbmcgdmFsdWUp
IHsKLSAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGhEZWxpbWl0ZWQgPT0gbnVsbCkgewotICAgICAg
ICAgIHJlc3VsdC5sZW5ndGhEZWxpbWl0ZWQgPSBuZXcgQXJyYXlMaXN0PEJ5dGVTdHJpbmc+KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0Lmxlbmd0aERlbGltaXRlZC5hZGQodmFsdWUpOwot
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQotICAgICAgLyoqIEFkZCBhbiBlbWJlZGRl
ZCBncm91cC4gKi8KLSAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZEdyb3VwKGZpbmFsIFVua25vd25G
aWVsZFNldCB2YWx1ZSkgewotICAgICAgICBpZiAocmVzdWx0Lmdyb3VwID09IG51bGwpIHsKLSAg
ICAgICAgICByZXN1bHQuZ3JvdXAgPSBuZXcgQXJyYXlMaXN0PFVua25vd25GaWVsZFNldD4oKTsK
LSAgICAgICAgfQotICAgICAgICByZXN1bHQuZ3JvdXAuYWRkKHZhbHVlKTsKLSAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlciB0byBp
bXBsZW1lbnQgTWVzc2FnZUxpdGUgaW50ZXJmYWNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBm
aW5hbCBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcjxVbmtub3duRmllbGRTZXQ+
IHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVW5rbm93bkZpZWxkU2V0IHBhcnNlUGFydGlh
bEZyb20oCi0gICAgICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQsIEV4dGVuc2lvblJlZ2lzdHJ5
TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICBCdWlsZGVyIGJ1aWxkZXIgPSBuZXdCdWlsZGVyKCk7Ci0g
ICAgICB0cnkgewotICAgICAgICBidWlsZGVyLm1lcmdlRnJvbShpbnB1dCk7Ci0gICAgICB9IGNh
dGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBl
LnNldFVuZmluaXNoZWRNZXNzYWdlKGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCkpOwotICAgICAgfSBj
YXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29s
QnVmZmVyRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgLnNldFVuZmluaXNo
ZWRNZXNzYWdlKGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCkpOwotICAgICAgfQotICAgICAgcmV0dXJu
IGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgUGFyc2VyIFBBUlNFUiA9IG5ldyBQYXJzZXIoKTsKLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyBmaW5hbCBQYXJzZXIgZ2V0UGFyc2VyRm9yVHlwZSgpIHsKLSAgICByZXR1cm4gUEFSU0VSOwot
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvVW5rbm93bkZpZWxkU2V0TGl0ZS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9j
b20vZ29vZ2xlL3Byb3RvYnVmL1Vua25vd25GaWVsZFNldExpdGUuamF2YQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTUwMGY5MDVmY2FmNTgxZDE5YjI0ZjllMDQ4Njk5NDg2ZTFhZjBj
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29y
ZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVW5rbm93bkZpZWxkU2V0TGl0ZS5q
YXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBq
YXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLS8qKgotICog
e0Bjb2RlIFVua25vd25GaWVsZFNldExpdGV9IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBmaWVs
ZHMgd2hpY2ggd2VyZSBzZWVuCi0gKiB3aGVuIHBhcnNpbmcgYSBwcm90b2NvbCBtZXNzYWdlIGJ1
dCB3aG9zZSBmaWVsZCBudW1iZXJzIG9yIHR5cGVzIGFyZQotICogdW5yZWNvZ25pemVkLiBUaGlz
IG1vc3QgZnJlcXVlbnRseSBvY2N1cnMgd2hlbiBuZXcgZmllbGRzIGFyZSBhZGRlZCB0byBhCi0g
KiBtZXNzYWdlIHR5cGUgYW5kIHRoZW4gbWVzc2FnZXMgY29udGFpbmluZyB0aG9zZSBmaWVsZHMg
YXJlIHJlYWQgYnkgb2xkCi0gKiBzb2Z0d2FyZSB0aGF0IHdhcyBjb21waWxlZCBiZWZvcmUgdGhl
IG5ldyB0eXBlcyB3ZXJlIGFkZGVkLgotICoKLSAqIDxwPkZvciB1c2UgYnkgZ2VuZXJhdGVkIGNv
ZGUgb25seS4KLSAqCi0gKiBAYXV0aG9yIGR3ZWlzQGdvb2dsZS5jb20gKERhbmllbCBXZWlzKQot
ICovCi1wdWJsaWMgZmluYWwgY2xhc3MgVW5rbm93bkZpZWxkU2V0TGl0ZSB7Ci0gIAotICAvLyBB
cmJpdHJhcmlseSBjaG9zZW4uCi0gIC8vIFRPRE8oZHdlaXMpOiBUdW5lIHRoaXMgbnVtYmVyPwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0NBUEFDSVRZID0gODsKLQotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBVbmtub3duRmllbGRTZXRMaXRlIERFRkFVTFRfSU5TVEFOQ0UgPQotICAg
ICAgbmV3IFVua25vd25GaWVsZFNldExpdGUoMCwgbmV3IGludFswXSwgbmV3IE9iamVjdFswXSwg
ZmFsc2UgLyogaXNNdXRhYmxlICovKTsKLQotICAvKioKLSAgICogR2V0IGFuIGVtcHR5IHtAY29k
ZSBVbmtub3duRmllbGRTZXRMaXRlfS4KLSAgICoKLSAgICogPHA+Rm9yIHVzZSBieSBnZW5lcmF0
ZWQgY29kZSBvbmx5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBVbmtub3duRmllbGRTZXRMaXRl
IGdldERlZmF1bHRJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gREVGQVVMVF9JTlNUQU5DRTsKLSAg
fQotICAKLSAgLyoqCi0gICAqIFJldHVybnMgYSBuZXcgbXV0YWJsZSBpbnN0YW5jZS4KLSAgICov
Ci0gIHN0YXRpYyBVbmtub3duRmllbGRTZXRMaXRlIG5ld0luc3RhbmNlKCkgewotICAgIHJldHVy
biBuZXcgVW5rbm93bkZpZWxkU2V0TGl0ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMg
YSBtdXRhYmxlIHtAY29kZSBVbmtub3duRmllbGRTZXRMaXRlfSB0aGF0IGlzIHRoZSBjb21wb3Np
dGUgb2Yge0Bjb2RlIGZpcnN0fSBhbmQKLSAgICoge0Bjb2RlIHNlY29uZH0uCi0gICAqLwotICBz
dGF0aWMgVW5rbm93bkZpZWxkU2V0TGl0ZSBtdXRhYmxlQ29weU9mKFVua25vd25GaWVsZFNldExp
dGUgZmlyc3QsIFVua25vd25GaWVsZFNldExpdGUgc2Vjb25kKSB7Ci0gICAgaW50IGNvdW50ID0g
Zmlyc3QuY291bnQgKyBzZWNvbmQuY291bnQ7Ci0gICAgaW50W10gdGFncyA9IEFycmF5cy5jb3B5
T2YoZmlyc3QudGFncywgY291bnQpOwotICAgIFN5c3RlbS5hcnJheWNvcHkoc2Vjb25kLnRhZ3Ms
IDAsIHRhZ3MsIGZpcnN0LmNvdW50LCBzZWNvbmQuY291bnQpOwotICAgIE9iamVjdFtdIG9iamVj
dHMgPSBBcnJheXMuY29weU9mKGZpcnN0Lm9iamVjdHMsIGNvdW50KTsKLSAgICBTeXN0ZW0uYXJy
YXljb3B5KHNlY29uZC5vYmplY3RzLCAwLCBvYmplY3RzLCBmaXJzdC5jb3VudCwgc2Vjb25kLmNv
dW50KTsKLSAgICByZXR1cm4gbmV3IFVua25vd25GaWVsZFNldExpdGUoY291bnQsIHRhZ3MsIG9i
amVjdHMsIHRydWUgLyogaXNNdXRhYmxlICovKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHNldC4KLSAgICovCi0gIHByaXZhdGUgaW50IGNvdW50
OwotICAKLSAgLyoqCi0gICAqIFRoZSB0YWcgbnVtYmVycyBmb3IgdGhlIGVsZW1lbnRzIGluIHRo
ZSBzZXQuCi0gICAqLwotICBwcml2YXRlIGludFtdIHRhZ3M7Ci0gIAotICAvKioKLSAgICogVGhl
IGJveGVkIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHNldC4KLSAgICovCi0gIHByaXZh
dGUgT2JqZWN0W10gb2JqZWN0czsKLSAgCi0gIC8qKgotICAgKiBUaGUgbGF6aWx5IGNvbXB1dGVk
IHNlcmlhbGl6ZWQgc2l6ZSBvZiB0aGUgc2V0LgotICAgKi8KLSAgcHJpdmF0ZSBpbnQgbWVtb2l6
ZWRTZXJpYWxpemVkU2l6ZSA9IC0xOwotICAKLSAgLyoqCi0gICAqIEluZGljYXRlcyB0aGF0IHRo
aXMgb2JqZWN0IGlzIG11dGFibGUuIAotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzTXV0YWJs
ZTsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG11dGFibGUge0Bjb2RlIFVua25vd25GaWVs
ZFNldExpdGV9LgotICAgKi8KLSAgcHJpdmF0ZSBVbmtub3duRmllbGRTZXRMaXRlKCkgewotICAg
IHRoaXMoMCwgbmV3IGludFtNSU5fQ0FQQUNJVFldLCBuZXcgT2JqZWN0W01JTl9DQVBBQ0lUWV0s
IHRydWUgLyogaXNNdXRhYmxlICovKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdHMg
dGhlIHtAY29kZSBVbmtub3duRmllbGRTZXRMaXRlfS4KLSAgICovCi0gIHByaXZhdGUgVW5rbm93
bkZpZWxkU2V0TGl0ZShpbnQgY291bnQsIGludFtdIHRhZ3MsIE9iamVjdFtdIG9iamVjdHMsIGJv
b2xlYW4gaXNNdXRhYmxlKSB7Ci0gICAgdGhpcy5jb3VudCA9IGNvdW50OwotICAgIHRoaXMudGFn
cyA9IHRhZ3M7Ci0gICAgdGhpcy5vYmplY3RzID0gb2JqZWN0czsKLSAgICB0aGlzLmlzTXV0YWJs
ZSA9IGlzTXV0YWJsZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIE1hcmtzIHRoaXMgb2JqZWN0IGFz
IGltbXV0YWJsZS4KLSAgICogCi0gICAqIDxwPkZ1dHVyZSBjYWxscyB0byBtZXRob2RzIHRoYXQg
YXR0ZW1wdCB0byBtb2RpZnkgdGhpcyBvYmplY3Qgd2lsbCB0aHJvdy4KLSAgICovCi0gIHB1Ymxp
YyB2b2lkIG1ha2VJbW11dGFibGUoKSB7Ci0gICAgdGhpcy5pc011dGFibGUgPSBmYWxzZTsKLSAg
fQotICAKLSAgLyoqCi0gICAqIFRocm93cyBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRPcGVyYXRpb25F
eGNlcHRpb259IGlmIGltbXV0YWJsZS4KLSAgICovCi0gIHZvaWQgY2hlY2tNdXRhYmxlKCkgewot
ICAgIGlmICghaXNNdXRhYmxlKSB7Ci0gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRp
b25FeGNlcHRpb24oKTsgCi0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNlcmlhbGl6ZXMgdGhl
IHNldCBhbmQgd3JpdGVzIGl0IHRvIHtAY29kZSBvdXRwdXR9LgotICAgKgotICAgKiA8cD5Gb3Ig
dXNlIGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHkuCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZVRv
KENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgIGludCB0YWcgPSB0YWdzW2ldOwot
ICAgICAgaW50IGZpZWxkTnVtYmVyID0gV2lyZUZvcm1hdC5nZXRUYWdGaWVsZE51bWJlcih0YWcp
OwotICAgICAgc3dpdGNoIChXaXJlRm9ybWF0LmdldFRhZ1dpcmVUeXBlKHRhZykpIHsKLSAgICAg
ICAgY2FzZSBXaXJlRm9ybWF0LldJUkVUWVBFX1ZBUklOVDoKLSAgICAgICAgICBvdXRwdXQud3Jp
dGVVSW50NjQoZmllbGROdW1iZXIsIChMb25nKSBvYmplY3RzW2ldKTsKLSAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXaXJlRm9ybWF0LldJUkVUWVBFX0ZJWEVEMzI6Ci0gICAgICAgICAg
b3V0cHV0LndyaXRlRml4ZWQzMihmaWVsZE51bWJlciwgKEludGVnZXIpIG9iamVjdHNbaV0pOwot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfRklYRUQ2
NDoKLSAgICAgICAgICBvdXRwdXQud3JpdGVGaXhlZDY0KGZpZWxkTnVtYmVyLCAoTG9uZykgb2Jq
ZWN0c1tpXSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2lyZUZvcm1hdC5XSVJF
VFlQRV9MRU5HVEhfREVMSU1JVEVEOgotICAgICAgICAgIG91dHB1dC53cml0ZUJ5dGVzKGZpZWxk
TnVtYmVyLCAoQnl0ZVN0cmluZykgb2JqZWN0c1tpXSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgV2lyZUZvcm1hdC5XSVJFVFlQRV9TVEFSVF9HUk9VUDoKLSAgICAgICAgICBvdXRw
dXQud3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXQuV0lSRVRZUEVfU1RBUlRfR1JPVVAp
OwotICAgICAgICAgICgoVW5rbm93bkZpZWxkU2V0TGl0ZSkgb2JqZWN0c1tpXSkud3JpdGVUbyhv
dXRwdXQpOwotICAgICAgICAgIG91dHB1dC53cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1h
dC5XSVJFVFlQRV9FTkRfR1JPVVApOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5pbnZhbGlk
V2lyZVR5cGUoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBu
dW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gZW5jb2RlIHRoaXMgc2V0LgotICAgKgotICAgKiA8
cD5Gb3IgdXNlIGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHkuCi0gICAqLwotICBwdWJsaWMgaW50IGdl
dFNlcmlhbGl6ZWRTaXplKCkgewotICAgIGludCBzaXplID0gbWVtb2l6ZWRTZXJpYWxpemVkU2l6
ZTsKLSAgICBpZiAoc2l6ZSAhPSAtMSkgewotICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotICAg
IAotICAgIHNpemUgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewot
ICAgICAgaW50IHRhZyA9IHRhZ3NbaV07Ci0gICAgICBpbnQgZmllbGROdW1iZXIgPSBXaXJlRm9y
bWF0LmdldFRhZ0ZpZWxkTnVtYmVyKHRhZyk7Ci0gICAgICBzd2l0Y2ggKFdpcmVGb3JtYXQuZ2V0
VGFnV2lyZVR5cGUodGFnKSkgewotICAgICAgICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfVkFS
SU5UOgotICAgICAgICAgIHNpemUgKz0gQ29kZWRPdXRwdXRTdHJlYW0uY29tcHV0ZVVJbnQ2NFNp
emUoZmllbGROdW1iZXIsIChMb25nKSBvYmplY3RzW2ldKTsKLSAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBXaXJlRm9ybWF0LldJUkVUWVBFX0ZJWEVEMzI6Ci0gICAgICAgICAgc2l6ZSAr
PSBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlRml4ZWQzMlNpemUoZmllbGROdW1iZXIsIChJbnRl
Z2VyKSBvYmplY3RzW2ldKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXaXJlRm9y
bWF0LldJUkVUWVBFX0ZJWEVENjQ6Ci0gICAgICAgICAgc2l6ZSArPSBDb2RlZE91dHB1dFN0cmVh
bS5jb21wdXRlRml4ZWQ2NFNpemUoZmllbGROdW1iZXIsIChMb25nKSBvYmplY3RzW2ldKTsKLSAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9E
RUxJTUlURUQ6Ci0gICAgICAgICAgc2l6ZSArPSBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlQnl0
ZXNTaXplKGZpZWxkTnVtYmVyLCAoQnl0ZVN0cmluZykgb2JqZWN0c1tpXSk7Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgV2lyZUZvcm1hdC5XSVJFVFlQRV9TVEFSVF9HUk9VUDoKLSAg
ICAgICAgICBzaXplICs9ICBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlVGFnU2l6ZShmaWVsZE51
bWJlcikgKiAyCi0gICAgICAgICAgICAgICsgKChVbmtub3duRmllbGRTZXRMaXRlKSBvYmplY3Rz
W2ldKS5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uLmludmFsaWRXaXJlVHlwZSgpKTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgbWVtb2l6ZWRTZXJpYWxpemVkU2l6ZSA9IHNpemU7Ci0gICAgCi0gICAgcmV0
dXJuIHNpemU7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9i
amVjdCBvYmopIHsKLSAgICBpZiAodGhpcyA9PSBvYmopIHsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChvYmogPT0gbnVsbCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIFVua25vd25GaWVsZFNldExpdGUpKSB7Ci0g
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIFVua25vd25GaWVsZFNldExpdGUg
b3RoZXIgPSAoVW5rbm93bkZpZWxkU2V0TGl0ZSkgb2JqOyAgICAKLSAgICBpZiAoY291bnQgIT0g
b3RoZXIuY291bnQKLSAgICAgICAgLy8gVE9ETyhkd2Vpcyk6IE9ubHkgaGF2ZSB0byBjb21wYXJl
IHVwIHRvIGNvdW50IGJ1dCBhdCB3b3JzdCAyeCB3b3JzZSB0aGFuIHdlIG5lZWQgdG8gZG8uCi0g
ICAgICAgIHx8ICFBcnJheXMuZXF1YWxzKHRhZ3MsIG90aGVyLnRhZ3MpCi0gICAgICAgIHx8ICFB
cnJheXMuZGVlcEVxdWFscyhvYmplY3RzLCBvdGhlci5vYmplY3RzKSkgewotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgaW50IGhhc2hDb2RlID0gMTc7Ci0gICAgCi0g
ICAgaGFzaENvZGUgPSAzMSAqIGhhc2hDb2RlICsgY291bnQ7Ci0gICAgaGFzaENvZGUgPSAzMSAq
IGhhc2hDb2RlICsgQXJyYXlzLmhhc2hDb2RlKHRhZ3MpOwotICAgIGhhc2hDb2RlID0gMzEgKiBo
YXNoQ29kZSArIEFycmF5cy5kZWVwSGFzaENvZGUob2JqZWN0cyk7Ci0gICAgCi0gICAgcmV0dXJu
IGhhc2hDb2RlOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50cyBhIFN0cmluZyByZXByZXNlbnRh
dGlvbiBvZiB0aGUgdW5rbm93biBmaWVsZCBzZXQuCi0gICAqCi0gICAqIDxwPkZvciB1c2UgYnkg
Z2VuZXJhdGVkIGNvZGUgb25seS4KLSAgICoKLSAgICogQHBhcmFtIGJ1ZmZlciB0aGUgYnVmZmVy
IHRvIHdyaXRlIHRvCi0gICAqIEBwYXJhbSBpbmRlbnQgdGhlIG51bWJlciBvZiBzcGFjZXMgdGhl
IGZpZWxkcyBzaG91bGQgYmUgaW5kZW50ZWQgYnkKLSAgICovCi0gIGZpbmFsIHZvaWQgcHJpbnRX
aXRoSW5kZW50KFN0cmluZ0J1aWxkZXIgYnVmZmVyLCBpbnQgaW5kZW50KSB7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICBpbnQgZmllbGROdW1iZXIgPSBXaXJl
Rm9ybWF0LmdldFRhZ0ZpZWxkTnVtYmVyKHRhZ3NbaV0pOwotICAgICAgTWVzc2FnZUxpdGVUb1N0
cmluZy5wcmludEZpZWxkKGJ1ZmZlciwgaW5kZW50LCBTdHJpbmcudmFsdWVPZihmaWVsZE51bWJl
ciksIG9iamVjdHNbaV0pOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdG9yZUZpZWxk
KGludCB0YWcsIE9iamVjdCB2YWx1ZSkgewotICAgIGVuc3VyZUNhcGFjaXR5KCk7Ci0gICAgCi0g
ICAgdGFnc1tjb3VudF0gPSB0YWc7Ci0gICAgb2JqZWN0c1tjb3VudF0gPSB2YWx1ZTsKLSAgICBj
b3VudCsrOwotICB9Ci0gIAotICAvKioKLSAgICogRW5zdXJlcyB0aGF0IG91ciBhcnJheXMgYXJl
IGxvbmcgZW5vdWdoIHRvIHN0b3JlIG1vcmUgbWV0YWRhdGEuCi0gICAqLwotICBwcml2YXRlIHZv
aWQgZW5zdXJlQ2FwYWNpdHkoKSB7Ci0gICAgaWYgKGNvdW50ID09IHRhZ3MubGVuZ3RoKSB7ICAg
ICAgICAKLSAgICAgIGludCBpbmNyZW1lbnQgPSBjb3VudCA8IChNSU5fQ0FQQUNJVFkgLyAyKSA/
IE1JTl9DQVBBQ0lUWSA6IGNvdW50ID4+IDE7Ci0gICAgICBpbnQgbmV3TGVuZ3RoID0gY291bnQg
KyBpbmNyZW1lbnQ7Ci0gICAgICAgIAotICAgICAgdGFncyA9IEFycmF5cy5jb3B5T2YodGFncywg
bmV3TGVuZ3RoKTsKLSAgICAgIG9iamVjdHMgPSBBcnJheXMuY29weU9mKG9iamVjdHMsIG5ld0xl
bmd0aCk7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogUGFyc2UgYSBzaW5nbGUgZmllbGQg
ZnJvbSB7QGNvZGUgaW5wdXR9IGFuZCBtZXJnZSBpdCBpbnRvIHRoaXMgc2V0LgotICAgKgotICAg
KiA8cD5Gb3IgdXNlIGJ5IGdlbmVyYXRlZCBjb2RlIG9ubHkuCi0gICAqCi0gICAqIEBwYXJhbSB0
YWcgVGhlIGZpZWxkJ3MgdGFnIG51bWJlciwgd2hpY2ggd2FzIGFscmVhZHkgcGFyc2VkLgotICAg
KiBAcmV0dXJuIHtAY29kZSBmYWxzZX0gaWYgdGhlIHRhZyBpcyBhbiBlbmQgZ3JvdXAgdGFnLgot
ICAgKi8KLSAgYm9vbGVhbiBtZXJnZUZpZWxkRnJvbShmaW5hbCBpbnQgdGFnLCBmaW5hbCBDb2Rl
ZElucHV0U3RyZWFtIGlucHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGNoZWNrTXV0YWJs
ZSgpOwotICAgIGZpbmFsIGludCBmaWVsZE51bWJlciA9IFdpcmVGb3JtYXQuZ2V0VGFnRmllbGRO
dW1iZXIodGFnKTsKLSAgICBzd2l0Y2ggKFdpcmVGb3JtYXQuZ2V0VGFnV2lyZVR5cGUodGFnKSkg
ewotICAgICAgY2FzZSBXaXJlRm9ybWF0LldJUkVUWVBFX1ZBUklOVDoKLSAgICAgICAgc3RvcmVG
aWVsZCh0YWcsIGlucHV0LnJlYWRJbnQ2NCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICBjYXNlIFdpcmVGb3JtYXQuV0lSRVRZUEVfRklYRUQzMjoKLSAgICAgICAgc3RvcmVGaWVsZCh0
YWcsIGlucHV0LnJlYWRGaXhlZDMyKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNh
c2UgV2lyZUZvcm1hdC5XSVJFVFlQRV9GSVhFRDY0OgotICAgICAgICBzdG9yZUZpZWxkKHRhZywg
aW5wdXQucmVhZEZpeGVkNjQoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBX
aXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQ6Ci0gICAgICAgIHN0b3JlRmllbGQo
dGFnLCBpbnB1dC5yZWFkQnl0ZXMoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2Fz
ZSBXaXJlRm9ybWF0LldJUkVUWVBFX1NUQVJUX0dST1VQOgotICAgICAgICBmaW5hbCBVbmtub3du
RmllbGRTZXRMaXRlIHN1YkZpZWxkU2V0ID0gbmV3IFVua25vd25GaWVsZFNldExpdGUoKTsKLSAg
ICAgICAgc3ViRmllbGRTZXQubWVyZ2VGcm9tKGlucHV0KTsKLSAgICAgICAgaW5wdXQuY2hlY2tM
YXN0VGFnV2FzKAotICAgICAgICAgICAgV2lyZUZvcm1hdC5tYWtlVGFnKGZpZWxkTnVtYmVyLCBX
aXJlRm9ybWF0LldJUkVUWVBFX0VORF9HUk9VUCkpOwotICAgICAgICBzdG9yZUZpZWxkKHRhZywg
c3ViRmllbGRTZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgV2lyZUZvcm1h
dC5XSVJFVFlQRV9FTkRfR1JPVVA6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5pbnZhbGlk
V2lyZVR5cGUoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9k
IGZvciBtZXJnaW5nIGEgbmV3IGZpZWxkIGNvbnRhaW5pbmcgYSBzaW5nbGUgdmFyaW50Ci0gICAq
IHZhbHVlLiBUaGlzIGlzIHVzZWQgaW4gcGFydGljdWxhciB3aGVuIGFuIHVua25vd24gZW51bSB2
YWx1ZSBpcwotICAgKiBlbmNvdW50ZXJlZC4KLSAgICoKLSAgICogPHA+Rm9yIHVzZSBieSBnZW5l
cmF0ZWQgY29kZSBvbmx5LgotICAgKi8KLSAgVW5rbm93bkZpZWxkU2V0TGl0ZSBtZXJnZVZhcmlu
dEZpZWxkKGludCBmaWVsZE51bWJlciwgaW50IHZhbHVlKSB7Ci0gICAgY2hlY2tNdXRhYmxlKCk7
Ci0gICAgaWYgKGZpZWxkTnVtYmVyID09IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJn
dW1lbnRFeGNlcHRpb24oIlplcm8gaXMgbm90IGEgdmFsaWQgZmllbGQgbnVtYmVyLiIpOwotICAg
IH0KLQotICAgIHN0b3JlRmllbGQoV2lyZUZvcm1hdC5tYWtlVGFnKGZpZWxkTnVtYmVyLCBXaXJl
Rm9ybWF0LldJUkVUWVBFX1ZBUklOVCksIChsb25nKSB2YWx1ZSk7Ci0gICAgCi0gICAgcmV0dXJu
IHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBtZXJnaW5n
IGEgbGVuZ3RoLWRlbGltaXRlZCBmaWVsZC4KLSAgICoKLSAgICogPHA+Rm9yIHVzZSBieSBnZW5l
cmF0ZWQgY29kZSBvbmx5LgotICAgKi8KLSAgVW5rbm93bkZpZWxkU2V0TGl0ZSBtZXJnZUxlbmd0
aERlbGltaXRlZEZpZWxkKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgQnl0ZVN0cmluZyB2
YWx1ZSkgeyAgCi0gICAgY2hlY2tNdXRhYmxlKCk7Ci0gICAgaWYgKGZpZWxkTnVtYmVyID09IDAp
IHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlplcm8gaXMgbm90
IGEgdmFsaWQgZmllbGQgbnVtYmVyLiIpOwotICAgIH0KLQotICAgIHN0b3JlRmllbGQoV2lyZUZv
cm1hdC5tYWtlVGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJ
TUlURUQpLCB2YWx1ZSk7Ci0gICAgCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgCi0gIC8qKgot
ICAgKiBQYXJzZSBhbiBlbnRpcmUgbWVzc2FnZSBmcm9tIHtAY29kZSBpbnB1dH0gYW5kIG1lcmdl
IGl0cyBmaWVsZHMgaW50bwotICAgKiB0aGlzIHNldC4KLSAgICovCi0gIHByaXZhdGUgVW5rbm93
bkZpZWxkU2V0TGl0ZSBtZXJnZUZyb20oZmluYWwgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCkgdGhy
b3dzIElPRXhjZXB0aW9uIHsKLSAgICAvLyBFbnN1cmVzIGluaXRpYWxpemF0aW9uIGluIG1lcmdl
RmllbGRGcm9tLgotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBmaW5hbCBpbnQgdGFnID0gaW5w
dXQucmVhZFRhZygpOwotICAgICAgaWYgKHRhZyA9PSAwIHx8ICFtZXJnZUZpZWxkRnJvbSh0YWcs
IGlucHV0KSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRo
aXM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9Vbm1vZGlmaWFibGVMYXp5U3RyaW5nTGlzdC5qYXZhIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1VubW9kaWZpYWJsZUxhenlTdHJpbmdMaXN0
LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZTg3OTExNzg0MTgyOTU2ZjUz
NTNjNDBjMmQ3OWI5NzVjY2MxZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1Vu
bW9kaWZpYWJsZUxhenlTdHJpbmdMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdv
b2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdExpc3Q7Ci1pbXBvcnQg
amF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1w
b3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBq
YXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5SYW5kb21BY2Nlc3M7Ci0K
LS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIExhenlTdHJpbmdMaXN0fSB0aGF0
IHdyYXBzIGFub3RoZXIKLSAqIHtAbGluayBMYXp5U3RyaW5nTGlzdH0gc3VjaCB0aGF0IGl0IGNh
bm5vdCBiZSBtb2RpZmllZCB2aWEgdGhlIHdyYXBwZXIuCi0gKgotICogQGF1dGhvciBqb25wQGdv
b2dsZS5jb20gKEpvbiBQZXJsb3cpCi0gKi8KLXB1YmxpYyBjbGFzcyBVbm1vZGlmaWFibGVMYXp5
U3RyaW5nTGlzdCBleHRlbmRzIEFic3RyYWN0TGlzdDxTdHJpbmc+Ci0gICAgaW1wbGVtZW50cyBM
YXp5U3RyaW5nTGlzdCwgUmFuZG9tQWNjZXNzIHsKLQotICBwcml2YXRlIGZpbmFsIExhenlTdHJp
bmdMaXN0IGxpc3Q7Ci0KLSAgcHVibGljIFVubW9kaWZpYWJsZUxhenlTdHJpbmdMaXN0KExhenlT
dHJpbmdMaXN0IGxpc3QpIHsKLSAgICB0aGlzLmxpc3QgPSBsaXN0OwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBTdHJpbmcgZ2V0KGludCBpbmRleCkgewotICAgIHJldHVybiBsaXN0Lmdl
dChpbmRleCk7Ci0gIH0KLSAgCi0gIEBPdmVycmlkZQotICBwdWJsaWMgT2JqZWN0IGdldFJhdyhp
bnQgaW5kZXgpIHsKLSAgICByZXR1cm4gbGlzdC5nZXRSYXcoaW5kZXgpOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICByZXR1cm4gbGlzdC5zaXplKCk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIEJ5dGVTdHJpbmcgZ2V0Qnl0ZVN0cmluZyhpbnQg
aW5kZXgpIHsKLSAgICByZXR1cm4gbGlzdC5nZXRCeXRlU3RyaW5nKGluZGV4KTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBhZGQoQnl0ZVN0cmluZyBlbGVtZW50KSB7Ci0gICAg
dGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgc2V0KGludCBpbmRleCwgQnl0ZVN0cmluZyBlbGVtZW50KSB7
Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gYWRkQWxsQnl0ZVN0cmluZyhDb2xsZWN0aW9u
PD8gZXh0ZW5kcyBCeXRlU3RyaW5nPiBlbGVtZW50KSB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9y
dGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJ5
dGVbXSBnZXRCeXRlQXJyYXkoaW50IGluZGV4KSB7Ci0gICAgcmV0dXJuIGxpc3QuZ2V0Qnl0ZUFy
cmF5KGluZGV4KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBhZGQoYnl0ZVtd
IGVsZW1lbnQpIHsKLSAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24o
KTsKLSAgfQotICAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNldChpbnQgaW5kZXgsIGJ5
dGVbXSBlbGVtZW50KSB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0
aW9uKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gYWRkQWxsQnl0ZUFy
cmF5KENvbGxlY3Rpb248Ynl0ZVtdPiBlbGVtZW50KSB7Ci0gICAgdGhyb3cgbmV3IFVuc3VwcG9y
dGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIExp
c3RJdGVyYXRvcjxTdHJpbmc+IGxpc3RJdGVyYXRvcihmaW5hbCBpbnQgaW5kZXgpIHsKLSAgICBy
ZXR1cm4gbmV3IExpc3RJdGVyYXRvcjxTdHJpbmc+KCkgewotICAgICAgTGlzdEl0ZXJhdG9yPFN0
cmluZz4gaXRlciA9IGxpc3QubGlzdEl0ZXJhdG9yKGluZGV4KTsKLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgewotICAgICAgICByZXR1cm4gaXRlci5o
YXNOZXh0KCk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0cmlu
ZyBuZXh0KCkgewotICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7Ci0gICAgICB9Ci0KLSAgICAg
IEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4gaGFzUHJldmlvdXMoKSB7Ci0gICAgICAg
IHJldHVybiBpdGVyLmhhc1ByZXZpb3VzKCk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIFN0cmluZyBwcmV2aW91cygpIHsKLSAgICAgICAgcmV0dXJuIGl0ZXIucHJl
dmlvdXMoKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgaW50IG5l
eHRJbmRleCgpIHsKLSAgICAgICAgcmV0dXJuIGl0ZXIubmV4dEluZGV4KCk7Ci0gICAgICB9Ci0K
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGludCBwcmV2aW91c0luZGV4KCkgewotICAg
ICAgICByZXR1cm4gaXRlci5wcmV2aW91c0luZGV4KCk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkgewotICAgICAgICB0aHJvdyBuZXcgVW5z
dXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIG8pIHsKLSAgICAgICAgdGhyb3cgbmV3IFVu
c3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBvKSB7Ci0gICAgICAgIHRocm93IG5ldyBV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgICAgfQotICAgIH07Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIEl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3IoKSB7Ci0gICAg
cmV0dXJuIG5ldyBJdGVyYXRvcjxTdHJpbmc+KCkgewotICAgICAgSXRlcmF0b3I8U3RyaW5nPiBp
dGVyID0gbGlzdC5pdGVyYXRvcigpOwotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBi
b29sZWFuIGhhc05leHQoKSB7Ci0gICAgICAgIHJldHVybiBpdGVyLmhhc05leHQoKTsKLSAgICAg
IH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nIG5leHQoKSB7Ci0gICAg
ICAgIHJldHVybiBpdGVyLm5leHQoKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9w
ZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgICAgfQotICAgIH07Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIExpc3Q8Pz4gZ2V0VW5kZXJseWluZ0VsZW1lbnRzKCkgewotICAgIC8vIFRoZSBy
ZXR1cm5lZCB2YWx1ZSBpcyBhbHJlYWR5IHVubW9kaWZpYWJsZS4KLSAgICByZXR1cm4gbGlzdC5n
ZXRVbmRlcmx5aW5nRWxlbWVudHMoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBtZXJnZUZyb20oTGF6eVN0cmluZ0xpc3Qgb3RoZXIpIHsKLSAgICB0aHJvdyBuZXcgVW5zdXBw
b3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
TGlzdDxieXRlW10+IGFzQnl0ZUFycmF5TGlzdCgpIHsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMu
dW5tb2RpZmlhYmxlTGlzdChsaXN0LmFzQnl0ZUFycmF5TGlzdCgpKTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgTGlzdDxCeXRlU3RyaW5nPiBhc0J5dGVTdHJpbmdMaXN0KCkgewotICAg
IHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KGxpc3QuYXNCeXRlU3RyaW5nTGlz
dCgpKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgTGF6eVN0cmluZ0xpc3QgZ2V0VW5t
b2RpZmlhYmxlVmlldygpIHsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1Vuc2FmZUJ5dGVPcGVy
YXRpb25zLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYv
VW5zYWZlQnl0ZU9wZXJhdGlvbnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MGZiZjRkNDAxYzQwNGViZDhjNGM3NTljYjhjNGZkODgwMzBhNzBhYS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvVW5zYWZlQnl0ZU9wZXJhdGlvbnMuamF2YQorKysgL2Rldi9udWxs
CkBAIC0xLDg0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1w
YWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9u
OwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKgotICogUHJvdmlkZXMgYSBudW1i
ZXIgb2YgdW5zYWZlIGJ5dGUgb3BlcmF0aW9ucyB0byBiZSB1c2VkIGJ5IGFkdmFuY2VkIGFwcGxp
Y2F0aW9ucyB3aXRoIGhpZ2gKLSAqIHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50cy4gVGhlc2UgbWV0
aG9kcyBhcmUgcmVmZXJyZWQgdG8gYXMgInVuc2FmZSIgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhl
eQotICogcG90ZW50aWFsbHkgZXhwb3NlIHRoZSBiYWNraW5nIGJ1ZmZlciBvZiBhIHtAbGluayBC
eXRlU3RyaW5nfSB0byB0aGUgYXBwbGljYXRpb24uCi0gKgotICogPHA+PHN0cm9uZz5ESVNDTEFJ
TUVSOjwvc3Ryb25nPiBUaGUgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBpZiBpdCBpcwotICogZ3VhcmFudGVlZCB0aGF0IHRoZSBidWZmZXIgYmFja2luZyB0aGUg
e0BsaW5rIEJ5dGVTdHJpbmd9IHdpbGwgbmV2ZXIgY2hhbmdlISBNdXRhdGlvbiBvZiBhCi0gKiB7
QGxpbmsgQnl0ZVN0cmluZ30gY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBhbmQgdW5kZXNpcmFibGUg
Y29uc2VxdWVuY2VzIGluIHlvdXIgYXBwbGljYXRpb24sCi0gKiBhbmQgd2lsbCBsaWtlbHkgYmUg
ZGlmZmljdWx0IHRvIGRlYnVnLiBQcm9jZWVkIHdpdGggY2F1dGlvbiEKLSAqLwotQEV4cGVyaW1l
bnRhbEFwaQotcHVibGljIGZpbmFsIGNsYXNzIFVuc2FmZUJ5dGVPcGVyYXRpb25zIHsKLSAgcHJp
dmF0ZSBVbnNhZmVCeXRlT3BlcmF0aW9ucygpIHt9Ci0KLSAgLyoqCi0gICAqIEFuIHVuc2FmZSBv
cGVyYXRpb24gdGhhdCByZXR1cm5zIGEge0BsaW5rIEJ5dGVTdHJpbmd9IHRoYXQgaXMgYmFja2Vk
IGJ5IHRoZSBwcm92aWRlZCBidWZmZXIuCi0gICAqCi0gICAqIEBwYXJhbSBidWZmZXIgdGhlIEph
dmEgTklPIGJ1ZmZlciB0byBiZSB3cmFwcGVkCi0gICAqIEByZXR1cm4gYSB7QGxpbmsgQnl0ZVN0
cmluZ30gYmFja2VkIGJ5IHRoZSBwcm92aWRlZCBidWZmZXIKLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgQnl0ZVN0cmluZyB1bnNhZmVXcmFwKEJ5dGVCdWZmZXIgYnVmZmVyKSB7Ci0gICAgaWYgKGJ1
ZmZlci5oYXNBcnJheSgpKSB7Ci0gICAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gYnVmZmVyLmFycmF5
T2Zmc2V0KCk7Ci0gICAgICByZXR1cm4gQnl0ZVN0cmluZy53cmFwKGJ1ZmZlci5hcnJheSgpLCBv
ZmZzZXQgKyBidWZmZXIucG9zaXRpb24oKSwgYnVmZmVyLnJlbWFpbmluZygpKTsKLSAgICB9IGVs
c2UgewotICAgICAgcmV0dXJuIG5ldyBOaW9CeXRlU3RyaW5nKGJ1ZmZlcik7Ci0gICAgfQotICB9
Ci0KLSAgLyoqCi0gICAqIFdyaXRlcyB0aGUgZ2l2ZW4ge0BsaW5rIEJ5dGVTdHJpbmd9IHRvIHRo
ZSBwcm92aWRlZCB7QGxpbmsgQnl0ZU91dHB1dH0uIENhbGxpbmcgdGhpcyBtZXRob2QgbWF5Ci0g
ICAqIHJlc3VsdCBpbiBtdWx0aXBsZSBvcGVyYXRpb25zIG9uIHRoZSB0YXJnZXQge0BsaW5rIEJ5
dGVPdXRwdXR9Ci0gICAqIChpLmUuIGZvciByb3BlZCB7QGxpbmsgQnl0ZVN0cmluZ31zKS4KLSAg
ICoKLSAgICogPHA+VGhpcyBtZXRob2QgZXhwb3NlcyB0aGUgaW50ZXJuYWwgYmFja2luZyBidWZm
ZXIocykgb2YgdGhlIHtAbGluayBCeXRlU3RyaW5nfSB0byB0aGUge0BsaW5rCi0gICAqIEJ5dGVP
dXRwdXR9IGluIG9yZGVyIHRvIGF2b2lkIGFkZGl0aW9uYWwgY29weWluZyBvdmVyaGVhZC4gSXQg
d291bGQgYmUgcG9zc2libGUgZm9yIGEgbWFsaWNpb3VzCi0gICAqIHtAbGluayBCeXRlT3V0cHV0
fSB0byBjb3JydXB0IHRoZSB7QGxpbmsgQnl0ZVN0cmluZ30uIFVzZSB3aXRoIGNhdXRpb24hCi0g
ICAqCi0gICAqIDxwPiBOT1RFOiBUaGUge0BsaW5rIEJ5dGVPdXRwdXR9IDxzdHJvbmc+TVVTVCBO
T1Q8L3N0cm9uZz4gbW9kaWZ5IHRoZSBwcm92aWRlZCBidWZmZXJzLiBEb2luZwotICAgKiBzbyBt
YXkgcmVzdWx0IGluIGNvcnJ1cHRlZCBkYXRhLCB3aGljaCB3b3VsZCBiZSBkaWZmaWN1bHQgdG8g
ZGVidWcuCi0gICAqCi0gICAqIEBwYXJhbSBieXRlcyB0aGUge0BsaW5rIEJ5dGVTdHJpbmd9IHRv
IGJlIHdyaXR0ZW4KLSAgICogQHBhcmFtICBvdXRwdXQgIHRoZSBvdXRwdXQgdG8gcmVjZWl2ZSB0
aGUgYnl0ZXMKLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiAgaWYgYW4gSS9PIGVycm9yIG9jY3Vy
cwotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHVuc2FmZVdyaXRlVG8oQnl0ZVN0cmluZyBi
eXRlcywgQnl0ZU91dHB1dCBvdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgYnl0ZXMu
d3JpdGVUbyhvdXRwdXQpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVXRmOC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1V0ZjguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzA4YzY5ZTk1ODk3ZmQ3ZDU2YWVkN2E1ZGJlZDAwY2Y3OGVmZmJiOC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVXRmOC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY4
MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBj
b20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgc3RhdGljIGphdmEubGFuZy5DaGFyYWN0ZXIu
TUFYX1NVUlJPR0FURTsKLWltcG9ydCBzdGF0aWMgamF2YS5sYW5nLkNoYXJhY3Rlci5NSU5fU1VS
Uk9HQVRFOwotaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuQ2hhcmFjdGVyLmlzU3Vycm9nYXRlUGFp
cjsKLWltcG9ydCBzdGF0aWMgamF2YS5sYW5nLkNoYXJhY3Rlci50b0NvZGVQb2ludDsKLQotaW1w
b3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubmlvLkJ1ZmZlcjsKLWlt
cG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29u
dHJvbGxlcjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb247
Ci1pbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7Ci1pbXBvcnQgamF2YS51dGlsLmxvZ2dp
bmcuTG9nZ2VyOwotCi0vKioKLSAqIEEgc2V0IG9mIGxvdy1sZXZlbCwgaGlnaC1wZXJmb3JtYW5j
ZSBzdGF0aWMgdXRpbGl0eSBtZXRob2RzIHJlbGF0ZWQKLSAqIHRvIHRoZSBVVEYtOCBjaGFyYWN0
ZXIgZW5jb2RpbmcuICBUaGlzIGNsYXNzIGhhcyBubyBkZXBlbmRlbmNpZXMKLSAqIG91dHNpZGUg
b2YgdGhlIGNvcmUgSkRLIGxpYnJhcmllcy4KLSAqCi0gKiA8cD5UaGVyZSBhcmUgc2V2ZXJhbCB2
YXJpYW50cyBvZiBVVEYtOC4gIFRoZSBvbmUgaW1wbGVtZW50ZWQgYnkKLSAqIHRoaXMgY2xhc3Mg
aXMgdGhlIHJlc3RyaWN0ZWQgZGVmaW5pdGlvbiBvZiBVVEYtOCBpbnRyb2R1Y2VkIGluCi0gKiBV
bmljb2RlIDMuMSwgd2hpY2ggbWFuZGF0ZXMgdGhlIHJlamVjdGlvbiBvZiAib3ZlcmxvbmciIGJ5
dGUKLSAqIHNlcXVlbmNlcyBhcyB3ZWxsIGFzIHJlamVjdGlvbiBvZiAzLWJ5dGUgc3Vycm9nYXRl
IGNvZGVwb2ludCBieXRlCi0gKiBzZXF1ZW5jZXMuICBOb3RlIHRoYXQgdGhlIFVURi04IGRlY29k
ZXIgaW5jbHVkZWQgaW4gT3JhY2xlJ3MgSkRLCi0gKiBoYXMgYmVlbiBtb2RpZmllZCB0byBhbHNv
IHJlamVjdCAib3ZlcmxvbmciIGJ5dGUgc2VxdWVuY2VzLCBidXQgKGFzCi0gKiBvZiAyMDExKSBz
dGlsbCBhY2NlcHRzIDMtYnl0ZSBzdXJyb2dhdGUgY29kZXBvaW50IGJ5dGUgc2VxdWVuY2VzLgot
ICoKLSAqIDxwPlRoZSBieXRlIHNlcXVlbmNlcyBjb25zaWRlcmVkIHZhbGlkIGJ5IHRoaXMgY2xh
c3MgYXJlIGV4YWN0bHkKLSAqIHRob3NlIHRoYXQgY2FuIGJlIHJvdW5kdHJpcCBjb252ZXJ0ZWQg
dG8gU3RyaW5ncyBhbmQgYmFjayB0byBieXRlcwotICogdXNpbmcgdGhlIFVURi04IGNoYXJzZXQs
IHdpdGhvdXQgbG9zczogPHByZT4ge0Bjb2RlCi0gKiBBcnJheXMuZXF1YWxzKGJ5dGVzLCBuZXcg
U3RyaW5nKGJ5dGVzLCBJbnRlcm5hbC5VVEZfOCkuZ2V0Qnl0ZXMoSW50ZXJuYWwuVVRGXzgpKQot
ICogfTwvcHJlPgotICoKLSAqIDxwPlNlZSB0aGUgVW5pY29kZSBTdGFuZGFyZCw8L2JyPgotICog
VGFibGUgMy02LiA8ZW0+VVRGLTggQml0IERpc3RyaWJ1dGlvbjwvZW0+LDwvYnI+Ci0gKiBUYWJs
ZSAzLTcuIDxlbT5XZWxsIEZvcm1lZCBVVEYtOCBCeXRlIFNlcXVlbmNlczwvZW0+LgotICoKLSAq
IDxwPlRoaXMgY2xhc3Mgc3VwcG9ydHMgZGVjb2Rpbmcgb2YgcGFydGlhbCBieXRlIHNlcXVlbmNl
cywgc28gdGhhdCB0aGUKLSAqIGJ5dGVzIGluIGEgY29tcGxldGUgVVRGLTggYnl0ZSBzZXF1ZW5j
ZXMgY2FuIGJlIHN0b3JlZCBpbiBtdWx0aXBsZQotICogc2VnbWVudHMuICBNZXRob2RzIHR5cGlj
YWxseSByZXR1cm4ge0BsaW5rICNNQUxGT1JNRUR9IGlmIHRoZSBwYXJ0aWFsCi0gKiBieXRlIHNl
cXVlbmNlIGlzIGRlZmluaXRlbHkgbm90IHdlbGwtZm9ybWVkLCB7QGxpbmsgI0NPTVBMRVRFfSBp
ZiBpdCBpcwotICogd2VsbC1mb3JtZWQgaW4gdGhlIGFic2VuY2Ugb2YgYWRkaXRpb25hbCBpbnB1
dCwgb3IgaWYgdGhlIGJ5dGUgc2VxdWVuY2UKLSAqIGFwcGFyZW50bHkgdGVybWluYXRlZCBpbiB0
aGUgbWlkZGxlIG9mIGEgY2hhcmFjdGVyLCBhbiBvcGFxdWUgaW50ZWdlcgotICogInN0YXRlIiB2
YWx1ZSBjb250YWluaW5nIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkZWNvZGUgdGhlIGNoYXJhY3Rl
ciB3aGVuCi0gKiBwYXNzZWQgdG8gYSBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgYSBwYXJ0aWFs
IGRlY29kaW5nIG1ldGhvZC4KLSAqCi0gKiBAYXV0aG9yIG1hcnRpbnJiQGdvb2dsZS5jb20gKE1h
cnRpbiBCdWNoaG9seikKLSAqLwotLy8gVE9ETyhuYXRoYW5taXR0bGVyKTogQ29weSBjaGFuZ2Vz
IGluIHRoaXMgY2xhc3MgYmFjayB0byBHdWF2YQotZmluYWwgY2xhc3MgVXRmOCB7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFV0ZjguY2xh
c3MuZ2V0TmFtZSgpKTsKLQotICAvKioKLSAgICogVVRGLTggaXMgYSBydW50aW1lIGhvdCBzcG90
IHNvIHdlIGF0dGVtcHQgdG8gcHJvdmlkZSBoZWF2aWx5IG9wdGltaXplZCBpbXBsZW1lbnRhdGlv
bnMKLSAgICogZGVwZW5kaW5nIG9uIHdoYXQgaXMgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4g
VGhlIHByb2Nlc3NvciBpcyB0aGUgcGxhdGZvcm0tb3B0aW1pemVkCi0gICAqIGRlbGVnYXRlIGZv
ciB3aGljaCBhbGwgbWV0aG9kcyBhcmUgZGVsZWdhdGVkIGRpcmVjdGx5IHRvLgotICAgKi8KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgUHJvY2Vzc29yIHByb2Nlc3NvciA9Ci0gICAgICBVbnNhZmVQ
cm9jZXNzb3IuaXNBdmFpbGFibGUoKSA/IG5ldyBVbnNhZmVQcm9jZXNzb3IoKSA6IG5ldyBTYWZl
UHJvY2Vzc29yKCk7Ci0KLSAgLyoqCi0gICAqIEEgbWFzayB1c2VkIHdoZW4gcGVyZm9ybWluZyB1
bnNhZmUgcmVhZHMgdG8gZGV0ZXJtaW5lIGlmIGEgbG9uZyB2YWx1ZSBjb250YWlucyBhbnkgbm9u
LUFTQ0lJCi0gICAqIGNoYXJhY3RlcnMgKGkuZS4gYW55IGJ5dGUgPj0gMHg4MCkuCi0gICAqLwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEFTQ0lJX01BU0tfTE9ORyA9IDB4ODA4MDgwODA4
MDgwODA4MEw7Ci0KLSAgLyoqCi0gICAqIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHBlciBKYXZh
IFVURi0xNiBjaGFyIGluIFVURi04LgotICAgKiBAc2VlIGphdmEubmlvLmNoYXJzZXQuQ2hhcnNl
dEVuY29kZXIjbWF4Qnl0ZXNQZXJDaGFyKCkKLSAgICovCi0gIHN0YXRpYyBmaW5hbCBpbnQgTUFY
X0JZVEVTX1BFUl9DSEFSID0gMzsKLQotICAvKioKLSAgICogU3RhdGUgdmFsdWUgaW5kaWNhdGlu
ZyB0aGF0IHRoZSBieXRlIHNlcXVlbmNlIGlzIHdlbGwtZm9ybWVkIGFuZAotICAgKiBjb21wbGV0
ZSAobm8gZnVydGhlciBieXRlcyBhcmUgbmVlZGVkIHRvIGNvbXBsZXRlIGEgY2hhcmFjdGVyKS4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTVBMRVRFID0gMDsKLQotICAvKioK
LSAgICogU3RhdGUgdmFsdWUgaW5kaWNhdGluZyB0aGF0IHRoZSBieXRlIHNlcXVlbmNlIGlzIGRl
ZmluaXRlbHkgbm90Ci0gICAqIHdlbGwtZm9ybWVkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBm
aW5hbCBpbnQgTUFMRk9STUVEID0gLTE7Ci0KLSAgLyoqCi0gICAqIFVzZWQgYnkge0Bjb2RlIFVu
c2FmZX0gVVRGLTggc3RyaW5nIHZhbGlkYXRpb24gbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBtaW5p
bXVtIHN0cmluZyBsZW5ndGgKLSAgICogYWJvdmUgd2hpY2ggdG8gZW1wbG95IGFuIG9wdGltaXpl
ZCBhbGdvcml0aG0gZm9yIGNvdW50aW5nIEFTQ0lJIGNoYXJhY3RlcnMuIFRoZSByZWFzb24gZm9y
IHRoaXMKLSAgICogdGhyZXNob2xkIGlzIHRoYXQgZm9yIHNtYWxsIHN0cmluZ3MsIHRoZSBvcHRp
bWl6YXRpb24gbWF5IG5vdCBiZSBiZW5lZmljaWFsIG9yIG1heSBldmVuCi0gICAqIG5lZ2F0aXZl
bHkgaW1wYWN0IHBlcmZvcm1hbmNlIHNpbmNlIGl0IHJlcXVpcmVzIGFkZGl0aW9uYWwgbG9naWMg
dG8gYXZvaWQgdW5hbGlnbmVkIHJlYWRzCi0gICAqICh3aGVuIGNhbGxpbmcge0Bjb2RlIFVuc2Fm
ZS5nZXRMb25nfSkuIFRoaXMgdGhyZXNob2xkIGd1YXJhbnRlZXMgdGhhdCBldmVuIGlmIHRoZSBp
bml0aWFsCi0gICAqIG9mZnNldCBpcyB1bmFsaWduZWQsIHdlJ3JlIGd1YXJhbnRlZWQgdG8gbWFr
ZSBhdCBsZWFzdCBvbmUgY2FsbCB0byB7QGNvZGUgVW5zYWZlLmdldExvbmcoKX0KLSAgICogd2hp
Y2ggcHJvdmlkZXMgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB0aGF0IGVudGlyZWx5IHN1YnN1
bWVzIHRoZSBjb3N0IG9mIHRoZSBhZGRpdGlvbmFsCi0gICAqIGxvZ2ljLgotICAgKi8KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IFVOU0FGRV9DT1VOVF9BU0NJSV9USFJFU0hPTEQgPSAxNjsK
LQotICAvLyBPdGhlciBzdGF0ZSB2YWx1ZXMgaW5jbHVkZSB0aGUgcGFydGlhbCBieXRlcyBvZiB0
aGUgaW5jb21wbGV0ZQotICAvLyBjaGFyYWN0ZXIgdG8gYmUgZGVjb2RlZCBpbiB0aGUgc2ltcGxl
c3Qgd2F5OiB3ZSBwYWNrIHRoZSBieXRlcwotICAvLyBpbnRvIHRoZSBzdGF0ZSBpbnQgaW4gbGl0
dGxlLWVuZGlhbiBvcmRlci4gIEZvciBleGFtcGxlOgotICAvLwotICAvLyBpbnQgc3RhdGUgPSBi
eXRlMSBeIChieXRlMiA8PCA4KSBeIChieXRlMyA8PCAxNik7Ci0gIC8vCi0gIC8vIFN1Y2ggYSBz
dGF0ZSBpcyB1bnBhY2tlZCB0aHVzIChub3RlIHRoZSB+IG9wZXJhdGlvbiBmb3IgYnl0ZTIgdG8K
LSAgLy8gdW5kbyBieXRlMSdzIHNpZ24tZXh0ZW5zaW9uIGJpdHMpOgotICAvLwotICAvLyBpbnQg
Ynl0ZTEgPSAoYnl0ZSkgc3RhdGU7Ci0gIC8vIGludCBieXRlMiA9IChieXRlKSB+KHN0YXRlID4+
IDgpOwotICAvLyBpbnQgYnl0ZTMgPSAoYnl0ZSkgKHN0YXRlID4+IDE2KTsKLSAgLy8KLSAgLy8g
V2UgY2Fubm90IHN0b3JlIGEgemVybyBieXRlIGluIHRoZSBzdGF0ZSBiZWNhdXNlIGl0IHdvdWxk
IGJlCi0gIC8vIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gdGhlIGFic2VuY2Ugb2YgYSBieXRlLiAg
QnV0IHdlIGRvbid0IG5lZWQKLSAgLy8gdG8sIGJlY2F1c2UgcGFydGlhbCBieXRlcyBtdXN0IGFs
d2F5cyBiZSBuZWdhdGl2ZS4gIFdoZW4gYnVpbGRpbmcKLSAgLy8gYSBzdGF0ZSwgd2UgZW5zdXJl
IHRoYXQgYnl0ZTEgaXMgbmVnYXRpdmUgYW5kIHN1YnNlcXVlbnQgYnl0ZXMKLSAgLy8gYXJlIHZh
bGlkIHRyYWlsaW5nIGJ5dGVzLgotCi0gIC8qKgotICAgKiBSZXR1cm5zIHtAY29kZSB0cnVlfSBp
ZiB0aGUgZ2l2ZW4gYnl0ZSBhcnJheSBpcyBhIHdlbGwtZm9ybWVkCi0gICAqIFVURi04IGJ5dGUg
c2VxdWVuY2UuCi0gICAqCi0gICAqIDxwPlRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QsIGVx
dWl2YWxlbnQgdG8gYSBjYWxsIHRvIHtAY29kZQotICAgKiBpc1ZhbGlkVXRmOChieXRlcywgMCwg
Ynl0ZXMubGVuZ3RoKX0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWYWxpZFV0
ZjgoYnl0ZVtdIGJ5dGVzKSB7Ci0gICAgcmV0dXJuIHByb2Nlc3Nvci5pc1ZhbGlkVXRmOChieXRl
cywgMCwgYnl0ZXMubGVuZ3RoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHtAY29kZSB0
cnVlfSBpZiB0aGUgZ2l2ZW4gYnl0ZSBhcnJheSBzbGljZSBpcyBhCi0gICAqIHdlbGwtZm9ybWVk
IFVURi04IGJ5dGUgc2VxdWVuY2UuICBUaGUgcmFuZ2Ugb2YgYnl0ZXMgdG8gYmUKLSAgICogY2hl
Y2tlZCBleHRlbmRzIGZyb20gaW5kZXgge0Bjb2RlIGluZGV4fSwgaW5jbHVzaXZlLCB0byB7QGNv
ZGUKLSAgICogbGltaXR9LCBleGNsdXNpdmUuCi0gICAqCi0gICAqIDxwPlRoaXMgaXMgYSBjb252
ZW5pZW5jZSBtZXRob2QsIGVxdWl2YWxlbnQgdG8ge0Bjb2RlCi0gICAqIHBhcnRpYWxJc1ZhbGlk
VXRmOChieXRlcywgaW5kZXgsIGxpbWl0KSA9PSBVdGY4LkNPTVBMRVRFfS4KLSAgICovCi0gIHB1
YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVXRmOChieXRlW10gYnl0ZXMsIGludCBpbmRleCwg
aW50IGxpbWl0KSB7Ci0gICAgcmV0dXJuIHByb2Nlc3Nvci5pc1ZhbGlkVXRmOChieXRlcywgaW5k
ZXgsIGxpbWl0KTsKLSAgfQotCi0gIC8qKgotICAgKiBUZWxscyB3aGV0aGVyIHRoZSBnaXZlbiBi
eXRlIGFycmF5IHNsaWNlIGlzIGEgd2VsbC1mb3JtZWQsCi0gICAqIG1hbGZvcm1lZCwgb3IgaW5j
b21wbGV0ZSBVVEYtOCBieXRlIHNlcXVlbmNlLiAgVGhlIHJhbmdlIG9mIGJ5dGVzCi0gICAqIHRv
IGJlIGNoZWNrZWQgZXh0ZW5kcyBmcm9tIGluZGV4IHtAY29kZSBpbmRleH0sIGluY2x1c2l2ZSwg
dG8KLSAgICoge0Bjb2RlIGxpbWl0fSwgZXhjbHVzaXZlLgotICAgKgotICAgKiBAcGFyYW0gc3Rh
dGUgZWl0aGVyIHtAbGluayBVdGY4I0NPTVBMRVRFfSAoaWYgdGhpcyBpcyB0aGUgaW5pdGlhbCBk
ZWNvZGluZwotICAgKiBvcGVyYXRpb24pIG9yIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGEgY2Fs
bCB0byBhIHBhcnRpYWwgZGVjb2RpbmcgbWV0aG9kCi0gICAqIGZvciB0aGUgcHJldmlvdXMgYnl0
ZXMKLSAgICoKLSAgICogQHJldHVybiB7QGxpbmsgI01BTEZPUk1FRH0gaWYgdGhlIHBhcnRpYWwg
Ynl0ZSBzZXF1ZW5jZSBpcwotICAgKiBkZWZpbml0ZWx5IG5vdCB3ZWxsLWZvcm1lZCwge0BsaW5r
ICNDT01QTEVURX0gaWYgaXQgaXMgd2VsbC1mb3JtZWQKLSAgICogKG5vIGFkZGl0aW9uYWwgaW5w
dXQgbmVlZGVkKSwgb3IgaWYgdGhlIGJ5dGUgc2VxdWVuY2UgaXMKLSAgICogImluY29tcGxldGUi
LCBpLmUuIGFwcGFyZW50bHkgdGVybWluYXRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhcmFjdGVy
LAotICAgKiBhbiBvcGFxdWUgaW50ZWdlciAic3RhdGUiIHZhbHVlIGNvbnRhaW5pbmcgZW5vdWdo
IGluZm9ybWF0aW9uIHRvCi0gICAqIGRlY29kZSB0aGUgY2hhcmFjdGVyIHdoZW4gcGFzc2VkIHRv
IGEgc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9mIGEKLSAgICogcGFydGlhbCBkZWNvZGluZyBtZXRo
b2QuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBwYXJ0aWFsSXNWYWxpZFV0ZjgoaW50IHN0
YXRlLCBieXRlW10gYnl0ZXMsIGludCBpbmRleCwgaW50IGxpbWl0KSB7Ci0gICAgcmV0dXJuIHBy
b2Nlc3Nvci5wYXJ0aWFsSXNWYWxpZFV0Zjgoc3RhdGUsIGJ5dGVzLCBpbmRleCwgbGltaXQpOwot
ICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGluY29tcGxldGVTdGF0ZUZvcihpbnQgYnl0ZTEp
IHsKLSAgICByZXR1cm4gKGJ5dGUxID4gKGJ5dGUpIDB4RjQpID8KLSAgICAgICAgTUFMRk9STUVE
IDogYnl0ZTE7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgaW5jb21wbGV0ZVN0YXRlRm9y
KGludCBieXRlMSwgaW50IGJ5dGUyKSB7Ci0gICAgcmV0dXJuIChieXRlMSA+IChieXRlKSAweEY0
IHx8Ci0gICAgICAgICAgICBieXRlMiA+IChieXRlKSAweEJGKSA/Ci0gICAgICAgIE1BTEZPUk1F
RCA6IGJ5dGUxIF4gKGJ5dGUyIDw8IDgpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGlu
Y29tcGxldGVTdGF0ZUZvcihpbnQgYnl0ZTEsIGludCBieXRlMiwgaW50IGJ5dGUzKSB7Ci0gICAg
cmV0dXJuIChieXRlMSA+IChieXRlKSAweEY0IHx8Ci0gICAgICAgICAgICBieXRlMiA+IChieXRl
KSAweEJGIHx8Ci0gICAgICAgICAgICBieXRlMyA+IChieXRlKSAweEJGKSA/Ci0gICAgICAgIE1B
TEZPUk1FRCA6IGJ5dGUxIF4gKGJ5dGUyIDw8IDgpIF4gKGJ5dGUzIDw8IDE2KTsKLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIGludCBpbmNvbXBsZXRlU3RhdGVGb3IoYnl0ZVtdIGJ5dGVzLCBpbnQg
aW5kZXgsIGludCBsaW1pdCkgewotICAgIGludCBieXRlMSA9IGJ5dGVzW2luZGV4IC0gMV07Ci0g
ICAgc3dpdGNoIChsaW1pdCAtIGluZGV4KSB7Ci0gICAgICBjYXNlIDA6IHJldHVybiBpbmNvbXBs
ZXRlU3RhdGVGb3IoYnl0ZTEpOwotICAgICAgY2FzZSAxOiByZXR1cm4gaW5jb21wbGV0ZVN0YXRl
Rm9yKGJ5dGUxLCBieXRlc1tpbmRleF0pOwotICAgICAgY2FzZSAyOiByZXR1cm4gaW5jb21wbGV0
ZVN0YXRlRm9yKGJ5dGUxLCBieXRlc1tpbmRleF0sIGJ5dGVzW2luZGV4ICsgMV0pOwotICAgICAg
ZGVmYXVsdDogdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgaW50IGluY29tcGxldGVTdGF0ZUZvcigKLSAgICAgIGZpbmFsIEJ5dGVCdWZm
ZXIgYnVmZmVyLCBmaW5hbCBpbnQgYnl0ZTEsIGZpbmFsIGludCBpbmRleCwgZmluYWwgaW50IHJl
bWFpbmluZykgewotICAgIHN3aXRjaCAocmVtYWluaW5nKSB7Ci0gICAgICBjYXNlIDA6Ci0gICAg
ICAgIHJldHVybiBpbmNvbXBsZXRlU3RhdGVGb3IoYnl0ZTEpOwotICAgICAgY2FzZSAxOgotICAg
ICAgICByZXR1cm4gaW5jb21wbGV0ZVN0YXRlRm9yKGJ5dGUxLCBidWZmZXIuZ2V0KGluZGV4KSk7
Ci0gICAgICBjYXNlIDI6Ci0gICAgICAgIHJldHVybiBpbmNvbXBsZXRlU3RhdGVGb3IoYnl0ZTEs
IGJ1ZmZlci5nZXQoaW5kZXgpLCBidWZmZXIuZ2V0KGluZGV4ICsgMSkpOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCk7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gVGhlc2UgVVRGLTggaGFuZGxpbmcgbWV0aG9kcyBhcmUgY29waWVkIGZyb20gR3VhdmEncyBV
dGY4IGNsYXNzIHdpdGggYSBtb2RpZmljYXRpb24gdG8gdGhyb3cKLSAgLy8gYSBwcm90b2NvbCBi
dWZmZXIgbG9jYWwgZXhjZXB0aW9uLiBUaGlzIGV4Y2VwdGlvbiBpcyB0aGVuIGNhdWdodCBpbiBD
b2RlZE91dHB1dFN0cmVhbSBzbyBpdCBjYW4KLSAgLy8gZmFsbGJhY2sgdG8gbW9yZSBsZW5pZW50
IGJlaGF2aW9yLgotICAKLSAgc3RhdGljIGNsYXNzIFVucGFpcmVkU3Vycm9nYXRlRXhjZXB0aW9u
IGV4dGVuZHMgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKLSAgICBwcml2YXRlIFVucGFpcmVk
U3Vycm9nYXRlRXhjZXB0aW9uKGludCBpbmRleCwgaW50IGxlbmd0aCkgewotICAgICAgc3VwZXIo
IlVucGFpcmVkIHN1cnJvZ2F0ZSBhdCBpbmRleCAiICsgaW5kZXggKyAiIG9mICIgKyBsZW5ndGgp
OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMg
aW4gdGhlIFVURi04LWVuY29kZWQgZm9ybSBvZiB7QGNvZGUgc2VxdWVuY2V9LiBGb3IgYSBzdHJp
bmcsCi0gICAqIHRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8ge0Bjb2RlIHN0cmluZy5nZXRC
eXRlcyhVVEZfOCkubGVuZ3RofSwgYnV0IGlzIG1vcmUgZWZmaWNpZW50IGluCi0gICAqIGJvdGgg
dGltZSBhbmQgc3BhY2UuCi0gICAqCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uIGlmIHtAY29kZSBzZXF1ZW5jZX0gY29udGFpbnMgaWxsLWZvcm1lZCBVVEYtMTYgKHVucGFp
cmVkCi0gICAqICAgICBzdXJyb2dhdGVzKQotICAgKi8KLSAgc3RhdGljIGludCBlbmNvZGVkTGVu
Z3RoKENoYXJTZXF1ZW5jZSBzZXF1ZW5jZSkgewotICAgIC8vIFdhcm5pbmcgdG8gbWFpbnRhaW5l
cnM6IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgaGlnaGx5IG9wdGltaXplZC4KLSAgICBpbnQgdXRm
MTZMZW5ndGggPSBzZXF1ZW5jZS5sZW5ndGgoKTsKLSAgICBpbnQgdXRmOExlbmd0aCA9IHV0ZjE2
TGVuZ3RoOwotICAgIGludCBpID0gMDsKLQotICAgIC8vIFRoaXMgbG9vcCBvcHRpbWl6ZXMgZm9y
IHB1cmUgQVNDSUkuCi0gICAgd2hpbGUgKGkgPCB1dGYxNkxlbmd0aCAmJiBzZXF1ZW5jZS5jaGFy
QXQoaSkgPCAweDgwKSB7Ci0gICAgICBpKys7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBsb29wIG9w
dGltaXplcyBmb3IgY2hhcnMgbGVzcyB0aGFuIDB4ODAwLgotICAgIGZvciAoOyBpIDwgdXRmMTZM
ZW5ndGg7IGkrKykgewotICAgICAgY2hhciBjID0gc2VxdWVuY2UuY2hhckF0KGkpOwotICAgICAg
aWYgKGMgPCAweDgwMCkgewotICAgICAgICB1dGY4TGVuZ3RoICs9ICgoMHg3ZiAtIGMpID4+PiAz
MSk7ICAvLyBicmFuY2ggZnJlZSEKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHV0ZjhMZW5ndGgg
Kz0gZW5jb2RlZExlbmd0aEdlbmVyYWwoc2VxdWVuY2UsIGkpOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodXRmOExlbmd0aCA8IHV0ZjE2TGVuZ3RoKSB7Ci0gICAg
ICAvLyBOZWNlc3NhcnkgYW5kIHN1ZmZpY2llbnQgY29uZGl0aW9uIGZvciBvdmVyZmxvdyBiZWNh
dXNlIG9mIG1heGltdW0gM3ggZXhwYW5zaW9uCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3Vt
ZW50RXhjZXB0aW9uKCJVVEYtOCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludDogIgotICAgICAg
ICAgICAgICArICh1dGY4TGVuZ3RoICsgKDFMIDw8IDMyKSkpOwotICAgIH0KLSAgICByZXR1cm4g
dXRmOExlbmd0aDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGludCBlbmNvZGVkTGVuZ3RoR2Vu
ZXJhbChDaGFyU2VxdWVuY2Ugc2VxdWVuY2UsIGludCBzdGFydCkgewotICAgIGludCB1dGYxNkxl
bmd0aCA9IHNlcXVlbmNlLmxlbmd0aCgpOwotICAgIGludCB1dGY4TGVuZ3RoID0gMDsKLSAgICBm
b3IgKGludCBpID0gc3RhcnQ7IGkgPCB1dGYxNkxlbmd0aDsgaSsrKSB7Ci0gICAgICBjaGFyIGMg
PSBzZXF1ZW5jZS5jaGFyQXQoaSk7Ci0gICAgICBpZiAoYyA8IDB4ODAwKSB7Ci0gICAgICAgIHV0
ZjhMZW5ndGggKz0gKDB4N2YgLSBjKSA+Pj4gMzE7IC8vIGJyYW5jaCBmcmVlIQotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgdXRmOExlbmd0aCArPSAyOwotICAgICAgICAvLyBqZGs3KzogaWYgKENo
YXJhY3Rlci5pc1N1cnJvZ2F0ZShjKSkgewotICAgICAgICBpZiAoQ2hhcmFjdGVyLk1JTl9TVVJS
T0dBVEUgPD0gYyAmJiBjIDw9IENoYXJhY3Rlci5NQVhfU1VSUk9HQVRFKSB7Ci0gICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgd2VsbC1mb3JtZWQgc3Vycm9nYXRlIHBhaXIuCi0gICAg
ICAgICAgaW50IGNwID0gQ2hhcmFjdGVyLmNvZGVQb2ludEF0KHNlcXVlbmNlLCBpKTsKLSAgICAg
ICAgICBpZiAoY3AgPCBDaGFyYWN0ZXIuTUlOX1NVUFBMRU1FTlRBUllfQ09ERV9QT0lOVCkgewot
ICAgICAgICAgICAgdGhyb3cgbmV3IFVucGFpcmVkU3Vycm9nYXRlRXhjZXB0aW9uKGksIHV0ZjE2
TGVuZ3RoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiB1dGY4TGVuZ3RoOwotICB9Ci0KLSAgc3RhdGljIGludCBlbmNv
ZGUoQ2hhclNlcXVlbmNlIGluLCBieXRlW10gb3V0LCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7
Ci0gICAgcmV0dXJuIHByb2Nlc3Nvci5lbmNvZGVVdGY4KGluLCBvdXQsIG9mZnNldCwgbGVuZ3Ro
KTsKLSAgfQotICAvLyBFbmQgR3VhdmEgVVRGLTggbWV0aG9kcy4KLQotICAvKioKLSAgICogRGV0
ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4ge0BsaW5rIEJ5dGVCdWZmZXJ9IGlzIGEgdmFsaWQgVVRGLTgg
c3RyaW5nLgotICAgKgotICAgKiA8cD5TZWxlY3RzIGFuIG9wdGltYWwgYWxnb3JpdGhtIGJhc2Vk
IG9uIHRoZSB0eXBlIG9mIHtAbGluayBCeXRlQnVmZmVyfSAoaS5lLiBoZWFwIG9yIGRpcmVjdCkK
LSAgICogYW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHBsYXRmb3JtLgotICAgKgotICAgKiBA
cGFyYW0gYnVmZmVyIHRoZSBidWZmZXIgdG8gY2hlY2suCi0gICAqIEBzZWUgVXRmOCNpc1ZhbGlk
VXRmOChieXRlW10sIGludCwgaW50KQotICAgKi8KLSAgc3RhdGljIGJvb2xlYW4gaXNWYWxpZFV0
ZjgoQnl0ZUJ1ZmZlciBidWZmZXIpIHsKLSAgICByZXR1cm4gcHJvY2Vzc29yLmlzVmFsaWRVdGY4
KGJ1ZmZlciwgYnVmZmVyLnBvc2l0aW9uKCksIGJ1ZmZlci5yZW1haW5pbmcoKSk7Ci0gIH0KLQot
ICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4ge0BsaW5rIEJ5dGVCdWZmZXJ9IGlz
IGEgcGFydGlhbGx5IHZhbGlkIFVURi04IHN0cmluZy4KLSAgICoKLSAgICogPHA+U2VsZWN0cyBh
biBvcHRpbWFsIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgdHlwZSBvZiB7QGxpbmsgQnl0ZUJ1ZmZl
cn0gKGkuZS4gaGVhcCBvciBkaXJlY3QpCi0gICAqIGFuZCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRo
ZSBwbGF0Zm9ybS4KLSAgICoKLSAgICogQHBhcmFtIGJ1ZmZlciB0aGUgYnVmZmVyIHRvIGNoZWNr
LgotICAgKiBAc2VlIFV0ZjgjcGFydGlhbElzVmFsaWRVdGY4KGludCwgYnl0ZVtdLCBpbnQsIGlu
dCkKLSAgICovCi0gIHN0YXRpYyBpbnQgcGFydGlhbElzVmFsaWRVdGY4KGludCBzdGF0ZSwgQnl0
ZUJ1ZmZlciBidWZmZXIsIGludCBpbmRleCwgaW50IGxpbWl0KSB7Ci0gICAgcmV0dXJuIHByb2Nl
c3Nvci5wYXJ0aWFsSXNWYWxpZFV0Zjgoc3RhdGUsIGJ1ZmZlciwgaW5kZXgsIGxpbWl0KTsKLSAg
fQotCi0gIC8qKgotICAgKiBFbmNvZGVzIHRoZSBnaXZlbiBjaGFyYWN0ZXJzIHRvIHRoZSB0YXJn
ZXQge0BsaW5rIEJ5dGVCdWZmZXJ9IHVzaW5nIFVURi04IGVuY29kaW5nLgotICAgKgotICAgKiA8
cD5TZWxlY3RzIGFuIG9wdGltYWwgYWxnb3JpdGhtIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHtAbGlu
ayBCeXRlQnVmZmVyfSAoaS5lLiBoZWFwIG9yIGRpcmVjdCkKLSAgICogYW5kIHRoZSBjYXBhYmls
aXRpZXMgb2YgdGhlIHBsYXRmb3JtLgotICAgKgotICAgKiBAcGFyYW0gaW4gdGhlIHNvdXJjZSBz
dHJpbmcgdG8gYmUgZW5jb2RlZAotICAgKiBAcGFyYW0gb3V0IHRoZSB0YXJnZXQgYnVmZmVyIHRv
IHJlY2VpdmUgdGhlIGVuY29kZWQgc3RyaW5nLgotICAgKiBAc2VlIFV0ZjgjZW5jb2RlKENoYXJT
ZXF1ZW5jZSwgYnl0ZVtdLCBpbnQsIGludCkKLSAgICovCi0gIHN0YXRpYyB2b2lkIGVuY29kZVV0
ZjgoQ2hhclNlcXVlbmNlIGluLCBCeXRlQnVmZmVyIG91dCkgewotICAgIHByb2Nlc3Nvci5lbmNv
ZGVVdGY4KGluLCBvdXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvdW50cyAoYXBwcm94aW1hdGVs
eSkgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBBU0NJSSBjaGFyYWN0ZXJzIGluIHRoZSBnaXZl
biBidWZmZXIuCi0gICAqIFRoZSBieXRlIG9yZGVyIG9mIHRoZSB7QGxpbmsgQnl0ZUJ1ZmZlcn0g
ZG9lcyBub3QgbWF0dGVyLCBzbyBwZXJmb3JtYW5jZSBjYW4gYmUgaW1wcm92ZWQgaWYKLSAgICog
bmF0aXZlIGJ5dGUgb3JkZXIgaXMgdXNlZCAoaS5lLiBubyBieXRlLXN3YXBwaW5nIGluIHtAbGlu
ayBCeXRlQnVmZmVyI2dldExvbmcoaW50KX0pLgotICAgKgotICAgKiBAcGFyYW0gYnVmZmVyIHRo
ZSBidWZmZXIgdG8gYmUgc2Nhbm5lZCBmb3IgQVNDSUkgY2hhcnMKLSAgICogQHBhcmFtIGluZGV4
IHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgc2NhbgotICAgKiBAcGFyYW0gbGltaXQgdGhlIGxp
bWl0IHdpdGhpbiBidWZmZXIgZm9yIHRoZSBzY2FuCi0gICAqIEByZXR1cm4gdGhlIG51bWJlciBv
ZiBBU0NJSSBjaGFyYWN0ZXJzIGZvdW5kLiBUaGUgc3RvcHBpbmcgcG9zaXRpb24gd2lsbCBiZSBh
dCBvcgotICAgKiBiZWZvcmUgdGhlIGZpcnN0IG5vbi1BU0NJSSBieXRlLgotICAgKi8KLSAgcHJp
dmF0ZSBzdGF0aWMgaW50IGVzdGltYXRlQ29uc2VjdXRpdmVBc2NpaShCeXRlQnVmZmVyIGJ1ZmZl
ciwgaW50IGluZGV4LCBpbnQgbGltaXQpIHsKLSAgICBpbnQgaSA9IGluZGV4OwotICAgIGZpbmFs
IGludCBsaW0gPSBsaW1pdCAtIDc7Ci0gICAgLy8gVGhpcyBzaW1wbGUgbG9vcCBzdG9wcyB3aGVu
IHdlIGVuY291bnRlciBhIGJ5dGUgPj0gMHg4MCAoaS5lLiBub24tQVNDSUkpLgotICAgIC8vIFRv
IHNwZWVkIHRoaW5ncyB1cCBmdXJ0aGVyLCB3ZSdyZSByZWFkaW5nIGxvbmdzIGluc3RlYWQgb2Yg
Ynl0ZXMgc28gd2UgdXNlIGEgbWFzayB0bwotICAgIC8vIGRldGVybWluZSBpZiBhbnkgYnl0ZSBp
biB0aGUgY3VycmVudCBsb25nIGlzIG5vbi1BU0NJSS4KLSAgICBmb3IgKDsgaSA8IGxpbSAmJiAo
YnVmZmVyLmdldExvbmcoaSkgJiBBU0NJSV9NQVNLX0xPTkcpID09IDA7IGkgKz0gOCkge30KLSAg
ICByZXR1cm4gaSAtIGluZGV4OwotICB9Ci0KLSAgLyoqCi0gICAqIEEgcHJvY2Vzc29yIG9mIFVU
Ri04IHN0cmluZ3MsIHByb3ZpZGluZyBtZXRob2RzIGZvciBjaGVja2luZyB2YWxpZGl0eSBhbmQg
ZW5jb2RpbmcuCi0gICAqLwotICAvLyBUT0RPKG5hdGhhbm1pdHRsZXIpOiBBZGQgc3VwcG9ydCBm
b3IgTWVtb3J5L01lbW9yeUJsb2NrIG9uIEFuZHJvaWQuCi0gIGFic3RyYWN0IHN0YXRpYyBjbGFz
cyBQcm9jZXNzb3IgewotICAgIC8qKgotICAgICAqIFJldHVybnMge0Bjb2RlIHRydWV9IGlmIHRo
ZSBnaXZlbiBieXRlIGFycmF5IHNsaWNlIGlzIGEKLSAgICAgKiB3ZWxsLWZvcm1lZCBVVEYtOCBi
eXRlIHNlcXVlbmNlLiAgVGhlIHJhbmdlIG9mIGJ5dGVzIHRvIGJlCi0gICAgICogY2hlY2tlZCBl
eHRlbmRzIGZyb20gaW5kZXgge0Bjb2RlIGluZGV4fSwgaW5jbHVzaXZlLCB0byB7QGNvZGUKLSAg
ICAgKiBsaW1pdH0sIGV4Y2x1c2l2ZS4KLSAgICAgKgotICAgICAqIDxwPlRoaXMgaXMgYSBjb252
ZW5pZW5jZSBtZXRob2QsIGVxdWl2YWxlbnQgdG8ge0Bjb2RlCi0gICAgICogcGFydGlhbElzVmFs
aWRVdGY4KGJ5dGVzLCBpbmRleCwgbGltaXQpID09IFV0ZjguQ09NUExFVEV9LgotICAgICAqLwot
ICAgIGZpbmFsIGJvb2xlYW4gaXNWYWxpZFV0ZjgoYnl0ZVtdIGJ5dGVzLCBpbnQgaW5kZXgsIGlu
dCBsaW1pdCkgewotICAgICAgcmV0dXJuIHBhcnRpYWxJc1ZhbGlkVXRmOChDT01QTEVURSwgYnl0
ZXMsIGluZGV4LCBsaW1pdCkgPT0gQ09NUExFVEU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
VGVsbHMgd2hldGhlciB0aGUgZ2l2ZW4gYnl0ZSBhcnJheSBzbGljZSBpcyBhIHdlbGwtZm9ybWVk
LAotICAgICAqIG1hbGZvcm1lZCwgb3IgaW5jb21wbGV0ZSBVVEYtOCBieXRlIHNlcXVlbmNlLiAg
VGhlIHJhbmdlIG9mIGJ5dGVzCi0gICAgICogdG8gYmUgY2hlY2tlZCBleHRlbmRzIGZyb20gaW5k
ZXgge0Bjb2RlIGluZGV4fSwgaW5jbHVzaXZlLCB0bwotICAgICAqIHtAY29kZSBsaW1pdH0sIGV4
Y2x1c2l2ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzdGF0ZSBlaXRoZXIge0BsaW5rIFV0Zjgj
Q09NUExFVEV9IChpZiB0aGlzIGlzIHRoZSBpbml0aWFsIGRlY29kaW5nCi0gICAgICogb3BlcmF0
aW9uKSBvciB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8gYSBwYXJ0aWFsIGRlY29k
aW5nIG1ldGhvZAotICAgICAqIGZvciB0aGUgcHJldmlvdXMgYnl0ZXMKLSAgICAgKgotICAgICAq
IEByZXR1cm4ge0BsaW5rICNNQUxGT1JNRUR9IGlmIHRoZSBwYXJ0aWFsIGJ5dGUgc2VxdWVuY2Ug
aXMKLSAgICAgKiBkZWZpbml0ZWx5IG5vdCB3ZWxsLWZvcm1lZCwge0BsaW5rICNDT01QTEVURX0g
aWYgaXQgaXMgd2VsbC1mb3JtZWQKLSAgICAgKiAobm8gYWRkaXRpb25hbCBpbnB1dCBuZWVkZWQp
LCBvciBpZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpcwotICAgICAqICJpbmNvbXBsZXRlIiwgaS5lLiBh
cHBhcmVudGx5IHRlcm1pbmF0ZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYXJhY3RlciwKLSAgICAg
KiBhbiBvcGFxdWUgaW50ZWdlciAic3RhdGUiIHZhbHVlIGNvbnRhaW5pbmcgZW5vdWdoIGluZm9y
bWF0aW9uIHRvCi0gICAgICogZGVjb2RlIHRoZSBjaGFyYWN0ZXIgd2hlbiBwYXNzZWQgdG8gYSBz
dWJzZXF1ZW50IGludm9jYXRpb24gb2YgYQotICAgICAqIHBhcnRpYWwgZGVjb2RpbmcgbWV0aG9k
LgotICAgICAqLwotICAgIGFic3RyYWN0IGludCBwYXJ0aWFsSXNWYWxpZFV0ZjgoaW50IHN0YXRl
LCBieXRlW10gYnl0ZXMsIGludCBpbmRleCwgaW50IGxpbWl0KTsKLQotICAgIC8qKgotICAgICAq
IFJldHVybnMge0Bjb2RlIHRydWV9IGlmIHRoZSBnaXZlbiBwb3J0aW9uIG9mIHRoZSB7QGxpbmsg
Qnl0ZUJ1ZmZlcn0gaXMgYQotICAgICAqIHdlbGwtZm9ybWVkIFVURi04IGJ5dGUgc2VxdWVuY2Uu
ICBUaGUgcmFuZ2Ugb2YgYnl0ZXMgdG8gYmUKLSAgICAgKiBjaGVja2VkIGV4dGVuZHMgZnJvbSBp
bmRleCB7QGNvZGUgaW5kZXh9LCBpbmNsdXNpdmUsIHRvIHtAY29kZQotICAgICAqIGxpbWl0fSwg
ZXhjbHVzaXZlLgotICAgICAqCi0gICAgICogPHA+VGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhv
ZCwgZXF1aXZhbGVudCB0byB7QGNvZGUKLSAgICAgKiBwYXJ0aWFsSXNWYWxpZFV0ZjgoYnl0ZXMs
IGluZGV4LCBsaW1pdCkgPT0gVXRmOC5DT01QTEVURX0uCi0gICAgICovCi0gICAgZmluYWwgYm9v
bGVhbiBpc1ZhbGlkVXRmOChCeXRlQnVmZmVyIGJ1ZmZlciwgaW50IGluZGV4LCBpbnQgbGltaXQp
IHsKLSAgICAgIHJldHVybiBwYXJ0aWFsSXNWYWxpZFV0ZjgoQ09NUExFVEUsIGJ1ZmZlciwgaW5k
ZXgsIGxpbWl0KSA9PSBDT01QTEVURTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbmRpY2F0
ZXMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIGJ1ZmZlciBjb250YWlucyBhIHZhbGlkIFVURi04
IHN0cmluZy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBidWZmZXIgdGhlIGJ1ZmZlciB0byBjaGVj
ay4KLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgZ2l2ZW4gYnVmZmVyIGNvbnRh
aW5zIGEgdmFsaWQgVVRGLTggc3RyaW5nLgotICAgICAqLwotICAgIGZpbmFsIGludCBwYXJ0aWFs
SXNWYWxpZFV0ZjgoCi0gICAgICAgIGZpbmFsIGludCBzdGF0ZSwgZmluYWwgQnl0ZUJ1ZmZlciBi
dWZmZXIsIGludCBpbmRleCwgZmluYWwgaW50IGxpbWl0KSB7Ci0gICAgICBpZiAoYnVmZmVyLmhh
c0FycmF5KCkpIHsKLSAgICAgICAgZmluYWwgaW50IG9mZnNldCA9IGJ1ZmZlci5hcnJheU9mZnNl
dCgpOwotICAgICAgICByZXR1cm4gcGFydGlhbElzVmFsaWRVdGY4KHN0YXRlLCBidWZmZXIuYXJy
YXkoKSwgb2Zmc2V0ICsgaW5kZXgsIG9mZnNldCArIGxpbWl0KTsKLSAgICAgIH0gZWxzZSBpZiAo
YnVmZmVyLmlzRGlyZWN0KCkpewotICAgICAgICByZXR1cm4gcGFydGlhbElzVmFsaWRVdGY4RGly
ZWN0KHN0YXRlLCBidWZmZXIsIGluZGV4LCBsaW1pdCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
cGFydGlhbElzVmFsaWRVdGY4RGVmYXVsdChzdGF0ZSwgYnVmZmVyLCBpbmRleCwgbGltaXQpOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gZm9yIGRpcmVjdCB7
QGxpbmsgQnl0ZUJ1ZmZlcn0gaW5zdGFuY2VzLgotICAgICAqLwotICAgIGFic3RyYWN0IGludCBw
YXJ0aWFsSXNWYWxpZFV0ZjhEaXJlY3QoCi0gICAgICAgIGZpbmFsIGludCBzdGF0ZSwgZmluYWwg
Qnl0ZUJ1ZmZlciBidWZmZXIsIGludCBpbmRleCwgZmluYWwgaW50IGxpbWl0KTsKLQotICAgIC8q
KgotICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gZm9yIHtAbGluayBCeXRlQnVmZmVyfSBpbnN0
YW5jZXMgdXNpbmcgdGhlIHtAbGluayBCeXRlQnVmZmVyfSBBUEkgcmF0aGVyCi0gICAgICogdGhh
biBwb3RlbnRpYWxseSBmYXN0ZXIgYXBwcm9hY2hlcy4gVGhpcyBmaXJzdCBjb21wbGV0ZXMgdmFs
aWRhdGlvbiBmb3IgdGhlIGN1cnJlbnQKLSAgICAgKiBjaGFyYWN0ZXIgKHByb3ZpZGVkIGJ5IHtA
Y29kZSBzdGF0ZX0pIGFuZCB0aGVuIGZpbmlzaGVzIHZhbGlkYXRpb24gZm9yIHRoZSBzZXF1ZW5j
ZS4KLSAgICAgKi8KLSAgICBmaW5hbCBpbnQgcGFydGlhbElzVmFsaWRVdGY4RGVmYXVsdCgKLSAg
ICAgICAgZmluYWwgaW50IHN0YXRlLCBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciwgaW50IGluZGV4
LCBmaW5hbCBpbnQgbGltaXQpIHsKLSAgICAgIGlmIChzdGF0ZSAhPSBDT01QTEVURSkgewotICAg
ICAgICAvLyBUaGUgcHJldmlvdXMgZGVjb2Rpbmcgb3BlcmF0aW9uIHdhcyBpbmNvbXBsZXRlIChv
ciBtYWxmb3JtZWQpLgotICAgICAgICAvLyBXZSBsb29rIGZvciBhIHdlbGwtZm9ybWVkIHNlcXVl
bmNlIGNvbnNpc3Rpbmcgb2YgYnl0ZXMgZnJvbQotICAgICAgICAvLyB0aGUgcHJldmlvdXMgZGVj
b2Rpbmcgb3BlcmF0aW9uIChzdG9yZWQgaW4gc3RhdGUpIHRvZ2V0aGVyCi0gICAgICAgIC8vIHdp
dGggYnl0ZXMgZnJvbSB0aGUgYXJyYXkgc2xpY2UuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdl
IGV4cGVjdCBzdWNoICJzdHJhZGRsZXIgY2hhcmFjdGVycyIgdG8gYmUgcmFyZS4KLQotICAgICAg
ICBpZiAoaW5kZXggPj0gbGltaXQpIHsgLy8gTm8gYnl0ZXM/IE5vIHByb2dyZXNzLgotICAgICAg
ICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJ5dGUgYnl0ZTEgPSAoYnl0
ZSkgc3RhdGU7Ci0gICAgICAgIC8vIGJ5dGUxIGlzIG5ldmVyIEFTQ0lJLgotICAgICAgICBpZiAo
Ynl0ZTEgPCAoYnl0ZSkgMHhFMCkgewotICAgICAgICAgIC8vIHR3by1ieXRlIGZvcm0KLQotICAg
ICAgICAgIC8vIFNpbXVsdGFuZW91c2x5IGNoZWNrcyBmb3IgaWxsZWdhbCB0cmFpbGluZy1ieXRl
IGluCi0gICAgICAgICAgLy8gbGVhZGluZyBwb3NpdGlvbiBhbmQgb3ZlcmxvbmcgMi1ieXRlIGZv
cm0uCi0gICAgICAgICAgaWYgKGJ5dGUxIDwgKGJ5dGUpIDB4QzIKLSAgICAgICAgICAgICAgLy8g
Ynl0ZTIgdHJhaWxpbmctYnl0ZSB0ZXN0Ci0gICAgICAgICAgICAgIHx8IGJ1ZmZlci5nZXQoaW5k
ZXgrKykgPiAoYnl0ZSkgMHhCRikgewotICAgICAgICAgICAgcmV0dXJuIE1BTEZPUk1FRDsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYnl0ZTEgPCAoYnl0ZSkgMHhGMCkgewotICAg
ICAgICAgIC8vIHRocmVlLWJ5dGUgZm9ybQotCi0gICAgICAgICAgLy8gR2V0IGJ5dGUyIGZyb20g
c2F2ZWQgc3RhdGUgb3IgYXJyYXkKLSAgICAgICAgICBieXRlIGJ5dGUyID0gKGJ5dGUpIH4oc3Rh
dGUgPj4gOCk7Ci0gICAgICAgICAgaWYgKGJ5dGUyID09IDApIHsKLSAgICAgICAgICAgIGJ5dGUy
ID0gYnVmZmVyLmdldChpbmRleCsrKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBsaW1pdCkg
ewotICAgICAgICAgICAgICByZXR1cm4gaW5jb21wbGV0ZVN0YXRlRm9yKGJ5dGUxLCBieXRlMik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChieXRlMiA+IChieXRl
KSAweEJGCi0gICAgICAgICAgICAgIC8vIG92ZXJsb25nPyA1IG1vc3Qgc2lnbmlmaWNhbnQgYml0
cyBtdXN0IG5vdCBhbGwgYmUgemVybwotICAgICAgICAgICAgICB8fCAoYnl0ZTEgPT0gKGJ5dGUp
IDB4RTAgJiYgYnl0ZTIgPCAoYnl0ZSkgMHhBMCkKLSAgICAgICAgICAgICAgLy8gaWxsZWdhbCBz
dXJyb2dhdGUgY29kZXBvaW50PwotICAgICAgICAgICAgICB8fCAoYnl0ZTEgPT0gKGJ5dGUpIDB4
RUQgJiYgYnl0ZTIgPj0gKGJ5dGUpIDB4QTApCi0gICAgICAgICAgICAgIC8vIGJ5dGUzIHRyYWls
aW5nLWJ5dGUgdGVzdAotICAgICAgICAgICAgICB8fCBidWZmZXIuZ2V0KGluZGV4KyspID4gKGJ5
dGUpIDB4QkYpIHsKLSAgICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7Ci0gICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIGZvdXItYnl0ZSBmb3JtCi0KLSAgICAgICAg
ICAvLyBHZXQgYnl0ZTIgYW5kIGJ5dGUzIGZyb20gc2F2ZWQgc3RhdGUgb3IgYXJyYXkKLSAgICAg
ICAgICBieXRlIGJ5dGUyID0gKGJ5dGUpIH4oc3RhdGUgPj4gOCk7Ci0gICAgICAgICAgYnl0ZSBi
eXRlMyA9IDA7Ci0gICAgICAgICAgaWYgKGJ5dGUyID09IDApIHsKLSAgICAgICAgICAgIGJ5dGUy
ID0gYnVmZmVyLmdldChpbmRleCsrKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBsaW1pdCkg
ewotICAgICAgICAgICAgICByZXR1cm4gaW5jb21wbGV0ZVN0YXRlRm9yKGJ5dGUxLCBieXRlMik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ5dGUzID0g
KGJ5dGUpIChzdGF0ZSA+PiAxNik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChieXRlMyA9
PSAwKSB7Ci0gICAgICAgICAgICBieXRlMyA9IGJ1ZmZlci5nZXQoaW5kZXgrKyk7Ci0gICAgICAg
ICAgICBpZiAoaW5kZXggPj0gbGltaXQpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIGluY29tcGxl
dGVTdGF0ZUZvcihieXRlMSwgYnl0ZTIsIGJ5dGUzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAvLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIHN0YXRlID09IE1BTEZP
Uk1FRCwgdGhlbiBieXRlMSBpcyAweEZGLAotICAgICAgICAgIC8vIHdoaWNoIG5ldmVyIG9jY3Vy
cyBpbiB3ZWxsLWZvcm1lZCBVVEYtOCwgYW5kIHNvIHdlIHdpbGwgcmV0dXJuCi0gICAgICAgICAg
Ly8gTUFMRk9STUVEIGFnYWluIGJlbG93LgotCi0gICAgICAgICAgaWYgKGJ5dGUyID4gKGJ5dGUp
IDB4QkYKLSAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCAxIDw9IHBsYW5lIDw9IDE2LiAgVHJp
Y2t5IG9wdGltaXplZCBmb3JtIG9mOgotICAgICAgICAgICAgICAvLyBpZiAoYnl0ZTEgPiAoYnl0
ZSkgMHhGNCB8fAotICAgICAgICAgICAgICAvLyAgICAgYnl0ZTEgPT0gKGJ5dGUpIDB4RjAgJiYg
Ynl0ZTIgPCAoYnl0ZSkgMHg5MCB8fAotICAgICAgICAgICAgICAvLyAgICAgYnl0ZTEgPT0gKGJ5
dGUpIDB4RjQgJiYgYnl0ZTIgPiAoYnl0ZSkgMHg4RikKLSAgICAgICAgICAgICAgfHwgKCgoYnl0
ZTEgPDwgMjgpICsgKGJ5dGUyIC0gKGJ5dGUpIDB4OTApKSA+PiAzMCkgIT0gMAotICAgICAgICAg
ICAgICAvLyBieXRlMyB0cmFpbGluZy1ieXRlIHRlc3QKLSAgICAgICAgICAgICAgfHwgYnl0ZTMg
PiAoYnl0ZSkgMHhCRgotICAgICAgICAgICAgICAvLyBieXRlNCB0cmFpbGluZy1ieXRlIHRlc3QK
LSAgICAgICAgICAgICAgfHwgYnVmZmVyLmdldChpbmRleCsrKSA+IChieXRlKSAweEJGKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gTUFMRk9STUVEOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfQotCi0gICAgICAvLyBGaW5pc2ggdmFsaWRhdGlvbiBmb3IgdGhlIHNlcXVlbmNlLgotICAg
ICAgcmV0dXJuIHBhcnRpYWxJc1ZhbGlkVXRmOChidWZmZXIsIGluZGV4LCBsaW1pdCk7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiBmb3Ige0BsaW5rIEJ5dGVC
dWZmZXJ9IGluc3RhbmNlcyB1c2luZyB0aGUge0BsaW5rIEJ5dGVCdWZmZXJ9IEFQSSByYXRoZXIK
LSAgICAgKiB0aGFuIHBvdGVudGlhbGx5IGZhc3RlciBhcHByb2FjaGVzLgotICAgICAqLwotICAg
IHByaXZhdGUgc3RhdGljIGludCBwYXJ0aWFsSXNWYWxpZFV0ZjgoZmluYWwgQnl0ZUJ1ZmZlciBi
dWZmZXIsIGludCBpbmRleCwgZmluYWwgaW50IGxpbWl0KSB7Ci0gICAgICBpbmRleCArPSBlc3Rp
bWF0ZUNvbnNlY3V0aXZlQXNjaWkoYnVmZmVyLCBpbmRleCwgbGltaXQpOwotCi0gICAgICBmb3Ig
KDs7KSB7Ci0gICAgICAgIC8vIE9wdGltaXplIGZvciBpbnRlcmlvciBydW5zIG9mIEFTQ0lJIGJ5
dGVzLgotICAgICAgICAvLyBUT0RPKG5hdGhhbm1pdHRsZXIpOiBDb25zaWRlciBjaGVja2luZyA4
IGJ5dGVzIGF0IGEgdGltZSBhZnRlciBzb21lIHRocmVzaG9sZD8KLSAgICAgICAgLy8gTWF5YmUg
YWZ0ZXIgc2VlaW5nIGEgZmV3IGluIGEgcm93IHRoYXQgYXJlIEFTQ0lJLCBnbyBiYWNrIHRvIGZh
c3QgbW9kZT8KLSAgICAgICAgaW50IGJ5dGUxOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgaWYg
KGluZGV4ID49IGxpbWl0KSB7Ci0gICAgICAgICAgICByZXR1cm4gQ09NUExFVEU7Ci0gICAgICAg
ICAgfQotICAgICAgICB9IHdoaWxlICgoYnl0ZTEgPSBidWZmZXIuZ2V0KGluZGV4KyspKSA+PSAw
KTsKLQotICAgICAgICAvLyBJZiB3ZSdyZSBoZXJlIGJ5dGUxIGlzIG5vdCBBU0NJSS4gT25seSBu
ZWVkIHRvIGhhbmRsZSAyLTQgYnl0ZSBmb3Jtcy4KLSAgICAgICAgaWYgKGJ5dGUxIDwgKGJ5dGUp
IDB4RTApIHsKLSAgICAgICAgICAvLyBUd28tYnl0ZSBmb3JtICgxMTB4eHh4eCAxMHh4eHh4eCkK
LSAgICAgICAgICBpZiAoaW5kZXggPj0gbGltaXQpIHsKLSAgICAgICAgICAgIC8vIEluY29tcGxl
dGUgc2VxdWVuY2UKLSAgICAgICAgICAgIHJldHVybiBieXRlMTsKLSAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAvLyBTaW11bHRhbmVvdXNseSBjaGVja3MgZm9yIGlsbGVnYWwgdHJhaWxpbmctYnl0
ZSBpbgotICAgICAgICAgIC8vIGxlYWRpbmcgcG9zaXRpb24gYW5kIG92ZXJsb25nIDItYnl0ZSBm
b3JtLgotICAgICAgICAgIGlmIChieXRlMSA8IChieXRlKSAweEMyIHx8IGJ1ZmZlci5nZXQoaW5k
ZXgpID4gKGJ5dGUpIDB4QkYpIHsKLSAgICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgIH0gZWxzZSBpZiAoYnl0ZTEgPCAo
Ynl0ZSkgMHhGMCkgewotICAgICAgICAgIC8vIFRocmVlLWJ5dGUgZm9ybSAoMTExMHh4eHggMTB4
eHh4eHggMTB4eHh4eHgpCi0gICAgICAgICAgaWYgKGluZGV4ID49IGxpbWl0IC0gMSkgewotICAg
ICAgICAgICAgLy8gSW5jb21wbGV0ZSBzZXF1ZW5jZQotICAgICAgICAgICAgcmV0dXJuIGluY29t
cGxldGVTdGF0ZUZvcihidWZmZXIsIGJ5dGUxLCBpbmRleCwgbGltaXQgLSBpbmRleCk7Ci0gICAg
ICAgICAgfQotCi0gICAgICAgICAgZmluYWwgYnl0ZSBieXRlMiA9IGJ1ZmZlci5nZXQoaW5kZXgr
Kyk7Ci0gICAgICAgICAgaWYgKGJ5dGUyID4gKGJ5dGUpIDB4QkYKLSAgICAgICAgICAgICAgLy8g
b3Zlcmxvbmc/IDUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG11c3Qgbm90IGFsbCBiZSB6ZXJvCi0g
ICAgICAgICAgICAgIHx8IChieXRlMSA9PSAoYnl0ZSkgMHhFMCAmJiBieXRlMiA8IChieXRlKSAw
eEEwKQotICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgaWxsZWdhbCBzdXJyb2dhdGUgY29kZXBv
aW50cwotICAgICAgICAgICAgICB8fCAoYnl0ZTEgPT0gKGJ5dGUpIDB4RUQgJiYgYnl0ZTIgPj0g
KGJ5dGUpIDB4QTApCi0gICAgICAgICAgICAgIC8vIGJ5dGUzIHRyYWlsaW5nLWJ5dGUgdGVzdAot
ICAgICAgICAgICAgICB8fCBidWZmZXIuZ2V0KGluZGV4KSA+IChieXRlKSAweEJGKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gTUFMRk9STUVEOwotICAgICAgICAgIH0KLSAgICAgICAgICBpbmRleCsr
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIEZvdXItYnl0ZSBmb3JtICgxMTEweHh4
eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eCkKLSAgICAgICAgICBpZiAoaW5kZXggPj0gbGlt
aXQgLSAyKSB7Ci0gICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHNlcXVlbmNlCi0gICAgICAgICAg
ICByZXR1cm4gaW5jb21wbGV0ZVN0YXRlRm9yKGJ1ZmZlciwgYnl0ZTEsIGluZGV4LCBsaW1pdCAt
IGluZGV4KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBUT0RPKG5hdGhhbm1pdHRsZXIp
OiBDb25zaWRlciB1c2luZyBnZXRJbnQoKSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgotICAgICAg
ICAgIGZpbmFsIGludCBieXRlMiA9IGJ1ZmZlci5nZXQoaW5kZXgrKyk7Ci0gICAgICAgICAgaWYg
KGJ5dGUyID4gKGJ5dGUpIDB4QkYKLSAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCAxIDw9IHBs
YW5lIDw9IDE2LiAgVHJpY2t5IG9wdGltaXplZCBmb3JtIG9mOgotICAgICAgICAgICAgICAvLyBp
ZiAoYnl0ZTEgPiAoYnl0ZSkgMHhGNCB8fAotICAgICAgICAgICAgICAvLyAgICAgYnl0ZTEgPT0g
KGJ5dGUpIDB4RjAgJiYgYnl0ZTIgPCAoYnl0ZSkgMHg5MCB8fAotICAgICAgICAgICAgICAvLyAg
ICAgYnl0ZTEgPT0gKGJ5dGUpIDB4RjQgJiYgYnl0ZTIgPiAoYnl0ZSkgMHg4RikKLSAgICAgICAg
ICAgICAgfHwgKCgoYnl0ZTEgPDwgMjgpICsgKGJ5dGUyIC0gKGJ5dGUpIDB4OTApKSA+PiAzMCkg
IT0gMAotICAgICAgICAgICAgICAvLyBieXRlMyB0cmFpbGluZy1ieXRlIHRlc3QKLSAgICAgICAg
ICAgICAgfHwgYnVmZmVyLmdldChpbmRleCsrKSA+IChieXRlKSAweEJGCi0gICAgICAgICAgICAg
IC8vIGJ5dGU0IHRyYWlsaW5nLWJ5dGUgdGVzdAotICAgICAgICAgICAgICB8fCBidWZmZXIuZ2V0
KGluZGV4KyspID4gKGJ5dGUpIDB4QkYpIHsKLSAgICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogRW5jb2RlcyBhbiBpbnB1dCBjaGFyYWN0ZXIgc2VxdWVuY2UgKHtAY29kZSBpbn0pIHRvIFVU
Ri04IGluIHRoZSB0YXJnZXQgYXJyYXkgKHtAY29kZSBvdXR9KS4KLSAgICAgKiBGb3IgYSBzdHJp
bmcsIHRoaXMgbWV0aG9kIGlzIHNpbWlsYXIgdG8KLSAgICAgKiA8cHJlPntAY29kZQotICAgICAq
IGJ5dGVbXSBhID0gc3RyaW5nLmdldEJ5dGVzKFVURl84KTsKLSAgICAgKiBTeXN0ZW0uYXJyYXlj
b3B5KGEsIDAsIGJ5dGVzLCBvZmZzZXQsIGEubGVuZ3RoKTsKLSAgICAgKiByZXR1cm4gb2Zmc2V0
ICsgYS5sZW5ndGg7Ci0gICAgICogfTwvcHJlPgotICAgICAqCi0gICAgICogYnV0IGlzIG1vcmUg
ZWZmaWNpZW50IGluIGJvdGggdGltZSBhbmQgc3BhY2UuIE9uZSBrZXkgZGlmZmVyZW5jZSBpcyB0
aGF0IHRoaXMgbWV0aG9kCi0gICAgICogcmVxdWlyZXMgcGFpcmVkIHN1cnJvZ2F0ZXMsIGFuZCB0
aGVyZWZvcmUgZG9lcyBub3Qgc3VwcG9ydCBjaHVua2luZy4KLSAgICAgKiBXaGlsZSB7QGNvZGUg
U3RyaW5nLmdldEJ5dGVzKFVURl84KX0gcmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRo
IHRoZSBkZWZhdWx0Ci0gICAgICogcmVwbGFjZW1lbnQgY2hhcmFjdGVyLCB0aGlzIG1ldGhvZCB0
aHJvd3Mge0BsaW5rIFVucGFpcmVkU3Vycm9nYXRlRXhjZXB0aW9ufS4KLSAgICAgKgotICAgICAq
IDxwPlRvIGVuc3VyZSBzdWZmaWNpZW50IHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyLCBlaXRo
ZXIgY2FsbCB7QGxpbmsgI2VuY29kZWRMZW5ndGh9IHRvCi0gICAgICogY29tcHV0ZSB0aGUgZXhh
Y3QgYW1vdW50IG5lZWRlZCwgb3IgbGVhdmUgcm9vbSBmb3IgCi0gICAgICoge0Bjb2RlIFV0Zjgu
TUFYX0JZVEVTX1BFUl9DSEFSICogc2VxdWVuY2UubGVuZ3RoKCl9LCB3aGljaCBpcyB0aGUgbGFy
Z2VzdCBwb3NzaWJsZSBudW1iZXIKLSAgICAgKiBvZiBieXRlcyB0aGF0IGFueSBpbnB1dCBjYW4g
YmUgZW5jb2RlZCB0by4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbiB0aGUgaW5wdXQgY2hhcmFj
dGVyIHNlcXVlbmNlIHRvIGJlIGVuY29kZWQKLSAgICAgKiBAcGFyYW0gb3V0IHRoZSB0YXJnZXQg
YXJyYXkKLSAgICAgKiBAcGFyYW0gb2Zmc2V0IHRoZSBzdGFydGluZyBvZmZzZXQgaW4ge0Bjb2Rl
IGJ5dGVzfSB0byBzdGFydCB3cml0aW5nIGF0Ci0gICAgICogQHBhcmFtIGxlbmd0aCB0aGUgbGVu
Z3RoIG9mIHRoZSB7QGNvZGUgYnl0ZXN9LCBzdGFydGluZyBmcm9tIHtAY29kZSBvZmZzZXR9Ci0g
ICAgICogQHRocm93cyBVbnBhaXJlZFN1cnJvZ2F0ZUV4Y2VwdGlvbiBpZiB7QGNvZGUgc2VxdWVu
Y2V9IGNvbnRhaW5zIGlsbC1mb3JtZWQgVVRGLTE2ICh1bnBhaXJlZAotICAgICAqICAgICBzdXJy
b2dhdGVzKQotICAgICAqIEB0aHJvd3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlm
IHtAY29kZSBzZXF1ZW5jZX0gZW5jb2RlZCBpbiBVVEYtOCBpcyBsb25nZXIgdGhhbgotICAgICAq
ICAgICB7QGNvZGUgYnl0ZXMubGVuZ3RoIC0gb2Zmc2V0fQotICAgICAqIEByZXR1cm4gdGhlIG5l
dyBvZmZzZXQsIGVxdWl2YWxlbnQgdG8ge0Bjb2RlIG9mZnNldCArIFV0ZjguZW5jb2RlZExlbmd0
aChzZXF1ZW5jZSl9Ci0gICAgICovCi0gICAgYWJzdHJhY3QgaW50IGVuY29kZVV0ZjgoQ2hhclNl
cXVlbmNlIGluLCBieXRlW10gb3V0LCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKLQotICAgIC8q
KgotICAgICAqIEVuY29kZXMgYW4gaW5wdXQgY2hhcmFjdGVyIHNlcXVlbmNlICh7QGNvZGUgaW59
KSB0byBVVEYtOCBpbiB0aGUgdGFyZ2V0IGJ1ZmZlciAoe0Bjb2RlIG91dH0pLgotICAgICAqIFVw
b24gcmV0dXJuaW5nIGZyb20gdGhpcyBtZXRob2QsIHRoZSB7QGNvZGUgb3V0fSBwb3NpdGlvbiB3
aWxsIHBvaW50IHRvIHRoZSBwb3NpdGlvbiBhZnRlcgotICAgICAqIHRoZSBsYXN0IGVuY29kZWQg
Ynl0ZS4gVGhpcyBtZXRob2QgcmVxdWlyZXMgcGFpcmVkIHN1cnJvZ2F0ZXMsIGFuZCB0aGVyZWZv
cmUgZG9lcyBub3QKLSAgICAgKiBzdXBwb3J0IGNodW5raW5nLgotICAgICAqCi0gICAgICogPHA+
VG8gZW5zdXJlIHN1ZmZpY2llbnQgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXIsIGVpdGhlciBj
YWxsIHtAbGluayAjZW5jb2RlZExlbmd0aH0gdG8KLSAgICAgKiBjb21wdXRlIHRoZSBleGFjdCBh
bW91bnQgbmVlZGVkLCBvciBsZWF2ZSByb29tIGZvcgotICAgICAqIHtAY29kZSBVdGY4Lk1BWF9C
WVRFU19QRVJfQ0hBUiAqIGluLmxlbmd0aCgpfSwgd2hpY2ggaXMgdGhlIGxhcmdlc3QgcG9zc2li
bGUgbnVtYmVyCi0gICAgICogb2YgYnl0ZXMgdGhhdCBhbnkgaW5wdXQgY2FuIGJlIGVuY29kZWQg
dG8uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW4gdGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2VxdWVu
Y2UgdG8gYmUgZW5jb2RlZAotICAgICAqIEBwYXJhbSBvdXQgdGhlIHRhcmdldCBidWZmZXIKLSAg
ICAgKiBAdGhyb3dzIFVucGFpcmVkU3Vycm9nYXRlRXhjZXB0aW9uIGlmIHtAY29kZSBpbn0gY29u
dGFpbnMgaWxsLWZvcm1lZCBVVEYtMTYgKHVucGFpcmVkCi0gICAgICogICAgIHN1cnJvZ2F0ZXMp
Ci0gICAgICogQHRocm93cyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYge0Bjb2Rl
IGlufSBlbmNvZGVkIGluIFVURi04IGlzIGxvbmdlciB0aGFuCi0gICAgICogICAgIHtAY29kZSBv
dXQucmVtYWluaW5nKCl9Ci0gICAgICovCi0gICAgZmluYWwgdm9pZCBlbmNvZGVVdGY4KENoYXJT
ZXF1ZW5jZSBpbiwgQnl0ZUJ1ZmZlciBvdXQpIHsKLSAgICAgIGlmIChvdXQuaGFzQXJyYXkoKSkg
ewotICAgICAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gb3V0LmFycmF5T2Zmc2V0KCk7Ci0gICAgICAg
IGludCBlbmRJbmRleCA9Ci0gICAgICAgICAgICBVdGY4LmVuY29kZShpbiwgb3V0LmFycmF5KCks
IG9mZnNldCArIG91dC5wb3NpdGlvbigpLCBvdXQucmVtYWluaW5nKCkpOwotICAgICAgICBvdXQu
cG9zaXRpb24oZW5kSW5kZXggLSBvZmZzZXQpOwotICAgICAgfSBlbHNlIGlmIChvdXQuaXNEaXJl
Y3QoKSkgewotICAgICAgICBlbmNvZGVVdGY4RGlyZWN0KGluLCBvdXQpOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgZW5jb2RlVXRmOERlZmF1bHQoaW4sIG91dCk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogRW5jb2RlcyB0aGUgaW5wdXQgY2hhcmFjdGVyIHNlcXVlbmNlIHRv
IGEgZGlyZWN0IHtAbGluayBCeXRlQnVmZmVyfSBpbnN0YW5jZS4KLSAgICAgKi8KLSAgICBhYnN0
cmFjdCB2b2lkIGVuY29kZVV0ZjhEaXJlY3QoQ2hhclNlcXVlbmNlIGluLCBCeXRlQnVmZmVyIG91
dCk7Ci0KLSAgICAvKioKLSAgICAgKiBFbmNvZGVzIHRoZSBpbnB1dCBjaGFyYWN0ZXIgc2VxdWVu
Y2UgdG8gYSB7QGxpbmsgQnl0ZUJ1ZmZlcn0gaW5zdGFuY2UgdXNpbmcgdGhlIHtAbGluawotICAg
ICAqIEJ5dGVCdWZmZXJ9IEFQSSwgcmF0aGVyIHRoYW4gcG90ZW50aWFsbHkgZmFzdGVyIGFwcHJv
YWNoZXMuCi0gICAgICovCi0gICAgZmluYWwgdm9pZCBlbmNvZGVVdGY4RGVmYXVsdChDaGFyU2Vx
dWVuY2UgaW4sIEJ5dGVCdWZmZXIgb3V0KSB7Ci0gICAgICBmaW5hbCBpbnQgaW5MZW5ndGggPSBp
bi5sZW5ndGgoKTsKLSAgICAgIGludCBvdXRJeCA9IG91dC5wb3NpdGlvbigpOwotICAgICAgaW50
IGluSXggPSAwOwotCi0gICAgICAvLyBTaW5jZSBCeXRlQnVmZmVyLnB1dFhYWCgpIGFscmVhZHkg
Y2hlY2tzIGJvdW5kYXJpZXMgZm9yIHVzLCBubyBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sKLSAg
ICAgIC8vIGFjY2Vzcy4gQXNzdW1lIHRoZSBidWZmZXIgaXMgYmlnIGVub3VnaCBhbmQgbGV0IGl0
IGhhbmRsZSB0aGUgb3V0IG9mIGJvdW5kcyBleGNlcHRpb24KLSAgICAgIC8vIGlmIGl0IG9jY3Vy
cy4KLSAgICAgIHRyeSB7Ci0gICAgICAgIC8vIERlc2lnbmVkIHRvIHRha2UgYWR2YW50YWdlIG9m
Ci0gICAgICAgIC8vIGh0dHBzOi8vd2lraXMub3JhY2xlLmNvbS9kaXNwbGF5L0hvdFNwb3RJbnRl
cm5hbHMvUmFuZ2VDaGVja0VsaW1pbmF0aW9uCi0gICAgICAgIGZvciAoY2hhciBjOyBpbkl4IDwg
aW5MZW5ndGggJiYgKGMgPSBpbi5jaGFyQXQoaW5JeCkpIDwgMHg4MDsgKytpbkl4KSB7Ci0gICAg
ICAgICAgb3V0LnB1dChvdXRJeCArIGluSXgsIChieXRlKSBjKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaW5JeCA9PSBpbkxlbmd0aCkgewotICAgICAgICAgIC8vIFN1Y2Nlc3NmdWxseSBlbmNv
ZGVkIHRoZSBlbnRpcmUgc3RyaW5nLgotICAgICAgICAgIG91dC5wb3NpdGlvbihvdXRJeCArIGlu
SXgpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG91dEl4ICs9IGlu
SXg7Ci0gICAgICAgIGZvciAoY2hhciBjOyBpbkl4IDwgaW5MZW5ndGg7ICsraW5JeCwgKytvdXRJ
eCkgewotICAgICAgICAgIGMgPSBpbi5jaGFyQXQoaW5JeCk7Ci0gICAgICAgICAgaWYgKGMgPCAw
eDgwKSB7Ci0gICAgICAgICAgICAvLyBPbmUgYnl0ZSAoMHh4eCB4eHh4KQotICAgICAgICAgICAg
b3V0LnB1dChvdXRJeCwgKGJ5dGUpIGMpOwotICAgICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4ODAw
KSB7Ci0gICAgICAgICAgICAvLyBUd28gYnl0ZXMgKDExMHggeHh4eCAxMHh4IHh4eHgpCi0KLSAg
ICAgICAgICAgIC8vIEJlbmNobWFya3Mgc2hvdyBwdXQgcGVyZm9ybXMgYmV0dGVyIHRoYW4gcHV0
U2hvcnQgaGVyZSAoZm9yIEhvdFNwb3QpLgotICAgICAgICAgICAgb3V0LnB1dChvdXRJeCsrLCAo
Ynl0ZSkgKDB4QzAgfCAoYyA+Pj4gNikpKTsKLSAgICAgICAgICAgIG91dC5wdXQob3V0SXgsIChi
eXRlKSAoMHg4MCB8ICgweDNGICYgYykpKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKGMgPCBNSU5f
U1VSUk9HQVRFIHx8IE1BWF9TVVJST0dBVEUgPCBjKSB7Ci0gICAgICAgICAgICAvLyBUaHJlZSBi
eXRlcyAoMTExMCB4eHh4IDEweHggeHh4eCAxMHh4IHh4eHgpCi0gICAgICAgICAgICAvLyBNYXhp
bXVtIHNpbmdsZS1jaGFyIGNvZGUgcG9pbnQgaXMgMHhGRkZGLCAxNiBiaXRzLgotCi0gICAgICAg
ICAgICAvLyBCZW5jaG1hcmtzIHNob3cgcHV0IHBlcmZvcm1zIGJldHRlciB0aGFuIHB1dFNob3J0
IGhlcmUgKGZvciBIb3RTcG90KS4KLSAgICAgICAgICAgIG91dC5wdXQob3V0SXgrKywgKGJ5dGUp
ICgweEUwIHwgKGMgPj4+IDEyKSkpOwotICAgICAgICAgICAgb3V0LnB1dChvdXRJeCsrLCAoYnl0
ZSkgKDB4ODAgfCAoMHgzRiAmIChjID4+PiA2KSkpKTsKLSAgICAgICAgICAgIG91dC5wdXQob3V0
SXgsIChieXRlKSAoMHg4MCB8ICgweDNGICYgYykpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gRm91ciBieXRlcyAoMTExMSB4eHh4IDEweHggeHh4eCAxMHh4IHh4eHggMTB4
eCB4eHh4KQotCi0gICAgICAgICAgICAvLyBNaW5pbXVtIGNvZGUgcG9pbnQgcmVwcmVzZW50ZWQg
YnkgYSBzdXJyb2dhdGUgcGFpciBpcyAweDEwMDAwLCAxNyBiaXRzLCBmb3VyIFVURi04Ci0gICAg
ICAgICAgICAvLyBieXRlcwotICAgICAgICAgICAgZmluYWwgY2hhciBsb3c7Ci0gICAgICAgICAg
ICBpZiAoaW5JeCArIDEgPT0gaW5MZW5ndGggfHwgIWlzU3Vycm9nYXRlUGFpcihjLCAobG93ID0g
aW4uY2hhckF0KCsraW5JeCkpKSkgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5wYWlyZWRT
dXJyb2dhdGVFeGNlcHRpb24oaW5JeCwgaW5MZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgLy8gVE9ETyhuYXRoYW5taXR0bGVyKTogQ29uc2lkZXIgdXNpbmcgcHV0SW50KCkgdG8g
aW1wcm92ZSBwZXJmb3JtYW5jZS4KLSAgICAgICAgICAgIGludCBjb2RlUG9pbnQgPSB0b0NvZGVQ
b2ludChjLCBsb3cpOwotICAgICAgICAgICAgb3V0LnB1dChvdXRJeCsrLCAoYnl0ZSkgKCgweEYg
PDwgNCkgfCAoY29kZVBvaW50ID4+PiAxOCkpKTsKLSAgICAgICAgICAgIG91dC5wdXQob3V0SXgr
KywgKGJ5dGUpICgweDgwIHwgKDB4M0YgJiAoY29kZVBvaW50ID4+PiAxMikpKSk7Ci0gICAgICAg
ICAgICBvdXQucHV0KG91dEl4KyssIChieXRlKSAoMHg4MCB8ICgweDNGICYgKGNvZGVQb2ludCA+
Pj4gNikpKSk7Ci0gICAgICAgICAgICBvdXQucHV0KG91dEl4LCAoYnl0ZSkgKDB4ODAgfCAoMHgz
RiAmIGNvZGVQb2ludCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBT
dWNjZXNzZnVsbHkgZW5jb2RlZCB0aGUgZW50aXJlIHN0cmluZy4KLSAgICAgICAgb3V0LnBvc2l0
aW9uKG91dEl4KTsKLSAgICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkg
ewotICAgICAgICAvLyBUT0RPKG5hdGhhbm1pdHRsZXIpOiBDb25zaWRlciBtYWtpbmcgdGhlIEFQ
SSB0aHJvdyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluc3RlYWQuCi0KLSAgICAgICAgLy8g
SWYgd2UgZmFpbGVkIGluIHRoZSBvdXRlciBBU0NJSSBsb29wLCBvdXRJeCB3aWxsIG5vdCBoYXZl
IGJlZW4gdXBkYXRlZC4gSW4gdGhpcyBjYXNlLAotICAgICAgICAvLyB1c2UgaW5JeCB0byBkZXRl
cm1pbmUgdGhlIGJhZCB3cml0ZSBpbmRleC4KLSAgICAgICAgaW50IGJhZFdyaXRlSW5kZXggPSBv
dXQucG9zaXRpb24oKSArIE1hdGgubWF4KGluSXgsIG91dEl4IC0gb3V0LnBvc2l0aW9uKCkgKyAx
KTsKLSAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigKLSAg
ICAgICAgICAgICJGYWlsZWQgd3JpdGluZyAiICsgaW4uY2hhckF0KGluSXgpICsgIiBhdCBpbmRl
eCAiICsgYmFkV3JpdGVJbmRleCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IHtAbGluayBQcm9jZXNzb3J9IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBub3QgdXNlIGFueSB7
QGNvZGUgc3VuLm1pc2MuVW5zYWZlfSBtZXRob2RzLgotICAgKi8KLSAgc3RhdGljIGZpbmFsIGNs
YXNzIFNhZmVQcm9jZXNzb3IgZXh0ZW5kcyBQcm9jZXNzb3IgewotICAgIEBPdmVycmlkZQotICAg
IGludCBwYXJ0aWFsSXNWYWxpZFV0ZjgoaW50IHN0YXRlLCBieXRlW10gYnl0ZXMsIGludCBpbmRl
eCwgaW50IGxpbWl0KSB7Ci0gICAgICBpZiAoc3RhdGUgIT0gQ09NUExFVEUpIHsKLSAgICAgICAg
Ly8gVGhlIHByZXZpb3VzIGRlY29kaW5nIG9wZXJhdGlvbiB3YXMgaW5jb21wbGV0ZSAob3IgbWFs
Zm9ybWVkKS4KLSAgICAgICAgLy8gV2UgbG9vayBmb3IgYSB3ZWxsLWZvcm1lZCBzZXF1ZW5jZSBj
b25zaXN0aW5nIG9mIGJ5dGVzIGZyb20KLSAgICAgICAgLy8gdGhlIHByZXZpb3VzIGRlY29kaW5n
IG9wZXJhdGlvbiAoc3RvcmVkIGluIHN0YXRlKSB0b2dldGhlcgotICAgICAgICAvLyB3aXRoIGJ5
dGVzIGZyb20gdGhlIGFycmF5IHNsaWNlLgotICAgICAgICAvLwotICAgICAgICAvLyBXZSBleHBl
Y3Qgc3VjaCAic3RyYWRkbGVyIGNoYXJhY3RlcnMiIHRvIGJlIHJhcmUuCi0KLSAgICAgICAgaWYg
KGluZGV4ID49IGxpbWl0KSB7ICAvLyBObyBieXRlcz8gTm8gcHJvZ3Jlc3MuCi0gICAgICAgICAg
cmV0dXJuIHN0YXRlOwotICAgICAgICB9Ci0gICAgICAgIGludCBieXRlMSA9IChieXRlKSBzdGF0
ZTsKLSAgICAgICAgLy8gYnl0ZTEgaXMgbmV2ZXIgQVNDSUkuCi0gICAgICAgIGlmIChieXRlMSA8
IChieXRlKSAweEUwKSB7Ci0gICAgICAgICAgLy8gdHdvLWJ5dGUgZm9ybQotCi0gICAgICAgICAg
Ly8gU2ltdWx0YW5lb3VzbHkgY2hlY2tzIGZvciBpbGxlZ2FsIHRyYWlsaW5nLWJ5dGUgaW4KLSAg
ICAgICAgICAvLyBsZWFkaW5nIHBvc2l0aW9uIGFuZCBvdmVybG9uZyAyLWJ5dGUgZm9ybS4KLSAg
ICAgICAgICBpZiAoYnl0ZTEgPCAoYnl0ZSkgMHhDMgotICAgICAgICAgICAgICAvLyBieXRlMiB0
cmFpbGluZy1ieXRlIHRlc3QKLSAgICAgICAgICAgICAgfHwgYnl0ZXNbaW5kZXgrK10gPiAoYnl0
ZSkgMHhCRikgewotICAgICAgICAgICAgcmV0dXJuIE1BTEZPUk1FRDsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAoYnl0ZTEgPCAoYnl0ZSkgMHhGMCkgewotICAgICAgICAgIC8vIHRo
cmVlLWJ5dGUgZm9ybQotCi0gICAgICAgICAgLy8gR2V0IGJ5dGUyIGZyb20gc2F2ZWQgc3RhdGUg
b3IgYXJyYXkKLSAgICAgICAgICBpbnQgYnl0ZTIgPSAoYnl0ZSkgfihzdGF0ZSA+PiA4KTsKLSAg
ICAgICAgICBpZiAoYnl0ZTIgPT0gMCkgewotICAgICAgICAgICAgYnl0ZTIgPSBieXRlc1tpbmRl
eCsrXTsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBsaW1pdCkgewotICAgICAgICAgICAgICBy
ZXR1cm4gaW5jb21wbGV0ZVN0YXRlRm9yKGJ5dGUxLCBieXRlMik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGlmIChieXRlMiA+IChieXRlKSAweEJGCi0gICAgICAgICAg
ICAgIC8vIG92ZXJsb25nPyA1IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBtdXN0IG5vdCBhbGwgYmUg
emVybwotICAgICAgICAgICAgICB8fCAoYnl0ZTEgPT0gKGJ5dGUpIDB4RTAgJiYgYnl0ZTIgPCAo
Ynl0ZSkgMHhBMCkKLSAgICAgICAgICAgICAgLy8gaWxsZWdhbCBzdXJyb2dhdGUgY29kZXBvaW50
PwotICAgICAgICAgICAgICB8fCAoYnl0ZTEgPT0gKGJ5dGUpIDB4RUQgJiYgYnl0ZTIgPj0gKGJ5
dGUpIDB4QTApCi0gICAgICAgICAgICAgIC8vIGJ5dGUzIHRyYWlsaW5nLWJ5dGUgdGVzdAotICAg
ICAgICAgICAgICB8fCBieXRlc1tpbmRleCsrXSA+IChieXRlKSAweEJGKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gTUFMRk9STUVEOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAvLyBmb3VyLWJ5dGUgZm9ybQotCi0gICAgICAgICAgLy8gR2V0IGJ5dGUyIGFuZCBieXRl
MyBmcm9tIHNhdmVkIHN0YXRlIG9yIGFycmF5Ci0gICAgICAgICAgaW50IGJ5dGUyID0gKGJ5dGUp
IH4oc3RhdGUgPj4gOCk7Ci0gICAgICAgICAgaW50IGJ5dGUzID0gMDsKLSAgICAgICAgICBpZiAo
Ynl0ZTIgPT0gMCkgewotICAgICAgICAgICAgYnl0ZTIgPSBieXRlc1tpbmRleCsrXTsKLSAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBsaW1pdCkgewotICAgICAgICAgICAgICByZXR1cm4gaW5jb21w
bGV0ZVN0YXRlRm9yKGJ5dGUxLCBieXRlMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGJ5dGUzID0gKGJ5dGUpIChzdGF0ZSA+PiAxNik7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGlmIChieXRlMyA9PSAwKSB7Ci0gICAgICAgICAgICBieXRlMyA9IGJ5
dGVzW2luZGV4KytdOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IGxpbWl0KSB7Ci0gICAgICAg
ICAgICAgIHJldHVybiBpbmNvbXBsZXRlU3RhdGVGb3IoYnl0ZTEsIGJ5dGUyLCBieXRlMyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gSWYgd2Ugd2VyZSBjYWxs
ZWQgd2l0aCBzdGF0ZSA9PSBNQUxGT1JNRUQsIHRoZW4gYnl0ZTEgaXMgMHhGRiwKLSAgICAgICAg
ICAvLyB3aGljaCBuZXZlciBvY2N1cnMgaW4gd2VsbC1mb3JtZWQgVVRGLTgsIGFuZCBzbyB3ZSB3
aWxsIHJldHVybgotICAgICAgICAgIC8vIE1BTEZPUk1FRCBhZ2FpbiBiZWxvdy4KLQotICAgICAg
ICAgIGlmIChieXRlMiA+IChieXRlKSAweEJGCi0gICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQg
MSA8PSBwbGFuZSA8PSAxNi4gIFRyaWNreSBvcHRpbWl6ZWQgZm9ybSBvZjoKLSAgICAgICAgICAg
ICAgLy8gaWYgKGJ5dGUxID4gKGJ5dGUpIDB4RjQgfHwKLSAgICAgICAgICAgICAgLy8gICAgIGJ5
dGUxID09IChieXRlKSAweEYwICYmIGJ5dGUyIDwgKGJ5dGUpIDB4OTAgfHwKLSAgICAgICAgICAg
ICAgLy8gICAgIGJ5dGUxID09IChieXRlKSAweEY0ICYmIGJ5dGUyID4gKGJ5dGUpIDB4OEYpCi0g
ICAgICAgICAgICAgIHx8ICgoKGJ5dGUxIDw8IDI4KSArIChieXRlMiAtIChieXRlKSAweDkwKSkg
Pj4gMzApICE9IDAKLSAgICAgICAgICAgICAgLy8gYnl0ZTMgdHJhaWxpbmctYnl0ZSB0ZXN0Ci0g
ICAgICAgICAgICAgIHx8IGJ5dGUzID4gKGJ5dGUpIDB4QkYKLSAgICAgICAgICAgICAgLy8gYnl0
ZTQgdHJhaWxpbmctYnl0ZSB0ZXN0Ci0gICAgICAgICAgICAgIHx8IGJ5dGVzW2luZGV4KytdID4g
KGJ5dGUpIDB4QkYpIHsKLSAgICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBwYXJ0aWFsSXNWYWxpZFV0Zjgo
Ynl0ZXMsIGluZGV4LCBsaW1pdCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgaW50IHBh
cnRpYWxJc1ZhbGlkVXRmOERpcmVjdChpbnQgc3RhdGUsIEJ5dGVCdWZmZXIgYnVmZmVyLCBpbnQg
aW5kZXgsIGludCBsaW1pdCkgewotICAgICAgLy8gRm9yIHNhZmUgcHJvY2Vzc2luZywgd2UgaGF2
ZSB0byB1c2UgdGhlIEJ5dGVCdWZmZXIgQVBJLgotICAgICAgcmV0dXJuIHBhcnRpYWxJc1ZhbGlk
VXRmOERlZmF1bHQoc3RhdGUsIGJ1ZmZlciwgaW5kZXgsIGxpbWl0KTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBpbnQgZW5jb2RlVXRmOChDaGFyU2VxdWVuY2UgaW4sIGJ5dGVbXSBvdXQs
IGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLSAgICAgIGludCB1dGYxNkxlbmd0aCA9IGluLmxl
bmd0aCgpOwotICAgICAgaW50IGogPSBvZmZzZXQ7Ci0gICAgICBpbnQgaSA9IDA7Ci0gICAgICBp
bnQgbGltaXQgPSBvZmZzZXQgKyBsZW5ndGg7Ci0gICAgICAvLyBEZXNpZ25lZCB0byB0YWtlIGFk
dmFudGFnZSBvZgotICAgICAgLy8gaHR0cHM6Ly93aWtpcy5vcmFjbGUuY29tL2Rpc3BsYXkvSG90
U3BvdEludGVybmFscy9SYW5nZUNoZWNrRWxpbWluYXRpb24KLSAgICAgIGZvciAoY2hhciBjOyBp
IDwgdXRmMTZMZW5ndGggJiYgaSArIGogPCBsaW1pdCAmJiAoYyA9IGluLmNoYXJBdChpKSkgPCAw
eDgwOyBpKyspIHsKLSAgICAgICAgb3V0W2ogKyBpXSA9IChieXRlKSBjOwotICAgICAgfQotICAg
ICAgaWYgKGkgPT0gdXRmMTZMZW5ndGgpIHsKLSAgICAgICAgcmV0dXJuIGogKyB1dGYxNkxlbmd0
aDsKLSAgICAgIH0KLSAgICAgIGogKz0gaTsKLSAgICAgIGZvciAoY2hhciBjOyBpIDwgdXRmMTZM
ZW5ndGg7IGkrKykgewotICAgICAgICBjID0gaW4uY2hhckF0KGkpOwotICAgICAgICBpZiAoYyA8
IDB4ODAgJiYgaiA8IGxpbWl0KSB7Ci0gICAgICAgICAgb3V0W2orK10gPSAoYnl0ZSkgYzsKLSAg
ICAgICAgfSBlbHNlIGlmIChjIDwgMHg4MDAgJiYgaiA8PSBsaW1pdCAtIDIpIHsgLy8gMTEgYml0
cywgdHdvIFVURi04IGJ5dGVzCi0gICAgICAgICAgb3V0W2orK10gPSAoYnl0ZSkgKCgweEYgPDwg
NikgfCAoYyA+Pj4gNikpOwotICAgICAgICAgIG91dFtqKytdID0gKGJ5dGUpICgweDgwIHwgKDB4
M0YgJiBjKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKGMgPCBDaGFyYWN0ZXIuTUlOX1NVUlJPR0FU
RSB8fCBDaGFyYWN0ZXIuTUFYX1NVUlJPR0FURSA8IGMpICYmIGogPD0gbGltaXQgLSAzKSB7Ci0g
ICAgICAgICAgLy8gTWF4aW11bSBzaW5nbGUtY2hhciBjb2RlIHBvaW50IGlzIDB4RkZGRiwgMTYg
Yml0cywgdGhyZWUgVVRGLTggYnl0ZXMKLSAgICAgICAgICBvdXRbaisrXSA9IChieXRlKSAoKDB4
RiA8PCA1KSB8IChjID4+PiAxMikpOwotICAgICAgICAgIG91dFtqKytdID0gKGJ5dGUpICgweDgw
IHwgKDB4M0YgJiAoYyA+Pj4gNikpKTsKLSAgICAgICAgICBvdXRbaisrXSA9IChieXRlKSAoMHg4
MCB8ICgweDNGICYgYykpOwotICAgICAgICB9IGVsc2UgaWYgKGogPD0gbGltaXQgLSA0KSB7Ci0g
ICAgICAgICAgLy8gTWluaW11bSBjb2RlIHBvaW50IHJlcHJlc2VudGVkIGJ5IGEgc3Vycm9nYXRl
IHBhaXIgaXMgMHgxMDAwMCwgMTcgYml0cywKLSAgICAgICAgICAvLyBmb3VyIFVURi04IGJ5dGVz
Ci0gICAgICAgICAgZmluYWwgY2hhciBsb3c7Ci0gICAgICAgICAgaWYgKGkgKyAxID09IGluLmxl
bmd0aCgpCi0gICAgICAgICAgICAgICAgICB8fCAhQ2hhcmFjdGVyLmlzU3Vycm9nYXRlUGFpcihj
LCAobG93ID0gaW4uY2hhckF0KCsraSkpKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFVucGFp
cmVkU3Vycm9nYXRlRXhjZXB0aW9uKChpIC0gMSksIHV0ZjE2TGVuZ3RoKTsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgaW50IGNvZGVQb2ludCA9IENoYXJhY3Rlci50b0NvZGVQb2ludChjLCBsb3cp
OwotICAgICAgICAgIG91dFtqKytdID0gKGJ5dGUpICgoMHhGIDw8IDQpIHwgKGNvZGVQb2ludCA+
Pj4gMTgpKTsKLSAgICAgICAgICBvdXRbaisrXSA9IChieXRlKSAoMHg4MCB8ICgweDNGICYgKGNv
ZGVQb2ludCA+Pj4gMTIpKSk7Ci0gICAgICAgICAgb3V0W2orK10gPSAoYnl0ZSkgKDB4ODAgfCAo
MHgzRiAmIChjb2RlUG9pbnQgPj4+IDYpKSk7Ci0gICAgICAgICAgb3V0W2orK10gPSAoYnl0ZSkg
KDB4ODAgfCAoMHgzRiAmIGNvZGVQb2ludCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IC8vIElmIHdlIGFyZSBzdXJyb2dhdGVzIGFuZCB3ZSdyZSBub3QgYSBzdXJyb2dhdGUgcGFpciwg
YWx3YXlzIHRocm93IGFuCi0gICAgICAgICAgLy8gVW5wYWlyZWRTdXJyb2dhdGVFeGNlcHRpb24g
aW5zdGVhZCBvZiBhbiBBcnJheU91dE9mQm91bmRzRXhjZXB0aW9uLgotICAgICAgICAgIGlmICgo
Q2hhcmFjdGVyLk1JTl9TVVJST0dBVEUgPD0gYyAmJiBjIDw9IENoYXJhY3Rlci5NQVhfU1VSUk9H
QVRFKQotICAgICAgICAgICAgICAmJiAoaSArIDEgPT0gaW4ubGVuZ3RoKCkKLSAgICAgICAgICAg
ICAgICAgIHx8ICFDaGFyYWN0ZXIuaXNTdXJyb2dhdGVQYWlyKGMsIGluLmNoYXJBdChpICsgMSkp
KSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFVucGFpcmVkU3Vycm9nYXRlRXhjZXB0aW9uKGks
IHV0ZjE2TGVuZ3RoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5k
ZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiRmFpbGVkIHdyaXRpbmcgIiArIGMgKyAiIGF0IGluZGV4
ICIgKyBqKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGo7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgdm9pZCBlbmNvZGVVdGY4RGlyZWN0KENoYXJTZXF1ZW5jZSBpbiwg
Qnl0ZUJ1ZmZlciBvdXQpIHsKLSAgICAgIC8vIEZvciBzYWZlIHByb2Nlc3NpbmcsIHdlIGhhdmUg
dG8gdXNlIHRoZSBCeXRlQnVmZmVyIEFQSS4KLSAgICAgIGVuY29kZVV0ZjhEZWZhdWx0KGluLCBv
dXQpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBwYXJ0aWFsSXNWYWxpZFV0Zjgo
Ynl0ZVtdIGJ5dGVzLCBpbnQgaW5kZXgsIGludCBsaW1pdCkgewotICAgICAgLy8gT3B0aW1pemUg
Zm9yIDEwMCUgQVNDSUkgKEhvdHNwb3QgbG92ZXMgc21hbGwgc2ltcGxlIHRvcC1sZXZlbCBsb29w
cyBsaWtlIHRoaXMpLgotICAgICAgLy8gVGhpcyBzaW1wbGUgbG9vcCBzdG9wcyB3aGVuIHdlIGVu
Y291bnRlciBhIGJ5dGUgPj0gMHg4MCAoaS5lLiBub24tQVNDSUkpLgotICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGltaXQgJiYgYnl0ZXNbaW5kZXhdID49IDApIHsKLSAgICAgICAgaW5kZXgrKzsKLSAg
ICAgIH0KLQotICAgICAgcmV0dXJuIChpbmRleCA+PSBsaW1pdCkgPyBDT01QTEVURSA6IHBhcnRp
YWxJc1ZhbGlkVXRmOE5vbkFzY2lpKGJ5dGVzLCBpbmRleCwgbGltaXQpOwotICAgIH0KLQotICAg
IHByaXZhdGUgc3RhdGljIGludCBwYXJ0aWFsSXNWYWxpZFV0ZjhOb25Bc2NpaShieXRlW10gYnl0
ZXMsIGludCBpbmRleCwgaW50IGxpbWl0KSB7Ci0gICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlu
dCBieXRlMSwgYnl0ZTI7Ci0KLSAgICAgICAgLy8gT3B0aW1pemUgZm9yIGludGVyaW9yIHJ1bnMg
b2YgQVNDSUkgYnl0ZXMuCi0gICAgICAgIGRvIHsKLSAgICAgICAgICBpZiAoaW5kZXggPj0gbGlt
aXQpIHsKLSAgICAgICAgICAgIHJldHVybiBDT01QTEVURTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0gd2hpbGUgKChieXRlMSA9IGJ5dGVzW2luZGV4KytdKSA+PSAwKTsKLQotICAgICAgICBpZiAo
Ynl0ZTEgPCAoYnl0ZSkgMHhFMCkgewotICAgICAgICAgIC8vIHR3by1ieXRlIGZvcm0KLQotICAg
ICAgICAgIGlmIChpbmRleCA+PSBsaW1pdCkgewotICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBz
ZXF1ZW5jZQotICAgICAgICAgICAgcmV0dXJuIGJ5dGUxOwotICAgICAgICAgIH0KLQotICAgICAg
ICAgIC8vIFNpbXVsdGFuZW91c2x5IGNoZWNrcyBmb3IgaWxsZWdhbCB0cmFpbGluZy1ieXRlIGlu
Ci0gICAgICAgICAgLy8gbGVhZGluZyBwb3NpdGlvbiBhbmQgb3ZlcmxvbmcgMi1ieXRlIGZvcm0u
Ci0gICAgICAgICAgaWYgKGJ5dGUxIDwgKGJ5dGUpIDB4QzIKLSAgICAgICAgICAgICAgfHwgYnl0
ZXNbaW5kZXgrK10gPiAoYnl0ZSkgMHhCRikgewotICAgICAgICAgICAgcmV0dXJuIE1BTEZPUk1F
RDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYnl0ZTEgPCAoYnl0ZSkgMHhGMCkg
ewotICAgICAgICAgIC8vIHRocmVlLWJ5dGUgZm9ybQotCi0gICAgICAgICAgaWYgKGluZGV4ID49
IGxpbWl0IC0gMSkgeyAvLyBpbmNvbXBsZXRlIHNlcXVlbmNlCi0gICAgICAgICAgICByZXR1cm4g
aW5jb21wbGV0ZVN0YXRlRm9yKGJ5dGVzLCBpbmRleCwgbGltaXQpOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBpZiAoKGJ5dGUyID0gYnl0ZXNbaW5kZXgrK10pID4gKGJ5dGUpIDB4QkYKLSAgICAg
ICAgICAgICAgLy8gb3Zlcmxvbmc/IDUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG11c3Qgbm90IGFs
bCBiZSB6ZXJvCi0gICAgICAgICAgICAgIHx8IChieXRlMSA9PSAoYnl0ZSkgMHhFMCAmJiBieXRl
MiA8IChieXRlKSAweEEwKQotICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgaWxsZWdhbCBzdXJy
b2dhdGUgY29kZXBvaW50cwotICAgICAgICAgICAgICB8fCAoYnl0ZTEgPT0gKGJ5dGUpIDB4RUQg
JiYgYnl0ZTIgPj0gKGJ5dGUpIDB4QTApCi0gICAgICAgICAgICAgIC8vIGJ5dGUzIHRyYWlsaW5n
LWJ5dGUgdGVzdAotICAgICAgICAgICAgICB8fCBieXRlc1tpbmRleCsrXSA+IChieXRlKSAweEJG
KSB7Ci0gICAgICAgICAgICByZXR1cm4gTUFMRk9STUVEOwotICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAvLyBmb3VyLWJ5dGUgZm9ybQotCi0gICAgICAgICAgaWYgKGlu
ZGV4ID49IGxpbWl0IC0gMikgeyAgLy8gaW5jb21wbGV0ZSBzZXF1ZW5jZQotICAgICAgICAgICAg
cmV0dXJuIGluY29tcGxldGVTdGF0ZUZvcihieXRlcywgaW5kZXgsIGxpbWl0KTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgaWYgKChieXRlMiA9IGJ5dGVzW2luZGV4KytdKSA+IChieXRlKSAweEJG
Ci0gICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgMSA8PSBwbGFuZSA8PSAxNi4gIFRyaWNreSBv
cHRpbWl6ZWQgZm9ybSBvZjoKLSAgICAgICAgICAgICAgLy8gaWYgKGJ5dGUxID4gKGJ5dGUpIDB4
RjQgfHwKLSAgICAgICAgICAgICAgLy8gICAgIGJ5dGUxID09IChieXRlKSAweEYwICYmIGJ5dGUy
IDwgKGJ5dGUpIDB4OTAgfHwKLSAgICAgICAgICAgICAgLy8gICAgIGJ5dGUxID09IChieXRlKSAw
eEY0ICYmIGJ5dGUyID4gKGJ5dGUpIDB4OEYpCi0gICAgICAgICAgICAgIHx8ICgoKGJ5dGUxIDw8
IDI4KSArIChieXRlMiAtIChieXRlKSAweDkwKSkgPj4gMzApICE9IDAKLSAgICAgICAgICAgICAg
Ly8gYnl0ZTMgdHJhaWxpbmctYnl0ZSB0ZXN0Ci0gICAgICAgICAgICAgIHx8IGJ5dGVzW2luZGV4
KytdID4gKGJ5dGUpIDB4QkYKLSAgICAgICAgICAgICAgLy8gYnl0ZTQgdHJhaWxpbmctYnl0ZSB0
ZXN0Ci0gICAgICAgICAgICAgIHx8IGJ5dGVzW2luZGV4KytdID4gKGJ5dGUpIDB4QkYpIHsKLSAg
ICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIHtAbGluayBQcm9jZXNzb3J9IHRoYXQgdXNl
cyB7QGNvZGUgc3VuLm1pc2MuVW5zYWZlfSB3aGVyZSBwb3NzaWJsZSB0byBpbXByb3ZlIHBlcmZv
cm1hbmNlLgotICAgKi8KLSAgc3RhdGljIGZpbmFsIGNsYXNzIFVuc2FmZVByb2Nlc3NvciBleHRl
bmRzIFByb2Nlc3NvciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgc3VuLm1pc2MuVW5zYWZl
IFVOU0FGRSA9IGdldFVuc2FmZSgpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgQlVG
RkVSX0FERFJFU1NfT0ZGU0VUID0KLSAgICAgICAgZmllbGRPZmZzZXQoZmllbGQoQnVmZmVyLmNs
YXNzLCAiYWRkcmVzcyIpKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVJSQVlfQkFT
RV9PRkZTRVQgPSBieXRlQXJyYXlCYXNlT2Zmc2V0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBXZSBv
bmx5IHVzZSBVbnNhZmUgb3BlcmF0aW9ucyBpZiB3ZSBoYXZlIGFjY2VzcyB0byBkaXJlY3Qge0Bs
aW5rIEJ5dGVCdWZmZXJ9J3MgYWRkcmVzcwotICAgICAqIGFuZCB0aGUgYXJyYXkgYmFzZSBvZmZz
ZXQgaXMgYSBtdWx0aXBsZSBvZiA4IChuZWVkZWQgYnkgVW5zYWZlLmdldExvbmcoKSkuCi0gICAg
ICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBBVkFJTEFCTEUgPQotICAgICAg
ICBCVUZGRVJfQUREUkVTU19PRkZTRVQgIT0gLTEgJiYgQVJSQVlfQkFTRV9PRkZTRVQgJSA4ID09
IDA7Ci0KLSAgICAvKioKLSAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYWxsIHJlcXVp
cmVkIHVuc2FmZSBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4KLSAg
ICAgKi8KLSAgICBzdGF0aWMgYm9vbGVhbiBpc0F2YWlsYWJsZSgpIHsKLSAgICAgIHJldHVybiBB
VkFJTEFCTEU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgaW50IHBhcnRpYWxJc1ZhbGlk
VXRmOChpbnQgc3RhdGUsIGJ5dGVbXSBieXRlcywgZmluYWwgaW50IGluZGV4LCBmaW5hbCBpbnQg
bGltaXQpIHsKLSAgICAgIGlmICgoaW5kZXggfCBsaW1pdCB8IGJ5dGVzLmxlbmd0aCAtIGxpbWl0
KSA8IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlv
bigKLSAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIkFycmF5IGxlbmd0aD0lZCwgaW5kZXg9JWQs
IGxpbWl0PSVkIiwgYnl0ZXMubGVuZ3RoLCBpbmRleCwgbGltaXQpKTsKLSAgICAgIH0KLSAgICAg
IGxvbmcgb2Zmc2V0ID0gQVJSQVlfQkFTRV9PRkZTRVQgKyBpbmRleDsKLSAgICAgIGZpbmFsIGxv
bmcgb2Zmc2V0TGltaXQgPSBBUlJBWV9CQVNFX09GRlNFVCArIGxpbWl0OwotICAgICAgaWYgKHN0
YXRlICE9IENPTVBMRVRFKSB7Ci0gICAgICAgIC8vIFRoZSBwcmV2aW91cyBkZWNvZGluZyBvcGVy
YXRpb24gd2FzIGluY29tcGxldGUgKG9yIG1hbGZvcm1lZCkuCi0gICAgICAgIC8vIFdlIGxvb2sg
Zm9yIGEgd2VsbC1mb3JtZWQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiBieXRlcyBmcm9tCi0gICAg
ICAgIC8vIHRoZSBwcmV2aW91cyBkZWNvZGluZyBvcGVyYXRpb24gKHN0b3JlZCBpbiBzdGF0ZSkg
dG9nZXRoZXIKLSAgICAgICAgLy8gd2l0aCBieXRlcyBmcm9tIHRoZSBhcnJheSBzbGljZS4KLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gV2UgZXhwZWN0IHN1Y2ggInN0cmFkZGxlciBjaGFyYWN0ZXJz
IiB0byBiZSByYXJlLgotCi0gICAgICAgIGlmIChvZmZzZXQgPj0gb2Zmc2V0TGltaXQpIHsgIC8v
IE5vIGJ5dGVzPyBObyBwcm9ncmVzcy4KLSAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAg
IH0KLSAgICAgICAgaW50IGJ5dGUxID0gKGJ5dGUpIHN0YXRlOwotICAgICAgICAvLyBieXRlMSBp
cyBuZXZlciBBU0NJSS4KLSAgICAgICAgaWYgKGJ5dGUxIDwgKGJ5dGUpIDB4RTApIHsKLSAgICAg
ICAgICAvLyB0d28tYnl0ZSBmb3JtCi0KLSAgICAgICAgICAvLyBTaW11bHRhbmVvdXNseSBjaGVj
a3MgZm9yIGlsbGVnYWwgdHJhaWxpbmctYnl0ZSBpbgotICAgICAgICAgIC8vIGxlYWRpbmcgcG9z
aXRpb24gYW5kIG92ZXJsb25nIDItYnl0ZSBmb3JtLgotICAgICAgICAgIGlmIChieXRlMSA8IChi
eXRlKSAweEMyCi0gICAgICAgICAgICAgIC8vIGJ5dGUyIHRyYWlsaW5nLWJ5dGUgdGVzdAotICAg
ICAgICAgICAgICB8fCBVTlNBRkUuZ2V0Qnl0ZShieXRlcywgb2Zmc2V0KyspID4gKGJ5dGUpIDB4
QkYpIHsKLSAgICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7Ci0gICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKGJ5dGUxIDwgKGJ5dGUpIDB4RjApIHsKLSAgICAgICAgICAvLyB0aHJlZS1i
eXRlIGZvcm0KLQotICAgICAgICAgIC8vIEdldCBieXRlMiBmcm9tIHNhdmVkIHN0YXRlIG9yIGFy
cmF5Ci0gICAgICAgICAgaW50IGJ5dGUyID0gKGJ5dGUpIH4oc3RhdGUgPj4gOCk7Ci0gICAgICAg
ICAgaWYgKGJ5dGUyID09IDApIHsKLSAgICAgICAgICAgIGJ5dGUyID0gVU5TQUZFLmdldEJ5dGUo
Ynl0ZXMsIG9mZnNldCsrKTsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gb2Zmc2V0TGltaXQp
IHsKLSAgICAgICAgICAgICAgcmV0dXJuIGluY29tcGxldGVTdGF0ZUZvcihieXRlMSwgYnl0ZTIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoYnl0ZTIgPiAoYnl0
ZSkgMHhCRgotICAgICAgICAgICAgICAvLyBvdmVybG9uZz8gNSBtb3N0IHNpZ25pZmljYW50IGJp
dHMgbXVzdCBub3QgYWxsIGJlIHplcm8KLSAgICAgICAgICAgICAgfHwgKGJ5dGUxID09IChieXRl
KSAweEUwICYmIGJ5dGUyIDwgKGJ5dGUpIDB4QTApCi0gICAgICAgICAgICAgIC8vIGlsbGVnYWwg
c3Vycm9nYXRlIGNvZGVwb2ludD8KLSAgICAgICAgICAgICAgfHwgKGJ5dGUxID09IChieXRlKSAw
eEVEICYmIGJ5dGUyID49IChieXRlKSAweEEwKQotICAgICAgICAgICAgICAvLyBieXRlMyB0cmFp
bGluZy1ieXRlIHRlc3QKLSAgICAgICAgICAgICAgfHwgVU5TQUZFLmdldEJ5dGUoYnl0ZXMsIG9m
ZnNldCsrKSA+IChieXRlKSAweEJGKSB7Ci0gICAgICAgICAgICByZXR1cm4gTUFMRk9STUVEOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBmb3VyLWJ5dGUgZm9y
bQotCi0gICAgICAgICAgLy8gR2V0IGJ5dGUyIGFuZCBieXRlMyBmcm9tIHNhdmVkIHN0YXRlIG9y
IGFycmF5Ci0gICAgICAgICAgaW50IGJ5dGUyID0gKGJ5dGUpIH4oc3RhdGUgPj4gOCk7Ci0gICAg
ICAgICAgaW50IGJ5dGUzID0gMDsKLSAgICAgICAgICBpZiAoYnl0ZTIgPT0gMCkgewotICAgICAg
ICAgICAgYnl0ZTIgPSBVTlNBRkUuZ2V0Qnl0ZShieXRlcywgb2Zmc2V0KyspOwotICAgICAgICAg
ICAgaWYgKG9mZnNldCA+PSBvZmZzZXRMaW1pdCkgewotICAgICAgICAgICAgICByZXR1cm4gaW5j
b21wbGV0ZVN0YXRlRm9yKGJ5dGUxLCBieXRlMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGJ5dGUzID0gKGJ5dGUpIChzdGF0ZSA+PiAxNik7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGlmIChieXRlMyA9PSAwKSB7Ci0gICAgICAgICAgICBieXRlMyA9
IFVOU0FGRS5nZXRCeXRlKGJ5dGVzLCBvZmZzZXQrKyk7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0
ID49IG9mZnNldExpbWl0KSB7Ci0gICAgICAgICAgICAgIHJldHVybiBpbmNvbXBsZXRlU3RhdGVG
b3IoYnl0ZTEsIGJ5dGUyLCBieXRlMyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0g
ICAgICAgICAgLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBzdGF0ZSA9PSBNQUxGT1JNRUQsIHRo
ZW4gYnl0ZTEgaXMgMHhGRiwKLSAgICAgICAgICAvLyB3aGljaCBuZXZlciBvY2N1cnMgaW4gd2Vs
bC1mb3JtZWQgVVRGLTgsIGFuZCBzbyB3ZSB3aWxsIHJldHVybgotICAgICAgICAgIC8vIE1BTEZP
Uk1FRCBhZ2FpbiBiZWxvdy4KLQotICAgICAgICAgIGlmIChieXRlMiA+IChieXRlKSAweEJGCi0g
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgMSA8PSBwbGFuZSA8PSAxNi4gIFRyaWNreSBvcHRp
bWl6ZWQgZm9ybSBvZjoKLSAgICAgICAgICAgICAgLy8gaWYgKGJ5dGUxID4gKGJ5dGUpIDB4RjQg
fHwKLSAgICAgICAgICAgICAgLy8gICAgIGJ5dGUxID09IChieXRlKSAweEYwICYmIGJ5dGUyIDwg
KGJ5dGUpIDB4OTAgfHwKLSAgICAgICAgICAgICAgLy8gICAgIGJ5dGUxID09IChieXRlKSAweEY0
ICYmIGJ5dGUyID4gKGJ5dGUpIDB4OEYpCi0gICAgICAgICAgICAgIHx8ICgoKGJ5dGUxIDw8IDI4
KSArIChieXRlMiAtIChieXRlKSAweDkwKSkgPj4gMzApICE9IDAKLSAgICAgICAgICAgICAgLy8g
Ynl0ZTMgdHJhaWxpbmctYnl0ZSB0ZXN0Ci0gICAgICAgICAgICAgIHx8IGJ5dGUzID4gKGJ5dGUp
IDB4QkYKLSAgICAgICAgICAgICAgLy8gYnl0ZTQgdHJhaWxpbmctYnl0ZSB0ZXN0Ci0gICAgICAg
ICAgICAgIHx8IFVOU0FGRS5nZXRCeXRlKGJ5dGVzLCBvZmZzZXQrKykgPiAoYnl0ZSkgMHhCRikg
ewotICAgICAgICAgICAgcmV0dXJuIE1BTEZPUk1FRDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLQotICAgICAgcmV0dXJuIHBhcnRpYWxJc1ZhbGlkVXRmOChieXRlcywgb2Zmc2V0
LCAoaW50KSAob2Zmc2V0TGltaXQgLSBvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBpbnQgcGFydGlhbElzVmFsaWRVdGY4RGlyZWN0KAotICAgICAgICBmaW5hbCBpbnQgc3Rh
dGUsIEJ5dGVCdWZmZXIgYnVmZmVyLCBmaW5hbCBpbnQgaW5kZXgsIGZpbmFsIGludCBsaW1pdCkg
ewotICAgICAgaWYgKChpbmRleCB8IGxpbWl0IHwgYnVmZmVyLmxpbWl0KCkgLSBsaW1pdCkgPCAw
KSB7Ci0gICAgICAgIHRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oCi0g
ICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJidWZmZXIgbGltaXQ9JWQsIGluZGV4PSVkLCBsaW1p
dD0lZCIsIGJ1ZmZlci5saW1pdCgpLCBpbmRleCwgbGltaXQpKTsKLSAgICAgIH0KLSAgICAgIGxv
bmcgYWRkcmVzcyA9IGFkZHJlc3NPZmZzZXQoYnVmZmVyKSArIGluZGV4OwotICAgICAgZmluYWwg
bG9uZyBhZGRyZXNzTGltaXQgPSBhZGRyZXNzICsgKGxpbWl0IC0gaW5kZXgpOwotICAgICAgaWYg
KHN0YXRlICE9IENPTVBMRVRFKSB7Ci0gICAgICAgIC8vIFRoZSBwcmV2aW91cyBkZWNvZGluZyBv
cGVyYXRpb24gd2FzIGluY29tcGxldGUgKG9yIG1hbGZvcm1lZCkuCi0gICAgICAgIC8vIFdlIGxv
b2sgZm9yIGEgd2VsbC1mb3JtZWQgc2VxdWVuY2UgY29uc2lzdGluZyBvZiBieXRlcyBmcm9tCi0g
ICAgICAgIC8vIHRoZSBwcmV2aW91cyBkZWNvZGluZyBvcGVyYXRpb24gKHN0b3JlZCBpbiBzdGF0
ZSkgdG9nZXRoZXIKLSAgICAgICAgLy8gd2l0aCBieXRlcyBmcm9tIHRoZSBhcnJheSBzbGljZS4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gV2UgZXhwZWN0IHN1Y2ggInN0cmFkZGxlciBjaGFyYWN0
ZXJzIiB0byBiZSByYXJlLgotCi0gICAgICAgIGlmIChhZGRyZXNzID49IGFkZHJlc3NMaW1pdCkg
eyAvLyBObyBieXRlcz8gTm8gcHJvZ3Jlc3MuCi0gICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZmluYWwgaW50IGJ5dGUxID0gKGJ5dGUpIHN0YXRlOwotICAgICAg
ICAvLyBieXRlMSBpcyBuZXZlciBBU0NJSS4KLSAgICAgICAgaWYgKGJ5dGUxIDwgKGJ5dGUpIDB4
RTApIHsKLSAgICAgICAgICAvLyB0d28tYnl0ZSBmb3JtCi0KLSAgICAgICAgICAvLyBTaW11bHRh
bmVvdXNseSBjaGVja3MgZm9yIGlsbGVnYWwgdHJhaWxpbmctYnl0ZSBpbgotICAgICAgICAgIC8v
IGxlYWRpbmcgcG9zaXRpb24gYW5kIG92ZXJsb25nIDItYnl0ZSBmb3JtLgotICAgICAgICAgIGlm
IChieXRlMSA8IChieXRlKSAweEMyCi0gICAgICAgICAgICAgIC8vIGJ5dGUyIHRyYWlsaW5nLWJ5
dGUgdGVzdAotICAgICAgICAgICAgICB8fCBVTlNBRkUuZ2V0Qnl0ZShhZGRyZXNzKyspID4gKGJ5
dGUpIDB4QkYpIHsKLSAgICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7Ci0gICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKGJ5dGUxIDwgKGJ5dGUpIDB4RjApIHsKLSAgICAgICAgICAvLyB0
aHJlZS1ieXRlIGZvcm0KLQotICAgICAgICAgIC8vIEdldCBieXRlMiBmcm9tIHNhdmVkIHN0YXRl
IG9yIGFycmF5Ci0gICAgICAgICAgaW50IGJ5dGUyID0gKGJ5dGUpIH4oc3RhdGUgPj4gOCk7Ci0g
ICAgICAgICAgaWYgKGJ5dGUyID09IDApIHsKLSAgICAgICAgICAgIGJ5dGUyID0gVU5TQUZFLmdl
dEJ5dGUoYWRkcmVzcysrKTsKLSAgICAgICAgICAgIGlmIChhZGRyZXNzID49IGFkZHJlc3NMaW1p
dCkgewotICAgICAgICAgICAgICByZXR1cm4gaW5jb21wbGV0ZVN0YXRlRm9yKGJ5dGUxLCBieXRl
Mik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChieXRlMiA+IChi
eXRlKSAweEJGCi0gICAgICAgICAgICAgIC8vIG92ZXJsb25nPyA1IG1vc3Qgc2lnbmlmaWNhbnQg
Yml0cyBtdXN0IG5vdCBhbGwgYmUgemVybwotICAgICAgICAgICAgICB8fCAoYnl0ZTEgPT0gKGJ5
dGUpIDB4RTAgJiYgYnl0ZTIgPCAoYnl0ZSkgMHhBMCkKLSAgICAgICAgICAgICAgLy8gaWxsZWdh
bCBzdXJyb2dhdGUgY29kZXBvaW50PwotICAgICAgICAgICAgICB8fCAoYnl0ZTEgPT0gKGJ5dGUp
IDB4RUQgJiYgYnl0ZTIgPj0gKGJ5dGUpIDB4QTApCi0gICAgICAgICAgICAgIC8vIGJ5dGUzIHRy
YWlsaW5nLWJ5dGUgdGVzdAotICAgICAgICAgICAgICB8fCBVTlNBRkUuZ2V0Qnl0ZShhZGRyZXNz
KyspID4gKGJ5dGUpIDB4QkYpIHsKLSAgICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7Ci0gICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIGZvdXItYnl0ZSBmb3JtCi0K
LSAgICAgICAgICAvLyBHZXQgYnl0ZTIgYW5kIGJ5dGUzIGZyb20gc2F2ZWQgc3RhdGUgb3IgYXJy
YXkKLSAgICAgICAgICBpbnQgYnl0ZTIgPSAoYnl0ZSkgfihzdGF0ZSA+PiA4KTsKLSAgICAgICAg
ICBpbnQgYnl0ZTMgPSAwOwotICAgICAgICAgIGlmIChieXRlMiA9PSAwKSB7Ci0gICAgICAgICAg
ICBieXRlMiA9IFVOU0FGRS5nZXRCeXRlKGFkZHJlc3MrKyk7Ci0gICAgICAgICAgICBpZiAoYWRk
cmVzcyA+PSBhZGRyZXNzTGltaXQpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIGluY29tcGxldGVT
dGF0ZUZvcihieXRlMSwgYnl0ZTIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBieXRlMyA9IChieXRlKSAoc3RhdGUgPj4gMTYpOwotICAgICAgICAgIH0K
LSAgICAgICAgICBpZiAoYnl0ZTMgPT0gMCkgewotICAgICAgICAgICAgYnl0ZTMgPSBVTlNBRkUu
Z2V0Qnl0ZShhZGRyZXNzKyspOwotICAgICAgICAgICAgaWYgKGFkZHJlc3MgPj0gYWRkcmVzc0xp
bWl0KSB7Ci0gICAgICAgICAgICAgIHJldHVybiBpbmNvbXBsZXRlU3RhdGVGb3IoYnl0ZTEsIGJ5
dGUyLCBieXRlMyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8g
SWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBzdGF0ZSA9PSBNQUxGT1JNRUQsIHRoZW4gYnl0ZTEgaXMg
MHhGRiwKLSAgICAgICAgICAvLyB3aGljaCBuZXZlciBvY2N1cnMgaW4gd2VsbC1mb3JtZWQgVVRG
LTgsIGFuZCBzbyB3ZSB3aWxsIHJldHVybgotICAgICAgICAgIC8vIE1BTEZPUk1FRCBhZ2FpbiBi
ZWxvdy4KLQotICAgICAgICAgIGlmIChieXRlMiA+IChieXRlKSAweEJGCi0gICAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgMSA8PSBwbGFuZSA8PSAxNi4gIFRyaWNreSBvcHRpbWl6ZWQgZm9ybSBv
ZjoKLSAgICAgICAgICAgICAgLy8gaWYgKGJ5dGUxID4gKGJ5dGUpIDB4RjQgfHwKLSAgICAgICAg
ICAgICAgLy8gICAgIGJ5dGUxID09IChieXRlKSAweEYwICYmIGJ5dGUyIDwgKGJ5dGUpIDB4OTAg
fHwKLSAgICAgICAgICAgICAgLy8gICAgIGJ5dGUxID09IChieXRlKSAweEY0ICYmIGJ5dGUyID4g
KGJ5dGUpIDB4OEYpCi0gICAgICAgICAgICAgIHx8ICgoKGJ5dGUxIDw8IDI4KSArIChieXRlMiAt
IChieXRlKSAweDkwKSkgPj4gMzApICE9IDAKLSAgICAgICAgICAgICAgLy8gYnl0ZTMgdHJhaWxp
bmctYnl0ZSB0ZXN0Ci0gICAgICAgICAgICAgIHx8IGJ5dGUzID4gKGJ5dGUpIDB4QkYKLSAgICAg
ICAgICAgICAgLy8gYnl0ZTQgdHJhaWxpbmctYnl0ZSB0ZXN0Ci0gICAgICAgICAgICAgIHx8IFVO
U0FGRS5nZXRCeXRlKGFkZHJlc3MrKykgPiAoYnl0ZSkgMHhCRikgewotICAgICAgICAgICAgcmV0
dXJuIE1BTEZPUk1FRDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAg
cmV0dXJuIHBhcnRpYWxJc1ZhbGlkVXRmOChhZGRyZXNzLCAoaW50KSAoYWRkcmVzc0xpbWl0IC0g
YWRkcmVzcykpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGludCBlbmNvZGVVdGY4KGZp
bmFsIENoYXJTZXF1ZW5jZSBpbiwgZmluYWwgYnl0ZVtdIG91dCwgZmluYWwgaW50IG9mZnNldCwg
ZmluYWwgaW50IGxlbmd0aCkgewotICAgICAgbG9uZyBvdXRJeCA9IEFSUkFZX0JBU0VfT0ZGU0VU
ICsgb2Zmc2V0OwotICAgICAgZmluYWwgbG9uZyBvdXRMaW1pdCA9IG91dEl4ICsgbGVuZ3RoOwot
ICAgICAgZmluYWwgaW50IGluTGltaXQgPSBpbi5sZW5ndGgoKTsKLSAgICAgIGlmIChpbkxpbWl0
ID4gbGVuZ3RoIHx8IG91dC5sZW5ndGggLSBsZW5ndGggPCBvZmZzZXQpIHsKLSAgICAgICAgLy8g
Tm90IGV2ZW4gZW5vdWdoIHJvb20gZm9yIGFuIEFTQ0lJLWVuY29kZWQgc3RyaW5nLgotICAgICAg
ICB0aHJvdyBuZXcgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKAotICAgICAgICAgICAg
IkZhaWxlZCB3cml0aW5nICIgKyBpbi5jaGFyQXQoaW5MaW1pdCAtIDEpICsgIiBhdCBpbmRleCAi
ICsgKG9mZnNldCArIGxlbmd0aCkpOwotICAgICAgfQotCi0gICAgICAvLyBEZXNpZ25lZCB0byB0
YWtlIGFkdmFudGFnZSBvZgotICAgICAgLy8gaHR0cHM6Ly93aWtpcy5vcmFjbGUuY29tL2Rpc3Bs
YXkvSG90U3BvdEludGVybmFscy9SYW5nZUNoZWNrRWxpbWluYXRpb24KLSAgICAgIGludCBpbkl4
ID0gMDsKLSAgICAgIGZvciAoY2hhciBjOyBpbkl4IDwgaW5MaW1pdCAmJiAoYyA9IGluLmNoYXJB
dChpbkl4KSkgPCAweDgwOyArK2luSXgpIHsKLSAgICAgICAgVU5TQUZFLnB1dEJ5dGUob3V0LCBv
dXRJeCsrLCAoYnl0ZSkgYyk7Ci0gICAgICB9Ci0gICAgICBpZiAoaW5JeCA9PSBpbkxpbWl0KSB7
Ci0gICAgICAgIC8vIFdlJ3JlIGRvbmUsIGl0IHdhcyBBU0NJSSBlbmNvZGVkLgotICAgICAgICBy
ZXR1cm4gKGludCkgKG91dEl4IC0gQVJSQVlfQkFTRV9PRkZTRVQpOwotICAgICAgfQotCi0gICAg
ICBmb3IgKGNoYXIgYzsgaW5JeCA8IGluTGltaXQ7ICsraW5JeCkgewotICAgICAgICBjID0gaW4u
Y2hhckF0KGluSXgpOwotICAgICAgICBpZiAoYyA8IDB4ODAgJiYgb3V0SXggPCBvdXRMaW1pdCkg
ewotICAgICAgICAgIFVOU0FGRS5wdXRCeXRlKG91dCwgb3V0SXgrKywgKGJ5dGUpIGMpOwotICAg
ICAgICB9IGVsc2UgaWYgKGMgPCAweDgwMCAmJiBvdXRJeCA8PSBvdXRMaW1pdCAtIDJMKSB7IC8v
IDExIGJpdHMsIHR3byBVVEYtOCBieXRlcwotICAgICAgICAgIFVOU0FGRS5wdXRCeXRlKG91dCwg
b3V0SXgrKywgKGJ5dGUpICgoMHhGIDw8IDYpIHwgKGMgPj4+IDYpKSk7Ci0gICAgICAgICAgVU5T
QUZFLnB1dEJ5dGUob3V0LCBvdXRJeCsrLCAoYnl0ZSkgKDB4ODAgfCAoMHgzRiAmIGMpKSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoKGMgPCBNSU5fU1VSUk9HQVRFIHx8IE1BWF9TVVJST0dBVEUgPCBj
KSAmJiBvdXRJeCA8PSBvdXRMaW1pdCAtIDNMKSB7Ci0gICAgICAgICAgLy8gTWF4aW11bSBzaW5n
bGUtY2hhciBjb2RlIHBvaW50IGlzIDB4RkZGRiwgMTYgYml0cywgdGhyZWUgVVRGLTggYnl0ZXMK
LSAgICAgICAgICBVTlNBRkUucHV0Qnl0ZShvdXQsIG91dEl4KyssIChieXRlKSAoKDB4RiA8PCA1
KSB8IChjID4+PiAxMikpKTsKLSAgICAgICAgICBVTlNBRkUucHV0Qnl0ZShvdXQsIG91dEl4Kyss
IChieXRlKSAoMHg4MCB8ICgweDNGICYgKGMgPj4+IDYpKSkpOwotICAgICAgICAgIFVOU0FGRS5w
dXRCeXRlKG91dCwgb3V0SXgrKywgKGJ5dGUpICgweDgwIHwgKDB4M0YgJiBjKSkpOwotICAgICAg
ICB9IGVsc2UgaWYgKG91dEl4IDw9IG91dExpbWl0IC0gNEwpIHsKLSAgICAgICAgICAvLyBNaW5p
bXVtIGNvZGUgcG9pbnQgcmVwcmVzZW50ZWQgYnkgYSBzdXJyb2dhdGUgcGFpciBpcyAweDEwMDAw
LCAxNyBiaXRzLCBmb3VyIFVURi04Ci0gICAgICAgICAgLy8gYnl0ZXMKLSAgICAgICAgICBmaW5h
bCBjaGFyIGxvdzsKLSAgICAgICAgICBpZiAoaW5JeCArIDEgPT0gaW5MaW1pdCB8fCAhaXNTdXJy
b2dhdGVQYWlyKGMsIChsb3cgPSBpbi5jaGFyQXQoKytpbkl4KSkpKSB7Ci0gICAgICAgICAgICB0
aHJvdyBuZXcgVW5wYWlyZWRTdXJyb2dhdGVFeGNlcHRpb24oKGluSXggLSAxKSwgaW5MaW1pdCk7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGludCBjb2RlUG9pbnQgPSB0b0NvZGVQb2ludChjLCBs
b3cpOwotICAgICAgICAgIFVOU0FGRS5wdXRCeXRlKG91dCwgb3V0SXgrKywgKGJ5dGUpICgoMHhG
IDw8IDQpIHwgKGNvZGVQb2ludCA+Pj4gMTgpKSk7Ci0gICAgICAgICAgVU5TQUZFLnB1dEJ5dGUo
b3V0LCBvdXRJeCsrLCAoYnl0ZSkgKDB4ODAgfCAoMHgzRiAmIChjb2RlUG9pbnQgPj4+IDEyKSkp
KTsKLSAgICAgICAgICBVTlNBRkUucHV0Qnl0ZShvdXQsIG91dEl4KyssIChieXRlKSAoMHg4MCB8
ICgweDNGICYgKGNvZGVQb2ludCA+Pj4gNikpKSk7Ci0gICAgICAgICAgVU5TQUZFLnB1dEJ5dGUo
b3V0LCBvdXRJeCsrLCAoYnl0ZSkgKDB4ODAgfCAoMHgzRiAmIGNvZGVQb2ludCkpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoKE1JTl9TVVJST0dBVEUgPD0gYyAmJiBjIDw9IE1B
WF9TVVJST0dBVEUpCi0gICAgICAgICAgICAgICYmIChpbkl4ICsgMSA9PSBpbkxpbWl0IHx8ICFp
c1N1cnJvZ2F0ZVBhaXIoYywgaW4uY2hhckF0KGluSXggKyAxKSkpKSB7Ci0gICAgICAgICAgICAv
LyBXZSBhcmUgc3Vycm9nYXRlcyBhbmQgd2UncmUgbm90IGEgc3Vycm9nYXRlIHBhaXIuCi0gICAg
ICAgICAgICB0aHJvdyBuZXcgVW5wYWlyZWRTdXJyb2dhdGVFeGNlcHRpb24oaW5JeCwgaW5MaW1p
dCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIG91
dHB1dCBidWZmZXIuCi0gICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4
Y2VwdGlvbigiRmFpbGVkIHdyaXRpbmcgIiArIGMgKyAiIGF0IGluZGV4ICIgKyBvdXRJeCk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gQWxsIGJ5dGVzIGhhdmUgYmVlbiBlbmNvZGVk
LgotICAgICAgcmV0dXJuIChpbnQpIChvdXRJeCAtIEFSUkFZX0JBU0VfT0ZGU0VUKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICB2b2lkIGVuY29kZVV0ZjhEaXJlY3QoQ2hhclNlcXVlbmNl
IGluLCBCeXRlQnVmZmVyIG91dCkgewotICAgICAgZmluYWwgbG9uZyBhZGRyZXNzID0gYWRkcmVz
c09mZnNldChvdXQpOwotICAgICAgbG9uZyBvdXRJeCA9IGFkZHJlc3MgKyBvdXQucG9zaXRpb24o
KTsKLSAgICAgIGZpbmFsIGxvbmcgb3V0TGltaXQgPSBhZGRyZXNzICsgb3V0LmxpbWl0KCk7Ci0g
ICAgICBmaW5hbCBpbnQgaW5MaW1pdCA9IGluLmxlbmd0aCgpOwotICAgICAgaWYgKGluTGltaXQg
PiBvdXRMaW1pdCAtIG91dEl4KSB7Ci0gICAgICAgIC8vIE5vdCBldmVuIGVub3VnaCByb29tIGZv
ciBhbiBBU0NJSS1lbmNvZGVkIHN0cmluZy4KLSAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhP
dXRPZkJvdW5kc0V4Y2VwdGlvbigKLSAgICAgICAgICAgICJGYWlsZWQgd3JpdGluZyAiICsgaW4u
Y2hhckF0KGluTGltaXQgLSAxKSArICIgYXQgaW5kZXggIiArIG91dC5saW1pdCgpKTsKLSAgICAg
IH0KLQotICAgICAgLy8gRGVzaWduZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YKLSAgICAgIC8vIGh0
dHBzOi8vd2lraXMub3JhY2xlLmNvbS9kaXNwbGF5L0hvdFNwb3RJbnRlcm5hbHMvUmFuZ2VDaGVj
a0VsaW1pbmF0aW9uCi0gICAgICBpbnQgaW5JeCA9IDA7Ci0gICAgICBmb3IgKGNoYXIgYzsgaW5J
eCA8IGluTGltaXQgJiYgKGMgPSBpbi5jaGFyQXQoaW5JeCkpIDwgMHg4MDsgKytpbkl4KSB7Ci0g
ICAgICAgIFVOU0FGRS5wdXRCeXRlKG91dEl4KyssIChieXRlKSBjKTsKLSAgICAgIH0KLSAgICAg
IGlmIChpbkl4ID09IGluTGltaXQpIHsKLSAgICAgICAgLy8gV2UncmUgZG9uZSwgaXQgd2FzIEFT
Q0lJIGVuY29kZWQuCi0gICAgICAgIG91dC5wb3NpdGlvbigoaW50KSAob3V0SXggLSBhZGRyZXNz
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgZm9yIChjaGFyIGM7IGluSXgg
PCBpbkxpbWl0OyArK2luSXgpIHsKLSAgICAgICAgYyA9IGluLmNoYXJBdChpbkl4KTsKLSAgICAg
ICAgaWYgKGMgPCAweDgwICYmIG91dEl4IDwgb3V0TGltaXQpIHsKLSAgICAgICAgICBVTlNBRkUu
cHV0Qnl0ZShvdXRJeCsrLCAoYnl0ZSkgYyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4ODAw
ICYmIG91dEl4IDw9IG91dExpbWl0IC0gMkwpIHsgLy8gMTEgYml0cywgdHdvIFVURi04IGJ5dGVz
Ci0gICAgICAgICAgVU5TQUZFLnB1dEJ5dGUob3V0SXgrKywgKGJ5dGUpICgoMHhGIDw8IDYpIHwg
KGMgPj4+IDYpKSk7Ci0gICAgICAgICAgVU5TQUZFLnB1dEJ5dGUob3V0SXgrKywgKGJ5dGUpICgw
eDgwIHwgKDB4M0YgJiBjKSkpOwotICAgICAgICB9IGVsc2UgaWYgKChjIDwgTUlOX1NVUlJPR0FU
RSB8fCBNQVhfU1VSUk9HQVRFIDwgYykgJiYgb3V0SXggPD0gb3V0TGltaXQgLSAzTCkgewotICAg
ICAgICAgIC8vIE1heGltdW0gc2luZ2xlLWNoYXIgY29kZSBwb2ludCBpcyAweEZGRkYsIDE2IGJp
dHMsIHRocmVlIFVURi04IGJ5dGVzCi0gICAgICAgICAgVU5TQUZFLnB1dEJ5dGUob3V0SXgrKywg
KGJ5dGUpICgoMHhGIDw8IDUpIHwgKGMgPj4+IDEyKSkpOwotICAgICAgICAgIFVOU0FGRS5wdXRC
eXRlKG91dEl4KyssIChieXRlKSAoMHg4MCB8ICgweDNGICYgKGMgPj4+IDYpKSkpOwotICAgICAg
ICAgIFVOU0FGRS5wdXRCeXRlKG91dEl4KyssIChieXRlKSAoMHg4MCB8ICgweDNGICYgYykpKTsK
LSAgICAgICAgfSBlbHNlIGlmIChvdXRJeCA8PSBvdXRMaW1pdCAtIDRMKSB7Ci0gICAgICAgICAg
Ly8gTWluaW11bSBjb2RlIHBvaW50IHJlcHJlc2VudGVkIGJ5IGEgc3Vycm9nYXRlIHBhaXIgaXMg
MHgxMDAwMCwgMTcgYml0cywgZm91ciBVVEYtOAotICAgICAgICAgIC8vIGJ5dGVzCi0gICAgICAg
ICAgZmluYWwgY2hhciBsb3c7Ci0gICAgICAgICAgaWYgKGluSXggKyAxID09IGluTGltaXQgfHwg
IWlzU3Vycm9nYXRlUGFpcihjLCAobG93ID0gaW4uY2hhckF0KCsraW5JeCkpKSkgewotICAgICAg
ICAgICAgdGhyb3cgbmV3IFVucGFpcmVkU3Vycm9nYXRlRXhjZXB0aW9uKChpbkl4IC0gMSksIGlu
TGltaXQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpbnQgY29kZVBvaW50ID0gdG9Db2RlUG9p
bnQoYywgbG93KTsKLSAgICAgICAgICBVTlNBRkUucHV0Qnl0ZShvdXRJeCsrLCAoYnl0ZSkgKCgw
eEYgPDwgNCkgfCAoY29kZVBvaW50ID4+PiAxOCkpKTsKLSAgICAgICAgICBVTlNBRkUucHV0Qnl0
ZShvdXRJeCsrLCAoYnl0ZSkgKDB4ODAgfCAoMHgzRiAmIChjb2RlUG9pbnQgPj4+IDEyKSkpKTsK
LSAgICAgICAgICBVTlNBRkUucHV0Qnl0ZShvdXRJeCsrLCAoYnl0ZSkgKDB4ODAgfCAoMHgzRiAm
IChjb2RlUG9pbnQgPj4+IDYpKSkpOwotICAgICAgICAgIFVOU0FGRS5wdXRCeXRlKG91dEl4Kyss
IChieXRlKSAoMHg4MCB8ICgweDNGICYgY29kZVBvaW50KSkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGlmICgoTUlOX1NVUlJPR0FURSA8PSBjICYmIGMgPD0gTUFYX1NVUlJPR0FURSkK
LSAgICAgICAgICAgICAgJiYgKGluSXggKyAxID09IGluTGltaXQgfHwgIWlzU3Vycm9nYXRlUGFp
cihjLCBpbi5jaGFyQXQoaW5JeCArIDEpKSkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBzdXJy
b2dhdGVzIGFuZCB3ZSdyZSBub3QgYSBzdXJyb2dhdGUgcGFpci4KLSAgICAgICAgICAgIHRocm93
IG5ldyBVbnBhaXJlZFN1cnJvZ2F0ZUV4Y2VwdGlvbihpbkl4LCBpbkxpbWl0KTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgLy8gTm90IGVub3VnaCBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4K
LSAgICAgICAgICB0aHJvdyBuZXcgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJGYWls
ZWQgd3JpdGluZyAiICsgYyArICIgYXQgaW5kZXggIiArIG91dEl4KTsKLSAgICAgICAgfQotICAg
ICAgfQotCi0gICAgICAvLyBBbGwgYnl0ZXMgaGF2ZSBiZWVuIGVuY29kZWQuCi0gICAgICBvdXQu
cG9zaXRpb24oKGludCkgKG91dEl4IC0gYWRkcmVzcykpOwotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIENvdW50cyAoYXBwcm94aW1hdGVseSkgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBBU0NJ
SSBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuCi0gICAgICogcG9zaXRpb24sIHVz
aW5nIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QgYXZhaWxhYmxlIHRvIHRoZSBwbGF0Zm9ybS4K
LSAgICAgKgotICAgICAqIEBwYXJhbSBieXRlcyB0aGUgYXJyYXkgY29udGFpbmluZyB0aGUgY2hh
cmFjdGVyIHNlcXVlbmNlCi0gICAgICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IHBvc2l0aW9u
IG9mIHRoZSBpbmRleCAoc2FtZSBhcyBpbmRleCArIGFycmF5QmFzZU9mZnNldCkKLSAgICAgKiBA
cGFyYW0gbWF4Q2hhcnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY291bnQK
LSAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgQVNDSUkgY2hhcmFjdGVycyBmb3VuZC4gVGhl
IHN0b3BwaW5nIHBvc2l0aW9uIHdpbGwgYmUgYXQgb3IKLSAgICAgKiBiZWZvcmUgdGhlIGZpcnN0
IG5vbi1BU0NJSSBieXRlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCB1bnNhZmVF
c3RpbWF0ZUNvbnNlY3V0aXZlQXNjaWkoCi0gICAgICAgIGJ5dGVbXSBieXRlcywgbG9uZyBvZmZz
ZXQsIGZpbmFsIGludCBtYXhDaGFycykgewotICAgICAgaW50IHJlbWFpbmluZyA9IG1heENoYXJz
OwotICAgICAgaWYgKHJlbWFpbmluZyA8IFVOU0FGRV9DT1VOVF9BU0NJSV9USFJFU0hPTEQpIHsK
LSAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHdpdGggc21hbGwgc3RyaW5ncy4KLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFJlYWQgYnl0ZXMgdW50aWwgOC1ieXRlIGFsaWdu
ZWQgc28gdGhhdCB3ZSBjYW4gcmVhZCBsb25ncyBpbiB0aGUgbG9vcCBiZWxvdy4KLSAgICAgIC8v
IEJ5dGUgYXJyYXlzIGFyZSBhbHJlYWR5IGVpdGhlciA4IG9yIDE2LWJ5dGUgYWxpZ25lZCwgc28g
d2UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0Ci0gICAgICAvLyB0aGUgaW5kZXggKHJlbGF0
aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgYXJyYXkpIGlzIGFsc28gOC1ieXRlIGFsaWduZWQuIFdl
IGRvIHRoaXMgYnkKLSAgICAgIC8vIEFORGluZyB0aGUgaW5kZXggd2l0aCA3IHRvIGRldGVybWlu
ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbmVlZCB0byBiZSByZWFkIGJlZm9yZQotICAgICAg
Ly8gd2UncmUgOC1ieXRlIGFsaWduZWQuCi0gICAgICBmaW5hbCBpbnQgdW5hbGlnbmVkID0gKGlu
dCkgb2Zmc2V0ICYgNzsKLSAgICAgIGZvciAoaW50IGogPSB1bmFsaWduZWQ7IGogPiAwOyBqLS0p
IHsKLSAgICAgICAgaWYgKFVOU0FGRS5nZXRCeXRlKGJ5dGVzLCBvZmZzZXQrKykgPCAwKSB7Ci0g
ICAgICAgICAgcmV0dXJuIHVuYWxpZ25lZCAtIGo7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAg
ICAgLy8gVGhpcyBzaW1wbGUgbG9vcCBzdG9wcyB3aGVuIHdlIGVuY291bnRlciBhIGJ5dGUgPj0g
MHg4MCAoaS5lLiBub24tQVNDSUkpLgotICAgICAgLy8gVG8gc3BlZWQgdGhpbmdzIHVwIGZ1cnRo
ZXIsIHdlJ3JlIHJlYWRpbmcgbG9uZ3MgaW5zdGVhZCBvZiBieXRlcyBzbyB3ZSB1c2UgYSBtYXNr
IHRvCi0gICAgICAvLyBkZXRlcm1pbmUgaWYgYW55IGJ5dGUgaW4gdGhlIGN1cnJlbnQgbG9uZyBp
cyBub24tQVNDSUkuCi0gICAgICByZW1haW5pbmcgLT0gdW5hbGlnbmVkOwotICAgICAgZm9yICg7
IHJlbWFpbmluZyA+PSA4ICYmIChVTlNBRkUuZ2V0TG9uZyhieXRlcywgb2Zmc2V0KSAmIEFTQ0lJ
X01BU0tfTE9ORykgPT0gMDsKLSAgICAgICAgICBvZmZzZXQgKz0gOCwgcmVtYWluaW5nIC09IDgp
IHt9Ci0gICAgICByZXR1cm4gbWF4Q2hhcnMgLSByZW1haW5pbmc7Ci0gICAgfQotCi0gICAgLyoq
Ci0gICAgICogU2FtZSBhcyB7QGxpbmsgVXRmOCNlc3RpbWF0ZUNvbnNlY3V0aXZlQXNjaWkoQnl0
ZUJ1ZmZlciwgaW50LCBpbnQpfSBleGNlcHQgdGhhdCBpdCB1c2VzIHRoZQotICAgICAqIG1vc3Qg
ZWZmaWNpZW50IG1ldGhvZCBhdmFpbGFibGUgdG8gdGhlIHBsYXRmb3JtLgotICAgICAqLwotICAg
IHByaXZhdGUgc3RhdGljIGludCB1bnNhZmVFc3RpbWF0ZUNvbnNlY3V0aXZlQXNjaWkobG9uZyBh
ZGRyZXNzLCBmaW5hbCBpbnQgbWF4Q2hhcnMpIHsKLSAgICAgIGludCByZW1haW5pbmcgPSBtYXhD
aGFyczsKLSAgICAgIGlmIChyZW1haW5pbmcgPCBVTlNBRkVfQ09VTlRfQVNDSUlfVEhSRVNIT0xE
KSB7Ci0gICAgICAgIC8vIERvbid0IGJvdGhlciB3aXRoIHNtYWxsIHN0cmluZ3MuCi0gICAgICAg
IHJldHVybiAwOwotICAgICAgfQotCi0gICAgICAvLyBSZWFkIGJ5dGVzIHVudGlsIDgtYnl0ZSBh
bGlnbmVkIHNvIHRoYXQgd2UgY2FuIHJlYWQgbG9uZ3MgaW4gdGhlIGxvb3AgYmVsb3cuCi0gICAg
ICAvLyBXZSBkbyB0aGlzIGJ5IEFORGluZyB0aGUgYWRkcmVzcyB3aXRoIDcgdG8gZGV0ZXJtaW5l
IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvCi0gICAgICAvLyBiZSByZWFkIGJlZm9y
ZSB3ZSdyZSA4LWJ5dGUgYWxpZ25lZC4KLSAgICAgIGZpbmFsIGludCB1bmFsaWduZWQgPSAoaW50
KSBhZGRyZXNzICYgNzsKLSAgICAgIGZvciAoaW50IGogPSB1bmFsaWduZWQ7IGogPiAwOyBqLS0p
IHsKLSAgICAgICAgaWYgKFVOU0FGRS5nZXRCeXRlKGFkZHJlc3MrKykgPCAwKSB7Ci0gICAgICAg
ICAgcmV0dXJuIHVuYWxpZ25lZCAtIGo7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8g
VGhpcyBzaW1wbGUgbG9vcCBzdG9wcyB3aGVuIHdlIGVuY291bnRlciBhIGJ5dGUgPj0gMHg4MCAo
aS5lLiBub24tQVNDSUkpLgotICAgICAgLy8gVG8gc3BlZWQgdGhpbmdzIHVwIGZ1cnRoZXIsIHdl
J3JlIHJlYWRpbmcgbG9uZ3MgaW5zdGVhZCBvZiBieXRlcyBzbyB3ZSB1c2UgYSBtYXNrIHRvCi0g
ICAgICAvLyBkZXRlcm1pbmUgaWYgYW55IGJ5dGUgaW4gdGhlIGN1cnJlbnQgbG9uZyBpcyBub24t
QVNDSUkuCi0gICAgICByZW1haW5pbmcgLT0gdW5hbGlnbmVkOwotICAgICAgZm9yICg7IHJlbWFp
bmluZyA+PSA4ICYmIChVTlNBRkUuZ2V0TG9uZyhhZGRyZXNzKSAmIEFTQ0lJX01BU0tfTE9ORykg
PT0gMDsKLSAgICAgICAgICBhZGRyZXNzICs9IDgsIHJlbWFpbmluZyAtPSA4KSB7fQotICAgICAg
cmV0dXJuIG1heENoYXJzIC0gcmVtYWluaW5nOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGlj
IGludCBwYXJ0aWFsSXNWYWxpZFV0ZjgoZmluYWwgYnl0ZVtdIGJ5dGVzLCBsb25nIG9mZnNldCwg
aW50IHJlbWFpbmluZykgewotICAgICAgLy8gU2tpcCBwYXN0IEFTQ0lJIGNoYXJhY3RlcnMgYXMg
cXVpY2tseSBhcyBwb3NzaWJsZS4gCi0gICAgICBmaW5hbCBpbnQgc2tpcHBlZCA9IHVuc2FmZUVz
dGltYXRlQ29uc2VjdXRpdmVBc2NpaShieXRlcywgb2Zmc2V0LCByZW1haW5pbmcpOwotICAgICAg
cmVtYWluaW5nIC09IHNraXBwZWQ7Ci0gICAgICBvZmZzZXQgKz0gc2tpcHBlZDsKLQotICAgICAg
Zm9yICg7OykgewotICAgICAgICAvLyBPcHRpbWl6ZSBmb3IgaW50ZXJpb3IgcnVucyBvZiBBU0NJ
SSBieXRlcy4KLSAgICAgICAgLy8gVE9ETyhuYXRoYW5taXR0bGVyKTogQ29uc2lkZXIgY2hlY2tp
bmcgOCBieXRlcyBhdCBhIHRpbWUgYWZ0ZXIgc29tZSB0aHJlc2hvbGQ/Ci0gICAgICAgIC8vIE1h
eWJlIGFmdGVyIHNlZWluZyBhIGZldyBpbiBhIHJvdyB0aGF0IGFyZSBBU0NJSSwgZ28gYmFjayB0
byBmYXN0IG1vZGU/Ci0gICAgICAgIGludCBieXRlMSA9IDA7Ci0gICAgICAgIGZvciAoOyByZW1h
aW5pbmcgPiAwICYmIChieXRlMSA9IFVOU0FGRS5nZXRCeXRlKGJ5dGVzLCBvZmZzZXQrKykpID49
IDA7IC0tcmVtYWluaW5nKSB7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAw
KSB7Ci0gICAgICAgICAgcmV0dXJuIENPTVBMRVRFOwotICAgICAgICB9Ci0gICAgICAgIHJlbWFp
bmluZy0tOwotCi0gICAgICAgIC8vIElmIHdlJ3JlIGhlcmUgYnl0ZTEgaXMgbm90IEFTQ0lJLiBP
bmx5IG5lZWQgdG8gaGFuZGxlIDItNCBieXRlIGZvcm1zLgotICAgICAgICBpZiAoYnl0ZTEgPCAo
Ynl0ZSkgMHhFMCkgewotICAgICAgICAgIC8vIFR3by1ieXRlIGZvcm0gKDExMHh4eHh4IDEweHh4
eHh4KQotICAgICAgICAgIGlmIChyZW1haW5pbmcgPT0gMCkgewotICAgICAgICAgICAgLy8gSW5j
b21wbGV0ZSBzZXF1ZW5jZQotICAgICAgICAgICAgcmV0dXJuIGJ5dGUxOwotICAgICAgICAgIH0K
LSAgICAgICAgICByZW1haW5pbmctLTsKLQotICAgICAgICAgIC8vIFNpbXVsdGFuZW91c2x5IGNo
ZWNrcyBmb3IgaWxsZWdhbCB0cmFpbGluZy1ieXRlIGluCi0gICAgICAgICAgLy8gbGVhZGluZyBw
b3NpdGlvbiBhbmQgb3ZlcmxvbmcgMi1ieXRlIGZvcm0uCi0gICAgICAgICAgaWYgKGJ5dGUxIDwg
KGJ5dGUpIDB4QzIKLSAgICAgICAgICAgICAgfHwgVU5TQUZFLmdldEJ5dGUoYnl0ZXMsIG9mZnNl
dCsrKSA+IChieXRlKSAweEJGKSB7Ci0gICAgICAgICAgICByZXR1cm4gTUFMRk9STUVEOwotICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChieXRlMSA8IChieXRlKSAweEYwKSB7Ci0gICAg
ICAgICAgLy8gVGhyZWUtYnl0ZSBmb3JtICgxMTEweHh4eCAxMHh4eHh4eCAxMHh4eHh4eCkKLSAg
ICAgICAgICBpZiAocmVtYWluaW5nIDwgMikgewotICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBz
ZXF1ZW5jZQotICAgICAgICAgICAgcmV0dXJuIHVuc2FmZUluY29tcGxldGVTdGF0ZUZvcihieXRl
cywgYnl0ZTEsIG9mZnNldCwgcmVtYWluaW5nKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVt
YWluaW5nIC09IDI7Ci0KLSAgICAgICAgICBmaW5hbCBpbnQgYnl0ZTI7Ci0gICAgICAgICAgaWYg
KChieXRlMiA9IFVOU0FGRS5nZXRCeXRlKGJ5dGVzLCBvZmZzZXQrKykpID4gKGJ5dGUpIDB4QkYK
LSAgICAgICAgICAgICAgLy8gb3Zlcmxvbmc/IDUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG11c3Qg
bm90IGFsbCBiZSB6ZXJvCi0gICAgICAgICAgICAgIHx8IChieXRlMSA9PSAoYnl0ZSkgMHhFMCAm
JiBieXRlMiA8IChieXRlKSAweEEwKQotICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgaWxsZWdh
bCBzdXJyb2dhdGUgY29kZXBvaW50cwotICAgICAgICAgICAgICB8fCAoYnl0ZTEgPT0gKGJ5dGUp
IDB4RUQgJiYgYnl0ZTIgPj0gKGJ5dGUpIDB4QTApCi0gICAgICAgICAgICAgIC8vIGJ5dGUzIHRy
YWlsaW5nLWJ5dGUgdGVzdAotICAgICAgICAgICAgICB8fCBVTlNBRkUuZ2V0Qnl0ZShieXRlcywg
b2Zmc2V0KyspID4gKGJ5dGUpIDB4QkYpIHsKLSAgICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7
Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIEZvdXItYnl0ZSBm
b3JtICgxMTEweHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eCkKLSAgICAgICAgICBpZiAo
cmVtYWluaW5nIDwgMykgewotICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBzZXF1ZW5jZQotICAg
ICAgICAgICAgcmV0dXJuIHVuc2FmZUluY29tcGxldGVTdGF0ZUZvcihieXRlcywgYnl0ZTEsIG9m
ZnNldCwgcmVtYWluaW5nKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVtYWluaW5nIC09IDM7
Ci0KLSAgICAgICAgICBmaW5hbCBpbnQgYnl0ZTI7Ci0gICAgICAgICAgaWYgKChieXRlMiA9IFVO
U0FGRS5nZXRCeXRlKGJ5dGVzLCBvZmZzZXQrKykpID4gKGJ5dGUpIDB4QkYKLSAgICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCAxIDw9IHBsYW5lIDw9IDE2LiAgVHJpY2t5IG9wdGltaXplZCBmb3Jt
IG9mOgotICAgICAgICAgICAgICAvLyBpZiAoYnl0ZTEgPiAoYnl0ZSkgMHhGNCB8fAotICAgICAg
ICAgICAgICAvLyAgICAgYnl0ZTEgPT0gKGJ5dGUpIDB4RjAgJiYgYnl0ZTIgPCAoYnl0ZSkgMHg5
MCB8fAotICAgICAgICAgICAgICAvLyAgICAgYnl0ZTEgPT0gKGJ5dGUpIDB4RjQgJiYgYnl0ZTIg
PiAoYnl0ZSkgMHg4RikKLSAgICAgICAgICAgICAgfHwgKCgoYnl0ZTEgPDwgMjgpICsgKGJ5dGUy
IC0gKGJ5dGUpIDB4OTApKSA+PiAzMCkgIT0gMAotICAgICAgICAgICAgICAvLyBieXRlMyB0cmFp
bGluZy1ieXRlIHRlc3QKLSAgICAgICAgICAgICAgfHwgVU5TQUZFLmdldEJ5dGUoYnl0ZXMsIG9m
ZnNldCsrKSA+IChieXRlKSAweEJGCi0gICAgICAgICAgICAgIC8vIGJ5dGU0IHRyYWlsaW5nLWJ5
dGUgdGVzdAotICAgICAgICAgICAgICB8fCBVTlNBRkUuZ2V0Qnl0ZShieXRlcywgb2Zmc2V0Kysp
ID4gKGJ5dGUpIDB4QkYpIHsKLSAgICAgICAgICAgIHJldHVybiBNQUxGT1JNRUQ7Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50
IHBhcnRpYWxJc1ZhbGlkVXRmOChsb25nIGFkZHJlc3MsIGludCByZW1haW5pbmcpIHsKLSAgICAg
IC8vIFNraXAgcGFzdCBBU0NJSSBjaGFyYWN0ZXJzIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCi0g
ICAgICBmaW5hbCBpbnQgc2tpcHBlZCA9IHVuc2FmZUVzdGltYXRlQ29uc2VjdXRpdmVBc2NpaShh
ZGRyZXNzLCByZW1haW5pbmcpOwotICAgICAgYWRkcmVzcyArPSBza2lwcGVkOwotICAgICAgcmVt
YWluaW5nIC09IHNraXBwZWQ7Ci0KLSAgICAgIGZvciAoOzspIHsKLSAgICAgICAgLy8gT3B0aW1p
emUgZm9yIGludGVyaW9yIHJ1bnMgb2YgQVNDSUkgYnl0ZXMuCi0gICAgICAgIC8vIFRPRE8obmF0
aGFubWl0dGxlcik6IENvbnNpZGVyIGNoZWNraW5nIDggYnl0ZXMgYXQgYSB0aW1lIGFmdGVyIHNv
bWUgdGhyZXNob2xkPwotICAgICAgICAvLyBNYXliZSBhZnRlciBzZWVpbmcgYSBmZXcgaW4gYSBy
b3cgdGhhdCBhcmUgQVNDSUksIGdvIGJhY2sgdG8gZmFzdCBtb2RlPwotICAgICAgICBpbnQgYnl0
ZTEgPSAwOwotICAgICAgICBmb3IgKDsgcmVtYWluaW5nID4gMCAmJiAoYnl0ZTEgPSBVTlNBRkUu
Z2V0Qnl0ZShhZGRyZXNzKyspKSA+PSAwOyAtLXJlbWFpbmluZykgewotICAgICAgICB9Ci0gICAg
ICAgIGlmIChyZW1haW5pbmcgPT0gMCkgewotICAgICAgICAgIHJldHVybiBDT01QTEVURTsKLSAg
ICAgICAgfQotICAgICAgICByZW1haW5pbmctLTsKLQotICAgICAgICBpZiAoYnl0ZTEgPCAoYnl0
ZSkgMHhFMCkgewotICAgICAgICAgIC8vIFR3by1ieXRlIGZvcm0KLQotICAgICAgICAgIGlmIChy
ZW1haW5pbmcgPT0gMCkgewotICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBzZXF1ZW5jZQotICAg
ICAgICAgICAgcmV0dXJuIGJ5dGUxOwotICAgICAgICAgIH0KLSAgICAgICAgICByZW1haW5pbmct
LTsKLQotICAgICAgICAgIC8vIFNpbXVsdGFuZW91c2x5IGNoZWNrcyBmb3IgaWxsZWdhbCB0cmFp
bGluZy1ieXRlIGluCi0gICAgICAgICAgLy8gbGVhZGluZyBwb3NpdGlvbiBhbmQgb3Zlcmxvbmcg
Mi1ieXRlIGZvcm0uCi0gICAgICAgICAgaWYgKGJ5dGUxIDwgKGJ5dGUpIDB4QzIgfHwgVU5TQUZF
LmdldEJ5dGUoYWRkcmVzcysrKSA+IChieXRlKSAweEJGKSB7Ci0gICAgICAgICAgICByZXR1cm4g
TUFMRk9STUVEOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChieXRlMSA8IChieXRl
KSAweEYwKSB7Ci0gICAgICAgICAgLy8gVGhyZWUtYnl0ZSBmb3JtCi0KLSAgICAgICAgICBpZiAo
cmVtYWluaW5nIDwgMikgewotICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBzZXF1ZW5jZQotICAg
ICAgICAgICAgcmV0dXJuIHVuc2FmZUluY29tcGxldGVTdGF0ZUZvcihhZGRyZXNzLCBieXRlMSwg
cmVtYWluaW5nKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVtYWluaW5nIC09IDI7Ci0KLSAg
ICAgICAgICBmaW5hbCBieXRlIGJ5dGUyID0gVU5TQUZFLmdldEJ5dGUoYWRkcmVzcysrKTsKLSAg
ICAgICAgICBpZiAoYnl0ZTIgPiAoYnl0ZSkgMHhCRgotICAgICAgICAgICAgICAvLyBvdmVybG9u
Zz8gNSBtb3N0IHNpZ25pZmljYW50IGJpdHMgbXVzdCBub3QgYWxsIGJlIHplcm8KLSAgICAgICAg
ICAgICAgfHwgKGJ5dGUxID09IChieXRlKSAweEUwICYmIGJ5dGUyIDwgKGJ5dGUpIDB4QTApCi0g
ICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBpbGxlZ2FsIHN1cnJvZ2F0ZSBjb2RlcG9pbnRzCi0g
ICAgICAgICAgICAgIHx8IChieXRlMSA9PSAoYnl0ZSkgMHhFRCAmJiBieXRlMiA+PSAoYnl0ZSkg
MHhBMCkKLSAgICAgICAgICAgICAgLy8gYnl0ZTMgdHJhaWxpbmctYnl0ZSB0ZXN0Ci0gICAgICAg
ICAgICAgIHx8IFVOU0FGRS5nZXRCeXRlKGFkZHJlc3MrKykgPiAoYnl0ZSkgMHhCRikgewotICAg
ICAgICAgICAgcmV0dXJuIE1BTEZPUk1FRDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgLy8gRm91ci1ieXRlIGZvcm0KLQotICAgICAgICAgIGlmIChyZW1haW5pbmcg
PCAzKSB7Ci0gICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHNlcXVlbmNlCi0gICAgICAgICAgICBy
ZXR1cm4gdW5zYWZlSW5jb21wbGV0ZVN0YXRlRm9yKGFkZHJlc3MsIGJ5dGUxLCByZW1haW5pbmcp
OwotICAgICAgICAgIH0KLSAgICAgICAgICByZW1haW5pbmcgLT0gMzsKLQotICAgICAgICAgIGZp
bmFsIGJ5dGUgYnl0ZTIgPSBVTlNBRkUuZ2V0Qnl0ZShhZGRyZXNzKyspOwotICAgICAgICAgIGlm
IChieXRlMiA+IChieXRlKSAweEJGCi0gICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgMSA8PSBw
bGFuZSA8PSAxNi4gIFRyaWNreSBvcHRpbWl6ZWQgZm9ybSBvZjoKLSAgICAgICAgICAgICAgLy8g
aWYgKGJ5dGUxID4gKGJ5dGUpIDB4RjQgfHwKLSAgICAgICAgICAgICAgLy8gICAgIGJ5dGUxID09
IChieXRlKSAweEYwICYmIGJ5dGUyIDwgKGJ5dGUpIDB4OTAgfHwKLSAgICAgICAgICAgICAgLy8g
ICAgIGJ5dGUxID09IChieXRlKSAweEY0ICYmIGJ5dGUyID4gKGJ5dGUpIDB4OEYpCi0gICAgICAg
ICAgICAgIHx8ICgoKGJ5dGUxIDw8IDI4KSArIChieXRlMiAtIChieXRlKSAweDkwKSkgPj4gMzAp
ICE9IDAKLSAgICAgICAgICAgICAgLy8gYnl0ZTMgdHJhaWxpbmctYnl0ZSB0ZXN0Ci0gICAgICAg
ICAgICAgIHx8IFVOU0FGRS5nZXRCeXRlKGFkZHJlc3MrKykgPiAoYnl0ZSkgMHhCRgotICAgICAg
ICAgICAgICAvLyBieXRlNCB0cmFpbGluZy1ieXRlIHRlc3QKLSAgICAgICAgICAgICAgfHwgVU5T
QUZFLmdldEJ5dGUoYWRkcmVzcysrKSA+IChieXRlKSAweEJGKSB7Ci0gICAgICAgICAgICByZXR1
cm4gTUFMRk9STUVEOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQot
ICAgIHByaXZhdGUgc3RhdGljIGludCB1bnNhZmVJbmNvbXBsZXRlU3RhdGVGb3IoYnl0ZVtdIGJ5
dGVzLCBpbnQgYnl0ZTEsIGxvbmcgb2Zmc2V0LAotICAgICAgICBpbnQgcmVtYWluaW5nKSB7Ci0g
ICAgICBzd2l0Y2ggKHJlbWFpbmluZykgewotICAgICAgICBjYXNlIDA6IHsKLSAgICAgICAgICBy
ZXR1cm4gaW5jb21wbGV0ZVN0YXRlRm9yKGJ5dGUxKTsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IDE6IHsKLSAgICAgICAgICByZXR1cm4gaW5jb21wbGV0ZVN0YXRlRm9yKGJ5dGUxLCBVTlNBRkUu
Z2V0Qnl0ZShieXRlcywgb2Zmc2V0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSAyOiB7Ci0g
ICAgICAgICAgcmV0dXJuIGluY29tcGxldGVTdGF0ZUZvcihieXRlMSwgVU5TQUZFLmdldEJ5dGUo
Ynl0ZXMsIG9mZnNldCksCi0gICAgICAgICAgICAgIFVOU0FGRS5nZXRCeXRlKGJ5dGVzLCBvZmZz
ZXQgKyAxKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgIHRocm93
IG5ldyBBc3NlcnRpb25FcnJvcigpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cHJpdmF0ZSBzdGF0aWMgaW50IHVuc2FmZUluY29tcGxldGVTdGF0ZUZvcihsb25nIGFkZHJlc3Ms
IGZpbmFsIGludCBieXRlMSwgaW50IHJlbWFpbmluZykgewotICAgICAgc3dpdGNoIChyZW1haW5p
bmcpIHsKLSAgICAgICAgY2FzZSAwOiB7Ci0gICAgICAgICAgcmV0dXJuIGluY29tcGxldGVTdGF0
ZUZvcihieXRlMSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSAxOiB7Ci0gICAgICAgICAgcmV0
dXJuIGluY29tcGxldGVTdGF0ZUZvcihieXRlMSwgVU5TQUZFLmdldEJ5dGUoYWRkcmVzcykpOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgMjogewotICAgICAgICAgIHJldHVybiBpbmNvbXBsZXRl
U3RhdGVGb3IoYnl0ZTEsIFVOU0FGRS5nZXRCeXRlKGFkZHJlc3MpLCBVTlNBRkUuZ2V0Qnl0ZShh
ZGRyZXNzICsgMSkpOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICB0
aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIEdldHMgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUgd2l0aGlu
IHRoZSBjbGFzcywgb3Ige0Bjb2RlIG51bGx9IGlmIG5vdCBmb3VuZC4gSWYKLSAgICAgKiBmb3Vu
ZCwgdGhlIGZpZWxkIGlzIG1hZGUgYWNjZXNzaWJsZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0
YXRpYyBGaWVsZCBmaWVsZChDbGFzczw/PiBjbGF6eiwgU3RyaW5nIGZpZWxkTmFtZSkgewotICAg
ICAgRmllbGQgZmllbGQ7Ci0gICAgICB0cnkgewotICAgICAgICBmaWVsZCA9IGNsYXp6LmdldERl
Y2xhcmVkRmllbGQoZmllbGROYW1lKTsKLSAgICAgICAgZmllbGQuc2V0QWNjZXNzaWJsZSh0cnVl
KTsKLSAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICAgIC8vIEZhaWxlZCB0byBh
Y2Nlc3MgdGhlIGZpZWxkcy4KLSAgICAgICAgZmllbGQgPSBudWxsOwotICAgICAgfQotICAgICAg
bG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJ7MH0uezF9OiB7Mn0iLAotICAgICAgICAgIG5ldyBP
YmplY3RbXSB7Y2xhenouZ2V0TmFtZSgpLCBmaWVsZE5hbWUsIChmaWVsZCAhPSBudWxsID8gImF2
YWlsYWJsZSIgOiAidW5hdmFpbGFibGUiKX0pOwotICAgICAgcmV0dXJuIGZpZWxkOwotICAgIH0K
LQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgcHJvdmlkZWQgZmll
bGQsIG9yIHtAY29kZSAtMX0gaWYge0Bjb2RlIHN1bi5taXNjLlVuc2FmZX0gaXMgbm90Ci0gICAg
ICogYXZhaWxhYmxlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGxvbmcgZmllbGRPZmZz
ZXQoRmllbGQgZmllbGQpIHsKLSAgICAgIHJldHVybiBmaWVsZCA9PSBudWxsIHx8IFVOU0FGRSA9
PSBudWxsID8gLTEgOiBVTlNBRkUub2JqZWN0RmllbGRPZmZzZXQoZmllbGQpOwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIEdldCB0aGUgYmFzZSBvZmZzZXQgZm9yIGJ5dGUgYXJyYXlzLCBvciB7
QGNvZGUgLTF9IGlmIHtAY29kZSBzdW4ubWlzYy5VbnNhZmV9IGlzIG5vdAotICAgICAqIGF2YWls
YWJsZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyA8VD4gaW50IGJ5dGVBcnJheUJhc2VP
ZmZzZXQoKSB7Ci0gICAgICByZXR1cm4gVU5TQUZFID09IG51bGwgPyAtMSA6IFVOU0FGRS5hcnJh
eUJhc2VPZmZzZXQoYnl0ZVtdLmNsYXNzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRz
IHRoZSBvZmZzZXQgb2YgdGhlIHtAY29kZSBhZGRyZXNzfSBmaWVsZCBvZiB0aGUgZ2l2ZW4gZGly
ZWN0IHtAbGluayBCeXRlQnVmZmVyfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBsb25n
IGFkZHJlc3NPZmZzZXQoQnl0ZUJ1ZmZlciBidWZmZXIpIHsKLSAgICAgIHJldHVybiBVTlNBRkUu
Z2V0TG9uZyhidWZmZXIsIEJVRkZFUl9BRERSRVNTX09GRlNFVCk7Ci0gICAgfQotCi0gICAgLyoq
Ci0gICAgICogR2V0cyB0aGUge0Bjb2RlIHN1bi5taXNjLlVuc2FmZX0gaW5zdGFuY2UsIG9yIHtA
Y29kZSBudWxsfSBpZiBub3QgYXZhaWxhYmxlIG9uIHRoaXMKLSAgICAgKiBwbGF0Zm9ybS4KLSAg
ICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBzdW4ubWlzYy5VbnNhZmUgZ2V0VW5zYWZlKCkgewot
ICAgICAgc3VuLm1pc2MuVW5zYWZlIHVuc2FmZSA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAg
ICB1bnNhZmUgPSBBY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChuZXcgUHJpdmlsZWdlZEV4
Y2VwdGlvbkFjdGlvbjxzdW4ubWlzYy5VbnNhZmU+KCkgewotICAgICAgICAgIEBPdmVycmlkZQot
ICAgICAgICAgIHB1YmxpYyBzdW4ubWlzYy5VbnNhZmUgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7
Ci0gICAgICAgICAgICBDbGFzczxzdW4ubWlzYy5VbnNhZmU+IGsgPSBzdW4ubWlzYy5VbnNhZmUu
Y2xhc3M7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhpcyBwbGF0Zm9ybSBzdXBwb3J0
cyBhbGwgb2YgdGhlIHJlcXVpcmVkIHVuc2FmZSBtZXRob2RzLgotICAgICAgICAgICAgY2hlY2tS
ZXF1aXJlZE1ldGhvZHMoayk7Ci0KLSAgICAgICAgICAgIGZvciAoRmllbGQgZiA6IGsuZ2V0RGVj
bGFyZWRGaWVsZHMoKSkgewotICAgICAgICAgICAgICBmLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0g
ICAgICAgICAgICAgIE9iamVjdCB4ID0gZi5nZXQobnVsbCk7Ci0gICAgICAgICAgICAgIGlmIChr
LmlzSW5zdGFuY2UoeCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gay5jYXN0KHgpOwotICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBUaGUgc3VuLm1pc2Mu
VW5zYWZlIGZpZWxkIGRvZXMgbm90IGV4aXN0LgotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7Ci0g
ICAgICAgIC8vIENhdGNoaW5nIFRocm93YWJsZSBoZXJlIGR1ZSB0byB0aGUgZmFjdCB0aGF0IEdv
b2dsZSBBcHBFbmdpbmUgcmFpc2VzIE5vQ2xhc3NEZWZGb3VuZEVycm9yCi0gICAgICAgIC8vIGZv
ciBVbnNhZmUuCi0gICAgICB9Ci0KLSAgICAgIGxvZ2dlci5sb2coTGV2ZWwuRklORVNULCAic3Vu
Lm1pc2MuVW5zYWZlOiB7fSIsCi0gICAgICAgICAgdW5zYWZlICE9IG51bGwgPyAiYXZhaWxhYmxl
IiA6ICJ1bmF2YWlsYWJsZSIpOwotICAgICAgcmV0dXJuIHVuc2FmZTsKLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgKiBWZXJpZmllcyB0aGF0IGFsbCByZXF1aXJlZCBtZXRob2RzIG9mIHtAY29kZSBz
dW4ubWlzYy5VbnNhZmV9IGFyZSBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybS4KLSAgICAgKi8K
LSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrUmVxdWlyZWRNZXRob2RzKENsYXNzPHN1bi5t
aXNjLlVuc2FmZT4gY2xhenopCi0gICAgICAgIHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24s
IFNlY3VyaXR5RXhjZXB0aW9uIHsKLSAgICAgIC8vIE5lZWRlZCBmb3IgVW5zYWZlIGJ5dGVbXSBh
Y2Nlc3MKLSAgICAgIGNsYXp6LmdldE1ldGhvZCgiYXJyYXlCYXNlT2Zmc2V0IiwgQ2xhc3MuY2xh
c3MpOwotICAgICAgY2xhenouZ2V0TWV0aG9kKCJnZXRCeXRlIiwgT2JqZWN0LmNsYXNzLCBsb25n
LmNsYXNzKTsKLSAgICAgIGNsYXp6LmdldE1ldGhvZCgicHV0Qnl0ZSIsIE9iamVjdC5jbGFzcywg
bG9uZy5jbGFzcywgYnl0ZS5jbGFzcyk7Ci0gICAgICBjbGF6ei5nZXRNZXRob2QoImdldExvbmci
LCBPYmplY3QuY2xhc3MsIGxvbmcuY2xhc3MpOwotCi0gICAgICAvLyBOZWVkZWQgZm9yIFVuc2Fm
ZSBEaXJlY3QgQnl0ZUJ1ZmZlciBhY2Nlc3MKLSAgICAgIGNsYXp6LmdldE1ldGhvZCgib2JqZWN0
RmllbGRPZmZzZXQiLCBGaWVsZC5jbGFzcyk7Ci0gICAgICBjbGF6ei5nZXRNZXRob2QoImdldEJ5
dGUiLCBsb25nLmNsYXNzKTsKLSAgICAgIGNsYXp6LmdldE1ldGhvZCgiZ2V0TG9uZyIsIE9iamVj
dC5jbGFzcywgbG9uZy5jbGFzcyk7Ci0gICAgICBjbGF6ei5nZXRNZXRob2QoInB1dEJ5dGUiLCBs
b25nLmNsYXNzLCBieXRlLmNsYXNzKTsKLSAgICAgIGNsYXp6LmdldE1ldGhvZCgiZ2V0TG9uZyIs
IGxvbmcuY2xhc3MpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgVXRmOCgpIHt9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvV2lyZUZv
cm1hdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1dp
cmVGb3JtYXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE1OGIwODExYjQ4
MjIyYTQ3NGVmNmU4Y2MwMGJkM2I1OWIzNjc3Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvV2lyZUZvcm1hdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJv
dG9idWY7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoaXMgY2xh
c3MgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBQcm90b2NvbCBCdWZmZXIgbGlicmFyeSBhbmQg
Z2VuZXJhdGVkCi0gKiBtZXNzYWdlIGltcGxlbWVudGF0aW9ucy4gIEl0IGlzIHB1YmxpYyBvbmx5
IGJlY2F1c2UgdGhvc2UgZ2VuZXJhdGVkIG1lc3NhZ2VzCi0gKiBkbyBub3QgcmVzaWRlIGluIHRo
ZSB7QGNvZGUgcHJvdG9idWZ9IHBhY2thZ2UuICBPdGhlcnMgc2hvdWxkIG5vdCB1c2UgdGhpcwot
ICogY2xhc3MgZGlyZWN0bHkuCi0gKgotICogVGhpcyBjbGFzcyBjb250YWlucyBjb25zdGFudHMg
YW5kIGhlbHBlciBmdW5jdGlvbnMgdXNlZnVsIGZvciBkZWFsaW5nIHdpdGgKLSAqIHRoZSBQcm90
b2NvbCBCdWZmZXIgd2lyZSBmb3JtYXQuCi0gKgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNv
bSBLZW50b24gVmFyZGEKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFdpcmVGb3JtYXQgewotICAv
LyBEbyBub3QgYWxsb3cgaW5zdGFudGlhdGlvbi4KLSAgcHJpdmF0ZSBXaXJlRm9ybWF0KCkge30K
LQotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXSVJFVFlQRV9WQVJJTlQgICAgICAgICAgID0g
MDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0lSRVRZUEVfRklYRUQ2NCAgICAgICAgICA9
IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQg
PSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXSVJFVFlQRV9TVEFSVF9HUk9VUCAgICAg
ID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0lSRVRZUEVfRU5EX0dST1VQICAgICAg
ICA9IDQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdJUkVUWVBFX0ZJWEVEMzIgICAgICAg
ICAgPSA1OwotCi0gIHN0YXRpYyBmaW5hbCBpbnQgVEFHX1RZUEVfQklUUyA9IDM7Ci0gIHN0YXRp
YyBmaW5hbCBpbnQgVEFHX1RZUEVfTUFTSyA9ICgxIDw8IFRBR19UWVBFX0JJVFMpIC0gMTsKLQot
ICAvKiogR2l2ZW4gYSB0YWcgdmFsdWUsIGRldGVybWluZXMgdGhlIHdpcmUgdHlwZSAodGhlIGxv
d2VyIDMgYml0cykuICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFRhZ1dpcmVUeXBlKGZpbmFs
IGludCB0YWcpIHsKLSAgICByZXR1cm4gdGFnICYgVEFHX1RZUEVfTUFTSzsKLSAgfQotCi0gIC8q
KiBHaXZlbiBhIHRhZyB2YWx1ZSwgZGV0ZXJtaW5lcyB0aGUgZmllbGQgbnVtYmVyICh0aGUgdXBw
ZXIgMjkgYml0cykuICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFRhZ0ZpZWxkTnVtYmVyKGZp
bmFsIGludCB0YWcpIHsKLSAgICByZXR1cm4gdGFnID4+PiBUQUdfVFlQRV9CSVRTOwotICB9Ci0K
LSAgLyoqIE1ha2VzIGEgdGFnIHZhbHVlIGdpdmVuIGEgZmllbGQgbnVtYmVyIGFuZCB3aXJlIHR5
cGUuICovCi0gIHN0YXRpYyBpbnQgbWFrZVRhZyhmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFs
IGludCB3aXJlVHlwZSkgewotICAgIHJldHVybiAoZmllbGROdW1iZXIgPDwgVEFHX1RZUEVfQklU
UykgfCB3aXJlVHlwZTsKLSAgfQotCi0gIC8qKgotICAgKiBMaXRlIGVxdWl2YWxlbnQgdG8ge0Bs
aW5rIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvci5KYXZhVHlwZX0uICBUaGlzIGlzCi0gICAq
IG9ubHkgaGVyZSB0byBzdXBwb3J0IHRoZSBsaXRlIHJ1bnRpbWUgYW5kIHNob3VsZCBub3QgYmUg
dXNlZCBieSB1c2Vycy4KLSAgICovCi0gIHB1YmxpYyBlbnVtIEphdmFUeXBlIHsKLSAgICBJTlQo
MCksCi0gICAgTE9ORygwTCksCi0gICAgRkxPQVQoMEYpLAotICAgIERPVUJMRSgwRCksCi0gICAg
Qk9PTEVBTihmYWxzZSksCi0gICAgU1RSSU5HKCIiKSwKLSAgICBCWVRFX1NUUklORyhCeXRlU3Ry
aW5nLkVNUFRZKSwKLSAgICBFTlVNKG51bGwpLAotICAgIE1FU1NBR0UobnVsbCk7Ci0KLSAgICBK
YXZhVHlwZShmaW5hbCBPYmplY3QgZGVmYXVsdERlZmF1bHQpIHsKLSAgICAgIHRoaXMuZGVmYXVs
dERlZmF1bHQgPSBkZWZhdWx0RGVmYXVsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUg
ZGVmYXVsdCBkZWZhdWx0IHZhbHVlIGZvciBmaWVsZHMgb2YgdGhpcyB0eXBlLCBpZiBpdCdzIGEg
cHJpbWl0aXZlCi0gICAgICogdHlwZS4KLSAgICAgKi8KLSAgICBPYmplY3QgZ2V0RGVmYXVsdERl
ZmF1bHQoKSB7Ci0gICAgICByZXR1cm4gZGVmYXVsdERlZmF1bHQ7Ci0gICAgfQotCi0gICAgcHJp
dmF0ZSBmaW5hbCBPYmplY3QgZGVmYXVsdERlZmF1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogTGl0
ZSBlcXVpdmFsZW50IHRvIHtAbGluayBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IuVHlwZX0u
ICBUaGlzIGlzCi0gICAqIG9ubHkgaGVyZSB0byBzdXBwb3J0IHRoZSBsaXRlIHJ1bnRpbWUgYW5k
IHNob3VsZCBub3QgYmUgdXNlZCBieSB1c2Vycy4KLSAgICovCi0gIHB1YmxpYyBlbnVtIEZpZWxk
VHlwZSB7Ci0gICAgRE9VQkxFICAoSmF2YVR5cGUuRE9VQkxFICAgICAsIFdJUkVUWVBFX0ZJWEVE
NjQgICAgICAgICApLAotICAgIEZMT0FUICAgKEphdmFUeXBlLkZMT0FUICAgICAgLCBXSVJFVFlQ
RV9GSVhFRDMyICAgICAgICAgKSwKLSAgICBJTlQ2NCAgIChKYXZhVHlwZS5MT05HICAgICAgICwg
V0lSRVRZUEVfVkFSSU5UICAgICAgICAgICksCi0gICAgVUlOVDY0ICAoSmF2YVR5cGUuTE9ORyAg
ICAgICAsIFdJUkVUWVBFX1ZBUklOVCAgICAgICAgICApLAotICAgIElOVDMyICAgKEphdmFUeXBl
LklOVCAgICAgICAgLCBXSVJFVFlQRV9WQVJJTlQgICAgICAgICAgKSwKLSAgICBGSVhFRDY0IChK
YXZhVHlwZS5MT05HICAgICAgICwgV0lSRVRZUEVfRklYRUQ2NCAgICAgICAgICksCi0gICAgRklY
RUQzMiAoSmF2YVR5cGUuSU5UICAgICAgICAsIFdJUkVUWVBFX0ZJWEVEMzIgICAgICAgICApLAot
ICAgIEJPT0wgICAgKEphdmFUeXBlLkJPT0xFQU4gICAgLCBXSVJFVFlQRV9WQVJJTlQgICAgICAg
ICAgKSwKLSAgICBTVFJJTkcgIChKYXZhVHlwZS5TVFJJTkcgICAgICwgV0lSRVRZUEVfTEVOR1RI
X0RFTElNSVRFRCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBpc1Bh
Y2thYmxlKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7IH0KLSAgICB9LAotICAgIEdST1VQICAg
KEphdmFUeXBlLk1FU1NBR0UgICAgLCBXSVJFVFlQRV9TVEFSVF9HUk9VUCAgICAgKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFuIGlzUGFja2FibGUoKSB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsgfQotICAgIH0sCi0gICAgTUVTU0FHRSAoSmF2YVR5cGUuTUVTU0FHRSAg
ICAsIFdJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIGJvb2xlYW4gaXNQYWNrYWJsZSgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgfSwKLSAgICBCWVRFUyAgIChKYXZhVHlwZS5CWVRFX1NUUklORywgV0lSRVRZUEVfTEVOR1RI
X0RFTElNSVRFRCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBpc1Bh
Y2thYmxlKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7IH0KLSAgICB9LAotICAgIFVJTlQzMiAg
KEphdmFUeXBlLklOVCAgICAgICAgLCBXSVJFVFlQRV9WQVJJTlQgICAgICAgICAgKSwKLSAgICBF
TlVNICAgIChKYXZhVHlwZS5FTlVNICAgICAgICwgV0lSRVRZUEVfVkFSSU5UICAgICAgICAgICks
Ci0gICAgU0ZJWEVEMzIoSmF2YVR5cGUuSU5UICAgICAgICAsIFdJUkVUWVBFX0ZJWEVEMzIgICAg
ICAgICApLAotICAgIFNGSVhFRDY0KEphdmFUeXBlLkxPTkcgICAgICAgLCBXSVJFVFlQRV9GSVhF
RDY0ICAgICAgICAgKSwKLSAgICBTSU5UMzIgIChKYXZhVHlwZS5JTlQgICAgICAgICwgV0lSRVRZ
UEVfVkFSSU5UICAgICAgICAgICksCi0gICAgU0lOVDY0ICAoSmF2YVR5cGUuTE9ORyAgICAgICAs
IFdJUkVUWVBFX1ZBUklOVCAgICAgICAgICApOwotCi0gICAgRmllbGRUeXBlKGZpbmFsIEphdmFU
eXBlIGphdmFUeXBlLCBmaW5hbCBpbnQgd2lyZVR5cGUpIHsKLSAgICAgIHRoaXMuamF2YVR5cGUg
PSBqYXZhVHlwZTsKLSAgICAgIHRoaXMud2lyZVR5cGUgPSB3aXJlVHlwZTsKLSAgICB9Ci0KLSAg
ICBwcml2YXRlIGZpbmFsIEphdmFUeXBlIGphdmFUeXBlOwotICAgIHByaXZhdGUgZmluYWwgaW50
IHdpcmVUeXBlOwotCi0gICAgcHVibGljIEphdmFUeXBlIGdldEphdmFUeXBlKCkgeyByZXR1cm4g
amF2YVR5cGU7IH0KLSAgICBwdWJsaWMgaW50IGdldFdpcmVUeXBlKCkgeyByZXR1cm4gd2lyZVR5
cGU7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzUGFja2FibGUoKSB7IHJldHVybiB0cnVlOyB9
Ci0gIH0KLQotICAvLyBGaWVsZCBudW1iZXJzIGZvciBmaWVsZHMgaW4gTWVzc2FnZVNldCB3aXJl
IGZvcm1hdC4KLSAgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX1NFVF9JVEVNICAgID0gMTsKLSAg
c3RhdGljIGZpbmFsIGludCBNRVNTQUdFX1NFVF9UWVBFX0lEID0gMjsKLSAgc3RhdGljIGZpbmFs
IGludCBNRVNTQUdFX1NFVF9NRVNTQUdFID0gMzsKLQotICAvLyBUYWcgbnVtYmVycy4KLSAgc3Rh
dGljIGZpbmFsIGludCBNRVNTQUdFX1NFVF9JVEVNX1RBRyA9Ci0gICAgbWFrZVRhZyhNRVNTQUdF
X1NFVF9JVEVNLCBXSVJFVFlQRV9TVEFSVF9HUk9VUCk7Ci0gIHN0YXRpYyBmaW5hbCBpbnQgTUVT
U0FHRV9TRVRfSVRFTV9FTkRfVEFHID0KLSAgICBtYWtlVGFnKE1FU1NBR0VfU0VUX0lURU0sIFdJ
UkVUWVBFX0VORF9HUk9VUCk7Ci0gIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9TRVRfVFlQRV9J
RF9UQUcgPQotICAgIG1ha2VUYWcoTUVTU0FHRV9TRVRfVFlQRV9JRCwgV0lSRVRZUEVfVkFSSU5U
KTsKLSAgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX1NFVF9NRVNTQUdFX1RBRyA9Ci0gICAgbWFr
ZVRhZyhNRVNTQUdFX1NFVF9NRVNTQUdFLCBXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLQot
ICAvKioKLSAgICogVmFsaWRhdGlvbiBsZXZlbCBmb3IgaGFuZGxpbmcgaW5jb21pbmcgc3RyaW5n
IGZpZWxkIGRhdGEgd2hpY2ggcG90ZW50aWFsbHkKLSAgICogY29udGFpbiBub24tVVRGOCBieXRl
cy4KLSAgICovCi0gIGVudW0gVXRmOFZhbGlkYXRpb24gewotICAgIC8qKiBFYWdlcmx5IHBhcnNl
cyB0byBTdHJpbmc7IHNpbGVudGx5IGFjY2VwdHMgaW52YWxpZCBVVEY4IGJ5dGVzLiAqLwotICAg
IExPT1NFIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgT2JqZWN0IHJlYWRTdHJpbmcoQ29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIGlu
cHV0LnJlYWRTdHJpbmcoKTsKLSAgICAgIH0KLSAgICB9LAotICAgIC8qKiBFYWdlcmx5IHBhcnNl
cyB0byBTdHJpbmc7IHRocm93cyBhbiBJT0V4Y2VwdGlvbiBvbiBpbnZhbGlkIGJ5dGVzLiAqLwot
ICAgIFNUUklDVCB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIE9iamVjdCByZWFkU3RyaW5nKENv
ZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVy
biBpbnB1dC5yZWFkU3RyaW5nUmVxdWlyZVV0ZjgoKTsKLSAgICAgIH0KLSAgICB9LAotICAgIC8q
KiBLZWVwIGRhdGEgYXMgQnl0ZVN0cmluZzsgdmFsaWRhdGlvbi9jb252ZXJzaW9uIHRvIFN0cmlu
ZyBpcyBsYXp5LiAqLwotICAgIExBWlkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBPYmplY3Qg
cmVhZFN0cmluZyhDb2RlZElucHV0U3RyZWFtIGlucHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewot
ICAgICAgICByZXR1cm4gaW5wdXQucmVhZEJ5dGVzKCk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAg
IC8qKiBSZWFkIGEgc3RyaW5nIGZpZWxkIGZyb20gdGhlIGlucHV0IHdpdGggdGhlIHByb3BlciBV
VEY4IHZhbGlkYXRpb24uICovCi0gICAgYWJzdHJhY3QgT2JqZWN0IHJlYWRTdHJpbmcoQ29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCkgdGhyb3dzIElPRXhjZXB0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAq
IFJlYWQgYSBmaWVsZCBvZiBhbnkgcHJpbWl0aXZlIHR5cGUgZm9yIGltbXV0YWJsZSBtZXNzYWdl
cyBmcm9tIGEKLSAgICogQ29kZWRJbnB1dFN0cmVhbS4gRW51bXMsIGdyb3VwcywgYW5kIGVtYmVk
ZGVkIG1lc3NhZ2VzIGFyZSBub3QgaGFuZGxlZCBieQotICAgKiB0aGlzIG1ldGhvZC4KLSAgICoK
LSAgICogQHBhcmFtIGlucHV0IFRoZSBzdHJlYW0gZnJvbSB3aGljaCB0byByZWFkLgotICAgKiBA
cGFyYW0gdHlwZSBEZWNsYXJlZCB0eXBlIG9mIHRoZSBmaWVsZC4KLSAgICogQHBhcmFtIHV0ZjhW
YWxpZGF0aW9uIERpZmZlcmVudCBzdHJpbmcgVVRGOCB2YWxpZGF0aW9uIGxldmVsIGZvciBoYW5k
bGluZwotICAgKiAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGZpZWxkcy4KLSAgICogQHJl
dHVybiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmaWVsZCdzIHZhbHVlLCBvZiB0aGUgZXhh
Y3QKLSAgICogICAgICAgICB0eXBlIHdoaWNoIHdvdWxkIGJlIHJldHVybmVkIGJ5Ci0gICAqICAg
ICAgICAge0BsaW5rIE1lc3NhZ2UjZ2V0RmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9y
KX0gZm9yCi0gICAqICAgICAgICAgdGhpcyBmaWVsZC4KLSAgICovCi0gIHN0YXRpYyBPYmplY3Qg
cmVhZFByaW1pdGl2ZUZpZWxkKAotICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCwKLSAgICAg
IEZpZWxkVHlwZSB0eXBlLAotICAgICAgVXRmOFZhbGlkYXRpb24gdXRmOFZhbGlkYXRpb24pIHRo
cm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICBjYXNlIERPVUJM
RSAgOiByZXR1cm4gaW5wdXQucmVhZERvdWJsZSAgKCk7Ci0gICAgICBjYXNlIEZMT0FUICAgOiBy
ZXR1cm4gaW5wdXQucmVhZEZsb2F0ICAgKCk7Ci0gICAgICBjYXNlIElOVDY0ICAgOiByZXR1cm4g
aW5wdXQucmVhZEludDY0ICAgKCk7Ci0gICAgICBjYXNlIFVJTlQ2NCAgOiByZXR1cm4gaW5wdXQu
cmVhZFVJbnQ2NCAgKCk7Ci0gICAgICBjYXNlIElOVDMyICAgOiByZXR1cm4gaW5wdXQucmVhZElu
dDMyICAgKCk7Ci0gICAgICBjYXNlIEZJWEVENjQgOiByZXR1cm4gaW5wdXQucmVhZEZpeGVkNjQg
KCk7Ci0gICAgICBjYXNlIEZJWEVEMzIgOiByZXR1cm4gaW5wdXQucmVhZEZpeGVkMzIgKCk7Ci0g
ICAgICBjYXNlIEJPT0wgICAgOiByZXR1cm4gaW5wdXQucmVhZEJvb2wgICAgKCk7Ci0gICAgICBj
YXNlIEJZVEVTICAgOiByZXR1cm4gaW5wdXQucmVhZEJ5dGVzICAgKCk7Ci0gICAgICBjYXNlIFVJ
TlQzMiAgOiByZXR1cm4gaW5wdXQucmVhZFVJbnQzMiAgKCk7Ci0gICAgICBjYXNlIFNGSVhFRDMy
OiByZXR1cm4gaW5wdXQucmVhZFNGaXhlZDMyKCk7Ci0gICAgICBjYXNlIFNGSVhFRDY0OiByZXR1
cm4gaW5wdXQucmVhZFNGaXhlZDY0KCk7Ci0gICAgICBjYXNlIFNJTlQzMiAgOiByZXR1cm4gaW5w
dXQucmVhZFNJbnQzMiAgKCk7Ci0gICAgICBjYXNlIFNJTlQ2NCAgOiByZXR1cm4gaW5wdXQucmVh
ZFNJbnQ2NCAgKCk7Ci0KLSAgICAgIGNhc2UgU1RSSU5HICA6IHJldHVybiB1dGY4VmFsaWRhdGlv
bi5yZWFkU3RyaW5nKGlucHV0KTsKLSAgICAgIGNhc2UgR1JPVVA6Ci0gICAgICAgIHRocm93IG5l
dyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgInJlYWRQcmltaXRpdmVGaWVs
ZCgpIGNhbm5vdCBoYW5kbGUgbmVzdGVkIGdyb3Vwcy4iKTsKLSAgICAgIGNhc2UgTUVTU0FHRToK
LSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAi
cmVhZFByaW1pdGl2ZUZpZWxkKCkgY2Fubm90IGhhbmRsZSBlbWJlZGRlZCBtZXNzYWdlcy4iKTsK
LSAgICAgIGNhc2UgRU5VTToKLSAgICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIGVudW1zIGJlY2F1
c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmIHRoZQotICAgICAgICAvLyB2YWx1ZSBpcyBu
b3QgcmVjb2duaXplZC4KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlv
bigKLSAgICAgICAgICAicmVhZFByaW1pdGl2ZUZpZWxkKCkgY2Fubm90IGhhbmRsZSBlbnVtcy4i
KTsKLSAgICB9Ci0KLSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICJUaGVy
ZSBpcyBubyB3YXkgdG8gZ2V0IGhlcmUsIGJ1dCB0aGUgY29tcGlsZXIgdGhpbmtzIG90aGVyd2lz
ZS4iKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL0Fic3RyYWN0TWVzc2FnZVRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9BYnN0cmFjdE1lc3NhZ2VUZXN0LmphdmEKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkYzlmYzE1MDQxZjIwMDJkZmZjZmE5NmU5MWE3N2Qy
ZTM5ZjBjYWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Fic3RyYWN0TWVzc2Fn
ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1MSArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1p
bXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3I7Ci1p
bXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RPcHRpbWl6ZUZvci5UZXN0T3B0aW1pemVk
Rm9yU2l6ZTsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvOwotaW1wb3J0
IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uRm9yZWlnbk1lc3NhZ2U7Ci1pbXBvcnQg
cHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5UZXN0QWxsRXh0ZW5zaW9uczsKLWltcG9y
dCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLWltcG9ydCBw
cm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RQYWNrZWRUeXBlczsKLWltcG9ydCBw
cm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RSZXF1aXJlZDsKLWltcG9ydCBwcm90
b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RSZXF1aXJlZEZvcmVpZ247Ci1pbXBvcnQg
cHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5UZXN0VW5wYWNrZWRUeXBlczsKLWltcG9y
dCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0v
KioKLSAqIFVuaXQgdGVzdCBmb3Ige0BsaW5rIEFic3RyYWN0TWVzc2FnZX0uCi0gKgotICogQGF1
dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqLwotcHVibGljIGNsYXNzIEFi
c3RyYWN0TWVzc2FnZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gIC8qKgotICAgKiBFeHRlbmRz
IEFic3RyYWN0TWVzc2FnZSBhbmQgd3JhcHMgc29tZSBvdGhlciBtZXNzYWdlIG9iamVjdC4gIFRo
ZSBtZXRob2RzCi0gICAqIG9mIHRoZSBNZXNzYWdlIGludGVyZmFjZSB3aGljaCBhcmVuJ3QgZXhw
bGljaXRseSBpbXBsZW1lbnRlZCBieQotICAgKiBBYnN0cmFjdE1lc3NhZ2UgYXJlIGZvcndhcmRl
ZCB0byB0aGUgd3JhcHBlZCBvYmplY3QuICBUaGlzIGFsbG93cyB1cyB0bwotICAgKiB0ZXN0IHRo
YXQgQWJzdHJhY3RNZXNzYWdlJ3MgaW1wbGVtZW50YXRpb25zIHdvcmsgZXZlbiBpZiB0aGUgd3Jh
cHBlZAotICAgKiBvYmplY3QgZG9lcyBub3QgdXNlIHRoZW0uCi0gICAqLwotICBwcml2YXRlIHN0
YXRpYyBjbGFzcyBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyIGV4dGVuZHMgQWJzdHJhY3RNZXNzYWdl
IHsKLSAgICBwcml2YXRlIGZpbmFsIE1lc3NhZ2Ugd3JhcHBlZE1lc3NhZ2U7Ci0KLSAgICBwdWJs
aWMgQWJzdHJhY3RNZXNzYWdlV3JhcHBlcihNZXNzYWdlIHdyYXBwZWRNZXNzYWdlKSB7Ci0gICAg
ICB0aGlzLndyYXBwZWRNZXNzYWdlID0gd3JhcHBlZE1lc3NhZ2U7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIERlc2NyaXB0b3JzLkRlc2NyaXB0b3IgZ2V0RGVzY3JpcHRvckZv
clR5cGUoKSB7Ci0gICAgICByZXR1cm4gd3JhcHBlZE1lc3NhZ2UuZ2V0RGVzY3JpcHRvckZvclR5
cGUoKTsKLSAgICB9Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFic3RyYWN0TWVzc2FnZVdy
YXBwZXIgZ2V0RGVmYXVsdEluc3RhbmNlRm9yVHlwZSgpIHsKLSAgICAgIHJldHVybiBuZXcgQWJz
dHJhY3RNZXNzYWdlV3JhcHBlcigKLSAgICAgICAgd3JhcHBlZE1lc3NhZ2UuZ2V0RGVmYXVsdElu
c3RhbmNlRm9yVHlwZSgpKTsKLSAgICB9Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hcDxE
ZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IsIE9iamVjdD4gZ2V0QWxsRmllbGRzKCkgewotICAg
ICAgcmV0dXJuIHdyYXBwZWRNZXNzYWdlLmdldEFsbEZpZWxkcygpOwotICAgIH0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNGaWVsZChEZXNjcmlwdG9ycy5GaWVsZERlc2Ny
aXB0b3IgZmllbGQpIHsKLSAgICAgIHJldHVybiB3cmFwcGVkTWVzc2FnZS5oYXNGaWVsZChmaWVs
ZCk7Ci0gICAgfQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgZ2V0RmllbGQoRGVz
Y3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICByZXR1cm4gd3JhcHBlZE1l
c3NhZ2UuZ2V0RmllbGQoZmllbGQpOwotICAgIH0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
aW50IGdldFJlcGVhdGVkRmllbGRDb3VudChEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmll
bGQpIHsKLSAgICAgIHJldHVybiB3cmFwcGVkTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQo
ZmllbGQpOwotICAgIH0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGdldFJlcGVh
dGVkRmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkLCBpbnQgaW5kZXgpIHsK
LSAgICAgIHJldHVybiB3cmFwcGVkTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGZpZWxkLCBpbmRl
eCk7Ci0gICAgfQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBVbmtub3duRmllbGRTZXQgZ2V0
VW5rbm93bkZpZWxkcygpIHsKLSAgICAgIHJldHVybiB3cmFwcGVkTWVzc2FnZS5nZXRVbmtub3du
RmllbGRzKCk7Ci0gICAgfQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCdWlsZGVyIG5ld0J1
aWxkZXJGb3JUeXBlKCkgewotICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKHdyYXBwZWRNZXNzYWdl
Lm5ld0J1aWxkZXJGb3JUeXBlKCkpOwotICAgIH0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
QnVpbGRlciB0b0J1aWxkZXIoKSB7Ci0gICAgICByZXR1cm4gbmV3IEJ1aWxkZXIod3JhcHBlZE1l
c3NhZ2UudG9CdWlsZGVyKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBjbGFzcyBCdWlsZGVyIGV4
dGVuZHMgQWJzdHJhY3RNZXNzYWdlLkJ1aWxkZXI8QnVpbGRlcj4gewotICAgICAgcHJpdmF0ZSBm
aW5hbCBNZXNzYWdlLkJ1aWxkZXIgd3JhcHBlZEJ1aWxkZXI7Ci0KLSAgICAgIHB1YmxpYyBCdWls
ZGVyKE1lc3NhZ2UuQnVpbGRlciB3cmFwcGVkQnVpbGRlcikgewotICAgICAgICB0aGlzLndyYXBw
ZWRCdWlsZGVyID0gd3JhcHBlZEJ1aWxkZXI7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIEFic3RyYWN0TWVzc2FnZVdyYXBwZXIgYnVpbGQoKSB7Ci0gICAgICAgIHJl
dHVybiBuZXcgQWJzdHJhY3RNZXNzYWdlV3JhcHBlcih3cmFwcGVkQnVpbGRlci5idWlsZCgpKTsK
LSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIEFic3RyYWN0TWVzc2FnZVdy
YXBwZXIgYnVpbGRQYXJ0aWFsKCkgewotICAgICAgICByZXR1cm4gbmV3IEFic3RyYWN0TWVzc2Fn
ZVdyYXBwZXIod3JhcHBlZEJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCkpOwotICAgICAgfQotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgQnVpbGRlciBjbG9uZSgpIHsKLSAgICAgICAgcmV0dXJu
IG5ldyBCdWlsZGVyKHdyYXBwZWRCdWlsZGVyLmNsb25lKCkpOwotICAgICAgfQotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBpc0luaXRpYWxpemVkKCkgewotICAgICAgICBy
ZXR1cm4gY2xvbmUoKS5idWlsZFBhcnRpYWwoKS5pc0luaXRpYWxpemVkKCk7Ci0gICAgICB9Ci0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIGdldERl
c2NyaXB0b3JGb3JUeXBlKCkgewotICAgICAgICByZXR1cm4gd3JhcHBlZEJ1aWxkZXIuZ2V0RGVz
Y3JpcHRvckZvclR5cGUoKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IEFic3RyYWN0TWVzc2FnZVdyYXBwZXIgZ2V0RGVmYXVsdEluc3RhbmNlRm9yVHlwZSgpIHsKLSAg
ICAgICAgcmV0dXJuIG5ldyBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyKAotICAgICAgICAgIHdyYXBw
ZWRCdWlsZGVyLmdldERlZmF1bHRJbnN0YW5jZUZvclR5cGUoKSk7Ci0gICAgICB9Ci0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBNYXA8RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLCBP
YmplY3Q+IGdldEFsbEZpZWxkcygpIHsKLSAgICAgICAgcmV0dXJuIHdyYXBwZWRCdWlsZGVyLmdl
dEFsbEZpZWxkcygpOwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgQnVp
bGRlciBuZXdCdWlsZGVyRm9yRmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxk
KSB7Ci0gICAgICAgIHJldHVybiBuZXcgQnVpbGRlcih3cmFwcGVkQnVpbGRlci5uZXdCdWlsZGVy
Rm9yRmllbGQoZmllbGQpKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IGJvb2xlYW4gaGFzRmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0g
ICAgICAgIHJldHVybiB3cmFwcGVkQnVpbGRlci5oYXNGaWVsZChmaWVsZCk7Ci0gICAgICB9Ci0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBPYmplY3QgZ2V0RmllbGQoRGVzY3JpcHRvcnMu
RmllbGREZXNjcmlwdG9yIGZpZWxkKSB7Ci0gICAgICAgIHJldHVybiB3cmFwcGVkQnVpbGRlci5n
ZXRGaWVsZChmaWVsZCk7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBC
dWlsZGVyIHNldEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCwgT2JqZWN0
IHZhbHVlKSB7Ci0gICAgICAgIHdyYXBwZWRCdWlsZGVyLnNldEZpZWxkKGZpZWxkLCB2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgQnVpbGRlciBjbGVhckZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVs
ZCkgewotICAgICAgICB3cmFwcGVkQnVpbGRlci5jbGVhckZpZWxkKGZpZWxkKTsKLSAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBpbnQg
Z2V0UmVwZWF0ZWRGaWVsZENvdW50KERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCkg
ewotICAgICAgICByZXR1cm4gd3JhcHBlZEJ1aWxkZXIuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGZp
ZWxkKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIE9iamVjdCBnZXRS
ZXBlYXRlZEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZCwgaW50IGluZGV4
KSB7Ci0gICAgICAgIHJldHVybiB3cmFwcGVkQnVpbGRlci5nZXRSZXBlYXRlZEZpZWxkKGZpZWxk
LCBpbmRleCk7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBCdWlsZGVy
IHNldFJlcGVhdGVkRmllbGQoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkLCBpbnQg
aW5kZXgsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICB3cmFwcGVkQnVpbGRlci5zZXRSZXBlYXRl
ZEZpZWxkKGZpZWxkLCBpbmRleCwgdmFsdWUpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAg
IH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIEJ1aWxkZXIgYWRkUmVwZWF0ZWRGaWVs
ZChEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmllbGQsIE9iamVjdCB2YWx1ZSkgewotICAg
ICAgICB3cmFwcGVkQnVpbGRlci5hZGRSZXBlYXRlZEZpZWxkKGZpZWxkLCB2YWx1ZSk7Ci0gICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
VW5rbm93bkZpZWxkU2V0IGdldFVua25vd25GaWVsZHMoKSB7Ci0gICAgICAgIHJldHVybiB3cmFw
cGVkQnVpbGRlci5nZXRVbmtub3duRmllbGRzKCk7Ci0gICAgICB9Ci0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFVua25vd25GaWVsZHMoVW5rbm93bkZpZWxkU2V0IHVu
a25vd25GaWVsZHMpIHsKLSAgICAgICAgd3JhcHBlZEJ1aWxkZXIuc2V0VW5rbm93bkZpZWxkcyh1
bmtub3duRmllbGRzKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyBNZXNzYWdlLkJ1aWxkZXIgZ2V0RmllbGRCdWlsZGVyKEZpZWxk
RGVzY3JpcHRvciBmaWVsZCkgewotICAgICAgICByZXR1cm4gd3JhcHBlZEJ1aWxkZXIuZ2V0Rmll
bGRCdWlsZGVyKGZpZWxkKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIFBhcnNlcjw/IGV4dGVuZHMgTWVzc2FnZT4gZ2V0UGFyc2VyRm9yVHlwZSgpIHsKLSAgICAg
IHJldHVybiB3cmFwcGVkTWVzc2FnZS5nZXRQYXJzZXJGb3JUeXBlKCk7Ci0gICAgfQotICB9Ci0K
LSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLQotICBUZXN0VXRpbC5SZWZsZWN0aW9uVGVzdGVyIHJlZmxlY3Rpb25U
ZXN0ZXIgPQotICAgIG5ldyBUZXN0VXRpbC5SZWZsZWN0aW9uVGVzdGVyKFRlc3RBbGxUeXBlcy5n
ZXREZXNjcmlwdG9yKCksIG51bGwpOwotCi0gIFRlc3RVdGlsLlJlZmxlY3Rpb25UZXN0ZXIgZXh0
ZW5zaW9uc1JlZmxlY3Rpb25UZXN0ZXIgPQotICAgIG5ldyBUZXN0VXRpbC5SZWZsZWN0aW9uVGVz
dGVyKFRlc3RBbGxFeHRlbnNpb25zLmdldERlc2NyaXB0b3IoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUZXN0VXRpbC5nZXRFeHRlbnNpb25SZWdpc3RyeSgpKTsKLQotICBw
dWJsaWMgdm9pZCB0ZXN0Q2xlYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBBYnN0cmFjdE1l
c3NhZ2VXcmFwcGVyIG1lc3NhZ2UgPQotICAgICAgbmV3IEFic3RyYWN0TWVzc2FnZVdyYXBwZXIu
QnVpbGRlcigKLSAgICAgICAgICBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcihUZXN0VXRpbC5nZXRB
bGxTZXQoKSkpCi0gICAgICAgIC5jbGVhcigpLmJ1aWxkKCk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0
Q2xlYXIoKFRlc3RBbGxUeXBlcykgbWVzc2FnZS53cmFwcGVkTWVzc2FnZSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0Q29weSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIEFic3RyYWN0TWVz
c2FnZVdyYXBwZXIgbWVzc2FnZSA9Ci0gICAgICBuZXcgQWJzdHJhY3RNZXNzYWdlV3JhcHBlci5C
dWlsZGVyKFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkpCi0gICAgICAgIC5tZXJnZUZyb20oVGVz
dFV0aWwuZ2V0QWxsU2V0KCkpLmJ1aWxkKCk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRmllbGRz
U2V0KChUZXN0QWxsVHlwZXMpIG1lc3NhZ2Uud3JhcHBlZE1lc3NhZ2UpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdFNlcmlhbGl6ZWRTaXplKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVz
dEFsbFR5cGVzIG1lc3NhZ2UgPSBUZXN0VXRpbC5nZXRBbGxTZXQoKTsKLSAgICBNZXNzYWdlIGFi
c3RyYWN0TWVzc2FnZSA9IG5ldyBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyKFRlc3RVdGlsLmdldEFs
bFNldCgpKTsKLQotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmdldFNlcmlhbGl6ZWRTaXplKCks
Ci0gICAgICAgICAgICAgICAgIGFic3RyYWN0TWVzc2FnZS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgTWVzc2FnZSBhYnN0cmFjdE1lc3NhZ2UgPSBuZXcgQWJzdHJhY3RNZXNzYWdlV3Jh
cHBlcihUZXN0VXRpbC5nZXRBbGxTZXQoKSk7Ci0KLSAgICBUZXN0VXRpbC5hc3NlcnRBbGxGaWVs
ZHNTZXQoCi0gICAgICBUZXN0QWxsVHlwZXMucGFyc2VGcm9tKGFic3RyYWN0TWVzc2FnZS50b0J5
dGVTdHJpbmcoKSkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKFRlc3RVdGlsLmdldEFsbFNldCgpLnRv
Qnl0ZVN0cmluZygpLAotICAgICAgICAgICAgICAgICBhYnN0cmFjdE1lc3NhZ2UudG9CeXRlU3Ry
aW5nKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNpbmcoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyLkJ1aWxkZXIgYnVpbGRlciA9Ci0gICAg
ICBuZXcgQWJzdHJhY3RNZXNzYWdlV3JhcHBlci5CdWlsZGVyKFRlc3RBbGxUeXBlcy5uZXdCdWls
ZGVyKCkpOwotICAgIEFic3RyYWN0TWVzc2FnZVdyYXBwZXIgbWVzc2FnZSA9Ci0gICAgICBidWls
ZGVyLm1lcmdlRnJvbShUZXN0VXRpbC5nZXRBbGxTZXQoKS50b0J5dGVTdHJpbmcoKSkuYnVpbGQo
KTsKLSAgICBUZXN0VXRpbC5hc3NlcnRBbGxGaWVsZHNTZXQoKFRlc3RBbGxUeXBlcykgbWVzc2Fn
ZS53cmFwcGVkTWVzc2FnZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2luZ1VuaW5p
dGlhbGl6ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0UmVxdWlyZWRGb3JlaWduLkJ1
aWxkZXIgYnVpbGRlciA9IFRlc3RSZXF1aXJlZEZvcmVpZ24ubmV3QnVpbGRlcigpOwotICAgIGJ1
aWxkZXIuZ2V0T3B0aW9uYWxNZXNzYWdlQnVpbGRlcigpLnNldER1bW15MigxMCk7Ci0gICAgQnl0
ZVN0cmluZyBieXRlcyA9IGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCkudG9CeXRlU3RyaW5nKCk7Ci0g
ICAgTWVzc2FnZS5CdWlsZGVyIGFic3RyYWN0TWVzc2FnZUJ1aWxkZXIgPQotICAgICAgICBuZXcg
QWJzdHJhY3RNZXNzYWdlV3JhcHBlci5CdWlsZGVyKFRlc3RSZXF1aXJlZEZvcmVpZ24ubmV3QnVp
bGRlcigpKTsKLSAgICAvLyBtZXJnZUZyb20oKSBzaG91bGQgbm90IHRocm93IGluaXRpYWxpemF0
aW9uIGVycm9yLgotICAgIGFic3RyYWN0TWVzc2FnZUJ1aWxkZXIubWVyZ2VGcm9tKGJ5dGVzKS5i
dWlsZFBhcnRpYWwoKTsKLSAgICB0cnkgewotICAgICAgYWJzdHJhY3RNZXNzYWdlQnVpbGRlci5t
ZXJnZUZyb20oYnl0ZXMpLmJ1aWxkKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5p
bml0aWFsaXplZE1lc3NhZ2VFeGNlcHRpb24gZXgpIHsKLSAgICAgIC8vIHBhc3MKLSAgICB9Ci0K
LSAgICAvLyB0ZXN0IER5bmFtaWNNZXNzYWdlIGRpcmVjdGx5LgotICAgIE1lc3NhZ2UuQnVpbGRl
ciBkeW5hbWljTWVzc2FnZUJ1aWxkZXIgPSBEeW5hbWljTWVzc2FnZS5uZXdCdWlsZGVyKAotICAg
ICAgICBUZXN0UmVxdWlyZWRGb3JlaWduLmdldERlc2NyaXB0b3IoKSk7Ci0gICAgLy8gbWVyZ2VG
cm9tKCkgc2hvdWxkIG5vdCB0aHJvdyBpbml0aWFsaXphdGlvbiBlcnJvci4KLSAgICBkeW5hbWlj
TWVzc2FnZUJ1aWxkZXIubWVyZ2VGcm9tKGJ5dGVzKS5idWlsZFBhcnRpYWwoKTsKLSAgICB0cnkg
ewotICAgICAgZHluYW1pY01lc3NhZ2VCdWlsZGVyLm1lcmdlRnJvbShieXRlcykuYnVpbGQoKTsK
LSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbmluaXRpYWxpemVkTWVzc2FnZUV4Y2VwdGlv
biBleCkgewotICAgICAgLy8gcGFzcwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQ
YWNrZWRTZXJpYWxpemF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgTWVzc2FnZSBhYnN0
cmFjdE1lc3NhZ2UgPQotICAgICAgICBuZXcgQWJzdHJhY3RNZXNzYWdlV3JhcHBlcihUZXN0VXRp
bC5nZXRQYWNrZWRTZXQoKSk7Ci0KLSAgICBUZXN0VXRpbC5hc3NlcnRQYWNrZWRGaWVsZHNTZXQo
Ci0gICAgICBUZXN0UGFja2VkVHlwZXMucGFyc2VGcm9tKGFic3RyYWN0TWVzc2FnZS50b0J5dGVT
dHJpbmcoKSkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKFRlc3RVdGlsLmdldFBhY2tlZFNldCgpLnRv
Qnl0ZVN0cmluZygpLAotICAgICAgICAgICAgICAgICBhYnN0cmFjdE1lc3NhZ2UudG9CeXRlU3Ry
aW5nKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhY2tlZFBhcnNpbmcoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyLkJ1aWxkZXIgYnVpbGRlciA9
Ci0gICAgICBuZXcgQWJzdHJhY3RNZXNzYWdlV3JhcHBlci5CdWlsZGVyKFRlc3RQYWNrZWRUeXBl
cy5uZXdCdWlsZGVyKCkpOwotICAgIEFic3RyYWN0TWVzc2FnZVdyYXBwZXIgbWVzc2FnZSA9Ci0g
ICAgICBidWlsZGVyLm1lcmdlRnJvbShUZXN0VXRpbC5nZXRQYWNrZWRTZXQoKS50b0J5dGVTdHJp
bmcoKSkuYnVpbGQoKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRQYWNrZWRGaWVsZHNTZXQoKFRlc3RQ
YWNrZWRUeXBlcykgbWVzc2FnZS53cmFwcGVkTWVzc2FnZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0VW5wYWNrZWRTZXJpYWxpemF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgTWVz
c2FnZSBhYnN0cmFjdE1lc3NhZ2UgPQotICAgICAgbmV3IEFic3RyYWN0TWVzc2FnZVdyYXBwZXIo
VGVzdFV0aWwuZ2V0VW5wYWNrZWRTZXQoKSk7Ci0KLSAgICBUZXN0VXRpbC5hc3NlcnRVbnBhY2tl
ZEZpZWxkc1NldCgKLSAgICAgIFRlc3RVbnBhY2tlZFR5cGVzLnBhcnNlRnJvbShhYnN0cmFjdE1l
c3NhZ2UudG9CeXRlU3RyaW5nKCkpKTsKLQotICAgIGFzc2VydEVxdWFscyhUZXN0VXRpbC5nZXRV
bnBhY2tlZFNldCgpLnRvQnl0ZVN0cmluZygpLAotICAgICAgICAgICAgICAgICBhYnN0cmFjdE1l
c3NhZ2UudG9CeXRlU3RyaW5nKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlUGFj
a2VkVG9VbnBhY2tlZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIEFic3RyYWN0TWVzc2FnZVdy
YXBwZXIuQnVpbGRlciBidWlsZGVyID0KLSAgICAgIG5ldyBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVy
LkJ1aWxkZXIoVGVzdFVucGFja2VkVHlwZXMubmV3QnVpbGRlcigpKTsKLSAgICBBYnN0cmFjdE1l
c3NhZ2VXcmFwcGVyIG1lc3NhZ2UgPQotICAgICAgYnVpbGRlci5tZXJnZUZyb20oVGVzdFV0aWwu
Z2V0UGFja2VkU2V0KCkudG9CeXRlU3RyaW5nKCkpLmJ1aWxkKCk7Ci0gICAgVGVzdFV0aWwuYXNz
ZXJ0VW5wYWNrZWRGaWVsZHNTZXQoCi0gICAgICAoVGVzdFVucGFja2VkVHlwZXMpIG1lc3NhZ2Uu
d3JhcHBlZE1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlVW5wYWNrZWRU
b1BhY2tlZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIEFic3RyYWN0TWVzc2FnZVdyYXBwZXIu
QnVpbGRlciBidWlsZGVyID0KLSAgICAgIG5ldyBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyLkJ1aWxk
ZXIoVGVzdFBhY2tlZFR5cGVzLm5ld0J1aWxkZXIoKSk7Ci0gICAgQWJzdHJhY3RNZXNzYWdlV3Jh
cHBlciBtZXNzYWdlID0KLSAgICAgIGJ1aWxkZXIubWVyZ2VGcm9tKFRlc3RVdGlsLmdldFVucGFj
a2VkU2V0KCkudG9CeXRlU3RyaW5nKCkpLmJ1aWxkKCk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0UGFj
a2VkRmllbGRzU2V0KChUZXN0UGFja2VkVHlwZXMpIG1lc3NhZ2Uud3JhcHBlZE1lc3NhZ2UpOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVucGFja2VkUGFyc2luZygpIHRocm93cyBFeGNlcHRp
b24gewotICAgIEFic3RyYWN0TWVzc2FnZVdyYXBwZXIuQnVpbGRlciBidWlsZGVyID0KLSAgICAg
IG5ldyBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyLkJ1aWxkZXIoVGVzdFVucGFja2VkVHlwZXMubmV3
QnVpbGRlcigpKTsKLSAgICBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyIG1lc3NhZ2UgPQotICAgICAg
YnVpbGRlci5tZXJnZUZyb20oVGVzdFV0aWwuZ2V0VW5wYWNrZWRTZXQoKS50b0J5dGVTdHJpbmco
KSkuYnVpbGQoKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRVbnBhY2tlZEZpZWxkc1NldCgKLSAgICAg
IChUZXN0VW5wYWNrZWRUeXBlcykgbWVzc2FnZS53cmFwcGVkTWVzc2FnZSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0T3B0aW1pemVkRm9yU2l6ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAg
IC8vIFdlJ3JlIG1vc3RseSBvbmx5IGNoZWNraW5nIHRoYXQgdGhpcyBjbGFzcyB3YXMgY29tcGls
ZWQgc3VjY2Vzc2Z1bGx5LgotICAgIFRlc3RPcHRpbWl6ZWRGb3JTaXplIG1lc3NhZ2UgPQotICAg
ICAgVGVzdE9wdGltaXplZEZvclNpemUubmV3QnVpbGRlcigpLnNldEkoMSkuYnVpbGQoKTsKLSAg
ICBtZXNzYWdlID0gVGVzdE9wdGltaXplZEZvclNpemUucGFyc2VGcm9tKG1lc3NhZ2UudG9CeXRl
U3RyaW5nKCkpOwotICAgIGFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFNlcmlhbGl6ZWRTaXpl
KCkpOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gVGVzdHMgZm9yIGlzSW5pdGlhbGl6ZWQo
KS4KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUZXN0UmVxdWlyZWQgVEVTVF9SRVFVSVJFRF9V
TklOSVRJQUxJWkVEID0KLSAgICBUZXN0UmVxdWlyZWQuZ2V0RGVmYXVsdEluc3RhbmNlKCk7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFRlc3RSZXF1aXJlZCBURVNUX1JFUVVJUkVEX0lOSVRJQUxJ
WkVEID0KLSAgICBUZXN0UmVxdWlyZWQubmV3QnVpbGRlcigpLnNldEEoMSkuc2V0QigyKS5zZXRD
KDMpLmJ1aWxkKCk7Ci0KLSAgcHVibGljIHZvaWQgdGVzdElzSW5pdGlhbGl6ZWQoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBUZXN0UmVxdWlyZWQuQnVpbGRlciBidWlsZGVyID0gVGVzdFJlcXVp
cmVkLm5ld0J1aWxkZXIoKTsKLSAgICBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyLkJ1aWxkZXIgYWJz
dHJhY3RCdWlsZGVyID0KLSAgICAgIG5ldyBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyLkJ1aWxkZXIo
YnVpbGRlcik7Ci0KLSAgICBhc3NlcnRGYWxzZShhYnN0cmFjdEJ1aWxkZXIuaXNJbml0aWFsaXpl
ZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoImEsIGIsIGMiLCBhYnN0cmFjdEJ1aWxkZXIuZ2V0SW5p
dGlhbGl6YXRpb25FcnJvclN0cmluZygpKTsKLSAgICBidWlsZGVyLnNldEEoMSk7Ci0gICAgYXNz
ZXJ0RmFsc2UoYWJzdHJhY3RCdWlsZGVyLmlzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKCJiLCBjIiwgYWJzdHJhY3RCdWlsZGVyLmdldEluaXRpYWxpemF0aW9uRXJyb3JTdHJpbmco
KSk7Ci0gICAgYnVpbGRlci5zZXRCKDEpOwotICAgIGFzc2VydEZhbHNlKGFic3RyYWN0QnVpbGRl
ci5pc0luaXRpYWxpemVkKCkpOwotICAgIGFzc2VydEVxdWFscygiYyIsIGFic3RyYWN0QnVpbGRl
ci5nZXRJbml0aWFsaXphdGlvbkVycm9yU3RyaW5nKCkpOwotICAgIGJ1aWxkZXIuc2V0QygxKTsK
LSAgICBhc3NlcnRUcnVlKGFic3RyYWN0QnVpbGRlci5pc0luaXRpYWxpemVkKCkpOwotICAgIGFz
c2VydEVxdWFscygiIiwgYWJzdHJhY3RCdWlsZGVyLmdldEluaXRpYWxpemF0aW9uRXJyb3JTdHJp
bmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Rm9yZWlnbklzSW5pdGlhbGl6ZWQoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0UmVxdWlyZWRGb3JlaWduLkJ1aWxkZXIgYnVpbGRl
ciA9IFRlc3RSZXF1aXJlZEZvcmVpZ24ubmV3QnVpbGRlcigpOwotICAgIEFic3RyYWN0TWVzc2Fn
ZVdyYXBwZXIuQnVpbGRlciBhYnN0cmFjdEJ1aWxkZXIgPQotICAgICAgbmV3IEFic3RyYWN0TWVz
c2FnZVdyYXBwZXIuQnVpbGRlcihidWlsZGVyKTsKLQotICAgIGFzc2VydFRydWUoYWJzdHJhY3RC
dWlsZGVyLmlzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIiLCBhYnN0cmFjdEJ1
aWxkZXIuZ2V0SW5pdGlhbGl6YXRpb25FcnJvclN0cmluZygpKTsKLQotICAgIGJ1aWxkZXIuc2V0
T3B0aW9uYWxNZXNzYWdlKFRFU1RfUkVRVUlSRURfVU5JTklUSUFMSVpFRCk7Ci0gICAgYXNzZXJ0
RmFsc2UoYWJzdHJhY3RCdWlsZGVyLmlzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KAotICAgICAgICAib3B0aW9uYWxfbWVzc2FnZS5hLCBvcHRpb25hbF9tZXNzYWdlLmIsIG9wdGlv
bmFsX21lc3NhZ2UuYyIsCi0gICAgICAgIGFic3RyYWN0QnVpbGRlci5nZXRJbml0aWFsaXphdGlv
bkVycm9yU3RyaW5nKCkpOwotCi0gICAgYnVpbGRlci5zZXRPcHRpb25hbE1lc3NhZ2UoVEVTVF9S
RVFVSVJFRF9JTklUSUFMSVpFRCk7Ci0gICAgYXNzZXJ0VHJ1ZShhYnN0cmFjdEJ1aWxkZXIuaXNJ
bml0aWFsaXplZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoIiIsIGFic3RyYWN0QnVpbGRlci5nZXRJ
bml0aWFsaXphdGlvbkVycm9yU3RyaW5nKCkpOwotCi0gICAgYnVpbGRlci5hZGRSZXBlYXRlZE1l
c3NhZ2UoVEVTVF9SRVFVSVJFRF9VTklOSVRJQUxJWkVEKTsKLSAgICBhc3NlcnRGYWxzZShhYnN0
cmFjdEJ1aWxkZXIuaXNJbml0aWFsaXplZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAg
ICJyZXBlYXRlZF9tZXNzYWdlWzBdLmEsIHJlcGVhdGVkX21lc3NhZ2VbMF0uYiwgcmVwZWF0ZWRf
bWVzc2FnZVswXS5jIiwKLSAgICAgICAgYWJzdHJhY3RCdWlsZGVyLmdldEluaXRpYWxpemF0aW9u
RXJyb3JTdHJpbmcoKSk7Ci0KLSAgICBidWlsZGVyLnNldFJlcGVhdGVkTWVzc2FnZSgwLCBURVNU
X1JFUVVJUkVEX0lOSVRJQUxJWkVEKTsKLSAgICBhc3NlcnRUcnVlKGFic3RyYWN0QnVpbGRlci5p
c0luaXRpYWxpemVkKCkpOwotICAgIGFzc2VydEVxdWFscygiIiwgYWJzdHJhY3RCdWlsZGVyLmdl
dEluaXRpYWxpemF0aW9uRXJyb3JTdHJpbmcoKSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAv
LyBUZXN0cyBmb3IgbWVyZ2VGcm9tCi0KLSAgc3RhdGljIGZpbmFsIFRlc3RBbGxUeXBlcyBNRVJH
RV9TT1VSQ0UgPQotICAgIFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkKLSAgICAgIC5zZXRPcHRp
b25hbEludDMyKDEpCi0gICAgICAuc2V0T3B0aW9uYWxTdHJpbmcoImZvbyIpCi0gICAgICAuc2V0
T3B0aW9uYWxGb3JlaWduTWVzc2FnZShGb3JlaWduTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2Uo
KSkKLSAgICAgIC5hZGRSZXBlYXRlZFN0cmluZygiYmFyIikKLSAgICAgIC5idWlsZCgpOwotCi0g
IHN0YXRpYyBmaW5hbCBUZXN0QWxsVHlwZXMgTUVSR0VfREVTVCA9Ci0gICAgVGVzdEFsbFR5cGVz
Lm5ld0J1aWxkZXIoKQotICAgICAgLnNldE9wdGlvbmFsSW50NjQoMikKLSAgICAgIC5zZXRPcHRp
b25hbFN0cmluZygiYmF6IikKLSAgICAgIC5zZXRPcHRpb25hbEZvcmVpZ25NZXNzYWdlKEZvcmVp
Z25NZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRDKDMpLmJ1aWxkKCkpCi0gICAgICAuYWRkUmVwZWF0
ZWRTdHJpbmcoInF1eCIpCi0gICAgICAuYnVpbGQoKTsKLQotICBzdGF0aWMgZmluYWwgU3RyaW5n
IE1FUkdFX1JFU1VMVF9URVhUID0KLSAgICAgICJvcHRpb25hbF9pbnQzMjogMVxuIiArCi0gICAg
ICAib3B0aW9uYWxfaW50NjQ6IDJcbiIgKwotICAgICAgIm9wdGlvbmFsX3N0cmluZzogXCJmb29c
IlxuIiArCi0gICAgICAib3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlIHtcbiIgKwotICAgICAgIiAg
YzogM1xuIiArCi0gICAgICAifVxuIiArCi0gICAgICAicmVwZWF0ZWRfc3RyaW5nOiBcInF1eFwi
XG4iICsKLSAgICAgICJyZXBlYXRlZF9zdHJpbmc6IFwiYmFyXCJcbiI7Ci0KLSAgcHVibGljIHZv
aWQgdGVzdE1lcmdlRnJvbSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIEFic3RyYWN0TWVzc2Fn
ZVdyYXBwZXIgcmVzdWx0ID0KLSAgICAgIG5ldyBBYnN0cmFjdE1lc3NhZ2VXcmFwcGVyLkJ1aWxk
ZXIoCi0gICAgICAgIFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKE1FUkdFX0RFU1QpKQotICAgICAg
Lm1lcmdlRnJvbShNRVJHRV9TT1VSQ0UpLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoTUVS
R0VfUkVTVUxUX1RFWFQsIHJlc3VsdC50b1N0cmluZygpKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gIC8vIFRlc3RzIGZvciBlcXVhbHMgYW5kIGhhc2hDb2RlCi0KLSAgcHVibGljIHZvaWQgdGVz
dEVxdWFsc0FuZEhhc2hDb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVz
IGEgPSBUZXN0VXRpbC5nZXRBbGxTZXQoKTsKLSAgICBUZXN0QWxsVHlwZXMgYiA9IFRlc3RBbGxU
eXBlcy5uZXdCdWlsZGVyKCkuYnVpbGQoKTsKLSAgICBUZXN0QWxsVHlwZXMgYyA9IFRlc3RBbGxU
eXBlcy5uZXdCdWlsZGVyKGIpLmFkZFJlcGVhdGVkU3RyaW5nKCJ4IikuYnVpbGQoKTsKLSAgICBU
ZXN0QWxsVHlwZXMgZCA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKGMpLmFkZFJlcGVhdGVkU3Ry
aW5nKCJ5IikuYnVpbGQoKTsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucyBlID0gVGVzdFV0aWwuZ2V0
QWxsRXh0ZW5zaW9uc1NldCgpOwotICAgIFRlc3RBbGxFeHRlbnNpb25zIGYgPSBUZXN0QWxsRXh0
ZW5zaW9ucy5uZXdCdWlsZGVyKGUpCi0gICAgICAgIC5hZGRFeHRlbnNpb24oVW5pdHRlc3RQcm90
by5yZXBlYXRlZEludDMyRXh0ZW5zaW9uLCA5OTkpLmJ1aWxkKCk7Ci0KLSAgICBjaGVja0VxdWFs
c0lzQ29uc2lzdGVudChhKTsKLSAgICBjaGVja0VxdWFsc0lzQ29uc2lzdGVudChiKTsKLSAgICBj
aGVja0VxdWFsc0lzQ29uc2lzdGVudChjKTsKLSAgICBjaGVja0VxdWFsc0lzQ29uc2lzdGVudChk
KTsKLSAgICBjaGVja0VxdWFsc0lzQ29uc2lzdGVudChlKTsKLSAgICBjaGVja0VxdWFsc0lzQ29u
c2lzdGVudChmKTsKLQotICAgIGNoZWNrTm90RXF1YWwoYSwgYik7Ci0gICAgY2hlY2tOb3RFcXVh
bChhLCBjKTsKLSAgICBjaGVja05vdEVxdWFsKGEsIGQpOwotICAgIGNoZWNrTm90RXF1YWwoYSwg
ZSk7Ci0gICAgY2hlY2tOb3RFcXVhbChhLCBmKTsKLQotICAgIGNoZWNrTm90RXF1YWwoYiwgYyk7
Ci0gICAgY2hlY2tOb3RFcXVhbChiLCBkKTsKLSAgICBjaGVja05vdEVxdWFsKGIsIGUpOwotICAg
IGNoZWNrTm90RXF1YWwoYiwgZik7Ci0KLSAgICBjaGVja05vdEVxdWFsKGMsIGQpOwotICAgIGNo
ZWNrTm90RXF1YWwoYywgZSk7Ci0gICAgY2hlY2tOb3RFcXVhbChjLCBmKTsKLQotICAgIGNoZWNr
Tm90RXF1YWwoZCwgZSk7Ci0gICAgY2hlY2tOb3RFcXVhbChkLCBmKTsKLQotICAgIGNoZWNrTm90
RXF1YWwoZSwgZik7Ci0KLSAgICAvLyBEZXNlcmlhbGl6aW5nIGludG8gdGhlIFRlc3RFbXB0eU1l
c3NhZ2Ugc3VjaCB0aGF0IGV2ZXJ5IGZpZWxkCi0gICAgLy8gaXMgYW4ge0BsaW5rIFVua25vd25G
aWVsZFNldC5GaWVsZH0uCi0gICAgVW5pdHRlc3RQcm90by5UZXN0RW1wdHlNZXNzYWdlIGVVbmtu
b3duRmllbGRzID0KLSAgICAgICAgVW5pdHRlc3RQcm90by5UZXN0RW1wdHlNZXNzYWdlLnBhcnNl
RnJvbShlLnRvQnl0ZUFycmF5KCkpOwotICAgIFVuaXR0ZXN0UHJvdG8uVGVzdEVtcHR5TWVzc2Fn
ZSBmVW5rbm93bkZpZWxkcyA9Ci0gICAgICAgIFVuaXR0ZXN0UHJvdG8uVGVzdEVtcHR5TWVzc2Fn
ZS5wYXJzZUZyb20oZi50b0J5dGVBcnJheSgpKTsKLSAgICBjaGVja05vdEVxdWFsKGVVbmtub3du
RmllbGRzLCBmVW5rbm93bkZpZWxkcyk7Ci0gICAgY2hlY2tFcXVhbHNJc0NvbnNpc3RlbnQoZVVu
a25vd25GaWVsZHMpOwotICAgIGNoZWNrRXF1YWxzSXNDb25zaXN0ZW50KGZVbmtub3duRmllbGRz
KTsKLQotICAgIC8vIFN1YnNlcXVlbnQgcmVjb25zdGl0dXRpb25zIHNob3VsZCBiZSBpZGVudGlj
YWwKLSAgICBVbml0dGVzdFByb3RvLlRlc3RFbXB0eU1lc3NhZ2UgZVVua25vd25GaWVsZHMyID0K
LSAgICAgICAgVW5pdHRlc3RQcm90by5UZXN0RW1wdHlNZXNzYWdlLnBhcnNlRnJvbShlLnRvQnl0
ZUFycmF5KCkpOwotICAgIGNoZWNrRXF1YWxzSXNDb25zaXN0ZW50KGVVbmtub3duRmllbGRzLCBl
VW5rbm93bkZpZWxkczIpOwotICB9Ci0KLQotICAvKioKLSAgICogQXNzZXJ0cyB0aGF0IHRoZSBn
aXZlbiBwcm90byBoYXMgc3ltbWV0cmljIGVxdWFscyBhbmQgaGFzaENvZGUgbWV0aG9kcy4KLSAg
ICovCi0gIHByaXZhdGUgdm9pZCBjaGVja0VxdWFsc0lzQ29uc2lzdGVudChNZXNzYWdlIG1lc3Nh
Z2UpIHsKLSAgICAvLyBPYmplY3Qgc2hvdWxkIGJlIGVxdWFsIHRvIGl0c2VsZi4KLSAgICBhc3Nl
cnRFcXVhbHMobWVzc2FnZSwgbWVzc2FnZSk7Ci0KLSAgICAvLyBPYmplY3Qgc2hvdWxkIGJlIGVx
dWFsIHRvIGEgZHluYW1pYyBjb3B5IG9mIGl0c2VsZi4KLSAgICBEeW5hbWljTWVzc2FnZSBkeW5h
bWljID0gRHluYW1pY01lc3NhZ2UubmV3QnVpbGRlcihtZXNzYWdlKS5idWlsZCgpOwotICAgIGNo
ZWNrRXF1YWxzSXNDb25zaXN0ZW50KG1lc3NhZ2UsIGR5bmFtaWMpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gcHJvdG9zIGFyZSBlcXVhbCBhbmQgaGF2ZSB0aGUg
c2FtZSBoYXNoIGNvZGUuCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tFcXVhbHNJc0NvbnNp
c3RlbnQoTWVzc2FnZSBtZXNzYWdlMSwgTWVzc2FnZSBtZXNzYWdlMikgewotICAgIGFzc2VydEVx
dWFscyhtZXNzYWdlMSwgbWVzc2FnZTIpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlMiwgbWVz
c2FnZTEpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlMi5oYXNoQ29kZSgpLCBtZXNzYWdlMS5o
YXNoQ29kZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBc3NlcnRzIHRoYXQgdGhlIGdpdmVuIHBy
b3RvcyBhcmUgbm90IGVxdWFsIGFuZCBoYXZlIGRpZmZlcmVudCBoYXNoIGNvZGVzLgotICAgKgot
ICAgKiBAd2FybmluZyBJdCdzIHZhbGlkIGZvciBub24tZXF1YWwgb2JqZWN0cyB0byBoYXZlIHRo
ZSBzYW1lIGhhc2ggY29kZSwgc28KLSAgICogICB0aGlzIHRlc3QgaXMgc3RyaWN0ZXIgdGhhbiBp
dCBuZWVkcyB0byBiZS4gSG93ZXZlciwgdGhpcyBzaG91bGQgaGFwcGVuCi0gICAqICAgcmVsYXRp
dmVseSByYXJlbHkuCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tOb3RFcXVhbChNZXNzYWdl
IG0xLCBNZXNzYWdlIG0yKSB7Ci0gICAgU3RyaW5nIGVxdWFsc0Vycm9yID0gU3RyaW5nLmZvcm1h
dCgiJXMgc2hvdWxkIG5vdCBiZSBlcXVhbCB0byAlcyIsIG0xLCBtMik7Ci0gICAgYXNzZXJ0RmFs
c2UoZXF1YWxzRXJyb3IsIG0xLmVxdWFscyhtMikpOwotICAgIGFzc2VydEZhbHNlKGVxdWFsc0Vy
cm9yLCBtMi5lcXVhbHMobTEpKTsKLQotICAgIGFzc2VydEZhbHNlKAotICAgICAgICBTdHJpbmcu
Zm9ybWF0KCIlcyBzaG91bGQgaGF2ZSBhIGRpZmZlcmVudCBoYXNoIGNvZGUgZnJvbSAlcyIsIG0x
LCBtMiksCi0gICAgICAgIG0xLmhhc2hDb2RlKCkgPT0gbTIuaGFzaENvZGUoKSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tCeXRlU3RyaW5nSXNVdGY4T25VdGY4KCkgewotICAgIEJ5
dGVTdHJpbmcgYnl0ZVN0cmluZyA9IEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJzb21lIHRleHQi
KTsKLSAgICBBYnN0cmFjdE1lc3NhZ2VMaXRlLmNoZWNrQnl0ZVN0cmluZ0lzVXRmOChieXRlU3Ry
aW5nKTsKLSAgICAvLyBObyBleGNlcHRpb24gdGhyb3duLgotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdENoZWNrQnl0ZVN0cmluZ0lzVXRmOE9uTm9uVXRmOCgpIHsKLSAgICBCeXRlU3RyaW5nIGJ5
dGVTdHJpbmcgPQotICAgICAgICBCeXRlU3RyaW5nLmNvcHlGcm9tKG5ldyBieXRlW117KGJ5dGUp
IDB4ODB9KTsgLy8gQSBsb25lIGNvbnRpbnVhdGlvbiBieXRlLgotICAgIHRyeSB7Ci0gICAgICBB
YnN0cmFjdE1lc3NhZ2VMaXRlLmNoZWNrQnl0ZVN0cmluZ0lzVXRmOChieXRlU3RyaW5nKTsKLSAg
ICAgIGZhaWwoIkV4cGVjdGVkIEFic3RyYWN0TWVzc2FnZUxpdGUuY2hlY2tCeXRlU3RyaW5nSXNV
dGY4IHRvIHRocm93IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIpOwotICAgIH0gY2F0Y2ggKEls
bGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLSAgICAgIGFzc2VydEVxdWFscygi
Qnl0ZSBzdHJpbmcgaXMgbm90IFVURi04LiIsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwotICAg
IH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvQW55VGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL0FueVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2Y5MWVkOTFjNjFkN2Y4ZGU3NmJjOTI1OWVkYTRjOTgyYzIwOGJkNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvQW55VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5n
b29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBhbnlfdGVzdC5BbnlUZXN0UHJvdG8uVGVzdEFueTsK
LWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLQot
aW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotLyoqCi0gKiBVbml0IHRlc3RzIGZv
ciBBbnkgbWVzc2FnZS4KLSAqLwotcHVibGljIGNsYXNzIEFueVRlc3QgZXh0ZW5kcyBUZXN0Q2Fz
ZSB7Ci0gIHB1YmxpYyB2b2lkIHRlc3RBbnlHZW5lcmF0ZWRBcGkoKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1
aWxkZXIoKTsKLSAgICBUZXN0VXRpbC5zZXRBbGxGaWVsZHMoYnVpbGRlcik7Ci0gICAgVGVzdEFs
bFR5cGVzIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBUZXN0QW55IGNvbnRhaW5l
ciA9IFRlc3RBbnkubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRWYWx1ZShBbnkucGFjayhtZXNz
YWdlKSkuYnVpbGQoKTsKLQotICAgIGFzc2VydFRydWUoY29udGFpbmVyLmdldFZhbHVlKCkuaXMo
VGVzdEFsbFR5cGVzLmNsYXNzKSk7Ci0gICAgYXNzZXJ0RmFsc2UoY29udGFpbmVyLmdldFZhbHVl
KCkuaXMoVGVzdEFueS5jbGFzcykpOwotCi0gICAgVGVzdEFsbFR5cGVzIHJlc3VsdCA9IGNvbnRh
aW5lci5nZXRWYWx1ZSgpLnVucGFjayhUZXN0QWxsVHlwZXMuY2xhc3MpOwotICAgIFRlc3RVdGls
LmFzc2VydEFsbEZpZWxkc1NldChyZXN1bHQpOwotCi0KLSAgICAvLyBVbnBhY2tpbmcgdG8gYSB3
cm9uZyB0eXBlIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgotICAgIHRyeSB7Ci0gICAgICBUZXN0
QW55IHdyb25nTWVzc2FnZSA9IGNvbnRhaW5lci5nZXRWYWx1ZSgpLnVucGFjayhUZXN0QW55LmNs
YXNzKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsKLSAgICB9IGNhdGNo
IChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQu
Ci0gICAgfQotCi0gICAgLy8gVGVzdCB0aGF0IHVucGFja2luZyB0aHJvd3MgYW4gZXhjZXB0aW9u
IGlmIHBhcnNpbmcgZmFpbHMuCi0gICAgVGVzdEFueS5CdWlsZGVyIGNvbnRhaW5lckJ1aWxkZXIg
PSBjb250YWluZXIudG9CdWlsZGVyKCk7Ci0gICAgY29udGFpbmVyQnVpbGRlci5nZXRWYWx1ZUJ1
aWxkZXIoKS5zZXRWYWx1ZSgKLSAgICAgICAgQnl0ZVN0cmluZy5jb3B5RnJvbShuZXcgYnl0ZVtd
ezB4MTF9KSk7Ci0gICAgY29udGFpbmVyID0gY29udGFpbmVyQnVpbGRlci5idWlsZCgpOwotICAg
IHRyeSB7Ci0gICAgICBUZXN0QWxsVHlwZXMgcGFyc2luZ0ZhaWxlZCA9IGNvbnRhaW5lci5nZXRW
YWx1ZSgpLnVucGFjayhUZXN0QWxsVHlwZXMuY2xhc3MpOwotICAgICAgZmFpbCgiRXhjZXB0aW9u
IGlzIGV4cGVjdGVkLiIpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZC4KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0Q3VzdG9tVHlwZVVybHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlw
ZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0
VXRpbC5zZXRBbGxGaWVsZHMoYnVpbGRlcik7Ci0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UgPSBi
dWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBUZXN0QW55IGNvbnRhaW5lciA9IFRlc3RBbnkubmV3QnVp
bGRlcigpCi0gICAgICAgIC5zZXRWYWx1ZShBbnkucGFjayhtZXNzYWdlLCAieHh4LmNvbSIpKS5i
dWlsZCgpOwotCi0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAieHh4LmNvbS8iICsgVGVzdEFs
bFR5cGVzLmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLAotICAgICAgICBjb250YWluZXIu
Z2V0VmFsdWUoKS5nZXRUeXBlVXJsKCkpOwotCi0gICAgYXNzZXJ0VHJ1ZShjb250YWluZXIuZ2V0
VmFsdWUoKS5pcyhUZXN0QWxsVHlwZXMuY2xhc3MpKTsKLSAgICBhc3NlcnRGYWxzZShjb250YWlu
ZXIuZ2V0VmFsdWUoKS5pcyhUZXN0QW55LmNsYXNzKSk7Ci0KLSAgICBUZXN0QWxsVHlwZXMgcmVz
dWx0ID0gY29udGFpbmVyLmdldFZhbHVlKCkudW5wYWNrKFRlc3RBbGxUeXBlcy5jbGFzcyk7Ci0g
ICAgVGVzdFV0aWwuYXNzZXJ0QWxsRmllbGRzU2V0KHJlc3VsdCk7Ci0KLSAgICBjb250YWluZXIg
PSBUZXN0QW55Lm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0VmFsdWUoQW55LnBhY2sobWVzc2Fn
ZSwgInl5eS5jb20vIikpLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ5
eXkuY29tLyIgKyBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1lKCksCi0g
ICAgICAgIGNvbnRhaW5lci5nZXRWYWx1ZSgpLmdldFR5cGVVcmwoKSk7Ci0KLSAgICBhc3NlcnRU
cnVlKGNvbnRhaW5lci5nZXRWYWx1ZSgpLmlzKFRlc3RBbGxUeXBlcy5jbGFzcykpOwotICAgIGFz
c2VydEZhbHNlKGNvbnRhaW5lci5nZXRWYWx1ZSgpLmlzKFRlc3RBbnkuY2xhc3MpKTsKLQotICAg
IHJlc3VsdCA9IGNvbnRhaW5lci5nZXRWYWx1ZSgpLnVucGFjayhUZXN0QWxsVHlwZXMuY2xhc3Mp
OwotICAgIFRlc3RVdGlsLmFzc2VydEFsbEZpZWxkc1NldChyZXN1bHQpOwotCi0gICAgY29udGFp
bmVyID0gVGVzdEFueS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldFZhbHVlKEFueS5wYWNrKG1l
c3NhZ2UsICIiKSkuYnVpbGQoKTsKLQotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgIi8iICsg
VGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLAotICAgICAgICBjb250
YWluZXIuZ2V0VmFsdWUoKS5nZXRUeXBlVXJsKCkpOwotCi0gICAgYXNzZXJ0VHJ1ZShjb250YWlu
ZXIuZ2V0VmFsdWUoKS5pcyhUZXN0QWxsVHlwZXMuY2xhc3MpKTsKLSAgICBhc3NlcnRGYWxzZShj
b250YWluZXIuZ2V0VmFsdWUoKS5pcyhUZXN0QW55LmNsYXNzKSk7Ci0KLSAgICByZXN1bHQgPSBj
b250YWluZXIuZ2V0VmFsdWUoKS51bnBhY2soVGVzdEFsbFR5cGVzLmNsYXNzKTsKLSAgICBUZXN0
VXRpbC5hc3NlcnRBbGxGaWVsZHNTZXQocmVzdWx0KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3RDYWNoZWRVbnBhY2tSZXN1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlw
ZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0
VXRpbC5zZXRBbGxGaWVsZHMoYnVpbGRlcik7Ci0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UgPSBi
dWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBUZXN0QW55IGNvbnRhaW5lciA9IFRlc3RBbnkubmV3QnVp
bGRlcigpCi0gICAgICAgIC5zZXRWYWx1ZShBbnkucGFjayhtZXNzYWdlKSkuYnVpbGQoKTsKLQot
ICAgIGFzc2VydFRydWUoY29udGFpbmVyLmdldFZhbHVlKCkuaXMoVGVzdEFsbFR5cGVzLmNsYXNz
KSk7Ci0KLSAgICBUZXN0QWxsVHlwZXMgcmVzdWx0MSA9IGNvbnRhaW5lci5nZXRWYWx1ZSgpLnVu
cGFjayhUZXN0QWxsVHlwZXMuY2xhc3MpOwotICAgIFRlc3RBbGxUeXBlcyByZXN1bHQyID0gY29u
dGFpbmVyLmdldFZhbHVlKCkudW5wYWNrKFRlc3RBbGxUeXBlcy5jbGFzcyk7Ci0gICAgYXNzZXJ0
VHJ1ZShyZXN1bHQxID09IHJlc3VsdDIpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9z
cmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQm9vbGVhbkFycmF5TGlzdFRlc3QuamF2
YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Cb29sZWFuQXJy
YXlMaXN0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGI5NmM2MDJi
ZjFiZDBjMDk5NDFlYzkyZTcyZDI0NmI2N2UyYmQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9Cb29sZWFuQXJyYXlMaXN0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDU1
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNv
bS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy5hc0xp
c3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0
aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbmN1cnJlbnRNb2RpZmljYXRpb25F
eGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioKLSAqIFRlc3RzIGZv
ciB7QGxpbmsgQm9vbGVhbkFycmF5TGlzdH0uCi0gKiAKLSAqIEBhdXRob3IgZHdlaXNAZ29vZ2xl
LmNvbSAoRGFuaWVsIFdlaXMpCi0gKi8KLXB1YmxpYyBjbGFzcyBCb29sZWFuQXJyYXlMaXN0VGVz
dCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEJvb2xlYW5B
cnJheUxpc3QgVU5BUllfTElTVCA9IG5ld0ltbXV0YWJsZUJvb2xlYW5BcnJheUxpc3QodHJ1ZSk7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEJvb2xlYW5BcnJheUxpc3QgVEVSVElBUllfTElTVCA9
Ci0gICAgICBuZXdJbW11dGFibGVCb29sZWFuQXJyYXlMaXN0KHRydWUsIHRydWUsIGZhbHNlKTsK
LSAgCi0gIHByaXZhdGUgQm9vbGVhbkFycmF5TGlzdCBsaXN0OwotICAKLSAgQE92ZXJyaWRlCi0g
IHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgbGlzdCA9IG5l
dyBCb29sZWFuQXJyYXlMaXN0KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUxp
c3RSZXR1cm5zU2FtZUluc3RhbmNlKCkgewotICAgIGFzc2VydFNhbWUoQm9vbGVhbkFycmF5TGlz
dC5lbXB0eUxpc3QoKSwgQm9vbGVhbkFycmF5TGlzdC5lbXB0eUxpc3QoKSk7Ci0gIH0KLSAgCi0g
IHB1YmxpYyB2b2lkIHRlc3RFbXB0eUxpc3RJc0ltbXV0YWJsZSgpIHsKLSAgICBhc3NlcnRJbW11
dGFibGUoQm9vbGVhbkFycmF5TGlzdC5lbXB0eUxpc3QoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2
b2lkIHRlc3RNYWtlSW1tdXRhYmxlKCkgewotICAgIGxpc3QuYWRkQm9vbGVhbih0cnVlKTsKLSAg
ICBsaXN0LmFkZEJvb2xlYW4oZmFsc2UpOwotICAgIGxpc3QuYWRkQm9vbGVhbih0cnVlKTsKLSAg
ICBsaXN0LmFkZEJvb2xlYW4odHJ1ZSk7Ci0gICAgbGlzdC5tYWtlSW1tdXRhYmxlKCk7Ci0gICAg
YXNzZXJ0SW1tdXRhYmxlKGxpc3QpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZp
Y2F0aW9uV2l0aEl0ZXJhdGlvbigpIHsKLSAgICBsaXN0LmFkZEFsbChhc0xpc3QodHJ1ZSwgZmFs
c2UsIGZhbHNlLCB0cnVlKSk7Ci0gICAgSXRlcmF0b3I8Qm9vbGVhbj4gaXRlcmF0b3IgPSBsaXN0
Lml0ZXJhdG9yKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIGxpc3Quc2l6ZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHModHJ1ZSwgKGJvb2xlYW4pIGxpc3QuZ2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMo
dHJ1ZSwgKGJvb2xlYW4pIGl0ZXJhdG9yLm5leHQoKSk7Ci0gICAgbGlzdC5zZXQoMCwgdHJ1ZSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKGZhbHNlLCAoYm9vbGVhbikgaXRlcmF0b3IubmV4dCgpKTsKLSAg
ICAKLSAgICBsaXN0LnJlbW92ZSgwKTsKLSAgICB0cnkgewotICAgICAgaXRlcmF0b3IubmV4dCgp
OwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNl
cHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgaXRlcmF0b3Ig
PSBsaXN0Lml0ZXJhdG9yKCk7Ci0gICAgbGlzdC5hZGQoMCwgZmFsc2UpOwotICAgIHRyeSB7Ci0g
ICAgICBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoQ29uY3Vy
cmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0K
LSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEdldCgpIHsKLSAgICBhc3NlcnRFcXVhbHModHJ1
ZSwgKGJvb2xlYW4pIFRFUlRJQVJZX0xJU1QuZ2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHModHJ1
ZSwgKGJvb2xlYW4pIFRFUlRJQVJZX0xJU1QuZ2V0KDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoZmFs
c2UsIChib29sZWFuKSBURVJUSUFSWV9MSVNULmdldCgyKSk7Ci0gICAgCi0gICAgdHJ5IHsKLSAg
ICAgIFRFUlRJQVJZX0xJU1QuZ2V0KC0xKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJ
bmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQot
ICAgIAotICAgIHRyeSB7Ci0gICAgICBURVJUSUFSWV9MSVNULmdldCgzKTsKLSAgICAgIGZhaWwo
KTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8v
IGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW50KCkgewot
ICAgIGFzc2VydEVxdWFscyh0cnVlLCBURVJUSUFSWV9MSVNULmdldEJvb2xlYW4oMCkpOwotICAg
IGFzc2VydEVxdWFscyh0cnVlLCBURVJUSUFSWV9MSVNULmdldEJvb2xlYW4oMSkpOwotICAgIGFz
c2VydEVxdWFscyhmYWxzZSwgVEVSVElBUllfTElTVC5nZXRCb29sZWFuKDIpKTsKLSAgICAKLSAg
ICB0cnkgewotICAgICAgVEVSVElBUllfTElTVC5nZXQoLTEpOwotICAgICAgZmFpbCgpOwotICAg
IH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0
ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIFRFUlRJQVJZX0xJU1QuZ2V0KDMpOwot
ICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkg
ewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RT
aXplKCkgewotICAgIGFzc2VydEVxdWFscygwLCBCb29sZWFuQXJyYXlMaXN0LmVtcHR5TGlzdCgp
LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIFVOQVJZX0xJU1Quc2l6ZSgpKTsKLSAgICBh
c3NlcnRFcXVhbHMoMywgVEVSVElBUllfTElTVC5zaXplKCkpOwotCi0gICAgbGlzdC5hZGRCb29s
ZWFuKHRydWUpOwotICAgIGxpc3QuYWRkQm9vbGVhbihmYWxzZSk7Ci0gICAgbGlzdC5hZGRCb29s
ZWFuKGZhbHNlKTsKLSAgICBsaXN0LmFkZEJvb2xlYW4oZmFsc2UpOwotICAgIGFzc2VydEVxdWFs
cyg0LCBsaXN0LnNpemUoKSk7Ci0gICAgCi0gICAgbGlzdC5yZW1vdmUoMCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDMsIGxpc3Quc2l6ZSgpKTsKLSAgICAKLSAgICBsaXN0LmFkZCh0cnVlKTsKLSAgICBh
c3NlcnRFcXVhbHMoNCwgbGlzdC5zaXplKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0
U2V0KCkgewotICAgIGxpc3QuYWRkQm9vbGVhbihmYWxzZSk7Ci0gICAgbGlzdC5hZGRCb29sZWFu
KGZhbHNlKTsKLSAgICAKLSAgICBhc3NlcnRFcXVhbHMoZmFsc2UsIChib29sZWFuKSBsaXN0LnNl
dCgwLCB0cnVlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHRydWUsIGxpc3QuZ2V0Qm9vbGVhbigwKSk7
Ci0KLSAgICBhc3NlcnRFcXVhbHMoZmFsc2UsIChib29sZWFuKSBsaXN0LnNldCgxLCBmYWxzZSkp
OwotICAgIGFzc2VydEVxdWFscyhmYWxzZSwgbGlzdC5nZXRCb29sZWFuKDEpKTsKLSAgICAKLSAg
ICB0cnkgewotICAgICAgbGlzdC5zZXQoLTEsIHRydWUpOwotICAgICAgZmFpbCgpOwotICAgIH0g
Y2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQK
LSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgbGlzdC5zZXQoMiwgZmFsc2UpOwotICAgICAgZmFp
bCgpOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAg
Ly8gZXhwZWN0ZWQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRJbnQoKSB7
Ci0gICAgbGlzdC5hZGRCb29sZWFuKHRydWUpOwotICAgIGxpc3QuYWRkQm9vbGVhbih0cnVlKTsK
LSAgICAKLSAgICBhc3NlcnRFcXVhbHModHJ1ZSwgbGlzdC5zZXRCb29sZWFuKDAsIGZhbHNlKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKGZhbHNlLCBsaXN0LmdldEJvb2xlYW4oMCkpOwotCi0gICAgYXNz
ZXJ0RXF1YWxzKHRydWUsIGxpc3Quc2V0Qm9vbGVhbigxLCBmYWxzZSkpOwotICAgIGFzc2VydEVx
dWFscyhmYWxzZSwgbGlzdC5nZXRCb29sZWFuKDEpKTsKLSAgICAKLSAgICB0cnkgewotICAgICAg
bGlzdC5zZXRCb29sZWFuKC0xLCBmYWxzZSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAo
SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0K
LQotICAgIHRyeSB7Ci0gICAgICBsaXN0LnNldEJvb2xlYW4oMiwgdHJ1ZSk7Ci0gICAgICBmYWls
KCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEFkZCgpIHsKLSAg
ICBhc3NlcnRFcXVhbHMoMCwgbGlzdC5zaXplKCkpOwotCi0gICAgYXNzZXJ0VHJ1ZShsaXN0LmFk
ZCh0cnVlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCh0cnVlKSwgbGlzdCk7Ci0KLSAgICBh
c3NlcnRUcnVlKGxpc3QuYWRkKGZhbHNlKSk7Ci0gICAgbGlzdC5hZGQoMCwgZmFsc2UpOwotICAg
IGFzc2VydEVxdWFscyhhc0xpc3QoZmFsc2UsIHRydWUsIGZhbHNlKSwgbGlzdCk7Ci0gICAgCi0g
ICAgbGlzdC5hZGQoMCwgZmFsc2UpOwotICAgIGxpc3QuYWRkKDAsIHRydWUpOwotICAgIC8vIEZv
cmNlIGEgcmVzaXplIGJ5IGdldHRpbmcgdXAgdG8gMTEgZWxlbWVudHMuCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgIGxpc3QuYWRkKHRydWUpOwotICAgIH0KLSAgICBh
c3NlcnRFcXVhbHMoYXNMaXN0KHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUs
IHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUpLCBsaXN0KTsKLSAgICAKLSAgICB0cnkgewot
ICAgICAgbGlzdC5hZGQoLTEsIGZhbHNlKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRz
RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7
Ci0gICAgICBsaXN0LmFkZCg0LCB0cnVlKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRz
RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwdWJs
aWMgdm9pZCB0ZXN0QWRkSW50KCkgewotICAgIGFzc2VydEVxdWFscygwLCBsaXN0LnNpemUoKSk7
Ci0KLSAgICBsaXN0LmFkZEJvb2xlYW4odHJ1ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCh0
cnVlKSwgbGlzdCk7Ci0KLSAgICBsaXN0LmFkZEJvb2xlYW4oZmFsc2UpOwotICAgIGFzc2VydEVx
dWFscyhhc0xpc3QodHJ1ZSwgZmFsc2UpLCBsaXN0KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQg
dGVzdEFkZEFsbCgpIHsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbGlzdC5zaXplKCkpOwotCi0gICAg
YXNzZXJ0VHJ1ZShsaXN0LmFkZEFsbChDb2xsZWN0aW9ucy5zaW5nbGV0b24oZmFsc2UpKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDEsIGxpc3Quc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZmFsc2Us
IChib29sZWFuKSBsaXN0LmdldCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGZhbHNlLCBsaXN0Lmdl
dEJvb2xlYW4oMCkpOwotICAgIAotICAgIGFzc2VydFRydWUobGlzdC5hZGRBbGwoYXNMaXN0KHRy
dWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUpKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlz
dChmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSksIGxpc3QpOwotICAgIAot
ICAgIGFzc2VydFRydWUobGlzdC5hZGRBbGwoVEVSVElBUllfTElTVCkpOwotICAgIGFzc2VydEVx
dWFscyhhc0xpc3QoZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUs
IHRydWUsIGZhbHNlKSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRGYWxzZShsaXN0LmFkZEFsbChDb2xs
ZWN0aW9ucy48Qm9vbGVhbj5lbXB0eUxpc3QoKSkpOwotICAgIGFzc2VydEZhbHNlKGxpc3QuYWRk
QWxsKEJvb2xlYW5BcnJheUxpc3QuZW1wdHlMaXN0KCkpKTsKLSAgfQotICAKLSAgcHVibGljIHZv
aWQgdGVzdFJlbW92ZSgpIHsKLSAgICBsaXN0LmFkZEFsbChURVJUSUFSWV9MSVNUKTsKLSAgICBh
c3NlcnRFcXVhbHModHJ1ZSwgKGJvb2xlYW4pIGxpc3QucmVtb3ZlKDApKTsKLSAgICBhc3NlcnRF
cXVhbHMoYXNMaXN0KHRydWUsIGZhbHNlKSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRUcnVlKGxpc3Qu
cmVtb3ZlKEJvb2xlYW4uVFJVRSkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoZmFsc2UpLCBs
aXN0KTsKLQotICAgIGFzc2VydEZhbHNlKGxpc3QucmVtb3ZlKEJvb2xlYW4uVFJVRSkpOwotICAg
IGFzc2VydEVxdWFscyhhc0xpc3QoZmFsc2UpLCBsaXN0KTsKLQotICAgIGFzc2VydEVxdWFscyhm
YWxzZSwgKGJvb2xlYW4pIGxpc3QucmVtb3ZlKDApKTsKLSAgICBhc3NlcnRFcXVhbHMoYXNMaXN0
KCksIGxpc3QpOwotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZSgtMSk7Ci0gICAg
ICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZW1v
dmUoMCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFzc2VydEltbXV0
YWJsZShCb29sZWFuQXJyYXlMaXN0IGxpc3QpIHsKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGQo
ZmFsc2UpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9u
RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7
Ci0gICAgICBsaXN0LmFkZCgwLCB0cnVlKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAg
IH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRBbGwoQ29sbGVjdGlvbnMuPEJvb2xl
YW4+ZW1wdHlMaXN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAot
ICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KGZh
bHNlKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25F
eGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsK
LSAgICAgIGxpc3QuYWRkQWxsKG5ldyBCb29sZWFuQXJyYXlMaXN0KCkpOwotICAgICAgZmFpbCgp
OwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAg
IC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChV
TkFSWV9MSVNUKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJh
dGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0
cnkgewotICAgICAgbGlzdC5hZGRBbGwoMCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uKHRydWUpKTsK
LSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlv
biBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAg
bGlzdC5hZGRBbGwoMCwgVU5BUllfTElTVCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAo
VW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAg
ICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkQWxsKDAsIENvbGxlY3Rpb25zLjxC
b29sZWFuPmVtcHR5TGlzdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBv
cnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAg
ICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRCb29sZWFuKHRydWUpOwotICAgICAgZmFpbCgp
OwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAg
IC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmNsZWFyKCk7
Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRp
b24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgbGlz
dC5yZW1vdmUoMSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVy
YXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAg
dHJ5IHsKLSAgICAgIGxpc3QucmVtb3ZlKG5ldyBPYmplY3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0g
ICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8g
ZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmVtb3ZlQWxsKENv
bGxlY3Rpb25zLjxCb29sZWFuPmVtcHR5TGlzdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNh
dGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3Rl
ZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZW1vdmVBbGwoQ29sbGVjdGlv
bnMuc2luZ2xldG9uKEJvb2xlYW4uVFJVRSkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2gg
KFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0g
ICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZUFsbChVTkFSWV9MSVNUKTsK
LSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlv
biBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAg
bGlzdC5yZXRhaW5BbGwoQ29sbGVjdGlvbnMuPEJvb2xlYW4+ZW1wdHlMaXN0KCkpOwotICAgICAg
ZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJl
dGFpbkFsbChDb2xsZWN0aW9ucy5zaW5nbGV0b24oQm9vbGVhbi5UUlVFKSk7Ci0gICAgICBmYWls
KCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAg
ICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmV0YWlu
QWxsKFVOQVJZX0xJU1QpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAot
ICAgIHRyeSB7Ci0gICAgICBsaXN0LnNldCgwLCB0cnVlKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9
IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBl
Y3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5zZXRCb29sZWFuKDAsIGZh
bHNlKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0
ZSBzdGF0aWMgQm9vbGVhbkFycmF5TGlzdCBuZXdJbW11dGFibGVCb29sZWFuQXJyYXlMaXN0KGJv
b2xlYW4uLi4gZWxlbWVudHMpIHsKLSAgICBCb29sZWFuQXJyYXlMaXN0IGxpc3QgPSBuZXcgQm9v
bGVhbkFycmF5TGlzdCgpOwotICAgIGZvciAoYm9vbGVhbiBlbGVtZW50IDogZWxlbWVudHMpIHsK
LSAgICAgIGxpc3QuYWRkQm9vbGVhbihlbGVtZW50KTsKLSAgICB9Ci0gICAgbGlzdC5tYWtlSW1t
dXRhYmxlKCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3Jl
L3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Cb3VuZGVkQnl0ZVN0cmluZ1Rlc3Qu
amF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Cb3VuZGVk
Qnl0ZVN0cmluZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIxMGVl
NzQ4MzA0ZGRkM2E5OGNhYzlmMzNlNmQ1ZGI3MjZiMmE5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvQm91bmRlZEJ5dGVTdHJpbmdUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2th
Z2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRT
dHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2
YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOwotaW1w
b3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0
ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHRlc3RzIHtAbGluayBC
b3VuZGVkQnl0ZVN0cmluZ30sIHdoaWNoIGV4dGVuZHMge0BsaW5rIExpdGVyYWxCeXRlU3RyaW5n
fSwKLSAqIGJ5IGluaGVyaXRpbmcgdGhlIHRlc3RzIGZyb20ge0BsaW5rIExpdGVyYWxCeXRlU3Ry
aW5nVGVzdH0uICBUaGUgb25seSBtZXRob2Qgd2hpY2gKLSAqIGlzIHN0cmFuZ2UgZW5vdWdoIHRo
YXQgaXQgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBoZXJlIGlzIHtAbGluayAjdGVzdFRvU3RyaW5n
KCl9LgotICoKLSAqIEBhdXRob3IgY2FybGFudG9uQGdvb2dsZS5jb20gKENhcmwgSGF2ZXJsKQot
ICovCi1wdWJsaWMgY2xhc3MgQm91bmRlZEJ5dGVTdHJpbmdUZXN0IGV4dGVuZHMgTGl0ZXJhbEJ5
dGVTdHJpbmdUZXN0IHsKLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBjbGFzc1VuZGVyVGVzdCA9ICJCb3VuZGVkQnl0ZVN0cmlu
ZyI7Ci0gICAgYnl0ZVtdIHNvdXJjZUJ5dGVzID0gQnl0ZVN0cmluZ1Rlc3QuZ2V0VGVzdEJ5dGVz
KDIzNDEsIDExMzM3NzY2TCk7Ci0gICAgaW50IGZyb20gPSAxMDA7Ci0gICAgaW50IHRvID0gc291
cmNlQnl0ZXMubGVuZ3RoIC0gMTAwOwotICAgIHN0cmluZ1VuZGVyVGVzdCA9IEJ5dGVTdHJpbmcu
Y29weUZyb20oc291cmNlQnl0ZXMpLnN1YnN0cmluZyhmcm9tLCB0byk7Ci0gICAgcmVmZXJlbmNl
Qnl0ZXMgPSBuZXcgYnl0ZVt0byAtIGZyb21dOwotICAgIFN5c3RlbS5hcnJheWNvcHkoc291cmNl
Qnl0ZXMsIGZyb20sIHJlZmVyZW5jZUJ5dGVzLCAwLCB0byAtIGZyb20pOwotICAgIGV4cGVjdGVk
SGFzaENvZGUgPSA3Mjc1NzU4ODc7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
dGVzdFRvU3RyaW5nKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gewotICAg
IFN0cmluZyB0ZXN0U3RyaW5nID0gIkkgbG92ZSB1bmljb2RlIFx1MTIzNFx1NTY3OCBjaGFyYWN0
ZXJzIjsKLSAgICBCeXRlU3RyaW5nIHVuaWNvZGUgPSBCeXRlU3RyaW5nLndyYXAodGVzdFN0cmlu
Zy5nZXRCeXRlcyhJbnRlcm5hbC5VVEZfOCkpOwotICAgIEJ5dGVTdHJpbmcgY2hvcHBlZCA9IHVu
aWNvZGUuc3Vic3RyaW5nKDIsIHVuaWNvZGUuc2l6ZSgpIC0gNik7Ci0gICAgYXNzZXJ0RXF1YWxz
KGNsYXNzVW5kZXJUZXN0ICsgIi5zdWJzdHJpbmcoKSBtdXN0IGhhdmUgdGhlIGV4cGVjdGVkIHR5
cGUiLAotICAgICAgICBjbGFzc1VuZGVyVGVzdCwgZ2V0QWN0dWFsQ2xhc3NOYW1lKGNob3BwZWQp
KTsKLQotICAgIFN0cmluZyByb3VuZFRyaXBTdHJpbmcgPSBjaG9wcGVkLnRvU3RyaW5nKFVURl84
KTsKLSAgICBhc3NlcnRFcXVhbHMoY2xhc3NVbmRlclRlc3QgKyAiIHVuaWNvZGUgYnl0ZXMgbXVz
dCBtYXRjaCIsCi0gICAgICAgIHRlc3RTdHJpbmcuc3Vic3RyaW5nKDIsIHRlc3RTdHJpbmcubGVu
Z3RoKCkgLSA2KSwgcm91bmRUcmlwU3RyaW5nKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCB0ZXN0Q2hhcnNldFRvU3RyaW5nKCkgewotICAgIFN0cmluZyB0ZXN0U3RyaW5nID0g
IkkgbG92ZSB1bmljb2RlIFx1MTIzNFx1NTY3OCBjaGFyYWN0ZXJzIjsKLSAgICBCeXRlU3RyaW5n
IHVuaWNvZGUgPSBCeXRlU3RyaW5nLndyYXAodGVzdFN0cmluZy5nZXRCeXRlcyhJbnRlcm5hbC5V
VEZfOCkpOwotICAgIEJ5dGVTdHJpbmcgY2hvcHBlZCA9IHVuaWNvZGUuc3Vic3RyaW5nKDIsIHVu
aWNvZGUuc2l6ZSgpIC0gNik7Ci0gICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIi5z
dWJzdHJpbmcoKSBtdXN0IGhhdmUgdGhlIGV4cGVjdGVkIHR5cGUiLAotICAgICAgICBjbGFzc1Vu
ZGVyVGVzdCwgZ2V0QWN0dWFsQ2xhc3NOYW1lKGNob3BwZWQpKTsKLQotICAgIFN0cmluZyByb3Vu
ZFRyaXBTdHJpbmcgPSBjaG9wcGVkLnRvU3RyaW5nKEludGVybmFsLlVURl84KTsKLSAgICBhc3Nl
cnRFcXVhbHMoY2xhc3NVbmRlclRlc3QgKyAiIHVuaWNvZGUgYnl0ZXMgbXVzdCBtYXRjaCIsCi0g
ICAgICAgIHRlc3RTdHJpbmcuc3Vic3RyaW5nKDIsIHRlc3RTdHJpbmcubGVuZ3RoKCkgLSA2KSwg
cm91bmRUcmlwU3RyaW5nKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCB0ZXN0
SmF2YVNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBCeXRlQXJyYXlPdXRw
dXRTdHJlYW0gb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIE9iamVjdE91
dHB1dFN0cmVhbSBvb3MgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKG91dCk7Ci0gICAgb29zLndy
aXRlT2JqZWN0KHN0cmluZ1VuZGVyVGVzdCk7Ci0gICAgb29zLmNsb3NlKCk7Ci0gICAgYnl0ZVtd
IHBpY2tsZWQgPSBvdXQudG9CeXRlQXJyYXkoKTsKLSAgICBJbnB1dFN0cmVhbSBpbiA9IG5ldyBC
eXRlQXJyYXlJbnB1dFN0cmVhbShwaWNrbGVkKTsKLSAgICBPYmplY3RJbnB1dFN0cmVhbSBvaXMg
PSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oaW4pOwotICAgIE9iamVjdCBvID0gb2lzLnJlYWRPYmpl
Y3QoKTsKLSAgICBhc3NlcnRUcnVlKCJEaWRuJ3QgZ2V0IGEgQnl0ZVN0cmluZyBiYWNrIiwgbyBp
bnN0YW5jZW9mIEJ5dGVTdHJpbmcpOwotICAgIGFzc2VydEVxdWFscygiU2hvdWxkIGdldCBhbiBl
cXVhbCBCeXRlU3RyaW5nIGJhY2siLCBzdHJpbmdVbmRlclRlc3QsIG8pOwotICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQnl0ZUJ1
ZmZlcldyaXRlclRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9CeXRlQnVmZmVyV3JpdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjYmU3NDJlNWI5MWYzYjU4MjJkZTdkMTg5ZDc5NTNkNzY4YWY0YTIyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9CeXRlQnVmZmVyV3JpdGVyVGVzdC5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGp1bml0LmZyYW1l
d29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwot
aW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsK
LWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5SYW5kb207Ci0KLS8q
KgotICogVGVzdHMgZm9yIHtAbGluayBCeXRlQnVmZmVyV3JpdGVyfS4KLSAqLwotcHVibGljIGNs
YXNzIEJ5dGVCdWZmZXJXcml0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gIHB1YmxpYyB2
b2lkIHRlc3RIZWFwQnVmZmVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAvLyBUZXN0IGEg
c21hbGwgYW5kIGxhcmdlIGJ1ZmZlci4KLSAgICB0ZXN0V3JpdGUoQnl0ZUJ1ZmZlci5hbGxvY2F0
ZSgxMDApKTsKLSAgICB0ZXN0V3JpdGUoQnl0ZUJ1ZmZlci5hbGxvY2F0ZSgxMDI0ICogMTAwKSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RGlyZWN0QnVmZmVyKCkgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICAvLyBUZXN0IGEgc21hbGwgYW5kIGxhcmdlIGJ1ZmZlci4KLSAgICB0ZXN0V3Jp
dGUoQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCgxMDApKTsKLSAgICB0ZXN0V3JpdGUoQnl0ZUJ1
ZmZlci5hbGxvY2F0ZURpcmVjdCgxMDI0ICogMTAwKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
dGVzdFdyaXRlKEJ5dGVCdWZmZXIgYnVmZmVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZp
bGxSYW5kb20oYnVmZmVyKTsKLSAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3MgPSBuZXcgQnl0
ZUFycmF5T3V0cHV0U3RyZWFtKGJ1ZmZlci5yZW1haW5pbmcoKSk7Ci0gICAgQnl0ZUJ1ZmZlcldy
aXRlci53cml0ZShidWZmZXIsIG9zKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgYnVmZmVyLnBvc2l0
aW9uKCkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyh0b0FycmF5KGJ1ZmZlciksIG9z
LnRvQnl0ZUFycmF5KCkpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBmaWxsUmFuZG9tKEJ5dGVC
dWZmZXIgYnVmKSB7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbYnVmLnJlbWFpbmluZygp
XTsKLSAgICBuZXcgUmFuZG9tKCkubmV4dEJ5dGVzKGJ5dGVzKTsKLSAgICBidWYucHV0KGJ5dGVz
KTsKLSAgICBidWYuZmxpcCgpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHByaXZhdGUgYnl0ZVtd
IHRvQXJyYXkoQnl0ZUJ1ZmZlciBidWYpIHsKLSAgICBpbnQgb3JpZ2luYWxQb3NpdGlvbiA9IGJ1
Zi5wb3NpdGlvbigpOwotICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW2J1Zi5yZW1haW5pbmco
KV07Ci0gICAgYnVmLmdldChieXRlcyk7Ci0gICAgYnVmLnBvc2l0aW9uKG9yaWdpbmFsUG9zaXRp
b24pOwotICAgIHJldHVybiBieXRlczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0J5dGVTdHJpbmdUZXN0LmphdmEgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEv
Y29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQnl0ZVN0cmluZ1Rlc3QuamF2
YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ5ZjI2NmU0Y2RiNGY5NmM5OWZhYWZj
ZmZkYTc0MjkwN2VkNGNiNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQnl0ZVN0
cmluZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3NCArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwot
Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nLk91dHB1dDsKLQotaW1wb3J0
IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5w
dXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQg
amF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0
IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwot
aW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFy
c2V0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5
czsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1p
bXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGls
LlJhbmRvbTsKLQotLyoqCi0gKiBUZXN0IG1ldGhvZHMgd2l0aCBpbXBsZW1lbnRhdGlvbnMgaW4g
e0BsaW5rIEJ5dGVTdHJpbmd9LCBwbHVzIGRvIHNvbWUgdG9wLWxldmVsICJpbnRlZ3JhdGlvbiIK
LSAqIHRlc3RzLgotICoKLSAqIEBhdXRob3IgY2FybGFudG9uQGdvb2dsZS5jb20gKENhcmwgSGF2
ZXJsKQotICovCi1wdWJsaWMgY2xhc3MgQnl0ZVN0cmluZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2hhcnNldCBVVEZfMTYgPSBDaGFyc2V0LmZvck5h
bWUoIlVURi0xNiIpOwotCi0gIHN0YXRpYyBieXRlW10gZ2V0VGVzdEJ5dGVzKGludCBzaXplLCBs
b25nIHNlZWQpIHsKLSAgICBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShzZWVkKTsKLSAgICBi
eXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbc2l6ZV07Ci0gICAgcmFuZG9tLm5leHRCeXRlcyhyZXN1
bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIGJ5dGVbXSBnZXRUZXN0
Qnl0ZXMoaW50IHNpemUpIHsKLSAgICByZXR1cm4gZ2V0VGVzdEJ5dGVzKHNpemUsIDQ0NTU2Nkwp
OwotICB9Ci0KLSAgcHJpdmF0ZSBieXRlW10gZ2V0VGVzdEJ5dGVzKCkgewotICAgIHJldHVybiBn
ZXRUZXN0Qnl0ZXMoMTAwMCk7Ci0gIH0KLQotICAvLyBDb21wYXJlIHRoZSBlbnRpcmUgbGVmdCBh
cnJheSB3aXRoIGEgc3Vic2V0IG9mIHRoZSByaWdodCBhcnJheS4KLSAgcHJpdmF0ZSBib29sZWFu
IGlzQXJyYXlSYW5nZShieXRlW10gbGVmdCwgYnl0ZVtdIHJpZ2h0LCBpbnQgcmlnaHRPZmZzZXQs
IGludCBsZW5ndGgpIHsKLSAgICBib29sZWFuIHN0aWxsRXF1YWwgPSAobGVmdC5sZW5ndGggPT0g
bGVuZ3RoKTsKLSAgICBmb3IgKGludCBpID0gMDsgKHN0aWxsRXF1YWwgJiYgaSA8IGxlbmd0aCk7
ICsraSkgewotICAgICAgc3RpbGxFcXVhbCA9IChsZWZ0W2ldID09IHJpZ2h0W3JpZ2h0T2Zmc2V0
ICsgaV0pOwotICAgIH0KLSAgICByZXR1cm4gc3RpbGxFcXVhbDsKLSAgfQotCi0gIC8vIFJldHVy
bnMgdHJ1ZSBvbmx5IGlmIHRoZSBnaXZlbiB0d28gYXJyYXlzIGhhdmUgaWRlbnRpY2FsIGNvbnRl
bnRzLgotICBwcml2YXRlIGJvb2xlYW4gaXNBcnJheShieXRlW10gbGVmdCwgYnl0ZVtdIHJpZ2h0
KSB7Ci0gICAgcmV0dXJuIGxlZnQubGVuZ3RoID09IHJpZ2h0Lmxlbmd0aCAmJiBpc0FycmF5UmFu
Z2UobGVmdCwgcmlnaHQsIDAsIGxlZnQubGVuZ3RoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3RTdWJzdHJpbmdfQmVnaW5JbmRleCgpIHsKLSAgICBieXRlW10gYnl0ZXMgPSBnZXRUZXN0Qnl0
ZXMoKTsKLSAgICBCeXRlU3RyaW5nIHN1YnN0cmluZyA9IEJ5dGVTdHJpbmcuY29weUZyb20oYnl0
ZXMpLnN1YnN0cmluZyg1MDApOwotICAgIGFzc2VydFRydWUoInN1YnN0cmluZyBtdXN0IGNvbnRh
aW4gdGhlIHRhaWwgb2YgdGhlIHN0cmluZyIsCi0gICAgICAgIGlzQXJyYXlSYW5nZShzdWJzdHJp
bmcudG9CeXRlQXJyYXkoKSwgYnl0ZXMsIDUwMCwgYnl0ZXMubGVuZ3RoIC0gNTAwKSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0Q29weUZyb21fQnl0ZXNPZmZzZXRTaXplKCkgewotICAgIGJ5
dGVbXSBieXRlcyA9IGdldFRlc3RCeXRlcygpOwotICAgIEJ5dGVTdHJpbmcgYnl0ZVN0cmluZyA9
IEJ5dGVTdHJpbmcuY29weUZyb20oYnl0ZXMsIDUwMCwgMjAwKTsKLSAgICBhc3NlcnRUcnVlKCJj
b3B5RnJvbSBzdWItcmFuZ2UgbXVzdCBjb250YWluIHRoZSBleHBlY3RlZCBieXRlcyIsCi0gICAg
ICAgIGlzQXJyYXlSYW5nZShieXRlU3RyaW5nLnRvQnl0ZUFycmF5KCksIGJ5dGVzLCA1MDAsIDIw
MCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENvcHlGcm9tX0J5dGVzKCkgewotICAgIGJ5
dGVbXSBieXRlcyA9IGdldFRlc3RCeXRlcygpOwotICAgIEJ5dGVTdHJpbmcgYnl0ZVN0cmluZyA9
IEJ5dGVTdHJpbmcuY29weUZyb20oYnl0ZXMpOwotICAgIGFzc2VydFRydWUoImNvcHlGcm9tIG11
c3QgY29udGFpbiB0aGUgZXhwZWN0ZWQgYnl0ZXMiLAotICAgICAgICBpc0FycmF5KGJ5dGVTdHJp
bmcudG9CeXRlQXJyYXkoKSwgYnl0ZXMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDb3B5
RnJvbV9CeXRlQnVmZmVyU2l6ZSgpIHsKLSAgICBieXRlW10gYnl0ZXMgPSBnZXRUZXN0Qnl0ZXMo
KTsKLSAgICBCeXRlQnVmZmVyIGJ5dGVCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKGJ5dGVz
Lmxlbmd0aCk7Ci0gICAgYnl0ZUJ1ZmZlci5wdXQoYnl0ZXMpOwotICAgIGJ5dGVCdWZmZXIucG9z
aXRpb24oNTAwKTsKLSAgICBCeXRlU3RyaW5nIGJ5dGVTdHJpbmcgPSBCeXRlU3RyaW5nLmNvcHlG
cm9tKGJ5dGVCdWZmZXIsIDIwMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiY29weUZyb20gYnl0ZUJ1ZmZl
ciBzdWItcmFuZ2UgbXVzdCBjb250YWluIHRoZSBleHBlY3RlZCBieXRlcyIsCi0gICAgICAgIGlz
QXJyYXlSYW5nZShieXRlU3RyaW5nLnRvQnl0ZUFycmF5KCksIGJ5dGVzLCA1MDAsIDIwMCkpOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENvcHlGcm9tX0J5dGVCdWZmZXIoKSB7Ci0gICAgYnl0
ZVtdIGJ5dGVzID0gZ2V0VGVzdEJ5dGVzKCk7Ci0gICAgQnl0ZUJ1ZmZlciBieXRlQnVmZmVyID0g
Qnl0ZUJ1ZmZlci5hbGxvY2F0ZShieXRlcy5sZW5ndGgpOwotICAgIGJ5dGVCdWZmZXIucHV0KGJ5
dGVzKTsKLSAgICBieXRlQnVmZmVyLnBvc2l0aW9uKDUwMCk7Ci0gICAgQnl0ZVN0cmluZyBieXRl
U3RyaW5nID0gQnl0ZVN0cmluZy5jb3B5RnJvbShieXRlQnVmZmVyKTsKLSAgICBhc3NlcnRUcnVl
KCJjb3B5RnJvbSBieXRlQnVmZmVyIHN1Yi1yYW5nZSBtdXN0IGNvbnRhaW4gdGhlIGV4cGVjdGVk
IGJ5dGVzIiwKLSAgICAgICAgaXNBcnJheVJhbmdlKGJ5dGVTdHJpbmcudG9CeXRlQXJyYXkoKSwg
Ynl0ZXMsIDUwMCwgYnl0ZXMubGVuZ3RoIC0gNTAwKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0Q29weUZyb21fU3RyaW5nRW5jb2RpbmcoKSB7Ci0gICAgU3RyaW5nIHRlc3RTdHJpbmcgPSAi
SSBsb3ZlIHVuaWNvZGUgXHUxMjM0XHU1Njc4IGNoYXJhY3RlcnMiOwotICAgIEJ5dGVTdHJpbmcg
Ynl0ZVN0cmluZyA9IEJ5dGVTdHJpbmcuY29weUZyb20odGVzdFN0cmluZywgVVRGXzE2KTsKLSAg
ICBieXRlW10gdGVzdEJ5dGVzID0gdGVzdFN0cmluZy5nZXRCeXRlcyhVVEZfMTYpOwotICAgIGFz
c2VydFRydWUoImNvcHlGcm9tIHN0cmluZyBtdXN0IHJlc3BlY3QgdGhlIGNoYXJzZXQiLAotICAg
ICAgICBpc0FycmF5UmFuZ2UoYnl0ZVN0cmluZy50b0J5dGVBcnJheSgpLCB0ZXN0Qnl0ZXMsIDAs
IHRlc3RCeXRlcy5sZW5ndGgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDb3B5RnJvbV9V
dGY4KCkgewotICAgIFN0cmluZyB0ZXN0U3RyaW5nID0gIkkgbG92ZSB1bmljb2RlIFx1MTIzNFx1
NTY3OCBjaGFyYWN0ZXJzIjsKLSAgICBCeXRlU3RyaW5nIGJ5dGVTdHJpbmcgPSBCeXRlU3RyaW5n
LmNvcHlGcm9tVXRmOCh0ZXN0U3RyaW5nKTsKLSAgICBieXRlW10gdGVzdEJ5dGVzID0gdGVzdFN0
cmluZy5nZXRCeXRlcyhJbnRlcm5hbC5VVEZfOCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiY29weUZyb21V
dGY4IHN0cmluZyBtdXN0IHJlc3BlY3QgdGhlIGNoYXJzZXQiLAotICAgICAgICBpc0FycmF5UmFu
Z2UoYnl0ZVN0cmluZy50b0J5dGVBcnJheSgpLCB0ZXN0Qnl0ZXMsIDAsIHRlc3RCeXRlcy5sZW5n
dGgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDb3B5RnJvbV9JdGVyYWJsZSgpIHsKLSAg
ICBieXRlW10gdGVzdEJ5dGVzID0gZ2V0VGVzdEJ5dGVzKDc3Nzc3LCAxMTMzNDRMKTsKLSAgICBm
aW5hbCBMaXN0PEJ5dGVTdHJpbmc+IHBpZWNlcyA9IG1ha2VDb25jcmV0ZVBpZWNlcyh0ZXN0Qnl0
ZXMpOwotICAgIC8vIENhbGwgY29weUZyb20oKSBvbiBhIENvbGxlY3Rpb24KLSAgICBCeXRlU3Ry
aW5nIGJ5dGVTdHJpbmcgPSBCeXRlU3RyaW5nLmNvcHlGcm9tKHBpZWNlcyk7Ci0gICAgYXNzZXJ0
VHJ1ZSgiY29weUZyb20gYSBMaXN0IG11c3QgY29udGFpbiB0aGUgZXhwZWN0ZWQgYnl0ZXMiLAot
ICAgICAgICBpc0FycmF5UmFuZ2UoYnl0ZVN0cmluZy50b0J5dGVBcnJheSgpLCB0ZXN0Qnl0ZXMs
IDAsIHRlc3RCeXRlcy5sZW5ndGgpKTsKLSAgICAvLyBDYWxsIGNvcHlGcm9tIG9uIGFuIGl0ZXJh
dGlvbiB0aGF0J3Mgbm90IGEgY29sbGVjdGlvbgotICAgIEJ5dGVTdHJpbmcgYnl0ZVN0cmluZ0Fs
dCA9IEJ5dGVTdHJpbmcuY29weUZyb20obmV3IEl0ZXJhYmxlPEJ5dGVTdHJpbmc+KCkgewotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgSXRlcmF0b3I8Qnl0ZVN0cmluZz4gaXRlcmF0b3Io
KSB7Ci0gICAgICAgIHJldHVybiBwaWVjZXMuaXRlcmF0b3IoKTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgICBhc3NlcnRFcXVhbHMoImNvcHlGcm9tIGZyb20gYW4gSXRlcmF0aW9uIG11c3QgY29udGFp
biB0aGUgZXhwZWN0ZWQgYnl0ZXMiLAotICAgICAgICBieXRlU3RyaW5nLCBieXRlU3RyaW5nQWx0
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDb3B5VG9fVGFyZ2V0T2Zmc2V0KCkgewotICAg
IGJ5dGVbXSBieXRlcyA9IGdldFRlc3RCeXRlcygpOwotICAgIEJ5dGVTdHJpbmcgYnl0ZVN0cmlu
ZyA9IEJ5dGVTdHJpbmcuY29weUZyb20oYnl0ZXMpOwotICAgIGJ5dGVbXSB0YXJnZXQgPSBuZXcg
Ynl0ZVtieXRlcy5sZW5ndGggKyAxMDAwXTsKLSAgICBieXRlU3RyaW5nLmNvcHlUbyh0YXJnZXQs
IDQwMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiY29weUZyb20gYnl0ZUJ1ZmZlciBzdWItcmFuZ2UgbXVz
dCBjb250YWluIHRoZSBleHBlY3RlZCBieXRlcyIsCi0gICAgICAgIGlzQXJyYXlSYW5nZShieXRl
cywgdGFyZ2V0LCA0MDAsIGJ5dGVzLmxlbmd0aCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVz
dFJlYWRGcm9tX2VtcHR5U3RyZWFtKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBCeXRlU3Ry
aW5nIGJ5dGVTdHJpbmcgPQotICAgICAgICBCeXRlU3RyaW5nLnJlYWRGcm9tKG5ldyBCeXRlQXJy
YXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSkpOwotICAgIGFzc2VydFNhbWUoInJlYWRpbmcgYW4g
ZW1wdHkgc3RyZWFtIG11c3QgcmVzdWx0IGluIHRoZSBFTVBUWSBjb25zdGFudCAiCi0gICAgICAg
ICsgImJ5dGUgc3RyaW5nIiwgQnl0ZVN0cmluZy5FTVBUWSwgYnl0ZVN0cmluZyk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0UmVhZEZyb21fc21hbGxTdHJlYW0oKSB0aHJvd3MgSU9FeGNlcHRp
b24gewotICAgIGFzc2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcygxMCkpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdFJlYWRGcm9tX211dGF0aW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAg
ICBieXRlW10gY2FwdHVyZWRBcnJheSA9IG51bGw7Ci0gICAgRXZpbElucHV0U3RyZWFtIGVpcyA9
IG5ldyBFdmlsSW5wdXRTdHJlYW0oKTsKLSAgICBCeXRlU3RyaW5nIGJ5dGVTdHJpbmcgPSBCeXRl
U3RyaW5nLnJlYWRGcm9tKGVpcyk7Ci0KLSAgICBjYXB0dXJlZEFycmF5ID0gZWlzLmNhcHR1cmVk
QXJyYXk7Ci0gICAgYnl0ZVtdIG9yaWdpbmFsVmFsdWUgPSBieXRlU3RyaW5nLnRvQnl0ZUFycmF5
KCk7Ci0gICAgZm9yIChpbnQgeCA9IDA7IHggPCBjYXB0dXJlZEFycmF5Lmxlbmd0aDsgKyt4KSB7
Ci0gICAgICBjYXB0dXJlZEFycmF5W3hdID0gKGJ5dGUpIDA7Ci0gICAgfQotCi0gICAgYnl0ZVtd
IG5ld1ZhbHVlID0gYnl0ZVN0cmluZy50b0J5dGVBcnJheSgpOwotICAgIGFzc2VydFRydWUoImNv
cHlGcm9tIGJ5dGVCdWZmZXIgbXVzdCBub3QgZ3JhbnQgYWNjZXNzIHRvIHVuZGVybHlpbmcgYXJy
YXkiLAotICAgICAgICBBcnJheXMuZXF1YWxzKG9yaWdpbmFsVmFsdWUsIG5ld1ZhbHVlKSk7Ci0g
IH0KLQotICAvLyBUZXN0cyBzaXplcyB0aGF0IGFyZSBuZWFyIHRoZSByb3BlIGNvcHktb3V0IHRo
cmVzaG9sZC4KLSAgcHVibGljIHZvaWQgdGVzdFJlYWRGcm9tX21lZGl1bVN0cmVhbSgpIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0UmVhZEZyb20oZ2V0VGVzdEJ5dGVzKEJ5dGVTdHJp
bmcuQ09OQ0FURU5BVEVfQllfQ09QWV9TSVpFIC0gMSkpOwotICAgIGFzc2VydFJlYWRGcm9tKGdl
dFRlc3RCeXRlcyhCeXRlU3RyaW5nLkNPTkNBVEVOQVRFX0JZX0NPUFlfU0laRSkpOwotICAgIGFz
c2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcyhCeXRlU3RyaW5nLkNPTkNBVEVOQVRFX0JZX0NPUFlf
U0laRSArIDEpKTsKLSAgICBhc3NlcnRSZWFkRnJvbShnZXRUZXN0Qnl0ZXMoMjAwKSk7Ci0gIH0K
LQotICAvLyBUZXN0cyBzaXplcyB0aGF0IGFyZSBvdmVyIG11bHRpLXNlZ21lbnQgcm9wZSB0aHJl
c2hvbGQuCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkRnJvbV9sYXJnZVN0cmVhbSgpIHRocm93cyBJ
T0V4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0UmVhZEZyb20oZ2V0VGVzdEJ5dGVzKDB4MTAwKSk7Ci0g
ICAgYXNzZXJ0UmVhZEZyb20oZ2V0VGVzdEJ5dGVzKDB4MTAxKSk7Ci0gICAgYXNzZXJ0UmVhZEZy
b20oZ2V0VGVzdEJ5dGVzKDB4MTEwKSk7Ci0gICAgYXNzZXJ0UmVhZEZyb20oZ2V0VGVzdEJ5dGVz
KDB4MTAwMCkpOwotICAgIGFzc2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcygweDEwMDEpKTsKLSAg
ICBhc3NlcnRSZWFkRnJvbShnZXRUZXN0Qnl0ZXMoMHgxMDEwKSk7Ci0gICAgYXNzZXJ0UmVhZEZy
b20oZ2V0VGVzdEJ5dGVzKDB4MTAwMDApKTsKLSAgICBhc3NlcnRSZWFkRnJvbShnZXRUZXN0Qnl0
ZXMoMHgxMDAwMSkpOwotICAgIGFzc2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcygweDEwMDEwKSk7
Ci0gIH0KLQotICAvLyBUZXN0cyBzaXplcyB0aGF0IGFyZSBuZWFyIHRoZSByZWFkIGJ1ZmZlciBz
aXplLgotICBwdWJsaWMgdm9pZCB0ZXN0UmVhZEZyb21fYnl0ZUJvdW5kYXJpZXMoKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgIGZpbmFsIGludCBtaW4gPSBCeXRlU3RyaW5nLk1JTl9SRUFEX0ZS
T01fQ0hVTktfU0laRTsKLSAgICBmaW5hbCBpbnQgbWF4ID0gQnl0ZVN0cmluZy5NQVhfUkVBRF9G
Uk9NX0NIVU5LX1NJWkU7Ci0KLSAgICBhc3NlcnRSZWFkRnJvbShnZXRUZXN0Qnl0ZXMobWluIC0g
MSkpOwotICAgIGFzc2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcyhtaW4pKTsKLSAgICBhc3NlcnRS
ZWFkRnJvbShnZXRUZXN0Qnl0ZXMobWluICsgMSkpOwotCi0gICAgYXNzZXJ0UmVhZEZyb20oZ2V0
VGVzdEJ5dGVzKG1pbiAqIDIgLSAxKSk7Ci0gICAgYXNzZXJ0UmVhZEZyb20oZ2V0VGVzdEJ5dGVz
KG1pbiAqIDIpKTsKLSAgICBhc3NlcnRSZWFkRnJvbShnZXRUZXN0Qnl0ZXMobWluICogMiArIDEp
KTsKLQotICAgIGFzc2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcyhtaW4gKiA0IC0gMSkpOwotICAg
IGFzc2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcyhtaW4gKiA0KSk7Ci0gICAgYXNzZXJ0UmVhZEZy
b20oZ2V0VGVzdEJ5dGVzKG1pbiAqIDQgKyAxKSk7Ci0KLSAgICBhc3NlcnRSZWFkRnJvbShnZXRU
ZXN0Qnl0ZXMobWluICogOCAtIDEpKTsKLSAgICBhc3NlcnRSZWFkRnJvbShnZXRUZXN0Qnl0ZXMo
bWluICogOCkpOwotICAgIGFzc2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcyhtaW4gKiA4ICsgMSkp
OwotCi0gICAgYXNzZXJ0UmVhZEZyb20oZ2V0VGVzdEJ5dGVzKG1heCAtIDEpKTsKLSAgICBhc3Nl
cnRSZWFkRnJvbShnZXRUZXN0Qnl0ZXMobWF4KSk7Ci0gICAgYXNzZXJ0UmVhZEZyb20oZ2V0VGVz
dEJ5dGVzKG1heCArIDEpKTsKLQotICAgIGFzc2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcyhtYXgg
KiAyIC0gMSkpOwotICAgIGFzc2VydFJlYWRGcm9tKGdldFRlc3RCeXRlcyhtYXggKiAyKSk7Ci0g
ICAgYXNzZXJ0UmVhZEZyb20oZ2V0VGVzdEJ5dGVzKG1heCAqIDIgKyAxKSk7Ci0gIH0KLQotICAv
LyBUZXN0cyB0aGF0IElPRXhjZXB0aW9ucyBwcm9wYWdhdGUgdGhyb3VnaCBCeXRlU3RyaW5nLnJl
YWRGcm9tKCkuCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkRnJvbV9JT0V4Y2VwdGlvbnMoKSB7Ci0g
ICAgdHJ5IHsKLSAgICAgIEJ5dGVTdHJpbmcucmVhZEZyb20obmV3IEZhaWxTdHJlYW0oKSk7Ci0g
ICAgICBmYWlsKCJyZWFkRnJvbSBtdXN0IHRocm93IHRoZSB1bmRlcmx5aW5nIElPRXhjZXB0aW9u
Iik7Ci0KLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMo
InJlYWRGcm9tIG11c3QgdGhyb3cgdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiIsCi0gICAgICAgICAg
ICAgICAgICAgInN5bnRoZXRpYyBmYWlsdXJlIiwgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAg
fQotCi0gIC8vIFRlc3RzIHRoYXQgQnl0ZVN0cmluZy5yZWFkRnJvbSB3b3JrcyB3aXRoIHN0cmVh
bXMgdGhhdCBkb24ndAotICAvLyBhbHdheXMgZmlsbCB0aGVpciBidWZmZXJzLgotICBwdWJsaWMg
dm9pZCB0ZXN0UmVhZEZyb21fcmVsdWN0YW50U3RyZWFtKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsK
LSAgICBmaW5hbCBieXRlW10gZGF0YSA9IGdldFRlc3RCeXRlcygweDEwMDApOwotCi0gICAgQnl0
ZVN0cmluZyBieXRlU3RyaW5nID0gQnl0ZVN0cmluZy5yZWFkRnJvbShuZXcgUmVsdWN0YW50U3Ry
ZWFtKGRhdGEpKTsKLSAgICBhc3NlcnRUcnVlKCJyZWFkRnJvbSBieXRlIHN0cmVhbSBtdXN0IGNv
bnRhaW4gdGhlIGV4cGVjdGVkIGJ5dGVzIiwKLSAgICAgICAgaXNBcnJheShieXRlU3RyaW5nLnRv
Qnl0ZUFycmF5KCksIGRhdGEpKTsKLQotICAgIC8vIFNhbWUgdGVzdCBhcyBhYm92ZSwgYnV0IHdp
dGggc29tZSBzcGVjaWZpYyBjaHVuayBzaXplcy4KLSAgICBhc3NlcnRSZWFkRnJvbVJlbHVjdGFu
dFN0cmVhbShkYXRhLCAxMDApOwotICAgIGFzc2VydFJlYWRGcm9tUmVsdWN0YW50U3RyZWFtKGRh
dGEsIDI0OCk7Ci0gICAgYXNzZXJ0UmVhZEZyb21SZWx1Y3RhbnRTdHJlYW0oZGF0YSwgMjQ5KTsK
LSAgICBhc3NlcnRSZWFkRnJvbVJlbHVjdGFudFN0cmVhbShkYXRhLCAyNTApOwotICAgIGFzc2Vy
dFJlYWRGcm9tUmVsdWN0YW50U3RyZWFtKGRhdGEsIDI1MSk7Ci0gICAgYXNzZXJ0UmVhZEZyb21S
ZWx1Y3RhbnRTdHJlYW0oZGF0YSwgMHgxMDAwKTsKLSAgICBhc3NlcnRSZWFkRnJvbVJlbHVjdGFu
dFN0cmVhbShkYXRhLCAweDEwMDEpOwotICB9Ci0KLSAgLy8gRmFpbHMgdW5sZXNzIEJ5dGVTdHJp
bmcucmVhZEZyb20gcmVhZHMgdGhlIGJ5dGVzIGNvcnJlY3RseSBmcm9tIGEKLSAgLy8gcmVsdWN0
YW50IHN0cmVhbSB3aXRoIHRoZSBnaXZlbiBjaHVua1NpemUgcGFyYW1ldGVyLgotICBwcml2YXRl
IHZvaWQgYXNzZXJ0UmVhZEZyb21SZWx1Y3RhbnRTdHJlYW0oYnl0ZVtdIGJ5dGVzLCBpbnQgY2h1
bmtTaXplKQotICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBCeXRlU3RyaW5nIGIgPSBC
eXRlU3RyaW5nLnJlYWRGcm9tKG5ldyBSZWx1Y3RhbnRTdHJlYW0oYnl0ZXMpLCBjaHVua1NpemUp
OwotICAgIGFzc2VydFRydWUoInJlYWRGcm9tIGJ5dGUgc3RyZWFtIG11c3QgY29udGFpbiB0aGUg
ZXhwZWN0ZWQgYnl0ZXMiLAotICAgICAgICBpc0FycmF5KGIudG9CeXRlQXJyYXkoKSwgYnl0ZXMp
KTsKLSAgfQotCi0gIC8vIFRlc3RzIHRoYXQgQnl0ZVN0cmluZy5yZWFkRnJvbSB3b3JrcyB3aXRo
IHN0cmVhbXMgdGhhdCBpbXBsZW1lbnQKLSAgLy8gYXZhaWxhYmxlKCkuCi0gIHB1YmxpYyB2b2lk
IHRlc3RSZWFkRnJvbV9hdmFpbGFibGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZpbmFs
IGJ5dGVbXSBkYXRhID0gZ2V0VGVzdEJ5dGVzKDB4MTAwMSk7Ci0KLSAgICBCeXRlU3RyaW5nIGJ5
dGVTdHJpbmcgPSBCeXRlU3RyaW5nLnJlYWRGcm9tKG5ldyBBdmFpbGFibGVTdHJlYW0oZGF0YSkp
OwotICAgIGFzc2VydFRydWUoInJlYWRGcm9tIGJ5dGUgc3RyZWFtIG11c3QgY29udGFpbiB0aGUg
ZXhwZWN0ZWQgYnl0ZXMiLAotICAgICAgICBpc0FycmF5KGJ5dGVTdHJpbmcudG9CeXRlQXJyYXko
KSwgZGF0YSkpOwotICB9Ci0KLSAgLy8gRmFpbHMgdW5sZXNzIEJ5dGVTdHJpbmcucmVhZEZyb20g
cmVhZHMgdGhlIGJ5dGVzIGNvcnJlY3RseS4KLSAgcHJpdmF0ZSB2b2lkIGFzc2VydFJlYWRGcm9t
KGJ5dGVbXSBieXRlcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBCeXRlU3RyaW5nIGJ5dGVT
dHJpbmcgPQotICAgICAgICBCeXRlU3RyaW5nLnJlYWRGcm9tKG5ldyBCeXRlQXJyYXlJbnB1dFN0
cmVhbShieXRlcykpOwotICAgIGFzc2VydFRydWUoInJlYWRGcm9tIGJ5dGUgc3RyZWFtIG11c3Qg
Y29udGFpbiB0aGUgZXhwZWN0ZWQgYnl0ZXMiLAotICAgICAgICBpc0FycmF5KGJ5dGVTdHJpbmcu
dG9CeXRlQXJyYXkoKSwgYnl0ZXMpKTsKLSAgfQotCi0gIC8vIEEgc3RyZWFtIHRoYXQgZmFpbHMg
d2hlbiByZWFkLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWlsU3RyZWFtIGV4dGVu
ZHMgSW5wdXRTdHJlYW0gewotICAgIEBPdmVycmlkZSBwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJzeW50aGV0aWMgZmFp
bHVyZSIpOwotICAgIH0KLSAgfQotCi0gIC8vIEEgc3RyZWFtIHRoYXQgc2ltdWxhdGVzIGJsb2Nr
aW5nIGJ5IG9ubHkgcHJvZHVjaW5nIDI1MCBjaGFyYWN0ZXJzCi0gIC8vIHBlciBjYWxsIHRvIHJl
YWQoYnl0ZVtdKS4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUmVsdWN0YW50U3RyZWFtIGV4dGVu
ZHMgSW5wdXRTdHJlYW0gewotICAgIHByb3RlY3RlZCBmaW5hbCBieXRlW10gZGF0YTsKLSAgICBw
cm90ZWN0ZWQgaW50IHBvcyA9IDA7Ci0KLSAgICBwdWJsaWMgUmVsdWN0YW50U3RyZWFtKGJ5dGVb
XSBkYXRhKSB7Ci0gICAgICB0aGlzLmRhdGEgPSBkYXRhOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZSBwdWJsaWMgaW50IHJlYWQoKSB7Ci0gICAgICBpZiAocG9zID09IGRhdGEubGVuZ3RoKSB7Ci0g
ICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBkYXRhW3Bv
cysrXTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUgcHVibGljIGludCByZWFkKGJ5
dGVbXSBidWYpIHsKLSAgICAgIHJldHVybiByZWFkKGJ1ZiwgMCwgYnVmLmxlbmd0aCk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlIHB1YmxpYyBpbnQgcmVhZChieXRlW10gYnVmLCBpbnQgb2Zmc2V0
LCBpbnQgc2l6ZSkgewotICAgICAgaWYgKHBvcyA9PSBkYXRhLmxlbmd0aCkgewotICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgICB9Ci0gICAgICBpbnQgY291bnQgPSBNYXRoLm1pbihNYXRoLm1pbihz
aXplLCBkYXRhLmxlbmd0aCAtIHBvcyksIDI1MCk7Ci0gICAgICBTeXN0ZW0uYXJyYXljb3B5KGRh
dGEsIHBvcywgYnVmLCBvZmZzZXQsIGNvdW50KTsKLSAgICAgIHBvcyArPSBjb3VudDsKLSAgICAg
IHJldHVybiBjb3VudDsKLSAgICB9Ci0gIH0KLQotICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgYWxz
byBpbXBsZW1lbnRzIGF2YWlsYWJsZSgpLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBB
dmFpbGFibGVTdHJlYW0gZXh0ZW5kcyBSZWx1Y3RhbnRTdHJlYW0gewotICAgIHB1YmxpYyBBdmFp
bGFibGVTdHJlYW0oYnl0ZVtdIGRhdGEpIHsKLSAgICAgIHN1cGVyKGRhdGEpOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZSBwdWJsaWMgaW50IGF2YWlsYWJsZSgpIHsKLSAgICAgIHJldHVybiBNYXRo
Lm1pbigyNTAsIGRhdGEubGVuZ3RoIC0gcG9zKTsKLSAgICB9Ci0gIH0KLQotICAvLyBBIHN0cmVh
bSB3aGljaCBleHBvc2VzIHRoZSBieXRlIGFycmF5IHBhc3NlZCBpbnRvIHJlYWQoYnl0ZVtdLCBp
bnQsIGludCkuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIEV2aWxJbnB1dFN0cmVhbSBleHRlbmRz
IElucHV0U3RyZWFtIHsKLSAgICBwdWJsaWMgYnl0ZVtdIGNhcHR1cmVkQXJyYXkgPSBudWxsOwot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCByZWFkKGJ5dGVbXSBidWYsIGludCBvZmYs
IGludCBsZW4pIHsKLSAgICAgIGlmIChjYXB0dXJlZEFycmF5ICE9IG51bGwpIHsKLSAgICAgICAg
cmV0dXJuIC0xOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY2FwdHVyZWRBcnJheSA9IGJ1ZjsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBsZW47ICsreCkgewotICAgICAgICAgIGJ1Zlt4
XSA9IChieXRlKSB4OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsZW47Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCByZWFkKCkgewotICAgICAgLy8g
UHVycG9zZWZ1bGx5IGRvIG5vdGhpbmcuCi0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICB9Ci0K
LSAgLy8gQSBzdHJlYW0gd2hpY2ggZXhwb3NlcyB0aGUgYnl0ZSBhcnJheSBwYXNzZWQgaW50byB3
cml0ZShieXRlW10sIGludCwgaW50KS4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRXZpbE91dHB1
dFN0cmVhbSBleHRlbmRzIE91dHB1dFN0cmVhbSB7Ci0gICAgcHVibGljIGJ5dGVbXSBjYXB0dXJl
ZEFycmF5ID0gbnVsbDsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlKGJ5
dGVbXSBidWYsIGludCBvZmYsIGludCBsZW4pIHsKLSAgICAgIGlmIChjYXB0dXJlZEFycmF5ID09
IG51bGwpIHsKLSAgICAgICAgY2FwdHVyZWRBcnJheSA9IGJ1ZjsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZShpbnQgaWdub3JlZCkgewotICAg
ICAgLy8gUHVycG9zZWZ1bGx5IGRvIG5vdGhpbmcuCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdFRvU3RyaW5nVXRmOCgpIHsKLSAgICBTdHJpbmcgdGVzdFN0cmluZyA9ICJJIGxvdmUg
dW5pY29kZSBcdTEyMzRcdTU2NzggY2hhcmFjdGVycyI7Ci0gICAgYnl0ZVtdIHRlc3RCeXRlcyA9
IHRlc3RTdHJpbmcuZ2V0Qnl0ZXMoSW50ZXJuYWwuVVRGXzgpOwotICAgIEJ5dGVTdHJpbmcgYnl0
ZVN0cmluZyA9IEJ5dGVTdHJpbmcuY29weUZyb20odGVzdEJ5dGVzKTsKLSAgICBhc3NlcnRFcXVh
bHMoImNvcHlUb1N0cmluZ1V0ZjggbXVzdCByZXNwZWN0IHRoZSBjaGFyc2V0IiwKLSAgICAgICAg
dGVzdFN0cmluZywgYnl0ZVN0cmluZy50b1N0cmluZ1V0ZjgoKSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0TmV3T3V0cHV0X0luaXRpYWxDYXBhY2l0eSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7
Ci0gICAgYnl0ZVtdIGJ5dGVzID0gZ2V0VGVzdEJ5dGVzKCk7Ci0gICAgQnl0ZVN0cmluZy5PdXRw
dXQgb3V0cHV0ID0gQnl0ZVN0cmluZy5uZXdPdXRwdXQoYnl0ZXMubGVuZ3RoICsgMTAwKTsKLSAg
ICBvdXRwdXQud3JpdGUoYnl0ZXMpOwotICAgIEJ5dGVTdHJpbmcgYnl0ZVN0cmluZyA9IG91dHB1
dC50b0J5dGVTdHJpbmcoKTsKLSAgICBhc3NlcnRUcnVlKAotICAgICAgICAiU3RyaW5nIGJ1aWx0
IGZyb20gbmV3T3V0cHV0KGludCkgbXVzdCBjb250YWluIHRoZSBleHBlY3RlZCBieXRlcyIsCi0g
ICAgICAgIGlzQXJyYXlSYW5nZShieXRlcywgYnl0ZVN0cmluZy50b0J5dGVBcnJheSgpLCAwLCBi
eXRlcy5sZW5ndGgpKTsKLSAgfQotCi0gIC8vIFRlc3QgbmV3T3V0cHV0KCkgdXNpbmcgYSB2YXJp
ZXR5IG9mIGJ1ZmZlciBzaXplcyBhbmQgYSB2YXJpZXR5IG9mIChmaXhlZCkKLSAgLy8gd3JpdGUg
c2l6ZXMKLSAgcHVibGljIHZvaWQgdGVzdE5ld091dHB1dF9BcnJheVdyaXRlKCkgewotICAgIGJ5
dGVbXSBieXRlcyA9IGdldFRlc3RCeXRlcygpOwotICAgIGludCBsZW5ndGggPSBieXRlcy5sZW5n
dGg7Ci0gICAgaW50W10gYnVmZmVyU2l6ZXMgPSB7MTI4LCAyNTYsIGxlbmd0aCAvIDIsIGxlbmd0
aCAtIDEsIGxlbmd0aCwgbGVuZ3RoICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAyICog
bGVuZ3RoLCAzICogbGVuZ3RofTsKLSAgICBpbnRbXSB3cml0ZVNpemVzID0gezEsIDQsIDUsIDcs
IDIzLCBieXRlcy5sZW5ndGh9OwotCi0gICAgZm9yIChpbnQgYnVmZmVyU2l6ZSA6IGJ1ZmZlclNp
emVzKSB7Ci0gICAgICBmb3IgKGludCB3cml0ZVNpemUgOiB3cml0ZVNpemVzKSB7Ci0gICAgICAg
IC8vIFRlc3Qgd3JpdGluZyB0aGUgZW50aXJlIG91dHB1dCB3cml0ZVNpemUgYnl0ZXMgYXQgYSB0
aW1lLgotICAgICAgICBCeXRlU3RyaW5nLk91dHB1dCBvdXRwdXQgPSBCeXRlU3RyaW5nLm5ld091
dHB1dChidWZmZXJTaXplKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkg
Kz0gd3JpdGVTaXplKSB7Ci0gICAgICAgICAgb3V0cHV0LndyaXRlKGJ5dGVzLCBpLCBNYXRoLm1p
bih3cml0ZVNpemUsIGxlbmd0aCAtIGkpKTsKLSAgICAgICAgfQotICAgICAgICBCeXRlU3RyaW5n
IGJ5dGVTdHJpbmcgPSBvdXRwdXQudG9CeXRlU3RyaW5nKCk7Ci0gICAgICAgIGFzc2VydFRydWUo
IlN0cmluZyBidWlsdCBmcm9tIG5ld091dHB1dCgpIG11c3QgY29udGFpbiB0aGUgZXhwZWN0ZWQg
Ynl0ZXMiLAotICAgICAgICAgICAgaXNBcnJheVJhbmdlKGJ5dGVzLCBieXRlU3RyaW5nLnRvQnl0
ZUFycmF5KCksIDAsIGJ5dGVzLmxlbmd0aCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8v
IFRlc3QgbmV3T3V0cHV0KCkgdXNpbmcgYSB2YXJpZXR5IG9mIGJ1ZmZlciBzaXplcywgYnV0IHdy
aXRpbmcgYWxsIHRoZQotICAvLyBjaGFyYWN0ZXJzIHVzaW5nIHdyaXRlKGJ5dGUpOwotICBwdWJs
aWMgdm9pZCB0ZXN0TmV3T3V0cHV0X1dyaXRlQ2hhcigpIHsKLSAgICBieXRlW10gYnl0ZXMgPSBn
ZXRUZXN0Qnl0ZXMoKTsKLSAgICBpbnQgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoOwotICAgIGludFtd
IGJ1ZmZlclNpemVzID0gezAsIDEsIDEyOCwgMjU2LCBsZW5ndGggLyAyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbmd0aCAtIDEsIGxlbmd0aCwgbGVuZ3RoICsgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAyICogbGVuZ3RoLCAzICogbGVuZ3RofTsKLSAgICBmb3IgKGludCBidWZm
ZXJTaXplIDogYnVmZmVyU2l6ZXMpIHsKLSAgICAgIEJ5dGVTdHJpbmcuT3V0cHV0IG91dHB1dCA9
IEJ5dGVTdHJpbmcubmV3T3V0cHV0KGJ1ZmZlclNpemUpOwotICAgICAgZm9yIChieXRlIGJ5dGVW
YWx1ZSA6IGJ5dGVzKSB7Ci0gICAgICAgIG91dHB1dC53cml0ZShieXRlVmFsdWUpOwotICAgICAg
fQotICAgICAgQnl0ZVN0cmluZyBieXRlU3RyaW5nID0gb3V0cHV0LnRvQnl0ZVN0cmluZygpOwot
ICAgICAgYXNzZXJ0VHJ1ZSgiU3RyaW5nIGJ1aWx0IGZyb20gbmV3T3V0cHV0KCkgbXVzdCBjb250
YWluIHRoZSBleHBlY3RlZCBieXRlcyIsCi0gICAgICAgICAgaXNBcnJheVJhbmdlKGJ5dGVzLCBi
eXRlU3RyaW5nLnRvQnl0ZUFycmF5KCksIDAsIGJ5dGVzLmxlbmd0aCkpOwotICAgIH0KLSAgfQot
Ci0gIC8vIFRlc3QgbmV3T3V0cHV0KCkgaW4gd2hpY2ggd2Ugd3JpdGUgdGhlIGJ5dGVzIHVzaW5n
IGEgdmFyaWV0eSBvZiBtZXRob2RzCi0gIC8vIGFuZCBzaXplcywgYW5kIGluIHdoaWNoIHdlIHJl
cGVhdGVkbHkgY2FsbCB0b0J5dGVTdHJpbmcoKSBpbiB0aGUgbWlkZGxlLgotICBwdWJsaWMgdm9p
ZCB0ZXN0TmV3T3V0cHV0X01peGVkKCkgewotICAgIFJhbmRvbSBybmcgPSBuZXcgUmFuZG9tKDEp
OwotICAgIGJ5dGVbXSBieXRlcyA9IGdldFRlc3RCeXRlcygpOwotICAgIGludCBsZW5ndGggPSBi
eXRlcy5sZW5ndGg7Ci0gICAgaW50W10gYnVmZmVyU2l6ZXMgPSB7MCwgMSwgMTI4LCAyNTYsIGxl
bmd0aCAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC0gMSwgbGVuZ3RoLCBs
ZW5ndGggKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiBsZW5ndGgsIDMgKiBsZW5n
dGh9OwotCi0gICAgZm9yIChpbnQgYnVmZmVyU2l6ZSA6IGJ1ZmZlclNpemVzKSB7Ci0gICAgICAv
LyBUZXN0IHdyaXRpbmcgdGhlIGVudGlyZSBvdXRwdXQgdXNpbmcgYSBtaXh0dXJlIG9mIHdyaXRl
IHNpemVzIGFuZAotICAgICAgLy8gbWV0aG9kczsKLSAgICAgIEJ5dGVTdHJpbmcuT3V0cHV0IG91
dHB1dCA9IEJ5dGVTdHJpbmcubmV3T3V0cHV0KGJ1ZmZlclNpemUpOwotICAgICAgaW50IHBvc2l0
aW9uID0gMDsKLSAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGJ5dGVzLmxlbmd0aCkgewotICAgICAg
ICBpZiAocm5nLm5leHRCb29sZWFuKCkpIHsKLSAgICAgICAgICBpbnQgY291bnQgPSAxICsgcm5n
Lm5leHRJbnQoYnl0ZXMubGVuZ3RoIC0gcG9zaXRpb24pOwotICAgICAgICAgIG91dHB1dC53cml0
ZShieXRlcywgcG9zaXRpb24sIGNvdW50KTsKLSAgICAgICAgICBwb3NpdGlvbiArPSBjb3VudDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBvdXRwdXQud3JpdGUoYnl0ZXNbcG9zaXRpb25d
KTsKLSAgICAgICAgICBwb3NpdGlvbisrOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFs
cygic2l6ZSgpIHJldHVybnMgdGhlIHJpZ2h0IHZhbHVlIiwgcG9zaXRpb24sIG91dHB1dC5zaXpl
KCkpOwotICAgICAgICBhc3NlcnRUcnVlKCJuZXdPdXRwdXQoKSBzdWJzdHJpbmcgbXVzdCBoYXZl
IGNvcnJlY3QgYnl0ZXMiLAotICAgICAgICAgICAgaXNBcnJheVJhbmdlKG91dHB1dC50b0J5dGVT
dHJpbmcoKS50b0J5dGVBcnJheSgpLAotICAgICAgICAgICAgICAgIGJ5dGVzLCAwLCBwb3NpdGlv
bikpOwotICAgICAgfQotICAgICAgQnl0ZVN0cmluZyBieXRlU3RyaW5nID0gb3V0cHV0LnRvQnl0
ZVN0cmluZygpOwotICAgICAgYXNzZXJ0VHJ1ZSgiU3RyaW5nIGJ1aWx0IGZyb20gbmV3T3V0cHV0
KCkgbXVzdCBjb250YWluIHRoZSBleHBlY3RlZCBieXRlcyIsCi0gICAgICAgICAgaXNBcnJheVJh
bmdlKGJ5dGVzLCBieXRlU3RyaW5nLnRvQnl0ZUFycmF5KCksIDAsIGJ5dGVzLmxlbmd0aCkpOwot
ICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROZXdPdXRwdXRFbXB0eSgpIHsKLSAgICAv
LyBNYWtlIHN1cmUgbmV3T3V0cHV0KCkgY29ycmVjdGx5IGJ1aWxkcyBlbXB0eSBieXRlIHN0cmlu
Z3MKLSAgICBCeXRlU3RyaW5nIGJ5dGVTdHJpbmcgPSBCeXRlU3RyaW5nLm5ld091dHB1dCgpLnRv
Qnl0ZVN0cmluZygpOwotICAgIGFzc2VydEVxdWFscyhCeXRlU3RyaW5nLkVNUFRZLCBieXRlU3Ry
aW5nKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROZXdPdXRwdXRfTXV0YXRpbmcoKSB0aHJv
d3MgSU9FeGNlcHRpb24gewotICAgIE91dHB1dCBvcyA9IEJ5dGVTdHJpbmcubmV3T3V0cHV0KDUp
OwotICAgIG9zLndyaXRlKG5ldyBieXRlW10gezEsIDIsIDMsIDQsIDV9KTsKLSAgICBFdmlsT3V0
cHV0U3RyZWFtIGVvcyA9IG5ldyBFdmlsT3V0cHV0U3RyZWFtKCk7Ci0gICAgb3Mud3JpdGVUbyhl
b3MpOwotICAgIGJ5dGVbXSBjYXB0dXJlZEFycmF5ID0gZW9zLmNhcHR1cmVkQXJyYXk7Ci0gICAg
Qnl0ZVN0cmluZyBieXRlU3RyaW5nID0gb3MudG9CeXRlU3RyaW5nKCk7Ci0gICAgYnl0ZVtdIG9s
ZFZhbHVlID0gYnl0ZVN0cmluZy50b0J5dGVBcnJheSgpOwotICAgIEFycmF5cy5maWxsKGNhcHR1
cmVkQXJyYXksIChieXRlKSAwKTsKLSAgICBieXRlW10gbmV3VmFsdWUgPSBieXRlU3RyaW5nLnRv
Qnl0ZUFycmF5KCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiT3V0cHV0IG11c3Qgbm90IHByb3ZpZGUgYWNj
ZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGJ5dGUgYXJyYXkiLAotICAgICAgICBBcnJheXMuZXF1YWxz
KG9sZFZhbHVlLCBuZXdWYWx1ZSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5ld0NvZGVk
QnVpbGRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gZ2V0VGVz
dEJ5dGVzKCk7Ci0gICAgQnl0ZVN0cmluZy5Db2RlZEJ1aWxkZXIgYnVpbGRlciA9IEJ5dGVTdHJp
bmcubmV3Q29kZWRCdWlsZGVyKGJ5dGVzLmxlbmd0aCk7Ci0gICAgYnVpbGRlci5nZXRDb2RlZE91
dHB1dCgpLndyaXRlUmF3Qnl0ZXMoYnl0ZXMpOwotICAgIEJ5dGVTdHJpbmcgYnl0ZVN0cmluZyA9
IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRUcnVlKCJTdHJpbmcgYnVpbHQgZnJvbSBuZXdD
b2RlZEJ1aWxkZXIoKSBtdXN0IGNvbnRhaW4gdGhlIGV4cGVjdGVkIGJ5dGVzIiwKLSAgICAgICAg
aXNBcnJheVJhbmdlKGJ5dGVzLCBieXRlU3RyaW5nLnRvQnl0ZUFycmF5KCksIDAsIGJ5dGVzLmxl
bmd0aCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFN1YnN0cmluZ1Bhcml0eSgpIHsKLSAg
ICBieXRlW10gYmlnQnl0ZXMgPSBnZXRUZXN0Qnl0ZXMoMjA0OCAqIDEwMjQsIDExMzM0NEwpOwot
ICAgIGludCBzdGFydCA9IDUxMiAqIDEwMjQgLSAzMzMzOwotICAgIGludCBlbmQgICA9IDUxMiAq
IDEwMjQgKyA3Nzc3OwotICAgIEJ5dGVTdHJpbmcgY29uY3JldGVTdWJzdHJpbmcgPSBCeXRlU3Ry
aW5nLmNvcHlGcm9tKGJpZ0J5dGVzKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7Ci0gICAgYm9vbGVh
biBvayA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBvayAmJiBpIDwgZW5kOyArK2kp
IHsKLSAgICAgIG9rID0gKGJpZ0J5dGVzW2ldID09IGNvbmNyZXRlU3Vic3RyaW5nLmJ5dGVBdChp
IC0gc3RhcnQpKTsKLSAgICB9Ci0gICAgYXNzZXJ0VHJ1ZSgiQ29uY3JldGUgc3Vic3RyaW5nIGRp
ZG4ndCBjYXB0dXJlIHRoZSByaWdodCBieXRlcyIsIG9rKTsKLQotICAgIEJ5dGVTdHJpbmcgbGl0
ZXJhbFN0cmluZyA9IEJ5dGVTdHJpbmcuY29weUZyb20oYmlnQnl0ZXMsIHN0YXJ0LCBlbmQgLSBz
dGFydCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiU3Vic3RyaW5nIG11c3QgYmUgZXF1YWwgdG8gbGl0ZXJh
bCBzdHJpbmciLAotICAgICAgICBjb25jcmV0ZVN1YnN0cmluZy5lcXVhbHMobGl0ZXJhbFN0cmlu
ZykpOwotICAgIGFzc2VydEVxdWFscygiU3Vic3RyaW5nIG11c3QgaGF2ZSBzYW1lIGhhc2hjb2Rl
IGFzIGxpdGVyYWwgc3RyaW5nIiwKLSAgICAgICAgbGl0ZXJhbFN0cmluZy5oYXNoQ29kZSgpLCBj
b25jcmV0ZVN1YnN0cmluZy5oYXNoQ29kZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RD
b21wb3NpdGVTdWJzdHJpbmcoKSB7Ci0gICAgYnl0ZVtdIHJlZmVyZW5jZUJ5dGVzID0gZ2V0VGVz
dEJ5dGVzKDc3NzQ4LCAxMTMzNDRMKTsKLQotICAgIExpc3Q8Qnl0ZVN0cmluZz4gcGllY2VzID0g
bWFrZUNvbmNyZXRlUGllY2VzKHJlZmVyZW5jZUJ5dGVzKTsKLSAgICBCeXRlU3RyaW5nIGxpc3RT
dHJpbmcgPSBCeXRlU3RyaW5nLmNvcHlGcm9tKHBpZWNlcyk7Ci0KLSAgICBpbnQgZnJvbSA9IDEw
MDA7Ci0gICAgaW50IHRvID0gNDAwMDA7Ci0gICAgQnl0ZVN0cmluZyBjb21wb3NpdGVTdWJzdHJp
bmcgPSBsaXN0U3RyaW5nLnN1YnN0cmluZyhmcm9tLCB0byk7Ci0gICAgYnl0ZVtdIHN1YnN0cmlu
Z0J5dGVzID0gY29tcG9zaXRlU3Vic3RyaW5nLnRvQnl0ZUFycmF5KCk7Ci0gICAgYm9vbGVhbiBz
dGlsbEVxdWFsID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgc3RpbGxFcXVhbCAmJiBpIDwg
dG8gLSBmcm9tOyArK2kpIHsKLSAgICAgIHN0aWxsRXF1YWwgPSByZWZlcmVuY2VCeXRlc1tmcm9t
ICsgaV0gPT0gc3Vic3RyaW5nQnl0ZXNbaV07Ci0gICAgfQotICAgIGFzc2VydFRydWUoIlN1YnN0
cmluZyBtdXN0IHJldHVybiBjb3JyZWN0IGJ5dGVzIiwgc3RpbGxFcXVhbCk7Ci0KLSAgICBzdGls
bEVxdWFsID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgc3RpbGxFcXVhbCAmJiBpIDwgdG8g
LSBmcm9tOyArK2kpIHsKLSAgICAgIHN0aWxsRXF1YWwgPSByZWZlcmVuY2VCeXRlc1tmcm9tICsg
aV0gPT0gY29tcG9zaXRlU3Vic3RyaW5nLmJ5dGVBdChpKTsKLSAgICB9Ci0gICAgYXNzZXJ0VHJ1
ZSgiU3Vic3RyaW5nIG11c3Qgc3VwcG9ydCBieXRlQXQoKSBjb3JyZWN0bHkiLCBzdGlsbEVxdWFs
KTsKLQotICAgIEJ5dGVTdHJpbmcgbGl0ZXJhbFN1YnN0cmluZyA9IEJ5dGVTdHJpbmcuY29weUZy
b20ocmVmZXJlbmNlQnl0ZXMsIGZyb20sIHRvIC0gZnJvbSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiQ29t
cG9zaXRlIHN1YnN0cmluZyBtdXN0IGVxdWFsIGEgbGl0ZXJhbCBzdWJzdHJpbmcgb3ZlciB0aGUg
c2FtZSBieXRlcyIsCi0gICAgICAgIGNvbXBvc2l0ZVN1YnN0cmluZy5lcXVhbHMobGl0ZXJhbFN1
YnN0cmluZykpOwotICAgIGFzc2VydFRydWUoIkxpdGVyYWwgc3Vic3RyaW5nIG11c3QgZXF1YWwg
YSBjb21wb3NpdGUgc3Vic3RyaW5nIG92ZXIgdGhlIHNhbWUgYnl0ZXMiLAotICAgICAgICBsaXRl
cmFsU3Vic3RyaW5nLmVxdWFscyhjb21wb3NpdGVTdWJzdHJpbmcpKTsKLQotICAgIGFzc2VydEVx
dWFscygiV2UgbXVzdCBnZXQgdGhlIHNhbWUgaGFzaGNvZGVzIGZvciBjb21wb3NpdGUgYW5kIGxp
dGVyYWwgc3Vic3RyaW5ncyIsCi0gICAgICAgIGxpdGVyYWxTdWJzdHJpbmcuaGFzaENvZGUoKSwg
Y29tcG9zaXRlU3Vic3RyaW5nLmhhc2hDb2RlKCkpOwotCi0gICAgYXNzZXJ0RmFsc2UoIldlIGNh
bid0IGJlIGVxdWFsIHRvIGEgcHJvcGVyIHN1YnN0cmluZyIsCi0gICAgICAgIGNvbXBvc2l0ZVN1
YnN0cmluZy5lcXVhbHMobGl0ZXJhbFN1YnN0cmluZy5zdWJzdHJpbmcoMCwgbGl0ZXJhbFN1YnN0
cmluZy5zaXplKCkgLSAxKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENvcHlGcm9tTGlz
dCgpIHsKLSAgICBieXRlW10gcmVmZXJlbmNlQnl0ZXMgPSBnZXRUZXN0Qnl0ZXMoNzc3NDgsIDEx
MzM0NEwpOwotICAgIEJ5dGVTdHJpbmcgbGl0ZXJhbFN0cmluZyA9IEJ5dGVTdHJpbmcuY29weUZy
b20ocmVmZXJlbmNlQnl0ZXMpOwotCi0gICAgTGlzdDxCeXRlU3RyaW5nPiBwaWVjZXMgPSBtYWtl
Q29uY3JldGVQaWVjZXMocmVmZXJlbmNlQnl0ZXMpOwotICAgIEJ5dGVTdHJpbmcgbGlzdFN0cmlu
ZyA9IEJ5dGVTdHJpbmcuY29weUZyb20ocGllY2VzKTsKLQotICAgIGFzc2VydFRydWUoIkNvbXBv
c2l0ZSBzdHJpbmcgbXVzdCBiZSBlcXVhbCB0byBsaXRlcmFsIHN0cmluZyIsCi0gICAgICAgIGxp
c3RTdHJpbmcuZXF1YWxzKGxpdGVyYWxTdHJpbmcpKTsKLSAgICBhc3NlcnRFcXVhbHMoIkNvbXBv
c2l0ZSBzdHJpbmcgbXVzdCBoYXZlIHNhbWUgaGFzaGNvZGUgYXMgbGl0ZXJhbCBzdHJpbmciLAot
ICAgICAgICBsaXRlcmFsU3RyaW5nLmhhc2hDb2RlKCksIGxpc3RTdHJpbmcuaGFzaENvZGUoKSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q29uY2F0KCkgewotICAgIGJ5dGVbXSByZWZlcmVu
Y2VCeXRlcyA9IGdldFRlc3RCeXRlcyg3Nzc0OCwgMTEzMzQ0TCk7Ci0gICAgQnl0ZVN0cmluZyBs
aXRlcmFsU3RyaW5nID0gQnl0ZVN0cmluZy5jb3B5RnJvbShyZWZlcmVuY2VCeXRlcyk7Ci0KLSAg
ICBMaXN0PEJ5dGVTdHJpbmc+IHBpZWNlcyA9IG1ha2VDb25jcmV0ZVBpZWNlcyhyZWZlcmVuY2VC
eXRlcyk7Ci0KLSAgICBJdGVyYXRvcjxCeXRlU3RyaW5nPiBpdGVyID0gcGllY2VzLml0ZXJhdG9y
KCk7Ci0gICAgQnl0ZVN0cmluZyBjb25jYXRlbmF0ZWRTdHJpbmcgPSBpdGVyLm5leHQoKTsKLSAg
ICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLSAgICAgIGNvbmNhdGVuYXRlZFN0cmluZyA9IGNv
bmNhdGVuYXRlZFN0cmluZy5jb25jYXQoaXRlci5uZXh0KCkpOwotICAgIH0KLQotICAgIGFzc2Vy
dFRydWUoIkNvbmNhdGVuYXRlZCBzdHJpbmcgbXVzdCBiZSBlcXVhbCB0byBsaXRlcmFsIHN0cmlu
ZyIsCi0gICAgICAgIGNvbmNhdGVuYXRlZFN0cmluZy5lcXVhbHMobGl0ZXJhbFN0cmluZykpOwot
ICAgIGFzc2VydEVxdWFscygiQ29uY2F0ZW5hdGVkIHN0cmluZyBtdXN0IGhhdmUgc2FtZSBoYXNo
Y29kZSBhcyBsaXRlcmFsIHN0cmluZyIsCi0gICAgICAgIGxpdGVyYWxTdHJpbmcuaGFzaENvZGUo
KSwgY29uY2F0ZW5hdGVkU3RyaW5nLmhhc2hDb2RlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRl
c3QgdGhlIFJvcGUgaW1wbGVtZW50YXRpb24gY2FuIGRlYWwgd2l0aCBFbXB0eSBub2RlcywgZXZl
biB0aG91Z2ggd2UKLSAgICogZ3VhcmQgYWdhaW5zdCB0aGVtLiBTZWUgYWxzbyB7QGxpbmsgTGl0
ZXJhbEJ5dGVTdHJpbmdUZXN0I3Rlc3RDb25jYXRfZW1wdHkoKX0uCi0gICAqLwotICBwdWJsaWMg
dm9pZCB0ZXN0Q29uY2F0X2VtcHR5KCkgewotICAgIGJ5dGVbXSByZWZlcmVuY2VCeXRlcyA9IGdl
dFRlc3RCeXRlcyg3NzQ4LCAxMTMzNDRMKTsKLSAgICBCeXRlU3RyaW5nIGxpdGVyYWxTdHJpbmcg
PSBCeXRlU3RyaW5nLmNvcHlGcm9tKHJlZmVyZW5jZUJ5dGVzKTsKLQotICAgIEJ5dGVTdHJpbmcg
ZHVvID0gUm9wZUJ5dGVTdHJpbmcubmV3SW5zdGFuY2VGb3JUZXN0KGxpdGVyYWxTdHJpbmcsIGxp
dGVyYWxTdHJpbmcpOwotICAgIEJ5dGVTdHJpbmcgdGVtcCA9IFJvcGVCeXRlU3RyaW5nLm5ld0lu
c3RhbmNlRm9yVGVzdCgKLSAgICAgICAgUm9wZUJ5dGVTdHJpbmcubmV3SW5zdGFuY2VGb3JUZXN0
KGxpdGVyYWxTdHJpbmcsIEJ5dGVTdHJpbmcuRU1QVFkpLAotICAgICAgICBSb3BlQnl0ZVN0cmlu
Zy5uZXdJbnN0YW5jZUZvclRlc3QoQnl0ZVN0cmluZy5FTVBUWSwgbGl0ZXJhbFN0cmluZykpOwot
ICAgIEJ5dGVTdHJpbmcgcXVpbnRldCA9IFJvcGVCeXRlU3RyaW5nLm5ld0luc3RhbmNlRm9yVGVz
dCh0ZW1wLCBCeXRlU3RyaW5nLkVNUFRZKTsKLQotICAgIGFzc2VydFRydWUoIlN0cmluZyB3aXRo
IGNvbmNhdGVuYXRlZCBudWxscyBtdXN0IGVxdWFsIHNpbXBsZSBjb25jYXRlbmF0ZSIsCi0gICAg
ICAgIGR1by5lcXVhbHMocXVpbnRldCkpOwotICAgIGFzc2VydEVxdWFscygiU3RyaW5nIHdpdGgg
Y29uY2F0ZW5hdGVkIG51bGxzIGhhdmUgc2FtZSBoYXNoY29kZSBhcyBzaW1wbGUgY29uY2F0ZW5h
dGUiLAotICAgICAgICBkdW8uaGFzaENvZGUoKSwgcXVpbnRldC5oYXNoQ29kZSgpKTsKLQotICAg
IEJ5dGVTdHJpbmcuQnl0ZUl0ZXJhdG9yIGR1b0l0ZXIgPSBkdW8uaXRlcmF0b3IoKTsKLSAgICBC
eXRlU3RyaW5nLkJ5dGVJdGVyYXRvciBxdWludGV0SXRlciA9IHF1aW50ZXQuaXRlcmF0b3IoKTsK
LSAgICBib29sZWFuIHN0aWxsRXF1YWwgPSB0cnVlOwotICAgIHdoaWxlIChzdGlsbEVxdWFsICYm
IHF1aW50ZXRJdGVyLmhhc05leHQoKSkgewotICAgICAgc3RpbGxFcXVhbCA9IChkdW9JdGVyLm5l
eHRCeXRlKCkgPT0gcXVpbnRldEl0ZXIubmV4dEJ5dGUoKSk7Ci0gICAgfQotICAgIGFzc2VydFRy
dWUoIldlIG11c3QgZ2V0IHRoZSBzYW1lIGNoYXJhY3RlcnMgYnkgaXRlcmF0aW5nIiwgc3RpbGxF
cXVhbCk7Ci0gICAgYXNzZXJ0RmFsc2UoIkl0ZXJhdG9yIG11c3QgYmUgZXhoYXVzdGVkIiwgZHVv
SXRlci5oYXNOZXh0KCkpOwotICAgIHRyeSB7Ci0gICAgICBkdW9JdGVyLm5leHRCeXRlKCk7Ci0g
ICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLiIpOwotICAgIH0gY2F0
Y2ggKE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgLy8gVGhpcyBpcyBzdWNjZXNz
Ci0gICAgfQotICAgIHRyeSB7Ci0gICAgICBxdWludGV0SXRlci5uZXh0Qnl0ZSgpOwotICAgICAg
ZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4iKTsKLSAgICB9IGNhdGNoIChO
b1N1Y2hFbGVtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIFRoaXMgaXMgc3VjY2VzcwotICAg
IH0KLQotICAgIC8vIFRlc3QgdGhhdCBldmVuIGlmIHdlIGZvcmNlIGVtcHR5IHN0cmluZ3MgaW4g
YXMgcm9wZSBsZWF2ZXMgaW4gdGhpcwotICAgIC8vIGNvbmZpZ3VyYXRpb24sIHdlIGFsd2F5cyBn
ZXQgYSAocG9zc2libHkgQm91bmRlZCkgTGl0ZXJhbEJ5dGVTdHJpbmcKLSAgICAvLyBmb3IgYSBs
ZW5ndGggMSBzdWJzdHJpbmcuCi0gICAgLy8KLSAgICAvLyBJdCBpcyBwb3NzaWJsZSwgdXNpbmcg
dGhlIHRlc3RpbmcgZmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGRlZXBseSBuZXN0ZWQKLSAgICAv
LyB0cmVlcyBvZiBlbXB0eSBsZWF2ZXMsIHRvIG1ha2UgYSBzdHJpbmcgdGhhdCB3aWxsIGZhaWwg
dGhpcyB0ZXN0LgotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgZHVvLnNpemUoKTsgKytpKSB7Ci0g
ICAgICBhc3NlcnRUcnVlKCJTdWJzdHJpbmdzIG9mIHNpemUoKSA8IDIgbXVzdCBub3QgYmUgUm9w
ZUJ5dGVTdHJpbmdzIiwKLSAgICAgICAgICBkdW8uc3Vic3RyaW5nKGkgLSAxLCBpKSBpbnN0YW5j
ZW9mIEJ5dGVTdHJpbmcuTGVhZkJ5dGVTdHJpbmcpOwotICAgIH0KLSAgICBmb3IgKGludCBpID0g
MTsgaSA8IHF1aW50ZXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgIGFzc2VydFRydWUoIlN1YnN0cmlu
Z3Mgb2Ygc2l6ZSgpIDwgMiBtdXN0IG5vdCBiZSBSb3BlQnl0ZVN0cmluZ3MiLAotICAgICAgICAg
IHF1aW50ZXQuc3Vic3RyaW5nKGkgLSAxLCBpKSBpbnN0YW5jZW9mIEJ5dGVTdHJpbmcuTGVhZkJ5
dGVTdHJpbmcpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydHNXaXRoKCkg
ewotICAgIGJ5dGVbXSBieXRlcyA9IGdldFRlc3RCeXRlcygxMDAwLCAxMjM0TCk7Ci0gICAgQnl0
ZVN0cmluZyBzdHJpbmcgPSBCeXRlU3RyaW5nLmNvcHlGcm9tKGJ5dGVzKTsKLSAgICBCeXRlU3Ry
aW5nIHByZWZpeCA9IEJ5dGVTdHJpbmcuY29weUZyb20oYnl0ZXMsIDAsIDUwMCk7Ci0gICAgQnl0
ZVN0cmluZyBzdWZmaXggPSBCeXRlU3RyaW5nLmNvcHlGcm9tKGJ5dGVzLCA0MDAsIDYwMCk7Ci0g
ICAgYXNzZXJ0VHJ1ZShzdHJpbmcuc3RhcnRzV2l0aChCeXRlU3RyaW5nLkVNUFRZKSk7Ci0gICAg
YXNzZXJ0VHJ1ZShzdHJpbmcuc3RhcnRzV2l0aChzdHJpbmcpKTsKLSAgICBhc3NlcnRUcnVlKHN0
cmluZy5zdGFydHNXaXRoKHByZWZpeCkpOwotICAgIGFzc2VydEZhbHNlKHN0cmluZy5zdGFydHNX
aXRoKHN1ZmZpeCkpOwotICAgIGFzc2VydEZhbHNlKHByZWZpeC5zdGFydHNXaXRoKHN1ZmZpeCkp
OwotICAgIGFzc2VydEZhbHNlKHN1ZmZpeC5zdGFydHNXaXRoKHByZWZpeCkpOwotICAgIGFzc2Vy
dEZhbHNlKEJ5dGVTdHJpbmcuRU1QVFkuc3RhcnRzV2l0aChwcmVmaXgpKTsKLSAgICBhc3NlcnRU
cnVlKEJ5dGVTdHJpbmcuRU1QVFkuc3RhcnRzV2l0aChCeXRlU3RyaW5nLkVNUFRZKSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0RW5kc1dpdGgoKSB7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gZ2V0
VGVzdEJ5dGVzKDEwMDAsIDEyMzRMKTsKLSAgICBCeXRlU3RyaW5nIHN0cmluZyA9IEJ5dGVTdHJp
bmcuY29weUZyb20oYnl0ZXMpOwotICAgIEJ5dGVTdHJpbmcgcHJlZml4ID0gQnl0ZVN0cmluZy5j
b3B5RnJvbShieXRlcywgMCwgNTAwKTsKLSAgICBCeXRlU3RyaW5nIHN1ZmZpeCA9IEJ5dGVTdHJp
bmcuY29weUZyb20oYnl0ZXMsIDQwMCwgNjAwKTsKLSAgICBhc3NlcnRUcnVlKHN0cmluZy5lbmRz
V2l0aChCeXRlU3RyaW5nLkVNUFRZKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzdHJpbmcuZW5kc1dpdGgo
c3RyaW5nKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzdHJpbmcuZW5kc1dpdGgoc3VmZml4KSk7Ci0gICAg
YXNzZXJ0RmFsc2Uoc3RyaW5nLmVuZHNXaXRoKHByZWZpeCkpOwotICAgIGFzc2VydEZhbHNlKHN1
ZmZpeC5lbmRzV2l0aChwcmVmaXgpKTsKLSAgICBhc3NlcnRGYWxzZShwcmVmaXguZW5kc1dpdGgo
c3VmZml4KSk7Ci0gICAgYXNzZXJ0RmFsc2UoQnl0ZVN0cmluZy5FTVBUWS5lbmRzV2l0aChzdWZm
aXgpKTsKLSAgICBhc3NlcnRUcnVlKEJ5dGVTdHJpbmcuRU1QVFkuZW5kc1dpdGgoQnl0ZVN0cmlu
Zy5FTVBUWSkpOwotICB9Ci0KLSAgc3RhdGljIExpc3Q8Qnl0ZVN0cmluZz4gbWFrZUNvbmNyZXRl
UGllY2VzKGJ5dGVbXSByZWZlcmVuY2VCeXRlcykgewotICAgIExpc3Q8Qnl0ZVN0cmluZz4gcGll
Y2VzID0gbmV3IEFycmF5TGlzdDxCeXRlU3RyaW5nPigpOwotICAgIC8vIFN0YXJ0aW5nIGxlbmd0
aCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRoYXQgd2UnbGwgZG8gc29tZSBjb25jYXRlbmF0aW5n
IGJ5Ci0gICAgLy8gY29weWluZyBpZiB3ZSBqdXN0IGNvbmNhdGVuYXRlIGFsbCB0aGVzZSBwaWVj
ZXMgdG9nZXRoZXIuCi0gICAgZm9yIChpbnQgc3RhcnQgPSAwLCBsZW5ndGggPSAxNjsgc3RhcnQg
PCByZWZlcmVuY2VCeXRlcy5sZW5ndGg7IHN0YXJ0ICs9IGxlbmd0aCkgewotICAgICAgbGVuZ3Ro
ID0gKGxlbmd0aCA8PCAxKSAtIDE7Ci0gICAgICBpZiAoc3RhcnQgKyBsZW5ndGggPiByZWZlcmVu
Y2VCeXRlcy5sZW5ndGgpIHsKLSAgICAgICAgbGVuZ3RoID0gcmVmZXJlbmNlQnl0ZXMubGVuZ3Ro
IC0gc3RhcnQ7Ci0gICAgICB9Ci0gICAgICBwaWVjZXMuYWRkKEJ5dGVTdHJpbmcuY29weUZyb20o
cmVmZXJlbmNlQnl0ZXMsIHN0YXJ0LCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBpZWNl
czsKLSAgfQotCi0gIHByaXZhdGUgYnl0ZVtdIHN1YnN0cmluZ1VzaW5nV3JpdGVUbygKLSAgICAg
IEJ5dGVTdHJpbmcgZGF0YSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91
dHB1dFN0cmVhbSgpOwotICAgIGRhdGEud3JpdGVUbyhvdXRwdXQsIG9mZnNldCwgbGVuZ3RoKTsK
LSAgICByZXR1cm4gb3V0cHV0LnRvQnl0ZUFycmF5KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0V3JpdGVUb091dHB1dFN0cmVhbSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIENob29z
ZSBhIHNpemUgbGFyZ2UgZW5vdWdoIHNvIHdoZW4gdHdvIEJ5dGVTdHJpbmdzIGFyZSBjb25jYXRl
bmF0ZWQgdGhleQotICAgIC8vIHdvbid0IGJlIG1lcmdlZCBpbnRvIG9uZSBieXRlIGFycmF5IGR1
ZSB0byBzb21lIG9wdGltaXphdGlvbnMuCi0gICAgZmluYWwgaW50IGRhdGFTaXplID0gQnl0ZVN0
cmluZy5DT05DQVRFTkFURV9CWV9DT1BZX1NJWkUgKyAxOwotICAgIGJ5dGVbXSBkYXRhMSA9IG5l
dyBieXRlW2RhdGFTaXplXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGExLmxlbmd0aDsg
aSsrKSB7Ci0gICAgICBkYXRhMVtpXSA9IChieXRlKSAxOwotICAgIH0KLSAgICBkYXRhMVsxXSA9
IChieXRlKSAxMTsKLSAgICAvLyBUZXN0IExpdGVyYWxCeXRlU3RyaW5nLndyaXRlVG8oT3V0cHV0
U3RyZWFtLGludCxpbnQpCi0gICAgQnl0ZVN0cmluZyBsZWZ0ID0gQnl0ZVN0cmluZy53cmFwKGRh
dGExKTsKLSAgICBieXRlW10gcmVzdWx0ID0gc3Vic3RyaW5nVXNpbmdXcml0ZVRvKGxlZnQsIDEs
IDEpOwotICAgIGFzc2VydEVxdWFscygxLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVh
bHMoKGJ5dGUpIDExLCByZXN1bHRbMF0pOwotCi0gICAgYnl0ZVtdIGRhdGEyID0gbmV3IGJ5dGVb
ZGF0YVNpemVdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF0YTEubGVuZ3RoOyBpKyspIHsK
LSAgICAgIGRhdGEyW2ldID0gKGJ5dGUpIDI7Ci0gICAgfQotICAgIEJ5dGVTdHJpbmcgcmlnaHQg
PSBCeXRlU3RyaW5nLndyYXAoZGF0YTIpOwotICAgIC8vIENvbmNhdGVuYXRlIHR3byBCeXRlU3Ry
aW5ncyB0byBjcmVhdGUgYSBSb3BlQnl0ZVN0cmluZy4KLSAgICBCeXRlU3RyaW5nIHJvb3QgPSBs
ZWZ0LmNvbmNhdChyaWdodCk7Ci0gICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBhY3R1YWxseSB0ZXN0
aW5nIGEgUm9wZUJ5dGVTdHJpbmcgd2l0aCBhIHNpbXBsZSB0cmVlCi0gICAgLy8gc3RydWN0dXJl
LgotICAgIGFzc2VydEVxdWFscygxLCByb290LmdldFRyZWVEZXB0aCgpKTsKLSAgICAvLyBXcml0
ZSBwYXJ0cyBvZiB0aGUgbGVmdCBub2RlLgotICAgIHJlc3VsdCA9IHN1YnN0cmluZ1VzaW5nV3Jp
dGVUbyhyb290LCAwLCBkYXRhU2l6ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGRhdGFTaXplLCByZXN1
bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoKGJ5dGUpIDEsIHJlc3VsdFswXSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKChieXRlKSAxLCByZXN1bHRbZGF0YVNpemUgLSAxXSk7Ci0gICAgLy8gV3Jp
dGUgcGFydHMgb2YgdGhlIHJpZ2h0IG5vZGUuCi0gICAgcmVzdWx0ID0gc3Vic3RyaW5nVXNpbmdX
cml0ZVRvKHJvb3QsIGRhdGFTaXplLCBkYXRhU2l6ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGRhdGFT
aXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoKGJ5dGUpIDIsIHJlc3VsdFsw
XSk7Ci0gICAgYXNzZXJ0RXF1YWxzKChieXRlKSAyLCByZXN1bHRbZGF0YVNpemUgLSAxXSk7Ci0g
ICAgLy8gV3JpdGUgYSBzZWdtZW50IG9mIGJ5dGVzIHRoYXQgcnVucyBhY3Jvc3MgYm90aCBub2Rl
cy4KLSAgICByZXN1bHQgPSBzdWJzdHJpbmdVc2luZ1dyaXRlVG8ocm9vdCwgZGF0YVNpemUgLyAy
LCBkYXRhU2l6ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGRhdGFTaXplLCByZXN1bHQubGVuZ3RoKTsK
LSAgICBhc3NlcnRFcXVhbHMoKGJ5dGUpIDEsIHJlc3VsdFswXSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KChieXRlKSAxLCByZXN1bHRbZGF0YVNpemUgLSBkYXRhU2l6ZSAvIDIgLSAxXSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKChieXRlKSAyLCByZXN1bHRbZGF0YVNpemUgLSBkYXRhU2l6ZSAvIDJdKTsKLSAg
ICBhc3NlcnRFcXVhbHMoKGJ5dGUpIDIsIHJlc3VsdFtkYXRhU2l6ZSAtIDFdKTsKLSAgfQotICAK
LSAgLyoqCi0gICAqIFRlc3RzIEJ5dGVTdHJpbmcgdXNlcyBBcnJheXMgYmFzZWQgYnl0ZSBjb3Bp
ZXIgd2hlbiBydW5uaW5nIHVuZGVyIEhvdHN0b3AgVk0uCi0gICAqLwotICBwdWJsaWMgdm9pZCB0
ZXN0Qnl0ZUFycmF5Q29waWVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgRmllbGQgZmllbGQg
PSBCeXRlU3RyaW5nLmNsYXNzLmdldERlY2xhcmVkRmllbGQoImJ5dGVBcnJheUNvcGllciIpOwot
ICAgIGZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0gICAgT2JqZWN0IGJ5dGVBcnJheUNvcGll
ciA9IGZpZWxkLmdldChudWxsKTsKLSAgICBhc3NlcnROb3ROdWxsKGJ5dGVBcnJheUNvcGllcik7
Ci0gICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgYnl0ZUFycmF5Q29waWVyLnRvU3RyaW5nKCksCi0g
ICAgICAgIGJ5dGVBcnJheUNvcGllci5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKS5lbmRzV2l0
aCgiQXJyYXlzQnl0ZUFycmF5Q29waWVyIikpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29y
ZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQ2hlY2tVdGY4VGVzdC5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0NoZWNrVXRmOFRlc3Qu
amF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2NWQxOWFiNzQ3MWE3MmRlNmRk
N2E4NjQyYjBlOGVjZTA0MmIyNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQ2hl
Y2tVdGY4VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7
Ci0KLWltcG9ydCBwcm90bzJfdGVzdF9jaGVja191dGY4LlRlc3RDaGVja1V0ZjguQnl0ZXNXcmFw
cGVyOwotaW1wb3J0IHByb3RvMl90ZXN0X2NoZWNrX3V0ZjguVGVzdENoZWNrVXRmOC5TdHJpbmdX
cmFwcGVyOwotaW1wb3J0IHByb3RvMl90ZXN0X2NoZWNrX3V0Zjhfc2l6ZS5UZXN0Q2hlY2tVdGY4
U2l6ZS5CeXRlc1dyYXBwZXJTaXplOwotaW1wb3J0IHByb3RvMl90ZXN0X2NoZWNrX3V0Zjhfc2l6
ZS5UZXN0Q2hlY2tVdGY4U2l6ZS5TdHJpbmdXcmFwcGVyU2l6ZTsKLQotaW1wb3J0IGp1bml0LmZy
YW1ld29yay5UZXN0Q2FzZTsKLQotLyoqCi0gKiBUZXN0IHRoYXQgcHJvdG9zIGdlbmVyYXRlZCB3
aXRoIGZpbGUgb3B0aW9uIGphdmFfc3RyaW5nX2NoZWNrX3V0ZjggZG8gaW4KLSAqIGZhY3QgcGVy
Zm9ybSBhcHByb3ByaWF0ZSBVVEYtOCBjaGVja3MuCi0gKgotICogQGF1dGhvciBqYmF1bUBnb29n
bGUuY29tIChKYWNvYiBCdXRjaGVyKQotICovCi1wdWJsaWMgY2xhc3MgQ2hlY2tVdGY4VGVzdCBl
eHRlbmRzIFRlc3RDYXNlIHsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVRGOF9C
WVRFX1NUUklOR19URVhUID0gInNvbWUgdGV4dCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEJ5
dGVTdHJpbmcgVVRGOF9CWVRFX1NUUklORyA9Ci0gICAgICBCeXRlU3RyaW5nLmNvcHlGcm9tVXRm
OChVVEY4X0JZVEVfU1RSSU5HX1RFWFQpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCeXRlU3Ry
aW5nIE5PTl9VVEY4X0JZVEVfU1RSSU5HID0KLSAgICAgIEJ5dGVTdHJpbmcuY29weUZyb20obmV3
IGJ5dGVbXXsoYnl0ZSkgMHg4MH0pOyAvLyBBIGxvbmUgY29udGludWF0aW9uIGJ5dGUuCi0KLSAg
cHVibGljIHZvaWQgdGVzdEJ1aWxkUmVxdWlyZWRTdHJpbmdXaXRoR29vZFV0ZjgoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBhc3NlcnRFcXVhbHMoVVRGOF9CWVRFX1NUUklOR19URVhULAotICAg
ICAgICAgICAgICAgICBTdHJpbmdXcmFwcGVyLm5ld0J1aWxkZXIoKS5zZXRSZXFCeXRlcyhVVEY4
X0JZVEVfU1RSSU5HKS5nZXRSZXEoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VS
ZXF1aXJlZFN0cmluZ1dpdGhHb29kVXRmOCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIEJ5dGVT
dHJpbmcgc2VyaWFsaXplZCA9Ci0gICAgICAgIEJ5dGVzV3JhcHBlci5uZXdCdWlsZGVyKCkuc2V0
UmVxKFVURjhfQllURV9TVFJJTkcpLmJ1aWxkKCkudG9CeXRlU3RyaW5nKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKFVURjhfQllURV9TVFJJTkdfVEVYVCwgU3RyaW5nV3JhcHBlci5wYXJzZXIoKS5wYXJz
ZUZyb20oc2VyaWFsaXplZCkuZ2V0UmVxKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEJ1
aWxkUmVxdWlyZWRTdHJpbmdXaXRoQmFkVXRmOCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIHRy
eSB7Ci0gICAgICBTdHJpbmdXcmFwcGVyLm5ld0J1aWxkZXIoKS5zZXRSZXFCeXRlcyhOT05fVVRG
OF9CWVRFX1NUUklORyk7Ci0gICAgICBmYWlsKCJFeHBlY3RlZCBJbGxlZ2FsQXJndW1lbnRFeGNl
cHRpb24gZm9yIG5vbiBVVEYtOCBieXRlIHN0cmluZy4iKTsKLSAgICB9IGNhdGNoIChJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoIkJ5dGUg
c3RyaW5nIGlzIG5vdCBVVEYtOC4iLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0QnVpbGRPcHRpb25hbFN0cmluZ1dpdGhCYWRVdGY4KCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIFN0cmluZ1dyYXBwZXIubmV3QnVp
bGRlcigpLnNldE9wdEJ5dGVzKE5PTl9VVEY4X0JZVEVfU1RSSU5HKTsKLSAgICAgIGZhaWwoIkV4
cGVjdGVkIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBmb3Igbm9uIFVURi04IGJ5dGUgc3RyaW5n
LiIpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGNlcHRpb24pIHsK
LSAgICAgIGFzc2VydEVxdWFscygiQnl0ZSBzdHJpbmcgaXMgbm90IFVURi04LiIsIGV4Y2VwdGlv
bi5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RCdWlsZFJl
cGVhdGVkU3RyaW5nV2l0aEJhZFV0ZjgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB0cnkgewot
ICAgICAgU3RyaW5nV3JhcHBlci5uZXdCdWlsZGVyKCkuYWRkUmVwQnl0ZXMoTk9OX1VURjhfQllU
RV9TVFJJTkcpOwotICAgICAgZmFpbCgiRXhwZWN0ZWQgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u
IGZvciBub24gVVRGLTggYnl0ZSBzdHJpbmcuIik7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3Vt
ZW50RXhjZXB0aW9uIGV4Y2VwdGlvbikgewotICAgICAgYXNzZXJ0RXF1YWxzKCJCeXRlIHN0cmlu
ZyBpcyBub3QgVVRGLTguIiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdFBhcnNlUmVxdWlyZWRTdHJpbmdXaXRoQmFkVXRmOCgpIHRocm93
cyBFeGNlcHRpb24gewotICAgIEJ5dGVTdHJpbmcgc2VyaWFsaXplZCA9Ci0gICAgICAgIEJ5dGVz
V3JhcHBlci5uZXdCdWlsZGVyKCkuc2V0UmVxKE5PTl9VVEY4X0JZVEVfU1RSSU5HKS5idWlsZCgp
LnRvQnl0ZVN0cmluZygpOwotICAgIHRyeSB7Ci0gICAgICBTdHJpbmdXcmFwcGVyLnBhcnNlcigp
LnBhcnNlRnJvbShzZXJpYWxpemVkKTsKLSAgICAgIGZhaWwoIkV4cGVjdGVkIEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbiBmb3Igbm9uIFVURi04IGJ5dGUgc3RyaW5nLiIpOwotICAgIH0g
Y2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLSAgICAg
IGFzc2VydEVxdWFscygiUHJvdG9jb2wgbWVzc2FnZSBoYWQgaW52YWxpZCBVVEYtOC4iLCBleGNl
cHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0QnVp
bGRSZXF1aXJlZFN0cmluZ1dpdGhCYWRVdGY4U2l6ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAg
IHRyeSB7Ci0gICAgICBTdHJpbmdXcmFwcGVyU2l6ZS5uZXdCdWlsZGVyKCkuc2V0UmVxQnl0ZXMo
Tk9OX1VURjhfQllURV9TVFJJTkcpOwotICAgICAgZmFpbCgiRXhwZWN0ZWQgSWxsZWdhbEFyZ3Vt
ZW50RXhjZXB0aW9uIGZvciBub24gVVRGLTggYnl0ZSBzdHJpbmcuIik7Ci0gICAgfSBjYXRjaCAo
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4Y2VwdGlvbikgewotICAgICAgYXNzZXJ0RXF1YWxz
KCJCeXRlIHN0cmluZyBpcyBub3QgVVRGLTguIiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7Ci0g
ICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEJ1aWxkT3B0aW9uYWxTdHJpbmdXaXRoQmFk
VXRmOFNpemUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB0cnkgewotICAgICAgU3RyaW5nV3Jh
cHBlclNpemUubmV3QnVpbGRlcigpLnNldE9wdEJ5dGVzKE5PTl9VVEY4X0JZVEVfU1RSSU5HKTsK
LSAgICAgIGZhaWwoIkV4cGVjdGVkIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBmb3Igbm9uIFVU
Ri04IGJ5dGUgc3RyaW5nLiIpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlv
biBleGNlcHRpb24pIHsKLSAgICAgIGFzc2VydEVxdWFscygiQnl0ZSBzdHJpbmcgaXMgbm90IFVU
Ri04LiIsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RCdWlsZFJlcGVhdGVkU3RyaW5nV2l0aEJhZFV0ZjhTaXplKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIFN0cmluZ1dyYXBwZXJTaXplLm5ld0J1aWxkZXIoKS5h
ZGRSZXBCeXRlcyhOT05fVVRGOF9CWVRFX1NUUklORyk7Ci0gICAgICBmYWlsKCJFeHBlY3RlZCBJ
bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZm9yIG5vbiBVVEYtOCBieXRlIHN0cmluZy4iKTsKLSAg
ICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0gICAgICBh
c3NlcnRFcXVhbHMoIkJ5dGUgc3RyaW5nIGlzIG5vdCBVVEYtOC4iLCBleGNlcHRpb24uZ2V0TWVz
c2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VSZXF1aXJlZFN0
cmluZ1dpdGhCYWRVdGY4U2l6ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIEJ5dGVTdHJpbmcg
c2VyaWFsaXplZCA9Ci0gICAgICAgIEJ5dGVzV3JhcHBlclNpemUubmV3QnVpbGRlcigpLnNldFJl
cShOT05fVVRGOF9CWVRFX1NUUklORykuYnVpbGQoKS50b0J5dGVTdHJpbmcoKTsKLSAgICB0cnkg
ewotICAgICAgU3RyaW5nV3JhcHBlclNpemUucGFyc2VyKCkucGFyc2VGcm9tKHNlcmlhbGl6ZWQp
OwotICAgICAgZmFpbCgiRXhwZWN0ZWQgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGZv
ciBub24gVVRGLTggYnl0ZSBzdHJpbmcuIik7Ci0gICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29s
QnVmZmVyRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotICAgICAgYXNzZXJ0RXF1YWxzKCJQcm90b2Nv
bCBtZXNzYWdlIGhhZCBpbnZhbGlkIFVURi04LiIsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwot
ICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvQ29kZWRJbnB1dFN0cmVhbVRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90
ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Db2RlZElucHV0U3RyZWFtVGVzdC5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTk0MGNlZGIyNDUzNWVkZTM3OTRjMzZiMTdj
ZDQ2M2Y0MGYxYTUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Db2RlZElucHV0
U3RyZWFtVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIxICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7
Ci0KLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLkJvb2xNZXNzYWdlOwot
aW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uSW50MzJNZXNzYWdlOwotaW1w
b3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uSW50NjRNZXNzYWdlOwotaW1wb3J0
IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzOwotaW1wb3J0IHBy
b3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdFJlY3Vyc2l2ZU1lc3NhZ2U7Ci0KLWlt
cG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJh
eUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1w
b3J0IGphdmEuaW8uRmlsdGVySW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlv
bjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZm
ZXI7Ci0KLS8qKgotICogVW5pdCB0ZXN0IGZvciB7QGxpbmsgQ29kZWRJbnB1dFN0cmVhbX0uCi0g
KgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqLwotcHVibGlj
IGNsYXNzIENvZGVkSW5wdXRTdHJlYW1UZXN0IGV4dGVuZHMgVGVzdENhc2UgewotICAvKioKLSAg
ICogSGVscGVyIHRvIGNvbnN0cnVjdCBhIGJ5dGUgYXJyYXkgZnJvbSBhIGJ1bmNoIG9mIGJ5dGVz
LiAgVGhlIGlucHV0cyBhcmUKLSAgICogYWN0dWFsbHkgaW50cyBzbyB0aGF0IEkgY2FuIHVzZSBo
ZXggbm90YXRpb24gYW5kIG5vdCBnZXQgc3R1cGlkIGVycm9ycwotICAgKiBhYm91dCBwcmVjaXNp
b24uCi0gICAqLwotICBwcml2YXRlIGJ5dGVbXSBieXRlcyhpbnQuLi4gYnl0ZXNBc0ludHMpIHsK
LSAgICBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVtieXRlc0FzSW50cy5sZW5ndGhdOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgYnl0ZXNBc0ludHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGJ5dGVz
W2ldID0gKGJ5dGUpIGJ5dGVzQXNJbnRzW2ldOwotICAgIH0KLSAgICByZXR1cm4gYnl0ZXM7Ci0g
IH0KLQotICAvKioKLSAgICogQW4gSW5wdXRTdHJlYW0gd2hpY2ggbGltaXRzIHRoZSBudW1iZXIg
b2YgYnl0ZXMgaXQgcmVhZHMgYXQgYSB0aW1lLgotICAgKiBXZSB1c2UgdGhpcyB0byBtYWtlIHN1
cmUgdGhhdCBDb2RlZElucHV0U3RyZWFtIGRvZXNuJ3Qgc2NyZXcgdXAgd2hlbgotICAgKiByZWFk
aW5nIGluIHNtYWxsIGJsb2Nrcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNz
IFNtYWxsQmxvY2tJbnB1dFN0cmVhbSBleHRlbmRzIEZpbHRlcklucHV0U3RyZWFtIHsKLSAgICBw
cml2YXRlIGZpbmFsIGludCBibG9ja1NpemU7Ci0KLSAgICBwdWJsaWMgU21hbGxCbG9ja0lucHV0
U3RyZWFtKGJ5dGVbXSBkYXRhLCBpbnQgYmxvY2tTaXplKSB7Ci0gICAgICB0aGlzKG5ldyBCeXRl
QXJyYXlJbnB1dFN0cmVhbShkYXRhKSwgYmxvY2tTaXplKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
U21hbGxCbG9ja0lucHV0U3RyZWFtKElucHV0U3RyZWFtIGluLCBpbnQgYmxvY2tTaXplKSB7Ci0g
ICAgICBzdXBlcihpbik7Ci0gICAgICB0aGlzLmJsb2NrU2l6ZSA9IGJsb2NrU2l6ZTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGIpIHRocm93cyBJ
T0V4Y2VwdGlvbiB7Ci0gICAgICByZXR1cm4gc3VwZXIucmVhZChiLCAwLCBNYXRoLm1pbihiLmxl
bmd0aCwgYmxvY2tTaXplKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGlu
dCByZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24gewot
ICAgICAgcmV0dXJuIHN1cGVyLnJlYWQoYiwgb2ZmLCBNYXRoLm1pbihsZW4sIGJsb2NrU2l6ZSkp
OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhc3NlcnREYXRhQ29uc3VtZWQoYnl0ZVtd
IGRhdGEsIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQpCi0gICAgICB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIGFzc2VydEVxdWFscyhkYXRhLmxlbmd0aCwgaW5wdXQuZ2V0VG90YWxCeXRlc1JlYWQo
KSk7Ci0gICAgYXNzZXJ0VHJ1ZShpbnB1dC5pc0F0RW5kKCkpOwotICB9Ci0KLSAgLyoqCi0gICAq
IFBhcnNlcyB0aGUgZ2l2ZW4gYnl0ZXMgdXNpbmcgcmVhZFJhd1ZhcmludDMyKCkgYW5kIHJlYWRS
YXdWYXJpbnQ2NCgpIGFuZAotICAgKiBjaGVja3MgdGhhdCB0aGUgcmVzdWx0IG1hdGNoZXMgdGhl
IGdpdmVuIHZhbHVlLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGFzc2VydFJlYWRWYXJpbnQoYnl0
ZVtdIGRhdGEsIGxvbmcgdmFsdWUpIHRocm93cyBFeGNlcHRpb24gewotICAgIENvZGVkSW5wdXRT
dHJlYW0gaW5wdXQgPSBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKGRhdGEpOwotICAgIGFz
c2VydEVxdWFscygoaW50KSB2YWx1ZSwgaW5wdXQucmVhZFJhd1ZhcmludDMyKCkpOwotICAgIGFz
c2VydERhdGFDb25zdW1lZChkYXRhLCBpbnB1dCk7Ci0KLSAgICBpbnB1dCA9IENvZGVkSW5wdXRT
dHJlYW0ubmV3SW5zdGFuY2UoZGF0YSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHZhbHVlLCBpbnB1dC5y
ZWFkUmF3VmFyaW50NjQoKSk7Ci0gICAgYXNzZXJ0RGF0YUNvbnN1bWVkKGRhdGEsIGlucHV0KTsK
LQotICAgIGlucHV0ID0gQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShkYXRhKTsKLSAgICBh
c3NlcnRFcXVhbHModmFsdWUsIGlucHV0LnJlYWRSYXdWYXJpbnQ2NFNsb3dQYXRoKCkpOwotICAg
IGFzc2VydERhdGFDb25zdW1lZChkYXRhLCBpbnB1dCk7Ci0KLSAgICBpbnB1dCA9IENvZGVkSW5w
dXRTdHJlYW0ubmV3SW5zdGFuY2UoZGF0YSk7Ci0gICAgYXNzZXJ0VHJ1ZShpbnB1dC5za2lwRmll
bGQoV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQpKTsKLSAgICBhc3NlcnREYXRhQ29uc3VtZWQo
ZGF0YSwgaW5wdXQpOwotCi0gICAgLy8gVHJ5IGRpZmZlcmVudCBibG9jayBzaXplcy4KLSAgICBm
b3IgKGludCBibG9ja1NpemUgPSAxOyBibG9ja1NpemUgPD0gMTY7IGJsb2NrU2l6ZSAqPSAyKSB7
Ci0gICAgICBpbnB1dCA9IENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2UoCi0gICAgICAgIG5l
dyBTbWFsbEJsb2NrSW5wdXRTdHJlYW0oZGF0YSwgYmxvY2tTaXplKSk7Ci0gICAgICBhc3NlcnRF
cXVhbHMoKGludCkgdmFsdWUsIGlucHV0LnJlYWRSYXdWYXJpbnQzMigpKTsKLSAgICAgIGFzc2Vy
dERhdGFDb25zdW1lZChkYXRhLCBpbnB1dCk7Ci0KLSAgICAgIGlucHV0ID0gQ29kZWRJbnB1dFN0
cmVhbS5uZXdJbnN0YW5jZSgKLSAgICAgICAgbmV3IFNtYWxsQmxvY2tJbnB1dFN0cmVhbShkYXRh
LCBibG9ja1NpemUpKTsKLSAgICAgIGFzc2VydEVxdWFscyh2YWx1ZSwgaW5wdXQucmVhZFJhd1Zh
cmludDY0KCkpOwotICAgICAgYXNzZXJ0RGF0YUNvbnN1bWVkKGRhdGEsIGlucHV0KTsKLQotICAg
ICAgaW5wdXQgPSBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKAotICAgICAgICBuZXcgU21h
bGxCbG9ja0lucHV0U3RyZWFtKGRhdGEsIGJsb2NrU2l6ZSkpOwotICAgICAgYXNzZXJ0RXF1YWxz
KHZhbHVlLCBpbnB1dC5yZWFkUmF3VmFyaW50NjRTbG93UGF0aCgpKTsKLSAgICAgIGFzc2VydERh
dGFDb25zdW1lZChkYXRhLCBpbnB1dCk7Ci0KLSAgICAgIGlucHV0ID0gQ29kZWRJbnB1dFN0cmVh
bS5uZXdJbnN0YW5jZSgKLSAgICAgICAgbmV3IFNtYWxsQmxvY2tJbnB1dFN0cmVhbShkYXRhLCBi
bG9ja1NpemUpKTsKLSAgICAgIGFzc2VydFRydWUoaW5wdXQuc2tpcEZpZWxkKFdpcmVGb3JtYXQu
V0lSRVRZUEVfVkFSSU5UKSk7Ci0gICAgICBhc3NlcnREYXRhQ29uc3VtZWQoZGF0YSwgaW5wdXQp
OwotICAgIH0KLQotICAgIC8vIFRyeSByZWFkaW5nIGRpcmVjdCBmcm9tIGFuIElucHV0U3RyZWFt
LiAgV2Ugd2FudCB0byB2ZXJpZnkgdGhhdCBpdAotICAgIC8vIGRvZXNuJ3QgcmVhZCBwYXN0IHRo
ZSBlbmQgb2YgdGhlIGlucHV0LCBzbyB3ZSBjb3B5IHRvIGEgbmV3LCBiaWdnZXIKLSAgICAvLyBh
cnJheSBmaXJzdC4KLSAgICBieXRlW10gbG9uZ2VyRGF0YSA9IG5ldyBieXRlW2RhdGEubGVuZ3Ro
ICsgMV07Ci0gICAgU3lzdGVtLmFycmF5Y29weShkYXRhLCAwLCBsb25nZXJEYXRhLCAwLCBkYXRh
Lmxlbmd0aCk7Ci0gICAgSW5wdXRTdHJlYW0gcmF3SW5wdXQgPSBuZXcgQnl0ZUFycmF5SW5wdXRT
dHJlYW0obG9uZ2VyRGF0YSk7Ci0gICAgYXNzZXJ0RXF1YWxzKChpbnQpIHZhbHVlLCBDb2RlZElu
cHV0U3RyZWFtLnJlYWRSYXdWYXJpbnQzMihyYXdJbnB1dCkpOwotICAgIGFzc2VydEVxdWFscygx
LCByYXdJbnB1dC5hdmFpbGFibGUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2VzIHRoZSBn
aXZlbiBieXRlcyB1c2luZyByZWFkUmF3VmFyaW50MzIoKSBhbmQgcmVhZFJhd1ZhcmludDY0KCkg
YW5kCi0gICAqIGV4cGVjdHMgdGhlbSB0byBmYWlsIHdpdGggYW4gSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIHdob3NlCi0gICAqIGRlc2NyaXB0aW9uIG1hdGNoZXMgdGhlIGdpdmVuIG9u
ZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBhc3NlcnRSZWFkVmFyaW50RmFpbHVyZSgKLSAgICAg
IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBleHBlY3RlZCwgYnl0ZVtdIGRhdGEpCi0g
ICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gQ29k
ZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShkYXRhKTsKLSAgICB0cnkgewotICAgICAgaW5wdXQu
cmVhZFJhd1ZhcmludDMyKCk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhj
ZXB0aW9uLiIpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBl
KSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0TWVzc2FnZSgpLCBlLmdldE1lc3Nh
Z2UoKSk7Ci0gICAgfQotCi0gICAgaW5wdXQgPSBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNl
KGRhdGEpOwotICAgIHRyeSB7Ci0gICAgICBpbnB1dC5yZWFkUmF3VmFyaW50NjQoKTsKLSAgICAg
IGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaCAo
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIGFzc2VydEVxdWFscyhl
eHBlY3RlZC5nZXRNZXNzYWdlKCksIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBpbnB1
dCA9IENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2UoZGF0YSk7Ci0gICAgdHJ5IHsKLSAgICAg
IGlucHV0LnJlYWRSYXdWYXJpbnQ2NFNsb3dQYXRoKCk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2
ZSB0aHJvd24gYW4gZXhjZXB0aW9uLiIpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0TWVzc2Fn
ZSgpLCBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGdldCB0
aGUgc2FtZSBlcnJvciB3aGVuIHJlYWRpbmcgZGlyZWN0IGZyb20gYW4gSW5wdXRTdHJlYW0uCi0g
ICAgdHJ5IHsKLSAgICAgIENvZGVkSW5wdXRTdHJlYW0ucmVhZFJhd1ZhcmludDMyKG5ldyBCeXRl
QXJyYXlJbnB1dFN0cmVhbShkYXRhKSk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24g
YW4gZXhjZXB0aW9uLiIpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0TWVzc2FnZSgpLCBlLmdl
dE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIFRlc3RzIHJlYWRSYXdWYXJpbnQzMigp
IGFuZCByZWFkUmF3VmFyaW50NjQoKS4gKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlYWRWYXJpbnQo
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRSZWFkVmFyaW50KGJ5dGVzKDB4MDApLCAw
KTsKLSAgICBhc3NlcnRSZWFkVmFyaW50KGJ5dGVzKDB4MDEpLCAxKTsKLSAgICBhc3NlcnRSZWFk
VmFyaW50KGJ5dGVzKDB4N2YpLCAxMjcpOwotICAgIC8vIDE0ODgyCi0gICAgYXNzZXJ0UmVhZFZh
cmludChieXRlcygweGEyLCAweDc0KSwgKDB4MjIgPDwgMCkgfCAoMHg3NCA8PCA3KSk7Ci0gICAg
Ly8gMjk2MTQ4ODgzMAotICAgIGFzc2VydFJlYWRWYXJpbnQoYnl0ZXMoMHhiZSwgMHhmNywgMHg5
MiwgMHg4NCwgMHgwYiksCi0gICAgICAoMHgzZSA8PCAwKSB8ICgweDc3IDw8IDcpIHwgKDB4MTIg
PDwgMTQpIHwgKDB4MDQgPDwgMjEpIHwKLSAgICAgICgweDBiTCA8PCAyOCkpOwotCi0gICAgLy8g
NjQtYml0Ci0gICAgLy8gNzI1NjQ1NjEyNgotICAgIGFzc2VydFJlYWRWYXJpbnQoYnl0ZXMoMHhi
ZSwgMHhmNywgMHg5MiwgMHg4NCwgMHgxYiksCi0gICAgICAoMHgzZSA8PCAwKSB8ICgweDc3IDw8
IDcpIHwgKDB4MTIgPDwgMTQpIHwgKDB4MDQgPDwgMjEpIHwKLSAgICAgICgweDFiTCA8PCAyOCkp
OwotICAgIC8vIDQxMjU2MjAyNTgwNzE4MzM2Ci0gICAgYXNzZXJ0UmVhZFZhcmludCgKLSAgICAg
IGJ5dGVzKDB4ODAsIDB4ZTYsIDB4ZWIsIDB4OWMsIDB4YzMsIDB4YzksIDB4YTQsIDB4NDkpLAot
ICAgICAgKDB4MDAgPDwgMCkgfCAoMHg2NiA8PCA3KSB8ICgweDZiIDw8IDE0KSB8ICgweDFjIDw8
IDIxKSB8Ci0gICAgICAoMHg0M0wgPDwgMjgpIHwgKDB4NDlMIDw8IDM1KSB8ICgweDI0TCA8PCA0
MikgfCAoMHg0OUwgPDwgNDkpKTsKLSAgICAvLyAxMTk2NDM3ODMzMDk3ODczNTEzMQotICAgIGFz
c2VydFJlYWRWYXJpbnQoCi0gICAgICBieXRlcygweDliLCAweGE4LCAweGY5LCAweGMyLCAweGJi
LCAweGQ2LCAweDgwLCAweDg1LCAweGE2LCAweDAxKSwKLSAgICAgICgweDFiIDw8IDApIHwgKDB4
MjggPDwgNykgfCAoMHg3OSA8PCAxNCkgfCAoMHg0MiA8PCAyMSkgfAotICAgICAgKDB4M2JMIDw8
IDI4KSB8ICgweDU2TCA8PCAzNSkgfCAoMHgwMEwgPDwgNDIpIHwKLSAgICAgICgweDA1TCA8PCA0
OSkgfCAoMHgyNkwgPDwgNTYpIHwgKDB4MDFMIDw8IDYzKSk7Ci0KLSAgICAvLyBGYWlsdXJlcwot
ICAgIGFzc2VydFJlYWRWYXJpbnRGYWlsdXJlKAotICAgICAgSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uLm1hbGZvcm1lZFZhcmludCgpLAotICAgICAgYnl0ZXMoMHg4MCwgMHg4MCwgMHg4
MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAg
IDB4MDApKTsKLSAgICBhc3NlcnRSZWFkVmFyaW50RmFpbHVyZSgKLSAgICAgIEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbi50cnVuY2F0ZWRNZXNzYWdlKCksCi0gICAgICBieXRlcygweDgw
KSk7Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2VzIHRoZSBnaXZlbiBieXRlcyB1c2luZyByZWFk
UmF3TGl0dGxlRW5kaWFuMzIoKSBhbmQgY2hlY2tzCi0gICAqIHRoYXQgdGhlIHJlc3VsdCBtYXRj
aGVzIHRoZSBnaXZlbiB2YWx1ZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBhc3NlcnRSZWFkTGl0
dGxlRW5kaWFuMzIoYnl0ZVtdIGRhdGEsIGludCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBDb2RlZElucHV0U3Ry
ZWFtIGlucHV0ID0gQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShkYXRhKTsKLSAgICBhc3Nl
cnRFcXVhbHModmFsdWUsIGlucHV0LnJlYWRSYXdMaXR0bGVFbmRpYW4zMigpKTsKLSAgICBhc3Nl
cnRUcnVlKGlucHV0LmlzQXRFbmQoKSk7Ci0KLSAgICAvLyBUcnkgZGlmZmVyZW50IGJsb2NrIHNp
emVzLgotICAgIGZvciAoaW50IGJsb2NrU2l6ZSA9IDE7IGJsb2NrU2l6ZSA8PSAxNjsgYmxvY2tT
aXplICo9IDIpIHsKLSAgICAgIGlucHV0ID0gQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZSgK
LSAgICAgICAgbmV3IFNtYWxsQmxvY2tJbnB1dFN0cmVhbShkYXRhLCBibG9ja1NpemUpKTsKLSAg
ICAgIGFzc2VydEVxdWFscyh2YWx1ZSwgaW5wdXQucmVhZFJhd0xpdHRsZUVuZGlhbjMyKCkpOwot
ICAgICAgYXNzZXJ0VHJ1ZShpbnB1dC5pc0F0RW5kKCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgot
ICAgKiBQYXJzZXMgdGhlIGdpdmVuIGJ5dGVzIHVzaW5nIHJlYWRSYXdMaXR0bGVFbmRpYW42NCgp
IGFuZCBjaGVja3MKLSAgICogdGhhdCB0aGUgcmVzdWx0IG1hdGNoZXMgdGhlIGdpdmVuIHZhbHVl
LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGFzc2VydFJlYWRMaXR0bGVFbmRpYW42NChieXRlW10g
ZGF0YSwgbG9uZyB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gQ29kZWRJ
bnB1dFN0cmVhbS5uZXdJbnN0YW5jZShkYXRhKTsKLSAgICBhc3NlcnRFcXVhbHModmFsdWUsIGlu
cHV0LnJlYWRSYXdMaXR0bGVFbmRpYW42NCgpKTsKLSAgICBhc3NlcnRUcnVlKGlucHV0LmlzQXRF
bmQoKSk7Ci0KLSAgICAvLyBUcnkgZGlmZmVyZW50IGJsb2NrIHNpemVzLgotICAgIGZvciAoaW50
IGJsb2NrU2l6ZSA9IDE7IGJsb2NrU2l6ZSA8PSAxNjsgYmxvY2tTaXplICo9IDIpIHsKLSAgICAg
IGlucHV0ID0gQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZSgKLSAgICAgICAgbmV3IFNtYWxs
QmxvY2tJbnB1dFN0cmVhbShkYXRhLCBibG9ja1NpemUpKTsKLSAgICAgIGFzc2VydEVxdWFscyh2
YWx1ZSwgaW5wdXQucmVhZFJhd0xpdHRsZUVuZGlhbjY0KCkpOwotICAgICAgYXNzZXJ0VHJ1ZShp
bnB1dC5pc0F0RW5kKCkpOwotICAgIH0KLSAgfQotCi0gIC8qKiBUZXN0cyByZWFkUmF3TGl0dGxl
RW5kaWFuMzIoKSBhbmQgcmVhZFJhd0xpdHRsZUVuZGlhbjY0KCkuICovCi0gIHB1YmxpYyB2b2lk
IHRlc3RSZWFkTGl0dGxlRW5kaWFuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0UmVh
ZExpdHRsZUVuZGlhbjMyKGJ5dGVzKDB4NzgsIDB4NTYsIDB4MzQsIDB4MTIpLCAweDEyMzQ1Njc4
KTsKLSAgICBhc3NlcnRSZWFkTGl0dGxlRW5kaWFuMzIoYnl0ZXMoMHhmMCwgMHhkZSwgMHhiYywg
MHg5YSksIDB4OWFiY2RlZjApOwotCi0gICAgYXNzZXJ0UmVhZExpdHRsZUVuZGlhbjY0KAotICAg
ICAgYnl0ZXMoMHhmMCwgMHhkZSwgMHhiYywgMHg5YSwgMHg3OCwgMHg1NiwgMHgzNCwgMHgxMiks
Ci0gICAgICAweDEyMzQ1Njc4OWFiY2RlZjBMKTsKLSAgICBhc3NlcnRSZWFkTGl0dGxlRW5kaWFu
NjQoCi0gICAgICBieXRlcygweDc4LCAweDU2LCAweDM0LCAweDEyLCAweGYwLCAweGRlLCAweGJj
LCAweDlhKSwKLSAgICAgIDB4OWFiY2RlZjAxMjM0NTY3OEwpOwotICB9Ci0KLSAgLyoqIFRlc3Qg
ZGVjb2RlWmlnWmFnMzIoKSBhbmQgZGVjb2RlWmlnWmFnNjQoKS4gKi8KLSAgcHVibGljIHZvaWQg
dGVzdERlY29kZVppZ1phZygpIHRocm93cyBFeGNlcHRpb24gewotICAgIGFzc2VydEVxdWFscygg
MCwgQ29kZWRJbnB1dFN0cmVhbS5kZWNvZGVaaWdaYWczMigwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KC0xLCBDb2RlZElucHV0U3RyZWFtLmRlY29kZVppZ1phZzMyKDEpKTsKLSAgICBhc3NlcnRFcXVh
bHMoIDEsIENvZGVkSW5wdXRTdHJlYW0uZGVjb2RlWmlnWmFnMzIoMikpOwotICAgIGFzc2VydEVx
dWFscygtMiwgQ29kZWRJbnB1dFN0cmVhbS5kZWNvZGVaaWdaYWczMigzKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDB4M0ZGRkZGRkYsIENvZGVkSW5wdXRTdHJlYW0uZGVjb2RlWmlnWmFnMzIoMHg3RkZG
RkZGRSkpOwotICAgIGFzc2VydEVxdWFscygweEMwMDAwMDAwLCBDb2RlZElucHV0U3RyZWFtLmRl
Y29kZVppZ1phZzMyKDB4N0ZGRkZGRkYpKTsKLSAgICBhc3NlcnRFcXVhbHMoMHg3RkZGRkZGRiwg
Q29kZWRJbnB1dFN0cmVhbS5kZWNvZGVaaWdaYWczMigweEZGRkZGRkZFKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDB4ODAwMDAwMDAsIENvZGVkSW5wdXRTdHJlYW0uZGVjb2RlWmlnWmFnMzIoMHhGRkZG
RkZGRikpOwotCi0gICAgYXNzZXJ0RXF1YWxzKCAwLCBDb2RlZElucHV0U3RyZWFtLmRlY29kZVpp
Z1phZzY0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoLTEsIENvZGVkSW5wdXRTdHJlYW0uZGVjb2Rl
WmlnWmFnNjQoMSkpOwotICAgIGFzc2VydEVxdWFscyggMSwgQ29kZWRJbnB1dFN0cmVhbS5kZWNv
ZGVaaWdaYWc2NCgyKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKC0yLCBDb2RlZElucHV0U3RyZWFtLmRl
Y29kZVppZ1phZzY0KDMpKTsKLSAgICBhc3NlcnRFcXVhbHMoMHgwMDAwMDAwMDNGRkZGRkZGTCwK
LSAgICAgICAgICAgICAgICAgQ29kZWRJbnB1dFN0cmVhbS5kZWNvZGVaaWdaYWc2NCgweDAwMDAw
MDAwN0ZGRkZGRkVMKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDB4RkZGRkZGRkZDMDAwMDAwMEwsCi0g
ICAgICAgICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW0uZGVjb2RlWmlnWmFnNjQoMHgwMDAwMDAw
MDdGRkZGRkZGTCkpOwotICAgIGFzc2VydEVxdWFscygweDAwMDAwMDAwN0ZGRkZGRkZMLAotICAg
ICAgICAgICAgICAgICBDb2RlZElucHV0U3RyZWFtLmRlY29kZVppZ1phZzY0KDB4MDAwMDAwMDBG
RkZGRkZGRUwpKTsKLSAgICBhc3NlcnRFcXVhbHMoMHhGRkZGRkZGRjgwMDAwMDAwTCwKLSAgICAg
ICAgICAgICAgICAgQ29kZWRJbnB1dFN0cmVhbS5kZWNvZGVaaWdaYWc2NCgweDAwMDAwMDAwRkZG
RkZGRkZMKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDB4N0ZGRkZGRkZGRkZGRkZGRkwsCi0gICAgICAg
ICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW0uZGVjb2RlWmlnWmFnNjQoMHhGRkZGRkZGRkZGRkZG
RkZFTCkpOwotICAgIGFzc2VydEVxdWFscygweDgwMDAwMDAwMDAwMDAwMDBMLAotICAgICAgICAg
ICAgICAgICBDb2RlZElucHV0U3RyZWFtLmRlY29kZVppZ1phZzY0KDB4RkZGRkZGRkZGRkZGRkZG
RkwpKTsKLSAgfQotCi0gIC8qKiBUZXN0cyByZWFkaW5nIGFuZCBwYXJzaW5nIGEgd2hvbGUgbWVz
c2FnZSB3aXRoIGV2ZXJ5IGZpZWxkIHR5cGUuICovCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkV2hv
bGVNZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2Ug
PSBUZXN0VXRpbC5nZXRBbGxTZXQoKTsKLQotICAgIGJ5dGVbXSByYXdCeXRlcyA9IG1lc3NhZ2Uu
dG9CeXRlQXJyYXkoKTsKLSAgICBhc3NlcnRFcXVhbHMocmF3Qnl0ZXMubGVuZ3RoLCBtZXNzYWdl
LmdldFNlcmlhbGl6ZWRTaXplKCkpOwotCi0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UyID0gVGVz
dEFsbFR5cGVzLnBhcnNlRnJvbShyYXdCeXRlcyk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRmll
bGRzU2V0KG1lc3NhZ2UyKTsKLQotICAgIC8vIFRyeSBkaWZmZXJlbnQgYmxvY2sgc2l6ZXMuCi0g
ICAgZm9yIChpbnQgYmxvY2tTaXplID0gMTsgYmxvY2tTaXplIDwgMjU2OyBibG9ja1NpemUgKj0g
MikgewotICAgICAgbWVzc2FnZTIgPSBUZXN0QWxsVHlwZXMucGFyc2VGcm9tKAotICAgICAgICBu
ZXcgU21hbGxCbG9ja0lucHV0U3RyZWFtKHJhd0J5dGVzLCBibG9ja1NpemUpKTsKLSAgICAgIFRl
c3RVdGlsLmFzc2VydEFsbEZpZWxkc1NldChtZXNzYWdlMik7Ci0gICAgfQotICB9Ci0KLSAgLyoq
IFRlc3RzIHNraXBGaWVsZCgpLiAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2tpcFdob2xlTWVzc2Fn
ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0gVGVzdFV0
aWwuZ2V0QWxsU2V0KCk7Ci0gICAgYnl0ZVtdIHJhd0J5dGVzID0gbWVzc2FnZS50b0J5dGVBcnJh
eSgpOwotCi0gICAgLy8gQ3JlYXRlIHR3byBwYXJhbGxlbCBpbnB1dHMuICBQYXJzZSBvbmUgYXMg
dW5rbm93biBmaWVsZHMgd2hpbGUgdXNpbmcKLSAgICAvLyBza2lwRmllbGQoKSB0byBza2lwIGVh
Y2ggZmllbGQgb24gdGhlIG90aGVyLiAgRXhwZWN0IHRoZSBzYW1lIHRhZ3MuCi0gICAgQ29kZWRJ
bnB1dFN0cmVhbSBpbnB1dDEgPSBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKHJhd0J5dGVz
KTsKLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0MiA9IENvZGVkSW5wdXRTdHJlYW0ubmV3SW5z
dGFuY2UocmF3Qnl0ZXMpOwotICAgIFVua25vd25GaWVsZFNldC5CdWlsZGVyIHVua25vd25GaWVs
ZHMgPSBVbmtub3duRmllbGRTZXQubmV3QnVpbGRlcigpOwotCi0gICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgIGludCB0YWcgPSBpbnB1dDEucmVhZFRhZygpOwotICAgICAgYXNzZXJ0RXF1YWxzKHRh
ZywgaW5wdXQyLnJlYWRUYWcoKSk7Ci0gICAgICBpZiAodGFnID09IDApIHsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0gICAgICB1bmtub3duRmllbGRzLm1lcmdlRmllbGRGcm9tKHRhZywgaW5w
dXQxKTsKLSAgICAgIGlucHV0Mi5za2lwRmllbGQodGFnKTsKLSAgICB9Ci0gIH0KLQotCi0gIC8q
KgotICAgKiBUZXN0IHRoYXQgYSBidWcgaW4gc2tpcFJhd0J5dGVzKCkgaGFzIGJlZW4gZml4ZWQ6
ICBpZiB0aGUgc2tpcCBza2lwcwotICAgKiBleGFjdGx5IHVwIHRvIGEgbGltaXQsIHRoaXMgc2hv
dWxkIG5vdCBicmVhayB0aGluZ3MuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2tpcFJhd0J5
dGVzQnVnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYnl0ZVtdIHJhd0J5dGVzID0gbmV3IGJ5
dGVbXSB7IDEsIDIgfTsKLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gQ29kZWRJbnB1dFN0
cmVhbS5uZXdJbnN0YW5jZShyYXdCeXRlcyk7Ci0KLSAgICBpbnQgbGltaXQgPSBpbnB1dC5wdXNo
TGltaXQoMSk7Ci0gICAgaW5wdXQuc2tpcFJhd0J5dGVzKDEpOwotICAgIGlucHV0LnBvcExpbWl0
KGxpbWl0KTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgaW5wdXQucmVhZFJhd0J5dGUoKSk7Ci0gIH0K
LQotICAvKioKLSAgICogVGVzdCB0aGF0IGEgYnVnIGluIHNraXBSYXdCeXRlcygpIGhhcyBiZWVu
IGZpeGVkOiAgaWYgdGhlIHNraXAgc2tpcHMKLSAgICogcGFzdCB0aGUgZW5kIG9mIGEgYnVmZmVy
IHdpdGggYSBsaW1pdCB0aGF0IGhhcyBiZWVuIHNldCBwYXN0IHRoZSBlbmQgb2YKLSAgICogdGhh
dCBidWZmZXIsIHRoaXMgc2hvdWxkIG5vdCBicmVhayB0aGluZ3MuCi0gICAqLwotICBwdWJsaWMg
dm9pZCB0ZXN0U2tpcFJhd0J5dGVzUGFzdEVuZE9mQnVmZmVyV2l0aExpbWl0KCkgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgYnl0ZVtdIHJhd0J5dGVzID0gbmV3IGJ5dGVbXSB7IDEsIDIsIDMsIDQs
IDUgfTsKLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gQ29kZWRJbnB1dFN0cmVhbS5uZXdJ
bnN0YW5jZSgKLSAgICAgICAgbmV3IFNtYWxsQmxvY2tJbnB1dFN0cmVhbShyYXdCeXRlcywgMykp
OwotCi0gICAgaW50IGxpbWl0ID0gaW5wdXQucHVzaExpbWl0KDQpOwotICAgIC8vIEluIG9yZGVy
IHRvIGV4cG9zZSB0aGUgYnVnIHdlIG5lZWQgdG8gcmVhZCBhdCBsZWFzdCBvbmUgYnl0ZSB0byBw
cmltZSB0aGUKLSAgICAvLyBidWZmZXIgaW5zaWRlIHRoZSBDb2RlZElucHV0U3RyZWFtLgotICAg
IGFzc2VydEVxdWFscygxLCBpbnB1dC5yZWFkUmF3Qnl0ZSgpKTsKLSAgICAvLyBTa2lwIHRvIHRo
ZSBlbmQgb2YgdGhlIGxpbWl0LgotICAgIGlucHV0LnNraXBSYXdCeXRlcygzKTsKLSAgICBhc3Nl
cnRUcnVlKGlucHV0LmlzQXRFbmQoKSk7Ci0gICAgaW5wdXQucG9wTGltaXQobGltaXQpOwotICAg
IGFzc2VydEVxdWFscyg1LCBpbnB1dC5yZWFkUmF3Qnl0ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RSZWFkSHVnZUJsb2IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBBbGxvY2F0
ZSBhbmQgaW5pdGlhbGl6ZSBhIDFNQiBibG9iLgotICAgIGJ5dGVbXSBibG9iID0gbmV3IGJ5dGVb
MSA8PCAyMF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9iLmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICBibG9iW2ldID0gKGJ5dGUpIGk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBhIG1lc3NhZ2Ug
Y29udGFpbmluZyBpdC4KLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFs
bFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0VXRpbC5zZXRBbGxGaWVsZHMoYnVpbGRlcik7
Ci0gICAgYnVpbGRlci5zZXRPcHRpb25hbEJ5dGVzKEJ5dGVTdHJpbmcuY29weUZyb20oYmxvYikp
OwotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotCi0gICAgLy8g
U2VyaWFsaXplIGFuZCBwYXJzZSBpdC4gIE1ha2Ugc3VyZSB0byBwYXJzZSBmcm9tIGFuIElucHV0
U3RyZWFtLCBub3QKLSAgICAvLyBkaXJlY3RseSBmcm9tIGEgQnl0ZVN0cmluZywgc28gdGhhdCBD
b2RlZElucHV0U3RyZWFtIHVzZXMgYnVmZmVyZWQKLSAgICAvLyByZWFkaW5nLgotICAgIFRlc3RB
bGxUeXBlcyBtZXNzYWdlMiA9Ci0gICAgICBUZXN0QWxsVHlwZXMucGFyc2VGcm9tKG1lc3NhZ2Uu
dG9CeXRlU3RyaW5nKCkubmV3SW5wdXQoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMobWVzc2FnZS5n
ZXRPcHRpb25hbEJ5dGVzKCksIG1lc3NhZ2UyLmdldE9wdGlvbmFsQnl0ZXMoKSk7Ci0KLSAgICAv
LyBNYWtlIHN1cmUgYWxsIHRoZSBvdGhlciBmaWVsZHMgd2VyZSBwYXJzZWQgY29ycmVjdGx5Lgot
ICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlMyA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKG1lc3Nh
Z2UyKQotICAgICAgLnNldE9wdGlvbmFsQnl0ZXMoVGVzdFV0aWwuZ2V0QWxsU2V0KCkuZ2V0T3B0
aW9uYWxCeXRlcygpKQotICAgICAgLmJ1aWxkKCk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRmll
bGRzU2V0KG1lc3NhZ2UzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkTWFsaWNpb3Vz
bHlMYXJnZUJsb2IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBCeXRlU3RyaW5nLk91dHB1dCBy
YXdPdXRwdXQgPSBCeXRlU3RyaW5nLm5ld091dHB1dCgpOwotICAgIENvZGVkT3V0cHV0U3RyZWFt
IG91dHB1dCA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNlKHJhd091dHB1dCk7Ci0KLSAg
ICBpbnQgdGFnID0gV2lyZUZvcm1hdC5tYWtlVGFnKDEsIFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVO
R1RIX0RFTElNSVRFRCk7Ci0gICAgb3V0cHV0LndyaXRlUmF3VmFyaW50MzIodGFnKTsKLSAgICBv
dXRwdXQud3JpdGVSYXdWYXJpbnQzMigweDdGRkZGRkZGKTsKLSAgICBvdXRwdXQud3JpdGVSYXdC
eXRlcyhuZXcgYnl0ZVszMl0pOyAgLy8gUGFkIHdpdGggYSBmZXcgcmFuZG9tIGJ5dGVzLgotICAg
IG91dHB1dC5mbHVzaCgpOwotCi0gICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9IHJhd091dHB1
dC50b0J5dGVTdHJpbmcoKS5uZXdDb2RlZElucHV0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHRhZywg
aW5wdXQucmVhZFRhZygpKTsKLQotICAgIHRyeSB7Ci0gICAgICBpbnB1dC5yZWFkQnl0ZXMoKTsK
LSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24hIik7Ci0gICAgfSBj
YXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIHN1Y2Nl
c3MuCi0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBUZXN0UmVjdXJzaXZlTWVzc2FnZSBtYWtlUmVj
dXJzaXZlTWVzc2FnZShpbnQgZGVwdGgpIHsKLSAgICBpZiAoZGVwdGggPT0gMCkgewotICAgICAg
cmV0dXJuIFRlc3RSZWN1cnNpdmVNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRJKDUpLmJ1aWxkKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBUZXN0UmVjdXJzaXZlTWVzc2FnZS5uZXdCdWls
ZGVyKCkKLSAgICAgICAgLnNldEEobWFrZVJlY3Vyc2l2ZU1lc3NhZ2UoZGVwdGggLSAxKSkuYnVp
bGQoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYXNzZXJ0TWVzc2FnZURlcHRoKFRl
c3RSZWN1cnNpdmVNZXNzYWdlIG1lc3NhZ2UsIGludCBkZXB0aCkgewotICAgIGlmIChkZXB0aCA9
PSAwKSB7Ci0gICAgICBhc3NlcnRGYWxzZShtZXNzYWdlLmhhc0EoKSk7Ci0gICAgICBhc3NlcnRF
cXVhbHMoNSwgbWVzc2FnZS5nZXRJKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBhc3NlcnRUcnVl
KG1lc3NhZ2UuaGFzQSgpKTsKLSAgICAgIGFzc2VydE1lc3NhZ2VEZXB0aChtZXNzYWdlLmdldEEo
KSwgZGVwdGggLSAxKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TWFsaWNpb3Vz
UmVjdXJzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgQnl0ZVN0cmluZyBkYXRhMTAwID0g
bWFrZVJlY3Vyc2l2ZU1lc3NhZ2UoMTAwKS50b0J5dGVTdHJpbmcoKTsKLSAgICBCeXRlU3RyaW5n
IGRhdGExMDEgPSBtYWtlUmVjdXJzaXZlTWVzc2FnZSgxMDEpLnRvQnl0ZVN0cmluZygpOwotCi0g
ICAgYXNzZXJ0TWVzc2FnZURlcHRoKFRlc3RSZWN1cnNpdmVNZXNzYWdlLnBhcnNlRnJvbShkYXRh
MTAwKSwgMTAwKTsKLQotICAgIHRyeSB7Ci0gICAgICBUZXN0UmVjdXJzaXZlTWVzc2FnZS5wYXJz
ZUZyb20oZGF0YTEwMSk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0
aW9uISIpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBzdWNjZXNzLgotICAgIH0KLQotICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQg
PSBkYXRhMTAwLm5ld0NvZGVkSW5wdXQoKTsKLSAgICBpbnB1dC5zZXRSZWN1cnNpb25MaW1pdCg4
KTsKLSAgICB0cnkgewotICAgICAgVGVzdFJlY3Vyc2l2ZU1lc3NhZ2UucGFyc2VGcm9tKGlucHV0
KTsKLSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24hIik7Ci0gICAg
fSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIHN1
Y2Nlc3MuCi0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrU2l6ZUxpbWl0RXhjZWVk
ZWQoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIGFzc2VydEVxdWFs
cygKLSAgICAgICAgICBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24uc2l6ZUxpbWl0RXhj
ZWVkZWQoKS5nZXRNZXNzYWdlKCksCi0gICAgICAgICAgZS5nZXRNZXNzYWdlKCkpOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdFNpemVMaW1pdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIENv
ZGVkSW5wdXRTdHJlYW0gaW5wdXQgPSBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKAotICAg
ICAgICBuZXcgU21hbGxCbG9ja0lucHV0U3RyZWFtKAotICAgICAgICAgICAgVGVzdFV0aWwuZ2V0
QWxsU2V0KCkudG9CeXRlU3RyaW5nKCkubmV3SW5wdXQoKSwgMTYpKTsKLSAgICBpbnB1dC5zZXRT
aXplTGltaXQoMTYpOwotCi0gICAgdHJ5IHsKLSAgICAgIFRlc3RBbGxUeXBlcy5wYXJzZUZyb20o
aW5wdXQpOwotICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiEiKTsK
LSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZXhwZWN0ZWQpIHsK
LSAgICAgIGNoZWNrU2l6ZUxpbWl0RXhjZWVkZWQoZXhwZWN0ZWQpOwotICAgIH0KLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RSZXNldFNpemVDb3VudGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9IENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2Uo
Ci0gICAgICAgIG5ldyBTbWFsbEJsb2NrSW5wdXRTdHJlYW0obmV3IGJ5dGVbMjU2XSwgOCkpOwot
ICAgIGlucHV0LnNldFNpemVMaW1pdCgxNik7Ci0gICAgaW5wdXQucmVhZFJhd0J5dGVzKDE2KTsK
LSAgICBhc3NlcnRFcXVhbHMoMTYsIGlucHV0LmdldFRvdGFsQnl0ZXNSZWFkKCkpOwotCi0gICAg
dHJ5IHsKLSAgICAgIGlucHV0LnJlYWRSYXdCeXRlKCk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2
ZSB0aHJvd24gYW4gZXhjZXB0aW9uISIpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbiBleHBlY3RlZCkgewotICAgICAgY2hlY2tTaXplTGltaXRFeGNlZWRlZChl
eHBlY3RlZCk7Ci0gICAgfQotCi0gICAgaW5wdXQucmVzZXRTaXplQ291bnRlcigpOwotICAgIGFz
c2VydEVxdWFscygwLCBpbnB1dC5nZXRUb3RhbEJ5dGVzUmVhZCgpKTsKLSAgICBpbnB1dC5yZWFk
UmF3Qnl0ZSgpOyAgLy8gTm8gZXhjZXB0aW9uIHRocm93bi4KLSAgICBpbnB1dC5yZXNldFNpemVD
b3VudGVyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIGlucHV0LmdldFRvdGFsQnl0ZXNSZWFkKCkp
OwotICAgIGlucHV0LnJlYWRSYXdCeXRlcygxNik7Ci0gICAgYXNzZXJ0RXF1YWxzKDE2LCBpbnB1
dC5nZXRUb3RhbEJ5dGVzUmVhZCgpKTsKLSAgICBpbnB1dC5yZXNldFNpemVDb3VudGVyKCk7Ci0K
LSAgICB0cnkgewotICAgICAgaW5wdXQucmVhZFJhd0J5dGVzKDE3KTsgIC8vIEhpdHMgbGltaXQg
YWdhaW4uCi0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uISIpOwot
ICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBleHBlY3RlZCkgewot
ICAgICAgY2hlY2tTaXplTGltaXRFeGNlZWRlZChleHBlY3RlZCk7Ci0gICAgfQotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdFNpemVMaW1pdE11bHRpcGxlTWVzc2FnZXMoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVsyNTZdOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGJ5dGVzW2ldID0gKGJ5dGUpIGk7
Ci0gICAgfQotICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQgPSBDb2RlZElucHV0U3RyZWFtLm5l
d0luc3RhbmNlKAotICAgICAgICBuZXcgU21hbGxCbG9ja0lucHV0U3RyZWFtKGJ5dGVzLCA3KSk7
Ci0gICAgaW5wdXQuc2V0U2l6ZUxpbWl0KDE2KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1
NiAvIDE2OyBpKyspIHsKLSAgICAgIGJ5dGVbXSBtZXNzYWdlID0gaW5wdXQucmVhZFJhd0J5dGVz
KDE2KTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWVzc2FnZS5sZW5ndGg7IGorKykgewot
ICAgICAgICBhc3NlcnRFcXVhbHMoaSAqIDE2ICsgaiwgbWVzc2FnZVtqXSAmIDB4ZmYpOwotICAg
ICAgfQotICAgICAgYXNzZXJ0RXF1YWxzKDE2LCBpbnB1dC5nZXRUb3RhbEJ5dGVzUmVhZCgpKTsK
LSAgICAgIGlucHV0LnJlc2V0U2l6ZUNvdW50ZXIoKTsKLSAgICAgIGFzc2VydEVxdWFscygwLCBp
bnB1dC5nZXRUb3RhbEJ5dGVzUmVhZCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0UmVhZFN0cmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFN0cmluZyBsb3JlbSA9ICJM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCAiOwotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9
IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0MDk2OyBpICs9
IGxvcmVtLmxlbmd0aCgpKSB7Ci0gICAgICBidWlsZGVyLmFwcGVuZChsb3JlbSk7Ci0gICAgfQot
ICAgIGxvcmVtID0gYnVpbGRlci50b1N0cmluZygpLnN1YnN0cmluZygwLCA0MDk2KTsKLSAgICBi
eXRlW10gYnl0ZXMgPSBsb3JlbS5nZXRCeXRlcygiVVRGLTgiKTsKLSAgICBCeXRlU3RyaW5nLk91
dHB1dCByYXdPdXRwdXQgPSBCeXRlU3RyaW5nLm5ld091dHB1dCgpOwotICAgIENvZGVkT3V0cHV0
U3RyZWFtIG91dHB1dCA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNlKHJhd091dHB1dCwg
Ynl0ZXMubGVuZ3RoKTsKLQotICAgIGludCB0YWcgPSBXaXJlRm9ybWF0Lm1ha2VUYWcoMSwgV2ly
ZUZvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgICBvdXRwdXQud3JpdGVSYXdW
YXJpbnQzMih0YWcpOwotICAgIG91dHB1dC53cml0ZVJhd1ZhcmludDMyKGJ5dGVzLmxlbmd0aCk7
Ci0gICAgb3V0cHV0LndyaXRlUmF3Qnl0ZXMoYnl0ZXMpOwotICAgIG91dHB1dC5mbHVzaCgpOwot
Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9Ci0gICAgICAgIENvZGVkSW5wdXRTdHJlYW0u
bmV3SW5zdGFuY2UoCi0gICAgICAgICAgICBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocmF3T3V0
cHV0LnRvQnl0ZVN0cmluZygpLnRvQnl0ZUFycmF5KCkpKTsKLSAgICBhc3NlcnRFcXVhbHModGFn
LCBpbnB1dC5yZWFkVGFnKCkpOwotICAgIFN0cmluZyB0ZXh0ID0gaW5wdXQucmVhZFN0cmluZygp
OwotICAgIGFzc2VydEVxdWFscyhsb3JlbSwgdGV4dCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0UmVhZFN0cmluZ1JlcXVpcmVVdGY4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5n
IGxvcmVtID0gIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0ICI7Ci0gICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDQwOTY7IGkgKz0gbG9yZW0ubGVuZ3RoKCkpIHsKLSAgICAgIGJ1aWxkZXIuYXBwZW5kKGxvcmVt
KTsKLSAgICB9Ci0gICAgbG9yZW0gPSBidWlsZGVyLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDQw
OTYpOwotICAgIGJ5dGVbXSBieXRlcyA9IGxvcmVtLmdldEJ5dGVzKCJVVEYtOCIpOwotICAgIEJ5
dGVTdHJpbmcuT3V0cHV0IHJhd091dHB1dCA9IEJ5dGVTdHJpbmcubmV3T3V0cHV0KCk7Ci0gICAg
Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0ID0gQ29kZWRPdXRwdXRTdHJlYW0ubmV3SW5zdGFuY2Uo
cmF3T3V0cHV0LCBieXRlcy5sZW5ndGgpOwotCi0gICAgaW50IHRhZyA9IFdpcmVGb3JtYXQubWFr
ZVRhZygxLCBXaXJlRm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpOwotICAgIG91dHB1
dC53cml0ZVJhd1ZhcmludDMyKHRhZyk7Ci0gICAgb3V0cHV0LndyaXRlUmF3VmFyaW50MzIoYnl0
ZXMubGVuZ3RoKTsKLSAgICBvdXRwdXQud3JpdGVSYXdCeXRlcyhieXRlcyk7Ci0gICAgb3V0cHV0
LmZsdXNoKCk7Ci0KLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0KLSAgICAgICAgQ29kZWRJ
bnB1dFN0cmVhbS5uZXdJbnN0YW5jZSgKLSAgICAgICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0
cmVhbShyYXdPdXRwdXQudG9CeXRlU3RyaW5nKCkudG9CeXRlQXJyYXkoKSkpOwotICAgIGFzc2Vy
dEVxdWFscyh0YWcsIGlucHV0LnJlYWRUYWcoKSk7Ci0gICAgU3RyaW5nIHRleHQgPSBpbnB1dC5y
ZWFkU3RyaW5nUmVxdWlyZVV0ZjgoKTsKLSAgICBhc3NlcnRFcXVhbHMobG9yZW0sIHRleHQpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgaWYgd2UgcmVhZFN0cmluZyBpbnZhbGlkIFVU
Ri04IGJ5dGVzLCBubyBleGNlcHRpb24KLSAgICogaXMgdGhyb3duLiAgSW5zdGVhZCwgdGhlIGlu
dmFsaWQgYnl0ZXMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIFVuaWNvZGUKLSAgICogInJlcGxhY2Vt
ZW50IGNoYXJhY3RlciIgVStGRkZELgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJlYWRTdHJp
bmdJbnZhbGlkVXRmOCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIEJ5dGVTdHJpbmcuT3V0cHV0
IHJhd091dHB1dCA9IEJ5dGVTdHJpbmcubmV3T3V0cHV0KCk7Ci0gICAgQ29kZWRPdXRwdXRTdHJl
YW0gb3V0cHV0ID0gQ29kZWRPdXRwdXRTdHJlYW0ubmV3SW5zdGFuY2UocmF3T3V0cHV0KTsKLQot
ICAgIGludCB0YWcgPSBXaXJlRm9ybWF0Lm1ha2VUYWcoMSwgV2lyZUZvcm1hdC5XSVJFVFlQRV9M
RU5HVEhfREVMSU1JVEVEKTsKLSAgICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMih0YWcpOwotICAg
IG91dHB1dC53cml0ZVJhd1ZhcmludDMyKDEpOwotICAgIG91dHB1dC53cml0ZVJhd0J5dGVzKG5l
dyBieXRlW10geyAoYnl0ZSkgMHg4MCB9KTsKLSAgICBvdXRwdXQuZmx1c2goKTsKLQotICAgIENv
ZGVkSW5wdXRTdHJlYW0gaW5wdXQgPSByYXdPdXRwdXQudG9CeXRlU3RyaW5nKCkubmV3Q29kZWRJ
bnB1dCgpOwotICAgIGFzc2VydEVxdWFscyh0YWcsIGlucHV0LnJlYWRUYWcoKSk7Ci0gICAgU3Ry
aW5nIHRleHQgPSBpbnB1dC5yZWFkU3RyaW5nKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDB4ZmZmZCwg
dGV4dC5jaGFyQXQoMCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgaWYgd2UgcmVh
ZFN0cmluZ1JlcXVpcmVVdGY4IGludmFsaWQgVVRGLTggYnl0ZXMsIGFuCi0gICAqIEludmFsaWRQ
cm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAqLwotICBwdWJsaWMgdm9pZCB0
ZXN0UmVhZFN0cmluZ1JlcXVpcmVVdGY4SW52YWxpZFV0ZjgoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBCeXRlU3RyaW5nLk91dHB1dCByYXdPdXRwdXQgPSBCeXRlU3RyaW5nLm5ld091dHB1dCgp
OwotICAgIENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0lu
c3RhbmNlKHJhd091dHB1dCk7Ci0KLSAgICBpbnQgdGFnID0gV2lyZUZvcm1hdC5tYWtlVGFnKDEs
IFdpcmVGb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCk7Ci0gICAgb3V0cHV0LndyaXRl
UmF3VmFyaW50MzIodGFnKTsKLSAgICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMigxKTsKLSAgICBv
dXRwdXQud3JpdGVSYXdCeXRlcyhuZXcgYnl0ZVtdIHsgKGJ5dGUpIDB4ODAgfSk7Ci0gICAgb3V0
cHV0LmZsdXNoKCk7Ci0KLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gcmF3T3V0cHV0LnRv
Qnl0ZVN0cmluZygpLm5ld0NvZGVkSW5wdXQoKTsKLSAgICBhc3NlcnRFcXVhbHModGFnLCBpbnB1
dC5yZWFkVGFnKCkpOwotICAgIHRyeSB7Ci0gICAgICBpbnB1dC5yZWFkU3RyaW5nUmVxdWlyZVV0
ZjgoKTsKLSAgICAgIGZhaWwoIkV4cGVjdGVkIGludmFsaWQgVVRGLTggZXhjZXB0aW9uLiIpOwot
ICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBleGNlcHRpb24pIHsK
LSAgICAgIGFzc2VydEVxdWFscygiUHJvdG9jb2wgbWVzc2FnZSBoYWQgaW52YWxpZCBVVEYtOC4i
LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0UmVhZEZyb21TbGljZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIGJ5dGVbXSBieXRlcyA9
IGJ5dGVzKDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkpOwotICAgIENvZGVkSW5wdXRTdHJl
YW0gaW4gPSBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKGJ5dGVzLCAzLCA1KTsKLSAgICBh
c3NlcnRFcXVhbHMoMCwgaW4uZ2V0VG90YWxCeXRlc1JlYWQoKSk7Ci0gICAgZm9yIChpbnQgaSA9
IDM7IGkgPCA4OyBpKyspIHsKLSAgICAgIGFzc2VydEVxdWFscyhpLCBpbi5yZWFkUmF3Qnl0ZSgp
KTsKLSAgICAgIGFzc2VydEVxdWFscyhpIC0gMiwgaW4uZ2V0VG90YWxCeXRlc1JlYWQoKSk7Ci0g
ICAgfQotICAgIC8vIGVvZgotICAgIGFzc2VydEVxdWFscygwLCBpbi5yZWFkVGFnKCkpOwotICAg
IGFzc2VydEVxdWFscyg1LCBpbi5nZXRUb3RhbEJ5dGVzUmVhZCgpKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RJbnZhbGlkVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gQW55IHRh
ZyBudW1iZXIgd2hpY2ggY29ycmVzcG9uZHMgdG8gZmllbGQgbnVtYmVyIHplcm8gaXMgaW52YWxp
ZCBhbmQKLSAgICAvLyBzaG91bGQgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
LgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgICB0cnkgewotICAgICAg
ICBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKGJ5dGVzKGkpKS5yZWFkVGFnKCk7Ci0gICAg
ICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uIik7Ci0gICAgICB9IGNh
dGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgICBhc3NlcnRF
cXVhbHMoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uLmludmFsaWRUYWcoKS5nZXRNZXNz
YWdlKCksCi0gICAgICAgICAgICAgICAgICAgICBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlYWRCeXRlQXJyYXkoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBCeXRlU3RyaW5nLk91dHB1dCByYXdPdXRwdXQgPSBCeXRlU3RyaW5nLm5l
d091dHB1dCgpOwotICAgIENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCA9IENvZGVkT3V0cHV0U3Ry
ZWFtLm5ld0luc3RhbmNlKHJhd091dHB1dCk7Ci0gICAgLy8gWmVyby1zaXplZCBieXRlcyBmaWVs
ZC4KLSAgICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMigwKTsKLSAgICAvLyBPbmUgb25lLWJ5dGUg
Ynl0ZXMgZmllbGQKLSAgICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMigxKTsKLSAgICBvdXRwdXQu
d3JpdGVSYXdCeXRlcyhuZXcgYnl0ZVtdIHsgKGJ5dGUpIDIzIH0pOwotICAgIC8vIEFub3RoZXIg
b25lLWJ5dGUgYnl0ZXMgZmllbGQKLSAgICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMigxKTsKLSAg
ICBvdXRwdXQud3JpdGVSYXdCeXRlcyhuZXcgYnl0ZVtdIHsgKGJ5dGUpIDQ1IH0pOwotICAgIC8v
IEEgYnl0ZXMgZmllbGQgbGFyZ2UgZW5vdWdoIHRoYXQgd29uJ3QgZml0IGludG8gdGhlIDRLIGJ1
ZmZlci4KLSAgICBmaW5hbCBpbnQgYnl0ZXNMZW5ndGggPSAxNiAqIDEwMjQ7Ci0gICAgYnl0ZVtd
IGJ5dGVzID0gbmV3IGJ5dGVbYnl0ZXNMZW5ndGhdOwotICAgIGJ5dGVzWzBdID0gKGJ5dGUpIDY3
OwotICAgIGJ5dGVzW2J5dGVzTGVuZ3RoIC0gMV0gPSAoYnl0ZSkgODk7Ci0gICAgb3V0cHV0Lndy
aXRlUmF3VmFyaW50MzIoYnl0ZXNMZW5ndGgpOwotICAgIG91dHB1dC53cml0ZVJhd0J5dGVzKGJ5
dGVzKTsKLQotICAgIG91dHB1dC5mbHVzaCgpOwotICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXRT
dHJlYW0gPSByYXdPdXRwdXQudG9CeXRlU3RyaW5nKCkubmV3Q29kZWRJbnB1dCgpOwotCi0gICAg
Ynl0ZVtdIHJlc3VsdCA9IGlucHV0U3RyZWFtLnJlYWRCeXRlQXJyYXkoKTsKLSAgICBhc3NlcnRF
cXVhbHMoMCwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gaW5wdXRTdHJlYW0ucmVhZEJ5
dGVBcnJheSgpOwotICAgIGFzc2VydEVxdWFscygxLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3Nl
cnRFcXVhbHMoKGJ5dGUpIDIzLCByZXN1bHRbMF0pOwotICAgIHJlc3VsdCA9IGlucHV0U3RyZWFt
LnJlYWRCeXRlQXJyYXkoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzdWx0Lmxlbmd0aCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKChieXRlKSA0NSwgcmVzdWx0WzBdKTsKLSAgICByZXN1bHQgPSBpbnB1
dFN0cmVhbS5yZWFkQnl0ZUFycmF5KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGJ5dGVzTGVuZ3RoLCBy
ZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoKGJ5dGUpIDY3LCByZXN1bHRbMF0pOwot
ICAgIGFzc2VydEVxdWFscygoYnl0ZSkgODksIHJlc3VsdFtieXRlc0xlbmd0aCAtIDFdKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWFkQnl0ZUJ1ZmZlcigpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIEJ5dGVTdHJpbmcuT3V0cHV0IHJhd091dHB1dCA9IEJ5dGVTdHJpbmcubmV3T3V0cHV0
KCk7Ci0gICAgQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0ID0gQ29kZWRPdXRwdXRTdHJlYW0ubmV3
SW5zdGFuY2UocmF3T3V0cHV0KTsKLSAgICAvLyBaZXJvLXNpemVkIGJ5dGVzIGZpZWxkLgotICAg
IG91dHB1dC53cml0ZVJhd1ZhcmludDMyKDApOwotICAgIC8vIE9uZSBvbmUtYnl0ZSBieXRlcyBm
aWVsZAotICAgIG91dHB1dC53cml0ZVJhd1ZhcmludDMyKDEpOwotICAgIG91dHB1dC53cml0ZVJh
d0J5dGVzKG5ldyBieXRlW117KGJ5dGUpIDIzfSk7Ci0gICAgLy8gQW5vdGhlciBvbmUtYnl0ZSBi
eXRlcyBmaWVsZAotICAgIG91dHB1dC53cml0ZVJhd1ZhcmludDMyKDEpOwotICAgIG91dHB1dC53
cml0ZVJhd0J5dGVzKG5ldyBieXRlW117KGJ5dGUpIDQ1fSk7Ci0gICAgLy8gQSBieXRlcyBmaWVs
ZCBsYXJnZSBlbm91Z2ggdGhhdCB3b24ndCBmaXQgaW50byB0aGUgNEsgYnVmZmVyLgotICAgIGZp
bmFsIGludCBieXRlc0xlbmd0aCA9IDE2ICogMTAyNDsKLSAgICBieXRlW10gYnl0ZXMgPSBuZXcg
Ynl0ZVtieXRlc0xlbmd0aF07Ci0gICAgYnl0ZXNbMF0gPSAoYnl0ZSkgNjc7Ci0gICAgYnl0ZXNb
Ynl0ZXNMZW5ndGggLSAxXSA9IChieXRlKSA4OTsKLSAgICBvdXRwdXQud3JpdGVSYXdWYXJpbnQz
MihieXRlc0xlbmd0aCk7Ci0gICAgb3V0cHV0LndyaXRlUmF3Qnl0ZXMoYnl0ZXMpOwotCi0gICAg
b3V0cHV0LmZsdXNoKCk7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IHJhd091
dHB1dC50b0J5dGVTdHJpbmcoKS5uZXdDb2RlZElucHV0KCk7Ci0KLSAgICBCeXRlQnVmZmVyIHJl
c3VsdCA9IGlucHV0U3RyZWFtLnJlYWRCeXRlQnVmZmVyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAs
IHJlc3VsdC5jYXBhY2l0eSgpKTsKLSAgICByZXN1bHQgPSBpbnB1dFN0cmVhbS5yZWFkQnl0ZUJ1
ZmZlcigpOwotICAgIGFzc2VydEVxdWFscygxLCByZXN1bHQuY2FwYWNpdHkoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKChieXRlKSAyMywgcmVzdWx0LmdldCgpKTsKLSAgICByZXN1bHQgPSBpbnB1dFN0
cmVhbS5yZWFkQnl0ZUJ1ZmZlcigpOwotICAgIGFzc2VydEVxdWFscygxLCByZXN1bHQuY2FwYWNp
dHkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKChieXRlKSA0NSwgcmVzdWx0LmdldCgpKTsKLSAgICBy
ZXN1bHQgPSBpbnB1dFN0cmVhbS5yZWFkQnl0ZUJ1ZmZlcigpOwotICAgIGFzc2VydEVxdWFscyhi
eXRlc0xlbmd0aCwgcmVzdWx0LmNhcGFjaXR5KCkpOwotICAgIGFzc2VydEVxdWFscygoYnl0ZSkg
NjcsIHJlc3VsdC5nZXQoKSk7Ci0gICAgcmVzdWx0LnBvc2l0aW9uKGJ5dGVzTGVuZ3RoIC0gMSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKChieXRlKSA4OSwgcmVzdWx0LmdldCgpKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RSZWFkQnl0ZUJ1ZmZlckFsaWFzaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7
Ci0gICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVBcnJheVN0cmVhbSA9IG5ldyBCeXRlQXJy
YXlPdXRwdXRTdHJlYW0oKTsKLSAgICBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQgPSBDb2RlZE91
dHB1dFN0cmVhbS5uZXdJbnN0YW5jZShieXRlQXJyYXlTdHJlYW0pOwotICAgIC8vIFplcm8tc2l6
ZWQgYnl0ZXMgZmllbGQuCi0gICAgb3V0cHV0LndyaXRlUmF3VmFyaW50MzIoMCk7Ci0gICAgLy8g
T25lIG9uZS1ieXRlIGJ5dGVzIGZpZWxkCi0gICAgb3V0cHV0LndyaXRlUmF3VmFyaW50MzIoMSk7
Ci0gICAgb3V0cHV0LndyaXRlUmF3Qnl0ZXMobmV3IGJ5dGVbXXsoYnl0ZSkgMjN9KTsKLSAgICAv
LyBBbm90aGVyIG9uZS1ieXRlIGJ5dGVzIGZpZWxkCi0gICAgb3V0cHV0LndyaXRlUmF3VmFyaW50
MzIoMSk7Ci0gICAgb3V0cHV0LndyaXRlUmF3Qnl0ZXMobmV3IGJ5dGVbXXsoYnl0ZSkgNDV9KTsK
LSAgICAvLyBBIGJ5dGVzIGZpZWxkIGxhcmdlIGVub3VnaCB0aGF0IHdvbid0IGZpdCBpbnRvIHRo
ZSA0SyBidWZmZXIuCi0gICAgZmluYWwgaW50IGJ5dGVzTGVuZ3RoID0gMTYgKiAxMDI0OwotICAg
IGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW2J5dGVzTGVuZ3RoXTsKLSAgICBieXRlc1swXSA9IChi
eXRlKSA2NzsKLSAgICBieXRlc1tieXRlc0xlbmd0aCAtIDFdID0gKGJ5dGUpIDg5OwotICAgIG91
dHB1dC53cml0ZVJhd1ZhcmludDMyKGJ5dGVzTGVuZ3RoKTsKLSAgICBvdXRwdXQud3JpdGVSYXdC
eXRlcyhieXRlcyk7Ci0gICAgb3V0cHV0LmZsdXNoKCk7Ci0gICAgYnl0ZVtdIGRhdGEgPSBieXRl
QXJyYXlTdHJlYW0udG9CeXRlQXJyYXkoKTsKLQotICAgIC8vIFdpdGhvdXQgYWxpYXNpbmcKLSAg
ICBDb2RlZElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0
YW5jZShkYXRhKTsKLSAgICBCeXRlQnVmZmVyIHJlc3VsdCA9IGlucHV0U3RyZWFtLnJlYWRCeXRl
QnVmZmVyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIHJlc3VsdC5jYXBhY2l0eSgpKTsKLSAgICBy
ZXN1bHQgPSBpbnB1dFN0cmVhbS5yZWFkQnl0ZUJ1ZmZlcigpOwotICAgIGFzc2VydFRydWUocmVz
dWx0LmFycmF5KCkgIT0gZGF0YSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdC5jYXBhY2l0
eSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoKGJ5dGUpIDIzLCByZXN1bHQuZ2V0KCkpOwotICAgIHJl
c3VsdCA9IGlucHV0U3RyZWFtLnJlYWRCeXRlQnVmZmVyKCk7Ci0gICAgYXNzZXJ0VHJ1ZShyZXN1
bHQuYXJyYXkoKSAhPSBkYXRhKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzdWx0LmNhcGFjaXR5
KCkpOwotICAgIGFzc2VydEVxdWFscygoYnl0ZSkgNDUsIHJlc3VsdC5nZXQoKSk7Ci0gICAgcmVz
dWx0ID0gaW5wdXRTdHJlYW0ucmVhZEJ5dGVCdWZmZXIoKTsKLSAgICBhc3NlcnRUcnVlKHJlc3Vs
dC5hcnJheSgpICE9IGRhdGEpOwotICAgIGFzc2VydEVxdWFscyhieXRlc0xlbmd0aCwgcmVzdWx0
LmNhcGFjaXR5KCkpOwotICAgIGFzc2VydEVxdWFscygoYnl0ZSkgNjcsIHJlc3VsdC5nZXQoKSk7
Ci0gICAgcmVzdWx0LnBvc2l0aW9uKGJ5dGVzTGVuZ3RoIC0gMSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KChieXRlKSA4OSwgcmVzdWx0LmdldCgpKTsKLQotICAgIC8vIEVuYWJsZSBhbGlhc2luZwotICAg
IGlucHV0U3RyZWFtID0gQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShkYXRhKTsKLSAgICBp
bnB1dFN0cmVhbS5lbmFibGVBbGlhc2luZyh0cnVlKTsKLSAgICByZXN1bHQgPSBpbnB1dFN0cmVh
bS5yZWFkQnl0ZUJ1ZmZlcigpOwotICAgIGFzc2VydEVxdWFscygwLCByZXN1bHQuY2FwYWNpdHko
KSk7Ci0gICAgcmVzdWx0ID0gaW5wdXRTdHJlYW0ucmVhZEJ5dGVCdWZmZXIoKTsKLSAgICBhc3Nl
cnRUcnVlKHJlc3VsdC5hcnJheSgpID09IGRhdGEpOwotICAgIGFzc2VydEVxdWFscygxLCByZXN1
bHQuY2FwYWNpdHkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKChieXRlKSAyMywgcmVzdWx0LmdldCgp
KTsKLSAgICByZXN1bHQgPSBpbnB1dFN0cmVhbS5yZWFkQnl0ZUJ1ZmZlcigpOwotICAgIGFzc2Vy
dFRydWUocmVzdWx0LmFycmF5KCkgPT0gZGF0YSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlc3Vs
dC5jYXBhY2l0eSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoKGJ5dGUpIDQ1LCByZXN1bHQuZ2V0KCkp
OwotICAgIHJlc3VsdCA9IGlucHV0U3RyZWFtLnJlYWRCeXRlQnVmZmVyKCk7Ci0gICAgYXNzZXJ0
VHJ1ZShyZXN1bHQuYXJyYXkoKSA9PSBkYXRhKTsKLSAgICBhc3NlcnRFcXVhbHMoYnl0ZXNMZW5n
dGgsIHJlc3VsdC5jYXBhY2l0eSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoKGJ5dGUpIDY3LCByZXN1
bHQuZ2V0KCkpOwotICAgIHJlc3VsdC5wb3NpdGlvbihieXRlc0xlbmd0aCAtIDEpOwotICAgIGFz
c2VydEVxdWFscygoYnl0ZSkgODksIHJlc3VsdC5nZXQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0Q29tcGF0aWJsZVR5cGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgbG9uZyBkYXRh
ID0gMHgxMDAwMDAwMDBMOwotICAgIEludDY0TWVzc2FnZSBtZXNzYWdlID0gSW50NjRNZXNzYWdl
Lm5ld0J1aWxkZXIoKS5zZXREYXRhKGRhdGEpLmJ1aWxkKCk7Ci0gICAgQnl0ZVN0cmluZyBzZXJp
YWxpemVkID0gbWVzc2FnZS50b0J5dGVTdHJpbmcoKTsKLQotICAgIC8vIFRlc3QgaW50NjQobG9u
ZykgaXMgY29tcGF0aWJsZSB3aXRoIGJvb2woYm9vbGVhbikKLSAgICBCb29sTWVzc2FnZSBtc2cy
ID0gQm9vbE1lc3NhZ2UucGFyc2VGcm9tKHNlcmlhbGl6ZWQpOwotICAgIGFzc2VydFRydWUobXNn
Mi5nZXREYXRhKCkpOwotCi0gICAgLy8gVGVzdCBpbnQ2NChsb25nKSBpcyBjb21wYXRpYmxlIHdp
dGggaW50MzIoaW50KQotICAgIEludDMyTWVzc2FnZSBtc2czID0gSW50MzJNZXNzYWdlLnBhcnNl
RnJvbShzZXJpYWxpemVkKTsKLSAgICBhc3NlcnRFcXVhbHMoKGludCkgZGF0YSwgbXNnMy5nZXRE
YXRhKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvQ29kZWRPdXRwdXRTdHJlYW1UZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMv
dGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvQ29kZWRPdXRwdXRTdHJlYW1UZXN0LmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYWE0MzU3MGMzZmVjOGYyYTU5YzMyMmY1
ZTUxNTFjNTkxNTk1MzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0NvZGVkT3V0
cHV0U3RyZWFtVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzc2ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9i
dWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkNvZGVkT3V0cHV0U3RyZWFtLk91dE9m
U3BhY2VFeGNlcHRpb247Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5T
cGFyc2VFbnVtTWVzc2FnZTsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3Rv
LlRlc3RBbGxUeXBlczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRl
c3RQYWNrZWRUeXBlczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRl
c3RTcGFyc2VFbnVtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBv
cnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJh
eU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEu
dXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0
aWwuTGlzdDsKLQotLyoqCi0gKiBVbml0IHRlc3QgZm9yIHtAbGluayBDb2RlZE91dHB1dFN0cmVh
bX0uCi0gKgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqLwot
cHVibGljIGNsYXNzIENvZGVkT3V0cHV0U3RyZWFtVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAg
cHJpdmF0ZSBpbnRlcmZhY2UgQ29kZXIgewotICAgIENvZGVkT3V0cHV0U3RyZWFtIHN0cmVhbSgp
OwotCi0gICAgYnl0ZVtdIHRvQnl0ZUFycmF5KCk7Ci0KLSAgICBPdXRwdXRUeXBlIGdldE91dHB1
dFR5cGUoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIE91dHB1dFN0cmVh
bUNvZGVyIGltcGxlbWVudHMgQ29kZXIgewotICAgIHByaXZhdGUgZmluYWwgQ29kZWRPdXRwdXRT
dHJlYW0gc3RyZWFtOwotICAgIHByaXZhdGUgZmluYWwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91
dHB1dDsKLQotICAgIE91dHB1dFN0cmVhbUNvZGVyKGludCBzaXplKSB7Ci0gICAgICBvdXRwdXQg
PSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgICBzdHJlYW0gPSBDb2RlZE91dHB1
dFN0cmVhbS5uZXdJbnN0YW5jZShvdXRwdXQsIHNpemUpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBDb2RlZE91dHB1dFN0cmVhbSBzdHJlYW0oKSB7Ci0gICAgICByZXR1cm4g
c3RyZWFtOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBieXRlW10gdG9CeXRl
QXJyYXkoKSB7Ci0gICAgICByZXR1cm4gb3V0cHV0LnRvQnl0ZUFycmF5KCk7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE91dHB1dFR5cGUgZ2V0T3V0cHV0VHlwZSgpIHsKLSAg
ICAgIHJldHVybiBPdXRwdXRUeXBlLlNUUkVBTTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBjbGFzcyBBcnJheUNvZGVyIGltcGxlbWVudHMgQ29kZXIgewotICAgIHByaXZh
dGUgZmluYWwgQ29kZWRPdXRwdXRTdHJlYW0gc3RyZWFtOwotICAgIHByaXZhdGUgZmluYWwgYnl0
ZVtdIGJ5dGVzOwotCi0gICAgQXJyYXlDb2RlcihpbnQgc2l6ZSkgewotICAgICAgYnl0ZXMgPSBu
ZXcgYnl0ZVtzaXplXTsKLSAgICAgIHN0cmVhbSA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3Rh
bmNlKGJ5dGVzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29kZWRPdXRw
dXRTdHJlYW0gc3RyZWFtKCkgewotICAgICAgcmV0dXJuIHN0cmVhbTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgYnl0ZVtdIHRvQnl0ZUFycmF5KCkgewotICAgICAgcmV0dXJu
IEFycmF5cy5jb3B5T2YoYnl0ZXMsIHN0cmVhbS5nZXRUb3RhbEJ5dGVzV3JpdHRlbigpKTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT3V0cHV0VHlwZSBnZXRPdXRwdXRUeXBl
KCkgewotICAgICAgcmV0dXJuIE91dHB1dFR5cGUuQVJSQVk7Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgTmlvSGVhcENvZGVyIGltcGxlbWVudHMgQ29kZXIgewot
ICAgIHByaXZhdGUgZmluYWwgQ29kZWRPdXRwdXRTdHJlYW0gc3RyZWFtOwotICAgIHByaXZhdGUg
ZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgaW5pdGlhbFBv
c2l0aW9uOwotCi0gICAgTmlvSGVhcENvZGVyKGludCBzaXplKSB7Ci0gICAgICB0aGlzKHNpemUs
IDApOwotICAgIH0KLQotICAgIE5pb0hlYXBDb2RlcihpbnQgc2l6ZSwgaW50IGluaXRpYWxQb3Np
dGlvbikgewotICAgICAgdGhpcy5pbml0aWFsUG9zaXRpb24gPSBpbml0aWFsUG9zaXRpb247Ci0g
ICAgICBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKHNpemUpOwotICAgICAgYnVmZmVyLnBv
c2l0aW9uKGluaXRpYWxQb3NpdGlvbik7Ci0gICAgICBzdHJlYW0gPSBDb2RlZE91dHB1dFN0cmVh
bS5uZXdJbnN0YW5jZShidWZmZXIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBDb2RlZE91dHB1dFN0cmVhbSBzdHJlYW0oKSB7Ci0gICAgICByZXR1cm4gc3RyZWFtOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBieXRlW10gdG9CeXRlQXJyYXkoKSB7Ci0g
ICAgICBCeXRlQnVmZmVyIGR1cCA9IGJ1ZmZlci5kdXBsaWNhdGUoKTsKLSAgICAgIGR1cC5wb3Np
dGlvbihpbml0aWFsUG9zaXRpb24pOwotICAgICAgZHVwLmxpbWl0KGJ1ZmZlci5wb3NpdGlvbigp
KTsKLQotICAgICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbZHVwLnJlbWFpbmluZygpXTsKLSAg
ICAgIGR1cC5nZXQoYnl0ZXMpOwotICAgICAgcmV0dXJuIGJ5dGVzOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBPdXRwdXRUeXBlIGdldE91dHB1dFR5cGUoKSB7Ci0gICAgICBy
ZXR1cm4gT3V0cHV0VHlwZS5OSU9fSEVBUDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBjbGFzcyBOaW9EaXJlY3RDb2RlciBpbXBsZW1lbnRzIENvZGVyIHsKLSAgICBwcml2
YXRlIGZpbmFsIGludCBpbml0aWFsUG9zaXRpb247Ci0gICAgcHJpdmF0ZSBmaW5hbCBDb2RlZE91
dHB1dFN0cmVhbSBzdHJlYW07Ci0gICAgcHJpdmF0ZSBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlcjsK
LQotICAgIE5pb0RpcmVjdENvZGVyKGludCBzaXplKSB7Ci0gICAgICB0aGlzKHNpemUsIDApOwot
ICAgIH0KLQotICAgIE5pb0RpcmVjdENvZGVyKGludCBzaXplLCBpbnQgaW5pdGlhbFBvc2l0aW9u
KSB7Ci0gICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9IGluaXRpYWxQb3NpdGlvbjsKLSAgICAg
IGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qoc2l6ZSk7Ci0gICAgICBidWZmZXIu
cG9zaXRpb24oaW5pdGlhbFBvc2l0aW9uKTsKLSAgICAgIHN0cmVhbSA9IENvZGVkT3V0cHV0U3Ry
ZWFtLm5ld0luc3RhbmNlKGJ1ZmZlcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIENvZGVkT3V0cHV0U3RyZWFtIHN0cmVhbSgpIHsKLSAgICAgIHJldHVybiBzdHJlYW07Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJ5dGVbXSB0b0J5dGVBcnJheSgpIHsK
LSAgICAgIEJ5dGVCdWZmZXIgZHVwID0gYnVmZmVyLmR1cGxpY2F0ZSgpOwotICAgICAgZHVwLnBv
c2l0aW9uKGluaXRpYWxQb3NpdGlvbik7Ci0gICAgICBkdXAubGltaXQoYnVmZmVyLnBvc2l0aW9u
KCkpOwotCi0gICAgICBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVtkdXAucmVtYWluaW5nKCldOwot
ICAgICAgZHVwLmdldChieXRlcyk7Ci0gICAgICByZXR1cm4gYnl0ZXM7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIE91dHB1dFR5cGUgZ2V0T3V0cHV0VHlwZSgpIHsKLSAgICAg
IHJldHVybiBPdXRwdXRUeXBlLk5JT19ESVJFQ1Q7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBl
bnVtIE91dHB1dFR5cGUgewotICAgIEFSUkFZKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBD
b2RlciBuZXdDb2RlcihpbnQgc2l6ZSkgewotICAgICAgICByZXR1cm4gbmV3IEFycmF5Q29kZXIo
c2l6ZSk7Ci0gICAgICB9Ci0gICAgfSwKLSAgICBOSU9fSEVBUCgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgQ29kZXIgbmV3Q29kZXIoaW50IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBO
aW9IZWFwQ29kZXIoc2l6ZSk7Ci0gICAgICB9Ci0gICAgfSwKLSAgICBOSU9fRElSRUNUKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBDb2RlciBuZXdDb2RlcihpbnQgc2l6ZSkgewotICAgICAg
ICByZXR1cm4gbmV3IE5pb0RpcmVjdENvZGVyKHNpemUpOwotICAgICAgfQotICAgIH0sCi0gICAg
U1RSRUFNKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBDb2RlciBuZXdDb2RlcihpbnQgc2l6
ZSkgewotICAgICAgICByZXR1cm4gbmV3IE91dHB1dFN0cmVhbUNvZGVyKHNpemUpOwotICAgICAg
fQotICAgIH07Ci0KLSAgICBhYnN0cmFjdCBDb2RlciBuZXdDb2RlcihpbnQgc2l6ZSk7Ci0gIH0K
LQotICAvKiogQ2hlY2tzIHRoYXQgaW52YXJpYW50cyBhcmUgbWFpbnRhaW5lZCBmb3IgdmFyaW50
IHJvdW5kIHRyaXAgaW5wdXQgYW5kIG91dHB1dC4gKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhcmlu
dFJvdW5kVHJpcHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBmb3IgKE91dHB1dFR5cGUgb3V0
cHV0VHlwZSA6IE91dHB1dFR5cGUudmFsdWVzKCkpIHsKLSAgICAgIGFzc2VydFZhcmludFJvdW5k
VHJpcChvdXRwdXRUeXBlLCAwTCk7Ci0gICAgICBmb3IgKGludCBiaXRzID0gMDsgYml0cyA8IDY0
OyBiaXRzKyspIHsKLSAgICAgICAgbG9uZyB2YWx1ZSA9IDFMIDw8IGJpdHM7Ci0gICAgICAgIGFz
c2VydFZhcmludFJvdW5kVHJpcChvdXRwdXRUeXBlLCB2YWx1ZSk7Ci0gICAgICAgIGFzc2VydFZh
cmludFJvdW5kVHJpcChvdXRwdXRUeXBlLCB2YWx1ZSArIDEpOwotICAgICAgICBhc3NlcnRWYXJp
bnRSb3VuZFRyaXAob3V0cHV0VHlwZSwgdmFsdWUgLSAxKTsKLSAgICAgICAgYXNzZXJ0VmFyaW50
Um91bmRUcmlwKG91dHB1dFR5cGUsIC12YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
LyoqIFRlc3RzIHdyaXRlUmF3VmFyaW50MzIoKSBhbmQgd3JpdGVSYXdWYXJpbnQ2NCgpLiAqLwot
ICBwdWJsaWMgdm9pZCB0ZXN0V3JpdGVWYXJpbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBh
c3NlcnRXcml0ZVZhcmludChieXRlcygweDAwKSwgMCk7Ci0gICAgYXNzZXJ0V3JpdGVWYXJpbnQo
Ynl0ZXMoMHgwMSksIDEpOwotICAgIGFzc2VydFdyaXRlVmFyaW50KGJ5dGVzKDB4N2YpLCAxMjcp
OwotICAgIC8vIDE0ODgyCi0gICAgYXNzZXJ0V3JpdGVWYXJpbnQoYnl0ZXMoMHhhMiwgMHg3NCks
ICgweDIyIDw8IDApIHwgKDB4NzQgPDwgNykpOwotICAgIC8vIDI5NjE0ODg4MzAKLSAgICBhc3Nl
cnRXcml0ZVZhcmludCgKLSAgICAgICAgYnl0ZXMoMHhiZSwgMHhmNywgMHg5MiwgMHg4NCwgMHgw
YiksCi0gICAgICAgICgweDNlIDw8IDApIHwgKDB4NzcgPDwgNykgfCAoMHgxMiA8PCAxNCkgfCAo
MHgwNCA8PCAyMSkgfCAoMHgwYkwgPDwgMjgpKTsKLQotICAgIC8vIDY0LWJpdAotICAgIC8vIDcy
NTY0NTYxMjYKLSAgICBhc3NlcnRXcml0ZVZhcmludCgKLSAgICAgICAgYnl0ZXMoMHhiZSwgMHhm
NywgMHg5MiwgMHg4NCwgMHgxYiksCi0gICAgICAgICgweDNlIDw8IDApIHwgKDB4NzcgPDwgNykg
fCAoMHgxMiA8PCAxNCkgfCAoMHgwNCA8PCAyMSkgfCAoMHgxYkwgPDwgMjgpKTsKLSAgICAvLyA0
MTI1NjIwMjU4MDcxODMzNgotICAgIGFzc2VydFdyaXRlVmFyaW50KAotICAgICAgICBieXRlcygw
eDgwLCAweGU2LCAweGViLCAweDljLCAweGMzLCAweGM5LCAweGE0LCAweDQ5KSwKLSAgICAgICAg
KDB4MDAgPDwgMCkgfCAoMHg2NiA8PCA3KSB8ICgweDZiIDw8IDE0KSB8ICgweDFjIDw8IDIxKSB8
ICgweDQzTCA8PCAyOCkgfCAoMHg0OUwgPDwgMzUpCi0gICAgICAgIHwgKDB4MjRMIDw8IDQyKSB8
ICgweDQ5TCA8PCA0OSkpOwotICAgIC8vIDExOTY0Mzc4MzMwOTc4NzM1MTMxCi0gICAgYXNzZXJ0
V3JpdGVWYXJpbnQoCi0gICAgICAgIGJ5dGVzKDB4OWIsIDB4YTgsIDB4ZjksIDB4YzIsIDB4YmIs
IDB4ZDYsIDB4ODAsIDB4ODUsIDB4YTYsIDB4MDEpLAotICAgICAgICAoMHgxYiA8PCAwKSB8ICgw
eDI4IDw8IDcpIHwgKDB4NzkgPDwgMTQpIHwgKDB4NDIgPDwgMjEpIHwgKDB4M2JMIDw8IDI4KSB8
ICgweDU2TCA8PCAzNSkKLSAgICAgICAgfCAoMHgwMEwgPDwgNDIpIHwgKDB4MDVMIDw8IDQ5KSB8
ICgweDI2TCA8PCA1NikgfCAoMHgwMUwgPDwgNjMpKTsKLSAgfQotCi0gIC8qKiBUZXN0cyB3cml0
ZVJhd0xpdHRsZUVuZGlhbjMyKCkgYW5kIHdyaXRlUmF3TGl0dGxlRW5kaWFuNjQoKS4gKi8KLSAg
cHVibGljIHZvaWQgdGVzdFdyaXRlTGl0dGxlRW5kaWFuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgYXNzZXJ0V3JpdGVMaXR0bGVFbmRpYW4zMihieXRlcygweDc4LCAweDU2LCAweDM0LCAweDEy
KSwgMHgxMjM0NTY3OCk7Ci0gICAgYXNzZXJ0V3JpdGVMaXR0bGVFbmRpYW4zMihieXRlcygweGYw
LCAweGRlLCAweGJjLCAweDlhKSwgMHg5YWJjZGVmMCk7Ci0KLSAgICBhc3NlcnRXcml0ZUxpdHRs
ZUVuZGlhbjY0KAotICAgICAgICBieXRlcygweGYwLCAweGRlLCAweGJjLCAweDlhLCAweDc4LCAw
eDU2LCAweDM0LCAweDEyKSwgMHgxMjM0NTY3ODlhYmNkZWYwTCk7Ci0gICAgYXNzZXJ0V3JpdGVM
aXR0bGVFbmRpYW42NCgKLSAgICAgICAgYnl0ZXMoMHg3OCwgMHg1NiwgMHgzNCwgMHgxMiwgMHhm
MCwgMHhkZSwgMHhiYywgMHg5YSksIDB4OWFiY2RlZjAxMjM0NTY3OEwpOwotICB9Ci0KLSAgLyoq
IFRlc3QgZW5jb2RlWmlnWmFnMzIoKSBhbmQgZW5jb2RlWmlnWmFnNjQoKS4gKi8KLSAgcHVibGlj
IHZvaWQgdGVzdEVuY29kZVppZ1phZygpIHRocm93cyBFeGNlcHRpb24gewotICAgIGFzc2VydEVx
dWFscygwLCBDb2RlZE91dHB1dFN0cmVhbS5lbmNvZGVaaWdaYWczMigwKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDEsIENvZGVkT3V0cHV0U3RyZWFtLmVuY29kZVppZ1phZzMyKC0xKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDIsIENvZGVkT3V0cHV0U3RyZWFtLmVuY29kZVppZ1phZzMyKDEpKTsKLSAgICBh
c3NlcnRFcXVhbHMoMywgQ29kZWRPdXRwdXRTdHJlYW0uZW5jb2RlWmlnWmFnMzIoLTIpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMHg3RkZGRkZGRSwgQ29kZWRPdXRwdXRTdHJlYW0uZW5jb2RlWmlnWmFn
MzIoMHgzRkZGRkZGRikpOwotICAgIGFzc2VydEVxdWFscygweDdGRkZGRkZGLCBDb2RlZE91dHB1
dFN0cmVhbS5lbmNvZGVaaWdaYWczMigweEMwMDAwMDAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDB4
RkZGRkZGRkUsIENvZGVkT3V0cHV0U3RyZWFtLmVuY29kZVppZ1phZzMyKDB4N0ZGRkZGRkYpKTsK
LSAgICBhc3NlcnRFcXVhbHMoMHhGRkZGRkZGRiwgQ29kZWRPdXRwdXRTdHJlYW0uZW5jb2RlWmln
WmFnMzIoMHg4MDAwMDAwMCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDAsIENvZGVkT3V0cHV0U3Ry
ZWFtLmVuY29kZVppZ1phZzY0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgQ29kZWRPdXRwdXRT
dHJlYW0uZW5jb2RlWmlnWmFnNjQoLTEpKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgQ29kZWRPdXRw
dXRTdHJlYW0uZW5jb2RlWmlnWmFnNjQoMSkpOwotICAgIGFzc2VydEVxdWFscygzLCBDb2RlZE91
dHB1dFN0cmVhbS5lbmNvZGVaaWdaYWc2NCgtMikpOwotICAgIGFzc2VydEVxdWFscygweDAwMDAw
MDAwN0ZGRkZGRkVMLCBDb2RlZE91dHB1dFN0cmVhbS5lbmNvZGVaaWdaYWc2NCgweDAwMDAwMDAw
M0ZGRkZGRkZMKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDB4MDAwMDAwMDA3RkZGRkZGRkwsIENvZGVk
T3V0cHV0U3RyZWFtLmVuY29kZVppZ1phZzY0KDB4RkZGRkZGRkZDMDAwMDAwMEwpKTsKLSAgICBh
c3NlcnRFcXVhbHMoMHgwMDAwMDAwMEZGRkZGRkZFTCwgQ29kZWRPdXRwdXRTdHJlYW0uZW5jb2Rl
WmlnWmFnNjQoMHgwMDAwMDAwMDdGRkZGRkZGTCkpOwotICAgIGFzc2VydEVxdWFscygweDAwMDAw
MDAwRkZGRkZGRkZMLCBDb2RlZE91dHB1dFN0cmVhbS5lbmNvZGVaaWdaYWc2NCgweEZGRkZGRkZG
ODAwMDAwMDBMKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDB4RkZGRkZGRkZGRkZGRkZGRUwsIENvZGVk
T3V0cHV0U3RyZWFtLmVuY29kZVppZ1phZzY0KDB4N0ZGRkZGRkZGRkZGRkZGRkwpKTsKLSAgICBh
c3NlcnRFcXVhbHMoMHhGRkZGRkZGRkZGRkZGRkZGTCwgQ29kZWRPdXRwdXRTdHJlYW0uZW5jb2Rl
WmlnWmFnNjQoMHg4MDAwMDAwMDAwMDAwMDAwTCkpOwotCi0gICAgLy8gU29tZSBlYXNpZXItdG8t
dmVyaWZ5IHJvdW5kLXRyaXAgdGVzdHMuICBUaGUgaW5wdXRzIChvdGhlciB0aGFuIDAsIDEsIC0x
KQotICAgIC8vIHdlcmUgY2hvc2VuIHNlbWktcmFuZG9tbHkgdmlhIGtleWJvYXJkIGJhc2hpbmcu
Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIENvZGVkT3V0cHV0U3RyZWFtLmVuY29kZVppZ1phZzMyKENv
ZGVkSW5wdXRTdHJlYW0uZGVjb2RlWmlnWmFnMzIoMCkpKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwg
Q29kZWRPdXRwdXRTdHJlYW0uZW5jb2RlWmlnWmFnMzIoQ29kZWRJbnB1dFN0cmVhbS5kZWNvZGVa
aWdaYWczMigxKSkpOwotICAgIGFzc2VydEVxdWFscygtMSwgQ29kZWRPdXRwdXRTdHJlYW0uZW5j
b2RlWmlnWmFnMzIoQ29kZWRJbnB1dFN0cmVhbS5kZWNvZGVaaWdaYWczMigtMSkpKTsKLSAgICBh
c3NlcnRFcXVhbHMoMTQ5MjcsIENvZGVkT3V0cHV0U3RyZWFtLmVuY29kZVppZ1phZzMyKENvZGVk
SW5wdXRTdHJlYW0uZGVjb2RlWmlnWmFnMzIoMTQ5MjcpKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKC0z
NjEyLCBDb2RlZE91dHB1dFN0cmVhbS5lbmNvZGVaaWdaYWczMihDb2RlZElucHV0U3RyZWFtLmRl
Y29kZVppZ1phZzMyKC0zNjEyKSkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDAsIENvZGVkT3V0cHV0
U3RyZWFtLmVuY29kZVppZ1phZzY0KENvZGVkSW5wdXRTdHJlYW0uZGVjb2RlWmlnWmFnNjQoMCkp
KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgQ29kZWRPdXRwdXRTdHJlYW0uZW5jb2RlWmlnWmFnNjQo
Q29kZWRJbnB1dFN0cmVhbS5kZWNvZGVaaWdaYWc2NCgxKSkpOwotICAgIGFzc2VydEVxdWFscygt
MSwgQ29kZWRPdXRwdXRTdHJlYW0uZW5jb2RlWmlnWmFnNjQoQ29kZWRJbnB1dFN0cmVhbS5kZWNv
ZGVaaWdaYWc2NCgtMSkpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTQ5MjcsIENvZGVkT3V0cHV0U3Ry
ZWFtLmVuY29kZVppZ1phZzY0KENvZGVkSW5wdXRTdHJlYW0uZGVjb2RlWmlnWmFnNjQoMTQ5Mjcp
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKC0zNjEyLCBDb2RlZE91dHB1dFN0cmVhbS5lbmNvZGVaaWda
YWc2NChDb2RlZElucHV0U3RyZWFtLmRlY29kZVppZ1phZzY0KC0zNjEyKSkpOwotCi0gICAgYXNz
ZXJ0RXF1YWxzKAotICAgICAgICA4NTY5MTIzMDQ4MDE0MTZMLAotICAgICAgICBDb2RlZE91dHB1
dFN0cmVhbS5lbmNvZGVaaWdaYWc2NChDb2RlZElucHV0U3RyZWFtLmRlY29kZVppZ1phZzY0KDg1
NjkxMjMwNDgwMTQxNkwpKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAtNzUxMjM5MDU0
Mzk1NzEyNTZMLAotICAgICAgICBDb2RlZE91dHB1dFN0cmVhbS5lbmNvZGVaaWdaYWc2NChDb2Rl
ZElucHV0U3RyZWFtLmRlY29kZVppZ1phZzY0KC03NTEyMzkwNTQzOTU3MTI1NkwpKSk7Ci0gIH0K
LQotICAvKiogVGVzdHMgd3JpdGluZyBhIHdob2xlIG1lc3NhZ2Ugd2l0aCBldmVyeSBmaWVsZCB0
eXBlLiAqLwotICBwdWJsaWMgdm9pZCB0ZXN0V3JpdGVXaG9sZU1lc3NhZ2UoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBmaW5hbCBieXRlW10gZXhwZWN0ZWRCeXRlcyA9IFRlc3RVdGlsLmdldEdv
bGRlbk1lc3NhZ2UoKS50b0J5dGVBcnJheSgpOwotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0g
VGVzdFV0aWwuZ2V0QWxsU2V0KCk7Ci0KLSAgICBmb3IgKE91dHB1dFR5cGUgb3V0cHV0VHlwZSA6
IE91dHB1dFR5cGUudmFsdWVzKCkpIHsKLSAgICAgIENvZGVyIGNvZGVyID0gb3V0cHV0VHlwZS5u
ZXdDb2RlcihtZXNzYWdlLmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICAgICAgbWVzc2FnZS53cml0
ZVRvKGNvZGVyLnN0cmVhbSgpKTsKLSAgICAgIGNvZGVyLnN0cmVhbSgpLmZsdXNoKCk7Ci0gICAg
ICBieXRlW10gcmF3Qnl0ZXMgPSBjb2Rlci50b0J5dGVBcnJheSgpOwotICAgICAgYXNzZXJ0RXF1
YWxCeXRlcyhvdXRwdXRUeXBlLCBleHBlY3RlZEJ5dGVzLCByYXdCeXRlcyk7Ci0gICAgfQotCi0g
ICAgLy8gVHJ5IGRpZmZlcmVudCBibG9jayBzaXplcy4KLSAgICBmb3IgKGludCBibG9ja1NpemUg
PSAxOyBibG9ja1NpemUgPCAyNTY7IGJsb2NrU2l6ZSAqPSAyKSB7Ci0gICAgICBDb2RlciBjb2Rl
ciA9IE91dHB1dFR5cGUuU1RSRUFNLm5ld0NvZGVyKGJsb2NrU2l6ZSk7Ci0gICAgICBtZXNzYWdl
LndyaXRlVG8oY29kZXIuc3RyZWFtKCkpOwotICAgICAgY29kZXIuc3RyZWFtKCkuZmx1c2goKTsK
LSAgICAgIGFzc2VydEVxdWFsQnl0ZXMoT3V0cHV0VHlwZS5TVFJFQU0sIGV4cGVjdGVkQnl0ZXMs
IGNvZGVyLnRvQnl0ZUFycmF5KCkpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB3
cml0aW5nIGEgd2hvbGUgbWVzc2FnZSB3aXRoIGV2ZXJ5IHBhY2tlZCBmaWVsZCB0eXBlLiBFbnN1
cmVzIHRoZQotICAgKiB3aXJlIGZvcm1hdCBvZiBwYWNrZWQgZmllbGRzIGlzIGNvbXBhdGlibGUg
d2l0aCBDKysuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0V3JpdGVXaG9sZVBhY2tlZEZpZWxk
c01lc3NhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBieXRlW10gZXhwZWN0ZWRCeXRlcyA9
IFRlc3RVdGlsLmdldEdvbGRlblBhY2tlZEZpZWxkc01lc3NhZ2UoKS50b0J5dGVBcnJheSgpOwot
ICAgIFRlc3RQYWNrZWRUeXBlcyBtZXNzYWdlID0gVGVzdFV0aWwuZ2V0UGFja2VkU2V0KCk7Ci0K
LSAgICBmb3IgKE91dHB1dFR5cGUgb3V0cHV0VHlwZSA6IE91dHB1dFR5cGUudmFsdWVzKCkpIHsK
LSAgICAgIENvZGVyIGNvZGVyID0gb3V0cHV0VHlwZS5uZXdDb2RlcihtZXNzYWdlLmdldFNlcmlh
bGl6ZWRTaXplKCkpOwotICAgICAgbWVzc2FnZS53cml0ZVRvKGNvZGVyLnN0cmVhbSgpKTsKLSAg
ICAgIGNvZGVyLnN0cmVhbSgpLmZsdXNoKCk7Ci0gICAgICBieXRlW10gcmF3Qnl0ZXMgPSBjb2Rl
ci50b0J5dGVBcnJheSgpOwotICAgICAgYXNzZXJ0RXF1YWxCeXRlcyhvdXRwdXRUeXBlLCBleHBl
Y3RlZEJ5dGVzLCByYXdCeXRlcyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3Qgd3Jp
dGluZyBhIG1lc3NhZ2UgY29udGFpbmluZyBhIG5lZ2F0aXZlIGVudW0gdmFsdWUuIFRoaXMgdXNl
ZCB0bwotICAgKiBmYWlsIGJlY2F1c2UgdGhlIHNpemUgd2FzIG5vdCBwcm9wZXJseSBjb21wdXRl
ZCBhcyBhIHNpZ24tZXh0ZW5kZWQgdmFyaW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdy
aXRlTWVzc2FnZVdpdGhOZWdhdGl2ZUVudW1WYWx1ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAg
IFNwYXJzZUVudW1NZXNzYWdlIG1lc3NhZ2UgPQotICAgICAgICBTcGFyc2VFbnVtTWVzc2FnZS5u
ZXdCdWlsZGVyKCkuc2V0U3BhcnNlRW51bShUZXN0U3BhcnNlRW51bS5TUEFSU0VfRSkuYnVpbGQo
KTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuZ2V0U3BhcnNlRW51bSgpLmdldE51bWJlcigpIDwg
MCk7Ci0gICAgZm9yIChPdXRwdXRUeXBlIG91dHB1dFR5cGUgOiBPdXRwdXRUeXBlLnZhbHVlcygp
KSB7Ci0gICAgICBDb2RlciBjb2RlciA9IG91dHB1dFR5cGUubmV3Q29kZXIobWVzc2FnZS5nZXRT
ZXJpYWxpemVkU2l6ZSgpKTsKLSAgICAgIG1lc3NhZ2Uud3JpdGVUbyhjb2Rlci5zdHJlYW0oKSk7
Ci0gICAgICBjb2Rlci5zdHJlYW0oKS5mbHVzaCgpOwotICAgICAgYnl0ZVtdIHJhd0J5dGVzID0g
Y29kZXIudG9CeXRlQXJyYXkoKTsKLSAgICAgIFNwYXJzZUVudW1NZXNzYWdlIG1lc3NhZ2UyID0g
U3BhcnNlRW51bU1lc3NhZ2UucGFyc2VGcm9tKHJhd0J5dGVzKTsKLSAgICAgIGFzc2VydEVxdWFs
cyhUZXN0U3BhcnNlRW51bS5TUEFSU0VfRSwgbWVzc2FnZTIuZ2V0U3BhcnNlRW51bSgpKTsKLSAg
ICB9Ci0gIH0KLQotICAvKiogVGVzdCBnZXRUb3RhbEJ5dGVzV3JpdHRlbigpICovCi0gIHB1Ymxp
YyB2b2lkIHRlc3RHZXRUb3RhbEJ5dGVzV3JpdHRlbigpIHRocm93cyBFeGNlcHRpb24gewotICAg
IENvZGVyIGNvZGVyID0gT3V0cHV0VHlwZS5TVFJFQU0ubmV3Q29kZXIoNCAqIDEwMjQpOwotCi0g
ICAgLy8gV3JpdGUgc29tZSBzb21lIGJ5dGVzIChtb3JlIHRoYW4gdGhlIGJ1ZmZlciBjYW4gaG9s
ZCkgYW5kIHZlcmlmeSB0aGF0IHRvdGFsV3JpdHRlbgotICAgIC8vIGlzIGNvcnJlY3QuCi0gICAg
Ynl0ZVtdIHZhbHVlID0gImFiY2RlIi5nZXRCeXRlcyhJbnRlcm5hbC5VVEZfOCk7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDI0OyArK2kpIHsKLSAgICAgIGNvZGVyLnN0cmVhbSgpLndyaXRl
UmF3Qnl0ZXModmFsdWUsIDAsIHZhbHVlLmxlbmd0aCk7Ci0gICAgfQotICAgIGFzc2VydEVxdWFs
cyh2YWx1ZS5sZW5ndGggKiAxMDI0LCBjb2Rlci5zdHJlYW0oKS5nZXRUb3RhbEJ5dGVzV3JpdHRl
bigpKTsKLQotICAgIC8vIE5vdyB3cml0ZSBhbiBlbmNvZGVkIHN0cmluZy4KLSAgICBTdHJpbmcg
c3RyaW5nID0KLSAgICAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YWJjZGVmZ2hpamts
bW5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Ci0gICAgLy8gRW5zdXJl
IHdlIHRha2UgdGhlIHNsb3dlciBmYXN0IHBhdGguCi0gICAgYXNzZXJ0VHJ1ZShDb2RlZE91dHB1
dFN0cmVhbS5jb21wdXRlVUludDMyU2l6ZU5vVGFnKHN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAg
IT0gQ29kZWRPdXRwdXRTdHJlYW0uY29tcHV0ZVVJbnQzMlNpemVOb1RhZyhzdHJpbmcubGVuZ3Ro
KCkgKiBVdGY4Lk1BWF9CWVRFU19QRVJfQ0hBUikpOwotCi0gICAgY29kZXIuc3RyZWFtKCkud3Jp
dGVTdHJpbmdOb1RhZyhzdHJpbmcpOwotICAgIGludCBzdHJpbmdTaXplID0gQ29kZWRPdXRwdXRT
dHJlYW0uY29tcHV0ZVN0cmluZ1NpemVOb1RhZyhzdHJpbmcpOwotCi0gICAgLy8gVmVyaWZ5IHRo
YXQgdGhlIHRvdGFsIGJ5dGVzIHdyaXR0ZW4gaXMgY29ycmVjdAotICAgIGFzc2VydEVxdWFscygo
dmFsdWUubGVuZ3RoICogMTAyNCkgKyBzdHJpbmdTaXplLCBjb2Rlci5zdHJlYW0oKS5nZXRUb3Rh
bEJ5dGVzV3JpdHRlbigpKTsKLSAgfQotCi0gIC8vIFRPRE8oZHdlaXMpOiBXcml0ZSBhIGNvbXBy
ZWhlbnNpdmUgdGVzdCBzdWl0ZSBmb3IgQ29kZWRPdXRwdXRTdHJlYW0gdGhhdCBjb3ZlcnMgbW9y
ZSB0aGFuIGp1c3QKLSAgLy8gICAgdGhpcyBjYXNlLgotICBwdWJsaWMgdm9pZCB0ZXN0V3JpdGVT
dHJpbmdOb1RhZ19mYXN0cGF0aCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIGludCBidWZmZXJT
aXplID0gMTUzOwotICAgIFN0cmluZyB0aHJlZUJ5dGVzUGVyID0gIlx1MDk4MSI7Ci0gICAgU3Ry
aW5nIHN0cmluZyA9IHRocmVlQnl0ZXNQZXI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1MDsg
aSsrKSB7Ci0gICAgICBzdHJpbmcgKz0gdGhyZWVCeXRlc1BlcjsKLSAgICB9Ci0gICAgLy8gVGhl
c2UgY2hlY2tzIGVuc3VyZSB3ZSB3aWxsIHRpY2tsZSB0aGUgc2xvd2VyIGZhc3QgcGF0aC4KLSAg
ICBhc3NlcnRFcXVhbHMoMSwgQ29kZWRPdXRwdXRTdHJlYW0uY29tcHV0ZVVJbnQzMlNpemVOb1Rh
ZyhzdHJpbmcubGVuZ3RoKCkpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIDIsIENvZGVk
T3V0cHV0U3RyZWFtLmNvbXB1dGVVSW50MzJTaXplTm9UYWcoc3RyaW5nLmxlbmd0aCgpICogVXRm
OC5NQVhfQllURVNfUEVSX0NIQVIpKTsKLSAgICBhc3NlcnRFcXVhbHMoYnVmZmVyU2l6ZSwgc3Ry
aW5nLmxlbmd0aCgpICogVXRmOC5NQVhfQllURVNfUEVSX0NIQVIpOwotCi0gICAgZm9yIChPdXRw
dXRUeXBlIG91dHB1dFR5cGUgOiBPdXRwdXRUeXBlLnZhbHVlcygpKSB7Ci0gICAgICBDb2RlciBj
b2RlciA9IG91dHB1dFR5cGUubmV3Q29kZXIoYnVmZmVyU2l6ZSArIDIpOwotICAgICAgY29kZXIu
c3RyZWFtKCkud3JpdGVTdHJpbmdOb1RhZyhzdHJpbmcpOwotICAgICAgY29kZXIuc3RyZWFtKCku
Zmx1c2goKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0V3JpdGVUb0J5dGVCdWZm
ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgYnVmZmVyU2l6ZSA9IDE2ICog
MTAyNDsKLSAgICBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoYnVmZmVy
U2l6ZSk7Ci0gICAgQ29kZWRPdXRwdXRTdHJlYW0gY29kZWRTdHJlYW0gPSBDb2RlZE91dHB1dFN0
cmVhbS5uZXdJbnN0YW5jZShidWZmZXIpOwotICAgIC8vIFdyaXRlIHJhdyBieXRlcyBpbnRvIHRo
ZSBCeXRlQnVmZmVyLgotICAgIGZpbmFsIGludCBsZW5ndGgxID0gNTAwMDsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDE7IGkrKykgewotICAgICAgY29kZWRTdHJlYW0ud3JpdGVSYXdC
eXRlKChieXRlKSAxKTsKLSAgICB9Ci0gICAgZmluYWwgaW50IGxlbmd0aDIgPSA4ICogMTAyNDsK
LSAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlW2xlbmd0aDJdOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoMjsgaSsrKSB7Ci0gICAgICBkYXRhW2ldID0gKGJ5dGUpIDI7Ci0gICAgfQot
ICAgIGNvZGVkU3RyZWFtLndyaXRlUmF3Qnl0ZXMoZGF0YSk7Ci0gICAgZmluYWwgaW50IGxlbmd0
aDMgPSBidWZmZXJTaXplIC0gbGVuZ3RoMSAtIGxlbmd0aDI7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW5ndGgzOyBpKyspIHsKLSAgICAgIGNvZGVkU3RyZWFtLndyaXRlUmF3Qnl0ZSgoYnl0
ZSkgMyk7Ci0gICAgfQotICAgIGNvZGVkU3RyZWFtLmZsdXNoKCk7Ci0KLSAgICAvLyBDaGVjayB0
aGF0IGRhdGEgaXMgY29ycmVjdGx5IHdyaXR0ZW4gdG8gdGhlIEJ5dGVCdWZmZXIuCi0gICAgYXNz
ZXJ0RXF1YWxzKDAsIGJ1ZmZlci5yZW1haW5pbmcoKSk7Ci0gICAgYnVmZmVyLmZsaXAoKTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDE7IGkrKykgewotICAgICAgYXNzZXJ0RXF1YWxz
KChieXRlKSAxLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbmd0aDI7IGkrKykgewotICAgICAgYXNzZXJ0RXF1YWxzKChieXRlKSAyLCBidWZmZXIuZ2V0
KCkpOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDM7IGkrKykgewotICAg
ICAgYXNzZXJ0RXF1YWxzKChieXRlKSAzLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RXcml0ZUJ5dGVCdWZmZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBieXRlW10gdmFsdWUgPSAiYWJjZGUiLmdldEJ5dGVzKEludGVybmFsLlVURl84KTsKLSAgICBC
eXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0
cmVhbSgpOwotICAgIENvZGVkT3V0cHV0U3RyZWFtIGNvZGVkU3RyZWFtID0gQ29kZWRPdXRwdXRT
dHJlYW0ubmV3SW5zdGFuY2Uob3V0cHV0U3RyZWFtKTsKLSAgICBCeXRlQnVmZmVyIGJ5dGVCdWZm
ZXIgPSBCeXRlQnVmZmVyLndyYXAodmFsdWUsIDAsIDEpOwotICAgIC8vIFRoaXMgd2lsbCBhY3R1
YWxseSB3cml0ZSA1IGJ5dGVzIGludG8gdGhlIENvZGVkT3V0cHV0U3RyZWFtIGFzIHRoZQotICAg
IC8vIEJ5dGVCdWZmZXIncyBjYXBhY2l0eSgpIGlzIDUuCi0gICAgY29kZWRTdHJlYW0ud3JpdGVS
YXdCeXRlcyhieXRlQnVmZmVyKTsKLSAgICAvLyBUaGUgYWJvdmUgY2FsbCBzaG91bGRuJ3QgYWZm
ZWN0IHRoZSBCeXRlQnVmZmVyJ3Mgc3RhdGUuCi0gICAgYXNzZXJ0RXF1YWxzKDAsIGJ5dGVCdWZm
ZXIucG9zaXRpb24oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ5dGVCdWZmZXIubGltaXQoKSk7
Ci0KLSAgICAvLyBUaGUgY29ycmVjdCB3YXkgdG8gd3JpdGUgcGFydCBvZiBhbiBhcnJheSB1c2lu
ZyBCeXRlQnVmZmVyLgotICAgIGNvZGVkU3RyZWFtLndyaXRlUmF3Qnl0ZXMoQnl0ZUJ1ZmZlci53
cmFwKHZhbHVlLCAyLCAxKS5zbGljZSgpKTsKLQotICAgIGNvZGVkU3RyZWFtLmZsdXNoKCk7Ci0g
ICAgYnl0ZVtdIHJlc3VsdCA9IG91dHB1dFN0cmVhbS50b0J5dGVBcnJheSgpOwotICAgIGFzc2Vy
dEVxdWFscyg2LCByZXN1bHQubGVuZ3RoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkr
KykgewotICAgICAgYXNzZXJ0RXF1YWxzKHZhbHVlW2ldLCByZXN1bHRbaV0pOwotICAgIH0KLSAg
ICBhc3NlcnRFcXVhbHModmFsdWVbMl0sIHJlc3VsdFs1XSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0V3JpdGVCeXRlQXJyYXlXaXRoT2Zmc2V0cygpIHRocm93cyBFeGNlcHRpb24gewotICAg
IGJ5dGVbXSBmdWxsQXJyYXkgPSBieXRlcygweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAw
eDY2LCAweDc3LCAweDg4KTsKLSAgICBieXRlW10gZGVzdGluYXRpb24gPSBuZXcgYnl0ZVs0XTsK
LSAgICBDb2RlZE91dHB1dFN0cmVhbSBjb2RlZFN0cmVhbSA9IENvZGVkT3V0cHV0U3RyZWFtLm5l
d0luc3RhbmNlKGRlc3RpbmF0aW9uKTsKLSAgICBjb2RlZFN0cmVhbS53cml0ZUJ5dGVBcnJheU5v
VGFnKGZ1bGxBcnJheSwgMiwgMik7Ci0gICAgYXNzZXJ0RXF1YWxCeXRlcyhPdXRwdXRUeXBlLkFS
UkFZLCBieXRlcygweDAyLCAweDMzLCAweDQ0LCAweDAwKSwgZGVzdGluYXRpb24pOwotICAgIGFz
c2VydEVxdWFscygzLCBjb2RlZFN0cmVhbS5nZXRUb3RhbEJ5dGVzV3JpdHRlbigpKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemVVdGY4X011bHRpcGxlU21hbGxXcml0ZXMoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdHJpbmcgc291cmNlID0gImFiY2RlZmdoaWpr
bG1ub3BxcnN0dXZ3eHl6IjsKLQotICAgIC8vIEdlbmVyYXRlIHRoZSBleHBlY3RlZCBvdXRwdXQg
aWYgdGhlIHNvdXJjZSBzdHJpbmcgaXMgd3JpdHRlbiAyIGJ5dGVzIGF0IGEgdGltZS4KLSAgICBC
eXRlQXJyYXlPdXRwdXRTdHJlYW0gZXhwZWN0ZWRCeXRlc1N0cmVhbSA9IG5ldyBCeXRlQXJyYXlP
dXRwdXRTdHJlYW0oKTsKLSAgICBmb3IgKGludCBwb3MgPSAwOyBwb3MgPCBzb3VyY2UubGVuZ3Ro
KCk7IHBvcyArPSAyKSB7Ci0gICAgICBTdHJpbmcgc3Vic3RyID0gc291cmNlLnN1YnN0cmluZyhw
b3MsIHBvcyArIDIpOwotICAgICAgZXhwZWN0ZWRCeXRlc1N0cmVhbS53cml0ZSgyKTsKLSAgICAg
IGV4cGVjdGVkQnl0ZXNTdHJlYW0ud3JpdGUoc3Vic3RyLmdldEJ5dGVzKEludGVybmFsLlVURl84
KSk7Ci0gICAgfQotICAgIGZpbmFsIGJ5dGVbXSBleHBlY3RlZEJ5dGVzID0gZXhwZWN0ZWRCeXRl
c1N0cmVhbS50b0J5dGVBcnJheSgpOwotCi0gICAgLy8gRm9yIGVhY2ggb3V0cHV0IHR5cGUsIHdy
aXRlIHRoZSBzb3VyY2Ugc3RyaW5nIDIgYnl0ZXMgYXQgYSB0aW1lIGFuZCB2ZXJpZnkgdGhlIG91
dHB1dC4KLSAgICBmb3IgKE91dHB1dFR5cGUgb3V0cHV0VHlwZSA6IE91dHB1dFR5cGUudmFsdWVz
KCkpIHsKLSAgICAgIENvZGVyIGNvZGVyID0gb3V0cHV0VHlwZS5uZXdDb2RlcihleHBlY3RlZEJ5
dGVzLmxlbmd0aCk7Ci0gICAgICBmb3IgKGludCBwb3MgPSAwOyBwb3MgPCBzb3VyY2UubGVuZ3Ro
KCk7IHBvcyArPSAyKSB7Ci0gICAgICAgIFN0cmluZyBzdWJzdHIgPSBzb3VyY2Uuc3Vic3RyaW5n
KHBvcywgcG9zICsgMik7Ci0gICAgICAgIGNvZGVyLnN0cmVhbSgpLndyaXRlU3RyaW5nTm9UYWco
c3Vic3RyKTsKLSAgICAgIH0KLSAgICAgIGNvZGVyLnN0cmVhbSgpLmZsdXNoKCk7Ci0gICAgICBh
c3NlcnRFcXVhbEJ5dGVzKG91dHB1dFR5cGUsIGV4cGVjdGVkQnl0ZXMsIGNvZGVyLnRvQnl0ZUFy
cmF5KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemVJbnZhbGlk
VXRmOCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFN0cmluZ1tdIGludmFsaWRTdHJpbmdzID0g
bmV3IFN0cmluZ1tdIHtuZXdTdHJpbmcoQ2hhcmFjdGVyLk1JTl9ISUdIX1NVUlJPR0FURSksCi0g
ICAgICAgICJmb29iYXIiICsgbmV3U3RyaW5nKENoYXJhY3Rlci5NSU5fSElHSF9TVVJST0dBVEUp
LCBuZXdTdHJpbmcoQ2hhcmFjdGVyLk1JTl9MT1dfU1VSUk9HQVRFKSwKLSAgICAgICAgImZvb2Jh
ciIgKyBuZXdTdHJpbmcoQ2hhcmFjdGVyLk1JTl9MT1dfU1VSUk9HQVRFKSwKLSAgICAgICAgbmV3
U3RyaW5nKENoYXJhY3Rlci5NSU5fSElHSF9TVVJST0dBVEUsIENoYXJhY3Rlci5NSU5fSElHSF9T
VVJST0dBVEUpfTsKLQotICAgIENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dFdpdGhTdHJlYW0gPSBD
b2RlZE91dHB1dFN0cmVhbS5uZXdJbnN0YW5jZShuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCkp
OwotICAgIENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dFdpdGhBcnJheSA9IENvZGVkT3V0cHV0U3Ry
ZWFtLm5ld0luc3RhbmNlKG5ldyBieXRlWzEwMDAwXSk7Ci0gICAgQ29kZWRPdXRwdXRTdHJlYW0g
b3V0cHV0V2l0aEJ5dGVCdWZmZXIgPQotICAgICAgICBDb2RlZE91dHB1dFN0cmVhbS5uZXdJbnN0
YW5jZShCeXRlQnVmZmVyLmFsbG9jYXRlKDEwMDAwKSk7Ci0gICAgZm9yIChTdHJpbmcgcyA6IGlu
dmFsaWRTdHJpbmdzKSB7Ci0gICAgICAvLyBUT0RPKGR3ZWlzKTogVGhlc2Ugc2hvdWxkIGFsbCBm
YWlsOyBpbnN0ZWFkIHRoZXkgYXJlIGNvcnJ1cHRpbmcgZGF0YS4KLSAgICAgIENvZGVkT3V0cHV0
U3RyZWFtLmNvbXB1dGVTdHJpbmdTaXplTm9UYWcocyk7Ci0gICAgICBvdXRwdXRXaXRoU3RyZWFt
LndyaXRlU3RyaW5nTm9UYWcocyk7Ci0gICAgICBvdXRwdXRXaXRoQXJyYXkud3JpdGVTdHJpbmdO
b1RhZyhzKTsKLSAgICAgIG91dHB1dFdpdGhCeXRlQnVmZmVyLndyaXRlU3RyaW5nTm9UYWcocyk7
Ci0gICAgfQotICB9Ci0KLSAgLy8gVE9ETyhuYXRoYW5taXR0bGVyKTogVGhpcyB0ZXN0IGNhbiBi
ZSBkZWxldGVkIG9uY2Ugd2UgcHJvcGVybHkgdGhyb3cgSU9FeGNlcHRpb24gd2hpbGUKLSAgLy8g
ZW5jb2RpbmcgaW52YWxpZCBVVEYtOCBzdHJpbmdzLgotICBwdWJsaWMgdm9pZCB0ZXN0U2VyaWFs
aXplSW52YWxpZFV0ZjhGb2xsb3dlZEJ5T3V0T2ZTcGFjZSgpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIGZpbmFsIGludCBub3RFbm91Z2hCeXRlcyA9IDQ7Ci0gICAgQ29kZWRPdXRwdXRTdHJlYW0g
b3V0cHV0V2l0aEFycmF5ID0gQ29kZWRPdXRwdXRTdHJlYW0ubmV3SW5zdGFuY2UobmV3IGJ5dGVb
bm90RW5vdWdoQnl0ZXNdKTsKLSAgICBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXRXaXRoQnl0ZUJ1
ZmZlciA9Ci0gICAgICAgIENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNlKEJ5dGVCdWZmZXIu
YWxsb2NhdGUobm90RW5vdWdoQnl0ZXMpKTsKLQotICAgIFN0cmluZyBpbnZhbGlkU3RyaW5nID0g
bmV3U3RyaW5nKENoYXJhY3Rlci5NSU5fSElHSF9TVVJST0dBVEUsICdmJywgJ28nLCAnbycsICdi
JywgJ2EnLCAncicpOwotICAgIHRyeSB7Ci0gICAgICBvdXRwdXRXaXRoQXJyYXkud3JpdGVTdHJp
bmdOb1RhZyhpbnZhbGlkU3RyaW5nKTsKLSAgICAgIGZhaWwoIkV4cGVjdGVkIE91dE9mU3BhY2VF
eGNlcHRpb24iKTsKLSAgICB9IGNhdGNoIChPdXRPZlNwYWNlRXhjZXB0aW9uIGUpIHsKLSAgICAg
IGFzc2VydFRydWUoZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgSW5kZXhPdXRPZkJvdW5kc0V4Y2Vw
dGlvbik7Ci0gICAgfQotICAgIHRyeSB7Ci0gICAgICBvdXRwdXRXaXRoQnl0ZUJ1ZmZlci53cml0
ZVN0cmluZ05vVGFnKGludmFsaWRTdHJpbmcpOwotICAgICAgZmFpbCgiRXhwZWN0ZWQgT3V0T2ZT
cGFjZUV4Y2VwdGlvbiIpOwotICAgIH0gY2F0Y2ggKE91dE9mU3BhY2VFeGNlcHRpb24gZSkgewot
ICAgICAgYXNzZXJ0VHJ1ZShlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBJbmRleE91dE9mQm91bmRz
RXhjZXB0aW9uKTsKLSAgICB9Ci0gIH0KLQotICAvKiogUmVncmVzc2lvbiB0ZXN0IGZvciBodHRw
czovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmL2lzc3Vlcy8yOTIgKi8KLSAgcHVibGljIHZv
aWQgdGVzdENvcnJlY3RFeGNlcHRpb25UaHJvd1doZW5FbmNvZGluZ1N0cmluZ3NXaXRob3V0RW5v
dWdoU3BhY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgdGVzdENhc2UgPSAiRm9v
b29vb29vIjsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIENvZGVkT3V0cHV0U3RyZWFtLmNv
bXB1dGVVSW50MzJTaXplTm9UYWcodGVzdENhc2UubGVuZ3RoKCkpLAotICAgICAgICBDb2RlZE91
dHB1dFN0cmVhbS5jb21wdXRlVUludDMyU2l6ZU5vVGFnKHRlc3RDYXNlLmxlbmd0aCgpICogMykp
OwotICAgIGFzc2VydEVxdWFscygxMSwgQ29kZWRPdXRwdXRTdHJlYW0uY29tcHV0ZVN0cmluZ1Np
emUoMSwgdGVzdENhc2UpKTsKLSAgICAvLyBUYWcgaXMgb25lIGJ5dGUsIHZhcmludCBkZXNjcmli
aW5nIHN0cmluZyBsZW5ndGggaXMgMSBieXRlLCBzdHJpbmcgbGVuZ3RoIGlzIDkgYnl0ZXMuCi0g
ICAgLy8gQW4gYXJyYXkgb2Ygc2l6ZSAxIHdpbGwgY2F1c2UgYSBmYWlsdXJlIHdoZW4gdHJ5aW5n
IHRvIHdyaXRlIHRoZSB2YXJpbnQuCi0gICAgZm9yIChPdXRwdXRUeXBlIG91dHB1dFR5cGUgOgot
ICAgICAgICBuZXcgT3V0cHV0VHlwZVtdIHtPdXRwdXRUeXBlLkFSUkFZLCBPdXRwdXRUeXBlLk5J
T19IRUFQLCBPdXRwdXRUeXBlLk5JT19ESVJFQ1R9KSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDExOyBpKyspIHsKLSAgICAgICAgQ29kZXIgY29kZXIgPSBvdXRwdXRUeXBlLm5ld0NvZGVy
KGkpOwotICAgICAgICB0cnkgewotICAgICAgICAgIGNvZGVyLnN0cmVhbSgpLndyaXRlU3RyaW5n
KDEsIHRlc3RDYXNlKTsKLSAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gb3V0
IG9mIHNwYWNlIGV4Y2VwdGlvbiIpOwotICAgICAgICB9IGNhdGNoIChDb2RlZE91dHB1dFN0cmVh
bS5PdXRPZlNwYWNlRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RGlmZmVyZW50U3RyaW5nTGVuZ3RocygpIHRo
cm93cyBFeGNlcHRpb24gewotICAgIC8vIFRlc3Qgc3RyaW5nIHNlcmlhbGl6YXRpb24gcm91bmR0
cmlwIHVzaW5nIHN0cmluZ3Mgb2YgdGhlIGZvbGxvd2luZyBsZW5ndGhzLAotICAgIC8vIHdpdGgg
QVNDSUkgYW5kIFVuaWNvZGUgY2hhcmFjdGVycyByZXF1aXJpbmcgZGlmZmVyZW50IFVURi04IGJ5
dGUgY291bnRzIHBlcgotICAgIC8vIGNoYXIsIGhlbmNlIGNhdXNpbmcgdGhlIGxlbmd0aCBkZWxp
bWl0ZXIgdmFyaW50IHRvIHNvbWV0aW1lcyByZXF1aXJlIG1vcmUKLSAgICAvLyBieXRlcyBmb3Ig
dGhlIFVuaWNvZGUgc3RyaW5ncyB0aGFuIHRoZSBBU0NJSSBzdHJpbmcgb2YgdGhlIHNhbWUgbGVu
Z3RoLgotICAgIGludFtdIGxlbmd0aHMgPSBuZXcgaW50W10gewotICAgICAgICAwLAotICAgICAg
ICAxLAotICAgICAgICAoMSA8PCA0KSAtIDEsIC8vIDEgYnl0ZSBmb3IgQVNDSUkgYW5kIFVuaWNv
ZGUKLSAgICAgICAgKDEgPDwgNykgLSAxLCAvLyAxIGJ5dGUgZm9yIEFTQ0lJLCAyIGJ5dGVzIGZv
ciBVbmljb2RlCi0gICAgICAgICgxIDw8IDExKSAtIDEsIC8vIDIgYnl0ZXMgZm9yIEFTQ0lJIGFu
ZCBVbmljb2RlCi0gICAgICAgICgxIDw8IDE0KSAtIDEsIC8vIDIgYnl0ZXMgZm9yIEFTQ0lJLCAz
IGJ5dGVzIGZvciBVbmljb2RlCi0gICAgICAgICgxIDw8IDE3KSAtIDEsCi0gICAgICAgIC8vIDMg
Ynl0ZXMgZm9yIEFTQ0lJIGFuZCBVbmljb2RlCi0gICAgfTsKLSAgICBmb3IgKE91dHB1dFR5cGUg
b3V0cHV0VHlwZSA6IE91dHB1dFR5cGUudmFsdWVzKCkpIHsKLSAgICAgIGZvciAoaW50IGkgOiBs
ZW5ndGhzKSB7Ci0gICAgICAgIHRlc3RFbmNvZGluZ09mU3RyaW5nKG91dHB1dFR5cGUsICdxJywg
aSk7IC8vIDEgYnl0ZSBwZXIgY2hhcgotICAgICAgICB0ZXN0RW5jb2RpbmdPZlN0cmluZyhvdXRw
dXRUeXBlLCAnXHUwN0ZGJywgaSk7IC8vIDIgYnl0ZXMgcGVyIGNoYXIKLSAgICAgICAgdGVzdEVu
Y29kaW5nT2ZTdHJpbmcob3V0cHV0VHlwZSwgJ1x1MDk4MScsIGkpOyAvLyAzIGJ5dGVzIHBlciBj
aGFyCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5pb0VuY29kZXJz
V2l0aEluaXRpYWxPZmZzZXRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIHZhbHVl
ID0gImFiYyI7Ci0gICAgZm9yIChDb2RlciBjb2RlciA6IG5ldyBDb2RlcltdIHtuZXcgTmlvSGVh
cENvZGVyKDEwLCAyKSwgbmV3IE5pb0RpcmVjdENvZGVyKDEwLCAyKX0pIHsKLSAgICAgIGNvZGVy
LnN0cmVhbSgpLndyaXRlU3RyaW5nTm9UYWcodmFsdWUpOwotICAgICAgY29kZXIuc3RyZWFtKCku
Zmx1c2goKTsKLSAgICAgIGFzc2VydEVxdWFsQnl0ZXMoY29kZXIuZ2V0T3V0cHV0VHlwZSgpLCBu
ZXcgYnl0ZVtdezMsICdhJywgJ2InLCAnYyd9LCBjb2Rlci50b0J5dGVBcnJheSgpKTsKLSAgICB9
Ci0gIH0KLQotICAvKioKLSAgICogUGFyc2VzIHRoZSBnaXZlbiBieXRlcyB1c2luZyB3cml0ZVJh
d0xpdHRsZUVuZGlhbjMyKCkgYW5kIGNoZWNrcwotICAgKiB0aGF0IHRoZSByZXN1bHQgbWF0Y2hl
cyB0aGUgZ2l2ZW4gdmFsdWUuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFdy
aXRlTGl0dGxlRW5kaWFuMzIoYnl0ZVtdIGRhdGEsIGludCB2YWx1ZSkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgZm9yIChPdXRwdXRUeXBlIG91dHB1dFR5cGUgOiBPdXRwdXRUeXBlLnZhbHVlcygp
KSB7Ci0gICAgICBDb2RlciBjb2RlciA9IG91dHB1dFR5cGUubmV3Q29kZXIoZGF0YS5sZW5ndGgp
OwotICAgICAgY29kZXIuc3RyZWFtKCkud3JpdGVGaXhlZDMyTm9UYWcodmFsdWUpOwotICAgICAg
Y29kZXIuc3RyZWFtKCkuZmx1c2goKTsKLSAgICAgIGFzc2VydEVxdWFsQnl0ZXMob3V0cHV0VHlw
ZSwgZGF0YSwgY29kZXIudG9CeXRlQXJyYXkoKSk7Ci0gICAgfQotCi0gICAgLy8gVHJ5IGRpZmZl
cmVudCBibG9jayBzaXplcy4KLSAgICBmb3IgKGludCBibG9ja1NpemUgPSAxOyBibG9ja1NpemUg
PD0gMTY7IGJsb2NrU2l6ZSAqPSAyKSB7Ci0gICAgICBDb2RlciBjb2RlciA9IE91dHB1dFR5cGUu
U1RSRUFNLm5ld0NvZGVyKGJsb2NrU2l6ZSk7Ci0gICAgICBjb2Rlci5zdHJlYW0oKS53cml0ZUZp
eGVkMzJOb1RhZyh2YWx1ZSk7Ci0gICAgICBjb2Rlci5zdHJlYW0oKS5mbHVzaCgpOwotICAgICAg
YXNzZXJ0RXF1YWxCeXRlcyhPdXRwdXRUeXBlLlNUUkVBTSwgZGF0YSwgY29kZXIudG9CeXRlQXJy
YXkoKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlcyB0aGUgZ2l2ZW4gYnl0ZXMg
dXNpbmcgd3JpdGVSYXdMaXR0bGVFbmRpYW42NCgpIGFuZCBjaGVja3MKLSAgICogdGhhdCB0aGUg
cmVzdWx0IG1hdGNoZXMgdGhlIGdpdmVuIHZhbHVlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMg
dm9pZCBhc3NlcnRXcml0ZUxpdHRsZUVuZGlhbjY0KGJ5dGVbXSBkYXRhLCBsb25nIHZhbHVlKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBmb3IgKE91dHB1dFR5cGUgb3V0cHV0VHlwZSA6IE91dHB1
dFR5cGUudmFsdWVzKCkpIHsKLSAgICAgIENvZGVyIGNvZGVyID0gb3V0cHV0VHlwZS5uZXdDb2Rl
cihkYXRhLmxlbmd0aCk7Ci0gICAgICBjb2Rlci5zdHJlYW0oKS53cml0ZUZpeGVkNjROb1RhZyh2
YWx1ZSk7Ci0gICAgICBjb2Rlci5zdHJlYW0oKS5mbHVzaCgpOwotICAgICAgYXNzZXJ0RXF1YWxC
eXRlcyhvdXRwdXRUeXBlLCBkYXRhLCBjb2Rlci50b0J5dGVBcnJheSgpKTsKLSAgICB9Ci0KLSAg
ICAvLyBUcnkgZGlmZmVyZW50IGJsb2NrIHNpemVzLgotICAgIGZvciAoaW50IGJsb2NrU2l6ZSA9
IDE7IGJsb2NrU2l6ZSA8PSAxNjsgYmxvY2tTaXplICo9IDIpIHsKLSAgICAgIENvZGVyIGNvZGVy
ID0gT3V0cHV0VHlwZS5TVFJFQU0ubmV3Q29kZXIoYmxvY2tTaXplKTsKLSAgICAgIGNvZGVyLnN0
cmVhbSgpLndyaXRlRml4ZWQ2NE5vVGFnKHZhbHVlKTsKLSAgICAgIGNvZGVyLnN0cmVhbSgpLmZs
dXNoKCk7Ci0gICAgICBhc3NlcnRFcXVhbEJ5dGVzKE91dHB1dFR5cGUuU1RSRUFNLCBkYXRhLCBj
b2Rlci50b0J5dGVBcnJheSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJp
bmcgbmV3U3RyaW5nKGNoYXIuLi4gY2hhcnMpIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZyhjaGFy
cyk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHRlc3RFbmNvZGluZ09mU3RyaW5nKE91
dHB1dFR5cGUgb3V0cHV0VHlwZSwgY2hhciBjLCBpbnQgbGVuZ3RoKQotICAgICAgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIGZ1bGxTdHJpbmcgPSBmdWxsU3RyaW5nKGMsIGxlbmd0aCk7
Ci0gICAgVGVzdEFsbFR5cGVzIHRlc3RBbGxUeXBlcyA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVy
KCkuc2V0T3B0aW9uYWxTdHJpbmcoZnVsbFN0cmluZykuYnVpbGQoKTsKLSAgICBDb2RlciBjb2Rl
ciA9IG91dHB1dFR5cGUubmV3Q29kZXIodGVzdEFsbFR5cGVzLmdldFNlcmlhbGl6ZWRTaXplKCkp
OwotICAgIHRlc3RBbGxUeXBlcy53cml0ZVRvKGNvZGVyLnN0cmVhbSgpKTsKLSAgICBjb2Rlci5z
dHJlYW0oKS5mbHVzaCgpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgIk91cHV0VHlwZTog
IiArIG91dHB1dFR5cGUsCi0gICAgICAgIGZ1bGxTdHJpbmcsCi0gICAgICAgIFRlc3RBbGxUeXBl
cy5wYXJzZUZyb20oY29kZXIudG9CeXRlQXJyYXkoKSkuZ2V0T3B0aW9uYWxTdHJpbmcoKSk7Ci0g
IH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZnVsbFN0cmluZyhjaGFyIGMsIGludCBsZW5n
dGgpIHsKLSAgICBjaGFyW10gcmVzdWx0ID0gbmV3IGNoYXJbbGVuZ3RoXTsKLSAgICBBcnJheXMu
ZmlsbChyZXN1bHQsIGMpOwotICAgIHJldHVybiBuZXcgU3RyaW5nKHJlc3VsdCk7Ci0gIH0KLQot
ICAvKioKLSAgICogSGVscGVyIHRvIGNvbnN0cnVjdCBhIGJ5dGUgYXJyYXkgZnJvbSBhIGJ1bmNo
IG9mIGJ5dGVzLiAgVGhlIGlucHV0cyBhcmUKLSAgICogYWN0dWFsbHkgaW50cyBzbyB0aGF0IEkg
Y2FuIHVzZSBoZXggbm90YXRpb24gYW5kIG5vdCBnZXQgc3R1cGlkIGVycm9ycwotICAgKiBhYm91
dCBwcmVjaXNpb24uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBieXRlW10gYnl0ZXMoaW50Li4u
IGJ5dGVzQXNJbnRzKSB7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbYnl0ZXNBc0ludHMu
bGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzQXNJbnRzLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICBieXRlc1tpXSA9IChieXRlKSBieXRlc0FzSW50c1tpXTsKLSAgICB9Ci0gICAg
cmV0dXJuIGJ5dGVzOwotICB9Ci0KLSAgLyoqIEFycmF5cy5hc0xpc3QoKSBkb2VzIG5vdCB3b3Jr
IHdpdGggYXJyYXlzIG9mIHByaW1pdGl2ZXMuICA6KCAqLwotICBwcml2YXRlIHN0YXRpYyBMaXN0
PEJ5dGU+IHRvTGlzdChieXRlW10gYnl0ZXMpIHsKLSAgICBMaXN0PEJ5dGU+IHJlc3VsdCA9IG5l
dyBBcnJheUxpc3Q8Qnl0ZT4oKTsKLSAgICBmb3IgKGJ5dGUgYiA6IGJ5dGVzKSB7Ci0gICAgICBy
ZXN1bHQuYWRkKGIpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbEJ5dGVzKE91dHB1dFR5cGUgb3V0cHV0VHlwZSwgYnl0
ZVtdIGEsIGJ5dGVbXSBiKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG91dHB1dFR5cGUubmFtZSgpLCB0
b0xpc3QoYSksIHRvTGlzdChiKSk7Ci0gIH0KLQotICAvKioKLSAgICogV3JpdGVzIHRoZSBnaXZl
biB2YWx1ZSB1c2luZyB3cml0ZVJhd1ZhcmludDMyKCkgYW5kIHdyaXRlUmF3VmFyaW50NjQoKSBh
bmQKLSAgICogY2hlY2tzIHRoYXQgdGhlIHJlc3VsdCBtYXRjaGVzIHRoZSBnaXZlbiBieXRlcy4K
LSAgICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0V3JpdGVWYXJpbnQoYnl0ZVtdIGRh
dGEsIGxvbmcgdmFsdWUpIHRocm93cyBFeGNlcHRpb24gewotICAgIGZvciAoT3V0cHV0VHlwZSBv
dXRwdXRUeXBlIDogT3V0cHV0VHlwZS52YWx1ZXMoKSkgewotICAgICAgLy8gT25seSB0ZXN0IDMy
LWJpdCB3cml0ZSBpZiB0aGUgdmFsdWUgZml0cyBpbnRvIGFuIGludC4KLSAgICAgIGlmICh2YWx1
ZSA9PSAoaW50KSB2YWx1ZSkgewotICAgICAgICBDb2RlciBjb2RlciA9IG91dHB1dFR5cGUubmV3
Q29kZXIoMTApOwotICAgICAgICBjb2Rlci5zdHJlYW0oKS53cml0ZVVJbnQzMk5vVGFnKChpbnQp
IHZhbHVlKTsKLSAgICAgICAgY29kZXIuc3RyZWFtKCkuZmx1c2goKTsKLSAgICAgICAgYXNzZXJ0
RXF1YWxCeXRlcyhvdXRwdXRUeXBlLCBkYXRhLCBjb2Rlci50b0J5dGVBcnJheSgpKTsKLQotICAg
ICAgICAvLyBBbHNvIHRyeSBjb21wdXRpbmcgc2l6ZS4KLSAgICAgICAgYXNzZXJ0RXF1YWxzKGRh
dGEubGVuZ3RoLCBDb2RlZE91dHB1dFN0cmVhbS5jb21wdXRlVUludDMyU2l6ZU5vVGFnKChpbnQp
IHZhbHVlKSk7Ci0gICAgICB9Ci0KLSAgICAgIHsKLSAgICAgICAgQ29kZXIgY29kZXIgPSBvdXRw
dXRUeXBlLm5ld0NvZGVyKDEwKTsKLSAgICAgICAgY29kZXIuc3RyZWFtKCkud3JpdGVVSW50NjRO
b1RhZyh2YWx1ZSk7Ci0gICAgICAgIGNvZGVyLnN0cmVhbSgpLmZsdXNoKCk7Ci0gICAgICAgIGFz
c2VydEVxdWFsQnl0ZXMob3V0cHV0VHlwZSwgZGF0YSwgY29kZXIudG9CeXRlQXJyYXkoKSk7Ci0K
LSAgICAgICAgLy8gQWxzbyB0cnkgY29tcHV0aW5nIHNpemUuCi0gICAgICAgIGFzc2VydEVxdWFs
cyhkYXRhLmxlbmd0aCwgQ29kZWRPdXRwdXRTdHJlYW0uY29tcHV0ZVVJbnQ2NFNpemVOb1RhZyh2
YWx1ZSkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRyeSBkaWZmZXJlbnQgYmxvY2sgc2l6
ZXMuCi0gICAgZm9yIChpbnQgYmxvY2tTaXplID0gMTsgYmxvY2tTaXplIDw9IDE2OyBibG9ja1Np
emUgKj0gMikgewotICAgICAgLy8gT25seSB0ZXN0IDMyLWJpdCB3cml0ZSBpZiB0aGUgdmFsdWUg
Zml0cyBpbnRvIGFuIGludC4KLSAgICAgIGlmICh2YWx1ZSA9PSAoaW50KSB2YWx1ZSkgewotICAg
ICAgICBDb2RlciBjb2RlciA9IE91dHB1dFR5cGUuU1RSRUFNLm5ld0NvZGVyKGJsb2NrU2l6ZSk7
Ci0gICAgICAgIGNvZGVyLnN0cmVhbSgpLndyaXRlVUludDY0Tm9UYWcoKGludCkgdmFsdWUpOwot
ICAgICAgICBjb2Rlci5zdHJlYW0oKS5mbHVzaCgpOwotICAgICAgICBhc3NlcnRFcXVhbEJ5dGVz
KE91dHB1dFR5cGUuU1RSRUFNLCBkYXRhLCBjb2Rlci50b0J5dGVBcnJheSgpKTsKLQotICAgICAg
ICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gcmF3T3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0
cmVhbSgpOwotICAgICAgICBDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQgPSBDb2RlZE91dHB1dFN0
cmVhbS5uZXdJbnN0YW5jZShyYXdPdXRwdXQsIGJsb2NrU2l6ZSk7Ci0gICAgICAgIG91dHB1dC53
cml0ZVVJbnQzMk5vVGFnKChpbnQpIHZhbHVlKTsKLSAgICAgICAgb3V0cHV0LmZsdXNoKCk7Ci0g
ICAgICAgIGFzc2VydEVxdWFsQnl0ZXMoT3V0cHV0VHlwZS5TVFJFQU0sIGRhdGEsIHJhd091dHB1
dC50b0J5dGVBcnJheSgpKTsKLSAgICAgIH0KLQotICAgICAgewotICAgICAgICBDb2RlciBjb2Rl
ciA9IE91dHB1dFR5cGUuU1RSRUFNLm5ld0NvZGVyKGJsb2NrU2l6ZSk7Ci0gICAgICAgIGNvZGVy
LnN0cmVhbSgpLndyaXRlVUludDY0Tm9UYWcodmFsdWUpOwotICAgICAgICBjb2Rlci5zdHJlYW0o
KS5mbHVzaCgpOwotICAgICAgICBhc3NlcnRFcXVhbEJ5dGVzKE91dHB1dFR5cGUuU1RSRUFNLCBk
YXRhLCBjb2Rlci50b0J5dGVBcnJheSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2
YXRlIHN0YXRpYyB2b2lkIGFzc2VydFZhcmludFJvdW5kVHJpcChPdXRwdXRUeXBlIG91dHB1dFR5
cGUsIGxvbmcgdmFsdWUpIHRocm93cyBFeGNlcHRpb24gewotICAgIHsKLSAgICAgIENvZGVyIGNv
ZGVyID0gb3V0cHV0VHlwZS5uZXdDb2RlcigxMCk7Ci0gICAgICBjb2Rlci5zdHJlYW0oKS53cml0
ZVVJbnQ2NE5vVGFnKHZhbHVlKTsKLSAgICAgIGNvZGVyLnN0cmVhbSgpLmZsdXNoKCk7Ci0gICAg
ICBieXRlW10gYnl0ZXMgPSBjb2Rlci50b0J5dGVBcnJheSgpOwotICAgICAgYXNzZXJ0RXF1YWxz
KAotICAgICAgICAgIG91dHB1dFR5cGUubmFtZSgpLCBieXRlcy5sZW5ndGgsIENvZGVkT3V0cHV0
U3RyZWFtLmNvbXB1dGVVSW50NjRTaXplTm9UYWcodmFsdWUpKTsKLSAgICAgIENvZGVkSW5wdXRT
dHJlYW0gaW5wdXQgPSBDb2RlZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKG5ldyBCeXRlQXJyYXlJ
bnB1dFN0cmVhbShieXRlcykpOwotICAgICAgYXNzZXJ0RXF1YWxzKG91dHB1dFR5cGUubmFtZSgp
LCB2YWx1ZSwgaW5wdXQucmVhZFJhd1ZhcmludDY0KCkpOwotICAgIH0KLQotICAgIGlmICh2YWx1
ZSA9PSAoaW50KSB2YWx1ZSkgewotICAgICAgQ29kZXIgY29kZXIgPSBvdXRwdXRUeXBlLm5ld0Nv
ZGVyKDEwKTsKLSAgICAgIGNvZGVyLnN0cmVhbSgpLndyaXRlVUludDMyTm9UYWcoKGludCkgdmFs
dWUpOwotICAgICAgY29kZXIuc3RyZWFtKCkuZmx1c2goKTsKLSAgICAgIGJ5dGVbXSBieXRlcyA9
IGNvZGVyLnRvQnl0ZUFycmF5KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICAgb3V0
cHV0VHlwZS5uYW1lKCksIGJ5dGVzLmxlbmd0aCwgQ29kZWRPdXRwdXRTdHJlYW0uY29tcHV0ZVVJ
bnQzMlNpemVOb1RhZygoaW50KSB2YWx1ZSkpOwotICAgICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1
dCA9IENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2UobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFt
KGJ5dGVzKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMob3V0cHV0VHlwZS5uYW1lKCksIHZhbHVlLCBp
bnB1dC5yZWFkUmF3VmFyaW50MzIoKSk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEv
Y29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvRGVwcmVjYXRlZEZpZWxkVGVz
dC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0RlcHJl
Y2F0ZWRGaWVsZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U4NWFl
MmVkYzUwNTU2N2Y0NmViZDExNmEzZWQzNGE4Nzg2MTAzZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvRGVwcmVjYXRlZEZpZWxkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
ODEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2Ug
Y29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0
UHJvdG8uVGVzdERlcHJlY2F0ZWRGaWVsZHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVz
dENhc2U7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Bbm5vdGF0ZWRFbGVtZW50OwotaW1w
b3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotLyoqCi0gKiBUZXN0IGZpZWxkIGRlcHJl
Y2F0aW9uCi0gKiAKLSAqIEBhdXRob3IgYmlyZG9AZ29vZ2xlLmNvbSAoUm9iZXJ0byBTY2FyYW11
enppKQotICovCi1wdWJsaWMgY2xhc3MgRGVwcmVjYXRlZEZpZWxkVGVzdCBleHRlbmRzIFRlc3RD
YXNlIHsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBkZXByZWNhdGVkR2V0dGVyTmFtZXMgPSB7Ci0gICAg
ICAiaGFzRGVwcmVjYXRlZEludDMyIiwKLSAgICAgICJnZXREZXByZWNhdGVkSW50MzIifTsKLSAg
Ci0gIHByaXZhdGUgU3RyaW5nW10gZGVwcmVjYXRlZEJ1aWxkZXJHZXR0ZXJOYW1lcyA9IHsKLSAg
ICAgICJoYXNEZXByZWNhdGVkSW50MzIiLAotICAgICAgImdldERlcHJlY2F0ZWRJbnQzMiIsCi0g
ICAgICAiY2xlYXJEZXByZWNhdGVkSW50MzIifTsKLSAgCi0gIHByaXZhdGUgU3RyaW5nW10gZGVw
cmVjYXRlZEJ1aWxkZXJTZXR0ZXJOYW1lcyA9IHsKLSAgICAgICJzZXREZXByZWNhdGVkSW50MzIi
fTsgCi0gIAotICBwdWJsaWMgdm9pZCB0ZXN0RGVwcmVjYXRlZEZpZWxkKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgQ2xhc3M8Pz4gZGVwcmVjYXRlZEZpZWxkcyA9IFRlc3REZXByZWNhdGVkRmll
bGRzLmNsYXNzOwotICAgIENsYXNzPD8+IGRlcHJlY2F0ZWRGaWVsZHNCdWlsZGVyID0gVGVzdERl
cHJlY2F0ZWRGaWVsZHMuQnVpbGRlci5jbGFzczsKLSAgICBmb3IgKFN0cmluZyBuYW1lIDogZGVw
cmVjYXRlZEdldHRlck5hbWVzKSB7Ci0gICAgICBNZXRob2QgbWV0aG9kID0gZGVwcmVjYXRlZEZp
ZWxkcy5nZXRNZXRob2QobmFtZSk7Ci0gICAgICBhc3NlcnRUcnVlKCJNZXRob2QgIiArIG5hbWUg
KyAiIHNob3VsZCBiZSBkZXByZWNhdGVkIiwKLSAgICAgICAgICBpc0RlcHJlY2F0ZWQobWV0aG9k
KSk7Ci0gICAgfQotICAgIGZvciAoU3RyaW5nIG5hbWUgOiBkZXByZWNhdGVkQnVpbGRlckdldHRl
ck5hbWVzKSB7Ci0gICAgICBNZXRob2QgbWV0aG9kID0gZGVwcmVjYXRlZEZpZWxkc0J1aWxkZXIu
Z2V0TWV0aG9kKG5hbWUpOwotICAgICAgYXNzZXJ0VHJ1ZSgiTWV0aG9kICIgKyBuYW1lICsgIiBz
aG91bGQgYmUgZGVwcmVjYXRlZCIsCi0gICAgICAgICAgaXNEZXByZWNhdGVkKG1ldGhvZCkpOwot
ICAgIH0KLSAgICBmb3IgKFN0cmluZyBuYW1lIDogZGVwcmVjYXRlZEJ1aWxkZXJTZXR0ZXJOYW1l
cykgewotICAgICAgTWV0aG9kIG1ldGhvZCA9IGRlcHJlY2F0ZWRGaWVsZHNCdWlsZGVyLmdldE1l
dGhvZChuYW1lLCBpbnQuY2xhc3MpOwotICAgICAgYXNzZXJ0VHJ1ZSgiTWV0aG9kICIgKyBuYW1l
ICsgIiBzaG91bGQgYmUgZGVwcmVjYXRlZCIsCi0gICAgICAgICAgaXNEZXByZWNhdGVkKG1ldGhv
ZCkpOwotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGlzRGVwcmVjYXRlZChBbm5v
dGF0ZWRFbGVtZW50IGFubm90YXRlZCkgewotICAgIHJldHVybiBhbm5vdGF0ZWQuaXNBbm5vdGF0
aW9uUHJlc2VudChEZXByZWNhdGVkLmNsYXNzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Rlc2NyaXB0b3JzVGVzdC5qYXZh
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Rlc2NyaXB0b3Jz
VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjg5YjM4OWMyNmViYWYw
Yjc4NThjOGYzYTc2YmMzZWUyYmE5Y2YzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9EZXNjcmlwdG9yc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwMCArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnBy
b3RvYnVmOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9zLkRl
c2NyaXB0b3JQcm90bzsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90
b3MuRW51bURlc2NyaXB0b3JQcm90bzsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2Ny
aXB0b3JQcm90b3MuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOwotaW1wb3J0IGNvbS5nb29nbGUu
cHJvdG9idWYuRGVzY3JpcHRvclByb3Rvcy5GaWVsZERlc2NyaXB0b3JQcm90bzsKLWltcG9ydCBj
b20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b3MuRmlsZURlc2NyaXB0b3JQcm90bzsK
LWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkRlc2NyaXB0b3I7Ci1pbXBv
cnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5EZXNjcmlwdG9yVmFsaWRhdGlvbkV4
Y2VwdGlvbjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkVudW1EZXNj
cmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRW51bVZhbHVl
RGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpZWxk
RGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVE
ZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuTWV0aG9k
RGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLk9uZW9m
RGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLlNlcnZp
Y2VEZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYudGVzdC5Vbml0dGVzdElt
cG9ydDsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLnRlc3QuVW5pdHRlc3RJbXBvcnQuSW1w
b3J0RW51bTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLnRlc3QuVW5pdHRlc3RJbXBvcnQu
SW1wb3J0RW51bUZvck1hcDsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5UZXN0Q3VzdG9tT3B0
aW9uczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdEN1c3RvbU9wdGlvbnM7Ci1p
bXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90bzsKLWltcG9ydCBwcm90b2J1Zl91
bml0dGVzdC5Vbml0dGVzdFByb3RvLkZvcmVpZ25FbnVtOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8uRm9yZWlnbk1lc3NhZ2U7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRl
c3QuVW5pdHRlc3RQcm90by5UZXN0QWxsRXh0ZW5zaW9uczsKLWltcG9ydCBwcm90b2J1Zl91bml0
dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVz
dC5Vbml0dGVzdFByb3RvLlRlc3RFeHRyZW1lRGVmYXVsdFZhbHVlczsKLWltcG9ydCBwcm90b2J1
Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RNdWx0aXBsZUV4dGVuc2lvblJhbmdlczsKLWlt
cG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RSZXF1aXJlZDsKLWltcG9y
dCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RSZXNlcnZlZEZpZWxkczsKLWlt
cG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RTZXJ2aWNlOwotaW1wb3J0
IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1p
bXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0v
KioKLSAqIFVuaXQgdGVzdCBmb3Ige0BsaW5rIERlc2NyaXB0b3JzfS4KLSAqCi0gKiBAYXV0aG9y
IGtlbnRvbkBnb29nbGUuY29tIEtlbnRvbiBWYXJkYQotICovCi1wdWJsaWMgY2xhc3MgRGVzY3Jp
cHRvcnNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gIC8vIFJlZ3Jlc3Npb24gdGVzdCBmb3Ig
YnVnIHdoZXJlIHJlZmVyZW5jaW5nIGEgRmllbGREZXNjcmlwdG9yLlR5cGUgdmFsdWUKLSAgLy8g
YmVmb3JlIGEgRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZSB2YWx1ZSB3b3VsZCB5aWVsZCBhCi0g
IC8vIEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvci4KLSAgQFN1cHByZXNzV2FybmluZ3MoInVu
dXNlZCIpCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdCBTVEFUSUNfSU5JVF9URVNUID0g
RmllbGREZXNjcmlwdG9yLlR5cGUuQk9PTDsKLQotICBwdWJsaWMgdm9pZCB0ZXN0RmllbGRUeXBl
RW51bU1hcHBpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRFcXVhbHMoRmllbGRE
ZXNjcmlwdG9yLlR5cGUudmFsdWVzKCkubGVuZ3RoLAotICAgICAgICBGaWVsZERlc2NyaXB0b3JQ
cm90by5UeXBlLnZhbHVlcygpLmxlbmd0aCk7Ci0gICAgZm9yIChGaWVsZERlc2NyaXB0b3IuVHlw
ZSB0eXBlIDogRmllbGREZXNjcmlwdG9yLlR5cGUudmFsdWVzKCkpIHsKLSAgICAgIEZpZWxkRGVz
Y3JpcHRvclByb3RvLlR5cGUgcHJvdG9UeXBlID0gdHlwZS50b1Byb3RvKCk7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoIlRZUEVfIiArIHR5cGUubmFtZSgpLCBwcm90b1R5cGUubmFtZSgpKTsKLSAgICAg
IGFzc2VydEVxdWFscyh0eXBlLCBGaWVsZERlc2NyaXB0b3IuVHlwZS52YWx1ZU9mKHByb3RvVHlw
ZSkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RGaWxlRGVzY3JpcHRvcigpIHRo
cm93cyBFeGNlcHRpb24gewotICAgIEZpbGVEZXNjcmlwdG9yIGZpbGUgPSBVbml0dGVzdFByb3Rv
LmdldERlc2NyaXB0b3IoKTsKLQotICAgIGFzc2VydEVxdWFscygiZ29vZ2xlL3Byb3RvYnVmL3Vu
aXR0ZXN0LnByb3RvIiwgZmlsZS5nZXROYW1lKCkpOwotICAgIGFzc2VydEVxdWFscygicHJvdG9i
dWZfdW5pdHRlc3QiLCBmaWxlLmdldFBhY2thZ2UoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoIlVu
aXR0ZXN0UHJvdG8iLCBmaWxlLmdldE9wdGlvbnMoKS5nZXRKYXZhT3V0ZXJDbGFzc25hbWUoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8iLAotICAg
ICAgICAgICAgICAgICBmaWxlLnRvUHJvdG8oKS5nZXROYW1lKCkpOwotCi0gICAgYXNzZXJ0RXF1
YWxzKEFycmF5cy5hc0xpc3QoVW5pdHRlc3RJbXBvcnQuZ2V0RGVzY3JpcHRvcigpKSwKLSAgICAg
ICAgICAgICAgICAgZmlsZS5nZXREZXBlbmRlbmNpZXMoKSk7Ci0KLSAgICBEZXNjcmlwdG9yIG1l
c3NhZ2VUeXBlID0gVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKTsKLSAgICBhc3NlcnRFcXVh
bHMobWVzc2FnZVR5cGUsIGZpbGUuZ2V0TWVzc2FnZVR5cGVzKCkuZ2V0KDApKTsKLSAgICBhc3Nl
cnRFcXVhbHMobWVzc2FnZVR5cGUsIGZpbGUuZmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJUZXN0QWxs
VHlwZXMiKSk7Ci0gICAgYXNzZXJ0TnVsbChmaWxlLmZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgiTm9T
dWNoVHlwZSIpKTsKLSAgICBhc3NlcnROdWxsKGZpbGUuZmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJw
cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMiKSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmaWxlLmdldE1lc3NhZ2VUeXBlcygpLnNpemUoKTsgaSsrKSB7Ci0gICAgICBhc3NlcnRFcXVh
bHMoaSwgZmlsZS5nZXRNZXNzYWdlVHlwZXMoKS5nZXQoaSkuZ2V0SW5kZXgoKSk7Ci0gICAgfQot
Ci0gICAgRW51bURlc2NyaXB0b3IgZW51bVR5cGUgPSBGb3JlaWduRW51bS5nZXREZXNjcmlwdG9y
KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVudW1UeXBlLCBmaWxlLmdldEVudW1UeXBlcygpLmdldCgw
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVudW1UeXBlLCBmaWxlLmZpbmRFbnVtVHlwZUJ5TmFtZSgi
Rm9yZWlnbkVudW0iKSk7Ci0gICAgYXNzZXJ0TnVsbChmaWxlLmZpbmRFbnVtVHlwZUJ5TmFtZSgi
Tm9TdWNoVHlwZSIpKTsKLSAgICBhc3NlcnROdWxsKGZpbGUuZmluZEVudW1UeXBlQnlOYW1lKCJw
cm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bSIpKTsKLSAgICBhc3NlcnRFcXVhbHMoQXJyYXlz
LmFzTGlzdChJbXBvcnRFbnVtLmdldERlc2NyaXB0b3IoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbXBvcnRFbnVtRm9yTWFwLmdldERlc2NyaXB0b3IoKSksCi0gICAgICAgICAg
ICAgICAgIFVuaXR0ZXN0SW1wb3J0LmdldERlc2NyaXB0b3IoKS5nZXRFbnVtVHlwZXMoKSk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLmdldEVudW1UeXBlcygpLnNpemUoKTsgaSsrKSB7
Ci0gICAgICBhc3NlcnRFcXVhbHMoaSwgZmlsZS5nZXRFbnVtVHlwZXMoKS5nZXQoaSkuZ2V0SW5k
ZXgoKSk7Ci0gICAgfQotCi0gICAgU2VydmljZURlc2NyaXB0b3Igc2VydmljZSA9IFRlc3RTZXJ2
aWNlLmdldERlc2NyaXB0b3IoKTsKLSAgICBhc3NlcnRFcXVhbHMoc2VydmljZSwgZmlsZS5nZXRT
ZXJ2aWNlcygpLmdldCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNlcnZpY2UsIGZpbGUuZmluZFNl
cnZpY2VCeU5hbWUoIlRlc3RTZXJ2aWNlIikpOwotICAgIGFzc2VydE51bGwoZmlsZS5maW5kU2Vy
dmljZUJ5TmFtZSgiTm9TdWNoVHlwZSIpKTsKLSAgICBhc3NlcnROdWxsKGZpbGUuZmluZFNlcnZp
Y2VCeU5hbWUoInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RTZXJ2aWNlIikpOwotICAgIGFzc2VydEVx
dWFscyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwKLSAgICAgICAgICAgICAgICAgVW5pdHRlc3RJ
bXBvcnQuZ2V0RGVzY3JpcHRvcigpLmdldFNlcnZpY2VzKCkpOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZmlsZS5nZXRTZXJ2aWNlcygpLnNpemUoKTsgaSsrKSB7Ci0gICAgICBhc3NlcnRFcXVh
bHMoaSwgZmlsZS5nZXRTZXJ2aWNlcygpLmdldChpKS5nZXRJbmRleCgpKTsKLSAgICB9Ci0KLSAg
ICBGaWVsZERlc2NyaXB0b3IgZXh0ZW5zaW9uID0KLSAgICAgIFVuaXR0ZXN0UHJvdG8ub3B0aW9u
YWxJbnQzMkV4dGVuc2lvbi5nZXREZXNjcmlwdG9yKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4dGVu
c2lvbiwgZmlsZS5nZXRFeHRlbnNpb25zKCkuZ2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoZXh0
ZW5zaW9uLAotICAgICAgICAgICAgICAgICBmaWxlLmZpbmRFeHRlbnNpb25CeU5hbWUoIm9wdGlv
bmFsX2ludDMyX2V4dGVuc2lvbiIpKTsKLSAgICBhc3NlcnROdWxsKGZpbGUuZmluZEV4dGVuc2lv
bkJ5TmFtZSgibm9fc3VjaF9leHQiKSk7Ci0gICAgYXNzZXJ0TnVsbChmaWxlLmZpbmRFeHRlbnNp
b25CeU5hbWUoCi0gICAgICAicHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfaW50MzJfZXh0ZW5z
aW9uIikpOwotICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwKLSAgICAg
ICAgICAgICAgICAgVW5pdHRlc3RJbXBvcnQuZ2V0RGVzY3JpcHRvcigpLmdldEV4dGVuc2lvbnMo
KSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLmdldEV4dGVuc2lvbnMoKS5zaXplKCk7
IGkrKykgewotICAgICAgYXNzZXJ0RXF1YWxzKGksIGZpbGUuZ2V0RXh0ZW5zaW9ucygpLmdldChp
KS5nZXRJbmRleCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RGVzY3JpcHRv
cigpIHRocm93cyBFeGNlcHRpb24gewotICAgIERlc2NyaXB0b3IgbWVzc2FnZVR5cGUgPSBUZXN0
QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpOwotICAgIERlc2NyaXB0b3IgbmVzdGVkVHlwZSA9IFRl
c3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLmdldERlc2NyaXB0b3IoKTsKLQotICAgIGFzc2VydEVx
dWFscygiVGVzdEFsbFR5cGVzIiwgbWVzc2FnZVR5cGUuZ2V0TmFtZSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcyIsIG1lc3NhZ2VUeXBlLmdldEZ1
bGxOYW1lKCkpOwotICAgIGFzc2VydEVxdWFscyhVbml0dGVzdFByb3RvLmdldERlc2NyaXB0b3Io
KSwgbWVzc2FnZVR5cGUuZ2V0RmlsZSgpKTsKLSAgICBhc3NlcnROdWxsKG1lc3NhZ2VUeXBlLmdl
dENvbnRhaW5pbmdUeXBlKCkpOwotICAgIGFzc2VydEVxdWFscyhEZXNjcmlwdG9yUHJvdG9zLk1l
c3NhZ2VPcHRpb25zLmdldERlZmF1bHRJbnN0YW5jZSgpLAotICAgICAgICAgICAgICAgICBtZXNz
YWdlVHlwZS5nZXRPcHRpb25zKCkpOwotICAgIGFzc2VydEVxdWFscygiVGVzdEFsbFR5cGVzIiwg
bWVzc2FnZVR5cGUudG9Qcm90bygpLmdldE5hbWUoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoIk5l
c3RlZE1lc3NhZ2UiLCBuZXN0ZWRUeXBlLmdldE5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJw
cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZSIsCi0gICAgICAgICAg
ICAgICAgIG5lc3RlZFR5cGUuZ2V0RnVsbE5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0
ZXN0UHJvdG8uZ2V0RGVzY3JpcHRvcigpLCBuZXN0ZWRUeXBlLmdldEZpbGUoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKG1lc3NhZ2VUeXBlLCBuZXN0ZWRUeXBlLmdldENvbnRhaW5pbmdUeXBlKCkpOwot
Ci0gICAgRmllbGREZXNjcmlwdG9yIGZpZWxkID0gbWVzc2FnZVR5cGUuZ2V0RmllbGRzKCkuZ2V0
KDApOwotICAgIGFzc2VydEVxdWFscygib3B0aW9uYWxfaW50MzIiLCBmaWVsZC5nZXROYW1lKCkp
OwotICAgIGFzc2VydEVxdWFscyhmaWVsZCwgbWVzc2FnZVR5cGUuZmluZEZpZWxkQnlOYW1lKCJv
cHRpb25hbF9pbnQzMiIpKTsKLSAgICBhc3NlcnROdWxsKG1lc3NhZ2VUeXBlLmZpbmRGaWVsZEJ5
TmFtZSgibm9fc3VjaF9maWVsZCIpKTsKLSAgICBhc3NlcnRFcXVhbHMoZmllbGQsIG1lc3NhZ2VU
eXBlLmZpbmRGaWVsZEJ5TnVtYmVyKDEpKTsKLSAgICBhc3NlcnROdWxsKG1lc3NhZ2VUeXBlLmZp
bmRGaWVsZEJ5TnVtYmVyKDU3MTI4MykpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2Fn
ZVR5cGUuZ2V0RmllbGRzKCkuc2l6ZSgpOyBpKyspIHsKLSAgICAgIGFzc2VydEVxdWFscyhpLCBt
ZXNzYWdlVHlwZS5nZXRGaWVsZHMoKS5nZXQoaSkuZ2V0SW5kZXgoKSk7Ci0gICAgfQotCi0gICAg
YXNzZXJ0RXF1YWxzKG5lc3RlZFR5cGUsIG1lc3NhZ2VUeXBlLmdldE5lc3RlZFR5cGVzKCkuZ2V0
KDApKTsKLSAgICBhc3NlcnRFcXVhbHMobmVzdGVkVHlwZSwgbWVzc2FnZVR5cGUuZmluZE5lc3Rl
ZFR5cGVCeU5hbWUoIk5lc3RlZE1lc3NhZ2UiKSk7Ci0gICAgYXNzZXJ0TnVsbChtZXNzYWdlVHlw
ZS5maW5kTmVzdGVkVHlwZUJ5TmFtZSgiTm9TdWNoVHlwZSIpKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1lc3NhZ2VUeXBlLmdldE5lc3RlZFR5cGVzKCkuc2l6ZSgpOyBpKyspIHsKLSAgICAg
IGFzc2VydEVxdWFscyhpLCBtZXNzYWdlVHlwZS5nZXROZXN0ZWRUeXBlcygpLmdldChpKS5nZXRJ
bmRleCgpKTsKLSAgICB9Ci0KLSAgICBFbnVtRGVzY3JpcHRvciBlbnVtVHlwZSA9IFRlc3RBbGxU
eXBlcy5OZXN0ZWRFbnVtLmdldERlc2NyaXB0b3IoKTsKLSAgICBhc3NlcnRFcXVhbHMoZW51bVR5
cGUsIG1lc3NhZ2VUeXBlLmdldEVudW1UeXBlcygpLmdldCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KGVudW1UeXBlLCBtZXNzYWdlVHlwZS5maW5kRW51bVR5cGVCeU5hbWUoIk5lc3RlZEVudW0iKSk7
Ci0gICAgYXNzZXJ0TnVsbChtZXNzYWdlVHlwZS5maW5kRW51bVR5cGVCeU5hbWUoIk5vU3VjaFR5
cGUiKSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlVHlwZS5nZXRFbnVtVHlwZXMo
KS5zaXplKCk7IGkrKykgewotICAgICAgYXNzZXJ0RXF1YWxzKGksIG1lc3NhZ2VUeXBlLmdldEVu
dW1UeXBlcygpLmdldChpKS5nZXRJbmRleCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0RmllbGREZXNjcmlwdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgRGVzY3JpcHRv
ciBtZXNzYWdlVHlwZSA9IFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCk7Ci0gICAgRmllbGRE
ZXNjcmlwdG9yIHByaW1pdGl2ZUZpZWxkID0KLSAgICAgIG1lc3NhZ2VUeXBlLmZpbmRGaWVsZEJ5
TmFtZSgib3B0aW9uYWxfaW50MzIiKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgZW51bUZpZWxkID0K
LSAgICAgIG1lc3NhZ2VUeXBlLmZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfbmVzdGVkX2VudW0i
KTsKLSAgICBGaWVsZERlc2NyaXB0b3IgbWVzc2FnZUZpZWxkID0KLSAgICAgIG1lc3NhZ2VUeXBl
LmZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlIik7Ci0gICAgRmllbGRE
ZXNjcmlwdG9yIGNvcmRGaWVsZCA9Ci0gICAgICBtZXNzYWdlVHlwZS5maW5kRmllbGRCeU5hbWUo
Im9wdGlvbmFsX2NvcmQiKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgZXh0ZW5zaW9uID0KLSAgICAg
IFVuaXR0ZXN0UHJvdG8ub3B0aW9uYWxJbnQzMkV4dGVuc2lvbi5nZXREZXNjcmlwdG9yKCk7Ci0g
ICAgRmllbGREZXNjcmlwdG9yIG5lc3RlZEV4dGVuc2lvbiA9IFRlc3RSZXF1aXJlZC5zaW5nbGUu
Z2V0RGVzY3JpcHRvcigpOwotCi0gICAgYXNzZXJ0RXF1YWxzKCJvcHRpb25hbF9pbnQzMiIsIHBy
aW1pdGl2ZUZpZWxkLmdldE5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJwcm90b2J1Zl91bml0
dGVzdC5UZXN0QWxsVHlwZXMub3B0aW9uYWxfaW50MzIiLAotICAgICAgICAgICAgICAgICBwcmlt
aXRpdmVGaWVsZC5nZXRGdWxsTmFtZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcHJpbWl0aXZl
RmllbGQuZ2V0TnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlVHlwZSwgcHJpbWl0
aXZlRmllbGQuZ2V0Q29udGFpbmluZ1R5cGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0
UHJvdG8uZ2V0RGVzY3JpcHRvcigpLCBwcmltaXRpdmVGaWVsZC5nZXRGaWxlKCkpOwotICAgIGFz
c2VydEVxdWFscyhGaWVsZERlc2NyaXB0b3IuVHlwZS5JTlQzMiwgcHJpbWl0aXZlRmllbGQuZ2V0
VHlwZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLklOVCwg
cHJpbWl0aXZlRmllbGQuZ2V0SmF2YVR5cGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKERlc2NyaXB0
b3JQcm90b3MuRmllbGRPcHRpb25zLmdldERlZmF1bHRJbnN0YW5jZSgpLAotICAgICAgICAgICAg
ICAgICBwcmltaXRpdmVGaWVsZC5nZXRPcHRpb25zKCkpOwotICAgIGFzc2VydEZhbHNlKHByaW1p
dGl2ZUZpZWxkLmlzRXh0ZW5zaW9uKCkpOwotICAgIGFzc2VydEVxdWFscygib3B0aW9uYWxfaW50
MzIiLCBwcmltaXRpdmVGaWVsZC50b1Byb3RvKCkuZ2V0TmFtZSgpKTsKLQotICAgIGFzc2VydEVx
dWFscygib3B0aW9uYWxfbmVzdGVkX2VudW0iLCBlbnVtRmllbGQuZ2V0TmFtZSgpKTsKLSAgICBh
c3NlcnRFcXVhbHMoRmllbGREZXNjcmlwdG9yLlR5cGUuRU5VTSwgZW51bUZpZWxkLmdldFR5cGUo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEZpZWxkRGVzY3JpcHRvci5KYXZhVHlwZS5FTlVNLCBlbnVt
RmllbGQuZ2V0SmF2YVR5cGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlcy5OZXN0
ZWRFbnVtLmdldERlc2NyaXB0b3IoKSwKLSAgICAgICAgICAgICAgICAgZW51bUZpZWxkLmdldEVu
dW1UeXBlKCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKCJvcHRpb25hbF9mb3JlaWduX21lc3NhZ2Ui
LCBtZXNzYWdlRmllbGQuZ2V0TmFtZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoRmllbGREZXNjcmlw
dG9yLlR5cGUuTUVTU0FHRSwgbWVzc2FnZUZpZWxkLmdldFR5cGUoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKEZpZWxkRGVzY3JpcHRvci5KYXZhVHlwZS5NRVNTQUdFLCBtZXNzYWdlRmllbGQuZ2V0SmF2
YVR5cGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEZvcmVpZ25NZXNzYWdlLmdldERlc2NyaXB0b3Io
KSwgbWVzc2FnZUZpZWxkLmdldE1lc3NhZ2VUeXBlKCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKCJv
cHRpb25hbF9jb3JkIiwgY29yZEZpZWxkLmdldE5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEZp
ZWxkRGVzY3JpcHRvci5UeXBlLlNUUklORywgY29yZEZpZWxkLmdldFR5cGUoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKEZpZWxkRGVzY3JpcHRvci5KYXZhVHlwZS5TVFJJTkcsIGNvcmRGaWVsZC5nZXRK
YXZhVHlwZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoRGVzY3JpcHRvclByb3Rvcy5GaWVsZE9wdGlv
bnMuQ1R5cGUuQ09SRCwKLSAgICAgICAgICAgICAgICAgY29yZEZpZWxkLmdldE9wdGlvbnMoKS5n
ZXRDdHlwZSgpKTsKLQotICAgIGFzc2VydEVxdWFscygib3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9u
IiwgZXh0ZW5zaW9uLmdldE5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJwcm90b2J1Zl91bml0
dGVzdC5vcHRpb25hbF9pbnQzMl9leHRlbnNpb24iLAotICAgICAgICAgICAgICAgICBleHRlbnNp
b24uZ2V0RnVsbE5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGV4dGVuc2lvbi5nZXROdW1i
ZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxFeHRlbnNpb25zLmdldERlc2NyaXB0b3Io
KSwKLSAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLmdldENvbnRhaW5pbmdUeXBlKCkpOwotICAg
IGFzc2VydEVxdWFscyhVbml0dGVzdFByb3RvLmdldERlc2NyaXB0b3IoKSwgZXh0ZW5zaW9uLmdl
dEZpbGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEZpZWxkRGVzY3JpcHRvci5UeXBlLklOVDMyLCBl
eHRlbnNpb24uZ2V0VHlwZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoRmllbGREZXNjcmlwdG9yLkph
dmFUeXBlLklOVCwgZXh0ZW5zaW9uLmdldEphdmFUeXBlKCkpOwotICAgIGFzc2VydEVxdWFscyhE
ZXNjcmlwdG9yUHJvdG9zLkZpZWxkT3B0aW9ucy5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAg
ICAgICAgICAgICAgZXh0ZW5zaW9uLmdldE9wdGlvbnMoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShleHRl
bnNpb24uaXNFeHRlbnNpb24oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG51bGwsIGV4dGVuc2lvbi5n
ZXRFeHRlbnNpb25TY29wZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoIm9wdGlvbmFsX2ludDMyX2V4
dGVuc2lvbiIsIGV4dGVuc2lvbi50b1Byb3RvKCkuZ2V0TmFtZSgpKTsKLQotICAgIGFzc2VydEVx
dWFscygic2luZ2xlIiwgbmVzdGVkRXh0ZW5zaW9uLmdldE5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKCJwcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWQuc2luZ2xlIiwKLSAgICAgICAgICAg
ICAgICAgbmVzdGVkRXh0ZW5zaW9uLmdldEZ1bGxOYW1lKCkpOwotICAgIGFzc2VydEVxdWFscyhU
ZXN0UmVxdWlyZWQuZ2V0RGVzY3JpcHRvcigpLAotICAgICAgICAgICAgICAgICBuZXN0ZWRFeHRl
bnNpb24uZ2V0RXh0ZW5zaW9uU2NvcGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Rmll
bGREZXNjcmlwdG9yTGFiZWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGaWVsZERlc2NyaXB0
b3IgcmVxdWlyZWRGaWVsZCA9Ci0gICAgICBUZXN0UmVxdWlyZWQuZ2V0RGVzY3JpcHRvcigpLmZp
bmRGaWVsZEJ5TmFtZSgiYSIpOwotICAgIEZpZWxkRGVzY3JpcHRvciBvcHRpb25hbEZpZWxkID0K
LSAgICAgIFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCkuZmluZEZpZWxkQnlOYW1lKCJvcHRp
b25hbF9pbnQzMiIpOwotICAgIEZpZWxkRGVzY3JpcHRvciByZXBlYXRlZEZpZWxkID0KLSAgICAg
IFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCkuZmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9p
bnQzMiIpOwotCi0gICAgYXNzZXJ0VHJ1ZShyZXF1aXJlZEZpZWxkLmlzUmVxdWlyZWQoKSk7Ci0g
ICAgYXNzZXJ0RmFsc2UocmVxdWlyZWRGaWVsZC5pc1JlcGVhdGVkKCkpOwotICAgIGFzc2VydEZh
bHNlKG9wdGlvbmFsRmllbGQuaXNSZXF1aXJlZCgpKTsKLSAgICBhc3NlcnRGYWxzZShvcHRpb25h
bEZpZWxkLmlzUmVwZWF0ZWQoKSk7Ci0gICAgYXNzZXJ0RmFsc2UocmVwZWF0ZWRGaWVsZC5pc1Jl
cXVpcmVkKCkpOwotICAgIGFzc2VydFRydWUocmVwZWF0ZWRGaWVsZC5pc1JlcGVhdGVkKCkpOwot
ICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0RmllbGREZXNjcmlwdG9ySnNvbk5hbWUoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBGaWVsZERlc2NyaXB0b3IgcmVxdWlyZWRGaWVsZCA9IFRlc3RS
ZXF1aXJlZC5nZXREZXNjcmlwdG9yKCkuZmluZEZpZWxkQnlOYW1lKCJhIik7Ci0gICAgRmllbGRE
ZXNjcmlwdG9yIG9wdGlvbmFsRmllbGQgPSBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpLmZp
bmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfaW50MzIiKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgcmVw
ZWF0ZWRGaWVsZCA9IFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCkuZmluZEZpZWxkQnlOYW1l
KCJyZXBlYXRlZF9pbnQzMiIpOwotICAgIGFzc2VydEVxdWFscygiYSIsIHJlcXVpcmVkRmllbGQu
Z2V0SnNvbk5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJvcHRpb25hbEludDMyIiwgb3B0aW9u
YWxGaWVsZC5nZXRKc29uTmFtZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoInJlcGVhdGVkSW50MzIi
LCByZXBlYXRlZEZpZWxkLmdldEpzb25OYW1lKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVz
dEZpZWxkRGVzY3JpcHRvckRlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBEZXNjcmlw
dG9yIGQgPSBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpOwotICAgIGFzc2VydEZhbHNlKGQu
ZmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9pbnQzMiIpLmhhc0RlZmF1bHRWYWx1ZSgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMCwgZC5maW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX2ludDMyIikuZ2V0
RGVmYXVsdFZhbHVlKCkpOwotICAgIGFzc2VydFRydWUoZC5maW5kRmllbGRCeU5hbWUoImRlZmF1
bHRfaW50MzIiKS5oYXNEZWZhdWx0VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQxLCBkLmZp
bmRGaWVsZEJ5TmFtZSgiZGVmYXVsdF9pbnQzMiIpLmdldERlZmF1bHRWYWx1ZSgpKTsKLQotICAg
IGQgPSBUZXN0RXh0cmVtZURlZmF1bHRWYWx1ZXMuZ2V0RGVzY3JpcHRvcigpOwotICAgIGFzc2Vy
dEVxdWFscygKLSAgICAgIEJ5dGVTdHJpbmcuY29weUZyb20oCi0gICAgICAgICJcMFwwMDFcMDA3
XGJcZlxuXHJcdFwwMTNcXFwnXCJcdTAwZmUiLmdldEJ5dGVzKEludGVybmFsLklTT184ODU5XzEp
KSwKLSAgICAgIGQuZmluZEZpZWxkQnlOYW1lKCJlc2NhcGVkX2J5dGVzIikuZ2V0RGVmYXVsdFZh
bHVlKCkpOwotICAgIGFzc2VydEVxdWFscygtMSwgZC5maW5kRmllbGRCeU5hbWUoImxhcmdlX3Vp
bnQzMiIpLmdldERlZmF1bHRWYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoLTFMLCBkLmZpbmRG
aWVsZEJ5TmFtZSgibGFyZ2VfdWludDY0IikuZ2V0RGVmYXVsdFZhbHVlKCkpOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdEVudW1EZXNjcmlwdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAg
RW51bURlc2NyaXB0b3IgZW51bVR5cGUgPSBGb3JlaWduRW51bS5nZXREZXNjcmlwdG9yKCk7Ci0g
ICAgRW51bURlc2NyaXB0b3IgbmVzdGVkVHlwZSA9IFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLmdl
dERlc2NyaXB0b3IoKTsKLQotICAgIGFzc2VydEVxdWFscygiRm9yZWlnbkVudW0iLCBlbnVtVHlw
ZS5nZXROYW1lKCkpOwotICAgIGFzc2VydEVxdWFscygicHJvdG9idWZfdW5pdHRlc3QuRm9yZWln
bkVudW0iLCBlbnVtVHlwZS5nZXRGdWxsTmFtZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoVW5pdHRl
c3RQcm90by5nZXREZXNjcmlwdG9yKCksIGVudW1UeXBlLmdldEZpbGUoKSk7Ci0gICAgYXNzZXJ0
TnVsbChlbnVtVHlwZS5nZXRDb250YWluaW5nVHlwZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoRGVz
Y3JpcHRvclByb3Rvcy5FbnVtT3B0aW9ucy5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAg
ICAgICAgICAgZW51bVR5cGUuZ2V0T3B0aW9ucygpKTsKLQotICAgIGFzc2VydEVxdWFscygiTmVz
dGVkRW51bSIsIG5lc3RlZFR5cGUuZ2V0TmFtZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoInByb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtIiwKLSAgICAgICAgICAgICAgICAg
bmVzdGVkVHlwZS5nZXRGdWxsTmFtZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoVW5pdHRlc3RQcm90
by5nZXREZXNjcmlwdG9yKCksIG5lc3RlZFR5cGUuZ2V0RmlsZSgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKSwgbmVzdGVkVHlwZS5nZXRDb250YWluaW5n
VHlwZSgpKTsKLQotICAgIEVudW1WYWx1ZURlc2NyaXB0b3IgdmFsdWUgPSBGb3JlaWduRW51bS5G
T1JFSUdOX0ZPTy5nZXRWYWx1ZURlc2NyaXB0b3IoKTsKLSAgICBhc3NlcnRFcXVhbHModmFsdWUs
IGVudW1UeXBlLmdldFZhbHVlcygpLmdldCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJGT1JFSUdO
X0ZPTyIsIHZhbHVlLmdldE5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJGT1JFSUdOX0ZPTyIs
IHZhbHVlLnRvU3RyaW5nKCkpOwotICAgIGFzc2VydEVxdWFscyg0LCB2YWx1ZS5nZXROdW1iZXIo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHZhbHVlLCBlbnVtVHlwZS5maW5kVmFsdWVCeU5hbWUoIkZP
UkVJR05fRk9PIikpOwotICAgIGFzc2VydEVxdWFscyh2YWx1ZSwgZW51bVR5cGUuZmluZFZhbHVl
QnlOdW1iZXIoNCkpOwotICAgIGFzc2VydE51bGwoZW51bVR5cGUuZmluZFZhbHVlQnlOYW1lKCJO
T19TVUNIX1ZBTFVFIikpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW51bVR5cGUuZ2V0VmFs
dWVzKCkuc2l6ZSgpOyBpKyspIHsKLSAgICAgIGFzc2VydEVxdWFscyhpLCBlbnVtVHlwZS5nZXRW
YWx1ZXMoKS5nZXQoaSkuZ2V0SW5kZXgoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdFNlcnZpY2VEZXNjcmlwdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU2VydmljZURl
c2NyaXB0b3Igc2VydmljZSA9IFRlc3RTZXJ2aWNlLmdldERlc2NyaXB0b3IoKTsKLQotICAgIGFz
c2VydEVxdWFscygiVGVzdFNlcnZpY2UiLCBzZXJ2aWNlLmdldE5hbWUoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCJwcm90b2J1Zl91bml0dGVzdC5UZXN0U2VydmljZSIsIHNlcnZpY2UuZ2V0RnVsbE5h
bWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0UHJvdG8uZ2V0RGVzY3JpcHRvcigpLCBz
ZXJ2aWNlLmdldEZpbGUoKSk7Ci0KLQotICAgIE1ldGhvZERlc2NyaXB0b3IgZm9vTWV0aG9kID0g
c2VydmljZS5nZXRNZXRob2RzKCkuZ2V0KDApOwotICAgIGFzc2VydEVxdWFscygiRm9vIiwgZm9v
TWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0UHJvdG8uRm9vUmVx
dWVzdC5nZXREZXNjcmlwdG9yKCksCi0gICAgICAgICAgICAgICAgIGZvb01ldGhvZC5nZXRJbnB1
dFR5cGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0UHJvdG8uRm9vUmVzcG9uc2UuZ2V0
RGVzY3JpcHRvcigpLAotICAgICAgICAgICAgICAgICBmb29NZXRob2QuZ2V0T3V0cHV0VHlwZSgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoZm9vTWV0aG9kLCBzZXJ2aWNlLmZpbmRNZXRob2RCeU5hbWUo
IkZvbyIpKTsKLQotICAgIE1ldGhvZERlc2NyaXB0b3IgYmFyTWV0aG9kID0gc2VydmljZS5nZXRN
ZXRob2RzKCkuZ2V0KDEpOwotICAgIGFzc2VydEVxdWFscygiQmFyIiwgYmFyTWV0aG9kLmdldE5h
bWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0UHJvdG8uQmFyUmVxdWVzdC5nZXREZXNj
cmlwdG9yKCksCi0gICAgICAgICAgICAgICAgIGJhck1ldGhvZC5nZXRJbnB1dFR5cGUoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0UHJvdG8uQmFyUmVzcG9uc2UuZ2V0RGVzY3JpcHRvcigp
LAotICAgICAgICAgICAgICAgICBiYXJNZXRob2QuZ2V0T3V0cHV0VHlwZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoYmFyTWV0aG9kLCBzZXJ2aWNlLmZpbmRNZXRob2RCeU5hbWUoIkJhciIpKTsKLQot
ICAgIGFzc2VydE51bGwoc2VydmljZS5maW5kTWV0aG9kQnlOYW1lKCJOb1N1Y2hNZXRob2QiKSk7
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2UuZ2V0TWV0aG9kcygpLnNpemUoKTsg
aSsrKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoaSwgc2VydmljZS5nZXRNZXRob2RzKCkuZ2V0KGkp
LmdldEluZGV4KCkpOwotICAgIH0KLSAgfQotCi0KLSAgcHVibGljIHZvaWQgdGVzdEN1c3RvbU9w
dGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBHZXQgdGhlIGRlc2NyaXB0b3IgaW5k
aXJlY3RseSBmcm9tIGEgZGVwZW5kZW50IHByb3RvIGNsYXNzLiBUaGlzIGlzIHRvCi0gICAgLy8g
ZW5zdXJlIHRoYXQgd2hlbiBhIHByb3RvIGNsYXNzIGlzIGxvYWRlZCwgY3VzdG9tIG9wdGlvbnMg
ZGVmaW5lZCBpbiBpdHMKLSAgICAvLyBkZXBlbmRlbmNpZXMgYXJlIGFsc28gcHJvcGVybHkgaW5p
dGlhbGl6ZWQuCi0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yID0KLSAgICAgICAgVGVzdEN1c3Rv
bU9wdGlvbnMuVGVzdE1lc3NhZ2VXaXRoQ3VzdG9tT3B0aW9uc0NvbnRhaW5lci5nZXREZXNjcmlw
dG9yKCkKLSAgICAgICAgLmZpbmRGaWVsZEJ5TmFtZSgiZmllbGQiKS5nZXRNZXNzYWdlVHlwZSgp
OwotCi0gICAgYXNzZXJ0VHJ1ZSgKLSAgICAgIGRlc2NyaXB0b3IuZ2V0T3B0aW9ucygpLmhhc0V4
dGVuc2lvbihVbml0dGVzdEN1c3RvbU9wdGlvbnMubWVzc2FnZU9wdDEpKTsKLSAgICBhc3NlcnRF
cXVhbHMoSW50ZWdlci52YWx1ZU9mKC01NiksCi0gICAgICBkZXNjcmlwdG9yLmdldE9wdGlvbnMo
KS5nZXRFeHRlbnNpb24oVW5pdHRlc3RDdXN0b21PcHRpb25zLm1lc3NhZ2VPcHQxKSk7Ci0KLSAg
ICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgiZmll
bGQxIik7Ci0gICAgYXNzZXJ0Tm90TnVsbChmaWVsZCk7Ci0KLSAgICBhc3NlcnRUcnVlKAotICAg
ICAgZmllbGQuZ2V0T3B0aW9ucygpLmhhc0V4dGVuc2lvbihVbml0dGVzdEN1c3RvbU9wdGlvbnMu
ZmllbGRPcHQxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZig4NzY1NDMyMTA5TCks
Ci0gICAgICBmaWVsZC5nZXRPcHRpb25zKCkuZ2V0RXh0ZW5zaW9uKFVuaXR0ZXN0Q3VzdG9tT3B0
aW9ucy5maWVsZE9wdDEpKTsKLQotICAgIEVudW1EZXNjcmlwdG9yIGVudW1UeXBlID0KLSAgICAg
IFVuaXR0ZXN0Q3VzdG9tT3B0aW9ucy5UZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRpb25zLkFuRW51
bS5nZXREZXNjcmlwdG9yKCk7Ci0KLSAgICBhc3NlcnRUcnVlKAotICAgICAgZW51bVR5cGUuZ2V0
T3B0aW9ucygpLmhhc0V4dGVuc2lvbihVbml0dGVzdEN1c3RvbU9wdGlvbnMuZW51bU9wdDEpKTsK
LSAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci52YWx1ZU9mKC03ODkpLAotICAgICAgZW51bVR5cGUu
Z2V0T3B0aW9ucygpLmdldEV4dGVuc2lvbihVbml0dGVzdEN1c3RvbU9wdGlvbnMuZW51bU9wdDEp
KTsKLQotICAgIFNlcnZpY2VEZXNjcmlwdG9yIHNlcnZpY2UgPQotICAgICAgVW5pdHRlc3RDdXN0
b21PcHRpb25zLlRlc3RTZXJ2aWNlV2l0aEN1c3RvbU9wdGlvbnMuZ2V0RGVzY3JpcHRvcigpOwot
Ci0gICAgYXNzZXJ0VHJ1ZSgKLSAgICAgIHNlcnZpY2UuZ2V0T3B0aW9ucygpLmhhc0V4dGVuc2lv
bihVbml0dGVzdEN1c3RvbU9wdGlvbnMuc2VydmljZU9wdDEpKTsKLSAgICBhc3NlcnRFcXVhbHMo
TG9uZy52YWx1ZU9mKC05ODc2NTQzMjEwTCksCi0gICAgICBzZXJ2aWNlLmdldE9wdGlvbnMoKS5n
ZXRFeHRlbnNpb24oVW5pdHRlc3RDdXN0b21PcHRpb25zLnNlcnZpY2VPcHQxKSk7Ci0KLSAgICBN
ZXRob2REZXNjcmlwdG9yIG1ldGhvZCA9IHNlcnZpY2UuZmluZE1ldGhvZEJ5TmFtZSgiRm9vIik7
Ci0gICAgYXNzZXJ0Tm90TnVsbChtZXRob2QpOwotCi0gICAgYXNzZXJ0VHJ1ZSgKLSAgICAgIG1l
dGhvZC5nZXRPcHRpb25zKCkuaGFzRXh0ZW5zaW9uKFVuaXR0ZXN0Q3VzdG9tT3B0aW9ucy5tZXRo
b2RPcHQxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0Q3VzdG9tT3B0aW9ucy5NZXRob2RP
cHQxLk1FVEhPRE9QVDFfVkFMMiwKLSAgICAgIG1ldGhvZC5nZXRPcHRpb25zKCkuZ2V0RXh0ZW5z
aW9uKFVuaXR0ZXN0Q3VzdG9tT3B0aW9ucy5tZXRob2RPcHQxKSk7Ci0gIH0KLQotICAvKioKLSAg
ICogVGVzdCB0aGF0IHRoZSBGaWVsZERlc2NyaXB0b3IuVHlwZSBlbnVtIGlzIHRoZSBzYW1lIGFz
IHRoZQotICAgKiBXaXJlRm9ybWF0LkZpZWxkVHlwZSBlbnVtLgotICAgKi8KLSAgcHVibGljIHZv
aWQgdGVzdEZpZWxkVHlwZVRhYmxlc01hdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgRmll
bGREZXNjcmlwdG9yLlR5cGVbXSB2YWx1ZXMxID0gRmllbGREZXNjcmlwdG9yLlR5cGUudmFsdWVz
KCk7Ci0gICAgV2lyZUZvcm1hdC5GaWVsZFR5cGVbXSB2YWx1ZXMyID0gV2lyZUZvcm1hdC5GaWVs
ZFR5cGUudmFsdWVzKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHModmFsdWVzMS5sZW5ndGgsIHZhbHVl
czIubGVuZ3RoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzMS5sZW5ndGg7IGkr
KykgewotICAgICAgYXNzZXJ0RXF1YWxzKHZhbHVlczFbaV0udG9TdHJpbmcoKSwgdmFsdWVzMltp
XS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBG
aWVsZERlc2NyaXB0b3IuSmF2YVR5cGUgZW51bSBpcyB0aGUgc2FtZSBhcyB0aGUKLSAgICogV2ly
ZUZvcm1hdC5KYXZhVHlwZSBlbnVtLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEphdmFUeXBl
VGFibGVzTWF0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGaWVsZERlc2NyaXB0b3IuSmF2
YVR5cGVbXSB2YWx1ZXMxID0gRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLnZhbHVlcygpOwotICAg
IFdpcmVGb3JtYXQuSmF2YVR5cGVbXSB2YWx1ZXMyID0gV2lyZUZvcm1hdC5KYXZhVHlwZS52YWx1
ZXMoKTsKLQotICAgIGFzc2VydEVxdWFscyh2YWx1ZXMxLmxlbmd0aCwgdmFsdWVzMi5sZW5ndGgp
OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMxLmxlbmd0aDsgaSsrKSB7Ci0gICAg
ICBhc3NlcnRFcXVhbHModmFsdWVzMVtpXS50b1N0cmluZygpLCB2YWx1ZXMyW2ldLnRvU3RyaW5n
KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFbm9ybW91c0Rlc2NyaXB0b3Io
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBUaGUgZGVzY3JpcHRvciBmb3IgdGhpcyBmaWxl
IGlzIGxhcmdlciB0aGFuIDY0aywgeWV0IGl0IGRpZCBub3QgY2F1c2UKLSAgICAvLyBhIGNvbXBp
bGVyIGVycm9yIGR1ZSB0byBhbiBvdmVyLWxvbmcgc3RyaW5nIGxpdGVyYWwuCi0gICAgYXNzZXJ0
VHJ1ZSgKLSAgICAgICAgVW5pdHRlc3RFbm9ybW91c0Rlc2NyaXB0b3IuZ2V0RGVzY3JpcHRvcigp
Ci0gICAgICAgICAgLnRvUHJvdG8oKS5nZXRTZXJpYWxpemVkU2l6ZSgpID4gNjU1MzYpOwotICB9
Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgdGhlIERlc2NyaXB0b3JWYWxpZGF0aW9uRXhjZXB0
aW9uIHdvcmtzIGFzIGludGVuZGVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERlc2NyaXB0
b3JWYWxpZGF0b3JFeGNlcHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGaWxlRGVzY3Jp
cHRvclByb3RvIGZpbGVEZXNjcmlwdG9yUHJvdG8gPSBGaWxlRGVzY3JpcHRvclByb3RvLm5ld0J1
aWxkZXIoKQotICAgICAgLnNldE5hbWUoImZvby5wcm90byIpCi0gICAgICAuYWRkTWVzc2FnZVR5
cGUoRGVzY3JpcHRvclByb3RvLm5ld0J1aWxkZXIoKQotICAgICAgLnNldE5hbWUoIkZvbyIpCi0g
ICAgICAgIC5hZGRGaWVsZChGaWVsZERlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkKLSAgICAg
ICAgICAuc2V0TGFiZWwoRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwuTEFCRUxfT1BUSU9OQUwp
Ci0gICAgICAgICAgLnNldFR5cGUoRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZS5UWVBFX0lOVDMy
KQotICAgICAgICAgIC5zZXROYW1lKCJmb28iKQotICAgICAgICAgIC5zZXROdW1iZXIoMSkKLSAg
ICAgICAgICAuc2V0RGVmYXVsdFZhbHVlKCJpbnZhbGlkIikKLSAgICAgICAgICAuYnVpbGQoKSkK
LSAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAuYnVpbGQoKTsKLSAgICB0cnkgewotICAgICAgRGVz
Y3JpcHRvcnMuRmlsZURlc2NyaXB0b3IuYnVpbGRGcm9tKGZpbGVEZXNjcmlwdG9yUHJvdG8sCi0g
ICAgICAgICAgbmV3IEZpbGVEZXNjcmlwdG9yWzBdKTsKLSAgICAgIGZhaWwoIkRlc2NyaXB0b3JW
YWxpZGF0aW9uRXhjZXB0aW9uIGV4cGVjdGVkIik7Ci0gICAgfSBjYXRjaCAoRGVzY3JpcHRvclZh
bGlkYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gRXhwZWN0ZWQ7IGNoZWNrIHRoYXQgdGhl
IGVycm9yIG1lc3NhZ2UgY29udGFpbnMgc29tZSB1c2VmdWwgaGludHMKLSAgICAgIGFzc2VydFRy
dWUoZS5nZXRNZXNzYWdlKCkuaW5kZXhPZigiZm9vIikgIT0gLTEpOwotICAgICAgYXNzZXJ0VHJ1
ZShlLmdldE1lc3NhZ2UoKS5pbmRleE9mKCJGb28iKSAhPSAtMSk7Ci0gICAgICBhc3NlcnRUcnVl
KGUuZ2V0TWVzc2FnZSgpLmluZGV4T2YoImludmFsaWQiKSAhPSAtMSk7Ci0gICAgICBhc3NlcnRU
cnVlKGUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIE51bWJlckZvcm1hdEV4Y2VwdGlvbik7Ci0gICAg
ICBhc3NlcnRUcnVlKGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkuaW5kZXhPZigiaW52YWxpZCIp
ICE9IC0xKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgdGhlIHRyYW5zbGF0ZS9j
cm9zc2xpbmsgZm9yIGFuIGV4YW1wbGUgd2hlcmUgYSBtZXNzYWdlIGZpZWxkJ3MgbmFtZQotICAg
KiBhbmQgdHlwZSBuYW1lIGFyZSB0aGUgc2FtZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RE
ZXNjcmlwdG9yQ29tcGxleENyb3NzbGluaygpIHRocm93cyBFeGNlcHRpb24gewotICAgIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gZmlsZURlc2NyaXB0b3JQcm90byA9IEZpbGVEZXNjcmlwdG9yUHJvdG8u
bmV3QnVpbGRlcigpCi0gICAgICAuc2V0TmFtZSgiZm9vLnByb3RvIikKLSAgICAgIC5hZGRNZXNz
YWdlVHlwZShEZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXROYW1lKCJG
b28iKQotICAgICAgICAuYWRkRmllbGQoRmllbGREZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigp
Ci0gICAgICAgICAgLnNldExhYmVsKEZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsLkxBQkVMX09Q
VElPTkFMKQotICAgICAgICAgIC5zZXRUeXBlKEZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUuVFlQ
RV9JTlQzMikKLSAgICAgICAgICAuc2V0TmFtZSgiZm9vIikKLSAgICAgICAgICAuc2V0TnVtYmVy
KDEpCi0gICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgpKQotICAgICAgLmFkZE1l
c3NhZ2VUeXBlKERlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE5hbWUo
IkJhciIpCi0gICAgICAgIC5hZGRGaWVsZChGaWVsZERlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVy
KCkKLSAgICAgICAgICAuc2V0TGFiZWwoRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwuTEFCRUxf
T1BUSU9OQUwpCi0gICAgICAgICAgLnNldFR5cGVOYW1lKCJGb28iKQotICAgICAgICAgIC5zZXRO
YW1lKCJGb28iKQotICAgICAgICAgIC5zZXROdW1iZXIoMSkKLSAgICAgICAgICAuYnVpbGQoKSkK
LSAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAuYnVpbGQoKTsKLSAgICAvLyB0cmFuc2xhdGUgYW5k
IGNyb3NzbGluawotICAgIEZpbGVEZXNjcmlwdG9yIGZpbGUgPQotICAgICAgRGVzY3JpcHRvcnMu
RmlsZURlc2NyaXB0b3IuYnVpbGRGcm9tKGZpbGVEZXNjcmlwdG9yUHJvdG8sCi0gICAgICAgICAg
bmV3IEZpbGVEZXNjcmlwdG9yWzBdKTsKLSAgICAvLyB2ZXJpZnkgcmVzdWx0aW5nIGRlc2NyaXB0
b3JzCi0gICAgYXNzZXJ0Tm90TnVsbChmaWxlKTsKLSAgICBMaXN0PERlc2NyaXB0b3I+IG1zZ2xp
c3QgPSBmaWxlLmdldE1lc3NhZ2VUeXBlcygpOwotICAgIGFzc2VydE5vdE51bGwobXNnbGlzdCk7
Ci0gICAgYXNzZXJ0VHJ1ZShtc2dsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBib29sZWFuIGJhckZv
dW5kID0gZmFsc2U7Ci0gICAgZm9yIChEZXNjcmlwdG9yIGRlc2MgOiBtc2dsaXN0KSB7Ci0gICAg
ICBpZiAoZGVzYy5nZXROYW1lKCkuZXF1YWxzKCJCYXIiKSkgewotICAgICAgICBiYXJGb3VuZCA9
IHRydWU7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZGVzYy5nZXRGaWVsZHMoKSk7Ci0gICAgICAg
IExpc3Q8RmllbGREZXNjcmlwdG9yPiBmaWVsZGxpc3QgPSBkZXNjLmdldEZpZWxkcygpOwotICAg
ICAgICBhc3NlcnROb3ROdWxsKGZpZWxkbGlzdCk7Ci0gICAgICAgIGFzc2VydFRydWUoZmllbGRs
aXN0LnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShmaWVsZGxpc3QuZ2V0KDApLmdl
dFR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3IuVHlwZS5NRVNTQUdFKTsKLSAgICAgICAgYXNzZXJ0
VHJ1ZShmaWVsZGxpc3QuZ2V0KDApLmdldE1lc3NhZ2VUeXBlKCkuZ2V0TmFtZSgpLmVxdWFscygi
Rm9vIikpOwotICAgICAgfQotICAgIH0KLSAgICBhc3NlcnRUcnVlKGJhckZvdW5kKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3REZXBlbmRlbmN5T3JkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZvb1Byb3RvID0gRmlsZURlc2NyaXB0b3JQcm90by5u
ZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE5hbWUoImZvby5wcm90byIpLmJ1aWxkKCk7Ci0gICAg
RmlsZURlc2NyaXB0b3JQcm90byBiYXJQcm90byA9IEZpbGVEZXNjcmlwdG9yUHJvdG8ubmV3QnVp
bGRlcigpCi0gICAgICAgIC5zZXROYW1lKCJiYXIucHJvdG8iKQotICAgICAgICAuYWRkRGVwZW5k
ZW5jeSgiZm9vLnByb3RvIikKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgRmlsZURlc2NyaXB0b3JQ
cm90byBiYXpQcm90byA9IEZpbGVEZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAg
IC5zZXROYW1lKCJiYXoucHJvdG8iKQotICAgICAgICAuYWRkRGVwZW5kZW5jeSgiZm9vLnByb3Rv
IikKLSAgICAgICAgLmFkZERlcGVuZGVuY3koImJhci5wcm90byIpCi0gICAgICAgIC5hZGRQdWJs
aWNEZXBlbmRlbmN5KDApCi0gICAgICAgIC5hZGRQdWJsaWNEZXBlbmRlbmN5KDEpCi0gICAgICAg
IC5idWlsZCgpOwotICAgIEZpbGVEZXNjcmlwdG9yIGZvb0ZpbGUgPSBEZXNjcmlwdG9ycy5GaWxl
RGVzY3JpcHRvci5idWlsZEZyb20oZm9vUHJvdG8sCi0gICAgICAgIG5ldyBGaWxlRGVzY3JpcHRv
clswXSk7Ci0gICAgRmlsZURlc2NyaXB0b3IgYmFyRmlsZSA9IERlc2NyaXB0b3JzLkZpbGVEZXNj
cmlwdG9yLmJ1aWxkRnJvbShiYXJQcm90bywKLSAgICAgICAgbmV3IEZpbGVEZXNjcmlwdG9yW10g
e2Zvb0ZpbGV9KTsKLQotICAgIC8vIEl0ZW1zIGluIHRoZSBGaWxlRGVzY3JpcHRvciBhcnJheSBj
YW4gYmUgaW4gYW55IG9yZGVyLgotICAgIERlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yLmJ1aWxk
RnJvbShiYXpQcm90bywKLSAgICAgICAgbmV3IEZpbGVEZXNjcmlwdG9yW10ge2Zvb0ZpbGUsIGJh
ckZpbGV9KTsKLSAgICBEZXNjcmlwdG9ycy5GaWxlRGVzY3JpcHRvci5idWlsZEZyb20oYmF6UHJv
dG8sCi0gICAgICAgIG5ldyBGaWxlRGVzY3JpcHRvcltdIHtiYXJGaWxlLCBmb29GaWxlfSk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZFB1YmxpY0RlcGVuZGVuY3koKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZvb1Byb3RvID0gRmlsZURlc2Ny
aXB0b3JQcm90by5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE5hbWUoImZvby5wcm90byIpLmJ1
aWxkKCk7Ci0gICAgRmlsZURlc2NyaXB0b3JQcm90byBiYXJQcm90byA9IEZpbGVEZXNjcmlwdG9y
UHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXROYW1lKCJib28ucHJvdG8iKQotICAgICAg
ICAuYWRkRGVwZW5kZW5jeSgiZm9vLnByb3RvIikKLSAgICAgICAgLmFkZFB1YmxpY0RlcGVuZGVu
Y3koMSkgIC8vIEVycm9yLCBzaG91bGQgYmUgMC4KLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgRmls
ZURlc2NyaXB0b3IgZm9vRmlsZSA9IERlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yLmJ1aWxkRnJv
bShmb29Qcm90bywKLSAgICAgICAgbmV3IEZpbGVEZXNjcmlwdG9yWzBdKTsKLSAgICB0cnkgewot
ICAgICAgRGVzY3JpcHRvcnMuRmlsZURlc2NyaXB0b3IuYnVpbGRGcm9tKGJhclByb3RvLAotICAg
ICAgICAgIG5ldyBGaWxlRGVzY3JpcHRvcltdIHtmb29GaWxlfSk7Ci0gICAgICBmYWlsKCJEZXNj
cmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbiBleHBlY3RlZCIpOwotICAgIH0gY2F0Y2ggKERlc2Ny
aXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIGFzc2VydFRydWUoCi0gICAgICAg
ICAgZS5nZXRNZXNzYWdlKCkuaW5kZXhPZigiSW52YWxpZCBwdWJsaWMgZGVwZW5kZW5jeSBpbmRl
eC4iKSAhPSAtMSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVua25vd25GaWVs
ZHNEZW5pZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZv
b1Byb3RvID0gRmlsZURlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE5h
bWUoImZvby5wcm90byIpCi0gICAgICAgIC5hZGRNZXNzYWdlVHlwZShEZXNjcmlwdG9yUHJvdG8u
bmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0TmFtZSgiRm9vIikKLSAgICAgICAgICAgIC5h
ZGRGaWVsZChGaWVsZERlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgICAg
ICAuc2V0TGFiZWwoRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwuTEFCRUxfT1BUSU9OQUwpCi0g
ICAgICAgICAgICAgICAgLnNldFR5cGVOYW1lKCJCYXIiKQotICAgICAgICAgICAgICAgIC5zZXRO
YW1lKCJiYXIiKQotICAgICAgICAgICAgICAgIC5zZXROdW1iZXIoMSkpKQotICAgICAgICAuYnVp
bGQoKTsKLQotICAgIHRyeSB7Ci0gICAgICBEZXNjcmlwdG9ycy5GaWxlRGVzY3JpcHRvci5idWls
ZEZyb20oZm9vUHJvdG8sIG5ldyBGaWxlRGVzY3JpcHRvclswXSk7Ci0gICAgICBmYWlsKCJEZXNj
cmlwdG9yVmFsaWRhdGlvbkV4Y2VwdGlvbiBleHBlY3RlZCIpOwotICAgIH0gY2F0Y2ggKERlc2Ny
aXB0b3JWYWxpZGF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIGFzc2VydFRydWUoZS5nZXRNZXNz
YWdlKCkuaW5kZXhPZigiQmFyIikgIT0gLTEpOwotICAgICAgYXNzZXJ0VHJ1ZShlLmdldE1lc3Nh
Z2UoKS5pbmRleE9mKCJpcyBub3QgZGVmaW5lZCIpICE9IC0xKTsKLSAgICB9Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0VW5rbm93bkZpZWxkc0FsbG93ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZvb1Byb3RvID0gRmlsZURlc2NyaXB0b3JQcm90by5u
ZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE5hbWUoImZvby5wcm90byIpCi0gICAgICAgIC5hZGRE
ZXBlbmRlbmN5KCJiYXIucHJvdG8iKQotICAgICAgICAuYWRkTWVzc2FnZVR5cGUoRGVzY3JpcHRv
clByb3RvLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLnNldE5hbWUoIkZvbyIpCi0gICAgICAg
ICAgICAuYWRkRmllbGQoRmllbGREZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAg
ICAgICAgICAgLnNldExhYmVsKEZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsLkxBQkVMX09QVElP
TkFMKQotICAgICAgICAgICAgICAgIC5zZXRUeXBlTmFtZSgiQmFyIikKLSAgICAgICAgICAgICAg
ICAuc2V0TmFtZSgiYmFyIikKLSAgICAgICAgICAgICAgICAuc2V0TnVtYmVyKDEpKSkKLSAgICAg
ICAgLmJ1aWxkKCk7Ci0gICAgRGVzY3JpcHRvcnMuRmlsZURlc2NyaXB0b3IuYnVpbGRGcm9tKGZv
b1Byb3RvLCBuZXcgRmlsZURlc2NyaXB0b3JbMF0sIHRydWUpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdEhpZGRlbkRlcGVuZGVuY3koKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGaWxlRGVz
Y3JpcHRvclByb3RvIGJhclByb3RvID0gRmlsZURlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkK
LSAgICAgICAgLnNldE5hbWUoImJhci5wcm90byIpCi0gICAgICAgIC5hZGRNZXNzYWdlVHlwZShE
ZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpLnNldE5hbWUoIkJhciIpKQotICAgICAgICAuYnVp
bGQoKTsKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZvcndhcmRQcm90byA9IEZpbGVEZXNjcmlw
dG9yUHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXROYW1lKCJmb3J3YXJkLnByb3RvIikK
LSAgICAgICAgLmFkZERlcGVuZGVuY3koImJhci5wcm90byIpCi0gICAgICAgIC5idWlsZCgpOwot
ICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZm9vUHJvdG8gPSBGaWxlRGVzY3JpcHRvclByb3RvLm5l
d0J1aWxkZXIoKQotICAgICAgICAuc2V0TmFtZSgiZm9vLnByb3RvIikKLSAgICAgICAgLmFkZERl
cGVuZGVuY3koImZvcndhcmQucHJvdG8iKQotICAgICAgICAuYWRkTWVzc2FnZVR5cGUoRGVzY3Jp
cHRvclByb3RvLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLnNldE5hbWUoIkZvbyIpCi0gICAg
ICAgICAgICAuYWRkRmllbGQoRmllbGREZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpCi0gICAg
ICAgICAgICAgICAgLnNldExhYmVsKEZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsLkxBQkVMX09Q
VElPTkFMKQotICAgICAgICAgICAgICAgIC5zZXRUeXBlTmFtZSgiQmFyIikKLSAgICAgICAgICAg
ICAgICAuc2V0TmFtZSgiYmFyIikKLSAgICAgICAgICAgICAgICAuc2V0TnVtYmVyKDEpKSkKLSAg
ICAgICAgLmJ1aWxkKCk7Ci0gICAgRmlsZURlc2NyaXB0b3IgYmFyRmlsZSA9IERlc2NyaXB0b3Jz
LkZpbGVEZXNjcmlwdG9yLmJ1aWxkRnJvbSgKLSAgICAgICAgYmFyUHJvdG8sIG5ldyBGaWxlRGVz
Y3JpcHRvclswXSk7Ci0gICAgRmlsZURlc2NyaXB0b3IgZm9yd2FyZEZpbGUgPSBEZXNjcmlwdG9y
cy5GaWxlRGVzY3JpcHRvci5idWlsZEZyb20oCi0gICAgICAgIGZvcndhcmRQcm90bywgbmV3IEZp
bGVEZXNjcmlwdG9yW10ge2JhckZpbGV9KTsKLQotICAgIHRyeSB7Ci0gICAgICBEZXNjcmlwdG9y
cy5GaWxlRGVzY3JpcHRvci5idWlsZEZyb20oCi0gICAgICAgICAgZm9vUHJvdG8sIG5ldyBGaWxl
RGVzY3JpcHRvcltdIHtmb3J3YXJkRmlsZX0pOwotICAgICAgZmFpbCgiRGVzY3JpcHRvclZhbGlk
YXRpb25FeGNlcHRpb24gZXhwZWN0ZWQiKTsKLSAgICB9IGNhdGNoIChEZXNjcmlwdG9yVmFsaWRh
dGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICBhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLmluZGV4
T2YoIkJhciIpICE9IC0xKTsKLSAgICAgIGFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCkuaW5kZXhP
ZigiaXMgbm90IGRlZmluZWQiKSAhPSAtMSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdFB1YmxpY0RlcGVuZGVuY3koKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGaWxlRGVzY3Jp
cHRvclByb3RvIGJhclByb3RvID0gRmlsZURlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkKLSAg
ICAgICAgLnNldE5hbWUoImJhci5wcm90byIpCi0gICAgICAgIC5hZGRNZXNzYWdlVHlwZShEZXNj
cmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpLnNldE5hbWUoIkJhciIpKQotICAgICAgICAuYnVpbGQo
KTsKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZvcndhcmRQcm90byA9IEZpbGVEZXNjcmlwdG9y
UHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXROYW1lKCJmb3J3YXJkLnByb3RvIikKLSAg
ICAgICAgLmFkZERlcGVuZGVuY3koImJhci5wcm90byIpCi0gICAgICAgIC5hZGRQdWJsaWNEZXBl
bmRlbmN5KDApCi0gICAgICAgIC5idWlsZCgpOwotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZm9v
UHJvdG8gPSBGaWxlRGVzY3JpcHRvclByb3RvLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0TmFt
ZSgiZm9vLnByb3RvIikKLSAgICAgICAgLmFkZERlcGVuZGVuY3koImZvcndhcmQucHJvdG8iKQot
ICAgICAgICAuYWRkTWVzc2FnZVR5cGUoRGVzY3JpcHRvclByb3RvLm5ld0J1aWxkZXIoKQotICAg
ICAgICAgICAgLnNldE5hbWUoIkZvbyIpCi0gICAgICAgICAgICAuYWRkRmllbGQoRmllbGREZXNj
cmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAgICAgLnNldExhYmVsKEZpZWxk
RGVzY3JpcHRvclByb3RvLkxhYmVsLkxBQkVMX09QVElPTkFMKQotICAgICAgICAgICAgICAgIC5z
ZXRUeXBlTmFtZSgiQmFyIikKLSAgICAgICAgICAgICAgICAuc2V0TmFtZSgiYmFyIikKLSAgICAg
ICAgICAgICAgICAuc2V0TnVtYmVyKDEpKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgRmlsZURl
c2NyaXB0b3IgYmFyRmlsZSA9IERlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yLmJ1aWxkRnJvbSgK
LSAgICAgICAgYmFyUHJvdG8sIG5ldyBGaWxlRGVzY3JpcHRvclswXSk7Ci0gICAgRmlsZURlc2Ny
aXB0b3IgZm9yd2FyZEZpbGUgPSBEZXNjcmlwdG9ycy5GaWxlRGVzY3JpcHRvci5idWlsZEZyb20o
Ci0gICAgICAgIGZvcndhcmRQcm90bywgbmV3IEZpbGVEZXNjcmlwdG9yW117YmFyRmlsZX0pOwot
ICAgIERlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yLmJ1aWxkRnJvbSgKLSAgICAgICAgZm9vUHJv
dG8sIG5ldyBGaWxlRGVzY3JpcHRvcltdIHtmb3J3YXJkRmlsZX0pOwotICB9Ci0KLSAgLyoqCi0g
ICAqIFRlc3RzIHRoZSB0cmFuc2xhdGUvY3Jvc3NsaW5rIGZvciBhbiBleGFtcGxlIHdpdGggYSBt
b3JlIGNvbXBsZXggbmFtZXNwYWNlCi0gICAqIHJlZmVyZW5jaW5nLgotICAgKi8KLSAgcHVibGlj
IHZvaWQgdGVzdENvbXBsZXhOYW1lc3BhY2VQdWJsaWNEZXBlbmRlbmN5KCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgRmlsZURlc2NyaXB0b3JQcm90byBmb29Qcm90byA9IEZpbGVEZXNjcmlwdG9y
UHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXROYW1lKCJiYXIucHJvdG8iKQotICAgICAg
ICAuc2V0UGFja2FnZSgiYS5iLmMuZC5iYXIuc2hhcmVkIikKLSAgICAgICAgLmFkZEVudW1UeXBl
KEVudW1EZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0TmFtZSgi
TXlFbnVtIikKLSAgICAgICAgICAgIC5hZGRWYWx1ZShFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8u
bmV3QnVpbGRlcigpCi0gICAgICAgICAgICAgICAgLnNldE5hbWUoIkJMQUgiKQotICAgICAgICAg
ICAgICAgIC5zZXROdW1iZXIoMSkpKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBGaWxlRGVzY3Jp
cHRvclByb3RvIGJhclByb3RvID0gRmlsZURlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkKLSAg
ICAgICAgLnNldE5hbWUoImZvby5wcm90byIpCi0gICAgICAgIC5hZGREZXBlbmRlbmN5KCJiYXIu
cHJvdG8iKQotICAgICAgICAuc2V0UGFja2FnZSgiYS5iLmMuZC5mb28uc2hhcmVkIikKLSAgICAg
ICAgLmFkZE1lc3NhZ2VUeXBlKERlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkKLSAgICAgICAg
ICAgIC5zZXROYW1lKCJNeU1lc3NhZ2UiKQotICAgICAgICAgICAgLmFkZEZpZWxkKEZpZWxkRGVz
Y3JpcHRvclByb3RvLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgICAgIC5zZXRMYWJlbChGaWVs
ZERlc2NyaXB0b3JQcm90by5MYWJlbC5MQUJFTF9SRVBFQVRFRCkKLSAgICAgICAgICAgICAgICAu
c2V0VHlwZU5hbWUoImJhci5zaGFyZWQuTXlFbnVtIikKLSAgICAgICAgICAgICAgICAuc2V0TmFt
ZSgiTXlGaWVsZCIpCi0gICAgICAgICAgICAgICAgLnNldE51bWJlcigxKSkpCi0gICAgICAgIC5i
dWlsZCgpOwotICAgIC8vIHRyYW5zbGF0ZSBhbmQgY3Jvc3NsaW5rCi0gICAgRmlsZURlc2NyaXB0
b3IgZm9vRmlsZSA9IERlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yLmJ1aWxkRnJvbSgKLSAgICAg
ICAgZm9vUHJvdG8sIG5ldyBGaWxlRGVzY3JpcHRvclswXSk7Ci0gICAgRmlsZURlc2NyaXB0b3Ig
YmFyRmlsZSA9IERlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yLmJ1aWxkRnJvbSgKLSAgICAgICAg
YmFyUHJvdG8sIG5ldyBGaWxlRGVzY3JpcHRvcltde2Zvb0ZpbGV9KTsKLSAgICAvLyB2ZXJpZnkg
cmVzdWx0aW5nIGRlc2NyaXB0b3JzCi0gICAgYXNzZXJ0Tm90TnVsbChiYXJGaWxlKTsKLSAgICBM
aXN0PERlc2NyaXB0b3I+IG1zZ2xpc3QgPSBiYXJGaWxlLmdldE1lc3NhZ2VUeXBlcygpOwotICAg
IGFzc2VydE5vdE51bGwobXNnbGlzdCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dsaXN0LnNpemUoKSA9
PSAxKTsKLSAgICBEZXNjcmlwdG9yIGRlc2MgPSBtc2dsaXN0LmdldCgwKTsKLSAgICBpZiAoZGVz
Yy5nZXROYW1lKCkuZXF1YWxzKCJNeU1lc3NhZ2UiKSkgewotICAgICAgYXNzZXJ0Tm90TnVsbChk
ZXNjLmdldEZpZWxkcygpKTsKLSAgICAgIExpc3Q8RmllbGREZXNjcmlwdG9yPiBmaWVsZGxpc3Qg
PSBkZXNjLmdldEZpZWxkcygpOwotICAgICAgYXNzZXJ0Tm90TnVsbChmaWVsZGxpc3QpOwotICAg
ICAgYXNzZXJ0VHJ1ZShmaWVsZGxpc3Quc2l6ZSgpID09IDEpOwotICAgICAgRmllbGREZXNjcmlw
dG9yIGZpZWxkID0gZmllbGRsaXN0LmdldCgwKTsKLSAgICAgIGFzc2VydFRydWUoZmllbGQuZ2V0
VHlwZSgpID09IEZpZWxkRGVzY3JpcHRvci5UeXBlLkVOVU0pOwotICAgICAgYXNzZXJ0VHJ1ZShm
aWVsZC5nZXRFbnVtVHlwZSgpLmdldE5hbWUoKS5lcXVhbHMoIk15RW51bSIpKTsKLSAgICAgIGFz
c2VydFRydWUoZmllbGQuZ2V0RW51bVR5cGUoKS5nZXRGaWxlKCkuZ2V0TmFtZSgpLmVxdWFscygi
YmFyLnByb3RvIikpOwotICAgICAgYXNzZXJ0VHJ1ZShmaWVsZC5nZXRFbnVtVHlwZSgpLmdldEZp
bGUoKS5nZXRQYWNrYWdlKCkuZXF1YWxzKAotICAgICAgICAgICJhLmIuYy5kLmJhci5zaGFyZWQi
KSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9uZW9mRGVzY3JpcHRvcigpIHRo
cm93cyBFeGNlcHRpb24gewotICAgIERlc2NyaXB0b3IgbWVzc2FnZVR5cGUgPSBUZXN0QWxsVHlw
ZXMuZ2V0RGVzY3JpcHRvcigpOwotICAgIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA9Ci0gICAgICAg
IG1lc3NhZ2VUeXBlLmZpbmRGaWVsZEJ5TmFtZSgib25lb2ZfbmVzdGVkX21lc3NhZ2UiKTsKLSAg
ICBPbmVvZkRlc2NyaXB0b3Igb25lb2ZEZXNjcmlwdG9yID0gZmllbGQuZ2V0Q29udGFpbmluZ09u
ZW9mKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvbmVvZkRlc2NyaXB0b3IpOwotICAgIGFzc2VydFNh
bWUob25lb2ZEZXNjcmlwdG9yLCBtZXNzYWdlVHlwZS5nZXRPbmVvZnMoKS5nZXQoMCkpOwotICAg
IGFzc2VydEVxdWFscygib25lb2ZfZmllbGQiLCBvbmVvZkRlc2NyaXB0b3IuZ2V0TmFtZSgpKTsK
LQotICAgIGFzc2VydEVxdWFscyg0LCBvbmVvZkRlc2NyaXB0b3IuZ2V0RmllbGRDb3VudCgpKTsK
LSAgICBhc3NlcnRTYW1lKG9uZW9mRGVzY3JpcHRvci5nZXRGaWVsZCgxKSwgZmllbGQpOwotCi0g
ICAgYXNzZXJ0RXF1YWxzKDQsIG9uZW9mRGVzY3JpcHRvci5nZXRGaWVsZHMoKS5zaXplKCkpOwot
ICAgIGFzc2VydEVxdWFscyhvbmVvZkRlc2NyaXB0b3IuZ2V0RmllbGRzKCkuZ2V0KDEpLCBmaWVs
ZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TWVzc2FnZURlc2NyaXB0b3JFeHRlbnNpb25z
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzLmdldERl
c2NyaXB0b3IoKS5pc0V4dGVuZGFibGUoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShUZXN0QWxsRXh0ZW5z
aW9ucy5nZXREZXNjcmlwdG9yKCkuaXNFeHRlbmRhYmxlKCkpOwotICAgIGFzc2VydFRydWUoVGVz
dE11bHRpcGxlRXh0ZW5zaW9uUmFuZ2VzLmdldERlc2NyaXB0b3IoKS5pc0V4dGVuZGFibGUoKSk7
Ci0KLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpLmlzRXh0ZW5z
aW9uTnVtYmVyKDMpKTsKLSAgICBhc3NlcnRUcnVlKFRlc3RBbGxFeHRlbnNpb25zLmdldERlc2Ny
aXB0b3IoKS5pc0V4dGVuc2lvbk51bWJlcigzKSk7Ci0gICAgYXNzZXJ0VHJ1ZShUZXN0TXVsdGlw
bGVFeHRlbnNpb25SYW5nZXMuZ2V0RGVzY3JpcHRvcigpLmlzRXh0ZW5zaW9uTnVtYmVyKDQyKSk7
Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdE11bHRpcGxlRXh0ZW5zaW9uUmFuZ2VzLmdldERlc2NyaXB0
b3IoKS5pc0V4dGVuc2lvbk51bWJlcig0MykpOwotICAgIGFzc2VydEZhbHNlKFRlc3RNdWx0aXBs
ZUV4dGVuc2lvblJhbmdlcy5nZXREZXNjcmlwdG9yKCkuaXNFeHRlbnNpb25OdW1iZXIoNDE0Mikp
OwotICAgIGFzc2VydFRydWUoVGVzdE11bHRpcGxlRXh0ZW5zaW9uUmFuZ2VzLmdldERlc2NyaXB0
b3IoKS5pc0V4dGVuc2lvbk51bWJlcig0MTQzKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
UmVzZXJ2ZWRGaWVsZHMoKSB7Ci0gICAgRGVzY3JpcHRvciBkID0gVGVzdFJlc2VydmVkRmllbGRz
LmdldERlc2NyaXB0b3IoKTsKLSAgICBhc3NlcnRUcnVlKGQuaXNSZXNlcnZlZE51bWJlcigyKSk7
Ci0gICAgYXNzZXJ0RmFsc2UoZC5pc1Jlc2VydmVkTnVtYmVyKDgpKTsKLSAgICBhc3NlcnRUcnVl
KGQuaXNSZXNlcnZlZE51bWJlcig5KSk7Ci0gICAgYXNzZXJ0VHJ1ZShkLmlzUmVzZXJ2ZWROdW1i
ZXIoMTApKTsKLSAgICBhc3NlcnRUcnVlKGQuaXNSZXNlcnZlZE51bWJlcigxMSkpOwotICAgIGFz
c2VydEZhbHNlKGQuaXNSZXNlcnZlZE51bWJlcigxMikpOwotICAgIGFzc2VydEZhbHNlKGQuaXNS
ZXNlcnZlZE5hbWUoImZvbyIpKTsKLSAgICBhc3NlcnRUcnVlKGQuaXNSZXNlcnZlZE5hbWUoImJh
ciIpKTsKLSAgICBhc3NlcnRUcnVlKGQuaXNSZXNlcnZlZE5hbWUoImJheiIpKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZygpIHsKLSAgICBhc3NlcnRFcXVhbHMoInByb3RvYnVm
X3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5vcHRpb25hbF91aW50NjQiLAotICAgICAgICBVbml0dGVz
dFByb3RvLlRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCkuZmluZEZpZWxkQnlOdW1iZXIoCi0g
ICAgICAgICAgICBVbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlcy5PUFRJT05BTF9VSU5UNjRfRklF
TERfTlVNQkVSKS50b1N0cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYWNrZWRF
bnVtRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZp
bGVEZXNjcmlwdG9yUHJvdG8gPSBGaWxlRGVzY3JpcHRvclByb3RvLm5ld0J1aWxkZXIoKQotICAg
ICAgICAuc2V0TmFtZSgiZm9vLnByb3RvIikKLSAgICAgICAgLmFkZEVudW1UeXBlKEVudW1EZXNj
cmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpCi0gICAgICAgICAgLnNldE5hbWUoIkVudW0iKQotICAg
ICAgICAgIC5hZGRWYWx1ZShFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpCi0g
ICAgICAgICAgICAuc2V0TmFtZSgiRk9PIikKLSAgICAgICAgICAgIC5zZXROdW1iZXIoMSkKLSAg
ICAgICAgICAgIC5idWlsZCgpKQotICAgICAgICAgIC5idWlsZCgpKQotICAgICAgICAuYWRkTWVz
c2FnZVR5cGUoRGVzY3JpcHRvclByb3RvLm5ld0J1aWxkZXIoKQotICAgICAgICAgIC5zZXROYW1l
KCJNZXNzYWdlIikKLSAgICAgICAgICAuYWRkRmllbGQoRmllbGREZXNjcmlwdG9yUHJvdG8ubmV3
QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0TmFtZSgiZm9vIikKLSAgICAgICAgICAgIC5zZXRU
eXBlTmFtZSgiRW51bSIpCi0gICAgICAgICAgICAuc2V0TnVtYmVyKDEpCi0gICAgICAgICAgICAu
c2V0TGFiZWwoRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwuTEFCRUxfUkVQRUFURUQpCi0gICAg
ICAgICAgICAuc2V0T3B0aW9ucyhEZXNjcmlwdG9yUHJvdG9zLkZpZWxkT3B0aW9ucy5uZXdCdWls
ZGVyKCkKLSAgICAgICAgICAgICAgLnNldFBhY2tlZCh0cnVlKQotICAgICAgICAgICAgICAuYnVp
bGQoKSkKLSAgICAgICAgICAgIC5idWlsZCgpKQotICAgICAgICAgIC5idWlsZCgpKQotICAgICAg
ICAuYnVpbGQoKTsKLSAgICBEZXNjcmlwdG9ycy5GaWxlRGVzY3JpcHRvci5idWlsZEZyb20oCi0g
ICAgICAgIGZpbGVEZXNjcmlwdG9yUHJvdG8sIG5ldyBGaWxlRGVzY3JpcHRvclswXSk7Ci0gIH0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9Eb3VibGVBcnJheUxpc3RUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvRG91YmxlQXJyYXlMaXN0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NWI0MThjNDRhNzk1ZjYyZjIyYzljYzIwMmQ5NmU2M2RlMmM1ZWQwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Eb3VibGVBcnJheUxpc3RUZXN0LmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSw0NTkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IHN0YXRp
YyBqYXZhLnV0aWwuQXJyYXlzLmFzTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0
Q2FzZTsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwu
Q29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0
b3I7Ci0KLS8qKgotICogVGVzdHMgZm9yIHtAbGluayBEb3VibGVBcnJheUxpc3R9LgotICogCi0g
KiBAYXV0aG9yIGR3ZWlzQGdvb2dsZS5jb20gKERhbmllbCBXZWlzKQotICovCi1wdWJsaWMgY2xh
c3MgRG91YmxlQXJyYXlMaXN0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIERvdWJsZUFycmF5TGlzdCBVTkFSWV9MSVNUID0gbmV3SW1tdXRhYmxlRG91
YmxlQXJyYXlMaXN0KDEpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBEb3VibGVBcnJheUxpc3Qg
VEVSVElBUllfTElTVCA9Ci0gICAgICBuZXdJbW11dGFibGVEb3VibGVBcnJheUxpc3QoMSwgMiwg
Myk7Ci0gIAotICBwcml2YXRlIERvdWJsZUFycmF5TGlzdCBsaXN0OwotICAKLSAgQE92ZXJyaWRl
Ci0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgbGlzdCA9
IG5ldyBEb3VibGVBcnJheUxpc3QoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEVtcHR5
TGlzdFJldHVybnNTYW1lSW5zdGFuY2UoKSB7Ci0gICAgYXNzZXJ0U2FtZShEb3VibGVBcnJheUxp
c3QuZW1wdHlMaXN0KCksIERvdWJsZUFycmF5TGlzdC5lbXB0eUxpc3QoKSk7Ci0gIH0KLSAgCi0g
IHB1YmxpYyB2b2lkIHRlc3RFbXB0eUxpc3RJc0ltbXV0YWJsZSgpIHsKLSAgICBhc3NlcnRJbW11
dGFibGUoRG91YmxlQXJyYXlMaXN0LmVtcHR5TGlzdCgpKTsKLSAgfQotICAKLSAgcHVibGljIHZv
aWQgdGVzdE1ha2VJbW11dGFibGUoKSB7Ci0gICAgbGlzdC5hZGREb3VibGUoMik7Ci0gICAgbGlz
dC5hZGREb3VibGUoNCk7Ci0gICAgbGlzdC5hZGREb3VibGUoNik7Ci0gICAgbGlzdC5hZGREb3Vi
bGUoOCk7Ci0gICAgbGlzdC5tYWtlSW1tdXRhYmxlKCk7Ci0gICAgYXNzZXJ0SW1tdXRhYmxlKGxp
c3QpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpY2F0aW9uV2l0aEl0ZXJhdGlv
bigpIHsKLSAgICBsaXN0LmFkZEFsbChhc0xpc3QoMUQsIDJELCAzRCwgNEQpKTsKLSAgICBJdGVy
YXRvcjxEb3VibGU+IGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotICAgIGFzc2VydEVxdWFs
cyg0LCBsaXN0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDFELCAoZG91YmxlKSBsaXN0Lmdl
dCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDFELCAoZG91YmxlKSBpdGVyYXRvci5uZXh0KCkpOwot
ICAgIGxpc3Quc2V0KDAsIDFEKTsKLSAgICBhc3NlcnRFcXVhbHMoMkQsIChkb3VibGUpIGl0ZXJh
dG9yLm5leHQoKSk7Ci0gICAgCi0gICAgbGlzdC5yZW1vdmUoMCk7Ci0gICAgdHJ5IHsKLSAgICAg
IGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChDb25jdXJyZW50
TW9kaWZpY2F0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAg
IAotICAgIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotICAgIGxpc3QuYWRkKDAsIDBEKTsK
LSAgICB0cnkgewotICAgICAgaXRlcmF0b3IubmV4dCgpOwotICAgICAgZmFpbCgpOwotICAgIH0g
Y2F0Y2ggKENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhw
ZWN0ZWQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXQoKSB7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDFELCAoZG91YmxlKSBURVJUSUFSWV9MSVNULmdldCgwKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDJELCAoZG91YmxlKSBURVJUSUFSWV9MSVNULmdldCgxKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDNELCAoZG91YmxlKSBURVJUSUFSWV9MSVNULmdldCgyKSk7Ci0gICAgCi0gICAgdHJ5IHsK
LSAgICAgIFRFUlRJQVJZX0xJU1QuZ2V0KC0xKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNo
IChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAg
fQotICAgIAotICAgIHRyeSB7Ci0gICAgICBURVJUSUFSWV9MSVNULmdldCgzKTsKLSAgICAgIGZh
aWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAg
IC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW50KCkg
ewotICAgIGFzc2VydEVxdWFscygxRCwgVEVSVElBUllfTElTVC5nZXREb3VibGUoMCkpOwotICAg
IGFzc2VydEVxdWFscygyRCwgVEVSVElBUllfTElTVC5nZXREb3VibGUoMSkpOwotICAgIGFzc2Vy
dEVxdWFscygzRCwgVEVSVElBUllfTElTVC5nZXREb3VibGUoMikpOwotICAgIAotICAgIHRyeSB7
Ci0gICAgICBURVJUSUFSWV9MSVNULmdldCgtMSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRj
aCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAg
IH0KLSAgICAKLSAgICB0cnkgewotICAgICAgVEVSVElBUllfTElTVC5nZXQoMyk7Ci0gICAgICBm
YWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdFNpemUoKSB7
Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIERvdWJsZUFycmF5TGlzdC5lbXB0eUxpc3QoKS5zaXplKCkp
OwotICAgIGFzc2VydEVxdWFscygxLCBVTkFSWV9MSVNULnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDMsIFRFUlRJQVJZX0xJU1Quc2l6ZSgpKTsKLQotICAgIGxpc3QuYWRkRG91YmxlKDIpOwot
ICAgIGxpc3QuYWRkRG91YmxlKDQpOwotICAgIGxpc3QuYWRkRG91YmxlKDYpOwotICAgIGxpc3Qu
YWRkRG91YmxlKDgpOwotICAgIGFzc2VydEVxdWFscyg0LCBsaXN0LnNpemUoKSk7Ci0gICAgCi0g
ICAgbGlzdC5yZW1vdmUoMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIGxpc3Quc2l6ZSgpKTsKLSAg
ICAKLSAgICBsaXN0LmFkZCgxNkQpOwotICAgIGFzc2VydEVxdWFscyg0LCBsaXN0LnNpemUoKSk7
Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXQoKSB7Ci0gICAgbGlzdC5hZGREb3VibGUo
Mik7Ci0gICAgbGlzdC5hZGREb3VibGUoNCk7Ci0gICAgCi0gICAgYXNzZXJ0RXF1YWxzKDJELCAo
ZG91YmxlKSBsaXN0LnNldCgwLCAwRCkpOwotICAgIGFzc2VydEVxdWFscygwRCwgbGlzdC5nZXRE
b3VibGUoMCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDRELCAoZG91YmxlKSBsaXN0LnNldCgxLCAw
RCkpOwotICAgIGFzc2VydEVxdWFscygwRCwgbGlzdC5nZXREb3VibGUoMSkpOwotICAgIAotICAg
IHRyeSB7Ci0gICAgICBsaXN0LnNldCgtMSwgMEQpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0
Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAg
ICB9Ci0KLSAgICB0cnkgewotICAgICAgbGlzdC5zZXQoMiwgMEQpOwotICAgICAgZmFpbCgpOwot
ICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhw
ZWN0ZWQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRJbnQoKSB7Ci0gICAg
bGlzdC5hZGREb3VibGUoMik7Ci0gICAgbGlzdC5hZGREb3VibGUoNCk7Ci0gICAgCi0gICAgYXNz
ZXJ0RXF1YWxzKDJELCBsaXN0LnNldERvdWJsZSgwLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBE
LCBsaXN0LmdldERvdWJsZSgwKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoNEQsIGxpc3Quc2V0RG91
YmxlKDEsIDApKTsKLSAgICBhc3NlcnRFcXVhbHMoMEQsIGxpc3QuZ2V0RG91YmxlKDEpKTsKLSAg
ICAKLSAgICB0cnkgewotICAgICAgbGlzdC5zZXREb3VibGUoLTEsIDApOwotICAgICAgZmFpbCgp
OwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8g
ZXhwZWN0ZWQKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgbGlzdC5zZXREb3VibGUoMiwgMCk7
Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVz
dEFkZCgpIHsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbGlzdC5zaXplKCkpOwotCi0gICAgYXNzZXJ0
VHJ1ZShsaXN0LmFkZCgyRCkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMkQpLCBsaXN0KTsK
LQotICAgIGFzc2VydFRydWUobGlzdC5hZGQoM0QpKTsKLSAgICBsaXN0LmFkZCgwLCA0RCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCg0RCwgMkQsIDNEKSwgbGlzdCk7Ci0gICAgCi0gICAgbGlz
dC5hZGQoMCwgMUQpOwotICAgIGxpc3QuYWRkKDAsIDBEKTsKLSAgICAvLyBGb3JjZSBhIHJlc2l6
ZSBieSBnZXR0aW5nIHVwIHRvIDExIGVsZW1lbnRzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NjsgaSsrKSB7Ci0gICAgICBsaXN0LmFkZChEb3VibGUudmFsdWVPZig1ICsgaSkpOwotICAgIH0K
LSAgICBhc3NlcnRFcXVhbHMoYXNMaXN0KDBELCAxRCwgNEQsIDJELCAzRCwgNUQsIDZELCA3RCwg
OEQsIDlELCAxMEQpLCBsaXN0KTsKLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGQoLTEs
IDVEKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAg
IC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZCg0LCA1
RCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEFkZEludCgpIHsK
LSAgICBhc3NlcnRFcXVhbHMoMCwgbGlzdC5zaXplKCkpOwotCi0gICAgbGlzdC5hZGREb3VibGUo
Mik7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgyRCksIGxpc3QpOwotCi0gICAgbGlzdC5hZGRE
b3VibGUoMyk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgyRCwgM0QpLCBsaXN0KTsKLSAgfQot
ICAKLSAgcHVibGljIHZvaWQgdGVzdEFkZEFsbCgpIHsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbGlz
dC5zaXplKCkpOwotCi0gICAgYXNzZXJ0VHJ1ZShsaXN0LmFkZEFsbChDb2xsZWN0aW9ucy5zaW5n
bGV0b24oMUQpKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGxpc3Quc2l6ZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoMUQsIChkb3VibGUpIGxpc3QuZ2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoMUQs
IGxpc3QuZ2V0RG91YmxlKDApKTsKLSAgICAKLSAgICBhc3NlcnRUcnVlKGxpc3QuYWRkQWxsKGFz
TGlzdCgyRCwgM0QsIDRELCA1RCwgNkQpKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgxRCwg
MkQsIDNELCA0RCwgNUQsIDZEKSwgbGlzdCk7Ci0gICAgCi0gICAgYXNzZXJ0VHJ1ZShsaXN0LmFk
ZEFsbChURVJUSUFSWV9MSVNUKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgxRCwgMkQsIDNE
LCA0RCwgNUQsIDZELCAxRCwgMkQsIDNEKSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRGYWxzZShsaXN0
LmFkZEFsbChDb2xsZWN0aW9ucy48RG91YmxlPmVtcHR5TGlzdCgpKSk7Ci0gICAgYXNzZXJ0RmFs
c2UobGlzdC5hZGRBbGwoRG91YmxlQXJyYXlMaXN0LmVtcHR5TGlzdCgpKSk7Ci0gIH0KLSAgCi0g
IHB1YmxpYyB2b2lkIHRlc3RSZW1vdmUoKSB7Ci0gICAgbGlzdC5hZGRBbGwoVEVSVElBUllfTElT
VCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDFELCAoZG91YmxlKSBsaXN0LnJlbW92ZSgwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKGFzTGlzdCgyRCwgM0QpLCBsaXN0KTsKLQotICAgIGFzc2VydFRydWUobGlz
dC5yZW1vdmUoRG91YmxlLnZhbHVlT2YoMykpKTsKLSAgICBhc3NlcnRFcXVhbHMoYXNMaXN0KDJE
KSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRGYWxzZShsaXN0LnJlbW92ZShEb3VibGUudmFsdWVPZigz
KSkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMkQpLCBsaXN0KTsKLQotICAgIGFzc2VydEVx
dWFscygyRCwgKGRvdWJsZSkgbGlzdC5yZW1vdmUoMCkpOwotICAgIGFzc2VydEVxdWFscyhhc0xp
c3QoKSwgbGlzdCk7Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmVtb3ZlKC0xKTsKLSAg
ICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJl
bW92ZSgwKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAg
ICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYXNzZXJ0SW1t
dXRhYmxlKERvdWJsZUFycmF5TGlzdCBsaXN0KSB7Ci0gICAgaWYgKGxpc3QuY29udGFpbnMoMUQp
KSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2Fubm90IHRlc3QgdGhlIGlt
bXV0YWJpbGl0eSBvZiBsaXN0cyB0aGF0IGNvbnRhaW4gMS4iKTsKLSAgICB9Ci0gICAgCi0gICAg
dHJ5IHsKLSAgICAgIGxpc3QuYWRkKDFEKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAg
IH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGQoMCwgMUQpOwotICAgICAgZmFpbCgp
OwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAg
IC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChD
b2xsZWN0aW9ucy48RG91YmxlPmVtcHR5TGlzdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNh
dGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3Rl
ZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRBbGwoQ29sbGVjdGlvbnMu
c2luZ2xldG9uTGlzdCgxRCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9y
dGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAg
IAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChuZXcgRG91YmxlQXJyYXlMaXN0KCkpOwot
ICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u
IGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBs
aXN0LmFkZEFsbChVTkFSWV9MSVNUKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0K
LSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRBbGwoMCwgQ29sbGVjdGlvbnMuc2luZ2xl
dG9uKDFEKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRp
b25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5
IHsKLSAgICAgIGxpc3QuYWRkQWxsKDAsIFVOQVJZX0xJU1QpOwotICAgICAgZmFpbCgpOwotICAg
IH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4
cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbCgwLCBDb2xs
ZWN0aW9ucy48RG91YmxlPmVtcHR5TGlzdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNo
IChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAot
ICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGREb3VibGUoMCk7Ci0gICAgICBm
YWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewot
ICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuY2xl
YXIoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLQotICAgIHRyeSB7Ci0gICAg
ICBsaXN0LnJlbW92ZSgxKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRl
ZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAK
LSAgICB0cnkgewotICAgICAgbGlzdC5yZW1vdmUobmV3IE9iamVjdCgpKTsKLSAgICAgIGZhaWwo
KTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZW1vdmVB
bGwoQ29sbGVjdGlvbnMuPERvdWJsZT5lbXB0eUxpc3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAg
fSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhw
ZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmVtb3ZlQWxsKENvbGxl
Y3Rpb25zLnNpbmdsZXRvbigxRCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3Vw
cG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQot
ICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZUFsbChVTkFSWV9MSVNUKTsKLSAgICAg
IGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJldGFp
bkFsbChDb2xsZWN0aW9ucy48RG91YmxlPmVtcHR5TGlzdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAg
ICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBl
eHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZXRhaW5BbGwoQ29s
bGVjdGlvbnMuc2luZ2xldG9uKDFEKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5z
dXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9
Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmV0YWluQWxsKFVOQVJZX0xJU1QpOwotICAg
ICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0
LnNldCgwLCAwRCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVy
YXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAg
dHJ5IHsKLSAgICAgIGxpc3Quc2V0RG91YmxlKDAsIDApOwotICAgICAgZmFpbCgpOwotICAgIH0g
Y2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVj
dGVkCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBEb3VibGVBcnJheUxpc3QgbmV3
SW1tdXRhYmxlRG91YmxlQXJyYXlMaXN0KGRvdWJsZS4uLiBlbGVtZW50cykgewotICAgIERvdWJs
ZUFycmF5TGlzdCBsaXN0ID0gbmV3IERvdWJsZUFycmF5TGlzdCgpOwotICAgIGZvciAoZG91Ymxl
IGVsZW1lbnQgOiBlbGVtZW50cykgewotICAgICAgbGlzdC5hZGREb3VibGUoZWxlbWVudCk7Ci0g
ICAgfQotICAgIGxpc3QubWFrZUltbXV0YWJsZSgpOwotICAgIHJldHVybiBsaXN0OwotICB9Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYv
RHluYW1pY01lc3NhZ2VUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvRHluYW1pY01lc3NhZ2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhmM2E3NGMxNTRjMDA1ZjEzOGU3MDIzOTNiY2ZlMDczZDllZmM0NTIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rl
c3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0R5bmFtaWNNZXNzYWdlVGVzdC5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xl
LnByb3RvYnVmLkRlc2NyaXB0b3JzLkVudW1EZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUu
cHJvdG9idWYuRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUu
cHJvdG9idWYuRGVzY3JpcHRvcnMuT25lb2ZEZXNjcmlwdG9yOwotaW1wb3J0IHByb3RvYnVmX3Vu
aXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbEV4dGVuc2lvbnM7Ci1pbXBvcnQgcHJvdG9idWZf
dW5pdHRlc3QuVW5pdHRlc3RQcm90by5UZXN0QWxsVHlwZXM7Ci1pbXBvcnQgcHJvdG9idWZfdW5p
dHRlc3QuVW5pdHRlc3RQcm90by5UZXN0RW1wdHlNZXNzYWdlOwotaW1wb3J0IHByb3RvYnVmX3Vu
aXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdFBhY2tlZFR5cGVzOwotCi1pbXBvcnQganVuaXQuZnJh
bWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotLyoqCi0gKiBV
bml0IHRlc3QgZm9yIHtAbGluayBEeW5hbWljTWVzc2FnZX0uICBTZWUgYWxzbyB7QGxpbmsgTWVz
c2FnZVRlc3R9LCB3aGljaAotICogdGVzdHMgc29tZSB7QGxpbmsgRHluYW1pY01lc3NhZ2V9IGZ1
bmN0aW9uYWxpdHkuCi0gKgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFy
ZGEKLSAqLwotcHVibGljIGNsYXNzIER5bmFtaWNNZXNzYWdlVGVzdCBleHRlbmRzIFRlc3RDYXNl
IHsKLSAgVGVzdFV0aWwuUmVmbGVjdGlvblRlc3RlciByZWZsZWN0aW9uVGVzdGVyID0KLSAgICBu
ZXcgVGVzdFV0aWwuUmVmbGVjdGlvblRlc3RlcihUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigp
LCBudWxsKTsKLQotICBUZXN0VXRpbC5SZWZsZWN0aW9uVGVzdGVyIGV4dGVuc2lvbnNSZWZsZWN0
aW9uVGVzdGVyID0KLSAgICBuZXcgVGVzdFV0aWwuUmVmbGVjdGlvblRlc3RlcihUZXN0QWxsRXh0
ZW5zaW9ucy5nZXREZXNjcmlwdG9yKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGVzdFV0aWwuZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKSk7Ci0gIFRlc3RVdGlsLlJlZmxlY3Rp
b25UZXN0ZXIgcGFja2VkUmVmbGVjdGlvblRlc3RlciA9Ci0gICAgbmV3IFRlc3RVdGlsLlJlZmxl
Y3Rpb25UZXN0ZXIoVGVzdFBhY2tlZFR5cGVzLmdldERlc2NyaXB0b3IoKSwgbnVsbCk7Ci0KLSAg
cHVibGljIHZvaWQgdGVzdER5bmFtaWNNZXNzYWdlQWNjZXNzb3JzKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIgPQotICAgICAgRHluYW1pY01lc3NhZ2Uu
bmV3QnVpbGRlcihUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpKTsKLSAgICByZWZsZWN0aW9u
VGVzdGVyLnNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rpb24oYnVpbGRlcik7Ci0gICAgTWVzc2FnZSBt
ZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIHJlZmxlY3Rpb25UZXN0ZXIuYXNzZXJ0QWxs
RmllbGRzU2V0VmlhUmVmbGVjdGlvbihtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3RTZXR0ZXJzQWZ0ZXJCdWlsZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIE1lc3NhZ2UuQnVp
bGRlciBidWlsZGVyID0KLSAgICAgIER5bmFtaWNNZXNzYWdlLm5ld0J1aWxkZXIoVGVzdEFsbFR5
cGVzLmdldERlc2NyaXB0b3IoKSk7Ci0gICAgTWVzc2FnZSBmaXJzdE1lc3NhZ2UgPSBidWlsZGVy
LmJ1aWxkKCk7Ci0gICAgLy8gZG91YmxlIGJ1aWxkKCkKLSAgICBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgLy8gY2xlYXIoKSBhZnRlciBidWlsZCgpCi0gICAgYnVpbGRlci5jbGVhcigpOwotICAgIC8v
IHNldHRlcnMgYWZ0ZXIgYnVpbGQoKQotICAgIHJlZmxlY3Rpb25UZXN0ZXIuc2V0QWxsRmllbGRz
VmlhUmVmbGVjdGlvbihidWlsZGVyKTsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBidWlsZGVyLmJ1
aWxkKCk7Ci0gICAgcmVmbGVjdGlvblRlc3Rlci5hc3NlcnRBbGxGaWVsZHNTZXRWaWFSZWZsZWN0
aW9uKG1lc3NhZ2UpOwotICAgIC8vIHJlcGVhdGVkIHNldHRlcnMgYWZ0ZXIgYnVpbGQoKQotICAg
IHJlZmxlY3Rpb25UZXN0ZXIubW9kaWZ5UmVwZWF0ZWRGaWVsZHNWaWFSZWZsZWN0aW9uKGJ1aWxk
ZXIpOwotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgcmVmbGVjdGlvblRlc3Rl
ci5hc3NlcnRSZXBlYXRlZEZpZWxkc01vZGlmaWVkVmlhUmVmbGVjdGlvbihtZXNzYWdlKTsKLSAg
ICAvLyBmaXJzdE1lc3NhZ2Ugc2hvdWxkbid0IGhhdmUgYmVlbiBtb2RpZmllZC4KLSAgICByZWZs
ZWN0aW9uVGVzdGVyLmFzc2VydENsZWFyVmlhUmVmbGVjdGlvbihmaXJzdE1lc3NhZ2UpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVua25vd25GaWVsZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciA9Ci0gICAgICAgIER5bmFtaWNNZXNzYWdlLm5l
d0J1aWxkZXIoVGVzdEVtcHR5TWVzc2FnZS5nZXREZXNjcmlwdG9yKCkpOwotICAgIGJ1aWxkZXIu
c2V0VW5rbm93bkZpZWxkcyhVbmtub3duRmllbGRTZXQubmV3QnVpbGRlcigpCi0gICAgICAgIC5h
ZGRGaWVsZCgxLCBVbmtub3duRmllbGRTZXQuRmllbGQubmV3QnVpbGRlcigpLmFkZFZhcmludCgx
KS5idWlsZCgpKQotICAgICAgICAuYWRkRmllbGQoMiwgVW5rbm93bkZpZWxkU2V0LkZpZWxkLm5l
d0J1aWxkZXIoKS5hZGRGaXhlZDMyKDEpLmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgpKTsKLSAg
ICBNZXNzYWdlIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIs
IG1lc3NhZ2UuZ2V0VW5rbm93bkZpZWxkcygpLmFzTWFwKCkuc2l6ZSgpKTsKLSAgICAvLyBjbG9u
ZSgpIHdpdGggdW5rbm93biBmaWVsZHMKLSAgICBNZXNzYWdlLkJ1aWxkZXIgbmV3QnVpbGRlciA9
IGJ1aWxkZXIuY2xvbmUoKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbmV3QnVpbGRlci5nZXRVbmtu
b3duRmllbGRzKCkuYXNNYXAoKS5zaXplKCkpOwotICAgIC8vIGNsZWFyKCkgd2l0aCB1bmtub3du
IGZpZWxkcwotICAgIG5ld0J1aWxkZXIuY2xlYXIoKTsKLSAgICBhc3NlcnRUcnVlKG5ld0J1aWxk
ZXIuZ2V0VW5rbm93bkZpZWxkcygpLmFzTWFwKCkuaXNFbXB0eSgpKTsKLSAgICAvLyBzZXJpYWxp
emUvcGFyc2Ugd2l0aCB1bmtub3duIGZpZWxkcwotICAgIG5ld0J1aWxkZXIubWVyZ2VGcm9tKG1l
c3NhZ2UudG9CeXRlU3RyaW5nKCkpOwotICAgIGFzc2VydEVxdWFscygyLCBuZXdCdWlsZGVyLmdl
dFVua25vd25GaWVsZHMoKS5hc01hcCgpLnNpemUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0RHluYW1pY01lc3NhZ2VTZXR0ZXJzUmVqZWN0TnVsbCgpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyID0KLSAgICAgIER5bmFtaWNNZXNzYWdlLm5ld0J1
aWxkZXIoVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKSk7Ci0gICAgcmVmbGVjdGlvblRlc3Rl
ci5hc3NlcnRSZWZsZWN0aW9uU2V0dGVyc1JlamVjdE51bGwoYnVpbGRlcik7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0RHluYW1pY01lc3NhZ2VFeHRlbnNpb25BY2Nlc3NvcnMoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGV4dGVuc2l2ZWx5IHRlc3QgRHlu
YW1pY01lc3NhZ2UncyBoYW5kbGluZyBvZgotICAgIC8vIGV4dGVuc2lvbnMgYmVjYXVzZSwgZnJh
bmtseSwgaXQgZG9lc24ndCBkbyBhbnl0aGluZyBzcGVjaWFsIHdpdGggdGhlbS4KLSAgICAvLyBJ
dCB0cmVhdHMgdGhlbSBqdXN0IGxpa2UgYW55IG90aGVyIGZpZWxkcy4KLSAgICBNZXNzYWdlLkJ1
aWxkZXIgYnVpbGRlciA9Ci0gICAgICBEeW5hbWljTWVzc2FnZS5uZXdCdWlsZGVyKFRlc3RBbGxF
eHRlbnNpb25zLmdldERlc2NyaXB0b3IoKSk7Ci0gICAgZXh0ZW5zaW9uc1JlZmxlY3Rpb25UZXN0
ZXIuc2V0QWxsRmllbGRzVmlhUmVmbGVjdGlvbihidWlsZGVyKTsKLSAgICBNZXNzYWdlIG1lc3Nh
Z2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgZXh0ZW5zaW9uc1JlZmxlY3Rpb25UZXN0ZXIuYXNz
ZXJ0QWxsRmllbGRzU2V0VmlhUmVmbGVjdGlvbihtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3REeW5hbWljTWVzc2FnZUV4dGVuc2lvblNldHRlcnNSZWplY3ROdWxsKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIgPQotICAgICAgRHluYW1p
Y01lc3NhZ2UubmV3QnVpbGRlcihUZXN0QWxsRXh0ZW5zaW9ucy5nZXREZXNjcmlwdG9yKCkpOwot
ICAgIGV4dGVuc2lvbnNSZWZsZWN0aW9uVGVzdGVyLmFzc2VydFJlZmxlY3Rpb25TZXR0ZXJzUmVq
ZWN0TnVsbChidWlsZGVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3REeW5hbWljTWVzc2Fn
ZVJlcGVhdGVkU2V0dGVycygpIHRocm93cyBFeGNlcHRpb24gewotICAgIE1lc3NhZ2UuQnVpbGRl
ciBidWlsZGVyID0KLSAgICAgIER5bmFtaWNNZXNzYWdlLm5ld0J1aWxkZXIoVGVzdEFsbFR5cGVz
LmdldERlc2NyaXB0b3IoKSk7Ci0gICAgcmVmbGVjdGlvblRlc3Rlci5zZXRBbGxGaWVsZHNWaWFS
ZWZsZWN0aW9uKGJ1aWxkZXIpOwotICAgIHJlZmxlY3Rpb25UZXN0ZXIubW9kaWZ5UmVwZWF0ZWRG
aWVsZHNWaWFSZWZsZWN0aW9uKGJ1aWxkZXIpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGJ1aWxk
ZXIuYnVpbGQoKTsKLSAgICByZWZsZWN0aW9uVGVzdGVyLmFzc2VydFJlcGVhdGVkRmllbGRzTW9k
aWZpZWRWaWFSZWZsZWN0aW9uKG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdER5
bmFtaWNNZXNzYWdlUmVwZWF0ZWRTZXR0ZXJzUmVqZWN0TnVsbCgpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyID0KLSAgICAgIER5bmFtaWNNZXNzYWdlLm5l
d0J1aWxkZXIoVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKSk7Ci0gICAgcmVmbGVjdGlvblRl
c3Rlci5hc3NlcnRSZWZsZWN0aW9uUmVwZWF0ZWRTZXR0ZXJzUmVqZWN0TnVsbChidWlsZGVyKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3REeW5hbWljTWVzc2FnZURlZmF1bHRzKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgcmVmbGVjdGlvblRlc3Rlci5hc3NlcnRDbGVhclZpYVJlZmxlY3Rp
b24oCi0gICAgICBEeW5hbWljTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UoVGVzdEFsbFR5cGVz
LmdldERlc2NyaXB0b3IoKSkpOwotICAgIHJlZmxlY3Rpb25UZXN0ZXIuYXNzZXJ0Q2xlYXJWaWFS
ZWZsZWN0aW9uKAotICAgICAgRHluYW1pY01lc3NhZ2UubmV3QnVpbGRlcihUZXN0QWxsVHlwZXMu
Z2V0RGVzY3JpcHRvcigpKS5idWlsZCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3REeW5h
bWljTWVzc2FnZVNlcmlhbGl6ZWRTaXplKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFs
bFR5cGVzIG1lc3NhZ2UgPSBUZXN0VXRpbC5nZXRBbGxTZXQoKTsKLQotICAgIE1lc3NhZ2UuQnVp
bGRlciBkeW5hbWljQnVpbGRlciA9Ci0gICAgICBEeW5hbWljTWVzc2FnZS5uZXdCdWlsZGVyKFRl
c3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCkpOwotICAgIHJlZmxlY3Rpb25UZXN0ZXIuc2V0QWxs
RmllbGRzVmlhUmVmbGVjdGlvbihkeW5hbWljQnVpbGRlcik7Ci0gICAgTWVzc2FnZSBkeW5hbWlj
TWVzc2FnZSA9IGR5bmFtaWNCdWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMobWVz
c2FnZS5nZXRTZXJpYWxpemVkU2l6ZSgpLAotICAgICAgICAgICAgICAgICBkeW5hbWljTWVzc2Fn
ZS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3REeW5hbWlj
TWVzc2FnZVNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBNZXNzYWdlLkJ1
aWxkZXIgYnVpbGRlciA9Ci0gICAgICBEeW5hbWljTWVzc2FnZS5uZXdCdWlsZGVyKFRlc3RBbGxU
eXBlcy5nZXREZXNjcmlwdG9yKCkpOwotICAgIHJlZmxlY3Rpb25UZXN0ZXIuc2V0QWxsRmllbGRz
VmlhUmVmbGVjdGlvbihidWlsZGVyKTsKLSAgICBNZXNzYWdlIG1lc3NhZ2UgPSBidWlsZGVyLmJ1
aWxkKCk7Ci0KLSAgICBCeXRlU3RyaW5nIHJhd0J5dGVzID0gbWVzc2FnZS50b0J5dGVTdHJpbmco
KTsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZTIgPSBUZXN0QWxsVHlwZXMucGFyc2VGcm9tKHJh
d0J5dGVzKTsKLQotICAgIFRlc3RVdGlsLmFzc2VydEFsbEZpZWxkc1NldChtZXNzYWdlMik7Ci0K
LSAgICAvLyBJbiBmYWN0LCB0aGUgc2VyaWFsaXplZCBmb3JtcyBzaG91bGQgYmUgZXhhY3RseSB0
aGUgc2FtZSwgYnl0ZS1mb3ItYnl0ZS4KLSAgICBhc3NlcnRFcXVhbHMoVGVzdFV0aWwuZ2V0QWxs
U2V0KCkudG9CeXRlU3RyaW5nKCksIHJhd0J5dGVzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3REeW5hbWljTWVzc2FnZVBhcnNpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxs
VHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBU
ZXN0VXRpbC5zZXRBbGxGaWVsZHMoYnVpbGRlcik7Ci0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2Ug
PSBidWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBCeXRlU3RyaW5nIHJhd0J5dGVzID0gbWVzc2FnZS50
b0J5dGVTdHJpbmcoKTsKLQotICAgIE1lc3NhZ2UgbWVzc2FnZTIgPQotICAgICAgRHluYW1pY01l
c3NhZ2UucGFyc2VGcm9tKFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCksIHJhd0J5dGVzKTsK
LSAgICByZWZsZWN0aW9uVGVzdGVyLmFzc2VydEFsbEZpZWxkc1NldFZpYVJlZmxlY3Rpb24obWVz
c2FnZTIpOwotCi0gICAgLy8gVGVzdCBQYXJzZXIgaW50ZXJmYWNlLgotICAgIE1lc3NhZ2UgbWVz
c2FnZTMgPSBtZXNzYWdlMi5nZXRQYXJzZXJGb3JUeXBlKCkucGFyc2VGcm9tKHJhd0J5dGVzKTsK
LSAgICByZWZsZWN0aW9uVGVzdGVyLmFzc2VydEFsbEZpZWxkc1NldFZpYVJlZmxlY3Rpb24obWVz
c2FnZTMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdER5bmFtaWNNZXNzYWdlRXh0ZW5zaW9u
UGFyc2luZygpIHRocm93cyBFeGNlcHRpb24gewotICAgIEJ5dGVTdHJpbmcgcmF3Qnl0ZXMgPSBU
ZXN0VXRpbC5nZXRBbGxFeHRlbnNpb25zU2V0KCkudG9CeXRlU3RyaW5nKCk7Ci0gICAgTWVzc2Fn
ZSBtZXNzYWdlID0gRHluYW1pY01lc3NhZ2UucGFyc2VGcm9tKAotICAgICAgICBUZXN0QWxsRXh0
ZW5zaW9ucy5nZXREZXNjcmlwdG9yKCksIHJhd0J5dGVzLAotICAgICAgICBUZXN0VXRpbC5nZXRF
eHRlbnNpb25SZWdpc3RyeSgpKTsKLSAgICBleHRlbnNpb25zUmVmbGVjdGlvblRlc3Rlci5hc3Nl
cnRBbGxGaWVsZHNTZXRWaWFSZWZsZWN0aW9uKG1lc3NhZ2UpOwotCi0gICAgLy8gVGVzdCBQYXJz
ZXIgaW50ZXJmYWNlLgotICAgIE1lc3NhZ2UgbWVzc2FnZTIgPSBtZXNzYWdlLmdldFBhcnNlckZv
clR5cGUoKS5wYXJzZUZyb20oCi0gICAgICAgIHJhd0J5dGVzLCBUZXN0VXRpbC5nZXRFeHRlbnNp
b25SZWdpc3RyeSgpKTsKLSAgICBleHRlbnNpb25zUmVmbGVjdGlvblRlc3Rlci5hc3NlcnRBbGxG
aWVsZHNTZXRWaWFSZWZsZWN0aW9uKG1lc3NhZ2UyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3REeW5hbWljTWVzc2FnZVBhY2tlZFNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciA9Ci0gICAgICAgIER5bmFtaWNNZXNzYWdlLm5l
d0J1aWxkZXIoVGVzdFBhY2tlZFR5cGVzLmdldERlc2NyaXB0b3IoKSk7Ci0gICAgcGFja2VkUmVm
bGVjdGlvblRlc3Rlci5zZXRQYWNrZWRGaWVsZHNWaWFSZWZsZWN0aW9uKGJ1aWxkZXIpOwotICAg
IE1lc3NhZ2UgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLQotICAgIEJ5dGVTdHJpbmcgcmF3
Qnl0ZXMgPSBtZXNzYWdlLnRvQnl0ZVN0cmluZygpOwotICAgIFRlc3RQYWNrZWRUeXBlcyBtZXNz
YWdlMiA9IFRlc3RQYWNrZWRUeXBlcy5wYXJzZUZyb20ocmF3Qnl0ZXMpOwotCi0gICAgVGVzdFV0
aWwuYXNzZXJ0UGFja2VkRmllbGRzU2V0KG1lc3NhZ2UyKTsKLQotICAgIC8vIEluIGZhY3QsIHRo
ZSBzZXJpYWxpemVkIGZvcm1zIHNob3VsZCBiZSBleGFjdGx5IHRoZSBzYW1lLCBieXRlLWZvci1i
eXRlLgotICAgIGFzc2VydEVxdWFscyhUZXN0VXRpbC5nZXRQYWNrZWRTZXQoKS50b0J5dGVTdHJp
bmcoKSwgcmF3Qnl0ZXMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdER5bmFtaWNNZXNzYWdl
UGFja2VkUGFyc2luZygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RQYWNrZWRUeXBlcy5C
dWlsZGVyIGJ1aWxkZXIgPSBUZXN0UGFja2VkVHlwZXMubmV3QnVpbGRlcigpOwotICAgIFRlc3RV
dGlsLnNldFBhY2tlZEZpZWxkcyhidWlsZGVyKTsKLSAgICBUZXN0UGFja2VkVHlwZXMgbWVzc2Fn
ZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLQotICAgIEJ5dGVTdHJpbmcgcmF3Qnl0ZXMgPSBtZXNzYWdl
LnRvQnl0ZVN0cmluZygpOwotCi0gICAgTWVzc2FnZSBtZXNzYWdlMiA9Ci0gICAgICBEeW5hbWlj
TWVzc2FnZS5wYXJzZUZyb20oVGVzdFBhY2tlZFR5cGVzLmdldERlc2NyaXB0b3IoKSwgcmF3Qnl0
ZXMpOwotICAgIHBhY2tlZFJlZmxlY3Rpb25UZXN0ZXIuYXNzZXJ0UGFja2VkRmllbGRzU2V0Vmlh
UmVmbGVjdGlvbihtZXNzYWdlMik7Ci0KLSAgICAvLyBUZXN0IFBhcnNlciBpbnRlcmZhY2UuCi0g
ICAgTWVzc2FnZSBtZXNzYWdlMyA9IG1lc3NhZ2UyLmdldFBhcnNlckZvclR5cGUoKS5wYXJzZUZy
b20ocmF3Qnl0ZXMpOwotICAgIHBhY2tlZFJlZmxlY3Rpb25UZXN0ZXIuYXNzZXJ0UGFja2VkRmll
bGRzU2V0VmlhUmVmbGVjdGlvbihtZXNzYWdlMyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
RHluYW1pY01lc3NhZ2VDb3B5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVz
LkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgVGVzdFV0
aWwuc2V0QWxsRmllbGRzKGJ1aWxkZXIpOwotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0gYnVp
bGRlci5idWlsZCgpOwotCi0gICAgRHluYW1pY01lc3NhZ2UgY29weSA9IER5bmFtaWNNZXNzYWdl
Lm5ld0J1aWxkZXIobWVzc2FnZSkuYnVpbGQoKTsKLSAgICByZWZsZWN0aW9uVGVzdGVyLmFzc2Vy
dEFsbEZpZWxkc1NldFZpYVJlZmxlY3Rpb24oY29weSk7Ci0KLSAgICAvLyBUZXN0IG9uZW9mIGJl
aGF2aW9yCi0gICAgRmllbGREZXNjcmlwdG9yIGJ5dGVzRmllbGQgPQotICAgICAgICBUZXN0QWxs
VHlwZXMuZ2V0RGVzY3JpcHRvcigpLmZpbmRGaWVsZEJ5TmFtZSgib25lb2ZfYnl0ZXMiKTsKLSAg
ICBGaWVsZERlc2NyaXB0b3IgdWludDMyRmllbGQgPQotICAgICAgICBUZXN0QWxsVHlwZXMuZ2V0
RGVzY3JpcHRvcigpLmZpbmRGaWVsZEJ5TmFtZSgib25lb2ZfdWludDMyIik7Ci0gICAgYXNzZXJ0
VHJ1ZShjb3B5Lmhhc0ZpZWxkKGJ5dGVzRmllbGQpKTsKLSAgICBhc3NlcnRGYWxzZShjb3B5Lmhh
c0ZpZWxkKHVpbnQzMkZpZWxkKSk7Ci0gICAgRHluYW1pY01lc3NhZ2UgY29weTIgPQotICAgICAg
ICBEeW5hbWljTWVzc2FnZS5uZXdCdWlsZGVyKG1lc3NhZ2UpLnNldEZpZWxkKHVpbnQzMkZpZWxk
LCAxMjMpLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2UoY29weTIuaGFzRmllbGQoYnl0ZXNGaWVs
ZCkpOwotICAgIGFzc2VydFRydWUoY29weTIuaGFzRmllbGQodWludDMyRmllbGQpKTsKLSAgICBh
c3NlcnRFcXVhbHMoMTIzLCBjb3B5Mi5nZXRGaWVsZCh1aW50MzJGaWVsZCkpOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdFRvQnVpbGRlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgIER5bmFt
aWNNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciA9Ci0gICAgICAgIER5bmFtaWNNZXNzYWdlLm5ld0J1
aWxkZXIoVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKSk7Ci0gICAgcmVmbGVjdGlvblRlc3Rl
ci5zZXRBbGxGaWVsZHNWaWFSZWZsZWN0aW9uKGJ1aWxkZXIpOwotICAgIGludCB1bmtub3duRmll
bGROdW0gPSA5OwotICAgIGxvbmcgdW5rbm93bkZpZWxkVmFsID0gOTA7Ci0gICAgYnVpbGRlci5z
ZXRVbmtub3duRmllbGRzKFVua25vd25GaWVsZFNldC5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFk
ZEZpZWxkKHVua25vd25GaWVsZE51bSwKLSAgICAgICAgICAgIFVua25vd25GaWVsZFNldC5GaWVs
ZC5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgICAgICAuYWRkVmFyaW50KHVua25vd25GaWVsZFZh
bCkuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCkpOwotICAgIER5bmFtaWNNZXNzYWdlIG1lc3Nh
Z2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBEeW5hbWljTWVzc2FnZSBkZXJpdmVkID0gbWVz
c2FnZS50b0J1aWxkZXIoKS5idWlsZCgpOwotICAgIHJlZmxlY3Rpb25UZXN0ZXIuYXNzZXJ0QWxs
RmllbGRzU2V0VmlhUmVmbGVjdGlvbihkZXJpdmVkKTsKLSAgICBhc3NlcnRFcXVhbHMoQXJyYXlz
LmFzTGlzdCh1bmtub3duRmllbGRWYWwpLAotICAgICAgICBkZXJpdmVkLmdldFVua25vd25GaWVs
ZHMoKS5nZXRGaWVsZCh1bmtub3duRmllbGROdW0pLmdldFZhcmludExpc3QoKSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0RHluYW1pY09uZW9mTWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIER5bmFtaWNNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciA9Ci0gICAgICAgIER5bmFtaWNN
ZXNzYWdlLm5ld0J1aWxkZXIoVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKSk7Ci0gICAgT25l
b2ZEZXNjcmlwdG9yIG9uZW9mID0gVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKS5nZXRPbmVv
ZnMoKS5nZXQoMCk7Ci0gICAgYXNzZXJ0RmFsc2UoYnVpbGRlci5oYXNPbmVvZihvbmVvZikpOwot
ICAgIGFzc2VydFNhbWUobnVsbCwgYnVpbGRlci5nZXRPbmVvZkZpZWxkRGVzY3JpcHRvcihvbmVv
ZikpOwotCi0gICAgcmVmbGVjdGlvblRlc3Rlci5zZXRBbGxGaWVsZHNWaWFSZWZsZWN0aW9uKGJ1
aWxkZXIpOwotICAgIGFzc2VydFRydWUoYnVpbGRlci5oYXNPbmVvZihvbmVvZikpOwotICAgIEZp
ZWxkRGVzY3JpcHRvciBmaWVsZCA9IG9uZW9mLmdldEZpZWxkKDMpOwotICAgIGFzc2VydFNhbWUo
ZmllbGQsIGJ1aWxkZXIuZ2V0T25lb2ZGaWVsZERlc2NyaXB0b3Iob25lb2YpKTsKLQotICAgIER5
bmFtaWNNZXNzYWdlIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwotICAgIGFzc2Vy
dFRydWUobWVzc2FnZS5oYXNPbmVvZihvbmVvZikpOwotCi0gICAgRHluYW1pY01lc3NhZ2UuQnVp
bGRlciBtZXJnZWRCdWlsZGVyID0KLSAgICAgICAgRHluYW1pY01lc3NhZ2UubmV3QnVpbGRlcihU
ZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgbWVyZ2Vk
RmllbGQgPSBvbmVvZi5nZXRGaWVsZCgwKTsKLSAgICBtZXJnZWRCdWlsZGVyLnNldEZpZWxkKG1l
cmdlZEZpZWxkLCAxMjMpOwotICAgIGFzc2VydFRydWUobWVyZ2VkQnVpbGRlci5oYXNGaWVsZCht
ZXJnZWRGaWVsZCkpOwotICAgIG1lcmdlZEJ1aWxkZXIubWVyZ2VGcm9tKG1lc3NhZ2UpOwotICAg
IGFzc2VydFRydWUobWVyZ2VkQnVpbGRlci5oYXNGaWVsZChmaWVsZCkpOwotICAgIGFzc2VydEZh
bHNlKG1lcmdlZEJ1aWxkZXIuaGFzRmllbGQobWVyZ2VkRmllbGQpKTsKLQotICAgIGJ1aWxkZXIu
Y2xlYXJPbmVvZihvbmVvZik7Ci0gICAgYXNzZXJ0U2FtZShudWxsLCBidWlsZGVyLmdldE9uZW9m
RmllbGREZXNjcmlwdG9yKG9uZW9mKSk7Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsK
LSAgICBhc3NlcnRTYW1lKG51bGwsIG1lc3NhZ2UuZ2V0T25lb2ZGaWVsZERlc2NyaXB0b3Iob25l
b2YpKTsKLSAgfQotCi0gIC8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBidWcgdGhhdCBtYWtlcyBz
ZXRGaWVsZCgpIG5vdCB3b3JrIGZvciByZXBlYXRlZAotICAvLyBlbnVtIGZpZWxkcy4KLSAgcHVi
bGljIHZvaWQgdGVzdFNldHRlcnNGb3JSZXBlYXRlZEVudW1GaWVsZCgpIHRocm93cyBFeGNlcHRp
b24gewotICAgIER5bmFtaWNNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciA9Ci0gICAgICAgIER5bmFt
aWNNZXNzYWdlLm5ld0J1aWxkZXIoVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKSk7Ci0gICAg
RmllbGREZXNjcmlwdG9yIHJlcGVhdGVkRW51bUZpZWxkID0KLSAgICAgICAgVGVzdEFsbFR5cGVz
LmdldERlc2NyaXB0b3IoKS5maW5kRmllbGRCeU5hbWUoCi0gICAgICAgICAgICAicmVwZWF0ZWRf
bmVzdGVkX2VudW0iKTsKLSAgICBFbnVtRGVzY3JpcHRvciBlbnVtRGVzY3JpcHRvciA9IFRlc3RB
bGxUeXBlcy5OZXN0ZWRFbnVtLmdldERlc2NyaXB0b3IoKTsKLSAgICBidWlsZGVyLnNldEZpZWxk
KHJlcGVhdGVkRW51bUZpZWxkLCBlbnVtRGVzY3JpcHRvci5nZXRWYWx1ZXMoKSk7Ci0gICAgRHlu
YW1pY01lc3NhZ2UgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMo
Ci0gICAgICAgIGVudW1EZXNjcmlwdG9yLmdldFZhbHVlcygpLCBtZXNzYWdlLmdldEZpZWxkKHJl
cGVhdGVkRW51bUZpZWxkKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9FbnVtVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rl
c3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0VudW1UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE0Yzc0MDZiM2Q2YmFiZTFlZTQ1OWRmYjk2NDA2NjQ3NzgwN2M1OGIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUv
c3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0VudW1UZXN0LmphdmEKKysrIC9kZXYv
bnVsbApAQCAtMSw3NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90
b2J1Zi5Vbml0dGVzdExpdGUuRm9yZWlnbkVudW1MaXRlOwotaW1wb3J0IGNvbS5nb29nbGUucHJv
dG9idWYuVW5pdHRlc3RMaXRlLlRlc3RBbGxUeXBlc0xpdGU7Ci1pbXBvcnQgcHJvdG9idWZfdW5p
dHRlc3QuVW5pdHRlc3RQcm90by5Gb3JlaWduRW51bTsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVz
dC5Vbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5U
ZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIEVudW1UZXN0IGV4dGVuZHMgVGVzdENhc2UgewotICAK
LSAgcHVibGljIHZvaWQgdGVzdEZvck51bWJlcigpIHsKLSAgICBGb3JlaWduRW51bSBlID0gRm9y
ZWlnbkVudW0uZm9yTnVtYmVyKEZvcmVpZ25FbnVtLkZPUkVJR05fQkFSLmdldE51bWJlcigpKTsK
LSAgICBhc3NlcnRFcXVhbHMoRm9yZWlnbkVudW0uRk9SRUlHTl9CQVIsIGUpOwotCi0gICAgZSA9
IEZvcmVpZ25FbnVtLmZvck51bWJlcigxMDAwKTsKLSAgICBhc3NlcnRFcXVhbHMobnVsbCwgZSk7
Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RGb3JOdW1iZXJfb25lb2YoKSB7Ci0gICAgVGVz
dEFsbFR5cGVzLk9uZW9mRmllbGRDYXNlIGUgPSBUZXN0QWxsVHlwZXMuT25lb2ZGaWVsZENhc2Uu
Zm9yTnVtYmVyKAotICAgICAgICBUZXN0QWxsVHlwZXMuT25lb2ZGaWVsZENhc2UuT05FT0ZfTkVT
VEVEX01FU1NBR0UuZ2V0TnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMu
T25lb2ZGaWVsZENhc2UuT05FT0ZfTkVTVEVEX01FU1NBR0UsIGUpOwotCi0gICAgZSA9IFRlc3RB
bGxUeXBlcy5PbmVvZkZpZWxkQ2FzZS5mb3JOdW1iZXIoMTAwMCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KG51bGwsIGUpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Rm9yTnVtYmVyTGl0ZSgpIHsK
LSAgICBGb3JlaWduRW51bUxpdGUgZSA9IEZvcmVpZ25FbnVtTGl0ZS5mb3JOdW1iZXIoRm9yZWln
bkVudW1MaXRlLkZPUkVJR05fTElURV9CQVIuZ2V0TnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFs
cyhGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUiwgZSk7Ci0KLSAgICBlID0gRm9yZWln
bkVudW1MaXRlLmZvck51bWJlcigxMDAwKTsKLSAgICBhc3NlcnRFcXVhbHMobnVsbCwgZSk7Ci0g
IH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RGb3JOdW1iZXJMaXRlX29uZW9mKCkgewotICAgIFRl
c3RBbGxUeXBlc0xpdGUuT25lb2ZGaWVsZENhc2UgZSA9IFRlc3RBbGxUeXBlc0xpdGUuT25lb2ZG
aWVsZENhc2UuZm9yTnVtYmVyKAotICAgICAgICBUZXN0QWxsVHlwZXNMaXRlLk9uZW9mRmllbGRD
YXNlLk9ORU9GX05FU1RFRF9NRVNTQUdFLmdldE51bWJlcigpKTsKLSAgICBhc3NlcnRFcXVhbHMo
VGVzdEFsbFR5cGVzTGl0ZS5PbmVvZkZpZWxkQ2FzZS5PTkVPRl9ORVNURURfTUVTU0FHRSwgZSk7
Ci0KLSAgICBlID0gVGVzdEFsbFR5cGVzTGl0ZS5PbmVvZkZpZWxkQ2FzZS5mb3JOdW1iZXIoMTAw
MCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG51bGwsIGUpOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9GaWVsZFByZXNlbmNlVGVz
dC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0ZpZWxk
UHJlc2VuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGNlYzRm
ODcxYWFhMDAxNGM3NWRjNGNjNTc2NzcxNGQ2NjhjZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL0ZpZWxkUHJlc2VuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzMg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29t
Lmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
cnMuRGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZp
ZWxkRGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkZpZWxkUHJlc2VuY2VU
ZXN0UHJvdG8uVGVzdEFsbFR5cGVzOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRmllbGRQ
cmVzZW5jZVRlc3RQcm90by5UZXN0T3B0aW9uYWxGaWVsZHNPbmx5OwotaW1wb3J0IGNvbS5nb29n
bGUucHJvdG9idWYuRmllbGRQcmVzZW5jZVRlc3RQcm90by5UZXN0UmVwZWF0ZWRGaWVsZHNPbmx5
OwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG87Ci0KLWltcG9ydCBqdW5p
dC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVW5pdCB0ZXN0cyBmb3IgcHJvdG9zIHRo
YXQgZG9lc24ndCBzdXBwb3J0IGZpZWxkIHByZXNlbmNlIHRlc3QgZm9yIG9wdGlvbmFsCi0gKiBu
b24tbWVzc2FnZSBmaWVsZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWVsZFByZXNlbmNlVGVzdCBl
eHRlbmRzIFRlc3RDYXNlIHsKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNNZXRob2QoQ2xh
c3M8Pz4gY2xhenosIFN0cmluZyBuYW1lKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGlmIChjbGF6ei5n
ZXRNZXRob2QobmFtZSkgIT0gbnVsbCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChOb1N1
Y2hNZXRob2RFeGNlcHRpb24gZSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0SGFzTWV0aG9kUmVtb3ZlZCgKLSAgICAgIENs
YXNzPD8+IGNsYXNzV2l0aEZpZWxkUHJlc2VuY2UsCi0gICAgICBDbGFzczw/PiBjbGFzc1dpdGhv
dXRGaWVsZFByZXNlbmNlLAotICAgICAgU3RyaW5nIGNhbWVsTmFtZSkgewotICAgIGFzc2VydFRy
dWUoaGFzTWV0aG9kKGNsYXNzV2l0aEZpZWxkUHJlc2VuY2UsICJnZXQiICsgY2FtZWxOYW1lKSk7
Ci0gICAgYXNzZXJ0VHJ1ZShoYXNNZXRob2QoY2xhc3NXaXRoRmllbGRQcmVzZW5jZSwgImhhcyIg
KyBjYW1lbE5hbWUpKTsKLSAgICBhc3NlcnRUcnVlKGhhc01ldGhvZChjbGFzc1dpdGhvdXRGaWVs
ZFByZXNlbmNlLCAiZ2V0IiArIGNhbWVsTmFtZSkpOwotICAgIGFzc2VydEZhbHNlKGhhc01ldGhv
ZChjbGFzc1dpdGhvdXRGaWVsZFByZXNlbmNlLCAiaGFzIiArIGNhbWVsTmFtZSkpOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdEhhc01ldGhvZCgpIHsKLSAgICAvLyBPcHRpb25hbCBub24tbWVz
c2FnZSBmaWVsZHMgZG9uJ3QgaGF2ZSBhIGhhc0ZvbygpIG1ldGhvZCBnZW5lcmF0ZWQuCi0gICAg
YXNzZXJ0SGFzTWV0aG9kUmVtb3ZlZCgKLSAgICAgICAgVW5pdHRlc3RQcm90by5UZXN0QWxsVHlw
ZXMuY2xhc3MsCi0gICAgICAgIFRlc3RBbGxUeXBlcy5jbGFzcywKLSAgICAgICAgIk9wdGlvbmFs
SW50MzIiKTsKLSAgICBhc3NlcnRIYXNNZXRob2RSZW1vdmVkKAotICAgICAgICBVbml0dGVzdFBy
b3RvLlRlc3RBbGxUeXBlcy5jbGFzcywKLSAgICAgICAgVGVzdEFsbFR5cGVzLmNsYXNzLAotICAg
ICAgICAiT3B0aW9uYWxTdHJpbmciKTsKLSAgICBhc3NlcnRIYXNNZXRob2RSZW1vdmVkKAotICAg
ICAgICBVbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlcy5jbGFzcywKLSAgICAgICAgVGVzdEFsbFR5
cGVzLmNsYXNzLAotICAgICAgICAiT3B0aW9uYWxCeXRlcyIpOwotICAgIGFzc2VydEhhc01ldGhv
ZFJlbW92ZWQoCi0gICAgICAgIFVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzLmNsYXNzLAotICAg
ICAgICBUZXN0QWxsVHlwZXMuY2xhc3MsCi0gICAgICAgICJPcHRpb25hbE5lc3RlZEVudW0iKTsK
LQotICAgIGFzc2VydEhhc01ldGhvZFJlbW92ZWQoCi0gICAgICAgIFVuaXR0ZXN0UHJvdG8uVGVz
dEFsbFR5cGVzLkJ1aWxkZXIuY2xhc3MsCi0gICAgICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyLmNs
YXNzLAotICAgICAgICAiT3B0aW9uYWxJbnQzMiIpOwotICAgIGFzc2VydEhhc01ldGhvZFJlbW92
ZWQoCi0gICAgICAgIFVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzLkJ1aWxkZXIuY2xhc3MsCi0g
ICAgICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyLmNsYXNzLAotICAgICAgICAiT3B0aW9uYWxTdHJp
bmciKTsKLSAgICBhc3NlcnRIYXNNZXRob2RSZW1vdmVkKAotICAgICAgICBVbml0dGVzdFByb3Rv
LlRlc3RBbGxUeXBlcy5CdWlsZGVyLmNsYXNzLAotICAgICAgICBUZXN0QWxsVHlwZXMuQnVpbGRl
ci5jbGFzcywKLSAgICAgICAgIk9wdGlvbmFsQnl0ZXMiKTsKLSAgICBhc3NlcnRIYXNNZXRob2RS
ZW1vdmVkKAotICAgICAgICBVbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlcy5CdWlsZGVyLmNsYXNz
LAotICAgICAgICBUZXN0QWxsVHlwZXMuQnVpbGRlci5jbGFzcywKLSAgICAgICAgIk9wdGlvbmFs
TmVzdGVkRW51bSIpOwotCi0gICAgLy8gbWVzc2FnZSBmaWVsZHMgc3RpbGwgaGF2ZSB0aGUgaGFz
Rm9vKCkgbWV0aG9kIGdlbmVyYXRlZC4KLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXMubmV3
QnVpbGRlcigpLmJ1aWxkKCkuaGFzT3B0aW9uYWxOZXN0ZWRNZXNzYWdlKCkpOwotICAgIGFzc2Vy
dEZhbHNlKFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuaGFzT3B0aW9uYWxOZXN0ZWRNZXNzYWdl
KCkpOwotCi0gICAgLy8gb25lb2YgZmllbGRzIGRvbid0IGhhdmUgaGFzRm9vKCkgbWV0aG9kcyAo
ZXZlbiBmb3IgbWVzc2FnZSB0eXBlcykuCi0gICAgYXNzZXJ0SGFzTWV0aG9kUmVtb3ZlZCgKLSAg
ICAgICAgVW5pdHRlc3RQcm90by5UZXN0QWxsVHlwZXMuY2xhc3MsCi0gICAgICAgIFRlc3RBbGxU
eXBlcy5jbGFzcywKLSAgICAgICAgIk9uZW9mVWludDMyIik7Ci0gICAgYXNzZXJ0SGFzTWV0aG9k
UmVtb3ZlZCgKLSAgICAgICAgVW5pdHRlc3RQcm90by5UZXN0QWxsVHlwZXMuY2xhc3MsCi0gICAg
ICAgIFRlc3RBbGxUeXBlcy5jbGFzcywKLSAgICAgICAgIk9uZW9mU3RyaW5nIik7Ci0gICAgYXNz
ZXJ0SGFzTWV0aG9kUmVtb3ZlZCgKLSAgICAgICAgVW5pdHRlc3RQcm90by5UZXN0QWxsVHlwZXMu
Y2xhc3MsCi0gICAgICAgIFRlc3RBbGxUeXBlcy5jbGFzcywKLSAgICAgICAgIk9uZW9mQnl0ZXMi
KTsKLSAgICBhc3NlcnRIYXNNZXRob2RSZW1vdmVkKAotICAgICAgICBVbml0dGVzdFByb3RvLlRl
c3RBbGxUeXBlcy5jbGFzcywKLSAgICAgICAgVGVzdEFsbFR5cGVzLmNsYXNzLAotICAgICAgICAi
T25lb2ZOZXN0ZWRNZXNzYWdlIik7Ci0KLSAgICBhc3NlcnRIYXNNZXRob2RSZW1vdmVkKAotICAg
ICAgICBVbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlcy5CdWlsZGVyLmNsYXNzLAotICAgICAgICBU
ZXN0QWxsVHlwZXMuQnVpbGRlci5jbGFzcywKLSAgICAgICAgIk9uZW9mVWludDMyIik7Ci0gICAg
YXNzZXJ0SGFzTWV0aG9kUmVtb3ZlZCgKLSAgICAgICAgVW5pdHRlc3RQcm90by5UZXN0QWxsVHlw
ZXMuQnVpbGRlci5jbGFzcywKLSAgICAgICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIuY2xhc3MsCi0g
ICAgICAgICJPbmVvZlN0cmluZyIpOwotICAgIGFzc2VydEhhc01ldGhvZFJlbW92ZWQoCi0gICAg
ICAgIFVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzLkJ1aWxkZXIuY2xhc3MsCi0gICAgICAgIFRl
c3RBbGxUeXBlcy5CdWlsZGVyLmNsYXNzLAotICAgICAgICAiT25lb2ZCeXRlcyIpOwotICAgIGFz
c2VydEhhc01ldGhvZFJlbW92ZWQoCi0gICAgICAgIFVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVz
LkJ1aWxkZXIuY2xhc3MsCi0gICAgICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyLmNsYXNzLAotICAg
ICAgICAiT25lb2ZOZXN0ZWRNZXNzYWdlIik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T25l
b2ZFcXVhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBi
dWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0QWxsVHlwZXMgbWVz
c2FnZTEgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgLy8gU2V0IG1lc3NhZ2UyJ3Mgb25lb2ZfdWlu
dDMyIGZpZWxkIHRvIGRlZmFsdXQgdmFsdWUuIFRoZSB0d28KLSAgICAvLyBtZXNzYWdlcyBzaG91
bGQgYmUgZGlmZmVyZW50IHdoZW4gY2hlY2sgd2l0aCBvbmVvZiBjYXNlLgotICAgIGJ1aWxkZXIu
c2V0T25lb2ZVaW50MzIoMCk7Ci0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UyID0gYnVpbGRlci5i
dWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UxLmVxdWFscyhtZXNzYWdlMikpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgdGVzdEZpZWxkUHJlc2VuY2UoKSB7Ci0gICAgLy8gT3B0aW9uYWwg
bm9uLW1lc3NhZ2UgZmllbGRzIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlIGFyZSB0cmVhdGVk
IHRoZQotICAgIC8vIHNhbWUgd2F5IGFzIG5vdCBzZXQuCi0KLSAgICAvLyBTZXJpYWxpemF0aW9u
IHdpbGwgaWdub3JlIHN1Y2ggZmllbGRzLgotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxk
ZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxJ
bnQzMigwKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsU3RyaW5nKCIiKTsKLSAgICBidWlsZGVy
LnNldE9wdGlvbmFsQnl0ZXMoQnl0ZVN0cmluZy5FTVBUWSk7Ci0gICAgYnVpbGRlci5zZXRPcHRp
b25hbE5lc3RlZEVudW0oVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uRk9PKTsKLSAgICBUZXN0QWxs
VHlwZXMgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVz
c2FnZS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLQotICAgIC8vIG1lcmdlRnJvbSgpIHdpbGwgaWdu
b3JlIHN1Y2ggZmllbGRzLgotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGEgPSBUZXN0QWxsVHlw
ZXMubmV3QnVpbGRlcigpOwotICAgIGEuc2V0T3B0aW9uYWxJbnQzMigxKTsKLSAgICBhLnNldE9w
dGlvbmFsU3RyaW5nKCJ4Iik7Ci0gICAgYS5zZXRPcHRpb25hbEJ5dGVzKEJ5dGVTdHJpbmcuY29w
eUZyb21VdGY4KCJ5IikpOwotICAgIGEuc2V0T3B0aW9uYWxOZXN0ZWRFbnVtKFRlc3RBbGxUeXBl
cy5OZXN0ZWRFbnVtLkJBUik7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYiA9IFRlc3RBbGxU
eXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgYi5zZXRPcHRpb25hbEludDMyKDApOwotICAgIGIuc2V0
T3B0aW9uYWxTdHJpbmcoIiIpOwotICAgIGIuc2V0T3B0aW9uYWxCeXRlcyhCeXRlU3RyaW5nLkVN
UFRZKTsKLSAgICBiLnNldE9wdGlvbmFsTmVzdGVkRW51bShUZXN0QWxsVHlwZXMuTmVzdGVkRW51
bS5GT08pOwotICAgIGEubWVyZ2VGcm9tKGIuYnVpbGQoKSk7Ci0gICAgbWVzc2FnZSA9IGEuYnVp
bGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbWVzc2FnZS5nZXRPcHRpb25hbEludDMyKCkpOwot
ICAgIGFzc2VydEVxdWFscygieCIsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxTdHJpbmcoKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJ5IiksIG1lc3NhZ2UuZ2V0T3B0
aW9uYWxCeXRlcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0u
QkFSLCBtZXNzYWdlLmdldE9wdGlvbmFsTmVzdGVkRW51bSgpKTsKLQotICAgIC8vIGVxdWFscygp
L2hhc2hDb2RlKCkgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgcmVzdWx0cy4KLSAgICBUZXN0QWxs
VHlwZXMgZW1wdHkgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgbWVz
c2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRUcnVlKGVtcHR5LmVxdWFscyhtZXNz
YWdlKSk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmVxdWFscyhlbXB0eSkpOwotICAgIGFzc2Vy
dEVxdWFscyhlbXB0eS5oYXNoQ29kZSgpLCBtZXNzYWdlLmhhc2hDb2RlKCkpOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdEZpZWxkUHJlc2VuY2VCeVJlZmxlY3Rpb24oKSB7Ci0gICAgRGVzY3Jp
cHRvciBkZXNjcmlwdG9yID0gVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKTsKLSAgICBGaWVs
ZERlc2NyaXB0b3Igb3B0aW9uYWxJbnQzMkZpZWxkID0gZGVzY3JpcHRvci5maW5kRmllbGRCeU5h
bWUoIm9wdGlvbmFsX2ludDMyIik7Ci0gICAgRmllbGREZXNjcmlwdG9yIG9wdGlvbmFsU3RyaW5n
RmllbGQgPSBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfc3RyaW5nIik7Ci0g
ICAgRmllbGREZXNjcmlwdG9yIG9wdGlvbmFsQnl0ZXNGaWVsZCA9IGRlc2NyaXB0b3IuZmluZEZp
ZWxkQnlOYW1lKCJvcHRpb25hbF9ieXRlcyIpOwotICAgIEZpZWxkRGVzY3JpcHRvciBvcHRpb25h
bE5lc3RlZEVudW1GaWVsZCA9IGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9u
ZXN0ZWRfZW51bSIpOwotCi0gICAgLy8gRmllbGQgbm90IHByZXNlbnQuCi0gICAgVGVzdEFsbFR5
cGVzIG1lc3NhZ2UgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgYXNz
ZXJ0RmFsc2UobWVzc2FnZS5oYXNGaWVsZChvcHRpb25hbEludDMyRmllbGQpKTsKLSAgICBhc3Nl
cnRGYWxzZShtZXNzYWdlLmhhc0ZpZWxkKG9wdGlvbmFsU3RyaW5nRmllbGQpKTsKLSAgICBhc3Nl
cnRGYWxzZShtZXNzYWdlLmhhc0ZpZWxkKG9wdGlvbmFsQnl0ZXNGaWVsZCkpOwotICAgIGFzc2Vy
dEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQob3B0aW9uYWxOZXN0ZWRFbnVtRmllbGQpKTsKLSAgICBh
c3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRBbGxGaWVsZHMoKS5zaXplKCkpOwotCi0gICAgLy8g
RmllbGQgc2V0IHRvIGRlZmF1bHQgdmFsdWUgaXMgc2VlbiBhcyBub3QgcHJlc2VudC4KLSAgICBt
ZXNzYWdlID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxJ
bnQzMigwKQotICAgICAgICAuc2V0T3B0aW9uYWxTdHJpbmcoIiIpCi0gICAgICAgIC5zZXRPcHRp
b25hbEJ5dGVzKEJ5dGVTdHJpbmcuRU1QVFkpCi0gICAgICAgIC5zZXRPcHRpb25hbE5lc3RlZEVu
dW0oVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uRk9PKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBh
c3NlcnRGYWxzZShtZXNzYWdlLmhhc0ZpZWxkKG9wdGlvbmFsSW50MzJGaWVsZCkpOwotICAgIGFz
c2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQob3B0aW9uYWxTdHJpbmdGaWVsZCkpOwotICAgIGFz
c2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQob3B0aW9uYWxCeXRlc0ZpZWxkKSk7Ci0gICAgYXNz
ZXJ0RmFsc2UobWVzc2FnZS5oYXNGaWVsZChvcHRpb25hbE5lc3RlZEVudW1GaWVsZCkpOwotICAg
IGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEFsbEZpZWxkcygpLnNpemUoKSk7Ci0KLSAgICAv
LyBGaWVsZCBzZXQgdG8gbm9uLWRlZmF1bHQgdmFsdWUgaXMgc2VlbiBhcyBwcmVzZW50LgotICAg
IG1lc3NhZ2UgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25h
bEludDMyKDEpCi0gICAgICAgIC5zZXRPcHRpb25hbFN0cmluZygieCIpCi0gICAgICAgIC5zZXRP
cHRpb25hbEJ5dGVzKEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJ5IikpCi0gICAgICAgIC5zZXRP
cHRpb25hbE5lc3RlZEVudW0oVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFSKQotICAgICAgICAu
YnVpbGQoKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQob3B0aW9uYWxJbnQzMkZp
ZWxkKSk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKG9wdGlvbmFsU3RyaW5nRmll
bGQpKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQob3B0aW9uYWxCeXRlc0ZpZWxk
KSk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKG9wdGlvbmFsTmVzdGVkRW51bUZp
ZWxkKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIG1lc3NhZ2UuZ2V0QWxsRmllbGRzKCkuc2l6ZSgp
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXNzYWdlRmllbGQoKSB7Ci0gICAgVGVzdEFs
bFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAg
YXNzZXJ0RmFsc2UoYnVpbGRlci5oYXNPcHRpb25hbE5lc3RlZE1lc3NhZ2UoKSk7Ci0gICAgYXNz
ZXJ0RmFsc2UoYnVpbGRlci5idWlsZCgpLmhhc09wdGlvbmFsTmVzdGVkTWVzc2FnZSgpKTsKLQot
ICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLkJ1aWxkZXIgbmVzdGVkQnVpbGRlciA9Ci0g
ICAgICAgIGJ1aWxkZXIuZ2V0T3B0aW9uYWxOZXN0ZWRNZXNzYWdlQnVpbGRlcigpOwotICAgIGFz
c2VydFRydWUoYnVpbGRlci5oYXNPcHRpb25hbE5lc3RlZE1lc3NhZ2UoKSk7Ci0gICAgYXNzZXJ0
VHJ1ZShidWlsZGVyLmJ1aWxkKCkuaGFzT3B0aW9uYWxOZXN0ZWRNZXNzYWdlKCkpOwotCi0gICAg
bmVzdGVkQnVpbGRlci5zZXRWYWx1ZSgxKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgYnVpbGRlci5i
dWlsZCgpLmdldE9wdGlvbmFsTmVzdGVkTWVzc2FnZSgpLmdldFZhbHVlKCkpOwotCi0gICAgYnVp
bGRlci5jbGVhck9wdGlvbmFsTmVzdGVkTWVzc2FnZSgpOwotICAgIGFzc2VydEZhbHNlKGJ1aWxk
ZXIuaGFzT3B0aW9uYWxOZXN0ZWRNZXNzYWdlKCkpOwotICAgIGFzc2VydEZhbHNlKGJ1aWxkZXIu
YnVpbGQoKS5oYXNPcHRpb25hbE5lc3RlZE1lc3NhZ2UoKSk7Ci0KLSAgICAvLyBVbmxpa2Ugbm9u
LW1lc3NhZ2UgZmllbGRzLCBpZiB3ZSBzZXQgYSBtZXNzYWdlIGZpZWxkIHRvIGl0cyBkZWZhdWx0
IHZhbHVlIChpLmUuLAotICAgIC8vIGRlZmF1bHQgaW5zdGFuY2UpLCB0aGUgZmllbGQgc2hvdWxk
IGJlIHNlZW4gYXMgcHJlc2VudC4KLSAgICBidWlsZGVyLnNldE9wdGlvbmFsTmVzdGVkTWVzc2Fn
ZShUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAg
YXNzZXJ0VHJ1ZShidWlsZGVyLmhhc09wdGlvbmFsTmVzdGVkTWVzc2FnZSgpKTsKLSAgICBhc3Nl
cnRUcnVlKGJ1aWxkZXIuYnVpbGQoKS5oYXNPcHRpb25hbE5lc3RlZE1lc3NhZ2UoKSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXplQW5kUGFyc2UoKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1
aWxkZXIoKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsSW50MzIoMTIzNCk7Ci0gICAgYnVpbGRl
ci5zZXRPcHRpb25hbFN0cmluZygiaGVsbG8iKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsTmVz
dGVkTWVzc2FnZShUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2Uo
KSk7Ci0gICAgLy8gU2V0IGFuIG9uZW9mIGZpZWxkIHRvIGl0cyBkZWZhdWx0IHZhbHVlIGFuZCBl
eHBlY3QgaXQgdG8gYmUgc2VyaWFsaXplZCAoaS5lLiwKLSAgICAvLyBhbiBvbmVvZiBmaWVsZCBz
ZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcHJlc2VudCkuCi0g
ICAgYnVpbGRlci5zZXRPbmVvZkludDMyKDApOwotICAgIEJ5dGVTdHJpbmcgZGF0YSA9IGJ1aWxk
ZXIuYnVpbGQoKS50b0J5dGVTdHJpbmcoKTsKLQotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0g
VGVzdEFsbFR5cGVzLnBhcnNlRnJvbShkYXRhKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzNCwgbWVz
c2FnZS5nZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygiaGVsbG8iLCBtZXNz
YWdlLmdldE9wdGlvbmFsU3RyaW5nKCkpOwotICAgIC8vIEZpZWxkcyBub3Qgc2V0IHdpbGwgaGF2
ZSB0aGUgZGVmYXVsdCB2YWx1ZS4KLSAgICBhc3NlcnRFcXVhbHMoQnl0ZVN0cmluZy5FTVBUWSwg
bWVzc2FnZS5nZXRPcHRpb25hbEJ5dGVzKCkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlw
ZXMuTmVzdGVkRW51bS5GT08sIG1lc3NhZ2UuZ2V0T3B0aW9uYWxOZXN0ZWRFbnVtKCkpOwotICAg
IC8vIFRoZSBtZXNzYWdlIGZpZWxkIGlzIHNldCBkZXNwaXRlIHRoYXQgaXQncyBzZXQgd2l0aCBh
IGRlZmF1bHQgaW5zdGFuY2UuCi0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc09wdGlvbmFsTmVz
dGVkTWVzc2FnZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRPcHRpb25hbE5l
c3RlZE1lc3NhZ2UoKS5nZXRWYWx1ZSgpKTsKLSAgICAvLyBUaGUgb25lb2YgZmllbGQgc2V0IHRv
IGl0cyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gcHJlc2VudC4KLSAgICBhc3NlcnRFcXVhbHMoCi0g
ICAgICAgIFRlc3RBbGxUeXBlcy5PbmVvZkZpZWxkQ2FzZS5PTkVPRl9JTlQzMiwgbWVzc2FnZS5n
ZXRPbmVvZkZpZWxkQ2FzZSgpKTsKLSAgfQotCi0gIC8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYi8x
NjE3MzM5NwotICAvLyBNYWtlIHN1cmUgd2UgaGF2ZW4ndCBzY3Jld2VkIHVwIHRoZSBjb2RlIGdl
bmVyYXRpb24gZm9yIHJlcGVhdGVkIGZpZWxkcy4KLSAgcHVibGljIHZvaWQgdGVzdFJlcGVhdGVk
RmllbGRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVp
bGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5zZXRPcHRpb25h
bEludDMyKDEyMzQpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxTdHJpbmcoImhlbGxvIik7Ci0g
ICAgYnVpbGRlci5zZXRPcHRpb25hbE5lc3RlZE1lc3NhZ2UoVGVzdEFsbFR5cGVzLk5lc3RlZE1l
c3NhZ2UuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRJbnQz
Mig0MzIxKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkU3RyaW5nKCJ3b3JsZCIpOwotICAgIGJ1
aWxkZXIuYWRkUmVwZWF0ZWROZXN0ZWRNZXNzYWdlKFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdl
LmdldERlZmF1bHRJbnN0YW5jZSgpKTsKLSAgICBCeXRlU3RyaW5nIGRhdGEgPSBidWlsZGVyLmJ1
aWxkKCkudG9CeXRlU3RyaW5nKCk7Ci0KLSAgICBUZXN0T3B0aW9uYWxGaWVsZHNPbmx5IG9wdGlv
bmFsT25seU1lc3NhZ2UgPSBUZXN0T3B0aW9uYWxGaWVsZHNPbmx5LnBhcnNlRnJvbShkYXRhKTsK
LSAgICBhc3NlcnRFcXVhbHMoMTIzNCwgb3B0aW9uYWxPbmx5TWVzc2FnZS5nZXRPcHRpb25hbElu
dDMyKCkpOwotICAgIGFzc2VydEVxdWFscygiaGVsbG8iLCBvcHRpb25hbE9ubHlNZXNzYWdlLmdl
dE9wdGlvbmFsU3RyaW5nKCkpOwotICAgIGFzc2VydFRydWUob3B0aW9uYWxPbmx5TWVzc2FnZS5o
YXNPcHRpb25hbE5lc3RlZE1lc3NhZ2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG9wdGlvbmFs
T25seU1lc3NhZ2UuZ2V0T3B0aW9uYWxOZXN0ZWRNZXNzYWdlKCkuZ2V0VmFsdWUoKSk7Ci0KLSAg
ICBUZXN0UmVwZWF0ZWRGaWVsZHNPbmx5IHJlcGVhdGVkT25seU1lc3NhZ2UgPSBUZXN0UmVwZWF0
ZWRGaWVsZHNPbmx5LnBhcnNlRnJvbShkYXRhKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVwZWF0
ZWRPbmx5TWVzc2FnZS5nZXRSZXBlYXRlZEludDMyQ291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDQzMjEsIHJlcGVhdGVkT25seU1lc3NhZ2UuZ2V0UmVwZWF0ZWRJbnQzMigwKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDEsIHJlcGVhdGVkT25seU1lc3NhZ2UuZ2V0UmVwZWF0ZWRTdHJpbmdDb3VudCgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoIndvcmxkIiwgcmVwZWF0ZWRPbmx5TWVzc2FnZS5nZXRSZXBl
YXRlZFN0cmluZygwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcGVhdGVkT25seU1lc3NhZ2Uu
Z2V0UmVwZWF0ZWROZXN0ZWRNZXNzYWdlQ291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIHJl
cGVhdGVkT25seU1lc3NhZ2UuZ2V0UmVwZWF0ZWROZXN0ZWRNZXNzYWdlKDApLmdldFZhbHVlKCkp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdElzSW5pdGlhbGl6ZWQoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5l
d0J1aWxkZXIoKTsKLQotICAgIC8vIFRlc3Qgb3B0aW9uYWwgcHJvdG8yIG1lc3NhZ2UgZmllbGRz
LgotICAgIFVuaXR0ZXN0UHJvdG8uVGVzdFJlcXVpcmVkLkJ1aWxkZXIgcHJvdG8yQnVpbGRlciA9
Ci0gICAgICAgIGJ1aWxkZXIuZ2V0T3B0aW9uYWxQcm90bzJNZXNzYWdlQnVpbGRlcigpOwotICAg
IGFzc2VydEZhbHNlKGJ1aWxkZXIuaXNJbml0aWFsaXplZCgpKTsKLSAgICBhc3NlcnRGYWxzZShi
dWlsZGVyLmJ1aWxkUGFydGlhbCgpLmlzSW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBwcm90bzJCdWls
ZGVyLnNldEEoMSkuc2V0QigyKS5zZXRDKDMpOwotICAgIGFzc2VydFRydWUoYnVpbGRlci5pc0lu
aXRpYWxpemVkKCkpOwotICAgIGFzc2VydFRydWUoYnVpbGRlci5idWlsZFBhcnRpYWwoKS5pc0lu
aXRpYWxpemVkKCkpOwotCi0gICAgLy8gVGVzdCBvbmVvZiBwcm90bzIgbWVzc2FnZSBmaWVsZHMu
Ci0gICAgcHJvdG8yQnVpbGRlciA9IGJ1aWxkZXIuZ2V0T25lb2ZQcm90bzJNZXNzYWdlQnVpbGRl
cigpOwotICAgIGFzc2VydEZhbHNlKGJ1aWxkZXIuaXNJbml0aWFsaXplZCgpKTsKLSAgICBhc3Nl
cnRGYWxzZShidWlsZGVyLmJ1aWxkUGFydGlhbCgpLmlzSW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBw
cm90bzJCdWlsZGVyLnNldEEoMSkuc2V0QigyKS5zZXRDKDMpOwotICAgIGFzc2VydFRydWUoYnVp
bGRlci5pc0luaXRpYWxpemVkKCkpOwotICAgIGFzc2VydFRydWUoYnVpbGRlci5idWlsZFBhcnRp
YWwoKS5pc0luaXRpYWxpemVkKCkpOwotCi0gICAgLy8gVGVzdCByZXBlYXRlZCBwcm90bzIgbWVz
c2FnZSBmaWVsZHMuCi0gICAgcHJvdG8yQnVpbGRlciA9IGJ1aWxkZXIuYWRkUmVwZWF0ZWRQcm90
bzJNZXNzYWdlQnVpbGRlcigpOwotICAgIGFzc2VydEZhbHNlKGJ1aWxkZXIuaXNJbml0aWFsaXpl
ZCgpKTsKLSAgICBhc3NlcnRGYWxzZShidWlsZGVyLmJ1aWxkUGFydGlhbCgpLmlzSW5pdGlhbGl6
ZWQoKSk7Ci0KLSAgICBwcm90bzJCdWlsZGVyLnNldEEoMSkuc2V0QigyKS5zZXRDKDMpOwotICAg
IGFzc2VydFRydWUoYnVpbGRlci5pc0luaXRpYWxpemVkKCkpOwotICAgIGFzc2VydFRydWUoYnVp
bGRlci5idWlsZFBhcnRpYWwoKS5pc0luaXRpYWxpemVkKCkpOwotICB9Ci0KLQotICAvLyBUZXN0
IHRoYXQgdW5rbm93biBmaWVsZHMgYXJlIGRyb3BwZWQuCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmtu
b3duRmllbGRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIg
YnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5zZXRPcHRp
b25hbEludDMyKDEyMzQpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRJbnQzMig1Njc4KTsKLSAg
ICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBCeXRlU3RyaW5n
IGRhdGEgPSBtZXNzYWdlLnRvQnl0ZVN0cmluZygpOwotCi0gICAgVGVzdE9wdGlvbmFsRmllbGRz
T25seSBvcHRpb25hbE9ubHlNZXNzYWdlID0KLSAgICAgICAgVGVzdE9wdGlvbmFsRmllbGRzT25s
eS5wYXJzZUZyb20oZGF0YSk7Ci0gICAgLy8gVW5rbm93bkZpZWxkU2V0IHNob3VsZCBiZSBlbXB0
eS4KLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIDAsIG9wdGlvbmFsT25seU1lc3NhZ2UuZ2V0
VW5rbm93bkZpZWxkcygpLnRvQnl0ZVN0cmluZygpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDEyMzQsIG9wdGlvbmFsT25seU1lc3NhZ2UuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLSAgICBtZXNz
YWdlID0gVGVzdEFsbFR5cGVzLnBhcnNlRnJvbShvcHRpb25hbE9ubHlNZXNzYWdlLnRvQnl0ZVN0
cmluZygpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzNCwgbWVzc2FnZS5nZXRPcHRpb25hbEludDMy
KCkpOwotICAgIC8vIFRoZSByZXBlYXRlZCBmaWVsZCBpcyBkaXNjYXJkZWQgYmVjYXVzZSBpdCdz
IHVua25vd24gdG8gdGhlIG9wdGlvbmFsLW9ubHkKLSAgICAvLyBtZXNzYWdlLgotICAgIGFzc2Vy
dEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkSW50MzJDb3VudCgpKTsKLQotICAgIER5bmFt
aWNNZXNzYWdlIGR5bmFtaWNPcHRpb25hbE9ubHlNZXNzYWdlID0KLSAgICAgICAgRHluYW1pY01l
c3NhZ2UuZ2V0RGVmYXVsdEluc3RhbmNlKAotICAgICAgICAgICAgVGVzdE9wdGlvbmFsRmllbGRz
T25seS5nZXREZXNjcmlwdG9yKCkpCi0gICAgICAgIC5nZXRQYXJzZXJGb3JUeXBlKCkucGFyc2VG
cm9tKGRhdGEpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgMCwgZHluYW1pY09wdGlvbmFs
T25seU1lc3NhZ2UuZ2V0VW5rbm93bkZpZWxkcygpLnRvQnl0ZVN0cmluZygpLnNpemUoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG9wdGlvbmFsT25seU1lc3NhZ2UudG9CeXRlU3RyaW5nKCksCi0gICAg
ICAgIGR5bmFtaWNPcHRpb25hbE9ubHlNZXNzYWdlLnRvQnl0ZVN0cmluZygpKTsKLSAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0Zs
b2F0QXJyYXlMaXN0VGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL0Zsb2F0QXJyYXlMaXN0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4OGE3NTc0MzFiOTAxMTRjMjJlMmJiNDlmZTg4NjkxMmMyMGY3Y2VkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9GbG9hdEFycmF5TGlzdFRlc3QuamF2YQorKysgL2Rl
di9udWxsCkBAIC0xLDQ1OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgc3RhdGljIGphdmEu
dXRpbC5BcnJheXMuYXNMaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwot
Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db25jdXJy
ZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQot
LyoqCi0gKiBUZXN0cyBmb3Ige0BsaW5rIEZsb2F0QXJyYXlMaXN0fS4KLSAqIAotICogQGF1dGhv
ciBkd2Vpc0Bnb29nbGUuY29tIChEYW5pZWwgV2VpcykKLSAqLwotcHVibGljIGNsYXNzIEZsb2F0
QXJyYXlMaXN0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgCi0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIEZsb2F0QXJyYXlMaXN0IFVOQVJZX0xJU1QgPSBuZXdJbW11dGFibGVGbG9hdEFycmF5TGlz
dCgxKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRmxvYXRBcnJheUxpc3QgVEVSVElBUllfTElT
VCA9Ci0gICAgICBuZXdJbW11dGFibGVGbG9hdEFycmF5TGlzdCgxLCAyLCAzKTsKLSAgCi0gIHBy
aXZhdGUgRmxvYXRBcnJheUxpc3QgbGlzdDsKLSAgCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQg
dm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIGxpc3QgPSBuZXcgRmxvYXRBcnJh
eUxpc3QoKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEVtcHR5TGlzdFJldHVybnNTYW1l
SW5zdGFuY2UoKSB7Ci0gICAgYXNzZXJ0U2FtZShGbG9hdEFycmF5TGlzdC5lbXB0eUxpc3QoKSwg
RmxvYXRBcnJheUxpc3QuZW1wdHlMaXN0KCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0
RW1wdHlMaXN0SXNJbW11dGFibGUoKSB7Ci0gICAgYXNzZXJ0SW1tdXRhYmxlKEZsb2F0QXJyYXlM
aXN0LmVtcHR5TGlzdCgpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE1ha2VJbW11dGFi
bGUoKSB7Ci0gICAgbGlzdC5hZGRGbG9hdCgyKTsKLSAgICBsaXN0LmFkZEZsb2F0KDQpOwotICAg
IGxpc3QuYWRkRmxvYXQoNik7Ci0gICAgbGlzdC5hZGRGbG9hdCg4KTsKLSAgICBsaXN0Lm1ha2VJ
bW11dGFibGUoKTsKLSAgICBhc3NlcnRJbW11dGFibGUobGlzdCk7Ci0gIH0KLSAgCi0gIHB1Ymxp
YyB2b2lkIHRlc3RNb2RpZmljYXRpb25XaXRoSXRlcmF0aW9uKCkgewotICAgIGxpc3QuYWRkQWxs
KGFzTGlzdCgxRiwgMkYsIDNGLCA0RikpOwotICAgIEl0ZXJhdG9yPEZsb2F0PiBpdGVyYXRvciA9
IGxpc3QuaXRlcmF0b3IoKTsKLSAgICBhc3NlcnRFcXVhbHMoNCwgbGlzdC5zaXplKCkpOwotICAg
IGFzc2VydEVxdWFscygxRiwgKGZsb2F0KSBsaXN0LmdldCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDFGLCAoZmxvYXQpIGl0ZXJhdG9yLm5leHQoKSk7Ci0gICAgbGlzdC5zZXQoMCwgMUYpOwotICAg
IGFzc2VydEVxdWFscygyRiwgKGZsb2F0KSBpdGVyYXRvci5uZXh0KCkpOwotICAgIAotICAgIGxp
c3QucmVtb3ZlKDApOwotICAgIHRyeSB7Ci0gICAgICBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBm
YWlsKCk7Ci0gICAgfSBjYXRjaCAoQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICBpdGVyYXRvciA9IGxpc3QuaXRl
cmF0b3IoKTsKLSAgICBsaXN0LmFkZCgwLCAwRik7Ci0gICAgdHJ5IHsKLSAgICAgIGl0ZXJhdG9y
Lm5leHQoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChDb25jdXJyZW50TW9kaWZpY2F0
aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBw
dWJsaWMgdm9pZCB0ZXN0R2V0KCkgewotICAgIGFzc2VydEVxdWFscygxRiwgKGZsb2F0KSBURVJU
SUFSWV9MSVNULmdldCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDJGLCAoZmxvYXQpIFRFUlRJQVJZ
X0xJU1QuZ2V0KDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoM0YsIChmbG9hdCkgVEVSVElBUllfTElT
VC5nZXQoMikpOwotICAgIAotICAgIHRyeSB7Ci0gICAgICBURVJUSUFSWV9MSVNULmdldCgtMSk7
Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgVEVS
VElBUllfTElTVC5nZXQoMyk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRP
ZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAK
LSAgcHVibGljIHZvaWQgdGVzdEdldEZsb2F0KCkgewotICAgIGFzc2VydEVxdWFscygxRiwgVEVS
VElBUllfTElTVC5nZXRGbG9hdCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDJGLCBURVJUSUFSWV9M
SVNULmdldEZsb2F0KDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoM0YsIFRFUlRJQVJZX0xJU1QuZ2V0
RmxvYXQoMikpOwotICAgIAotICAgIHRyeSB7Ci0gICAgICBURVJUSUFSWV9MSVNULmdldCgtMSk7
Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgVEVS
VElBUllfTElTVC5nZXQoMyk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRP
ZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAK
LSAgcHVibGljIHZvaWQgdGVzdFNpemUoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIEZsb2F0QXJy
YXlMaXN0LmVtcHR5TGlzdCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIFVOQVJZX0xJ
U1Quc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgVEVSVElBUllfTElTVC5zaXplKCkpOwot
Ci0gICAgbGlzdC5hZGRGbG9hdCgyKTsKLSAgICBsaXN0LmFkZEZsb2F0KDQpOwotICAgIGxpc3Qu
YWRkRmxvYXQoNik7Ci0gICAgbGlzdC5hZGRGbG9hdCg4KTsKLSAgICBhc3NlcnRFcXVhbHMoNCwg
bGlzdC5zaXplKCkpOwotICAgIAotICAgIGxpc3QucmVtb3ZlKDApOwotICAgIGFzc2VydEVxdWFs
cygzLCBsaXN0LnNpemUoKSk7Ci0gICAgCi0gICAgbGlzdC5hZGQoMTZGKTsKLSAgICBhc3NlcnRF
cXVhbHMoNCwgbGlzdC5zaXplKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0U2V0KCkg
ewotICAgIGxpc3QuYWRkRmxvYXQoMik7Ci0gICAgbGlzdC5hZGRGbG9hdCg0KTsKLSAgICAKLSAg
ICBhc3NlcnRFcXVhbHMoMkYsIChmbG9hdCkgbGlzdC5zZXQoMCwgMEYpKTsKLSAgICBhc3NlcnRF
cXVhbHMoMEYsIGxpc3QuZ2V0RmxvYXQoMCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDRGLCAoZmxv
YXQpIGxpc3Quc2V0KDEsIDBGKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBGLCBsaXN0LmdldEZsb2F0
KDEpKTsKLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5zZXQoLTEsIDBGKTsKLSAgICAgIGZh
aWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAg
IC8vIGV4cGVjdGVkCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0KDIsIDBGKTsK
LSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0
U2V0RmxvYXQoKSB7Ci0gICAgbGlzdC5hZGRGbG9hdCgyKTsKLSAgICBsaXN0LmFkZEZsb2F0KDQp
OwotICAgIAotICAgIGFzc2VydEVxdWFscygyRiwgbGlzdC5zZXRGbG9hdCgwLCAwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDBGLCBsaXN0LmdldEZsb2F0KDApKTsKLQotICAgIGFzc2VydEVxdWFscyg0
RiwgbGlzdC5zZXRGbG9hdCgxLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBGLCBsaXN0LmdldEZs
b2F0KDEpKTsKLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5zZXRGbG9hdCgtMSwgMCk7Ci0g
ICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBsaXN0LnNldEZs
b2F0KDIsIDApOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNF
eGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1Ymxp
YyB2b2lkIHRlc3RBZGQoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIGxpc3Quc2l6ZSgpKTsKLQot
ICAgIGFzc2VydFRydWUobGlzdC5hZGQoMkYpKTsKLSAgICBhc3NlcnRFcXVhbHMoYXNMaXN0KDJG
KSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRUcnVlKGxpc3QuYWRkKDNGKSk7Ci0gICAgbGlzdC5hZGQo
MCwgNEYpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoNEYsIDJGLCAzRiksIGxpc3QpOwotICAg
IAotICAgIGxpc3QuYWRkKDAsIDFGKTsKLSAgICBsaXN0LmFkZCgwLCAwRik7Ci0gICAgLy8gRm9y
Y2UgYSByZXNpemUgYnkgZ2V0dGluZyB1cCB0byAxMSBlbGVtZW50cy4KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDY7IGkrKykgewotICAgICAgbGlzdC5hZGQoRmxvYXQudmFsdWVPZig1ICsgaSkp
OwotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMoYXNMaXN0KDBGLCAxRiwgNEYsIDJGLCAzRiwgNUYs
IDZGLCA3RiwgOEYsIDlGLCAxMEYpLCBsaXN0KTsKLSAgICAKLSAgICB0cnkgewotICAgICAgbGlz
dC5hZGQoLTEsIDVGKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0
LmFkZCg0LCA1Rik7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEFk
ZEZsb2F0KCkgewotICAgIGFzc2VydEVxdWFscygwLCBsaXN0LnNpemUoKSk7Ci0KLSAgICBsaXN0
LmFkZEZsb2F0KDIpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMkYpLCBsaXN0KTsKLQotICAg
IGxpc3QuYWRkRmxvYXQoMyk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgyRiwgM0YpLCBsaXN0
KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEFkZEFsbCgpIHsKLSAgICBhc3NlcnRFcXVh
bHMoMCwgbGlzdC5zaXplKCkpOwotCi0gICAgYXNzZXJ0VHJ1ZShsaXN0LmFkZEFsbChDb2xsZWN0
aW9ucy5zaW5nbGV0b24oMUYpKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGxpc3Quc2l6ZSgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoMUYsIChmbG9hdCkgbGlzdC5nZXQoMCkpOwotICAgIGFzc2VydEVx
dWFscygxRiwgbGlzdC5nZXRGbG9hdCgwKSk7Ci0gICAgCi0gICAgYXNzZXJ0VHJ1ZShsaXN0LmFk
ZEFsbChhc0xpc3QoMkYsIDNGLCA0RiwgNUYsIDZGKSkpOwotICAgIGFzc2VydEVxdWFscyhhc0xp
c3QoMUYsIDJGLCAzRiwgNEYsIDVGLCA2RiksIGxpc3QpOwotICAgIAotICAgIGFzc2VydFRydWUo
bGlzdC5hZGRBbGwoVEVSVElBUllfTElTVCkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMUYs
IDJGLCAzRiwgNEYsIDVGLCA2RiwgMUYsIDJGLCAzRiksIGxpc3QpOwotCi0gICAgYXNzZXJ0RmFs
c2UobGlzdC5hZGRBbGwoQ29sbGVjdGlvbnMuPEZsb2F0PmVtcHR5TGlzdCgpKSk7Ci0gICAgYXNz
ZXJ0RmFsc2UobGlzdC5hZGRBbGwoRmxvYXRBcnJheUxpc3QuZW1wdHlMaXN0KCkpKTsKLSAgfQot
ICAKLSAgcHVibGljIHZvaWQgdGVzdFJlbW92ZSgpIHsKLSAgICBsaXN0LmFkZEFsbChURVJUSUFS
WV9MSVNUKTsKLSAgICBhc3NlcnRFcXVhbHMoMUYsIChmbG9hdCkgbGlzdC5yZW1vdmUoMCkpOwot
ICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMkYsIDNGKSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRUcnVl
KGxpc3QucmVtb3ZlKEZsb2F0LnZhbHVlT2YoMykpKTsKLSAgICBhc3NlcnRFcXVhbHMoYXNMaXN0
KDJGKSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRGYWxzZShsaXN0LnJlbW92ZShGbG9hdC52YWx1ZU9m
KDMpKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgyRiksIGxpc3QpOwotCi0gICAgYXNzZXJ0
RXF1YWxzKDJGLCAoZmxvYXQpIGxpc3QucmVtb3ZlKDApKTsKLSAgICBhc3NlcnRFcXVhbHMoYXNM
aXN0KCksIGxpc3QpOwotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZSgtMSk7Ci0g
ICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5y
ZW1vdmUoMCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGFzc2VydElt
bXV0YWJsZShGbG9hdEFycmF5TGlzdCBsaXN0KSB7Ci0gICAgaWYgKGxpc3QuY29udGFpbnMoMUYp
KSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2Fubm90IHRlc3QgdGhlIGlt
bXV0YWJpbGl0eSBvZiBsaXN0cyB0aGF0IGNvbnRhaW4gMS4iKTsKLSAgICB9Ci0gICAgCi0gICAg
dHJ5IHsKLSAgICAgIGxpc3QuYWRkKDFGKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAg
IH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGQoMCwgMUYpOwotICAgICAgZmFpbCgp
OwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAg
IC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChD
b2xsZWN0aW9ucy48RmxvYXQ+ZW1wdHlMaXN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0
Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVk
Ci0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChDb2xsZWN0aW9ucy5z
aW5nbGV0b25MaXN0KDFGKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0
ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAg
Ci0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkQWxsKG5ldyBGbG9hdEFycmF5TGlzdCgpKTsKLSAg
ICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlz
dC5hZGRBbGwoVU5BUllfTElTVCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBw
b3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0g
ICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkQWxsKDAsIENvbGxlY3Rpb25zLnNpbmdsZXRv
bigxRikpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9u
RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7
Ci0gICAgICBsaXN0LmFkZEFsbCgwLCBVTkFSWV9MSVNUKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9
IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBl
Y3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRBbGwoMCwgQ29sbGVj
dGlvbnMuPEZsb2F0PmVtcHR5TGlzdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAg
IH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRGbG9hdCgwKTsKLSAgICAgIGZhaWwo
KTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5jbGVhcigp
OwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0
aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIGxp
c3QucmVtb3ZlKDEpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3Bl
cmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAg
IHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZShuZXcgT2JqZWN0KCkpOwotICAgICAgZmFpbCgpOwot
ICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8v
IGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZUFsbChD
b2xsZWN0aW9ucy48RmxvYXQ+ZW1wdHlMaXN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0
Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVk
Ci0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZUFsbChDb2xsZWN0aW9u
cy5zaW5nbGV0b24oMUYpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRl
ZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAK
LSAgICB0cnkgewotICAgICAgbGlzdC5yZW1vdmVBbGwoVU5BUllfTElTVCk7Ci0gICAgICBmYWls
KCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAg
ICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmV0YWlu
QWxsKENvbGxlY3Rpb25zLjxGbG9hdD5lbXB0eUxpc3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAg
fSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhw
ZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmV0YWluQWxsKENvbGxl
Y3Rpb25zLnNpbmdsZXRvbigxRikpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3Vw
cG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQot
ICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJldGFpbkFsbChVTkFSWV9MSVNUKTsKLSAgICAg
IGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5z
ZXQoMCwgMEYpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0
aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRy
eSB7Ci0gICAgICBsaXN0LnNldEZsb2F0KDAsIDApOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0
Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVk
Ci0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBGbG9hdEFycmF5TGlzdCBuZXdJbW11
dGFibGVGbG9hdEFycmF5TGlzdChpbnQuLi4gZWxlbWVudHMpIHsKLSAgICBGbG9hdEFycmF5TGlz
dCBsaXN0ID0gbmV3IEZsb2F0QXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgZWxlbWVudCA6IGVs
ZW1lbnRzKSB7Ci0gICAgICBsaXN0LmFkZEZsb2F0KGVsZW1lbnQpOwotICAgIH0KLSAgICBsaXN0
Lm1ha2VJbW11dGFibGUoKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0ZvcmNlRmllbGRCdWls
ZGVyc1ByZVJ1bi5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL0ZvcmNlRmllbGRCdWlsZGVyc1ByZVJ1bi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiN2VhZWJmNWUyOGZiYWM5YTg4YWM5NTYyMTU3MTQ0ZTljMWFiYmJkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Gb3JjZUZpZWxkQnVpbGRlcnNQcmVSdW4uamF2YQor
KysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLS8qKgotICogQSBwcmVy
dW4gZm9yIGEgdGVzdCBzdWl0ZSB0aGF0IGFsbG93cyBydW5uaW5nIHRoZSBmdWxsIHByb3RvY29s
IGJ1ZmZlcgotICogdGVzdHMgaW4gYSBtb2RlIHRoYXQgZGlzYWJsZXMgdGhlIG9wdGltaXphdGlv
biBmb3Igbm90IHVzaW5nCi0gKiB7QGxpbmsgUmVwZWF0ZWRGaWVsZEJ1aWxkZXJ9IGFuZCB7QGxp
bmsgU2luZ2xlRmllbGRCdWlsZGVyfSB1bnRpbCB0aGV5IGFyZQotICogcmVxdWVzdGVkLiBUaGlz
IGFsbG93cyB1cyB0byBydW4gYWxsIHRoZSB0ZXN0cyB0aHJvdWdoIGJvdGggY29kZSBwYXRocwot
ICogYW5kIGVuc3VyZXMgdGhhdCBib3RoIGNvZGUgcGF0aHMgcHJvZHVjZSBpZGVudGljYWwgcmVz
dWx0cy4KLSAqCi0gKiBAYXV0aG9yIGpvbnBAZ29vZ2xlLmNvbSAoSm9uIFBlcmxvdykKLSAqLwot
cHVibGljIGNsYXNzIEZvcmNlRmllbGRCdWlsZGVyc1ByZVJ1biBpbXBsZW1lbnRzIFJ1bm5hYmxl
IHsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcnVuKCkgewotICAgIEdlbmVyYXRlZE1l
c3NhZ2UuZW5hYmxlQWx3YXlzVXNlRmllbGRCdWlsZGVyc0ZvclRlc3RpbmcoKTsKLSAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0dl
bmVyYXRlZE1lc3NhZ2VUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvR2VuZXJhdGVkTWVzc2FnZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTliOGI2MzgxYTQ5MGUyNDIxNzdiNzBlOGVmMGE0OTQ4ZDRjYzEwNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMv
dGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvR2VuZXJhdGVkTWVzc2FnZVRlc3QuamF2YQor
KysgL2Rldi9udWxsCkBAIC0xLDE2NzYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGNvbS5n
b29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xl
LnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xl
LnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5UZXN0QWxsRXh0ZW5zaW9uc0xpdGU7Ci1pbXBvcnQgY29t
Lmdvb2dsZS5wcm90b2J1Zi50ZXN0LlVuaXR0ZXN0SW1wb3J0OwotaW1wb3J0IHByb3RvYnVmX3Vu
aXR0ZXN0LkVudW1XaXRoTm9PdXRlcjsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5NZXNzYWdl
V2l0aE5vT3V0ZXI7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuTXVsdGlwbGVGaWxlc1Rlc3RQ
cm90bzsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5OZXN0ZWRFeHRlbnNpb24uTXlOZXN0ZWRF
eHRlbnNpb247Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuTmVzdGVkRXh0ZW5zaW9uTGl0ZS5N
eU5lc3RlZEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuTm9uTmVzdGVk
RXh0ZW5zaW9uOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0Lk5vbk5lc3RlZEV4dGVuc2lvbi5N
ZXNzYWdlVG9CZUV4dGVuZGVkOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0Lk5vbk5lc3RlZEV4
dGVuc2lvbi5NeU5vbk5lc3RlZEV4dGVuc2lvbjsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5O
b25OZXN0ZWRFeHRlbnNpb25MaXRlOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0Lk5vbk5lc3Rl
ZEV4dGVuc2lvbkxpdGUuTWVzc2FnZUxpdGVUb0JlRXh0ZW5kZWQ7Ci1pbXBvcnQgcHJvdG9idWZf
dW5pdHRlc3QuTm9uTmVzdGVkRXh0ZW5zaW9uTGl0ZS5NeU5vbk5lc3RlZEV4dGVuc2lvbkxpdGU7
Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuT3V0ZXJDbGFzc05hbWVUZXN0Mk91dGVyQ2xhc3M7
Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuT3V0ZXJDbGFzc05hbWVUZXN0M091dGVyQ2xhc3M7
Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuT3V0ZXJDbGFzc05hbWVUZXN0T3V0ZXJDbGFzczsK
LWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5TZXJ2aWNlV2l0aE5vT3V0ZXI7Ci1pbXBvcnQgcHJv
dG9idWZfdW5pdHRlc3QuVW5pdHRlc3RPcHRpbWl6ZUZvci5UZXN0T3B0aW1pemVkRm9yU2l6ZTsK
LWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdE9wdGltaXplRm9yLlRlc3RPcHRpb25h
bE9wdGltaXplZEZvclNpemU7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RPcHRp
bWl6ZUZvci5UZXN0UmVxdWlyZWRPcHRpbWl6ZWRGb3JTaXplOwotaW1wb3J0IHByb3RvYnVmX3Vu
aXR0ZXN0LlVuaXR0ZXN0UHJvdG87Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQ
cm90by5Gb3JlaWduRW51bTsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3Rv
LkZvcmVpZ25NZXNzYWdlOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8u
Rm9yZWlnbk1lc3NhZ2VPckJ1aWxkZXI7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRl
c3RQcm90by5OZXN0ZWRUZXN0QWxsVHlwZXM7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5p
dHRlc3RQcm90by5UZXN0QWxsRXh0ZW5zaW9uczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5V
bml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0
dGVzdFByb3RvLlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlOwotaW1wb3J0IHByb3RvYnVmX3Vu
aXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzT3JCdWlsZGVyOwotaW1wb3J0IHByb3Rv
YnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEV4dHJlbWVEZWZhdWx0VmFsdWVzOwotaW1w
b3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdE9uZW9mMjsKLWltcG9ydCBw
cm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RQYWNrZWRUeXBlczsKLWltcG9ydCBw
cm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RVbnBhY2tlZFR5cGVzOwotCi1pbXBv
cnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJ
bnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9y
dCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0
U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxl
Y3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlz
dDsKLQotLyoqCi0gKiBVbml0IHRlc3QgZm9yIGdlbmVyYXRlZCBtZXNzYWdlcyBhbmQgZ2VuZXJh
dGVkIGNvZGUuICBTZWUgYWxzbwotICoge0BsaW5rIE1lc3NhZ2VUZXN0fSwgd2hpY2ggdGVzdHMg
c29tZSBnZW5lcmF0ZWQgbWVzc2FnZSBmdW5jdGlvbmFsaXR5LgotICoKLSAqIEBhdXRob3Iga2Vu
dG9uQGdvb2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZWRN
ZXNzYWdlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgVGVzdFV0aWwuUmVmbGVjdGlvblRlc3Rl
ciByZWZsZWN0aW9uVGVzdGVyID0KLSAgICBuZXcgVGVzdFV0aWwuUmVmbGVjdGlvblRlc3RlcihU
ZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpLCBudWxsKTsKLQotICBwdWJsaWMgdm9pZCB0ZXN0
RGVmYXVsdEluc3RhbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0U2FtZShUZXN0
QWxsVHlwZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCksCi0gICAgICAgICAgICAgICBUZXN0QWxsVHlw
ZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZ2V0RGVmYXVsdEluc3RhbmNlRm9yVHlwZSgpKTsKLSAg
ICBhc3NlcnRTYW1lKFRlc3RBbGxUeXBlcy5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAg
ICAgICAgIFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuZ2V0RGVmYXVsdEluc3RhbmNlRm9yVHlw
ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXNzYWdlT3JCdWlsZGVyKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxU
eXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgVGVzdFV0aWwuc2V0QWxsRmllbGRzKGJ1aWxkZXIpOwot
ICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIFRlc3RVdGls
LmFzc2VydEFsbEZpZWxkc1NldChtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RV
c2luZ0J1aWxkZXJNdWx0aXBsZVRpbWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFs
bFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAg
Ly8gcHJpbWl0aXZlIGZpZWxkIHNjYWxhciBhbmQgcmVwZWF0ZWQKLSAgICBidWlsZGVyLnNldE9w
dGlvbmFsU2ZpeGVkNjQoMTAwKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkSW50MzIoMTAwKTsK
LSAgICAvLyBlbnVtIGZpZWxkIHNjYWxhciBhbmQgcmVwZWF0ZWQKLSAgICBidWlsZGVyLnNldE9w
dGlvbmFsSW1wb3J0RW51bShVbml0dGVzdEltcG9ydC5JbXBvcnRFbnVtLklNUE9SVF9CQVIpOwot
ICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRJbXBvcnRFbnVtKFVuaXR0ZXN0SW1wb3J0LkltcG9ydEVu
dW0uSU1QT1JUX0JBUik7Ci0gICAgLy8gcHJvdG8gZmllbGQgc2NhbGFyIGFuZCByZXBlYXRlZAot
ICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxGb3JlaWduTWVzc2FnZShGb3JlaWduTWVzc2FnZS5uZXdC
dWlsZGVyKCkuc2V0QygxKSk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZvcmVpZ25NZXNzYWdl
KEZvcmVpZ25NZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRDKDEpKTsKLQotICAgIFRlc3RBbGxUeXBl
cyB2YWx1ZTEgPSBidWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMTAwLCB2YWx1
ZTEuZ2V0T3B0aW9uYWxTZml4ZWQ2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTAwLCB2YWx1ZTEu
Z2V0UmVwZWF0ZWRJbnQzMigwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0SW1wb3J0Lklt
cG9ydEVudW0uSU1QT1JUX0JBUiwKLSAgICAgICAgdmFsdWUxLmdldE9wdGlvbmFsSW1wb3J0RW51
bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoVW5pdHRlc3RJbXBvcnQuSW1wb3J0RW51bS5JTVBPUlRf
QkFSLAotICAgICAgICB2YWx1ZTEuZ2V0UmVwZWF0ZWRJbXBvcnRFbnVtKDApKTsKLSAgICBhc3Nl
cnRFcXVhbHMoMSwgdmFsdWUxLmdldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UoKS5nZXRDKCkpOwot
ICAgIGFzc2VydEVxdWFscygxLCB2YWx1ZTEuZ2V0UmVwZWF0ZWRGb3JlaWduTWVzc2FnZSgwKS5n
ZXRDKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgYnVpbGRlciBkaWRuJ3QgdXBkYXRlIHBy
ZXZpb3VzbHkgY3JlYXRlZCB2YWx1ZXMKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsU2ZpeGVkNjQo
MjAwKTsKLSAgICBidWlsZGVyLnNldFJlcGVhdGVkSW50MzIoMCwgMjAwKTsKLSAgICBidWlsZGVy
LnNldE9wdGlvbmFsSW1wb3J0RW51bShVbml0dGVzdEltcG9ydC5JbXBvcnRFbnVtLklNUE9SVF9G
T08pOwotICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRJbXBvcnRFbnVtKDAsIFVuaXR0ZXN0SW1wb3J0
LkltcG9ydEVudW0uSU1QT1JUX0ZPTyk7Ci0gICAgYnVpbGRlci5zZXRPcHRpb25hbEZvcmVpZ25N
ZXNzYWdlKEZvcmVpZ25NZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRDKDIpKTsKLSAgICBidWlsZGVy
LnNldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UoMCwgRm9yZWlnbk1lc3NhZ2UubmV3QnVpbGRlcigp
LnNldEMoMikpOwotCi0gICAgVGVzdEFsbFR5cGVzIHZhbHVlMiA9IGJ1aWxkZXIuYnVpbGQoKTsK
LQotICAgIC8vIE1ha2Ugc3VyZSB2YWx1ZTEgZGlkbid0IGNoYW5nZS4KLSAgICBhc3NlcnRFcXVh
bHMoMTAwLCB2YWx1ZTEuZ2V0T3B0aW9uYWxTZml4ZWQ2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMo
MTAwLCB2YWx1ZTEuZ2V0UmVwZWF0ZWRJbnQzMigwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0
ZXN0SW1wb3J0LkltcG9ydEVudW0uSU1QT1JUX0JBUiwKLSAgICAgICAgdmFsdWUxLmdldE9wdGlv
bmFsSW1wb3J0RW51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoVW5pdHRlc3RJbXBvcnQuSW1wb3J0
RW51bS5JTVBPUlRfQkFSLAotICAgICAgICB2YWx1ZTEuZ2V0UmVwZWF0ZWRJbXBvcnRFbnVtKDAp
KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgdmFsdWUxLmdldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2Uo
KS5nZXRDKCkpOwotICAgIGFzc2VydEVxdWFscygxLCB2YWx1ZTEuZ2V0UmVwZWF0ZWRGb3JlaWdu
TWVzc2FnZSgwKS5nZXRDKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIHZhbHVlMiBpcyBjb3JyZWN0
Ci0gICAgYXNzZXJ0RXF1YWxzKDIwMCwgdmFsdWUyLmdldE9wdGlvbmFsU2ZpeGVkNjQoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDIwMCwgdmFsdWUyLmdldFJlcGVhdGVkSW50MzIoMCkpOwotICAgIGFz
c2VydEVxdWFscyhVbml0dGVzdEltcG9ydC5JbXBvcnRFbnVtLklNUE9SVF9GT08sCi0gICAgICAg
IHZhbHVlMi5nZXRPcHRpb25hbEltcG9ydEVudW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0
ZXN0SW1wb3J0LkltcG9ydEVudW0uSU1QT1JUX0ZPTywKLSAgICAgICAgdmFsdWUyLmdldFJlcGVh
dGVkSW1wb3J0RW51bSgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIHZhbHVlMi5nZXRPcHRpb25h
bEZvcmVpZ25NZXNzYWdlKCkuZ2V0QygpKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgdmFsdWUyLmdl
dFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UoMCkuZ2V0QygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3RQcm90b3NTaGFyZVJlcGVhdGVkQXJyYXlzSWZEaWRudENoYW5nZSgpIHRocm93cyBFeGNl
cHRpb24gewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMu
bmV3QnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRJbnQzMigxMDApOwotICAgIGJ1
aWxkZXIuYWRkUmVwZWF0ZWRGb3JlaWduTWVzc2FnZShGb3JlaWduTWVzc2FnZS5nZXREZWZhdWx0
SW5zdGFuY2UoKSk7Ci0KLSAgICBUZXN0QWxsVHlwZXMgdmFsdWUxID0gYnVpbGRlci5idWlsZCgp
OwotICAgIFRlc3RBbGxUeXBlcyB2YWx1ZTIgPSB2YWx1ZTEudG9CdWlsZGVyKCkuYnVpbGQoKTsK
LQotICAgIGFzc2VydFNhbWUodmFsdWUxLmdldFJlcGVhdGVkSW50MzJMaXN0KCksIHZhbHVlMi5n
ZXRSZXBlYXRlZEludDMyTGlzdCgpKTsKLSAgICBhc3NlcnRTYW1lKHZhbHVlMS5nZXRSZXBlYXRl
ZEZvcmVpZ25NZXNzYWdlTGlzdCgpLAotICAgICAgICB2YWx1ZTIuZ2V0UmVwZWF0ZWRGb3JlaWdu
TWVzc2FnZUxpc3QoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0ZWRBcnJheXNB
cmVJbW11dGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRl
ciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFkZFJl
cGVhdGVkSW50MzIoMTAwKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkSW1wb3J0RW51bShVbml0
dGVzdEltcG9ydC5JbXBvcnRFbnVtLklNUE9SVF9CQVIpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0
ZWRGb3JlaWduTWVzc2FnZShGb3JlaWduTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0g
ICAgYXNzZXJ0SXNVbm1vZGlmaWFibGUoYnVpbGRlci5nZXRSZXBlYXRlZEludDMyTGlzdCgpKTsK
LSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZShidWlsZGVyLmdldFJlcGVhdGVkSW1wb3J0RW51bUxp
c3QoKSk7Ci0gICAgYXNzZXJ0SXNVbm1vZGlmaWFibGUoYnVpbGRlci5nZXRSZXBlYXRlZEZvcmVp
Z25NZXNzYWdlTGlzdCgpKTsKLSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZShidWlsZGVyLmdldFJl
cGVhdGVkRmxvYXRMaXN0KCkpOwotCi0KLSAgICBUZXN0QWxsVHlwZXMgdmFsdWUgPSBidWlsZGVy
LmJ1aWxkKCk7Ci0gICAgYXNzZXJ0SXNVbm1vZGlmaWFibGUodmFsdWUuZ2V0UmVwZWF0ZWRJbnQz
Mkxpc3QoKSk7Ci0gICAgYXNzZXJ0SXNVbm1vZGlmaWFibGUodmFsdWUuZ2V0UmVwZWF0ZWRJbXBv
cnRFbnVtTGlzdCgpKTsKLSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZSh2YWx1ZS5nZXRSZXBlYXRl
ZEZvcmVpZ25NZXNzYWdlTGlzdCgpKTsKLSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZSh2YWx1ZS5n
ZXRSZXBlYXRlZEZsb2F0TGlzdCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZWRN
ZXNzYWdlc0FyZUltbXV0YWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBl
cyB2YWx1ZSA9IFRlc3RBbGxUeXBlcy5wYXJzZXIoKS5wYXJzZUZyb20oVGVzdFV0aWwuZ2V0QWxs
U2V0KCkudG9CeXRlU3RyaW5nKCkpOwotICAgIGFzc2VydElzVW5tb2RpZmlhYmxlKHZhbHVlLmdl
dFJlcGVhdGVkSW50MzJMaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2RpZmlhYmxlKHZhbHVlLmdl
dFJlcGVhdGVkSW50NjRMaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2RpZmlhYmxlKHZhbHVlLmdl
dFJlcGVhdGVkVWludDMyTGlzdCgpKTsKLSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZSh2YWx1ZS5n
ZXRSZXBlYXRlZFVpbnQ2NExpc3QoKSk7Ci0gICAgYXNzZXJ0SXNVbm1vZGlmaWFibGUodmFsdWUu
Z2V0UmVwZWF0ZWRTaW50MzJMaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2RpZmlhYmxlKHZhbHVl
LmdldFJlcGVhdGVkU2ludDY0TGlzdCgpKTsKLSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZSh2YWx1
ZS5nZXRSZXBlYXRlZEZpeGVkMzJMaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2RpZmlhYmxlKHZh
bHVlLmdldFJlcGVhdGVkRml4ZWQ2NExpc3QoKSk7Ci0gICAgYXNzZXJ0SXNVbm1vZGlmaWFibGUo
dmFsdWUuZ2V0UmVwZWF0ZWRTZml4ZWQzMkxpc3QoKSk7Ci0gICAgYXNzZXJ0SXNVbm1vZGlmaWFi
bGUodmFsdWUuZ2V0UmVwZWF0ZWRTZml4ZWQ2NExpc3QoKSk7Ci0gICAgYXNzZXJ0SXNVbm1vZGlm
aWFibGUodmFsdWUuZ2V0UmVwZWF0ZWRGbG9hdExpc3QoKSk7Ci0gICAgYXNzZXJ0SXNVbm1vZGlm
aWFibGUodmFsdWUuZ2V0UmVwZWF0ZWREb3VibGVMaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2Rp
ZmlhYmxlKHZhbHVlLmdldFJlcGVhdGVkQm9vbExpc3QoKSk7Ci0gICAgYXNzZXJ0SXNVbm1vZGlm
aWFibGUodmFsdWUuZ2V0UmVwZWF0ZWRTdHJpbmdMaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2Rp
ZmlhYmxlKHZhbHVlLmdldFJlcGVhdGVkQnl0ZXNMaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2Rp
ZmlhYmxlKHZhbHVlLmdldFJlcGVhdGVkR3JvdXBMaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2Rp
ZmlhYmxlKHZhbHVlLmdldFJlcGVhdGVkTmVzdGVkTWVzc2FnZUxpc3QoKSk7Ci0gICAgYXNzZXJ0
SXNVbm1vZGlmaWFibGUodmFsdWUuZ2V0UmVwZWF0ZWRGb3JlaWduTWVzc2FnZUxpc3QoKSk7Ci0g
ICAgYXNzZXJ0SXNVbm1vZGlmaWFibGUodmFsdWUuZ2V0UmVwZWF0ZWRJbXBvcnRNZXNzYWdlTGlz
dCgpKTsKLSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZSh2YWx1ZS5nZXRSZXBlYXRlZE5lc3RlZEVu
dW1MaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2RpZmlhYmxlKHZhbHVlLmdldFJlcGVhdGVkRm9y
ZWlnbkVudW1MaXN0KCkpOwotICAgIGFzc2VydElzVW5tb2RpZmlhYmxlKHZhbHVlLmdldFJlcGVh
dGVkSW1wb3J0RW51bUxpc3QoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYXNzZXJ0SXNVbm1v
ZGlmaWFibGUoTGlzdDw/PiBsaXN0KSB7Ci0gICAgaWYgKGxpc3QgPT0gQ29sbGVjdGlvbnMuZW1w
dHlMaXN0KCkpIHsKLSAgICAgIC8vIE9LQVkgLS0gTmVlZCB0byBjaGVjayB0aGlzIGIvYyBFbXB0
eUxpc3QgYWxsb3dzIHlvdSB0byBjYWxsIGNsZWFyLgotICAgIH0gZWxzZSB7Ci0gICAgICB0cnkg
ewotICAgICAgICBsaXN0LmNsZWFyKCk7Ci0gICAgICAgIGZhaWwoIkxpc3Qgd2Fzbid0IGltbXV0
YWJsZSIpOwotICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkg
ewotICAgICAgICAvLyBnb29kCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdFNldHRlcnNSZWplY3ROdWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5
cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgdHJ5
IHsKLSAgICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxTdHJpbmcobnVsbCk7Ci0gICAgICBmYWlsKCJF
eGNlcHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgfQotICAg
IHRyeSB7Ci0gICAgICBidWlsZGVyLnNldE9wdGlvbmFsQnl0ZXMobnVsbCk7Ci0gICAgICBmYWls
KCJFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgfQot
ICAgIHRyeSB7Ci0gICAgICBidWlsZGVyLnNldE9wdGlvbmFsTmVzdGVkTWVzc2FnZSgoVGVzdEFs
bFR5cGVzLk5lc3RlZE1lc3NhZ2UpIG51bGwpOwotICAgICAgZmFpbCgiRXhjZXB0aW9uIHdhcyBu
b3QgdGhyb3duIik7Ci0gICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgewotICAg
ICAgLy8gV2UgZXhwZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgIH0KLSAgICB0cnkgewotICAgICAg
YnVpbGRlci5zZXRPcHRpb25hbE5lc3RlZE1lc3NhZ2UoCi0gICAgICAgICAgKFRlc3RBbGxUeXBl
cy5OZXN0ZWRNZXNzYWdlLkJ1aWxkZXIpIG51bGwpOwotICAgICAgZmFpbCgiRXhjZXB0aW9uIHdh
cyBub3QgdGhyb3duIik7Ci0gICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgewot
ICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgIH0KLSAgICB0cnkgewotICAg
ICAgYnVpbGRlci5zZXRPcHRpb25hbE5lc3RlZEVudW0obnVsbCk7Ci0gICAgICBmYWlsKCJFeGNl
cHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlv
biBlKSB7Ci0gICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgfQotICAgIHRy
eSB7Ci0gICAgICBidWlsZGVyLmFkZFJlcGVhdGVkU3RyaW5nKG51bGwpOwotICAgICAgZmFpbCgi
RXhjZXB0aW9uIHdhcyBub3QgdGhyb3duIik7Ci0gICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNl
cHRpb24gZSkgewotICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgIH0KLSAg
ICB0cnkgewotICAgICAgYnVpbGRlci5hZGRSZXBlYXRlZEJ5dGVzKG51bGwpOwotICAgICAgZmFp
bCgiRXhjZXB0aW9uIHdhcyBub3QgdGhyb3duIik7Ci0gICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJF
eGNlcHRpb24gZSkgewotICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgIH0K
LSAgICB0cnkgewotICAgICAgYnVpbGRlci5hZGRSZXBlYXRlZE5lc3RlZE1lc3NhZ2UoKFRlc3RB
bGxUeXBlcy5OZXN0ZWRNZXNzYWdlKSBudWxsKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiB3YXMg
bm90IHRocm93biIpOwotICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAg
ICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAg
IGJ1aWxkZXIuYWRkUmVwZWF0ZWROZXN0ZWRNZXNzYWdlKAotICAgICAgICAgIChUZXN0QWxsVHlw
ZXMuTmVzdGVkTWVzc2FnZS5CdWlsZGVyKSBudWxsKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiB3
YXMgbm90IHRocm93biIpOwotICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICB9Ci0gICAgdHJ5IHsKLSAg
ICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWROZXN0ZWRFbnVtKG51bGwpOwotICAgICAgZmFpbCgiRXhj
ZXB0aW9uIHdhcyBub3QgdGhyb3duIik7Ci0gICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRp
b24gZSkgewotICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgIH0KLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXBlYXRlZFNldHRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxk
ZXIoKTsKLSAgICBUZXN0VXRpbC5zZXRBbGxGaWVsZHMoYnVpbGRlcik7Ci0gICAgVGVzdFV0aWwu
bW9kaWZ5UmVwZWF0ZWRGaWVsZHMoYnVpbGRlcik7Ci0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2Ug
PSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0UmVwZWF0ZWRGaWVsZHNNb2Rp
ZmllZChtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXBlYXRlZFNldHRlcnNS
ZWplY3ROdWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIg
YnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0KLSAgICBidWlsZGVyLmFkZFJl
cGVhdGVkU3RyaW5nKCJvbmUiKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkU3RyaW5nKCJ0d28i
KTsKLSAgICB0cnkgewotICAgICAgYnVpbGRlci5zZXRSZXBlYXRlZFN0cmluZygxLCBudWxsKTsK
LSAgICAgIGZhaWwoIkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwotICAgIH0gY2F0Y2ggKE51
bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlv
bi4KLSAgICB9Ci0KLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkQnl0ZXMoVGVzdFV0aWwudG9CeXRl
cygib25lIikpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRCeXRlcyhUZXN0VXRpbC50b0J5dGVz
KCJ0d28iKSk7Ci0gICAgdHJ5IHsKLSAgICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRCeXRlcygxLCBu
dWxsKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwotICAgIH0gY2F0
Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4
Y2VwdGlvbi4KLSAgICB9Ci0KLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkTmVzdGVkTWVzc2FnZSgK
LSAgICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYigyMTgp
LmJ1aWxkKCkpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWROZXN0ZWRNZXNzYWdlKAotICAgICAg
VGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDQ1NikuYnVpbGQo
KSk7Ci0gICAgdHJ5IHsKLSAgICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWROZXN0ZWRNZXNzYWdlKDEs
IChUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZSkgbnVsbCk7Ci0gICAgICBmYWlsKCJFeGNlcHRp
b24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgfQotICAgIHRyeSB7
Ci0gICAgICBidWlsZGVyLnNldFJlcGVhdGVkTmVzdGVkTWVzc2FnZSgKLSAgICAgICAgICAxLCAo
VGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UuQnVpbGRlcikgbnVsbCk7Ci0gICAgICBmYWlsKCJF
eGNlcHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgfQotCi0g
ICAgYnVpbGRlci5hZGRSZXBlYXRlZE5lc3RlZEVudW0oVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0u
Rk9PKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkTmVzdGVkRW51bShUZXN0QWxsVHlwZXMuTmVz
dGVkRW51bS5CQVIpOwotICAgIHRyeSB7Ci0gICAgICBidWlsZGVyLnNldFJlcGVhdGVkTmVzdGVk
RW51bSgxLCBudWxsKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwot
ICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIFdlIGV4cGVj
dCB0aGlzIGV4Y2VwdGlvbi4KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0
ZWRBcHBlbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBi
dWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLQotICAgIGJ1aWxkZXIuYWRkQWxs
UmVwZWF0ZWRJbnQzMihBcnJheXMuYXNMaXN0KDEsIDIsIDMsIDQpKTsKLSAgICBidWlsZGVyLmFk
ZEFsbFJlcGVhdGVkRm9yZWlnbkVudW0oQXJyYXlzLmFzTGlzdChGb3JlaWduRW51bS5GT1JFSUdO
X0JBWikpOwotCi0gICAgRm9yZWlnbk1lc3NhZ2UgZm9yZWlnbk1lc3NhZ2UgPQotICAgICAgICBG
b3JlaWduTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0QygxMikuYnVpbGQoKTsKLSAgICBidWlsZGVy
LmFkZEFsbFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UoQXJyYXlzLmFzTGlzdChmb3JlaWduTWVzc2Fn
ZSkpOwotCi0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKG1lc3NhZ2UuZ2V0UmVwZWF0ZWRJbnQzMkxpc3QoKSwgQXJyYXlzLmFzTGlz
dCgxLCAyLCAzLCA0KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGb3Jl
aWduRW51bUxpc3QoKSwKLSAgICAgICAgQXJyYXlzLmFzTGlzdChGb3JlaWduRW51bS5GT1JFSUdO
X0JBWikpOwotICAgIGFzc2VydEVxdWFscygxLCBtZXNzYWdlLmdldFJlcGVhdGVkRm9yZWlnbk1l
c3NhZ2VDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRG
b3JlaWduTWVzc2FnZSgwKS5nZXRDKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlcGVh
dGVkQXBwZW5kUmVqZWN0c051bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlw
ZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLQotICAgIEZv
cmVpZ25NZXNzYWdlIGZvcmVpZ25NZXNzYWdlID0KLSAgICAgICAgRm9yZWlnbk1lc3NhZ2UubmV3
QnVpbGRlcigpLnNldEMoMTIpLmJ1aWxkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIGJ1aWxkZXIuYWRk
QWxsUmVwZWF0ZWRGb3JlaWduTWVzc2FnZSgKLSAgICAgICAgICBBcnJheXMuYXNMaXN0KGZvcmVp
Z25NZXNzYWdlLCAoRm9yZWlnbk1lc3NhZ2UpIG51bGwpKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlv
biB3YXMgbm90IHRocm93biIpOwotICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICB9Ci0KLSAgICB0cnkg
ewotICAgICAgYnVpbGRlci5hZGRBbGxSZXBlYXRlZEZvcmVpZ25FbnVtKAotICAgICAgICAgIEFy
cmF5cy5hc0xpc3QoRm9yZWlnbkVudW0uRk9SRUlHTl9CQVosIG51bGwpKTsKLSAgICAgIGZhaWwo
IkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwotICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICB9Ci0K
LSAgICB0cnkgewotICAgICAgYnVpbGRlci5hZGRBbGxSZXBlYXRlZFN0cmluZyhBcnJheXMuYXNM
aXN0KCJvbmUiLCBudWxsKSk7Ci0gICAgICBmYWlsKCJFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24i
KTsKLSAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBXZSBl
eHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIGJ1aWxkZXIu
YWRkQWxsUmVwZWF0ZWRCeXRlcyhBcnJheXMuYXNMaXN0KFRlc3RVdGlsLnRvQnl0ZXMoIm9uZSIp
LCBudWxsKSk7Ci0gICAgICBmYWlsKCJFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9
IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBXZSBleHBlY3QgdGhp
cyBleGNlcHRpb24uCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0ZWRB
cHBlbmRJdGVyYXRlT25seU9uY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBDcmVhdGUg
YSBJdGVyYWJsZSB0aGF0IGNhbiBvbmx5IGJlIGl0ZXJhdGVkIG9uY2UuCi0gICAgSXRlcmFibGU8
U3RyaW5nPiBzdHJpbmdJdGVyYWJsZSA9IG5ldyBJdGVyYWJsZTxTdHJpbmc+KCkgewotICAgICAg
cHJpdmF0ZSBib29sZWFuIGNhbGxlZCA9IGZhbHNlOwotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgSXRlcmF0b3I8U3RyaW5nPiBpdGVyYXRvcigpIHsKLSAgICAgICAgaWYgKGNhbGxlZCkg
ewotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAg
fQotICAgICAgICBjYWxsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdCgi
b25lIiwgInR3byIsICJ0aHJlZSIpLml0ZXJhdG9yKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBU
ZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsK
LSAgICBidWlsZGVyLmFkZEFsbFJlcGVhdGVkU3RyaW5nKHN0cmluZ0l0ZXJhYmxlKTsKLSAgICBh
c3NlcnRFcXVhbHMoMywgYnVpbGRlci5nZXRSZXBlYXRlZFN0cmluZ0NvdW50KCkpOwotICAgIGFz
c2VydEVxdWFscygib25lIiwgYnVpbGRlci5nZXRSZXBlYXRlZFN0cmluZygwKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKCJ0d28iLCBidWlsZGVyLmdldFJlcGVhdGVkU3RyaW5nKDEpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoInRocmVlIiwgYnVpbGRlci5nZXRSZXBlYXRlZFN0cmluZygyKSk7Ci0KLSAgICB0
cnkgewotICAgICAgYnVpbGRlci5hZGRBbGxSZXBlYXRlZFN0cmluZyhzdHJpbmdJdGVyYWJsZSk7
Ci0gICAgICBmYWlsKCJFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9IGNhdGNoIChJ
bGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgZXhjZXB0
aW9uLgotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZUZyb21PdGhlclJlamVj
dHNOdWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIFRlc3RBbGxUeXBl
cy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgICAgYnVp
bGRlci5tZXJnZUZyb20oKFRlc3RBbGxUeXBlcykgbnVsbCk7Ci0gICAgICBmYWlsKCJFeGNlcHRp
b24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgfQotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdFNldHRpbmdGb3JlaWduTWVzc2FnZVVzaW5nQnVpbGRlcigpIHRocm93
cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0gVGVzdEFsbFR5cGVzLm5l
d0J1aWxkZXIoKQotICAgICAgICAvLyBQYXNzIGJ1aWxkZXIgZm9yIGZvcmVpZ24gbWVzc2FnZSBp
bnN0YW5jZS4KLSAgICAgICAgLnNldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UoRm9yZWlnbk1lc3Nh
Z2UubmV3QnVpbGRlcigpLnNldEMoMTIzKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgVGVzdEFs
bFR5cGVzIGV4cGVjdGVkTWVzc2FnZSA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkKLSAgICAg
ICAgLy8gQ3JlYXRlIGV4cGVjdGVkIHZlcnNpb24gcGFzc2luZyBmb3JlaWduIG1lc3NhZ2UgaW5z
dGFuY2UgZXhwbGljaXRseS4KLSAgICAgICAgLnNldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UoCi0g
ICAgICAgICAgICBGb3JlaWduTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0QygxMjMpLmJ1aWxkKCkp
Ci0gICAgICAgIC5idWlsZCgpOwotICAgIC8vIFRPRE8obmdkKTogVXBncmFkZSB0byB1c2luZyBy
ZWFsICNlcXVhbHMgbWV0aG9kIG9uY2UgaW1wbGVtZW50ZWQKLSAgICBhc3NlcnRFcXVhbHMoZXhw
ZWN0ZWRNZXNzYWdlLnRvU3RyaW5nKCksIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0U2V0dGluZ1JlcGVhdGVkRm9yZWlnbk1lc3NhZ2VVc2luZ0J1aWxkZXIo
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IFRlc3RBbGxU
eXBlcy5uZXdCdWlsZGVyKCkKLSAgICAgICAgLy8gUGFzcyBidWlsZGVyIGZvciBmb3JlaWduIG1l
c3NhZ2UgaW5zdGFuY2UuCi0gICAgICAgIC5hZGRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlKEZvcmVp
Z25NZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRDKDQ1NikpCi0gICAgICAgIC5idWlsZCgpOwotICAg
IFRlc3RBbGxUeXBlcyBleHBlY3RlZE1lc3NhZ2UgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigp
Ci0gICAgICAgIC8vIENyZWF0ZSBleHBlY3RlZCB2ZXJzaW9uIHBhc3NpbmcgZm9yZWlnbiBtZXNz
YWdlIGluc3RhbmNlIGV4cGxpY2l0bHkuCi0gICAgICAgIC5hZGRSZXBlYXRlZEZvcmVpZ25NZXNz
YWdlKAotICAgICAgICAgICAgRm9yZWlnbk1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEMoNDU2KS5i
dWlsZCgpKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRNZXNz
YWdlLnRvU3RyaW5nKCksIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0RGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0VXRpbC5hc3NlcnRD
bGVhcihUZXN0QWxsVHlwZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICAgIFRlc3RVdGlsLmFz
c2VydENsZWFyKFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuYnVpbGQoKSk7Ci0KLSAgICBUZXN0
RXh0cmVtZURlZmF1bHRWYWx1ZXMgbWVzc2FnZSA9Ci0gICAgICAgIFRlc3RFeHRyZW1lRGVmYXVs
dFZhbHVlcy5nZXREZWZhdWx0SW5zdGFuY2UoKTsKLSAgICBhc3NlcnRFcXVhbHMoIlx1MTIzNCIs
IG1lc3NhZ2UuZ2V0VXRmOFN0cmluZygpKTsKLSAgICBhc3NlcnRFcXVhbHMoRG91YmxlLlBPU0lU
SVZFX0lORklOSVRZLCBtZXNzYWdlLmdldEluZkRvdWJsZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMo
RG91YmxlLk5FR0FUSVZFX0lORklOSVRZLCBtZXNzYWdlLmdldE5lZ0luZkRvdWJsZSgpKTsKLSAg
ICBhc3NlcnRUcnVlKERvdWJsZS5pc05hTihtZXNzYWdlLmdldE5hbkRvdWJsZSgpKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKEZsb2F0LlBPU0lUSVZFX0lORklOSVRZLCBtZXNzYWdlLmdldEluZkZsb2F0
KCkpOwotICAgIGFzc2VydEVxdWFscyhGbG9hdC5ORUdBVElWRV9JTkZJTklUWSwgbWVzc2FnZS5n
ZXROZWdJbmZGbG9hdCgpKTsKLSAgICBhc3NlcnRUcnVlKEZsb2F0LmlzTmFOKG1lc3NhZ2UuZ2V0
TmFuRmxvYXQoKSkpOwotICAgIGFzc2VydEVxdWFscygiPyA/ID8/ID8/ID8/PyA/Py8gPz8tIiwg
bWVzc2FnZS5nZXRDcHBUcmlncmFwaCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVh
cigpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIg
PSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIFRlc3RVdGlsLmFzc2VydENsZWFyKGJ1
aWxkZXIpOwotICAgIFRlc3RVdGlsLnNldEFsbEZpZWxkcyhidWlsZGVyKTsKLSAgICBidWlsZGVy
LmNsZWFyKCk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0Q2xlYXIoYnVpbGRlcik7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0UmVmbGVjdGlvbkdldHRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIo
KTsKLSAgICBUZXN0VXRpbC5zZXRBbGxGaWVsZHMoYnVpbGRlcik7Ci0gICAgcmVmbGVjdGlvblRl
c3Rlci5hc3NlcnRBbGxGaWVsZHNTZXRWaWFSZWZsZWN0aW9uKGJ1aWxkZXIpOwotCi0gICAgVGVz
dEFsbFR5cGVzIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgcmVmbGVjdGlvblRlc3Rl
ci5hc3NlcnRBbGxGaWVsZHNTZXRWaWFSZWZsZWN0aW9uKG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdFJlZmxlY3Rpb25TZXR0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAg
VGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7
Ci0gICAgcmVmbGVjdGlvblRlc3Rlci5zZXRBbGxGaWVsZHNWaWFSZWZsZWN0aW9uKGJ1aWxkZXIp
OwotICAgIFRlc3RVdGlsLmFzc2VydEFsbEZpZWxkc1NldChidWlsZGVyKTsKLQotICAgIFRlc3RB
bGxUeXBlcyBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIFRlc3RVdGlsLmFzc2VydEFs
bEZpZWxkc1NldChtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWZsZWN0aW9u
U2V0dGVyc1JlamVjdE51bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMu
QnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICByZWZsZWN0
aW9uVGVzdGVyLmFzc2VydFJlZmxlY3Rpb25TZXR0ZXJzUmVqZWN0TnVsbChidWlsZGVyKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWZsZWN0aW9uUmVwZWF0ZWRTZXR0ZXJzKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxU
eXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgcmVmbGVjdGlvblRlc3Rlci5zZXRBbGxGaWVsZHNWaWFS
ZWZsZWN0aW9uKGJ1aWxkZXIpOwotICAgIHJlZmxlY3Rpb25UZXN0ZXIubW9kaWZ5UmVwZWF0ZWRG
aWVsZHNWaWFSZWZsZWN0aW9uKGJ1aWxkZXIpOwotICAgIFRlc3RVdGlsLmFzc2VydFJlcGVhdGVk
RmllbGRzTW9kaWZpZWQoYnVpbGRlcik7Ci0KLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRSZXBlYXRlZEZpZWxkc01vZGlmaWVk
KG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlZmxlY3Rpb25SZXBlYXRlZFNl
dHRlcnNSZWplY3ROdWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1
aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgcmVmbGVjdGlv
blRlc3Rlci5hc3NlcnRSZWZsZWN0aW9uUmVwZWF0ZWRTZXR0ZXJzUmVqZWN0TnVsbChidWlsZGVy
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RSZWZsZWN0aW9uRGVmYXVsdHMoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICByZWZsZWN0aW9uVGVzdGVyLmFzc2VydENsZWFyVmlhUmVmbGVjdGlv
bigKLSAgICAgIFRlc3RBbGxUeXBlcy5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgcmVmbGVj
dGlvblRlc3Rlci5hc3NlcnRDbGVhclZpYVJlZmxlY3Rpb24oCi0gICAgICBUZXN0QWxsVHlwZXMu
bmV3QnVpbGRlcigpLmJ1aWxkKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlZmxlY3Rp
b25HZXRPbmVvZigpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVy
IGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIHJlZmxlY3Rpb25UZXN0
ZXIuc2V0QWxsRmllbGRzVmlhUmVmbGVjdGlvbihidWlsZGVyKTsKLSAgICBEZXNjcmlwdG9ycy5P
bmVvZkRlc2NyaXB0b3Igb25lb2YgPQotICAgICAgICBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRv
cigpLmdldE9uZW9mcygpLmdldCgwKTsKLSAgICBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3Ig
ZmllbGQgPQotICAgICAgICBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpLmZpbmRGaWVsZEJ5
TmFtZSgib25lb2ZfYnl0ZXMiKTsKLSAgICBhc3NlcnRTYW1lKGZpZWxkLCBidWlsZGVyLmdldE9u
ZW9mRmllbGREZXNjcmlwdG9yKG9uZW9mKSk7Ci0KLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9
IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRTYW1lKGZpZWxkLCBtZXNzYWdlLmdldE9uZW9m
RmllbGREZXNjcmlwdG9yKG9uZW9mKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVmbGVj
dGlvbkNsZWFyT25lb2YoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVp
bGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICByZWZsZWN0aW9u
VGVzdGVyLnNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rpb24oYnVpbGRlcik7Ci0gICAgRGVzY3JpcHRv
cnMuT25lb2ZEZXNjcmlwdG9yIG9uZW9mID0KLSAgICAgICAgVGVzdEFsbFR5cGVzLmdldERlc2Ny
aXB0b3IoKS5nZXRPbmVvZnMoKS5nZXQoMCk7Ci0gICAgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlw
dG9yIGZpZWxkID0KLSAgICAgICAgVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKS5maW5kRmll
bGRCeU5hbWUoIm9uZW9mX2J5dGVzIik7Ci0KLSAgICBhc3NlcnRUcnVlKGJ1aWxkZXIuaGFzT25l
b2Yob25lb2YpKTsKLSAgICBhc3NlcnRUcnVlKGJ1aWxkZXIuaGFzRmllbGQoZmllbGQpKTsKLSAg
ICBidWlsZGVyLmNsZWFyT25lb2Yob25lb2YpOwotICAgIGFzc2VydEZhbHNlKGJ1aWxkZXIuaGFz
T25lb2Yob25lb2YpKTsKLSAgICBhc3NlcnRGYWxzZShidWlsZGVyLmhhc0ZpZWxkKGZpZWxkKSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RW51bUludGVyZmFjZSgpIHRocm93cyBFeGNlcHRp
b24gewotICAgIGFzc2VydFRydWUoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpLmdl
dERlZmF1bHROZXN0ZWRFbnVtKCkKLSAgICAgICAgaW5zdGFuY2VvZiBQcm90b2NvbE1lc3NhZ2VF
bnVtKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFbnVtTWFwKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgSW50ZXJuYWwuRW51bUxpdGVNYXA8Rm9yZWlnbkVudW0+IG1hcCA9IEZvcmVpZ25F
bnVtLmludGVybmFsR2V0VmFsdWVNYXAoKTsKLQotICAgIGZvciAoRm9yZWlnbkVudW0gdmFsdWUg
OiBGb3JlaWduRW51bS52YWx1ZXMoKSkgewotICAgICAgYXNzZXJ0RXF1YWxzKHZhbHVlLCBtYXAu
ZmluZFZhbHVlQnlOdW1iZXIodmFsdWUuZ2V0TnVtYmVyKCkpKTsKLSAgICB9Ci0KLSAgICBhc3Nl
cnRUcnVlKG1hcC5maW5kVmFsdWVCeU51bWJlcigxMjM0NSkgPT0gbnVsbCk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0UGFyc2VQYWNrZWRUb1VucGFja2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7
Ci0gICAgVGVzdFVucGFja2VkVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdFVucGFja2VkVHlw
ZXMubmV3QnVpbGRlcigpOwotICAgIFRlc3RVbnBhY2tlZFR5cGVzIG1lc3NhZ2UgPQotICAgICAg
YnVpbGRlci5tZXJnZUZyb20oVGVzdFV0aWwuZ2V0UGFja2VkU2V0KCkudG9CeXRlU3RyaW5nKCkp
LmJ1aWxkKCk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0VW5wYWNrZWRGaWVsZHNTZXQobWVzc2FnZSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VVbnBhY2tlZFRvUGFja2VkKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgVGVzdFBhY2tlZFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RQ
YWNrZWRUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgVGVzdFBhY2tlZFR5cGVzIG1lc3NhZ2UgPQot
ICAgICAgYnVpbGRlci5tZXJnZUZyb20oVGVzdFV0aWwuZ2V0VW5wYWNrZWRTZXQoKS50b0J5dGVT
dHJpbmcoKSkuYnVpbGQoKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRQYWNrZWRGaWVsZHNTZXQobWVz
c2FnZSk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBFeHRlbnNpb25zLgotCi0gIFRlc3RV
dGlsLlJlZmxlY3Rpb25UZXN0ZXIgZXh0ZW5zaW9uc1JlZmxlY3Rpb25UZXN0ZXIgPQotICAgIG5l
dyBUZXN0VXRpbC5SZWZsZWN0aW9uVGVzdGVyKFRlc3RBbGxFeHRlbnNpb25zLmdldERlc2NyaXB0
b3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0VXRpbC5nZXRFeHRl
bnNpb25SZWdpc3RyeSgpKTsKLQotICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaW9uTWVzc2FnZU9y
QnVpbGRlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxFeHRlbnNpb25zLkJ1aWxk
ZXIgYnVpbGRlciA9IFRlc3RBbGxFeHRlbnNpb25zLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0VXRp
bC5zZXRBbGxFeHRlbnNpb25zKGJ1aWxkZXIpOwotICAgIFRlc3RBbGxFeHRlbnNpb25zIG1lc3Nh
Z2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRXh0ZW5zaW9uc1Nl
dChtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpb25SZXBlYXRlZFNl
dHRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucy5CdWlsZGVy
IGJ1aWxkZXIgPSBUZXN0QWxsRXh0ZW5zaW9ucy5uZXdCdWlsZGVyKCk7Ci0gICAgVGVzdFV0aWwu
c2V0QWxsRXh0ZW5zaW9ucyhidWlsZGVyKTsKLSAgICBUZXN0VXRpbC5tb2RpZnlSZXBlYXRlZEV4
dGVuc2lvbnMoYnVpbGRlcik7Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZSA9IGJ1aWxk
ZXIuYnVpbGQoKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRSZXBlYXRlZEV4dGVuc2lvbnNNb2RpZmll
ZChtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpb25EZWZhdWx0cygp
IHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RVdGlsLmFzc2VydEV4dGVuc2lvbnNDbGVhcihU
ZXN0QWxsRXh0ZW5zaW9ucy5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgVGVzdFV0aWwuYXNz
ZXJ0RXh0ZW5zaW9uc0NsZWFyKFRlc3RBbGxFeHRlbnNpb25zLm5ld0J1aWxkZXIoKS5idWlsZCgp
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbnNldFJlcGVhdGVkRXh0ZW5zaW9uR2V0Rmll
bGQoKSB7Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZSA9IFRlc3RBbGxFeHRlbnNpb25z
LmdldERlZmF1bHRJbnN0YW5jZSgpOwotICAgIE9iamVjdCB2YWx1ZTsKLQotICAgIHZhbHVlID0g
bWVzc2FnZS5nZXRGaWVsZChVbml0dGVzdFByb3RvLnJlcGVhdGVkU3RyaW5nRXh0ZW5zaW9uLmdl
dERlc2NyaXB0b3IoKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIExpc3QpOwot
ICAgIGFzc2VydFRydWUoKChMaXN0PD8+KSB2YWx1ZSkuaXNFbXB0eSgpKTsKLSAgICBhc3NlcnRJ
c1VubW9kaWZpYWJsZSgoTGlzdDw/PikgdmFsdWUpOwotCi0gICAgdmFsdWUgPSBtZXNzYWdlLmdl
dEZpZWxkKFVuaXR0ZXN0UHJvdG8ucmVwZWF0ZWROZXN0ZWRNZXNzYWdlRXh0ZW5zaW9uLmdldERl
c2NyaXB0b3IoKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIExpc3QpOwotICAg
IGFzc2VydFRydWUoKChMaXN0PD8+KSB2YWx1ZSkuaXNFbXB0eSgpKTsKLSAgICBhc3NlcnRJc1Vu
bW9kaWZpYWJsZSgoTGlzdDw/PikgdmFsdWUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEV4
dGVuc2lvblJlZmxlY3Rpb25HZXR0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFs
bEV4dGVuc2lvbnMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbEV4dGVuc2lvbnMubmV3QnVpbGRl
cigpOwotICAgIFRlc3RVdGlsLnNldEFsbEV4dGVuc2lvbnMoYnVpbGRlcik7Ci0gICAgZXh0ZW5z
aW9uc1JlZmxlY3Rpb25UZXN0ZXIuYXNzZXJ0QWxsRmllbGRzU2V0VmlhUmVmbGVjdGlvbihidWls
ZGVyKTsKLQotICAgIFRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7
Ci0gICAgZXh0ZW5zaW9uc1JlZmxlY3Rpb25UZXN0ZXIuYXNzZXJ0QWxsRmllbGRzU2V0VmlhUmVm
bGVjdGlvbihtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpb25SZWZs
ZWN0aW9uU2V0dGVycygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxFeHRlbnNpb25z
LkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxFeHRlbnNpb25zLm5ld0J1aWxkZXIoKTsKLSAgICBl
eHRlbnNpb25zUmVmbGVjdGlvblRlc3Rlci5zZXRBbGxGaWVsZHNWaWFSZWZsZWN0aW9uKGJ1aWxk
ZXIpOwotICAgIFRlc3RVdGlsLmFzc2VydEFsbEV4dGVuc2lvbnNTZXQoYnVpbGRlcik7Ci0KLSAg
ICBUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIFRlc3RV
dGlsLmFzc2VydEFsbEV4dGVuc2lvbnNTZXQobWVzc2FnZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0RXh0ZW5zaW9uUmVmbGVjdGlvblNldHRlcnNSZWplY3ROdWxsKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbEV4
dGVuc2lvbnMubmV3QnVpbGRlcigpOwotICAgIGV4dGVuc2lvbnNSZWZsZWN0aW9uVGVzdGVyLmFz
c2VydFJlZmxlY3Rpb25TZXR0ZXJzUmVqZWN0TnVsbChidWlsZGVyKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RFeHRlbnNpb25SZWZsZWN0aW9uUmVwZWF0ZWRTZXR0ZXJzKCkgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFs
bEV4dGVuc2lvbnMubmV3QnVpbGRlcigpOwotICAgIGV4dGVuc2lvbnNSZWZsZWN0aW9uVGVzdGVy
LnNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rpb24oYnVpbGRlcik7Ci0gICAgZXh0ZW5zaW9uc1JlZmxl
Y3Rpb25UZXN0ZXIubW9kaWZ5UmVwZWF0ZWRGaWVsZHNWaWFSZWZsZWN0aW9uKGJ1aWxkZXIpOwot
ICAgIFRlc3RVdGlsLmFzc2VydFJlcGVhdGVkRXh0ZW5zaW9uc01vZGlmaWVkKGJ1aWxkZXIpOwot
Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBU
ZXN0VXRpbC5hc3NlcnRSZXBlYXRlZEV4dGVuc2lvbnNNb2RpZmllZChtZXNzYWdlKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpb25SZWZsZWN0aW9uUmVwZWF0ZWRTZXR0ZXJzUmVq
ZWN0TnVsbCgpCi0gICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9u
cy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsRXh0ZW5zaW9ucy5uZXdCdWlsZGVyKCk7Ci0gICAg
ZXh0ZW5zaW9uc1JlZmxlY3Rpb25UZXN0ZXIuYXNzZXJ0UmVmbGVjdGlvblJlcGVhdGVkU2V0dGVy
c1JlamVjdE51bGwoCi0gICAgICAgIGJ1aWxkZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVz
dEV4dGVuc2lvblJlZmxlY3Rpb25EZWZhdWx0cygpIHRocm93cyBFeGNlcHRpb24gewotICAgIGV4
dGVuc2lvbnNSZWZsZWN0aW9uVGVzdGVyLmFzc2VydENsZWFyVmlhUmVmbGVjdGlvbigKLSAgICAg
IFRlc3RBbGxFeHRlbnNpb25zLmdldERlZmF1bHRJbnN0YW5jZSgpKTsKLSAgICBleHRlbnNpb25z
UmVmbGVjdGlvblRlc3Rlci5hc3NlcnRDbGVhclZpYVJlZmxlY3Rpb24oCi0gICAgICBUZXN0QWxs
RXh0ZW5zaW9ucy5uZXdCdWlsZGVyKCkuYnVpbGQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0Q2xlYXJFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBjbGVhckV4dGVu
c2lvbigpIGlzIG5vdCBhY3R1YWxseSB1c2VkIGluIFRlc3RVdGlsLCBzbyB0cnkgaXQgbWFudWFs
bHkuCi0gICAgYXNzZXJ0RmFsc2UoCi0gICAgICBUZXN0QWxsRXh0ZW5zaW9ucy5uZXdCdWlsZGVy
KCkKLSAgICAgICAgLnNldEV4dGVuc2lvbihVbml0dGVzdFByb3RvLm9wdGlvbmFsSW50MzJFeHRl
bnNpb24sIDEpCi0gICAgICAgIC5jbGVhckV4dGVuc2lvbihVbml0dGVzdFByb3RvLm9wdGlvbmFs
SW50MzJFeHRlbnNpb24pCi0gICAgICAgIC5oYXNFeHRlbnNpb24oVW5pdHRlc3RQcm90by5vcHRp
b25hbEludDMyRXh0ZW5zaW9uKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsCi0gICAgICBUZXN0QWxs
RXh0ZW5zaW9ucy5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFkZEV4dGVuc2lvbihVbml0dGVzdFBy
b3RvLnJlcGVhdGVkSW50MzJFeHRlbnNpb24sIDEpCi0gICAgICAgIC5jbGVhckV4dGVuc2lvbihV
bml0dGVzdFByb3RvLnJlcGVhdGVkSW50MzJFeHRlbnNpb24pCi0gICAgICAgIC5nZXRFeHRlbnNp
b25Db3VudChVbml0dGVzdFByb3RvLnJlcGVhdGVkSW50MzJFeHRlbnNpb24pKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpb25Db3B5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAg
VGVzdEFsbEV4dGVuc2lvbnMgb3JpZ2luYWwgPSBUZXN0VXRpbC5nZXRBbGxFeHRlbnNpb25zU2V0
KCk7Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnMgY29weSA9IFRlc3RBbGxFeHRlbnNpb25zLm5ld0J1
aWxkZXIob3JpZ2luYWwpLmJ1aWxkKCk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRXh0ZW5zaW9u
c1NldChjb3B5KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHRlbnNpb25NZXJnZUZyb20o
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucyBvcmlnaW5hbCA9Ci0g
ICAgICBUZXN0QWxsRXh0ZW5zaW9ucy5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldEV4dGVuc2lv
bihVbml0dGVzdFByb3RvLm9wdGlvbmFsSW50MzJFeHRlbnNpb24sIDEpLmJ1aWxkKCk7Ci0gICAg
VGVzdEFsbEV4dGVuc2lvbnMgbWVyZ2VkID0KLSAgICAgICAgVGVzdEFsbEV4dGVuc2lvbnMubmV3
QnVpbGRlcigpLm1lcmdlRnJvbShvcmlnaW5hbCkuYnVpbGQoKTsKLSAgICBhc3NlcnRUcnVlKG1l
cmdlZC5oYXNFeHRlbnNpb24oVW5pdHRlc3RQcm90by5vcHRpb25hbEludDMyRXh0ZW5zaW9uKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAxLCAoaW50KSBtZXJnZWQuZ2V0RXh0ZW5zaW9u
KFVuaXR0ZXN0UHJvdG8ub3B0aW9uYWxJbnQzMkV4dGVuc2lvbikpOwotICB9Ci0KLSAgLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLSAgLy8gTGl0ZSBFeHRlbnNpb25zLgotCi0gIC8vIFdlIHRlc3QgbGl0ZSBleHRlbnNp
b25zIGRpcmVjdGx5IGJlY2F1c2UgdGhleSBoYXZlIGEgc2VwYXJhdGUKLSAgLy8gaW1wbGVtZW50
YXRpb24gZnJvbSBmdWxsIGV4dGVuc2lvbnMuICBJbiBjb250cmFzdCwgd2UgZG8gbm90IHRlc3QK
LSAgLy8gbGl0ZSBmaWVsZHMgZGlyZWN0bHkgc2luY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgZXhh
Y3RseSB0aGUgc2FtZSBhcwotICAvLyByZWd1bGFyIGZpZWxkcy4KLQotICBwdWJsaWMgdm9pZCB0
ZXN0TGl0ZUV4dGVuc2lvbk1lc3NhZ2VPckJ1aWxkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBUZXN0QWxsRXh0ZW5zaW9uc0xpdGUuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbEV4dGVuc2lv
bnNMaXRlLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0VXRpbExpdGUuc2V0QWxsRXh0ZW5zaW9ucyhi
dWlsZGVyKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRBbGxFeHRlbnNpb25zU2V0KGJ1aWxkZXIpOwot
Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnNMaXRlIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgVGVzdFV0aWwuYXNzZXJ0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RMaXRlRXh0ZW5zaW9uUmVwZWF0ZWRTZXR0ZXJzKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnNMaXRlLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RB
bGxFeHRlbnNpb25zTGl0ZS5uZXdCdWlsZGVyKCk7Ci0gICAgVGVzdFV0aWxMaXRlLnNldEFsbEV4
dGVuc2lvbnMoYnVpbGRlcik7Ci0gICAgVGVzdFV0aWxMaXRlLm1vZGlmeVJlcGVhdGVkRXh0ZW5z
aW9ucyhidWlsZGVyKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRSZXBlYXRlZEV4dGVuc2lvbnNNb2Rp
ZmllZChidWlsZGVyKTsKLQotICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZSBtZXNzYWdlID0gYnVp
bGRlci5idWlsZCgpOwotICAgIFRlc3RVdGlsLmFzc2VydFJlcGVhdGVkRXh0ZW5zaW9uc01vZGlm
aWVkKG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdExpdGVFeHRlbnNpb25EZWZh
dWx0cygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RVdGlsLmFzc2VydEV4dGVuc2lvbnND
bGVhcihUZXN0QWxsRXh0ZW5zaW9uc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICAgIFRl
c3RVdGlsLmFzc2VydEV4dGVuc2lvbnNDbGVhcihUZXN0QWxsRXh0ZW5zaW9uc0xpdGUubmV3QnVp
bGRlcigpLmJ1aWxkKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFyTGl0ZUV4dGVu
c2lvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIGNsZWFyRXh0ZW5zaW9uKCkgaXMgbm90
IGFjdHVhbGx5IHVzZWQgaW4gVGVzdFV0aWwsIHNvIHRyeSBpdCBtYW51YWxseS4KLSAgICBhc3Nl
cnRGYWxzZSgKLSAgICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAg
ICAgLnNldEV4dGVuc2lvbihVbml0dGVzdExpdGUub3B0aW9uYWxJbnQzMkV4dGVuc2lvbkxpdGUs
IDEpCi0gICAgICAgIC5jbGVhckV4dGVuc2lvbihVbml0dGVzdExpdGUub3B0aW9uYWxJbnQzMkV4
dGVuc2lvbkxpdGUpCi0gICAgICAgIC5oYXNFeHRlbnNpb24oVW5pdHRlc3RMaXRlLm9wdGlvbmFs
SW50MzJFeHRlbnNpb25MaXRlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsCi0gICAgICBUZXN0QWxs
RXh0ZW5zaW9uc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5hZGRFeHRlbnNpb24oVW5pdHRl
c3RMaXRlLnJlcGVhdGVkSW50MzJFeHRlbnNpb25MaXRlLCAxKQotICAgICAgICAuY2xlYXJFeHRl
bnNpb24oVW5pdHRlc3RMaXRlLnJlcGVhdGVkSW50MzJFeHRlbnNpb25MaXRlKQotICAgICAgICAu
Z2V0RXh0ZW5zaW9uQ291bnQoVW5pdHRlc3RMaXRlLnJlcGVhdGVkSW50MzJFeHRlbnNpb25MaXRl
KSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TGl0ZUV4dGVuc2lvbkNvcHkoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9uc0xpdGUgb3JpZ2luYWwgPSBUZXN0VXRp
bExpdGUuZ2V0QWxsTGl0ZUV4dGVuc2lvbnNTZXQoKTsKLSAgICBUZXN0QWxsRXh0ZW5zaW9uc0xp
dGUgY29weSA9Ci0gICAgICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZS5uZXdCdWlsZGVyKG9yaWdp
bmFsKS5idWlsZCgpOwotICAgIFRlc3RVdGlsLmFzc2VydEFsbEV4dGVuc2lvbnNTZXQoY29weSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TGl0ZUV4dGVuc2lvbk1lcmdlRnJvbSgpIHRocm93
cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZSBvcmlnaW5hbCA9Ci0gICAg
ICBUZXN0QWxsRXh0ZW5zaW9uc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRFeHRlbnNp
b24oVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW50MzJFeHRlbnNpb25MaXRlLCAxKS5idWlsZCgpOwot
ICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZSBtZXJnZWQgPQotICAgICAgICBUZXN0QWxsRXh0ZW5z
aW9uc0xpdGUubmV3QnVpbGRlcigpLm1lcmdlRnJvbShvcmlnaW5hbCkuYnVpbGQoKTsKLSAgICBh
c3NlcnRUcnVlKG1lcmdlZC5oYXNFeHRlbnNpb24oVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW50MzJF
eHRlbnNpb25MaXRlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAxLCAoaW50KSBtZXJn
ZWQuZ2V0RXh0ZW5zaW9uKFVuaXR0ZXN0TGl0ZS5vcHRpb25hbEludDMyRXh0ZW5zaW9uTGl0ZSkp
OwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gbXVsdGlwbGVfZmlsZXNfdGVzdAotCi0gIC8v
IFRlc3QgdGhhdCBjdXN0b20gb3B0aW9ucyBvZiBhbiBmaWxlIGxldmVsIGVudW0gYXJlIHByb3Bl
cmx5IGluaXRpYWxpemVkLgotICAvLyBUaGlzIHRlc3QgbmVlZHMgdG8gYmUgcHV0IGJlZm9yZSBh
bnkgb3RoZXIgYWNjZXNzIHRvIE11bHRpcGxlRmlsZXNUZXN0UHJvdG8KLSAgLy8gb3IgbWVzc2Fn
ZXMgZGVmaW5lZCBpbiBtdWx0aXBsZV9maWxlc190ZXN0LnByb3RvIGJlY2F1c2UgdGhlIGNsYXNz
IGxvYWRpbmcKLSAgLy8gb3JkZXIgYWZmZWN0cyBpbml0aWFsaXphdGlvbiBwcm9jZXNzIG9mIGN1
c3RvbSBvcHRpb25zLgotICBwdWJsaWMgdm9pZCB0ZXN0RW51bVZhbHVlT3B0aW9uc0luTXVsdGlw
bGVGaWxlc01vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRFcXVhbHMoMTIzNDUs
IEVudW1XaXRoTm9PdXRlci5GT08uZ2V0VmFsdWVEZXNjcmlwdG9yKCkuZ2V0T3B0aW9ucygpCi0g
ICAgICAgIC5nZXRFeHRlbnNpb24oTXVsdGlwbGVGaWxlc1Rlc3RQcm90by5lbnVtVmFsdWVPcHRp
b24pLmludFZhbHVlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlRmlsZXNP
cHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBXZSBtb3N0bHkganVzdCB3YW50IHRv
IGNoZWNrIHRoYXQgdGhpbmdzIGNvbXBpbGUuCi0gICAgTWVzc2FnZVdpdGhOb091dGVyIG1lc3Nh
Z2UgPQotICAgICAgTWVzc2FnZVdpdGhOb091dGVyLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0
TmVzdGVkKE1lc3NhZ2VXaXRoTm9PdXRlci5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRJ
KDEpKQotICAgICAgICAuYWRkRm9yZWlnbihUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLnNldE9w
dGlvbmFsSW50MzIoMSkpCi0gICAgICAgIC5zZXROZXN0ZWRFbnVtKE1lc3NhZ2VXaXRoTm9PdXRl
ci5OZXN0ZWRFbnVtLkJBWikKLSAgICAgICAgLnNldEZvcmVpZ25FbnVtKEVudW1XaXRoTm9PdXRl
ci5CQVIpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLCBNZXNz
YWdlV2l0aE5vT3V0ZXIucGFyc2VGcm9tKG1lc3NhZ2UudG9CeXRlU3RyaW5nKCkpKTsKLQotICAg
IGFzc2VydEVxdWFscyhNdWx0aXBsZUZpbGVzVGVzdFByb3RvLmdldERlc2NyaXB0b3IoKSwKLSAg
ICAgICAgICAgICAgICAgTWVzc2FnZVdpdGhOb091dGVyLmdldERlc2NyaXB0b3IoKS5nZXRGaWxl
KCkpOwotCi0gICAgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkID0KLSAgICAgIE1l
c3NhZ2VXaXRoTm9PdXRlci5nZXREZXNjcmlwdG9yKCkuZmluZEZpZWxkQnlOYW1lKCJmb3JlaWdu
X2VudW0iKTsKLSAgICBhc3NlcnRFcXVhbHMoRW51bVdpdGhOb091dGVyLkJBUi5nZXRWYWx1ZURl
c2NyaXB0b3IoKSwKLSAgICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRGaWVsZChmaWVsZCkpOwot
Ci0gICAgYXNzZXJ0RXF1YWxzKE11bHRpcGxlRmlsZXNUZXN0UHJvdG8uZ2V0RGVzY3JpcHRvcigp
LAotICAgICAgICAgICAgICAgICBTZXJ2aWNlV2l0aE5vT3V0ZXIuZ2V0RGVzY3JpcHRvcigpLmdl
dEZpbGUoKSk7Ci0KLSAgICBhc3NlcnRGYWxzZSgKLSAgICAgIFRlc3RBbGxFeHRlbnNpb25zLmdl
dERlZmF1bHRJbnN0YW5jZSgpLmhhc0V4dGVuc2lvbigKLSAgICAgICAgTXVsdGlwbGVGaWxlc1Rl
c3RQcm90by5leHRlbnNpb25XaXRoT3V0ZXIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RP
cHRpb25hbEZpZWxkV2l0aFJlcXVpcmVkU3ViZmllbGRzT3B0aW1pemVkRm9yU2l6ZSgpCi0gICAg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdE9wdGlvbmFsT3B0aW1pemVkRm9yU2l6ZSBtZXNz
YWdlID0KLSAgICAgICAgVGVzdE9wdGlvbmFsT3B0aW1pemVkRm9yU2l6ZS5nZXREZWZhdWx0SW5z
dGFuY2UoKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaXNJbml0aWFsaXplZCgpKTsKLQotICAg
IG1lc3NhZ2UgPSBUZXN0T3B0aW9uYWxPcHRpbWl6ZWRGb3JTaXplLm5ld0J1aWxkZXIoKS5zZXRP
KAotICAgICAgICBUZXN0UmVxdWlyZWRPcHRpbWl6ZWRGb3JTaXplLm5ld0J1aWxkZXIoKS5idWls
ZFBhcnRpYWwoKQotICAgICAgICApLmJ1aWxkUGFydGlhbCgpOwotICAgIGFzc2VydEZhbHNlKG1l
c3NhZ2UuaXNJbml0aWFsaXplZCgpKTsKLQotICAgIG1lc3NhZ2UgPSBUZXN0T3B0aW9uYWxPcHRp
bWl6ZWRGb3JTaXplLm5ld0J1aWxkZXIoKS5zZXRPKAotICAgICAgICBUZXN0UmVxdWlyZWRPcHRp
bWl6ZWRGb3JTaXplLm5ld0J1aWxkZXIoKS5zZXRYKDUpLmJ1aWxkUGFydGlhbCgpCi0gICAgICAg
ICkuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmlzSW5pdGlhbGl6ZWQo
KSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VW5pbml0aWFsaXplZEV4dGVuc2lvbkluT3B0
aW1pemVkRm9yU2l6ZSgpCi0gICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0T3B0aW1p
emVkRm9yU2l6ZS5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0T3B0aW1pemVkRm9yU2l6ZS5uZXdCdWls
ZGVyKCk7Ci0gICAgYnVpbGRlci5zZXRFeHRlbnNpb24oVGVzdE9wdGltaXplZEZvclNpemUudGVz
dEV4dGVuc2lvbjIsCi0gICAgICAgIFRlc3RSZXF1aXJlZE9wdGltaXplZEZvclNpemUubmV3QnVp
bGRlcigpLmJ1aWxkUGFydGlhbCgpKTsKLSAgICBhc3NlcnRGYWxzZShidWlsZGVyLmlzSW5pdGlh
bGl6ZWQoKSk7Ci0gICAgYXNzZXJ0RmFsc2UoYnVpbGRlci5idWlsZFBhcnRpYWwoKS5pc0luaXRp
YWxpemVkKCkpOwotCi0gICAgYnVpbGRlciA9IFRlc3RPcHRpbWl6ZWRGb3JTaXplLm5ld0J1aWxk
ZXIoKTsKLSAgICBidWlsZGVyLnNldEV4dGVuc2lvbihUZXN0T3B0aW1pemVkRm9yU2l6ZS50ZXN0
RXh0ZW5zaW9uMiwKLSAgICAgICAgVGVzdFJlcXVpcmVkT3B0aW1pemVkRm9yU2l6ZS5uZXdCdWls
ZGVyKCkuc2V0WCgxMCkuYnVpbGRQYXJ0aWFsKCkpOwotICAgIGFzc2VydFRydWUoYnVpbGRlci5p
c0luaXRpYWxpemVkKCkpOwotICAgIGFzc2VydFRydWUoYnVpbGRlci5idWlsZFBhcnRpYWwoKS5p
c0luaXRpYWxpemVkKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFRvQnVpbGRlcigpIHRo
cm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0
QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIFRlc3RVdGlsLnNldEFsbEZpZWxkcyhidWlsZGVy
KTsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBUZXN0
VXRpbC5hc3NlcnRBbGxGaWVsZHNTZXQobWVzc2FnZSk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0QWxs
RmllbGRzU2V0KG1lc3NhZ2UudG9CdWlsZGVyKCkuYnVpbGQoKSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0RmllbGRDb25zdGFudFZhbHVlcygpIHRocm93cyBFeGNlcHRpb24gewotICAgIGFz
c2VydEVxdWFscyhUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZS5CQl9GSUVMRF9OVU1CRVIsIDEp
OwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMuT1BUSU9OQUxfSU5UMzJfRklFTERfTlVN
QkVSLCAxKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzLk9QVElPTkFMR1JPVVBfRklF
TERfTlVNQkVSLCAxNik7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlcy5PUFRJT05BTF9O
RVNURURfTUVTU0FHRV9GSUVMRF9OVU1CRVIsIDE4KTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFs
bFR5cGVzLk9QVElPTkFMX05FU1RFRF9FTlVNX0ZJRUxEX05VTUJFUiwgMjEpOwotICAgIGFzc2Vy
dEVxdWFscyhUZXN0QWxsVHlwZXMuUkVQRUFURURfSU5UMzJfRklFTERfTlVNQkVSLCAzMSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlcy5SRVBFQVRFREdST1VQX0ZJRUxEX05VTUJFUiwg
NDYpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMuUkVQRUFURURfTkVTVEVEX01FU1NB
R0VfRklFTERfTlVNQkVSLCA0OCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlcy5SRVBF
QVRFRF9ORVNURURfRU5VTV9GSUVMRF9OVU1CRVIsIDUxKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3RFeHRlbnNpb25Db25zdGFudFZhbHVlcygpIHRocm93cyBFeGNlcHRpb24gewotICAgIGFz
c2VydEVxdWFscyhVbml0dGVzdFByb3RvLlRlc3RSZXF1aXJlZC5TSU5HTEVfRklFTERfTlVNQkVS
LCAxMDAwKTsKLSAgICBhc3NlcnRFcXVhbHMoVW5pdHRlc3RQcm90by5UZXN0UmVxdWlyZWQuTVVM
VElfRklFTERfTlVNQkVSLCAxMDAxKTsKLSAgICBhc3NlcnRFcXVhbHMoVW5pdHRlc3RQcm90by5P
UFRJT05BTF9JTlQzMl9FWFRFTlNJT05fRklFTERfTlVNQkVSLCAxKTsKLSAgICBhc3NlcnRFcXVh
bHMoVW5pdHRlc3RQcm90by5PUFRJT05BTEdST1VQX0VYVEVOU0lPTl9GSUVMRF9OVU1CRVIsIDE2
KTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICBVbml0dGVzdFByb3RvLk9QVElPTkFMX05FU1RF
RF9NRVNTQUdFX0VYVEVOU0lPTl9GSUVMRF9OVU1CRVIsIDE4KTsKLSAgICBhc3NlcnRFcXVhbHMo
VW5pdHRlc3RQcm90by5PUFRJT05BTF9ORVNURURfRU5VTV9FWFRFTlNJT05fRklFTERfTlVNQkVS
LCAyMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0UHJvdG8uUkVQRUFURURfSU5UMzJfRVhU
RU5TSU9OX0ZJRUxEX05VTUJFUiwgMzEpOwotICAgIGFzc2VydEVxdWFscyhVbml0dGVzdFByb3Rv
LlJFUEVBVEVER1JPVVBfRVhURU5TSU9OX0ZJRUxEX05VTUJFUiwgNDYpOwotICAgIGFzc2VydEVx
dWFscygKLSAgICAgIFVuaXR0ZXN0UHJvdG8uUkVQRUFURURfTkVTVEVEX01FU1NBR0VfRVhURU5T
SU9OX0ZJRUxEX05VTUJFUiwgNDgpOwotICAgIGFzc2VydEVxdWFscyhVbml0dGVzdFByb3RvLlJF
UEVBVEVEX05FU1RFRF9FTlVNX0VYVEVOU0lPTl9GSUVMRF9OVU1CRVIsIDUxKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RSZWN1cnNpdmVNZXNzYWdlRGVmYXVsdEluc3RhbmNlKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgVW5pdHRlc3RQcm90by5UZXN0UmVjdXJzaXZlTWVzc2FnZSBtZXNz
YWdlID0KLSAgICAgICAgVW5pdHRlc3RQcm90by5UZXN0UmVjdXJzaXZlTWVzc2FnZS5nZXREZWZh
dWx0SW5zdGFuY2UoKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UgIT0gbnVsbCk7Ci0gICAgYXNz
ZXJ0Tm90TnVsbChtZXNzYWdlLmdldEEoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmdldEEo
KSA9PSBtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemUoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRl
QXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0g
VGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0VXRpbC5zZXRBbGxGaWVsZHMoYnVp
bGRlcik7Ci0gICAgVGVzdEFsbFR5cGVzIGV4cGVjdGVkID0gYnVpbGRlci5idWlsZCgpOwotICAg
IE9iamVjdE91dHB1dFN0cmVhbSBvdXQgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKGJhb3MpOwot
ICAgIHRyeSB7Ci0gICAgICBvdXQud3JpdGVPYmplY3QoZXhwZWN0ZWQpOwotICAgIH0gZmluYWxs
eSB7Ci0gICAgICBvdXQuY2xvc2UoKTsKLSAgICB9Ci0gICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0g
YmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiYW9zLnRvQnl0ZUFycmF5KCkpOwotICAg
IE9iamVjdElucHV0U3RyZWFtIGluID0gbmV3IE9iamVjdElucHV0U3RyZWFtKGJhaXMpOwotICAg
IFRlc3RBbGxUeXBlcyBhY3R1YWwgPSAoVGVzdEFsbFR5cGVzKSBpbi5yZWFkT2JqZWN0KCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdFNlcmlhbGl6ZVBhcnRpYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBCeXRlQXJyYXlP
dXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICBUZXN0
QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAg
ICBUZXN0QWxsVHlwZXMgZXhwZWN0ZWQgPSBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwotICAgIE9i
amVjdE91dHB1dFN0cmVhbSBvdXQgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKGJhb3MpOwotICAg
IHRyeSB7Ci0gICAgICBvdXQud3JpdGVPYmplY3QoZXhwZWN0ZWQpOwotICAgIH0gZmluYWxseSB7
Ci0gICAgICBvdXQuY2xvc2UoKTsKLSAgICB9Ci0gICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFp
cyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiYW9zLnRvQnl0ZUFycmF5KCkpOwotICAgIE9i
amVjdElucHV0U3RyZWFtIGluID0gbmV3IE9iamVjdElucHV0U3RyZWFtKGJhaXMpOwotICAgIFRl
c3RBbGxUeXBlcyBhY3R1YWwgPSAoVGVzdEFsbFR5cGVzKSBpbi5yZWFkT2JqZWN0KCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVz
dEVudW1WYWx1ZXMoKSB7Ci0gICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgIFRlc3RBbGxUeXBl
cy5OZXN0ZWRFbnVtLkJBUi5nZXROdW1iZXIoKSwKLSAgICAgICAgIFRlc3RBbGxUeXBlcy5OZXN0
ZWRFbnVtLkJBUl9WQUxVRSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBUZXN0QWxsVHlw
ZXMuTmVzdGVkRW51bS5CQVouZ2V0TnVtYmVyKCksCi0gICAgICAgIFRlc3RBbGxUeXBlcy5OZXN0
ZWRFbnVtLkJBWl9WQUxVRSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBUZXN0QWxsVHlw
ZXMuTmVzdGVkRW51bS5GT08uZ2V0TnVtYmVyKCksCi0gICAgICAgIFRlc3RBbGxUeXBlcy5OZXN0
ZWRFbnVtLkZPT19WQUxVRSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Tm9uTmVzdGVkRXh0
ZW5zaW9uSW5pdGlhbGl6YXRpb24oKSB7Ci0gICAgYXNzZXJ0VHJ1ZShOb25OZXN0ZWRFeHRlbnNp
b24ubm9uTmVzdGVkRXh0ZW5zaW9uCi0gICAgICAgICAgICAgICAuZ2V0TWVzc2FnZURlZmF1bHRJ
bnN0YW5jZSgpIGluc3RhbmNlb2YgTXlOb25OZXN0ZWRFeHRlbnNpb24pOwotICAgIGFzc2VydEVx
dWFscygibm9uTmVzdGVkRXh0ZW5zaW9uIiwKLSAgICAgICAgICAgICAgICAgTm9uTmVzdGVkRXh0
ZW5zaW9uLm5vbk5lc3RlZEV4dGVuc2lvbi5nZXREZXNjcmlwdG9yKCkuZ2V0TmFtZSgpKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWRFeHRlbnNpb25Jbml0aWFsaXphdGlvbigpIHsK
LSAgICBhc3NlcnRUcnVlKE15TmVzdGVkRXh0ZW5zaW9uLnJlY3Vyc2l2ZUV4dGVuc2lvbi5nZXRN
ZXNzYWdlRGVmYXVsdEluc3RhbmNlKCkKLSAgICAgICAgICAgICAgIGluc3RhbmNlb2YgTWVzc2Fn
ZVRvQmVFeHRlbmRlZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJyZWN1cnNpdmVFeHRlbnNpb24iLAot
ICAgICAgICAgICAgICAgICBNeU5lc3RlZEV4dGVuc2lvbi5yZWN1cnNpdmVFeHRlbnNpb24uZ2V0
RGVzY3JpcHRvcigpLmdldE5hbWUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Tm9uTmVz
dGVkRXh0ZW5zaW9uTGl0ZUluaXRpYWxpemF0aW9uKCkgewotICAgIGFzc2VydFRydWUoTm9uTmVz
dGVkRXh0ZW5zaW9uTGl0ZS5ub25OZXN0ZWRFeHRlbnNpb25MaXRlCi0gICAgICAgICAgICAgICAu
Z2V0TWVzc2FnZURlZmF1bHRJbnN0YW5jZSgpIGluc3RhbmNlb2YgTXlOb25OZXN0ZWRFeHRlbnNp
b25MaXRlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWRFeHRlbnNpb25MaXRlSW5p
dGlhbGl6YXRpb24oKSB7Ci0gICAgYXNzZXJ0VHJ1ZShNeU5lc3RlZEV4dGVuc2lvbkxpdGUucmVj
dXJzaXZlRXh0ZW5zaW9uTGl0ZQotICAgICAgICAgICAgICAgLmdldE1lc3NhZ2VEZWZhdWx0SW5z
dGFuY2UoKSBpbnN0YW5jZW9mIE1lc3NhZ2VMaXRlVG9CZUV4dGVuZGVkKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RJbnZhbGlkYXRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgR2Vu
ZXJhdGVkTWVzc2FnZS5lbmFibGVBbHdheXNVc2VGaWVsZEJ1aWxkZXJzRm9yVGVzdGluZygpOwot
ICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlIG5lc3RlZE1lc3NhZ2UxID0KLSAgICAgICAg
VGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgVGVz
dEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UgbmVzdGVkTWVzc2FnZTIgPQotICAgICAgICBUZXN0QWxs
VHlwZXMuTmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkuYnVpbGQoKTsKLQotICAgIC8vIFNldCBh
bGwgdGhyZWUgZmxhdm9ycyAoZW51bSwgcHJpbWl0aXZlLCBtZXNzYWdlIGFuZCBzaW5ndWxhci9y
ZXBlYXRlZCkKLSAgICAvLyBhbmQgdmVyaWZ5IG5vIGludmFsaWRhdGlvbnMgZmlyZWQKLSAgICBU
ZXN0VXRpbC5Nb2NrQnVpbGRlclBhcmVudCBtb2NrUGFyZW50ID0gbmV3IFRlc3RVdGlsLk1vY2tC
dWlsZGVyUGFyZW50KCk7Ci0KLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gKFRl
c3RBbGxUeXBlcy5CdWlsZGVyKQotICAgICAgICAoKEdlbmVyYXRlZE1lc3NhZ2UpIFRlc3RBbGxU
eXBlcy5nZXREZWZhdWx0SW5zdGFuY2UoKSkuCi0gICAgICAgICAgICBuZXdCdWlsZGVyRm9yVHlw
ZShtb2NrUGFyZW50KTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsSW50MzIoMSk7Ci0gICAgYnVp
bGRlci5zZXRPcHRpb25hbE5lc3RlZEVudW0oVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFSKTsK
LSAgICBidWlsZGVyLnNldE9wdGlvbmFsTmVzdGVkTWVzc2FnZShuZXN0ZWRNZXNzYWdlMSk7Ci0g
ICAgYnVpbGRlci5hZGRSZXBlYXRlZEludDMyKDEpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRO
ZXN0ZWRFbnVtKFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkJBUik7Ci0gICAgYnVpbGRlci5hZGRS
ZXBlYXRlZE5lc3RlZE1lc3NhZ2UobmVzdGVkTWVzc2FnZTEpOwotICAgIGFzc2VydEVxdWFscygw
LCBtb2NrUGFyZW50LmdldEludmFsaWRhdGlvbkNvdW50KCkpOwotCi0gICAgLy8gTm93IHRlbGwg
aXQgd2Ugd2FudCBjaGFuZ2VzIGFuZCBtYWtlIHN1cmUgaXQncyBvbmx5IGZpcmVkIG9uY2UKLSAg
ICAvLyBBbmQgZG8gdGhpcyBmb3IgZWFjaCBmbGF2b3IKLQotICAgIC8vIHByaW1pdGl2ZSBzaW5n
bGUKLSAgICBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxJ
bnQzMigyKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsSW50MzIoMyk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDEsIG1vY2tQYXJlbnQuZ2V0SW52YWxpZGF0aW9uQ291bnQoKSk7Ci0KLSAgICAvLyBlbnVt
IHNpbmdsZQotICAgIGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgYnVpbGRlci5zZXRPcHRp
b25hbE5lc3RlZEVudW0oVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFaKTsKLSAgICBidWlsZGVy
LnNldE9wdGlvbmFsTmVzdGVkRW51bShUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVIpOwotICAg
IGFzc2VydEVxdWFscygyLCBtb2NrUGFyZW50LmdldEludmFsaWRhdGlvbkNvdW50KCkpOwotCi0g
ICAgLy8gbWVzc2FnZSBzaW5nbGUKLSAgICBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwotICAgIGJ1
aWxkZXIuc2V0T3B0aW9uYWxOZXN0ZWRNZXNzYWdlKG5lc3RlZE1lc3NhZ2UyKTsKLSAgICBidWls
ZGVyLnNldE9wdGlvbmFsTmVzdGVkTWVzc2FnZShuZXN0ZWRNZXNzYWdlMSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDMsIG1vY2tQYXJlbnQuZ2V0SW52YWxpZGF0aW9uQ291bnQoKSk7Ci0KLSAgICAvLyBw
cmltaXRpdmUgcmVwZWF0ZWQKLSAgICBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwotICAgIGJ1aWxk
ZXIuYWRkUmVwZWF0ZWRJbnQzMigyKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkSW50MzIoMyk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIG1vY2tQYXJlbnQuZ2V0SW52YWxpZGF0aW9uQ291bnQoKSk7
Ci0KLSAgICAvLyBlbnVtIHJlcGVhdGVkCi0gICAgYnVpbGRlci5idWlsZFBhcnRpYWwoKTsKLSAg
ICBidWlsZGVyLmFkZFJlcGVhdGVkTmVzdGVkRW51bShUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5C
QVopOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWROZXN0ZWRFbnVtKFRlc3RBbGxUeXBlcy5OZXN0
ZWRFbnVtLkJBWik7Ci0gICAgYXNzZXJ0RXF1YWxzKDUsIG1vY2tQYXJlbnQuZ2V0SW52YWxpZGF0
aW9uQ291bnQoKSk7Ci0KLSAgICAvLyBtZXNzYWdlIHJlcGVhdGVkCi0gICAgYnVpbGRlci5idWls
ZFBhcnRpYWwoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkTmVzdGVkTWVzc2FnZShuZXN0ZWRN
ZXNzYWdlMik7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZE5lc3RlZE1lc3NhZ2UobmVzdGVkTWVz
c2FnZTEpOwotICAgIGFzc2VydEVxdWFscyg2LCBtb2NrUGFyZW50LmdldEludmFsaWRhdGlvbkNv
dW50KCkpOwotCi0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZGF0aW9uc19FeHRlbnNp
b25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdFV0aWwuTW9ja0J1aWxkZXJQYXJlbnQg
bW9ja1BhcmVudCA9IG5ldyBUZXN0VXRpbC5Nb2NrQnVpbGRlclBhcmVudCgpOwotCi0gICAgVGVz
dEFsbEV4dGVuc2lvbnMuQnVpbGRlciBidWlsZGVyID0gKFRlc3RBbGxFeHRlbnNpb25zLkJ1aWxk
ZXIpCi0gICAgICAgICgoR2VuZXJhdGVkTWVzc2FnZSkgVGVzdEFsbEV4dGVuc2lvbnMuZ2V0RGVm
YXVsdEluc3RhbmNlKCkpLgotICAgICAgICAgICAgbmV3QnVpbGRlckZvclR5cGUobW9ja1BhcmVu
dCk7Ci0KLSAgICBidWlsZGVyLmFkZEV4dGVuc2lvbihVbml0dGVzdFByb3RvLnJlcGVhdGVkSW50
MzJFeHRlbnNpb24sIDEpOwotICAgIGJ1aWxkZXIuc2V0RXh0ZW5zaW9uKFVuaXR0ZXN0UHJvdG8u
cmVwZWF0ZWRJbnQzMkV4dGVuc2lvbiwgMCwgMik7Ci0gICAgYnVpbGRlci5jbGVhckV4dGVuc2lv
bihVbml0dGVzdFByb3RvLnJlcGVhdGVkSW50MzJFeHRlbnNpb24pOwotICAgIGFzc2VydEVxdWFs
cygwLCBtb2NrUGFyZW50LmdldEludmFsaWRhdGlvbkNvdW50KCkpOwotCi0gICAgLy8gTm93IHRl
bGwgaXQgd2Ugd2FudCBjaGFuZ2VzIGFuZCBtYWtlIHN1cmUgaXQncyBvbmx5IGZpcmVkIG9uY2UK
LSAgICBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwotICAgIGJ1aWxkZXIuYWRkRXh0ZW5zaW9uKFVu
aXR0ZXN0UHJvdG8ucmVwZWF0ZWRJbnQzMkV4dGVuc2lvbiwgMik7Ci0gICAgYnVpbGRlci5hZGRF
eHRlbnNpb24oVW5pdHRlc3RQcm90by5yZXBlYXRlZEludDMyRXh0ZW5zaW9uLCAzKTsKLSAgICBh
c3NlcnRFcXVhbHMoMSwgbW9ja1BhcmVudC5nZXRJbnZhbGlkYXRpb25Db3VudCgpKTsKLQotICAg
IGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgYnVpbGRlci5zZXRFeHRlbnNpb24oVW5pdHRl
c3RQcm90by5yZXBlYXRlZEludDMyRXh0ZW5zaW9uLCAwLCA0KTsKLSAgICBidWlsZGVyLnNldEV4
dGVuc2lvbihVbml0dGVzdFByb3RvLnJlcGVhdGVkSW50MzJFeHRlbnNpb24sIDEsIDUpOwotICAg
IGFzc2VydEVxdWFscygyLCBtb2NrUGFyZW50LmdldEludmFsaWRhdGlvbkNvdW50KCkpOwotCi0g
ICAgYnVpbGRlci5idWlsZFBhcnRpYWwoKTsKLSAgICBidWlsZGVyLmNsZWFyRXh0ZW5zaW9uKFVu
aXR0ZXN0UHJvdG8ucmVwZWF0ZWRJbnQzMkV4dGVuc2lvbik7Ci0gICAgYnVpbGRlci5jbGVhckV4
dGVuc2lvbihVbml0dGVzdFByb3RvLnJlcGVhdGVkSW50MzJFeHRlbnNpb24pOwotICAgIGFzc2Vy
dEVxdWFscygzLCBtb2NrUGFyZW50LmdldEludmFsaWRhdGlvbkNvdW50KCkpOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdEJhc2VNZXNzYWdlT3JCdWlsZGVyKCkgewotICAgIC8vIE1vc3RseSBq
dXN0IG1ha2VzIHN1cmUgdGhlIGJhc2UgaW50ZXJmYWNlIGV4aXN0cyBhbmQgaGFzIHNvbWUgbWV0
aG9kcy4KLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5l
d0J1aWxkZXIoKTsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGRQYXJ0
aWFsKCk7Ci0gICAgVGVzdEFsbFR5cGVzT3JCdWlsZGVyIGJ1aWxkZXJBc0ludGVyZmFjZSA9IChU
ZXN0QWxsVHlwZXNPckJ1aWxkZXIpIGJ1aWxkZXI7Ci0gICAgVGVzdEFsbFR5cGVzT3JCdWlsZGVy
IG1lc3NhZ2VBc0ludGVyZmFjZSA9IChUZXN0QWxsVHlwZXNPckJ1aWxkZXIpIG1lc3NhZ2U7Ci0K
LSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIG1lc3NhZ2VBc0ludGVyZmFjZS5nZXREZWZhdWx0
Qm9vbCgpLAotICAgICAgICBtZXNzYWdlQXNJbnRlcmZhY2UuZ2V0RGVmYXVsdEJvb2woKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBtZXNzYWdlQXNJbnRlcmZhY2UuZ2V0T3B0aW9uYWxE
b3VibGUoKSwKLSAgICAgICAgbWVzc2FnZUFzSW50ZXJmYWNlLmdldE9wdGlvbmFsRG91YmxlKCkp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1lc3NhZ2VPckJ1aWxkZXJHZXR0ZXJzKCkgewot
ICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRl
cigpOwotCi0gICAgLy8gc2luZ2xlIGZpZWxkcwotICAgIGFzc2VydFNhbWUoRm9yZWlnbk1lc3Nh
Z2UuZ2V0RGVmYXVsdEluc3RhbmNlKCksCi0gICAgICAgIGJ1aWxkZXIuZ2V0T3B0aW9uYWxGb3Jl
aWduTWVzc2FnZU9yQnVpbGRlcigpKTsKLSAgICBGb3JlaWduTWVzc2FnZS5CdWlsZGVyIHN1YkJ1
aWxkZXIgPQotICAgICAgICBidWlsZGVyLmdldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2VCdWlsZGVy
KCk7Ci0gICAgYXNzZXJ0U2FtZShzdWJCdWlsZGVyLCBidWlsZGVyLmdldE9wdGlvbmFsRm9yZWln
bk1lc3NhZ2VPckJ1aWxkZXIoKSk7Ci0KLSAgICAvLyByZXBlYXRlZCBmaWVsZHMKLSAgICBGb3Jl
aWduTWVzc2FnZSBtMCA9IEZvcmVpZ25NZXNzYWdlLm5ld0J1aWxkZXIoKS5idWlsZFBhcnRpYWwo
KTsKLSAgICBGb3JlaWduTWVzc2FnZSBtMSA9IEZvcmVpZ25NZXNzYWdlLm5ld0J1aWxkZXIoKS5i
dWlsZFBhcnRpYWwoKTsKLSAgICBGb3JlaWduTWVzc2FnZSBtMiA9IEZvcmVpZ25NZXNzYWdlLm5l
d0J1aWxkZXIoKS5idWlsZFBhcnRpYWwoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRm9yZWln
bk1lc3NhZ2UobTApOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGb3JlaWduTWVzc2FnZShtMSk7
Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlKG0yKTsKLSAgICBhc3NlcnRT
YW1lKG0wLCBidWlsZGVyLmdldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VPckJ1aWxkZXIoMCkpOwot
ICAgIGFzc2VydFNhbWUobTEsIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRGb3JlaWduTWVzc2FnZU9yQnVp
bGRlcigxKSk7Ci0gICAgYXNzZXJ0U2FtZShtMiwgYnVpbGRlci5nZXRSZXBlYXRlZEZvcmVpZ25N
ZXNzYWdlT3JCdWlsZGVyKDIpKTsKLSAgICBGb3JlaWduTWVzc2FnZS5CdWlsZGVyIGIwID0gYnVp
bGRlci5nZXRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlQnVpbGRlcigwKTsKLSAgICBGb3JlaWduTWVz
c2FnZS5CdWlsZGVyIGIxID0gYnVpbGRlci5nZXRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlQnVpbGRl
cigxKTsKLSAgICBhc3NlcnRTYW1lKGIwLCBidWlsZGVyLmdldFJlcGVhdGVkRm9yZWlnbk1lc3Nh
Z2VPckJ1aWxkZXIoMCkpOwotICAgIGFzc2VydFNhbWUoYjEsIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRG
b3JlaWduTWVzc2FnZU9yQnVpbGRlcigxKSk7Ci0gICAgYXNzZXJ0U2FtZShtMiwgYnVpbGRlci5n
ZXRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlT3JCdWlsZGVyKDIpKTsKLQotICAgIExpc3Q8PyBleHRl
bmRzIEZvcmVpZ25NZXNzYWdlT3JCdWlsZGVyPiBtZXNzYWdlT3JCdWlsZGVyTGlzdCA9Ci0gICAg
ICAgIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRGb3JlaWduTWVzc2FnZU9yQnVpbGRlckxpc3QoKTsKLSAg
ICBhc3NlcnRTYW1lKGIwLCBtZXNzYWdlT3JCdWlsZGVyTGlzdC5nZXQoMCkpOwotICAgIGFzc2Vy
dFNhbWUoYjEsIG1lc3NhZ2VPckJ1aWxkZXJMaXN0LmdldCgxKSk7Ci0gICAgYXNzZXJ0U2FtZSht
MiwgbWVzc2FnZU9yQnVpbGRlckxpc3QuZ2V0KDIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3RHZXRGaWVsZEJ1aWxkZXIoKSB7Ci0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gVGVzdEFs
bFR5cGVzLmdldERlc2NyaXB0b3IoKTsKLQotICAgIEZpZWxkRGVzY3JpcHRvciBmaWVsZERlc2Ny
aXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfbmVz
dGVkX21lc3NhZ2UiKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgZm9yZWlnbkZpZWxkRGVzY3JpcHRv
ciA9Ci0gICAgICAgIGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9mb3JlaWdu
X21lc3NhZ2UiKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgaW1wb3J0RmllbGREZXNjcmlwdG9yID0K
LSAgICAgICAgZGVzY3JpcHRvci5maW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX2ltcG9ydF9tZXNz
YWdlIik7Ci0KLSAgICAvLyBNdXRhdGUgdGhlIG1lc3NhZ2Ugd2l0aCBuZXcgZmllbGQgYnVpbGRl
cgotICAgIC8vIE11dGF0ZSBuZXN0ZWQgbWVzc2FnZQotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVy
IGJ1aWxkZXIxID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBNZXNzYWdlLkJ1aWxk
ZXIgZmllbGRCdWlsZGVyMSA9IGJ1aWxkZXIxLm5ld0J1aWxkZXJGb3JGaWVsZChmaWVsZERlc2Ny
aXB0b3IpCi0gICAgICAgIC5tZXJnZUZyb20oKE1lc3NhZ2UpIGJ1aWxkZXIxLmdldEZpZWxkKGZp
ZWxkRGVzY3JpcHRvcikpOwotICAgIEZpZWxkRGVzY3JpcHRvciBzdWJGaWVsZERlc2NyaXB0b3Ix
ID0KLSAgICAgICAgZmllbGRCdWlsZGVyMS5nZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRGaWVs
ZEJ5TmFtZSgiYmIiKTsKLSAgICBmaWVsZEJ1aWxkZXIxLnNldEZpZWxkKHN1YkZpZWxkRGVzY3Jp
cHRvcjEsIDEpOwotICAgIGJ1aWxkZXIxLnNldEZpZWxkKGZpZWxkRGVzY3JpcHRvciwgZmllbGRC
dWlsZGVyMS5idWlsZCgpKTsKLQotICAgIC8vIE11dGF0ZSBmb3JlaWduIG1lc3NhZ2UKLSAgICBN
ZXNzYWdlLkJ1aWxkZXIgZm9yZWlnbkZpZWxkQnVpbGRlcjEgPSBidWlsZGVyMS5uZXdCdWlsZGVy
Rm9yRmllbGQoCi0gICAgICAgIGZvcmVpZ25GaWVsZERlc2NyaXB0b3IpCi0gICAgICAgIC5tZXJn
ZUZyb20oKE1lc3NhZ2UpIGJ1aWxkZXIxLmdldEZpZWxkKGZvcmVpZ25GaWVsZERlc2NyaXB0b3Ip
KTsKLSAgICBGaWVsZERlc2NyaXB0b3Igc3ViRm9yZWlnbkZpZWxkRGVzY3JpcHRvcjEgPQotICAg
ICAgICBmb3JlaWduRmllbGRCdWlsZGVyMS5nZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRGaWVs
ZEJ5TmFtZSgiYyIpOwotICAgIGZvcmVpZ25GaWVsZEJ1aWxkZXIxLnNldEZpZWxkKHN1YkZvcmVp
Z25GaWVsZERlc2NyaXB0b3IxLCAyKTsKLSAgICBidWlsZGVyMS5zZXRGaWVsZChmb3JlaWduRmll
bGREZXNjcmlwdG9yLCBmb3JlaWduRmllbGRCdWlsZGVyMS5idWlsZCgpKTsKLQotICAgIC8vIE11
dGF0ZSBpbXBvcnQgbWVzc2FnZQotICAgIE1lc3NhZ2UuQnVpbGRlciBpbXBvcnRGaWVsZEJ1aWxk
ZXIxID0gYnVpbGRlcjEubmV3QnVpbGRlckZvckZpZWxkKAotICAgICAgICBpbXBvcnRGaWVsZERl
c2NyaXB0b3IpCi0gICAgICAgIC5tZXJnZUZyb20oKE1lc3NhZ2UpIGJ1aWxkZXIxLmdldEZpZWxk
KGltcG9ydEZpZWxkRGVzY3JpcHRvcikpOwotICAgIEZpZWxkRGVzY3JpcHRvciBzdWJJbXBvcnRG
aWVsZERlc2NyaXB0b3IxID0KLSAgICAgICAgaW1wb3J0RmllbGRCdWlsZGVyMS5nZXREZXNjcmlw
dG9yRm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZSgiZCIpOwotICAgIGltcG9ydEZpZWxkQnVpbGRl
cjEuc2V0RmllbGQoc3ViSW1wb3J0RmllbGREZXNjcmlwdG9yMSwgMyk7Ci0gICAgYnVpbGRlcjEu
c2V0RmllbGQoaW1wb3J0RmllbGREZXNjcmlwdG9yLCBpbXBvcnRGaWVsZEJ1aWxkZXIxLmJ1aWxk
KCkpOwotCi0gICAgTWVzc2FnZSBuZXdNZXNzYWdlMSA9IGJ1aWxkZXIxLmJ1aWxkKCk7Ci0KLSAg
ICAvLyBNdXRhdGUgdGhlIG1lc3NhZ2Ugd2l0aCBleGlzdGluZyBmaWVsZCBidWlsZGVyCi0gICAg
Ly8gTXV0YXRlIG5lc3RlZCBtZXNzYWdlCi0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRl
cjIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIE1lc3NhZ2UuQnVpbGRlciBmaWVs
ZEJ1aWxkZXIyID0gYnVpbGRlcjIuZ2V0RmllbGRCdWlsZGVyKGZpZWxkRGVzY3JpcHRvcik7Ci0g
ICAgRmllbGREZXNjcmlwdG9yIHN1YkZpZWxkRGVzY3JpcHRvcjIgPQotICAgICAgICBmaWVsZEJ1
aWxkZXIyLmdldERlc2NyaXB0b3JGb3JUeXBlKCkuZmluZEZpZWxkQnlOYW1lKCJiYiIpOwotICAg
IGZpZWxkQnVpbGRlcjIuc2V0RmllbGQoc3ViRmllbGREZXNjcmlwdG9yMiwgMSk7Ci0gICAgYnVp
bGRlcjIuc2V0RmllbGQoZmllbGREZXNjcmlwdG9yLCBmaWVsZEJ1aWxkZXIyLmJ1aWxkKCkpOwot
Ci0gICAgLy8gTXV0YXRlIGZvcmVpZ24gbWVzc2FnZQotICAgIE1lc3NhZ2UuQnVpbGRlciBmb3Jl
aWduRmllbGRCdWlsZGVyMiA9IGJ1aWxkZXIyLm5ld0J1aWxkZXJGb3JGaWVsZCgKLSAgICAgICAg
Zm9yZWlnbkZpZWxkRGVzY3JpcHRvcikKLSAgICAgICAgLm1lcmdlRnJvbSgoTWVzc2FnZSkgYnVp
bGRlcjIuZ2V0RmllbGQoZm9yZWlnbkZpZWxkRGVzY3JpcHRvcikpOwotICAgIEZpZWxkRGVzY3Jp
cHRvciBzdWJGb3JlaWduRmllbGREZXNjcmlwdG9yMiA9Ci0gICAgICAgIGZvcmVpZ25GaWVsZEJ1
aWxkZXIyLmdldERlc2NyaXB0b3JGb3JUeXBlKCkuZmluZEZpZWxkQnlOYW1lKCJjIik7Ci0gICAg
Zm9yZWlnbkZpZWxkQnVpbGRlcjIuc2V0RmllbGQoc3ViRm9yZWlnbkZpZWxkRGVzY3JpcHRvcjIs
IDIpOwotICAgIGJ1aWxkZXIyLnNldEZpZWxkKGZvcmVpZ25GaWVsZERlc2NyaXB0b3IsIGZvcmVp
Z25GaWVsZEJ1aWxkZXIyLmJ1aWxkKCkpOwotCi0gICAgLy8gTXV0YXRlIGltcG9ydCBtZXNzYWdl
Ci0gICAgTWVzc2FnZS5CdWlsZGVyIGltcG9ydEZpZWxkQnVpbGRlcjIgPSBidWlsZGVyMi5uZXdC
dWlsZGVyRm9yRmllbGQoCi0gICAgICAgIGltcG9ydEZpZWxkRGVzY3JpcHRvcikKLSAgICAgICAg
Lm1lcmdlRnJvbSgoTWVzc2FnZSkgYnVpbGRlcjIuZ2V0RmllbGQoaW1wb3J0RmllbGREZXNjcmlw
dG9yKSk7Ci0gICAgRmllbGREZXNjcmlwdG9yIHN1YkltcG9ydEZpZWxkRGVzY3JpcHRvcjIgPQot
ICAgICAgICBpbXBvcnRGaWVsZEJ1aWxkZXIyLmdldERlc2NyaXB0b3JGb3JUeXBlKCkuZmluZEZp
ZWxkQnlOYW1lKCJkIik7Ci0gICAgaW1wb3J0RmllbGRCdWlsZGVyMi5zZXRGaWVsZChzdWJJbXBv
cnRGaWVsZERlc2NyaXB0b3IyLCAzKTsKLSAgICBidWlsZGVyMi5zZXRGaWVsZChpbXBvcnRGaWVs
ZERlc2NyaXB0b3IsIGltcG9ydEZpZWxkQnVpbGRlcjIuYnVpbGQoKSk7Ci0KLSAgICBNZXNzYWdl
IG5ld01lc3NhZ2UyID0gYnVpbGRlcjIuYnVpbGQoKTsKLQotICAgIC8vIFRoZXNlIHR3byBtZXNz
YWdlcyBzaG91bGQgYmUgZXF1YWwuCi0gICAgYXNzZXJ0RXF1YWxzKG5ld01lc3NhZ2UxLCBuZXdN
ZXNzYWdlMik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0R2V0RmllbGRCdWlsZGVyV2l0aElu
aXRpYWxpemVkVmFsdWUoKSB7Ci0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gVGVzdEFsbFR5
cGVzLmdldERlc2NyaXB0b3IoKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgZmllbGREZXNjcmlwdG9y
ID0KLSAgICAgICAgZGVzY3JpcHRvci5maW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX25lc3RlZF9t
ZXNzYWdlIik7Ci0KLSAgICAvLyBCZWZvcmUgc2V0dGluZyBmaWVsZCwgYnVpbGRlciBpcyBpbml0
aWFsaXplZCBieSBkZWZhdWx0IHZhbHVlLiAKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWls
ZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBOZXN0ZWRNZXNzYWdlLkJ1aWxk
ZXIgZmllbGRCdWlsZGVyID0KLSAgICAgICAgKE5lc3RlZE1lc3NhZ2UuQnVpbGRlcikgYnVpbGRl
ci5nZXRGaWVsZEJ1aWxkZXIoZmllbGREZXNjcmlwdG9yKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwg
ZmllbGRCdWlsZGVyLmdldEJiKCkpOwotCi0gICAgLy8gU2V0dGluZyBmaWVsZCB2YWx1ZSB3aXRo
IG5ldyBmaWVsZCBidWlsZGVyIGluc3RhbmNlLgotICAgIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMu
bmV3QnVpbGRlcigpOwotICAgIE5lc3RlZE1lc3NhZ2UuQnVpbGRlciBuZXdGaWVsZEJ1aWxkZXIg
PQotICAgICAgICBidWlsZGVyLmdldE9wdGlvbmFsTmVzdGVkTWVzc2FnZUJ1aWxkZXIoKTsKLSAg
ICBuZXdGaWVsZEJ1aWxkZXIuc2V0QmIoMik7Ci0gICAgLy8gVGhlbiBnZXQgdGhlIGZpZWxkIGJ1
aWxkZXIgaW5zdGFuY2UgYnkgZ2V0RmllbGRCdWlsZGVyKCkuCi0gICAgZmllbGRCdWlsZGVyID0K
LSAgICAgICAgKE5lc3RlZE1lc3NhZ2UuQnVpbGRlcikgYnVpbGRlci5nZXRGaWVsZEJ1aWxkZXIo
ZmllbGREZXNjcmlwdG9yKTsKLSAgICAvLyBJdCBzaG91bGQgY29udGFpbiBuZXcgdmFsdWUuCi0g
ICAgYXNzZXJ0RXF1YWxzKDIsIGZpZWxkQnVpbGRlci5nZXRCYigpKTsKLSAgICAvLyBUaGVzZSB0
d28gYnVpbGRlciBzaG91bGQgYmUgZXF1YWwuCi0gICAgYXNzZXJ0U2FtZShmaWVsZEJ1aWxkZXIs
IG5ld0ZpZWxkQnVpbGRlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0R2V0RmllbGRCdWls
ZGVyTm90U3VwcG9ydGVkRXhjZXB0aW9uKCkgewotICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvciA9
IFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCk7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIg
YnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgdHJ5IHsKLSAgICAgIGJ1
aWxkZXIuZ2V0RmllbGRCdWlsZGVyKGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJvcHRpb25h
bF9pbnQzMiIpKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwotICAg
IH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIFdl
IGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIGJ1aWxkZXIu
Z2V0RmllbGRCdWlsZGVyKAotICAgICAgICAgIGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJv
cHRpb25hbF9uZXN0ZWRfZW51bSIpKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiB3YXMgbm90IHRo
cm93biIpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICB9Ci0gICAgdHJ5IHsKLSAg
ICAgIGJ1aWxkZXIuZ2V0RmllbGRCdWlsZGVyKGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJy
ZXBlYXRlZF9pbnQzMiIpKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIp
OwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAg
IC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIGJ1
aWxkZXIuZ2V0RmllbGRCdWlsZGVyKAotICAgICAgICAgIGRlc2NyaXB0b3IuZmluZEZpZWxkQnlO
YW1lKCJyZXBlYXRlZF9uZXN0ZWRfZW51bSIpKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiB3YXMg
bm90IHRocm93biIpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u
IGUpIHsKLSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICB9Ci0gICAgdHJ5
IHsKLSAgICAgIGJ1aWxkZXIuZ2V0RmllbGRCdWlsZGVyKAotICAgICAgICAgIGRlc2NyaXB0b3Iu
ZmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSIpKTsKLSAgICAgIGZhaWwo
IkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3Bl
cmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4K
LSAgICB9Ci0gIH0KLQotICAvLyBUZXN0IHRoYXQgd2hlbiB0aGUgZGVmYXVsdCBvdXRlciBjbGFz
cyBuYW1lIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgdHlwZQotICAvLyBkZWZpbmVkIGluIHRoZSBw
cm90byB0aGUgY29tcGlsZXIgd2lsbCBhcHBlbmQgYSBzdWZmaXggdG8gYXZvaWQgdGhlCi0gIC8v
IGNvbmZsaWN0LgotICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmxpY3RpbmdPdXRlckNsYXNzTmFtZSgp
IHsKLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHdlIGNhbiByZWZlciB0byB0aGUg
b3V0ZXIgY2xhc3Mgd2l0aCB0aGUKLSAgICAvLyBleHBlY3RlZCBuYW1lLiBUaGVyZSBpcyBub3Ro
aW5nIGVsc2UgdG8gdGVzdC4KLSAgICBPdXRlckNsYXNzTmFtZVRlc3RPdXRlckNsYXNzLk91dGVy
Q2xhc3NOYW1lVGVzdCBtZXNzYWdlID0KLSAgICAgICAgT3V0ZXJDbGFzc05hbWVUZXN0T3V0ZXJD
bGFzcy5PdXRlckNsYXNzTmFtZVRlc3QubmV3QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0
VHJ1ZShtZXNzYWdlLmdldERlc2NyaXB0b3JGb3JUeXBlKCkgPT0KLSAgICAgICAgT3V0ZXJDbGFz
c05hbWVUZXN0T3V0ZXJDbGFzcy5PdXRlckNsYXNzTmFtZVRlc3QuZ2V0RGVzY3JpcHRvcigpKTsK
LQotICAgIE91dGVyQ2xhc3NOYW1lVGVzdDJPdXRlckNsYXNzLlRlc3RNZXNzYWdlMi5OZXN0ZWRN
ZXNzYWdlLk91dGVyQ2xhc3NOYW1lVGVzdDIKLSAgICAgICAgbWVzc2FnZTIgPSBPdXRlckNsYXNz
TmFtZVRlc3QyT3V0ZXJDbGFzcy5UZXN0TWVzc2FnZTIuTmVzdGVkTWVzc2FnZQotICAgICAgICAg
ICAgLk91dGVyQ2xhc3NOYW1lVGVzdDIubmV3QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDAsIG1lc3NhZ2UyLmdldFNlcmlhbGl6ZWRTaXplKCkpOwotCi0gICAgT3V0ZXJDbGFz
c05hbWVUZXN0M091dGVyQ2xhc3MuVGVzdE1lc3NhZ2UzLk5lc3RlZE1lc3NhZ2UuT3V0ZXJDbGFz
c05hbWVUZXN0MwotICAgICAgICBlbnVtVmFsdWUgPSBPdXRlckNsYXNzTmFtZVRlc3QzT3V0ZXJD
bGFzcy5UZXN0TWVzc2FnZTMuTmVzdGVkTWVzc2FnZQotICAgICAgICAgICAgLk91dGVyQ2xhc3NO
YW1lVGVzdDMuRFVNTVlfVkFMVUU7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGVudW1WYWx1ZS5nZXRO
dW1iZXIoKSk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBvbmVvZiBnZW5lcmF0ZWQgY29k
ZSB0ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RPbmVvZkVudW1DYXNlKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgVGVzdE9uZW9mMiBtZXNzYWdlID0gVGVzdE9uZW9mMi5uZXdCdWlsZGVyKCkKLSAg
ICAgICAgLnNldEZvb0ludCgxMjMpLnNldEZvb1N0cmluZygiZm9vIikuc2V0Rm9vQ29yZCgiYmFy
IikuYnVpbGQoKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRBdE1vc3RPbmVGaWVsZFNldE9uZW9mKG1l
c3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFyT25lb2YoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBUZXN0T25lb2YyLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RPbmVvZjIubmV3
QnVpbGRlcigpLnNldEZvb0ludCgxMjMpOwotICAgIGFzc2VydEVxdWFscyhUZXN0T25lb2YyLkZv
b0Nhc2UuRk9PX0lOVCwgYnVpbGRlci5nZXRGb29DYXNlKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJG
b28oKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdE9uZW9mMi5Gb29DYXNlLkZPT19OT1RfU0VULCBi
dWlsZGVyLmdldEZvb0Nhc2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2V0T25lb2ZD
bGVhcnNPdGhlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0T25lb2YyLkJ1aWxkZXIg
YnVpbGRlciA9IFRlc3RPbmVvZjIubmV3QnVpbGRlcigpOwotICAgIFRlc3RPbmVvZjIgbWVzc2Fn
ZSA9Ci0gICAgICAgIGJ1aWxkZXIuc2V0Rm9vSW50KDEyMykuc2V0Rm9vU3RyaW5nKCJmb28iKS5i
dWlsZFBhcnRpYWwoKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRm9vU3RyaW5nKCkpOwot
ICAgIFRlc3RVdGlsLmFzc2VydEF0TW9zdE9uZUZpZWxkU2V0T25lb2YobWVzc2FnZSk7Ci0KLSAg
ICBtZXNzYWdlID0gYnVpbGRlci5zZXRGb29Db3JkKCJiYXIiKS5idWlsZFBhcnRpYWwoKTsKLSAg
ICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRm9vQ29yZCgpKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRB
dE1vc3RPbmVGaWVsZFNldE9uZW9mKG1lc3NhZ2UpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIu
c2V0Rm9vU3RyaW5nUGllY2UoImJheiIpLmJ1aWxkUGFydGlhbCgpOwotICAgIGFzc2VydFRydWUo
bWVzc2FnZS5oYXNGb29TdHJpbmdQaWVjZSgpKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRBdE1vc3RP
bmVGaWVsZFNldE9uZW9mKG1lc3NhZ2UpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuc2V0Rm9v
Qnl0ZXMoVGVzdFV0aWwudG9CeXRlcygicXV4IikpLmJ1aWxkUGFydGlhbCgpOwotICAgIGFzc2Vy
dFRydWUobWVzc2FnZS5oYXNGb29CeXRlcygpKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRBdE1vc3RP
bmVGaWVsZFNldE9uZW9mKG1lc3NhZ2UpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuc2V0Rm9v
RW51bShUZXN0T25lb2YyLk5lc3RlZEVudW0uRk9PKS5idWlsZFBhcnRpYWwoKTsKLSAgICBhc3Nl
cnRUcnVlKG1lc3NhZ2UuaGFzRm9vRW51bSgpKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRBdE1vc3RP
bmVGaWVsZFNldE9uZW9mKG1lc3NhZ2UpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuc2V0Rm9v
TWVzc2FnZSgKLSAgICAgICAgVGVzdE9uZW9mMi5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5z
ZXRRdXhJbnQoMjM0KS5idWlsZCgpKS5idWlsZFBhcnRpYWwoKTsKLSAgICBhc3NlcnRUcnVlKG1l
c3NhZ2UuaGFzRm9vTWVzc2FnZSgpKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRBdE1vc3RPbmVGaWVs
ZFNldE9uZW9mKG1lc3NhZ2UpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuc2V0Rm9vSW50KDEy
MykuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0Zvb0ludCgpKTsK
LSAgICBUZXN0VXRpbC5hc3NlcnRBdE1vc3RPbmVGaWVsZFNldE9uZW9mKG1lc3NhZ2UpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9uZW9mVHlwZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICAvLyBQcmltaXRpdmUKLSAgICB7Ci0gICAgICBUZXN0T25lb2YyLkJ1aWxkZXIgYnVpbGRlciA9
IFRlc3RPbmVvZjIubmV3QnVpbGRlcigpOwotICAgICAgYXNzZXJ0RXF1YWxzKGJ1aWxkZXIuZ2V0
Rm9vSW50KCksIDApOwotICAgICAgYXNzZXJ0RmFsc2UoYnVpbGRlci5oYXNGb29JbnQoKSk7Ci0g
ICAgICBhc3NlcnRUcnVlKGJ1aWxkZXIuc2V0Rm9vSW50KDEyMykuaGFzRm9vSW50KCkpOwotICAg
ICAgYXNzZXJ0RXF1YWxzKGJ1aWxkZXIuZ2V0Rm9vSW50KCksIDEyMyk7Ci0gICAgICBUZXN0T25l
b2YyIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwotICAgICAgYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0Zvb0ludCgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmdldEZvb0lu
dCgpLCAxMjMpOwotCi0gICAgICBhc3NlcnRGYWxzZShidWlsZGVyLmNsZWFyRm9vSW50KCkuaGFz
Rm9vSW50KCkpOwotICAgICAgVGVzdE9uZW9mMiBtZXNzYWdlMiA9IGJ1aWxkZXIuYnVpbGQoKTsK
LSAgICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UyLmhhc0Zvb0ludCgpKTsKLSAgICAgIGFzc2VydEVx
dWFscyhtZXNzYWdlMi5nZXRGb29JbnQoKSwgMCk7Ci0gICAgfQotCi0gICAgLy8gRW51bQotICAg
IHsKLSAgICAgIFRlc3RPbmVvZjIuQnVpbGRlciBidWlsZGVyID0gVGVzdE9uZW9mMi5uZXdCdWls
ZGVyKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoYnVpbGRlci5nZXRGb29FbnVtKCksIFRlc3RPbmVv
ZjIuTmVzdGVkRW51bS5GT08pOwotICAgICAgYXNzZXJ0VHJ1ZShidWlsZGVyLnNldEZvb0VudW0o
VGVzdE9uZW9mMi5OZXN0ZWRFbnVtLkJBUikuaGFzRm9vRW51bSgpKTsKLSAgICAgIGFzc2VydEVx
dWFscyhidWlsZGVyLmdldEZvb0VudW0oKSwgVGVzdE9uZW9mMi5OZXN0ZWRFbnVtLkJBUik7Ci0g
ICAgICBUZXN0T25lb2YyIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkUGFydGlhbCgpOwotICAgICAg
YXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0Zvb0VudW0oKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWVz
c2FnZS5nZXRGb29FbnVtKCksIFRlc3RPbmVvZjIuTmVzdGVkRW51bS5CQVIpOwotCi0gICAgICBh
c3NlcnRGYWxzZShidWlsZGVyLmNsZWFyRm9vRW51bSgpLmhhc0Zvb0VudW0oKSk7Ci0gICAgICBU
ZXN0T25lb2YyIG1lc3NhZ2UyID0gYnVpbGRlci5idWlsZCgpOwotICAgICAgYXNzZXJ0RmFsc2Uo
bWVzc2FnZTIuaGFzRm9vRW51bSgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlMi5nZXRG
b29FbnVtKCksIFRlc3RPbmVvZjIuTmVzdGVkRW51bS5GT08pOwotICAgIH0KLQotICAgIC8vIFN0
cmluZwotICAgIHsKLSAgICAgIFRlc3RPbmVvZjIuQnVpbGRlciBidWlsZGVyID0gVGVzdE9uZW9m
Mi5uZXdCdWlsZGVyKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoYnVpbGRlci5nZXRGb29TdHJpbmco
KSwgIiIpOwotICAgICAgYnVpbGRlci5zZXRGb29TdHJpbmcoImZvbyIpOwotICAgICAgYXNzZXJ0
VHJ1ZShidWlsZGVyLmhhc0Zvb1N0cmluZygpKTsKLSAgICAgIGFzc2VydEVxdWFscyhidWlsZGVy
LmdldEZvb1N0cmluZygpLCAiZm9vIik7Ci0gICAgICBUZXN0T25lb2YyIG1lc3NhZ2UgPSBidWls
ZGVyLmJ1aWxkUGFydGlhbCgpOwotICAgICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0Zvb1N0cmlu
ZygpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmdldEZvb1N0cmluZygpLCAiZm9vIik7
Ci0gICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZS5nZXRGb29TdHJpbmdCeXRlcygpLCBUZXN0VXRp
bC50b0J5dGVzKCJmb28iKSk7Ci0KLSAgICAgIGFzc2VydEZhbHNlKGJ1aWxkZXIuY2xlYXJGb29T
dHJpbmcoKS5oYXNGb29TdHJpbmcoKSk7Ci0gICAgICBUZXN0T25lb2YyIG1lc3NhZ2UyID0gYnVp
bGRlci5idWlsZFBhcnRpYWwoKTsKLSAgICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UyLmhhc0Zvb1N0
cmluZygpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlMi5nZXRGb29TdHJpbmcoKSwgIiIp
OwotICAgICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2UyLmdldEZvb1N0cmluZ0J5dGVzKCksIFRlc3RV
dGlsLnRvQnl0ZXMoIiIpKTsKLQotICAgICAgLy8gR2V0IG1ldGhvZCBzaG91bGQgbm90IGNoYW5n
ZSB0aGUgb25lb2YgdmFsdWUuCi0gICAgICBidWlsZGVyLnNldEZvb0ludCgxMjMpOwotICAgICAg
YXNzZXJ0RXF1YWxzKGJ1aWxkZXIuZ2V0Rm9vU3RyaW5nKCksICIiKTsKLSAgICAgIGFzc2VydEVx
dWFscyhidWlsZGVyLmdldEZvb1N0cmluZ0J5dGVzKCksIFRlc3RVdGlsLnRvQnl0ZXMoIiIpKTsK
LSAgICAgIGFzc2VydEVxdWFscygxMjMsIGJ1aWxkZXIuZ2V0Rm9vSW50KCkpOwotCi0gICAgICBt
ZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2UuZ2V0
Rm9vU3RyaW5nKCksICIiKTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmdldEZvb1N0cmlu
Z0J5dGVzKCksIFRlc3RVdGlsLnRvQnl0ZXMoIiIpKTsKLSAgICAgIGFzc2VydEVxdWFscygxMjMs
IG1lc3NhZ2UuZ2V0Rm9vSW50KCkpOwotICAgIH0KLQotICAgIC8vIENvcmQKLSAgICB7Ci0gICAg
ICBUZXN0T25lb2YyLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RPbmVvZjIubmV3QnVpbGRlcigpOwot
ICAgICAgYXNzZXJ0RXF1YWxzKGJ1aWxkZXIuZ2V0Rm9vQ29yZCgpLCAiIik7Ci0gICAgICBidWls
ZGVyLnNldEZvb0NvcmQoImZvbyIpOwotICAgICAgYXNzZXJ0VHJ1ZShidWlsZGVyLmhhc0Zvb0Nv
cmQoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoYnVpbGRlci5nZXRGb29Db3JkKCksICJmb28iKTsK
LSAgICAgIFRlc3RPbmVvZjIgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAg
ICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRm9vQ29yZCgpKTsKLSAgICAgIGFzc2VydEVxdWFscyht
ZXNzYWdlLmdldEZvb0NvcmQoKSwgImZvbyIpOwotICAgICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2Uu
Z2V0Rm9vQ29yZEJ5dGVzKCksIFRlc3RVdGlsLnRvQnl0ZXMoImZvbyIpKTsKLQotICAgICAgYXNz
ZXJ0RmFsc2UoYnVpbGRlci5jbGVhckZvb0NvcmQoKS5oYXNGb29Db3JkKCkpOwotICAgICAgVGVz
dE9uZW9mMiBtZXNzYWdlMiA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICAgIGFzc2VydEZhbHNlKG1l
c3NhZ2UyLmhhc0Zvb0NvcmQoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZTIuZ2V0Rm9v
Q29yZCgpLCAiIik7Ci0gICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZTIuZ2V0Rm9vQ29yZEJ5dGVz
KCksIFRlc3RVdGlsLnRvQnl0ZXMoIiIpKTsKLSAgICB9Ci0KLSAgICAvLyBTdHJpbmdQaWVjZQot
ICAgIHsKLSAgICAgIFRlc3RPbmVvZjIuQnVpbGRlciBidWlsZGVyID0gVGVzdE9uZW9mMi5uZXdC
dWlsZGVyKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoYnVpbGRlci5nZXRGb29TdHJpbmdQaWVjZSgp
LCAiIik7Ci0gICAgICBidWlsZGVyLnNldEZvb1N0cmluZ1BpZWNlKCJmb28iKTsKLSAgICAgIGFz
c2VydFRydWUoYnVpbGRlci5oYXNGb29TdHJpbmdQaWVjZSgpKTsKLSAgICAgIGFzc2VydEVxdWFs
cyhidWlsZGVyLmdldEZvb1N0cmluZ1BpZWNlKCksICJmb28iKTsKLSAgICAgIFRlc3RPbmVvZjIg
bWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgICBhc3NlcnRUcnVlKG1lc3Nh
Z2UuaGFzRm9vU3RyaW5nUGllY2UoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZS5nZXRG
b29TdHJpbmdQaWVjZSgpLCAiZm9vIik7Ci0gICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZS5nZXRG
b29TdHJpbmdQaWVjZUJ5dGVzKCksIFRlc3RVdGlsLnRvQnl0ZXMoImZvbyIpKTsKLQotICAgICAg
YXNzZXJ0RmFsc2UoYnVpbGRlci5jbGVhckZvb1N0cmluZ1BpZWNlKCkuaGFzRm9vU3RyaW5nUGll
Y2UoKSk7Ci0gICAgICBUZXN0T25lb2YyIG1lc3NhZ2UyID0gYnVpbGRlci5idWlsZCgpOwotICAg
ICAgYXNzZXJ0RmFsc2UobWVzc2FnZTIuaGFzRm9vU3RyaW5nUGllY2UoKSk7Ci0gICAgICBhc3Nl
cnRFcXVhbHMobWVzc2FnZTIuZ2V0Rm9vU3RyaW5nUGllY2UoKSwgIiIpOwotICAgICAgYXNzZXJ0
RXF1YWxzKG1lc3NhZ2UyLmdldEZvb1N0cmluZ1BpZWNlQnl0ZXMoKSwgVGVzdFV0aWwudG9CeXRl
cygiIikpOwotICAgIH0KLQotICAgIC8vIE1lc3NhZ2UKLSAgICB7Ci0gICAgICAvLyBzZXQKLSAg
ICAgIFRlc3RPbmVvZjIuQnVpbGRlciBidWlsZGVyID0gVGVzdE9uZW9mMi5uZXdCdWlsZGVyKCk7
Ci0gICAgICBhc3NlcnRFcXVhbHMoYnVpbGRlci5nZXRGb29NZXNzYWdlKCkuZ2V0UXV4SW50KCks
IDApOwotICAgICAgYnVpbGRlci5zZXRGb29NZXNzYWdlKAotICAgICAgICAgIFRlc3RPbmVvZjIu
TmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0UXV4SW50KDIzNCkuYnVpbGQoKSk7Ci0gICAg
ICBhc3NlcnRUcnVlKGJ1aWxkZXIuaGFzRm9vTWVzc2FnZSgpKTsKLSAgICAgIGFzc2VydEVxdWFs
cyhidWlsZGVyLmdldEZvb01lc3NhZ2UoKS5nZXRRdXhJbnQoKSwgMjM0KTsKLSAgICAgIFRlc3RP
bmVvZjIgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgICBhc3NlcnRUcnVl
KG1lc3NhZ2UuaGFzRm9vTWVzc2FnZSgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmdl
dEZvb01lc3NhZ2UoKS5nZXRRdXhJbnQoKSwgMjM0KTsKLQotICAgICAgLy8gY2xlYXIKLSAgICAg
IGFzc2VydEZhbHNlKGJ1aWxkZXIuY2xlYXJGb29NZXNzYWdlKCkuaGFzRm9vU3RyaW5nKCkpOwot
ICAgICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICAgIGFzc2VydEZhbHNlKG1lc3Nh
Z2UuaGFzRm9vTWVzc2FnZSgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmdldEZvb01l
c3NhZ2UoKS5nZXRRdXhJbnQoKSwgMCk7Ci0KLSAgICAgIC8vIG5lc3RlZCBidWlsZGVyCi0gICAg
ICBidWlsZGVyID0gVGVzdE9uZW9mMi5uZXdCdWlsZGVyKCk7Ci0gICAgICBhc3NlcnRTYW1lKGJ1
aWxkZXIuZ2V0Rm9vTWVzc2FnZU9yQnVpbGRlcigpLAotICAgICAgICAgIFRlc3RPbmVvZjIuTmVz
dGVkTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgICBhc3NlcnRGYWxzZShidWls
ZGVyLmhhc0Zvb01lc3NhZ2UoKSk7Ci0gICAgICBidWlsZGVyLmdldEZvb01lc3NhZ2VCdWlsZGVy
KCkuc2V0UXV4SW50KDEyMyk7Ci0gICAgICBhc3NlcnRUcnVlKGJ1aWxkZXIuaGFzRm9vTWVzc2Fn
ZSgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhidWlsZGVyLmdldEZvb01lc3NhZ2UoKS5nZXRRdXhJ
bnQoKSwgMTIzKTsKLSAgICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgICBhc3Nl
cnRUcnVlKG1lc3NhZ2UuaGFzRm9vTWVzc2FnZSgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNz
YWdlLmdldEZvb01lc3NhZ2UoKS5nZXRRdXhJbnQoKSwgMTIzKTsKLSAgICB9Ci0KLSAgICAvLyBM
YXp5TWVzc2FnZSBpcyB0ZXN0ZWQgaW4gTGF6eU1lc3NhZ2VMaXRlVGVzdC5qYXZhCi0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0T25lb2ZNZXJnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8v
IFByaW1pdGl2ZSBUeXBlCi0gICAgewotICAgICAgVGVzdE9uZW9mMi5CdWlsZGVyIGJ1aWxkZXIg
PSBUZXN0T25lb2YyLm5ld0J1aWxkZXIoKTsKLSAgICAgIFRlc3RPbmVvZjIgbWVzc2FnZSA9IGJ1
aWxkZXIuc2V0Rm9vSW50KDEyMykuYnVpbGQoKTsKLSAgICAgIFRlc3RPbmVvZjIgbWVzc2FnZTIg
PSBUZXN0T25lb2YyLm5ld0J1aWxkZXIoKS5tZXJnZUZyb20obWVzc2FnZSkuYnVpbGQoKTsKLSAg
ICAgIGFzc2VydFRydWUobWVzc2FnZTIuaGFzRm9vSW50KCkpOwotICAgICAgYXNzZXJ0RXF1YWxz
KG1lc3NhZ2UyLmdldEZvb0ludCgpLCAxMjMpOwotICAgIH0KLQotICAgIC8vIFN0cmluZwotICAg
IHsKLSAgICAgIFRlc3RPbmVvZjIuQnVpbGRlciBidWlsZGVyID0gVGVzdE9uZW9mMi5uZXdCdWls
ZGVyKCk7Ci0gICAgICBUZXN0T25lb2YyIG1lc3NhZ2UgPSBidWlsZGVyLnNldEZvb1N0cmluZygi
Zm9vIikuYnVpbGQoKTsKLSAgICAgIFRlc3RPbmVvZjIgbWVzc2FnZTIgPSBUZXN0T25lb2YyLm5l
d0J1aWxkZXIoKS5tZXJnZUZyb20obWVzc2FnZSkuYnVpbGQoKTsKLSAgICAgIGFzc2VydFRydWUo
bWVzc2FnZTIuaGFzRm9vU3RyaW5nKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2UyLmdl
dEZvb1N0cmluZygpLCAiZm9vIik7Ci0gICAgfQotCi0gICAgLy8gRW51bQotICAgIHsKLSAgICAg
IFRlc3RPbmVvZjIuQnVpbGRlciBidWlsZGVyID0gVGVzdE9uZW9mMi5uZXdCdWlsZGVyKCk7Ci0g
ICAgICBUZXN0T25lb2YyIG1lc3NhZ2UgPSBidWlsZGVyLnNldEZvb0VudW0oVGVzdE9uZW9mMi5O
ZXN0ZWRFbnVtLkJBUikuYnVpbGQoKTsKLSAgICAgIFRlc3RPbmVvZjIgbWVzc2FnZTIgPSBUZXN0
T25lb2YyLm5ld0J1aWxkZXIoKS5tZXJnZUZyb20obWVzc2FnZSkuYnVpbGQoKTsKLSAgICAgIGFz
c2VydFRydWUobWVzc2FnZTIuaGFzRm9vRW51bSgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNz
YWdlMi5nZXRGb29FbnVtKCksIFRlc3RPbmVvZjIuTmVzdGVkRW51bS5CQVIpOwotICAgIH0KLQot
ICAgIC8vIE1lc3NhZ2UKLSAgICB7Ci0gICAgICBUZXN0T25lb2YyLkJ1aWxkZXIgYnVpbGRlciA9
IFRlc3RPbmVvZjIubmV3QnVpbGRlcigpOwotICAgICAgVGVzdE9uZW9mMiBtZXNzYWdlID0gYnVp
bGRlci5zZXRGb29NZXNzYWdlKAotICAgICAgICAgIFRlc3RPbmVvZjIuTmVzdGVkTWVzc2FnZS5u
ZXdCdWlsZGVyKCkuc2V0UXV4SW50KDIzNCkuYnVpbGQoKSkuYnVpbGQoKTsKLSAgICAgIFRlc3RP
bmVvZjIgbWVzc2FnZTIgPSBUZXN0T25lb2YyLm5ld0J1aWxkZXIoKS5tZXJnZUZyb20obWVzc2Fn
ZSkuYnVpbGQoKTsKLSAgICAgIGFzc2VydFRydWUobWVzc2FnZTIuaGFzRm9vTWVzc2FnZSgpKTsK
LSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlMi5nZXRGb29NZXNzYWdlKCkuZ2V0UXV4SW50KCks
IDIzNCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9uZW9mU2VyaWFsaXphdGlv
bigpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFByaW1pdGl2ZSBUeXBlCi0gICAgewotICAg
ICAgVGVzdE9uZW9mMi5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0T25lb2YyLm5ld0J1aWxkZXIoKTsK
LSAgICAgIFRlc3RPbmVvZjIgbWVzc2FnZSA9IGJ1aWxkZXIuc2V0Rm9vSW50KDEyMykuYnVpbGQo
KTsKLSAgICAgIEJ5dGVTdHJpbmcgc2VyaWFsaXplZCA9IG1lc3NhZ2UudG9CeXRlU3RyaW5nKCk7
Ci0gICAgICBUZXN0T25lb2YyIG1lc3NhZ2UyID0gVGVzdE9uZW9mMi5wYXJzZUZyb20oc2VyaWFs
aXplZCk7Ci0gICAgICBhc3NlcnRUcnVlKG1lc3NhZ2UyLmhhc0Zvb0ludCgpKTsKLSAgICAgIGFz
c2VydEVxdWFscyhtZXNzYWdlMi5nZXRGb29JbnQoKSwgMTIzKTsKLSAgICB9Ci0KLSAgICAvLyBT
dHJpbmcKLSAgICB7Ci0gICAgICBUZXN0T25lb2YyLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RPbmVv
ZjIubmV3QnVpbGRlcigpOwotICAgICAgVGVzdE9uZW9mMiBtZXNzYWdlID0gYnVpbGRlci5zZXRG
b29TdHJpbmcoImZvbyIpLmJ1aWxkKCk7Ci0gICAgICBCeXRlU3RyaW5nIHNlcmlhbGl6ZWQgPSBt
ZXNzYWdlLnRvQnl0ZVN0cmluZygpOwotICAgICAgVGVzdE9uZW9mMiBtZXNzYWdlMiA9IFRlc3RP
bmVvZjIucGFyc2VGcm9tKHNlcmlhbGl6ZWQpOwotICAgICAgYXNzZXJ0VHJ1ZShtZXNzYWdlMi5o
YXNGb29TdHJpbmcoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZTIuZ2V0Rm9vU3RyaW5n
KCksICJmb28iKTsKLSAgICB9Ci0KLSAgICAvLyBFbnVtCi0gICAgewotICAgICAgVGVzdE9uZW9m
Mi5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0T25lb2YyLm5ld0J1aWxkZXIoKTsKLSAgICAgIFRlc3RP
bmVvZjIgbWVzc2FnZSA9IGJ1aWxkZXIuc2V0Rm9vRW51bShUZXN0T25lb2YyLk5lc3RlZEVudW0u
QkFSKS5idWlsZCgpOwotICAgICAgQnl0ZVN0cmluZyBzZXJpYWxpemVkID0gbWVzc2FnZS50b0J5
dGVTdHJpbmcoKTsKLSAgICAgIFRlc3RPbmVvZjIgbWVzc2FnZTIgPSBUZXN0T25lb2YyLnBhcnNl
RnJvbShzZXJpYWxpemVkKTsKLSAgICAgIGFzc2VydFRydWUobWVzc2FnZTIuaGFzRm9vRW51bSgp
KTsKLSAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlMi5nZXRGb29FbnVtKCksIFRlc3RPbmVvZjIu
TmVzdGVkRW51bS5CQVIpOwotICAgIH0KLQotICAgIC8vIE1lc3NhZ2UKLSAgICB7Ci0gICAgICBU
ZXN0T25lb2YyLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RPbmVvZjIubmV3QnVpbGRlcigpOwotICAg
ICAgVGVzdE9uZW9mMiBtZXNzYWdlID0gYnVpbGRlci5zZXRGb29NZXNzYWdlKAotICAgICAgICAg
IFRlc3RPbmVvZjIuTmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0UXV4SW50KDIzNCkuYnVp
bGQoKSkuYnVpbGQoKTsKLSAgICAgIEJ5dGVTdHJpbmcgc2VyaWFsaXplZCA9IG1lc3NhZ2UudG9C
eXRlU3RyaW5nKCk7Ci0gICAgICBUZXN0T25lb2YyIG1lc3NhZ2UyID0gVGVzdE9uZW9mMi5wYXJz
ZUZyb20oc2VyaWFsaXplZCk7Ci0gICAgICBhc3NlcnRUcnVlKG1lc3NhZ2UyLmhhc0Zvb01lc3Nh
Z2UoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobWVzc2FnZTIuZ2V0Rm9vTWVzc2FnZSgpLmdldFF1
eEludCgpLCAyMzQpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RPbmVvZk5lc3Rl
ZEJ1aWxkZXJPbkNoYW5nZVByb3BhZ2F0aW9uKCkgewotICAgIE5lc3RlZFRlc3RBbGxUeXBlcy5C
dWlsZGVyIHBhcmVudEJ1aWxkZXIgPSBOZXN0ZWRUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwot
ICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBwYXJlbnRCdWlsZGVyLmdldFBheWxv
YWRCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5nZXRPbmVvZk5lc3RlZE1lc3NhZ2VCdWlsZGVyKCk7
Ci0gICAgYXNzZXJ0VHJ1ZShidWlsZGVyLmhhc09uZW9mTmVzdGVkTWVzc2FnZSgpKTsKLSAgICBh
c3NlcnRUcnVlKHBhcmVudEJ1aWxkZXIuaGFzUGF5bG9hZCgpKTsKLSAgICBOZXN0ZWRUZXN0QWxs
VHlwZXMgbWVzc2FnZSA9IHBhcmVudEJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRUcnVlKG1l
c3NhZ2UuaGFzUGF5bG9hZCgpKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuZ2V0UGF5bG9hZCgp
Lmhhc09uZW9mTmVzdGVkTWVzc2FnZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRS
ZXBlYXRlZEZpZWxkQnVpbGRlcigpIHsKLSAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBUZXN0
QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpOwotCi0gICAgRmllbGREZXNjcmlwdG9yIGZpZWxkRGVz
Y3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9u
ZXN0ZWRfbWVzc2FnZSIpOwotICAgIEZpZWxkRGVzY3JpcHRvciBmb3JlaWduRmllbGREZXNjcmlw
dG9yID0KLSAgICAgICAgZGVzY3JpcHRvci5maW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2ZvcmVp
Z25fbWVzc2FnZSIpOwotICAgIEZpZWxkRGVzY3JpcHRvciBpbXBvcnRGaWVsZERlc2NyaXB0b3Ig
PQotICAgICAgICBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfaW1wb3J0X21l
c3NhZ2UiKTsKLQotICAgIC8vIE11dGF0ZSB0aGUgbWVzc2FnZSB3aXRoIG5ldyBmaWVsZCBidWls
ZGVyCi0gICAgLy8gTXV0YXRlIG5lc3RlZCBtZXNzYWdlCi0gICAgVGVzdEFsbFR5cGVzLkJ1aWxk
ZXIgYnVpbGRlcjEgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIE1lc3NhZ2UuQnVp
bGRlciBmaWVsZEJ1aWxkZXIxID0gYnVpbGRlcjEubmV3QnVpbGRlckZvckZpZWxkKAotICAgICAg
ICBmaWVsZERlc2NyaXB0b3IpOwotICAgIEZpZWxkRGVzY3JpcHRvciBzdWJGaWVsZERlc2NyaXB0
b3IxID0KLSAgICAgICAgZmllbGRCdWlsZGVyMS5nZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRG
aWVsZEJ5TmFtZSgiYmIiKTsKLSAgICBmaWVsZEJ1aWxkZXIxLnNldEZpZWxkKHN1YkZpZWxkRGVz
Y3JpcHRvcjEsIDEpOwotICAgIGJ1aWxkZXIxLmFkZFJlcGVhdGVkRmllbGQoZmllbGREZXNjcmlw
dG9yLCBmaWVsZEJ1aWxkZXIxLmJ1aWxkKCkpOwotCi0gICAgLy8gTXV0YXRlIGZvcmVpZ24gbWVz
c2FnZQotICAgIE1lc3NhZ2UuQnVpbGRlciBmb3JlaWduRmllbGRCdWlsZGVyMSA9IGJ1aWxkZXIx
Lm5ld0J1aWxkZXJGb3JGaWVsZCgKLSAgICAgICAgZm9yZWlnbkZpZWxkRGVzY3JpcHRvcik7Ci0g
ICAgRmllbGREZXNjcmlwdG9yIHN1YkZvcmVpZ25GaWVsZERlc2NyaXB0b3IxID0KLSAgICAgICAg
Zm9yZWlnbkZpZWxkQnVpbGRlcjEuZ2V0RGVzY3JpcHRvckZvclR5cGUoKS5maW5kRmllbGRCeU5h
bWUoImMiKTsKLSAgICBmb3JlaWduRmllbGRCdWlsZGVyMS5zZXRGaWVsZChzdWJGb3JlaWduRmll
bGREZXNjcmlwdG9yMSwgMik7Ci0gICAgYnVpbGRlcjEuYWRkUmVwZWF0ZWRGaWVsZChmb3JlaWdu
RmllbGREZXNjcmlwdG9yLAotICAgICAgICBmb3JlaWduRmllbGRCdWlsZGVyMS5idWlsZCgpKTsK
LQotICAgIC8vIE11dGF0ZSBpbXBvcnQgbWVzc2FnZQotICAgIE1lc3NhZ2UuQnVpbGRlciBpbXBv
cnRGaWVsZEJ1aWxkZXIxID0gYnVpbGRlcjEubmV3QnVpbGRlckZvckZpZWxkKAotICAgICAgICBp
bXBvcnRGaWVsZERlc2NyaXB0b3IpOwotICAgIEZpZWxkRGVzY3JpcHRvciBzdWJJbXBvcnRGaWVs
ZERlc2NyaXB0b3IxID0KLSAgICAgICAgaW1wb3J0RmllbGRCdWlsZGVyMS5nZXREZXNjcmlwdG9y
Rm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZSgiZCIpOwotICAgIGltcG9ydEZpZWxkQnVpbGRlcjEu
c2V0RmllbGQoc3ViSW1wb3J0RmllbGREZXNjcmlwdG9yMSwgMyk7Ci0gICAgYnVpbGRlcjEuYWRk
UmVwZWF0ZWRGaWVsZChpbXBvcnRGaWVsZERlc2NyaXB0b3IsCi0gICAgICAgIGltcG9ydEZpZWxk
QnVpbGRlcjEuYnVpbGQoKSk7Ci0KLSAgICBNZXNzYWdlIG5ld01lc3NhZ2UxID0gYnVpbGRlcjEu
YnVpbGQoKTsKLQotICAgIC8vIE11dGF0ZSB0aGUgbWVzc2FnZSB3aXRoIGV4aXN0aW5nIGZpZWxk
IGJ1aWxkZXIKLSAgICAvLyBNdXRhdGUgbmVzdGVkIG1lc3NhZ2UKLSAgICBUZXN0QWxsVHlwZXMu
QnVpbGRlciBidWlsZGVyMiA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgYnVpbGRl
cjIuYWRkUmVwZWF0ZWROZXN0ZWRNZXNzYWdlQnVpbGRlcigpOwotICAgIE1lc3NhZ2UuQnVpbGRl
ciBmaWVsZEJ1aWxkZXIyID0gYnVpbGRlcjIuZ2V0UmVwZWF0ZWRGaWVsZEJ1aWxkZXIoCi0gICAg
ICAgIGZpZWxkRGVzY3JpcHRvciwgMCk7Ci0gICAgRmllbGREZXNjcmlwdG9yIHN1YkZpZWxkRGVz
Y3JpcHRvcjIgPQotICAgICAgICBmaWVsZEJ1aWxkZXIyLmdldERlc2NyaXB0b3JGb3JUeXBlKCku
ZmluZEZpZWxkQnlOYW1lKCJiYiIpOwotICAgIGZpZWxkQnVpbGRlcjIuc2V0RmllbGQoc3ViRmll
bGREZXNjcmlwdG9yMiwgMSk7Ci0KLSAgICAvLyBNdXRhdGUgZm9yZWlnbiBtZXNzYWdlCi0gICAg
TWVzc2FnZS5CdWlsZGVyIGZvcmVpZ25GaWVsZEJ1aWxkZXIyID0gYnVpbGRlcjIubmV3QnVpbGRl
ckZvckZpZWxkKAotICAgICAgICBmb3JlaWduRmllbGREZXNjcmlwdG9yKTsKLSAgICBGaWVsZERl
c2NyaXB0b3Igc3ViRm9yZWlnbkZpZWxkRGVzY3JpcHRvcjIgPQotICAgICAgICBmb3JlaWduRmll
bGRCdWlsZGVyMi5nZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZSgiYyIpOwot
ICAgIGZvcmVpZ25GaWVsZEJ1aWxkZXIyLnNldEZpZWxkKHN1YkZvcmVpZ25GaWVsZERlc2NyaXB0
b3IyLCAyKTsKLSAgICBidWlsZGVyMi5hZGRSZXBlYXRlZEZpZWxkKGZvcmVpZ25GaWVsZERlc2Ny
aXB0b3IsCi0gICAgICAgIGZvcmVpZ25GaWVsZEJ1aWxkZXIyLmJ1aWxkKCkpOwotCi0gICAgLy8g
TXV0YXRlIGltcG9ydCBtZXNzYWdlCi0gICAgTWVzc2FnZS5CdWlsZGVyIGltcG9ydEZpZWxkQnVp
bGRlcjIgPSBidWlsZGVyMi5uZXdCdWlsZGVyRm9yRmllbGQoCi0gICAgICAgIGltcG9ydEZpZWxk
RGVzY3JpcHRvcik7Ci0gICAgRmllbGREZXNjcmlwdG9yIHN1YkltcG9ydEZpZWxkRGVzY3JpcHRv
cjIgPQotICAgICAgICBpbXBvcnRGaWVsZEJ1aWxkZXIyLmdldERlc2NyaXB0b3JGb3JUeXBlKCku
ZmluZEZpZWxkQnlOYW1lKCJkIik7Ci0gICAgaW1wb3J0RmllbGRCdWlsZGVyMi5zZXRGaWVsZChz
dWJJbXBvcnRGaWVsZERlc2NyaXB0b3IyLCAzKTsKLSAgICBidWlsZGVyMi5hZGRSZXBlYXRlZEZp
ZWxkKGltcG9ydEZpZWxkRGVzY3JpcHRvciwKLSAgICAgICAgaW1wb3J0RmllbGRCdWlsZGVyMi5i
dWlsZCgpKTsKLQotICAgIE1lc3NhZ2UgbmV3TWVzc2FnZTIgPSBidWlsZGVyMi5idWlsZCgpOwot
Ci0gICAgLy8gVGhlc2UgdHdvIG1lc3NhZ2VzIHNob3VsZCBiZSBlcXVhbC4KLSAgICBhc3NlcnRF
cXVhbHMobmV3TWVzc2FnZTEsIG5ld01lc3NhZ2UyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3RHZXRSZXBlYXRlZEZpZWxkQnVpbGRlcldpdGhJbml0aWFsaXplZFZhbHVlKCkgewotICAgIERl
c2NyaXB0b3IgZGVzY3JpcHRvciA9IFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCk7Ci0gICAg
RmllbGREZXNjcmlwdG9yIGZpZWxkRGVzY3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0b3IuZmlu
ZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSIpOwotCi0gICAgLy8gQmVmb3Jl
IHNldHRpbmcgZmllbGQsIGJ1aWxkZXIgaXMgaW5pdGlhbGl6ZWQgYnkgZGVmYXVsdCB2YWx1ZS4g
Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWls
ZGVyKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZE5lc3RlZE1lc3NhZ2VCdWlsZGVyKCk7Ci0g
ICAgTmVzdGVkTWVzc2FnZS5CdWlsZGVyIGZpZWxkQnVpbGRlciA9Ci0gICAgICAgIChOZXN0ZWRN
ZXNzYWdlLkJ1aWxkZXIpIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRGaWVsZEJ1aWxkZXIoZmllbGREZXNj
cmlwdG9yLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgZmllbGRCdWlsZGVyLmdldEJiKCkpOwot
Ci0gICAgLy8gU2V0dGluZyBmaWVsZCB2YWx1ZSB3aXRoIG5ldyBmaWVsZCBidWlsZGVyIGluc3Rh
bmNlLgotICAgIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIE5lc3Rl
ZE1lc3NhZ2UuQnVpbGRlciBuZXdGaWVsZEJ1aWxkZXIgPQotICAgICAgICBidWlsZGVyLmFkZFJl
cGVhdGVkTmVzdGVkTWVzc2FnZUJ1aWxkZXIoKTsKLSAgICBuZXdGaWVsZEJ1aWxkZXIuc2V0QmIo
Mik7Ci0gICAgLy8gVGhlbiBnZXQgdGhlIGZpZWxkIGJ1aWxkZXIgaW5zdGFuY2UgYnkgZ2V0UmVw
ZWF0ZWRGaWVsZEJ1aWxkZXIoKS4KLSAgICBmaWVsZEJ1aWxkZXIgPQotICAgICAgICAoTmVzdGVk
TWVzc2FnZS5CdWlsZGVyKSBidWlsZGVyLmdldFJlcGVhdGVkRmllbGRCdWlsZGVyKGZpZWxkRGVz
Y3JpcHRvciwgMCk7Ci0gICAgLy8gSXQgc2hvdWxkIGNvbnRhaW4gbmV3IHZhbHVlLgotICAgIGFz
c2VydEVxdWFscygyLCBmaWVsZEJ1aWxkZXIuZ2V0QmIoKSk7Ci0gICAgLy8gVGhlc2UgdHdvIGJ1
aWxkZXIgc2hvdWxkIGJlIGVxdWFsLgotICAgIGFzc2VydFNhbWUoZmllbGRCdWlsZGVyLCBuZXdG
aWVsZEJ1aWxkZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEdldFJlcGVhdGVkRmllbGRC
dWlsZGVyTm90U3VwcG9ydGVkRXhjZXB0aW9uKCkgewotICAgIERlc2NyaXB0b3IgZGVzY3JpcHRv
ciA9IFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCk7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxk
ZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgdHJ5IHsKLSAgICAg
IGJ1aWxkZXIuZ2V0UmVwZWF0ZWRGaWVsZEJ1aWxkZXIoZGVzY3JpcHRvci5maW5kRmllbGRCeU5h
bWUoInJlcGVhdGVkX2ludDMyIiksIDApOwotICAgICAgZmFpbCgiRXhjZXB0aW9uIHdhcyBub3Qg
dGhyb3duIik7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkg
ewotICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgIH0KLSAgICB0cnkgewot
ICAgICAgYnVpbGRlci5nZXRSZXBlYXRlZEZpZWxkQnVpbGRlcigKLSAgICAgICAgICBkZXNjcmlw
dG9yLmZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfbmVzdGVkX2VudW0iKSwgMCk7Ci0gICAgICBm
YWlsKCJFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRl
ZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRp
b24uCi0gICAgfQotICAgIHRyeSB7Ci0gICAgICBidWlsZGVyLmdldFJlcGVhdGVkRmllbGRCdWls
ZGVyKGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9pbnQzMiIpLCAwKTsKLSAg
ICAgIGZhaWwoIkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwotICAgIH0gY2F0Y2ggKFVuc3Vw
cG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4
Y2VwdGlvbi4KLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRGaWVs
ZEJ1aWxkZXIoCi0gICAgICAgICAgZGVzY3JpcHRvci5maW5kRmllbGRCeU5hbWUoIm9wdGlvbmFs
X25lc3RlZF9lbnVtIiksIDApOwotICAgICAgZmFpbCgiRXhjZXB0aW9uIHdhcyBub3QgdGhyb3du
Iik7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAg
ICAgLy8gV2UgZXhwZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgIH0KLSAgICB0cnkgewotICAgICAg
YnVpbGRlci5nZXRSZXBlYXRlZEZpZWxkQnVpbGRlcigKLSAgICAgICAgICBkZXNjcmlwdG9yLmZp
bmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiKSwgMCk7Ci0gICAgICBmYWls
KCJFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9w
ZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24u
Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvSW50QXJyYXlMaXN0VGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3Qv
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0ludEFycmF5TGlzdFRlc3QuamF2YQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWZiOGYzZTIwYWE1Zjc1OWJiMDlkYWYxYTlhY2MzNDU0YjQ2
YzNmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEv
Y29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvSW50QXJyYXlMaXN0VGVzdC5q
YXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDU5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBz
dGF0aWMgamF2YS51dGlsLkFycmF5cy5hc0xpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsu
VGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51
dGlsLkNvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0
ZXJhdG9yOwotCi0vKioKLSAqIFRlc3RzIGZvciB7QGxpbmsgSW50QXJyYXlMaXN0fS4KLSAqIAot
ICogQGF1dGhvciBkd2Vpc0Bnb29nbGUuY29tIChEYW5pZWwgV2VpcykKLSAqLwotcHVibGljIGNs
YXNzIEludEFycmF5TGlzdFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gIAotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBJbnRBcnJheUxpc3QgVU5BUllfTElTVCA9IG5ld0ltbXV0YWJsZUludEFycmF5
TGlzdCgxKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW50QXJyYXlMaXN0IFRFUlRJQVJZX0xJ
U1QgPQotICAgICAgbmV3SW1tdXRhYmxlSW50QXJyYXlMaXN0KDEsIDIsIDMpOwotICAKLSAgcHJp
dmF0ZSBJbnRBcnJheUxpc3QgbGlzdDsKLSAgCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9p
ZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIGxpc3QgPSBuZXcgSW50QXJyYXlMaXN0
KCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUxpc3RSZXR1cm5zU2FtZUluc3Rh
bmNlKCkgewotICAgIGFzc2VydFNhbWUoSW50QXJyYXlMaXN0LmVtcHR5TGlzdCgpLCBJbnRBcnJh
eUxpc3QuZW1wdHlMaXN0KCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHlMaXN0
SXNJbW11dGFibGUoKSB7Ci0gICAgYXNzZXJ0SW1tdXRhYmxlKEludEFycmF5TGlzdC5lbXB0eUxp
c3QoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RNYWtlSW1tdXRhYmxlKCkgewotICAg
IGxpc3QuYWRkSW50KDIpOwotICAgIGxpc3QuYWRkSW50KDQpOwotICAgIGxpc3QuYWRkSW50KDYp
OwotICAgIGxpc3QuYWRkSW50KDgpOwotICAgIGxpc3QubWFrZUltbXV0YWJsZSgpOwotICAgIGFz
c2VydEltbXV0YWJsZShsaXN0KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNb2RpZmljYXRp
b25XaXRoSXRlcmF0aW9uKCkgewotICAgIGxpc3QuYWRkQWxsKGFzTGlzdCgxLCAyLCAzLCA0KSk7
Ci0gICAgSXRlcmF0b3I8SW50ZWdlcj4gaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDQsIGxpc3Quc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgKGludCkg
bGlzdC5nZXQoMCkpOwotICAgIGFzc2VydEVxdWFscygxLCAoaW50KSBpdGVyYXRvci5uZXh0KCkp
OwotICAgIGxpc3Quc2V0KDAsIDEpOwotICAgIGFzc2VydEVxdWFscygyLCAoaW50KSBpdGVyYXRv
ci5uZXh0KCkpOwotICAgIAotICAgIGxpc3QucmVtb3ZlKDApOwotICAgIHRyeSB7Ci0gICAgICBp
dGVyYXRvci5uZXh0KCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoQ29uY3VycmVudE1v
ZGlmaWNhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLQotICAg
IGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotICAgIGxpc3QuYWRkKDAsIDApOwotICAgIHRy
eSB7Ci0gICAgICBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAo
Q29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAot
ICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEdldCgpIHsKLSAgICBhc3NlcnRFcXVh
bHMoMSwgKGludCkgVEVSVElBUllfTElTVC5nZXQoMCkpOwotICAgIGFzc2VydEVxdWFscygyLCAo
aW50KSBURVJUSUFSWV9MSVNULmdldCgxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIChpbnQpIFRF
UlRJQVJZX0xJU1QuZ2V0KDIpKTsKLSAgICAKLSAgICB0cnkgewotICAgICAgVEVSVElBUllfTElT
VC5nZXQoLTEpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNF
eGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsK
LSAgICAgIFRFUlRJQVJZX0xJU1QuZ2V0KDMpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2gg
KEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9
Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRJbnQoKSB7Ci0gICAgYXNzZXJ0RXF1YWxz
KDEsIFRFUlRJQVJZX0xJU1QuZ2V0SW50KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgVEVSVElB
UllfTElTVC5nZXRJbnQoMSkpOwotICAgIGFzc2VydEVxdWFscygzLCBURVJUSUFSWV9MSVNULmdl
dEludCgyKSk7Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIFRFUlRJQVJZX0xJU1QuZ2V0KC0xKTsK
LSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBURVJU
SUFSWV9MSVNULmdldCgzKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9m
Qm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAot
ICBwdWJsaWMgdm9pZCB0ZXN0U2l6ZSgpIHsKLSAgICBhc3NlcnRFcXVhbHMoMCwgSW50QXJyYXlM
aXN0LmVtcHR5TGlzdCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIFVOQVJZX0xJU1Qu
c2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgVEVSVElBUllfTElTVC5zaXplKCkpOwotCi0g
ICAgbGlzdC5hZGRJbnQoMik7Ci0gICAgbGlzdC5hZGRJbnQoNCk7Ci0gICAgbGlzdC5hZGRJbnQo
Nik7Ci0gICAgbGlzdC5hZGRJbnQoOCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIGxpc3Quc2l6ZSgp
KTsKLSAgICAKLSAgICBsaXN0LnJlbW92ZSgwKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgbGlzdC5z
aXplKCkpOwotICAgIAotICAgIGxpc3QuYWRkKDE2KTsKLSAgICBhc3NlcnRFcXVhbHMoNCwgbGlz
dC5zaXplKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0U2V0KCkgewotICAgIGxpc3Qu
YWRkSW50KDIpOwotICAgIGxpc3QuYWRkSW50KDQpOwotICAgIAotICAgIGFzc2VydEVxdWFscygy
LCAoaW50KSBsaXN0LnNldCgwLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIGxpc3QuZ2V0SW50
KDApKTsKLQotICAgIGFzc2VydEVxdWFscyg0LCAoaW50KSBsaXN0LnNldCgxLCAwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDAsIGxpc3QuZ2V0SW50KDEpKTsKLSAgICAKLSAgICB0cnkgewotICAgICAg
bGlzdC5zZXQoLTEsIDApOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZC
b3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0KLSAgICB0cnkg
ewotICAgICAgbGlzdC5zZXQoMiwgMCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5k
ZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAg
fQotICAKLSAgcHVibGljIHZvaWQgdGVzdFNldEludCgpIHsKLSAgICBsaXN0LmFkZEludCgyKTsK
LSAgICBsaXN0LmFkZEludCg0KTsKLSAgICAKLSAgICBhc3NlcnRFcXVhbHMoMiwgbGlzdC5zZXRJ
bnQoMCwgMCkpOwotICAgIGFzc2VydEVxdWFscygwLCBsaXN0LmdldEludCgwKSk7Ci0KLSAgICBh
c3NlcnRFcXVhbHMoNCwgbGlzdC5zZXRJbnQoMSwgMCkpOwotICAgIGFzc2VydEVxdWFscygwLCBs
aXN0LmdldEludCgxKSk7Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0SW50KC0xLCAw
KTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9u
IGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Qu
c2V0SW50KDIsIDApOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3Vu
ZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1
YmxpYyB2b2lkIHRlc3RBZGQoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIGxpc3Quc2l6ZSgpKTsK
LQotICAgIGFzc2VydFRydWUobGlzdC5hZGQoMikpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3Qo
MiksIGxpc3QpOwotCi0gICAgYXNzZXJ0VHJ1ZShsaXN0LmFkZCgzKSk7Ci0gICAgbGlzdC5hZGQo
MCwgNCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCg0LCAyLCAzKSwgbGlzdCk7Ci0gICAgCi0g
ICAgbGlzdC5hZGQoMCwgMSk7Ci0gICAgbGlzdC5hZGQoMCwgMCk7Ci0gICAgLy8gRm9yY2UgYSBy
ZXNpemUgYnkgZ2V0dGluZyB1cCB0byAxMSBlbGVtZW50cy4KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IDY7IGkrKykgewotICAgICAgbGlzdC5hZGQoNSArIGkpOwotICAgIH0KLSAgICBhc3NlcnRF
cXVhbHMoYXNMaXN0KDAsIDEsIDQsIDIsIDMsIDUsIDYsIDcsIDgsIDksIDEwKSwgbGlzdCk7Ci0g
ICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkKC0xLCA1KTsKLSAgICB9IGNhdGNoIChJbmRl
eE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAg
IAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZCg0LCA1KTsKLSAgICB9IGNhdGNoIChJbmRleE91
dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0g
IAotICBwdWJsaWMgdm9pZCB0ZXN0QWRkSW50KCkgewotICAgIGFzc2VydEVxdWFscygwLCBsaXN0
LnNpemUoKSk7Ci0KLSAgICBsaXN0LmFkZEludCgyKTsKLSAgICBhc3NlcnRFcXVhbHMoYXNMaXN0
KDIpLCBsaXN0KTsKLQotICAgIGxpc3QuYWRkSW50KDMpOwotICAgIGFzc2VydEVxdWFscyhhc0xp
c3QoMiwgMyksIGxpc3QpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0QWRkQWxsKCkgewot
ICAgIGFzc2VydEVxdWFscygwLCBsaXN0LnNpemUoKSk7Ci0KLSAgICBhc3NlcnRUcnVlKGxpc3Qu
YWRkQWxsKENvbGxlY3Rpb25zLnNpbmdsZXRvbigxKSkpOwotICAgIGFzc2VydEVxdWFscygxLCBs
aXN0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIChpbnQpIGxpc3QuZ2V0KDApKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMSwgbGlzdC5nZXRJbnQoMCkpOwotICAgIAotICAgIGFzc2VydFRydWUo
bGlzdC5hZGRBbGwoYXNMaXN0KDIsIDMsIDQsIDUsIDYpKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFz
TGlzdCgxLCAyLCAzLCA0LCA1LCA2KSwgbGlzdCk7Ci0gICAgCi0gICAgYXNzZXJ0VHJ1ZShsaXN0
LmFkZEFsbChURVJUSUFSWV9MSVNUKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgxLCAyLCAz
LCA0LCA1LCA2LCAxLCAyLCAzKSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRGYWxzZShsaXN0LmFkZEFs
bChDb2xsZWN0aW9ucy48SW50ZWdlcj5lbXB0eUxpc3QoKSkpOwotICAgIGFzc2VydEZhbHNlKGxp
c3QuYWRkQWxsKEludEFycmF5TGlzdC5lbXB0eUxpc3QoKSkpOwotICB9Ci0gIAotICBwdWJsaWMg
dm9pZCB0ZXN0UmVtb3ZlKCkgewotICAgIGxpc3QuYWRkQWxsKFRFUlRJQVJZX0xJU1QpOwotICAg
IGFzc2VydEVxdWFscygxLCAoaW50KSBsaXN0LnJlbW92ZSgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KGFzTGlzdCgyLCAzKSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRUcnVlKGxpc3QucmVtb3ZlKEludGVn
ZXIudmFsdWVPZigzKSkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMiksIGxpc3QpOwotCi0g
ICAgYXNzZXJ0RmFsc2UobGlzdC5yZW1vdmUoSW50ZWdlci52YWx1ZU9mKDMpKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKGFzTGlzdCgyKSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMiwgKGludCkg
bGlzdC5yZW1vdmUoMCkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoKSwgbGlzdCk7Ci0gICAg
Ci0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmVtb3ZlKC0xKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9
IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVk
Ci0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZSgwKTsKLSAgICB9IGNh
dGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0g
ICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYXNzZXJ0SW1tdXRhYmxlKEludEFycmF5TGlz
dCBsaXN0KSB7Ci0gICAgaWYgKGxpc3QuY29udGFpbnMoMSkpIHsKLSAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKCJDYW5ub3QgdGVzdCB0aGUgaW1tdXRhYmlsaXR5IG9mIGxpc3RzIHRo
YXQgY29udGFpbiAxLiIpOwotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGQo
MSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNl
cHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAg
ICAgIGxpc3QuYWRkKDAsIDEpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9y
dGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAg
IAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChDb2xsZWN0aW9ucy48SW50ZWdlcj5lbXB0
eUxpc3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRp
b25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5
IHsKLSAgICAgIGxpc3QuYWRkQWxsKENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoMSkpOwotICAg
ICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0
LmFkZEFsbChuZXcgSW50QXJyYXlMaXN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2gg
KFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0g
ICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChVTkFSWV9MSVNUKTsKLSAg
ICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlz
dC5hZGRBbGwoMCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uKDEpKTsKLSAgICAgIGZhaWwoKTsKLSAg
ICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBl
eHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRBbGwoMCwgVU5B
UllfTElTVCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRp
b25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5
IHsKLSAgICAgIGxpc3QuYWRkQWxsKDAsIENvbGxlY3Rpb25zLjxJbnRlZ2VyPmVtcHR5TGlzdCgp
KTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAg
ICAgbGlzdC5hZGRJbnQoMCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0
ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAg
Ci0gICAgdHJ5IHsKLSAgICAgIGxpc3QuY2xlYXIoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNh
dGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3Rl
ZAotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZSgxKTsKLSAgICAgIGZhaWwo
KTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZW1vdmUo
bmV3IE9iamVjdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9w
ZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAg
ICB0cnkgewotICAgICAgbGlzdC5yZW1vdmVBbGwoQ29sbGVjdGlvbnMuPEludGVnZXI+ZW1wdHlM
aXN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9u
RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7
Ci0gICAgICBsaXN0LnJlbW92ZUFsbChDb2xsZWN0aW9ucy5zaW5nbGV0b24oMSkpOwotICAgICAg
ZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJl
bW92ZUFsbChVTkFSWV9MSVNUKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBv
cnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAg
ICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZXRhaW5BbGwoQ29sbGVjdGlvbnMuPEludGVnZXI+
ZW1wdHlMaXN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3Bl
cmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAg
IHRyeSB7Ci0gICAgICBsaXN0LnJldGFpbkFsbChDb2xsZWN0aW9ucy5zaW5nbGV0b24oMSkpOwot
ICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u
IGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBs
aXN0LnJldGFpbkFsbChVTkFSWV9MSVNUKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAg
IH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5zZXQoMCwgMCk7Ci0gICAgICBmYWlsKCk7
Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAg
Ly8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0SW50KDAs
IDApOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRl
IHN0YXRpYyBJbnRBcnJheUxpc3QgbmV3SW1tdXRhYmxlSW50QXJyYXlMaXN0KGludC4uLiBlbGVt
ZW50cykgewotICAgIEludEFycmF5TGlzdCBsaXN0ID0gbmV3IEludEFycmF5TGlzdCgpOwotICAg
IGZvciAoaW50IGVsZW1lbnQgOiBlbGVtZW50cykgewotICAgICAgbGlzdC5hZGRJbnQoZWxlbWVu
dCk7Ci0gICAgfQotICAgIGxpc3QubWFrZUltbXV0YWJsZSgpOwotICAgIHJldHVybiBsaXN0Owot
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvSXNWYWxpZFV0ZjhUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvSXNWYWxpZFV0ZjhUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDc1NjA0OWI0MWZkMWNhM2E3YTNmYjA0MDI4ODE5MmViMTU3MTQ1NzkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rl
c3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0lzVmFsaWRVdGY4VGVzdC5qYXZhCisrKyAvZGV2
L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmdv
b2dsZS5wcm90b2J1Zi5Jc1ZhbGlkVXRmOFRlc3RVdGlsLkRJUkVDVF9OSU9fRkFDVE9SWTsKLWlt
cG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Jc1ZhbGlkVXRmOFRlc3RVdGlsLkVYUEVD
VEVEX09ORV9CWVRFX1JPVU5EVFJJUFBBQkxFX0NPVU5UOwotaW1wb3J0IHN0YXRpYyBjb20uZ29v
Z2xlLnByb3RvYnVmLklzVmFsaWRVdGY4VGVzdFV0aWwuRVhQRUNURURfVEhSRUVfQllURV9ST1VO
RFRSSVBQQUJMRV9DT1VOVDsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Jc1Zh
bGlkVXRmOFRlc3RVdGlsLkhFQVBfTklPX0ZBQ1RPUlk7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29n
bGUucHJvdG9idWYuSXNWYWxpZFV0ZjhUZXN0VXRpbC5MSVRFUkFMX0ZBQ1RPUlk7Ci1pbXBvcnQg
c3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuSXNWYWxpZFV0ZjhUZXN0VXRpbC50ZXN0Qnl0ZXM7
Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLklzVmFsaWRVdGY4VGVzdFV0aWwuQnl0ZVN0
cmluZ0ZhY3Rvcnk7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Jc1ZhbGlkVXRmOFRlc3RV
dGlsLlNoYXJkOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0vKioKLSAq
IFRlc3RzIGNhc2VzIGZvciB7QGxpbmsgQnl0ZVN0cmluZyNpc1ZhbGlkVXRmOCgpfS4gVGhpcyBp
bmNsdWRlcyB0aHJlZQotICogYnJ1dGUgZm9yY2UgdGVzdHMgdGhhdCBhY3R1YWxseSB0ZXN0IGV2
ZXJ5IHBlcm11dGF0aW9uIG9mIG9uZSBieXRlLCB0d28gYnl0ZSwKLSAqIGFuZCB0aHJlZSBieXRl
IHNlcXVlbmNlcyB0byBlbnN1cmUgdGhhdCB0aGUgbWV0aG9kIHByb2R1Y2VzIHRoZSByaWdodCBy
ZXN1bHQKLSAqIGZvciBldmVyeSBwb3NzaWJsZSBieXRlIGVuY29kaW5nIHdoZXJlICJyaWdodCIg
bWVhbnMgaXQncyBjb25zaXN0ZW50IHdpdGgKLSAqIGphdmEncyBVVEYtOCBzdHJpbmcgZW5jb2Rp
bmcvZGVjb2Rpbmcgc3VjaCB0aGF0IHRoZSBtZXRob2QgcmV0dXJucyB0cnVlIGZvcgotICogYW55
IHNlcXVlbmNlIHRoYXQgd2lsbCByb3VuZCB0cmlwIHdoZW4gY29udmVydGVkIHRvIGEgU3RyaW5n
IGFuZCB0aGVuIGJhY2sgdG8KLSAqIGJ5dGVzIGFuZCB3aWxsIHJldHVybiBmYWxzZSBmb3IgYW55
IHNlcXVlbmNlIHRoYXQgd2lsbCBub3Qgcm91bmQgdHJpcC4KLSAqIFNlZSBhbHNvIHtAbGluayBJ
c1ZhbGlkVXRmOEZvdXJCeXRlVGVzdH0uIEl0IGFsc28gaW5jbHVkZXMgc29tZQotICogb3RoZXIg
bW9yZSB0YXJnZXRlZCB0ZXN0cy4KLSAqCi0gKiBAYXV0aG9yIGpvbnBAZ29vZ2xlLmNvbSAoSm9u
IFBlcmxvdykKLSAqIEBhdXRob3IgbWFydGlucmJAZ29vZ2xlLmNvbSAoTWFydGluIEJ1Y2hob2x6
KQotICovCi1wdWJsaWMgY2xhc3MgSXNWYWxpZFV0ZjhUZXN0IGV4dGVuZHMgVGVzdENhc2Ugewot
ICAvKioKLSAgICogVGVzdHMgdGhhdCByb3VuZCB0cmlwcGluZyBvZiBhbGwgdHdvIGJ5dGUgcGVy
bXV0YXRpb25zIHdvcmsuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZFV0ZjhfMUJ5
dGUoKSB7Ci0gICAgdGVzdEJ5dGVzKExJVEVSQUxfRkFDVE9SWSwgMSwgRVhQRUNURURfT05FX0JZ
VEVfUk9VTkRUUklQUEFCTEVfQ09VTlQpOwotICAgIHRlc3RCeXRlcyhIRUFQX05JT19GQUNUT1JZ
LCAxLCBFWFBFQ1RFRF9PTkVfQllURV9ST1VORFRSSVBQQUJMRV9DT1VOVCk7Ci0gICAgdGVzdEJ5
dGVzKERJUkVDVF9OSU9fRkFDVE9SWSwgMSwgRVhQRUNURURfT05FX0JZVEVfUk9VTkRUUklQUEFC
TEVfQ09VTlQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgcm91bmQgdHJpcHBpbmcg
b2YgYWxsIHR3byBieXRlIHBlcm11dGF0aW9ucyB3b3JrLgotICAgKi8KLSAgcHVibGljIHZvaWQg
dGVzdElzVmFsaWRVdGY4XzJCeXRlcygpIHsKLSAgICB0ZXN0Qnl0ZXMoTElURVJBTF9GQUNUT1JZ
LCAyLCBJc1ZhbGlkVXRmOFRlc3RVdGlsLkVYUEVDVEVEX1RXT19CWVRFX1JPVU5EVFJJUFBBQkxF
X0NPVU5UKTsKLSAgICB0ZXN0Qnl0ZXMoSEVBUF9OSU9fRkFDVE9SWSwgMiwgSXNWYWxpZFV0ZjhU
ZXN0VXRpbC5FWFBFQ1RFRF9UV09fQllURV9ST1VORFRSSVBQQUJMRV9DT1VOVCk7Ci0gICAgdGVz
dEJ5dGVzKERJUkVDVF9OSU9fRkFDVE9SWSwgMiwgSXNWYWxpZFV0ZjhUZXN0VXRpbC5FWFBFQ1RF
RF9UV09fQllURV9ST1VORFRSSVBQQUJMRV9DT1VOVCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVz
dHMgdGhhdCByb3VuZCB0cmlwcGluZyBvZiBhbGwgdGhyZWUgYnl0ZSBwZXJtdXRhdGlvbnMgd29y
ay4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJc1ZhbGlkVXRmOF8zQnl0ZXMoKSB7Ci0gICAg
Ly8gVHJhdmlzJyBPT00ga2lsbGVyIGRvZXNuJ3QgbGlrZSB0aGlzIHRlc3QKLSAgICBpZiAoU3lz
dGVtLmdldGVudigiVFJBVklTIikgPT0gbnVsbCkgewotICAgICAgdGVzdEJ5dGVzKExJVEVSQUxf
RkFDVE9SWSwgMywgRVhQRUNURURfVEhSRUVfQllURV9ST1VORFRSSVBQQUJMRV9DT1VOVCk7Ci0g
ICAgICB0ZXN0Qnl0ZXMoSEVBUF9OSU9fRkFDVE9SWSwgMywgRVhQRUNURURfVEhSRUVfQllURV9S
T1VORFRSSVBQQUJMRV9DT1VOVCk7Ci0gICAgICB0ZXN0Qnl0ZXMoRElSRUNUX05JT19GQUNUT1JZ
LCAzLCBFWFBFQ1RFRF9USFJFRV9CWVRFX1JPVU5EVFJJUFBBQkxFX0NPVU5UKTsKLSAgICB9Ci0g
IH0KLQotICAvKioKLSAgICogVGVzdHMgdGhhdCByb3VuZCB0cmlwcGluZyBvZiBhIHNhbXBsZSBv
ZiBmb3VyIGJ5dGUgcGVybXV0YXRpb25zIHdvcmsuCi0gICAqIEFsbCBwZXJtdXRhdGlvbnMgYXJl
IHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIHRvIHRlc3QgZm9yIGF1dG9tYXRlZCBydW5zOwotICAg
KiB7QGxpbmsgSXNWYWxpZFV0ZjhGb3VyQnl0ZVRlc3R9IGlzIHVzZWQgZm9yIGZ1bGwgY292ZXJh
Z2UuIFRoaXMgbWV0aG9kCi0gICAqIHRlc3RzIHNwZWNpZmljIGZvdXItYnl0ZSBjYXNlcy4KLSAg
ICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJc1ZhbGlkVXRmOF80Qnl0ZXNTYW1wbGVzKCkgewotICAg
IC8vIFZhbGlkIDQgYnl0ZS4KLSAgICBhc3NlcnRWYWxpZFV0ZjgoMHhGMCwgMHhBNCwgMHhBRCwg
MHhBMik7Ci0KLSAgICAvLyBCYWQgdHJhaWxpbmcgYnl0ZXMKLSAgICBhc3NlcnRJbnZhbGlkVXRm
OCgweEYwLCAweEE0LCAweEFELCAweDdGKTsKLSAgICBhc3NlcnRJbnZhbGlkVXRmOCgweEYwLCAw
eEE0LCAweEFELCAweEMwKTsKLQotICAgIC8vIFNwZWNpYWwgY2FzZXMgZm9yIGJ5dGUyCi0gICAg
YXNzZXJ0SW52YWxpZFV0ZjgoMHhGMCwgMHg4RiwgMHhBRCwgMHhBMik7Ci0gICAgYXNzZXJ0SW52
YWxpZFV0ZjgoMHhGNCwgMHg5MCwgMHhBRCwgMHhBMik7Ci0gIH0KLQotICAvKioKLSAgICogVGVz
dHMgc29tZSBoYXJkLWNvZGVkIHRlc3QgY2FzZXMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0
U29tZVNlcXVlbmNlcygpIHsKLSAgICAvLyBFbXB0eQotICAgIGFzc2VydFRydWUoYXNCeXRlcygi
IikuaXNWYWxpZFV0ZjgoKSk7Ci0KLSAgICAvLyBPbmUtYnl0ZSBjaGFyYWN0ZXJzLCBpbmNsdWRp
bmcgY29udHJvbCBjaGFyYWN0ZXJzCi0gICAgYXNzZXJ0VHJ1ZShhc0J5dGVzKCJcdTAwMDBhYmNc
dTAwN2YiKS5pc1ZhbGlkVXRmOCgpKTsKLQotICAgIC8vIFR3by1ieXRlIGNoYXJhY3RlcnMKLSAg
ICBhc3NlcnRUcnVlKGFzQnl0ZXMoIlx1MDBhMlx1MDBhMiIpLmlzVmFsaWRVdGY4KCkpOwotCi0g
ICAgLy8gVGhyZWUtYnl0ZSBjaGFyYWN0ZXJzCi0gICAgYXNzZXJ0VHJ1ZShhc0J5dGVzKCJcdTAy
MGFjXHUwMjBhYyIpLmlzVmFsaWRVdGY4KCkpOwotCi0gICAgLy8gRm91ci1ieXRlIGNoYXJhY3Rl
cnMKLSAgICBhc3NlcnRUcnVlKGFzQnl0ZXMoIlx1MDI0QjYyXHUwMjRCNjIiKS5pc1ZhbGlkVXRm
OCgpKTsKLQotICAgIC8vIE1peGVkIHN0cmluZwotICAgIGFzc2VydFRydWUoYXNCeXRlcygiYVx1
MDIwYWNcdTAwYTJiXFx1MDI0QjYydTAyMGFjY1x1MDBhMmRlXHUwMjRCNjIiKS5pc1ZhbGlkVXRm
OCgpKTsKLQotICAgIC8vIE5vdCBhIHZhbGlkIHN0cmluZwotICAgIGFzc2VydEludmFsaWRVdGY4
KC0xLCAwLCAtMSwgMCk7Ci0gIH0KLQotICBwcml2YXRlIGJ5dGVbXSB0b0J5dGVBcnJheShpbnQu
Li4gYnl0ZXMpIHsKLSAgICBieXRlW10gcmVhbEJ5dGVzID0gbmV3IGJ5dGVbYnl0ZXMubGVuZ3Ro
XTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBy
ZWFsQnl0ZXNbaV0gPSAoYnl0ZSkgYnl0ZXNbaV07Ci0gICAgfQotICAgIHJldHVybiByZWFsQnl0
ZXM7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYXNzZXJ0VmFsaWRVdGY4KEJ5dGVTdHJpbmdGYWN0
b3J5IGZhY3RvcnksIGludFtdIGJ5dGVzLCBib29sZWFuIG5vdCkgewotICAgIGJ5dGVbXSByZWFs
Qnl0ZXMgPSB0b0J5dGVBcnJheShieXRlcyk7Ci0gICAgYXNzZXJ0VHJ1ZShub3QgXiBVdGY4Lmlz
VmFsaWRVdGY4KHJlYWxCeXRlcykpOwotICAgIGFzc2VydFRydWUobm90IF4gVXRmOC5pc1ZhbGlk
VXRmOChyZWFsQnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCkpOwotICAgIEJ5dGVTdHJpbmcgbGVhZiA9
IGZhY3RvcnkubmV3Qnl0ZVN0cmluZyhyZWFsQnl0ZXMpOwotICAgIEJ5dGVTdHJpbmcgc3ViID0g
bGVhZi5zdWJzdHJpbmcoMCwgYnl0ZXMubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG5vdCBeIGxl
YWYuaXNWYWxpZFV0ZjgoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShub3QgXiBzdWIuaXNWYWxpZFV0Zjgo
KSk7Ci0gICAgQnl0ZVN0cmluZ1tdIHJvcGVzID0gewotICAgICAgICBSb3BlQnl0ZVN0cmluZy5u
ZXdJbnN0YW5jZUZvclRlc3QoQnl0ZVN0cmluZy5FTVBUWSwgbGVhZiksCi0gICAgICAgIFJvcGVC
eXRlU3RyaW5nLm5ld0luc3RhbmNlRm9yVGVzdChCeXRlU3RyaW5nLkVNUFRZLCBzdWIpLAotICAg
ICAgICBSb3BlQnl0ZVN0cmluZy5uZXdJbnN0YW5jZUZvclRlc3QobGVhZiwgQnl0ZVN0cmluZy5F
TVBUWSksCi0gICAgICAgIFJvcGVCeXRlU3RyaW5nLm5ld0luc3RhbmNlRm9yVGVzdChzdWIsIEJ5
dGVTdHJpbmcuRU1QVFkpLAotICAgICAgICBSb3BlQnl0ZVN0cmluZy5uZXdJbnN0YW5jZUZvclRl
c3Qoc3ViLCBsZWFmKX07Ci0gICAgZm9yIChCeXRlU3RyaW5nIHJvcGUgOiByb3BlcykgewotICAg
ICAgYXNzZXJ0VHJ1ZShub3QgXiByb3BlLmlzVmFsaWRVdGY4KCkpOwotICAgIH0KLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBhc3NlcnRWYWxpZFV0ZjgoaW50Li4uIGJ5dGVzKSB7Ci0gICAgYXNzZXJ0
VmFsaWRVdGY4KExJVEVSQUxfRkFDVE9SWSwgYnl0ZXMsIGZhbHNlKTsKLSAgICBhc3NlcnRWYWxp
ZFV0ZjgoSEVBUF9OSU9fRkFDVE9SWSwgYnl0ZXMsIGZhbHNlKTsKLSAgICBhc3NlcnRWYWxpZFV0
ZjgoRElSRUNUX05JT19GQUNUT1JZLCBieXRlcywgZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIGFzc2VydEludmFsaWRVdGY4KGludC4uLiBieXRlcykgewotICAgIGFzc2VydFZhbGlkVXRm
OChMSVRFUkFMX0ZBQ1RPUlksIGJ5dGVzLCB0cnVlKTsKLSAgICBhc3NlcnRWYWxpZFV0ZjgoSEVB
UF9OSU9fRkFDVE9SWSwgYnl0ZXMsIHRydWUpOwotICAgIGFzc2VydFZhbGlkVXRmOChESVJFQ1Rf
TklPX0ZBQ1RPUlksIGJ5dGVzLCB0cnVlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIEJ5dGVT
dHJpbmcgYXNCeXRlcyhTdHJpbmcgcykgewotICAgIHJldHVybiBCeXRlU3RyaW5nLmNvcHlGcm9t
VXRmOChzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTaGFyZHNIYXZlRXhwZWN0ZWRSb3Vu
ZFRyaXBwYWJsZXMoKSB7Ci0gICAgLy8gQSBzYW5pdHkgY2hlY2suCi0gICAgaW50IGFjdHVhbCA9
IDA7Ci0gICAgZm9yIChTaGFyZCBzaGFyZCA6IElzVmFsaWRVdGY4VGVzdFV0aWwuRk9VUl9CWVRF
X1NIQVJEUykgewotICAgICAgYWN0dWFsICs9IHNoYXJkLmV4cGVjdGVkOwotICAgIH0KLSAgICBh
c3NlcnRFcXVhbHMoSXNWYWxpZFV0ZjhUZXN0VXRpbC5FWFBFQ1RFRF9GT1VSX0JZVEVfUk9VTkRU
UklQUEFCTEVfQ09VTlQsIGFjdHVhbCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Jc1ZhbGlkVXRmOFRlc3RVdGlsLmphdmEg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvSXNWYWxpZFV0ZjhU
ZXN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE4MDhiZjMxYjg5
NmZlYjQ0NGI4ZWM5MjE3NTlmN2Y3Nzg5YjZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9Jc1ZhbGlkVXRmOFRlc3RVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDggKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdv
b2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVx
dWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9y
dCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRTYW1lOwotaW1wb3J0IHN0YXRpYyBvcmcu
anVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQu
ZmFpbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWYuU29mdFJlZmVyZW5jZTsKLWltcG9ydCBqYXZh
Lm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkNoYXJCdWZmZXI7Ci1pbXBvcnQgamF2
YS5uaW8uY2hhcnNldC5DaGFyc2V0RGVjb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNo
YXJzZXRFbmNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kZXJSZXN1bHQ7Ci1pbXBv
cnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwu
QXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxp
c3Q7Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5M
b2dnZXI7Ci0KLS8qKgotICogU2hhcmVkIHRlc3RpbmcgY29kZSBmb3Ige0BsaW5rIElzVmFsaWRV
dGY4VGVzdH0gYW5kCi0gKiB7QGxpbmsgSXNWYWxpZFV0ZjhGb3VyQnl0ZVRlc3R9LgotICoKLSAq
IEBhdXRob3Igam9ucEBnb29nbGUuY29tIChKb24gUGVybG93KQotICogQGF1dGhvciBtYXJ0aW5y
YkBnb29nbGUuY29tIChNYXJ0aW4gQnVjaGhvbHopCi0gKi8KLWZpbmFsIGNsYXNzIElzVmFsaWRV
dGY4VGVzdFV0aWwgewotICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdl
dExvZ2dlcihJc1ZhbGlkVXRmOFRlc3RVdGlsLmNsYXNzLmdldE5hbWUoKSk7Ci0KLSAgcHJpdmF0
ZSBJc1ZhbGlkVXRmOFRlc3RVdGlsKCkge30KLQotICBzdGF0aWMgaW50ZXJmYWNlIEJ5dGVTdHJp
bmdGYWN0b3J5IHsKLSAgICBCeXRlU3RyaW5nIG5ld0J5dGVTdHJpbmcoYnl0ZVtdIGJ5dGVzKTsK
LSAgfQotCi0gIHN0YXRpYyBmaW5hbCBCeXRlU3RyaW5nRmFjdG9yeSBMSVRFUkFMX0ZBQ1RPUlkg
PSBuZXcgQnl0ZVN0cmluZ0ZhY3RvcnkoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ5
dGVTdHJpbmcgbmV3Qnl0ZVN0cmluZyhieXRlW10gYnl0ZXMpIHsKLSAgICAgIHJldHVybiBCeXRl
U3RyaW5nLndyYXAoYnl0ZXMpOwotICAgIH0KLSAgfTsKLQotICBzdGF0aWMgZmluYWwgQnl0ZVN0
cmluZ0ZhY3RvcnkgSEVBUF9OSU9fRkFDVE9SWSA9IG5ldyBCeXRlU3RyaW5nRmFjdG9yeSgpIHsK
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnl0ZVN0cmluZyBuZXdCeXRlU3RyaW5nKGJ5dGVb
XSBieXRlcykgewotICAgICAgcmV0dXJuIG5ldyBOaW9CeXRlU3RyaW5nKEJ5dGVCdWZmZXIud3Jh
cChieXRlcykpOwotICAgIH0KLSAgfTsKLQotICBwcml2YXRlIHN0YXRpYyBUaHJlYWRMb2NhbDxT
b2Z0UmVmZXJlbmNlPEJ5dGVCdWZmZXI+PiBkaXJlY3RCdWZmZXIgPQotICAgICAgbmV3IFRocmVh
ZExvY2FsPFNvZnRSZWZlcmVuY2U8Qnl0ZUJ1ZmZlcj4+KCk7Ci0KLSAgLyoqCi0gICAqIEZhY3Rv
cnkgZm9yIGRpcmVjdCB7QGxpbmsgQnl0ZUJ1ZmZlcn0gaW5zdGFuY2VzLiBUbyByZWR1Y2UgZGly
ZWN0IG1lbW9yeSB1c2FnZSwgdGhpcwotICAgKiB1c2VzIGEgdGhyZWFkIGxvY2FsIGRpcmVjdCBi
dWZmZXIuIFRoaXMgbWVhbnMgdGhhdCBlYWNoIGNhbGwgd2lsbCBvdmVyd3JpdGUgdGhlIGJ1ZmZl
cidzCi0gICAqIGNvbnRlbnRzIGZyb20gdGhlIHByZXZpb3VzIGNhbGwsIHNvIHRoZSBjYWxsaW5n
IGNvZGUgbXVzdCBiZSBjYXJlZnVsIG5vdCB0byBjb250aW51ZSB1c2luZwotICAgKiBhIGJ1ZmZl
ciByZXR1cm5lZCBmcm9tIGEgcHJldmlvdXMgaW52b2NhdGlvbi4KLSAgICovCi0gIHN0YXRpYyBm
aW5hbCBCeXRlU3RyaW5nRmFjdG9yeSBESVJFQ1RfTklPX0ZBQ1RPUlkgPSBuZXcgQnl0ZVN0cmlu
Z0ZhY3RvcnkoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ5dGVTdHJpbmcgbmV3Qnl0
ZVN0cmluZyhieXRlW10gYnl0ZXMpIHsKLSAgICAgIFNvZnRSZWZlcmVuY2U8Qnl0ZUJ1ZmZlcj4g
cmVmID0gZGlyZWN0QnVmZmVyLmdldCgpOwotICAgICAgQnl0ZUJ1ZmZlciBidWZmZXIgPSByZWYg
PT0gbnVsbCA/IG51bGwgOiByZWYuZ2V0KCk7Ci0gICAgICBpZiAoYnVmZmVyID09IG51bGwgfHwg
YnVmZmVyLmNhcGFjaXR5KCkgPCBieXRlcy5sZW5ndGgpIHsKLSAgICAgICAgYnVmZmVyID0gQnl0
ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChieXRlcy5sZW5ndGgpOwotICAgICAgICBkaXJlY3RCdWZm
ZXIuc2V0KG5ldyBTb2Z0UmVmZXJlbmNlPEJ5dGVCdWZmZXI+KGJ1ZmZlcikpOwotICAgICAgfQot
ICAgICAgYnVmZmVyLmNsZWFyKCk7Ci0gICAgICBidWZmZXIucHV0KGJ5dGVzKTsKLSAgICAgIGJ1
ZmZlci5mbGlwKCk7Ci0gICAgICByZXR1cm4gbmV3IE5pb0J5dGVTdHJpbmcoYnVmZmVyKTsKLSAg
ICB9Ci0gIH07Ci0KLSAgLy8gMTI4IC0gW2NoYXJzIDB4MDAwMCB0byAweDAwN2ZdCi0gIHN0YXRp
YyBmaW5hbCBsb25nIE9ORV9CWVRFX1JPVU5EVFJJUFBBQkxFX0NIQVJBQ1RFUlMgPSAweDAwN2Yg
LSAweDAwMDAgKyAxOwotCi0gIC8vIDEyOAotICBzdGF0aWMgZmluYWwgbG9uZyBFWFBFQ1RFRF9P
TkVfQllURV9ST1VORFRSSVBQQUJMRV9DT1VOVCA9IE9ORV9CWVRFX1JPVU5EVFJJUFBBQkxFX0NI
QVJBQ1RFUlM7Ci0KLSAgLy8gMTkyMCBbY2hhcnMgMHgwMDgwIHRvIDB4MDdGRl0KLSAgc3RhdGlj
IGZpbmFsIGxvbmcgVFdPX0JZVEVfUk9VTkRUUklQUEFCTEVfQ0hBUkFDVEVSUyA9IDB4MDdGRiAt
IDB4MDA4MCArIDE7Ci0KLSAgLy8gMTgsMzA0Ci0gIHN0YXRpYyBmaW5hbCBsb25nIEVYUEVDVEVE
X1RXT19CWVRFX1JPVU5EVFJJUFBBQkxFX0NPVU5UID0KLSAgICAgIC8vIEJvdGggYnl0ZXMgYXJl
IG9uZSBieXRlIGNoYXJhY3RlcnMKLSAgICAgIChsb25nKSBNYXRoLnBvdyhFWFBFQ1RFRF9PTkVf
QllURV9ST1VORFRSSVBQQUJMRV9DT1VOVCwgMikgKwotICAgICAgLy8gVGhlIHBvc3NpYmxlIG51
bWJlciBvZiB0d28gYnl0ZSBjaGFyYWN0ZXJzCi0gICAgICBUV09fQllURV9ST1VORFRSSVBQQUJM
RV9DSEFSQUNURVJTOwotCi0gIC8vIDIwNDgKLSAgc3RhdGljIGZpbmFsIGxvbmcgVEhSRUVfQllU
RV9TVVJST0dBVEVTID0gMiAqIDEwMjQ7Ci0KLSAgLy8gNjEsNDQwIFtjaGFycyAweDA4MDAgdG8g
MHhGRkZGLCBtaW51cyBzdXJyb2dhdGVzXQotICBzdGF0aWMgZmluYWwgbG9uZyBUSFJFRV9CWVRF
X1JPVU5EVFJJUFBBQkxFX0NIQVJBQ1RFUlMgPQotICAgICAgMHhGRkZGIC0gMHgwODAwICsgMSAt
IFRIUkVFX0JZVEVfU1VSUk9HQVRFUzsKLQotICAvLyAyLDY1MCwxMTIKLSAgc3RhdGljIGZpbmFs
IGxvbmcgRVhQRUNURURfVEhSRUVfQllURV9ST1VORFRSSVBQQUJMRV9DT1VOVCA9Ci0gICAgICAv
LyBBbGwgb25lIGJ5dGUgY2hhcmFjdGVycwotICAgICAgKGxvbmcpIE1hdGgucG93KEVYUEVDVEVE
X09ORV9CWVRFX1JPVU5EVFJJUFBBQkxFX0NPVU5ULCAzKSArCi0gICAgICAvLyBPbmUgdHdvIGJ5
dGUgY2hhcmFjdGVyIGFuZCBhIG9uZSBieXRlIGNoYXJhY3RlcgotICAgICAgMiAqIFRXT19CWVRF
X1JPVU5EVFJJUFBBQkxFX0NIQVJBQ1RFUlMgKiBPTkVfQllURV9ST1VORFRSSVBQQUJMRV9DSEFS
QUNURVJTICsKLSAgICAgIC8vIFRocmVlIGJ5dGUgY2hhcmFjdGVycwotICAgICAgVEhSRUVfQllU
RV9ST1VORFRSSVBQQUJMRV9DSEFSQUNURVJTOwotCi0gIC8vIDEsMDQ4LDU3NiBbY2hhcnMgMHgx
MDAwMEwgdG8gMHgxMEZGRkZdCi0gIHN0YXRpYyBmaW5hbCBsb25nIEZPVVJfQllURV9ST1VORFRS
SVBQQUJMRV9DSEFSQUNURVJTID0gMHgxMEZGRkYgLSAweDEwMDAwTCArIDE7Ci0KLSAgLy8gMjg5
LDU3MSw4MzkKLSAgc3RhdGljIGZpbmFsIGxvbmcgRVhQRUNURURfRk9VUl9CWVRFX1JPVU5EVFJJ
UFBBQkxFX0NPVU5UID0KLSAgICAgIC8vIEFsbCBvbmUgYnl0ZSBjaGFyYWN0ZXJzCi0gICAgICAo
bG9uZykgTWF0aC5wb3coRVhQRUNURURfT05FX0JZVEVfUk9VTkRUUklQUEFCTEVfQ09VTlQsIDQp
ICsKLSAgICAgIC8vIE9uZSBhbmQgdGhyZWUgYnl0ZSBjaGFyYWN0ZXJzCi0gICAgICAyICogVEhS
RUVfQllURV9ST1VORFRSSVBQQUJMRV9DSEFSQUNURVJTICogT05FX0JZVEVfUk9VTkRUUklQUEFC
TEVfQ0hBUkFDVEVSUyArCi0gICAgICAvLyBUd28gdHdvIGJ5dGUgY2hhcmFjdGVycwotICAgICAg
VFdPX0JZVEVfUk9VTkRUUklQUEFCTEVfQ0hBUkFDVEVSUyAqIFRXT19CWVRFX1JPVU5EVFJJUFBB
QkxFX0NIQVJBQ1RFUlMgKwotICAgICAgLy8gUGVybXV0YXRpb25zIG9mIG9uZSBhbmQgdHdvIGJ5
dGUgY2hhcmFjdGVycwotICAgICAgMyAqIFRXT19CWVRFX1JPVU5EVFJJUFBBQkxFX0NIQVJBQ1RF
UlMgKiBPTkVfQllURV9ST1VORFRSSVBQQUJMRV9DSEFSQUNURVJTCi0gICAgICAqIE9ORV9CWVRF
X1JPVU5EVFJJUFBBQkxFX0NIQVJBQ1RFUlMKLSAgICAgICsKLSAgICAgIC8vIEZvdXIgYnl0ZSBj
aGFyYWN0ZXJzCi0gICAgICBGT1VSX0JZVEVfUk9VTkRUUklQUEFCTEVfQ0hBUkFDVEVSUzsKLQot
ICBzdGF0aWMgZmluYWwgY2xhc3MgU2hhcmQgewotICAgIGZpbmFsIGxvbmcgaW5kZXg7Ci0gICAg
ZmluYWwgbG9uZyBzdGFydDsKLSAgICBmaW5hbCBsb25nIGxpbTsKLSAgICBmaW5hbCBsb25nIGV4
cGVjdGVkOwotCi0KLSAgICBwdWJsaWMgU2hhcmQobG9uZyBpbmRleCwgbG9uZyBzdGFydCwgbG9u
ZyBsaW0sIGxvbmcgZXhwZWN0ZWQpIHsKLSAgICAgIGFzc2VydFRydWUoc3RhcnQgPCBsaW0pOwot
ICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwotICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0OwotICAg
ICAgdGhpcy5saW0gPSBsaW07Ci0gICAgICB0aGlzLmV4cGVjdGVkID0gZXhwZWN0ZWQ7Ci0gICAg
fQotICB9Ci0KLSAgc3RhdGljIGZpbmFsIGxvbmdbXSBGT1VSX0JZVEVfU0hBUkRTX0VYUEVDVEVE
X1JPVU5UUklQUEFCTEVTID0KLSAgICAgIGdlbmVyYXRlRm91ckJ5dGVTaGFyZHNFeHBlY3RlZFJ1
bm5hYmxlcygpOwotCi0gIHByaXZhdGUgc3RhdGljIGxvbmdbXSBnZW5lcmF0ZUZvdXJCeXRlU2hh
cmRzRXhwZWN0ZWRSdW5uYWJsZXMoKSB7Ci0gICAgbG9uZ1tdIGV4cGVjdGVkID0gbmV3IGxvbmdb
MTI4XTsKLQotICAgIC8vIDAtNjMgYXJlIGFsbCA1MzAwMjI0Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPD0gNjM7IGkrKykgewotICAgICAgZXhwZWN0ZWRbaV0gPSA1MzAwMjI0OwotICAgIH0KLQot
ICAgIC8vIDk3LTExMSBhcmUgYWxsIDIzNDI5MTIKLSAgICBmb3IgKGludCBpID0gOTc7IGkgPD0g
MTExOyBpKyspIHsKLSAgICAgIGV4cGVjdGVkW2ldID0gMjM0MjkxMjsKLSAgICB9Ci0KLSAgICAv
LyAxMTMtMTE3IGFyZSBhbGwgMTA0ODU3NgotICAgIGZvciAoaW50IGkgPSAxMTM7IGkgPD0gMTE3
OyBpKyspIHsKLSAgICAgIGV4cGVjdGVkW2ldID0gMTA0ODU3NjsKLSAgICB9Ci0KLSAgICAvLyBP
bmUgb2ZmcwotICAgIGV4cGVjdGVkWzExMl0gPSA3ODY0MzI7Ci0gICAgZXhwZWN0ZWRbMTE4XSA9
IDc4NjQzMjsKLSAgICBleHBlY3RlZFsxMTldID0gMTA0ODU3NjsKLSAgICBleHBlY3RlZFsxMjBd
ID0gNDU4NzUyOwotICAgIGV4cGVjdGVkWzEyMV0gPSA1MjQyODg7Ci0gICAgZXhwZWN0ZWRbMTIy
XSA9IDY1NTM2OwotCi0gICAgLy8gQW55dGhpbmcgbm90IGFzc2lnbmVkIHdhcyB0aGUgZGVmYXVs
dCAwLgotICAgIHJldHVybiBleHBlY3RlZDsKLSAgfQotCi0gIHN0YXRpYyBmaW5hbCBMaXN0PFNo
YXJkPiBGT1VSX0JZVEVfU0hBUkRTID0KLSAgICAgIGdlbmVyYXRlRm91ckJ5dGVTaGFyZHMoMTI4
LCBGT1VSX0JZVEVfU0hBUkRTX0VYUEVDVEVEX1JPVU5UUklQUEFCTEVTKTsKLQotCi0gIHByaXZh
dGUgc3RhdGljIExpc3Q8U2hhcmQ+IGdlbmVyYXRlRm91ckJ5dGVTaGFyZHMoaW50IG51bVNoYXJk
cywgbG9uZ1tdIGV4cGVjdGVkKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG51bVNoYXJkcywgZXhwZWN0
ZWQubGVuZ3RoKTsKLSAgICBMaXN0PFNoYXJkPiBzaGFyZHMgPSBuZXcgQXJyYXlMaXN0PFNoYXJk
PihudW1TaGFyZHMpOwotICAgIGxvbmcgTElNID0gMUwgPDwgMzI7Ci0gICAgbG9uZyBpbmNyZW1l
bnQgPSBMSU0gLyBudW1TaGFyZHM7Ci0gICAgYXNzZXJ0VHJ1ZShMSU0gJSBudW1TaGFyZHMgPT0g
MCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TaGFyZHM7IGkrKykgewotICAgICAgc2hh
cmRzLmFkZChuZXcgU2hhcmQoaSwgaW5jcmVtZW50ICogaSwgaW5jcmVtZW50ICogKGkgKyAxKSwg
ZXhwZWN0ZWRbaV0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNoYXJkczsKLSAgfQotCi0gIC8qKgot
ICAgKiBIZWxwZXIgdG8gcnVuIHRoZSBsb29wIHRvIHRlc3QgYWxsIHRoZSBwZXJtdXRhdGlvbnMg
Zm9yIHRoZSBudW1iZXIgb2YgYnl0ZXMKLSAgICogc3BlY2lmaWVkLgotICAgKgotICAgKiBAcGFy
YW0gZmFjdG9yeSB0aGUgZmFjdG9yeSBmb3Ige0BsaW5rIEJ5dGVTdHJpbmd9IGluc3RhbmNlcy4K
LSAgICogQHBhcmFtIG51bUJ5dGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ5dGUgYXJy
YXkKLSAgICogQHBhcmFtIGV4cGVjdGVkQ291bnQgdGhlIGV4cGVjdGVkIG51bWJlciBvZiByb3Vu
ZHRyaXBwYWJsZSBwZXJtdXRhdGlvbnMKLSAgICovCi0gIHN0YXRpYyB2b2lkIHRlc3RCeXRlcyhC
eXRlU3RyaW5nRmFjdG9yeSBmYWN0b3J5LCBpbnQgbnVtQnl0ZXMsIGxvbmcgZXhwZWN0ZWRDb3Vu
dCkgewotICAgIHRlc3RCeXRlcyhmYWN0b3J5LCBudW1CeXRlcywgZXhwZWN0ZWRDb3VudCwgMCwg
LTEpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciB0byBydW4gdGhlIGxvb3AgdG8gdGVzdCBh
bGwgdGhlIHBlcm11dGF0aW9ucyBmb3IgdGhlIG51bWJlciBvZiBieXRlcwotICAgKiBzcGVjaWZp
ZWQuIFRoaXMgb3ZlcmxvYWQgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdG8gZ2V0IHRoZSBsb29w
IHRvIHN0YXJ0Ci0gICAqIGF0IGEgY2VydGFpbiBjaGFyYWN0ZXIuCi0gICAqCi0gICAqIEBwYXJh
bSBmYWN0b3J5IHRoZSBmYWN0b3J5IGZvciB7QGxpbmsgQnl0ZVN0cmluZ30gaW5zdGFuY2VzLgot
ICAgKiBAcGFyYW0gbnVtQnl0ZXMgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnl0ZSBhcnJh
eQotICAgKiBAcGFyYW0gZXhwZWN0ZWRDb3VudCB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHJvdW5k
dHJpcHBhYmxlIHBlcm11dGF0aW9ucwotICAgKiBAcGFyYW0gc3RhcnQgdGhlIHN0YXJ0aW5nIGJ5
dGVzIGVuY29kZWQgYXMgYSBsb25nIGFzIGJpZy1lbmRpYW4KLSAgICogQHBhcmFtIGxpbSB0aGUg
bGltaXQgb2YgYnl0ZXMgdG8gcHJvY2VzcyBlbmNvZGVkIGFzIGEgbG9uZyBhcyBiaWctZW5kaWFu
LAotICAgKiAgICAgb3IgLTEgdG8gbWVhbiB0aGUgbWF4IGxpbWl0IGZvciBudW1CeXRlcwotICAg
Ki8KLSAgc3RhdGljIHZvaWQgdGVzdEJ5dGVzKAotICAgICAgQnl0ZVN0cmluZ0ZhY3RvcnkgZmFj
dG9yeSwgaW50IG51bUJ5dGVzLCBsb25nIGV4cGVjdGVkQ291bnQsIGxvbmcgc3RhcnQsIGxvbmcg
bGltKSB7Ci0gICAgUmFuZG9tIHJuZCA9IG5ldyBSYW5kb20oKTsKLSAgICBieXRlW10gYnl0ZXMg
PSBuZXcgYnl0ZVtudW1CeXRlc107Ci0KLSAgICBpZiAobGltID09IC0xKSB7Ci0gICAgICBsaW0g
PSAxTCA8PCAobnVtQnl0ZXMgKiA4KTsKLSAgICB9Ci0gICAgbG9uZyBjb3VudCA9IDA7Ci0gICAg
bG9uZyBjb3VudFJvdW5kVHJpcHBlZCA9IDA7Ci0gICAgZm9yIChsb25nIGJ5dGVDaGFyID0gc3Rh
cnQ7IGJ5dGVDaGFyIDwgbGltOyBieXRlQ2hhcisrKSB7Ci0gICAgICBsb25nIHRtcEJ5dGVDaGFy
ID0gYnl0ZUNoYXI7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUJ5dGVzOyBpKyspIHsK
LSAgICAgICAgYnl0ZXNbYnl0ZXMubGVuZ3RoIC0gaSAtIDFdID0gKGJ5dGUpIHRtcEJ5dGVDaGFy
OwotICAgICAgICB0bXBCeXRlQ2hhciA9IHRtcEJ5dGVDaGFyID4+IDg7Ci0gICAgICB9Ci0gICAg
ICBCeXRlU3RyaW5nIGJzID0gZmFjdG9yeS5uZXdCeXRlU3RyaW5nKGJ5dGVzKTsKLSAgICAgIGJv
b2xlYW4gaXNSb3VuZFRyaXBwYWJsZSA9IGJzLmlzVmFsaWRVdGY4KCk7Ci0gICAgICBTdHJpbmcg
cyA9IG5ldyBTdHJpbmcoYnl0ZXMsIEludGVybmFsLlVURl84KTsKLSAgICAgIGJ5dGVbXSBieXRl
c1JlZW5jb2RlZCA9IHMuZ2V0Qnl0ZXMoSW50ZXJuYWwuVVRGXzgpOwotICAgICAgYm9vbGVhbiBi
eXRlc0VxdWFsID0gQXJyYXlzLmVxdWFscyhieXRlcywgYnl0ZXNSZWVuY29kZWQpOwotCi0gICAg
ICBpZiAoYnl0ZXNFcXVhbCAhPSBpc1JvdW5kVHJpcHBhYmxlKSB7Ci0gICAgICAgIG91dHB1dEZh
aWx1cmUoYnl0ZUNoYXIsIGJ5dGVzLCBieXRlc1JlZW5jb2RlZCk7Ci0gICAgICB9Ci0KLSAgICAg
IC8vIENoZWNrIGFncmVlbWVudCB3aXRoIHN0YXRpYyBVdGY4IG1ldGhvZHMuCi0gICAgICBhc3Nl
cnRFcXVhbHMoaXNSb3VuZFRyaXBwYWJsZSwgVXRmOC5pc1ZhbGlkVXRmOChieXRlcykpOwotICAg
ICAgYXNzZXJ0RXF1YWxzKGlzUm91bmRUcmlwcGFibGUsIFV0ZjguaXNWYWxpZFV0ZjgoYnl0ZXMs
IDAsIG51bUJ5dGVzKSk7Ci0KLSAgICAgIC8vIFRlc3QgcGFydGlhbCBzZXF1ZW5jZXMuCi0gICAg
ICAvLyBQYXJ0aXRpb24gbnVtQnl0ZXMgaW50byB0aHJlZSBzZWdtZW50cyAobm90IG5lY2Vzc2Fy
aWx5IG5vbi1lbXB0eSkuCi0gICAgICBpbnQgaSA9IHJuZC5uZXh0SW50KG51bUJ5dGVzKTsKLSAg
ICAgIGludCBqID0gcm5kLm5leHRJbnQobnVtQnl0ZXMpOwotICAgICAgaWYgKGogPCBpKSB7Ci0g
ICAgICAgIGludCB0bXAgPSBpOwotICAgICAgICBpID0gajsKLSAgICAgICAgaiA9IHRtcDsKLSAg
ICAgIH0KLSAgICAgIGludCBzdGF0ZTEgPSBVdGY4LnBhcnRpYWxJc1ZhbGlkVXRmOChVdGY4LkNP
TVBMRVRFLCBieXRlcywgMCwgaSk7Ci0gICAgICBpbnQgc3RhdGUyID0gVXRmOC5wYXJ0aWFsSXNW
YWxpZFV0Zjgoc3RhdGUxLCBieXRlcywgaSwgaik7Ci0gICAgICBpbnQgc3RhdGUzID0gVXRmOC5w
YXJ0aWFsSXNWYWxpZFV0Zjgoc3RhdGUyLCBieXRlcywgaiwgbnVtQnl0ZXMpOwotICAgICAgaWYg
KGlzUm91bmRUcmlwcGFibGUgIT0gKHN0YXRlMyA9PSBVdGY4LkNPTVBMRVRFKSkgewotICAgICAg
ICBTeXN0ZW0ub3V0LnByaW50Zigic3RhdGU9JTA0eCAlMDR4ICUwNHggaT0lZCBqPSVkJW4iLCBz
dGF0ZTEsIHN0YXRlMiwgc3RhdGUzLCBpLCBqKTsKLSAgICAgICAgb3V0cHV0RmFpbHVyZShieXRl
Q2hhciwgYnl0ZXMsIGJ5dGVzUmVlbmNvZGVkKTsKLSAgICAgIH0KLSAgICAgIGFzc2VydEVxdWFs
cyhpc1JvdW5kVHJpcHBhYmxlLCAoc3RhdGUzID09IFV0ZjguQ09NUExFVEUpKTsKLQotICAgICAg
Ly8gVGVzdCByb3BlcyBidWlsdCBvdXQgb2Ygc21hbGwgcGFydGlhbCBzZXF1ZW5jZXMKLSAgICAg
IEJ5dGVTdHJpbmcgcm9wZSA9IFJvcGVCeXRlU3RyaW5nLm5ld0luc3RhbmNlRm9yVGVzdCgKLSAg
ICAgICAgICBicy5zdWJzdHJpbmcoMCwgaSksCi0gICAgICAgICAgUm9wZUJ5dGVTdHJpbmcubmV3
SW5zdGFuY2VGb3JUZXN0KGJzLnN1YnN0cmluZyhpLCBqKSwgYnMuc3Vic3RyaW5nKGosIG51bUJ5
dGVzKSkpOwotICAgICAgYXNzZXJ0U2FtZShSb3BlQnl0ZVN0cmluZy5jbGFzcywgcm9wZS5nZXRD
bGFzcygpKTsKLQotICAgICAgQnl0ZVN0cmluZ1tdIGJ5dGVTdHJpbmdzID0ge2JzLCBicy5zdWJz
dHJpbmcoMCwgbnVtQnl0ZXMpLCByb3BlfTsKLSAgICAgIGZvciAoQnl0ZVN0cmluZyB4IDogYnl0
ZVN0cmluZ3MpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGlzUm91bmRUcmlwcGFibGUsIHguaXNW
YWxpZFV0ZjgoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhzdGF0ZTMsIHgucGFydGlhbElzVmFs
aWRVdGY4KFV0ZjguQ09NUExFVEUsIDAsIG51bUJ5dGVzKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1
YWxzKHN0YXRlMSwgeC5wYXJ0aWFsSXNWYWxpZFV0ZjgoVXRmOC5DT01QTEVURSwgMCwgaSkpOwot
ICAgICAgICBhc3NlcnRFcXVhbHMoc3RhdGUxLCB4LnN1YnN0cmluZygwLCBpKS5wYXJ0aWFsSXNW
YWxpZFV0ZjgoVXRmOC5DT01QTEVURSwgMCwgaSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoc3Rh
dGUyLCB4LnBhcnRpYWxJc1ZhbGlkVXRmOChzdGF0ZTEsIGksIGogLSBpKSk7Ci0gICAgICAgIGFz
c2VydEVxdWFscyhzdGF0ZTIsIHguc3Vic3RyaW5nKGksIGopLnBhcnRpYWxJc1ZhbGlkVXRmOChz
dGF0ZTEsIDAsIGogLSBpKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhzdGF0ZTMsIHgucGFydGlh
bElzVmFsaWRVdGY4KHN0YXRlMiwgaiwgbnVtQnl0ZXMgLSBqKSk7Ci0gICAgICAgIGFzc2VydEVx
dWFscyhzdGF0ZTMsIHguc3Vic3RyaW5nKGosIG51bUJ5dGVzKS5wYXJ0aWFsSXNWYWxpZFV0Zjgo
c3RhdGUyLCAwLCBudW1CeXRlcyAtIGopKTsKLSAgICAgIH0KLQotICAgICAgLy8gQnl0ZVN0cmlu
ZyByZWR1cGxpY2F0aW9uIHNob3VsZCBub3QgYWZmZWN0IGl0cyBVVEYtOCB2YWxpZGl0eS4KLSAg
ICAgIEJ5dGVTdHJpbmcgcm9wZUFEb3BlID0gUm9wZUJ5dGVTdHJpbmcubmV3SW5zdGFuY2VGb3JU
ZXN0KGJzLCBicy5zdWJzdHJpbmcoMCwgbnVtQnl0ZXMpKTsKLSAgICAgIGFzc2VydEVxdWFscyhp
c1JvdW5kVHJpcHBhYmxlLCByb3BlQURvcGUuaXNWYWxpZFV0ZjgoKSk7Ci0KLSAgICAgIGlmIChp
c1JvdW5kVHJpcHBhYmxlKSB7Ci0gICAgICAgIGNvdW50Um91bmRUcmlwcGVkKys7Ci0gICAgICB9
Ci0gICAgICBjb3VudCsrOwotICAgICAgaWYgKGJ5dGVDaGFyICE9IDAgJiYgYnl0ZUNoYXIgJSAx
MDAwMDAwTCA9PSAwKSB7Ci0gICAgICAgIGxvZ2dlci5pbmZvKCJQcm9jZXNzZWQgIiArIChieXRl
Q2hhciAvIDEwMDAwMDBMKSArICIgbWlsbGlvbiBjaGFyYWN0ZXJzIik7Ci0gICAgICB9Ci0gICAg
fQotICAgIGxvZ2dlci5pbmZvKCJSb3VuZCB0cmlwcGVkICIgKyBjb3VudFJvdW5kVHJpcHBlZCAr
ICIgb2YgIiArIGNvdW50KTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRDb3VudCwgY291bnRS
b3VuZFRyaXBwZWQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZhcmlhdGlvbiBvZiB7QGxpbmsgI3Rl
c3RCeXRlc30gdGhhdCBkb2VzIGxlc3MgYWxsb2NhdGlvbiB1c2luZyB0aGUKLSAgICogbG93LWxl
dmVsIGVuY29kZXJzL2RlY29kZXJzIGRpcmVjdGx5LiBDaGVja2VkIGluIGJlY2F1c2UgaXQncyB1
c2VmdWwgZm9yCi0gICAqIGRlYnVnZ2luZyB3aGVuIHRyeWluZyB0byBwcm9jZXNzIGJ5dGVzIGZh
c3RlciwgYnV0IHNpbmNlIGl0IGRvZXNuJ3QgdXNlIHRoZQotICAgKiBhY3R1YWwgU3RyaW5nIGNs
YXNzLCBpdCdzIHBvc3NpYmxlIGZvciBpbmNvbXBhdGliaWxpdGllcyB0byBkZXZlbG9wCi0gICAq
IChhbHRob3VnaCB1bmxpa2VseSkuCi0gICAqCi0gICAqIEBwYXJhbSBmYWN0b3J5IHRoZSBmYWN0
b3J5IGZvciB7QGxpbmsgQnl0ZVN0cmluZ30gaW5zdGFuY2VzLgotICAgKiBAcGFyYW0gbnVtQnl0
ZXMgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnl0ZSBhcnJheQotICAgKiBAcGFyYW0gZXhw
ZWN0ZWRDb3VudCB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHJvdW5kdHJpcHBhYmxlIHBlcm11dGF0
aW9ucwotICAgKiBAcGFyYW0gc3RhcnQgdGhlIHN0YXJ0aW5nIGJ5dGVzIGVuY29kZWQgYXMgYSBs
b25nIGFzIGJpZy1lbmRpYW4KLSAgICogQHBhcmFtIGxpbSB0aGUgbGltaXQgb2YgYnl0ZXMgdG8g
cHJvY2VzcyBlbmNvZGVkIGFzIGEgbG9uZyBhcyBiaWctZW5kaWFuLAotICAgKiAgICAgb3IgLTEg
dG8gbWVhbiB0aGUgbWF4IGxpbWl0IGZvciBudW1CeXRlcwotICAgKi8KLSAgc3RhdGljIHZvaWQg
dGVzdEJ5dGVzVXNpbmdCeXRlQnVmZmVycygKLSAgICAgIEJ5dGVTdHJpbmdGYWN0b3J5IGZhY3Rv
cnksIGludCBudW1CeXRlcywgbG9uZyBleHBlY3RlZENvdW50LCBsb25nIHN0YXJ0LCBsb25nIGxp
bSkgewotICAgIENoYXJzZXREZWNvZGVyIGRlY29kZXIgPQotICAgICAgICBJbnRlcm5hbC5VVEZf
OC5uZXdEZWNvZGVyKCkKLSAgICAgICAgICAgIC5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9y
QWN0aW9uLlJFUExBQ0UpCi0gICAgICAgICAgICAub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGlu
Z0Vycm9yQWN0aW9uLlJFUExBQ0UpOwotICAgIENoYXJzZXRFbmNvZGVyIGVuY29kZXIgPQotICAg
ICAgICBJbnRlcm5hbC5VVEZfOC5uZXdFbmNvZGVyKCkKLSAgICAgICAgICAgIC5vbk1hbGZvcm1l
ZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUExBQ0UpCi0gICAgICAgICAgICAub25Vbm1hcHBh
YmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUExBQ0UpOwotICAgIGJ5dGVbXSBieXRl
cyA9IG5ldyBieXRlW251bUJ5dGVzXTsKLSAgICBpbnQgbWF4Q2hhcnMgPSAoaW50KSAoZGVjb2Rl
ci5tYXhDaGFyc1BlckJ5dGUoKSAqIG51bUJ5dGVzKSArIDE7Ci0gICAgY2hhcltdIGNoYXJzRGVj
b2RlZCA9IG5ldyBjaGFyWyhpbnQpIChkZWNvZGVyLm1heENoYXJzUGVyQnl0ZSgpICogbnVtQnl0
ZXMpICsgMV07Ci0gICAgaW50IG1heEJ5dGVzID0gKGludCkgKGVuY29kZXIubWF4Qnl0ZXNQZXJD
aGFyKCkgKiBtYXhDaGFycykgKyAxOwotICAgIGJ5dGVbXSBieXRlc1JlZW5jb2RlZCA9IG5ldyBi
eXRlW21heEJ5dGVzXTsKLQotICAgIEJ5dGVCdWZmZXIgYmIgPSBCeXRlQnVmZmVyLndyYXAoYnl0
ZXMpOwotICAgIENoYXJCdWZmZXIgY2IgPSBDaGFyQnVmZmVyLndyYXAoY2hhcnNEZWNvZGVkKTsK
LSAgICBCeXRlQnVmZmVyIGJiUmVlbmNvZGVkID0gQnl0ZUJ1ZmZlci53cmFwKGJ5dGVzUmVlbmNv
ZGVkKTsKLSAgICBpZiAobGltID09IC0xKSB7Ci0gICAgICBsaW0gPSAxTCA8PCAobnVtQnl0ZXMg
KiA4KTsKLSAgICB9Ci0gICAgbG9uZyBjb3VudCA9IDA7Ci0gICAgbG9uZyBjb3VudFJvdW5kVHJp
cHBlZCA9IDA7Ci0gICAgZm9yIChsb25nIGJ5dGVDaGFyID0gc3RhcnQ7IGJ5dGVDaGFyIDwgbGlt
OyBieXRlQ2hhcisrKSB7Ci0gICAgICBiYi5yZXdpbmQoKTsKLSAgICAgIGJiLmxpbWl0KGJ5dGVz
Lmxlbmd0aCk7Ci0gICAgICBjYi5yZXdpbmQoKTsKLSAgICAgIGNiLmxpbWl0KGNoYXJzRGVjb2Rl
ZC5sZW5ndGgpOwotICAgICAgYmJSZWVuY29kZWQucmV3aW5kKCk7Ci0gICAgICBiYlJlZW5jb2Rl
ZC5saW1pdChieXRlc1JlZW5jb2RlZC5sZW5ndGgpOwotICAgICAgZW5jb2Rlci5yZXNldCgpOwot
ICAgICAgZGVjb2Rlci5yZXNldCgpOwotICAgICAgbG9uZyB0bXBCeXRlQ2hhciA9IGJ5dGVDaGFy
OwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewotICAgICAg
ICBieXRlc1tieXRlcy5sZW5ndGggLSBpIC0gMV0gPSAoYnl0ZSkgdG1wQnl0ZUNoYXI7Ci0gICAg
ICAgIHRtcEJ5dGVDaGFyID0gdG1wQnl0ZUNoYXIgPj4gODsKLSAgICAgIH0KLSAgICAgIGJvb2xl
YW4gaXNSb3VuZFRyaXBwYWJsZSA9IGZhY3RvcnkubmV3Qnl0ZVN0cmluZyhieXRlcykuaXNWYWxp
ZFV0ZjgoKTsKLSAgICAgIENvZGVyUmVzdWx0IHJlc3VsdCA9IGRlY29kZXIuZGVjb2RlKGJiLCBj
YiwgdHJ1ZSk7Ci0gICAgICBhc3NlcnRGYWxzZShyZXN1bHQuaXNFcnJvcigpKTsKLSAgICAgIHJl
c3VsdCA9IGRlY29kZXIuZmx1c2goY2IpOwotICAgICAgYXNzZXJ0RmFsc2UocmVzdWx0LmlzRXJy
b3IoKSk7Ci0KLSAgICAgIGludCBjaGFyTGVuID0gY2IucG9zaXRpb24oKTsKLSAgICAgIGNiLnJl
d2luZCgpOwotICAgICAgY2IubGltaXQoY2hhckxlbik7Ci0gICAgICByZXN1bHQgPSBlbmNvZGVy
LmVuY29kZShjYiwgYmJSZWVuY29kZWQsIHRydWUpOwotICAgICAgYXNzZXJ0RmFsc2UocmVzdWx0
LmlzRXJyb3IoKSk7Ci0gICAgICByZXN1bHQgPSBlbmNvZGVyLmZsdXNoKGJiUmVlbmNvZGVkKTsK
LSAgICAgIGFzc2VydEZhbHNlKHJlc3VsdC5pc0Vycm9yKCkpOwotCi0gICAgICBib29sZWFuIGJ5
dGVzRXF1YWwgPSB0cnVlOwotICAgICAgaW50IGJ5dGVzTGVuID0gYmJSZWVuY29kZWQucG9zaXRp
b24oKTsKLSAgICAgIGlmIChieXRlc0xlbiAhPSBudW1CeXRlcykgewotICAgICAgICBieXRlc0Vx
dWFsID0gZmFsc2U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bUJ5dGVzOyBpKyspIHsKLSAgICAgICAgICBpZiAoYnl0ZXNbaV0gIT0gYnl0ZXNSZWVuY29k
ZWRbaV0pIHsKLSAgICAgICAgICAgIGJ5dGVzRXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGJ5dGVzRXF1
YWwgIT0gaXNSb3VuZFRyaXBwYWJsZSkgewotICAgICAgICBvdXRwdXRGYWlsdXJlKGJ5dGVDaGFy
LCBieXRlcywgYnl0ZXNSZWVuY29kZWQsIGJ5dGVzTGVuKTsKLSAgICAgIH0KLQotICAgICAgY291
bnQrKzsKLSAgICAgIGlmIChpc1JvdW5kVHJpcHBhYmxlKSB7Ci0gICAgICAgIGNvdW50Um91bmRU
cmlwcGVkKys7Ci0gICAgICB9Ci0gICAgICBpZiAoYnl0ZUNoYXIgIT0gMCAmJiBieXRlQ2hhciAl
IDEwMDAwMDAgPT0gMCkgewotICAgICAgICBsb2dnZXIuaW5mbygiUHJvY2Vzc2VkICIgKyAoYnl0
ZUNoYXIgLyAxMDAwMDAwKSArICIgbWlsbGlvbiBjaGFyYWN0ZXJzIik7Ci0gICAgICB9Ci0gICAg
fQotICAgIGxvZ2dlci5pbmZvKCJSb3VuZCB0cmlwcGVkICIgKyBjb3VudFJvdW5kVHJpcHBlZCAr
ICIgb2YgIiArIGNvdW50KTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRDb3VudCwgY291bnRS
b3VuZFRyaXBwZWQpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvdXRwdXRGYWlsdXJl
KGxvbmcgYnl0ZUNoYXIsIGJ5dGVbXSBieXRlcywgYnl0ZVtdIGFmdGVyKSB7Ci0gICAgb3V0cHV0
RmFpbHVyZShieXRlQ2hhciwgYnl0ZXMsIGFmdGVyLCBhZnRlci5sZW5ndGgpOwotICB9Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgdm9pZCBvdXRwdXRGYWlsdXJlKGxvbmcgYnl0ZUNoYXIsIGJ5dGVbXSBi
eXRlcywgYnl0ZVtdIGFmdGVyLCBpbnQgbGVuKSB7Ci0gICAgZmFpbCgiRmFpbHVyZTogKCIgKyBM
b25nLnRvSGV4U3RyaW5nKGJ5dGVDaGFyKSArICIpICIgKyB0b0hleFN0cmluZyhieXRlcykgKyAi
ID0+ICIKLSAgICAgICAgKyB0b0hleFN0cmluZyhhZnRlciwgbGVuKSk7Ci0gIH0KLQotICBwcml2
YXRlIHN0YXRpYyBTdHJpbmcgdG9IZXhTdHJpbmcoYnl0ZVtdIGIpIHsKLSAgICByZXR1cm4gdG9I
ZXhTdHJpbmcoYiwgYi5sZW5ndGgpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRv
SGV4U3RyaW5nKGJ5dGVbXSBiLCBpbnQgbGVuKSB7Ci0gICAgU3RyaW5nQnVpbGRlciBzID0gbmV3
IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBzLmFwcGVuZCgiXCIiKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICBpZiAoaSA+IDApIHsKLSAgICAgICAgcy5hcHBlbmQo
IiAiKTsKLSAgICAgIH0KLSAgICAgIHMuYXBwZW5kKFN0cmluZy5mb3JtYXQoIiUwMngiLCBiW2ld
ICYgMHhGRikpOwotICAgIH0KLSAgICBzLmFwcGVuZCgiXCIiKTsKLSAgICByZXR1cm4gcy50b1N0
cmluZygpOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvTGF6eUZpZWxkTGl0ZVRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5RmllbGRMaXRlVGVzdC5qYXZhCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDFkZTZkYzgxMGVjNWY3YTkwYjYyNmY5ODZmOTk1Nzg5
MjkyNWMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5RmllbGRMaXRlVGVz
dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9y
dCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5vcHRpb25hbEludDMyRXh0
ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLm9w
dGlvbmFsSW50NjRFeHRlbnNpb247Ci0KLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVz
dFByb3RvLlRlc3RBbGxFeHRlbnNpb25zOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0
ZXN0UHJvdG8uVGVzdEFsbFR5cGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNl
OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKiBVbml0IHRlc3QgZm9y
IHtAbGluayBMYXp5RmllbGRMaXRlfS4KLSAqCi0gKiBAYXV0aG9yIHhpYW5nbEBnb29nbGUuY29t
IChYaWFuZyBMaSkKLSAqLwotcHVibGljIGNsYXNzIExhenlGaWVsZExpdGVUZXN0IGV4dGVuZHMg
VGVzdENhc2UgewotCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRWYWx1ZSgpIHsKLSAgICBNZXNzYWdl
TGl0ZSBtZXNzYWdlID0gVGVzdFV0aWwuZ2V0QWxsU2V0KCk7Ci0gICAgTGF6eUZpZWxkTGl0ZSBs
YXp5RmllbGQgPSBjcmVhdGVMYXp5RmllbGRMaXRlRnJvbU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKG1lc3NhZ2UsIGxhenlGaWVsZC5nZXRWYWx1ZShUZXN0QWxsVHlwZXMuZ2V0
RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBjaGFuZ2VWYWx1ZShsYXp5RmllbGQpOwotICAgIGFz
c2VydE5vdEVxdWFsKG1lc3NhZ2UsIGxhenlGaWVsZC5nZXRWYWx1ZShUZXN0QWxsVHlwZXMuZ2V0
RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRWYWx1ZUV4
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZSA9IFRl
c3RVdGlsLmdldEFsbEV4dGVuc2lvbnNTZXQoKTsKLSAgICBMYXp5RmllbGRMaXRlIGxhenlGaWVs
ZCA9IGNyZWF0ZUxhenlGaWVsZExpdGVGcm9tTWVzc2FnZShtZXNzYWdlKTsKLSAgICBhc3NlcnRF
cXVhbHMobWVzc2FnZSwgbGF6eUZpZWxkLmdldFZhbHVlKFRlc3RBbGxFeHRlbnNpb25zLmdldERl
ZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgY2hhbmdlVmFsdWUobGF6eUZpZWxkKTsKLSAgICBhc3Nl
cnROb3RFcXVhbChtZXNzYWdlLCBsYXp5RmllbGQuZ2V0VmFsdWUoVGVzdEFsbEV4dGVuc2lvbnMu
Z2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRWYWx1
ZSgpIHsKLSAgICBNZXNzYWdlTGl0ZSBtZXNzYWdlID0gVGVzdFV0aWwuZ2V0QWxsU2V0KCk7Ci0g
ICAgTGF6eUZpZWxkTGl0ZSBsYXp5RmllbGQgPSBjcmVhdGVMYXp5RmllbGRMaXRlRnJvbU1lc3Nh
Z2UobWVzc2FnZSk7Ci0gICAgY2hhbmdlVmFsdWUobGF6eUZpZWxkKTsKLSAgICBhc3NlcnROb3RF
cXVhbChtZXNzYWdlLCBsYXp5RmllbGQuZ2V0VmFsdWUoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJ
bnN0YW5jZSgpKSk7Ci0gICAgbWVzc2FnZSA9IGxhenlGaWVsZC5nZXRWYWx1ZShUZXN0QWxsVHlw
ZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICAgIGNoYW5nZVZhbHVlKGxhenlGaWVsZCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2UsIGxhenlGaWVsZC5nZXRWYWx1ZShUZXN0QWxsVHlwZXMu
Z2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRWYWx1
ZUV4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZSA9
IFRlc3RVdGlsLmdldEFsbEV4dGVuc2lvbnNTZXQoKTsKLSAgICBMYXp5RmllbGRMaXRlIGxhenlG
aWVsZCA9IGNyZWF0ZUxhenlGaWVsZExpdGVGcm9tTWVzc2FnZShtZXNzYWdlKTsKLSAgICBjaGFu
Z2VWYWx1ZShsYXp5RmllbGQpOwotICAgIGFzc2VydE5vdEVxdWFsKG1lc3NhZ2UsIGxhenlGaWVs
ZC5nZXRWYWx1ZShUZXN0QWxsRXh0ZW5zaW9ucy5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAg
IE1lc3NhZ2VMaXRlIHZhbHVlID0gbGF6eUZpZWxkLmdldFZhbHVlKFRlc3RBbGxFeHRlbnNpb25z
LmdldERlZmF1bHRJbnN0YW5jZSgpKTsKLSAgICBjaGFuZ2VWYWx1ZShsYXp5RmllbGQpOwotICAg
IGFzc2VydEVxdWFscyh2YWx1ZSwgbGF6eUZpZWxkLmdldFZhbHVlKFRlc3RBbGxFeHRlbnNpb25z
LmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0R2V0U2Vy
aWFsaXplZFNpemUoKSB7Ci0gICAgTWVzc2FnZUxpdGUgbWVzc2FnZSA9IFRlc3RVdGlsLmdldEFs
bFNldCgpOwotICAgIExhenlGaWVsZExpdGUgbGF6eUZpZWxkID0gY3JlYXRlTGF6eUZpZWxkTGl0
ZUZyb21NZXNzYWdlKG1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmdldFNlcmlh
bGl6ZWRTaXplKCksIGxhenlGaWVsZC5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBjaGFuZ2VW
YWx1ZShsYXp5RmllbGQpOwotICAgIGFzc2VydE5vdEVxdWFsKG1lc3NhZ2UuZ2V0U2VyaWFsaXpl
ZFNpemUoKSwgbGF6eUZpZWxkLmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgdGVzdEdldFNlcmlhbGl6ZWRTaXplRXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBU
ZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlID0gVGVzdFV0aWwuZ2V0QWxsRXh0ZW5zaW9uc1NldCgp
OwotICAgIExhenlGaWVsZExpdGUgbGF6eUZpZWxkID0gY3JlYXRlTGF6eUZpZWxkTGl0ZUZyb21N
ZXNzYWdlKG1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmdldFNlcmlhbGl6ZWRT
aXplKCksIGxhenlGaWVsZC5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBjaGFuZ2VWYWx1ZShs
YXp5RmllbGQpOwotICAgIGFzc2VydE5vdEVxdWFsKG1lc3NhZ2UuZ2V0U2VyaWFsaXplZFNpemUo
KSwgbGF6eUZpZWxkLmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdEdldEJ5dGVTdHJpbmcoKSB7Ci0gICAgTWVzc2FnZUxpdGUgbWVzc2FnZSA9IFRlc3RVdGls
LmdldEFsbFNldCgpOwotICAgIExhenlGaWVsZExpdGUgbGF6eUZpZWxkID0gY3JlYXRlTGF6eUZp
ZWxkTGl0ZUZyb21NZXNzYWdlKG1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLnRv
Qnl0ZVN0cmluZygpLCBsYXp5RmllbGQudG9CeXRlU3RyaW5nKCkpOwotICAgIGNoYW5nZVZhbHVl
KGxhenlGaWVsZCk7Ci0gICAgYXNzZXJ0Tm90RXF1YWwobWVzc2FnZS50b0J5dGVTdHJpbmcoKSwg
bGF6eUZpZWxkLnRvQnl0ZVN0cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRC
eXRlU3RyaW5nRXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucyBt
ZXNzYWdlID0gVGVzdFV0aWwuZ2V0QWxsRXh0ZW5zaW9uc1NldCgpOwotICAgIExhenlGaWVsZExp
dGUgbGF6eUZpZWxkID0gY3JlYXRlTGF6eUZpZWxkTGl0ZUZyb21NZXNzYWdlKG1lc3NhZ2UpOwot
ICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLnRvQnl0ZVN0cmluZygpLCBsYXp5RmllbGQudG9CeXRl
U3RyaW5nKCkpOwotICAgIGNoYW5nZVZhbHVlKGxhenlGaWVsZCk7Ci0gICAgYXNzZXJ0Tm90RXF1
YWwobWVzc2FnZS50b0J5dGVTdHJpbmcoKSwgbGF6eUZpZWxkLnRvQnl0ZVN0cmluZygpKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZUV4dGVuc2lvbnMoKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlID0gVGVzdFV0aWwuZ2V0QWxsRXh0ZW5z
aW9uc1NldCgpOwotICAgIExhenlGaWVsZExpdGUgb3JpZ2luYWwgPSBjcmVhdGVMYXp5RmllbGRM
aXRlRnJvbU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgTGF6eUZpZWxkTGl0ZSBtZXJnZWQgPSBuZXcg
TGF6eUZpZWxkTGl0ZSgpOwotICAgIG1lcmdlZC5tZXJnZShvcmlnaW5hbCk7Ci0gICAgVGVzdEFs
bEV4dGVuc2lvbnMgdmFsdWUgPSAoVGVzdEFsbEV4dGVuc2lvbnMpIG1lcmdlZC5nZXRWYWx1ZSgK
LSAgICAgICAgVGVzdEFsbEV4dGVuc2lvbnMuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICAgIGFz
c2VydEVxdWFscyhtZXNzYWdlLCB2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RW1w
dHlMYXp5RmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBMYXp5RmllbGRMaXRlIGZpZWxk
ID0gbmV3IExhenlGaWVsZExpdGUoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgZmllbGQuZ2V0U2Vy
aWFsaXplZFNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuRU1QVFksIGZpZWxk
LnRvQnl0ZVN0cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkUHJvdG8o
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBTaWxlbnRseSBmYWlscyBhbmQgdXNlcyB0aGUg
ZGVmYXVsdCBpbnN0YW5jZS4KLSAgICBMYXp5RmllbGRMaXRlIGZpZWxkID0gbmV3IExhenlGaWVs
ZExpdGUoCi0gICAgICAgIFRlc3RVdGlsLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCksIEJ5dGVTdHJp
bmcuY29weUZyb21VdGY4KCJpbnZhbGlkIikpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAg
VGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpLCBmaWVsZC5nZXRWYWx1ZShUZXN0QWxs
VHlwZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgZmllbGQu
Z2V0U2VyaWFsaXplZFNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuRU1QVFks
IGZpZWxkLnRvQnl0ZVN0cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZUJl
Zm9yZVBhcnNpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2Fn
ZTEgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIoMSkuYnVpbGQo
KTsKLSAgICBMYXp5RmllbGRMaXRlIGZpZWxkMSA9IGNyZWF0ZUxhenlGaWVsZExpdGVGcm9tTWVz
c2FnZShtZXNzYWdlMSk7Ci0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UyID0gVGVzdEFsbFR5cGVz
Lm5ld0J1aWxkZXIoKS5zZXRPcHRpb25hbEludDY0KDIpLmJ1aWxkKCk7Ci0gICAgTGF6eUZpZWxk
TGl0ZSBmaWVsZDIgPSBjcmVhdGVMYXp5RmllbGRMaXRlRnJvbU1lc3NhZ2UobWVzc2FnZTIpOwot
Ci0gICAgZmllbGQxLm1lcmdlKGZpZWxkMik7Ci0gICAgVGVzdEFsbFR5cGVzIGV4cGVjdGVkID0K
LSAgICAgICAgVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKS5zZXRPcHRpb25hbEludDMyKDEpLnNl
dE9wdGlvbmFsSW50NjQoMikuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZp
ZWxkMS5nZXRWYWx1ZShUZXN0QWxsVHlwZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZU9uZU5vdFBhcnNlZCgpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIC8vIFRlc3QgYSBmZXcgZGlmZmVyZW50IHBhdGhzIHRoYXQgaW52b2x2ZSBvbmUgbWVz
c2FnZSB0aGF0IHdhcyBub3QgcGFyc2VkLgotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlMSA9IFRl
c3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuc2V0T3B0aW9uYWxJbnQzMigxKS5idWlsZCgpOwotICAg
IFRlc3RBbGxUeXBlcyBtZXNzYWdlMiA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuc2V0T3B0
aW9uYWxJbnQ2NCgyKS5idWlsZCgpOwotICAgIFRlc3RBbGxUeXBlcyBleHBlY3RlZCA9Ci0gICAg
ICAgIFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuc2V0T3B0aW9uYWxJbnQzMigxKS5zZXRPcHRp
b25hbEludDY0KDIpLmJ1aWxkKCk7Ci0KLSAgICBMYXp5RmllbGRMaXRlIGZpZWxkMSA9IExhenlG
aWVsZExpdGUuZnJvbVZhbHVlKG1lc3NhZ2UxKTsKLSAgICBmaWVsZDEuZ2V0VmFsdWUoVGVzdEFs
bFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpKTsgIC8vIEZvcmNlIHBhcnNpbmcuCi0gICAgTGF6
eUZpZWxkTGl0ZSBmaWVsZDIgPSBjcmVhdGVMYXp5RmllbGRMaXRlRnJvbU1lc3NhZ2UobWVzc2Fn
ZTIpOwotICAgIGZpZWxkMS5tZXJnZShmaWVsZDIpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3Rl
ZCwgZmllbGQxLmdldFZhbHVlKFRlc3RBbGxUeXBlcy5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwot
Ci0gICAgLy8gTm93IHJldmVyc2Ugd2hpY2ggb25lIGlzIHBhcnNlZCBmaXJzdC4KLSAgICBmaWVs
ZDEgPSBMYXp5RmllbGRMaXRlLmZyb21WYWx1ZShtZXNzYWdlMSk7Ci0gICAgZmllbGQyID0gY3Jl
YXRlTGF6eUZpZWxkTGl0ZUZyb21NZXNzYWdlKG1lc3NhZ2UyKTsKLSAgICBmaWVsZDIuZ2V0VmFs
dWUoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpKTsgIC8vIEZvcmNlIHBhcnNpbmcu
Ci0gICAgZmllbGQxLm1lcmdlKGZpZWxkMik7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBm
aWVsZDEuZ2V0VmFsdWUoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VJbnZhbGlkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgLy8gVGVzdCBhIGZldyBkaWZmZXJlbnQgcGF0aHMgdGhhdCBpbnZvbHZlIG9uZSBtZXNzYWdl
IHRoYXQgd2FzIG5vdCBwYXJzZWQuCi0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UgPSBUZXN0QWxs
VHlwZXMubmV3QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIoMSkuYnVpbGQoKTsKLSAgICBMYXp5
RmllbGRMaXRlIHZhbGlkID0gTGF6eUZpZWxkTGl0ZS5mcm9tVmFsdWUobWVzc2FnZSk7Ci0gICAg
TGF6eUZpZWxkTGl0ZSBpbnZhbGlkID0gbmV3IExhenlGaWVsZExpdGUoCi0gICAgICAgIFRlc3RV
dGlsLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCksIEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJpbnZh
bGlkIikpOwotICAgIGludmFsaWQubWVyZ2UodmFsaWQpOwotCi0gICAgLy8gV2Ugc3dhbGxvdyB0
aGUgZXhjZXB0aW9uIGFuZCBqdXN0IHVzZSB0aGUgc2V0IGZpZWxkLgotICAgIGFzc2VydEVxdWFs
cyhtZXNzYWdlLCBpbnZhbGlkLmdldFZhbHVlKFRlc3RBbGxUeXBlcy5nZXREZWZhdWx0SW5zdGFu
Y2UoKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1lcmdlS2VlcHNFeHRlbnNpb25zV2hl
blBvc3NpYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gSW4gdGhpcyB0ZXN0IHdlIGF0
dGVtcHQgdG8gb25seSB1c2UgdGhlIGVtcHR5IHJlZ2lzdHJ5LCB3aGljaCB3aWxsIHN0cmlwIG91
dCBhbGwgZXh0ZW5zaW9ucwotICAgIC8vIHdoZW4gc2VyaWFsaXppbmcgYW5kIHRoZW4gcGFyc2lu
Zy4gV2UgdmVyaWZ5IHRoYXQgZWFjaCBjb2RlIHBhdGggd2lsbCBhdHRlbXB0IHRvIG5vdAotICAg
IC8vIHNlcmlhbGl6ZSBhbmQgcGFyc2UgYSBtZXNzYWdlIHRoYXQgd2FzIHNldCBkaXJlY3RseSB3
aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlCi0gICAgLy8gZXh0ZW5zaW9uUmVnaXN0cnkuCi0gICAg
VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZVdpdGhFeHRlbnNpb25zID0KLSAgICAgICAgVGVzdEFs
bEV4dGVuc2lvbnMubmV3QnVpbGRlcigpLnNldEV4dGVuc2lvbihvcHRpb25hbEludDMyRXh0ZW5z
aW9uLCA0MikuYnVpbGQoKTsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucyBlbXB0eU1lc3NhZ2UgPSBU
ZXN0QWxsRXh0ZW5zaW9ucy5uZXdCdWlsZGVyKCkuYnVpbGQoKTsKLQotICAgIEV4dGVuc2lvblJl
Z2lzdHJ5TGl0ZSBlbXB0eVJlZ2lzdHJ5ID0gRXh0ZW5zaW9uUmVnaXN0cnlMaXRlLmdldEVtcHR5
UmVnaXN0cnkoKTsKLQotICAgIExhenlGaWVsZExpdGUgZmllbGQgPSBMYXp5RmllbGRMaXRlLmZy
b21WYWx1ZShtZXNzYWdlV2l0aEV4dGVuc2lvbnMpOwotICAgIGZpZWxkLm1lcmdlKGNyZWF0ZUxh
enlGaWVsZExpdGVGcm9tTWVzc2FnZShlbXB0eVJlZ2lzdHJ5LCBlbXB0eU1lc3NhZ2UpKTsKLSAg
ICBhc3NlcnRFcXVhbHMobWVzc2FnZVdpdGhFeHRlbnNpb25zLCBmaWVsZC5nZXRWYWx1ZShUZXN0
QWxsRXh0ZW5zaW9ucy5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotCi0gICAgLy8gTm93IHJldmVy
c2UgdGhlIG9yZGVyIG9mIHRoZSBtZXJnaW5nLgotICAgIGZpZWxkID0gY3JlYXRlTGF6eUZpZWxk
TGl0ZUZyb21NZXNzYWdlKGVtcHR5UmVnaXN0cnksIGVtcHR5TWVzc2FnZSk7Ci0gICAgZmllbGQu
bWVyZ2UoTGF6eUZpZWxkTGl0ZS5mcm9tVmFsdWUobWVzc2FnZVdpdGhFeHRlbnNpb25zKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2VXaXRoRXh0ZW5zaW9ucywgZmllbGQuZ2V0VmFsdWUoVGVz
dEFsbEV4dGVuc2lvbnMuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLQotICAgIC8vIE5vdyB0cnkg
cGFyc2luZyB0aGUgZW1wdHkgZmllbGQgZmlyc3QuCi0gICAgZmllbGQgPSBMYXp5RmllbGRMaXRl
LmZyb21WYWx1ZShtZXNzYWdlV2l0aEV4dGVuc2lvbnMpOwotICAgIExhenlGaWVsZExpdGUgb3Ro
ZXIgPSBjcmVhdGVMYXp5RmllbGRMaXRlRnJvbU1lc3NhZ2UoZW1wdHlSZWdpc3RyeSwgZW1wdHlN
ZXNzYWdlKTsKLSAgICBvdGhlci5nZXRWYWx1ZShUZXN0QWxsRXh0ZW5zaW9ucy5nZXREZWZhdWx0
SW5zdGFuY2UoKSk7ICAvLyBGb3JjZSBwYXJzaW5nLgotICAgIGZpZWxkLm1lcmdlKG90aGVyKTsK
LSAgICBhc3NlcnRFcXVhbHMobWVzc2FnZVdpdGhFeHRlbnNpb25zLCBmaWVsZC5nZXRWYWx1ZShU
ZXN0QWxsRXh0ZW5zaW9ucy5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotCi0gICAgLy8gQW5kIGFn
YWluIHJldmVyc2UuCi0gICAgZmllbGQgPSBjcmVhdGVMYXp5RmllbGRMaXRlRnJvbU1lc3NhZ2Uo
ZW1wdHlSZWdpc3RyeSwgZW1wdHlNZXNzYWdlKTsKLSAgICBmaWVsZC5nZXRWYWx1ZShUZXN0QWxs
RXh0ZW5zaW9ucy5nZXREZWZhdWx0SW5zdGFuY2UoKSk7ICAvLyBGb3JjZSBwYXJzaW5nLgotICAg
IG90aGVyID0gTGF6eUZpZWxkTGl0ZS5mcm9tVmFsdWUobWVzc2FnZVdpdGhFeHRlbnNpb25zKTsK
LSAgICBmaWVsZC5tZXJnZShvdGhlcik7Ci0gICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2VXaXRoRXh0
ZW5zaW9ucywgZmllbGQuZ2V0VmFsdWUoVGVzdEFsbEV4dGVuc2lvbnMuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZU1pZ2h0TG9zZUV4dGVuc2lv
bnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBUZXN0IHRoYXQgd2UgZG9uJ3Qga25vdyBh
Ym91dCB0aGUgZXh0ZW5zaW9ucyB3aGVuIHBhcnNpbmcuCi0gICAgVGVzdEFsbEV4dGVuc2lvbnMg
bWVzc2FnZTEgPQotICAgICAgICBUZXN0QWxsRXh0ZW5zaW9ucy5uZXdCdWlsZGVyKCkuc2V0RXh0
ZW5zaW9uKG9wdGlvbmFsSW50MzJFeHRlbnNpb24sIDEpLmJ1aWxkKCk7Ci0gICAgVGVzdEFsbEV4
dGVuc2lvbnMgbWVzc2FnZTIgPQotICAgICAgICBUZXN0QWxsRXh0ZW5zaW9ucy5uZXdCdWlsZGVy
KCkuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsSW50NjRFeHRlbnNpb24sIDJMKS5idWlsZCgpOwotCi0g
ICAgTGF6eUZpZWxkTGl0ZSBmaWVsZCA9IExhenlGaWVsZExpdGUuZnJvbVZhbHVlKG1lc3NhZ2Ux
KTsKLSAgICBmaWVsZC5tZXJnZShMYXp5RmllbGRMaXRlLmZyb21WYWx1ZShtZXNzYWdlMikpOwot
Ci0gICAgLy8gV2UgbG9zZSB0aGUgZXh0ZW5zaW9ucyBmcm9tIG1lc3NhZ2UgMiBiZWNhdXNlIHdl
IGhhdmUgdG8gc2VyaWFsaXplIGl0IGFuZCB0aGVuIHBhcnNlIGl0Ci0gICAgLy8gYWdhaW4sIHVz
aW5nIHRoZSBlbXB0eSByZWdpc3RyeSB0aGlzIHRpbWUuCi0gICAgVGVzdEFsbEV4dGVuc2lvbnMg
dmFsdWUgPQotICAgICAgICAoVGVzdEFsbEV4dGVuc2lvbnMpIGZpZWxkLmdldFZhbHVlKFRlc3RB
bGxFeHRlbnNpb25zLmdldERlZmF1bHRJbnN0YW5jZSgpKTsKLSAgICBhc3NlcnRUcnVlKHZhbHVl
Lmhhc0V4dGVuc2lvbihvcHRpb25hbEludDMyRXh0ZW5zaW9uKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KEludGVnZXIudmFsdWVPZigxKSwgdmFsdWUuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsSW50MzJFeHRl
bnNpb24pKTsKLSAgICBhc3NlcnRGYWxzZSh2YWx1ZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxJbnQ2
NEV4dGVuc2lvbikpOwotCi0gICAgLy8gVGhlIGZpZWxkIGlzIHN0aWxsIHRoZXJlLCBpdCBpcyBq
dXN0IHVua25vd24uCi0gICAgYXNzZXJ0VHJ1ZSh2YWx1ZS5nZXRVbmtub3duRmllbGRzKCkKLSAg
ICAgICAgLmhhc0ZpZWxkKG9wdGlvbmFsSW50NjRFeHRlbnNpb24uZ2V0RGVzY3JpcHRvcigpLmdl
dE51bWJlcigpKSk7Ci0gIH0KLQotCi0gIC8vIEhlbHAgbWV0aG9kcy4KLQotICBwcml2YXRlIExh
enlGaWVsZExpdGUgY3JlYXRlTGF6eUZpZWxkTGl0ZUZyb21NZXNzYWdlKE1lc3NhZ2VMaXRlIG1l
c3NhZ2UpIHsKLSAgICByZXR1cm4gY3JlYXRlTGF6eUZpZWxkTGl0ZUZyb21NZXNzYWdlKFRlc3RV
dGlsLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCksIG1lc3NhZ2UpOwotICB9Ci0KLSAgcHJpdmF0ZSBM
YXp5RmllbGRMaXRlIGNyZWF0ZUxhenlGaWVsZExpdGVGcm9tTWVzc2FnZSgKLSAgICAgIEV4dGVu
c2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSwgTWVzc2FnZUxpdGUgbWVzc2FnZSkg
ewotICAgIEJ5dGVTdHJpbmcgYnl0ZXMgPSBtZXNzYWdlLnRvQnl0ZVN0cmluZygpOwotICAgIHJl
dHVybiBuZXcgTGF6eUZpZWxkTGl0ZShleHRlbnNpb25SZWdpc3RyeSwgYnl0ZXMpOwotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIGNoYW5nZVZhbHVlKExhenlGaWVsZExpdGUgbGF6eUZpZWxkKSB7Ci0g
ICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RVdGlsLmdldEFsbFNldCgpLnRv
QnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRCb29sKHRydWUpOwotICAgIE1lc3Nh
Z2VMaXRlIG5ld01lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgbGF6eUZpZWxkLnNldFZh
bHVlKG5ld01lc3NhZ2UpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFzc2VydE5vdEVxdWFsKE9i
amVjdCB1bmV4cGVjdGVkLCBPYmplY3QgYWN0dWFsKSB7Ci0gICAgYXNzZXJ0RmFsc2UodW5leHBl
Y3RlZCA9PSBhY3R1YWwKLSAgICAgICAgfHwgKHVuZXhwZWN0ZWQgIT0gbnVsbCAmJiB1bmV4cGVj
dGVkLmVxdWFscyhhY3R1YWwpKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xhenlGaWVsZFRlc3QuamF2YSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9j
b3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5RmllbGRUZXN0LmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNDczYWU5YjU1NjYwMmUyYzllMDQ0YjM0
NWJkZmNmOWFjNjBhMTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xhenlGaWVs
ZFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1p
bXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5UZXN0QWxsRXh0ZW5zaW9uczsK
LWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLQot
aW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNl
cHRpb247Ci0KLS8qKgotICogVW5pdCB0ZXN0IGZvciB7QGxpbmsgTGF6eUZpZWxkfS4KLSAqCi0g
KiBAYXV0aG9yIHhpYW5nbEBnb29nbGUuY29tIChYaWFuZyBMaSkKLSAqLwotcHVibGljIGNsYXNz
IExhenlGaWVsZFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gIHB1YmxpYyB2b2lkIHRlc3RIYXNo
Q29kZSgpIHsKLSAgICBNZXNzYWdlTGl0ZSBtZXNzYWdlID0gVGVzdFV0aWwuZ2V0QWxsU2V0KCk7
Ci0gICAgTGF6eUZpZWxkIGxhenlGaWVsZCA9Ci0gICAgICAgIGNyZWF0ZUxhenlGaWVsZEZyb21N
ZXNzYWdlKG1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmhhc2hDb2RlKCksIGxh
enlGaWVsZC5oYXNoQ29kZSgpKTsKLSAgICBsYXp5RmllbGQuZ2V0VmFsdWUoKTsKLSAgICBhc3Nl
cnRFcXVhbHMobWVzc2FnZS5oYXNoQ29kZSgpLCBsYXp5RmllbGQuaGFzaENvZGUoKSk7Ci0gICAg
Y2hhbmdlVmFsdWUobGF6eUZpZWxkKTsKLSAgICAvLyBtYWtlIHN1cmUgdHdvIG1lc3NhZ2VzIGhh
dmUgZGlmZmVyZW50IGhhc2ggY29kZQotICAgIGFzc2VydE5vdEVxdWFsKG1lc3NhZ2UuaGFzaENv
ZGUoKSwgbGF6eUZpZWxkLmhhc2hDb2RlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhh
c2hDb2RlRXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucyBtZXNz
YWdlID0gVGVzdFV0aWwuZ2V0QWxsRXh0ZW5zaW9uc1NldCgpOwotICAgIExhenlGaWVsZCBsYXp5
RmllbGQgPSBjcmVhdGVMYXp5RmllbGRGcm9tTWVzc2FnZShtZXNzYWdlKTsKLSAgICBhc3NlcnRF
cXVhbHMobWVzc2FnZS5oYXNoQ29kZSgpLCBsYXp5RmllbGQuaGFzaENvZGUoKSk7Ci0gICAgbGF6
eUZpZWxkLmdldFZhbHVlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1lc3NhZ2UuaGFzaENvZGUoKSwg
bGF6eUZpZWxkLmhhc2hDb2RlKCkpOwotICAgIGNoYW5nZVZhbHVlKGxhenlGaWVsZCk7Ci0gICAg
Ly8gbWFrZSBzdXJlIHR3byBtZXNzYWdlcyBoYXZlIGRpZmZlcmVudCBoYXNoIGNvZGUKLSAgICBh
c3NlcnROb3RFcXVhbChtZXNzYWdlLmhhc2hDb2RlKCksIGxhenlGaWVsZC5oYXNoQ29kZSgpKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRWYWx1ZSgpIHsKLSAgICBNZXNzYWdlTGl0ZSBt
ZXNzYWdlID0gVGVzdFV0aWwuZ2V0QWxsU2V0KCk7Ci0gICAgTGF6eUZpZWxkIGxhenlGaWVsZCA9
IGNyZWF0ZUxhenlGaWVsZEZyb21NZXNzYWdlKG1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscyht
ZXNzYWdlLCBsYXp5RmllbGQuZ2V0VmFsdWUoKSk7Ci0gICAgY2hhbmdlVmFsdWUobGF6eUZpZWxk
KTsKLSAgICBhc3NlcnROb3RFcXVhbChtZXNzYWdlLCBsYXp5RmllbGQuZ2V0VmFsdWUoKSk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0R2V0VmFsdWVFeCgpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIFRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2UgPSBUZXN0VXRpbC5nZXRBbGxFeHRlbnNpb25z
U2V0KCk7Ci0gICAgTGF6eUZpZWxkIGxhenlGaWVsZCA9IGNyZWF0ZUxhenlGaWVsZEZyb21NZXNz
YWdlKG1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLCBsYXp5RmllbGQuZ2V0VmFs
dWUoKSk7Ci0gICAgY2hhbmdlVmFsdWUobGF6eUZpZWxkKTsKLSAgICBhc3NlcnROb3RFcXVhbCht
ZXNzYWdlLCBsYXp5RmllbGQuZ2V0VmFsdWUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
RXF1YWxzT2JqZWN0KCkgewotICAgIE1lc3NhZ2VMaXRlIG1lc3NhZ2UgPSBUZXN0VXRpbC5nZXRB
bGxTZXQoKTsKLSAgICBMYXp5RmllbGQgbGF6eUZpZWxkID0gY3JlYXRlTGF6eUZpZWxkRnJvbU1l
c3NhZ2UobWVzc2FnZSk7Ci0gICAgYXNzZXJ0VHJ1ZShsYXp5RmllbGQuZXF1YWxzKG1lc3NhZ2Up
KTsKLSAgICBjaGFuZ2VWYWx1ZShsYXp5RmllbGQpOwotICAgIGFzc2VydEZhbHNlKGxhenlGaWVs
ZC5lcXVhbHMobWVzc2FnZSkpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuZXF1YWxzKGxhenlG
aWVsZC5nZXRWYWx1ZSgpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzT2JqZWN0
RXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlID0g
VGVzdFV0aWwuZ2V0QWxsRXh0ZW5zaW9uc1NldCgpOwotICAgIExhenlGaWVsZCBsYXp5RmllbGQg
PSBjcmVhdGVMYXp5RmllbGRGcm9tTWVzc2FnZShtZXNzYWdlKTsKLSAgICBhc3NlcnRUcnVlKGxh
enlGaWVsZC5lcXVhbHMobWVzc2FnZSkpOwotICAgIGNoYW5nZVZhbHVlKGxhenlGaWVsZCk7Ci0g
ICAgYXNzZXJ0RmFsc2UobGF6eUZpZWxkLmVxdWFscyhtZXNzYWdlKSk7Ci0gICAgYXNzZXJ0RmFs
c2UobWVzc2FnZS5lcXVhbHMobGF6eUZpZWxkLmdldFZhbHVlKCkpKTsKLSAgfQotCi0gIC8vIEhl
bHAgbWV0aG9kcy4KLQotICBwcml2YXRlIExhenlGaWVsZCBjcmVhdGVMYXp5RmllbGRGcm9tTWVz
c2FnZShNZXNzYWdlTGl0ZSBtZXNzYWdlKSB7Ci0gICAgQnl0ZVN0cmluZyBieXRlcyA9IG1lc3Nh
Z2UudG9CeXRlU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG5ldyBMYXp5RmllbGQobWVzc2FnZS5nZXRE
ZWZhdWx0SW5zdGFuY2VGb3JUeXBlKCksCi0gICAgICAgIFRlc3RVdGlsLmdldEV4dGVuc2lvblJl
Z2lzdHJ5KCksIGJ5dGVzKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGFuZ2VWYWx1ZShMYXp5
RmllbGQgbGF6eUZpZWxkKSB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRl
c3RVdGlsLmdldEFsbFNldCgpLnRvQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRC
b29sKHRydWUpOwotICAgIE1lc3NhZ2VMaXRlIG5ld01lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7
Ci0gICAgbGF6eUZpZWxkLnNldFZhbHVlKG5ld01lc3NhZ2UpOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIGFzc2VydE5vdEVxdWFsKE9iamVjdCB1bmV4cGVjdGVkLCBPYmplY3QgYWN0dWFsKSB7Ci0g
ICAgYXNzZXJ0RmFsc2UodW5leHBlY3RlZCA9PSBhY3R1YWwKLSAgICAgICAgfHwgKHVuZXhwZWN0
ZWQgIT0gbnVsbCAmJiB1bmV4cGVjdGVkLmVxdWFscyhhY3R1YWwpKSk7Ci0gIH0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5TWVz
c2FnZUxpdGVUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvTGF6eU1lc3NhZ2VMaXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhZmUwZmZmZDUxNjRhYjY5MjRjMWIzYTk0ZTQ0M2IzMWM3MGE4NWQyLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5TWVzc2FnZUxpdGVUZXN0LmphdmEKKysrIC9kZXYv
bnVsbApAQCAtMSwzMDcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LkxhenlGaWVsZHNMaXRlLkxhenlFeHRlbnNpb247Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRl
c3QuTGF6eUZpZWxkc0xpdGUuTGF6eUlubmVyTWVzc2FnZUxpdGU7Ci1pbXBvcnQgcHJvdG9idWZf
dW5pdHRlc3QuTGF6eUZpZWxkc0xpdGUuTGF6eU1lc3NhZ2VMaXRlOwotaW1wb3J0IHByb3RvYnVm
X3VuaXR0ZXN0LkxhenlGaWVsZHNMaXRlLkxhenlOZXN0ZWRJbm5lck1lc3NhZ2VMaXRlOwotCi1p
bXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5
TGlzdDsKLQotLyoqCi0gKiBVbml0IHRlc3QgZm9yIG1lc3NhZ2VzIHdpdGggbGF6eSBmaWVsZHMu
Ci0gKgotICogQGF1dGhvciBuaXdhc2FraUBnb29nbGUuY29tIChOYW9raSBJd2FzYWtpKQotICov
Ci1wdWJsaWMgY2xhc3MgTGF6eU1lc3NhZ2VMaXRlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQot
ICBwcml2YXRlIFBhcnNlcjxMYXp5SW5uZXJNZXNzYWdlTGl0ZT4gb3JpZ2luYWxMYXp5SW5uZXJN
ZXNzYWdlTGl0ZVBhcnNlcjsKLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAo
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAg
c3VwZXIudGVhckRvd24oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRWYWx1ZXMoKSB7
Ci0gICAgTGF6eU5lc3RlZElubmVyTWVzc2FnZUxpdGUgbmVzdGVkID0gTGF6eU5lc3RlZElubmVy
TWVzc2FnZUxpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXROdW0oMykKLSAgICAgICAgLmJ1
aWxkKCk7Ci0gICAgTGF6eUlubmVyTWVzc2FnZUxpdGUgaW5uZXIgPSBMYXp5SW5uZXJNZXNzYWdl
TGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE51bSgyKQotICAgICAgICAuc2V0TmVzdGVk
KG5lc3RlZCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgTGF6eU1lc3NhZ2VMaXRlIG91dGVyID0g
TGF6eU1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0TnVtKDEpCi0gICAgICAg
IC5zZXRJbm5lcihpbm5lcikKLSAgICAgICAgLnNldE9uZW9mTnVtKDEyMykKLSAgICAgICAgLnNl
dE9uZW9mSW5uZXIoaW5uZXIpCi0gICAgICAgIC5idWlsZCgpOwotCi0gICAgYXNzZXJ0RXF1YWxz
KDEsIG91dGVyLmdldE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDIxLCBvdXRlci5nZXROdW1X
aXRoRGVmYXVsdCgpKTsKLQotICAgIGFzc2VydEVxdWFscygyLCBvdXRlci5nZXRJbm5lcigpLmdl
dE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDIsIG91dGVyLmdldElubmVyKCkuZ2V0TnVtV2l0
aERlZmF1bHQoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMywgb3V0ZXIuZ2V0SW5uZXIoKS5nZXRO
ZXN0ZWQoKS5nZXROdW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIG91dGVyLmdldElubmVyKCku
Z2V0TmVzdGVkKCkuZ2V0TnVtV2l0aERlZmF1bHQoKSk7Ci0KLSAgICBhc3NlcnRGYWxzZShvdXRl
ci5oYXNPbmVvZk51bSgpKTsKLSAgICBhc3NlcnRUcnVlKG91dGVyLmhhc09uZW9mSW5uZXIoKSk7
Ci0KLSAgICBhc3NlcnRFcXVhbHMoMiwgb3V0ZXIuZ2V0T25lb2ZJbm5lcigpLmdldE51bSgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoNDIsIG91dGVyLmdldE9uZW9mSW5uZXIoKS5nZXROdW1XaXRoRGVm
YXVsdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgb3V0ZXIuZ2V0T25lb2ZJbm5lcigpLmdldE5l
c3RlZCgpLmdldE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNCwgb3V0ZXIuZ2V0T25lb2ZJbm5l
cigpLmdldE5lc3RlZCgpLmdldE51bVdpdGhEZWZhdWx0KCkpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdFNldFJlcGVhdGVkVmFsdWVzKCkgewotICAgIExhenlNZXNzYWdlTGl0ZSBvdXRlciA9
IExhenlNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE51bSgxKQotICAgICAg
ICAuYWRkUmVwZWF0ZWRJbm5lcihMYXp5SW5uZXJNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkuc2V0
TnVtKDExOSkpCi0gICAgICAgIC5hZGRSZXBlYXRlZElubmVyKExhenlJbm5lck1lc3NhZ2VMaXRl
Lm5ld0J1aWxkZXIoKS5zZXROdW0oMTIyKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBhc3Nl
cnRFcXVhbHMoMSwgb3V0ZXIuZ2V0TnVtKCkpOwotICAgIGFzc2VydEVxdWFscygyLCBvdXRlci5n
ZXRSZXBlYXRlZElubmVyQ291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExOSwgb3V0ZXIuZ2V0
UmVwZWF0ZWRJbm5lcigwKS5nZXROdW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMiwgb3V0ZXIu
Z2V0UmVwZWF0ZWRJbm5lcigxKS5nZXROdW0oKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
QWRkQWxsKCkgewotICAgIEFycmF5TGlzdDxMYXp5SW5uZXJNZXNzYWdlTGl0ZT4gaW5uZXJzID0g
bmV3IEFycmF5TGlzdDxMYXp5SW5uZXJNZXNzYWdlTGl0ZT4oKTsKLSAgICBpbnQgY291bnQgPSA0
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgTGF6eUlubmVy
TWVzc2FnZUxpdGUgaW5uZXIgPSBMYXp5SW5uZXJNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkKLSAg
ICAgICAgICAuc2V0TnVtKGkpCi0gICAgICAgICAgLmJ1aWxkKCk7Ci0gICAgICBpbm5lcnMuYWRk
KGlubmVyKTsKLSAgICB9Ci0KLSAgICBMYXp5TWVzc2FnZUxpdGUgb3V0ZXIgPSBMYXp5TWVzc2Fn
ZUxpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5hZGRBbGxSZXBlYXRlZElubmVyKGlubmVycykK
LSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNvdW50LCBvdXRlci5nZXRSZXBl
YXRlZElubmVyQ291bnQoKSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7
Ci0gICAgICBhc3NlcnRFcXVhbHMoaSwgb3V0ZXIuZ2V0UmVwZWF0ZWRJbm5lcihpKS5nZXROdW0o
KSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEdldERlZmF1bHRWYWx1ZXMoKSB7
Ci0gICAgTGF6eU1lc3NhZ2VMaXRlIG91dGVyID0gTGF6eU1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIo
KQotICAgICAgICAuYnVpbGQoKTsKLQotICAgIGFzc2VydEVxdWFscygwLCBvdXRlci5nZXROdW0o
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQyMSwgb3V0ZXIuZ2V0TnVtV2l0aERlZmF1bHQoKSk7Ci0K
LSAgICBhc3NlcnRFcXVhbHMoMCwgb3V0ZXIuZ2V0SW5uZXIoKS5nZXROdW0oKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDQyLCBvdXRlci5nZXRJbm5lcigpLmdldE51bVdpdGhEZWZhdWx0KCkpOwotCi0g
ICAgYXNzZXJ0RXF1YWxzKDAsIG91dGVyLmdldElubmVyKCkuZ2V0TmVzdGVkKCkuZ2V0TnVtKCkp
OwotICAgIGFzc2VydEVxdWFscyg0LCBvdXRlci5nZXRJbm5lcigpLmdldE5lc3RlZCgpLmdldE51
bVdpdGhEZWZhdWx0KCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDAsIG91dGVyLmdldE9uZW9mTnVt
KCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDAsIG91dGVyLmdldE9uZW9mSW5uZXIoKS5nZXROdW0o
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQyLCBvdXRlci5nZXRPbmVvZklubmVyKCkuZ2V0TnVtV2l0
aERlZmF1bHQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG91dGVyLmdldE9uZW9mSW5uZXIoKS5n
ZXROZXN0ZWQoKS5nZXROdW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIG91dGVyLmdldE9uZW9m
SW5uZXIoKS5nZXROZXN0ZWQoKS5nZXROdW1XaXRoRGVmYXVsdCgpKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RDbGVhclZhbHVlcygpIHsKLSAgICBMYXp5SW5uZXJNZXNzYWdlTGl0ZSBpbm5l
ciA9IExhenlJbm5lck1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0TnVtKDEx
NSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBMYXp5TWVzc2FnZUxpdGUuQnVpbGRlciBvdXRl
ckJ1aWxkZXIgPSBMYXp5TWVzc2FnZUxpdGUubmV3QnVpbGRlcigpOwotCi0gICAgYXNzZXJ0RXF1
YWxzKDAsIG91dGVyQnVpbGRlci5idWlsZCgpLmdldE51bSgpKTsKLQotCi0gICAgLy8gU2V0L0Ns
ZWFyIG51bQotICAgIG91dGVyQnVpbGRlci5zZXROdW0oMTAwKTsKLQotICAgIGFzc2VydEVxdWFs
cygxMDAsIG91dGVyQnVpbGRlci5idWlsZCgpLmdldE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMo
NDIxLCBvdXRlckJ1aWxkZXIuYnVpbGQoKS5nZXROdW1XaXRoRGVmYXVsdCgpKTsKLSAgICBhc3Nl
cnRGYWxzZShvdXRlckJ1aWxkZXIuYnVpbGQoKS5oYXNJbm5lcigpKTsKLQotICAgIG91dGVyQnVp
bGRlci5jbGVhck51bSgpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDAsIG91dGVyQnVpbGRlci5idWls
ZCgpLmdldE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDIxLCBvdXRlckJ1aWxkZXIuYnVpbGQo
KS5nZXROdW1XaXRoRGVmYXVsdCgpKTsKLSAgICBhc3NlcnRGYWxzZShvdXRlckJ1aWxkZXIuYnVp
bGQoKS5oYXNJbm5lcigpKTsKLQotCi0gICAgLy8gU2V0L0NsZWFyIGFsbAotICAgIG91dGVyQnVp
bGRlci5zZXROdW0oMTAwKQotICAgICAgICAuc2V0SW5uZXIoaW5uZXIpCi0gICAgICAgIC5hZGRS
ZXBlYXRlZElubmVyKExhenlJbm5lck1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKS5zZXROdW0oMTE5
KSkKLSAgICAgICAgLmFkZFJlcGVhdGVkSW5uZXIoTGF6eUlubmVyTWVzc2FnZUxpdGUubmV3QnVp
bGRlcigpLnNldE51bSgxMjIpKQotICAgICAgICAuc2V0T25lb2ZJbm5lcihMYXp5SW5uZXJNZXNz
YWdlTGl0ZS5uZXdCdWlsZGVyKCkuc2V0TnVtKDEyMykpOwotCi0gICAgTGF6eU1lc3NhZ2VMaXRl
IG91dGVyID0gb3V0ZXJCdWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEwMCwgb3V0
ZXIuZ2V0TnVtKCkpOwotICAgIGFzc2VydEVxdWFscyg0MjEsIG91dGVyLmdldE51bVdpdGhEZWZh
dWx0KCkpOwotICAgIGFzc2VydFRydWUob3V0ZXIuaGFzSW5uZXIoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDExNSwgb3V0ZXIuZ2V0SW5uZXIoKS5nZXROdW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIs
IG91dGVyLmdldFJlcGVhdGVkSW5uZXJDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTE5LCBv
dXRlci5nZXRSZXBlYXRlZElubmVyKDApLmdldE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIy
LCBvdXRlci5nZXRSZXBlYXRlZElubmVyKDEpLmdldE51bSgpKTsKLSAgICBhc3NlcnRUcnVlKG91
dGVyLmhhc09uZW9mSW5uZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgb3V0ZXIuZ2V0T25l
b2ZJbm5lcigpLmdldE51bSgpKTsKLQotICAgIG91dGVyQnVpbGRlci5jbGVhcigpOwotCi0gICAg
b3V0ZXIgPSBvdXRlckJ1aWxkZXIuYnVpbGQoKTsKLQotICAgIGFzc2VydEVxdWFscygwLCBvdXRl
ci5nZXROdW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQyMSwgb3V0ZXIuZ2V0TnVtV2l0aERlZmF1
bHQoKSk7Ci0gICAgYXNzZXJ0RmFsc2Uob3V0ZXIuaGFzSW5uZXIoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDAsIG91dGVyLmdldFJlcGVhdGVkSW5uZXJDb3VudCgpKTsKLSAgICBhc3NlcnRGYWxzZShv
dXRlci5oYXNPbmVvZklubmVyKCkpOwotICAgIGFzc2VydEVxdWFscygwLCBvdXRlci5nZXRPbmVv
ZklubmVyKCkuZ2V0TnVtKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1lcmdlVmFsdWVz
KCkgewotICAgIExhenlNZXNzYWdlTGl0ZSBvdXRlckJhc2UgPSBMYXp5TWVzc2FnZUxpdGUubmV3
QnVpbGRlcigpCi0gICAgICAgIC5zZXROdW1XaXRoRGVmYXVsdCgxMjIpCi0gICAgICAgIC5idWls
ZCgpOwotCi0gICAgTGF6eUlubmVyTWVzc2FnZUxpdGUgaW5uZXJNZXJnaW5nID0gTGF6eUlubmVy
TWVzc2FnZUxpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXROdW0oMTE1KQotICAgICAgICAu
YnVpbGQoKTsKLSAgICBMYXp5TWVzc2FnZUxpdGUgb3V0ZXJNZXJnaW5nID0gTGF6eU1lc3NhZ2VM
aXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0TnVtKDExOSkKLSAgICAgICAgLnNldElubmVy
KGlubmVyTWVyZ2luZykKLSAgICAgICAgLnNldE9uZW9mSW5uZXIoaW5uZXJNZXJnaW5nKQotICAg
ICAgICAuYnVpbGQoKTsKLQotICAgIExhenlNZXNzYWdlTGl0ZSBtZXJnZWQgPSBMYXp5TWVzc2Fn
ZUxpdGUKLSAgICAgICAgLm5ld0J1aWxkZXIob3V0ZXJCYXNlKQotICAgICAgICAubWVyZ2VGcm9t
KG91dGVyTWVyZ2luZykKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExOSwg
bWVyZ2VkLmdldE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIyLCBtZXJnZWQuZ2V0TnVtV2l0
aERlZmF1bHQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExNSwgbWVyZ2VkLmdldElubmVyKCkuZ2V0
TnVtKCkpOwotICAgIGFzc2VydEVxdWFscyg0MiwgbWVyZ2VkLmdldElubmVyKCkuZ2V0TnVtV2l0
aERlZmF1bHQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExNSwgbWVyZ2VkLmdldE9uZW9mSW5uZXIo
KS5nZXROdW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQyLCBtZXJnZWQuZ2V0T25lb2ZJbm5lcigp
LmdldE51bVdpdGhEZWZhdWx0KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1lcmdlRGVm
YXVsdFZhbHVlcygpIHsKLSAgICBMYXp5SW5uZXJNZXNzYWdlTGl0ZSBpbm5lckJhc2UgPSBMYXp5
SW5uZXJNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE51bSgxMTUpCi0gICAg
ICAgIC5idWlsZCgpOwotICAgIExhenlNZXNzYWdlTGl0ZSBvdXRlckJhc2UgPSBMYXp5TWVzc2Fn
ZUxpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXROdW0oMTE5KQotICAgICAgICAuc2V0TnVt
V2l0aERlZmF1bHQoMTIyKQotICAgICAgICAuc2V0SW5uZXIoaW5uZXJCYXNlKQotICAgICAgICAu
c2V0T25lb2ZJbm5lcihpbm5lckJhc2UpCi0gICAgICAgIC5idWlsZCgpOwotCi0gICAgTGF6eU1l
c3NhZ2VMaXRlIG91dGVyTWVyZ2luZyA9IExhenlNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkKLSAg
ICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBMYXp5TWVzc2FnZUxpdGUgbWVyZ2VkID0gTGF6eU1lc3Nh
Z2VMaXRlCi0gICAgICAgIC5uZXdCdWlsZGVyKG91dGVyQmFzZSkKLSAgICAgICAgLm1lcmdlRnJv
bShvdXRlck1lcmdpbmcpCi0gICAgICAgIC5idWlsZCgpOwotICAgIC8vIE1lcmdpbmcgZGVmYXVs
dC1pbnN0YW5jZSBzaG91bGRuJ3Qgb3ZlcndyaXRlIHZhbHVlcyBpbiB0aGUgYmFzZSBtZXNzYWdl
LgotICAgIGFzc2VydEVxdWFscygxMTksIG1lcmdlZC5nZXROdW0oKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDEyMiwgbWVyZ2VkLmdldE51bVdpdGhEZWZhdWx0KCkpOwotICAgIGFzc2VydEVxdWFscygx
MTUsIG1lcmdlZC5nZXRJbm5lcigpLmdldE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDIsIG1l
cmdlZC5nZXRJbm5lcigpLmdldE51bVdpdGhEZWZhdWx0KCkpOwotICAgIGFzc2VydEVxdWFscygx
MTUsIG1lcmdlZC5nZXRPbmVvZklubmVyKCkuZ2V0TnVtKCkpOwotICAgIGFzc2VydEVxdWFscyg0
MiwgbWVyZ2VkLmdldE9uZW9mSW5uZXIoKS5nZXROdW1XaXRoRGVmYXVsdCgpKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemUoKSB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uIHsKLSAgICBMYXp5TmVzdGVkSW5uZXJNZXNzYWdlTGl0ZSBuZXN0ZWQgPSBMYXp5
TmVzdGVkSW5uZXJNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE51bSgzKQot
ICAgICAgICAuYnVpbGQoKTsKLSAgICBMYXp5SW5uZXJNZXNzYWdlTGl0ZSBpbm5lciA9IExhenlJ
bm5lck1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0TnVtKDIpCi0gICAgICAg
IC5zZXROZXN0ZWQobmVzdGVkKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBMYXp5TWVzc2FnZUxp
dGUgb3V0ZXIgPSBMYXp5TWVzc2FnZUxpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXROdW0o
MSkKLSAgICAgICAgLnNldElubmVyKGlubmVyKQotICAgICAgICAuc2V0T25lb2ZJbm5lcihpbm5l
cikKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBCeXRlU3RyaW5nIGJ5dGVzID0gb3V0ZXIudG9C
eXRlU3RyaW5nKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGJ5dGVzLnNpemUoKSwgb3V0ZXIuZ2V0U2Vy
aWFsaXplZFNpemUoKSk7Ci0KLSAgICBMYXp5TWVzc2FnZUxpdGUgZGVzZXJpYWxpemVkID0gTGF6
eU1lc3NhZ2VMaXRlLnBhcnNlRnJvbShieXRlcyk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMSwgZGVz
ZXJpYWxpemVkLmdldE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDIxLCAgZGVzZXJpYWxpemVk
LmdldE51bVdpdGhEZWZhdWx0KCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDIsICBkZXNlcmlhbGl6
ZWQuZ2V0SW5uZXIoKS5nZXROdW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQyLCAgZGVzZXJpYWxp
emVkLmdldElubmVyKCkuZ2V0TnVtV2l0aERlZmF1bHQoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMo
MywgIGRlc2VyaWFsaXplZC5nZXRJbm5lcigpLmdldE5lc3RlZCgpLmdldE51bSgpKTsKLSAgICBh
c3NlcnRFcXVhbHMoNCwgIGRlc2VyaWFsaXplZC5nZXRJbm5lcigpLmdldE5lc3RlZCgpLmdldE51
bVdpdGhEZWZhdWx0KCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDIsICBkZXNlcmlhbGl6ZWQuZ2V0
T25lb2ZJbm5lcigpLmdldE51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDIsICBkZXNlcmlhbGl6
ZWQuZ2V0T25lb2ZJbm5lcigpLmdldE51bVdpdGhEZWZhdWx0KCkpOwotICAgIGFzc2VydEVxdWFs
cygzLCAgZGVzZXJpYWxpemVkLmdldE9uZW9mSW5uZXIoKS5nZXROZXN0ZWQoKS5nZXROdW0oKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDQsICBkZXNlcmlhbGl6ZWQuZ2V0T25lb2ZJbm5lcigpLmdldE5l
c3RlZCgpLmdldE51bVdpdGhEZWZhdWx0KCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKGJ5dGVzLCBk
ZXNlcmlhbGl6ZWQudG9CeXRlU3RyaW5nKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEV4
dGVuc2lvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBMYXp5SW5uZXJNZXNzYWdlTGl0ZS5C
dWlsZGVyIGlubmVyQnVpbGRlciA9IExhenlJbm5lck1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKTsK
LSAgICBpbm5lckJ1aWxkZXIuc2V0RXh0ZW5zaW9uKAotICAgICAgICBMYXp5RXh0ZW5zaW9uLmV4
dGVuc2lvbiwgTGF6eUV4dGVuc2lvbi5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE5hbWUoIm5h
bWUiKS5idWlsZCgpKTsKLSAgICBhc3NlcnRUcnVlKGlubmVyQnVpbGRlci5oYXNFeHRlbnNpb24o
TGF6eUV4dGVuc2lvbi5leHRlbnNpb24pKTsKLSAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCBpbm5l
ckJ1aWxkZXIuZ2V0RXh0ZW5zaW9uKExhenlFeHRlbnNpb24uZXh0ZW5zaW9uKS5nZXROYW1lKCkp
OwotCi0gICAgTGF6eUlubmVyTWVzc2FnZUxpdGUgaW5uZXJNZXNzYWdlID0gaW5uZXJCdWlsZGVy
LmJ1aWxkKCk7Ci0gICAgYXNzZXJ0VHJ1ZShpbm5lck1lc3NhZ2UuaGFzRXh0ZW5zaW9uKExhenlF
eHRlbnNpb24uZXh0ZW5zaW9uKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgaW5uZXJNZXNz
YWdlLmdldEV4dGVuc2lvbihMYXp5RXh0ZW5zaW9uLmV4dGVuc2lvbikuZ2V0TmFtZSgpKTsKLQot
ICAgIExhenlNZXNzYWdlTGl0ZSBsaXRlID0gTGF6eU1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKQot
ICAgICAgICAuc2V0SW5uZXIoaW5uZXJNZXNzYWdlKS5idWlsZCgpOwotICAgIGFzc2VydFRydWUo
bGl0ZS5nZXRJbm5lcigpLmhhc0V4dGVuc2lvbihMYXp5RXh0ZW5zaW9uLmV4dGVuc2lvbikpOwot
ICAgIGFzc2VydEVxdWFscygibmFtZSIsIGxpdGUuZ2V0SW5uZXIoKS5nZXRFeHRlbnNpb24oTGF6
eUV4dGVuc2lvbi5leHRlbnNpb24pLmdldE5hbWUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5U3RyaW5nQXJyYXlM
aXN0VGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L0xhenlTdHJpbmdBcnJheUxpc3RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBmNDJhYzUwNjA3NWIzOTRlMjAyNGY3NTRiNjIwOGNhZmRiZWUzNjEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xhenlTdHJpbmdBcnJheUxpc3RUZXN0LmphdmEKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNjIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IHN0YXRpYyBqYXZh
LnV0aWwuQXJyYXlzLmFzTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsK
LQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbmN1cnJl
bnRNb2RpZmljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1w
b3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIFRlc3RzIGZvciB7QGxpbmsgTGF6eVN0cmlu
Z0FycmF5TGlzdH0uCi0gKgotICogQGF1dGhvciBqb25wQGdvb2dsZS5jb20gKEpvbiBQZXJsb3cp
Ci0gKi8KLXB1YmxpYyBjbGFzcyBMYXp5U3RyaW5nQXJyYXlMaXN0VGVzdCBleHRlbmRzIFRlc3RD
YXNlIHsKLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgU1RSSU5HX0EgPSAiQSI7Ci0gIHByaXZh
dGUgc3RhdGljIFN0cmluZyBTVFJJTkdfQiA9ICJCIjsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5n
IFNUUklOR19DID0gIkMiOwotCi0gIHByaXZhdGUgc3RhdGljIEJ5dGVTdHJpbmcgQllURV9TVFJJ
TkdfQSA9IEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJBIik7Ci0gIHByaXZhdGUgc3RhdGljIEJ5
dGVTdHJpbmcgQllURV9TVFJJTkdfQiA9IEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJCIik7Ci0g
IHByaXZhdGUgc3RhdGljIEJ5dGVTdHJpbmcgQllURV9TVFJJTkdfQyA9IEJ5dGVTdHJpbmcuY29w
eUZyb21VdGY4KCJDIik7Ci0KLSAgcHVibGljIHZvaWQgdGVzdEp1c3RTdHJpbmdzKCkgewotICAg
IExhenlTdHJpbmdBcnJheUxpc3QgbGlzdCA9IG5ldyBMYXp5U3RyaW5nQXJyYXlMaXN0KCk7Ci0g
ICAgbGlzdC5hZGQoU1RSSU5HX0EpOwotICAgIGxpc3QuYWRkKFNUUklOR19CKTsKLSAgICBsaXN0
LmFkZChTVFJJTkdfQyk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMywgbGlzdC5zaXplKCkpOwotICAg
IGFzc2VydFNhbWUoU1RSSU5HX0EsIGxpc3QuZ2V0KDApKTsKLSAgICBhc3NlcnRTYW1lKFNUUklO
R19CLCBsaXN0LmdldCgxKSk7Ci0gICAgYXNzZXJ0U2FtZShTVFJJTkdfQywgbGlzdC5nZXQoMikp
OwotCi0gICAgbGlzdC5zZXQoMSwgU1RSSU5HX0MpOwotICAgIGFzc2VydFNhbWUoU1RSSU5HX0Ms
IGxpc3QuZ2V0KDEpKTsKLQotICAgIGxpc3QucmVtb3ZlKDEpOwotICAgIGFzc2VydFNhbWUoU1RS
SU5HX0EsIGxpc3QuZ2V0KDApKTsKLSAgICBhc3NlcnRTYW1lKFNUUklOR19DLCBsaXN0LmdldCgx
KSk7Ci0KLSAgICBMaXN0PEJ5dGVTdHJpbmc+IGJ5dGVTdHJpbmdMaXN0ID0gbGlzdC5hc0J5dGVT
dHJpbmdMaXN0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJZVEVfU1RSSU5HX0EsIGJ5dGVTdHJpbmdM
aXN0LmdldCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJZVEVfU1RSSU5HX0MsIGJ5dGVTdHJpbmdM
aXN0LmdldCgxKSk7Ci0KLSAgICAvLyBVbmRlcmx5aW5nIGxpc3Qgc2hvdWxkIGJlIHRyYW5zZm9y
bWVkLgotICAgIGFzc2VydFNhbWUoYnl0ZVN0cmluZ0xpc3QuZ2V0KDApLCBsaXN0LmdldEJ5dGVT
dHJpbmcoMCkpOwotICAgIGFzc2VydFNhbWUoYnl0ZVN0cmluZ0xpc3QuZ2V0KDEpLCBsaXN0Lmdl
dEJ5dGVTdHJpbmcoMSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEp1c3RCeXRlU3RyaW5n
KCkgewotICAgIExhenlTdHJpbmdBcnJheUxpc3QgbGlzdCA9IG5ldyBMYXp5U3RyaW5nQXJyYXlM
aXN0KCk7Ci0gICAgbGlzdC5hZGQoQllURV9TVFJJTkdfQSk7Ci0gICAgbGlzdC5hZGQoQllURV9T
VFJJTkdfQik7Ci0gICAgbGlzdC5hZGQoQllURV9TVFJJTkdfQyk7Ci0KLSAgICBhc3NlcnRFcXVh
bHMoMywgbGlzdC5zaXplKCkpOwotICAgIGFzc2VydFNhbWUoQllURV9TVFJJTkdfQSwgbGlzdC5n
ZXRCeXRlU3RyaW5nKDApKTsKLSAgICBhc3NlcnRTYW1lKEJZVEVfU1RSSU5HX0IsIGxpc3QuZ2V0
Qnl0ZVN0cmluZygxKSk7Ci0gICAgYXNzZXJ0U2FtZShCWVRFX1NUUklOR19DLCBsaXN0LmdldEJ5
dGVTdHJpbmcoMikpOwotCi0gICAgbGlzdC5yZW1vdmUoMSk7Ci0gICAgYXNzZXJ0U2FtZShCWVRF
X1NUUklOR19BLCBsaXN0LmdldEJ5dGVTdHJpbmcoMCkpOwotICAgIGFzc2VydFNhbWUoQllURV9T
VFJJTkdfQywgbGlzdC5nZXRCeXRlU3RyaW5nKDEpKTsKLQotICAgIExpc3Q8Qnl0ZVN0cmluZz4g
Ynl0ZVN0cmluZ0xpc3QgPSBsaXN0LmFzQnl0ZVN0cmluZ0xpc3QoKTsKLSAgICBhc3NlcnRTYW1l
KEJZVEVfU1RSSU5HX0EsIGJ5dGVTdHJpbmdMaXN0LmdldCgwKSk7Ci0gICAgYXNzZXJ0U2FtZShC
WVRFX1NUUklOR19DLCBieXRlU3RyaW5nTGlzdC5nZXQoMSkpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdENvbnZlcnNpb25CYWNrQW5kRm9ydGgoKSB7Ci0gICAgTGF6eVN0cmluZ0FycmF5TGlz
dCBsaXN0ID0gbmV3IExhenlTdHJpbmdBcnJheUxpc3QoKTsKLSAgICBsaXN0LmFkZChTVFJJTkdf
QSk7Ci0gICAgbGlzdC5hZGQoQllURV9TVFJJTkdfQik7Ci0gICAgbGlzdC5hZGQoQllURV9TVFJJ
TkdfQyk7Ci0KLSAgICAvLyBTdHJpbmcgYSBzaG91bGQgYmUgdGhlIHNhbWUgYmVjYXVzZSBpdCB3
YXMgb3JpZ2luYWxseSBhIHN0cmluZwotICAgIGFzc2VydFNhbWUoU1RSSU5HX0EsIGxpc3QuZ2V0
KDApKTsKLQotICAgIC8vIFN0cmluZyBiIGFuZCBjIHNob3VsZCBiZSBkaWZmZXJlbnQgYmVjYXVz
ZSB0aGUgc3RyaW5nIGhhcyB0byBiZSBjb21wdXRlZAotICAgIC8vIGZyb20gdGhlIEJ5dGVTdHJp
bmcKLSAgICBTdHJpbmcgYlByaW1lID0gbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0Tm90U2FtZShT
VFJJTkdfQiwgYlByaW1lKTsKLSAgICBhc3NlcnRFcXVhbHMoU1RSSU5HX0IsIGJQcmltZSk7Ci0g
ICAgU3RyaW5nIGNQcmltZSA9IGxpc3QuZ2V0KDIpOwotICAgIGFzc2VydE5vdFNhbWUoU1RSSU5H
X0MsIGNQcmltZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFNUUklOR19DLCBjUHJpbWUpOwotCi0gICAg
Ly8gU3RyaW5nIGMgYW5kIGMgc2hvdWxkIHN0YXkgdGhlIHNhbWUgb25jZSBjYWNoZWQuCi0gICAg
YXNzZXJ0U2FtZShiUHJpbWUsIGxpc3QuZ2V0KDEpKTsKLSAgICBhc3NlcnRTYW1lKGNQcmltZSwg
bGlzdC5nZXQoMikpOwotCi0gICAgLy8gQnl0ZVN0cmluZyBuZWVkcyB0byBiZSBjb21wdXRlZCBm
cm9tIHN0cmluZyBmb3IgYm90aCBhIGFuZCBiCi0gICAgQnl0ZVN0cmluZyBhUHJpbWVCeXRlU3Ry
aW5nID0gbGlzdC5nZXRCeXRlU3RyaW5nKDApOwotICAgIGFzc2VydEVxdWFscyhCWVRFX1NUUklO
R19BLCBhUHJpbWVCeXRlU3RyaW5nKTsKLSAgICBCeXRlU3RyaW5nIGJQcmltZUJ5dGVTdHJpbmcg
PSBsaXN0LmdldEJ5dGVTdHJpbmcoMSk7Ci0gICAgYXNzZXJ0Tm90U2FtZShCWVRFX1NUUklOR19C
LCBiUHJpbWVCeXRlU3RyaW5nKTsKLSAgICBhc3NlcnRFcXVhbHMoQllURV9TVFJJTkdfQiwgbGlz
dC5nZXRCeXRlU3RyaW5nKDEpKTsKLQotICAgIC8vIE9uY2UgY2FjaGVkLCBCeXRlU3RyaW5nIHNo
b3VsZCBzdGF5IGNhY2hlZC4KLSAgICBhc3NlcnRTYW1lKGFQcmltZUJ5dGVTdHJpbmcsIGxpc3Qu
Z2V0Qnl0ZVN0cmluZygwKSk7Ci0gICAgYXNzZXJ0U2FtZShiUHJpbWVCeXRlU3RyaW5nLCBsaXN0
LmdldEJ5dGVTdHJpbmcoMSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENvcHlDb25zdHJ1
Y3RvckNvcGllc0J5UmVmZXJlbmNlKCkgewotICAgIExhenlTdHJpbmdBcnJheUxpc3QgbGlzdDEg
PSBuZXcgTGF6eVN0cmluZ0FycmF5TGlzdCgpOwotICAgIGxpc3QxLmFkZChTVFJJTkdfQSk7Ci0g
ICAgbGlzdDEuYWRkKEJZVEVfU1RSSU5HX0IpOwotICAgIGxpc3QxLmFkZChCWVRFX1NUUklOR19D
KTsKLQotICAgIExhenlTdHJpbmdBcnJheUxpc3QgbGlzdDIgPSBuZXcgTGF6eVN0cmluZ0FycmF5
TGlzdChsaXN0MSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIGxpc3QyLnNpemUoKSk7Ci0gICAgYXNz
ZXJ0U2FtZShTVFJJTkdfQSwgbGlzdDIuZ2V0KDApKTsKLSAgICBhc3NlcnRTYW1lKEJZVEVfU1RS
SU5HX0IsIGxpc3QyLmdldEJ5dGVTdHJpbmcoMSkpOwotICAgIGFzc2VydFNhbWUoQllURV9TVFJJ
TkdfQywgbGlzdDIuZ2V0Qnl0ZVN0cmluZygyKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
TGlzdENvcHlDb25zdHJ1Y3RvcigpIHsKLSAgICBMaXN0PFN0cmluZz4gbGlzdDEgPSBuZXcgQXJy
YXlMaXN0PFN0cmluZz4oKTsKLSAgICBsaXN0MS5hZGQoU1RSSU5HX0EpOwotICAgIGxpc3QxLmFk
ZChTVFJJTkdfQik7Ci0gICAgbGlzdDEuYWRkKFNUUklOR19DKTsKLQotICAgIExhenlTdHJpbmdB
cnJheUxpc3QgbGlzdDIgPSBuZXcgTGF6eVN0cmluZ0FycmF5TGlzdChsaXN0MSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDMsIGxpc3QyLnNpemUoKSk7Ci0gICAgYXNzZXJ0U2FtZShTVFJJTkdfQSwgbGlz
dDIuZ2V0KDApKTsKLSAgICBhc3NlcnRTYW1lKFNUUklOR19CLCBsaXN0Mi5nZXQoMSkpOwotICAg
IGFzc2VydFNhbWUoU1RSSU5HX0MsIGxpc3QyLmdldCgyKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0QWRkQWxsQ29waWVzQnlSZWZlcmVuY2VJZlBvc3NpYmxlKCkgewotICAgIExhenlTdHJp
bmdBcnJheUxpc3QgbGlzdDEgPSBuZXcgTGF6eVN0cmluZ0FycmF5TGlzdCgpOwotICAgIGxpc3Qx
LmFkZChTVFJJTkdfQSk7Ci0gICAgbGlzdDEuYWRkKEJZVEVfU1RSSU5HX0IpOwotICAgIGxpc3Qx
LmFkZChCWVRFX1NUUklOR19DKTsKLQotICAgIExhenlTdHJpbmdBcnJheUxpc3QgbGlzdDIgPSBu
ZXcgTGF6eVN0cmluZ0FycmF5TGlzdCgpOwotICAgIGxpc3QyLmFkZEFsbChsaXN0MSk7Ci0KLSAg
ICBhc3NlcnRFcXVhbHMoMywgbGlzdDIuc2l6ZSgpKTsKLSAgICBhc3NlcnRTYW1lKFNUUklOR19B
LCBsaXN0Mi5nZXQoMCkpOwotICAgIGFzc2VydFNhbWUoQllURV9TVFJJTkdfQiwgbGlzdDIuZ2V0
Qnl0ZVN0cmluZygxKSk7Ci0gICAgYXNzZXJ0U2FtZShCWVRFX1NUUklOR19DLCBsaXN0Mi5nZXRC
eXRlU3RyaW5nKDIpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWNhdGlvbldp
dGhJdGVyYXRpb24oKSB7Ci0gICAgTGF6eVN0cmluZ0FycmF5TGlzdCBsaXN0ID0gbmV3IExhenlT
dHJpbmdBcnJheUxpc3QoKTsKLSAgICBsaXN0LmFkZEFsbChhc0xpc3QoU1RSSU5HX0EsIFNUUklO
R19CLCBTVFJJTkdfQykpOwotICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3IgPSBsaXN0Lml0
ZXJhdG9yKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIGxpc3Quc2l6ZSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoU1RSSU5HX0EsIGxpc3QuZ2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoU1RSSU5HX0Es
IGl0ZXJhdG9yLm5leHQoKSk7Ci0gICAgCi0gICAgLy8gRG9lcyBub3Qgc3RydWN0dXJhbGx5IG1v
ZGlmeS4KLSAgICBpdGVyYXRvciA9IGxpc3QuaXRlcmF0b3IoKTsKLSAgICBsaXN0LnNldCgwLCBT
VFJJTkdfQik7Ci0gICAgaXRlcmF0b3IubmV4dCgpOwotICAgIAotICAgIGxpc3QucmVtb3ZlKDAp
OwotICAgIHRyeSB7Ci0gICAgICBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmYWlsKCk7Ci0gICAg
fSBjYXRjaCAoQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBl
eHBlY3RlZAotICAgIH0KLSAgICAKLSAgICBpdGVyYXRvciA9IGxpc3QuaXRlcmF0b3IoKTsKLSAg
ICBsaXN0LmFkZCgwLCBTVFJJTkdfQyk7Ci0gICAgdHJ5IHsKLSAgICAgIGl0ZXJhdG9yLm5leHQo
KTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMg
dm9pZCB0ZXN0TWFrZUltbXV0YWJsZSgpIHsKLSAgICBMYXp5U3RyaW5nQXJyYXlMaXN0IGxpc3Qg
PSBuZXcgTGF6eVN0cmluZ0FycmF5TGlzdCgpOwotICAgIGxpc3QuYWRkKFNUUklOR19BKTsKLSAg
ICBsaXN0LmFkZChTVFJJTkdfQik7Ci0gICAgbGlzdC5hZGQoU1RSSU5HX0MpOwotICAgIGxpc3Qu
bWFrZUltbXV0YWJsZSgpOwotICAgIGFzc2VydEdlbmVyaWNMaXN0SW1tdXRhYmxlKGxpc3QsIFNU
UklOR19BKTsKLSAgICAKLSAgICAvLyBMYXp5U3RyaW5nQXJyYXlMaXN0IGhhcyBleHRyYSBtZXRo
b2RzIG5vdCBjb3ZlcmVkIGluIHRoZSBnZW5lcmljCi0gICAgLy8gYXNzZXJ0aW9uLgotICAgIAot
ICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZChCWVRFX1NUUklOR19BLnRvQnl0ZUFycmF5KCkpOwot
ICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u
IGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBs
aXN0LmFkZChCWVRFX1NUUklOR19BKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0K
LSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRBbGxCeXRlQXJyYXkoYXNMaXN0KEJZVEVf
U1RSSU5HX0EudG9CeXRlQXJyYXkoKSkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVu
c3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAg
fQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbEJ5dGVTdHJpbmcoYXNMaXN0KEJZ
VEVfU1RSSU5HX0EpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9w
ZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAg
ICB0cnkgewotICAgICAgbGlzdC5tZXJnZUZyb20obmV3IExhenlTdHJpbmdBcnJheUxpc3QoKSk7
Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRp
b24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAg
IGxpc3Quc2V0KDAsIEJZVEVfU1RSSU5HX0EudG9CeXRlQXJyYXkoKSk7Ci0gICAgICBmYWlsKCk7
Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAg
Ly8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0KDAsIEJZ
VEVfU1RSSU5HX0EpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3Bl
cmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAot
ICBwdWJsaWMgdm9pZCB0ZXN0SW1tdXRhYmlsaXR5UHJvcGFnYXRpb24oKSB7Ci0gICAgTGF6eVN0
cmluZ0FycmF5TGlzdCBsaXN0ID0gbmV3IExhenlTdHJpbmdBcnJheUxpc3QoKTsKLSAgICBsaXN0
LmFkZChTVFJJTkdfQSk7Ci0gICAgbGlzdC5tYWtlSW1tdXRhYmxlKCk7Ci0KLSAgICBhc3NlcnRH
ZW5lcmljTGlzdEltbXV0YWJsZShsaXN0LmFzQnl0ZVN0cmluZ0xpc3QoKSwgQllURV9TVFJJTkdf
QSk7Ci0gICAgCi0gICAgLy8gQXJyYXlzIHVzZSByZWZlcmVuY2UgZXF1YWxpdHkgc28gbmVlZCB0
byByZXRyaWV2ZSB0aGUgdW5kZXJseWluZyB2YWx1ZQotICAgIC8vIHRvIHByb3Blcmx5IHRlc3Qg
ZGVlcCBpbW11dGFiaWxpdHkuCi0gICAgTGlzdDxieXRlW10+IGJ5dGVBcnJheUxpc3QgPSBsaXN0
LmFzQnl0ZUFycmF5TGlzdCgpOwotICAgIGFzc2VydEdlbmVyaWNMaXN0SW1tdXRhYmxlKGJ5dGVB
cnJheUxpc3QsIGJ5dGVBcnJheUxpc3QuZ2V0KDApKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0
aWMgPFQ+IHZvaWQgYXNzZXJ0R2VuZXJpY0xpc3RJbW11dGFibGUoTGlzdDxUPiBsaXN0LCBUIHZh
bHVlKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkKHZhbHVlKTsKLSAgICAgIGZhaWwoKTsK
LSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGQoMCwgdmFs
dWUpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0g
ICAgICBsaXN0LmFkZEFsbChhc0xpc3QodmFsdWUpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNh
dGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3Rl
ZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRBbGwoMCwgYXNMaXN0KHZh
bHVlKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25F
eGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0KLSAgICB0cnkgewotICAg
ICAgbGlzdC5jbGVhcigpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAot
ICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZSgwKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNh
dGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3Rl
ZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZW1vdmUodmFsdWUpOwotICAg
ICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0
LnJlbW92ZUFsbChhc0xpc3QodmFsdWUpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChV
bnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAg
IH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZXRhaW5BbGwoYXNMaXN0KCkpOwotICAg
ICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0
LnJldGFpbkFsbChhc0xpc3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBw
b3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0g
ICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0KDAsIHZhbHVlKTsKLSAgICAgIGZhaWwoKTsK
LSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBleHBlY3RlZAotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3Qv
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xhenlTdHJpbmdFbmRUb0VuZFRlc3QuamF2YSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MYXp5U3RyaW5nRW5kVG9F
bmRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZjQxNGFhYzYwZmE3
ZWY1ZTRmOWNhZTAyMGY0NzY1NWFjNzdkNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL0xhenlTdHJpbmdFbmRUb0VuZFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20u
Z29vZ2xlLnByb3RvYnVmOwotCi0KLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFBy
b3RvOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgamF2YS5p
by5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKiBUZXN0cyB0byBtYWtlIHN1cmUgdGhlIGxhenkgY29u
dmVyc2lvbiBvZiBVVEY4LWVuY29kZWQgYnl0ZSBhcnJheXMgdG8KLSAqIHN0cmluZ3Mgd29ya3Mg
Y29ycmVjdGx5LgotICoKLSAqIEBhdXRob3Igam9ucEBnb29nbGUuY29tIChKb24gUGVybG93KQot
ICovCi1wdWJsaWMgY2xhc3MgTGF6eVN0cmluZ0VuZFRvRW5kVGVzdCBleHRlbmRzIFRlc3RDYXNl
IHsKLQotICBwcml2YXRlIHN0YXRpYyBCeXRlU3RyaW5nIFRFU1RfQUxMX1RZUEVTX1NFUklBTEla
RURfV0lUSF9JTExFR0FMX1VURjggPQotICAgICAgQnl0ZVN0cmluZy5jb3B5RnJvbShuZXcgYnl0
ZVtdIHsKLSAgICAgICAgICAxMTQsIDQsIC0xLCAwLCAtMSwgMCwgLTMwLCAyLCA0LCAtMSwKLSAg
ICAgICAgICAwLCAtMSwgMCwgLTMwLCAyLCA0LCAtMSwgMCwgLTEsIDAsIH0pOwotCi0gIHByaXZh
dGUgQnl0ZVN0cmluZyBlbmNvZGVkVGVzdEFsbFR5cGVzOwotCi0gIEBPdmVycmlkZQotICBwcm90
ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIHN1cGVyLnNldFVwKCk7
Ci0gICAgdGhpcy5lbmNvZGVkVGVzdEFsbFR5cGVzID0gVW5pdHRlc3RQcm90by5UZXN0QWxsVHlw
ZXMubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25hbFN0cmluZygiZm9vIikKLSAgICAg
ICAgLmFkZFJlcGVhdGVkU3RyaW5nKCJiYXIiKQotICAgICAgICAuYWRkUmVwZWF0ZWRTdHJpbmco
ImJheiIpCi0gICAgICAgIC5idWlsZCgpCi0gICAgICAgIC50b0J5dGVTdHJpbmcoKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBUZXN0cyB0aGF0IGFuIGludmFsaWQgVVRGOCBzdHJpbmcgd2lsbCByb3Vu
ZHRyaXAgdGhyb3VnaCBhIHBhcnNlCi0gICAqIGFuZCBzZXJpYWxpemF0aW9uLgotICAgKi8KLSAg
cHVibGljIHZvaWQgdGVzdFBhcnNlQW5kU2VyaWFsaXplKCkgdGhyb3dzIEludmFsaWRQcm90b2Nv
bEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgVW5pdHRlc3RQcm90by5UZXN0QWxsVHlwZXMgdFYyID0g
VW5pdHRlc3RQcm90by5UZXN0QWxsVHlwZXMucGFyc2VGcm9tKAotICAgICAgICBURVNUX0FMTF9U
WVBFU19TRVJJQUxJWkVEX1dJVEhfSUxMRUdBTF9VVEY4KTsKLSAgICBCeXRlU3RyaW5nIGJ5dGVz
ID0gdFYyLnRvQnl0ZVN0cmluZygpOwotICAgIGFzc2VydEVxdWFscyhURVNUX0FMTF9UWVBFU19T
RVJJQUxJWkVEX1dJVEhfSUxMRUdBTF9VVEY4LCBieXRlcyk7Ci0KLSAgICB0VjIuZ2V0T3B0aW9u
YWxTdHJpbmcoKTsKLSAgICBieXRlcyA9IHRWMi50b0J5dGVTdHJpbmcoKTsKLSAgICBhc3NlcnRF
cXVhbHMoVEVTVF9BTExfVFlQRVNfU0VSSUFMSVpFRF9XSVRIX0lMTEVHQUxfVVRGOCwgYnl0ZXMp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlQW5kV3JpdGUoKSB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgIFVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzIHRWMiA9IFVuaXR0ZXN0UHJv
dG8uVGVzdEFsbFR5cGVzLnBhcnNlRnJvbSgKLSAgICAgICAgVEVTVF9BTExfVFlQRVNfU0VSSUFM
SVpFRF9XSVRIX0lMTEVHQUxfVVRGOCk7Ci0gICAgYnl0ZVtdIHNpbmsgPSBuZXcgYnl0ZVtURVNU
X0FMTF9UWVBFU19TRVJJQUxJWkVEX1dJVEhfSUxMRUdBTF9VVEY4LnNpemUoKV07Ci0gICAgQ29k
ZWRPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gQ29kZWRPdXRwdXRTdHJlYW0ubmV3SW5zdGFu
Y2Uoc2luayk7Ci0gICAgdFYyLndyaXRlVG8ob3V0cHV0U3RyZWFtKTsKLSAgICBvdXRwdXRTdHJl
YW0uZmx1c2goKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIFRFU1RfQUxMX1RZUEVTX1NF
UklBTElaRURfV0lUSF9JTExFR0FMX1VURjgsCi0gICAgICAgIEJ5dGVTdHJpbmcuY29weUZyb20o
c2luaykpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FjaGluZygpIHsKLSAgICBTdHJp
bmcgYSA9ICJhIjsKLSAgICBTdHJpbmcgYiA9ICJiIjsKLSAgICBTdHJpbmcgYyA9ICJjIjsKLSAg
ICBVbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlcyBwcm90byA9IFVuaXR0ZXN0UHJvdG8uVGVzdEFs
bFR5cGVzLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxTdHJpbmcoYSkKLSAgICAg
ICAgLmFkZFJlcGVhdGVkU3RyaW5nKGIpCi0gICAgICAgIC5hZGRSZXBlYXRlZFN0cmluZyhjKQot
ICAgICAgICAuYnVpbGQoKTsKLQotICAgIC8vIFN0cmluZyBzaG91bGQgYmUgdGhlIG9uZSB3ZSBw
YXNzZWQgaXQuCi0gICAgYXNzZXJ0U2FtZShhLCBwcm90by5nZXRPcHRpb25hbFN0cmluZygpKTsK
LSAgICBhc3NlcnRTYW1lKGIsIHByb3RvLmdldFJlcGVhdGVkU3RyaW5nKDApKTsKLSAgICBhc3Nl
cnRTYW1lKGMsIHByb3RvLmdldFJlcGVhdGVkU3RyaW5nKDEpKTsKLQotCi0gICAgLy8gRW5zdXJl
IHNlcmlhbGl6YXRpb24ga2VlcHMgc3RyaW5ncyBjYWNoZWQuCi0gICAgcHJvdG8udG9CeXRlU3Ry
aW5nKCk7Ci0KLSAgICAvLyBBbmQgbm93IHRoZSBzdHJpbmcgc2hvdWxkIHN0YXkgY2FjaGVkLgot
ICAgIGFzc2VydFNhbWUoYSwgcHJvdG8uZ2V0T3B0aW9uYWxTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0
U2FtZShiLCBwcm90by5nZXRSZXBlYXRlZFN0cmluZygwKSk7Ci0gICAgYXNzZXJ0U2FtZShjLCBw
cm90by5nZXRSZXBlYXRlZFN0cmluZygxKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Tm9T
dHJpbmdDYWNoaW5nSWZPbmx5Qnl0ZXNBY2Nlc3NlZCgpIHRocm93cyBFeGNlcHRpb24gewotICAg
IFVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzIHByb3RvID0KLSAgICAgICAgVW5pdHRlc3RQcm90
by5UZXN0QWxsVHlwZXMucGFyc2VGcm9tKGVuY29kZWRUZXN0QWxsVHlwZXMpOwotICAgIEJ5dGVT
dHJpbmcgb3B0aW9uYWwgPSBwcm90by5nZXRPcHRpb25hbFN0cmluZ0J5dGVzKCk7Ci0gICAgYXNz
ZXJ0U2FtZShvcHRpb25hbCwgcHJvdG8uZ2V0T3B0aW9uYWxTdHJpbmdCeXRlcygpKTsKLSAgICBh
c3NlcnRTYW1lKG9wdGlvbmFsLCBwcm90by50b0J1aWxkZXIoKS5nZXRPcHRpb25hbFN0cmluZ0J5
dGVzKCkpOwotCi0gICAgQnl0ZVN0cmluZyByZXBlYXRlZDAgPSBwcm90by5nZXRSZXBlYXRlZFN0
cmluZ0J5dGVzKDApOwotICAgIEJ5dGVTdHJpbmcgcmVwZWF0ZWQxID0gcHJvdG8uZ2V0UmVwZWF0
ZWRTdHJpbmdCeXRlcygxKTsKLSAgICBhc3NlcnRTYW1lKHJlcGVhdGVkMCwgcHJvdG8uZ2V0UmVw
ZWF0ZWRTdHJpbmdCeXRlcygwKSk7Ci0gICAgYXNzZXJ0U2FtZShyZXBlYXRlZDEsIHByb3RvLmdl
dFJlcGVhdGVkU3RyaW5nQnl0ZXMoMSkpOwotICAgIGFzc2VydFNhbWUocmVwZWF0ZWQwLCBwcm90
by50b0J1aWxkZXIoKS5nZXRSZXBlYXRlZFN0cmluZ0J5dGVzKDApKTsKLSAgICBhc3NlcnRTYW1l
KHJlcGVhdGVkMSwgcHJvdG8udG9CdWlsZGVyKCkuZ2V0UmVwZWF0ZWRTdHJpbmdCeXRlcygxKSk7
Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9MaXRlRXF1YWxzQW5kSGFzaFRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9MaXRlRXF1YWxzQW5kSGFzaFRlc3QuamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllOGQ4NzU5ZmY3OTM4MzVjZGNmODUwNzA5MDFhZDU4
Y2RkMTExNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2ph
dmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTGl0ZUVxdWFsc0FuZEhh
c2hUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLy8gUHJvdG9jb2wg
QnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQg
MjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxv
cGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQot
aW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LmxpdGVfZXF1YWxzX2FuZF9oYXNoLkxpdGVFcXVhbHNB
bmRIYXNoLkJhcjsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5saXRlX2VxdWFsc19hbmRfaGFz
aC5MaXRlRXF1YWxzQW5kSGFzaC5CYXJQcmltZTsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5s
aXRlX2VxdWFsc19hbmRfaGFzaC5MaXRlRXF1YWxzQW5kSGFzaC5Gb287Ci1pbXBvcnQgcHJvdG9i
dWZfdW5pdHRlc3QubGl0ZV9lcXVhbHNfYW5kX2hhc2guTGl0ZUVxdWFsc0FuZEhhc2guVGVzdE9u
ZW9mRXF1YWxzOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LmxpdGVfZXF1YWxzX2FuZF9oYXNo
LkxpdGVFcXVhbHNBbmRIYXNoLlRlc3RSZWN1cnNpdmVPbmVvZjsKLQotaW1wb3J0IGp1bml0LmZy
YW1ld29yay5UZXN0Q2FzZTsKLQotLyoqCi0gKiBUZXN0IGdlbmVyYXRlIGVxdWFsIGFuZCBoYXNo
IG1ldGhvZHMgZm9yIHRoZSBsaXRlIHJ1bnRpbWUuCi0gKgotICogQGF1dGhvciBwYm9nbGVAZ29v
Z2xlLmNvbSBQaGlsIEJvZ2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBMaXRlRXF1YWxzQW5kSGFzaFRl
c3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLSAgcHVibGljIHZvaWQgdGVzdEVxdWFscygpIHRocm93
cyBFeGNlcHRpb24gewotICAgIC8vIFNpbmNlIHRoZSBnZW5lcmF0ZWQgZXF1YWxzIGFuZCBoYXNo
Q29kZSBtZXRob2RzIGZvciBsaXRlIG1lc3NhZ2VzIGFyZSBhCi0gICAgLy8gbW9zdGx5IGNvbXBs
ZXRlIHN1YnNldCBvZiB0aG9zZSBmb3IgcmVndWxhciBtZXNzYWdlcywgd2UgY2FuIG1vc3RseSBh
c3N1bWUKLSAgICAvLyB0aGF0IHRoZSBnZW5lcmF0ZWQgbWV0aG9kcyBhcmUgYWxyZWFkeSB0aG9y
b3VnaGx5IHRlc3RlZCBieSB0aGUgcmVndWxhciB0ZXN0cy4KLQotICAgIC8vIFRoaXMgdGVzdCBt
b3N0bHkganVzdCB2ZXJpZmllcyBpcyB0aGF0IGEgcHJvdG8gd2l0aAotICAgIC8vIG9wdGltaXpl
X2ZvciA9IExJVEVfUlVOVElNRSBhbmQgamF2YV9nZW5lcmF0ZXNfZXF1YWxzX2FuZF9oYXNoX2Nv
bXBpbGVzCi0gICAgLy8gY29ycmVjdGx5IHdoZW4gbGlua2VkIG9ubHkgYWdhaW5zdCB0aGUgbGl0
ZSBsaWJyYXJ5LgotCi0gICAgLy8gV2UgZG8gaG93ZXZlciBkbyBzb21lIGJhc2ljIHRlc3Rpbmcg
dG8gbWFrZSBzdXJlIHRoYXQgZXF1YWxzIGlzIGFjdHVhbGx5Ci0gICAgLy8gb3ZlcnJpZGVuIHRv
IHRlc3QgZm9yIHZhbHVlIGVxdWFsaXR5IHJhdGhlciB0aGFuIHNpbXBsZSBvYmplY3QgZXF1YWxp
dHkuCi0KLSAgICAvLyBDaGVjayB0aGF0IHR3byBpZGVudGljYWwgb2JqcyBhcmUgZXF1YWwuCi0g
ICAgRm9vIGZvbzFhID0gRm9vLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0VmFsdWUoMSkKLSAg
ICAgICAgLmFkZEJhcihCYXIubmV3QnVpbGRlcigpLnNldE5hbWUoImZvbzEiKSkKLSAgICAgICAg
LmJ1aWxkKCk7Ci0gICAgRm9vIGZvbzFiID0gRm9vLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0
VmFsdWUoMSkKLSAgICAgICAgLmFkZEJhcihCYXIubmV3QnVpbGRlcigpLnNldE5hbWUoImZvbzEi
KSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgRm9vIGZvbzIgPSBGb28ubmV3QnVpbGRlcigpCi0g
ICAgICAgIC5zZXRWYWx1ZSgxKQotICAgICAgICAuYWRkQmFyKEJhci5uZXdCdWlsZGVyKCkuc2V0
TmFtZSgiZm9vMiIpKQotICAgICAgICAuYnVpbGQoKTsKLQotICAgIC8vIENoZWNrIHRoYXQgZXF1
YWxzIGlzIGRvaW5nIHZhbHVlIHJhdGhlciB0aGFuIG9iamVjdCBlcXVhbGl0eS4KLSAgICBhc3Nl
cnRFcXVhbHMoZm9vMWEsIGZvbzFiKTsKLSAgICBhc3NlcnRFcXVhbHMoZm9vMWEuaGFzaENvZGUo
KSwgZm9vMWIuaGFzaENvZGUoKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGEgZGlmZmVlbnQgb2Jq
ZWN0IGlzIG5vdCBlcXVhbC4KLSAgICBhc3NlcnRGYWxzZShmb28xYS5lcXVhbHMoZm9vMikpOwot
Ci0gICAgLy8gQ2hlY2sgdGhhdCB0d28gb2JqZWN0cyB3aGljaCBoYXZlIGRpZmZlcmVudCB0eXBl
cyBidXQgdGhlIHNhbWUgZmllbGQgdmFsdWVzIGFyZSBub3QKLSAgICAvLyBjb25zaWRlcmVkIHRv
IGJlIGVxdWFsLgotICAgIEJhciBiYXIgPSBCYXIubmV3QnVpbGRlcigpLnNldE5hbWUoImJhciIp
LmJ1aWxkKCk7Ci0gICAgQmFyUHJpbWUgYmFyUHJpbWUgPSBCYXJQcmltZS5uZXdCdWlsZGVyKCku
c2V0TmFtZSgiYmFyIikuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShiYXIuZXF1YWxzKGJhclBy
aW1lKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T25lb2ZFcXVhbHMoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBUZXN0T25lb2ZFcXVhbHMuQnVpbGRlciBidWlsZGVyID0gVGVzdE9uZW9m
RXF1YWxzLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0T25lb2ZFcXVhbHMgbWVzc2FnZTEgPSBidWls
ZGVyLmJ1aWxkKCk7Ci0gICAgLy8gU2V0IG1lc3NhZ2UyJ3MgbmFtZSBmaWVsZCB0byBkZWZhdWx0
IHZhbHVlLiBUaGUgdHdvIG1lc3NhZ2VzIHNob3VsZCBiZSBkaWZmZXJlbnQgd2hlbiB3ZQotICAg
IC8vIGNoZWNrIHdpdGggdGhlIG9uZW9mIGNhc2UuCi0gICAgYnVpbGRlci5zZXROYW1lKCIiKTsK
LSAgICBUZXN0T25lb2ZFcXVhbHMgbWVzc2FnZTIgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNz
ZXJ0RmFsc2UobWVzc2FnZTEuZXF1YWxzKG1lc3NhZ2UyKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0RXF1YWxzQW5kSGFzaENvZGVXaXRoVW5rbm93bkZpZWxkcygpIHRocm93cyBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgIEZvbyBmb29XaXRoT25seVZhbHVlID0gRm9v
Lm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0VmFsdWUoMSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0K
LSAgICBGb28gZm9vV2l0aFZhbHVlQW5kRXh0ZW5zaW9uID0gZm9vV2l0aE9ubHlWYWx1ZS50b0J1
aWxkZXIoKQotICAgICAgICAuc2V0VmFsdWUoMSkKLSAgICAgICAgLnNldEV4dGVuc2lvbihCYXIu
Zm9vRXh0LCBCYXIubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0TmFtZSgibmFtZSIpCi0g
ICAgICAgICAgICAuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBGb28gZm9vV2l0
aFZhbHVlQW5kVW5rbm93bkZpZWxkcyA9IEZvby5wYXJzZUZyb20oZm9vV2l0aFZhbHVlQW5kRXh0
ZW5zaW9uLnRvQnl0ZUFycmF5KCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzQW5kSGFzaENvZGVBcmVG
YWxzZShmb29XaXRoT25seVZhbHVlLCBmb29XaXRoVmFsdWVBbmRVbmtub3duRmllbGRzKTsKLSAg
ICBhc3NlcnRFcXVhbHNBbmRIYXNoQ29kZUFyZUZhbHNlKGZvb1dpdGhWYWx1ZUFuZEV4dGVuc2lv
biwgZm9vV2l0aFZhbHVlQW5kVW5rbm93bkZpZWxkcyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
YXNzZXJ0RXF1YWxzQW5kSGFzaENvZGVBcmVGYWxzZShPYmplY3QgbzEsIE9iamVjdCBvMikgewot
ICAgIGFzc2VydEZhbHNlKG8xLmVxdWFscyhvMikpOwotICAgIGFzc2VydEZhbHNlKG8xLmhhc2hD
b2RlKCkgPT0gbzIuaGFzaENvZGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVjdXJz
aXZlSGFzaGNvZGUoKSB7Ci0gICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHdlIGRvbid0IGluZmluaXRl
IGxvb3AuCi0gICAgVGVzdFJlY3Vyc2l2ZU9uZW9mLmdldERlZmF1bHRJbnN0YW5jZSgpLmhhc2hD
b2RlKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dv
b2dsZS9wcm90b2J1Zi9MaXRlVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL0xpdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg4YzNlMGIyYTM3YzI3MzQyNWI2MGFiOTU4MmZkZDllYThlYjk2NzkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xpdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwy
MjI5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdl
IGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBzdGF0aWMgamF2YS51dGlsLkNvbGxlY3Rp
b25zLmVtcHR5TGlzdDsKLWltcG9ydCBzdGF0aWMgamF2YS51dGlsLkNvbGxlY3Rpb25zLnNpbmds
ZXRvbkxpc3Q7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0SW1wb3J0TGl0
ZS5JbXBvcnRFbnVtTGl0ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0SW1w
b3J0UHVibGljTGl0ZS5QdWJsaWNJbXBvcnRNZXNzYWdlTGl0ZTsKLWltcG9ydCBjb20uZ29vZ2xl
LnByb3RvYnVmLlVuaXR0ZXN0TGl0ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0
ZXN0TGl0ZS5Gb3JlaWduRW51bUxpdGU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0
dGVzdExpdGUuRm9yZWlnbk1lc3NhZ2VMaXRlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYu
VW5pdHRlc3RMaXRlLlRlc3RBbGxFeHRlbnNpb25zTGl0ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnBy
b3RvYnVmLlVuaXR0ZXN0TGl0ZS5UZXN0QWxsVHlwZXNMaXRlOwotaW1wb3J0IGNvbS5nb29nbGUu
cHJvdG9idWYuVW5pdHRlc3RMaXRlLlRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkRW51bTsKLWltcG9y
dCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5UZXN0QWxsVHlwZXNMaXRlLk5lc3Rl
ZE1lc3NhZ2U7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuVGVzdEFs
bFR5cGVzTGl0ZS5PbmVvZkZpZWxkQ2FzZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVu
aXR0ZXN0TGl0ZS5UZXN0QWxsVHlwZXNMaXRlLk9wdGlvbmFsR3JvdXA7Ci1pbXBvcnQgY29tLmdv
b2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuVGVzdEFsbFR5cGVzTGl0ZS5SZXBlYXRlZEdyb3Vw
OwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLlRlc3RBbGxUeXBlc0xp
dGVPckJ1aWxkZXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuVGVz
dE5lc3RlZEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QubGl0ZV9lcXVh
bHNfYW5kX2hhc2guTGl0ZUVxdWFsc0FuZEhhc2guQmFyOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LmxpdGVfZXF1YWxzX2FuZF9oYXNoLkxpdGVFcXVhbHNBbmRIYXNoLkJhclByaW1lOwotaW1w
b3J0IHByb3RvYnVmX3VuaXR0ZXN0LmxpdGVfZXF1YWxzX2FuZF9oYXNoLkxpdGVFcXVhbHNBbmRI
YXNoLkZvbzsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5saXRlX2VxdWFsc19hbmRfaGFzaC5M
aXRlRXF1YWxzQW5kSGFzaC5UZXN0T25lb2ZFcXVhbHM7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRl
c3QubGl0ZV9lcXVhbHNfYW5kX2hhc2guTGl0ZUVxdWFsc0FuZEhhc2guVGVzdFJlY3Vyc2l2ZU9u
ZW9mOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgamF2YS5p
by5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0
cmVhbTsKLWltcG9ydCBqYXZhLmlvLk5vdFNlcmlhbGl6YWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBq
YXZhLmlvLk9iamVjdElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3Ry
ZWFtOwotCi0vKioKLSAqIFRlc3QgbGl0ZSBydW50aW1lLgotICoKLSAqIEBhdXRob3Iga2VudG9u
QGdvb2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBjbGFzcyBMaXRlVGVzdCBleHRl
bmRzIFRlc3RDYXNlIHsKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgLy8gVGVzdCB0aGF0IG5lc3RlZCBleHRlbnNpb25zIGFyZSBpbml0
aWFsaXplZCBjb3JyZWN0bHkgZXZlbiBpZiB0aGUgb3V0ZXIKLSAgICAvLyBjbGFzcyBoYXMgbm90
IGJlZW4gYWNjZXNzZWQgZGlyZWN0bHkuICBUaGlzIHdhcyBvbmNlIGEgYnVnIHdpdGggbGl0ZQot
ICAgIC8vIG1lc3NhZ2VzLgotICAgIC8vCi0gICAgLy8gV2UgcHV0IHRoaXMgaW4gc2V0VXAoKSBy
YXRoZXIgdGhhbiBpbiBpdHMgb3duIHRlc3QgbWV0aG9kIGJlY2F1c2Ugd2UKLSAgICAvLyBuZWVk
IHRvIG1ha2Ugc3VyZSBpdCBydW5zIGJlZm9yZSBhbnkgYWN0dWFsIHRlc3RzLgotICAgIGFzc2Vy
dFRydWUoVGVzdE5lc3RlZEV4dGVuc2lvbkxpdGUubmVzdGVkRXh0ZW5zaW9uICE9IG51bGwpOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdExpdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAv
LyBTaW5jZSBsaXRlIG1lc3NhZ2VzIGFyZSBhIHN1YnNldCBvZiByZWd1bGFyIG1lc3NhZ2VzLCB3
ZSBjYW4gbW9zdGx5Ci0gICAgLy8gYXNzdW1lIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgbGl0
ZSBtZXNzYWdlcyBpcyBhbHJlYWR5IHRob3JvdWdobHkKLSAgICAvLyB0ZXN0ZWQgYnkgdGhlIHJl
Z3VsYXIgdGVzdHMuICBBbGwgdGhpcyB0ZXN0IHJlYWxseSB2ZXJpZmllcyBpcyB0aGF0Ci0gICAg
Ly8gYSBwcm90byB3aXRoIG9wdGltaXplX2ZvciA9IExJVEVfUlVOVElNRSBjb21waWxlcyBjb3Jy
ZWN0bHkgd2hlbgotICAgIC8vIGxpbmtlZCBvbmx5IGFnYWluc3QgdGhlIGxpdGUgbGlicmFyeS4g
IFRoYXQgaXMgYWxsIHRlc3RlZCBhdCBjb21waWxlCi0gICAgLy8gdGltZSwgbGVhdmluZyBub3Qg
bXVjaCB0byBkbyBpbiB0aGlzIG1ldGhvZC4gIExldCdzIGp1c3QgZG8gc29tZSByYW5kb20KLSAg
ICAvLyBzdHVmZiB0byBtYWtlIHN1cmUgdGhlIGxpdGUgbWVzc2FnZSBpcyBhY3R1YWxseSBoZXJl
IGFuZCB1c2FibGUuCi0KLSAgICBUZXN0QWxsVHlwZXNMaXRlIG1lc3NhZ2UgPQotICAgICAgVGVz
dEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAuc2V0T3B0
aW9uYWxJbnQzMigxMjMpCi0gICAgICAgICAgICAgICAgICAgICAgLmFkZFJlcGVhdGVkU3RyaW5n
KCJoZWxsbyIpCi0gICAgICAgICAgICAgICAgICAgICAgLnNldE9wdGlvbmFsTmVzdGVkTWVzc2Fn
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRNZXNz
YWdlLm5ld0J1aWxkZXIoKS5zZXRCYig3KSkKLSAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQo
KTsKLQotICAgIEJ5dGVTdHJpbmcgZGF0YSA9IG1lc3NhZ2UudG9CeXRlU3RyaW5nKCk7Ci0KLSAg
ICBUZXN0QWxsVHlwZXNMaXRlIG1lc3NhZ2UyID0gVGVzdEFsbFR5cGVzTGl0ZS5wYXJzZUZyb20o
ZGF0YSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBtZXNzYWdlMi5nZXRPcHRpb25hbEludDMy
KCkpOwotICAgIGFzc2VydEVxdWFscygxLCBtZXNzYWdlMi5nZXRSZXBlYXRlZFN0cmluZ0NvdW50
KCkpOwotICAgIGFzc2VydEVxdWFscygiaGVsbG8iLCBtZXNzYWdlMi5nZXRSZXBlYXRlZFN0cmlu
ZygwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDcsIG1lc3NhZ2UyLmdldE9wdGlvbmFsTmVzdGVkTWVz
c2FnZSgpLmdldEJiKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdExpdGVFeHRlbnNpb25z
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gVE9ETyhrZW50b24pOiAgVW5saWtlIG90aGVy
IGZlYXR1cmVzIG9mIHRoZSBsaXRlIGxpYnJhcnksIGV4dGVuc2lvbnMgYXJlCi0gICAgLy8gICBp
bXBsZW1lbnRlZCBjb21wbGV0ZWx5IGRpZmZlcmVudGx5IGZyb20gdGhlIHJlZ3VsYXIgbGlicmFy
eS4gIFdlCi0gICAgLy8gICBzaG91bGQgcHJvYmFibHkgdGVzdCB0aGVtIG1vcmUgdGhvcm91Z2hs
eS4KLQotICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZSBtZXNzYWdlID0KLSAgICAgIFRlc3RBbGxF
eHRlbnNpb25zTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldEV4dGVuc2lvbihVbml0dGVz
dExpdGUub3B0aW9uYWxJbnQzMkV4dGVuc2lvbkxpdGUsIDEyMykKLSAgICAgICAgLmFkZEV4dGVu
c2lvbihVbml0dGVzdExpdGUucmVwZWF0ZWRTdHJpbmdFeHRlbnNpb25MaXRlLCAiaGVsbG8iKQot
ICAgICAgICAuc2V0RXh0ZW5zaW9uKFVuaXR0ZXN0TGl0ZS5vcHRpb25hbE5lc3RlZEVudW1FeHRl
bnNpb25MaXRlLAotICAgICAgICAgICAgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRFbnVtLkJBWikK
LSAgICAgICAgLnNldEV4dGVuc2lvbihVbml0dGVzdExpdGUub3B0aW9uYWxOZXN0ZWRNZXNzYWdl
RXh0ZW5zaW9uTGl0ZSwKLSAgICAgICAgICAgIFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkTWVzc2Fn
ZS5uZXdCdWlsZGVyKCkuc2V0QmIoNykuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAg
ICAvLyBUZXN0IGNvcHlpbmcgYSBtZXNzYWdlLCBzaW5jZSBjb3BpbmcgZXh0ZW5zaW9ucyBhY3R1
YWxseSBkb2VzIHVzZSBhCi0gICAgLy8gZGlmZmVyZW50IGNvZGUgcGF0aCBiZXR3ZWVuIGxpdGUg
YW5kIHJlZ3VsYXIgbGlicmFyaWVzLCBhbmQgYXMgb2YgdGhpcwotICAgIC8vIHdyaXRpbmcsIHBh
cnNpbmcgaGFzbid0IGJlZW4gaW1wbGVtZW50ZWQgeWV0LgotICAgIFRlc3RBbGxFeHRlbnNpb25z
TGl0ZSBtZXNzYWdlMiA9IG1lc3NhZ2UudG9CdWlsZGVyKCkuYnVpbGQoKTsKLQotICAgIGFzc2Vy
dEVxdWFscygxMjMsIChpbnQpIG1lc3NhZ2UyLmdldEV4dGVuc2lvbigKLSAgICAgICAgVW5pdHRl
c3RMaXRlLm9wdGlvbmFsSW50MzJFeHRlbnNpb25MaXRlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEs
IG1lc3NhZ2UyLmdldEV4dGVuc2lvbkNvdW50KAotICAgICAgICBVbml0dGVzdExpdGUucmVwZWF0
ZWRTdHJpbmdFeHRlbnNpb25MaXRlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1lc3NhZ2UyLmdl
dEV4dGVuc2lvbigKLSAgICAgICAgVW5pdHRlc3RMaXRlLnJlcGVhdGVkU3RyaW5nRXh0ZW5zaW9u
TGl0ZSkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoImhlbGxvIiwgbWVzc2FnZTIuZ2V0RXh0
ZW5zaW9uKAotICAgICAgICBVbml0dGVzdExpdGUucmVwZWF0ZWRTdHJpbmdFeHRlbnNpb25MaXRl
LCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkRW51bS5CQVos
IG1lc3NhZ2UyLmdldEV4dGVuc2lvbigKLSAgICAgICAgVW5pdHRlc3RMaXRlLm9wdGlvbmFsTmVz
dGVkRW51bUV4dGVuc2lvbkxpdGUpKTsKLSAgICBhc3NlcnRFcXVhbHMoNywgbWVzc2FnZTIuZ2V0
RXh0ZW5zaW9uKAotICAgICAgICBVbml0dGVzdExpdGUub3B0aW9uYWxOZXN0ZWRNZXNzYWdlRXh0
ZW5zaW9uTGl0ZSkuZ2V0QmIoKSk7Ci0gIH0KLSAgCi0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Q2xv
bmUoKSB7Ci0gICAgVGVzdEFsbFR5cGVzTGl0ZS5CdWlsZGVyIGV4cGVjdGVkID0gVGVzdEFsbFR5
cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsSW50MzIoMTIzKTsKLSAg
ICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIGV4cGVjdGVkLmdldE9wdGlvbmFsSW50MzIoKSwgZXhw
ZWN0ZWQuY2xvbmUoKS5nZXRPcHRpb25hbEludDMyKCkpOwotICAgCi0gICAgVGVzdEFsbEV4dGVu
c2lvbnNMaXRlLkJ1aWxkZXIgZXhwZWN0ZWQyID0gVGVzdEFsbEV4dGVuc2lvbnNMaXRlLm5ld0J1
aWxkZXIoKQotICAgICAgICAuc2V0RXh0ZW5zaW9uKFVuaXR0ZXN0TGl0ZS5vcHRpb25hbEludDMy
RXh0ZW5zaW9uTGl0ZSwgMTIzKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIGV4cGVjdGVk
Mi5nZXRFeHRlbnNpb24oVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW50MzJFeHRlbnNpb25MaXRlKSwK
LSAgICAgICAgZXhwZWN0ZWQyLmNsb25lKCkuZ2V0RXh0ZW5zaW9uKFVuaXR0ZXN0TGl0ZS5vcHRp
b25hbEludDMyRXh0ZW5zaW9uTGl0ZSkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0QWRk
QWxsKCkgewotICAgIHRyeSB7Ci0gICAgICBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQot
ICAgICAgICAgIC5hZGRBbGxSZXBlYXRlZEJ5dGVzKG51bGwpOwotICAgICAgZmFpbCgpOwotICAg
IH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkLgot
ICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdFNhbml0eUNvcHlPbldyaXRlKCkgdGhy
b3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgLy8gU2luY2UgYnVpbGRl
cnMgYXJlIGltcGxlbWVudGVkIGFzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIG1lc3NhZ2UKLSAg
ICAvLyBpbnN0YW5jZSwgd2UgYXR0ZW1wdCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4ndCBjYXVzZSB0
aGUgYnVpbGRlciB0byBtb2RpZnkKLSAgICAvLyBhIHByb2R1Y2VkIG1lc3NhZ2UuCi0KLSAgICBU
ZXN0QWxsVHlwZXNMaXRlLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVp
bGRlcigpOwotICAgIFRlc3RBbGxUeXBlc0xpdGUgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsK
LSAgICBUZXN0QWxsVHlwZXNMaXRlIG1lc3NhZ2VBZnRlckJ1aWxkOwotICAgIGJ1aWxkZXIuc2V0
T3B0aW9uYWxCb29sKHRydWUpOwotICAgIGFzc2VydEVxdWFscyhmYWxzZSwgbWVzc2FnZS5nZXRP
cHRpb25hbEJvb2woKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHRydWUsIGJ1aWxkZXIuZ2V0T3B0aW9u
YWxCb29sKCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAg
IGFzc2VydEVxdWFscyh0cnVlLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEJvb2woKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKGZhbHNlLCBtZXNzYWdlLmdldE9wdGlvbmFsQm9vbCgpKTsKLSAg
ICBidWlsZGVyLmNsZWFyT3B0aW9uYWxCb29sKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGZhbHNlLCBi
dWlsZGVyLmdldE9wdGlvbmFsQm9vbCgpKTsKLSAgICBhc3NlcnRFcXVhbHModHJ1ZSwgbWVzc2Fn
ZUFmdGVyQnVpbGQuZ2V0T3B0aW9uYWxCb29sKCkpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIu
YnVpbGQoKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsQnl0ZXMoQnl0ZVN0cmluZy5jb3B5RnJv
bVV0ZjgoImhpIikpOwotICAgIGFzc2VydEVxdWFscyhCeXRlU3RyaW5nLkVNUFRZLCBtZXNzYWdl
LmdldE9wdGlvbmFsQnl0ZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuY29weUZy
b21VdGY4KCJoaSIpLCBidWlsZGVyLmdldE9wdGlvbmFsQnl0ZXMoKSk7Ci0gICAgbWVzc2FnZUFm
dGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBC
eXRlU3RyaW5nLmNvcHlGcm9tVXRmOCgiaGkiKSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9u
YWxCeXRlcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoQnl0ZVN0cmluZy5FTVBUWSwgbWVzc2FnZS5n
ZXRPcHRpb25hbEJ5dGVzKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbEJ5dGVzKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuRU1QVFksIGJ1aWxkZXIuZ2V0T3B0aW9uYWxCeXRl
cygpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEJ5dGVTdHJpbmcuY29weUZyb21VdGY4
KCJoaSIpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEJ5dGVzKCkpOwotCi0gICAgbWVz
c2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsQ29yZCgiaGki
KTsKLSAgICBhc3NlcnRFcXVhbHMoIiIsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxDb3JkKCkpOwotICAg
IGFzc2VydEVxdWFscygiaGkiLCBidWlsZGVyLmdldE9wdGlvbmFsQ29yZCgpKTsKLSAgICBtZXNz
YWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoImhpIiwg
bWVzc2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9uYWxDb3JkKCkpOwotICAgIGFzc2VydEVxdWFscygi
IiwgbWVzc2FnZS5nZXRPcHRpb25hbENvcmQoKSk7Ci0gICAgYnVpbGRlci5jbGVhck9wdGlvbmFs
Q29yZCgpOwotICAgIGFzc2VydEVxdWFscygiIiwgYnVpbGRlci5nZXRPcHRpb25hbENvcmQoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCJoaSIsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsQ29y
ZCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5zZXRP
cHRpb25hbENvcmRCeXRlcyhCeXRlU3RyaW5nLmNvcHlGcm9tVXRmOCgibm8iKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuRU1QVFksIG1lc3NhZ2UuZ2V0T3B0aW9uYWxDb3JkQnl0ZXMo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJubyIpLCBidWls
ZGVyLmdldE9wdGlvbmFsQ29yZEJ5dGVzKCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVp
bGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgQnl0ZVN0cmluZy5jb3B5
RnJvbVV0ZjgoIm5vIiksCi0gICAgICAgIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsQ29y
ZEJ5dGVzKCkpOwotICAgIGFzc2VydEVxdWFscyhCeXRlU3RyaW5nLkVNUFRZLCBtZXNzYWdlLmdl
dE9wdGlvbmFsQ29yZEJ5dGVzKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbENvcmQoKTsK
LSAgICBhc3NlcnRFcXVhbHMoQnl0ZVN0cmluZy5FTVBUWSwgYnVpbGRlci5nZXRPcHRpb25hbENv
cmRCeXRlcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEJ5dGVTdHJpbmcuY29weUZy
b21VdGY4KCJubyIpLAotICAgICAgICBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbENvcmRC
eXRlcygpKTsKLSAgICAKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxk
ZXIuc2V0T3B0aW9uYWxEb3VibGUoMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBELCBtZXNzYWdlLmdl
dE9wdGlvbmFsRG91YmxlKCkpOwotICAgIGFzc2VydEVxdWFscygxRCwgYnVpbGRlci5nZXRPcHRp
b25hbERvdWJsZSgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsK
LSAgICBhc3NlcnRFcXVhbHMoMUQsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsRG91Ymxl
KCkpOwotICAgIGFzc2VydEVxdWFscygwRCwgbWVzc2FnZS5nZXRPcHRpb25hbERvdWJsZSgpKTsK
LSAgICBidWlsZGVyLmNsZWFyT3B0aW9uYWxEb3VibGUoKTsKLSAgICBhc3NlcnRFcXVhbHMoMEQs
IGJ1aWxkZXIuZ2V0T3B0aW9uYWxEb3VibGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDFELCBtZXNz
YWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbERvdWJsZSgpKTsKLSAgICAKLSAgICBtZXNzYWdlID0g
YnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxGaXhlZDMyKDEpOwotICAg
IGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldE9wdGlvbmFsRml4ZWQzMigpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoMSwgYnVpbGRlci5nZXRPcHRpb25hbEZpeGVkMzIoKSk7Ci0gICAgbWVzc2FnZUFm
dGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1lc3NhZ2VB
ZnRlckJ1aWxkLmdldE9wdGlvbmFsRml4ZWQzMigpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVz
c2FnZS5nZXRPcHRpb25hbEZpeGVkMzIoKSk7Ci0gICAgYnVpbGRlci5jbGVhck9wdGlvbmFsRml4
ZWQzMigpOwotICAgIGFzc2VydEVxdWFscygwLCBidWlsZGVyLmdldE9wdGlvbmFsRml4ZWQzMigp
KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9uYWxGaXhl
ZDMyKCkpOwotICAgIAotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRl
ci5zZXRPcHRpb25hbEZpeGVkNjQoMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBtZXNzYWdlLmdl
dE9wdGlvbmFsRml4ZWQ2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMUwsIGJ1aWxkZXIuZ2V0T3B0
aW9uYWxGaXhlZDY0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgp
OwotICAgIGFzc2VydEVxdWFscygxTCwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9uYWxGaXhl
ZDY0KCkpOwotICAgIGFzc2VydEVxdWFscygwTCwgbWVzc2FnZS5nZXRPcHRpb25hbEZpeGVkNjQo
KSk7Ci0gICAgYnVpbGRlci5jbGVhck9wdGlvbmFsRml4ZWQ2NCgpOwotICAgIGFzc2VydEVxdWFs
cygwTCwgYnVpbGRlci5nZXRPcHRpb25hbEZpeGVkNjQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDFM
LCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEZpeGVkNjQoKSk7Ci0KLSAgICBtZXNzYWdl
ID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxGbG9hdCgxKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMEYsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxGbG9hdCgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoMUYsIGJ1aWxkZXIuZ2V0T3B0aW9uYWxGbG9hdCgpKTsKLSAgICBtZXNzYWdlQWZ0
ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMUYsIG1lc3NhZ2VB
ZnRlckJ1aWxkLmdldE9wdGlvbmFsRmxvYXQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBGLCBtZXNz
YWdlLmdldE9wdGlvbmFsRmxvYXQoKSk7Ci0gICAgYnVpbGRlci5jbGVhck9wdGlvbmFsRmxvYXQo
KTsKLSAgICBhc3NlcnRFcXVhbHMoMEYsIGJ1aWxkZXIuZ2V0T3B0aW9uYWxGbG9hdCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMUYsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsRmxvYXQoKSk7
Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9u
YWxGb3JlaWduRW51bShGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUik7Ci0gICAgYXNz
ZXJ0RXF1YWxzKAotICAgICAgICBGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0ZPTywgbWVz
c2FnZS5nZXRPcHRpb25hbEZvcmVpZ25FbnVtKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAg
ICAgRm9yZWlnbkVudW1MaXRlLkZPUkVJR05fTElURV9CQVIsIGJ1aWxkZXIuZ2V0T3B0aW9uYWxG
b3JlaWduRW51bSgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsK
LSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEZvcmVpZ25FbnVtTGl0ZS5GT1JFSUdOX0xJVEVf
QkFSLAotICAgICAgICBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEZvcmVpZ25FbnVtKCkp
OwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgRm9yZWlnbkVudW1MaXRlLkZPUkVJR05fTElU
RV9GT08sIG1lc3NhZ2UuZ2V0T3B0aW9uYWxGb3JlaWduRW51bSgpKTsKLSAgICBidWlsZGVyLmNs
ZWFyT3B0aW9uYWxGb3JlaWduRW51bSgpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgRm9y
ZWlnbkVudW1MaXRlLkZPUkVJR05fTElURV9GT08sIGJ1aWxkZXIuZ2V0T3B0aW9uYWxGb3JlaWdu
RW51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEZvcmVpZ25FbnVtTGl0ZS5GT1JF
SUdOX0xJVEVfQkFSLAotICAgICAgICBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEZvcmVp
Z25FbnVtKCkpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBGb3JlaWdu
TWVzc2FnZUxpdGUgZm9yZWlnbk1lc3NhZ2UgPSBGb3JlaWduTWVzc2FnZUxpdGUubmV3QnVpbGRl
cigpCi0gICAgICAgIC5zZXRDKDEpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0
T3B0aW9uYWxGb3JlaWduTWVzc2FnZShmb3JlaWduTWVzc2FnZSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KAotICAgICAgICBGb3JlaWduTWVzc2FnZUxpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCksCi0gICAg
ICAgIG1lc3NhZ2UuZ2V0T3B0aW9uYWxGb3JlaWduTWVzc2FnZSgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoZm9yZWlnbk1lc3NhZ2UsIGJ1aWxkZXIuZ2V0T3B0aW9uYWxGb3JlaWduTWVzc2FnZSgpKTsK
LSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVh
bHMoZm9yZWlnbk1lc3NhZ2UsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsRm9yZWlnbk1l
c3NhZ2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBGb3JlaWduTWVzc2FnZUxpdGUu
Z2V0RGVmYXVsdEluc3RhbmNlKCksCi0gICAgICAgIG1lc3NhZ2UuZ2V0T3B0aW9uYWxGb3JlaWdu
TWVzc2FnZSgpKTsKLSAgICBidWlsZGVyLmNsZWFyT3B0aW9uYWxGb3JlaWduTWVzc2FnZSgpOwot
ICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgRm9yZWlnbk1lc3NhZ2VMaXRlLmdldERlZmF1bHRJ
bnN0YW5jZSgpLAotICAgICAgICBidWlsZGVyLmdldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKGZvcmVpZ25NZXNzYWdlLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRP
cHRpb25hbEZvcmVpZ25NZXNzYWdlKCkpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQo
KTsKLSAgICBGb3JlaWduTWVzc2FnZUxpdGUuQnVpbGRlciBmb3JlaWduTWVzc2FnZUJ1aWxkZXIg
PQotICAgICAgICBGb3JlaWduTWVzc2FnZUxpdGUubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAu
c2V0QygzKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UoZm9yZWlnbk1l
c3NhZ2VCdWlsZGVyKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEZvcmVpZ25NZXNzYWdl
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAgbWVzc2FnZS5nZXRPcHRpb25hbEZv
cmVpZ25NZXNzYWdlKCkpOwotICAgIGFzc2VydEVxdWFscyhmb3JlaWduTWVzc2FnZUJ1aWxkZXIu
YnVpbGQoKSwgYnVpbGRlci5nZXRPcHRpb25hbEZvcmVpZ25NZXNzYWdlKCkpOwotICAgIG1lc3Nh
Z2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscyhmb3JlaWdu
TWVzc2FnZUJ1aWxkZXIuYnVpbGQoKSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9uYWxGb3Jl
aWduTWVzc2FnZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEZvcmVpZ25NZXNzYWdl
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAgbWVzc2FnZS5nZXRPcHRpb25hbEZv
cmVpZ25NZXNzYWdlKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbEZvcmVpZ25NZXNzYWdl
KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBGb3JlaWduTWVzc2FnZUxpdGUuZ2V0RGVm
YXVsdEluc3RhbmNlKCksCi0gICAgICAgIGJ1aWxkZXIuZ2V0T3B0aW9uYWxGb3JlaWduTWVzc2Fn
ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZm9yZWlnbk1lc3NhZ2VCdWlsZGVyLmJ1aWxkKCksIG1l
c3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UoKSk7Ci0KLSAgICBtZXNz
YWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIE9wdGlvbmFsR3JvdXAgb3B0aW9uYWxHcm91cCA9
IE9wdGlvbmFsR3JvdXAubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRBKDEpCi0gICAgICAgIC5i
dWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxHcm91cChvcHRpb25hbEdyb3VwKTsKLSAg
ICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIE9wdGlvbmFsR3JvdXAuZ2V0RGVmYXVsdEluc3RhbmNl
KCksIG1lc3NhZ2UuZ2V0T3B0aW9uYWxHcm91cCgpKTsKLSAgICBhc3NlcnRFcXVhbHMob3B0aW9u
YWxHcm91cCwgYnVpbGRlci5nZXRPcHRpb25hbEdyb3VwKCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1
aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscyhvcHRpb25hbEdyb3VwLCBt
ZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEdyb3VwKCkpOwotICAgIGFzc2VydEVxdWFscygK
LSAgICAgICAgT3B0aW9uYWxHcm91cC5nZXREZWZhdWx0SW5zdGFuY2UoKSwgbWVzc2FnZS5nZXRP
cHRpb25hbEdyb3VwKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbEdyb3VwKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKAotICAgICAgICBPcHRpb25hbEdyb3VwLmdldERlZmF1bHRJbnN0YW5jZSgp
LCBidWlsZGVyLmdldE9wdGlvbmFsR3JvdXAoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9wdGlvbmFs
R3JvdXAsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsR3JvdXAoKSk7Ci0KLSAgICBtZXNz
YWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIE9wdGlvbmFsR3JvdXAuQnVpbGRlciBvcHRpb25h
bEdyb3VwQnVpbGRlciA9IE9wdGlvbmFsR3JvdXAubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRB
KDMpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxHcm91cChvcHRpb25hbEdyb3VwQnVpbGRlcik7
Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBPcHRpb25hbEdyb3VwLmdldERlZmF1bHRJbnN0
YW5jZSgpLCBtZXNzYWdlLmdldE9wdGlvbmFsR3JvdXAoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9w
dGlvbmFsR3JvdXBCdWlsZGVyLmJ1aWxkKCksIGJ1aWxkZXIuZ2V0T3B0aW9uYWxHcm91cCgpKTsK
LSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVh
bHMob3B0aW9uYWxHcm91cEJ1aWxkZXIuYnVpbGQoKSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0T3B0
aW9uYWxHcm91cCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIE9wdGlvbmFsR3JvdXAu
Z2V0RGVmYXVsdEluc3RhbmNlKCksIG1lc3NhZ2UuZ2V0T3B0aW9uYWxHcm91cCgpKTsKLSAgICBi
dWlsZGVyLmNsZWFyT3B0aW9uYWxHcm91cCgpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAg
T3B0aW9uYWxHcm91cC5nZXREZWZhdWx0SW5zdGFuY2UoKSwgYnVpbGRlci5nZXRPcHRpb25hbEdy
b3VwKCkpOwotICAgIGFzc2VydEVxdWFscyhvcHRpb25hbEdyb3VwQnVpbGRlci5idWlsZCgpLCBt
ZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEdyb3VwKCkpOwotCi0gICAgbWVzc2FnZSA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsSW50MzIoMSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLSAgICBhc3NlcnRFcXVh
bHMoMSwgYnVpbGRlci5nZXRPcHRpb25hbEludDMyKCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxk
ID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygxLCBtZXNzYWdlQWZ0ZXJCdWls
ZC5nZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldE9w
dGlvbmFsSW50MzIoKSk7Ci0gICAgYnVpbGRlci5jbGVhck9wdGlvbmFsSW50MzIoKTsKLSAgICBh
c3NlcnRFcXVhbHMoMCwgYnVpbGRlci5nZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydEVx
dWFscygxLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEludDMyKCkpOwotCi0gICAgbWVz
c2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsSW50NjQoMSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBtZXNzYWdlLmdldE9wdGlvbmFsSW50NjQoKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDFMLCBidWlsZGVyLmdldE9wdGlvbmFsSW50NjQoKSk7Ci0gICAgbWVzc2Fn
ZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDFMLCBtZXNz
YWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEludDY0KCkpOwotICAgIGFzc2VydEVxdWFscygwTCwg
bWVzc2FnZS5nZXRPcHRpb25hbEludDY0KCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbElu
dDY0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBidWlsZGVyLmdldE9wdGlvbmFsSW50NjQoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDFMLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbEludDY0
KCkpOwotICAgIAotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgTmVzdGVkTWVz
c2FnZSBuZXN0ZWRNZXNzYWdlID0gTmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkKLSAgICAgICAg
LnNldEJiKDEpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxMYXp5
TWVzc2FnZShuZXN0ZWRNZXNzYWdlKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIE5lc3Rl
ZE1lc3NhZ2UuZ2V0RGVmYXVsdEluc3RhbmNlKCksCi0gICAgICAgIG1lc3NhZ2UuZ2V0T3B0aW9u
YWxMYXp5TWVzc2FnZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMobmVzdGVkTWVzc2FnZSwgYnVpbGRl
ci5nZXRPcHRpb25hbExhenlNZXNzYWdlKCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVp
bGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscyhuZXN0ZWRNZXNzYWdlLCBtZXNzYWdlQWZ0
ZXJCdWlsZC5nZXRPcHRpb25hbExhenlNZXNzYWdlKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAg
ICAgICAgTmVzdGVkTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAgbWVzc2Fn
ZS5nZXRPcHRpb25hbExhenlNZXNzYWdlKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbExh
enlNZXNzYWdlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBOZXN0ZWRNZXNzYWdlLmdl
dERlZmF1bHRJbnN0YW5jZSgpLCBidWlsZGVyLmdldE9wdGlvbmFsTGF6eU1lc3NhZ2UoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG5lc3RlZE1lc3NhZ2UsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlv
bmFsTGF6eU1lc3NhZ2UoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAg
IE5lc3RlZE1lc3NhZ2UuQnVpbGRlciBuZXN0ZWRNZXNzYWdlQnVpbGRlciA9Ci0gICAgICAgIE5l
c3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0QmIoMyk7Ci0gICAgYnVp
bGRlci5zZXRPcHRpb25hbExhenlNZXNzYWdlKG5lc3RlZE1lc3NhZ2VCdWlsZGVyKTsKLSAgICBh
c3NlcnRFcXVhbHMoCi0gICAgICAgIE5lc3RlZE1lc3NhZ2UuZ2V0RGVmYXVsdEluc3RhbmNlKCks
Ci0gICAgICAgIG1lc3NhZ2UuZ2V0T3B0aW9uYWxMYXp5TWVzc2FnZSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMobmVzdGVkTWVzc2FnZUJ1aWxkZXIuYnVpbGQoKSwgYnVpbGRlci5nZXRPcHRpb25hbExh
enlNZXNzYWdlKCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwot
ICAgIGFzc2VydEVxdWFscyhuZXN0ZWRNZXNzYWdlQnVpbGRlci5idWlsZCgpLCBtZXNzYWdlQWZ0
ZXJCdWlsZC5nZXRPcHRpb25hbExhenlNZXNzYWdlKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAg
ICAgICAgTmVzdGVkTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAgbWVzc2Fn
ZS5nZXRPcHRpb25hbExhenlNZXNzYWdlKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbExh
enlNZXNzYWdlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBOZXN0ZWRNZXNzYWdlLmdl
dERlZmF1bHRJbnN0YW5jZSgpLCBidWlsZGVyLmdldE9wdGlvbmFsTGF6eU1lc3NhZ2UoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG5lc3RlZE1lc3NhZ2VCdWlsZGVyLmJ1aWxkKCksIG1lc3NhZ2VBZnRl
ckJ1aWxkLmdldE9wdGlvbmFsTGF6eU1lc3NhZ2UoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRl
ci5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxTZml4ZWQzMigxKTsKLSAgICBhc3Nl
cnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRPcHRpb25hbFNmaXhlZDMyKCkpOwotICAgIGFzc2VydEVx
dWFscygxLCBidWlsZGVyLmdldE9wdGlvbmFsU2ZpeGVkMzIoKSk7Ci0gICAgbWVzc2FnZUFmdGVy
QnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1lc3NhZ2VBZnRl
ckJ1aWxkLmdldE9wdGlvbmFsU2ZpeGVkMzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3Nh
Z2UuZ2V0T3B0aW9uYWxTZml4ZWQzMigpKTsKLSAgICBidWlsZGVyLmNsZWFyT3B0aW9uYWxTZml4
ZWQzMigpOwotICAgIGFzc2VydEVxdWFscygwLCBidWlsZGVyLmdldE9wdGlvbmFsU2ZpeGVkMzIo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsU2Zp
eGVkMzIoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIu
c2V0T3B0aW9uYWxTZml4ZWQ2NCgxKTsKLSAgICBhc3NlcnRFcXVhbHMoMEwsIG1lc3NhZ2UuZ2V0
T3B0aW9uYWxTZml4ZWQ2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMUwsIGJ1aWxkZXIuZ2V0T3B0
aW9uYWxTZml4ZWQ2NCgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQo
KTsKLSAgICBhc3NlcnRFcXVhbHMoMUwsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsU2Zp
eGVkNjQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBtZXNzYWdlLmdldE9wdGlvbmFsU2ZpeGVk
NjQoKSk7Ci0gICAgYnVpbGRlci5jbGVhck9wdGlvbmFsU2ZpeGVkNjQoKTsKLSAgICBhc3NlcnRF
cXVhbHMoMEwsIGJ1aWxkZXIuZ2V0T3B0aW9uYWxTZml4ZWQ2NCgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoMUwsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsU2ZpeGVkNjQoKSk7Ci0KLSAgICBt
ZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxTaW50MzIo
MSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxTaW50MzIoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxkZXIuZ2V0T3B0aW9uYWxTaW50MzIoKSk7Ci0gICAgbWVz
c2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1l
c3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsU2ludDMyKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJP
cHRpb25hbFNpbnQzMigpOwotICAgIGFzc2VydEVxdWFscygwLCBidWlsZGVyLmdldE9wdGlvbmFs
U2ludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygxLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRp
b25hbFNpbnQzMigpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVp
bGRlci5zZXRPcHRpb25hbFNpbnQ2NCgxKTsKLSAgICBhc3NlcnRFcXVhbHMoMEwsIG1lc3NhZ2Uu
Z2V0T3B0aW9uYWxTaW50NjQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDFMLCBidWlsZGVyLmdldE9w
dGlvbmFsU2ludDY0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgp
OwotICAgIGFzc2VydEVxdWFscygxTCwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9uYWxTaW50
NjQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBtZXNzYWdlLmdldE9wdGlvbmFsU2ludDY0KCkp
OwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbFNpbnQ2NCgpOwotICAgIGFzc2VydEVxdWFscygw
TCwgYnVpbGRlci5nZXRPcHRpb25hbFNpbnQ2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMUwsIG1l
c3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsU2ludDY0KCkpOwotCi0gICAgbWVzc2FnZSA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsU3RyaW5nKCJoaSIpOwotICAg
IGFzc2VydEVxdWFscygiIiwgbWVzc2FnZS5nZXRPcHRpb25hbFN0cmluZygpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoImhpIiwgYnVpbGRlci5nZXRPcHRpb25hbFN0cmluZygpKTsKLSAgICBtZXNzYWdl
QWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoImhpIiwgbWVz
c2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9uYWxTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIi
LCBtZXNzYWdlLmdldE9wdGlvbmFsU3RyaW5nKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25h
bFN0cmluZygpOwotICAgIGFzc2VydEVxdWFscygiIiwgYnVpbGRlci5nZXRPcHRpb25hbFN0cmlu
ZygpKTsKLSAgICBhc3NlcnRFcXVhbHMoImhpIiwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9u
YWxTdHJpbmcoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxk
ZXIuc2V0T3B0aW9uYWxTdHJpbmdCeXRlcyhCeXRlU3RyaW5nLmNvcHlGcm9tVXRmOCgibm8iKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuRU1QVFksIG1lc3NhZ2UuZ2V0T3B0aW9uYWxT
dHJpbmdCeXRlcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEJ5dGVTdHJpbmcuY29w
eUZyb21VdGY4KCJubyIpLCBidWlsZGVyLmdldE9wdGlvbmFsU3RyaW5nQnl0ZXMoKSk7Ci0gICAg
bWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKAot
ICAgICAgICBCeXRlU3RyaW5nLmNvcHlGcm9tVXRmOCgibm8iKSwKLSAgICAgICAgbWVzc2FnZUFm
dGVyQnVpbGQuZ2V0T3B0aW9uYWxTdHJpbmdCeXRlcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoQnl0
ZVN0cmluZy5FTVBUWSwgbWVzc2FnZS5nZXRPcHRpb25hbFN0cmluZ0J5dGVzKCkpOwotICAgIGJ1
aWxkZXIuY2xlYXJPcHRpb25hbFN0cmluZygpOwotICAgIGFzc2VydEVxdWFscyhCeXRlU3RyaW5n
LkVNUFRZLCBidWlsZGVyLmdldE9wdGlvbmFsU3RyaW5nQnl0ZXMoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKAotICAgICAgICBCeXRlU3RyaW5nLmNvcHlGcm9tVXRmOCgibm8iKSwKLSAgICAgICAgbWVz
c2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9uYWxTdHJpbmdCeXRlcygpKTsKLSAgICAKLSAgICBtZXNz
YWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxTdHJpbmdQaWVj
ZSgiaGkiKTsKLSAgICBhc3NlcnRFcXVhbHMoIiIsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxTdHJpbmdQ
aWVjZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoImhpIiwgYnVpbGRlci5nZXRPcHRpb25hbFN0cmlu
Z1BpZWNlKCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAg
IGFzc2VydEVxdWFscygiaGkiLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbFN0cmluZ1Bp
ZWNlKCkpOwotICAgIGFzc2VydEVxdWFscygiIiwgbWVzc2FnZS5nZXRPcHRpb25hbFN0cmluZ1Bp
ZWNlKCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbFN0cmluZ1BpZWNlKCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKCIiLCBidWlsZGVyLmdldE9wdGlvbmFsU3RyaW5nUGllY2UoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKCJoaSIsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsU3RyaW5nUGllY2Uo
KSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T3B0
aW9uYWxTdHJpbmdQaWVjZUJ5dGVzKEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJubyIpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoQnl0ZVN0cmluZy5FTVBUWSwgbWVzc2FnZS5nZXRPcHRpb25hbFN0cmlu
Z1BpZWNlQnl0ZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBCeXRlU3RyaW5nLmNv
cHlGcm9tVXRmOCgibm8iKSwgYnVpbGRlci5nZXRPcHRpb25hbFN0cmluZ1BpZWNlQnl0ZXMoKSk7
Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKAotICAgICAgICBCeXRlU3RyaW5nLmNvcHlGcm9tVXRmOCgibm8iKSwKLSAgICAgICAgbWVz
c2FnZUFmdGVyQnVpbGQuZ2V0T3B0aW9uYWxTdHJpbmdQaWVjZUJ5dGVzKCkpOwotICAgIGFzc2Vy
dEVxdWFscyhCeXRlU3RyaW5nLkVNUFRZLCBtZXNzYWdlLmdldE9wdGlvbmFsU3RyaW5nUGllY2VC
eXRlcygpKTsKLSAgICBidWlsZGVyLmNsZWFyT3B0aW9uYWxTdHJpbmdQaWVjZSgpOwotICAgIGFz
c2VydEVxdWFscyhCeXRlU3RyaW5nLkVNUFRZLCBidWlsZGVyLmdldE9wdGlvbmFsU3RyaW5nUGll
Y2VCeXRlcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEJ5dGVTdHJpbmcuY29weUZy
b21VdGY4KCJubyIpLAotICAgICAgICBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPcHRpb25hbFN0cmlu
Z1BpZWNlQnl0ZXMoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1
aWxkZXIuc2V0T3B0aW9uYWxVaW50MzIoMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2Uu
Z2V0T3B0aW9uYWxVaW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxkZXIuZ2V0T3B0
aW9uYWxVaW50MzIoKSk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsVWludDMy
KCkpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldE9wdGlvbmFsVWludDMyKCkpOwot
ICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbFVpbnQzMigpOwotICAgIGFzc2VydEVxdWFscygwLCBi
dWlsZGVyLmdldE9wdGlvbmFsVWludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygxLCBtZXNzYWdl
QWZ0ZXJCdWlsZC5nZXRPcHRpb25hbFVpbnQzMigpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVy
LmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5zZXRPcHRpb25hbFVpbnQ2NCgxKTsKLSAgICBhc3NlcnRF
cXVhbHMoMEwsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxVaW50NjQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDFMLCBidWlsZGVyLmdldE9wdGlvbmFsVWludDY0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxk
ID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygxTCwgbWVzc2FnZUFmdGVyQnVp
bGQuZ2V0T3B0aW9uYWxVaW50NjQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBtZXNzYWdlLmdl
dE9wdGlvbmFsVWludDY0KCkpOwotICAgIGJ1aWxkZXIuY2xlYXJPcHRpb25hbFVpbnQ2NCgpOwot
ICAgIGFzc2VydEVxdWFscygwTCwgYnVpbGRlci5nZXRPcHRpb25hbFVpbnQ2NCgpKTsKLSAgICBh
c3NlcnRFcXVhbHMoMUwsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9wdGlvbmFsVWludDY0KCkpOwot
Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZEFsbFJlcGVh
dGVkQm9vbChzaW5nbGV0b25MaXN0KHRydWUpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0
KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRCb29sTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2lu
Z2xldG9uTGlzdCh0cnVlKSwgYnVpbGRlci5nZXRSZXBlYXRlZEJvb2xMaXN0KCkpOwotICAgIGFz
c2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEJvb2xMaXN0KCkpOwot
ICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xl
YXJSZXBlYXRlZEJvb2woKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIGJ1aWxkZXIu
Z2V0UmVwZWF0ZWRCb29sTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2luZ2xldG9uTGlzdCh0
cnVlKSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRCb29sTGlzdCgpKTsKLQotICAgIG1l
c3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRBbGxSZXBlYXRlZEJ5dGVz
KHNpbmdsZXRvbkxpc3QoQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoImhpIikpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRCeXRlc0xpc3QoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBzaW5nbGV0b25MaXN0KEJ5dGVTdHJpbmcuY29weUZy
b21VdGY4KCJoaSIpKSwKLSAgICAgICAgYnVpbGRlci5nZXRSZXBlYXRlZEJ5dGVzTGlzdCgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRCeXRlc0xp
c3QoKSk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVp
bGRlci5jbGVhclJlcGVhdGVkQnl0ZXMoKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCks
IGJ1aWxkZXIuZ2V0UmVwZWF0ZWRCeXRlc0xpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAg
ICAgICBzaW5nbGV0b25MaXN0KEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJoaSIpKSwKLSAgICAg
ICAgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRCeXRlc0xpc3QoKSk7Ci0KLSAgICBtZXNz
YWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkQWxsUmVwZWF0ZWRDb3JkKHNp
bmdsZXRvbkxpc3QoImhpIikpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZENvcmRMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0
KCJoaSIpLCBidWlsZGVyLmdldFJlcGVhdGVkQ29yZExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkQ29yZExpc3QoKSk7Ci0gICAgbWVzc2Fn
ZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVhdGVk
Q29yZCgpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRl
ZENvcmRMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KCJoaSIpLCBtZXNz
YWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZENvcmRMaXN0KCkpOwotCi0gICAgbWVzc2FnZSA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZEFsbFJlcGVhdGVkRG91YmxlKHNpbmdsZXRv
bkxpc3QoMUQpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWREb3VibGVMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDFEKSwg
YnVpbGRlci5nZXRSZXBlYXRlZERvdWJsZUxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5
TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkRG91YmxlTGlzdCgpKTsKLSAgICBtZXNzYWdlQWZ0
ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWREb3Vi
bGUoKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRE
b3VibGVMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDFEKSwgbWVzc2Fn
ZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWREb3VibGVMaXN0KCkpOwotCi0gICAgbWVzc2FnZSA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZEFsbFJlcGVhdGVkRml4ZWQzMihzaW5nbGV0
b25MaXN0KDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGaXhlZDMyTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2luZ2xldG9uTGlzdCgxKSwg
YnVpbGRlci5nZXRSZXBlYXRlZEZpeGVkMzJMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhlbXB0
eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpeGVkMzJMaXN0KCkpOwotICAgIG1lc3NhZ2VB
ZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZEZp
eGVkMzIoKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIGJ1aWxkZXIuZ2V0UmVwZWF0
ZWRGaXhlZDMyTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2luZ2xldG9uTGlzdCgxKSwgbWVz
c2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRGaXhlZDMyTGlzdCgpKTsKLQotICAgIG1lc3NhZ2Ug
PSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRBbGxSZXBlYXRlZEZpeGVkNjQoc2lu
Z2xldG9uTGlzdCgxTCkpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZpeGVkNjRMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0
KDFMKSwgYnVpbGRlci5nZXRSZXBlYXRlZEZpeGVkNjRMaXN0KCkpOwotICAgIGFzc2VydEVxdWFs
cyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpeGVkNjRMaXN0KCkpOwotICAgIG1l
c3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBl
YXRlZEZpeGVkNjQoKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIGJ1aWxkZXIuZ2V0
UmVwZWF0ZWRGaXhlZDY0TGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2luZ2xldG9uTGlzdCgx
TCksIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkRml4ZWQ2NExpc3QoKSk7Ci0KLSAgICBt
ZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkQWxsUmVwZWF0ZWRGbG9h
dChzaW5nbGV0b25MaXN0KDFGKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNz
YWdlLmdldFJlcGVhdGVkRmxvYXRMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25M
aXN0KDFGKSwgYnVpbGRlci5nZXRSZXBlYXRlZEZsb2F0TGlzdCgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGbG9hdExpc3QoKSk7Ci0gICAgbWVz
c2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVh
dGVkRmxvYXQoKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIGJ1aWxkZXIuZ2V0UmVw
ZWF0ZWRGbG9hdExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMUYpLCBt
ZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZEZsb2F0TGlzdCgpKTsKLQotICAgIG1lc3NhZ2Ug
PSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRBbGxSZXBlYXRlZEZvcmVpZ25FbnVt
KAotICAgICAgICBzaW5nbGV0b25MaXN0KEZvcmVpZ25FbnVtTGl0ZS5GT1JFSUdOX0xJVEVfQkFS
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkRm9y
ZWlnbkVudW1MaXN0KCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgc2luZ2xldG9uTGlz
dChGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUiksCi0gICAgICAgIGJ1aWxkZXIuZ2V0
UmVwZWF0ZWRGb3JlaWduRW51bUxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgp
LCBtZXNzYWdlLmdldFJlcGVhdGVkRm9yZWlnbkVudW1MaXN0KCkpOwotICAgIG1lc3NhZ2VBZnRl
ckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZEZvcmVp
Z25FbnVtKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBidWlsZGVyLmdldFJlcGVh
dGVkRm9yZWlnbkVudW1MaXN0KCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgc2luZ2xl
dG9uTGlzdChGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUiksCi0gICAgICAgIG1lc3Nh
Z2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkRm9yZWlnbkVudW1MaXN0KCkpOwotCi0gICAgbWVzc2Fn
ZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZEFsbFJlcGVhdGVkRm9yZWlnbk1l
c3NhZ2Uoc2luZ2xldG9uTGlzdChmb3JlaWduTWVzc2FnZSkpOwotICAgIGFzc2VydEVxdWFscyhl
bXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlTGlzdCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QoZm9yZWlnbk1lc3NhZ2UpLCBi
dWlsZGVyLmdldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VMaXN0KCkpOwotICAgIGFzc2VydEVxdWFs
cyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlTGlzdCgpKTsK
LSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmNs
ZWFyUmVwZWF0ZWRGb3JlaWduTWVzc2FnZSgpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3Qo
KSwgYnVpbGRlci5nZXRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlTGlzdCgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QoZm9yZWlnbk1lc3NhZ2UpLAotICAgICAgICBt
ZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlTGlzdCgpKTsKLQotICAg
IG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRBbGxSZXBlYXRlZEdy
b3VwKAotICAgICAgICBzaW5nbGV0b25MaXN0KFJlcGVhdGVkR3JvdXAuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRHcm91cExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBzaW5nbGV0b25MaXN0
KFJlcGVhdGVkR3JvdXAuZ2V0RGVmYXVsdEluc3RhbmNlKCkpLAotICAgICAgICBidWlsZGVyLmdl
dFJlcGVhdGVkR3JvdXBMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVz
c2FnZS5nZXRSZXBlYXRlZEdyb3VwTGlzdCgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRHcm91cCgpOwotICAgIGFz
c2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZEdyb3VwTGlzdCgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QoUmVwZWF0ZWRHcm91cC5n
ZXREZWZhdWx0SW5zdGFuY2UoKSksCi0gICAgICAgIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVh
dGVkR3JvdXBMaXN0KCkpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBi
dWlsZGVyLmFkZEFsbFJlcGVhdGVkSW50MzIoc2luZ2xldG9uTGlzdCgxKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkSW50MzJMaXN0KCkpOwotICAg
IGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDEpLCBidWlsZGVyLmdldFJlcGVhdGVkSW50MzJM
aXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRl
ZEludDMyTGlzdCgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsK
LSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRJbnQzMigpOwotICAgIGFzc2VydEVxdWFscyhlbXB0
eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZEludDMyTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoc2luZ2xldG9uTGlzdCgxKSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRJbnQzMkxp
c3QoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRk
QWxsUmVwZWF0ZWRJbnQ2NChzaW5nbGV0b25MaXN0KDFMKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVt
cHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkSW50NjRMaXN0KCkpOwotICAgIGFzc2VydEVx
dWFscyhzaW5nbGV0b25MaXN0KDFMKSwgYnVpbGRlci5nZXRSZXBlYXRlZEludDY0TGlzdCgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRJbnQ2NExp
c3QoKSk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVp
bGRlci5jbGVhclJlcGVhdGVkSW50NjQoKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCks
IGJ1aWxkZXIuZ2V0UmVwZWF0ZWRJbnQ2NExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmds
ZXRvbkxpc3QoMUwpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZEludDY0TGlzdCgpKTsK
LQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRBbGxSZXBl
YXRlZExhenlNZXNzYWdlKHNpbmdsZXRvbkxpc3QobmVzdGVkTWVzc2FnZSkpOwotICAgIGFzc2Vy
dEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZExhenlNZXNzYWdlTGlzdCgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QobmVzdGVkTWVzc2Fn
ZSksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRMYXp5TWVzc2FnZUxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkTGF6eU1lc3NhZ2VMaXN0KCkpOwot
ICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xl
YXJSZXBlYXRlZExhenlNZXNzYWdlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBi
dWlsZGVyLmdldFJlcGVhdGVkTGF6eU1lc3NhZ2VMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscygK
LSAgICAgICAgc2luZ2xldG9uTGlzdChuZXN0ZWRNZXNzYWdlKSwKLSAgICAgICAgbWVzc2FnZUFm
dGVyQnVpbGQuZ2V0UmVwZWF0ZWRMYXp5TWVzc2FnZUxpc3QoKSk7Ci0KLSAgICBtZXNzYWdlID0g
YnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkQWxsUmVwZWF0ZWRTZml4ZWQzMihzaW5n
bGV0b25MaXN0KDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0
UmVwZWF0ZWRTZml4ZWQzMkxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3Qo
MSksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRTZml4ZWQzMkxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ZpeGVkMzJMaXN0KCkpOwotICAgIG1l
c3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBl
YXRlZFNmaXhlZDMyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBidWlsZGVyLmdl
dFJlcGVhdGVkU2ZpeGVkMzJMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0
KDEpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZFNmaXhlZDMyTGlzdCgpKTsKLQotICAg
IG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRBbGxSZXBlYXRlZFNm
aXhlZDY0KHNpbmdsZXRvbkxpc3QoMUwpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCks
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTZml4ZWQ2NExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNp
bmdsZXRvbkxpc3QoMUwpLCBidWlsZGVyLmdldFJlcGVhdGVkU2ZpeGVkNjRMaXN0KCkpOwotICAg
IGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZFNmaXhlZDY0TGlz
dCgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWls
ZGVyLmNsZWFyUmVwZWF0ZWRTZml4ZWQ2NCgpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3Qo
KSwgYnVpbGRlci5nZXRSZXBlYXRlZFNmaXhlZDY0TGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMo
Ci0gICAgICAgIHNpbmdsZXRvbkxpc3QoMUwpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRl
ZFNmaXhlZDY0TGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAg
YnVpbGRlci5hZGRBbGxSZXBlYXRlZFNpbnQzMihzaW5nbGV0b25MaXN0KDEpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTaW50MzJMaXN0KCkpOwot
ICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDEpLCBidWlsZGVyLmdldFJlcGVhdGVkU2lu
dDMyTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRTaW50MzJMaXN0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWls
ZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZFNpbnQzMigpOwotICAgIGFzc2VydEVxdWFs
cyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZFNpbnQzMkxpc3QoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMSksIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVk
U2ludDMyTGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVp
bGRlci5hZGRBbGxSZXBlYXRlZFNpbnQ2NChzaW5nbGV0b25MaXN0KDFMKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ludDY0TGlzdCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoc2luZ2xldG9uTGlzdCgxTCksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRTaW50
NjRMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBl
YXRlZFNpbnQ2NExpc3QoKSk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxk
KCk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVhdGVkU2ludDY0KCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KGVtcHR5TGlzdCgpLCBidWlsZGVyLmdldFJlcGVhdGVkU2ludDY0TGlzdCgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoc2luZ2xldG9uTGlzdCgxTCksIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVk
U2ludDY0TGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVp
bGRlci5hZGRBbGxSZXBlYXRlZFN0cmluZyhzaW5nbGV0b25MaXN0KCJoaSIpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTdHJpbmdMaXN0KCkpOwot
ICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KCJoaSIpLCBidWlsZGVyLmdldFJlcGVhdGVk
U3RyaW5nTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0
UmVwZWF0ZWRTdHJpbmdMaXN0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5i
dWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZFN0cmluZygpOwotICAgIGFzc2VydEVx
dWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZFN0cmluZ0xpc3QoKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKAotICAgICAgICBzaW5nbGV0b25MaXN0KCJoaSIpLCBtZXNzYWdlQWZ0ZXJC
dWlsZC5nZXRSZXBlYXRlZFN0cmluZ0xpc3QoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5i
dWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkQWxsUmVwZWF0ZWRTdHJpbmdQaWVjZShzaW5nbGV0b25M
aXN0KCJoaSIpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRTdHJpbmdQaWVjZUxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3Qo
ImhpIiksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRTdHJpbmdQaWVjZUxpc3QoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkU3RyaW5nUGllY2VMaXN0KCkp
OwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIu
Y2xlYXJSZXBlYXRlZFN0cmluZ1BpZWNlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgp
LCBidWlsZGVyLmdldFJlcGVhdGVkU3RyaW5nUGllY2VMaXN0KCkpOwotICAgIGFzc2VydEVxdWFs
cygKLSAgICAgICAgc2luZ2xldG9uTGlzdCgiaGkiKSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVw
ZWF0ZWRTdHJpbmdQaWVjZUxpc3QoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgp
OwotICAgIGJ1aWxkZXIuYWRkQWxsUmVwZWF0ZWRVaW50MzIoc2luZ2xldG9uTGlzdCgxKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkVWludDMyTGlz
dCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2luZ2xldG9uTGlzdCgxKSwgYnVpbGRlci5nZXRSZXBl
YXRlZFVpbnQzMkxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdl
LmdldFJlcGVhdGVkVWludDMyTGlzdCgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxk
ZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRVaW50MzIoKTsKLSAgICBhc3Nl
cnRFcXVhbHMoZW1wdHlMaXN0KCksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRVaW50MzJMaXN0KCkpOwot
ICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDEpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRS
ZXBlYXRlZFVpbnQzMkxpc3QoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwot
ICAgIGJ1aWxkZXIuYWRkQWxsUmVwZWF0ZWRVaW50NjQoc2luZ2xldG9uTGlzdCgxTCkpOwotICAg
IGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZFVpbnQ2NExpc3Qo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMUwpLCBidWlsZGVyLmdldFJlcGVh
dGVkVWludDY0TGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRVaW50NjRMaXN0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRl
ci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZFVpbnQ2NCgpOwotICAgIGFzc2Vy
dEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZFVpbnQ2NExpc3QoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMUwpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRS
ZXBlYXRlZFVpbnQ2NExpc3QoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwot
ICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRCb29sKHRydWUpOwotICAgIGFzc2VydEVxdWFscyhlbXB0
eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEJvb2xMaXN0KCkpOwotICAgIGFzc2VydEVxdWFs
cyhzaW5nbGV0b25MaXN0KHRydWUpLCBidWlsZGVyLmdldFJlcGVhdGVkQm9vbExpc3QoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkQm9vbExpc3Qo
KSk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRl
ci5jbGVhclJlcGVhdGVkQm9vbCgpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVp
bGRlci5nZXRSZXBlYXRlZEJvb2xMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25M
aXN0KHRydWUpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZEJvb2xMaXN0KCkpOwotCi0g
ICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkQnl0
ZXMoQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoImhpIikpOwotICAgIGFzc2VydEVxdWFscyhlbXB0
eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEJ5dGVzTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QoQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoImhpIikp
LAotICAgICAgICBidWlsZGVyLmdldFJlcGVhdGVkQnl0ZXNMaXN0KCkpOwotICAgIGFzc2VydEVx
dWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEJ5dGVzTGlzdCgpKTsKLSAgICBt
ZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmNsZWFyUmVw
ZWF0ZWRCeXRlcygpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRS
ZXBlYXRlZEJ5dGVzTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHNpbmdsZXRv
bkxpc3QoQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoImhpIikpLAotICAgICAgICBtZXNzYWdlQWZ0
ZXJCdWlsZC5nZXRSZXBlYXRlZEJ5dGVzTGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVy
LmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZENvcmQoImhpIik7Ci0gICAgYXNzZXJ0
RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkQ29yZExpc3QoKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoImhpIiksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRDb3Jk
TGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRDb3JkTGlzdCgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsK
LSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRDb3JkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5
TGlzdCgpLCBidWlsZGVyLmdldFJlcGVhdGVkQ29yZExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KHNpbmdsZXRvbkxpc3QoImhpIiksIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkQ29yZExp
c3QoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRk
UmVwZWF0ZWREb3VibGUoMUQpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZERvdWJsZUxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxp
c3QoMUQpLCBidWlsZGVyLmdldFJlcGVhdGVkRG91YmxlTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWREb3VibGVMaXN0KCkpOwotICAgIG1l
c3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBl
YXRlZERvdWJsZSgpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRS
ZXBlYXRlZERvdWJsZUxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMUQp
LCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZERvdWJsZUxpc3QoKSk7Ci0KLSAgICBtZXNz
YWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGaXhlZDMyKDEp
OwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpeGVk
MzJMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDEpLCBidWlsZGVyLmdl
dFJlcGVhdGVkRml4ZWQzMkxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBt
ZXNzYWdlLmdldFJlcGVhdGVkRml4ZWQzMkxpc3QoKSk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQg
PSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVhdGVkRml4ZWQzMigpOwot
ICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZEZpeGVkMzJM
aXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDEpLCBtZXNzYWdlQWZ0ZXJC
dWlsZC5nZXRSZXBlYXRlZEZpeGVkMzJMaXN0KCkpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIu
YnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRml4ZWQ2NCgxTCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkRml4ZWQ2NExpc3QoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMUwpLCBidWlsZGVyLmdldFJlcGVhdGVkRml4
ZWQ2NExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJl
cGVhdGVkRml4ZWQ2NExpc3QoKSk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1
aWxkKCk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVhdGVkRml4ZWQ2NCgpOwotICAgIGFzc2VydEVx
dWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZEZpeGVkNjRMaXN0KCkpOwotICAg
IGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDFMKSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVw
ZWF0ZWRGaXhlZDY0TGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgYnVpbGRlci5hZGRSZXBlYXRlZEZsb2F0KDFGKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlM
aXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGbG9hdExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KHNpbmdsZXRvbkxpc3QoMUYpLCBidWlsZGVyLmdldFJlcGVhdGVkRmxvYXRMaXN0KCkpOwotICAg
IGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0TGlzdCgp
KTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVy
LmNsZWFyUmVwZWF0ZWRGbG9hdCgpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVp
bGRlci5nZXRSZXBlYXRlZEZsb2F0TGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2luZ2xldG9u
TGlzdCgxRiksIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkRmxvYXRMaXN0KCkpOwotCi0g
ICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRm9y
ZWlnbkVudW0oRm9yZWlnbkVudW1MaXRlLkZPUkVJR05fTElURV9CQVIpOwotICAgIGFzc2VydEVx
dWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZvcmVpZ25FbnVtTGlzdCgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QoRm9yZWlnbkVudW1MaXRl
LkZPUkVJR05fTElURV9CQVIpLAotICAgICAgICBidWlsZGVyLmdldFJlcGVhdGVkRm9yZWlnbkVu
dW1MaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBl
YXRlZEZvcmVpZ25FbnVtTGlzdCgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIu
YnVpbGQoKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRGb3JlaWduRW51bSgpOwotICAgIGFz
c2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZEZvcmVpZ25FbnVtTGlz
dCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QoRm9yZWlnbkVu
dW1MaXRlLkZPUkVJR05fTElURV9CQVIpLAotICAgICAgICBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRS
ZXBlYXRlZEZvcmVpZ25FbnVtTGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxk
KCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlKGZvcmVpZ25NZXNzYWdl
KTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGb3Jl
aWduTWVzc2FnZUxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBzaW5nbGV0b25M
aXN0KGZvcmVpZ25NZXNzYWdlKSwgYnVpbGRlci5nZXRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlTGlz
dCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRG
b3JlaWduTWVzc2FnZUxpc3QoKSk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1
aWxkKCk7Ci0gICAgYnVpbGRlci5yZW1vdmVSZXBlYXRlZEZvcmVpZ25NZXNzYWdlKDApOwotICAg
IGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZEZvcmVpZ25NZXNz
YWdlTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QoZm9y
ZWlnbk1lc3NhZ2UpLAotICAgICAgICBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZEZvcmVp
Z25NZXNzYWdlTGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAg
YnVpbGRlci5hZGRSZXBlYXRlZEdyb3VwKFJlcGVhdGVkR3JvdXAuZ2V0RGVmYXVsdEluc3RhbmNl
KCkpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEdy
b3VwTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QoUmVw
ZWF0ZWRHcm91cC5nZXREZWZhdWx0SW5zdGFuY2UoKSksCi0gICAgICAgIGJ1aWxkZXIuZ2V0UmVw
ZWF0ZWRHcm91cExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdl
LmdldFJlcGVhdGVkR3JvdXBMaXN0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRl
ci5idWlsZCgpOwotICAgIGJ1aWxkZXIucmVtb3ZlUmVwZWF0ZWRHcm91cCgwKTsKLSAgICBhc3Nl
cnRFcXVhbHMoZW1wdHlMaXN0KCksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRHcm91cExpc3QoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBzaW5nbGV0b25MaXN0KFJlcGVhdGVkR3JvdXAuZ2V0
RGVmYXVsdEluc3RhbmNlKCkpLAotICAgICAgICBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRl
ZEdyb3VwTGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVp
bGRlci5hZGRSZXBlYXRlZEludDMyKDEpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwg
bWVzc2FnZS5nZXRSZXBlYXRlZEludDMyTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2luZ2xl
dG9uTGlzdCgxKSwgYnVpbGRlci5nZXRSZXBlYXRlZEludDMyTGlzdCgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRJbnQzMkxpc3QoKSk7Ci0gICAg
bWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5jbGVhclJl
cGVhdGVkSW50MzIoKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIGJ1aWxkZXIuZ2V0
UmVwZWF0ZWRJbnQzMkxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMSks
IG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkSW50MzJMaXN0KCkpOwotCi0gICAgbWVzc2Fn
ZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkSW50NjQoMUwpOwot
ICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEludDY0TGlz
dCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2luZ2xldG9uTGlzdCgxTCksIGJ1aWxkZXIuZ2V0UmVw
ZWF0ZWRJbnQ2NExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdl
LmdldFJlcGVhdGVkSW50NjRMaXN0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRl
ci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZEludDY0KCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGVtcHR5TGlzdCgpLCBidWlsZGVyLmdldFJlcGVhdGVkSW50NjRMaXN0KCkpOwotICAg
IGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDFMKSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVw
ZWF0ZWRJbnQ2NExpc3QoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAg
IGJ1aWxkZXIuYWRkUmVwZWF0ZWRMYXp5TWVzc2FnZShuZXN0ZWRNZXNzYWdlKTsKLSAgICBhc3Nl
cnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRMYXp5TWVzc2FnZUxpc3Qo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBzaW5nbGV0b25MaXN0KG5lc3RlZE1lc3Nh
Z2UpLCBidWlsZGVyLmdldFJlcGVhdGVkTGF6eU1lc3NhZ2VMaXN0KCkpOwotICAgIGFzc2VydEVx
dWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZExhenlNZXNzYWdlTGlzdCgpKTsK
LSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLnJl
bW92ZVJlcGVhdGVkTGF6eU1lc3NhZ2UoMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgp
LCBidWlsZGVyLmdldFJlcGVhdGVkTGF6eU1lc3NhZ2VMaXN0KCkpOwotICAgIGFzc2VydEVxdWFs
cygKLSAgICAgICAgc2luZ2xldG9uTGlzdChuZXN0ZWRNZXNzYWdlKSwKLSAgICAgICAgbWVzc2Fn
ZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRMYXp5TWVzc2FnZUxpc3QoKSk7Ci0KLSAgICBtZXNzYWdl
ID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRTZml4ZWQzMigxKTsK
LSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTZml4ZWQz
Mkxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMSksIGJ1aWxkZXIuZ2V0
UmVwZWF0ZWRTZml4ZWQzMkxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBt
ZXNzYWdlLmdldFJlcGVhdGVkU2ZpeGVkMzJMaXN0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxk
ID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZFNmaXhlZDMyKCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBidWlsZGVyLmdldFJlcGVhdGVkU2ZpeGVk
MzJMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDEpLCBtZXNzYWdlQWZ0
ZXJCdWlsZC5nZXRSZXBlYXRlZFNmaXhlZDMyTGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWls
ZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZFNmaXhlZDY0KDFMKTsKLSAgICBh
c3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTZml4ZWQ2NExpc3Qo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMUwpLCBidWlsZGVyLmdldFJlcGVh
dGVkU2ZpeGVkNjRMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZFNmaXhlZDY0TGlzdCgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRTZml4ZWQ2NCgpOwotICAg
IGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZFNmaXhlZDY0TGlz
dCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHNpbmdsZXRvbkxpc3QoMUwpLCBtZXNz
YWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZFNmaXhlZDY0TGlzdCgpKTsKLQotICAgIG1lc3NhZ2Ug
PSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZFNpbnQzMigxKTsKLSAg
ICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTaW50MzJMaXN0
KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0KDEpLCBidWlsZGVyLmdldFJlcGVh
dGVkU2ludDMyTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRTaW50MzJMaXN0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRl
ci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZFNpbnQzMigpOwotICAgIGFzc2Vy
dEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRSZXBlYXRlZFNpbnQzMkxpc3QoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxpc3QoMSksIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJl
cGVhdGVkU2ludDMyTGlzdCgpKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgYnVpbGRlci5hZGRSZXBlYXRlZFNpbnQ2NCgxTCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5
TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ludDY0TGlzdCgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoc2luZ2xldG9uTGlzdCgxTCksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRTaW50NjRMaXN0KCkpOwot
ICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZFNpbnQ2NExp
c3QoKSk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVp
bGRlci5jbGVhclJlcGVhdGVkU2ludDY0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgp
LCBidWlsZGVyLmdldFJlcGVhdGVkU2ludDY0TGlzdCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2lu
Z2xldG9uTGlzdCgxTCksIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkU2ludDY0TGlzdCgp
KTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBl
YXRlZFN0cmluZygiaGkiKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRTdHJpbmdMaXN0KCkpOwotICAgIGFzc2VydEVxdWFscyhzaW5nbGV0b25MaXN0
KCJoaSIpLCBidWlsZGVyLmdldFJlcGVhdGVkU3RyaW5nTGlzdCgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTdHJpbmdMaXN0KCkpOwotICAgIG1l
c3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBl
YXRlZFN0cmluZygpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRlci5nZXRS
ZXBlYXRlZFN0cmluZ0xpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBzaW5nbGV0
b25MaXN0KCJoaSIpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZFN0cmluZ0xpc3QoKSk7
Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0
ZWRTdHJpbmdQaWVjZSgiaGkiKTsKLSAgICBhc3NlcnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3Nh
Z2UuZ2V0UmVwZWF0ZWRTdHJpbmdQaWVjZUxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmds
ZXRvbkxpc3QoImhpIiksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRTdHJpbmdQaWVjZUxpc3QoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkU3RyaW5nUGll
Y2VMaXN0KCkpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAg
IGJ1aWxkZXIuY2xlYXJSZXBlYXRlZFN0cmluZ1BpZWNlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVt
cHR5TGlzdCgpLCBidWlsZGVyLmdldFJlcGVhdGVkU3RyaW5nUGllY2VMaXN0KCkpOwotICAgIGFz
c2VydEVxdWFscygKLSAgICAgICAgc2luZ2xldG9uTGlzdCgiaGkiKSwgbWVzc2FnZUFmdGVyQnVp
bGQuZ2V0UmVwZWF0ZWRTdHJpbmdQaWVjZUxpc3QoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRl
ci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRVaW50MzIoMSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVhdGVkVWludDMyTGlzdCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoc2luZ2xldG9uTGlzdCgxKSwgYnVpbGRlci5nZXRSZXBlYXRlZFVpbnQz
Mkxpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVtcHR5TGlzdCgpLCBtZXNzYWdlLmdldFJlcGVh
dGVkVWludDMyTGlzdCgpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQo
KTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRVaW50MzIoKTsKLSAgICBhc3NlcnRFcXVhbHMo
ZW1wdHlMaXN0KCksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRVaW50MzJMaXN0KCkpOwotICAgIGFzc2Vy
dEVxdWFscyhzaW5nbGV0b25MaXN0KDEpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZFVp
bnQzMkxpc3QoKSk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxk
ZXIuYWRkUmVwZWF0ZWRVaW50NjQoMUwpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwg
bWVzc2FnZS5nZXRSZXBlYXRlZFVpbnQ2NExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmds
ZXRvbkxpc3QoMUwpLCBidWlsZGVyLmdldFJlcGVhdGVkVWludDY0TGlzdCgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoZW1wdHlMaXN0KCksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRVaW50NjRMaXN0KCkpOwot
ICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xl
YXJSZXBlYXRlZFVpbnQ2NCgpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eUxpc3QoKSwgYnVpbGRl
ci5nZXRSZXBlYXRlZFVpbnQ2NExpc3QoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbmdsZXRvbkxp
c3QoMUwpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZFVpbnQ2NExpc3QoKSk7Ci0gICAg
Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVk
Qm9vbCh0cnVlKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEJvb2xDb3VudCgpKTsKLSAgICBi
dWlsZGVyLnNldFJlcGVhdGVkQm9vbCgwLCBmYWxzZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHRydWUs
IG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkQm9vbCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KGZhbHNlLCBidWlsZGVyLmdldFJlcGVhdGVkQm9vbCgwKSk7Ci0gICAgYnVpbGRlci5jbGVhclJl
cGVhdGVkQm9vbCgpOwotICAgIAotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAg
YnVpbGRlci5hZGRSZXBlYXRlZEJ5dGVzKEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJoaSIpKTsK
LSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVh
bHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEJ5dGVzQ291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRS
ZXBlYXRlZEJ5dGVzKDAsIEJ5dGVTdHJpbmcuRU1QVFkpOwotICAgIGFzc2VydEVxdWFscygKLSAg
ICAgICAgQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoImhpIiksIG1lc3NhZ2VBZnRlckJ1aWxkLmdl
dFJlcGVhdGVkQnl0ZXMoMCkpOwotICAgIGFzc2VydEVxdWFscyhCeXRlU3RyaW5nLkVNUFRZLCBi
dWlsZGVyLmdldFJlcGVhdGVkQnl0ZXMoMCkpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZEJ5
dGVzKCk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRk
UmVwZWF0ZWRDb3JkKCJoaSIpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWls
ZCgpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkQ29yZENvdW50KCkp
OwotICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRDb3JkKDAsICIiKTsKLSAgICBhc3NlcnRFcXVhbHMo
ImhpIiwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRDb3JkKDApKTsKLSAgICBhc3NlcnRF
cXVhbHMoIiIsIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRDb3JkKDApKTsKLSAgICBidWlsZGVyLmNsZWFy
UmVwZWF0ZWRDb3JkKCk7Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLQotICAgIGJ1
aWxkZXIuYWRkUmVwZWF0ZWRDb3JkQnl0ZXMoQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoImhpIikp
OwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVx
dWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkQ29yZENvdW50KCkpOwotICAgIGJ1aWxkZXIuc2V0
UmVwZWF0ZWRDb3JkKDAsICIiKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEJ5dGVTdHJp
bmcuY29weUZyb21VdGY4KCJoaSIpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZENvcmRC
eXRlcygwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuRU1QVFksIGJ1aWxkZXIuZ2V0
UmVwZWF0ZWRDb3JkQnl0ZXMoMCkpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZENvcmQoKTsK
LQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRl
ZERvdWJsZSgxRCk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWREb3VibGVDb3VudCgpKTsKLSAg
ICBidWlsZGVyLnNldFJlcGVhdGVkRG91YmxlKDAsIDBEKTsKLSAgICBhc3NlcnRFcXVhbHMoMUQs
IG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkRG91YmxlKDApKTsKLSAgICBhc3NlcnRFcXVh
bHMoMEQsIGJ1aWxkZXIuZ2V0UmVwZWF0ZWREb3VibGUoMCkpOwotICAgIGJ1aWxkZXIuY2xlYXJS
ZXBlYXRlZERvdWJsZSgpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBi
dWlsZGVyLmFkZFJlcGVhdGVkRml4ZWQzMigxKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEZp
eGVkMzJDb3VudCgpKTsKLSAgICBidWlsZGVyLnNldFJlcGVhdGVkRml4ZWQzMigwLCAwKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRGaXhlZDMyKDAp
KTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgYnVpbGRlci5nZXRSZXBlYXRlZEZpeGVkMzIoMCkpOwot
ICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZEZpeGVkMzIoKTsKLQotICAgIG1lc3NhZ2UgPSBidWls
ZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZpeGVkNjQoMUwpOwotICAgIG1l
c3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygwLCBt
ZXNzYWdlLmdldFJlcGVhdGVkRml4ZWQ2NENvdW50KCkpOwotICAgIGJ1aWxkZXIuc2V0UmVwZWF0
ZWRGaXhlZDY0KDAsIDBMKTsKLSAgICBhc3NlcnRFcXVhbHMoMUwsIG1lc3NhZ2VBZnRlckJ1aWxk
LmdldFJlcGVhdGVkRml4ZWQ2NCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBidWlsZGVyLmdl
dFJlcGVhdGVkRml4ZWQ2NCgwKSk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVhdGVkRml4ZWQ2NCgp
OwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVh
dGVkRmxvYXQoMUYpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwot
ICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRDb3VudCgpKTsKLSAg
ICBidWlsZGVyLnNldFJlcGVhdGVkRmxvYXQoMCwgMEYpOwotICAgIGFzc2VydEVxdWFscygxRiwg
bWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRGbG9hdCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDBGLCBidWlsZGVyLmdldFJlcGVhdGVkRmxvYXQoMCkpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBl
YXRlZEZsb2F0KCk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxk
ZXIuYWRkUmVwZWF0ZWRGb3JlaWduRW51bShGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JB
Uik7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGb3JlaWduRW51bUNvdW50KCkpOwotICAgIGJ1
aWxkZXIuc2V0UmVwZWF0ZWRGb3JlaWduRW51bSgwLCBGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9M
SVRFX0ZPTyk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBGb3JlaWduRW51bUxpdGUuRk9S
RUlHTl9MSVRFX0JBUiwKLSAgICAgICAgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRGb3Jl
aWduRW51bSgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBGb3JlaWduRW51bUxpdGUu
Rk9SRUlHTl9MSVRFX0ZPTywgYnVpbGRlci5nZXRSZXBlYXRlZEZvcmVpZ25FbnVtKDApKTsKLSAg
ICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRGb3JlaWduRW51bSgpOwotCi0gICAgbWVzc2FnZSA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UoZm9y
ZWlnbk1lc3NhZ2UpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwot
ICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VDb3Vu
dCgpKTsKLSAgICBidWlsZGVyLnNldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UoCi0gICAgICAgIDAs
IEZvcmVpZ25NZXNzYWdlTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKAotICAgICAgICBmb3JlaWduTWVzc2FnZSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0
ZWRGb3JlaWduTWVzc2FnZSgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBGb3JlaWdu
TWVzc2FnZUxpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCksCi0gICAgICAgIGJ1aWxkZXIuZ2V0UmVw
ZWF0ZWRGb3JlaWduTWVzc2FnZSgwKSk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVhdGVkRm9yZWln
bk1lc3NhZ2UoKTsKLSAgICAKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1
aWxkZXIuYWRkUmVwZWF0ZWRGb3JlaWduTWVzc2FnZShmb3JlaWduTWVzc2FnZUJ1aWxkZXIpOwot
ICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFs
cygwLCBtZXNzYWdlLmdldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VDb3VudCgpKTsKLSAgICBidWls
ZGVyLnNldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UoCi0gICAgICAgIDAsIEZvcmVpZ25NZXNzYWdl
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGZvcmVpZ25NZXNz
YWdlQnVpbGRlci5idWlsZCgpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZEZvcmVpZ25N
ZXNzYWdlKDApKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEZvcmVpZ25NZXNzYWdlTGl0
ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAgYnVpbGRlci5nZXRSZXBlYXRlZEZvcmVp
Z25NZXNzYWdlKDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRGb3JlaWduTWVzc2FnZSgp
OwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVh
dGVkRm9yZWlnbk1lc3NhZ2UoMCwgZm9yZWlnbk1lc3NhZ2UpOwotICAgIG1lc3NhZ2VBZnRlckJ1
aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJl
cGVhdGVkRm9yZWlnbk1lc3NhZ2VDb3VudCgpKTsKLSAgICBidWlsZGVyLnNldFJlcGVhdGVkRm9y
ZWlnbk1lc3NhZ2UoMCwgZm9yZWlnbk1lc3NhZ2VCdWlsZGVyKTsKLSAgICBhc3NlcnRFcXVhbHMo
Ci0gICAgICAgIGZvcmVpZ25NZXNzYWdlLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZEZv
cmVpZ25NZXNzYWdlKDApKTsKLSAgICBhc3NlcnRFcXVhbHMoZm9yZWlnbk1lc3NhZ2VCdWlsZGVy
LmJ1aWxkKCksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRGb3JlaWduTWVzc2FnZSgwKSk7Ci0gICAgYnVp
bGRlci5jbGVhclJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UoKTsKLQotICAgIG1lc3NhZ2UgPSBidWls
ZGVyLmJ1aWxkKCk7Ci0gICAgUmVwZWF0ZWRHcm91cCByZXBlYXRlZEdyb3VwID0gUmVwZWF0ZWRH
cm91cC5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldEEoMSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0g
ICAgYnVpbGRlci5hZGRSZXBlYXRlZEdyb3VwKHJlcGVhdGVkR3JvdXApOwotICAgIG1lc3NhZ2VB
ZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdl
LmdldFJlcGVhdGVkR3JvdXBDb3VudCgpKTsKLSAgICBidWlsZGVyLnNldFJlcGVhdGVkR3JvdXAo
MCwgUmVwZWF0ZWRHcm91cC5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KHJlcGVhdGVkR3JvdXAsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkR3JvdXAoMCkpOwot
ICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgUmVwZWF0ZWRHcm91cC5nZXREZWZhdWx0SW5zdGFu
Y2UoKSwgYnVpbGRlci5nZXRSZXBlYXRlZEdyb3VwKDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVw
ZWF0ZWRHcm91cCgpOwotICAgIAotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAg
YnVpbGRlci5hZGRSZXBlYXRlZEdyb3VwKDAsIHJlcGVhdGVkR3JvdXApOwotICAgIG1lc3NhZ2VB
ZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdl
LmdldFJlcGVhdGVkR3JvdXBDb3VudCgpKTsKLSAgICBidWlsZGVyLnNldFJlcGVhdGVkR3JvdXAo
MCwgUmVwZWF0ZWRHcm91cC5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KHJlcGVhdGVkR3JvdXAsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkR3JvdXAoMCkpOwot
ICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgUmVwZWF0ZWRHcm91cC5nZXREZWZhdWx0SW5zdGFu
Y2UoKSwgYnVpbGRlci5nZXRSZXBlYXRlZEdyb3VwKDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVw
ZWF0ZWRHcm91cCgpOwotICAgIAotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAg
UmVwZWF0ZWRHcm91cC5CdWlsZGVyIHJlcGVhdGVkR3JvdXBCdWlsZGVyID0gUmVwZWF0ZWRHcm91
cC5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldEEoMyk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRl
ZEdyb3VwKHJlcGVhdGVkR3JvdXBCdWlsZGVyKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEdy
b3VwQ291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRSZXBlYXRlZEdyb3VwKDAsIFJlcGVhdGVkR3Jv
dXAuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICAgIGFzc2VydEVxdWFscyhyZXBlYXRlZEdyb3Vw
QnVpbGRlci5idWlsZCgpLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZEdyb3VwKDApKTsK
LSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIFJlcGVhdGVkR3JvdXAuZ2V0RGVmYXVsdEluc3Rh
bmNlKCksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRHcm91cCgwKSk7Ci0gICAgYnVpbGRlci5jbGVhclJl
cGVhdGVkR3JvdXAoKTsKLSAgICAKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAg
IGJ1aWxkZXIuYWRkUmVwZWF0ZWRHcm91cCgwLCByZXBlYXRlZEdyb3VwQnVpbGRlcik7Ci0gICAg
bWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAs
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRHcm91cENvdW50KCkpOwotICAgIGJ1aWxkZXIuc2V0UmVwZWF0
ZWRHcm91cCgwLCBSZXBlYXRlZEdyb3VwLmdldERlZmF1bHRJbnN0YW5jZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMocmVwZWF0ZWRHcm91cEJ1aWxkZXIuYnVpbGQoKSwgbWVzc2FnZUFmdGVyQnVpbGQu
Z2V0UmVwZWF0ZWRHcm91cCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBSZXBlYXRl
ZEdyb3VwLmdldERlZmF1bHRJbnN0YW5jZSgpLCBidWlsZGVyLmdldFJlcGVhdGVkR3JvdXAoMCkp
OwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZEdyb3VwKCk7Ci0KLSAgICBtZXNzYWdlID0gYnVp
bGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRJbnQzMigxKTsKLSAgICBtZXNz
YWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVz
c2FnZS5nZXRSZXBlYXRlZEludDMyQ291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRSZXBlYXRlZElu
dDMyKDAsIDApOwotICAgIGFzc2VydEVxdWFscygxLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBl
YXRlZEludDMyKDApKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgYnVpbGRlci5nZXRSZXBlYXRlZElu
dDMyKDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRJbnQzMigpOwotCi0gICAgbWVzc2Fn
ZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkSW50NjQoMUwpOwot
ICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFs
cygwTCwgbWVzc2FnZS5nZXRSZXBlYXRlZEludDY0Q291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRS
ZXBlYXRlZEludDY0KDAsIDBMKTsKLSAgICBhc3NlcnRFcXVhbHMoMUwsIG1lc3NhZ2VBZnRlckJ1
aWxkLmdldFJlcGVhdGVkSW50NjQoMCkpOwotICAgIGFzc2VydEVxdWFscygwTCwgYnVpbGRlci5n
ZXRSZXBlYXRlZEludDY0KDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRJbnQ2NCgpOwot
ICAgIAotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBl
YXRlZExhenlNZXNzYWdlKG5lc3RlZE1lc3NhZ2UpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0g
YnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVk
TGF6eU1lc3NhZ2VDb3VudCgpKTsKLSAgICBidWlsZGVyLnNldFJlcGVhdGVkTGF6eU1lc3NhZ2Uo
MCwgTmVzdGVkTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KG5lc3RlZE1lc3NhZ2UsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkTGF6eU1lc3NhZ2Uo
MCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgTmVzdGVkTWVzc2FnZS5nZXREZWZhdWx0
SW5zdGFuY2UoKSwgYnVpbGRlci5nZXRSZXBlYXRlZExhenlNZXNzYWdlKDApKTsKLSAgICBidWls
ZGVyLmNsZWFyUmVwZWF0ZWRMYXp5TWVzc2FnZSgpOwotICAgIAotICAgIG1lc3NhZ2UgPSBidWls
ZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZExhenlNZXNzYWdlKDAsIG5lc3Rl
ZE1lc3NhZ2UpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAg
IGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkTGF6eU1lc3NhZ2VDb3VudCgpKTsK
LSAgICBidWlsZGVyLnNldFJlcGVhdGVkTGF6eU1lc3NhZ2UoMCwgTmVzdGVkTWVzc2FnZS5nZXRE
ZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5lc3RlZE1lc3NhZ2UsIG1lc3Nh
Z2VBZnRlckJ1aWxkLmdldFJlcGVhdGVkTGF6eU1lc3NhZ2UoMCkpOwotICAgIGFzc2VydEVxdWFs
cygKLSAgICAgICAgTmVzdGVkTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UoKSwgYnVpbGRlci5n
ZXRSZXBlYXRlZExhenlNZXNzYWdlKDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRMYXp5
TWVzc2FnZSgpOwotICAgIAotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVp
bGRlci5hZGRSZXBlYXRlZExhenlNZXNzYWdlKG5lc3RlZE1lc3NhZ2VCdWlsZGVyKTsKLSAgICBt
ZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwg
bWVzc2FnZS5nZXRSZXBlYXRlZExhenlNZXNzYWdlQ291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRS
ZXBlYXRlZExhenlNZXNzYWdlKDAsIE5lc3RlZE1lc3NhZ2UuZ2V0RGVmYXVsdEluc3RhbmNlKCkp
OwotICAgIGFzc2VydEVxdWFscyhuZXN0ZWRNZXNzYWdlQnVpbGRlci5idWlsZCgpLCBtZXNzYWdl
QWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZExhenlNZXNzYWdlKDApKTsKLSAgICBhc3NlcnRFcXVhbHMo
Ci0gICAgICAgIE5lc3RlZE1lc3NhZ2UuZ2V0RGVmYXVsdEluc3RhbmNlKCksIGJ1aWxkZXIuZ2V0
UmVwZWF0ZWRMYXp5TWVzc2FnZSgwKSk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVhdGVkTGF6eU1l
c3NhZ2UoKTsKLSAgICAKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxk
ZXIuYWRkUmVwZWF0ZWRMYXp5TWVzc2FnZSgwLCBuZXN0ZWRNZXNzYWdlQnVpbGRlcik7Ci0gICAg
bWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAs
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRMYXp5TWVzc2FnZUNvdW50KCkpOwotICAgIGJ1aWxkZXIuc2V0
UmVwZWF0ZWRMYXp5TWVzc2FnZSgwLCBOZXN0ZWRNZXNzYWdlLmdldERlZmF1bHRJbnN0YW5jZSgp
KTsKLSAgICBhc3NlcnRFcXVhbHMobmVzdGVkTWVzc2FnZUJ1aWxkZXIuYnVpbGQoKSwgbWVzc2Fn
ZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRMYXp5TWVzc2FnZSgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KAotICAgICAgICBOZXN0ZWRNZXNzYWdlLmdldERlZmF1bHRJbnN0YW5jZSgpLCBidWlsZGVyLmdl
dFJlcGVhdGVkTGF6eU1lc3NhZ2UoMCkpOwotICAgIGJ1aWxkZXIuY2xlYXJSZXBlYXRlZExhenlN
ZXNzYWdlKCk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIu
YWRkUmVwZWF0ZWRTZml4ZWQzMigxKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIu
YnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZFNmaXhlZDMy
Q291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRSZXBlYXRlZFNmaXhlZDMyKDAsIDApOwotICAgIGFz
c2VydEVxdWFscygxLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZFNmaXhlZDMyKDApKTsK
LSAgICBhc3NlcnRFcXVhbHMoMCwgYnVpbGRlci5nZXRSZXBlYXRlZFNmaXhlZDMyKDApKTsKLSAg
ICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRTZml4ZWQzMigpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxk
ZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkU2ZpeGVkNjQoMUwpOwotICAgIG1l
c3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygwTCwg
bWVzc2FnZS5nZXRSZXBlYXRlZFNmaXhlZDY0Q291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRSZXBl
YXRlZFNmaXhlZDY0KDAsIDBMKTsKLSAgICBhc3NlcnRFcXVhbHMoMUwsIG1lc3NhZ2VBZnRlckJ1
aWxkLmdldFJlcGVhdGVkU2ZpeGVkNjQoMCkpOwotICAgIGFzc2VydEVxdWFscygwTCwgYnVpbGRl
ci5nZXRSZXBlYXRlZFNmaXhlZDY0KDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRTZml4
ZWQ2NCgpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFk
ZFJlcGVhdGVkU2ludDMyKDEpOwotICAgIG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWls
ZCgpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ludDMyQ291bnQo
KSk7Ci0gICAgYnVpbGRlci5zZXRSZXBlYXRlZFNpbnQzMigwLCAwKTsKLSAgICBhc3NlcnRFcXVh
bHMoMSwgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRTaW50MzIoMCkpOwotICAgIGFzc2Vy
dEVxdWFscygwLCBidWlsZGVyLmdldFJlcGVhdGVkU2ludDMyKDApKTsKLSAgICBidWlsZGVyLmNs
ZWFyUmVwZWF0ZWRTaW50MzIoKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgYnVpbGRlci5hZGRSZXBlYXRlZFNpbnQ2NCgxTCk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQg
PSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBtZXNzYWdlLmdldFJlcGVh
dGVkU2ludDY0Q291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRSZXBlYXRlZFNpbnQ2NCgwLCAwTCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDFMLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZFNpbnQ2
NCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBidWlsZGVyLmdldFJlcGVhdGVkU2ludDY0KDAp
KTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRTaW50NjQoKTsKLQotICAgIG1lc3NhZ2UgPSBi
dWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZFN0cmluZygiaGkiKTsKLSAg
ICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMo
MEwsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTdHJpbmdDb3VudCgpKTsKLSAgICBidWlsZGVyLnNldFJl
cGVhdGVkU3RyaW5nKDAsICIiKTsKLSAgICBhc3NlcnRFcXVhbHMoImhpIiwgbWVzc2FnZUFmdGVy
QnVpbGQuZ2V0UmVwZWF0ZWRTdHJpbmcoMCkpOwotICAgIGFzc2VydEVxdWFscygiIiwgYnVpbGRl
ci5nZXRSZXBlYXRlZFN0cmluZygwKSk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVhdGVkU3RyaW5n
KCk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuYWRkUmVw
ZWF0ZWRTdHJpbmdCeXRlcyhCeXRlU3RyaW5nLmNvcHlGcm9tVXRmOCgiaGkiKSk7Ci0gICAgbWVz
c2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDBMLCBt
ZXNzYWdlLmdldFJlcGVhdGVkU3RyaW5nQ291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRSZXBlYXRl
ZFN0cmluZygwLCAiIik7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBCeXRlU3RyaW5nLmNv
cHlGcm9tVXRmOCgiaGkiKSwKLSAgICAgICAgbWVzc2FnZUFmdGVyQnVpbGQuZ2V0UmVwZWF0ZWRT
dHJpbmdCeXRlcygwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcuRU1QVFksIGJ1aWxk
ZXIuZ2V0UmVwZWF0ZWRTdHJpbmdCeXRlcygwKSk7Ci0gICAgYnVpbGRlci5jbGVhclJlcGVhdGVk
U3RyaW5nKCk7Ci0KLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIu
YWRkUmVwZWF0ZWRTdHJpbmdQaWVjZSgiaGkiKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMEwsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRT
dHJpbmdQaWVjZUNvdW50KCkpOwotICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRTdHJpbmdQaWVjZSgw
LCAiIik7Ci0gICAgYXNzZXJ0RXF1YWxzKCJoaSIsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldFJlcGVh
dGVkU3RyaW5nUGllY2UoMCkpOwotICAgIGFzc2VydEVxdWFscygiIiwgYnVpbGRlci5nZXRSZXBl
YXRlZFN0cmluZ1BpZWNlKDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRTdHJpbmdQaWVj
ZSgpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJl
cGVhdGVkU3RyaW5nUGllY2VCeXRlcyhCeXRlU3RyaW5nLmNvcHlGcm9tVXRmOCgiaGkiKSk7Ci0g
ICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDBMLCBtZXNzYWdlLmdldFJlcGVhdGVkU3RyaW5nUGllY2VDb3VudCgpKTsKLSAgICBidWlsZGVy
LnNldFJlcGVhdGVkU3RyaW5nUGllY2UoMCwgIiIpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAg
ICAgQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoImhpIiksCi0gICAgICAgIG1lc3NhZ2VBZnRlckJ1
aWxkLmdldFJlcGVhdGVkU3RyaW5nUGllY2VCeXRlcygwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJ5
dGVTdHJpbmcuRU1QVFksIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRTdHJpbmdQaWVjZUJ5dGVzKDApKTsK
LSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRTdHJpbmdQaWVjZSgpOwotCi0gICAgbWVzc2FnZSA9
IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkVWludDMyKDEpOwotICAg
IG1lc3NhZ2VBZnRlckJ1aWxkID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygw
LCBtZXNzYWdlLmdldFJlcGVhdGVkVWludDMyQ291bnQoKSk7Ci0gICAgYnVpbGRlci5zZXRSZXBl
YXRlZFVpbnQzMigwLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbWVzc2FnZUFmdGVyQnVpbGQu
Z2V0UmVwZWF0ZWRVaW50MzIoMCkpOwotICAgIGFzc2VydEVxdWFscygwLCBidWlsZGVyLmdldFJl
cGVhdGVkVWludDMyKDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVwZWF0ZWRVaW50MzIoKTsKLQot
ICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZFVp
bnQ2NCgxTCk7Ci0gICAgbWVzc2FnZUFmdGVyQnVpbGQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDBMLCBtZXNzYWdlLmdldFJlcGVhdGVkVWludDY0Q291bnQoKSk7Ci0gICAg
YnVpbGRlci5zZXRSZXBlYXRlZFVpbnQ2NCgwLCAwTCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDFMLCBt
ZXNzYWdlQWZ0ZXJCdWlsZC5nZXRSZXBlYXRlZFVpbnQ2NCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDBMLCBidWlsZGVyLmdldFJlcGVhdGVkVWludDY0KDApKTsKLSAgICBidWlsZGVyLmNsZWFyUmVw
ZWF0ZWRVaW50NjQoKTsKLQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0U2VyaWFsaXplZFNpemUoKSk7Ci0gICAgYnVpbGRlci5t
ZXJnZUZyb20oVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlv
bmFsQm9vbCh0cnVlKQotICAgICAgICAuYnVpbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1l
c3NhZ2UuZ2V0U2VyaWFsaXplZFNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHRydWUsIGJ1aWxk
ZXIuYnVpbGQoKS5nZXRPcHRpb25hbEJvb2woKSk7Ci0gICAgYnVpbGRlci5jbGVhck9wdGlvbmFs
Qm9vbCgpOwotCi0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVh
bHMoMCwgbWVzc2FnZS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBidWlsZGVyLm1lcmdlRnJv
bShUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxCb29s
KHRydWUpCi0gICAgICAgIC5idWlsZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5n
ZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHModHJ1ZSwgYnVpbGRlci5idWls
ZCgpLmdldE9wdGlvbmFsQm9vbCgpKTsKLSAgICBidWlsZGVyLmNsZWFyKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDAsIGJ1aWxkZXIuYnVpbGQoKS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLQotICAgIG1l
c3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0
U2VyaWFsaXplZFNpemUoKSk7Ci0gICAgYnVpbGRlci5tZXJnZU9wdGlvbmFsRm9yZWlnbk1lc3Nh
Z2UoZm9yZWlnbk1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFNlcmlh
bGl6ZWRTaXplKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgZm9yZWlnbk1lc3NhZ2Uu
Z2V0QygpLAotICAgICAgICBidWlsZGVyLmJ1aWxkKCkuZ2V0T3B0aW9uYWxGb3JlaWduTWVzc2Fn
ZSgpLmdldEMoKSk7Ci0gICAgYnVpbGRlci5jbGVhck9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UoKTsK
LQotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1l
c3NhZ2UuZ2V0U2VyaWFsaXplZFNpemUoKSk7Ci0gICAgYnVpbGRlci5tZXJnZU9wdGlvbmFsTGF6
eU1lc3NhZ2UobmVzdGVkTWVzc2FnZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0
U2VyaWFsaXplZFNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBuZXN0ZWRNZXNz
YWdlLmdldEJiKCksCi0gICAgICAgIGJ1aWxkZXIuYnVpbGQoKS5nZXRPcHRpb25hbExhenlNZXNz
YWdlKCkuZ2V0QmIoKSk7Ci0gICAgYnVpbGRlci5jbGVhck9wdGlvbmFsTGF6eU1lc3NhZ2UoKTsK
LSAgICAKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxkZXIuc2V0T25l
b2ZTdHJpbmcoImhpIik7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBPbmVvZkZpZWxkQ2Fz
ZS5PTkVPRkZJRUxEX05PVF9TRVQsIG1lc3NhZ2UuZ2V0T25lb2ZGaWVsZENhc2UoKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKE9uZW9mRmllbGRDYXNlLk9ORU9GX1NUUklORywgYnVpbGRlci5nZXRPbmVv
ZkZpZWxkQ2FzZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoImhpIiwgYnVpbGRlci5nZXRPbmVvZlN0
cmluZygpKTsKLSAgICBtZXNzYWdlQWZ0ZXJCdWlsZCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBh
c3NlcnRFcXVhbHMoCi0gICAgICAgIE9uZW9mRmllbGRDYXNlLk9ORU9GX1NUUklORywgbWVzc2Fn
ZUFmdGVyQnVpbGQuZ2V0T25lb2ZGaWVsZENhc2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJoaSIs
IG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9uZW9mU3RyaW5nKCkpOwotICAgIGJ1aWxkZXIuc2V0T25l
b2ZVaW50MzIoMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBPbmVvZkZpZWxkQ2FzZS5P
TkVPRl9TVFJJTkcsIG1lc3NhZ2VBZnRlckJ1aWxkLmdldE9uZW9mRmllbGRDYXNlKCkpOwotICAg
IGFzc2VydEVxdWFscygiaGkiLCBtZXNzYWdlQWZ0ZXJCdWlsZC5nZXRPbmVvZlN0cmluZygpKTsK
LSAgICBhc3NlcnRFcXVhbHMoT25lb2ZGaWVsZENhc2UuT05FT0ZfVUlOVDMyLCBidWlsZGVyLmdl
dE9uZW9mRmllbGRDYXNlKCkpOwotICAgIGFzc2VydEVxdWFscygxLCBidWlsZGVyLmdldE9uZW9m
VWludDMyKCkpOwotICAgIFRlc3RBbGxUeXBlc0xpdGVPckJ1aWxkZXIgbWVzc2FnZU9yQnVpbGRl
ciA9IGJ1aWxkZXI7Ci0gICAgYXNzZXJ0RXF1YWxzKE9uZW9mRmllbGRDYXNlLk9ORU9GX1VJTlQz
MiwgbWVzc2FnZU9yQnVpbGRlci5nZXRPbmVvZkZpZWxkQ2FzZSgpKTsKLSAgICAKLSAgICBUZXN0
QWxsRXh0ZW5zaW9uc0xpdGUuQnVpbGRlciBleHRlbmRhYmxlTWVzc2FnZUJ1aWxkZXIgPQotICAg
ICAgICBUZXN0QWxsRXh0ZW5zaW9uc0xpdGUubmV3QnVpbGRlcigpOwotICAgIFRlc3RBbGxFeHRl
bnNpb25zTGl0ZSBleHRlbmRhYmxlTWVzc2FnZSA9IGV4dGVuZGFibGVNZXNzYWdlQnVpbGRlci5i
dWlsZCgpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlQnVpbGRlci5zZXRFeHRlbnNpb24oCi0gICAg
ICAgIFVuaXR0ZXN0TGl0ZS5vcHRpb25hbEludDMyRXh0ZW5zaW9uTGl0ZSwgMSk7Ci0gICAgYXNz
ZXJ0RmFsc2UoZXh0ZW5kYWJsZU1lc3NhZ2UuaGFzRXh0ZW5zaW9uKAotICAgICAgICBVbml0dGVz
dExpdGUub3B0aW9uYWxJbnQzMkV4dGVuc2lvbkxpdGUpKTsKLSAgICBleHRlbmRhYmxlTWVzc2Fn
ZSA9IGV4dGVuZGFibGVNZXNzYWdlQnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygK
LSAgICAgICAgMSwgKGludCkgZXh0ZW5kYWJsZU1lc3NhZ2VCdWlsZGVyLmdldEV4dGVuc2lvbigK
LSAgICAgICAgICAgIFVuaXR0ZXN0TGl0ZS5vcHRpb25hbEludDMyRXh0ZW5zaW9uTGl0ZSkpOwot
ICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgMSwgKGludCkgZXh0ZW5kYWJsZU1lc3NhZ2UuZ2V0
RXh0ZW5zaW9uKAotICAgICAgICAgICAgVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW50MzJFeHRlbnNp
b25MaXRlKSk7Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2VCdWlsZGVyLnNldEV4dGVuc2lvbigKLSAg
ICAgICAgVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW50MzJFeHRlbnNpb25MaXRlLCAzKTsKLSAgICBh
c3NlcnRFcXVhbHMoCi0gICAgICAgIDMsIChpbnQpIGV4dGVuZGFibGVNZXNzYWdlQnVpbGRlci5n
ZXRFeHRlbnNpb24oCi0gICAgICAgICAgICBVbml0dGVzdExpdGUub3B0aW9uYWxJbnQzMkV4dGVu
c2lvbkxpdGUpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIDEsIChpbnQpIGV4dGVuZGFi
bGVNZXNzYWdlLmdldEV4dGVuc2lvbigKLSAgICAgICAgICAgIFVuaXR0ZXN0TGl0ZS5vcHRpb25h
bEludDMyRXh0ZW5zaW9uTGl0ZSkpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlID0gZXh0ZW5kYWJs
ZU1lc3NhZ2VCdWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAzLCAo
aW50KSBleHRlbmRhYmxlTWVzc2FnZUJ1aWxkZXIuZ2V0RXh0ZW5zaW9uKAotICAgICAgICAgICAg
VW5pdHRlc3RMaXRlLm9wdGlvbmFsSW50MzJFeHRlbnNpb25MaXRlKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKAotICAgICAgICAzLCAoaW50KSBleHRlbmRhYmxlTWVzc2FnZS5nZXRFeHRlbnNpb24oCi0g
ICAgICAgICAgICBVbml0dGVzdExpdGUub3B0aW9uYWxJbnQzMkV4dGVuc2lvbkxpdGUpKTsKLSAg
ICAKLSAgICAvLyBObyBleHRlbnNpb24gcmVnaXN0cnksIHNvIGl0IHNob3VsZCBiZSBpbiB1bmtu
b3duIGZpZWxkcy4KLSAgICBleHRlbmRhYmxlTWVzc2FnZSA9Ci0gICAgICAgIFRlc3RBbGxFeHRl
bnNpb25zTGl0ZS5wYXJzZUZyb20oZXh0ZW5kYWJsZU1lc3NhZ2UudG9CeXRlQXJyYXkoKSk7Ci0g
ICAgYXNzZXJ0RmFsc2UoZXh0ZW5kYWJsZU1lc3NhZ2UuaGFzRXh0ZW5zaW9uKAotICAgICAgICBV
bml0dGVzdExpdGUub3B0aW9uYWxJbnQzMkV4dGVuc2lvbkxpdGUpKTsKLSAgICAKLSAgICBleHRl
bmRhYmxlTWVzc2FnZUJ1aWxkZXIgPSBleHRlbmRhYmxlTWVzc2FnZS50b0J1aWxkZXIoKTsKLSAg
ICBleHRlbmRhYmxlTWVzc2FnZUJ1aWxkZXIubWVyZ2VGcm9tKFRlc3RBbGxFeHRlbnNpb25zTGl0
ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldEV4dGVuc2lvbihVbml0dGVzdExpdGUub3B0aW9u
YWxGaXhlZDMyRXh0ZW5zaW9uTGl0ZSwgMTEpCi0gICAgICAgIC5idWlsZCgpKTsKLSAgICAKLSAg
ICBleHRlbmRhYmxlTWVzc2FnZSA9IGV4dGVuZGFibGVNZXNzYWdlQnVpbGRlci5idWlsZCgpOwot
ICAgIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSByZWdpc3RyeSA9IEV4dGVuc2lvblJlZ2lzdHJ5TGl0
ZS5uZXdJbnN0YW5jZSgpOwotICAgIFVuaXR0ZXN0TGl0ZS5yZWdpc3RlckFsbEV4dGVuc2lvbnMo
cmVnaXN0cnkpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlID0gVGVzdEFsbEV4dGVuc2lvbnNMaXRl
LnBhcnNlRnJvbSgKLSAgICAgICAgZXh0ZW5kYWJsZU1lc3NhZ2UudG9CeXRlQXJyYXkoKSwgcmVn
aXN0cnkpOwotICAgIAotICAgIC8vIFRoZSB1bmtub3duIGZpZWxkIHdhcyBwcmVzZXJ2ZWQuCi0g
ICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAzLCAoaW50KSBleHRlbmRhYmxlTWVzc2FnZS5nZXRF
eHRlbnNpb24oCi0gICAgICAgICAgICBVbml0dGVzdExpdGUub3B0aW9uYWxJbnQzMkV4dGVuc2lv
bkxpdGUpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIDExLCAoaW50KSBleHRlbmRhYmxl
TWVzc2FnZS5nZXRFeHRlbnNpb24oCi0gICAgICAgICAgICBVbml0dGVzdExpdGUub3B0aW9uYWxG
aXhlZDMyRXh0ZW5zaW9uTGl0ZSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFRvU3RyaW5n
RGVmYXVsdEluc3RhbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0VG9TdHJpbmdF
cXVhbHMoIiIsIFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nUHJpbWl0aXZlcygpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIFRlc3RBbGxUeXBlc0xpdGUgcHJvdG8gPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxk
ZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxJbnQzMigxKQotICAgICAgICAuc2V0T3B0aW9uYWxJ
bnQ2NCg5MjIzMzcyMDM2ODU0Nzc1ODA3TCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0
VG9TdHJpbmdFcXVhbHMoIm9wdGlvbmFsX2ludDMyOiAxXG5vcHRpb25hbF9pbnQ2NDogOTIyMzM3
MjAzNjg1NDc3NTgwNyIsIHByb3RvKTsKLQotICAgIHByb3RvID0gVGVzdEFsbFR5cGVzTGl0ZS5u
ZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsQm9vbCh0cnVlKQotICAgICAgICAuc2V0
T3B0aW9uYWxOZXN0ZWRFbnVtKFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkRW51bS5CQVopCi0gICAg
ICAgIC5idWlsZCgpOwotICAgIGFzc2VydFRvU3RyaW5nRXF1YWxzKCJvcHRpb25hbF9ib29sOiB0
cnVlXG5vcHRpb25hbF9uZXN0ZWRfZW51bTogQkFaIiwgcHJvdG8pOwotCi0gICAgcHJvdG8gPSBU
ZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxGbG9hdCgy
LjcyZikKLSAgICAgICAgLnNldE9wdGlvbmFsRG91YmxlKDMuMTQpCi0gICAgICAgIC5idWlsZCgp
OwotICAgIGFzc2VydFRvU3RyaW5nRXF1YWxzKCJvcHRpb25hbF9kb3VibGU6IDMuMTRcbm9wdGlv
bmFsX2Zsb2F0OiAyLjcyIiwgcHJvdG8pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFRvU3Ry
aW5nU3RyaW5nRmllbGRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTGl0
ZSBwcm90byA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRp
b25hbFN0cmluZygiZm9vXCJiYXJcbmJhelxcIikKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNz
ZXJ0VG9TdHJpbmdFcXVhbHMoIm9wdGlvbmFsX3N0cmluZzogXCJmb29cXFwiYmFyXFxuYmF6XFxc
XFwiIiwgcHJvdG8pOwotCi0gICAgcHJvdG8gPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIo
KQotICAgICAgICAuc2V0T3B0aW9uYWxTdHJpbmcoIlx1NjU4NyIpCi0gICAgICAgIC5idWlsZCgp
OwotICAgIGFzc2VydFRvU3RyaW5nRXF1YWxzKCJvcHRpb25hbF9zdHJpbmc6IFwiXFwzNDZcXDIy
NlxcMjA3XCIiLCBwcm90byk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VG9TdHJpbmdOZXN0
ZWRNZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTGl0ZSBwcm90
byA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25hbE5l
c3RlZE1lc3NhZ2UoVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRNZXNzYWdlLmdldERlZmF1bHRJbnN0
YW5jZSgpKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRUb1N0cmluZ0VxdWFscygib3B0
aW9uYWxfbmVzdGVkX21lc3NhZ2Uge1xufSIsIHByb3RvKTsKLQotICAgIHByb3RvID0gVGVzdEFs
bFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsTmVzdGVkTWVzc2Fn
ZSgKLSAgICAgICAgICAgIFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVy
KCkuc2V0QmIoNykpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydFRvU3RyaW5nRXF1YWxz
KCJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSB7XG4gIGJiOiA3XG59IiwgcHJvdG8pOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nUmVwZWF0ZWRGaWVsZHMoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNMaXRlIHByb3RvID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdC
dWlsZGVyKCkKLSAgICAgICAgLmFkZFJlcGVhdGVkSW50MzIoMzIpCi0gICAgICAgIC5hZGRSZXBl
YXRlZEludDMyKDMyKQotICAgICAgICAuYWRkUmVwZWF0ZWRJbnQ2NCg2NCkKLSAgICAgICAgLmJ1
aWxkKCk7Ci0gICAgYXNzZXJ0VG9TdHJpbmdFcXVhbHMoInJlcGVhdGVkX2ludDMyOiAzMlxucmVw
ZWF0ZWRfaW50MzI6IDMyXG5yZXBlYXRlZF9pbnQ2NDogNjQiLCBwcm90byk7Ci0KLSAgICBwcm90
byA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5hZGRSZXBlYXRlZExh
enlNZXNzYWdlKAotICAgICAgICAgICAgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRNZXNzYWdlLm5l
d0J1aWxkZXIoKS5zZXRCYig3KSkKLSAgICAgICAgLmFkZFJlcGVhdGVkTGF6eU1lc3NhZ2UoCi0g
ICAgICAgICAgICBUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNl
dEJiKDgpKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRUb1N0cmluZ0VxdWFscygKLSAg
ICAgICAgInJlcGVhdGVkX2xhenlfbWVzc2FnZSB7XG4gIGJiOiA3XG59XG5yZXBlYXRlZF9sYXp5
X21lc3NhZ2Uge1xuICBiYjogOFxufSIsCi0gICAgICAgIHByb3RvKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RUb1N0cmluZ0ZvcmVpZ25GaWVsZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBUZXN0QWxsVHlwZXNMaXRlIHByb3RvID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkK
LSAgICAgICAgLnNldE9wdGlvbmFsRm9yZWlnbkVudW0oRm9yZWlnbkVudW1MaXRlLkZPUkVJR05f
TElURV9CQVIpCi0gICAgICAgIC5zZXRPcHRpb25hbEZvcmVpZ25NZXNzYWdlKAotICAgICAgICAg
ICAgRm9yZWlnbk1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLnNldEMoMykp
Ci0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydFRvU3RyaW5nRXF1YWxzKAotICAgICAgICAi
b3B0aW9uYWxfZm9yZWlnbl9lbnVtOiBGT1JFSUdOX0xJVEVfQkFSXG5vcHRpb25hbF9mb3JlaWdu
X21lc3NhZ2Uge1xuICBjOiAzXG59IiwKLSAgICAgICAgcHJvdG8pOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgdGVzdFRvU3RyaW5nRXh0ZW5zaW9ucygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRl
c3RBbGxFeHRlbnNpb25zTGl0ZSBtZXNzYWdlID0gVGVzdEFsbEV4dGVuc2lvbnNMaXRlLm5ld0J1
aWxkZXIoKQotICAgICAgICAuc2V0RXh0ZW5zaW9uKFVuaXR0ZXN0TGl0ZS5vcHRpb25hbEludDMy
RXh0ZW5zaW9uTGl0ZSwgMTIzKQotICAgICAgICAuYWRkRXh0ZW5zaW9uKFVuaXR0ZXN0TGl0ZS5y
ZXBlYXRlZFN0cmluZ0V4dGVuc2lvbkxpdGUsICJzcGFtIikKLSAgICAgICAgLmFkZEV4dGVuc2lv
bihVbml0dGVzdExpdGUucmVwZWF0ZWRTdHJpbmdFeHRlbnNpb25MaXRlLCAiZWdncyIpCi0gICAg
ICAgIC5zZXRFeHRlbnNpb24oVW5pdHRlc3RMaXRlLm9wdGlvbmFsTmVzdGVkRW51bUV4dGVuc2lv
bkxpdGUsCi0gICAgICAgICAgICBUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZEVudW0uQkFaKQotICAg
ICAgICAuc2V0RXh0ZW5zaW9uKFVuaXR0ZXN0TGl0ZS5vcHRpb25hbE5lc3RlZE1lc3NhZ2VFeHRl
bnNpb25MaXRlLAotICAgICAgICAgICAgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRNZXNzYWdlLm5l
d0J1aWxkZXIoKS5zZXRCYig3KS5idWlsZCgpKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3Nl
cnRUb1N0cmluZ0VxdWFscygKLSAgICAgICAgIlsxXTogMTIzXG5bMThdIHtcbiAgYmI6IDdcbn1c
blsyMV06IDNcbls0NF06IFwic3BhbVwiXG5bNDRdOiBcImVnZ3NcIiIsCi0gICAgICAgIG1lc3Nh
Z2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nVW5rbm93bkZpZWxkcygpIHRo
cm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZSBtZXNzYWdlV2l0aEV4
dGVuc2lvbnMgPSBUZXN0QWxsRXh0ZW5zaW9uc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5z
ZXRFeHRlbnNpb24oVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW50MzJFeHRlbnNpb25MaXRlLCAxMjMp
Ci0gICAgICAgIC5hZGRFeHRlbnNpb24oVW5pdHRlc3RMaXRlLnJlcGVhdGVkU3RyaW5nRXh0ZW5z
aW9uTGl0ZSwgInNwYW0iKQotICAgICAgICAuYWRkRXh0ZW5zaW9uKFVuaXR0ZXN0TGl0ZS5yZXBl
YXRlZFN0cmluZ0V4dGVuc2lvbkxpdGUsICJlZ2dzIikKLSAgICAgICAgLnNldEV4dGVuc2lvbihV
bml0dGVzdExpdGUub3B0aW9uYWxOZXN0ZWRFbnVtRXh0ZW5zaW9uTGl0ZSwKLSAgICAgICAgICAg
IFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkRW51bS5CQVopCi0gICAgICAgIC5zZXRFeHRlbnNpb24o
VW5pdHRlc3RMaXRlLm9wdGlvbmFsTmVzdGVkTWVzc2FnZUV4dGVuc2lvbkxpdGUsCi0gICAgICAg
ICAgICBUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDcp
LmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgpOwotICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZSBt
ZXNzYWdlV2l0aFVua25vd25GaWVsZHMgPSBUZXN0QWxsRXh0ZW5zaW9uc0xpdGUucGFyc2VGcm9t
KAotICAgICAgICBtZXNzYWdlV2l0aEV4dGVuc2lvbnMudG9CeXRlQXJyYXkoKSk7Ci0gICAgYXNz
ZXJ0VG9TdHJpbmdFcXVhbHMoCi0gICAgICAgICIxOiAxMjNcbjE4OiBcIlxcYlxcYVwiXG4yMTog
M1xuNDQ6IFwic3BhbVwiXG40NDogXCJlZ2dzXCIiLAotICAgICAgICBtZXNzYWdlV2l0aFVua25v
d25GaWVsZHMpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0VG9TdHJpbmdMYXp5TWVzc2Fn
ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc0xpdGUgbWVzc2FnZSA9IFRl
c3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25hbExhenlNZXNz
YWdlKE5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDEpLmJ1aWxkKCkpCi0gICAgICAg
IC5idWlsZCgpOwotICAgIGFzc2VydFRvU3RyaW5nRXF1YWxzKCJvcHRpb25hbF9sYXp5X21lc3Nh
Z2Uge1xuICBiYjogMVxufSIsIG1lc3NhZ2UpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0
VG9TdHJpbmdHcm91cCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc0xpdGUg
bWVzc2FnZSA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRp
b25hbEdyb3VwKE9wdGlvbmFsR3JvdXAubmV3QnVpbGRlcigpLnNldEEoMSkuYnVpbGQoKSkKLSAg
ICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0VG9TdHJpbmdFcXVhbHMoIm9wdGlvbmFsX2dyb3Vw
IHtcbiAgYTogMVxufSIsIG1lc3NhZ2UpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0VG9T
dHJpbmdPbmVvZigpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc0xpdGUgbWVz
c2FnZSA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPbmVvZlN0
cmluZygiaGVsbG8iKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRUb1N0cmluZ0VxdWFs
cygib25lb2Zfc3RyaW5nOiBcImhlbGxvXCIiLCBtZXNzYWdlKTsKLSAgfQotCi0gIC8vIEFzc2Vy
dHMgdGhhdCB0aGUgdG9TdHJpbmcoKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBtYXRj
aGVzIHRoZSBleHBlY3RlZC4gVGhpcyB2ZXJpZmllcwotICAvLyB0aGUgZmlyc3QgbGluZSBzdGFy
dHMgd2l0aCBhIGNvbW1lbnQ7IGJ1dCwgZG9lcyBub3QgZmFjdG9yIGluIHNhaWQgY29tbWVudCBh
cyBwYXJ0IG9mIHRoZQotICAvLyBjb21wYXJpc29uIGFzIGl0IGNvbnRhaW5zIHVuc3RhYmxlIGFk
ZHJlc3Nlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRUb1N0cmluZ0VxdWFscyhTdHJp
bmcgZXhwZWN0ZWQsIE1lc3NhZ2VMaXRlIG1lc3NhZ2UpIHsKLSAgICBTdHJpbmcgdG9TdHJpbmcg
PSBtZXNzYWdlLnRvU3RyaW5nKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCcjJywgdG9TdHJpbmcuY2hh
ckF0KDApKTsKLSAgICBpZiAodG9TdHJpbmcuaW5kZXhPZigiXG4iKSA+PSAwKSB7Ci0gICAgICB0
b1N0cmluZyA9IHRvU3RyaW5nLnN1YnN0cmluZyh0b1N0cmluZy5pbmRleE9mKCJcbiIpICsgMSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRvU3RyaW5nID0gIiI7Ci0gICAgfQotICAgIGFzc2VydEVx
dWFscyhleHBlY3RlZCwgdG9TdHJpbmcpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0UGFy
c2VMYXp5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgQnl0ZVN0cmluZyBiYiA9IFRlc3RBbGxU
eXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25hbExhenlNZXNzYWdlKE5l
c3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0QmIoMTEpCi0gICAgICAg
ICAgICAuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCkudG9CeXRlU3RyaW5nKCk7Ci0gICAgQnl0
ZVN0cmluZyBjYyA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRP
cHRpb25hbExhenlNZXNzYWdlKE5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpCi0gICAgICAgICAg
ICAuc2V0Q2MoMjIpCi0gICAgICAgICAgICAuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCkudG9C
eXRlU3RyaW5nKCk7Ci0gICAgCi0gICAgQnl0ZVN0cmluZyBjb25jYXQgPSBiYi5jb25jYXQoY2Mp
OwotICAgIFRlc3RBbGxUeXBlc0xpdGUgbWVzc2FnZSA9IFRlc3RBbGxUeXBlc0xpdGUucGFyc2VG
cm9tKGNvbmNhdCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMTEsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxM
YXp5TWVzc2FnZSgpLmdldEJiKCkpOwotICAgIGFzc2VydEVxdWFscygyMkwsIG1lc3NhZ2UuZ2V0
T3B0aW9uYWxMYXp5TWVzc2FnZSgpLmdldENjKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0
ZXN0UGFyc2VMYXp5X29uZU9mKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgQnl0ZVN0cmluZyBi
YiA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPbmVvZkxhenlO
ZXN0ZWRNZXNzYWdlKE5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0
QmIoMTEpCi0gICAgICAgICAgICAuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCkudG9CeXRlU3Ry
aW5nKCk7Ci0gICAgQnl0ZVN0cmluZyBjYyA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigp
Ci0gICAgICAgIC5zZXRPbmVvZkxhenlOZXN0ZWRNZXNzYWdlKE5lc3RlZE1lc3NhZ2UubmV3QnVp
bGRlcigpCi0gICAgICAgICAgICAuc2V0Q2MoMjIpCi0gICAgICAgICAgICAuYnVpbGQoKSkKLSAg
ICAgICAgLmJ1aWxkKCkudG9CeXRlU3RyaW5nKCk7Ci0gICAgCi0gICAgQnl0ZVN0cmluZyBjb25j
YXQgPSBiYi5jb25jYXQoY2MpOwotICAgIFRlc3RBbGxUeXBlc0xpdGUgbWVzc2FnZSA9IFRlc3RB
bGxUeXBlc0xpdGUucGFyc2VGcm9tKGNvbmNhdCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMTEsIG1l
c3NhZ2UuZ2V0T25lb2ZMYXp5TmVzdGVkTWVzc2FnZSgpLmdldEJiKCkpOwotICAgIGFzc2VydEVx
dWFscygyMkwsIG1lc3NhZ2UuZ2V0T25lb2ZMYXp5TmVzdGVkTWVzc2FnZSgpLmdldENjKCkpOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1lcmdlRnJvbVN0cmVhbV9yZXBlYXRlZEZpZWxkKCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTGl0ZS5CdWlsZGVyIGJ1aWxkZXIg
PSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuYWRkUmVwZWF0ZWRTdHJp
bmcoImhlbGxvIik7Ci0gICAgYnVpbGRlci5tZXJnZUZyb20oQ29kZWRJbnB1dFN0cmVhbS5uZXdJ
bnN0YW5jZShidWlsZGVyLmJ1aWxkKCkudG9CeXRlQXJyYXkoKSkpOwotCi0gICAgYXNzZXJ0RXF1
YWxzKDIsIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRTdHJpbmdDb3VudCgpKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RNZXJnZUZyb21TdHJlYW1faW52YWxpZEJ5dGVzKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgVGVzdEFsbFR5cGVzTGl0ZS5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXNM
aXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0RGVmYXVsdEJvb2wodHJ1ZSk7Ci0gICAgdHJ5
IHsKLSAgICAgIGJ1aWxkZXIubWVyZ2VGcm9tKENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2Uo
IkludmFsaWQgYnl0ZXMiLmdldEJ5dGVzKEludGVybmFsLlVURl84KSkpOwotICAgICAgZmFpbCgp
OwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBleHBlY3RlZCkg
e30KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE1lcmdlRnJvbV9zYW5pdHkoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNMaXRlIG9uZSA9IFRlc3RVdGlsTGl0ZS5nZXRB
bGxMaXRlU2V0QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gb25lLnRvQnl0
ZUFycmF5KCk7Ci0gICAgVGVzdEFsbFR5cGVzTGl0ZSB0d28gPSBUZXN0QWxsVHlwZXNMaXRlLnBh
cnNlRnJvbShieXRlcyk7Ci0gICAgCi0gICAgb25lID0gb25lLnRvQnVpbGRlcigpLm1lcmdlRnJv
bShvbmUpLmJ1aWxkKCk7Ci0gICAgdHdvID0gdHdvLnRvQnVpbGRlcigpLm1lcmdlRnJvbShieXRl
cykuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMob25lLCB0d28pOwotICAgIGFzc2VydEVxdWFs
cyh0d28sIG9uZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9uZS5oYXNoQ29kZSgpLCB0d28uaGFzaENv
ZGUoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RFcXVhbHNfbm90RXF1YWwoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNMaXRlIG9uZSA9IFRlc3RVdGlsTGl0ZS5n
ZXRBbGxMaXRlU2V0QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gb25lLnRv
Qnl0ZUFycmF5KCk7Ci0gICAgVGVzdEFsbFR5cGVzTGl0ZSB0d28gPSBvbmUudG9CdWlsZGVyKCku
bWVyZ2VGcm9tKG9uZSkubWVyZ2VGcm9tKGJ5dGVzKS5idWlsZCgpOwotICAgIAotICAgIGFzc2Vy
dEZhbHNlKG9uZS5lcXVhbHModHdvKSk7Ci0gICAgYXNzZXJ0RmFsc2UodHdvLmVxdWFscyhvbmUp
KTsKLSAgICAKLSAgICBhc3NlcnRGYWxzZShvbmUuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0
RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdl
dERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmUpKTsKLSAgICAKLSAgICBUZXN0QWxsVHlwZXNM
aXRlIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAg
LnNldERlZmF1bHRCb29sKHRydWUpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNl
KG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgp
KSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2Uo
KS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxU
eXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXREZWZhdWx0Qnl0ZXMoQnl0ZVN0cmlu
Zy5FTVBUWSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQu
ZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3Nl
cnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVG
aWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdC
dWlsZGVyKCkKLSAgICAgICAgLnNldERlZmF1bHRDb3JkKCIiKQotICAgICAgICAuYnVpbGQoKTsK
LSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXRE
ZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0
RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmll
bGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0RGVmYXVs
dENvcmRCeXRlcyhCeXRlU3RyaW5nLkVNUFRZKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3Nl
cnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5z
dGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdElu
c3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBU
ZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0RGVmYXVsdERvdWJsZSgw
KQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMo
VGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNl
KFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0
KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIo
KQotICAgICAgICAuc2V0RGVmYXVsdEZpeGVkMzIoMCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAg
YXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVs
dEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1
bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0
ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldERlZmF1bHRGaXhl
ZDY0KDApCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVx
dWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0
RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmll
bGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVp
bGRlcigpCi0gICAgICAgIC5zZXREZWZhdWx0RmxvYXQoMCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0g
ICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVm
YXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERl
ZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxk
U2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldERlZmF1bHRG
b3JlaWduRW51bShGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUikKLSAgICAgICAgLmJ1
aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xp
dGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNM
aXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAg
IG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNl
dERlZmF1bHRJbXBvcnRFbnVtKEltcG9ydEVudW1MaXRlLklNUE9SVF9MSVRFX0JBUikKLSAgICAg
ICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxU
eXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxs
VHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAg
IAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAg
ICAgLnNldERlZmF1bHRJbnQzMigwKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxz
ZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2Uo
KSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNl
KCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxs
VHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0RGVmYXVsdEludDY0KDApCi0gICAg
ICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxs
VHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFs
bFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAg
ICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAg
ICAgIC5zZXREZWZhdWx0TmVzdGVkRW51bShOZXN0ZWRFbnVtLkJBUikKLSAgICAgICAgLmJ1aWxk
KCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUu
Z2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRl
LmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9u
ZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldERl
ZmF1bHRTZml4ZWQzMigwKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVG
aWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwot
ICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1
YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNM
aXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0RGVmYXVsdFNmaXhlZDY0KDApCi0gICAgICAg
IC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlw
ZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5
cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAK
LSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAg
IC5zZXREZWZhdWx0U2ludDMyKDApCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNl
KG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgp
KSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2Uo
KS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxU
eXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXREZWZhdWx0U2ludDY0KDApCi0gICAg
ICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxs
VHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFs
bFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAg
ICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAg
ICAgIC5zZXREZWZhdWx0U3RyaW5nKCIiKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRG
YWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFu
Y2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0
QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0RGVmYXVsdFN0cmluZ0J5dGVz
KEJ5dGVTdHJpbmcuRU1QVFkpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9u
ZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7
Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5l
cXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBl
c0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXREZWZhdWx0U3RyaW5nUGllY2UoIiIpCi0g
ICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0
QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVz
dEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsK
LSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0g
ICAgICAgIC5zZXREZWZhdWx0U3RyaW5nUGllY2VCeXRlcyhCeXRlU3RyaW5nLkVNUFRZKQotICAg
ICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFs
bFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RB
bGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0g
ICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAg
ICAgICAuc2V0RGVmYXVsdFVpbnQzMigwKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRG
YWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFu
Y2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0
QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0RGVmYXVsdFVpbnQ2NCgwKQot
ICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVz
dEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRl
c3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7
Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQot
ICAgICAgICAuYWRkUmVwZWF0ZWRCb29sKHRydWUpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFz
c2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJ
bnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0
SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9
IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5hZGRSZXBlYXRlZEJ5dGVz
KEJ5dGVTdHJpbmcuRU1QVFkpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9u
ZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7
Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5l
cXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBl
c0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5hZGRSZXBlYXRlZENvcmQoIiIpCi0gICAgICAg
IC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlw
ZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5
cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAK
LSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAg
IC5hZGRSZXBlYXRlZENvcmRCeXRlcyhCeXRlU3RyaW5nLkVNUFRZKQotICAgICAgICAuYnVpbGQo
KTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5n
ZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUu
Z2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25l
RmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuYWRkUmVw
ZWF0ZWREb3VibGUoMCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmll
bGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAg
ICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFs
cyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0
ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFkZFJlcGVhdGVkRml4ZWQzMigwKQotICAgICAgICAu
YnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVz
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBl
c0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0g
ICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAu
YWRkUmVwZWF0ZWRGaXhlZDY0KDApCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNl
KG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgp
KSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2Uo
KS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxU
eXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5hZGRSZXBlYXRlZEZsb2F0KDApCi0gICAg
ICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxs
VHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFs
bFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAg
ICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAg
ICAgIC5hZGRSZXBlYXRlZEZvcmVpZ25FbnVtKEZvcmVpZ25FbnVtTGl0ZS5GT1JFSUdOX0xJVEVf
QkFSKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVh
bHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZh
bHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxk
U2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxk
ZXIoKQotICAgICAgICAuYWRkUmVwZWF0ZWRJbXBvcnRFbnVtKEltcG9ydEVudW1MaXRlLklNUE9S
VF9MSVRFX0JBUikKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRT
ZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBh
c3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhv
bmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5u
ZXdCdWlsZGVyKCkKLSAgICAgICAgLmFkZFJlcGVhdGVkSW50MzIoMCkKLSAgICAgICAgLmJ1aWxk
KCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUu
Z2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRl
LmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9u
ZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFkZFJl
cGVhdGVkSW50NjQoMCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmll
bGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAg
ICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFs
cyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0
ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFkZFJlcGVhdGVkTmVzdGVkRW51bShOZXN0ZWRFbnVt
LkJBUikKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1
YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRG
YWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVs
ZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWls
ZGVyKCkKLSAgICAgICAgLmFkZFJlcGVhdGVkU2ZpeGVkMzIoMCkKLSAgICAgICAgLmJ1aWxkKCk7
Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0
RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdl
dERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZp
ZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFkZFJlcGVh
dGVkU2ZpeGVkNjQoMCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmll
bGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAg
ICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFs
cyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0
ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFkZFJlcGVhdGVkU2ludDMyKDApCi0gICAgICAgIC5i
dWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNM
aXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVz
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAg
ICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5h
ZGRSZXBlYXRlZFNpbnQ2NCgwKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShv
bmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkp
OwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCku
ZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlw
ZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuYWRkUmVwZWF0ZWRTdHJpbmcoIiIpCi0gICAg
ICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxs
VHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFs
bFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAg
ICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAg
ICAgIC5hZGRSZXBlYXRlZFN0cmluZ0J5dGVzKEJ5dGVTdHJpbmcuRU1QVFkpCi0gICAgICAgIC5i
dWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNM
aXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVz
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAg
ICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5h
ZGRSZXBlYXRlZFN0cmluZ1BpZWNlKCIiKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRG
YWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFu
Y2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0
QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuYWRkUmVwZWF0ZWRTdHJpbmdQaWVj
ZUJ5dGVzKEJ5dGVTdHJpbmcuRU1QVFkpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZh
bHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5j
ZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFu
Y2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RB
bGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5hZGRSZXBlYXRlZFVpbnQzMigwKQot
ICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVz
dEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRl
c3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7
Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQot
ICAgICAgICAuYWRkUmVwZWF0ZWRVaW50NjQoMCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNz
ZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdElu
c3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJ
bnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0g
VGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsQm9vbCh0
cnVlKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVh
bHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZh
bHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxk
U2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxk
ZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxCeXRlcyhCeXRlU3RyaW5nLkVNUFRZKQotICAgICAg
ICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5
cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxU
eXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAg
Ci0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAg
ICAuc2V0T3B0aW9uYWxDb3JkKCIiKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxz
ZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2Uo
KSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNl
KCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxs
VHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxDb3JkQnl0ZXMoQnl0
ZVN0cmluZy5FTVBUWSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmll
bGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAg
ICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFs
cyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0
ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsRG91YmxlKDApCi0gICAgICAgIC5i
dWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNM
aXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVz
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAg
ICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5z
ZXRPcHRpb25hbEZpeGVkMzIoMCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uo
b25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkp
KTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgp
LmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5
cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsRml4ZWQ2NCgwKQotICAg
ICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFs
bFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RB
bGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0g
ICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAg
ICAgICAuc2V0T3B0aW9uYWxGbG9hdCgwKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRG
YWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFu
Y2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0
QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxGb3JlaWduRW51
bShGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUikKLSAgICAgICAgLmJ1aWxkKCk7Ci0g
ICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVm
YXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERl
ZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxk
U2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFs
SW1wb3J0RW51bShJbXBvcnRFbnVtTGl0ZS5JTVBPUlRfTElURV9CQVIpCi0gICAgICAgIC5idWls
ZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRl
LmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0
ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBv
bmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRP
cHRpb25hbEludDMyKDApCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZp
ZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0g
ICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVh
bHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xp
dGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25hbEludDY0KDApCi0gICAgICAgIC5i
dWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNM
aXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVz
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAg
ICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5z
ZXRPcHRpb25hbE5lc3RlZEVudW0oTmVzdGVkRW51bS5CQVIpCi0gICAgICAgIC5idWlsZCgpOwot
ICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERl
ZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXRE
ZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVs
ZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25h
bFNmaXhlZDMyKDApCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxk
U2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAg
YXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMo
b25lRmllbGRTZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUu
bmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25hbFNmaXhlZDY0KDApCi0gICAgICAgIC5i
dWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNM
aXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVz
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAg
ICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5z
ZXRPcHRpb25hbFNpbnQzMigwKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShv
bmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkp
OwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCku
ZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlw
ZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxTaW50NjQoMCkKLSAgICAg
ICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxU
eXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxs
VHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAg
IAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAg
ICAgLnNldE9wdGlvbmFsU3RyaW5nKCIiKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRG
YWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFu
Y2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0
QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxTdHJpbmdCeXRl
cyhCeXRlU3RyaW5nLkVNUFRZKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShv
bmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkp
OwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCku
ZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlw
ZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxTdHJpbmdQaWVjZSgiIikK
LSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRl
c3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShU
ZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkp
OwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkK
LSAgICAgICAgLnNldE9wdGlvbmFsU3RyaW5nUGllY2VCeXRlcyhCeXRlU3RyaW5nLkVNUFRZKQot
ICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVz
dEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRl
c3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7
Ci0gICAgCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQot
ICAgICAgICAuc2V0T3B0aW9uYWxVaW50MzIoMCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNz
ZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdElu
c3RhbmNlKCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJ
bnN0YW5jZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0g
VGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsVWludDY0
KDApCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFs
cyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFs
c2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRT
ZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRl
cigpCi0gICAgICAgIC5zZXRPbmVvZkJ5dGVzKEJ5dGVTdHJpbmcuRU1QVFkpCi0gICAgICAgIC5i
dWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNM
aXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVz
TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRTZXQpKTsKLSAgICAKLSAg
ICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5z
ZXRPbmVvZkxhenlOZXN0ZWRNZXNzYWdlKE5lc3RlZE1lc3NhZ2UuZ2V0RGVmYXVsdEluc3RhbmNl
KCkpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFs
cyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgYXNzZXJ0RmFs
c2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmllbGRT
ZXQpKTsKLSAgICAKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRl
cigpCi0gICAgICAgIC5zZXRPbmVvZk5lc3RlZE1lc3NhZ2UoTmVzdGVkTWVzc2FnZS5nZXREZWZh
dWx0SW5zdGFuY2UoKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmll
bGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAg
ICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFs
cyhvbmVGaWVsZFNldCkpOwotICAgIAotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVzTGl0
ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9uZW9mU3RyaW5nKCIiKQotICAgICAgICAuYnVp
bGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0
ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xp
dGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAg
b25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0
T25lb2ZTdHJpbmdCeXRlcyhCeXRlU3RyaW5nLkVNUFRZKQotICAgICAgICAuYnVpbGQoKTsKLSAg
ICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZh
dWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVm
YXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0gICAgCi0gICAgb25lRmllbGRT
ZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T25lb2ZVaW50
MzIoMCkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2Uob25lRmllbGRTZXQuZXF1
YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTsKLSAgICBhc3NlcnRG
YWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpLmVxdWFscyhvbmVGaWVs
ZFNldCkpOwotCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIo
KQotICAgICAgICAuc2V0T3B0aW9uYWxGb3JlaWduTWVzc2FnZShGb3JlaWduTWVzc2FnZUxpdGUu
Z2V0RGVmYXVsdEluc3RhbmNlKCkpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNl
KG9uZUZpZWxkU2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgp
KSk7Ci0gICAgYXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2Uo
KS5lcXVhbHMob25lRmllbGRTZXQpKTsKLQotICAgIG9uZUZpZWxkU2V0ID0gVGVzdEFsbFR5cGVz
TGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsR3JvdXAoT3B0aW9uYWxHcm91
cC5nZXREZWZhdWx0SW5zdGFuY2UoKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFs
c2Uob25lRmllbGRTZXQuZXF1YWxzKFRlc3RBbGxUeXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNl
KCkpKTsKLSAgICBhc3NlcnRGYWxzZShUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5j
ZSgpLmVxdWFscyhvbmVGaWVsZFNldCkpOwotCi0gICAgb25lRmllbGRTZXQgPSBUZXN0QWxsVHlw
ZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxQdWJsaWNJbXBvcnRNZXNz
YWdlKFB1YmxpY0ltcG9ydE1lc3NhZ2VMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKQotICAgICAg
ICAuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVGaWVsZFNldC5lcXVhbHMoVGVzdEFsbFR5
cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKFRlc3RBbGxU
eXBlc0xpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZXF1YWxzKG9uZUZpZWxkU2V0KSk7Ci0KLSAg
ICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5z
ZXRPcHRpb25hbExhenlNZXNzYWdlKE5lc3RlZE1lc3NhZ2UuZ2V0RGVmYXVsdEluc3RhbmNlKCkp
Ci0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxkU2V0LmVxdWFscyhU
ZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAgCi0gICAgYXNzZXJ0
RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMob25lRmll
bGRTZXQpKTsKLSAgICBvbmVGaWVsZFNldCA9IFRlc3RBbGxUeXBlc0xpdGUubmV3QnVpbGRlcigp
Ci0gICAgICAgIC5hZGRSZXBlYXRlZExhenlNZXNzYWdlKE5lc3RlZE1lc3NhZ2UuZ2V0RGVmYXVs
dEluc3RhbmNlKCkpCi0gICAgICAgIC5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG9uZUZpZWxk
U2V0LmVxdWFscyhUZXN0QWxsVHlwZXNMaXRlLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAg
YXNzZXJ0RmFsc2UoVGVzdEFsbFR5cGVzTGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5lcXVhbHMo
b25lRmllbGRTZXQpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFcXVhbHMoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICAvLyBDaGVjayB0aGF0IHR3byBpZGVudGljYWwgb2JqcyBhcmUgZXF1
YWwuCi0gICAgRm9vIGZvbzFhID0gRm9vLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0VmFsdWUo
MSkKLSAgICAgICAgLmFkZEJhcihCYXIubmV3QnVpbGRlcigpLnNldE5hbWUoImZvbzEiKSkKLSAg
ICAgICAgLmJ1aWxkKCk7Ci0gICAgRm9vIGZvbzFiID0gRm9vLm5ld0J1aWxkZXIoKQotICAgICAg
ICAuc2V0VmFsdWUoMSkKLSAgICAgICAgLmFkZEJhcihCYXIubmV3QnVpbGRlcigpLnNldE5hbWUo
ImZvbzEiKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgRm9vIGZvbzIgPSBGb28ubmV3QnVpbGRl
cigpCi0gICAgICAgIC5zZXRWYWx1ZSgxKQotICAgICAgICAuYWRkQmFyKEJhci5uZXdCdWlsZGVy
KCkuc2V0TmFtZSgiZm9vMiIpKQotICAgICAgICAuYnVpbGQoKTsKLQotICAgIC8vIENoZWNrIHRo
YXQgZXF1YWxzIGlzIGRvaW5nIHZhbHVlIHJhdGhlciB0aGFuIG9iamVjdCBlcXVhbGl0eS4KLSAg
ICBhc3NlcnRFcXVhbHMoZm9vMWEsIGZvbzFiKTsKLSAgICBhc3NlcnRFcXVhbHMoZm9vMWEuaGFz
aENvZGUoKSwgZm9vMWIuaGFzaENvZGUoKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGEgZGlmZmVl
bnQgb2JqZWN0IGlzIG5vdCBlcXVhbC4KLSAgICBhc3NlcnRGYWxzZShmb28xYS5lcXVhbHMoZm9v
MikpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0d28gb2JqZWN0cyB3aGljaCBoYXZlIGRpZmZlcmVu
dCB0eXBlcyBidXQgdGhlIHNhbWUgZmllbGQgdmFsdWVzIGFyZSBub3QKLSAgICAvLyBjb25zaWRl
cmVkIHRvIGJlIGVxdWFsLgotICAgIEJhciBiYXIgPSBCYXIubmV3QnVpbGRlcigpLnNldE5hbWUo
ImJhciIpLmJ1aWxkKCk7Ci0gICAgQmFyUHJpbWUgYmFyUHJpbWUgPSBCYXJQcmltZS5uZXdCdWls
ZGVyKCkuc2V0TmFtZSgiYmFyIikuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShiYXIuZXF1YWxz
KGJhclByaW1lKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T25lb2ZFcXVhbHMoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0T25lb2ZFcXVhbHMuQnVpbGRlciBidWlsZGVyID0gVGVz
dE9uZW9mRXF1YWxzLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0T25lb2ZFcXVhbHMgbWVzc2FnZTEg
PSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgLy8gU2V0IG1lc3NhZ2UyJ3MgbmFtZSBmaWVsZCB0byBk
ZWZhdWx0IHZhbHVlLiBUaGUgdHdvIG1lc3NhZ2VzIHNob3VsZCBiZSBkaWZmZXJlbnQgd2hlbiB3
ZQotICAgIC8vIGNoZWNrIHdpdGggdGhlIG9uZW9mIGNhc2UuCi0gICAgYnVpbGRlci5zZXROYW1l
KCIiKTsKLSAgICBUZXN0T25lb2ZFcXVhbHMgbWVzc2FnZTIgPSBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgYXNzZXJ0RmFsc2UobWVzc2FnZTEuZXF1YWxzKG1lc3NhZ2UyKSk7Ci0gIH0KLSAgCi0gIHB1
YmxpYyB2b2lkIHRlc3RFcXVhbHNfc2FuaXR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVz
dEFsbFR5cGVzTGl0ZSBvbmUgPSBUZXN0VXRpbExpdGUuZ2V0QWxsTGl0ZVNldEJ1aWxkZXIoKS5i
dWlsZCgpOwotICAgIFRlc3RBbGxUeXBlc0xpdGUgdHdvID0gVGVzdEFsbFR5cGVzTGl0ZS5wYXJz
ZUZyb20ob25lLnRvQnl0ZUFycmF5KCkpOwotICAgIGFzc2VydEVxdWFscyhvbmUsIHR3byk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG9uZS5oYXNoQ29kZSgpLCB0d28uaGFzaENvZGUoKSk7Ci0gICAgCi0g
ICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBvbmUudG9CdWlsZGVyKCkubWVyZ2VGcm9tKHR3byku
YnVpbGQoKSwKLSAgICAgICAgdHdvLnRvQnVpbGRlcigpLm1lcmdlRnJvbSh0d28udG9CeXRlQXJy
YXkoKSkuYnVpbGQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzQW5kSGFzaENv
ZGVXaXRoVW5rbm93bkZpZWxkcygpIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24gewotICAgIEZvbyBmb29XaXRoT25seVZhbHVlID0gRm9vLm5ld0J1aWxkZXIoKQotICAgICAg
ICAuc2V0VmFsdWUoMSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBGb28gZm9vV2l0aFZhbHVl
QW5kRXh0ZW5zaW9uID0gZm9vV2l0aE9ubHlWYWx1ZS50b0J1aWxkZXIoKQotICAgICAgICAuc2V0
VmFsdWUoMSkKLSAgICAgICAgLnNldEV4dGVuc2lvbihCYXIuZm9vRXh0LCBCYXIubmV3QnVpbGRl
cigpCi0gICAgICAgICAgICAuc2V0TmFtZSgibmFtZSIpCi0gICAgICAgICAgICAuYnVpbGQoKSkK
LSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBGb28gZm9vV2l0aFZhbHVlQW5kVW5rbm93bkZpZWxk
cyA9IEZvby5wYXJzZUZyb20oZm9vV2l0aFZhbHVlQW5kRXh0ZW5zaW9uLnRvQnl0ZUFycmF5KCkp
OwotCi0gICAgYXNzZXJ0RXF1YWxzQW5kSGFzaENvZGVBcmVGYWxzZShmb29XaXRoT25seVZhbHVl
LCBmb29XaXRoVmFsdWVBbmRVbmtub3duRmllbGRzKTsKLSAgICBhc3NlcnRFcXVhbHNBbmRIYXNo
Q29kZUFyZUZhbHNlKGZvb1dpdGhWYWx1ZUFuZEV4dGVuc2lvbiwgZm9vV2l0aFZhbHVlQW5kVW5r
bm93bkZpZWxkcyk7Ci0gIH0KLSAgCi0gIC8vIFRlc3QgdG8gZW5zdXJlIHdlIGF2b2lkIGEgY2xh
c3MgY2FzdCBleGNlcHRpb24gd2l0aCBvbmVvZnMuCi0gIHB1YmxpYyB2b2lkIHRlc3RFcXVhbHNf
b25lT2ZNZXNzYWdlcygpIHsKLSAgICBUZXN0QWxsVHlwZXNMaXRlIG1pbmUgPSBUZXN0QWxsVHlw
ZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T25lb2ZTdHJpbmcoIkhlbGxvIikKLSAg
ICAgICAgLmJ1aWxkKCk7Ci0gICAgCi0gICAgVGVzdEFsbFR5cGVzTGl0ZSBvdGhlciA9IFRlc3RB
bGxUeXBlc0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPbmVvZk5lc3RlZE1lc3NhZ2Uo
TmVzdGVkTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0g
ICAgCi0gICAgYXNzZXJ0RmFsc2UobWluZS5lcXVhbHMob3RoZXIpKTsKLSAgICBhc3NlcnRGYWxz
ZShvdGhlci5lcXVhbHMobWluZSkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFs
c0FuZEhhc2hDb2RlQXJlRmFsc2UoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLSAgICBhc3NlcnRG
YWxzZShvMS5lcXVhbHMobzIpKTsKLSAgICBhc3NlcnRGYWxzZShvMS5oYXNoQ29kZSgpID09IG8y
Lmhhc2hDb2RlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlY3Vyc2l2ZUhhc2hjb2Rl
KCkgewotICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB3ZSBkb24ndCBpbmZpbml0ZSBsb29wLgotICAg
IFRlc3RSZWN1cnNpdmVPbmVvZi5nZXREZWZhdWx0SW5zdGFuY2UoKS5oYXNoQ29kZSgpOwotICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvTGl0ZXJhbEJ5dGVTdHJpbmdUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvTGl0ZXJhbEJ5dGVTdHJpbmdUZXN0LmphdmEKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJlNzc5MmE4ODBkNThmNTJkZDhlOGUyZGY5Yjk3M2NiYzg3MmRj
YzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL0xpdGVyYWxCeXRlU3RyaW5nVGVz
dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQ1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9y
dCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlu
cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0
IGphdmEuaW8uRU9GRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBv
cnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFt
OwotaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0
cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsK
LWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1p
bXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNl
cHRpb247Ci0KLS8qKgotICogVGVzdCB7QGNvZGUgTGl0ZXJhbEJ5dGVTdHJpbmd9IGJ5IHNldHRp
bmcgdXAgYSByZWZlcmVuY2Ugc3RyaW5nIGluIHtAbGluayAjc2V0VXAoKX0uCi0gKiBUaGlzIGNs
YXNzIGlzIGRlc2lnbmVkIHRvIGJlIGV4dGVuZGVkIGZvciB0ZXN0aW5nIGV4dGVuc2lvbnMgb2Yg
e0Bjb2RlIExpdGVyYWxCeXRlU3RyaW5nfQotICogc3VjaCBhcyB7QGNvZGUgQm91bmRlZEJ5dGVT
dHJpbmd9LCBzZWUge0BsaW5rIEJvdW5kZWRCeXRlU3RyaW5nVGVzdH0uCi0gKgotICogQGF1dGhv
ciBjYXJsYW50b25AZ29vZ2xlLmNvbSAoQ2FybCBIYXZlcmwpCi0gKi8KLXB1YmxpYyBjbGFzcyBM
aXRlcmFsQnl0ZVN0cmluZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gIHByb3RlY3RlZCBzdGF0
aWMgZmluYWwgU3RyaW5nIFVURl84ID0gIlVURi04IjsKLQotICBwcm90ZWN0ZWQgU3RyaW5nIGNs
YXNzVW5kZXJUZXN0OwotICBwcm90ZWN0ZWQgYnl0ZVtdIHJlZmVyZW5jZUJ5dGVzOwotICBwcm90
ZWN0ZWQgQnl0ZVN0cmluZyBzdHJpbmdVbmRlclRlc3Q7Ci0gIHByb3RlY3RlZCBpbnQgZXhwZWN0
ZWRIYXNoQ29kZTsKLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBjbGFzc1VuZGVyVGVzdCA9ICJMaXRlcmFsQnl0ZVN0cmluZyI7
Ci0gICAgcmVmZXJlbmNlQnl0ZXMgPSBCeXRlU3RyaW5nVGVzdC5nZXRUZXN0Qnl0ZXMoMTIzNCwg
MTEzMzc3NjZMKTsKLSAgICBzdHJpbmdVbmRlclRlc3QgPSBCeXRlU3RyaW5nLmNvcHlGcm9tKHJl
ZmVyZW5jZUJ5dGVzKTsKLSAgICBleHBlY3RlZEhhc2hDb2RlID0gMzMxMTYxODUyOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdEV4cGVjdGVkVHlwZSgpIHsKLSAgICBTdHJpbmcgYWN0dWFsQ2xh
c3NOYW1lID0gZ2V0QWN0dWFsQ2xhc3NOYW1lKHN0cmluZ1VuZGVyVGVzdCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIiBzaG91bGQgbWF0Y2ggdHlwZSBleGFjdGx5IiwgY2xh
c3NVbmRlclRlc3QsIGFjdHVhbENsYXNzTmFtZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5n
IGdldEFjdHVhbENsYXNzTmFtZShPYmplY3Qgb2JqZWN0KSB7Ci0gICAgcmV0dXJuIG9iamVjdC5n
ZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RCeXRl
QXQoKSB7Ci0gICAgYm9vbGVhbiBzdGlsbEVxdWFsID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0g
MDsgc3RpbGxFcXVhbCAmJiBpIDwgcmVmZXJlbmNlQnl0ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
IHN0aWxsRXF1YWwgPSAocmVmZXJlbmNlQnl0ZXNbaV0gPT0gc3RyaW5nVW5kZXJUZXN0LmJ5dGVB
dChpKSk7Ci0gICAgfQotICAgIGFzc2VydFRydWUoY2xhc3NVbmRlclRlc3QgKyAiIG11c3QgY2Fw
dHVyZSB0aGUgcmlnaHQgYnl0ZXMiLCBzdGlsbEVxdWFsKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3RCeXRlSXRlcmF0b3IoKSB7Ci0gICAgYm9vbGVhbiBzdGlsbEVxdWFsID0gdHJ1ZTsKLSAg
ICBCeXRlU3RyaW5nLkJ5dGVJdGVyYXRvciBpdGVyID0gc3RyaW5nVW5kZXJUZXN0Lml0ZXJhdG9y
KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IHN0aWxsRXF1YWwgJiYgaSA8IHJlZmVyZW5jZUJ5dGVz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICBzdGlsbEVxdWFsID0gKGl0ZXIuaGFzTmV4dCgpICYmIHJl
ZmVyZW5jZUJ5dGVzW2ldID09IGl0ZXIubmV4dEJ5dGUoKSk7Ci0gICAgfQotICAgIGFzc2VydFRy
dWUoY2xhc3NVbmRlclRlc3QgKyAiIG11c3QgY2FwdHVyZSB0aGUgcmlnaHQgYnl0ZXMiLCBzdGls
bEVxdWFsKTsKLSAgICBhc3NlcnRGYWxzZShjbGFzc1VuZGVyVGVzdCArICIgbXVzdCBoYXZlIGV4
aGF1c3RlZCB0aGUgaXRlcnRvciIsIGl0ZXIuaGFzTmV4dCgpKTsKLQotICAgIHRyeSB7Ci0gICAg
ICBpdGVyLm5leHRCeXRlKCk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhj
ZXB0aW9uLiIpOwotICAgIH0gY2F0Y2ggKE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gZSkgewotICAg
ICAgLy8gVGhpcyBpcyBzdWNjZXNzCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEJ5
dGVJdGVyYWJsZSgpIHsKLSAgICBib29sZWFuIHN0aWxsRXF1YWwgPSB0cnVlOwotICAgIGludCBq
ID0gMDsKLSAgICBmb3IgKGJ5dGUgcXVhbnR1bSA6IHN0cmluZ1VuZGVyVGVzdCkgewotICAgICAg
c3RpbGxFcXVhbCA9IChyZWZlcmVuY2VCeXRlc1tqXSA9PSBxdWFudHVtKTsKLSAgICAgICsrajsK
LSAgICB9Ci0gICAgYXNzZXJ0VHJ1ZShjbGFzc1VuZGVyVGVzdCArICIgbXVzdCBjYXB0dXJlIHRo
ZSByaWdodCBieXRlcyBhcyBCeXRlcyIsIHN0aWxsRXF1YWwpOwotICAgIGFzc2VydEVxdWFscyhj
bGFzc1VuZGVyVGVzdCArICIgaXRlcmFibGUgY2hhcmFjdGVyIGNvdW50IiwgcmVmZXJlbmNlQnl0
ZXMubGVuZ3RoLCBqKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTaXplKCkgewotICAgIGFz
c2VydEVxdWFscyhjbGFzc1VuZGVyVGVzdCArICIgbXVzdCBoYXZlIHRoZSBleHBlY3RlZCBzaXpl
IiwgcmVmZXJlbmNlQnl0ZXMubGVuZ3RoLAotICAgICAgICBzdHJpbmdVbmRlclRlc3Quc2l6ZSgp
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRUcmVlRGVwdGgoKSB7Ci0gICAgYXNzZXJ0
RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIiBtdXN0IGhhdmUgZGVwdGggMCIsIDAsIHN0cmluZ1Vu
ZGVyVGVzdC5nZXRUcmVlRGVwdGgoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SXNCYWxh
bmNlZCgpIHsKLSAgICBhc3NlcnRUcnVlKGNsYXNzVW5kZXJUZXN0ICsgIiBpcyB0ZWNobmljYWxs
eSBiYWxhbmNlZCIsIHN0cmluZ1VuZGVyVGVzdC5pc0JhbGFuY2VkKCkpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdENvcHlUb19CeXRlQXJyYXlPZmZzZXRMZW5ndGgoKSB7Ci0gICAgaW50IGRl
c3RpbmF0aW9uT2Zmc2V0ID0gNTA7Ci0gICAgaW50IGxlbmd0aCA9IDEwMDsKLSAgICBieXRlW10g
ZGVzdGluYXRpb24gPSBuZXcgYnl0ZVtkZXN0aW5hdGlvbk9mZnNldCArIGxlbmd0aF07Ci0gICAg
aW50IHNvdXJjZU9mZnNldCA9IDIxMzsKLSAgICBzdHJpbmdVbmRlclRlc3QuY29weVRvKGRlc3Rp
bmF0aW9uLCBzb3VyY2VPZmZzZXQsIGRlc3RpbmF0aW9uT2Zmc2V0LCBsZW5ndGgpOwotICAgIGJv
b2xlYW4gc3RpbGxFcXVhbCA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IHN0aWxsRXF1YWwg
JiYgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICBzdGlsbEVxdWFsID0gcmVmZXJlbmNlQnl0ZXNb
aSArIHNvdXJjZU9mZnNldF0gPT0gZGVzdGluYXRpb25baSArIGRlc3RpbmF0aW9uT2Zmc2V0XTsK
LSAgICB9Ci0gICAgYXNzZXJ0VHJ1ZShjbGFzc1VuZGVyVGVzdCArICIuY29weVRvKDQgYXJnKSBt
dXN0IGdpdmUgdGhlIGV4cGVjdGVkIGJ5dGVzIiwgc3RpbGxFcXVhbCk7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCB0ZXN0Q29weVRvX0J5dGVBcnJheU9mZnNldExlbmd0aEVycm9ycygpIHsKLSAgICBp
bnQgZGVzdGluYXRpb25PZmZzZXQgPSA1MDsKLSAgICBpbnQgbGVuZ3RoID0gMTAwOwotICAgIGJ5
dGVbXSBkZXN0aW5hdGlvbiA9IG5ldyBieXRlW2Rlc3RpbmF0aW9uT2Zmc2V0ICsgbGVuZ3RoXTsK
LQotICAgIHRyeSB7Ci0gICAgICAvLyBDb3B5IG9uZSB0b28gbWFueSBieXRlcwotICAgICAgc3Ry
aW5nVW5kZXJUZXN0LmNvcHlUbyhkZXN0aW5hdGlvbiwgc3RyaW5nVW5kZXJUZXN0LnNpemUoKSAr
IDEgLSBsZW5ndGgsCi0gICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQsIGxlbmd0aCk7Ci0gICAg
ICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uIHdoZW4gY29weWluZyB0b28g
bWFueSBieXRlcyBvZiBhICIKLSAgICAgICAgICArIGNsYXNzVW5kZXJUZXN0KTsKLSAgICB9IGNh
dGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAvLyBUaGlz
IGlzIHN1Y2Nlc3MKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgLy8gQ29weSB3aXRoIGlsbGVn
YWwgbmVnYXRpdmUgc291cmNlT2Zmc2V0Ci0gICAgICBzdHJpbmdVbmRlclRlc3QuY29weVRvKGRl
c3RpbmF0aW9uLCAtMSwgZGVzdGluYXRpb25PZmZzZXQsIGxlbmd0aCk7Ci0gICAgICBmYWlsKCJT
aG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uIHdoZW4gZ2l2ZW4gYSBuZWdhdGl2ZSBzb3Vy
Y2VPZmZzZXQgaW4gIgotICAgICAgICAgICsgY2xhc3NVbmRlclRlc3QpOwotICAgIH0gY2F0Y2gg
KEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZXhwZWN0ZWQpIHsKLSAgICAgIC8vIFRoaXMgaXMg
c3VjY2VzcwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICAvLyBDb3B5IHdpdGggaWxsZWdhbCBu
ZWdhdGl2ZSBkZXN0aW5hdGlvbk9mZnNldAotICAgICAgc3RyaW5nVW5kZXJUZXN0LmNvcHlUbyhk
ZXN0aW5hdGlvbiwgMCwgLTEsIGxlbmd0aCk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJv
d24gYW4gZXhjZXB0aW9uIHdoZW4gZ2l2ZW4gYSBuZWdhdGl2ZSBkZXN0aW5hdGlvbk9mZnNldCBp
biAiCi0gICAgICAgICAgKyBjbGFzc1VuZGVyVGVzdCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRP
ZkJvdW5kc0V4Y2VwdGlvbiBleHBlY3RlZCkgewotICAgICAgLy8gVGhpcyBpcyBzdWNjZXNzCi0g
ICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIC8vIENvcHkgd2l0aCBpbGxlZ2FsIG5lZ2F0aXZlIHNp
emUKLSAgICAgIHN0cmluZ1VuZGVyVGVzdC5jb3B5VG8oZGVzdGluYXRpb24sIDAsIDAsIC0xKTsK
LSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24gd2hlbiBnaXZlbiBh
IG5lZ2F0aXZlIHNpemUgaW4gIgotICAgICAgICAgICsgY2xhc3NVbmRlclRlc3QpOwotICAgIH0g
Y2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZXhwZWN0ZWQpIHsKLSAgICAgIC8vIFRo
aXMgaXMgc3VjY2VzcwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICAvLyBDb3B5IHdpdGggaWxs
ZWdhbCB0b28tbGFyZ2Ugc291cmNlT2Zmc2V0Ci0gICAgICBzdHJpbmdVbmRlclRlc3QuY29weVRv
KGRlc3RpbmF0aW9uLCAyICogc3RyaW5nVW5kZXJUZXN0LnNpemUoKSwgMCwgbGVuZ3RoKTsKLSAg
ICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24gd2hlbiB0aGUgZGVzdGlu
YXRpb25PZmZzZXQgaXMgdG9vIGxhcmdlIGluICIKLSAgICAgICAgICArIGNsYXNzVW5kZXJUZXN0
KTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0g
ICAgICAvLyBUaGlzIGlzIHN1Y2Nlc3MKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgLy8gQ29w
eSB3aXRoIGlsbGVnYWwgdG9vLWxhcmdlIGRlc3RpbmF0aW9uT2Zmc2V0Ci0gICAgICBzdHJpbmdV
bmRlclRlc3QuY29weVRvKGRlc3RpbmF0aW9uLCAwLCAyICogZGVzdGluYXRpb24ubGVuZ3RoLCBs
ZW5ndGgpOwotICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiB3aGVu
IHRoZSBkZXN0aW5hdGlvbk9mZnNldCBpcyB0b28gbGFyZ2UgaW4gIgotICAgICAgICAgICsgY2xh
c3NVbmRlclRlc3QpOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZXhw
ZWN0ZWQpIHsKLSAgICAgIC8vIFRoaXMgaXMgc3VjY2VzcwotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RDb3B5VG9fQnl0ZUJ1ZmZlcigpIHsKLSAgICBCeXRlQnVmZmVyIG15QnVmZmVy
ID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZShyZWZlcmVuY2VCeXRlcy5sZW5ndGgpOwotICAgIHN0cmlu
Z1VuZGVyVGVzdC5jb3B5VG8obXlCdWZmZXIpOwotICAgIGFzc2VydFRydWUoY2xhc3NVbmRlclRl
c3QgKyAiLmNvcHlUbyhCeXRlQnVmZmVyKSBtdXN0IGdpdmUgYmFjayB0aGUgc2FtZSBieXRlcyIs
Ci0gICAgICAgIEFycmF5cy5lcXVhbHMocmVmZXJlbmNlQnl0ZXMsIG15QnVmZmVyLmFycmF5KCkp
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNYXJrU3VwcG9ydGVkKCkgewotICAgIElucHV0
U3RyZWFtIHN0cmVhbSA9IHN0cmluZ1VuZGVyVGVzdC5uZXdJbnB1dCgpOwotICAgIGFzc2VydFRy
dWUoY2xhc3NVbmRlclRlc3QgKyAiLm5ld0lucHV0KCkgbXVzdCBzdXBwb3J0IG1hcmtpbmciLCBz
dHJlYW0ubWFya1N1cHBvcnRlZCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNYXJrQW5k
UmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGludCBmcmFjdGlvbiA9IHN0cmluZ1Vu
ZGVyVGVzdC5zaXplKCkgLyAzOwotCi0gICAgSW5wdXRTdHJlYW0gc3RyZWFtID0gc3RyaW5nVW5k
ZXJUZXN0Lm5ld0lucHV0KCk7Ci0gICAgc3RyZWFtLm1hcmsoc3RyaW5nVW5kZXJUZXN0LnNpemUo
KSk7IC8vIEZpcnN0LCBtYXJrKCkgdGhlIGVuZC4KLQotICAgIHNraXBGdWxseShzdHJlYW0sIGZy
YWN0aW9uKTsgLy8gU2tpcCBhIGxhcmdlIGZyYWN0aW9uLCBidXQgbm90IGFsbC4KLSAgICBpbnQg
YXZhaWxhYmxlID0gc3RyZWFtLmF2YWlsYWJsZSgpOwotICAgIGFzc2VydFRydWUoCi0gICAgICAg
IGNsYXNzVW5kZXJUZXN0ICsgIjogYWZ0ZXIgc2tpcHBpbmcgdG8gdGhlICdtaWRkbGUnLCBoYWxm
IHRoZSBieXRlcyBhcmUgYXZhaWxhYmxlIiwKLSAgICAgICAgKHN0cmluZ1VuZGVyVGVzdC5zaXpl
KCkgLSBmcmFjdGlvbikgPT0gYXZhaWxhYmxlKTsKLSAgICBzdHJlYW0ucmVzZXQoKTsKLQotICAg
IHNraXBGdWxseShzdHJlYW0sIHN0cmluZ1VuZGVyVGVzdC5zaXplKCkpOyAvLyBTa2lwIHRvIHRo
ZSBlbmQuCi0gICAgYXZhaWxhYmxlID0gc3RyZWFtLmF2YWlsYWJsZSgpOwotICAgIGFzc2VydFRy
dWUoCi0gICAgICAgIGNsYXNzVW5kZXJUZXN0ICsgIjogYWZ0ZXIgc2tpcHBpbmcgdG8gdGhlIGVu
ZCwgbm8gbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIiwKLSAgICAgICAgMCA9PSBhdmFpbGFibGUp
OwotICB9Ci0KLSAgLyoqCi0gICAqIERpc2NhcmRzIHtAY29kZSBufSBieXRlcyBvZiBkYXRhIGZy
b20gdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBtZXRob2QKLSAgICogd2lsbCBibG9jayB1bnRpbCB0
aGUgZnVsbCBhbW91bnQgaGFzIGJlZW4gc2tpcHBlZC4gRG9lcyBub3QgY2xvc2UgdGhlCi0gICAq
IHN0cmVhbS4KLSAgICogPHA+Q29waWVkIGZyb20gY29tLmdvb2dsZS5jb21tb24uaW8uQnl0ZVN0
cmVhbXMgdG8gYXZvaWQgYWRkaW5nIGRlcGVuZGVuY3kuCi0gICAqCi0gICAqIEBwYXJhbSBpbiB0
aGUgaW5wdXQgc3RyZWFtIHRvIHJlYWQgZnJvbQotICAgKiBAcGFyYW0gbiB0aGUgbnVtYmVyIG9m
IGJ5dGVzIHRvIHNraXAKLSAgICogQHRocm93cyBFT0ZFeGNlcHRpb24gaWYgdGhpcyBzdHJlYW0g
cmVhY2hlcyB0aGUgZW5kIGJlZm9yZSBza2lwcGluZyBhbGwKLSAgICogICAgIHRoZSBieXRlcwot
ICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFuIEkvTyBlcnJvciBvY2N1cnMsIG9yIHRoZSBz
dHJlYW0gZG9lcyBub3QKLSAgICogICAgIHN1cHBvcnQgc2tpcHBpbmcKLSAgICovCi0gIHN0YXRp
YyB2b2lkIHNraXBGdWxseShJbnB1dFN0cmVhbSBpbiwgbG9uZyBuKSB0aHJvd3MgSU9FeGNlcHRp
b24gewotICAgIGxvbmcgdG9Ta2lwID0gbjsKLSAgICB3aGlsZSAobiA+IDApIHsKLSAgICAgIGxv
bmcgYW10ID0gaW4uc2tpcChuKTsKLSAgICAgIGlmIChhbXQgPT0gMCkgewotICAgICAgICAvLyBG
b3JjZSBhIGJsb2NraW5nIHJlYWQgdG8gYXZvaWQgaW5maW5pdGUgbG9vcAotICAgICAgICBpZiAo
aW4ucmVhZCgpID09IC0xKSB7Ci0gICAgICAgICAgbG9uZyBza2lwcGVkID0gdG9Ta2lwIC0gbjsK
LSAgICAgICAgICB0aHJvdyBuZXcgRU9GRXhjZXB0aW9uKCJyZWFjaGVkIGVuZCBvZiBzdHJlYW0g
YWZ0ZXIgc2tpcHBpbmcgIgotICAgICAgICAgICAgICArIHNraXBwZWQgKyAiIGJ5dGVzOyAiICsg
dG9Ta2lwICsgIiBieXRlcyBleHBlY3RlZCIpOwotICAgICAgICB9Ci0gICAgICAgIG4tLTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG4gLT0gYW10OwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RBc1JlYWRPbmx5Qnl0ZUJ1ZmZlcigpIHsKLSAgICBCeXRlQnVmZmVy
IGJ5dGVCdWZmZXIgPSBzdHJpbmdVbmRlclRlc3QuYXNSZWFkT25seUJ5dGVCdWZmZXIoKTsKLSAg
ICBieXRlW10gcm91bmRUcmlwQnl0ZXMgPSBuZXcgYnl0ZVtyZWZlcmVuY2VCeXRlcy5sZW5ndGhd
OwotICAgIGFzc2VydFRydWUoYnl0ZUJ1ZmZlci5yZW1haW5pbmcoKSA9PSByZWZlcmVuY2VCeXRl
cy5sZW5ndGgpOwotICAgIGFzc2VydFRydWUoYnl0ZUJ1ZmZlci5pc1JlYWRPbmx5KCkpOwotICAg
IGJ5dGVCdWZmZXIuZ2V0KHJvdW5kVHJpcEJ5dGVzKTsKLSAgICBhc3NlcnRUcnVlKGNsYXNzVW5k
ZXJUZXN0ICsgIi5hc1JlYWRPbmx5Qnl0ZUJ1ZmZlcigpIG11c3QgZ2l2ZSBiYWNrIHRoZSBzYW1l
IGJ5dGVzIiwKLSAgICAgICAgQXJyYXlzLmVxdWFscyhyZWZlcmVuY2VCeXRlcywgcm91bmRUcmlw
Qnl0ZXMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RBc1JlYWRPbmx5Qnl0ZUJ1ZmZlckxp
c3QoKSB7Ci0gICAgTGlzdDxCeXRlQnVmZmVyPiBieXRlQnVmZmVycyA9IHN0cmluZ1VuZGVyVGVz
dC5hc1JlYWRPbmx5Qnl0ZUJ1ZmZlckxpc3QoKTsKLSAgICBpbnQgYnl0ZXNTZWVuID0gMDsKLSAg
ICBieXRlW10gcm91bmRUcmlwQnl0ZXMgPSBuZXcgYnl0ZVtyZWZlcmVuY2VCeXRlcy5sZW5ndGhd
OwotICAgIGZvciAoQnl0ZUJ1ZmZlciBieXRlQnVmZmVyIDogYnl0ZUJ1ZmZlcnMpIHsKLSAgICAg
IGludCB0aGlzTGVuZ3RoID0gYnl0ZUJ1ZmZlci5yZW1haW5pbmcoKTsKLSAgICAgIGFzc2VydFRy
dWUoYnl0ZUJ1ZmZlci5pc1JlYWRPbmx5KCkpOwotICAgICAgYXNzZXJ0VHJ1ZShieXRlc1NlZW4g
KyB0aGlzTGVuZ3RoIDw9IHJlZmVyZW5jZUJ5dGVzLmxlbmd0aCk7Ci0gICAgICBieXRlQnVmZmVy
LmdldChyb3VuZFRyaXBCeXRlcywgYnl0ZXNTZWVuLCB0aGlzTGVuZ3RoKTsKLSAgICAgIGJ5dGVz
U2VlbiArPSB0aGlzTGVuZ3RoOwotICAgIH0KLSAgICBhc3NlcnRUcnVlKGJ5dGVzU2VlbiA9PSBy
ZWZlcmVuY2VCeXRlcy5sZW5ndGgpOwotICAgIGFzc2VydFRydWUoY2xhc3NVbmRlclRlc3QgKyAi
LmFzUmVhZE9ubHlCeXRlQnVmZmVyVGVzdCgpIG11c3QgZ2l2ZSBiYWNrIHRoZSBzYW1lIGJ5dGVz
IiwKLSAgICAgICAgQXJyYXlzLmVxdWFscyhyZWZlcmVuY2VCeXRlcywgcm91bmRUcmlwQnl0ZXMp
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RUb0J5dGVBcnJheSgpIHsKLSAgICBieXRlW10g
cm91bmRUcmlwQnl0ZXMgPSBzdHJpbmdVbmRlclRlc3QudG9CeXRlQXJyYXkoKTsKLSAgICBhc3Nl
cnRUcnVlKGNsYXNzVW5kZXJUZXN0ICsgIi50b0J5dGVBcnJheSgpIG11c3QgZ2l2ZSBiYWNrIHRo
ZSBzYW1lIGJ5dGVzIiwKLSAgICAgICAgQXJyYXlzLmVxdWFscyhyZWZlcmVuY2VCeXRlcywgcm91
bmRUcmlwQnl0ZXMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RXcml0ZVRvKCkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYm9zID0gbmV3IEJ5dGVB
cnJheU91dHB1dFN0cmVhbSgpOwotICAgIHN0cmluZ1VuZGVyVGVzdC53cml0ZVRvKGJvcyk7Ci0g
ICAgYnl0ZVtdIHJvdW5kVHJpcEJ5dGVzID0gYm9zLnRvQnl0ZUFycmF5KCk7Ci0gICAgYXNzZXJ0
VHJ1ZShjbGFzc1VuZGVyVGVzdCArICIud3JpdGVUbygpIG11c3QgZ2l2ZSBiYWNrIHRoZSBzYW1l
IGJ5dGVzIiwKLSAgICAgICAgQXJyYXlzLmVxdWFscyhyZWZlcmVuY2VCeXRlcywgcm91bmRUcmlw
Qnl0ZXMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RXcml0ZVRvU2hvdWxkTm90RXhwb3Nl
SW50ZXJuYWxCdWZmZXJUb091dHB1dFN0cmVhbSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAg
T3V0cHV0U3RyZWFtIG9zID0gbmV3IE91dHB1dFN0cmVhbSgpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgd3JpdGUoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHsKLSAg
ICAgICAgQXJyYXlzLmZpbGwoYiwgb2ZmLCBvZmYgKyBsZW4sIChieXRlKSAwKTsKLSAgICAgIH0K
LQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCB3cml0ZShpbnQgYikgewotICAg
ICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICAgIH0K
LSAgICB9OwotCi0gICAgc3RyaW5nVW5kZXJUZXN0LndyaXRlVG8ob3MpOwotICAgIGFzc2VydFRy
dWUoY2xhc3NVbmRlclRlc3QgKyAiLndyaXRlVG8oKSBtdXN0IG5vdCBncmFudCBhY2Nlc3MgdG8g
dW5kZXJseWluZyBhcnJheSIsCi0gICAgICAgIEFycmF5cy5lcXVhbHMocmVmZXJlbmNlQnl0ZXMs
IHN0cmluZ1VuZGVyVGVzdC50b0J5dGVBcnJheSgpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0V3JpdGVUb0ludGVybmFsU2hvdWxkRXhwb3NlSW50ZXJuYWxCdWZmZXJUb091dHB1dFN0cmVh
bSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgT3V0cHV0U3RyZWFtIG9zID0gbmV3IE91dHB1
dFN0cmVhbSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgd3JpdGUoYnl0
ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHsKLSAgICAgICAgQXJyYXlzLmZpbGwoYiwgb2ZmLCBv
ZmYgKyBsZW4sIChieXRlKSAwKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCB3cml0ZShpbnQgYikgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRP
cGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgc3RyaW5nVW5kZXJU
ZXN0LndyaXRlVG9JbnRlcm5hbChvcywgMCwgc3RyaW5nVW5kZXJUZXN0LnNpemUoKSk7Ci0gICAg
Ynl0ZVtdIGFsbFplcm9zID0gbmV3IGJ5dGVbc3RyaW5nVW5kZXJUZXN0LnNpemUoKV07Ci0gICAg
YXNzZXJ0VHJ1ZShjbGFzc1VuZGVyVGVzdCArICIud3JpdGVUb0ludGVybmFsKCkgbXVzdCBncmFu
dCBhY2Nlc3MgdG8gdW5kZXJseWluZyBhcnJheSIsCi0gICAgICAgIEFycmF5cy5lcXVhbHMoYWxs
WmVyb3MsIHN0cmluZ1VuZGVyVGVzdC50b0J5dGVBcnJheSgpKSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0V3JpdGVUb1Nob3VsZEV4cG9zZUludGVybmFsQnVmZmVyVG9CeXRlT3V0cHV0KCkg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBCeXRlT3V0cHV0IG91dCA9IG5ldyBCeXRlT3V0cHV0
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCB3cml0ZShieXRlIHZhbHVl
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVy
YXRpb25FeGNlcHRpb24oKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCB3cml0ZShieXRlW10gdmFsdWUsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4
Y2VwdGlvbigpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHdyaXRlTGF6eShieXRlW10gdmFsdWUsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBJ
T0V4Y2VwdGlvbiB7Ci0gICAgICAgIEFycmF5cy5maWxsKHZhbHVlLCBvZmZzZXQsIG9mZnNldCAr
IGxlbmd0aCwgKGJ5dGUpIDApOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyB2b2lkIHdyaXRlKEJ5dGVCdWZmZXIgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0g
ICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgICAg
fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHdyaXRlTGF6eShCeXRlQnVm
ZmVyIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBw
b3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgc3RyaW5n
VW5kZXJUZXN0LndyaXRlVG8ob3V0KTsKLSAgICBieXRlW10gYWxsWmVyb3MgPSBuZXcgYnl0ZVtz
dHJpbmdVbmRlclRlc3Quc2l6ZSgpXTsKLSAgICBhc3NlcnRUcnVlKGNsYXNzVW5kZXJUZXN0ICsg
Ii53cml0ZVRvSW50ZXJuYWwoKSBtdXN0IGdyYW50IGFjY2VzcyB0byB1bmRlcmx5aW5nIGFycmF5
IiwKLSAgICAgICAgQXJyYXlzLmVxdWFscyhhbGxaZXJvcywgc3RyaW5nVW5kZXJUZXN0LnRvQnl0
ZUFycmF5KCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROZXdPdXRwdXQoKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3MgPSBuZXcgQnl0ZUFy
cmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgQnl0ZVN0cmluZy5PdXRwdXQgb3V0cHV0ID0gQnl0ZVN0
cmluZy5uZXdPdXRwdXQoKTsKLSAgICBzdHJpbmdVbmRlclRlc3Qud3JpdGVUbyhvdXRwdXQpOwot
ICAgIGFzc2VydEVxdWFscygiT3V0cHV0IFNpemUgcmV0dXJucyBjb3JyZWN0IHJlc3VsdCIsCi0g
ICAgICAgIG91dHB1dC5zaXplKCksIHN0cmluZ1VuZGVyVGVzdC5zaXplKCkpOwotICAgIG91dHB1
dC53cml0ZVRvKGJvcyk7Ci0gICAgYXNzZXJ0VHJ1ZSgiT3V0cHV0LndyaXRlVG8oKSBtdXN0IGdp
dmUgYmFjayB0aGUgc2FtZSBieXRlcyIsCi0gICAgICAgIEFycmF5cy5lcXVhbHMocmVmZXJlbmNl
Qnl0ZXMsIGJvcy50b0J5dGVBcnJheSgpKSk7Ci0KLSAgICAvLyB3cml0ZSB0aGUgb3V0cHV0IHN0
cmVhbSB0byBpdHNlbGYhIFRoaXMgc2hvdWxkIGNhdXNlIGl0IHRvIGRvdWJsZQotICAgIG91dHB1
dC53cml0ZVRvKG91dHB1dCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJXcml0aW5nIGFuIG91dHB1dCBz
dHJlYW0gdG8gaXRzZWxmIGlzIHN1Y2Nlc3NmdWwiLAotICAgICAgICBzdHJpbmdVbmRlclRlc3Qu
Y29uY2F0KHN0cmluZ1VuZGVyVGVzdCksIG91dHB1dC50b0J5dGVTdHJpbmcoKSk7Ci0KLSAgICBv
dXRwdXQucmVzZXQoKTsKLSAgICBhc3NlcnRFcXVhbHMoIk91dHB1dC5yZXNldCgpIHJlc2V0cyB0
aGUgb3V0cHV0IiwgMCwgb3V0cHV0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJPdXRwdXQu
cmVzZXQoKSByZXNldHMgdGhlIG91dHB1dCIsCi0gICAgICAgIEJ5dGVTdHJpbmcuRU1QVFksIG91
dHB1dC50b0J5dGVTdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VG9TdHJpbmco
KSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIHRlc3RT
dHJpbmcgPSAiSSBsb3ZlIHVuaWNvZGUgXHUxMjM0XHU1Njc4IGNoYXJhY3RlcnMiOwotICAgIEJ5
dGVTdHJpbmcgdW5pY29kZSA9IEJ5dGVTdHJpbmcud3JhcCh0ZXN0U3RyaW5nLmdldEJ5dGVzKElu
dGVybmFsLlVURl84KSk7Ci0gICAgU3RyaW5nIHJvdW5kVHJpcFN0cmluZyA9IHVuaWNvZGUudG9T
dHJpbmcoVVRGXzgpOwotICAgIGFzc2VydEVxdWFscyhjbGFzc1VuZGVyVGVzdCArICIgdW5pY29k
ZSBtdXN0IG1hdGNoIiwgdGVzdFN0cmluZywgcm91bmRUcmlwU3RyaW5nKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RDaGFyc2V0VG9TdHJpbmcoKSB7Ci0gICAgU3RyaW5nIHRlc3RTdHJpbmcg
PSAiSSBsb3ZlIHVuaWNvZGUgXHUxMjM0XHU1Njc4IGNoYXJhY3RlcnMiOwotICAgIEJ5dGVTdHJp
bmcgdW5pY29kZSA9IEJ5dGVTdHJpbmcud3JhcCh0ZXN0U3RyaW5nLmdldEJ5dGVzKEludGVybmFs
LlVURl84KSk7Ci0gICAgU3RyaW5nIHJvdW5kVHJpcFN0cmluZyA9IHVuaWNvZGUudG9TdHJpbmco
SW50ZXJuYWwuVVRGXzgpOwotICAgIGFzc2VydEVxdWFscyhjbGFzc1VuZGVyVGVzdCArICIgdW5p
Y29kZSBtdXN0IG1hdGNoIiwgdGVzdFN0cmluZywgcm91bmRUcmlwU3RyaW5nKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZ19yZXR1cm5zQ2Fub25pY2FsRW1wdHlTdHJpbmcoKSB7
Ci0gICAgYXNzZXJ0U2FtZShjbGFzc1VuZGVyVGVzdCArICIgbXVzdCBiZSB0aGUgc2FtZSBzdHJp
bmcgcmVmZXJlbmNlcyIsCi0gICAgICAgIEJ5dGVTdHJpbmcuRU1QVFkudG9TdHJpbmcoSW50ZXJu
YWwuVVRGXzgpLAotICAgICAgICBCeXRlU3RyaW5nLndyYXAobmV3IGJ5dGVbXXt9KS50b1N0cmlu
ZyhJbnRlcm5hbC5VVEZfOCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nX3Jh
aXNlc0V4Y2VwdGlvbigpIHsKLSAgICB0cnkgewotICAgICAgQnl0ZVN0cmluZy5FTVBUWS50b1N0
cmluZygiaW52YWxpZCIpOwotICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2Vw
dGlvbi4iKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGV4cGVj
dGVkKSB7Ci0gICAgICAvLyBUaGlzIGlzIHN1Y2Nlc3MKLSAgICB9Ci0KLSAgICB0cnkgewotICAg
ICAgQnl0ZVN0cmluZy53cmFwKHJlZmVyZW5jZUJ5dGVzKS50b1N0cmluZygiaW52YWxpZCIpOwot
ICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4iKTsKLSAgICB9IGNh
dGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAvLyBU
aGlzIGlzIHN1Y2Nlc3MKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzKCkg
ewotICAgIGFzc2VydEVxdWFscyhjbGFzc1VuZGVyVGVzdCArICIgbXVzdCBub3QgZXF1YWwgbnVs
bCIsIGZhbHNlLCBzdHJpbmdVbmRlclRlc3QuZXF1YWxzKG51bGwpKTsKLSAgICBhc3NlcnRFcXVh
bHMoY2xhc3NVbmRlclRlc3QgKyAiIG11c3QgZXF1YWwgc2VsZiIsIHN0cmluZ1VuZGVyVGVzdCwg
c3RyaW5nVW5kZXJUZXN0KTsKLSAgICBhc3NlcnRGYWxzZShjbGFzc1VuZGVyVGVzdCArICIgbXVz
dCBub3QgZXF1YWwgdGhlIGVtcHR5IHN0cmluZyIsCi0gICAgICAgIHN0cmluZ1VuZGVyVGVzdC5l
cXVhbHMoQnl0ZVN0cmluZy5FTVBUWSkpOwotICAgIGFzc2VydEVxdWFscyhjbGFzc1VuZGVyVGVz
dCArICIgZW1wdHkgc3RyaW5ncyBtdXN0IGJlIGVxdWFsIiwKLSAgICAgICAgQnl0ZVN0cmluZy53
cmFwKG5ldyBieXRlW117fSksIHN0cmluZ1VuZGVyVGVzdC5zdWJzdHJpbmcoNTUsIDU1KSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIiBtdXN0IGVxdWFsIGFub3RoZXIgc3Ry
aW5nIHdpdGggdGhlIHNhbWUgdmFsdWUiLAotICAgICAgICBzdHJpbmdVbmRlclRlc3QsIEJ5dGVT
dHJpbmcud3JhcChyZWZlcmVuY2VCeXRlcykpOwotCi0gICAgYnl0ZVtdIG11bmdlZEJ5dGVzID0g
bmV3IGJ5dGVbcmVmZXJlbmNlQnl0ZXMubGVuZ3RoXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHJl
ZmVyZW5jZUJ5dGVzLCAwLCBtdW5nZWRCeXRlcywgMCwgcmVmZXJlbmNlQnl0ZXMubGVuZ3RoKTsK
LSAgICBtdW5nZWRCeXRlc1ttdW5nZWRCeXRlcy5sZW5ndGggLSA1XSA9IChieXRlKSAobXVuZ2Vk
Qnl0ZXNbbXVuZ2VkQnl0ZXMubGVuZ3RoIC0gNV0gXiAweEZGKTsKLSAgICBhc3NlcnRGYWxzZShj
bGFzc1VuZGVyVGVzdCArICIgbXVzdCBub3QgZXF1YWwgZXZlcnkgc3RyaW5nIHdpdGggdGhlIHNh
bWUgbGVuZ3RoIiwKLSAgICAgICAgc3RyaW5nVW5kZXJUZXN0LmVxdWFscyhCeXRlU3RyaW5nLndy
YXAobXVuZ2VkQnl0ZXMpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SGFzaENvZGUoKSB7
Ci0gICAgaW50IGhhc2ggPSBzdHJpbmdVbmRlclRlc3QuaGFzaENvZGUoKTsKLSAgICBhc3NlcnRF
cXVhbHMoY2xhc3NVbmRlclRlc3QgKyAiIG11c3QgaGF2ZSBleHBlY3RlZCBoYXNoQ29kZSIsIGV4
cGVjdGVkSGFzaENvZGUsIGhhc2gpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBlZWtDYWNo
ZWRIYXNoQ29kZSgpIHsKLSAgICBhc3NlcnRFcXVhbHMoY2xhc3NVbmRlclRlc3QgKyAiLnBlZWtD
YWNoZWRIYXNoQ29kZSgpIHNob3VsZCByZXR1cm4gemVybyBhdCBmaXJzdCIsIDAsCi0gICAgICAg
IHN0cmluZ1VuZGVyVGVzdC5wZWVrQ2FjaGVkSGFzaENvZGUoKSk7Ci0gICAgc3RyaW5nVW5kZXJU
ZXN0Lmhhc2hDb2RlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIi5wZWVr
Q2FjaGVkSGFzaENvZGUgc2hvdWxkIHJldHVybiB6ZXJvIGF0IGZpcnN0IiwKLSAgICAgICAgZXhw
ZWN0ZWRIYXNoQ29kZSwgc3RyaW5nVW5kZXJUZXN0LnBlZWtDYWNoZWRIYXNoQ29kZSgpKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJ0aWFsSGFzaCgpIHsKLSAgICAvLyBwYXJ0aWFsSGFz
aCgpIGlzIG1vcmUgc3RyZW51b3VzbHkgdGVzdGVkIGVsc2V3aGVyZSBieSB0ZXN0aW5nIGhhc2hl
cyBvZiBzdWJzdHJpbmdzLgotICAgIC8vIFRoaXMgdGVzdCB3b3VsZCBmYWlsIGlmIHRoZSBleHBl
Y3RlZCBoYXNoIHdlcmUgMS4gIEl0J3Mgbm90LgotICAgIGludCBoYXNoID0gc3RyaW5nVW5kZXJU
ZXN0LnBhcnRpYWxIYXNoKHN0cmluZ1VuZGVyVGVzdC5zaXplKCksIDAsIHN0cmluZ1VuZGVyVGVz
dC5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscyhjbGFzc1VuZGVyVGVzdCArICIucGFydGlhbEhh
c2goKSBtdXN0IHlpZWxkIGV4cGVjdGVkIGhhc2hDb2RlIiwKLSAgICAgICAgZXhwZWN0ZWRIYXNo
Q29kZSwgaGFzaCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmV3SW5wdXQoKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgIElucHV0U3RyZWFtIGlucHV0ID0gc3RyaW5nVW5kZXJUZXN0Lm5l
d0lucHV0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5hdmFpbGFibGUoKSByZXR1
cm5zIGNvcnJlY3QgdmFsdWUiLAotICAgICAgICBzdHJpbmdVbmRlclRlc3Quc2l6ZSgpLCBpbnB1
dC5hdmFpbGFibGUoKSk7Ci0gICAgYm9vbGVhbiBzdGlsbEVxdWFsID0gdHJ1ZTsKLSAgICBmb3Ig
KGJ5dGUgcmVmZXJlbmNlQnl0ZSA6IHJlZmVyZW5jZUJ5dGVzKSB7Ci0gICAgICBpbnQgZXhwZWN0
ZWRJbnQgPSAocmVmZXJlbmNlQnl0ZSAmIDB4RkYpOwotICAgICAgc3RpbGxFcXVhbCA9IChleHBl
Y3RlZEludCA9PSBpbnB1dC5yZWFkKCkpOwotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMoIklucHV0
U3RyZWFtLmF2YWlsYWJsZSgpIHJldHVybnMgY29ycmVjdCB2YWx1ZSIsCi0gICAgICAgIDAsIGlu
cHV0LmF2YWlsYWJsZSgpKTsKLSAgICBhc3NlcnRUcnVlKGNsYXNzVW5kZXJUZXN0ICsgIiBtdXN0
IGdpdmUgdGhlIHNhbWUgYnl0ZXMgZnJvbSB0aGUgSW5wdXRTdHJlYW0iLCBzdGlsbEVxdWFsKTsK
LSAgICBhc3NlcnRFcXVhbHMoY2xhc3NVbmRlclRlc3QgKyAiIElucHV0U3RyZWFtIG11c3Qgbm93
IGJlIGV4aGF1c3RlZCIsIC0xLCBpbnB1dC5yZWFkKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdE5ld0lucHV0X3NraXAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIElucHV0U3RyZWFt
IGlucHV0ID0gc3RyaW5nVW5kZXJUZXN0Lm5ld0lucHV0KCk7Ci0gICAgaW50IHN0cmluZ1NpemUg
PSBzdHJpbmdVbmRlclRlc3Quc2l6ZSgpOwotICAgIGludCBuZWFyRW5kSW5kZXggPSBzdHJpbmdT
aXplICogMiAvIDM7Ci0gICAgbG9uZyBza2lwcGVkMSA9IGlucHV0LnNraXAobmVhckVuZEluZGV4
KTsKLSAgICBhc3NlcnRFcXVhbHMoIklucHV0U3RyZWFtLnNraXAoKSIsIHNraXBwZWQxLCBuZWFy
RW5kSW5kZXgpOwotICAgIGFzc2VydEVxdWFscygiSW5wdXRTdHJlYW0uYXZhaWxhYmxlKCkiLAot
ICAgICAgICBzdHJpbmdTaXplIC0gc2tpcHBlZDEsIGlucHV0LmF2YWlsYWJsZSgpKTsKLSAgICBh
c3NlcnRUcnVlKCJJbnB1dFN0cmVhbS5tYXJrKCkgaXMgYXZhaWxhYmxlIiwgaW5wdXQubWFya1N1
cHBvcnRlZCgpKTsKLSAgICBpbnB1dC5tYXJrKDApOwotICAgIGFzc2VydEVxdWFscygiSW5wdXRT
dHJlYW0uc2tpcCgpLCByZWFkKCkiLAotICAgICAgICBzdHJpbmdVbmRlclRlc3QuYnl0ZUF0KG5l
YXJFbmRJbmRleCkgJiAweEZGLCBpbnB1dC5yZWFkKCkpOwotICAgIGFzc2VydEVxdWFscygiSW5w
dXRTdHJlYW0uYXZhaWxhYmxlKCkiLAotICAgICAgICAgICAgICAgICBzdHJpbmdTaXplIC0gc2tp
cHBlZDEgLSAxLCBpbnB1dC5hdmFpbGFibGUoKSk7Ci0gICAgbG9uZyBza2lwcGVkMiA9IGlucHV0
LnNraXAoc3RyaW5nU2l6ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5za2lwKCkg
aW5jb21wbGV0ZSIsCi0gICAgICAgIHNraXBwZWQyLCBzdHJpbmdTaXplIC0gc2tpcHBlZDEgLSAx
KTsKLSAgICBhc3NlcnRFcXVhbHMoIklucHV0U3RyZWFtLnNraXAoKSwgbm8gbW9yZSBpbnB1dCIs
IDAsIGlucHV0LmF2YWlsYWJsZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoIklucHV0U3RyZWFtLnNr
aXAoKSwgbm8gbW9yZSBpbnB1dCIsIC0xLCBpbnB1dC5yZWFkKCkpOwotICAgIGlucHV0LnJlc2V0
KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5yZXNldCgpIHN1Y2NlZGVkIiwKLSAg
ICAgICAgICAgICAgICAgc3RyaW5nU2l6ZSAtIHNraXBwZWQxLCBpbnB1dC5hdmFpbGFibGUoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5yZXNldCgpLCByZWFkKCkiLAotICAgICAg
ICBzdHJpbmdVbmRlclRlc3QuYnl0ZUF0KG5lYXJFbmRJbmRleCkgJiAweEZGLCBpbnB1dC5yZWFk
KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5ld0NvZGVkSW5wdXQoKSB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgIENvZGVkSW5wdXRTdHJlYW0gY2lzID0gc3RyaW5nVW5kZXJUZXN0Lm5l
d0NvZGVkSW5wdXQoKTsKLSAgICBieXRlW10gcm91bmRUcmlwQnl0ZXMgPSBjaXMucmVhZFJhd0J5
dGVzKHJlZmVyZW5jZUJ5dGVzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShjbGFzc1VuZGVyVGVz
dCArICIgbXVzdCBnaXZlIHRoZSBzYW1lIGJ5dGVzIGJhY2sgZnJvbSB0aGUgQ29kZWRJbnB1dFN0
cmVhbSIsCi0gICAgICAgIEFycmF5cy5lcXVhbHMocmVmZXJlbmNlQnl0ZXMsIHJvdW5kVHJpcEJ5
dGVzKSk7Ci0gICAgYXNzZXJ0VHJ1ZShjbGFzc1VuZGVyVGVzdCArICIgQ29kZWRJbnB1dFN0cmVh
bSBtdXN0IG5vdyBiZSBleGhhdXN0ZWQiLCBjaXMuaXNBdEVuZCgpKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBNYWtlIHN1cmUgd2Uga2VlcCB0aGluZ3Mgc2ltcGxlIHdoZW4gY29uY2F0ZW5hdGluZyB3
aXRoIGVtcHR5LiBTZWUgYWxzbwotICAgKiB7QGxpbmsgQnl0ZVN0cmluZ1Rlc3QjdGVzdENvbmNh
dF9lbXB0eSgpfS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDb25jYXRfZW1wdHkoKSB7Ci0g
ICAgYXNzZXJ0U2FtZShjbGFzc1VuZGVyVGVzdCArICIgY29uY2F0ZW5hdGVkIHdpdGggZW1wdHkg
bXVzdCBnaXZlICIgKyBjbGFzc1VuZGVyVGVzdCwKLSAgICAgICAgc3RyaW5nVW5kZXJUZXN0LmNv
bmNhdChCeXRlU3RyaW5nLkVNUFRZKSwgc3RyaW5nVW5kZXJUZXN0KTsKLSAgICBhc3NlcnRTYW1l
KCJlbXB0eSBjb25jYXRlbmF0ZWQgd2l0aCAiICsgY2xhc3NVbmRlclRlc3QgKyAiIG11c3QgZ2l2
ZSAiICsgY2xhc3NVbmRlclRlc3QsCi0gICAgICAgIEJ5dGVTdHJpbmcuRU1QVFkuY29uY2F0KHN0
cmluZ1VuZGVyVGVzdCksIHN0cmluZ1VuZGVyVGVzdCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0SmF2YVNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBCeXRlQXJyYXlP
dXRwdXRTdHJlYW0gb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIE9iamVj
dE91dHB1dFN0cmVhbSBvb3MgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKG91dCk7Ci0gICAgb29z
LndyaXRlT2JqZWN0KHN0cmluZ1VuZGVyVGVzdCk7Ci0gICAgb29zLmNsb3NlKCk7Ci0gICAgYnl0
ZVtdIHBpY2tsZWQgPSBvdXQudG9CeXRlQXJyYXkoKTsKLSAgICBJbnB1dFN0cmVhbSBpbiA9IG5l
dyBCeXRlQXJyYXlJbnB1dFN0cmVhbShwaWNrbGVkKTsKLSAgICBPYmplY3RJbnB1dFN0cmVhbSBv
aXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oaW4pOwotICAgIE9iamVjdCBvID0gb2lzLnJlYWRP
YmplY3QoKTsKLSAgICBhc3NlcnRUcnVlKCJEaWRuJ3QgZ2V0IGEgQnl0ZVN0cmluZyBiYWNrIiwg
byBpbnN0YW5jZW9mIEJ5dGVTdHJpbmcpOwotICAgIGFzc2VydEVxdWFscygiU2hvdWxkIGdldCBh
biBlcXVhbCBCeXRlU3RyaW5nIGJhY2siLCBzdHJpbmdVbmRlclRlc3QsIG8pOwotICB9Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTG9u
Z0FycmF5TGlzdFRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9Mb25nQXJyYXlMaXN0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwYThmOWVkMjI4MGMzMDZjYzcyYmE4YjJmZmNiOWI0NGE2NjEzZjI0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Mb25nQXJyYXlMaXN0VGVzdC5qYXZhCisrKyAvZGV2L251
bGwKQEAgLTEsNDU5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBzdGF0aWMgamF2YS51dGls
LkFycmF5cy5hc0xpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWlt
cG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbmN1cnJlbnRN
b2RpZmljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioK
LSAqIFRlc3RzIGZvciB7QGxpbmsgTG9uZ0FycmF5TGlzdH0uCi0gKiAKLSAqIEBhdXRob3IgZHdl
aXNAZ29vZ2xlLmNvbSAoRGFuaWVsIFdlaXMpCi0gKi8KLXB1YmxpYyBjbGFzcyBMb25nQXJyYXlM
aXN0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExv
bmdBcnJheUxpc3QgVU5BUllfTElTVCA9IG5ld0ltbXV0YWJsZUxvbmdBcnJheUxpc3QoMSk7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIExvbmdBcnJheUxpc3QgVEVSVElBUllfTElTVCA9Ci0gICAg
ICBuZXdJbW11dGFibGVMb25nQXJyYXlMaXN0KDEsIDIsIDMpOwotICAKLSAgcHJpdmF0ZSBMb25n
QXJyYXlMaXN0IGxpc3Q7Ci0gIAotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAo
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBsaXN0ID0gbmV3IExvbmdBcnJheUxpc3QoKTsKLSAg
fQotICAKLSAgcHVibGljIHZvaWQgdGVzdEVtcHR5TGlzdFJldHVybnNTYW1lSW5zdGFuY2UoKSB7
Ci0gICAgYXNzZXJ0U2FtZShMb25nQXJyYXlMaXN0LmVtcHR5TGlzdCgpLCBMb25nQXJyYXlMaXN0
LmVtcHR5TGlzdCgpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEVtcHR5TGlzdElzSW1t
dXRhYmxlKCkgewotICAgIGFzc2VydEltbXV0YWJsZShMb25nQXJyYXlMaXN0LmVtcHR5TGlzdCgp
KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE1ha2VJbW11dGFibGUoKSB7Ci0gICAgbGlz
dC5hZGRMb25nKDIpOwotICAgIGxpc3QuYWRkTG9uZyg0KTsKLSAgICBsaXN0LmFkZExvbmcoNik7
Ci0gICAgbGlzdC5hZGRMb25nKDgpOwotICAgIGxpc3QubWFrZUltbXV0YWJsZSgpOwotICAgIGFz
c2VydEltbXV0YWJsZShsaXN0KTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWNh
dGlvbldpdGhJdGVyYXRpb24oKSB7Ci0gICAgbGlzdC5hZGRBbGwoYXNMaXN0KDFMLCAyTCwgM0ws
IDRMKSk7Ci0gICAgSXRlcmF0b3I8TG9uZz4gaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDQsIGxpc3Quc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgKGxv
bmcpIGxpc3QuZ2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgKGxvbmcpIGl0ZXJhdG9yLm5l
eHQoKSk7Ci0gICAgbGlzdC5zZXQoMCwgMUwpOwotICAgIGFzc2VydEVxdWFscygyLCAobG9uZykg
aXRlcmF0b3IubmV4dCgpKTsKLSAgICAKLSAgICBsaXN0LnJlbW92ZSgwKTsKLSAgICB0cnkgewot
ICAgICAgaXRlcmF0b3IubmV4dCgpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKENvbmN1
cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9
Ci0gICAgCi0gICAgaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0gICAgbGlzdC5hZGQoMCwg
MEwpOwotICAgIHRyeSB7Ci0gICAgICBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBmYWlsKCk7Ci0g
ICAgfSBjYXRjaCAoQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEdldCgpIHsKLSAg
ICBhc3NlcnRFcXVhbHMoMSwgKGxvbmcpIFRFUlRJQVJZX0xJU1QuZ2V0KDApKTsKLSAgICBhc3Nl
cnRFcXVhbHMoMiwgKGxvbmcpIFRFUlRJQVJZX0xJU1QuZ2V0KDEpKTsKLSAgICBhc3NlcnRFcXVh
bHMoMywgKGxvbmcpIFRFUlRJQVJZX0xJU1QuZ2V0KDIpKTsKLSAgICAKLSAgICB0cnkgewotICAg
ICAgVEVSVElBUllfTElTVC5nZXQoLTEpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKElu
ZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0g
ICAgCi0gICAgdHJ5IHsKLSAgICAgIFRFUlRJQVJZX0xJU1QuZ2V0KDMpOwotICAgICAgZmFpbCgp
OwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8g
ZXhwZWN0ZWQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRMb25nKCkgewot
ICAgIGFzc2VydEVxdWFscygxLCBURVJUSUFSWV9MSVNULmdldExvbmcoMCkpOwotICAgIGFzc2Vy
dEVxdWFscygyLCBURVJUSUFSWV9MSVNULmdldExvbmcoMSkpOwotICAgIGFzc2VydEVxdWFscygz
LCBURVJUSUFSWV9MSVNULmdldExvbmcoMikpOwotICAgIAotICAgIHRyeSB7Ci0gICAgICBURVJU
SUFSWV9MSVNULmdldCgtMSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRP
ZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAg
ICB0cnkgewotICAgICAgVEVSVElBUllfTElTVC5nZXQoMyk7Ci0gICAgICBmYWlsKCk7Ci0gICAg
fSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3Rl
ZAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdFNpemUoKSB7Ci0gICAgYXNzZXJ0
RXF1YWxzKDAsIExvbmdBcnJheUxpc3QuZW1wdHlMaXN0KCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoMSwgVU5BUllfTElTVC5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygzLCBURVJUSUFS
WV9MSVNULnNpemUoKSk7Ci0KLSAgICBsaXN0LmFkZExvbmcoMik7Ci0gICAgbGlzdC5hZGRMb25n
KDQpOwotICAgIGxpc3QuYWRkTG9uZyg2KTsKLSAgICBsaXN0LmFkZExvbmcoOCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDQsIGxpc3Quc2l6ZSgpKTsKLSAgICAKLSAgICBsaXN0LnJlbW92ZSgwKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMywgbGlzdC5zaXplKCkpOwotICAgIAotICAgIGxpc3QuYWRkKDE2TCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIGxpc3Quc2l6ZSgpKTsKLSAgfQotICAKLSAgcHVibGljIHZv
aWQgdGVzdFNldCgpIHsKLSAgICBsaXN0LmFkZExvbmcoMik7Ci0gICAgbGlzdC5hZGRMb25nKDQp
OwotICAgIAotICAgIGFzc2VydEVxdWFscygyLCAobG9uZykgbGlzdC5zZXQoMCwgMEwpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMCwgbGlzdC5nZXRMb25nKDApKTsKLQotICAgIGFzc2VydEVxdWFscyg0
LCAobG9uZykgbGlzdC5zZXQoMSwgMEwpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbGlzdC5nZXRM
b25nKDEpKTsKLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5zZXQoLTEsIDBMKTsKLSAgICAg
IGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAg
ICAgIC8vIGV4cGVjdGVkCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0KDIsIDBM
KTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9u
IGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0
ZXN0U2V0TG9uZygpIHsKLSAgICBsaXN0LmFkZExvbmcoMik7Ci0gICAgbGlzdC5hZGRMb25nKDQp
OwotICAgIAotICAgIGFzc2VydEVxdWFscygyLCBsaXN0LnNldExvbmcoMCwgMCkpOwotICAgIGFz
c2VydEVxdWFscygwLCBsaXN0LmdldExvbmcoMCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDQsIGxp
c3Quc2V0TG9uZygxLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIGxpc3QuZ2V0TG9uZygxKSk7
Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0TG9uZygtMSwgMCk7Ci0gICAgICBmYWls
KCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBleHBlY3RlZAotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBsaXN0LnNldExvbmcoMiwgMCk7
Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVz
dEFkZCgpIHsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbGlzdC5zaXplKCkpOwotCi0gICAgYXNzZXJ0
VHJ1ZShsaXN0LmFkZCgyTCkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMkwpLCBsaXN0KTsK
LQotICAgIGFzc2VydFRydWUobGlzdC5hZGQoM0wpKTsKLSAgICBsaXN0LmFkZCgwLCA0TCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCg0TCwgMkwsIDNMKSwgbGlzdCk7Ci0gICAgCi0gICAgbGlz
dC5hZGQoMCwgMUwpOwotICAgIGxpc3QuYWRkKDAsIDBMKTsKLSAgICAvLyBGb3JjZSBhIHJlc2l6
ZSBieSBnZXR0aW5nIHVwIHRvIDExIGVsZW1lbnRzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NjsgaSsrKSB7Ci0gICAgICBsaXN0LmFkZChMb25nLnZhbHVlT2YoNSArIGkpKTsKLSAgICB9Ci0g
ICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgwTCwgMUwsIDRMLCAyTCwgM0wsIDVMLCA2TCwgN0wsIDhM
LCA5TCwgMTBMKSwgbGlzdCk7Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkKC0xLCA1
TCk7Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGQoNCwgNUwp
OwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgLy8g
ZXhwZWN0ZWQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RBZGRMb25nKCkgewot
ICAgIGFzc2VydEVxdWFscygwLCBsaXN0LnNpemUoKSk7Ci0KLSAgICBsaXN0LmFkZExvbmcoMik7
Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgyTCksIGxpc3QpOwotCi0gICAgbGlzdC5hZGRMb25n
KDMpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMkwsIDNMKSwgbGlzdCk7Ci0gIH0KLSAgCi0g
IHB1YmxpYyB2b2lkIHRlc3RBZGRBbGwoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIGxpc3Quc2l6
ZSgpKTsKLQotICAgIGFzc2VydFRydWUobGlzdC5hZGRBbGwoQ29sbGVjdGlvbnMuc2luZ2xldG9u
KDFMKSkpOwotICAgIGFzc2VydEVxdWFscygxLCBsaXN0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDEsIChsb25nKSBsaXN0LmdldCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGxpc3QuZ2V0
TG9uZygwKSk7Ci0gICAgCi0gICAgYXNzZXJ0VHJ1ZShsaXN0LmFkZEFsbChhc0xpc3QoMkwsIDNM
LCA0TCwgNUwsIDZMKSkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMUwsIDJMLCAzTCwgNEws
IDVMLCA2TCksIGxpc3QpOwotICAgIAotICAgIGFzc2VydFRydWUobGlzdC5hZGRBbGwoVEVSVElB
UllfTElTVCkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMUwsIDJMLCAzTCwgNEwsIDVMLCA2
TCwgMUwsIDJMLCAzTCksIGxpc3QpOwotCi0gICAgYXNzZXJ0RmFsc2UobGlzdC5hZGRBbGwoQ29s
bGVjdGlvbnMuPExvbmc+ZW1wdHlMaXN0KCkpKTsKLSAgICBhc3NlcnRGYWxzZShsaXN0LmFkZEFs
bChMb25nQXJyYXlMaXN0LmVtcHR5TGlzdCgpKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRl
c3RSZW1vdmUoKSB7Ci0gICAgbGlzdC5hZGRBbGwoVEVSVElBUllfTElTVCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDEsIChsb25nKSBsaXN0LnJlbW92ZSgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlz
dCgyTCwgM0wpLCBsaXN0KTsKLQotICAgIGFzc2VydFRydWUobGlzdC5yZW1vdmUoM0wpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoYXNMaXN0KDJMKSwgbGlzdCk7Ci0KLSAgICBhc3NlcnRGYWxzZShsaXN0
LnJlbW92ZSgzTCkpOwotICAgIGFzc2VydEVxdWFscyhhc0xpc3QoMkwpLCBsaXN0KTsKLQotICAg
IGFzc2VydEVxdWFscygyLCAobG9uZykgbGlzdC5yZW1vdmUoMCkpOwotICAgIGFzc2VydEVxdWFs
cyhhc0xpc3QoKSwgbGlzdCk7Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmVtb3ZlKC0x
KTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9u
IGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBs
aXN0LnJlbW92ZSgwKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgYXNz
ZXJ0SW1tdXRhYmxlKExvbmdBcnJheUxpc3QgbGlzdCkgewotICAgIGlmIChsaXN0LmNvbnRhaW5z
KDFMKSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbm5vdCB0ZXN0IHRo
ZSBpbW11dGFiaWxpdHkgb2YgbGlzdHMgdGhhdCBjb250YWluIDEuIik7Ci0gICAgfQotICAgIAot
ICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZCgxTCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRj
aCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQK
LSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkKDAsIDFMKTsKLSAgICAgIGZh
aWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRB
bGwoQ29sbGVjdGlvbnMuPExvbmc+ZW1wdHlMaXN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0g
Y2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVj
dGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChDb2xsZWN0aW9u
cy5zaW5nbGV0b25MaXN0KDFMKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBw
b3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0g
ICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkQWxsKG5ldyBMb25nQXJyYXlMaXN0KCkpOwot
ICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u
IGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBs
aXN0LmFkZEFsbChVTkFSWV9MSVNUKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0K
LSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGRBbGwoMCwgQ29sbGVjdGlvbnMuc2luZ2xl
dG9uKDFMKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRp
b25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5
IHsKLSAgICAgIGxpc3QuYWRkQWxsKDAsIFVOQVJZX0xJU1QpOwotICAgICAgZmFpbCgpOwotICAg
IH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4
cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbCgwLCBDb2xs
ZWN0aW9ucy48TG9uZz5lbXB0eUxpc3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAo
VW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAg
ICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkTG9uZygwKTsKLSAgICAgIGZhaWwo
KTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5jbGVhcigp
OwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0
aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIGxp
c3QucmVtb3ZlKDEpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3Bl
cmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAg
IHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZShuZXcgT2JqZWN0KCkpOwotICAgICAgZmFpbCgpOwot
ICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8v
IGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZUFsbChD
b2xsZWN0aW9ucy48TG9uZz5lbXB0eUxpc3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRj
aCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQK
LSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmVtb3ZlQWxsKENvbGxlY3Rpb25z
LnNpbmdsZXRvbigxTCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAot
ICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZUFsbChVTkFSWV9MSVNUKTsKLSAgICAgIGZhaWwo
KTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZXRhaW5B
bGwoQ29sbGVjdGlvbnMuPExvbmc+ZW1wdHlMaXN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0g
Y2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVj
dGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJldGFpbkFsbChDb2xsZWN0
aW9ucy5zaW5nbGV0b24oMUwpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBv
cnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAg
ICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZXRhaW5BbGwoVU5BUllfTElTVCk7Ci0gICAgICBm
YWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewot
ICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0
KDAsIDBMKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlv
bkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkg
ewotICAgICAgbGlzdC5zZXRMb25nKDAsIDApOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2gg
KFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0g
ICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBMb25nQXJyYXlMaXN0IG5ld0ltbXV0YWJs
ZUxvbmdBcnJheUxpc3QobG9uZy4uLiBlbGVtZW50cykgewotICAgIExvbmdBcnJheUxpc3QgbGlz
dCA9IG5ldyBMb25nQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChsb25nIGVsZW1lbnQgOiBlbGVtZW50
cykgewotICAgICAgbGlzdC5hZGRMb25nKGVsZW1lbnQpOwotICAgIH0KLSAgICBsaXN0Lm1ha2VJ
bW11dGFibGUoKTsKLSAgICByZXR1cm4gbGlzdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01hcEZvclByb3RvMkxpdGVUZXN0
LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTWFwRm9y
UHJvdG8yTGl0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc5ZDAw
Mjk5ZWI0YTJkZWZjMjllMjNmYmIyNjFhMTJmOGYwYzU1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvTWFwRm9yUHJvdG8yTGl0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0x
LDQ1OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2Fn
ZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgbWFwX2xpdGVfdGVzdC5NYXBGb3JQcm90
bzJUZXN0UHJvdG8uVGVzdE1hcDsKLWltcG9ydCBtYXBfbGl0ZV90ZXN0Lk1hcEZvclByb3RvMlRl
c3RQcm90by5UZXN0TWFwLk1lc3NhZ2VWYWx1ZTsKLWltcG9ydCBtYXBfbGl0ZV90ZXN0Lk1hcEZv
clByb3RvMlRlc3RQcm90by5UZXN0VW5rbm93bkVudW1WYWx1ZTsKLQotaW1wb3J0IGp1bml0LmZy
YW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQg
amF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZh
LnV0aWwuTWFwOwotCi0vKioKLSAqIFVuaXQgdGVzdHMgZm9yIG1hcCBmaWVsZHMuCi0gKi8KLXB1
YmxpYyBjbGFzcyBNYXBGb3JQcm90bzJMaXRlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgcHJp
dmF0ZSB2b2lkIHNldE1hcFZhbHVlcyhUZXN0TWFwLkJ1aWxkZXIgYnVpbGRlcikgewotICAgIGJ1
aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDEsIDExKTsKLSAgICBidWls
ZGVyLmdldE11dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCgyLCAyMik7Ci0gICAgYnVpbGRl
ci5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMywgMzMpOwotCi0gICAgYnVpbGRl
ci5nZXRNdXRhYmxlSW50MzJUb1N0cmluZ0ZpZWxkKCkucHV0KDEsICIxMSIpOwotICAgIGJ1aWxk
ZXIuZ2V0TXV0YWJsZUludDMyVG9TdHJpbmdGaWVsZCgpLnB1dCgyLCAiMjIiKTsKLSAgICBidWls
ZGVyLmdldE11dGFibGVJbnQzMlRvU3RyaW5nRmllbGQoKS5wdXQoMywgIjMzIik7Ci0gICAgCi0g
ICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0J5dGVzRmllbGQoKS5wdXQoMSwgVGVzdFV0aWwu
dG9CeXRlcygiMTEiKSk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0J5dGVzRmllbGQo
KS5wdXQoMiwgVGVzdFV0aWwudG9CeXRlcygiMjIiKSk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxl
SW50MzJUb0J5dGVzRmllbGQoKS5wdXQoMywgVGVzdFV0aWwudG9CeXRlcygiMzMiKSk7Ci0gICAg
Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0VudW1GaWVsZCgpLnB1dCgxLCBUZXN0TWFw
LkVudW1WYWx1ZS5GT08pOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9FbnVtRmllbGQo
KS5wdXQoMiwgVGVzdE1hcC5FbnVtVmFsdWUuQkFSKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJ
bnQzMlRvRW51bUZpZWxkKCkucHV0KDMsIFRlc3RNYXAuRW51bVZhbHVlLkJBWik7Ci0gICAgCi0g
ICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb01lc3NhZ2VGaWVsZCgpLnB1dCgKLSAgICAgICAg
MSwgTWVzc2FnZVZhbHVlLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSgxMSkuYnVpbGQoKSk7Ci0gICAg
YnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb01lc3NhZ2VGaWVsZCgpLnB1dCgKLSAgICAgICAgMiwg
TWVzc2FnZVZhbHVlLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSgyMikuYnVpbGQoKSk7Ci0gICAgYnVp
bGRlci5nZXRNdXRhYmxlSW50MzJUb01lc3NhZ2VGaWVsZCgpLnB1dCgKLSAgICAgICAgMywgTWVz
c2FnZVZhbHVlLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSgzMykuYnVpbGQoKSk7Ci0gICAgCi0gICAg
YnVpbGRlci5nZXRNdXRhYmxlU3RyaW5nVG9JbnQzMkZpZWxkKCkucHV0KCIxIiwgMTEpOwotICAg
IGJ1aWxkZXIuZ2V0TXV0YWJsZVN0cmluZ1RvSW50MzJGaWVsZCgpLnB1dCgiMiIsIDIyKTsKLSAg
ICBidWlsZGVyLmdldE11dGFibGVTdHJpbmdUb0ludDMyRmllbGQoKS5wdXQoIjMiLCAzMyk7Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgY29weU1hcFZhbHVlcyhUZXN0TWFwIHNvdXJjZSwgVGVzdE1h
cC5CdWlsZGVyIGRlc3RpbmF0aW9uKSB7Ci0gICAgZGVzdGluYXRpb24KLSAgICAgICAgLnB1dEFs
bEludDMyVG9JbnQzMkZpZWxkKHNvdXJjZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpKQotICAgICAg
ICAucHV0QWxsSW50MzJUb1N0cmluZ0ZpZWxkKHNvdXJjZS5nZXRJbnQzMlRvU3RyaW5nRmllbGQo
KSkKLSAgICAgICAgLnB1dEFsbEludDMyVG9CeXRlc0ZpZWxkKHNvdXJjZS5nZXRJbnQzMlRvQnl0
ZXNGaWVsZCgpKQotICAgICAgICAucHV0QWxsSW50MzJUb0VudW1GaWVsZChzb3VyY2UuZ2V0SW50
MzJUb0VudW1GaWVsZCgpKQotICAgICAgICAucHV0QWxsSW50MzJUb01lc3NhZ2VGaWVsZChzb3Vy
Y2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpKQotICAgICAgICAucHV0QWxsU3RyaW5nVG9JbnQz
MkZpZWxkKHNvdXJjZS5nZXRTdHJpbmdUb0ludDMyRmllbGQoKSk7Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgYXNzZXJ0TWFwVmFsdWVzU2V0KFRlc3RNYXAgbWVzc2FnZSkgewotICAgIGFzc2VydEVx
dWFscygzLCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxkKCkuc2l6ZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoMTEsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5nZXQoMSkuaW50VmFs
dWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIyLCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxk
KCkuZ2V0KDIpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscygzMywgbWVzc2FnZS5nZXRJ
bnQzMlRvSW50MzJGaWVsZCgpLmdldCgzKS5pbnRWYWx1ZSgpKTsKLQotICAgIGFzc2VydEVxdWFs
cygzLCBtZXNzYWdlLmdldEludDMyVG9TdHJpbmdGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCIxMSIsIG1lc3NhZ2UuZ2V0SW50MzJUb1N0cmluZ0ZpZWxkKCkuZ2V0KDEpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoIjIyIiwgbWVzc2FnZS5nZXRJbnQzMlRvU3RyaW5nRmllbGQoKS5nZXQo
MikpOwotICAgIGFzc2VydEVxdWFscygiMzMiLCBtZXNzYWdlLmdldEludDMyVG9TdHJpbmdGaWVs
ZCgpLmdldCgzKSk7Ci0gICAgCi0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0SW50MzJU
b0J5dGVzRmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0VXRpbC50b0J5dGVz
KCIxMSIpLCBtZXNzYWdlLmdldEludDMyVG9CeXRlc0ZpZWxkKCkuZ2V0KDEpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoVGVzdFV0aWwudG9CeXRlcygiMjIiKSwgbWVzc2FnZS5nZXRJbnQzMlRvQnl0ZXNG
aWVsZCgpLmdldCgyKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RVdGlsLnRvQnl0ZXMoIjMzIiks
IG1lc3NhZ2UuZ2V0SW50MzJUb0J5dGVzRmllbGQoKS5nZXQoMykpOwotICAgIAotICAgIGFzc2Vy
dEVxdWFscygzLCBtZXNzYWdlLmdldEludDMyVG9FbnVtRmllbGQoKS5zaXplKCkpOwotICAgIGFz
c2VydEVxdWFscyhUZXN0TWFwLkVudW1WYWx1ZS5GT08sIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1G
aWVsZCgpLmdldCgxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RNYXAuRW51bVZhbHVlLkJBUiwg
bWVzc2FnZS5nZXRJbnQzMlRvRW51bUZpZWxkKCkuZ2V0KDIpKTsKLSAgICBhc3NlcnRFcXVhbHMo
VGVzdE1hcC5FbnVtVmFsdWUuQkFaLCBtZXNzYWdlLmdldEludDMyVG9FbnVtRmllbGQoKS5nZXQo
MykpOwotICAgIAotICAgIGFzc2VydEVxdWFscygzLCBtZXNzYWdlLmdldEludDMyVG9NZXNzYWdl
RmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygxMSwgbWVzc2FnZS5nZXRJbnQzMlRv
TWVzc2FnZUZpZWxkKCkuZ2V0KDEpLmdldFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscygyMiwg
bWVzc2FnZS5nZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkuZ2V0KDIpLmdldFZhbHVlKCkpOwotICAg
IGFzc2VydEVxdWFscygzMywgbWVzc2FnZS5nZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkuZ2V0KDMp
LmdldFZhbHVlKCkpOwotICAgIAotICAgIGFzc2VydEVxdWFscygzLCBtZXNzYWdlLmdldFN0cmlu
Z1RvSW50MzJGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExLCBtZXNzYWdlLmdl
dFN0cmluZ1RvSW50MzJGaWVsZCgpLmdldCgiMSIpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVx
dWFscygyMiwgbWVzc2FnZS5nZXRTdHJpbmdUb0ludDMyRmllbGQoKS5nZXQoIjIiKS5pbnRWYWx1
ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMzMsIG1lc3NhZ2UuZ2V0U3RyaW5nVG9JbnQzMkZpZWxk
KCkuZ2V0KCIzIikuaW50VmFsdWUoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlTWFw
VmFsdWVzKFRlc3RNYXAuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxl
SW50MzJUb0ludDMyRmllbGQoKS5wdXQoMSwgMTExKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJ
bnQzMlRvSW50MzJGaWVsZCgpLnJlbW92ZSgyKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQz
MlRvSW50MzJGaWVsZCgpLnB1dCg0LCA0NCk7Ci0KLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQz
MlRvU3RyaW5nRmllbGQoKS5wdXQoMSwgIjExMSIpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUlu
dDMyVG9TdHJpbmdGaWVsZCgpLnJlbW92ZSgyKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQz
MlRvU3RyaW5nRmllbGQoKS5wdXQoNCwgIjQ0Iik7Ci0gICAgCi0gICAgYnVpbGRlci5nZXRNdXRh
YmxlSW50MzJUb0J5dGVzRmllbGQoKS5wdXQoMSwgVGVzdFV0aWwudG9CeXRlcygiMTExIikpOwot
ICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9CeXRlc0ZpZWxkKCkucmVtb3ZlKDIpOwotICAg
IGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9CeXRlc0ZpZWxkKCkucHV0KDQsIFRlc3RVdGlsLnRv
Qnl0ZXMoIjQ0IikpOwotICAgIAotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9FbnVtRmll
bGQoKS5wdXQoMSwgVGVzdE1hcC5FbnVtVmFsdWUuQkFSKTsKLSAgICBidWlsZGVyLmdldE11dGFi
bGVJbnQzMlRvRW51bUZpZWxkKCkucmVtb3ZlKDIpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUlu
dDMyVG9FbnVtRmllbGQoKS5wdXQoNCwgVGVzdE1hcC5FbnVtVmFsdWUuUVVYKTsKLSAgICAKLSAg
ICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KAotICAgICAgICAx
LCBNZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDExMSkuYnVpbGQoKSk7Ci0gICAg
YnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb01lc3NhZ2VGaWVsZCgpLnJlbW92ZSgyKTsKLSAgICBi
dWlsZGVyLmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KAotICAgICAgICA0LCBN
ZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDQ0KS5idWlsZCgpKTsKLSAgICAKLSAg
ICBidWlsZGVyLmdldE11dGFibGVTdHJpbmdUb0ludDMyRmllbGQoKS5wdXQoIjEiLCAxMTEpOwot
ICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZVN0cmluZ1RvSW50MzJGaWVsZCgpLnJlbW92ZSgiMiIpOwot
ICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZVN0cmluZ1RvSW50MzJGaWVsZCgpLnB1dCgiNCIsIDQ0KTsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBhc3NlcnRNYXBWYWx1ZXNVcGRhdGVkKFRlc3RNYXAgbWVz
c2FnZSkgewotICAgIGFzc2VydEVxdWFscygzLCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxk
KCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTExLCBtZXNzYWdlLmdldEludDMyVG9JbnQz
MkZpZWxkKCkuZ2V0KDEpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscygzMywgbWVzc2Fn
ZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLmdldCgzKS5pbnRWYWx1ZSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoNDQsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5nZXQoNCkuaW50VmFsdWUo
KSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMywgbWVzc2FnZS5nZXRJbnQzMlRvU3RyaW5nRmllbGQo
KS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygiMTExIiwgbWVzc2FnZS5nZXRJbnQzMlRvU3Ry
aW5nRmllbGQoKS5nZXQoMSkpOwotICAgIGFzc2VydEVxdWFscygiMzMiLCBtZXNzYWdlLmdldElu
dDMyVG9TdHJpbmdGaWVsZCgpLmdldCgzKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0NCIsIG1lc3Nh
Z2UuZ2V0SW50MzJUb1N0cmluZ0ZpZWxkKCkuZ2V0KDQpKTsKLSAgICAKLSAgICBhc3NlcnRFcXVh
bHMoMywgbWVzc2FnZS5nZXRJbnQzMlRvQnl0ZXNGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKFRlc3RVdGlsLnRvQnl0ZXMoIjExMSIpLCBtZXNzYWdlLmdldEludDMyVG9CeXRlc0Zp
ZWxkKCkuZ2V0KDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdFV0aWwudG9CeXRlcygiMzMiKSwg
bWVzc2FnZS5nZXRJbnQzMlRvQnl0ZXNGaWVsZCgpLmdldCgzKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KFRlc3RVdGlsLnRvQnl0ZXMoIjQ0IiksIG1lc3NhZ2UuZ2V0SW50MzJUb0J5dGVzRmllbGQoKS5n
ZXQoNCkpOwotICAgIAotICAgIGFzc2VydEVxdWFscygzLCBtZXNzYWdlLmdldEludDMyVG9FbnVt
RmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0TWFwLkVudW1WYWx1ZS5CQVIs
IG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVsZCgpLmdldCgxKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KFRlc3RNYXAuRW51bVZhbHVlLkJBWiwgbWVzc2FnZS5nZXRJbnQzMlRvRW51bUZpZWxkKCkuZ2V0
KDMpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdE1hcC5FbnVtVmFsdWUuUVVYLCBtZXNzYWdlLmdl
dEludDMyVG9FbnVtRmllbGQoKS5nZXQoNCkpOwotICAgIAotICAgIGFzc2VydEVxdWFscygzLCBt
ZXNzYWdlLmdldEludDMyVG9NZXNzYWdlRmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFs
cygxMTEsIG1lc3NhZ2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpLmdldCgxKS5nZXRWYWx1ZSgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoMzMsIG1lc3NhZ2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgp
LmdldCgzKS5nZXRWYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDQsIG1lc3NhZ2UuZ2V0SW50
MzJUb01lc3NhZ2VGaWVsZCgpLmdldCg0KS5nZXRWYWx1ZSgpKTsKLSAgICAKLSAgICBhc3NlcnRF
cXVhbHMoMywgbWVzc2FnZS5nZXRTdHJpbmdUb0ludDMyRmllbGQoKS5zaXplKCkpOwotICAgIGFz
c2VydEVxdWFscygxMTEsIG1lc3NhZ2UuZ2V0U3RyaW5nVG9JbnQzMkZpZWxkKCkuZ2V0KCIxIiku
aW50VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMzLCBtZXNzYWdlLmdldFN0cmluZ1RvSW50
MzJGaWVsZCgpLmdldCgiMyIpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscyg0NCwgbWVz
c2FnZS5nZXRTdHJpbmdUb0ludDMyRmllbGQoKS5nZXQoIjQiKS5pbnRWYWx1ZSgpKTsKLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBhc3NlcnRNYXBWYWx1ZXNDbGVhcmVkKFRlc3RNYXAgbWVzc2FnZSkg
ewotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxkKCkuc2l6
ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRJbnQzMlRvU3RyaW5nRmllbGQo
KS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEludDMyVG9CeXRlc0Zp
ZWxkKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRJbnQzMlRvRW51
bUZpZWxkKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRJbnQzMlRv
TWVzc2FnZUZpZWxkKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRT
dHJpbmdUb0ludDMyRmllbGQoKS5zaXplKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFNh
bml0eUNvcHlPbldyaXRlKCkgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7
Ci0gICAgLy8gU2luY2UgYnVpbGRlcnMgYXJlIGltcGxlbWVudGVkIGFzIGEgdGhpbiB3cmFwcGVy
IGFyb3VuZCBhIG1lc3NhZ2UKLSAgICAvLyBpbnN0YW5jZSwgd2UgYXR0ZW1wdCB0byB2ZXJpZnkg
dGhhdCB3ZSBjYW4ndCBjYXVzZSB0aGUgYnVpbGRlciB0byBtb2RpZnkKLSAgICAvLyBhIHByb2R1
Y2VkIG1lc3NhZ2UuCi0gICAgCi0gICAgVGVzdE1hcC5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0TWFw
Lm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0TWFwIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgTWFwPEludGVnZXIsIEludGVnZXI+IGludE1hcCA9IGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMy
VG9JbnQzMkZpZWxkKCk7Ci0gICAgaW50TWFwLnB1dCgxLCAyKTsKLSAgICBhc3NlcnRUcnVlKG1l
c3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5pc0VtcHR5KCkpOwotICAgIG1lc3NhZ2UgPSBi
dWlsZGVyLmJ1aWxkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIGludE1hcC5wdXQoMiwgMyk7Ci0gICAg
ICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkg
ewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCAy
KSwgbWVzc2FnZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3
TWFwKDEsIDIpLCBidWlsZGVyLmdldEludDMyVG9JbnQzMkZpZWxkKCkpOwotICAgIGJ1aWxkZXIu
Z2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDIsIDMpOwotICAgIGFzc2VydEVxdWFs
cyhuZXdNYXAoMSwgMiksIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKG5ld01hcCgxLCAyLCAyLCAzKSwgYnVpbGRlci5nZXRJbnQzMlRvSW50MzJGaWVs
ZCgpKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE11dGFibGVNYXBMaWZlY3ljbGUoKSB7
Ci0gICAgVGVzdE1hcC5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0TWFwLm5ld0J1aWxkZXIoKTsKLSAg
ICBNYXA8SW50ZWdlciwgSW50ZWdlcj4gaW50TWFwID0gYnVpbGRlci5nZXRNdXRhYmxlSW50MzJU
b0ludDMyRmllbGQoKTsKLSAgICBpbnRNYXAucHV0KDEsIDIpOwotICAgIGFzc2VydEVxdWFscyhu
ZXdNYXAoMSwgMiksIGJ1aWxkZXIuYnVpbGQoKS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpKTsKLSAg
ICB0cnkgewotICAgICAgaW50TWFwLnB1dCgyLCAzKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNh
dGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3Rl
ZAotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMobmV3TWFwKDEsIDIpLCBidWlsZGVyLmdldEludDMy
VG9JbnQzMkZpZWxkKCkpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxk
KCkucHV0KDIsIDMpOwotICAgIGFzc2VydEVxdWFscyhuZXdNYXAoMSwgMiwgMiwgMyksIGJ1aWxk
ZXIuZ2V0SW50MzJUb0ludDMyRmllbGQoKSk7Ci0KLSAgICBNYXA8SW50ZWdlciwgVGVzdE1hcC5F
bnVtVmFsdWU+IGVudW1NYXAgPSBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvRW51bUZpZWxkKCk7
Ci0gICAgZW51bU1hcC5wdXQoMSwgVGVzdE1hcC5FbnVtVmFsdWUuQkFSKTsKLSAgICBhc3NlcnRF
cXVhbHMobmV3TWFwKDEsIFRlc3RNYXAuRW51bVZhbHVlLkJBUiksIGJ1aWxkZXIuYnVpbGQoKS5n
ZXRJbnQzMlRvRW51bUZpZWxkKCkpOwotICAgIHRyeSB7Ci0gICAgICBlbnVtTWFwLnB1dCgyLCBU
ZXN0TWFwLkVudW1WYWx1ZS5GT08pOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3Vw
cG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQot
ICAgIGFzc2VydEVxdWFscyhuZXdNYXAoMSwgVGVzdE1hcC5FbnVtVmFsdWUuQkFSKSwgYnVpbGRl
ci5nZXRJbnQzMlRvRW51bUZpZWxkKCkpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9F
bnVtRmllbGQoKS5wdXQoMiwgVGVzdE1hcC5FbnVtVmFsdWUuRk9PKTsKLSAgICBhc3NlcnRFcXVh
bHMoCi0gICAgICAgIG5ld01hcCgxLCBUZXN0TWFwLkVudW1WYWx1ZS5CQVIsIDIsIFRlc3RNYXAu
RW51bVZhbHVlLkZPTyksCi0gICAgICAgIGJ1aWxkZXIuZ2V0SW50MzJUb0VudW1GaWVsZCgpKTsK
LSAgICAKLSAgICBNYXA8SW50ZWdlciwgU3RyaW5nPiBzdHJpbmdNYXAgPSBidWlsZGVyLmdldE11
dGFibGVJbnQzMlRvU3RyaW5nRmllbGQoKTsKLSAgICBzdHJpbmdNYXAucHV0KDEsICIxIik7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCAiMSIpLCBidWlsZGVyLmJ1aWxkKCkuZ2V0SW50MzJU
b1N0cmluZ0ZpZWxkKCkpOwotICAgIHRyeSB7Ci0gICAgICBzdHJpbmdNYXAucHV0KDIsICIyIik7
Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRp
b24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01h
cCgxLCAiMSIpLCBidWlsZGVyLmdldEludDMyVG9TdHJpbmdGaWVsZCgpKTsKLSAgICBidWlsZGVy
LmdldE11dGFibGVJbnQzMlRvU3RyaW5nRmllbGQoKS5wdXQoMiwgIjIiKTsKLSAgICBhc3NlcnRF
cXVhbHMoCi0gICAgICAgIG5ld01hcCgxLCAiMSIsIDIsICIyIiksCi0gICAgICAgIGJ1aWxkZXIu
Z2V0SW50MzJUb1N0cmluZ0ZpZWxkKCkpOwotICAgIAotICAgIE1hcDxJbnRlZ2VyLCBUZXN0TWFw
Lk1lc3NhZ2VWYWx1ZT4gbWVzc2FnZU1hcCA9IGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9NZXNz
YWdlRmllbGQoKTsKLSAgICBtZXNzYWdlTWFwLnB1dCgxLCBUZXN0TWFwLk1lc3NhZ2VWYWx1ZS5n
ZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCBUZXN0TWFw
Lk1lc3NhZ2VWYWx1ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSksCi0gICAgICAgIGJ1aWxkZXIuYnVp
bGQoKS5nZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkpOwotICAgIHRyeSB7Ci0gICAgICBtZXNzYWdl
TWFwLnB1dCgyLCBUZXN0TWFwLk1lc3NhZ2VWYWx1ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0g
ICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24g
ZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgx
LCBUZXN0TWFwLk1lc3NhZ2VWYWx1ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSksCi0gICAgICAgIGJ1
aWxkZXIuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJ
bnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KDIsIFRlc3RNYXAuTWVzc2FnZVZhbHVlLmdldERlZmF1
bHRJbnN0YW5jZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIG5ld01hcCgxLCBUZXN0
TWFwLk1lc3NhZ2VWYWx1ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAgICAgIDIsIFRl
c3RNYXAuTWVzc2FnZVZhbHVlLmdldERlZmF1bHRJbnN0YW5jZSgpKSwKLSAgICAgICAgYnVpbGRl
ci5nZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE11
dGFibGVNYXBMaWZlY3ljbGVfY29sbGVjdGlvbnMoKSB7Ci0gICAgVGVzdE1hcC5CdWlsZGVyIGJ1
aWxkZXIgPSBUZXN0TWFwLm5ld0J1aWxkZXIoKTsKLSAgICBNYXA8SW50ZWdlciwgSW50ZWdlcj4g
aW50TWFwID0gYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKTsKLSAgICBpbnRN
YXAucHV0KDEsIDIpOwotICAgIGFzc2VydEVxdWFscyhuZXdNYXAoMSwgMiksIGJ1aWxkZXIuYnVp
bGQoKS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpKTsKLSAgICB0cnkgewotICAgICAgaW50TWFwLnJl
bW92ZSgyKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlv
bkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICB0cnkgewotICAg
ICAgaW50TWFwLmVudHJ5U2V0KCkucmVtb3ZlKG5ldyBPYmplY3QoKSk7Ci0gICAgICBmYWlsKCk7
Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAg
Ly8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIGludE1hcC5lbnRyeVNldCgpLml0
ZXJhdG9yKCkucmVtb3ZlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0
ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAg
dHJ5IHsKLSAgICAgIGludE1hcC5rZXlTZXQoKS5yZW1vdmUobmV3IE9iamVjdCgpKTsKLSAgICAg
IGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICB0cnkgewotICAgICAgaW50TWFwLnZhbHVl
cygpLnJlbW92ZShuZXcgT2JqZWN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVu
c3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAg
fQotICAgIHRyeSB7Ci0gICAgICBpbnRNYXAudmFsdWVzKCkuaXRlcmF0b3IoKS5yZW1vdmUoKTsK
LSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlv
biBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMobmV3TWFw
KDEsIDIpLCBpbnRNYXApOwotICAgIGFzc2VydEVxdWFscyhuZXdNYXAoMSwgMiksIGJ1aWxkZXIu
Z2V0SW50MzJUb0ludDMyRmllbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCAyKSwg
YnVpbGRlci5idWlsZCgpLmdldEludDMyVG9JbnQzMkZpZWxkKCkpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgdGVzdEdldHRlcnNBbmRTZXR0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVz
dE1hcC5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0TWFwLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0TWFw
IG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzQ2xlYXJlZCht
ZXNzYWdlKTsKLSAgICAKLSAgICBidWlsZGVyID0gbWVzc2FnZS50b0J1aWxkZXIoKTsKLSAgICBz
ZXRNYXBWYWx1ZXMoYnVpbGRlcik7Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAg
ICBhc3NlcnRNYXBWYWx1ZXNTZXQobWVzc2FnZSk7Ci0gICAgCi0gICAgYnVpbGRlciA9IG1lc3Nh
Z2UudG9CdWlsZGVyKCk7Ci0gICAgdXBkYXRlTWFwVmFsdWVzKGJ1aWxkZXIpOwotICAgIG1lc3Nh
Z2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzVXBkYXRlZChtZXNzYWdl
KTsKLSAgICAKLSAgICBidWlsZGVyID0gbWVzc2FnZS50b0J1aWxkZXIoKTsKLSAgICBidWlsZGVy
LmNsZWFyKCk7Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRNYXBW
YWx1ZXNDbGVhcmVkKG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFB1dEFsbCgp
IHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RNYXAuQnVpbGRlciBzb3VyY2VCdWlsZGVyID0g
VGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAgc2V0TWFwVmFsdWVzKHNvdXJjZUJ1aWxkZXIpOwot
ICAgIFRlc3RNYXAgc291cmNlID0gc291cmNlQnVpbGRlci5idWlsZCgpOwotCi0gICAgVGVzdE1h
cC5CdWlsZGVyIGRlc3RpbmF0aW9uID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAgY29weU1h
cFZhbHVlcyhzb3VyY2UsIGRlc3RpbmF0aW9uKTsKLSAgICBhc3NlcnRNYXBWYWx1ZXNTZXQoZGVz
dGluYXRpb24uYnVpbGQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXplQW5k
UGFyc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TWFwLkJ1aWxkZXIgYnVpbGRlciA9
IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAgIHNldE1hcFZhbHVlcyhidWlsZGVyKTsKLSAgICBU
ZXN0TWFwIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1lc3Nh
Z2UuZ2V0U2VyaWFsaXplZFNpemUoKSwgbWVzc2FnZS50b0J5dGVTdHJpbmcoKS5zaXplKCkpOwot
ICAgIG1lc3NhZ2UgPSBUZXN0TWFwLnBhcnNlcigpLnBhcnNlRnJvbShtZXNzYWdlLnRvQnl0ZVN0
cmluZygpKTsKLSAgICBhc3NlcnRNYXBWYWx1ZXNTZXQobWVzc2FnZSk7Ci0gICAgCi0gICAgYnVp
bGRlciA9IG1lc3NhZ2UudG9CdWlsZGVyKCk7Ci0gICAgdXBkYXRlTWFwVmFsdWVzKGJ1aWxkZXIp
OwotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1lc3Nh
Z2UuZ2V0U2VyaWFsaXplZFNpemUoKSwgbWVzc2FnZS50b0J5dGVTdHJpbmcoKS5zaXplKCkpOwot
ICAgIG1lc3NhZ2UgPSBUZXN0TWFwLnBhcnNlcigpLnBhcnNlRnJvbShtZXNzYWdlLnRvQnl0ZVN0
cmluZygpKTsKLSAgICBhc3NlcnRNYXBWYWx1ZXNVcGRhdGVkKG1lc3NhZ2UpOwotICAgIAotICAg
IGJ1aWxkZXIgPSBtZXNzYWdlLnRvQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuY2xlYXIoKTsKLSAg
ICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmdl
dFNlcmlhbGl6ZWRTaXplKCksIG1lc3NhZ2UudG9CeXRlU3RyaW5nKCkuc2l6ZSgpKTsKLSAgICBt
ZXNzYWdlID0gVGVzdE1hcC5wYXJzZXIoKS5wYXJzZUZyb20obWVzc2FnZS50b0J5dGVTdHJpbmco
KSk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzQ2xlYXJlZChtZXNzYWdlKTsKLSAgfQotICAKLSAgcHVi
bGljIHZvaWQgdGVzdE1lcmdlRnJvbSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RNYXAu
QnVpbGRlciBidWlsZGVyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAgc2V0TWFwVmFsdWVz
KGJ1aWxkZXIpOwotICAgIFRlc3RNYXAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICAK
LSAgICBUZXN0TWFwLkJ1aWxkZXIgb3RoZXIgPSBUZXN0TWFwLm5ld0J1aWxkZXIoKTsKLSAgICBv
dGhlci5tZXJnZUZyb20obWVzc2FnZSk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzU2V0KG90aGVyLmJ1
aWxkKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEVxdWFsc0FuZEhhc2hDb2RlKCkgdGhy
b3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gVGVzdCB0aGF0IGdlbmVyYXRlZCBlcXVhbHMoKSBhbmQg
aGFzaENvZGUoKSB3aWxsIGRpc3JlZ2FyZCB0aGUgb3JkZXIKLSAgICAvLyBvZiBtYXAgZW50cmll
cyB3aGVuIGNvbXBhcmluZy9oYXNoaW5nIG1hcCBmaWVsZHMuCi0gICAgCi0gICAgLy8gV2UgY2Fu
J3QgY29udHJvbCB0aGUgb3JkZXIgb2YgZWxlbWVudHMgaW4gYSBIYXNoTWFwLiBUaGUgYmVzdCB3
ZSBjYW4gZG8KLSAgICAvLyBoZXJlIGlzIHRvIGFkZCBlbGVtZW50cyBpbiBkaWZmZXJlbnQgb3Jk
ZXIuCi0gICAgVGVzdE1hcC5CdWlsZGVyIGIxID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAg
YjEuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDEsIDIpOwotICAgIGIxLmdldE11
dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCgzLCA0KTsKLSAgICBiMS5nZXRNdXRhYmxlSW50
MzJUb0ludDMyRmllbGQoKS5wdXQoNSwgNik7Ci0gICAgVGVzdE1hcCBtMSA9IGIxLmJ1aWxkKCk7
Ci0gICAgCi0gICAgVGVzdE1hcC5CdWlsZGVyIGIyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0g
ICAgYjIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDUsIDYpOwotICAgIGIyLmdl
dE11dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCgxLCAyKTsKLSAgICBiMi5nZXRNdXRhYmxl
SW50MzJUb0ludDMyRmllbGQoKS5wdXQoMywgNCk7Ci0gICAgVGVzdE1hcCBtMiA9IGIyLmJ1aWxk
KCk7Ci0gICAgCi0gICAgYXNzZXJ0RXF1YWxzKG0xLCBtMik7Ci0gICAgYXNzZXJ0RXF1YWxzKG0x
Lmhhc2hDb2RlKCksIG0yLmhhc2hDb2RlKCkpOwotICAgIAotICAgIC8vIE1ha2Ugc3VyZSB3ZSBk
aWQgY29tcGFyZSBtYXAgZmllbGRzLgotICAgIGIyLmdldE11dGFibGVJbnQzMlRvSW50MzJGaWVs
ZCgpLnB1dCgxLCAwKTsKLSAgICBtMiA9IGIyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2UobTEu
ZXF1YWxzKG0yKSk7Ci0gICAgLy8gRG9uJ3QgY2hlY2sgbTEuaGFzaENvZGUoKSAhPSBtMi5oYXNo
Q29kZSgpIGJlY2F1c2UgaXQncyBub3QgZ3VhcmFudGVlZAotICAgIC8vIHRvIGJlIGRpZmZlcmVu
dC4KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmtub3duRW51bVZhbHVlcygpIHRocm93cyBF
eGNlcHRpb24gewotICAgIFRlc3RVbmtub3duRW51bVZhbHVlLkJ1aWxkZXIgYnVpbGRlciA9Ci0g
ICAgICAgIFRlc3RVbmtub3duRW51bVZhbHVlLm5ld0J1aWxkZXIoKTsKLSAgICBidWlsZGVyLmdl
dE11dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCgxLCAxKTsKLSAgICBidWlsZGVyLmdldE11
dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCgyLCA1NDMyMSk7Ci0gICAgQnl0ZVN0cmluZyBk
YXRhID0gYnVpbGRlci5idWlsZCgpLnRvQnl0ZVN0cmluZygpOwotCi0gICAgVGVzdE1hcCBtZXNz
YWdlID0gVGVzdE1hcC5wYXJzZUZyb20oZGF0YSk7Ci0gICAgLy8gRW50cmllcyB3aXRoIHVua25v
d24gZW51bSB2YWx1ZXMgd2lsbCBiZSBzdG9yZWQgaW50byBVbmtub3duRmllbGRTZXQgc28KLSAg
ICAvLyB0aGVyZSBpcyBvbmx5IG9uZSBlbnRyeSBpbiB0aGUgbWFwLgotICAgIGFzc2VydEVxdWFs
cygxLCBtZXNzYWdlLmdldEludDMyVG9FbnVtRmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVx
dWFscyhUZXN0TWFwLkVudW1WYWx1ZS5CQVIsIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVsZCgp
LmdldCgxKSk7Ci0gICAgLy8gU2VyaWFsaXppbmcgYW5kIHBhcnNpbmcgc2hvdWxkIHByZXNlcnZl
IHRoZSB1bmtub3duIGVudHJ5LgotICAgIGRhdGEgPSBtZXNzYWdlLnRvQnl0ZVN0cmluZygpOwot
ICAgIFRlc3RVbmtub3duRW51bVZhbHVlIG1lc3NhZ2VXaXRoVW5rbm93bkVudW1zID0KLSAgICAg
ICAgVGVzdFVua25vd25FbnVtVmFsdWUucGFyc2VGcm9tKGRhdGEpOwotICAgIGFzc2VydEVxdWFs
cygyLCBtZXNzYWdlV2l0aFVua25vd25FbnVtcy5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLnNpemUo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1lc3NhZ2VXaXRoVW5rbm93bkVudW1zLmdldEludDMy
VG9JbnQzMkZpZWxkKCkuZ2V0KDEpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscyg1NDMy
MSwgbWVzc2FnZVdpdGhVbmtub3duRW51bXMuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5nZXQoMiku
aW50VmFsdWUoKSk7Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJdGVyYXRpb25PcmRlcigp
IHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1h
cC5uZXdCdWlsZGVyKCk7Ci0gICAgc2V0TWFwVmFsdWVzKGJ1aWxkZXIpOwotICAgIFRlc3RNYXAg
bWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLQotICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNM
aXN0KCIxIiwgIjIiLCAiMyIpLAotICAgICAgICBuZXcgQXJyYXlMaXN0PFN0cmluZz4obWVzc2Fn
ZS5nZXRTdHJpbmdUb0ludDMyRmllbGQoKS5rZXlTZXQoKSkpOwotICB9Ci0gIAotICBwcml2YXRl
IHN0YXRpYyA8SywgVj4gTWFwPEssIFY+IG5ld01hcChLIGtleTEsIFYgdmFsdWUxKSB7Ci0gICAg
TWFwPEssIFY+IG1hcCA9IG5ldyBIYXNoTWFwPEssIFY+KCk7Ci0gICAgbWFwLnB1dChrZXkxLCB2
YWx1ZTEpOwotICAgIHJldHVybiBtYXA7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIDxLLCBW
PiBNYXA8SywgVj4gbmV3TWFwKEsga2V5MSwgViB2YWx1ZTEsIEsga2V5MiwgViB2YWx1ZTIpIHsK
LSAgICBNYXA8SywgVj4gbWFwID0gbmV3IEhhc2hNYXA8SywgVj4oKTsKLSAgICBtYXAucHV0KGtl
eTEsIHZhbHVlMSk7Ci0gICAgbWFwLnB1dChrZXkyLCB2YWx1ZTIpOwotICAgIHJldHVybiBtYXA7
Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9NYXBGb3JQcm90bzJUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvTWFwRm9yUHJvdG8yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3MzE1NGMwZmNiMzMzYzIyMzc4Zjk4MWRiMWYwZjc4NTM3YTdjZDk3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NYXBGb3JQcm90bzJUZXN0LmphdmEKKysr
IC9kZXYvbnVsbApAQCAtMSw2ODMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGNvbS5nb29n
bGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yOwotaW1wb3J0IG1hcF90ZXN0
Lk1hcEZvclByb3RvMlRlc3RQcm90by5UZXN0TWFwOwotaW1wb3J0IG1hcF90ZXN0Lk1hcEZvclBy
b3RvMlRlc3RQcm90by5UZXN0TWFwLk1lc3NhZ2VWYWx1ZTsKLWltcG9ydCBtYXBfdGVzdC5NYXBG
b3JQcm90bzJUZXN0UHJvdG8uVGVzdE1hcC5NZXNzYWdlV2l0aFJlcXVpcmVkRmllbGRzOwotaW1w
b3J0IG1hcF90ZXN0Lk1hcEZvclByb3RvMlRlc3RQcm90by5UZXN0UmVjdXJzaXZlTWFwOwotaW1w
b3J0IG1hcF90ZXN0Lk1hcEZvclByb3RvMlRlc3RQcm90by5UZXN0VW5rbm93bkVudW1WYWx1ZTsK
LWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJy
YXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hN
YXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoq
Ci0gKiBVbml0IHRlc3RzIGZvciBtYXAgZmllbGRzIGluIHByb3RvMiBwcm90b3MuCi0gKi8KLXB1
YmxpYyBjbGFzcyBNYXBGb3JQcm90bzJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotICBwcml2YXRl
IHZvaWQgc2V0TWFwVmFsdWVzKFRlc3RNYXAuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgYnVpbGRl
ci5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMSwgMTEpOwotICAgIGJ1aWxkZXIu
Z2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDIsIDIyKTsKLSAgICBidWlsZGVyLmdl
dE11dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCgzLCAzMyk7Ci0KLSAgICBidWlsZGVyLmdl
dE11dGFibGVJbnQzMlRvU3RyaW5nRmllbGQoKS5wdXQoMSwgIjExIik7Ci0gICAgYnVpbGRlci5n
ZXRNdXRhYmxlSW50MzJUb1N0cmluZ0ZpZWxkKCkucHV0KDIsICIyMiIpOwotICAgIGJ1aWxkZXIu
Z2V0TXV0YWJsZUludDMyVG9TdHJpbmdGaWVsZCgpLnB1dCgzLCAiMzMiKTsKLSAgICAKLSAgICBi
dWlsZGVyLmdldE11dGFibGVJbnQzMlRvQnl0ZXNGaWVsZCgpLnB1dCgxLCBUZXN0VXRpbC50b0J5
dGVzKCIxMSIpKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvQnl0ZXNGaWVsZCgpLnB1
dCgyLCBUZXN0VXRpbC50b0J5dGVzKCIyMiIpKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQz
MlRvQnl0ZXNGaWVsZCgpLnB1dCgzLCBUZXN0VXRpbC50b0J5dGVzKCIzMyIpKTsKLSAgICAKLSAg
ICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvRW51bUZpZWxkKCkucHV0KDEsIFRlc3RNYXAuRW51
bVZhbHVlLkZPTyk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0VudW1GaWVsZCgpLnB1
dCgyLCBUZXN0TWFwLkVudW1WYWx1ZS5CQVIpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMy
VG9FbnVtRmllbGQoKS5wdXQoMywgVGVzdE1hcC5FbnVtVmFsdWUuQkFaKTsKLSAgICAKLSAgICBi
dWlsZGVyLmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KAotICAgICAgICAxLCBN
ZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDExKS5idWlsZCgpKTsKLSAgICBidWls
ZGVyLmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KAotICAgICAgICAyLCBNZXNz
YWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDIyKS5idWlsZCgpKTsKLSAgICBidWlsZGVy
LmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KAotICAgICAgICAzLCBNZXNzYWdl
VmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDMzKS5idWlsZCgpKTsKLSAgICAKLSAgICBidWls
ZGVyLmdldE11dGFibGVTdHJpbmdUb0ludDMyRmllbGQoKS5wdXQoIjEiLCAxMSk7Ci0gICAgYnVp
bGRlci5nZXRNdXRhYmxlU3RyaW5nVG9JbnQzMkZpZWxkKCkucHV0KCIyIiwgMjIpOwotICAgIGJ1
aWxkZXIuZ2V0TXV0YWJsZVN0cmluZ1RvSW50MzJGaWVsZCgpLnB1dCgiMyIsIDMzKTsKLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBjb3B5TWFwVmFsdWVzKFRlc3RNYXAgc291cmNlLCBUZXN0TWFwLkJ1
aWxkZXIgZGVzdGluYXRpb24pIHsKLSAgICBkZXN0aW5hdGlvbgotICAgICAgICAucHV0QWxsSW50
MzJUb0ludDMyRmllbGQoc291cmNlLmdldEludDMyVG9JbnQzMkZpZWxkKCkpCi0gICAgICAgIC5w
dXRBbGxJbnQzMlRvU3RyaW5nRmllbGQoc291cmNlLmdldEludDMyVG9TdHJpbmdGaWVsZCgpKQot
ICAgICAgICAucHV0QWxsSW50MzJUb0J5dGVzRmllbGQoc291cmNlLmdldEludDMyVG9CeXRlc0Zp
ZWxkKCkpCi0gICAgICAgIC5wdXRBbGxJbnQzMlRvRW51bUZpZWxkKHNvdXJjZS5nZXRJbnQzMlRv
RW51bUZpZWxkKCkpCi0gICAgICAgIC5wdXRBbGxJbnQzMlRvTWVzc2FnZUZpZWxkKHNvdXJjZS5n
ZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkpCi0gICAgICAgIC5wdXRBbGxTdHJpbmdUb0ludDMyRmll
bGQoc291cmNlLmdldFN0cmluZ1RvSW50MzJGaWVsZCgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBhc3NlcnRNYXBWYWx1ZXNTZXQoVGVzdE1hcCBtZXNzYWdlKSB7Ci0gICAgYXNzZXJ0RXF1YWxz
KDMsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVx
dWFscygxMSwgbWVzc2FnZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLmdldCgxKS5pbnRWYWx1ZSgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoMjIsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5n
ZXQoMikuaW50VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMzLCBtZXNzYWdlLmdldEludDMy
VG9JbnQzMkZpZWxkKCkuZ2V0KDMpLmludFZhbHVlKCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDMs
IG1lc3NhZ2UuZ2V0SW50MzJUb1N0cmluZ0ZpZWxkKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoIjExIiwgbWVzc2FnZS5nZXRJbnQzMlRvU3RyaW5nRmllbGQoKS5nZXQoMSkpOwotICAgIGFz
c2VydEVxdWFscygiMjIiLCBtZXNzYWdlLmdldEludDMyVG9TdHJpbmdGaWVsZCgpLmdldCgyKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCIzMyIsIG1lc3NhZ2UuZ2V0SW50MzJUb1N0cmluZ0ZpZWxkKCku
Z2V0KDMpKTsKLSAgICAKLSAgICBhc3NlcnRFcXVhbHMoMywgbWVzc2FnZS5nZXRJbnQzMlRvQnl0
ZXNGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RVdGlsLnRvQnl0ZXMoIjEx
IiksIG1lc3NhZ2UuZ2V0SW50MzJUb0J5dGVzRmllbGQoKS5nZXQoMSkpOwotICAgIGFzc2VydEVx
dWFscyhUZXN0VXRpbC50b0J5dGVzKCIyMiIpLCBtZXNzYWdlLmdldEludDMyVG9CeXRlc0ZpZWxk
KCkuZ2V0KDIpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdFV0aWwudG9CeXRlcygiMzMiKSwgbWVz
c2FnZS5nZXRJbnQzMlRvQnl0ZXNGaWVsZCgpLmdldCgzKSk7Ci0gICAgCi0gICAgYXNzZXJ0RXF1
YWxzKDMsIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKFRlc3RNYXAuRW51bVZhbHVlLkZPTywgbWVzc2FnZS5nZXRJbnQzMlRvRW51bUZpZWxk
KCkuZ2V0KDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdE1hcC5FbnVtVmFsdWUuQkFSLCBtZXNz
YWdlLmdldEludDMyVG9FbnVtRmllbGQoKS5nZXQoMikpOwotICAgIGFzc2VydEVxdWFscyhUZXN0
TWFwLkVudW1WYWx1ZS5CQVosIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVsZCgpLmdldCgzKSk7
Ci0gICAgCi0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVs
ZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExLCBtZXNzYWdlLmdldEludDMyVG9NZXNz
YWdlRmllbGQoKS5nZXQoMSkuZ2V0VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIyLCBtZXNz
YWdlLmdldEludDMyVG9NZXNzYWdlRmllbGQoKS5nZXQoMikuZ2V0VmFsdWUoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDMzLCBtZXNzYWdlLmdldEludDMyVG9NZXNzYWdlRmllbGQoKS5nZXQoMykuZ2V0
VmFsdWUoKSk7Ci0gICAgCi0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0U3RyaW5nVG9J
bnQzMkZpZWxkKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTEsIG1lc3NhZ2UuZ2V0U3Ry
aW5nVG9JbnQzMkZpZWxkKCkuZ2V0KCIxIikuaW50VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDIyLCBtZXNzYWdlLmdldFN0cmluZ1RvSW50MzJGaWVsZCgpLmdldCgiMiIpLmludFZhbHVlKCkp
OwotICAgIGFzc2VydEVxdWFscygzMywgbWVzc2FnZS5nZXRTdHJpbmdUb0ludDMyRmllbGQoKS5n
ZXQoIjMiKS5pbnRWYWx1ZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVNYXBWYWx1
ZXMoVGVzdE1hcC5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQz
MlRvSW50MzJGaWVsZCgpLnB1dCgxLCAxMTEpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMy
VG9JbnQzMkZpZWxkKCkucmVtb3ZlKDIpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9J
bnQzMkZpZWxkKCkucHV0KDQsIDQ0KTsKLQotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9T
dHJpbmdGaWVsZCgpLnB1dCgxLCAiMTExIik7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJU
b1N0cmluZ0ZpZWxkKCkucmVtb3ZlKDIpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9T
dHJpbmdGaWVsZCgpLnB1dCg0LCAiNDQiKTsKLSAgICAKLSAgICBidWlsZGVyLmdldE11dGFibGVJ
bnQzMlRvQnl0ZXNGaWVsZCgpLnB1dCgxLCBUZXN0VXRpbC50b0J5dGVzKCIxMTEiKSk7Ci0gICAg
YnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0J5dGVzRmllbGQoKS5yZW1vdmUoMik7Ci0gICAgYnVp
bGRlci5nZXRNdXRhYmxlSW50MzJUb0J5dGVzRmllbGQoKS5wdXQoNCwgVGVzdFV0aWwudG9CeXRl
cygiNDQiKSk7Ci0gICAgCi0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0VudW1GaWVsZCgp
LnB1dCgxLCBUZXN0TWFwLkVudW1WYWx1ZS5CQVIpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUlu
dDMyVG9FbnVtRmllbGQoKS5yZW1vdmUoMik7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJU
b0VudW1GaWVsZCgpLnB1dCg0LCBUZXN0TWFwLkVudW1WYWx1ZS5RVVgpOwotICAgIAotICAgIGJ1
aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9NZXNzYWdlRmllbGQoKS5wdXQoCi0gICAgICAgIDEsIE1l
c3NhZ2VWYWx1ZS5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoMTExKS5idWlsZCgpKTsKLSAgICBidWls
ZGVyLmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucmVtb3ZlKDIpOwotICAgIGJ1aWxk
ZXIuZ2V0TXV0YWJsZUludDMyVG9NZXNzYWdlRmllbGQoKS5wdXQoCi0gICAgICAgIDQsIE1lc3Nh
Z2VWYWx1ZS5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoNDQpLmJ1aWxkKCkpOwotICAgIAotICAgIGJ1
aWxkZXIuZ2V0TXV0YWJsZVN0cmluZ1RvSW50MzJGaWVsZCgpLnB1dCgiMSIsIDExMSk7Ci0gICAg
YnVpbGRlci5nZXRNdXRhYmxlU3RyaW5nVG9JbnQzMkZpZWxkKCkucmVtb3ZlKCIyIik7Ci0gICAg
YnVpbGRlci5nZXRNdXRhYmxlU3RyaW5nVG9JbnQzMkZpZWxkKCkucHV0KCI0IiwgNDQpOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIGFzc2VydE1hcFZhbHVlc1VwZGF0ZWQoVGVzdE1hcCBtZXNzYWdl
KSB7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5z
aXplKCkpOwotICAgIGFzc2VydEVxdWFscygxMTEsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmll
bGQoKS5nZXQoMSkuaW50VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMzLCBtZXNzYWdlLmdl
dEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0KDMpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFs
cyg0NCwgbWVzc2FnZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLmdldCg0KS5pbnRWYWx1ZSgpKTsK
LQotICAgIGFzc2VydEVxdWFscygzLCBtZXNzYWdlLmdldEludDMyVG9TdHJpbmdGaWVsZCgpLnNp
emUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxMTEiLCBtZXNzYWdlLmdldEludDMyVG9TdHJpbmdG
aWVsZCgpLmdldCgxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIzMyIsIG1lc3NhZ2UuZ2V0SW50MzJU
b1N0cmluZ0ZpZWxkKCkuZ2V0KDMpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjQ0IiwgbWVzc2FnZS5n
ZXRJbnQzMlRvU3RyaW5nRmllbGQoKS5nZXQoNCkpOwotICAgIAotICAgIGFzc2VydEVxdWFscygz
LCBtZXNzYWdlLmdldEludDMyVG9CeXRlc0ZpZWxkKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoVGVzdFV0aWwudG9CeXRlcygiMTExIiksIG1lc3NhZ2UuZ2V0SW50MzJUb0J5dGVzRmllbGQo
KS5nZXQoMSkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0VXRpbC50b0J5dGVzKCIzMyIpLCBtZXNz
YWdlLmdldEludDMyVG9CeXRlc0ZpZWxkKCkuZ2V0KDMpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVz
dFV0aWwudG9CeXRlcygiNDQiKSwgbWVzc2FnZS5nZXRJbnQzMlRvQnl0ZXNGaWVsZCgpLmdldCg0
KSk7Ci0gICAgCi0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVs
ZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RNYXAuRW51bVZhbHVlLkJBUiwgbWVz
c2FnZS5nZXRJbnQzMlRvRW51bUZpZWxkKCkuZ2V0KDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVz
dE1hcC5FbnVtVmFsdWUuQkFaLCBtZXNzYWdlLmdldEludDMyVG9FbnVtRmllbGQoKS5nZXQoMykp
OwotICAgIGFzc2VydEVxdWFscyhUZXN0TWFwLkVudW1WYWx1ZS5RVVgsIG1lc3NhZ2UuZ2V0SW50
MzJUb0VudW1GaWVsZCgpLmdldCg0KSk7Ci0gICAgCi0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3Nh
Z2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEx
MSwgbWVzc2FnZS5nZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkuZ2V0KDEpLmdldFZhbHVlKCkpOwot
ICAgIGFzc2VydEVxdWFscygzMywgbWVzc2FnZS5nZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkuZ2V0
KDMpLmdldFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscyg0NCwgbWVzc2FnZS5nZXRJbnQzMlRv
TWVzc2FnZUZpZWxkKCkuZ2V0KDQpLmdldFZhbHVlKCkpOwotICAgIAotICAgIGFzc2VydEVxdWFs
cygzLCBtZXNzYWdlLmdldFN0cmluZ1RvSW50MzJGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDExMSwgbWVzc2FnZS5nZXRTdHJpbmdUb0ludDMyRmllbGQoKS5nZXQoIjEiKS5pbnRW
YWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMzMsIG1lc3NhZ2UuZ2V0U3RyaW5nVG9JbnQzMkZp
ZWxkKCkuZ2V0KCIzIikuaW50VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ0LCBtZXNzYWdl
LmdldFN0cmluZ1RvSW50MzJGaWVsZCgpLmdldCgiNCIpLmludFZhbHVlKCkpOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIGFzc2VydE1hcFZhbHVlc0NsZWFyZWQoVGVzdE1hcCBtZXNzYWdlKSB7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5zaXplKCkp
OwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEludDMyVG9TdHJpbmdGaWVsZCgpLnNp
emUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0SW50MzJUb0J5dGVzRmllbGQo
KS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEludDMyVG9FbnVtRmll
bGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEludDMyVG9NZXNz
YWdlRmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFN0cmlu
Z1RvSW50MzJGaWVsZCgpLnNpemUoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RNdXRh
YmxlTWFwTGlmZWN5Y2xlKCkgewotICAgIFRlc3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1h
cC5uZXdCdWlsZGVyKCk7Ci0gICAgTWFwPEludGVnZXIsIEludGVnZXI+IGludE1hcCA9IGJ1aWxk
ZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCk7Ci0gICAgaW50TWFwLnB1dCgxLCAyKTsK
LSAgICBhc3NlcnRFcXVhbHMobmV3TWFwKDEsIDIpLCBidWlsZGVyLmJ1aWxkKCkuZ2V0SW50MzJU
b0ludDMyRmllbGQoKSk7Ci0gICAgdHJ5IHsKLSAgICAgIGludE1hcC5wdXQoMiwgMyk7Ci0gICAg
ICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkg
ewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCAy
KSwgYnVpbGRlci5nZXRJbnQzMlRvSW50MzJGaWVsZCgpKTsKLSAgICBidWlsZGVyLmdldE11dGFi
bGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCgyLCAzKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3TWFw
KDEsIDIsIDIsIDMpLCBidWlsZGVyLmdldEludDMyVG9JbnQzMkZpZWxkKCkpOwotCi0gICAgTWFw
PEludGVnZXIsIFRlc3RNYXAuRW51bVZhbHVlPiBlbnVtTWFwID0gYnVpbGRlci5nZXRNdXRhYmxl
SW50MzJUb0VudW1GaWVsZCgpOwotICAgIGVudW1NYXAucHV0KDEsIFRlc3RNYXAuRW51bVZhbHVl
LkJBUik7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCBUZXN0TWFwLkVudW1WYWx1ZS5CQVIp
LCBidWlsZGVyLmJ1aWxkKCkuZ2V0SW50MzJUb0VudW1GaWVsZCgpKTsKLSAgICB0cnkgewotICAg
ICAgZW51bU1hcC5wdXQoMiwgVGVzdE1hcC5FbnVtVmFsdWUuRk9PKTsKLSAgICAgIGZhaWwoKTsK
LSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBleHBlY3RlZAotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMobmV3TWFwKDEsIFRlc3RNYXAuRW51
bVZhbHVlLkJBUiksIGJ1aWxkZXIuZ2V0SW50MzJUb0VudW1GaWVsZCgpKTsKLSAgICBidWlsZGVy
LmdldE11dGFibGVJbnQzMlRvRW51bUZpZWxkKCkucHV0KDIsIFRlc3RNYXAuRW51bVZhbHVlLkZP
Tyk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBuZXdNYXAoMSwgVGVzdE1hcC5FbnVtVmFs
dWUuQkFSLCAyLCBUZXN0TWFwLkVudW1WYWx1ZS5GT08pLAotICAgICAgICBidWlsZGVyLmdldElu
dDMyVG9FbnVtRmllbGQoKSk7Ci0gICAgCi0gICAgTWFwPEludGVnZXIsIFN0cmluZz4gc3RyaW5n
TWFwID0gYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb1N0cmluZ0ZpZWxkKCk7Ci0gICAgc3RyaW5n
TWFwLnB1dCgxLCAiMSIpOwotICAgIGFzc2VydEVxdWFscyhuZXdNYXAoMSwgIjEiKSwgYnVpbGRl
ci5idWlsZCgpLmdldEludDMyVG9TdHJpbmdGaWVsZCgpKTsKLSAgICB0cnkgewotICAgICAgc3Ry
aW5nTWFwLnB1dCgyLCAiMiIpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9y
dGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAg
IGFzc2VydEVxdWFscyhuZXdNYXAoMSwgIjEiKSwgYnVpbGRlci5nZXRJbnQzMlRvU3RyaW5nRmll
bGQoKSk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb1N0cmluZ0ZpZWxkKCkucHV0KDIs
ICIyIik7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBuZXdNYXAoMSwgIjEiLCAyLCAiMiIp
LAotICAgICAgICBidWlsZGVyLmdldEludDMyVG9TdHJpbmdGaWVsZCgpKTsKLSAgICAKLSAgICBN
YXA8SW50ZWdlciwgVGVzdE1hcC5NZXNzYWdlVmFsdWU+IG1lc3NhZ2VNYXAgPSBidWlsZGVyLmdl
dE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCk7Ci0gICAgbWVzc2FnZU1hcC5wdXQoMSwgVGVz
dE1hcC5NZXNzYWdlVmFsdWUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICAgIGFzc2VydEVxdWFs
cyhuZXdNYXAoMSwgVGVzdE1hcC5NZXNzYWdlVmFsdWUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpLAot
ICAgICAgICBidWlsZGVyLmJ1aWxkKCkuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpKTsKLSAgICB0
cnkgewotICAgICAgbWVzc2FnZU1hcC5wdXQoMiwgVGVzdE1hcC5NZXNzYWdlVmFsdWUuZ2V0RGVm
YXVsdEluc3RhbmNlKCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIGFz
c2VydEVxdWFscyhuZXdNYXAoMSwgVGVzdE1hcC5NZXNzYWdlVmFsdWUuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkpLAotICAgICAgICBidWlsZGVyLmdldEludDMyVG9NZXNzYWdlRmllbGQoKSk7Ci0gICAg
YnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb01lc3NhZ2VGaWVsZCgpLnB1dCgyLCBUZXN0TWFwLk1l
c3NhZ2VWYWx1ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAg
ICAgICBuZXdNYXAoMSwgVGVzdE1hcC5NZXNzYWdlVmFsdWUuZ2V0RGVmYXVsdEluc3RhbmNlKCks
Ci0gICAgICAgICAgICAyLCBUZXN0TWFwLk1lc3NhZ2VWYWx1ZS5nZXREZWZhdWx0SW5zdGFuY2Uo
KSksCi0gICAgICAgIGJ1aWxkZXIuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RNdXRhYmxlTWFwTGlmZWN5Y2xlX2NvbGxlY3Rpb25zKCkgewotICAg
IFRlc3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAgTWFw
PEludGVnZXIsIEludGVnZXI+IGludE1hcCA9IGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQz
MkZpZWxkKCk7Ci0gICAgaW50TWFwLnB1dCgxLCAyKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3TWFw
KDEsIDIpLCBidWlsZGVyLmJ1aWxkKCkuZ2V0SW50MzJUb0ludDMyRmllbGQoKSk7Ci0gICAgdHJ5
IHsKLSAgICAgIGludE1hcC5yZW1vdmUoMik7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAo
VW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAg
ICB9Ci0gICAgdHJ5IHsKLSAgICAgIGludE1hcC5lbnRyeVNldCgpLnJlbW92ZShuZXcgT2JqZWN0
KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIHRyeSB7Ci0gICAgICBp
bnRNYXAuZW50cnlTZXQoKS5pdGVyYXRvcigpLnJlbW92ZSgpOwotICAgICAgZmFpbCgpOwotICAg
IH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4
cGVjdGVkCi0gICAgfQotICAgIHRyeSB7Ci0gICAgICBpbnRNYXAua2V5U2V0KCkucmVtb3ZlKG5l
dyBPYmplY3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVy
YXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgdHJ5IHsK
LSAgICAgIGludE1hcC52YWx1ZXMoKS5yZW1vdmUobmV3IE9iamVjdCgpKTsKLSAgICAgIGZhaWwo
KTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBleHBlY3RlZAotICAgIH0KLSAgICB0cnkgewotICAgICAgaW50TWFwLnZhbHVlcygpLml0
ZXJhdG9yKCkucmVtb3ZlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0
ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAg
YXNzZXJ0RXF1YWxzKG5ld01hcCgxLCAyKSwgaW50TWFwKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3
TWFwKDEsIDIpLCBidWlsZGVyLmdldEludDMyVG9JbnQzMkZpZWxkKCkpOwotICAgIGFzc2VydEVx
dWFscyhuZXdNYXAoMSwgMiksIGJ1aWxkZXIuYnVpbGQoKS5nZXRJbnQzMlRvSW50MzJGaWVsZCgp
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXR0ZXJzQW5kU2V0dGVycygpIHRocm93cyBF
eGNlcHRpb24gewotICAgIFRlc3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1hcC5uZXdCdWls
ZGVyKCk7Ci0gICAgVGVzdE1hcCBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2Vy
dE1hcFZhbHVlc0NsZWFyZWQobWVzc2FnZSk7Ci0gICAgCi0gICAgYnVpbGRlciA9IG1lc3NhZ2Uu
dG9CdWlsZGVyKCk7Ci0gICAgc2V0TWFwVmFsdWVzKGJ1aWxkZXIpOwotICAgIG1lc3NhZ2UgPSBi
dWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzU2V0KG1lc3NhZ2UpOwotICAgIAot
ICAgIGJ1aWxkZXIgPSBtZXNzYWdlLnRvQnVpbGRlcigpOwotICAgIHVwZGF0ZU1hcFZhbHVlcyhi
dWlsZGVyKTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydE1hcFZh
bHVlc1VwZGF0ZWQobWVzc2FnZSk7Ci0gICAgCi0gICAgYnVpbGRlciA9IG1lc3NhZ2UudG9CdWls
ZGVyKCk7Ci0gICAgYnVpbGRlci5jbGVhcigpOwotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxk
KCk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzQ2xlYXJlZChtZXNzYWdlKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RQdXRBbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TWFwLkJ1aWxk
ZXIgc291cmNlQnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAgIHNldE1hcFZhbHVl
cyhzb3VyY2VCdWlsZGVyKTsKLSAgICBUZXN0TWFwIHNvdXJjZSA9IHNvdXJjZUJ1aWxkZXIuYnVp
bGQoKTsKLQotICAgIFRlc3RNYXAuQnVpbGRlciBkZXN0aW5hdGlvbiA9IFRlc3RNYXAubmV3QnVp
bGRlcigpOwotICAgIGNvcHlNYXBWYWx1ZXMoc291cmNlLCBkZXN0aW5hdGlvbik7Ci0gICAgYXNz
ZXJ0TWFwVmFsdWVzU2V0KGRlc3RpbmF0aW9uLmJ1aWxkKCkpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdFNlcmlhbGl6ZUFuZFBhcnNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdE1h
cC5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0TWFwLm5ld0J1aWxkZXIoKTsKLSAgICBzZXRNYXBWYWx1
ZXMoYnVpbGRlcik7Ci0gICAgVGVzdE1hcCBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAg
IGFzc2VydEVxdWFscyhtZXNzYWdlLmdldFNlcmlhbGl6ZWRTaXplKCksIG1lc3NhZ2UudG9CeXRl
U3RyaW5nKCkuc2l6ZSgpKTsKLSAgICBtZXNzYWdlID0gVGVzdE1hcC5wYXJzZXIoKS5wYXJzZUZy
b20obWVzc2FnZS50b0J5dGVTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzU2V0KG1lc3Nh
Z2UpOwotICAgIAotICAgIGJ1aWxkZXIgPSBtZXNzYWdlLnRvQnVpbGRlcigpOwotICAgIHVwZGF0
ZU1hcFZhbHVlcyhidWlsZGVyKTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAg
IGFzc2VydEVxdWFscyhtZXNzYWdlLmdldFNlcmlhbGl6ZWRTaXplKCksIG1lc3NhZ2UudG9CeXRl
U3RyaW5nKCkuc2l6ZSgpKTsKLSAgICBtZXNzYWdlID0gVGVzdE1hcC5wYXJzZXIoKS5wYXJzZUZy
b20obWVzc2FnZS50b0J5dGVTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzVXBkYXRlZCht
ZXNzYWdlKTsKLSAgICAKLSAgICBidWlsZGVyID0gbWVzc2FnZS50b0J1aWxkZXIoKTsKLSAgICBi
dWlsZGVyLmNsZWFyKCk7Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3Nl
cnRFcXVhbHMobWVzc2FnZS5nZXRTZXJpYWxpemVkU2l6ZSgpLCBtZXNzYWdlLnRvQnl0ZVN0cmlu
ZygpLnNpemUoKSk7Ci0gICAgbWVzc2FnZSA9IFRlc3RNYXAucGFyc2VyKCkucGFyc2VGcm9tKG1l
c3NhZ2UudG9CeXRlU3RyaW5nKCkpOwotICAgIGFzc2VydE1hcFZhbHVlc0NsZWFyZWQobWVzc2Fn
ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZUZyb20oKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0TWFwLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigp
OwotICAgIHNldE1hcFZhbHVlcyhidWlsZGVyKTsKLSAgICBUZXN0TWFwIG1lc3NhZ2UgPSBidWls
ZGVyLmJ1aWxkKCk7Ci0gICAgCi0gICAgVGVzdE1hcC5CdWlsZGVyIG90aGVyID0gVGVzdE1hcC5u
ZXdCdWlsZGVyKCk7Ci0gICAgb3RoZXIubWVyZ2VGcm9tKG1lc3NhZ2UpOwotICAgIGFzc2VydE1h
cFZhbHVlc1NldChvdGhlci5idWlsZCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFcXVh
bHNBbmRIYXNoQ29kZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFRlc3QgdGhhdCBnZW5l
cmF0ZWQgZXF1YWxzKCkgYW5kIGhhc2hDb2RlKCkgd2lsbCBkaXNyZWdhcmQgdGhlIG9yZGVyCi0g
ICAgLy8gb2YgbWFwIGVudHJpZXMgd2hlbiBjb21wYXJpbmcvaGFzaGluZyBtYXAgZmllbGRzLgot
ICAgIAotICAgIC8vIFdlIGNhbid0IGNvbnRyb2wgdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluIGEg
SGFzaE1hcC4gVGhlIGJlc3Qgd2UgY2FuIGRvCi0gICAgLy8gaGVyZSBpcyB0byBhZGQgZWxlbWVu
dHMgaW4gZGlmZmVyZW50IG9yZGVyLgotICAgIFRlc3RNYXAuQnVpbGRlciBiMSA9IFRlc3RNYXAu
bmV3QnVpbGRlcigpOwotICAgIGIxLmdldE11dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCgx
LCAyKTsKLSAgICBiMS5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMywgNCk7Ci0g
ICAgYjEuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDUsIDYpOwotICAgIFRlc3RN
YXAgbTEgPSBiMS5idWlsZCgpOwotICAgIAotICAgIFRlc3RNYXAuQnVpbGRlciBiMiA9IFRlc3RN
YXAubmV3QnVpbGRlcigpOwotICAgIGIyLmdldE11dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1
dCg1LCA2KTsKLSAgICBiMi5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMSwgMik7
Ci0gICAgYjIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDMsIDQpOwotICAgIFRl
c3RNYXAgbTIgPSBiMi5idWlsZCgpOwotICAgIAotICAgIGFzc2VydEVxdWFscyhtMSwgbTIpOwot
ICAgIGFzc2VydEVxdWFscyhtMS5oYXNoQ29kZSgpLCBtMi5oYXNoQ29kZSgpKTsKLSAgICAKLSAg
ICAvLyBNYWtlIHN1cmUgd2UgZGlkIGNvbXBhcmUgbWFwIGZpZWxkcy4KLSAgICBiMi5nZXRNdXRh
YmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMSwgMCk7Ci0gICAgbTIgPSBiMi5idWlsZCgpOwot
ICAgIGFzc2VydEZhbHNlKG0xLmVxdWFscyhtMikpOwotICAgIC8vIERvbid0IGNoZWNrIG0xLmhh
c2hDb2RlKCkgIT0gbTIuaGFzaENvZGUoKSBiZWNhdXNlIGl0J3Mgbm90IGd1YXJhbnRlZWQKLSAg
ICAvLyB0byBiZSBkaWZmZXJlbnQuCi0gIH0KLSAgCi0gIAotICAvLyBUaGUgZm9sbG93aW5nIG1l
dGhvZHMgYXJlIHVzZWQgdG8gdGVzdCByZWZsZWN0aW9uIEFQSS4KLSAgCi0gIHByaXZhdGUgc3Rh
dGljIEZpZWxkRGVzY3JpcHRvciBmKFN0cmluZyBuYW1lKSB7Ci0gICAgcmV0dXJuIFRlc3RNYXAu
Z2V0RGVzY3JpcHRvcigpLmZpbmRGaWVsZEJ5TmFtZShuYW1lKTsKLSAgfQotICAKLSAgcHJpdmF0
ZSBzdGF0aWMgT2JqZWN0IGdldEZpZWxkVmFsdWUoTWVzc2FnZSBtYXBFbnRyeSwgU3RyaW5nIG5h
bWUpIHsKLSAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBtYXBFbnRyeS5nZXREZXNjcmlwdG9y
Rm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZShuYW1lKTsKLSAgICByZXR1cm4gbWFwRW50cnkuZ2V0
RmllbGQoZmllbGQpOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBNZXNzYWdlLkJ1aWxkZXIg
c2V0RmllbGRWYWx1ZSgKLSAgICAgIE1lc3NhZ2UuQnVpbGRlciBtYXBFbnRyeSwgU3RyaW5nIG5h
bWUsIE9iamVjdCB2YWx1ZSkgewotICAgIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA9IG1hcEVudHJ5
LmdldERlc2NyaXB0b3JGb3JUeXBlKCkuZmluZEZpZWxkQnlOYW1lKG5hbWUpOwotICAgIG1hcEVu
dHJ5LnNldEZpZWxkKGZpZWxkLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIG1hcEVudHJ5OwotICB9Ci0g
IAotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEhhc01hcFZhbHVlcyhNZXNzYWdlIG1lc3Nh
Z2UsIFN0cmluZyBuYW1lLCBNYXA8PywgPz4gdmFsdWVzKSB7Ci0gICAgRmllbGREZXNjcmlwdG9y
IGZpZWxkID0gZihuYW1lKTsKLSAgICBmb3IgKE9iamVjdCBlbnRyeSA6IChMaXN0PD8+KSBtZXNz
YWdlLmdldEZpZWxkKGZpZWxkKSkgewotICAgICAgTWVzc2FnZSBtYXBFbnRyeSA9IChNZXNzYWdl
KSBlbnRyeTsKLSAgICAgIE9iamVjdCBrZXkgPSBnZXRGaWVsZFZhbHVlKG1hcEVudHJ5LCAia2V5
Iik7Ci0gICAgICBPYmplY3QgdmFsdWUgPSBnZXRGaWVsZFZhbHVlKG1hcEVudHJ5LCAidmFsdWUi
KTsKLSAgICAgIGFzc2VydFRydWUodmFsdWVzLmNvbnRhaW5zS2V5KGtleSkpOwotICAgICAgYXNz
ZXJ0RXF1YWxzKHZhbHVlLCB2YWx1ZXMuZ2V0KGtleSkpOwotICAgIH0KLSAgICBhc3NlcnRFcXVh
bHModmFsdWVzLnNpemUoKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZmllbGQpKTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGZp
ZWxkKTsgaSsrKSB7Ci0gICAgICBNZXNzYWdlIG1hcEVudHJ5ID0gKE1lc3NhZ2UpIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRGaWVsZChmaWVsZCwgaSk7Ci0gICAgICBPYmplY3Qga2V5ID0gZ2V0RmllbGRW
YWx1ZShtYXBFbnRyeSwgImtleSIpOwotICAgICAgT2JqZWN0IHZhbHVlID0gZ2V0RmllbGRWYWx1
ZShtYXBFbnRyeSwgInZhbHVlIik7Ci0gICAgICBhc3NlcnRUcnVlKHZhbHVlcy5jb250YWluc0tl
eShrZXkpKTsKLSAgICAgIGFzc2VydEVxdWFscyh2YWx1ZSwgdmFsdWVzLmdldChrZXkpKTsKLSAg
ICB9Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIDxLZXlUeXBlLCBWYWx1ZVR5cGU+Ci0gIE1l
c3NhZ2UgbmV3TWFwRW50cnkoTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIsIFN0cmluZyBuYW1lLCBL
ZXlUeXBlIGtleSwgVmFsdWVUeXBlIHZhbHVlKSB7Ci0gICAgRmllbGREZXNjcmlwdG9yIGZpZWxk
ID0gYnVpbGRlci5nZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZShuYW1lKTsK
LSAgICBNZXNzYWdlLkJ1aWxkZXIgZW50cnlCdWlsZGVyID0gYnVpbGRlci5uZXdCdWlsZGVyRm9y
RmllbGQoZmllbGQpOwotICAgIEZpZWxkRGVzY3JpcHRvciBrZXlGaWVsZCA9IGVudHJ5QnVpbGRl
ci5nZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gICAgRmll
bGREZXNjcmlwdG9yIHZhbHVlRmllbGQgPSBlbnRyeUJ1aWxkZXIuZ2V0RGVzY3JpcHRvckZvclR5
cGUoKS5maW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gICAgZW50cnlCdWlsZGVyLnNldEZpZWxk
KGtleUZpZWxkLCBrZXkpOwotICAgIGVudHJ5QnVpbGRlci5zZXRGaWVsZCh2YWx1ZUZpZWxkLCB2
YWx1ZSk7Ci0gICAgcmV0dXJuIGVudHJ5QnVpbGRlci5idWlsZCgpOwotICB9Ci0gIAotICBwcml2
YXRlIHN0YXRpYyB2b2lkIHNldE1hcFZhbHVlcyhNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciwgU3Ry
aW5nIG5hbWUsIE1hcDw/LCA/PiB2YWx1ZXMpIHsKLSAgICBMaXN0PE1lc3NhZ2U+IGVudHJ5TGlz
dCA9IG5ldyBBcnJheUxpc3Q8TWVzc2FnZT4oKTsKLSAgICBmb3IgKE1hcC5FbnRyeTw/LCA/PiBl
bnRyeSA6IHZhbHVlcy5lbnRyeVNldCgpKSB7Ci0gICAgICBlbnRyeUxpc3QuYWRkKG5ld01hcEVu
dHJ5KGJ1aWxkZXIsIG5hbWUsIGVudHJ5LmdldEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpKSk7Ci0g
ICAgfQotICAgIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA9IGJ1aWxkZXIuZ2V0RGVzY3JpcHRvckZv
clR5cGUoKS5maW5kRmllbGRCeU5hbWUobmFtZSk7Ci0gICAgYnVpbGRlci5zZXRGaWVsZChmaWVs
ZCwgZW50cnlMaXN0KTsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgPEtleVR5cGUsIFZhbHVl
VHlwZT4KLSAgTWFwPEtleVR5cGUsIFZhbHVlVHlwZT4gbWFwRm9yVmFsdWVzKAotICAgICAgS2V5
VHlwZSBrZXkxLCBWYWx1ZVR5cGUgdmFsdWUxLCBLZXlUeXBlIGtleTIsIFZhbHVlVHlwZSB2YWx1
ZTIpIHsKLSAgICBNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiBtYXAgPSBuZXcgSGFzaE1hcDxLZXlU
eXBlLCBWYWx1ZVR5cGU+KCk7Ci0gICAgbWFwLnB1dChrZXkxLCB2YWx1ZTEpOwotICAgIG1hcC5w
dXQoa2V5MiwgdmFsdWUyKTsKLSAgICByZXR1cm4gbWFwOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdFJlZmxlY3Rpb25BcGkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBJbiByZWZsZWN0
aW9uIEFQSSwgbWFwIGZpZWxkcyBhcmUganVzdCByZXBlYXRlZCBtZXNzYWdlIGZpZWxkcy4KLSAg
ICBUZXN0TWFwLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAgIGJ1
aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDEsIDIpOwotICAgIGJ1aWxk
ZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDMsIDQpOwotICAgIGJ1aWxkZXIu
Z2V0TXV0YWJsZUludDMyVG9NZXNzYWdlRmllbGQoKS5wdXQoCi0gICAgICAgIDExLCBNZXNzYWdl
VmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDIyKS5idWlsZCgpKTsKLSAgICBidWlsZGVyLmdl
dE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KAotICAgICAgICAzMywgTWVzc2FnZVZh
bHVlLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSg0NCkuYnVpbGQoKSk7Ci0gICAgVGVzdE1hcCBtZXNz
YWdlID0gYnVpbGRlci5idWlsZCgpOwotCi0gICAgLy8gVGVzdCBnZXRGaWVsZCgpLCBnZXRSZXBl
YXRlZEZpZWxkQ291bnQoKSwgZ2V0UmVwZWF0ZWRGaWVsZCgpLgotICAgIGFzc2VydEhhc01hcFZh
bHVlcyhtZXNzYWdlLCAiaW50MzJfdG9faW50MzJfZmllbGQiLAotICAgICAgICBtYXBGb3JWYWx1
ZXMoMSwgMiwgMywgNCkpOwotICAgIGFzc2VydEhhc01hcFZhbHVlcyhtZXNzYWdlLCAiaW50MzJf
dG9fbWVzc2FnZV9maWVsZCIsCi0gICAgICAgIG1hcEZvclZhbHVlcygKLSAgICAgICAgICAgIDEx
LCBNZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDIyKS5idWlsZCgpLAotICAgICAg
ICAgICAgMzMsIE1lc3NhZ2VWYWx1ZS5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoNDQpLmJ1aWxkKCkp
KTsKLSAgICAKLSAgICAvLyBUZXN0IGNsZWFyRmllbGQoKQotICAgIGJ1aWxkZXIuY2xlYXJGaWVs
ZChmKCJpbnQzMl90b19pbnQzMl9maWVsZCIpKTsKLSAgICBidWlsZGVyLmNsZWFyRmllbGQoZigi
aW50MzJfdG9fbWVzc2FnZV9maWVsZCIpKTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgp
OwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxkKCkuc2l6
ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRJbnQzMlRvTWVzc2FnZUZpZWxk
KCkuc2l6ZSgpKTsKLSAgICAKLSAgICAvLyBUZXN0IHNldEZpZWxkKCkKLSAgICBzZXRNYXBWYWx1
ZXMoYnVpbGRlciwgImludDMyX3RvX2ludDMyX2ZpZWxkIiwKLSAgICAgICAgbWFwRm9yVmFsdWVz
KDExLCAyMiwgMzMsIDQ0KSk7Ci0gICAgc2V0TWFwVmFsdWVzKGJ1aWxkZXIsICJpbnQzMl90b19t
ZXNzYWdlX2ZpZWxkIiwKLSAgICAgICAgbWFwRm9yVmFsdWVzKAotICAgICAgICAgICAgMTExLCBN
ZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDIyMikuYnVpbGQoKSwKLSAgICAgICAg
ICAgIDMzMywgTWVzc2FnZVZhbHVlLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSg0NDQpLmJ1aWxkKCkp
KTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygyMiwg
bWVzc2FnZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLmdldCgxMSkuaW50VmFsdWUoKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDQ0LCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0KDMzKS5p
bnRWYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMjIyLCBtZXNzYWdlLmdldEludDMyVG9NZXNz
YWdlRmllbGQoKS5nZXQoMTExKS5nZXRWYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDQ0LCBt
ZXNzYWdlLmdldEludDMyVG9NZXNzYWdlRmllbGQoKS5nZXQoMzMzKS5nZXRWYWx1ZSgpKTsKLSAg
ICAKLSAgICAvLyBUZXN0IGFkZFJlcGVhdGVkRmllbGQKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVk
RmllbGQoZigiaW50MzJfdG9faW50MzJfZmllbGQiKSwKLSAgICAgICAgbmV3TWFwRW50cnkoYnVp
bGRlciwgImludDMyX3RvX2ludDMyX2ZpZWxkIiwgNTUsIDY2KSk7Ci0gICAgYnVpbGRlci5hZGRS
ZXBlYXRlZEZpZWxkKGYoImludDMyX3RvX21lc3NhZ2VfZmllbGQiKSwKLSAgICAgICAgbmV3TWFw
RW50cnkoYnVpbGRlciwgImludDMyX3RvX21lc3NhZ2VfZmllbGQiLCA1NTUsCi0gICAgICAgICAg
ICBNZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDY2NikuYnVpbGQoKSkpOwotICAg
IG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDY2LCBtZXNzYWdl
LmdldEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0KDU1KS5pbnRWYWx1ZSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoNjY2LCBtZXNzYWdlLmdldEludDMyVG9NZXNzYWdlRmllbGQoKS5nZXQoNTU1KS5nZXRW
YWx1ZSgpKTsKLQotICAgIC8vIFRlc3QgYWRkUmVwZWF0ZWRGaWVsZCAob3ZlcnJpZGluZyBleGlz
dGluZyB2YWx1ZXMpCi0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZpZWxkKGYoImludDMyX3RvX2lu
dDMyX2ZpZWxkIiksCi0gICAgICAgIG5ld01hcEVudHJ5KGJ1aWxkZXIsICJpbnQzMl90b19pbnQz
Ml9maWVsZCIsIDU1LCA1NSkpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGaWVsZChmKCJpbnQz
Ml90b19tZXNzYWdlX2ZpZWxkIiksCi0gICAgICAgIG5ld01hcEVudHJ5KGJ1aWxkZXIsICJpbnQz
Ml90b19tZXNzYWdlX2ZpZWxkIiwgNTU1LAotICAgICAgICAgICAgTWVzc2FnZVZhbHVlLm5ld0J1
aWxkZXIoKS5zZXRWYWx1ZSg1NTUpLmJ1aWxkKCkpKTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5i
dWlsZCgpOwotICAgIGFzc2VydEVxdWFscyg1NSwgbWVzc2FnZS5nZXRJbnQzMlRvSW50MzJGaWVs
ZCgpLmdldCg1NSkuaW50VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDU1NSwgbWVzc2FnZS5n
ZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkuZ2V0KDU1NSkuZ2V0VmFsdWUoKSk7Ci0gICAgCi0gICAg
Ly8gVGVzdCBzZXRSZXBlYXRlZEZpZWxkCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWlsZGVy
LmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJpbnQzMl90b19pbnQzMl9maWVsZCIpKTsgaSsrKSB7
Ci0gICAgICBNZXNzYWdlIG1hcEVudHJ5ID0gKE1lc3NhZ2UpIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRG
aWVsZChmKCJpbnQzMl90b19pbnQzMl9maWVsZCIpLCBpKTsKLSAgICAgIGludCBvbGRLZXkgPSAo
KEludGVnZXIpIGdldEZpZWxkVmFsdWUobWFwRW50cnksICJrZXkiKSkuaW50VmFsdWUoKTsKLSAg
ICAgIGludCBvbGRWYWx1ZSA9ICgoSW50ZWdlcikgZ2V0RmllbGRWYWx1ZShtYXBFbnRyeSwgInZh
bHVlIikpLmludFZhbHVlKCk7Ci0gICAgICAvLyBTd2FwIGtleSB3aXRoIHZhbHVlIGZvciBlYWNo
IGVudHJ5LgotICAgICAgTWVzc2FnZS5CdWlsZGVyIG1hcEVudHJ5QnVpbGRlciA9IG1hcEVudHJ5
LnRvQnVpbGRlcigpOwotICAgICAgc2V0RmllbGRWYWx1ZShtYXBFbnRyeUJ1aWxkZXIsICJrZXki
LCBvbGRWYWx1ZSk7Ci0gICAgICBzZXRGaWVsZFZhbHVlKG1hcEVudHJ5QnVpbGRlciwgInZhbHVl
Iiwgb2xkS2V5KTsKLSAgICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRGaWVsZChmKCJpbnQzMl90b19p
bnQzMl9maWVsZCIpLCBpLCBtYXBFbnRyeUJ1aWxkZXIuYnVpbGQoKSk7Ci0gICAgfQotICAgIG1l
c3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExLCBtZXNzYWdlLmdl
dEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0KDIyKS5pbnRWYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoMzMsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5nZXQoNDQpLmludFZhbHVlKCkp
OwotICAgIGFzc2VydEVxdWFscyg1NSwgbWVzc2FnZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLmdl
dCg1NSkuaW50VmFsdWUoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RUZXh0Rm9ybWF0
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdE1hcC5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0
TWFwLm5ld0J1aWxkZXIoKTsKLSAgICBzZXRNYXBWYWx1ZXMoYnVpbGRlcik7Ci0gICAgVGVzdE1h
cCBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIAotICAgIFN0cmluZyB0ZXh0RGF0YSA9
IFRleHRGb3JtYXQucHJpbnRUb1N0cmluZyhtZXNzYWdlKTsKLSAgICAKLSAgICBidWlsZGVyID0g
VGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAgVGV4dEZvcm1hdC5tZXJnZSh0ZXh0RGF0YSwgYnVp
bGRlcik7Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICAKLSAgICBhc3NlcnRN
YXBWYWx1ZXNTZXQobWVzc2FnZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3REeW5hbWlj
TWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RNYXAuQnVpbGRlciBidWlsZGVy
ID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAgc2V0TWFwVmFsdWVzKGJ1aWxkZXIpOwotICAg
IFRlc3RNYXAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICAKLSAgICBNZXNzYWdlIGR5
bmFtaWNEZWZhdWx0SW5zdGFuY2UgPQotICAgICAgICBEeW5hbWljTWVzc2FnZS5nZXREZWZhdWx0
SW5zdGFuY2UoVGVzdE1hcC5nZXREZXNjcmlwdG9yKCkpOwotICAgIE1lc3NhZ2UgZHluYW1pY01l
c3NhZ2UgPSBkeW5hbWljRGVmYXVsdEluc3RhbmNlCi0gICAgICAgIC5uZXdCdWlsZGVyRm9yVHlw
ZSgpLm1lcmdlRnJvbShtZXNzYWdlLnRvQnl0ZVN0cmluZygpKS5idWlsZCgpOwotICAgIAotICAg
IGFzc2VydEVxdWFscyhtZXNzYWdlLCBkeW5hbWljTWVzc2FnZSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KG1lc3NhZ2UuaGFzaENvZGUoKSwgZHluYW1pY01lc3NhZ2UuaGFzaENvZGUoKSk7Ci0gIH0KLSAg
Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZWZsZWN0aW9uRXF1YWxzQW5kSGFzaENvZGUoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICAvLyBUZXN0IHRoYXQgZ2VuZXJhdGVkIGVxdWFscygpIGFuZCBoYXNo
Q29kZSgpIHdpbGwgZGlzcmVnYXJkIHRoZSBvcmRlcgotICAgIC8vIG9mIG1hcCBlbnRyaWVzIHdo
ZW4gY29tcGFyaW5nL2hhc2hpbmcgbWFwIGZpZWxkcy4KLQotICAgIC8vIFdlIHVzZSBEeW5hbWlj
TWVzc2FnZSB0byB0ZXN0IHJlZmxlY3Rpb24gYmFzZWQgZXF1YWxzKCkvaGFzaENvZGUoKS4KLSAg
ICBNZXNzYWdlIGR5bmFtaWNEZWZhdWx0SW5zdGFuY2UgPQotICAgICAgICBEeW5hbWljTWVzc2Fn
ZS5nZXREZWZhdWx0SW5zdGFuY2UoVGVzdE1hcC5nZXREZXNjcmlwdG9yKCkpOwotICAgIEZpZWxk
RGVzY3JpcHRvciBmaWVsZCA9IGYoImludDMyX3RvX2ludDMyX2ZpZWxkIik7Ci0gICAgCi0gICAg
TWVzc2FnZS5CdWlsZGVyIGIxID0gZHluYW1pY0RlZmF1bHRJbnN0YW5jZS5uZXdCdWlsZGVyRm9y
VHlwZSgpOwotICAgIGIxLmFkZFJlcGVhdGVkRmllbGQoZmllbGQsIG5ld01hcEVudHJ5KGIxLCAi
aW50MzJfdG9faW50MzJfZmllbGQiLCAxLCAyKSk7Ci0gICAgYjEuYWRkUmVwZWF0ZWRGaWVsZChm
aWVsZCwgbmV3TWFwRW50cnkoYjEsICJpbnQzMl90b19pbnQzMl9maWVsZCIsIDMsIDQpKTsKLSAg
ICBiMS5hZGRSZXBlYXRlZEZpZWxkKGZpZWxkLCBuZXdNYXBFbnRyeShiMSwgImludDMyX3RvX2lu
dDMyX2ZpZWxkIiwgNSwgNikpOwotICAgIE1lc3NhZ2UgbTEgPSBiMS5idWlsZCgpOwotICAgIAot
ICAgIE1lc3NhZ2UuQnVpbGRlciBiMiA9IGR5bmFtaWNEZWZhdWx0SW5zdGFuY2UubmV3QnVpbGRl
ckZvclR5cGUoKTsKLSAgICBiMi5hZGRSZXBlYXRlZEZpZWxkKGZpZWxkLCBuZXdNYXBFbnRyeShi
MiwgImludDMyX3RvX2ludDMyX2ZpZWxkIiwgNSwgNikpOwotICAgIGIyLmFkZFJlcGVhdGVkRmll
bGQoZmllbGQsIG5ld01hcEVudHJ5KGIyLCAiaW50MzJfdG9faW50MzJfZmllbGQiLCAxLCAyKSk7
Ci0gICAgYjIuYWRkUmVwZWF0ZWRGaWVsZChmaWVsZCwgbmV3TWFwRW50cnkoYjIsICJpbnQzMl90
b19pbnQzMl9maWVsZCIsIDMsIDQpKTsKLSAgICBNZXNzYWdlIG0yID0gYjIuYnVpbGQoKTsKLSAg
ICAKLSAgICBhc3NlcnRFcXVhbHMobTEsIG0yKTsKLSAgICBhc3NlcnRFcXVhbHMobTEuaGFzaENv
ZGUoKSwgbTIuaGFzaENvZGUoKSk7Ci0gICAgCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRpZCBjb21w
YXJlIG1hcCBmaWVsZHMuCi0gICAgYjIuc2V0UmVwZWF0ZWRGaWVsZChmaWVsZCwgMCwgbmV3TWFw
RW50cnkoYjEsICJpbnQzMl90b19pbnQzMl9maWVsZCIsIDAsIDApKTsKLSAgICBtMiA9IGIyLmJ1
aWxkKCk7Ci0gICAgYXNzZXJ0RmFsc2UobTEuZXF1YWxzKG0yKSk7Ci0gICAgLy8gRG9uJ3QgY2hl
Y2sgbTEuaGFzaENvZGUoKSAhPSBtMi5oYXNoQ29kZSgpIGJlY2F1c2UgaXQncyBub3QgZ3VhcmFu
dGVlZAotICAgIC8vIHRvIGJlIGRpZmZlcmVudC4KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVz
dFVua25vd25FbnVtVmFsdWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdFVua25vd25F
bnVtVmFsdWUuQnVpbGRlciBidWlsZGVyID0KLSAgICAgICAgVGVzdFVua25vd25FbnVtVmFsdWUu
bmV3QnVpbGRlcigpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCku
cHV0KDEsIDEpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0
KDIsIDU0MzIxKTsKLSAgICBCeXRlU3RyaW5nIGRhdGEgPSBidWlsZGVyLmJ1aWxkKCkudG9CeXRl
U3RyaW5nKCk7Ci0KLSAgICBUZXN0TWFwIG1lc3NhZ2UgPSBUZXN0TWFwLnBhcnNlRnJvbShkYXRh
KTsKLSAgICAvLyBFbnRyaWVzIHdpdGggdW5rbm93biBlbnVtIHZhbHVlcyB3aWxsIGJlIHN0b3Jl
ZCBpbnRvIFVua25vd25GaWVsZFNldCBzbwotICAgIC8vIHRoZXJlIGlzIG9ubHkgb25lIGVudHJ5
IGluIHRoZSBtYXAuCi0gICAgYXNzZXJ0RXF1YWxzKDEsIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1G
aWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RNYXAuRW51bVZhbHVlLkJBUiwg
bWVzc2FnZS5nZXRJbnQzMlRvRW51bUZpZWxkKCkuZ2V0KDEpKTsKLSAgICAvLyBVbmtub3duRmll
bGRTZXQgc2hvdWxkIG5vdCBiZSBlbXB0eS4KLSAgICBhc3NlcnRGYWxzZShtZXNzYWdlLmdldFVu
a25vd25GaWVsZHMoKS5hc01hcCgpLmlzRW1wdHkoKSk7Ci0gICAgLy8gU2VyaWFsaXppbmcgYW5k
IHBhcnNpbmcgc2hvdWxkIHByZXNlcnZlIHRoZSB1bmtub3duIGVudHJ5LgotICAgIGRhdGEgPSBt
ZXNzYWdlLnRvQnl0ZVN0cmluZygpOwotICAgIFRlc3RVbmtub3duRW51bVZhbHVlIG1lc3NhZ2VX
aXRoVW5rbm93bkVudW1zID0KLSAgICAgICAgVGVzdFVua25vd25FbnVtVmFsdWUucGFyc2VGcm9t
KGRhdGEpOwotICAgIGFzc2VydEVxdWFscygyLCBtZXNzYWdlV2l0aFVua25vd25FbnVtcy5nZXRJ
bnQzMlRvSW50MzJGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1lc3NhZ2VX
aXRoVW5rbm93bkVudW1zLmdldEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0KDEpLmludFZhbHVlKCkp
OwotICAgIGFzc2VydEVxdWFscyg1NDMyMSwgbWVzc2FnZVdpdGhVbmtub3duRW51bXMuZ2V0SW50
MzJUb0ludDMyRmllbGQoKS5nZXQoMikuaW50VmFsdWUoKSk7Ci0gIH0KLQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RSZXF1aXJlZE1lc3NhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TWFw
LkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAgIGJ1aWxkZXIuZ2V0
TXV0YWJsZVJlcXVpcmVkTWVzc2FnZU1hcCgpLnB1dCgwLAotICAgICAgICBNZXNzYWdlV2l0aFJl
cXVpcmVkRmllbGRzLm5ld0J1aWxkZXIoKS5idWlsZFBhcnRpYWwoKSk7Ci0gICAgVGVzdE1hcCBt
ZXNzYWdlID0gYnVpbGRlci5idWlsZFBhcnRpYWwoKTsKLSAgICBhc3NlcnRGYWxzZShtZXNzYWdl
LmlzSW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBidWlsZGVyLmdldE11dGFibGVSZXF1aXJlZE1lc3Nh
Z2VNYXAoKS5wdXQoMCwKLSAgICAgICAgTWVzc2FnZVdpdGhSZXF1aXJlZEZpZWxkcy5uZXdCdWls
ZGVyKCkuc2V0VmFsdWUoMSkuYnVpbGQoKSk7Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQo
KTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaXNJbml0aWFsaXplZCgpKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RSZWN1cnNpdmVNYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0
UmVjdXJzaXZlTWFwLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RSZWN1cnNpdmVNYXAubmV3QnVpbGRl
cigpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZVJlY3Vyc2l2ZU1hcEZpZWxkKCkucHV0KAotICAg
ICAgICAxLCBUZXN0UmVjdXJzaXZlTWFwLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSgyKS5idWlsZCgp
KTsKLSAgICBidWlsZGVyLmdldE11dGFibGVSZWN1cnNpdmVNYXBGaWVsZCgpLnB1dCgKLSAgICAg
ICAgMywgVGVzdFJlY3Vyc2l2ZU1hcC5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoNCkuYnVpbGQoKSk7
Ci0gICAgQnl0ZVN0cmluZyBkYXRhID0gYnVpbGRlci5idWlsZCgpLnRvQnl0ZVN0cmluZygpOwot
Ci0gICAgVGVzdFJlY3Vyc2l2ZU1hcCBtZXNzYWdlID0gVGVzdFJlY3Vyc2l2ZU1hcC5wYXJzZUZy
b20oZGF0YSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVjdXJzaXZlTWFwRmll
bGQoKS5nZXQoMSkuZ2V0VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIG1lc3NhZ2UuZ2V0
UmVjdXJzaXZlTWFwRmllbGQoKS5nZXQoMykuZ2V0VmFsdWUoKSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0SXRlcmF0aW9uT3JkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TWFw
LkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAgIHNldE1hcFZhbHVl
cyhidWlsZGVyKTsKLSAgICBUZXN0TWFwIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0KLSAg
ICBhc3NlcnRFcXVhbHMoQXJyYXlzLmFzTGlzdCgiMSIsICIyIiwgIjMiKSwKLSAgICAgICAgbmV3
IEFycmF5TGlzdDxTdHJpbmc+KG1lc3NhZ2UuZ2V0U3RyaW5nVG9JbnQzMkZpZWxkKCkua2V5U2V0
KCkpKTsKLSAgfQotCi0gIC8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYi8yMDQ5NDc4OAotICBwdWJs
aWMgdm9pZCB0ZXN0TWFwSW5pdGlhbGl6YXRpb25PcmRlcigpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIGFzc2VydEVxdWFscygiUmVkYWN0QWxsVHlwZXMiLCBtYXBfdGVzdC5SZWRhY3RBbGxUeXBl
cwotICAgICAgICAuZ2V0RGVmYXVsdEluc3RhbmNlKCkuZ2V0RGVzY3JpcHRvckZvclR5cGUoKS5n
ZXROYW1lKCkpOwotCi0gICAgbWFwX3Rlc3QuTWVzc2FnZTEuQnVpbGRlciBidWlsZGVyID0KLSAg
ICAgICAgbWFwX3Rlc3QuTWVzc2FnZTEubmV3QnVpbGRlcigpOwotICAgIGJ1aWxkZXIuZ2V0TXV0
YWJsZU1hcEZpZWxkKCkucHV0KCJrZXkiLCB0cnVlKTsKLSAgICBtYXBfdGVzdC5NZXNzYWdlMSBt
ZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIE1lc3NhZ2UgbWFwRW50cnkgPSAoTWVzc2Fn
ZSkgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKAotICAgICAgICBtZXNzYWdlLmdldERlc2NyaXB0
b3JGb3JUeXBlKCkuZmluZEZpZWxkQnlOYW1lKCJtYXBfZmllbGQiKSwgMCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDIsIG1hcEVudHJ5LmdldEFsbEZpZWxkcygpLnNpemUoKSk7Ci0gIH0KLSAgCi0gIHBy
aXZhdGUgc3RhdGljIDxLLCBWPiBNYXA8SywgVj4gbmV3TWFwKEsga2V5MSwgViB2YWx1ZTEpIHsK
LSAgICBNYXA8SywgVj4gbWFwID0gbmV3IEhhc2hNYXA8SywgVj4oKTsKLSAgICBtYXAucHV0KGtl
eTEsIHZhbHVlMSk7Ci0gICAgcmV0dXJuIG1hcDsKLSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMg
PEssIFY+IE1hcDxLLCBWPiBuZXdNYXAoSyBrZXkxLCBWIHZhbHVlMSwgSyBrZXkyLCBWIHZhbHVl
MikgewotICAgIE1hcDxLLCBWPiBtYXAgPSBuZXcgSGFzaE1hcDxLLCBWPigpOwotICAgIG1hcC5w
dXQoa2V5MSwgdmFsdWUxKTsKLSAgICBtYXAucHV0KGtleTIsIHZhbHVlMik7Ci0gICAgcmV0dXJu
IG1hcDsKLSAgfQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvTWFwVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL01hcFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWRjNTc4N2Q5Y2Q2MTk0NWZlMTMwMDRhYTYwMDQzOTE0MzQxNzdlOS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZh
L2NvbS9nb29nbGUvcHJvdG9idWYvTWFwVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzgy
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNv
bS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0
b3JzLkRlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5F
bnVtRGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkVu
dW1WYWx1ZURlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3I7Ci1pbXBvcnQgbWFwX3Rlc3QuTWFwVGVzdFByb3RvLlRlc3RNYXA7
Ci1pbXBvcnQgbWFwX3Rlc3QuTWFwVGVzdFByb3RvLlRlc3RNYXAuTWVzc2FnZVZhbHVlOwotaW1w
b3J0IG1hcF90ZXN0Lk1hcFRlc3RQcm90by5UZXN0T25DaGFuZ2VFdmVudFByb3BhZ2F0aW9uOwot
aW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJh
eUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1h
cDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioK
LSAqIFVuaXQgdGVzdHMgZm9yIG1hcCBmaWVsZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBNYXBUZXN0
IGV4dGVuZHMgVGVzdENhc2UgewotICBwcml2YXRlIHZvaWQgc2V0TWFwVmFsdWVzKFRlc3RNYXAu
QnVpbGRlciBidWlsZGVyKSB7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmll
bGQoKS5wdXQoMSwgMTEpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxk
KCkucHV0KDIsIDIyKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvSW50MzJGaWVsZCgp
LnB1dCgzLCAzMyk7Ci0KLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvU3RyaW5nRmllbGQo
KS5wdXQoMSwgIjExIik7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb1N0cmluZ0ZpZWxk
KCkucHV0KDIsICIyMiIpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9TdHJpbmdGaWVs
ZCgpLnB1dCgzLCAiMzMiKTsKLQotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9CeXRlc0Zp
ZWxkKCkucHV0KDEsIFRlc3RVdGlsLnRvQnl0ZXMoIjExIikpOwotICAgIGJ1aWxkZXIuZ2V0TXV0
YWJsZUludDMyVG9CeXRlc0ZpZWxkKCkucHV0KDIsIFRlc3RVdGlsLnRvQnl0ZXMoIjIyIikpOwot
ICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9CeXRlc0ZpZWxkKCkucHV0KDMsIFRlc3RVdGls
LnRvQnl0ZXMoIjMzIikpOwotCi0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0VudW1GaWVs
ZCgpLnB1dCgxLCBUZXN0TWFwLkVudW1WYWx1ZS5GT08pOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJs
ZUludDMyVG9FbnVtRmllbGQoKS5wdXQoMiwgVGVzdE1hcC5FbnVtVmFsdWUuQkFSKTsKLSAgICBi
dWlsZGVyLmdldE11dGFibGVJbnQzMlRvRW51bUZpZWxkKCkucHV0KDMsIFRlc3RNYXAuRW51bVZh
bHVlLkJBWik7Ci0KLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCku
cHV0KAotICAgICAgICAxLCBNZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDExKS5i
dWlsZCgpKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0
KAotICAgICAgICAyLCBNZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDIyKS5idWls
ZCgpKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KAot
ICAgICAgICAzLCBNZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDMzKS5idWlsZCgp
KTsKLQotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZVN0cmluZ1RvSW50MzJGaWVsZCgpLnB1dCgiMSIs
IDExKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVTdHJpbmdUb0ludDMyRmllbGQoKS5wdXQoIjIi
LCAyMik7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlU3RyaW5nVG9JbnQzMkZpZWxkKCkucHV0KCIz
IiwgMzMpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvcHlNYXBWYWx1ZXMoVGVzdE1hcCBzb3Vy
Y2UsIFRlc3RNYXAuQnVpbGRlciBkZXN0aW5hdGlvbikgewotICAgIGRlc3RpbmF0aW9uCi0gICAg
ICAgIC5wdXRBbGxJbnQzMlRvSW50MzJGaWVsZChzb3VyY2UuZ2V0SW50MzJUb0ludDMyRmllbGQo
KSkKLSAgICAgICAgLnB1dEFsbEludDMyVG9TdHJpbmdGaWVsZChzb3VyY2UuZ2V0SW50MzJUb1N0
cmluZ0ZpZWxkKCkpCi0gICAgICAgIC5wdXRBbGxJbnQzMlRvQnl0ZXNGaWVsZChzb3VyY2UuZ2V0
SW50MzJUb0J5dGVzRmllbGQoKSkKLSAgICAgICAgLnB1dEFsbEludDMyVG9FbnVtRmllbGQoc291
cmNlLmdldEludDMyVG9FbnVtRmllbGQoKSkKLSAgICAgICAgLnB1dEFsbEludDMyVG9NZXNzYWdl
RmllbGQoc291cmNlLmdldEludDMyVG9NZXNzYWdlRmllbGQoKSkKLSAgICAgICAgLnB1dEFsbFN0
cmluZ1RvSW50MzJGaWVsZChzb3VyY2UuZ2V0U3RyaW5nVG9JbnQzMkZpZWxkKCkpOwotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIGFzc2VydE1hcFZhbHVlc1NldChUZXN0TWFwIG1lc3NhZ2UpIHsKLSAg
ICBhc3NlcnRFcXVhbHMoMywgbWVzc2FnZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLnNpemUoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDExLCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0
KDEpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscygyMiwgbWVzc2FnZS5nZXRJbnQzMlRv
SW50MzJGaWVsZCgpLmdldCgyKS5pbnRWYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMzMsIG1l
c3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5nZXQoMykuaW50VmFsdWUoKSk7Ci0KLSAgICBh
c3NlcnRFcXVhbHMoMywgbWVzc2FnZS5nZXRJbnQzMlRvU3RyaW5nRmllbGQoKS5zaXplKCkpOwot
ICAgIGFzc2VydEVxdWFscygiMTEiLCBtZXNzYWdlLmdldEludDMyVG9TdHJpbmdGaWVsZCgpLmdl
dCgxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIyMiIsIG1lc3NhZ2UuZ2V0SW50MzJUb1N0cmluZ0Zp
ZWxkKCkuZ2V0KDIpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjMzIiwgbWVzc2FnZS5nZXRJbnQzMlRv
U3RyaW5nRmllbGQoKS5nZXQoMykpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0
SW50MzJUb0J5dGVzRmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0VXRpbC50
b0J5dGVzKCIxMSIpLCBtZXNzYWdlLmdldEludDMyVG9CeXRlc0ZpZWxkKCkuZ2V0KDEpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoVGVzdFV0aWwudG9CeXRlcygiMjIiKSwgbWVzc2FnZS5nZXRJbnQzMlRv
Qnl0ZXNGaWVsZCgpLmdldCgyKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RVdGlsLnRvQnl0ZXMo
IjMzIiksIG1lc3NhZ2UuZ2V0SW50MzJUb0J5dGVzRmllbGQoKS5nZXQoMykpOwotCi0gICAgYXNz
ZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVsZCgpLnNpemUoKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKFRlc3RNYXAuRW51bVZhbHVlLkZPTywgbWVzc2FnZS5nZXRJbnQzMlRvRW51
bUZpZWxkKCkuZ2V0KDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdE1hcC5FbnVtVmFsdWUuQkFS
LCBtZXNzYWdlLmdldEludDMyVG9FbnVtRmllbGQoKS5nZXQoMikpOwotICAgIGFzc2VydEVxdWFs
cyhUZXN0TWFwLkVudW1WYWx1ZS5CQVosIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVsZCgpLmdl
dCgzKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMywgbWVzc2FnZS5nZXRJbnQzMlRvTWVzc2FnZUZp
ZWxkKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTEsIG1lc3NhZ2UuZ2V0SW50MzJUb01l
c3NhZ2VGaWVsZCgpLmdldCgxKS5nZXRWYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMjIsIG1l
c3NhZ2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpLmdldCgyKS5nZXRWYWx1ZSgpKTsKLSAgICBh
c3NlcnRFcXVhbHMoMzMsIG1lc3NhZ2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpLmdldCgzKS5n
ZXRWYWx1ZSgpKTsKLQotICAgIGFzc2VydEVxdWFscygzLCBtZXNzYWdlLmdldFN0cmluZ1RvSW50
MzJGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExLCBtZXNzYWdlLmdldFN0cmlu
Z1RvSW50MzJGaWVsZCgpLmdldCgiMSIpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscygy
MiwgbWVzc2FnZS5nZXRTdHJpbmdUb0ludDMyRmllbGQoKS5nZXQoIjIiKS5pbnRWYWx1ZSgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoMzMsIG1lc3NhZ2UuZ2V0U3RyaW5nVG9JbnQzMkZpZWxkKCkuZ2V0
KCIzIikuaW50VmFsdWUoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlTWFwVmFsdWVz
KFRlc3RNYXAuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJU
b0ludDMyRmllbGQoKS5wdXQoMSwgMTExKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRv
SW50MzJGaWVsZCgpLnJlbW92ZSgyKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvSW50
MzJGaWVsZCgpLnB1dCg0LCA0NCk7Ci0KLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvU3Ry
aW5nRmllbGQoKS5wdXQoMSwgIjExMSIpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9T
dHJpbmdGaWVsZCgpLnJlbW92ZSgyKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvU3Ry
aW5nRmllbGQoKS5wdXQoNCwgIjQ0Iik7Ci0KLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRv
Qnl0ZXNGaWVsZCgpLnB1dCgxLCBUZXN0VXRpbC50b0J5dGVzKCIxMTEiKSk7Ci0gICAgYnVpbGRl
ci5nZXRNdXRhYmxlSW50MzJUb0J5dGVzRmllbGQoKS5yZW1vdmUoMik7Ci0gICAgYnVpbGRlci5n
ZXRNdXRhYmxlSW50MzJUb0J5dGVzRmllbGQoKS5wdXQoNCwgVGVzdFV0aWwudG9CeXRlcygiNDQi
KSk7Ci0KLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvRW51bUZpZWxkKCkucHV0KDEsIFRl
c3RNYXAuRW51bVZhbHVlLkJBUik7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0VudW1G
aWVsZCgpLnJlbW92ZSgyKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvRW51bUZpZWxk
KCkucHV0KDQsIFRlc3RNYXAuRW51bVZhbHVlLlFVWCk7Ci0KLSAgICBidWlsZGVyLmdldE11dGFi
bGVJbnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KAotICAgICAgICAxLCBNZXNzYWdlVmFsdWUubmV3
QnVpbGRlcigpLnNldFZhbHVlKDExMSkuYnVpbGQoKSk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxl
SW50MzJUb01lc3NhZ2VGaWVsZCgpLnJlbW92ZSgyKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJ
bnQzMlRvTWVzc2FnZUZpZWxkKCkucHV0KAotICAgICAgICA0LCBNZXNzYWdlVmFsdWUubmV3QnVp
bGRlcigpLnNldFZhbHVlKDQ0KS5idWlsZCgpKTsKLQotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZVN0
cmluZ1RvSW50MzJGaWVsZCgpLnB1dCgiMSIsIDExMSk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxl
U3RyaW5nVG9JbnQzMkZpZWxkKCkucmVtb3ZlKCIyIik7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxl
U3RyaW5nVG9JbnQzMkZpZWxkKCkucHV0KCI0IiwgNDQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IGFzc2VydE1hcFZhbHVlc1VwZGF0ZWQoVGVzdE1hcCBtZXNzYWdlKSB7Ci0gICAgYXNzZXJ0RXF1
YWxzKDMsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5zaXplKCkpOwotICAgIGFzc2Vy
dEVxdWFscygxMTEsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5nZXQoMSkuaW50VmFs
dWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMzLCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxk
KCkuZ2V0KDMpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscyg0NCwgbWVzc2FnZS5nZXRJ
bnQzMlRvSW50MzJGaWVsZCgpLmdldCg0KS5pbnRWYWx1ZSgpKTsKLQotICAgIGFzc2VydEVxdWFs
cygzLCBtZXNzYWdlLmdldEludDMyVG9TdHJpbmdGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCIxMTEiLCBtZXNzYWdlLmdldEludDMyVG9TdHJpbmdGaWVsZCgpLmdldCgxKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKCIzMyIsIG1lc3NhZ2UuZ2V0SW50MzJUb1N0cmluZ0ZpZWxkKCkuZ2V0
KDMpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjQ0IiwgbWVzc2FnZS5nZXRJbnQzMlRvU3RyaW5nRmll
bGQoKS5nZXQoNCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0SW50MzJUb0J5
dGVzRmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0VXRpbC50b0J5dGVzKCIx
MTEiKSwgbWVzc2FnZS5nZXRJbnQzMlRvQnl0ZXNGaWVsZCgpLmdldCgxKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKFRlc3RVdGlsLnRvQnl0ZXMoIjMzIiksIG1lc3NhZ2UuZ2V0SW50MzJUb0J5dGVzRmll
bGQoKS5nZXQoMykpOwotICAgIGFzc2VydEVxdWFscyhUZXN0VXRpbC50b0J5dGVzKCI0NCIpLCBt
ZXNzYWdlLmdldEludDMyVG9CeXRlc0ZpZWxkKCkuZ2V0KDQpKTsKLQotICAgIGFzc2VydEVxdWFs
cygzLCBtZXNzYWdlLmdldEludDMyVG9FbnVtRmllbGQoKS5zaXplKCkpOwotICAgIGFzc2VydEVx
dWFscyhUZXN0TWFwLkVudW1WYWx1ZS5CQVIsIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVsZCgp
LmdldCgxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RNYXAuRW51bVZhbHVlLkJBWiwgbWVzc2Fn
ZS5nZXRJbnQzMlRvRW51bUZpZWxkKCkuZ2V0KDMpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdE1h
cC5FbnVtVmFsdWUuUVVYLCBtZXNzYWdlLmdldEludDMyVG9FbnVtRmllbGQoKS5nZXQoNCkpOwot
Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpLnNp
emUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExMSwgbWVzc2FnZS5nZXRJbnQzMlRvTWVzc2FnZUZp
ZWxkKCkuZ2V0KDEpLmdldFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscygzMywgbWVzc2FnZS5n
ZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkuZ2V0KDMpLmdldFZhbHVlKCkpOwotICAgIGFzc2VydEVx
dWFscyg0NCwgbWVzc2FnZS5nZXRJbnQzMlRvTWVzc2FnZUZpZWxkKCkuZ2V0KDQpLmdldFZhbHVl
KCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UuZ2V0U3RyaW5nVG9JbnQzMkZpZWxk
KCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTExLCBtZXNzYWdlLmdldFN0cmluZ1RvSW50
MzJGaWVsZCgpLmdldCgiMSIpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscygzMywgbWVz
c2FnZS5nZXRTdHJpbmdUb0ludDMyRmllbGQoKS5nZXQoIjMiKS5pbnRWYWx1ZSgpKTsKLSAgICBh
c3NlcnRFcXVhbHMoNDQsIG1lc3NhZ2UuZ2V0U3RyaW5nVG9JbnQzMkZpZWxkKCkuZ2V0KCI0Iiku
aW50VmFsdWUoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYXNzZXJ0TWFwVmFsdWVzQ2xlYXJl
ZChUZXN0TWFwIG1lc3NhZ2UpIHsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRJbnQz
MlRvSW50MzJGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0
SW50MzJUb1N0cmluZ0ZpZWxkKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2Fn
ZS5nZXRJbnQzMlRvQnl0ZXNGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1l
c3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAs
IG1lc3NhZ2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDAsIG1lc3NhZ2UuZ2V0U3RyaW5nVG9JbnQzMkZpZWxkKCkuc2l6ZSgpKTsKLSAgfQotICAK
LSAgcHVibGljIHZvaWQgdGVzdE11dGFibGVNYXBMaWZlY3ljbGUoKSB7Ci0gICAgVGVzdE1hcC5C
dWlsZGVyIGJ1aWxkZXIgPSBUZXN0TWFwLm5ld0J1aWxkZXIoKTsKLSAgICBNYXA8SW50ZWdlciwg
SW50ZWdlcj4gaW50TWFwID0gYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKTsK
LSAgICBpbnRNYXAucHV0KDEsIDIpOwotICAgIGFzc2VydEVxdWFscyhuZXdNYXAoMSwgMiksIGJ1
aWxkZXIuYnVpbGQoKS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpKTsKLSAgICB0cnkgewotICAgICAg
aW50TWFwLnB1dCgyLCAzKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRl
ZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICBh
c3NlcnRFcXVhbHMobmV3TWFwKDEsIDIpLCBidWlsZGVyLmdldEludDMyVG9JbnQzMkZpZWxkKCkp
OwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDIsIDMpOwot
ICAgIGFzc2VydEVxdWFscyhuZXdNYXAoMSwgMiwgMiwgMyksIGJ1aWxkZXIuZ2V0SW50MzJUb0lu
dDMyRmllbGQoKSk7Ci0KLSAgICBNYXA8SW50ZWdlciwgVGVzdE1hcC5FbnVtVmFsdWU+IGVudW1N
YXAgPSBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvRW51bUZpZWxkKCk7Ci0gICAgZW51bU1hcC5w
dXQoMSwgVGVzdE1hcC5FbnVtVmFsdWUuQkFSKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3TWFwKDEs
IFRlc3RNYXAuRW51bVZhbHVlLkJBUiksIGJ1aWxkZXIuYnVpbGQoKS5nZXRJbnQzMlRvRW51bUZp
ZWxkKCkpOwotICAgIHRyeSB7Ci0gICAgICBlbnVtTWFwLnB1dCgyLCBUZXN0TWFwLkVudW1WYWx1
ZS5GT08pOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9u
RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIGFzc2VydEVxdWFs
cyhuZXdNYXAoMSwgVGVzdE1hcC5FbnVtVmFsdWUuQkFSKSwgYnVpbGRlci5nZXRJbnQzMlRvRW51
bUZpZWxkKCkpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9FbnVtRmllbGQoKS5wdXQo
MiwgVGVzdE1hcC5FbnVtVmFsdWUuRk9PKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIG5l
d01hcCgxLCBUZXN0TWFwLkVudW1WYWx1ZS5CQVIsIDIsIFRlc3RNYXAuRW51bVZhbHVlLkZPTyks
Ci0gICAgICAgIGJ1aWxkZXIuZ2V0SW50MzJUb0VudW1GaWVsZCgpKTsKLSAgICAKLSAgICBNYXA8
SW50ZWdlciwgU3RyaW5nPiBzdHJpbmdNYXAgPSBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvU3Ry
aW5nRmllbGQoKTsKLSAgICBzdHJpbmdNYXAucHV0KDEsICIxIik7Ci0gICAgYXNzZXJ0RXF1YWxz
KG5ld01hcCgxLCAiMSIpLCBidWlsZGVyLmJ1aWxkKCkuZ2V0SW50MzJUb1N0cmluZ0ZpZWxkKCkp
OwotICAgIHRyeSB7Ci0gICAgICBzdHJpbmdNYXAucHV0KDIsICIyIik7Ci0gICAgICBmYWlsKCk7
Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAg
Ly8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCAiMSIpLCBidWls
ZGVyLmdldEludDMyVG9TdHJpbmdGaWVsZCgpKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQz
MlRvU3RyaW5nRmllbGQoKS5wdXQoMiwgIjIiKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAg
IG5ld01hcCgxLCAiMSIsIDIsICIyIiksCi0gICAgICAgIGJ1aWxkZXIuZ2V0SW50MzJUb1N0cmlu
Z0ZpZWxkKCkpOwotICAgIAotICAgIE1hcDxJbnRlZ2VyLCBUZXN0TWFwLk1lc3NhZ2VWYWx1ZT4g
bWVzc2FnZU1hcCA9IGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9NZXNzYWdlRmllbGQoKTsKLSAg
ICBtZXNzYWdlTWFwLnB1dCgxLCBUZXN0TWFwLk1lc3NhZ2VWYWx1ZS5nZXREZWZhdWx0SW5zdGFu
Y2UoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCBUZXN0TWFwLk1lc3NhZ2VWYWx1ZS5n
ZXREZWZhdWx0SW5zdGFuY2UoKSksCi0gICAgICAgIGJ1aWxkZXIuYnVpbGQoKS5nZXRJbnQzMlRv
TWVzc2FnZUZpZWxkKCkpOwotICAgIHRyeSB7Ci0gICAgICBtZXNzYWdlTWFwLnB1dCgyLCBUZXN0
TWFwLk1lc3NhZ2VWYWx1ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgICBmYWlsKCk7Ci0g
ICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8g
ZXhwZWN0ZWQKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCBUZXN0TWFwLk1lc3Nh
Z2VWYWx1ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSksCi0gICAgICAgIGJ1aWxkZXIuZ2V0SW50MzJU
b01lc3NhZ2VGaWVsZCgpKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvTWVzc2FnZUZp
ZWxkKCkucHV0KDIsIFRlc3RNYXAuTWVzc2FnZVZhbHVlLmdldERlZmF1bHRJbnN0YW5jZSgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIG5ld01hcCgxLCBUZXN0TWFwLk1lc3NhZ2VWYWx1
ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSwKLSAgICAgICAgICAgIDIsIFRlc3RNYXAuTWVzc2FnZVZh
bHVlLmdldERlZmF1bHRJbnN0YW5jZSgpKSwKLSAgICAgICAgYnVpbGRlci5nZXRJbnQzMlRvTWVz
c2FnZUZpZWxkKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE11dGFibGVNYXBMaWZlY3lj
bGVfY29sbGVjdGlvbnMoKSB7Ci0gICAgVGVzdE1hcC5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0TWFw
Lm5ld0J1aWxkZXIoKTsKLSAgICBNYXA8SW50ZWdlciwgSW50ZWdlcj4gaW50TWFwID0gYnVpbGRl
ci5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKTsKLSAgICBpbnRNYXAucHV0KDEsIDIpOwot
ICAgIGFzc2VydEVxdWFscyhuZXdNYXAoMSwgMiksIGJ1aWxkZXIuYnVpbGQoKS5nZXRJbnQzMlRv
SW50MzJGaWVsZCgpKTsKLSAgICB0cnkgewotICAgICAgaW50TWFwLnJlbW92ZSgyKTsKLSAgICAg
IGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICB0cnkgewotICAgICAgaW50TWFwLmVudHJ5
U2V0KCkucmVtb3ZlKG5ldyBPYmplY3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAo
VW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAg
ICB9Ci0gICAgdHJ5IHsKLSAgICAgIGludE1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCkucmVtb3Zl
KCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNl
cHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIGlu
dE1hcC5rZXlTZXQoKS5yZW1vdmUobmV3IE9iamVjdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9
IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBl
Y3RlZAotICAgIH0KLSAgICB0cnkgewotICAgICAgaW50TWFwLnZhbHVlcygpLnJlbW92ZShuZXcg
T2JqZWN0KCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0
aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIHRyeSB7Ci0g
ICAgICBpbnRNYXAudmFsdWVzKCkuaXRlcmF0b3IoKS5yZW1vdmUoKTsKLSAgICAgIGZhaWwoKTsK
LSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBleHBlY3RlZAotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMobmV3TWFwKDEsIDIpLCBpbnRNYXAp
OwotICAgIGFzc2VydEVxdWFscyhuZXdNYXAoMSwgMiksIGJ1aWxkZXIuZ2V0SW50MzJUb0ludDMy
RmllbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ld01hcCgxLCAyKSwgYnVpbGRlci5idWlsZCgp
LmdldEludDMyVG9JbnQzMkZpZWxkKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0R2V0
dGVyc0FuZFNldHRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TWFwLkJ1aWxkZXIg
YnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAgIFRlc3RNYXAgbWVzc2FnZSA9IGJ1
aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRNYXBWYWx1ZXNDbGVhcmVkKG1lc3NhZ2UpOwotCi0g
ICAgYnVpbGRlciA9IG1lc3NhZ2UudG9CdWlsZGVyKCk7Ci0gICAgc2V0TWFwVmFsdWVzKGJ1aWxk
ZXIpOwotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVz
U2V0KG1lc3NhZ2UpOwotCi0gICAgYnVpbGRlciA9IG1lc3NhZ2UudG9CdWlsZGVyKCk7Ci0gICAg
dXBkYXRlTWFwVmFsdWVzKGJ1aWxkZXIpOwotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7
Ci0gICAgYXNzZXJ0TWFwVmFsdWVzVXBkYXRlZChtZXNzYWdlKTsKLQotICAgIGJ1aWxkZXIgPSBt
ZXNzYWdlLnRvQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuY2xlYXIoKTsKLSAgICBtZXNzYWdlID0g
YnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydE1hcFZhbHVlc0NsZWFyZWQobWVzc2FnZSk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UHV0QWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAg
VGVzdE1hcC5CdWlsZGVyIHNvdXJjZUJ1aWxkZXIgPSBUZXN0TWFwLm5ld0J1aWxkZXIoKTsKLSAg
ICBzZXRNYXBWYWx1ZXMoc291cmNlQnVpbGRlcik7Ci0gICAgVGVzdE1hcCBzb3VyY2UgPSBzb3Vy
Y2VCdWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBUZXN0TWFwLkJ1aWxkZXIgZGVzdGluYXRpb24gPSBU
ZXN0TWFwLm5ld0J1aWxkZXIoKTsKLSAgICBjb3B5TWFwVmFsdWVzKHNvdXJjZSwgZGVzdGluYXRp
b24pOwotICAgIGFzc2VydE1hcFZhbHVlc1NldChkZXN0aW5hdGlvbi5idWlsZCgpKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RQdXRBbGxGb3JVbmtub3duRW51bVZhbHVlcygpIHRocm93cyBF
eGNlcHRpb24gewotICAgIFRlc3RNYXAuQnVpbGRlciBzb3VyY2VCdWlsZGVyID0gVGVzdE1hcC5u
ZXdCdWlsZGVyKCk7Ci0gICAgc291cmNlQnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0VudW1GaWVs
ZFZhbHVlKCkucHV0KDAsIDApOwotICAgIHNvdXJjZUJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9F
bnVtRmllbGRWYWx1ZSgpLnB1dCgxLCAxKTsKLSAgICBzb3VyY2VCdWlsZGVyLmdldE11dGFibGVJ
bnQzMlRvRW51bUZpZWxkVmFsdWUoKS5wdXQoMiwgMTAwMCk7ICAvLyB1bmtub3duIHZhbHVlLgot
ICAgIFRlc3RNYXAgc291cmNlID0gc291cmNlQnVpbGRlci5idWlsZCgpOwotCi0gICAgVGVzdE1h
cC5CdWlsZGVyIGRlc3RpbmF0aW9uQnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAg
IGRlc3RpbmF0aW9uQnVpbGRlci5wdXRBbGxJbnQzMlRvRW51bUZpZWxkVmFsdWUoc291cmNlLmdl
dEludDMyVG9FbnVtRmllbGRWYWx1ZSgpKTsKLSAgICBUZXN0TWFwIGRlc3RpbmF0aW9uID0gZGVz
dGluYXRpb25CdWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMCwgZGVzdGluYXRp
b24uZ2V0SW50MzJUb0VudW1GaWVsZFZhbHVlKCkuZ2V0KDApLmludFZhbHVlKCkpOwotICAgIGFz
c2VydEVxdWFscygxLCBkZXN0aW5hdGlvbi5nZXRJbnQzMlRvRW51bUZpZWxkVmFsdWUoKS5nZXQo
MSkuaW50VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEwMDAsIGRlc3RpbmF0aW9uLmdldElu
dDMyVG9FbnVtRmllbGRWYWx1ZSgpLmdldCgyKS5pbnRWYWx1ZSgpKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RTZXJpYWxpemVBbmRQYXJzZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRl
c3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAgc2V0TWFw
VmFsdWVzKGJ1aWxkZXIpOwotICAgIFRlc3RNYXAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsK
LSAgICBhc3NlcnRFcXVhbHMobWVzc2FnZS5nZXRTZXJpYWxpemVkU2l6ZSgpLCBtZXNzYWdlLnRv
Qnl0ZVN0cmluZygpLnNpemUoKSk7Ci0gICAgbWVzc2FnZSA9IFRlc3RNYXAucGFyc2VyKCkucGFy
c2VGcm9tKG1lc3NhZ2UudG9CeXRlU3RyaW5nKCkpOwotICAgIGFzc2VydE1hcFZhbHVlc1NldCht
ZXNzYWdlKTsKLQotICAgIGJ1aWxkZXIgPSBtZXNzYWdlLnRvQnVpbGRlcigpOwotICAgIHVwZGF0
ZU1hcFZhbHVlcyhidWlsZGVyKTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAg
IGFzc2VydEVxdWFscyhtZXNzYWdlLmdldFNlcmlhbGl6ZWRTaXplKCksIG1lc3NhZ2UudG9CeXRl
U3RyaW5nKCkuc2l6ZSgpKTsKLSAgICBtZXNzYWdlID0gVGVzdE1hcC5wYXJzZXIoKS5wYXJzZUZy
b20obWVzc2FnZS50b0J5dGVTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzVXBkYXRlZCht
ZXNzYWdlKTsKLQotICAgIGJ1aWxkZXIgPSBtZXNzYWdlLnRvQnVpbGRlcigpOwotICAgIGJ1aWxk
ZXIuY2xlYXIoKTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVx
dWFscyhtZXNzYWdlLmdldFNlcmlhbGl6ZWRTaXplKCksIG1lc3NhZ2UudG9CeXRlU3RyaW5nKCku
c2l6ZSgpKTsKLSAgICBtZXNzYWdlID0gVGVzdE1hcC5wYXJzZXIoKS5wYXJzZUZyb20obWVzc2Fn
ZS50b0J5dGVTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzQ2xlYXJlZChtZXNzYWdlKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZUZyb20oKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBUZXN0TWFwLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAg
IHNldE1hcFZhbHVlcyhidWlsZGVyKTsKLSAgICBUZXN0TWFwIG1lc3NhZ2UgPSBidWlsZGVyLmJ1
aWxkKCk7Ci0KLSAgICBUZXN0TWFwLkJ1aWxkZXIgb3RoZXIgPSBUZXN0TWFwLm5ld0J1aWxkZXIo
KTsKLSAgICBvdGhlci5tZXJnZUZyb20obWVzc2FnZSk7Ci0gICAgYXNzZXJ0TWFwVmFsdWVzU2V0
KG90aGVyLmJ1aWxkKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEVxdWFsc0FuZEhhc2hD
b2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gVGVzdCB0aGF0IGdlbmVyYXRlZCBlcXVh
bHMoKSBhbmQgaGFzaENvZGUoKSB3aWxsIGRpc3JlZ2FyZCB0aGUgb3JkZXIKLSAgICAvLyBvZiBt
YXAgZW50cmllcyB3aGVuIGNvbXBhcmluZy9oYXNoaW5nIG1hcCBmaWVsZHMuCi0KLSAgICAvLyBX
ZSBjYW4ndCBjb250cm9sIHRoZSBvcmRlciBvZiBlbGVtZW50cyBpbiBhIEhhc2hNYXAuIFRoZSBi
ZXN0IHdlIGNhbiBkbwotICAgIC8vIGhlcmUgaXMgdG8gYWRkIGVsZW1lbnRzIGluIGRpZmZlcmVu
dCBvcmRlci4KLSAgICBUZXN0TWFwLkJ1aWxkZXIgYjEgPSBUZXN0TWFwLm5ld0J1aWxkZXIoKTsK
LSAgICBiMS5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMSwgMik7Ci0gICAgYjEu
Z2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDMsIDQpOwotICAgIGIxLmdldE11dGFi
bGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCg1LCA2KTsKLSAgICBUZXN0TWFwIG0xID0gYjEuYnVp
bGQoKTsKLQotICAgIFRlc3RNYXAuQnVpbGRlciBiMiA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwot
ICAgIGIyLmdldE11dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCg1LCA2KTsKLSAgICBiMi5n
ZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMSwgMik7Ci0gICAgYjIuZ2V0TXV0YWJs
ZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDMsIDQpOwotICAgIFRlc3RNYXAgbTIgPSBiMi5idWls
ZCgpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG0xLCBtMik7Ci0gICAgYXNzZXJ0RXF1YWxzKG0xLmhh
c2hDb2RlKCksIG0yLmhhc2hDb2RlKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRpZCBjb21w
YXJlIG1hcCBmaWVsZHMuCi0gICAgYjIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0
KDEsIDApOwotICAgIG0yID0gYjIuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShtMS5lcXVhbHMo
bTIpKTsKLSAgICAvLyBEb24ndCBjaGVjayBtMS5oYXNoQ29kZSgpICE9IG0yLmhhc2hDb2RlKCkg
YmVjYXVzZSBpdCdzIG5vdCBndWFyYW50ZWVkCi0gICAgLy8gdG8gYmUgZGlmZmVyZW50LgotCi0g
ICAgLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBiLzE4NTQ5MTkwOiBpZiBhIG1hcCBpcyBhIHN1YnNl
dCBvZiB0aGUgb3RoZXIgbWFwLAotICAgIC8vIGVxdWFscygpIHNob3VsZCByZXR1cm4gZmFsc2Uu
Ci0gICAgYjIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucmVtb3ZlKDEpOwotICAgIG0y
ID0gYjIuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShtMS5lcXVhbHMobTIpKTsKLSAgICBhc3Nl
cnRGYWxzZShtMi5lcXVhbHMobTEpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWRC
dWlsZGVyT25DaGFuZ2VFdmVudFByb3BhZ2F0aW9uKCkgewotICAgIFRlc3RPbkNoYW5nZUV2ZW50
UHJvcGFnYXRpb24uQnVpbGRlciBwYXJlbnQgPQotICAgICAgICBUZXN0T25DaGFuZ2VFdmVudFBy
b3BhZ2F0aW9uLm5ld0J1aWxkZXIoKTsKLSAgICBwYXJlbnQuZ2V0T3B0aW9uYWxNZXNzYWdlQnVp
bGRlcigpLmdldE11dGFibGVJbnQzMlRvSW50MzJGaWVsZCgpLnB1dCgxLCAyKTsKLSAgICBUZXN0
T25DaGFuZ2VFdmVudFByb3BhZ2F0aW9uIG1lc3NhZ2UgPSBwYXJlbnQuYnVpbGQoKTsKLSAgICBh
c3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRPcHRpb25hbE1lc3NhZ2UoKS5nZXRJbnQzMlRvSW50
MzJGaWVsZCgpLmdldCgxKS5pbnRWYWx1ZSgpKTsKLQotICAgIC8vIE1ha2UgYSBjaGFuZ2UgdXNp
bmcgbmVzdGVkIGJ1aWxkZXIuCi0gICAgcGFyZW50LmdldE9wdGlvbmFsTWVzc2FnZUJ1aWxkZXIo
KS5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMSwgMyk7Ci0KLSAgICAvLyBTaG91
bGQgYmUgYWJsZSB0byBvYnNlcnZlIHRoZSBjaGFuZ2UuCi0gICAgbWVzc2FnZSA9IHBhcmVudC5i
dWlsZCgpOwotICAgIGFzc2VydEVxdWFscygzLCBtZXNzYWdlLmdldE9wdGlvbmFsTWVzc2FnZSgp
LmdldEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0KDEpLmludFZhbHVlKCkpOwotCi0gICAgLy8gTWFr
ZSBhbm90aGVyIGNoYW5nZSB1c2luZyBtZXJnZUZyb20oKQotICAgIFRlc3RNYXAuQnVpbGRlciBv
dGhlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAgIG90aGVyLmdldE11dGFibGVJbnQzMlRv
SW50MzJGaWVsZCgpLnB1dCgxLCA0KTsKLSAgICBwYXJlbnQuZ2V0T3B0aW9uYWxNZXNzYWdlQnVp
bGRlcigpLm1lcmdlRnJvbShvdGhlci5idWlsZCgpKTsKLQotICAgIC8vIFNob3VsZCBiZSBhYmxl
IHRvIG9ic2VydmUgdGhlIGNoYW5nZS4KLSAgICBtZXNzYWdlID0gcGFyZW50LmJ1aWxkKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDQsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxNZXNzYWdlKCkuZ2V0SW50MzJU
b0ludDMyRmllbGQoKS5nZXQoMSkuaW50VmFsdWUoKSk7Ci0KLSAgICAvLyBNYWtlIHlldCBhbm90
aGVyIGNoYW5nZSBieSBjbGVhcmluZyB0aGUgbmVzdGVkIGJ1aWxkZXIuCi0gICAgcGFyZW50Lmdl
dE9wdGlvbmFsTWVzc2FnZUJ1aWxkZXIoKS5jbGVhcigpOwotCi0gICAgLy8gU2hvdWxkIGJlIGFi
bGUgdG8gb2JzZXJ2ZSB0aGUgY2hhbmdlLgotICAgIG1lc3NhZ2UgPSBwYXJlbnQuYnVpbGQoKTsK
LSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRPcHRpb25hbE1lc3NhZ2UoKS5nZXRJbnQz
MlRvSW50MzJGaWVsZCgpLnNpemUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmVzdGVk
QnVpbGRlck9uQ2hhbmdlRXZlbnRQcm9wYWdhdGlvblJlZmxlY3Rpb24oKSB7Ci0gICAgRmllbGRE
ZXNjcmlwdG9yIGludE1hcEZpZWxkID0gZigiaW50MzJfdG9faW50MzJfZmllbGQiKTsKLSAgICAv
LyBDcmVhdGUgYW4gb3V0ZXIgbWVzc2FnZSBidWlsZGVyIHdpdGggbmVzdGVkIGJ1aWxkZXIuCi0g
ICAgVGVzdE9uQ2hhbmdlRXZlbnRQcm9wYWdhdGlvbi5CdWlsZGVyIHBhcmVudEJ1aWxkZXIgPQot
ICAgICAgICBUZXN0T25DaGFuZ2VFdmVudFByb3BhZ2F0aW9uLm5ld0J1aWxkZXIoKTsKLSAgICBU
ZXN0TWFwLkJ1aWxkZXIgdGVzdE1hcEJ1aWxkZXIgPSBwYXJlbnRCdWlsZGVyLmdldE9wdGlvbmFs
TWVzc2FnZUJ1aWxkZXIoKTsKLQotICAgIC8vIENyZWF0ZSBhIG1hcCBlbnRyeSBtZXNzYWdlLgot
ICAgIFRlc3RNYXAuQnVpbGRlciBlbnRyeUJ1aWxkZXIgPSBUZXN0TWFwLm5ld0J1aWxkZXIoKTsK
LSAgICBlbnRyeUJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDEsIDEp
OwotCi0gICAgLy8gUHV0IHRoZSBlbnRyeSBpbnRvIHRoZSBuZXN0ZWQgYnVpbGRlci4KLSAgICB0
ZXN0TWFwQnVpbGRlci5hZGRSZXBlYXRlZEZpZWxkKAotICAgICAgICBpbnRNYXBGaWVsZCwgZW50
cnlCdWlsZGVyLmdldFJlcGVhdGVkRmllbGQoaW50TWFwRmllbGQsIDApKTsKLQotICAgIC8vIFNo
b3VsZCBiZSBhYmxlIHRvIG9ic2VydmUgdGhlIGNoYW5nZS4KLSAgICBUZXN0T25DaGFuZ2VFdmVu
dFByb3BhZ2F0aW9uIG1lc3NhZ2UgPSBwYXJlbnRCdWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDEsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxNZXNzYWdlKCkuZ2V0SW50MzJUb0ludDMyRmll
bGQoKS5zaXplKCkpOwotCi0gICAgLy8gQ2hhbmdlIHRoZSBlbnRyeSB2YWx1ZS4KLSAgICBlbnRy
eUJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQzMkZpZWxkKCkucHV0KDEsIDQpOwotICAgIHRl
c3RNYXBCdWlsZGVyID0gcGFyZW50QnVpbGRlci5nZXRPcHRpb25hbE1lc3NhZ2VCdWlsZGVyKCk7
Ci0gICAgdGVzdE1hcEJ1aWxkZXIuc2V0UmVwZWF0ZWRGaWVsZCgKLSAgICAgICAgaW50TWFwRmll
bGQsIDAsIGVudHJ5QnVpbGRlci5nZXRSZXBlYXRlZEZpZWxkKGludE1hcEZpZWxkLCAwKSk7Ci0K
LSAgICAvLyBTaG91bGQgYmUgYWJsZSB0byBvYnNlcnZlIHRoZSBjaGFuZ2UuCi0gICAgbWVzc2Fn
ZSA9IHBhcmVudEJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoNCwKLSAgICAgICAg
bWVzc2FnZS5nZXRPcHRpb25hbE1lc3NhZ2UoKS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLmdldCgx
KS5pbnRWYWx1ZSgpKTsKLQotICAgIC8vIENsZWFyIHRoZSBuZXN0ZWQgYnVpbGRlci4KLSAgICB0
ZXN0TWFwQnVpbGRlciA9IHBhcmVudEJ1aWxkZXIuZ2V0T3B0aW9uYWxNZXNzYWdlQnVpbGRlcigp
OwotICAgIHRlc3RNYXBCdWlsZGVyLmNsZWFyRmllbGQoaW50TWFwRmllbGQpOwotCi0gICAgLy8g
U2hvdWxkIGJlIGFibGUgdG8gb2JzZXJ2ZSB0aGUgY2hhbmdlLgotICAgIG1lc3NhZ2UgPSBwYXJl
bnRCdWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0T3B0aW9u
YWxNZXNzYWdlKCkuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5zaXplKCkpOwotICB9Ci0KLSAgLy8g
VGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIHRlc3QgcmVmbGVjdGlvbiBBUEkuCi0K
LSAgcHJpdmF0ZSBzdGF0aWMgRmllbGREZXNjcmlwdG9yIGYoU3RyaW5nIG5hbWUpIHsKLSAgICBy
ZXR1cm4gVGVzdE1hcC5nZXREZXNjcmlwdG9yKCkuZmluZEZpZWxkQnlOYW1lKG5hbWUpOwotICB9
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0IGdldEZpZWxkVmFsdWUoTWVzc2FnZSBtYXBFbnRy
eSwgU3RyaW5nIG5hbWUpIHsKLSAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBtYXBFbnRyeS5n
ZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZShuYW1lKTsKLSAgICByZXR1cm4g
bWFwRW50cnkuZ2V0RmllbGQoZmllbGQpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgTWVzc2Fn
ZS5CdWlsZGVyIHNldEZpZWxkVmFsdWUoCi0gICAgICBNZXNzYWdlLkJ1aWxkZXIgbWFwRW50cnks
IFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpIHsKLSAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQg
PSBtYXBFbnRyeS5nZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZShuYW1lKTsK
LSAgICBtYXBFbnRyeS5zZXRGaWVsZChmaWVsZCwgdmFsdWUpOwotICAgIHJldHVybiBtYXBFbnRy
eTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0SGFzTWFwVmFsdWVzKE1lc3Nh
Z2UgbWVzc2FnZSwgU3RyaW5nIG5hbWUsIE1hcDw/LCA/PiB2YWx1ZXMpIHsKLSAgICBGaWVsZERl
c2NyaXB0b3IgZmllbGQgPSBmKG5hbWUpOwotICAgIGZvciAoT2JqZWN0IGVudHJ5IDogKExpc3Q8
Pz4pIG1lc3NhZ2UuZ2V0RmllbGQoZmllbGQpKSB7Ci0gICAgICBNZXNzYWdlIG1hcEVudHJ5ID0g
KE1lc3NhZ2UpIGVudHJ5OwotICAgICAgT2JqZWN0IGtleSA9IGdldEZpZWxkVmFsdWUobWFwRW50
cnksICJrZXkiKTsKLSAgICAgIE9iamVjdCB2YWx1ZSA9IGdldEZpZWxkVmFsdWUobWFwRW50cnks
ICJ2YWx1ZSIpOwotICAgICAgYXNzZXJ0VHJ1ZSh2YWx1ZXMuY29udGFpbnNLZXkoa2V5KSk7Ci0g
ICAgICBhc3NlcnRFcXVhbHModmFsdWUsIHZhbHVlcy5nZXQoa2V5KSk7Ci0gICAgfQotICAgIGFz
c2VydEVxdWFscyh2YWx1ZXMuc2l6ZSgpLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChm
aWVsZCkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxk
Q291bnQoZmllbGQpOyBpKyspIHsKLSAgICAgIE1lc3NhZ2UgbWFwRW50cnkgPSAoTWVzc2FnZSkg
bWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGZpZWxkLCBpKTsKLSAgICAgIE9iamVjdCBrZXkgPSBn
ZXRGaWVsZFZhbHVlKG1hcEVudHJ5LCAia2V5Iik7Ci0gICAgICBPYmplY3QgdmFsdWUgPSBnZXRG
aWVsZFZhbHVlKG1hcEVudHJ5LCAidmFsdWUiKTsKLSAgICAgIGFzc2VydFRydWUodmFsdWVzLmNv
bnRhaW5zS2V5KGtleSkpOwotICAgICAgYXNzZXJ0RXF1YWxzKHZhbHVlLCB2YWx1ZXMuZ2V0KGtl
eSkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIDxLZXlUeXBlLCBWYWx1ZVR5cGU+
Ci0gIE1lc3NhZ2UgbmV3TWFwRW50cnkoTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIsIFN0cmluZyBu
YW1lLCBLZXlUeXBlIGtleSwgVmFsdWVUeXBlIHZhbHVlKSB7Ci0gICAgRmllbGREZXNjcmlwdG9y
IGZpZWxkID0gYnVpbGRlci5nZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZShu
YW1lKTsKLSAgICBNZXNzYWdlLkJ1aWxkZXIgZW50cnlCdWlsZGVyID0gYnVpbGRlci5uZXdCdWls
ZGVyRm9yRmllbGQoZmllbGQpOwotICAgIEZpZWxkRGVzY3JpcHRvciBrZXlGaWVsZCA9IGVudHJ5
QnVpbGRlci5nZXREZXNjcmlwdG9yRm9yVHlwZSgpLmZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0g
ICAgRmllbGREZXNjcmlwdG9yIHZhbHVlRmllbGQgPSBlbnRyeUJ1aWxkZXIuZ2V0RGVzY3JpcHRv
ckZvclR5cGUoKS5maW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gICAgZW50cnlCdWlsZGVyLnNl
dEZpZWxkKGtleUZpZWxkLCBrZXkpOwotICAgIGVudHJ5QnVpbGRlci5zZXRGaWVsZCh2YWx1ZUZp
ZWxkLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGVudHJ5QnVpbGRlci5idWlsZCgpOwotICB9Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRNYXBWYWx1ZXMoTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIs
IFN0cmluZyBuYW1lLCBNYXA8PywgPz4gdmFsdWVzKSB7Ci0gICAgTGlzdDxNZXNzYWdlPiBlbnRy
eUxpc3QgPSBuZXcgQXJyYXlMaXN0PE1lc3NhZ2U+KCk7Ci0gICAgZm9yIChNYXAuRW50cnk8Pywg
Pz4gZW50cnkgOiB2YWx1ZXMuZW50cnlTZXQoKSkgewotICAgICAgZW50cnlMaXN0LmFkZChuZXdN
YXBFbnRyeShidWlsZGVyLCBuYW1lLCBlbnRyeS5nZXRLZXkoKSwgZW50cnkuZ2V0VmFsdWUoKSkp
OwotICAgIH0KLSAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBidWlsZGVyLmdldERlc2NyaXB0
b3JGb3JUeXBlKCkuZmluZEZpZWxkQnlOYW1lKG5hbWUpOwotICAgIGJ1aWxkZXIuc2V0RmllbGQo
ZmllbGQsIGVudHJ5TGlzdCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyA8S2V5VHlwZSwgVmFs
dWVUeXBlPgotICBNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiBtYXBGb3JWYWx1ZXMoCi0gICAgICBL
ZXlUeXBlIGtleTEsIFZhbHVlVHlwZSB2YWx1ZTEsIEtleVR5cGUga2V5MiwgVmFsdWVUeXBlIHZh
bHVlMikgewotICAgIE1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IG1hcCA9IG5ldyBIYXNoTWFwPEtl
eVR5cGUsIFZhbHVlVHlwZT4oKTsKLSAgICBtYXAucHV0KGtleTEsIHZhbHVlMSk7Ci0gICAgbWFw
LnB1dChrZXkyLCB2YWx1ZTIpOwotICAgIHJldHVybiBtYXA7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0UmVmbGVjdGlvbkFwaSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIEluIHJlZmxl
Y3Rpb24gQVBJLCBtYXAgZmllbGRzIGFyZSBqdXN0IHJlcGVhdGVkIG1lc3NhZ2UgZmllbGRzLgot
ICAgIFRlc3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAg
YnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMSwgMik7Ci0gICAgYnVp
bGRlci5nZXRNdXRhYmxlSW50MzJUb0ludDMyRmllbGQoKS5wdXQoMywgNCk7Ci0gICAgYnVpbGRl
ci5nZXRNdXRhYmxlSW50MzJUb01lc3NhZ2VGaWVsZCgpLnB1dCgKLSAgICAgICAgMTEsIE1lc3Nh
Z2VWYWx1ZS5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoMjIpLmJ1aWxkKCkpOwotICAgIGJ1aWxkZXIu
Z2V0TXV0YWJsZUludDMyVG9NZXNzYWdlRmllbGQoKS5wdXQoCi0gICAgICAgIDMzLCBNZXNzYWdl
VmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDQ0KS5idWlsZCgpKTsKLSAgICBUZXN0TWFwIG1l
c3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICAvLyBUZXN0IGdldEZpZWxkKCksIGdldFJl
cGVhdGVkRmllbGRDb3VudCgpLCBnZXRSZXBlYXRlZEZpZWxkKCkuCi0gICAgYXNzZXJ0SGFzTWFw
VmFsdWVzKG1lc3NhZ2UsICJpbnQzMl90b19pbnQzMl9maWVsZCIsCi0gICAgICAgIG1hcEZvclZh
bHVlcygxLCAyLCAzLCA0KSk7Ci0gICAgYXNzZXJ0SGFzTWFwVmFsdWVzKG1lc3NhZ2UsICJpbnQz
Ml90b19tZXNzYWdlX2ZpZWxkIiwKLSAgICAgICAgbWFwRm9yVmFsdWVzKAotICAgICAgICAgICAg
MTEsIE1lc3NhZ2VWYWx1ZS5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoMjIpLmJ1aWxkKCksCi0gICAg
ICAgICAgICAzMywgTWVzc2FnZVZhbHVlLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSg0NCkuYnVpbGQo
KSkpOwotCi0gICAgLy8gVGVzdCBjbGVhckZpZWxkKCkKLSAgICBidWlsZGVyLmNsZWFyRmllbGQo
ZigiaW50MzJfdG9faW50MzJfZmllbGQiKSk7Ci0gICAgYnVpbGRlci5jbGVhckZpZWxkKGYoImlu
dDMyX3RvX21lc3NhZ2VfZmllbGQiKSk7Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsK
LSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLnNpemUo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgp
LnNpemUoKSk7Ci0KLSAgICAvLyBUZXN0IHNldEZpZWxkKCkKLSAgICBzZXRNYXBWYWx1ZXMoYnVp
bGRlciwgImludDMyX3RvX2ludDMyX2ZpZWxkIiwKLSAgICAgICAgbWFwRm9yVmFsdWVzKDExLCAy
MiwgMzMsIDQ0KSk7Ci0gICAgc2V0TWFwVmFsdWVzKGJ1aWxkZXIsICJpbnQzMl90b19tZXNzYWdl
X2ZpZWxkIiwKLSAgICAgICAgbWFwRm9yVmFsdWVzKAotICAgICAgICAgICAgMTExLCBNZXNzYWdl
VmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDIyMikuYnVpbGQoKSwKLSAgICAgICAgICAgIDMz
MywgTWVzc2FnZVZhbHVlLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSg0NDQpLmJ1aWxkKCkpKTsKLSAg
ICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygyMiwgbWVzc2Fn
ZS5nZXRJbnQzMlRvSW50MzJGaWVsZCgpLmdldCgxMSkuaW50VmFsdWUoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDQ0LCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0KDMzKS5pbnRWYWx1
ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMjIyLCBtZXNzYWdlLmdldEludDMyVG9NZXNzYWdlRmll
bGQoKS5nZXQoMTExKS5nZXRWYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDQ0LCBtZXNzYWdl
LmdldEludDMyVG9NZXNzYWdlRmllbGQoKS5nZXQoMzMzKS5nZXRWYWx1ZSgpKTsKLQotICAgIC8v
IFRlc3QgYWRkUmVwZWF0ZWRGaWVsZAotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGaWVsZChmKCJp
bnQzMl90b19pbnQzMl9maWVsZCIpLAotICAgICAgICBuZXdNYXBFbnRyeShidWlsZGVyLCAiaW50
MzJfdG9faW50MzJfZmllbGQiLCA1NSwgNjYpKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRmll
bGQoZigiaW50MzJfdG9fbWVzc2FnZV9maWVsZCIpLAotICAgICAgICBuZXdNYXBFbnRyeShidWls
ZGVyLCAiaW50MzJfdG9fbWVzc2FnZV9maWVsZCIsIDU1NSwKLSAgICAgICAgICAgIE1lc3NhZ2VW
YWx1ZS5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoNjY2KS5idWlsZCgpKSk7Ci0gICAgbWVzc2FnZSA9
IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoNjYsIG1lc3NhZ2UuZ2V0SW50MzJU
b0ludDMyRmllbGQoKS5nZXQoNTUpLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscyg2NjYs
IG1lc3NhZ2UuZ2V0SW50MzJUb01lc3NhZ2VGaWVsZCgpLmdldCg1NTUpLmdldFZhbHVlKCkpOwot
Ci0gICAgLy8gVGVzdCBhZGRSZXBlYXRlZEZpZWxkIChvdmVycmlkaW5nIGV4aXN0aW5nIHZhbHVl
cykKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRmllbGQoZigiaW50MzJfdG9faW50MzJfZmllbGQi
KSwKLSAgICAgICAgbmV3TWFwRW50cnkoYnVpbGRlciwgImludDMyX3RvX2ludDMyX2ZpZWxkIiwg
NTUsIDU1KSk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZpZWxkKGYoImludDMyX3RvX21lc3Nh
Z2VfZmllbGQiKSwKLSAgICAgICAgbmV3TWFwRW50cnkoYnVpbGRlciwgImludDMyX3RvX21lc3Nh
Z2VfZmllbGQiLCA1NTUsCi0gICAgICAgICAgICBNZXNzYWdlVmFsdWUubmV3QnVpbGRlcigpLnNl
dFZhbHVlKDU1NSkuYnVpbGQoKSkpOwotICAgIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDU1LCBtZXNzYWdlLmdldEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0KDU1
KS5pbnRWYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNTU1LCBtZXNzYWdlLmdldEludDMyVG9N
ZXNzYWdlRmllbGQoKS5nZXQoNTU1KS5nZXRWYWx1ZSgpKTsKLQotICAgIC8vIFRlc3Qgc2V0UmVw
ZWF0ZWRGaWVsZAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVpbGRlci5nZXRSZXBlYXRlZEZp
ZWxkQ291bnQoZigiaW50MzJfdG9faW50MzJfZmllbGQiKSk7IGkrKykgewotICAgICAgTWVzc2Fn
ZSBtYXBFbnRyeSA9IChNZXNzYWdlKSBidWlsZGVyLmdldFJlcGVhdGVkRmllbGQoZigiaW50MzJf
dG9faW50MzJfZmllbGQiKSwgaSk7Ci0gICAgICBpbnQgb2xkS2V5ID0gKChJbnRlZ2VyKSBnZXRG
aWVsZFZhbHVlKG1hcEVudHJ5LCAia2V5IikpLmludFZhbHVlKCk7Ci0gICAgICBpbnQgb2xkVmFs
dWUgPSAoKEludGVnZXIpIGdldEZpZWxkVmFsdWUobWFwRW50cnksICJ2YWx1ZSIpKS5pbnRWYWx1
ZSgpOwotICAgICAgLy8gU3dhcCBrZXkgd2l0aCB2YWx1ZSBmb3IgZWFjaCBlbnRyeS4KLSAgICAg
IE1lc3NhZ2UuQnVpbGRlciBtYXBFbnRyeUJ1aWxkZXIgPSBtYXBFbnRyeS50b0J1aWxkZXIoKTsK
LSAgICAgIHNldEZpZWxkVmFsdWUobWFwRW50cnlCdWlsZGVyLCAia2V5Iiwgb2xkVmFsdWUpOwot
ICAgICAgc2V0RmllbGRWYWx1ZShtYXBFbnRyeUJ1aWxkZXIsICJ2YWx1ZSIsIG9sZEtleSk7Ci0g
ICAgICBidWlsZGVyLnNldFJlcGVhdGVkRmllbGQoZigiaW50MzJfdG9faW50MzJfZmllbGQiKSwg
aSwgbWFwRW50cnlCdWlsZGVyLmJ1aWxkKCkpOwotICAgIH0KLSAgICBtZXNzYWdlID0gYnVpbGRl
ci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygxMSwgbWVzc2FnZS5nZXRJbnQzMlRvSW50MzJG
aWVsZCgpLmdldCgyMikuaW50VmFsdWUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMzLCBtZXNzYWdl
LmdldEludDMyVG9JbnQzMkZpZWxkKCkuZ2V0KDQ0KS5pbnRWYWx1ZSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoNTUsIG1lc3NhZ2UuZ2V0SW50MzJUb0ludDMyRmllbGQoKS5nZXQoNTUpLmludFZhbHVl
KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFRleHRGb3JtYXQoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0TWFwLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigp
OwotICAgIHNldE1hcFZhbHVlcyhidWlsZGVyKTsKLSAgICBUZXN0TWFwIG1lc3NhZ2UgPSBidWls
ZGVyLmJ1aWxkKCk7Ci0KLSAgICBTdHJpbmcgdGV4dERhdGEgPSBUZXh0Rm9ybWF0LnByaW50VG9T
dHJpbmcobWVzc2FnZSk7Ci0KLSAgICBidWlsZGVyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0g
ICAgVGV4dEZvcm1hdC5tZXJnZSh0ZXh0RGF0YSwgYnVpbGRlcik7Ci0gICAgbWVzc2FnZSA9IGJ1
aWxkZXIuYnVpbGQoKTsKLQotICAgIGFzc2VydE1hcFZhbHVlc1NldChtZXNzYWdlKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3REeW5hbWljTWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIFRlc3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAg
c2V0TWFwVmFsdWVzKGJ1aWxkZXIpOwotICAgIFRlc3RNYXAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVp
bGQoKTsKLQotICAgIE1lc3NhZ2UgZHluYW1pY0RlZmF1bHRJbnN0YW5jZSA9Ci0gICAgICAgIER5
bmFtaWNNZXNzYWdlLmdldERlZmF1bHRJbnN0YW5jZShUZXN0TWFwLmdldERlc2NyaXB0b3IoKSk7
Ci0gICAgTWVzc2FnZSBkeW5hbWljTWVzc2FnZSA9IGR5bmFtaWNEZWZhdWx0SW5zdGFuY2UKLSAg
ICAgICAgLm5ld0J1aWxkZXJGb3JUeXBlKCkubWVyZ2VGcm9tKG1lc3NhZ2UudG9CeXRlU3RyaW5n
KCkpLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMobWVzc2FnZSwgZHluYW1pY01lc3NhZ2Up
OwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmhhc2hDb2RlKCksIGR5bmFtaWNNZXNzYWdlLmhh
c2hDb2RlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlZmxlY3Rpb25FcXVhbHNBbmRI
YXNoQ29kZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFRlc3QgdGhhdCBnZW5lcmF0ZWQg
ZXF1YWxzKCkgYW5kIGhhc2hDb2RlKCkgd2lsbCBkaXNyZWdhcmQgdGhlIG9yZGVyCi0gICAgLy8g
b2YgbWFwIGVudHJpZXMgd2hlbiBjb21wYXJpbmcvaGFzaGluZyBtYXAgZmllbGRzLgotCi0gICAg
Ly8gV2UgdXNlIER5bmFtaWNNZXNzYWdlIHRvIHRlc3QgcmVmbGVjdGlvbiBiYXNlZCBlcXVhbHMo
KS9oYXNoQ29kZSgpLgotICAgIE1lc3NhZ2UgZHluYW1pY0RlZmF1bHRJbnN0YW5jZSA9Ci0gICAg
ICAgIER5bmFtaWNNZXNzYWdlLmdldERlZmF1bHRJbnN0YW5jZShUZXN0TWFwLmdldERlc2NyaXB0
b3IoKSk7Ci0gICAgRmllbGREZXNjcmlwdG9yIGZpZWxkID0gZigiaW50MzJfdG9faW50MzJfZmll
bGQiKTsKLQotICAgIE1lc3NhZ2UuQnVpbGRlciBiMSA9IGR5bmFtaWNEZWZhdWx0SW5zdGFuY2Uu
bmV3QnVpbGRlckZvclR5cGUoKTsKLSAgICBiMS5hZGRSZXBlYXRlZEZpZWxkKGZpZWxkLCBuZXdN
YXBFbnRyeShiMSwgImludDMyX3RvX2ludDMyX2ZpZWxkIiwgMSwgMikpOwotICAgIGIxLmFkZFJl
cGVhdGVkRmllbGQoZmllbGQsIG5ld01hcEVudHJ5KGIxLCAiaW50MzJfdG9faW50MzJfZmllbGQi
LCAzLCA0KSk7Ci0gICAgYjEuYWRkUmVwZWF0ZWRGaWVsZChmaWVsZCwgbmV3TWFwRW50cnkoYjEs
ICJpbnQzMl90b19pbnQzMl9maWVsZCIsIDUsIDYpKTsKLSAgICBNZXNzYWdlIG0xID0gYjEuYnVp
bGQoKTsKLQotICAgIE1lc3NhZ2UuQnVpbGRlciBiMiA9IGR5bmFtaWNEZWZhdWx0SW5zdGFuY2Uu
bmV3QnVpbGRlckZvclR5cGUoKTsKLSAgICBiMi5hZGRSZXBlYXRlZEZpZWxkKGZpZWxkLCBuZXdN
YXBFbnRyeShiMiwgImludDMyX3RvX2ludDMyX2ZpZWxkIiwgNSwgNikpOwotICAgIGIyLmFkZFJl
cGVhdGVkRmllbGQoZmllbGQsIG5ld01hcEVudHJ5KGIyLCAiaW50MzJfdG9faW50MzJfZmllbGQi
LCAxLCAyKSk7Ci0gICAgYjIuYWRkUmVwZWF0ZWRGaWVsZChmaWVsZCwgbmV3TWFwRW50cnkoYjIs
ICJpbnQzMl90b19pbnQzMl9maWVsZCIsIDMsIDQpKTsKLSAgICBNZXNzYWdlIG0yID0gYjIuYnVp
bGQoKTsKLQotICAgIGFzc2VydEVxdWFscyhtMSwgbTIpOwotICAgIGFzc2VydEVxdWFscyhtMS5o
YXNoQ29kZSgpLCBtMi5oYXNoQ29kZSgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBkaWQgY29t
cGFyZSBtYXAgZmllbGRzLgotICAgIGIyLnNldFJlcGVhdGVkRmllbGQoZmllbGQsIDAsIG5ld01h
cEVudHJ5KGIxLCAiaW50MzJfdG9faW50MzJfZmllbGQiLCAwLCAwKSk7Ci0gICAgbTIgPSBiMi5i
dWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG0xLmVxdWFscyhtMikpOwotICAgIC8vIERvbid0IGNo
ZWNrIG0xLmhhc2hDb2RlKCkgIT0gbTIuaGFzaENvZGUoKSBiZWNhdXNlIGl0J3Mgbm90IGd1YXJh
bnRlZWQKLSAgICAvLyB0byBiZSBkaWZmZXJlbnQuCi0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
VW5rbm93bkVudW1WYWx1ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TWFwLkJ1aWxk
ZXIgYnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJs
ZUludDMyVG9FbnVtRmllbGRWYWx1ZSgpLnB1dCgwLCAwKTsKLSAgICBidWlsZGVyLmdldE11dGFi
bGVJbnQzMlRvRW51bUZpZWxkVmFsdWUoKS5wdXQoMSwgMSk7Ci0gICAgYnVpbGRlci5nZXRNdXRh
YmxlSW50MzJUb0VudW1GaWVsZFZhbHVlKCkucHV0KDIsIDEwMDApOyAgLy8gdW5rbm93biB2YWx1
ZS4KLSAgICBUZXN0TWFwIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRF
cXVhbHMoVGVzdE1hcC5FbnVtVmFsdWUuRk9PLAotICAgICAgICBtZXNzYWdlLmdldEludDMyVG9F
bnVtRmllbGQoKS5nZXQoMCkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0TWFwLkVudW1WYWx1ZS5C
QVIsCi0gICAgICAgIG1lc3NhZ2UuZ2V0SW50MzJUb0VudW1GaWVsZCgpLmdldCgxKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKFRlc3RNYXAuRW51bVZhbHVlLlVOUkVDT0dOSVpFRCwKLSAgICAgICAgbWVz
c2FnZS5nZXRJbnQzMlRvRW51bUZpZWxkKCkuZ2V0KDIpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTAw
MCwgbWVzc2FnZS5nZXRJbnQzMlRvRW51bUZpZWxkVmFsdWUoKS5nZXQoMikuaW50VmFsdWUoKSk7
Ci0KLSAgICAvLyBVbmtub3duIGVudW0gdmFsdWVzIHNob3VsZCBiZSBwcmVzZXJ2ZWQgYWZ0ZXI6
Ci0gICAgLy8gICAxLiBTZXJpYWxpemF0aW9uIGFuZCBwYXJzaW5nLgotICAgIC8vICAgMi4gdG9C
dWlsZCgpLgotICAgIC8vICAgMy4gbWVyZ2VGcm9tKCkuCi0gICAgbWVzc2FnZSA9IFRlc3RNYXAu
cGFyc2VGcm9tKG1lc3NhZ2UudG9CeXRlU3RyaW5nKCkpOwotICAgIGFzc2VydEVxdWFscygxMDAw
LCBtZXNzYWdlLmdldEludDMyVG9FbnVtRmllbGRWYWx1ZSgpLmdldCgyKS5pbnRWYWx1ZSgpKTsK
LSAgICBidWlsZGVyID0gbWVzc2FnZS50b0J1aWxkZXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTAw
MCwgYnVpbGRlci5nZXRJbnQzMlRvRW51bUZpZWxkVmFsdWUoKS5nZXQoMikuaW50VmFsdWUoKSk7
Ci0gICAgYnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigpLm1lcmdlRnJvbShtZXNzYWdlKTsK
LSAgICBhc3NlcnRFcXVhbHMoMTAwMCwgYnVpbGRlci5nZXRJbnQzMlRvRW51bUZpZWxkVmFsdWUo
KS5nZXQoMikuaW50VmFsdWUoKSk7Ci0KLSAgICAvLyBoYXNoQ29kZSgpL2VxdWFscygpIHNob3Vs
ZCB0YWtlIHVua25vd24gZW51bSB2YWx1ZXMgaW50byBhY2NvdW50LgotICAgIGJ1aWxkZXIuZ2V0
TXV0YWJsZUludDMyVG9FbnVtRmllbGRWYWx1ZSgpLnB1dCgyLCAxMDAxKTsKLSAgICBUZXN0TWFw
IG1lc3NhZ2UyID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuaGFz
aENvZGUoKSA9PSBtZXNzYWdlMi5oYXNoQ29kZSgpKTsKLSAgICBhc3NlcnRGYWxzZShtZXNzYWdl
LmVxdWFscyhtZXNzYWdlMikpOwotICAgIC8vIFVua25vd24gdmFsdWVzIHdpbGwgYmUgY29udmVy
dGVkIHRvIFVOUkVDT0dOSVpFRCBzbyB0aGUgcmVzdWx0ZWQgZW51bSBtYXAKLSAgICAvLyBzaG91
bGQgYmUgdGhlIHNhbWUuCi0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmdldEludDMyVG9FbnVtRmll
bGQoKS5lcXVhbHMobWVzc2FnZTIuZ2V0SW50MzJUb0VudW1GaWVsZCgpKSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0VW5rbm93bkVudW1WYWx1ZXNJblJlZmxlY3Rpb25BcGkoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBUZXN0TWFwLmdldERlc2Ny
aXB0b3IoKTsKLSAgICBFbnVtRGVzY3JpcHRvciBlbnVtRGVzY3JpcHRvciA9IFRlc3RNYXAuRW51
bVZhbHVlLmdldERlc2NyaXB0b3IoKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBkZXNj
cmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgiaW50MzJfdG9fZW51bV9maWVsZCIpOwotCi0gICAgTWFw
PEludGVnZXIsIEludGVnZXI+IGRhdGEgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigp
OwotICAgIGRhdGEucHV0KDAsIDApOwotICAgIGRhdGEucHV0KDEsIDEpOwotICAgIGRhdGEucHV0
KDIsIDEwMDApOyAgLy8gdW5rbm93biB2YWx1ZS4KLQotICAgIFRlc3RNYXAuQnVpbGRlciBidWls
ZGVyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAgZm9yIChNYXAuRW50cnk8SW50ZWdlciwg
SW50ZWdlcj4gZW50cnkgOiBkYXRhLmVudHJ5U2V0KCkpIHsKLSAgICAgIGJ1aWxkZXIuZ2V0TXV0
YWJsZUludDMyVG9FbnVtRmllbGRWYWx1ZSgpLnB1dChlbnRyeS5nZXRLZXkoKSwgZW50cnkuZ2V0
VmFsdWUoKSk7Ci0gICAgfQotCi0gICAgLy8gVHJ5IHRvIHJlYWQgdW5rbm93biBlbnVtIHZhbHVl
cyB1c2luZyByZWZsZWN0aW9uIEFQSS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1aWxkZXIu
Z2V0UmVwZWF0ZWRGaWVsZENvdW50KGZpZWxkKTsgaSsrKSB7Ci0gICAgICBNZXNzYWdlIG1hcEVu
dHJ5ID0gKE1lc3NhZ2UpIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRGaWVsZChmaWVsZCwgaSk7Ci0gICAg
ICBpbnQga2V5ID0gKChJbnRlZ2VyKSBnZXRGaWVsZFZhbHVlKG1hcEVudHJ5LCAia2V5IikpLmlu
dFZhbHVlKCk7Ci0gICAgICBpbnQgdmFsdWUgPSAoKEVudW1WYWx1ZURlc2NyaXB0b3IpIGdldEZp
ZWxkVmFsdWUobWFwRW50cnksICJ2YWx1ZSIpKS5nZXROdW1iZXIoKTsKLSAgICAgIGFzc2VydEVx
dWFscyhkYXRhLmdldChrZXkpLmludFZhbHVlKCksIHZhbHVlKTsKLSAgICAgIE1lc3NhZ2UuQnVp
bGRlciBtYXBFbnRyeUJ1aWxkZXIgPSBtYXBFbnRyeS50b0J1aWxkZXIoKTsKLSAgICAgIC8vIElu
Y3JlYXNlIHRoZSB2YWx1ZSBieSAxLgotICAgICAgc2V0RmllbGRWYWx1ZShtYXBFbnRyeUJ1aWxk
ZXIsICJ2YWx1ZSIsCi0gICAgICAgICAgZW51bURlc2NyaXB0b3IuZmluZFZhbHVlQnlOdW1iZXJD
cmVhdGluZ0lmVW5rbm93bih2YWx1ZSArIDEpKTsKLSAgICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRG
aWVsZChmaWVsZCwgaSwgbWFwRW50cnlCdWlsZGVyLmJ1aWxkKCkpOwotICAgIH0KLQotICAgIC8v
IFZlcmlmeSB0aGF0IGVudW0gdmFsdWVzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgdXBkYXRlZC4K
LSAgICBUZXN0TWFwIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgZm9yIChNYXAuRW50
cnk8SW50ZWdlciwgSW50ZWdlcj4gZW50cnkgOiBtZXNzYWdlLmdldEludDMyVG9FbnVtRmllbGRW
YWx1ZSgpLmVudHJ5U2V0KCkpIHsKLSAgICAgIGFzc2VydEVxdWFscyhkYXRhLmdldChlbnRyeS5n
ZXRLZXkoKSkgKyAxLCBlbnRyeS5nZXRWYWx1ZSgpLmludFZhbHVlKCkpOwotICAgIH0KLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RJdGVyYXRpb25PcmRlcigpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIFRlc3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAg
c2V0TWFwVmFsdWVzKGJ1aWxkZXIpOwotICAgIFRlc3RNYXAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVp
bGQoKTsKLQotICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KCIxIiwgIjIiLCAiMyIpLAot
ICAgICAgICBuZXcgQXJyYXlMaXN0PFN0cmluZz4obWVzc2FnZS5nZXRTdHJpbmdUb0ludDMyRmll
bGQoKS5rZXlTZXQoKSkpOwotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyA8SywgVj4gTWFwPEss
IFY+IG5ld01hcChLIGtleTEsIFYgdmFsdWUxKSB7Ci0gICAgTWFwPEssIFY+IG1hcCA9IG5ldyBI
YXNoTWFwPEssIFY+KCk7Ci0gICAgbWFwLnB1dChrZXkxLCB2YWx1ZTEpOwotICAgIHJldHVybiBt
YXA7Ci0gIH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIDxLLCBWPiBNYXA8SywgVj4gbmV3TWFwKEsg
a2V5MSwgViB2YWx1ZTEsIEsga2V5MiwgViB2YWx1ZTIpIHsKLSAgICBNYXA8SywgVj4gbWFwID0g
bmV3IEhhc2hNYXA8SywgVj4oKTsKLSAgICBtYXAucHV0KGtleTEsIHZhbHVlMSk7Ci0gICAgbWFw
LnB1dChrZXkyLCB2YWx1ZTIpOwotICAgIHJldHVybiBtYXA7Ci0gIH0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9NZXNzYWdlVGVzdC5q
YXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL01lc3NhZ2VU
ZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjZDFhYmE3ODBlN2Q0Mjlh
OTM1ZjkzN2M2ZTVhMDZkMzJmMjVlZmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L01lc3NhZ2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTMgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1
ZjsKLQotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uRm9yZWlnbk1lc3Nh
Z2U7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5UZXN0QWxsRXh0ZW5z
aW9uczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RBbGxUeXBl
czsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RSZXF1aXJlZDsK
LWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RSZXF1aXJlZEZvcmVp
Z247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0
aWwuTGlzdDsKLQotLyoqCi0gKiBNaXNjLiB1bml0IHRlc3RzIGZvciBtZXNzYWdlIG9wZXJhdGlv
bnMgdGhhdCBhcHBseSB0byBib3RoIGdlbmVyYXRlZAotICogYW5kIGR5bmFtaWMgbWVzc2FnZXMu
Ci0gKgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqLwotcHVi
bGljIGNsYXNzIE1lc3NhZ2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotICAvLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
ICAvLyBNZXNzYWdlLW1lcmdpbmcgdGVzdHMuCi0KLSAgc3RhdGljIGZpbmFsIFRlc3RBbGxUeXBl
cyBNRVJHRV9TT1VSQ0UgPQotICAgIFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkKLSAgICAgIC5z
ZXRPcHRpb25hbEludDMyKDEpCi0gICAgICAuc2V0T3B0aW9uYWxTdHJpbmcoImZvbyIpCi0gICAg
ICAuc2V0T3B0aW9uYWxGb3JlaWduTWVzc2FnZShGb3JlaWduTWVzc2FnZS5nZXREZWZhdWx0SW5z
dGFuY2UoKSkKLSAgICAgIC5hZGRSZXBlYXRlZFN0cmluZygiYmFyIikKLSAgICAgIC5idWlsZCgp
OwotCi0gIHN0YXRpYyBmaW5hbCBUZXN0QWxsVHlwZXMgTUVSR0VfREVTVCA9Ci0gICAgVGVzdEFs
bFR5cGVzLm5ld0J1aWxkZXIoKQotICAgICAgLnNldE9wdGlvbmFsSW50NjQoMikKLSAgICAgIC5z
ZXRPcHRpb25hbFN0cmluZygiYmF6IikKLSAgICAgIC5zZXRPcHRpb25hbEZvcmVpZ25NZXNzYWdl
KEZvcmVpZ25NZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRDKDMpLmJ1aWxkKCkpCi0gICAgICAuYWRk
UmVwZWF0ZWRTdHJpbmcoInF1eCIpCi0gICAgICAuYnVpbGQoKTsKLQotICBzdGF0aWMgZmluYWwg
U3RyaW5nIE1FUkdFX1JFU1VMVF9URVhUID0KLSAgICAgICJvcHRpb25hbF9pbnQzMjogMVxuIiAr
Ci0gICAgICAib3B0aW9uYWxfaW50NjQ6IDJcbiIgKwotICAgICAgIm9wdGlvbmFsX3N0cmluZzog
XCJmb29cIlxuIiArCi0gICAgICAib3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlIHtcbiIgKwotICAg
ICAgIiAgYzogM1xuIiArCi0gICAgICAifVxuIiArCi0gICAgICAicmVwZWF0ZWRfc3RyaW5nOiBc
InF1eFwiXG4iICsKLSAgICAgICJyZXBlYXRlZF9zdHJpbmc6IFwiYmFyXCJcbiI7Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdE1lcmdlRnJvbSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxU
eXBlcyByZXN1bHQgPQotICAgICAgVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoTUVSR0VfREVTVCkK
LSAgICAgICAgLm1lcmdlRnJvbShNRVJHRV9TT1VSQ0UpLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRF
cXVhbHMoTUVSR0VfUkVTVUxUX1RFWFQsIHJlc3VsdC50b1N0cmluZygpKTsKLSAgfQotCi0gIC8q
KgotICAgKiBUZXN0IG1lcmdpbmcgYSBEeW5hbWljTWVzc2FnZSBpbnRvIGEgR2VuZXJhdGVkTWVz
c2FnZS4gIEFzIGxvbmcgYXMgdGhleQotICAgKiBoYXZlIHRoZSBzYW1lIGRlc2NyaXB0b3IsIHRo
aXMgc2hvdWxkIHdvcmssIGJ1dCBpdCBpcyBhbiBlbnRpcmVseSBkaWZmZXJlbnQKLSAgICogY29k
ZSBwYXRoLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1lcmdlRnJvbUR5bmFtaWMoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMgcmVzdWx0ID0KLSAgICAgIFRlc3RBbGxU
eXBlcy5uZXdCdWlsZGVyKE1FUkdFX0RFU1QpCi0gICAgICAgIC5tZXJnZUZyb20oRHluYW1pY01l
c3NhZ2UubmV3QnVpbGRlcihNRVJHRV9TT1VSQ0UpLmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgp
OwotCi0gICAgYXNzZXJ0RXF1YWxzKE1FUkdFX1JFU1VMVF9URVhULCByZXN1bHQudG9TdHJpbmco
KSk7Ci0gIH0KLQotICAvKiogVGVzdCBtZXJnaW5nIHR3byBEeW5hbWljTWVzc2FnZXMuICovCi0g
IHB1YmxpYyB2b2lkIHRlc3REeW5hbWljTWVyZ2VGcm9tKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgRHluYW1pY01lc3NhZ2UgcmVzdWx0ID0KLSAgICAgIER5bmFtaWNNZXNzYWdlLm5ld0J1aWxk
ZXIoTUVSR0VfREVTVCkKLSAgICAgICAgLm1lcmdlRnJvbShEeW5hbWljTWVzc2FnZS5uZXdCdWls
ZGVyKE1FUkdFX1NPVVJDRSkuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBhc3Nl
cnRFcXVhbHMoTUVSR0VfUkVTVUxUX1RFWFQsIHJlc3VsdC50b1N0cmluZygpKTsKLSAgfQotCi0g
IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0gIC8vIFJlcXVpcmVkLWZpZWxkLXJlbGF0ZWQgdGVzdHMuCi0KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgVGVzdFJlcXVpcmVkIFRFU1RfUkVRVUlSRURfVU5JTklUSUFMSVpF
RCA9Ci0gICAgVGVzdFJlcXVpcmVkLmdldERlZmF1bHRJbnN0YW5jZSgpOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBUZXN0UmVxdWlyZWQgVEVTVF9SRVFVSVJFRF9JTklUSUFMSVpFRCA9Ci0gICAg
VGVzdFJlcXVpcmVkLm5ld0J1aWxkZXIoKS5zZXRBKDEpLnNldEIoMikuc2V0QygzKS5idWlsZCgp
OwotCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXF1aXJlZCgpIHRocm93cyBFeGNlcHRpb24gewotICAg
IFRlc3RSZXF1aXJlZC5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0UmVxdWlyZWQubmV3QnVpbGRlcigp
OwotCi0gICAgYXNzZXJ0RmFsc2UoYnVpbGRlci5pc0luaXRpYWxpemVkKCkpOwotICAgIGJ1aWxk
ZXIuc2V0QSgxKTsKLSAgICBhc3NlcnRGYWxzZShidWlsZGVyLmlzSW5pdGlhbGl6ZWQoKSk7Ci0g
ICAgYnVpbGRlci5zZXRCKDEpOwotICAgIGFzc2VydEZhbHNlKGJ1aWxkZXIuaXNJbml0aWFsaXpl
ZCgpKTsKLSAgICBidWlsZGVyLnNldEMoMSk7Ci0gICAgYXNzZXJ0VHJ1ZShidWlsZGVyLmlzSW5p
dGlhbGl6ZWQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVxdWlyZWRGb3JlaWduKCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdFJlcXVpcmVkRm9yZWlnbi5CdWlsZGVyIGJ1aWxk
ZXIgPSBUZXN0UmVxdWlyZWRGb3JlaWduLm5ld0J1aWxkZXIoKTsKLQotICAgIGFzc2VydFRydWUo
YnVpbGRlci5pc0luaXRpYWxpemVkKCkpOwotCi0gICAgYnVpbGRlci5zZXRPcHRpb25hbE1lc3Nh
Z2UoVEVTVF9SRVFVSVJFRF9VTklOSVRJQUxJWkVEKTsKLSAgICBhc3NlcnRGYWxzZShidWlsZGVy
LmlzSW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBidWlsZGVyLnNldE9wdGlvbmFsTWVzc2FnZShURVNU
X1JFUVVJUkVEX0lOSVRJQUxJWkVEKTsKLSAgICBhc3NlcnRUcnVlKGJ1aWxkZXIuaXNJbml0aWFs
aXplZCgpKTsKLQotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRNZXNzYWdlKFRFU1RfUkVRVUlSRURf
VU5JTklUSUFMSVpFRCk7Ci0gICAgYXNzZXJ0RmFsc2UoYnVpbGRlci5pc0luaXRpYWxpemVkKCkp
OwotCi0gICAgYnVpbGRlci5zZXRSZXBlYXRlZE1lc3NhZ2UoMCwgVEVTVF9SRVFVSVJFRF9JTklU
SUFMSVpFRCk7Ci0gICAgYXNzZXJ0VHJ1ZShidWlsZGVyLmlzSW5pdGlhbGl6ZWQoKSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0UmVxdWlyZWRFeHRlbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsRXh0ZW5z
aW9ucy5uZXdCdWlsZGVyKCk7Ci0KLSAgICBhc3NlcnRUcnVlKGJ1aWxkZXIuaXNJbml0aWFsaXpl
ZCgpKTsKLQotICAgIGJ1aWxkZXIuc2V0RXh0ZW5zaW9uKFRlc3RSZXF1aXJlZC5zaW5nbGUsIFRF
U1RfUkVRVUlSRURfVU5JTklUSUFMSVpFRCk7Ci0gICAgYXNzZXJ0RmFsc2UoYnVpbGRlci5pc0lu
aXRpYWxpemVkKCkpOwotCi0gICAgYnVpbGRlci5zZXRFeHRlbnNpb24oVGVzdFJlcXVpcmVkLnNp
bmdsZSwgVEVTVF9SRVFVSVJFRF9JTklUSUFMSVpFRCk7Ci0gICAgYXNzZXJ0VHJ1ZShidWlsZGVy
LmlzSW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBidWlsZGVyLmFkZEV4dGVuc2lvbihUZXN0UmVxdWly
ZWQubXVsdGksIFRFU1RfUkVRVUlSRURfVU5JTklUSUFMSVpFRCk7Ci0gICAgYXNzZXJ0RmFsc2Uo
YnVpbGRlci5pc0luaXRpYWxpemVkKCkpOwotCi0gICAgYnVpbGRlci5zZXRFeHRlbnNpb24oVGVz
dFJlcXVpcmVkLm11bHRpLCAwLCBURVNUX1JFUVVJUkVEX0lOSVRJQUxJWkVEKTsKLSAgICBhc3Nl
cnRUcnVlKGJ1aWxkZXIuaXNJbml0aWFsaXplZCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3RSZXF1aXJlZER5bmFtaWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBEZXNjcmlwdG9ycy5E
ZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBUZXN0UmVxdWlyZWQuZ2V0RGVzY3JpcHRvcigpOwotICAg
IER5bmFtaWNNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciA9IER5bmFtaWNNZXNzYWdlLm5ld0J1aWxk
ZXIoZGVzY3JpcHRvcik7Ci0KLSAgICBhc3NlcnRGYWxzZShidWlsZGVyLmlzSW5pdGlhbGl6ZWQo
KSk7Ci0gICAgYnVpbGRlci5zZXRGaWVsZChkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgiYSIp
LCAxKTsKLSAgICBhc3NlcnRGYWxzZShidWlsZGVyLmlzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgYnVp
bGRlci5zZXRGaWVsZChkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgiYiIpLCAxKTsKLSAgICBh
c3NlcnRGYWxzZShidWlsZGVyLmlzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgYnVpbGRlci5zZXRGaWVs
ZChkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgiYyIpLCAxKTsKLSAgICBhc3NlcnRUcnVlKGJ1
aWxkZXIuaXNJbml0aWFsaXplZCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RSZXF1aXJl
ZER5bmFtaWNGb3JlaWduKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgRGVzY3JpcHRvcnMuRGVz
Y3JpcHRvciBkZXNjcmlwdG9yID0gVGVzdFJlcXVpcmVkRm9yZWlnbi5nZXREZXNjcmlwdG9yKCk7
Ci0gICAgRHluYW1pY01lc3NhZ2UuQnVpbGRlciBidWlsZGVyID0gRHluYW1pY01lc3NhZ2UubmV3
QnVpbGRlcihkZXNjcmlwdG9yKTsKLQotICAgIGFzc2VydFRydWUoYnVpbGRlci5pc0luaXRpYWxp
emVkKCkpOwotCi0gICAgYnVpbGRlci5zZXRGaWVsZChkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFt
ZSgib3B0aW9uYWxfbWVzc2FnZSIpLAotICAgICAgICAgICAgICAgICAgICAgVEVTVF9SRVFVSVJF
RF9VTklOSVRJQUxJWkVEKTsKLSAgICBhc3NlcnRGYWxzZShidWlsZGVyLmlzSW5pdGlhbGl6ZWQo
KSk7Ci0KLSAgICBidWlsZGVyLnNldEZpZWxkKGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJv
cHRpb25hbF9tZXNzYWdlIiksCi0gICAgICAgICAgICAgICAgICAgICBURVNUX1JFUVVJUkVEX0lO
SVRJQUxJWkVEKTsKLSAgICBhc3NlcnRUcnVlKGJ1aWxkZXIuaXNJbml0aWFsaXplZCgpKTsKLQot
ICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGaWVsZChkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgi
cmVwZWF0ZWRfbWVzc2FnZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX1JF
UVVJUkVEX1VOSU5JVElBTElaRUQpOwotICAgIGFzc2VydEZhbHNlKGJ1aWxkZXIuaXNJbml0aWFs
aXplZCgpKTsKLQotICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRGaWVsZChkZXNjcmlwdG9yLmZpbmRG
aWVsZEJ5TmFtZSgicmVwZWF0ZWRfbWVzc2FnZSIpLCAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBURVNUX1JFUVVJUkVEX0lOSVRJQUxJWkVEKTsKLSAgICBhc3NlcnRUcnVlKGJ1aWxk
ZXIuaXNJbml0aWFsaXplZCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmluaXRpYWxp
emVkRXhjZXB0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIFRlc3RS
ZXF1aXJlZC5uZXdCdWlsZGVyKCkuYnVpbGQoKTsKLSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRo
cm93biBhbiBleGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaCAoVW5pbml0aWFsaXplZE1lc3NhZ2VF
eGNlcHRpb24gZSkgewotICAgICAgYXNzZXJ0RXF1YWxzKCJNZXNzYWdlIG1pc3NpbmcgcmVxdWly
ZWQgZmllbGRzOiBhLCBiLCBjIiwgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RCdWlsZFBhcnRpYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBX
ZSdyZSBtb3N0bHkgdGVzdGluZyB0aGF0IG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgVGVz
dFJlcXVpcmVkIG1lc3NhZ2UgPSBUZXN0UmVxdWlyZWQubmV3QnVpbGRlcigpLmJ1aWxkUGFydGlh
bCgpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuaXNJbml0aWFsaXplZCgpKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3ROZXN0ZWRVbmluaXRpYWxpemVkRXhjZXB0aW9uKCkgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIFRlc3RSZXF1aXJlZEZvcmVpZ24ubmV3QnVpbGRl
cigpCi0gICAgICAgIC5zZXRPcHRpb25hbE1lc3NhZ2UoVEVTVF9SRVFVSVJFRF9VTklOSVRJQUxJ
WkVEKQotICAgICAgICAuYWRkUmVwZWF0ZWRNZXNzYWdlKFRFU1RfUkVRVUlSRURfVU5JTklUSUFM
SVpFRCkKLSAgICAgICAgLmFkZFJlcGVhdGVkTWVzc2FnZShURVNUX1JFUVVJUkVEX1VOSU5JVElB
TElaRUQpCi0gICAgICAgIC5idWlsZCgpOwotICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3du
IGFuIGV4Y2VwdGlvbi4iKTsKLSAgICB9IGNhdGNoIChVbmluaXRpYWxpemVkTWVzc2FnZUV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJNZXNzYWdlIG1pc3Npbmcg
cmVxdWlyZWQgZmllbGRzOiAiICsKLSAgICAgICAgIm9wdGlvbmFsX21lc3NhZ2UuYSwgIiArCi0g
ICAgICAgICJvcHRpb25hbF9tZXNzYWdlLmIsICIgKwotICAgICAgICAib3B0aW9uYWxfbWVzc2Fn
ZS5jLCAiICsKLSAgICAgICAgInJlcGVhdGVkX21lc3NhZ2VbMF0uYSwgIiArCi0gICAgICAgICJy
ZXBlYXRlZF9tZXNzYWdlWzBdLmIsICIgKwotICAgICAgICAicmVwZWF0ZWRfbWVzc2FnZVswXS5j
LCAiICsKLSAgICAgICAgInJlcGVhdGVkX21lc3NhZ2VbMV0uYSwgIiArCi0gICAgICAgICJyZXBl
YXRlZF9tZXNzYWdlWzFdLmIsICIgKwotICAgICAgICAicmVwZWF0ZWRfbWVzc2FnZVsxXS5jIiwK
LSAgICAgICAgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3RCdWlsZE5lc3RlZFBhcnRpYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBXZSdyZSBt
b3N0bHkgdGVzdGluZyB0aGF0IG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgVGVzdFJlcXVp
cmVkRm9yZWlnbiBtZXNzYWdlID0KLSAgICAgIFRlc3RSZXF1aXJlZEZvcmVpZ24ubmV3QnVpbGRl
cigpCi0gICAgICAgIC5zZXRPcHRpb25hbE1lc3NhZ2UoVEVTVF9SRVFVSVJFRF9VTklOSVRJQUxJ
WkVEKQotICAgICAgICAuYWRkUmVwZWF0ZWRNZXNzYWdlKFRFU1RfUkVRVUlSRURfVU5JTklUSUFM
SVpFRCkKLSAgICAgICAgLmFkZFJlcGVhdGVkTWVzc2FnZShURVNUX1JFUVVJUkVEX1VOSU5JVElB
TElaRUQpCi0gICAgICAgIC5idWlsZFBhcnRpYWwoKTsKLSAgICBhc3NlcnRGYWxzZShtZXNzYWdl
LmlzSW5pdGlhbGl6ZWQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VVbml0aXRp
YWxpemVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIFRlc3RSZXF1aXJl
ZC5wYXJzZUZyb20oQnl0ZVN0cmluZy5FTVBUWSk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0
aHJvd24gYW4gZXhjZXB0aW9uLiIpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZl
ckV4Y2VwdGlvbiBlKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoIk1lc3NhZ2UgbWlzc2luZyByZXF1
aXJlZCBmaWVsZHM6IGEsIGIsIGMiLCBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdFBhcnNlTmVzdGVkVW5pdGl0aWFsaXplZCgpIHRocm93cyBFeGNlcHRp
b24gewotICAgIEJ5dGVTdHJpbmcgZGF0YSA9Ci0gICAgICBUZXN0UmVxdWlyZWRGb3JlaWduLm5l
d0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxNZXNzYWdlKFRFU1RfUkVRVUlSRURfVU5J
TklUSUFMSVpFRCkKLSAgICAgICAgLmFkZFJlcGVhdGVkTWVzc2FnZShURVNUX1JFUVVJUkVEX1VO
SU5JVElBTElaRUQpCi0gICAgICAgIC5hZGRSZXBlYXRlZE1lc3NhZ2UoVEVTVF9SRVFVSVJFRF9V
TklOSVRJQUxJWkVEKQotICAgICAgICAuYnVpbGRQYXJ0aWFsKCkudG9CeXRlU3RyaW5nKCk7Ci0K
LSAgICB0cnkgewotICAgICAgVGVzdFJlcXVpcmVkRm9yZWlnbi5wYXJzZUZyb20oZGF0YSk7Ci0g
ICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLiIpOwotICAgIH0gY2F0
Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICBhc3NlcnRFcXVh
bHMoCi0gICAgICAgICJNZXNzYWdlIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzOiAiICsKLSAgICAg
ICAgIm9wdGlvbmFsX21lc3NhZ2UuYSwgIiArCi0gICAgICAgICJvcHRpb25hbF9tZXNzYWdlLmIs
ICIgKwotICAgICAgICAib3B0aW9uYWxfbWVzc2FnZS5jLCAiICsKLSAgICAgICAgInJlcGVhdGVk
X21lc3NhZ2VbMF0uYSwgIiArCi0gICAgICAgICJyZXBlYXRlZF9tZXNzYWdlWzBdLmIsICIgKwot
ICAgICAgICAicmVwZWF0ZWRfbWVzc2FnZVswXS5jLCAiICsKLSAgICAgICAgInJlcGVhdGVkX21l
c3NhZ2VbMV0uYSwgIiArCi0gICAgICAgICJyZXBlYXRlZF9tZXNzYWdlWzFdLmIsICIgKwotICAg
ICAgICAicmVwZWF0ZWRfbWVzc2FnZVsxXS5jIiwKLSAgICAgICAgZS5nZXRNZXNzYWdlKCkpOwot
ICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3REeW5hbWljVW5pbml0aWFsaXplZEV4Y2Vw
dGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgIHRyeSB7Ci0gICAgICBEeW5hbWljTWVzc2Fn
ZS5uZXdCdWlsZGVyKFRlc3RSZXF1aXJlZC5nZXREZXNjcmlwdG9yKCkpLmJ1aWxkKCk7Ci0gICAg
ICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLiIpOwotICAgIH0gY2F0Y2gg
KFVuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uIGUpIHsKLSAgICAgIGFzc2VydEVxdWFscygi
TWVzc2FnZSBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogYSwgYiwgYyIsIGUuZ2V0TWVzc2FnZSgp
KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RHluYW1pY0J1aWxkUGFydGlhbCgp
IHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFdlJ3JlIG1vc3RseSB0ZXN0aW5nIHRoYXQgbm8g
ZXhjZXB0aW9uIGlzIHRocm93bi4KLSAgICBEeW5hbWljTWVzc2FnZSBtZXNzYWdlID0KLSAgICAg
IER5bmFtaWNNZXNzYWdlLm5ld0J1aWxkZXIoVGVzdFJlcXVpcmVkLmdldERlc2NyaXB0b3IoKSkK
LSAgICAgICAgLmJ1aWxkUGFydGlhbCgpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuaXNJbml0
aWFsaXplZCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3REeW5hbWljUGFyc2VVbml0aXRp
YWxpemVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIERlc2NyaXB0b3Jz
LkRlc2NyaXB0b3IgZGVzY3JpcHRvciA9IFRlc3RSZXF1aXJlZC5nZXREZXNjcmlwdG9yKCk7Ci0g
ICAgICBEeW5hbWljTWVzc2FnZS5wYXJzZUZyb20oZGVzY3JpcHRvciwgQnl0ZVN0cmluZy5FTVBU
WSk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLiIpOwotICAg
IH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoIk1lc3NhZ2UgbWlzc2luZyByZXF1aXJlZCBmaWVsZHM6IGEsIGIsIGMiLCBlLmdl
dE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0gIAotICAvKiogVGVzdCByZWFkaW5nIHVuc2V0IHJl
cGVhdGVkIG1lc3NhZ2UgZnJvbSBEeW5hbWljTWVzc2FnZS4gKi8KLSAgcHVibGljIHZvaWQgdGVz
dER5bmFtaWNSZXBlYXRlZE1lc3NhZ2VOdWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgRGVz
Y3JpcHRvcnMuRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gVGVzdFJlcXVpcmVkLmdldERlc2NyaXB0
b3IoKTsKLSAgICBEeW5hbWljTWVzc2FnZSByZXN1bHQgPQotICAgICAgRHluYW1pY01lc3NhZ2Uu
bmV3QnVpbGRlcihUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpKQotICAgICAgICAubWVyZ2VG
cm9tKER5bmFtaWNNZXNzYWdlLm5ld0J1aWxkZXIoTUVSR0VfU09VUkNFKS5idWlsZCgpKQotICAg
ICAgICAuYnVpbGQoKTsKLQotICAgIGFzc2VydFRydWUocmVzdWx0LmdldEZpZWxkKHJlc3VsdC5n
ZXREZXNjcmlwdG9yRm9yVHlwZSgpCi0gICAgICAgIC5maW5kRmllbGRCeU5hbWUoInJlcGVhdGVk
X2ZvcmVpZ25fbWVzc2FnZSIpKSBpbnN0YW5jZW9mIExpc3Q8Pz4pOwotICAgIGFzc2VydEVxdWFs
cyhyZXN1bHQuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KHJlc3VsdC5nZXREZXNjcmlwdG9yRm9yVHlw
ZSgpCi0gICAgICAgIC5maW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSIp
KSwgMCk7Ci0gIH0KLSAgCi0gIC8qKiBUZXN0IHJlYWRpbmcgcmVwZWF0ZWQgbWVzc2FnZSBmcm9t
IER5bmFtaWNNZXNzYWdlLiAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RHluYW1pY1JlcGVhdGVkTWVz
c2FnZU5vdE51bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgIFRlc3RBbGxUeXBlcyBSRVBF
QVRFRF9ORVNURUQgPQotICAgICAgVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKQotICAgICAgICAu
c2V0T3B0aW9uYWxJbnQzMigxKQotICAgICAgICAuc2V0T3B0aW9uYWxTdHJpbmcoImZvbyIpCi0g
ICAgICAgIC5zZXRPcHRpb25hbEZvcmVpZ25NZXNzYWdlKEZvcmVpZ25NZXNzYWdlLmdldERlZmF1
bHRJbnN0YW5jZSgpKQotICAgICAgICAuYWRkUmVwZWF0ZWRTdHJpbmcoImJhciIpCi0gICAgICAg
IC5hZGRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlKEZvcmVpZ25NZXNzYWdlLmdldERlZmF1bHRJbnN0
YW5jZSgpKQotICAgICAgICAuYWRkUmVwZWF0ZWRGb3JlaWduTWVzc2FnZShGb3JlaWduTWVzc2Fn
ZS5nZXREZWZhdWx0SW5zdGFuY2UoKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgRGVzY3JpcHRv
cnMuRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gVGVzdFJlcXVpcmVkLmdldERlc2NyaXB0b3IoKTsK
LSAgICBEeW5hbWljTWVzc2FnZSByZXN1bHQgPQotICAgICAgRHluYW1pY01lc3NhZ2UubmV3QnVp
bGRlcihUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpKQotICAgICAgICAubWVyZ2VGcm9tKER5
bmFtaWNNZXNzYWdlLm5ld0J1aWxkZXIoUkVQRUFURURfTkVTVEVEKS5idWlsZCgpKQotICAgICAg
ICAuYnVpbGQoKTsKLQotICAgIGFzc2VydFRydWUocmVzdWx0LmdldEZpZWxkKHJlc3VsdC5nZXRE
ZXNjcmlwdG9yRm9yVHlwZSgpCi0gICAgICAgIC5maW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2Zv
cmVpZ25fbWVzc2FnZSIpKSBpbnN0YW5jZW9mIExpc3Q8Pz4pOwotICAgIGFzc2VydEVxdWFscyhy
ZXN1bHQuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KHJlc3VsdC5nZXREZXNjcmlwdG9yRm9yVHlwZSgp
Ci0gICAgICAgIC5maW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSIpKSwg
Mik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9OZXN0ZWRCdWlsZGVyc1Rlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9OZXN0ZWRCdWlsZGVyc1Rlc3QuamF2YQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyZTI4YzBhNTZmZTgwOGRjYmU1MWExNjJlN2IyNGU0MGY4
YmFlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEv
Y29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTmVzdGVkQnVpbGRlcnNUZXN0
LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0
IHByb3RvYnVmX3VuaXR0ZXN0LlZlaGljbGU7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuV2hl
ZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0
aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIFRlc3QgY2Fz
ZXMgdGhhdCBleGVyY2lzZSBlbmQtdG8tZW5kIHVzZSBjYXNlcyBpbnZvbHZpbmcKLSAqIHtAbGlu
ayBTaW5nbGVGaWVsZEJ1aWxkZXJ9IGFuZCB7QGxpbmsgUmVwZWF0ZWRGaWVsZEJ1aWxkZXJ9Lgot
ICoKLSAqIEBhdXRob3Igam9ucEBnb29nbGUuY29tIChKb24gUGVybG93KQotICovCi1wdWJsaWMg
Y2xhc3MgTmVzdGVkQnVpbGRlcnNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gIHB1YmxpYyB2
b2lkIHRlc3RNZXNzYWdlc0FuZEJ1aWxkZXJzKCkgewotICAgIFZlaGljbGUuQnVpbGRlciB2ZWhp
Y2xlQnVpbGRlciA9IFZlaGljbGUubmV3QnVpbGRlcigpOwotICAgIHZlaGljbGVCdWlsZGVyLmFk
ZFdoZWVsQnVpbGRlcigpCi0gICAgICAgIC5zZXRSYWRpdXMoNCkKLSAgICAgICAgLnNldFdpZHRo
KDEpOwotICAgIHZlaGljbGVCdWlsZGVyLmFkZFdoZWVsQnVpbGRlcigpCi0gICAgICAgIC5zZXRS
YWRpdXMoNCkKLSAgICAgICAgLnNldFdpZHRoKDIpOwotICAgIHZlaGljbGVCdWlsZGVyLmFkZFdo
ZWVsQnVpbGRlcigpCi0gICAgICAgIC5zZXRSYWRpdXMoNCkKLSAgICAgICAgLnNldFdpZHRoKDMp
OwotICAgIHZlaGljbGVCdWlsZGVyLmFkZFdoZWVsQnVpbGRlcigpCi0gICAgICAgIC5zZXRSYWRp
dXMoNCkKLSAgICAgICAgLnNldFdpZHRoKDQpOwotICAgIHZlaGljbGVCdWlsZGVyLmdldEVuZ2lu
ZUJ1aWxkZXIoKQotICAgICAgICAuc2V0TGl0ZXJzKDEwKTsKLQotICAgIFZlaGljbGUgdmVoaWNs
ZSA9IHZlaGljbGVCdWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIHZlaGljbGUu
Z2V0V2hlZWxDb3VudCgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAg
ICAgV2hlZWwgd2hlZWwgPSB2ZWhpY2xlLmdldFdoZWVsKGkpOwotICAgICAgYXNzZXJ0RXF1YWxz
KDQsIHdoZWVsLmdldFJhZGl1cygpKTsKLSAgICAgIGFzc2VydEVxdWFscyhpICsgMSwgd2hlZWwu
Z2V0V2lkdGgoKSk7Ci0gICAgfQotICAgIGFzc2VydEVxdWFscygxMCwgdmVoaWNsZS5nZXRFbmdp
bmUoKS5nZXRMaXRlcnMoKSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewot
ICAgICAgdmVoaWNsZUJ1aWxkZXIuZ2V0V2hlZWxCdWlsZGVyKGkpCi0gICAgICAgICAgLnNldFJh
ZGl1cyg1KQotICAgICAgICAgIC5zZXRXaWR0aChpICsgMTApOwotICAgIH0KLSAgICB2ZWhpY2xl
QnVpbGRlci5nZXRFbmdpbmVCdWlsZGVyKCkuc2V0TGl0ZXJzKDIwKTsKLQotICAgIHZlaGljbGUg
PSB2ZWhpY2xlQnVpbGRlci5idWlsZCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr
KSB7Ci0gICAgICBXaGVlbCB3aGVlbCA9IHZlaGljbGUuZ2V0V2hlZWwoaSk7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoNSwgd2hlZWwuZ2V0UmFkaXVzKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKGkgKyAx
MCwgd2hlZWwuZ2V0V2lkdGgoKSk7Ci0gICAgfQotICAgIGFzc2VydEVxdWFscygyMCwgdmVoaWNs
ZS5nZXRFbmdpbmUoKS5nZXRMaXRlcnMoKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh2ZWhpY2xlLmhhc0Vu
Z2luZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXNzYWdlc0FyZUNhY2hlZCgpIHsK
LSAgICBWZWhpY2xlLkJ1aWxkZXIgdmVoaWNsZUJ1aWxkZXIgPSBWZWhpY2xlLm5ld0J1aWxkZXIo
KTsKLSAgICB2ZWhpY2xlQnVpbGRlci5hZGRXaGVlbEJ1aWxkZXIoKQotICAgICAgICAuc2V0UmFk
aXVzKDEpCi0gICAgICAgIC5zZXRXaWR0aCgyKTsKLSAgICB2ZWhpY2xlQnVpbGRlci5hZGRXaGVl
bEJ1aWxkZXIoKQotICAgICAgICAuc2V0UmFkaXVzKDMpCi0gICAgICAgIC5zZXRXaWR0aCg0KTsK
LSAgICB2ZWhpY2xlQnVpbGRlci5hZGRXaGVlbEJ1aWxkZXIoKQotICAgICAgICAuc2V0UmFkaXVz
KDUpCi0gICAgICAgIC5zZXRXaWR0aCg2KTsKLSAgICB2ZWhpY2xlQnVpbGRlci5hZGRXaGVlbEJ1
aWxkZXIoKQotICAgICAgICAuc2V0UmFkaXVzKDcpCi0gICAgICAgIC5zZXRXaWR0aCg4KTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSBtZXNzYWdlcyBhcmUgY2FjaGVkLgotICAgIExpc3Q8V2hlZWw+IHdo
ZWVscyA9IG5ldyBBcnJheUxpc3Q8V2hlZWw+KHZlaGljbGVCdWlsZGVyLmdldFdoZWVsTGlzdCgp
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdoZWVscy5zaXplKCk7IGkrKykgewotICAgICAg
YXNzZXJ0U2FtZSh3aGVlbHMuZ2V0KGkpLCB2ZWhpY2xlQnVpbGRlci5nZXRXaGVlbChpKSk7Ci0g
ICAgfQotCi0gICAgLy8gTm93IGdldCBidWlsZGVycyBhbmQgY2hlY2sgdGhleSBkaWRuJ3QgY2hh
bmdlLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2hlZWxzLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICB2ZWhpY2xlQnVpbGRlci5nZXRXaGVlbChpKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB3aGVlbHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIGFzc2VydFNhbWUod2hlZWxzLmdldChp
KSwgdmVoaWNsZUJ1aWxkZXIuZ2V0V2hlZWwoaSkpOwotICAgIH0KLQotICAgIC8vIENoYW5nZSBq
dXN0IG9uZQotICAgIHZlaGljbGVCdWlsZGVyLmdldFdoZWVsQnVpbGRlcigzKQotICAgICAgICAu
c2V0UmFkaXVzKDIwKS5zZXRXaWR0aCgyMCk7Ci0KLSAgICAvLyBOb3cgZ2V0IHdoZWVscyBhbmQg
Y2hlY2sgdGhhdCBvbmx5IHRoYXQgb25lIGNoYW5nZWQKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHdoZWVscy5zaXplKCk7IGkrKykgewotICAgICAgaWYgKGkgPCAzKSB7Ci0gICAgICAgIGFzc2Vy
dFNhbWUod2hlZWxzLmdldChpKSwgdmVoaWNsZUJ1aWxkZXIuZ2V0V2hlZWwoaSkpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZSh3aGVlbHMuZ2V0KGkpLCB2ZWhpY2xlQnVp
bGRlci5nZXRXaGVlbChpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdFJlbW92ZV9XaXRoTmVzdGVkQnVpbGRlcnMoKSB7Ci0gICAgVmVoaWNsZS5CdWlsZGVyIHZl
aGljbGVCdWlsZGVyID0gVmVoaWNsZS5uZXdCdWlsZGVyKCk7Ci0gICAgdmVoaWNsZUJ1aWxkZXIu
YWRkV2hlZWxCdWlsZGVyKCkKLSAgICAgICAgLnNldFJhZGl1cygxKQotICAgICAgICAuc2V0V2lk
dGgoMSk7Ci0gICAgdmVoaWNsZUJ1aWxkZXIuYWRkV2hlZWxCdWlsZGVyKCkKLSAgICAgICAgLnNl
dFJhZGl1cygyKQotICAgICAgICAuc2V0V2lkdGgoMik7Ci0gICAgdmVoaWNsZUJ1aWxkZXIucmVt
b3ZlV2hlZWwoMCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMSwgdmVoaWNsZUJ1aWxkZXIuZ2V0V2hl
ZWxDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgdmVoaWNsZUJ1aWxkZXIuZ2V0V2hlZWwo
MCkuZ2V0UmFkaXVzKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlbW92ZV9XaXRoTmVz
dGVkTWVzc2FnZXMoKSB7Ci0gICAgVmVoaWNsZS5CdWlsZGVyIHZlaGljbGVCdWlsZGVyID0gVmVo
aWNsZS5uZXdCdWlsZGVyKCk7Ci0gICAgdmVoaWNsZUJ1aWxkZXIuYWRkV2hlZWwoV2hlZWwubmV3
QnVpbGRlcigpCi0gICAgICAgIC5zZXRSYWRpdXMoMSkKLSAgICAgICAgLnNldFdpZHRoKDEpKTsK
LSAgICB2ZWhpY2xlQnVpbGRlci5hZGRXaGVlbChXaGVlbC5uZXdCdWlsZGVyKCkKLSAgICAgICAg
LnNldFJhZGl1cygyKQotICAgICAgICAuc2V0V2lkdGgoMikpOwotICAgIHZlaGljbGVCdWlsZGVy
LnJlbW92ZVdoZWVsKDApOwotCi0gICAgYXNzZXJ0RXF1YWxzKDEsIHZlaGljbGVCdWlsZGVyLmdl
dFdoZWVsQ291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIHZlaGljbGVCdWlsZGVyLmdldFdo
ZWVsKDApLmdldFJhZGl1cygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZSgpIHsK
LSAgICBWZWhpY2xlIHZlaGljbGUxID0gVmVoaWNsZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFk
ZFdoZWVsKFdoZWVsLm5ld0J1aWxkZXIoKS5zZXRSYWRpdXMoMSkuYnVpbGQoKSkKLSAgICAgICAg
LmFkZFdoZWVsKFdoZWVsLm5ld0J1aWxkZXIoKS5zZXRSYWRpdXMoMikuYnVpbGQoKSkKLSAgICAg
ICAgLmJ1aWxkKCk7Ci0KLSAgICBWZWhpY2xlIHZlaGljbGUyID0gVmVoaWNsZS5uZXdCdWlsZGVy
KCkKLSAgICAgICAgLm1lcmdlRnJvbSh2ZWhpY2xlMSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAg
Ly8gTGlzdCBzaG91bGQgYmUgdGhlIHNhbWUgLS0gbm8gYWxsb2NhdGlvbgotICAgIGFzc2VydFNh
bWUodmVoaWNsZTEuZ2V0V2hlZWxMaXN0KCksIHZlaGljbGUyLmdldFdoZWVsTGlzdCgpKTsKLQot
ICAgIFZlaGljbGUgdmVoaWNsZTMgPSB2ZWhpY2xlMS50b0J1aWxkZXIoKS5idWlsZCgpOwotICAg
IGFzc2VydFNhbWUodmVoaWNsZTEuZ2V0V2hlZWxMaXN0KCksIHZlaGljbGUzLmdldFdoZWVsTGlz
dCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXR0aW5nQnVpbGRlck1hcmtzRmllbGRB
c0hhdmluZygpIHsKLSAgICBWZWhpY2xlLkJ1aWxkZXIgdmVoaWNsZUJ1aWxkZXIgPSBWZWhpY2xl
Lm5ld0J1aWxkZXIoKTsKLSAgICB2ZWhpY2xlQnVpbGRlci5nZXRFbmdpbmVCdWlsZGVyKCk7Ci0g
ICAgVmVoaWNsZSB2ZWhpY2xlID0gdmVoaWNsZUJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAg
YXNzZXJ0VHJ1ZSh2ZWhpY2xlLmhhc0VuZ2luZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZh
L2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL05pb0J5dGVTdHJpbmdUZXN0
LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvTmlvQnl0
ZVN0cmluZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJlNWI5M2Mz
MWU1MDQ5ODNlNDlmNDdjOGZjZTZkNWFiYWRlMWIzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvTmlvQnl0ZVN0cmluZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyMCAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20u
Z29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuSW50
ZXJuYWwuVVRGXzg7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9y
dCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5
T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRU9GRXhjZXB0aW9uOwotaW1wb3J0IGphdmEu
aW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZh
LmlvLk9iamVjdElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFt
OwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0
ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5CdWZmZXJPdmVyZmxvd0V4Y2Vw
dGlvbjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1l
bnRFeGNlcHRpb247Ci0KLS8qKgotICogVGVzdHMgZm9yIHtAbGluayBOaW9CeXRlU3RyaW5nfS4K
LSAqLwotcHVibGljIGNsYXNzIE5pb0J5dGVTdHJpbmdUZXN0IGV4dGVuZHMgVGVzdENhc2Ugewot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCeXRlU3RyaW5nIEVNUFRZID0gbmV3IE5pb0J5dGVTdHJp
bmcoQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlWzBdKSk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBDTEFTU05BTUUgPSBOaW9CeXRlU3RyaW5nLmNsYXNzLmdldFNpbXBsZU5hbWUoKTsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIEJZVEVTID0gQnl0ZVN0cmluZ1Rlc3QuZ2V0
VGVzdEJ5dGVzKDEyMzQsIDExMzM3NzY2TCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBF
WFBFQ1RFRF9IQVNIID0gQnl0ZVN0cmluZy53cmFwKEJZVEVTKS5oYXNoQ29kZSgpOwotCi0gIHBy
aXZhdGUgZmluYWwgQnl0ZUJ1ZmZlciBiYWNraW5nQnVmZmVyID0gQnl0ZUJ1ZmZlci53cmFwKEJZ
VEVTLmNsb25lKCkpOwotICBwcml2YXRlIGZpbmFsIEJ5dGVTdHJpbmcgdGVzdFN0cmluZyA9IG5l
dyBOaW9CeXRlU3RyaW5nKGJhY2tpbmdCdWZmZXIpOwotCi0gIHB1YmxpYyB2b2lkIHRlc3RFeHBl
Y3RlZFR5cGUoKSB7Ci0gICAgU3RyaW5nIGFjdHVhbENsYXNzTmFtZSA9IGdldEFjdHVhbENsYXNz
TmFtZSh0ZXN0U3RyaW5nKTsKLSAgICBhc3NlcnRFcXVhbHMoQ0xBU1NOQU1FICsgIiBzaG91bGQg
bWF0Y2ggdHlwZSBleGFjdGx5IiwgQ0xBU1NOQU1FLCBhY3R1YWxDbGFzc05hbWUpOwotICB9Ci0K
LSAgcHJvdGVjdGVkIFN0cmluZyBnZXRBY3R1YWxDbGFzc05hbWUoT2JqZWN0IG9iamVjdCkgewot
ICAgIFN0cmluZyBhY3R1YWxDbGFzc05hbWUgPSBvYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7
Ci0gICAgYWN0dWFsQ2xhc3NOYW1lID0gYWN0dWFsQ2xhc3NOYW1lLnN1YnN0cmluZyhhY3R1YWxD
bGFzc05hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpOwotICAgIHJldHVybiBhY3R1YWxDbGFzc05h
bWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Qnl0ZUF0KCkgewotICAgIGJvb2xlYW4gc3Rp
bGxFcXVhbCA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IHN0aWxsRXF1YWwgJiYgaSA8IEJZ
VEVTLmxlbmd0aDsgKytpKSB7Ci0gICAgICBzdGlsbEVxdWFsID0gKEJZVEVTW2ldID09IHRlc3RT
dHJpbmcuYnl0ZUF0KGkpKTsKLSAgICB9Ci0gICAgYXNzZXJ0VHJ1ZShDTEFTU05BTUUgKyAiIG11
c3QgY2FwdHVyZSB0aGUgcmlnaHQgYnl0ZXMiLCBzdGlsbEVxdWFsKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RCeXRlSXRlcmF0b3IoKSB7Ci0gICAgYm9vbGVhbiBzdGlsbEVxdWFsID0gdHJ1
ZTsKLSAgICBCeXRlU3RyaW5nLkJ5dGVJdGVyYXRvciBpdGVyID0gdGVzdFN0cmluZy5pdGVyYXRv
cigpOwotICAgIGZvciAoaW50IGkgPSAwOyBzdGlsbEVxdWFsICYmIGkgPCBCWVRFUy5sZW5ndGg7
ICsraSkgewotICAgICAgc3RpbGxFcXVhbCA9IChpdGVyLmhhc05leHQoKSAmJiBCWVRFU1tpXSA9
PSBpdGVyLm5leHRCeXRlKCkpOwotICAgIH0KLSAgICBhc3NlcnRUcnVlKENMQVNTTkFNRSArICIg
bXVzdCBjYXB0dXJlIHRoZSByaWdodCBieXRlcyIsIHN0aWxsRXF1YWwpOwotICAgIGFzc2VydEZh
bHNlKENMQVNTTkFNRSArICIgbXVzdCBoYXZlIGV4aGF1c3RlZCB0aGUgaXRlcnRvciIsIGl0ZXIu
aGFzTmV4dCgpKTsKLQotICAgIHRyeSB7Ci0gICAgICBpdGVyLm5leHRCeXRlKCk7Ci0gICAgICBm
YWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLiIpOwotICAgIH0gY2F0Y2ggKE5v
U3VjaEVsZW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgLy8gVGhpcyBpcyBzdWNjZXNzCi0gICAg
fQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEJ5dGVJdGVyYWJsZSgpIHsKLSAgICBib29sZWFu
IHN0aWxsRXF1YWwgPSB0cnVlOwotICAgIGludCBqID0gMDsKLSAgICBmb3IgKGJ5dGUgcXVhbnR1
bSA6IHRlc3RTdHJpbmcpIHsKLSAgICAgIHN0aWxsRXF1YWwgPSAoQllURVNbal0gPT0gcXVhbnR1
bSk7Ci0gICAgICArK2o7Ci0gICAgfQotICAgIGFzc2VydFRydWUoQ0xBU1NOQU1FICsgIiBtdXN0
IGNhcHR1cmUgdGhlIHJpZ2h0IGJ5dGVzIGFzIEJ5dGVzIiwgc3RpbGxFcXVhbCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKENMQVNTTkFNRSArICIgaXRlcmFibGUgY2hhcmFjdGVyIGNvdW50IiwgQllURVMu
bGVuZ3RoLCBqKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTaXplKCkgewotICAgIGFzc2Vy
dEVxdWFscyhDTEFTU05BTUUgKyAiIG11c3QgaGF2ZSB0aGUgZXhwZWN0ZWQgc2l6ZSIsIEJZVEVT
Lmxlbmd0aCwKLSAgICAgICAgdGVzdFN0cmluZy5zaXplKCkpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdEdldFRyZWVEZXB0aCgpIHsKLSAgICBhc3NlcnRFcXVhbHMoQ0xBU1NOQU1FICsgIiBt
dXN0IGhhdmUgZGVwdGggMCIsIDAsIHRlc3RTdHJpbmcuZ2V0VHJlZURlcHRoKCkpOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdElzQmFsYW5jZWQoKSB7Ci0gICAgYXNzZXJ0VHJ1ZShDTEFTU05B
TUUgKyAiIGlzIHRlY2huaWNhbGx5IGJhbGFuY2VkIiwgdGVzdFN0cmluZy5pc0JhbGFuY2VkKCkp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENvcHlUb19CeXRlQXJyYXlPZmZzZXRMZW5ndGgo
KSB7Ci0gICAgaW50IGRlc3RpbmF0aW9uT2Zmc2V0ID0gNTA7Ci0gICAgaW50IGxlbmd0aCA9IDEw
MDsKLSAgICBieXRlW10gZGVzdGluYXRpb24gPSBuZXcgYnl0ZVtkZXN0aW5hdGlvbk9mZnNldCAr
IGxlbmd0aF07Ci0gICAgaW50IHNvdXJjZU9mZnNldCA9IDIxMzsKLSAgICB0ZXN0U3RyaW5nLmNv
cHlUbyhkZXN0aW5hdGlvbiwgc291cmNlT2Zmc2V0LCBkZXN0aW5hdGlvbk9mZnNldCwgbGVuZ3Ro
KTsKLSAgICBib29sZWFuIHN0aWxsRXF1YWwgPSB0cnVlOwotICAgIGZvciAoaW50IGkgPSAwOyBz
dGlsbEVxdWFsICYmIGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgc3RpbGxFcXVhbCA9IEJZVEVT
W2kgKyBzb3VyY2VPZmZzZXRdID09IGRlc3RpbmF0aW9uW2kgKyBkZXN0aW5hdGlvbk9mZnNldF07
Ci0gICAgfQotICAgIGFzc2VydFRydWUoQ0xBU1NOQU1FICsgIi5jb3B5VG8oNCBhcmcpIG11c3Qg
Z2l2ZSB0aGUgZXhwZWN0ZWQgYnl0ZXMiLCBzdGlsbEVxdWFsKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RDb3B5VG9fQnl0ZUFycmF5T2Zmc2V0TGVuZ3RoRXJyb3JzKCkgewotICAgIGludCBk
ZXN0aW5hdGlvbk9mZnNldCA9IDUwOwotICAgIGludCBsZW5ndGggPSAxMDA7Ci0gICAgYnl0ZVtd
IGRlc3RpbmF0aW9uID0gbmV3IGJ5dGVbZGVzdGluYXRpb25PZmZzZXQgKyBsZW5ndGhdOwotCi0g
ICAgdHJ5IHsKLSAgICAgIC8vIENvcHkgb25lIHRvbyBtYW55IGJ5dGVzCi0gICAgICB0ZXN0U3Ry
aW5nLmNvcHlUbyhkZXN0aW5hdGlvbiwgdGVzdFN0cmluZy5zaXplKCkgKyAxIC0gbGVuZ3RoLAot
ICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0LCBsZW5ndGgpOwotICAgICAgZmFpbCgiU2hvdWxk
IGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiB3aGVuIGNvcHlpbmcgdG9vIG1hbnkgYnl0ZXMgb2Yg
YSAiCi0gICAgICAgICAgKyBDTEFTU05BTUUpOwotICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3Vu
ZHNFeGNlcHRpb24gZXhwZWN0ZWQpIHsKLSAgICAgIC8vIFRoaXMgaXMgc3VjY2VzcwotICAgIH0K
LQotICAgIHRyeSB7Ci0gICAgICAvLyBDb3B5IHdpdGggaWxsZWdhbCBuZWdhdGl2ZSBzb3VyY2VP
ZmZzZXQKLSAgICAgIHRlc3RTdHJpbmcuY29weVRvKGRlc3RpbmF0aW9uLCAtMSwgZGVzdGluYXRp
b25PZmZzZXQsIGxlbmd0aCk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhj
ZXB0aW9uIHdoZW4gZ2l2ZW4gYSBuZWdhdGl2ZSBzb3VyY2VPZmZzZXQgaW4gIgotICAgICAgICAg
ICsgQ0xBU1NOQU1FKTsKLSAgICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGV4
cGVjdGVkKSB7Ci0gICAgICAvLyBUaGlzIGlzIHN1Y2Nlc3MKLSAgICB9Ci0KLSAgICB0cnkgewot
ICAgICAgLy8gQ29weSB3aXRoIGlsbGVnYWwgbmVnYXRpdmUgZGVzdGluYXRpb25PZmZzZXQKLSAg
ICAgIHRlc3RTdHJpbmcuY29weVRvKGRlc3RpbmF0aW9uLCAwLCAtMSwgbGVuZ3RoKTsKLSAgICAg
IGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24gd2hlbiBnaXZlbiBhIG5lZ2F0
aXZlIGRlc3RpbmF0aW9uT2Zmc2V0IGluICIKLSAgICAgICAgICArIENMQVNTTkFNRSk7Ci0gICAg
fSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBleHBlY3RlZCkgewotICAgICAgLy8g
VGhpcyBpcyBzdWNjZXNzCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIC8vIENvcHkgd2l0aCBp
bGxlZ2FsIG5lZ2F0aXZlIHNpemUKLSAgICAgIHRlc3RTdHJpbmcuY29weVRvKGRlc3RpbmF0aW9u
LCAwLCAwLCAtMSk7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9u
IHdoZW4gZ2l2ZW4gYSBuZWdhdGl2ZSBzaXplIGluICIKLSAgICAgICAgICArIENMQVNTTkFNRSk7
Ci0gICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBleHBlY3RlZCkgewotICAg
ICAgLy8gVGhpcyBpcyBzdWNjZXNzCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIC8vIENvcHkg
d2l0aCBpbGxlZ2FsIHRvby1sYXJnZSBzb3VyY2VPZmZzZXQKLSAgICAgIHRlc3RTdHJpbmcuY29w
eVRvKGRlc3RpbmF0aW9uLCAyICogdGVzdFN0cmluZy5zaXplKCksIDAsIGxlbmd0aCk7Ci0gICAg
ICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGRlc3RpbmF0
aW9uT2Zmc2V0IGlzIHRvbyBsYXJnZSBpbiAiCi0gICAgICAgICAgKyBDTEFTU05BTUUpOwotICAg
IH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZXhwZWN0ZWQpIHsKLSAgICAgIC8v
IFRoaXMgaXMgc3VjY2VzcwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICAvLyBDb3B5IHdpdGgg
aWxsZWdhbCB0b28tbGFyZ2UgZGVzdGluYXRpb25PZmZzZXQKLSAgICAgIHRlc3RTdHJpbmcuY29w
eVRvKGRlc3RpbmF0aW9uLCAwLCAyICogZGVzdGluYXRpb24ubGVuZ3RoLCBsZW5ndGgpOwotICAg
ICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBkZXN0aW5h
dGlvbk9mZnNldCBpcyB0b28gbGFyZ2UgaW4gIgotICAgICAgICAgICsgQ0xBU1NOQU1FKTsKLSAg
ICB9IGNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAv
LyBUaGlzIGlzIHN1Y2Nlc3MKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q29weVRv
X0J5dGVCdWZmZXIoKSB7Ci0gICAgLy8gU2FtZSBsZW5ndGguCi0gICAgQnl0ZUJ1ZmZlciBteUJ1
ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoQllURVMubGVuZ3RoKTsKLSAgICB0ZXN0U3RyaW5n
LmNvcHlUbyhteUJ1ZmZlcik7Ci0gICAgbXlCdWZmZXIuZmxpcCgpOwotICAgIGFzc2VydEVxdWFs
cyhDTEFTU05BTUUgKyAiLmNvcHlUbyhCeXRlQnVmZmVyKSBtdXN0IGdpdmUgYmFjayB0aGUgc2Ft
ZSBieXRlcyIsCi0gICAgICAgIGJhY2tpbmdCdWZmZXIsIG15QnVmZmVyKTsKLQotICAgIC8vIFRh
cmdldCBidWZmZXIgYmlnZ2VyIHRoYW4gcmVxdWlyZWQuCi0gICAgbXlCdWZmZXIgPSBCeXRlQnVm
ZmVyLmFsbG9jYXRlKHRlc3RTdHJpbmcuc2l6ZSgpICsgMSk7Ci0gICAgdGVzdFN0cmluZy5jb3B5
VG8obXlCdWZmZXIpOwotICAgIG15QnVmZmVyLmZsaXAoKTsKLSAgICBhc3NlcnRFcXVhbHMoYmFj
a2luZ0J1ZmZlciwgbXlCdWZmZXIpOwotCi0gICAgLy8gVGFyZ2V0IGJ1ZmZlciBoYXMgbm8gc3Bh
Y2UuCi0gICAgbXlCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKDApOwotICAgIHRyeSB7Ci0g
ICAgICB0ZXN0U3RyaW5nLmNvcHlUbyhteUJ1ZmZlcik7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2
ZSB0aHJvd24gYW4gZXhjZXB0aW9uIHdoZW4gdGFyZ2V0IEJ5dGVCdWZmZXIgaGFzIGluc3VmZmlj
aWVudCBjYXBhY2l0eSIpOwotICAgIH0gY2F0Y2ggKEJ1ZmZlck92ZXJmbG93RXhjZXB0aW9uIGUp
IHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLQotICAgIC8vIFRhcmdldCBidWZmZXIgdG9v
IHNtYWxsLgotICAgIG15QnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZSgxKTsKLSAgICB0cnkg
ewotICAgICAgdGVzdFN0cmluZy5jb3B5VG8obXlCdWZmZXIpOwotICAgICAgZmFpbCgiU2hvdWxk
IGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiB3aGVuIHRhcmdldCBCeXRlQnVmZmVyIGhhcyBpbnN1
ZmZpY2llbnQgY2FwYWNpdHkiKTsKLSAgICB9IGNhdGNoIChCdWZmZXJPdmVyZmxvd0V4Y2VwdGlv
biBlKSB7Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0TWFya1N1cHBvcnRlZCgpIHsKLSAgICBJbnB1dFN0cmVhbSBzdHJlYW0gPSB0ZXN0U3RyaW5n
Lm5ld0lucHV0KCk7Ci0gICAgYXNzZXJ0VHJ1ZShDTEFTU05BTUUgKyAiLm5ld0lucHV0KCkgbXVz
dCBzdXBwb3J0IG1hcmtpbmciLCBzdHJlYW0ubWFya1N1cHBvcnRlZCgpKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RNYXJrQW5kUmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGlu
dCBmcmFjdGlvbiA9IHRlc3RTdHJpbmcuc2l6ZSgpIC8gMzsKLQotICAgIElucHV0U3RyZWFtIHN0
cmVhbSA9IHRlc3RTdHJpbmcubmV3SW5wdXQoKTsKLSAgICBzdHJlYW0ubWFyayh0ZXN0U3RyaW5n
LnNpemUoKSk7IC8vIEZpcnN0LCBtYXJrKCkgdGhlIGVuZC4KLQotICAgIHNraXBGdWxseShzdHJl
YW0sIGZyYWN0aW9uKTsgLy8gU2tpcCBhIGxhcmdlIGZyYWN0aW9uLCBidXQgbm90IGFsbC4KLSAg
ICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIENMQVNTTkFNRSArICI6IGFmdGVyIHNraXBwaW5nIHRv
IHRoZSAnbWlkZGxlJywgaGFsZiB0aGUgYnl0ZXMgYXJlIGF2YWlsYWJsZSIsCi0gICAgICAgICh0
ZXN0U3RyaW5nLnNpemUoKSAtIGZyYWN0aW9uKSwgc3RyZWFtLmF2YWlsYWJsZSgpKTsKLSAgICBz
dHJlYW0ucmVzZXQoKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIENMQVNTTkFNRSArICI6
IGFmdGVyIHJlc2V0dGluZywgYWxsIGJ5dGVzIGFyZSBhdmFpbGFibGUiLAotICAgICAgICB0ZXN0
U3RyaW5nLnNpemUoKSwgc3RyZWFtLmF2YWlsYWJsZSgpKTsKLQotICAgIHNraXBGdWxseShzdHJl
YW0sIHRlc3RTdHJpbmcuc2l6ZSgpKTsgLy8gU2tpcCB0byB0aGUgZW5kLgotICAgIGFzc2VydEVx
dWFscygKLSAgICAgICAgQ0xBU1NOQU1FICsgIjogYWZ0ZXIgc2tpcHBpbmcgdG8gdGhlIGVuZCwg
bm8gbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIiwKLSAgICAgICAgMCwgc3RyZWFtLmF2YWlsYWJs
ZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBEaXNjYXJkcyB7QGNvZGUgbn0gYnl0ZXMgb2YgZGF0
YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgbWV0aG9kCi0gICAqIHdpbGwgYmxvY2sgdW50
aWwgdGhlIGZ1bGwgYW1vdW50IGhhcyBiZWVuIHNraXBwZWQuIERvZXMgbm90IGNsb3NlIHRoZQot
ICAgKiBzdHJlYW0uCi0gICAqIDxwPkNvcGllZCBmcm9tIGNvbS5nb29nbGUuY29tbW9uLmlvLkJ5
dGVTdHJlYW1zIHRvIGF2b2lkIGFkZGluZyBkZXBlbmRlbmN5LgotICAgKgotICAgKiBAcGFyYW0g
aW4gdGhlIGlucHV0IHN0cmVhbSB0byByZWFkIGZyb20KLSAgICogQHBhcmFtIG4gdGhlIG51bWJl
ciBvZiBieXRlcyB0byBza2lwCi0gICAqIEB0aHJvd3MgRU9GRXhjZXB0aW9uIGlmIHRoaXMgc3Ry
ZWFtIHJlYWNoZXMgdGhlIGVuZCBiZWZvcmUgc2tpcHBpbmcgYWxsCi0gICAqICAgICB0aGUgYnl0
ZXMKLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXJyb3Igb2NjdXJzLCBvciB0
aGUgc3RyZWFtIGRvZXMgbm90Ci0gICAqICAgICBzdXBwb3J0IHNraXBwaW5nCi0gICAqLwotICBz
dGF0aWMgdm9pZCBza2lwRnVsbHkoSW5wdXRTdHJlYW0gaW4sIGxvbmcgbikgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICBsb25nIHRvU2tpcCA9IG47Ci0gICAgd2hpbGUgKG4gPiAwKSB7Ci0gICAg
ICBsb25nIGFtdCA9IGluLnNraXAobik7Ci0gICAgICBpZiAoYW10ID09IDApIHsKLSAgICAgICAg
Ly8gRm9yY2UgYSBibG9ja2luZyByZWFkIHRvIGF2b2lkIGluZmluaXRlIGxvb3AKLSAgICAgICAg
aWYgKGluLnJlYWQoKSA9PSAtMSkgewotICAgICAgICAgIGxvbmcgc2tpcHBlZCA9IHRvU2tpcCAt
IG47Ci0gICAgICAgICAgdGhyb3cgbmV3IEVPRkV4Y2VwdGlvbigicmVhY2hlZCBlbmQgb2Ygc3Ry
ZWFtIGFmdGVyIHNraXBwaW5nICIKLSAgICAgICAgICAgICAgKyBza2lwcGVkICsgIiBieXRlczsg
IiArIHRvU2tpcCArICIgYnl0ZXMgZXhwZWN0ZWQiKTsKLSAgICAgICAgfQotICAgICAgICBuLS07
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBuIC09IGFtdDsKLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0QXNSZWFkT25seUJ5dGVCdWZmZXIoKSB7Ci0gICAgQnl0ZUJ1
ZmZlciBieXRlQnVmZmVyID0gdGVzdFN0cmluZy5hc1JlYWRPbmx5Qnl0ZUJ1ZmZlcigpOwotICAg
IGJ5dGVbXSByb3VuZFRyaXBCeXRlcyA9IG5ldyBieXRlW0JZVEVTLmxlbmd0aF07Ci0gICAgYXNz
ZXJ0VHJ1ZShieXRlQnVmZmVyLnJlbWFpbmluZygpID09IEJZVEVTLmxlbmd0aCk7Ci0gICAgYXNz
ZXJ0VHJ1ZShieXRlQnVmZmVyLmlzUmVhZE9ubHkoKSk7Ci0gICAgYnl0ZUJ1ZmZlci5nZXQocm91
bmRUcmlwQnl0ZXMpOwotICAgIGFzc2VydFRydWUoQ0xBU1NOQU1FICsgIi5hc1JlYWRPbmx5Qnl0
ZUJ1ZmZlcigpIG11c3QgZ2l2ZSBiYWNrIHRoZSBzYW1lIGJ5dGVzIiwKLSAgICAgICAgQXJyYXlz
LmVxdWFscyhCWVRFUywgcm91bmRUcmlwQnl0ZXMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3RBc1JlYWRPbmx5Qnl0ZUJ1ZmZlckxpc3QoKSB7Ci0gICAgTGlzdDxCeXRlQnVmZmVyPiBieXRl
QnVmZmVycyA9IHRlc3RTdHJpbmcuYXNSZWFkT25seUJ5dGVCdWZmZXJMaXN0KCk7Ci0gICAgaW50
IGJ5dGVzU2VlbiA9IDA7Ci0gICAgYnl0ZVtdIHJvdW5kVHJpcEJ5dGVzID0gbmV3IGJ5dGVbQllU
RVMubGVuZ3RoXTsKLSAgICBmb3IgKEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlciA6IGJ5dGVCdWZmZXJz
KSB7Ci0gICAgICBpbnQgdGhpc0xlbmd0aCA9IGJ5dGVCdWZmZXIucmVtYWluaW5nKCk7Ci0gICAg
ICBhc3NlcnRUcnVlKGJ5dGVCdWZmZXIuaXNSZWFkT25seSgpKTsKLSAgICAgIGFzc2VydFRydWUo
Ynl0ZXNTZWVuICsgdGhpc0xlbmd0aCA8PSBCWVRFUy5sZW5ndGgpOwotICAgICAgYnl0ZUJ1ZmZl
ci5nZXQocm91bmRUcmlwQnl0ZXMsIGJ5dGVzU2VlbiwgdGhpc0xlbmd0aCk7Ci0gICAgICBieXRl
c1NlZW4gKz0gdGhpc0xlbmd0aDsKLSAgICB9Ci0gICAgYXNzZXJ0VHJ1ZShieXRlc1NlZW4gPT0g
QllURVMubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKENMQVNTTkFNRSArICIuYXNSZWFkT25seUJ5
dGVCdWZmZXJUZXN0KCkgbXVzdCBnaXZlIGJhY2sgdGhlIHNhbWUgYnl0ZXMiLAotICAgICAgICBB
cnJheXMuZXF1YWxzKEJZVEVTLCByb3VuZFRyaXBCeXRlcykpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdFRvQnl0ZUFycmF5KCkgewotICAgIGJ5dGVbXSByb3VuZFRyaXBCeXRlcyA9IHRlc3RT
dHJpbmcudG9CeXRlQXJyYXkoKTsKLSAgICBhc3NlcnRUcnVlKENMQVNTTkFNRSArICIudG9CeXRl
QXJyYXkoKSBtdXN0IGdpdmUgYmFjayB0aGUgc2FtZSBieXRlcyIsCi0gICAgICAgIEFycmF5cy5l
cXVhbHMoQllURVMsIHJvdW5kVHJpcEJ5dGVzKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
V3JpdGVUbygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFt
IGJvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICB0ZXN0U3RyaW5nLndyaXRl
VG8oYm9zKTsKLSAgICBieXRlW10gcm91bmRUcmlwQnl0ZXMgPSBib3MudG9CeXRlQXJyYXkoKTsK
LSAgICBhc3NlcnRUcnVlKENMQVNTTkFNRSArICIud3JpdGVUbygpIG11c3QgZ2l2ZSBiYWNrIHRo
ZSBzYW1lIGJ5dGVzIiwKLSAgICAgICAgQXJyYXlzLmVxdWFscyhCWVRFUywgcm91bmRUcmlwQnl0
ZXMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RXcml0ZVRvU2hvdWxkTm90RXhwb3NlSW50
ZXJuYWxCdWZmZXJUb091dHB1dFN0cmVhbSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgT3V0
cHV0U3RyZWFtIG9zID0gbmV3IE91dHB1dFN0cmVhbSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgd3JpdGUoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHsKLSAgICAg
ICAgQXJyYXlzLmZpbGwoYiwgb2ZmLCBvZmYgKyBsZW4sIChieXRlKSAwKTsKLSAgICAgIH0KLQot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCB3cml0ZShpbnQgYikgewotICAgICAg
ICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICAgIH0KLSAg
ICB9OwotCi0gICAgYnl0ZVtdIG9yaWdpbmFsID0gQXJyYXlzLmNvcHlPZihCWVRFUywgQllURVMu
bGVuZ3RoKTsKLSAgICB0ZXN0U3RyaW5nLndyaXRlVG8ob3MpOwotICAgIGFzc2VydFRydWUoQ0xB
U1NOQU1FICsgIi53cml0ZVRvKCkgbXVzdCBOT1QgZ3JhbnQgYWNjZXNzIHRvIHVuZGVybHlpbmcg
YnVmZmVyIiwKLSAgICAgICAgQXJyYXlzLmVxdWFscyhvcmlnaW5hbCwgQllURVMpKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RXcml0ZVRvSW50ZXJuYWxTaG91bGRFeHBvc2VJbnRlcm5hbEJ1
ZmZlclRvT3V0cHV0U3RyZWFtKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBPdXRwdXRTdHJl
YW0gb3MgPSBuZXcgT3V0cHV0U3RyZWFtKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCB3cml0ZShieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgewotICAgICAgICBBcnJh
eXMuZmlsbChiLCBvZmYsIG9mZiArIGxlbiwgKGJ5dGUpIDApOwotICAgICAgfQotCi0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHdyaXRlKGludCBiKSB7Ci0gICAgICAgIHRocm93
IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgICAgfQotICAgIH07Ci0K
LSAgICB0ZXN0U3RyaW5nLndyaXRlVG9JbnRlcm5hbChvcywgMCwgdGVzdFN0cmluZy5zaXplKCkp
OwotICAgIGJ5dGVbXSBhbGxaZXJvcyA9IG5ldyBieXRlW3Rlc3RTdHJpbmcuc2l6ZSgpXTsKLSAg
ICBhc3NlcnRUcnVlKENMQVNTTkFNRSArICIud3JpdGVUb0ludGVybmFsKCkgbXVzdCBncmFudCBh
Y2Nlc3MgdG8gdW5kZXJseWluZyBidWZmZXIiLAotICAgICAgICBBcnJheXMuZXF1YWxzKGFsbFpl
cm9zLCBiYWNraW5nQnVmZmVyLmFycmF5KCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RX
cml0ZVRvU2hvdWxkRXhwb3NlSW50ZXJuYWxCdWZmZXJUb0J5dGVPdXRwdXQoKSB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgIEJ5dGVPdXRwdXQgb3V0ID0gbmV3IEJ5dGVPdXRwdXQoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHdyaXRlKGJ5dGUgdmFsdWUpIHRocm93cyBJ
T0V4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2Vw
dGlvbigpOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHdy
aXRlKGJ5dGVbXSB2YWx1ZSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7
Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgd3JpdGVMYXp5
KGJ5dGVbXSB2YWx1ZSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0g
ICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgd3JpdGUoQnl0ZUJ1
ZmZlciB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3Vw
cG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgd3JpdGVMYXp5KEJ5dGVCdWZmZXIgdmFsdWUpIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgICAgIEFycmF5cy5maWxsKHZhbHVlLmFycmF5KCksIHZhbHVlLmFycmF5
T2Zmc2V0KCksIHZhbHVlLmFycmF5T2Zmc2V0KCkgKyB2YWx1ZS5saW1pdCgpLAotICAgICAgICAg
ICAgKGJ5dGUpIDApOwotICAgICAgfQotICAgIH07Ci0KLSAgICB0ZXN0U3RyaW5nLndyaXRlVG8o
b3V0KTsKLSAgICBieXRlW10gYWxsWmVyb3MgPSBuZXcgYnl0ZVt0ZXN0U3RyaW5nLnNpemUoKV07
Ci0gICAgYXNzZXJ0VHJ1ZShDTEFTU05BTUUgKyAiLndyaXRlVG8oKSBtdXN0IGdyYW50IGFjY2Vz
cyB0byB1bmRlcmx5aW5nIGJ1ZmZlciIsCi0gICAgICAgIEFycmF5cy5lcXVhbHMoYWxsWmVyb3Ms
IGJhY2tpbmdCdWZmZXIuYXJyYXkoKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5ld091
dHB1dCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJv
cyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICBCeXRlU3RyaW5nLk91dHB1dCBv
dXRwdXQgPSBCeXRlU3RyaW5nLm5ld091dHB1dCgpOwotICAgIHRlc3RTdHJpbmcud3JpdGVUbyhv
dXRwdXQpOwotICAgIGFzc2VydEVxdWFscygiT3V0cHV0IFNpemUgcmV0dXJucyBjb3JyZWN0IHJl
c3VsdCIsCi0gICAgICAgIG91dHB1dC5zaXplKCksIHRlc3RTdHJpbmcuc2l6ZSgpKTsKLSAgICBv
dXRwdXQud3JpdGVUbyhib3MpOwotICAgIGFzc2VydFRydWUoIk91dHB1dC53cml0ZVRvKCkgbXVz
dCBnaXZlIGJhY2sgdGhlIHNhbWUgYnl0ZXMiLAotICAgICAgICBBcnJheXMuZXF1YWxzKEJZVEVT
LCBib3MudG9CeXRlQXJyYXkoKSkpOwotCi0gICAgLy8gd3JpdGUgdGhlIG91dHB1dCBzdHJlYW0g
dG8gaXRzZWxmISBUaGlzIHNob3VsZCBjYXVzZSBpdCB0byBkb3VibGUKLSAgICBvdXRwdXQud3Jp
dGVUbyhvdXRwdXQpOwotICAgIGFzc2VydEVxdWFscygiV3JpdGluZyBhbiBvdXRwdXQgc3RyZWFt
IHRvIGl0c2VsZiBpcyBzdWNjZXNzZnVsIiwKLSAgICAgICAgdGVzdFN0cmluZy5jb25jYXQodGVz
dFN0cmluZyksIG91dHB1dC50b0J5dGVTdHJpbmcoKSk7Ci0KLSAgICBvdXRwdXQucmVzZXQoKTsK
LSAgICBhc3NlcnRFcXVhbHMoIk91dHB1dC5yZXNldCgpIHJlc2V0cyB0aGUgb3V0cHV0IiwgMCwg
b3V0cHV0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJPdXRwdXQucmVzZXQoKSByZXNldHMg
dGhlIG91dHB1dCIsCi0gICAgICAgIEVNUFRZLCBvdXRwdXQudG9CeXRlU3RyaW5nKCkpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nKCkgewotICAgIFN0cmluZyB0ZXN0U3RyaW5n
ID0gIkkgbG92ZSB1bmljb2RlIFx1MTIzNFx1NTY3OCBjaGFyYWN0ZXJzIjsKLSAgICBCeXRlU3Ry
aW5nIHVuaWNvZGUgPSBmb3JTdHJpbmcodGVzdFN0cmluZyk7Ci0gICAgU3RyaW5nIHJvdW5kVHJp
cFN0cmluZyA9IHVuaWNvZGUudG9TdHJpbmcoVVRGXzgpOwotICAgIGFzc2VydEVxdWFscyhDTEFT
U05BTUUgKyAiIHVuaWNvZGUgbXVzdCBtYXRjaCIsIHRlc3RTdHJpbmcsIHJvdW5kVHJpcFN0cmlu
Zyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhcnNldFRvU3RyaW5nKCkgewotICAgIFN0
cmluZyB0ZXN0U3RyaW5nID0gIkkgbG92ZSB1bmljb2RlIFx1MTIzNFx1NTY3OCBjaGFyYWN0ZXJz
IjsKLSAgICBCeXRlU3RyaW5nIHVuaWNvZGUgPSBmb3JTdHJpbmcodGVzdFN0cmluZyk7Ci0gICAg
U3RyaW5nIHJvdW5kVHJpcFN0cmluZyA9IHVuaWNvZGUudG9TdHJpbmcoVVRGXzgpOwotICAgIGFz
c2VydEVxdWFscyhDTEFTU05BTUUgKyAiIHVuaWNvZGUgbXVzdCBtYXRjaCIsIHRlc3RTdHJpbmcs
IHJvdW5kVHJpcFN0cmluZyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VG9TdHJpbmdfcmV0
dXJuc0Nhbm9uaWNhbEVtcHR5U3RyaW5nKCkgewotICAgIGFzc2VydFNhbWUoQ0xBU1NOQU1FICsg
IiBtdXN0IGJlIHRoZSBzYW1lIHN0cmluZyByZWZlcmVuY2VzIiwKLSAgICAgICAgRU1QVFkudG9T
dHJpbmcoVVRGXzgpLAotICAgICAgICBuZXcgTmlvQnl0ZVN0cmluZyhCeXRlQnVmZmVyLndyYXAo
bmV3IGJ5dGVbMF0pKS50b1N0cmluZyhVVEZfOCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVz
dFRvU3RyaW5nX3JhaXNlc0V4Y2VwdGlvbigpIHsKLSAgICB0cnkgewotICAgICAgRU1QVFkudG9T
dHJpbmcoImludmFsaWQiKTsKLSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNl
cHRpb24uIik7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBleHBl
Y3RlZCkgewotICAgICAgLy8gVGhpcyBpcyBzdWNjZXNzCi0gICAgfQotCi0gICAgdHJ5IHsKLSAg
ICAgIHRlc3RTdHJpbmcudG9TdHJpbmcoImludmFsaWQiKTsKLSAgICAgIGZhaWwoIlNob3VsZCBo
YXZlIHRocm93biBhbiBleGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNv
ZGluZ0V4Y2VwdGlvbiBleHBlY3RlZCkgewotICAgICAgLy8gVGhpcyBpcyBzdWNjZXNzCi0gICAg
fQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEVxdWFscygpIHsKLSAgICBhc3NlcnRFcXVhbHMo
Q0xBU1NOQU1FICsgIiBtdXN0IG5vdCBlcXVhbCBudWxsIiwgZmFsc2UsIHRlc3RTdHJpbmcuZXF1
YWxzKG51bGwpKTsKLSAgICBhc3NlcnRFcXVhbHMoQ0xBU1NOQU1FICsgIiBtdXN0IGVxdWFsIHNl
bGYiLCB0ZXN0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLSAgICBhc3NlcnRGYWxzZShDTEFTU05BTUUg
KyAiIG11c3Qgbm90IGVxdWFsIHRoZSBlbXB0eSBzdHJpbmciLAotICAgICAgICB0ZXN0U3RyaW5n
LmVxdWFscyhFTVBUWSkpOwotICAgIGFzc2VydEVxdWFscyhDTEFTU05BTUUgKyAiIGVtcHR5IHN0
cmluZ3MgbXVzdCBiZSBlcXVhbCIsCi0gICAgICAgIEVNUFRZLCB0ZXN0U3RyaW5nLnN1YnN0cmlu
Zyg1NSwgNTUpKTsKLSAgICBhc3NlcnRFcXVhbHMoQ0xBU1NOQU1FICsgIiBtdXN0IGVxdWFsIGFu
b3RoZXIgc3RyaW5nIHdpdGggdGhlIHNhbWUgdmFsdWUiLAotICAgICAgICB0ZXN0U3RyaW5nLCBu
ZXcgTmlvQnl0ZVN0cmluZyhiYWNraW5nQnVmZmVyKSk7Ci0KLSAgICBieXRlW10gbXVuZ2VkQnl0
ZXMgPSBtdW5nZWRCeXRlcygpOwotICAgIGFzc2VydEZhbHNlKENMQVNTTkFNRSArICIgbXVzdCBu
b3QgZXF1YWwgZXZlcnkgc3RyaW5nIHdpdGggdGhlIHNhbWUgbGVuZ3RoIiwKLSAgICAgICAgdGVz
dFN0cmluZy5lcXVhbHMobmV3IE5pb0J5dGVTdHJpbmcoQnl0ZUJ1ZmZlci53cmFwKG11bmdlZEJ5
dGVzKSkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFcXVhbHNMaXRlcmFsQnl0ZVN0cmlu
ZygpIHsKLSAgICBCeXRlU3RyaW5nIGxpdGVyYWwgPSBCeXRlU3RyaW5nLmNvcHlGcm9tKEJZVEVT
KTsKLSAgICBhc3NlcnRFcXVhbHMoQ0xBU1NOQU1FICsgIiBtdXN0IGVxdWFsIExpdGVyYWxCeXRl
U3RyaW5nIHdpdGggc2FtZSB2YWx1ZSIsIGxpdGVyYWwsCi0gICAgICAgIHRlc3RTdHJpbmcpOwot
ICAgIGFzc2VydEVxdWFscyhDTEFTU05BTUUgKyAiIG11c3QgZXF1YWwgTGl0ZXJhbEJ5dGVTdHJp
bmcgd2l0aCBzYW1lIHZhbHVlIiwgdGVzdFN0cmluZywKLSAgICAgICAgbGl0ZXJhbCk7Ci0gICAg
YXNzZXJ0RmFsc2UoQ0xBU1NOQU1FICsgIiBtdXN0IG5vdCBlcXVhbCB0aGUgZW1wdHkgc3RyaW5n
IiwKLSAgICAgICAgdGVzdFN0cmluZy5lcXVhbHMoQnl0ZVN0cmluZy5FTVBUWSkpOwotICAgIGFz
c2VydEVxdWFscyhDTEFTU05BTUUgKyAiIGVtcHR5IHN0cmluZ3MgbXVzdCBiZSBlcXVhbCIsCi0g
ICAgICAgIEJ5dGVTdHJpbmcuRU1QVFksIHRlc3RTdHJpbmcuc3Vic3RyaW5nKDU1LCA1NSkpOwot
Ci0gICAgbGl0ZXJhbCA9IEJ5dGVTdHJpbmcuY29weUZyb20obXVuZ2VkQnl0ZXMoKSk7Ci0gICAg
YXNzZXJ0RmFsc2UoQ0xBU1NOQU1FICsgIiBtdXN0IG5vdCBlcXVhbCBldmVyeSBMaXRlcmFsQnl0
ZVN0cmluZyB3aXRoIHRoZSBzYW1lIGxlbmd0aCIsCi0gICAgICAgIHRlc3RTdHJpbmcuZXF1YWxz
KGxpdGVyYWwpKTsKLSAgICBhc3NlcnRGYWxzZShDTEFTU05BTUUgKyAiIG11c3Qgbm90IGVxdWFs
IGV2ZXJ5IExpdGVyYWxCeXRlU3RyaW5nIHdpdGggdGhlIHNhbWUgbGVuZ3RoIiwKLSAgICAgICAg
bGl0ZXJhbC5lcXVhbHModGVzdFN0cmluZykpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEVx
dWFsc1JvcGVCeXRlU3RyaW5nKCkgewotICAgIEJ5dGVTdHJpbmcgcDEgPSBCeXRlU3RyaW5nLmNv
cHlGcm9tKEJZVEVTLCAwLCA1KTsKLSAgICBCeXRlU3RyaW5nIHAyID0gQnl0ZVN0cmluZy5jb3B5
RnJvbShCWVRFUywgNSwgQllURVMubGVuZ3RoIC0gNSk7Ci0gICAgQnl0ZVN0cmluZyByb3BlID0g
cDEuY29uY2F0KHAyKTsKLQotICAgIGFzc2VydEVxdWFscyhDTEFTU05BTUUgKyAiIG11c3QgZXF1
YWwgUm9wZUJ5dGVTdHJpbmcgd2l0aCBzYW1lIHZhbHVlIiwgcm9wZSwKLSAgICAgICAgdGVzdFN0
cmluZyk7Ci0gICAgYXNzZXJ0RXF1YWxzKENMQVNTTkFNRSArICIgbXVzdCBlcXVhbCBSb3BlQnl0
ZVN0cmluZyB3aXRoIHNhbWUgdmFsdWUiLCB0ZXN0U3RyaW5nLAotICAgICAgICByb3BlKTsKLSAg
ICBhc3NlcnRGYWxzZShDTEFTU05BTUUgKyAiIG11c3Qgbm90IGVxdWFsIHRoZSBlbXB0eSBzdHJp
bmciLAotICAgICAgICB0ZXN0U3RyaW5nLmVxdWFscyhCeXRlU3RyaW5nLkVNUFRZLmNvbmNhdChC
eXRlU3RyaW5nLkVNUFRZKSkpOwotICAgIGFzc2VydEVxdWFscyhDTEFTU05BTUUgKyAiIGVtcHR5
IHN0cmluZ3MgbXVzdCBiZSBlcXVhbCIsCi0gICAgICAgIEJ5dGVTdHJpbmcuRU1QVFkuY29uY2F0
KEJ5dGVTdHJpbmcuRU1QVFkpLCB0ZXN0U3RyaW5nLnN1YnN0cmluZyg1NSwgNTUpKTsKLQotICAg
IGJ5dGVbXSBtdW5nZWRCeXRlcyA9IG11bmdlZEJ5dGVzKCk7Ci0gICAgcDEgPSBCeXRlU3RyaW5n
LmNvcHlGcm9tKG11bmdlZEJ5dGVzLCAwLCA1KTsKLSAgICBwMiA9IEJ5dGVTdHJpbmcuY29weUZy
b20obXVuZ2VkQnl0ZXMsIDUsIG11bmdlZEJ5dGVzLmxlbmd0aCAtIDUpOwotICAgIHJvcGUgPSBw
MS5jb25jYXQocDIpOwotICAgIGFzc2VydEZhbHNlKENMQVNTTkFNRSArICIgbXVzdCBub3QgZXF1
YWwgZXZlcnkgUm9wZUJ5dGVTdHJpbmcgd2l0aCB0aGUgc2FtZSBsZW5ndGgiLAotICAgICAgICB0
ZXN0U3RyaW5nLmVxdWFscyhyb3BlKSk7Ci0gICAgYXNzZXJ0RmFsc2UoQ0xBU1NOQU1FICsgIiBt
dXN0IG5vdCBlcXVhbCBldmVyeSBSb3BlQnl0ZVN0cmluZyB3aXRoIHRoZSBzYW1lIGxlbmd0aCIs
Ci0gICAgICAgIHJvcGUuZXF1YWxzKHRlc3RTdHJpbmcpKTsKLSAgfQotCi0gIHByaXZhdGUgYnl0
ZVtdIG11bmdlZEJ5dGVzKCkgewotICAgIGJ5dGVbXSBtdW5nZWRCeXRlcyA9IG5ldyBieXRlW0JZ
VEVTLmxlbmd0aF07Ci0gICAgU3lzdGVtLmFycmF5Y29weShCWVRFUywgMCwgbXVuZ2VkQnl0ZXMs
IDAsIEJZVEVTLmxlbmd0aCk7Ci0gICAgbXVuZ2VkQnl0ZXNbbXVuZ2VkQnl0ZXMubGVuZ3RoIC0g
NV0gPSAoYnl0ZSkgKG11bmdlZEJ5dGVzW211bmdlZEJ5dGVzLmxlbmd0aCAtIDVdIF4gMHhGRik7
Ci0gICAgcmV0dXJuIG11bmdlZEJ5dGVzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhhc2hD
b2RlKCkgewotICAgIGludCBoYXNoID0gdGVzdFN0cmluZy5oYXNoQ29kZSgpOwotICAgIGFzc2Vy
dEVxdWFscyhDTEFTU05BTUUgKyAiIG11c3QgaGF2ZSBleHBlY3RlZCBoYXNoQ29kZSIsIEVYUEVD
VEVEX0hBU0gsIGhhc2gpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBlZWtDYWNoZWRIYXNo
Q29kZSgpIHsKLSAgICBCeXRlU3RyaW5nIG5ld1N0cmluZyA9IG5ldyBOaW9CeXRlU3RyaW5nKGJh
Y2tpbmdCdWZmZXIpOwotICAgIGFzc2VydEVxdWFscyhDTEFTU05BTUUgKyAiLnBlZWtDYWNoZWRI
YXNoQ29kZSgpIHNob3VsZCByZXR1cm4gemVybyBhdCBmaXJzdCIsIDAsCi0gICAgICAgIG5ld1N0
cmluZy5wZWVrQ2FjaGVkSGFzaENvZGUoKSk7Ci0gICAgbmV3U3RyaW5nLmhhc2hDb2RlKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKENMQVNTTkFNRSArICIucGVla0NhY2hlZEhhc2hDb2RlIHNob3VsZCBy
ZXR1cm4gemVybyBhdCBmaXJzdCIsCi0gICAgICAgIEVYUEVDVEVEX0hBU0gsIG5ld1N0cmluZy5w
ZWVrQ2FjaGVkSGFzaENvZGUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFydGlhbEhh
c2goKSB7Ci0gICAgLy8gcGFydGlhbEhhc2goKSBpcyBtb3JlIHN0cmVudW91c2x5IHRlc3RlZCBl
bHNld2hlcmUgYnkgdGVzdGluZyBoYXNoZXMgb2Ygc3Vic3RyaW5ncy4KLSAgICAvLyBUaGlzIHRl
c3Qgd291bGQgZmFpbCBpZiB0aGUgZXhwZWN0ZWQgaGFzaCB3ZXJlIDEuICBJdCdzIG5vdC4KLSAg
ICBpbnQgaGFzaCA9IHRlc3RTdHJpbmcucGFydGlhbEhhc2godGVzdFN0cmluZy5zaXplKCksIDAs
IHRlc3RTdHJpbmcuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoQ0xBU1NOQU1FICsgIi5wYXJ0
aWFsSGFzaCgpIG11c3QgeWllbGQgZXhwZWN0ZWQgaGFzaENvZGUiLAotICAgICAgICBFWFBFQ1RF
RF9IQVNILCBoYXNoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROZXdJbnB1dCgpIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgSW5wdXRTdHJlYW0gaW5wdXQgPSB0ZXN0U3RyaW5nLm5ld0lu
cHV0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5hdmFpbGFibGUoKSByZXR1cm5z
IGNvcnJlY3QgdmFsdWUiLAotICAgICAgICB0ZXN0U3RyaW5nLnNpemUoKSwgaW5wdXQuYXZhaWxh
YmxlKCkpOwotICAgIGJvb2xlYW4gc3RpbGxFcXVhbCA9IHRydWU7Ci0gICAgZm9yIChieXRlIHJl
ZmVyZW5jZUJ5dGUgOiBCWVRFUykgewotICAgICAgaW50IGV4cGVjdGVkSW50ID0gKHJlZmVyZW5j
ZUJ5dGUgJiAweEZGKTsKLSAgICAgIHN0aWxsRXF1YWwgPSAoZXhwZWN0ZWRJbnQgPT0gaW5wdXQu
cmVhZCgpKTsKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5hdmFpbGFibGUo
KSByZXR1cm5zIGNvcnJlY3QgdmFsdWUiLAotICAgICAgICAwLCBpbnB1dC5hdmFpbGFibGUoKSk7
Ci0gICAgYXNzZXJ0VHJ1ZShDTEFTU05BTUUgKyAiIG11c3QgZ2l2ZSB0aGUgc2FtZSBieXRlcyBm
cm9tIHRoZSBJbnB1dFN0cmVhbSIsIHN0aWxsRXF1YWwpOwotICAgIGFzc2VydEVxdWFscyhDTEFT
U05BTUUgKyAiIElucHV0U3RyZWFtIG11c3Qgbm93IGJlIGV4aGF1c3RlZCIsIC0xLCBpbnB1dC5y
ZWFkKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5ld0lucHV0X3NraXAoKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgIElucHV0U3RyZWFtIGlucHV0ID0gdGVzdFN0cmluZy5uZXdJbnB1
dCgpOwotICAgIGludCBzdHJpbmdTaXplID0gdGVzdFN0cmluZy5zaXplKCk7Ci0gICAgaW50IG5l
YXJFbmRJbmRleCA9IHN0cmluZ1NpemUgKiAyIC8gMzsKLSAgICBsb25nIHNraXBwZWQxID0gaW5w
dXQuc2tpcChuZWFyRW5kSW5kZXgpOwotICAgIGFzc2VydEVxdWFscygiSW5wdXRTdHJlYW0uc2tp
cCgpIiwgc2tpcHBlZDEsIG5lYXJFbmRJbmRleCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0
cmVhbS5hdmFpbGFibGUoKSIsCi0gICAgICAgIHN0cmluZ1NpemUgLSBza2lwcGVkMSwgaW5wdXQu
YXZhaWxhYmxlKCkpOwotICAgIGFzc2VydFRydWUoIklucHV0U3RyZWFtLm1hcmsoKSBpcyBhdmFp
bGFibGUiLCBpbnB1dC5tYXJrU3VwcG9ydGVkKCkpOwotICAgIGlucHV0Lm1hcmsoMCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5za2lwKCksIHJlYWQoKSIsCi0gICAgICAgIHRlc3RT
dHJpbmcuYnl0ZUF0KG5lYXJFbmRJbmRleCkgJiAweEZGLCBpbnB1dC5yZWFkKCkpOwotICAgIGFz
c2VydEVxdWFscygiSW5wdXRTdHJlYW0uYXZhaWxhYmxlKCkiLAotICAgICAgICBzdHJpbmdTaXpl
IC0gc2tpcHBlZDEgLSAxLCBpbnB1dC5hdmFpbGFibGUoKSk7Ci0gICAgbG9uZyBza2lwcGVkMiA9
IGlucHV0LnNraXAoc3RyaW5nU2l6ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5z
a2lwKCkgaW5jb21wbGV0ZSIsCi0gICAgICAgIHNraXBwZWQyLCBzdHJpbmdTaXplIC0gc2tpcHBl
ZDEgLSAxKTsKLSAgICBhc3NlcnRFcXVhbHMoIklucHV0U3RyZWFtLnNraXAoKSwgbm8gbW9yZSBp
bnB1dCIsIDAsIGlucHV0LmF2YWlsYWJsZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoIklucHV0U3Ry
ZWFtLnNraXAoKSwgbm8gbW9yZSBpbnB1dCIsIC0xLCBpbnB1dC5yZWFkKCkpOwotICAgIGlucHV0
LnJlc2V0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5yZXNldCgpIHN1Y2NlZGVk
IiwKLSAgICAgICAgc3RyaW5nU2l6ZSAtIHNraXBwZWQxLCBpbnB1dC5hdmFpbGFibGUoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKCJJbnB1dFN0cmVhbS5yZXNldCgpLCByZWFkKCkiLAotICAgICAgICB0
ZXN0U3RyaW5nLmJ5dGVBdChuZWFyRW5kSW5kZXgpICYgMHhGRiwgaW5wdXQucmVhZCgpKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROZXdDb2RlZElucHV0KCkgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICBDb2RlZElucHV0U3RyZWFtIGNpcyA9IHRlc3RTdHJpbmcubmV3Q29kZWRJbnB1dCgp
OwotICAgIGJ5dGVbXSByb3VuZFRyaXBCeXRlcyA9IGNpcy5yZWFkUmF3Qnl0ZXMoQllURVMubGVu
Z3RoKTsKLSAgICBhc3NlcnRUcnVlKENMQVNTTkFNRSArICIgbXVzdCBnaXZlIHRoZSBzYW1lIGJ5
dGVzIGJhY2sgZnJvbSB0aGUgQ29kZWRJbnB1dFN0cmVhbSIsCi0gICAgICAgIEFycmF5cy5lcXVh
bHMoQllURVMsIHJvdW5kVHJpcEJ5dGVzKSk7Ci0gICAgYXNzZXJ0VHJ1ZShDTEFTU05BTUUgKyAi
IENvZGVkSW5wdXRTdHJlYW0gbXVzdCBub3cgYmUgZXhoYXVzdGVkIiwgY2lzLmlzQXRFbmQoKSk7
Ci0gIH0KLQotICAvKioKLSAgICogTWFrZSBzdXJlIHdlIGtlZXAgdGhpbmdzIHNpbXBsZSB3aGVu
IGNvbmNhdGVuYXRpbmcgd2l0aCBlbXB0eS4gU2VlIGFsc28KLSAgICoge0BsaW5rIEJ5dGVTdHJp
bmdUZXN0I3Rlc3RDb25jYXRfZW1wdHkoKX0uCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q29u
Y2F0X2VtcHR5KCkgewotICAgIGFzc2VydFNhbWUoQ0xBU1NOQU1FICsgIiBjb25jYXRlbmF0ZWQg
d2l0aCBlbXB0eSBtdXN0IGdpdmUgIiArIENMQVNTTkFNRSwKLSAgICAgICAgdGVzdFN0cmluZy5j
b25jYXQoRU1QVFkpLCB0ZXN0U3RyaW5nKTsKLSAgICBhc3NlcnRTYW1lKCJlbXB0eSBjb25jYXRl
bmF0ZWQgd2l0aCAiICsgQ0xBU1NOQU1FICsgIiBtdXN0IGdpdmUgIiArIENMQVNTTkFNRSwKLSAg
ICAgICAgRU1QVFkuY29uY2F0KHRlc3RTdHJpbmcpLCB0ZXN0U3RyaW5nKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RKYXZhU2VyaWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAg
IEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7
Ci0gICAgT2JqZWN0T3V0cHV0U3RyZWFtIG9vcyA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0ob3V0
KTsKLSAgICBvb3Mud3JpdGVPYmplY3QodGVzdFN0cmluZyk7Ci0gICAgb29zLmNsb3NlKCk7Ci0g
ICAgYnl0ZVtdIHBpY2tsZWQgPSBvdXQudG9CeXRlQXJyYXkoKTsKLSAgICBJbnB1dFN0cmVhbSBp
biA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShwaWNrbGVkKTsKLSAgICBPYmplY3RJbnB1dFN0
cmVhbSBvaXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oaW4pOwotICAgIE9iamVjdCBvID0gb2lz
LnJlYWRPYmplY3QoKTsKLSAgICBhc3NlcnRUcnVlKCJEaWRuJ3QgZ2V0IGEgQnl0ZVN0cmluZyBi
YWNrIiwgbyBpbnN0YW5jZW9mIEJ5dGVTdHJpbmcpOwotICAgIGFzc2VydEVxdWFscygiU2hvdWxk
IGdldCBhbiBlcXVhbCBCeXRlU3RyaW5nIGJhY2siLCB0ZXN0U3RyaW5nLCBvKTsKLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIEJ5dGVTdHJpbmcgZm9yU3RyaW5nKFN0cmluZyBzdHIpIHsKLSAgICBy
ZXR1cm4gbmV3IE5pb0J5dGVTdHJpbmcoQnl0ZUJ1ZmZlci53cmFwKHN0ci5nZXRCeXRlcyhVVEZf
OCkpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL1BhcnNlRXhjZXB0aW9uc1Rlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9QYXJzZUV4Y2VwdGlvbnNUZXN0LmphdmEKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMWYxZDcxZmYxY2U0MWEzYmQ3ZDZjNjY1NzQ2Mzc2
YzgxNWJlZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1BhcnNlRXhjZXB0aW9u
c1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1p
bXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRp
YyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQu
QXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsK
LQotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3Rvcy5EZXNjcmlwdG9y
UHJvdG87Ci0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVy
LlJ1bldpdGg7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuSlVuaXQ0OwotCi1pbXBvcnQgamF2
YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1
dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbHRlcklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEu
aW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBU
ZXN0cyB0aGUgZXhjZXB0aW9ucyB0aHJvd24gd2hlbiBwYXJzaW5nIGZyb20gYSBzdHJlYW0uIFRo
ZSBtZXRob2RzIG9uIHRoZSB7QGxpbmsgUGFyc2VyfQotICogaW50ZXJmYWNlIGFyZSBzcGVjaWZp
ZWQgdG8gb25seSB0aHJvdyB7QGxpbmsgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9ufS4g
QnV0IHdlIHJlYWxseSB3YW50Ci0gKiB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGludmFsaWQgcHJv
dG9zIHZzLiBhY3R1YWwgSS9PIGVycm9ycyAobGlrZSBmYWlsdXJlcyByZWFkaW5nIGZyb20gYQot
ICogc29ja2V0LCBldGMuKS4gU28sIHdoZW4gd2UncmUgbm90IHVzaW5nIHRoZSBwYXJzZXIgZGly
ZWN0bHksIGFuIHtAbGluayBJT0V4Y2VwdGlvbn0gc2hvdWxkIGJlCi0gKiB0aHJvd24gd2hlcmUg
YXBwcm9wcmlhdGUsIGluc3RlYWQgb2YgYWx3YXlzIGFuIHtAbGluayBJbnZhbGlkUHJvdG9jb2xC
dWZmZXJFeGNlcHRpb259LgotICoKLSAqIEBhdXRob3IgamhAc3F1YXJldXAuY29tIChKb3NodWEg
SHVtcGhyaWVzKQotICovCi1AUnVuV2l0aChKVW5pdDQuY2xhc3MpCi1wdWJsaWMgY2xhc3MgUGFy
c2VFeGNlcHRpb25zVGVzdCB7Ci0KLSAgcHJpdmF0ZSBpbnRlcmZhY2UgUGFyc2VUZXN0ZXIgewot
ICAgIERlc2NyaXB0b3JQcm90byBwYXJzZShJbnB1dFN0cmVhbSBpbikgdGhyb3dzIElPRXhjZXB0
aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBieXRlIHNlcmlhbGl6ZWRQcm90b1tdOwotCi0gIHByaXZh
dGUgdm9pZCBzZXR1cCgpIHsKLSAgICBzZXJpYWxpemVkUHJvdG8gPSBEZXNjcmlwdG9yUHJvdG8u
Z2V0RGVzY3JpcHRvcigpLnRvUHJvdG8oKS50b0J5dGVBcnJheSgpOwotICB9Ci0KLSAgcHJpdmF0
ZSB2b2lkIHNldHVwRGVsaW1pdGVkKCkgewotICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3Mg
PSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgdHJ5IHsKLSAgICAgIERlc2NyaXB0
b3JQcm90by5nZXREZXNjcmlwdG9yKCkudG9Qcm90bygpLndyaXRlRGVsaW1pdGVkVG8oYm9zKTsK
LSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKCJFeGNlcHRpb24gbm90
IGV4cGVjdGVkOiAiICsgZSk7Ci0gICAgfQotICAgIHNlcmlhbGl6ZWRQcm90byA9IGJvcy50b0J5
dGVBcnJheSgpOwotICB9Ci0KLSAgQFRlc3QgcHVibGljIHZvaWQgbWVzc2FnZV9wYXJzZUZyb21f
SW5wdXRTdHJlYW0oKSB7Ci0gICAgc2V0dXAoKTsKLSAgICB2ZXJpZnlFeGNlcHRpb25zKAotICAg
ICAgICBuZXcgUGFyc2VUZXN0ZXIoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAg
cHVibGljIERlc2NyaXB0b3JQcm90byBwYXJzZShJbnB1dFN0cmVhbSBpbikgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICAgICAgICAgIHJldHVybiBEZXNjcmlwdG9yUHJvdG8ucGFyc2VGcm9tKGlu
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICB9Ci0KLSAgQFRlc3QgcHVibGljIHZvaWQg
bWVzc2FnZV9wYXJzZUZyb21fSW5wdXRTdHJlYW1BbmRFeHRlbnNpb25SZWdpc3RyeSgpIHsKLSAg
ICBzZXR1cCgpOwotICAgIHZlcmlmeUV4Y2VwdGlvbnMoCi0gICAgICAgIG5ldyBQYXJzZVRlc3Rl
cigpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgRGVzY3JpcHRvclBy
b3RvIHBhcnNlKElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAg
ICAgcmV0dXJuIERlc2NyaXB0b3JQcm90by5wYXJzZUZyb20oaW4sIEV4dGVuc2lvblJlZ2lzdHJ5
Lm5ld0luc3RhbmNlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0KLQotICBAVGVz
dCBwdWJsaWMgdm9pZCBtZXNzYWdlX3BhcnNlRnJvbV9Db2RlZElucHV0U3RyZWFtKCkgewotICAg
IHNldHVwKCk7Ci0gICAgdmVyaWZ5RXhjZXB0aW9ucygKLSAgICAgICAgbmV3IFBhcnNlVGVzdGVy
KCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyBEZXNjcmlwdG9yUHJv
dG8gcGFyc2UoSW5wdXRTdHJlYW0gaW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAg
ICByZXR1cm4gRGVzY3JpcHRvclByb3RvLnBhcnNlRnJvbShDb2RlZElucHV0U3RyZWFtLm5ld0lu
c3RhbmNlKGluKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgfQotCi0gIEBUZXN0IHB1
YmxpYyB2b2lkIG1lc3NhZ2VfcGFyc2VGcm9tX0NvZGVkSW5wdXRTdHJlYW1BbmRFeHRlbnNpb25S
ZWdpc3RyeSgpIHsKLSAgICBzZXR1cCgpOwotICAgIHZlcmlmeUV4Y2VwdGlvbnMoCi0gICAgICAg
IG5ldyBQYXJzZVRlc3RlcigpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJs
aWMgRGVzY3JpcHRvclByb3RvIHBhcnNlKElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRp
b24gewotICAgICAgICAgICAgcmV0dXJuIERlc2NyaXB0b3JQcm90by5wYXJzZUZyb20oCi0gICAg
ICAgICAgICAgICAgQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShpbiksIEV4dGVuc2lvblJl
Z2lzdHJ5Lm5ld0luc3RhbmNlKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0KLQot
ICBAVGVzdCBwdWJsaWMgdm9pZCBtZXNzYWdlX3BhcnNlRGVsaW1pdGVkRnJvbV9JbnB1dFN0cmVh
bSgpIHsKLSAgICBzZXR1cERlbGltaXRlZCgpOwotICAgIHZlcmlmeUV4Y2VwdGlvbnMoCi0gICAg
ICAgIG5ldyBQYXJzZVRlc3RlcigpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBw
dWJsaWMgRGVzY3JpcHRvclByb3RvIHBhcnNlKElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgICAgICAgICAgcmV0dXJuIERlc2NyaXB0b3JQcm90by5wYXJzZURlbGltaXRl
ZEZyb20oaW4pOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0KLQotICBAVGVzdCBwdWJs
aWMgdm9pZCBtZXNzYWdlX3BhcnNlRGVsaW1pdGVkRnJvbV9JbnB1dFN0cmVhbUFuZEV4dGVuc2lv
blJlZ2lzdHJ5KCkgewotICAgIHNldHVwRGVsaW1pdGVkKCk7Ci0gICAgdmVyaWZ5RXhjZXB0aW9u
cygKLSAgICAgICAgbmV3IFBhcnNlVGVzdGVyKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAg
ICAgICAgIHB1YmxpYyBEZXNjcmlwdG9yUHJvdG8gcGFyc2UoSW5wdXRTdHJlYW0gaW4pIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICByZXR1cm4gRGVzY3JpcHRvclByb3RvLnBhcnNl
RGVsaW1pdGVkRnJvbShpbiwgRXh0ZW5zaW9uUmVnaXN0cnkubmV3SW5zdGFuY2UoKSk7Ci0gICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgfQotCi0gIEBUZXN0IHB1YmxpYyB2b2lkIG1lc3NhZ2VC
dWlsZGVyX21lcmdlRnJvbV9JbnB1dFN0cmVhbSgpIHsKLSAgICBzZXR1cCgpOwotICAgIHZlcmlm
eUV4Y2VwdGlvbnMoCi0gICAgICAgIG5ldyBQYXJzZVRlc3RlcigpIHsKLSAgICAgICAgICBAT3Zl
cnJpZGUKLSAgICAgICAgICBwdWJsaWMgRGVzY3JpcHRvclByb3RvIHBhcnNlKElucHV0U3RyZWFt
IGluKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0dXJuIERlc2NyaXB0b3JQ
cm90by5uZXdCdWlsZGVyKCkubWVyZ2VGcm9tKGluKS5idWlsZCgpOwotICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0gIH0KLQotICBAVGVzdCBwdWJsaWMgdm9pZCBtZXNzYWdlQnVpbGRlcl9tZXJn
ZUZyb21fSW5wdXRTdHJlYW1BbmRFeHRlbnNpb25SZWdpc3RyeSgpIHsKLSAgICBzZXR1cCgpOwot
ICAgIHZlcmlmeUV4Y2VwdGlvbnMoCi0gICAgICAgIG5ldyBQYXJzZVRlc3RlcigpIHsKLSAgICAg
ICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgRGVzY3JpcHRvclByb3RvIHBhcnNlKElu
cHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0dXJuIERl
c2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgICAgICAubWVyZ2VGcm9tKGlu
LCBFeHRlbnNpb25SZWdpc3RyeS5uZXdJbnN0YW5jZSgpKQotICAgICAgICAgICAgICAgIC5idWls
ZCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0KLQotICBAVGVzdCBwdWJsaWMgdm9p
ZCBtZXNzYWdlQnVpbGRlcl9tZXJnZUZyb21fQ29kZWRJbnB1dFN0cmVhbSgpIHsKLSAgICBzZXR1
cCgpOwotICAgIHZlcmlmeUV4Y2VwdGlvbnMoCi0gICAgICAgIG5ldyBQYXJzZVRlc3RlcigpIHsK
LSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgRGVzY3JpcHRvclByb3RvIHBh
cnNlKElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0
dXJuIERlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCkubWVyZ2VGcm9tKENvZGVkSW5wdXRTdHJl
YW0ubmV3SW5zdGFuY2UoaW4pKS5idWlsZCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0g
IH0KLQotICBAVGVzdCBwdWJsaWMgdm9pZCBtZXNzYWdlQnVpbGRlcl9tZXJnZUZyb21fQ29kZWRJ
bnB1dFN0cmVhbUFuZEV4dGVuc2lvblJlZ2lzdHJ5KCkgewotICAgIHNldHVwKCk7Ci0gICAgdmVy
aWZ5RXhjZXB0aW9ucygKLSAgICAgICAgbmV3IFBhcnNlVGVzdGVyKCkgewotICAgICAgICAgIEBP
dmVycmlkZQotICAgICAgICAgIHB1YmxpYyBEZXNjcmlwdG9yUHJvdG8gcGFyc2UoSW5wdXRTdHJl
YW0gaW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICByZXR1cm4gRGVzY3JpcHRv
clByb3RvLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgICAgIC5tZXJnZUZyb20oQ29kZWRJbnB1
dFN0cmVhbS5uZXdJbnN0YW5jZShpbiksIEV4dGVuc2lvblJlZ2lzdHJ5Lm5ld0luc3RhbmNlKCkp
Ci0gICAgICAgICAgICAgICAgLmJ1aWxkKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAg
fQotCi0gIEBUZXN0IHB1YmxpYyB2b2lkIG1lc3NhZ2VCdWlsZGVyX21lcmdlRGVsaW1pdGVkRnJv
bV9JbnB1dFN0cmVhbSgpIHsKLSAgICBzZXR1cERlbGltaXRlZCgpOwotICAgIHZlcmlmeUV4Y2Vw
dGlvbnMoCi0gICAgICAgIG5ldyBQYXJzZVRlc3RlcigpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUK
LSAgICAgICAgICBwdWJsaWMgRGVzY3JpcHRvclByb3RvIHBhcnNlKElucHV0U3RyZWFtIGluKSB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgRGVzY3JpcHRvclByb3RvLkJ1aWxkZXIg
YnVpbGRlciA9IERlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCk7Ci0gICAgICAgICAgICBidWls
ZGVyLm1lcmdlRGVsaW1pdGVkRnJvbShpbik7Ci0gICAgICAgICAgICByZXR1cm4gYnVpbGRlci5i
dWlsZCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0KLQotICBAVGVzdCBwdWJsaWMg
dm9pZCBtZXNzYWdlQnVpbGRlcl9tZXJnZURlbGltaXRlZEZyb21fSW5wdXRTdHJlYW1BbmRFeHRl
bnNpb25SZWdpc3RyeSgpIHsKLSAgICBzZXR1cERlbGltaXRlZCgpOwotICAgIHZlcmlmeUV4Y2Vw
dGlvbnMoCi0gICAgICAgIG5ldyBQYXJzZVRlc3RlcigpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUK
LSAgICAgICAgICBwdWJsaWMgRGVzY3JpcHRvclByb3RvIHBhcnNlKElucHV0U3RyZWFtIGluKSB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgRGVzY3JpcHRvclByb3RvLkJ1aWxkZXIg
YnVpbGRlciA9IERlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCk7Ci0gICAgICAgICAgICBidWls
ZGVyLm1lcmdlRGVsaW1pdGVkRnJvbShpbiwgRXh0ZW5zaW9uUmVnaXN0cnkubmV3SW5zdGFuY2Uo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwotICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdmVyaWZ5RXhjZXB0aW9ucyhQYXJzZVRl
c3RlciBwYXJzZVRlc3RlcikgewotICAgIC8vIE5vIGV4Y2VwdGlvbgotICAgIHRyeSB7Ci0gICAg
ICBhc3NlcnRFcXVhbHMoRGVzY3JpcHRvclByb3RvLmdldERlc2NyaXB0b3IoKS50b1Byb3RvKCks
Ci0gICAgICAgICAgcGFyc2VUZXN0ZXIucGFyc2UobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHNl
cmlhbGl6ZWRQcm90bykpKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBm
YWlsKCJObyBleGNlcHRpb24gZXhwZWN0ZWQ6ICIgKyBlKTsKLSAgICB9Ci0KLSAgICAvLyBJT0V4
Y2VwdGlvbgotICAgIHRyeSB7Ci0gICAgICAvLyB1c2luZyBhICJicm9rZW4iIHN0cmVhbSB0aGF0
IHdpbGwgdGhyb3cgcGFydC13YXkgdGhyb3VnaCByZWFkaW5nIHRoZSBtZXNzYWdlCi0gICAgICBw
YXJzZVRlc3Rlci5wYXJzZShicm9rZW4obmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHNlcmlhbGl6
ZWRQcm90bykpKTsKLSAgICAgIGZhaWwoIklPRXhjZXB0aW9uIGV4cGVjdGVkIGJ1dCBub3QgdGhy
b3duIik7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgYXNzZXJ0RmFsc2Uo
ZSBpbnN0YW5jZW9mIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbik7Ci0gICAgfQotCi0g
ICAgLy8gSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uCi0gICAgdHJ5IHsKLSAgICAgIC8v
IG1ha2UgdGhlIHNlcmlhbGl6ZWQgcHJvdG8gaW52YWxpZAotICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA1MDsgaSsrKSB7Ci0gICAgICAgIHNlcmlhbGl6ZWRQcm90b1tpXSA9IC0xOwotICAgICAg
fQotICAgICAgcGFyc2VUZXN0ZXIucGFyc2UobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHNlcmlh
bGl6ZWRQcm90bykpOwotICAgICAgZmFpbCgiSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
IGV4cGVjdGVkIGJ1dCBub3QgdGhyb3duIik7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkg
ewotICAgICAgYXNzZXJ0VHJ1ZShlIGluc3RhbmNlb2YgSW52YWxpZFByb3RvY29sQnVmZmVyRXhj
ZXB0aW9uKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIElucHV0U3RyZWFtIGJyb2tlbihJbnB1
dFN0cmVhbSBpKSB7Ci0gICAgcmV0dXJuIG5ldyBGaWx0ZXJJbnB1dFN0cmVhbShpKSB7Ci0gICAg
ICBpbnQgY291bnQgPSAwOwotCi0gICAgICBAT3ZlcnJpZGUgcHVibGljIGludCByZWFkKCkgdGhy
b3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKGNvdW50KysgPj0gNTApIHsKLSAgICAgICAg
ICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkknbSBicm9rZW4hIik7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHN1cGVyLnJlYWQoKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlIHB1Ymxp
YyBpbnQgcmVhZChieXRlIGJbXSwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICAgICAgaWYgKChjb3VudCArPSBsZW4pID49IDUwKSB7Ci0gICAgICAgICAgdGhyb3cg
bmV3IElPRXhjZXB0aW9uKCJJJ20gYnJva2VuISIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBzdXBlci5yZWFkKGIsIG9mZiwgbGVuKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvUGFyc2Vy
VGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1Bh
cnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA4NDJkMmMwODMz
ZmMxM2I5MWJkNjVhODdmNDUyNzRhZDExNTA5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvUGFyc2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJv
dG9idWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5UZXN0QWxs
VHlwZXNMaXRlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLlRlc3RQ
YWNrZWRFeHRlbnNpb25zTGl0ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0
TGl0ZS5UZXN0UGFyc2luZ01lcmdlTGl0ZTsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0
dGVzdE9wdGltaXplRm9yOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0T3B0aW1p
emVGb3IuVGVzdE9wdGltaXplZEZvclNpemU7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5p
dHRlc3RPcHRpbWl6ZUZvci5UZXN0UmVxdWlyZWRPcHRpbWl6ZWRGb3JTaXplOwotaW1wb3J0IHBy
b3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG87Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3Qu
VW5pdHRlc3RQcm90by5Gb3JlaWduTWVzc2FnZTsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5V
bml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0
dGVzdFByb3RvLlRlc3RFbXB0eU1lc3NhZ2U7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5p
dHRlc3RQcm90by5UZXN0UGFyc2luZ01lcmdlOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVu
aXR0ZXN0UHJvdG8uVGVzdFJlcXVpcmVkOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RD
YXNlOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZh
LmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwot
aW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLS8qKgotICogVW5pdCB0ZXN0IGZvciB7QGxp
bmsgUGFyc2VyfS4KLSAqCi0gKiBAYXV0aG9yIGxpdWppc2lAZ29vZ2xlLmNvbSAoUGhlcmwgTGl1
KQotICovCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgcHVi
bGljIHZvaWQgdGVzdEdlbmVyYXRlZE1lc3NhZ2VQYXJzZXJTaW5nbGV0b24oKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAgICAgIGFzc2Vy
dEVxdWFscyhUZXN0QWxsVHlwZXMucGFyc2VyKCksIFRlc3RVdGlsLmdldEFsbFNldCgpLmdldFBh
cnNlckZvclR5cGUoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFzc2VydFJvdW5k
VHJpcEVxdWFscyhNZXNzYWdlTGl0ZSBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSByZWdpc3RyeSkKLSAgICAgIHRocm93
cyBFeGNlcHRpb24gewotICAgIGZpbmFsIGJ5dGVbXSBkYXRhID0gbWVzc2FnZS50b0J5dGVBcnJh
eSgpOwotICAgIGZpbmFsIGludCBvZmZzZXQgPSAyMDsKLSAgICBmaW5hbCBpbnQgbGVuZ3RoID0g
ZGF0YS5sZW5ndGg7Ci0gICAgZmluYWwgaW50IHBhZGRpbmcgPSAzMDsKLSAgICBQYXJzZXI8PyBl
eHRlbmRzIE1lc3NhZ2VMaXRlPiBwYXJzZXIgPSBtZXNzYWdlLmdldFBhcnNlckZvclR5cGUoKTsK
LSAgICBhc3NlcnRNZXNzYWdlRXF1YWxzKG1lc3NhZ2UsIHBhcnNlci5wYXJzZUZyb20oZGF0YSwg
cmVnaXN0cnkpKTsKLSAgICBhc3NlcnRNZXNzYWdlRXF1YWxzKG1lc3NhZ2UsIHBhcnNlci5wYXJz
ZUZyb20oCi0gICAgICAgIGdlbmVyYXRlUGFkZGluZ0FycmF5KGRhdGEsIG9mZnNldCwgcGFkZGlu
ZyksCi0gICAgICAgIG9mZnNldCwgbGVuZ3RoLCByZWdpc3RyeSkpOwotICAgIGFzc2VydE1lc3Nh
Z2VFcXVhbHMobWVzc2FnZSwgcGFyc2VyLnBhcnNlRnJvbSgKLSAgICAgICAgbWVzc2FnZS50b0J5
dGVTdHJpbmcoKSwgcmVnaXN0cnkpKTsKLSAgICBhc3NlcnRNZXNzYWdlRXF1YWxzKG1lc3NhZ2Us
IHBhcnNlci5wYXJzZUZyb20oCi0gICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShkYXRh
KSwgcmVnaXN0cnkpKTsKLSAgICBhc3NlcnRNZXNzYWdlRXF1YWxzKG1lc3NhZ2UsIHBhcnNlci5w
YXJzZUZyb20oCi0gICAgICAgIENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2UoZGF0YSksIHJl
Z2lzdHJ5KSk7Ci0gIH0KLQotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHJp
dmF0ZSB2b2lkIGFzc2VydFJvdW5kVHJpcEVxdWFscyhNZXNzYWdlTGl0ZSBtZXNzYWdlKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBieXRlW10gZGF0YSA9IG1lc3NhZ2UudG9CeXRlQXJy
YXkoKTsKLSAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gMjA7Ci0gICAgZmluYWwgaW50IGxlbmd0aCA9
IGRhdGEubGVuZ3RoOwotICAgIGZpbmFsIGludCBwYWRkaW5nID0gMzA7Ci0KLSAgICBQYXJzZXI8
TWVzc2FnZUxpdGU+IHBhcnNlciA9Ci0gICAgICAgIChQYXJzZXI8TWVzc2FnZUxpdGU+KSBtZXNz
YWdlLmdldFBhcnNlckZvclR5cGUoKTsKLSAgICBhc3NlcnRNZXNzYWdlRXF1YWxzKG1lc3NhZ2Us
IHBhcnNlci5wYXJzZUZyb20oZGF0YSkpOwotICAgIGFzc2VydE1lc3NhZ2VFcXVhbHMobWVzc2Fn
ZSwgcGFyc2VyLnBhcnNlRnJvbSgKLSAgICAgICAgZ2VuZXJhdGVQYWRkaW5nQXJyYXkoZGF0YSwg
b2Zmc2V0LCBwYWRkaW5nKSwKLSAgICAgICAgb2Zmc2V0LCBsZW5ndGgpKTsKLSAgICBhc3NlcnRN
ZXNzYWdlRXF1YWxzKG1lc3NhZ2UsIHBhcnNlci5wYXJzZUZyb20obWVzc2FnZS50b0J5dGVTdHJp
bmcoKSkpOwotICAgIGFzc2VydE1lc3NhZ2VFcXVhbHMobWVzc2FnZSwgcGFyc2VyLnBhcnNlRnJv
bSgKLSAgICAgICAgbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGRhdGEpKSk7Ci0gICAgYXNzZXJ0
TWVzc2FnZUVxdWFscyhtZXNzYWdlLCBwYXJzZXIucGFyc2VGcm9tKAotICAgICAgICBDb2RlZElu
cHV0U3RyZWFtLm5ld0luc3RhbmNlKGRhdGEpKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYXNz
ZXJ0TWVzc2FnZUVxdWFscygKLSAgICAgIE1lc3NhZ2VMaXRlIGV4cGVjdGVkLCBNZXNzYWdlTGl0
ZSBhY3R1YWwpCi0gICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZiAoZXhwZWN0ZWQgaW5z
dGFuY2VvZiBNZXNzYWdlKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC50b0J5dGVTdHJpbmco
KSwgYWN0dWFsLnRvQnl0ZVN0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJ5dGVb
XSBnZW5lcmF0ZVBhZGRpbmdBcnJheShieXRlW10gZGF0YSwgaW50IG9mZnNldCwgaW50IHBhZGRp
bmcpIHsKLSAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbb2Zmc2V0ICsgZGF0YS5sZW5ndGgg
KyBwYWRkaW5nXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KGRhdGEsIDAsIHJlc3VsdCwgb2Zmc2V0
LCBkYXRhLmxlbmd0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3ROb3JtYWxNZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0Um91bmRU
cmlwRXF1YWxzKFRlc3RVdGlsLmdldEFsbFNldCgpKTsKLSAgfQotCi0KLSAgcHVibGljIHZvaWQg
dGVzdFBhcnNlUGFydGlhbCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIGFzc2VydFBhcnNlUGFy
dGlhbChUZXN0UmVxdWlyZWQucGFyc2VyKCksIFRlc3RSZXF1aXJlZC5uZXdCdWlsZGVyKCkuc2V0
QSgxKS5idWlsZFBhcnRpYWwoKSk7Ci0gIH0KLQotICBwcml2YXRlIDxUIGV4dGVuZHMgTWVzc2Fn
ZUxpdGU+IHZvaWQgYXNzZXJ0UGFyc2VQYXJ0aWFsKAotICAgICAgUGFyc2VyPFQ+IHBhcnNlciwg
VCBwYXJ0aWFsTWVzc2FnZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgU3RyaW5nIGVy
cm9yU3RyaW5nID0KLSAgICAgICAgIlNob3VsZCB0aHJvdyBleGNlcHRpb25zIHdoZW4gdGhlIHBh
cnNlZCBtZXNzYWdlIGlzbid0IGluaXRpYWxpemVkLiI7Ci0KLSAgICAvLyBwYXJzZVBhcnRpYWxG
cm9tIHNob3VsZCBwYXNzLgotICAgIGJ5dGVbXSBkYXRhID0gcGFydGlhbE1lc3NhZ2UudG9CeXRl
QXJyYXkoKTsKLSAgICBhc3NlcnRFcXVhbHMocGFydGlhbE1lc3NhZ2UsIHBhcnNlci5wYXJzZVBh
cnRpYWxGcm9tKGRhdGEpKTsKLSAgICBhc3NlcnRFcXVhbHMocGFydGlhbE1lc3NhZ2UsIHBhcnNl
ci5wYXJzZVBhcnRpYWxGcm9tKAotICAgICAgICBwYXJ0aWFsTWVzc2FnZS50b0J5dGVTdHJpbmco
KSkpOwotICAgIGFzc2VydEVxdWFscyhwYXJ0aWFsTWVzc2FnZSwgcGFyc2VyLnBhcnNlUGFydGlh
bEZyb20oCi0gICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShkYXRhKSkpOwotICAgIGFz
c2VydEVxdWFscyhwYXJ0aWFsTWVzc2FnZSwgcGFyc2VyLnBhcnNlUGFydGlhbEZyb20oCi0gICAg
ICAgIENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2UoZGF0YSkpKTsKLQotICAgIC8vIHBhcnNl
RnJvbShCeXRlQXJyYXkpCi0gICAgdHJ5IHsKLSAgICAgIHBhcnNlci5wYXJzZUZyb20ocGFydGlh
bE1lc3NhZ2UudG9CeXRlQXJyYXkoKSk7Ci0gICAgICBmYWlsKGVycm9yU3RyaW5nKTsKLSAgICB9
IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgLy8gcGFz
cy4KLSAgICB9Ci0KLSAgICAvLyBwYXJzZUZyb20oQnl0ZVN0cmluZykKLSAgICB0cnkgewotICAg
ICAgcGFyc2VyLnBhcnNlRnJvbShwYXJ0aWFsTWVzc2FnZS50b0J5dGVTdHJpbmcoKSk7Ci0gICAg
ICBmYWlsKGVycm9yU3RyaW5nKTsKLSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24gZSkgewotICAgICAgLy8gcGFzcy4KLSAgICB9Ci0KLSAgICAvLyBwYXJzZUZyb20o
SW5wdXRTdHJlYW0pCi0gICAgdHJ5IHsKLSAgICAgIHBhcnNlci5wYXJzZUZyb20obmV3IEJ5dGVB
cnJheUlucHV0U3RyZWFtKHBhcnRpYWxNZXNzYWdlLnRvQnl0ZUFycmF5KCkpKTsKLSAgICAgIGZh
aWwoZXJyb3JTdHJpbmcpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8v
IHBhc3MuCi0gICAgfQotCi0gICAgLy8gcGFyc2VGcm9tKENvZGVkSW5wdXRTdHJlYW0pCi0gICAg
dHJ5IHsKLSAgICAgIHBhcnNlci5wYXJzZUZyb20oQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5j
ZSgKLSAgICAgICAgICBwYXJ0aWFsTWVzc2FnZS50b0J5dGVBcnJheSgpKSk7Ci0gICAgICBmYWls
KGVycm9yU3RyaW5nKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBw
YXNzLgotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZUV4dGVuc2lvbnMoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMoVGVzdFV0aWwuZ2V0
QWxsRXh0ZW5zaW9uc1NldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0VXRpbC5n
ZXRFeHRlbnNpb25SZWdpc3RyeSgpKTsKLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMoCi0gICAg
ICAgIFRlc3RVdGlsTGl0ZS5nZXRBbGxMaXRlRXh0ZW5zaW9uc1NldCgpLCBUZXN0VXRpbExpdGUu
Z2V0RXh0ZW5zaW9uUmVnaXN0cnlMaXRlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBh
cnNlUGFja2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0Um91bmRUcmlwRXF1YWxz
KFRlc3RVdGlsLmdldFBhY2tlZFNldCgpKTsKLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMoVGVz
dFV0aWwuZ2V0UGFja2VkRXh0ZW5zaW9uc1NldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBUZXN0VXRpbC5nZXRFeHRlbnNpb25SZWdpc3RyeSgpKTsKLSAgICBhc3NlcnRSb3VuZFRyaXBF
cXVhbHMoCi0gICAgICAgIFRlc3RVdGlsTGl0ZS5nZXRMaXRlUGFja2VkRXh0ZW5zaW9uc1NldCgp
LCBUZXN0VXRpbExpdGUuZ2V0RXh0ZW5zaW9uUmVnaXN0cnlMaXRlKCkpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdFBhcnNlRGVsaW1pdGVkVG8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAv
LyBXcml0ZSBub3JtYWwgTWVzc2FnZS4KLSAgICBUZXN0QWxsVHlwZXMgbm9ybWFsTWVzc2FnZSA9
IFRlc3RVdGlsLmdldEFsbFNldCgpOwotICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQg
PSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgbm9ybWFsTWVzc2FnZS53cml0ZURl
bGltaXRlZFRvKG91dHB1dCk7Ci0KLSAgICAvLyBXcml0ZSBNZXNzYWdlTGl0ZSB3aXRoIHBhY2tl
ZCBleHRlbnNpb24gZmllbGRzLgotICAgIFRlc3RQYWNrZWRFeHRlbnNpb25zTGl0ZSBwYWNrZWRN
ZXNzYWdlID0gVGVzdFV0aWxMaXRlLmdldExpdGVQYWNrZWRFeHRlbnNpb25zU2V0KCk7Ci0gICAg
cGFja2VkTWVzc2FnZS53cml0ZURlbGltaXRlZFRvKG91dHB1dCk7Ci0KLSAgICBJbnB1dFN0cmVh
bSBpbnB1dCA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSk7
Ci0gICAgYXNzZXJ0TWVzc2FnZUVxdWFscygKLSAgICAgICAgbm9ybWFsTWVzc2FnZSwKLSAgICAg
ICAgbm9ybWFsTWVzc2FnZS5nZXRQYXJzZXJGb3JUeXBlKCkucGFyc2VEZWxpbWl0ZWRGcm9tKGlu
cHV0KSk7Ci0gICAgYXNzZXJ0TWVzc2FnZUVxdWFscygKLSAgICAgICAgcGFja2VkTWVzc2FnZSwK
LSAgICAgICAgcGFja2VkTWVzc2FnZQotICAgICAgICAgICAgLmdldFBhcnNlckZvclR5cGUoKQot
ICAgICAgICAgICAgLnBhcnNlRGVsaW1pdGVkRnJvbShpbnB1dCwgVGVzdFV0aWxMaXRlLmdldEV4
dGVuc2lvblJlZ2lzdHJ5TGl0ZSgpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VV
bmtub3duRmllbGRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gQWxsIGZpZWxkcyB3aWxs
IGJlIHRyZWF0ZWQgYXMgdW5rbm93biBmaWVsZHMgaW4gZW1wdHlNZXNzYWdlLgotICAgIFRlc3RF
bXB0eU1lc3NhZ2UgZW1wdHlNZXNzYWdlID0KLSAgICAgICAgVGVzdEVtcHR5TWVzc2FnZS5wYXJz
ZXIoKS5wYXJzZUZyb20oVGVzdFV0aWwuZ2V0QWxsU2V0KCkudG9CeXRlU3RyaW5nKCkpOwotICAg
IGFzc2VydEVxdWFscygKLSAgICAgICAgVGVzdFV0aWwuZ2V0QWxsU2V0KCkudG9CeXRlU3RyaW5n
KCksCi0gICAgICAgIGVtcHR5TWVzc2FnZS50b0J5dGVTdHJpbmcoKSk7Ci0gIH0KLQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RPcHRpbWl6ZUZvclNpemUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBU
ZXN0T3B0aW1pemVkRm9yU2l6ZS5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0T3B0aW1pemVkRm9yU2l6
ZS5uZXdCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5zZXRJKDEyKS5zZXRNc2coRm9yZWlnbk1lc3Nh
Z2UubmV3QnVpbGRlcigpLnNldEMoMzQpLmJ1aWxkKCkpOwotICAgIGJ1aWxkZXIuc2V0RXh0ZW5z
aW9uKFRlc3RPcHRpbWl6ZWRGb3JTaXplLnRlc3RFeHRlbnNpb24sIDU2KTsKLSAgICBidWlsZGVy
LnNldEV4dGVuc2lvbihUZXN0T3B0aW1pemVkRm9yU2l6ZS50ZXN0RXh0ZW5zaW9uMiwKLSAgICAg
ICAgVGVzdFJlcXVpcmVkT3B0aW1pemVkRm9yU2l6ZS5uZXdCdWlsZGVyKCkuc2V0WCg3OCkuYnVp
bGQoKSk7Ci0KLSAgICBUZXN0T3B0aW1pemVkRm9yU2l6ZSBtZXNzYWdlID0gYnVpbGRlci5idWls
ZCgpOwotICAgIEV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gRXh0ZW5zaW9uUmVnaXN0cnku
bmV3SW5zdGFuY2UoKTsKLSAgICBVbml0dGVzdE9wdGltaXplRm9yLnJlZ2lzdGVyQWxsRXh0ZW5z
aW9ucyhyZWdpc3RyeSk7Ci0KLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMobWVzc2FnZSwgcmVn
aXN0cnkpOwotICB9Ci0KLSAgLyoqIEhlbHBlciBtZXRob2QgZm9yIHtAbGluayAjdGVzdFBhcnNp
bmdNZXJnZSgpfS4qLwotICBwcml2YXRlIHZvaWQgYXNzZXJ0TWVzc2FnZU1lcmdlZChUZXN0QWxs
VHlwZXMgYWxsVHlwZXMpCi0gICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRFcXVh
bHMoMywgYWxsVHlwZXMuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwg
YWxsVHlwZXMuZ2V0T3B0aW9uYWxJbnQ2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoImhlbGxvIiwg
YWxsVHlwZXMuZ2V0T3B0aW9uYWxTdHJpbmcoKSk7Ci0gIH0KLQotICAvKiogSGVscGVyIG1ldGhv
ZCBmb3Ige0BsaW5rICN0ZXN0UGFyc2luZ01lcmdlTGl0ZSgpfS4qLwotICBwcml2YXRlIHZvaWQg
YXNzZXJ0TWVzc2FnZU1lcmdlZChUZXN0QWxsVHlwZXNMaXRlIGFsbFR5cGVzKQotICAgICAgdGhy
b3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIGFsbFR5cGVzLmdldE9wdGlvbmFs
SW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGFsbFR5cGVzLmdldE9wdGlvbmFsSW50NjQo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJoZWxsbyIsIGFsbFR5cGVzLmdldE9wdGlvbmFsU3RyaW5n
KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNpbmdNZXJnZSgpIHRocm93cyBFeGNl
cHRpb24gewotICAgIC8vIEJ1aWxkIG1lc3NhZ2VzLgotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVy
IGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIFRlc3RBbGxUeXBlcyBt
c2cxID0gYnVpbGRlci5zZXRPcHRpb25hbEludDMyKDEpLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5j
bGVhcigpOwotICAgIFRlc3RBbGxUeXBlcyBtc2cyID0gYnVpbGRlci5zZXRPcHRpb25hbEludDY0
KDIpLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5jbGVhcigpOwotICAgIFRlc3RBbGxUeXBlcyBtc2cz
ID0gYnVpbGRlci5zZXRPcHRpb25hbEludDMyKDMpCi0gICAgICAgIC5zZXRPcHRpb25hbFN0cmlu
ZygiaGVsbG8iKS5idWlsZCgpOwotCi0gICAgLy8gQnVpbGQgZ3JvdXBzLgotICAgIFRlc3RQYXJz
aW5nTWVyZ2UuUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAxIG9wdGlvbmFsRzEgPQotICAg
ICAgICBUZXN0UGFyc2luZ01lcmdlLlJlcGVhdGVkRmllbGRzR2VuZXJhdG9yLkdyb3VwMS5uZXdC
dWlsZGVyKCkKLSAgICAgICAgLnNldEZpZWxkMShtc2cxKS5idWlsZCgpOwotICAgIFRlc3RQYXJz
aW5nTWVyZ2UuUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAxIG9wdGlvbmFsRzIgPQotICAg
ICAgICBUZXN0UGFyc2luZ01lcmdlLlJlcGVhdGVkRmllbGRzR2VuZXJhdG9yLkdyb3VwMS5uZXdC
dWlsZGVyKCkKLSAgICAgICAgLnNldEZpZWxkMShtc2cyKS5idWlsZCgpOwotICAgIFRlc3RQYXJz
aW5nTWVyZ2UuUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAxIG9wdGlvbmFsRzMgPQotICAg
ICAgICBUZXN0UGFyc2luZ01lcmdlLlJlcGVhdGVkRmllbGRzR2VuZXJhdG9yLkdyb3VwMS5uZXdC
dWlsZGVyKCkKLSAgICAgICAgLnNldEZpZWxkMShtc2czKS5idWlsZCgpOwotICAgIFRlc3RQYXJz
aW5nTWVyZ2UuUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAyIHJlcGVhdGVkRzEgPQotICAg
ICAgICBUZXN0UGFyc2luZ01lcmdlLlJlcGVhdGVkRmllbGRzR2VuZXJhdG9yLkdyb3VwMi5uZXdC
dWlsZGVyKCkKLSAgICAgICAgLnNldEZpZWxkMShtc2cxKS5idWlsZCgpOwotICAgIFRlc3RQYXJz
aW5nTWVyZ2UuUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAyIHJlcGVhdGVkRzIgPQotICAg
ICAgICBUZXN0UGFyc2luZ01lcmdlLlJlcGVhdGVkRmllbGRzR2VuZXJhdG9yLkdyb3VwMi5uZXdC
dWlsZGVyKCkKLSAgICAgICAgLnNldEZpZWxkMShtc2cyKS5idWlsZCgpOwotICAgIFRlc3RQYXJz
aW5nTWVyZ2UuUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAyIHJlcGVhdGVkRzMgPQotICAg
ICAgICBUZXN0UGFyc2luZ01lcmdlLlJlcGVhdGVkRmllbGRzR2VuZXJhdG9yLkdyb3VwMi5uZXdC
dWlsZGVyKCkKLSAgICAgICAgLnNldEZpZWxkMShtc2czKS5idWlsZCgpOwotCi0gICAgLy8gQXNz
aWduIGFuZCBzZXJpYWxpemUgUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuCi0gICAgQnl0ZVN0cmlu
ZyBkYXRhID0gVGVzdFBhcnNpbmdNZXJnZS5SZXBlYXRlZEZpZWxkc0dlbmVyYXRvci5uZXdCdWls
ZGVyKCkKLSAgICAgICAgLmFkZEZpZWxkMShtc2cxKS5hZGRGaWVsZDEobXNnMikuYWRkRmllbGQx
KG1zZzMpCi0gICAgICAgIC5hZGRGaWVsZDIobXNnMSkuYWRkRmllbGQyKG1zZzIpLmFkZEZpZWxk
Mihtc2czKQotICAgICAgICAuYWRkRmllbGQzKG1zZzEpLmFkZEZpZWxkMyhtc2cyKS5hZGRGaWVs
ZDMobXNnMykKLSAgICAgICAgLmFkZEdyb3VwMShvcHRpb25hbEcxKS5hZGRHcm91cDEob3B0aW9u
YWxHMikuYWRkR3JvdXAxKG9wdGlvbmFsRzMpCi0gICAgICAgIC5hZGRHcm91cDIocmVwZWF0ZWRH
MSkuYWRkR3JvdXAyKHJlcGVhdGVkRzIpLmFkZEdyb3VwMihyZXBlYXRlZEczKQotICAgICAgICAu
YWRkRXh0MShtc2cxKS5hZGRFeHQxKG1zZzIpLmFkZEV4dDEobXNnMykKLSAgICAgICAgLmFkZEV4
dDIobXNnMSkuYWRkRXh0Mihtc2cyKS5hZGRFeHQyKG1zZzMpCi0gICAgICAgIC5idWlsZCgpLnRv
Qnl0ZVN0cmluZygpOwotCi0gICAgLy8gUGFyc2UgVGVzdFBhcnNpbmdNZXJnZS4KLSAgICBFeHRl
bnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IEV4dGVuc2lvblJlZ2lzdHJ5Lm5ld0luc3RhbmNlKCk7
Ci0gICAgVW5pdHRlc3RQcm90by5yZWdpc3RlckFsbEV4dGVuc2lvbnMocmVnaXN0cnkpOwotICAg
IFRlc3RQYXJzaW5nTWVyZ2UgcGFyc2luZ01lcmdlID0gVGVzdFBhcnNpbmdNZXJnZS5wYXJzZXIo
KS5wYXJzZUZyb20oZGF0YSwgcmVnaXN0cnkpOwotCi0gICAgLy8gUmVxdWlyZWQgYW5kIG9wdGlv
bmFsIGZpZWxkcyBzaG91bGQgYmUgbWVyZ2VkLgotICAgIGFzc2VydE1lc3NhZ2VNZXJnZWQocGFy
c2luZ01lcmdlLmdldFJlcXVpcmVkQWxsVHlwZXMoKSk7Ci0gICAgYXNzZXJ0TWVzc2FnZU1lcmdl
ZChwYXJzaW5nTWVyZ2UuZ2V0T3B0aW9uYWxBbGxUeXBlcygpKTsKLSAgICBhc3NlcnRNZXNzYWdl
TWVyZ2VkKAotICAgICAgICBwYXJzaW5nTWVyZ2UuZ2V0T3B0aW9uYWxHcm91cCgpLmdldE9wdGlv
bmFsR3JvdXBBbGxUeXBlcygpKTsKLSAgICBhc3NlcnRNZXNzYWdlTWVyZ2VkKHBhcnNpbmdNZXJn
ZS5nZXRFeHRlbnNpb24oCi0gICAgICAgIFRlc3RQYXJzaW5nTWVyZ2Uub3B0aW9uYWxFeHQpKTsK
LQotICAgIC8vIFJlcGVhdGVkIGZpZWxkcyBzaG91bGQgbm90IGJlIG1lcmdlZC4KLSAgICBhc3Nl
cnRFcXVhbHMoMywgcGFyc2luZ01lcmdlLmdldFJlcGVhdGVkQWxsVHlwZXNDb3VudCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMywgcGFyc2luZ01lcmdlLmdldFJlcGVhdGVkR3JvdXBDb3VudCgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoMywgcGFyc2luZ01lcmdlLmdldEV4dGVuc2lvbkNvdW50KAotICAg
ICAgICBUZXN0UGFyc2luZ01lcmdlLnJlcGVhdGVkRXh0KSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0UGFyc2luZ01lcmdlTGl0ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIEJ1aWxk
IG1lc3NhZ2VzLgotICAgIFRlc3RBbGxUeXBlc0xpdGUuQnVpbGRlciBidWlsZGVyID0KLSAgICAg
ICAgVGVzdEFsbFR5cGVzTGl0ZS5uZXdCdWlsZGVyKCk7Ci0gICAgVGVzdEFsbFR5cGVzTGl0ZSBt
c2cxID0gYnVpbGRlci5zZXRPcHRpb25hbEludDMyKDEpLmJ1aWxkKCk7Ci0gICAgYnVpbGRlci5j
bGVhcigpOwotICAgIFRlc3RBbGxUeXBlc0xpdGUgbXNnMiA9IGJ1aWxkZXIuc2V0T3B0aW9uYWxJ
bnQ2NCgyKS5idWlsZCgpOwotICAgIGJ1aWxkZXIuY2xlYXIoKTsKLSAgICBUZXN0QWxsVHlwZXNM
aXRlIG1zZzMgPSBidWlsZGVyLnNldE9wdGlvbmFsSW50MzIoMykKLSAgICAgICAgLnNldE9wdGlv
bmFsU3RyaW5nKCJoZWxsbyIpLmJ1aWxkKCk7Ci0KLSAgICAvLyBCdWlsZCBncm91cHMuCi0gICAg
VGVzdFBhcnNpbmdNZXJnZUxpdGUuUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAxIG9wdGlv
bmFsRzEgPQotICAgICAgICBUZXN0UGFyc2luZ01lcmdlTGl0ZS5SZXBlYXRlZEZpZWxkc0dlbmVy
YXRvci5Hcm91cDEubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRGaWVsZDEobXNnMSkuYnVpbGQo
KTsKLSAgICBUZXN0UGFyc2luZ01lcmdlTGl0ZS5SZXBlYXRlZEZpZWxkc0dlbmVyYXRvci5Hcm91
cDEgb3B0aW9uYWxHMiA9Ci0gICAgICAgIFRlc3RQYXJzaW5nTWVyZ2VMaXRlLlJlcGVhdGVkRmll
bGRzR2VuZXJhdG9yLkdyb3VwMS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldEZpZWxkMShtc2cy
KS5idWlsZCgpOwotICAgIFRlc3RQYXJzaW5nTWVyZ2VMaXRlLlJlcGVhdGVkRmllbGRzR2VuZXJh
dG9yLkdyb3VwMSBvcHRpb25hbEczID0KLSAgICAgICAgVGVzdFBhcnNpbmdNZXJnZUxpdGUuUmVw
ZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAxLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0Rmll
bGQxKG1zZzMpLmJ1aWxkKCk7Ci0gICAgVGVzdFBhcnNpbmdNZXJnZUxpdGUuUmVwZWF0ZWRGaWVs
ZHNHZW5lcmF0b3IuR3JvdXAyIHJlcGVhdGVkRzEgPQotICAgICAgICBUZXN0UGFyc2luZ01lcmdl
TGl0ZS5SZXBlYXRlZEZpZWxkc0dlbmVyYXRvci5Hcm91cDIubmV3QnVpbGRlcigpCi0gICAgICAg
IC5zZXRGaWVsZDEobXNnMSkuYnVpbGQoKTsKLSAgICBUZXN0UGFyc2luZ01lcmdlTGl0ZS5SZXBl
YXRlZEZpZWxkc0dlbmVyYXRvci5Hcm91cDIgcmVwZWF0ZWRHMiA9Ci0gICAgICAgIFRlc3RQYXJz
aW5nTWVyZ2VMaXRlLlJlcGVhdGVkRmllbGRzR2VuZXJhdG9yLkdyb3VwMi5uZXdCdWlsZGVyKCkK
LSAgICAgICAgLnNldEZpZWxkMShtc2cyKS5idWlsZCgpOwotICAgIFRlc3RQYXJzaW5nTWVyZ2VM
aXRlLlJlcGVhdGVkRmllbGRzR2VuZXJhdG9yLkdyb3VwMiByZXBlYXRlZEczID0KLSAgICAgICAg
VGVzdFBhcnNpbmdNZXJnZUxpdGUuUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAyLm5ld0J1
aWxkZXIoKQotICAgICAgICAuc2V0RmllbGQxKG1zZzMpLmJ1aWxkKCk7Ci0KLSAgICAvLyBBc3Np
Z24gYW5kIHNlcmlhbGl6ZSBSZXBlYXRlZEZpZWxkc0dlbmVyYXRvci4KLSAgICBCeXRlU3RyaW5n
IGRhdGEgPSBUZXN0UGFyc2luZ01lcmdlTGl0ZS5SZXBlYXRlZEZpZWxkc0dlbmVyYXRvci5uZXdC
dWlsZGVyKCkKLSAgICAgICAgLmFkZEZpZWxkMShtc2cxKS5hZGRGaWVsZDEobXNnMikuYWRkRmll
bGQxKG1zZzMpCi0gICAgICAgIC5hZGRGaWVsZDIobXNnMSkuYWRkRmllbGQyKG1zZzIpLmFkZEZp
ZWxkMihtc2czKQotICAgICAgICAuYWRkRmllbGQzKG1zZzEpLmFkZEZpZWxkMyhtc2cyKS5hZGRG
aWVsZDMobXNnMykKLSAgICAgICAgLmFkZEdyb3VwMShvcHRpb25hbEcxKS5hZGRHcm91cDEob3B0
aW9uYWxHMikuYWRkR3JvdXAxKG9wdGlvbmFsRzMpCi0gICAgICAgIC5hZGRHcm91cDIocmVwZWF0
ZWRHMSkuYWRkR3JvdXAyKHJlcGVhdGVkRzIpLmFkZEdyb3VwMihyZXBlYXRlZEczKQotICAgICAg
ICAuYWRkRXh0MShtc2cxKS5hZGRFeHQxKG1zZzIpLmFkZEV4dDEobXNnMykKLSAgICAgICAgLmFk
ZEV4dDIobXNnMSkuYWRkRXh0Mihtc2cyKS5hZGRFeHQyKG1zZzMpCi0gICAgICAgIC5idWlsZCgp
LnRvQnl0ZVN0cmluZygpOwotCi0gICAgLy8gUGFyc2UgVGVzdFBhcnNpbmdNZXJnZUxpdGUuCi0g
ICAgRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBFeHRlbnNpb25SZWdpc3RyeS5uZXdJbnN0
YW5jZSgpOwotICAgIFVuaXR0ZXN0TGl0ZS5yZWdpc3RlckFsbEV4dGVuc2lvbnMocmVnaXN0cnkp
OwotICAgIFRlc3RQYXJzaW5nTWVyZ2VMaXRlIHBhcnNpbmdNZXJnZSA9IFRlc3RQYXJzaW5nTWVy
Z2VMaXRlLnBhcnNlcigpLnBhcnNlRnJvbShkYXRhLCByZWdpc3RyeSk7Ci0KLSAgICAvLyBSZXF1
aXJlZCBhbmQgb3B0aW9uYWwgZmllbGRzIHNob3VsZCBiZSBtZXJnZWQuCi0gICAgYXNzZXJ0TWVz
c2FnZU1lcmdlZChwYXJzaW5nTWVyZ2UuZ2V0UmVxdWlyZWRBbGxUeXBlcygpKTsKLSAgICBhc3Nl
cnRNZXNzYWdlTWVyZ2VkKHBhcnNpbmdNZXJnZS5nZXRPcHRpb25hbEFsbFR5cGVzKCkpOwotICAg
IGFzc2VydE1lc3NhZ2VNZXJnZWQoCi0gICAgICAgIHBhcnNpbmdNZXJnZS5nZXRPcHRpb25hbEdy
b3VwKCkuZ2V0T3B0aW9uYWxHcm91cEFsbFR5cGVzKCkpOwotICAgIGFzc2VydE1lc3NhZ2VNZXJn
ZWQocGFyc2luZ01lcmdlLmdldEV4dGVuc2lvbigKLSAgICAgICAgVGVzdFBhcnNpbmdNZXJnZUxp
dGUub3B0aW9uYWxFeHQpKTsKLQotICAgIC8vIFJlcGVhdGVkIGZpZWxkcyBzaG91bGQgbm90IGJl
IG1lcmdlZC4KLSAgICBhc3NlcnRFcXVhbHMoMywgcGFyc2luZ01lcmdlLmdldFJlcGVhdGVkQWxs
VHlwZXNDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgcGFyc2luZ01lcmdlLmdldFJlcGVh
dGVkR3JvdXBDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgcGFyc2luZ01lcmdlLmdldEV4
dGVuc2lvbkNvdW50KAotICAgICAgICBUZXN0UGFyc2luZ01lcmdlTGl0ZS5yZXBlYXRlZEV4dCkp
OwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvUHJvdG9idWZBcnJheUxpc3RUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvUHJvdG9idWZBcnJheUxpc3RUZXN0LmphdmEKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNDVlMjI2YWYzZDcwZGM3MDVhOTExYjFkZGQxZTRh
MTk5NDhlODAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1Byb3RvYnVmQXJyYXlM
aXN0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0K
LWltcG9ydCBzdGF0aWMgamF2YS51dGlsLkFycmF5cy5hc0xpc3Q7Ci0KLWltcG9ydCBqdW5pdC5m
cmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBv
cnQgamF2YS51dGlsLkNvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2
YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIFRlc3Rz
IGZvciB7QGxpbmsgUHJvdG9idWZBcnJheUxpc3R9LgotICovCi1wdWJsaWMgY2xhc3MgUHJvdG9i
dWZBcnJheUxpc3RUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotICAKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgUHJvdG9idWZBcnJheUxpc3Q8SW50ZWdlcj4gVU5BUllfTElTVCA9IG5ld0ltbXV0YWJs
ZVByb3RvQXJyYXlMaXN0KDEpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQcm90b2J1ZkFycmF5
TGlzdDxJbnRlZ2VyPiBURVJUSUFSWV9MSVNUID0KLSAgICAgIG5ld0ltbXV0YWJsZVByb3RvQXJy
YXlMaXN0KDEsIDIsIDMpOwotICAKLSAgcHJpdmF0ZSBQcm90b2J1ZkFycmF5TGlzdDxJbnRlZ2Vy
PiBsaXN0OwotICAKLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgbGlzdCA9IG5ldyBQcm90b2J1ZkFycmF5TGlzdDxJbnRlZ2VyPigp
OwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHlMaXN0UmV0dXJuc1NhbWVJbnN0YW5j
ZSgpIHsKLSAgICBhc3NlcnRTYW1lKFByb3RvYnVmQXJyYXlMaXN0LmVtcHR5TGlzdCgpLCBQcm90
b2J1ZkFycmF5TGlzdC5lbXB0eUxpc3QoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RF
bXB0eUxpc3RJc0ltbXV0YWJsZSgpIHsKLSAgICBhc3NlcnRJbW11dGFibGUoUHJvdG9idWZBcnJh
eUxpc3QuPEludGVnZXI+ZW1wdHlMaXN0KCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0
TW9kaWZpY2F0aW9uV2l0aEl0ZXJhdGlvbigpIHsKLSAgICBsaXN0LmFkZEFsbChhc0xpc3QoMSwg
MiwgMywgNCkpOwotICAgIEl0ZXJhdG9yPEludGVnZXI+IGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRv
cigpOwotICAgIGFzc2VydEVxdWFscyg0LCBsaXN0LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDEsIChpbnQpIGxpc3QuZ2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgKGludCkgaXRlcmF0
b3IubmV4dCgpKTsKLSAgICAKLSAgICBsaXN0LnJlbW92ZSgwKTsKLSAgICB0cnkgewotICAgICAg
aXRlcmF0b3IubmV4dCgpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKENvbmN1cnJlbnRN
b2RpZmljYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAg
Ci0gICAgaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0gICAgbGlzdC5zZXQoMCwgMSk7Ci0g
ICAgdHJ5IHsKLSAgICAgIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNh
dGNoIChDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVj
dGVkCi0gICAgfQotICAgIAotICAgIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotICAgIGxp
c3QuYWRkKDAsIDApOwotICAgIHRyeSB7Ci0gICAgICBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICBm
YWlsKCk7Ci0gICAgfSBjYXRjaCAoQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE1h
a2VJbW11dGFibGUoKSB7Ci0gICAgbGlzdC5hZGQoMik7Ci0gICAgbGlzdC5hZGQoNCk7Ci0gICAg
bGlzdC5hZGQoNik7Ci0gICAgbGlzdC5hZGQoOCk7Ci0gICAgbGlzdC5tYWtlSW1tdXRhYmxlKCk7
Ci0gICAgYXNzZXJ0SW1tdXRhYmxlKGxpc3QpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0
UmVtb3ZlKCkgewotICAgIGxpc3QuYWRkKDIpOwotICAgIGxpc3QuYWRkKDQpOwotICAgIGxpc3Qu
YWRkKDYpOwotCi0gICAgbGlzdC5yZW1vdmUoMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFzTGlzdCgy
LCA2KSwgbGlzdCk7Ci0KLSAgICBsaXN0LnJlbW92ZSgxKTsKLSAgICBhc3NlcnRFcXVhbHMoYXNM
aXN0KDIpLCBsaXN0KTsKLQotICAgIGxpc3QucmVtb3ZlKDApOwotICAgIGFzc2VydEVxdWFscyhh
c0xpc3QoKSwgbGlzdCk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXQoKSB7Ci0gICAg
bGlzdC5hZGQoMik7Ci0gICAgbGlzdC5hZGQoNik7Ci0gICAgCi0gICAgYXNzZXJ0RXF1YWxzKDIs
IChpbnQpIGxpc3QuZ2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoNiwgKGludCkgbGlzdC5nZXQo
MSkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0U2V0KCkgewotICAgIGxpc3QuYWRkKDIp
OwotICAgIGxpc3QuYWRkKDYpOwotICAgIAotICAgIGxpc3Quc2V0KDAsIDEpOwotICAgIGFzc2Vy
dEVxdWFscygxLCAoaW50KSBsaXN0LmdldCgwKSk7Ci0gICAgbGlzdC5zZXQoMSwgMik7Ci0gICAg
YXNzZXJ0RXF1YWxzKDIsIChpbnQpIGxpc3QuZ2V0KDEpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBhc3NlcnRJbW11dGFibGUoTGlzdDxJbnRlZ2VyPiBsaXN0KSB7Ci0gICAgaWYgKGxpc3QuY29u
dGFpbnMoMSkpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW5ub3QgdGVz
dCB0aGUgaW1tdXRhYmlsaXR5IG9mIGxpc3RzIHRoYXQgY29udGFpbiAxLiIpOwotICAgIH0KLSAg
ICAKLSAgICB0cnkgewotICAgICAgbGlzdC5hZGQoMSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBj
YXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0
ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkKDAsIDEpOwotICAgICAg
ZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFk
ZEFsbChDb2xsZWN0aW9ucy48SW50ZWdlcj5lbXB0eUxpc3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0g
ICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8g
ZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkQWxsKENvbGxl
Y3Rpb25zLnNpbmdsZXRvbkxpc3QoMSkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVu
c3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAg
fQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbChuZXcgUHJvdG9idWZBcnJheUxp
c3Q8SW50ZWdlcj4oKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRP
cGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0g
ICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkQWxsKFVOQVJZX0xJU1QpOwotICAgICAgZmFpbCgpOwot
ICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8v
IGV4cGVjdGVkCi0gICAgfQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbCgwLCBD
b2xsZWN0aW9ucy5zaW5nbGV0b24oMSkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVu
c3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIGV4cGVjdGVkCi0gICAg
fQotICAgIAotICAgIHRyeSB7Ci0gICAgICBsaXN0LmFkZEFsbCgwLCBVTkFSWV9MSVNUKTsKLSAg
ICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgbGlz
dC5hZGRBbGwoMCwgQ29sbGVjdGlvbnMuPEludGVnZXI+ZW1wdHlMaXN0KCkpOwotICAgICAgZmFp
bCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAg
ICAgIC8vIGV4cGVjdGVkCi0gICAgfSAKLQotICAgIHRyeSB7Ci0gICAgICBsaXN0LmNsZWFyKCk7
Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRp
b24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgbGlz
dC5yZW1vdmUoMSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVy
YXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAg
dHJ5IHsKLSAgICAgIGxpc3QucmVtb3ZlKG5ldyBPYmplY3QoKSk7Ci0gICAgICBmYWlsKCk7Ci0g
ICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8g
ZXhwZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmVtb3ZlQWxsKENv
bGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0K
LSAgICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZW1vdmVBbGwoQ29sbGVjdGlvbnMuc2luZ2xl
dG9uKDEpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlv
bkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkg
ewotICAgICAgbGlzdC5yZW1vdmVBbGwoVU5BUllfTElTVCk7Ci0gICAgICBmYWlsKCk7Ci0gICAg
fSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhw
ZWN0ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QucmV0YWluQWxsKENvbGxl
Y3Rpb25zLmVtcHR5TGlzdCgpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBv
cnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAg
ICAKLSAgICB0cnkgewotICAgICAgbGlzdC5yZXRhaW5BbGwoQ29sbGVjdGlvbnMuc2luZ2xldG9u
KDEpKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICAKLSAgICB0cnkgewot
ICAgICAgbGlzdC5yZXRhaW5BbGwoVU5BUllfTElTVCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBj
YXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0
ZWQKLSAgICB9Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0KDAsIDApOwotICAgICAg
ZmFpbCgpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIGV4cGVjdGVkCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIHN0YXRpYyBQcm90
b2J1ZkFycmF5TGlzdDxJbnRlZ2VyPiBuZXdJbW11dGFibGVQcm90b0FycmF5TGlzdChpbnQuLi4g
ZWxlbWVudHMpIHsKLSAgICBQcm90b2J1ZkFycmF5TGlzdDxJbnRlZ2VyPiBsaXN0ID0gbmV3IFBy
b3RvYnVmQXJyYXlMaXN0PEludGVnZXI+KCk7Ci0gICAgZm9yIChpbnQgZWxlbWVudCA6IGVsZW1l
bnRzKSB7Ci0gICAgICBsaXN0LmFkZChlbGVtZW50KTsKLSAgICB9Ci0gICAgbGlzdC5tYWtlSW1t
dXRhYmxlKCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3Jl
L3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9SZXBlYXRlZEZpZWxkQnVpbGRlclRl
c3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9SZXBl
YXRlZEZpZWxkQnVpbGRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDlkNTIzMjE1MDA4MGNiMDZhZDczNGYwZmM5ZjAyNDEzNzYxOGVmMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvUmVwZWF0ZWRGaWVsZEJ1aWxkZXJUZXN0LmphdmEKKysrIC9kZXYv
bnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0
LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzT3JCdWlsZGVyOwotCi1pbXBvcnQganVuaXQuZnJh
bWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0
IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIFRlc3RzIGZvciB7QGxpbmsgUmVwZWF0ZWRGaWVs
ZEJ1aWxkZXJ9LiBUaGlzIHRlc3RzIGJhc2ljIGZ1bmN0aW9uYWxpdHkuCi0gKiBNb3JlIGV4dGVu
c2l2ZSB0ZXN0aW5nIGlzIHByb3ZpZGVkIHZpYSBvdGhlciB0ZXN0cyB0aGF0IGV4ZXJjaXNlIHRo
ZQotICogYnVpbGRlci4KLSAqCi0gKiBAYXV0aG9yIGpvbnBAZ29vZ2xlLmNvbSAoSm9uIFBlcmxv
dykKLSAqLwotcHVibGljIGNsYXNzIFJlcGVhdGVkRmllbGRCdWlsZGVyVGVzdCBleHRlbmRzIFRl
c3RDYXNlIHsKLQotICBwdWJsaWMgdm9pZCB0ZXN0QmFzaWNVc2UoKSB7Ci0gICAgVGVzdFV0aWwu
TW9ja0J1aWxkZXJQYXJlbnQgbW9ja1BhcmVudCA9IG5ldyBUZXN0VXRpbC5Nb2NrQnVpbGRlclBh
cmVudCgpOwotICAgIFJlcGVhdGVkRmllbGRCdWlsZGVyPFRlc3RBbGxUeXBlcywgVGVzdEFsbFR5
cGVzLkJ1aWxkZXIsCi0gICAgICAgIFRlc3RBbGxUeXBlc09yQnVpbGRlcj4gYnVpbGRlciA9IG5l
d1JlcGVhdGVkRmllbGRCdWlsZGVyKG1vY2tQYXJlbnQpOwotICAgIGJ1aWxkZXIuYWRkTWVzc2Fn
ZShUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIoMCkuYnVpbGQoKSk7
Ci0gICAgYnVpbGRlci5hZGRNZXNzYWdlKFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuc2V0T3B0
aW9uYWxJbnQzMigxKS5idWlsZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgYnVpbGRlci5nZXRN
ZXNzYWdlKDApLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxk
ZXIuZ2V0TWVzc2FnZSgxKS5nZXRPcHRpb25hbEludDMyKCkpOwotCi0gICAgTGlzdDxUZXN0QWxs
VHlwZXM+IGxpc3QgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGxpc3Qu
c2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbGlzdC5nZXQoMCkuZ2V0T3B0aW9uYWxJbnQz
MigpKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbGlzdC5nZXQoMSkuZ2V0T3B0aW9uYWxJbnQzMigp
KTsKLSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZShsaXN0KTsKLQotICAgIC8vIE1ha2Ugc3VyZSBp
dCBkb2Vzbid0IGNoYW5nZS4KLSAgICBMaXN0PFRlc3RBbGxUeXBlcz4gbGlzdDIgPSBidWlsZGVy
LmJ1aWxkKCk7Ci0gICAgYXNzZXJ0U2FtZShsaXN0LCBsaXN0Mik7Ci0gICAgYXNzZXJ0RXF1YWxz
KDAsIG1vY2tQYXJlbnQuZ2V0SW52YWxpZGF0aW9uQ291bnQoKSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0R29pbmdCYWNrQW5kRm9ydGgoKSB7Ci0gICAgVGVzdFV0aWwuTW9ja0J1aWxkZXJQ
YXJlbnQgbW9ja1BhcmVudCA9IG5ldyBUZXN0VXRpbC5Nb2NrQnVpbGRlclBhcmVudCgpOwotICAg
IFJlcGVhdGVkRmllbGRCdWlsZGVyPFRlc3RBbGxUeXBlcywgVGVzdEFsbFR5cGVzLkJ1aWxkZXIs
Ci0gICAgICAgIFRlc3RBbGxUeXBlc09yQnVpbGRlcj4gYnVpbGRlciA9IG5ld1JlcGVhdGVkRmll
bGRCdWlsZGVyKG1vY2tQYXJlbnQpOwotICAgIGJ1aWxkZXIuYWRkTWVzc2FnZShUZXN0QWxsVHlw
ZXMubmV3QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIoMCkuYnVpbGQoKSk7Ci0gICAgYnVpbGRl
ci5hZGRNZXNzYWdlKFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuc2V0T3B0aW9uYWxJbnQzMigx
KS5idWlsZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgYnVpbGRlci5nZXRNZXNzYWdlKDApLmdl
dE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxkZXIuZ2V0TWVzc2Fn
ZSgxKS5nZXRPcHRpb25hbEludDMyKCkpOwotCi0gICAgLy8gQ29udmVydCB0byBsaXN0Ci0gICAg
TGlzdDxUZXN0QWxsVHlwZXM+IGxpc3QgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDIsIGxpc3Quc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbGlzdC5nZXQoMCkuZ2V0
T3B0aW9uYWxJbnQzMigpKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbGlzdC5nZXQoMSkuZ2V0T3B0
aW9uYWxJbnQzMigpKTsKLSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZShsaXN0KTsKLQotICAgIC8v
IFVwZGF0ZSAwdGggaXRlbQotICAgIGFzc2VydEVxdWFscygwLCBtb2NrUGFyZW50LmdldEludmFs
aWRhdGlvbkNvdW50KCkpOwotICAgIGJ1aWxkZXIuZ2V0QnVpbGRlcigwKS5zZXRPcHRpb25hbFN0
cmluZygiZm9vIik7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1vY2tQYXJlbnQuZ2V0SW52YWxpZGF0
aW9uQ291bnQoKSk7Ci0gICAgbGlzdCA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVh
bHMoMiwgbGlzdC5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygwLCBsaXN0LmdldCgwKS5nZXRP
cHRpb25hbEludDMyKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJmb28iLCBsaXN0LmdldCgwKS5n
ZXRPcHRpb25hbFN0cmluZygpKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbGlzdC5nZXQoMSkuZ2V0
T3B0aW9uYWxJbnQzMigpKTsKLSAgICBhc3NlcnRJc1VubW9kaWZpYWJsZShsaXN0KTsKLSAgICBh
c3NlcnRFcXVhbHMoMSwgbW9ja1BhcmVudC5nZXRJbnZhbGlkYXRpb25Db3VudCgpKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RWYXJpb3VzTWV0aG9kcygpIHsKLSAgICBUZXN0VXRpbC5Nb2Nr
QnVpbGRlclBhcmVudCBtb2NrUGFyZW50ID0gbmV3IFRlc3RVdGlsLk1vY2tCdWlsZGVyUGFyZW50
KCk7Ci0gICAgUmVwZWF0ZWRGaWVsZEJ1aWxkZXI8VGVzdEFsbFR5cGVzLCBUZXN0QWxsVHlwZXMu
QnVpbGRlciwKLSAgICAgICAgVGVzdEFsbFR5cGVzT3JCdWlsZGVyPiBidWlsZGVyID0gbmV3UmVw
ZWF0ZWRGaWVsZEJ1aWxkZXIobW9ja1BhcmVudCk7Ci0gICAgYnVpbGRlci5hZGRNZXNzYWdlKFRl
c3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuc2V0T3B0aW9uYWxJbnQzMigxKS5idWlsZCgpKTsKLSAg
ICBidWlsZGVyLmFkZE1lc3NhZ2UoVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKS5zZXRPcHRpb25h
bEludDMyKDIpLmJ1aWxkKCkpOwotICAgIGJ1aWxkZXIuYWRkQnVpbGRlcigwLCBUZXN0QWxsVHlw
ZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCkpCi0gICAgICAgIC5zZXRPcHRpb25hbEludDMyKDApOwot
ICAgIGJ1aWxkZXIuYWRkQnVpbGRlcihUZXN0QWxsVHlwZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCkp
LnNldE9wdGlvbmFsSW50MzIoMyk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMCwgYnVpbGRlci5nZXRN
ZXNzYWdlKDApLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxk
ZXIuZ2V0TWVzc2FnZSgxKS5nZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygy
LCBidWlsZGVyLmdldE1lc3NhZ2UoMikuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLSAgICBhc3NlcnRF
cXVhbHMoMywgYnVpbGRlci5nZXRNZXNzYWdlKDMpLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0KLSAg
ICBhc3NlcnRFcXVhbHMoMCwgbW9ja1BhcmVudC5nZXRJbnZhbGlkYXRpb25Db3VudCgpKTsKLSAg
ICBMaXN0PFRlc3RBbGxUeXBlcz4gbWVzc2FnZXMgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDQsIG1lc3NhZ2VzLnNpemUoKSk7Ci0gICAgYXNzZXJ0U2FtZShtZXNzYWdlcywg
YnVpbGRlci5idWlsZCgpKTsgLy8gZXhwZWN0IHNhbWUgbGlzdAotCi0gICAgLy8gUmVtb3ZlIGEg
bWVzc2FnZS4KLSAgICBidWlsZGVyLnJlbW92ZSgyKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbW9j
a1BhcmVudC5nZXRJbnZhbGlkYXRpb25Db3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgYnVp
bGRlci5nZXRDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgYnVpbGRlci5nZXRNZXNzYWdl
KDApLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxkZXIuZ2V0
TWVzc2FnZSgxKS5nZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygzLCBidWls
ZGVyLmdldE1lc3NhZ2UoMikuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLQotICAgIC8vIFJlbW92ZSBh
IGJ1aWxkZXIuCi0gICAgYnVpbGRlci5yZW1vdmUoMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1v
Y2tQYXJlbnQuZ2V0SW52YWxpZGF0aW9uQ291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGJ1
aWxkZXIuZ2V0Q291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxkZXIuZ2V0TWVzc2Fn
ZSgwKS5nZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygzLCBidWlsZGVyLmdl
dE1lc3NhZ2UoMSkuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLQotICAgIC8vIFRlc3QgY2xlYXIuCi0g
ICAgYnVpbGRlci5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygxLCBtb2NrUGFyZW50LmdldElu
dmFsaWRhdGlvbkNvdW50KCkpOwotICAgIGFzc2VydEVxdWFscygwLCBidWlsZGVyLmdldENvdW50
KCkpOwotICAgIGFzc2VydFRydWUoYnVpbGRlci5pc0VtcHR5KCkpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgdGVzdExpc3RzKCkgewotICAgIFRlc3RVdGlsLk1vY2tCdWlsZGVyUGFyZW50IG1vY2tQ
YXJlbnQgPSBuZXcgVGVzdFV0aWwuTW9ja0J1aWxkZXJQYXJlbnQoKTsKLSAgICBSZXBlYXRlZEZp
ZWxkQnVpbGRlcjxUZXN0QWxsVHlwZXMsIFRlc3RBbGxUeXBlcy5CdWlsZGVyLAotICAgICAgICBU
ZXN0QWxsVHlwZXNPckJ1aWxkZXI+IGJ1aWxkZXIgPSBuZXdSZXBlYXRlZEZpZWxkQnVpbGRlciht
b2NrUGFyZW50KTsKLSAgICBidWlsZGVyLmFkZE1lc3NhZ2UoVGVzdEFsbFR5cGVzLm5ld0J1aWxk
ZXIoKS5zZXRPcHRpb25hbEludDMyKDEpLmJ1aWxkKCkpOwotICAgIGJ1aWxkZXIuYWRkTWVzc2Fn
ZSgwLAotICAgICAgICBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIo
MCkuYnVpbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIGJ1aWxkZXIuZ2V0TWVzc2FnZSgwKS5n
ZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygxLCBidWlsZGVyLmdldE1lc3Nh
Z2UoMSkuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLQotICAgIC8vIFVzZSBsaXN0IG9mIGJ1aWxkZXJz
LgotICAgIExpc3Q8VGVzdEFsbFR5cGVzLkJ1aWxkZXI+IGJ1aWxkZXJzID0gYnVpbGRlci5nZXRC
dWlsZGVyTGlzdCgpOwotICAgIGFzc2VydEVxdWFscygwLCBidWlsZGVycy5nZXQoMCkuZ2V0T3B0
aW9uYWxJbnQzMigpKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgYnVpbGRlcnMuZ2V0KDEpLmdldE9w
dGlvbmFsSW50MzIoKSk7Ci0gICAgYnVpbGRlcnMuZ2V0KDApLnNldE9wdGlvbmFsSW50MzIoMTAp
OwotICAgIGJ1aWxkZXJzLmdldCgxKS5zZXRPcHRpb25hbEludDMyKDExKTsKLQotICAgIC8vIFVz
ZSBsaXN0IG9mIHByb3RvcwotICAgIExpc3Q8VGVzdEFsbFR5cGVzPiBwcm90b3MgPSBidWlsZGVy
LmdldE1lc3NhZ2VMaXN0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEwLCBwcm90b3MuZ2V0KDApLmdl
dE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExLCBwcm90b3MuZ2V0KDEpLmdl
dE9wdGlvbmFsSW50MzIoKSk7Ci0KLSAgICAvLyBBZGQgYW4gaXRlbSB0byB0aGUgYnVpbGRlcnMg
YW5kIHZlcmlmeSBpdCdzIHVwZGF0ZWQgaW4gYm90aAotICAgIGJ1aWxkZXIuYWRkTWVzc2FnZShU
ZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIoMTIpLmJ1aWxkKCkpOwot
ICAgIGFzc2VydEVxdWFscygzLCBidWlsZGVycy5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscygz
LCBwcm90b3Muc2l6ZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhc3NlcnRJc1VubW9kaWZp
YWJsZShMaXN0PD8+IGxpc3QpIHsKLSAgICBpZiAobGlzdCA9PSBDb2xsZWN0aW9ucy5lbXB0eUxp
c3QoKSkgewotICAgICAgLy8gT0tBWSAtLSBOZWVkIHRvIGNoZWNrIHRoaXMgYi9jIEVtcHR5TGlz
dCBhbGxvd3MgeW91IHRvIGNhbGwgY2xlYXIuCi0gICAgfSBlbHNlIHsKLSAgICAgIHRyeSB7Ci0g
ICAgICAgIGxpc3QuY2xlYXIoKTsKLSAgICAgICAgZmFpbCgiTGlzdCB3YXNuJ3QgaW1tdXRhYmxl
Iik7Ci0gICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAgIC8vIGdvb2QKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFJlcGVhdGVk
RmllbGRCdWlsZGVyPFRlc3RBbGxUeXBlcywgVGVzdEFsbFR5cGVzLkJ1aWxkZXIsCi0gICAgICBU
ZXN0QWxsVHlwZXNPckJ1aWxkZXI+Ci0gICAgICBuZXdSZXBlYXRlZEZpZWxkQnVpbGRlcihHZW5l
cmF0ZWRNZXNzYWdlLkJ1aWxkZXJQYXJlbnQgcGFyZW50KSB7Ci0gICAgcmV0dXJuIG5ldyBSZXBl
YXRlZEZpZWxkQnVpbGRlcjxUZXN0QWxsVHlwZXMsIFRlc3RBbGxUeXBlcy5CdWlsZGVyLAotICAg
ICAgICBUZXN0QWxsVHlwZXNPckJ1aWxkZXI+KENvbGxlY3Rpb25zLjxUZXN0QWxsVHlwZXM+ZW1w
dHlMaXN0KCksIGZhbHNlLAotICAgICAgICBwYXJlbnQsIGZhbHNlKTsKLSAgfQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1JvcGVCeXRl
U3RyaW5nU3Vic3RyaW5nVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL1JvcGVCeXRlU3RyaW5nU3Vic3RyaW5nVGVzdC5qYXZhCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkYzU2ZjJlOWFjMmFjNTNjMjY5NDYxYWYwNmIzOGZjZmU2NzM0
MjIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9j
b3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Sb3BlQnl0ZVN0cmluZ1N1YnN0
cmluZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwot
Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGph
dmEudXRpbC5JdGVyYXRvcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHRlc3RzIHtAbGluayBSb3Bl
Qnl0ZVN0cmluZyNzdWJzdHJpbmcoaW50LCBpbnQpfSBieSBpbmhlcml0aW5nIHRoZSB0ZXN0cyBm
cm9tCi0gKiB7QGxpbmsgTGl0ZXJhbEJ5dGVTdHJpbmdUZXN0fS4gIE9ubHkgYSBjb3VwbGUgb2Yg
bWV0aG9kcyBhcmUgb3ZlcnJpZGRlbi4KLSAqCi0gKiBAYXV0aG9yIGNhcmxhbnRvbkBnb29nbGUu
Y29tIChDYXJsIEhhdmVybCkKLSAqLwotcHVibGljIGNsYXNzIFJvcGVCeXRlU3RyaW5nU3Vic3Ry
aW5nVGVzdCBleHRlbmRzIExpdGVyYWxCeXRlU3RyaW5nVGVzdCB7Ci0KLSAgQE92ZXJyaWRlCi0g
IHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgY2xhc3NVbmRl
clRlc3QgPSAiUm9wZUJ5dGVTdHJpbmciOwotICAgIGJ5dGVbXSBzb3VyY2VCeXRlcyA9IEJ5dGVT
dHJpbmdUZXN0LmdldFRlc3RCeXRlcygyMjM0MSwgMjIzMzc3NjZMKTsKLSAgICBJdGVyYXRvcjxC
eXRlU3RyaW5nPiBpdGVyID0gQnl0ZVN0cmluZ1Rlc3QubWFrZUNvbmNyZXRlUGllY2VzKHNvdXJj
ZUJ5dGVzKS5pdGVyYXRvcigpOwotICAgIEJ5dGVTdHJpbmcgc291cmNlU3RyaW5nID0gaXRlci5u
ZXh0KCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0gICAgICBzb3VyY2VTdHJpbmcg
PSBzb3VyY2VTdHJpbmcuY29uY2F0KGl0ZXIubmV4dCgpKTsKLSAgICB9Ci0KLSAgICBpbnQgZnJv
bSA9IDExMzA7Ci0gICAgaW50IHRvID0gc291cmNlQnl0ZXMubGVuZ3RoIC0gNTU1NTsKLSAgICBz
dHJpbmdVbmRlclRlc3QgPSBzb3VyY2VTdHJpbmcuc3Vic3RyaW5nKGZyb20sIHRvKTsKLSAgICBy
ZWZlcmVuY2VCeXRlcyA9IG5ldyBieXRlW3RvIC0gZnJvbV07Ci0gICAgU3lzdGVtLmFycmF5Y29w
eShzb3VyY2VCeXRlcywgZnJvbSwgcmVmZXJlbmNlQnl0ZXMsIDAsIHRvIC0gZnJvbSk7Ci0gICAg
ZXhwZWN0ZWRIYXNoQ29kZSA9IC0xMjU5MjYwNjgwOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIHRlc3RHZXRUcmVlRGVwdGgoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5k
ZXJUZXN0ICsgIiBtdXN0IGhhdmUgdGhlIGV4cGVjdGVkIHRyZWUgZGVwdGgiLAotICAgICAgICAz
LCBzdHJpbmdVbmRlclRlc3QuZ2V0VHJlZURlcHRoKCkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhj
ZXB0aW9uIHsKLSAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gIkkgbG92ZSB1bmljb2RlIFx1MTIz
NFx1NTY3OCBjaGFyYWN0ZXJzIjsKLSAgICBCeXRlU3RyaW5nIHNvdXJjZUJ5dGVTdHJpbmcgPSBC
eXRlU3RyaW5nLmNvcHlGcm9tVXRmOChzb3VyY2VTdHJpbmcpOwotICAgIGludCBjb3BpZXMgPSAy
NTA7Ci0KLSAgICAvLyBCeSBidWlsZGluZyB0aGUgUm9wZUJ5dGVTdHJpbmcgYnkgY29uY2F0ZW5h
dGluZywgdGhpcyBpcyBhY3R1YWxseSBhIGZhaXJseSBzdHJlbnVvdXMgdGVzdC4KLSAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihjb3BpZXMgKiBzb3VyY2VTdHJp
bmcubGVuZ3RoKCkpOwotICAgIEJ5dGVTdHJpbmcgdW5pY29kZSA9IEJ5dGVTdHJpbmcuRU1QVFk7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3BpZXM7ICsraSkgewotICAgICAgYnVpbGRlci5h
cHBlbmQoc291cmNlU3RyaW5nKTsKLSAgICAgIHVuaWNvZGUgPSBSb3BlQnl0ZVN0cmluZy5jb25j
YXRlbmF0ZSh1bmljb2RlLCBzb3VyY2VCeXRlU3RyaW5nKTsKLSAgICB9Ci0gICAgU3RyaW5nIHRl
c3RTdHJpbmcgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBEbyB0aGUgc3Vic3RyaW5n
IHBhcnQKLSAgICB0ZXN0U3RyaW5nID0gdGVzdFN0cmluZy5zdWJzdHJpbmcoMiwgdGVzdFN0cmlu
Zy5sZW5ndGgoKSAtIDYpOwotICAgIHVuaWNvZGUgPSB1bmljb2RlLnN1YnN0cmluZygyLCB1bmlj
b2RlLnNpemUoKSAtIDYpOwotCi0gICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIiBm
cm9tIHN0cmluZyBtdXN0IGhhdmUgdGhlIGV4cGVjdGVkIHR5cGUiLAotICAgICAgICBjbGFzc1Vu
ZGVyVGVzdCwgZ2V0QWN0dWFsQ2xhc3NOYW1lKHVuaWNvZGUpKTsKLSAgICBTdHJpbmcgcm91bmRU
cmlwU3RyaW5nID0gdW5pY29kZS50b1N0cmluZyhVVEZfOCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNs
YXNzVW5kZXJUZXN0ICsgIiB1bmljb2RlIGJ5dGVzIG11c3QgbWF0Y2giLAotICAgICAgICB0ZXN0
U3RyaW5nLCByb3VuZFRyaXBTdHJpbmcpOwotICAgIEJ5dGVTdHJpbmcgZmxhdFN0cmluZyA9IEJ5
dGVTdHJpbmcuY29weUZyb21VdGY4KHRlc3RTdHJpbmcpOwotICAgIGFzc2VydEVxdWFscyhjbGFz
c1VuZGVyVGVzdCArICIgc3RyaW5nIG11c3QgZXF1YWwgdGhlIGZsYXQgc3RyaW5nIiwgZmxhdFN0
cmluZywgdW5pY29kZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIiBzdHJp
bmcgbXVzdCBtdXN0IGhhdmUgc2FtZSBoYXNoQ29kZSBhcyB0aGUgZmxhdCBzdHJpbmciLAotICAg
ICAgICBmbGF0U3RyaW5nLmhhc2hDb2RlKCksIHVuaWNvZGUuaGFzaENvZGUoKSk7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgdGVzdENoYXJzZXRUb1N0cmluZygpIHsKLSAgICBT
dHJpbmcgc291cmNlU3RyaW5nID0gIkkgbG92ZSB1bmljb2RlIFx1MTIzNFx1NTY3OCBjaGFyYWN0
ZXJzIjsKLSAgICBCeXRlU3RyaW5nIHNvdXJjZUJ5dGVTdHJpbmcgPSBCeXRlU3RyaW5nLmNvcHlG
cm9tVXRmOChzb3VyY2VTdHJpbmcpOwotICAgIGludCBjb3BpZXMgPSAyNTA7Ci0KLSAgICAvLyBC
eSBidWlsZGluZyB0aGUgUm9wZUJ5dGVTdHJpbmcgYnkgY29uY2F0ZW5hdGluZywgdGhpcyBpcyBh
Y3R1YWxseSBhIGZhaXJseSBzdHJlbnVvdXMgdGVzdC4KLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihjb3BpZXMgKiBzb3VyY2VTdHJpbmcubGVuZ3RoKCkpOwot
ICAgIEJ5dGVTdHJpbmcgdW5pY29kZSA9IEJ5dGVTdHJpbmcuRU1QVFk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3BpZXM7ICsraSkgewotICAgICAgYnVpbGRlci5hcHBlbmQoc291cmNlU3Ry
aW5nKTsKLSAgICAgIHVuaWNvZGUgPSBSb3BlQnl0ZVN0cmluZy5jb25jYXRlbmF0ZSh1bmljb2Rl
LCBzb3VyY2VCeXRlU3RyaW5nKTsKLSAgICB9Ci0gICAgU3RyaW5nIHRlc3RTdHJpbmcgPSBidWls
ZGVyLnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBEbyB0aGUgc3Vic3RyaW5nIHBhcnQKLSAgICB0ZXN0
U3RyaW5nID0gdGVzdFN0cmluZy5zdWJzdHJpbmcoMiwgdGVzdFN0cmluZy5sZW5ndGgoKSAtIDYp
OwotICAgIHVuaWNvZGUgPSB1bmljb2RlLnN1YnN0cmluZygyLCB1bmljb2RlLnNpemUoKSAtIDYp
OwotCi0gICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIiBmcm9tIHN0cmluZyBtdXN0
IGhhdmUgdGhlIGV4cGVjdGVkIHR5cGUiLAotICAgICAgICBjbGFzc1VuZGVyVGVzdCwgZ2V0QWN0
dWFsQ2xhc3NOYW1lKHVuaWNvZGUpKTsKLSAgICBTdHJpbmcgcm91bmRUcmlwU3RyaW5nID0gdW5p
Y29kZS50b1N0cmluZyhJbnRlcm5hbC5VVEZfOCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5k
ZXJUZXN0ICsgIiB1bmljb2RlIGJ5dGVzIG11c3QgbWF0Y2giLAotICAgICAgICB0ZXN0U3RyaW5n
LCByb3VuZFRyaXBTdHJpbmcpOwotICAgIEJ5dGVTdHJpbmcgZmxhdFN0cmluZyA9IEJ5dGVTdHJp
bmcuY29weUZyb21VdGY4KHRlc3RTdHJpbmcpOwotICAgIGFzc2VydEVxdWFscyhjbGFzc1VuZGVy
VGVzdCArICIgc3RyaW5nIG11c3QgZXF1YWwgdGhlIGZsYXQgc3RyaW5nIiwgZmxhdFN0cmluZywg
dW5pY29kZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIiBzdHJpbmcgbXVz
dCBtdXN0IGhhdmUgc2FtZSBoYXNoQ29kZSBhcyB0aGUgZmxhdCBzdHJpbmciLAotICAgICAgICBm
bGF0U3RyaW5nLmhhc2hDb2RlKCksIHVuaWNvZGUuaGFzaENvZGUoKSk7Ci0gIH0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Sb3BlQnl0
ZVN0cmluZ1Rlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9Sb3BlQnl0ZVN0cmluZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNGVjM2E0MDk4ODJjZGQ0ZjFlNjUwM2NhMjhiMGUzMjA3NmNhMWYzMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZh
L2NvbS9nb29nbGUvcHJvdG9idWYvUm9wZUJ5dGVTdHJpbmdUZXN0LmphdmEKKysrIC9kZXYvbnVs
bApAQCAtMSwxODkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5
SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBv
cnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFt
OwotaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5z
dXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1w
b3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHRlc3RzIHtAbGlu
ayBSb3BlQnl0ZVN0cmluZ30gYnkgaW5oZXJpdGluZyB0aGUgdGVzdHMgZnJvbQotICoge0BsaW5r
IExpdGVyYWxCeXRlU3RyaW5nVGVzdH0uICBPbmx5IGEgY291cGxlIG9mIG1ldGhvZHMgYXJlIG92
ZXJyaWRkZW4uCi0gKgotICogPHA+QSBmdWxsIHRlc3Qgb2YgdGhlIHJlc3VsdCBvZiB7QGxpbmsg
Um9wZUJ5dGVTdHJpbmcjc3Vic3RyaW5nKGludCwgaW50KX0gaXMgZm91bmQgaW4gdGhlCi0gKiBz
ZXBhcmF0ZSBjbGFzcyB7QGxpbmsgUm9wZUJ5dGVTdHJpbmdTdWJzdHJpbmdUZXN0fS4KLSAqCi0g
KiBAYXV0aG9yIGNhcmxhbnRvbkBnb29nbGUuY29tIChDYXJsIEhhdmVybCkKLSAqLwotcHVibGlj
IGNsYXNzIFJvcGVCeXRlU3RyaW5nVGVzdCBleHRlbmRzIExpdGVyYWxCeXRlU3RyaW5nVGVzdCB7
Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgY2xhc3NVbmRlclRlc3QgPSAiUm9wZUJ5dGVTdHJpbmciOwotICAgIHJlZmVyZW5j
ZUJ5dGVzID0gQnl0ZVN0cmluZ1Rlc3QuZ2V0VGVzdEJ5dGVzKDIyMzQxLCAyMjMzNzc2NkwpOwot
ICAgIEl0ZXJhdG9yPEJ5dGVTdHJpbmc+IGl0ZXIgPSBCeXRlU3RyaW5nVGVzdC5tYWtlQ29uY3Jl
dGVQaWVjZXMocmVmZXJlbmNlQnl0ZXMpLml0ZXJhdG9yKCk7Ci0gICAgc3RyaW5nVW5kZXJUZXN0
ID0gaXRlci5uZXh0KCk7Ci0gICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0gICAgICBzdHJp
bmdVbmRlclRlc3QgPSBzdHJpbmdVbmRlclRlc3QuY29uY2F0KGl0ZXIubmV4dCgpKTsKLSAgICB9
Ci0gICAgZXhwZWN0ZWRIYXNoQ29kZSA9IC0xMjE0MTk3MjM4OwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIHRlc3RHZXRUcmVlRGVwdGgoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKGNs
YXNzVW5kZXJUZXN0ICsgIiBtdXN0IGhhdmUgdGhlIGV4cGVjdGVkIHRyZWUgZGVwdGgiLAotICAg
ICAgICA0LCBzdHJpbmdVbmRlclRlc3QuZ2V0VHJlZURlcHRoKCkpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgdGVzdEJhbGFuY2UoKSB7Ci0gICAgaW50IG51bWJlck9mUGllY2VzID0gMTAwMDA7Ci0g
ICAgaW50IHBpZWNlU2l6ZSA9IDY0OwotICAgIGJ5dGVbXSB0ZXN0Qnl0ZXMgPSBCeXRlU3RyaW5n
VGVzdC5nZXRUZXN0Qnl0ZXMobnVtYmVyT2ZQaWVjZXMgKiBwaWVjZVNpemUsIDExMzM3N0wpOwot
Ci0gICAgLy8gQnVpbGQgdXAgYSBiaWcgQnl0ZVN0cmluZyBmcm9tIHNtYWxsZXIgcGllY2VzIHRv
IGZvcmNlIGEgcmViYWxhbmNlCi0gICAgQnl0ZVN0cmluZyBjb25jYXRlbmF0ZWQgPSBCeXRlU3Ry
aW5nLkVNUFRZOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZQaWVjZXM7ICsraSkg
ewotICAgICAgY29uY2F0ZW5hdGVkID0gY29uY2F0ZW5hdGVkLmNvbmNhdChCeXRlU3RyaW5nLmNv
cHlGcm9tKHRlc3RCeXRlcywgaSAqIHBpZWNlU2l6ZSwgcGllY2VTaXplKSk7Ci0gICAgfQotCi0g
ICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIiBmcm9tIHN0cmluZyBtdXN0IGhhdmUg
dGhlIGV4cGVjdGVkIHR5cGUiLAotICAgICAgICBjbGFzc1VuZGVyVGVzdCwgZ2V0QWN0dWFsQ2xh
c3NOYW1lKGNvbmNhdGVuYXRlZCkpOwotICAgIGFzc2VydFRydWUoY2xhc3NVbmRlclRlc3QgKyAi
IHVuZGVybHlpbmcgYnl0ZXMgbXVzdCBtYXRjaCBhZnRlciBiYWxhbmNpbmciLAotICAgICAgICBB
cnJheXMuZXF1YWxzKHRlc3RCeXRlcywgY29uY2F0ZW5hdGVkLnRvQnl0ZUFycmF5KCkpKTsKLSAg
ICBCeXRlU3RyaW5nIHRlc3RTdHJpbmcgPSBCeXRlU3RyaW5nLmNvcHlGcm9tKHRlc3RCeXRlcyk7
Ci0gICAgYXNzZXJ0VHJ1ZShjbGFzc1VuZGVyVGVzdCArICIgYmFsYW5jZWQgc3RyaW5nIG11c3Qg
ZXF1YWwgZmxhdCBzdHJpbmciLAotICAgICAgICBjb25jYXRlbmF0ZWQuZXF1YWxzKHRlc3RTdHJp
bmcpKTsKLSAgICBhc3NlcnRUcnVlKGNsYXNzVW5kZXJUZXN0ICsgIiBmbGF0IHN0cmluZyBtdXN0
IGVxdWFsIGJhbGFuY2VkIHN0cmluZyIsCi0gICAgICAgIHRlc3RTdHJpbmcuZXF1YWxzKGNvbmNh
dGVuYXRlZCkpOwotICAgIGFzc2VydEVxdWFscyhjbGFzc1VuZGVyVGVzdCArICIgYmFsYW5jZWQg
c3RyaW5nIG11c3QgaGF2ZSBzYW1lIGhhc2ggY29kZSBhcyBmbGF0IHN0cmluZyIsCi0gICAgICAg
IHRlc3RTdHJpbmcuaGFzaENvZGUoKSwgY29uY2F0ZW5hdGVkLmhhc2hDb2RlKCkpOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZygpIHRocm93cyBVbnN1cHBv
cnRlZEVuY29kaW5nRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gIkkgbG92
ZSB1bmljb2RlIFx1MTIzNFx1NTY3OCBjaGFyYWN0ZXJzIjsKLSAgICBCeXRlU3RyaW5nIHNvdXJj
ZUJ5dGVTdHJpbmcgPSBCeXRlU3RyaW5nLmNvcHlGcm9tVXRmOChzb3VyY2VTdHJpbmcpOwotICAg
IGludCBjb3BpZXMgPSAyNTA7Ci0KLSAgICAvLyBCeSBidWlsZGluZyB0aGUgUm9wZUJ5dGVTdHJp
bmcgYnkgY29uY2F0ZW5hdGluZywgdGhpcyBpcyBhY3R1YWxseSBhIGZhaXJseSBzdHJlbnVvdXMg
dGVzdC4KLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihjb3Bp
ZXMgKiBzb3VyY2VTdHJpbmcubGVuZ3RoKCkpOwotICAgIEJ5dGVTdHJpbmcgdW5pY29kZSA9IEJ5
dGVTdHJpbmcuRU1QVFk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3BpZXM7ICsraSkgewot
ICAgICAgYnVpbGRlci5hcHBlbmQoc291cmNlU3RyaW5nKTsKLSAgICAgIHVuaWNvZGUgPSBSb3Bl
Qnl0ZVN0cmluZy5jb25jYXRlbmF0ZSh1bmljb2RlLCBzb3VyY2VCeXRlU3RyaW5nKTsKLSAgICB9
Ci0gICAgU3RyaW5nIHRlc3RTdHJpbmcgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0KLSAgICBhc3Nl
cnRFcXVhbHMoY2xhc3NVbmRlclRlc3QgKyAiIGZyb20gc3RyaW5nIG11c3QgaGF2ZSB0aGUgZXhw
ZWN0ZWQgdHlwZSIsCi0gICAgICAgIGNsYXNzVW5kZXJUZXN0LCBnZXRBY3R1YWxDbGFzc05hbWUo
dW5pY29kZSkpOwotICAgIFN0cmluZyByb3VuZFRyaXBTdHJpbmcgPSB1bmljb2RlLnRvU3RyaW5n
KFVURl84KTsKLSAgICBhc3NlcnRFcXVhbHMoY2xhc3NVbmRlclRlc3QgKyAiIHVuaWNvZGUgYnl0
ZXMgbXVzdCBtYXRjaCIsCi0gICAgICAgIHRlc3RTdHJpbmcsIHJvdW5kVHJpcFN0cmluZyk7Ci0g
ICAgQnl0ZVN0cmluZyBmbGF0U3RyaW5nID0gQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgodGVzdFN0
cmluZyk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNsYXNzVW5kZXJUZXN0ICsgIiBzdHJpbmcgbXVzdCBl
cXVhbCB0aGUgZmxhdCBzdHJpbmciLCBmbGF0U3RyaW5nLCB1bmljb2RlKTsKLSAgICBhc3NlcnRF
cXVhbHMoY2xhc3NVbmRlclRlc3QgKyAiIHN0cmluZyBtdXN0IG11c3QgaGF2ZSBzYW1lIGhhc2hD
b2RlIGFzIHRoZSBmbGF0IHN0cmluZyIsCi0gICAgICAgIGZsYXRTdHJpbmcuaGFzaENvZGUoKSwg
dW5pY29kZS5oYXNoQ29kZSgpKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCB0
ZXN0Q2hhcnNldFRvU3RyaW5nKCkgewotICAgIFN0cmluZyBzb3VyY2VTdHJpbmcgPSAiSSBsb3Zl
IHVuaWNvZGUgXHUxMjM0XHU1Njc4IGNoYXJhY3RlcnMiOwotICAgIEJ5dGVTdHJpbmcgc291cmNl
Qnl0ZVN0cmluZyA9IEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KHNvdXJjZVN0cmluZyk7Ci0gICAg
aW50IGNvcGllcyA9IDI1MDsKLQotICAgIC8vIEJ5IGJ1aWxkaW5nIHRoZSBSb3BlQnl0ZVN0cmlu
ZyBieSBjb25jYXRlbmF0aW5nLCB0aGlzIGlzIGFjdHVhbGx5IGEgZmFpcmx5IHN0cmVudW91cyB0
ZXN0LgotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGNvcGll
cyAqIHNvdXJjZVN0cmluZy5sZW5ndGgoKSk7Ci0gICAgQnl0ZVN0cmluZyB1bmljb2RlID0gQnl0
ZVN0cmluZy5FTVBUWTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcGllczsgKytpKSB7Ci0g
ICAgICBidWlsZGVyLmFwcGVuZChzb3VyY2VTdHJpbmcpOwotICAgICAgdW5pY29kZSA9IFJvcGVC
eXRlU3RyaW5nLmNvbmNhdGVuYXRlKHVuaWNvZGUsIHNvdXJjZUJ5dGVTdHJpbmcpOwotICAgIH0K
LSAgICBTdHJpbmcgdGVzdFN0cmluZyA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKLQotICAgIGFzc2Vy
dEVxdWFscyhjbGFzc1VuZGVyVGVzdCArICIgZnJvbSBzdHJpbmcgbXVzdCBoYXZlIHRoZSBleHBl
Y3RlZCB0eXBlIiwKLSAgICAgICAgY2xhc3NVbmRlclRlc3QsIGdldEFjdHVhbENsYXNzTmFtZSh1
bmljb2RlKSk7Ci0gICAgU3RyaW5nIHJvdW5kVHJpcFN0cmluZyA9IHVuaWNvZGUudG9TdHJpbmco
SW50ZXJuYWwuVVRGXzgpOwotICAgIGFzc2VydEVxdWFscyhjbGFzc1VuZGVyVGVzdCArICIgdW5p
Y29kZSBieXRlcyBtdXN0IG1hdGNoIiwKLSAgICAgICAgdGVzdFN0cmluZywgcm91bmRUcmlwU3Ry
aW5nKTsKLSAgICBCeXRlU3RyaW5nIGZsYXRTdHJpbmcgPSBCeXRlU3RyaW5nLmNvcHlGcm9tVXRm
OCh0ZXN0U3RyaW5nKTsKLSAgICBhc3NlcnRFcXVhbHMoY2xhc3NVbmRlclRlc3QgKyAiIHN0cmlu
ZyBtdXN0IGVxdWFsIHRoZSBmbGF0IHN0cmluZyIsIGZsYXRTdHJpbmcsIHVuaWNvZGUpOwotICAg
IGFzc2VydEVxdWFscyhjbGFzc1VuZGVyVGVzdCArICIgc3RyaW5nIG11c3QgbXVzdCBoYXZlIHNh
bWUgaGFzaENvZGUgYXMgdGhlIGZsYXQgc3RyaW5nIiwKLSAgICAgICAgZmxhdFN0cmluZy5oYXNo
Q29kZSgpLCB1bmljb2RlLmhhc2hDb2RlKCkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIHRlc3RUb1N0cmluZ19yZXR1cm5zQ2Fub25pY2FsRW1wdHlTdHJpbmcoKSB7Ci0gICAg
Um9wZUJ5dGVTdHJpbmcgcm9wZUJ5dGVTdHJpbmcgPQotICAgICAgICBSb3BlQnl0ZVN0cmluZy5u
ZXdJbnN0YW5jZUZvclRlc3QoQnl0ZVN0cmluZy5FTVBUWSwgQnl0ZVN0cmluZy5FTVBUWSk7Ci0g
ICAgYXNzZXJ0U2FtZShjbGFzc1VuZGVyVGVzdCArICIgbXVzdCBiZSB0aGUgc2FtZSBzdHJpbmcg
cmVmZXJlbmNlcyIsCi0gICAgICAgIEJ5dGVTdHJpbmcuRU1QVFkudG9TdHJpbmcoSW50ZXJuYWwu
VVRGXzgpLCByb3BlQnl0ZVN0cmluZy50b1N0cmluZyhJbnRlcm5hbC5VVEZfOCkpOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZ19yYWlzZXNFeGNlcHRpb24o
KSB7Ci0gICAgdHJ5IHsKLSAgICAgIEJ5dGVTdHJpbmcgYnl0ZVN0cmluZyA9Ci0gICAgICAgICAg
Um9wZUJ5dGVTdHJpbmcubmV3SW5zdGFuY2VGb3JUZXN0KEJ5dGVTdHJpbmcuRU1QVFksIEJ5dGVT
dHJpbmcuRU1QVFkpOwotICAgICAgYnl0ZVN0cmluZy50b1N0cmluZygiaW52YWxpZCIpOwotICAg
ICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4iKTsKLSAgICB9IGNhdGNo
IChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAvLyBUaGlz
IGlzIHN1Y2Nlc3MKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgQnl0ZVN0cmluZyBieXRlU3Ry
aW5nID0gUm9wZUJ5dGVTdHJpbmcuY29uY2F0ZW5hdGUoQnl0ZVN0cmluZy5jb3B5RnJvbVV0Zjgo
ImZvbyIpLAotICAgICAgICAgIEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJiYXIiKSk7Ci0gICAg
ICBieXRlU3RyaW5nLnRvU3RyaW5nKCJpbnZhbGlkIik7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2
ZSB0aHJvd24gYW4gZXhjZXB0aW9uLiIpOwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2Rp
bmdFeGNlcHRpb24gZXhwZWN0ZWQpIHsKLSAgICAgIC8vIFRoaXMgaXMgc3VjY2VzcwotICAgIH0K
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCB0ZXN0SmF2YVNlcmlhbGl6YXRpb24o
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0ID0gbmV3
IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIE9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBu
ZXcgT2JqZWN0T3V0cHV0U3RyZWFtKG91dCk7Ci0gICAgb29zLndyaXRlT2JqZWN0KHN0cmluZ1Vu
ZGVyVGVzdCk7Ci0gICAgb29zLmNsb3NlKCk7Ci0gICAgYnl0ZVtdIHBpY2tsZWQgPSBvdXQudG9C
eXRlQXJyYXkoKTsKLSAgICBJbnB1dFN0cmVhbSBpbiA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVh
bShwaWNrbGVkKTsKLSAgICBPYmplY3RJbnB1dFN0cmVhbSBvaXMgPSBuZXcgT2JqZWN0SW5wdXRT
dHJlYW0oaW4pOwotICAgIE9iamVjdCBvID0gb2lzLnJlYWRPYmplY3QoKTsKLSAgICBhc3NlcnRU
cnVlKCJEaWRuJ3QgZ2V0IGEgQnl0ZVN0cmluZyBiYWNrIiwgbyBpbnN0YW5jZW9mIEJ5dGVTdHJp
bmcpOwotICAgIGFzc2VydEVxdWFscygiU2hvdWxkIGdldCBhbiBlcXVhbCBCeXRlU3RyaW5nIGJh
Y2siLCBzdHJpbmdVbmRlclRlc3QsIG8pOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9z
cmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvU2VydmljZVRlc3QuamF2YSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9j
b3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9TZXJ2aWNlVGVzdC5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTAyNzM3ZGVkOWU5MGE1NjUxNTNiNjRmOWFh
ZmZiMjJmMDEwZWNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9TZXJ2aWNlVGVz
dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9y
dCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0
IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuTWV0aG9kRGVzY3JpcHRvcjsKLWltcG9y
dCBnb29nbGUucHJvdG9idWYubm9fZ2VuZXJpY19zZXJ2aWNlc190ZXN0LlVuaXR0ZXN0Tm9HZW5l
cmljU2VydmljZXM7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuTWVzc2FnZVdpdGhOb091dGVy
OwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlNlcnZpY2VXaXRoTm9PdXRlcjsKLWltcG9ydCBw
cm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLkJhclJlcXVlc3Q7Ci1pbXBvcnQgcHJvdG9i
dWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5CYXJSZXNwb25zZTsKLWltcG9ydCBwcm90b2J1Zl91
bml0dGVzdC5Vbml0dGVzdFByb3RvLkZvb1JlcXVlc3Q7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRl
c3QuVW5pdHRlc3RQcm90by5Gb29SZXNwb25zZTsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5V
bml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0
dGVzdFByb3RvLlRlc3RTZXJ2aWNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNl
OwotCi1pbXBvcnQgb3JnLmVhc3ltb2NrLmNsYXNzZXh0ZW5zaW9uLkVhc3lNb2NrOwotaW1wb3J0
IG9yZy5lYXN5bW9jay5JQXJndW1lbnRNYXRjaGVyOwotaW1wb3J0IG9yZy5lYXN5bW9jay5jbGFz
c2V4dGVuc2lvbi5JTW9ja3NDb250cm9sOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1p
bXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBUZXN0cyBzZXJ2aWNlcyBhbmQgc3R1YnMu
Ci0gKgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqLwotcHVi
bGljIGNsYXNzIFNlcnZpY2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotICBwcml2YXRlIElNb2Nr
c0NvbnRyb2wgY29udHJvbDsKLSAgcHJpdmF0ZSBScGNDb250cm9sbGVyIG1vY2tDb250cm9sbGVy
OwotCi0gIHByaXZhdGUgZmluYWwgRGVzY3JpcHRvcnMuTWV0aG9kRGVzY3JpcHRvciBmb29EZXNj
cmlwdG9yID0KLSAgICBUZXN0U2VydmljZS5nZXREZXNjcmlwdG9yKCkuZ2V0TWV0aG9kcygpLmdl
dCgwKTsKLSAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5NZXRob2REZXNjcmlwdG9yIGJhckRl
c2NyaXB0b3IgPQotICAgIFRlc3RTZXJ2aWNlLmdldERlc2NyaXB0b3IoKS5nZXRNZXRob2RzKCku
Z2V0KDEpOwotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBF
eGNlcHRpb24gewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgY29udHJvbCA9IEVhc3lNb2NrLmNy
ZWF0ZVN0cmljdENvbnRyb2woKTsKLSAgICBtb2NrQ29udHJvbGxlciA9IGNvbnRyb2wuY3JlYXRl
TW9jayhScGNDb250cm9sbGVyLmNsYXNzKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgLyoq
IFRlc3RzIFNlcnZpY2UuY2FsbE1ldGhvZCgpLiAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2FsbE1l
dGhvZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIEZvb1JlcXVlc3QgZm9vUmVxdWVzdCA9IEZv
b1JlcXVlc3QubmV3QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgQmFyUmVxdWVzdCBiYXJSZXF1ZXN0
ID0gQmFyUmVxdWVzdC5uZXdCdWlsZGVyKCkuYnVpbGQoKTsKLSAgICBNb2NrQ2FsbGJhY2s8TWVz
c2FnZT4gZm9vQ2FsbGJhY2sgPSBuZXcgTW9ja0NhbGxiYWNrPE1lc3NhZ2U+KCk7Ci0gICAgTW9j
a0NhbGxiYWNrPE1lc3NhZ2U+IGJhckNhbGxiYWNrID0gbmV3IE1vY2tDYWxsYmFjazxNZXNzYWdl
PigpOwotICAgIFRlc3RTZXJ2aWNlIG1vY2tTZXJ2aWNlID0gY29udHJvbC5jcmVhdGVNb2NrKFRl
c3RTZXJ2aWNlLmNsYXNzKTsKLQotICAgIG1vY2tTZXJ2aWNlLmZvbyhFYXN5TW9jay5zYW1lKG1v
Y2tDb250cm9sbGVyKSwgRWFzeU1vY2suc2FtZShmb29SZXF1ZXN0KSwKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy48Rm9vUmVzcG9uc2U+d3JhcHNDYWxsYmFjayhmb29DYWxsYmFjaykpOwotICAg
IG1vY2tTZXJ2aWNlLmJhcihFYXN5TW9jay5zYW1lKG1vY2tDb250cm9sbGVyKSwgRWFzeU1vY2su
c2FtZShiYXJSZXF1ZXN0KSwKLSAgICAgICAgICAgICAgICAgICAgdGhpcy48QmFyUmVzcG9uc2U+
d3JhcHNDYWxsYmFjayhiYXJDYWxsYmFjaykpOwotICAgIGNvbnRyb2wucmVwbGF5KCk7Ci0KLSAg
ICBtb2NrU2VydmljZS5jYWxsTWV0aG9kKGZvb0Rlc2NyaXB0b3IsIG1vY2tDb250cm9sbGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9vUmVxdWVzdCwgZm9vQ2FsbGJhY2spOwotICAg
IG1vY2tTZXJ2aWNlLmNhbGxNZXRob2QoYmFyRGVzY3JpcHRvciwgbW9ja0NvbnRyb2xsZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJSZXF1ZXN0LCBiYXJDYWxsYmFjayk7Ci0gICAg
Y29udHJvbC52ZXJpZnkoKTsKLSAgfQotCi0gIC8qKiBUZXN0cyBTZXJ2aWNlLmdldHtSZXF1ZXN0
LFJlc3BvbnNlfVByb3RvdHlwZSgpLiAqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0UHJvdG90eXBl
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdFNlcnZpY2UgbW9ja1NlcnZpY2UgPSBjb250
cm9sLmNyZWF0ZU1vY2soVGVzdFNlcnZpY2UuY2xhc3MpOwotCi0gICAgYXNzZXJ0U2FtZShtb2Nr
U2VydmljZS5nZXRSZXF1ZXN0UHJvdG90eXBlKGZvb0Rlc2NyaXB0b3IpLAotICAgICAgICAgICAg
ICAgRm9vUmVxdWVzdC5nZXREZWZhdWx0SW5zdGFuY2UoKSk7Ci0gICAgYXNzZXJ0U2FtZShtb2Nr
U2VydmljZS5nZXRSZXNwb25zZVByb3RvdHlwZShmb29EZXNjcmlwdG9yKSwKLSAgICAgICAgICAg
ICAgIEZvb1Jlc3BvbnNlLmdldERlZmF1bHRJbnN0YW5jZSgpKTsKLSAgICBhc3NlcnRTYW1lKG1v
Y2tTZXJ2aWNlLmdldFJlcXVlc3RQcm90b3R5cGUoYmFyRGVzY3JpcHRvciksCi0gICAgICAgICAg
ICAgICBCYXJSZXF1ZXN0LmdldERlZmF1bHRJbnN0YW5jZSgpKTsKLSAgICBhc3NlcnRTYW1lKG1v
Y2tTZXJ2aWNlLmdldFJlc3BvbnNlUHJvdG90eXBlKGJhckRlc2NyaXB0b3IpLAotICAgICAgICAg
ICAgICAgQmFyUmVzcG9uc2UuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICB9Ci0KLSAgLyoqIFRl
c3RzIGdlbmVyYXRlZCBzdHVicy4gKi8KLSAgcHVibGljIHZvaWQgdGVzdFN0dWIoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBGb29SZXF1ZXN0IGZvb1JlcXVlc3QgPSBGb29SZXF1ZXN0Lm5ld0J1
aWxkZXIoKS5idWlsZCgpOwotICAgIEJhclJlcXVlc3QgYmFyUmVxdWVzdCA9IEJhclJlcXVlc3Qu
bmV3QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgTW9ja0NhbGxiYWNrPEZvb1Jlc3BvbnNlPiBmb29D
YWxsYmFjayA9IG5ldyBNb2NrQ2FsbGJhY2s8Rm9vUmVzcG9uc2U+KCk7Ci0gICAgTW9ja0NhbGxi
YWNrPEJhclJlc3BvbnNlPiBiYXJDYWxsYmFjayA9IG5ldyBNb2NrQ2FsbGJhY2s8QmFyUmVzcG9u
c2U+KCk7Ci0gICAgUnBjQ2hhbm5lbCBtb2NrQ2hhbm5lbCA9IGNvbnRyb2wuY3JlYXRlTW9jayhS
cGNDaGFubmVsLmNsYXNzKTsKLSAgICBUZXN0U2VydmljZSBzdHViID0gVGVzdFNlcnZpY2UubmV3
U3R1Yihtb2NrQ2hhbm5lbCk7Ci0KLSAgICBtb2NrQ2hhbm5lbC5jYWxsTWV0aG9kKAotICAgICAg
RWFzeU1vY2suc2FtZShmb29EZXNjcmlwdG9yKSwKLSAgICAgIEVhc3lNb2NrLnNhbWUobW9ja0Nv
bnRyb2xsZXIpLAotICAgICAgRWFzeU1vY2suc2FtZShmb29SZXF1ZXN0KSwKLSAgICAgIEVhc3lN
b2NrLnNhbWUoRm9vUmVzcG9uc2UuZ2V0RGVmYXVsdEluc3RhbmNlKCkpLAotICAgICAgdGhpcy48
TWVzc2FnZT53cmFwc0NhbGxiYWNrKGZvb0NhbGxiYWNrKSk7Ci0gICAgbW9ja0NoYW5uZWwuY2Fs
bE1ldGhvZCgKLSAgICAgIEVhc3lNb2NrLnNhbWUoYmFyRGVzY3JpcHRvciksCi0gICAgICBFYXN5
TW9jay5zYW1lKG1vY2tDb250cm9sbGVyKSwKLSAgICAgIEVhc3lNb2NrLnNhbWUoYmFyUmVxdWVz
dCksCi0gICAgICBFYXN5TW9jay5zYW1lKEJhclJlc3BvbnNlLmdldERlZmF1bHRJbnN0YW5jZSgp
KSwKLSAgICAgIHRoaXMuPE1lc3NhZ2U+d3JhcHNDYWxsYmFjayhiYXJDYWxsYmFjaykpOwotICAg
IGNvbnRyb2wucmVwbGF5KCk7Ci0KLSAgICBzdHViLmZvbyhtb2NrQ29udHJvbGxlciwgZm9vUmVx
dWVzdCwgZm9vQ2FsbGJhY2spOwotICAgIHN0dWIuYmFyKG1vY2tDb250cm9sbGVyLCBiYXJSZXF1
ZXN0LCBiYXJDYWxsYmFjayk7Ci0gICAgY29udHJvbC52ZXJpZnkoKTsKLSAgfQotCi0gIC8qKiBU
ZXN0cyBnZW5lcmF0ZWQgYmxvY2tpbmcgc3R1YnMuICovCi0gIHB1YmxpYyB2b2lkIHRlc3RCbG9j
a2luZ1N0dWIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGb29SZXF1ZXN0IGZvb1JlcXVlc3Qg
PSBGb29SZXF1ZXN0Lm5ld0J1aWxkZXIoKS5idWlsZCgpOwotICAgIEJhclJlcXVlc3QgYmFyUmVx
dWVzdCA9IEJhclJlcXVlc3QubmV3QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgQmxvY2tpbmdScGND
aGFubmVsIG1vY2tDaGFubmVsID0KLSAgICAgICAgY29udHJvbC5jcmVhdGVNb2NrKEJsb2NraW5n
UnBjQ2hhbm5lbC5jbGFzcyk7Ci0gICAgVGVzdFNlcnZpY2UuQmxvY2tpbmdJbnRlcmZhY2Ugc3R1
YiA9Ci0gICAgICAgIFRlc3RTZXJ2aWNlLm5ld0Jsb2NraW5nU3R1Yihtb2NrQ2hhbm5lbCk7Ci0K
LSAgICBGb29SZXNwb25zZSBmb29SZXNwb25zZSA9IEZvb1Jlc3BvbnNlLm5ld0J1aWxkZXIoKS5i
dWlsZCgpOwotICAgIEJhclJlc3BvbnNlIGJhclJlc3BvbnNlID0gQmFyUmVzcG9uc2UubmV3QnVp
bGRlcigpLmJ1aWxkKCk7Ci0KLSAgICBFYXN5TW9jay5leHBlY3QobW9ja0NoYW5uZWwuY2FsbEJs
b2NraW5nTWV0aG9kKAotICAgICAgRWFzeU1vY2suc2FtZShmb29EZXNjcmlwdG9yKSwKLSAgICAg
IEVhc3lNb2NrLnNhbWUobW9ja0NvbnRyb2xsZXIpLAotICAgICAgRWFzeU1vY2suc2FtZShmb29S
ZXF1ZXN0KSwKLSAgICAgIEVhc3lNb2NrLnNhbWUoRm9vUmVzcG9uc2UuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkpKSkuYW5kUmV0dXJuKGZvb1Jlc3BvbnNlKTsKLSAgICBFYXN5TW9jay5leHBlY3QobW9j
a0NoYW5uZWwuY2FsbEJsb2NraW5nTWV0aG9kKAotICAgICAgRWFzeU1vY2suc2FtZShiYXJEZXNj
cmlwdG9yKSwKLSAgICAgIEVhc3lNb2NrLnNhbWUobW9ja0NvbnRyb2xsZXIpLAotICAgICAgRWFz
eU1vY2suc2FtZShiYXJSZXF1ZXN0KSwKLSAgICAgIEVhc3lNb2NrLnNhbWUoQmFyUmVzcG9uc2Uu
Z2V0RGVmYXVsdEluc3RhbmNlKCkpKSkuYW5kUmV0dXJuKGJhclJlc3BvbnNlKTsKLSAgICBjb250
cm9sLnJlcGxheSgpOwotCi0gICAgYXNzZXJ0U2FtZShmb29SZXNwb25zZSwgc3R1Yi5mb28obW9j
a0NvbnRyb2xsZXIsIGZvb1JlcXVlc3QpKTsKLSAgICBhc3NlcnRTYW1lKGJhclJlc3BvbnNlLCBz
dHViLmJhcihtb2NrQ29udHJvbGxlciwgYmFyUmVxdWVzdCkpOwotICAgIGNvbnRyb2wudmVyaWZ5
KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmV3UmVmbGVjdGl2ZVNlcnZpY2UoKSB7Ci0g
ICAgU2VydmljZVdpdGhOb091dGVyLkludGVyZmFjZSBpbXBsID0KLSAgICAgICAgY29udHJvbC5j
cmVhdGVNb2NrKFNlcnZpY2VXaXRoTm9PdXRlci5JbnRlcmZhY2UuY2xhc3MpOwotICAgIFJwY0Nv
bnRyb2xsZXIgY29udHJvbGxlciA9IGNvbnRyb2wuY3JlYXRlTW9jayhScGNDb250cm9sbGVyLmNs
YXNzKTsKLSAgICBTZXJ2aWNlIHNlcnZpY2UgPSBTZXJ2aWNlV2l0aE5vT3V0ZXIubmV3UmVmbGVj
dGl2ZVNlcnZpY2UoaW1wbCk7Ci0KLSAgICBNZXRob2REZXNjcmlwdG9yIGZvb01ldGhvZCA9Ci0g
ICAgICAgIFNlcnZpY2VXaXRoTm9PdXRlci5nZXREZXNjcmlwdG9yKCkuZmluZE1ldGhvZEJ5TmFt
ZSgiRm9vIik7Ci0gICAgTWVzc2FnZVdpdGhOb091dGVyIHJlcXVlc3QgPSBNZXNzYWdlV2l0aE5v
T3V0ZXIuZ2V0RGVmYXVsdEluc3RhbmNlKCk7Ci0gICAgUnBjQ2FsbGJhY2s8TWVzc2FnZT4gY2Fs
bGJhY2sgPQotICAgICAgICBuZXcgUnBjQ2FsbGJhY2s8TWVzc2FnZT4oKSB7Ci0gICAgICAgICAg
QE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKE1lc3NhZ2UgcGFyYW1ldGVyKSB7
Ci0gICAgICAgICAgICAvLyBObyByZWFzb24gdGhpcyBzaG91bGQgYmUgcnVuLgotICAgICAgICAg
ICAgZmFpbCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICBScGNDYWxsYmFjazxUZXN0
QWxsVHlwZXM+IHNwZWNpYWxpemVkQ2FsbGJhY2sgPQotICAgICAgICBScGNVdGlsLnNwZWNpYWxp
emVDYWxsYmFjayhjYWxsYmFjayk7Ci0KLSAgICBpbXBsLmZvbyhFYXN5TW9jay5zYW1lKGNvbnRy
b2xsZXIpLCBFYXN5TW9jay5zYW1lKHJlcXVlc3QpLAotICAgICAgICBFYXN5TW9jay5zYW1lKHNw
ZWNpYWxpemVkQ2FsbGJhY2spKTsKLSAgICBFYXN5TW9jay5leHBlY3RMYXN0Q2FsbCgpOwotCi0g
ICAgY29udHJvbC5yZXBsYXkoKTsKLQotICAgIHNlcnZpY2UuY2FsbE1ldGhvZChmb29NZXRob2Qs
IGNvbnRyb2xsZXIsIHJlcXVlc3QsIGNhbGxiYWNrKTsKLQotICAgIGNvbnRyb2wudmVyaWZ5KCk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmV3UmVmbGVjdGl2ZUJsb2NraW5nU2VydmljZSgp
IHRocm93cyBTZXJ2aWNlRXhjZXB0aW9uIHsKLSAgICBTZXJ2aWNlV2l0aE5vT3V0ZXIuQmxvY2tp
bmdJbnRlcmZhY2UgaW1wbCA9Ci0gICAgICAgIGNvbnRyb2wuY3JlYXRlTW9jayhTZXJ2aWNlV2l0
aE5vT3V0ZXIuQmxvY2tpbmdJbnRlcmZhY2UuY2xhc3MpOwotICAgIFJwY0NvbnRyb2xsZXIgY29u
dHJvbGxlciA9IGNvbnRyb2wuY3JlYXRlTW9jayhScGNDb250cm9sbGVyLmNsYXNzKTsKLSAgICBC
bG9ja2luZ1NlcnZpY2Ugc2VydmljZSA9Ci0gICAgICAgIFNlcnZpY2VXaXRoTm9PdXRlci5uZXdS
ZWZsZWN0aXZlQmxvY2tpbmdTZXJ2aWNlKGltcGwpOwotCi0gICAgTWV0aG9kRGVzY3JpcHRvciBm
b29NZXRob2QgPQotICAgICAgICBTZXJ2aWNlV2l0aE5vT3V0ZXIuZ2V0RGVzY3JpcHRvcigpLmZp
bmRNZXRob2RCeU5hbWUoIkZvbyIpOwotICAgIE1lc3NhZ2VXaXRoTm9PdXRlciByZXF1ZXN0ID0g
TWVzc2FnZVdpdGhOb091dGVyLmdldERlZmF1bHRJbnN0YW5jZSgpOwotCi0gICAgVGVzdEFsbFR5
cGVzIGV4cGVjdGVkUmVzcG9uc2UgPSBUZXN0QWxsVHlwZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCk7
Ci0gICAgRWFzeU1vY2suZXhwZWN0KGltcGwuZm9vKEVhc3lNb2NrLnNhbWUoY29udHJvbGxlciks
IEVhc3lNb2NrLnNhbWUocmVxdWVzdCkpKQotICAgICAgICAuYW5kUmV0dXJuKGV4cGVjdGVkUmVz
cG9uc2UpOwotCi0gICAgY29udHJvbC5yZXBsYXkoKTsKLQotICAgIE1lc3NhZ2UgcmVzcG9uc2Ug
PQotICAgICAgICBzZXJ2aWNlLmNhbGxCbG9ja2luZ01ldGhvZChmb29NZXRob2QsIGNvbnRyb2xs
ZXIsIHJlcXVlc3QpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFJlc3BvbnNlLCByZXNwb25z
ZSk7Ci0KLSAgICBjb250cm9sLnZlcmlmeSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5v
R2VuZXJpY1NlcnZpY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gTm9uLXNlcnZpY2Vz
IHNob3VsZCBiZSB1c2FibGUuCi0gICAgVW5pdHRlc3ROb0dlbmVyaWNTZXJ2aWNlcy5UZXN0TWVz
c2FnZSBtZXNzYWdlID0KLSAgICAgIFVuaXR0ZXN0Tm9HZW5lcmljU2VydmljZXMuVGVzdE1lc3Nh
Z2UubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRBKDEyMykKLSAgICAgICAgLnNldEV4dGVuc2lv
bihVbml0dGVzdE5vR2VuZXJpY1NlcnZpY2VzLnRlc3RFeHRlbnNpb24sIDQ1NikKLSAgICAgICAg
LmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbWVzc2FnZS5nZXRBKCkpOwotICAgIGFz
c2VydEVxdWFscygxLCBVbml0dGVzdE5vR2VuZXJpY1NlcnZpY2VzLlRlc3RFbnVtLkZPTy5nZXRO
dW1iZXIoKSk7Ci0KLSAgICAvLyBCdWlsZCBhIGxpc3Qgb2YgdGhlIGNsYXNzIG5hbWVzIG5lc3Rl
ZCBpbiBVbml0dGVzdE5vR2VuZXJpY1NlcnZpY2VzLgotICAgIFN0cmluZyBvdXRlck5hbWUgPSAi
Z29vZ2xlLnByb3RvYnVmLm5vX2dlbmVyaWNfc2VydmljZXNfdGVzdC4iICsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlVuaXR0ZXN0Tm9HZW5lcmljU2VydmljZXMiOwotICAgIENsYXNzPD8+IG91
dGVyQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKG91dGVyTmFtZSk7Ci0KLSAgICBTZXQ8U3RyaW5nPiBp
bm5lckNsYXNzTmFtZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgZm9yIChDbGFzczw/
PiBpbm5lckNsYXNzIDogb3V0ZXJDbGFzcy5nZXRDbGFzc2VzKCkpIHsKLSAgICAgIFN0cmluZyBm
dWxsTmFtZSA9IGlubmVyQ2xhc3MuZ2V0TmFtZSgpOwotICAgICAgLy8gRmlndXJlIG91dCB0aGUg
dW5xdWFsaWZpZWQgbmFtZSBvZiB0aGUgaW5uZXIgY2xhc3MuCi0gICAgICAvLyBOb3RlOiAgU3Vy
cHJpc2luZ2x5LCB0aGUgZnVsbCBuYW1lIG9mIGFuIGlubmVyIGNsYXNzIHdpbGwgYmUgc2VwYXJh
dGVkCi0gICAgICAvLyAgIGZyb20gdGhlIG91dGVyIGNsYXNzIG5hbWUgYnkgYSAnJCcgcmF0aGVy
IHRoYW4gYSAnLicuICBUaGlzIGlzIG5vdAotICAgICAgLy8gICBtZW50aW9uZWQgaW4gdGhlIGRv
Y3VtZW50YXRpb24gZm9yIGphdmEubGFuZy5DbGFzcy4gIEkgZG9uJ3Qgd2FudCB0bwotICAgICAg
Ly8gICBtYWtlIGFzc3VtcHRpb25zLCBzbyBJJ20ganVzdCBnb2luZyB0byBhY2NlcHQgYW55IGNo
YXJhY3RlciBhcyB0aGUKLSAgICAgIC8vICAgc2VwYXJhdG9yLgotICAgICAgYXNzZXJ0VHJ1ZShm
dWxsTmFtZS5zdGFydHNXaXRoKG91dGVyTmFtZSkpOwotCi0gICAgICBpZiAoIVNlcnZpY2UuY2xh
c3MuaXNBc3NpZ25hYmxlRnJvbShpbm5lckNsYXNzKSAmJgotICAgICAgICAgICFNZXNzYWdlLmNs
YXNzLmlzQXNzaWduYWJsZUZyb20oaW5uZXJDbGFzcykgJiYKLSAgICAgICAgICAhUHJvdG9jb2xN
ZXNzYWdlRW51bS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGlubmVyQ2xhc3MpKSB7Ci0gICAgICAg
IC8vIElnbm9yZSBhbnkgY2xhc3NlcyBub3QgZ2VuZXJhdGVkIGJ5IHRoZSBiYXNlIGNvZGUgZ2Vu
ZXJhdG9yLgotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgaW5uZXJDbGFzc05h
bWVzLmFkZChmdWxsTmFtZS5zdWJzdHJpbmcob3V0ZXJOYW1lLmxlbmd0aCgpICsgMSkpOwotICAg
IH0KLQotICAgIC8vIE5vIHNlcnZpY2UgY2xhc3Mgc2hvdWxkIGhhdmUgYmVlbiBnZW5lcmF0ZWQu
Ci0gICAgYXNzZXJ0VHJ1ZShpbm5lckNsYXNzTmFtZXMuY29udGFpbnMoIlRlc3RNZXNzYWdlIikp
OwotICAgIGFzc2VydFRydWUoaW5uZXJDbGFzc05hbWVzLmNvbnRhaW5zKCJUZXN0RW51bSIpKTsK
LSAgICBhc3NlcnRGYWxzZShpbm5lckNsYXNzTmFtZXMuY29udGFpbnMoIlRlc3RTZXJ2aWNlIikp
OwotCi0gICAgLy8gQnV0IGRlc2NyaXB0b3JzIGFyZSB0aGVyZS4KLSAgICBGaWxlRGVzY3JpcHRv
ciBmaWxlID0gVW5pdHRlc3ROb0dlbmVyaWNTZXJ2aWNlcy5nZXREZXNjcmlwdG9yKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDEsIGZpbGUuZ2V0U2VydmljZXMoKS5zaXplKCkpOwotICAgIGFzc2VydEVx
dWFscygiVGVzdFNlcnZpY2UiLCBmaWxlLmdldFNlcnZpY2VzKCkuZ2V0KDApLmdldE5hbWUoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGZpbGUuZ2V0U2VydmljZXMoKS5nZXQoMCkuZ2V0TWV0aG9k
cygpLnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJGb28iLAotICAgICAgICBmaWxlLmdldFNl
cnZpY2VzKCkuZ2V0KDApLmdldE1ldGhvZHMoKS5nZXQoMCkuZ2V0TmFtZSgpKTsKLSAgfQotCi0g
IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0KLSAgLyoqCi0gICAqIHdyYXBzQ2FsbGJhY2soKSBpcyBhbiBFYXN5TW9j
ayBhcmd1bWVudCBwcmVkaWNhdGUuICB3cmFwc0NhbGxiYWNrKGMpCi0gICAqIG1hdGNoZXMgYSBj
YWxsYmFjayBpZiBjYWxsaW5nIHRoYXQgY2FsbGJhY2sgY2F1c2VzIGMgdG8gYmUgY2FsbGVkLgot
ICAgKiBJbiBvdGhlciB3b3JkcywgYyB3cmFwcyB0aGUgZ2l2ZW4gY2FsbGJhY2suCi0gICAqLwot
ICBwcml2YXRlIDxUeXBlIGV4dGVuZHMgTWVzc2FnZT4gUnBjQ2FsbGJhY2s8VHlwZT4gd3JhcHND
YWxsYmFjaygKLSAgICAgIE1vY2tDYWxsYmFjazw/PiBjYWxsYmFjaykgewotICAgIEVhc3lNb2Nr
LnJlcG9ydE1hdGNoZXIobmV3IFdyYXBzQ2FsbGJhY2soY2FsbGJhY2spKTsKLSAgICByZXR1cm4g
bnVsbDsKLSAgfQotCi0gIC8qKiBUaGUgcGFyYW1ldGVyIHRvIHdyYXBzQ2FsbGJhY2soKSBtdXN0
IGJlIGEgTW9ja0NhbGxiYWNrLiAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNb2NrQ2FsbGJh
Y2s8VHlwZSBleHRlbmRzIE1lc3NhZ2U+Ci0gICAgICBpbXBsZW1lbnRzIFJwY0NhbGxiYWNrPFR5
cGU+IHsKLSAgICBwcml2YXRlIGJvb2xlYW4gY2FsbGVkID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMg
Ym9vbGVhbiBpc0NhbGxlZCgpIHsgcmV0dXJuIGNhbGxlZDsgfQotCi0gICAgcHVibGljIHZvaWQg
cmVzZXQoKSB7IGNhbGxlZCA9IGZhbHNlOyB9Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgcnVuKFR5cGUgbWVzc2FnZSkgewotICAgICAgY2FsbGVkID0gdHJ1ZTsgfQotICB9Ci0KLSAg
LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSB3cmFwc0NhbGxiYWNrKCkgYXJndW1lbnQgbWF0Y2hl
ci4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgV3JhcHNDYWxsYmFjayBpbXBsZW1lbnRzIElB
cmd1bWVudE1hdGNoZXIgewotICAgIHByaXZhdGUgTW9ja0NhbGxiYWNrPD8+IGNhbGxiYWNrOwot
Ci0gICAgcHVibGljIFdyYXBzQ2FsbGJhY2soTW9ja0NhbGxiYWNrPD8+IGNhbGxiYWNrKSB7Ci0g
ICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgcHVibGljIGJvb2xlYW4gbWF0
Y2hlcyhPYmplY3QgYWN0dWFsKSB7Ci0gICAgICBpZiAoIShhY3R1YWwgaW5zdGFuY2VvZiBScGND
YWxsYmFjaykpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgUnBjQ2Fs
bGJhY2sgYWN0dWFsQ2FsbGJhY2sgPSAoUnBjQ2FsbGJhY2spYWN0dWFsOwotCi0gICAgICBjYWxs
YmFjay5yZXNldCgpOwotICAgICAgYWN0dWFsQ2FsbGJhY2sucnVuKG51bGwpOwotICAgICAgcmV0
dXJuIGNhbGxiYWNrLmlzQ2FsbGVkKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgYXBwZW5kVG8oU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewotICAgICAgYnVmZmVyLmFw
cGVuZCgid3JhcHNDYWxsYmFjayhtb2NrQ2FsbGJhY2spIik7Ci0gICAgfQotICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvU2luZ2xl
RmllbGRCdWlsZGVyVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL1NpbmdsZUZpZWxkQnVpbGRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNThiODAwMDdmOTRmOTVkZWJjNTAxZTQ0NTU3MTkyODU5YTBlOWJhZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMv
dGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvU2luZ2xlRmllbGRCdWlsZGVyVGVzdC5qYXZh
CisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBwcm90
b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLWltcG9ydCBwcm90b2J1
Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlc09yQnVpbGRlcjsKLQotaW1wb3J0
IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotLyoqCi0gKiBUZXN0cyBmb3Ige0BsaW5rIFNp
bmdsZUZpZWxkQnVpbGRlcn0uIFRoaXMgdGVzdHMgYmFzaWMgZnVuY3Rpb25hbGl0eS4KLSAqIE1v
cmUgZXh0ZW5zaXZlIHRlc3RpbmcgaXMgcHJvdmlkZWQgdmlhIG90aGVyIHRlc3RzIHRoYXQgZXhl
cmNpc2UgdGhlCi0gKiBidWlsZGVyLgotICoKLSAqIEBhdXRob3Igam9ucEBnb29nbGUuY29tIChK
b24gUGVybG93KQotICovCi1wdWJsaWMgY2xhc3MgU2luZ2xlRmllbGRCdWlsZGVyVGVzdCBleHRl
bmRzIFRlc3RDYXNlIHsKLQotICBwdWJsaWMgdm9pZCB0ZXN0QmFzaWNVc2VBbmRJbnZhbGlkYXRp
b25zKCkgewotICAgIFRlc3RVdGlsLk1vY2tCdWlsZGVyUGFyZW50IG1vY2tQYXJlbnQgPSBuZXcg
VGVzdFV0aWwuTW9ja0J1aWxkZXJQYXJlbnQoKTsKLSAgICBTaW5nbGVGaWVsZEJ1aWxkZXI8VGVz
dEFsbFR5cGVzLCBUZXN0QWxsVHlwZXMuQnVpbGRlciwKLSAgICAgICAgVGVzdEFsbFR5cGVzT3JC
dWlsZGVyPiBidWlsZGVyID0KLSAgICAgICAgbmV3IFNpbmdsZUZpZWxkQnVpbGRlcjxUZXN0QWxs
VHlwZXMsIFRlc3RBbGxUeXBlcy5CdWlsZGVyLAotICAgICAgICAgICAgVGVzdEFsbFR5cGVzT3JC
dWlsZGVyPigKLSAgICAgICAgICAgIFRlc3RBbGxUeXBlcy5nZXREZWZhdWx0SW5zdGFuY2UoKSwK
LSAgICAgICAgICAgIG1vY2tQYXJlbnQsCi0gICAgICAgICAgICBmYWxzZSk7Ci0gICAgYXNzZXJ0
U2FtZShUZXN0QWxsVHlwZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCksIGJ1aWxkZXIuZ2V0TWVzc2Fn
ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgp
LAotICAgICAgICBidWlsZGVyLmdldEJ1aWxkZXIoKS5idWlsZFBhcnRpYWwoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDAsIG1vY2tQYXJlbnQuZ2V0SW52YWxpZGF0aW9uQ291bnQoKSk7Ci0KLSAgICBi
dWlsZGVyLmdldEJ1aWxkZXIoKS5zZXRPcHRpb25hbEludDMyKDEwKTsKLSAgICBhc3NlcnRFcXVh
bHMoMCwgbW9ja1BhcmVudC5nZXRJbnZhbGlkYXRpb25Db3VudCgpKTsKLSAgICBUZXN0QWxsVHlw
ZXMgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTAsIG1lc3Nh
Z2UuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLQotICAgIC8vIFRlc3QgdGhhdCB3ZSByZWNlaXZlIGlu
dmFsaWRhdGlvbnMgbm93IHRoYXQgYnVpbGQgaGFzIGJlZW4gY2FsbGVkLgotICAgIGFzc2VydEVx
dWFscygwLCBtb2NrUGFyZW50LmdldEludmFsaWRhdGlvbkNvdW50KCkpOwotICAgIGJ1aWxkZXIu
Z2V0QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIoMjApOwotICAgIGFzc2VydEVxdWFscygxLCBt
b2NrUGFyZW50LmdldEludmFsaWRhdGlvbkNvdW50KCkpOwotCi0gICAgLy8gVGVzdCB0aGF0IHdl
IGRvbid0IGtlZXAgZ2V0dGluZyBpbnZhbGlkYXRpb25zIG9uIGV2ZXJ5IGNoYW5nZQotICAgIGJ1
aWxkZXIuZ2V0QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIoMzApOwotICAgIGFzc2VydEVxdWFs
cygxLCBtb2NrUGFyZW50LmdldEludmFsaWRhdGlvbkNvdW50KCkpOwotCi0gIH0KLQotICBwdWJs
aWMgdm9pZCB0ZXN0U2V0TWVzc2FnZSgpIHsKLSAgICBUZXN0VXRpbC5Nb2NrQnVpbGRlclBhcmVu
dCBtb2NrUGFyZW50ID0gbmV3IFRlc3RVdGlsLk1vY2tCdWlsZGVyUGFyZW50KCk7Ci0gICAgU2lu
Z2xlRmllbGRCdWlsZGVyPFRlc3RBbGxUeXBlcywgVGVzdEFsbFR5cGVzLkJ1aWxkZXIsCi0gICAg
ICAgIFRlc3RBbGxUeXBlc09yQnVpbGRlcj4gYnVpbGRlciA9Ci0gICAgICAgIG5ldyBTaW5nbGVG
aWVsZEJ1aWxkZXI8VGVzdEFsbFR5cGVzLCBUZXN0QWxsVHlwZXMuQnVpbGRlciwKLSAgICAgICAg
ICAgIFRlc3RBbGxUeXBlc09yQnVpbGRlcj4oCi0gICAgICAgICAgICBUZXN0QWxsVHlwZXMuZ2V0
RGVmYXVsdEluc3RhbmNlKCksCi0gICAgICAgICAgICBtb2NrUGFyZW50LAotICAgICAgICAgICAg
ZmFsc2UpOwotICAgIGJ1aWxkZXIuc2V0TWVzc2FnZShUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigp
LnNldE9wdGlvbmFsSW50MzIoMCkuYnVpbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIGJ1aWxk
ZXIuZ2V0TWVzc2FnZSgpLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0KLSAgICAvLyBVcGRhdGUgbWVz
c2FnZSB1c2luZyB0aGUgYnVpbGRlcgotICAgIGJ1aWxkZXIuZ2V0QnVpbGRlcigpLnNldE9wdGlv
bmFsSW50MzIoMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1vY2tQYXJlbnQuZ2V0SW52YWxpZGF0
aW9uQ291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxkZXIuZ2V0QnVpbGRlcigpLmdl
dE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxkZXIuZ2V0TWVzc2Fn
ZSgpLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYnVpbGRlci5idWlsZCgpOwotICAgIGJ1aWxk
ZXIuZ2V0QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIoMik7Ci0gICAgYXNzZXJ0RXF1YWxzKDIs
IGJ1aWxkZXIuZ2V0QnVpbGRlcigpLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDIsIGJ1aWxkZXIuZ2V0TWVzc2FnZSgpLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0KLSAgICAv
LyBNYWtlIHN1cmUgbWVzc2FnZSBzdGF5cyBjYWNoZWQKLSAgICBhc3NlcnRTYW1lKGJ1aWxkZXIu
Z2V0TWVzc2FnZSgpLCBidWlsZGVyLmdldE1lc3NhZ2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0Q2xlYXIoKSB7Ci0gICAgVGVzdFV0aWwuTW9ja0J1aWxkZXJQYXJlbnQgbW9ja1BhcmVu
dCA9IG5ldyBUZXN0VXRpbC5Nb2NrQnVpbGRlclBhcmVudCgpOwotICAgIFNpbmdsZUZpZWxkQnVp
bGRlcjxUZXN0QWxsVHlwZXMsIFRlc3RBbGxUeXBlcy5CdWlsZGVyLAotICAgICAgICBUZXN0QWxs
VHlwZXNPckJ1aWxkZXI+IGJ1aWxkZXIgPQotICAgICAgICBuZXcgU2luZ2xlRmllbGRCdWlsZGVy
PFRlc3RBbGxUeXBlcywgVGVzdEFsbFR5cGVzLkJ1aWxkZXIsCi0gICAgICAgICAgICBUZXN0QWxs
VHlwZXNPckJ1aWxkZXI+KAotICAgICAgICAgICAgVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0
YW5jZSgpLAotICAgICAgICAgICAgbW9ja1BhcmVudCwKLSAgICAgICAgICAgIGZhbHNlKTsKLSAg
ICBidWlsZGVyLnNldE1lc3NhZ2UoVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKS5zZXRPcHRpb25h
bEludDMyKDApLmJ1aWxkKCkpOwotICAgIGFzc2VydE5vdFNhbWUoVGVzdEFsbFR5cGVzLmdldERl
ZmF1bHRJbnN0YW5jZSgpLCBidWlsZGVyLmdldE1lc3NhZ2UoKSk7Ci0gICAgYnVpbGRlci5jbGVh
cigpOwotICAgIGFzc2VydFNhbWUoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpLCBi
dWlsZGVyLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICBidWlsZGVyLmdldEJ1aWxkZXIoKS5zZXRPcHRp
b25hbEludDMyKDEpOwotICAgIGFzc2VydE5vdFNhbWUoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJ
bnN0YW5jZSgpLCBidWlsZGVyLmdldE1lc3NhZ2UoKSk7Ci0gICAgYnVpbGRlci5jbGVhcigpOwot
ICAgIGFzc2VydFNhbWUoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpLCBidWlsZGVy
LmdldE1lc3NhZ2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TWVyZ2UoKSB7Ci0gICAg
VGVzdFV0aWwuTW9ja0J1aWxkZXJQYXJlbnQgbW9ja1BhcmVudCA9IG5ldyBUZXN0VXRpbC5Nb2Nr
QnVpbGRlclBhcmVudCgpOwotICAgIFNpbmdsZUZpZWxkQnVpbGRlcjxUZXN0QWxsVHlwZXMsIFRl
c3RBbGxUeXBlcy5CdWlsZGVyLAotICAgICAgICBUZXN0QWxsVHlwZXNPckJ1aWxkZXI+IGJ1aWxk
ZXIgPQotICAgICAgICBuZXcgU2luZ2xlRmllbGRCdWlsZGVyPFRlc3RBbGxUeXBlcywgVGVzdEFs
bFR5cGVzLkJ1aWxkZXIsCi0gICAgICAgICAgICBUZXN0QWxsVHlwZXNPckJ1aWxkZXI+KAotICAg
ICAgICAgICAgVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpLAotICAgICAgICAgICAg
bW9ja1BhcmVudCwKLSAgICAgICAgICAgIGZhbHNlKTsKLQotICAgIC8vIE1lcmdlIGludG8gZGVm
YXVsdCBmaWVsZC4KLSAgICBidWlsZGVyLm1lcmdlRnJvbShUZXN0QWxsVHlwZXMuZ2V0RGVmYXVs
dEluc3RhbmNlKCkpOwotICAgIGFzc2VydFNhbWUoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0
YW5jZSgpLCBidWlsZGVyLmdldE1lc3NhZ2UoKSk7Ci0KLSAgICAvLyBNZXJnZSBpbnRvIG5vbi1k
ZWZhdWx0IGZpZWxkIG9uIGV4aXN0aW5nIGJ1aWxkZXIuCi0gICAgYnVpbGRlci5nZXRCdWlsZGVy
KCkuc2V0T3B0aW9uYWxJbnQzMigyKTsKLSAgICBidWlsZGVyLm1lcmdlRnJvbShUZXN0QWxsVHlw
ZXMubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25hbERvdWJsZSg0LjApCi0gICAgICAg
IC5idWlsZFBhcnRpYWwoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGJ1aWxkZXIuZ2V0TWVzc2Fn
ZSgpLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQuMCwgYnVpbGRlci5n
ZXRNZXNzYWdlKCkuZ2V0T3B0aW9uYWxEb3VibGUoKSk7Ci0KLSAgICAvLyBNZXJnZSBpbnRvIG5v
bi1kZWZhdWx0IGZpZWxkIG9uIGV4aXN0aW5nIG1lc3NhZ2UKLSAgICBidWlsZGVyLnNldE1lc3Nh
Z2UoVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxJbnQzMigx
MCkKLSAgICAgICAgLmJ1aWxkUGFydGlhbCgpKTsKLSAgICBidWlsZGVyLm1lcmdlRnJvbShUZXN0
QWxsVHlwZXMubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRpb25hbERvdWJsZSg1LjApCi0g
ICAgICAgIC5idWlsZFBhcnRpYWwoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEwLCBidWlsZGVyLmdl
dE1lc3NhZ2UoKS5nZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydEVxdWFscyg1LjAsIGJ1
aWxkZXIuZ2V0TWVzc2FnZSgpLmdldE9wdGlvbmFsRG91YmxlKCkpOwotICB9Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvU21hbGxTb3J0
ZWRNYXBUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvU21hbGxTb3J0ZWRNYXBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGU5NmVjZDY1ZDU1MjM5MmQxN2Y0ZTkxNWYxYmRiZTBmMjQzZmQ3YzAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9j
b20vZ29vZ2xlL3Byb3RvYnVmL1NtYWxsU29ydGVkTWFwVGVzdC5qYXZhCisrKyAvZGV2L251bGwK
QEAgLTEsNDIzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1w
YWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVz
dENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5B
cnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJh
dG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBv
cnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLQotLyoqCi0gKiBA
YXV0aG9yIGRhcmlja0Bnb29nbGUuY29tIERhcmljayBUb25nCi0gKi8KLXB1YmxpYyBjbGFzcyBT
bWFsbFNvcnRlZE1hcFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gIC8vIGphdmEudXRpbC5BYnN0
cmFjdE1hcC5TaW1wbGVFbnRyeSBpcyBwcml2YXRlIGluIEpESyAxLjUuIFdlIHJlLWltcGxlbWVu
dCBpdAotICAvLyBoZXJlIGZvciBKREsgMS41IHVzZXJzLgotICBwcml2YXRlIHN0YXRpYyBjbGFz
cyBTaW1wbGVFbnRyeTxLLCBWPiBpbXBsZW1lbnRzIE1hcC5FbnRyeTxLLCBWPiB7Ci0gICAgcHJp
dmF0ZSBmaW5hbCBLIGtleTsKLSAgICBwcml2YXRlIFYgdmFsdWU7Ci0KLSAgICBTaW1wbGVFbnRy
eShLIGtleSwgViB2YWx1ZSkgewotICAgICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAgICB0aGlzLnZh
bHVlID0gdmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEsgZ2V0S2V5
KCkgewotICAgICAgcmV0dXJuIGtleTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgViBnZXRWYWx1ZSgpIHsKLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgViBzZXRWYWx1ZShWIHZhbHVlKSB7Ci0gICAgICBWIG9sZFZhbHVl
ID0gdGhpcy52YWx1ZTsKLSAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICAgIHJldHVybiBv
bGRWYWx1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGVxKE9iamVjdCBv
MSwgT2JqZWN0IG8yKSB7Ci0gICAgICByZXR1cm4gbzEgPT0gbnVsbCA/IG8yID09IG51bGwgOiBv
MS5lcXVhbHMobzIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFu
IGVxdWFscyhPYmplY3QgbykgewotICAgICAgaWYgKCEobyBpbnN0YW5jZW9mIE1hcC5FbnRyeSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIE1hcC5FbnRyeSBlID0gKE1hcC5FbnRyeSkg
bzsKLSAgICAgIHJldHVybiBlcShrZXksIGUuZ2V0S2V5KCkpICYmIGVxKHZhbHVlLCBlLmdldFZh
bHVlKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgaGFzaENvZGUo
KSB7Ci0gICAgICByZXR1cm4gKChrZXkgPT0gbnVsbCkgPyAwIDoga2V5Lmhhc2hDb2RlKCkpIF4K
LSAgICAgICAgICAoKHZhbHVlID09IG51bGwpID8gMCA6IHZhbHVlLmhhc2hDb2RlKCkpOwotICAg
IH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQdXRBbmRHZXRBcnJheUVudHJpZXNPbmx5KCkg
ewotICAgIHJ1blB1dEFuZEdldFRlc3QoMyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UHV0
QW5kR2V0T3ZlcmZsb3dFbnRyaWVzKCkgewotICAgIHJ1blB1dEFuZEdldFRlc3QoNik7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgcnVuUHV0QW5kR2V0VGVzdChpbnQgbnVtRWxlbWVudHMpIHsKLSAg
ICAvLyBUZXN0IHdpdGggZXZlbiBhbmQgb2RkIGFycmF5U2l6ZQotICAgIFNtYWxsU29ydGVkTWFw
PEludGVnZXIsIEludGVnZXI+IG1hcDEgPQotICAgICAgICBTbWFsbFNvcnRlZE1hcC5uZXdJbnN0
YW5jZUZvclRlc3QoMyk7Ci0gICAgU21hbGxTb3J0ZWRNYXA8SW50ZWdlciwgSW50ZWdlcj4gbWFw
MiA9Ci0gICAgICAgIFNtYWxsU29ydGVkTWFwLm5ld0luc3RhbmNlRm9yVGVzdCg0KTsKLSAgICBT
bWFsbFNvcnRlZE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBtYXAzID0KLSAgICAgICAgU21hbGxTb3J0
ZWRNYXAubmV3SW5zdGFuY2VGb3JUZXN0KDMpOwotICAgIFNtYWxsU29ydGVkTWFwPEludGVnZXIs
IEludGVnZXI+IG1hcDQgPQotICAgICAgICBTbWFsbFNvcnRlZE1hcC5uZXdJbnN0YW5jZUZvclRl
c3QoNCk7Ci0KLSAgICAvLyBUZXN0IHdpdGggcHV0cyBpbiBhc2NlbmRpbmcgb3JkZXIuCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7Ci0gICAgICBhc3NlcnROdWxs
KG1hcDEucHV0KGksIGkgKyAxKSk7Ci0gICAgICBhc3NlcnROdWxsKG1hcDIucHV0KGksIGkgKyAx
KSk7Ci0gICAgfQotICAgIC8vIFRlc3Qgd2l0aCBwdXRzIGluIGRlc2NlbmRpbmcgb3JkZXIuCi0g
ICAgZm9yIChpbnQgaSA9IG51bUVsZW1lbnRzIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgIGFz
c2VydE51bGwobWFwMy5wdXQoaSwgaSArIDEpKTsKLSAgICAgIGFzc2VydE51bGwobWFwNC5wdXQo
aSwgaSArIDEpKTsKLSAgICB9Ci0KLSAgICBhc3NlcnRFcXVhbHMoTWF0aC5taW4oMywgbnVtRWxl
bWVudHMpLCBtYXAxLmdldE51bUFycmF5RW50cmllcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoTWF0
aC5taW4oNCwgbnVtRWxlbWVudHMpLCBtYXAyLmdldE51bUFycmF5RW50cmllcygpKTsKLSAgICBh
c3NlcnRFcXVhbHMoTWF0aC5taW4oMywgbnVtRWxlbWVudHMpLCBtYXAzLmdldE51bUFycmF5RW50
cmllcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoTWF0aC5taW4oNCwgbnVtRWxlbWVudHMpLCBtYXA0
LmdldE51bUFycmF5RW50cmllcygpKTsKLQotICAgIExpc3Q8U21hbGxTb3J0ZWRNYXA8SW50ZWdl
ciwgSW50ZWdlcj4+IGFsbE1hcHMgPQotICAgICAgICBuZXcgQXJyYXlMaXN0PFNtYWxsU29ydGVk
TWFwPEludGVnZXIsIEludGVnZXI+PigpOwotICAgIGFsbE1hcHMuYWRkKG1hcDEpOwotICAgIGFs
bE1hcHMuYWRkKG1hcDIpOwotICAgIGFsbE1hcHMuYWRkKG1hcDMpOwotICAgIGFsbE1hcHMuYWRk
KG1hcDQpOwotCi0gICAgZm9yIChTbWFsbFNvcnRlZE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBtYXAg
OiBhbGxNYXBzKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMobnVtRWxlbWVudHMsIG1hcC5zaXplKCkp
OwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7Ci0gICAgICAg
IGFzc2VydEVxdWFscyhuZXcgSW50ZWdlcihpICsgMSksIG1hcC5nZXQoaSkpOwotICAgICAgfQot
ICAgIH0KLQotICAgIGFzc2VydEVxdWFscyhtYXAxLCBtYXAyKTsKLSAgICBhc3NlcnRFcXVhbHMo
bWFwMiwgbWFwMyk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1hcDMsIG1hcDQpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdFJlcGxhY2luZ1B1dCgpIHsKLSAgICBTbWFsbFNvcnRlZE1hcDxJbnRlZ2Vy
LCBJbnRlZ2VyPiBtYXAgPSBTbWFsbFNvcnRlZE1hcC5uZXdJbnN0YW5jZUZvclRlc3QoMyk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgIGFzc2VydE51bGwobWFwLnB1
dChpLCBpICsgMSkpOwotICAgICAgYXNzZXJ0TnVsbChtYXAucmVtb3ZlKGkgKyAxKSk7Ci0gICAg
fQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMo
bmV3IEludGVnZXIoaSArIDEpLCBtYXAucHV0KGksIGkgKyAyKSk7Ci0gICAgfQotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdFJlbW92ZSgpIHsKLSAgICBTbWFsbFNvcnRlZE1hcDxJbnRlZ2VyLCBJ
bnRlZ2VyPiBtYXAgPSBTbWFsbFNvcnRlZE1hcC5uZXdJbnN0YW5jZUZvclRlc3QoMyk7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgIGFzc2VydE51bGwobWFwLnB1dChp
LCBpICsgMSkpOwotICAgICAgYXNzZXJ0TnVsbChtYXAucmVtb3ZlKGkgKyAxKSk7Ci0gICAgfQot
Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1hcC5nZXROdW1BcnJheUVudHJpZXMoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDMsIG1hcC5nZXROdW1PdmVyZmxvd0VudHJpZXMoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDYsICBtYXAuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMobWFrZVNvcnRlZEtleVNldCgw
LCAxLCAyLCAzLCA0LCA1KSwgbWFwLmtleVNldCgpKTsKLQotICAgIGFzc2VydEVxdWFscyhuZXcg
SW50ZWdlcigyKSwgbWFwLnJlbW92ZSgxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1hcC5nZXRO
dW1BcnJheUVudHJpZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5nZXROdW1PdmVyZmxv
d0VudHJpZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDUsICBtYXAuc2l6ZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMobWFrZVNvcnRlZEtleVNldCgwLCAyLCAzLCA0LCA1KSwgbWFwLmtleVNldCgpKTsK
LQotICAgIGFzc2VydEVxdWFscyhuZXcgSW50ZWdlcig1KSwgbWFwLnJlbW92ZSg0KSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDMsIG1hcC5nZXROdW1BcnJheUVudHJpZXMoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDEsIG1hcC5nZXROdW1PdmVyZmxvd0VudHJpZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQs
ICBtYXAuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMobWFrZVNvcnRlZEtleVNldCgwLCAyLCAz
LCA1KSwgbWFwLmtleVNldCgpKTsKLQotICAgIGFzc2VydEVxdWFscyhuZXcgSW50ZWdlcig0KSwg
bWFwLnJlbW92ZSgzKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1hcC5nZXROdW1BcnJheUVudHJp
ZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1hcC5nZXROdW1PdmVyZmxvd0VudHJpZXMoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1hcC5zaXplKCkpOwotICAgIGFzc2VydEVxdWFscyhtYWtl
U29ydGVkS2V5U2V0KDAsIDIsIDUpLCBtYXAua2V5U2V0KCkpOwotCi0gICAgYXNzZXJ0TnVsbCht
YXAucmVtb3ZlKDMpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgbWFwLmdldE51bUFycmF5RW50cmll
cygpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWFwLmdldE51bU92ZXJmbG93RW50cmllcygpKTsK
LSAgICBhc3NlcnRFcXVhbHMoMywgbWFwLnNpemUoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMobmV3
IEludGVnZXIoMSksIG1hcC5yZW1vdmUoMCkpOwotICAgIGFzc2VydEVxdWFscygyLCBtYXAuZ2V0
TnVtQXJyYXlFbnRyaWVzKCkpOwotICAgIGFzc2VydEVxdWFscygwLCBtYXAuZ2V0TnVtT3ZlcmZs
b3dFbnRyaWVzKCkpOwotICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3RDbGVhcigpIHsKLSAgICBTbWFsbFNvcnRlZE1hcDxJbnRlZ2VyLCBJ
bnRlZ2VyPiBtYXAgPSBTbWFsbFNvcnRlZE1hcC5uZXdJbnN0YW5jZUZvclRlc3QoMyk7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgIGFzc2VydE51bGwobWFwLnB1dChp
LCBpICsgMSkpOwotICAgIH0KLSAgICBtYXAuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwg
bWFwLmdldE51bUFycmF5RW50cmllcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWFwLmdldE51
bU92ZXJmbG93RW50cmllcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWFwLnNpemUoKSk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0R2V0QXJyYXlFbnRyeUFuZE92ZXJmbG93RW50cmllcygp
IHsKLSAgICBTbWFsbFNvcnRlZE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBtYXAgPSBTbWFsbFNvcnRl
ZE1hcC5uZXdJbnN0YW5jZUZvclRlc3QoMyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBp
KyspIHsKLSAgICAgIGFzc2VydE51bGwobWFwLnB1dChpLCBpICsgMSkpOwotICAgIH0KLSAgICBh
c3NlcnRFcXVhbHMoMywgbWFwLmdldE51bUFycmF5RW50cmllcygpKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgTWFwLkVudHJ5PEludGVnZXIsIEludGVnZXI+IGVu
dHJ5ID0gbWFwLmdldEFycmF5RW50cnlBdChpKTsKLSAgICAgIGFzc2VydEVxdWFscyhuZXcgSW50
ZWdlcihpKSwgZW50cnkuZ2V0S2V5KCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBJbnRlZ2Vy
KGkgKyAxKSwgZW50cnkuZ2V0VmFsdWUoKSk7Ci0gICAgfQotICAgIEl0ZXJhdG9yPE1hcC5FbnRy
eTxJbnRlZ2VyLCBJbnRlZ2VyPj4gaXQgPQotICAgICAgICBtYXAuZ2V0T3ZlcmZsb3dFbnRyaWVz
KCkuaXRlcmF0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMzsgaSA8IDY7IGkrKykgewotICAgICAg
YXNzZXJ0VHJ1ZShpdC5oYXNOZXh0KCkpOwotICAgICAgTWFwLkVudHJ5PEludGVnZXIsIEludGVn
ZXI+IGVudHJ5ID0gaXQubmV4dCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBJbnRlZ2VyKGkp
LCBlbnRyeS5nZXRLZXkoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMobmV3IEludGVnZXIoaSArIDEp
LCBlbnRyeS5nZXRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgYXNzZXJ0RmFsc2UoaXQuaGFzTmV4dCgp
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFbnRyeVNldENvbnRhaW5zKCkgewotICAgIFNt
YWxsU29ydGVkTWFwPEludGVnZXIsIEludGVnZXI+IG1hcCA9IFNtYWxsU29ydGVkTWFwLm5ld0lu
c3RhbmNlRm9yVGVzdCgzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgewotICAg
ICAgYXNzZXJ0TnVsbChtYXAucHV0KGksIGkgKyAxKSk7Ci0gICAgfQotICAgIFNldDxNYXAuRW50
cnk8SW50ZWdlciwgSW50ZWdlcj4+IGVudHJ5U2V0ID0gbWFwLmVudHJ5U2V0KCk7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAg
ZW50cnlTZXQuY29udGFpbnMobmV3IFNpbXBsZUVudHJ5PEludGVnZXIsIEludGVnZXI+KGksIGkg
KyAxKSkpOwotICAgICAgYXNzZXJ0RmFsc2UoCi0gICAgICAgICAgZW50cnlTZXQuY29udGFpbnMo
bmV3IFNpbXBsZUVudHJ5PEludGVnZXIsIEludGVnZXI+KGksIGkpKSk7Ci0gICAgfQotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdEVudHJ5U2V0QWRkKCkgewotICAgIFNtYWxsU29ydGVkTWFwPElu
dGVnZXIsIEludGVnZXI+IG1hcCA9IFNtYWxsU29ydGVkTWFwLm5ld0luc3RhbmNlRm9yVGVzdCgz
KTsKLSAgICBTZXQ8TWFwLkVudHJ5PEludGVnZXIsIEludGVnZXI+PiBlbnRyeVNldCA9IG1hcC5l
bnRyeVNldCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgICBNYXAu
RW50cnk8SW50ZWdlciwgSW50ZWdlcj4gZW50cnkgPQotICAgICAgICAgIG5ldyBTaW1wbGVFbnRy
eTxJbnRlZ2VyLCBJbnRlZ2VyPihpLCBpICsgMSk7Ci0gICAgICBhc3NlcnRUcnVlKGVudHJ5U2V0
LmFkZChlbnRyeSkpOwotICAgICAgYXNzZXJ0RmFsc2UoZW50cnlTZXQuYWRkKGVudHJ5KSk7Ci0g
ICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgICBhc3NlcnRFcXVh
bHMobmV3IEludGVnZXIoaSArIDEpLCBtYXAuZ2V0KGkpKTsKLSAgICB9Ci0gICAgYXNzZXJ0RXF1
YWxzKDMsIG1hcC5nZXROdW1BcnJheUVudHJpZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1h
cC5nZXROdW1PdmVyZmxvd0VudHJpZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDYsIG1hcC5zaXpl
KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEVudHJ5U2V0UmVtb3ZlKCkgewotICAgIFNt
YWxsU29ydGVkTWFwPEludGVnZXIsIEludGVnZXI+IG1hcCA9IFNtYWxsU29ydGVkTWFwLm5ld0lu
c3RhbmNlRm9yVGVzdCgzKTsKLSAgICBTZXQ8TWFwLkVudHJ5PEludGVnZXIsIEludGVnZXI+PiBl
bnRyeVNldCA9IG1hcC5lbnRyeVNldCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsr
KSB7Ci0gICAgICBhc3NlcnROdWxsKG1hcC5wdXQoaSwgaSArIDEpKTsKLSAgICB9Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgIE1hcC5FbnRyeTxJbnRlZ2VyLCBJbnRl
Z2VyPiBlbnRyeSA9Ci0gICAgICAgICAgbmV3IFNpbXBsZUVudHJ5PEludGVnZXIsIEludGVnZXI+
KGksIGkgKyAxKTsKLSAgICAgIGFzc2VydFRydWUoZW50cnlTZXQucmVtb3ZlKGVudHJ5KSk7Ci0g
ICAgICBhc3NlcnRGYWxzZShlbnRyeVNldC5yZW1vdmUoZW50cnkpKTsKLSAgICB9Ci0gICAgYXNz
ZXJ0VHJ1ZShtYXAuaXNFbXB0eSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWFwLmdldE51bUFy
cmF5RW50cmllcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWFwLmdldE51bU92ZXJmbG93RW50
cmllcygpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWFwLnNpemUoKSk7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCB0ZXN0RW50cnlTZXRDbGVhcigpIHsKLSAgICBTbWFsbFNvcnRlZE1hcDxJbnRlZ2Vy
LCBJbnRlZ2VyPiBtYXAgPSBTbWFsbFNvcnRlZE1hcC5uZXdJbnN0YW5jZUZvclRlc3QoMyk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgIGFzc2VydE51bGwobWFwLnB1
dChpLCBpICsgMSkpOwotICAgIH0KLSAgICBtYXAuZW50cnlTZXQoKS5jbGVhcigpOwotICAgIGFz
c2VydFRydWUobWFwLmlzRW1wdHkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1hcC5nZXROdW1B
cnJheUVudHJpZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1hcC5nZXROdW1PdmVyZmxvd0Vu
dHJpZXMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1hcC5zaXplKCkpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdEVudHJ5U2V0SXRlcmF0b3JOZXh0KCkgewotICAgIFNtYWxsU29ydGVkTWFw
PEludGVnZXIsIEludGVnZXI+IG1hcCA9IFNtYWxsU29ydGVkTWFwLm5ld0luc3RhbmNlRm9yVGVz
dCgzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgewotICAgICAgYXNzZXJ0TnVs
bChtYXAucHV0KGksIGkgKyAxKSk7Ci0gICAgfQotICAgIEl0ZXJhdG9yPE1hcC5FbnRyeTxJbnRl
Z2VyLCBJbnRlZ2VyPj4gaXQgPSBtYXAuZW50cnlTZXQoKS5pdGVyYXRvcigpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgICBhc3NlcnRUcnVlKGl0Lmhhc05leHQoKSk7
Ci0gICAgICBNYXAuRW50cnk8SW50ZWdlciwgSW50ZWdlcj4gZW50cnkgPSBpdC5uZXh0KCk7Ci0g
ICAgICBhc3NlcnRFcXVhbHMobmV3IEludGVnZXIoaSksIGVudHJ5LmdldEtleSgpKTsKLSAgICAg
IGFzc2VydEVxdWFscyhuZXcgSW50ZWdlcihpICsgMSksIGVudHJ5LmdldFZhbHVlKCkpOwotICAg
IH0KLSAgICBhc3NlcnRGYWxzZShpdC5oYXNOZXh0KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdEVudHJ5U2V0SXRlcmF0b3JSZW1vdmUoKSB7Ci0gICAgU21hbGxTb3J0ZWRNYXA8SW50ZWdl
ciwgSW50ZWdlcj4gbWFwID0gU21hbGxTb3J0ZWRNYXAubmV3SW5zdGFuY2VGb3JUZXN0KDMpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgICBhc3NlcnROdWxsKG1hcC5w
dXQoaSwgaSArIDEpKTsKLSAgICB9Ci0gICAgSXRlcmF0b3I8TWFwLkVudHJ5PEludGVnZXIsIElu
dGVnZXI+PiBpdCA9IG1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KGkpKTsK
LSAgICAgIGl0Lm5leHQoKTsKLSAgICAgIGl0LnJlbW92ZSgpOwotICAgICAgYXNzZXJ0RmFsc2Uo
bWFwLmNvbnRhaW5zS2V5KGkpKTsKLSAgICAgIGFzc2VydEVxdWFscyg2IC0gaSAtIDEsIG1hcC5z
aXplKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNYXBFbnRyeU1vZGlmaWNh
dGlvbigpIHsKLSAgICBTbWFsbFNvcnRlZE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBtYXAgPSBTbWFs
bFNvcnRlZE1hcC5uZXdJbnN0YW5jZUZvclRlc3QoMyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA2OyBpKyspIHsKLSAgICAgIGFzc2VydE51bGwobWFwLnB1dChpLCBpICsgMSkpOwotICAgIH0K
LSAgICBJdGVyYXRvcjxNYXAuRW50cnk8SW50ZWdlciwgSW50ZWdlcj4+IGl0ID0gbWFwLmVudHJ5
U2V0KCkuaXRlcmF0b3IoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgewotICAg
ICAgTWFwLkVudHJ5PEludGVnZXIsIEludGVnZXI+IGVudHJ5ID0gaXQubmV4dCgpOwotICAgICAg
ZW50cnkuc2V0VmFsdWUoaSArIDIzKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2
OyBpKyspIHsKLSAgICAgIGFzc2VydEVxdWFscyhuZXcgSW50ZWdlcihpICsgMjMpLCBtYXAuZ2V0
KGkpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TWFrZUltbXV0YWJsZSgpIHsK
LSAgICBTbWFsbFNvcnRlZE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBtYXAgPSBTbWFsbFNvcnRlZE1h
cC5uZXdJbnN0YW5jZUZvclRlc3QoMyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKysp
IHsKLSAgICAgIGFzc2VydE51bGwobWFwLnB1dChpLCBpICsgMSkpOwotICAgIH0KLSAgICBtYXAu
bWFrZUltbXV0YWJsZSgpOwotICAgIGFzc2VydEVxdWFscyhuZXcgSW50ZWdlcigxKSwgbWFwLmdl
dCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDYsIG1hcC5zaXplKCkpOwotCi0gICAgdHJ5IHsKLSAg
ICAgIG1hcC5wdXQoMjMsIDIzKTsKLSAgICAgIGZhaWwoIkV4cGVjdGVkIFVuc3VwcG9ydGVkT3Bl
cmF0aW9uRXhjZXB0aW9uIik7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNl
cHRpb24gZXhwZWN0ZWQpIHsKLSAgICB9Ci0KLSAgICBNYXA8SW50ZWdlciwgSW50ZWdlcj4gb3Ro
ZXIgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigpOwotICAgIG90aGVyLnB1dCgyMywg
MjMpOwotICAgIHRyeSB7Ci0gICAgICBtYXAucHV0QWxsKG90aGVyKTsKLSAgICAgIGZhaWwoIkV4
cGVjdGVkIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIik7Ci0gICAgfSBjYXRjaCAoVW5z
dXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZXhwZWN0ZWQpIHsKLSAgICB9Ci0KLSAgICB0cnkg
ewotICAgICAgbWFwLnJlbW92ZSgwKTsKLSAgICAgIGZhaWwoIkV4cGVjdGVkIFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9uIik7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25F
eGNlcHRpb24gZXhwZWN0ZWQpIHsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgbWFwLmNsZWFy
KCk7Ci0gICAgICBmYWlsKCJFeHBlY3RlZCBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIp
OwotICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGV4cGVjdGVkKSB7
Ci0gICAgfQotCi0gICAgU2V0PE1hcC5FbnRyeTxJbnRlZ2VyLCBJbnRlZ2VyPj4gZW50cnlTZXQg
PSBtYXAuZW50cnlTZXQoKTsKLSAgICB0cnkgewotICAgICAgZW50cnlTZXQuY2xlYXIoKTsKLSAg
ICAgIGZhaWwoIkV4cGVjdGVkIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIik7Ci0gICAg
fSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZXhwZWN0ZWQpIHsKLSAgICB9
Ci0KLSAgICBJdGVyYXRvcjxNYXAuRW50cnk8SW50ZWdlciwgSW50ZWdlcj4+IGl0ID0gZW50cnlT
ZXQuaXRlcmF0b3IoKTsKLSAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICBNYXAuRW50
cnk8SW50ZWdlciwgSW50ZWdlcj4gZW50cnkgPSBpdC5uZXh0KCk7Ci0gICAgICB0cnkgewotICAg
ICAgICBlbnRyeS5zZXRWYWx1ZSgwKTsKLSAgICAgICAgZmFpbCgiRXhwZWN0ZWQgVW5zdXBwb3J0
ZWRPcGVyYXRpb25FeGNlcHRpb24iKTsKLSAgICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0
aW9uRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICB9Ci0gICAgICB0cnkgewotICAgICAgICBp
dC5yZW1vdmUoKTsKLSAgICAgICAgZmFpbCgiRXhwZWN0ZWQgVW5zdXBwb3J0ZWRPcGVyYXRpb25F
eGNlcHRpb24iKTsKLSAgICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u
IGV4cGVjdGVkKSB7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU2V0PEludGVnZXI+IGtleVNldCA9
IG1hcC5rZXlTZXQoKTsKLSAgICB0cnkgewotICAgICAga2V5U2V0LmNsZWFyKCk7Ci0gICAgICBm
YWlsKCJFeHBlY3RlZCBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIpOwotICAgIH0gY2F0
Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgfQotCi0g
ICAgSXRlcmF0b3I8SW50ZWdlcj4ga2V5cyA9IGtleVNldC5pdGVyYXRvcigpOwotICAgIHdoaWxl
IChrZXlzLmhhc05leHQoKSkgewotICAgICAgSW50ZWdlciBrZXkgPSBrZXlzLm5leHQoKTsKLSAg
ICAgIHRyeSB7Ci0gICAgICAgIGtleVNldC5yZW1vdmUoa2V5KTsKLSAgICAgICAgZmFpbCgiRXhw
ZWN0ZWQgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iKTsKLSAgICAgIH0gY2F0Y2ggKFVu
c3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICB9Ci0gICAgICB0
cnkgewotICAgICAgICBrZXlzLnJlbW92ZSgpOwotICAgICAgICBmYWlsKCJFeHBlY3RlZCBVbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIpOwotICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRP
cGVyYXRpb25FeGNlcHRpb24gZXhwZWN0ZWQpIHsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIFNldDxJbnRlZ2VyPiBtYWtlU29ydGVkS2V5U2V0KEludGVnZXIuLi4ga2V5cykgewot
ICAgIHJldHVybiBuZXcgVHJlZVNldDxJbnRlZ2VyPihBcnJheXMuPEludGVnZXI+YXNMaXN0KGtl
eXMpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL1Rlc3RCYWRJZGVudGlmaWVycy5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3Qv
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1Rlc3RCYWRJZGVudGlmaWVycy5qYXZhCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzYwZmUwZTFiN2M2ZjAzMzNlNzIyMTRmMmJmN2VlMWYz
NWEyNDVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9UZXN0QmFkSWRlbnRpZmll
cnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9y
dCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGVzdHMgdGhhdCBwcm90bzIg
YXBpIGdlbmVyYXRpb24gZG9lc24ndCBjYXVzZSBjb21waWxlIGVycm9ycyB3aGVuCi0gKiBjb21w
aWxpbmcgcHJvdG9jb2wgYnVmZmVycyB0aGF0IGhhdmUgbmFtZXMgdGhhdCB3b3VsZCBvdGhlcndp
c2UgY29uZmxpY3QKLSAqIGlmIG5vdCBmdWxseSBxdWFsaWZpZWQgKGxpa2UgQERlcHJlY2F0ZWQg
YW5kIEBPdmVycmlkZSkuCi0gKgotICogQGF1dGhvciBqb25wQGdvb2dsZS5jb20gKEpvbiBQZXJs
b3cpCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0QmFkSWRlbnRpZmllcnMgZXh0ZW5kcyBUZXN0Q2Fz
ZSB7Ci0KLSAgcHVibGljIHZvaWQgdGVzdENvbXBpbGF0aW9uKCkgewotICAgIC8vIElmIHRoaXMg
Y29tcGlsZXMsIGl0IG1lYW5zIHRoZSBnZW5lcmF0aW9uIHdhcyBjb3JyZWN0LgotICAgIFRlc3RC
YWRJZGVudGlmaWVyc1Byb3RvLkRlcHJlY2F0ZWQubmV3QnVpbGRlcigpOwotICAgIFRlc3RCYWRJ
ZGVudGlmaWVyc1Byb3RvLk92ZXJyaWRlLm5ld0J1aWxkZXIoKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RHZXREZXNjcmlwdG9yKCkgewotICAgIERlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9y
IGZpbGVEZXNjcmlwdG9yID0KLSAgICAgICAgVGVzdEJhZElkZW50aWZpZXJzUHJvdG8uZ2V0RGVz
Y3JpcHRvcigpOwotICAgIFN0cmluZyBkZXNjcmlwdG9yRmllbGQgPSBUZXN0QmFkSWRlbnRpZmll
cnNQcm90by5EZXNjcmlwdG9yCi0gICAgICAgIC5nZXREZWZhdWx0SW5zdGFuY2UoKS5nZXREZXNj
cmlwdG9yKCk7Ci0gICAgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciBwcm90b0Rlc2NyaXB0b3IgPSBU
ZXN0QmFkSWRlbnRpZmllcnNQcm90by5EZXNjcmlwdG9yCi0gICAgICAgIC5nZXREZWZhdWx0SW5z
dGFuY2UoKS5nZXREZXNjcmlwdG9yRm9yVHlwZSgpOwotICAgIFN0cmluZyBuZXN0ZWREZXNjcmlw
dG9yRmllbGQgPSBUZXN0QmFkSWRlbnRpZmllcnNQcm90by5EZXNjcmlwdG9yCi0gICAgICAgIC5O
ZXN0ZWREZXNjcmlwdG9yLmdldERlZmF1bHRJbnN0YW5jZSgpLmdldERlc2NyaXB0b3IoKTsKLSAg
ICBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIG5lc3RlZFByb3RvRGVzY3JpcHRvciA9IFRlc3RCYWRJ
ZGVudGlmaWVyc1Byb3RvCi0gICAgICAgIC5EZXNjcmlwdG9yLk5lc3RlZERlc2NyaXB0b3IuZ2V0
RGVmYXVsdEluc3RhbmNlKCkKLSAgICAgICAgLmdldERlc2NyaXB0b3JGb3JUeXBlKCk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmxpY3RpbmdGaWVsZE5hbWVzKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgVGVzdEJhZElkZW50aWZpZXJzUHJvdG8uVGVzdENvbmZsaWN0aW5nRmllbGRO
YW1lcyBtZXNzYWdlID0KLSAgICAgICAgVGVzdEJhZElkZW50aWZpZXJzUHJvdG8uVGVzdENvbmZs
aWN0aW5nRmllbGROYW1lcy5nZXREZWZhdWx0SW5zdGFuY2UoKTsKLSAgICAvLyBNYWtlIHN1cmUg
Z2VuZXJhdGVkIGFjY2Vzc29ycyBhcmUgcHJvcGVybHkgbmFtZWQuCi0gICAgYXNzZXJ0RXF1YWxz
KDAsIG1lc3NhZ2UuZ2V0SW50MzJGaWVsZDFDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwg
bWVzc2FnZS5nZXRFbnVtRmllbGQyQ291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3Nh
Z2UuZ2V0U3RyaW5nRmllbGQzQ291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2Uu
Z2V0Qnl0ZXNGaWVsZDRDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRN
ZXNzYWdlRmllbGQ1Q291bnQoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRJ
bnQzMkZpZWxkQ291bnQxMSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFbnVt
RmllbGRDb3VudDEyKCkuZ2V0TnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFscygiIiwgbWVzc2Fn
ZS5nZXRTdHJpbmdGaWVsZENvdW50MTMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEJ5dGVTdHJpbmcu
RU1QVFksIG1lc3NhZ2UuZ2V0Qnl0ZXNGaWVsZENvdW50MTQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDAsIG1lc3NhZ2UuZ2V0TWVzc2FnZUZpZWxkQ291bnQxNSgpLmdldFNlcmlhbGl6ZWRTaXplKCkp
OwotCi0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0SW50MzJGaWVsZDIxQ291bnQoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RW51bUZpZWxkMjJDb3VudCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRTdHJpbmdGaWVsZDIzQ291bnQoKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0Qnl0ZXNGaWVsZDI0Q291bnQoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0TWVzc2FnZUZpZWxkMjVDb3VudCgpKTsKLQotICAgIGFz
c2VydEVxdWFscygwLCBtZXNzYWdlLmdldEludDMyRmllbGQxTGlzdCgpLnNpemUoKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0SW50MzJGaWVsZExpc3QzMSgpKTsKLQotICAgIGFz
c2VydEVxdWFscygwLCBtZXNzYWdlLmdldEludDY0RmllbGRDb3VudCgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoMEwsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKAotICAgICAgICBUZXN0QmFkSWRlbnRpZmll
cnNQcm90by5UZXN0Q29uZmxpY3RpbmdGaWVsZE5hbWVzLmludDY0RmllbGRDb3VudCkubG9uZ1Zh
bHVlKCkpOwotICAgIGFzc2VydEVxdWFscygwTCwgbWVzc2FnZS5nZXRFeHRlbnNpb24oCi0gICAg
ICAgIFRlc3RCYWRJZGVudGlmaWVyc1Byb3RvLlRlc3RDb25mbGljdGluZ0ZpZWxkTmFtZXMuaW50
NjRGaWVsZExpc3QpLmxvbmdWYWx1ZSgpKTsKLQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29y
ZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVGVzdFV0aWwuamF2YSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9j
b3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9UZXN0VXRpbC5qYXZhCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGIyYTc2ZDkyNWUwN2I3ZWI1MjU5OTAzNmE0YjM0
NGE5NDFmNDUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9UZXN0VXRpbC5qYXZh
CisrKyAvZGV2L251bGwKQEAgLTEsMzg1NyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgc3Rh
dGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLmRlZmF1bHRCb29sRXh0ZW5zaW9u
TGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuZGVm
YXVsdEJ5dGVzRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1
Zi5Vbml0dGVzdExpdGUuZGVmYXVsdENvcmRFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBj
b20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZhdWx0RG91YmxlRXh0ZW5zaW9uTGl0
ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuZGVmYXVs
dEZpeGVkMzJFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVm
LlVuaXR0ZXN0TGl0ZS5kZWZhdWx0Rml4ZWQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGlj
IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLmRlZmF1bHRGbG9hdEV4dGVuc2lvbkxp
dGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLmRlZmF1
bHRGb3JlaWduRW51bUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJv
dG9idWYuVW5pdHRlc3RMaXRlLmRlZmF1bHRJbXBvcnRFbnVtRXh0ZW5zaW9uTGl0ZTsKLWltcG9y
dCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuZGVmYXVsdEludDMyRXh0
ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExp
dGUuZGVmYXVsdEludDY0RXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5w
cm90b2J1Zi5Vbml0dGVzdExpdGUuZGVmYXVsdE5lc3RlZEVudW1FeHRlbnNpb25MaXRlOwotaW1w
b3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZhdWx0U2ZpeGVk
MzJFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0
ZXN0TGl0ZS5kZWZhdWx0U2ZpeGVkNjRFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20u
Z29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZhdWx0U2ludDMyRXh0ZW5zaW9uTGl0ZTsK
LWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuZGVmYXVsdFNp
bnQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5p
dHRlc3RMaXRlLmRlZmF1bHRTdHJpbmdFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20u
Z29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZhdWx0U3RyaW5nUGllY2VFeHRlbnNpb25M
aXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZh
dWx0VWludDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1
Zi5Vbml0dGVzdExpdGUuZGVmYXVsdFVpbnQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGlj
IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9uZW9mQnl0ZXNFeHRlbnNpb25MaXRl
OwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5vbmVvZk5l
c3RlZE1lc3NhZ2VFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3Rv
YnVmLlVuaXR0ZXN0TGl0ZS5vbmVvZlN0cmluZ0V4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGlj
IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9uZW9mVWludDMyRXh0ZW5zaW9uTGl0
ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9u
YWxCb29sRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5V
bml0dGVzdExpdGUub3B0aW9uYWxCeXRlc0V4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNv
bS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsQ29yZEV4dGVuc2lvbkxpdGU7
Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFs
RG91YmxlRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5V
bml0dGVzdExpdGUub3B0aW9uYWxGaXhlZDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMg
Y29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9uYWxGaXhlZDY0RXh0ZW5zaW9u
TGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0
aW9uYWxGbG9hdEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9i
dWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsRm9yZWlnbkVudW1FeHRlbnNpb25MaXRlOwotaW1wb3J0
IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5vcHRpb25hbEZvcmVpZ25N
ZXNzYWdlRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5V
bml0dGVzdExpdGUub3B0aW9uYWxHcm91cEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNv
bS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW1wb3J0RW51bUV4dGVuc2lv
bkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9w
dGlvbmFsSW1wb3J0TWVzc2FnZUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29n
bGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW50MzJFeHRlbnNpb25MaXRlOwotaW1w
b3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5vcHRpb25hbEludDY0
RXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVz
dExpdGUub3B0aW9uYWxMYXp5TWVzc2FnZUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNv
bS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsTmVzdGVkRW51bUV4dGVuc2lv
bkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9w
dGlvbmFsTmVzdGVkTWVzc2FnZUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29n
bGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsUHVibGljSW1wb3J0TWVzc2FnZUV4dGVu
c2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRl
Lm9wdGlvbmFsU2ZpeGVkMzJFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xl
LnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5vcHRpb25hbFNmaXhlZDY0RXh0ZW5zaW9uTGl0ZTsKLWlt
cG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9uYWxTaW50
MzJFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0
ZXN0TGl0ZS5vcHRpb25hbFNpbnQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5n
b29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsU3RyaW5nRXh0ZW5zaW9uTGl0ZTsK
LWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9uYWxT
dHJpbmdQaWVjZUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9i
dWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsVWludDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0
aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9uYWxVaW50NjRFeHRlbnNp
b25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5w
YWNrZWRCb29sRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1
Zi5Vbml0dGVzdExpdGUucGFja2VkRG91YmxlRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMg
Y29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucGFja2VkRW51bUV4dGVuc2lvbkxpdGU7
Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnBhY2tlZEZp
eGVkMzJFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVu
aXR0ZXN0TGl0ZS5wYWNrZWRGaXhlZDY0RXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29t
Lmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucGFja2VkRmxvYXRFeHRlbnNpb25MaXRlOwot
aW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5wYWNrZWRJbnQz
MkV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRl
c3RMaXRlLnBhY2tlZEludDY0RXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2ds
ZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucGFja2VkU2ZpeGVkMzJFeHRlbnNpb25MaXRlOwotaW1w
b3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5wYWNrZWRTZml4ZWQ2
NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRl
c3RMaXRlLnBhY2tlZFNpbnQzMkV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29n
bGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnBhY2tlZFNpbnQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBv
cnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnBhY2tlZFVpbnQzMkV4
dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RM
aXRlLnBhY2tlZFVpbnQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUu
cHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkQm9vbEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQg
c3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkQnl0ZXNFeHRl
bnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0
ZS5yZXBlYXRlZENvcmRFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnBy
b3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZERvdWJsZUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQg
c3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkRml4ZWQzMkV4
dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RM
aXRlLnJlcGVhdGVkRml4ZWQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29n
bGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkRmxvYXRFeHRlbnNpb25MaXRlOwotaW1w
b3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZEZvcmVp
Z25FbnVtRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5V
bml0dGVzdExpdGUucmVwZWF0ZWRGb3JlaWduTWVzc2FnZUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQg
c3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkR3JvdXBFeHRl
bnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0
ZS5yZXBlYXRlZEltcG9ydEVudW1FeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29v
Z2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZEltcG9ydE1lc3NhZ2VFeHRlbnNpb25M
aXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBl
YXRlZEludDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1
Zi5Vbml0dGVzdExpdGUucmVwZWF0ZWRJbnQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGlj
IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkTGF6eU1lc3NhZ2VFeHRl
bnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0
ZS5yZXBlYXRlZE5lc3RlZEVudW1FeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29v
Z2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZE5lc3RlZE1lc3NhZ2VFeHRlbnNpb25M
aXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBl
YXRlZFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90
b2J1Zi5Vbml0dGVzdExpdGUucmVwZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQg
c3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkU2ludDMyRXh0
ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExp
dGUucmVwZWF0ZWRTaW50NjRFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xl
LnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZFN0cmluZ0V4dGVuc2lvbkxpdGU7Ci1pbXBv
cnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkU3RyaW5n
UGllY2VFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVu
aXR0ZXN0TGl0ZS5yZXBlYXRlZFVpbnQzMkV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNv
bS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkVWludDY0RXh0ZW5zaW9uTGl0
ZTsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5PcHRpb25h
bEdyb3VwX2V4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRl
c3RQcm90by5SZXBlYXRlZEdyb3VwX2V4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZf
dW5pdHRlc3QuVW5pdHRlc3RQcm90by5kZWZhdWx0Qm9vbEV4dGVuc2lvbjsKLWltcG9ydCBzdGF0
aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5kZWZhdWx0Qnl0ZXNFeHRlbnNpb247
Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uZGVmYXVsdENv
cmRFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJv
dG8uZGVmYXVsdERvdWJsZUV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRl
c3QuVW5pdHRlc3RQcm90by5kZWZhdWx0Rml4ZWQzMkV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMg
cHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5kZWZhdWx0Rml4ZWQ2NEV4dGVuc2lvbjsK
LWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5kZWZhdWx0Rmxv
YXRFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJv
dG8uZGVmYXVsdEZvcmVpZ25FbnVtRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91
bml0dGVzdC5Vbml0dGVzdFByb3RvLmRlZmF1bHRJbXBvcnRFbnVtRXh0ZW5zaW9uOwotLy8gVGhl
IHN0YXRpYyBpbXBvcnRzIGFyZSB0byBhdm9pZCAxMDArIGNoYXIgbGluZXMuICBUaGUgZm9sbG93
aW5nIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0bwotLy8gaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91
bml0dGVzdC5Vbml0dGVzdFByb3RvLio7Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0
LlVuaXR0ZXN0UHJvdG8uZGVmYXVsdEludDMyRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90
b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLmRlZmF1bHRJbnQ2NEV4dGVuc2lvbjsKLWltcG9y
dCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5kZWZhdWx0TmVzdGVkRW51
bUV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90
by5kZWZhdWx0U2ZpeGVkMzJFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8uZGVmYXVsdFNmaXhlZDY0RXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRp
YyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLmRlZmF1bHRTaW50MzJFeHRlbnNpb247
Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uZGVmYXVsdFNp
bnQ2NEV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQ
cm90by5kZWZhdWx0U3RyaW5nRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0
dGVzdC5Vbml0dGVzdFByb3RvLmRlZmF1bHRTdHJpbmdQaWVjZUV4dGVuc2lvbjsKLWltcG9ydCBz
dGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5kZWZhdWx0VWludDMyRXh0ZW5z
aW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLmRlZmF1
bHRVaW50NjRFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0
ZXN0UHJvdG8ub25lb2ZCeXRlc0V4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5p
dHRlc3QuVW5pdHRlc3RQcm90by5vbmVvZk5lc3RlZE1lc3NhZ2VFeHRlbnNpb247Ci1pbXBvcnQg
c3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ub25lb2ZTdHJpbmdFeHRlbnNp
b247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ub25lb2ZV
aW50MzJFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0
UHJvdG8ub3B0aW9uYWxCb29sRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0
dGVzdC5Vbml0dGVzdFByb3RvLm9wdGlvbmFsQnl0ZXNFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGlj
IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ub3B0aW9uYWxDb3JkRXh0ZW5zaW9uOwot
aW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLm9wdGlvbmFsRG91
YmxlRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFBy
b3RvLm9wdGlvbmFsRml4ZWQzMkV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5p
dHRlc3QuVW5pdHRlc3RQcm90by5vcHRpb25hbEZpeGVkNjRFeHRlbnNpb247Ci1pbXBvcnQgc3Rh
dGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ub3B0aW9uYWxGbG9hdEV4dGVuc2lv
bjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5vcHRpb25h
bEZvcmVpZ25FbnVtRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5V
bml0dGVzdFByb3RvLm9wdGlvbmFsRm9yZWlnbk1lc3NhZ2VFeHRlbnNpb247Ci1pbXBvcnQgc3Rh
dGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ub3B0aW9uYWxHcm91cEV4dGVuc2lv
bjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5vcHRpb25h
bEltcG9ydEVudW1FeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVu
aXR0ZXN0UHJvdG8ub3B0aW9uYWxJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRp
YyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLm9wdGlvbmFsSW50MzJFeHRlbnNpb247
Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ub3B0aW9uYWxJ
bnQ2NEV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQ
cm90by5vcHRpb25hbExhenlNZXNzYWdlRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1
Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLm9wdGlvbmFsTmVzdGVkRW51bUV4dGVuc2lvbjsKLWlt
cG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5vcHRpb25hbE5lc3Rl
ZE1lc3NhZ2VFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0
ZXN0UHJvdG8ub3B0aW9uYWxQdWJsaWNJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uOwotaW1wb3J0IHN0
YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLm9wdGlvbmFsU2ZpeGVkMzJFeHRl
bnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ub3B0
aW9uYWxTZml4ZWQ2NEV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3Qu
VW5pdHRlc3RQcm90by5vcHRpb25hbFNpbnQzMkV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJv
dG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5vcHRpb25hbFNpbnQ2NEV4dGVuc2lvbjsKLWlt
cG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5vcHRpb25hbFN0cmlu
Z0V4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90
by5vcHRpb25hbFN0cmluZ1BpZWNlRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91
bml0dGVzdC5Vbml0dGVzdFByb3RvLm9wdGlvbmFsVWludDMyRXh0ZW5zaW9uOwotaW1wb3J0IHN0
YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLm9wdGlvbmFsVWludDY0RXh0ZW5z
aW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLnBhY2tl
ZEJvb2xFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0
UHJvdG8ucGFja2VkRG91YmxlRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0
dGVzdC5Vbml0dGVzdFByb3RvLnBhY2tlZEVudW1FeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHBy
b3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ucGFja2VkRml4ZWQzMkV4dGVuc2lvbjsKLWlt
cG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5wYWNrZWRGaXhlZDY0
RXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3Rv
LnBhY2tlZEZsb2F0RXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5V
bml0dGVzdFByb3RvLnBhY2tlZEludDMyRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1
Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLnBhY2tlZEludDY0RXh0ZW5zaW9uOwotaW1wb3J0IHN0
YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLnBhY2tlZFNmaXhlZDMyRXh0ZW5z
aW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLnBhY2tl
ZFNmaXhlZDY0RXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0
dGVzdFByb3RvLnBhY2tlZFNpbnQzMkV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZf
dW5pdHRlc3QuVW5pdHRlc3RQcm90by5wYWNrZWRTaW50NjRFeHRlbnNpb247Ci1pbXBvcnQgc3Rh
dGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ucGFja2VkVWludDMyRXh0ZW5zaW9u
OwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLnBhY2tlZFVp
bnQ2NEV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQ
cm90by5yZXBlYXRlZEJvb2xFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8ucmVwZWF0ZWRCeXRlc0V4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMg
cHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5yZXBlYXRlZENvcmRFeHRlbnNpb247Ci1p
bXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ucmVwZWF0ZWREb3Vi
bGVFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJv
dG8ucmVwZWF0ZWRGaXhlZDMyRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0
dGVzdC5Vbml0dGVzdFByb3RvLnJlcGVhdGVkRml4ZWQ2NEV4dGVuc2lvbjsKLWltcG9ydCBzdGF0
aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5yZXBlYXRlZEZsb2F0RXh0ZW5zaW9u
OwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLnJlcGVhdGVk
Rm9yZWlnbkVudW1FeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVu
aXR0ZXN0UHJvdG8ucmVwZWF0ZWRGb3JlaWduTWVzc2FnZUV4dGVuc2lvbjsKLWltcG9ydCBzdGF0
aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5yZXBlYXRlZEdyb3VwRXh0ZW5zaW9u
OwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLnJlcGVhdGVk
SW1wb3J0RW51bUV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5p
dHRlc3RQcm90by5yZXBlYXRlZEltcG9ydE1lc3NhZ2VFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGlj
IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ucmVwZWF0ZWRJbnQzMkV4dGVuc2lvbjsK
LWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5yZXBlYXRlZElu
dDY0RXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFBy
b3RvLnJlcGVhdGVkTGF6eU1lc3NhZ2VFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVm
X3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ucmVwZWF0ZWROZXN0ZWRFbnVtRXh0ZW5zaW9uOwotaW1w
b3J0IHN0YXRpYyBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLnJlcGVhdGVkTmVzdGVk
TWVzc2FnZUV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRl
c3RQcm90by5yZXBlYXRlZFNmaXhlZDMyRXh0ZW5zaW9uOwotaW1wb3J0IHN0YXRpYyBwcm90b2J1
Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLnJlcGVhdGVkU2ZpeGVkNjRFeHRlbnNpb247Ci1pbXBv
cnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ucmVwZWF0ZWRTaW50MzJF
eHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8u
cmVwZWF0ZWRTaW50NjRFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHByb3RvYnVmX3VuaXR0ZXN0
LlVuaXR0ZXN0UHJvdG8ucmVwZWF0ZWRTdHJpbmdFeHRlbnNpb247Ci1pbXBvcnQgc3RhdGljIHBy
b3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8ucmVwZWF0ZWRTdHJpbmdQaWVjZUV4dGVuc2lv
bjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5yZXBlYXRl
ZFVpbnQzMkV4dGVuc2lvbjsKLWltcG9ydCBzdGF0aWMgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRl
c3RQcm90by5yZXBlYXRlZFVpbnQ2NEV4dGVuc2lvbjsKLQotaW1wb3J0IGNvbS5nb29nbGUucHJv
dG9idWYuVW5pdHRlc3RJbXBvcnRMaXRlLkltcG9ydEVudW1MaXRlOwotaW1wb3J0IGNvbS5nb29n
bGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLkZvcmVpZ25FbnVtTGl0ZTsKLWltcG9ydCBjb20uZ29v
Z2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5UZXN0QWxsRXh0ZW5zaW9uc0xpdGVPckJ1aWxkZXI7
Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuVGVzdEFsbFR5cGVzTGl0
ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5UZXN0UGFja2VkRXh0
ZW5zaW9uc0xpdGU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi50ZXN0LlVuaXR0ZXN0SW1w
b3J0LkltcG9ydEVudW07Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi50ZXN0LlVuaXR0ZXN0
SW1wb3J0LkltcG9ydE1lc3NhZ2U7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi50ZXN0LlVu
aXR0ZXN0SW1wb3J0UHVibGljLlB1YmxpY0ltcG9ydE1lc3NhZ2U7Ci1pbXBvcnQgcHJvdG9idWZf
dW5pdHRlc3QuVW5pdHRlc3RQcm90bzsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVz
dFByb3RvLkZvcmVpZ25FbnVtOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJv
dG8uRm9yZWlnbk1lc3NhZ2U7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90
by5UZXN0QWxsRXh0ZW5zaW9uczsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFBy
b3RvLlRlc3RBbGxFeHRlbnNpb25zT3JCdWlsZGVyOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0
LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVu
aXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzT3JCdWlsZGVyOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdE9uZW9mMjsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5V
bml0dGVzdFByb3RvLlRlc3RQYWNrZWRFeHRlbnNpb25zOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdFBhY2tlZFR5cGVzOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdFVucGFja2VkVHlwZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFt
ZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9F
eGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SYW5kb21BY2Nlc3NGaWxlOwotCi0vKioKLSAqIENv
bnRhaW5zIG1ldGhvZHMgZm9yIHNldHRpbmcgYWxsIGZpZWxkcyBvZiB7QGNvZGUgVGVzdEFsbFR5
cGVzfSB0bwotICogc29tZSB2YWx1ZXMgYXMgd2VsbCBhcyBjaGVja2luZyB0aGF0IGFsbCB0aGUg
ZmllbGRzIGFyZSBzZXQgdG8gdGhvc2UgdmFsdWVzLgotICogVGhlc2UgYXJlIHVzZWZ1bCBmb3Ig
dGVzdGluZyB2YXJpb3VzIHByb3RvY29sIG1lc3NhZ2UgZmVhdHVyZXMsIGUuZy4KLSAqIHNldCBh
bGwgZmllbGRzIG9mIGEgbWVzc2FnZSwgc2VyaWFsaXplIGl0LCBwYXJzZSBpdCwgYW5kIGNoZWNr
IHRoYXQgYWxsCi0gKiBmaWVsZHMgYXJlIHNldC4KLSAqCi0gKiA8cD5UaGlzIGNvZGUgaXMgbm90
IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB7QGNvZGUgY29tLmdvb2dsZS5wcm90b2J1Zn0gYW5kCi0g
KiBzdWJwYWNrYWdlcy4KLSAqCi0gKiBAYXV0aG9yIGtlbnRvbkBnb29nbGUuY29tIEtlbnRvbiBW
YXJkYQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgVGVzdFV0aWwgewotICBwcml2YXRlIFRlc3RV
dGlsKCkge30KLQotICAvKiogSGVscGVyIHRvIGNvbnZlcnQgYSBTdHJpbmcgdG8gQnl0ZVN0cmlu
Zy4gKi8KLSAgc3RhdGljIEJ5dGVTdHJpbmcgdG9CeXRlcyhTdHJpbmcgc3RyKSB7Ci0gICAgcmV0
dXJuIEJ5dGVTdHJpbmcuY29weUZyb20oc3RyLmdldEJ5dGVzKEludGVybmFsLlVURl84KSk7Ci0g
IH0KLQotICAvKioKLSAgICogR2V0IGEge0Bjb2RlIFRlc3RBbGxUeXBlc30gd2l0aCBhbGwgZmll
bGRzIHNldCBhcyB0aGV5IHdvdWxkIGJlIGJ5Ci0gICAqIHtAbGluayAjc2V0QWxsRmllbGRzKFRl
c3RBbGxUeXBlcy5CdWlsZGVyKX0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3RBbGxUeXBl
cyBnZXRBbGxTZXQoKSB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RB
bGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgc2V0QWxsRmllbGRzKGJ1aWxkZXIpOwotICAgIHJl
dHVybiBidWlsZGVyLmJ1aWxkKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEge0Bjb2RlIFRl
c3RBbGxUeXBlcy5CdWlsZGVyfSB3aXRoIGFsbCBmaWVsZHMgc2V0IGFzIHRoZXkgd291bGQgYmUg
YnkKLSAgICoge0BsaW5rICNzZXRBbGxGaWVsZHMoVGVzdEFsbFR5cGVzLkJ1aWxkZXIpfS4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgZ2V0QWxsU2V0QnVpbGRl
cigpIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5l
d0J1aWxkZXIoKTsKLSAgICBzZXRBbGxGaWVsZHMoYnVpbGRlcik7Ci0gICAgcmV0dXJuIGJ1aWxk
ZXI7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEge0Bjb2RlIFRlc3RBbGxFeHRlbnNpb25zfSB3
aXRoIGFsbCBmaWVsZHMgc2V0IGFzIHRoZXkgd291bGQgYmUgYnkKLSAgICoge0BsaW5rICNzZXRB
bGxFeHRlbnNpb25zKFRlc3RBbGxFeHRlbnNpb25zLkJ1aWxkZXIpfS4KLSAgICovCi0gIHB1Ymxp
YyBzdGF0aWMgVGVzdEFsbEV4dGVuc2lvbnMgZ2V0QWxsRXh0ZW5zaW9uc1NldCgpIHsKLSAgICBU
ZXN0QWxsRXh0ZW5zaW9ucy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsRXh0ZW5zaW9ucy5uZXdC
dWlsZGVyKCk7Ci0gICAgc2V0QWxsRXh0ZW5zaW9ucyhidWlsZGVyKTsKLSAgICByZXR1cm4gYnVp
bGRlci5idWlsZCgpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0UGFja2VkVHlwZXMgZ2V0
UGFja2VkU2V0KCkgewotICAgIFRlc3RQYWNrZWRUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0
UGFja2VkVHlwZXMubmV3QnVpbGRlcigpOwotICAgIHNldFBhY2tlZEZpZWxkcyhidWlsZGVyKTsK
LSAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBUZXN0
VW5wYWNrZWRUeXBlcyBnZXRVbnBhY2tlZFNldCgpIHsKLSAgICBUZXN0VW5wYWNrZWRUeXBlcy5C
dWlsZGVyIGJ1aWxkZXIgPSBUZXN0VW5wYWNrZWRUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgc2V0
VW5wYWNrZWRGaWVsZHMoYnVpbGRlcik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgVGVzdFBhY2tlZEV4dGVuc2lvbnMgZ2V0UGFja2VkRXh0ZW5z
aW9uc1NldCgpIHsKLSAgICBUZXN0UGFja2VkRXh0ZW5zaW9ucy5CdWlsZGVyIGJ1aWxkZXIgPSBU
ZXN0UGFja2VkRXh0ZW5zaW9ucy5uZXdCdWlsZGVyKCk7Ci0gICAgc2V0UGFja2VkRXh0ZW5zaW9u
cyhidWlsZGVyKTsKLSAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIFNldCBldmVyeSBmaWVsZCBvZiB7QGNvZGUgbWVzc2FnZX0gdG8gdGhlIHZhbHVlcyBleHBl
Y3RlZCBieQotICAgKiB7QGNvZGUgYXNzZXJ0QWxsRmllbGRzU2V0KCl9LgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyB2b2lkIHNldEFsbEZpZWxkcyhUZXN0QWxsVHlwZXMuQnVpbGRlciBtZXNzYWdl
KSB7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbEludDMyICAgKDEwMSk7Ci0gICAgbWVzc2FnZS5z
ZXRPcHRpb25hbEludDY0ICAgKDEwMik7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbFVpbnQzMiAg
KDEwMyk7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbFVpbnQ2NCAgKDEwNCk7Ci0gICAgbWVzc2Fn
ZS5zZXRPcHRpb25hbFNpbnQzMiAgKDEwNSk7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbFNpbnQ2
NCAgKDEwNik7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbEZpeGVkMzIgKDEwNyk7Ci0gICAgbWVz
c2FnZS5zZXRPcHRpb25hbEZpeGVkNjQgKDEwOCk7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbFNm
aXhlZDMyKDEwOSk7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbFNmaXhlZDY0KDExMCk7Ci0gICAg
bWVzc2FnZS5zZXRPcHRpb25hbEZsb2F0ICAgKDExMSk7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25h
bERvdWJsZSAgKDExMik7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbEJvb2wgICAgKHRydWUpOwot
ICAgIG1lc3NhZ2Uuc2V0T3B0aW9uYWxTdHJpbmcgICgiMTE1Iik7Ci0gICAgbWVzc2FnZS5zZXRP
cHRpb25hbEJ5dGVzICAgKHRvQnl0ZXMoIjExNiIpKTsKLQotICAgIG1lc3NhZ2Uuc2V0T3B0aW9u
YWxHcm91cCgKLSAgICAgIFRlc3RBbGxUeXBlcy5PcHRpb25hbEdyb3VwLm5ld0J1aWxkZXIoKS5z
ZXRBKDExNykuYnVpbGQoKSk7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbE5lc3RlZE1lc3NhZ2Uo
Ci0gICAgICBUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0QmIoMTE4
KS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLnNldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UoCi0gICAg
ICBGb3JlaWduTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0QygxMTkpLmJ1aWxkKCkpOwotICAgIG1l
c3NhZ2Uuc2V0T3B0aW9uYWxJbXBvcnRNZXNzYWdlKAotICAgICAgSW1wb3J0TWVzc2FnZS5uZXdC
dWlsZGVyKCkuc2V0RCgxMjApLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2Uuc2V0T3B0aW9uYWxQdWJs
aWNJbXBvcnRNZXNzYWdlKAotICAgICAgUHVibGljSW1wb3J0TWVzc2FnZS5uZXdCdWlsZGVyKCku
c2V0RSgxMjYpLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2Uuc2V0T3B0aW9uYWxMYXp5TWVzc2FnZSgK
LSAgICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYigxMjcp
LmJ1aWxkKCkpOwotCi0gICAgbWVzc2FnZS5zZXRPcHRpb25hbE5lc3RlZEVudW0gKFRlc3RBbGxU
eXBlcy5OZXN0ZWRFbnVtLkJBWik7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbEZvcmVpZ25FbnVt
KEZvcmVpZ25FbnVtLkZPUkVJR05fQkFaKTsKLSAgICBtZXNzYWdlLnNldE9wdGlvbmFsSW1wb3J0
RW51bSAoSW1wb3J0RW51bS5JTVBPUlRfQkFaKTsKLQotICAgIG1lc3NhZ2Uuc2V0T3B0aW9uYWxT
dHJpbmdQaWVjZSgiMTI0Iik7Ci0gICAgbWVzc2FnZS5zZXRPcHRpb25hbENvcmQoIjEyNSIpOwot
Ci0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRJbnQzMiAgICgyMDEp
OwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRJbnQ2NCAgICgyMDIpOwotICAgIG1lc3NhZ2UuYWRk
UmVwZWF0ZWRVaW50MzIgICgyMDMpOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRVaW50NjQgICgy
MDQpOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRTaW50MzIgICgyMDUpOwotICAgIG1lc3NhZ2Uu
YWRkUmVwZWF0ZWRTaW50NjQgICgyMDYpOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaXhlZDMy
ICgyMDcpOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaXhlZDY0ICgyMDgpOwotICAgIG1lc3Nh
Z2UuYWRkUmVwZWF0ZWRTZml4ZWQzMigyMDkpOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRTZml4
ZWQ2NCgyMTApOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGbG9hdCAgICgyMTEpOwotICAgIG1l
c3NhZ2UuYWRkUmVwZWF0ZWREb3VibGUgICgyMTIpOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRC
b29sICAgICh0cnVlKTsKLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkU3RyaW5nICAoIjIxNSIpOwot
ICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRCeXRlcyAgICh0b0J5dGVzKCIyMTYiKSk7Ci0KLSAgICBt
ZXNzYWdlLmFkZFJlcGVhdGVkR3JvdXAoCi0gICAgICBUZXN0QWxsVHlwZXMuUmVwZWF0ZWRHcm91
cC5uZXdCdWlsZGVyKCkuc2V0QSgyMTcpLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0
ZWROZXN0ZWRNZXNzYWdlKAotICAgICAgVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UubmV3QnVp
bGRlcigpLnNldEJiKDIxOCkuYnVpbGQoKSk7Ci0gICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZvcmVp
Z25NZXNzYWdlKAotICAgICAgRm9yZWlnbk1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEMoMjE5KS5i
dWlsZCgpKTsKLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkSW1wb3J0TWVzc2FnZSgKLSAgICAgIElt
cG9ydE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEQoMjIwKS5idWlsZCgpKTsKLSAgICBtZXNzYWdl
LmFkZFJlcGVhdGVkTGF6eU1lc3NhZ2UoCi0gICAgICBUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2Fn
ZS5uZXdCdWlsZGVyKCkuc2V0QmIoMjI3KS5idWlsZCgpKTsKLQotICAgIG1lc3NhZ2UuYWRkUmVw
ZWF0ZWROZXN0ZWRFbnVtIChUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVIpOwotICAgIG1lc3Nh
Z2UuYWRkUmVwZWF0ZWRGb3JlaWduRW51bShGb3JlaWduRW51bS5GT1JFSUdOX0JBUik7Ci0gICAg
bWVzc2FnZS5hZGRSZXBlYXRlZEltcG9ydEVudW0gKEltcG9ydEVudW0uSU1QT1JUX0JBUik7Ci0K
LSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkU3RyaW5nUGllY2UoIjIyNCIpOwotICAgIG1lc3NhZ2Uu
YWRkUmVwZWF0ZWRDb3JkKCIyMjUiKTsKLQotICAgIC8vIEFkZCBhIHNlY29uZCBvbmUgb2YgZWFj
aCBmaWVsZC4KLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkSW50MzIgICAoMzAxKTsKLSAgICBtZXNz
YWdlLmFkZFJlcGVhdGVkSW50NjQgICAoMzAyKTsKLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkVWlu
dDMyICAoMzAzKTsKLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkVWludDY0ICAoMzA0KTsKLSAgICBt
ZXNzYWdlLmFkZFJlcGVhdGVkU2ludDMyICAoMzA1KTsKLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVk
U2ludDY0ICAoMzA2KTsKLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRml4ZWQzMiAoMzA3KTsKLSAg
ICBtZXNzYWdlLmFkZFJlcGVhdGVkRml4ZWQ2NCAoMzA4KTsKLSAgICBtZXNzYWdlLmFkZFJlcGVh
dGVkU2ZpeGVkMzIoMzA5KTsKLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkU2ZpeGVkNjQoMzEwKTsK
LSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmxvYXQgICAoMzExKTsKLSAgICBtZXNzYWdlLmFkZFJl
cGVhdGVkRG91YmxlICAoMzEyKTsKLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkQm9vbCAgICAoZmFs
c2UpOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRTdHJpbmcgICgiMzE1Iik7Ci0gICAgbWVzc2Fn
ZS5hZGRSZXBlYXRlZEJ5dGVzICAgKHRvQnl0ZXMoIjMxNiIpKTsKLQotICAgIG1lc3NhZ2UuYWRk
UmVwZWF0ZWRHcm91cCgKLSAgICAgIFRlc3RBbGxUeXBlcy5SZXBlYXRlZEdyb3VwLm5ld0J1aWxk
ZXIoKS5zZXRBKDMxNykuYnVpbGQoKSk7Ci0gICAgbWVzc2FnZS5hZGRSZXBlYXRlZE5lc3RlZE1l
c3NhZ2UoCi0gICAgICBUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0
QmIoMzE4KS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2Uo
Ci0gICAgICBGb3JlaWduTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0QygzMTkpLmJ1aWxkKCkpOwot
ICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRJbXBvcnRNZXNzYWdlKAotICAgICAgSW1wb3J0TWVzc2Fn
ZS5uZXdCdWlsZGVyKCkuc2V0RCgzMjApLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2UuYWRkUmVwZWF0
ZWRMYXp5TWVzc2FnZSgKLSAgICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxk
ZXIoKS5zZXRCYigzMjcpLmJ1aWxkKCkpOwotCi0gICAgbWVzc2FnZS5hZGRSZXBlYXRlZE5lc3Rl
ZEVudW0gKFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkJBWik7Ci0gICAgbWVzc2FnZS5hZGRSZXBl
YXRlZEZvcmVpZ25FbnVtKEZvcmVpZ25FbnVtLkZPUkVJR05fQkFaKTsKLSAgICBtZXNzYWdlLmFk
ZFJlcGVhdGVkSW1wb3J0RW51bSAoSW1wb3J0RW51bS5JTVBPUlRfQkFaKTsKLQotICAgIG1lc3Nh
Z2UuYWRkUmVwZWF0ZWRTdHJpbmdQaWVjZSgiMzI0Iik7Ci0gICAgbWVzc2FnZS5hZGRSZXBlYXRl
ZENvcmQoIjMyNSIpOwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIG1lc3NhZ2Uuc2V0RGVmYXVs
dEludDMyICAgKDQwMSk7Ci0gICAgbWVzc2FnZS5zZXREZWZhdWx0SW50NjQgICAoNDAyKTsKLSAg
ICBtZXNzYWdlLnNldERlZmF1bHRVaW50MzIgICg0MDMpOwotICAgIG1lc3NhZ2Uuc2V0RGVmYXVs
dFVpbnQ2NCAgKDQwNCk7Ci0gICAgbWVzc2FnZS5zZXREZWZhdWx0U2ludDMyICAoNDA1KTsKLSAg
ICBtZXNzYWdlLnNldERlZmF1bHRTaW50NjQgICg0MDYpOwotICAgIG1lc3NhZ2Uuc2V0RGVmYXVs
dEZpeGVkMzIgKDQwNyk7Ci0gICAgbWVzc2FnZS5zZXREZWZhdWx0Rml4ZWQ2NCAoNDA4KTsKLSAg
ICBtZXNzYWdlLnNldERlZmF1bHRTZml4ZWQzMig0MDkpOwotICAgIG1lc3NhZ2Uuc2V0RGVmYXVs
dFNmaXhlZDY0KDQxMCk7Ci0gICAgbWVzc2FnZS5zZXREZWZhdWx0RmxvYXQgICAoNDExKTsKLSAg
ICBtZXNzYWdlLnNldERlZmF1bHREb3VibGUgICg0MTIpOwotICAgIG1lc3NhZ2Uuc2V0RGVmYXVs
dEJvb2wgICAgKGZhbHNlKTsKLSAgICBtZXNzYWdlLnNldERlZmF1bHRTdHJpbmcgICgiNDE1Iik7
Ci0gICAgbWVzc2FnZS5zZXREZWZhdWx0Qnl0ZXMgICAodG9CeXRlcygiNDE2IikpOwotCi0gICAg
bWVzc2FnZS5zZXREZWZhdWx0TmVzdGVkRW51bSAoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uRk9P
KTsKLSAgICBtZXNzYWdlLnNldERlZmF1bHRGb3JlaWduRW51bShGb3JlaWduRW51bS5GT1JFSUdO
X0ZPTyk7Ci0gICAgbWVzc2FnZS5zZXREZWZhdWx0SW1wb3J0RW51bSAoSW1wb3J0RW51bS5JTVBP
UlRfRk9PKTsKLQotICAgIG1lc3NhZ2Uuc2V0RGVmYXVsdFN0cmluZ1BpZWNlKCI0MjQiKTsKLSAg
ICBtZXNzYWdlLnNldERlZmF1bHRDb3JkKCI0MjUiKTsKLQotICAgIG1lc3NhZ2Uuc2V0T25lb2ZV
aW50MzIoNjAxKTsKLSAgICBtZXNzYWdlLnNldE9uZW9mTmVzdGVkTWVzc2FnZSgKLSAgICAgIFRl
c3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYig2MDIpLmJ1aWxkKCkp
OwotICAgIG1lc3NhZ2Uuc2V0T25lb2ZTdHJpbmcoIjYwMyIpOwotICAgIG1lc3NhZ2Uuc2V0T25l
b2ZCeXRlcyh0b0J5dGVzKCI2MDQiKSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLyoq
Ci0gICAqIE1vZGlmeSB0aGUgcmVwZWF0ZWQgZmllbGRzIG9mIHtAY29kZSBtZXNzYWdlfSB0byBj
b250YWluIHRoZSB2YWx1ZXMKLSAgICogZXhwZWN0ZWQgYnkge0Bjb2RlIGFzc2VydFJlcGVhdGVk
RmllbGRzTW9kaWZpZWQoKX0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbW9kaWZ5UmVw
ZWF0ZWRGaWVsZHMoVGVzdEFsbFR5cGVzLkJ1aWxkZXIgbWVzc2FnZSkgewotICAgIG1lc3NhZ2Uu
c2V0UmVwZWF0ZWRJbnQzMiAgICgxLCA1MDEpOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRJbnQ2
NCAgICgxLCA1MDIpOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRVaW50MzIgICgxLCA1MDMpOwot
ICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRVaW50NjQgICgxLCA1MDQpOwotICAgIG1lc3NhZ2Uuc2V0
UmVwZWF0ZWRTaW50MzIgICgxLCA1MDUpOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRTaW50NjQg
ICgxLCA1MDYpOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaXhlZDMyICgxLCA1MDcpOwotICAg
IG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaXhlZDY0ICgxLCA1MDgpOwotICAgIG1lc3NhZ2Uuc2V0UmVw
ZWF0ZWRTZml4ZWQzMigxLCA1MDkpOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRTZml4ZWQ2NCgx
LCA1MTApOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGbG9hdCAgICgxLCA1MTEpOwotICAgIG1l
c3NhZ2Uuc2V0UmVwZWF0ZWREb3VibGUgICgxLCA1MTIpOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0
ZWRCb29sICAgICgxLCB0cnVlKTsKLSAgICBtZXNzYWdlLnNldFJlcGVhdGVkU3RyaW5nICAoMSwg
IjUxNSIpOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRCeXRlcyAgICgxLCB0b0J5dGVzKCI1MTYi
KSk7Ci0KLSAgICBtZXNzYWdlLnNldFJlcGVhdGVkR3JvdXAoMSwKLSAgICAgIFRlc3RBbGxUeXBl
cy5SZXBlYXRlZEdyb3VwLm5ld0J1aWxkZXIoKS5zZXRBKDUxNykuYnVpbGQoKSk7Ci0gICAgbWVz
c2FnZS5zZXRSZXBlYXRlZE5lc3RlZE1lc3NhZ2UoMSwKLSAgICAgIFRlc3RBbGxUeXBlcy5OZXN0
ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYig1MTgpLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2Uu
c2V0UmVwZWF0ZWRGb3JlaWduTWVzc2FnZSgxLAotICAgICAgRm9yZWlnbk1lc3NhZ2UubmV3QnVp
bGRlcigpLnNldEMoNTE5KS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLnNldFJlcGVhdGVkSW1wb3J0
TWVzc2FnZSgxLAotICAgICAgSW1wb3J0TWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0RCg1MjApLmJ1
aWxkKCkpOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRMYXp5TWVzc2FnZSgxLAotICAgICAgVGVz
dEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDUyNykuYnVpbGQoKSk7
Ci0KLSAgICBtZXNzYWdlLnNldFJlcGVhdGVkTmVzdGVkRW51bSAoMSwgVGVzdEFsbFR5cGVzLk5l
c3RlZEVudW0uRk9PKTsKLSAgICBtZXNzYWdlLnNldFJlcGVhdGVkRm9yZWlnbkVudW0oMSwgRm9y
ZWlnbkVudW0uRk9SRUlHTl9GT08pOwotICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRJbXBvcnRFbnVt
ICgxLCBJbXBvcnRFbnVtLklNUE9SVF9GT08pOwotCi0gICAgbWVzc2FnZS5zZXRSZXBlYXRlZFN0
cmluZ1BpZWNlKDEsICI1MjQiKTsKLSAgICBtZXNzYWdlLnNldFJlcGVhdGVkQ29yZCgxLCAiNTI1
Iik7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLyoqCi0gICAqIEFzc2VydCAodXNpbmcg
e0Bjb2RlIGp1bml0LmZyYW1ld29yay5Bc3NlcnR9fSB0aGF0IGFsbCBmaWVsZHMgb2YKLSAgICog
e0Bjb2RlIG1lc3NhZ2V9IGFyZSBzZXQgdG8gdGhlIHZhbHVlcyBhc3NpZ25lZCBieSB7QGNvZGUg
c2V0QWxsRmllbGRzfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRBbGxGaWVs
ZHNTZXQoVGVzdEFsbFR5cGVzT3JCdWlsZGVyIG1lc3NhZ2UpIHsKLSAgICBBc3NlcnQuYXNzZXJ0
VHJ1ZShtZXNzYWdlLmhhc09wdGlvbmFsSW50MzIgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRy
dWUobWVzc2FnZS5oYXNPcHRpb25hbEludDY0ICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVl
KG1lc3NhZ2UuaGFzT3B0aW9uYWxVaW50MzIgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc09wdGlvbmFsVWludDY0ICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVz
c2FnZS5oYXNPcHRpb25hbFNpbnQzMiAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3Nh
Z2UuaGFzT3B0aW9uYWxTaW50NjQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdl
Lmhhc09wdGlvbmFsRml4ZWQzMiAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5o
YXNPcHRpb25hbEZpeGVkNjQgKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFz
T3B0aW9uYWxTZml4ZWQzMigpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc09w
dGlvbmFsU2ZpeGVkNjQoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNPcHRp
b25hbEZsb2F0ICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzT3B0aW9u
YWxEb3VibGUgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc09wdGlvbmFs
Qm9vbCAgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNPcHRpb25hbFN0
cmluZyAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzT3B0aW9uYWxCeXRl
cyAgICgpKTsKLQotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzT3B0aW9uYWxHcm91
cCAgICAgICAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc09wdGlvbmFs
TmVzdGVkTWVzc2FnZSAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNPcHRp
b25hbEZvcmVpZ25NZXNzYWdlKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFz
T3B0aW9uYWxJbXBvcnRNZXNzYWdlICgpKTsKLQotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3Nh
Z2UuZ2V0T3B0aW9uYWxHcm91cCAgICAgICAgICgpLmhhc0EoKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dFRydWUobWVzc2FnZS5nZXRPcHRpb25hbE5lc3RlZE1lc3NhZ2UgKCkuaGFzQmIoKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5nZXRPcHRpb25hbEZvcmVpZ25NZXNzYWdlKCkuaGFz
QygpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmdldE9wdGlvbmFsSW1wb3J0TWVz
c2FnZSAoKS5oYXNEKCkpOwotCi0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNPcHRp
b25hbE5lc3RlZEVudW0gKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzT3B0
aW9uYWxGb3JlaWduRW51bSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc09w
dGlvbmFsSW1wb3J0RW51bSAoKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhh
c09wdGlvbmFsU3RyaW5nUGllY2UoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5o
YXNPcHRpb25hbENvcmQoKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEwMSAgLCBtZXNz
YWdlLmdldE9wdGlvbmFsSW50MzIgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygxMDIg
ICwgbWVzc2FnZS5nZXRPcHRpb25hbEludDY0ICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMTAzICAsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxVaW50MzIgICgpKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDEwNCAgLCBtZXNzYWdlLmdldE9wdGlvbmFsVWludDY0ICAoKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygxMDUgICwgbWVzc2FnZS5nZXRPcHRpb25hbFNpbnQzMiAgKCkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMTA2ICAsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxTaW50NjQg
ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEwNyAgLCBtZXNzYWdlLmdldE9wdGlvbmFs
Rml4ZWQzMiAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygxMDggICwgbWVzc2FnZS5nZXRP
cHRpb25hbEZpeGVkNjQgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMTA5ICAsIG1lc3Nh
Z2UuZ2V0T3B0aW9uYWxTZml4ZWQzMigpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDExMCAg
LCBtZXNzYWdlLmdldE9wdGlvbmFsU2ZpeGVkNjQoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFs
cygxMTEgICwgbWVzc2FnZS5nZXRPcHRpb25hbEZsb2F0ICAgKCksIDAuMCk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscygxMTIgICwgbWVzc2FnZS5nZXRPcHRpb25hbERvdWJsZSAgKCksIDAuMCk7
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyh0cnVlICwgbWVzc2FnZS5nZXRPcHRpb25hbEJvb2wg
ICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjExNSIsIG1lc3NhZ2UuZ2V0T3B0aW9u
YWxTdHJpbmcgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRvQnl0ZXMoIjExNiIpLCBt
ZXNzYWdlLmdldE9wdGlvbmFsQnl0ZXMoKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEx
NywgbWVzc2FnZS5nZXRPcHRpb25hbEdyb3VwICAgICAgICAgICAgICAoKS5nZXRBKCkpOwotICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMTE4LCBtZXNzYWdlLmdldE9wdGlvbmFsTmVzdGVkTWVzc2Fn
ZSAgICAgICgpLmdldEJiKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMTE5LCBtZXNzYWdl
LmdldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UgICAgICgpLmdldEMoKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscygxMjAsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxJbXBvcnRNZXNzYWdlICAgICAgKCku
Z2V0RCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEyNiwgbWVzc2FnZS5nZXRPcHRpb25h
bFB1YmxpY0ltcG9ydE1lc3NhZ2UoKS5nZXRFKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
MTI3LCBtZXNzYWdlLmdldE9wdGlvbmFsTGF6eU1lc3NhZ2UgICAgICAgICgpLmdldEJiKCkpOwot
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVosIG1l
c3NhZ2UuZ2V0T3B0aW9uYWxOZXN0ZWRFbnVtKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
Rm9yZWlnbkVudW0uRk9SRUlHTl9CQVosIG1lc3NhZ2UuZ2V0T3B0aW9uYWxGb3JlaWduRW51bSgp
KTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEltcG9ydEVudW0uSU1QT1JUX0JBWiwgbWVzc2Fn
ZS5nZXRPcHRpb25hbEltcG9ydEVudW0oKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIx
MjQiLCBtZXNzYWdlLmdldE9wdGlvbmFsU3RyaW5nUGllY2UoKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygiMTI1IiwgbWVzc2FnZS5nZXRPcHRpb25hbENvcmQoKSk7Ci0KLSAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkSW50
MzJDb3VudCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRJbnQ2NENvdW50ICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZFVpbnQzMkNvdW50ICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygy
LCBtZXNzYWdlLmdldFJlcGVhdGVkVWludDY0Q291bnQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTaW50MzJDb3VudCAgKCkpOwotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZFNpbnQ2NENvdW50ICAoKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkRml4ZWQzMkNvdW50
ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaXhl
ZDY0Q291bnQgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBl
YXRlZFNmaXhlZDMyQ291bnQoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdl
LmdldFJlcGVhdGVkU2ZpeGVkNjRDb3VudCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIs
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGbG9hdENvdW50ICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZERvdWJsZUNvdW50ICAoKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkQm9vbENvdW50ICAgICgpKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTdHJpbmdDb3VudCAg
KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEJ5dGVz
Q291bnQgICAoKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRHcm91cENvdW50ICAgICAgICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwg
bWVzc2FnZS5nZXRSZXBlYXRlZE5lc3RlZE1lc3NhZ2VDb3VudCAoKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VDb3VudCgpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRJbXBvcnRNZXNz
YWdlQ291bnQgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBl
YXRlZExhenlNZXNzYWdlQ291bnQgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBt
ZXNzYWdlLmdldFJlcGVhdGVkTmVzdGVkRW51bUNvdW50ICAgICgpKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGb3JlaWduRW51bUNvdW50ICAgKCkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEltcG9ydEVudW1D
b3VudCAgICAoKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRTdHJpbmdQaWVjZUNvdW50KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVz
c2FnZS5nZXRSZXBlYXRlZENvcmRDb3VudCgpKTsKLQotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
MjAxICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRJbnQzMiAgICgwKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygyMDIgICwgbWVzc2FnZS5nZXRSZXBlYXRlZEludDY0ICAgKDApKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDIwMyAgLCBtZXNzYWdlLmdldFJlcGVhdGVkVWludDMyICAoMCkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjA0ICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRVaW50NjQg
ICgwKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDUgICwgbWVzc2FnZS5nZXRSZXBlYXRl
ZFNpbnQzMiAgKDApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwNiAgLCBtZXNzYWdlLmdl
dFJlcGVhdGVkU2ludDY0ICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjA3ICAsIG1l
c3NhZ2UuZ2V0UmVwZWF0ZWRGaXhlZDMyICgwKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygy
MDggICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpeGVkNjQgKDApKTsKLSAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDIwOSAgLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ZpeGVkMzIoMCkpOwotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMjEwICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTZml4ZWQ2NCgwKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMTEgICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0ICAg
KDApLCAwLjApOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjEyICAsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWREb3VibGUgICgwKSwgMC4wKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRydWUgLCBt
ZXNzYWdlLmdldFJlcGVhdGVkQm9vbCAgICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
IjIxNSIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTdHJpbmcgICgwKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscyh0b0J5dGVzKCIyMTYiKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEJ5dGVzKDApKTsKLQot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjE3LCBtZXNzYWdlLmdldFJlcGVhdGVkR3JvdXAgICAg
ICAgICAoMCkuZ2V0QSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIxOCwgbWVzc2FnZS5n
ZXRSZXBlYXRlZE5lc3RlZE1lc3NhZ2UgKDApLmdldEJiKCkpOwotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMjE5LCBtZXNzYWdlLmdldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UoMCkuZ2V0QygpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIyMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEltcG9ydE1l
c3NhZ2UgKDApLmdldEQoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMjcsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRMYXp5TWVzc2FnZSAgICgwKS5nZXRCYigpKTsKLQotICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFSLCBtZXNzYWdlLmdldFJlcGVhdGVk
TmVzdGVkRW51bSAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoRm9yZWlnbkVudW0uRk9S
RUlHTl9CQVIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGb3JlaWduRW51bSgwKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscyhJbXBvcnRFbnVtLklNUE9SVF9CQVIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRJ
bXBvcnRFbnVtKDApKTsKLQotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjIyNCIsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRTdHJpbmdQaWVjZSgwKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygiMjI1
IiwgbWVzc2FnZS5nZXRSZXBlYXRlZENvcmQoMCkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFs
cygzMDEgICwgbWVzc2FnZS5nZXRSZXBlYXRlZEludDMyICAgKDEpKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDMwMiAgLCBtZXNzYWdlLmdldFJlcGVhdGVkSW50NjQgICAoMSkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMzAzICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRVaW50MzIgICgxKSk7
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygzMDQgICwgbWVzc2FnZS5nZXRSZXBlYXRlZFVpbnQ2
NCAgKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMwNSAgLCBtZXNzYWdlLmdldFJlcGVh
dGVkU2ludDMyICAoMSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMzA2ICAsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRTaW50NjQgICgxKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygzMDcgICwg
bWVzc2FnZS5nZXRSZXBlYXRlZEZpeGVkMzIgKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDMwOCAgLCBtZXNzYWdlLmdldFJlcGVhdGVkRml4ZWQ2NCAoMSkpOwotICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoMzA5ICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTZml4ZWQzMigxKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygzMTAgICwgbWVzc2FnZS5nZXRSZXBlYXRlZFNmaXhlZDY0KDEpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMxMSAgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmxvYXQg
ICAoMSksIDAuMCk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygzMTIgICwgbWVzc2FnZS5nZXRS
ZXBlYXRlZERvdWJsZSAgKDEpLCAwLjApOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZmFsc2Us
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRCb29sICAgICgxKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFs
cygiMzE1IiwgbWVzc2FnZS5nZXRSZXBlYXRlZFN0cmluZyAgKDEpKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKHRvQnl0ZXMoIjMxNiIpLCBtZXNzYWdlLmdldFJlcGVhdGVkQnl0ZXMoMSkpOwot
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygzMTcsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRHcm91cCAg
ICAgICAgICgxKS5nZXRBKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMzE4LCBtZXNzYWdl
LmdldFJlcGVhdGVkTmVzdGVkTWVzc2FnZSAoMSkuZ2V0QmIoKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygzMTksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGb3JlaWduTWVzc2FnZSgxKS5nZXRDKCkp
OwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMzIwLCBtZXNzYWdlLmdldFJlcGVhdGVkSW1wb3J0
TWVzc2FnZSAoMSkuZ2V0RCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMyNywgbWVzc2Fn
ZS5nZXRSZXBlYXRlZExhenlNZXNzYWdlICAgKDEpLmdldEJiKCkpOwotCi0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscyhUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVosIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWROZXN0ZWRFbnVtICgxKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyhGb3JlaWduRW51bS5G
T1JFSUdOX0JBWiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZvcmVpZ25FbnVtKDEpKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKEltcG9ydEVudW0uSU1QT1JUX0JBWiwgbWVzc2FnZS5nZXRSZXBlYXRl
ZEltcG9ydEVudW0oMSkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygiMzI0IiwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZFN0cmluZ1BpZWNlKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIz
MjUiLCBtZXNzYWdlLmdldFJlcGVhdGVkQ29yZCgxKSk7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNEZWZhdWx0SW50MzIgICAoKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNEZWZhdWx0SW50NjQgICAoKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNEZWZhdWx0VWludDMyICAoKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydFRydWUobWVzc2FnZS5oYXNEZWZhdWx0VWludDY0ICAoKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydFRydWUobWVzc2FnZS5oYXNEZWZhdWx0U2ludDMyICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dFRydWUobWVzc2FnZS5oYXNEZWZhdWx0U2ludDY0ICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRy
dWUobWVzc2FnZS5oYXNEZWZhdWx0Rml4ZWQzMiAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUo
bWVzc2FnZS5oYXNEZWZhdWx0Rml4ZWQ2NCAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVz
c2FnZS5oYXNEZWZhdWx0U2ZpeGVkMzIoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2Fn
ZS5oYXNEZWZhdWx0U2ZpeGVkNjQoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5o
YXNEZWZhdWx0RmxvYXQgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNE
ZWZhdWx0RG91YmxlICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNEZWZh
dWx0Qm9vbCAgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNEZWZhdWx0
U3RyaW5nICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNEZWZhdWx0Qnl0
ZXMgICAoKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0RlZmF1bHROZXN0
ZWRFbnVtICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0RlZmF1bHRGb3Jl
aWduRW51bSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0RlZmF1bHRJbXBv
cnRFbnVtICgpKTsKLQotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRGVmYXVsdFN0
cmluZ1BpZWNlKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRGVmYXVsdENv
cmQoKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQwMSAgLCBtZXNzYWdlLmdldERlZmF1
bHRJbnQzMiAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQwMiAgLCBtZXNzYWdlLmdl
dERlZmF1bHRJbnQ2NCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQwMyAgLCBtZXNz
YWdlLmdldERlZmF1bHRVaW50MzIgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQwNCAg
LCBtZXNzYWdlLmdldERlZmF1bHRVaW50NjQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDQwNSAgLCBtZXNzYWdlLmdldERlZmF1bHRTaW50MzIgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDQwNiAgLCBtZXNzYWdlLmdldERlZmF1bHRTaW50NjQgICgpKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDQwNyAgLCBtZXNzYWdlLmdldERlZmF1bHRGaXhlZDMyICgpKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDQwOCAgLCBtZXNzYWdlLmdldERlZmF1bHRGaXhlZDY0ICgpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQwOSAgLCBtZXNzYWdlLmdldERlZmF1bHRTZml4ZWQz
MigpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQxMCAgLCBtZXNzYWdlLmdldERlZmF1bHRT
Zml4ZWQ2NCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQxMSAgLCBtZXNzYWdlLmdldERl
ZmF1bHRGbG9hdCAgICgpLCAwLjApOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNDEyICAsIG1l
c3NhZ2UuZ2V0RGVmYXVsdERvdWJsZSAgKCksIDAuMCk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFs
cyhmYWxzZSwgbWVzc2FnZS5nZXREZWZhdWx0Qm9vbCAgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygiNDE1IiwgbWVzc2FnZS5nZXREZWZhdWx0U3RyaW5nICAoKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscyh0b0J5dGVzKCI0MTYiKSwgbWVzc2FnZS5nZXREZWZhdWx0Qnl0ZXMoKSk7
Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkZPTywg
bWVzc2FnZS5nZXREZWZhdWx0TmVzdGVkRW51bSAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFs
cyhGb3JlaWduRW51bS5GT1JFSUdOX0ZPTywgbWVzc2FnZS5nZXREZWZhdWx0Rm9yZWlnbkVudW0o
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyhJbXBvcnRFbnVtLklNUE9SVF9GT08sIG1lc3Nh
Z2UuZ2V0RGVmYXVsdEltcG9ydEVudW0oKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCI0
MjQiLCBtZXNzYWdlLmdldERlZmF1bHRTdHJpbmdQaWVjZSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKCI0MjUiLCBtZXNzYWdlLmdldERlZmF1bHRDb3JkKCkpOwotCi0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscyhUZXN0QWxsVHlwZXMuT25lb2ZGaWVsZENhc2UuT05FT0ZfQllURVMsIG1lc3Nh
Z2UuZ2V0T25lb2ZGaWVsZENhc2UoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2Uu
aGFzT25lb2ZVaW50MzIoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzT25l
b2ZOZXN0ZWRNZXNzYWdlKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc09u
ZW9mU3RyaW5nKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzT25lb2ZCeXRl
cygpKTsKLQotICAgIEFzc2VydC5hc3NlcnRFcXVhbHModG9CeXRlcygiNjA0IiksIG1lc3NhZ2Uu
Z2V0T25lb2ZCeXRlcygpKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLyoqCi0gICAqIEFz
c2VydCAodXNpbmcge0Bjb2RlIGp1bml0LmZyYW1ld29yay5Bc3NlcnR9fSB0aGF0IGFsbCBmaWVs
ZHMgb2YKLSAgICoge0Bjb2RlIG1lc3NhZ2V9IGFyZSBjbGVhcmVkLCBhbmQgdGhhdCBnZXR0aW5n
IHRoZSBmaWVsZHMgcmV0dXJucyB0aGVpcgotICAgKiBkZWZhdWx0IHZhbHVlcy4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRDbGVhcihUZXN0QWxsVHlwZXNPckJ1aWxkZXIgbWVz
c2FnZSkgewotICAgIC8vIGhhc0JsYWgoKSBzaG91bGQgaW5pdGlhbGx5IGJlIGZhbHNlIGZvciBh
bGwgb3B0aW9uYWwgZmllbGRzLgotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc09w
dGlvbmFsSW50MzIgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzT3B0
aW9uYWxJbnQ2NCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNPcHRp
b25hbFVpbnQzMiAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc09wdGlv
bmFsVWludDY0ICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzT3B0aW9u
YWxTaW50MzIgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNPcHRpb25h
bFNpbnQ2NCAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc09wdGlvbmFs
Rml4ZWQzMiAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzT3B0aW9uYWxG
aXhlZDY0ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNPcHRpb25hbFNm
aXhlZDMyKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc09wdGlvbmFsU2Zp
eGVkNjQoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzT3B0aW9uYWxGbG9h
dCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNPcHRpb25hbERvdWJs
ZSAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc09wdGlvbmFsQm9vbCAg
ICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzT3B0aW9uYWxTdHJpbmcg
ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNPcHRpb25hbEJ5dGVzICAg
KCkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzT3B0aW9uYWxHcm91cCAg
ICAgICAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNPcHRpb25hbE5l
c3RlZE1lc3NhZ2UgKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc09wdGlv
bmFsRm9yZWlnbk1lc3NhZ2UoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFz
T3B0aW9uYWxJbXBvcnRNZXNzYWdlICgpKTsKLQotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNz
YWdlLmhhc09wdGlvbmFsTmVzdGVkRW51bSAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1l
c3NhZ2UuaGFzT3B0aW9uYWxGb3JlaWduRW51bSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2Uo
bWVzc2FnZS5oYXNPcHRpb25hbEltcG9ydEVudW0gKCkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEZh
bHNlKG1lc3NhZ2UuaGFzT3B0aW9uYWxTdHJpbmdQaWVjZSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0
RmFsc2UobWVzc2FnZS5oYXNPcHRpb25hbENvcmQoKSk7Ci0KLSAgICAvLyBPcHRpb25hbCBmaWVs
ZHMgd2l0aG91dCBkZWZhdWx0cyBhcmUgc2V0IHRvIHplcm8gb3Igc29tZXRoaW5nIGxpa2UgaXQu
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwICAgICwgbWVzc2FnZS5nZXRPcHRpb25hbEludDMy
ICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCAgICAsIG1lc3NhZ2UuZ2V0T3B0aW9u
YWxJbnQ2NCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAgICAgLCBtZXNzYWdlLmdl
dE9wdGlvbmFsVWludDMyICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwICAgICwgbWVz
c2FnZS5nZXRPcHRpb25hbFVpbnQ2NCAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCAg
ICAsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxTaW50MzIgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDAgICAgLCBtZXNzYWdlLmdldE9wdGlvbmFsU2ludDY0ICAoKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscygwICAgICwgbWVzc2FnZS5nZXRPcHRpb25hbEZpeGVkMzIgKCkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMCAgICAsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxGaXhlZDY0ICgpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAgICAgLCBtZXNzYWdlLmdldE9wdGlvbmFsU2ZpeGVk
MzIoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwICAgICwgbWVzc2FnZS5nZXRPcHRpb25h
bFNmaXhlZDY0KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCAgICAsIG1lc3NhZ2UuZ2V0
T3B0aW9uYWxGbG9hdCAgICgpLCAwLjApOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCAgICAs
IG1lc3NhZ2UuZ2V0T3B0aW9uYWxEb3VibGUgICgpLCAwLjApOwotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoZmFsc2UsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxCb29sICAgICgpKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKCIiICAgLCBtZXNzYWdlLmdldE9wdGlvbmFsU3RyaW5nICAoKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydEVxdWFscyhCeXRlU3RyaW5nLkVNUFRZLCBtZXNzYWdlLmdldE9wdGlvbmFs
Qnl0ZXMoKSk7Ci0KLSAgICAvLyBFbWJlZGRlZCBtZXNzYWdlcyBzaG91bGQgYWxzbyBiZSBjbGVh
ci4KLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5nZXRPcHRpb25hbEdyb3VwICAgICAg
ICAgICAgICAoKS5oYXNBKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmdldE9w
dGlvbmFsTmVzdGVkTWVzc2FnZSAgICAgICgpLmhhc0JiKCkpOwotICAgIEFzc2VydC5hc3NlcnRG
YWxzZShtZXNzYWdlLmdldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UgICAgICgpLmhhc0MoKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuZ2V0T3B0aW9uYWxJbXBvcnRNZXNzYWdlICAg
ICAgKCkuaGFzRCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5nZXRPcHRpb25h
bFB1YmxpY0ltcG9ydE1lc3NhZ2UoKS5oYXNFKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZSht
ZXNzYWdlLmdldE9wdGlvbmFsTGF6eU1lc3NhZ2UgICAgICAgICgpLmhhc0JiKCkpOwotCi0gICAg
QXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldE9wdGlvbmFsR3JvdXAgICAgICAgICAg
ICAgICgpLmdldEEoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldE9w
dGlvbmFsTmVzdGVkTWVzc2FnZSAgICAgICgpLmdldEJiKCkpOwotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMCwgbWVzc2FnZS5nZXRPcHRpb25hbEZvcmVpZ25NZXNzYWdlICAgICAoKS5nZXRDKCkp
OwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRPcHRpb25hbEltcG9ydE1l
c3NhZ2UgICAgICAoKS5nZXREKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2Fn
ZS5nZXRPcHRpb25hbFB1YmxpY0ltcG9ydE1lc3NhZ2UoKS5nZXRFKCkpOwotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRPcHRpb25hbExhenlNZXNzYWdlICAgICAgICAoKS5n
ZXRCYigpKTsKLQotICAgIC8vIEVudW1zIHdpdGhvdXQgZGVmYXVsdHMgYXJlIHNldCB0byB0aGUg
Zmlyc3QgdmFsdWUgaW4gdGhlIGVudW0uCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyhUZXN0QWxs
VHlwZXMuTmVzdGVkRW51bS5GT08sIG1lc3NhZ2UuZ2V0T3B0aW9uYWxOZXN0ZWRFbnVtICgpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEZvcmVpZ25FbnVtLkZPUkVJR05fRk9PLCBtZXNzYWdl
LmdldE9wdGlvbmFsRm9yZWlnbkVudW0oKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyhJbXBv
cnRFbnVtLklNUE9SVF9GT08sIG1lc3NhZ2UuZ2V0T3B0aW9uYWxJbXBvcnRFbnVtKCkpOwotCi0g
ICAgQXNzZXJ0LmFzc2VydEVxdWFscygiIiwgbWVzc2FnZS5nZXRPcHRpb25hbFN0cmluZ1BpZWNl
KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIiIsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxDb3Jk
KCkpOwotCi0gICAgLy8gUmVwZWF0ZWQgZmllbGRzIGFyZSBlbXB0eS4KLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRJbnQzMkNvdW50ICAgKCkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEludDY0Q291bnQgICAoKSk7
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkVWludDMyQ291
bnQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRV
aW50NjRDb3VudCAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRS
ZXBlYXRlZFNpbnQzMkNvdW50ICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNz
YWdlLmdldFJlcGVhdGVkU2ludDY0Q291bnQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaXhlZDMyQ291bnQgKCkpOwotICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpeGVkNjRDb3VudCAoKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ZpeGVkMzJDb3VudCgpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTZml4ZWQ2NENv
dW50KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEZs
b2F0Q291bnQgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJl
cGVhdGVkRG91YmxlQ291bnQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3Nh
Z2UuZ2V0UmVwZWF0ZWRCb29sQ291bnQgICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
MCwgbWVzc2FnZS5nZXRSZXBlYXRlZFN0cmluZ0NvdW50ICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkQnl0ZXNDb3VudCAgICgpKTsKLQotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEdyb3VwQ291bnQgICAgICAg
ICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkTmVz
dGVkTWVzc2FnZUNvdW50ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRGb3JlaWduTWVzc2FnZUNvdW50KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEltcG9ydE1lc3NhZ2VDb3VudCAoKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkTGF6eU1lc3NhZ2VDb3VudCAg
ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWROZXN0
ZWRFbnVtQ291bnQgICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZvcmVpZ25FbnVtQ291bnQgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFs
cygwLCBtZXNzYWdlLmdldFJlcGVhdGVkSW1wb3J0RW51bUNvdW50ICAgICgpKTsKLQotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZFN0cmluZ1BpZWNlQ291bnQo
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkQ29yZENv
dW50KCkpOwotCi0gICAgLy8gaGFzQmxhaCgpIHNob3VsZCBhbHNvIGJlIGZhbHNlIGZvciBhbGwg
ZGVmYXVsdCBmaWVsZHMuCi0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRGVmYXVs
dEludDMyICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0RlZmF1bHRJ
bnQ2NCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNEZWZhdWx0VWlu
dDMyICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRGVmYXVsdFVpbnQ2
NCAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0RlZmF1bHRTaW50MzIg
ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNEZWZhdWx0U2ludDY0ICAo
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRGVmYXVsdEZpeGVkMzIgKCkp
OwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0RlZmF1bHRGaXhlZDY0ICgpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNEZWZhdWx0U2ZpeGVkMzIoKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRGVmYXVsdFNmaXhlZDY0KCkpOwotICAg
IEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0RlZmF1bHRGbG9hdCAgICgpKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNEZWZhdWx0RG91YmxlICAoKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRGVmYXVsdEJvb2wgICAgKCkpOwotICAgIEFzc2Vy
dC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0RlZmF1bHRTdHJpbmcgICgpKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNEZWZhdWx0Qnl0ZXMgICAoKSk7Ci0KLSAgICBBc3NlcnQu
YXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNEZWZhdWx0TmVzdGVkRW51bSAoKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRGVmYXVsdEZvcmVpZ25FbnVtKCkpOwotICAgIEFzc2Vy
dC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0RlZmF1bHRJbXBvcnRFbnVtICgpKTsKLQotICAgIEFz
c2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0RlZmF1bHRTdHJpbmdQaWVjZSgpKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNEZWZhdWx0Q29yZCgpKTsKLQotICAgIC8vIEZp
ZWxkcyB3aXRoIGRlZmF1bHRzIGhhdmUgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgKGR1aCkuCi0gICAg
QXNzZXJ0LmFzc2VydEVxdWFscyggNDEgICAgLCBtZXNzYWdlLmdldERlZmF1bHRJbnQzMiAgICgp
KTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA0MiAgICAsIG1lc3NhZ2UuZ2V0RGVmYXVsdElu
dDY0ICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIDQzICAgICwgbWVzc2FnZS5nZXRE
ZWZhdWx0VWludDMyICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyggNDQgICAgLCBtZXNz
YWdlLmdldERlZmF1bHRVaW50NjQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC00NSAg
ICAsIG1lc3NhZ2UuZ2V0RGVmYXVsdFNpbnQzMiAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoIDQ2ICAgICwgbWVzc2FnZS5nZXREZWZhdWx0U2ludDY0ICAoKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscyggNDcgICAgLCBtZXNzYWdlLmdldERlZmF1bHRGaXhlZDMyICgpKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKCA0OCAgICAsIG1lc3NhZ2UuZ2V0RGVmYXVsdEZpeGVkNjQgKCkp
OwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIDQ5ICAgICwgbWVzc2FnZS5nZXREZWZhdWx0U2Zp
eGVkMzIoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygtNTAgICAgLCBtZXNzYWdlLmdldERl
ZmF1bHRTZml4ZWQ2NCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA1MS41ICAsIG1lc3Nh
Z2UuZ2V0RGVmYXVsdEZsb2F0ICAgKCksIDAuMCk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygg
NTJlMyAgLCBtZXNzYWdlLmdldERlZmF1bHREb3VibGUgICgpLCAwLjApOwotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHModHJ1ZSAgICwgbWVzc2FnZS5nZXREZWZhdWx0Qm9vbCAgICAoKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydEVxdWFscygiaGVsbG8iLCBtZXNzYWdlLmdldERlZmF1bHRTdHJpbmcgICgp
KTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRvQnl0ZXMoIndvcmxkIiksIG1lc3NhZ2UuZ2V0
RGVmYXVsdEJ5dGVzKCkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMu
TmVzdGVkRW51bS5CQVIsIG1lc3NhZ2UuZ2V0RGVmYXVsdE5lc3RlZEVudW0gKCkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoRm9yZWlnbkVudW0uRk9SRUlHTl9CQVIsIG1lc3NhZ2UuZ2V0RGVm
YXVsdEZvcmVpZ25FbnVtKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoSW1wb3J0RW51bS5J
TVBPUlRfQkFSLCBtZXNzYWdlLmdldERlZmF1bHRJbXBvcnRFbnVtKCkpOwotCi0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscygiYWJjIiwgbWVzc2FnZS5nZXREZWZhdWx0U3RyaW5nUGllY2UoKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEVxdWFscygiMTIzIiwgbWVzc2FnZS5nZXREZWZhdWx0Q29yZCgpKTsK
LQotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc09uZW9mVWludDMyKCkpOwotICAg
IEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc09uZW9mTmVzdGVkTWVzc2FnZSgpKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNPbmVvZlN0cmluZygpKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNPbmVvZkJ5dGVzKCkpOwotICB9Ci0KLSAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIC8qKgotICAgKiBBc3NlcnQgKHVzaW5nIHtAY29kZSBqdW5pdC5mcmFtZXdv
cmsuQXNzZXJ0fX0gdGhhdCBhbGwgZmllbGRzIG9mCi0gICAqIHtAY29kZSBtZXNzYWdlfSBhcmUg
c2V0IHRvIHRoZSB2YWx1ZXMgYXNzaWduZWQgYnkge0Bjb2RlIHNldEFsbEZpZWxkc30KLSAgICog
Zm9sbG93ZWQgYnkge0Bjb2RlIG1vZGlmeVJlcGVhdGVkRmllbGRzfS4KLSAgICovCi0gIHB1Ymxp
YyBzdGF0aWMgdm9pZCBhc3NlcnRSZXBlYXRlZEZpZWxkc01vZGlmaWVkKAotICAgICAgVGVzdEFs
bFR5cGVzT3JCdWlsZGVyIG1lc3NhZ2UpIHsKLSAgICAvLyBNb2RpZnlSZXBlYXRlZEZpZWxkcyBv
bmx5IHNldHMgdGhlIHNlY29uZCByZXBlYXRlZCBlbGVtZW50IG9mIGVhY2gKLSAgICAvLyBmaWVs
ZC4gIEluIGFkZGl0aW9uIHRvIHZlcmlmeWluZyB0aGlzLCB3ZSBhbHNvIHZlcmlmeSB0aGF0IHRo
ZSBmaXJzdAotICAgIC8vIGVsZW1lbnQgYW5kIHNpemUgd2VyZSAqbm90KiBtb2RpZmllZC4KLSAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRJbnQzMkNvdW50ICAg
KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEludDY0
Q291bnQgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVh
dGVkVWludDMyQ291bnQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRVaW50NjRDb3VudCAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwg
bWVzc2FnZS5nZXRSZXBlYXRlZFNpbnQzMkNvdW50ICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVx
dWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ludDY0Q291bnQgICgpKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaXhlZDMyQ291bnQgKCkpOwotICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpeGVkNjRDb3VudCAo
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ZpeGVk
MzJDb3VudCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRTZml4ZWQ2NENvdW50KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZsb2F0Q291bnQgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBt
ZXNzYWdlLmdldFJlcGVhdGVkRG91YmxlQ291bnQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRCb29sQ291bnQgICAgKCkpOwotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZFN0cmluZ0NvdW50ICAoKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkQnl0ZXNDb3VudCAgICgp
KTsKLQotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEdyb3Vw
Q291bnQgICAgICAgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdl
dFJlcGVhdGVkTmVzdGVkTWVzc2FnZUNvdW50ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGb3JlaWduTWVzc2FnZUNvdW50KCkpOwotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEltcG9ydE1lc3NhZ2VDb3VudCAo
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkTGF6eU1l
c3NhZ2VDb3VudCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0
UmVwZWF0ZWROZXN0ZWRFbnVtQ291bnQgICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
MiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZvcmVpZ25FbnVtQ291bnQgICAoKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkSW1wb3J0RW51bUNvdW50ICAgICgp
KTsKLQotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZFN0cmlu
Z1BpZWNlQ291bnQoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJl
cGVhdGVkQ29yZENvdW50KCkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDEgICwgbWVz
c2FnZS5nZXRSZXBlYXRlZEludDMyICAgKDApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIw
MkwgLCBtZXNzYWdlLmdldFJlcGVhdGVkSW50NjQgICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMjAzICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRVaW50MzIgICgwKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscygyMDRMICwgbWVzc2FnZS5nZXRSZXBlYXRlZFVpbnQ2NCAgKDApKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwNSAgLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ludDMyICAo
MCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjA2TCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRT
aW50NjQgICgwKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDcgICwgbWVzc2FnZS5nZXRS
ZXBlYXRlZEZpeGVkMzIgKDApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwOEwgLCBtZXNz
YWdlLmdldFJlcGVhdGVkRml4ZWQ2NCAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjA5
ICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTZml4ZWQzMigwKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVx
dWFscygyMTBMICwgbWVzc2FnZS5nZXRSZXBlYXRlZFNmaXhlZDY0KDApKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDIxMUYgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmxvYXQgICAoMCkpOwotICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMjEyRCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWREb3VibGUgICgw
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyh0cnVlICwgbWVzc2FnZS5nZXRSZXBlYXRlZEJv
b2wgICAgKDApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIyMTUiLCBtZXNzYWdlLmdldFJl
cGVhdGVkU3RyaW5nICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHModG9CeXRlcygiMjE2
IiksIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRCeXRlcygwKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDIxNywgbWVzc2FnZS5nZXRSZXBlYXRlZEdyb3VwICAgICAgICAgKDApLmdldEEoKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMTgsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWROZXN0ZWRNZXNz
YWdlICgwKS5nZXRCYigpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIxOSwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZvcmVpZ25NZXNzYWdlKDApLmdldEMoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVx
dWFscygyMjAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRJbXBvcnRNZXNzYWdlICgwKS5nZXREKCkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjI3LCBtZXNzYWdlLmdldFJlcGVhdGVkTGF6eU1lc3Nh
Z2UgICAoMCkuZ2V0QmIoKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBl
cy5OZXN0ZWRFbnVtLkJBUiwgbWVzc2FnZS5nZXRSZXBlYXRlZE5lc3RlZEVudW0gKDApKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEZvcmVpZ25FbnVtLkZPUkVJR05fQkFSLCBtZXNzYWdlLmdl
dFJlcGVhdGVkRm9yZWlnbkVudW0oMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoSW1wb3J0
RW51bS5JTVBPUlRfQkFSLCBtZXNzYWdlLmdldFJlcGVhdGVkSW1wb3J0RW51bSgwKSk7Ci0KLSAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIyMjQiLCBtZXNzYWdlLmdldFJlcGVhdGVkU3RyaW5nUGll
Y2UoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjIyNSIsIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRDb3JkKDApKTsKLQotICAgIC8vIEFjdHVhbGx5IHZlcmlmeSB0aGUgc2Vjb25kIChtb2RpZmll
ZCkgZWxlbWVudHMgbm93LgotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNTAxICAsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRJbnQzMiAgICgxKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg1MDJMICwg
bWVzc2FnZS5nZXRSZXBlYXRlZEludDY0ICAgKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDUwMyAgLCBtZXNzYWdlLmdldFJlcGVhdGVkVWludDMyICAoMSkpOwotICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoNTA0TCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRVaW50NjQgICgxKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscyg1MDUgICwgbWVzc2FnZS5nZXRSZXBlYXRlZFNpbnQzMiAgKDEpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDUwNkwgLCBtZXNzYWdlLmdldFJlcGVhdGVkU2ludDY0
ICAoMSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNTA3ICAsIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRGaXhlZDMyICgxKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg1MDhMICwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZpeGVkNjQgKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDUwOSAgLCBt
ZXNzYWdlLmdldFJlcGVhdGVkU2ZpeGVkMzIoMSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
NTEwTCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRTZml4ZWQ2NCgxKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscyg1MTFGICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0ICAgKDEpKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDUxMkQgLCBtZXNzYWdlLmdldFJlcGVhdGVkRG91YmxlICAoMSkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHModHJ1ZSAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRCb29sICAg
ICgxKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygiNTE1IiwgbWVzc2FnZS5nZXRSZXBlYXRl
ZFN0cmluZyAgKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRvQnl0ZXMoIjUxNiIpLCBt
ZXNzYWdlLmdldFJlcGVhdGVkQnl0ZXMoMSkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg1
MTcsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRHcm91cCAgICAgICAgICgxKS5nZXRBKCkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoNTE4LCBtZXNzYWdlLmdldFJlcGVhdGVkTmVzdGVkTWVzc2FnZSAo
MSkuZ2V0QmIoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg1MTksIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGb3JlaWduTWVzc2FnZSgxKS5nZXRDKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
NTIwLCBtZXNzYWdlLmdldFJlcGVhdGVkSW1wb3J0TWVzc2FnZSAoMSkuZ2V0RCgpKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDUyNywgbWVzc2FnZS5nZXRSZXBlYXRlZExhenlNZXNzYWdlICAg
KDEpLmdldEJiKCkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMuTmVz
dGVkRW51bS5GT08sIG1lc3NhZ2UuZ2V0UmVwZWF0ZWROZXN0ZWRFbnVtICgxKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscyhGb3JlaWduRW51bS5GT1JFSUdOX0ZPTywgbWVzc2FnZS5nZXRSZXBl
YXRlZEZvcmVpZ25FbnVtKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEltcG9ydEVudW0u
SU1QT1JUX0ZPTywgbWVzc2FnZS5nZXRSZXBlYXRlZEltcG9ydEVudW0oMSkpOwotCi0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygiNTI0IiwgbWVzc2FnZS5nZXRSZXBlYXRlZFN0cmluZ1BpZWNlKDEp
KTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCI1MjUiLCBtZXNzYWdlLmdldFJlcGVhdGVkQ29y
ZCgxKSk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGV2ZXJ5IGZpZWxkIG9mIHtAY29kZSBtZXNz
YWdlfSB0byBhIHVuaXF1ZSB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRQ
YWNrZWRGaWVsZHMoVGVzdFBhY2tlZFR5cGVzLkJ1aWxkZXIgbWVzc2FnZSkgewotICAgIG1lc3Nh
Z2UuYWRkUGFja2VkSW50MzIgICAoNjAxKTsKLSAgICBtZXNzYWdlLmFkZFBhY2tlZEludDY0ICAg
KDYwMik7Ci0gICAgbWVzc2FnZS5hZGRQYWNrZWRVaW50MzIgICg2MDMpOwotICAgIG1lc3NhZ2Uu
YWRkUGFja2VkVWludDY0ICAoNjA0KTsKLSAgICBtZXNzYWdlLmFkZFBhY2tlZFNpbnQzMiAgKDYw
NSk7Ci0gICAgbWVzc2FnZS5hZGRQYWNrZWRTaW50NjQgICg2MDYpOwotICAgIG1lc3NhZ2UuYWRk
UGFja2VkRml4ZWQzMiAoNjA3KTsKLSAgICBtZXNzYWdlLmFkZFBhY2tlZEZpeGVkNjQgKDYwOCk7
Ci0gICAgbWVzc2FnZS5hZGRQYWNrZWRTZml4ZWQzMig2MDkpOwotICAgIG1lc3NhZ2UuYWRkUGFj
a2VkU2ZpeGVkNjQoNjEwKTsKLSAgICBtZXNzYWdlLmFkZFBhY2tlZEZsb2F0ICAgKDYxMSk7Ci0g
ICAgbWVzc2FnZS5hZGRQYWNrZWREb3VibGUgICg2MTIpOwotICAgIG1lc3NhZ2UuYWRkUGFja2Vk
Qm9vbCAgICAodHJ1ZSk7Ci0gICAgbWVzc2FnZS5hZGRQYWNrZWRFbnVtICAgIChGb3JlaWduRW51
bS5GT1JFSUdOX0JBUik7Ci0gICAgLy8gQWRkIGEgc2Vjb25kIG9uZSBvZiBlYWNoIGZpZWxkLgot
ICAgIG1lc3NhZ2UuYWRkUGFja2VkSW50MzIgICAoNzAxKTsKLSAgICBtZXNzYWdlLmFkZFBhY2tl
ZEludDY0ICAgKDcwMik7Ci0gICAgbWVzc2FnZS5hZGRQYWNrZWRVaW50MzIgICg3MDMpOwotICAg
IG1lc3NhZ2UuYWRkUGFja2VkVWludDY0ICAoNzA0KTsKLSAgICBtZXNzYWdlLmFkZFBhY2tlZFNp
bnQzMiAgKDcwNSk7Ci0gICAgbWVzc2FnZS5hZGRQYWNrZWRTaW50NjQgICg3MDYpOwotICAgIG1l
c3NhZ2UuYWRkUGFja2VkRml4ZWQzMiAoNzA3KTsKLSAgICBtZXNzYWdlLmFkZFBhY2tlZEZpeGVk
NjQgKDcwOCk7Ci0gICAgbWVzc2FnZS5hZGRQYWNrZWRTZml4ZWQzMig3MDkpOwotICAgIG1lc3Nh
Z2UuYWRkUGFja2VkU2ZpeGVkNjQoNzEwKTsKLSAgICBtZXNzYWdlLmFkZFBhY2tlZEZsb2F0ICAg
KDcxMSk7Ci0gICAgbWVzc2FnZS5hZGRQYWNrZWREb3VibGUgICg3MTIpOwotICAgIG1lc3NhZ2Uu
YWRkUGFja2VkQm9vbCAgICAoZmFsc2UpOwotICAgIG1lc3NhZ2UuYWRkUGFja2VkRW51bSAgICAo
Rm9yZWlnbkVudW0uRk9SRUlHTl9CQVopOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBldmVyeSBm
aWVsZCBvZiB7QGNvZGUgbWVzc2FnZX0gdG8gYSB1bmlxdWUgdmFsdWUuIE11c3QgY29ycmVzcG9u
ZCB3aXRoCi0gICAqIHRoZSB2YWx1ZXMgYXBwbGllZCBieSB7QGNvZGUgc2V0UGFja2VkRmllbGRz
fS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVbnBhY2tlZEZpZWxkcyhUZXN0VW5w
YWNrZWRUeXBlcy5CdWlsZGVyIG1lc3NhZ2UpIHsKLSAgICBtZXNzYWdlLmFkZFVucGFja2VkSW50
MzIgICAoNjAxKTsKLSAgICBtZXNzYWdlLmFkZFVucGFja2VkSW50NjQgICAoNjAyKTsKLSAgICBt
ZXNzYWdlLmFkZFVucGFja2VkVWludDMyICAoNjAzKTsKLSAgICBtZXNzYWdlLmFkZFVucGFja2Vk
VWludDY0ICAoNjA0KTsKLSAgICBtZXNzYWdlLmFkZFVucGFja2VkU2ludDMyICAoNjA1KTsKLSAg
ICBtZXNzYWdlLmFkZFVucGFja2VkU2ludDY0ICAoNjA2KTsKLSAgICBtZXNzYWdlLmFkZFVucGFj
a2VkRml4ZWQzMiAoNjA3KTsKLSAgICBtZXNzYWdlLmFkZFVucGFja2VkRml4ZWQ2NCAoNjA4KTsK
LSAgICBtZXNzYWdlLmFkZFVucGFja2VkU2ZpeGVkMzIoNjA5KTsKLSAgICBtZXNzYWdlLmFkZFVu
cGFja2VkU2ZpeGVkNjQoNjEwKTsKLSAgICBtZXNzYWdlLmFkZFVucGFja2VkRmxvYXQgICAoNjEx
KTsKLSAgICBtZXNzYWdlLmFkZFVucGFja2VkRG91YmxlICAoNjEyKTsKLSAgICBtZXNzYWdlLmFk
ZFVucGFja2VkQm9vbCAgICAodHJ1ZSk7Ci0gICAgbWVzc2FnZS5hZGRVbnBhY2tlZEVudW0gICAg
KEZvcmVpZ25FbnVtLkZPUkVJR05fQkFSKTsKLSAgICAvLyBBZGQgYSBzZWNvbmQgb25lIG9mIGVh
Y2ggZmllbGQuCi0gICAgbWVzc2FnZS5hZGRVbnBhY2tlZEludDMyICAgKDcwMSk7Ci0gICAgbWVz
c2FnZS5hZGRVbnBhY2tlZEludDY0ICAgKDcwMik7Ci0gICAgbWVzc2FnZS5hZGRVbnBhY2tlZFVp
bnQzMiAgKDcwMyk7Ci0gICAgbWVzc2FnZS5hZGRVbnBhY2tlZFVpbnQ2NCAgKDcwNCk7Ci0gICAg
bWVzc2FnZS5hZGRVbnBhY2tlZFNpbnQzMiAgKDcwNSk7Ci0gICAgbWVzc2FnZS5hZGRVbnBhY2tl
ZFNpbnQ2NCAgKDcwNik7Ci0gICAgbWVzc2FnZS5hZGRVbnBhY2tlZEZpeGVkMzIgKDcwNyk7Ci0g
ICAgbWVzc2FnZS5hZGRVbnBhY2tlZEZpeGVkNjQgKDcwOCk7Ci0gICAgbWVzc2FnZS5hZGRVbnBh
Y2tlZFNmaXhlZDMyKDcwOSk7Ci0gICAgbWVzc2FnZS5hZGRVbnBhY2tlZFNmaXhlZDY0KDcxMCk7
Ci0gICAgbWVzc2FnZS5hZGRVbnBhY2tlZEZsb2F0ICAgKDcxMSk7Ci0gICAgbWVzc2FnZS5hZGRV
bnBhY2tlZERvdWJsZSAgKDcxMik7Ci0gICAgbWVzc2FnZS5hZGRVbnBhY2tlZEJvb2wgICAgKGZh
bHNlKTsKLSAgICBtZXNzYWdlLmFkZFVucGFja2VkRW51bSAgICAoRm9yZWlnbkVudW0uRk9SRUlH
Tl9CQVopOwotICB9Ci0KLSAgLyoqCi0gICAqIEFzc2VydCAodXNpbmcge0Bjb2RlIGp1bml0LmZy
YW1ld29yay5Bc3NlcnR9fSB0aGF0IGFsbCBmaWVsZHMgb2YKLSAgICoge0Bjb2RlIG1lc3NhZ2V9
IGFyZSBzZXQgdG8gdGhlIHZhbHVlcyBhc3NpZ25lZCBieSB7QGNvZGUgc2V0UGFja2VkRmllbGRz
fS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRQYWNrZWRGaWVsZHNTZXQoVGVz
dFBhY2tlZFR5cGVzIG1lc3NhZ2UpIHsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3Nh
Z2UuZ2V0UGFja2VkSW50MzJDb3VudCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIs
IG1lc3NhZ2UuZ2V0UGFja2VkSW50NjRDb3VudCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDIsIG1lc3NhZ2UuZ2V0UGFja2VkVWludDMyQ291bnQgICgpKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UGFja2VkVWludDY0Q291bnQgICgpKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UGFja2VkU2ludDMyQ291bnQgICgpKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UGFja2VkU2ludDY0Q291bnQgICgp
KTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UGFja2VkRml4ZWQzMkNv
dW50ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UGFja2VkRml4
ZWQ2NENvdW50ICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UGFj
a2VkU2ZpeGVkMzJDb3VudCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2Uu
Z2V0UGFja2VkU2ZpeGVkNjRDb3VudCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1l
c3NhZ2UuZ2V0UGFja2VkRmxvYXRDb3VudCAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDIsIG1lc3NhZ2UuZ2V0UGFja2VkRG91YmxlQ291bnQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UGFja2VkQm9vbENvdW50ICAgICgpKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UGFja2VkRW51bUNvdW50ICAgKCkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoNjAxICAsIG1lc3NhZ2UuZ2V0UGFja2VkSW50MzIgICAoMCkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjAyICAsIG1lc3NhZ2UuZ2V0UGFja2VkSW50NjQgICAo
MCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjAzICAsIG1lc3NhZ2UuZ2V0UGFja2VkVWlu
dDMyICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjA0ICAsIG1lc3NhZ2UuZ2V0UGFj
a2VkVWludDY0ICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjA1ICAsIG1lc3NhZ2Uu
Z2V0UGFja2VkU2ludDMyICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjA2ICAsIG1l
c3NhZ2UuZ2V0UGFja2VkU2ludDY0ICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjA3
ICAsIG1lc3NhZ2UuZ2V0UGFja2VkRml4ZWQzMiAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoNjA4ICAsIG1lc3NhZ2UuZ2V0UGFja2VkRml4ZWQ2NCAoMCkpOwotICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoNjA5ICAsIG1lc3NhZ2UuZ2V0UGFja2VkU2ZpeGVkMzIoMCkpOwotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoNjEwICAsIG1lc3NhZ2UuZ2V0UGFja2VkU2ZpeGVkNjQoMCkpOwotICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoNjExICAsIG1lc3NhZ2UuZ2V0UGFja2VkRmxvYXQgICAoMCks
IDAuMCk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg2MTIgICwgbWVzc2FnZS5nZXRQYWNrZWRE
b3VibGUgICgwKSwgMC4wKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRydWUgLCBtZXNzYWdl
LmdldFBhY2tlZEJvb2wgICAgKDApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEZvcmVpZ25F
bnVtLkZPUkVJR05fQkFSLCBtZXNzYWdlLmdldFBhY2tlZEVudW0oMCkpOwotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoNzAxICAsIG1lc3NhZ2UuZ2V0UGFja2VkSW50MzIgICAoMSkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoNzAyICAsIG1lc3NhZ2UuZ2V0UGFja2VkSW50NjQgICAoMSkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzAzICAsIG1lc3NhZ2UuZ2V0UGFja2VkVWludDMyICAo
MSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzA0ICAsIG1lc3NhZ2UuZ2V0UGFja2VkVWlu
dDY0ICAoMSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzA1ICAsIG1lc3NhZ2UuZ2V0UGFj
a2VkU2ludDMyICAoMSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzA2ICAsIG1lc3NhZ2Uu
Z2V0UGFja2VkU2ludDY0ICAoMSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzA3ICAsIG1l
c3NhZ2UuZ2V0UGFja2VkRml4ZWQzMiAoMSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzA4
ICAsIG1lc3NhZ2UuZ2V0UGFja2VkRml4ZWQ2NCAoMSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoNzA5ICAsIG1lc3NhZ2UuZ2V0UGFja2VkU2ZpeGVkMzIoMSkpOwotICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoNzEwICAsIG1lc3NhZ2UuZ2V0UGFja2VkU2ZpeGVkNjQoMSkpOwotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoNzExICAsIG1lc3NhZ2UuZ2V0UGFja2VkRmxvYXQgICAoMSksIDAuMCk7
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg3MTIgICwgbWVzc2FnZS5nZXRQYWNrZWREb3VibGUg
ICgxKSwgMC4wKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGZhbHNlLCBtZXNzYWdlLmdldFBh
Y2tlZEJvb2wgICAgKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEZvcmVpZ25FbnVtLkZP
UkVJR05fQkFaLCBtZXNzYWdlLmdldFBhY2tlZEVudW0oMSkpOwotICB9Ci0KLSAgLyoqCi0gICAq
IEFzc2VydCAodXNpbmcge0Bjb2RlIGp1bml0LmZyYW1ld29yay5Bc3NlcnR9fSB0aGF0IGFsbCBm
aWVsZHMgb2YKLSAgICoge0Bjb2RlIG1lc3NhZ2V9IGFyZSBzZXQgdG8gdGhlIHZhbHVlcyBhc3Np
Z25lZCBieSB7QGNvZGUgc2V0VW5wYWNrZWRGaWVsZHN9LgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyB2b2lkIGFzc2VydFVucGFja2VkRmllbGRzU2V0KFRlc3RVbnBhY2tlZFR5cGVzIG1lc3NhZ2Up
IHsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0VW5wYWNrZWRJbnQzMkNv
dW50ICAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRVbnBhY2tl
ZEludDY0Q291bnQgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdl
dFVucGFja2VkVWludDMyQ291bnQgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1l
c3NhZ2UuZ2V0VW5wYWNrZWRVaW50NjRDb3VudCAgKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMiwgbWVzc2FnZS5nZXRVbnBhY2tlZFNpbnQzMkNvdW50ICAoKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscygyLCBtZXNzYWdlLmdldFVucGFja2VkU2ludDY0Q291bnQgICgpKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0VW5wYWNrZWRGaXhlZDMyQ291bnQgKCkp
OwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRVbnBhY2tlZEZpeGVkNjRD
b3VudCAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFVucGFja2Vk
U2ZpeGVkMzJDb3VudCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0
VW5wYWNrZWRTZml4ZWQ2NENvdW50KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVz
c2FnZS5nZXRVbnBhY2tlZEZsb2F0Q291bnQgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFs
cygyLCBtZXNzYWdlLmdldFVucGFja2VkRG91YmxlQ291bnQgICgpKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0VW5wYWNrZWRCb29sQ291bnQgICAgKCkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRVbnBhY2tlZEVudW1Db3VudCAgICgpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDYwMSAgLCBtZXNzYWdlLmdldFVucGFja2VkSW50MzIg
ICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjAyICAsIG1lc3NhZ2UuZ2V0VW5wYWNr
ZWRJbnQ2NCAgICgwKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg2MDMgICwgbWVzc2FnZS5n
ZXRVbnBhY2tlZFVpbnQzMiAgKDApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDYwNCAgLCBt
ZXNzYWdlLmdldFVucGFja2VkVWludDY0ICAoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
NjA1ICAsIG1lc3NhZ2UuZ2V0VW5wYWNrZWRTaW50MzIgICgwKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscyg2MDYgICwgbWVzc2FnZS5nZXRVbnBhY2tlZFNpbnQ2NCAgKDApKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDYwNyAgLCBtZXNzYWdlLmdldFVucGFja2VkRml4ZWQzMiAoMCkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjA4ICAsIG1lc3NhZ2UuZ2V0VW5wYWNrZWRGaXhlZDY0
ICgwKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg2MDkgICwgbWVzc2FnZS5nZXRVbnBhY2tl
ZFNmaXhlZDMyKDApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDYxMCAgLCBtZXNzYWdlLmdl
dFVucGFja2VkU2ZpeGVkNjQoMCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjExICAsIG1l
c3NhZ2UuZ2V0VW5wYWNrZWRGbG9hdCAgICgwKSwgMC4wKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDYxMiAgLCBtZXNzYWdlLmdldFVucGFja2VkRG91YmxlICAoMCksIDAuMCk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscyh0cnVlICwgbWVzc2FnZS5nZXRVbnBhY2tlZEJvb2wgICAgKDApKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEZvcmVpZ25FbnVtLkZPUkVJR05fQkFSLCBtZXNzYWdl
LmdldFVucGFja2VkRW51bSgwKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg3MDEgICwgbWVz
c2FnZS5nZXRVbnBhY2tlZEludDMyICAgKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDcw
MiAgLCBtZXNzYWdlLmdldFVucGFja2VkSW50NjQgICAoMSkpOwotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoNzAzICAsIG1lc3NhZ2UuZ2V0VW5wYWNrZWRVaW50MzIgICgxKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscyg3MDQgICwgbWVzc2FnZS5nZXRVbnBhY2tlZFVpbnQ2NCAgKDEpKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDcwNSAgLCBtZXNzYWdlLmdldFVucGFja2VkU2ludDMyICAo
MSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzA2ICAsIG1lc3NhZ2UuZ2V0VW5wYWNrZWRT
aW50NjQgICgxKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg3MDcgICwgbWVzc2FnZS5nZXRV
bnBhY2tlZEZpeGVkMzIgKDEpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDcwOCAgLCBtZXNz
YWdlLmdldFVucGFja2VkRml4ZWQ2NCAoMSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzA5
ICAsIG1lc3NhZ2UuZ2V0VW5wYWNrZWRTZml4ZWQzMigxKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVx
dWFscyg3MTAgICwgbWVzc2FnZS5nZXRVbnBhY2tlZFNmaXhlZDY0KDEpKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDcxMSAgLCBtZXNzYWdlLmdldFVucGFja2VkRmxvYXQgICAoMSksIDAuMCk7
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyg3MTIgICwgbWVzc2FnZS5nZXRVbnBhY2tlZERvdWJs
ZSAgKDEpLCAwLjApOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZmFsc2UsIG1lc3NhZ2UuZ2V0
VW5wYWNrZWRCb29sICAgICgxKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyhGb3JlaWduRW51
bS5GT1JFSUdOX0JBWiwgbWVzc2FnZS5nZXRVbnBhY2tlZEVudW0oMSkpOwotICB9Ci0KLSAgLy8g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotICAvLyBMaWtlIGFib3ZlLCBidXQgZm9yIGV4dGVuc2lvbnMKLQotICAvLyBK
YXZhIGdldHMgY29uZnVzZWQgd2l0aCB0aGluZ3MgbGlrZSBhc3NlcnRFcXVhbHMoaW50LCBJbnRl
Z2VyKTogIGl0IGNhbid0Ci0gIC8vIGRlY2lkZSB3aGV0aGVyIHRvIGNhbGwgYXNzZXJ0RXF1YWxz
KGludCwgaW50KSBvciBhc3NlcnRFcXVhbHMoT2JqZWN0LAotICAvLyBPYmplY3QpLiAgU28gd2Ug
ZGVmaW5lIHRoZXNlIG1ldGhvZHMgdG8gaGVscCBpdC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBh
c3NlcnRFcXVhbHNFeGFjdFR5cGUoaW50IGEsIGludCBiKSB7Ci0gICAgQXNzZXJ0LmFzc2VydEVx
dWFscyhhLCBiKTsKLSAgfQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEVxdWFsc0V4YWN0
VHlwZShsb25nIGEsIGxvbmcgYikgewotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoYSwgYik7Ci0g
IH0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoZmxvYXQgYSwg
ZmxvYXQgYikgewotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoYSwgYiwgMC4wKTsKLSAgfQotICBw
cml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEVxdWFsc0V4YWN0VHlwZShkb3VibGUgYSwgZG91Ymxl
IGIpIHsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGEsIGIsIDAuMCk7Ci0gIH0KLSAgcHJpdmF0
ZSBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoYm9vbGVhbiBhLCBib29sZWFuIGIp
IHsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGEsIGIpOwotICB9Ci0gIHByaXZhdGUgc3RhdGlj
IHZvaWQgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKFN0cmluZyBhLCBTdHJpbmcgYikgewotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoYSwgYik7Ci0gIH0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3Nl
cnRFcXVhbHNFeGFjdFR5cGUoQnl0ZVN0cmluZyBhLCBCeXRlU3RyaW5nIGIpIHsKLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKGEsIGIpOwotICB9Ci0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0
RXF1YWxzRXhhY3RUeXBlKFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtIGEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtIGIp
IHsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGEsIGIpOwotICB9Ci0gIHByaXZhdGUgc3RhdGlj
IHZvaWQgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKEZvcmVpZ25FbnVtIGEsIEZvcmVpZ25FbnVtIGIp
IHsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGEsIGIpOwotICB9Ci0gIHByaXZhdGUgc3RhdGlj
IHZvaWQgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKEltcG9ydEVudW0gYSwgSW1wb3J0RW51bSBiKSB7
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscyhhLCBiKTsKLSAgfQotICBwcml2YXRlIHN0YXRpYyB2
b2lkIGFzc2VydEVxdWFsc0V4YWN0VHlwZShUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZEVudW0gYSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEFsbFR5cGVz
TGl0ZS5OZXN0ZWRFbnVtIGIpIHsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGEsIGIpOwotICB9
Ci0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKEZvcmVpZ25FbnVt
TGl0ZSBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3Jl
aWduRW51bUxpdGUgYikgewotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoYSwgYik7Ci0gIH0KLSAg
cHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoSW1wb3J0RW51bUxpdGUg
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wb3J0RW51
bUxpdGUgYikgewotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoYSwgYik7Ci0gIH0KLQotICAvKioK
LSAgICogR2V0IGFuIHVubW9kaWZpYWJsZSB7QGxpbmsgRXh0ZW5zaW9uUmVnaXN0cnl9IGNvbnRh
aW5pbmcgYWxsIHRoZQotICAgKiBleHRlbnNpb25zIG9mIHtAY29kZSBUZXN0QWxsRXh0ZW5zaW9u
c30uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEV4dGVuc2lvblJlZ2lzdHJ5IGdldEV4dGVuc2lv
blJlZ2lzdHJ5KCkgewotICAgIEV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gRXh0ZW5zaW9u
UmVnaXN0cnkubmV3SW5zdGFuY2UoKTsKLSAgICByZWdpc3RlckFsbEV4dGVuc2lvbnMocmVnaXN0
cnkpOwotICAgIHJldHVybiByZWdpc3RyeS5nZXRVbm1vZGlmaWFibGUoKTsKLSAgfQotCi0gIC8q
KgotICAgKiBSZWdpc3RlciBhbGwgb2Yge0Bjb2RlIFRlc3RBbGxFeHRlbnNpb25zfSdzIGV4dGVu
c2lvbnMgd2l0aCB0aGUKLSAgICogZ2l2ZW4ge0BsaW5rIEV4dGVuc2lvblJlZ2lzdHJ5fS4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZWdpc3RlckFsbEV4dGVuc2lvbnMoRXh0ZW5zaW9u
UmVnaXN0cnkgcmVnaXN0cnkpIHsKLSAgICBVbml0dGVzdFByb3RvLnJlZ2lzdGVyQWxsRXh0ZW5z
aW9ucyhyZWdpc3RyeSk7Ci0gICAgVGVzdFV0aWxMaXRlLnJlZ2lzdGVyQWxsRXh0ZW5zaW9uc0xp
dGUocmVnaXN0cnkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBldmVyeSBmaWVsZCBvZiB7QGNv
ZGUgbWVzc2FnZX0gdG8gdGhlIHZhbHVlcyBleHBlY3RlZCBieQotICAgKiB7QGNvZGUgYXNzZXJ0
QWxsRXh0ZW5zaW9uc1NldCgpfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRBbGxF
eHRlbnNpb25zKFRlc3RBbGxFeHRlbnNpb25zLkJ1aWxkZXIgbWVzc2FnZSkgewotICAgIG1lc3Nh
Z2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsSW50MzJFeHRlbnNpb24gICAsIDEwMSk7Ci0gICAgbWVz
c2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxJbnQ2NEV4dGVuc2lvbiAgICwgMTAyTCk7Ci0gICAg
bWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxVaW50MzJFeHRlbnNpb24gICwgMTAzKTsKLSAg
ICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbFVpbnQ2NEV4dGVuc2lvbiAgLCAxMDRMKTsK
LSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbFNpbnQzMkV4dGVuc2lvbiAgLCAxMDUp
OwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsU2ludDY0RXh0ZW5zaW9uICAsIDEw
NkwpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsRml4ZWQzMkV4dGVuc2lvbiAs
IDEwNyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxGaXhlZDY0RXh0ZW5zaW9u
ICwgMTA4TCk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxTZml4ZWQzMkV4dGVu
c2lvbiwgMTA5KTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbFNmaXhlZDY0RXh0
ZW5zaW9uLCAxMTBMKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbEZsb2F0RXh0
ZW5zaW9uICAgLCAxMTFGKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbERvdWJs
ZUV4dGVuc2lvbiAgLCAxMTJEKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbEJv
b2xFeHRlbnNpb24gICAgLCB0cnVlKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25h
bFN0cmluZ0V4dGVuc2lvbiAgLCAiMTE1Iik7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0
aW9uYWxCeXRlc0V4dGVuc2lvbiAgICwgdG9CeXRlcygiMTE2IikpOwotCi0gICAgbWVzc2FnZS5z
ZXRFeHRlbnNpb24ob3B0aW9uYWxHcm91cEV4dGVuc2lvbiwKLSAgICAgIE9wdGlvbmFsR3JvdXBf
ZXh0ZW5zaW9uLm5ld0J1aWxkZXIoKS5zZXRBKDExNykuYnVpbGQoKSk7Ci0gICAgbWVzc2FnZS5z
ZXRFeHRlbnNpb24ob3B0aW9uYWxOZXN0ZWRNZXNzYWdlRXh0ZW5zaW9uLAotICAgICAgVGVzdEFs
bFR5cGVzLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDExOCkuYnVpbGQoKSk7Ci0g
ICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxGb3JlaWduTWVzc2FnZUV4dGVuc2lvbiwK
LSAgICAgIEZvcmVpZ25NZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRDKDExOSkuYnVpbGQoKSk7Ci0g
ICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uLAot
ICAgICAgSW1wb3J0TWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0RCgxMjApLmJ1aWxkKCkpOwotICAg
IG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsUHVibGljSW1wb3J0TWVzc2FnZUV4dGVuc2lv
biwKLSAgICAgIFB1YmxpY0ltcG9ydE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEUoMTI2KS5idWls
ZCgpKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbExhenlNZXNzYWdlRXh0ZW5z
aW9uLAotICAgICAgVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJi
KDEyNykuYnVpbGQoKSk7Ci0KLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbE5lc3Rl
ZEVudW1FeHRlbnNpb24sIFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkJBWik7Ci0gICAgbWVzc2Fn
ZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxGb3JlaWduRW51bUV4dGVuc2lvbiwgRm9yZWlnbkVudW0u
Rk9SRUlHTl9CQVopOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsSW1wb3J0RW51
bUV4dGVuc2lvbiwgSW1wb3J0RW51bS5JTVBPUlRfQkFaKTsKLQotICAgIG1lc3NhZ2Uuc2V0RXh0
ZW5zaW9uKG9wdGlvbmFsU3RyaW5nUGllY2VFeHRlbnNpb24sICIxMjQiKTsKLSAgICBtZXNzYWdl
LnNldEV4dGVuc2lvbihvcHRpb25hbENvcmRFeHRlbnNpb24sICIxMjUiKTsKLQotICAgIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEludDMyRXh0ZW5zaW9u
ICAgLCAyMDEpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkSW50NjRFeHRlbnNp
b24gICAsIDIwMkwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkVWludDMyRXh0
ZW5zaW9uICAsIDIwMyk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRVaW50NjRF
eHRlbnNpb24gICwgMjA0TCk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRTaW50
MzJFeHRlbnNpb24gICwgMjA1KTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZFNp
bnQ2NEV4dGVuc2lvbiAgLCAyMDZMKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRl
ZEZpeGVkMzJFeHRlbnNpb24gLCAyMDcpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVh
dGVkRml4ZWQ2NEV4dGVuc2lvbiAsIDIwOEwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJl
cGVhdGVkU2ZpeGVkMzJFeHRlbnNpb24sIDIwOSk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24o
cmVwZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbiwgMjEwTCk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNp
b24ocmVwZWF0ZWRGbG9hdEV4dGVuc2lvbiAgICwgMjExRik7Ci0gICAgbWVzc2FnZS5hZGRFeHRl
bnNpb24ocmVwZWF0ZWREb3VibGVFeHRlbnNpb24gICwgMjEyRCk7Ci0gICAgbWVzc2FnZS5hZGRF
eHRlbnNpb24ocmVwZWF0ZWRCb29sRXh0ZW5zaW9uICAgICwgdHJ1ZSk7Ci0gICAgbWVzc2FnZS5h
ZGRFeHRlbnNpb24ocmVwZWF0ZWRTdHJpbmdFeHRlbnNpb24gICwgIjIxNSIpOwotICAgIG1lc3Nh
Z2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkQnl0ZXNFeHRlbnNpb24gICAsIHRvQnl0ZXMoIjIxNiIp
KTsKLQotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkR3JvdXBFeHRlbnNpb24sCi0g
ICAgICBSZXBlYXRlZEdyb3VwX2V4dGVuc2lvbi5uZXdCdWlsZGVyKCkuc2V0QSgyMTcpLmJ1aWxk
KCkpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkTmVzdGVkTWVzc2FnZUV4dGVu
c2lvbiwKLSAgICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRC
YigyMTgpLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWln
bk1lc3NhZ2VFeHRlbnNpb24sCi0gICAgICBGb3JlaWduTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0
QygyMTkpLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkSW1wb3J0
TWVzc2FnZUV4dGVuc2lvbiwKLSAgICAgIEltcG9ydE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEQo
MjIwKS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZExhenlNZXNz
YWdlRXh0ZW5zaW9uLAotICAgICAgVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRl
cigpLnNldEJiKDIyNykuYnVpbGQoKSk7Ci0KLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBl
YXRlZE5lc3RlZEVudW1FeHRlbnNpb24sIFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkJBUik7Ci0g
ICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRGb3JlaWduRW51bUV4dGVuc2lvbiwgRm9y
ZWlnbkVudW0uRk9SRUlHTl9CQVIpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVk
SW1wb3J0RW51bUV4dGVuc2lvbiwgSW1wb3J0RW51bS5JTVBPUlRfQkFSKTsKLQotICAgIG1lc3Nh
Z2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkU3RyaW5nUGllY2VFeHRlbnNpb24sICIyMjQiKTsKLSAg
ICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZENvcmRFeHRlbnNpb24sICIyMjUiKTsKLQot
ICAgIC8vIEFkZCBhIHNlY29uZCBvbmUgb2YgZWFjaCBmaWVsZC4KLSAgICBtZXNzYWdlLmFkZEV4
dGVuc2lvbihyZXBlYXRlZEludDMyRXh0ZW5zaW9uICAgLCAzMDEpOwotICAgIG1lc3NhZ2UuYWRk
RXh0ZW5zaW9uKHJlcGVhdGVkSW50NjRFeHRlbnNpb24gICAsIDMwMkwpOwotICAgIG1lc3NhZ2Uu
YWRkRXh0ZW5zaW9uKHJlcGVhdGVkVWludDMyRXh0ZW5zaW9uICAsIDMwMyk7Ci0gICAgbWVzc2Fn
ZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRVaW50NjRFeHRlbnNpb24gICwgMzA0TCk7Ci0gICAgbWVz
c2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRTaW50MzJFeHRlbnNpb24gICwgMzA1KTsKLSAgICBt
ZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZFNpbnQ2NEV4dGVuc2lvbiAgLCAzMDZMKTsKLSAg
ICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEZpeGVkMzJFeHRlbnNpb24gLCAzMDcpOwot
ICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkRml4ZWQ2NEV4dGVuc2lvbiAsIDMwOEwp
OwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkU2ZpeGVkMzJFeHRlbnNpb24sIDMw
OSk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbiwg
MzEwTCk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRGbG9hdEV4dGVuc2lvbiAg
ICwgMzExRik7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWREb3VibGVFeHRlbnNp
b24gICwgMzEyRCk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRCb29sRXh0ZW5z
aW9uICAgICwgZmFsc2UpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkU3RyaW5n
RXh0ZW5zaW9uICAsICIzMTUiKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEJ5
dGVzRXh0ZW5zaW9uICAgLCB0b0J5dGVzKCIzMTYiKSk7Ci0KLSAgICBtZXNzYWdlLmFkZEV4dGVu
c2lvbihyZXBlYXRlZEdyb3VwRXh0ZW5zaW9uLAotICAgICAgUmVwZWF0ZWRHcm91cF9leHRlbnNp
b24ubmV3QnVpbGRlcigpLnNldEEoMzE3KS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVu
c2lvbihyZXBlYXRlZE5lc3RlZE1lc3NhZ2VFeHRlbnNpb24sCi0gICAgICBUZXN0QWxsVHlwZXMu
TmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0QmIoMzE4KS5idWlsZCgpKTsKLSAgICBtZXNz
YWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9uLAotICAgICAg
Rm9yZWlnbk1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEMoMzE5KS5idWlsZCgpKTsKLSAgICBtZXNz
YWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEltcG9ydE1lc3NhZ2VFeHRlbnNpb24sCi0gICAgICBJ
bXBvcnRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXREKDMyMCkuYnVpbGQoKSk7Ci0gICAgbWVzc2Fn
ZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRMYXp5TWVzc2FnZUV4dGVuc2lvbiwKLSAgICAgIFRlc3RB
bGxUeXBlcy5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYigzMjcpLmJ1aWxkKCkpOwot
Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWROZXN0ZWRFbnVtRXh0ZW5zaW9uLCBU
ZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVopOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJl
cGVhdGVkRm9yZWlnbkVudW1FeHRlbnNpb24sIEZvcmVpZ25FbnVtLkZPUkVJR05fQkFaKTsKLSAg
ICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEltcG9ydEVudW1FeHRlbnNpb24sIEltcG9y
dEVudW0uSU1QT1JUX0JBWik7Ci0KLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZFN0
cmluZ1BpZWNlRXh0ZW5zaW9uLCAiMzI0Iik7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVw
ZWF0ZWRDb3JkRXh0ZW5zaW9uLCAiMzI1Iik7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgbWVz
c2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdEludDMyRXh0ZW5zaW9uICAgLCA0MDEpOwotICAgIG1l
c3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRJbnQ2NEV4dGVuc2lvbiAgICwgNDAyTCk7Ci0gICAg
bWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdFVpbnQzMkV4dGVuc2lvbiAgLCA0MDMpOwotICAg
IG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRVaW50NjRFeHRlbnNpb24gICwgNDA0TCk7Ci0g
ICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdFNpbnQzMkV4dGVuc2lvbiAgLCA0MDUpOwot
ICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRTaW50NjRFeHRlbnNpb24gICwgNDA2TCk7
Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdEZpeGVkMzJFeHRlbnNpb24gLCA0MDcp
OwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRGaXhlZDY0RXh0ZW5zaW9uICwgNDA4
TCk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdFNmaXhlZDMyRXh0ZW5zaW9uLCA0
MDkpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRTZml4ZWQ2NEV4dGVuc2lvbiwg
NDEwTCk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdEZsb2F0RXh0ZW5zaW9uICAg
LCA0MTFGKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihkZWZhdWx0RG91YmxlRXh0ZW5zaW9u
ICAsIDQxMkQpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRCb29sRXh0ZW5zaW9u
ICAgICwgZmFsc2UpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRTdHJpbmdFeHRl
bnNpb24gICwgIjQxNSIpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRCeXRlc0V4
dGVuc2lvbiAgICwgdG9CeXRlcygiNDE2IikpOwotCi0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24o
ZGVmYXVsdE5lc3RlZEVudW1FeHRlbnNpb24sIFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkZPTyk7
Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdEZvcmVpZ25FbnVtRXh0ZW5zaW9uLCBG
b3JlaWduRW51bS5GT1JFSUdOX0ZPTyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVs
dEltcG9ydEVudW1FeHRlbnNpb24sIEltcG9ydEVudW0uSU1QT1JUX0ZPTyk7Ci0KLSAgICBtZXNz
YWdlLnNldEV4dGVuc2lvbihkZWZhdWx0U3RyaW5nUGllY2VFeHRlbnNpb24sICI0MjQiKTsKLSAg
ICBtZXNzYWdlLnNldEV4dGVuc2lvbihkZWZhdWx0Q29yZEV4dGVuc2lvbiwgIjQyNSIpOwotCi0g
ICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob25lb2ZVaW50MzJFeHRlbnNpb24sIDYwMSk7Ci0gICAg
bWVzc2FnZS5zZXRFeHRlbnNpb24ob25lb2ZOZXN0ZWRNZXNzYWdlRXh0ZW5zaW9uLAotICAgICAg
VGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDYwMikuYnVpbGQo
KSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob25lb2ZTdHJpbmdFeHRlbnNpb24sICI2MDMi
KTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvbmVvZkJ5dGVzRXh0ZW5zaW9uLCB0b0J5dGVz
KCI2MDQiKSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLyoqCi0gICAqIE1vZGlmeSB0
aGUgcmVwZWF0ZWQgZXh0ZW5zaW9ucyBvZiB7QGNvZGUgbWVzc2FnZX0gdG8gY29udGFpbiB0aGUg
dmFsdWVzCi0gICAqIGV4cGVjdGVkIGJ5IHtAY29kZSBhc3NlcnRSZXBlYXRlZEV4dGVuc2lvbnNN
b2RpZmllZCgpfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtb2RpZnlSZXBlYXRlZEV4
dGVuc2lvbnMoCi0gICAgICBUZXN0QWxsRXh0ZW5zaW9ucy5CdWlsZGVyIG1lc3NhZ2UpIHsKLSAg
ICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRlZEludDMyRXh0ZW5zaW9uICAgLCAxLCA1MDEp
OwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkSW50NjRFeHRlbnNpb24gICAsIDEs
IDUwMkwpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkVWludDMyRXh0ZW5zaW9u
ICAsIDEsIDUwMyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRVaW50NjRFeHRl
bnNpb24gICwgMSwgNTA0TCk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRTaW50
MzJFeHRlbnNpb24gICwgMSwgNTA1KTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRl
ZFNpbnQ2NEV4dGVuc2lvbiAgLCAxLCA1MDZMKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihy
ZXBlYXRlZEZpeGVkMzJFeHRlbnNpb24gLCAxLCA1MDcpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5z
aW9uKHJlcGVhdGVkRml4ZWQ2NEV4dGVuc2lvbiAsIDEsIDUwOEwpOwotICAgIG1lc3NhZ2Uuc2V0
RXh0ZW5zaW9uKHJlcGVhdGVkU2ZpeGVkMzJFeHRlbnNpb24sIDEsIDUwOSk7Ci0gICAgbWVzc2Fn
ZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbiwgMSwgNTEwTCk7Ci0gICAg
bWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRGbG9hdEV4dGVuc2lvbiAgICwgMSwgNTExRik7
Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWREb3VibGVFeHRlbnNpb24gICwgMSwg
NTEyRCk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRCb29sRXh0ZW5zaW9uICAg
ICwgMSwgdHJ1ZSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRTdHJpbmdFeHRl
bnNpb24gICwgMSwgIjUxNSIpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkQnl0
ZXNFeHRlbnNpb24gICAsIDEsIHRvQnl0ZXMoIjUxNiIpKTsKLQotICAgIG1lc3NhZ2Uuc2V0RXh0
ZW5zaW9uKHJlcGVhdGVkR3JvdXBFeHRlbnNpb24sIDEsCi0gICAgICBSZXBlYXRlZEdyb3VwX2V4
dGVuc2lvbi5uZXdCdWlsZGVyKCkuc2V0QSg1MTcpLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2Uuc2V0
RXh0ZW5zaW9uKHJlcGVhdGVkTmVzdGVkTWVzc2FnZUV4dGVuc2lvbiwgMSwKLSAgICAgIFRlc3RB
bGxUeXBlcy5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYig1MTgpLmJ1aWxkKCkpOwot
ICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VFeHRlbnNpb24s
IDEsCi0gICAgICBGb3JlaWduTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0Qyg1MTkpLmJ1aWxkKCkp
OwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkSW1wb3J0TWVzc2FnZUV4dGVuc2lv
biwgMSwKLSAgICAgIEltcG9ydE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEQoNTIwKS5idWlsZCgp
KTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRlZExhenlNZXNzYWdlRXh0ZW5zaW9u
LCAxLAotICAgICAgVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJi
KDUyNykuYnVpbGQoKSk7Ci0KLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRlZE5lc3Rl
ZEVudW1FeHRlbnNpb24gLCAxLCBUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5GT08pOwotICAgIG1l
c3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbkVudW1FeHRlbnNpb24sIDEsIEZvcmVp
Z25FbnVtLkZPUkVJR05fRk9PKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRlZElt
cG9ydEVudW1FeHRlbnNpb24gLCAxLCBJbXBvcnRFbnVtLklNUE9SVF9GT08pOwotCi0gICAgbWVz
c2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRTdHJpbmdQaWVjZUV4dGVuc2lvbiwgMSwgIjUyNCIp
OwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkQ29yZEV4dGVuc2lvbiwgMSwgIjUy
NSIpOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8qKgotICAgKiBBc3NlcnQgKHVzaW5n
IHtAY29kZSBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0fX0gdGhhdCBhbGwgZXh0ZW5zaW9ucyBvZgot
ICAgKiB7QGNvZGUgbWVzc2FnZX0gYXJlIHNldCB0byB0aGUgdmFsdWVzIGFzc2lnbmVkIGJ5IHtA
Y29kZSBzZXRBbGxFeHRlbnNpb25zfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3Nl
cnRBbGxFeHRlbnNpb25zU2V0KAotICAgICAgVGVzdEFsbEV4dGVuc2lvbnNPckJ1aWxkZXIgbWVz
c2FnZSkgewotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlv
bmFsSW50MzJFeHRlbnNpb24gICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhh
c0V4dGVuc2lvbihvcHRpb25hbEludDY0RXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxVaW50MzJFeHRlbnNpb24gICkpOwot
ICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsVWludDY0
RXh0ZW5zaW9uICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lv
bihvcHRpb25hbFNpbnQzMkV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVz
c2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxTaW50NjRFeHRlbnNpb24gICkpOwotICAgIEFzc2Vy
dC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsRml4ZWQzMkV4dGVuc2lv
biApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25h
bEZpeGVkNjRFeHRlbnNpb24gKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNF
eHRlbnNpb24ob3B0aW9uYWxTZml4ZWQzMkV4dGVuc2lvbikpOwotICAgIEFzc2VydC5hc3NlcnRU
cnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsU2ZpeGVkNjRFeHRlbnNpb24pKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbEZsb2F0RXh0
ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24o
b3B0aW9uYWxEb3VibGVFeHRlbnNpb24gICkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3Nh
Z2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsQm9vbEV4dGVuc2lvbiAgICApKTsKLSAgICBBc3NlcnQu
YXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbFN0cmluZ0V4dGVuc2lvbiAg
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxC
eXRlc0V4dGVuc2lvbiAgICkpOwotCi0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNF
eHRlbnNpb24ob3B0aW9uYWxHcm91cEV4dGVuc2lvbiAgICAgICAgICkpOwotICAgIEFzc2VydC5h
c3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsTmVzdGVkTWVzc2FnZUV4dGVu
c2lvbiApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRp
b25hbEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9uKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVz
c2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uICkpOwotCi0g
ICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxHcm91cEV4
dGVuc2lvbiAgICAgICAgICkuaGFzQSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdl
LmdldEV4dGVuc2lvbihvcHRpb25hbE5lc3RlZE1lc3NhZ2VFeHRlbnNpb24gKS5oYXNCYigpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbEZvcmVp
Z25NZXNzYWdlRXh0ZW5zaW9uKS5oYXNDKCkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsSW1wb3J0TWVzc2FnZUV4dGVuc2lvbiApLmhhc0QoKSk7
Ci0KLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbE5l
c3RlZEVudW1FeHRlbnNpb24gKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNF
eHRlbnNpb24ob3B0aW9uYWxGb3JlaWduRW51bUV4dGVuc2lvbikpOwotICAgIEFzc2VydC5hc3Nl
cnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsSW1wb3J0RW51bUV4dGVuc2lvbiAp
KTsKLQotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFs
U3RyaW5nUGllY2VFeHRlbnNpb24pKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhh
c0V4dGVuc2lvbihvcHRpb25hbENvcmRFeHRlbnNpb24pKTsKLQotICAgIGFzc2VydEVxdWFsc0V4
YWN0VHlwZSgxMDEgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxJbnQzMkV4dGVuc2lv
biAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMDJMICwgbWVzc2FnZS5nZXRFeHRl
bnNpb24ob3B0aW9uYWxJbnQ2NEV4dGVuc2lvbiAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0
VHlwZSgxMDMgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxVaW50MzJFeHRlbnNpb24g
ICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMDRMICwgbWVzc2FnZS5nZXRFeHRlbnNp
b24ob3B0aW9uYWxVaW50NjRFeHRlbnNpb24gICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSgxMDUgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxTaW50MzJFeHRlbnNpb24gICkp
OwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMDZMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24o
b3B0aW9uYWxTaW50NjRFeHRlbnNpb24gICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgx
MDcgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGaXhlZDMyRXh0ZW5zaW9uICkpOwot
ICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMDhMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0
aW9uYWxGaXhlZDY0RXh0ZW5zaW9uICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMDkg
ICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxTZml4ZWQzMkV4dGVuc2lvbikpOwotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMTBMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9u
YWxTZml4ZWQ2NEV4dGVuc2lvbikpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMTFGICwg
bWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGbG9hdEV4dGVuc2lvbiAgICkpOwotICAgIGFz
c2VydEVxdWFsc0V4YWN0VHlwZSgxMTJEICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxE
b3VibGVFeHRlbnNpb24gICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSh0cnVlICwgbWVz
c2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxCb29sRXh0ZW5zaW9uICAgICkpOwotICAgIGFzc2Vy
dEVxdWFsc0V4YWN0VHlwZSgiMTE1IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxTdHJp
bmdFeHRlbnNpb24gICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSh0b0J5dGVzKCIxMTYi
KSwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxCeXRlc0V4dGVuc2lvbikpOwotCi0gICAg
YXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDExNywgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxH
cm91cEV4dGVuc2lvbiAgICAgICAgICAgICAgKS5nZXRBKCkpOwotICAgIGFzc2VydEVxdWFsc0V4
YWN0VHlwZSgxMTgsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsTmVzdGVkTWVzc2FnZUV4
dGVuc2lvbiAgICAgICkuZ2V0QmIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDExOSwg
bWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGb3JlaWduTWVzc2FnZUV4dGVuc2lvbiAgICAg
KS5nZXRDKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMjAsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uKG9wdGlvbmFsSW1wb3J0TWVzc2FnZUV4dGVuc2lvbiAgICAgICkuZ2V0RCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMTI2LCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25h
bFB1YmxpY0ltcG9ydE1lc3NhZ2VFeHRlbnNpb24pLmdldEUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKDEyNywgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxMYXp5TWVzc2FnZUV4
dGVuc2lvbiAgICAgICAgKS5nZXRCYigpKTsKLQotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShU
ZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVosCi0gICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihv
cHRpb25hbE5lc3RlZEVudW1FeHRlbnNpb24pKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
Rm9yZWlnbkVudW0uRk9SRUlHTl9CQVosCi0gICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRp
b25hbEZvcmVpZ25FbnVtRXh0ZW5zaW9uKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKElt
cG9ydEVudW0uSU1QT1JUX0JBWiwKLSAgICAgIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFs
SW1wb3J0RW51bUV4dGVuc2lvbikpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCIxMjQi
LCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbFN0cmluZ1BpZWNlRXh0ZW5zaW9uKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCIxMjUiLCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRp
b25hbENvcmRFeHRlbnNpb24pKTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRJbnQzMkV4dGVu
c2lvbiAgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNp
b25Db3VudChyZXBlYXRlZEludDY0RXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVx
dWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkVWludDMyRXh0ZW5zaW9u
ICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291
bnQocmVwZWF0ZWRVaW50NjRFeHRlbnNpb24gICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
MiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFNpbnQzMkV4dGVuc2lvbiAgKSk7
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJl
cGVhdGVkU2ludDY0RXh0ZW5zaW9uICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRGaXhlZDMyRXh0ZW5zaW9uICkpOwotICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRl
ZEZpeGVkNjRFeHRlbnNpb24gKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdl
LmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkU2ZpeGVkMzJFeHRlbnNpb24pKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRTZml4
ZWQ2NEV4dGVuc2lvbikpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRF
eHRlbnNpb25Db3VudChyZXBlYXRlZEZsb2F0RXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkRG91YmxlRXh0
ZW5zaW9uICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uQ291bnQocmVwZWF0ZWRCb29sRXh0ZW5zaW9uICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFN0cmluZ0V4dGVuc2lv
biAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNv
dW50KHJlcGVhdGVkQnl0ZXNFeHRlbnNpb24gICApKTsKLQotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEdyb3VwRXh0ZW5zaW9uICAg
ICAgICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lv
bkNvdW50KHJlcGVhdGVkTmVzdGVkTWVzc2FnZUV4dGVuc2lvbiApKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRGb3JlaWduTWVz
c2FnZUV4dGVuc2lvbikpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRF
eHRlbnNpb25Db3VudChyZXBlYXRlZEltcG9ydE1lc3NhZ2VFeHRlbnNpb24gKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkTGF6
eU1lc3NhZ2VFeHRlbnNpb24gICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWROZXN0ZWRFbnVtRXh0ZW5zaW9uICAgICkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBl
YXRlZEZvcmVpZ25FbnVtRXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygy
LCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkSW1wb3J0RW51bUV4dGVuc2lvbiAg
ICApKTsKLQotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25D
b3VudChyZXBlYXRlZFN0cmluZ1BpZWNlRXh0ZW5zaW9uKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVx
dWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkQ29yZEV4dGVuc2lvbikp
OwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIwMSAgLCBtZXNzYWdlLmdldEV4dGVuc2lv
bihyZXBlYXRlZEludDMyRXh0ZW5zaW9uICAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RU
eXBlKDIwMkwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEludDY0RXh0ZW5zaW9uICAg
LCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIwMyAgLCBtZXNzYWdlLmdldEV4dGVu
c2lvbihyZXBlYXRlZFVpbnQzMkV4dGVuc2lvbiAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhh
Y3RUeXBlKDIwNEwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFVpbnQ2NEV4dGVuc2lv
biAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIwNSAgLCBtZXNzYWdlLmdldEV4
dGVuc2lvbihyZXBlYXRlZFNpbnQzMkV4dGVuc2lvbiAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKDIwNkwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFNpbnQ2NEV4dGVu
c2lvbiAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIwNyAgLCBtZXNzYWdlLmdl
dEV4dGVuc2lvbihyZXBlYXRlZEZpeGVkMzJFeHRlbnNpb24gLCAwKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzRXhhY3RUeXBlKDIwOEwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEZpeGVkNjRF
eHRlbnNpb24gLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIwOSAgLCBtZXNzYWdl
LmdldEV4dGVuc2lvbihyZXBlYXRlZFNmaXhlZDMyRXh0ZW5zaW9uLCAwKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzRXhhY3RUeXBlKDIxMEwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFNmaXhl
ZDY0RXh0ZW5zaW9uLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIxMUYgLCBtZXNz
YWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEZsb2F0RXh0ZW5zaW9uICAgLCAwKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKDIxMkQgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZERv
dWJsZUV4dGVuc2lvbiAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKHRydWUgLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEJvb2xFeHRlbnNpb24gICAgLCAwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCIyMTUiLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRl
ZFN0cmluZ0V4dGVuc2lvbiAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKHRvQnl0
ZXMoIjIxNiIpLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEJ5dGVzRXh0ZW5zaW9uLCAw
KSk7Ci0KLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMjE3LCBtZXNzYWdlLmdldEV4dGVuc2lv
bihyZXBlYXRlZEdyb3VwRXh0ZW5zaW9uICAgICAgICAgLCAwKS5nZXRBKCkpOwotICAgIGFzc2Vy
dEVxdWFsc0V4YWN0VHlwZSgyMTgsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkTmVzdGVk
TWVzc2FnZUV4dGVuc2lvbiAsIDApLmdldEJiKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSgyMTksIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VFeHRlbnNp
b24sIDApLmdldEMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIyMCwgbWVzc2FnZS5n
ZXRFeHRlbnNpb24ocmVwZWF0ZWRJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uICwgMCkuZ2V0RCgpKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMjI3LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBl
YXRlZExhenlNZXNzYWdlRXh0ZW5zaW9uICAgLCAwKS5nZXRCYigpKTsKLQotICAgIGFzc2VydEVx
dWFsc0V4YWN0VHlwZShUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVIsCi0gICAgICBtZXNzYWdl
LmdldEV4dGVuc2lvbihyZXBlYXRlZE5lc3RlZEVudW1FeHRlbnNpb24sIDApKTsKLSAgICBhc3Nl
cnRFcXVhbHNFeGFjdFR5cGUoRm9yZWlnbkVudW0uRk9SRUlHTl9CQVIsCi0gICAgICBtZXNzYWdl
LmdldEV4dGVuc2lvbihyZXBlYXRlZEZvcmVpZ25FbnVtRXh0ZW5zaW9uLCAwKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKEltcG9ydEVudW0uSU1QT1JUX0JBUiwKLSAgICAgIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKHJlcGVhdGVkSW1wb3J0RW51bUV4dGVuc2lvbiwgMCkpOwotCi0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKCIyMjQiLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFN0
cmluZ1BpZWNlRXh0ZW5zaW9uLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCIyMjUi
LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZENvcmRFeHRlbnNpb24sIDApKTsKLQotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMDEgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0
ZWRJbnQzMkV4dGVuc2lvbiAgICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMDJM
ICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbnQ2NEV4dGVuc2lvbiAgICwgMSkpOwot
ICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMDMgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVw
ZWF0ZWRVaW50MzJFeHRlbnNpb24gICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgz
MDRMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRVaW50NjRFeHRlbnNpb24gICwgMSkp
OwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMDUgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24o
cmVwZWF0ZWRTaW50MzJFeHRlbnNpb24gICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSgzMDZMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTaW50NjRFeHRlbnNpb24gICwg
MSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMDcgICwgbWVzc2FnZS5nZXRFeHRlbnNp
b24ocmVwZWF0ZWRGaXhlZDMyRXh0ZW5zaW9uICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0
VHlwZSgzMDhMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRGaXhlZDY0RXh0ZW5zaW9u
ICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMDkgICwgbWVzc2FnZS5nZXRFeHRl
bnNpb24ocmVwZWF0ZWRTZml4ZWQzMkV4dGVuc2lvbiwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4
YWN0VHlwZSgzMTBMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTZml4ZWQ2NEV4dGVu
c2lvbiwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMTFGICwgbWVzc2FnZS5nZXRF
eHRlbnNpb24ocmVwZWF0ZWRGbG9hdEV4dGVuc2lvbiAgICwgMSkpOwotICAgIGFzc2VydEVxdWFs
c0V4YWN0VHlwZSgzMTJEICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWREb3VibGVFeHRl
bnNpb24gICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShmYWxzZSwgbWVzc2FnZS5n
ZXRFeHRlbnNpb24ocmVwZWF0ZWRCb29sRXh0ZW5zaW9uICAgICwgMSkpOwotICAgIGFzc2VydEVx
dWFsc0V4YWN0VHlwZSgiMzE1IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTdHJpbmdF
eHRlbnNpb24gICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSh0b0J5dGVzKCIzMTYi
KSwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRCeXRlc0V4dGVuc2lvbiwgMSkpOwotCi0g
ICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDMxNywgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0
ZWRHcm91cEV4dGVuc2lvbiAgICAgICAgICwgMSkuZ2V0QSgpKTsKLSAgICBhc3NlcnRFcXVhbHNF
eGFjdFR5cGUoMzE4LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZE5lc3RlZE1lc3NhZ2VF
eHRlbnNpb24gLCAxKS5nZXRCYigpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMzE5LCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9uLCAxKS5n
ZXRDKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMjAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKHJlcGVhdGVkSW1wb3J0TWVzc2FnZUV4dGVuc2lvbiAsIDEpLmdldEQoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKDMyNywgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRMYXp5
TWVzc2FnZUV4dGVuc2lvbiAgICwgMSkuZ2V0QmIoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHNFeGFj
dFR5cGUoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFaLAotICAgICAgbWVzc2FnZS5nZXRFeHRl
bnNpb24ocmVwZWF0ZWROZXN0ZWRFbnVtRXh0ZW5zaW9uLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKEZvcmVpZ25FbnVtLkZPUkVJR05fQkFaLAotICAgICAgbWVzc2FnZS5nZXRFeHRl
bnNpb24ocmVwZWF0ZWRGb3JlaWduRW51bUV4dGVuc2lvbiwgMSkpOwotICAgIGFzc2VydEVxdWFs
c0V4YWN0VHlwZShJbXBvcnRFbnVtLklNUE9SVF9CQVosCi0gICAgICBtZXNzYWdlLmdldEV4dGVu
c2lvbihyZXBlYXRlZEltcG9ydEVudW1FeHRlbnNpb24sIDEpKTsKLQotICAgIGFzc2VydEVxdWFs
c0V4YWN0VHlwZSgiMzI0IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTdHJpbmdQaWVj
ZUV4dGVuc2lvbiwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgiMzI1IiwgbWVzc2Fn
ZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRDb3JkRXh0ZW5zaW9uLCAxKSk7Ci0KLSAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVs
dEludDMyRXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNF
eHRlbnNpb24oZGVmYXVsdEludDY0RXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRy
dWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdFVpbnQzMkV4dGVuc2lvbiAgKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdFVpbnQ2NEV4dGVu
c2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVm
YXVsdFNpbnQzMkV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5o
YXNFeHRlbnNpb24oZGVmYXVsdFNpbnQ2NEV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEZpeGVkMzJFeHRlbnNpb24gKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEZpeGVkNjRF
eHRlbnNpb24gKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24o
ZGVmYXVsdFNmaXhlZDMyRXh0ZW5zaW9uKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2Fn
ZS5oYXNFeHRlbnNpb24oZGVmYXVsdFNmaXhlZDY0RXh0ZW5zaW9uKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEZsb2F0RXh0ZW5zaW9uICAgKSk7
Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdERvdWJs
ZUV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNp
b24oZGVmYXVsdEJvb2xFeHRlbnNpb24gICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVz
c2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdFN0cmluZ0V4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEJ5dGVzRXh0ZW5zaW9uICAg
KSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0
TmVzdGVkRW51bUV4dGVuc2lvbiApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhh
c0V4dGVuc2lvbihkZWZhdWx0Rm9yZWlnbkVudW1FeHRlbnNpb24pKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0SW1wb3J0RW51bUV4dGVuc2lvbiAp
KTsKLQotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKGRlZmF1bHRT
dHJpbmdQaWVjZUV4dGVuc2lvbikpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFz
RXh0ZW5zaW9uKGRlZmF1bHRDb3JkRXh0ZW5zaW9uKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHNFeGFj
dFR5cGUoNDAxICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRlZmF1bHRJbnQzMkV4dGVuc2lvbiAg
ICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MDJMICwgbWVzc2FnZS5nZXRFeHRlbnNp
b24oZGVmYXVsdEludDY0RXh0ZW5zaW9uICAgKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBl
KDQwMyAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0VWludDMyRXh0ZW5zaW9uICApKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNDA0TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRl
ZmF1bHRVaW50NjRFeHRlbnNpb24gICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MDUg
ICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFNpbnQzMkV4dGVuc2lvbiAgKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDQwNkwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0
U2ludDY0RXh0ZW5zaW9uICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNDA3ICAsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKGRlZmF1bHRGaXhlZDMyRXh0ZW5zaW9uICkpOwotICAgIGFzc2Vy
dEVxdWFsc0V4YWN0VHlwZSg0MDhMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEZpeGVk
NjRFeHRlbnNpb24gKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDQwOSAgLCBtZXNzYWdl
LmdldEV4dGVuc2lvbihkZWZhdWx0U2ZpeGVkMzJFeHRlbnNpb24pKTsKLSAgICBhc3NlcnRFcXVh
bHNFeGFjdFR5cGUoNDEwTCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRlZmF1bHRTZml4ZWQ2NEV4
dGVuc2lvbikpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MTFGICwgbWVzc2FnZS5nZXRF
eHRlbnNpb24oZGVmYXVsdEZsb2F0RXh0ZW5zaW9uICAgKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhh
Y3RUeXBlKDQxMkQgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0RG91YmxlRXh0ZW5zaW9u
ICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoZmFsc2UsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKGRlZmF1bHRCb29sRXh0ZW5zaW9uICAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSgiNDE1IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFN0cmluZ0V4dGVuc2lvbiAgKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKHRvQnl0ZXMoIjQxNiIpLCBtZXNzYWdlLmdldEV4
dGVuc2lvbihkZWZhdWx0Qnl0ZXNFeHRlbnNpb24pKTsKLQotICAgIGFzc2VydEVxdWFsc0V4YWN0
VHlwZShUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5GT08sCi0gICAgICBtZXNzYWdlLmdldEV4dGVu
c2lvbihkZWZhdWx0TmVzdGVkRW51bUV4dGVuc2lvbiApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFj
dFR5cGUoRm9yZWlnbkVudW0uRk9SRUlHTl9GT08sCi0gICAgICBtZXNzYWdlLmdldEV4dGVuc2lv
bihkZWZhdWx0Rm9yZWlnbkVudW1FeHRlbnNpb24pKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5
cGUoSW1wb3J0RW51bS5JTVBPUlRfRk9PLAotICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVm
YXVsdEltcG9ydEVudW1FeHRlbnNpb24pKTsKLQotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgi
NDI0IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFN0cmluZ1BpZWNlRXh0ZW5zaW9uKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCI0MjUiLCBtZXNzYWdlLmdldEV4dGVuc2lvbihk
ZWZhdWx0Q29yZEV4dGVuc2lvbikpOwotCi0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5o
YXNFeHRlbnNpb24ob25lb2ZCeXRlc0V4dGVuc2lvbikpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhh
Y3RUeXBlKHRvQnl0ZXMoIjYwNCIpLCBtZXNzYWdlLmdldEV4dGVuc2lvbihvbmVvZkJ5dGVzRXh0
ZW5zaW9uKSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLyoqCi0gICAqIEFzc2VydCAo
dXNpbmcge0Bjb2RlIGp1bml0LmZyYW1ld29yay5Bc3NlcnR9fSB0aGF0IGFsbCBleHRlbnNpb25z
IG9mCi0gICAqIHtAY29kZSBtZXNzYWdlfSBhcmUgY2xlYXJlZCwgYW5kIHRoYXQgZ2V0dGluZyB0
aGUgZXh0ZW5zaW9ucyByZXR1cm5zIHRoZWlyCi0gICAqIGRlZmF1bHQgdmFsdWVzLgotICAgKi8K
LSAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydEV4dGVuc2lvbnNDbGVhcihUZXN0QWxsRXh0ZW5z
aW9uc09yQnVpbGRlciBtZXNzYWdlKSB7Ci0gICAgLy8gaGFzQmxhaCgpIHNob3VsZCBpbml0aWFs
bHkgYmUgZmFsc2UgZm9yIGFsbCBvcHRpb25hbCBmaWVsZHMuCi0gICAgQXNzZXJ0LmFzc2VydEZh
bHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsSW50MzJFeHRlbnNpb24gICApKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxJbnQ2NEV4
dGVuc2lvbiAgICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lv
bihvcHRpb25hbFVpbnQzMkV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1l
c3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsVWludDY0RXh0ZW5zaW9uICApKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxTaW50MzJFeHRlbnNp
b24gICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRp
b25hbFNpbnQ2NEV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2Uu
aGFzRXh0ZW5zaW9uKG9wdGlvbmFsRml4ZWQzMkV4dGVuc2lvbiApKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxGaXhlZDY0RXh0ZW5zaW9uICkp
OwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbFNm
aXhlZDMyRXh0ZW5zaW9uKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0
ZW5zaW9uKG9wdGlvbmFsU2ZpeGVkNjRFeHRlbnNpb24pKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFs
c2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxGbG9hdEV4dGVuc2lvbiAgICkpOwotICAg
IEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbERvdWJsZUV4
dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KG9wdGlvbmFsQm9vbEV4dGVuc2lvbiAgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVz
c2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxTdHJpbmdFeHRlbnNpb24gICkpOwotICAgIEFzc2Vy
dC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbEJ5dGVzRXh0ZW5zaW9u
ICAgKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0
aW9uYWxHcm91cEV4dGVuc2lvbiAgICAgICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbE5lc3RlZE1lc3NhZ2VFeHRlbnNpb24gKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsRm9yZWln
bk1lc3NhZ2VFeHRlbnNpb24pKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNF
eHRlbnNpb24ob3B0aW9uYWxJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uICkpOwotCi0gICAgQXNzZXJ0
LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsTmVzdGVkRW51bUV4dGVu
c2lvbiApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0
aW9uYWxGb3JlaWduRW51bUV4dGVuc2lvbikpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNz
YWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbEltcG9ydEVudW1FeHRlbnNpb24gKSk7Ci0KLSAgICBB
c3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxTdHJpbmdQaWVj
ZUV4dGVuc2lvbikpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lv
bihvcHRpb25hbENvcmRFeHRlbnNpb24pKTsKLQotICAgIC8vIE9wdGlvbmFsIGZpZWxkcyB3aXRo
b3V0IGRlZmF1bHRzIGFyZSBzZXQgdG8gemVybyBvciBzb21ldGhpbmcgbGlrZSBpdC4KLSAgICBh
c3NlcnRFcXVhbHNFeGFjdFR5cGUoMCAgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFs
SW50MzJFeHRlbnNpb24gICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMEwgICAsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsSW50NjRFeHRlbnNpb24gICApKTsKLSAgICBhc3Nl
cnRFcXVhbHNFeGFjdFR5cGUoMCAgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsVWlu
dDMyRXh0ZW5zaW9uICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMEwgICAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsVWludDY0RXh0ZW5zaW9uICApKTsKLSAgICBhc3NlcnRF
cXVhbHNFeGFjdFR5cGUoMCAgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsU2ludDMy
RXh0ZW5zaW9uICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMEwgICAsIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKG9wdGlvbmFsU2ludDY0RXh0ZW5zaW9uICApKTsKLSAgICBhc3NlcnRFcXVh
bHNFeGFjdFR5cGUoMCAgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsRml4ZWQzMkV4
dGVuc2lvbiApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMEwgICAsIG1lc3NhZ2UuZ2V0
RXh0ZW5zaW9uKG9wdGlvbmFsRml4ZWQ2NEV4dGVuc2lvbiApKTsKLSAgICBhc3NlcnRFcXVhbHNF
eGFjdFR5cGUoMCAgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsU2ZpeGVkMzJFeHRl
bnNpb24pKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMEwgICAsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uKG9wdGlvbmFsU2ZpeGVkNjRFeHRlbnNpb24pKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFj
dFR5cGUoMEYgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsRmxvYXRFeHRlbnNpb24g
ICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMEQgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKG9wdGlvbmFsRG91YmxlRXh0ZW5zaW9uICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5
cGUoZmFsc2UsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsQm9vbEV4dGVuc2lvbiAgICAp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIiIgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KG9wdGlvbmFsU3RyaW5nRXh0ZW5zaW9uICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
Qnl0ZVN0cmluZy5FTVBUWSwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxCeXRlc0V4dGVu
c2lvbikpOwotCi0gICAgLy8gRW1iZWRkZWQgbWVzc2FnZXMgc2hvdWxkIGFsc28gYmUgY2xlYXIu
Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsR3Jv
dXBFeHRlbnNpb24gICAgICAgICApLmhhc0EoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsTmVzdGVkTWVzc2FnZUV4dGVuc2lvbiApLmhhc0Ji
KCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25h
bEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9uKS5oYXNDKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxz
ZShtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbEltcG9ydE1lc3NhZ2VFeHRlbnNpb24gKS5o
YXNEKCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKG9wdGlvbmFsR3JvdXBFeHRlbnNpb24gICAgICAgICApLmdldEEoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzRXhhY3RUeXBlKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsTmVzdGVkTWVz
c2FnZUV4dGVuc2lvbiApLmdldEJiKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgwLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9uKS5nZXRD
KCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgwLCBtZXNzYWdlLmdldEV4dGVuc2lvbihv
cHRpb25hbEltcG9ydE1lc3NhZ2VFeHRlbnNpb24gKS5nZXREKCkpOwotCi0gICAgLy8gRW51bXMg
d2l0aG91dCBkZWZhdWx0cyBhcmUgc2V0IHRvIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUgZW51bS4K
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uRk9PLAot
ICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxOZXN0ZWRFbnVtRXh0ZW5zaW9uICkp
OwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShGb3JlaWduRW51bS5GT1JFSUdOX0ZPTywKLSAg
ICAgIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsRm9yZWlnbkVudW1FeHRlbnNpb24pKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoSW1wb3J0RW51bS5JTVBPUlRfRk9PLAotICAgICAg
bWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxJbXBvcnRFbnVtRXh0ZW5zaW9uKSk7Ci0KLSAg
ICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIiIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFs
U3RyaW5nUGllY2VFeHRlbnNpb24pKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIiIsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsQ29yZEV4dGVuc2lvbikpOwotCi0gICAgLy8gUmVw
ZWF0ZWQgZmllbGRzIGFyZSBlbXB0eS4KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRJbnQzMkV4dGVuc2lvbiAgICkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZElu
dDY0RXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdl
dEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkVWludDMyRXh0ZW5zaW9uICApKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRVaW50NjRF
eHRlbnNpb24gICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRl
bnNpb25Db3VudChyZXBlYXRlZFNpbnQzMkV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkU2ludDY0RXh0ZW5z
aW9uICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
Q291bnQocmVwZWF0ZWRGaXhlZDMyRXh0ZW5zaW9uICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEZpeGVkNjRFeHRlbnNpb24g
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50
KHJlcGVhdGVkU2ZpeGVkMzJFeHRlbnNpb24pKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbikpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBl
YXRlZEZsb2F0RXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNz
YWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkRG91YmxlRXh0ZW5zaW9uICApKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRC
b29sRXh0ZW5zaW9uICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5n
ZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFN0cmluZ0V4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkQnl0ZXNF
eHRlbnNpb24gICApKTsKLQotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRF
eHRlbnNpb25Db3VudChyZXBlYXRlZEdyb3VwRXh0ZW5zaW9uICAgICAgICAgKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkTmVz
dGVkTWVzc2FnZUV4dGVuc2lvbiApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRGb3JlaWduTWVzc2FnZUV4dGVuc2lvbikpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBl
YXRlZEltcG9ydE1lc3NhZ2VFeHRlbnNpb24gKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygw
LCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkTGF6eU1lc3NhZ2VFeHRlbnNpb24g
ICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291
bnQocmVwZWF0ZWROZXN0ZWRFbnVtRXh0ZW5zaW9uICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEZvcmVpZ25FbnVtRXh0
ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVu
c2lvbkNvdW50KHJlcGVhdGVkSW1wb3J0RW51bUV4dGVuc2lvbiAgICApKTsKLQotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFN0cmlu
Z1BpZWNlRXh0ZW5zaW9uKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdl
dEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkQ29yZEV4dGVuc2lvbikpOwotCi0gICAgLy8gUmVwZWF0
ZWQgZmllbGRzIGFyZSBlbXB0eSB2aWEgZ2V0RXh0ZW5zaW9uKCkuc2l6ZSgpLgotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbnQzMkV4dGVu
c2lvbiAgICkuc2l6ZSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0
RXh0ZW5zaW9uKHJlcGVhdGVkSW50NjRFeHRlbnNpb24gICApLnNpemUoKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFVpbnQzMkV4dGVu
c2lvbiAgKS5zaXplKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRF
eHRlbnNpb24ocmVwZWF0ZWRVaW50NjRFeHRlbnNpb24gICkuc2l6ZSgpKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2ludDMyRXh0ZW5z
aW9uICApLnNpemUoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4
dGVuc2lvbihyZXBlYXRlZFNpbnQ2NEV4dGVuc2lvbiAgKS5zaXplKCkpOwotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRGaXhlZDMyRXh0ZW5z
aW9uICkuc2l6ZSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uKHJlcGVhdGVkRml4ZWQ2NEV4dGVuc2lvbiApLnNpemUoKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFNmaXhlZDMyRXh0ZW5z
aW9uKS5zaXplKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRl
bnNpb24ocmVwZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbikuc2l6ZSgpKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRmxvYXRFeHRlbnNpb24g
ICApLnNpemUoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVu
c2lvbihyZXBlYXRlZERvdWJsZUV4dGVuc2lvbiAgKS5zaXplKCkpOwotICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRCb29sRXh0ZW5zaW9uICAg
ICkuc2l6ZSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKHJlcGVhdGVkU3RyaW5nRXh0ZW5zaW9uICApLnNpemUoKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEJ5dGVzRXh0ZW5zaW9uICAg
KS5zaXplKCkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVu
c2lvbihyZXBlYXRlZEdyb3VwRXh0ZW5zaW9uICAgICAgICAgKS5zaXplKCkpOwotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWROZXN0ZWRNZXNz
YWdlRXh0ZW5zaW9uICkuc2l6ZSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VFeHRlbnNpb24pLnNpemUoKSk7
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRl
ZEltcG9ydE1lc3NhZ2VFeHRlbnNpb24gKS5zaXplKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRMYXp5TWVzc2FnZUV4dGVuc2lvbiAg
ICkuc2l6ZSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKHJlcGVhdGVkTmVzdGVkRW51bUV4dGVuc2lvbiAgICApLnNpemUoKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEZvcmVpZ25FbnVt
RXh0ZW5zaW9uICAgKS5zaXplKCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2Fn
ZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbXBvcnRFbnVtRXh0ZW5zaW9uICAgICkuc2l6ZSgpKTsK
LQotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0
ZWRTdHJpbmdQaWVjZUV4dGVuc2lvbikuc2l6ZSgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkQ29yZEV4dGVuc2lvbikuc2l6ZSgpKTsK
LQotICAgIC8vIGhhc0JsYWgoKSBzaG91bGQgYWxzbyBiZSBmYWxzZSBmb3IgYWxsIGRlZmF1bHQg
ZmllbGRzLgotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZh
dWx0SW50MzJFeHRlbnNpb24gICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5o
YXNFeHRlbnNpb24oZGVmYXVsdEludDY0RXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKGRlZmF1bHRVaW50MzJFeHRlbnNpb24gICkpOwot
ICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0VWludDY0
RXh0ZW5zaW9uICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNp
b24oZGVmYXVsdFNpbnQzMkV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1l
c3NhZ2UuaGFzRXh0ZW5zaW9uKGRlZmF1bHRTaW50NjRFeHRlbnNpb24gICkpOwotICAgIEFzc2Vy
dC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0Rml4ZWQzMkV4dGVuc2lv
biApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVs
dEZpeGVkNjRFeHRlbnNpb24gKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFz
RXh0ZW5zaW9uKGRlZmF1bHRTZml4ZWQzMkV4dGVuc2lvbikpOwotICAgIEFzc2VydC5hc3NlcnRG
YWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0U2ZpeGVkNjRFeHRlbnNpb24pKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEZsb2F0RXh0
ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KGRlZmF1bHREb3VibGVFeHRlbnNpb24gICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNz
YWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0Qm9vbEV4dGVuc2lvbiAgICApKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdFN0cmluZ0V4dGVuc2lvbiAg
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKGRlZmF1bHRC
eXRlc0V4dGVuc2lvbiAgICkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFz
RXh0ZW5zaW9uKGRlZmF1bHROZXN0ZWRFbnVtRXh0ZW5zaW9uICkpOwotICAgIEFzc2VydC5hc3Nl
cnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0Rm9yZWlnbkVudW1FeHRlbnNpb24p
KTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdElt
cG9ydEVudW1FeHRlbnNpb24gKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5o
YXNFeHRlbnNpb24oZGVmYXVsdFN0cmluZ1BpZWNlRXh0ZW5zaW9uKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKGRlZmF1bHRDb3JkRXh0ZW5zaW9uKSk7Ci0K
LSAgICAvLyBGaWVsZHMgd2l0aCBkZWZhdWx0cyBoYXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzIChk
dWgpLgotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSggNDEgICAgLCBtZXNzYWdlLmdldEV4dGVu
c2lvbihkZWZhdWx0SW50MzJFeHRlbnNpb24gICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5
cGUoIDQyTCAgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEludDY0RXh0ZW5zaW9uICAg
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCA0MyAgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKGRlZmF1bHRVaW50MzJFeHRlbnNpb24gICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSggNDRMICAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0VWludDY0RXh0ZW5zaW9uICAp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoLTQ1ICAgICwgbWVzc2FnZS5nZXRFeHRlbnNp
b24oZGVmYXVsdFNpbnQzMkV4dGVuc2lvbiAgKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBl
KCA0NkwgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRlZmF1bHRTaW50NjRFeHRlbnNpb24gICkp
OwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSggNDcgICAgLCBtZXNzYWdlLmdldEV4dGVuc2lv
bihkZWZhdWx0Rml4ZWQzMkV4dGVuc2lvbiApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
IDQ4TCAgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEZpeGVkNjRFeHRlbnNpb24gKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCA0OSAgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KGRlZmF1bHRTZml4ZWQzMkV4dGVuc2lvbikpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgt
NTBMICAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0U2ZpeGVkNjRFeHRlbnNpb24pKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIDUxLjVGICwgbWVzc2FnZS5nZXRFeHRlbnNpb24o
ZGVmYXVsdEZsb2F0RXh0ZW5zaW9uICAgKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCA1
MmUzRCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRlZmF1bHREb3VibGVFeHRlbnNpb24gICkpOwot
ICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSh0cnVlICAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihk
ZWZhdWx0Qm9vbEV4dGVuc2lvbiAgICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoImhl
bGxvIiwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFN0cmluZ0V4dGVuc2lvbiAgKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKHRvQnl0ZXMoIndvcmxkIiksIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uKGRlZmF1bHRCeXRlc0V4dGVuc2lvbikpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RU
eXBlKFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkJBUiwKLSAgICAgIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKGRlZmF1bHROZXN0ZWRFbnVtRXh0ZW5zaW9uICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0
VHlwZShGb3JlaWduRW51bS5GT1JFSUdOX0JBUiwKLSAgICAgIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KGRlZmF1bHRGb3JlaWduRW51bUV4dGVuc2lvbikpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZShJbXBvcnRFbnVtLklNUE9SVF9CQVIsCi0gICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZh
dWx0SW1wb3J0RW51bUV4dGVuc2lvbikpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCJh
YmMiLCBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0U3RyaW5nUGllY2VFeHRlbnNpb24pKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIjEyMyIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRl
ZmF1bHRDb3JkRXh0ZW5zaW9uKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5o
YXNFeHRlbnNpb24ob25lb2ZVaW50MzJFeHRlbnNpb24pKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFs
c2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob25lb2ZOZXN0ZWRNZXNzYWdlRXh0ZW5zaW9uKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9uZW9mU3RyaW5nRXh0
ZW5zaW9uKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9u
ZW9mQnl0ZXNFeHRlbnNpb24pKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvKioKLSAg
ICogQXNzZXJ0ICh1c2luZyB7QGNvZGUganVuaXQuZnJhbWV3b3JrLkFzc2VydH19IHRoYXQgYWxs
IGV4dGVuc2lvbnMgb2YKLSAgICoge0Bjb2RlIG1lc3NhZ2V9IGFyZSBzZXQgdG8gdGhlIHZhbHVl
cyBhc3NpZ25lZCBieSB7QGNvZGUgc2V0QWxsRXh0ZW5zaW9uc30KLSAgICogZm9sbG93ZWQgYnkg
e0Bjb2RlIG1vZGlmeVJlcGVhdGVkRXh0ZW5zaW9uc30uCi0gICAqLwotICBwdWJsaWMgc3RhdGlj
IHZvaWQgYXNzZXJ0UmVwZWF0ZWRFeHRlbnNpb25zTW9kaWZpZWQoCi0gICAgICBUZXN0QWxsRXh0
ZW5zaW9uc09yQnVpbGRlciBtZXNzYWdlKSB7Ci0gICAgLy8gTW9kaWZ5UmVwZWF0ZWRGaWVsZHMg
b25seSBzZXRzIHRoZSBzZWNvbmQgcmVwZWF0ZWQgZWxlbWVudCBvZiBlYWNoCi0gICAgLy8gZmll
bGQuICBJbiBhZGRpdGlvbiB0byB2ZXJpZnlpbmcgdGhpcywgd2UgYWxzbyB2ZXJpZnkgdGhhdCB0
aGUgZmlyc3QKLSAgICAvLyBlbGVtZW50IGFuZCBzaXplIHdlcmUgKm5vdCogbW9kaWZpZWQuCi0g
ICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVh
dGVkSW50MzJFeHRlbnNpb24gICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRJbnQ2NEV4dGVuc2lvbiAgICkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFVp
bnQzMkV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdl
dEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkVWludDY0RXh0ZW5zaW9uICApKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRTaW50MzJF
eHRlbnNpb24gICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRl
bnNpb25Db3VudChyZXBlYXRlZFNpbnQ2NEV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkRml4ZWQzMkV4dGVu
c2lvbiApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
Q291bnQocmVwZWF0ZWRGaXhlZDY0RXh0ZW5zaW9uICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFNmaXhlZDMyRXh0ZW5zaW9u
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50
KHJlcGVhdGVkU2ZpeGVkNjRFeHRlbnNpb24pKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRGbG9hdEV4dGVuc2lvbiAgICkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBl
YXRlZERvdWJsZUV4dGVuc2lvbiAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNz
YWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkQm9vbEV4dGVuc2lvbiAgICApKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRT
dHJpbmdFeHRlbnNpb24gICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5n
ZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEJ5dGVzRXh0ZW5zaW9uICAgKSk7Ci0KLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRHcm91
cEV4dGVuc2lvbiAgICAgICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2Fn
ZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZE5lc3RlZE1lc3NhZ2VFeHRlbnNpb24gKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVh
dGVkRm9yZWlnbk1lc3NhZ2VFeHRlbnNpb24pKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRJbXBvcnRNZXNzYWdlRXh0ZW5zaW9u
ICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3Vu
dChyZXBlYXRlZExhenlNZXNzYWdlRXh0ZW5zaW9uICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVx
dWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkTmVzdGVkRW51bUV4dGVu
c2lvbiAgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uQ291bnQocmVwZWF0ZWRGb3JlaWduRW51bUV4dGVuc2lvbiAgICkpOwotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEltcG9ydEVu
dW1FeHRlbnNpb24gICAgKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRTdHJpbmdQaWVjZUV4dGVuc2lvbikpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZENv
cmRFeHRlbnNpb24pKTsKLQotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDEgICwgbWVzc2Fn
ZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbnQzMkV4dGVuc2lvbiAgICwgMCkpOwotICAgIGFzc2Vy
dEVxdWFsc0V4YWN0VHlwZSgyMDJMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbnQ2
NEV4dGVuc2lvbiAgICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDMgICwgbWVz
c2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRVaW50MzJFeHRlbnNpb24gICwgMCkpOwotICAgIGFz
c2VydEVxdWFsc0V4YWN0VHlwZSgyMDRMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRV
aW50NjRFeHRlbnNpb24gICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDUgICwg
bWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTaW50MzJFeHRlbnNpb24gICwgMCkpOwotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDZMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0
ZWRTaW50NjRFeHRlbnNpb24gICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDcg
ICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRGaXhlZDMyRXh0ZW5zaW9uICwgMCkpOwot
ICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDhMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVw
ZWF0ZWRGaXhlZDY0RXh0ZW5zaW9uICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgy
MDkgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTZml4ZWQzMkV4dGVuc2lvbiwgMCkp
OwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMTBMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24o
cmVwZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbiwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSgyMTFGICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRGbG9hdEV4dGVuc2lvbiAgICwg
MCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMTJEICwgbWVzc2FnZS5nZXRFeHRlbnNp
b24ocmVwZWF0ZWREb3VibGVFeHRlbnNpb24gICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0
VHlwZSh0cnVlICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRCb29sRXh0ZW5zaW9uICAg
ICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgiMjE1IiwgbWVzc2FnZS5nZXRFeHRl
bnNpb24ocmVwZWF0ZWRTdHJpbmdFeHRlbnNpb24gICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4
YWN0VHlwZSh0b0J5dGVzKCIyMTYiKSwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRCeXRl
c0V4dGVuc2lvbiwgMCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIxNywgbWVzc2Fn
ZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRHcm91cEV4dGVuc2lvbiAgICAgICAgICwgMCkuZ2V0QSgp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMjE4LCBtZXNzYWdlLmdldEV4dGVuc2lvbihy
ZXBlYXRlZE5lc3RlZE1lc3NhZ2VFeHRlbnNpb24gLCAwKS5nZXRCYigpKTsKLSAgICBhc3NlcnRF
cXVhbHNFeGFjdFR5cGUoMjE5LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEZvcmVpZ25N
ZXNzYWdlRXh0ZW5zaW9uLCAwKS5nZXRDKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgy
MjAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkSW1wb3J0TWVzc2FnZUV4dGVuc2lvbiAs
IDApLmdldEQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIyNywgbWVzc2FnZS5nZXRF
eHRlbnNpb24ocmVwZWF0ZWRMYXp5TWVzc2FnZUV4dGVuc2lvbiAgICwgMCkuZ2V0QmIoKSk7Ci0K
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFSLAot
ICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWROZXN0ZWRFbnVtRXh0ZW5zaW9uLCAw
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKEZvcmVpZ25FbnVtLkZPUkVJR05fQkFSLAot
ICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRGb3JlaWduRW51bUV4dGVuc2lvbiwg
MCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShJbXBvcnRFbnVtLklNUE9SVF9CQVIsCi0g
ICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEltcG9ydEVudW1FeHRlbnNpb24sIDAp
KTsKLQotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgiMjI0IiwgbWVzc2FnZS5nZXRFeHRlbnNp
b24ocmVwZWF0ZWRTdHJpbmdQaWVjZUV4dGVuc2lvbiwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4
YWN0VHlwZSgiMjI1IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRDb3JkRXh0ZW5zaW9u
LCAwKSk7Ci0KLSAgICAvLyBBY3R1YWxseSB2ZXJpZnkgdGhlIHNlY29uZCAobW9kaWZpZWQpIGVs
ZW1lbnRzIG5vdy4KLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTAxICAsIG1lc3NhZ2UuZ2V0
RXh0ZW5zaW9uKHJlcGVhdGVkSW50MzJFeHRlbnNpb24gICAsIDEpKTsKLSAgICBhc3NlcnRFcXVh
bHNFeGFjdFR5cGUoNTAyTCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkSW50NjRFeHRl
bnNpb24gICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTAzICAsIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKHJlcGVhdGVkVWludDMyRXh0ZW5zaW9uICAsIDEpKTsKLSAgICBhc3NlcnRF
cXVhbHNFeGFjdFR5cGUoNTA0TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkVWludDY0
RXh0ZW5zaW9uICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTA1ICAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2ludDMyRXh0ZW5zaW9uICAsIDEpKTsKLSAgICBhc3Nl
cnRFcXVhbHNFeGFjdFR5cGUoNTA2TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2lu
dDY0RXh0ZW5zaW9uICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTA3ICAsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRml4ZWQzMkV4dGVuc2lvbiAsIDEpKTsKLSAgICBh
c3NlcnRFcXVhbHNFeGFjdFR5cGUoNTA4TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVk
Rml4ZWQ2NEV4dGVuc2lvbiAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTA5ICAs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2ZpeGVkMzJFeHRlbnNpb24sIDEpKTsKLSAg
ICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTEwTCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVh
dGVkU2ZpeGVkNjRFeHRlbnNpb24sIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTEx
RiAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRmxvYXRFeHRlbnNpb24gICAsIDEpKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTEyRCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJl
cGVhdGVkRG91YmxlRXh0ZW5zaW9uICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
dHJ1ZSAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkQm9vbEV4dGVuc2lvbiAgICAsIDEp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIjUxNSIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KHJlcGVhdGVkU3RyaW5nRXh0ZW5zaW9uICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5
cGUodG9CeXRlcygiNTE2IiksIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkQnl0ZXNFeHRl
bnNpb24sIDEpKTsKLQotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg1MTcsIG1lc3NhZ2UuZ2V0
RXh0ZW5zaW9uKHJlcGVhdGVkR3JvdXBFeHRlbnNpb24gICAgICAgICAsIDEpLmdldEEoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDUxOCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0
ZWROZXN0ZWRNZXNzYWdlRXh0ZW5zaW9uICwgMSkuZ2V0QmIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKDUxOSwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRGb3JlaWduTWVzc2Fn
ZUV4dGVuc2lvbiwgMSkuZ2V0QygpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTIwLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEltcG9ydE1lc3NhZ2VFeHRlbnNpb24gLCAxKS5n
ZXREKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg1MjcsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKHJlcGVhdGVkTGF6eU1lc3NhZ2VFeHRlbnNpb24gICAsIDEpLmdldEJiKCkpOwotCi0gICAg
YXNzZXJ0RXF1YWxzRXhhY3RUeXBlKFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkZPTywKLSAgICAg
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkTmVzdGVkRW51bUV4dGVuc2lvbiwgMSkpOwot
ICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShGb3JlaWduRW51bS5GT1JFSUdOX0ZPTywKLSAgICAg
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbkVudW1FeHRlbnNpb24sIDEpKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoSW1wb3J0RW51bS5JTVBPUlRfRk9PLAotICAgICAg
bWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbXBvcnRFbnVtRXh0ZW5zaW9uLCAxKSk7Ci0K
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIjUyNCIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJl
cGVhdGVkU3RyaW5nUGllY2VFeHRlbnNpb24sIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5
cGUoIjUyNSIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkQ29yZEV4dGVuc2lvbiwgMSkp
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldFBhY2tlZEV4dGVuc2lvbnMoVGVzdFBh
Y2tlZEV4dGVuc2lvbnMuQnVpbGRlciBtZXNzYWdlKSB7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNp
b24ocGFja2VkSW50MzJFeHRlbnNpb24gICAsIDYwMSk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNp
b24ocGFja2VkSW50NjRFeHRlbnNpb24gICAsIDYwMkwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5z
aW9uKHBhY2tlZFVpbnQzMkV4dGVuc2lvbiAgLCA2MDMpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5z
aW9uKHBhY2tlZFVpbnQ2NEV4dGVuc2lvbiAgLCA2MDRMKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVu
c2lvbihwYWNrZWRTaW50MzJFeHRlbnNpb24gICwgNjA1KTsKLSAgICBtZXNzYWdlLmFkZEV4dGVu
c2lvbihwYWNrZWRTaW50NjRFeHRlbnNpb24gICwgNjA2TCk7Ci0gICAgbWVzc2FnZS5hZGRFeHRl
bnNpb24ocGFja2VkRml4ZWQzMkV4dGVuc2lvbiAsIDYwNyk7Ci0gICAgbWVzc2FnZS5hZGRFeHRl
bnNpb24ocGFja2VkRml4ZWQ2NEV4dGVuc2lvbiAsIDYwOEwpOwotICAgIG1lc3NhZ2UuYWRkRXh0
ZW5zaW9uKHBhY2tlZFNmaXhlZDMyRXh0ZW5zaW9uLCA2MDkpOwotICAgIG1lc3NhZ2UuYWRkRXh0
ZW5zaW9uKHBhY2tlZFNmaXhlZDY0RXh0ZW5zaW9uLCA2MTBMKTsKLSAgICBtZXNzYWdlLmFkZEV4
dGVuc2lvbihwYWNrZWRGbG9hdEV4dGVuc2lvbiAgICwgNjExRik7Ci0gICAgbWVzc2FnZS5hZGRF
eHRlbnNpb24ocGFja2VkRG91YmxlRXh0ZW5zaW9uICAsIDYxMkQpOwotICAgIG1lc3NhZ2UuYWRk
RXh0ZW5zaW9uKHBhY2tlZEJvb2xFeHRlbnNpb24gICAgLCB0cnVlKTsKLSAgICBtZXNzYWdlLmFk
ZEV4dGVuc2lvbihwYWNrZWRFbnVtRXh0ZW5zaW9uLCBGb3JlaWduRW51bS5GT1JFSUdOX0JBUik7
Ci0gICAgLy8gQWRkIGEgc2Vjb25kIG9uZSBvZiBlYWNoIGZpZWxkLgotICAgIG1lc3NhZ2UuYWRk
RXh0ZW5zaW9uKHBhY2tlZEludDMyRXh0ZW5zaW9uICAgLCA3MDEpOwotICAgIG1lc3NhZ2UuYWRk
RXh0ZW5zaW9uKHBhY2tlZEludDY0RXh0ZW5zaW9uICAgLCA3MDJMKTsKLSAgICBtZXNzYWdlLmFk
ZEV4dGVuc2lvbihwYWNrZWRVaW50MzJFeHRlbnNpb24gICwgNzAzKTsKLSAgICBtZXNzYWdlLmFk
ZEV4dGVuc2lvbihwYWNrZWRVaW50NjRFeHRlbnNpb24gICwgNzA0TCk7Ci0gICAgbWVzc2FnZS5h
ZGRFeHRlbnNpb24ocGFja2VkU2ludDMyRXh0ZW5zaW9uICAsIDcwNSk7Ci0gICAgbWVzc2FnZS5h
ZGRFeHRlbnNpb24ocGFja2VkU2ludDY0RXh0ZW5zaW9uICAsIDcwNkwpOwotICAgIG1lc3NhZ2Uu
YWRkRXh0ZW5zaW9uKHBhY2tlZEZpeGVkMzJFeHRlbnNpb24gLCA3MDcpOwotICAgIG1lc3NhZ2Uu
YWRkRXh0ZW5zaW9uKHBhY2tlZEZpeGVkNjRFeHRlbnNpb24gLCA3MDhMKTsKLSAgICBtZXNzYWdl
LmFkZEV4dGVuc2lvbihwYWNrZWRTZml4ZWQzMkV4dGVuc2lvbiwgNzA5KTsKLSAgICBtZXNzYWdl
LmFkZEV4dGVuc2lvbihwYWNrZWRTZml4ZWQ2NEV4dGVuc2lvbiwgNzEwTCk7Ci0gICAgbWVzc2Fn
ZS5hZGRFeHRlbnNpb24ocGFja2VkRmxvYXRFeHRlbnNpb24gICAsIDcxMUYpOwotICAgIG1lc3Nh
Z2UuYWRkRXh0ZW5zaW9uKHBhY2tlZERvdWJsZUV4dGVuc2lvbiAgLCA3MTJEKTsKLSAgICBtZXNz
YWdlLmFkZEV4dGVuc2lvbihwYWNrZWRCb29sRXh0ZW5zaW9uICAgICwgZmFsc2UpOwotICAgIG1l
c3NhZ2UuYWRkRXh0ZW5zaW9uKHBhY2tlZEVudW1FeHRlbnNpb24sIEZvcmVpZ25FbnVtLkZPUkVJ
R05fQkFaKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRQYWNrZWRFeHRlbnNp
b25zU2V0KFRlc3RQYWNrZWRFeHRlbnNpb25zIG1lc3NhZ2UpIHsKLSAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2VkSW50MzJFeHRlbnNpb24g
ICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291
bnQocGFja2VkSW50NjRFeHRlbnNpb24gICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2VkVWludDMyRXh0ZW5zaW9uICApKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2Vk
VWludDY0RXh0ZW5zaW9uICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uQ291bnQocGFja2VkU2ludDMyRXh0ZW5zaW9uICApKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2VkU2ludDY0RXh0
ZW5zaW9uICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uQ291bnQocGFja2VkRml4ZWQzMkV4dGVuc2lvbiApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2VkRml4ZWQ2NEV4dGVuc2lvbiAp
KTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQo
cGFja2VkU2ZpeGVkMzJFeHRlbnNpb24pKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2VkU2ZpeGVkNjRFeHRlbnNpb24pKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2VkRmxv
YXRFeHRlbnNpb24gICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0
RXh0ZW5zaW9uQ291bnQocGFja2VkRG91YmxlRXh0ZW5zaW9uICApKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2VkQm9vbEV4dGVuc2lv
biAgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
Q291bnQocGFja2VkRW51bUV4dGVuc2lvbikpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg2
MDEgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkSW50MzJFeHRlbnNpb24gICAsIDApKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNjAyTCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBh
Y2tlZEludDY0RXh0ZW5zaW9uICAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDYw
MyAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWRVaW50MzJFeHRlbnNpb24gICwgMCkpOwot
ICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg2MDRMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFj
a2VkVWludDY0RXh0ZW5zaW9uICAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNjA1
ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZFNpbnQzMkV4dGVuc2lvbiAgLCAwKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDYwNkwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNr
ZWRTaW50NjRFeHRlbnNpb24gICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg2MDcg
ICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkRml4ZWQzMkV4dGVuc2lvbiAsIDApKTsKLSAg
ICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNjA4TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tl
ZEZpeGVkNjRFeHRlbnNpb24gLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDYwOSAg
LCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWRTZml4ZWQzMkV4dGVuc2lvbiwgMCkpOwotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSg2MTBMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2Vk
U2ZpeGVkNjRFeHRlbnNpb24sIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNjExRiAs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZEZsb2F0RXh0ZW5zaW9uICAgLCAwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDYxMkQgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWRE
b3VibGVFeHRlbnNpb24gICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSh0cnVlICwg
bWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkQm9vbEV4dGVuc2lvbiAgICAsIDApKTsKLSAgICBh
c3NlcnRFcXVhbHNFeGFjdFR5cGUoRm9yZWlnbkVudW0uRk9SRUlHTl9CQVIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZEVudW1FeHRlbnNpb24s
IDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNzAxICAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKHBhY2tlZEludDMyRXh0ZW5zaW9uICAgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RU
eXBlKDcwMkwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWRJbnQ2NEV4dGVuc2lvbiAgICwg
MSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg3MDMgICwgbWVzc2FnZS5nZXRFeHRlbnNp
b24ocGFja2VkVWludDMyRXh0ZW5zaW9uICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5
cGUoNzA0TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZFVpbnQ2NEV4dGVuc2lvbiAgLCAx
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDcwNSAgLCBtZXNzYWdlLmdldEV4dGVuc2lv
bihwYWNrZWRTaW50MzJFeHRlbnNpb24gICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSg3MDZMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkU2ludDY0RXh0ZW5zaW9uICAsIDEp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNzA3ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KHBhY2tlZEZpeGVkMzJFeHRlbnNpb24gLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBl
KDcwOEwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWRGaXhlZDY0RXh0ZW5zaW9uICwgMSkp
OwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg3MDkgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24o
cGFja2VkU2ZpeGVkMzJFeHRlbnNpb24sIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
NzEwTCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZFNmaXhlZDY0RXh0ZW5zaW9uLCAxKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDcxMUYgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihw
YWNrZWRGbG9hdEV4dGVuc2lvbiAgICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg3
MTJEICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkRG91YmxlRXh0ZW5zaW9uICAsIDEpKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoZmFsc2UsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBh
Y2tlZEJvb2xFeHRlbnNpb24gICAgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKEZv
cmVpZ25FbnVtLkZPUkVJR05fQkFaLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
LmdldEV4dGVuc2lvbihwYWNrZWRFbnVtRXh0ZW5zaW9uLCAxKSk7Ci0gIH0KLQotICAvLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0gIC8vIExpdGUgZXh0ZW5zaW9ucwotCi0gIC8qKgotICAgKiBBc3NlcnQgKHVzaW5n
IHtAY29kZSBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0fX0gdGhhdCBhbGwgZXh0ZW5zaW9ucyBvZgot
ICAgKiB7QGNvZGUgbWVzc2FnZX0gYXJlIHNldCB0byB0aGUgdmFsdWVzIGFzc2lnbmVkIGJ5IHtA
Y29kZSBzZXRBbGxFeHRlbnNpb25zfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3Nl
cnRBbGxFeHRlbnNpb25zU2V0KAotICAgICAgVGVzdEFsbEV4dGVuc2lvbnNMaXRlT3JCdWlsZGVy
IG1lc3NhZ2UpIHsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihv
cHRpb25hbEludDMyRXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1l
c3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsSW50NjRFeHRlbnNpb25MaXRlICAgKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxVaW50MzJFeHRl
bnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lv
bihvcHRpb25hbFVpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVl
KG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsU2ludDMyRXh0ZW5zaW9uTGl0ZSAgKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxTaW50NjRF
eHRlbnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVu
c2lvbihvcHRpb25hbEZpeGVkMzJFeHRlbnNpb25MaXRlICkpOwotICAgIEFzc2VydC5hc3NlcnRU
cnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsRml4ZWQ2NEV4dGVuc2lvbkxpdGUgKSk7
Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxTZml4
ZWQzMkV4dGVuc2lvbkxpdGUpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4
dGVuc2lvbihvcHRpb25hbFNmaXhlZDY0RXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3Nl
cnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsRmxvYXRFeHRlbnNpb25MaXRlICAg
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxE
b3VibGVFeHRlbnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhh
c0V4dGVuc2lvbihvcHRpb25hbEJvb2xFeHRlbnNpb25MaXRlICAgICkpOwotICAgIEFzc2VydC5h
c3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsU3RyaW5nRXh0ZW5zaW9uTGl0
ZSAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9u
YWxCeXRlc0V4dGVuc2lvbkxpdGUgICApKTsKLQotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3Nh
Z2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsR3JvdXBFeHRlbnNpb25MaXRlICAgICAgICAgKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxOZXN0ZWRN
ZXNzYWdlRXh0ZW5zaW9uTGl0ZSApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhh
c0V4dGVuc2lvbihvcHRpb25hbEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFz
c2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsSW1wb3J0TWVzc2Fn
ZUV4dGVuc2lvbkxpdGUgKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmdldEV4
dGVuc2lvbihvcHRpb25hbEdyb3VwRXh0ZW5zaW9uTGl0ZSAgICAgICAgICkuaGFzQSgpKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbE5lc3RlZE1l
c3NhZ2VFeHRlbnNpb25MaXRlICkuaGFzQmIoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVz
c2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGb3JlaWduTWVzc2FnZUV4dGVuc2lvbkxpdGUpLmhh
c0MoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9u
YWxJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uTGl0ZSApLmhhc0QoKSk7Ci0KLSAgICBBc3NlcnQuYXNz
ZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbE5lc3RlZEVudW1FeHRlbnNpb25M
aXRlICkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlv
bmFsRm9yZWlnbkVudW1FeHRlbnNpb25MaXRlKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVz
c2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxJbXBvcnRFbnVtRXh0ZW5zaW9uTGl0ZSApKTsKLQot
ICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsU3RyaW5n
UGllY2VFeHRlbnNpb25MaXRlKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNF
eHRlbnNpb24ob3B0aW9uYWxDb3JkRXh0ZW5zaW9uTGl0ZSkpOwotCi0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKDEwMSAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbEludDMyRXh0ZW5z
aW9uTGl0ZSAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMDJMICwgbWVzc2FnZS5n
ZXRFeHRlbnNpb24ob3B0aW9uYWxJbnQ2NEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBhc3NlcnRF
cXVhbHNFeGFjdFR5cGUoMTAzICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsVWludDMy
RXh0ZW5zaW9uTGl0ZSAgKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDEwNEwgLCBtZXNz
YWdlLmdldEV4dGVuc2lvbihvcHRpb25hbFVpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwotICAgIGFz
c2VydEVxdWFsc0V4YWN0VHlwZSgxMDUgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxT
aW50MzJFeHRlbnNpb25MaXRlICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMTA2TCAs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsU2ludDY0RXh0ZW5zaW9uTGl0ZSAgKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDEwNyAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRp
b25hbEZpeGVkMzJFeHRlbnNpb25MaXRlICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgx
MDhMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGaXhlZDY0RXh0ZW5zaW9uTGl0ZSAp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMTA5ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KG9wdGlvbmFsU2ZpeGVkMzJFeHRlbnNpb25MaXRlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RU
eXBlKDExMEwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbFNmaXhlZDY0RXh0ZW5zaW9u
TGl0ZSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgxMTFGICwgbWVzc2FnZS5nZXRFeHRl
bnNpb24ob3B0aW9uYWxGbG9hdEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBhc3NlcnRFcXVhbHNF
eGFjdFR5cGUoMTEyRCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsRG91YmxlRXh0ZW5z
aW9uTGl0ZSAgKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKHRydWUgLCBtZXNzYWdlLmdl
dEV4dGVuc2lvbihvcHRpb25hbEJvb2xFeHRlbnNpb25MaXRlICAgICkpOwotICAgIGFzc2VydEVx
dWFsc0V4YWN0VHlwZSgiMTE1IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxTdHJpbmdF
eHRlbnNpb25MaXRlICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUodG9CeXRlcygiMTE2
IiksIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsQnl0ZXNFeHRlbnNpb25MaXRlKSk7Ci0K
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMTE3LCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRp
b25hbEdyb3VwRXh0ZW5zaW9uTGl0ZSAgICAgICAgICkuZ2V0QSgpKTsKLSAgICBhc3NlcnRFcXVh
bHNFeGFjdFR5cGUoMTE4LCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbE5lc3RlZE1lc3Nh
Z2VFeHRlbnNpb25MaXRlICkuZ2V0QmIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDEx
OSwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGb3JlaWduTWVzc2FnZUV4dGVuc2lvbkxp
dGUpLmdldEMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDEyMCwgbWVzc2FnZS5nZXRF
eHRlbnNpb24ob3B0aW9uYWxJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uTGl0ZSApLmdldEQoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDEyNiwgbWVzc2FnZS5nZXRFeHRlbnNpb24oCi0gICAg
ICAgIG9wdGlvbmFsUHVibGljSW1wb3J0TWVzc2FnZUV4dGVuc2lvbkxpdGUpLmdldEUoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDEyNywgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9u
YWxMYXp5TWVzc2FnZUV4dGVuc2lvbkxpdGUpLmdldEJiKCkpOwotCi0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkRW51bS5CQVosCi0gICAgICBtZXNzYWdl
LmdldEV4dGVuc2lvbihvcHRpb25hbE5lc3RlZEVudW1FeHRlbnNpb25MaXRlKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKEZvcmVpZ25FbnVtTGl0ZS5GT1JFSUdOX0xJVEVfQkFaLAotICAg
ICAgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGb3JlaWduRW51bUV4dGVuc2lvbkxpdGUp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoSW1wb3J0RW51bUxpdGUuSU1QT1JUX0xJVEVf
QkFaLAotICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxJbXBvcnRFbnVtRXh0ZW5z
aW9uTGl0ZSkpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCIxMjQiLCBtZXNzYWdlLmdl
dEV4dGVuc2lvbihvcHRpb25hbFN0cmluZ1BpZWNlRXh0ZW5zaW9uTGl0ZSkpOwotICAgIGFzc2Vy
dEVxdWFsc0V4YWN0VHlwZSgiMTI1IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxDb3Jk
RXh0ZW5zaW9uTGl0ZSkpOwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEludDMyRXh0ZW5zaW9u
TGl0ZSAgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNp
b25Db3VudChyZXBlYXRlZEludDY0RXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFVpbnQzMkV4dGVu
c2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRl
bnNpb25Db3VudChyZXBlYXRlZFVpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFNpbnQzMkV4
dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRF
eHRlbnNpb25Db3VudChyZXBlYXRlZFNpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEZpeGVk
MzJFeHRlbnNpb25MaXRlICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5n
ZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEZpeGVkNjRFeHRlbnNpb25MaXRlICkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFNm
aXhlZDMyRXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2Fn
ZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFNmaXhlZDY0RXh0ZW5zaW9uTGl0ZSkpOwotICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRl
ZEZsb2F0RXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVz
c2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZERvdWJsZUV4dGVuc2lvbkxpdGUgICkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBl
YXRlZEJvb2xFeHRlbnNpb25MaXRlICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwg
bWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFN0cmluZ0V4dGVuc2lvbkxpdGUgICkp
OwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChy
ZXBlYXRlZEJ5dGVzRXh0ZW5zaW9uTGl0ZSAgICkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFs
cygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkR3JvdXBFeHRlbnNpb25MaXRl
ICAgICAgICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVu
c2lvbkNvdW50KHJlcGVhdGVkTmVzdGVkTWVzc2FnZUV4dGVuc2lvbkxpdGUgKSk7Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkRm9y
ZWlnbk1lc3NhZ2VFeHRlbnNpb25MaXRlKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkSW1wb3J0TWVzc2FnZUV4dGVuc2lvbkxp
dGUgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNv
dW50KHJlcGVhdGVkTGF6eU1lc3NhZ2VFeHRlbnNpb25MaXRlICAgKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkTmVzdGVkRW51
bUV4dGVuc2lvbkxpdGUgICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdl
LmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkRm9yZWlnbkVudW1FeHRlbnNpb25MaXRlICAgKSk7
Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJl
cGVhdGVkSW1wb3J0RW51bUV4dGVuc2lvbkxpdGUgICAgKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRTdHJpbmdQaWVjZUV4
dGVuc2lvbkxpdGUpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uQ291bnQocmVwZWF0ZWRDb3JkRXh0ZW5zaW9uTGl0ZSkpOwotCi0gICAgYXNzZXJ0RXF1
YWxzRXhhY3RUeXBlKDIwMSAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEludDMyRXh0
ZW5zaW9uTGl0ZSAgICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDJMICwgbWVz
c2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbnQ2NEV4dGVuc2lvbkxpdGUgICAsIDApKTsKLSAg
ICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMjAzICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVh
dGVkVWludDMyRXh0ZW5zaW9uTGl0ZSAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBl
KDIwNEwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFVpbnQ2NEV4dGVuc2lvbkxpdGUg
ICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDUgICwgbWVzc2FnZS5nZXRFeHRl
bnNpb24ocmVwZWF0ZWRTaW50MzJFeHRlbnNpb25MaXRlICAsIDApKTsKLSAgICBhc3NlcnRFcXVh
bHNFeGFjdFR5cGUoMjA2TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2ludDY0RXh0
ZW5zaW9uTGl0ZSAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIwNyAgLCBtZXNz
YWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEZpeGVkMzJFeHRlbnNpb25MaXRlICwgMCkpOwotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDhMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0
ZWRGaXhlZDY0RXh0ZW5zaW9uTGl0ZSAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
MjA5ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2ZpeGVkMzJFeHRlbnNpb25MaXRl
LCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIxMEwgLCBtZXNzYWdlLmdldEV4dGVu
c2lvbihyZXBlYXRlZFNmaXhlZDY0RXh0ZW5zaW9uTGl0ZSwgMCkpOwotICAgIGFzc2VydEVxdWFs
c0V4YWN0VHlwZSgyMTFGICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRGbG9hdEV4dGVu
c2lvbkxpdGUgICAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMjEyRCAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRG91YmxlRXh0ZW5zaW9uTGl0ZSAgLCAwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzRXhhY3RUeXBlKHRydWUgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRl
ZEJvb2xFeHRlbnNpb25MaXRlICAgICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgi
MjE1IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTdHJpbmdFeHRlbnNpb25MaXRlICAs
IDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUodG9CeXRlcygiMjE2IiksIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKHJlcGVhdGVkQnl0ZXNFeHRlbnNpb25MaXRlLCAwKSk7Ci0KLSAgICBhc3Nl
cnRFcXVhbHNFeGFjdFR5cGUoMjE3LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEdyb3Vw
RXh0ZW5zaW9uTGl0ZSAgICAgICAgICwwKS5nZXRBKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0
VHlwZSgyMTgsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkTmVzdGVkTWVzc2FnZUV4dGVu
c2lvbkxpdGUgLDApLmdldEJiKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMTksIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VFeHRlbnNpb25MaXRlLDAp
LmdldEMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIyMCwgbWVzc2FnZS5nZXRFeHRl
bnNpb24ocmVwZWF0ZWRJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uTGl0ZSAsMCkuZ2V0RCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMjI3LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRl
ZExhenlNZXNzYWdlRXh0ZW5zaW9uTGl0ZSAgICwwKS5nZXRCYigpKTsKLQotICAgIGFzc2VydEVx
dWFsc0V4YWN0VHlwZShUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZEVudW0uQkFSLAotICAgICAgbWVz
c2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWROZXN0ZWRFbnVtRXh0ZW5zaW9uTGl0ZSwgMCkpOwot
ICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JB
UiwKLSAgICAgIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbkVudW1FeHRlbnNp
b25MaXRlLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKEltcG9ydEVudW1MaXRlLklN
UE9SVF9MSVRFX0JBUiwKLSAgICAgIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkSW1wb3J0
RW51bUV4dGVuc2lvbkxpdGUsIDApKTsKLQotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgiMjI0
IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTdHJpbmdQaWVjZUV4dGVuc2lvbkxpdGUs
IDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIjIyNSIsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKHJlcGVhdGVkQ29yZEV4dGVuc2lvbkxpdGUsIDApKTsKLQotICAgIGFzc2VydEVxdWFsc0V4
YWN0VHlwZSgzMDEgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbnQzMkV4dGVuc2lv
bkxpdGUgICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMzAyTCAsIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKHJlcGVhdGVkSW50NjRFeHRlbnNpb25MaXRlICAgLCAxKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKDMwMyAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFVp
bnQzMkV4dGVuc2lvbkxpdGUgICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMDRM
ICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRVaW50NjRFeHRlbnNpb25MaXRlICAsIDEp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMzA1ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KHJlcGVhdGVkU2ludDMyRXh0ZW5zaW9uTGl0ZSAgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhh
Y3RUeXBlKDMwNkwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFNpbnQ2NEV4dGVuc2lv
bkxpdGUgICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMDcgICwgbWVzc2FnZS5n
ZXRFeHRlbnNpb24ocmVwZWF0ZWRGaXhlZDMyRXh0ZW5zaW9uTGl0ZSAsIDEpKTsKLSAgICBhc3Nl
cnRFcXVhbHNFeGFjdFR5cGUoMzA4TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRml4
ZWQ2NEV4dGVuc2lvbkxpdGUgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDMwOSAg
LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZSwgMSkp
OwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMTBMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24o
cmVwZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbkxpdGUsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFj
dFR5cGUoMzExRiAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRmxvYXRFeHRlbnNpb25M
aXRlICAgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDMxMkQgLCBtZXNzYWdlLmdl
dEV4dGVuc2lvbihyZXBlYXRlZERvdWJsZUV4dGVuc2lvbkxpdGUgICwgMSkpOwotICAgIGFzc2Vy
dEVxdWFsc0V4YWN0VHlwZShmYWxzZSwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRCb29s
RXh0ZW5zaW9uTGl0ZSAgICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIjMxNSIs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU3RyaW5nRXh0ZW5zaW9uTGl0ZSAgLCAxKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKHRvQnl0ZXMoIjMxNiIpLCBtZXNzYWdlLmdldEV4
dGVuc2lvbihyZXBlYXRlZEJ5dGVzRXh0ZW5zaW9uTGl0ZSwgMSkpOwotCi0gICAgYXNzZXJ0RXF1
YWxzRXhhY3RUeXBlKDMxNywgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRHcm91cEV4dGVu
c2lvbkxpdGUgICAgICAgICAsMSkuZ2V0QSgpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
MzE4LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZE5lc3RlZE1lc3NhZ2VFeHRlbnNpb25M
aXRlICwxKS5nZXRCYigpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMzE5LCBtZXNzYWdl
LmdldEV4dGVuc2lvbihyZXBlYXRlZEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9uTGl0ZSwxKS5nZXRD
KCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgzMjAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KHJlcGVhdGVkSW1wb3J0TWVzc2FnZUV4dGVuc2lvbkxpdGUgLDEpLmdldEQoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKDMyNywgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRMYXp5
TWVzc2FnZUV4dGVuc2lvbkxpdGUgICAsMSkuZ2V0QmIoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHNF
eGFjdFR5cGUoVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRFbnVtLkJBWiwKLSAgICAgIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKHJlcGVhdGVkTmVzdGVkRW51bUV4dGVuc2lvbkxpdGUsIDEpKTsKLSAgICBh
c3NlcnRFcXVhbHNFeGFjdFR5cGUoRm9yZWlnbkVudW1MaXRlLkZPUkVJR05fTElURV9CQVosCi0g
ICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEZvcmVpZ25FbnVtRXh0ZW5zaW9uTGl0
ZSwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShJbXBvcnRFbnVtTGl0ZS5JTVBPUlRf
TElURV9CQVosCi0gICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEltcG9ydEVudW1F
eHRlbnNpb25MaXRlLCAxKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIjMyNCIsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU3RyaW5nUGllY2VFeHRlbnNpb25MaXRlLCAxKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCIzMjUiLCBtZXNzYWdlLmdldEV4dGVuc2lvbihy
ZXBlYXRlZENvcmRFeHRlbnNpb25MaXRlLCAxKSk7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEludDMyRXh0ZW5z
aW9uTGl0ZSAgICkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KGRlZmF1bHRJbnQ2NEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0VWludDMyRXh0ZW5zaW9uTGl0ZSAgKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdFVpbnQ2NEV4dGVu
c2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KGRlZmF1bHRTaW50MzJFeHRlbnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0U2ludDY0RXh0ZW5zaW9uTGl0ZSAgKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEZpeGVkMzJFeHRl
bnNpb25MaXRlICkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KGRlZmF1bHRGaXhlZDY0RXh0ZW5zaW9uTGl0ZSApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0U2ZpeGVkMzJFeHRlbnNpb25MaXRlKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdFNmaXhlZDY0RXh0
ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KGRlZmF1bHRGbG9hdEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0RG91YmxlRXh0ZW5zaW9uTGl0ZSAgKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEJvb2xFeHRlbnNp
b25MaXRlICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KGRlZmF1bHRTdHJpbmdFeHRlbnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0Qnl0ZXNFeHRlbnNpb25MaXRlICAgKSk7Ci0KLSAg
ICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0TmVzdGVkRW51
bUV4dGVuc2lvbkxpdGUgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRl
bnNpb24oZGVmYXVsdEZvcmVpZ25FbnVtRXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3Nl
cnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKGRlZmF1bHRJbXBvcnRFbnVtRXh0ZW5zaW9uTGl0
ZSApKTsKLQotICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKGRlZmF1
bHRTdHJpbmdQaWVjZUV4dGVuc2lvbkxpdGUpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNz
YWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0Q29yZEV4dGVuc2lvbkxpdGUpKTsKLQotICAgIGFzc2Vy
dEVxdWFsc0V4YWN0VHlwZSg0MDEgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEludDMy
RXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MDJMICwgbWVz
c2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEludDY0RXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIGFz
c2VydEVxdWFsc0V4YWN0VHlwZSg0MDMgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFVp
bnQzMkV4dGVuc2lvbkxpdGUgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MDRMICwg
bWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFVpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MDUgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVs
dFNpbnQzMkV4dGVuc2lvbkxpdGUgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MDZM
ICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFNpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwot
ICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MDcgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVm
YXVsdEZpeGVkMzJFeHRlbnNpb25MaXRlICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0
MDhMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEZpeGVkNjRFeHRlbnNpb25MaXRlICkp
OwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MDkgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24o
ZGVmYXVsdFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSg0MTBMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFNmaXhlZDY0RXh0ZW5zaW9uTGl0
ZSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg0MTFGICwgbWVzc2FnZS5nZXRFeHRlbnNp
b24oZGVmYXVsdEZsb2F0RXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0
VHlwZSg0MTJEICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdERvdWJsZUV4dGVuc2lvbkxp
dGUgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShmYWxzZSwgbWVzc2FnZS5nZXRFeHRl
bnNpb24oZGVmYXVsdEJvb2xFeHRlbnNpb25MaXRlICAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4
YWN0VHlwZSgiNDE1IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFN0cmluZ0V4dGVuc2lv
bkxpdGUgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSh0b0J5dGVzKCI0MTYiKSwgbWVz
c2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEJ5dGVzRXh0ZW5zaW9uTGl0ZSkpOwotCi0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkRW51bS5GT08sCi0gICAg
ICBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0TmVzdGVkRW51bUV4dGVuc2lvbkxpdGUgKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKEZvcmVpZ25FbnVtTGl0ZS5GT1JFSUdOX0xJVEVf
Rk9PLAotICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEZvcmVpZ25FbnVtRXh0ZW5z
aW9uTGl0ZSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShJbXBvcnRFbnVtTGl0ZS5JTVBP
UlRfTElURV9GT08sCi0gICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0SW1wb3J0RW51
bUV4dGVuc2lvbkxpdGUpKTsKLQotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgiNDI0IiwgbWVz
c2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFN0cmluZ1BpZWNlRXh0ZW5zaW9uTGl0ZSkpOwotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSgiNDI1IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVs
dENvcmRFeHRlbnNpb25MaXRlKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhh
c0V4dGVuc2lvbihvbmVvZkJ5dGVzRXh0ZW5zaW9uTGl0ZSkpOwotCi0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKHRvQnl0ZXMoIjYwNCIpLCBtZXNzYWdlLmdldEV4dGVuc2lvbihvbmVvZkJ5dGVz
RXh0ZW5zaW9uTGl0ZSkpOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8qKgotICAgKiBB
c3NlcnQgKHVzaW5nIHtAY29kZSBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0fX0gdGhhdCBhbGwgZXh0
ZW5zaW9ucyBvZgotICAgKiB7QGNvZGUgbWVzc2FnZX0gYXJlIGNsZWFyZWQsIGFuZCB0aGF0IGdl
dHRpbmcgdGhlIGV4dGVuc2lvbnMgcmV0dXJucyB0aGVpcgotICAgKiBkZWZhdWx0IHZhbHVlcy4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRFeHRlbnNpb25zQ2xlYXIoCi0gICAg
ICBUZXN0QWxsRXh0ZW5zaW9uc0xpdGVPckJ1aWxkZXIgbWVzc2FnZSkgewotICAgIC8vIGhhc0Js
YWgoKSBzaG91bGQgaW5pdGlhbGx5IGJlIGZhbHNlIGZvciBhbGwgb3B0aW9uYWwgZmllbGRzLgot
ICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbEludDMy
RXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4
dGVuc2lvbihvcHRpb25hbEludDY0RXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIEFzc2VydC5hc3Nl
cnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbFVpbnQzMkV4dGVuc2lvbkxpdGUg
ICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25h
bFVpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdl
Lmhhc0V4dGVuc2lvbihvcHRpb25hbFNpbnQzMkV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2Vy
dC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbFNpbnQ2NEV4dGVuc2lv
bkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihv
cHRpb25hbEZpeGVkMzJFeHRlbnNpb25MaXRlICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbEZpeGVkNjRFeHRlbnNpb25MaXRlICkpOwotICAg
IEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbFNmaXhlZDMy
RXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVu
c2lvbihvcHRpb25hbFNmaXhlZDY0RXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3NlcnRG
YWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbEZsb2F0RXh0ZW5zaW9uTGl0ZSAgICkp
OwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbERv
dWJsZUV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhh
c0V4dGVuc2lvbihvcHRpb25hbEJvb2xFeHRlbnNpb25MaXRlICAgICkpOwotICAgIEFzc2VydC5h
c3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbFN0cmluZ0V4dGVuc2lvbkxp
dGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRp
b25hbEJ5dGVzRXh0ZW5zaW9uTGl0ZSAgICkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1l
c3NhZ2UuaGFzRXh0ZW5zaW9uKG9wdGlvbmFsR3JvdXBFeHRlbnNpb25MaXRlICAgICAgICAgICAg
ICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9u
YWxOZXN0ZWRNZXNzYWdlRXh0ZW5zaW9uTGl0ZSAgICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRG
YWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9u
TGl0ZSAgICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KG9wdGlvbmFsSW1wb3J0TWVzc2FnZUV4dGVuc2lvbkxpdGUgICAgICApKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxQdWJsaWNJbXBvcnRNZXNz
YWdlRXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4
dGVuc2lvbihvcHRpb25hbExhenlNZXNzYWdlRXh0ZW5zaW9uTGl0ZSAgICAgICAgKSk7Ci0KLSAg
ICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxOZXN0ZWRF
bnVtRXh0ZW5zaW9uTGl0ZSApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNF
eHRlbnNpb24ob3B0aW9uYWxGb3JlaWduRW51bUV4dGVuc2lvbkxpdGUpKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob3B0aW9uYWxJbXBvcnRFbnVtRXh0ZW5z
aW9uTGl0ZSApKTsKLQotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lv
bihvcHRpb25hbFN0cmluZ1BpZWNlRXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3NlcnRG
YWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvcHRpb25hbENvcmRFeHRlbnNpb25MaXRlKSk7Ci0K
LSAgICAvLyBPcHRpb25hbCBmaWVsZHMgd2l0aG91dCBkZWZhdWx0cyBhcmUgc2V0IHRvIHplcm8g
b3Igc29tZXRoaW5nIGxpa2UgaXQuCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDAgICAgLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbEludDMyRXh0ZW5zaW9uTGl0ZSAgICkpOwotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSgwTCAgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9u
YWxJbnQ2NEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMCAg
ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsVWludDMyRXh0ZW5zaW9uTGl0ZSAgKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDBMICAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihv
cHRpb25hbFVpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSgwICAgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxTaW50MzJFeHRlbnNpb25MaXRl
ICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMEwgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKG9wdGlvbmFsU2ludDY0RXh0ZW5zaW9uTGl0ZSAgKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhh
Y3RUeXBlKDAgICAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbEZpeGVkMzJFeHRlbnNp
b25MaXRlICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgwTCAgICwgbWVzc2FnZS5nZXRF
eHRlbnNpb24ob3B0aW9uYWxGaXhlZDY0RXh0ZW5zaW9uTGl0ZSApKTsKLSAgICBhc3NlcnRFcXVh
bHNFeGFjdFR5cGUoMCAgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsU2ZpeGVkMzJF
eHRlbnNpb25MaXRlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDBMICAgLCBtZXNzYWdl
LmdldEV4dGVuc2lvbihvcHRpb25hbFNmaXhlZDY0RXh0ZW5zaW9uTGl0ZSkpOwotICAgIGFzc2Vy
dEVxdWFsc0V4YWN0VHlwZSgwRiAgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGbG9h
dEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMEQgICAsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsRG91YmxlRXh0ZW5zaW9uTGl0ZSAgKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzRXhhY3RUeXBlKGZhbHNlLCBtZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25h
bEJvb2xFeHRlbnNpb25MaXRlICAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgiIiAg
ICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxTdHJpbmdFeHRlbnNpb25MaXRlICApKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoQnl0ZVN0cmluZy5FTVBUWSwgbWVzc2FnZS5nZXRF
eHRlbnNpb24ob3B0aW9uYWxCeXRlc0V4dGVuc2lvbkxpdGUpKTsKLQotICAgIC8vIEVtYmVkZGVk
IG1lc3NhZ2VzIHNob3VsZCBhbHNvIGJlIGNsZWFyLgotICAgIEFzc2VydC5hc3NlcnRGYWxzZSht
ZXNzYWdlLmdldEV4dGVuc2lvbihvcHRpb25hbEdyb3VwRXh0ZW5zaW9uTGl0ZSAgICAgICAgICAg
ICAgKS5oYXNBKCkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmdldEV4dGVuc2lv
bihvcHRpb25hbE5lc3RlZE1lc3NhZ2VFeHRlbnNpb25MaXRlICAgICAgKS5oYXNCYigpKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGb3JlaWdu
TWVzc2FnZUV4dGVuc2lvbkxpdGUgICAgICkuaGFzQygpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFs
c2UobWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uTGl0
ZSAgICAgICkuaGFzRCgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5nZXRFeHRl
bnNpb24ob3B0aW9uYWxQdWJsaWNJbXBvcnRNZXNzYWdlRXh0ZW5zaW9uTGl0ZSkuaGFzRSgpKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxMYXp5
TWVzc2FnZUV4dGVuc2lvbkxpdGUgICAgICAgICkuaGFzQmIoKSk7Ci0KLSAgICBhc3NlcnRFcXVh
bHNFeGFjdFR5cGUoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxHcm91cEV4dGVuc2lv
bkxpdGUgICAgICAgICApLmdldEEoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDAsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsTmVzdGVkTWVzc2FnZUV4dGVuc2lvbkxpdGUgKS5n
ZXRCYigpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMCwgbWVzc2FnZS5nZXRFeHRlbnNp
b24ob3B0aW9uYWxGb3JlaWduTWVzc2FnZUV4dGVuc2lvbkxpdGUpLmdldEMoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKG9wdGlvbmFsSW1wb3J0
TWVzc2FnZUV4dGVuc2lvbkxpdGUgKS5nZXREKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSgwLCBtZXNzYWdlLmdldEV4dGVuc2lvbigKLSAgICAgICAgb3B0aW9uYWxQdWJsaWNJbXBvcnRN
ZXNzYWdlRXh0ZW5zaW9uTGl0ZSkuZ2V0RSgpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
MCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxMYXp5TWVzc2FnZUV4dGVuc2lvbkxpdGUg
ICApLmdldEJiKCkpOwotCi0gICAgLy8gRW51bXMgd2l0aG91dCBkZWZhdWx0cyBhcmUgc2V0IHRv
IHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUgZW51bS4KLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
VGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRFbnVtLkZPTywKLSAgICAgIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKG9wdGlvbmFsTmVzdGVkRW51bUV4dGVuc2lvbkxpdGUgKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKEZvcmVpZ25FbnVtTGl0ZS5GT1JFSUdOX0xJVEVfRk9PLAotICAgICAgbWVzc2Fn
ZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxGb3JlaWduRW51bUV4dGVuc2lvbkxpdGUpKTsKLSAgICBh
c3NlcnRFcXVhbHNFeGFjdFR5cGUoSW1wb3J0RW51bUxpdGUuSU1QT1JUX0xJVEVfRk9PLAotICAg
ICAgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxJbXBvcnRFbnVtRXh0ZW5zaW9uTGl0ZSkp
OwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCIiLCBtZXNzYWdlLmdldEV4dGVuc2lvbihv
cHRpb25hbFN0cmluZ1BpZWNlRXh0ZW5zaW9uTGl0ZSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0
VHlwZSgiIiwgbWVzc2FnZS5nZXRFeHRlbnNpb24ob3B0aW9uYWxDb3JkRXh0ZW5zaW9uTGl0ZSkp
OwotCi0gICAgLy8gUmVwZWF0ZWQgZmllbGRzIGFyZSBlbXB0eS4KLSAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRJbnQzMkV4dGVuc2lv
bkxpdGUgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uQ291bnQocmVwZWF0ZWRJbnQ2NEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRVaW50MzJFeHRl
bnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uQ291bnQocmVwZWF0ZWRVaW50NjRFeHRlbnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRTaW50MzJF
eHRlbnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0
RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRTaW50NjRFeHRlbnNpb25MaXRlICApKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRGaXhl
ZDMyRXh0ZW5zaW9uTGl0ZSApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRGaXhlZDY0RXh0ZW5zaW9uTGl0ZSApKTsKLSAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRT
Zml4ZWQzMkV4dGVuc2lvbkxpdGUpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbkxpdGUpKTsKLSAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0
ZWRGbG9hdEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWREb3VibGVFeHRlbnNpb25MaXRlICApKTsK
LSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVw
ZWF0ZWRCb29sRXh0ZW5zaW9uTGl0ZSAgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRTdHJpbmdFeHRlbnNpb25MaXRlICAp
KTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQo
cmVwZWF0ZWRCeXRlc0V4dGVuc2lvbkxpdGUgICApKTsKLQotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEdyb3VwRXh0ZW5zaW9uTGl0
ZSAgICAgICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRl
bnNpb25Db3VudChyZXBlYXRlZE5lc3RlZE1lc3NhZ2VFeHRlbnNpb25MaXRlICkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEZv
cmVpZ25NZXNzYWdlRXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwg
bWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEltcG9ydE1lc3NhZ2VFeHRlbnNpb25M
aXRlICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25D
b3VudChyZXBlYXRlZExhenlNZXNzYWdlRXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZE5lc3RlZEVu
dW1FeHRlbnNpb25MaXRlICAgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2Fn
ZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEZvcmVpZ25FbnVtRXh0ZW5zaW9uTGl0ZSAgICkp
OwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChy
ZXBlYXRlZEltcG9ydEVudW1FeHRlbnNpb25MaXRlICAgICkpOwotCi0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygwLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkU3RyaW5nUGllY2VF
eHRlbnNpb25MaXRlKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldEV4
dGVuc2lvbkNvdW50KHJlcGVhdGVkQ29yZEV4dGVuc2lvbkxpdGUpKTsKLQotICAgIC8vIGhhc0Js
YWgoKSBzaG91bGQgYWxzbyBiZSBmYWxzZSBmb3IgYWxsIGRlZmF1bHQgZmllbGRzLgotICAgIEFz
c2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0SW50MzJFeHRlbnNp
b25MaXRlICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KGRlZmF1bHRJbnQ2NEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2Uo
bWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdFVpbnQzMkV4dGVuc2lvbkxpdGUgICkpOwotICAg
IEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0VWludDY0RXh0
ZW5zaW9uTGl0ZSAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5z
aW9uKGRlZmF1bHRTaW50MzJFeHRlbnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFs
c2UobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdFNpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwot
ICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0Rml4ZWQz
MkV4dGVuc2lvbkxpdGUgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0
ZW5zaW9uKGRlZmF1bHRGaXhlZDY0RXh0ZW5zaW9uTGl0ZSApKTsKLSAgICBBc3NlcnQuYXNzZXJ0
RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZSkp
OwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0U2Zp
eGVkNjRFeHRlbnNpb25MaXRlKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFz
RXh0ZW5zaW9uKGRlZmF1bHRGbG9hdEV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdERvdWJsZUV4dGVuc2lvbkxpdGUg
ICkpOwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0
Qm9vbEV4dGVuc2lvbkxpdGUgICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2Uu
aGFzRXh0ZW5zaW9uKGRlZmF1bHRTdHJpbmdFeHRlbnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQu
YXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEJ5dGVzRXh0ZW5zaW9uTGl0
ZSAgICkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKGRl
ZmF1bHROZXN0ZWRFbnVtRXh0ZW5zaW9uTGl0ZSApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2Uo
bWVzc2FnZS5oYXNFeHRlbnNpb24oZGVmYXVsdEZvcmVpZ25FbnVtRXh0ZW5zaW9uTGl0ZSkpOwot
ICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0SW1wb3J0
RW51bUV4dGVuc2lvbkxpdGUgKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5o
YXNFeHRlbnNpb24oZGVmYXVsdFN0cmluZ1BpZWNlRXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2Vy
dC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihkZWZhdWx0Q29yZEV4dGVuc2lvbkxp
dGUpKTsKLQotICAgIC8vIEZpZWxkcyB3aXRoIGRlZmF1bHRzIGhhdmUgdGhlaXIgZGVmYXVsdCB2
YWx1ZXMgKGR1aCkuCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCA0MSAgICAsIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKGRlZmF1bHRJbnQzMkV4dGVuc2lvbkxpdGUgICApKTsKLSAgICBhc3NlcnRF
cXVhbHNFeGFjdFR5cGUoIDQyTCAgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEludDY0
RXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSggNDMgICAgLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0VWludDMyRXh0ZW5zaW9uTGl0ZSAgKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCA0NEwgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRlZmF1
bHRVaW50NjRFeHRlbnNpb25MaXRlICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoLTQ1
ICAgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFNpbnQzMkV4dGVuc2lvbkxpdGUgICkp
OwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSggNDZMICAgLCBtZXNzYWdlLmdldEV4dGVuc2lv
bihkZWZhdWx0U2ludDY0RXh0ZW5zaW9uTGl0ZSAgKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RU
eXBlKCA0NyAgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRlZmF1bHRGaXhlZDMyRXh0ZW5zaW9u
TGl0ZSApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIDQ4TCAgICwgbWVzc2FnZS5nZXRF
eHRlbnNpb24oZGVmYXVsdEZpeGVkNjRFeHRlbnNpb25MaXRlICkpOwotICAgIGFzc2VydEVxdWFs
c0V4YWN0VHlwZSggNDkgICAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0U2ZpeGVkMzJF
eHRlbnNpb25MaXRlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKC01MEwgICAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uKGRlZmF1bHRTZml4ZWQ2NEV4dGVuc2lvbkxpdGUpKTsKLSAgICBhc3Nl
cnRFcXVhbHNFeGFjdFR5cGUoIDUxLjVGICwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdEZs
b2F0RXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSggNTJlM0Qg
LCBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0RG91YmxlRXh0ZW5zaW9uTGl0ZSAgKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKHRydWUgICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRl
ZmF1bHRCb29sRXh0ZW5zaW9uTGl0ZSAgICApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
ImhlbGxvIiwgbWVzc2FnZS5nZXRFeHRlbnNpb24oZGVmYXVsdFN0cmluZ0V4dGVuc2lvbkxpdGUg
ICkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSh0b0J5dGVzKCJ3b3JsZCIpLCBtZXNzYWdl
LmdldEV4dGVuc2lvbihkZWZhdWx0Qnl0ZXNFeHRlbnNpb25MaXRlKSk7Ci0KLSAgICBhc3NlcnRF
cXVhbHNFeGFjdFR5cGUoVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRFbnVtLkJBUiwKLSAgICAgIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKGRlZmF1bHROZXN0ZWRFbnVtRXh0ZW5zaW9uTGl0ZSApKTsKLSAg
ICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoRm9yZWlnbkVudW1MaXRlLkZPUkVJR05fTElURV9CQVIs
Ci0gICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0Rm9yZWlnbkVudW1FeHRlbnNpb25M
aXRlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKEltcG9ydEVudW1MaXRlLklNUE9SVF9M
SVRFX0JBUiwKLSAgICAgIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKGRlZmF1bHRJbXBvcnRFbnVtRXh0
ZW5zaW9uTGl0ZSkpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKCJhYmMiLCBtZXNzYWdl
LmdldEV4dGVuc2lvbihkZWZhdWx0U3RyaW5nUGllY2VFeHRlbnNpb25MaXRlKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKCIxMjMiLCBtZXNzYWdlLmdldEV4dGVuc2lvbihkZWZhdWx0Q29y
ZEV4dGVuc2lvbkxpdGUpKTsKLQotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4
dGVuc2lvbihvbmVvZlVpbnQzMkV4dGVuc2lvbkxpdGUpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFs
c2UobWVzc2FnZS5oYXNFeHRlbnNpb24ob25lb2ZOZXN0ZWRNZXNzYWdlRXh0ZW5zaW9uTGl0ZSkp
OwotICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihvbmVvZlN0cmlu
Z0V4dGVuc2lvbkxpdGUpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRl
bnNpb24ob25lb2ZCeXRlc0V4dGVuc2lvbkxpdGUpKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAvKioKLSAgICogQXNzZXJ0ICh1c2luZyB7QGNvZGUganVuaXQuZnJhbWV3b3JrLkFzc2Vy
dH19IHRoYXQgYWxsIGV4dGVuc2lvbnMgb2YKLSAgICoge0Bjb2RlIG1lc3NhZ2V9IGFyZSBzZXQg
dG8gdGhlIHZhbHVlcyBhc3NpZ25lZCBieSB7QGNvZGUgc2V0QWxsRXh0ZW5zaW9uc30KLSAgICog
Zm9sbG93ZWQgYnkge0Bjb2RlIG1vZGlmeVJlcGVhdGVkRXh0ZW5zaW9uc30uCi0gICAqLwotICBw
dWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0UmVwZWF0ZWRFeHRlbnNpb25zTW9kaWZpZWQoCi0gICAg
ICBUZXN0QWxsRXh0ZW5zaW9uc0xpdGVPckJ1aWxkZXIgbWVzc2FnZSkgewotICAgIC8vIE1vZGlm
eVJlcGVhdGVkRmllbGRzIG9ubHkgc2V0cyB0aGUgc2Vjb25kIHJlcGVhdGVkIGVsZW1lbnQgb2Yg
ZWFjaAotICAgIC8vIGZpZWxkLiAgSW4gYWRkaXRpb24gdG8gdmVyaWZ5aW5nIHRoaXMsIHdlIGFs
c28gdmVyaWZ5IHRoYXQgdGhlIGZpcnN0Ci0gICAgLy8gZWxlbWVudCBhbmQgc2l6ZSB3ZXJlICpu
b3QqIG1vZGlmaWVkLgotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRl
bnNpb25Db3VudChyZXBlYXRlZEludDMyRXh0ZW5zaW9uTGl0ZSAgICkpOwotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEludDY0RXh0
ZW5zaW9uTGl0ZSAgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRF
eHRlbnNpb25Db3VudChyZXBlYXRlZFVpbnQzMkV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFVpbnQ2
NEV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5n
ZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFNpbnQzMkV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFNp
bnQ2NEV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2Fn
ZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEZpeGVkMzJFeHRlbnNpb25MaXRlICkpOwotICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRl
ZEZpeGVkNjRFeHRlbnNpb25MaXRlICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVz
c2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZSkpOwot
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBl
YXRlZFNmaXhlZDY0RXh0ZW5zaW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwg
bWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEZsb2F0RXh0ZW5zaW9uTGl0ZSAgICkp
OwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChy
ZXBlYXRlZERvdWJsZUV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
MiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEJvb2xFeHRlbnNpb25MaXRlICAg
ICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3Vu
dChyZXBlYXRlZFN0cmluZ0V4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChyZXBlYXRlZEJ5dGVzRXh0ZW5zaW9uTGl0
ZSAgICkpOwotCi0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lv
bkNvdW50KHJlcGVhdGVkR3JvdXBFeHRlbnNpb25MaXRlICAgICAgICAgKSk7Ci0gICAgQXNzZXJ0
LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkTmVzdGVk
TWVzc2FnZUV4dGVuc2lvbkxpdGUgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNz
YWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VFeHRlbnNpb25MaXRl
KSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50
KHJlcGVhdGVkSW1wb3J0TWVzc2FnZUV4dGVuc2lvbkxpdGUgKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkTGF6eU1lc3NhZ2VF
eHRlbnNpb25MaXRlICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdl
dEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkTmVzdGVkRW51bUV4dGVuc2lvbkxpdGUgICAgKSk7Ci0g
ICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVh
dGVkRm9yZWlnbkVudW1FeHRlbnNpb25MaXRlICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFs
cygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHJlcGVhdGVkSW1wb3J0RW51bUV4dGVuc2lv
bkxpdGUgICAgKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uQ291bnQocmVwZWF0ZWRTdHJpbmdQaWVjZUV4dGVuc2lvbkxpdGUpKTsKLSAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocmVwZWF0ZWRDb3Jk
RXh0ZW5zaW9uTGl0ZSkpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIwMSAgLCBtZXNz
YWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEludDMyRXh0ZW5zaW9uTGl0ZSAgICwgMCkpOwotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMDJMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0
ZWRJbnQ2NEV4dGVuc2lvbkxpdGUgICAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
MjAzICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkVWludDMyRXh0ZW5zaW9uTGl0ZSAg
LCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIwNEwgLCBtZXNzYWdlLmdldEV4dGVu
c2lvbihyZXBlYXRlZFVpbnQ2NEV4dGVuc2lvbkxpdGUgICwgMCkpOwotICAgIGFzc2VydEVxdWFs
c0V4YWN0VHlwZSgyMDUgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTaW50MzJFeHRl
bnNpb25MaXRlICAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMjA2TCAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2ludDY0RXh0ZW5zaW9uTGl0ZSAgLCAwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDIwNyAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRl
ZEZpeGVkMzJFeHRlbnNpb25MaXRlICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgy
MDhMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRGaXhlZDY0RXh0ZW5zaW9uTGl0ZSAs
IDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMjA5ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKHJlcGVhdGVkU2ZpeGVkMzJFeHRlbnNpb25MaXRlLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKDIxMEwgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFNmaXhlZDY0RXh0
ZW5zaW9uTGl0ZSwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMTFGICwgbWVzc2Fn
ZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRGbG9hdEV4dGVuc2lvbkxpdGUgICAsIDApKTsKLSAgICBh
c3NlcnRFcXVhbHNFeGFjdFR5cGUoMjEyRCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVk
RG91YmxlRXh0ZW5zaW9uTGl0ZSAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKHRy
dWUgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEJvb2xFeHRlbnNpb25MaXRlICAgICwg
MCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgiMjE1IiwgbWVzc2FnZS5nZXRFeHRlbnNp
b24ocmVwZWF0ZWRTdHJpbmdFeHRlbnNpb25MaXRlICAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNF
eGFjdFR5cGUodG9CeXRlcygiMjE2IiksIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkQnl0
ZXNFeHRlbnNpb25MaXRlLCAwKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoMjE3LCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEdyb3VwRXh0ZW5zaW9uTGl0ZSAgICAgICAgICww
KS5nZXRBKCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMTgsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uKHJlcGVhdGVkTmVzdGVkTWVzc2FnZUV4dGVuc2lvbkxpdGUgLDApLmdldEJiKCkpOwot
ICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgyMTksIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVh
dGVkRm9yZWlnbk1lc3NhZ2VFeHRlbnNpb25MaXRlLDApLmdldEMoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzRXhhY3RUeXBlKDIyMCwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbXBvcnRNZXNz
YWdlRXh0ZW5zaW9uTGl0ZSAsMCkuZ2V0RCgpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
MjI3LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZExhenlNZXNzYWdlRXh0ZW5zaW9uTGl0
ZSAgICwwKS5nZXRCYigpKTsKLQotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZShUZXN0QWxsVHlw
ZXNMaXRlLk5lc3RlZEVudW0uQkFSLAotICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0
ZWROZXN0ZWRFbnVtRXh0ZW5zaW9uTGl0ZSwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZShGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUiwKLSAgICAgIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbkVudW1FeHRlbnNpb25MaXRlLCAwKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzRXhhY3RUeXBlKEltcG9ydEVudW1MaXRlLklNUE9SVF9MSVRFX0JBUiwKLSAgICAgIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkSW1wb3J0RW51bUV4dGVuc2lvbkxpdGUsIDApKTsK
LQotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSgiMjI0IiwgbWVzc2FnZS5nZXRFeHRlbnNpb24o
cmVwZWF0ZWRTdHJpbmdQaWVjZUV4dGVuc2lvbkxpdGUsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNF
eGFjdFR5cGUoIjIyNSIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkQ29yZEV4dGVuc2lv
bkxpdGUsIDApKTsKLQotICAgIC8vIEFjdHVhbGx5IHZlcmlmeSB0aGUgc2Vjb25kIChtb2RpZmll
ZCkgZWxlbWVudHMgbm93LgotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg1MDEgICwgbWVzc2Fn
ZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRJbnQzMkV4dGVuc2lvbkxpdGUgICAsIDEpKTsKLSAgICBh
c3NlcnRFcXVhbHNFeGFjdFR5cGUoNTAyTCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVk
SW50NjRFeHRlbnNpb25MaXRlICAgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDUw
MyAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZFVpbnQzMkV4dGVuc2lvbkxpdGUgICwg
MSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg1MDRMICwgbWVzc2FnZS5nZXRFeHRlbnNp
b24ocmVwZWF0ZWRVaW50NjRFeHRlbnNpb25MaXRlICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNF
eGFjdFR5cGUoNTA1ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2ludDMyRXh0ZW5z
aW9uTGl0ZSAgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDUwNkwgLCBtZXNzYWdl
LmdldEV4dGVuc2lvbihyZXBlYXRlZFNpbnQ2NEV4dGVuc2lvbkxpdGUgICwgMSkpOwotICAgIGFz
c2VydEVxdWFsc0V4YWN0VHlwZSg1MDcgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRG
aXhlZDMyRXh0ZW5zaW9uTGl0ZSAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTA4
TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkRml4ZWQ2NEV4dGVuc2lvbkxpdGUgLCAx
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDUwOSAgLCBtZXNzYWdlLmdldEV4dGVuc2lv
bihyZXBlYXRlZFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZSwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4
YWN0VHlwZSg1MTBMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRTZml4ZWQ2NEV4dGVu
c2lvbkxpdGUsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTExRiAsIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKHJlcGVhdGVkRmxvYXRFeHRlbnNpb25MaXRlICAgLCAxKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzRXhhY3RUeXBlKDUxMkQgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZERv
dWJsZUV4dGVuc2lvbkxpdGUgICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSh0cnVl
ICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRCb29sRXh0ZW5zaW9uTGl0ZSAgICAsIDEp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIjUxNSIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KHJlcGVhdGVkU3RyaW5nRXh0ZW5zaW9uTGl0ZSAgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhh
Y3RUeXBlKHRvQnl0ZXMoIjUxNiIpLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEJ5dGVz
RXh0ZW5zaW9uTGl0ZSwgMSkpOwotCi0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDUxNywgbWVz
c2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRHcm91cEV4dGVuc2lvbkxpdGUgICAgICAgICAsMSku
Z2V0QSgpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTE4LCBtZXNzYWdlLmdldEV4dGVu
c2lvbihyZXBlYXRlZE5lc3RlZE1lc3NhZ2VFeHRlbnNpb25MaXRlICwxKS5nZXRCYigpKTsKLSAg
ICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNTE5LCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRl
ZEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9uTGl0ZSwxKS5nZXRDKCkpOwotICAgIGFzc2VydEVxdWFs
c0V4YWN0VHlwZSg1MjAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVkSW1wb3J0TWVzc2Fn
ZUV4dGVuc2lvbkxpdGUgLDEpLmdldEQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDUy
NywgbWVzc2FnZS5nZXRFeHRlbnNpb24ocmVwZWF0ZWRMYXp5TWVzc2FnZUV4dGVuc2lvbkxpdGUg
ICAsMSkuZ2V0QmIoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoVGVzdEFsbFR5cGVz
TGl0ZS5OZXN0ZWRFbnVtLkZPTywKLSAgICAgIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJlcGVhdGVk
TmVzdGVkRW51bUV4dGVuc2lvbkxpdGUsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUo
Rm9yZWlnbkVudW1MaXRlLkZPUkVJR05fTElURV9GT08sCi0gICAgICBtZXNzYWdlLmdldEV4dGVu
c2lvbihyZXBlYXRlZEZvcmVpZ25FbnVtRXh0ZW5zaW9uTGl0ZSwgMSkpOwotICAgIGFzc2VydEVx
dWFsc0V4YWN0VHlwZShJbXBvcnRFbnVtTGl0ZS5JTVBPUlRfTElURV9GT08sCi0gICAgICBtZXNz
YWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZEltcG9ydEVudW1FeHRlbnNpb25MaXRlLCAxKSk7Ci0K
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoIjUyNCIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHJl
cGVhdGVkU3RyaW5nUGllY2VFeHRlbnNpb25MaXRlLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhh
Y3RUeXBlKCI1MjUiLCBtZXNzYWdlLmdldEV4dGVuc2lvbihyZXBlYXRlZENvcmRFeHRlbnNpb25M
aXRlLCAxKSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0UGFja2VkRXh0ZW5z
aW9uc1NldChUZXN0UGFja2VkRXh0ZW5zaW9uc0xpdGUgbWVzc2FnZSkgewotICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChwYWNrZWRJbnQzMkV4dGVu
c2lvbkxpdGUgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uQ291bnQocGFja2VkSW50NjRFeHRlbnNpb25MaXRlICAgKSk7Ci0gICAgQXNzZXJ0LmFz
c2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHBhY2tlZFVpbnQzMkV4dGVu
c2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRl
bnNpb25Db3VudChwYWNrZWRVaW50NjRFeHRlbnNpb25MaXRlICApKTsKLSAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2VkU2ludDMyRXh0ZW5z
aW9uTGl0ZSAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVu
c2lvbkNvdW50KHBhY2tlZFNpbnQ2NEV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChwYWNrZWRGaXhlZDMyRXh0ZW5z
aW9uTGl0ZSApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uQ291bnQocGFja2VkRml4ZWQ2NEV4dGVuc2lvbkxpdGUgKSk7Ci0gICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lvbkNvdW50KHBhY2tlZFNmaXhlZDMyRXh0ZW5z
aW9uTGl0ZSkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNp
b25Db3VudChwYWNrZWRTZml4ZWQ2NEV4dGVuc2lvbkxpdGUpKTsKLSAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uQ291bnQocGFja2VkRmxvYXRFeHRlbnNpb25M
aXRlICAgKSk7Ci0gICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldEV4dGVuc2lv
bkNvdW50KHBhY2tlZERvdWJsZUV4dGVuc2lvbkxpdGUgICkpOwotICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMiwgbWVzc2FnZS5nZXRFeHRlbnNpb25Db3VudChwYWNrZWRCb29sRXh0ZW5zaW9uTGl0
ZSAgICApKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
Q291bnQocGFja2VkRW51bUV4dGVuc2lvbkxpdGUpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5
cGUoNjAxICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZEludDMyRXh0ZW5zaW9uTGl0ZSAg
ICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg2MDJMICwgbWVzc2FnZS5nZXRFeHRl
bnNpb24ocGFja2VkSW50NjRFeHRlbnNpb25MaXRlICAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
RXhhY3RUeXBlKDYwMyAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWRVaW50MzJFeHRlbnNp
b25MaXRlICAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNjA0TCAsIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKHBhY2tlZFVpbnQ2NEV4dGVuc2lvbkxpdGUgICwgMCkpOwotICAgIGFzc2Vy
dEVxdWFsc0V4YWN0VHlwZSg2MDUgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkU2ludDMy
RXh0ZW5zaW9uTGl0ZSAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDYwNkwgLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWRTaW50NjRFeHRlbnNpb25MaXRlICAsIDApKTsKLSAg
ICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNjA3ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tl
ZEZpeGVkMzJFeHRlbnNpb25MaXRlICwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg2
MDhMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkRml4ZWQ2NEV4dGVuc2lvbkxpdGUgLCAw
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDYwOSAgLCBtZXNzYWdlLmdldEV4dGVuc2lv
bihwYWNrZWRTZml4ZWQzMkV4dGVuc2lvbkxpdGUsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFj
dFR5cGUoNjEwTCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZFNmaXhlZDY0RXh0ZW5zaW9u
TGl0ZSwgMCkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg2MTFGICwgbWVzc2FnZS5nZXRF
eHRlbnNpb24ocGFja2VkRmxvYXRFeHRlbnNpb25MaXRlICAgLCAwKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzRXhhY3RUeXBlKDYxMkQgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWREb3VibGVFeHRl
bnNpb25MaXRlICAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUodHJ1ZSAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZEJvb2xFeHRlbnNpb25MaXRlICAgICwgMCkpOwotICAgIGFz
c2VydEVxdWFsc0V4YWN0VHlwZShGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkRW51bUV4
dGVuc2lvbkxpdGUsIDApKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNzAxICAsIG1lc3Nh
Z2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZEludDMyRXh0ZW5zaW9uTGl0ZSAgICwgMSkpOwotICAgIGFz
c2VydEVxdWFsc0V4YWN0VHlwZSg3MDJMICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkSW50
NjRFeHRlbnNpb25MaXRlICAgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDcwMyAg
LCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWRVaW50MzJFeHRlbnNpb25MaXRlICAsIDEpKTsK
LSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNzA0TCAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBh
Y2tlZFVpbnQ2NEV4dGVuc2lvbkxpdGUgICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlw
ZSg3MDUgICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkU2ludDMyRXh0ZW5zaW9uTGl0ZSAg
LCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDcwNkwgLCBtZXNzYWdlLmdldEV4dGVu
c2lvbihwYWNrZWRTaW50NjRFeHRlbnNpb25MaXRlICAsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNF
eGFjdFR5cGUoNzA3ICAsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZEZpeGVkMzJFeHRlbnNp
b25MaXRlICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0VHlwZSg3MDhMICwgbWVzc2FnZS5n
ZXRFeHRlbnNpb24ocGFja2VkRml4ZWQ2NEV4dGVuc2lvbkxpdGUgLCAxKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzRXhhY3RUeXBlKDcwOSAgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWRTZml4ZWQz
MkV4dGVuc2lvbkxpdGUsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoNzEwTCAsIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKHBhY2tlZFNmaXhlZDY0RXh0ZW5zaW9uTGl0ZSwgMSkpOwotICAg
IGFzc2VydEVxdWFsc0V4YWN0VHlwZSg3MTFGICwgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2Vk
RmxvYXRFeHRlbnNpb25MaXRlICAgLCAxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzRXhhY3RUeXBlKDcx
MkQgLCBtZXNzYWdlLmdldEV4dGVuc2lvbihwYWNrZWREb3VibGVFeHRlbnNpb25MaXRlICAsIDEp
KTsKLSAgICBhc3NlcnRFcXVhbHNFeGFjdFR5cGUoZmFsc2UsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KHBhY2tlZEJvb2xFeHRlbnNpb25MaXRlICAgICwgMSkpOwotICAgIGFzc2VydEVxdWFsc0V4YWN0
VHlwZShGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBWiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24ocGFja2VkRW51bUV4dGVuc2lvbkxpdGUsIDEp
KTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gb25lb2YKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHNldE9uZW9mKFRlc3RPbmVvZjIuQnVpbGRlciBtZXNzYWdlKSB7Ci0gICAgbWVzc2FnZS5z
ZXRGb29MYXp5TWVzc2FnZSgKLSAgICAgICAgVGVzdE9uZW9mMi5OZXN0ZWRNZXNzYWdlLm5ld0J1
aWxkZXIoKS5zZXRRdXhJbnQoMTAwKS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLnNldEJhclN0cmlu
ZygiMTAxIik7Ci0gICAgbWVzc2FnZS5zZXRCYXpJbnQoMTAyKTsKLSAgICBtZXNzYWdlLnNldEJh
elN0cmluZygiMTAzIik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0T25lb2ZT
ZXQoVGVzdE9uZW9mMiBtZXNzYWdlKSB7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5o
YXNGb29MYXp5TWVzc2FnZSAgICAgICAgICAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmdldEZvb0xhenlNZXNzYWdlKCkuaGFzUXV4SW50KCkpOwotCi0gICAgQXNzZXJ0LmFz
c2VydFRydWUobWVzc2FnZS5oYXNCYXJTdHJpbmcoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUo
bWVzc2FnZS5oYXNCYXpJbnQgICAoKSk7Ci0gICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5o
YXNCYXpTdHJpbmcoKSk7Ci0KLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEwMCAgLCBtZXNzYWdl
LmdldEZvb0xhenlNZXNzYWdlKCkuZ2V0UXV4SW50KCkpOwotICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoIjEwMSIsIG1lc3NhZ2UuZ2V0QmFyU3RyaW5nICAgICAgICAgICAgICAgICAoKSk7Ci0gICAg
QXNzZXJ0LmFzc2VydEVxdWFscygxMDIgICwgbWVzc2FnZS5nZXRCYXpJbnQgICAgICAgICAgICAg
ICAgICAgICgpKTsKLSAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIxMDMiLCBtZXNzYWdlLmdldEJh
elN0cmluZyAgICAgICAgICAgICAgICAgKCkpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lk
IGFzc2VydEF0TW9zdE9uZUZpZWxkU2V0T25lb2YoVGVzdE9uZW9mMiBtZXNzYWdlKSB7Ci0gICAg
aW50IGNvdW50ID0gMDsKLSAgICBpZiAobWVzc2FnZS5oYXNGb29JbnQoKSkgeyArK2NvdW50OyB9
Ci0gICAgaWYgKG1lc3NhZ2UuaGFzRm9vU3RyaW5nKCkpIHsgKytjb3VudDsgfQotICAgIGlmICht
ZXNzYWdlLmhhc0Zvb0NvcmQoKSkgeyArK2NvdW50OyB9Ci0gICAgaWYgKG1lc3NhZ2UuaGFzRm9v
U3RyaW5nUGllY2UoKSkgeyArK2NvdW50OyB9Ci0gICAgaWYgKG1lc3NhZ2UuaGFzRm9vQnl0ZXMo
KSkgeyArK2NvdW50OyB9Ci0gICAgaWYgKG1lc3NhZ2UuaGFzRm9vRW51bSgpKSB7ICsrY291bnQ7
IH0KLSAgICBpZiAobWVzc2FnZS5oYXNGb29NZXNzYWdlKCkpIHsgKytjb3VudDsgfQotICAgIGlm
IChtZXNzYWdlLmhhc0Zvb0dyb3VwKCkpIHsgKytjb3VudDsgfQotICAgIGlmIChtZXNzYWdlLmhh
c0Zvb0xhenlNZXNzYWdlKCkpIHsgKytjb3VudDsgfQotICAgIEFzc2VydC5hc3NlcnRUcnVlKGNv
dW50IDw9IDEpOwotCi0gICAgY291bnQgPSAwOwotICAgIGlmIChtZXNzYWdlLmhhc0JhckludCgp
KSB7ICsrY291bnQ7IH0KLSAgICBpZiAobWVzc2FnZS5oYXNCYXJTdHJpbmcoKSkgeyArK2NvdW50
OyB9Ci0gICAgaWYgKG1lc3NhZ2UuaGFzQmFyQ29yZCgpKSB7ICsrY291bnQ7IH0KLSAgICBpZiAo
bWVzc2FnZS5oYXNCYXJTdHJpbmdQaWVjZSgpKSB7ICsrY291bnQ7IH0KLSAgICBpZiAobWVzc2Fn
ZS5oYXNCYXJCeXRlcygpKSB7ICsrY291bnQ7IH0KLSAgICBpZiAobWVzc2FnZS5oYXNCYXJFbnVt
KCkpIHsgKytjb3VudDsgfQotICAgIEFzc2VydC5hc3NlcnRUcnVlKGNvdW50IDw9IDEpOwotCi0g
ICAgc3dpdGNoIChtZXNzYWdlLmdldEZvb0Nhc2UoKSkgewotICAgICAgY2FzZSBGT09fSU5UOgot
ICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0Zvb0ludCgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEZPT19TVFJJTkc6Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVl
KG1lc3NhZ2UuaGFzRm9vU3RyaW5nKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk9P
X0NPUkQ6Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRm9vQ29yZCgpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZPT19CWVRFUzoKLSAgICAgICAgQXNzZXJ0LmFz
c2VydFRydWUobWVzc2FnZS5oYXNGb29CeXRlcygpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEZPT19FTlVNOgotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0Zvb0Vu
dW0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGT09fTUVTU0FHRToKLSAgICAgICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNGb29NZXNzYWdlKCkpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRk9PR1JPVVA6Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3Nh
Z2UuaGFzRm9vR3JvdXAoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGT09fTEFaWV9N
RVNTQUdFOgotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0Zvb0xhenlNZXNz
YWdlKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk9PX05PVF9TRVQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgLyoqCi0gICAqIFBlcmZv
cm1zIHRoZSBzYW1lIHRoaW5ncyB0aGF0IHRoZSBtZXRob2RzIG9mIHtAY29kZSBUZXN0VXRpbH0g
ZG8sIGJ1dAotICAgKiB2aWEgdGhlIHJlZmxlY3Rpb24gaW50ZXJmYWNlLiAgVGhpcyBpcyBpdHMg
b3duIGNsYXNzIGJlY2F1c2UgaXQgbmVlZHMKLSAgICogdG8ga25vdyB3aGF0IGRlc2NyaXB0b3Ig
dG8gdXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBSZWZsZWN0aW9uVGVzdGVyIHsK
LSAgICBwcml2YXRlIGZpbmFsIERlc2NyaXB0b3JzLkRlc2NyaXB0b3IgYmFzZURlc2NyaXB0b3I7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeTsK
LQotICAgIHByaXZhdGUgZmluYWwgRGVzY3JpcHRvcnMuRmlsZURlc2NyaXB0b3IgZmlsZTsKLSAg
ICBwcml2YXRlIGZpbmFsIERlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yIGltcG9ydEZpbGU7Ci0g
ICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5GaWxlRGVzY3JpcHRvciBwdWJsaWNJbXBvcnRG
aWxlOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIG9wdGlvbmFs
R3JvdXA7Ci0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIHJlcGVhdGVk
R3JvdXA7Ci0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIG5lc3RlZE1l
c3NhZ2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIGZvcmVpZ25N
ZXNzYWdlOwotICAgIHByaXZhdGUgZmluYWwgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciBpbXBvcnRN
ZXNzYWdlOwotICAgIHByaXZhdGUgZmluYWwgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciBwdWJsaWNJ
bXBvcnRNZXNzYWdlOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5GaWVsZERlc2Ny
aXB0b3IgZ3JvdXBBOwotICAgIHByaXZhdGUgZmluYWwgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlw
dG9yIHJlcGVhdGVkR3JvdXBBOwotICAgIHByaXZhdGUgZmluYWwgRGVzY3JpcHRvcnMuRmllbGRE
ZXNjcmlwdG9yIG5lc3RlZEI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5GaWVsZERl
c2NyaXB0b3IgZm9yZWlnbkM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5GaWVsZERl
c2NyaXB0b3IgaW1wb3J0RDsKLSAgICBwcml2YXRlIGZpbmFsIERlc2NyaXB0b3JzLkZpZWxkRGVz
Y3JpcHRvciBpbXBvcnRFOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5FbnVtRGVz
Y3JpcHRvciBuZXN0ZWRFbnVtOwotICAgIHByaXZhdGUgZmluYWwgRGVzY3JpcHRvcnMuRW51bURl
c2NyaXB0b3IgZm9yZWlnbkVudW07Ci0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5FbnVt
RGVzY3JpcHRvciBpbXBvcnRFbnVtOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5F
bnVtVmFsdWVEZXNjcmlwdG9yIG5lc3RlZEZvbzsKLSAgICBwcml2YXRlIGZpbmFsIERlc2NyaXB0
b3JzLkVudW1WYWx1ZURlc2NyaXB0b3IgbmVzdGVkQmFyOwotICAgIHByaXZhdGUgZmluYWwgRGVz
Y3JpcHRvcnMuRW51bVZhbHVlRGVzY3JpcHRvciBuZXN0ZWRCYXo7Ci0gICAgcHJpdmF0ZSBmaW5h
bCBEZXNjcmlwdG9ycy5FbnVtVmFsdWVEZXNjcmlwdG9yIGZvcmVpZ25Gb287Ci0gICAgcHJpdmF0
ZSBmaW5hbCBEZXNjcmlwdG9ycy5FbnVtVmFsdWVEZXNjcmlwdG9yIGZvcmVpZ25CYXI7Ci0gICAg
cHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5FbnVtVmFsdWVEZXNjcmlwdG9yIGZvcmVpZ25CYXo7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBEZXNjcmlwdG9ycy5FbnVtVmFsdWVEZXNjcmlwdG9yIGltcG9y
dEZvbzsKLSAgICBwcml2YXRlIGZpbmFsIERlc2NyaXB0b3JzLkVudW1WYWx1ZURlc2NyaXB0b3Ig
aW1wb3J0QmFyOwotICAgIHByaXZhdGUgZmluYWwgRGVzY3JpcHRvcnMuRW51bVZhbHVlRGVzY3Jp
cHRvciBpbXBvcnRCYXo7Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3QgYSB7QGNvZGUgUmVm
bGVjdGlvblRlc3Rlcn0gdGhhdCB3aWxsIGV4cGVjdCBtZXNzYWdlcyB1c2luZwotICAgICAqIHRo
ZSBnaXZlbiBkZXNjcmlwdG9yLgotICAgICAqCi0gICAgICogTm9ybWFsbHkge0Bjb2RlIGJhc2VE
ZXNjcmlwdG9yfSBzaG91bGQgYmUgYSBkZXNjcmlwdG9yIGZvciB0aGUgdHlwZQotICAgICAqIHtA
Y29kZSBUZXN0QWxsVHlwZXN9LCBkZWZpbmVkIGluCi0gICAgICoge0Bjb2RlIGdvb2dsZS9wcm90
b2J1Zi91bml0dGVzdC5wcm90b30uICBIb3dldmVyLCBpZgotICAgICAqIHtAY29kZSBleHRlbnNp
b25SZWdpc3RyeX0gaXMgbm9uLW51bGwsIHRoZW4ge0Bjb2RlIGJhc2VEZXNjcmlwdG9yfSBzaG91
bGQKLSAgICAgKiBiZSBmb3Ige0Bjb2RlIFRlc3RBbGxFeHRlbnNpb25zfSBpbnN0ZWFkLCBhbmQg
aW5zdGVhZCBvZiByZWFkaW5nIGFuZAotICAgICAqIHdyaXRpbmcgbm9ybWFsIGZpZWxkcywgdGhl
IHRlc3RlciB3aWxsIHJlYWQgYW5kIHdyaXRlIGV4dGVuc2lvbnMuCi0gICAgICogQWxsIG9mIHtA
Y29kZSBUZXN0QWxsRXh0ZW5zaW9uc30nIGV4dGVuc2lvbnMgbXVzdCBiZSByZWdpc3RlcmVkIGlu
IHRoZQotICAgICAqIHJlZ2lzdHJ5LgotICAgICAqLwotICAgIHB1YmxpYyBSZWZsZWN0aW9uVGVz
dGVyKERlc2NyaXB0b3JzLkRlc2NyaXB0b3IgYmFzZURlc2NyaXB0b3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkpIHsKLSAg
ICAgIHRoaXMuYmFzZURlc2NyaXB0b3IgPSBiYXNlRGVzY3JpcHRvcjsKLSAgICAgIHRoaXMuZXh0
ZW5zaW9uUmVnaXN0cnkgPSBleHRlbnNpb25SZWdpc3RyeTsKLQotICAgICAgdGhpcy5maWxlID0g
YmFzZURlc2NyaXB0b3IuZ2V0RmlsZSgpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxLCBm
aWxlLmdldERlcGVuZGVuY2llcygpLnNpemUoKSk7Ci0gICAgICB0aGlzLmltcG9ydEZpbGUgPSBm
aWxlLmdldERlcGVuZGVuY2llcygpLmdldCgwKTsKLSAgICAgIHRoaXMucHVibGljSW1wb3J0Rmls
ZSA9IGltcG9ydEZpbGUuZ2V0RGVwZW5kZW5jaWVzKCkuZ2V0KDApOwotCi0gICAgICBEZXNjcmlw
dG9ycy5EZXNjcmlwdG9yIHRlc3RBbGxUeXBlczsKLSAgICAgIGlmIChiYXNlRGVzY3JpcHRvci5n
ZXROYW1lKCkgPT0gIlRlc3RBbGxUeXBlcyIpIHsKLSAgICAgICAgdGVzdEFsbFR5cGVzID0gYmFz
ZURlc2NyaXB0b3I7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0ZXN0QWxsVHlwZXMgPSBmaWxl
LmZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgiVGVzdEFsbFR5cGVzIik7Ci0gICAgICAgIEFzc2VydC5h
c3NlcnROb3ROdWxsKHRlc3RBbGxUeXBlcyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChleHRlbnNp
b25SZWdpc3RyeSA9PSBudWxsKSB7Ci0gICAgICAgIC8vIFVzZSB0ZXN0QWxsVHlwZXMsIHJhdGhl
ciB0aGFuIGJhc2VEZXNjcmlwdG9yLCB0byBhbGxvdwotICAgICAgICAvLyBpbml0aWFsaXphdGlv
biB1c2luZyBUZXN0UGFja2VkVHlwZXMgZGVzY3JpcHRvcnMuIFRoZXNlIG9iamVjdHMKLSAgICAg
ICAgLy8gd29uJ3QgYmUgdXNlZCBieSB0aGUgbWV0aG9kcyBmb3IgcGFja2VkIGZpZWxkcy4KLSAg
ICAgICAgdGhpcy5vcHRpb25hbEdyb3VwID0KLSAgICAgICAgICB0ZXN0QWxsVHlwZXMuZmluZE5l
c3RlZFR5cGVCeU5hbWUoIk9wdGlvbmFsR3JvdXAiKTsKLSAgICAgICAgdGhpcy5yZXBlYXRlZEdy
b3VwID0KLSAgICAgICAgICB0ZXN0QWxsVHlwZXMuZmluZE5lc3RlZFR5cGVCeU5hbWUoIlJlcGVh
dGVkR3JvdXAiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMub3B0aW9uYWxHcm91cCA9
Ci0gICAgICAgICAgZmlsZS5maW5kTWVzc2FnZVR5cGVCeU5hbWUoIk9wdGlvbmFsR3JvdXBfZXh0
ZW5zaW9uIik7Ci0gICAgICAgIHRoaXMucmVwZWF0ZWRHcm91cCA9Ci0gICAgICAgICAgZmlsZS5m
aW5kTWVzc2FnZVR5cGVCeU5hbWUoIlJlcGVhdGVkR3JvdXBfZXh0ZW5zaW9uIik7Ci0gICAgICB9
Ci0gICAgICB0aGlzLm5lc3RlZE1lc3NhZ2UgPSB0ZXN0QWxsVHlwZXMuZmluZE5lc3RlZFR5cGVC
eU5hbWUoIk5lc3RlZE1lc3NhZ2UiKTsKLSAgICAgIHRoaXMuZm9yZWlnbk1lc3NhZ2UgPSBmaWxl
LmZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgiRm9yZWlnbk1lc3NhZ2UiKTsKLSAgICAgIHRoaXMuaW1w
b3J0TWVzc2FnZSA9IGltcG9ydEZpbGUuZmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJJbXBvcnRNZXNz
YWdlIik7Ci0gICAgICB0aGlzLnB1YmxpY0ltcG9ydE1lc3NhZ2UgPSBwdWJsaWNJbXBvcnRGaWxl
LmZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgKLSAgICAgICAgICAiUHVibGljSW1wb3J0TWVzc2FnZSIp
OwotCi0gICAgICB0aGlzLm5lc3RlZEVudW0gPSB0ZXN0QWxsVHlwZXMuZmluZEVudW1UeXBlQnlO
YW1lKCJOZXN0ZWRFbnVtIik7Ci0gICAgICB0aGlzLmZvcmVpZ25FbnVtID0gZmlsZS5maW5kRW51
bVR5cGVCeU5hbWUoIkZvcmVpZ25FbnVtIik7Ci0gICAgICB0aGlzLmltcG9ydEVudW0gPSBpbXBv
cnRGaWxlLmZpbmRFbnVtVHlwZUJ5TmFtZSgiSW1wb3J0RW51bSIpOwotCi0gICAgICBBc3NlcnQu
YXNzZXJ0Tm90TnVsbChvcHRpb25hbEdyb3VwICk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVs
bChyZXBlYXRlZEdyb3VwICk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChuZXN0ZWRNZXNz
YWdlICk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChmb3JlaWduTWVzc2FnZSk7Ci0gICAg
ICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChpbXBvcnRNZXNzYWdlICk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0Tm90TnVsbChuZXN0ZWRFbnVtICAgICk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChm
b3JlaWduRW51bSAgICk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChpbXBvcnRFbnVtICAg
ICk7Ci0KLSAgICAgIHRoaXMubmVzdGVkQiAgPSBuZXN0ZWRNZXNzYWdlIC5maW5kRmllbGRCeU5h
bWUoImJiIik7Ci0gICAgICB0aGlzLmZvcmVpZ25DID0gZm9yZWlnbk1lc3NhZ2UuZmluZEZpZWxk
QnlOYW1lKCJjIik7Ci0gICAgICB0aGlzLmltcG9ydEQgID0gaW1wb3J0TWVzc2FnZSAuZmluZEZp
ZWxkQnlOYW1lKCJkIik7Ci0gICAgICB0aGlzLmltcG9ydEUgID0gcHVibGljSW1wb3J0TWVzc2Fn
ZS5maW5kRmllbGRCeU5hbWUoImUiKTsKLSAgICAgIHRoaXMubmVzdGVkRm9vID0gbmVzdGVkRW51
bS5maW5kVmFsdWVCeU5hbWUoIkZPTyIpOwotICAgICAgdGhpcy5uZXN0ZWRCYXIgPSBuZXN0ZWRF
bnVtLmZpbmRWYWx1ZUJ5TmFtZSgiQkFSIik7Ci0gICAgICB0aGlzLm5lc3RlZEJheiA9IG5lc3Rl
ZEVudW0uZmluZFZhbHVlQnlOYW1lKCJCQVoiKTsKLSAgICAgIHRoaXMuZm9yZWlnbkZvbyA9IGZv
cmVpZ25FbnVtLmZpbmRWYWx1ZUJ5TmFtZSgiRk9SRUlHTl9GT08iKTsKLSAgICAgIHRoaXMuZm9y
ZWlnbkJhciA9IGZvcmVpZ25FbnVtLmZpbmRWYWx1ZUJ5TmFtZSgiRk9SRUlHTl9CQVIiKTsKLSAg
ICAgIHRoaXMuZm9yZWlnbkJheiA9IGZvcmVpZ25FbnVtLmZpbmRWYWx1ZUJ5TmFtZSgiRk9SRUlH
Tl9CQVoiKTsKLSAgICAgIHRoaXMuaW1wb3J0Rm9vID0gaW1wb3J0RW51bS5maW5kVmFsdWVCeU5h
bWUoIklNUE9SVF9GT08iKTsKLSAgICAgIHRoaXMuaW1wb3J0QmFyID0gaW1wb3J0RW51bS5maW5k
VmFsdWVCeU5hbWUoIklNUE9SVF9CQVIiKTsKLSAgICAgIHRoaXMuaW1wb3J0QmF6ID0gaW1wb3J0
RW51bS5maW5kVmFsdWVCeU5hbWUoIklNUE9SVF9CQVoiKTsKLQotICAgICAgdGhpcy5ncm91cEEg
PSBvcHRpb25hbEdyb3VwLmZpbmRGaWVsZEJ5TmFtZSgiYSIpOwotICAgICAgdGhpcy5yZXBlYXRl
ZEdyb3VwQSA9IHJlcGVhdGVkR3JvdXAuZmluZEZpZWxkQnlOYW1lKCJhIik7Ci0KLSAgICAgIEFz
c2VydC5hc3NlcnROb3ROdWxsKGdyb3VwQSAgICAgICAgKTsKLSAgICAgIEFzc2VydC5hc3NlcnRO
b3ROdWxsKHJlcGVhdGVkR3JvdXBBKTsKLSAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKG5lc3Rl
ZEIgICAgICAgKTsKLSAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGZvcmVpZ25DICAgICAgKTsK
LSAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGltcG9ydEQgICAgICAgKTsKLSAgICAgIEFzc2Vy
dC5hc3NlcnROb3ROdWxsKGltcG9ydEUgICAgICAgKTsKLSAgICAgIEFzc2VydC5hc3NlcnROb3RO
dWxsKG5lc3RlZEZvbyAgICAgKTsKLSAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKG5lc3RlZEJh
ciAgICAgKTsKLSAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKG5lc3RlZEJheiAgICAgKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGZvcmVpZ25Gb28gICAgKTsKLSAgICAgIEFzc2VydC5h
c3NlcnROb3ROdWxsKGZvcmVpZ25CYXIgICAgKTsKLSAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxs
KGZvcmVpZ25CYXogICAgKTsKLSAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGltcG9ydEZvbyAg
ICAgKTsKLSAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGltcG9ydEJhciAgICAgKTsKLSAgICAg
IEFzc2VydC5hc3NlcnROb3ROdWxsKGltcG9ydEJheiAgICAgKTsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBTaG9ydGhhbmQgdG8gZ2V0IGEgRmllbGREZXNjcmlwdG9yIGZvciBhIGZpZWxkIG9m
IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBEZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3IgZihTdHJpbmcgbmFtZSkgewotICAgICAgRGVzY3JpcHRvcnMuRmll
bGREZXNjcmlwdG9yIHJlc3VsdDsKLSAgICAgIGlmIChleHRlbnNpb25SZWdpc3RyeSA9PSBudWxs
KSB7Ci0gICAgICAgIHJlc3VsdCA9IGJhc2VEZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZShuYW1l
KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IGZpbGUuZmluZEV4dGVuc2lvbkJ5
TmFtZShuYW1lICsgIl9leHRlbnNpb24iKTsKLSAgICAgIH0KLSAgICAgIEFzc2VydC5hc3NlcnRO
b3ROdWxsKHJlc3VsdCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIENhbGxzIHtAY29kZSBwYXJlbnQubmV3QnVpbGRlckZvckZpZWxkKCl9IG9yIHVzZXMg
dGhlCi0gICAgICoge0Bjb2RlIEV4dGVuc2lvblJlZ2lzdHJ5fSB0byBmaW5kIGFuIGFwcHJvcHJp
YXRlIGJ1aWxkZXIsIGRlcGVuZGluZwotICAgICAqIG9uIHdoYXQgdHlwZSBpcyBiZWluZyB0ZXN0
ZWQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBNZXNzYWdlLkJ1aWxkZXIgbmV3QnVpbGRlckZvckZp
ZWxkKAotICAgICAgICBNZXNzYWdlLkJ1aWxkZXIgcGFyZW50LCBEZXNjcmlwdG9ycy5GaWVsZERl
c2NyaXB0b3IgZmllbGQpIHsKLSAgICAgIGlmIChleHRlbnNpb25SZWdpc3RyeSA9PSBudWxsKSB7
Ci0gICAgICAgIHJldHVybiBwYXJlbnQubmV3QnVpbGRlckZvckZpZWxkKGZpZWxkKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIEV4dGVuc2lvblJlZ2lzdHJ5LkV4dGVuc2lvbkluZm8gZXh0ZW5z
aW9uID0KLSAgICAgICAgICBleHRlbnNpb25SZWdpc3RyeS5maW5kSW1tdXRhYmxlRXh0ZW5zaW9u
QnlOdW1iZXIoCi0gICAgICAgICAgICAgIGZpZWxkLmdldENvbnRhaW5pbmdUeXBlKCksIGZpZWxk
LmdldE51bWJlcigpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoZXh0ZW5zaW9uKTsK
LSAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoZXh0ZW5zaW9uLmRlZmF1bHRJbnN0YW5jZSk7
Ci0gICAgICAgIHJldHVybiBleHRlbnNpb24uZGVmYXVsdEluc3RhbmNlLm5ld0J1aWxkZXJGb3JU
eXBlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLyoqCi0g
ICAgICogU2V0IGV2ZXJ5IGZpZWxkIG9mIHtAY29kZSBtZXNzYWdlfSB0byB0aGUgdmFsdWVzIGV4
cGVjdGVkIGJ5Ci0gICAgICoge0Bjb2RlIGFzc2VydEFsbEZpZWxkc1NldCgpfSwgdXNpbmcgdGhl
IHtAbGluayBNZXNzYWdlLkJ1aWxkZXJ9Ci0gICAgICogcmVmbGVjdGlvbiBpbnRlcmZhY2UuCi0g
ICAgICovCi0gICAgdm9pZCBzZXRBbGxGaWVsZHNWaWFSZWZsZWN0aW9uKE1lc3NhZ2UuQnVpbGRl
ciBtZXNzYWdlKSB7Ci0gICAgICBtZXNzYWdlLnNldEZpZWxkKGYoIm9wdGlvbmFsX2ludDMyIiAg
ICksIDEwMSApOwotICAgICAgbWVzc2FnZS5zZXRGaWVsZChmKCJvcHRpb25hbF9pbnQ2NCIgICAp
LCAxMDJMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigib3B0aW9uYWxfdWludDMyIiAgKSwg
MTAzICk7Ci0gICAgICBtZXNzYWdlLnNldEZpZWxkKGYoIm9wdGlvbmFsX3VpbnQ2NCIgICksIDEw
NEwpOwotICAgICAgbWVzc2FnZS5zZXRGaWVsZChmKCJvcHRpb25hbF9zaW50MzIiICApLCAxMDUg
KTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigib3B0aW9uYWxfc2ludDY0IiAgKSwgMTA2TCk7
Ci0gICAgICBtZXNzYWdlLnNldEZpZWxkKGYoIm9wdGlvbmFsX2ZpeGVkMzIiICksIDEwNyApOwot
ICAgICAgbWVzc2FnZS5zZXRGaWVsZChmKCJvcHRpb25hbF9maXhlZDY0IiApLCAxMDhMKTsKLSAg
ICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigib3B0aW9uYWxfc2ZpeGVkMzIiKSwgMTA5ICk7Ci0gICAg
ICBtZXNzYWdlLnNldEZpZWxkKGYoIm9wdGlvbmFsX3NmaXhlZDY0IiksIDExMEwpOwotICAgICAg
bWVzc2FnZS5zZXRGaWVsZChmKCJvcHRpb25hbF9mbG9hdCIgICApLCAxMTFGKTsKLSAgICAgIG1l
c3NhZ2Uuc2V0RmllbGQoZigib3B0aW9uYWxfZG91YmxlIiAgKSwgMTEyRCk7Ci0gICAgICBtZXNz
YWdlLnNldEZpZWxkKGYoIm9wdGlvbmFsX2Jvb2wiICAgICksIHRydWUpOwotICAgICAgbWVzc2Fn
ZS5zZXRGaWVsZChmKCJvcHRpb25hbF9zdHJpbmciICApLCAiMTE1Iik7Ci0gICAgICBtZXNzYWdl
LnNldEZpZWxkKGYoIm9wdGlvbmFsX2J5dGVzIiAgICksIHRvQnl0ZXMoIjExNiIpKTsKLQotICAg
ICAgbWVzc2FnZS5zZXRGaWVsZChmKCJvcHRpb25hbGdyb3VwIiksCi0gICAgICAgIG5ld0J1aWxk
ZXJGb3JGaWVsZChtZXNzYWdlLCBmKCJvcHRpb25hbGdyb3VwIikpCi0gICAgICAgICAgICAgICAu
c2V0RmllbGQoZ3JvdXBBLCAxMTcpLmJ1aWxkKCkpOwotICAgICAgbWVzc2FnZS5zZXRGaWVsZChm
KCJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSIpLAotICAgICAgICBuZXdCdWlsZGVyRm9yRmllbGQo
bWVzc2FnZSwgZigib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiKSkKLSAgICAgICAgICAgICAgIC5z
ZXRGaWVsZChuZXN0ZWRCLCAxMTgpLmJ1aWxkKCkpOwotICAgICAgbWVzc2FnZS5zZXRGaWVsZChm
KCJvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UiKSwKLSAgICAgICAgbmV3QnVpbGRlckZvckZpZWxk
KG1lc3NhZ2UsIGYoIm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSIpKQotICAgICAgICAgICAgICAg
LnNldEZpZWxkKGZvcmVpZ25DLCAxMTkpLmJ1aWxkKCkpOwotICAgICAgbWVzc2FnZS5zZXRGaWVs
ZChmKCJvcHRpb25hbF9pbXBvcnRfbWVzc2FnZSIpLAotICAgICAgICBuZXdCdWlsZGVyRm9yRmll
bGQobWVzc2FnZSwgZigib3B0aW9uYWxfaW1wb3J0X21lc3NhZ2UiKSkKLSAgICAgICAgICAgICAg
IC5zZXRGaWVsZChpbXBvcnRELCAxMjApLmJ1aWxkKCkpOwotICAgICAgbWVzc2FnZS5zZXRGaWVs
ZChmKCJvcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2UiKSwKLSAgICAgICAgbmV3QnVpbGRl
ckZvckZpZWxkKG1lc3NhZ2UsIGYoIm9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZSIpKQot
ICAgICAgICAgICAgICAgLnNldEZpZWxkKGltcG9ydEUsIDEyNikuYnVpbGQoKSk7Ci0gICAgICBt
ZXNzYWdlLnNldEZpZWxkKGYoIm9wdGlvbmFsX2xhenlfbWVzc2FnZSIpLAotICAgICAgICBuZXdC
dWlsZGVyRm9yRmllbGQobWVzc2FnZSwgZigib3B0aW9uYWxfbGF6eV9tZXNzYWdlIikpCi0gICAg
ICAgICAgICAgICAuc2V0RmllbGQobmVzdGVkQiwgMTI3KS5idWlsZCgpKTsKLQotICAgICAgbWVz
c2FnZS5zZXRGaWVsZChmKCJvcHRpb25hbF9uZXN0ZWRfZW51bSIgKSwgIG5lc3RlZEJheik7Ci0g
ICAgICBtZXNzYWdlLnNldEZpZWxkKGYoIm9wdGlvbmFsX2ZvcmVpZ25fZW51bSIpLCBmb3JlaWdu
QmF6KTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigib3B0aW9uYWxfaW1wb3J0X2VudW0iICks
ICBpbXBvcnRCYXopOwotCi0gICAgICBtZXNzYWdlLnNldEZpZWxkKGYoIm9wdGlvbmFsX3N0cmlu
Z19waWVjZSIgKSwgIjEyNCIpOwotICAgICAgbWVzc2FnZS5zZXRGaWVsZChmKCJvcHRpb25hbF9j
b3JkIiApLCAiMTI1Iik7Ci0KLSAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgIG1lc3NhZ2UuYWRk
UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9pbnQzMiIgICApLCAyMDEgKTsKLSAgICAgIG1lc3Nh
Z2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9pbnQ2NCIgICApLCAyMDJMKTsKLSAgICAg
IG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF91aW50MzIiICApLCAyMDMgKTsK
LSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF91aW50NjQiICApLCAy
MDRMKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zaW50MzIi
ICApLCAyMDUgKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9z
aW50NjQiICApLCAyMDZMKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBl
YXRlZF9maXhlZDMyIiApLCAyMDcgKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChm
KCJyZXBlYXRlZF9maXhlZDY0IiApLCAyMDhMKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRG
aWVsZChmKCJyZXBlYXRlZF9zZml4ZWQzMiIpLCAyMDkgKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVw
ZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zZml4ZWQ2NCIpLCAyMTBMKTsKLSAgICAgIG1lc3NhZ2Uu
YWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9mbG9hdCIgICApLCAyMTFGKTsKLSAgICAgIG1l
c3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9kb3VibGUiICApLCAyMTJEKTsKLSAg
ICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9ib29sIiAgICApLCB0cnVl
KTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zdHJpbmciICAp
LCAiMjE1Iik7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfYnl0
ZXMiICAgKSwgdG9CeXRlcygiMjE2IikpOwotCi0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmll
bGQoZigicmVwZWF0ZWRncm91cCIpLAotICAgICAgICBuZXdCdWlsZGVyRm9yRmllbGQobWVzc2Fn
ZSwgZigicmVwZWF0ZWRncm91cCIpKQotICAgICAgICAgICAgICAgLnNldEZpZWxkKHJlcGVhdGVk
R3JvdXBBLCAyMTcpLmJ1aWxkKCkpOwotICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYo
InJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiksCi0gICAgICAgIG5ld0J1aWxkZXJGb3JGaWVsZCht
ZXNzYWdlLCBmKCJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSIpKQotICAgICAgICAgICAgICAgLnNl
dEZpZWxkKG5lc3RlZEIsIDIxOCkuYnVpbGQoKSk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVk
RmllbGQoZigicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlIiksCi0gICAgICAgIG5ld0J1aWxkZXJG
b3JGaWVsZChtZXNzYWdlLCBmKCJyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UiKSkKLSAgICAgICAg
ICAgICAgIC5zZXRGaWVsZChmb3JlaWduQywgMjE5KS5idWlsZCgpKTsKLSAgICAgIG1lc3NhZ2Uu
YWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSIpLAotICAgICAgICBu
ZXdCdWlsZGVyRm9yRmllbGQobWVzc2FnZSwgZigicmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2UiKSkK
LSAgICAgICAgICAgICAgIC5zZXRGaWVsZChpbXBvcnRELCAyMjApLmJ1aWxkKCkpOwotICAgICAg
bWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2xhenlfbWVzc2FnZSIpLAotICAg
ICAgICBuZXdCdWlsZGVyRm9yRmllbGQobWVzc2FnZSwgZigicmVwZWF0ZWRfbGF6eV9tZXNzYWdl
IikpCi0gICAgICAgICAgICAgICAuc2V0RmllbGQobmVzdGVkQiwgMjI3KS5idWlsZCgpKTsKLQot
ICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX25lc3RlZF9lbnVtIiAp
LCAgbmVzdGVkQmFyKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRl
ZF9mb3JlaWduX2VudW0iKSwgZm9yZWlnbkJhcik7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVk
RmllbGQoZigicmVwZWF0ZWRfaW1wb3J0X2VudW0iICksICBpbXBvcnRCYXIpOwotCi0gICAgICBt
ZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc3RyaW5nX3BpZWNlIiApLCAiMjI0
Iik7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfY29yZCIgKSwg
IjIyNSIpOwotCi0gICAgICAvLyBBZGQgYSBzZWNvbmQgb25lIG9mIGVhY2ggZmllbGQuCi0gICAg
ICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfaW50MzIiICAgKSwgMzAxICk7
Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfaW50NjQiICAgKSwg
MzAyTCk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfdWludDMy
IiAgKSwgMzAzICk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRf
dWludDY0IiAgKSwgMzA0TCk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVw
ZWF0ZWRfc2ludDMyIiAgKSwgMzA1ICk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQo
ZigicmVwZWF0ZWRfc2ludDY0IiAgKSwgMzA2TCk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVk
RmllbGQoZigicmVwZWF0ZWRfZml4ZWQzMiIgKSwgMzA3ICk7Ci0gICAgICBtZXNzYWdlLmFkZFJl
cGVhdGVkRmllbGQoZigicmVwZWF0ZWRfZml4ZWQ2NCIgKSwgMzA4TCk7Ci0gICAgICBtZXNzYWdl
LmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc2ZpeGVkMzIiKSwgMzA5ICk7Ci0gICAgICBt
ZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc2ZpeGVkNjQiKSwgMzEwTCk7Ci0g
ICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfZmxvYXQiICAgKSwgMzEx
Rik7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfZG91YmxlIiAg
KSwgMzEyRCk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfYm9v
bCIgICAgKSwgZmFsc2UpOwotICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInJlcGVh
dGVkX3N0cmluZyIgICksICIzMTUiKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChm
KCJyZXBlYXRlZF9ieXRlcyIgICApLCB0b0J5dGVzKCIzMTYiKSk7Ci0KLSAgICAgIG1lc3NhZ2Uu
YWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZGdyb3VwIiksCi0gICAgICAgIG5ld0J1aWxkZXJG
b3JGaWVsZChtZXNzYWdlLCBmKCJyZXBlYXRlZGdyb3VwIikpCi0gICAgICAgICAgICAgICAuc2V0
RmllbGQocmVwZWF0ZWRHcm91cEEsIDMxNykuYnVpbGQoKSk7Ci0gICAgICBtZXNzYWdlLmFkZFJl
cGVhdGVkRmllbGQoZigicmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UiKSwKLSAgICAgICAgbmV3QnVp
bGRlckZvckZpZWxkKG1lc3NhZ2UsIGYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIikpCi0gICAg
ICAgICAgICAgICAuc2V0RmllbGQobmVzdGVkQiwgMzE4KS5idWlsZCgpKTsKLSAgICAgIG1lc3Nh
Z2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UiKSwKLSAgICAg
ICAgbmV3QnVpbGRlckZvckZpZWxkKG1lc3NhZ2UsIGYoInJlcGVhdGVkX2ZvcmVpZ25fbWVzc2Fn
ZSIpKQotICAgICAgICAgICAgICAgLnNldEZpZWxkKGZvcmVpZ25DLCAzMTkpLmJ1aWxkKCkpOwot
ICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdl
IiksCi0gICAgICAgIG5ld0J1aWxkZXJGb3JGaWVsZChtZXNzYWdlLCBmKCJyZXBlYXRlZF9pbXBv
cnRfbWVzc2FnZSIpKQotICAgICAgICAgICAgICAgLnNldEZpZWxkKGltcG9ydEQsIDMyMCkuYnVp
bGQoKSk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfbGF6eV9t
ZXNzYWdlIiksCi0gICAgICAgIG5ld0J1aWxkZXJGb3JGaWVsZChtZXNzYWdlLCBmKCJyZXBlYXRl
ZF9sYXp5X21lc3NhZ2UiKSkKLSAgICAgICAgICAgICAgIC5zZXRGaWVsZChuZXN0ZWRCLCAzMjcp
LmJ1aWxkKCkpOwotCi0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRf
bmVzdGVkX2VudW0iICksICBuZXN0ZWRCYXopOwotICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZp
ZWxkKGYoInJlcGVhdGVkX2ZvcmVpZ25fZW51bSIpLCBmb3JlaWduQmF6KTsKLSAgICAgIG1lc3Nh
Z2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9pbXBvcnRfZW51bSIgKSwgIGltcG9ydEJh
eik7Ci0KLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zdHJpbmdf
cGllY2UiICksICIzMjQiKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJyZXBl
YXRlZF9jb3JkIiApLCAiMzI1Iik7Ci0KLSAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgIG1lc3Nh
Z2Uuc2V0RmllbGQoZigiZGVmYXVsdF9pbnQzMiIgICApLCA0MDEgKTsKLSAgICAgIG1lc3NhZ2Uu
c2V0RmllbGQoZigiZGVmYXVsdF9pbnQ2NCIgICApLCA0MDJMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0
RmllbGQoZigiZGVmYXVsdF91aW50MzIiICApLCA0MDMgKTsKLSAgICAgIG1lc3NhZ2Uuc2V0Rmll
bGQoZigiZGVmYXVsdF91aW50NjQiICApLCA0MDRMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQo
ZigiZGVmYXVsdF9zaW50MzIiICApLCA0MDUgKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigi
ZGVmYXVsdF9zaW50NjQiICApLCA0MDZMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigiZGVm
YXVsdF9maXhlZDMyIiApLCA0MDcgKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigiZGVmYXVs
dF9maXhlZDY0IiApLCA0MDhMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigiZGVmYXVsdF9z
Zml4ZWQzMiIpLCA0MDkgKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigiZGVmYXVsdF9zZml4
ZWQ2NCIpLCA0MTBMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigiZGVmYXVsdF9mbG9hdCIg
ICApLCA0MTFGKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigiZGVmYXVsdF9kb3VibGUiICAp
LCA0MTJEKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigiZGVmYXVsdF9ib29sIiAgICApLCBm
YWxzZSk7Ci0gICAgICBtZXNzYWdlLnNldEZpZWxkKGYoImRlZmF1bHRfc3RyaW5nIiAgKSwgIjQx
NSIpOwotICAgICAgbWVzc2FnZS5zZXRGaWVsZChmKCJkZWZhdWx0X2J5dGVzIiAgICksIHRvQnl0
ZXMoIjQxNiIpKTsKLQotICAgICAgbWVzc2FnZS5zZXRGaWVsZChmKCJkZWZhdWx0X25lc3RlZF9l
bnVtIiApLCAgbmVzdGVkRm9vKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigiZGVmYXVsdF9m
b3JlaWduX2VudW0iKSwgZm9yZWlnbkZvbyk7Ci0gICAgICBtZXNzYWdlLnNldEZpZWxkKGYoImRl
ZmF1bHRfaW1wb3J0X2VudW0iICksICBpbXBvcnRGb28pOwotCi0gICAgICBtZXNzYWdlLnNldEZp
ZWxkKGYoImRlZmF1bHRfc3RyaW5nX3BpZWNlIiApLCAiNDI0Iik7Ci0gICAgICBtZXNzYWdlLnNl
dEZpZWxkKGYoImRlZmF1bHRfY29yZCIgKSwgIjQyNSIpOwotCi0gICAgICBtZXNzYWdlLnNldEZp
ZWxkKGYoIm9uZW9mX3VpbnQzMiIgKSwgNjAxKTsKLSAgICAgIG1lc3NhZ2Uuc2V0RmllbGQoZigi
b25lb2ZfbmVzdGVkX21lc3NhZ2UiKSwKLSAgICAgICAgbmV3QnVpbGRlckZvckZpZWxkKG1lc3Nh
Z2UsIGYoIm9uZW9mX25lc3RlZF9tZXNzYWdlIikpCi0gICAgICAgICAgLnNldEZpZWxkKG5lc3Rl
ZEIsIDYwMikuYnVpbGQoKSk7Ci0gICAgICBtZXNzYWdlLnNldEZpZWxkKGYoIm9uZW9mX3N0cmlu
ZyIgKSwgIjYwMyIpOwotICAgICAgbWVzc2FnZS5zZXRGaWVsZChmKCJvbmVvZl9ieXRlcyIgKSwg
dG9CeXRlcygiNjA0IikpOwotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgot
ICAgICAqIE1vZGlmeSB0aGUgcmVwZWF0ZWQgZmllbGRzIG9mIHtAY29kZSBtZXNzYWdlfSB0byBj
b250YWluIHRoZSB2YWx1ZXMKLSAgICAgKiBleHBlY3RlZCBieSB7QGNvZGUgYXNzZXJ0UmVwZWF0
ZWRGaWVsZHNNb2RpZmllZCgpfSwgdXNpbmcgdGhlCi0gICAgICoge0BsaW5rIE1lc3NhZ2UuQnVp
bGRlcn0gcmVmbGVjdGlvbiBpbnRlcmZhY2UuCi0gICAgICovCi0gICAgdm9pZCBtb2RpZnlSZXBl
YXRlZEZpZWxkc1ZpYVJlZmxlY3Rpb24oTWVzc2FnZS5CdWlsZGVyIG1lc3NhZ2UpIHsKLSAgICAg
IG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9pbnQzMiIgICApLCAxLCA1MDEg
KTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9pbnQ2NCIgICAp
LCAxLCA1MDJMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF91
aW50MzIiICApLCAxLCA1MDMgKTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJy
ZXBlYXRlZF91aW50NjQiICApLCAxLCA1MDRMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRG
aWVsZChmKCJyZXBlYXRlZF9zaW50MzIiICApLCAxLCA1MDUgKTsKLSAgICAgIG1lc3NhZ2Uuc2V0
UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zaW50NjQiICApLCAxLCA1MDZMKTsKLSAgICAgIG1l
c3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9maXhlZDMyIiApLCAxLCA1MDcgKTsK
LSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9maXhlZDY0IiApLCAx
LCA1MDhMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zZml4
ZWQzMiIpLCAxLCA1MDkgKTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBl
YXRlZF9zZml4ZWQ2NCIpLCAxLCA1MTBMKTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVs
ZChmKCJyZXBlYXRlZF9mbG9hdCIgICApLCAxLCA1MTFGKTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVw
ZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9kb3VibGUiICApLCAxLCA1MTJEKTsKLSAgICAgIG1lc3Nh
Z2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9ib29sIiAgICApLCAxLCB0cnVlKTsKLSAg
ICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zdHJpbmciICApLCAxLCAi
NTE1Iik7Ci0gICAgICBtZXNzYWdlLnNldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfYnl0ZXMi
ICAgKSwgMSwgdG9CeXRlcygiNTE2IikpOwotCi0gICAgICBtZXNzYWdlLnNldFJlcGVhdGVkRmll
bGQoZigicmVwZWF0ZWRncm91cCIpLCAxLAotICAgICAgICBuZXdCdWlsZGVyRm9yRmllbGQobWVz
c2FnZSwgZigicmVwZWF0ZWRncm91cCIpKQotICAgICAgICAgICAgICAgLnNldEZpZWxkKHJlcGVh
dGVkR3JvdXBBLCA1MTcpLmJ1aWxkKCkpOwotICAgICAgbWVzc2FnZS5zZXRSZXBlYXRlZEZpZWxk
KGYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiksIDEsCi0gICAgICAgIG5ld0J1aWxkZXJGb3JG
aWVsZChtZXNzYWdlLCBmKCJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSIpKQotICAgICAgICAgICAg
ICAgLnNldEZpZWxkKG5lc3RlZEIsIDUxOCkuYnVpbGQoKSk7Ci0gICAgICBtZXNzYWdlLnNldFJl
cGVhdGVkRmllbGQoZigicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlIiksIDEsCi0gICAgICAgIG5l
d0J1aWxkZXJGb3JGaWVsZChtZXNzYWdlLCBmKCJyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UiKSkK
LSAgICAgICAgICAgICAgIC5zZXRGaWVsZChmb3JlaWduQywgNTE5KS5idWlsZCgpKTsKLSAgICAg
IG1lc3NhZ2Uuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSIpLCAx
LAotICAgICAgICBuZXdCdWlsZGVyRm9yRmllbGQobWVzc2FnZSwgZigicmVwZWF0ZWRfaW1wb3J0
X21lc3NhZ2UiKSkKLSAgICAgICAgICAgICAgIC5zZXRGaWVsZChpbXBvcnRELCA1MjApLmJ1aWxk
KCkpOwotICAgICAgbWVzc2FnZS5zZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2xhenlfbWVz
c2FnZSIpLCAxLAotICAgICAgICBuZXdCdWlsZGVyRm9yRmllbGQobWVzc2FnZSwgZigicmVwZWF0
ZWRfbGF6eV9tZXNzYWdlIikpCi0gICAgICAgICAgICAgICAuc2V0RmllbGQobmVzdGVkQiwgNTI3
KS5idWlsZCgpKTsKLQotICAgICAgbWVzc2FnZS5zZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVk
X25lc3RlZF9lbnVtIiApLCAxLCAgbmVzdGVkRm9vKTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0
ZWRGaWVsZChmKCJyZXBlYXRlZF9mb3JlaWduX2VudW0iKSwgMSwgZm9yZWlnbkZvbyk7Ci0gICAg
ICBtZXNzYWdlLnNldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfaW1wb3J0X2VudW0iICksIDEs
ICBpbXBvcnRGb28pOwotCi0gICAgICBtZXNzYWdlLnNldFJlcGVhdGVkRmllbGQoZigicmVwZWF0
ZWRfc3RyaW5nX3BpZWNlIiksIDEsICI1MjQiKTsKLSAgICAgIG1lc3NhZ2Uuc2V0UmVwZWF0ZWRG
aWVsZChmKCJyZXBlYXRlZF9jb3JkIiksIDEsICI1MjUiKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgICAvKioKLSAgICAgKiBBc3NlcnQgKHVzaW5nIHtAY29kZSBqdW5pdC5mcmFt
ZXdvcmsuQXNzZXJ0fX0gdGhhdCBhbGwgZmllbGRzIG9mCi0gICAgICoge0Bjb2RlIG1lc3NhZ2V9
IGFyZSBzZXQgdG8gdGhlIHZhbHVlcyBhc3NpZ25lZCBieSB7QGNvZGUgc2V0QWxsRmllbGRzfSwK
LSAgICAgKiB1c2luZyB0aGUge0BsaW5rIE1lc3NhZ2V9IHJlZmxlY3Rpb24gaW50ZXJmYWNlLgot
ICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFzc2VydEFsbEZpZWxkc1NldFZpYVJlZmxlY3Rpb24o
TWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlKSB7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNz
YWdlLmhhc0ZpZWxkKGYoIm9wdGlvbmFsX2ludDMyIiAgICkpKTsKLSAgICAgIEFzc2VydC5hc3Nl
cnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfaW50NjQiICAgKSkpOwotICAgICAg
QXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNGaWVsZChmKCJvcHRpb25hbF91aW50MzIiICAp
KSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYoIm9wdGlvbmFs
X3VpbnQ2NCIgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQo
Zigib3B0aW9uYWxfc2ludDMyIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2Fn
ZS5oYXNGaWVsZChmKCJvcHRpb25hbF9zaW50NjQiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYoIm9wdGlvbmFsX2ZpeGVkMzIiICkpKTsKLSAgICAgIEFz
c2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfZml4ZWQ2NCIgKSkp
OwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNGaWVsZChmKCJvcHRpb25hbF9z
Zml4ZWQzMiIpKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYo
Im9wdGlvbmFsX3NmaXhlZDY0IikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2Uu
aGFzRmllbGQoZigib3B0aW9uYWxfZmxvYXQiICAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydFRy
dWUobWVzc2FnZS5oYXNGaWVsZChmKCJvcHRpb25hbF9kb3VibGUiICApKSk7Ci0gICAgICBBc3Nl
cnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYoIm9wdGlvbmFsX2Jvb2wiICAgICkpKTsK
LSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfc3Ry
aW5nIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNGaWVsZChmKCJv
cHRpb25hbF9ieXRlcyIgICApKSk7Ci0KLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2Uu
aGFzRmllbGQoZigib3B0aW9uYWxncm91cCIgICAgICAgICAgICkpKTsKLSAgICAgIEFzc2VydC5h
c3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiICkp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxf
Zm9yZWlnbl9tZXNzYWdlIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFz
RmllbGQoZigib3B0aW9uYWxfaW1wb3J0X21lc3NhZ2UiICkpKTsKLQotICAgICAgQXNzZXJ0LmFz
c2VydFRydWUoCi0gICAgICAgICgoTWVzc2FnZSltZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFs
Z3JvdXAiKSkpLmhhc0ZpZWxkKGdyb3VwQSkpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0g
ICAgICAgICgoTWVzc2FnZSltZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX25lc3RlZF9tZXNz
YWdlIikpKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5oYXNGaWVsZChuZXN0ZWRCKSk7Ci0g
ICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0Rmll
bGQoZigib3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlIikpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgIC5oYXNGaWVsZChmb3JlaWduQykpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAg
ICAgICgoTWVzc2FnZSltZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdl
IikpKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5oYXNGaWVsZChpbXBvcnREKSk7Ci0KLSAg
ICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfbmVzdGVk
X2VudW0iICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigi
b3B0aW9uYWxfZm9yZWlnbl9lbnVtIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3Nh
Z2UuaGFzRmllbGQoZigib3B0aW9uYWxfaW1wb3J0X2VudW0iICkpKTsKLQotICAgICAgQXNzZXJ0
LmFzc2VydFRydWUobWVzc2FnZS5oYXNGaWVsZChmKCJvcHRpb25hbF9zdHJpbmdfcGllY2UiKSkp
OwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNGaWVsZChmKCJvcHRpb25hbF9j
b3JkIikpKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxMDEgICwgbWVzc2FnZS5nZXRG
aWVsZChmKCJvcHRpb25hbF9pbnQzMiIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDEwMkwgLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX2ludDY0IiAgICkpKTsKLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMTAzICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxf
dWludDMyIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxMDRMICwgbWVzc2FnZS5n
ZXRGaWVsZChmKCJvcHRpb25hbF91aW50NjQiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDEwNSAgLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX3NpbnQzMiIgICkpKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMTA2TCAsIG1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9u
YWxfc2ludDY0IiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxMDcgICwgbWVzc2Fn
ZS5nZXRGaWVsZChmKCJvcHRpb25hbF9maXhlZDMyIiApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDEwOEwgLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX2ZpeGVkNjQiICkpKTsK
LSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMTA5ICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigib3B0
aW9uYWxfc2ZpeGVkMzIiKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxMTBMICwgbWVz
c2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9zZml4ZWQ2NCIpKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDExMUYgLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX2Zsb2F0IiAgICkp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMTEyRCAsIG1lc3NhZ2UuZ2V0RmllbGQoZigi
b3B0aW9uYWxfZG91YmxlIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyh0cnVlICwg
bWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9ib29sIiAgICApKSk7Ci0gICAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKCIxMTUiLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX3N0cmluZyIg
ICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHModG9CeXRlcygiMTE2IiksIG1lc3NhZ2Uu
Z2V0RmllbGQoZigib3B0aW9uYWxfYnl0ZXMiKSkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDExNywKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxn
cm91cCIpKSkuZ2V0RmllbGQoZ3JvdXBBKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEx
OCwKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UiKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpZWxkKG5lc3RlZEIp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMTE5LAotICAgICAgICAoKE1lc3NhZ2UpbWVz
c2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UiKSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgLmdldEZpZWxkKGZvcmVpZ25DKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDEyMCwKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9u
YWxfaW1wb3J0X21lc3NhZ2UiKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpZWxk
KGltcG9ydEQpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMTI2LAotICAgICAgICAoKE1l
c3NhZ2UpbWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2Ui
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpZWxkKGltcG9ydEUpKTsKLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMTI3LAotICAgICAgICAoKE1lc3NhZ2UpbWVzc2FnZS5nZXRG
aWVsZChmKCJvcHRpb25hbF9sYXp5X21lc3NhZ2UiKSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgLmdldEZpZWxkKG5lc3RlZEIpKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggbmVz
dGVkQmF6LCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX25lc3RlZF9lbnVtIiApKSk7Ci0g
ICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGZvcmVpZ25CYXosIG1lc3NhZ2UuZ2V0RmllbGQoZigi
b3B0aW9uYWxfZm9yZWlnbl9lbnVtIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGlt
cG9ydEJheiwgbWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9pbXBvcnRfZW51bSIgKSkpOwot
Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIxMjQiLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9w
dGlvbmFsX3N0cmluZ19waWVjZSIpKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIxMjUi
LCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX2NvcmQiKSkpOwotCi0gICAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRG
aWVsZENvdW50KGYoInJlcGVhdGVkX2ludDMyIiAgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfaW50NjQi
ICAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVk
RmllbGRDb3VudChmKCJyZXBlYXRlZF91aW50MzIiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX3VpbnQ2
NCIgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRl
ZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfc2ludDMyIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF9zaW50
NjQiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2ZpeGVkMzIiICkpKTsKLSAgICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfZml4
ZWQ2NCIgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVh
dGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF9zZml4ZWQzMiIpKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX3Nm
aXhlZDY0IikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBl
YXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfZmxvYXQiICAgKSkpOwotICAgICAgQXNzZXJ0LmFz
c2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF9k
b3VibGUiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2Jvb2wiICAgICkpKTsKLSAgICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRf
c3RyaW5nIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJl
cGVhdGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF9ieXRlcyIgICApKSk7Ci0KLSAgICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0
ZWRncm91cCIgICAgICAgICAgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVz
c2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UiICkp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxk
Q291bnQoZigicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlIikpKTsKLSAgICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfaW1w
b3J0X21lc3NhZ2UiICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfbGF6eV9tZXNzYWdlIiApKSk7Ci0gICAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYo
InJlcGVhdGVkX25lc3RlZF9lbnVtIiAgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2ZvcmVpZ25fZW51
bSIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2ltcG9ydF9lbnVtIiAgICApKSk7Ci0KLSAgICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVw
ZWF0ZWRfc3RyaW5nX3BpZWNlIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVz
c2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfY29yZCIpKSk7Ci0KLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMjAxICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJy
ZXBlYXRlZF9pbnQzMiIgICApLCAwKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwMkwg
LCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfaW50NjQiICAgKSwgMCkpOwot
ICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDMgICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxk
KGYoInJlcGVhdGVkX3VpbnQzMiIgICksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
MjA0TCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF91aW50NjQiICApLCAw
KSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwNSAgLCBtZXNzYWdlLmdldFJlcGVhdGVk
RmllbGQoZigicmVwZWF0ZWRfc2ludDMyIiAgKSwgMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscygyMDZMICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX3NpbnQ2NCIg
ICksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjA3ICAsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9maXhlZDMyIiApLCAwKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIwOEwgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfZml4
ZWQ2NCIgKSwgMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDkgICwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX3NmaXhlZDMyIiksIDApKTsKLSAgICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMjEwTCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRl
ZF9zZml4ZWQ2NCIpLCAwKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIxMUYgLCBtZXNz
YWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfZmxvYXQiICAgKSwgMCkpOwotICAgICAg
QXNzZXJ0LmFzc2VydEVxdWFscygyMTJEICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJl
cGVhdGVkX2RvdWJsZSIgICksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHModHJ1ZSAs
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9ib29sIiAgICApLCAwKSk7Ci0g
ICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIyMTUiLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQo
ZigicmVwZWF0ZWRfc3RyaW5nIiAgKSwgMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyh0
b0J5dGVzKCIyMTYiKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2J5dGVz
IiksIDApKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMTcsCi0gICAgICAgICgoTWVz
c2FnZSltZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRncm91cCIpLCAwKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RmllbGQocmVwZWF0ZWRHcm91cEEpKTsKLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMjE4LAotICAgICAgICAoKE1lc3NhZ2UpbWVzc2FnZS5nZXRS
ZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiksIDApKQotICAgICAgICAg
ICAgICAgICAgICAgICAgIC5nZXRGaWVsZChuZXN0ZWRCKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDIxOSwKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChm
KCJyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UiKSwgMCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgLmdldEZpZWxkKGZvcmVpZ25DKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIyMCwK
LSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9p
bXBvcnRfbWVzc2FnZSIpLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RmllbGQo
aW1wb3J0RCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMjcsCi0gICAgICAgICgoTWVz
c2FnZSltZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfbGF6eV9tZXNzYWdlIiks
IDApKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWVsZChuZXN0ZWRCKSk7Ci0KLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIG5lc3RlZEJhciwgbWVzc2FnZS5nZXRSZXBlYXRlZEZp
ZWxkKGYoInJlcGVhdGVkX25lc3RlZF9lbnVtIiApLDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoZm9yZWlnbkJhciwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2Zv
cmVpZ25fZW51bSIpLDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGltcG9ydEJhciwg
bWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2ltcG9ydF9lbnVtIiApLDApKTsK
LQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiMjI0IiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZp
ZWxkKGYoInJlcGVhdGVkX3N0cmluZ19waWVjZSIpLCAwKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKCIyMjUiLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfY29yZCIp
LCAwKSk7Ci0KLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMzAxICAsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9pbnQzMiIgICApLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDMwMkwgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfaW50
NjQiICAgKSwgMSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygzMDMgICwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX3VpbnQzMiIgICksIDEpKTsKLSAgICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMzA0TCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRl
ZF91aW50NjQiICApLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMwNSAgLCBtZXNz
YWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc2ludDMyIiAgKSwgMSkpOwotICAgICAg
QXNzZXJ0LmFzc2VydEVxdWFscygzMDZMICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJl
cGVhdGVkX3NpbnQ2NCIgICksIDEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMzA3ICAs
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9maXhlZDMyIiApLCAxKSk7Ci0g
ICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMwOEwgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQo
ZigicmVwZWF0ZWRfZml4ZWQ2NCIgKSwgMSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygz
MDkgICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX3NmaXhlZDMyIiksIDEp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMzEwTCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRG
aWVsZChmKCJyZXBlYXRlZF9zZml4ZWQ2NCIpLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDMxMUYgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfZmxvYXQiICAg
KSwgMSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygzMTJEICwgbWVzc2FnZS5nZXRSZXBl
YXRlZEZpZWxkKGYoInJlcGVhdGVkX2RvdWJsZSIgICksIDEpKTsKLSAgICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoZmFsc2UsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9ib29s
IiAgICApLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIzMTUiLCBtZXNzYWdlLmdl
dFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc3RyaW5nIiAgKSwgMSkpOwotICAgICAgQXNzZXJ0
LmFzc2VydEVxdWFscyh0b0J5dGVzKCIzMTYiKSwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYo
InJlcGVhdGVkX2J5dGVzIiksIDEpKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygzMTcs
Ci0gICAgICAgICgoTWVzc2FnZSltZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRn
cm91cCIpLCAxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RmllbGQocmVwZWF0ZWRH
cm91cEEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMzE4LAotICAgICAgICAoKE1lc3Nh
Z2UpbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiks
IDEpKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWVsZChuZXN0ZWRCKSk7Ci0gICAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMxOSwKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0
UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UiKSwgMSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgLmdldEZpZWxkKGZvcmVpZ25DKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDMyMCwKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVs
ZChmKCJyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSIpLCAxKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAuZ2V0RmllbGQoaW1wb3J0RCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygzMjcs
Ci0gICAgICAgICgoTWVzc2FnZSltZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRf
bGF6eV9tZXNzYWdlIiksIDEpKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWVsZChu
ZXN0ZWRCKSk7Ci0KLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIG5lc3RlZEJheiwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX25lc3RlZF9lbnVtIiApLDEpKTsKLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoZm9yZWlnbkJheiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxk
KGYoInJlcGVhdGVkX2ZvcmVpZ25fZW51bSIpLDEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoIGltcG9ydEJheiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2ltcG9y
dF9lbnVtIiApLDEpKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiMzI0IiwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX3N0cmluZ19waWVjZSIpLCAxKSk7Ci0gICAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIzMjUiLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigi
cmVwZWF0ZWRfY29yZCIpLCAxKSk7Ci0KLSAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgIEFzc2Vy
dC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVsdF9pbnQzMiIgICApKSk7Ci0g
ICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRfaW50NjQi
ICAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNGaWVsZChmKCJkZWZh
dWx0X3VpbnQzMiIgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmll
bGQoZigiZGVmYXVsdF91aW50NjQiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNz
YWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRfc2ludDMyIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2Vy
dFRydWUobWVzc2FnZS5oYXNGaWVsZChmKCJkZWZhdWx0X3NpbnQ2NCIgICkpKTsKLSAgICAgIEFz
c2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVsdF9maXhlZDMyIiApKSk7
Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRfZml4
ZWQ2NCIgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNGaWVsZChmKCJk
ZWZhdWx0X3NmaXhlZDMyIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFz
RmllbGQoZigiZGVmYXVsdF9zZml4ZWQ2NCIpKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRfZmxvYXQiICAgKSkpOwotICAgICAgQXNzZXJ0LmFz
c2VydFRydWUobWVzc2FnZS5oYXNGaWVsZChmKCJkZWZhdWx0X2RvdWJsZSIgICkpKTsKLSAgICAg
IEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVsdF9ib29sIiAgICAp
KSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRf
c3RyaW5nIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2FnZS5oYXNGaWVsZChm
KCJkZWZhdWx0X2J5dGVzIiAgICkpKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydFRydWUobWVzc2Fn
ZS5oYXNGaWVsZChmKCJkZWZhdWx0X25lc3RlZF9lbnVtIiApKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRfZm9yZWlnbl9lbnVtIikpKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVsdF9pbXBvcnRf
ZW51bSIgKSkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYo
ImRlZmF1bHRfc3RyaW5nX3BpZWNlIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3Nh
Z2UuaGFzRmllbGQoZigiZGVmYXVsdF9jb3JkIikpKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscyg0MDEgICwgbWVzc2FnZS5nZXRGaWVsZChmKCJkZWZhdWx0X2ludDMyIiAgICkpKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNDAyTCAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVs
dF9pbnQ2NCIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQwMyAgLCBtZXNzYWdl
LmdldEZpZWxkKGYoImRlZmF1bHRfdWludDMyIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscyg0MDRMICwgbWVzc2FnZS5nZXRGaWVsZChmKCJkZWZhdWx0X3VpbnQ2NCIgICkpKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNDA1ICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVs
dF9zaW50MzIiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQwNkwgLCBtZXNzYWdl
LmdldEZpZWxkKGYoImRlZmF1bHRfc2ludDY0IiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscyg0MDcgICwgbWVzc2FnZS5nZXRGaWVsZChmKCJkZWZhdWx0X2ZpeGVkMzIiICkpKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNDA4TCAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVs
dF9maXhlZDY0IiApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQwOSAgLCBtZXNzYWdl
LmdldEZpZWxkKGYoImRlZmF1bHRfc2ZpeGVkMzIiKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscyg0MTBMICwgbWVzc2FnZS5nZXRGaWVsZChmKCJkZWZhdWx0X3NmaXhlZDY0IikpKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNDExRiAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVs
dF9mbG9hdCIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQxMkQgLCBtZXNzYWdl
LmdldEZpZWxkKGYoImRlZmF1bHRfZG91YmxlIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscyhmYWxzZSwgbWVzc2FnZS5nZXRGaWVsZChmKCJkZWZhdWx0X2Jvb2wiICAgICkpKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjQxNSIsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVs
dF9zdHJpbmciICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRvQnl0ZXMoIjQxNiIp
LCBtZXNzYWdlLmdldEZpZWxkKGYoImRlZmF1bHRfYnl0ZXMiKSkpOwotCi0gICAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKCBuZXN0ZWRGb28sIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF9uZXN0
ZWRfZW51bSIgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhmb3JlaWduRm9vLCBtZXNz
YWdlLmdldEZpZWxkKGYoImRlZmF1bHRfZm9yZWlnbl9lbnVtIikpKTsKLSAgICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoIGltcG9ydEZvbywgbWVzc2FnZS5nZXRGaWVsZChmKCJkZWZhdWx0X2ltcG9y
dF9lbnVtIiApKSk7Ci0KLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjQyNCIsIG1lc3NhZ2Uu
Z2V0RmllbGQoZigiZGVmYXVsdF9zdHJpbmdfcGllY2UiKSkpOwotICAgICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygiNDI1IiwgbWVzc2FnZS5nZXRGaWVsZChmKCJkZWZhdWx0X2NvcmQiKSkpOwotCi0g
ICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYoIm9uZW9mX2J5dGVzIikp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHModG9CeXRlcygiNjA0IiksIG1lc3NhZ2UuZ2V0
RmllbGQoZigib25lb2ZfYnl0ZXMiKSkpOwotCi0gICAgICBpZiAoZXh0ZW5zaW9uUmVnaXN0cnkg
PT0gbnVsbCkgewotICAgICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNGaWVsZChm
KCJvbmVvZl91aW50MzIiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5o
YXNGaWVsZChmKCJvbmVvZl9uZXN0ZWRfbWVzc2FnZSIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3Nl
cnRGYWxzZShtZXNzYWdlLmhhc0ZpZWxkKGYoIm9uZW9mX3N0cmluZyIpKSk7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0ZpZWxkKGYoIm9uZW9m
X3VpbnQzMiIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRmllbGQo
Zigib25lb2ZfbmVzdGVkX21lc3NhZ2UiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0ZpZWxkKGYoIm9uZW9mX3N0cmluZyIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoNjAxLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9uZW9mX3VpbnQzMiIpKSk7Ci0gICAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjAyLAotICAgICAgICAgICAgKChNZXNzYWdlT3JCdWls
ZGVyKSBtZXNzYWdlLmdldEZpZWxkKGYoIm9uZW9mX25lc3RlZF9tZXNzYWdlIikpKQotICAgICAg
ICAgICAgLmdldEZpZWxkKG5lc3RlZEIpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygi
NjAzIiwgbWVzc2FnZS5nZXRGaWVsZChmKCJvbmVvZl9zdHJpbmciKSkpOwotICAgICAgfQotICAg
IH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIEFzc2VydCAodXNpbmcg
e0Bjb2RlIGp1bml0LmZyYW1ld29yay5Bc3NlcnR9fSB0aGF0IGFsbCBmaWVsZHMgb2YKLSAgICAg
KiB7QGNvZGUgbWVzc2FnZX0gYXJlIGNsZWFyZWQsIGFuZCB0aGF0IGdldHRpbmcgdGhlIGZpZWxk
cyByZXR1cm5zIHRoZWlyCi0gICAgICogZGVmYXVsdCB2YWx1ZXMsIHVzaW5nIHRoZSB7QGxpbmsg
TWVzc2FnZX0gcmVmbGVjdGlvbiBpbnRlcmZhY2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQg
YXNzZXJ0Q2xlYXJWaWFSZWZsZWN0aW9uKE1lc3NhZ2VPckJ1aWxkZXIgbWVzc2FnZSkgewotICAg
ICAgLy8gaGFzX2JsYWgoKSBzaG91bGQgaW5pdGlhbGx5IGJlIGZhbHNlIGZvciBhbGwgb3B0aW9u
YWwgZmllbGRzLgotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigi
b3B0aW9uYWxfaW50MzIiICAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2Uu
aGFzRmllbGQoZigib3B0aW9uYWxfaW50NjQiICAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZh
bHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfdWludDMyIiAgKSkpOwotICAgICAgQXNz
ZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfdWludDY0IiAgKSkp
OwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxf
c2ludDMyIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQo
Zigib3B0aW9uYWxfc2ludDY0IiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3Nh
Z2UuaGFzRmllbGQoZigib3B0aW9uYWxfZml4ZWQzMiIgKSkpOwotICAgICAgQXNzZXJ0LmFzc2Vy
dEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfZml4ZWQ2NCIgKSkpOwotICAgICAg
QXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfc2ZpeGVkMzIi
KSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9u
YWxfc2ZpeGVkNjQiKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmll
bGQoZigib3B0aW9uYWxfZmxvYXQiICAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1l
c3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfZG91YmxlIiAgKSkpOwotICAgICAgQXNzZXJ0LmFz
c2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfYm9vbCIgICAgKSkpOwotICAg
ICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfc3RyaW5n
IiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0
aW9uYWxfYnl0ZXMiICAgKSkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5o
YXNGaWVsZChmKCJvcHRpb25hbGdyb3VwIiAgICAgICAgICAgKSkpOwotICAgICAgQXNzZXJ0LmFz
c2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiICkp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0ZpZWxkKGYoIm9wdGlvbmFs
X2ZvcmVpZ25fbWVzc2FnZSIpKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5o
YXNGaWVsZChmKCJvcHRpb25hbF9pbXBvcnRfbWVzc2FnZSIgKSkpOwotCi0gICAgICBBc3NlcnQu
YXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNGaWVsZChmKCJvcHRpb25hbF9uZXN0ZWRfZW51bSIgKSkp
OwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib3B0aW9uYWxf
Zm9yZWlnbl9lbnVtIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0Zp
ZWxkKGYoIm9wdGlvbmFsX2ltcG9ydF9lbnVtIiApKSk7Ci0KLSAgICAgIEFzc2VydC5hc3NlcnRG
YWxzZShtZXNzYWdlLmhhc0ZpZWxkKGYoIm9wdGlvbmFsX3N0cmluZ19waWVjZSIpKSk7Ci0gICAg
ICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNGaWVsZChmKCJvcHRpb25hbF9jb3JkIikp
KTsKLQotICAgICAgLy8gT3B0aW9uYWwgZmllbGRzIHdpdGhvdXQgZGVmYXVsdHMgYXJlIHNldCB0
byB6ZXJvIG9yIHNvbWV0aGluZyBsaWtlIGl0LgotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygw
ICAgICwgbWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9pbnQzMiIgICApKSk7Ci0gICAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDBMICAgLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX2lu
dDY0IiAgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCAgICAsIG1lc3NhZ2UuZ2V0
RmllbGQoZigib3B0aW9uYWxfdWludDMyIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFs
cygwTCAgICwgbWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF91aW50NjQiICApKSk7Ci0gICAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAgICAgLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFs
X3NpbnQzMiIgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMEwgICAsIG1lc3NhZ2Uu
Z2V0RmllbGQoZigib3B0aW9uYWxfc2ludDY0IiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscygwICAgICwgbWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9maXhlZDMyIiApKSk7Ci0g
ICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDBMICAgLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlv
bmFsX2ZpeGVkNjQiICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCAgICAsIG1lc3Nh
Z2UuZ2V0RmllbGQoZigib3B0aW9uYWxfc2ZpeGVkMzIiKSkpOwotICAgICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscygwTCAgICwgbWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9zZml4ZWQ2NCIpKSk7
Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDBGICAgLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9w
dGlvbmFsX2Zsb2F0IiAgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMEQgICAsIG1l
c3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxfZG91YmxlIiAgKSkpOwotICAgICAgQXNzZXJ0LmFz
c2VydEVxdWFscyhmYWxzZSwgbWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9ib29sIiAgICAp
KSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIiICAgLCBtZXNzYWdlLmdldEZpZWxkKGYo
Im9wdGlvbmFsX3N0cmluZyIgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoQnl0ZVN0
cmluZy5FTVBUWSwgbWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9ieXRlcyIpKSk7Ci0KLSAg
ICAgIC8vIEVtYmVkZGVkIG1lc3NhZ2VzIHNob3VsZCBhbHNvIGJlIGNsZWFyLgotICAgICAgQXNz
ZXJ0LmFzc2VydEZhbHNlKAotICAgICAgICAoKE1lc3NhZ2UpbWVzc2FnZS5nZXRGaWVsZChmKCJv
cHRpb25hbGdyb3VwIikpKS5oYXNGaWVsZChncm91cEEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRG
YWxzZSgKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxfbmVz
dGVkX21lc3NhZ2UiKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgLmhhc0ZpZWxkKG5lc3Rl
ZEIpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRGYWxzZSgKLSAgICAgICAgKChNZXNzYWdlKW1lc3Nh
Z2UuZ2V0RmllbGQoZigib3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlIikpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgIC5oYXNGaWVsZChmb3JlaWduQykpOwotICAgICAgQXNzZXJ0LmFzc2VydEZh
bHNlKAotICAgICAgICAoKE1lc3NhZ2UpbWVzc2FnZS5nZXRGaWVsZChmKCJvcHRpb25hbF9pbXBv
cnRfbWVzc2FnZSIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAuaGFzRmllbGQoaW1wb3J0
RCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKAotICAgICAgICAoKE1lc3NhZ2UpbWVzc2Fn
ZS5nZXRGaWVsZChmKCJvcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2UiKSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgLmhhc0ZpZWxkKGltcG9ydEUpKTsKLSAgICAgIEFzc2VydC5hc3Nl
cnRGYWxzZSgKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxf
bGF6eV9tZXNzYWdlIikpKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5oYXNGaWVsZChuZXN0
ZWRCKSk7Ci0KLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwKLSAgICAgICAgKChNZXNzYWdl
KW1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxncm91cCIpKSkuZ2V0RmllbGQoZ3JvdXBBKSk7
Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsCi0gICAgICAgICgoTWVzc2FnZSltZXNzYWdl
LmdldEZpZWxkKGYoIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIikpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgIC5nZXRGaWVsZChuZXN0ZWRCKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDAsCi0gICAgICAgICgoTWVzc2FnZSltZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX2ZvcmVp
Z25fbWVzc2FnZSIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RmllbGQoZm9yZWln
bkMpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwKLSAgICAgICAgKChNZXNzYWdlKW1l
c3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxfaW1wb3J0X21lc3NhZ2UiKSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgLmdldEZpZWxkKGltcG9ydEQpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMCwKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxf
cHVibGljX2ltcG9ydF9tZXNzYWdlIikpKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRG
aWVsZChpbXBvcnRFKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsCi0gICAgICAgICgo
TWVzc2FnZSltZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX2xhenlfbWVzc2FnZSIpKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RmllbGQobmVzdGVkQikpOwotCi0gICAgICAvLyBF
bnVtcyB3aXRob3V0IGRlZmF1bHRzIGFyZSBzZXQgdG8gdGhlIGZpcnN0IHZhbHVlIGluIHRoZSBl
bnVtLgotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggbmVzdGVkRm9vLCBtZXNzYWdlLmdldEZp
ZWxkKGYoIm9wdGlvbmFsX25lc3RlZF9lbnVtIiApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKGZvcmVpZ25Gb28sIG1lc3NhZ2UuZ2V0RmllbGQoZigib3B0aW9uYWxfZm9yZWlnbl9lbnVt
IikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIGltcG9ydEZvbywgbWVzc2FnZS5nZXRG
aWVsZChmKCJvcHRpb25hbF9pbXBvcnRfZW51bSIgKSkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKCIiLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlvbmFsX3N0cmluZ19waWVjZSIpKSk7
Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIiLCBtZXNzYWdlLmdldEZpZWxkKGYoIm9wdGlv
bmFsX2NvcmQiKSkpOwotCi0gICAgICAvLyBSZXBlYXRlZCBmaWVsZHMgYXJlIGVtcHR5LgotICAg
ICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChm
KCJyZXBlYXRlZF9pbnQzMiIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1l
c3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2ludDY0IiAgICkpKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQo
ZigicmVwZWF0ZWRfdWludDMyIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBt
ZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF91aW50NjQiICApKSk7Ci0g
ICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50
KGYoInJlcGVhdGVkX3NpbnQzMiIgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwg
bWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfc2ludDY0IiAgKSkpOwot
ICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3Vu
dChmKCJyZXBlYXRlZF9maXhlZDMyIiApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAs
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2ZpeGVkNjQiICkpKTsK
LSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291
bnQoZigicmVwZWF0ZWRfc2ZpeGVkMzIiKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygw
LCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF9zZml4ZWQ2NCIpKSk7
Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENv
dW50KGYoInJlcGVhdGVkX2Zsb2F0IiAgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
MCwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfZG91YmxlIiAgKSkp
OwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRD
b3VudChmKCJyZXBlYXRlZF9ib29sIiAgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX3N0cmluZyIgICkp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxk
Q291bnQoZigicmVwZWF0ZWRfYnl0ZXMiICAgKSkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkZ3JvdXAiICAg
ICAgICAgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiApKSk7Ci0gICAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJl
cGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSIpKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAs
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdl
IiApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRG
aWVsZENvdW50KGYoInJlcGVhdGVkX2xhenlfbWVzc2FnZSIgICApKSk7Ci0gICAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVk
X25lc3RlZF9lbnVtIiAgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3Nh
Z2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2ZvcmVpZ25fZW51bSIgICApKSk7
Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENv
dW50KGYoInJlcGVhdGVkX2ltcG9ydF9lbnVtIiAgICApKSk7Ci0KLSAgICAgIEFzc2VydC5hc3Nl
cnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfc3Ry
aW5nX3BpZWNlIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRS
ZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfY29yZCIpKSk7Ci0KLSAgICAgIC8vIGhhc19i
bGFoKCkgc2hvdWxkIGFsc28gYmUgZmFsc2UgZm9yIGFsbCBkZWZhdWx0IGZpZWxkcy4KLSAgICAg
IEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRfaW50MzIiICAg
KSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVs
dF9pbnQ2NCIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNGaWVs
ZChmKCJkZWZhdWx0X3VpbnQzMiIgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNz
YWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRfdWludDY0IiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2Vy
dEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVsdF9zaW50MzIiICApKSk7Ci0gICAgICBB
c3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNGaWVsZChmKCJkZWZhdWx0X3NpbnQ2NCIgICkp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRf
Zml4ZWQzMiIgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQo
ZigiZGVmYXVsdF9maXhlZDY0IiApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2Fn
ZS5oYXNGaWVsZChmKCJkZWZhdWx0X3NmaXhlZDMyIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRG
YWxzZShtZXNzYWdlLmhhc0ZpZWxkKGYoImRlZmF1bHRfc2ZpeGVkNjQiKSkpOwotICAgICAgQXNz
ZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVsdF9mbG9hdCIgICApKSk7
Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNGaWVsZChmKCJkZWZhdWx0X2Rv
dWJsZSIgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0ZpZWxkKGYo
ImRlZmF1bHRfYm9vbCIgICAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2Uu
aGFzRmllbGQoZigiZGVmYXVsdF9zdHJpbmciICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFs
c2UobWVzc2FnZS5oYXNGaWVsZChmKCJkZWZhdWx0X2J5dGVzIiAgICkpKTsKLQotICAgICAgQXNz
ZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVsdF9uZXN0ZWRfZW51bSIg
KSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVs
dF9mb3JlaWduX2VudW0iKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFz
RmllbGQoZigiZGVmYXVsdF9pbXBvcnRfZW51bSIgKSkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0
RmFsc2UobWVzc2FnZS5oYXNGaWVsZChmKCJkZWZhdWx0X3N0cmluZ19waWVjZSIgKSkpOwotICAg
ICAgQXNzZXJ0LmFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRmllbGQoZigiZGVmYXVsdF9jb3JkIiAp
KSk7Ci0KLSAgICAgIC8vIEZpZWxkcyB3aXRoIGRlZmF1bHRzIGhhdmUgdGhlaXIgZGVmYXVsdCB2
YWx1ZXMgKGR1aCkuCi0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA0MSAgICAsIG1lc3NhZ2Uu
Z2V0RmllbGQoZigiZGVmYXVsdF9pbnQzMiIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKCA0MkwgICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF9pbnQ2NCIgICApKSk7Ci0g
ICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA0MyAgICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVm
YXVsdF91aW50MzIiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA0NEwgICAsIG1l
c3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF91aW50NjQiICApKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKC00NSAgICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF9zaW50MzIiICAp
KSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA0NkwgICAsIG1lc3NhZ2UuZ2V0RmllbGQo
ZigiZGVmYXVsdF9zaW50NjQiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA0NyAg
ICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF9maXhlZDMyIiApKSk7Ci0gICAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKCA0OEwgICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF9maXhl
ZDY0IiApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA0OSAgICAsIG1lc3NhZ2UuZ2V0
RmllbGQoZigiZGVmYXVsdF9zZml4ZWQzMiIpKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxz
KC01MEwgICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF9zZml4ZWQ2NCIpKSk7Ci0gICAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA1MS41RiAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVs
dF9mbG9hdCIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCA1MmUzRCAsIG1lc3Nh
Z2UuZ2V0RmllbGQoZigiZGVmYXVsdF9kb3VibGUiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKHRydWUgICAsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF9ib29sIiAgICApKSk7
Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJoZWxsbyIsIG1lc3NhZ2UuZ2V0RmllbGQoZigi
ZGVmYXVsdF9zdHJpbmciICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRvQnl0ZXMo
IndvcmxkIiksIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF9ieXRlcyIpKSk7Ci0KLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoIG5lc3RlZEJhciwgbWVzc2FnZS5nZXRGaWVsZChmKCJkZWZh
dWx0X25lc3RlZF9lbnVtIiApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGZvcmVpZ25C
YXIsIG1lc3NhZ2UuZ2V0RmllbGQoZigiZGVmYXVsdF9mb3JlaWduX2VudW0iKSkpOwotICAgICAg
QXNzZXJ0LmFzc2VydEVxdWFscyggaW1wb3J0QmFyLCBtZXNzYWdlLmdldEZpZWxkKGYoImRlZmF1
bHRfaW1wb3J0X2VudW0iICkpKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiYWJjIiwg
bWVzc2FnZS5nZXRGaWVsZChmKCJkZWZhdWx0X3N0cmluZ19waWVjZSIpKSk7Ci0gICAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKCIxMjMiLCBtZXNzYWdlLmdldEZpZWxkKGYoImRlZmF1bHRfY29yZCIp
KSk7Ci0KLSAgICAgIEFzc2VydC5hc3NlcnRGYWxzZShtZXNzYWdlLmhhc0ZpZWxkKGYoIm9uZW9m
X3VpbnQzMiIpKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNGaWVsZChm
KCJvbmVvZl9uZXN0ZWRfbWVzc2FnZSIpKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RmFsc2UobWVz
c2FnZS5oYXNGaWVsZChmKCJvbmVvZl9zdHJpbmciKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEZh
bHNlKG1lc3NhZ2UuaGFzRmllbGQoZigib25lb2ZfYnl0ZXMiKSkpOwotCi0gICAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RmllbGQoZigib25lb2ZfdWludDMyIikpKTsKLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIiIsIG1lc3NhZ2UuZ2V0RmllbGQoZigib25lb2Zfc3Ry
aW5nIikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHModG9CeXRlcygiIiksIG1lc3NhZ2Uu
Z2V0RmllbGQoZigib25lb2ZfYnl0ZXMiKSkpOwotICAgIH0KLQotCi0gICAgLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LSAgICBwdWJsaWMgdm9pZCBhc3NlcnRSZXBlYXRlZEZpZWxkc01vZGlmaWVkVmlhUmVmbGVjdGlv
bigKLSAgICAgICAgTWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlKSB7Ci0gICAgICAvLyBNb2RpZnlS
ZXBlYXRlZEZpZWxkcyBvbmx5IHNldHMgdGhlIHNlY29uZCByZXBlYXRlZCBlbGVtZW50IG9mIGVh
Y2gKLSAgICAgIC8vIGZpZWxkLiAgSW4gYWRkaXRpb24gdG8gdmVyaWZ5aW5nIHRoaXMsIHdlIGFs
c28gdmVyaWZ5IHRoYXQgdGhlIGZpcnN0Ci0gICAgICAvLyBlbGVtZW50IGFuZCBzaXplIHdlcmUg
Km5vdCogbW9kaWZpZWQuCi0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0
UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2ludDMyIiAgICkpKTsKLSAgICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0
ZWRfaW50NjQiICAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdl
dFJlcGVhdGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF91aW50MzIiICApKSk7Ci0gICAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVh
dGVkX3VpbnQ2NCIgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfc2ludDMyIiAgKSkpOwotICAgICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJyZXBl
YXRlZF9zaW50NjQiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2ZpeGVkMzIiICkpKTsKLSAgICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVw
ZWF0ZWRfZml4ZWQ2NCIgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdl
LmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF9zZml4ZWQzMiIpKSk7Ci0gICAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJl
cGVhdGVkX3NmaXhlZDY0IikpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfZmxvYXQiICAgKSkpOwotICAgICAg
QXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJy
ZXBlYXRlZF9kb3VibGUiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3Nh
Z2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInJlcGVhdGVkX2Jvb2wiICAgICkpKTsKLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigi
cmVwZWF0ZWRfc3RyaW5nIiAgKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNz
YWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF9ieXRlcyIgICApKSk7Ci0KLSAg
ICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQo
ZigicmVwZWF0ZWRncm91cCIgICAgICAgICAgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfbmVzdGVkX21l
c3NhZ2UiICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBl
YXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlIikpKTsKLSAgICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVw
ZWF0ZWRfaW1wb3J0X21lc3NhZ2UiICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwg
bWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfbGF6eV9tZXNzYWdlIiAg
ICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZp
ZWxkQ291bnQoZigicmVwZWF0ZWRfbmVzdGVkX2VudW0iICAgICkpKTsKLSAgICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRf
Zm9yZWlnbl9lbnVtIiAgICkpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZigicmVwZWF0ZWRfaW1wb3J0X2VudW0iICAgICkpKTsK
LQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRD
b3VudChmKCJyZXBlYXRlZF9zdHJpbmdfcGllY2UiKSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscygyLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGRDb3VudChmKCJyZXBlYXRlZF9jb3JkIikp
KTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDEgICwgbWVzc2FnZS5nZXRSZXBlYXRl
ZEZpZWxkKGYoInJlcGVhdGVkX2ludDMyIiAgICksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMjAyTCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9pbnQ2NCIg
ICApLCAwKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwMyAgLCBtZXNzYWdlLmdldFJl
cGVhdGVkRmllbGQoZigicmVwZWF0ZWRfdWludDMyIiAgKSwgMCkpOwotICAgICAgQXNzZXJ0LmFz
c2VydEVxdWFscygyMDRMICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX3Vp
bnQ2NCIgICksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjA1ICAsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zaW50MzIiICApLCAwKSk7Ci0gICAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDIwNkwgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0
ZWRfc2ludDY0IiAgKSwgMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDcgICwgbWVz
c2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2ZpeGVkMzIiICksIDApKTsKLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoMjA4TCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJy
ZXBlYXRlZF9maXhlZDY0IiApLCAwKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwOSAg
LCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc2ZpeGVkMzIiKSwgMCkpOwot
ICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMTBMICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxk
KGYoInJlcGVhdGVkX3NmaXhlZDY0IiksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
MjExRiAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9mbG9hdCIgICApLCAw
KSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIxMkQgLCBtZXNzYWdlLmdldFJlcGVhdGVk
RmllbGQoZigicmVwZWF0ZWRfZG91YmxlIiAgKSwgMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscyh0cnVlICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2Jvb2wiICAg
ICksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjIxNSIsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zdHJpbmciICApLCAwKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKHRvQnl0ZXMoIjIxNiIpLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVw
ZWF0ZWRfYnl0ZXMiKSwgMCkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIxNywKLSAg
ICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZGdyb3Vw
IiksIDApKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWVsZChyZXBlYXRlZEdyb3Vw
QSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMTgsCi0gICAgICAgICgoTWVzc2FnZSlt
ZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UiKSwgMCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpZWxkKG5lc3RlZEIpKTsKLSAgICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoMjE5LAotICAgICAgICAoKE1lc3NhZ2UpbWVzc2FnZS5nZXRSZXBl
YXRlZEZpZWxkKGYoInJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSIpLCAwKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAuZ2V0RmllbGQoZm9yZWlnbkMpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoMjIwLAotICAgICAgICAoKE1lc3NhZ2UpbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYo
InJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIiksIDApKQotICAgICAgICAgICAgICAgICAgICAgICAg
IC5nZXRGaWVsZChpbXBvcnREKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIyNywKLSAg
ICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9sYXp5
X21lc3NhZ2UiKSwgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpZWxkKG5lc3Rl
ZEIpKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggbmVzdGVkQmFyLCBtZXNzYWdlLmdl
dFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfbmVzdGVkX2VudW0iICksMCkpOwotICAgICAgQXNz
ZXJ0LmFzc2VydEVxdWFscyhmb3JlaWduQmFyLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigi
cmVwZWF0ZWRfZm9yZWlnbl9lbnVtIiksMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygg
aW1wb3J0QmFyLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfaW1wb3J0X2Vu
dW0iICksMCkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCIyMjQiLCBtZXNzYWdlLmdl
dFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc3RyaW5nX3BpZWNlIiksIDApKTsKLSAgICAgIEFz
c2VydC5hc3NlcnRFcXVhbHMoIjIyNSIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBl
YXRlZF9jb3JkIiksIDApKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg1MDEgICwgbWVz
c2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2ludDMyIiAgICksIDEpKTsKLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoNTAyTCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJy
ZXBlYXRlZF9pbnQ2NCIgICApLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDUwMyAg
LCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfdWludDMyIiAgKSwgMSkpOwot
ICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg1MDRMICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxk
KGYoInJlcGVhdGVkX3VpbnQ2NCIgICksIDEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMo
NTA1ICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zaW50MzIiICApLCAx
KSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDUwNkwgLCBtZXNzYWdlLmdldFJlcGVhdGVk
RmllbGQoZigicmVwZWF0ZWRfc2ludDY0IiAgKSwgMSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscyg1MDcgICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2ZpeGVkMzIi
ICksIDEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNTA4TCAsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9maXhlZDY0IiApLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDUwOSAgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc2Zp
eGVkMzIiKSwgMSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg1MTBMICwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX3NmaXhlZDY0IiksIDEpKTsKLSAgICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoNTExRiAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRl
ZF9mbG9hdCIgICApLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDUxMkQgLCBtZXNz
YWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfZG91YmxlIiAgKSwgMSkpOwotICAgICAg
QXNzZXJ0LmFzc2VydEVxdWFscyh0cnVlICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJl
cGVhdGVkX2Jvb2wiICAgICksIDEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjUxNSIs
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zdHJpbmciICApLCAxKSk7Ci0g
ICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRvQnl0ZXMoIjUxNiIpLCBtZXNzYWdlLmdldFJlcGVh
dGVkRmllbGQoZigicmVwZWF0ZWRfYnl0ZXMiKSwgMSkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDUxNywKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChm
KCJyZXBlYXRlZGdyb3VwIiksIDEpKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWVs
ZChyZXBlYXRlZEdyb3VwQSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg1MTgsCi0gICAg
ICAgICgoTWVzc2FnZSltZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2UiKSwgMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpZWxkKG5lc3Rl
ZEIpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNTE5LAotICAgICAgICAoKE1lc3NhZ2Up
bWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSIpLCAx
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RmllbGQoZm9yZWlnbkMpKTsKLSAgICAg
IEFzc2VydC5hc3NlcnRFcXVhbHMoNTIwLAotICAgICAgICAoKE1lc3NhZ2UpbWVzc2FnZS5nZXRS
ZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIiksIDEpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgIC5nZXRGaWVsZChpbXBvcnREKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDUyNywKLSAgICAgICAgKChNZXNzYWdlKW1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChm
KCJyZXBlYXRlZF9sYXp5X21lc3NhZ2UiKSwgMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
LmdldEZpZWxkKG5lc3RlZEIpKTsKLQotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggbmVzdGVk
Rm9vLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfbmVzdGVkX2VudW0iICks
MSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhmb3JlaWduRm9vLCBtZXNzYWdlLmdldFJl
cGVhdGVkRmllbGQoZigicmVwZWF0ZWRfZm9yZWlnbl9lbnVtIiksMSkpOwotICAgICAgQXNzZXJ0
LmFzc2VydEVxdWFscyggaW1wb3J0Rm9vLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVw
ZWF0ZWRfaW1wb3J0X2VudW0iICksMSkpOwotCi0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCI1
MjQiLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc3RyaW5nX3BpZWNlIiks
IDEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjUyNSIsIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRGaWVsZChmKCJyZXBlYXRlZF9jb3JkIiksIDEpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBzZXRQYWNrZWRGaWVsZHNWaWFSZWZsZWN0aW9uKE1lc3NhZ2UuQnVpbGRlciBtZXNzYWdlKSB7
Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicGFja2VkX2ludDMyIiAgICksIDYw
MSApOwotICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9pbnQ2NCIgICAp
LCA2MDJMKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfdWludDMy
IiAgKSwgNjAzICk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicGFja2VkX3Vp
bnQ2NCIgICksIDYwNEwpOwotICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInBhY2tl
ZF9zaW50MzIiICApLCA2MDUgKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJw
YWNrZWRfc2ludDY0IiAgKSwgNjA2TCk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQo
ZigicGFja2VkX2ZpeGVkMzIiICksIDYwNyApOwotICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZp
ZWxkKGYoInBhY2tlZF9maXhlZDY0IiApLCA2MDhMKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0
ZWRGaWVsZChmKCJwYWNrZWRfc2ZpeGVkMzIiKSwgNjA5ICk7Ci0gICAgICBtZXNzYWdlLmFkZFJl
cGVhdGVkRmllbGQoZigicGFja2VkX3NmaXhlZDY0IiksIDYxMEwpOwotICAgICAgbWVzc2FnZS5h
ZGRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9mbG9hdCIgICApLCA2MTFGKTsKLSAgICAgIG1lc3Nh
Z2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfZG91YmxlIiAgKSwgNjEyRCk7Ci0gICAgICBt
ZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicGFja2VkX2Jvb2wiICAgICksIHRydWUpOwotICAg
ICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9lbnVtIiApLCAgZm9yZWlnbkJh
cik7Ci0gICAgICAvLyBBZGQgYSBzZWNvbmQgb25lIG9mIGVhY2ggZmllbGQuCi0gICAgICBtZXNz
YWdlLmFkZFJlcGVhdGVkRmllbGQoZigicGFja2VkX2ludDMyIiAgICksIDcwMSApOwotICAgICAg
bWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9pbnQ2NCIgICApLCA3MDJMKTsKLSAg
ICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfdWludDMyIiAgKSwgNzAzICk7
Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicGFja2VkX3VpbnQ2NCIgICksIDcw
NEwpOwotICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9zaW50MzIiICAp
LCA3MDUgKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfc2ludDY0
IiAgKSwgNzA2TCk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQoZigicGFja2VkX2Zp
eGVkMzIiICksIDcwNyApOwotICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZpZWxkKGYoInBhY2tl
ZF9maXhlZDY0IiApLCA3MDhMKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0ZWRGaWVsZChmKCJw
YWNrZWRfc2ZpeGVkMzIiKSwgNzA5ICk7Ci0gICAgICBtZXNzYWdlLmFkZFJlcGVhdGVkRmllbGQo
ZigicGFja2VkX3NmaXhlZDY0IiksIDcxMEwpOwotICAgICAgbWVzc2FnZS5hZGRSZXBlYXRlZEZp
ZWxkKGYoInBhY2tlZF9mbG9hdCIgICApLCA3MTFGKTsKLSAgICAgIG1lc3NhZ2UuYWRkUmVwZWF0
ZWRGaWVsZChmKCJwYWNrZWRfZG91YmxlIiAgKSwgNzEyRCk7Ci0gICAgICBtZXNzYWdlLmFkZFJl
cGVhdGVkRmllbGQoZigicGFja2VkX2Jvb2wiICAgICksIGZhbHNlKTsKLSAgICAgIG1lc3NhZ2Uu
YWRkUmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfZW51bSIgKSwgIGZvcmVpZ25CYXopOwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIGFzc2VydFBhY2tlZEZpZWxkc1NldFZpYVJlZmxlY3Rpb24oTWVz
c2FnZU9yQnVpbGRlciBtZXNzYWdlKSB7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1l
c3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInBhY2tlZF9pbnQzMiIgICApKSk7Ci0gICAg
ICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYo
InBhY2tlZF9pbnQ2NCIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3Nh
Z2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInBhY2tlZF91aW50MzIiICApKSk7Ci0gICAgICBB
c3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInBh
Y2tlZF91aW50NjQiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInBhY2tlZF9zaW50MzIiICApKSk7Ci0gICAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInBhY2tl
ZF9zaW50NjQiICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0
UmVwZWF0ZWRGaWVsZENvdW50KGYoInBhY2tlZF9maXhlZDMyIiApKSk7Ci0gICAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInBhY2tlZF9m
aXhlZDY0IiApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGaWVsZENvdW50KGYoInBhY2tlZF9zZml4ZWQzMiIpKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInBhY2tlZF9zZml4
ZWQ2NCIpKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRGaWVsZENvdW50KGYoInBhY2tlZF9mbG9hdCIgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInBhY2tlZF9kb3VibGUi
ICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRG
aWVsZENvdW50KGYoInBhY2tlZF9ib29sIiAgICApKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDIsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGYoInBhY2tlZF9lbnVtIiAgICkp
KTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjAxICAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRG
aWVsZChmKCJwYWNrZWRfaW50MzIiICAgKSwgMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFs
cyg2MDJMICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9pbnQ2NCIgICApLCAw
KSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDYwMyAgLCBtZXNzYWdlLmdldFJlcGVhdGVk
RmllbGQoZigicGFja2VkX3VpbnQzMiIgICksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVh
bHMoNjA0TCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfdWludDY0IiAgKSwg
MCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg2MDUgICwgbWVzc2FnZS5nZXRSZXBlYXRl
ZEZpZWxkKGYoInBhY2tlZF9zaW50MzIiICApLCAwKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1
YWxzKDYwNkwgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicGFja2VkX3NpbnQ2NCIgICks
IDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNjA3ICAsIG1lc3NhZ2UuZ2V0UmVwZWF0
ZWRGaWVsZChmKCJwYWNrZWRfZml4ZWQzMiIgKSwgMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVx
dWFscyg2MDhMICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9maXhlZDY0IiAp
LCAwKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDYwOSAgLCBtZXNzYWdlLmdldFJlcGVh
dGVkRmllbGQoZigicGFja2VkX3NmaXhlZDMyIiksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRF
cXVhbHMoNjEwTCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfc2ZpeGVkNjQi
KSwgMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg2MTFGICwgbWVzc2FnZS5nZXRSZXBl
YXRlZEZpZWxkKGYoInBhY2tlZF9mbG9hdCIgICApLCAwKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0
RXF1YWxzKDYxMkQgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicGFja2VkX2RvdWJsZSIg
ICksIDApKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHModHJ1ZSAsIG1lc3NhZ2UuZ2V0UmVw
ZWF0ZWRGaWVsZChmKCJwYWNrZWRfYm9vbCIgICAgKSwgMCkpOwotICAgICAgQXNzZXJ0LmFzc2Vy
dEVxdWFscyhmb3JlaWduQmFyLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicGFja2VkX2Vu
dW0iICksMCkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg3MDEgICwgbWVzc2FnZS5nZXRS
ZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9pbnQzMiIgICApLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNz
ZXJ0RXF1YWxzKDcwMkwgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicGFja2VkX2ludDY0
IiAgICksIDEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzAzICAsIG1lc3NhZ2UuZ2V0
UmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfdWludDMyIiAgKSwgMSkpOwotICAgICAgQXNzZXJ0LmFz
c2VydEVxdWFscyg3MDRMICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF91aW50
NjQiICApLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDcwNSAgLCBtZXNzYWdlLmdl
dFJlcGVhdGVkRmllbGQoZigicGFja2VkX3NpbnQzMiIgICksIDEpKTsKLSAgICAgIEFzc2VydC5h
c3NlcnRFcXVhbHMoNzA2TCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfc2lu
dDY0IiAgKSwgMSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg3MDcgICwgbWVzc2FnZS5n
ZXRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9maXhlZDMyIiApLCAxKSk7Ci0gICAgICBBc3NlcnQu
YXNzZXJ0RXF1YWxzKDcwOEwgLCBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZigicGFja2VkX2Zp
eGVkNjQiICksIDEpKTsKLSAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzA5ICAsIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRfc2ZpeGVkMzIiKSwgMSkpOwotICAgICAgQXNzZXJ0
LmFzc2VydEVxdWFscyg3MTBMICwgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9z
Zml4ZWQ2NCIpLCAxKSk7Ci0gICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDcxMUYgLCBtZXNzYWdl
LmdldFJlcGVhdGVkRmllbGQoZigicGFja2VkX2Zsb2F0IiAgICksIDEpKTsKLSAgICAgIEFzc2Vy
dC5hc3NlcnRFcXVhbHMoNzEyRCAsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJwYWNrZWRf
ZG91YmxlIiAgKSwgMSkpOwotICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhmYWxzZSwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZEZpZWxkKGYoInBhY2tlZF9ib29sIiAgICApLCAxKSk7Ci0gICAgICBBc3Nl
cnQuYXNzZXJ0RXF1YWxzKGZvcmVpZ25CYXosIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChmKCJw
YWNrZWRfZW51bSIgKSwxKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVmVyaWZpZXMgdGhh
dCB0aGUgcmVmbGVjdGlvbiBzZXR0ZXJzIGZvciB0aGUgZ2l2ZW4uQnVpbGRlciBvYmplY3QgdGhy
b3cgYQotICAgICAqIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIHRoZXkgYXJlIHBhc3NlZCBhIG51
bGwgdmFsdWUuICBVc2VzIEFzc2VydCB0byB0aHJvdyBhbgotICAgICAqIGFwcHJvcHJpYXRlIGFz
c2VydGlvbiBmYWlsdXJlLCBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCB2ZXJpZmllZC4KLSAgICAg
Ki8KLSAgICBwdWJsaWMgdm9pZCBhc3NlcnRSZWZsZWN0aW9uU2V0dGVyc1JlamVjdE51bGwoTWVz
c2FnZS5CdWlsZGVyIGJ1aWxkZXIpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAg
dHJ5IHsKLSAgICAgICAgYnVpbGRlci5zZXRGaWVsZChmKCJvcHRpb25hbF9zdHJpbmciKSwgbnVs
bCk7Ci0gICAgICAgIEFzc2VydC5mYWlsKCJFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAg
ICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8gV2UgZXhw
ZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgICAgfQotICAgICAgdHJ5IHsKLSAgICAgICAgYnVpbGRl
ci5zZXRGaWVsZChmKCJvcHRpb25hbF9ieXRlcyIpLCBudWxsKTsKLSAgICAgICAgQXNzZXJ0LmZh
aWwoIkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwotICAgICAgfSBjYXRjaCAoTnVsbFBvaW50
ZXJFeGNlcHRpb24gZSkgewotICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24uCi0g
ICAgICB9Ci0gICAgICB0cnkgewotICAgICAgICBidWlsZGVyLnNldEZpZWxkKGYoIm9wdGlvbmFs
X25lc3RlZF9lbnVtIiksIG51bGwpOwotICAgICAgICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIHdh
cyBub3QgdGhyb3duIik7Ci0gICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICAgIH0KLSAgICAgIHRy
eSB7Ci0gICAgICAgIGJ1aWxkZXIuc2V0RmllbGQoZigib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Ui
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2Up
IG51bGwpOwotICAgICAgICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIHdhcyBub3QgdGhyb3duIik7
Ci0gICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIFdl
IGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICAgIH0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGJ1
aWxkZXIuc2V0RmllbGQoZigib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAoVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UuQnVpbGRlcikgbnVsbCk7
Ci0gICAgICAgIEFzc2VydC5mYWlsKCJFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24iKTsKLSAgICAg
IH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8gV2UgZXhwZWN0
IHRoaXMgZXhjZXB0aW9uLgotICAgICAgfQotCi0gICAgICB0cnkgewotICAgICAgICBidWlsZGVy
LmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfc3RyaW5nIiksIG51bGwpOwotICAgICAgICBB
c3NlcnQuZmFpbCgiRXhjZXB0aW9uIHdhcyBub3QgdGhyb3duIik7Ci0gICAgICB9IGNhdGNoIChO
dWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2Vw
dGlvbi4KLSAgICAgIH0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRG
aWVsZChmKCJyZXBlYXRlZF9ieXRlcyIpLCBudWxsKTsKLSAgICAgICAgQXNzZXJ0LmZhaWwoIkV4
Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwotICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNl
cHRpb24gZSkgewotICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgICB9
Ci0gICAgICB0cnkgewotICAgICAgICBidWlsZGVyLmFkZFJlcGVhdGVkRmllbGQoZigicmVwZWF0
ZWRfbmVzdGVkX2VudW0iKSwgbnVsbCk7Ci0gICAgICAgIEFzc2VydC5mYWlsKCJFeGNlcHRpb24g
d2FzIG5vdCB0aHJvd24iKTsKLSAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUp
IHsKLSAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgICAgfQotICAgICAg
dHJ5IHsKLSAgICAgICAgYnVpbGRlci5hZGRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlIiksIG51bGwpOwotICAgICAgICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIHdhcyBu
b3QgdGhyb3duIik7Ci0gICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvKioKLSAgICAgKiBWZXJpZmllcyB0aGF0IHRoZSByZWZsZWN0aW9uIHJlcGVhdGVkIHNldHRl
cnMgZm9yIHRoZSBnaXZlbiBCdWlsZGVyIG9iamVjdCB0aHJvdyBhCi0gICAgICogTnVsbFBvaW50
ZXJFeGNlcHRpb24gaWYgdGhleSBhcmUgcGFzc2VkIGEgbnVsbCB2YWx1ZS4gIFVzZXMgQXNzZXJ0
IHRvIHRocm93IGFuIGFwcHJvcHJpYXRlCi0gICAgICogYXNzZXJ0aW9uIGZhaWx1cmUsIGlmIHRo
ZSBjb25kaXRpb24gaXMgbm90IHZlcmlmaWVkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFz
c2VydFJlZmxlY3Rpb25SZXBlYXRlZFNldHRlcnNSZWplY3ROdWxsKE1lc3NhZ2UuQnVpbGRlciBi
dWlsZGVyKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgIGJ1aWxkZXIuYWRkUmVw
ZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9zdHJpbmciKSwgIm9uZSIpOwotICAgICAgdHJ5IHsKLSAg
ICAgICAgYnVpbGRlci5zZXRSZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX3N0cmluZyIpLCAwLCBu
dWxsKTsKLSAgICAgICAgQXNzZXJ0LmZhaWwoIkV4Y2VwdGlvbiB3YXMgbm90IHRocm93biIpOwot
ICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgewotICAgICAgICAvLyBXZSBl
eHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgICB9Ci0KLSAgICAgIGJ1aWxkZXIuYWRkUmVwZWF0
ZWRGaWVsZChmKCJyZXBlYXRlZF9ieXRlcyIpLCB0b0J5dGVzKCJvbmUiKSk7Ci0gICAgICB0cnkg
ewotICAgICAgICBidWlsZGVyLnNldFJlcGVhdGVkRmllbGQoZigicmVwZWF0ZWRfYnl0ZXMiKSwg
MCwgbnVsbCk7Ci0gICAgICAgIEFzc2VydC5mYWlsKCJFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24i
KTsKLSAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8g
V2UgZXhwZWN0IHRoaXMgZXhjZXB0aW9uLgotICAgICAgfQotCi0gICAgICBidWlsZGVyLmFkZFJl
cGVhdGVkRmllbGQoZigicmVwZWF0ZWRfbmVzdGVkX2VudW0iKSwgbmVzdGVkQmF6KTsKLSAgICAg
IHRyeSB7Ci0gICAgICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRGaWVsZChmKCJyZXBlYXRlZF9uZXN0
ZWRfZW51bSIpLCAwLCBudWxsKTsKLSAgICAgICAgQXNzZXJ0LmZhaWwoIkV4Y2VwdGlvbiB3YXMg
bm90IHRocm93biIpOwotICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgewot
ICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyBleGNlcHRpb24uCi0gICAgICB9Ci0KLSAgICAgIGJ1
aWxkZXIuYWRkUmVwZWF0ZWRGaWVsZCgKLSAgICAgICAgICBmKCJyZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZSIpLAotICAgICAgICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIo
KS5zZXRCYigyMTgpLmJ1aWxkKCkpOwotICAgICAgdHJ5IHsKLSAgICAgICAgYnVpbGRlci5zZXRS
ZXBlYXRlZEZpZWxkKGYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiksIDAsIG51bGwpOwotICAg
ICAgICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIHdhcyBub3QgdGhyb3duIik7Ci0gICAgICB9IGNh
dGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIFdlIGV4cGVjdCB0aGlz
IGV4Y2VwdGlvbi4KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGZp
bGVQYXRoIFRoZSBwYXRoIHJlbGF0aXZlIHRvCi0gICAqIHtAbGluayAjZ2V0VGVzdERhdGFEaXJ9
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVhZFRleHRGcm9tRmlsZShTdHJpbmcg
ZmlsZVBhdGgpIHsKLSAgICByZXR1cm4gcmVhZEJ5dGVzRnJvbUZpbGUoZmlsZVBhdGgpLnRvU3Ry
aW5nVXRmOCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgRmlsZSBnZXRUZXN0RGF0YURpcigp
IHsKLSAgICAvLyBTZWFyY2ggZWFjaCBwYXJlbnQgZGlyZWN0b3J5IGxvb2tpbmcgZm9yICJzcmMv
Z29vZ2xlL3Byb3RvYnVmIi4KLSAgICBGaWxlIGFuY2VzdG9yID0gbmV3IEZpbGUoIi4iKTsKLSAg
ICB0cnkgewotICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5nZXRDYW5vbmljYWxGaWxlKCk7Ci0g
ICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oCi0gICAgICAgICJDb3VsZG4ndCBnZXQgY2Fub25pY2FsIG5hbWUgb2Ygd29ya2luZyBk
aXJlY3RvcnkuIiwgZSk7Ci0gICAgfQotICAgIHdoaWxlIChhbmNlc3RvciAhPSBudWxsICYmIGFu
Y2VzdG9yLmV4aXN0cygpKSB7Ci0gICAgICBpZiAobmV3IEZpbGUoYW5jZXN0b3IsICJzcmMvZ29v
Z2xlL3Byb3RvYnVmIikuZXhpc3RzKCkpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBGaWxlKGFuY2Vz
dG9yLCAic3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0ZGF0YSIpOwotICAgICAgfQotICAgICAgYW5j
ZXN0b3IgPSBhbmNlc3Rvci5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgfQotCi0gICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAiQ291bGQgbm90IGZpbmQgZ29sZGVuIGZpbGVzLiAg
VGhpcyB0ZXN0IG11c3QgYmUgcnVuIGZyb20gd2l0aGluIHRoZSAiICsKLSAgICAgICJwcm90b2J1
ZiBzb3VyY2UgcGFja2FnZSBzbyB0aGF0IGl0IGNhbiByZWFkIHRlc3QgZGF0YSBmaWxlcyBmcm9t
IHRoZSAiICsKLSAgICAgICJDKysgc291cmNlIHRyZWUuIik7Ci0gIH0KLQotICAvKioKLSAgICog
QHBhcmFtIGZpbGVuYW1lIFRoZSBwYXRoIHJlbGF0aXZlIHRvCi0gICAqIHtAbGluayAjZ2V0VGVz
dERhdGFEaXJ9LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBCeXRlU3RyaW5nIHJlYWRCeXRlc0Zy
b21GaWxlKFN0cmluZyBmaWxlbmFtZSkgewotICAgIEZpbGUgZnVsbFBhdGggPSBuZXcgRmlsZShn
ZXRUZXN0RGF0YURpcigpLCBmaWxlbmFtZSk7Ci0gICAgdHJ5IHsKLSAgICAgIFJhbmRvbUFjY2Vz
c0ZpbGUgZmlsZSA9IG5ldyBSYW5kb21BY2Nlc3NGaWxlKGZ1bGxQYXRoLCAiciIpOwotICAgICAg
Ynl0ZVtdIGNvbnRlbnQgPSBuZXcgYnl0ZVsoaW50KSBmaWxlLmxlbmd0aCgpXTsKLSAgICAgIGZp
bGUucmVhZEZ1bGx5KGNvbnRlbnQpOwotICAgICAgcmV0dXJuIEJ5dGVTdHJpbmcuY29weUZyb20o
Y29udGVudCk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgLy8gVGhyb3cg
YSBSdW50aW1lRXhjZXB0aW9uIGhlcmUgc28gdGhhdCB3ZSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9u
IGZyb20KLSAgICAgIC8vIHN0YXRpYyBpbml0aWFsaXplcnMuCi0gICAgICB0aHJvdyBuZXcgSWxs
ZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAiQ291bGRuJ3QgcmVhZCBmaWxlOiAiICsg
ZnVsbFBhdGguZ2V0UGF0aCgpLCBlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRo
ZSBieXRlcyBvZiB0aGUgImdvbGRlbiBtZXNzYWdlIi4gIFRoaXMgaXMgYSBzZXJpYWxpemVkIFRl
c3RBbGxUeXBlcwotICAgKiB3aXRoIGFsbCBmaWVsZHMgc2V0IGFzIHRoZXkgd291bGQgYmUgYnkK
LSAgICoge0BsaW5rICNzZXRBbGxGaWVsZHMoVGVzdEFsbFR5cGVzLkJ1aWxkZXIpfSwgYnV0IGl0
IGlzIGxvYWRlZCBmcm9tIGEgZmlsZQotICAgKiBvbiBkaXNrIHJhdGhlciB0aGFuIGdlbmVyYXRl
ZCBkeW5hbWljYWxseS4gIFRoZSBmaWxlIGlzIGFjdHVhbGx5IGdlbmVyYXRlZAotICAgKiBieSBD
KysgY29kZSwgc28gdGVzdGluZyBhZ2FpbnN0IGl0IHZlcmlmaWVzIGNvbXBhdGliaWxpdHkgd2l0
aCBDKysuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEJ5dGVTdHJpbmcgZ2V0R29sZGVuTWVzc2Fn
ZSgpIHsKLSAgICBpZiAoZ29sZGVuTWVzc2FnZSA9PSBudWxsKSB7Ci0gICAgICBnb2xkZW5NZXNz
YWdlID0gcmVhZEJ5dGVzRnJvbUZpbGUoImdvbGRlbl9tZXNzYWdlX29uZW9mX2ltcGxlbWVudGVk
Iik7Ci0gICAgfQotICAgIHJldHVybiBnb2xkZW5NZXNzYWdlOwotICB9Ci0gIHByaXZhdGUgc3Rh
dGljIEJ5dGVTdHJpbmcgZ29sZGVuTWVzc2FnZSA9IG51bGw7Ci0KLSAgLyoqCi0gICAqIEdldCB0
aGUgYnl0ZXMgb2YgdGhlICJnb2xkZW4gcGFja2VkIGZpZWxkcyBtZXNzYWdlIi4gIFRoaXMgaXMg
YSBzZXJpYWxpemVkCi0gICAqIFRlc3RQYWNrZWRUeXBlcyB3aXRoIGFsbCBmaWVsZHMgc2V0IGFz
IHRoZXkgd291bGQgYmUgYnkKLSAgICoge0BsaW5rICNzZXRQYWNrZWRGaWVsZHMoVGVzdFBhY2tl
ZFR5cGVzLkJ1aWxkZXIpfSwgYnV0IGl0IGlzIGxvYWRlZCBmcm9tIGEKLSAgICogZmlsZSBvbiBk
aXNrIHJhdGhlciB0aGFuIGdlbmVyYXRlZCBkeW5hbWljYWxseS4gIFRoZSBmaWxlIGlzIGFjdHVh
bGx5Ci0gICAqIGdlbmVyYXRlZCBieSBDKysgY29kZSwgc28gdGVzdGluZyBhZ2FpbnN0IGl0IHZl
cmlmaWVzIGNvbXBhdGliaWxpdHkgd2l0aAotICAgKiBDKysuCi0gICAqLwotICBwdWJsaWMgc3Rh
dGljIEJ5dGVTdHJpbmcgZ2V0R29sZGVuUGFja2VkRmllbGRzTWVzc2FnZSgpIHsKLSAgICBpZiAo
Z29sZGVuUGFja2VkRmllbGRzTWVzc2FnZSA9PSBudWxsKSB7Ci0gICAgICBnb2xkZW5QYWNrZWRG
aWVsZHNNZXNzYWdlID0KLSAgICAgICAgICByZWFkQnl0ZXNGcm9tRmlsZSgiZ29sZGVuX3BhY2tl
ZF9maWVsZHNfbWVzc2FnZSIpOwotICAgIH0KLSAgICByZXR1cm4gZ29sZGVuUGFja2VkRmllbGRz
TWVzc2FnZTsKLSAgfQotICBwcml2YXRlIHN0YXRpYyBCeXRlU3RyaW5nIGdvbGRlblBhY2tlZEZp
ZWxkc01lc3NhZ2UgPSBudWxsOwotCi0gIC8qKgotICAgKiBNb2NrIGltcGxlbWVudGF0aW9uIG9m
IHtAbGluayBHZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXJQYXJlbnR9IGZvciB0ZXN0aW5nLgotICAg
KgotICAgKiBAYXV0aG9yIGpvbnBAZ29vZ2xlLmNvbSAoSm9uIFBlcmxvdykKLSAgICovCi0gIHB1
YmxpYyBzdGF0aWMgY2xhc3MgTW9ja0J1aWxkZXJQYXJlbnQKLSAgICAgIGltcGxlbWVudHMgR2Vu
ZXJhdGVkTWVzc2FnZS5CdWlsZGVyUGFyZW50IHsKLQotICAgIHByaXZhdGUgaW50IGludmFsaWRh
dGlvbnM7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBtYXJrRGlydHkoKSB7Ci0g
ICAgICBpbnZhbGlkYXRpb25zKys7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRJbnZhbGlk
YXRpb25Db3VudCgpIHsKLSAgICAgIHJldHVybiBpbnZhbGlkYXRpb25zOwotICAgIH0KLSAgfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L1Rlc3RVdGlsTGl0ZS5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL1Rlc3RVdGlsTGl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
ZjMzZmExNGFiMmNlY2M0N2ZkM2U5NmZmZTY3Njk3ZWExY2ExODRmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9UZXN0VXRpbExpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1
OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBj
b20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYu
VW5pdHRlc3RMaXRlLk9wdGlvbmFsR3JvdXBfZXh0ZW5zaW9uX2xpdGU7Ci1pbXBvcnQgc3RhdGlj
IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLlJlcGVhdGVkR3JvdXBfZXh0ZW5zaW9u
X2xpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLmRl
ZmF1bHRCb29sRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1
Zi5Vbml0dGVzdExpdGUuZGVmYXVsdEJ5dGVzRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMg
Y29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuZGVmYXVsdENvcmRFeHRlbnNpb25MaXRl
OwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZhdWx0
RG91YmxlRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5V
bml0dGVzdExpdGUuZGVmYXVsdEZpeGVkMzJFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBj
b20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZhdWx0Rml4ZWQ2NEV4dGVuc2lvbkxp
dGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLmRlZmF1
bHRGbG9hdEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYu
VW5pdHRlc3RMaXRlLmRlZmF1bHRGb3JlaWduRW51bUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3Rh
dGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLmRlZmF1bHRJbXBvcnRFbnVtRXh0
ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExp
dGUuZGVmYXVsdEludDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5w
cm90b2J1Zi5Vbml0dGVzdExpdGUuZGVmYXVsdEludDY0RXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBz
dGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuZGVmYXVsdE5lc3RlZEVudW1F
eHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0
TGl0ZS5kZWZhdWx0U2ZpeGVkMzJFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29v
Z2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZhdWx0U2ZpeGVkNjRFeHRlbnNpb25MaXRlOwot
aW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZhdWx0U2lu
dDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0
dGVzdExpdGUuZGVmYXVsdFNpbnQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5n
b29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLmRlZmF1bHRTdHJpbmdFeHRlbnNpb25MaXRlOwot
aW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5kZWZhdWx0U3Ry
aW5nUGllY2VFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVm
LlVuaXR0ZXN0TGl0ZS5kZWZhdWx0VWludDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMg
Y29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuZGVmYXVsdFVpbnQ2NEV4dGVuc2lvbkxp
dGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9uZW9m
Qnl0ZXNFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVu
aXR0ZXN0TGl0ZS5vbmVvZk5lc3RlZE1lc3NhZ2VFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRp
YyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5vbmVvZlN0cmluZ0V4dGVuc2lvbkxp
dGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9uZW9m
VWludDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5V
bml0dGVzdExpdGUub3B0aW9uYWxCb29sRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29t
Lmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9uYWxCeXRlc0V4dGVuc2lvbkxpdGU7
Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFs
Q29yZEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5p
dHRlc3RMaXRlLm9wdGlvbmFsRG91YmxlRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29t
Lmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9uYWxGaXhlZDMyRXh0ZW5zaW9uTGl0
ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9u
YWxGaXhlZDY0RXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1
Zi5Vbml0dGVzdExpdGUub3B0aW9uYWxGbG9hdEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGlj
IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsRm9yZWlnbkVudW1FeHRl
bnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0
ZS5vcHRpb25hbEZvcmVpZ25NZXNzYWdlRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29t
Lmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9uYWxHcm91cEV4dGVuc2lvbkxpdGU7
Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFs
SW1wb3J0RW51bUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9i
dWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW1wb3J0TWVzc2FnZUV4dGVuc2lvbkxpdGU7Ci1pbXBv
cnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsSW50MzJF
eHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0
TGl0ZS5vcHRpb25hbEludDY0RXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2ds
ZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0aW9uYWxMYXp5TWVzc2FnZUV4dGVuc2lvbkxpdGU7
Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFs
TmVzdGVkRW51bUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9i
dWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsTmVzdGVkTWVzc2FnZUV4dGVuc2lvbkxpdGU7Ci1pbXBv
cnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsUHVibGlj
SW1wb3J0TWVzc2FnZUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJv
dG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsU2ZpeGVkMzJFeHRlbnNpb25MaXRlOwotaW1wb3J0
IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5vcHRpb25hbFNmaXhlZDY0
RXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVz
dExpdGUub3B0aW9uYWxTaW50MzJFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29v
Z2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5vcHRpb25hbFNpbnQ2NEV4dGVuc2lvbkxpdGU7Ci1p
bXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsU3Ry
aW5nRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0
dGVzdExpdGUub3B0aW9uYWxTdHJpbmdQaWVjZUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGlj
IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLm9wdGlvbmFsVWludDMyRXh0ZW5zaW9u
TGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUub3B0
aW9uYWxVaW50NjRFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3Rv
YnVmLlVuaXR0ZXN0TGl0ZS5wYWNrZWRCb29sRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMg
Y29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucGFja2VkRG91YmxlRXh0ZW5zaW9uTGl0
ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucGFja2Vk
RW51bUV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5p
dHRlc3RMaXRlLnBhY2tlZEZpeGVkMzJFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20u
Z29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5wYWNrZWRGaXhlZDY0RXh0ZW5zaW9uTGl0ZTsK
LWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucGFja2VkRmxv
YXRFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0
ZXN0TGl0ZS5wYWNrZWRJbnQzMkV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29n
bGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnBhY2tlZEludDY0RXh0ZW5zaW9uTGl0ZTsKLWltcG9y
dCBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucGFja2VkU2ZpeGVkMzJF
eHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0
TGl0ZS5wYWNrZWRTZml4ZWQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29n
bGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnBhY2tlZFNpbnQzMkV4dGVuc2lvbkxpdGU7Ci1pbXBv
cnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnBhY2tlZFNpbnQ2NEV4
dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RM
aXRlLnBhY2tlZFVpbnQzMkV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUu
cHJvdG9idWYuVW5pdHRlc3RMaXRlLnBhY2tlZFVpbnQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQg
c3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkQm9vbEV4dGVu
c2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRl
LnJlcGVhdGVkQnl0ZXNFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnBy
b3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZENvcmRFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0
YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZERvdWJsZUV4dGVu
c2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRl
LnJlcGVhdGVkRml4ZWQzMkV4dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUu
cHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkRml4ZWQ2NEV4dGVuc2lvbkxpdGU7Ci1pbXBv
cnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVkRmxvYXRF
eHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0
TGl0ZS5yZXBlYXRlZEZvcmVpZ25FbnVtRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29t
Lmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucmVwZWF0ZWRGb3JlaWduTWVzc2FnZUV4dGVu
c2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRl
LnJlcGVhdGVkR3JvdXBFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnBy
b3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZEltcG9ydEVudW1FeHRlbnNpb25MaXRlOwotaW1w
b3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZEltcG9y
dE1lc3NhZ2VFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVm
LlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZEludDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMg
Y29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucmVwZWF0ZWRJbnQ2NEV4dGVuc2lvbkxp
dGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVh
dGVkTGF6eU1lc3NhZ2VFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnBy
b3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZE5lc3RlZEVudW1FeHRlbnNpb25MaXRlOwotaW1w
b3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZE5lc3Rl
ZE1lc3NhZ2VFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVm
LlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0
aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUucmVwZWF0ZWRTZml4ZWQ2NEV4dGVu
c2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRl
LnJlcGVhdGVkU2ludDMyRXh0ZW5zaW9uTGl0ZTsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5w
cm90b2J1Zi5Vbml0dGVzdExpdGUucmVwZWF0ZWRTaW50NjRFeHRlbnNpb25MaXRlOwotaW1wb3J0
IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZFN0cmluZ0V4
dGVuc2lvbkxpdGU7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RM
aXRlLnJlcGVhdGVkU3RyaW5nUGllY2VFeHRlbnNpb25MaXRlOwotaW1wb3J0IHN0YXRpYyBjb20u
Z29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5yZXBlYXRlZFVpbnQzMkV4dGVuc2lvbkxpdGU7
Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLnJlcGVhdGVk
VWludDY0RXh0ZW5zaW9uTGl0ZTsKLQotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRl
c3RJbXBvcnRMaXRlLkltcG9ydEVudW1MaXRlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYu
VW5pdHRlc3RJbXBvcnRMaXRlLkltcG9ydE1lc3NhZ2VMaXRlOwotaW1wb3J0IGNvbS5nb29nbGUu
cHJvdG9idWYuVW5pdHRlc3RJbXBvcnRQdWJsaWNMaXRlLlB1YmxpY0ltcG9ydE1lc3NhZ2VMaXRl
OwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLkZvcmVpZ25FbnVtTGl0
ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5Gb3JlaWduTWVzc2Fn
ZUxpdGU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuVGVzdEFsbEV4
dGVuc2lvbnNMaXRlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuVW5pdHRlc3RMaXRlLlRl
c3RBbGxUeXBlc0xpdGU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUu
VGVzdFBhY2tlZEV4dGVuc2lvbnNMaXRlOwotCi0vKioKLSAqIENvbnRhaW5zIG1ldGhvZHMgZm9y
IHNldHRpbmcgZmllbGRzIG9mIHtAY29kZSBUZXN0QWxsVHlwZXNMaXRlfSwge0Bjb2RlIFRlc3RB
bGxFeHRlbnNpb25zTGl0ZX0sCi0gKiBhbmQge0Bjb2RlIFRlc3RQYWNrZWRFeHRlbnNpb25zTGl0
ZX0uIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZSBmdW5jdGlvbmFsaXR5IGluIFRlc3RVdGlsLmph
dmEgYnV0Ci0gKiBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIHByZXNlbmNlIG9mIGFueSBub24tbGl0
ZSBwcm90b3MuCi0gKgotICogPHA+VGhpcyBjb2RlIGlzIG5vdCB0byBiZSB1c2VkIG91dHNpZGUg
b2Yge0Bjb2RlIGNvbS5nb29nbGUucHJvdG9idWZ9IGFuZAotICogc3VicGFja2FnZXMuCi0gKi8K
LXB1YmxpYyBmaW5hbCBjbGFzcyBUZXN0VXRpbExpdGUgewotICBwcml2YXRlIFRlc3RVdGlsTGl0
ZSgpIHt9Ci0KLSAgLyoqIEhlbHBlciB0byBjb252ZXJ0IGEgU3RyaW5nIHRvIEJ5dGVTdHJpbmcu
ICovCi0gIHN0YXRpYyBCeXRlU3RyaW5nIHRvQnl0ZXMoU3RyaW5nIHN0cikgewotICAgIHJldHVy
biBCeXRlU3RyaW5nLmNvcHlGcm9tKHN0ci5nZXRCeXRlcyhJbnRlcm5hbC5VVEZfOCkpOwotICB9
Ci0KLSAgLyoqCi0gICAqIEdldCBhIHtAY29kZSBUZXN0QWxsVHlwZXNMaXRlLkJ1aWxkZXJ9IHdp
dGggYWxsIGZpZWxkcyBzZXQgYXMgdGhleSB3b3VsZCBiZSBieQotICAgKiB7QGxpbmsgI3NldEFs
bEZpZWxkcyhUZXN0QWxsVHlwZXNMaXRlLkJ1aWxkZXIpfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgVGVzdEFsbFR5cGVzTGl0ZS5CdWlsZGVyIGdldEFsbExpdGVTZXRCdWlsZGVyKCkgewotICAg
IFRlc3RBbGxUeXBlc0xpdGUuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzTGl0ZS5uZXdC
dWlsZGVyKCk7Ci0gICAgc2V0QWxsRmllbGRzKGJ1aWxkZXIpOwotICAgIHJldHVybiBidWlsZGVy
OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIHtAY29kZSBUZXN0QWxsRXh0ZW5zaW9uc0xpdGV9
IHdpdGggYWxsIGZpZWxkcyBzZXQgYXMgdGhleSB3b3VsZCBiZSBieQotICAgKiB7QGxpbmsgI3Nl
dEFsbEV4dGVuc2lvbnMoVGVzdEFsbEV4dGVuc2lvbnNMaXRlLkJ1aWxkZXIpfS4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgVGVzdEFsbEV4dGVuc2lvbnNMaXRlIGdldEFsbExpdGVFeHRlbnNpb25z
U2V0KCkgewotICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZS5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0
QWxsRXh0ZW5zaW9uc0xpdGUubmV3QnVpbGRlcigpOwotICAgIHNldEFsbEV4dGVuc2lvbnMoYnVp
bGRlcik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgVGVzdFBhY2tlZEV4dGVuc2lvbnNMaXRlIGdldExpdGVQYWNrZWRFeHRlbnNpb25zU2V0KCkg
ewotICAgIFRlc3RQYWNrZWRFeHRlbnNpb25zTGl0ZS5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0UGFj
a2VkRXh0ZW5zaW9uc0xpdGUubmV3QnVpbGRlcigpOwotICAgIHNldFBhY2tlZEV4dGVuc2lvbnMo
YnVpbGRlcik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKLSAgfQotICAKLSAgLyoqCi0g
ICAqIFNldCBldmVyeSBmaWVsZCBvZiB7QGNvZGUgYnVpbGRlcn0gdG8gdGhlIHZhbHVlcyBleHBl
Y3RlZCBieQotICAgKiB7QGNvZGUgYXNzZXJ0QWxsRmllbGRzU2V0KCl9LgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyB2b2lkIHNldEFsbEZpZWxkcyhUZXN0QWxsVHlwZXNMaXRlLkJ1aWxkZXIgYnVp
bGRlcikgewotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxJbnQzMiAgICgxMDEpOwotICAgIGJ1aWxk
ZXIuc2V0T3B0aW9uYWxJbnQ2NCAgICgxMDIpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxVaW50
MzIgICgxMDMpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxVaW50NjQgICgxMDQpOwotICAgIGJ1
aWxkZXIuc2V0T3B0aW9uYWxTaW50MzIgICgxMDUpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxT
aW50NjQgICgxMDYpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxGaXhlZDMyICgxMDcpOwotICAg
IGJ1aWxkZXIuc2V0T3B0aW9uYWxGaXhlZDY0ICgxMDgpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9u
YWxTZml4ZWQzMigxMDkpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxTZml4ZWQ2NCgxMTApOwot
ICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxGbG9hdCAgICgxMTEpOwotICAgIGJ1aWxkZXIuc2V0T3B0
aW9uYWxEb3VibGUgICgxMTIpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxCb29sICAgICh0cnVl
KTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsU3RyaW5nICAoIjExNSIpOwotICAgIGJ1aWxkZXIu
c2V0T3B0aW9uYWxCeXRlcyAgICh0b0J5dGVzKCIxMTYiKSk7Ci0KLSAgICBidWlsZGVyLnNldE9w
dGlvbmFsR3JvdXAoCi0gICAgICAgIFRlc3RBbGxUeXBlc0xpdGUuT3B0aW9uYWxHcm91cC5uZXdC
dWlsZGVyKCkuc2V0QSgxMTcpLmJ1aWxkKCkpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxOZXN0
ZWRNZXNzYWdlKAotICAgICAgICBUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2UubmV3QnVp
bGRlcigpLnNldEJiKDExOCkuYnVpbGQoKSk7Ci0gICAgYnVpbGRlci5zZXRPcHRpb25hbEZvcmVp
Z25NZXNzYWdlKAotICAgICAgICBGb3JlaWduTWVzc2FnZUxpdGUubmV3QnVpbGRlcigpLnNldEMo
MTE5KS5idWlsZCgpKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsSW1wb3J0TWVzc2FnZSgKLSAg
ICAgICAgSW1wb3J0TWVzc2FnZUxpdGUubmV3QnVpbGRlcigpLnNldEQoMTIwKS5idWlsZCgpKTsK
LSAgICBidWlsZGVyLnNldE9wdGlvbmFsUHVibGljSW1wb3J0TWVzc2FnZSgKLSAgICAgICAgUHVi
bGljSW1wb3J0TWVzc2FnZUxpdGUubmV3QnVpbGRlcigpLnNldEUoMTI2KS5idWlsZCgpKTsKLSAg
ICBidWlsZGVyLnNldE9wdGlvbmFsTGF6eU1lc3NhZ2UoCi0gICAgICAgIFRlc3RBbGxUeXBlc0xp
dGUuTmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0QmIoMTI3KS5idWlsZCgpKTsKLQotICAg
IGJ1aWxkZXIuc2V0T3B0aW9uYWxOZXN0ZWRFbnVtIChUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZEVu
dW0uQkFaKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsRm9yZWlnbkVudW0oRm9yZWlnbkVudW1M
aXRlLkZPUkVJR05fTElURV9CQVopOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxJbXBvcnRFbnVt
IChJbXBvcnRFbnVtTGl0ZS5JTVBPUlRfTElURV9CQVopOwotCi0gICAgYnVpbGRlci5zZXRPcHRp
b25hbFN0cmluZ1BpZWNlKCIxMjQiKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsQ29yZCgiMTI1
Iik7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEludDMyICAg
KDIwMSk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEludDY0ICAgKDIwMik7Ci0gICAgYnVpbGRl
ci5hZGRSZXBlYXRlZFVpbnQzMiAgKDIwMyk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZFVpbnQ2
NCAgKDIwNCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZFNpbnQzMiAgKDIwNSk7Ci0gICAgYnVp
bGRlci5hZGRSZXBlYXRlZFNpbnQ2NCAgKDIwNik7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZp
eGVkMzIgKDIwNyk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZpeGVkNjQgKDIwOCk7Ci0gICAg
YnVpbGRlci5hZGRSZXBlYXRlZFNmaXhlZDMyKDIwOSk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRl
ZFNmaXhlZDY0KDIxMCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZsb2F0ICAgKDIxMSk7Ci0g
ICAgYnVpbGRlci5hZGRSZXBlYXRlZERvdWJsZSAgKDIxMik7Ci0gICAgYnVpbGRlci5hZGRSZXBl
YXRlZEJvb2wgICAgKHRydWUpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRTdHJpbmcgICgiMjE1
Iik7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEJ5dGVzICAgKHRvQnl0ZXMoIjIxNiIpKTsKLQot
ICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRHcm91cCgKLSAgICAgICAgVGVzdEFsbFR5cGVzTGl0ZS5S
ZXBlYXRlZEdyb3VwLm5ld0J1aWxkZXIoKS5zZXRBKDIxNykuYnVpbGQoKSk7Ci0gICAgYnVpbGRl
ci5hZGRSZXBlYXRlZE5lc3RlZE1lc3NhZ2UoCi0gICAgICAgIFRlc3RBbGxUeXBlc0xpdGUuTmVz
dGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0QmIoMjE4KS5idWlsZCgpKTsKLSAgICBidWlsZGVy
LmFkZFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UoCi0gICAgICAgIEZvcmVpZ25NZXNzYWdlTGl0ZS5u
ZXdCdWlsZGVyKCkuc2V0QygyMTkpLmJ1aWxkKCkpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRJ
bXBvcnRNZXNzYWdlKAotICAgICAgICBJbXBvcnRNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkuc2V0
RCgyMjApLmJ1aWxkKCkpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRMYXp5TWVzc2FnZSgKLSAg
ICAgICAgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYigy
MjcpLmJ1aWxkKCkpOwotCi0gICAgYnVpbGRlci5hZGRSZXBlYXRlZE5lc3RlZEVudW0gKFRlc3RB
bGxUeXBlc0xpdGUuTmVzdGVkRW51bS5CQVIpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGb3Jl
aWduRW51bShGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUik7Ci0gICAgYnVpbGRlci5h
ZGRSZXBlYXRlZEltcG9ydEVudW0gKEltcG9ydEVudW1MaXRlLklNUE9SVF9MSVRFX0JBUik7Ci0K
LSAgICBidWlsZGVyLmFkZFJlcGVhdGVkU3RyaW5nUGllY2UoIjIyNCIpOwotICAgIGJ1aWxkZXIu
YWRkUmVwZWF0ZWRDb3JkKCIyMjUiKTsKLQotICAgIC8vIEFkZCBhIHNlY29uZCBvbmUgb2YgZWFj
aCBmaWVsZC4KLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkSW50MzIgICAoMzAxKTsKLSAgICBidWls
ZGVyLmFkZFJlcGVhdGVkSW50NjQgICAoMzAyKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkVWlu
dDMyICAoMzAzKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkVWludDY0ICAoMzA0KTsKLSAgICBi
dWlsZGVyLmFkZFJlcGVhdGVkU2ludDMyICAoMzA1KTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVk
U2ludDY0ICAoMzA2KTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRml4ZWQzMiAoMzA3KTsKLSAg
ICBidWlsZGVyLmFkZFJlcGVhdGVkRml4ZWQ2NCAoMzA4KTsKLSAgICBidWlsZGVyLmFkZFJlcGVh
dGVkU2ZpeGVkMzIoMzA5KTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkU2ZpeGVkNjQoMzEwKTsK
LSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRmxvYXQgICAoMzExKTsKLSAgICBidWlsZGVyLmFkZFJl
cGVhdGVkRG91YmxlICAoMzEyKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkQm9vbCAgICAoZmFs
c2UpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRTdHJpbmcgICgiMzE1Iik7Ci0gICAgYnVpbGRl
ci5hZGRSZXBlYXRlZEJ5dGVzICAgKHRvQnl0ZXMoIjMxNiIpKTsKLQotICAgIGJ1aWxkZXIuYWRk
UmVwZWF0ZWRHcm91cCgKLSAgICAgICAgVGVzdEFsbFR5cGVzTGl0ZS5SZXBlYXRlZEdyb3VwLm5l
d0J1aWxkZXIoKS5zZXRBKDMxNykuYnVpbGQoKSk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZE5l
c3RlZE1lc3NhZ2UoCi0gICAgICAgIFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkTWVzc2FnZS5uZXdC
dWlsZGVyKCkuc2V0QmIoMzE4KS5idWlsZCgpKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRm9y
ZWlnbk1lc3NhZ2UoCi0gICAgICAgIEZvcmVpZ25NZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkuc2V0
QygzMTkpLmJ1aWxkKCkpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRJbXBvcnRNZXNzYWdlKAot
ICAgICAgICBJbXBvcnRNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkuc2V0RCgzMjApLmJ1aWxkKCkp
OwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRMYXp5TWVzc2FnZSgKLSAgICAgICAgVGVzdEFsbFR5
cGVzTGl0ZS5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYigzMjcpLmJ1aWxkKCkpOwot
Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZE5lc3RlZEVudW0gKFRlc3RBbGxUeXBlc0xpdGUuTmVz
dGVkRW51bS5CQVopOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGb3JlaWduRW51bShGb3JlaWdu
RW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBWik7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEltcG9y
dEVudW0gKEltcG9ydEVudW1MaXRlLklNUE9SVF9MSVRFX0JBWik7Ci0KLSAgICBidWlsZGVyLmFk
ZFJlcGVhdGVkU3RyaW5nUGllY2UoIjMyNCIpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRDb3Jk
KCIzMjUiKTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBidWlsZGVyLnNldERlZmF1bHRJbnQz
MiAgICg0MDEpOwotICAgIGJ1aWxkZXIuc2V0RGVmYXVsdEludDY0ICAgKDQwMik7Ci0gICAgYnVp
bGRlci5zZXREZWZhdWx0VWludDMyICAoNDAzKTsKLSAgICBidWlsZGVyLnNldERlZmF1bHRVaW50
NjQgICg0MDQpOwotICAgIGJ1aWxkZXIuc2V0RGVmYXVsdFNpbnQzMiAgKDQwNSk7Ci0gICAgYnVp
bGRlci5zZXREZWZhdWx0U2ludDY0ICAoNDA2KTsKLSAgICBidWlsZGVyLnNldERlZmF1bHRGaXhl
ZDMyICg0MDcpOwotICAgIGJ1aWxkZXIuc2V0RGVmYXVsdEZpeGVkNjQgKDQwOCk7Ci0gICAgYnVp
bGRlci5zZXREZWZhdWx0U2ZpeGVkMzIoNDA5KTsKLSAgICBidWlsZGVyLnNldERlZmF1bHRTZml4
ZWQ2NCg0MTApOwotICAgIGJ1aWxkZXIuc2V0RGVmYXVsdEZsb2F0ICAgKDQxMSk7Ci0gICAgYnVp
bGRlci5zZXREZWZhdWx0RG91YmxlICAoNDEyKTsKLSAgICBidWlsZGVyLnNldERlZmF1bHRCb29s
ICAgIChmYWxzZSk7Ci0gICAgYnVpbGRlci5zZXREZWZhdWx0U3RyaW5nICAoIjQxNSIpOwotICAg
IGJ1aWxkZXIuc2V0RGVmYXVsdEJ5dGVzICAgKHRvQnl0ZXMoIjQxNiIpKTsKLQotICAgIGJ1aWxk
ZXIuc2V0RGVmYXVsdE5lc3RlZEVudW0gKFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkRW51bS5GT08p
OwotICAgIGJ1aWxkZXIuc2V0RGVmYXVsdEZvcmVpZ25FbnVtKEZvcmVpZ25FbnVtTGl0ZS5GT1JF
SUdOX0xJVEVfRk9PKTsKLSAgICBidWlsZGVyLnNldERlZmF1bHRJbXBvcnRFbnVtIChJbXBvcnRF
bnVtTGl0ZS5JTVBPUlRfTElURV9GT08pOwotCi0gICAgYnVpbGRlci5zZXREZWZhdWx0U3RyaW5n
UGllY2UoIjQyNCIpOwotICAgIGJ1aWxkZXIuc2V0RGVmYXVsdENvcmQoIjQyNSIpOwotCi0gICAg
YnVpbGRlci5zZXRPbmVvZlVpbnQzMig2MDEpOwotICAgIGJ1aWxkZXIuc2V0T25lb2ZOZXN0ZWRN
ZXNzYWdlKAotICAgICAgICBUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRl
cigpLnNldEJiKDYwMikuYnVpbGQoKSk7Ci0gICAgYnVpbGRlci5zZXRPbmVvZlN0cmluZygiNjAz
Iik7Ci0gICAgYnVpbGRlci5zZXRPbmVvZkJ5dGVzKHRvQnl0ZXMoIjYwNCIpKTsKLSAgfQotCi0g
IC8qKgotICAgKiBHZXQgYW4gdW5tb2RpZmlhYmxlIHtAbGluayBFeHRlbnNpb25SZWdpc3RyeUxp
dGV9IGNvbnRhaW5pbmcgYWxsIHRoZQotICAgKiBleHRlbnNpb25zIG9mIHtAY29kZSBUZXN0QWxs
RXh0ZW5zaW9uc0xpdGV9LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBFeHRlbnNpb25SZWdpc3Ry
eUxpdGUgZ2V0RXh0ZW5zaW9uUmVnaXN0cnlMaXRlKCkgewotICAgIEV4dGVuc2lvblJlZ2lzdHJ5
TGl0ZSByZWdpc3RyeSA9IEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZS5uZXdJbnN0YW5jZSgpOwotICAg
IHJlZ2lzdGVyQWxsRXh0ZW5zaW9uc0xpdGUocmVnaXN0cnkpOwotICAgIHJldHVybiByZWdpc3Ry
eS5nZXRVbm1vZGlmaWFibGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWdpc3RlciBhbGwgb2Yg
e0Bjb2RlIFRlc3RBbGxFeHRlbnNpb25zTGl0ZX0ncyBleHRlbnNpb25zIHdpdGggdGhlCi0gICAq
IGdpdmVuIHtAbGluayBFeHRlbnNpb25SZWdpc3RyeUxpdGV9LgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyQWxsRXh0ZW5zaW9uc0xpdGUoRXh0ZW5zaW9uUmVnaXN0cnlMaXRl
IHJlZ2lzdHJ5KSB7Ci0gICAgVW5pdHRlc3RMaXRlLnJlZ2lzdGVyQWxsRXh0ZW5zaW9ucyhyZWdp
c3RyeSk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIExpdGUgZXh0ZW5zaW9ucwotCi0g
IC8qKgotICAgKiBTZXQgZXZlcnkgZmllbGQgb2Yge0Bjb2RlIG1lc3NhZ2V9IHRvIHRoZSB2YWx1
ZXMgZXhwZWN0ZWQgYnkKLSAgICoge0Bjb2RlIGFzc2VydEFsbEV4dGVuc2lvbnNTZXQoKX0uCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0QWxsRXh0ZW5zaW9ucyhUZXN0QWxsRXh0ZW5z
aW9uc0xpdGUuQnVpbGRlciBtZXNzYWdlKSB7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0
aW9uYWxJbnQzMkV4dGVuc2lvbkxpdGUgICAsIDEwMSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNp
b24ob3B0aW9uYWxJbnQ2NEV4dGVuc2lvbkxpdGUgICAsIDEwMkwpOwotICAgIG1lc3NhZ2Uuc2V0
RXh0ZW5zaW9uKG9wdGlvbmFsVWludDMyRXh0ZW5zaW9uTGl0ZSAgLCAxMDMpOwotICAgIG1lc3Nh
Z2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsVWludDY0RXh0ZW5zaW9uTGl0ZSAgLCAxMDRMKTsKLSAg
ICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbFNpbnQzMkV4dGVuc2lvbkxpdGUgICwgMTA1
KTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbFNpbnQ2NEV4dGVuc2lvbkxpdGUg
ICwgMTA2TCk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxGaXhlZDMyRXh0ZW5z
aW9uTGl0ZSAsIDEwNyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxGaXhlZDY0
RXh0ZW5zaW9uTGl0ZSAsIDEwOEwpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFs
U2ZpeGVkMzJFeHRlbnNpb25MaXRlLCAxMDkpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9w
dGlvbmFsU2ZpeGVkNjRFeHRlbnNpb25MaXRlLCAxMTBMKTsKLSAgICBtZXNzYWdlLnNldEV4dGVu
c2lvbihvcHRpb25hbEZsb2F0RXh0ZW5zaW9uTGl0ZSAgICwgMTExRik7Ci0gICAgbWVzc2FnZS5z
ZXRFeHRlbnNpb24ob3B0aW9uYWxEb3VibGVFeHRlbnNpb25MaXRlICAsIDExMkQpOwotICAgIG1l
c3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsQm9vbEV4dGVuc2lvbkxpdGUgICAgLCB0cnVlKTsK
LSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbFN0cmluZ0V4dGVuc2lvbkxpdGUgICwg
IjExNSIpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsQnl0ZXNFeHRlbnNpb25M
aXRlICAgLCB0b0J5dGVzKCIxMTYiKSk7Ci0KLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvcHRp
b25hbEdyb3VwRXh0ZW5zaW9uTGl0ZSwKLSAgICAgIE9wdGlvbmFsR3JvdXBfZXh0ZW5zaW9uX2xp
dGUubmV3QnVpbGRlcigpLnNldEEoMTE3KS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLnNldEV4dGVu
c2lvbihvcHRpb25hbE5lc3RlZE1lc3NhZ2VFeHRlbnNpb25MaXRlLAotICAgICAgVGVzdEFsbFR5
cGVzTGl0ZS5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYigxMTgpLmJ1aWxkKCkpOwot
ICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsRm9yZWlnbk1lc3NhZ2VFeHRlbnNpb25M
aXRlLAotICAgICAgRm9yZWlnbk1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKS5zZXRDKDExOSkuYnVp
bGQoKSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxJbXBvcnRNZXNzYWdlRXh0
ZW5zaW9uTGl0ZSwKLSAgICAgIEltcG9ydE1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKS5zZXREKDEy
MCkuYnVpbGQoKSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ob3B0aW9uYWxQdWJsaWNJbXBv
cnRNZXNzYWdlRXh0ZW5zaW9uTGl0ZSwKLSAgICAgIFB1YmxpY0ltcG9ydE1lc3NhZ2VMaXRlLm5l
d0J1aWxkZXIoKS5zZXRFKDEyNikuYnVpbGQoKSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24o
b3B0aW9uYWxMYXp5TWVzc2FnZUV4dGVuc2lvbkxpdGUsCi0gICAgICBUZXN0QWxsVHlwZXNMaXRl
Lk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDEyNykuYnVpbGQoKSk7Ci0KLSAgICBt
ZXNzYWdlLnNldEV4dGVuc2lvbihvcHRpb25hbE5lc3RlZEVudW1FeHRlbnNpb25MaXRlLCBUZXN0
QWxsVHlwZXNMaXRlLk5lc3RlZEVudW0uQkFaKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihv
cHRpb25hbEZvcmVpZ25FbnVtRXh0ZW5zaW9uTGl0ZSwgRm9yZWlnbkVudW1MaXRlLkZPUkVJR05f
TElURV9CQVopOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsSW1wb3J0RW51bUV4
dGVuc2lvbkxpdGUsIEltcG9ydEVudW1MaXRlLklNUE9SVF9MSVRFX0JBWik7Ci0KLSAgICBtZXNz
YWdlLnNldEV4dGVuc2lvbihvcHRpb25hbFN0cmluZ1BpZWNlRXh0ZW5zaW9uTGl0ZSwgIjEyNCIp
OwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9wdGlvbmFsQ29yZEV4dGVuc2lvbkxpdGUsICIx
MjUiKTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBl
YXRlZEludDMyRXh0ZW5zaW9uTGl0ZSAgICwgMjAxKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lv
bihyZXBlYXRlZEludDY0RXh0ZW5zaW9uTGl0ZSAgICwgMjAyTCk7Ci0gICAgbWVzc2FnZS5hZGRF
eHRlbnNpb24ocmVwZWF0ZWRVaW50MzJFeHRlbnNpb25MaXRlICAsIDIwMyk7Ci0gICAgbWVzc2Fn
ZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRVaW50NjRFeHRlbnNpb25MaXRlICAsIDIwNEwpOwotICAg
IG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkU2ludDMyRXh0ZW5zaW9uTGl0ZSAgLCAyMDUp
OwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkU2ludDY0RXh0ZW5zaW9uTGl0ZSAg
LCAyMDZMKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEZpeGVkMzJFeHRlbnNp
b25MaXRlICwgMjA3KTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEZpeGVkNjRF
eHRlbnNpb25MaXRlICwgMjA4TCk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRT
Zml4ZWQzMkV4dGVuc2lvbkxpdGUsIDIwOSk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVw
ZWF0ZWRTZml4ZWQ2NEV4dGVuc2lvbkxpdGUsIDIxMEwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5z
aW9uKHJlcGVhdGVkRmxvYXRFeHRlbnNpb25MaXRlICAgLCAyMTFGKTsKLSAgICBtZXNzYWdlLmFk
ZEV4dGVuc2lvbihyZXBlYXRlZERvdWJsZUV4dGVuc2lvbkxpdGUgICwgMjEyRCk7Ci0gICAgbWVz
c2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRCb29sRXh0ZW5zaW9uTGl0ZSAgICAsIHRydWUpOwot
ICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkU3RyaW5nRXh0ZW5zaW9uTGl0ZSAgLCAi
MjE1Iik7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRCeXRlc0V4dGVuc2lvbkxp
dGUgICAsIHRvQnl0ZXMoIjIxNiIpKTsKLQotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVh
dGVkR3JvdXBFeHRlbnNpb25MaXRlLAotICAgICAgUmVwZWF0ZWRHcm91cF9leHRlbnNpb25fbGl0
ZS5uZXdCdWlsZGVyKCkuc2V0QSgyMTcpLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5z
aW9uKHJlcGVhdGVkTmVzdGVkTWVzc2FnZUV4dGVuc2lvbkxpdGUsCi0gICAgICBUZXN0QWxsVHlw
ZXNMaXRlLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDIxOCkuYnVpbGQoKSk7Ci0g
ICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRGb3JlaWduTWVzc2FnZUV4dGVuc2lvbkxp
dGUsCi0gICAgICBGb3JlaWduTWVzc2FnZUxpdGUubmV3QnVpbGRlcigpLnNldEMoMjE5KS5idWls
ZCgpKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEltcG9ydE1lc3NhZ2VFeHRl
bnNpb25MaXRlLAotICAgICAgSW1wb3J0TWVzc2FnZUxpdGUubmV3QnVpbGRlcigpLnNldEQoMjIw
KS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZExhenlNZXNzYWdl
RXh0ZW5zaW9uTGl0ZSwKLSAgICAgIFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkTWVzc2FnZS5uZXdC
dWlsZGVyKCkuc2V0QmIoMjI3KS5idWlsZCgpKTsKLQotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9u
KHJlcGVhdGVkTmVzdGVkRW51bUV4dGVuc2lvbkxpdGUsIFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVk
RW51bS5CQVIpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbkVudW1F
eHRlbnNpb25MaXRlLCBGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBUik7Ci0gICAgbWVz
c2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRJbXBvcnRFbnVtRXh0ZW5zaW9uTGl0ZSwgSW1wb3J0
RW51bUxpdGUuSU1QT1JUX0xJVEVfQkFSKTsKLQotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJl
cGVhdGVkU3RyaW5nUGllY2VFeHRlbnNpb25MaXRlLCAiMjI0Iik7Ci0gICAgbWVzc2FnZS5hZGRF
eHRlbnNpb24ocmVwZWF0ZWRDb3JkRXh0ZW5zaW9uTGl0ZSwgIjIyNSIpOwotCi0gICAgLy8gQWRk
IGEgc2Vjb25kIG9uZSBvZiBlYWNoIGZpZWxkLgotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJl
cGVhdGVkSW50MzJFeHRlbnNpb25MaXRlICAgLCAzMDEpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5z
aW9uKHJlcGVhdGVkSW50NjRFeHRlbnNpb25MaXRlICAgLCAzMDJMKTsKLSAgICBtZXNzYWdlLmFk
ZEV4dGVuc2lvbihyZXBlYXRlZFVpbnQzMkV4dGVuc2lvbkxpdGUgICwgMzAzKTsKLSAgICBtZXNz
YWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZFVpbnQ2NEV4dGVuc2lvbkxpdGUgICwgMzA0TCk7Ci0g
ICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRTaW50MzJFeHRlbnNpb25MaXRlICAsIDMw
NSk7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRTaW50NjRFeHRlbnNpb25MaXRl
ICAsIDMwNkwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkRml4ZWQzMkV4dGVu
c2lvbkxpdGUgLCAzMDcpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkRml4ZWQ2
NEV4dGVuc2lvbkxpdGUgLCAzMDhMKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRl
ZFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZSwgMzA5KTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihy
ZXBlYXRlZFNmaXhlZDY0RXh0ZW5zaW9uTGl0ZSwgMzEwTCk7Ci0gICAgbWVzc2FnZS5hZGRFeHRl
bnNpb24ocmVwZWF0ZWRGbG9hdEV4dGVuc2lvbkxpdGUgICAsIDMxMUYpOwotICAgIG1lc3NhZ2Uu
YWRkRXh0ZW5zaW9uKHJlcGVhdGVkRG91YmxlRXh0ZW5zaW9uTGl0ZSAgLCAzMTJEKTsKLSAgICBt
ZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEJvb2xFeHRlbnNpb25MaXRlICAgICwgZmFsc2Up
OwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkU3RyaW5nRXh0ZW5zaW9uTGl0ZSAg
LCAiMzE1Iik7Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRCeXRlc0V4dGVuc2lv
bkxpdGUgICAsIHRvQnl0ZXMoIjMxNiIpKTsKLQotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJl
cGVhdGVkR3JvdXBFeHRlbnNpb25MaXRlLAotICAgICAgUmVwZWF0ZWRHcm91cF9leHRlbnNpb25f
bGl0ZS5uZXdCdWlsZGVyKCkuc2V0QSgzMTcpLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2UuYWRkRXh0
ZW5zaW9uKHJlcGVhdGVkTmVzdGVkTWVzc2FnZUV4dGVuc2lvbkxpdGUsCi0gICAgICBUZXN0QWxs
VHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDMxOCkuYnVpbGQoKSk7
Ci0gICAgbWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRGb3JlaWduTWVzc2FnZUV4dGVuc2lv
bkxpdGUsCi0gICAgICBGb3JlaWduTWVzc2FnZUxpdGUubmV3QnVpbGRlcigpLnNldEMoMzE5KS5i
dWlsZCgpKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZEltcG9ydE1lc3NhZ2VF
eHRlbnNpb25MaXRlLAotICAgICAgSW1wb3J0TWVzc2FnZUxpdGUubmV3QnVpbGRlcigpLnNldEQo
MzIwKS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihyZXBlYXRlZExhenlNZXNz
YWdlRXh0ZW5zaW9uTGl0ZSwKLSAgICAgIFRlc3RBbGxUeXBlc0xpdGUuTmVzdGVkTWVzc2FnZS5u
ZXdCdWlsZGVyKCkuc2V0QmIoMzI3KS5idWlsZCgpKTsKLQotICAgIG1lc3NhZ2UuYWRkRXh0ZW5z
aW9uKHJlcGVhdGVkTmVzdGVkRW51bUV4dGVuc2lvbkxpdGUsIFRlc3RBbGxUeXBlc0xpdGUuTmVz
dGVkRW51bS5CQVopOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbkVu
dW1FeHRlbnNpb25MaXRlLCBGb3JlaWduRW51bUxpdGUuRk9SRUlHTl9MSVRFX0JBWik7Ci0gICAg
bWVzc2FnZS5hZGRFeHRlbnNpb24ocmVwZWF0ZWRJbXBvcnRFbnVtRXh0ZW5zaW9uTGl0ZSwgSW1w
b3J0RW51bUxpdGUuSU1QT1JUX0xJVEVfQkFaKTsKLQotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9u
KHJlcGVhdGVkU3RyaW5nUGllY2VFeHRlbnNpb25MaXRlLCAiMzI0Iik7Ci0gICAgbWVzc2FnZS5h
ZGRFeHRlbnNpb24ocmVwZWF0ZWRDb3JkRXh0ZW5zaW9uTGl0ZSwgIjMyNSIpOwotCi0gICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRJbnQzMkV4dGVuc2lv
bkxpdGUgICAsIDQwMSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdEludDY0RXh0
ZW5zaW9uTGl0ZSAgICwgNDAyTCk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdFVp
bnQzMkV4dGVuc2lvbkxpdGUgICwgNDAzKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihkZWZh
dWx0VWludDY0RXh0ZW5zaW9uTGl0ZSAgLCA0MDRMKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lv
bihkZWZhdWx0U2ludDMyRXh0ZW5zaW9uTGl0ZSAgLCA0MDUpOwotICAgIG1lc3NhZ2Uuc2V0RXh0
ZW5zaW9uKGRlZmF1bHRTaW50NjRFeHRlbnNpb25MaXRlICAsIDQwNkwpOwotICAgIG1lc3NhZ2Uu
c2V0RXh0ZW5zaW9uKGRlZmF1bHRGaXhlZDMyRXh0ZW5zaW9uTGl0ZSAsIDQwNyk7Ci0gICAgbWVz
c2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdEZpeGVkNjRFeHRlbnNpb25MaXRlICwgNDA4TCk7Ci0g
ICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVmYXVsdFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZSwgNDA5
KTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihkZWZhdWx0U2ZpeGVkNjRFeHRlbnNpb25MaXRl
LCA0MTBMKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihkZWZhdWx0RmxvYXRFeHRlbnNpb25M
aXRlICAgLCA0MTFGKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihkZWZhdWx0RG91YmxlRXh0
ZW5zaW9uTGl0ZSAgLCA0MTJEKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihkZWZhdWx0Qm9v
bEV4dGVuc2lvbkxpdGUgICAgLCBmYWxzZSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oZGVm
YXVsdFN0cmluZ0V4dGVuc2lvbkxpdGUgICwgIjQxNSIpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5z
aW9uKGRlZmF1bHRCeXRlc0V4dGVuc2lvbkxpdGUgICAsIHRvQnl0ZXMoIjQxNiIpKTsKLQotICAg
IG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHROZXN0ZWRFbnVtRXh0ZW5zaW9uTGl0ZSwgVGVz
dEFsbFR5cGVzTGl0ZS5OZXN0ZWRFbnVtLkZPTyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24o
ZGVmYXVsdEZvcmVpZ25FbnVtRXh0ZW5zaW9uTGl0ZSwgRm9yZWlnbkVudW1MaXRlLkZPUkVJR05f
TElURV9GT08pOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRJbXBvcnRFbnVtRXh0
ZW5zaW9uTGl0ZSwgSW1wb3J0RW51bUxpdGUuSU1QT1JUX0xJVEVfRk9PKTsKLQotICAgIG1lc3Nh
Z2Uuc2V0RXh0ZW5zaW9uKGRlZmF1bHRTdHJpbmdQaWVjZUV4dGVuc2lvbkxpdGUsICI0MjQiKTsK
LSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihkZWZhdWx0Q29yZEV4dGVuc2lvbkxpdGUsICI0MjUi
KTsKLQotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9uZW9mVWludDMyRXh0ZW5zaW9uTGl0ZSwg
NjAxKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihvbmVvZk5lc3RlZE1lc3NhZ2VFeHRlbnNp
b25MaXRlLAotICAgICAgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIo
KS5zZXRCYig2MDIpLmJ1aWxkKCkpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9uZW9mU3Ry
aW5nRXh0ZW5zaW9uTGl0ZSwgIjYwMyIpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKG9uZW9m
Qnl0ZXNFeHRlbnNpb25MaXRlLCB0b0J5dGVzKCI2MDQiKSk7Ci0gIH0KLQotICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgLyoqCi0gICAqIE1vZGlmeSB0aGUgcmVwZWF0ZWQgZXh0ZW5zaW9ucyBvZiB7QGNv
ZGUgbWVzc2FnZX0gdG8gY29udGFpbiB0aGUgdmFsdWVzCi0gICAqIGV4cGVjdGVkIGJ5IHtAY29k
ZSBhc3NlcnRSZXBlYXRlZEV4dGVuc2lvbnNNb2RpZmllZCgpfS4KLSAgICovCi0gIHB1YmxpYyBz
dGF0aWMgdm9pZCBtb2RpZnlSZXBlYXRlZEV4dGVuc2lvbnMoCi0gICAgICBUZXN0QWxsRXh0ZW5z
aW9uc0xpdGUuQnVpbGRlciBtZXNzYWdlKSB7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVw
ZWF0ZWRJbnQzMkV4dGVuc2lvbkxpdGUgICAsIDEsIDUwMSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRl
bnNpb24ocmVwZWF0ZWRJbnQ2NEV4dGVuc2lvbkxpdGUgICAsIDEsIDUwMkwpOwotICAgIG1lc3Nh
Z2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkVWludDMyRXh0ZW5zaW9uTGl0ZSAgLCAxLCA1MDMpOwot
ICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkVWludDY0RXh0ZW5zaW9uTGl0ZSAgLCAx
LCA1MDRMKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRlZFNpbnQzMkV4dGVuc2lv
bkxpdGUgICwgMSwgNTA1KTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRlZFNpbnQ2
NEV4dGVuc2lvbkxpdGUgICwgMSwgNTA2TCk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVw
ZWF0ZWRGaXhlZDMyRXh0ZW5zaW9uTGl0ZSAsIDEsIDUwNyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRl
bnNpb24ocmVwZWF0ZWRGaXhlZDY0RXh0ZW5zaW9uTGl0ZSAsIDEsIDUwOEwpOwotICAgIG1lc3Nh
Z2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2ZpeGVkMzJFeHRlbnNpb25MaXRlLCAxLCA1MDkpOwot
ICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkU2ZpeGVkNjRFeHRlbnNpb25MaXRlLCAx
LCA1MTBMKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRlZEZsb2F0RXh0ZW5zaW9u
TGl0ZSAgICwgMSwgNTExRik7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWREb3Vi
bGVFeHRlbnNpb25MaXRlICAsIDEsIDUxMkQpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKHJl
cGVhdGVkQm9vbEV4dGVuc2lvbkxpdGUgICAgLCAxLCB0cnVlKTsKLSAgICBtZXNzYWdlLnNldEV4
dGVuc2lvbihyZXBlYXRlZFN0cmluZ0V4dGVuc2lvbkxpdGUgICwgMSwgIjUxNSIpOwotICAgIG1l
c3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkQnl0ZXNFeHRlbnNpb25MaXRlICAgLCAxLCB0b0J5
dGVzKCI1MTYiKSk7Ci0KLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRlZEdyb3VwRXh0
ZW5zaW9uTGl0ZSwgMSwKLSAgICAgIFJlcGVhdGVkR3JvdXBfZXh0ZW5zaW9uX2xpdGUubmV3QnVp
bGRlcigpLnNldEEoNTE3KS5idWlsZCgpKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBl
YXRlZE5lc3RlZE1lc3NhZ2VFeHRlbnNpb25MaXRlLCAxLAotICAgICAgVGVzdEFsbFR5cGVzTGl0
ZS5OZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYig1MTgpLmJ1aWxkKCkpOwotICAgIG1l
c3NhZ2Uuc2V0RXh0ZW5zaW9uKHJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VFeHRlbnNpb25MaXRlLCAx
LAotICAgICAgRm9yZWlnbk1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKS5zZXRDKDUxOSkuYnVpbGQo
KSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRJbXBvcnRNZXNzYWdlRXh0ZW5z
aW9uTGl0ZSwgMSwKLSAgICAgIEltcG9ydE1lc3NhZ2VMaXRlLm5ld0J1aWxkZXIoKS5zZXREKDUy
MCkuYnVpbGQoKSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRMYXp5TWVzc2Fn
ZUV4dGVuc2lvbkxpdGUsIDEsCi0gICAgICBUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2Uu
bmV3QnVpbGRlcigpLnNldEJiKDUyNykuYnVpbGQoKSk7Ci0KLSAgICBtZXNzYWdlLnNldEV4dGVu
c2lvbihyZXBlYXRlZE5lc3RlZEVudW1FeHRlbnNpb25MaXRlICwgMSwgVGVzdEFsbFR5cGVzTGl0
ZS5OZXN0ZWRFbnVtLkZPTyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRGb3Jl
aWduRW51bUV4dGVuc2lvbkxpdGUsIDEsIEZvcmVpZ25FbnVtTGl0ZS5GT1JFSUdOX0xJVEVfRk9P
KTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihyZXBlYXRlZEltcG9ydEVudW1FeHRlbnNpb25M
aXRlICwgMSwgSW1wb3J0RW51bUxpdGUuSU1QT1JUX0xJVEVfRk9PKTsKLQotICAgIG1lc3NhZ2Uu
c2V0RXh0ZW5zaW9uKHJlcGVhdGVkU3RyaW5nUGllY2VFeHRlbnNpb25MaXRlLCAxLCAiNTI0Iik7
Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24ocmVwZWF0ZWRDb3JkRXh0ZW5zaW9uTGl0ZSwgMSwg
IjUyNSIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldFBhY2tlZEV4dGVuc2lvbnMo
VGVzdFBhY2tlZEV4dGVuc2lvbnNMaXRlLkJ1aWxkZXIgbWVzc2FnZSkgewotICAgIG1lc3NhZ2Uu
YWRkRXh0ZW5zaW9uKHBhY2tlZEludDMyRXh0ZW5zaW9uTGl0ZSAgICwgNjAxKTsKLSAgICBtZXNz
YWdlLmFkZEV4dGVuc2lvbihwYWNrZWRJbnQ2NEV4dGVuc2lvbkxpdGUgICAsIDYwMkwpOwotICAg
IG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHBhY2tlZFVpbnQzMkV4dGVuc2lvbkxpdGUgICwgNjAzKTsK
LSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihwYWNrZWRVaW50NjRFeHRlbnNpb25MaXRlICAsIDYw
NEwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHBhY2tlZFNpbnQzMkV4dGVuc2lvbkxpdGUg
ICwgNjA1KTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihwYWNrZWRTaW50NjRFeHRlbnNpb25M
aXRlICAsIDYwNkwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHBhY2tlZEZpeGVkMzJFeHRl
bnNpb25MaXRlICwgNjA3KTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihwYWNrZWRGaXhlZDY0
RXh0ZW5zaW9uTGl0ZSAsIDYwOEwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHBhY2tlZFNm
aXhlZDMyRXh0ZW5zaW9uTGl0ZSwgNjA5KTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihwYWNr
ZWRTZml4ZWQ2NEV4dGVuc2lvbkxpdGUsIDYxMEwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9u
KHBhY2tlZEZsb2F0RXh0ZW5zaW9uTGl0ZSAgICwgNjExRik7Ci0gICAgbWVzc2FnZS5hZGRFeHRl
bnNpb24ocGFja2VkRG91YmxlRXh0ZW5zaW9uTGl0ZSAgLCA2MTJEKTsKLSAgICBtZXNzYWdlLmFk
ZEV4dGVuc2lvbihwYWNrZWRCb29sRXh0ZW5zaW9uTGl0ZSAgICAsIHRydWUpOwotICAgIG1lc3Nh
Z2UuYWRkRXh0ZW5zaW9uKHBhY2tlZEVudW1FeHRlbnNpb25MaXRlLCBGb3JlaWduRW51bUxpdGUu
Rk9SRUlHTl9MSVRFX0JBUik7Ci0gICAgLy8gQWRkIGEgc2Vjb25kIG9uZSBvZiBlYWNoIGZpZWxk
LgotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHBhY2tlZEludDMyRXh0ZW5zaW9uTGl0ZSAgICwg
NzAxKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihwYWNrZWRJbnQ2NEV4dGVuc2lvbkxpdGUg
ICAsIDcwMkwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHBhY2tlZFVpbnQzMkV4dGVuc2lv
bkxpdGUgICwgNzAzKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihwYWNrZWRVaW50NjRFeHRl
bnNpb25MaXRlICAsIDcwNEwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHBhY2tlZFNpbnQz
MkV4dGVuc2lvbkxpdGUgICwgNzA1KTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihwYWNrZWRT
aW50NjRFeHRlbnNpb25MaXRlICAsIDcwNkwpOwotICAgIG1lc3NhZ2UuYWRkRXh0ZW5zaW9uKHBh
Y2tlZEZpeGVkMzJFeHRlbnNpb25MaXRlICwgNzA3KTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lv
bihwYWNrZWRGaXhlZDY0RXh0ZW5zaW9uTGl0ZSAsIDcwOEwpOwotICAgIG1lc3NhZ2UuYWRkRXh0
ZW5zaW9uKHBhY2tlZFNmaXhlZDMyRXh0ZW5zaW9uTGl0ZSwgNzA5KTsKLSAgICBtZXNzYWdlLmFk
ZEV4dGVuc2lvbihwYWNrZWRTZml4ZWQ2NEV4dGVuc2lvbkxpdGUsIDcxMEwpOwotICAgIG1lc3Nh
Z2UuYWRkRXh0ZW5zaW9uKHBhY2tlZEZsb2F0RXh0ZW5zaW9uTGl0ZSAgICwgNzExRik7Ci0gICAg
bWVzc2FnZS5hZGRFeHRlbnNpb24ocGFja2VkRG91YmxlRXh0ZW5zaW9uTGl0ZSAgLCA3MTJEKTsK
LSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihwYWNrZWRCb29sRXh0ZW5zaW9uTGl0ZSAgICAsIGZh
bHNlKTsKLSAgICBtZXNzYWdlLmFkZEV4dGVuc2lvbihwYWNrZWRFbnVtRXh0ZW5zaW9uTGl0ZSwg
Rm9yZWlnbkVudW1MaXRlLkZPUkVJR05fTElURV9CQVopOwotICB9Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2ph
dmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVGV4dEZvcm1hdFBhcnNl
SW5mb1RyZWVUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGUzMzhhZjIxMTI4Mjc1ZWJmOTg2ZTA2OGM1NWM1ZDM3ZjM2MWRhOGYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1RleHRGb3JtYXRQYXJzZUluZm9UcmVlVGVz
dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWY7Ci0KLWltcG9y
dCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkRlc2NyaXB0b3I7Ci1pbXBvcnQgY29t
Lmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3I7Ci1pbXBvcnQgcHJv
dG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5UZXN0QWxsVHlwZXM7Ci0KLWltcG9ydCBqdW5p
dC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGVzdCBAe2xpbmsgVGV4dEZvcm1hdFBh
cnNlSW5mb1RyZWV9LgotICovCi1wdWJsaWMgY2xhc3MgVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWVU
ZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIERlc2NyaXB0
b3IgREVTQ1JJUFRPUiA9IFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCk7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIEZpZWxkRGVzY3JpcHRvciBPUFRJT05BTF9JTlQzMiA9Ci0gICAgICBERVND
UklQVE9SLmZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfaW50MzIiKTsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgRmllbGREZXNjcmlwdG9yIE9QVElPTkFMX0JPT0xFQU4gPQotICAgICAgREVTQ1JJ
UFRPUi5maW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX2Jvb2xlYW4iKTsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgRmllbGREZXNjcmlwdG9yIFJFUEVBVEVEX0lOVDMyID0KLSAgICAgIERFU0NSSVBU
T1IuZmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9pbnQzMiIpOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBGaWVsZERlc2NyaXB0b3IgT1BUSU9OQUxfTkVTVEVEX01FU1NBR0UgPQotICAgICAgREVT
Q1JJUFRPUi5maW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIik7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIEZpZWxkRGVzY3JpcHRvciBSRVBFQVRFRF9ORVNURURfTUVTU0FH
RSA9Ci0gICAgICBERVNDUklQVE9SLmZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfbmVzdGVkX21l
c3NhZ2UiKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRmllbGREZXNjcmlwdG9yIEZJRUxEX0JC
ID0KLSAgICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLmdldERlc2NyaXB0b3IoKS5maW5k
RmllbGRCeU5hbWUoImJiIik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGV4dEZvcm1hdFBh
cnNlTG9jYXRpb24gTE9DMCA9IFRleHRGb3JtYXRQYXJzZUxvY2F0aW9uLmNyZWF0ZSgxLCAyKTsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGV4dEZvcm1hdFBhcnNlTG9jYXRpb24gTE9DMSA9IFRl
eHRGb3JtYXRQYXJzZUxvY2F0aW9uLmNyZWF0ZSgyLCAzKTsKLQotICBwcml2YXRlIFRleHRGb3Jt
YXRQYXJzZUluZm9UcmVlLkJ1aWxkZXIgcm9vdEJ1aWxkZXI7Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIHNldFVwKCkgewotICAgIHJvb3RCdWlsZGVyID0gVGV4dEZvcm1hdFBhcnNlSW5m
b1RyZWUuYnVpbGRlcigpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEJ1aWxkRW1wdHlQYXJz
ZVRyZWUoKSB7Ci0gICAgVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWUgdHJlZSA9IHJvb3RCdWlsZGVy
LmJ1aWxkKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh0cmVlLmdldExvY2F0aW9ucyhudWxsKS5pc0VtcHR5
KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEdldExvY2F0aW9uUmV0dXJuc1NpbmdsZUxv
Y2F0aW9uKCkgewotICAgIHJvb3RCdWlsZGVyLnNldExvY2F0aW9uKE9QVElPTkFMX0lOVDMyLCBM
T0MwKTsKLSAgICBUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZSByb290ID0gcm9vdEJ1aWxkZXIuYnVp
bGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoTE9DMCwgcm9vdC5nZXRMb2NhdGlvbihPUFRJT05BTF9J
TlQzMiwgMCkpOwotICAgIGFzc2VydEVxdWFscygxLCByb290LmdldExvY2F0aW9ucyhPUFRJT05B
TF9JTlQzMikuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEdldExvY2F0aW9u
c1JldHVybnNOb1BhcnNlTG9jYXRpb25zRm9yVW5rbm93bkZpZWxkKCkgewotICAgIGFzc2VydFRy
dWUocm9vdEJ1aWxkZXIuYnVpbGQoKS5nZXRMb2NhdGlvbnMoT1BUSU9OQUxfSU5UMzIpLmlzRW1w
dHkoKSk7Ci0gICAgcm9vdEJ1aWxkZXIuc2V0TG9jYXRpb24oT1BUSU9OQUxfQk9PTEVBTiwgTE9D
MCk7Ci0gICAgVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWUgcm9vdCA9IHJvb3RCdWlsZGVyLmJ1aWxk
KCk7Ci0gICAgYXNzZXJ0VHJ1ZShyb290LmdldExvY2F0aW9ucyhPUFRJT05BTF9JTlQzMikuaXNF
bXB0eSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoTE9DMCwgcm9vdC5nZXRMb2NhdGlvbnMoT1BUSU9O
QUxfQk9PTEVBTikuZ2V0KDApKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRMb2NhdGlv
blRocm93c0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbkZvclVua25vd25GaWVsZCgpIHsKLSAgICBy
b290QnVpbGRlci5zZXRMb2NhdGlvbihSRVBFQVRFRF9JTlQzMiwgTE9DMCk7Ci0gICAgVGV4dEZv
cm1hdFBhcnNlSW5mb1RyZWUgcm9vdCA9IHJvb3RCdWlsZGVyLmJ1aWxkKCk7Ci0gICAgdHJ5IHsK
LSAgICAgIHJvb3QuZ2V0TmVzdGVkVHJlZShPUFRJT05BTF9JTlQzMiwgMCk7Ci0gICAgICBmYWls
KCJEaWQgbm90IGRldGVjdCB1bmtub3duIGZpZWxkIik7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFy
Z3VtZW50RXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAvLyBwYXNzCi0gICAgfQotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdEdldExvY2F0aW9uVGhyb3dzSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uRm9ySW52YWxpZEluZGV4KCkgewotICAgIFRleHRGb3JtYXRQYXJzZUluZm9UcmVlIHJvb3Qg
PSByb290QnVpbGRlci5zZXRMb2NhdGlvbihPUFRJT05BTF9JTlQzMiwgTE9DMCkuYnVpbGQoKTsK
LSAgICB0cnkgewotICAgICAgcm9vdC5nZXRMb2NhdGlvbihPUFRJT05BTF9JTlQzMiwgMSk7Ci0g
ICAgICBmYWlsKCJJbnZhbGlkIGluZGV4IG5vdCBkZXRlY3RlZCIpOwotICAgIH0gY2F0Y2ggKEls
bGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleHBlY3RlZCkgewotICAgICAgLy8gcGFzcwotICAgIH0K
LSAgICB0cnkgewotICAgICAgcm9vdC5nZXRMb2NhdGlvbihPUFRJT05BTF9JTlQzMiwgLTEpOwot
ICAgICAgZmFpbCgiTmVnYXRpdmUgaW5kZXggbm90IGRldGVjdGVkIik7Ci0gICAgfSBjYXRjaCAo
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAvLyBwYXNzCi0gICAg
fQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEdldExvY2F0aW9uc1JldHVybnNNdWx0aXBsZUxv
Y2F0aW9ucygpIHsKLSAgICByb290QnVpbGRlci5zZXRMb2NhdGlvbihSRVBFQVRFRF9JTlQzMiwg
TE9DMCk7Ci0gICAgcm9vdEJ1aWxkZXIuc2V0TG9jYXRpb24oUkVQRUFURURfSU5UMzIsIExPQzEp
OwotICAgIFRleHRGb3JtYXRQYXJzZUluZm9UcmVlIHJvb3QgPSByb290QnVpbGRlci5idWlsZCgp
OwotICAgIGFzc2VydEVxdWFscyhMT0MwLCByb290LmdldExvY2F0aW9uKFJFUEVBVEVEX0lOVDMy
LCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKExPQzEsIHJvb3QuZ2V0TG9jYXRpb24oUkVQRUFURURf
SU5UMzIsIDEpKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgcm9vdC5nZXRMb2NhdGlvbnMoUkVQRUFU
RURfSU5UMzIpLnNpemUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0R2V0TmVzdGVkVHJl
ZVRocm93c0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbkZvclVua25vd25GaWVsZCgpIHsKLSAgICBy
b290QnVpbGRlci5zZXRMb2NhdGlvbihSRVBFQVRFRF9JTlQzMiwgTE9DMCk7Ci0gICAgVGV4dEZv
cm1hdFBhcnNlSW5mb1RyZWUgcm9vdCA9IHJvb3RCdWlsZGVyLmJ1aWxkKCk7Ci0gICAgdHJ5IHsK
LSAgICAgIHJvb3QuZ2V0TmVzdGVkVHJlZShPUFRJT05BTF9ORVNURURfTUVTU0FHRSwgMCk7Ci0g
ICAgICBmYWlsKCJEaWQgbm90IGRldGVjdCB1bmtub3duIGZpZWxkIik7Ci0gICAgfSBjYXRjaCAo
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAvLyBwYXNzCi0gICAg
fQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEdldE5lc3RlZFRyZWVzUmV0dXJuc05vUGFyc2VJ
bmZvVHJlZXNGb3JVbmtub3duRmllbGQoKSB7Ci0gICAgcm9vdEJ1aWxkZXIuc2V0TG9jYXRpb24o
UkVQRUFURURfSU5UMzIsIExPQzApOwotICAgIFRleHRGb3JtYXRQYXJzZUluZm9UcmVlIHJvb3Qg
PSByb290QnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydFRydWUocm9vdC5nZXROZXN0ZWRUcmVl
cyhPUFRJT05BTF9ORVNURURfTUVTU0FHRSkuaXNFbXB0eSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RHZXROZXN0ZWRUcmVlVGhyb3dzSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uRm9ySW52
YWxpZEluZGV4KCkgewotICAgIHJvb3RCdWlsZGVyLnNldExvY2F0aW9uKFJFUEVBVEVEX0lOVDMy
LCBMT0MwKTsKLSAgICByb290QnVpbGRlci5nZXRCdWlsZGVyRm9yU3ViTWVzc2FnZUZpZWxkKE9Q
VElPTkFMX05FU1RFRF9NRVNTQUdFKTsKLSAgICBUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZSByb290
ID0gcm9vdEJ1aWxkZXIuYnVpbGQoKTsKLSAgICB0cnkgewotICAgICAgcm9vdC5nZXROZXN0ZWRU
cmVlKE9QVElPTkFMX05FU1RFRF9NRVNTQUdFLCAxKTsKLSAgICAgIGZhaWwoIlN1Ym1lc3NhZ2Ug
aW5kZXggdGhhdCBpcyB0b28gbGFyZ2Ugbm90IGRldGVjdGVkIik7Ci0gICAgfSBjYXRjaCAoSWxs
ZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAvLyBwYXNzCi0gICAgfQot
ICAgIHRyeSB7Ci0gICAgICByb290QnVpbGRlci5idWlsZCgpLmdldE5lc3RlZFRyZWUoT1BUSU9O
QUxfTkVTVEVEX01FU1NBR0UsIC0xKTsKLSAgICAgIGZhaWwoIkludmFsaWQgc3VibWVzc2FnZSBp
bmRleCAoLTEpIG5vdCBkZXRlY3RlZCIpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbiBleHBlY3RlZCkgewotICAgICAgLy8gcGFzcwotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RHZXROZXN0ZWRUcmVlc1JldHVybnNTaW5nbGVUcmVlKCkgewotICAgIHJvb3RC
dWlsZGVyLmdldEJ1aWxkZXJGb3JTdWJNZXNzYWdlRmllbGQoT1BUSU9OQUxfTkVTVEVEX01FU1NB
R0UpOwotICAgIFRleHRGb3JtYXRQYXJzZUluZm9UcmVlIHJvb3QgPSByb290QnVpbGRlci5idWls
ZCgpOwotICAgIGFzc2VydEVxdWFscygxLCByb290LmdldE5lc3RlZFRyZWVzKE9QVElPTkFMX05F
U1RFRF9NRVNTQUdFKS5zaXplKCkpOwotICAgIFRleHRGb3JtYXRQYXJzZUluZm9UcmVlIHN1YnRy
ZWUgPSByb290LmdldE5lc3RlZFRyZWVzKE9QVElPTkFMX05FU1RFRF9NRVNTQUdFKS5nZXQoMCk7
Ci0gICAgYXNzZXJ0Tm90TnVsbChzdWJ0cmVlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RH
ZXROZXN0ZWRUcmVlc1JldHVybnNNdWx0aXBsZVRyZWVzKCkgewotICAgIFRleHRGb3JtYXRQYXJz
ZUluZm9UcmVlLkJ1aWxkZXIgc3VidHJlZTFCdWlsZGVyID0KLSAgICAgICAgcm9vdEJ1aWxkZXIu
Z2V0QnVpbGRlckZvclN1Yk1lc3NhZ2VGaWVsZChSRVBFQVRFRF9ORVNURURfTUVTU0FHRSk7Ci0g
ICAgc3VidHJlZTFCdWlsZGVyLmdldEJ1aWxkZXJGb3JTdWJNZXNzYWdlRmllbGQoRklFTERfQkIp
OwotICAgIHN1YnRyZWUxQnVpbGRlci5nZXRCdWlsZGVyRm9yU3ViTWVzc2FnZUZpZWxkKEZJRUxE
X0JCKTsKLSAgICBUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZS5CdWlsZGVyIHN1YnRyZWUyQnVpbGRl
ciA9Ci0gICAgICAgIHJvb3RCdWlsZGVyLmdldEJ1aWxkZXJGb3JTdWJNZXNzYWdlRmllbGQoUkVQ
RUFURURfTkVTVEVEX01FU1NBR0UpOwotICAgIHN1YnRyZWUyQnVpbGRlci5nZXRCdWlsZGVyRm9y
U3ViTWVzc2FnZUZpZWxkKEZJRUxEX0JCKTsKLSAgICBUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZSBy
b290ID0gcm9vdEJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgcm9vdC5nZXRO
ZXN0ZWRUcmVlcyhSRVBFQVRFRF9ORVNURURfTUVTU0FHRSkuc2l6ZSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoCi0gICAgICAgIDIsIHJvb3QuZ2V0TmVzdGVkVHJlZXMoUkVQRUFURURfTkVTVEVEX01F
U1NBR0UpLmdldCgwKS5nZXROZXN0ZWRUcmVlcyhGSUVMRF9CQikuc2l6ZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoCi0gICAgICAgIDEsIHJvb3QuZ2V0TmVzdGVkVHJlZXMoUkVQRUFURURfTkVTVEVE
X01FU1NBR0UpLmdldCgxKS5nZXROZXN0ZWRUcmVlcyhGSUVMRF9CQikuc2l6ZSgpKTsKLSAgfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L1RleHRGb3JtYXRQYXJzZUxvY2F0aW9uVGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1RleHRGb3JtYXRQYXJzZUxvY2F0aW9uVGVzdC5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDJiZmE2ZTcxYWVmYjkwMzczMjFmNDliYjJi
NzdmZDQ2ZTZjZWJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9UZXh0Rm9ybWF0
UGFyc2VMb2NhdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJv
dG9idWY7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGVz
dCBAe2xpbmsgVGV4dEZvcm1hdFBhcnNlTG9jYXRpb259LgotICovCi1wdWJsaWMgY2xhc3MgVGV4
dEZvcm1hdFBhcnNlTG9jYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gIHB1YmxpYyB2
b2lkIHRlc3RDcmVhdGVFbXB0eSgpIHsKLSAgICBUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbiBsb2Nh
dGlvbiA9IFRleHRGb3JtYXRQYXJzZUxvY2F0aW9uLmNyZWF0ZSgtMSwgLTEpOwotICAgIGFzc2Vy
dEVxdWFscyhUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbi5FTVBUWSwgbG9jYXRpb24pOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdENyZWF0ZSgpIHsKLSAgICBUZXh0Rm9ybWF0UGFyc2VMb2NhdGlv
biBsb2NhdGlvbiA9IFRleHRGb3JtYXRQYXJzZUxvY2F0aW9uLmNyZWF0ZSgyLCAxKTsKLSAgICBh
c3NlcnRFcXVhbHMoMiwgbG9jYXRpb24uZ2V0TGluZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwg
bG9jYXRpb24uZ2V0Q29sdW1uKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENyZWF0ZVRo
cm93c0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbkZvckludmFsaWRJbmRleCgpIHsKLSAgICB0cnkg
ewotICAgICAgVGV4dEZvcm1hdFBhcnNlTG9jYXRpb24uY3JlYXRlKC0xLCAwKTsKLSAgICAgIGZh
aWwoIlNob3VsZCB0aHJvdyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgbGluZSBpcyBsZXNz
IHRoYW4gMCIpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB1bnVzZWQp
IHsKLSAgICAgIC8vIHBhc3MKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIFRleHRGb3JtYXRQYXJz
ZUxvY2F0aW9uLmNyZWF0ZSgwLCAtMSk7Ci0gICAgICBmYWlsKCJTaG91bGQgdGhyb3csIGNvbHVt
biA8IDAiKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gdW51c2VkKSB7
Ci0gICAgICAvLyBwYXNzCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEhhc2hDb2Rl
KCkgewotICAgIFRleHRGb3JtYXRQYXJzZUxvY2F0aW9uIGxvYzAgPSBUZXh0Rm9ybWF0UGFyc2VM
b2NhdGlvbi5jcmVhdGUoMiwgMSk7Ci0gICAgVGV4dEZvcm1hdFBhcnNlTG9jYXRpb24gbG9jMSA9
IFRleHRGb3JtYXRQYXJzZUxvY2F0aW9uLmNyZWF0ZSgyLCAxKTsKLQotICAgIGFzc2VydEVxdWFs
cyhsb2MwLmhhc2hDb2RlKCksIGxvYzEuaGFzaENvZGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAot
ICAgICAgICBUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbi5FTVBUWS5oYXNoQ29kZSgpLCBUZXh0Rm9y
bWF0UGFyc2VMb2NhdGlvbi5FTVBUWS5oYXNoQ29kZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3RFcXVhbHMoKSB7Ci0gICAgVGV4dEZvcm1hdFBhcnNlTG9jYXRpb24gbG9jMCA9IFRleHRG
b3JtYXRQYXJzZUxvY2F0aW9uLmNyZWF0ZSgyLCAxKTsKLSAgICBUZXh0Rm9ybWF0UGFyc2VMb2Nh
dGlvbiBsb2MxID0gVGV4dEZvcm1hdFBhcnNlTG9jYXRpb24uY3JlYXRlKDEsIDIpOwotICAgIFRl
eHRGb3JtYXRQYXJzZUxvY2F0aW9uIGxvYzIgPSBUZXh0Rm9ybWF0UGFyc2VMb2NhdGlvbi5jcmVh
dGUoMiwgMik7Ci0gICAgVGV4dEZvcm1hdFBhcnNlTG9jYXRpb24gbG9jMyA9IFRleHRGb3JtYXRQ
YXJzZUxvY2F0aW9uLmNyZWF0ZSgyLCAxKTsKLQotICAgIGFzc2VydEVxdWFscyhsb2MwLCBsb2Mz
KTsKLSAgICBhc3NlcnROb3RTYW1lKGxvYzAsIGxvYzEpOwotICAgIGFzc2VydE5vdFNhbWUobG9j
MCwgbG9jMik7Ci0gICAgYXNzZXJ0Tm90U2FtZShsb2MxLCBsb2MyKTsKLSAgfQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1RleHRGb3Jt
YXRUZXN0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYv
VGV4dEZvcm1hdFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNjMTdj
ZDBmZDE5NDg5ZDJjM2QwZWRmMDI1YjBkNGI4ODQxYjk4Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvVGV4dEZvcm1hdFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMjkg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29t
Lmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
cnMuRGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZp
ZWxkRGVzY3JpcHRvcjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlRleHRGb3JtYXQuUGFy
c2VyLlNpbmd1bGFyT3ZlcndyaXRlUG9saWN5OwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVu
aXR0ZXN0TXNldC5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjE7Ci1pbXBvcnQgcHJvdG9idWZfdW5p
dHRlc3QuVW5pdHRlc3RNc2V0LlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMjsKLWltcG9ydCBwcm90
b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLk9uZVN0cmluZzsKLWltcG9ydCBwcm90b2J1Zl91
bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RBbGxFeHRlbnNpb25zOwotaW1wb3J0IHByb3RvYnVm
X3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzOwotaW1wb3J0IHByb3RvYnVmX3Vu
aXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2U7Ci1pbXBvcnQg
cHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5UZXN0RW1wdHlNZXNzYWdlOwotaW1wb3J0
IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdE9uZW9mMjsKLWltcG9ydCBwcm90
bzJfd2lyZWZvcm1hdF91bml0dGVzdC5Vbml0dGVzdE1zZXRXaXJlRm9ybWF0LlRlc3RNZXNzYWdl
U2V0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgamF2YS5p
by5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogVGVzdCBj
YXNlIGZvciB7QGxpbmsgVGV4dEZvcm1hdH0uCi0gKgotICogVE9ETyh3ZW5ib3opOiBFeHRlbnNp
b25UZXN0IGFuZCByZXN0IG9mIHRleHRfZm9ybWF0X3VuaXR0ZXN0LmNjLgotICoKLSAqIEBhdXRo
b3Igd2VuYm96QGdvb2dsZS5jb20gKFdlbmJvIFpodSkKLSAqLwotcHVibGljIGNsYXNzIFRleHRG
b3JtYXRUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gIC8vIEEgYmFzaWMgc3RyaW5nIHdpdGgg
ZGlmZmVyZW50IGVzY2FwYWJsZSBjaGFyYWN0ZXJzIGZvciB0ZXN0aW5nLgotICBwcml2YXRlIGZp
bmFsIHN0YXRpYyBTdHJpbmcga0VzY2FwZVRlc3RTdHJpbmcgPQotICAgICAgIlwiQSBzdHJpbmcg
d2l0aCAnIGNoYXJhY3RlcnMgXG4gYW5kIFxyIG5ld2xpbmVzIGFuZCBcdCB0YWJzIGFuZCBcMDAx
ICIKLSAgICAgICAgICArICJzbGFzaGVzIFxcIjsKLQotICAvLyBBIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBhYm92ZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNoYXJhY3RlcnMgZXNjYXBlZC4KLSAgcHJp
dmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGtFc2NhcGVUZXN0U3RyaW5nRXNjYXBlZCA9Ci0gICAg
ICAiXFxcIkEgc3RyaW5nIHdpdGggXFwnIGNoYXJhY3RlcnMgXFxuIGFuZCBcXHIgbmV3bGluZXMg
IgotICAgICAgICAgICsgImFuZCBcXHQgdGFicyBhbmQgXFwwMDEgc2xhc2hlcyBcXFxcIjsKLQot
ICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYWxsRmllbGRzU2V0VGV4dCA9IFRlc3RVdGlsLnJlYWRU
ZXh0RnJvbUZpbGUoCi0gICAgInRleHRfZm9ybWF0X3VuaXR0ZXN0X2RhdGFfb25lb2ZfaW1wbGVt
ZW50ZWQudHh0Iik7Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBhbGxFeHRlbnNpb25zU2V0VGV4
dCA9IFRlc3RVdGlsLnJlYWRUZXh0RnJvbUZpbGUoCi0gICAgInRleHRfZm9ybWF0X3VuaXR0ZXN0
X2V4dGVuc2lvbnNfZGF0YS50eHQiKTsKLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXhvdGlj
VGV4dCA9Ci0gICAgInJlcGVhdGVkX2ludDMyOiAtMVxuIiArCi0gICAgInJlcGVhdGVkX2ludDMy
OiAtMjE0NzQ4MzY0OFxuIiArCi0gICAgInJlcGVhdGVkX2ludDY0OiAtMSxcbiIgKwotICAgICJy
ZXBlYXRlZF9pbnQ2NDogLTkyMjMzNzIwMzY4NTQ3NzU4MDhcbiIgKwotICAgICJyZXBlYXRlZF91
aW50MzI6IDQyOTQ5NjcyOTVcbiIgKwotICAgICJyZXBlYXRlZF91aW50MzI6IDIxNDc0ODM2NDhc
biIgKwotICAgICJyZXBlYXRlZF91aW50NjQ6IDE4NDQ2NzQ0MDczNzA5NTUxNjE1XG4iICsKLSAg
ICAicmVwZWF0ZWRfdWludDY0OiA5MjIzMzcyMDM2ODU0Nzc1ODA4XG4iICsKLSAgICAicmVwZWF0
ZWRfZG91YmxlOiAxMjMuMFxuIiArCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMTIzLjVcbiIgKwot
ICAgICJyZXBlYXRlZF9kb3VibGU6IDAuMTI1XG4iICsKLSAgICAicmVwZWF0ZWRfZG91YmxlOiAu
MTI1XG4iICsKLSAgICAicmVwZWF0ZWRfZG91YmxlOiAtLjEyNVxuIiArCi0gICAgInJlcGVhdGVk
X2RvdWJsZTogMS4yM0UxN1xuIiArCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yM0UrMTdcbiIg
KwotICAgICJyZXBlYXRlZF9kb3VibGU6IC0xLjIzZS0xN1xuIiArCi0gICAgInJlcGVhdGVkX2Rv
dWJsZTogLjIzZSsxN1xuIiArCi0gICAgInJlcGVhdGVkX2RvdWJsZTogLS4yM0UxN1xuIiArCi0g
ICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzVFMjJcbiIgKwotICAgICJyZXBlYXRlZF9kb3VibGU6
IDEuMjM1RS0xOFxuIiArCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMTIzLjQ1Njc4OVxuIiArCi0g
ICAgInJlcGVhdGVkX2RvdWJsZTogSW5maW5pdHlcbiIgKwotICAgICJyZXBlYXRlZF9kb3VibGU6
IC1JbmZpbml0eVxuIiArCi0gICAgInJlcGVhdGVkX2RvdWJsZTogTmFOXG4iICsKLSAgICAicmVw
ZWF0ZWRfc3RyaW5nOiBcIlxcMDAwXFwwMDFcXGFcXGJcXGZcXG5cXHJcXHRcXHZcXFxcXFwnXFxc
IiIgKwotICAgICAgIlxcMzQxXFwyMTBcXDI2NFwiXG4iICsKLSAgICAicmVwZWF0ZWRfYnl0ZXM6
IFwiXFwwMDBcXDAwMVxcYVxcYlxcZlxcblxcclxcdFxcdlxcXFxcXCdcXFwiXFwzNzZcIlxuIjsK
LQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY2Fub25pY2FsRXhvdGljVGV4dCA9Ci0gICAgICBl
eG90aWNUZXh0LnJlcGxhY2UoIjogLiIsICI6IDAuIikucmVwbGFjZSgiOiAtLiIsICI6IC0wLiIp
ICAgLy8gc2hvcnQtZm9ybSBkb3VibGUKLSAgICAgIC5yZXBsYWNlKCIyM2UiLCAiMjNFIikucmVw
bGFjZSgiRSsiLCAiRSIpLnJlcGxhY2UoIjAuMjNFMTciLCAiMi4zRTE2IikucmVwbGFjZSgiLCIs
ICIiKTsKLQotICBwcml2YXRlIFN0cmluZyBtZXNzYWdlU2V0VGV4dCA9Ci0gICAgIltwcm90b2J1
Zl91bml0dGVzdC5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjFdIHtcbiIgKwotICAgICIgIGk6IDEy
M1xuIiArCi0gICAgIn1cbiIgKwotICAgICJbcHJvdG9idWZfdW5pdHRlc3QuVGVzdE1lc3NhZ2VT
ZXRFeHRlbnNpb24yXSB7XG4iICsKLSAgICAiICBzdHI6IFwiZm9vXCJcbiIgKwotICAgICJ9XG4i
OwotCi0gIHByaXZhdGUgU3RyaW5nIG1lc3NhZ2VTZXRUZXh0V2l0aFJlcGVhdGVkRXh0ZW5zaW9u
ID0KLSAgICAgICJbcHJvdG9idWZfdW5pdHRlc3QuVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xXSB7
XG4iICsKLSAgICAgICIgIGk6IDEyM1xuIiArCi0gICAgICAifVxuIiArCi0gICAgICAiW3Byb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMV0ge1xuIiArCi0gICAgICAiICBp
OiA0NTZcbiIgKwotICAgICAgIn1cbiI7Ci0KLQotICBwcml2YXRlIGZpbmFsIFRleHRGb3JtYXQu
UGFyc2VyIHBhcnNlcldpdGhPdmVyd3JpdGVGb3JiaWRkZW4gPQotICAgICAgVGV4dEZvcm1hdC5Q
YXJzZXIubmV3QnVpbGRlcigpCi0gICAgICAgICAgLnNldFNpbmd1bGFyT3ZlcndyaXRlUG9saWN5
KAotICAgICAgICAgICAgICBTaW5ndWxhck92ZXJ3cml0ZVBvbGljeS5GT1JCSURfU0lOR1VMQVJf
T1ZFUldSSVRFUykKLSAgICAgICAgICAuYnVpbGQoKTsKLQotICBwcml2YXRlIGZpbmFsIFRleHRG
b3JtYXQuUGFyc2VyIGRlZmF1bHRQYXJzZXIgPQotICAgICAgVGV4dEZvcm1hdC5QYXJzZXIubmV3
QnVpbGRlcigpLmJ1aWxkKCk7Ci0KLSAgLyoqIFByaW50IFRlc3RBbGxUeXBlcyBhbmQgY29tcGFy
ZSB3aXRoIGdvbGRlbiBmaWxlLiAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UHJpbnRNZXNzYWdlKCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIGphdmFUZXh0ID0gVGV4dEZvcm1hdC5wcmlu
dFRvU3RyaW5nKFRlc3RVdGlsLmdldEFsbFNldCgpKTsKLQotICAgIC8vIEphdmEgbGlrZXMgdG8g
YWRkIGEgdHJhaWxpbmcgIi4wIiB0byBmbG9hdHMgYW5kIGRvdWJsZXMuICBDIHByaW50ZgotICAg
IC8vICh3aXRoICVnIGZvcm1hdCkgZG9lcyBub3QuICBPdXIgZ29sZGVuIGZpbGVzIGFyZSB1c2Vk
IGZvciBib3RoCi0gICAgLy8gQysrIGFuZCBKYXZhIFRleHRGb3JtYXQgY2xhc3Nlcywgc28gd2Ug
bmVlZCB0byBjb25mb3JtLgotICAgIGphdmFUZXh0ID0gamF2YVRleHQucmVwbGFjZSgiLjBcbiIs
ICJcbiIpOwotCi0gICAgYXNzZXJ0RXF1YWxzKGFsbEZpZWxkc1NldFRleHQsIGphdmFUZXh0KTsK
LSAgfQotCi0gIC8qKiBQcmludCBUZXN0QWxsVHlwZXMgYXMgQnVpbGRlciBhbmQgY29tcGFyZSB3
aXRoIGdvbGRlbiBmaWxlLiAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UHJpbnRNZXNzYWdlQnVpbGRl
cigpIHRocm93cyBFeGNlcHRpb24gewotICAgIFN0cmluZyBqYXZhVGV4dCA9IFRleHRGb3JtYXQu
cHJpbnRUb1N0cmluZyhUZXN0VXRpbC5nZXRBbGxTZXRCdWlsZGVyKCkpOwotCi0gICAgLy8gSmF2
YSBsaWtlcyB0byBhZGQgYSB0cmFpbGluZyAiLjAiIHRvIGZsb2F0cyBhbmQgZG91Ymxlcy4gIEMg
cHJpbnRmCi0gICAgLy8gKHdpdGggJWcgZm9ybWF0KSBkb2VzIG5vdC4gIE91ciBnb2xkZW4gZmls
ZXMgYXJlIHVzZWQgZm9yIGJvdGgKLSAgICAvLyBDKysgYW5kIEphdmEgVGV4dEZvcm1hdCBjbGFz
c2VzLCBzbyB3ZSBuZWVkIHRvIGNvbmZvcm0uCi0gICAgamF2YVRleHQgPSBqYXZhVGV4dC5yZXBs
YWNlKCIuMFxuIiwgIlxuIik7Ci0KLSAgICBhc3NlcnRFcXVhbHMoYWxsRmllbGRzU2V0VGV4dCwg
amF2YVRleHQpOwotICB9Ci0KLSAgLyoqIFByaW50IFRlc3RBbGxFeHRlbnNpb25zIGFuZCBjb21w
YXJlIHdpdGggZ29sZGVuIGZpbGUuICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQcmludEV4dGVuc2lv
bnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgamF2YVRleHQgPSBUZXh0Rm9ybWF0
LnByaW50VG9TdHJpbmcoVGVzdFV0aWwuZ2V0QWxsRXh0ZW5zaW9uc1NldCgpKTsKLQotICAgIC8v
IEphdmEgbGlrZXMgdG8gYWRkIGEgdHJhaWxpbmcgIi4wIiB0byBmbG9hdHMgYW5kIGRvdWJsZXMu
ICBDIHByaW50ZgotICAgIC8vICh3aXRoICVnIGZvcm1hdCkgZG9lcyBub3QuICBPdXIgZ29sZGVu
IGZpbGVzIGFyZSB1c2VkIGZvciBib3RoCi0gICAgLy8gQysrIGFuZCBKYXZhIFRleHRGb3JtYXQg
Y2xhc3Nlcywgc28gd2UgbmVlZCB0byBjb25mb3JtLgotICAgIGphdmFUZXh0ID0gamF2YVRleHQu
cmVwbGFjZSgiLjBcbiIsICJcbiIpOwotCi0gICAgYXNzZXJ0RXF1YWxzKGFsbEV4dGVuc2lvbnNT
ZXRUZXh0LCBqYXZhVGV4dCk7Ci0gIH0KLQotICAvLyBDcmVhdGVzIGFuIGV4YW1wbGUgdW5rbm93
biBmaWVsZCBzZXQuCi0gIHByaXZhdGUgVW5rbm93bkZpZWxkU2V0IG1ha2VVbmtub3duRmllbGRT
ZXQoKSB7Ci0gICAgcmV0dXJuIFVua25vd25GaWVsZFNldC5uZXdCdWlsZGVyKCkKLSAgICAgICAg
LmFkZEZpZWxkKDUsCi0gICAgICAgICAgICBVbmtub3duRmllbGRTZXQuRmllbGQubmV3QnVpbGRl
cigpCi0gICAgICAgICAgICAuYWRkVmFyaW50KDEpCi0gICAgICAgICAgICAuYWRkRml4ZWQzMigy
KQotICAgICAgICAgICAgLmFkZEZpeGVkNjQoMykKLSAgICAgICAgICAgIC5hZGRMZW5ndGhEZWxp
bWl0ZWQoQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoIjQiKSkKLSAgICAgICAgICAgIC5hZGRHcm91
cCgKLSAgICAgICAgICAgICAgICBVbmtub3duRmllbGRTZXQubmV3QnVpbGRlcigpCi0gICAgICAg
ICAgICAgICAgLmFkZEZpZWxkKDEwLAotICAgICAgICAgICAgICAgICAgICBVbmtub3duRmllbGRT
ZXQuRmllbGQubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRWYXJpbnQoNSkK
LSAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgICAgICAgICAgLmJ1aWxkKCkp
Ci0gICAgICAgICAgICAuYnVpbGQoKSkKLSAgICAgICAgLmFkZEZpZWxkKDgsCi0gICAgICAgICAg
ICBVbmtub3duRmllbGRTZXQuRmllbGQubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuYWRkVmFy
aW50KDEpCi0gICAgICAgICAgICAuYWRkVmFyaW50KDIpCi0gICAgICAgICAgICAuYWRkVmFyaW50
KDMpCi0gICAgICAgICAgICAuYnVpbGQoKSkKLSAgICAgICAgLmFkZEZpZWxkKDE1LAotICAgICAg
ICAgICAgVW5rbm93bkZpZWxkU2V0LkZpZWxkLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLmFk
ZFZhcmludCgweEFCQ0RFRjEyMzQ1Njc4OTBMKQotICAgICAgICAgICAgLmFkZEZpeGVkMzIoMHhB
QkNEMTIzNCkKLSAgICAgICAgICAgIC5hZGRGaXhlZDY0KDB4QUJDREVGMTIzNDU2Nzg5MEwpCi0g
ICAgICAgICAgICAuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0UHJpbnRVbmtub3duRmllbGRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8g
VGVzdCBwcmludGluZyBvZiB1bmtub3duIGZpZWxkcyBpbiBhIG1lc3NhZ2UuCi0KLSAgICBUZXN0
RW1wdHlNZXNzYWdlIG1lc3NhZ2UgPQotICAgICAgVGVzdEVtcHR5TWVzc2FnZS5uZXdCdWlsZGVy
KCkKLSAgICAgICAgLnNldFVua25vd25GaWVsZHMobWFrZVVua25vd25GaWVsZFNldCgpKQotICAg
ICAgICAuYnVpbGQoKTsKLQotICAgIGFzc2VydEVxdWFscygKLSAgICAgICI1OiAxXG4iICsKLSAg
ICAgICI1OiAweDAwMDAwMDAyXG4iICsKLSAgICAgICI1OiAweDAwMDAwMDAwMDAwMDAwMDNcbiIg
KwotICAgICAgIjU6IFwiNFwiXG4iICsKLSAgICAgICI1IHtcbiIgKwotICAgICAgIiAgMTA6IDVc
biIgKwotICAgICAgIn1cbiIgKwotICAgICAgIjg6IDFcbiIgKwotICAgICAgIjg6IDJcbiIgKwot
ICAgICAgIjg6IDNcbiIgKwotICAgICAgIjE1OiAxMjM3OTgxMzgxMjE3Nzg5MzUyMFxuIiArCi0g
ICAgICAiMTU6IDB4YWJjZDEyMzRcbiIgKwotICAgICAgIjE1OiAweGFiY2RlZjEyMzQ1Njc4OTBc
biIsCi0gICAgICBUZXh0Rm9ybWF0LnByaW50VG9TdHJpbmcobWVzc2FnZSkpOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdFByaW50RmllbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBmaW5h
bCBGaWVsZERlc2NyaXB0b3IgZGF0YUZpZWxkID0KLSAgICAgIE9uZVN0cmluZy5nZXREZXNjcmlw
dG9yKCkuZmluZEZpZWxkQnlOYW1lKCJkYXRhIik7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAg
ImRhdGE6IFwidGVzdCBkYXRhXCJcbiIsCi0gICAgICBUZXh0Rm9ybWF0LnByaW50RmllbGRUb1N0
cmluZyhkYXRhRmllbGQsICJ0ZXN0IGRhdGEiKSk7Ci0KLSAgICBmaW5hbCBGaWVsZERlc2NyaXB0
b3Igb3B0aW9uYWxGaWVsZCA9Ci0gICAgICBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpLmZp
bmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiKTsKLSAgICBmaW5hbCBPYmpl
Y3QgdmFsdWUgPSBOZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRCYig0MikuYnVpbGQoKTsK
LQotICAgIGFzc2VydEVxdWFscygKLSAgICAgICJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSB7XG4g
IGJiOiA0MlxufVxuIiwKLSAgICAgIFRleHRGb3JtYXQucHJpbnRGaWVsZFRvU3RyaW5nKG9wdGlv
bmFsRmllbGQsIHZhbHVlKSk7Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIHRvIGNvbnN0cnVj
dCBhIEJ5dGVTdHJpbmcgZnJvbSBhIFN0cmluZyBjb250YWluaW5nIG9ubHkgOC1iaXQKLSAgICog
Y2hhcmFjdGVycy4gIFRoZSBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgZGlyZWN0bHkgdG8gYnl0
ZXMsICpub3QqCi0gICAqIGVuY29kZWQgdXNpbmcgVVRGLTguCi0gICAqLwotICBwcml2YXRlIEJ5
dGVTdHJpbmcgYnl0ZXMoU3RyaW5nIHN0cikgewotICAgIHJldHVybiBCeXRlU3RyaW5nLmNvcHlG
cm9tKHN0ci5nZXRCeXRlcyhJbnRlcm5hbC5JU09fODg1OV8xKSk7Ci0gIH0KLQotICAvKioKLSAg
ICogSGVscGVyIHRvIGNvbnN0cnVjdCBhIEJ5dGVTdHJpbmcgZnJvbSBhIGJ1bmNoIG9mIGJ5dGVz
LiAgVGhlIGlucHV0cyBhcmUKLSAgICogYWN0dWFsbHkgaW50cyBzbyB0aGF0IEkgY2FuIHVzZSBo
ZXggbm90YXRpb24gYW5kIG5vdCBnZXQgc3R1cGlkIGVycm9ycwotICAgKiBhYm91dCBwcmVjaXNp
b24uCi0gICAqLwotICBwcml2YXRlIEJ5dGVTdHJpbmcgYnl0ZXMoaW50Li4uIGJ5dGVzQXNJbnRz
KSB7Ci0gICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbYnl0ZXNBc0ludHMubGVuZ3RoXTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzQXNJbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBi
eXRlc1tpXSA9IChieXRlKSBieXRlc0FzSW50c1tpXTsKLSAgICB9Ci0gICAgcmV0dXJuIEJ5dGVT
dHJpbmcuY29weUZyb20oYnl0ZXMpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFByaW50RXhv
dGljKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgTWVzc2FnZSBtZXNzYWdlID0gVGVzdEFsbFR5
cGVzLm5ld0J1aWxkZXIoKQotICAgICAgLy8gU2lnbmVkIHZzLiB1bnNpZ25lZCBudW1iZXJzLgot
ICAgICAgLmFkZFJlcGVhdGVkSW50MzIgKC0xKQotICAgICAgLmFkZFJlcGVhdGVkVWludDMyKC0x
KQotICAgICAgLmFkZFJlcGVhdGVkSW50NjQgKC0xKQotICAgICAgLmFkZFJlcGVhdGVkVWludDY0
KC0xKQotCi0gICAgICAuYWRkUmVwZWF0ZWRJbnQzMiAoMSAgPDwgMzEpCi0gICAgICAuYWRkUmVw
ZWF0ZWRVaW50MzIoMSAgPDwgMzEpCi0gICAgICAuYWRkUmVwZWF0ZWRJbnQ2NCAoMUwgPDwgNjMp
Ci0gICAgICAuYWRkUmVwZWF0ZWRVaW50NjQoMUwgPDwgNjMpCi0KLSAgICAgIC8vIEZsb2F0cyBv
ZiB2YXJpb3VzIHByZWNpc2lvbnMgYW5kIGV4cG9uZW50cy4KLSAgICAgIC5hZGRSZXBlYXRlZERv
dWJsZSgxMjMpCi0gICAgICAuYWRkUmVwZWF0ZWREb3VibGUoMTIzLjUpCi0gICAgICAuYWRkUmVw
ZWF0ZWREb3VibGUoMC4xMjUpCi0gICAgICAuYWRkUmVwZWF0ZWREb3VibGUoLjEyNSkKLSAgICAg
IC5hZGRSZXBlYXRlZERvdWJsZSgtLjEyNSkKLSAgICAgIC5hZGRSZXBlYXRlZERvdWJsZSgxMjNl
MTUpCi0gICAgICAuYWRkUmVwZWF0ZWREb3VibGUoMTIzZTE1KQotICAgICAgLmFkZFJlcGVhdGVk
RG91YmxlKC0xLjIzZS0xNykKLSAgICAgIC5hZGRSZXBlYXRlZERvdWJsZSguMjNlMTcpCi0gICAg
ICAuYWRkUmVwZWF0ZWREb3VibGUoLTIzZTE1KQotICAgICAgLmFkZFJlcGVhdGVkRG91YmxlKDEy
My41ZTIwKQotICAgICAgLmFkZFJlcGVhdGVkRG91YmxlKDEyMy41ZS0yMCkKLSAgICAgIC5hZGRS
ZXBlYXRlZERvdWJsZSgxMjMuNDU2Nzg5KQotICAgICAgLmFkZFJlcGVhdGVkRG91YmxlKERvdWJs
ZS5QT1NJVElWRV9JTkZJTklUWSkKLSAgICAgIC5hZGRSZXBlYXRlZERvdWJsZShEb3VibGUuTkVH
QVRJVkVfSU5GSU5JVFkpCi0gICAgICAuYWRkUmVwZWF0ZWREb3VibGUoRG91YmxlLk5hTikKLQot
ICAgICAgLy8gU3RyaW5ncyBhbmQgYnl0ZXMgdGhhdCBuZWVkaW5nIGVzY2FwaW5nLgotICAgICAg
LmFkZFJlcGVhdGVkU3RyaW5nKCJcMFwwMDFcMDA3XGJcZlxuXHJcdFwwMTNcXFwnXCJcdTEyMzQi
KQotICAgICAgLmFkZFJlcGVhdGVkQnl0ZXMoYnl0ZXMoIlwwXDAwMVwwMDdcYlxmXG5cclx0XDAx
M1xcXCdcIlx1MDBmZSIpKQotICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoY2Fu
b25pY2FsRXhvdGljVGV4dCwgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RQcmludE1lc3NhZ2VTZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TWVz
c2FnZVNldCBtZXNzYWdlU2V0ID0KLSAgICAgIFRlc3RNZXNzYWdlU2V0Lm5ld0J1aWxkZXIoKQot
ICAgICAgICAuc2V0RXh0ZW5zaW9uKAotICAgICAgICAgIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9u
MS5tZXNzYWdlU2V0RXh0ZW5zaW9uLAotICAgICAgICAgIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9u
MS5uZXdCdWlsZGVyKCkuc2V0SSgxMjMpLmJ1aWxkKCkpCi0gICAgICAgIC5zZXRFeHRlbnNpb24o
Ci0gICAgICAgICAgVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yLm1lc3NhZ2VTZXRFeHRlbnNpb24s
Ci0gICAgICAgICAgVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yLm5ld0J1aWxkZXIoKS5zZXRTdHIo
ImZvbyIpLmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG1l
c3NhZ2VTZXRUZXh0LCBtZXNzYWdlU2V0LnRvU3RyaW5nKCkpOwotICB9Ci0KLSAgLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBU
ZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsK
LSAgICBUZXh0Rm9ybWF0Lm1lcmdlKGFsbEZpZWxkc1NldFRleHQsIGJ1aWxkZXIpOwotICAgIFRl
c3RVdGlsLmFzc2VydEFsbEZpZWxkc1NldChidWlsZGVyLmJ1aWxkKCkpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdFBhcnNlUmVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFs
bFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAg
VGV4dEZvcm1hdC5tZXJnZShuZXcgU3RyaW5nUmVhZGVyKGFsbEZpZWxkc1NldFRleHQpLCBidWls
ZGVyKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRBbGxGaWVsZHNTZXQoYnVpbGRlci5idWlsZCgpKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZUV4dGVuc2lvbnMoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsRXh0
ZW5zaW9ucy5uZXdCdWlsZGVyKCk7Ci0gICAgVGV4dEZvcm1hdC5tZXJnZShhbGxFeHRlbnNpb25z
U2V0VGV4dCwKLSAgICAgICAgICAgICAgICAgICAgIFRlc3RVdGlsLmdldEV4dGVuc2lvblJlZ2lz
dHJ5KCksCi0gICAgICAgICAgICAgICAgICAgICBidWlsZGVyKTsKLSAgICBUZXN0VXRpbC5hc3Nl
cnRBbGxFeHRlbnNpb25zU2V0KGJ1aWxkZXIuYnVpbGQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0UGFyc2VDb21wYXRpYmlsaXR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5n
IG9yaWdpbmFsID0gInJlcGVhdGVkX2Zsb2F0OiBpbmZcbiIgKwotICAgICAgICAgICAgICAgICAg
ICAgICJyZXBlYXRlZF9mbG9hdDogLWluZlxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgInJl
cGVhdGVkX2Zsb2F0OiBuYW5cbiIgKwotICAgICAgICAgICAgICAgICAgICAgICJyZXBlYXRlZF9m
bG9hdDogaW5mZlxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgInJlcGVhdGVkX2Zsb2F0OiAt
aW5mZlxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgInJlcGVhdGVkX2Zsb2F0OiBuYW5mXG4i
ICsKLSAgICAgICAgICAgICAgICAgICAgICAicmVwZWF0ZWRfZmxvYXQ6IDEuMGZcbiIgKwotICAg
ICAgICAgICAgICAgICAgICAgICJyZXBlYXRlZF9mbG9hdDogaW5maW5pdHlmXG4iICsKLSAgICAg
ICAgICAgICAgICAgICAgICAicmVwZWF0ZWRfZmxvYXQ6IC1JbmZpbml0eWZcbiIgKwotICAgICAg
ICAgICAgICAgICAgICAgICJyZXBlYXRlZF9kb3VibGU6IGluZmluaXR5XG4iICsKLSAgICAgICAg
ICAgICAgICAgICAgICAicmVwZWF0ZWRfZG91YmxlOiAtaW5maW5pdHlcbiIgKwotICAgICAgICAg
ICAgICAgICAgICAgICJyZXBlYXRlZF9kb3VibGU6IG5hblxuIjsKLSAgICBTdHJpbmcgY2Fub25p
Y2FsID0gICJyZXBlYXRlZF9mbG9hdDogSW5maW5pdHlcbiIgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgInJlcGVhdGVkX2Zsb2F0OiAtSW5maW5pdHlcbiIgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgInJlcGVhdGVkX2Zsb2F0OiBOYU5cbiIgKwotICAgICAgICAgICAgICAgICAgICAgICAg
InJlcGVhdGVkX2Zsb2F0OiBJbmZpbml0eVxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAi
cmVwZWF0ZWRfZmxvYXQ6IC1JbmZpbml0eVxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAi
cmVwZWF0ZWRfZmxvYXQ6IE5hTlxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVwZWF0
ZWRfZmxvYXQ6IDEuMFxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVwZWF0ZWRfZmxv
YXQ6IEluZmluaXR5XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZXBlYXRlZF9mbG9h
dDogLUluZmluaXR5XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZXBlYXRlZF9kb3Vi
bGU6IEluZmluaXR5XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZXBlYXRlZF9kb3Vi
bGU6IC1JbmZpbml0eVxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVwZWF0ZWRfZG91
YmxlOiBOYU5cbiI7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxU
eXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgVGV4dEZvcm1hdC5tZXJnZShvcmlnaW5hbCwgYnVpbGRl
cik7Ci0gICAgYXNzZXJ0RXF1YWxzKGNhbm9uaWNhbCwgYnVpbGRlci5idWlsZCgpLnRvU3RyaW5n
KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlRXhvdGljKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5u
ZXdCdWlsZGVyKCk7Ci0gICAgVGV4dEZvcm1hdC5tZXJnZShleG90aWNUZXh0LCBidWlsZGVyKTsK
LQotICAgIC8vIFRvbyBsYXp5IHRvIGNoZWNrIHRoaW5ncyBpbmRpdmlkdWFsbHkuICBEb24ndCB0
cnkgdG8gZGVidWcgdGhpcwotICAgIC8vIGlmIHRlc3RQcmludEV4b3RpYygpIGlzIGZhaWxpbmcu
Ci0gICAgYXNzZXJ0RXF1YWxzKGNhbm9uaWNhbEV4b3RpY1RleHQsIGJ1aWxkZXIuYnVpbGQoKS50
b1N0cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZU1lc3NhZ2VTZXQoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3Ry
eSA9IEV4dGVuc2lvblJlZ2lzdHJ5Lm5ld0luc3RhbmNlKCk7Ci0gICAgZXh0ZW5zaW9uUmVnaXN0
cnkuYWRkKFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMS5tZXNzYWdlU2V0RXh0ZW5zaW9uKTsKLSAg
ICBleHRlbnNpb25SZWdpc3RyeS5hZGQoVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yLm1lc3NhZ2VT
ZXRFeHRlbnNpb24pOwotCi0gICAgVGVzdE1lc3NhZ2VTZXQuQnVpbGRlciBidWlsZGVyID0gVGVz
dE1lc3NhZ2VTZXQubmV3QnVpbGRlcigpOwotICAgIFRleHRGb3JtYXQubWVyZ2UobWVzc2FnZVNl
dFRleHQsIGV4dGVuc2lvblJlZ2lzdHJ5LCBidWlsZGVyKTsKLSAgICBUZXN0TWVzc2FnZVNldCBt
ZXNzYWdlU2V0ID0gYnVpbGRlci5idWlsZCgpOwotCi0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlU2V0
Lmhhc0V4dGVuc2lvbigKLSAgICAgIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMS5tZXNzYWdlU2V0
RXh0ZW5zaW9uKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbWVzc2FnZVNldC5nZXRFeHRlbnNp
b24oCi0gICAgICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubWVzc2FnZVNldEV4dGVuc2lvbiku
Z2V0SSgpKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2VTZXQuaGFzRXh0ZW5zaW9uKAotICAgICAg
VGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yLm1lc3NhZ2VTZXRFeHRlbnNpb24pKTsKLSAgICBhc3Nl
cnRFcXVhbHMoImZvbyIsIG1lc3NhZ2VTZXQuZ2V0RXh0ZW5zaW9uKAotICAgICAgVGVzdE1lc3Nh
Z2VTZXRFeHRlbnNpb24yLm1lc3NhZ2VTZXRFeHRlbnNpb24pLmdldFN0cigpKTsKLQotICAgIGJ1
aWxkZXIgPSBUZXN0TWVzc2FnZVNldC5uZXdCdWlsZGVyKCk7Ci0gICAgVGV4dEZvcm1hdC5tZXJn
ZShtZXNzYWdlU2V0VGV4dFdpdGhSZXBlYXRlZEV4dGVuc2lvbiwgZXh0ZW5zaW9uUmVnaXN0cnks
Ci0gICAgICAgIGJ1aWxkZXIpOwotICAgIG1lc3NhZ2VTZXQgPSBidWlsZGVyLmJ1aWxkKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbWVzc2FnZVNldC5nZXRFeHRlbnNpb24oCi0gICAgICBUZXN0
TWVzc2FnZVNldEV4dGVuc2lvbjEubWVzc2FnZVNldEV4dGVuc2lvbikuZ2V0SSgpKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZU1lc3NhZ2VTZXRXaXRoT3ZlcndyaXRlRm9yYmlkZGVu
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVn
aXN0cnkgPSBFeHRlbnNpb25SZWdpc3RyeS5uZXdJbnN0YW5jZSgpOwotICAgIGV4dGVuc2lvblJl
Z2lzdHJ5LmFkZChUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubWVzc2FnZVNldEV4dGVuc2lvbik7
Ci0gICAgZXh0ZW5zaW9uUmVnaXN0cnkuYWRkKFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMi5tZXNz
YWdlU2V0RXh0ZW5zaW9uKTsKLQotICAgIFRlc3RNZXNzYWdlU2V0LkJ1aWxkZXIgYnVpbGRlciA9
IFRlc3RNZXNzYWdlU2V0Lm5ld0J1aWxkZXIoKTsKLSAgICBwYXJzZXJXaXRoT3ZlcndyaXRlRm9y
YmlkZGVuLm1lcmdlKAotICAgICAgICBtZXNzYWdlU2V0VGV4dCwgZXh0ZW5zaW9uUmVnaXN0cnks
IGJ1aWxkZXIpOwotICAgIFRlc3RNZXNzYWdlU2V0IG1lc3NhZ2VTZXQgPSBidWlsZGVyLmJ1aWxk
KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbWVzc2FnZVNldC5nZXRFeHRlbnNpb24oCi0gICAg
ICAgIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMS5tZXNzYWdlU2V0RXh0ZW5zaW9uKS5nZXRJKCkp
OwotICAgIGFzc2VydEVxdWFscygiZm9vIiwgbWVzc2FnZVNldC5nZXRFeHRlbnNpb24oCi0gICAg
ICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjIubWVzc2FnZVNldEV4dGVuc2lvbikuZ2V0U3RyKCkp
OwotCi0gICAgYnVpbGRlciA9IFRlc3RNZXNzYWdlU2V0Lm5ld0J1aWxkZXIoKTsKLSAgICB0cnkg
ewotICAgICAgcGFyc2VyV2l0aE92ZXJ3cml0ZUZvcmJpZGRlbi5tZXJnZSgKLSAgICAgICAgICBt
ZXNzYWdlU2V0VGV4dFdpdGhSZXBlYXRlZEV4dGVuc2lvbiwgZXh0ZW5zaW9uUmVnaXN0cnksIGJ1
aWxkZXIpOwotICAgICAgZmFpbCgiZXhwZWN0ZWQgcGFyc2UgZXhjZXB0aW9uIik7Ci0gICAgfSBj
YXRjaCAoVGV4dEZvcm1hdC5QYXJzZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMo
IjY6MTogTm9uLXJlcGVhdGVkIGZpZWxkICIKLSAgICAgICAgICArICJcInByb3RvYnVmX3VuaXR0
ZXN0LlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMS5tZXNzYWdlX3NldF9leHRlbnNpb25cIiIKLSAg
ICAgICAgICArICIgY2Fubm90IGJlIG92ZXJ3cml0dGVuLiIsCi0gICAgICAgICAgZS5nZXRNZXNz
YWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZU51bWVyaWNFbnVt
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9
IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgVGV4dEZvcm1hdC5tZXJnZSgib3B0aW9u
YWxfbmVzdGVkX2VudW06IDIiLCBidWlsZGVyKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5
cGVzLk5lc3RlZEVudW0uQkFSLCBidWlsZGVyLmdldE9wdGlvbmFsTmVzdGVkRW51bSgpKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZUFuZ2xlQnJhY2tldHMoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5l
d0J1aWxkZXIoKTsKLSAgICBUZXh0Rm9ybWF0Lm1lcmdlKCJPcHRpb25hbEdyb3VwOiA8IGE6IDEg
PiIsIGJ1aWxkZXIpOwotICAgIGFzc2VydFRydWUoYnVpbGRlci5oYXNPcHRpb25hbEdyb3VwKCkp
OwotICAgIGFzc2VydEVxdWFscygxLCBidWlsZGVyLmdldE9wdGlvbmFsR3JvdXAoKS5nZXRBKCkp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlQ29tbWVudCgpIHRocm93cyBFeGNlcHRp
b24gewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3
QnVpbGRlcigpOwotICAgIFRleHRGb3JtYXQubWVyZ2UoCi0gICAgICAiIyB0aGlzIGlzIGEgY29t
bWVudFxuIiArCi0gICAgICAib3B0aW9uYWxfaW50MzI6IDEgICMgYW5vdGhlciBjb21tZW50XG4i
ICsKLSAgICAgICJvcHRpb25hbF9pbnQ2NDogMlxuIiArCi0gICAgICAiIyBFT0YgY29tbWVudCIs
IGJ1aWxkZXIpOwotICAgIGFzc2VydEVxdWFscygxLCBidWlsZGVyLmdldE9wdGlvbmFsSW50MzIo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGJ1aWxkZXIuZ2V0T3B0aW9uYWxJbnQ2NCgpKTsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBhc3NlcnRQYXJzZUVycm9yKFN0cmluZyBlcnJvciwgU3RyaW5n
IHRleHQpIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVz
Lm5ld0J1aWxkZXIoKTsKLSAgICB0cnkgewotICAgICAgVGV4dEZvcm1hdC5tZXJnZSh0ZXh0LCBU
ZXN0VXRpbC5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLCBidWlsZGVyKTsKLSAgICAgIGZhaWwoIkV4
cGVjdGVkIHBhcnNlIGV4Y2VwdGlvbi4iKTsKLSAgICB9IGNhdGNoIChUZXh0Rm9ybWF0LlBhcnNl
RXhjZXB0aW9uIGUpIHsKLSAgICAgIGFzc2VydEVxdWFscyhlcnJvciwgZS5nZXRNZXNzYWdlKCkp
OwotICAgIH0KLSAgfQotCi0KLSAgcHJpdmF0ZSB2b2lkIGFzc2VydFBhcnNlRXJyb3JXaXRoT3Zl
cndyaXRlRm9yYmlkZGVuKFN0cmluZyBlcnJvciwKLSAgICAgIFN0cmluZyB0ZXh0KSB7Ci0gICAg
VGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7
Ci0gICAgdHJ5IHsKLSAgICAgIHBhcnNlcldpdGhPdmVyd3JpdGVGb3JiaWRkZW4ubWVyZ2UoCi0g
ICAgICAgICAgdGV4dCwgVGVzdFV0aWwuZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKSwgYnVpbGRlcik7
Ci0gICAgICBmYWlsKCJFeHBlY3RlZCBwYXJzZSBleGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaCAo
VGV4dEZvcm1hdC5QYXJzZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXJyb3Is
IGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFRlc3RBbGxUeXBlcyBh
c3NlcnRQYXJzZVN1Y2Nlc3NXaXRoT3ZlcndyaXRlRm9yYmlkZGVuKAotICAgICAgU3RyaW5nIHRl
eHQpIHRocm93cyBUZXh0Rm9ybWF0LlBhcnNlRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMu
QnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBwYXJzZXJX
aXRoT3ZlcndyaXRlRm9yYmlkZGVuLm1lcmdlKAotICAgICAgICB0ZXh0LCBUZXN0VXRpbC5nZXRF
eHRlbnNpb25SZWdpc3RyeSgpLCBidWlsZGVyKTsKLSAgICByZXR1cm4gYnVpbGRlci5idWlsZCgp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlRXJyb3JzKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgYXNzZXJ0UGFyc2VFcnJvcigKLSAgICAgICIxOjE2OiBFeHBlY3RlZCBcIjpcIi4i
LAotICAgICAgIm9wdGlvbmFsX2ludDMyIDEyMyIpOwotICAgIGFzc2VydFBhcnNlRXJyb3IoCi0g
ICAgICAiMToyMzogRXhwZWN0ZWQgaWRlbnRpZmllci4gRm91bmQgJz8nIiwKLSAgICAgICJvcHRp
b25hbF9uZXN0ZWRfZW51bTogPyIpOwotICAgIGFzc2VydFBhcnNlRXJyb3IoCi0gICAgICAiMTox
ODogQ291bGRuJ3QgcGFyc2UgaW50ZWdlcjogTnVtYmVyIG11c3QgYmUgcG9zaXRpdmU6IC0xIiwK
LSAgICAgICJvcHRpb25hbF91aW50MzI6IC0xIik7Ci0gICAgYXNzZXJ0UGFyc2VFcnJvcigKLSAg
ICAgICIxOjE3OiBDb3VsZG4ndCBwYXJzZSBpbnRlZ2VyOiBOdW1iZXIgb3V0IG9mIHJhbmdlIGZv
ciAzMi1iaXQgc2lnbmVkICIgKwotICAgICAgICAiaW50ZWdlcjogODIzMDE0ODEyOTA4NDkwMTIz
ODUyMzAxNTciLAotICAgICAgIm9wdGlvbmFsX2ludDMyOiA4MjMwMTQ4MTI5MDg0OTAxMjM4NTIz
MDE1NyIpOwotICAgIGFzc2VydFBhcnNlRXJyb3IoCi0gICAgICAiMToxNjogRXhwZWN0ZWQgXCJ0
cnVlXCIgb3IgXCJmYWxzZVwiLiIsCi0gICAgICAib3B0aW9uYWxfYm9vbDogbWF5YmUiKTsKLSAg
ICBhc3NlcnRQYXJzZUVycm9yKAotICAgICAgIjE6MTY6IEV4cGVjdGVkIFwidHJ1ZVwiIG9yIFwi
ZmFsc2VcIi4iLAotICAgICAgIm9wdGlvbmFsX2Jvb2w6IDIiKTsKLSAgICBhc3NlcnRQYXJzZUVy
cm9yKAotICAgICAgIjE6MTg6IEV4cGVjdGVkIHN0cmluZy4iLAotICAgICAgIm9wdGlvbmFsX3N0
cmluZzogMTIzIik7Ci0gICAgYXNzZXJ0UGFyc2VFcnJvcigKLSAgICAgICIxOjE4OiBTdHJpbmcg
bWlzc2luZyBlbmRpbmcgcXVvdGUuIiwKLSAgICAgICJvcHRpb25hbF9zdHJpbmc6IFwidWVvYXVh
b2UiKTsKLSAgICBhc3NlcnRQYXJzZUVycm9yKAotICAgICAgIjE6MTg6IFN0cmluZyBtaXNzaW5n
IGVuZGluZyBxdW90ZS4iLAotICAgICAgIm9wdGlvbmFsX3N0cmluZzogXCJ1ZW9hdWFvZVxuIiAr
Ci0gICAgICAib3B0aW9uYWxfaW50MzI6IDEyMyIpOwotICAgIGFzc2VydFBhcnNlRXJyb3IoCi0g
ICAgICAiMToxODogSW52YWxpZCBlc2NhcGUgc2VxdWVuY2U6ICdcXHonIiwKLSAgICAgICJvcHRp
b25hbF9zdHJpbmc6IFwiXFx6XCIiKTsKLSAgICBhc3NlcnRQYXJzZUVycm9yKAotICAgICAgIjE6
MTg6IFN0cmluZyBtaXNzaW5nIGVuZGluZyBxdW90ZS4iLAotICAgICAgIm9wdGlvbmFsX3N0cmlu
ZzogXCJ1ZW9hdWFvZVxuIiArCi0gICAgICAib3B0aW9uYWxfaW50MzI6IDEyMyIpOwotICAgIGFz
c2VydFBhcnNlRXJyb3IoCi0gICAgICAiMToyOiBFeHRlbnNpb24gXCJub3N1Y2hleHRcIiBub3Qg
Zm91bmQgaW4gdGhlIEV4dGVuc2lvblJlZ2lzdHJ5LiIsCi0gICAgICAiW25vc3VjaGV4dF06IDEy
MyIpOwotICAgIGFzc2VydFBhcnNlRXJyb3IoCi0gICAgICAiMToyMDogRXh0ZW5zaW9uIFwicHJv
dG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uXCIgZG9lcyAiICsKLSAgICAg
ICAgIm5vdCBleHRlbmQgbWVzc2FnZSB0eXBlIFwicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5
cGVzXCIuIiwKLSAgICAgICJbcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfaW50MzJfZXh0ZW5z
aW9uXTogMTIzIik7Ci0gICAgYXNzZXJ0UGFyc2VFcnJvcigKLSAgICAgICIxOjE6IE1lc3NhZ2Ug
dHlwZSBcInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlc1wiIGhhcyBubyBmaWVsZCAiICsK
LSAgICAgICAgIm5hbWVkIFwibm9zdWNoZmllbGRcIi4iLAotICAgICAgIm5vc3VjaGZpZWxkOiAx
MjMiKTsKLSAgICBhc3NlcnRQYXJzZUVycm9yKAotICAgICAgIjE6MjE6IEV4cGVjdGVkIFwiPlwi
LiIsCi0gICAgICAiT3B0aW9uYWxHcm91cCA8IGE6IDEiKTsKLSAgICBhc3NlcnRQYXJzZUVycm9y
KAotICAgICAgIjE6MjM6IEVudW0gdHlwZSBcInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBl
cy5OZXN0ZWRFbnVtXCIgaGFzIG5vICIgKwotICAgICAgICAidmFsdWUgbmFtZWQgXCJOT19TVUNI
X1ZBTFVFXCIuIiwKLSAgICAgICJvcHRpb25hbF9uZXN0ZWRfZW51bTogTk9fU1VDSF9WQUxVRSIp
OwotICAgIGFzc2VydFBhcnNlRXJyb3IoCi0gICAgICAiMToyMzogRW51bSB0eXBlIFwicHJvdG9i
dWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW1cIiBoYXMgbm8gIiArCi0gICAgICAg
ICJ2YWx1ZSB3aXRoIG51bWJlciAxMjMuIiwKLSAgICAgICJvcHRpb25hbF9uZXN0ZWRfZW51bTog
MTIzIik7Ci0KLSAgICAvLyBEZWxpbWl0ZXJzIG11c3QgbWF0Y2guCi0gICAgYXNzZXJ0UGFyc2VF
cnJvcigKLSAgICAgICIxOjIyOiBFeHBlY3RlZCBpZGVudGlmaWVyLiBGb3VuZCAnfSciLAotICAg
ICAgIk9wdGlvbmFsR3JvdXAgPCBhOiAxIH0iKTsKLSAgICBhc3NlcnRQYXJzZUVycm9yKAotICAg
ICAgIjE6MjI6IEV4cGVjdGVkIGlkZW50aWZpZXIuIEZvdW5kICc+JyIsCi0gICAgICAiT3B0aW9u
YWxHcm91cCB7IGE6IDEgPiIpOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0RXNjYXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gRXNjYXBlIHNlcXVlbmNl
cy4KLSAgICBhc3NlcnRFcXVhbHMoIlxcMDAwXFwwMDFcXGFcXGJcXGZcXG5cXHJcXHRcXHZcXFxc
XFwnXFxcIlxcMTc3IiwKLSAgICAgIFRleHRGb3JtYXQuZXNjYXBlQnl0ZXMoYnl0ZXMoIlwwXDAw
MVwwMDdcYlxmXG5cclx0XDAxM1xcXCdcIlwxNzciKSkpOwotICAgIGFzc2VydEVxdWFscygiXFww
MDBcXDAwMVxcYVxcYlxcZlxcblxcclxcdFxcdlxcXFxcXCdcXFwiXFwxNzciLAotICAgICAgVGV4
dEZvcm1hdC5lc2NhcGVUZXh0KCJcMFwwMDFcMDA3XGJcZlxuXHJcdFwwMTNcXFwnXCJcMTc3Iikp
OwotICAgIGFzc2VydEVxdWFscyhieXRlcygiXDBcMDAxXDAwN1xiXGZcblxyXHRcMDEzXFxcJ1wi
IiksCi0gICAgICBUZXh0Rm9ybWF0LnVuZXNjYXBlQnl0ZXMoIlxcMDAwXFwwMDFcXGFcXGJcXGZc
XG5cXHJcXHRcXHZcXFxcXFwnXFxcIiIpKTsKLSAgICBhc3NlcnRFcXVhbHMoIlwwXDAwMVwwMDdc
YlxmXG5cclx0XDAxM1xcXCdcIiIsCi0gICAgICBUZXh0Rm9ybWF0LnVuZXNjYXBlVGV4dCgiXFww
MDBcXDAwMVxcYVxcYlxcZlxcblxcclxcdFxcdlxcXFxcXCdcXFwiIikpOwotICAgIGFzc2VydEVx
dWFscyhrRXNjYXBlVGVzdFN0cmluZ0VzY2FwZWQsCi0gICAgICBUZXh0Rm9ybWF0LmVzY2FwZVRl
eHQoa0VzY2FwZVRlc3RTdHJpbmcpKTsKLSAgICBhc3NlcnRFcXVhbHMoa0VzY2FwZVRlc3RTdHJp
bmcsCi0gICAgICBUZXh0Rm9ybWF0LnVuZXNjYXBlVGV4dChrRXNjYXBlVGVzdFN0cmluZ0VzY2Fw
ZWQpKTsKLQotICAgIC8vIEludmFyaWFudAotICAgIGFzc2VydEVxdWFscygiaGVsbG8iLAotICAg
ICAgICBUZXh0Rm9ybWF0LmVzY2FwZUJ5dGVzKGJ5dGVzKCJoZWxsbyIpKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCJoZWxsbyIsCi0gICAgICAgIFRleHRGb3JtYXQuZXNjYXBlVGV4dCgiaGVsbG8iKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKGJ5dGVzKCJoZWxsbyIpLAotICAgICAgICBUZXh0Rm9ybWF0LnVu
ZXNjYXBlQnl0ZXMoImhlbGxvIikpOwotICAgIGFzc2VydEVxdWFscygiaGVsbG8iLAotICAgICAg
ICBUZXh0Rm9ybWF0LnVuZXNjYXBlVGV4dCgiaGVsbG8iKSk7Ci0KLSAgICAvLyBVbmljb2RlIGhh
bmRsaW5nLgotICAgIGFzc2VydEVxdWFscygiXFwzNDFcXDIxMFxcMjY0IiwgVGV4dEZvcm1hdC5l
c2NhcGVUZXh0KCJcdTEyMzQiKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJcXDM0MVxcMjEwXFwyNjQi
LAotICAgICAgICAgICAgICAgICBUZXh0Rm9ybWF0LmVzY2FwZUJ5dGVzKGJ5dGVzKDB4ZTEsIDB4
ODgsIDB4YjQpKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJcdTEyMzQiLCBUZXh0Rm9ybWF0LnVuZXNj
YXBlVGV4dCgiXFwzNDFcXDIxMFxcMjY0IikpOwotICAgIGFzc2VydEVxdWFscyhieXRlcygweGUx
LCAweDg4LCAweGI0KSwKLSAgICAgICAgICAgICAgICAgVGV4dEZvcm1hdC51bmVzY2FwZUJ5dGVz
KCJcXDM0MVxcMjEwXFwyNjQiKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJcdTEyMzQiLCBUZXh0Rm9y
bWF0LnVuZXNjYXBlVGV4dCgiXFx4ZTFcXHg4OFxceGI0IikpOwotICAgIGFzc2VydEVxdWFscyhi
eXRlcygweGUxLCAweDg4LCAweGI0KSwKLSAgICAgICAgICAgICAgICAgVGV4dEZvcm1hdC51bmVz
Y2FwZUJ5dGVzKCJcXHhlMVxceDg4XFx4YjQiKSk7Ci0KLSAgICAvLyBIYW5kbGluZyBvZiBzdHJp
bmdzIHdpdGggdW5lc2NhcGVkIFVuaWNvZGUgY2hhcmFjdGVycyA+IDI1NS4KLSAgICBmaW5hbCBT
dHJpbmcgemggPSAiXHU5OTk5XHU2ZTJmXHU0ZTBhXHU2ZDc3XHVkODRmXHVkZjgwXHU4YzUwXHU5
MjgwXHU4ODRjIjsKLSAgICBCeXRlU3RyaW5nIHpoQnl0ZVN0cmluZyA9IEJ5dGVTdHJpbmcuY29w
eUZyb21VdGY4KHpoKTsKLSAgICBhc3NlcnRFcXVhbHMoemhCeXRlU3RyaW5nLCBUZXh0Rm9ybWF0
LnVuZXNjYXBlQnl0ZXMoemgpKTsKLQotICAgIC8vIEVycm9ycy4KLSAgICB0cnkgewotICAgICAg
VGV4dEZvcm1hdC51bmVzY2FwZVRleHQoIlxceCIpOwotICAgICAgZmFpbCgiU2hvdWxkIGhhdmUg
dGhyb3duIGFuIGV4Y2VwdGlvbi4iKTsKLSAgICB9IGNhdGNoIChUZXh0Rm9ybWF0LkludmFsaWRF
c2NhcGVTZXF1ZW5jZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBzdWNjZXNzCi0gICAgfQotCi0g
ICAgdHJ5IHsKLSAgICAgIFRleHRGb3JtYXQudW5lc2NhcGVUZXh0KCJcXHoiKTsKLSAgICAgIGZh
aWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaCAoVGV4
dEZvcm1hdC5JbnZhbGlkRXNjYXBlU2VxdWVuY2VFeGNlcHRpb24gZSkgewotICAgICAgLy8gc3Vj
Y2VzcwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBUZXh0Rm9ybWF0LnVuZXNjYXBlVGV4dCgi
XFwiKTsKLSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uIik7Ci0g
ICAgfSBjYXRjaCAoVGV4dEZvcm1hdC5JbnZhbGlkRXNjYXBlU2VxdWVuY2VFeGNlcHRpb24gZSkg
ewotICAgICAgLy8gc3VjY2VzcwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJz
ZUludGVnZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRFcXVhbHMoICAgICAgICAg
IDAsIFRleHRGb3JtYXQucGFyc2VJbnQzMiggICAgICAgICAgIjAiKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKCAgICAgICAgICAxLCBUZXh0Rm9ybWF0LnBhcnNlSW50MzIoICAgICAgICAgICIxIikpOwot
ICAgIGFzc2VydEVxdWFscyggICAgICAgICAtMSwgVGV4dEZvcm1hdC5wYXJzZUludDMyKCAgICAg
ICAgICItMSIpKTsKLSAgICBhc3NlcnRFcXVhbHMoICAgICAgMTIzNDUsIFRleHRGb3JtYXQucGFy
c2VJbnQzMiggICAgICAiMTIzNDUiKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCAgICAgLTEyMzQ1LCBU
ZXh0Rm9ybWF0LnBhcnNlSW50MzIoICAgICAiLTEyMzQ1IikpOwotICAgIGFzc2VydEVxdWFscygg
MjE0NzQ4MzY0NywgVGV4dEZvcm1hdC5wYXJzZUludDMyKCAiMjE0NzQ4MzY0NyIpKTsKLSAgICBh
c3NlcnRFcXVhbHMoLTIxNDc0ODM2NDgsIFRleHRGb3JtYXQucGFyc2VJbnQzMigiLTIxNDc0ODM2
NDgiKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoICAgICAgICAgICAgICAgIDAsIFRleHRGb3JtYXQu
cGFyc2VVSW50MzIoICAgICAgICAgIjAiKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCAgICAgICAgICAg
ICAgICAxLCBUZXh0Rm9ybWF0LnBhcnNlVUludDMyKCAgICAgICAgICIxIikpOwotICAgIGFzc2Vy
dEVxdWFscyggICAgICAgICAgICAxMjM0NSwgVGV4dEZvcm1hdC5wYXJzZVVJbnQzMiggICAgICIx
MjM0NSIpKTsKLSAgICBhc3NlcnRFcXVhbHMoICAgICAgIDIxNDc0ODM2NDcsIFRleHRGb3JtYXQu
cGFyc2VVSW50MzIoIjIxNDc0ODM2NDciKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKChpbnQpIDIxNDc0
ODM2NDhMLCBUZXh0Rm9ybWF0LnBhcnNlVUludDMyKCIyMTQ3NDgzNjQ4IikpOwotICAgIGFzc2Vy
dEVxdWFscygoaW50KSA0Mjk0OTY3Mjk1TCwgVGV4dEZvcm1hdC5wYXJzZVVJbnQzMigiNDI5NDk2
NzI5NSIpKTsKLQotICAgIGFzc2VydEVxdWFscyggICAgICAgICAgMEwsIFRleHRGb3JtYXQucGFy
c2VJbnQ2NCggICAgICAgICAgIjAiKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCAgICAgICAgICAxTCwg
VGV4dEZvcm1hdC5wYXJzZUludDY0KCAgICAgICAgICAiMSIpKTsKLSAgICBhc3NlcnRFcXVhbHMo
ICAgICAgICAgLTFMLCBUZXh0Rm9ybWF0LnBhcnNlSW50NjQoICAgICAgICAgIi0xIikpOwotICAg
IGFzc2VydEVxdWFscyggICAgICAxMjM0NUwsIFRleHRGb3JtYXQucGFyc2VJbnQ2NCggICAgICAi
MTIzNDUiKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCAgICAgLTEyMzQ1TCwgVGV4dEZvcm1hdC5wYXJz
ZUludDY0KCAgICAgIi0xMjM0NSIpKTsKLSAgICBhc3NlcnRFcXVhbHMoIDIxNDc0ODM2NDdMLCBU
ZXh0Rm9ybWF0LnBhcnNlSW50NjQoICIyMTQ3NDgzNjQ3IikpOwotICAgIGFzc2VydEVxdWFscygt
MjE0NzQ4MzY0OEwsIFRleHRGb3JtYXQucGFyc2VJbnQ2NCgiLTIxNDc0ODM2NDgiKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKCA0Mjk0OTY3Mjk1TCwgVGV4dEZvcm1hdC5wYXJzZUludDY0KCAiNDI5NDk2
NzI5NSIpKTsKLSAgICBhc3NlcnRFcXVhbHMoIDQyOTQ5NjcyOTZMLCBUZXh0Rm9ybWF0LnBhcnNl
SW50NjQoICI0Mjk0OTY3Mjk2IikpOwotICAgIGFzc2VydEVxdWFscyg5MjIzMzcyMDM2ODU0Nzc1
ODA3TCwKLSAgICAgICAgICAgICAgICAgVGV4dEZvcm1hdC5wYXJzZUludDY0KCI5MjIzMzcyMDM2
ODU0Nzc1ODA3IikpOwotICAgIGFzc2VydEVxdWFscygtOTIyMzM3MjAzNjg1NDc3NTgwOEwsCi0g
ICAgICAgICAgICAgICAgIFRleHRGb3JtYXQucGFyc2VJbnQ2NCgiLTkyMjMzNzIwMzY4NTQ3NzU4
MDgiKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoICAgICAgICAgIDBMLCBUZXh0Rm9ybWF0LnBhcnNl
VUludDY0KCAgICAgICAgICAiMCIpKTsKLSAgICBhc3NlcnRFcXVhbHMoICAgICAgICAgIDFMLCBU
ZXh0Rm9ybWF0LnBhcnNlVUludDY0KCAgICAgICAgICAiMSIpKTsKLSAgICBhc3NlcnRFcXVhbHMo
ICAgICAgMTIzNDVMLCBUZXh0Rm9ybWF0LnBhcnNlVUludDY0KCAgICAgICIxMjM0NSIpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoIDIxNDc0ODM2NDdMLCBUZXh0Rm9ybWF0LnBhcnNlVUludDY0KCAiMjE0
NzQ4MzY0NyIpKTsKLSAgICBhc3NlcnRFcXVhbHMoIDQyOTQ5NjcyOTVMLCBUZXh0Rm9ybWF0LnBh
cnNlVUludDY0KCAiNDI5NDk2NzI5NSIpKTsKLSAgICBhc3NlcnRFcXVhbHMoIDQyOTQ5NjcyOTZM
LCBUZXh0Rm9ybWF0LnBhcnNlVUludDY0KCAiNDI5NDk2NzI5NiIpKTsKLSAgICBhc3NlcnRFcXVh
bHMoOTIyMzM3MjAzNjg1NDc3NTgwN0wsCi0gICAgICAgICAgICAgICAgIFRleHRGb3JtYXQucGFy
c2VVSW50NjQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKC05MjIz
MzcyMDM2ODU0Nzc1ODA4TCwKLSAgICAgICAgICAgICAgICAgVGV4dEZvcm1hdC5wYXJzZVVJbnQ2
NCgiOTIyMzM3MjAzNjg1NDc3NTgwOCIpKTsKLSAgICBhc3NlcnRFcXVhbHMoLTFMLCBUZXh0Rm9y
bWF0LnBhcnNlVUludDY0KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpKTsKLQotICAgIC8vIEhleAot
ICAgIGFzc2VydEVxdWFscygweDEyMzRhYmNkLCBUZXh0Rm9ybWF0LnBhcnNlSW50MzIoIjB4MTIz
NGFiY2QiKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKC0weDEyMzRhYmNkLCBUZXh0Rm9ybWF0LnBhcnNl
SW50MzIoIi0weDEyMzRhYmNkIikpOwotICAgIGFzc2VydEVxdWFscygtMSwgVGV4dEZvcm1hdC5w
YXJzZVVJbnQ2NCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpOwotICAgIGFzc2VydEVxdWFscygweDdm
ZmZmZmZmZmZmZmZmZmZMLAotICAgICAgICAgICAgICAgICBUZXh0Rm9ybWF0LnBhcnNlSW50NjQo
IjB4N2ZmZmZmZmZmZmZmZmZmZiIpKTsKLQotICAgIC8vIE9jdGFsCi0gICAgYXNzZXJ0RXF1YWxz
KDAxMjM0NTY3LCBUZXh0Rm9ybWF0LnBhcnNlSW50MzIoIjAxMjM0NTY3IikpOwotCi0gICAgLy8g
T3V0LW9mLXJhbmdlCi0gICAgdHJ5IHsKLSAgICAgIFRleHRGb3JtYXQucGFyc2VJbnQzMigiMjE0
NzQ4MzY0OCIpOwotICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4i
KTsKLSAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgLy8gc3Vj
Y2VzcwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBUZXh0Rm9ybWF0LnBhcnNlSW50MzIoIi0y
MTQ3NDgzNjQ5Iik7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9u
LiIpOwotICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBz
dWNjZXNzCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIFRleHRGb3JtYXQucGFyc2VVSW50MzIo
IjQyOTQ5NjcyOTYiKTsKLSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRp
b24uIik7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8v
IHN1Y2Nlc3MKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgVGV4dEZvcm1hdC5wYXJzZVVJbnQz
MigiLTEiKTsKLSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uIik7
Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIHN1Y2Nl
c3MKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgVGV4dEZvcm1hdC5wYXJzZUludDY0KCI5MjIz
MzcyMDM2ODU0Nzc1ODA4Iik7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhj
ZXB0aW9uLiIpOwotICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBzdWNjZXNzCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIFRleHRGb3JtYXQucGFyc2VJ
bnQ2NCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDkiKTsKLSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRo
cm93biBhbiBleGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9u
IGUpIHsKLSAgICAgIC8vIHN1Y2Nlc3MKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgVGV4dEZv
cm1hdC5wYXJzZVVJbnQ2NCgiMTg0NDY3NDQwNzM3MDk1NTE2MTYiKTsKLSAgICAgIGZhaWwoIlNo
b3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9y
bWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIHN1Y2Nlc3MKLSAgICB9Ci0KLSAgICB0cnkgewot
ICAgICAgVGV4dEZvcm1hdC5wYXJzZVVJbnQ2NCgiLTEiKTsKLSAgICAgIGZhaWwoIlNob3VsZCBo
YXZlIHRocm93biBhbiBleGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhj
ZXB0aW9uIGUpIHsKLSAgICAgIC8vIHN1Y2Nlc3MKLSAgICB9Ci0KLSAgICAvLyBOb3QgYSBudW1i
ZXIuCi0gICAgdHJ5IHsKLSAgICAgIFRleHRGb3JtYXQucGFyc2VJbnQzMigiYWJjZCIpOwotICAg
ICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4iKTsKLSAgICB9IGNhdGNo
IChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgLy8gc3VjY2VzcwotICAgIH0KLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZVN0cmluZygpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIGZpbmFsIFN0cmluZyB6aCA9ICJcdTk5OTlcdTZlMmZcdTRlMGFcdTZkNzdcdWQ4NGZcdWRm
ODBcdThjNTBcdTkyODBcdTg4NGMiOwotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIg
PSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIFRleHRGb3JtYXQubWVyZ2UoIm9wdGlv
bmFsX3N0cmluZzogXCIiICsgemggKyAiXCIiLCBidWlsZGVyKTsKLSAgICBhc3NlcnRFcXVhbHMo
emgsIGJ1aWxkZXIuZ2V0T3B0aW9uYWxTdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0UGFyc2VMb25nU3RyaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIGxvbmdU
ZXh0ID0KLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAg
ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAg
ICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsK
LSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAi
ICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiICsKLSAgICAgICIx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAiICsKLSAgICAgICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAiOwotCi0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9
IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgVGV4dEZvcm1hdC5tZXJnZSgib3B0aW9u
YWxfc3RyaW5nOiBcIiIgKyBsb25nVGV4dCArICJcIiIsIGJ1aWxkZXIpOwotICAgIGFzc2VydEVx
dWFscyhsb25nVGV4dCwgYnVpbGRlci5nZXRPcHRpb25hbFN0cmluZygpKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RQYXJzZUJvb2xlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBTdHJp
bmcgZ29vZFRleHQgPQotICAgICAgICAicmVwZWF0ZWRfYm9vbDogdCAgcmVwZWF0ZWRfYm9vbCA6
IDBcbiIgKwotICAgICAgICAicmVwZWF0ZWRfYm9vbCA6ZiByZXBlYXRlZF9ib29sOjFcbiIgKwot
ICAgICAgICAicmVwZWF0ZWRfYm9vbDogRmFsc2UgcmVwZWF0ZWRfYm9vbDogVHJ1ZSI7Ci0gICAg
U3RyaW5nIGdvb2RUZXh0Q2Fub25pY2FsID0KLSAgICAgICAgInJlcGVhdGVkX2Jvb2w6IHRydWVc
biIgKwotICAgICAgICAicmVwZWF0ZWRfYm9vbDogZmFsc2VcbiIgKwotICAgICAgICAicmVwZWF0
ZWRfYm9vbDogZmFsc2VcbiIgKwotICAgICAgICAicmVwZWF0ZWRfYm9vbDogdHJ1ZVxuIiArCi0g
ICAgICAgICJyZXBlYXRlZF9ib29sOiBmYWxzZVxuIiArCi0gICAgICAgICJyZXBlYXRlZF9ib29s
OiB0cnVlXG4iOwotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlw
ZXMubmV3QnVpbGRlcigpOwotICAgIFRleHRGb3JtYXQubWVyZ2UoZ29vZFRleHQsIGJ1aWxkZXIp
OwotICAgIGFzc2VydEVxdWFscyhnb29kVGV4dENhbm9uaWNhbCwgYnVpbGRlci5idWlsZCgpLnRv
U3RyaW5nKCkpOwotCi0gICAgdHJ5IHsKLSAgICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJhZEJ1
aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgICAgVGV4dEZvcm1hdC5tZXJn
ZSgib3B0aW9uYWxfYm9vbDoyIiwgYmFkQnVpbGRlcik7Ci0gICAgICBmYWlsKCJTaG91bGQgaGF2
ZSB0aHJvd24gYW4gZXhjZXB0aW9uLiIpOwotICAgIH0gY2F0Y2ggKFRleHRGb3JtYXQuUGFyc2VF
eGNlcHRpb24gZSkgewotICAgICAgLy8gc3VjY2VzcwotICAgIH0KLSAgICB0cnkgewotICAgICAg
VGVzdEFsbFR5cGVzLkJ1aWxkZXIgYmFkQnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVy
KCk7Ci0gICAgICBUZXh0Rm9ybWF0Lm1lcmdlKCJvcHRpb25hbF9ib29sOiBmb28iLCBiYWRCdWls
ZGVyKTsKLSAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uIik7Ci0g
ICAgfSBjYXRjaCAoVGV4dEZvcm1hdC5QYXJzZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBzdWNj
ZXNzCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlQWRqYWNlbnRTdHJpbmdM
aXRlcmFscygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1
aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIFRleHRGb3JtYXQubWVyZ2Uo
Im9wdGlvbmFsX3N0cmluZzogXCJmb29cIiAnY29yZ2UnIFwiZ3JhdWx0XCIiLCBidWlsZGVyKTsK
LSAgICBhc3NlcnRFcXVhbHMoImZvb2NvcmdlZ3JhdWx0IiwgYnVpbGRlci5nZXRPcHRpb25hbFN0
cmluZygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQcmludEZpZWxkVmFsdWUoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRQcmludEZpZWxkVmFsdWUoIlwiSGVsbG9cIiIsICJI
ZWxsbyIsICJyZXBlYXRlZF9zdHJpbmciKTsKLSAgICBhc3NlcnRQcmludEZpZWxkVmFsdWUoIjEy
My4wIiwgIDEyM2YsICJyZXBlYXRlZF9mbG9hdCIpOwotICAgIGFzc2VydFByaW50RmllbGRWYWx1
ZSgiMTIzLjAiLCAgMTIzZCwgInJlcGVhdGVkX2RvdWJsZSIpOwotICAgIGFzc2VydFByaW50Rmll
bGRWYWx1ZSgiMTIzIiwgIDEyMywgInJlcGVhdGVkX2ludDMyIik7Ci0gICAgYXNzZXJ0UHJpbnRG
aWVsZFZhbHVlKCIxMjMiLCAgMTIzTCwgInJlcGVhdGVkX2ludDY0Iik7Ci0gICAgYXNzZXJ0UHJp
bnRGaWVsZFZhbHVlKCJ0cnVlIiwgIHRydWUsICJyZXBlYXRlZF9ib29sIik7Ci0gICAgYXNzZXJ0
UHJpbnRGaWVsZFZhbHVlKCI0Mjk0OTY3Mjk1IiwgMHhGRkZGRkZGRiwgInJlcGVhdGVkX3VpbnQz
MiIpOwotICAgIGFzc2VydFByaW50RmllbGRWYWx1ZSgiMTg0NDY3NDQwNzM3MDk1NTE2MTUiLCAg
MHhGRkZGRkZGRkZGRkZGRkZGTCwKLSAgICAgICAgInJlcGVhdGVkX3VpbnQ2NCIpOwotICAgIGFz
c2VydFByaW50RmllbGRWYWx1ZSgiXCJcXDAwMVxcMDAyXFwwMDNcIiIsCi0gICAgICAgIEJ5dGVT
dHJpbmcuY29weUZyb20obmV3IGJ5dGVbXSB7MSwgMiwgM30pLCAicmVwZWF0ZWRfYnl0ZXMiKTsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBhc3NlcnRQcmludEZpZWxkVmFsdWUoU3RyaW5nIGV4cGVj
dCwgT2JqZWN0IHZhbHVlLAotICAgICAgU3RyaW5nIGZpZWxkTmFtZSkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgVGV4
dEZvcm1hdC5wcmludEZpZWxkVmFsdWUoCi0gICAgICAgIFRlc3RBbGxUeXBlcy5nZXREZXNjcmlw
dG9yKCkuZmluZEZpZWxkQnlOYW1lKGZpZWxkTmFtZSksCi0gICAgICAgIHZhbHVlLCBzYik7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGV4cGVjdCwgc2IudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0U2hvcnREZWJ1Z1N0cmluZygpIHsKLSAgICBhc3NlcnRFcXVhbHMoIm9wdGlvbmFs
X25lc3RlZF9tZXNzYWdlIHsgYmI6IDQyIH0gcmVwZWF0ZWRfaW50MzI6IDEiCi0gICAgICAgICsg
IiByZXBlYXRlZF91aW50MzI6IDIiLAotICAgICAgICBUZXh0Rm9ybWF0LnNob3J0RGVidWdTdHJp
bmcoVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLmFkZFJlcGVhdGVkSW50
MzIoMSkKLSAgICAgICAgICAgIC5hZGRSZXBlYXRlZFVpbnQzMigyKQotICAgICAgICAgICAgLnNl
dE9wdGlvbmFsTmVzdGVkTWVzc2FnZSgKLSAgICAgICAgICAgICAgICBOZXN0ZWRNZXNzYWdlLm5l
d0J1aWxkZXIoKS5zZXRCYig0MikuYnVpbGQoKSkKLSAgICAgICAgICAgIC5idWlsZCgpKSk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2hvcnREZWJ1Z1N0cmluZ19maWVsZCgpIHsKLSAgICBm
aW5hbCBGaWVsZERlc2NyaXB0b3IgZGF0YUZpZWxkID0KLSAgICAgIE9uZVN0cmluZy5nZXREZXNj
cmlwdG9yKCkuZmluZEZpZWxkQnlOYW1lKCJkYXRhIik7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAg
ICAgImRhdGE6IFwidGVzdCBkYXRhXCIiLAotICAgICAgVGV4dEZvcm1hdC5zaG9ydERlYnVnU3Ry
aW5nKGRhdGFGaWVsZCwgInRlc3QgZGF0YSIpKTsKLQotICAgIGZpbmFsIEZpZWxkRGVzY3JpcHRv
ciBvcHRpb25hbEZpZWxkID0KLSAgICAgIFRlc3RBbGxUeXBlcy5nZXREZXNjcmlwdG9yKCkuZmlu
ZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSIpOwotICAgIGZpbmFsIE9iamVj
dCB2YWx1ZSA9IE5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDQyKS5idWlsZCgpOwot
Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIHsgYmI6
IDQyIH0iLAotICAgICAgVGV4dEZvcm1hdC5zaG9ydERlYnVnU3RyaW5nKG9wdGlvbmFsRmllbGQs
IHZhbHVlKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2hvcnREZWJ1Z1N0cmluZ191bmtu
b3duKCkgewotICAgIGFzc2VydEVxdWFscygiNTogMSA1OiAweDAwMDAwMDAyIDU6IDB4MDAwMDAw
MDAwMDAwMDAwMyA1OiBcIjRcIiA1IHsgMTA6IDUgfSIKLSAgICAgICAgKyAiIDg6IDEgODogMiA4
OiAzIDE1OiAxMjM3OTgxMzgxMjE3Nzg5MzUyMCAxNTogMHhhYmNkMTIzNCAxNToiCi0gICAgICAg
ICsgIiAweGFiY2RlZjEyMzQ1Njc4OTAiLAotICAgICAgICBUZXh0Rm9ybWF0LnNob3J0RGVidWdT
dHJpbmcobWFrZVVua25vd25GaWVsZFNldCgpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
UHJpbnRUb1VuaWNvZGVTdHJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRFcXVh
bHMoCi0gICAgICAgICJvcHRpb25hbF9zdHJpbmc6IFwiYWJjXHUzMDQyZWZnXCJcbiIgKwotICAg
ICAgICAib3B0aW9uYWxfYnl0ZXM6IFwiXFwzNDNcXDIwMVxcMjAyXCJcbiIgKwotICAgICAgICAi
cmVwZWF0ZWRfc3RyaW5nOiBcIlx1MzA5M1hZWlwiXG4iLAotICAgICAgICBUZXh0Rm9ybWF0LnBy
aW50VG9Vbmljb2RlU3RyaW5nKFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAg
IC5zZXRPcHRpb25hbFN0cmluZygiYWJjXHUzMDQyZWZnIikKLSAgICAgICAgICAgIC5zZXRPcHRp
b25hbEJ5dGVzKGJ5dGVzKDB4ZTMsIDB4ODEsIDB4ODIpKQotICAgICAgICAgICAgLmFkZFJlcGVh
dGVkU3RyaW5nKCJcdTMwOTNYWVoiKQotICAgICAgICAgICAgLmJ1aWxkKCkpKTsKLQotICAgIC8v
IERvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIHNob3VsZCBiZSBlc2NhcGVkCi0gICAgYXNz
ZXJ0RXF1YWxzKAotICAgICAgICAib3B0aW9uYWxfc3RyaW5nOiBcImFcXFxcYmNcXFwiZWZcXFwi
Z1wiXG4iLAotICAgICAgICBUZXh0Rm9ybWF0LnByaW50VG9Vbmljb2RlU3RyaW5nKFRlc3RBbGxU
eXBlcy5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgIC5zZXRPcHRpb25hbFN0cmluZygiYVxcYmNc
ImVmXCJnIikKLSAgICAgICAgICAgIC5idWlsZCgpKSk7Ci0KLSAgICAvLyBUZXN0IGVzY2FwaW5n
IHJvdW5kdHJpcAotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0gVGVzdEFsbFR5cGVzLm5ld0J1
aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9uYWxTdHJpbmcoImFcXGJjXFxcImVmXCJnIikKLSAg
ICAgICAgLmJ1aWxkKCk7Ci0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RB
bGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgVGV4dEZvcm1hdC5tZXJnZShUZXh0Rm9ybWF0LnBy
aW50VG9Vbmljb2RlU3RyaW5nKG1lc3NhZ2UpLCBidWlsZGVyKTsKLSAgICBhc3NlcnRFcXVhbHMo
bWVzc2FnZS5nZXRPcHRpb25hbFN0cmluZygpLCBidWlsZGVyLmdldE9wdGlvbmFsU3RyaW5nKCkp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFByaW50VG9Vbmljb2RlU3RyaW5nV2l0aE5ld2xp
bmVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gTm8gbmV3bGluZXMgYXQgc3RhcnQgYW5k
IGVuZAotICAgIGFzc2VydEVxdWFscygib3B0aW9uYWxfc3RyaW5nOiBcInRlc3QgbmV3bGluZXNc
XG5cXG5pblxcbnN0cmluZ1wiXG4iLAotICAgICAgICBUZXh0Rm9ybWF0LnByaW50VG9Vbmljb2Rl
U3RyaW5nKFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgIC5zZXRPcHRpb25h
bFN0cmluZygidGVzdCBuZXdsaW5lc1xuXG5pblxuc3RyaW5nIikKLSAgICAgICAgICAgIC5idWls
ZCgpKSk7Ci0KLSAgICAvLyBOZXdsaW5lcyBhdCBzdGFydCBhbmQgZW5kCi0gICAgYXNzZXJ0RXF1
YWxzKCJvcHRpb25hbF9zdHJpbmc6IFwiXFxudGVzdFxcbm5ld2xpbmVzXFxuXFxuaW5cXG5zdHJp
bmdcXG5cIlxuIiwKLSAgICAgICAgVGV4dEZvcm1hdC5wcmludFRvVW5pY29kZVN0cmluZyhUZXN0
QWxsVHlwZXMubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0T3B0aW9uYWxTdHJpbmcoIlxu
dGVzdFxubmV3bGluZXNcblxuaW5cbnN0cmluZ1xuIikKLSAgICAgICAgICAgIC5idWlsZCgpKSk7
Ci0KLSAgICAvLyBTdHJpbmdzIHdpdGggMCwgMSBhbmQgMiBuZXdsaW5lcy4KLSAgICBhc3NlcnRF
cXVhbHMoIm9wdGlvbmFsX3N0cmluZzogXCJcIlxuIiwKLSAgICAgICAgVGV4dEZvcm1hdC5wcmlu
dFRvVW5pY29kZVN0cmluZyhUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAu
c2V0T3B0aW9uYWxTdHJpbmcoIiIpCi0gICAgICAgICAgICAuYnVpbGQoKSkpOwotICAgIGFzc2Vy
dEVxdWFscygib3B0aW9uYWxfc3RyaW5nOiBcIlxcblwiXG4iLAotICAgICAgICBUZXh0Rm9ybWF0
LnByaW50VG9Vbmljb2RlU3RyaW5nKFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkKLSAgICAgICAg
ICAgIC5zZXRPcHRpb25hbFN0cmluZygiXG4iKQotICAgICAgICAgICAgLmJ1aWxkKCkpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoIm9wdGlvbmFsX3N0cmluZzogXCJcXG5cXG5cIlxuIiwKLSAgICAgICAg
VGV4dEZvcm1hdC5wcmludFRvVW5pY29kZVN0cmluZyhUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigp
Ci0gICAgICAgICAgICAuc2V0T3B0aW9uYWxTdHJpbmcoIlxuXG4iKQotICAgICAgICAgICAgLmJ1
aWxkKCkpKTsKLQotICAgIC8vIFRlc3QgZXNjYXBpbmcgcm91bmR0cmlwCi0gICAgVGVzdEFsbFR5
cGVzIG1lc3NhZ2UgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRPcHRp
b25hbFN0cmluZygiXG50ZXN0XG5uZXdsaW5lc1xuXG5pblxuc3RyaW5nXG4iKQotICAgICAgICAu
YnVpbGQoKTsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVz
Lm5ld0J1aWxkZXIoKTsKLSAgICBUZXh0Rm9ybWF0Lm1lcmdlKFRleHRGb3JtYXQucHJpbnRUb1Vu
aWNvZGVTdHJpbmcobWVzc2FnZSksIGJ1aWxkZXIpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdl
LmdldE9wdGlvbmFsU3RyaW5nKCksIGJ1aWxkZXIuZ2V0T3B0aW9uYWxTdHJpbmcoKSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0UHJpbnRUb1VuaWNvZGVTdHJpbmdfdW5rbm93bigpIHsKLSAg
ICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICIxOiBcIlxcMzQzXFwyMDFcXDIwMlwiXG4iLAotICAg
ICAgICBUZXh0Rm9ybWF0LnByaW50VG9Vbmljb2RlU3RyaW5nKFVua25vd25GaWVsZFNldC5uZXdC
dWlsZGVyKCkKLSAgICAgICAgICAgIC5hZGRGaWVsZCgxLAotICAgICAgICAgICAgICAgIFVua25v
d25GaWVsZFNldC5GaWVsZC5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgICAgICAuYWRkTGVuZ3Ro
RGVsaW1pdGVkKGJ5dGVzKDB4ZTMsIDB4ODEsIDB4ODIpKS5idWlsZCgpKQotICAgICAgICAgICAg
LmJ1aWxkKCkpKTsKLSAgfQotCi0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlTm9uUmVwZWF0ZWRG
aWVsZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRQYXJzZVN1Y2Nlc3NXaXRoT3Zl
cndyaXRlRm9yYmlkZGVuKAotICAgICAgICAicmVwZWF0ZWRfaW50MzI6IDFcbiIgKwotICAgICAg
ICAicmVwZWF0ZWRfaW50MzI6IDJcbiIpOwotICAgIGFzc2VydFBhcnNlU3VjY2Vzc1dpdGhPdmVy
d3JpdGVGb3JiaWRkZW4oCi0gICAgICAgICJSZXBlYXRlZEdyb3VwIHsgYTogMSB9XG4iICsKLSAg
ICAgICAgIlJlcGVhdGVkR3JvdXAgeyBhOiAyIH1cbiIpOwotICAgIGFzc2VydFBhcnNlU3VjY2Vz
c1dpdGhPdmVyd3JpdGVGb3JiaWRkZW4oCi0gICAgICAgICJyZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZSB7IGJiOiAxIH1cbiIgKwotICAgICAgICAicmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgeyBiYjog
MiB9XG4iKTsKLSAgICBhc3NlcnRQYXJzZUVycm9yV2l0aE92ZXJ3cml0ZUZvcmJpZGRlbigKLSAg
ICAgICAgIjM6MTc6IE5vbi1yZXBlYXRlZCBmaWVsZCAiICsKLSAgICAgICAgIlwicHJvdG9idWZf
dW5pdHRlc3QuVGVzdEFsbFR5cGVzLm9wdGlvbmFsX2ludDMyXCIgIiArCi0gICAgICAgICJjYW5u
b3QgYmUgb3ZlcndyaXR0ZW4uIiwKLSAgICAgICAgIm9wdGlvbmFsX2ludDMyOiAxXG4iICsKLSAg
ICAgICAgIm9wdGlvbmFsX2Jvb2w6IHRydWVcbiIgKwotICAgICAgICAib3B0aW9uYWxfaW50MzI6
IDFcbiIpOwotICAgIGFzc2VydFBhcnNlRXJyb3JXaXRoT3ZlcndyaXRlRm9yYmlkZGVuKAotICAg
ICAgICAiMjoxNzogTm9uLXJlcGVhdGVkIGZpZWxkICIgKwotICAgICAgICAiXCJwcm90b2J1Zl91
bml0dGVzdC5UZXN0QWxsVHlwZXMub3B0aW9uYWxncm91cFwiICIgKwotICAgICAgICAiY2Fubm90
IGJlIG92ZXJ3cml0dGVuLiIsCi0gICAgICAgICJPcHRpb25hbEdyb3VwIHsgYTogMSB9XG4iICsK
LSAgICAgICAgIk9wdGlvbmFsR3JvdXAgeyB9XG4iKTsKLSAgICBhc3NlcnRQYXJzZUVycm9yV2l0
aE92ZXJ3cml0ZUZvcmJpZGRlbigKLSAgICAgICAgIjI6MzM6IE5vbi1yZXBlYXRlZCBmaWVsZCAi
ICsKLSAgICAgICAgIlwicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLm9wdGlvbmFsX25l
c3RlZF9tZXNzYWdlXCIgIiArCi0gICAgICAgICJjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uIiwKLSAg
ICAgICAgIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIHsgfVxuIiArCi0gICAgICAgICJvcHRpb25h
bF9uZXN0ZWRfbWVzc2FnZSB7IGJiOiAzIH1cbiIpOwotICAgIGFzc2VydFBhcnNlRXJyb3JXaXRo
T3ZlcndyaXRlRm9yYmlkZGVuKAotICAgICAgICAiMjoxNjogTm9uLXJlcGVhdGVkIGZpZWxkICIg
KwotICAgICAgICAiXCJwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuZGVmYXVsdF9pbnQz
MlwiICIgKwotICAgICAgICAiY2Fubm90IGJlIG92ZXJ3cml0dGVuLiIsCi0gICAgICAgICJkZWZh
dWx0X2ludDMyOiA0MVxuIiArICAvLyB0aGUgZGVmYXVsdCB2YWx1ZQotICAgICAgICAiZGVmYXVs
dF9pbnQzMjogNDFcbiIpOwotICAgIGFzc2VydFBhcnNlRXJyb3JXaXRoT3ZlcndyaXRlRm9yYmlk
ZGVuKAotICAgICAgICAiMjoxNzogTm9uLXJlcGVhdGVkIGZpZWxkICIgKwotICAgICAgICAiXCJw
cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuZGVmYXVsdF9zdHJpbmdcIiAiICsKLSAgICAg
ICAgImNhbm5vdCBiZSBvdmVyd3JpdHRlbi4iLAotICAgICAgICAiZGVmYXVsdF9zdHJpbmc6IFwi
enhjdlwiXG4iICsKLSAgICAgICAgImRlZmF1bHRfc3RyaW5nOiBcImFzZGZcIlxuIik7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VTaG9ydFJlcGVhdGVkRm9ybU9mUmVwZWF0ZWRGaWVs
ZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRQYXJzZVN1Y2Nlc3NXaXRoT3Zlcndy
aXRlRm9yYmlkZGVuKCJyZXBlYXRlZF9mb3JlaWduX2VudW06IFtGT1JFSUdOX0ZPTywgRk9SRUlH
Tl9CQVJdIik7Ci0gICAgYXNzZXJ0UGFyc2VTdWNjZXNzV2l0aE92ZXJ3cml0ZUZvcmJpZGRlbigi
cmVwZWF0ZWRfaW50MzI6IFsgMSwgMiBdXG4iKTsKLSAgICBhc3NlcnRQYXJzZVN1Y2Nlc3NXaXRo
T3ZlcndyaXRlRm9yYmlkZGVuKCJSZXBlYXRlZEdyb3VwIFt7IGE6IDEgfSx7IGE6IDIgfV1cbiIp
OwotICAgIGFzc2VydFBhcnNlU3VjY2Vzc1dpdGhPdmVyd3JpdGVGb3JiaWRkZW4oInJlcGVhdGVk
X25lc3RlZF9tZXNzYWdlIFt7IGJiOiAxIH0sIHsgYmI6IDIgfV1cbiIpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdFBhcnNlU2hvcnRSZXBlYXRlZEZvcm1PZk5vblJlcGVhdGVkRmllbGRzKCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0UGFyc2VFcnJvcldpdGhPdmVyd3JpdGVGb3Ji
aWRkZW4oCi0gICAgICAgICIxOjE3OiBDb3VsZG4ndCBwYXJzZSBpbnRlZ2VyOiBGb3IgaW5wdXQg
c3RyaW5nOiBcIltcIiIsCi0gICAgICAgICJvcHRpb25hbF9pbnQzMjogWzFdXG4iKTsKLSAgfQot
Ci0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIHRlc3Qgb25lb2YKLQotICBwdWJsaWMgdm9pZCB0
ZXN0T25lb2ZUZXh0Rm9ybWF0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdE9uZW9mMi5C
dWlsZGVyIGJ1aWxkZXIgPSBUZXN0T25lb2YyLm5ld0J1aWxkZXIoKTsKLSAgICBUZXN0VXRpbC5z
ZXRPbmVvZihidWlsZGVyKTsKLSAgICBUZXN0T25lb2YyIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxk
KCk7Ci0gICAgVGVzdE9uZW9mMi5CdWlsZGVyIGRlc3QgPSBUZXN0T25lb2YyLm5ld0J1aWxkZXIo
KTsKLSAgICBUZXh0Rm9ybWF0Lm1lcmdlKFRleHRGb3JtYXQucHJpbnRUb1VuaWNvZGVTdHJpbmco
bWVzc2FnZSksIGRlc3QpOwotICAgIFRlc3RVdGlsLmFzc2VydE9uZW9mU2V0KGRlc3QuYnVpbGQo
KSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T25lb2ZPdmVyd3JpdGVGb3JiaWRkZW4oKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgaW5wdXQgPSAiZm9vX3N0cmluZzogXCJzdHJp
bmd2YWx1ZVwiIGZvb19pbnQ6IDEyMyI7Ci0gICAgVGVzdE9uZW9mMi5CdWlsZGVyIGJ1aWxkZXIg
PSBUZXN0T25lb2YyLm5ld0J1aWxkZXIoKTsKLSAgICB0cnkgewotICAgICAgcGFyc2VyV2l0aE92
ZXJ3cml0ZUZvcmJpZGRlbi5tZXJnZSgKLSAgICAgICAgICBpbnB1dCwgVGVzdFV0aWwuZ2V0RXh0
ZW5zaW9uUmVnaXN0cnkoKSwgYnVpbGRlcik7Ci0gICAgICBmYWlsKCJFeHBlY3RlZCBwYXJzZSBl
eGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaCAoVGV4dEZvcm1hdC5QYXJzZUV4Y2VwdGlvbiBlKSB7
Ci0gICAgICBhc3NlcnRFcXVhbHMoIjE6MzY6IEZpZWxkIFwicHJvdG9idWZfdW5pdHRlc3QuVGVz
dE9uZW9mMi5mb29faW50XCIiCi0gICAgICAgICAgICAgICAgICAgKyAiIGlzIHNwZWNpZmllZCBh
bG9uZyB3aXRoIGZpZWxkIFwicHJvdG9idWZfdW5pdHRlc3QuVGVzdE9uZW9mMi5mb29fc3RyaW5n
XCIsIgotICAgICAgICAgICAgICAgICAgICsgIiBhbm90aGVyIG1lbWJlciBvZiBvbmVvZiBcImZv
b1wiLiIsIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
T25lb2ZPdmVyd3JpdGVBbGxvd2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIGlu
cHV0ID0gImZvb19zdHJpbmc6IFwic3RyaW5ndmFsdWVcIiBmb29faW50OiAxMjMiOwotICAgIFRl
c3RPbmVvZjIuQnVpbGRlciBidWlsZGVyID0gVGVzdE9uZW9mMi5uZXdCdWlsZGVyKCk7Ci0gICAg
ZGVmYXVsdFBhcnNlci5tZXJnZShpbnB1dCwgVGVzdFV0aWwuZ2V0RXh0ZW5zaW9uUmVnaXN0cnko
KSwgYnVpbGRlcik7Ci0gICAgLy8gT25seSB0aGUgbGFzdCB2YWx1ZSBzdGlja3MuCi0gICAgVGVz
dE9uZW9mMiBvbmVvZiA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRGYWxzZShvbmVvZi5o
YXNGb29TdHJpbmcoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvbmVvZi5oYXNGb29JbnQoKSk7Ci0gIH0K
LQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotICAvLyB0ZXN0IGxvY2F0aW9uIGluZm9ybWF0aW9uCi0K
LSAgcHVibGljIHZvaWQgdGVzdFBhcnNlSW5mb1RyZWVCdWlsZGluZygpIHRocm93cyBFeGNlcHRp
b24gewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3
QnVpbGRlcigpOwotCi0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gVGVzdEFsbFR5cGVzLmdl
dERlc2NyaXB0b3IoKTsKLSAgICBUZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZS5CdWlsZGVyIHRyZWVC
dWlsZGVyID0gVGV4dEZvcm1hdFBhcnNlSW5mb1RyZWUuYnVpbGRlcigpOwotICAgIC8vIFNldCB0
byBhbGxvdyB1bmtub3duIGZpZWxkcwotICAgIFRleHRGb3JtYXQuUGFyc2VyIHBhcnNlciA9Ci0g
ICAgICAgIFRleHRGb3JtYXQuUGFyc2VyLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLnNldFBh
cnNlSW5mb1RyZWVCdWlsZGVyKHRyZWVCdWlsZGVyKQotICAgICAgICAgICAgLmJ1aWxkKCk7Ci0K
LSAgICBmaW5hbCBTdHJpbmcgc3RyaW5nRGF0YSA9Ci0gICAgICAgICJvcHRpb25hbF9pbnQzMjog
MVxuIgotICAgICAgICArICJvcHRpb25hbF9pbnQ2NDogMlxuIgotICAgICAgICArICIgIG9wdGlv
bmFsX2RvdWJsZTogMi40XG4iCi0gICAgICAgICsgInJlcGVhdGVkX2ludDMyOiA1XG4iCi0gICAg
ICAgICsgInJlcGVhdGVkX2ludDMyOiAxMFxuIgotICAgICAgICArICJvcHRpb25hbF9uZXN0ZWRf
bWVzc2FnZSA8XG4iCi0gICAgICAgICsgIiAgYmI6IDc4XG4iCi0gICAgICAgICsgIj5cbiIKLSAg
ICAgICAgKyAicmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgPFxuIgotICAgICAgICArICIgIGJiOiA3
OVxuIgotICAgICAgICArICI+XG4iCi0gICAgICAgICsgInJlcGVhdGVkX25lc3RlZF9tZXNzYWdl
IDxcbiIKLSAgICAgICAgKyAiICBiYjogODBcbiIKLSAgICAgICAgKyAiPiI7Ci0KLSAgICBwYXJz
ZXIubWVyZ2Uoc3RyaW5nRGF0YSwgYnVpbGRlcik7Ci0gICAgVGV4dEZvcm1hdFBhcnNlSW5mb1Ry
ZWUgdHJlZSA9IHRyZWVCdWlsZGVyLmJ1aWxkKCk7Ci0KLSAgICAvLyBWZXJpZnkgdGhhdCB0aGUg
dHJlZSBoYXMgdGhlIGNvcnJlY3QgcG9zaXRpb25zLgotICAgIGFzc2VydExvY2F0aW9uKHRyZWUs
IGRlc2NyaXB0b3IsICJvcHRpb25hbF9pbnQzMiIsIDAsIDAsIDApOwotICAgIGFzc2VydExvY2F0
aW9uKHRyZWUsIGRlc2NyaXB0b3IsICJvcHRpb25hbF9pbnQ2NCIsIDAsIDEsIDApOwotICAgIGFz
c2VydExvY2F0aW9uKHRyZWUsIGRlc2NyaXB0b3IsICJvcHRpb25hbF9kb3VibGUiLCAwLCAyLCAy
KTsKLQotICAgIGFzc2VydExvY2F0aW9uKHRyZWUsIGRlc2NyaXB0b3IsICJyZXBlYXRlZF9pbnQz
MiIsIDAsIDMsIDApOwotICAgIGFzc2VydExvY2F0aW9uKHRyZWUsIGRlc2NyaXB0b3IsICJyZXBl
YXRlZF9pbnQzMiIsIDEsIDQsIDApOwotCi0gICAgYXNzZXJ0TG9jYXRpb24odHJlZSwgZGVzY3Jp
cHRvciwgIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIiwgMCwgNSwgMCk7Ci0gICAgYXNzZXJ0TG9j
YXRpb24odHJlZSwgZGVzY3JpcHRvciwgInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiwgMCwgOCwg
MCk7Ci0gICAgYXNzZXJ0TG9jYXRpb24odHJlZSwgZGVzY3JpcHRvciwgInJlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlIiwgMSwgMTEsIDApOwotCi0gICAgLy8gQ2hlY2sgZm9yIGZpZWxkcyBub3Qgc2V0
LiBGb3IgYW4gaW52YWxpZCBmaWVsZCwgdGhlIGxvY2F0aW9uIHJldHVybmVkIHNob3VsZCBiZSAt
MSwgLTEuCi0gICAgYXNzZXJ0TG9jYXRpb24odHJlZSwgZGVzY3JpcHRvciwgInJlcGVhdGVkX2lu
dDY0IiwgMCwgLTEsIC0xKTsKLSAgICBhc3NlcnRMb2NhdGlvbih0cmVlLCBkZXNjcmlwdG9yLCAi
cmVwZWF0ZWRfaW50MzIiLCA2LCAtMSwgLTEpOwotCi0gICAgLy8gVmVyaWZ5IGluc2lkZSB0aGUg
bmVzdGVkIG1lc3NhZ2UuCi0gICAgRmllbGREZXNjcmlwdG9yIG5lc3RlZEZpZWxkID0gZGVzY3Jp
cHRvci5maW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIik7Ci0KLSAgICBU
ZXh0Rm9ybWF0UGFyc2VJbmZvVHJlZSBuZXN0ZWRUcmVlID0gdHJlZS5nZXROZXN0ZWRUcmVlcyhu
ZXN0ZWRGaWVsZCkuZ2V0KDApOwotICAgIGFzc2VydExvY2F0aW9uKG5lc3RlZFRyZWUsIG5lc3Rl
ZEZpZWxkLmdldE1lc3NhZ2VUeXBlKCksICJiYiIsIDAsIDYsIDIpOwotCi0gICAgLy8gVmVyaWZ5
IGluc2lkZSBhbm90aGVyIG5lc3RlZCBtZXNzYWdlLgotICAgIG5lc3RlZEZpZWxkID0gZGVzY3Jp
cHRvci5maW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIik7Ci0gICAgbmVz
dGVkVHJlZSA9IHRyZWUuZ2V0TmVzdGVkVHJlZXMobmVzdGVkRmllbGQpLmdldCgwKTsKLSAgICBh
c3NlcnRMb2NhdGlvbihuZXN0ZWRUcmVlLCBuZXN0ZWRGaWVsZC5nZXRNZXNzYWdlVHlwZSgpLCAi
YmIiLCAwLCA5LCAyKTsKLQotICAgIG5lc3RlZFRyZWUgPSB0cmVlLmdldE5lc3RlZFRyZWVzKG5l
c3RlZEZpZWxkKS5nZXQoMSk7Ci0gICAgYXNzZXJ0TG9jYXRpb24obmVzdGVkVHJlZSwgbmVzdGVk
RmllbGQuZ2V0TWVzc2FnZVR5cGUoKSwgImJiIiwgMCwgMTIsIDIpOwotCi0gICAgLy8gVmVyaWZ5
IGEgTlVMTCB0cmVlIGZvciBhbiB1bmtub3duIG5lc3RlZCBmaWVsZC4KLSAgICB0cnkgewotICAg
ICAgdHJlZS5nZXROZXN0ZWRUcmVlKG5lc3RlZEZpZWxkLCAyKTsKLSAgICAgIGZhaWwoInVua25v
d24gbmVzdGVkIGZpZWxkIHNob3VsZCB0aHJvdyIpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1
bWVudEV4Y2VwdGlvbiB1bnVzZWQpIHsKLSAgICAgIC8vIHBhc3MKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgYXNzZXJ0TG9jYXRpb24oCi0gICAgICBUZXh0Rm9ybWF0UGFyc2VJbmZvVHJl
ZSB0cmVlLAotICAgICAgZmluYWwgRGVzY3JpcHRvciBkZXNjcmlwdG9yLAotICAgICAgZmluYWwg
U3RyaW5nIGZpZWxkTmFtZSwKLSAgICAgIGludCBpbmRleCwKLSAgICAgIGludCBsaW5lLAotICAg
ICAgaW50IGNvbHVtbikgewotICAgIExpc3Q8VGV4dEZvcm1hdFBhcnNlTG9jYXRpb24+IGxvY3Mg
PSB0cmVlLmdldExvY2F0aW9ucyhkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZShmaWVsZE5hbWUp
KTsKLSAgICBpZiAoaW5kZXggPCBsb2NzLnNpemUoKSkgewotICAgICAgVGV4dEZvcm1hdFBhcnNl
TG9jYXRpb24gbG9jYXRpb24gPSBsb2NzLmdldChpbmRleCk7Ci0gICAgICBUZXh0Rm9ybWF0UGFy
c2VMb2NhdGlvbiBleHBlY3RlZCA9IFRleHRGb3JtYXRQYXJzZUxvY2F0aW9uLmNyZWF0ZShsaW5l
LCBjb2x1bW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBsb2NhdGlvbik7Ci0gICAg
fSBlbHNlIGlmIChsaW5lICE9IC0xICYmIGNvbHVtbiAhPSAtMSkgewotICAgICAgZmFpbCgKLSAg
ICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAiVHJlZS9kZXNjcmlwdG9yL2Zp
ZWxkbmFtZSBkaWQgbm90IGNvbnRhaW4gaW5kZXggJWQsIGxpbmUgJWQgY29sdW1uICVkIGV4cGVj
dGVkIiwKLSAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgIGxpbmUsCi0gICAgICAg
ICAgICAgIGNvbHVtbikpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1Vua25vd25FbnVtVmFsdWVUZXN0LmphdmEg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvVW5rbm93bkVudW1W
YWx1ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY0NTk3NmZiNDlj
ZWZhOWYyOWI4YmM4MzZlNmVjYmQxNDJhNGIxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvVW5rbm93bkVudW1WYWx1ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NSAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20u
Z29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9y
cy5EZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRW51
bURlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5FbnVt
VmFsdWVEZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMu
RmllbGREZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRmllbGRQcmVzZW5j
ZVRlc3RQcm90by5UZXN0QWxsVHlwZXM7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5UZXh0
Rm9ybWF0LlBhcnNlRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNl
OwotCi0vKioKLSAqIFVuaXQgdGVzdHMgZm9yIHByb3RvcyB0aGF0IGtlZXAgdW5rbm93biBlbnVt
IHZhbHVlcyByYXRoZXIgdGhhbiBkaXNjYXJkCi0gKiB0aGVtIGFzIHVua25vd24gZmllbGRzLgot
ICovCi1wdWJsaWMgY2xhc3MgVW5rbm93bkVudW1WYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7
Ci0gIHB1YmxpYyB2b2lkIHRlc3RVbmtub3duRW51bVZhbHVlcygpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVp
bGRlcigpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxOZXN0ZWRFbnVtVmFsdWUoNDMyMSk7Ci0g
ICAgYnVpbGRlci5hZGRSZXBlYXRlZE5lc3RlZEVudW1WYWx1ZSg1NDMyKTsKLSAgICBidWlsZGVy
LmFkZFBhY2tlZE5lc3RlZEVudW1WYWx1ZSg2NTQzKTsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2Fn
ZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoNDMyMSwgbWVzc2FnZS5nZXRP
cHRpb25hbE5lc3RlZEVudW1WYWx1ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNTQzMiwgbWVzc2Fn
ZS5nZXRSZXBlYXRlZE5lc3RlZEVudW1WYWx1ZSgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDU0MzIs
IG1lc3NhZ2UuZ2V0UmVwZWF0ZWROZXN0ZWRFbnVtVmFsdWVMaXN0KCkuZ2V0KDApLmludFZhbHVl
KCkpOwotICAgIGFzc2VydEVxdWFscyg2NTQzLCBtZXNzYWdlLmdldFBhY2tlZE5lc3RlZEVudW1W
YWx1ZSgwKSk7Ci0gICAgLy8gUmV0dXJucyBVTlJFQ09HTklaRUQgaWYgYW4gZW51bSB0eXBlIGlz
IHJlcXVlc3RlZC4KLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uVU5S
RUNPR05JWkVELCBtZXNzYWdlLmdldE9wdGlvbmFsTmVzdGVkRW51bSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uVU5SRUNPR05JWkVELCBtZXNzYWdlLmdldFJl
cGVhdGVkTmVzdGVkRW51bSgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlcy5OZXN0
ZWRFbnVtLlVOUkVDT0dOSVpFRCwgbWVzc2FnZS5nZXRSZXBlYXRlZE5lc3RlZEVudW1MaXN0KCku
Z2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uVU5SRUNP
R05JWkVELCBtZXNzYWdlLmdldFBhY2tlZE5lc3RlZEVudW0oMCkpOwotICAgIAotICAgIC8vIFRl
c3Qgc2VyaWFsaXphdGlvbiBhbmQgcGFyc2luZy4KLSAgICBCeXRlU3RyaW5nIGRhdGEgPSBtZXNz
YWdlLnRvQnl0ZVN0cmluZygpOwotICAgIG1lc3NhZ2UgPSBUZXN0QWxsVHlwZXMucGFyc2VGcm9t
KGRhdGEpOwotICAgIGFzc2VydEVxdWFscyg0MzIxLCBtZXNzYWdlLmdldE9wdGlvbmFsTmVzdGVk
RW51bVZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscyg1NDMyLCBtZXNzYWdlLmdldFJlcGVhdGVk
TmVzdGVkRW51bVZhbHVlKDApKTsKLSAgICBhc3NlcnRFcXVhbHMoNTQzMiwgbWVzc2FnZS5nZXRS
ZXBlYXRlZE5lc3RlZEVudW1WYWx1ZUxpc3QoKS5nZXQoMCkuaW50VmFsdWUoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDY1NDMsIG1lc3NhZ2UuZ2V0UGFja2VkTmVzdGVkRW51bVZhbHVlKDApKTsKLSAg
ICAvLyBSZXR1cm5zIFVOUkVDT0dOSVpFRCBpZiBhbiBlbnVtIHR5cGUgaXMgcmVxdWVzdGVkLgot
ICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5VTlJFQ09HTklaRUQsIG1l
c3NhZ2UuZ2V0T3B0aW9uYWxOZXN0ZWRFbnVtKCkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxs
VHlwZXMuTmVzdGVkRW51bS5VTlJFQ09HTklaRUQsIG1lc3NhZ2UuZ2V0UmVwZWF0ZWROZXN0ZWRF
bnVtKDApKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uVU5SRUNP
R05JWkVELCBtZXNzYWdlLmdldFJlcGVhdGVkTmVzdGVkRW51bUxpc3QoKS5nZXQoMCkpOwotICAg
IGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5VTlJFQ09HTklaRUQsIG1lc3Nh
Z2UuZ2V0UGFja2VkTmVzdGVkRW51bSgwKSk7Ci0gICAgCi0gICAgLy8gVGVzdCB0b0J1aWxkZXIo
KS4KLSAgICBidWlsZGVyID0gbWVzc2FnZS50b0J1aWxkZXIoKTsKLSAgICBhc3NlcnRFcXVhbHMo
NDMyMSwgYnVpbGRlci5nZXRPcHRpb25hbE5lc3RlZEVudW1WYWx1ZSgpKTsKLSAgICBhc3NlcnRF
cXVhbHMoNTQzMiwgYnVpbGRlci5nZXRSZXBlYXRlZE5lc3RlZEVudW1WYWx1ZSgwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDU0MzIsIGJ1aWxkZXIuZ2V0UmVwZWF0ZWROZXN0ZWRFbnVtVmFsdWVMaXN0
KCkuZ2V0KDApLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscyg2NTQzLCBidWlsZGVyLmdl
dFBhY2tlZE5lc3RlZEVudW1WYWx1ZSgwKSk7ICAgIAotICAgIC8vIFJldHVybnMgVU5SRUNPR05J
WkVEIGlmIGFuIGVudW0gdHlwZSBpcyByZXF1ZXN0ZWQuCi0gICAgYXNzZXJ0RXF1YWxzKFRlc3RB
bGxUeXBlcy5OZXN0ZWRFbnVtLlVOUkVDT0dOSVpFRCwgYnVpbGRlci5nZXRPcHRpb25hbE5lc3Rl
ZEVudW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLlVOUkVD
T0dOSVpFRCwgYnVpbGRlci5nZXRSZXBlYXRlZE5lc3RlZEVudW0oMCkpOwotICAgIGFzc2VydEVx
dWFscyhUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5VTlJFQ09HTklaRUQsIGJ1aWxkZXIuZ2V0UmVw
ZWF0ZWROZXN0ZWRFbnVtTGlzdCgpLmdldCgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxU
eXBlcy5OZXN0ZWRFbnVtLlVOUkVDT0dOSVpFRCwgYnVpbGRlci5nZXRQYWNrZWROZXN0ZWRFbnVt
KDApKTsKLSAgICAKLSAgICAvLyBUZXN0IG1lcmdlRnJvbSgpLgotICAgIGJ1aWxkZXIgPSBUZXN0
QWxsVHlwZXMubmV3QnVpbGRlcigpLm1lcmdlRnJvbShtZXNzYWdlKTsKLSAgICBhc3NlcnRFcXVh
bHMoNDMyMSwgYnVpbGRlci5nZXRPcHRpb25hbE5lc3RlZEVudW1WYWx1ZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoNTQzMiwgYnVpbGRlci5nZXRSZXBlYXRlZE5lc3RlZEVudW1WYWx1ZSgwKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDU0MzIsIGJ1aWxkZXIuZ2V0UmVwZWF0ZWROZXN0ZWRFbnVtVmFsdWVM
aXN0KCkuZ2V0KDApLmludFZhbHVlKCkpOwotICAgIGFzc2VydEVxdWFscyg2NTQzLCBidWlsZGVy
LmdldFBhY2tlZE5lc3RlZEVudW1WYWx1ZSgwKSk7Ci0gICAgLy8gUmV0dXJucyBVTlJFQ09HTkla
RUQgaWYgYW4gZW51bSB0eXBlIGlzIHJlcXVlc3RlZC4KLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFs
bFR5cGVzLk5lc3RlZEVudW0uVU5SRUNPR05JWkVELCBidWlsZGVyLmdldE9wdGlvbmFsTmVzdGVk
RW51bSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uVU5SRUNP
R05JWkVELCBidWlsZGVyLmdldFJlcGVhdGVkTmVzdGVkRW51bSgwKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLlVOUkVDT0dOSVpFRCwgYnVpbGRlci5nZXRSZXBl
YXRlZE5lc3RlZEVudW1MaXN0KCkuZ2V0KDApKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5
cGVzLk5lc3RlZEVudW0uVU5SRUNPR05JWkVELCBidWlsZGVyLmdldFBhY2tlZE5lc3RlZEVudW0o
MCkpOwotICAgIAotICAgIC8vIFRlc3QgZXF1YWxzKCkgYW5kIGhhc2hDb2RlKCkKLSAgICBUZXN0
QWxsVHlwZXMgc2FtZU1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KG1lc3NhZ2UsIHNhbWVNZXNzYWdlKTsKLSAgICBhc3NlcnRFcXVhbHMobWVzc2FnZS5oYXNoQ29k
ZSgpLCBzYW1lTWVzc2FnZS5oYXNoQ29kZSgpKTsKLQotICAgIC8vIEdldHRpbmcgdGhlIG51bWVy
aWMgdmFsdWUgb2YgVU5SRUNPR05JWkVEIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgotICAgIHRy
eSB7Ci0gICAgICBUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5VTlJFQ09HTklaRUQuZ2V0TnVtYmVy
KCk7Ci0gICAgICBmYWlsKCJFeGNlcHRpb24gaXMgZXhwZWN0ZWQuIik7Ci0gICAgfSBjYXRjaCAo
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0K
LQotICAgIC8vIFNldHRpbmcgYW4gZW51bSBmaWVsZCB0byBhbiBVTlJFQ09HTklaRUQgdmFsdWUg
d2lsbCB0aHJvdyBhbiBleGNlcHRpb24uCi0gICAgdHJ5IHsKLSAgICAgIGJ1aWxkZXIuc2V0T3B0
aW9uYWxOZXN0ZWRFbnVtKGJ1aWxkZXIuZ2V0T3B0aW9uYWxOZXN0ZWRFbnVtKCkpOwotICAgICAg
ZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1
bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9Ci0gICAgdHJ5IHsK
LSAgICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWROZXN0ZWRFbnVtKGJ1aWxkZXIuZ2V0T3B0aW9uYWxO
ZXN0ZWRFbnVtKCkpOwotICAgICAgZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwotICAg
IH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3Rl
ZC4KLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmtub3duRW51bVZhbHVlSW5S
ZWZsZWN0aW9uQXBpKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgRGVzY3JpcHRvciBkZXNjcmlw
dG9yID0gVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKTsKLSAgICBGaWVsZERlc2NyaXB0b3Ig
b3B0aW9uYWxOZXN0ZWRFbnVtRmllbGQgPSBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgib3B0
aW9uYWxfbmVzdGVkX2VudW0iKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgcmVwZWF0ZWROZXN0ZWRF
bnVtRmllbGQgPSBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfbmVzdGVkX2Vu
dW0iKTsKLSAgICBGaWVsZERlc2NyaXB0b3IgcGFja2VkTmVzdGVkRW51bUZpZWxkID0gZGVzY3Jp
cHRvci5maW5kRmllbGRCeU5hbWUoInBhY2tlZF9uZXN0ZWRfZW51bSIpOwotICAgIEVudW1EZXNj
cmlwdG9yIGVudW1UeXBlID0gVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uZ2V0RGVzY3JpcHRvcigp
OwotCi0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdC
dWlsZGVyKCk7Ci0gICAgYnVpbGRlci5zZXRGaWVsZChvcHRpb25hbE5lc3RlZEVudW1GaWVsZCwK
LSAgICAgICAgZW51bVR5cGUuZmluZFZhbHVlQnlOdW1iZXJDcmVhdGluZ0lmVW5rbm93big0MzIx
KSk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZpZWxkKHJlcGVhdGVkTmVzdGVkRW51bUZpZWxk
LAotICAgICAgICBlbnVtVHlwZS5maW5kVmFsdWVCeU51bWJlckNyZWF0aW5nSWZVbmtub3duKDU0
MzIpKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRmllbGQocGFja2VkTmVzdGVkRW51bUZpZWxk
LAotICAgICAgICBlbnVtVHlwZS5maW5kVmFsdWVCeU51bWJlckNyZWF0aW5nSWZVbmtub3duKDY1
NDMpKTsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICAK
LSAgICAvLyBHZXR0ZXJzIHdpbGwgcmV0dXJuIHVua25vd24gZW51bSB2YWx1ZXMgYXMgRW51bVZh
bHVlRGVzY3JpcHRvci4KLSAgICBFbnVtVmFsdWVEZXNjcmlwdG9yIHVua25vd240MzIxID0KLSAg
ICAgICAgKEVudW1WYWx1ZURlc2NyaXB0b3IpIG1lc3NhZ2UuZ2V0RmllbGQob3B0aW9uYWxOZXN0
ZWRFbnVtRmllbGQpOwotICAgIEVudW1WYWx1ZURlc2NyaXB0b3IgdW5rbm93bjU0MzIgPQotICAg
ICAgICAoRW51bVZhbHVlRGVzY3JpcHRvcikgbWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHJlcGVh
dGVkTmVzdGVkRW51bUZpZWxkLCAwKTsKLSAgICBFbnVtVmFsdWVEZXNjcmlwdG9yIHVua25vd242
NTQzID0KLSAgICAgICAgKEVudW1WYWx1ZURlc2NyaXB0b3IpIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRG
aWVsZChwYWNrZWROZXN0ZWRFbnVtRmllbGQsIDApOwotICAgIGFzc2VydEVxdWFscyg0MzIxLCB1
bmtub3duNDMyMS5nZXROdW1iZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDU0MzIsIHVua25vd241
NDMyLmdldE51bWJlcigpKTsKLSAgICBhc3NlcnRFcXVhbHMoNjU0MywgdW5rbm93bjY1NDMuZ2V0
TnVtYmVyKCkpOwotICAgIAotICAgIC8vIFVua25vd24gRW51bVZhbHVlRGVzY3JpcHRvciB3aWxs
IG1hcCB0byBVTlJFQ09HTklaRUQuCi0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBUZXN0QWxs
VHlwZXMuTmVzdGVkRW51bS52YWx1ZU9mKHVua25vd240MzIxKSwKLSAgICAgICAgVGVzdEFsbFR5
cGVzLk5lc3RlZEVudW0uVU5SRUNPR05JWkVEKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAg
IFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLnZhbHVlT2YodW5rbm93bjU0MzIpLAotICAgICAgICBU
ZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5VTlJFQ09HTklaRUQpOwotICAgIGFzc2VydEVxdWFscygK
LSAgICAgICAgVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0udmFsdWVPZih1bmtub3duNjU0MyksCi0g
ICAgICAgIFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLlVOUkVDT0dOSVpFRCk7Ci0gICAgCi0gICAg
Ly8gU2V0dGVycyBhbHNvIGFjY2VwdCB1bmtub3duIEVudW1WYWx1ZURlc2NyaXB0b3IuCi0gICAg
YnVpbGRlci5zZXRGaWVsZChvcHRpb25hbE5lc3RlZEVudW1GaWVsZCwgdW5rbm93bjY1NDMpOwot
ICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRGaWVsZChyZXBlYXRlZE5lc3RlZEVudW1GaWVsZCwgMCwg
dW5rbm93bjQzMjEpOwotICAgIGJ1aWxkZXIuc2V0UmVwZWF0ZWRGaWVsZChwYWNrZWROZXN0ZWRF
bnVtRmllbGQsIDAsIHVua25vd241NDMyKTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgp
OwotICAgIC8vIExpa2Ugb3RoZXIgZGVzY3JpcHRvcnMsIHVua25vd24gRW51bVZhbHVlRGVzY3Jp
cHRvciBjYW4gYmUgY29tcGFyZWQgYnkKLSAgICAvLyBvYmplY3QgaWRlbnRpdHkuCi0gICAgYXNz
ZXJ0VHJ1ZSh1bmtub3duNjU0MyA9PSBtZXNzYWdlLmdldEZpZWxkKG9wdGlvbmFsTmVzdGVkRW51
bUZpZWxkKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bmtub3duNDMyMSA9PSBtZXNzYWdlLmdldFJlcGVh
dGVkRmllbGQocmVwZWF0ZWROZXN0ZWRFbnVtRmllbGQsIDApKTsKLSAgICBhc3NlcnRUcnVlKHVu
a25vd241NDMyID09IG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChwYWNrZWROZXN0ZWRFbnVtRmll
bGQsIDApKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdFVua25vd25FbnVtVmFsdWVXaXRo
RHluYW1pY01lc3NhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBEZXNjcmlwdG9yIGRlc2Ny
aXB0b3IgPSBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpOwotICAgIEZpZWxkRGVzY3JpcHRv
ciBvcHRpb25hbE5lc3RlZEVudW1GaWVsZCA9IGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJv
cHRpb25hbF9uZXN0ZWRfZW51bSIpOwotICAgIEZpZWxkRGVzY3JpcHRvciByZXBlYXRlZE5lc3Rl
ZEVudW1GaWVsZCA9IGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9uZXN0ZWRf
ZW51bSIpOwotICAgIEZpZWxkRGVzY3JpcHRvciBwYWNrZWROZXN0ZWRFbnVtRmllbGQgPSBkZXNj
cmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgicGFja2VkX25lc3RlZF9lbnVtIik7Ci0gICAgRW51bURl
c2NyaXB0b3IgZW51bVR5cGUgPSBUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5nZXREZXNjcmlwdG9y
KCk7Ci0gICAgCi0gICAgTWVzc2FnZSBkeW5hbWljTWVzc2FnZURlZmF1bHRJbnN0YW5jZSA9IER5
bmFtaWNNZXNzYWdlLmdldERlZmF1bHRJbnN0YW5jZShkZXNjcmlwdG9yKTsKLQotICAgIE1lc3Nh
Z2UuQnVpbGRlciBidWlsZGVyID0gZHluYW1pY01lc3NhZ2VEZWZhdWx0SW5zdGFuY2UubmV3QnVp
bGRlckZvclR5cGUoKTsKLSAgICBidWlsZGVyLnNldEZpZWxkKG9wdGlvbmFsTmVzdGVkRW51bUZp
ZWxkLAotICAgICAgICBlbnVtVHlwZS5maW5kVmFsdWVCeU51bWJlckNyZWF0aW5nSWZVbmtub3du
KDQzMjEpKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRmllbGQocmVwZWF0ZWROZXN0ZWRFbnVt
RmllbGQsCi0gICAgICAgIGVudW1UeXBlLmZpbmRWYWx1ZUJ5TnVtYmVyQ3JlYXRpbmdJZlVua25v
d24oNTQzMikpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGaWVsZChwYWNrZWROZXN0ZWRFbnVt
RmllbGQsCi0gICAgICAgIGVudW1UeXBlLmZpbmRWYWx1ZUJ5TnVtYmVyQ3JlYXRpbmdJZlVua25v
d24oNjU0MykpOwotICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBh
c3NlcnRFcXVhbHMoNDMyMSwKLSAgICAgICAgKChFbnVtVmFsdWVEZXNjcmlwdG9yKSBtZXNzYWdl
LmdldEZpZWxkKG9wdGlvbmFsTmVzdGVkRW51bUZpZWxkKSkuZ2V0TnVtYmVyKCkpOwotICAgIGFz
c2VydEVxdWFscyg1NDMyLAotICAgICAgICAoKEVudW1WYWx1ZURlc2NyaXB0b3IpIG1lc3NhZ2Uu
Z2V0UmVwZWF0ZWRGaWVsZChyZXBlYXRlZE5lc3RlZEVudW1GaWVsZCwgMCkpLmdldE51bWJlcigp
KTsKLSAgICBhc3NlcnRFcXVhbHMoNjU0MywKLSAgICAgICAgKChFbnVtVmFsdWVEZXNjcmlwdG9y
KSBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQocGFja2VkTmVzdGVkRW51bUZpZWxkLCAwKSkuZ2V0
TnVtYmVyKCkpOwotICAgIAotICAgIC8vIFRlc3QgcmVmbGVjdGlvbiBiYXNlZCBzZXJpYWxpemF0
aW9uL3BhcnNpbmcgaW1wbGVtZW50YXRpb24uCi0gICAgQnl0ZVN0cmluZyBkYXRhID0gbWVzc2Fn
ZS50b0J5dGVTdHJpbmcoKTsKLSAgICBtZXNzYWdlID0gZHluYW1pY01lc3NhZ2VEZWZhdWx0SW5z
dGFuY2UKLSAgICAgICAgLm5ld0J1aWxkZXJGb3JUeXBlKCkKLSAgICAgICAgLm1lcmdlRnJvbShk
YXRhKQotICAgICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoNDMyMSwKLSAgICAgICAg
KChFbnVtVmFsdWVEZXNjcmlwdG9yKSBtZXNzYWdlLmdldEZpZWxkKG9wdGlvbmFsTmVzdGVkRW51
bUZpZWxkKSkuZ2V0TnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFscyg1NDMyLAotICAgICAgICAo
KEVudW1WYWx1ZURlc2NyaXB0b3IpIG1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChyZXBlYXRlZE5l
c3RlZEVudW1GaWVsZCwgMCkpLmdldE51bWJlcigpKTsKLSAgICBhc3NlcnRFcXVhbHMoNjU0MywK
LSAgICAgICAgKChFbnVtVmFsdWVEZXNjcmlwdG9yKSBtZXNzYWdlLmdldFJlcGVhdGVkRmllbGQo
cGFja2VkTmVzdGVkRW51bUZpZWxkLCAwKSkuZ2V0TnVtYmVyKCkpOwotICAgIAotICAgIC8vIFRl
c3QgcmVmbGVjdGlvbiBiYXNlZCBlcXVhbHMoKS9oYXNoQ29kZSgpLgotICAgIGJ1aWxkZXIgPSBk
eW5hbWljTWVzc2FnZURlZmF1bHRJbnN0YW5jZS5uZXdCdWlsZGVyRm9yVHlwZSgpOwotICAgIGJ1
aWxkZXIuc2V0RmllbGQob3B0aW9uYWxOZXN0ZWRFbnVtRmllbGQsCi0gICAgICAgIGVudW1UeXBl
LmZpbmRWYWx1ZUJ5TnVtYmVyQ3JlYXRpbmdJZlVua25vd24oNDMyMSkpOwotICAgIGJ1aWxkZXIu
YWRkUmVwZWF0ZWRGaWVsZChyZXBlYXRlZE5lc3RlZEVudW1GaWVsZCwKLSAgICAgICAgZW51bVR5
cGUuZmluZFZhbHVlQnlOdW1iZXJDcmVhdGluZ0lmVW5rbm93big1NDMyKSk7Ci0gICAgYnVpbGRl
ci5hZGRSZXBlYXRlZEZpZWxkKHBhY2tlZE5lc3RlZEVudW1GaWVsZCwKLSAgICAgICAgZW51bVR5
cGUuZmluZFZhbHVlQnlOdW1iZXJDcmVhdGluZ0lmVW5rbm93big2NTQzKSk7Ci0gICAgTWVzc2Fn
ZSBzYW1lTWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMobWVzc2Fn
ZSwgc2FtZU1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmhhc2hDb2RlKCksIHNh
bWVNZXNzYWdlLmhhc2hDb2RlKCkpOwotICAgIGJ1aWxkZXIuc2V0RmllbGQob3B0aW9uYWxOZXN0
ZWRFbnVtRmllbGQsCi0gICAgICAgIGVudW1UeXBlLmZpbmRWYWx1ZUJ5TnVtYmVyQ3JlYXRpbmdJ
ZlVua25vd24oMCkpOwotICAgIE1lc3NhZ2UgZGlmZmVyZW50TWVzc2FnZSA9IGJ1aWxkZXIuYnVp
bGQoKTsKLSAgICBhc3NlcnRGYWxzZShtZXNzYWdlLmVxdWFscyhkaWZmZXJlbnRNZXNzYWdlKSk7
Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmtub3duRW51bVZhbHVlc0luVGV4dEZvcm1h
dCgpIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5l
d0J1aWxkZXIoKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsTmVzdGVkRW51bVZhbHVlKDQzMjEp
OwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWROZXN0ZWRFbnVtVmFsdWUoNTQzMik7Ci0gICAgYnVp
bGRlci5hZGRQYWNrZWROZXN0ZWRFbnVtVmFsdWUoNjU0Myk7Ci0gICAgVGVzdEFsbFR5cGVzIG1l
c3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgCi0gICAgLy8gV2UgY2FuIHByaW50IGEgbWVz
c2FnZSB3aXRoIHVua25vd24gZW51bSB2YWx1ZXMuCi0gICAgU3RyaW5nIHRleHREYXRhID0gVGV4
dEZvcm1hdC5wcmludFRvU3RyaW5nKG1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAg
ICAgIm9wdGlvbmFsX25lc3RlZF9lbnVtOiBVTktOT1dOX0VOVU1fVkFMVUVfTmVzdGVkRW51bV80
MzIxXG4iCi0gICAgICAgICsgInJlcGVhdGVkX25lc3RlZF9lbnVtOiBVTktOT1dOX0VOVU1fVkFM
VUVfTmVzdGVkRW51bV81NDMyXG4iCi0gICAgICAgICsgInBhY2tlZF9uZXN0ZWRfZW51bTogVU5L
Tk9XTl9FTlVNX1ZBTFVFX05lc3RlZEVudW1fNjU0M1xuIiwgdGV4dERhdGEpOwotICAgIAotICAg
IC8vIFBhcnNpbmcgdW5rbm93biBlbnVtIHZhbHVlcyB3aWxsIGZhaWwganVzdCBsaWtlIHBhcnNp
bmcgb3RoZXIga2luZHMgb2YKLSAgICAvLyB1bmtub3duIGZpZWxkcy4KLSAgICB0cnkgewotICAg
ICAgVGV4dEZvcm1hdC5tZXJnZSh0ZXh0RGF0YSwgYnVpbGRlcik7Ci0gICAgICBmYWlsKCk7Ci0g
ICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQuCi0gICAg
fQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvVW5rbm93bkZpZWxkU2V0TGl0ZVRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Vbmtub3duRmllbGRTZXRMaXRlVGVzdC5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzNjZDY2NTQzYTk2ZmJjYTYzNGFkNGJkZTg0
YWZlYWViNDhjZmY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Vbmtub3duRmll
bGRTZXRMaXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9i
dWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5UZXN0QWxsRXh0
ZW5zaW9uc0xpdGU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExpdGUuVGVz
dEFsbFR5cGVzTGl0ZTsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5saXRlX2VxdWFsc19hbmRf
aGFzaC5MaXRlRXF1YWxzQW5kSGFzaDsKLWltcG9ydCBwcm90b2J1Zl91bml0dGVzdC5saXRlX2Vx
dWFsc19hbmRfaGFzaC5MaXRlRXF1YWxzQW5kSGFzaC5CYXI7Ci1pbXBvcnQgcHJvdG9idWZfdW5p
dHRlc3QubGl0ZV9lcXVhbHNfYW5kX2hhc2guTGl0ZUVxdWFsc0FuZEhhc2guRm9vOwotCi1pbXBv
cnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlP
dXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKiBUZXN0
cyBmb3Ige0BsaW5rIFVua25vd25GaWVsZFNldExpdGV9LgotICoKLSAqIEBhdXRob3IgZHdlaXNA
Z29vZ2xlLmNvbSAoRGFuaWVsIFdlaXMpCi0gKi8KLXB1YmxpYyBjbGFzcyBVbmtub3duRmllbGRT
ZXRMaXRlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3REZWZh
dWx0SW5zdGFuY2UoKSB7Ci0gICAgVW5rbm93bkZpZWxkU2V0TGl0ZSB1bmtub3duRmllbGRzID0g
VW5rbm93bkZpZWxkU2V0TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKTsKLQotICAgIGFzc2VydEVx
dWFscygwLCB1bmtub3duRmllbGRzLmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICAgIGFzc2VydEVx
dWFscyhCeXRlU3RyaW5nLkVNUFRZLCB0b0J5dGVTdHJpbmcodW5rbm93bkZpZWxkcykpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1lcmdlRmllbGRGcm9tKCkgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICBGb28gZm9vID0gRm9vLm5ld0J1aWxkZXIoKQotICAgICAgLnNldFZhbHVlKDIpCi0g
ICAgICAuYnVpbGQoKTsKLQotICAgIENvZGVkSW5wdXRTdHJlYW0gaW5wdXQgPSBDb2RlZElucHV0
U3RyZWFtLm5ld0luc3RhbmNlKGZvby50b0J5dGVBcnJheSgpKTsKLQotICAgIFVua25vd25GaWVs
ZFNldExpdGUgaW5zdGFuY2UgPSBVbmtub3duRmllbGRTZXRMaXRlLm5ld0luc3RhbmNlKCk7Ci0g
ICAgaW5zdGFuY2UubWVyZ2VGaWVsZEZyb20oaW5wdXQucmVhZFRhZygpLCBpbnB1dCk7Ci0KLSAg
ICBhc3NlcnRFcXVhbHMoZm9vLnRvQnl0ZVN0cmluZygpLCB0b0J5dGVTdHJpbmcoaW5zdGFuY2Up
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemVkU2l6ZSgpIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgRm9vIGZvbyA9IEZvby5uZXdCdWlsZGVyKCkKLSAgICAgIC5zZXRWYWx1
ZSgyKQotICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gQ29k
ZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZShmb28udG9CeXRlQXJyYXkoKSk7Ci0KLSAgICBVbmtu
b3duRmllbGRTZXRMaXRlIGluc3RhbmNlID0gVW5rbm93bkZpZWxkU2V0TGl0ZS5uZXdJbnN0YW5j
ZSgpOwotICAgIGluc3RhbmNlLm1lcmdlRmllbGRGcm9tKGlucHV0LnJlYWRUYWcoKSwgaW5wdXQp
OwotCi0gICAgYXNzZXJ0RXF1YWxzKGZvby50b0J5dGVTdHJpbmcoKS5zaXplKCksIGluc3RhbmNl
LmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1lcmdlVmFy
aW50RmllbGQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIFVua25vd25GaWVsZFNldExpdGUg
dW5rbm93bkZpZWxkcyA9IFVua25vd25GaWVsZFNldExpdGUubmV3SW5zdGFuY2UoKTsKLSAgICB1
bmtub3duRmllbGRzLm1lcmdlVmFyaW50RmllbGQoMTAsIDIpOwotCi0gICAgQ29kZWRJbnB1dFN0
cmVhbSBpbnB1dCA9Ci0gICAgICAgIENvZGVkSW5wdXRTdHJlYW0ubmV3SW5zdGFuY2UodG9CeXRl
U3RyaW5nKHVua25vd25GaWVsZHMpLnRvQnl0ZUFycmF5KCkpOwotCi0gICAgaW50IHRhZyA9IGlu
cHV0LnJlYWRUYWcoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTAsIFdpcmVGb3JtYXQuZ2V0VGFnRmll
bGROdW1iZXIodGFnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFdpcmVGb3JtYXQuV0lSRVRZUEVfVkFS
SU5ULCBXaXJlRm9ybWF0LmdldFRhZ1dpcmVUeXBlKHRhZykpOwotICAgIGFzc2VydEVxdWFscygy
LCBpbnB1dC5yZWFkVUludDY0KCkpOwotICAgIGFzc2VydFRydWUoaW5wdXQuaXNBdEVuZCgpKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZVZhcmludEZpZWxkX25lZ2F0aXZlKCkgdGhy
b3dzIElPRXhjZXB0aW9uIHsKLSAgICBVbmtub3duRmllbGRTZXRMaXRlIGJ1aWxkZXIgPSBVbmtu
b3duRmllbGRTZXRMaXRlLm5ld0luc3RhbmNlKCk7Ci0gICAgYnVpbGRlci5tZXJnZVZhcmludEZp
ZWxkKDEwLCAtNik7Ci0KLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0KLSAgICAgICAgQ29k
ZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZSh0b0J5dGVTdHJpbmcoYnVpbGRlcikudG9CeXRlQXJy
YXkoKSk7Ci0KLSAgICBpbnQgdGFnID0gaW5wdXQucmVhZFRhZygpOwotICAgIGFzc2VydEVxdWFs
cygxMCwgV2lyZUZvcm1hdC5nZXRUYWdGaWVsZE51bWJlcih0YWcpKTsKLSAgICBhc3NlcnRFcXVh
bHMoV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQsIFdpcmVGb3JtYXQuZ2V0VGFnV2lyZVR5cGUo
dGFnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKC02LCBpbnB1dC5yZWFkVUludDY0KCkpOwotICAgIGFz
c2VydFRydWUoaW5wdXQuaXNBdEVuZCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RFcXVh
bHNBbmRIYXNoQ29kZSgpIHsKLSAgICBVbmtub3duRmllbGRTZXRMaXRlIHVua25vd25GaWVsZHMx
ID0gVW5rbm93bkZpZWxkU2V0TGl0ZS5uZXdJbnN0YW5jZSgpOwotICAgIHVua25vd25GaWVsZHMx
Lm1lcmdlVmFyaW50RmllbGQoMTAsIDIpOwotCi0gICAgVW5rbm93bkZpZWxkU2V0TGl0ZSB1bmtu
b3duRmllbGRzMiA9IFVua25vd25GaWVsZFNldExpdGUubmV3SW5zdGFuY2UoKTsKLSAgICB1bmtu
b3duRmllbGRzMi5tZXJnZVZhcmludEZpZWxkKDEwLCAyKTsKLQotICAgIGFzc2VydEVxdWFscyh1
bmtub3duRmllbGRzMSwgdW5rbm93bkZpZWxkczIpOwotICAgIGFzc2VydEVxdWFscyh1bmtub3du
RmllbGRzMS5oYXNoQ29kZSgpLCB1bmtub3duRmllbGRzMi5oYXNoQ29kZSgpKTsKLSAgICBhc3Nl
cnRGYWxzZSh1bmtub3duRmllbGRzMS5lcXVhbHMoVW5rbm93bkZpZWxkU2V0TGl0ZS5nZXREZWZh
dWx0SW5zdGFuY2UoKSkpOwotICAgIGFzc2VydEZhbHNlKHVua25vd25GaWVsZHMxLmhhc2hDb2Rl
KCkgPT0gVW5rbm93bkZpZWxkU2V0TGl0ZS5nZXREZWZhdWx0SW5zdGFuY2UoKS5oYXNoQ29kZSgp
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNdXRhYmxlQ29weU9mKCkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICBVbmtub3duRmllbGRTZXRMaXRlIHVua25vd25GaWVsZHMgPSBVbmtub3du
RmllbGRTZXRMaXRlLm5ld0luc3RhbmNlKCk7Ci0gICAgdW5rbm93bkZpZWxkcy5tZXJnZVZhcmlu
dEZpZWxkKDEwLCAyKTsKLSAgICB1bmtub3duRmllbGRzID0gVW5rbm93bkZpZWxkU2V0TGl0ZS5t
dXRhYmxlQ29weU9mKHVua25vd25GaWVsZHMsIHVua25vd25GaWVsZHMpOwotICAgIHVua25vd25G
aWVsZHMuY2hlY2tNdXRhYmxlKCk7Ci0KLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0KLSAg
ICAgICAgQ29kZWRJbnB1dFN0cmVhbS5uZXdJbnN0YW5jZSh0b0J5dGVTdHJpbmcodW5rbm93bkZp
ZWxkcykudG9CeXRlQXJyYXkoKSk7Ci0KLSAgICBpbnQgdGFnID0gaW5wdXQucmVhZFRhZygpOwot
ICAgIGFzc2VydEVxdWFscygxMCwgV2lyZUZvcm1hdC5nZXRUYWdGaWVsZE51bWJlcih0YWcpKTsK
LSAgICBhc3NlcnRFcXVhbHMoV2lyZUZvcm1hdC5XSVJFVFlQRV9WQVJJTlQsIFdpcmVGb3JtYXQu
Z2V0VGFnV2lyZVR5cGUodGFnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGlucHV0LnJlYWRVSW50
NjQoKSk7Ci0gICAgYXNzZXJ0RmFsc2UoaW5wdXQuaXNBdEVuZCgpKTsKLSAgICBpbnB1dC5yZWFk
VGFnKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEwLCBXaXJlRm9ybWF0LmdldFRhZ0ZpZWxkTnVtYmVy
KHRhZykpOwotICAgIGFzc2VydEVxdWFscyhXaXJlRm9ybWF0LldJUkVUWVBFX1ZBUklOVCwgV2ly
ZUZvcm1hdC5nZXRUYWdXaXJlVHlwZSh0YWcpKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgaW5wdXQu
cmVhZFVJbnQ2NCgpKTsKLSAgICBhc3NlcnRUcnVlKGlucHV0LmlzQXRFbmQoKSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0TXV0YWJsZUNvcHlPZl9lbXB0eSgpIHsKLSAgICBVbmtub3duRmll
bGRTZXRMaXRlIHVua25vd25GaWVsZHMgPSBVbmtub3duRmllbGRTZXRMaXRlLm11dGFibGVDb3B5
T2YoCi0gICAgICAgIFVua25vd25GaWVsZFNldExpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCksIFVu
a25vd25GaWVsZFNldExpdGUuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOwotICAgIHVua25vd25GaWVs
ZHMuY2hlY2tNdXRhYmxlKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMCwgdW5rbm93bkZpZWxkcy5n
ZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoQnl0ZVN0cmluZy5FTVBUWSwg
dG9CeXRlU3RyaW5nKHVua25vd25GaWVsZHMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RS
b3VuZFRyaXBzKCkgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAg
Rm9vIGZvbyA9IEZvby5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldFZhbHVlKDEpCi0gICAgICAg
IC5zZXRFeHRlbnNpb24oQmFyLmZvb0V4dCwgQmFyLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAg
LnNldE5hbWUoIm5hbWUiKQotICAgICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgIC5zZXRFeHRl
bnNpb24oTGl0ZUVxdWFsc0FuZEhhc2gudmFyaW50LCAyMikKLSAgICAgICAgLnNldEV4dGVuc2lv
bihMaXRlRXF1YWxzQW5kSGFzaC5maXhlZDMyLCA0NCkKLSAgICAgICAgLnNldEV4dGVuc2lvbihM
aXRlRXF1YWxzQW5kSGFzaC5maXhlZDY0LCA2NkwpCi0gICAgICAgIC5zZXRFeHRlbnNpb24oTGl0
ZUVxdWFsc0FuZEhhc2gubXlHcm91cCwgTGl0ZUVxdWFsc0FuZEhhc2guTXlHcm91cC5uZXdCdWls
ZGVyKCkKLSAgICAgICAgICAgIC5zZXRHcm91cFZhbHVlKCJ2YWx1ZSIpCi0gICAgICAgICAgICAu
YnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBGb28gY29weSA9IEZvby5wYXJzZUZy
b20oZm9vLnRvQnl0ZUFycmF5KCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKGZvby5nZXRTZXJpYWxp
emVkU2l6ZSgpLCBjb3B5LmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICAgIGFzc2VydEZhbHNlKGZv
by5lcXVhbHMoY29weSkpOwotCi0gICAgRm9vIHNlY29uZENvcHkgPSBGb28ucGFyc2VGcm9tKGZv
by50b0J5dGVBcnJheSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoY29weSwgc2Vjb25kQ29weSk7Ci0K
LSAgICBFeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkgPSBFeHRlbnNpb25S
ZWdpc3RyeUxpdGUubmV3SW5zdGFuY2UoKTsKLSAgICBMaXRlRXF1YWxzQW5kSGFzaC5yZWdpc3Rl
ckFsbEV4dGVuc2lvbnMoZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgIEZvbyBjb3B5T2ZDb3B5ID0g
Rm9vLnBhcnNlRnJvbShjb3B5LnRvQnl0ZUFycmF5KCksIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLQot
ICAgIGFzc2VydEVxdWFscyhmb28sIGNvcHlPZkNvcHkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdE1hbGZvcm1lZEJ5dGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAg
IEZvby5wYXJzZUZyb20oInRoaXMgaXMgYSBtYWxmb3JtZWQgcHJvdG9jb2wgYnVmZmVyIi5nZXRC
eXRlcyhJbnRlcm5hbC5VVEZfOCkpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TWlzc2luZ1N0YXJ0R3JvdXBUYWcoKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgIEJ5dGVTdHJpbmcuT3V0cHV0IGJ5dGVTdHJpbmdPdXRwdXQgPSBC
eXRlU3RyaW5nLm5ld091dHB1dCgpOwotICAgIENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCA9IENv
ZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNlKGJ5dGVTdHJpbmdPdXRwdXQpOwotICAgIG91dHB1
dC53cml0ZUdyb3VwTm9UYWcoRm9vLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSgxMSkuYnVpbGQoKSk7
Ci0gICAgb3V0cHV0LndyaXRlVGFnKDEwMCwgV2lyZUZvcm1hdC5XSVJFVFlQRV9FTkRfR1JPVVAp
OwotICAgIG91dHB1dC5mbHVzaCgpOwotCi0gICAgdHJ5IHsKLSAgICAgIEZvby5wYXJzZUZyb20o
Ynl0ZVN0cmluZ091dHB1dC50b0J5dGVTdHJpbmcoKSk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBj
YXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVj
dGVkLgotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNaXNzaW5nRW5kR3JvdXBUYWco
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIEJ5dGVTdHJpbmcuT3V0cHV0IGJ5dGVTdHJpbmdP
dXRwdXQgPSBCeXRlU3RyaW5nLm5ld091dHB1dCgpOwotICAgIENvZGVkT3V0cHV0U3RyZWFtIG91
dHB1dCA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNlKGJ5dGVTdHJpbmdPdXRwdXQpOwot
ICAgIG91dHB1dC53cml0ZVRhZygxMDAsIFdpcmVGb3JtYXQuV0lSRVRZUEVfU1RBUlRfR1JPVVAp
OwotICAgIG91dHB1dC53cml0ZUdyb3VwTm9UYWcoRm9vLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSgx
MSkuYnVpbGQoKSk7Ci0gICAgb3V0cHV0LmZsdXNoKCk7Ci0KLSAgICB0cnkgewotICAgICAgRm9v
LnBhcnNlRnJvbShieXRlU3RyaW5nT3V0cHV0LnRvQnl0ZVN0cmluZygpKTsKLSAgICAgIGZhaWwo
KTsKLSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAg
ICAgLy8gRXhwZWN0ZWQuCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1pc21hdGNo
aW5nR3JvdXBUYWdzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBCeXRlU3RyaW5nLk91dHB1
dCBieXRlU3RyaW5nT3V0cHV0ID0gQnl0ZVN0cmluZy5uZXdPdXRwdXQoKTsKLSAgICBDb2RlZE91
dHB1dFN0cmVhbSBvdXRwdXQgPSBDb2RlZE91dHB1dFN0cmVhbS5uZXdJbnN0YW5jZShieXRlU3Ry
aW5nT3V0cHV0KTsKLSAgICBvdXRwdXQud3JpdGVUYWcoMTAwLCBXaXJlRm9ybWF0LldJUkVUWVBF
X1NUQVJUX0dST1VQKTsKLSAgICBvdXRwdXQud3JpdGVHcm91cE5vVGFnKEZvby5uZXdCdWlsZGVy
KCkuc2V0VmFsdWUoMTEpLmJ1aWxkKCkpOwotICAgIG91dHB1dC53cml0ZVRhZygxMDEsIFdpcmVG
b3JtYXQuV0lSRVRZUEVfRU5EX0dST1VQKTsKLSAgICBvdXRwdXQuZmx1c2goKTsKLQotICAgIHRy
eSB7Ci0gICAgICBGb28ucGFyc2VGcm9tKGJ5dGVTdHJpbmdPdXRwdXQudG9CeXRlU3RyaW5nKCkp
OwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0VHJ1bmNhdGVkSW5wdXQoKSB7Ci0gICAgRm9vIGZvbyA9IEZvby5uZXdCdWlsZGVyKCkK
LSAgICAgICAgLnNldFZhbHVlKDEpCi0gICAgICAgIC5zZXRFeHRlbnNpb24oQmFyLmZvb0V4dCwg
QmFyLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLnNldE5hbWUoIm5hbWUiKQotICAgICAgICAg
ICAgLmJ1aWxkKCkpCi0gICAgICAgIC5zZXRFeHRlbnNpb24oTGl0ZUVxdWFsc0FuZEhhc2gudmFy
aW50LCAyMikKLSAgICAgICAgLnNldEV4dGVuc2lvbihMaXRlRXF1YWxzQW5kSGFzaC5teUdyb3Vw
LCBMaXRlRXF1YWxzQW5kSGFzaC5NeUdyb3VwLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLnNl
dEdyb3VwVmFsdWUoInZhbHVlIikKLSAgICAgICAgICAgIC5idWlsZCgpKQotICAgICAgICAuYnVp
bGQoKTsKLQotICAgIHRyeSB7Ci0gICAgICBGb28ucGFyc2VGcm9tKGZvby50b0J5dGVTdHJpbmco
KS5zdWJzdHJpbmcoMCwgZm9vLnRvQnl0ZVN0cmluZygpLnNpemUoKSAtIDEwKSk7Ci0gICAgICBm
YWlsKCk7Ci0gICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdE1h
a2VJbW11dGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBVbmtub3duRmllbGRTZXRMaXRl
IHVua25vd25GaWVsZHMgPSBVbmtub3duRmllbGRTZXRMaXRlLm5ld0luc3RhbmNlKCk7Ci0gICAg
dW5rbm93bkZpZWxkcy5tYWtlSW1tdXRhYmxlKCk7Ci0gICAgCi0gICAgdHJ5IHsKLSAgICAgIHVu
a25vd25GaWVsZHMubWVyZ2VWYXJpbnRGaWVsZCgxLCAxKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9
IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBleHBlY3RlZCkge30KLSAgICAK
LSAgICB0cnkgewotICAgICAgdW5rbm93bkZpZWxkcy5tZXJnZUxlbmd0aERlbGltaXRlZEZpZWxk
KDIsIEJ5dGVTdHJpbmcuY29weUZyb21VdGY4KCJoZWxsbyIpKTsKLSAgICAgIGZhaWwoKTsKLSAg
ICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBleHBlY3RlZCkge30KLSAg
ICAKLSAgICB0cnkgewotICAgICAgdW5rbm93bkZpZWxkcy5tZXJnZUZpZWxkRnJvbSgxLCBDb2Rl
ZElucHV0U3RyZWFtLm5ld0luc3RhbmNlKG5ldyBieXRlWzBdKSk7Ci0gICAgICBmYWlsKCk7Ci0g
ICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZXhwZWN0ZWQpIHt9Ci0g
IH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RFbmRUb0VuZCgpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIFRlc3RBbGxUeXBlc0xpdGUgdGVzdEFsbFR5cGVzID0gVGVzdEFsbFR5cGVzTGl0ZS5nZXRE
ZWZhdWx0SW5zdGFuY2UoKTsKLSAgICB0cnkgewotICAgICAgdGVzdEFsbFR5cGVzLnVua25vd25G
aWVsZHMuY2hlY2tNdXRhYmxlKCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBw
b3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZXhwZWN0ZWQpIHt9Ci0gICAgCi0gICAgdGVzdEFsbFR5
cGVzID0gVGVzdEFsbFR5cGVzTGl0ZS5wYXJzZUZyb20obmV3IGJ5dGVbMF0pOwotICAgIHRyeSB7
Ci0gICAgICB0ZXN0QWxsVHlwZXMudW5rbm93bkZpZWxkcy5jaGVja011dGFibGUoKTsKLSAgICAg
IGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBleHBl
Y3RlZCkge30KLSAgICAKLSAgICB0ZXN0QWxsVHlwZXMgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1
aWxkZXIoKS5idWlsZCgpOwotICAgIHRyeSB7Ci0gICAgICB0ZXN0QWxsVHlwZXMudW5rbm93bkZp
ZWxkcy5jaGVja011dGFibGUoKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBv
cnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBleHBlY3RlZCkge30KLSAgICAKLSAgICB0ZXN0QWxsVHlw
ZXMgPSBUZXN0QWxsVHlwZXNMaXRlLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0RGVmYXVsdEJv
b2wodHJ1ZSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIHRlc3RBbGxUeXBl
cy51bmtub3duRmllbGRzLmNoZWNrTXV0YWJsZSgpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0
Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGV4cGVjdGVkKSB7fQotICAgIAotICAg
IFRlc3RBbGxFeHRlbnNpb25zTGl0ZSB0ZXN0QWxsRXh0ZW5zaW9ucyA9IFRlc3RBbGxFeHRlbnNp
b25zTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLm1lcmdlRnJvbShUZXN0QWxsRXh0ZW5zaW9u
c0xpdGUubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0RXh0ZW5zaW9uKFVuaXR0ZXN0TGl0
ZS5vcHRpb25hbEludDMyRXh0ZW5zaW9uTGl0ZSwgMikKLSAgICAgICAgICAgIC5idWlsZCgpLnRv
Qnl0ZUFycmF5KCkpCi0gICAgICAgIC5idWlsZCgpOwotICAgIHRyeSB7Ci0gICAgICB0ZXN0QWxs
RXh0ZW5zaW9ucy51bmtub3duRmllbGRzLmNoZWNrTXV0YWJsZSgpOwotICAgICAgZmFpbCgpOwot
ICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGV4cGVjdGVkKSB7fQot
ICB9Ci0KLSAgcHJpdmF0ZSBCeXRlU3RyaW5nIHRvQnl0ZVN0cmluZyhVbmtub3duRmllbGRTZXRM
aXRlIHVua25vd25GaWVsZHMpIHsKLSAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnl0ZUFycmF5
T3V0cHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIENvZGVkT3V0
cHV0U3RyZWFtIG91dHB1dCA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNlKGJ5dGVBcnJh
eU91dHB1dFN0cmVhbSk7Ci0gICAgdHJ5IHsKLSAgICAgIHVua25vd25GaWVsZHMud3JpdGVUbyhv
dXRwdXQpOwotICAgICAgb3V0cHV0LmZsdXNoKCk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24g
ZSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgfQotICAgIHJl
dHVybiBCeXRlU3RyaW5nLmNvcHlGcm9tKGJ5dGVBcnJheU91dHB1dFN0cmVhbS50b0J5dGVBcnJh
eSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL1Vua25vd25GaWVsZFNldFRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Vbmtub3duRmllbGRTZXRUZXN0LmphdmEKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMzgwZjcwMGFjMGZjZTIxZmI1MmI2YmIwNzYxNzZi
ZTJlMDA4YmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL1Vua25vd25GaWVsZFNl
dFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1NCArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1p
bXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90bzsKLWltcG9ydCBwcm90b2J1Zl91
bml0dGVzdC5Vbml0dGVzdFByb3RvLkZvcmVpZ25FbnVtOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbEV4dGVuc2lvbnM7Ci1pbXBvcnQgcHJvdG9idWZfdW5p
dHRlc3QuVW5pdHRlc3RQcm90by5UZXN0QWxsVHlwZXM7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRl
c3QuVW5pdHRlc3RQcm90by5UZXN0RW1wdHlNZXNzYWdlOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEVtcHR5TWVzc2FnZVdpdGhFeHRlbnNpb25zOwotaW1wb3J0
IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdFBhY2tlZEV4dGVuc2lvbnM7Ci1p
bXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRlc3RQcm90by5UZXN0UGFja2VkVHlwZXM7Ci0K
LWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJy
YXlzOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogVGVzdHMgcmVsYXRlZCB0byB1
bmtub3duIGZpZWxkIGhhbmRsaW5nLgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdvb2dsZS5jb20g
KEtlbnRvbiBWYXJkYSkKLSAqLwotcHVibGljIGNsYXNzIFVua25vd25GaWVsZFNldFRlc3QgZXh0
ZW5kcyBUZXN0Q2FzZSB7Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93
cyBFeGNlcHRpb24gewotICAgIGRlc2NyaXB0b3IgPSBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRv
cigpOwotICAgIGFsbEZpZWxkcyA9IFRlc3RVdGlsLmdldEFsbFNldCgpOwotICAgIGFsbEZpZWxk
c0RhdGEgPSBhbGxGaWVsZHMudG9CeXRlU3RyaW5nKCk7Ci0gICAgZW1wdHlNZXNzYWdlID0gVGVz
dEVtcHR5TWVzc2FnZS5wYXJzZUZyb20oYWxsRmllbGRzRGF0YSk7Ci0gICAgdW5rbm93bkZpZWxk
cyA9IGVtcHR5TWVzc2FnZS5nZXRVbmtub3duRmllbGRzKCk7Ci0gIH0KLQotICBVbmtub3duRmll
bGRTZXQuRmllbGQgZ2V0RmllbGQoU3RyaW5nIG5hbWUpIHsKLSAgICBEZXNjcmlwdG9ycy5GaWVs
ZERlc2NyaXB0b3IgZmllbGQgPSBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZShuYW1lKTsKLSAg
ICBhc3NlcnROb3ROdWxsKGZpZWxkKTsKLSAgICByZXR1cm4gdW5rbm93bkZpZWxkcy5nZXRGaWVs
ZChmaWVsZC5nZXROdW1iZXIoKSk7Ci0gIH0KLQotICAvLyBDb25zdHJ1Y3RzIGEgcHJvdG9jb2wg
YnVmZmVyIHdoaWNoIGNvbnRhaW5zIGZpZWxkcyB3aXRoIGFsbCB0aGUgc2FtZQotICAvLyBudW1i
ZXJzIGFzIGFsbEZpZWxkc0RhdGEgZXhjZXB0IHRoYXQgZWFjaCBmaWVsZCBpcyBzb21lIG90aGVy
IHdpcmUKLSAgLy8gdHlwZS4KLSAgQnl0ZVN0cmluZyBnZXRCaXphcnJvRGF0YSgpIHRocm93cyBF
eGNlcHRpb24gewotICAgIFVua25vd25GaWVsZFNldC5CdWlsZGVyIGJpemFycm9GaWVsZHMgPSBV
bmtub3duRmllbGRTZXQubmV3QnVpbGRlcigpOwotCi0gICAgVW5rbm93bkZpZWxkU2V0LkZpZWxk
IHZhcmludEZpZWxkID0KLSAgICAgIFVua25vd25GaWVsZFNldC5GaWVsZC5uZXdCdWlsZGVyKCku
YWRkVmFyaW50KDEpLmJ1aWxkKCk7Ci0gICAgVW5rbm93bkZpZWxkU2V0LkZpZWxkIGZpeGVkMzJG
aWVsZCA9Ci0gICAgICBVbmtub3duRmllbGRTZXQuRmllbGQubmV3QnVpbGRlcigpLmFkZEZpeGVk
MzIoMSkuYnVpbGQoKTsKLQotICAgIGZvciAoTWFwLkVudHJ5PEludGVnZXIsIFVua25vd25GaWVs
ZFNldC5GaWVsZD4gZW50cnkgOgotICAgICAgICAgdW5rbm93bkZpZWxkcy5hc01hcCgpLmVudHJ5
U2V0KCkpIHsKLSAgICAgIGlmIChlbnRyeS5nZXRWYWx1ZSgpLmdldFZhcmludExpc3QoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgLy8gT3JpZ2luYWwgZmllbGQgaXMgbm90IGEgdmFyaW50LCBzbyB1
c2UgYSB2YXJpbnQuCi0gICAgICAgIGJpemFycm9GaWVsZHMuYWRkRmllbGQoZW50cnkuZ2V0S2V5
KCksIHZhcmludEZpZWxkKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE9yaWdpbmFsIGZp
ZWxkICppcyogYSB2YXJpbnQsIHNvIHVzZSBzb21ldGhpbmcgZWxzZS4KLSAgICAgICAgYml6YXJy
b0ZpZWxkcy5hZGRGaWVsZChlbnRyeS5nZXRLZXkoKSwgZml4ZWQzMkZpZWxkKTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gYml6YXJyb0ZpZWxkcy5idWlsZCgpLnRvQnl0ZVN0cmluZygp
OwotICB9Ci0KLSAgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICBUZXN0QWxs
VHlwZXMgYWxsRmllbGRzOwotICBCeXRlU3RyaW5nIGFsbEZpZWxkc0RhdGE7Ci0KLSAgLy8gQW4g
ZW1wdHkgbWVzc2FnZSB0aGF0IGhhcyBiZWVuIHBhcnNlZCBmcm9tIGFsbEZpZWxkc0RhdGEuICBT
bywgaXQgaGFzCi0gIC8vIHVua25vd24gZmllbGRzIG9mIGV2ZXJ5IHR5cGUuCi0gIFRlc3RFbXB0
eU1lc3NhZ2UgZW1wdHlNZXNzYWdlOwotICBVbmtub3duRmllbGRTZXQgdW5rbm93bkZpZWxkczsK
LQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotCi0gIHB1YmxpYyB2b2lkIHRlc3RWYXJpbnQoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBVbmtub3duRmllbGRTZXQuRmllbGQgZmllbGQgPSBnZXRGaWVsZCgib3B0
aW9uYWxfaW50MzIiKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgZmllbGQuZ2V0VmFyaW50TGlzdCgp
LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFsbEZpZWxkcy5nZXRPcHRpb25hbEludDMyKCks
Ci0gICAgICAgICAgICAgICAgIChsb25nKSBmaWVsZC5nZXRWYXJpbnRMaXN0KCkuZ2V0KDApKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RGaXhlZDMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgVW5rbm93bkZpZWxkU2V0LkZpZWxkIGZpZWxkID0gZ2V0RmllbGQoIm9wdGlvbmFsX2ZpeGVk
MzIiKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgZmllbGQuZ2V0Rml4ZWQzMkxpc3QoKS5zaXplKCkp
OwotICAgIGFzc2VydEVxdWFscyhhbGxGaWVsZHMuZ2V0T3B0aW9uYWxGaXhlZDMyKCksCi0gICAg
ICAgICAgICAgICAgIChpbnQpIGZpZWxkLmdldEZpeGVkMzJMaXN0KCkuZ2V0KDApKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaXhlZDY0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVW5r
bm93bkZpZWxkU2V0LkZpZWxkIGZpZWxkID0gZ2V0RmllbGQoIm9wdGlvbmFsX2ZpeGVkNjQiKTsK
LSAgICBhc3NlcnRFcXVhbHMoMSwgZmllbGQuZ2V0Rml4ZWQ2NExpc3QoKS5zaXplKCkpOwotICAg
IGFzc2VydEVxdWFscyhhbGxGaWVsZHMuZ2V0T3B0aW9uYWxGaXhlZDY0KCksCi0gICAgICAgICAg
ICAgICAgIChsb25nKSBmaWVsZC5nZXRGaXhlZDY0TGlzdCgpLmdldCgwKSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0TGVuZ3RoRGVsaW1pdGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAg
VW5rbm93bkZpZWxkU2V0LkZpZWxkIGZpZWxkID0gZ2V0RmllbGQoIm9wdGlvbmFsX2J5dGVzIik7
Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGZpZWxkLmdldExlbmd0aERlbGltaXRlZExpc3QoKS5zaXpl
KCkpOwotICAgIGFzc2VydEVxdWFscyhhbGxGaWVsZHMuZ2V0T3B0aW9uYWxCeXRlcygpLAotICAg
ICAgICAgICAgICAgICBmaWVsZC5nZXRMZW5ndGhEZWxpbWl0ZWRMaXN0KCkuZ2V0KDApKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3RHcm91cCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIERl
c2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBuZXN0ZWRGaWVsZERlc2NyaXB0b3IgPQotICAgICAg
VGVzdEFsbFR5cGVzLk9wdGlvbmFsR3JvdXAuZ2V0RGVzY3JpcHRvcigpLmZpbmRGaWVsZEJ5TmFt
ZSgiYSIpOwotICAgIGFzc2VydE5vdE51bGwobmVzdGVkRmllbGREZXNjcmlwdG9yKTsKLQotICAg
IFVua25vd25GaWVsZFNldC5GaWVsZCBmaWVsZCA9IGdldEZpZWxkKCJvcHRpb25hbGdyb3VwIik7
Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGZpZWxkLmdldEdyb3VwTGlzdCgpLnNpemUoKSk7Ci0KLSAg
ICBVbmtub3duRmllbGRTZXQgZ3JvdXAgPSBmaWVsZC5nZXRHcm91cExpc3QoKS5nZXQoMCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDEsIGdyb3VwLmFzTWFwKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRUcnVl
KGdyb3VwLmhhc0ZpZWxkKG5lc3RlZEZpZWxkRGVzY3JpcHRvci5nZXROdW1iZXIoKSkpOwotCi0g
ICAgVW5rbm93bkZpZWxkU2V0LkZpZWxkIG5lc3RlZEZpZWxkID0KLSAgICAgIGdyb3VwLmdldEZp
ZWxkKG5lc3RlZEZpZWxkRGVzY3JpcHRvci5nZXROdW1iZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDEsIG5lc3RlZEZpZWxkLmdldFZhcmludExpc3QoKS5zaXplKCkpOwotICAgIGFzc2VydEVxdWFs
cyhhbGxGaWVsZHMuZ2V0T3B0aW9uYWxHcm91cCgpLmdldEEoKSwKLSAgICAgICAgICAgICAgICAg
KGxvbmcpIG5lc3RlZEZpZWxkLmdldFZhcmludExpc3QoKS5nZXQoMCkpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdFNlcmlhbGl6ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIENoZWNr
IHRoYXQgc2VyaWFsaXppbmcgdGhlIFVua25vd25GaWVsZFNldCBwcm9kdWNlcyB0aGUgb3JpZ2lu
YWwgZGF0YQotICAgIC8vIGFnYWluLgotICAgIEJ5dGVTdHJpbmcgZGF0YSA9IGVtcHR5TWVzc2Fn
ZS50b0J5dGVTdHJpbmcoKTsKLSAgICBhc3NlcnRFcXVhbHMoYWxsRmllbGRzRGF0YSwgZGF0YSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q29weUZyb20oKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBUZXN0RW1wdHlNZXNzYWdlIG1lc3NhZ2UgPQotICAgICAgVGVzdEVtcHR5TWVzc2FnZS5u
ZXdCdWlsZGVyKCkubWVyZ2VGcm9tKGVtcHR5TWVzc2FnZSkuYnVpbGQoKTsKLQotICAgIGFzc2Vy
dEVxdWFscyhlbXB0eU1lc3NhZ2UudG9TdHJpbmcoKSwgbWVzc2FnZS50b1N0cmluZygpKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZUZyb20oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBUZXN0RW1wdHlNZXNzYWdlIHNvdXJjZSA9Ci0gICAgICBUZXN0RW1wdHlNZXNzYWdlLm5ld0J1
aWxkZXIoKQotICAgICAgICAuc2V0VW5rbm93bkZpZWxkcygKLSAgICAgICAgICBVbmtub3duRmll
bGRTZXQubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuYWRkRmllbGQoMiwKLSAgICAgICAgICAg
ICAgVW5rbm93bkZpZWxkU2V0LkZpZWxkLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgICAgIC5h
ZGRWYXJpbnQoMikuYnVpbGQoKSkKLSAgICAgICAgICAgIC5hZGRGaWVsZCgzLAotICAgICAgICAg
ICAgICBVbmtub3duRmllbGRTZXQuRmllbGQubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAgICAg
LmFkZFZhcmludCg0KS5idWlsZCgpKQotICAgICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgIC5i
dWlsZCgpOwotICAgIFRlc3RFbXB0eU1lc3NhZ2UgZGVzdGluYXRpb24gPQotICAgICAgVGVzdEVt
cHR5TWVzc2FnZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldFVua25vd25GaWVsZHMoCi0gICAg
ICAgICAgVW5rbm93bkZpZWxkU2V0Lm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLmFkZEZpZWxk
KDEsCi0gICAgICAgICAgICAgIFVua25vd25GaWVsZFNldC5GaWVsZC5uZXdCdWlsZGVyKCkKLSAg
ICAgICAgICAgICAgICAuYWRkVmFyaW50KDEpLmJ1aWxkKCkpCi0gICAgICAgICAgICAuYWRkRmll
bGQoMywKLSAgICAgICAgICAgICAgVW5rbm93bkZpZWxkU2V0LkZpZWxkLm5ld0J1aWxkZXIoKQot
ICAgICAgICAgICAgICAgIC5hZGRWYXJpbnQoMykuYnVpbGQoKSkKLSAgICAgICAgICAgIC5idWls
ZCgpKQotICAgICAgICAubWVyZ2VGcm9tKHNvdXJjZSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAg
ICBhc3NlcnRFcXVhbHMoCi0gICAgICAiMTogMVxuIiArCi0gICAgICAiMjogMlxuIiArCi0gICAg
ICAiMzogM1xuIiArCi0gICAgICAiMzogNFxuIiwKLSAgICAgIGRlc3RpbmF0aW9uLnRvU3RyaW5n
KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7
Ci0gICAgVW5rbm93bkZpZWxkU2V0IGZpZWxkcyA9Ci0gICAgICBVbmtub3duRmllbGRTZXQubmV3
QnVpbGRlcigpLm1lcmdlRnJvbSh1bmtub3duRmllbGRzKS5jbGVhcigpLmJ1aWxkKCk7Ci0gICAg
YXNzZXJ0VHJ1ZShmaWVsZHMuYXNNYXAoKS5pc0VtcHR5KCkpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdENsZWFyTWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RFbXB0eU1l
c3NhZ2UgbWVzc2FnZSA9Ci0gICAgICBUZXN0RW1wdHlNZXNzYWdlLm5ld0J1aWxkZXIoKS5tZXJn
ZUZyb20oZW1wdHlNZXNzYWdlKS5jbGVhcigpLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAs
IG1lc3NhZ2UuZ2V0U2VyaWFsaXplZFNpemUoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRl
c3RDbGVhckZpZWxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaW50IGZpZWxkTnVtYmVyID0g
dW5rbm93bkZpZWxkcy5hc01hcCgpLmtleVNldCgpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIFVu
a25vd25GaWVsZFNldCBmaWVsZHMgPQotICAgICAgICBVbmtub3duRmllbGRTZXQubmV3QnVpbGRl
cigpLm1lcmdlRnJvbSh1bmtub3duRmllbGRzKS5jbGVhckZpZWxkKGZpZWxkTnVtYmVyKS5idWls
ZCgpOwotICAgIGFzc2VydEZhbHNlKGZpZWxkcy5oYXNGaWVsZChmaWVsZE51bWJlcikpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNlS25vd25BbmRVbmtub3duKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgLy8gVGVzdCBtaXhpbmcga25vd24gYW5kIHVua25vd24gZmllbGRzIHdoZW4g
cGFyc2luZy4KLQotICAgIFVua25vd25GaWVsZFNldCBmaWVsZHMgPQotICAgICAgVW5rbm93bkZp
ZWxkU2V0Lm5ld0J1aWxkZXIodW5rbm93bkZpZWxkcykKLSAgICAgICAgLmFkZEZpZWxkKDEyMzQ1
NiwKLSAgICAgICAgICBVbmtub3duRmllbGRTZXQuRmllbGQubmV3QnVpbGRlcigpLmFkZFZhcmlu
dCg2NTQzMjEpLmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgpOwotCi0gICAgQnl0ZVN0cmluZyBk
YXRhID0gZmllbGRzLnRvQnl0ZVN0cmluZygpOwotICAgIFRlc3RBbGxUeXBlcyBkZXN0aW5hdGlv
biA9IFRlc3RBbGxUeXBlcy5wYXJzZUZyb20oZGF0YSk7Ci0KLSAgICBUZXN0VXRpbC5hc3NlcnRB
bGxGaWVsZHNTZXQoZGVzdGluYXRpb24pOwotICAgIGFzc2VydEVxdWFscygxLCBkZXN0aW5hdGlv
bi5nZXRVbmtub3duRmllbGRzKCkuYXNNYXAoKS5zaXplKCkpOwotCi0gICAgVW5rbm93bkZpZWxk
U2V0LkZpZWxkIGZpZWxkID0KLSAgICAgIGRlc3RpbmF0aW9uLmdldFVua25vd25GaWVsZHMoKS5n
ZXRGaWVsZCgxMjM0NTYpOwotICAgIGFzc2VydEVxdWFscygxLCBmaWVsZC5nZXRWYXJpbnRMaXN0
KCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNjU0MzIxLCAobG9uZykgZmllbGQuZ2V0VmFy
aW50TGlzdCgpLmdldCgwKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0V3JvbmdUeXBlVHJl
YXRlZEFzVW5rbm93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFRlc3QgdGhhdCBmaWVs
ZHMgb2YgdGhlIHdyb25nIHdpcmUgdHlwZSBhcmUgdHJlYXRlZCBsaWtlIHVua25vd24gZmllbGRz
Ci0gICAgLy8gd2hlbiBwYXJzaW5nLgotCi0gICAgQnl0ZVN0cmluZyBiaXphcnJvRGF0YSA9IGdl
dEJpemFycm9EYXRhKCk7Ci0gICAgVGVzdEFsbFR5cGVzIGFsbFR5cGVzTWVzc2FnZSA9IFRlc3RB
bGxUeXBlcy5wYXJzZUZyb20oYml6YXJyb0RhdGEpOwotICAgIFRlc3RFbXB0eU1lc3NhZ2UgZW1w
dHlNZXNzYWdlID0gVGVzdEVtcHR5TWVzc2FnZS5wYXJzZUZyb20oYml6YXJyb0RhdGEpOwotCi0g
ICAgLy8gQWxsIGZpZWxkcyBzaG91bGQgaGF2ZSBiZWVuIGludGVycHJldGVkIGFzIHVua25vd24s
IHNvIHRoZSBkZWJ1ZyBzdHJpbmdzCi0gICAgLy8gc2hvdWxkIGJlIHRoZSBzYW1lLgotICAgIGFz
c2VydEVxdWFscyhlbXB0eU1lc3NhZ2UudG9TdHJpbmcoKSwgYWxsVHlwZXNNZXNzYWdlLnRvU3Ry
aW5nKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFVua25vd25FeHRlbnNpb25zKCkgdGhy
b3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gTWFrZSBzdXJlIGZpZWxkcyBhcmUgcHJvcGVybHkgcGFy
c2VkIHRvIHRoZSBVbmtub3duRmllbGRTZXQgZXZlbiB3aGVuCi0gICAgLy8gdGhleSBhcmUgZGVj
bGFyZWQgYXMgZXh0ZW5zaW9uIG51bWJlcnMuCi0KLSAgICBUZXN0RW1wdHlNZXNzYWdlV2l0aEV4
dGVuc2lvbnMgbWVzc2FnZSA9Ci0gICAgICBUZXN0RW1wdHlNZXNzYWdlV2l0aEV4dGVuc2lvbnMu
cGFyc2VGcm9tKGFsbEZpZWxkc0RhdGEpOwotCi0gICAgYXNzZXJ0RXF1YWxzKHVua25vd25GaWVs
ZHMuYXNNYXAoKS5zaXplKCksCi0gICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0VW5rbm93bkZp
ZWxkcygpLmFzTWFwKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoYWxsRmllbGRzRGF0YSwg
bWVzc2FnZS50b0J5dGVTdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0V3JvbmdF
eHRlbnNpb25UeXBlVHJlYXRlZEFzVW5rbm93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8v
IFRlc3QgdGhhdCBmaWVsZHMgb2YgdGhlIHdyb25nIHdpcmUgdHlwZSBhcmUgdHJlYXRlZCBsaWtl
IHVua25vd24gZmllbGRzCi0gICAgLy8gd2hlbiBwYXJzaW5nIGV4dGVuc2lvbnMuCi0KLSAgICBC
eXRlU3RyaW5nIGJpemFycm9EYXRhID0gZ2V0Qml6YXJyb0RhdGEoKTsKLSAgICBUZXN0QWxsRXh0
ZW5zaW9ucyBhbGxFeHRlbnNpb25zTWVzc2FnZSA9Ci0gICAgICBUZXN0QWxsRXh0ZW5zaW9ucy5w
YXJzZUZyb20oYml6YXJyb0RhdGEpOwotICAgIFRlc3RFbXB0eU1lc3NhZ2UgZW1wdHlNZXNzYWdl
ID0gVGVzdEVtcHR5TWVzc2FnZS5wYXJzZUZyb20oYml6YXJyb0RhdGEpOwotCi0gICAgLy8gQWxs
IGZpZWxkcyBzaG91bGQgaGF2ZSBiZWVuIGludGVycHJldGVkIGFzIHVua25vd24sIHNvIHRoZSBk
ZWJ1ZyBzdHJpbmdzCi0gICAgLy8gc2hvdWxkIGJlIHRoZSBzYW1lLgotICAgIGFzc2VydEVxdWFs
cyhlbXB0eU1lc3NhZ2UudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgYWxsRXh0ZW5zaW9u
c01lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VVbmtu
b3duRW51bVZhbHVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgRGVzY3JpcHRvcnMuRmllbGRE
ZXNjcmlwdG9yIHNpbmd1bGFyRmllbGQgPQotICAgICAgVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0
b3IoKS5maW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX25lc3RlZF9lbnVtIik7Ci0gICAgRGVzY3Jp
cHRvcnMuRmllbGREZXNjcmlwdG9yIHJlcGVhdGVkRmllbGQgPQotICAgICAgVGVzdEFsbFR5cGVz
LmdldERlc2NyaXB0b3IoKS5maW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX25lc3RlZF9lbnVtIik7
Ci0gICAgYXNzZXJ0Tm90TnVsbChzaW5ndWxhckZpZWxkKTsKLSAgICBhc3NlcnROb3ROdWxsKHJl
cGVhdGVkRmllbGQpOwotCi0gICAgQnl0ZVN0cmluZyBkYXRhID0KLSAgICAgIFVua25vd25GaWVs
ZFNldC5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFkZEZpZWxkKHNpbmd1bGFyRmllbGQuZ2V0TnVt
YmVyKCksCi0gICAgICAgICAgVW5rbm93bkZpZWxkU2V0LkZpZWxkLm5ld0J1aWxkZXIoKQotICAg
ICAgICAgICAgLmFkZFZhcmludChUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVIuZ2V0TnVtYmVy
KCkpCi0gICAgICAgICAgICAuYWRkVmFyaW50KDUpICAgLy8gbm90IHZhbGlkCi0gICAgICAgICAg
ICAuYnVpbGQoKSkKLSAgICAgICAgLmFkZEZpZWxkKHJlcGVhdGVkRmllbGQuZ2V0TnVtYmVyKCks
Ci0gICAgICAgICAgVW5rbm93bkZpZWxkU2V0LkZpZWxkLm5ld0J1aWxkZXIoKQotICAgICAgICAg
ICAgLmFkZFZhcmludChUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5GT08uZ2V0TnVtYmVyKCkpCi0g
ICAgICAgICAgICAuYWRkVmFyaW50KDQpICAgLy8gbm90IHZhbGlkCi0gICAgICAgICAgICAuYWRk
VmFyaW50KFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkJBWi5nZXROdW1iZXIoKSkKLSAgICAgICAg
ICAgIC5hZGRWYXJpbnQoNikgICAvLyBub3QgdmFsaWQKLSAgICAgICAgICAgIC5idWlsZCgpKQot
ICAgICAgICAuYnVpbGQoKQotICAgICAgICAudG9CeXRlU3RyaW5nKCk7Ci0KLSAgICB7Ci0gICAg
ICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IFRlc3RBbGxUeXBlcy5wYXJzZUZyb20oZGF0YSk7Ci0g
ICAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFSLAotICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UuZ2V0T3B0aW9uYWxOZXN0ZWRFbnVtKCkpOwotICAgICAgYXNzZXJ0
RXF1YWxzKAotICAgICAgICBBcnJheXMuYXNMaXN0KFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkZP
TywgVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFaKSwKLSAgICAgICAgbWVzc2FnZS5nZXRSZXBl
YXRlZE5lc3RlZEVudW1MaXN0KCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKEFycmF5cy5hc0xpc3Qo
NUwpLAotICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0VW5rbm93bkZpZWxkcygpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWVsZChzaW5ndWxhckZpZWxkLmdldE51bWJlcigp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0VmFyaW50TGlzdCgpKTsKLSAgICAgIGFz
c2VydEVxdWFscyhBcnJheXMuYXNMaXN0KDRMLCA2TCksCi0gICAgICAgICAgICAgICAgICAgbWVz
c2FnZS5nZXRVbmtub3duRmllbGRzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZp
ZWxkKHJlcGVhdGVkRmllbGQuZ2V0TnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IC5nZXRWYXJpbnRMaXN0KCkpOwotICAgIH0KLQotICAgIHsKLSAgICAgIFRlc3RBbGxFeHRlbnNp
b25zIG1lc3NhZ2UgPQotICAgICAgICBUZXN0QWxsRXh0ZW5zaW9ucy5wYXJzZUZyb20oZGF0YSwg
VGVzdFV0aWwuZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoVGVz
dEFsbFR5cGVzLk5lc3RlZEVudW0uQkFSLAotICAgICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihV
bml0dGVzdFByb3RvLm9wdGlvbmFsTmVzdGVkRW51bUV4dGVuc2lvbikpOwotICAgICAgYXNzZXJ0
RXF1YWxzKAotICAgICAgICBBcnJheXMuYXNMaXN0KFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLkZP
TywgVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFaKSwKLSAgICAgICAgbWVzc2FnZS5nZXRFeHRl
bnNpb24oVW5pdHRlc3RQcm90by5yZXBlYXRlZE5lc3RlZEVudW1FeHRlbnNpb24pKTsKLSAgICAg
IGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KDVMKSwKLSAgICAgICAgICAgICAgICAgICBtZXNz
YWdlLmdldFVua25vd25GaWVsZHMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Rmll
bGQoc2luZ3VsYXJGaWVsZC5nZXROdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
LmdldFZhcmludExpc3QoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoQXJyYXlzLmFzTGlzdCg0TCwg
NkwpLAotICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0VW5rbm93bkZpZWxkcygpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWVsZChyZXBlYXRlZEZpZWxkLmdldE51bWJlcigp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0VmFyaW50TGlzdCgpKTsKLSAgICB9Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TGFyZ2VWYXJpbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBCeXRlU3RyaW5nIGRhdGEgPQotICAgICAgVW5rbm93bkZpZWxkU2V0Lm5ld0J1aWxkZXIo
KQotICAgICAgICAuYWRkRmllbGQoMSwKLSAgICAgICAgICBVbmtub3duRmllbGRTZXQuRmllbGQu
bmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuYWRkVmFyaW50KDB4N0ZGRkZGRkZGRkZGRkZGRkwp
Ci0gICAgICAgICAgICAuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxkKCkKLSAgICAgICAgLnRvQnl0
ZVN0cmluZygpOwotICAgIFVua25vd25GaWVsZFNldCBwYXJzZWQgPSBVbmtub3duRmllbGRTZXQu
cGFyc2VGcm9tKGRhdGEpOwotICAgIFVua25vd25GaWVsZFNldC5GaWVsZCBmaWVsZCA9IHBhcnNl
ZC5nZXRGaWVsZCgxKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgZmllbGQuZ2V0VmFyaW50TGlzdCgp
LnNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDB4N0ZGRkZGRkZGRkZGRkZGRkwsIChsb25nKWZp
ZWxkLmdldFZhcmludExpc3QoKS5nZXQoMCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEVx
dWFsc0FuZEhhc2hDb2RlKCkgewotICAgIFVua25vd25GaWVsZFNldC5GaWVsZCBmaXhlZDMyRmll
bGQgPQotICAgICAgICBVbmtub3duRmllbGRTZXQuRmllbGQubmV3QnVpbGRlcigpCi0gICAgICAg
ICAgICAuYWRkRml4ZWQzMigxKQotICAgICAgICAgICAgLmJ1aWxkKCk7Ci0gICAgVW5rbm93bkZp
ZWxkU2V0LkZpZWxkIGZpeGVkNjRGaWVsZCA9Ci0gICAgICAgIFVua25vd25GaWVsZFNldC5GaWVs
ZC5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgIC5hZGRGaXhlZDY0KDEpCi0gICAgICAgICAgICAu
YnVpbGQoKTsKLSAgICBVbmtub3duRmllbGRTZXQuRmllbGQgdmFySW50RmllbGQgPQotICAgICAg
ICBVbmtub3duRmllbGRTZXQuRmllbGQubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuYWRkVmFy
aW50KDEpCi0gICAgICAgICAgICAuYnVpbGQoKTsKLSAgICBVbmtub3duRmllbGRTZXQuRmllbGQg
bGVuZ3RoRGVsaW1pdGVkRmllbGQgPQotICAgICAgICBVbmtub3duRmllbGRTZXQuRmllbGQubmV3
QnVpbGRlcigpCi0gICAgICAgICAgICAuYWRkTGVuZ3RoRGVsaW1pdGVkKEJ5dGVTdHJpbmcuRU1Q
VFkpCi0gICAgICAgICAgICAuYnVpbGQoKTsKLSAgICBVbmtub3duRmllbGRTZXQuRmllbGQgZ3Jv
dXBGaWVsZCA9Ci0gICAgICAgIFVua25vd25GaWVsZFNldC5GaWVsZC5uZXdCdWlsZGVyKCkKLSAg
ICAgICAgICAgIC5hZGRHcm91cCh1bmtub3duRmllbGRzKQotICAgICAgICAgICAgLmJ1aWxkKCk7
Ci0KLSAgICBVbmtub3duRmllbGRTZXQgYSA9Ci0gICAgICAgIFVua25vd25GaWVsZFNldC5uZXdC
dWlsZGVyKCkKLSAgICAgICAgICAgIC5hZGRGaWVsZCgxLCBmaXhlZDMyRmllbGQpCi0gICAgICAg
ICAgICAuYnVpbGQoKTsKLSAgICBVbmtub3duRmllbGRTZXQgYiA9Ci0gICAgICAgIFVua25vd25G
aWVsZFNldC5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgIC5hZGRGaWVsZCgxLCBmaXhlZDY0Rmll
bGQpCi0gICAgICAgICAgICAuYnVpbGQoKTsKLSAgICBVbmtub3duRmllbGRTZXQgYyA9Ci0gICAg
ICAgIFVua25vd25GaWVsZFNldC5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgIC5hZGRGaWVsZCgx
LCB2YXJJbnRGaWVsZCkKLSAgICAgICAgICAgIC5idWlsZCgpOwotICAgIFVua25vd25GaWVsZFNl
dCBkID0KLSAgICAgICAgVW5rbm93bkZpZWxkU2V0Lm5ld0J1aWxkZXIoKQotICAgICAgICAgICAg
LmFkZEZpZWxkKDEsIGxlbmd0aERlbGltaXRlZEZpZWxkKQotICAgICAgICAgICAgLmJ1aWxkKCk7
Ci0gICAgVW5rbm93bkZpZWxkU2V0IGUgPQotICAgICAgICBVbmtub3duRmllbGRTZXQubmV3QnVp
bGRlcigpCi0gICAgICAgICAgICAuYWRkRmllbGQoMSwgZ3JvdXBGaWVsZCkKLSAgICAgICAgICAg
IC5idWlsZCgpOwotCi0gICAgY2hlY2tFcXVhbHNJc0NvbnNpc3RlbnQoYSk7Ci0gICAgY2hlY2tF
cXVhbHNJc0NvbnNpc3RlbnQoYik7Ci0gICAgY2hlY2tFcXVhbHNJc0NvbnNpc3RlbnQoYyk7Ci0g
ICAgY2hlY2tFcXVhbHNJc0NvbnNpc3RlbnQoZCk7Ci0gICAgY2hlY2tFcXVhbHNJc0NvbnNpc3Rl
bnQoZSk7Ci0KLSAgICBjaGVja05vdEVxdWFsKGEsIGIpOwotICAgIGNoZWNrTm90RXF1YWwoYSwg
Yyk7Ci0gICAgY2hlY2tOb3RFcXVhbChhLCBkKTsKLSAgICBjaGVja05vdEVxdWFsKGEsIGUpOwot
ICAgIGNoZWNrTm90RXF1YWwoYiwgYyk7Ci0gICAgY2hlY2tOb3RFcXVhbChiLCBkKTsKLSAgICBj
aGVja05vdEVxdWFsKGIsIGUpOwotICAgIGNoZWNrTm90RXF1YWwoYywgZCk7Ci0gICAgY2hlY2tO
b3RFcXVhbChjLCBlKTsKLSAgICBjaGVja05vdEVxdWFsKGQsIGUpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gZmllbGQgc2V0cyBhcmUgbm90IGVxdWFsIGFuZCBo
YXZlIGRpZmZlcmVudAotICAgKiBoYXNoIGNvZGVzLgotICAgKgotICAgKiBAd2FybmluZyBJdCdz
IHZhbGlkIGZvciBub24tZXF1YWwgb2JqZWN0cyB0byBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZSwg
c28KLSAgICogICB0aGlzIHRlc3QgaXMgc3RyaWN0ZXIgdGhhbiBpdCBuZWVkcyB0byBiZS4gSG93
ZXZlciwgdGhpcyBzaG91bGQgaGFwcGVuCi0gICAqICAgcmVsYXRpdmVseSByYXJlbHkuCi0gICAq
LwotICBwcml2YXRlIHZvaWQgY2hlY2tOb3RFcXVhbChVbmtub3duRmllbGRTZXQgczEsIFVua25v
d25GaWVsZFNldCBzMikgewotICAgIFN0cmluZyBlcXVhbHNFcnJvciA9IFN0cmluZy5mb3JtYXQo
IiVzIHNob3VsZCBub3QgYmUgZXF1YWwgdG8gJXMiLCBzMSwgczIpOwotICAgIGFzc2VydEZhbHNl
KGVxdWFsc0Vycm9yLCBzMS5lcXVhbHMoczIpKTsKLSAgICBhc3NlcnRGYWxzZShlcXVhbHNFcnJv
ciwgczIuZXF1YWxzKHMxKSk7Ci0KLSAgICBhc3NlcnRGYWxzZSgKLSAgICAgICAgU3RyaW5nLmZv
cm1hdCgiJXMgc2hvdWxkIGhhdmUgYSBkaWZmZXJlbnQgaGFzaCBjb2RlIGZyb20gJXMiLCBzMSwg
czIpLAotICAgICAgICBzMS5oYXNoQ29kZSgpID09IHMyLmhhc2hDb2RlKCkpOwotICB9Ci0KLSAg
LyoqCi0gICAqIEFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gZmllbGQgc2V0cyBhcmUgZXF1YWwgYW5k
IGhhdmUgaWRlbnRpY2FsIGhhc2ggY29kZXMuCi0gICAqLwotICBwcml2YXRlIHZvaWQgY2hlY2tF
cXVhbHNJc0NvbnNpc3RlbnQoVW5rbm93bkZpZWxkU2V0IHNldCkgewotICAgIC8vIE9iamVjdCBz
aG91bGQgYmUgZXF1YWwgdG8gaXRzZWxmLgotICAgIGFzc2VydEVxdWFscyhzZXQsIHNldCk7Ci0K
LSAgICAvLyBPYmplY3Qgc2hvdWxkIGJlIGVxdWFsIHRvIGEgY29weSBvZiBpdHNlbGYuCi0gICAg
VW5rbm93bkZpZWxkU2V0IGNvcHkgPSBVbmtub3duRmllbGRTZXQubmV3QnVpbGRlcihzZXQpLmJ1
aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNldCwgY29weSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNv
cHksIHNldCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNldC5oYXNoQ29kZSgpLCBjb3B5Lmhhc2hDb2Rl
KCkpOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXpl
TGl0ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFVuaXR0ZXN0TGl0ZS5UZXN0RW1wdHlNZXNz
YWdlTGl0ZSBlbXB0eU1lc3NhZ2VMaXRlID0KLSAgICAgICAgVW5pdHRlc3RMaXRlLlRlc3RFbXB0
eU1lc3NhZ2VMaXRlLnBhcnNlRnJvbShhbGxGaWVsZHNEYXRhKTsKLSAgICBhc3NlcnRFcXVhbHMo
YWxsRmllbGRzRGF0YS5zaXplKCksIGVtcHR5TWVzc2FnZUxpdGUuZ2V0U2VyaWFsaXplZFNpemUo
KSk7Ci0gICAgQnl0ZVN0cmluZyBkYXRhID0gZW1wdHlNZXNzYWdlTGl0ZS50b0J5dGVTdHJpbmco
KTsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IFRlc3RBbGxUeXBlcy5wYXJzZUZyb20oZGF0
YSk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRmllbGRzU2V0KG1lc3NhZ2UpOwotICAgIGFzc2Vy
dEVxdWFscyhhbGxGaWVsZHNEYXRhLCBkYXRhKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RB
bGxFeHRlbnNpb25zTGl0ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxFeHRlbnNp
b25zIGFsbEV4dGVuc2lvbnMgPSBUZXN0VXRpbC5nZXRBbGxFeHRlbnNpb25zU2V0KCk7Ci0gICAg
Qnl0ZVN0cmluZyBhbGxFeHRlbnNpb25zRGF0YSA9IGFsbEV4dGVuc2lvbnMudG9CeXRlU3RyaW5n
KCk7Ci0gICAgVW5pdHRlc3RMaXRlLlRlc3RFbXB0eU1lc3NhZ2VMaXRlIGVtcHR5TWVzc2FnZUxp
dGUgPQotICAgICAgICBVbml0dGVzdExpdGUuVGVzdEVtcHR5TWVzc2FnZUxpdGUucGFyc2VyKCku
cGFyc2VGcm9tKGFsbEV4dGVuc2lvbnNEYXRhKTsKLSAgICBCeXRlU3RyaW5nIGRhdGEgPSBlbXB0
eU1lc3NhZ2VMaXRlLnRvQnl0ZVN0cmluZygpOwotICAgIFRlc3RBbGxFeHRlbnNpb25zIG1lc3Nh
Z2UgPQotICAgICAgICBUZXN0QWxsRXh0ZW5zaW9ucy5wYXJzZUZyb20oZGF0YSwgVGVzdFV0aWwu
Z2V0RXh0ZW5zaW9uUmVnaXN0cnkoKSk7Ci0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRXh0ZW5zaW9u
c1NldChtZXNzYWdlKTsKLSAgICBhc3NlcnRFcXVhbHMoYWxsRXh0ZW5zaW9uc0RhdGEsIGRhdGEp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEFsbFBhY2tlZEZpZWxkc0xpdGUoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBUZXN0UGFja2VkVHlwZXMgYWxsUGFja2VkRmllbGRzID0gVGVzdFV0
aWwuZ2V0UGFja2VkU2V0KCk7Ci0gICAgQnl0ZVN0cmluZyBhbGxQYWNrZWREYXRhID0gYWxsUGFj
a2VkRmllbGRzLnRvQnl0ZVN0cmluZygpOwotICAgIFVuaXR0ZXN0TGl0ZS5UZXN0RW1wdHlNZXNz
YWdlTGl0ZSBlbXB0eU1lc3NhZ2VMaXRlID0KLSAgICAgICAgVW5pdHRlc3RMaXRlLlRlc3RFbXB0
eU1lc3NhZ2VMaXRlLnBhcnNlRnJvbShhbGxQYWNrZWREYXRhKTsKLSAgICBCeXRlU3RyaW5nIGRh
dGEgPSBlbXB0eU1lc3NhZ2VMaXRlLnRvQnl0ZVN0cmluZygpOwotICAgIFRlc3RQYWNrZWRUeXBl
cyBtZXNzYWdlID0KLSAgICAgICAgVGVzdFBhY2tlZFR5cGVzLnBhcnNlRnJvbShkYXRhLCBUZXN0
VXRpbC5nZXRFeHRlbnNpb25SZWdpc3RyeSgpKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRQYWNrZWRG
aWVsZHNTZXQobWVzc2FnZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFsbFBhY2tlZERhdGEsIGRhdGEp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEFsbFBhY2tlZEV4dGVuc2lvbnNMaXRlKCkgdGhy
b3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdFBhY2tlZEV4dGVuc2lvbnMgYWxsUGFja2VkRXh0ZW5z
aW9ucyA9IFRlc3RVdGlsLmdldFBhY2tlZEV4dGVuc2lvbnNTZXQoKTsKLSAgICBCeXRlU3RyaW5n
IGFsbFBhY2tlZEV4dGVuc2lvbnNEYXRhID0gYWxsUGFja2VkRXh0ZW5zaW9ucy50b0J5dGVTdHJp
bmcoKTsKLSAgICBVbml0dGVzdExpdGUuVGVzdEVtcHR5TWVzc2FnZUxpdGUgZW1wdHlNZXNzYWdl
TGl0ZSA9Ci0gICAgICAgIFVuaXR0ZXN0TGl0ZS5UZXN0RW1wdHlNZXNzYWdlTGl0ZS5wYXJzZUZy
b20oYWxsUGFja2VkRXh0ZW5zaW9uc0RhdGEpOwotICAgIEJ5dGVTdHJpbmcgZGF0YSA9IGVtcHR5
TWVzc2FnZUxpdGUudG9CeXRlU3RyaW5nKCk7Ci0gICAgVGVzdFBhY2tlZEV4dGVuc2lvbnMgbWVz
c2FnZSA9Ci0gICAgICAgIFRlc3RQYWNrZWRFeHRlbnNpb25zLnBhcnNlRnJvbShkYXRhLCBUZXN0
VXRpbC5nZXRFeHRlbnNpb25SZWdpc3RyeSgpKTsKLSAgICBUZXN0VXRpbC5hc3NlcnRQYWNrZWRF
eHRlbnNpb25zU2V0KG1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscyhhbGxQYWNrZWRFeHRlbnNp
b25zRGF0YSwgZGF0YSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q29weUZyb21MaXRlKCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVW5pdHRlc3RMaXRlLlRlc3RFbXB0eU1lc3NhZ2VMaXRl
IGVtcHR5TWVzc2FnZUxpdGUgPQotICAgICAgICBVbml0dGVzdExpdGUuVGVzdEVtcHR5TWVzc2Fn
ZUxpdGUucGFyc2VGcm9tKGFsbEZpZWxkc0RhdGEpOwotICAgIFVuaXR0ZXN0TGl0ZS5UZXN0RW1w
dHlNZXNzYWdlTGl0ZSBlbXB0eU1lc3NhZ2VMaXRlMiA9Ci0gICAgICAgIFVuaXR0ZXN0TGl0ZS5U
ZXN0RW1wdHlNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLm1lcmdlRnJvbShlbXB0
eU1lc3NhZ2VMaXRlKS5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscyhlbXB0eU1lc3NhZ2VMaXRl
LnRvQnl0ZVN0cmluZygpLCBlbXB0eU1lc3NhZ2VMaXRlMi50b0J5dGVTdHJpbmcoKSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VGcm9tTGl0ZSgpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlMSA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkKLSAg
ICAgICAgLnNldE9wdGlvbmFsSW50MzIoMSkKLSAgICAgICAgLnNldE9wdGlvbmFsU3RyaW5nKCJm
b28iKQotICAgICAgICAuYWRkUmVwZWF0ZWRTdHJpbmcoImJhciIpCi0gICAgICAgIC5zZXRPcHRp
b25hbE5lc3RlZEVudW0oVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0uQkFaKQotICAgICAgICAuYnVp
bGQoKTsKLQotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlMiA9IFRlc3RBbGxUeXBlcy5uZXdCdWls
ZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsSW50NjQoMikKLSAgICAgICAgLnNldE9wdGlvbmFs
U3RyaW5nKCJiYXoiKQotICAgICAgICAuYWRkUmVwZWF0ZWRTdHJpbmcoInF1eCIpCi0gICAgICAg
IC5zZXRPcHRpb25hbEZvcmVpZ25FbnVtKEZvcmVpZ25FbnVtLkZPUkVJR05fQkFaKQotICAgICAg
ICAuYnVpbGQoKTsKLQotICAgIEJ5dGVTdHJpbmcgZGF0YTEgPSBtZXNzYWdlMS50b0J5dGVTdHJp
bmcoKTsKLSAgICBVbml0dGVzdExpdGUuVGVzdEVtcHR5TWVzc2FnZUxpdGUgZW1wdHlNZXNzYWdl
TGl0ZTEgPQotICAgICAgICBVbml0dGVzdExpdGUuVGVzdEVtcHR5TWVzc2FnZUxpdGUucGFyc2VG
cm9tKGRhdGExKTsKLSAgICBCeXRlU3RyaW5nIGRhdGEyID0gbWVzc2FnZTIudG9CeXRlU3RyaW5n
KCk7Ci0gICAgVW5pdHRlc3RMaXRlLlRlc3RFbXB0eU1lc3NhZ2VMaXRlIGVtcHR5TWVzc2FnZUxp
dGUyID0KLSAgICAgICAgVW5pdHRlc3RMaXRlLlRlc3RFbXB0eU1lc3NhZ2VMaXRlLnBhcnNlRnJv
bShkYXRhMik7Ci0KLSAgICBtZXNzYWdlMSA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKG1lc3Nh
Z2UxKS5tZXJnZUZyb20obWVzc2FnZTIpLmJ1aWxkKCk7Ci0gICAgZW1wdHlNZXNzYWdlTGl0ZTEg
PSBVbml0dGVzdExpdGUuVGVzdEVtcHR5TWVzc2FnZUxpdGUubmV3QnVpbGRlcihlbXB0eU1lc3Nh
Z2VMaXRlMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5tZXJnZUZyb20oZW1wdHlNZXNzYWdl
TGl0ZTIpLmJ1aWxkKCk7Ci0KLSAgICBkYXRhMSA9IGVtcHR5TWVzc2FnZUxpdGUxLnRvQnl0ZVN0
cmluZygpOwotICAgIG1lc3NhZ2UyID0gVGVzdEFsbFR5cGVzLnBhcnNlRnJvbShkYXRhMSk7Ci0K
LSAgICBhc3NlcnRFcXVhbHMobWVzc2FnZTEsIG1lc3NhZ2UyKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RXcm9uZ1R5cGVUcmVhdGVkQXNVbmtub3duTGl0ZSgpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIC8vIFRlc3QgdGhhdCBmaWVsZHMgb2YgdGhlIHdyb25nIHdpcmUgdHlwZSBhcmUgdHJl
YXRlZCBsaWtlIHVua25vd24gZmllbGRzCi0gICAgLy8gd2hlbiBwYXJzaW5nLgotCi0gICAgQnl0
ZVN0cmluZyBiaXphcnJvRGF0YSA9IGdldEJpemFycm9EYXRhKCk7Ci0gICAgVGVzdEFsbFR5cGVz
IGFsbFR5cGVzTWVzc2FnZSA9IFRlc3RBbGxUeXBlcy5wYXJzZUZyb20oYml6YXJyb0RhdGEpOwot
ICAgIFVuaXR0ZXN0TGl0ZS5UZXN0RW1wdHlNZXNzYWdlTGl0ZSBlbXB0eU1lc3NhZ2VMaXRlID0K
LSAgICAgICAgVW5pdHRlc3RMaXRlLlRlc3RFbXB0eU1lc3NhZ2VMaXRlLnBhcnNlRnJvbShiaXph
cnJvRGF0YSk7Ci0gICAgQnl0ZVN0cmluZyBkYXRhID0gZW1wdHlNZXNzYWdlTGl0ZS50b0J5dGVT
dHJpbmcoKTsKLSAgICBUZXN0QWxsVHlwZXMgYWxsVHlwZXNNZXNzYWdlMiA9IFRlc3RBbGxUeXBl
cy5wYXJzZUZyb20oZGF0YSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoYWxsVHlwZXNNZXNzYWdlLnRv
U3RyaW5nKCksIGFsbFR5cGVzTWVzc2FnZTIudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0VW5rbm93bkV4dGVuc2lvbnNMaXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAg
Ly8gTWFrZSBzdXJlIGZpZWxkcyBhcmUgcHJvcGVybHkgcGFyc2VkIHRvIHRoZSBVbmtub3duRmll
bGRTZXQgZXZlbiB3aGVuCi0gICAgLy8gdGhleSBhcmUgZGVjbGFyZWQgYXMgZXh0ZW5zaW9uIG51
bWJlcnMuCi0KLSAgICBVbml0dGVzdExpdGUuVGVzdEVtcHR5TWVzc2FnZVdpdGhFeHRlbnNpb25z
TGl0ZSBtZXNzYWdlID0KLSAgICAgIFVuaXR0ZXN0TGl0ZS5UZXN0RW1wdHlNZXNzYWdlV2l0aEV4
dGVuc2lvbnNMaXRlLnBhcnNlRnJvbShhbGxGaWVsZHNEYXRhKTsKLQotICAgIGFzc2VydEVxdWFs
cyhhbGxGaWVsZHNEYXRhLCBtZXNzYWdlLnRvQnl0ZVN0cmluZygpKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RXcm9uZ0V4dGVuc2lvblR5cGVUcmVhdGVkQXNVbmtub3duTGl0ZSgpIHRocm93
cyBFeGNlcHRpb24gewotICAgIC8vIFRlc3QgdGhhdCBmaWVsZHMgb2YgdGhlIHdyb25nIHdpcmUg
dHlwZSBhcmUgdHJlYXRlZCBsaWtlIHVua25vd24gZmllbGRzCi0gICAgLy8gd2hlbiBwYXJzaW5n
IGV4dGVuc2lvbnMuCi0KLSAgICBCeXRlU3RyaW5nIGJpemFycm9EYXRhID0gZ2V0Qml6YXJyb0Rh
dGEoKTsKLSAgICBUZXN0QWxsRXh0ZW5zaW9ucyBhbGxFeHRlbnNpb25zTWVzc2FnZSA9Ci0gICAg
ICBUZXN0QWxsRXh0ZW5zaW9ucy5wYXJzZUZyb20oYml6YXJyb0RhdGEpOwotICAgIFVuaXR0ZXN0
TGl0ZS5UZXN0RW1wdHlNZXNzYWdlTGl0ZSBlbXB0eU1lc3NhZ2VMaXRlID0KLSAgICAgICAgVW5p
dHRlc3RMaXRlLlRlc3RFbXB0eU1lc3NhZ2VMaXRlLnBhcnNlRnJvbShiaXphcnJvRGF0YSk7Ci0K
LSAgICAvLyBBbGwgZmllbGRzIHNob3VsZCBoYXZlIGJlZW4gaW50ZXJwcmV0ZWQgYXMgdW5rbm93
biwgc28gdGhlIGJ5dGUgc3RyaW5ncwotICAgIC8vIHNob3VsZCBiZSB0aGUgc2FtZS4KLSAgICBh
c3NlcnRFcXVhbHMoZW1wdHlNZXNzYWdlTGl0ZS50b0J5dGVTdHJpbmcoKSwKLSAgICAgICAgICAg
ICAgICAgYWxsRXh0ZW5zaW9uc01lc3NhZ2UudG9CeXRlU3RyaW5nKCkpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdFBhcnNlVW5rbm93bkVudW1WYWx1ZUxpdGUoKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3Igc2luZ3VsYXJGaWVsZCA9Ci0gICAg
ICBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpLmZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxf
bmVzdGVkX2VudW0iKTsKLSAgICBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgcmVwZWF0ZWRG
aWVsZCA9Ci0gICAgICBUZXN0QWxsVHlwZXMuZ2V0RGVzY3JpcHRvcigpLmZpbmRGaWVsZEJ5TmFt
ZSgicmVwZWF0ZWRfbmVzdGVkX2VudW0iKTsKLSAgICBhc3NlcnROb3ROdWxsKHNpbmd1bGFyRmll
bGQpOwotICAgIGFzc2VydE5vdE51bGwocmVwZWF0ZWRGaWVsZCk7Ci0KLSAgICBCeXRlU3RyaW5n
IGRhdGEgPQotICAgICAgVW5rbm93bkZpZWxkU2V0Lm5ld0J1aWxkZXIoKQotICAgICAgICAuYWRk
RmllbGQoc2luZ3VsYXJGaWVsZC5nZXROdW1iZXIoKSwKLSAgICAgICAgICBVbmtub3duRmllbGRT
ZXQuRmllbGQubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuYWRkVmFyaW50KFRlc3RBbGxUeXBl
cy5OZXN0ZWRFbnVtLkJBUi5nZXROdW1iZXIoKSkKLSAgICAgICAgICAgIC5hZGRWYXJpbnQoNSkg
ICAvLyBub3QgdmFsaWQKLSAgICAgICAgICAgIC5idWlsZCgpKQotICAgICAgICAuYWRkRmllbGQo
cmVwZWF0ZWRGaWVsZC5nZXROdW1iZXIoKSwKLSAgICAgICAgICBVbmtub3duRmllbGRTZXQuRmll
bGQubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuYWRkVmFyaW50KFRlc3RBbGxUeXBlcy5OZXN0
ZWRFbnVtLkZPTy5nZXROdW1iZXIoKSkKLSAgICAgICAgICAgIC5hZGRWYXJpbnQoNCkgICAvLyBu
b3QgdmFsaWQKLSAgICAgICAgICAgIC5hZGRWYXJpbnQoVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0u
QkFaLmdldE51bWJlcigpKQotICAgICAgICAgICAgLmFkZFZhcmludCg2KSAgIC8vIG5vdCB2YWxp
ZAotICAgICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgpCi0gICAgICAgIC50b0J5
dGVTdHJpbmcoKTsKLQotICAgIFVuaXR0ZXN0TGl0ZS5UZXN0RW1wdHlNZXNzYWdlTGl0ZSBlbXB0
eU1lc3NhZ2VMaXRlID0KLSAgICAgICAgVW5pdHRlc3RMaXRlLlRlc3RFbXB0eU1lc3NhZ2VMaXRl
LnBhcnNlRnJvbShkYXRhKTsKLSAgICBkYXRhID0gZW1wdHlNZXNzYWdlTGl0ZS50b0J5dGVTdHJp
bmcoKTsKLQotICAgIHsKLSAgICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0gVGVzdEFsbFR5cGVz
LnBhcnNlRnJvbShkYXRhKTsKLSAgICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMuTmVzdGVk
RW51bS5CQVIsCi0gICAgICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRPcHRpb25hbE5lc3RlZEVu
dW0oKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEFycmF5cy5hc0xpc3QoVGVzdEFs
bFR5cGVzLk5lc3RlZEVudW0uRk9PLCBUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVopLAotICAg
ICAgICBtZXNzYWdlLmdldFJlcGVhdGVkTmVzdGVkRW51bUxpc3QoKSk7Ci0gICAgICBhc3NlcnRF
cXVhbHMoQXJyYXlzLmFzTGlzdCg1TCksCi0gICAgICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRV
bmtub3duRmllbGRzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpZWxkKHNpbmd1
bGFyRmllbGQuZ2V0TnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRWYXJp
bnRMaXN0KCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKEFycmF5cy5hc0xpc3QoNEwsIDZMKSwKLSAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldFVua25vd25GaWVsZHMoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAuZ2V0RmllbGQocmVwZWF0ZWRGaWVsZC5nZXROdW1iZXIoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmdldFZhcmludExpc3QoKSk7Ci0gICAgfQotCi0gICAgewot
ICAgICAgVGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZSA9Ci0gICAgICAgIFRlc3RBbGxFeHRlbnNp
b25zLnBhcnNlRnJvbShkYXRhLCBUZXN0VXRpbC5nZXRFeHRlbnNpb25SZWdpc3RyeSgpKTsKLSAg
ICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVIsCi0gICAgICAgIG1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKFVuaXR0ZXN0UHJvdG8ub3B0aW9uYWxOZXN0ZWRFbnVtRXh0ZW5z
aW9uKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIEFycmF5cy5hc0xpc3QoVGVzdEFs
bFR5cGVzLk5lc3RlZEVudW0uRk9PLCBUZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5CQVopLAotICAg
ICAgICBtZXNzYWdlLmdldEV4dGVuc2lvbihVbml0dGVzdFByb3RvLnJlcGVhdGVkTmVzdGVkRW51
bUV4dGVuc2lvbikpOwotICAgICAgYXNzZXJ0RXF1YWxzKEFycmF5cy5hc0xpc3QoNUwpLAotICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0VW5rbm93bkZpZWxkcygpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIC5nZXRGaWVsZChzaW5ndWxhckZpZWxkLmdldE51bWJlcigpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAuZ2V0VmFyaW50TGlzdCgpKTsKLSAgICAgIGFzc2VydEVxdWFs
cyhBcnJheXMuYXNMaXN0KDRMLCA2TCksCi0gICAgICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRV
bmtub3duRmllbGRzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpZWxkKHJlcGVh
dGVkRmllbGQuZ2V0TnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRWYXJp
bnRMaXN0KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhckxpdGUoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBVbml0dGVzdExpdGUuVGVzdEVtcHR5TWVzc2FnZUxpdGUg
ZW1wdHlNZXNzYWdlTGl0ZTEgPQotICAgICAgICBVbml0dGVzdExpdGUuVGVzdEVtcHR5TWVzc2Fn
ZUxpdGUucGFyc2VGcm9tKGFsbEZpZWxkc0RhdGEpOwotICAgIFVuaXR0ZXN0TGl0ZS5UZXN0RW1w
dHlNZXNzYWdlTGl0ZSBlbXB0eU1lc3NhZ2VMaXRlMiA9Ci0gICAgICAgIFVuaXR0ZXN0TGl0ZS5U
ZXN0RW1wdHlNZXNzYWdlTGl0ZS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLm1lcmdlRnJvbShlbXB0
eU1lc3NhZ2VMaXRlMSkuY2xlYXIoKS5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygwLCBlbXB0
eU1lc3NhZ2VMaXRlMi5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBCeXRlU3RyaW5nIGRhdGEg
PSBlbXB0eU1lc3NhZ2VMaXRlMi50b0J5dGVTdHJpbmcoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwg
ZGF0YS5zaXplKCkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Vbm1vZGlmaWFibGVMYXp5U3RyaW5nTGlzdFRlc3QuamF2
YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9Vbm1vZGlmaWFi
bGVMYXp5U3RyaW5nTGlzdFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjFjNzVmYzMzYzU5ZWE2NTA1ODg4OGU1ZTQ0OWVjYTY4MjM0M2IyYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvVW5tb2RpZmlhYmxlTGF6eVN0cmluZ0xpc3RUZXN0LmphdmEKKysr
IC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0IGp1bml0LmZy
YW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBq
YXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotCi0vKioKLSAq
IFRlc3RzIGZvciB7QGxpbmsgVW5tb2RpZmlhYmxlTGF6eVN0cmluZ0xpc3R9LgotICoKLSAqIEBh
dXRob3Igam9ucEBnb29nbGUuY29tIChKb24gUGVybG93KQotICovCi1wdWJsaWMgY2xhc3MgVW5t
b2RpZmlhYmxlTGF6eVN0cmluZ0xpc3RUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gIHByaXZh
dGUgc3RhdGljIFN0cmluZyBTVFJJTkdfQSA9ICJBIjsKLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5n
IFNUUklOR19CID0gIkIiOwotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgU1RSSU5HX0MgPSAiQyI7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgQnl0ZVN0cmluZyBCWVRFX1NUUklOR19BID0gQnl0ZVN0cmlu
Zy5jb3B5RnJvbVV0ZjgoIkEiKTsKLSAgcHJpdmF0ZSBzdGF0aWMgQnl0ZVN0cmluZyBCWVRFX1NU
UklOR19CID0gQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoIkIiKTsKLSAgcHJpdmF0ZSBzdGF0aWMg
Qnl0ZVN0cmluZyBCWVRFX1NUUklOR19DID0gQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoIkMiKTsK
LQotICBwdWJsaWMgdm9pZCB0ZXN0UmVhZE9ubHlNZXRob2RzKCkgewotICAgIExhenlTdHJpbmdB
cnJheUxpc3QgcmF3TGlzdCA9IGNyZWF0ZVNhbXBsZUxpc3QoKTsKLSAgICBVbm1vZGlmaWFibGVM
YXp5U3RyaW5nTGlzdCBsaXN0ID0gbmV3IFVubW9kaWZpYWJsZUxhenlTdHJpbmdMaXN0KHJhd0xp
c3QpOwotICAgIGFzc2VydEVxdWFscygzLCBsaXN0LnNpemUoKSk7Ci0gICAgYXNzZXJ0U2FtZShT
VFJJTkdfQSwgbGlzdC5nZXQoMCkpOwotICAgIGFzc2VydFNhbWUoU1RSSU5HX0IsIGxpc3QuZ2V0
KDEpKTsKLSAgICBhc3NlcnRTYW1lKFNUUklOR19DLCBsaXN0LmdldCgyKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKEJZVEVfU1RSSU5HX0EsIGxpc3QuZ2V0Qnl0ZVN0cmluZygwKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKEJZVEVfU1RSSU5HX0IsIGxpc3QuZ2V0Qnl0ZVN0cmluZygxKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKEJZVEVfU1RSSU5HX0MsIGxpc3QuZ2V0Qnl0ZVN0cmluZygyKSk7Ci0KLSAgICBMaXN0
PEJ5dGVTdHJpbmc+IGJ5dGVTdHJpbmdMaXN0ID0gbGlzdC5hc0J5dGVTdHJpbmdMaXN0KCk7Ci0g
ICAgYXNzZXJ0U2FtZShsaXN0LmdldEJ5dGVTdHJpbmcoMCksIGJ5dGVTdHJpbmdMaXN0LmdldCgw
KSk7Ci0gICAgYXNzZXJ0U2FtZShsaXN0LmdldEJ5dGVTdHJpbmcoMSksIGJ5dGVTdHJpbmdMaXN0
LmdldCgxKSk7Ci0gICAgYXNzZXJ0U2FtZShsaXN0LmdldEJ5dGVTdHJpbmcoMiksIGJ5dGVTdHJp
bmdMaXN0LmdldCgyKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZ5TWV0aG9kcygp
IHsKLSAgICBMYXp5U3RyaW5nQXJyYXlMaXN0IHJhd0xpc3QgPSBjcmVhdGVTYW1wbGVMaXN0KCk7
Ci0gICAgVW5tb2RpZmlhYmxlTGF6eVN0cmluZ0xpc3QgbGlzdCA9IG5ldyBVbm1vZGlmaWFibGVM
YXp5U3RyaW5nTGlzdChyYXdMaXN0KTsKLQotICAgIHRyeSB7Ci0gICAgICBsaXN0LnJlbW92ZSgw
KTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMoMywg
bGlzdC5zaXplKCkpOwotCi0gICAgdHJ5IHsKLSAgICAgIGxpc3QuYWRkKFNUUklOR19CKTsKLSAg
ICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMoMywgbGlzdC5z
aXplKCkpOwotCi0gICAgdHJ5IHsKLSAgICAgIGxpc3Quc2V0KDEsIFNUUklOR19CKTsKLSAgICAg
IGZhaWwoKTsKLSAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBleHBlY3RlZAotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMoMywgbGlzdC5zaXpl
KCkpOwotCi0gICAgTGlzdDxCeXRlU3RyaW5nPiBieXRlU3RyaW5nTGlzdCA9IGxpc3QuYXNCeXRl
U3RyaW5nTGlzdCgpOwotICAgIHRyeSB7Ci0gICAgICBieXRlU3RyaW5nTGlzdC5yZW1vdmUoMCk7
Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRp
b24gZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIGxp
c3Quc2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgYnl0ZVN0cmluZ0xpc3Quc2l6ZSgpKTsK
LQotICAgIHRyeSB7Ci0gICAgICBieXRlU3RyaW5nTGlzdC5hZGQoQllURV9TVFJJTkdfQik7Ci0g
ICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24g
ZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIGxpc3Qu
c2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgYnl0ZVN0cmluZ0xpc3Quc2l6ZSgpKTsKLQot
ICAgIHRyeSB7Ci0gICAgICBieXRlU3RyaW5nTGlzdC5zZXQoMSwgQllURV9TVFJJTkdfQik7Ci0g
ICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24g
ZSkgewotICAgICAgLy8gZXhwZWN0ZWQKLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIGxpc3Qu
c2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgYnl0ZVN0cmluZ0xpc3Quc2l6ZSgpKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJdGVyYXRvcigpIHsKLSAgICBMYXp5U3RyaW5nQXJyYXlM
aXN0IHJhd0xpc3QgPSBjcmVhdGVTYW1wbGVMaXN0KCk7Ci0gICAgVW5tb2RpZmlhYmxlTGF6eVN0
cmluZ0xpc3QgbGlzdCA9IG5ldyBVbm1vZGlmaWFibGVMYXp5U3RyaW5nTGlzdChyYXdMaXN0KTsK
LQotICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGxpc3QuaXRlcmF0b3IoKTsKLSAgICBpbnQg
Y291bnQgPSAwOwotICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewotICAgICAgaXRlci5uZXh0
KCk7Ci0gICAgICBjb3VudCsrOwotICAgICAgdHJ5IHsKLSAgICAgICAgaXRlci5yZW1vdmUoKTsK
LSAgICAgICAgZmFpbCgpOwotICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNl
cHRpb24gZSkgewotICAgICAgICAvLyBleHBlY3RlZAotICAgICAgfQotICAgIH0KLSAgICBhc3Nl
cnRFcXVhbHMoMywgY291bnQpOwotCi0gICAgTGlzdDxCeXRlU3RyaW5nPiBieXRlU3RyaW5nTGlz
dCA9IGxpc3QuYXNCeXRlU3RyaW5nTGlzdCgpOwotICAgIEl0ZXJhdG9yPEJ5dGVTdHJpbmc+IGJ5
dGVJdGVyID0gYnl0ZVN0cmluZ0xpc3QuaXRlcmF0b3IoKTsKLSAgICBjb3VudCA9IDA7Ci0gICAg
d2hpbGUgKGJ5dGVJdGVyLmhhc05leHQoKSkgewotICAgICAgYnl0ZUl0ZXIubmV4dCgpOwotICAg
ICAgY291bnQrKzsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGJ5dGVJdGVyLnJlbW92ZSgpOwotICAg
ICAgICBmYWlsKCk7Ci0gICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlv
biBlKSB7Ci0gICAgICAgIC8vIGV4cGVjdGVkCi0gICAgICB9Ci0gICAgfQotICAgIGFzc2VydEVx
dWFscygzLCBjb3VudCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TGlzdEl0ZXJhdG9yKCkg
ewotICAgIExhenlTdHJpbmdBcnJheUxpc3QgcmF3TGlzdCA9IGNyZWF0ZVNhbXBsZUxpc3QoKTsK
LSAgICBVbm1vZGlmaWFibGVMYXp5U3RyaW5nTGlzdCBsaXN0ID0gbmV3IFVubW9kaWZpYWJsZUxh
enlTdHJpbmdMaXN0KHJhd0xpc3QpOwotCi0gICAgTGlzdEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9
IGxpc3QubGlzdEl0ZXJhdG9yKCk7Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICB3aGlsZSAoaXRl
ci5oYXNOZXh0KCkpIHsKLSAgICAgIGl0ZXIubmV4dCgpOwotICAgICAgY291bnQrKzsKLSAgICAg
IHRyeSB7Ci0gICAgICAgIGl0ZXIucmVtb3ZlKCk7Ci0gICAgICAgIGZhaWwoKTsKLSAgICAgIH0g
Y2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgLy8gZXhw
ZWN0ZWQKLSAgICAgIH0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGl0ZXIuc2V0KCJiYXIiKTsKLSAg
ICAgICAgZmFpbCgpOwotICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRp
b24gZSkgewotICAgICAgICAvLyBleHBlY3RlZAotICAgICAgfQotICAgICAgdHJ5IHsKLSAgICAg
ICAgaXRlci5hZGQoImJhciIpOwotICAgICAgICBmYWlsKCk7Ci0gICAgICB9IGNhdGNoIChVbnN1
cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIGV4cGVjdGVkCi0gICAg
ICB9Ci0gICAgfQotICAgIGFzc2VydEVxdWFscygzLCBjb3VudCk7Ci0KLSAgICBMaXN0PEJ5dGVT
dHJpbmc+IGJ5dGVTdHJpbmdMaXN0ID0gbGlzdC5hc0J5dGVTdHJpbmdMaXN0KCk7Ci0gICAgTGlz
dEl0ZXJhdG9yPEJ5dGVTdHJpbmc+IGJ5dGVJdGVyID0gYnl0ZVN0cmluZ0xpc3QubGlzdEl0ZXJh
dG9yKCk7Ci0gICAgY291bnQgPSAwOwotICAgIHdoaWxlIChieXRlSXRlci5oYXNOZXh0KCkpIHsK
LSAgICAgIGJ5dGVJdGVyLm5leHQoKTsKLSAgICAgIGNvdW50Kys7Ci0gICAgICB0cnkgewotICAg
ICAgICBieXRlSXRlci5yZW1vdmUoKTsKLSAgICAgICAgZmFpbCgpOwotICAgICAgfSBjYXRjaCAo
VW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAvLyBleHBlY3RlZAot
ICAgICAgfQotICAgICAgdHJ5IHsKLSAgICAgICAgYnl0ZUl0ZXIuc2V0KEJZVEVfU1RSSU5HX0Ep
OwotICAgICAgICBmYWlsKCk7Ci0gICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIGV4cGVjdGVkCi0gICAgICB9Ci0gICAgICB0cnkgewot
ICAgICAgICBieXRlSXRlci5hZGQoQllURV9TVFJJTkdfQSk7Ci0gICAgICAgIGZhaWwoKTsKLSAg
ICAgIH0gY2F0Y2ggKFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAg
Ly8gZXhwZWN0ZWQKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIGNvdW50KTsK
LSAgfQotCi0gIHByaXZhdGUgTGF6eVN0cmluZ0FycmF5TGlzdCBjcmVhdGVTYW1wbGVMaXN0KCkg
ewotICAgIExhenlTdHJpbmdBcnJheUxpc3QgcmF3TGlzdCA9IG5ldyBMYXp5U3RyaW5nQXJyYXlM
aXN0KCk7Ci0gICAgcmF3TGlzdC5hZGQoU1RSSU5HX0EpOwotICAgIHJhd0xpc3QuYWRkKFNUUklO
R19CKTsKLSAgICByYXdMaXN0LmFkZChTVFJJTkdfQyk7Ci0gICAgcmV0dXJuIHJhd0xpc3Q7Ci0g
IH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9XZWxsS25vd25UeXBlc1Rlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9XZWxsS25vd25UeXBlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTgyZTIwMGY1M2Y2NzhiZmNlMDIxZWQyZTkzZWNlMTNlZGM1NWNkYS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9z
cmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvV2VsbEtub3duVHlwZXNUZXN0LmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmOwotCi1pbXBvcnQgY29tLmdv
b2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5EZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29nbGUu
cHJvdG9idWYuRGVzY3JpcHRvcnMuRW51bURlc2NyaXB0b3I7Ci1pbXBvcnQgY29tLmdvb2dsZS5w
cm90b2J1Zi5EZXNjcmlwdG9ycy5FbnVtVmFsdWVEZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29n
bGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yOwotaW1wb3J0IGNvbS5nb29n
bGUucHJvdG9idWYudGVzdC5UZXN0V2VsbEtub3duVHlwZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFt
ZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGph
dmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRp
bC5NYXA7Ci0KLS8qKgotICogVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB3ZWxsLWtub3duIHR5cGVz
IGFyZSBpbmNsdWRlZCBpbiBwcm90b2J1ZiBKYXZhCi0gKiBydW50aW1lIGxpYnJhcnkuCi0gKi8K
LXB1YmxpYyBjbGFzcyBXZWxsS25vd25UeXBlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gIHB1
YmxpYyB2b2lkIHRlc3RXZWxsS25vd25UeXBlcygpIHsKLSAgICAvLyBUaGUgdGVzdCBwYXNzZXMg
aWYgaXQgY29tcGlsZXMuCi0gICAgVGVzdFdlbGxLbm93blR5cGVzIG1lc3NhZ2UgPSBUZXN0V2Vs
bEtub3duVHlwZXMubmV3QnVpbGRlcigpLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1l
c3NhZ2UuZ2V0QW55RmllbGQoKS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoMCwgbWVzc2FnZS5nZXRBcGlGaWVsZCgpLmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICAgIGFz
c2VydEVxdWFscygwLCBtZXNzYWdlLmdldER1cmF0aW9uRmllbGQoKS5nZXRTZXJpYWxpemVkU2l6
ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRFbXB0eUZpZWxkKCkuZ2V0U2Vy
aWFsaXplZFNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0RmllbGRNYXNr
RmllbGQoKS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbWVzc2Fn
ZS5nZXRTb3VyY2VDb250ZXh0RmllbGQoKS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoMCwgbWVzc2FnZS5nZXRTdHJ1Y3RGaWVsZCgpLmdldFNlcmlhbGl6ZWRTaXplKCkp
OwotICAgIGFzc2VydEVxdWFscygwLCBtZXNzYWdlLmdldFRpbWVzdGFtcEZpZWxkKCkuZ2V0U2Vy
aWFsaXplZFNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0VHlwZUZpZWxk
KCkuZ2V0U2VyaWFsaXplZFNpemUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2UuZ2V0
SW50MzJGaWVsZCgpLmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2ph
dmEvY29yZS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvV2lyZUZvcm1hdFRlc3Qu
amF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9XaXJlRm9y
bWF0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjZiMzcxY2RlYmMw
NjVlMTZlYzRjNDMwMzE5MjVjYjgxY2RhOGRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9XaXJlRm9ybWF0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjA2ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUu
cHJvdG9idWY7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlVuaXR0ZXN0TGl0ZS5UZXN0
QWxsRXh0ZW5zaW9uc0xpdGU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbml0dGVzdExp
dGUuVGVzdFBhY2tlZEV4dGVuc2lvbnNMaXRlOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVu
aXR0ZXN0TXNldC5SYXdNZXNzYWdlU2V0OwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0
ZXN0TXNldC5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjE7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRl
c3QuVW5pdHRlc3RNc2V0LlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMjsKLWltcG9ydCBwcm90b2J1
Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0
ZXN0UHJvdG8uVGVzdEFsbEV4dGVuc2lvbnM7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5p
dHRlc3RQcm90by5UZXN0QWxsVHlwZXM7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5pdHRl
c3RQcm90by5UZXN0RmllbGRPcmRlcmluZ3M7Ci1pbXBvcnQgcHJvdG9idWZfdW5pdHRlc3QuVW5p
dHRlc3RQcm90by5UZXN0T25lb2YyOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0LlVuaXR0ZXN0
UHJvdG8uVGVzdE9uZW9mQmFja3dhcmRzQ29tcGF0aWJsZTsKLWltcG9ydCBwcm90b2J1Zl91bml0
dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RQYWNrZWRFeHRlbnNpb25zOwotaW1wb3J0IHByb3RvYnVm
X3VuaXR0ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdFBhY2tlZFR5cGVzOwotaW1wb3J0IHByb3RvMl93
aXJlZm9ybWF0X3VuaXR0ZXN0LlVuaXR0ZXN0TXNldFdpcmVGb3JtYXQuVGVzdE1lc3NhZ2VTZXQ7
Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5
dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFt
OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIFRlc3RzIHJlbGF0ZWQgdG8gcGFy
c2luZyBhbmQgc2VyaWFsaXphdGlvbi4KLSAqCi0gKiBAYXV0aG9yIGtlbnRvbkBnb29nbGUuY29t
IChLZW50b24gVmFyZGEpCi0gKi8KLXB1YmxpYyBjbGFzcyBXaXJlRm9ybWF0VGVzdCBleHRlbmRz
IFRlc3RDYXNlIHsKLSAgcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IFRlc3RVdGlsLmdldEFsbFNldCgp
OwotCi0gICAgQnl0ZVN0cmluZyByYXdCeXRlcyA9IG1lc3NhZ2UudG9CeXRlU3RyaW5nKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKHJhd0J5dGVzLnNpemUoKSwgbWVzc2FnZS5nZXRTZXJpYWxpemVkU2l6
ZSgpKTsKLQotICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlMiA9IFRlc3RBbGxUeXBlcy5wYXJzZUZy
b20ocmF3Qnl0ZXMpOwotCi0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRmllbGRzU2V0KG1lc3NhZ2Uy
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemF0aW9uUGFja2VkKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgVGVzdFBhY2tlZFR5cGVzIG1lc3NhZ2UgPSBUZXN0VXRpbC5nZXRQ
YWNrZWRTZXQoKTsKLQotICAgIEJ5dGVTdHJpbmcgcmF3Qnl0ZXMgPSBtZXNzYWdlLnRvQnl0ZVN0
cmluZygpOwotICAgIGFzc2VydEVxdWFscyhyYXdCeXRlcy5zaXplKCksIG1lc3NhZ2UuZ2V0U2Vy
aWFsaXplZFNpemUoKSk7Ci0KLSAgICBUZXN0UGFja2VkVHlwZXMgbWVzc2FnZTIgPSBUZXN0UGFj
a2VkVHlwZXMucGFyc2VGcm9tKHJhd0J5dGVzKTsKLQotICAgIFRlc3RVdGlsLmFzc2VydFBhY2tl
ZEZpZWxkc1NldChtZXNzYWdlMik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXpl
RXh0ZW5zaW9ucygpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFRlc3RBbGxUeXBlcyBhbmQg
VGVzdEFsbEV4dGVuc2lvbnMgc2hvdWxkIGhhdmUgY29tcGF0aWJsZSB3aXJlIGZvcm1hdHMsCi0g
ICAgLy8gc28gaWYgd2Ugc2VyaWFsaXplIGEgVGVzdEFsbEV4dGVuc2lvbnMgdGhlbiBwYXJzZSBp
dCBhcyBUZXN0QWxsVHlwZXMKLSAgICAvLyBpdCBzaG91bGQgd29yay4KLQotICAgIFRlc3RBbGxF
eHRlbnNpb25zIG1lc3NhZ2UgPSBUZXN0VXRpbC5nZXRBbGxFeHRlbnNpb25zU2V0KCk7Ci0gICAg
Qnl0ZVN0cmluZyByYXdCeXRlcyA9IG1lc3NhZ2UudG9CeXRlU3RyaW5nKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKHJhd0J5dGVzLnNpemUoKSwgbWVzc2FnZS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLQot
ICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlMiA9IFRlc3RBbGxUeXBlcy5wYXJzZUZyb20ocmF3Qnl0
ZXMpOwotCi0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRmllbGRzU2V0KG1lc3NhZ2UyKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemVQYWNrZWRFeHRlbnNpb25zKCkgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgLy8gVGVzdFBhY2tlZFR5cGVzIGFuZCBUZXN0UGFja2VkRXh0ZW5zaW9u
cyBzaG91bGQgaGF2ZSBjb21wYXRpYmxlIHdpcmUKLSAgICAvLyBmb3JtYXRzOyBjaGVjayB0aGF0
IHRoZXkgc2VyaWFsaXplIHRvIHRoZSBzYW1lIHN0cmluZy4KLSAgICBUZXN0UGFja2VkRXh0ZW5z
aW9ucyBtZXNzYWdlID0gVGVzdFV0aWwuZ2V0UGFja2VkRXh0ZW5zaW9uc1NldCgpOwotICAgIEJ5
dGVTdHJpbmcgcmF3Qnl0ZXMgPSBtZXNzYWdlLnRvQnl0ZVN0cmluZygpOwotCi0gICAgVGVzdFBh
Y2tlZFR5cGVzIG1lc3NhZ2UyID0gVGVzdFV0aWwuZ2V0UGFja2VkU2V0KCk7Ci0gICAgQnl0ZVN0
cmluZyByYXdCeXRlczIgPSBtZXNzYWdlMi50b0J5dGVTdHJpbmcoKTsKLQotICAgIGFzc2VydEVx
dWFscyhyYXdCeXRlcywgcmF3Qnl0ZXMyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJp
YWxpemF0aW9uUGFja2VkV2l0aG91dEdldFNlcmlhbGl6ZWRTaXplKCkKLSAgICAgIHRocm93cyBF
eGNlcHRpb24gewotICAgIC8vIFdyaXRlIGRpcmVjdGx5IHRvIGFuIE91dHB1dFN0cmVhbSwgd2l0
aG91dCBpbnZva2luZyBnZXRTZXJpYWxpemVkU2l6ZSgpCi0gICAgLy8gVGhpcyB1c2VkIHRvIGJl
IGEgYnVnIHdoZXJlIHRoZSBzaXplIG9mIGEgcGFja2VkIGZpZWxkIHdhcyBpbmNvcnJlY3QsCi0g
ICAgLy8gc2luY2UgZ2V0U2VyaWFsaXplZFNpemUoKSB3YXMgbmV2ZXIgaW52b2tlZC4KLSAgICBU
ZXN0UGFja2VkVHlwZXMgbWVzc2FnZSA9IFRlc3RVdGlsLmdldFBhY2tlZFNldCgpOwotCi0gICAg
Ly8gRGlyZWN0bHkgY29uc3RydWN0IGEgQ29kZWRPdXRwdXRTdHJlYW0gYXJvdW5kIHRoZSBhY3R1
YWwgT3V0cHV0U3RyZWFtLAotICAgIC8vIGluIGNhc2Ugd3JpdGVUbyhPdXRwdXRTdHJlYW0gb3V0
cHV0KSBpbnZva2VzIGdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgQnl0ZUFycmF5T3V0cHV0U3Ry
ZWFtIG91dHB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICBDb2Rl
ZE91dHB1dFN0cmVhbSBjb2RlZE91dHB1dCA9IENvZGVkT3V0cHV0U3RyZWFtLm5ld0luc3RhbmNl
KG91dHB1dFN0cmVhbSk7Ci0KLSAgICBtZXNzYWdlLndyaXRlVG8oY29kZWRPdXRwdXQpOwotCi0g
ICAgY29kZWRPdXRwdXQuZmx1c2goKTsKLQotICAgIFRlc3RQYWNrZWRUeXBlcyBtZXNzYWdlMiA9
IFRlc3RQYWNrZWRUeXBlcy5wYXJzZUZyb20oCi0gICAgICAgIG91dHB1dFN0cmVhbS50b0J5dGVB
cnJheSgpKTsKLQotICAgIFRlc3RVdGlsLmFzc2VydFBhY2tlZEZpZWxkc1NldChtZXNzYWdlMik7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXplRXh0ZW5zaW9uc0xpdGUoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICAvLyBUZXN0QWxsVHlwZXMgYW5kIFRlc3RBbGxFeHRlbnNpb25z
IHNob3VsZCBoYXZlIGNvbXBhdGlibGUgd2lyZSBmb3JtYXRzLAotICAgIC8vIHNvIGlmIHdlIHNl
cmlhbGl6ZSBhIFRlc3RBbGxFeHRlbnNpb25zIHRoZW4gcGFyc2UgaXQgYXMgVGVzdEFsbFR5cGVz
Ci0gICAgLy8gaXQgc2hvdWxkIHdvcmsuCi0KLSAgICBUZXN0QWxsRXh0ZW5zaW9uc0xpdGUgbWVz
c2FnZSA9IFRlc3RVdGlsTGl0ZS5nZXRBbGxMaXRlRXh0ZW5zaW9uc1NldCgpOwotICAgIEJ5dGVT
dHJpbmcgcmF3Qnl0ZXMgPSBtZXNzYWdlLnRvQnl0ZVN0cmluZygpOwotICAgIGFzc2VydEVxdWFs
cyhyYXdCeXRlcy5zaXplKCksIG1lc3NhZ2UuZ2V0U2VyaWFsaXplZFNpemUoKSk7Ci0KLSAgICBU
ZXN0QWxsVHlwZXMgbWVzc2FnZTIgPSBUZXN0QWxsVHlwZXMucGFyc2VGcm9tKHJhd0J5dGVzKTsK
LQotICAgIFRlc3RVdGlsLmFzc2VydEFsbEZpZWxkc1NldChtZXNzYWdlMik7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXplUGFja2VkRXh0ZW5zaW9uc0xpdGUoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICAvLyBUZXN0UGFja2VkVHlwZXMgYW5kIFRlc3RQYWNrZWRFeHRlbnNpb25z
IHNob3VsZCBoYXZlIGNvbXBhdGlibGUgd2lyZQotICAgIC8vIGZvcm1hdHM7IGNoZWNrIHRoYXQg
dGhleSBzZXJpYWxpemUgdG8gdGhlIHNhbWUgc3RyaW5nLgotICAgIFRlc3RQYWNrZWRFeHRlbnNp
b25zTGl0ZSBtZXNzYWdlID0gVGVzdFV0aWxMaXRlLmdldExpdGVQYWNrZWRFeHRlbnNpb25zU2V0
KCk7Ci0gICAgQnl0ZVN0cmluZyByYXdCeXRlcyA9IG1lc3NhZ2UudG9CeXRlU3RyaW5nKCk7Ci0K
LSAgICBUZXN0UGFja2VkVHlwZXMgbWVzc2FnZTIgPSBUZXN0VXRpbC5nZXRQYWNrZWRTZXQoKTsK
LSAgICBCeXRlU3RyaW5nIHJhd0J5dGVzMiA9IG1lc3NhZ2UyLnRvQnl0ZVN0cmluZygpOwotCi0g
ICAgYXNzZXJ0RXF1YWxzKHJhd0J5dGVzLCByYXdCeXRlczIpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdFBhcnNlRXh0ZW5zaW9ucygpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFRlc3RB
bGxUeXBlcyBhbmQgVGVzdEFsbEV4dGVuc2lvbnMgc2hvdWxkIGhhdmUgY29tcGF0aWJsZSB3aXJl
IGZvcm1hdHMsCi0gICAgLy8gc28gaWYgd2Ugc2VyaWFsaXplIGEgVGVzdEFsbFR5cGVzIHRoZW4g
cGFyc2UgaXQgYXMgVGVzdEFsbEV4dGVuc2lvbnMKLSAgICAvLyBpdCBzaG91bGQgd29yay4KLQot
ICAgIFRlc3RBbGxUeXBlcyBtZXNzYWdlID0gVGVzdFV0aWwuZ2V0QWxsU2V0KCk7Ci0gICAgQnl0
ZVN0cmluZyByYXdCeXRlcyA9IG1lc3NhZ2UudG9CeXRlU3RyaW5nKCk7Ci0KLSAgICBFeHRlbnNp
b25SZWdpc3RyeSByZWdpc3RyeSA9IFRlc3RVdGlsLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0K
LSAgICBUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlMiA9Ci0gICAgICBUZXN0QWxsRXh0ZW5zaW9u
cy5wYXJzZUZyb20ocmF3Qnl0ZXMsIHJlZ2lzdHJ5KTsKLQotICAgIFRlc3RVdGlsLmFzc2VydEFs
bEV4dGVuc2lvbnNTZXQobWVzc2FnZTIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBhcnNl
UGFja2VkRXh0ZW5zaW9ucygpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIEVuc3VyZSB0aGF0
IHBhY2tlZCBleHRlbnNpb25zIGNhbiBiZSBwcm9wZXJseSBwYXJzZWQuCi0gICAgVGVzdFBhY2tl
ZEV4dGVuc2lvbnMgbWVzc2FnZSA9IFRlc3RVdGlsLmdldFBhY2tlZEV4dGVuc2lvbnNTZXQoKTsK
LSAgICBCeXRlU3RyaW5nIHJhd0J5dGVzID0gbWVzc2FnZS50b0J5dGVTdHJpbmcoKTsKLQotICAg
IEV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gVGVzdFV0aWwuZ2V0RXh0ZW5zaW9uUmVnaXN0
cnkoKTsKLQotICAgIFRlc3RQYWNrZWRFeHRlbnNpb25zIG1lc3NhZ2UyID0KLSAgICAgICAgVGVz
dFBhY2tlZEV4dGVuc2lvbnMucGFyc2VGcm9tKHJhd0J5dGVzLCByZWdpc3RyeSk7Ci0KLSAgICBU
ZXN0VXRpbC5hc3NlcnRQYWNrZWRFeHRlbnNpb25zU2V0KG1lc3NhZ2UyKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RQYXJzZUV4dGVuc2lvbnNMaXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgLy8gVGVzdEFsbFR5cGVzIGFuZCBUZXN0QWxsRXh0ZW5zaW9ucyBzaG91bGQgaGF2ZSBjb21w
YXRpYmxlIHdpcmUgZm9ybWF0cywKLSAgICAvLyBzbyBpZiB3ZSBzZXJpYWxpemUgYSBUZXN0QWxs
VHlwZXMgdGhlbiBwYXJzZSBpdCBhcyBUZXN0QWxsRXh0ZW5zaW9ucwotICAgIC8vIGl0IHNob3Vs
ZCB3b3JrLgotCi0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UgPSBUZXN0VXRpbC5nZXRBbGxTZXQo
KTsKLSAgICBCeXRlU3RyaW5nIHJhd0J5dGVzID0gbWVzc2FnZS50b0J5dGVTdHJpbmcoKTsKLQot
ICAgIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSByZWdpc3RyeV9saXRlID0gVGVzdFV0aWxMaXRlLmdl
dEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSgpOwotCi0gICAgVGVzdEFsbEV4dGVuc2lvbnNMaXRlIG1l
c3NhZ2UyID0KLSAgICAgIFRlc3RBbGxFeHRlbnNpb25zTGl0ZS5wYXJzZUZyb20ocmF3Qnl0ZXMs
IHJlZ2lzdHJ5X2xpdGUpOwotCi0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRXh0ZW5zaW9uc1NldCht
ZXNzYWdlMik7Ci0KLSAgICAvLyBUcnkgYWdhaW4gdXNpbmcgYSBmdWxsIGV4dGVuc2lvbiByZWdp
c3RyeS4KLSAgICBFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFRlc3RVdGlsLmdldEV4dGVu
c2lvblJlZ2lzdHJ5KCk7Ci0KLSAgICBUZXN0QWxsRXh0ZW5zaW9uc0xpdGUgbWVzc2FnZTMgPQot
ICAgICAgVGVzdEFsbEV4dGVuc2lvbnNMaXRlLnBhcnNlRnJvbShyYXdCeXRlcywgcmVnaXN0cnkp
OwotCi0gICAgVGVzdFV0aWwuYXNzZXJ0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlMyk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VQYWNrZWRFeHRlbnNpb25zTGl0ZSgpIHRocm93cyBF
eGNlcHRpb24gewotICAgIC8vIEVuc3VyZSB0aGF0IHBhY2tlZCBleHRlbnNpb25zIGNhbiBiZSBw
cm9wZXJseSBwYXJzZWQuCi0gICAgVGVzdFBhY2tlZEV4dGVuc2lvbnNMaXRlIG1lc3NhZ2UgPSBU
ZXN0VXRpbExpdGUuZ2V0TGl0ZVBhY2tlZEV4dGVuc2lvbnNTZXQoKTsKLSAgICBCeXRlU3RyaW5n
IHJhd0J5dGVzID0gbWVzc2FnZS50b0J5dGVTdHJpbmcoKTsKLQotICAgIEV4dGVuc2lvblJlZ2lz
dHJ5TGl0ZSByZWdpc3RyeSA9IFRlc3RVdGlsTGl0ZS5nZXRFeHRlbnNpb25SZWdpc3RyeUxpdGUo
KTsKLQotICAgIFRlc3RQYWNrZWRFeHRlbnNpb25zTGl0ZSBtZXNzYWdlMiA9Ci0gICAgICAgIFRl
c3RQYWNrZWRFeHRlbnNpb25zTGl0ZS5wYXJzZUZyb20ocmF3Qnl0ZXMsIHJlZ2lzdHJ5KTsKLQot
ICAgIFRlc3RVdGlsLmFzc2VydFBhY2tlZEV4dGVuc2lvbnNTZXQobWVzc2FnZTIpOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdEV4dGVuc2lvbnNTZXJpYWxpemVkU2l6ZSgpIHRocm93cyBFeGNl
cHRpb24gewotICAgIGFzc2VydE5vdFNhbWUoVGVzdFV0aWwuZ2V0QWxsU2V0KCkuZ2V0U2VyaWFs
aXplZFNpemUoKSwKLSAgICAgICAgICAgICAgICAgIFRlc3RVdGlsLmdldEFsbEV4dGVuc2lvbnNT
ZXQoKS5nZXRTZXJpYWxpemVkU2l6ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXJp
YWxpemVEZWxpbWl0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBCeXRlQXJyYXlPdXRwdXRT
dHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgIFRlc3RVdGls
LmdldEFsbFNldCgpLndyaXRlRGVsaW1pdGVkVG8ob3V0cHV0KTsKLSAgICBvdXRwdXQud3JpdGUo
MTIpOwotICAgIFRlc3RVdGlsLmdldFBhY2tlZFNldCgpLndyaXRlRGVsaW1pdGVkVG8ob3V0cHV0
KTsKLSAgICBvdXRwdXQud3JpdGUoMzQpOwotCi0gICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5w
dXQgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpOwotCi0g
ICAgVGVzdFV0aWwuYXNzZXJ0QWxsRmllbGRzU2V0KFRlc3RBbGxUeXBlcy5wYXJzZURlbGltaXRl
ZEZyb20oaW5wdXQpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIsIGlucHV0LnJlYWQoKSk7Ci0gICAg
VGVzdFV0aWwuYXNzZXJ0UGFja2VkRmllbGRzU2V0KFRlc3RQYWNrZWRUeXBlcy5wYXJzZURlbGlt
aXRlZEZyb20oaW5wdXQpKTsKLSAgICBhc3NlcnRFcXVhbHMoMzQsIGlucHV0LnJlYWQoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKC0xLCBpbnB1dC5yZWFkKCkpOwotCi0gICAgLy8gV2UncmUgYXQgRU9G
LCBzbyBwYXJzaW5nIGFnYWluIHNob3VsZCByZXR1cm4gbnVsbC4KLSAgICBhc3NlcnRUcnVlKFRl
c3RBbGxUeXBlcy5wYXJzZURlbGltaXRlZEZyb20oaW5wdXQpID09IG51bGwpOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIGFzc2VydEZpZWxkc0luT3JkZXIoQnl0ZVN0cmluZyBkYXRhKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBDb2RlZElucHV0U3RyZWFtIGlucHV0ID0gZGF0YS5uZXdDb2RlZElu
cHV0KCk7Ci0gICAgaW50IHByZXZpb3VzVGFnID0gMDsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgICBpbnQgdGFnID0gaW5wdXQucmVhZFRhZygpOwotICAgICAgaWYgKHRhZyA9PSAwKSB7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBhc3NlcnRUcnVlKHRhZyA+IHByZXZpb3Vz
VGFnKTsKLSAgICAgIHByZXZpb3VzVGFnID0gdGFnOwotICAgICAgaW5wdXQuc2tpcEZpZWxkKHRh
Zyk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEludGVybGVhdmVkRmllbGRzQW5k
RXh0ZW5zaW9ucygpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFRlc3RzIHRoYXQgZmllbGRz
IGFyZSB3cml0dGVuIGluIG9yZGVyIGV2ZW4gd2hlbiBleHRlbnNpb24gcmFuZ2VzCi0gICAgLy8g
YXJlIGludGVybGVhdmVkIHdpdGggZmllbGQgbnVtYmVycy4KLSAgICBCeXRlU3RyaW5nIGRhdGEg
PQotICAgICAgVGVzdEZpZWxkT3JkZXJpbmdzLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0TXlJ
bnQoMSkKLSAgICAgICAgLnNldE15U3RyaW5nKCJmb28iKQotICAgICAgICAuc2V0TXlGbG9hdCgx
LjBGKQotICAgICAgICAuc2V0RXh0ZW5zaW9uKFVuaXR0ZXN0UHJvdG8ubXlFeHRlbnNpb25JbnQs
IDIzKQotICAgICAgICAuc2V0RXh0ZW5zaW9uKFVuaXR0ZXN0UHJvdG8ubXlFeHRlbnNpb25TdHJp
bmcsICJiYXIiKQotICAgICAgICAuYnVpbGQoKS50b0J5dGVTdHJpbmcoKTsKLSAgICBhc3NlcnRG
aWVsZHNJbk9yZGVyKGRhdGEpOwotCi0gICAgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciBkZXNjcmlw
dG9yID0gVGVzdEZpZWxkT3JkZXJpbmdzLmdldERlc2NyaXB0b3IoKTsKLSAgICBCeXRlU3RyaW5n
IGR5bmFtaWNfZGF0YSA9Ci0gICAgICBEeW5hbWljTWVzc2FnZS5uZXdCdWlsZGVyKFRlc3RGaWVs
ZE9yZGVyaW5ncy5nZXREZXNjcmlwdG9yKCkpCi0gICAgICAgIC5zZXRGaWVsZChkZXNjcmlwdG9y
LmZpbmRGaWVsZEJ5TmFtZSgibXlfaW50IiksIDFMKQotICAgICAgICAuc2V0RmllbGQoZGVzY3Jp
cHRvci5maW5kRmllbGRCeU5hbWUoIm15X3N0cmluZyIpLCAiZm9vIikKLSAgICAgICAgLnNldEZp
ZWxkKGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJteV9mbG9hdCIpLCAxLjBGKQotICAgICAg
ICAuc2V0RmllbGQoVW5pdHRlc3RQcm90by5teUV4dGVuc2lvbkludC5nZXREZXNjcmlwdG9yKCks
IDIzKQotICAgICAgICAuc2V0RmllbGQoVW5pdHRlc3RQcm90by5teUV4dGVuc2lvblN0cmluZy5n
ZXREZXNjcmlwdG9yKCksICJiYXIiKQotICAgICAgICAuYnVpbGQoKS50b0J5dGVTdHJpbmcoKTsK
LSAgICBhc3NlcnRGaWVsZHNJbk9yZGVyKGR5bmFtaWNfZGF0YSk7Ci0gIH0KLQotICBwcml2YXRl
IEV4dGVuc2lvblJlZ2lzdHJ5IGdldFRlc3RGaWVsZE9yZGVyaW5nc1JlZ2lzdHJ5KCkgewotICAg
IEV4dGVuc2lvblJlZ2lzdHJ5IHJlc3VsdCA9IEV4dGVuc2lvblJlZ2lzdHJ5Lm5ld0luc3RhbmNl
KCk7Ci0gICAgcmVzdWx0LmFkZChVbml0dGVzdFByb3RvLm15RXh0ZW5zaW9uSW50KTsKLSAgICBy
ZXN1bHQuYWRkKFVuaXR0ZXN0UHJvdG8ubXlFeHRlbnNpb25TdHJpbmcpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VNdWx0aXBsZUV4dGVuc2lvblJh
bmdlcygpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcGFyc2Ug
YSBtZXNzYWdlIHRoYXQgY29udGFpbnMgbXVsdGlwbGUgZXh0ZW5zaW9ucwotICAgIC8vIHJhbmdl
cy4KLSAgICBUZXN0RmllbGRPcmRlcmluZ3Mgc291cmNlID0KLSAgICAgIFRlc3RGaWVsZE9yZGVy
aW5ncy5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE15SW50KDEpCi0gICAgICAgIC5zZXRNeVN0
cmluZygiZm9vIikKLSAgICAgICAgLnNldE15RmxvYXQoMS4wRikKLSAgICAgICAgLnNldEV4dGVu
c2lvbihVbml0dGVzdFByb3RvLm15RXh0ZW5zaW9uSW50LCAyMykKLSAgICAgICAgLnNldEV4dGVu
c2lvbihVbml0dGVzdFByb3RvLm15RXh0ZW5zaW9uU3RyaW5nLCAiYmFyIikKLSAgICAgICAgLmJ1
aWxkKCk7Ci0gICAgVGVzdEZpZWxkT3JkZXJpbmdzIGRlc3QgPQotICAgICAgVGVzdEZpZWxkT3Jk
ZXJpbmdzLnBhcnNlRnJvbShzb3VyY2UudG9CeXRlU3RyaW5nKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldFRlc3RGaWVsZE9yZGVyaW5nc1JlZ2lzdHJ5KCkpOwotICAg
IGFzc2VydEVxdWFscyhzb3VyY2UsIGRlc3QpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFBh
cnNlTXVsdGlwbGVFeHRlbnNpb25SYW5nZXNEeW5hbWljKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgLy8gU2FtZSBhcyBhYm92ZSBleGNlcHQgd2l0aCBEeW5hbWljTWVzc2FnZS4KLSAgICBEZXNj
cmlwdG9ycy5EZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBUZXN0RmllbGRPcmRlcmluZ3MuZ2V0RGVz
Y3JpcHRvcigpOwotICAgIER5bmFtaWNNZXNzYWdlIHNvdXJjZSA9Ci0gICAgICBEeW5hbWljTWVz
c2FnZS5uZXdCdWlsZGVyKFRlc3RGaWVsZE9yZGVyaW5ncy5nZXREZXNjcmlwdG9yKCkpCi0gICAg
ICAgIC5zZXRGaWVsZChkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgibXlfaW50IiksIDFMKQot
ICAgICAgICAuc2V0RmllbGQoZGVzY3JpcHRvci5maW5kRmllbGRCeU5hbWUoIm15X3N0cmluZyIp
LCAiZm9vIikKLSAgICAgICAgLnNldEZpZWxkKGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJt
eV9mbG9hdCIpLCAxLjBGKQotICAgICAgICAuc2V0RmllbGQoVW5pdHRlc3RQcm90by5teUV4dGVu
c2lvbkludC5nZXREZXNjcmlwdG9yKCksIDIzKQotICAgICAgICAuc2V0RmllbGQoVW5pdHRlc3RQ
cm90by5teUV4dGVuc2lvblN0cmluZy5nZXREZXNjcmlwdG9yKCksICJiYXIiKQotICAgICAgICAu
YnVpbGQoKTsKLSAgICBEeW5hbWljTWVzc2FnZSBkZXN0ID0KLSAgICAgIER5bmFtaWNNZXNzYWdl
LnBhcnNlRnJvbShkZXNjcmlwdG9yLCBzb3VyY2UudG9CeXRlU3RyaW5nKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2V0VGVzdEZpZWxkT3JkZXJpbmdzUmVnaXN0cnkoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKHNvdXJjZSwgZGVzdCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgVU5LTk9XTl9UWVBFX0lEID0gMTU1MDA1NTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IFRZUEVfSURfMSA9Ci0gICAgVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xLmdldERlc2Ny
aXB0b3IoKS5nZXRFeHRlbnNpb25zKCkuZ2V0KDApLmdldE51bWJlcigpOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgVFlQRV9JRF8yID0KLSAgICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjIu
Z2V0RGVzY3JpcHRvcigpLmdldEV4dGVuc2lvbnMoKS5nZXQoMCkuZ2V0TnVtYmVyKCk7Ci0KLSAg
cHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZU1lc3NhZ2VTZXRFYWdlcmx5KCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgdGVzdFNlcmlhbGl6ZU1lc3NhZ2VTZXRXaXRoRmxhZyh0cnVlKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RTZXJpYWxpemVNZXNzYWdlU2V0Tm90RWFnZXJseSgpIHRocm93
cyBFeGNlcHRpb24gewotICAgIHRlc3RTZXJpYWxpemVNZXNzYWdlU2V0V2l0aEZsYWcoZmFsc2Up
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRlc3RTZXJpYWxpemVNZXNzYWdlU2V0V2l0aEZsYWco
Ym9vbGVhbiBlYWdlclBhcnNpbmcpCi0gICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBFeHRl
bnNpb25SZWdpc3RyeUxpdGUuc2V0RWFnZXJseVBhcnNlTWVzc2FnZVNldHMoZWFnZXJQYXJzaW5n
KTsKLSAgICAvLyBTZXQgdXAgYSBUZXN0TWVzc2FnZVNldCB3aXRoIHR3byBrbm93biBtZXNzYWdl
cyBhbmQgYW4gdW5rbm93biBvbmUuCi0gICAgVGVzdE1lc3NhZ2VTZXQgbWVzc2FnZVNldCA9Ci0g
ICAgICBUZXN0TWVzc2FnZVNldC5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldEV4dGVuc2lvbigK
LSAgICAgICAgICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubWVzc2FnZVNldEV4dGVuc2lvbiwK
LSAgICAgICAgICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubmV3QnVpbGRlcigpLnNldEkoMTIz
KS5idWlsZCgpKQotICAgICAgICAuc2V0RXh0ZW5zaW9uKAotICAgICAgICAgIFRlc3RNZXNzYWdl
U2V0RXh0ZW5zaW9uMi5tZXNzYWdlU2V0RXh0ZW5zaW9uLAotICAgICAgICAgIFRlc3RNZXNzYWdl
U2V0RXh0ZW5zaW9uMi5uZXdCdWlsZGVyKCkuc2V0U3RyKCJmb28iKS5idWlsZCgpKQotICAgICAg
ICAuc2V0VW5rbm93bkZpZWxkcygKLSAgICAgICAgICBVbmtub3duRmllbGRTZXQubmV3QnVpbGRl
cigpCi0gICAgICAgICAgICAuYWRkRmllbGQoVU5LTk9XTl9UWVBFX0lELAotICAgICAgICAgICAg
ICBVbmtub3duRmllbGRTZXQuRmllbGQubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAgICAgLmFk
ZExlbmd0aERlbGltaXRlZChCeXRlU3RyaW5nLmNvcHlGcm9tVXRmOCgiYmFyIikpCi0gICAgICAg
ICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgICAgICAuYnVpbGQoKSkKLSAgICAgICAgLmJ1aWxk
KCk7Ci0KLSAgICBCeXRlU3RyaW5nIGRhdGEgPSBtZXNzYWdlU2V0LnRvQnl0ZVN0cmluZygpOwot
Ci0gICAgLy8gUGFyc2UgYmFjayB1c2luZyBSYXdNZXNzYWdlU2V0IGFuZCBjaGVjayB0aGUgY29u
dGVudHMuCi0gICAgUmF3TWVzc2FnZVNldCByYXcgPSBSYXdNZXNzYWdlU2V0LnBhcnNlRnJvbShk
YXRhKTsKLQotICAgIGFzc2VydFRydWUocmF3LmdldFVua25vd25GaWVsZHMoKS5hc01hcCgpLmlz
RW1wdHkoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMywgcmF3LmdldEl0ZW1Db3VudCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoVFlQRV9JRF8xLCByYXcuZ2V0SXRlbSgwKS5nZXRUeXBlSWQoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKFRZUEVfSURfMiwgcmF3LmdldEl0ZW0oMSkuZ2V0VHlwZUlkKCkpOwot
ICAgIGFzc2VydEVxdWFscyhVTktOT1dOX1RZUEVfSUQsIHJhdy5nZXRJdGVtKDIpLmdldFR5cGVJ
ZCgpKTsKLQotICAgIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMSBtZXNzYWdlMSA9Ci0gICAgICBU
ZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEucGFyc2VGcm9tKAotICAgICAgICByYXcuZ2V0SXRlbSgw
KS5nZXRNZXNzYWdlKCkudG9CeXRlQXJyYXkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbWVz
c2FnZTEuZ2V0SSgpKTsKLQotICAgIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMiBtZXNzYWdlMiA9
Ci0gICAgICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjIucGFyc2VGcm9tKAotICAgICAgICByYXcu
Z2V0SXRlbSgxKS5nZXRNZXNzYWdlKCkudG9CeXRlQXJyYXkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KCJmb28iLCBtZXNzYWdlMi5nZXRTdHIoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoImJhciIsIHJh
dy5nZXRJdGVtKDIpLmdldE1lc3NhZ2UoKS50b1N0cmluZ1V0ZjgoKSk7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCB0ZXN0UGFyc2VNZXNzYWdlU2V0RWFnZXJseSgpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIHRlc3RQYXJzZU1lc3NhZ2VTZXRXaXRoRmxhZyh0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RQYXJzZU1lc3NhZ2VTZXROb3RFYWdlcmx5KCl0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICB0ZXN0UGFyc2VNZXNzYWdlU2V0V2l0aEZsYWcoZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHRlc3RQYXJzZU1lc3NhZ2VTZXRXaXRoRmxhZyhib29sZWFuIGVhZ2VyUGFyc2luZykKLSAg
ICAgIHRocm93cyBFeGNlcHRpb24gewotICAgIEV4dGVuc2lvblJlZ2lzdHJ5TGl0ZS5zZXRFYWdl
cmx5UGFyc2VNZXNzYWdlU2V0cyhlYWdlclBhcnNpbmcpOwotICAgIEV4dGVuc2lvblJlZ2lzdHJ5
IGV4dGVuc2lvblJlZ2lzdHJ5ID0gRXh0ZW5zaW9uUmVnaXN0cnkubmV3SW5zdGFuY2UoKTsKLSAg
ICBleHRlbnNpb25SZWdpc3RyeS5hZGQoVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xLm1lc3NhZ2VT
ZXRFeHRlbnNpb24pOwotICAgIGV4dGVuc2lvblJlZ2lzdHJ5LmFkZChUZXN0TWVzc2FnZVNldEV4
dGVuc2lvbjIubWVzc2FnZVNldEV4dGVuc2lvbik7Ci0KLSAgICAvLyBTZXQgdXAgYSBSYXdNZXNz
YWdlU2V0IHdpdGggdHdvIGtub3duIG1lc3NhZ2VzIGFuZCBhbiB1bmtub3duIG9uZS4KLSAgICBS
YXdNZXNzYWdlU2V0IHJhdyA9Ci0gICAgICBSYXdNZXNzYWdlU2V0Lm5ld0J1aWxkZXIoKQotICAg
ICAgICAuYWRkSXRlbSgKLSAgICAgICAgICBSYXdNZXNzYWdlU2V0Lkl0ZW0ubmV3QnVpbGRlcigp
Ci0gICAgICAgICAgICAuc2V0VHlwZUlkKFRZUEVfSURfMSkKLSAgICAgICAgICAgIC5zZXRNZXNz
YWdlKAotICAgICAgICAgICAgICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubmV3QnVpbGRlcigp
Ci0gICAgICAgICAgICAgICAgLnNldEkoMTIzKQotICAgICAgICAgICAgICAgIC5idWlsZCgpLnRv
Qnl0ZVN0cmluZygpKQotICAgICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgIC5hZGRJdGVtKAot
ICAgICAgICAgIFJhd01lc3NhZ2VTZXQuSXRlbS5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgIC5z
ZXRUeXBlSWQoVFlQRV9JRF8yKQotICAgICAgICAgICAgLnNldE1lc3NhZ2UoCi0gICAgICAgICAg
ICAgIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMi5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgICAg
ICAuc2V0U3RyKCJmb28iKQotICAgICAgICAgICAgICAgIC5idWlsZCgpLnRvQnl0ZVN0cmluZygp
KQotICAgICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgIC5hZGRJdGVtKAotICAgICAgICAgIFJh
d01lc3NhZ2VTZXQuSXRlbS5uZXdCdWlsZGVyKCkKLSAgICAgICAgICAgIC5zZXRUeXBlSWQoVU5L
Tk9XTl9UWVBFX0lEKQotICAgICAgICAgICAgLnNldE1lc3NhZ2UoQnl0ZVN0cmluZy5jb3B5RnJv
bVV0ZjgoImJhciIpKQotICAgICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgpOwot
Ci0gICAgQnl0ZVN0cmluZyBkYXRhID0gcmF3LnRvQnl0ZVN0cmluZygpOwotCi0gICAgLy8gUGFy
c2UgYXMgYSBUZXN0TWVzc2FnZVNldCBhbmQgY2hlY2sgdGhlIGNvbnRlbnRzLgotICAgIFRlc3RN
ZXNzYWdlU2V0IG1lc3NhZ2VTZXQgPQotICAgICAgVGVzdE1lc3NhZ2VTZXQucGFyc2VGcm9tKGRh
dGEsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLQotICAgIGFzc2VydEVxdWFscygxMjMsIG1lc3NhZ2VT
ZXQuZ2V0RXh0ZW5zaW9uKAotICAgICAgVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xLm1lc3NhZ2VT
ZXRFeHRlbnNpb24pLmdldEkoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJmb28iLCBtZXNzYWdlU2V0
LmdldEV4dGVuc2lvbigKLSAgICAgIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMi5tZXNzYWdlU2V0
RXh0ZW5zaW9uKS5nZXRTdHIoKSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgdW5rbm93biBmaWVsZCB3
aXRoIHR5cGUgTEVOR1RIX0RFTElNSVRFRCwKLSAgICAvLyAgIG51bWJlciBVTktOT1dOX1RZUEVf
SUQsIGFuZCBjb250ZW50cyAiYmFyIi4KLSAgICBVbmtub3duRmllbGRTZXQgdW5rbm93bkZpZWxk
cyA9IG1lc3NhZ2VTZXQuZ2V0VW5rbm93bkZpZWxkcygpOwotICAgIGFzc2VydEVxdWFscygxLCB1
bmtub3duRmllbGRzLmFzTWFwKCkuc2l6ZSgpKTsKLSAgICBhc3NlcnRUcnVlKHVua25vd25GaWVs
ZHMuaGFzRmllbGQoVU5LTk9XTl9UWVBFX0lEKSk7Ci0KLSAgICBVbmtub3duRmllbGRTZXQuRmll
bGQgZmllbGQgPSB1bmtub3duRmllbGRzLmdldEZpZWxkKFVOS05PV05fVFlQRV9JRCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDEsIGZpZWxkLmdldExlbmd0aERlbGltaXRlZExpc3QoKS5zaXplKCkpOwot
ICAgIGFzc2VydEVxdWFscygiYmFyIiwgZmllbGQuZ2V0TGVuZ3RoRGVsaW1pdGVkTGlzdCgpLmdl
dCgwKS50b1N0cmluZ1V0ZjgoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VNZXNz
YWdlU2V0RXh0ZW5zaW9uRWFnZXJseSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIHRlc3RQYXJz
ZU1lc3NhZ2VTZXRFeHRlbnNpb25XaXRoRmxhZyh0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3RQYXJzZU1lc3NhZ2VTZXRFeHRlbnNpb25Ob3RFYWdlcmx5KCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgdGVzdFBhcnNlTWVzc2FnZVNldEV4dGVuc2lvbldpdGhGbGFnKGZhbHNlKTsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCB0ZXN0UGFyc2VNZXNzYWdlU2V0RXh0ZW5zaW9uV2l0aEZsYWco
Ym9vbGVhbiBlYWdlclBhcnNpbmcpCi0gICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBFeHRl
bnNpb25SZWdpc3RyeUxpdGUuc2V0RWFnZXJseVBhcnNlTWVzc2FnZVNldHMoZWFnZXJQYXJzaW5n
KTsKLSAgICBFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSA9IEV4dGVuc2lvblJl
Z2lzdHJ5Lm5ld0luc3RhbmNlKCk7Ci0gICAgZXh0ZW5zaW9uUmVnaXN0cnkuYWRkKFRlc3RNZXNz
YWdlU2V0RXh0ZW5zaW9uMS5tZXNzYWdlU2V0RXh0ZW5zaW9uKTsKLQotICAgIC8vIFNldCB1cCBh
IFJhd01lc3NhZ2VTZXQgd2l0aCBhIGtub3duIG1lc3NhZ2VzLgotICAgIGludCBUWVBFX0lEXzEg
PQotICAgICAgICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEKLSAgICAgICAgICAgIC5nZXREZXNj
cmlwdG9yKCkuZ2V0RXh0ZW5zaW9ucygpLmdldCgwKS5nZXROdW1iZXIoKTsKLSAgICBSYXdNZXNz
YWdlU2V0IHJhdyA9Ci0gICAgICBSYXdNZXNzYWdlU2V0Lm5ld0J1aWxkZXIoKQotICAgICAgICAu
YWRkSXRlbSgKLSAgICAgICAgICBSYXdNZXNzYWdlU2V0Lkl0ZW0ubmV3QnVpbGRlcigpCi0gICAg
ICAgICAgICAuc2V0VHlwZUlkKFRZUEVfSURfMSkKLSAgICAgICAgICAgIC5zZXRNZXNzYWdlKAot
ICAgICAgICAgICAgICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubmV3QnVpbGRlcigpCi0gICAg
ICAgICAgICAgICAgLnNldEkoMTIzKQotICAgICAgICAgICAgICAgIC5idWlsZCgpLnRvQnl0ZVN0
cmluZygpKQotICAgICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgpOwotCi0gICAg
Qnl0ZVN0cmluZyBkYXRhID0gcmF3LnRvQnl0ZVN0cmluZygpOwotCi0gICAgLy8gUGFyc2UgYXMg
YSBUZXN0TWVzc2FnZVNldCBhbmQgY2hlY2sgdGhlIGNvbnRlbnRzLgotICAgIFRlc3RNZXNzYWdl
U2V0IG1lc3NhZ2VTZXQgPQotICAgICAgICBUZXN0TWVzc2FnZVNldC5wYXJzZUZyb20oZGF0YSwg
ZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgIGFzc2VydEVxdWFscygxMjMsIG1lc3NhZ2VTZXQuZ2V0
RXh0ZW5zaW9uKAotICAgICAgICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubWVzc2FnZVNldEV4
dGVuc2lvbikuZ2V0SSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZUxhenlNZXNz
YWdlU2V0RXh0ZW5zaW9uRWFnZXJseSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIHRlc3RNZXJn
ZUxhenlNZXNzYWdlU2V0RXh0ZW5zaW9uV2l0aEZsYWcodHJ1ZSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0TWVyZ2VMYXp5TWVzc2FnZVNldEV4dGVuc2lvbk5vdEVhZ2VybHkoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICB0ZXN0TWVyZ2VMYXp5TWVzc2FnZVNldEV4dGVuc2lvbldpdGhGbGFn
KGZhbHNlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0ZXN0TWVyZ2VMYXp5TWVzc2FnZVNldEV4
dGVuc2lvbldpdGhGbGFnKGJvb2xlYW4gZWFnZXJQYXJzaW5nKQotICAgICAgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgRXh0ZW5zaW9uUmVnaXN0cnlMaXRlLnNldEVhZ2VybHlQYXJzZU1lc3NhZ2VT
ZXRzKGVhZ2VyUGFyc2luZyk7Ci0gICAgRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0
cnkgPSBFeHRlbnNpb25SZWdpc3RyeS5uZXdJbnN0YW5jZSgpOwotICAgIGV4dGVuc2lvblJlZ2lz
dHJ5LmFkZChUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubWVzc2FnZVNldEV4dGVuc2lvbik7Ci0K
LSAgICAvLyBTZXQgdXAgYSBSYXdNZXNzYWdlU2V0IHdpdGggYSBrbm93biBtZXNzYWdlcy4KLSAg
ICBpbnQgVFlQRV9JRF8xID0KLSAgICAgICAgVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xCi0gICAg
ICAgICAgICAuZ2V0RGVzY3JpcHRvcigpLmdldEV4dGVuc2lvbnMoKS5nZXQoMCkuZ2V0TnVtYmVy
KCk7Ci0gICAgUmF3TWVzc2FnZVNldCByYXcgPQotICAgICAgUmF3TWVzc2FnZVNldC5uZXdCdWls
ZGVyKCkKLSAgICAgICAgLmFkZEl0ZW0oCi0gICAgICAgICAgUmF3TWVzc2FnZVNldC5JdGVtLm5l
d0J1aWxkZXIoKQotICAgICAgICAgICAgLnNldFR5cGVJZChUWVBFX0lEXzEpCi0gICAgICAgICAg
ICAuc2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAgVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xLm5l
d0J1aWxkZXIoKQotICAgICAgICAgICAgICAgIC5zZXRJKDEyMykKLSAgICAgICAgICAgICAgICAu
YnVpbGQoKS50b0J5dGVTdHJpbmcoKSkKLSAgICAgICAgICAgIC5idWlsZCgpKQotICAgICAgICAu
YnVpbGQoKTsKLQotICAgIEJ5dGVTdHJpbmcgZGF0YSA9IHJhdy50b0J5dGVTdHJpbmcoKTsKLQot
ICAgIC8vIFBhcnNlIGFzIGEgVGVzdE1lc3NhZ2VTZXQgYW5kIHN0b3JlIHZhbHVlIGludG8gbGF6
eSBmaWVsZAotICAgIFRlc3RNZXNzYWdlU2V0IG1lc3NhZ2VTZXQgPQotICAgICAgICBUZXN0TWVz
c2FnZVNldC5wYXJzZUZyb20oZGF0YSwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgIC8vIE1lcmdl
IGxhenkgZmllbGQgY2hlY2sgdGhlIGNvbnRlbnRzLgotICAgIG1lc3NhZ2VTZXQgPQotICAgICAg
ICBtZXNzYWdlU2V0LnRvQnVpbGRlcigpLm1lcmdlRnJvbShkYXRhLCBleHRlbnNpb25SZWdpc3Ry
eSkuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBtZXNzYWdlU2V0LmdldEV4dGVuc2lv
bigKLSAgICAgICAgVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xLm1lc3NhZ2VTZXRFeHRlbnNpb24p
LmdldEkoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VNZXNzYWdlU2V0RXh0ZW5z
aW9uRWFnZXJseSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIHRlc3RNZXJnZU1lc3NhZ2VTZXRF
eHRlbnNpb25XaXRoRmxhZyh0cnVlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZU1l
c3NhZ2VTZXRFeHRlbnNpb25Ob3RFYWdlcmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgdGVz
dE1lcmdlTWVzc2FnZVNldEV4dGVuc2lvbldpdGhGbGFnKGZhbHNlKTsKLSAgfQotCi0gIHByaXZh
dGUgdm9pZCB0ZXN0TWVyZ2VNZXNzYWdlU2V0RXh0ZW5zaW9uV2l0aEZsYWcoYm9vbGVhbiBlYWdl
clBhcnNpbmcpCi0gICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBFeHRlbnNpb25SZWdpc3Ry
eUxpdGUuc2V0RWFnZXJseVBhcnNlTWVzc2FnZVNldHMoZWFnZXJQYXJzaW5nKTsKLSAgICBFeHRl
bnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSA9IEV4dGVuc2lvblJlZ2lzdHJ5Lm5ld0lu
c3RhbmNlKCk7Ci0gICAgZXh0ZW5zaW9uUmVnaXN0cnkuYWRkKFRlc3RNZXNzYWdlU2V0RXh0ZW5z
aW9uMS5tZXNzYWdlU2V0RXh0ZW5zaW9uKTsKLQotICAgIC8vIFNldCB1cCBhIFJhd01lc3NhZ2VT
ZXQgd2l0aCBhIGtub3duIG1lc3NhZ2VzLgotICAgIGludCBUWVBFX0lEXzEgPQotICAgICAgICBU
ZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEKLSAgICAgICAgICAgIC5nZXREZXNjcmlwdG9yKCkuZ2V0
RXh0ZW5zaW9ucygpLmdldCgwKS5nZXROdW1iZXIoKTsKLSAgICBSYXdNZXNzYWdlU2V0IHJhdyA9
Ci0gICAgICBSYXdNZXNzYWdlU2V0Lm5ld0J1aWxkZXIoKQotICAgICAgICAuYWRkSXRlbSgKLSAg
ICAgICAgICBSYXdNZXNzYWdlU2V0Lkl0ZW0ubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAuc2V0
VHlwZUlkKFRZUEVfSURfMSkKLSAgICAgICAgICAgIC5zZXRNZXNzYWdlKAotICAgICAgICAgICAg
ICBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubmV3QnVpbGRlcigpCi0gICAgICAgICAgICAgICAg
LnNldEkoMTIzKQotICAgICAgICAgICAgICAgIC5idWlsZCgpLnRvQnl0ZVN0cmluZygpKQotICAg
ICAgICAgICAgLmJ1aWxkKCkpCi0gICAgICAgIC5idWlsZCgpOwotCi0gICAgLy8gU2VyaWFsaXpl
IFJhd01lc3NhZ2VTZXQgdW5ub3JtYWxseSAobWVzc2FnZSB2YWx1ZSBiZWZvcmUgdHlwZSBpZCkK
LSAgICBCeXRlU3RyaW5nLkNvZGVkQnVpbGRlciBvdXQgPSBCeXRlU3RyaW5nLm5ld0NvZGVkQnVp
bGRlcigKLSAgICAgICAgcmF3LmdldFNlcmlhbGl6ZWRTaXplKCkpOwotICAgIENvZGVkT3V0cHV0
U3RyZWFtIG91dHB1dCA9IG91dC5nZXRDb2RlZE91dHB1dCgpOwotICAgIExpc3Q8UmF3TWVzc2Fn
ZVNldC5JdGVtPiBpdGVtcyA9IHJhdy5nZXRJdGVtTGlzdCgpOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIFJhd01lc3NhZ2VTZXQuSXRlbSBpdGVt
ID0gaXRlbXMuZ2V0KGkpOwotICAgICAgb3V0cHV0LndyaXRlVGFnKDEsIFdpcmVGb3JtYXQuV0lS
RVRZUEVfU1RBUlRfR1JPVVApOwotICAgICAgb3V0cHV0LndyaXRlQnl0ZXMoMywgaXRlbS5nZXRN
ZXNzYWdlKCkpOwotICAgICAgb3V0cHV0LndyaXRlSW50MzIoMiwgaXRlbS5nZXRUeXBlSWQoKSk7
Ci0gICAgICBvdXRwdXQud3JpdGVUYWcoMSwgV2lyZUZvcm1hdC5XSVJFVFlQRV9FTkRfR1JPVVAp
OwotICAgIH0KLSAgICBCeXRlU3RyaW5nIGRhdGEgPSBvdXQuYnVpbGQoKTsKLQotICAgIC8vIE1l
cmdlIGJ5dGVzIGludG8gVGVzdE1lc3NhZ2VTZXQgYW5kIGNoZWNrIHRoZSBjb250ZW50cy4KLSAg
ICBUZXN0TWVzc2FnZVNldCBtZXNzYWdlU2V0ID0KLSAgICAgICAgVGVzdE1lc3NhZ2VTZXQubmV3
QnVpbGRlcigpLm1lcmdlRnJvbShkYXRhLCBleHRlbnNpb25SZWdpc3RyeSkuYnVpbGQoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMTIzLCBtZXNzYWdlU2V0LmdldEV4dGVuc2lvbigKLSAgICAgICAgVGVz
dE1lc3NhZ2VTZXRFeHRlbnNpb24xLm1lc3NhZ2VTZXRFeHRlbnNpb24pLmdldEkoKSk7Ci0gIH0K
LQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0gIC8vIG9uZW9mCi0gIHB1YmxpYyB2b2lkIHRlc3RPbmVvZldpcmVG
b3JtYXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0T25lb2YyLkJ1aWxkZXIgYnVpbGRl
ciA9IFRlc3RPbmVvZjIubmV3QnVpbGRlcigpOwotICAgIFRlc3RVdGlsLnNldE9uZW9mKGJ1aWxk
ZXIpOwotICAgIFRlc3RPbmVvZjIgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBCeXRl
U3RyaW5nIHJhd0J5dGVzID0gbWVzc2FnZS50b0J5dGVTdHJpbmcoKTsKLQotICAgIGFzc2VydEVx
dWFscyhyYXdCeXRlcy5zaXplKCksIG1lc3NhZ2UuZ2V0U2VyaWFsaXplZFNpemUoKSk7Ci0KLSAg
ICBUZXN0T25lb2YyIG1lc3NhZ2UyID0gVGVzdE9uZW9mMi5wYXJzZUZyb20ocmF3Qnl0ZXMpOwot
ICAgIFRlc3RVdGlsLmFzc2VydE9uZW9mU2V0KG1lc3NhZ2UyKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3RPbmVvZk9ubHlMYXN0U2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdE9u
ZW9mQmFja3dhcmRzQ29tcGF0aWJsZSBzb3VyY2UgPSBUZXN0T25lb2ZCYWNrd2FyZHNDb21wYXRp
YmxlCi0gICAgICAgIC5uZXdCdWlsZGVyKCkuc2V0Rm9vSW50KDEwMCkuc2V0Rm9vU3RyaW5nKCIx
MDEiKS5idWlsZCgpOwotCi0gICAgQnl0ZVN0cmluZyByYXdCeXRlcyA9IHNvdXJjZS50b0J5dGVT
dHJpbmcoKTsKLSAgICBUZXN0T25lb2YyIG1lc3NhZ2UgPSBUZXN0T25lb2YyLnBhcnNlRnJvbShy
YXdCeXRlcyk7Ci0gICAgYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNGb29JbnQoKSk7Ci0gICAgYXNz
ZXJ0VHJ1ZShtZXNzYWdlLmhhc0Zvb1N0cmluZygpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZh
L2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9hbnlfdGVzdC5wcm90byBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvYW55X3Rlc3QucHJv
dG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMTczZDhhMGU0MjJmNjJjNWE3Njlh
NjRjMmU2ODk2YThjMTJkNzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9hbnlf
dGVzdC5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBhbnlf
dGVzdDsKLQotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJhbnlfdGVzdCI7Ci1vcHRpb24gamF2YV9v
dXRlcl9jbGFzc25hbWUgPSAiQW55VGVzdFByb3RvIjsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9i
dWYvYW55LnByb3RvIjsKLQotbWVzc2FnZSBUZXN0QW55IHsKLSAgZ29vZ2xlLnByb3RvYnVmLkFu
eSB2YWx1ZSA9IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20v
Z29vZ2xlL3Byb3RvYnVmL2ZpZWxkX3ByZXNlbmNlX3Rlc3QucHJvdG8gYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMv
dGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX3ByZXNlbmNlX3Rlc3QucHJvdG8K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmM2NhOGM2MTA1Nzk3M2YxYjllYzExZDkz
MWFjMzNmNTVhNDQ3ZGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9maWVsZF9w
cmVzZW5jZV90ZXN0LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9ICJwcm90bzMiOwotCi1wYWNr
YWdlIGZpZWxkX3ByZXNlbmNlX3Rlc3Q7Ci0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL3VuaXR0
ZXN0LnByb3RvIjsKLQotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVm
IjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJGaWVsZFByZXNlbmNlVGVzdFByb3Rv
IjsKLW9wdGlvbiBqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCA9IHRydWU7Ci0KLW1lc3Nh
Z2UgVGVzdEFsbFR5cGVzIHsKLSAgZW51bSBOZXN0ZWRFbnVtIHsKLSAgICBGT08gPSAwOwotICAg
IEJBUiA9IDE7Ci0gICAgQkFaID0gMjsKLSAgfQotICBtZXNzYWdlIE5lc3RlZE1lc3NhZ2Ugewot
ICAgIGludDMyIHZhbHVlID0gMTsKLSAgfQotCi0gIGludDMyIG9wdGlvbmFsX2ludDMyID0gMTsK
LSAgc3RyaW5nIG9wdGlvbmFsX3N0cmluZyA9IDI7Ci0gIGJ5dGVzIG9wdGlvbmFsX2J5dGVzID0g
MzsKLSAgTmVzdGVkRW51bSBvcHRpb25hbF9uZXN0ZWRfZW51bSA9IDQ7Ci0gIE5lc3RlZE1lc3Nh
Z2Ugb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgPSA1OwotICBwcm90b2J1Zl91bml0dGVzdC5UZXN0
UmVxdWlyZWQgb3B0aW9uYWxfcHJvdG8yX21lc3NhZ2UgPSA2OwotCi0gIG9uZW9mIG9uZW9mX2Zp
ZWxkIHsKLSAgICBpbnQzMiBvbmVvZl9pbnQzMiA9IDExOwotICAgIHVpbnQzMiBvbmVvZl91aW50
MzIgPSAxMjsKLSAgICBzdHJpbmcgb25lb2Zfc3RyaW5nID0gMTM7Ci0gICAgYnl0ZXMgb25lb2Zf
Ynl0ZXMgPSAxNDsKLSAgICBOZXN0ZWRFbnVtIG9uZW9mX25lc3RlZF9lbnVtID0gMTU7Ci0gICAg
TmVzdGVkTWVzc2FnZSBvbmVvZl9uZXN0ZWRfbWVzc2FnZSA9IDE2OwotICAgIHByb3RvYnVmX3Vu
aXR0ZXN0LlRlc3RSZXF1aXJlZCBvbmVvZl9wcm90bzJfbWVzc2FnZSA9IDE3OwotICB9Ci0KLSAg
cmVwZWF0ZWQgaW50MzIgcmVwZWF0ZWRfaW50MzIgPSAyMTsKLSAgcmVwZWF0ZWQgc3RyaW5nIHJl
cGVhdGVkX3N0cmluZyA9IDIyOwotICByZXBlYXRlZCBieXRlcyByZXBlYXRlZF9ieXRlcyA9IDIz
OwotICByZXBlYXRlZCBOZXN0ZWRFbnVtIHJlcGVhdGVkX25lc3RlZF9lbnVtID0gMjQ7Ci0gIHJl
cGVhdGVkIE5lc3RlZE1lc3NhZ2UgcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgPSAyNTsKLSAgcmVw
ZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVkIHJlcGVhdGVkX3Byb3RvMl9tZXNz
YWdlID0gMjY7Ci0gIHJlcGVhdGVkIE5lc3RlZEVudW0gcGFja2VkX25lc3RlZF9lbnVtID0gMjcg
W3BhY2tlZCA9IHRydWVdOwotfQotCi1tZXNzYWdlIFRlc3RPcHRpb25hbEZpZWxkc09ubHkgewot
ICBpbnQzMiBvcHRpb25hbF9pbnQzMiA9IDE7Ci0gIHN0cmluZyBvcHRpb25hbF9zdHJpbmcgPSAy
OwotICBieXRlcyBvcHRpb25hbF9ieXRlcyA9IDM7Ci0gIFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVt
IG9wdGlvbmFsX25lc3RlZF9lbnVtID0gNDsKLSAgVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2Ug
b3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgPSA1OwotICBwcm90b2J1Zl91bml0dGVzdC5UZXN0UmVx
dWlyZWQgb3B0aW9uYWxfcHJvdG8yX21lc3NhZ2UgPSA2OwotfQotCi1tZXNzYWdlIFRlc3RSZXBl
YXRlZEZpZWxkc09ubHkgewotICByZXBlYXRlZCBpbnQzMiByZXBlYXRlZF9pbnQzMiA9IDIxOwot
ICByZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRfc3RyaW5nID0gMjI7Ci0gIHJlcGVhdGVkIGJ5dGVz
IHJlcGVhdGVkX2J5dGVzID0gMjM7Ci0gIHJlcGVhdGVkIFRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVt
IHJlcGVhdGVkX25lc3RlZF9lbnVtID0gMjQ7Ci0gIHJlcGVhdGVkIFRlc3RBbGxUeXBlcy5OZXN0
ZWRNZXNzYWdlIHJlcGVhdGVkX25lc3RlZF9tZXNzYWdlID0gMjU7Ci0gIHJlcGVhdGVkIHByb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RSZXF1aXJlZCByZXBlYXRlZF9wcm90bzJfbWVzc2FnZSA9IDI2Owot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1
Zi9sYXp5X2ZpZWxkc19saXRlLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dv
b2dsZS9wcm90b2J1Zi9sYXp5X2ZpZWxkc19saXRlLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1NTgwZjcyZDk5MGQ3YjczMDU0Y2MyNzQwNGJlYzliMzc4ZWJmM2JmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90
ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbGF6eV9maWVsZHNfbGl0ZS5wcm90bworKysg
L2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0vLyBBdXRob3I6IE5hb2tpIEl3YXNha2kgKG5pd2FzYWtpQGdvb2dsZS5jb20pCi0v
LwotLy8gQSBwcm90byBmaWxlIHdpdGggbGF6eSBmaWVsZHMKLQotc3ludGF4ID0gInByb3RvMiI7
Ci0KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7Ci0KLW9wdGlvbiBvcHRpbWl6ZV9mb3IgPSBM
SVRFX1JVTlRJTUU7Ci0KLW1lc3NhZ2UgTGF6eU1lc3NhZ2VMaXRlIHsKLSAgb3B0aW9uYWwgaW50
MzIgbnVtID0gMTsKLSAgb3B0aW9uYWwgaW50MzIgbnVtX3dpdGhfZGVmYXVsdCA9IDIgW2RlZmF1
bHQgPSA0MjFdOwotICBvcHRpb25hbCBMYXp5SW5uZXJNZXNzYWdlTGl0ZSBpbm5lciA9IDMgW2xh
enkgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgTGF6eUlubmVyTWVzc2FnZUxpdGUgcmVwZWF0ZWRfaW5u
ZXIgPSA0IFtsYXp5ID0gdHJ1ZV07Ci0KLSAgb25lb2Ygb25lb2ZfZmllbGQgewotICAgIGludDMy
IG9uZW9mX251bSA9IDU7Ci0gICAgTGF6eUlubmVyTWVzc2FnZUxpdGUgb25lb2ZfaW5uZXIgPSA2
IFtsYXp5ID0gdHJ1ZV07Ci0gIH0KLX0KLQotbWVzc2FnZSBMYXp5SW5uZXJNZXNzYWdlTGl0ZSB7
Ci0gIG9wdGlvbmFsIGludDMyIG51bSA9IDE7Ci0gIG9wdGlvbmFsIGludDMyIG51bV93aXRoX2Rl
ZmF1bHQgPSAyIFtkZWZhdWx0ID0gNDJdOwotICBvcHRpb25hbCBMYXp5TmVzdGVkSW5uZXJNZXNz
YWdlTGl0ZSBuZXN0ZWQgPSAzIFtsYXp5ID0gdHJ1ZV07Ci0KLSAgZXh0ZW5zaW9ucyAxMDAwIHRv
IG1heDsKLX0KLQotbWVzc2FnZSBMYXp5RXh0ZW5zaW9uIHsKLSAgZXh0ZW5kIExhenlJbm5lck1l
c3NhZ2VMaXRlIHsKLSAgICBvcHRpb25hbCBMYXp5RXh0ZW5zaW9uIGV4dGVuc2lvbiA9IDEwMDA7
Ci0gIH0KLSAgb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotfQotCi1tZXNzYWdlIExhenlOZXN0
ZWRJbm5lck1lc3NhZ2VMaXRlIHsKLSAgb3B0aW9uYWwgaW50MzIgbnVtID0gMTsKLSAgb3B0aW9u
YWwgaW50MzIgbnVtX3dpdGhfZGVmYXVsdCA9IDIgW2RlZmF1bHQgPSA0XTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbGl0ZV9lcXVh
bHNfYW5kX2hhc2gucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3By
b3RvYnVmL2xpdGVfZXF1YWxzX2FuZF9oYXNoLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2ZWVmNDJjNTc4Yzk2ZjIwOWIxYjAwMmNlMDIzYzBhYzExODU3Yzc4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbGl0ZV9lcXVhbHNfYW5kX2hhc2gucHJvdG8KKysr
IC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotLy8gQXV0aG9yOiBwYm9nbGVAZ29vZ2xlLmNvbSAoUGhpbCBCb2dsZSkKLQotc3lu
dGF4ID0gInByb3RvMiI7Ci0KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3QubGl0ZV9lcXVhbHNf
YW5kX2hhc2g7Ci0KLW9wdGlvbiBvcHRpbWl6ZV9mb3IgPSBMSVRFX1JVTlRJTUU7Ci0KLW1lc3Nh
Z2UgVGVzdE9uZW9mRXF1YWxzIHsKLSAgb25lb2Ygb25lb2ZfZmllbGQgewotICAgIHN0cmluZyBu
YW1lID0gMTsKLSAgICBpbnQzMiB2YWx1ZSA9IDI7Ci0gIH0KLX0KLQotbWVzc2FnZSBGb28gewot
ICBvcHRpb25hbCBpbnQzMiB2YWx1ZSA9IDE7Ci0gIHJlcGVhdGVkIEJhciBiYXIgPSAyOwotCi0g
IGV4dGVuc2lvbnMgMTAwIHRvIG1heDsKLX0KLQotbWVzc2FnZSBCYXIgewotICBleHRlbmQgRm9v
IHsKLSAgICBvcHRpb25hbCBCYXIgZm9vX2V4dCA9IDEwMDsKLSAgfQotCi0gIG9wdGlvbmFsIHN0
cmluZyBuYW1lID0gMTsKLX0KLQotbWVzc2FnZSBCYXJQcmltZSB7Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBuYW1lID0gMTsKLX0KLQotbWVzc2FnZSBFbXB0eSB7Ci19Ci0KLWV4dGVuZCBGb28gewotICBv
cHRpb25hbCBpbnQzMiB2YXJpbnQgPSAxMDE7Ci0gIG9wdGlvbmFsIGZpeGVkMzIgZml4ZWQzMiA9
IDEwMjsKLSAgb3B0aW9uYWwgZml4ZWQ2NCBmaXhlZDY0ID0gMTAzOwotICBvcHRpb25hbCBncm91
cCBNeUdyb3VwID0gMTA0IHsKLSAgICBvcHRpb25hbCBzdHJpbmcgZ3JvdXBfdmFsdWUgPSAxOwot
ICB9Ci19Ci0KLW1lc3NhZ2UgVGVzdFJlY3Vyc2l2ZU9uZW9mIHsKLSAgb25lb2YgRm9vIHsKLSAg
ICBUZXN0UmVjdXJzaXZlT25lb2YgciA9IDE7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3Jl
L3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbWFwX2Zvcl9wcm90bzJfbGl0ZV90
ZXN0LnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9t
YXBfZm9yX3Byb3RvMl9saXRlX3Rlc3QucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ1NDE4ZjI4YmMwNjlkYzBlZTIxY2VkNDIwMWVjMmFmNGMzYTRkNWEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJv
dG8vY29tL2dvb2dsZS9wcm90b2J1Zi9tYXBfZm9yX3Byb3RvMl9saXRlX3Rlc3QucHJvdG8KKysr
IC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotc3ludGF4ID0gInByb3RvMiI7Ci0KLQotb3B0aW9uIGphdmFfb3V0ZXJfY2xhc3Nu
YW1lID0gIk1hcEZvclByb3RvMlRlc3RQcm90byI7Ci1vcHRpb24gamF2YV9nZW5lcmF0ZV9lcXVh
bHNfYW5kX2hhc2ggPSB0cnVlOwotCi1tZXNzYWdlIFRlc3RNYXAgewotICBtZXNzYWdlIE1lc3Nh
Z2VWYWx1ZSB7Ci0gICAgb3B0aW9uYWwgaW50MzIgdmFsdWUgPSAxOwotICB9Ci0gIGVudW0gRW51
bVZhbHVlIHsKLSAgICBGT08gPSAwOwotICAgIEJBUiA9IDE7Ci0gICAgQkFaID0gMjsKLSAgICBR
VVggPSAzOwotICB9Ci0KLSAgbWFwPGludDMyLCBpbnQzMj4gICAgICAgICBpbnQzMl90b19pbnQz
Ml9maWVsZCA9IDE7Ci0gIG1hcDxpbnQzMiwgc3RyaW5nPiAgICAgICAgaW50MzJfdG9fc3RyaW5n
X2ZpZWxkID0gMjsKLSAgbWFwPGludDMyLCBieXRlcz4gICAgICAgICBpbnQzMl90b19ieXRlc19m
aWVsZCA9IDM7Ci0gIG1hcDxpbnQzMiwgRW51bVZhbHVlPiAgICAgaW50MzJfdG9fZW51bV9maWVs
ZCA9IDQ7Ci0gIG1hcDxpbnQzMiwgTWVzc2FnZVZhbHVlPiAgaW50MzJfdG9fbWVzc2FnZV9maWVs
ZCA9IDU7Ci0gIG1hcDxzdHJpbmcsIGludDMyPiAgICAgICAgc3RyaW5nX3RvX2ludDMyX2ZpZWxk
ID0gNjsKLQotICBtZXNzYWdlIE1lc3NhZ2VXaXRoUmVxdWlyZWRGaWVsZHMgewotICAgIHJlcXVp
cmVkIGludDMyIHZhbHVlID0gMTsKLSAgfQotICBtYXA8aW50MzIsIE1lc3NhZ2VXaXRoUmVxdWly
ZWRGaWVsZHM+IHJlcXVpcmVkX21lc3NhZ2VfbWFwID0gMTE7Ci19Ci0KLW1lc3NhZ2UgVGVzdFVu
a25vd25FbnVtVmFsdWUgewotICAvLyBXaXJlLWNvbXBhdGlibGUgd2l0aCBUZXN0TWFwLmludDMy
X3RvX2VudW1fZmllbGQgc28gd2UgY2FuIHRlc3QgdGhlCi0gIC8vIHBhcnNpbmcgYmVoYXZpb3Ig
b2YgVGVzdE1hcCByZWdhcmRpbmcgdW5rbm93biBlbnVtIHZhbHVlcy4KLSAgbWFwPGludDMyLCBp
bnQzMj4gaW50MzJfdG9faW50MzJfZmllbGQgPSA0OwotfQotCi0vLyBUZXN0IHRoYXQgdGhlIG1h
cHMgaW5pdGlhbGl6YXRpb24gY29kZSB3b3JrcyBjb3JyZWN0bHkgd2hlbiB0aGUgbWFwIGZpZWxk
Ci0vLyByZWZlcmVuY2VzIHRoZSBjb250YWluaW5nIG1lc3NhZ2UuCi1tZXNzYWdlIFRlc3RSZWN1
cnNpdmVNYXAgewotICBvcHRpb25hbCBpbnQzMiB2YWx1ZSA9IDE7Ci0gIG1hcDxpbnQzMiwgVGVz
dFJlY3Vyc2l2ZU1hcD4gcmVjdXJzaXZlX21hcF9maWVsZCA9IDI7Ci19Ci1wYWNrYWdlIG1hcF9m
b3JfcHJvdG8yX2xpdGVfdGVzdDsKLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAibWFwX2xpdGVfdGVz
dCI7Ci1vcHRpb24gb3B0aW1pemVfZm9yID0gTElURV9SVU5USU1FOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZh
L2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9tYXBfZm9yX3Byb3RvMl90
ZXN0LnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9t
YXBfZm9yX3Byb3RvMl90ZXN0LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
OWJlNTE2NmQwOWY3OTUzMjVlYjU2YjczZTI4ZGU2NTViY2JmMTVmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2Nv
bS9nb29nbGUvcHJvdG9idWYvbWFwX2Zvcl9wcm90bzJfdGVzdC5wcm90bworKysgL2Rldi9udWxs
CkBAIC0xLDc0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1z
eW50YXggPSAicHJvdG8yIjsKLQotcGFja2FnZSBtYXBfZm9yX3Byb3RvMl90ZXN0OwotCi1vcHRp
b24gamF2YV9wYWNrYWdlID0gIm1hcF90ZXN0IjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFt
ZSA9ICJNYXBGb3JQcm90bzJUZXN0UHJvdG8iOwotb3B0aW9uIGphdmFfZ2VuZXJhdGVfZXF1YWxz
X2FuZF9oYXNoID0gdHJ1ZTsKLQotbWVzc2FnZSBUZXN0TWFwIHsKLSAgbWVzc2FnZSBNZXNzYWdl
VmFsdWUgewotICAgIG9wdGlvbmFsIGludDMyIHZhbHVlID0gMTsKLSAgfQotICBlbnVtIEVudW1W
YWx1ZSB7Ci0gICAgRk9PID0gMDsKLSAgICBCQVIgPSAxOwotICAgIEJBWiA9IDI7Ci0gICAgUVVY
ID0gMzsKLSAgfQotCi0gIG1hcDxpbnQzMiwgaW50MzI+ICAgICAgICAgaW50MzJfdG9faW50MzJf
ZmllbGQgPSAxOwotICBtYXA8aW50MzIsIHN0cmluZz4gICAgICAgIGludDMyX3RvX3N0cmluZ19m
aWVsZCA9IDI7Ci0gIG1hcDxpbnQzMiwgYnl0ZXM+ICAgICAgICAgaW50MzJfdG9fYnl0ZXNfZmll
bGQgPSAzOwotICBtYXA8aW50MzIsIEVudW1WYWx1ZT4gICAgIGludDMyX3RvX2VudW1fZmllbGQg
PSA0OwotICBtYXA8aW50MzIsIE1lc3NhZ2VWYWx1ZT4gIGludDMyX3RvX21lc3NhZ2VfZmllbGQg
PSA1OwotICBtYXA8c3RyaW5nLCBpbnQzMj4gICAgICAgIHN0cmluZ190b19pbnQzMl9maWVsZCA9
IDY7Ci0KLSAgbWVzc2FnZSBNZXNzYWdlV2l0aFJlcXVpcmVkRmllbGRzIHsKLSAgICByZXF1aXJl
ZCBpbnQzMiB2YWx1ZSA9IDE7Ci0gIH0KLSAgbWFwPGludDMyLCBNZXNzYWdlV2l0aFJlcXVpcmVk
RmllbGRzPiByZXF1aXJlZF9tZXNzYWdlX21hcCA9IDExOwotfQotCi1tZXNzYWdlIFRlc3RVbmtu
b3duRW51bVZhbHVlIHsKLSAgLy8gV2lyZS1jb21wYXRpYmxlIHdpdGggVGVzdE1hcC5pbnQzMl90
b19lbnVtX2ZpZWxkIHNvIHdlIGNhbiB0ZXN0IHRoZQotICAvLyBwYXJzaW5nIGJlaGF2aW9yIG9m
IFRlc3RNYXAgcmVnYXJkaW5nIHVua25vd24gZW51bSB2YWx1ZXMuCi0gIG1hcDxpbnQzMiwgaW50
MzI+IGludDMyX3RvX2ludDMyX2ZpZWxkID0gNDsKLX0KLQotLy8gVGVzdCB0aGF0IHRoZSBtYXBz
IGluaXRpYWxpemF0aW9uIGNvZGUgd29ya3MgY29ycmVjdGx5IHdoZW4gdGhlIG1hcCBmaWVsZAot
Ly8gcmVmZXJlbmNlcyB0aGUgY29udGFpbmluZyBtZXNzYWdlLgotbWVzc2FnZSBUZXN0UmVjdXJz
aXZlTWFwIHsKLSAgb3B0aW9uYWwgaW50MzIgdmFsdWUgPSAxOwotICBtYXA8aW50MzIsIFRlc3RS
ZWN1cnNpdmVNYXA+IHJlY3Vyc2l2ZV9tYXBfZmllbGQgPSAyOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZh
L2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9tYXBfaW5pdGlhbGl6YXRp
b25fb3JkZXJfdGVzdC5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUv
cHJvdG9idWYvbWFwX2luaXRpYWxpemF0aW9uX29yZGVyX3Rlc3QucHJvdG8KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGIwMmFjNTk5YTVlZDYzODdhNDYyMTUzOTNiNDAxNGQ0YmM3MGVh
MGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9tYXBfaW5pdGlhbGl6YXRpb25f
b3JkZXJfdGVzdC5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBSZWdyZXNzaW9uIHRlc3QgZm9yIGEgbWFw
IGluaXRpbGFpemF0aW9uIG9yZGVyIGJ1Zy4gVGhlIGJ1ZyBvbmx5IG1hbmlmZXN0cwotLy8gd2hl
bjoKLS8vICAgMS4gQSBtZXNzYWdlIGNvbnRhaW5zIG1hcCBmaWVsZHMgYW5kIGlzIGFsc28gZXh0
ZW5kYWJsZS4KLS8vICAgMi4gVGhlcmUgaXMgYSBmaWxlLWxldmVsIGV4dGVuc2lvbiBkZWZpbmVk
IGluIHRoZSBzYW1lIGZpbGUgcmVmZXJlbmNpbmcKLS8vICAgICAgdGhlIGFib3ZlIG1lc3NhZ2Ug
YXMgdGhlIGV4dGVuc2lvbiB0eXBlLgotLy8gICAzLiBUaGUgcHJvZ3JhbSBleGVjdXRlcyBpbiB0
aGUgZm9sbG93aW5nIG9yZGVyOgotLy8gICAgICAgIGEuIGdldERlc2NyaXB0b3IoKSBpcyBjYWxs
ZWQgb24gYW5vdGhlciBtZXNzYWdlIGluIHRoZSBzYW1lIGZpbGUuCi0vLyAgICAgICAgYi4gdXNl
IHByb3RvYnVmIHJlZmxlY3Rpb24gdG8gYWNjZXNzIHRoZSBtYXAgZmllbGQuCi0vLyBUaGUgc3lt
cHRvbSBpcyBhIE51bGxQb2ludGVyRXhjZXB0aW9uIGJlaW5nIHRocm93bi4KLXN5bnRheCA9ICJw
cm90bzIiOwotCi1wYWNrYWdlIG1hcF90ZXN0OwotCi1vcHRpb24gamF2YV9wYWNrYWdlID0gIm1h
cF90ZXN0IjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJNYXBJbml0aWFsaXphdGlv
bk9yZGVyVGVzdCI7Ci1vcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7Ci0KLS8vIE1p
cnJvcnMgdGhlIHN0cnVjdHVyZSBvZgotLy8gamF2YXRlc3RzL2NvbS9nb29nbGUvY2xvdWQvY29t
bW9uL2xvZ2dpbmcvbG9nZ2luZ190ZXN0LnByb3RvLgotCi1tZXNzYWdlIE1lc3NhZ2UxIHsKLSAg
bWFwPHN0cmluZywgYm9vbD4gbWFwX2ZpZWxkID0gMTsKLSAgZXh0ZW5zaW9ucyAxMDAwIHRvIG1h
eDsKLX0KLQotZXh0ZW5kIE1lc3NhZ2UxIHsKLSAgb3B0aW9uYWwgTWVzc2FnZTEgcmVjdXJzaXZl
X2V4dGVuc2lvbiA9IDEwMDE7Ci19Ci0KLW1lc3NhZ2UgUmVkYWN0QWxsVHlwZXMgewotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9tYXBf
dGVzdC5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYv
bWFwX3Rlc3QucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyODBhYzAzYjcz
MjJjNTljZWJhNDgxZDM0MWY4MThjNGRlZjg5MTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9w
cm90b2J1Zi9tYXBfdGVzdC5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQot
cGFja2FnZSBtYXBfdGVzdDsKLQotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJtYXBfdGVzdCI7Ci1v
cHRpb24gamF2YV9vdXRlcl9jbGFzc25hbWUgPSAiTWFwVGVzdFByb3RvIjsKLW9wdGlvbiBqYXZh
X2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCA9IHRydWU7Ci0KLW1lc3NhZ2UgVGVzdE1hcCB7Ci0g
IG1lc3NhZ2UgTWVzc2FnZVZhbHVlIHsKLSAgICBpbnQzMiB2YWx1ZSA9IDE7Ci0gIH0KLSAgZW51
bSBFbnVtVmFsdWUgewotICAgIEZPTyA9IDA7Ci0gICAgQkFSID0gMTsKLSAgICBCQVogPSAyOwot
ICAgIFFVWCA9IDM7Ci0gIH0KLQotICBtYXA8aW50MzIsIGludDMyPiAgICAgICAgaW50MzJfdG9f
aW50MzJfZmllbGQgPSAxOwotICBtYXA8aW50MzIsIHN0cmluZz4gICAgICAgaW50MzJfdG9fc3Ry
aW5nX2ZpZWxkID0gMjsKLSAgbWFwPGludDMyLCBieXRlcz4gICAgICAgIGludDMyX3RvX2J5dGVz
X2ZpZWxkID0gMzsKLSAgbWFwPGludDMyLCBFbnVtVmFsdWU+ICAgIGludDMyX3RvX2VudW1fZmll
bGQgPSA0OwotICBtYXA8aW50MzIsIE1lc3NhZ2VWYWx1ZT4gaW50MzJfdG9fbWVzc2FnZV9maWVs
ZCA9IDU7Ci0gIG1hcDxzdHJpbmcsIGludDMyPiAgICAgICBzdHJpbmdfdG9faW50MzJfZmllbGQg
PSA2OwotfQotCi0vLyBVc2VkIHRvIHRlc3QgdGhhdCBhIG5lc3RlZCBidWxpZGVyIGNvbnRhaW5p
bmcgbWFwIGZpZWxkcyB3aWxsIHByb3Blcmx5Ci0vLyBwcm9wYWdhdGUgdGhlIG9uQ2hhbmdlIGV2
ZW50IGFuZCBtYXJrIGl0cyBwYXJlbnQgZGlydHkgd2hlbiBhIGNoYW5nZQotLy8gaXMgbWFkZSB0
byBhIG1hcCBmaWVsZC4KLW1lc3NhZ2UgVGVzdE9uQ2hhbmdlRXZlbnRQcm9wYWdhdGlvbiB7Ci0g
IFRlc3RNYXAgb3B0aW9uYWxfbWVzc2FnZSA9IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9z
cmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL211bHRpcGxlX2ZpbGVzX3Rlc3QucHJv
dG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL211bHRpcGxl
X2ZpbGVzX3Rlc3QucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNzkwNTA2
ZjAyMmNiZGMxNmY1M2IyNzQ0MmIxN2Q1YmUyNmVhZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2ds
ZS9wcm90b2J1Zi9tdWx0aXBsZV9maWxlc190ZXN0LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEs
NzggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhv
cjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vCi0vLyBBIHByb3RvIGZpbGUg
d2hpY2ggdGVzdHMgdGhlIGphdmFfbXVsdGlwbGVfZmlsZXMgb3B0aW9uLgotCi1zeW50YXggPSAi
cHJvdG8yIjsKLQotLy8gU29tZSBnZW5lcmljX3NlcnZpY2VzIG9wdGlvbihzKSBhZGRlZCBhdXRv
bWF0aWNhbGx5LgotLy8gU2VlOiAgaHR0cDovL2dvL3Byb3RvMi1nZW5lcmljLXNlcnZpY2VzLWRl
ZmF1bHQKLW9wdGlvbiBqYXZhX2dlbmVyaWNfc2VydmljZXMgPSB0cnVlOyAgIC8vIGF1dG8tYWRk
ZWQKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8iOwotaW1wb3J0ICJn
b29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90byI7Ci0KLXBhY2thZ2UgcHJvdG9idWZfdW5p
dHRlc3Q7Ci0KLW9wdGlvbiBqYXZhX211bHRpcGxlX2ZpbGVzID0gdHJ1ZTsKLW9wdGlvbiBqYXZh
X291dGVyX2NsYXNzbmFtZSA9ICJNdWx0aXBsZUZpbGVzVGVzdFByb3RvIjsKLQotCi1tZXNzYWdl
IE1lc3NhZ2VXaXRoTm9PdXRlciB7Ci0gIG1lc3NhZ2UgTmVzdGVkTWVzc2FnZSB7Ci0gICAgb3B0
aW9uYWwgaW50MzIgaSA9IDE7Ci0gIH0KLSAgZW51bSBOZXN0ZWRFbnVtIHsKLSAgICBCQVogPSAz
OwotICB9Ci0gIG9wdGlvbmFsIE5lc3RlZE1lc3NhZ2UgbmVzdGVkID0gMTsKLSAgcmVwZWF0ZWQg
VGVzdEFsbFR5cGVzIGZvcmVpZ24gPSAyOwotICBvcHRpb25hbCBOZXN0ZWRFbnVtIG5lc3RlZF9l
bnVtID0gMzsKLSAgb3B0aW9uYWwgRW51bVdpdGhOb091dGVyIGZvcmVpZ25fZW51bSA9IDQ7Ci19
Ci0KLWV4dGVuZCBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucyB7Ci0gIG9wdGlvbmFs
IGludDMyIGVudW1fdmFsdWVfb3B0aW9uID0gNzY1NDMyMTsKLX0KLQotZW51bSBFbnVtV2l0aE5v
T3V0ZXIgewotICBGT08gPSAxIFsoZW51bV92YWx1ZV9vcHRpb24pID0gMTIzNDVdOwotICBCQVIg
PSAyOwotfQotCi1zZXJ2aWNlIFNlcnZpY2VXaXRoTm9PdXRlciB7Ci0gIHJwYyBGb28oTWVzc2Fn
ZVdpdGhOb091dGVyKSByZXR1cm5zKFRlc3RBbGxUeXBlcyk7Ci19Ci0KLWV4dGVuZCBUZXN0QWxs
RXh0ZW5zaW9ucyB7Ci0gIG9wdGlvbmFsIGludDMyIGV4dGVuc2lvbl93aXRoX291dGVyID0gMTIz
NDU2NzsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUv
cHJvdG9idWYvbmVzdGVkX2J1aWxkZXJzX3Rlc3QucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9w
cm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL25lc3RlZF9idWlsZGVyc190ZXN0LnByb3RvCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWRkNjZkODg5NDY0ODBjNzU2NGUwZGJmZWY4MWE3
NzM3YjVlNjNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbmVzdGVkX2J1aWxk
ZXJzX3Rlc3QucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBqb25wQGdvb2dsZS5jb20gKEpv
biBQZXJsb3cpCi0vLwotc3ludGF4ID0gInByb3RvMiI7Ci0KLXBhY2thZ2UgcHJvdG9idWZfdW5p
dHRlc3Q7Ci0KLW9wdGlvbiBqYXZhX211bHRpcGxlX2ZpbGVzID0gdHJ1ZTsKLW9wdGlvbiBqYXZh
X291dGVyX2NsYXNzbmFtZSA9ICJOZXN0ZWRCdWlsZGVycyI7Ci0KLQotbWVzc2FnZSBWZWhpY2xl
IHsKLSAgb3B0aW9uYWwgRW5naW5lIGVuZ2luZSA9IDE7Ci0gIHJlcGVhdGVkIFdoZWVsIHdoZWVs
ID0gMjsKLX0KLQotbWVzc2FnZSBFbmdpbmUgewotICBvcHRpb25hbCBpbnQzMiBjeWxpbmRlciA9
IDE7Ci0gIG9wdGlvbmFsIGludDMyIGxpdGVycyA9IDI7Ci19Ci0KLW1lc3NhZ2UgV2hlZWwgewot
ICBvcHRpb25hbCBpbnQzMiByYWRpdXMgPSAxOwotICBvcHRpb25hbCBpbnQzMiB3aWR0aCA9IDI7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3Rv
YnVmL25lc3RlZF9leHRlbnNpb24ucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20v
Z29vZ2xlL3Byb3RvYnVmL25lc3RlZF9leHRlbnNpb24ucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDcwNGU2NDllMDIwYjMzZmZmZWUzNWQwNDczYzFmZGYzM2M0ZGQxNTYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3Jj
L3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9uZXN0ZWRfZXh0ZW5zaW9uLnByb3RvCisr
KyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLS8vIEF1dGhvcjogRGFyaWNrIFRvbmcgKGRhcmlja0Bnb29nbGUuY29tKQotLy8K
LS8vIEEgcHJvdG8gZmlsZSB3aXRoIG5lc3RlZCBleHRlbnNpb25zLiBOb3RlIHRoYXQgdGhpcyBt
dXN0IGJlIGRlZmluZWQgaW4KLS8vIGEgc2VwYXJhdGUgZmlsZSB0byBwcm9wZXJseSB0ZXN0IHRo
ZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgb3V0ZXIgY2xhc3MuCi0KLXN5bnRheCA9ICJwcm90bzIi
OwotCi1pbXBvcnQgImNvbS9nb29nbGUvcHJvdG9idWYvbm9uX25lc3RlZF9leHRlbnNpb24ucHJv
dG8iOwotCi1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi0KLW1lc3NhZ2UgTXlOZXN0ZWRF
eHRlbnNpb24gewotICBleHRlbmQgTWVzc2FnZVRvQmVFeHRlbmRlZCB7Ci0gICAgb3B0aW9uYWwg
TWVzc2FnZVRvQmVFeHRlbmRlZCByZWN1cnNpdmVFeHRlbnNpb24gPSAyOwotICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL25lc3Rl
ZF9leHRlbnNpb25fbGl0ZS5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29n
bGUvcHJvdG9idWYvbmVzdGVkX2V4dGVuc2lvbl9saXRlLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhOTVjMzhiMjM0ZjJmZDY1ZWIxMTJjNjIzMWFlMmNiNjgyZTU2MjA3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbmVzdGVkX2V4dGVuc2lvbl9saXRlLnBy
b3RvCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogRGFyaWNrIFRvbmcgKGRhcmlja0Bnb29nbGUuY29t
KQotLy8KLS8vIEEgcHJvdG8gZmlsZSB3aXRoIG5lc3RlZCBleHRlbnNpb25zIGZvciBhIE1lc3Nh
Z2VMaXRlIG1lc3NhZ2VzLiBOb3RlIHRoYXQKLS8vIHRoaXMgbXVzdCBiZSBkZWZpbmVkIGluIGEg
c2VwYXJhdGUgZmlsZSB0byBwcm9wZXJseSB0ZXN0IHRoZSBpbml0aWFsaXphdGlvbgotLy8gb2Yg
dGhlIG91dGVyIGNsYXNzLgotCi1zeW50YXggPSAicHJvdG8yIjsKLQotcGFja2FnZSBwcm90b2J1
Zl91bml0dGVzdDsKLQotb3B0aW9uIG9wdGltaXplX2ZvciA9IExJVEVfUlVOVElNRTsKLQotaW1w
b3J0ICJjb20vZ29vZ2xlL3Byb3RvYnVmL25vbl9uZXN0ZWRfZXh0ZW5zaW9uX2xpdGUucHJvdG8i
OwotCi1tZXNzYWdlIE15TmVzdGVkRXh0ZW5zaW9uTGl0ZSB7Ci0gIGV4dGVuZCBNZXNzYWdlTGl0
ZVRvQmVFeHRlbmRlZCB7Ci0gICAgb3B0aW9uYWwgTWVzc2FnZUxpdGVUb0JlRXh0ZW5kZWQgcmVj
dXJzaXZlRXh0ZW5zaW9uTGl0ZSA9IDM7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3Ny
Yy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbm9uX25lc3RlZF9leHRlbnNpb24ucHJv
dG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL25vbl9uZXN0
ZWRfZXh0ZW5zaW9uLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWZhYzU1
Mjk1OTk5NjY4NGMwMjZhZTIyM2NmM2ZjMzgyNTJmMWJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29n
bGUvcHJvdG9idWYvbm9uX25lc3RlZF9leHRlbnNpb24ucHJvdG8KKysrIC9kZXYvbnVsbApAQCAt
MSw1MCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0
aG9yOiBEYXJpY2sgVG9uZyAoZGFyaWNrQGdvb2dsZS5jb20pCi0vLwotLy8gQSBwcm90byBmaWxl
IHdpdGggZXh0ZW5zaW9ucy4KLQotc3ludGF4ID0gInByb3RvMiI7Ci0KLXBhY2thZ2UgcHJvdG9i
dWZfdW5pdHRlc3Q7Ci0KLQotbWVzc2FnZSBNZXNzYWdlVG9CZUV4dGVuZGVkIHsKLSAgZXh0ZW5z
aW9ucyAxIHRvIG1heDsKLX0KLQotbWVzc2FnZSBNeU5vbk5lc3RlZEV4dGVuc2lvbiB7Ci19Ci0K
LWV4dGVuZCBNZXNzYWdlVG9CZUV4dGVuZGVkIHsKLSAgb3B0aW9uYWwgTXlOb25OZXN0ZWRFeHRl
bnNpb24gbm9uTmVzdGVkRXh0ZW5zaW9uID0gMTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUv
c3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9ub25fbmVzdGVkX2V4dGVuc2lvbl9s
aXRlLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9u
b25fbmVzdGVkX2V4dGVuc2lvbl9saXRlLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzN2MzNjllZGFhMTk0MjIyZTIyMGJhNTc5Mjk2MjY0ZjIyYzU5ZjBkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3By
b3RvL2NvbS9nb29nbGUvcHJvdG9idWYvbm9uX25lc3RlZF9leHRlbnNpb25fbGl0ZS5wcm90bwor
KysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0vLyBBdXRob3I6IERhcmljayBUb25nIChkYXJpY2tAZ29vZ2xlLmNvbSkKLS8v
Ci0vLyBBIHByb3RvIGZpbGUgd2l0aCBleHRlbnNpb25zIGZvciBhIE1lc3NhZ2VMaXRlIG1lc3Nh
Z2VzLgotCi1zeW50YXggPSAicHJvdG8yIjsKLQotcGFja2FnZSBwcm90b2J1Zl91bml0dGVzdDsK
LQotb3B0aW9uIG9wdGltaXplX2ZvciA9IExJVEVfUlVOVElNRTsKLQotbWVzc2FnZSBNZXNzYWdl
TGl0ZVRvQmVFeHRlbmRlZCB7Ci0gIGV4dGVuc2lvbnMgMSB0byBtYXg7Ci19Ci0KLW1lc3NhZ2Ug
TXlOb25OZXN0ZWRFeHRlbnNpb25MaXRlIHsKLX0KLQotZXh0ZW5kIE1lc3NhZ2VMaXRlVG9CZUV4
dGVuZGVkIHsKLSAgb3B0aW9uYWwgTXlOb25OZXN0ZWRFeHRlbnNpb25MaXRlIG5vbk5lc3RlZEV4
dGVuc2lvbkxpdGUgPSAxOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90
by9jb20vZ29vZ2xlL3Byb3RvYnVmL291dGVyX2NsYXNzX25hbWVfdGVzdC5wcm90byBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9j
b3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvb3V0ZXJfY2xhc3NfbmFtZV90
ZXN0LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjA4MzY4MTQ2OTIxMGJj
MmVlODA3Y2NjZTg5NzVhMzNjY2EwYzMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9i
dWYvb3V0ZXJfY2xhc3NfbmFtZV90ZXN0LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9ICJwcm90
bzIiOwotCi1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi0KLS8vIFRoaXMgbWVzc2FnZSdz
IG5hbWUgaXMgdGhlIHNhbWUgd2l0aCB0aGUgZGVmYXVsdCBvdXRlciBjbGFzcyBuYW1lIG9mIHRo
aXMKLS8vIHByb3RvIGZpbGUuIEl0J3MgdXNlZCB0byB0ZXN0IGlmIHRoZSBjb21waWxlciBjYW4g
YXZvaWQgdGhpcyBjb25mbGljdAotLy8gY29ycmVjdGx5LgotbWVzc2FnZSBPdXRlckNsYXNzTmFt
ZVRlc3QgewotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2ds
ZS9wcm90b2J1Zi9vdXRlcl9jbGFzc19uYW1lX3Rlc3QyLnByb3RvIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rl
c3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9vdXRlcl9jbGFzc19uYW1lX3Rlc3QyLnByb3Rv
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTU5NTZiMGQ0MjgyZjIxNzkyNjliOGVh
YTk1YzM0MTIxMWNmMjNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvb3V0ZXJf
Y2xhc3NfbmFtZV90ZXN0Mi5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8yIjsKLQot
cGFja2FnZSBwcm90b2J1Zl91bml0dGVzdDsKLQotCi1tZXNzYWdlIFRlc3RNZXNzYWdlMiB7Ci0g
IG1lc3NhZ2UgTmVzdGVkTWVzc2FnZSB7Ci0gICAgLy8gVGhpcyBtZXNzYWdlJ3MgbmFtZSBpcyB0
aGUgc2FtZSB3aXRoIHRoZSBkZWZhdWx0IG91dGVyIGNsYXNzIG5hbWUgb2YgdGhpcwotICAgIC8v
IHByb3RvIGZpbGUuIEl0J3MgdXNlZCB0byB0ZXN0IGlmIHRoZSBjb21waWxlciBjYW4gYXZvaWQg
dGhpcyBjb25mbGljdAotICAgIC8vIGNvcnJlY3RseS4KLSAgICBtZXNzYWdlIE91dGVyQ2xhc3NO
YW1lVGVzdDIgewotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3Qv
cHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9vdXRlcl9jbGFzc19uYW1lX3Rlc3QzLnByb3RvIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi9vdXRlcl9jbGFzc19u
YW1lX3Rlc3QzLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGE4YmEzYzNk
ZGRkMDdkY2MwZjhkZTU1MzNkNWY0YTcyMDg1OWEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUv
cHJvdG9idWYvb3V0ZXJfY2xhc3NfbmFtZV90ZXN0My5wcm90bworKysgL2Rldi9udWxsCkBAIC0x
LDQ1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXgg
PSAicHJvdG8yIjsKLQotcGFja2FnZSBwcm90b2J1Zl91bml0dGVzdDsKLQotCi1tZXNzYWdlIFRl
c3RNZXNzYWdlMyB7Ci0gIG1lc3NhZ2UgTmVzdGVkTWVzc2FnZSB7Ci0gICAgLy8gVGhpcyBlbnVt
J3MgbmFtZSBpcyB0aGUgc2FtZSB3aXRoIHRoZSBkZWZhdWx0IG91dGVyIGNsYXNzIG5hbWUgb2Yg
dGhpcwotICAgIC8vIHByb3RvIGZpbGUuIEl0J3MgdXNlZCB0byB0ZXN0IGlmIHRoZSBjb21waWxl
ciBjYW4gYXZvaWQgdGhpcyBjb25mbGljdAotICAgIC8vIGNvcnJlY3RseS4KLSAgICBlbnVtIE91
dGVyQ2xhc3NOYW1lVGVzdDMgewotICAgICAgRFVNTVlfVkFMVUUgPSAxOwotICAgIH0KLSAgfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1
Zi90ZXN0X2JhZF9pZGVudGlmaWVycy5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2Nv
bS9nb29nbGUvcHJvdG9idWYvdGVzdF9iYWRfaWRlbnRpZmllcnMucHJvdG8KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJiMWY2NWU0YzNhOGI0OGRkNGNlOTE2MjU4NmI5ZTBmYjQ3MTUx
YWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi90ZXN0X2JhZF9pZGVudGlmaWVy
cy5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBqb25wQGdvb2dsZS5jb20gKEpvbiBQZXJs
b3cpCi0KLS8vIFRoaXMgZmlsZSB0ZXN0cyB0aGF0IHZhcmlvdXMgaWRlbnRpZmllcnMgd29yayBh
cyBmaWVsZCBhbmQgdHlwZSBuYW1lcyBldmVuCi0vLyB0aG91Z2ggdGhlIHNhbWUgaWRlbnRpZmll
cnMgYXJlIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgamF2YSBjb2RlIGdlbmVyYXRvci4KLQotc3lu
dGF4ID0gInByb3RvMiI7Ci0KLS8vIFNvbWUgZ2VuZXJpY19zZXJ2aWNlcyBvcHRpb24ocykgYWRk
ZWQgYXV0b21hdGljYWxseS4KLS8vIFNlZTogIGh0dHA6Ly9nby9wcm90bzItZ2VuZXJpYy1zZXJ2
aWNlcy1kZWZhdWx0Ci1vcHRpb24gamF2YV9nZW5lcmljX3NlcnZpY2VzID0gdHJ1ZTsgICAvLyBh
dXRvLWFkZGVkCi0KLXBhY2thZ2UgaW9fcHJvdG9jb2xfdGVzdHM7Ci0KLW9wdGlvbiBqYXZhX3Bh
Y2thZ2UgPSAiY29tLmdvb2dsZS5wcm90b2J1ZiI7Ci1vcHRpb24gamF2YV9vdXRlcl9jbGFzc25h
bWUgPSAiVGVzdEJhZElkZW50aWZpZXJzUHJvdG8iOwotb3B0aW9uIGphdmFfZ2VuZXJhdGVfZXF1
YWxzX2FuZF9oYXNoID0gdHJ1ZTsKLQotbWVzc2FnZSBUZXN0TWVzc2FnZSB7Ci0gIG9wdGlvbmFs
IHN0cmluZyBjYWNoZWRfc2l6ZSA9IDE7Ci0gIG9wdGlvbmFsIHN0cmluZyBzZXJpYWxpemVkX3Np
emUgPSAyOwotICBvcHRpb25hbCBzdHJpbmcgY2xhc3MgPSAzOwotfQotCi1tZXNzYWdlIERlc2Ny
aXB0b3IgewotICBvcHRpb24gbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvciA9IHRydWU7
Ci0gIG9wdGlvbmFsIHN0cmluZyBkZXNjcmlwdG9yID0gMTsKLSAgbWVzc2FnZSBOZXN0ZWREZXNj
cmlwdG9yIHsKLSAgICBvcHRpb24gbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvciA9IHRy
dWU7Ci0gICAgb3B0aW9uYWwgc3RyaW5nIGRlc2NyaXB0b3IgPSAxOwotICB9Ci0gIG9wdGlvbmFs
IE5lc3RlZERlc2NyaXB0b3IgbmVzdGVkX2Rlc2NyaXB0b3IgPSAyOwotICBlbnVtIE5lc3RlZEVu
dW0gewotICAgIFVOS05PV04gPSAwOwotICAgIEZPTyA9IDE7Ci0gIH0KLX0KLQotbWVzc2FnZSBQ
YXJzZXIgewotICBlbnVtIFBhcnNlckVudW0gewotICAgIFVOS05PV04gPSAwOwotICAgIFBBUlNF
UiA9IDE7Ci0gIH0KLSAgb3B0aW9uYWwgUGFyc2VyRW51bSBwYXJzZXIgPSAxOwotfQotCi1tZXNz
YWdlIERlcHJlY2F0ZWQgewotICBlbnVtIFRlc3RFbnVtIHsKLSAgICBVTktOT1dOID0gMDsKLSAg
ICBGT08gPSAxOwotCi0gICAgLy8gVGVzdCBpZiBARGVwcmVjYXRlZCBhbm5vdGF0aW9uIGNvbmZs
aWN0cyB3aXRoIERlcHJlY2F0ZWQgbWVzc2FnZSBuYW1lLgotICAgIEJBUiA9IDIgWyBkZXByZWNh
dGVkID0gdHJ1ZSBdOwotICB9Ci0KLSAgb3B0aW9uYWwgaW50MzIgZmllbGQxID0gMSBbZGVwcmVj
YXRlZD10cnVlXTsKLSAgb3B0aW9uYWwgVGVzdEVudW0gZmllbGQyID0gMiBbZGVwcmVjYXRlZD10
cnVlXTsKLSAgb3B0aW9uYWwgVGVzdE1lc3NhZ2UgZmllbGQzID0gMyBbZGVwcmVjYXRlZD10cnVl
XTsKLX0KLQotbWVzc2FnZSBPdmVycmlkZSB7Ci0gIG9wdGlvbmFsIGludDMyIG92ZXJyaWRlID0g
MTsKLX0KLQotbWVzc2FnZSBPYmplY3QgewotICBvcHRpb25hbCBpbnQzMiBvYmplY3QgPSAxOwot
ICBvcHRpb25hbCBzdHJpbmcgc3RyaW5nX29iamVjdCA9IDI7Ci19Ci0KLW1lc3NhZ2UgU3RyaW5n
IHsKLSAgb3B0aW9uYWwgc3RyaW5nIHN0cmluZyA9IDE7Ci19Ci0KLW1lc3NhZ2UgSW50ZWdlciB7
Ci0gIG9wdGlvbmFsIGludDMyIGludGVnZXIgPSAxOwotfQotCi1tZXNzYWdlIExvbmcgewotICBv
cHRpb25hbCBpbnQzMiBsb25nID0gMTsKLX0KLQotbWVzc2FnZSBGbG9hdCB7Ci0gIG9wdGlvbmFs
IGZsb2F0IGZsb2F0ID0gMTsKLX0KLQotbWVzc2FnZSBEb3VibGUgewotICBvcHRpb25hbCBkb3Vi
bGUgZG91YmxlID0gMTsKLX0KLQotc2VydmljZSBUZXN0Q29uZmxpY3RpbmdNZXRob2ROYW1lcyB7
Ci0gIHJwYyBPdmVycmlkZShUZXN0TWVzc2FnZSkgcmV0dXJucyAoVGVzdE1lc3NhZ2UpOwotfQot
Ci1tZXNzYWdlIFRlc3RDb25mbGljdGluZ0ZpZWxkTmFtZXMgewotICBlbnVtIFRlc3RFbnVtIHsK
LSAgICBVTktOT1dOID0gMDsKLSAgICBGT08gPSAxOwotICB9Ci0gIG1lc3NhZ2UgVGVzdE1lc3Nh
Z2UgewotICB9Ci0gIHJlcGVhdGVkIGludDMyIGludDMyX2ZpZWxkID0gMTsKLSAgcmVwZWF0ZWQg
VGVzdEVudW0gZW51bV9maWVsZCA9IDI7Ci0gIHJlcGVhdGVkIHN0cmluZyBzdHJpbmdfZmllbGQg
PSAzOwotICByZXBlYXRlZCBieXRlcyBieXRlc19maWVsZCA9IDQ7Ci0gIHJlcGVhdGVkIFRlc3RN
ZXNzYWdlIG1lc3NhZ2VfZmllbGQgPSA1OwotCi0gIG9wdGlvbmFsIGludDMyIGludDMyX2ZpZWxk
X2NvdW50ID0gMTE7Ci0gIG9wdGlvbmFsIFRlc3RFbnVtIGVudW1fZmllbGRfY291bnQgPSAxMjsK
LSAgb3B0aW9uYWwgc3RyaW5nIHN0cmluZ19maWVsZF9jb3VudCA9IDEzOwotICBvcHRpb25hbCBi
eXRlcyBieXRlc19maWVsZF9jb3VudCA9IDE0OwotICBvcHRpb25hbCBUZXN0TWVzc2FnZSBtZXNz
YWdlX2ZpZWxkX2NvdW50ID0gMTU7Ci0KLSAgcmVwZWF0ZWQgaW50MzIgSW50MzJGaWVsZCA9IDIx
OyAgLy8gTk9fUFJPVE8zCi0gIHJlcGVhdGVkIFRlc3RFbnVtIEVudW1GaWVsZCA9IDIyOyAgLy8g
Tk9fUFJPVE8zCi0gIHJlcGVhdGVkIHN0cmluZyBTdHJpbmdGaWVsZCA9IDIzOyAgLy8gTk9fUFJP
VE8zCi0gIHJlcGVhdGVkIGJ5dGVzIEJ5dGVzRmllbGQgPSAyNDsgIC8vIE5PX1BST1RPMwotICBy
ZXBlYXRlZCBUZXN0TWVzc2FnZSBNZXNzYWdlRmllbGQgPSAyNTsgIC8vIE5PX1BST1RPMwotCi0g
IC8vIFRoaXMgZmllbGQgY29uZmxpY3RzIHdpdGggImludDMyX2ZpZWxkIiBhcyB0aGV5IGJvdGgg
Z2VuZXJhdGUKLSAgLy8gdGhlIG1ldGhvZCBnZXRJbnQzMkZpZWxkTGlzdCgpLgotICByZXF1aXJl
ZCBpbnQzMiBpbnQzMl9maWVsZF9saXN0ID0gMzE7ICAvLyBOT19QUk9UTzMKLQotICBleHRlbnNp
b25zIDEwMDAgdG8gbWF4OyAgLy8gTk9fUFJPVE8zCi0KLSAgcmVwZWF0ZWQgaW50NjQgaW50NjRf
ZmllbGQgPSA0MTsKLSAgZXh0ZW5kIFRlc3RDb25mbGljdGluZ0ZpZWxkTmFtZXMgeyAgLy8gTk9f
UFJPVE8zCi0gICAgLy8gV2UgZG9uJ3QgZ2VuZXJhdGUgYWNjZXNzb3JzIGZvciBleHRlbnNpb25z
IHNvIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uCi0gICAgLy8gZmllbGRzIGRvbid0IGNvbmZsaWN0
IHdpdGggdGhlIHJlcGVhdGVkIGZpZWxkICJpbnQ2NF9maWVsZCIuCi0gICAgb3B0aW9uYWwgaW50
NjQgaW50NjRfZmllbGRfY291bnQgPSAxMDAxOyAgLy8gTk9fUFJPVE8zCi0gICAgb3B0aW9uYWwg
aW50NjQgaW50NjRfZmllbGRfbGlzdCA9IDEwMDI7ICAvLyBOT19QUk9UTzMKLSAgfSAgLy8gTk9f
UFJPVE8zCi19Ci0KLW1lc3NhZ2UgVGVzdE1hcEZpZWxkIHsKLSAgbWVzc2FnZSBNYXBGaWVsZCB7
fQotICBtZXNzYWdlIFBhaXIge30KLSAgbWVzc2FnZSBNZXNzYWdlIHt9Ci0KLSAgbWFwPGludDMy
LCBpbnQzMj4gbWFwX2ZpZWxkID0gMTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90ZXN0
L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvdGVzdF9jaGVja191dGY4LnByb3RvIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2Nv
cmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi90ZXN0X2NoZWNrX3V0ZjgucHJv
dG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOWMxZGNiYWRhODcwODM1NGY1MWQ1
NWI4OTQ1YjdmNWY0NWU2OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi90ZXN0
X2NoZWNrX3V0ZjgucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBKYWNvYiBCdXRjaGVyIChq
YmF1bUBnb29nbGUuY29tKQotLy8KLS8vIFRlc3QgZmlsZSBvcHRpb24gamF2YV9zdHJpbmdfY2hl
Y2tfdXRmOC4KLXN5bnRheCA9ICJwcm90bzIiOwotCi1wYWNrYWdlIHByb3RvMl90ZXN0X2NoZWNr
X3V0Zjg7Ci0KLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJUZXN0Q2hlY2tVdGY4IjsK
LW9wdGlvbiBqYXZhX3N0cmluZ19jaGVja191dGY4ID0gdHJ1ZTsKLQotbWVzc2FnZSBTdHJpbmdX
cmFwcGVyIHsKLSAgcmVxdWlyZWQgc3RyaW5nIHJlcSA9IDE7Ci0gIG9wdGlvbmFsIHN0cmluZyBv
cHQgPSAyOwotICByZXBlYXRlZCBzdHJpbmcgcmVwID0gMzsKLX0KLQotbWVzc2FnZSBCeXRlc1dy
YXBwZXIgewotICByZXF1aXJlZCBieXRlcyByZXEgPSAxOwotICBvcHRpb25hbCBieXRlcyBvcHQg
PSAyOwotICByZXBlYXRlZCBieXRlcyByZXAgPSAzOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUv
c3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi90ZXN0X2NoZWNrX3V0Zjhfc2l6ZS5w
cm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvamF2YS9jb3JlL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvdGVzdF9j
aGVja191dGY4X3NpemUucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNmQ3
NmQ2MjlmYWM4ZGJhNGM5MzVjNDBjZmIwZDNiYzZiNzcxZGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dv
b2dsZS9wcm90b2J1Zi90ZXN0X2NoZWNrX3V0Zjhfc2l6ZS5wcm90bworKysgL2Rldi9udWxsCkBA
IC0xLDUyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBB
dXRob3I6IEphY29iIEJ1dGNoZXIgKGpiYXVtQGdvb2dsZS5jb20pCi0vLwotLy8gVGVzdCBmaWxl
IG9wdGlvbiBqYXZhX3N0cmluZ19jaGVja191dGY4Lgotc3ludGF4ID0gInByb3RvMiI7Ci0KLXBh
Y2thZ2UgcHJvdG8yX3Rlc3RfY2hlY2tfdXRmOF9zaXplOwotCi1vcHRpb24gamF2YV9vdXRlcl9j
bGFzc25hbWUgPSAiVGVzdENoZWNrVXRmOFNpemUiOwotb3B0aW9uIGphdmFfc3RyaW5nX2NoZWNr
X3V0ZjggPSB0cnVlOwotb3B0aW9uIG9wdGltaXplX2ZvciA9IENPREVfU0laRTsKLQotbWVzc2Fn
ZSBTdHJpbmdXcmFwcGVyU2l6ZSB7Ci0gIHJlcXVpcmVkIHN0cmluZyByZXEgPSAxOwotICBvcHRp
b25hbCBzdHJpbmcgb3B0ID0gMjsKLSAgcmVwZWF0ZWQgc3RyaW5nIHJlcCA9IDM7Ci19Ci0KLW1l
c3NhZ2UgQnl0ZXNXcmFwcGVyU2l6ZSB7Ci0gIHJlcXVpcmVkIGJ5dGVzIHJlcSA9IDE7Ci0gIG9w
dGlvbmFsIGJ5dGVzIG9wdCA9IDI7Ci0gIHJlcGVhdGVkIGJ5dGVzIHJlcCA9IDM7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xlL3Byb3RvYnVmL3Rlc3Rf
Y3VzdG9tX29wdGlvbnMucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvY29yZS9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xl
L3Byb3RvYnVmL3Rlc3RfY3VzdG9tX29wdGlvbnMucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGY4ZWZkNDU1YTFlYjJiNmZjZGU5OTI3ZDVmZDRmMzcyNDQzNGI4NGEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rl
c3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi90ZXN0X2N1c3RvbV9vcHRpb25zLnByb3RvCisr
KyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLS8vIEF1dGhvcjogRmVuZyBYaWFvICh4aWFvZmVuZ0Bnb29nbGUuY29tKQotLy8K
LS8vIFRlc3QgdGhhdCBjdXN0b20gb3B0aW9ucyBkZWZpbmVkIGluIGEgcHJvdG8gZmlsZSdzIGRl
cGVuZGVuY2llcyBhcmUgcHJvcGVybHkKLS8vIGluaXRpYWxpemVkLgotc3ludGF4ID0gInByb3Rv
MiI7Ci0KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7Ci0KLQotaW1wb3J0ICJnb29nbGUvcHJv
dG9idWYvdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJvdG8iOwotCi1tZXNzYWdlIFRlc3RNZXNz
YWdlV2l0aEN1c3RvbU9wdGlvbnNDb250YWluZXIgewotICBvcHRpb25hbCBUZXN0TWVzc2FnZVdp
dGhDdXN0b21PcHRpb25zIGZpZWxkID0gMTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9jb3JlL3NyYy90
ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvdGVzdF9leHRyYV9pbnRlcmZhY2VzLnByb3Rv
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2dsZS9wcm90b2J1Zi90ZXN0X2V4dHJh
X2ludGVyZmFjZXMucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NWY1N2I0
YmI0M2YxMzgyYTAyYjFhNTNhZjc2ZTdiMjEzZmNhNTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2NvcmUvc3JjL3Rlc3QvcHJvdG8vY29tL2dvb2ds
ZS9wcm90b2J1Zi90ZXN0X2V4dHJhX2ludGVyZmFjZXMucHJvdG8KKysrIC9kZXYvbnVsbApAQCAt
MSw2MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0
aG9yOiBEYXJpY2sgVG9uZyAoZGFyaWNrQGdvb2dsZS5jb20pCi1zeW50YXggPSAicHJvdG8yIjsK
LQotcGFja2FnZSBwcm90b2J1Zl91bml0dGVzdDsKLQotbWVzc2FnZSBQcm90bzEgewotICBvcHRp
b24gZXhwZXJpbWVudGFsX2phdmFfbWVzc2FnZV9pbnRlcmZhY2UgPQotICAgICAgImNvbS5nb29n
bGUucHJvdG9idWYuRXh0cmFJbnRlcmZhY2VzLkhhc0Jvb2xWYWx1ZSI7Ci0KLSAgb3B0aW9uIGV4
cGVyaW1lbnRhbF9qYXZhX2ludGVyZmFjZV9leHRlbmRzID0KLSAgICAgICJjb20uZ29vZ2xlLnBy
b3RvYnVmLkV4dHJhSW50ZXJmYWNlcy5IYXNCeXRlVmFsdWUiOwotCi0gIG9wdGlvbiBleHBlcmlt
ZW50YWxfamF2YV9tZXNzYWdlX2ludGVyZmFjZSA9Ci0gICAgICAiY29tLmdvb2dsZS5wcm90b2J1
Zi5FeHRyYUludGVyZmFjZXMuSGFzU3RyaW5nVmFsdWU8UHJvdG8xPiI7Ci0KLSAgb3B0aW9uIGV4
cGVyaW1lbnRhbF9qYXZhX2J1aWxkZXJfaW50ZXJmYWNlID0KLSAgICAgICJjb20uZ29vZ2xlLnBy
b3RvYnVmLkV4dHJhSW50ZXJmYWNlcy5IYXNTdHJpbmdWYWx1ZUJ1aWxkZXIiCi0gICAgICAiPFBy
b3RvMSwgQnVpbGRlcj4iOwotCi0gIG9wdGlvbmFsIHN0cmluZyBzdHJpbmdfdmFsdWUgPSAxOwot
ICBvcHRpb25hbCBib29sIGJvb2xfdmFsdWUgPSAyOwotICBvcHRpb25hbCBieXRlcyBieXRlX3Zh
bHVlID0gMzsKLSAgb3B0aW9uYWwgaW50MzIgaW50X3ZhbHVlID0gNDsKLX0KLQotbWVzc2FnZSBQ
cm90bzIgewotICBvcHRpb24gZXhwZXJpbWVudGFsX2phdmFfbWVzc2FnZV9pbnRlcmZhY2UgPQot
ICAgICAgImNvbS5nb29nbGUucHJvdG9idWYuRXh0cmFJbnRlcmZhY2VzLkhhc0Jvb2xWYWx1ZSI7
Ci0KLSAgb3B0aW9uYWwgYm9vbCBib29sX3ZhbHVlID0gMTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9s
aXRlL2dlbmVyYXRlLXNvdXJjZXMtYnVpbGQueG1sIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2xpdGUvZ2VuZXJhdGUtc291cmNl
cy1idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YzIxYzEzMTU1NWVh
N2YzZmJhZmZmNDA3Y2UxOTg4N2VjMGQ3NjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2xpdGUvZ2VuZXJhdGUtc291cmNlcy1idWlsZC54bWwKKysr
IC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08cHJvamVjdCBuYW1lPSJnZW5lcmF0ZS1zb3Vy
Y2VzIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHByb3RvYyAuLi4iLz4KLSAgICA8bWtk
aXIgZGlyPSIke2dlbmVyYXRlZC5zb3VyY2VzLmxpdGUuZGlyfSIvPgotICAgIDxleGVjIGV4ZWN1
dGFibGU9IiR7cHJvdG9jfSI+Ci0gICAgICAgIDxhcmcgdmFsdWU9Ii0tamF2YV9vdXQ9bGl0ZTok
e2dlbmVyYXRlZC5zb3VyY2VzLmxpdGUuZGlyfSIvPgotICAgICAgICA8YXJnIHZhbHVlPSItLXBy
b3RvX3BhdGg9JHtwcm90b2J1Zi5zb3VyY2UuZGlyfSIvPgotICAgICAgICA8YXJnIHZhbHVlPSIk
e3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8iLz4KLSAgICAg
ICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvYXBp
LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtw
cm90b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8iLz4KLSAg
ICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYv
ZW1wdHkucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3VyY2UuZGly
fS9nb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVl
PSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5w
cm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2ds
ZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1
Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvIi8+Ci0gICAgICAg
IDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVmL3R5cGUu
cHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3VyY2UuZGlyfS9nb29n
bGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90
b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLnByb3RvIi8+
Ci0gICAgPC9leGVjPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL2xpdGUvZ2VuZXJhdGUt
dGVzdC1zb3VyY2VzLWJ1aWxkLnhtbCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS9saXRlL2dlbmVyYXRlLXRlc3Qtc291cmNlcy1i
dWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZDFlZTg5YTcxMTk3ODlj
M2E1MzlmOGVkNWI2MDZjM2YyYzY0YzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qYXZhL2xpdGUvZ2VuZXJhdGUtdGVzdC1zb3VyY2VzLWJ1aWxkLnhtbAor
KysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTxwcm9qZWN0IG5hbWU9ImdlbmVyYXRlLXRl
c3Qtc291cmNlcyI+Ci0gICAgPG1rZGlyIGRpcj0iJHtnZW5lcmF0ZWQudGVzdHNvdXJjZXMubGl0
ZS5kaXJ9Ii8+Ci0gICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtwcm90b2N9Ij4KLSAgICAgICAgPGFy
ZyB2YWx1ZT0iLS1qYXZhX291dD1saXRlOiR7Z2VuZXJhdGVkLnRlc3Rzb3VyY2VzLmxpdGUuZGly
fSIvPgotICAgICAgICA8YXJnIHZhbHVlPSItLXByb3RvX3BhdGg9JHtwcm90b2J1Zi5zb3VyY2Uu
ZGlyfSIvPgotICAgICAgICA8YXJnIHZhbHVlPSItLXByb3RvX3BhdGg9JHt0ZXN0LnByb3RvLmRp
cn0iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUv
cHJvdG9idWYvdW5pdHRlc3QucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtwcm90b2J1
Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0LnByb3RvIi8+Ci0g
ICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVm
L3VuaXR0ZXN0X2ltcG9ydF9wdWJsaWMucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtw
cm90b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbXNldC5wcm90byIv
PgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90
b2J1Zi91bml0dGVzdF9tc2V0X3dpcmVfZm9ybWF0LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFs
dWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X29wdGlt
aXplX2Zvci5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5k
aXJ9L2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9jdXN0b21fb3B0aW9ucy5wcm90byIvPgotICAg
ICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi91
bml0dGVzdF9saXRlLnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291
cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydF9saXRlLnByb3RvIi8+Ci0g
ICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xlL3Byb3RvYnVm
L3VuaXR0ZXN0X2ltcG9ydF9wdWJsaWNfbGl0ZS5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVl
PSIke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9saXRlX2lt
cG9ydHNfbm9ubGl0ZS5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Byb3RvYnVmLnNv
dXJjZS5kaXJ9L2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbm9ybW91c19kZXNjcmlwdG9yLnBy
b3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdG9idWYuc291cmNlLmRpcn0vZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0X25vX2dlbmVyaWNfc2VydmljZXMucHJvdG8iLz4KLSAgICAgICAg
PGFyZyB2YWx1ZT0iJHtwcm90b2J1Zi5zb3VyY2UuZGlyfS9nb29nbGUvcHJvdG9idWYvdW5pdHRl
c3Rfd2VsbF9rbm93bl90eXBlcy5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Rlc3Qu
cHJvdG8uZGlyfS9jb20vZ29vZ2xlL3Byb3RvYnVmL2xhenlfZmllbGRzX2xpdGUucHJvdG8iLz4K
LSAgICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1
Zi9saXRlX2VxdWFsc19hbmRfaGFzaC5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Rl
c3QucHJvdG8uZGlyfS9jb20vZ29vZ2xlL3Byb3RvYnVmL211bHRpcGxlX2ZpbGVzX3Rlc3QucHJv
dG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9w
cm90b2J1Zi9uZXN0ZWRfYnVpbGRlcnNfdGVzdC5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVl
PSIke3Rlc3QucHJvdG8uZGlyfS9jb20vZ29vZ2xlL3Byb3RvYnVmL25lc3RlZF9leHRlbnNpb24u
cHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2ds
ZS9wcm90b2J1Zi9uZXN0ZWRfZXh0ZW5zaW9uX2xpdGUucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2
YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1Zi9ub25fbmVzdGVkX2V4
dGVuc2lvbi5wcm90byIvPgotICAgICAgICA8YXJnIHZhbHVlPSIke3Rlc3QucHJvdG8uZGlyfS9j
b20vZ29vZ2xlL3Byb3RvYnVmL25vbl9uZXN0ZWRfZXh0ZW5zaW9uX2xpdGUucHJvdG8iLz4KLSAg
ICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1Zi9v
dXRlcl9jbGFzc19uYW1lX3Rlc3QucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0
LnByb3RvLmRpcn0vY29tL2dvb2dsZS9wcm90b2J1Zi9vdXRlcl9jbGFzc19uYW1lX3Rlc3QyLnBy
b3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2NvbS9nb29nbGUv
cHJvdG9idWYvb3V0ZXJfY2xhc3NfbmFtZV90ZXN0My5wcm90byIvPgotICAgICAgICA8YXJnIHZh
bHVlPSIke3Rlc3QucHJvdG8uZGlyfS9jb20vZ29vZ2xlL3Byb3RvYnVmL3Rlc3RfYmFkX2lkZW50
aWZpZXJzLnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2Nv
bS9nb29nbGUvcHJvdG9idWYvdGVzdF9jaGVja191dGY4LnByb3RvIi8+Ci0gICAgICAgIDxhcmcg
dmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2NvbS9nb29nbGUvcHJvdG9idWYvdGVzdF9jaGVja191
dGY4X3NpemUucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0v
Y29tL2dvb2dsZS9wcm90b2J1Zi90ZXN0X2N1c3RvbV9vcHRpb25zLnByb3RvIi8+Ci0gICAgICAg
IDxhcmcgdmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2NvbS9nb29nbGUvcHJvdG9idWYvYW55X3Rl
c3QucHJvdG8iLz4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0LnByb3RvLmRpcn0vY29tL2dv
b2dsZS9wcm90b2J1Zi9maWVsZF9wcmVzZW5jZV90ZXN0LnByb3RvIi8+Ci0gICAgICAgIDxhcmcg
dmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2NvbS9nb29nbGUvcHJvdG9idWYvbWFwX2Zvcl9wcm90
bzJfbGl0ZV90ZXN0LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5wcm90by5k
aXJ9L2NvbS9nb29nbGUvcHJvdG9idWYvbWFwX2Zvcl9wcm90bzJfdGVzdC5wcm90byIvPgotICAg
ICAgICA8YXJnIHZhbHVlPSIke3Rlc3QucHJvdG8uZGlyfS9jb20vZ29vZ2xlL3Byb3RvYnVmL21h
cF90ZXN0LnByb3RvIi8+Ci0gICAgICAgIDxhcmcgdmFsdWU9IiR7dGVzdC5wcm90by5kaXJ9L2Nv
bS9nb29nbGUvcHJvdG9idWYvbWFwX2luaXRpYWxpemF0aW9uX29yZGVyX3Rlc3QucHJvdG8iLz4K
LSAgICA8L2V4ZWM+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvbGl0ZS9wb20ueG1sIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL2xpdGUvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwM2RjMDkz
ZGY3NTBlYjA3Y2NhYjJjM2JhNTlkOTg5YzIyMDg1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvbGl0ZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAg
LTEsMTU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08
cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICB4bWxu
czp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICB4c2k6
c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8v
bWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KLSAgPG1vZGVsVmVyc2lvbj40LjAu
MDwvbW9kZWxWZXJzaW9uPgotICA8cGFyZW50PgotICAgIDxncm91cElkPmNvbS5nb29nbGUucHJv
dG9idWY8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+cHJvdG9idWYtcGFyZW50PC9hcnRpZmFj
dElkPgotICAgIDx2ZXJzaW9uPjMuMC4wLWJldGEtMzwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0K
LSAgPGFydGlmYWN0SWQ+cHJvdG9idWYtbGl0ZTwvYXJ0aWZhY3RJZD4KLSAgPHBhY2thZ2luZz5i
dW5kbGU8L3BhY2thZ2luZz4KLQotICA8bmFtZT5Qcm90b2NvbCBCdWZmZXJzIFtMaXRlXTwvbmFt
ZT4KLSAgPGRlc2NyaXB0aW9uPkEgdHJpbW1lZC1kb3duIHZlcnNpb24gb2YgdGhlIFByb3RvY29s
IEJ1ZmZlcnMgbGlicmFyeS48L2Rlc2NyaXB0aW9uPgotCi0gIDxkZXBlbmRlbmNpZXM+Ci0gICAg
PGRlcGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgIDxhcnRp
ZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8ZGVwZW5k
ZW5jeT4KLSAgICAgIDxncm91cElkPm9yZy5lYXN5bW9jazwvZ3JvdXBJZD4KLSAgICAgIDxhcnRp
ZmFjdElkPmVhc3ltb2NrPC9hcnRpZmFjdElkPgotICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8ZGVw
ZW5kZW5jeT4KLSAgICAgIDxncm91cElkPm9yZy5lYXN5bW9jazwvZ3JvdXBJZD4KLSAgICAgIDxh
cnRpZmFjdElkPmVhc3ltb2NrY2xhc3NleHRlbnNpb248L2FydGlmYWN0SWQ+Ci0gICAgPC9kZXBl
bmRlbmN5PgotICA8L2RlcGVuZGVuY2llcz4KLQotICA8cHJvcGVydGllcz4KLSAgICA8Y29yZS5y
b290Pi4uL2NvcmU8L2NvcmUucm9vdD4KLSAgICA8dGVzdC5wcm90by5kaXI+JHtjb3JlLnJvb3R9
L3NyYy90ZXN0L3Byb3RvPC90ZXN0LnByb3RvLmRpcj4KLSAgPC9wcm9wZXJ0aWVzPgotCi0gIDxi
dWlsZD4KLSAgICA8c291cmNlRGlyZWN0b3J5PiR7Y29yZS5yb290fS9zcmMvbWFpbi9qYXZhPC9z
b3VyY2VEaXJlY3Rvcnk+Ci0gICAgPHRlc3RTb3VyY2VEaXJlY3Rvcnk+JHtjb3JlLnJvb3R9L3Ny
Yy90ZXN0L2phdmE8L3Rlc3RTb3VyY2VEaXJlY3Rvcnk+Ci0KLSAgICA8cGx1Z2lucz4KLSAgICAg
IDwhLS0gVXNlIEFudHJ1biBwbHVnaW4gdG8gZ2VuZXJhdGUgc291cmNlcyB3aXRoIHByb3RvYyAt
LT4KLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFudHJ1bi1wbHVn
aW48L2FydGlmYWN0SWQ+Ci0gICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgIDwhLS0gR2Vu
ZXJhdGUgY29yZSBwcm90b3MgLS0+Ci0gICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAg
IDxpZD5nZW5lcmF0ZS1zb3VyY2VzPC9pZD4KLSAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1z
b3VyY2VzPC9waGFzZT4KLSAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAg
ICA8dGFyZ2V0PgotICAgICAgICAgICAgICAgIDxhbnQgYW50ZmlsZT0iZ2VuZXJhdGUtc291cmNl
cy1idWlsZC54bWwiLz4KLSAgICAgICAgICAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICA8L2Nv
bmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgIDxnb2FsPnJ1
bjwvZ29hbD4KLSAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgPC9leGVjdXRpb24+Ci0K
LSAgICAgICAgICA8IS0tIEdlbmVyYXRlIHRoZSB0ZXN0IHByb3RvcyAtLT4KLSAgICAgICAgICA8
ZXhlY3V0aW9uPgotICAgICAgICAgICAgPGlkPmdlbmVyYXRlLXRlc3Qtc291cmNlczwvaWQ+Ci0g
ICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtdGVzdC1zb3VyY2VzPC9waGFzZT4KLSAgICAgICAg
ICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICA8dGFyZ2V0PgotICAgICAgICAgICAg
ICAgIDxhbnQgYW50ZmlsZT0iZ2VuZXJhdGUtdGVzdC1zb3VyY2VzLWJ1aWxkLnhtbCIvPgotICAg
ICAgICAgICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAg
ICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPgotICAgICAgICAg
ICAgPC9nb2Fscz4KLSAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgPC9leGVjdXRpb25z
PgotICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgIDwhLS0gT25seSBjb21waWxlIGEgc3Vic2V0IG9m
IHRoZSBmaWxlcyAtLT4KLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVu
LWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0g
ICAgICAgICAgPGdlbmVyYXRlZFNvdXJjZXNEaXJlY3Rvcnk+JHtnZW5lcmF0ZWQuc291cmNlcy5s
aXRlLmRpcn08L2dlbmVyYXRlZFNvdXJjZXNEaXJlY3Rvcnk+Ci0gICAgICAgICAgPGdlbmVyYXRl
ZFRlc3RTb3VyY2VzRGlyZWN0b3J5PiR7Z2VuZXJhdGVkLnRlc3Rzb3VyY2VzLmxpdGUuZGlyfTwv
Z2VuZXJhdGVkVGVzdFNvdXJjZXNEaXJlY3Rvcnk+Ci0gICAgICAgICAgPGluY2x1ZGVzPgotICAg
ICAgICAgICAgPGluY2x1ZGU+KiovQWJzdHJhY3RNZXNzYWdlTGl0ZS5qYXZhPC9pbmNsdWRlPgot
ICAgICAgICAgICAgPGluY2x1ZGU+KiovQWJzdHJhY3RQYXJzZXIuamF2YTwvaW5jbHVkZT4KLSAg
ICAgICAgICAgIDxpbmNsdWRlPioqL0Fic3RyYWN0UHJvdG9idWZMaXN0LmphdmE8L2luY2x1ZGU+
Ci0gICAgICAgICAgICA8aW5jbHVkZT4qKi9Cb29sZWFuQXJyYXlMaXN0LmphdmE8L2luY2x1ZGU+
Ci0gICAgICAgICAgICA8aW5jbHVkZT4qKi9CeXRlU3RyaW5nLmphdmE8L2luY2x1ZGU+Ci0gICAg
ICAgICAgICA8aW5jbHVkZT4qKi9Db2RlZElucHV0U3RyZWFtLmphdmE8L2luY2x1ZGU+Ci0gICAg
ICAgICAgICA8aW5jbHVkZT4qKi9Db2RlZE91dHB1dFN0cmVhbS5qYXZhPC9pbmNsdWRlPgotICAg
ICAgICAgICAgPGluY2x1ZGU+KiovRG91YmxlQXJyYXlMaXN0LmphdmE8L2luY2x1ZGU+Ci0gICAg
ICAgICAgICA8aW5jbHVkZT4qKi9FeHRlbnNpb25MaXRlLmphdmE8L2luY2x1ZGU+Ci0gICAgICAg
ICAgICA8aW5jbHVkZT4qKi9FeHRlbnNpb25SZWdpc3RyeUxpdGUuamF2YTwvaW5jbHVkZT4KLSAg
ICAgICAgICAgIDxpbmNsdWRlPioqL0ZpZWxkU2V0LmphdmE8L2luY2x1ZGU+Ci0gICAgICAgICAg
ICA8aW5jbHVkZT4qKi9GbG9hdEFycmF5TGlzdC5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgICAg
PGluY2x1ZGU+KiovR2VuZXJhdGVkTWVzc2FnZUxpdGUuamF2YTwvaW5jbHVkZT4KLSAgICAgICAg
ICAgIDxpbmNsdWRlPioqL0ludEFycmF5TGlzdC5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgICAg
PGluY2x1ZGU+KiovSW50ZXJuYWwuamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAgIDxpbmNsdWRl
PioqL0ludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbi5qYXZhPC9pbmNsdWRlPgotICAgICAg
ICAgICAgPGluY2x1ZGU+KiovTGF6eUZpZWxkTGl0ZS5qYXZhPC9pbmNsdWRlPgotICAgICAgICAg
ICAgPGluY2x1ZGU+KiovTGF6eVN0cmluZ0FycmF5TGlzdC5qYXZhPC9pbmNsdWRlPgotICAgICAg
ICAgICAgPGluY2x1ZGU+KiovTGF6eVN0cmluZ0xpc3QuamF2YTwvaW5jbHVkZT4KLSAgICAgICAg
ICAgIDxpbmNsdWRlPioqL0xvbmdBcnJheUxpc3QuamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAg
IDxpbmNsdWRlPioqL01hcEVudHJ5TGl0ZS5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgICAgPGlu
Y2x1ZGU+KiovTWFwRmllbGRMaXRlLmphdmE8L2luY2x1ZGU+Ci0gICAgICAgICAgICA8aW5jbHVk
ZT4qKi9NZXNzYWdlTGl0ZS5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgICAgPGluY2x1ZGU+Kiov
TWVzc2FnZUxpdGVPckJ1aWxkZXIuamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAgIDxpbmNsdWRl
PioqL01lc3NhZ2VMaXRlVG9TdHJpbmcuamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAgIDxpbmNs
dWRlPioqL011dGFiaWxpdHlPcmFjbGUuamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAgIDxpbmNs
dWRlPioqL05pb0J5dGVTdHJpbmcuamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAgIDxpbmNsdWRl
PioqL1BhcnNlci5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgICAgPGluY2x1ZGU+KiovUHJvdG9i
dWZBcnJheUxpc3QuamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAgIDxpbmNsdWRlPioqL1Byb3Rv
Y29sU3RyaW5nTGlzdC5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgICAgPGluY2x1ZGU+KiovUm9w
ZUJ5dGVTdHJpbmcuamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAgIDxpbmNsdWRlPioqL1NtYWxs
U29ydGVkTWFwLmphdmE8L2luY2x1ZGU+Ci0gICAgICAgICAgICA8aW5jbHVkZT4qKi9UZXh0Rm9y
bWF0RXNjYXBlci5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgICAgPGluY2x1ZGU+KiovVW5pbml0
aWFsaXplZE1lc3NhZ2VFeGNlcHRpb24uamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAgIDxpbmNs
dWRlPioqL1Vua25vd25GaWVsZFNldExpdGUuamF2YTwvaW5jbHVkZT4KLSAgICAgICAgICAgIDxp
bmNsdWRlPioqL1VubW9kaWZpYWJsZUxhenlTdHJpbmdMaXN0LmphdmE8L2luY2x1ZGU+Ci0gICAg
ICAgICAgICA8aW5jbHVkZT4qKi9VbnNhZmVCeXRlT3BlcmF0aW9ucy5qYXZhPC9pbmNsdWRlPgot
ICAgICAgICAgICAgPGluY2x1ZGU+KiovVXRmOC5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgICAg
PGluY2x1ZGU+KiovV2lyZUZvcm1hdC5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgIDwvaW5jbHVk
ZXM+Ci0gICAgICAgICAgPHRlc3RJbmNsdWRlcz4KLSAgICAgICAgICAgIDx0ZXN0SW5jbHVkZT4q
Ki8qTGl0ZS5qYXZhPC90ZXN0SW5jbHVkZT4KLSAgICAgICAgICAgIDx0ZXN0SW5jbHVkZT4qKi9C
b29sZWFuQXJyYXlMaXN0VGVzdC5qYXZhPC90ZXN0SW5jbHVkZT4KLSAgICAgICAgICAgIDx0ZXN0
SW5jbHVkZT4qKi9Eb3VibGVBcnJheUxpc3RUZXN0LmphdmE8L3Rlc3RJbmNsdWRlPgotICAgICAg
ICAgICAgPHRlc3RJbmNsdWRlPioqL0Zsb2F0QXJyYXlMaXN0VGVzdC5qYXZhPC90ZXN0SW5jbHVk
ZT4KLSAgICAgICAgICAgIDx0ZXN0SW5jbHVkZT4qKi9JbnRBcnJheUxpc3RUZXN0LmphdmE8L3Rl
c3RJbmNsdWRlPgotICAgICAgICAgICAgPHRlc3RJbmNsdWRlPioqL0xhenlNZXNzYWdlTGl0ZVRl
c3QuamF2YTwvdGVzdEluY2x1ZGU+Ci0gICAgICAgICAgICA8dGVzdEluY2x1ZGU+KiovTGl0ZVRl
c3QuamF2YTwvdGVzdEluY2x1ZGU+Ci0gICAgICAgICAgICA8dGVzdEluY2x1ZGU+KiovTG9uZ0Fy
cmF5TGlzdFRlc3QuamF2YTwvdGVzdEluY2x1ZGU+Ci0gICAgICAgICAgICA8dGVzdEluY2x1ZGU+
KiovTmlvQnl0ZVN0cmluZ1Rlc3QuamF2YTwvdGVzdEluY2x1ZGU+Ci0gICAgICAgICAgICA8dGVz
dEluY2x1ZGU+KiovUHJvdG9idWZBcnJheUxpc3RUZXN0LmphdmE8L3Rlc3RJbmNsdWRlPgotICAg
ICAgICAgICAgPHRlc3RJbmNsdWRlPioqL1Vua25vd25GaWVsZFNldExpdGVUZXN0LmphdmE8L3Rl
c3RJbmNsdWRlPgotICAgICAgICAgIDwvdGVzdEluY2x1ZGVzPgotICAgICAgICA8L2NvbmZpZ3Vy
YXRpb24+Ci0gICAgICA8L3BsdWdpbj4KLQotICAgICAgPCEtLSBPU0dJIGJ1bmRsZSBjb25maWd1
cmF0aW9uIC0tPgotICAgICAgPHBsdWdpbj4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5m
ZWxpeDwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwv
YXJ0aWZhY3RJZD4KLSAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KLSAgICAg
ICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgPGluc3RydWN0aW9ucz4KLSAgICAgICAgICAg
IDxCdW5kbGUtRG9jVVJMPmh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvPC9CdW5kbGUtRG9jVVJMPgotICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+
Y29tLmdvb2dsZS5wcm90b2J1ZjwvQnVuZGxlLVN5bWJvbGljTmFtZT4KLSAgICAgICAgICAgIDxF
eHBvcnQtUGFja2FnZT5jb20uZ29vZ2xlLiR7cHJvamVjdC5hcnRpZmFjdElkfTt2ZXJzaW9uPSR7
cHJvamVjdC52ZXJzaW9ufTwvRXhwb3J0LVBhY2thZ2U+Ci0gICAgICAgICAgPC9pbnN0cnVjdGlv
bnM+Ci0gICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgIDwvcGx1Z2luPgotICAgIDwvcGx1
Z2lucz4KLSAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3BvbS54bWwg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmEvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ExYTkxZjg3Mzdl
NWQ0NGIzYmU0NWY2MTk0ZmFhZDFmNmRmM2QwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSAr
MCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3Qg
eG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgeG1sbnM6eHNpPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgeHNpOnNjaGVtYUxv
Y2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFw
YWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVs
VmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlPC9ncm91cElkPgot
ICAgIDxhcnRpZmFjdElkPmdvb2dsZTwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4xPC92ZXJz
aW9uPgotICA8L3BhcmVudD4KLQotICA8Z3JvdXBJZD5jb20uZ29vZ2xlLnByb3RvYnVmPC9ncm91
cElkPgotICA8YXJ0aWZhY3RJZD5wcm90b2J1Zi1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gIDx2ZXJz
aW9uPjMuMC4wLWJldGEtMzwvdmVyc2lvbj4KLSAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4K
LQotICA8bmFtZT5Qcm90b2NvbCBCdWZmZXJzIFtQYXJlbnRdPC9uYW1lPgotICA8aW5jZXB0aW9u
WWVhcj4yMDA4PC9pbmNlcHRpb25ZZWFyPgotICA8dXJsPmh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvPC91cmw+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBQcm90
b2NvbCBCdWZmZXJzIGFyZSBhIHdheSBvZiBlbmNvZGluZyBzdHJ1Y3R1cmVkIGRhdGEgaW4gYW4g
ZWZmaWNpZW50IHlldAotICAgIGV4dGVuc2libGUgZm9ybWF0LgotICA8L2Rlc2NyaXB0aW9uPgot
Ci0gIDxwcm9wZXJ0aWVzPgotICAgIDxwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPlVURi04
PC9wcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPgotICAgIDxwcm9qZWN0LnJlcG9ydGluZy5v
dXRwdXRFbmNvZGluZz5VVEYtODwvcHJvamVjdC5yZXBvcnRpbmcub3V0cHV0RW5jb2Rpbmc+Ci0K
LSAgICA8IS0tIFRoZXNlIGFyZSByZWxhdGl2ZSB0byB0aGUgc3VibW9kdWxlcyAtLT4KLSAgICA8
cHJvdG9idWYuYmFzZWRpcj4ke3Byb2plY3QuYmFzZWRpcn0vLi4vLi48L3Byb3RvYnVmLmJhc2Vk
aXI+Ci0gICAgPHByb3RvYnVmLnNvdXJjZS5kaXI+JHtwcm90b2J1Zi5iYXNlZGlyfS9zcmM8L3By
b3RvYnVmLnNvdXJjZS5kaXI+Ci0gICAgPHByb3RvYz4ke3Byb3RvYnVmLnNvdXJjZS5kaXJ9L3By
b3RvYzwvcHJvdG9jPgotICAgIDx0ZXN0LnByb3RvLmRpcj5zcmMvdGVzdC9wcm90bzwvdGVzdC5w
cm90by5kaXI+Ci0gICAgPGdlbmVyYXRlZC5zb3VyY2VzLmRpcj4ke3Byb2plY3QuYnVpbGQuZGly
ZWN0b3J5fS9nZW5lcmF0ZWQtc291cmNlczwvZ2VuZXJhdGVkLnNvdXJjZXMuZGlyPgotICAgIDxn
ZW5lcmF0ZWQudGVzdHNvdXJjZXMuZGlyPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L2dlbmVy
YXRlZC10ZXN0LXNvdXJjZXM8L2dlbmVyYXRlZC50ZXN0c291cmNlcy5kaXI+Ci0gICAgPGdlbmVy
YXRlZC5zb3VyY2VzLmxpdGUuZGlyPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L2dlbmVyYXRl
ZC1zb3VyY2VzLWxpdGU8L2dlbmVyYXRlZC5zb3VyY2VzLmxpdGUuZGlyPgotICAgIDxnZW5lcmF0
ZWQudGVzdHNvdXJjZXMubGl0ZS5kaXI+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vZ2VuZXJh
dGVkLXRlc3Qtc291cmNlcy1saXRlPC9nZW5lcmF0ZWQudGVzdHNvdXJjZXMubGl0ZS5kaXI+Ci0g
IDwvcHJvcGVydGllcz4KLQotICA8bGljZW5zZXM+Ci0gICAgPGxpY2Vuc2U+Ci0gICAgICA8bmFt
ZT5OZXcgQlNEIGxpY2Vuc2U8L25hbWU+Ci0gICAgICA8dXJsPmh0dHA6Ly93d3cub3BlbnNvdXJj
ZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwPC91cmw+Ci0gICAgICA8ZGlzdHJpYnV0aW9u
PnJlcG88L2Rpc3RyaWJ1dGlvbj4KLSAgICA8L2xpY2Vuc2U+Ci0gIDwvbGljZW5zZXM+Ci0KLSAg
PHNjbT4KLSAgICA8dXJsPmh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWY8L3VybD4K
LSAgICA8Y29ubmVjdGlvbj5zY206Z2l0Omh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9i
dWYuZ2l0PC9jb25uZWN0aW9uPgotICA8L3NjbT4KLQotICA8ZGlzdHJpYnV0aW9uTWFuYWdlbWVu
dD4KLSAgICA8c25hcHNob3RSZXBvc2l0b3J5PgotICAgICAgPGlkPnNvbmF0eXBlLW5leHVzLXN0
YWdpbmc8L2lkPgotICAgICAgPHVybD5odHRwczovL29zcy5zb25hdHlwZS5vcmcvY29udGVudC9y
ZXBvc2l0b3JpZXMvc25hcHNob3RzPC91cmw+Ci0gICAgPC9zbmFwc2hvdFJlcG9zaXRvcnk+Ci0g
ICAgPHJlcG9zaXRvcnk+Ci0gICAgICA8aWQ+c29uYXR5cGUtbmV4dXMtc3RhZ2luZzwvaWQ+Ci0g
ICAgICA8dXJsPmh0dHBzOi8vb3NzLnNvbmF0eXBlLm9yZy9zZXJ2aWNlL2xvY2FsL3N0YWdpbmcv
ZGVwbG95L21hdmVuMi88L3VybD4KLSAgICA8L3JlcG9zaXRvcnk+Ci0gIDwvZGlzdHJpYnV0aW9u
TWFuYWdlbWVudD4KLQotICA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+Ci0gICAgPGRlcGVuZGVuY2ll
cz4KLSAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4K
LSAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9u
PjQuMTI8L3ZlcnNpb24+Ci0gICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgIDwvZGVw
ZW5kZW5jeT4KLSAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICA8Z3JvdXBJZD5vcmcuZWFzeW1v
Y2s8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPmVhc3ltb2NrPC9hcnRpZmFjdElkPgot
ICAgICAgICA8dmVyc2lvbj4yLjI8L3ZlcnNpb24+Ci0gICAgICAgIDxzY29wZT50ZXN0PC9zY29w
ZT4KLSAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICA8Z3Jv
dXBJZD5vcmcuZWFzeW1vY2s8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPmVhc3ltb2Nr
Y2xhc3NleHRlbnNpb248L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMi4xPC92ZXJz
aW9uPgotICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICA8L2RlcGVuZGVuY3k+Ci0g
ICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5ndWF2YTwvZ3Jv
dXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+Z3VhdmE8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2
ZXJzaW9uPjE4LjA8L3ZlcnNpb24+Ci0gICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRl
bmNpZXM+Ci0gIDwvZGVwZW5kZW5jeU1hbmFnZW1lbnQ+Ci0KLSAgPGJ1aWxkPgotICAgIDxwbHVn
aW5NYW5hZ2VtZW50PgotICAgICAgPHBsdWdpbnM+Ci0gICAgICAgIDxwbHVnaW4+Ci0gICAgICAg
ICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAg
ICAgIDx2ZXJzaW9uPjMuMzwvdmVyc2lvbj4KLSAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAg
ICAgICAgICAgIDxzb3VyY2U+MS42PC9zb3VyY2U+Ci0gICAgICAgICAgICA8dGFyZ2V0PjEuNjwv
dGFyZ2V0PgotICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgPC9wbHVnaW4+Ci0g
ICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc291cmNlLXBsdWdp
bjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICA8dmVyc2lvbj4yLjQ8L3ZlcnNpb24+Ci0gICAgICAg
ICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICA8
aWQ+YXR0YWNoLXNvdXJjZXM8L2lkPgotICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAg
ICAgICAgPGdvYWw+amFyLW5vLWZvcms8L2dvYWw+Ci0gICAgICAgICAgICAgIDwvZ29hbHM+Ci0g
ICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAg
IDwvcGx1Z2luPgotICAgICAgICA8cGx1Z2luPgotICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVu
LWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgIDx2ZXJzaW9uPjIuMTAuMzwv
dmVyc2lvbj4KLSAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgIDxleGVjdXRpb24+
Ci0gICAgICAgICAgICAgIDxpZD5hdHRhY2gtamF2YWRvY3M8L2lkPgotICAgICAgICAgICAgICA8
Z29hbHM+Ci0gICAgICAgICAgICAgICAgPGdvYWw+amFyPC9nb2FsPgotICAgICAgICAgICAgICA8
L2dvYWxzPgotICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgPC9leGVjdXRpb25z
PgotICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICA8YXJ0aWZh
Y3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgIDx2ZXJzaW9uPjIu
NjwvdmVyc2lvbj4KLSAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDxwbHVnaW4+Ci0gICAgICAg
ICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+Ci0gICAgICAgICAgPGFydGlm
YWN0SWQ+YnVpbGQtaGVscGVyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICA8
dmVyc2lvbj4xLjEwPC92ZXJzaW9uPgotICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPHBsdWdp
bj4KLSAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgotICAgICAg
ICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAg
ICAgPHZlcnNpb24+My4wLjE8L3ZlcnNpb24+Ci0gICAgICAgIDwvcGx1Z2luPgotICAgICAgICA8
cGx1Z2luPgotICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFudHJ1bi1wbHVnaW48L2FydGlm
YWN0SWQ+Ci0gICAgICAgICAgPHZlcnNpb24+MS44PC92ZXJzaW9uPgotICAgICAgICA8L3BsdWdp
bj4KLSAgICAgIDwvcGx1Z2lucz4KLSAgICA8L3BsdWdpbk1hbmFnZW1lbnQ+Ci0gIDwvYnVpbGQ+
Ci0KLSAgPHByb2ZpbGVzPgotICAgIDxwcm9maWxlPgotICAgICAgPGlkPnJlbGVhc2U8L2lkPgot
ICAgICAgPGJ1aWxkPgotICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICA8cGx1Z2luPgotICAg
ICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZ3BnLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAg
ICAgICAgIDx2ZXJzaW9uPjEuNjwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxleGVjdXRpb25zPgot
ICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDxpZD5zaWduLWFydGlm
YWN0czwvaWQ+Ci0gICAgICAgICAgICAgICAgPHBoYXNlPnZlcmlmeTwvcGhhc2U+Ci0gICAgICAg
ICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgPGdvYWw+c2lnbjwvZ29hbD4KLSAg
ICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAg
ICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICA8cGx1
Z2luPgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNvbmF0eXBlLnBsdWdpbnM8L2dyb3VwSWQ+
Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5uZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjwvYXJ0
aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi42PC92ZXJzaW9uPgotICAgICAgICAg
ICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KLSAgICAgICAgICAgIDxjb25maWd1cmF0
aW9uPgotICAgICAgICAgICAgICA8c2VydmVySWQ+c29uYXR5cGUtbmV4dXMtc3RhZ2luZzwvc2Vy
dmVySWQ+Ci0gICAgICAgICAgICAgIDxuZXh1c1VybD5odHRwczovL29zcy5zb25hdHlwZS5vcmcv
PC9uZXh1c1VybD4KLSAgICAgICAgICAgICAgPGF1dG9SZWxlYXNlQWZ0ZXJDbG9zZT5mYWxzZTwv
YXV0b1JlbGVhc2VBZnRlckNsb3NlPgotICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAg
ICAgICAgIDwvcGx1Z2luPgotICAgICAgICA8L3BsdWdpbnM+Ci0gICAgICA8L2J1aWxkPgotICAg
IDwvcHJvZmlsZT4KLSAgPC9wcm9maWxlcz4KLQotICA8bW9kdWxlcz4KLSAgICA8bW9kdWxlPmNv
cmU8L21vZHVsZT4KLSAgICA8bW9kdWxlPmxpdGU8L21vZHVsZT4KLSAgICA8bW9kdWxlPnV0aWw8
L21vZHVsZT4KLSAgPC9tb2R1bGVzPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvdXRp
bC9wb20ueG1sIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL3V0aWwvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTIzNmY5MDc1OWY0ODYyNDVhMWEwNTFmOGY3NTkwYzIzYzUzZjU5Mi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvdXRpbC9wb20ueG1sCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQu
MC4wIgotICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3Rh
bmNlIgotICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80
LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KLSAgPG1vZGVs
VmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICA8cGFyZW50PgotICAgIDxncm91cElkPmNv
bS5nb29nbGUucHJvdG9idWY8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+cHJvdG9idWYtcGFy
ZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjMuMC4wLWJldGEtMzwvdmVyc2lvbj4KLSAg
PC9wYXJlbnQ+Ci0KLSAgPGFydGlmYWN0SWQ+cHJvdG9idWYtamF2YS11dGlsPC9hcnRpZmFjdElk
PgotICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgotCi0gIDxuYW1lPlByb3RvY29sIEJ1
ZmZlcnMgW1V0aWxdPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+VXRpbGl0aWVzIGZvciBQcm90b2Nv
bCBCdWZmZXJzPC9kZXNjcmlwdGlvbj4KLQotICA8ZGVwZW5kZW5jaWVzPgotICAgIDxkZXBlbmRl
bmN5PgotICAgICAgPGdyb3VwSWQ+JHtwcm9qZWN0Lmdyb3VwSWR9PC9ncm91cElkPgotICAgICAg
PGFydGlmYWN0SWQ+cHJvdG9idWYtamF2YTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPiR7
cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVu
ZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmd1YXZhPC9ncm91cElkPgotICAgICAg
PGFydGlmYWN0SWQ+Z3VhdmE8L2FydGlmYWN0SWQ+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxk
ZXBlbmRlbmN5PgotICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5jb2RlLmdzb248L2dyb3VwSWQ+
Ci0gICAgICA8YXJ0aWZhY3RJZD5nc29uPC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+Mi4z
PC92ZXJzaW9uPgotICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8ZGVwZW5kZW5jeT4KLSAgICAgIDxn
cm91cElkPmp1bml0PC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0
SWQ+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgotICAgICAgPGdyb3VwSWQ+
b3JnLmVhc3ltb2NrPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+ZWFzeW1vY2s8L2FydGlm
YWN0SWQ+Ci0gICAgPC9kZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbmN5PgotICAgICAgPGdyb3Vw
SWQ+b3JnLmVhc3ltb2NrPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+ZWFzeW1vY2tjbGFz
c2V4dGVuc2lvbjwvYXJ0aWZhY3RJZD4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gIDwvZGVwZW5kZW5j
aWVzPgotCi0gIDxwcm9wZXJ0aWVzPgotICAgIDwhLS0gVXNlIHRoZSBjb3JlIHByb3RvIGRpciBz
byB0aGF0IHdlIGNhbiBjYWxsIHRoZSBjb3JlIGdlbmVyYXRpb24gc2NyaXB0IC0tPgotICAgIDx0
ZXN0LnByb3RvLmRpcj4uLi9jb3JlL3NyYy90ZXN0L3Byb3RvPC90ZXN0LnByb3RvLmRpcj4KLSAg
PC9wcm9wZXJ0aWVzPgotCi0gIDxidWlsZD4KLSAgICA8cGx1Z2lucz4KLSAgICAgIDxwbHVnaW4+
Ci0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFudHJ1bi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0g
ICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgIDwhLS0gR2VuZXJhdGUgdGhlIHRlc3QgcHJv
dG9zIC0tPgotICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICA8aWQ+Z2VuZXJhdGUt
dGVzdC1zb3VyY2VzPC9pZD4KLSAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS10ZXN0LXNvdXJj
ZXM8L3BoYXNlPgotICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgIDx0
YXJnZXQ+Ci0gICAgICAgICAgICAgICAgPCEtLSBHZW5lcmF0ZSBhbGwgb2YgdGhlIHRlc3QgcHJv
dG9zIGZyb20gdGhlIGNvcmUgbW9kdWxlIC0tPgotICAgICAgICAgICAgICAgIDxhbnQgYW50Zmls
ZT0iLi4vY29yZS9nZW5lcmF0ZS10ZXN0LXNvdXJjZXMtYnVpbGQueG1sIi8+Ci0KLSAgICAgICAg
ICAgICAgICA8IS0tIEdlbmVyYXRlIGFkZGl0aW9uYWwgdGVzdCBwcm90b3MgZm9yIHRoaXMgbW9k
dWxlIC0tPgotICAgICAgICAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7cHJvdG9jfSI+Ci0g
ICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLWphdmFfb3V0PSR7Z2VuZXJhdGVkLnRlc3Rz
b3VyY2VzLmRpcn0iIC8+Ci0gICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXByb3RvX3Bh
dGg9JHtwcm90b2J1Zi5zb3VyY2UuZGlyfSIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFs
dWU9Ii0tcHJvdG9fcGF0aD1zcmMvdGVzdC9wcm90byIgLz4KLSAgICAgICAgICAgICAgICAgIDxh
cmcgdmFsdWU9InNyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3Rl
c3QucHJvdG8iIC8+Ci0gICAgICAgICAgICAgICAgPC9leGVjPgotICAgICAgICAgICAgICA8L3Rh
cmdldD4KLSAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDxnb2Fscz4K
LSAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPgotICAgICAgICAgICAgPC9nb2Fscz4KLSAg
ICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgPC9wbHVn
aW4+Ci0KLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVy
LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAg
PCEtLSBBZGQgdGhlIGdlbmVyYXRlZCB0ZXN0IHNvdXJjZXMgdG8gdGhlIGJ1aWxkIC0tPgotICAg
ICAgICAgIDxnZW5lcmF0ZWRUZXN0U291cmNlc0RpcmVjdG9yeT4ke2dlbmVyYXRlZC50ZXN0c291
cmNlcy5kaXJ9PC9nZW5lcmF0ZWRUZXN0U291cmNlc0RpcmVjdG9yeT4KLSAgICAgICAgPC9jb25m
aWd1cmF0aW9uPgotICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgIDwhLS0gQ29uZmlndXJlIHRoZSBP
U0dJIGJ1bmRsZSAtLT4KLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFj
aGUuZmVsaXg8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVn
aW48L2FydGlmYWN0SWQ+Ci0gICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+Ci0g
ICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgIDxpbnN0cnVjdGlvbnM+Ci0gICAgICAg
ICAgICA8QnVuZGxlLURvY1VSTD5odHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLzwvQnVuZGxlLURvY1VSTD4KLSAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNO
YW1lPmNvbS5nb29nbGUucHJvdG9idWYudXRpbDwvQnVuZGxlLVN5bWJvbGljTmFtZT4KLSAgICAg
ICAgICAgIDxFeHBvcnQtUGFja2FnZT5jb20uZ29vZ2xlLnByb3RvYnVmLnV0aWw7dmVyc2lvbj0k
e3Byb2plY3QudmVyc2lvbn08L0V4cG9ydC1QYWNrYWdlPgotICAgICAgICAgIDwvaW5zdHJ1Y3Rp
b25zPgotICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICA8L3BsdWdpbj4KLQotICAgICAg
PCEtLSBDb25maWd1cmUgdGhlIGZhdCBqYXIgdG8gaW5jbHVkZSBhbGwgZGVwZW5kZW5jaWVzIC0t
PgotICAgICAgPHBsdWdpbj4KLSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYXNzZW1ibHktcGx1
Z2luPC9hcnRpZmFjdElkPgotICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICA8ZGVz
Y3JpcHRvclJlZnM+Ci0gICAgICAgICAgICA8ZGVzY3JpcHRvclJlZj5qYXItd2l0aC1kZXBlbmRl
bmNpZXM8L2Rlc2NyaXB0b3JSZWY+Ci0gICAgICAgICAgPC9kZXNjcmlwdG9yUmVmcz4KLSAgICAg
ICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgPC9wbHVnaW4+Ci0gICAgPC9wbHVnaW5zPgotICA8
L2J1aWxkPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3JjL21haW4vamF2YS9j
b20vZ29vZ2xlL3Byb3RvYnVmL3V0aWwvRmllbGRNYXNrVHJlZS5qYXZhIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3Jj
L21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL3V0aWwvRmllbGRNYXNrVHJlZS5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjhkNjVhYjE2OWUwMDZhMmM3NGRmMDY0ZjFj
MGRmYWYxOWJlODRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YS91dGlsL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsL0ZpZWxk
TWFza1RyZWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmLnV0
aWw7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkRlc2NyaXB0b3I7
Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3I7
Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2s7Ci1pbXBvcnQgY29tLmdvb2ds
ZS5wcm90b2J1Zi5NZXNzYWdlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9y
dCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OwotaW1wb3J0IGph
dmEudXRpbC5UcmVlTWFwOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKLQotLyoq
Ci0gKiBBIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgYSBGaWVsZE1hc2suIEVhY2ggbGVhZiBub2Rl
IGluIHRoaXMgdHJlZSByZXByZXNlbnQKLSAqIGEgZmllbGQgcGF0aCBpbiB0aGUgRmllbGRNYXNr
LgotICoKLSAqIDxwPkZvciBleGFtcGxlLCBGaWVsZE1hc2sgImZvby5iYXIsZm9vLmJheixiYXIu
YmF6IiBhcyBhIHRyZWUgd2lsbCBiZToKLSAqIDxwcmU+Ci0gKiAgIFtyb290XSAtKy0gZm9vIC0r
LSBiYXIKLSAqICAgICAgICAgICB8ICAgICAgIHwKLSAqICAgICAgICAgICB8ICAgICAgICstIGJh
egotICogICAgICAgICAgIHwKLSAqICAgICAgICAgICArLSBiYXIgLS0tIGJhegotICogPC9wcmU+
Ci0gKgotICogPHA+QnkgcmVwcmVzZW50aW5nIEZpZWxkTWFza3Mgd2l0aCB0aGlzIHRyZWUgc3Ry
dWN0dXJlIHdlIGNhbiBlYXNpbHkgY29udmVydAotICogYSBGaWVsZE1hc2sgdG8gYSBjYW5vbmlj
YWwgZm9ybSwgbWVyZ2UgdHdvIEZpZWxkTWFza3MsIGNhbGN1bGF0ZSB0aGUKLSAqIGludGVyc2Vj
dGlvbiB0byB0d28gRmllbGRNYXNrcyBhbmQgdHJhdmVyc2UgYWxsIGZpZWxkcyBzcGVjaWZpZWQg
YnkgdGhlCi0gKiBGaWVsZE1hc2sgaW4gYSBtZXNzYWdlIHRyZWUuCi0gKi8KLWNsYXNzIEZpZWxk
TWFza1RyZWUgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2Vy
LmdldExvZ2dlcihGaWVsZE1hc2tUcmVlLmNsYXNzLmdldE5hbWUoKSk7Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIEZJRUxEX1BBVEhfU0VQQVJBVE9SX1JFR0VYID0gIlxcLiI7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTm9kZSB7Ci0gICAgcHVibGljIFRyZWVNYXA8U3RyaW5n
LCBOb2RlPiBjaGlsZHJlbiA9IG5ldyBUcmVlTWFwPFN0cmluZywgTm9kZT4oKTsKLSAgfQotCi0g
IHByaXZhdGUgZmluYWwgTm9kZSByb290ID0gbmV3IE5vZGUoKTsKLQotICAvKiogQ3JlYXRlcyBh
biBlbXB0eSBGaWVsZE1hc2tUcmVlLiAqLwotICBwdWJsaWMgRmllbGRNYXNrVHJlZSgpIHt9Ci0K
LSAgLyoqIENyZWF0ZXMgYSBGaWVsZE1hc2tUcmVlIGZvciBhIGdpdmVuIEZpZWxkTWFzay4gKi8K
LSAgcHVibGljIEZpZWxkTWFza1RyZWUoRmllbGRNYXNrIG1hc2spIHsKLSAgICBtZXJnZUZyb21G
aWVsZE1hc2sobWFzayk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFN0cmluZyB0b1N0
cmluZygpIHsKLSAgICByZXR1cm4gRmllbGRNYXNrVXRpbC50b1N0cmluZyh0b0ZpZWxkTWFzaygp
KTsKLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGEgZmllbGQgcGF0aCB0byB0aGUgdHJlZS4gSW4g
YSBGaWVsZE1hc2ssIGV2ZXJ5IGZpZWxkIHBhdGggbWF0Y2hlcyB0aGUKLSAgICogc3BlY2lmaWVk
IGZpZWxkIGFzIHdlbGwgYXMgYWxsIGl0cyBzdWItZmllbGRzLiBGb3IgZXhhbXBsZSwgYSBmaWVs
ZCBwYXRoCi0gICAqICJmb28uYmFyIiBtYXRjaGVzIGZpZWxkICJmb28uYmFyIiBhbmQgYWxzbyAi
Zm9vLmJhci5iYXoiLCBldGMuIFdoZW4gYWRkaW5nCi0gICAqIGEgZmllbGQgcGF0aCB0byB0aGUg
dHJlZSwgcmVkdW5kYW50IHN1Yi1wYXRocyB3aWxsIGJlIHJlbW92ZWQuIFRoYXQgaXMsCi0gICAq
IGFmdGVyIGFkZGluZyAiZm9vLmJhciIgdG8gdGhlIHRyZWUsICJmb28uYmFyLmJheiIgd2lsbCBi
ZSByZW1vdmVkIGlmIGl0Ci0gICAqIGV4aXN0cywgd2hpY2ggd2lsbCB0dXJuIHRoZSB0cmVlIG5v
ZGUgZm9yICJmb28uYmFyIiB0byBhIGxlYWYgbm9kZS4KLSAgICogTGlrZXdpc2UsIGlmIHRoZSBm
aWVsZCBwYXRoIHRvIGFkZCBpcyBhIHN1Yi1wYXRoIG9mIGFuIGV4aXN0aW5nIGxlYWYgbm9kZSwK
LSAgICogbm90aGluZyB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIHRyZWUuCi0gICAqLwotICBwdWJs
aWMgRmllbGRNYXNrVHJlZSBhZGRGaWVsZFBhdGgoU3RyaW5nIHBhdGgpIHsKLSAgICBTdHJpbmdb
XSBwYXJ0cyA9IHBhdGguc3BsaXQoRklFTERfUEFUSF9TRVBBUkFUT1JfUkVHRVgpOwotICAgIGlm
IChwYXJ0cy5sZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIE5v
ZGUgbm9kZSA9IHJvb3Q7Ci0gICAgYm9vbGVhbiBjcmVhdGVOZXdCcmFuY2ggPSBmYWxzZTsKLSAg
ICAvLyBGaW5kIHRoZSBtYXRjaGluZyBub2RlIGluIHRoZSB0cmVlLgotICAgIGZvciAoU3RyaW5n
IHBhcnQgOiBwYXJ0cykgewotICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcGF0aCBtYXRjaGVz
IGFuIGV4aXN0aW5nIGxlYWYgbm9kZS4KLSAgICAgIGlmICghY3JlYXRlTmV3QnJhbmNoICYmIG5v
ZGUgIT0gcm9vdCAmJiBub2RlLmNoaWxkcmVuLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBUaGUg
cGF0aCB0byBhZGQgaXMgYSBzdWItcGF0aCBvZiBhbiBleGlzdGluZyBsZWFmIG5vZGUuCi0gICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgfQotICAgICAgaWYgKG5vZGUuY2hpbGRyZW4uY29udGFp
bnNLZXkocGFydCkpIHsKLSAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGRyZW4uZ2V0KHBhcnQpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgY3JlYXRlTmV3QnJhbmNoID0gdHJ1ZTsKLSAgICAgICAg
Tm9kZSB0bXAgPSBuZXcgTm9kZSgpOwotICAgICAgICBub2RlLmNoaWxkcmVuLnB1dChwYXJ0LCB0
bXApOwotICAgICAgICBub2RlID0gdG1wOwotICAgICAgfQotICAgIH0KLSAgICAvLyBUdXJuIHRo
ZSBtYXRjaGluZyBub2RlIGludG8gYSBsZWFmIG5vZGUgKGkuZS4sIHJlbW92ZSBzdWItcGF0aHMp
LgotICAgIG5vZGUuY2hpbGRyZW4uY2xlYXIoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0g
IC8qKgotICAgKiBNZXJnZXMgYWxsIGZpZWxkIHBhdGhzIGluIGEgRmllbGRNYXNrIGludG8gdGhp
cyB0cmVlLgotICAgKi8KLSAgcHVibGljIEZpZWxkTWFza1RyZWUgbWVyZ2VGcm9tRmllbGRNYXNr
KEZpZWxkTWFzayBtYXNrKSB7Ci0gICAgZm9yIChTdHJpbmcgcGF0aCA6IG1hc2suZ2V0UGF0aHNM
aXN0KCkpIHsKLSAgICAgIGFkZEZpZWxkUGF0aChwYXRoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRo
aXM7Ci0gIH0KLQotICAvKiogQ29udmVydHMgdGhpcyB0cmVlIHRvIGEgRmllbGRNYXNrLiAqLwot
ICBwdWJsaWMgRmllbGRNYXNrIHRvRmllbGRNYXNrKCkgewotICAgIGlmIChyb290LmNoaWxkcmVu
LmlzRW1wdHkoKSkgewotICAgICAgcmV0dXJuIEZpZWxkTWFzay5nZXREZWZhdWx0SW5zdGFuY2Uo
KTsKLSAgICB9Ci0gICAgTGlzdDxTdHJpbmc+IHBhdGhzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+
KCk7Ci0gICAgZ2V0RmllbGRQYXRocyhyb290LCAiIiwgcGF0aHMpOwotICAgIHJldHVybiBGaWVs
ZE1hc2submV3QnVpbGRlcigpLmFkZEFsbFBhdGhzKHBhdGhzKS5idWlsZCgpOwotICB9Ci0KLSAg
LyoqIEdhdGhlcnMgYWxsIGZpZWxkIHBhdGhzIGluIGEgc3ViLXRyZWUuICovCi0gIHByaXZhdGUg
dm9pZCBnZXRGaWVsZFBhdGhzKE5vZGUgbm9kZSwgU3RyaW5nIHBhdGgsIExpc3Q8U3RyaW5nPiBw
YXRocykgewotICAgIGlmIChub2RlLmNoaWxkcmVuLmlzRW1wdHkoKSkgewotICAgICAgcGF0aHMu
YWRkKHBhdGgpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmb3IgKEVudHJ5PFN0cmluZywg
Tm9kZT4gZW50cnkgOiBub2RlLmNoaWxkcmVuLmVudHJ5U2V0KCkpIHsKLSAgICAgIFN0cmluZyBj
aGlsZFBhdGggPSBwYXRoLmlzRW1wdHkoKSA/IGVudHJ5LmdldEtleSgpIDogcGF0aCArICIuIiAr
IGVudHJ5LmdldEtleSgpOwotICAgICAgZ2V0RmllbGRQYXRocyhlbnRyeS5nZXRWYWx1ZSgpLCBj
aGlsZFBhdGgsIHBhdGhzKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkcyB0aGUgaW50
ZXJzZWN0aW9uIG9mIHRoaXMgdHJlZSB3aXRoIHRoZSBnaXZlbiB7QGNvZGUgcGF0aH0gdG8KLSAg
ICoge0Bjb2RlIG91dHB1dH0uCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbnRlcnNlY3RGaWVsZFBh
dGgoU3RyaW5nIHBhdGgsIEZpZWxkTWFza1RyZWUgb3V0cHV0KSB7Ci0gICAgaWYgKHJvb3QuY2hp
bGRyZW4uaXNFbXB0eSgpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIFN0cmluZ1tdIHBh
cnRzID0gcGF0aC5zcGxpdChGSUVMRF9QQVRIX1NFUEFSQVRPUl9SRUdFWCk7Ci0gICAgaWYgKHBh
cnRzLmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIE5vZGUgbm9kZSA9
IHJvb3Q7Ci0gICAgZm9yIChTdHJpbmcgcGFydCA6IHBhcnRzKSB7Ci0gICAgICBpZiAobm9kZSAh
PSByb290ICYmIG5vZGUuY2hpbGRyZW4uaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoZSBnaXZl
biBwYXRoIGlzIGEgc3ViLXBhdGggb2YgYW4gZXhpc3RpbmcgbGVhZiBub2RlIGluIHRoZSB0cmVl
LgotICAgICAgICBvdXRwdXQuYWRkRmllbGRQYXRoKHBhdGgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgICB9Ci0gICAgICBpZiAobm9kZS5jaGlsZHJlbi5jb250YWluc0tleShwYXJ0KSkgewotICAg
ICAgICBub2RlID0gbm9kZS5jaGlsZHJlbi5nZXQocGFydCk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFdlIGZvdW5kIGEgbWF0Y2hpbmcg
bm9kZSBmb3IgdGhlIHBhdGguIEFsbCBsZWFmIGNoaWxkcmVuIG9mIHRoaXMgbWF0Y2hpbmcKLSAg
ICAvLyBub2RlIGlzIGluIHRoZSBpbnRlcnNlY3Rpb24uCi0gICAgTGlzdDxTdHJpbmc+IHBhdGhz
ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgZ2V0RmllbGRQYXRocyhub2RlLCBwYXRo
LCBwYXRocyk7Ci0gICAgZm9yIChTdHJpbmcgdmFsdWUgOiBwYXRocykgewotICAgICAgb3V0cHV0
LmFkZEZpZWxkUGF0aCh2YWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIE1lcmdlcyBh
bGwgZmllbGRzIHNwZWNpZmllZCBieSB0aGlzIEZpZWxkTWFza1RyZWUgZnJvbSB7QGNvZGUgc291
cmNlfSB0bwotICAgKiB7QGNvZGUgZGVzdGluYXRpb259LgotICAgKi8KLSAgcHVibGljIHZvaWQg
bWVyZ2UoCi0gICAgICBNZXNzYWdlIHNvdXJjZSwgTWVzc2FnZS5CdWlsZGVyIGRlc3RpbmF0aW9u
LCBGaWVsZE1hc2tVdGlsLk1lcmdlT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgaWYgKHNvdXJjZS5n
ZXREZXNjcmlwdG9yRm9yVHlwZSgpICE9IGRlc3RpbmF0aW9uLmdldERlc2NyaXB0b3JGb3JUeXBl
KCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNhbm5vdCBt
ZXJnZSBtZXNzYWdlcyBvZiBkaWZmZXJlbnQgdHlwZXMuIik7Ci0gICAgfQotICAgIGlmIChyb290
LmNoaWxkcmVuLmlzRW1wdHkoKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtZXJnZShy
b290LCAiIiwgc291cmNlLCBkZXN0aW5hdGlvbiwgb3B0aW9ucyk7Ci0gIH0KLQotICAvKiogTWVy
Z2VzIGFsbCBmaWVsZHMgc3BlY2lmaWVkIGJ5IGEgc3ViLXRyZWUgZnJvbSB7QGNvZGUgc291cmNl
fSB0bwotICAgKiB7QGNvZGUgZGVzdGluYXRpb259LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIG1l
cmdlKAotICAgICAgTm9kZSBub2RlLAotICAgICAgU3RyaW5nIHBhdGgsCi0gICAgICBNZXNzYWdl
IHNvdXJjZSwKLSAgICAgIE1lc3NhZ2UuQnVpbGRlciBkZXN0aW5hdGlvbiwKLSAgICAgIEZpZWxk
TWFza1V0aWwuTWVyZ2VPcHRpb25zIG9wdGlvbnMpIHsKLSAgICBhc3NlcnQgc291cmNlLmdldERl
c2NyaXB0b3JGb3JUeXBlKCkgPT0gZGVzdGluYXRpb24uZ2V0RGVzY3JpcHRvckZvclR5cGUoKTsK
LQotICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHNvdXJjZS5nZXREZXNjcmlwdG9yRm9yVHlw
ZSgpOwotICAgIGZvciAoRW50cnk8U3RyaW5nLCBOb2RlPiBlbnRyeSA6IG5vZGUuY2hpbGRyZW4u
ZW50cnlTZXQoKSkgewotICAgICAgRmllbGREZXNjcmlwdG9yIGZpZWxkID0gZGVzY3JpcHRvci5m
aW5kRmllbGRCeU5hbWUoZW50cnkuZ2V0S2V5KCkpOwotICAgICAgaWYgKGZpZWxkID09IG51bGwp
IHsKLSAgICAgICAgbG9nZ2VyLndhcm5pbmcoCi0gICAgICAgICAgICAiQ2Fubm90IGZpbmQgZmll
bGQgXCIiCi0gICAgICAgICAgICAgICAgKyBlbnRyeS5nZXRLZXkoKQotICAgICAgICAgICAgICAg
ICsgIlwiIGluIG1lc3NhZ2UgdHlwZSAiCi0gICAgICAgICAgICAgICAgKyBkZXNjcmlwdG9yLmdl
dEZ1bGxOYW1lKCkpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGlmICghZW50
cnkuZ2V0VmFsdWUoKS5jaGlsZHJlbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGZpZWxkLmlz
UmVwZWF0ZWQoKSB8fCBmaWVsZC5nZXRKYXZhVHlwZSgpICE9IEZpZWxkRGVzY3JpcHRvci5KYXZh
VHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgICAgbG9nZ2VyLndhcm5pbmcoCi0gICAgICAgICAgICAg
ICJGaWVsZCBcIiIKLSAgICAgICAgICAgICAgICAgICsgZmllbGQuZ2V0RnVsbE5hbWUoKQotICAg
ICAgICAgICAgICAgICAgKyAiXCIgaXMgbm90IGEgIgotICAgICAgICAgICAgICAgICAgKyAic2lu
Z2x1YXIgbWVzc2FnZSBmaWVsZCBhbmQgY2Fubm90IGhhdmUgc3ViLWZpZWxkcy4iKTsKLSAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgY2hpbGRQYXRoID0gcGF0
aC5pc0VtcHR5KCkgPyBlbnRyeS5nZXRLZXkoKSA6IHBhdGggKyAiLiIgKyBlbnRyeS5nZXRLZXko
KTsKLSAgICAgICAgbWVyZ2UoCi0gICAgICAgICAgICBlbnRyeS5nZXRWYWx1ZSgpLAotICAgICAg
ICAgICAgY2hpbGRQYXRoLAotICAgICAgICAgICAgKE1lc3NhZ2UpIHNvdXJjZS5nZXRGaWVsZChm
aWVsZCksCi0gICAgICAgICAgICBkZXN0aW5hdGlvbi5nZXRGaWVsZEJ1aWxkZXIoZmllbGQpLAot
ICAgICAgICAgICAgb3B0aW9ucyk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAg
aWYgKGZpZWxkLmlzUmVwZWF0ZWQoKSkgewotICAgICAgICBpZiAob3B0aW9ucy5yZXBsYWNlUmVw
ZWF0ZWRGaWVsZHMoKSkgewotICAgICAgICAgIGRlc3RpbmF0aW9uLnNldEZpZWxkKGZpZWxkLCBz
b3VyY2UuZ2V0RmllbGQoZmllbGQpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmb3Ig
KE9iamVjdCBlbGVtZW50IDogKExpc3QpIHNvdXJjZS5nZXRGaWVsZChmaWVsZCkpIHsKLSAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLmFkZFJlcGVhdGVkRmllbGQoZmllbGQsIGVsZW1lbnQpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGZpZWxkLmdl
dEphdmFUeXBlKCkgPT0gRmllbGREZXNjcmlwdG9yLkphdmFUeXBlLk1FU1NBR0UpIHsKLSAgICAg
ICAgICBpZiAob3B0aW9ucy5yZXBsYWNlTWVzc2FnZUZpZWxkcygpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXNvdXJjZS5oYXNGaWVsZChmaWVsZCkpIHsKLSAgICAgICAgICAgICAgZGVzdGluYXRpb24u
Y2xlYXJGaWVsZChmaWVsZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBk
ZXN0aW5hdGlvbi5zZXRGaWVsZChmaWVsZCwgc291cmNlLmdldEZpZWxkKGZpZWxkKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzb3VyY2UuaGFz
RmllbGQoZmllbGQpKSB7Ci0gICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmdldEZpZWxkQnVpbGRl
cihmaWVsZCkubWVyZ2VGcm9tKChNZXNzYWdlKSBzb3VyY2UuZ2V0RmllbGQoZmllbGQpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYg
KHNvdXJjZS5oYXNGaWVsZChmaWVsZCkgfHwgIW9wdGlvbnMucmVwbGFjZVByaW1pdGl2ZUZpZWxk
cygpKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXRGaWVsZChmaWVsZCwgc291cmNlLmdl
dEZpZWxkKGZpZWxkKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlc3RpbmF0
aW9uLmNsZWFyRmllbGQoZmllbGQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvRmllbGRNYXNrVXRpbC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3JjL21haW4v
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL3V0aWwvRmllbGRNYXNrVXRpbC5qYXZhCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Njk2MTUyMTBjNGZjZWViMjY1MTA3ZTFlYzBiYmQ5Y2Iz
ZDJmNGZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YS91dGlsL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsL0ZpZWxkTWFza1V0
aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmLnV0aWw7Ci0K
LWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24uYmFzZS5QcmVjb25kaXRpb25zLmNoZWNr
QXJndW1lbnQ7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5wcmltaXRpdmVzLkludHM7Ci1p
bXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5EZXNjcmlwdG9yOwotaW1wb3J0
IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yOwotaW1wb3J0
IGNvbS5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9i
dWYuSW50ZXJuYWw7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlOwotCi1pbXBv
cnQgamF2YS51dGlsLkFycmF5czsKLQotLyoqCi0gKiBVdGlsaXR5IGhlbHBlciBmdW5jdGlvbnMg
dG8gd29yayB3aXRoIHtAbGluayBjb20uZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza30uCi0gKi8K
LXB1YmxpYyBjbGFzcyBGaWVsZE1hc2tVdGlsIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIEZJRUxEX1BBVEhfU0VQQVJBVE9SID0gIiwiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgRklFTERfUEFUSF9TRVBBUkFUT1JfUkVHRVggPSAiLCI7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZyBGSUVMRF9TRVBBUkFUT1JfUkVHRVggPSAiXFwuIjsKLSAgCi0gIHByaXZh
dGUgRmllbGRNYXNrVXRpbCgpIHt9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnRzIGEgRmllbGRNYXNr
IHRvIGEgc3RyaW5nLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoRmll
bGRNYXNrIGZpZWxkTWFzaykgewotICAgIC8vIFRPRE8oeGlhb2ZlbmcpOiBDb25zaWRlciB1c2lu
ZyBjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLkpvaW5lciBoZXJlIGluc3RlYWQuCi0gICAgU3RyaW5n
QnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIGJvb2xlYW4gZmlyc3Qg
PSB0cnVlOwotICAgIGZvciAoU3RyaW5nIHZhbHVlIDogZmllbGRNYXNrLmdldFBhdGhzTGlzdCgp
KSB7Ci0gICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIElnbm9yZSBlbXB0
eSBwYXRocy4KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBpZiAoZmlyc3QpIHsK
LSAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoRklFTERfUEFUSF9TRVBBUkFUT1IpOwotICAgICAgfQotICAgICAgcmVzdWx0LmFwcGVu
ZCh2YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgfQotCi0g
IC8qKgotICAgKiBQYXJzZXMgZnJvbSBhIHN0cmluZyB0byBhIEZpZWxkTWFzay4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgRmllbGRNYXNrIGZyb21TdHJpbmcoU3RyaW5nIHZhbHVlKSB7Ci0gICAg
Ly8gVE9ETyh4aWFvZmVuZyk6IENvbnNpZGVyIHVzaW5nIGNvbS5nb29nbGUuY29tbW9uLmJhc2Uu
U3BsaXR0ZXIgaGVyZSBpbnN0ZWFkLgotICAgIHJldHVybiBmcm9tU3RyaW5nTGlzdCgKLSAgICAg
ICAgbnVsbCwgQXJyYXlzLmFzTGlzdCh2YWx1ZS5zcGxpdChGSUVMRF9QQVRIX1NFUEFSQVRPUl9S
RUdFWCkpKTsKLSAgfQotCi0gIC8qKgotICAgKiBQYXJzZXMgZnJvbSBhIHN0cmluZyB0byBhIEZp
ZWxkTWFzayBhbmQgdmFsaWRhdGVzIGFsbCBmaWVsZCBwYXRocy4KLSAgICogCi0gICAqIEB0aHJv
d3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIGFueSBvZiB0aGUgZmllbGQgcGF0aCBpcyBp
bnZhbGlkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBGaWVsZE1hc2sgZnJvbVN0cmluZyhDbGFz
czw/IGV4dGVuZHMgTWVzc2FnZT4gdHlwZSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgLy8gVE9ETyh4
aWFvZmVuZyk6IENvbnNpZGVyIHVzaW5nIGNvbS5nb29nbGUuY29tbW9uLmJhc2UuU3BsaXR0ZXIg
aGVyZSBpbnN0ZWFkLgotICAgIHJldHVybiBmcm9tU3RyaW5nTGlzdCgKLSAgICAgICAgdHlwZSwg
QXJyYXlzLmFzTGlzdCh2YWx1ZS5zcGxpdChGSUVMRF9QQVRIX1NFUEFSQVRPUl9SRUdFWCkpKTsK
LSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgRmllbGRNYXNrIGZvciBhIGxpc3Qgb2Yg
ZmllbGQgcGF0aHMgaW4gYSBjZXJ0YWluIHR5cGUuCi0gICAqCi0gICAqIEB0aHJvd3MgSWxsZWdh
bEFyZ3VtZW50RXhjZXB0aW9uIGlmIGFueSBvZiB0aGUgZmllbGQgcGF0aCBpcyBub3QgdmFsaWQu
Ci0gICAqLwotICAvLyBUT0RPKHhpYW9mZW5nKTogQ29uc2lkZXIgcmVuYW1pbmcgZnJvbVN0cmlu
Z3MoKQotICBwdWJsaWMgc3RhdGljIEZpZWxkTWFzayBmcm9tU3RyaW5nTGlzdCgKLSAgICAgIENs
YXNzPD8gZXh0ZW5kcyBNZXNzYWdlPiB0eXBlLCBJdGVyYWJsZTxTdHJpbmc+IHBhdGhzKSB7Ci0g
ICAgRmllbGRNYXNrLkJ1aWxkZXIgYnVpbGRlciA9IEZpZWxkTWFzay5uZXdCdWlsZGVyKCk7Ci0g
ICAgZm9yIChTdHJpbmcgcGF0aCA6IHBhdGhzKSB7Ci0gICAgICBpZiAocGF0aC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gSWdub3JlIGVtcHR5IGZpZWxkIHBhdGhzLgotICAgICAgICBjb250aW51
ZTsKLSAgICAgIH0KLSAgICAgIGlmICh0eXBlICE9IG51bGwgJiYgIWlzVmFsaWQodHlwZSwgcGF0
aCkpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAg
ICAgICAgIHBhdGggKyAiIGlzIG5vdCBhIHZhbGlkIHBhdGggZm9yICIgKyB0eXBlKTsKLSAgICAg
IH0KLSAgICAgIGJ1aWxkZXIuYWRkUGF0aHMocGF0aCk7Ci0gICAgfQotICAgIHJldHVybiBidWls
ZGVyLmJ1aWxkKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIEZpZWxkTWFzayBm
cm9tIHRoZSBwYXNzZWQgZmllbGQgbnVtYmVycy4KLSAgICoKLSAgICogQHRocm93cyBJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24gaWYgYW55IG9mIHRoZSBmaWVsZHMgYXJlIGludmFsaWQgZm9yIHRo
ZSBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBGaWVsZE1hc2sgZnJvbUZpZWxkTnVt
YmVycyhDbGFzczw/IGV4dGVuZHMgTWVzc2FnZT4gdHlwZSwgaW50Li4uIGZpZWxkTnVtYmVycykg
ewotICAgIHJldHVybiBmcm9tRmllbGROdW1iZXJzKHR5cGUsIEludHMuYXNMaXN0KGZpZWxkTnVt
YmVycykpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBGaWVsZE1hc2sgZnJvbSB0
aGUgcGFzc2VkIGZpZWxkIG51bWJlcnMuCi0gICAqCi0gICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3Vt
ZW50RXhjZXB0aW9uIGlmIGFueSBvZiB0aGUgZmllbGRzIGFyZSBpbnZhbGlkIGZvciB0aGUgbWVz
c2FnZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRmllbGRNYXNrIGZyb21GaWVsZE51bWJlcnMo
Ci0gICAgICBDbGFzczw/IGV4dGVuZHMgTWVzc2FnZT4gdHlwZSwgSXRlcmFibGU8SW50ZWdlcj4g
ZmllbGROdW1iZXJzKSB7Ci0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gSW50ZXJuYWwuZ2V0
RGVmYXVsdEluc3RhbmNlKHR5cGUpLmdldERlc2NyaXB0b3JGb3JUeXBlKCk7Ci0KLSAgICBGaWVs
ZE1hc2suQnVpbGRlciBidWlsZGVyID0gRmllbGRNYXNrLm5ld0J1aWxkZXIoKTsKLSAgICBmb3Ig
KEludGVnZXIgZmllbGROdW1iZXIgOiBmaWVsZE51bWJlcnMpIHsKLSAgICAgIEZpZWxkRGVzY3Jp
cHRvciBmaWVsZCA9IGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOdW1iZXIoZmllbGROdW1iZXIpOwot
ICAgICAgY2hlY2tBcmd1bWVudCgKLSAgICAgICAgICBmaWVsZCAhPSBudWxsLAotICAgICAgICAg
IFN0cmluZy5mb3JtYXQoIiVzIGlzIG5vdCBhIHZhbGlkIGZpZWxkIG51bWJlciBmb3IgJXMuIiwg
ZmllbGROdW1iZXIsIHR5cGUpKTsKLSAgICAgIGJ1aWxkZXIuYWRkUGF0aHMoZmllbGQuZ2V0TmFt
ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBDaGVja3Mgd2hldGhlciBwYXRocyBpbiBhIGdpdmVuIGZpZWxkcyBtYXNrIGFyZSB2YWxp
ZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkKENsYXNzPD8gZXh0ZW5k
cyBNZXNzYWdlPiB0eXBlLCBGaWVsZE1hc2sgZmllbGRNYXNrKSB7Ci0gICAgRGVzY3JpcHRvciBk
ZXNjcmlwdG9yID0KLSAgICAgICAgSW50ZXJuYWwuZ2V0RGVmYXVsdEluc3RhbmNlKHR5cGUpLmdl
dERlc2NyaXB0b3JGb3JUeXBlKCk7Ci0gICAgCi0gICAgcmV0dXJuIGlzVmFsaWQoZGVzY3JpcHRv
ciwgZmllbGRNYXNrKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIHBhdGhz
IGluIGEgZ2l2ZW4gZmllbGRzIG1hc2sgYXJlIHZhbGlkLgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyBib29sZWFuIGlzVmFsaWQoRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBGaWVsZE1hc2sgZmllbGRN
YXNrKSB7Ci0gICAgZm9yIChTdHJpbmcgcGF0aCA6IGZpZWxkTWFzay5nZXRQYXRoc0xpc3QoKSkg
ewotICAgICAgaWYgKCFpc1ZhbGlkKGRlc2NyaXB0b3IsIHBhdGgpKSB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioK
LSAgICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBmaWVsZCBwYXRoIGlzIHZhbGlkLgotICAgKi8K
LSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVmFsaWQoQ2xhc3M8PyBleHRlbmRzIE1lc3NhZ2U+
IHR5cGUsIFN0cmluZyBwYXRoKSB7Ci0gICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yID0KLSAgICAg
ICAgSW50ZXJuYWwuZ2V0RGVmYXVsdEluc3RhbmNlKHR5cGUpLmdldERlc2NyaXB0b3JGb3JUeXBl
KCk7Ci0gICAgCi0gICAgcmV0dXJuIGlzVmFsaWQoZGVzY3JpcHRvciwgcGF0aCk7Ci0gIH0KLQot
ICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgcGF0aHMgaW4gYSBnaXZlbiBmaWVsZHMgbWFzayBh
cmUgdmFsaWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWYWxpZChEZXNjcmlw
dG9yIGRlc2NyaXB0b3IsIFN0cmluZyBwYXRoKSB7Ci0gICAgU3RyaW5nW10gcGFydHMgPSBwYXRo
LnNwbGl0KEZJRUxEX1NFUEFSQVRPUl9SRUdFWCk7Ci0gICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAw
KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZvciAoU3RyaW5nIG5hbWUgOiBw
YXJ0cykgewotICAgICAgaWYgKGRlc2NyaXB0b3IgPT0gbnVsbCkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgICBGaWVsZERlc2NyaXB0b3IgZmllbGQgPSBkZXNjcmlwdG9y
LmZpbmRGaWVsZEJ5TmFtZShuYW1lKTsKLSAgICAgIGlmIChmaWVsZCA9PSBudWxsKSB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmICghZmllbGQuaXNSZXBlYXRlZCgp
Ci0gICAgICAgICAgJiYgZmllbGQuZ2V0SmF2YVR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3IuSmF2
YVR5cGUuTUVTU0FHRSkgewotICAgICAgICBkZXNjcmlwdG9yID0gZmllbGQuZ2V0TWVzc2FnZVR5
cGUoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc2NyaXB0b3IgPSBudWxsOwotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnZlcnRz
IGEgRmllbGRNYXNrIHRvIGl0cyBjYW5vbmljYWwgZm9ybS4gSW4gdGhlIGNhbm9uaWNhbCBmb3Jt
IG9mIGEKLSAgICogRmllbGRNYXNrLCBhbGwgZmllbGQgcGF0aHMgYXJlIHNvcnRlZCBhbHBoYWJl
dGljYWxseSBhbmQgcmVkdW5kYW50IGZpZWxkCi0gICAqIHBhdGhzIGFyZSBtb3ZlZC4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgRmllbGRNYXNrIG5vcm1hbGl6ZShGaWVsZE1hc2sgbWFzaykgewot
ICAgIHJldHVybiBuZXcgRmllbGRNYXNrVHJlZShtYXNrKS50b0ZpZWxkTWFzaygpOwotICB9Ci0K
LSAgLyoqCi0gICAqIENyZWF0ZXMgYSB1bmlvbiBvZiB0d28gb3IgbW9yZSBGaWVsZE1hc2tzLgot
ICAgKi8KLSAgcHVibGljIHN0YXRpYyBGaWVsZE1hc2sgdW5pb24oCi0gICAgICBGaWVsZE1hc2sg
Zmlyc3RNYXNrLCBGaWVsZE1hc2sgc2Vjb25kTWFzaywgRmllbGRNYXNrLi4uIG90aGVyTWFza3Mp
IHsKLSAgICBGaWVsZE1hc2tUcmVlIG1hc2tUcmVlID0gbmV3IEZpZWxkTWFza1RyZWUoZmlyc3RN
YXNrKS5tZXJnZUZyb21GaWVsZE1hc2soc2Vjb25kTWFzayk7Ci0gICAgZm9yIChGaWVsZE1hc2sg
bWFzayA6IG90aGVyTWFza3MpIHsKLSAgICAgIG1hc2tUcmVlLm1lcmdlRnJvbUZpZWxkTWFzayht
YXNrKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hc2tUcmVlLnRvRmllbGRNYXNrKCk7Ci0gIH0KLQot
ICAvKioKLSAgICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3byBGaWVsZE1hc2tz
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBGaWVsZE1hc2sgaW50ZXJzZWN0aW9uKEZpZWxkTWFz
ayBtYXNrMSwgRmllbGRNYXNrIG1hc2syKSB7Ci0gICAgRmllbGRNYXNrVHJlZSB0cmVlID0gbmV3
IEZpZWxkTWFza1RyZWUobWFzazEpOwotICAgIEZpZWxkTWFza1RyZWUgcmVzdWx0ID0gbmV3IEZp
ZWxkTWFza1RyZWUoKTsKLSAgICBmb3IgKFN0cmluZyBwYXRoIDogbWFzazIuZ2V0UGF0aHNMaXN0
KCkpIHsKLSAgICAgIHRyZWUuaW50ZXJzZWN0RmllbGRQYXRoKHBhdGgsIHJlc3VsdCk7Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQudG9GaWVsZE1hc2soKTsKLSAgfQotCi0gIC8qKgotICAgKiBP
cHRpb25zIHRvIGN1c3RvbWl6ZSBtZXJnaW5nIGJlaGF2aW9yLgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBmaW5hbCBjbGFzcyBNZXJnZU9wdGlvbnMgewotICAgIHByaXZhdGUgYm9vbGVhbiByZXBs
YWNlTWVzc2FnZUZpZWxkcyA9IGZhbHNlOwotICAgIHByaXZhdGUgYm9vbGVhbiByZXBsYWNlUmVw
ZWF0ZWRGaWVsZHMgPSBmYWxzZTsKLSAgICAvLyBUT0RPKGIvMjgyNzcxMzcpOiBjaGFuZ2UgdGhl
IGRlZmF1bHQgYmVoYXZpb3IgdG8gYWx3YXlzIHJlcGxhY2UgcHJpbWl0aXZlIGZpZWxkcyBhZnRl
cgotICAgIC8vIGZpeGluZyBhbGwgZmFpbGluZyBUQVAgdGVzdHMuCi0gICAgcHJpdmF0ZSBib29s
ZWFuIHJlcGxhY2VQcmltaXRpdmVGaWVsZHMgPSBmYWxzZTsKLQotICAgIC8qKgotICAgICAqIFdo
ZXRoZXIgdG8gcmVwbGFjZSBtZXNzYWdlIGZpZWxkcyAoaS5lLiwgZGlzY2FyZCBleGlzdGluZyBj
b250ZW50IGluCi0gICAgICogZGVzdGluYXRpb24gbWVzc2FnZSBmaWVsZHMpIHdoZW4gbWVyZ2lu
Zy4KLSAgICAgKiBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIG1lcmdlIHRoZSBzb3VyY2UgbWVzc2Fn
ZSBmaWVsZCBpbnRvIHRoZQotICAgICAqIGRlc3RpbmF0aW9uIG1lc3NhZ2UgZmllbGQuCi0gICAg
ICovIAotICAgIHB1YmxpYyBib29sZWFuIHJlcGxhY2VNZXNzYWdlRmllbGRzKCkgewotICAgICAg
cmV0dXJuIHJlcGxhY2VNZXNzYWdlRmllbGRzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdo
ZXRoZXIgdG8gcmVwbGFjZSByZXBlYXRlZCBmaWVsZHMgKGkuZS4sIGRpc2NhcmQgZXhpc3Rpbmcg
Y29udGVudCBpbgotICAgICAqIGRlc3RpbmF0aW9uIHJlcGVhdGVkIGZpZWxkcykgd2hlbiBtZXJn
aW5nLgotICAgICAqIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gYXBwZW5kIGVsZW1lbnRzIGZyb20g
c291cmNlIHJlcGVhdGVkIGZpZWxkIHRvIHRoZQotICAgICAqIGRlc3RpbmF0aW9uIHJlcGVhdGVk
IGZpZWxkLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHJlcGxhY2VSZXBlYXRlZEZpZWxk
cygpIHsKLSAgICAgIHJldHVybiByZXBsYWNlUmVwZWF0ZWRGaWVsZHM7Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogV2hldGhlciB0byByZXBsYWNlIHByaW1pdGl2ZSAobm9uLXJlcGVhdGVkIGFu
ZCBub24tbWVzc2FnZSkgZmllbGRzIGluCi0gICAgICogZGVzdGluYXRpb24gbWVzc2FnZSBmaWVs
ZHMgd2l0aCB0aGUgc291cmNlIHByaW1pdGl2ZSBmaWVsZHMgKGkuZS4sIGlmIHRoZQotICAgICAq
IGZpZWxkIGlzIHNldCBpbiB0aGUgc291cmNlLCB0aGUgdmFsdWUgaXMgY29waWVkIHRvIHRoZQot
ICAgICAqIGRlc3RpbmF0aW9uOyBpZiB0aGUgZmllbGQgaXMgdW5zZXQgaW4gdGhlIHNvdXJjZSwg
dGhlIGZpZWxkIGlzIGNsZWFyZWQKLSAgICAgKiBmcm9tIHRoZSBkZXN0aW5hdGlvbikgd2hlbiBt
ZXJnaW5nLgotICAgICAqCi0gICAgICogPHA+RGVmYXVsdCBiZWhhdmlvciBpcyB0byBhbHdheXMg
c2V0IHRoZSB2YWx1ZSBvZiB0aGUgc291cmNlIHByaW1pdGl2ZQotICAgICAqIGZpZWxkIHRvIHRo
ZSBkZXN0aW5hdGlvbiBwcmltaXRpdmUgZmllbGQsIGFuZCBpZiB0aGUgc291cmNlIGZpZWxkIGlz
Ci0gICAgICogdW5zZXQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBzb3VyY2UgZmllbGQgaXMg
Y29waWVkIHRvIHRoZQotICAgICAqIGRlc3RpbmF0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBi
b29sZWFuIHJlcGxhY2VQcmltaXRpdmVGaWVsZHMoKSB7Ci0gICAgICByZXR1cm4gcmVwbGFjZVBy
aW1pdGl2ZUZpZWxkczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlTWVzc2Fn
ZUZpZWxkcyhib29sZWFuIHZhbHVlKSB7Ci0gICAgICByZXBsYWNlTWVzc2FnZUZpZWxkcyA9IHZh
bHVlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlcGxhY2VSZXBlYXRlZEZpZWxkcyhi
b29sZWFuIHZhbHVlKSB7Ci0gICAgICByZXBsYWNlUmVwZWF0ZWRGaWVsZHMgPSB2YWx1ZTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXBsYWNlUHJpbWl0aXZlRmllbGRzKGJvb2xlYW4g
dmFsdWUpIHsKLSAgICAgIHJlcGxhY2VQcmltaXRpdmVGaWVsZHMgPSB2YWx1ZTsKLSAgICB9Ci0g
IH0KLQotICAvKioKLSAgICogTWVyZ2VzIGZpZWxkcyBzcGVjaWZpZWQgYnkgYSBGaWVsZE1hc2sg
ZnJvbSBvbmUgbWVzc2FnZSB0byBhbm90aGVyIHdpdGggdGhlCi0gICAqIHNwZWNpZmllZCBtZXJn
ZSBvcHRpb25zLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIG1lcmdlKEZpZWxkTWFzayBt
YXNrLCBNZXNzYWdlIHNvdXJjZSwKLSAgICAgIE1lc3NhZ2UuQnVpbGRlciBkZXN0aW5hdGlvbiwg
TWVyZ2VPcHRpb25zIG9wdGlvbnMpIHsKLSAgICBuZXcgRmllbGRNYXNrVHJlZShtYXNrKS5tZXJn
ZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBvcHRpb25zKTsKLSAgfQotCi0gIC8qKgotICAgKiBNZXJn
ZXMgZmllbGRzIHNwZWNpZmllZCBieSBhIEZpZWxkTWFzayBmcm9tIG9uZSBtZXNzYWdlIHRvIGFu
b3RoZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWVyZ2UoRmllbGRNYXNrIG1hc2ss
IE1lc3NhZ2Ugc291cmNlLAotICAgICAgTWVzc2FnZS5CdWlsZGVyIGRlc3RpbmF0aW9uKSB7Ci0g
ICAgbWVyZ2UobWFzaywgc291cmNlLCBkZXN0aW5hdGlvbiwgbmV3IE1lcmdlT3B0aW9ucygpKTsK
LSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL3V0aWwvSnNvbkZvcm1hdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3JjL21haW4vamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL3V0aWwvSnNvbkZvcm1hdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3NmYzNDM3YTZiN2E0ZTYyOGUzMzI2OWU5Y2JmN2U3Mzc1NmRlYjg4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS91dGlsL3NyYy9t
YWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsL0pzb25Gb3JtYXQuamF2YQorKysgL2Rl
di9udWxsCkBAIC0xLDE2NzggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi51dGlsOwotCi1pbXBvcnQgY29tLmdv
b2dsZS5jb21tb24uaW8uQmFzZUVuY29kaW5nOwotaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Hc29u
OwotaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uQnVpbGRlcjsKLWltcG9ydCBjb20uZ29vZ2xl
Lmdzb24uSnNvbkFycmF5OwotaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Kc29uRWxlbWVudDsKLWlt
cG9ydCBjb20uZ29vZ2xlLmdzb24uSnNvbk51bGw7Ci1pbXBvcnQgY29tLmdvb2dsZS5nc29uLkpz
b25PYmplY3Q7Ci1pbXBvcnQgY29tLmdvb2dsZS5nc29uLkpzb25QYXJzZXI7Ci1pbXBvcnQgY29t
Lmdvb2dsZS5nc29uLkpzb25QcmltaXRpdmU7Ci1pbXBvcnQgY29tLmdvb2dsZS5nc29uLnN0cmVh
bS5Kc29uUmVhZGVyOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuQW55OwotaW1wb3J0IGNv
bS5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYu
Qnl0ZVN0cmluZzsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWU7Ci1pbXBv
cnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5EZXNjcmlwdG9yOwotaW1wb3J0IGNv
bS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRW51bURlc2NyaXB0b3I7Ci1pbXBvcnQgY29t
Lmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5FbnVtVmFsdWVEZXNjcmlwdG9yOwotaW1wb3J0
IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yOwotaW1wb3J0
IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQg
Y29tLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3Rv
YnVmLkR1cmF0aW9uOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRHluYW1pY01lc3NhZ2U7
Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2s7Ci1pbXBvcnQgY29tLmdvb2ds
ZS5wcm90b2J1Zi5GbG9hdFZhbHVlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuSW50MzJW
YWx1ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWU7Ci1pbXBvcnQgY29t
Lmdvb2dsZS5wcm90b2J1Zi5JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci1pbXBvcnQg
Y29tLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1
Zi5NZXNzYWdlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9yQnVpbGRlcjsK
LWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlOwotaW1wb3J0IGNvbS5nb29n
bGUucHJvdG9idWYuU3RydWN0OwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuVGltZXN0YW1w
OwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuVUludDMyVmFsdWU7Ci1pbXBvcnQgY29tLmdv
b2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlZh
bHVlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRl
cjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLm1hdGguQmlnRGVj
aW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnRleHQuUGFy
c2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEu
dXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRp
bC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWlt
cG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7
Ci0KLS8qKgotICogVXRpbGl0eSBjbGFzc2VzIHRvIGNvbnZlcnQgcHJvdG9idWYgbWVzc2FnZXMg
dG8vZnJvbSBKU09OIGZvcm1hdC4gVGhlIEpTT04KLSAqIGZvcm1hdCBmb2xsb3dzIFByb3RvMyBK
U09OIHNwZWNpZmljYXRpb24gYW5kIG9ubHkgcHJvdG8zIGZlYXR1cmVzIGFyZQotICogc3VwcG9y
dGVkLiBQcm90bzIgb25seSBmZWF0dXJlcyAoZS5nLiwgZXh0ZW5zaW9ucyBhbmQgdW5rbm93biBm
aWVsZHMpIHdpbGwKLSAqIGJlIGRpc2NhcmRlZCBpbiB0aGUgY29udmVyc2lvbi4gVGhhdCBpcywg
d2hlbiBjb252ZXJ0aW5nIHByb3RvMiBtZXNzYWdlcwotICogdG8gSlNPTiBmb3JtYXQsIGV4dGVu
c2lvbnMgYW5kIHVua25vd24gZmllbGRzIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiB0aGV5Ci0gKiBk
byBub3QgZXhpc3QuIFRoaXMgYXBwbGllcyB0byBwcm90bzIgbWVzc2FnZXMgZW1iZWRkZWQgaW4g
cHJvdG8zIG1lc3NhZ2VzCi0gKiBhcyB3ZWxsLgotICovCi1wdWJsaWMgY2xhc3MgSnNvbkZvcm1h
dCB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPQotICAgICAgTG9nZ2Vy
LmdldExvZ2dlcihKc29uRm9ybWF0LmNsYXNzLmdldE5hbWUoKSk7Ci0KLSAgcHJpdmF0ZSBKc29u
Rm9ybWF0KCkge30KLSAgCi0gIC8qKgotICAgKiBDcmVhdGVzIGEge0BsaW5rIFByaW50ZXJ9IHdp
dGggZGVmYXVsdCBjb25maWd1cmF0aW9ucy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgUHJpbnRl
ciBwcmludGVyKCkgewotICAgIHJldHVybiBuZXcgUHJpbnRlcihUeXBlUmVnaXN0cnkuZ2V0RW1w
dHlUeXBlUmVnaXN0cnkoKSwgZmFsc2UsIGZhbHNlKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEEg
UHJpbnRlciBjb252ZXJ0cyBwcm90b2J1ZiBtZXNzYWdlIHRvIEpTT04gZm9ybWF0LgotICAgKi8K
LSAgcHVibGljIHN0YXRpYyBjbGFzcyBQcmludGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIFR5cGVS
ZWdpc3RyeSByZWdpc3RyeTsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaW5jbHVkaW5nRGVm
YXVsdFZhbHVlRmllbGRzOwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBwcmVzZXJ2aW5nUHJv
dG9GaWVsZE5hbWVzOwotCi0gICAgcHJpdmF0ZSBQcmludGVyKAotICAgICAgICBUeXBlUmVnaXN0
cnkgcmVnaXN0cnksCi0gICAgICAgIGJvb2xlYW4gaW5jbHVkaW5nRGVmYXVsdFZhbHVlRmllbGRz
LAotICAgICAgICBib29sZWFuIHByZXNlcnZpbmdQcm90b0ZpZWxkTmFtZXMpIHsKLSAgICAgIHRo
aXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLSAgICAgIHRoaXMuaW5jbHVkaW5nRGVmYXVsdFZhbHVl
RmllbGRzID0gaW5jbHVkaW5nRGVmYXVsdFZhbHVlRmllbGRzOwotICAgICAgdGhpcy5wcmVzZXJ2
aW5nUHJvdG9GaWVsZE5hbWVzID0gcHJlc2VydmluZ1Byb3RvRmllbGROYW1lczsKLSAgICB9Ci0g
ICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUHJpbnRlcn0gdXNpbmcg
dGhlIGdpdmVuIHJlZ2lzdHJ5LiBUaGUgbmV3IFByaW50ZXIKLSAgICAgKiBjbG9uZXMgYWxsIG90
aGVyIGNvbmZpZ3VyYXRpb25zIGZyb20gdGhlIGN1cnJlbnQge0BsaW5rIFByaW50ZXJ9LgotICAg
ICAqIAotICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIGEgcmVnaXN0
cnkgaXMgYWxyZWFkeSBzZXQuCi0gICAgICovCi0gICAgcHVibGljIFByaW50ZXIgdXNpbmdUeXBl
UmVnaXN0cnkoVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7Ci0gICAgICBpZiAodGhpcy5yZWdpc3Ry
eSAhPSBUeXBlUmVnaXN0cnkuZ2V0RW1wdHlUeXBlUmVnaXN0cnkoKSkgewotICAgICAgICB0aHJv
dyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJPbmx5IG9uZSByZWdpc3RyeSBpcyBhbGxv
d2VkLiIpOwotICAgICAgfQotICAgICAgcmV0dXJuIG5ldyBQcmludGVyKHJlZ2lzdHJ5LCBpbmNs
dWRpbmdEZWZhdWx0VmFsdWVGaWVsZHMsIHByZXNlcnZpbmdQcm90b0ZpZWxkTmFtZXMpOwotICAg
IH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFByaW50ZXJ9IHRoYXQg
d2lsbCBhbHNvIHByaW50IGZpZWxkcyBzZXQgdG8gdGhlaXIKLSAgICAgKiBkZWZhdWx0cy4gRW1w
dHkgcmVwZWF0ZWQgZmllbGRzIGFuZCBtYXAgZmllbGRzIHdpbGwgYmUgcHJpbnRlZCBhcyB3ZWxs
LgotICAgICAqIFRoZSBuZXcgUHJpbnRlciBjbG9uZXMgYWxsIG90aGVyIGNvbmZpZ3VyYXRpb25z
IGZyb20gdGhlIGN1cnJlbnQKLSAgICAgKiB7QGxpbmsgUHJpbnRlcn0uCi0gICAgICovCi0gICAg
cHVibGljIFByaW50ZXIgaW5jbHVkaW5nRGVmYXVsdFZhbHVlRmllbGRzKCkgewotICAgICAgcmV0
dXJuIG5ldyBQcmludGVyKHJlZ2lzdHJ5LCB0cnVlLCBwcmVzZXJ2aW5nUHJvdG9GaWVsZE5hbWVz
KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBQcmludGVy
fSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBvcmlnaW5hbCBwcm90bwotICAgICAqIGZp
ZWxkIG5hbWVzIGFzIGRlZmluZWQgaW4gdGhlIC5wcm90byBmaWxlIHJhdGhlciB0aGFuIGNvbnZl
cnRpbmcgdGhlbSB0bwotICAgICAqIGxvd2VyQ2FtZWxDYXNlLiBUaGUgbmV3IFByaW50ZXIgY2xv
bmVzIGFsbCBvdGhlciBjb25maWd1cmF0aW9ucyBmcm9tIHRoZQotICAgICAqIGN1cnJlbnQge0Bs
aW5rIFByaW50ZXJ9LgotICAgICAqLwotICAgIHB1YmxpYyBQcmludGVyIHByZXNlcnZpbmdQcm90
b0ZpZWxkTmFtZXMoKSB7Ci0gICAgICByZXR1cm4gbmV3IFByaW50ZXIocmVnaXN0cnksIGluY2x1
ZGluZ0RlZmF1bHRWYWx1ZUZpZWxkcywgdHJ1ZSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAg
ICAqIENvbnZlcnRzIGEgcHJvdG9idWYgbWVzc2FnZSB0byBKU09OIGZvcm1hdC4KLSAgICAgKiAK
LSAgICAgKiBAdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBpZiB0aGUgbWVz
c2FnZSBjb250YWlucyBBbnkgdHlwZXMKLSAgICAgKiAgICAgICAgIHRoYXQgY2FuJ3QgYmUgcmVz
b2x2ZWQuCi0gICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiB3cml0aW5nIHRvIHRoZSBvdXRw
dXQgZmFpbHMuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYXBwZW5kVG8oTWVzc2FnZU9yQnVp
bGRlciBtZXNzYWdlLCBBcHBlbmRhYmxlIG91dHB1dCkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICAgIC8vIFRPRE8oeGlhb2ZlbmcpOiBJbnZlc3RpZ2F0ZSB0aGUgYWxsb2NhdGlv
biBvdmVyaGVhZCBhbmQgb3B0aW1pemUgZm9yCi0gICAgICAvLyBtb2JpbGUuCi0gICAgICBuZXcg
UHJpbnRlckltcGwocmVnaXN0cnksIGluY2x1ZGluZ0RlZmF1bHRWYWx1ZUZpZWxkcywgcHJlc2Vy
dmluZ1Byb3RvRmllbGROYW1lcywgb3V0cHV0KQotICAgICAgICAgIC5wcmludChtZXNzYWdlKTsK
LSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0cyBhIHByb3RvYnVmIG1lc3NhZ2UgdG8g
SlNPTiBmb3JtYXQuIFRocm93cyBleGNlcHRpb25zIGlmIHRoZXJlCi0gICAgICogYXJlIHVua25v
d24gQW55IHR5cGVzIGluIHRoZSBtZXNzYWdlLiAKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5n
IHByaW50KE1lc3NhZ2VPckJ1aWxkZXIgbWVzc2FnZSkKLSAgICAgICAgdGhyb3dzIEludmFsaWRQ
cm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICBhcHBlbmRUbyhtZXNz
YWdlLCBidWlsZGVyKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICAg
IH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRo
cm93IGU7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIFVuZXhw
ZWN0ZWQgSU9FeGNlcHRpb24uCi0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRp
b24oZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSB7QGxp
bmsgUGFyc2VyfSB3aXRoIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBz
dGF0aWMgUGFyc2VyIHBhcnNlcigpIHsKLSAgICByZXR1cm4gbmV3IFBhcnNlcihUeXBlUmVnaXN0
cnkuZ2V0RW1wdHlUeXBlUmVnaXN0cnkoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBBIFBhcnNl
ciBwYXJzZXMgSlNPTiB0byBwcm90b2J1ZiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyBjbGFzcyBQYXJzZXIgewotICAgIHByaXZhdGUgZmluYWwgVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5
OwotICAgIAotICAgIHByaXZhdGUgUGFyc2VyKFR5cGVSZWdpc3RyeSByZWdpc3RyeSkgewotICAg
ICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OyAKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAg
ICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUGFyc2VyfSB1c2luZyB0aGUgZ2l2ZW4gcmVnaXN0cnku
IFRoZSBuZXcgUGFyc2VyCi0gICAgICogY2xvbmVzIGFsbCBvdGhlciBjb25maWd1cmF0aW9ucyBm
cm9tIHRoaXMgUGFyc2VyLgotICAgICAqIAotICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uIGlmIGEgcmVnaXN0cnkgaXMgYWxyZWFkeSBzZXQuCi0gICAgICovCi0gICAgcHVi
bGljIFBhcnNlciB1c2luZ1R5cGVSZWdpc3RyeShUeXBlUmVnaXN0cnkgcmVnaXN0cnkpIHsKLSAg
ICAgIGlmICh0aGlzLnJlZ2lzdHJ5ICE9IFR5cGVSZWdpc3RyeS5nZXRFbXB0eVR5cGVSZWdpc3Ry
eSgpKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9ubHkg
b25lIHJlZ2lzdHJ5IGlzIGFsbG93ZWQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV3IFBh
cnNlcihyZWdpc3RyeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFBhcnNlcyBmcm9t
IEpTT04gaW50byBhIHByb3RvYnVmIG1lc3NhZ2UuCi0gICAgICogCi0gICAgICogQHRocm93cyBJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gaWYgdGhlIGlucHV0IGlzIG5vdCB2YWxpZCBK
U09OCi0gICAgICogICAgICAgICBmb3JtYXQgb3IgdGhlcmUgYXJlIHVua25vd24gZmllbGRzIGlu
IHRoZSBpbnB1dC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBtZXJnZShTdHJpbmcganNvbiwg
TWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xC
dWZmZXJFeGNlcHRpb24gewotICAgICAgLy8gVE9ETyh4aWFvZmVuZyk6IEludmVzdGlnYXRlIHRo
ZSBhbGxvY2F0aW9uIG92ZXJoZWFkIGFuZCBvcHRpbWl6ZSBmb3IKLSAgICAgIC8vIG1vYmlsZS4K
LSAgICAgIG5ldyBQYXJzZXJJbXBsKHJlZ2lzdHJ5KS5tZXJnZShqc29uLCBidWlsZGVyKTsKLSAg
ICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUGFyc2VzIGZyb20gSlNPTiBpbnRvIGEgcHJvdG9i
dWYgbWVzc2FnZS4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZl
ckV4Y2VwdGlvbiBpZiB0aGUgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04KLSAgICAgKiAgICAgICAg
IGZvcm1hdCBvciB0aGVyZSBhcmUgdW5rbm93biBmaWVsZHMgaW4gdGhlIGlucHV0LgotICAgICAq
IEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCB0aHJvd3MuCi0g
ICAgICovCi0gICAgcHVibGljIHZvaWQgbWVyZ2UoUmVhZGVyIGpzb24sIE1lc3NhZ2UuQnVpbGRl
ciBidWlsZGVyKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgLy8gVE9ETyh4
aWFvZmVuZyk6IEludmVzdGlnYXRlIHRoZSBhbGxvY2F0aW9uIG92ZXJoZWFkIGFuZCBvcHRpbWl6
ZSBmb3IKLSAgICAgIC8vIG1vYmlsZS4KLSAgICAgIG5ldyBQYXJzZXJJbXBsKHJlZ2lzdHJ5KS5t
ZXJnZShqc29uLCBidWlsZGVyKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQSBUeXBlUmVn
aXN0cnkgaXMgdXNlZCB0byByZXNvbHZlIEFueSBtZXNzYWdlcyBpbiB0aGUgSlNPTiBjb252ZXJz
aW9uLgotICAgKiBZb3UgbXVzdCBwcm92aWRlIGEgVHlwZVJlZ2lzdHJ5IGNvbnRhaW5pbmcgYWxs
IG1lc3NhZ2UgdHlwZXMgdXNlZCBpbgotICAgKiBBbnkgbWVzc2FnZSBmaWVsZHMsIG9yIHRoZSBK
U09OIGNvbnZlcnNpb24gd2lsbCBmYWlsIGJlY2F1c2UgZGF0YQotICAgKiBpbiBBbnkgbWVzc2Fn
ZSBmaWVsZHMgaXMgdW5yZWNvZ25pemFibGUuIFlvdSBkb24ndCBuZWVkIHRvIHN1cHBseSBhCi0g
ICAqIFR5cGVSZWdpc3RyeSBpZiB5b3UgZG9uJ3QgdXNlIEFueSBtZXNzYWdlIGZpZWxkcy4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHlwZVJlZ2lzdHJ5IHsKLSAgICBwcml2YXRlIHN0
YXRpYyBjbGFzcyBFbXB0eVR5cGVSZWdpc3RyeUhvbGRlciB7Ci0gICAgICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBUeXBlUmVnaXN0cnkgRU1QVFkgPSBuZXcgVHlwZVJlZ2lzdHJ5KAotICAgICAgICAg
IENvbGxlY3Rpb25zLjxTdHJpbmcsIERlc2NyaXB0b3I+ZW1wdHlNYXAoKSk7Ci0gICAgfQotCi0g
ICAgcHVibGljIHN0YXRpYyBUeXBlUmVnaXN0cnkgZ2V0RW1wdHlUeXBlUmVnaXN0cnkoKSB7Ci0g
ICAgICByZXR1cm4gRW1wdHlUeXBlUmVnaXN0cnlIb2xkZXIuRU1QVFk7Ci0gICAgfQotCi0gICAg
cHVibGljIHN0YXRpYyBCdWlsZGVyIG5ld0J1aWxkZXIoKSB7Ci0gICAgICByZXR1cm4gbmV3IEJ1
aWxkZXIoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGaW5kIGEgdHlwZSBieSBpdHMgZnVs
bCBuYW1lLiBSZXR1cm5zIG51bGwgaWYgaXQgY2Fubm90IGJlIGZvdW5kIGluCi0gICAgICogdGhp
cyB7QGxpbmsgVHlwZVJlZ2lzdHJ5fS4KLSAgICAgKi8KLSAgICBwdWJsaWMgRGVzY3JpcHRvciBm
aW5kKFN0cmluZyBuYW1lKSB7Ci0gICAgICByZXR1cm4gdHlwZXMuZ2V0KG5hbWUpOwotICAgIH0K
LQotICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgRGVzY3JpcHRvcj4gdHlwZXM7Ci0KLSAg
ICBwcml2YXRlIFR5cGVSZWdpc3RyeShNYXA8U3RyaW5nLCBEZXNjcmlwdG9yPiB0eXBlcykgewot
ICAgICAgdGhpcy50eXBlcyA9IHR5cGVzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEEgQnVp
bGRlciBpcyB1c2VkIHRvIGJ1aWxkIHtAbGluayBUeXBlUmVnaXN0cnl9LgotICAgICAqLwotICAg
IHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciB7Ci0gICAgICBwcml2YXRlIEJ1aWxkZXIoKSB7
fQotCi0gICAgICAvKioKLSAgICAgICAqIEFkZHMgYSBtZXNzYWdlIHR5cGUgYW5kIGFsbCB0eXBl
cyBkZWZpbmVkIGluIHRoZSBzYW1lIC5wcm90byBmaWxlIGFzCi0gICAgICAgKiB3ZWxsIGFzIGFs
bCB0cmFuc2l0aXZlbHkgaW1wb3J0ZWQgLnByb3RvIGZpbGVzIHRvIHRoaXMge0BsaW5rIEJ1aWxk
ZXJ9LgotICAgICAgICovCi0gICAgICBwdWJsaWMgQnVpbGRlciBhZGQoRGVzY3JpcHRvciBtZXNz
YWdlVHlwZSkgewotICAgICAgICBpZiAodHlwZXMgPT0gbnVsbCkgewotICAgICAgICAgIHRocm93
IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJBIFR5cGVSZWdpc3Ry
eS5CdWlsZXIgY2FuIG9ubHkgYmUgdXNlZCBvbmNlLiIpOwotICAgICAgICB9Ci0gICAgICAgIGFk
ZEZpbGUobWVzc2FnZVR5cGUuZ2V0RmlsZSgpKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICB9Ci0KLSAgICAgIC8qKgotICAgICAgICogQWRkcyBtZXNzYWdlIHR5cGVzIGFuZCBhbGwgdHlw
ZXMgZGVmaW5lZCBpbiB0aGUgc2FtZSAucHJvdG8gZmlsZSBhcwotICAgICAgICogd2VsbCBhcyBh
bGwgdHJhbnNpdGl2ZWx5IGltcG9ydGVkIC5wcm90byBmaWxlcyB0byB0aGlzIHtAbGluayBCdWls
ZGVyfS4KLSAgICAgICAqLwotICAgICAgcHVibGljIEJ1aWxkZXIgYWRkKEl0ZXJhYmxlPERlc2Ny
aXB0b3I+IG1lc3NhZ2VUeXBlcykgewotICAgICAgICBpZiAodHlwZXMgPT0gbnVsbCkgewotICAg
ICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJB
IFR5cGVSZWdpc3RyeS5CdWlsZXIgY2FuIG9ubHkgYmUgdXNlZCBvbmNlLiIpOwotICAgICAgICB9
Ci0gICAgICAgIGZvciAoRGVzY3JpcHRvciB0eXBlIDogbWVzc2FnZVR5cGVzKSB7Ci0gICAgICAg
ICAgYWRkRmlsZSh0eXBlLmdldEZpbGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICB9Ci0KLSAgICAgIC8qKgotICAgICAgICogQnVpbGRzIGEge0BsaW5rIFR5cGVS
ZWdpc3RyeX0uIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlIGZvcgotICAgICAg
ICogb25lIEJ1aWxkZXIuCi0gICAgICAgKi8KLSAgICAgIHB1YmxpYyBUeXBlUmVnaXN0cnkgYnVp
bGQoKSB7Ci0gICAgICAgIFR5cGVSZWdpc3RyeSByZXN1bHQgPSBuZXcgVHlwZVJlZ2lzdHJ5KHR5
cGVzKTsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBidWlsdCB7QGxpbmsgVHlwZVJlZ2lzdHJ5
fSBpcyBpbW11dGFibGUuCi0gICAgICAgIHR5cGVzID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgIH0KLQotICAgICAgcHJpdmF0ZSB2b2lkIGFkZEZpbGUoRmlsZURlc2NyaXB0
b3IgZmlsZSkgewotICAgICAgICAvLyBTa2lwIHRoZSBmaWxlIGlmIGl0J3MgYWxyZWFkeSBhZGRl
ZC4KLSAgICAgICAgaWYgKCFmaWxlcy5hZGQoZmlsZS5nZXRGdWxsTmFtZSgpKSkgewotICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmb3IgKEZpbGVEZXNjcmlwdG9yIGRlcGVu
ZGVuY3kgOiBmaWxlLmdldERlcGVuZGVuY2llcygpKSB7Ci0gICAgICAgICAgYWRkRmlsZShkZXBl
bmRlbmN5KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKERlc2NyaXB0b3IgbWVzc2FnZSA6IGZp
bGUuZ2V0TWVzc2FnZVR5cGVzKCkpIHsKLSAgICAgICAgICBhZGRNZXNzYWdlKG1lc3NhZ2UpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHByaXZhdGUgdm9pZCBhZGRNZXNzYWdlKERlc2Ny
aXB0b3IgbWVzc2FnZSkgewotICAgICAgICBmb3IgKERlc2NyaXB0b3IgbmVzdGVkVHlwZSA6IG1l
c3NhZ2UuZ2V0TmVzdGVkVHlwZXMoKSkgewotICAgICAgICAgIGFkZE1lc3NhZ2UobmVzdGVkVHlw
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZXMuY29udGFpbnNLZXkobWVzc2FnZS5n
ZXRGdWxsTmFtZSgpKSkgewotICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJUeXBlICIgKyBtZXNz
YWdlLmdldEZ1bGxOYW1lKCkKLSAgICAgICAgICAgICAgKyAiIGlzIGFkZGVkIG11bHRpcGxlIHRp
bWVzLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHR5cGVzLnB1
dChtZXNzYWdlLmdldEZ1bGxOYW1lKCksIG1lc3NhZ2UpOwotICAgICAgfQotCi0gICAgICBwcml2
YXRlIGZpbmFsIFNldDxTdHJpbmc+IGZpbGVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAg
ICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBEZXNjcmlwdG9yPiB0eXBlcyA9Ci0gICAgICAgICAgbmV3
IEhhc2hNYXA8U3RyaW5nLCBEZXNjcmlwdG9yPigpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAg
KiBBIFRleHRHZW5lcmF0b3IgYWRkcyBpbmRlbnRhdGlvbiB3aGVuIHdyaXRpbmcgZm9ybWF0dGVk
IHRleHQuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBUZXh0R2VuZXJhdG9y
IHsKLSAgICBwcml2YXRlIGZpbmFsIEFwcGVuZGFibGUgb3V0cHV0OwotICAgIHByaXZhdGUgZmlu
YWwgU3RyaW5nQnVpbGRlciBpbmRlbnQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIHByaXZh
dGUgYm9vbGVhbiBhdFN0YXJ0T2ZMaW5lID0gdHJ1ZTsKLQotICAgIHByaXZhdGUgVGV4dEdlbmVy
YXRvcihmaW5hbCBBcHBlbmRhYmxlIG91dHB1dCkgewotICAgICAgdGhpcy5vdXRwdXQgPSBvdXRw
dXQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5kZW50IHRleHQgYnkgdHdvIHNwYWNlcy4g
IEFmdGVyIGNhbGxpbmcgSW5kZW50KCksIHR3byBzcGFjZXMgd2lsbCBiZQotICAgICAqIGluc2Vy
dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIG9mIHRleHQuICBJbmRlbnQoKSBtYXkg
YmUgY2FsbGVkCi0gICAgICogbXVsdGlwbGUgdGltZXMgdG8gcHJvZHVjZSBkZWVwZXIgaW5kZW50
cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBpbmRlbnQoKSB7Ci0gICAgICBpbmRlbnQuYXBw
ZW5kKCIgICIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlZHVjZXMgdGhlIGN1cnJlbnQg
aW5kZW50IGxldmVsIGJ5IHR3byBzcGFjZXMsIG9yIGNyYXNoZXMgaWYgdGhlIGluZGVudAotICAg
ICAqIGxldmVsIGlzIHplcm8uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb3V0ZGVudCgpIHsK
LSAgICAgIGZpbmFsIGludCBsZW5ndGggPSBpbmRlbnQubGVuZ3RoKCk7Ci0gICAgICBpZiAobGVu
Z3RoIDwgMikgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAot
ICAgICAgICAgICAgIiBPdXRkZW50KCkgd2l0aG91dCBtYXRjaGluZyBJbmRlbnQoKS4iKTsKLSAg
ICAgIH0KLSAgICAgIGluZGVudC5kZWxldGUobGVuZ3RoIC0gMiwgbGVuZ3RoKTsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBQcmludCB0ZXh0IHRvIHRoZSBvdXRwdXQgc3RyZWFtLgotICAgICAq
LwotICAgIHB1YmxpYyB2b2lkIHByaW50KGZpbmFsIENoYXJTZXF1ZW5jZSB0ZXh0KSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgICAgZmluYWwgaW50IHNpemUgPSB0ZXh0Lmxlbmd0aCgpOwotICAg
ICAgaW50IHBvcyA9IDA7Ci0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
Ci0gICAgICAgIGlmICh0ZXh0LmNoYXJBdChpKSA9PSAnXG4nKSB7Ci0gICAgICAgICAgd3JpdGUo
dGV4dC5zdWJTZXF1ZW5jZShwb3MsIGkgKyAxKSk7Ci0gICAgICAgICAgcG9zID0gaSArIDE7Ci0g
ICAgICAgICAgYXRTdGFydE9mTGluZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAg
IHdyaXRlKHRleHQuc3ViU2VxdWVuY2UocG9zLCBzaXplKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0
ZSB2b2lkIHdyaXRlKGZpbmFsIENoYXJTZXF1ZW5jZSBkYXRhKSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgICAgaWYgKGRhdGEubGVuZ3RoKCkgPT0gMCkgewotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0gICAgICBpZiAoYXRTdGFydE9mTGluZSkgewotICAgICAgICBhdFN0YXJ0T2ZMaW5lID0g
ZmFsc2U7Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoaW5kZW50KTsKLSAgICAgIH0KLSAgICAgIG91
dHB1dC5hcHBlbmQoZGF0YSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEEgUHJpbnRlciBj
b252ZXJ0cyBwcm90b2J1ZiBtZXNzYWdlcyB0byBKU09OIGZvcm1hdC4KLSAgICovCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGNsYXNzIFByaW50ZXJJbXBsIHsKLSAgICBwcml2YXRlIGZpbmFsIFR5
cGVSZWdpc3RyeSByZWdpc3RyeTsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaW5jbHVkaW5n
RGVmYXVsdFZhbHVlRmllbGRzOwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBwcmVzZXJ2aW5n
UHJvdG9GaWVsZE5hbWVzOwotICAgIHByaXZhdGUgZmluYWwgVGV4dEdlbmVyYXRvciBnZW5lcmF0
b3I7Ci0gICAgLy8gV2UgdXNlIEdzb24gdG8gaGVscCBoYW5kbGUgc3RyaW5nIGVzY2FwZXMuCi0g
ICAgcHJpdmF0ZSBmaW5hbCBHc29uIGdzb247Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBH
c29uSG9sZGVyIHsKLSAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdzb24gREVGQVVMVF9HU09O
ID0gbmV3IEdzb25CdWlsZGVyKCkuZGlzYWJsZUh0bWxFc2NhcGluZygpLmNyZWF0ZSgpOwotICAg
IH0KLQotICAgIFByaW50ZXJJbXBsKAotICAgICAgICBUeXBlUmVnaXN0cnkgcmVnaXN0cnksCi0g
ICAgICAgIGJvb2xlYW4gaW5jbHVkaW5nRGVmYXVsdFZhbHVlRmllbGRzLAotICAgICAgICBib29s
ZWFuIHByZXNlcnZpbmdQcm90b0ZpZWxkTmFtZXMsCi0gICAgICAgIEFwcGVuZGFibGUganNvbk91
dHB1dCkgewotICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotICAgICAgdGhpcy5pbmNs
dWRpbmdEZWZhdWx0VmFsdWVGaWVsZHMgPSBpbmNsdWRpbmdEZWZhdWx0VmFsdWVGaWVsZHM7Ci0g
ICAgICB0aGlzLnByZXNlcnZpbmdQcm90b0ZpZWxkTmFtZXMgPSBwcmVzZXJ2aW5nUHJvdG9GaWVs
ZE5hbWVzOwotICAgICAgdGhpcy5nZW5lcmF0b3IgPSBuZXcgVGV4dEdlbmVyYXRvcihqc29uT3V0
cHV0KTsKLSAgICAgIHRoaXMuZ3NvbiA9IEdzb25Ib2xkZXIuREVGQVVMVF9HU09OOwotICAgIH0K
LQotICAgIHZvaWQgcHJpbnQoTWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlKSB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgICAgV2VsbEtub3duVHlwZVByaW50ZXIgc3BlY2lhbFByaW50ZXIgPSB3ZWxs
S25vd25UeXBlUHJpbnRlcnMuZ2V0KAotICAgICAgICAgIG1lc3NhZ2UuZ2V0RGVzY3JpcHRvckZv
clR5cGUoKS5nZXRGdWxsTmFtZSgpKTsKLSAgICAgIGlmIChzcGVjaWFsUHJpbnRlciAhPSBudWxs
KSB7Ci0gICAgICAgIHNwZWNpYWxQcmludGVyLnByaW50KHRoaXMsIG1lc3NhZ2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBwcmludChtZXNzYWdlLCBudWxsKTsKLSAgICB9Ci0g
ICAgCi0gICAgcHJpdmF0ZSBpbnRlcmZhY2UgV2VsbEtub3duVHlwZVByaW50ZXIgewotICAgICAg
dm9pZCBwcmludChQcmludGVySW1wbCBwcmludGVyLCBNZXNzYWdlT3JCdWlsZGVyIG1lc3NhZ2Up
Ci0gICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBXZWxsS25vd25UeXBlUHJpbnRlcj4KLSAgICB3ZWxs
S25vd25UeXBlUHJpbnRlcnMgPSBidWlsZFdlbGxLbm93blR5cGVQcmludGVycygpOwotICAgIAot
ICAgIHByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIFdlbGxLbm93blR5cGVQcmludGVyPgotICAg
IGJ1aWxkV2VsbEtub3duVHlwZVByaW50ZXJzKCkgewotICAgICAgTWFwPFN0cmluZywgV2VsbEtu
b3duVHlwZVByaW50ZXI+IHByaW50ZXJzID0KLSAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcs
IFdlbGxLbm93blR5cGVQcmludGVyPigpOwotICAgICAgLy8gU3BlY2lhbC1jYXNlIEFueS4KLSAg
ICAgIHByaW50ZXJzLnB1dChBbnkuZ2V0RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1lKCksCi0gICAg
ICAgICAgbmV3IFdlbGxLbm93blR5cGVQcmludGVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAg
ICAgICAgcHVibGljIHZvaWQgcHJpbnQoUHJpbnRlckltcGwgcHJpbnRlciwgTWVzc2FnZU9yQnVp
bGRlciBtZXNzYWdlKQotICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAg
ICBwcmludGVyLnByaW50QW55KG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAg
IC8vIFNwZWNpYWwtY2FzZSB3cmFwcGVyIHR5cGVzLgotICAgICAgV2VsbEtub3duVHlwZVByaW50
ZXIgd3JhcHBlcnNQcmludGVyID0gbmV3IFdlbGxLbm93blR5cGVQcmludGVyKCkgewotICAgICAg
ICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcHJpbnQoUHJpbnRlckltcGwgcHJpbnRl
ciwgTWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlKQotICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICAgICAgICBwcmludGVyLnByaW50V3JhcHBlcihtZXNzYWdlKTsKLSAgICAgICAg
ICAKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIHByaW50ZXJzLnB1dChCb29sVmFsdWUuZ2V0
RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1lKCksIHdyYXBwZXJzUHJpbnRlcik7Ci0gICAgICBwcmlu
dGVycy5wdXQoSW50MzJWYWx1ZS5nZXREZXNjcmlwdG9yKCkuZ2V0RnVsbE5hbWUoKSwgd3JhcHBl
cnNQcmludGVyKTsKLSAgICAgIHByaW50ZXJzLnB1dChVSW50MzJWYWx1ZS5nZXREZXNjcmlwdG9y
KCkuZ2V0RnVsbE5hbWUoKSwgd3JhcHBlcnNQcmludGVyKTsKLSAgICAgIHByaW50ZXJzLnB1dChJ
bnQ2NFZhbHVlLmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLCB3cmFwcGVyc1ByaW50ZXIp
OwotICAgICAgcHJpbnRlcnMucHV0KFVJbnQ2NFZhbHVlLmdldERlc2NyaXB0b3IoKS5nZXRGdWxs
TmFtZSgpLCB3cmFwcGVyc1ByaW50ZXIpOwotICAgICAgcHJpbnRlcnMucHV0KFN0cmluZ1ZhbHVl
LmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLCB3cmFwcGVyc1ByaW50ZXIpOwotICAgICAg
cHJpbnRlcnMucHV0KEJ5dGVzVmFsdWUuZ2V0RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1lKCksIHdy
YXBwZXJzUHJpbnRlcik7Ci0gICAgICBwcmludGVycy5wdXQoRmxvYXRWYWx1ZS5nZXREZXNjcmlw
dG9yKCkuZ2V0RnVsbE5hbWUoKSwgd3JhcHBlcnNQcmludGVyKTsKLSAgICAgIHByaW50ZXJzLnB1
dChEb3VibGVWYWx1ZS5nZXREZXNjcmlwdG9yKCkuZ2V0RnVsbE5hbWUoKSwgd3JhcHBlcnNQcmlu
dGVyKTsKLSAgICAgIC8vIFNwZWNpYWwtY2FzZSBUaW1lc3RhbXAuCi0gICAgICBwcmludGVycy5w
dXQoVGltZXN0YW1wLmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLAotICAgICAgICAgIG5l
dyBXZWxsS25vd25UeXBlUHJpbnRlcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1
YmxpYyB2b2lkIHByaW50KFByaW50ZXJJbXBsIHByaW50ZXIsIE1lc3NhZ2VPckJ1aWxkZXIgbWVz
c2FnZSkKLSAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcHJpbnRl
ci5wcmludFRpbWVzdGFtcChtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAv
LyBTcGVjaWFsLWNhc2UgRHVyYXRpb24uCi0gICAgICBwcmludGVycy5wdXQoRHVyYXRpb24uZ2V0
RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1lKCksCi0gICAgICAgICAgbmV3IFdlbGxLbm93blR5cGVQ
cmludGVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcHJpbnQo
UHJpbnRlckltcGwgcHJpbnRlciwgTWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlKQotICAgICAgICAg
ICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICBwcmludGVyLnByaW50RHVyYXRpb24o
bWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgLy8gU3BlY2lhbC1jYXNlIEZp
ZWxkTWFzay4KLSAgICAgIHByaW50ZXJzLnB1dChGaWVsZE1hc2suZ2V0RGVzY3JpcHRvcigpLmdl
dEZ1bGxOYW1lKCksCi0gICAgICAgICAgbmV3IFdlbGxLbm93blR5cGVQcmludGVyKCkgewotICAg
ICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcHJpbnQoUHJpbnRlckltcGwgcHJp
bnRlciwgTWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlKQotICAgICAgICAgICAgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICAgICAgICBwcmludGVyLnByaW50RmllbGRNYXNrKG1lc3NhZ2UpOwotICAg
ICAgICB9Ci0gICAgICB9KTsKLSAgICAgIC8vIFNwZWNpYWwtY2FzZSBTdHJ1Y3QuCi0gICAgICBw
cmludGVycy5wdXQoU3RydWN0LmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLAotICAgICAg
ICAgIG5ldyBXZWxsS25vd25UeXBlUHJpbnRlcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAg
ICAgIHB1YmxpYyB2b2lkIHByaW50KFByaW50ZXJJbXBsIHByaW50ZXIsIE1lc3NhZ2VPckJ1aWxk
ZXIgbWVzc2FnZSkKLSAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAg
cHJpbnRlci5wcmludFN0cnVjdChtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAg
ICAvLyBTcGVjaWFsLWNhc2UgVmFsdWUuCi0gICAgICBwcmludGVycy5wdXQoVmFsdWUuZ2V0RGVz
Y3JpcHRvcigpLmdldEZ1bGxOYW1lKCksCi0gICAgICAgICAgbmV3IFdlbGxLbm93blR5cGVQcmlu
dGVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcHJpbnQoUHJp
bnRlckltcGwgcHJpbnRlciwgTWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlKQotICAgICAgICAgICAg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICBwcmludGVyLnByaW50VmFsdWUobWVzc2Fn
ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgLy8gU3BlY2lhbC1jYXNlIExpc3RWYWx1
ZS4KLSAgICAgIHByaW50ZXJzLnB1dChMaXN0VmFsdWUuZ2V0RGVzY3JpcHRvcigpLmdldEZ1bGxO
YW1lKCksCi0gICAgICAgICAgbmV3IFdlbGxLbm93blR5cGVQcmludGVyKCkgewotICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcHJpbnQoUHJpbnRlckltcGwgcHJpbnRlciwg
TWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlKQotICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICAgICAgICBwcmludGVyLnByaW50TGlzdFZhbHVlKG1lc3NhZ2UpOwotICAgICAgICB9
Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiBwcmludGVyczsKLSAgICB9Ci0gICAgCi0gICAgLyoq
IFByaW50cyBnb29nbGUucHJvdG9idWYuQW55ICovCi0gICAgcHJpdmF0ZSB2b2lkIHByaW50QW55
KE1lc3NhZ2VPckJ1aWxkZXIgbWVzc2FnZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIERl
c2NyaXB0b3IgZGVzY3JpcHRvciA9IG1lc3NhZ2UuZ2V0RGVzY3JpcHRvckZvclR5cGUoKTsKLSAg
ICAgIEZpZWxkRGVzY3JpcHRvciB0eXBlVXJsRmllbGQgPSBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5
TmFtZSgidHlwZV91cmwiKTsKLSAgICAgIEZpZWxkRGVzY3JpcHRvciB2YWx1ZUZpZWxkID0gZGVz
Y3JpcHRvci5maW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gICAgICAvLyBWYWxpZGF0ZXMgdHlw
ZSBvZiB0aGUgbWVzc2FnZS4gTm90ZSB0aGF0IHdlIGNhbid0IGp1c3QgY2FzdCB0aGUgbWVzc2Fn
ZQotICAgICAgLy8gdG8gY29tLmdvb2dsZS5wcm90b2J1Zi5BbnkgYmVjYXVzZSBpdCBtaWdodCBi
ZSBhIER5bmFtaWNNZXNzYWdlLiAKLSAgICAgIGlmICh0eXBlVXJsRmllbGQgPT0gbnVsbCB8fCB2
YWx1ZUZpZWxkID09IG51bGwKLSAgICAgICAgICB8fCB0eXBlVXJsRmllbGQuZ2V0VHlwZSgpICE9
IEZpZWxkRGVzY3JpcHRvci5UeXBlLlNUUklORwotICAgICAgICAgIHx8IHZhbHVlRmllbGQuZ2V0
VHlwZSgpICE9IEZpZWxkRGVzY3JpcHRvci5UeXBlLkJZVEVTKSB7Ci0gICAgICAgIHRocm93IG5l
dyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIkludmFsaWQgQW55IHR5cGUuIik7Ci0g
ICAgICB9Ci0gICAgICBTdHJpbmcgdHlwZVVybCA9IChTdHJpbmcpIG1lc3NhZ2UuZ2V0RmllbGQo
dHlwZVVybEZpZWxkKTsKLSAgICAgIFN0cmluZyB0eXBlTmFtZSA9IGdldFR5cGVOYW1lKHR5cGVV
cmwpOwotICAgICAgRGVzY3JpcHRvciB0eXBlID0gcmVnaXN0cnkuZmluZCh0eXBlTmFtZSk7Ci0g
ICAgICBpZiAodHlwZSA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAiQ2Fubm90IGZpbmQgdHlwZSBmb3IgdXJs
OiAiICsgdHlwZVVybCk7Ci0gICAgICB9Ci0gICAgICBCeXRlU3RyaW5nIGNvbnRlbnQgPSAoQnl0
ZVN0cmluZykgbWVzc2FnZS5nZXRGaWVsZCh2YWx1ZUZpZWxkKTsKLSAgICAgIE1lc3NhZ2UgY29u
dGVudE1lc3NhZ2UgPSBEeW5hbWljTWVzc2FnZS5nZXREZWZhdWx0SW5zdGFuY2UodHlwZSkKLSAg
ICAgICAgICAuZ2V0UGFyc2VyRm9yVHlwZSgpLnBhcnNlRnJvbShjb250ZW50KTsKLSAgICAgIFdl
bGxLbm93blR5cGVQcmludGVyIHByaW50ZXIgPSB3ZWxsS25vd25UeXBlUHJpbnRlcnMuZ2V0KHR5
cGVOYW1lKTsKLSAgICAgIGlmIChwcmludGVyICE9IG51bGwpIHsKLSAgICAgICAgLy8gSWYgdGhl
IHR5cGUgaXMgb25lIG9mIHRoZSB3ZWxsLWtub3duIHR5cGVzLCB3ZSB1c2UgYSBzcGVjaWFsCi0g
ICAgICAgIC8vIGZvcm1hdHRpbmcuCi0gICAgICAgIGdlbmVyYXRvci5wcmludCgie1xuIik7Ci0g
ICAgICAgIGdlbmVyYXRvci5pbmRlbnQoKTsKLSAgICAgICAgZ2VuZXJhdG9yLnByaW50KCJcIkB0
eXBlXCI6ICIgKyBnc29uLnRvSnNvbih0eXBlVXJsKSArICIsXG4iKTsKLSAgICAgICAgZ2VuZXJh
dG9yLnByaW50KCJcInZhbHVlXCI6ICIpOwotICAgICAgICBwcmludGVyLnByaW50KHRoaXMsIGNv
bnRlbnRNZXNzYWdlKTsKLSAgICAgICAgZ2VuZXJhdG9yLnByaW50KCJcbiIpOwotICAgICAgICBn
ZW5lcmF0b3Iub3V0ZGVudCgpOwotICAgICAgICBnZW5lcmF0b3IucHJpbnQoIn0iKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIFByaW50IHRoZSBjb250ZW50IG1lc3NhZ2UgaW5zdGVhZCAo
d2l0aCBhICJAdHlwZSIgZmllbGQgYWRkZWQpLgotICAgICAgICBwcmludChjb250ZW50TWVzc2Fn
ZSwgdHlwZVVybCk7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKiBQcmludHMgd3JhcHBl
ciB0eXBlcyAoZS5nLiwgZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUpICovCi0gICAgcHJpdmF0
ZSB2b2lkIHByaW50V3JhcHBlcihNZXNzYWdlT3JCdWlsZGVyIG1lc3NhZ2UpIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBtZXNzYWdlLmdldERlc2Ny
aXB0b3JGb3JUeXBlKCk7Ci0gICAgICBGaWVsZERlc2NyaXB0b3IgdmFsdWVGaWVsZCA9IGRlc2Ny
aXB0b3IuZmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICAgICAgaWYgKHZhbHVlRmllbGQgPT0g
bnVsbCkgewotICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
KCJJbnZhbGlkIFdyYXBwZXIgdHlwZS4iKTsKLSAgICAgIH0KLSAgICAgIC8vIFdoZW4gZm9ybWF0
dGluZyB3cmFwcGVyIHR5cGVzLCB3ZSBqdXN0IHByaW50IGl0cyB2YWx1ZSBmaWVsZCBpbnN0ZWFk
IG9mCi0gICAgICAvLyB0aGUgd2hvbGUgbWVzc2FnZS4KLSAgICAgIHByaW50U2luZ2xlRmllbGRW
YWx1ZSh2YWx1ZUZpZWxkLCBtZXNzYWdlLmdldEZpZWxkKHZhbHVlRmllbGQpKTsKLSAgICB9Ci0g
ICAgCi0gICAgcHJpdmF0ZSBCeXRlU3RyaW5nIHRvQnl0ZVN0cmluZyhNZXNzYWdlT3JCdWlsZGVy
IG1lc3NhZ2UpIHsKLSAgICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgTWVzc2FnZSkgewotICAg
ICAgICByZXR1cm4gKChNZXNzYWdlKSBtZXNzYWdlKS50b0J5dGVTdHJpbmcoKTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJldHVybiAoKE1lc3NhZ2UuQnVpbGRlcikgbWVzc2FnZSkuYnVpbGQo
KS50b0J5dGVTdHJpbmcoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyoqIFByaW50cyBn
b29nbGUucHJvdG9idWYuVGltZXN0YW1wICovCi0gICAgcHJpdmF0ZSB2b2lkIHByaW50VGltZXN0
YW1wKE1lc3NhZ2VPckJ1aWxkZXIgbWVzc2FnZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAg
IFRpbWVzdGFtcCB2YWx1ZSA9IFRpbWVzdGFtcC5wYXJzZUZyb20odG9CeXRlU3RyaW5nKG1lc3Nh
Z2UpKTsKLSAgICAgIGdlbmVyYXRvci5wcmludCgiXCIiICsgVGltZVV0aWwudG9TdHJpbmcodmFs
dWUpICsgIlwiIik7Ci0gICAgfQotICAgIAotICAgIC8qKiBQcmludHMgZ29vZ2xlLnByb3RvYnVm
LkR1cmF0aW9uICovCi0gICAgcHJpdmF0ZSB2b2lkIHByaW50RHVyYXRpb24oTWVzc2FnZU9yQnVp
bGRlciBtZXNzYWdlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgRHVyYXRpb24gdmFsdWUg
PSBEdXJhdGlvbi5wYXJzZUZyb20odG9CeXRlU3RyaW5nKG1lc3NhZ2UpKTsKLSAgICAgIGdlbmVy
YXRvci5wcmludCgiXCIiICsgVGltZVV0aWwudG9TdHJpbmcodmFsdWUpICsgIlwiIik7Ci0gICAg
ICAKLSAgICB9Ci0gICAgCi0gICAgLyoqIFByaW50cyBnb29nbGUucHJvdG9idWYuRmllbGRNYXNr
ICovCi0gICAgcHJpdmF0ZSB2b2lkIHByaW50RmllbGRNYXNrKE1lc3NhZ2VPckJ1aWxkZXIgbWVz
c2FnZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIEZpZWxkTWFzayB2YWx1ZSA9IEZpZWxk
TWFzay5wYXJzZUZyb20odG9CeXRlU3RyaW5nKG1lc3NhZ2UpKTsKLSAgICAgIGdlbmVyYXRvci5w
cmludCgiXCIiICsgRmllbGRNYXNrVXRpbC50b1N0cmluZyh2YWx1ZSkgKyAiXCIiKTsKLSAgICB9
Ci0gICAgCi0gICAgLyoqIFByaW50cyBnb29nbGUucHJvdG9idWYuU3RydWN0ICovCi0gICAgcHJp
dmF0ZSB2b2lkIHByaW50U3RydWN0KE1lc3NhZ2VPckJ1aWxkZXIgbWVzc2FnZSkgdGhyb3dzIElP
RXhjZXB0aW9uIHsKLSAgICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IG1lc3NhZ2UuZ2V0RGVz
Y3JpcHRvckZvclR5cGUoKTsKLSAgICAgIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA9IGRlc2NyaXB0
b3IuZmluZEZpZWxkQnlOYW1lKCJmaWVsZHMiKTsKLSAgICAgIGlmIChmaWVsZCA9PSBudWxsKSB7
Ci0gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIkludmFs
aWQgU3RydWN0IHR5cGUuIik7Ci0gICAgICB9Ci0gICAgICAvLyBTdHJ1Y3QgaXMgZm9ybWF0dGVk
IGFzIGEgbWFwIG9iamVjdC4KLSAgICAgIHByaW50TWFwRmllbGRWYWx1ZShmaWVsZCwgbWVzc2Fn
ZS5nZXRGaWVsZChmaWVsZCkpOwotICAgIH0KLSAgICAKLSAgICAvKiogUHJpbnRzIGdvb2dsZS5w
cm90b2J1Zi5WYWx1ZSAqLwotICAgIHByaXZhdGUgdm9pZCBwcmludFZhbHVlKE1lc3NhZ2VPckJ1
aWxkZXIgbWVzc2FnZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIC8vIEZvciBhIFZhbHVl
IG1lc3NhZ2UsIG9ubHkgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpcyBmb3JtYXR0ZWQuCi0gICAg
ICBNYXA8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGZpZWxkcyA9IG1lc3NhZ2UuZ2V0QWxsRmll
bGRzKCk7Ci0gICAgICBpZiAoZmllbGRzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBObyB2YWx1
ZSBzZXQuCi0gICAgICAgIGdlbmVyYXRvci5wcmludCgibnVsbCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgICAvLyBBIFZhbHVlIG1lc3NhZ2UgY2FuIG9ubHkgaGF2ZSBhdCBtb3N0
IG9uZSBmaWVsZCBzZXQgKGl0IG9ubHkgY29udGFpbnMKLSAgICAgIC8vIGFuIG9uZW9mKS4KLSAg
ICAgIGlmIChmaWVsZHMuc2l6ZSgpICE9IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQ
cm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiSW52YWxpZCBWYWx1ZSB0eXBlLiIpOwotICAgICAgfQot
ICAgICAgZm9yIChNYXAuRW50cnk8RmllbGREZXNjcmlwdG9yLCBPYmplY3Q+IGVudHJ5IDogZmll
bGRzLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgcHJpbnRTaW5nbGVGaWVsZFZhbHVlKGVudHJ5Lmdl
dEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyoq
IFByaW50cyBnb29nbGUucHJvdG9idWYuTGlzdFZhbHVlICovCi0gICAgcHJpdmF0ZSB2b2lkIHBy
aW50TGlzdFZhbHVlKE1lc3NhZ2VPckJ1aWxkZXIgbWVzc2FnZSkgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IG1lc3NhZ2UuZ2V0RGVzY3JpcHRvckZv
clR5cGUoKTsKLSAgICAgIEZpZWxkRGVzY3JpcHRvciBmaWVsZCA9IGRlc2NyaXB0b3IuZmluZEZp
ZWxkQnlOYW1lKCJ2YWx1ZXMiKTsKLSAgICAgIGlmIChmaWVsZCA9PSBudWxsKSB7Ci0gICAgICAg
IHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIkludmFsaWQgTGlzdFZh
bHVlIHR5cGUuIik7Ci0gICAgICB9Ci0gICAgICBwcmludFJlcGVhdGVkRmllbGRWYWx1ZShmaWVs
ZCwgbWVzc2FnZS5nZXRGaWVsZChmaWVsZCkpOwotICAgIH0KLQotICAgIC8qKiBQcmludHMgYSBy
ZWd1bGFyIG1lc3NhZ2Ugd2l0aCBhbiBvcHRpb25hbCB0eXBlIFVSTC4gKi8KLSAgICBwcml2YXRl
IHZvaWQgcHJpbnQoTWVzc2FnZU9yQnVpbGRlciBtZXNzYWdlLCBTdHJpbmcgdHlwZVVybCkKLSAg
ICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIGdlbmVyYXRvci5wcmludCgie1xuIik7
Ci0gICAgICBnZW5lcmF0b3IuaW5kZW50KCk7Ci0KLSAgICAgIGJvb2xlYW4gcHJpbnRlZEZpZWxk
ID0gZmFsc2U7Ci0gICAgICBpZiAodHlwZVVybCAhPSBudWxsKSB7Ci0gICAgICAgIGdlbmVyYXRv
ci5wcmludCgiXCJAdHlwZVwiOiAiICsgZ3Nvbi50b0pzb24odHlwZVVybCkpOwotICAgICAgICBw
cmludGVkRmllbGQgPSB0cnVlOwotICAgICAgfQotICAgICAgTWFwPEZpZWxkRGVzY3JpcHRvciwg
T2JqZWN0PiBmaWVsZHNUb1ByaW50ID0gbnVsbDsKLSAgICAgIGlmIChpbmNsdWRpbmdEZWZhdWx0
VmFsdWVGaWVsZHMpIHsKLSAgICAgICAgZmllbGRzVG9QcmludCA9IG5ldyBUcmVlTWFwPEZpZWxk
RGVzY3JpcHRvciwgT2JqZWN0PigpOwotICAgICAgICBmb3IgKEZpZWxkRGVzY3JpcHRvciBmaWVs
ZCA6IG1lc3NhZ2UuZ2V0RGVzY3JpcHRvckZvclR5cGUoKS5nZXRGaWVsZHMoKSkgewotICAgICAg
ICAgIGlmIChmaWVsZC5pc09wdGlvbmFsKCkKLSAgICAgICAgICAgICAgJiYgZmllbGQuZ2V0SmF2
YVR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3IuSmF2YVR5cGUuTUVTU0FHRQotICAgICAgICAgICAg
ICAmJiAhbWVzc2FnZS5oYXNGaWVsZChmaWVsZCkpIHsKLSAgICAgICAgICAgIC8vIEFsd2F5cyBz
a2lwIGVtcHR5IG9wdGlvbmFsIG1lc3NhZ2UgZmllbGRzLiBJZiBub3Qgd2Ugd2lsbCByZWN1cnNl
IGluZGVmaW5pdGVseSBpZgotICAgICAgICAgICAgLy8gYSBtZXNzYWdlIGhhcyBpdHNlbGYgYXMg
YSBzdWItZmllbGQuCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgZmllbGRzVG9QcmludC5wdXQoZmllbGQsIG1lc3NhZ2UuZ2V0RmllbGQoZmllbGQpKTsKLSAg
ICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmllbGRzVG9QcmludCA9IG1lc3NhZ2Uu
Z2V0QWxsRmllbGRzKCk7Ci0gICAgICB9Ci0gICAgICBmb3IgKE1hcC5FbnRyeTxGaWVsZERlc2Ny
aXB0b3IsIE9iamVjdD4gZmllbGQgOiBmaWVsZHNUb1ByaW50LmVudHJ5U2V0KCkpIHsKLSAgICAg
ICAgaWYgKHByaW50ZWRGaWVsZCkgewotICAgICAgICAgIC8vIEFkZCBsaW5lLWVuZGluZ3MgZm9y
IHRoZSBwcmV2aW91cyBmaWVsZC4KLSAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIixcbiIpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHByaW50ZWRGaWVsZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcHJpbnRGaWVsZChmaWVsZC5nZXRLZXkoKSwgZmllbGQuZ2V0VmFsdWUoKSk7
Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8vIEFkZCBsaW5lLWVuZGluZ3MgZm9yIHRoZSBsYXN0
IGZpZWxkLgotICAgICAgaWYgKHByaW50ZWRGaWVsZCkgewotICAgICAgICBnZW5lcmF0b3IucHJp
bnQoIlxuIik7Ci0gICAgICB9Ci0gICAgICBnZW5lcmF0b3Iub3V0ZGVudCgpOwotICAgICAgZ2Vu
ZXJhdG9yLnByaW50KCJ9Iik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHByaW50RmllbGQo
RmllbGREZXNjcmlwdG9yIGZpZWxkLCBPYmplY3QgdmFsdWUpCi0gICAgICAgIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgICBpZiAocHJlc2VydmluZ1Byb3RvRmllbGROYW1lcykgewotICAgICAg
ICBnZW5lcmF0b3IucHJpbnQoIlwiIiArIGZpZWxkLmdldE5hbWUoKSArICJcIjogIik7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICBnZW5lcmF0b3IucHJpbnQoIlwiIiArIGZpZWxkLmdldEpzb25O
YW1lKCkgKyAiXCI6ICIpOwotICAgICAgfQotICAgICAgaWYgKGZpZWxkLmlzTWFwRmllbGQoKSkg
ewotICAgICAgICBwcmludE1hcEZpZWxkVmFsdWUoZmllbGQsIHZhbHVlKTsKLSAgICAgIH0gZWxz
ZSBpZiAoZmllbGQuaXNSZXBlYXRlZCgpKSB7Ci0gICAgICAgIHByaW50UmVwZWF0ZWRGaWVsZFZh
bHVlKGZpZWxkLCB2YWx1ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludFNpbmdsZUZp
ZWxkVmFsdWUoZmllbGQsIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgQFN1cHBy
ZXNzV2FybmluZ3MoInJhd3R5cGVzIikKLSAgICBwcml2YXRlIHZvaWQgcHJpbnRSZXBlYXRlZEZp
ZWxkVmFsdWUoRmllbGREZXNjcmlwdG9yIGZpZWxkLCBPYmplY3QgdmFsdWUpCi0gICAgICAgIHRo
cm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBnZW5lcmF0b3IucHJpbnQoIlsiKTsKLSAgICAgIGJv
b2xlYW4gcHJpbnRlZEVsZW1lbnQgPSBmYWxzZTsKLSAgICAgIGZvciAoT2JqZWN0IGVsZW1lbnQg
OiAoTGlzdCkgdmFsdWUpIHsKLSAgICAgICAgaWYgKHByaW50ZWRFbGVtZW50KSB7Ci0gICAgICAg
ICAgZ2VuZXJhdG9yLnByaW50KCIsICIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHBy
aW50ZWRFbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBwcmludFNpbmdsZUZpZWxk
VmFsdWUoZmllbGQsIGVsZW1lbnQpOwotICAgICAgfQotICAgICAgZ2VuZXJhdG9yLnByaW50KCJd
Iik7Ci0gICAgfQotICAgIAotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJyYXd0eXBlcyIpCi0gICAg
cHJpdmF0ZSB2b2lkIHByaW50TWFwRmllbGRWYWx1ZShGaWVsZERlc2NyaXB0b3IgZmllbGQsIE9i
amVjdCB2YWx1ZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIERlc2NyaXB0
b3IgdHlwZSA9IGZpZWxkLmdldE1lc3NhZ2VUeXBlKCk7Ci0gICAgICBGaWVsZERlc2NyaXB0b3Ig
a2V5RmllbGQgPSB0eXBlLmZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gICAgICBGaWVsZERlc2Ny
aXB0b3IgdmFsdWVGaWVsZCA9IHR5cGUuZmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICAgICAg
aWYgKGtleUZpZWxkID09IG51bGwgfHwgdmFsdWVGaWVsZCA9PSBudWxsKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIkludmFsaWQgbWFwIGZpZWxk
LiIpOwotICAgICAgfQotICAgICAgZ2VuZXJhdG9yLnByaW50KCJ7XG4iKTsKLSAgICAgIGdlbmVy
YXRvci5pbmRlbnQoKTsKLSAgICAgIGJvb2xlYW4gcHJpbnRlZEVsZW1lbnQgPSBmYWxzZTsKLSAg
ICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgOiAoTGlzdCkgdmFsdWUpIHsKLSAgICAgICAgTWVzc2Fn
ZSBlbnRyeSA9IChNZXNzYWdlKSBlbGVtZW50OwotICAgICAgICBPYmplY3QgZW50cnlLZXkgPSBl
bnRyeS5nZXRGaWVsZChrZXlGaWVsZCk7Ci0gICAgICAgIE9iamVjdCBlbnRyeVZhbHVlID0gZW50
cnkuZ2V0RmllbGQodmFsdWVGaWVsZCk7Ci0gICAgICAgIGlmIChwcmludGVkRWxlbWVudCkgewot
ICAgICAgICAgIGdlbmVyYXRvci5wcmludCgiLFxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgcHJpbnRlZEVsZW1lbnQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEtleSBm
aWVsZHMgYXJlIGFsd2F5cyBkb3VibGUtcXVvdGVkLgotICAgICAgICBwcmludFNpbmdsZUZpZWxk
VmFsdWUoa2V5RmllbGQsIGVudHJ5S2V5LCB0cnVlKTsKLSAgICAgICAgZ2VuZXJhdG9yLnByaW50
KCI6ICIpOwotICAgICAgICBwcmludFNpbmdsZUZpZWxkVmFsdWUodmFsdWVGaWVsZCwgZW50cnlW
YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAocHJpbnRlZEVsZW1lbnQpIHsKLSAgICAgICAgZ2Vu
ZXJhdG9yLnByaW50KCJcbiIpOwotICAgICAgfQotICAgICAgZ2VuZXJhdG9yLm91dGRlbnQoKTsK
LSAgICAgIGdlbmVyYXRvci5wcmludCgifSIpOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZv
aWQgcHJpbnRTaW5nbGVGaWVsZFZhbHVlKEZpZWxkRGVzY3JpcHRvciBmaWVsZCwgT2JqZWN0IHZh
bHVlKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgcHJpbnRTaW5nbGVGaWVs
ZFZhbHVlKGZpZWxkLCB2YWx1ZSwgZmFsc2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBy
aW50cyBhIGZpZWxkJ3MgdmFsdWUgaW4gSlNPTiBmb3JtYXQuCi0gICAgICogCi0gICAgICogQHBh
cmFtIGFsd2F5c1dpdGhRdW90ZXMgd2hldGhlciB0byBhbHdheXMgYWRkIGRvdWJsZS1xdW90ZXMg
dG8gcHJpbWl0aXZlCi0gICAgICogICAgICAgIHR5cGVzLgotICAgICAqLwotICAgIHByaXZhdGUg
dm9pZCBwcmludFNpbmdsZUZpZWxkVmFsdWUoCi0gICAgICAgIGZpbmFsIEZpZWxkRGVzY3JpcHRv
ciBmaWVsZCwgZmluYWwgT2JqZWN0IHZhbHVlLAotICAgICAgICBib29sZWFuIGFsd2F5c1dpdGhR
dW90ZXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBzd2l0Y2ggKGZpZWxkLmdldFR5cGUo
KSkgewotICAgICAgICBjYXNlIElOVDMyOgotICAgICAgICBjYXNlIFNJTlQzMjoKLSAgICAgICAg
Y2FzZSBTRklYRUQzMjoKLSAgICAgICAgICBpZiAoYWx3YXlzV2l0aFF1b3RlcykgewotICAgICAg
ICAgICAgZ2VuZXJhdG9yLnByaW50KCJcIiIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnZW5l
cmF0b3IucHJpbnQoKChJbnRlZ2VyKSB2YWx1ZSkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYg
KGFsd2F5c1dpdGhRdW90ZXMpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5wcmludCgiXCIiKTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJTlQ2NDoKLSAg
ICAgICAgY2FzZSBTSU5UNjQ6Ci0gICAgICAgIGNhc2UgU0ZJWEVENjQ6Ci0gICAgICAgICAgZ2Vu
ZXJhdG9yLnByaW50KCJcIiIgKyAoKExvbmcpIHZhbHVlKS50b1N0cmluZygpICsgIlwiIik7Ci0g
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBCT09MOgotICAgICAgICAgIGlmIChhbHdh
eXNXaXRoUXVvdGVzKSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIlwiIik7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGlmICgoKEJvb2xlYW4pIHZhbHVlKS5ib29sZWFuVmFsdWUoKSkg
ewotICAgICAgICAgICAgZ2VuZXJhdG9yLnByaW50KCJ0cnVlIik7Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5wcmludCgiZmFsc2UiKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgaWYgKGFsd2F5c1dpdGhRdW90ZXMpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5w
cmludCgiXCIiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBGTE9BVDoKLSAgICAgICAgICBGbG9hdCBmbG9hdFZhbHVlID0gKEZsb2F0KSB2YWx1ZTsKLSAg
ICAgICAgICBpZiAoZmxvYXRWYWx1ZS5pc05hTigpKSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3Iu
cHJpbnQoIlwiTmFOXCIiKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKGZsb2F0VmFsdWUuaXNJbmZp
bml0ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoZmxvYXRWYWx1ZSA8IDApIHsKLSAgICAgICAgICAg
ICAgZ2VuZXJhdG9yLnByaW50KCJcIi1JbmZpbml0eVwiIik7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIlwiSW5maW5pdHlcIiIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYWx3YXlzV2l0aFF1
b3RlcykgewotICAgICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIlwiIik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoZmxvYXRWYWx1ZS50b1N0cmluZygpKTsK
LSAgICAgICAgICAgIGlmIChhbHdheXNXaXRoUXVvdGVzKSB7Ci0gICAgICAgICAgICAgIGdlbmVy
YXRvci5wcmludCgiXCIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgCi0gICAgICAgIGNhc2UgRE9VQkxFOgotICAgICAgICAgIERvdWJs
ZSBkb3VibGVWYWx1ZSA9IChEb3VibGUpIHZhbHVlOwotICAgICAgICAgIGlmIChkb3VibGVWYWx1
ZS5pc05hTigpKSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIlwiTmFOXCIiKTsKLSAg
ICAgICAgICB9IGVsc2UgaWYgKGRvdWJsZVZhbHVlLmlzSW5maW5pdGUoKSkgewotICAgICAgICAg
ICAgaWYgKGRvdWJsZVZhbHVlIDwgMCkgewotICAgICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQo
IlwiLUluZmluaXR5XCIiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGdl
bmVyYXRvci5wcmludCgiXCJJbmZpbml0eVwiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhbHdheXNXaXRoUXVvdGVzKSB7Ci0gICAgICAgICAg
ICAgIGdlbmVyYXRvci5wcmludCgiXCIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdl
bmVyYXRvci5wcmludChkb3VibGVWYWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGlmIChh
bHdheXNXaXRoUXVvdGVzKSB7Ci0gICAgICAgICAgICAgIGdlbmVyYXRvci5wcmludCgiXCIiKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBVSU5UMzI6Ci0gICAgICAgIGNhc2UgRklYRUQzMjoKLSAgICAgICAgICBpZiAoYWx3YXlz
V2l0aFF1b3RlcykgewotICAgICAgICAgICAgZ2VuZXJhdG9yLnByaW50KCJcIiIpOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBnZW5lcmF0b3IucHJpbnQodW5zaWduZWRUb1N0cmluZygoSW50ZWdl
cikgdmFsdWUpKTsKLSAgICAgICAgICBpZiAoYWx3YXlzV2l0aFF1b3RlcykgewotICAgICAgICAg
ICAgZ2VuZXJhdG9yLnByaW50KCJcIiIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIFVJTlQ2NDoKLSAgICAgICAgY2FzZSBGSVhFRDY0OgotICAgICAgICAg
IGdlbmVyYXRvci5wcmludCgiXCIiICsgdW5zaWduZWRUb1N0cmluZygoTG9uZykgdmFsdWUpICsg
IlwiIik7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTVFJJTkc6Ci0gICAgICAg
ICAgZ2VuZXJhdG9yLnByaW50KGdzb24udG9Kc29uKHZhbHVlKSk7Ci0gICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBCWVRFUzoKLSAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIlwiIik7
Ci0gICAgICAgICAgZ2VuZXJhdG9yLnByaW50KAotICAgICAgICAgICAgICBCYXNlRW5jb2Rpbmcu
YmFzZTY0KCkuZW5jb2RlKCgoQnl0ZVN0cmluZykgdmFsdWUpLnRvQnl0ZUFycmF5KCkpKTsKLSAg
ICAgICAgICBnZW5lcmF0b3IucHJpbnQoIlwiIik7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBFTlVNOgotICAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSBnb29nbGUucHJvdG9idWYu
TnVsbFZhbHVlIChpdCdzIGFuIEVudW0pLgotICAgICAgICAgIGlmIChmaWVsZC5nZXRFbnVtVHlw
ZSgpLmdldEZ1bGxOYW1lKCkuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgImdvb2dsZS5wcm90
b2J1Zi5OdWxsVmFsdWUiKSkgewotICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgdmFsdWUg
aXQgY29udGFpbnMsIHdlIGFsd2F5cyBwcmludCBpdCBhcyAibnVsbCIuCi0gICAgICAgICAgICBp
ZiAoYWx3YXlzV2l0aFF1b3RlcykgewotICAgICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIlwi
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHJpbnQoIm51bGwiKTsK
LSAgICAgICAgICAgIGlmIChhbHdheXNXaXRoUXVvdGVzKSB7Ci0gICAgICAgICAgICAgIGdlbmVy
YXRvci5wcmludCgiXCIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKCgoRW51bVZhbHVlRGVzY3JpcHRvcikgdmFsdWUpLmdldEluZGV4KCkgPT0g
LTEpIHsKLSAgICAgICAgICAgICAgZ2VuZXJhdG9yLnByaW50KAotICAgICAgICAgICAgICAgICAg
U3RyaW5nLnZhbHVlT2YoKChFbnVtVmFsdWVEZXNjcmlwdG9yKSB2YWx1ZSkuZ2V0TnVtYmVyKCkp
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGdlbmVyYXRvci5wcmludCgK
LSAgICAgICAgICAgICAgICAgICJcIiIgKyAoKEVudW1WYWx1ZURlc2NyaXB0b3IpIHZhbHVlKS5n
ZXROYW1lKCkgKyAiXCIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBNRVNTQUdFOgotICAgICAgICBjYXNlIEdST1VQOgotICAg
ICAgICAgIHByaW50KChNZXNzYWdlKSB2YWx1ZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSAgLyoqIENvbnZlcnQgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIg
dG8gYSBzdHJpbmcuICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyB1bnNpZ25lZFRvU3RyaW5n
KGZpbmFsIGludCB2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA+PSAwKSB7Ci0gICAgICByZXR1cm4g
SW50ZWdlci50b1N0cmluZyh2YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBMb25n
LnRvU3RyaW5nKHZhbHVlICYgMHgwMDAwMDAwMEZGRkZGRkZGTCk7Ci0gICAgfQotICB9Ci0KLSAg
LyoqIENvbnZlcnQgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdG8gYSBzdHJpbmcuICovCi0g
IHByaXZhdGUgc3RhdGljIFN0cmluZyB1bnNpZ25lZFRvU3RyaW5nKGZpbmFsIGxvbmcgdmFsdWUp
IHsKLSAgICBpZiAodmFsdWUgPj0gMCkgewotICAgICAgcmV0dXJuIExvbmcudG9TdHJpbmcodmFs
dWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBQdWxsIG9mZiB0aGUgbW9zdC1zaWduaWZpY2Fu
dCBiaXQgc28gdGhhdCBCaWdJbnRlZ2VyIGRvZXNuJ3QgdGhpbmsKLSAgICAgIC8vIHRoZSBudW1i
ZXIgaXMgbmVnYXRpdmUsIHRoZW4gc2V0IGl0IGFnYWluIHVzaW5nIHNldEJpdCgpLgotICAgICAg
cmV0dXJuIEJpZ0ludGVnZXIudmFsdWVPZih2YWx1ZSAmIExvbmcuTUFYX1ZBTFVFKQotICAgICAg
ICAgICAgICAgICAgICAgICAuc2V0Qml0KExvbmcuU0laRSAtIDEpLnRvU3RyaW5nKCk7Ci0gICAg
fQotICB9Ci0gIAotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRUeXBlTmFtZShTdHJpbmcg
dHlwZVVybCkKLSAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewot
ICAgIFN0cmluZ1tdIHBhcnRzID0gdHlwZVVybC5zcGxpdCgiLyIpOwotICAgIGlmIChwYXJ0cy5s
ZW5ndGggPT0gMSkgewotICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbigKLSAgICAgICAgICAiSW52YWxpZCB0eXBlIHVybCBmb3VuZDogIiArIHR5cGVVcmwpOwot
ICAgIH0KLSAgICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07Ci0gIH0KLSAgCi0gIHBy
aXZhdGUgc3RhdGljIGNsYXNzIFBhcnNlckltcGwgewotICAgIHByaXZhdGUgZmluYWwgVHlwZVJl
Z2lzdHJ5IHJlZ2lzdHJ5OwotICAgIHByaXZhdGUgZmluYWwgSnNvblBhcnNlciBqc29uUGFyc2Vy
OwotICAgIAotICAgIFBhcnNlckltcGwoVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7Ci0gICAgICB0
aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0gICAgICB0aGlzLmpzb25QYXJzZXIgPSBuZXcgSnNv
blBhcnNlcigpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIG1lcmdlKFJlYWRlciBqc29uLCBNZXNz
YWdlLkJ1aWxkZXIgYnVpbGRlcikKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAg
IEpzb25SZWFkZXIgcmVhZGVyID0gbmV3IEpzb25SZWFkZXIoanNvbik7Ci0gICAgICByZWFkZXIu
c2V0TGVuaWVudChmYWxzZSk7Ci0gICAgICBtZXJnZShqc29uUGFyc2VyLnBhcnNlKHJlYWRlciks
IGJ1aWxkZXIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIG1lcmdlKFN0cmluZyBqc29uLCBNZXNz
YWdlLkJ1aWxkZXIgYnVpbGRlcikKLSAgICAgICAgdGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZl
ckV4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewotICAgICAgICBKc29uUmVhZGVyIHJlYWRlciA9IG5l
dyBKc29uUmVhZGVyKG5ldyBTdHJpbmdSZWFkZXIoanNvbikpOwotICAgICAgICByZWFkZXIuc2V0
TGVuaWVudChmYWxzZSk7Ci0gICAgICAgIG1lcmdlKGpzb25QYXJzZXIucGFyc2UocmVhZGVyKSwg
YnVpbGRlcik7Ci0gICAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24g
ZSkgewotICAgICAgICB0aHJvdyBlOwotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAg
ICAgICAgLy8gV2UgY29udmVydCBhbGwgZXhjZXB0aW9ucyBmcm9tIEpTT04gcGFyc2luZyB0byBv
dXIgb3duIGV4Y2VwdGlvbnMuCi0gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZm
ZXJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLSAgICAKLSAgICBw
cml2YXRlIGludGVyZmFjZSBXZWxsS25vd25UeXBlUGFyc2VyIHsKLSAgICAgIHZvaWQgbWVyZ2Uo
UGFyc2VySW1wbCBwYXJzZXIsIEpzb25FbGVtZW50IGpzb24sIE1lc3NhZ2UuQnVpbGRlciBidWls
ZGVyKQotICAgICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb247Ci0g
ICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIFdlbGxLbm93
blR5cGVQYXJzZXI+IHdlbGxLbm93blR5cGVQYXJzZXJzID0KLSAgICAgICAgYnVpbGRXZWxsS25v
d25UeXBlUGFyc2VycygpOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIFdl
bGxLbm93blR5cGVQYXJzZXI+Ci0gICAgYnVpbGRXZWxsS25vd25UeXBlUGFyc2VycygpIHsKLSAg
ICAgIE1hcDxTdHJpbmcsIFdlbGxLbm93blR5cGVQYXJzZXI+IHBhcnNlcnMgPQotICAgICAgICAg
IG5ldyBIYXNoTWFwPFN0cmluZywgV2VsbEtub3duVHlwZVBhcnNlcj4oKTsKLSAgICAgIC8vIFNw
ZWNpYWwtY2FzZSBBbnkuCi0gICAgICBwYXJzZXJzLnB1dChBbnkuZ2V0RGVzY3JpcHRvcigpLmdl
dEZ1bGxOYW1lKCksIG5ldyBXZWxsS25vd25UeXBlUGFyc2VyKCkgewotICAgICAgICBAT3ZlcnJp
ZGUKLSAgICAgICAgcHVibGljIHZvaWQgbWVyZ2UoUGFyc2VySW1wbCBwYXJzZXIsIEpzb25FbGVt
ZW50IGpzb24sCi0gICAgICAgICAgICBNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikgdGhyb3dzIElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcGFyc2VyLm1lcmdlQW55
KGpzb24sIGJ1aWxkZXIpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIC8vIFNwZWNpYWwt
Y2FzZSB3cmFwcGVyIHR5cGVzLgotICAgICAgV2VsbEtub3duVHlwZVBhcnNlciB3cmFwcGVyc1By
aW50ZXIgPSBuZXcgV2VsbEtub3duVHlwZVBhcnNlcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0g
ICAgICAgIHB1YmxpYyB2b2lkIG1lcmdlKFBhcnNlckltcGwgcGFyc2VyLCBKc29uRWxlbWVudCBq
c29uLAotICAgICAgICAgICAgTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpIHRocm93cyBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgICAgIHBhcnNlci5tZXJnZVdyYXBwZXIo
anNvbiwgYnVpbGRlcik7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICBwYXJzZXJzLnB1dChC
b29sVmFsdWUuZ2V0RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1lKCksIHdyYXBwZXJzUHJpbnRlcik7
Ci0gICAgICBwYXJzZXJzLnB1dChJbnQzMlZhbHVlLmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFt
ZSgpLCB3cmFwcGVyc1ByaW50ZXIpOwotICAgICAgcGFyc2Vycy5wdXQoVUludDMyVmFsdWUuZ2V0
RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1lKCksIHdyYXBwZXJzUHJpbnRlcik7Ci0gICAgICBwYXJz
ZXJzLnB1dChJbnQ2NFZhbHVlLmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLCB3cmFwcGVy
c1ByaW50ZXIpOwotICAgICAgcGFyc2Vycy5wdXQoVUludDY0VmFsdWUuZ2V0RGVzY3JpcHRvcigp
LmdldEZ1bGxOYW1lKCksIHdyYXBwZXJzUHJpbnRlcik7Ci0gICAgICBwYXJzZXJzLnB1dChTdHJp
bmdWYWx1ZS5nZXREZXNjcmlwdG9yKCkuZ2V0RnVsbE5hbWUoKSwgd3JhcHBlcnNQcmludGVyKTsK
LSAgICAgIHBhcnNlcnMucHV0KEJ5dGVzVmFsdWUuZ2V0RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1l
KCksIHdyYXBwZXJzUHJpbnRlcik7Ci0gICAgICBwYXJzZXJzLnB1dChGbG9hdFZhbHVlLmdldERl
c2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLCB3cmFwcGVyc1ByaW50ZXIpOwotICAgICAgcGFyc2Vy
cy5wdXQoRG91YmxlVmFsdWUuZ2V0RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1lKCksIHdyYXBwZXJz
UHJpbnRlcik7Ci0gICAgICAvLyBTcGVjaWFsLWNhc2UgVGltZXN0YW1wLgotICAgICAgcGFyc2Vy
cy5wdXQoVGltZXN0YW1wLmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLAotICAgICAgICAg
IG5ldyBXZWxsS25vd25UeXBlUGFyc2VyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAg
cHVibGljIHZvaWQgbWVyZ2UoUGFyc2VySW1wbCBwYXJzZXIsIEpzb25FbGVtZW50IGpzb24sCi0g
ICAgICAgICAgICBNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikgdGhyb3dzIEludmFsaWRQcm90b2Nv
bEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcGFyc2VyLm1lcmdlVGltZXN0YW1wKGpzb24s
IGJ1aWxkZXIpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIC8vIFNwZWNpYWwtY2FzZSBE
dXJhdGlvbi4KLSAgICAgIHBhcnNlcnMucHV0KER1cmF0aW9uLmdldERlc2NyaXB0b3IoKS5nZXRG
dWxsTmFtZSgpLAotICAgICAgICAgIG5ldyBXZWxsS25vd25UeXBlUGFyc2VyKCkgewotICAgICAg
ICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgbWVyZ2UoUGFyc2VySW1wbCBwYXJzZXIs
IEpzb25FbGVtZW50IGpzb24sCi0gICAgICAgICAgICBNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikg
dGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcGFyc2Vy
Lm1lcmdlRHVyYXRpb24oanNvbiwgYnVpbGRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAg
ICAgLy8gU3BlY2lhbC1jYXNlIEZpZWxkTWFzay4KLSAgICAgIHBhcnNlcnMucHV0KEZpZWxkTWFz
ay5nZXREZXNjcmlwdG9yKCkuZ2V0RnVsbE5hbWUoKSwKLSAgICAgICAgICBuZXcgV2VsbEtub3du
VHlwZVBhcnNlcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG1l
cmdlKFBhcnNlckltcGwgcGFyc2VyLCBKc29uRWxlbWVudCBqc29uLAotICAgICAgICAgICAgTWVz
c2FnZS5CdWlsZGVyIGJ1aWxkZXIpIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24gewotICAgICAgICAgIHBhcnNlci5tZXJnZUZpZWxkTWFzayhqc29uLCBidWlsZGVyKTsKLSAg
ICAgICAgfQotICAgICAgfSk7Ci0gICAgICAvLyBTcGVjaWFsLWNhc2UgU3RydWN0LgotICAgICAg
cGFyc2Vycy5wdXQoU3RydWN0LmdldERlc2NyaXB0b3IoKS5nZXRGdWxsTmFtZSgpLAotICAgICAg
ICAgIG5ldyBXZWxsS25vd25UeXBlUGFyc2VyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAg
ICAgcHVibGljIHZvaWQgbWVyZ2UoUGFyc2VySW1wbCBwYXJzZXIsIEpzb25FbGVtZW50IGpzb24s
Ci0gICAgICAgICAgICBNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikgdGhyb3dzIEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcGFyc2VyLm1lcmdlU3RydWN0KGpzb24s
IGJ1aWxkZXIpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIC8vIFNwZWNpYWwtY2FzZSBM
aXN0VmFsdWUuCi0gICAgICBwYXJzZXJzLnB1dChMaXN0VmFsdWUuZ2V0RGVzY3JpcHRvcigpLmdl
dEZ1bGxOYW1lKCksCi0gICAgICAgICAgbmV3IFdlbGxLbm93blR5cGVQYXJzZXIoKSB7Ci0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBtZXJnZShQYXJzZXJJbXBsIHBhcnNl
ciwgSnNvbkVsZW1lbnQganNvbiwKLSAgICAgICAgICAgIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVy
KSB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgICAgICBwYXJz
ZXIubWVyZ2VMaXN0VmFsdWUoanNvbiwgYnVpbGRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0pOwot
ICAgICAgLy8gU3BlY2lhbC1jYXNlIFZhbHVlLgotICAgICAgcGFyc2Vycy5wdXQoVmFsdWUuZ2V0
RGVzY3JpcHRvcigpLmdldEZ1bGxOYW1lKCksCi0gICAgICAgICAgbmV3IFdlbGxLbm93blR5cGVQ
YXJzZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBtZXJnZShQ
YXJzZXJJbXBsIHBhcnNlciwgSnNvbkVsZW1lbnQganNvbiwKLSAgICAgICAgICAgIE1lc3NhZ2Uu
QnVpbGRlciBidWlsZGVyKSB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsK
LSAgICAgICAgICBwYXJzZXIubWVyZ2VWYWx1ZShqc29uLCBidWlsZGVyKTsKLSAgICAgICAgfQot
ICAgICAgfSk7Ci0gICAgICByZXR1cm4gcGFyc2VyczsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0
ZSB2b2lkIG1lcmdlKEpzb25FbGVtZW50IGpzb24sIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKQot
ICAgICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIFdl
bGxLbm93blR5cGVQYXJzZXIgc3BlY2lhbFBhcnNlciA9IHdlbGxLbm93blR5cGVQYXJzZXJzLmdl
dCgKLSAgICAgICAgICBidWlsZGVyLmdldERlc2NyaXB0b3JGb3JUeXBlKCkuZ2V0RnVsbE5hbWUo
KSk7Ci0gICAgICBpZiAoc3BlY2lhbFBhcnNlciAhPSBudWxsKSB7Ci0gICAgICAgIHNwZWNpYWxQ
YXJzZXIubWVyZ2UodGhpcywganNvbiwgYnVpbGRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLSAgICAgIG1lcmdlTWVzc2FnZShqc29uLCBidWlsZGVyLCBmYWxzZSk7Ci0gICAgfQotICAg
IAotICAgIC8vIE1hcHMgZnJvbSBjYW1lbC1jYXNlIGZpZWxkIG5hbWVzIHRvIEZpZWxkRGVzY3Jp
cHRvci4KLSAgICBwcml2YXRlIGZpbmFsIE1hcDxEZXNjcmlwdG9yLCBNYXA8U3RyaW5nLCBGaWVs
ZERlc2NyaXB0b3I+PiBmaWVsZE5hbWVNYXBzID0KLSAgICAgICAgbmV3IEhhc2hNYXA8RGVzY3Jp
cHRvciwgTWFwPFN0cmluZywgRmllbGREZXNjcmlwdG9yPj4oKTsKLSAgICAKLSAgICBwcml2YXRl
IE1hcDxTdHJpbmcsIEZpZWxkRGVzY3JpcHRvcj4gZ2V0RmllbGROYW1lTWFwKAotICAgICAgICBE
ZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgICAgIGlmICghZmllbGROYW1lTWFwcy5jb250YWlu
c0tleShkZXNjcmlwdG9yKSkgewotICAgICAgICBNYXA8U3RyaW5nLCBGaWVsZERlc2NyaXB0b3I+
IGZpZWxkTmFtZU1hcCA9Ci0gICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIEZpZWxkRGVz
Y3JpcHRvcj4oKTsKLSAgICAgICAgZm9yIChGaWVsZERlc2NyaXB0b3IgZmllbGQgOiBkZXNjcmlw
dG9yLmdldEZpZWxkcygpKSB7Ci0gICAgICAgICAgZmllbGROYW1lTWFwLnB1dChmaWVsZC5nZXRO
YW1lKCksIGZpZWxkKTsKLSAgICAgICAgICBmaWVsZE5hbWVNYXAucHV0KGZpZWxkLmdldEpzb25O
YW1lKCksIGZpZWxkKTsKLSAgICAgICAgfQotICAgICAgICBmaWVsZE5hbWVNYXBzLnB1dChkZXNj
cmlwdG9yLCBmaWVsZE5hbWVNYXApOwotICAgICAgICByZXR1cm4gZmllbGROYW1lTWFwOwotICAg
ICAgfQotICAgICAgcmV0dXJuIGZpZWxkTmFtZU1hcHMuZ2V0KGRlc2NyaXB0b3IpOwotICAgIH0K
LSAgICAKLSAgICBwcml2YXRlIHZvaWQgbWVyZ2VNZXNzYWdlKEpzb25FbGVtZW50IGpzb24sIE1l
c3NhZ2UuQnVpbGRlciBidWlsZGVyLAotICAgICAgICBib29sZWFuIHNraXBUeXBlVXJsKSB0aHJv
d3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIGlmICghKGpzb24gaW5z
dGFuY2VvZiBKc29uT2JqZWN0KSkgewotICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29s
QnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgIkV4cGVjdCBtZXNzYWdlIG9iamVjdCBidXQg
Z290OiAiICsganNvbik7Ci0gICAgICB9Ci0gICAgICBKc29uT2JqZWN0IG9iamVjdCA9IChKc29u
T2JqZWN0KSBqc29uOwotICAgICAgTWFwPFN0cmluZywgRmllbGREZXNjcmlwdG9yPiBmaWVsZE5h
bWVNYXAgPQotICAgICAgICAgIGdldEZpZWxkTmFtZU1hcChidWlsZGVyLmdldERlc2NyaXB0b3JG
b3JUeXBlKCkpOwotICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBKc29uRWxlbWVudD4gZW50
cnkgOiBvYmplY3QuZW50cnlTZXQoKSkgewotICAgICAgICBpZiAoc2tpcFR5cGVVcmwgJiYgZW50
cnkuZ2V0S2V5KCkuZXF1YWxzKCJAdHlwZSIpKSB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgRmllbGREZXNjcmlwdG9yIGZpZWxkID0gZmllbGROYW1lTWFwLmdldChl
bnRyeS5nZXRLZXkoKSk7Ci0gICAgICAgIGlmIChmaWVsZCA9PSBudWxsKSB7Ci0gICAgICAgICAg
dGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigKLSAgICAgICAgICAgICAg
IkNhbm5vdCBmaW5kIGZpZWxkOiAiICsgZW50cnkuZ2V0S2V5KCkgKyAiIGluIG1lc3NhZ2UgIgot
ICAgICAgICAgICAgICArIGJ1aWxkZXIuZ2V0RGVzY3JpcHRvckZvclR5cGUoKS5nZXRGdWxsTmFt
ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBtZXJnZUZpZWxkKGZpZWxkLCBlbnRyeS5nZXRWYWx1
ZSgpLCBidWlsZGVyKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIG1l
cmdlQW55KEpzb25FbGVtZW50IGpzb24sIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKQotICAgICAg
ICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIERlc2NyaXB0
b3IgZGVzY3JpcHRvciA9IGJ1aWxkZXIuZ2V0RGVzY3JpcHRvckZvclR5cGUoKTsKLSAgICAgIEZp
ZWxkRGVzY3JpcHRvciB0eXBlVXJsRmllbGQgPSBkZXNjcmlwdG9yLmZpbmRGaWVsZEJ5TmFtZSgi
dHlwZV91cmwiKTsKLSAgICAgIEZpZWxkRGVzY3JpcHRvciB2YWx1ZUZpZWxkID0gZGVzY3JpcHRv
ci5maW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gICAgICAvLyBWYWxpZGF0ZXMgdHlwZSBvZiB0
aGUgbWVzc2FnZS4gTm90ZSB0aGF0IHdlIGNhbid0IGp1c3QgY2FzdCB0aGUgbWVzc2FnZQotICAg
ICAgLy8gdG8gY29tLmdvb2dsZS5wcm90b2J1Zi5BbnkgYmVjYXVzZSBpdCBtaWdodCBiZSBhIER5
bmFtaWNNZXNzYWdlLiAKLSAgICAgIGlmICh0eXBlVXJsRmllbGQgPT0gbnVsbCB8fCB2YWx1ZUZp
ZWxkID09IG51bGwKLSAgICAgICAgICB8fCB0eXBlVXJsRmllbGQuZ2V0VHlwZSgpICE9IEZpZWxk
RGVzY3JpcHRvci5UeXBlLlNUUklORwotICAgICAgICAgIHx8IHZhbHVlRmllbGQuZ2V0VHlwZSgp
ICE9IEZpZWxkRGVzY3JpcHRvci5UeXBlLkJZVEVTKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbnZh
bGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIkludmFsaWQgQW55IHR5cGUuIik7Ci0gICAgICB9
Ci0gICAgICAKLSAgICAgIGlmICghKGpzb24gaW5zdGFuY2VvZiBKc29uT2JqZWN0KSkgewotICAg
ICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAg
ICAgIkV4cGVjdCBtZXNzYWdlIG9iamVjdCBidXQgZ290OiAiICsganNvbik7Ci0gICAgICB9Ci0g
ICAgICBKc29uT2JqZWN0IG9iamVjdCA9IChKc29uT2JqZWN0KSBqc29uOwotICAgICAgSnNvbkVs
ZW1lbnQgdHlwZVVybEVsZW1lbnQgPSBvYmplY3QuZ2V0KCJAdHlwZSIpOwotICAgICAgaWYgKHR5
cGVVcmxFbGVtZW50ID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2Nv
bEJ1ZmZlckV4Y2VwdGlvbigKLSAgICAgICAgICAgICJNaXNzaW5nIHR5cGUgdXJsIHdoZW4gcGFy
c2luZzogIiArIGpzb24pOwotICAgICAgfQotICAgICAgU3RyaW5nIHR5cGVVcmwgPSB0eXBlVXJs
RWxlbWVudC5nZXRBc1N0cmluZygpOwotICAgICAgRGVzY3JpcHRvciBjb250ZW50VHlwZSA9IHJl
Z2lzdHJ5LmZpbmQoZ2V0VHlwZU5hbWUodHlwZVVybCkpOwotICAgICAgaWYgKGNvbnRlbnRUeXBl
ID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbigKLSAgICAgICAgICAgICJDYW5ub3QgcmVzb2x2ZSB0eXBlOiAiICsgdHlwZVVybCk7Ci0g
ICAgICB9Ci0gICAgICBidWlsZGVyLnNldEZpZWxkKHR5cGVVcmxGaWVsZCwgdHlwZVVybCk7Ci0g
ICAgICBNZXNzYWdlLkJ1aWxkZXIgY29udGVudEJ1aWxkZXIgPQotICAgICAgICAgIER5bmFtaWNN
ZXNzYWdlLmdldERlZmF1bHRJbnN0YW5jZShjb250ZW50VHlwZSkubmV3QnVpbGRlckZvclR5cGUo
KTsKLSAgICAgIFdlbGxLbm93blR5cGVQYXJzZXIgc3BlY2lhbFBhcnNlciA9Ci0gICAgICAgICAg
d2VsbEtub3duVHlwZVBhcnNlcnMuZ2V0KGNvbnRlbnRUeXBlLmdldEZ1bGxOYW1lKCkpOwotICAg
ICAgaWYgKHNwZWNpYWxQYXJzZXIgIT0gbnVsbCkgewotICAgICAgICBKc29uRWxlbWVudCB2YWx1
ZSA9IG9iamVjdC5nZXQoInZhbHVlIik7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0g
ICAgICAgICAgc3BlY2lhbFBhcnNlci5tZXJnZSh0aGlzLCB2YWx1ZSwgY29udGVudEJ1aWxkZXIp
OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtZXJnZU1lc3NhZ2UoanNvbiwg
Y29udGVudEJ1aWxkZXIsIHRydWUpOwotICAgICAgfQotICAgICAgYnVpbGRlci5zZXRGaWVsZCh2
YWx1ZUZpZWxkLCBjb250ZW50QnVpbGRlci5idWlsZCgpLnRvQnl0ZVN0cmluZygpKTsKLSAgICB9
Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIG1lcmdlRmllbGRNYXNrKEpzb25FbGVtZW50IGpzb24s
IE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKQotICAgICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29s
QnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIEZpZWxkTWFzayB2YWx1ZSA9IEZpZWxkTWFza1V0aWwu
ZnJvbVN0cmluZyhqc29uLmdldEFzU3RyaW5nKCkpOwotICAgICAgYnVpbGRlci5tZXJnZUZyb20o
dmFsdWUudG9CeXRlU3RyaW5nKCkpOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgbWVy
Z2VUaW1lc3RhbXAoSnNvbkVsZW1lbnQganNvbiwgTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIpCi0g
ICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgdHJ5
IHsKLSAgICAgICAgVGltZXN0YW1wIHZhbHVlID0gVGltZVV0aWwucGFyc2VUaW1lc3RhbXAoanNv
bi5nZXRBc1N0cmluZygpKTsKLSAgICAgICAgYnVpbGRlci5tZXJnZUZyb20odmFsdWUudG9CeXRl
U3RyaW5nKCkpOwotICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgewotICAgICAgICB0
aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgIkZh
aWxlZCB0byBwYXJzZSB0aW1lc3RhbXA6ICIgKyBqc29uKTsKLSAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgcHJpdmF0ZSB2b2lkIG1lcmdlRHVyYXRpb24oSnNvbkVsZW1lbnQganNvbiwgTWVzc2Fn
ZS5CdWlsZGVyIGJ1aWxkZXIpCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgRHVyYXRpb24gdmFsdWUgPSBUaW1lVXRp
bC5wYXJzZUR1cmF0aW9uKGpzb24uZ2V0QXNTdHJpbmcoKSk7Ci0gICAgICAgIGJ1aWxkZXIubWVy
Z2VGcm9tKHZhbHVlLnRvQnl0ZVN0cmluZygpKTsKLSAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0
aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
bigKLSAgICAgICAgICAgICJGYWlsZWQgdG8gcGFyc2UgZHVyYXRpb246ICIgKyBqc29uKTsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIG1lcmdlU3RydWN0KEpzb25FbGVt
ZW50IGpzb24sIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKQotICAgICAgICB0aHJvd3MgSW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvciA9
IGJ1aWxkZXIuZ2V0RGVzY3JpcHRvckZvclR5cGUoKTsKLSAgICAgIEZpZWxkRGVzY3JpcHRvciBm
aWVsZCA9IGRlc2NyaXB0b3IuZmluZEZpZWxkQnlOYW1lKCJmaWVsZHMiKTsKLSAgICAgIGlmIChm
aWVsZCA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJF
eGNlcHRpb24oIkludmFsaWQgU3RydWN0IHR5cGUuIik7Ci0gICAgICB9Ci0gICAgICBtZXJnZU1h
cEZpZWxkKGZpZWxkLCBqc29uLCBidWlsZGVyKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQg
bWVyZ2VMaXN0VmFsdWUoSnNvbkVsZW1lbnQganNvbiwgTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIp
Ci0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAg
RGVzY3JpcHRvciBkZXNjcmlwdG9yID0gYnVpbGRlci5nZXREZXNjcmlwdG9yRm9yVHlwZSgpOwot
ICAgICAgRmllbGREZXNjcmlwdG9yIGZpZWxkID0gZGVzY3JpcHRvci5maW5kRmllbGRCeU5hbWUo
InZhbHVlcyIpOwotICAgICAgaWYgKGZpZWxkID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3
IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiSW52YWxpZCBMaXN0VmFsdWUgdHlwZS4i
KTsKLSAgICAgIH0KLSAgICAgIG1lcmdlUmVwZWF0ZWRGaWVsZChmaWVsZCwganNvbiwgYnVpbGRl
cik7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBtZXJnZVZhbHVlKEpzb25FbGVtZW50
IGpzb24sIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKQotICAgICAgICB0aHJvd3MgSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIERlc2NyaXB0b3IgdHlwZSA9IGJ1aWxkZXIu
Z2V0RGVzY3JpcHRvckZvclR5cGUoKTsKLSAgICAgIGlmIChqc29uIGluc3RhbmNlb2YgSnNvblBy
aW1pdGl2ZSkgewotICAgICAgICBKc29uUHJpbWl0aXZlIHByaW1pdGl2ZSA9IChKc29uUHJpbWl0
aXZlKSBqc29uOwotICAgICAgICBpZiAocHJpbWl0aXZlLmlzQm9vbGVhbigpKSB7Ci0gICAgICAg
ICAgYnVpbGRlci5zZXRGaWVsZCh0eXBlLmZpbmRGaWVsZEJ5TmFtZSgiYm9vbF92YWx1ZSIpLAot
ICAgICAgICAgICAgICBwcmltaXRpdmUuZ2V0QXNCb29sZWFuKCkpOwotICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgYnVpbGRlci5zZXRGaWVsZCh0
eXBlLmZpbmRGaWVsZEJ5TmFtZSgibnVtYmVyX3ZhbHVlIiksCi0gICAgICAgICAgICAgIHByaW1p
dGl2ZS5nZXRBc0RvdWJsZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBidWlsZGVy
LnNldEZpZWxkKHR5cGUuZmluZEZpZWxkQnlOYW1lKCJzdHJpbmdfdmFsdWUiKSwKLSAgICAgICAg
ICAgICAgcHJpbWl0aXZlLmdldEFzU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2Ug
aWYgKGpzb24gaW5zdGFuY2VvZiBKc29uT2JqZWN0KSB7Ci0gICAgICAgIEZpZWxkRGVzY3JpcHRv
ciBmaWVsZCA9IHR5cGUuZmluZEZpZWxkQnlOYW1lKCJzdHJ1Y3RfdmFsdWUiKTsKLSAgICAgICAg
TWVzc2FnZS5CdWlsZGVyIHN0cnVjdEJ1aWxkZXIgPSBidWlsZGVyLm5ld0J1aWxkZXJGb3JGaWVs
ZChmaWVsZCk7Ci0gICAgICAgIG1lcmdlKGpzb24sIHN0cnVjdEJ1aWxkZXIpOwotICAgICAgICBi
dWlsZGVyLnNldEZpZWxkKGZpZWxkLCBzdHJ1Y3RCdWlsZGVyLmJ1aWxkKCkpOwotICAgICAgfSBl
bHNlIGlmIChqc29uIGluc3RhbmNlb2YgSnNvbkFycmF5KSB7Ci0gICAgICAgIEZpZWxkRGVzY3Jp
cHRvciBmaWVsZCA9IHR5cGUuZmluZEZpZWxkQnlOYW1lKCJsaXN0X3ZhbHVlIik7Ci0gICAgICAg
IE1lc3NhZ2UuQnVpbGRlciBsaXN0QnVpbGRlciA9IGJ1aWxkZXIubmV3QnVpbGRlckZvckZpZWxk
KGZpZWxkKTsKLSAgICAgICAgbWVyZ2UoanNvbiwgbGlzdEJ1aWxkZXIpOwotICAgICAgICBidWls
ZGVyLnNldEZpZWxkKGZpZWxkLCBsaXN0QnVpbGRlci5idWlsZCgpKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlVuZXhwZWN0ZWQganNv
biBkYXRhOiAiICsganNvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9p
ZCBtZXJnZVdyYXBwZXIoSnNvbkVsZW1lbnQganNvbiwgTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIp
Ci0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAg
RGVzY3JpcHRvciB0eXBlID0gYnVpbGRlci5nZXREZXNjcmlwdG9yRm9yVHlwZSgpOwotICAgICAg
RmllbGREZXNjcmlwdG9yIGZpZWxkID0gdHlwZS5maW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0g
ICAgICBpZiAoZmllbGQgPT0gbnVsbCkgewotICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgIkludmFsaWQgd3JhcHBlciB0eXBlOiAi
ICsgdHlwZS5nZXRGdWxsTmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIGJ1aWxkZXIuc2V0RmllbGQo
ZmllbGQsIHBhcnNlRmllbGRWYWx1ZShmaWVsZCwganNvbiwgYnVpbGRlcikpOwotICAgIH0KLSAg
ICAKLSAgICBwcml2YXRlIHZvaWQgbWVyZ2VGaWVsZChGaWVsZERlc2NyaXB0b3IgZmllbGQsIEpz
b25FbGVtZW50IGpzb24sCi0gICAgICAgIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKSB0aHJvd3Mg
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIGlmIChmaWVsZC5pc1JlcGVh
dGVkKCkpIHsKLSAgICAgICAgaWYgKGJ1aWxkZXIuZ2V0UmVwZWF0ZWRGaWVsZENvdW50KGZpZWxk
KSA+IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uKAotICAgICAgICAgICAgICAiRmllbGQgIiArIGZpZWxkLmdldEZ1bGxOYW1lKCkgKyAiIGhh
cyBhbHJlYWR5IGJlZW4gc2V0LiIpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoYnVpbGRlci5oYXNGaWVsZChmaWVsZCkpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSW52
YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiRmllbGQgIiArIGZp
ZWxkLmdldEZ1bGxOYW1lKCkgKyAiIGhhcyBhbHJlYWR5IGJlZW4gc2V0LiIpOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChmaWVsZC5nZXRDb250YWluaW5nT25lb2YoKSAhPSBudWxsCi0gICAgICAg
ICAgICAmJiBidWlsZGVyLmdldE9uZW9mRmllbGREZXNjcmlwdG9yKGZpZWxkLmdldENvbnRhaW5p
bmdPbmVvZigpKSAhPSBudWxsKSB7Ci0gICAgICAgICAgRmllbGREZXNjcmlwdG9yIG90aGVyID0g
YnVpbGRlci5nZXRPbmVvZkZpZWxkRGVzY3JpcHRvcihmaWVsZC5nZXRDb250YWluaW5nT25lb2Yo
KSk7Ci0gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigK
LSAgICAgICAgICAgICAgIkNhbm5vdCBzZXQgZmllbGQgIiArIGZpZWxkLmdldEZ1bGxOYW1lKCkg
KyAiIGJlY2F1c2UgYW5vdGhlciBmaWVsZCAiCi0gICAgICAgICAgICAgICsgb3RoZXIuZ2V0RnVs
bE5hbWUoKSArICIgYmVsb25naW5nIHRvIHRoZSBzYW1lIG9uZW9mIGhhcyBhbHJlYWR5IGJlZW4g
c2V0ICIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoZmllbGQuaXNSZXBlYXRlZCgp
ICYmIGpzb24gaW5zdGFuY2VvZiBKc29uTnVsbCkgewotICAgICAgICAvLyBXZSBhbGxvdyAibnVs
bCIgYXMgdmFsdWUgZm9yIGFsbCBmaWVsZCB0eXBlcyBhbmQgdHJlYXQgaXQgYXMgaWYgdGhlCi0g
ICAgICAgIC8vIGZpZWxkIGlzIG5vdCBwcmVzZW50LgotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgICBpZiAoZmllbGQuaXNNYXBGaWVsZCgpKSB7Ci0gICAgICAgIG1lcmdlTWFwRmllbGQo
ZmllbGQsIGpzb24sIGJ1aWxkZXIpOwotICAgICAgfSBlbHNlIGlmIChmaWVsZC5pc1JlcGVhdGVk
KCkpIHsKLSAgICAgICAgbWVyZ2VSZXBlYXRlZEZpZWxkKGZpZWxkLCBqc29uLCBidWlsZGVyKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIE9iamVjdCB2YWx1ZSA9IHBhcnNlRmllbGRWYWx1ZShm
aWVsZCwganNvbiwgYnVpbGRlcik7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAg
ICAgICAgYnVpbGRlci5zZXRGaWVsZChmaWVsZCwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBtZXJnZU1hcEZpZWxkKEZpZWxkRGVzY3Jp
cHRvciBmaWVsZCwgSnNvbkVsZW1lbnQganNvbiwKLSAgICAgICAgTWVzc2FnZS5CdWlsZGVyIGJ1
aWxkZXIpIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgaWYg
KCEoanNvbiBpbnN0YW5jZW9mIEpzb25PYmplY3QpKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbnZh
bGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAiRXhwZWN0IGEgbWFwIG9i
amVjdCBidXQgZm91bmQ6ICIgKyBqc29uKTsKLSAgICAgIH0KLSAgICAgIERlc2NyaXB0b3IgdHlw
ZSA9IGZpZWxkLmdldE1lc3NhZ2VUeXBlKCk7Ci0gICAgICBGaWVsZERlc2NyaXB0b3Iga2V5Rmll
bGQgPSB0eXBlLmZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gICAgICBGaWVsZERlc2NyaXB0b3Ig
dmFsdWVGaWVsZCA9IHR5cGUuZmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICAgICAgaWYgKGtl
eUZpZWxkID09IG51bGwgfHwgdmFsdWVGaWVsZCA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5l
dyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAiSW52YWxpZCBt
YXAgZmllbGQ6ICIgKyBmaWVsZC5nZXRGdWxsTmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIEpzb25P
YmplY3Qgb2JqZWN0ID0gKEpzb25PYmplY3QpIGpzb247Ci0gICAgICBmb3IgKE1hcC5FbnRyeTxT
dHJpbmcsIEpzb25FbGVtZW50PiBlbnRyeSA6IG9iamVjdC5lbnRyeVNldCgpKSB7Ci0gICAgICAg
IE1lc3NhZ2UuQnVpbGRlciBlbnRyeUJ1aWxkZXIgPSBidWlsZGVyLm5ld0J1aWxkZXJGb3JGaWVs
ZChmaWVsZCk7Ci0gICAgICAgIE9iamVjdCBrZXkgPSBwYXJzZUZpZWxkVmFsdWUoCi0gICAgICAg
ICAgICBrZXlGaWVsZCwgbmV3IEpzb25QcmltaXRpdmUoZW50cnkuZ2V0S2V5KCkpLCBlbnRyeUJ1
aWxkZXIpOwotICAgICAgICBPYmplY3QgdmFsdWUgPSBwYXJzZUZpZWxkVmFsdWUoCi0gICAgICAg
ICAgICB2YWx1ZUZpZWxkLCBlbnRyeS5nZXRWYWx1ZSgpLCBlbnRyeUJ1aWxkZXIpOwotICAgICAg
ICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJNYXAgdmFsdWUgY2Fubm90IGJlIG51
bGwuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZW50cnlCdWlsZGVyLnNldEZpZWxkKGtleUZpZWxk
LCBrZXkpOwotICAgICAgICBlbnRyeUJ1aWxkZXIuc2V0RmllbGQodmFsdWVGaWVsZCwgdmFsdWUp
OwotICAgICAgICBidWlsZGVyLmFkZFJlcGVhdGVkRmllbGQoZmllbGQsIGVudHJ5QnVpbGRlci5i
dWlsZCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUg
ZGVmYXVsdCB2YWx1ZSBmb3IgYSBmaWVsZCB0eXBlLiBOb3RlIHRoYXQgd2UgdXNlIHByb3RvMwot
ICAgICAqIGxhbmd1YWdlIGRlZmF1bHRzIGFuZCBpZ25vcmUgYW55IGRlZmF1bHQgdmFsdWVzIHNl
dCB0aHJvdWdoIHRoZQotICAgICAqIHByb3RvICJkZWZhdWx0IiBvcHRpb24uIAotICAgICAqLwot
ICAgIHByaXZhdGUgT2JqZWN0IGdldERlZmF1bHRWYWx1ZShGaWVsZERlc2NyaXB0b3IgZmllbGQs
Ci0gICAgICAgIE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICBzd2l0Y2ggKGZpZWxk
LmdldFR5cGUoKSkgewotICAgICAgICBjYXNlIElOVDMyOgotICAgICAgICBjYXNlIFNJTlQzMjoK
LSAgICAgICAgY2FzZSBTRklYRUQzMjoKLSAgICAgICAgY2FzZSBVSU5UMzI6Ci0gICAgICAgIGNh
c2UgRklYRUQzMjoKLSAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJTlQ2NDoKLSAg
ICAgICAgY2FzZSBTSU5UNjQ6Ci0gICAgICAgIGNhc2UgU0ZJWEVENjQ6Ci0gICAgICAgIGNhc2Ug
VUlOVDY0OgotICAgICAgICBjYXNlIEZJWEVENjQ6Ci0gICAgICAgICAgcmV0dXJuIDBMOwotICAg
ICAgICBjYXNlIEZMT0FUOgotICAgICAgICAgIHJldHVybiAwLjBmOwotICAgICAgICBjYXNlIERP
VUJMRToKLSAgICAgICAgICByZXR1cm4gMC4wOwotICAgICAgICBjYXNlIEJPT0w6Ci0gICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIFNUUklORzoKLSAgICAgICAgICByZXR1cm4g
IiI7Ci0gICAgICAgIGNhc2UgQllURVM6Ci0gICAgICAgICAgcmV0dXJuIEJ5dGVTdHJpbmcuRU1Q
VFk7Ci0gICAgICAgIGNhc2UgRU5VTToKLSAgICAgICAgICByZXR1cm4gZmllbGQuZ2V0RW51bVR5
cGUoKS5nZXRWYWx1ZXMoKS5nZXQoMCk7Ci0gICAgICAgIGNhc2UgTUVTU0FHRToKLSAgICAgICAg
Y2FzZSBHUk9VUDoKLSAgICAgICAgICByZXR1cm4gYnVpbGRlci5uZXdCdWlsZGVyRm9yRmllbGQo
ZmllbGQpLmdldERlZmF1bHRJbnN0YW5jZUZvclR5cGUoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAi
SW52YWxpZCBmaWVsZCB0eXBlOiAiICsgZmllbGQuZ2V0VHlwZSgpKTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIG1lcmdlUmVwZWF0ZWRGaWVsZChGaWVsZERlc2NyaXB0
b3IgZmllbGQsIEpzb25FbGVtZW50IGpzb24sCi0gICAgICAgIE1lc3NhZ2UuQnVpbGRlciBidWls
ZGVyKSB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIGlmICgh
KGpzb24gaW5zdGFuY2VvZiBKc29uQXJyYXkpKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAiRXhwZWN0IGFuIGFycmF5IGJ1
dCBmb3VuZDogIiArIGpzb24pOwotICAgICAgfQotICAgICAgSnNvbkFycmF5IGFycmF5ID0gKEpz
b25BcnJheSkganNvbjsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgT2JqZWN0IHZhbHVlID0gcGFyc2VGaWVsZFZhbHVlKGZpZWxkLCBhcnJh
eS5nZXQoaSksIGJ1aWxkZXIpOwotICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAg
ICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oCi0gICAgICAgICAg
ICAgICJSZXBlYXRlZCBmaWVsZCBlbGVtZW50cyBjYW5ub3QgYmUgbnVsbCIpOwotICAgICAgICB9
Ci0gICAgICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGaWVsZChmaWVsZCwgdmFsdWUpOwotICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIGludCBwYXJzZUludDMyKEpzb25FbGVtZW50IGpz
b24pCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAg
ICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQoanNvbi5nZXRBc1N0cmlu
ZygpKTsKLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIEZhbGwgdGhy
b3VnaC4KLSAgICAgIH0KLSAgICAgIC8vIEpTT04gZG9lc24ndCBkaXN0aW5ndWlzaCBiZXR3ZWVu
IGludGVnZXIgdmFsdWVzIGFuZCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgc28gIjEiIGFuZAotICAg
ICAgLy8gIjEuMDAwIiBhcmUgdHJlYXRlZCBhcyBlcXVhbCBpbiBKU09OLiBGb3IgdGhpcyByZWFz
b24gd2UgYWNjZXB0IGZsb2F0aW5nIHBvaW50IHZhbHVlcyBmb3IKLSAgICAgIC8vIGludGVnZXIg
ZmllbGRzIGFzIHdlbGwgYXMgbG9uZyBhcyBpdCBhY3R1YWxseSBpcyBhbiBpbnRlZ2VyIChpLmUu
LCByb3VuZCh2YWx1ZSkgPT0gdmFsdWUpLgotICAgICAgdHJ5IHsKLSAgICAgICAgQmlnRGVjaW1h
bCB2YWx1ZSA9IG5ldyBCaWdEZWNpbWFsKGpzb24uZ2V0QXNTdHJpbmcoKSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS5pbnRWYWx1ZUV4YWN0KCk7Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkg
ewotICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKCJOb3Qg
YW4gaW50MzIgdmFsdWU6ICIgKyBqc29uKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJp
dmF0ZSBsb25nIHBhcnNlSW50NjQoSnNvbkVsZW1lbnQganNvbikKLSAgICAgICAgdGhyb3dzIElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICB0cnkgewotICAgICAgICByZXR1
cm4gTG9uZy5wYXJzZUxvbmcoanNvbi5nZXRBc1N0cmluZygpKTsKLSAgICAgIH0gY2F0Y2ggKEV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KLSAgICAgIH0KLSAgICAgIC8v
IEpTT04gZG9lc24ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGludGVnZXIgdmFsdWVzIGFuZCBmbG9h
dGluZyBwb2ludCB2YWx1ZXMgc28gIjEiIGFuZAotICAgICAgLy8gIjEuMDAwIiBhcmUgdHJlYXRl
ZCBhcyBlcXVhbCBpbiBKU09OLiBGb3IgdGhpcyByZWFzb24gd2UgYWNjZXB0IGZsb2F0aW5nIHBv
aW50IHZhbHVlcyBmb3IKLSAgICAgIC8vIGludGVnZXIgZmllbGRzIGFzIHdlbGwgYXMgbG9uZyBh
cyBpdCBhY3R1YWxseSBpcyBhbiBpbnRlZ2VyIChpLmUuLCByb3VuZCh2YWx1ZSkgPT0gdmFsdWUp
LgotICAgICAgdHJ5IHsKLSAgICAgICAgQmlnRGVjaW1hbCB2YWx1ZSA9IG5ldyBCaWdEZWNpbWFs
KGpzb24uZ2V0QXNTdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5sb25nVmFsdWVFeGFj
dCgpOwotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IElu
dmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigiTm90IGFuIGludDMyIHZhbHVlOiAiICsganNv
bik7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgaW50IHBhcnNlVWludDMyKEpz
b25FbGVtZW50IGpzb24pCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNl
cHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgbG9uZyByZXN1bHQgPSBMb25nLnBhcnNlTG9u
Zyhqc29uLmdldEFzU3RyaW5nKCkpOwotICAgICAgICBpZiAocmVzdWx0IDwgMCB8fCByZXN1bHQg
PiAweEZGRkZGRkZGTCkgewotICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZm
ZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJPdXQgb2YgcmFuZ2UgdWludDMyIHZhbHVlOiAi
ICsganNvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChpbnQpIHJlc3VsdDsKLSAgICAg
IH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRo
cm93IGU7Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAvLyBGYWxsIHRo
cm91Z2guCi0gICAgICB9Ci0gICAgICAvLyBKU09OIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2Vl
biBpbnRlZ2VyIHZhbHVlcyBhbmQgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIHNvICIxIiBhbmQKLSAg
ICAgIC8vICIxLjAwMCIgYXJlIHRyZWF0ZWQgYXMgZXF1YWwgaW4gSlNPTi4gRm9yIHRoaXMgcmVh
c29uIHdlIGFjY2VwdCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgZm9yCi0gICAgICAvLyBpbnRlZ2Vy
IGZpZWxkcyBhcyB3ZWxsIGFzIGxvbmcgYXMgaXQgYWN0dWFsbHkgaXMgYW4gaW50ZWdlciAoaS5l
Liwgcm91bmQodmFsdWUpID09IHZhbHVlKS4KLSAgICAgIHRyeSB7Ci0gICAgICAgIEJpZ0RlY2lt
YWwgZGVjaW1hbFZhbHVlID0gbmV3IEJpZ0RlY2ltYWwoanNvbi5nZXRBc1N0cmluZygpKTsKLSAg
ICAgICAgQmlnSW50ZWdlciB2YWx1ZSA9IGRlY2ltYWxWYWx1ZS50b0JpZ0ludGVnZXJFeGFjdCgp
OwotICAgICAgICBpZiAodmFsdWUuc2lnbnVtKCkgPCAwIHx8IHZhbHVlLmNvbXBhcmVUbyhuZXcg
QmlnSW50ZWdlcigiRkZGRkZGRkYiLCAxNikpID4gMCkgewotICAgICAgICAgIHRocm93IG5ldyBJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oIk91dCBvZiByYW5nZSB1aW50MzIgdmFsdWU6
ICIgKyBqc29uKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUuaW50VmFsdWUoKTsK
LSAgICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAgIHRocm93IGU7Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJv
dyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgIk5vdCBh
biB1aW50MzIgdmFsdWU6ICIgKyBqc29uKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgQmlnSW50ZWdlciBNQVhfVUlOVDY0ID0KLSAgICAgICAgbmV3IEJp
Z0ludGVnZXIoIkZGRkZGRkZGRkZGRkZGRkYiLCAxNik7Ci0gICAgCi0gICAgcHJpdmF0ZSBsb25n
IHBhcnNlVWludDY0KEpzb25FbGVtZW50IGpzb24pCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJv
dG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgdHJ5IHsKLSAgICAgICAgQmlnRGVjaW1hbCBk
ZWNpbWFsVmFsdWUgPSBuZXcgQmlnRGVjaW1hbChqc29uLmdldEFzU3RyaW5nKCkpOwotICAgICAg
ICBCaWdJbnRlZ2VyIHZhbHVlID0gZGVjaW1hbFZhbHVlLnRvQmlnSW50ZWdlckV4YWN0KCk7Ci0g
ICAgICAgIGlmICh2YWx1ZS5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA8IDAKLSAgICAgICAg
ICAgIHx8IHZhbHVlLmNvbXBhcmVUbyhNQVhfVUlOVDY0KSA+IDApIHsKLSAgICAgICAgICB0aHJv
dyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgICAiT3V0
IG9mIHJhbmdlIHVpbnQ2NCB2YWx1ZTogIiArIGpzb24pOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS5sb25nVmFsdWUoKTsKLSAgICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1
ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IGU7Ci0gICAgICB9IGNhdGNoIChFeGNl
cHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uKAotICAgICAgICAgICAgIk5vdCBhbiB1aW50NjQgdmFsdWU6ICIgKyBqc29uKTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIHBhcnNlQm9vbChKc29uRWxlbWVu
dCBqc29uKQotICAgICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsK
LSAgICAgIGlmIChqc29uLmdldEFzU3RyaW5nKCkuZXF1YWxzKCJ0cnVlIikpIHsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoanNvbi5nZXRBc1N0cmluZygpLmVxdWFs
cygiZmFsc2UiKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICB0aHJv
dyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKCJJbnZhbGlkIGJvb2wgdmFsdWU6
ICIgKyBqc29uKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91Ymxl
IEVQU0lMT04gPSAxZS02OwotICAgIAotICAgIHByaXZhdGUgZmxvYXQgcGFyc2VGbG9hdChKc29u
RWxlbWVudCBqc29uKQotICAgICAgICB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uIHsKLSAgICAgIGlmIChqc29uLmdldEFzU3RyaW5nKCkuZXF1YWxzKCJOYU4iKSkgewotICAg
ICAgICByZXR1cm4gRmxvYXQuTmFOOwotICAgICAgfSBlbHNlIGlmIChqc29uLmdldEFzU3RyaW5n
KCkuZXF1YWxzKCJJbmZpbml0eSIpKSB7Ci0gICAgICAgIHJldHVybiBGbG9hdC5QT1NJVElWRV9J
TkZJTklUWTsKLSAgICAgIH0gZWxzZSBpZiAoanNvbi5nZXRBc1N0cmluZygpLmVxdWFscygiLUlu
ZmluaXR5IikpIHsKLSAgICAgICAgcmV0dXJuIEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZOwotICAg
ICAgfQotICAgICAgdHJ5IHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgdXNlIEZsb2F0LnBhcnNlRmxv
YXQoKSBoZXJlIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBzaW1wbHkKLSAgICAgICAgLy8gYWNjZXB0
cyBhbGwgZG91YmxlIHZhbHVlcy4gSGVyZSB3ZSBwYXJzZSB0aGUgdmFsdWUgaW50byBhIERvdWJs
ZQotICAgICAgICAvLyBhbmQgZG8gZXhwbGljaXQgcmFuZ2UgY2hlY2sgb24gaXQuCi0gICAgICAg
IGRvdWJsZSB2YWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZShqc29uLmdldEFzU3RyaW5nKCkpOwot
ICAgICAgICAvLyBXaGVuIGEgZmxvYXQgdmFsdWUgaXMgcHJpbnRlZCwgdGhlIHByaW50ZWQgdmFs
dWUgbWlnaHQgYmUgYSBsaXR0bGUKLSAgICAgICAgLy8gbGFyZ2VyIG9yIHNtYWxsZXIgZHVlIHRv
IHByZWNpc2lvbiBsb3NzLiBIZXJlIHdlIG5lZWQgdG8gYWRkIGEgYml0Ci0gICAgICAgIC8vIG9m
IHRvbGVyYW5jZSB3aGVuIGNoZWNraW5nIHdoZXRoZXIgdGhlIGZsb2F0IHZhbHVlIGlzIGluIHJh
bmdlLgotICAgICAgICBpZiAodmFsdWUgPiBGbG9hdC5NQVhfVkFMVUUgKiAoMS4wICsgRVBTSUxP
TikKLSAgICAgICAgICAgIHx8IHZhbHVlIDwgLUZsb2F0Lk1BWF9WQUxVRSAqICgxLjAgKyBFUFNJ
TE9OKSkgewotICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24oCi0gICAgICAgICAgICAgICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWU6ICIgKyBqc29uKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gKGZsb2F0KSB2YWx1ZTsKLSAgICAgIH0gY2F0Y2gg
KEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IGU7Ci0g
ICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFBy
b3RvY29sQnVmZmVyRXhjZXB0aW9uKCJOb3QgYSBmbG9hdCB2YWx1ZTogIiArIGpzb24pOwotICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCaWdEZWNpbWFsIE1P
UkVfVEhBTl9PTkUgPSBuZXcgQmlnRGVjaW1hbCgKLSAgICAgICAgU3RyaW5nLnZhbHVlT2YoMS4w
ICsgRVBTSUxPTikpOwotICAgIC8vIFdoZW4gYSBmbG9hdCB2YWx1ZSBpcyBwcmludGVkLCB0aGUg
cHJpbnRlZCB2YWx1ZSBtaWdodCBiZSBhIGxpdHRsZQotICAgIC8vIGxhcmdlciBvciBzbWFsbGVy
IGR1ZSB0byBwcmVjaXNpb24gbG9zcy4gSGVyZSB3ZSBuZWVkIHRvIGFkZCBhIGJpdAotICAgIC8v
IG9mIHRvbGVyYW5jZSB3aGVuIGNoZWNraW5nIHdoZXRoZXIgdGhlIGZsb2F0IHZhbHVlIGlzIGlu
IHJhbmdlLgotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJpZ0RlY2ltYWwgTUFYX0RPVUJMRSA9
IG5ldyBCaWdEZWNpbWFsKAotICAgICAgICBTdHJpbmcudmFsdWVPZihEb3VibGUuTUFYX1ZBTFVF
KSkubXVsdGlwbHkoTU9SRV9USEFOX09ORSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQmln
RGVjaW1hbCBNSU5fRE9VQkxFID0gbmV3IEJpZ0RlY2ltYWwoCi0gICAgICAgIFN0cmluZy52YWx1
ZU9mKC1Eb3VibGUuTUFYX1ZBTFVFKSkubXVsdGlwbHkoTU9SRV9USEFOX09ORSk7Ci0gICAgCi0g
ICAgcHJpdmF0ZSBkb3VibGUgcGFyc2VEb3VibGUoSnNvbkVsZW1lbnQganNvbikKLSAgICAgICAg
dGhyb3dzIEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7Ci0gICAgICBpZiAoanNvbi5n
ZXRBc1N0cmluZygpLmVxdWFscygiTmFOIikpIHsKLSAgICAgICAgcmV0dXJuIERvdWJsZS5OYU47
Ci0gICAgICB9IGVsc2UgaWYgKGpzb24uZ2V0QXNTdHJpbmcoKS5lcXVhbHMoIkluZmluaXR5Iikp
IHsKLSAgICAgICAgcmV0dXJuIERvdWJsZS5QT1NJVElWRV9JTkZJTklUWTsKLSAgICAgIH0gZWxz
ZSBpZiAoanNvbi5nZXRBc1N0cmluZygpLmVxdWFscygiLUluZmluaXR5IikpIHsKLSAgICAgICAg
cmV0dXJuIERvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsKLSAgICAgIH0KLSAgICAgIHRyeSB7Ci0g
ICAgICAgIC8vIFdlIGRvbid0IHVzZSBEb3VibGUucGFyc2VEb3VibGUoKSBoZXJlIGJlY2F1c2Ug
dGhhdCBmdW5jdGlvbiBzaW1wbHkKLSAgICAgICAgLy8gYWNjZXB0cyBhbGwgdmFsdWVzLiBIZXJl
IHdlIHBhcnNlIHRoZSB2YWx1ZSBpbnRvIGEgQmlnRGVjaW1hbCBhbmQgZG8KLSAgICAgICAgLy8g
ZXhwbGljaXQgcmFuZ2UgY2hlY2sgb24gaXQuCi0gICAgICAgIEJpZ0RlY2ltYWwgdmFsdWUgPSBu
ZXcgQmlnRGVjaW1hbChqc29uLmdldEFzU3RyaW5nKCkpOwotICAgICAgICBpZiAodmFsdWUuY29t
cGFyZVRvKE1BWF9ET1VCTEUpID4gMAotICAgICAgICAgICAgfHwgdmFsdWUuY29tcGFyZVRvKE1J
Tl9ET1VCTEUpIDwgMCkgewotICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZm
ZXJFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJPdXQgb2YgcmFuZ2UgZG91YmxlIHZhbHVlOiAi
ICsganNvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLmRvdWJsZVZhbHVlKCk7
Ci0gICAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAg
ICAgICB0aHJvdyBlOwotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhy
b3cgbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbigKLSAgICAgICAgICAgICJOb3Qg
YW4gZG91YmxlIHZhbHVlOiAiICsganNvbik7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIHBy
aXZhdGUgU3RyaW5nIHBhcnNlU3RyaW5nKEpzb25FbGVtZW50IGpzb24pIHsKLSAgICAgIHJldHVy
biBqc29uLmdldEFzU3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgQnl0ZVN0cmlu
ZyBwYXJzZUJ5dGVzKEpzb25FbGVtZW50IGpzb24pIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZm
ZXJFeGNlcHRpb24gewotICAgICAgU3RyaW5nIGVuY29kZWQgPSBqc29uLmdldEFzU3RyaW5nKCk7
Ci0gICAgICBpZiAoZW5jb2RlZC5sZW5ndGgoKSAlIDQgIT0gMCkgewotICAgICAgICB0aHJvdyBu
ZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgIkJ5dGVzIGZp
ZWxkIGlzIG5vdCBlbmNvZGVkIGluIHN0YW5kYXJkIEJBU0U2NCB3aXRoIHBhZGRpbmdzOiAiICsg
ZW5jb2RlZCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQnl0ZVN0cmluZy5jb3B5RnJvbSgKLSAg
ICAgICAgICBCYXNlRW5jb2RpbmcuYmFzZTY0KCkuZGVjb2RlKGpzb24uZ2V0QXNTdHJpbmcoKSkp
OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIEVudW1WYWx1ZURlc2NyaXB0b3IgcGFyc2VFbnVt
KEVudW1EZXNjcmlwdG9yIGVudW1EZXNjcmlwdG9yLAotICAgICAgICBKc29uRWxlbWVudCBqc29u
KSB0aHJvd3MgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIFN0cmluZyB2
YWx1ZSA9IGpzb24uZ2V0QXNTdHJpbmcoKTsKLSAgICAgIEVudW1WYWx1ZURlc2NyaXB0b3IgcmVz
dWx0ID0gZW51bURlc2NyaXB0b3IuZmluZFZhbHVlQnlOYW1lKHZhbHVlKTsKLSAgICAgIGlmIChy
ZXN1bHQgPT0gbnVsbCkgewotICAgICAgICAvLyBUcnkgdG8gaW50ZXJwcmV0IHRoZSB2YWx1ZSBh
cyBhIG51bWJlci4KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBpbnQgbnVtZXJpY1ZhbHVlID0g
cGFyc2VJbnQzMihqc29uKTsKLSAgICAgICAgICBpZiAoZW51bURlc2NyaXB0b3IuZ2V0RmlsZSgp
LmdldFN5bnRheCgpID09IEZpbGVEZXNjcmlwdG9yLlN5bnRheC5QUk9UTzMpIHsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGVudW1EZXNjcmlwdG9yLmZpbmRWYWx1ZUJ5TnVtYmVyQ3JlYXRpbmdJZlVu
a25vd24obnVtZXJpY1ZhbHVlKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVz
dWx0ID0gZW51bURlc2NyaXB0b3IuZmluZFZhbHVlQnlOdW1iZXIobnVtZXJpY1ZhbHVlKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
biBlKSB7Ci0gICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLiBUaGlzIGV4Y2VwdGlvbiBpcyBhYm91
dCBpbnZhbGlkIGludDMyIHZhbHVlIHdlIGdldCBmcm9tIHBhcnNlSW50MzIoKSBidXQKLSAgICAg
ICAgICAvLyB0aGF0J3Mgbm90IHRoZSBleGNlcHRpb24gd2Ugd2FudCB0aGUgdXNlciB0byBzZWUu
IFNpbmNlIHJlc3VsdCA9PSBudWxsLCB3ZSB3aWxsIHRocm93Ci0gICAgICAgICAgLy8gYW4gZXhj
ZXB0aW9uIGxhdGVyLgotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocmVzdWx0ID09
IG51bGwpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uKAotICAgICAgICAgICAgICAiSW52YWxpZCBlbnVtIHZhbHVlOiAiICsgdmFsdWUgKyAiIGZv
ciBlbnVtIHR5cGU6ICIKLSAgICAgICAgICAgICAgKyBlbnVtRGVzY3JpcHRvci5nZXRGdWxsTmFt
ZSgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCi0gICAgcHJpdmF0ZSBPYmplY3QgcGFyc2VGaWVsZFZhbHVlKEZpZWxkRGVzY3JpcHRvciBm
aWVsZCwgSnNvbkVsZW1lbnQganNvbiwKLSAgICAgICAgTWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIp
IHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAgaWYgKGpzb24g
aW5zdGFuY2VvZiBKc29uTnVsbCkgewotICAgICAgICBpZiAoZmllbGQuZ2V0SmF2YVR5cGUoKSA9
PSBGaWVsZERlc2NyaXB0b3IuSmF2YVR5cGUuTUVTU0FHRQotICAgICAgICAgICAgJiYgZmllbGQu
Z2V0TWVzc2FnZVR5cGUoKS5nZXRGdWxsTmFtZSgpLmVxdWFscygKLSAgICAgICAgICAgICAgICAg
ICBWYWx1ZS5nZXREZXNjcmlwdG9yKCkuZ2V0RnVsbE5hbWUoKSkpIHsKLSAgICAgICAgICAvLyBG
b3IgZXZlcnkgb3RoZXIgdHlwZSwgIm51bGwiIG1lYW5zIGFic2VuY2UsIGJ1dCBmb3IgdGhlIHNw
ZWNpYWwKLSAgICAgICAgICAvLyBWYWx1ZSBtZXNzYWdlLCBpdCBtZWFucyB0aGUgIm51bGxfdmFs
dWUiIGZpZWxkIGhhcyBiZWVuIHNldC4KLSAgICAgICAgICBWYWx1ZSB2YWx1ZSA9IFZhbHVlLm5l
d0J1aWxkZXIoKS5zZXROdWxsVmFsdWVWYWx1ZSgwKS5idWlsZCgpOwotICAgICAgICAgIHJldHVy
biBidWlsZGVyLm5ld0J1aWxkZXJGb3JGaWVsZChmaWVsZCkubWVyZ2VGcm9tKAotICAgICAgICAg
ICAgICB2YWx1ZS50b0J5dGVTdHJpbmcoKSkuYnVpbGQoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIHN3aXRjaCAoZmllbGQuZ2V0VHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgSU5UMzI6Ci0gICAgICAgIGNhc2UgU0lOVDMyOgotICAgICAgICBjYXNlIFNG
SVhFRDMyOgotICAgICAgICAgIHJldHVybiBwYXJzZUludDMyKGpzb24pOwotCi0gICAgICAgIGNh
c2UgSU5UNjQ6Ci0gICAgICAgIGNhc2UgU0lOVDY0OgotICAgICAgICBjYXNlIFNGSVhFRDY0Ogot
ICAgICAgICAgIHJldHVybiBwYXJzZUludDY0KGpzb24pOwotCi0gICAgICAgIGNhc2UgQk9PTDoK
LSAgICAgICAgICByZXR1cm4gcGFyc2VCb29sKGpzb24pOwotCi0gICAgICAgIGNhc2UgRkxPQVQ6
Ci0gICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoanNvbik7Ci0gICAgICAgICAgCi0gICAgICAg
IGNhc2UgRE9VQkxFOgotICAgICAgICAgIHJldHVybiBwYXJzZURvdWJsZShqc29uKTsKLQotICAg
ICAgICBjYXNlIFVJTlQzMjoKLSAgICAgICAgY2FzZSBGSVhFRDMyOgotICAgICAgICAgIHJldHVy
biBwYXJzZVVpbnQzMihqc29uKTsKLQotICAgICAgICBjYXNlIFVJTlQ2NDoKLSAgICAgICAgY2Fz
ZSBGSVhFRDY0OgotICAgICAgICAgIHJldHVybiBwYXJzZVVpbnQ2NChqc29uKTsKLQotICAgICAg
ICBjYXNlIFNUUklORzoKLSAgICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmcoanNvbik7Ci0KLSAg
ICAgICAgY2FzZSBCWVRFUzoKLSAgICAgICAgICByZXR1cm4gcGFyc2VCeXRlcyhqc29uKTsKLQot
ICAgICAgICBjYXNlIEVOVU06Ci0gICAgICAgICAgcmV0dXJuIHBhcnNlRW51bShmaWVsZC5nZXRF
bnVtVHlwZSgpLCBqc29uKTsKLQotICAgICAgICBjYXNlIE1FU1NBR0U6Ci0gICAgICAgIGNhc2Ug
R1JPVVA6Ci0gICAgICAgICAgTWVzc2FnZS5CdWlsZGVyIHN1YkJ1aWxkZXIgPSBidWlsZGVyLm5l
d0J1aWxkZXJGb3JGaWVsZChmaWVsZCk7Ci0gICAgICAgICAgbWVyZ2UoanNvbiwgc3ViQnVpbGRl
cik7Ci0gICAgICAgICAgcmV0dXJuIHN1YkJ1aWxkZXIuYnVpbGQoKTsKLSAgICAgICAgICAKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVy
RXhjZXB0aW9uKAotICAgICAgICAgICAgICAiSW52YWxpZCBmaWVsZCB0eXBlOiAiICsgZmllbGQu
Z2V0VHlwZSgpKTsKLSAgICAgIH0gCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvdXRp
bC9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvdXRpbC9UaW1lVXRpbC5qYXZhIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL3V0aWwvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL3V0aWwvVGltZVV0aWwu
amF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzMzE4MmExYTMxM2M4NjM3NTU1
MzYwMDQ4ZjEyNzIwMzI5YWQxNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2phdmEvdXRpbC9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvdXRp
bC9UaW1lVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQ5ICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWYu
dXRpbDsKLQotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRHVyYXRpb247Ci1pbXBvcnQgY29t
Lmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXA7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdl
cjsKLWltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS50ZXh0LlNp
bXBsZURhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGls
LkdyZWdvcmlhbkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5UaW1lWm9uZTsKLQotLyoqCi0g
KiBVdGlsaXRpZXMgdG8gaGVscCBjcmVhdGUvbWFuaXB1bGF0ZSBUaW1lc3RhbXAvRHVyYXRpb24K
LSAqLwotcHVibGljIGNsYXNzIFRpbWVVdGlsIHsKLSAgLy8gVGltZXN0YW1wIGZvciAiMDAwMS0w
MS0wMVQwMDowMDowMFoiCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBUSU1FU1RBTVBfU0VD
T05EU19NSU4gPSAtNjIxMzU1OTY4MDBMOwotCi0gIC8vIFRpbWVzdGFtcCBmb3IgIjk5OTktMTIt
MzFUMjM6NTk6NTlaIgotICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgVElNRVNUQU1QX1NFQ09O
RFNfTUFYID0gMjUzNDAyMzAwNzk5TDsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIERVUkFU
SU9OX1NFQ09ORFNfTUlOID0gLTMxNTU3NjAwMDAwMEw7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwg
bG9uZyBEVVJBVElPTl9TRUNPTkRTX01BWCA9IDMxNTU3NjAwMDAwMEw7Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgbG9uZyBOQU5PU19QRVJfU0VDT05EID0gMTAwMDAwMDAwMDsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgbG9uZyBOQU5PU19QRVJfTUlMTElTRUNPTkQgPSAxMDAwMDAwOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIE5BTk9TX1BFUl9NSUNST1NFQ09ORCA9IDEwMDA7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTUlMTElTX1BFUl9TRUNPTkQgPSAxMDAwOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIE1JQ1JPU19QRVJfU0VDT05EID0gMTAwMDAwMDsKLQot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUaHJlYWRMb2NhbDxTaW1wbGVEYXRlRm9ybWF0PiB0aW1l
c3RhbXBGb3JtYXQgPQotICAgICAgbmV3IFRocmVhZExvY2FsPFNpbXBsZURhdGVGb3JtYXQ+KCkg
ewotICAgICAgICBwcm90ZWN0ZWQgU2ltcGxlRGF0ZUZvcm1hdCBpbml0aWFsVmFsdWUoKSB7Ci0g
ICAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWVzdGFtcEZvcm1hdCgpOwotICAgICAgICB9Ci0gICAg
ICB9OwotCi0gIHByaXZhdGUgc3RhdGljIFNpbXBsZURhdGVGb3JtYXQgY3JlYXRlVGltZXN0YW1w
Rm9ybWF0KCkgewotICAgIFNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3Jt
YXQoInl5eXktTU0tZGQnVCdISDptbTpzcyIpOwotICAgIEdyZWdvcmlhbkNhbGVuZGFyIGNhbGVu
ZGFyID0KLSAgICAgIG5ldyBHcmVnb3JpYW5DYWxlbmRhcihUaW1lWm9uZS5nZXRUaW1lWm9uZSgi
VVRDIikpOwotICAgIC8vIFdlIHVzZSBQcm9sZXB0aWMgR3JlZ29yaWFuIENhbGVuZGFyIChpLmUu
LCBHcmVnb3JpYW4gY2FsZW5kYXIgZXh0ZW5kcwotICAgIC8vIGJhY2t3YXJkcyB0byB5ZWFyIG9u
ZSkgZm9yIHRpbWVzdGFtcCBmb3JtYXRpbmcuCi0gICAgY2FsZW5kYXIuc2V0R3JlZ29yaWFuQ2hh
bmdlKG5ldyBEYXRlKExvbmcuTUlOX1ZBTFVFKSk7Ci0gICAgc2RmLnNldENhbGVuZGFyKGNhbGVu
ZGFyKTsKLSAgICByZXR1cm4gc2RmOwotICB9Ci0KLSAgcHJpdmF0ZSBUaW1lVXRpbCgpIHt9Ci0K
LSAgLyoqCi0gICAqIENvbnZlcnQgVGltZXN0YW1wIHRvIFJGQyAzMzM5IGRhdGUgc3RyaW5nIGZv
cm1hdC4gVGhlIG91dHB1dCB3aWxsIGFsd2F5cwotICAgKiBiZSBaLW5vcm1hbGl6ZWQgYW5kIHVz
ZXMgMywgNiBvciA5IGZyYWN0aW9uYWwgZGlnaXRzIGFzIHJlcXVpcmVkIHRvCi0gICAqIHJlcHJl
c2VudCB0aGUgZXhhY3QgdmFsdWUuIE5vdGUgdGhhdCBUaW1lc3RhbXAgY2FuIG9ubHkgcmVwcmVz
ZW50IHRpbWUKLSAgICogZnJvbSAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIz
OjU5OjU5Ljk5OTk5OTk5OVouIFNlZQotICAgKiBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZj
MzMzOS50eHQKLSAgICoKLSAgICogPHA+RXhhbXBsZSBvZiBnZW5lcmF0ZWQgZm9ybWF0OiAiMTk3
Mi0wMS0wMVQxMDowMDoyMC4wMjFaIgotICAgKgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgcmVw
cmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHRpbWVzdGFtcC4KLSAgICogQHRocm93cyBJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGdpdmVuIHRpbWVzdGFtcCBpcyBub3QgaW4gdGhlCi0g
ICAqICAgICAgICAgdmFsaWQgcmFuZ2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyB0
b1N0cmluZyhUaW1lc3RhbXAgdGltZXN0YW1wKQotICAgIHRocm93cyBJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24gewotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIo
KTsKLSAgICAvLyBGb3JtYXQgdGhlIHNlY29uZHMgcGFydC4KLSAgICBpZiAodGltZXN0YW1wLmdl
dFNlY29uZHMoKSA8IFRJTUVTVEFNUF9TRUNPTkRTX01JTgotICAgICAgICB8fCB0aW1lc3RhbXAu
Z2V0U2Vjb25kcygpID4gVElNRVNUQU1QX1NFQ09ORFNfTUFYKSB7Ci0gICAgICB0aHJvdyBuZXcg
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaW1lc3RhbXAgaXMgb3V0IG9mIHJhbmdlLiIpOwot
ICAgIH0KLSAgICBEYXRlIGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAuZ2V0U2Vjb25kcygpICog
TUlMTElTX1BFUl9TRUNPTkQpOwotICAgIHJlc3VsdC5hcHBlbmQodGltZXN0YW1wRm9ybWF0Lmdl
dCgpLmZvcm1hdChkYXRlKSk7Ci0gICAgLy8gRm9ybWF0IHRoZSBuYW5vcyBwYXJ0LgotICAgIGlm
ICh0aW1lc3RhbXAuZ2V0TmFub3MoKSA8IDAgfHwgdGltZXN0YW1wLmdldE5hbm9zKCkgPj0gTkFO
T1NfUEVSX1NFQ09ORCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlv
bigiVGltZXN0YW1wIGhhcyBpbnZhbGlkIG5hbm9zIHZhbHVlLiIpOwotICAgIH0KLSAgICBpZiAo
dGltZXN0YW1wLmdldE5hbm9zKCkgIT0gMCkgewotICAgICAgcmVzdWx0LmFwcGVuZCgiLiIpOwot
ICAgICAgcmVzdWx0LmFwcGVuZChmb3JtYXROYW5vcyh0aW1lc3RhbXAuZ2V0TmFub3MoKSkpOwot
ICAgIH0KLSAgICByZXN1bHQuYXBwZW5kKCJaIik7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFBhcnNlIGZyb20gUkZDIDMzMzkgZGF0ZSBzdHJpbmcg
dG8gVGltZXN0YW1wLiBUaGlzIG1ldGhvZCBhY2NlcHRzIGFsbAotICAgKiBvdXRwdXRzIG9mIHtA
bGluayAjdG9TdHJpbmcoVGltZXN0YW1wKX0gYW5kIGl0IGFsc28gYWNjZXB0cyBhbnkgZnJhY3Rp
b25hbAotICAgKiBkaWdpdHMgKG9yIG5vbmUpIGFuZCBhbnkgb2Zmc2V0IGFzIGxvbmcgYXMgdGhl
eSBmaXQgaW50byBuYW5vLXNlY29uZHMKLSAgICogcHJlY2lzaW9uLgotICAgKgotICAgKiA8cD5F
eGFtcGxlIG9mIGFjY2VwdGVkIGZvcm1hdDogIjE5NzItMDEtMDFUMTA6MDA6MjAuMDIxLTA1OjAw
IgotICAgKgotICAgKiBAcmV0dXJuIEEgVGltZXN0YW1wIHBhcnNlZCBmcm9tIHRoZSBzdHJpbmcu
Ci0gICAqIEB0aHJvd3MgUGFyc2VFeGNlcHRpb24gaWYgcGFyc2luZyBmYWlscy4KLSAgICovCi0K
LSAgcHVibGljIHN0YXRpYyBUaW1lc3RhbXAgcGFyc2VUaW1lc3RhbXAoU3RyaW5nIHZhbHVlKSB0
aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgIGludCBkYXlPZmZzZXQgPSB2YWx1ZS5pbmRleE9m
KCdUJyk7Ci0gICAgaWYgKGRheU9mZnNldCA9PSAtMSkgewotICAgICAgdGhyb3cgbmV3IFBhcnNl
RXhjZXB0aW9uKAotICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIHRpbWVzdGFtcDogaW52YWxpZCB0
aW1lc3RhbXAgXCIiICsgdmFsdWUgKyAiXCIiLCAwKTsKLSAgICB9Ci0gICAgaW50IHRpbWV6b25l
T2Zmc2V0UG9zaXRpb24gPSB2YWx1ZS5pbmRleE9mKCdaJywgZGF5T2Zmc2V0KTsKLSAgICBpZiAo
dGltZXpvbmVPZmZzZXRQb3NpdGlvbiA9PSAtMSkgewotICAgICAgdGltZXpvbmVPZmZzZXRQb3Np
dGlvbiA9IHZhbHVlLmluZGV4T2YoJysnLCBkYXlPZmZzZXQpOwotICAgIH0KLSAgICBpZiAodGlt
ZXpvbmVPZmZzZXRQb3NpdGlvbiA9PSAtMSkgewotICAgICAgdGltZXpvbmVPZmZzZXRQb3NpdGlv
biA9IHZhbHVlLmluZGV4T2YoJy0nLCBkYXlPZmZzZXQpOwotICAgIH0KLSAgICBpZiAodGltZXpv
bmVPZmZzZXRQb3NpdGlvbiA9PSAtMSkgewotICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9u
KAotICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIHRpbWVzdGFtcDogbWlzc2luZyB2YWxpZCB0aW1l
em9uZSBvZmZzZXQuIiwgMCk7Ci0gICAgfQotICAgIC8vIFBhcnNlIHNlY29uZHMgYW5kIG5hbm9z
LgotICAgIFN0cmluZyB0aW1lVmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdGltZXpvbmVPZmZz
ZXRQb3NpdGlvbik7Ci0gICAgU3RyaW5nIHNlY29uZFZhbHVlID0gdGltZVZhbHVlOwotICAgIFN0
cmluZyBuYW5vVmFsdWUgPSAiIjsKLSAgICBpbnQgcG9pbnRQb3NpdGlvbiA9IHRpbWVWYWx1ZS5p
bmRleE9mKCcuJyk7Ci0gICAgaWYgKHBvaW50UG9zaXRpb24gIT0gLTEpIHsKLSAgICAgIHNlY29u
ZFZhbHVlID0gdGltZVZhbHVlLnN1YnN0cmluZygwLCBwb2ludFBvc2l0aW9uKTsKLSAgICAgIG5h
bm9WYWx1ZSA9IHRpbWVWYWx1ZS5zdWJzdHJpbmcocG9pbnRQb3NpdGlvbiArIDEpOwotICAgIH0K
LSAgICBEYXRlIGRhdGUgPSB0aW1lc3RhbXBGb3JtYXQuZ2V0KCkucGFyc2Uoc2Vjb25kVmFsdWUp
OwotICAgIGxvbmcgc2Vjb25kcyA9IGRhdGUuZ2V0VGltZSgpIC8gTUlMTElTX1BFUl9TRUNPTkQ7
Ci0gICAgaW50IG5hbm9zID0gbmFub1ZhbHVlLmlzRW1wdHkoKSA/IDAgOiBwYXJzZU5hbm9zKG5h
bm9WYWx1ZSk7Ci0gICAgLy8gUGFyc2UgdGltZXpvbmUgb2Zmc2V0cy4KLSAgICBpZiAodmFsdWUu
Y2hhckF0KHRpbWV6b25lT2Zmc2V0UG9zaXRpb24pID09ICdaJykgewotICAgICAgaWYgKHZhbHVl
Lmxlbmd0aCgpICE9IHRpbWV6b25lT2Zmc2V0UG9zaXRpb24gKyAxKSB7Ci0gICAgICAgIHRocm93
IG5ldyBQYXJzZUV4Y2VwdGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIHRpbWVzdGFt
cDogaW52YWxpZCB0cmFpbGluZyBkYXRhIFwiIgotICAgICAgICAgICsgdmFsdWUuc3Vic3RyaW5n
KHRpbWV6b25lT2Zmc2V0UG9zaXRpb24pICsgIlwiIiwgMCk7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIFN0cmluZyBvZmZzZXRWYWx1ZSA9IHZhbHVlLnN1YnN0cmluZyh0aW1lem9uZU9m
ZnNldFBvc2l0aW9uICsgMSk7Ci0gICAgICBsb25nIG9mZnNldCA9IHBhcnNlVGltZXpvbmVPZmZz
ZXQob2Zmc2V0VmFsdWUpOwotICAgICAgaWYgKHZhbHVlLmNoYXJBdCh0aW1lem9uZU9mZnNldFBv
c2l0aW9uKSA9PSAnKycpIHsKLSAgICAgICAgc2Vjb25kcyAtPSBvZmZzZXQ7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBzZWNvbmRzICs9IG9mZnNldDsKLSAgICAgIH0KLSAgICB9Ci0gICAgdHJ5
IHsKLSAgICAgIHJldHVybiBub3JtYWxpemVkVGltZXN0YW1wKHNlY29uZHMsIG5hbm9zKTsKLSAg
ICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3
IFBhcnNlRXhjZXB0aW9uKAotICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIHRpbWVzdG1hcDogdGlt
ZXN0YW1wIGlzIG91dCBvZiByYW5nZS4iLCAwKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICog
Q29udmVydCBEdXJhdGlvbiB0byBzdHJpbmcgZm9ybWF0LiBUaGUgc3RyaW5nIGZvcm1hdCB3aWxs
IGNvbnRhaW5zIDMsIDYsCi0gICAqIG9yIDkgZnJhY3Rpb25hbCBkaWdpdHMgZGVwZW5kaW5nIG9u
IHRoZSBwcmVjaXNpb24gcmVxdWlyZWQgdG8gcmVwcmVzZW50Ci0gICAqIHRoZSBleGFjdCBEdXJh
dGlvbiB2YWx1ZS4gRm9yIGV4YW1wbGU6ICIxcyIsICIxLjAxMHMiLCAiMS4wMDAwMDAxMDBzIiwK
LSAgICogIi0zLjEwMHMiIFRoZSByYW5nZSB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBieSBEdXJh
dGlvbiBpcyBmcm9tCi0gICAqIC0zMTUsNTc2LDAwMCwwMDAgdG8gKzMxNSw1NzYsMDAwLDAwMCBp
bmNsdXNpdmUgKGluIHNlY29uZHMpLgotICAgKgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgcmVw
cmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGR1cmF0aW9uLgotICAgKiBAdGhyb3dzIElsbGVnYWxB
cmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4gZHVyYXRpb24gaXMgbm90IGluIHRoZSB2YWxp
ZAotICAgKiAgICAgICAgIHJhbmdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmcoRHVyYXRpb24gZHVyYXRpb24pCi0gICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2Vw
dGlvbiB7Ci0gICAgaWYgKGR1cmF0aW9uLmdldFNlY29uZHMoKSA8IERVUkFUSU9OX1NFQ09ORFNf
TUlOCi0gICAgICB8fCBkdXJhdGlvbi5nZXRTZWNvbmRzKCkgPiBEVVJBVElPTl9TRUNPTkRTX01B
WCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRHVyYXRpb24g
aXMgb3V0IG9mIHZhbGlkIHJhbmdlLiIpOwotICAgIH0KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3Vs
dCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgbG9uZyBzZWNvbmRzID0gZHVyYXRpb24uZ2V0
U2Vjb25kcygpOwotICAgIGludCBuYW5vcyA9IGR1cmF0aW9uLmdldE5hbm9zKCk7Ci0gICAgaWYg
KHNlY29uZHMgPCAwIHx8IG5hbm9zIDwgMCkgewotICAgICAgaWYgKHNlY29uZHMgPiAwIHx8IG5h
bm9zID4gMCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAot
ICAgICAgICAgICAgIkludmFsaWQgZHVyYXRpb246IHNlY29uZHMgdmFsdWUgYW5kIG5hbm9zIHZh
bHVlIG11c3QgaGF2ZSB0aGUgc2FtZSIKLSAgICAgICAgICAgICsgInNpZ24uIik7Ci0gICAgICB9
Ci0gICAgICByZXN1bHQuYXBwZW5kKCItIik7Ci0gICAgICBzZWNvbmRzID0gLXNlY29uZHM7Ci0g
ICAgICBuYW5vcyA9IC1uYW5vczsKLSAgICB9Ci0gICAgcmVzdWx0LmFwcGVuZChzZWNvbmRzKTsK
LSAgICBpZiAobmFub3MgIT0gMCkgewotICAgICAgcmVzdWx0LmFwcGVuZCgiLiIpOwotICAgICAg
cmVzdWx0LmFwcGVuZChmb3JtYXROYW5vcyhuYW5vcykpOwotICAgIH0KLSAgICByZXN1bHQuYXBw
ZW5kKCJzIik7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIFBhcnNlIGZyb20gYSBzdHJpbmcgdG8gcHJvZHVjZSBhIGR1cmF0aW9uLgotICAgKgotICAg
KiBAcmV0dXJuIEEgRHVyYXRpb24gcGFyc2VkIGZyb20gdGhlIHN0cmluZy4KLSAgICogQHRocm93
cyBQYXJzZUV4Y2VwdGlvbiBpZiBwYXJzaW5nIGZhaWxzLgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyBEdXJhdGlvbiBwYXJzZUR1cmF0aW9uKFN0cmluZyB2YWx1ZSkgdGhyb3dzIFBhcnNlRXhjZXB0
aW9uIHsKLSAgICAvLyBNdXN0IGVuZGVkIHdpdGggInMiLgotICAgIGlmICh2YWx1ZS5pc0VtcHR5
KCkgfHwgdmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCgpIC0gMSkgIT0gJ3MnKSB7Ci0gICAgICB0
aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oIkludmFsaWQgZHVyYXRpb24gc3RyaW5nOiAiICsgdmFs
dWUsIDApOwotICAgIH0KLSAgICBib29sZWFuIG5lZ2F0aXZlID0gZmFsc2U7Ci0gICAgaWYgKHZh
bHVlLmNoYXJBdCgwKSA9PSAnLScpIHsKLSAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKLSAgICAgIHZh
bHVlID0gdmFsdWUuc3Vic3RyaW5nKDEpOwotICAgIH0KLSAgICBTdHJpbmcgc2Vjb25kVmFsdWUg
PSB2YWx1ZS5zdWJzdHJpbmcoMCwgdmFsdWUubGVuZ3RoKCkgLSAxKTsKLSAgICBTdHJpbmcgbmFu
b1ZhbHVlID0gIiI7Ci0gICAgaW50IHBvaW50UG9zaXRpb24gPSBzZWNvbmRWYWx1ZS5pbmRleE9m
KCcuJyk7Ci0gICAgaWYgKHBvaW50UG9zaXRpb24gIT0gLTEpIHsKLSAgICAgIG5hbm9WYWx1ZSA9
IHNlY29uZFZhbHVlLnN1YnN0cmluZyhwb2ludFBvc2l0aW9uICsgMSk7Ci0gICAgICBzZWNvbmRW
YWx1ZSA9IHNlY29uZFZhbHVlLnN1YnN0cmluZygwLCBwb2ludFBvc2l0aW9uKTsKLSAgICB9Ci0g
ICAgbG9uZyBzZWNvbmRzID0gTG9uZy5wYXJzZUxvbmcoc2Vjb25kVmFsdWUpOwotICAgIGludCBu
YW5vcyA9IG5hbm9WYWx1ZS5pc0VtcHR5KCkgPyAwIDogcGFyc2VOYW5vcyhuYW5vVmFsdWUpOwot
ICAgIGlmIChzZWNvbmRzIDwgMCkgewotICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCJJ
bnZhbGlkIGR1cmF0aW9uIHN0cmluZzogIiArIHZhbHVlLCAwKTsKLSAgICB9Ci0gICAgaWYgKG5l
Z2F0aXZlKSB7Ci0gICAgICBzZWNvbmRzID0gLXNlY29uZHM7Ci0gICAgICBuYW5vcyA9IC1uYW5v
czsKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBub3JtYWxpemVkRHVyYXRpb24oc2Vj
b25kcywgbmFub3MpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7
Ci0gICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oIkR1cmF0aW9uIHZhbHVlIGlzIG91dCBv
ZiByYW5nZS4iLCAwKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgVGltZXN0
YW1wIGZyb20gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZWxhcHNlZCBmcm9tIHRoZSBlcG9j
aC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGltZXN0YW1wIGNyZWF0ZVRpbWVzdGFtcEZyb21N
aWxsaXMobG9uZyBtaWxsaXNlY29uZHMpIHsKLSAgICByZXR1cm4gbm9ybWFsaXplZFRpbWVzdGFt
cChtaWxsaXNlY29uZHMgLyBNSUxMSVNfUEVSX1NFQ09ORCwKLSAgICAgIChpbnQpIChtaWxsaXNl
Y29uZHMgJSBNSUxMSVNfUEVSX1NFQ09ORCAqIE5BTk9TX1BFUl9NSUxMSVNFQ09ORCkpOwotICB9
Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gdGhlIG51bWJlciBvZiBtaWxs
aXNlY29uZHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIER1cmF0aW9uIGNyZWF0ZUR1cmF0aW9u
RnJvbU1pbGxpcyhsb25nIG1pbGxpc2Vjb25kcykgewotICAgIHJldHVybiBub3JtYWxpemVkRHVy
YXRpb24obWlsbGlzZWNvbmRzIC8gTUlMTElTX1BFUl9TRUNPTkQsCi0gICAgICAoaW50KSAobWls
bGlzZWNvbmRzICUgTUlMTElTX1BFUl9TRUNPTkQgKiBOQU5PU19QRVJfTUlMTElTRUNPTkQpKTsK
LSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGEgVGltZXN0YW1wIHRvIHRoZSBudW1iZXIgb2Yg
bWlsbGlzZWNvbmRzIGVsYXBzZWQgZnJvbSB0aGUgZXBvY2guCi0gICAqCi0gICAqIDxwPlRoZSBy
ZXN1bHQgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgbWlsbGlzZWNvbmQuIEUu
Zy4sIGlmIHRoZQotICAgKiB0aW1lc3RhbXAgcmVwcmVzZW50cyAiMTk2OS0xMi0zMVQyMzo1OTo1
OS45OTk5OTk5OTlaIiwgaXQgd2lsbCBiZSByb3VuZGVkCi0gICAqIHRvIC0xIG1pbGxpc2Vjb25k
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBsb25nIHRvTWlsbGlzKFRpbWVzdGFtcCB0aW1lc3Rh
bXApIHsKLSAgICByZXR1cm4gdGltZXN0YW1wLmdldFNlY29uZHMoKSAqIE1JTExJU19QRVJfU0VD
T05EICsgdGltZXN0YW1wLmdldE5hbm9zKCkKLSAgICAgIC8gTkFOT1NfUEVSX01JTExJU0VDT05E
OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnQgYSBEdXJhdGlvbiB0byB0aGUgbnVtYmVyIG9m
IG1pbGxpc2Vjb25kcy5UaGUgcmVzdWx0IHdpbGwgYmUKLSAgICogcm91bmRlZCB0b3dhcmRzIDAg
dG8gdGhlIG5lYXJlc3QgbWlsbGlzZWNvbmQuIEUuZy4sIGlmIHRoZSBkdXJhdGlvbgotICAgKiBy
ZXByZXNlbnRzIC0xIG5hbm9zZWNvbmQsIGl0IHdpbGwgYmUgcm91bmRlZCB0byAwLgotICAgKi8K
LSAgcHVibGljIHN0YXRpYyBsb25nIHRvTWlsbGlzKER1cmF0aW9uIGR1cmF0aW9uKSB7Ci0gICAg
cmV0dXJuIGR1cmF0aW9uLmdldFNlY29uZHMoKSAqIE1JTExJU19QRVJfU0VDT05EICsgZHVyYXRp
b24uZ2V0TmFub3MoKQotICAgICAgLyBOQU5PU19QRVJfTUlMTElTRUNPTkQ7Ci0gIH0KLQotICAv
KioKLSAgICogQ3JlYXRlIGEgVGltZXN0YW1wIGZyb20gdGhlIG51bWJlciBvZiBtaWNyb3NlY29u
ZHMgZWxhcHNlZCBmcm9tIHRoZSBlcG9jaC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGltZXN0
YW1wIGNyZWF0ZVRpbWVzdGFtcEZyb21NaWNyb3MobG9uZyBtaWNyb3NlY29uZHMpIHsKLSAgICBy
ZXR1cm4gbm9ybWFsaXplZFRpbWVzdGFtcChtaWNyb3NlY29uZHMgLyBNSUNST1NfUEVSX1NFQ09O
RCwKLSAgICAgIChpbnQpIChtaWNyb3NlY29uZHMgJSBNSUNST1NfUEVSX1NFQ09ORCAqIE5BTk9T
X1BFUl9NSUNST1NFQ09ORCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIER1cmF0aW9u
IGZyb20gdGhlIG51bWJlciBvZiBtaWNyb3NlY29uZHMuCi0gICAqLwotICBwdWJsaWMgc3RhdGlj
IER1cmF0aW9uIGNyZWF0ZUR1cmF0aW9uRnJvbU1pY3Jvcyhsb25nIG1pY3Jvc2Vjb25kcykgewot
ICAgIHJldHVybiBub3JtYWxpemVkRHVyYXRpb24obWljcm9zZWNvbmRzIC8gTUlDUk9TX1BFUl9T
RUNPTkQsCi0gICAgICAoaW50KSAobWljcm9zZWNvbmRzICUgTUlDUk9TX1BFUl9TRUNPTkQgKiBO
QU5PU19QRVJfTUlDUk9TRUNPTkQpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0IGEgVGlt
ZXN0YW1wIHRvIHRoZSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIGVsYXBzZWQgZnJvbSB0aGUgZXBv
Y2guCi0gICAqCi0gICAqIDxwPlRoZSByZXN1bHQgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gdGhl
IG5lYXJlc3QgbWljcm9zZWNvbmQuIEUuZy4sIGlmIHRoZQotICAgKiB0aW1lc3RhbXAgcmVwcmVz
ZW50cyAiMTk2OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5OTlaIiwgaXQgd2lsbCBiZSByb3VuZGVk
Ci0gICAqIHRvIC0xIG1pbGxpc2Vjb25kLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBsb25nIHRv
TWljcm9zKFRpbWVzdGFtcCB0aW1lc3RhbXApIHsKLSAgICByZXR1cm4gdGltZXN0YW1wLmdldFNl
Y29uZHMoKSAqIE1JQ1JPU19QRVJfU0VDT05EICsgdGltZXN0YW1wLmdldE5hbm9zKCkKLSAgICAg
IC8gTkFOT1NfUEVSX01JQ1JPU0VDT05EOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnQgYSBE
dXJhdGlvbiB0byB0aGUgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcy5UaGUgcmVzdWx0IHdpbGwgYmUK
LSAgICogcm91bmRlZCB0b3dhcmRzIDAgdG8gdGhlIG5lYXJlc3QgbWljcm9zZWNvbmRzLiBFLmcu
LCBpZiB0aGUgZHVyYXRpb24KLSAgICogcmVwcmVzZW50cyAtMSBuYW5vc2Vjb25kLCBpdCB3aWxs
IGJlIHJvdW5kZWQgdG8gMC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgbG9uZyB0b01pY3JvcyhE
dXJhdGlvbiBkdXJhdGlvbikgewotICAgIHJldHVybiBkdXJhdGlvbi5nZXRTZWNvbmRzKCkgKiBN
SUNST1NfUEVSX1NFQ09ORCArIGR1cmF0aW9uLmdldE5hbm9zKCkKLSAgICAgIC8gTkFOT1NfUEVS
X01JQ1JPU0VDT05EOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIFRpbWVzdGFtcCBmcm9t
IHRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgZWxhcHNlZCBmcm9tIHRoZSBlcG9jaC4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgVGltZXN0YW1wIGNyZWF0ZVRpbWVzdGFtcEZyb21OYW5vcyhsb25n
IG5hbm9zZWNvbmRzKSB7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZWRUaW1lc3RhbXAobmFub3NlY29u
ZHMgLyBOQU5PU19QRVJfU0VDT05ELAotICAgICAgKGludCkgKG5hbm9zZWNvbmRzICUgTkFOT1Nf
UEVSX1NFQ09ORCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20g
dGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgRHVyYXRp
b24gY3JlYXRlRHVyYXRpb25Gcm9tTmFub3MobG9uZyBuYW5vc2Vjb25kcykgewotICAgIHJldHVy
biBub3JtYWxpemVkRHVyYXRpb24obmFub3NlY29uZHMgLyBOQU5PU19QRVJfU0VDT05ELAotICAg
ICAgKGludCkgKG5hbm9zZWNvbmRzICUgTkFOT1NfUEVSX1NFQ09ORCkpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIENvbnZlcnQgYSBUaW1lc3RhbXAgdG8gdGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBl
bGFwc2VkIGZyb20gdGhlIGVwb2NoLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBsb25nIHRvTmFu
b3MoVGltZXN0YW1wIHRpbWVzdGFtcCkgewotICAgIHJldHVybiB0aW1lc3RhbXAuZ2V0U2Vjb25k
cygpICogTkFOT1NfUEVSX1NFQ09ORCArIHRpbWVzdGFtcC5nZXROYW5vcygpOwotICB9Ci0KLSAg
LyoqCi0gICAqIENvbnZlcnQgYSBEdXJhdGlvbiB0byB0aGUgbnVtYmVyIG9mIG5hbm9zZWNvbmRz
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBsb25nIHRvTmFub3MoRHVyYXRpb24gZHVyYXRpb24p
IHsKLSAgICByZXR1cm4gZHVyYXRpb24uZ2V0U2Vjb25kcygpICogTkFOT1NfUEVSX1NFQ09ORCAr
IGR1cmF0aW9uLmdldE5hbm9zKCk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBjdXJyZW50
IHRpbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRpbWVzdGFtcCBnZXRDdXJyZW50VGltZSgp
IHsKLSAgICByZXR1cm4gY3JlYXRlVGltZXN0YW1wRnJvbU1pbGxpcyhTeXN0ZW0uY3VycmVudFRp
bWVNaWxsaXMoKSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBlcG9jaC4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgVGltZXN0YW1wIGdldEVwb2NoKCkgewotICAgIHJldHVybiBUaW1lc3Rh
bXAuZ2V0RGVmYXVsdEluc3RhbmNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsY3VsYXRlIHRo
ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHRpbWVzdGFtcHMuCi0gICAqLwotICBwdWJsaWMgc3Rh
dGljIER1cmF0aW9uIGRpc3RhbmNlKFRpbWVzdGFtcCBmcm9tLCBUaW1lc3RhbXAgdG8pIHsKLSAg
ICByZXR1cm4gbm9ybWFsaXplZER1cmF0aW9uKHRvLmdldFNlY29uZHMoKSAtIGZyb20uZ2V0U2Vj
b25kcygpLAotICAgICAgdG8uZ2V0TmFub3MoKSAtIGZyb20uZ2V0TmFub3MoKSk7Ci0gIH0KLQot
ICAvKioKLSAgICogQWRkIGEgZHVyYXRpb24gdG8gYSB0aW1lc3RhbXAuCi0gICAqLwotICBwdWJs
aWMgc3RhdGljIFRpbWVzdGFtcCBhZGQoVGltZXN0YW1wIHN0YXJ0LCBEdXJhdGlvbiBsZW5ndGgp
IHsKLSAgICByZXR1cm4gbm9ybWFsaXplZFRpbWVzdGFtcChzdGFydC5nZXRTZWNvbmRzKCkgKyBs
ZW5ndGguZ2V0U2Vjb25kcygpLAotICAgICAgc3RhcnQuZ2V0TmFub3MoKSArIGxlbmd0aC5nZXRO
YW5vcygpKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdWJ0cmFjdCBhIGR1cmF0aW9uIGZyb20gYSB0
aW1lc3RhbXAuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRpbWVzdGFtcCBzdWJ0cmFjdChUaW1l
c3RhbXAgc3RhcnQsIER1cmF0aW9uIGxlbmd0aCkgewotICAgIHJldHVybiBub3JtYWxpemVkVGlt
ZXN0YW1wKHN0YXJ0LmdldFNlY29uZHMoKSAtIGxlbmd0aC5nZXRTZWNvbmRzKCksCi0gICAgICBz
dGFydC5nZXROYW5vcygpIC0gbGVuZ3RoLmdldE5hbm9zKCkpOwotICB9Ci0KLSAgLyoqCi0gICAq
IEFkZCB0d28gZHVyYXRpb25zLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBEdXJhdGlvbiBhZGQo
RHVyYXRpb24gZDEsIER1cmF0aW9uIGQyKSB7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZWREdXJhdGlv
bihkMS5nZXRTZWNvbmRzKCkgKyBkMi5nZXRTZWNvbmRzKCksCi0gICAgICBkMS5nZXROYW5vcygp
ICsgZDIuZ2V0TmFub3MoKSk7Ci0gIH0KLQotICAvKioKLSAgICogU3VidHJhY3QgYSBkdXJhdGlv
biBmcm9tIGFub3RoZXIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIER1cmF0aW9uIHN1YnRyYWN0
KER1cmF0aW9uIGQxLCBEdXJhdGlvbiBkMikgewotICAgIHJldHVybiBub3JtYWxpemVkRHVyYXRp
b24oZDEuZ2V0U2Vjb25kcygpIC0gZDIuZ2V0U2Vjb25kcygpLAotICAgICAgZDEuZ2V0TmFub3Mo
KSAtIGQyLmdldE5hbm9zKCkpOwotICB9Ci0KLSAgLy8gTXVsdGlwbGljYXRpb25zIGFuZCBkaXZp
c2lvbnMuCi0KLSAgcHVibGljIHN0YXRpYyBEdXJhdGlvbiBtdWx0aXBseShEdXJhdGlvbiBkdXJh
dGlvbiwgZG91YmxlIHRpbWVzKSB7Ci0gICAgZG91YmxlIHJlc3VsdCA9IGR1cmF0aW9uLmdldFNl
Y29uZHMoKSAqIHRpbWVzICsgZHVyYXRpb24uZ2V0TmFub3MoKSAqIHRpbWVzCi0gICAgICAvIDEw
MDAwMDAwMDAuMDsKLSAgICBpZiAocmVzdWx0IDwgTG9uZy5NSU5fVkFMVUUgfHwgcmVzdWx0ID4g
TG9uZy5NQVhfVkFMVUUpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRp
b24oIlJlc3VsdCBpcyBvdXQgb2YgdmFsaWQgcmFuZ2UuIik7Ci0gICAgfQotICAgIGxvbmcgc2Vj
b25kcyA9IChsb25nKSByZXN1bHQ7Ci0gICAgaW50IG5hbm9zID0gKGludCkgKChyZXN1bHQgLSBz
ZWNvbmRzKSAqIDEwMDAwMDAwMDApOwotICAgIHJldHVybiBub3JtYWxpemVkRHVyYXRpb24oc2Vj
b25kcywgbmFub3MpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIER1cmF0aW9uIGRpdmlkZShE
dXJhdGlvbiBkdXJhdGlvbiwgZG91YmxlIHZhbHVlKSB7Ci0gICAgcmV0dXJuIG11bHRpcGx5KGR1
cmF0aW9uLCAxLjAgLyB2YWx1ZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgRHVyYXRpb24g
bXVsdGlwbHkoRHVyYXRpb24gZHVyYXRpb24sIGxvbmcgdGltZXMpIHsKLSAgICByZXR1cm4gY3Jl
YXRlRHVyYXRpb25Gcm9tQmlnSW50ZWdlcigKLSAgICAgIHRvQmlnSW50ZWdlcihkdXJhdGlvbiku
bXVsdGlwbHkodG9CaWdJbnRlZ2VyKHRpbWVzKSkpOwotICB9Ci0gIAotICBwdWJsaWMgc3RhdGlj
IER1cmF0aW9uIGRpdmlkZShEdXJhdGlvbiBkdXJhdGlvbiwgbG9uZyB0aW1lcykgewotICAgIHJl
dHVybiBjcmVhdGVEdXJhdGlvbkZyb21CaWdJbnRlZ2VyKAotICAgICAgdG9CaWdJbnRlZ2VyKGR1
cmF0aW9uKS5kaXZpZGUodG9CaWdJbnRlZ2VyKHRpbWVzKSkpOwotICB9Ci0gIAotICBwdWJsaWMg
c3RhdGljIGxvbmcgZGl2aWRlKER1cmF0aW9uIGQxLCBEdXJhdGlvbiBkMikgewotICAgIHJldHVy
biB0b0JpZ0ludGVnZXIoZDEpLmRpdmlkZSh0b0JpZ0ludGVnZXIoZDIpKS5sb25nVmFsdWUoKTsK
LSAgfQotICAKLSAgcHVibGljIHN0YXRpYyBEdXJhdGlvbiByZW1haW5kZXIoRHVyYXRpb24gZDEs
IER1cmF0aW9uIGQyKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uRnJvbUJpZ0ludGVnZXIo
Ci0gICAgICB0b0JpZ0ludGVnZXIoZDEpLnJlbWFpbmRlcih0b0JpZ0ludGVnZXIoZDIpKSk7Ci0g
IH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEJpZ0ludGVnZXIgTkFOT1NfUEVSX1NFQ09O
RF9CSUdfSU5URUdFUiA9Ci0gICAgICBuZXcgQmlnSW50ZWdlcihTdHJpbmcudmFsdWVPZihOQU5P
U19QRVJfU0VDT05EKSk7Ci0gIAotICBwcml2YXRlIHN0YXRpYyBCaWdJbnRlZ2VyIHRvQmlnSW50
ZWdlcihEdXJhdGlvbiBkdXJhdGlvbikgewotICAgIHJldHVybiB0b0JpZ0ludGVnZXIoZHVyYXRp
b24uZ2V0U2Vjb25kcygpKQotICAgICAgLm11bHRpcGx5KE5BTk9TX1BFUl9TRUNPTkRfQklHX0lO
VEVHRVIpCi0gICAgICAuYWRkKHRvQmlnSW50ZWdlcihkdXJhdGlvbi5nZXROYW5vcygpKSk7Ci0g
IH0KLSAgCi0gIHByaXZhdGUgc3RhdGljIEJpZ0ludGVnZXIgdG9CaWdJbnRlZ2VyKGxvbmcgdmFs
dWUpIHsKLSAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoU3RyaW5nLnZhbHVlT2YodmFsdWUpKTsK
LSAgfQotICAKLSAgcHJpdmF0ZSBzdGF0aWMgRHVyYXRpb24gY3JlYXRlRHVyYXRpb25Gcm9tQmln
SW50ZWdlcihCaWdJbnRlZ2VyIHZhbHVlKSB7Ci0gICAgbG9uZyBzZWNvbmRzID0gdmFsdWUuZGl2
aWRlKAotICAgICAgbmV3IEJpZ0ludGVnZXIoU3RyaW5nLnZhbHVlT2YoTkFOT1NfUEVSX1NFQ09O
RCkpKS5sb25nVmFsdWUoKTsKLSAgICBpbnQgbmFub3MgPSB2YWx1ZS5yZW1haW5kZXIoCi0gICAg
ICBuZXcgQmlnSW50ZWdlcihTdHJpbmcudmFsdWVPZihOQU5PU19QRVJfU0VDT05EKSkpLmludFZh
bHVlKCk7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZWREdXJhdGlvbihzZWNvbmRzLCBuYW5vcyk7Ci0g
ICAgCi0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBEdXJhdGlvbiBub3JtYWxpemVkRHVyYXRpb24o
bG9uZyBzZWNvbmRzLCBpbnQgbmFub3MpIHsKLSAgICBpZiAobmFub3MgPD0gLU5BTk9TX1BFUl9T
RUNPTkQgfHwgbmFub3MgPj0gTkFOT1NfUEVSX1NFQ09ORCkgewotICAgICAgc2Vjb25kcyArPSBu
YW5vcyAvIE5BTk9TX1BFUl9TRUNPTkQ7Ci0gICAgICBuYW5vcyAlPSBOQU5PU19QRVJfU0VDT05E
OwotICAgIH0KLSAgICBpZiAoc2Vjb25kcyA+IDAgJiYgbmFub3MgPCAwKSB7Ci0gICAgICBuYW5v
cyArPSBOQU5PU19QRVJfU0VDT05EOwotICAgICAgc2Vjb25kcyAtPSAxOwotICAgIH0KLSAgICBp
ZiAoc2Vjb25kcyA8IDAgJiYgbmFub3MgPiAwKSB7Ci0gICAgICBuYW5vcyAtPSBOQU5PU19QRVJf
U0VDT05EOwotICAgICAgc2Vjb25kcyArPSAxOwotICAgIH0KLSAgICBpZiAoc2Vjb25kcyA8IERV
UkFUSU9OX1NFQ09ORFNfTUlOIHx8IHNlY29uZHMgPiBEVVJBVElPTl9TRUNPTkRTX01BWCkgewot
ICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRHVyYXRpb24gaXMgb3V0
IG9mIHZhbGlkIHJhbmdlLiIpOwotICAgIH0KLSAgICByZXR1cm4gRHVyYXRpb24ubmV3QnVpbGRl
cigpLnNldFNlY29uZHMoc2Vjb25kcykuc2V0TmFub3MobmFub3MpLmJ1aWxkKCk7Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBUaW1lc3RhbXAgbm9ybWFsaXplZFRpbWVzdGFtcChsb25nIHNlY29u
ZHMsIGludCBuYW5vcykgewotICAgIGlmIChuYW5vcyA8PSAtTkFOT1NfUEVSX1NFQ09ORCB8fCBu
YW5vcyA+PSBOQU5PU19QRVJfU0VDT05EKSB7Ci0gICAgICBzZWNvbmRzICs9IG5hbm9zIC8gTkFO
T1NfUEVSX1NFQ09ORDsKLSAgICAgIG5hbm9zICU9IE5BTk9TX1BFUl9TRUNPTkQ7Ci0gICAgfQot
ICAgIGlmIChuYW5vcyA8IDApIHsKLSAgICAgIG5hbm9zICs9IE5BTk9TX1BFUl9TRUNPTkQ7Ci0g
ICAgICBzZWNvbmRzIC09IDE7Ci0gICAgfQotICAgIGlmIChzZWNvbmRzIDwgVElNRVNUQU1QX1NF
Q09ORFNfTUlOIHx8IHNlY29uZHMgPiBUSU1FU1RBTVBfU0VDT05EU19NQVgpIHsKLSAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRpbWVzdGFtcCBpcyBvdXQgb2YgdmFs
aWQgcmFuZ2UuIik7Ci0gICAgfQotICAgIHJldHVybiBUaW1lc3RhbXAubmV3QnVpbGRlcigpLnNl
dFNlY29uZHMoc2Vjb25kcykuc2V0TmFub3MobmFub3MpLmJ1aWxkKCk7Ci0gIH0KLQotICAvKioK
LSAgICogRm9ybWF0IHRoZSBuYW5vIHBhcnQgb2YgYSB0aW1lc3RhbXAgb3IgYSBkdXJhdGlvbi4K
LSAgICovCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXROYW5vcyhpbnQgbmFub3MpIHsK
LSAgICBhc3NlcnQgbmFub3MgPj0gMSAmJiBuYW5vcyA8PSA5OTk5OTk5OTk7Ci0gICAgLy8gRGV0
ZXJtaW5lIHdoZXRoZXIgdG8gdXNlIDMsIDYsIG9yIDkgZGlnaXRzIGZvciB0aGUgbmFubyBwYXJ0
LgotICAgIGlmIChuYW5vcyAlIE5BTk9TX1BFUl9NSUxMSVNFQ09ORCA9PSAwKSB7Ci0gICAgICBy
ZXR1cm4gU3RyaW5nLmZvcm1hdCgiJTEkMDNkIiwgbmFub3MgLyBOQU5PU19QRVJfTUlMTElTRUNP
TkQpOwotICAgIH0gZWxzZSBpZiAobmFub3MgJSBOQU5PU19QRVJfTUlDUk9TRUNPTkQgPT0gMCkg
ewotICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiUxJDA2ZCIsIG5hbm9zIC8gTkFOT1NfUEVS
X01JQ1JPU0VDT05EKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQo
IiUxJDA5ZCIsIG5hbm9zKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBpbnQgcGFy
c2VOYW5vcyhTdHJpbmcgdmFsdWUpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgaW50IHJl
c3VsdCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyArK2kpIHsKLSAgICAgIHJlc3Vs
dCA9IHJlc3VsdCAqIDEwOwotICAgICAgaWYgKGkgPCB2YWx1ZS5sZW5ndGgoKSkgewotICAgICAg
ICBpZiAodmFsdWUuY2hhckF0KGkpIDwgJzAnIHx8IHZhbHVlLmNoYXJBdChpKSA+ICc5Jykgewot
ICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbigiSW52YWxpZCBuYW5vc2VjbmRzLiIs
IDApOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCArPSB2YWx1ZS5jaGFyQXQoaSkgLSAnMCc7
Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBsb25nIHBhcnNlVGltZXpvbmVPZmZzZXQoU3RyaW5nIHZhbHVlKSB0aHJvd3MgUGFyc2VF
eGNlcHRpb24gewotICAgIGludCBwb3MgPSB2YWx1ZS5pbmRleE9mKCc6Jyk7Ci0gICAgaWYgKHBv
cyA9PSAtMSkgewotICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCJJbnZhbGlkIG9mZnNl
dCB2YWx1ZTogIiArIHZhbHVlLCAwKTsKLSAgICB9Ci0gICAgU3RyaW5nIGhvdXJzID0gdmFsdWUu
c3Vic3RyaW5nKDAsIHBvcyk7Ci0gICAgU3RyaW5nIG1pbnV0ZXMgPSB2YWx1ZS5zdWJzdHJpbmco
cG9zICsgMSk7Ci0gICAgcmV0dXJuIChMb25nLnBhcnNlTG9uZyhob3VycykgKiA2MCArIExvbmcu
cGFyc2VMb25nKG1pbnV0ZXMpKSAqIDYwOwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvdXRpbC9z
cmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvdXRpbC9GaWVsZE1hc2tUcmVlVGVzdC5q
YXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhL3V0aWwvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL3V0aWwvRmll
bGRNYXNrVHJlZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VlMGZj
NmU2YWFmNDhhZDcyYjJjNGQ2Y2ZhYjhlOTExZjNiZDU5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvdXRpbC9zcmMvdGVzdC9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvdXRpbC9GaWVsZE1hc2tUcmVlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAg
LTEsMjYxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNr
YWdlIGNvbS5nb29nbGUucHJvdG9idWYudXRpbDsKLQotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0
LlVuaXR0ZXN0UHJvdG8uTmVzdGVkVGVzdEFsbFR5cGVzOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0
ZXN0LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzOwotaW1wb3J0IHByb3RvYnVmX3VuaXR0ZXN0
LlVuaXR0ZXN0UHJvdG8uVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2U7Ci0KLWltcG9ydCBqdW5p
dC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBGaWVsZE1hc2tUcmVlVGVzdCBl
eHRlbmRzIFRlc3RDYXNlIHsKLSAgcHVibGljIHZvaWQgdGVzdEFkZEZpZWxkUGF0aCgpIHRocm93
cyBFeGNlcHRpb24gewotICAgIEZpZWxkTWFza1RyZWUgdHJlZSA9IG5ldyBGaWVsZE1hc2tUcmVl
KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIiLCB0cmVlLnRvU3RyaW5nKCkpOwotICAgIHRyZWUuYWRk
RmllbGRQYXRoKCIiKTsKLSAgICBhc3NlcnRFcXVhbHMoIiIsIHRyZWUudG9TdHJpbmcoKSk7Ci0g
ICAgLy8gTmV3IGJyYW5jaC4KLSAgICB0cmVlLmFkZEZpZWxkUGF0aCgiZm9vIik7Ci0gICAgYXNz
ZXJ0RXF1YWxzKCJmb28iLCB0cmVlLnRvU3RyaW5nKCkpOwotICAgIC8vIFJlZHVuZGFudCBwYXRo
LgotICAgIHRyZWUuYWRkRmllbGRQYXRoKCJmb28iKTsKLSAgICBhc3NlcnRFcXVhbHMoImZvbyIs
IHRyZWUudG9TdHJpbmcoKSk7Ci0gICAgLy8gTmV3IGJyYW5jaC4KLSAgICB0cmVlLmFkZEZpZWxk
UGF0aCgiYmFyLmJheiIpOwotICAgIGFzc2VydEVxdWFscygiYmFyLmJheixmb28iLCB0cmVlLnRv
U3RyaW5nKCkpOwotICAgIC8vIFJlZHVuZGFudCBzdWItcGF0aC4KLSAgICB0cmVlLmFkZEZpZWxk
UGF0aCgiZm9vLmJhciIpOwotICAgIGFzc2VydEVxdWFscygiYmFyLmJheixmb28iLCB0cmVlLnRv
U3RyaW5nKCkpOwotICAgIC8vIE5ldyBicmFuY2ggZnJvbSBhIG5vbi1yb290IG5vZGUuCi0gICAg
dHJlZS5hZGRGaWVsZFBhdGgoImJhci5xdXoiKTsKLSAgICBhc3NlcnRFcXVhbHMoImJhci5iYXos
YmFyLnF1eixmb28iLCB0cmVlLnRvU3RyaW5nKCkpOwotICAgIC8vIEEgcGF0aCB0aGF0IG1hdGNo
ZXMgc2V2ZXJhbCBleGlzdGluZyBzdWItcGF0aHMuCi0gICAgdHJlZS5hZGRGaWVsZFBhdGgoImJh
ciIpOwotICAgIGFzc2VydEVxdWFscygiYmFyLGZvbyIsIHRyZWUudG9TdHJpbmcoKSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VGcm9tRmllbGRNYXNrKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgRmllbGRNYXNrVHJlZSB0cmVlID0gbmV3IEZpZWxkTWFza1RyZWUoRmllbGRNYXNr
VXRpbC5mcm9tU3RyaW5nKCJmb28sYmFyLmJheixiYXIucXV6IikpOwotICAgIGFzc2VydEVxdWFs
cygiYmFyLmJheixiYXIucXV6LGZvbyIsIHRyZWUudG9TdHJpbmcoKSk7Ci0gICAgdHJlZS5tZXJn
ZUZyb21GaWVsZE1hc2soRmllbGRNYXNrVXRpbC5mcm9tU3RyaW5nKCJmb28uYmFyLGJhciIpKTsK
LSAgICBhc3NlcnRFcXVhbHMoImJhcixmb28iLCB0cmVlLnRvU3RyaW5nKCkpOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgdGVzdEludGVyc2VjdEZpZWxkUGF0aCgpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIEZpZWxkTWFza1RyZWUgdHJlZSA9IG5ldyBGaWVsZE1hc2tUcmVlKEZpZWxkTWFza1V0aWwu
ZnJvbVN0cmluZygiZm9vLGJhci5iYXosYmFyLnF1eiIpKTsKLSAgICBGaWVsZE1hc2tUcmVlIHJl
c3VsdCA9IG5ldyBGaWVsZE1hc2tUcmVlKCk7Ci0gICAgLy8gRW1wdHkgcGF0aC4KLSAgICB0cmVl
LmludGVyc2VjdEZpZWxkUGF0aCgiIiwgcmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoIiIsIHJl
c3VsdC50b1N0cmluZygpKTsKLSAgICAvLyBOb24tZXhpc3QgcGF0aC4KLSAgICB0cmVlLmludGVy
c2VjdEZpZWxkUGF0aCgicXV6IiwgcmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoIiIsIHJlc3Vs
dC50b1N0cmluZygpKTsKLSAgICAvLyBTdWItcGF0aCBvZiBhbiBleGlzdGluZyBsZWFmLgotICAg
IHRyZWUuaW50ZXJzZWN0RmllbGRQYXRoKCJmb28uYmFyIiwgcmVzdWx0KTsKLSAgICBhc3NlcnRF
cXVhbHMoImZvby5iYXIiLCByZXN1bHQudG9TdHJpbmcoKSk7Ci0gICAgLy8gTWF0Y2ggYW4gZXhp
c3RpbmcgbGVhZiBub2RlLgotICAgIHRyZWUuaW50ZXJzZWN0RmllbGRQYXRoKCJmb28iLCByZXN1
bHQpOwotICAgIGFzc2VydEVxdWFscygiZm9vIiwgcmVzdWx0LnRvU3RyaW5nKCkpOwotICAgIC8v
IE5vbi1leGlzdCBwYXRoLgotICAgIHRyZWUuaW50ZXJzZWN0RmllbGRQYXRoKCJiYXIuZm9vIiwg
cmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoImZvbyIsIHJlc3VsdC50b1N0cmluZygpKTsKLSAg
ICAvLyBNYXRjaCBhIG5vbi1sZWFmIG5vZGUuCi0gICAgdHJlZS5pbnRlcnNlY3RGaWVsZFBhdGgo
ImJhciIsIHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJiYXIuYmF6LGJhci5xdXosZm9vIiwg
cmVzdWx0LnRvU3RyaW5nKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1lcmdlKCkgdGhy
b3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzIHZhbHVlID0KLSAgICAgICAgVGVzdEFs
bFR5cGVzLm5ld0J1aWxkZXIoKQotICAgICAgICAgICAgLnNldE9wdGlvbmFsSW50MzIoMTIzNCkK
LSAgICAgICAgICAgIC5zZXRPcHRpb25hbE5lc3RlZE1lc3NhZ2UoTmVzdGVkTWVzc2FnZS5uZXdC
dWlsZGVyKCkuc2V0QmIoNTY3OCkpCi0gICAgICAgICAgICAuYWRkUmVwZWF0ZWRJbnQzMig0MzIx
KQotICAgICAgICAgICAgLmFkZFJlcGVhdGVkTmVzdGVkTWVzc2FnZShOZXN0ZWRNZXNzYWdlLm5l
d0J1aWxkZXIoKS5zZXRCYig4NzY1KSkKLSAgICAgICAgICAgIC5idWlsZCgpOwotICAgIE5lc3Rl
ZFRlc3RBbGxUeXBlcyBzb3VyY2UgPQotICAgICAgICBOZXN0ZWRUZXN0QWxsVHlwZXMubmV3QnVp
bGRlcigpCi0gICAgICAgICAgICAuc2V0UGF5bG9hZCh2YWx1ZSkKLSAgICAgICAgICAgIC5zZXRD
aGlsZChOZXN0ZWRUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLnNldFBheWxvYWQodmFsdWUpKQot
ICAgICAgICAgICAgLmJ1aWxkKCk7Ci0gICAgLy8gTm93IHdlIGhhdmUgYSBtZXNzYWdlIHNvdXJj
ZSB3aXRoIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgotICAgIC8vICAgW3Jvb3RdIC0rLSBwYXls
b2FkIC0rLSBvcHRpb25hbF9pbnQzMgotICAgIC8vICAgICAgICAgICB8ICAgICAgICAgICArLSBv
cHRpb25hbF9uZXN0ZWRfbWVzc2FnZQotICAgIC8vICAgICAgICAgICB8ICAgICAgICAgICArLSBy
ZXBlYXRlZF9pbnQzMgotICAgIC8vICAgICAgICAgICB8ICAgICAgICAgICArLSByZXBlYXRlZF9u
ZXN0ZWRfbWVzc2FnZQotICAgIC8vICAgICAgICAgICB8Ci0gICAgLy8gICAgICAgICAgICstIGNo
aWxkIC0tLSBwYXlsb2FkIC0rLSBvcHRpb25hbF9pbnQzMgotICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKy0gb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UKLSAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICstIHJlcGVhdGVkX2ludDMyCi0gICAgLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLSByZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZQot
Ci0gICAgRmllbGRNYXNrVXRpbC5NZXJnZU9wdGlvbnMgb3B0aW9ucyA9IG5ldyBGaWVsZE1hc2tV
dGlsLk1lcmdlT3B0aW9ucygpOwotCi0gICAgLy8gVGVzdCBtZXJnaW5nIGVhY2ggaW5kaXZpZHVh
bCBmaWVsZC4KLSAgICBOZXN0ZWRUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyID0gTmVzdGVk
VGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBuZXcgRmllbGRNYXNrVHJlZSgpLmFkZEZp
ZWxkUGF0aCgicGF5bG9hZC5vcHRpb25hbF9pbnQzMiIpLm1lcmdlKHNvdXJjZSwgYnVpbGRlciwg
b3B0aW9ucyk7Ci0gICAgTmVzdGVkVGVzdEFsbFR5cGVzLkJ1aWxkZXIgZXhwZWN0ZWQgPSBOZXN0
ZWRUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIGV4cGVjdGVkLmdldFBheWxvYWRCdWls
ZGVyKCkuc2V0T3B0aW9uYWxJbnQzMigxMjM0KTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQu
YnVpbGQoKSwgYnVpbGRlci5idWlsZCgpKTsKLQotICAgIGJ1aWxkZXIgPSBOZXN0ZWRUZXN0QWxs
VHlwZXMubmV3QnVpbGRlcigpOwotICAgIG5ldyBGaWVsZE1hc2tUcmVlKCkKLSAgICAgICAgLmFk
ZEZpZWxkUGF0aCgicGF5bG9hZC5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSIpCi0gICAgICAgIC5t
ZXJnZShzb3VyY2UsIGJ1aWxkZXIsIG9wdGlvbnMpOwotICAgIGV4cGVjdGVkID0gTmVzdGVkVGVz
dEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBleHBlY3RlZC5nZXRQYXlsb2FkQnVpbGRlcigp
LnNldE9wdGlvbmFsTmVzdGVkTWVzc2FnZShOZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRC
Yig1Njc4KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmJ1aWxkKCksIGJ1aWxkZXIuYnVp
bGQoKSk7Ci0KLSAgICBidWlsZGVyID0gTmVzdGVkVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsK
LSAgICBuZXcgRmllbGRNYXNrVHJlZSgpLmFkZEZpZWxkUGF0aCgicGF5bG9hZC5yZXBlYXRlZF9p
bnQzMiIpLm1lcmdlKHNvdXJjZSwgYnVpbGRlciwgb3B0aW9ucyk7Ci0gICAgZXhwZWN0ZWQgPSBO
ZXN0ZWRUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIGV4cGVjdGVkLmdldFBheWxvYWRC
dWlsZGVyKCkuYWRkUmVwZWF0ZWRJbnQzMig0MzIxKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0
ZWQuYnVpbGQoKSwgYnVpbGRlci5idWlsZCgpKTsKLQotICAgIGJ1aWxkZXIgPSBOZXN0ZWRUZXN0
QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIG5ldyBGaWVsZE1hc2tUcmVlKCkKLSAgICAgICAg
LmFkZEZpZWxkUGF0aCgicGF5bG9hZC5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSIpCi0gICAgICAg
IC5tZXJnZShzb3VyY2UsIGJ1aWxkZXIsIG9wdGlvbnMpOwotICAgIGV4cGVjdGVkID0gTmVzdGVk
VGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBleHBlY3RlZC5nZXRQYXlsb2FkQnVpbGRl
cigpLmFkZFJlcGVhdGVkTmVzdGVkTWVzc2FnZShOZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5z
ZXRCYig4NzY1KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmJ1aWxkKCksIGJ1aWxkZXIu
YnVpbGQoKSk7Ci0KLSAgICBidWlsZGVyID0gTmVzdGVkVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIo
KTsKLSAgICBuZXcgRmllbGRNYXNrVHJlZSgpCi0gICAgICAgIC5hZGRGaWVsZFBhdGgoImNoaWxk
LnBheWxvYWQub3B0aW9uYWxfaW50MzIiKQotICAgICAgICAubWVyZ2Uoc291cmNlLCBidWlsZGVy
LCBvcHRpb25zKTsKLSAgICBleHBlY3RlZCA9IE5lc3RlZFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVy
KCk7Ci0gICAgZXhwZWN0ZWQuZ2V0Q2hpbGRCdWlsZGVyKCkuZ2V0UGF5bG9hZEJ1aWxkZXIoKS5z
ZXRPcHRpb25hbEludDMyKDEyMzQpOwotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5idWlsZCgp
LCBidWlsZGVyLmJ1aWxkKCkpOwotCi0gICAgYnVpbGRlciA9IE5lc3RlZFRlc3RBbGxUeXBlcy5u
ZXdCdWlsZGVyKCk7Ci0gICAgbmV3IEZpZWxkTWFza1RyZWUoKQotICAgICAgICAuYWRkRmllbGRQ
YXRoKCJjaGlsZC5wYXlsb2FkLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIikKLSAgICAgICAgLm1l
cmdlKHNvdXJjZSwgYnVpbGRlciwgb3B0aW9ucyk7Ci0gICAgZXhwZWN0ZWQgPSBOZXN0ZWRUZXN0
QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIGV4cGVjdGVkCi0gICAgICAgIC5nZXRDaGlsZEJ1
aWxkZXIoKQotICAgICAgICAuZ2V0UGF5bG9hZEJ1aWxkZXIoKQotICAgICAgICAuc2V0T3B0aW9u
YWxOZXN0ZWRNZXNzYWdlKE5lc3RlZE1lc3NhZ2UubmV3QnVpbGRlcigpLnNldEJiKDU2NzgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuYnVpbGQoKSwgYnVpbGRlci5idWlsZCgpKTsKLQot
ICAgIGJ1aWxkZXIgPSBOZXN0ZWRUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIG5ldyBG
aWVsZE1hc2tUcmVlKCkKLSAgICAgICAgLmFkZEZpZWxkUGF0aCgiY2hpbGQucGF5bG9hZC5yZXBl
YXRlZF9pbnQzMiIpCi0gICAgICAgIC5tZXJnZShzb3VyY2UsIGJ1aWxkZXIsIG9wdGlvbnMpOwot
ICAgIGV4cGVjdGVkID0gTmVzdGVkVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICBleHBl
Y3RlZC5nZXRDaGlsZEJ1aWxkZXIoKS5nZXRQYXlsb2FkQnVpbGRlcigpLmFkZFJlcGVhdGVkSW50
MzIoNDMyMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmJ1aWxkKCksIGJ1aWxkZXIuYnVp
bGQoKSk7Ci0KLSAgICBidWlsZGVyID0gTmVzdGVkVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsK
LSAgICBuZXcgRmllbGRNYXNrVHJlZSgpCi0gICAgICAgIC5hZGRGaWVsZFBhdGgoImNoaWxkLnBh
eWxvYWQucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UiKQotICAgICAgICAubWVyZ2Uoc291cmNlLCBi
dWlsZGVyLCBvcHRpb25zKTsKLSAgICBleHBlY3RlZCA9IE5lc3RlZFRlc3RBbGxUeXBlcy5uZXdC
dWlsZGVyKCk7Ci0gICAgZXhwZWN0ZWQKLSAgICAgICAgLmdldENoaWxkQnVpbGRlcigpCi0gICAg
ICAgIC5nZXRQYXlsb2FkQnVpbGRlcigpCi0gICAgICAgIC5hZGRSZXBlYXRlZE5lc3RlZE1lc3Nh
Z2UoTmVzdGVkTWVzc2FnZS5uZXdCdWlsZGVyKCkuc2V0QmIoODc2NSkpOwotICAgIGFzc2VydEVx
dWFscyhleHBlY3RlZC5idWlsZCgpLCBidWlsZGVyLmJ1aWxkKCkpOwotCi0gICAgLy8gVGVzdCBt
ZXJnaW5nIGFsbCBmaWVsZHMuCi0gICAgYnVpbGRlciA9IE5lc3RlZFRlc3RBbGxUeXBlcy5uZXdC
dWlsZGVyKCk7Ci0gICAgbmV3IEZpZWxkTWFza1RyZWUoKQotICAgICAgICAuYWRkRmllbGRQYXRo
KCJjaGlsZCIpCi0gICAgICAgIC5hZGRGaWVsZFBhdGgoInBheWxvYWQiKQotICAgICAgICAubWVy
Z2Uoc291cmNlLCBidWlsZGVyLCBvcHRpb25zKTsKLSAgICBhc3NlcnRFcXVhbHMoc291cmNlLCBi
dWlsZGVyLmJ1aWxkKCkpOwotCi0gICAgLy8gVGVzdCByZXBlYXRlZCBvcHRpb25zLgotICAgIGJ1
aWxkZXIgPSBOZXN0ZWRUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIGJ1aWxkZXIuZ2V0
UGF5bG9hZEJ1aWxkZXIoKS5hZGRSZXBlYXRlZEludDMyKDEwMDApOwotICAgIG5ldyBGaWVsZE1h
c2tUcmVlKCkuYWRkRmllbGRQYXRoKCJwYXlsb2FkLnJlcGVhdGVkX2ludDMyIikubWVyZ2Uoc291
cmNlLCBidWlsZGVyLCBvcHRpb25zKTsKLSAgICAvLyBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGFw
cGVuZCByZXBlYXRlZCBmaWVsZHMuCi0gICAgYXNzZXJ0RXF1YWxzKDIsIGJ1aWxkZXIuZ2V0UGF5
bG9hZCgpLmdldFJlcGVhdGVkSW50MzJDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTAwMCwg
YnVpbGRlci5nZXRQYXlsb2FkKCkuZ2V0UmVwZWF0ZWRJbnQzMigwKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDQzMjEsIGJ1aWxkZXIuZ2V0UGF5bG9hZCgpLmdldFJlcGVhdGVkSW50MzIoMSkpOwotICAg
IC8vIENoYW5nZSB0byByZXBsYWNlIHJlcGVhdGVkIGZpZWxkcy4KLSAgICBvcHRpb25zLnNldFJl
cGxhY2VSZXBlYXRlZEZpZWxkcyh0cnVlKTsKLSAgICBuZXcgRmllbGRNYXNrVHJlZSgpLmFkZEZp
ZWxkUGF0aCgicGF5bG9hZC5yZXBlYXRlZF9pbnQzMiIpLm1lcmdlKHNvdXJjZSwgYnVpbGRlciwg
b3B0aW9ucyk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGJ1aWxkZXIuZ2V0UGF5bG9hZCgpLmdldFJl
cGVhdGVkSW50MzJDb3VudCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoNDMyMSwgYnVpbGRlci5nZXRQ
YXlsb2FkKCkuZ2V0UmVwZWF0ZWRJbnQzMigwKSk7Ci0KLSAgICAvLyBUZXN0IG1lc3NhZ2Ugb3B0
aW9ucy4KLSAgICBidWlsZGVyID0gTmVzdGVkVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAg
ICBidWlsZGVyLmdldFBheWxvYWRCdWlsZGVyKCkuc2V0T3B0aW9uYWxJbnQzMigxMDAwKTsKLSAg
ICBidWlsZGVyLmdldFBheWxvYWRCdWlsZGVyKCkuc2V0T3B0aW9uYWxVaW50MzIoMjAwMCk7Ci0g
ICAgbmV3IEZpZWxkTWFza1RyZWUoKS5hZGRGaWVsZFBhdGgoInBheWxvYWQiKS5tZXJnZShzb3Vy
Y2UsIGJ1aWxkZXIsIG9wdGlvbnMpOwotICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gbWVy
Z2UgbWVzc2FnZSBmaWVsZHMuCi0gICAgYXNzZXJ0RXF1YWxzKDEyMzQsIGJ1aWxkZXIuZ2V0UGF5
bG9hZCgpLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIwMDAsIGJ1aWxk
ZXIuZ2V0UGF5bG9hZCgpLmdldE9wdGlvbmFsVWludDMyKCkpOwotCi0gICAgLy8gVGVzdCBtZXJn
aW5nIHVuc2V0IG1lc3NhZ2UgZmllbGRzLgotICAgIE5lc3RlZFRlc3RBbGxUeXBlcyBjbGVhcmVk
U291cmNlID0gc291cmNlLnRvQnVpbGRlcigpLmNsZWFyUGF5bG9hZCgpLmJ1aWxkKCk7Ci0gICAg
YnVpbGRlciA9IE5lc3RlZFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgbmV3IEZpZWxk
TWFza1RyZWUoKS5hZGRGaWVsZFBhdGgoInBheWxvYWQiKS5tZXJnZShjbGVhcmVkU291cmNlLCBi
dWlsZGVyLCBvcHRpb25zKTsKLSAgICBhc3NlcnRFcXVhbHMoZmFsc2UsIGJ1aWxkZXIuaGFzUGF5
bG9hZCgpKTsKLQotICAgIC8vIENoYW5nZSB0byByZXBsYWNlIG1lc3NhZ2UgZmllbGRzLgotICAg
IG9wdGlvbnMuc2V0UmVwbGFjZU1lc3NhZ2VGaWVsZHModHJ1ZSk7Ci0gICAgYnVpbGRlciA9IE5l
c3RlZFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5nZXRQYXlsb2FkQnVp
bGRlcigpLnNldE9wdGlvbmFsSW50MzIoMTAwMCk7Ci0gICAgYnVpbGRlci5nZXRQYXlsb2FkQnVp
bGRlcigpLnNldE9wdGlvbmFsVWludDMyKDIwMDApOwotICAgIG5ldyBGaWVsZE1hc2tUcmVlKCku
YWRkRmllbGRQYXRoKCJwYXlsb2FkIikubWVyZ2Uoc291cmNlLCBidWlsZGVyLCBvcHRpb25zKTsK
LSAgICBhc3NlcnRFcXVhbHMoMTIzNCwgYnVpbGRlci5nZXRQYXlsb2FkKCkuZ2V0T3B0aW9uYWxJ
bnQzMigpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgYnVpbGRlci5nZXRQYXlsb2FkKCkuZ2V0T3B0
aW9uYWxVaW50MzIoKSk7Ci0KLSAgICAvLyBUZXN0IG1lcmdpbmcgdW5zZXQgbWVzc2FnZSBmaWVs
ZHMuCi0gICAgYnVpbGRlciA9IE5lc3RlZFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAg
YnVpbGRlci5nZXRQYXlsb2FkQnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIoMTAwMCk7Ci0gICAg
YnVpbGRlci5nZXRQYXlsb2FkQnVpbGRlcigpLnNldE9wdGlvbmFsVWludDMyKDIwMDApOwotICAg
IG5ldyBGaWVsZE1hc2tUcmVlKCkuYWRkRmllbGRQYXRoKCJwYXlsb2FkIikubWVyZ2UoY2xlYXJl
ZFNvdXJjZSwgYnVpbGRlciwgb3B0aW9ucyk7Ci0gICAgYXNzZXJ0RXF1YWxzKGZhbHNlLCBidWls
ZGVyLmhhc1BheWxvYWQoKSk7Ci0KLSAgICAvLyBUZXN0IG1lcmdpbmcgdW5zZXQgcHJpbWl0aXZl
IGZpZWxkcy4KLSAgICBidWlsZGVyID0gc291cmNlLnRvQnVpbGRlcigpOwotICAgIGJ1aWxkZXIu
Z2V0UGF5bG9hZEJ1aWxkZXIoKS5jbGVhck9wdGlvbmFsSW50MzIoKTsKLSAgICBOZXN0ZWRUZXN0
QWxsVHlwZXMgc291cmNlV2l0aFBheWxvYWRJbnQzMlVuc2V0ID0gYnVpbGRlci5idWlsZCgpOwot
ICAgIGJ1aWxkZXIgPSBzb3VyY2UudG9CdWlsZGVyKCk7Ci0gICAgbmV3IEZpZWxkTWFza1RyZWUo
KQotICAgICAgICAuYWRkRmllbGRQYXRoKCJwYXlsb2FkLm9wdGlvbmFsX2ludDMyIikKLSAgICAg
ICAgLm1lcmdlKHNvdXJjZVdpdGhQYXlsb2FkSW50MzJVbnNldCwgYnVpbGRlciwgb3B0aW9ucyk7
Ci0gICAgYXNzZXJ0RXF1YWxzKHRydWUsIGJ1aWxkZXIuZ2V0UGF5bG9hZCgpLmhhc09wdGlvbmFs
SW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIGJ1aWxkZXIuZ2V0UGF5bG9hZCgpLmdldE9w
dGlvbmFsSW50MzIoKSk7Ci0KLSAgICAvLyBDaGFuZ2UgdG8gY2xlYXIgdW5zZXQgcHJpbWl0aXZl
IGZpZWxkcy4KLSAgICBvcHRpb25zLnNldFJlcGxhY2VQcmltaXRpdmVGaWVsZHModHJ1ZSk7Ci0g
ICAgYnVpbGRlciA9IHNvdXJjZS50b0J1aWxkZXIoKTsKLSAgICBuZXcgRmllbGRNYXNrVHJlZSgp
Ci0gICAgICAgIC5hZGRGaWVsZFBhdGgoInBheWxvYWQub3B0aW9uYWxfaW50MzIiKQotICAgICAg
ICAubWVyZ2Uoc291cmNlV2l0aFBheWxvYWRJbnQzMlVuc2V0LCBidWlsZGVyLCBvcHRpb25zKTsK
LSAgICBhc3NlcnRFcXVhbHModHJ1ZSwgYnVpbGRlci5oYXNQYXlsb2FkKCkpOwotICAgIGFzc2Vy
dEVxdWFscyhmYWxzZSwgYnVpbGRlci5nZXRQYXlsb2FkKCkuaGFzT3B0aW9uYWxJbnQzMigpKTsK
LSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL3V0aWwvRmllbGRNYXNrVXRpbFRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS91dGlsL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsL0ZpZWxkTWFza1V0aWxUZXN0LmphdmEKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NGY3YjljNzM3Yjg1ZTIxMDMwYTJhNzg4NGJhN2Mw
OTQxNjY4YjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhL3V0aWwvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL3V0aWwvRmllbGRNYXNr
VXRpbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmLnV0
aWw7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzazsKLWltcG9ydCBwcm90
b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLk5lc3RlZFRlc3RBbGxUeXBlczsKLWltcG9ydCBw
cm90b2J1Zl91bml0dGVzdC5Vbml0dGVzdFByb3RvLlRlc3RBbGxUeXBlczsKLQotaW1wb3J0IGp1
bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotLyoqIFVuaXQgdGVzdHMgZm9yIHtAbGluayBGaWVs
ZE1hc2tVdGlsfS4gKi8KLXB1YmxpYyBjbGFzcyBGaWVsZE1hc2tVdGlsVGVzdCBleHRlbmRzIFRl
c3RDYXNlIHsKLSAgcHVibGljIHZvaWQgdGVzdElzVmFsaWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBhc3NlcnRUcnVlKEZpZWxkTWFza1V0aWwuaXNWYWxpZChOZXN0ZWRUZXN0QWxsVHlwZXMu
Y2xhc3MsICJwYXlsb2FkIikpOwotICAgIGFzc2VydEZhbHNlKEZpZWxkTWFza1V0aWwuaXNWYWxp
ZChOZXN0ZWRUZXN0QWxsVHlwZXMuY2xhc3MsICJub25leGlzdCIpKTsKLSAgICBhc3NlcnRUcnVl
KEZpZWxkTWFza1V0aWwuaXNWYWxpZCgKLSAgICAgICAgTmVzdGVkVGVzdEFsbFR5cGVzLmNsYXNz
LCAicGF5bG9hZC5vcHRpb25hbF9pbnQzMiIpKTsKLSAgICBhc3NlcnRUcnVlKEZpZWxkTWFza1V0
aWwuaXNWYWxpZCgKLSAgICAgICAgTmVzdGVkVGVzdEFsbFR5cGVzLmNsYXNzLCAicGF5bG9hZC5y
ZXBlYXRlZF9pbnQzMiIpKTsKLSAgICBhc3NlcnRUcnVlKEZpZWxkTWFza1V0aWwuaXNWYWxpZCgK
LSAgICAgICAgTmVzdGVkVGVzdEFsbFR5cGVzLmNsYXNzLCAicGF5bG9hZC5vcHRpb25hbF9uZXN0
ZWRfbWVzc2FnZSIpKTsKLSAgICBhc3NlcnRUcnVlKEZpZWxkTWFza1V0aWwuaXNWYWxpZCgKLSAg
ICAgICAgTmVzdGVkVGVzdEFsbFR5cGVzLmNsYXNzLCAicGF5bG9hZC5yZXBlYXRlZF9uZXN0ZWRf
bWVzc2FnZSIpKTsKLSAgICBhc3NlcnRGYWxzZShGaWVsZE1hc2tVdGlsLmlzVmFsaWQoCi0gICAg
ICAgIE5lc3RlZFRlc3RBbGxUeXBlcy5jbGFzcywgInBheWxvYWQubm9uZXhpc3QiKSk7Ci0gICAg
Ci0gICAgYXNzZXJ0VHJ1ZShGaWVsZE1hc2tVdGlsLmlzVmFsaWQoCi0gICAgICAgIE5lc3RlZFRl
c3RBbGxUeXBlcy5jbGFzcywgRmllbGRNYXNrVXRpbC5mcm9tU3RyaW5nKCJwYXlsb2FkIikpKTsK
LSAgICBhc3NlcnRGYWxzZShGaWVsZE1hc2tVdGlsLmlzVmFsaWQoCi0gICAgICAgIE5lc3RlZFRl
c3RBbGxUeXBlcy5jbGFzcywgRmllbGRNYXNrVXRpbC5mcm9tU3RyaW5nKCJub25leGlzdCIpKSk7
Ci0gICAgYXNzZXJ0RmFsc2UoRmllbGRNYXNrVXRpbC5pc1ZhbGlkKAotICAgICAgICBOZXN0ZWRU
ZXN0QWxsVHlwZXMuY2xhc3MsIEZpZWxkTWFza1V0aWwuZnJvbVN0cmluZygicGF5bG9hZCxub25l
eGlzdCIpKSk7Ci0gICAgCi0gICAgYXNzZXJ0VHJ1ZShGaWVsZE1hc2tVdGlsLmlzVmFsaWQoTmVz
dGVkVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKSwgInBheWxvYWQiKSk7Ci0gICAgYXNzZXJ0
RmFsc2UoRmllbGRNYXNrVXRpbC5pc1ZhbGlkKE5lc3RlZFRlc3RBbGxUeXBlcy5nZXREZXNjcmlw
dG9yKCksICJub25leGlzdCIpKTsKLSAgICAKLSAgICBhc3NlcnRUcnVlKEZpZWxkTWFza1V0aWwu
aXNWYWxpZCgKLSAgICAgICAgTmVzdGVkVGVzdEFsbFR5cGVzLmdldERlc2NyaXB0b3IoKSwgRmll
bGRNYXNrVXRpbC5mcm9tU3RyaW5nKCJwYXlsb2FkIikpKTsKLSAgICBhc3NlcnRGYWxzZShGaWVs
ZE1hc2tVdGlsLmlzVmFsaWQoCi0gICAgICAgIE5lc3RlZFRlc3RBbGxUeXBlcy5nZXREZXNjcmlw
dG9yKCksIEZpZWxkTWFza1V0aWwuZnJvbVN0cmluZygibm9uZXhpc3QiKSkpOwotICAgIAotICAg
IGFzc2VydFRydWUoRmllbGRNYXNrVXRpbC5pc1ZhbGlkKAotICAgICAgICBOZXN0ZWRUZXN0QWxs
VHlwZXMuY2xhc3MsICJwYXlsb2FkLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLmJiIikpOwotICAg
IC8vIFJlcGVhdGVkIGZpZWxkcyBjYW5ub3QgaGF2ZSBzdWItcGF0aHMuCi0gICAgYXNzZXJ0RmFs
c2UoRmllbGRNYXNrVXRpbC5pc1ZhbGlkKAotICAgICAgICBOZXN0ZWRUZXN0QWxsVHlwZXMuY2xh
c3MsICJwYXlsb2FkLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmJiIikpOwotICAgIC8vIE5vbi1t
ZXNzYWdlIGZpZWxkcyBjYW5ub3QgaGF2ZSBzdWItcGF0aHMuCi0gICAgYXNzZXJ0RmFsc2UoRmll
bGRNYXNrVXRpbC5pc1ZhbGlkKAotICAgICAgICBOZXN0ZWRUZXN0QWxsVHlwZXMuY2xhc3MsICJw
YXlsb2FkLm9wdGlvbmFsX2ludDMyLmJiIikpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0
VG9TdHJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBhc3NlcnRFcXVhbHMoIiIsIEZpZWxk
TWFza1V0aWwudG9TdHJpbmcoRmllbGRNYXNrLmdldERlZmF1bHRJbnN0YW5jZSgpKSk7Ci0gICAg
RmllbGRNYXNrIG1hc2sgPSBGaWVsZE1hc2submV3QnVpbGRlcigpLmFkZFBhdGhzKCJmb28iKS5i
dWlsZCgpOwotICAgIGFzc2VydEVxdWFscygiZm9vIiwgRmllbGRNYXNrVXRpbC50b1N0cmluZyht
YXNrKSk7Ci0gICAgbWFzayA9IEZpZWxkTWFzay5uZXdCdWlsZGVyKCkuYWRkUGF0aHMoImZvbyIp
LmFkZFBhdGhzKCJiYXIiKS5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygiZm9vLGJhciIsIEZp
ZWxkTWFza1V0aWwudG9TdHJpbmcobWFzaykpOwotICAgIAotICAgIC8vIEVtcHR5IGZpZWxkIHBh
dGhzIGFyZSBpZ25vcmVkLgotICAgIG1hc2sgPSBGaWVsZE1hc2submV3QnVpbGRlcigpLmFkZFBh
dGhzKCIiKS5hZGRQYXRocygiZm9vIikuYWRkUGF0aHMoIiIpLgotICAgICAgYWRkUGF0aHMoImJh
ciIpLmFkZFBhdGhzKCIiKS5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygiZm9vLGJhciIsIEZp
ZWxkTWFza1V0aWwudG9TdHJpbmcobWFzaykpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEZy
b21TdHJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGaWVsZE1hc2sgbWFzayA9IEZpZWxk
TWFza1V0aWwuZnJvbVN0cmluZygiIik7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1hc2suZ2V0UGF0
aHNDb3VudCgpKTsKLSAgICBtYXNrID0gRmllbGRNYXNrVXRpbC5mcm9tU3RyaW5nKCJmb28iKTsK
LSAgICBhc3NlcnRFcXVhbHMoMSwgbWFzay5nZXRQYXRoc0NvdW50KCkpOwotICAgIGFzc2VydEVx
dWFscygiZm9vIiwgbWFzay5nZXRQYXRocygwKSk7Ci0gICAgbWFzayA9IEZpZWxkTWFza1V0aWwu
ZnJvbVN0cmluZygiZm9vLGJhci5iYXoiKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbWFzay5nZXRQ
YXRoc0NvdW50KCkpOwotICAgIGFzc2VydEVxdWFscygiZm9vIiwgbWFzay5nZXRQYXRocygwKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCJiYXIuYmF6IiwgbWFzay5nZXRQYXRocygxKSk7Ci0KLSAgICAv
LyBFbXB0eSBmaWVsZCBwYXRocyBhcmUgaWdub3JlLgotICAgIG1hc2sgPSBGaWVsZE1hc2tVdGls
LmZyb21TdHJpbmcoIixmb28sLGJhciwiKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbWFzay5nZXRQ
YXRoc0NvdW50KCkpOwotICAgIGFzc2VydEVxdWFscygiZm9vIiwgbWFzay5nZXRQYXRocygwKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCJiYXIiLCBtYXNrLmdldFBhdGhzKDEpKTsKLQotICAgIC8vIENo
ZWNrIHdoZXRoZXIgdGhlIGZpZWxkIHBhdGhzIGFyZSB2YWxpZCBpZiBhIGNsYXNzIHBhcmFtZXRl
ciBpcyBwcm92aWRlZC4KLSAgICBtYXNrID0gRmllbGRNYXNrVXRpbC5mcm9tU3RyaW5nKE5lc3Rl
ZFRlc3RBbGxUeXBlcy5jbGFzcywgIixwYXlsb2FkIik7Ci0KLSAgICB0cnkgewotICAgICAgbWFz
ayA9IEZpZWxkTWFza1V0aWwuZnJvbVN0cmluZygKLSAgICAgICAgICBOZXN0ZWRUZXN0QWxsVHlw
ZXMuY2xhc3MsICJwYXlsb2FkLG5vbmV4aXN0Iik7Ci0gICAgICBmYWlsKCJFeGNlcHRpb24gaXMg
ZXhwZWN0ZWQuIik7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RGcm9t
RmllbGROdW1iZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgRmllbGRNYXNrIG1hc2sgPSBG
aWVsZE1hc2tVdGlsLmZyb21GaWVsZE51bWJlcnMoVGVzdEFsbFR5cGVzLmNsYXNzKTsKLSAgICBh
c3NlcnRFcXVhbHMoMCwgbWFzay5nZXRQYXRoc0NvdW50KCkpOwotICAgIG1hc2sgPQotICAgICAg
ICBGaWVsZE1hc2tVdGlsLmZyb21GaWVsZE51bWJlcnMoCi0gICAgICAgICAgICBUZXN0QWxsVHlw
ZXMuY2xhc3MsIFRlc3RBbGxUeXBlcy5PUFRJT05BTF9JTlQzMl9GSUVMRF9OVU1CRVIpOwotICAg
IGFzc2VydEVxdWFscygxLCBtYXNrLmdldFBhdGhzQ291bnQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KCJvcHRpb25hbF9pbnQzMiIsIG1hc2suZ2V0UGF0aHMoMCkpOwotICAgIG1hc2sgPQotICAgICAg
ICBGaWVsZE1hc2tVdGlsLmZyb21GaWVsZE51bWJlcnMoCi0gICAgICAgICAgICBUZXN0QWxsVHlw
ZXMuY2xhc3MsCi0gICAgICAgICAgICBUZXN0QWxsVHlwZXMuT1BUSU9OQUxfSU5UMzJfRklFTERf
TlVNQkVSLAotICAgICAgICAgICAgVGVzdEFsbFR5cGVzLk9QVElPTkFMX0lOVDY0X0ZJRUxEX05V
TUJFUik7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1hc2suZ2V0UGF0aHNDb3VudCgpKTsKLSAgICBh
c3NlcnRFcXVhbHMoIm9wdGlvbmFsX2ludDMyIiwgbWFzay5nZXRQYXRocygwKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKCJvcHRpb25hbF9pbnQ2NCIsIG1hc2suZ2V0UGF0aHMoMSkpOwotCi0gICAgdHJ5
IHsKLSAgICAgIGludCBpbnZhbGlkRmllbGROdW1iZXIgPSAxMDAwOwotICAgICAgbWFzayA9IEZp
ZWxkTWFza1V0aWwuZnJvbUZpZWxkTnVtYmVycyhUZXN0QWxsVHlwZXMuY2xhc3MsIGludmFsaWRG
aWVsZE51bWJlcik7Ci0gICAgICBmYWlsKCJFeGNlcHRpb24gaXMgZXhwZWN0ZWQuIik7Ci0gICAg
fSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgfQotICB9
Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0VW5pb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAv
LyBPbmx5IHRlc3QgYSBzaW1wbGUgY2FzZSBoZXJlIGFuZCBleHBlY3QKLSAgICAvLyB7QGxpbmsg
RmllbGRNYXNrVHJlZVRlc3QjdGVzdEFkZEZpZWxkUGF0aH0gdG8gY292ZXIgYWxsIHNjZW5hcmlv
cy4KLSAgICBGaWVsZE1hc2sgbWFzazEgPSBGaWVsZE1hc2tVdGlsLmZyb21TdHJpbmcoImZvbyxi
YXIuYmF6LGJhci5xdXoiKTsKLSAgICBGaWVsZE1hc2sgbWFzazIgPSBGaWVsZE1hc2tVdGlsLmZy
b21TdHJpbmcoImZvby5iYXIsYmFyIik7Ci0gICAgRmllbGRNYXNrIHJlc3VsdCA9IEZpZWxkTWFz
a1V0aWwudW5pb24obWFzazEsIG1hc2syKTsKLSAgICBhc3NlcnRFcXVhbHMoImJhcixmb28iLCBG
aWVsZE1hc2tVdGlsLnRvU3RyaW5nKHJlc3VsdCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVz
dFVuaW9uX3VzaW5nVmFyQXJncygpIHRocm93cyBFeGNlcHRpb24gewotICAgIEZpZWxkTWFzayBt
YXNrMSA9IEZpZWxkTWFza1V0aWwuZnJvbVN0cmluZygiZm9vIik7Ci0gICAgRmllbGRNYXNrIG1h
c2syID0gRmllbGRNYXNrVXRpbC5mcm9tU3RyaW5nKCJmb28uYmFyLGJhci5xdXoiKTsKLSAgICBG
aWVsZE1hc2sgbWFzazMgPSBGaWVsZE1hc2tVdGlsLmZyb21TdHJpbmcoImJhci5xdXoiKTsKLSAg
ICBGaWVsZE1hc2sgbWFzazQgPSBGaWVsZE1hc2tVdGlsLmZyb21TdHJpbmcoImJhciIpOwotICAg
IEZpZWxkTWFzayByZXN1bHQgPSBGaWVsZE1hc2tVdGlsLnVuaW9uKG1hc2sxLCBtYXNrMiwgbWFz
azMsIG1hc2s0KTsKLSAgICBhc3NlcnRFcXVhbHMoImJhcixmb28iLCBGaWVsZE1hc2tVdGlsLnRv
U3RyaW5nKHJlc3VsdCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJzZWN0aW9u
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gT25seSB0ZXN0IGEgc2ltcGxlIGNhc2UgaGVy
ZSBhbmQgZXhwZWN0Ci0gICAgLy8ge0BsaW5rIEZpZWxkTWFza1RyZWVUZXN0I3Rlc3RJbnRlcnNl
Y3RGaWVsZFBhdGh9IHRvIGNvdmVyIGFsbCBzY2VuYXJpb3MuCi0gICAgRmllbGRNYXNrIG1hc2sx
ID0gRmllbGRNYXNrVXRpbC5mcm9tU3RyaW5nKCJmb28sYmFyLmJheixiYXIucXV6Iik7Ci0gICAg
RmllbGRNYXNrIG1hc2syID0gRmllbGRNYXNrVXRpbC5mcm9tU3RyaW5nKCJmb28uYmFyLGJhciIp
OwotICAgIEZpZWxkTWFzayByZXN1bHQgPSBGaWVsZE1hc2tVdGlsLmludGVyc2VjdGlvbihtYXNr
MSwgbWFzazIpOwotICAgIGFzc2VydEVxdWFscygiYmFyLmJheixiYXIucXV6LGZvby5iYXIiLCBG
aWVsZE1hc2tVdGlsLnRvU3RyaW5nKHJlc3VsdCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0
ZXN0TWVyZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBPbmx5IHRlc3QgYSBzaW1wbGUg
Y2FzZSBoZXJlIGFuZCBleHBlY3QKLSAgICAvLyB7QGxpbmsgRmllbGRNYXNrVHJlZVRlc3QjdGVz
dE1lcmdlfSB0byBjb3ZlciBhbGwgc2NlbmFyaW9zLgotICAgIE5lc3RlZFRlc3RBbGxUeXBlcyBz
b3VyY2UgPSBOZXN0ZWRUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRQYXls
b2FkKFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkuc2V0T3B0aW9uYWxJbnQzMigxMjM0KSkKLSAg
ICAgICAgLmJ1aWxkKCk7Ci0gICAgTmVzdGVkVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9
IE5lc3RlZFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgRmllbGRNYXNrVXRpbC5tZXJn
ZShGaWVsZE1hc2tVdGlsLmZyb21TdHJpbmcoInBheWxvYWQiKSwgc291cmNlLCBidWlsZGVyKTsK
LSAgICBhc3NlcnRFcXVhbHMoMTIzNCwgYnVpbGRlci5nZXRQYXlsb2FkKCkuZ2V0T3B0aW9uYWxJ
bnQzMigpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3JjL3Rlc3QvamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL3V0aWwvSnNvbkZvcm1hdFRlc3QuamF2YSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS91dGlsL3NyYy90
ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsL0pzb25Gb3JtYXRUZXN0LmphdmEKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NWI2MjZjNDEyYzc5YmUxOTQwNjRhMGMxNmY4
M2M0NTljYWM5MzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9qYXZhL3V0aWwvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL3V0aWwvSnNvbkZv
cm1hdFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNzQgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi51
dGlsOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5Bbnk7Ci1pbXBvcnQgY29tLmdvb2ds
ZS5wcm90b2J1Zi5Cb29sVmFsdWU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3Ry
aW5nOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZTsKLWltcG9ydCBjb20u
Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYu
RmxvYXRWYWx1ZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWU7Ci1pbXBv
cnQgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlOwotaW1wb3J0IGNvbS5nb29nbGUucHJv
dG9idWYuSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uOwotaW1wb3J0IGNvbS5nb29nbGUu
cHJvdG9idWYuTGlzdFZhbHVlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuTWVzc2FnZTsK
LWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlOwotaW1wb3J0IGNvbS5nb29n
bGUucHJvdG9idWYuU3RydWN0OwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuVUludDMyVmFs
dWU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZTsKLWltcG9ydCBjb20u
Z29vZ2xlLnByb3RvYnVmLlZhbHVlOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYudXRpbC5K
c29uRm9ybWF0LlR5cGVSZWdpc3RyeTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLnV0aWwu
SnNvblRlc3RQcm90by5UZXN0QWxsVHlwZXM7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi51
dGlsLkpzb25UZXN0UHJvdG8uVGVzdEFsbFR5cGVzLk5lc3RlZEVudW07Ci1pbXBvcnQgY29tLmdv
b2dsZS5wcm90b2J1Zi51dGlsLkpzb25UZXN0UHJvdG8uVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3Nh
Z2U7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi51dGlsLkpzb25UZXN0UHJvdG8uVGVzdEFu
eTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLnV0aWwuSnNvblRlc3RQcm90by5UZXN0Q3Vz
dG9tSnNvbk5hbWU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi51dGlsLkpzb25UZXN0UHJv
dG8uVGVzdER1cmF0aW9uOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYudXRpbC5Kc29uVGVz
dFByb3RvLlRlc3RGaWVsZE1hc2s7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi51dGlsLkpz
b25UZXN0UHJvdG8uVGVzdE1hcDsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLnV0aWwuSnNv
blRlc3RQcm90by5UZXN0T25lb2Y7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi51dGlsLkpz
b25UZXN0UHJvdG8uVGVzdFN0cnVjdDsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLnV0aWwu
SnNvblRlc3RQcm90by5UZXN0VGltZXN0YW1wOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYu
dXRpbC5Kc29uVGVzdFByb3RvLlRlc3RXcmFwcGVyczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29y
ay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5t
YXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLXB1YmxpYyBj
bGFzcyBKc29uRm9ybWF0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgcHJpdmF0ZSB2b2lkIHNl
dEFsbEZpZWxkcyhUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgYnVpbGRlci5z
ZXRPcHRpb25hbEludDMyKDEyMzQpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxJbnQ2NCgxMjM0
NTY3ODkwMTIzNDU2Nzg5TCk7Ci0gICAgYnVpbGRlci5zZXRPcHRpb25hbFVpbnQzMig1Njc4KTsK
LSAgICBidWlsZGVyLnNldE9wdGlvbmFsVWludDY0KDIzNDU2Nzg5MDEyMzQ1Njc4OTBMKTsKLSAg
ICBidWlsZGVyLnNldE9wdGlvbmFsU2ludDMyKDkwMTIpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9u
YWxTaW50NjQoMzQ1Njc4OTAxMjM0NTY3ODkwMUwpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxG
aXhlZDMyKDM0NTYpOwotICAgIGJ1aWxkZXIuc2V0T3B0aW9uYWxGaXhlZDY0KDQ1Njc4OTAxMjM0
NTY3ODkwMTJMKTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsU2ZpeGVkMzIoNzg5MCk7Ci0gICAg
YnVpbGRlci5zZXRPcHRpb25hbFNmaXhlZDY0KDU2Nzg5MDEyMzQ1Njc4OTAxMjNMKTsKLSAgICBi
dWlsZGVyLnNldE9wdGlvbmFsRmxvYXQoMS41Zik7Ci0gICAgYnVpbGRlci5zZXRPcHRpb25hbERv
dWJsZSgxLjI1KTsKLSAgICBidWlsZGVyLnNldE9wdGlvbmFsQm9vbCh0cnVlKTsKLSAgICBidWls
ZGVyLnNldE9wdGlvbmFsU3RyaW5nKCJIZWxsbyB3b3JsZCEiKTsKLSAgICBidWlsZGVyLnNldE9w
dGlvbmFsQnl0ZXMoQnl0ZVN0cmluZy5jb3B5RnJvbShuZXcgYnl0ZVtdezAsIDEsIDJ9KSk7Ci0g
ICAgYnVpbGRlci5zZXRPcHRpb25hbE5lc3RlZEVudW0oTmVzdGVkRW51bS5CQVIpOwotICAgIGJ1
aWxkZXIuZ2V0T3B0aW9uYWxOZXN0ZWRNZXNzYWdlQnVpbGRlcigpLnNldFZhbHVlKDEwMCk7Ci0K
LSAgICBidWlsZGVyLmFkZFJlcGVhdGVkSW50MzIoMTIzNCk7Ci0gICAgYnVpbGRlci5hZGRSZXBl
YXRlZEludDY0KDEyMzQ1Njc4OTAxMjM0NTY3ODlMKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVk
VWludDMyKDU2NzgpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRVaW50NjQoMjM0NTY3ODkwMTIz
NDU2Nzg5MEwpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRTaW50MzIoOTAxMik7Ci0gICAgYnVp
bGRlci5hZGRSZXBlYXRlZFNpbnQ2NCgzNDU2Nzg5MDEyMzQ1Njc4OTAxTCk7Ci0gICAgYnVpbGRl
ci5hZGRSZXBlYXRlZEZpeGVkMzIoMzQ1Nik7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEZpeGVk
NjQoNDU2Nzg5MDEyMzQ1Njc4OTAxMkwpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRTZml4ZWQz
Mig3ODkwKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkU2ZpeGVkNjQoNTY3ODkwMTIzNDU2Nzg5
MDEyM0wpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRGbG9hdCgxLjVmKTsKLSAgICBidWlsZGVy
LmFkZFJlcGVhdGVkRG91YmxlKDEuMjUpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRCb29sKHRy
dWUpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRTdHJpbmcoIkhlbGxvIHdvcmxkISIpOwotICAg
IGJ1aWxkZXIuYWRkUmVwZWF0ZWRCeXRlcyhCeXRlU3RyaW5nLmNvcHlGcm9tKG5ldyBieXRlW117
MCwgMSwgMn0pKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkTmVzdGVkRW51bShOZXN0ZWRFbnVt
LkJBUik7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZE5lc3RlZE1lc3NhZ2VCdWlsZGVyKCkuc2V0
VmFsdWUoMTAwKTsKLQotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRJbnQzMigyMzQpOwotICAgIGJ1
aWxkZXIuYWRkUmVwZWF0ZWRJbnQ2NCgyMzQ1Njc4OTAxMjM0NTY3ODlMKTsKLSAgICBidWlsZGVy
LmFkZFJlcGVhdGVkVWludDMyKDY3OCk7Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZFVpbnQ2NCgz
NDU2Nzg5MDEyMzQ1Njc4OTBMKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkU2ludDMyKDAxMik7
Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZFNpbnQ2NCg0NTY3ODkwMTIzNDU2Nzg5MDFMKTsKLSAg
ICBidWlsZGVyLmFkZFJlcGVhdGVkRml4ZWQzMig0NTYpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0
ZWRGaXhlZDY0KDU2Nzg5MDEyMzQ1Njc4OTAxMkwpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRT
Zml4ZWQzMig4OTApOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRTZml4ZWQ2NCg2Nzg5MDEyMzQ1
Njc4OTAxMjNMKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkRmxvYXQoMTEuNWYpOwotICAgIGJ1
aWxkZXIuYWRkUmVwZWF0ZWREb3VibGUoMTEuMjUpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRC
b29sKHRydWUpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWRTdHJpbmcoImVsbG8gd29ybGQhIik7
Ci0gICAgYnVpbGRlci5hZGRSZXBlYXRlZEJ5dGVzKEJ5dGVTdHJpbmcuY29weUZyb20obmV3IGJ5
dGVbXXsxLCAyfSkpOwotICAgIGJ1aWxkZXIuYWRkUmVwZWF0ZWROZXN0ZWRFbnVtKE5lc3RlZEVu
dW0uQkFaKTsKLSAgICBidWlsZGVyLmFkZFJlcGVhdGVkTmVzdGVkTWVzc2FnZUJ1aWxkZXIoKS5z
ZXRWYWx1ZSgyMDApOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFzc2VydFJvdW5kVHJpcEVxdWFs
cyhNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBFeGNlcHRpb24gewotICAgIGFzc2VydFJvdW5kVHJp
cEVxdWFscyhtZXNzYWdlLCBUeXBlUmVnaXN0cnkuZ2V0RW1wdHlUeXBlUmVnaXN0cnkoKSk7Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgYXNzZXJ0Um91bmRUcmlwRXF1YWxzKE1lc3NhZ2UgbWVzc2Fn
ZSwgVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBKc29uRm9y
bWF0LlByaW50ZXIgcHJpbnRlciA9IEpzb25Gb3JtYXQucHJpbnRlcigpLnVzaW5nVHlwZVJlZ2lz
dHJ5KHJlZ2lzdHJ5KTsKLSAgICBKc29uRm9ybWF0LlBhcnNlciBwYXJzZXIgPSBKc29uRm9ybWF0
LnBhcnNlcigpLnVzaW5nVHlwZVJlZ2lzdHJ5KHJlZ2lzdHJ5KTsKLSAgICBNZXNzYWdlLkJ1aWxk
ZXIgYnVpbGRlciA9IG1lc3NhZ2UubmV3QnVpbGRlckZvclR5cGUoKTsKLSAgICBwYXJzZXIubWVy
Z2UocHJpbnRlci5wcmludChtZXNzYWdlKSwgYnVpbGRlcik7Ci0gICAgTWVzc2FnZSBwYXJzZWRN
ZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLnRvU3Ry
aW5nKCksIHBhcnNlZE1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmlu
ZyB0b0pzb25TdHJpbmcoTWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAg
IHJldHVybiBKc29uRm9ybWF0LnByaW50ZXIoKS5wcmludChtZXNzYWdlKTsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBtZXJnZUZyb21Kc29uKFN0cmluZyBqc29uLCBNZXNzYWdlLkJ1aWxkZXIgYnVp
bGRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBKc29uRm9ybWF0LnBhcnNlcigpLm1lcmdl
KGpzb24sIGJ1aWxkZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEFsbEZpZWxkcygpIHRo
cm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0
QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIHNldEFsbEZpZWxkcyhidWlsZGVyKTsKLSAgICBU
ZXN0QWxsVHlwZXMgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLQotICAgIGFzc2VydEVxdWFs
cygKLSAgICAgICAgIntcbiIKLSAgICAgICAgICAgICsgIiAgXCJvcHRpb25hbEludDMyXCI6IDEy
MzQsXG4iCi0gICAgICAgICAgICArICIgIFwib3B0aW9uYWxJbnQ2NFwiOiBcIjEyMzQ1Njc4OTAx
MjM0NTY3ODlcIixcbiIKLSAgICAgICAgICAgICsgIiAgXCJvcHRpb25hbFVpbnQzMlwiOiA1Njc4
LFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlvbmFsVWludDY0XCI6IFwiMjM0NTY3ODkwMTIz
NDU2Nzg5MFwiLFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlvbmFsU2ludDMyXCI6IDkwMTIs
XG4iCi0gICAgICAgICAgICArICIgIFwib3B0aW9uYWxTaW50NjRcIjogXCIzNDU2Nzg5MDEyMzQ1
Njc4OTAxXCIsXG4iCi0gICAgICAgICAgICArICIgIFwib3B0aW9uYWxGaXhlZDMyXCI6IDM0NTYs
XG4iCi0gICAgICAgICAgICArICIgIFwib3B0aW9uYWxGaXhlZDY0XCI6IFwiNDU2Nzg5MDEyMzQ1
Njc4OTAxMlwiLFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlvbmFsU2ZpeGVkMzJcIjogNzg5
MCxcbiIKLSAgICAgICAgICAgICsgIiAgXCJvcHRpb25hbFNmaXhlZDY0XCI6IFwiNTY3ODkwMTIz
NDU2Nzg5MDEyM1wiLFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlvbmFsRmxvYXRcIjogMS41
LFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlvbmFsRG91YmxlXCI6IDEuMjUsXG4iCi0gICAg
ICAgICAgICArICIgIFwib3B0aW9uYWxCb29sXCI6IHRydWUsXG4iCi0gICAgICAgICAgICArICIg
IFwib3B0aW9uYWxTdHJpbmdcIjogXCJIZWxsbyB3b3JsZCFcIixcbiIKLSAgICAgICAgICAgICsg
IiAgXCJvcHRpb25hbEJ5dGVzXCI6IFwiQUFFQ1wiLFxuIgotICAgICAgICAgICAgKyAiICBcIm9w
dGlvbmFsTmVzdGVkTWVzc2FnZVwiOiB7XG4iCi0gICAgICAgICAgICArICIgICAgXCJ2YWx1ZVwi
OiAxMDBcbiIKLSAgICAgICAgICAgICsgIiAgfSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJvcHRp
b25hbE5lc3RlZEVudW1cIjogXCJCQVJcIixcbiIKLSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRl
ZEludDMyXCI6IFsxMjM0LCAyMzRdLFxuIgotICAgICAgICAgICAgKyAiICBcInJlcGVhdGVkSW50
NjRcIjogW1wiMTIzNDU2Nzg5MDEyMzQ1Njc4OVwiLCBcIjIzNDU2Nzg5MDEyMzQ1Njc4OVwiXSxc
biIKLSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZFVpbnQzMlwiOiBbNTY3OCwgNjc4XSxcbiIK
LSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZFVpbnQ2NFwiOiBbXCIyMzQ1Njc4OTAxMjM0NTY3
ODkwXCIsIFwiMzQ1Njc4OTAxMjM0NTY3ODkwXCJdLFxuIgotICAgICAgICAgICAgKyAiICBcInJl
cGVhdGVkU2ludDMyXCI6IFs5MDEyLCAxMF0sXG4iCi0gICAgICAgICAgICArICIgIFwicmVwZWF0
ZWRTaW50NjRcIjogW1wiMzQ1Njc4OTAxMjM0NTY3ODkwMVwiLCBcIjQ1Njc4OTAxMjM0NTY3ODkw
MVwiXSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZEZpeGVkMzJcIjogWzM0NTYsIDQ1
Nl0sXG4iCi0gICAgICAgICAgICArICIgIFwicmVwZWF0ZWRGaXhlZDY0XCI6IFtcIjQ1Njc4OTAx
MjM0NTY3ODkwMTJcIiwgXCI1Njc4OTAxMjM0NTY3ODkwMTJcIl0sXG4iCi0gICAgICAgICAgICAr
ICIgIFwicmVwZWF0ZWRTZml4ZWQzMlwiOiBbNzg5MCwgODkwXSxcbiIKLSAgICAgICAgICAgICsg
IiAgXCJyZXBlYXRlZFNmaXhlZDY0XCI6IFtcIjU2Nzg5MDEyMzQ1Njc4OTAxMjNcIiwgXCI2Nzg5
MDEyMzQ1Njc4OTAxMjNcIl0sXG4iCi0gICAgICAgICAgICArICIgIFwicmVwZWF0ZWRGbG9hdFwi
OiBbMS41LCAxMS41XSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZERvdWJsZVwiOiBb
MS4yNSwgMTEuMjVdLFxuIgotICAgICAgICAgICAgKyAiICBcInJlcGVhdGVkQm9vbFwiOiBbdHJ1
ZSwgdHJ1ZV0sXG4iCi0gICAgICAgICAgICArICIgIFwicmVwZWF0ZWRTdHJpbmdcIjogW1wiSGVs
bG8gd29ybGQhXCIsIFwiZWxsbyB3b3JsZCFcIl0sXG4iCi0gICAgICAgICAgICArICIgIFwicmVw
ZWF0ZWRCeXRlc1wiOiBbXCJBQUVDXCIsIFwiQVFJPVwiXSxcbiIKLSAgICAgICAgICAgICsgIiAg
XCJyZXBlYXRlZE5lc3RlZE1lc3NhZ2VcIjogW3tcbiIKLSAgICAgICAgICAgICsgIiAgICBcInZh
bHVlXCI6IDEwMFxuIgotICAgICAgICAgICAgKyAiICB9LCB7XG4iCi0gICAgICAgICAgICArICIg
ICAgXCJ2YWx1ZVwiOiAyMDBcbiIKLSAgICAgICAgICAgICsgIiAgfV0sXG4iCi0gICAgICAgICAg
ICArICIgIFwicmVwZWF0ZWROZXN0ZWRFbnVtXCI6IFtcIkJBUlwiLCBcIkJBWlwiXVxuIgotICAg
ICAgICAgICAgKyAifSIsCi0gICAgICAgIHRvSnNvblN0cmluZyhtZXNzYWdlKSk7Ci0KLSAgICBh
c3NlcnRSb3VuZFRyaXBFcXVhbHMobWVzc2FnZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0
VW5rbm93bkVudW1WYWx1ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXMg
bWVzc2FnZSA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldE9wdGlvbmFs
TmVzdGVkRW51bVZhbHVlKDEyMzQ1KQotICAgICAgICAuYWRkUmVwZWF0ZWROZXN0ZWRFbnVtVmFs
dWUoMTIzNDUpCi0gICAgICAgIC5hZGRSZXBlYXRlZE5lc3RlZEVudW1WYWx1ZSgwKQotICAgICAg
ICAuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ7XG4iCi0gICAgICAgICsg
IiAgXCJvcHRpb25hbE5lc3RlZEVudW1cIjogMTIzNDUsXG4iCi0gICAgICAgICsgIiAgXCJyZXBl
YXRlZE5lc3RlZEVudW1cIjogWzEyMzQ1LCBcIkZPT1wiXVxuIgotICAgICAgICArICJ9IiwgdG9K
c29uU3RyaW5nKG1lc3NhZ2UpKTsKLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMobWVzc2FnZSk7
Ci0KLSAgICBUZXN0TWFwLkJ1aWxkZXIgbWFwQnVpbGRlciA9IFRlc3RNYXAubmV3QnVpbGRlcigp
OwotICAgIG1hcEJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9FbnVtTWFwVmFsdWUoKS5wdXQoMSwg
MCk7Ci0gICAgbWFwQnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0VudW1NYXBWYWx1ZSgpLnB1dCgy
LCAxMjM0NSk7Ci0gICAgVGVzdE1hcCBtYXBNZXNzYWdlID0gbWFwQnVpbGRlci5idWlsZCgpOwot
ICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgIntcbiIKLSAgICAgICAgICAgICsgIiAgXCJpbnQz
MlRvRW51bU1hcFwiOiB7XG4iCi0gICAgICAgICAgICArICIgICAgXCIxXCI6IFwiRk9PXCIsXG4i
Ci0gICAgICAgICAgICArICIgICAgXCIyXCI6IDEyMzQ1XG4iCi0gICAgICAgICAgICArICIgIH1c
biIKLSAgICAgICAgICAgICsgIn0iLAotICAgICAgICB0b0pzb25TdHJpbmcobWFwTWVzc2FnZSkp
OwotICAgIGFzc2VydFJvdW5kVHJpcEVxdWFscyhtYXBNZXNzYWdlKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RTcGVjaWFsRmxvYXRWYWx1ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBU
ZXN0QWxsVHlwZXMgbWVzc2FnZSA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCkKLSAgICAgICAg
LmFkZFJlcGVhdGVkRmxvYXQoRmxvYXQuTmFOKQotICAgICAgICAuYWRkUmVwZWF0ZWRGbG9hdChG
bG9hdC5QT1NJVElWRV9JTkZJTklUWSkKLSAgICAgICAgLmFkZFJlcGVhdGVkRmxvYXQoRmxvYXQu
TkVHQVRJVkVfSU5GSU5JVFkpCi0gICAgICAgIC5hZGRSZXBlYXRlZERvdWJsZShEb3VibGUuTmFO
KQotICAgICAgICAuYWRkUmVwZWF0ZWREb3VibGUoRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKQot
ICAgICAgICAuYWRkUmVwZWF0ZWREb3VibGUoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKQotICAg
ICAgICAuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ7XG4iCi0gICAgICAg
ICsgIiAgXCJyZXBlYXRlZEZsb2F0XCI6IFtcIk5hTlwiLCBcIkluZmluaXR5XCIsIFwiLUluZmlu
aXR5XCJdLFxuIgotICAgICAgICArICIgIFwicmVwZWF0ZWREb3VibGVcIjogW1wiTmFOXCIsIFwi
SW5maW5pdHlcIiwgXCItSW5maW5pdHlcIl1cbiIKLSAgICAgICAgKyAifSIsIHRvSnNvblN0cmlu
ZyhtZXNzYWdlKSk7Ci0KLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMobWVzc2FnZSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VyQWNjZXB0U3RyaW5nRm9yTnVtYmVyaWNGaWVsZCgp
IHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBU
ZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIG1lcmdlRnJvbUpzb24oCi0gICAgICAgICJ7
XG4iCi0gICAgICAgICsgIiAgXCJvcHRpb25hbEludDMyXCI6IFwiMTIzNFwiLFxuIgotICAgICAg
ICArICIgIFwib3B0aW9uYWxVaW50MzJcIjogXCI1Njc4XCIsXG4iCi0gICAgICAgICsgIiAgXCJv
cHRpb25hbFNpbnQzMlwiOiBcIjkwMTJcIixcbiIKLSAgICAgICAgKyAiICBcIm9wdGlvbmFsRml4
ZWQzMlwiOiBcIjM0NTZcIixcbiIKLSAgICAgICAgKyAiICBcIm9wdGlvbmFsU2ZpeGVkMzJcIjog
XCI3ODkwXCIsXG4iCi0gICAgICAgICsgIiAgXCJvcHRpb25hbEZsb2F0XCI6IFwiMS41XCIsXG4i
Ci0gICAgICAgICsgIiAgXCJvcHRpb25hbERvdWJsZVwiOiBcIjEuMjVcIixcbiIKLSAgICAgICAg
KyAiICBcIm9wdGlvbmFsQm9vbFwiOiBcInRydWVcIlxuIgotICAgICAgICArICJ9IiwgYnVpbGRl
cik7Ci0gICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UgPSBidWlsZGVyLmJ1aWxkKCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDEyMzQsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLSAgICBhc3NlcnRF
cXVhbHMoNTY3OCwgbWVzc2FnZS5nZXRPcHRpb25hbFVpbnQzMigpKTsKLSAgICBhc3NlcnRFcXVh
bHMoOTAxMiwgbWVzc2FnZS5nZXRPcHRpb25hbFNpbnQzMigpKTsKLSAgICBhc3NlcnRFcXVhbHMo
MzQ1NiwgbWVzc2FnZS5nZXRPcHRpb25hbEZpeGVkMzIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDc4
OTAsIG1lc3NhZ2UuZ2V0T3B0aW9uYWxTZml4ZWQzMigpKTsKLSAgICBhc3NlcnRFcXVhbHMoMS41
ZiwgbWVzc2FnZS5nZXRPcHRpb25hbEZsb2F0KCkpOwotICAgIGFzc2VydEVxdWFscygxLjI1LCBt
ZXNzYWdlLmdldE9wdGlvbmFsRG91YmxlKCkpOwotICAgIGFzc2VydEVxdWFscyh0cnVlLCBtZXNz
YWdlLmdldE9wdGlvbmFsQm9vbCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZXJB
Y2NlcHRGbG9hdGluZ1BvaW50VmFsdWVGb3JJbnRlZ2VyRmllbGQoKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICAvLyBUZXN0IHRoYXQgbnVtZXJpYyB2YWx1ZXMgbGlrZSAiMS4wMDAiLCAiMWU1IiB3
aWxsIGFsc28gYmUgYWNjZXB0ZWQuCi0gICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9
IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgbWVyZ2VGcm9tSnNvbigKLSAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZEludDMyXCI6IFsxLjAwMCwgMWU1LCBc
IjEuMDAwXCIsIFwiMWU1XCJdLFxuIgotICAgICAgICAgICAgKyAiICBcInJlcGVhdGVkVWludDMy
XCI6IFsxLjAwMCwgMWU1LCBcIjEuMDAwXCIsIFwiMWU1XCJdLFxuIgotICAgICAgICAgICAgKyAi
ICBcInJlcGVhdGVkSW50NjRcIjogWzEuMDAwLCAxZTUsIFwiMS4wMDBcIiwgXCIxZTVcIl0sXG4i
Ci0gICAgICAgICAgICArICIgIFwicmVwZWF0ZWRVaW50NjRcIjogWzEuMDAwLCAxZTUsIFwiMS4w
MDBcIiwgXCIxZTVcIl1cbiIKLSAgICAgICAgICAgICsgIn0iLCBidWlsZGVyKTsKLSAgICBpbnRb
XSBleHBlY3RlZFZhbHVlcyA9IG5ldyBpbnRbXXsxLCAxMDAwMDAsIDEsIDEwMDAwMH07Ci0gICAg
YXNzZXJ0RXF1YWxzKDQsIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRJbnQzMkNvdW50KCkpOwotICAgIGFz
c2VydEVxdWFscyg0LCBidWlsZGVyLmdldFJlcGVhdGVkVWludDMyQ291bnQoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDQsIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRJbnQ2NENvdW50KCkpOwotICAgIGFzc2Vy
dEVxdWFscyg0LCBidWlsZGVyLmdldFJlcGVhdGVkVWludDY0Q291bnQoKSk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFZhbHVl
c1tpXSwgYnVpbGRlci5nZXRSZXBlYXRlZEludDMyKGkpKTsKLSAgICAgIGFzc2VydEVxdWFscyhl
eHBlY3RlZFZhbHVlc1tpXSwgYnVpbGRlci5nZXRSZXBlYXRlZFVpbnQzMihpKSk7Ci0gICAgICBh
c3NlcnRFcXVhbHMoZXhwZWN0ZWRWYWx1ZXNbaV0sIGJ1aWxkZXIuZ2V0UmVwZWF0ZWRJbnQ2NChp
KSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRWYWx1ZXNbaV0sIGJ1aWxkZXIuZ2V0UmVw
ZWF0ZWRVaW50NjQoaSkpOwotICAgIH0KLQotICAgIC8vIE5vbi1pbnRlZ2VycyB3aWxsIHN0aWxs
IGJlIHJlamVjdGVkLgotICAgIGFzc2VydFJlamVjdHMoIm9wdGlvbmFsSW50MzIiLCAiMS41Iik7
Ci0gICAgYXNzZXJ0UmVqZWN0cygib3B0aW9uYWxVaW50MzIiLCAiMS41Iik7Ci0gICAgYXNzZXJ0
UmVqZWN0cygib3B0aW9uYWxJbnQ2NCIsICIxLjUiKTsKLSAgICBhc3NlcnRSZWplY3RzKCJvcHRp
b25hbFVpbnQ2NCIsICIxLjUiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhc3NlcnRSZWplY3Rz
KFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLSAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBi
dWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICB0cnkgewotICAgICAgLy8g
TnVtZXJpYyBmb3JtIGlzIHJlamVjdGVkLgotICAgICAgbWVyZ2VGcm9tSnNvbigie1wiIiArIG5h
bWUgKyAiXCI6IiArIHZhbHVlICsgIn0iLCBidWlsZGVyKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlv
biBpcyBleHBlY3RlZC4iKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBFeHBlY3RlZC4KLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIC8vIFN0cmluZyBmb3JtIGlzIGFs
c28gcmVqZWN0ZWQuCi0gICAgICBtZXJnZUZyb21Kc29uKCJ7XCIiICsgbmFtZSArICJcIjpcIiIg
KyB2YWx1ZSArICJcIn0iLCBidWlsZGVyKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiBpcyBleHBl
Y3RlZC4iKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3Rl
ZC4KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYXNzZXJ0QWNjZXB0cyhTdHJpbmcgbmFt
ZSwgU3RyaW5nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcy5C
dWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgIC8vIEJvdGgg
bnVtZXJpYyBmb3JtIGFuZCBzdHJpbmcgZm9ybSBhcmUgYWNjZXB0ZWQuCi0gICAgbWVyZ2VGcm9t
SnNvbigie1wiIiArIG5hbWUgKyAiXCI6IiArIHZhbHVlICsgIn0iLCBidWlsZGVyKTsKLSAgICBi
dWlsZGVyLmNsZWFyKCk7Ci0gICAgbWVyZ2VGcm9tSnNvbigie1wiIiArIG5hbWUgKyAiXCI6XCIi
ICsgdmFsdWUgKyAiXCJ9IiwgYnVpbGRlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFy
c2VyUmVqZWN0T3V0T2ZSYW5nZU51bWVyaWNWYWx1ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBhc3NlcnRBY2NlcHRzKCJvcHRpb25hbEludDMyIiwgU3RyaW5nLnZhbHVlT2YoSW50ZWdlci5N
QVhfVkFMVUUpKTsKLSAgICBhc3NlcnRBY2NlcHRzKCJvcHRpb25hbEludDMyIiwgU3RyaW5nLnZh
bHVlT2YoSW50ZWdlci5NSU5fVkFMVUUpKTsKLSAgICBhc3NlcnRSZWplY3RzKCJvcHRpb25hbElu
dDMyIiwgU3RyaW5nLnZhbHVlT2YoSW50ZWdlci5NQVhfVkFMVUUgKyAxTCkpOwotICAgIGFzc2Vy
dFJlamVjdHMoIm9wdGlvbmFsSW50MzIiLCBTdHJpbmcudmFsdWVPZihJbnRlZ2VyLk1JTl9WQUxV
RSAtIDFMKSk7Ci0KLSAgICBhc3NlcnRBY2NlcHRzKCJvcHRpb25hbFVpbnQzMiIsIFN0cmluZy52
YWx1ZU9mKEludGVnZXIuTUFYX1ZBTFVFICsgMUwpKTsKLSAgICBhc3NlcnRSZWplY3RzKCJvcHRp
b25hbFVpbnQzMiIsICIxMjM0NTY3ODkwMTIzNDUiKTsKLSAgICBhc3NlcnRSZWplY3RzKCJvcHRp
b25hbFVpbnQzMiIsICItMSIpOwotCi0gICAgQmlnSW50ZWdlciBvbmUgPSBuZXcgQmlnSW50ZWdl
cigiMSIpOwotICAgIEJpZ0ludGVnZXIgbWF4TG9uZyA9IG5ldyBCaWdJbnRlZ2VyKFN0cmluZy52
YWx1ZU9mKExvbmcuTUFYX1ZBTFVFKSk7Ci0gICAgQmlnSW50ZWdlciBtaW5Mb25nID0gbmV3IEJp
Z0ludGVnZXIoU3RyaW5nLnZhbHVlT2YoTG9uZy5NSU5fVkFMVUUpKTsKLSAgICBhc3NlcnRBY2Nl
cHRzKCJvcHRpb25hbEludDY0IiwgbWF4TG9uZy50b1N0cmluZygpKTsKLSAgICBhc3NlcnRBY2Nl
cHRzKCJvcHRpb25hbEludDY0IiwgbWluTG9uZy50b1N0cmluZygpKTsKLSAgICBhc3NlcnRSZWpl
Y3RzKCJvcHRpb25hbEludDY0IiwgbWF4TG9uZy5hZGQob25lKS50b1N0cmluZygpKTsKLSAgICBh
c3NlcnRSZWplY3RzKCJvcHRpb25hbEludDY0IiwgbWluTG9uZy5zdWJ0cmFjdChvbmUpLnRvU3Ry
aW5nKCkpOwotCi0gICAgYXNzZXJ0QWNjZXB0cygib3B0aW9uYWxVaW50NjQiLCBtYXhMb25nLmFk
ZChvbmUpLnRvU3RyaW5nKCkpOwotICAgIGFzc2VydFJlamVjdHMoIm9wdGlvbmFsVWludDY0Iiwg
IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiKTsKLSAgICBhc3NlcnRSZWplY3RzKCJvcHRpb25h
bFVpbnQ2NCIsICItMSIpOwotCi0gICAgYXNzZXJ0QWNjZXB0cygib3B0aW9uYWxCb29sIiwgInRy
dWUiKTsKLSAgICBhc3NlcnRSZWplY3RzKCJvcHRpb25hbEJvb2wiLCAiMSIpOwotICAgIGFzc2Vy
dFJlamVjdHMoIm9wdGlvbmFsQm9vbCIsICIwIik7Ci0KLSAgICBhc3NlcnRBY2NlcHRzKCJvcHRp
b25hbEZsb2F0IiwgU3RyaW5nLnZhbHVlT2YoRmxvYXQuTUFYX1ZBTFVFKSk7Ci0gICAgYXNzZXJ0
QWNjZXB0cygib3B0aW9uYWxGbG9hdCIsIFN0cmluZy52YWx1ZU9mKC1GbG9hdC5NQVhfVkFMVUUp
KTsKLSAgICBhc3NlcnRSZWplY3RzKCJvcHRpb25hbEZsb2F0IiwgU3RyaW5nLnZhbHVlT2YoRG91
YmxlLk1BWF9WQUxVRSkpOwotICAgIGFzc2VydFJlamVjdHMoIm9wdGlvbmFsRmxvYXQiLCBTdHJp
bmcudmFsdWVPZigtRG91YmxlLk1BWF9WQUxVRSkpOwotCi0gICAgQmlnRGVjaW1hbCBtb3JlVGhh
bk9uZSA9IG5ldyBCaWdEZWNpbWFsKCIxLjAwMDAwMSIpOwotICAgIEJpZ0RlY2ltYWwgbWF4RG91
YmxlID0gbmV3IEJpZ0RlY2ltYWwoRG91YmxlLk1BWF9WQUxVRSk7Ci0gICAgQmlnRGVjaW1hbCBt
aW5Eb3VibGUgPSBuZXcgQmlnRGVjaW1hbCgtRG91YmxlLk1BWF9WQUxVRSk7Ci0gICAgYXNzZXJ0
QWNjZXB0cygib3B0aW9uYWxEb3VibGUiLCBtYXhEb3VibGUudG9TdHJpbmcoKSk7Ci0gICAgYXNz
ZXJ0QWNjZXB0cygib3B0aW9uYWxEb3VibGUiLCBtaW5Eb3VibGUudG9TdHJpbmcoKSk7Ci0gICAg
YXNzZXJ0UmVqZWN0cygib3B0aW9uYWxEb3VibGUiLCBtYXhEb3VibGUubXVsdGlwbHkobW9yZVRo
YW5PbmUpLnRvU3RyaW5nKCkpOwotICAgIGFzc2VydFJlamVjdHMoIm9wdGlvbmFsRG91YmxlIiwg
bWluRG91YmxlLm11bHRpcGx5KG1vcmVUaGFuT25lKS50b1N0cmluZygpKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RQYXJzZXJBY2NlcHROdWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAg
VGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7
Ci0gICAgbWVyZ2VGcm9tSnNvbigKLSAgICAgICAgIntcbiIKLSAgICAgICAgKyAiICBcIm9wdGlv
bmFsSW50MzJcIjogbnVsbCxcbiIKLSAgICAgICAgKyAiICBcIm9wdGlvbmFsSW50NjRcIjogbnVs
bCxcbiIKLSAgICAgICAgKyAiICBcIm9wdGlvbmFsVWludDMyXCI6IG51bGwsXG4iCi0gICAgICAg
ICsgIiAgXCJvcHRpb25hbFVpbnQ2NFwiOiBudWxsLFxuIgotICAgICAgICArICIgIFwib3B0aW9u
YWxTaW50MzJcIjogbnVsbCxcbiIKLSAgICAgICAgKyAiICBcIm9wdGlvbmFsU2ludDY0XCI6IG51
bGwsXG4iCi0gICAgICAgICsgIiAgXCJvcHRpb25hbEZpeGVkMzJcIjogbnVsbCxcbiIKLSAgICAg
ICAgKyAiICBcIm9wdGlvbmFsRml4ZWQ2NFwiOiBudWxsLFxuIgotICAgICAgICArICIgIFwib3B0
aW9uYWxTZml4ZWQzMlwiOiBudWxsLFxuIgotICAgICAgICArICIgIFwib3B0aW9uYWxTZml4ZWQ2
NFwiOiBudWxsLFxuIgotICAgICAgICArICIgIFwib3B0aW9uYWxGbG9hdFwiOiBudWxsLFxuIgot
ICAgICAgICArICIgIFwib3B0aW9uYWxEb3VibGVcIjogbnVsbCxcbiIKLSAgICAgICAgKyAiICBc
Im9wdGlvbmFsQm9vbFwiOiBudWxsLFxuIgotICAgICAgICArICIgIFwib3B0aW9uYWxTdHJpbmdc
IjogbnVsbCxcbiIKLSAgICAgICAgKyAiICBcIm9wdGlvbmFsQnl0ZXNcIjogbnVsbCxcbiIKLSAg
ICAgICAgKyAiICBcIm9wdGlvbmFsTmVzdGVkTWVzc2FnZVwiOiBudWxsLFxuIgotICAgICAgICAr
ICIgIFwib3B0aW9uYWxOZXN0ZWRFbnVtXCI6IG51bGwsXG4iCi0gICAgICAgICsgIiAgXCJyZXBl
YXRlZEludDMyXCI6IG51bGwsXG4iCi0gICAgICAgICsgIiAgXCJyZXBlYXRlZEludDY0XCI6IG51
bGwsXG4iCi0gICAgICAgICsgIiAgXCJyZXBlYXRlZFVpbnQzMlwiOiBudWxsLFxuIgotICAgICAg
ICArICIgIFwicmVwZWF0ZWRVaW50NjRcIjogbnVsbCxcbiIKLSAgICAgICAgKyAiICBcInJlcGVh
dGVkU2ludDMyXCI6IG51bGwsXG4iCi0gICAgICAgICsgIiAgXCJyZXBlYXRlZFNpbnQ2NFwiOiBu
dWxsLFxuIgotICAgICAgICArICIgIFwicmVwZWF0ZWRGaXhlZDMyXCI6IG51bGwsXG4iCi0gICAg
ICAgICsgIiAgXCJyZXBlYXRlZEZpeGVkNjRcIjogbnVsbCxcbiIKLSAgICAgICAgKyAiICBcInJl
cGVhdGVkU2ZpeGVkMzJcIjogbnVsbCxcbiIKLSAgICAgICAgKyAiICBcInJlcGVhdGVkU2ZpeGVk
NjRcIjogbnVsbCxcbiIKLSAgICAgICAgKyAiICBcInJlcGVhdGVkRmxvYXRcIjogbnVsbCxcbiIK
LSAgICAgICAgKyAiICBcInJlcGVhdGVkRG91YmxlXCI6IG51bGwsXG4iCi0gICAgICAgICsgIiAg
XCJyZXBlYXRlZEJvb2xcIjogbnVsbCxcbiIKLSAgICAgICAgKyAiICBcInJlcGVhdGVkU3RyaW5n
XCI6IG51bGwsXG4iCi0gICAgICAgICsgIiAgXCJyZXBlYXRlZEJ5dGVzXCI6IG51bGwsXG4iCi0g
ICAgICAgICsgIiAgXCJyZXBlYXRlZE5lc3RlZE1lc3NhZ2VcIjogbnVsbCxcbiIKLSAgICAgICAg
KyAiICBcInJlcGVhdGVkTmVzdGVkRW51bVwiOiBudWxsXG4iCi0gICAgICAgICsgIn0iLCBidWls
ZGVyKTsKLSAgICBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBh
c3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpLCBtZXNzYWdlKTsK
LQotICAgIC8vIFJlcGVhdGVkIGZpZWxkIGVsZW1lbnRzIGNhbm5vdCBiZSBudWxsLgotICAgIHRy
eSB7Ci0gICAgICBidWlsZGVyID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICAgIG1l
cmdlRnJvbUpzb24oCi0gICAgICAgICAgIntcbiIKLSAgICAgICAgICArICIgIFwicmVwZWF0ZWRJ
bnQzMlwiOiBbbnVsbCwgbnVsbF0sXG4iCi0gICAgICAgICAgKyAifSIsIGJ1aWxkZXIpOwotICAg
ICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKEludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBFeGNlcHRpb24gZXhwZWN0ZWQuCi0gICAgfQotCi0gICAgdHJ5IHsKLSAg
ICAgIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpOwotICAgICAgbWVyZ2VGcm9t
SnNvbigKLSAgICAgICAgICAie1xuIgotICAgICAgICAgICsgIiAgXCJyZXBlYXRlZE5lc3RlZE1l
c3NhZ2VcIjogW251bGwsIG51bGxdLFxuIgotICAgICAgICAgICsgIn0iLCBidWlsZGVyKTsKLSAg
ICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24g
ZSkgewotICAgICAgLy8gRXhjZXB0aW9uIGV4cGVjdGVkLgotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RQYXJzZXJSZWplY3REdXBsaWNhdGVkRmllbGRzKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgLy8gVE9ETyh4aWFvZmVuZyk6IFRoZSBwYXJzZXIgd2UgYXJlIGN1cnJlbnRseSB1
c2luZyAoR1NPTikgd2lsbCBhY2NlcHQgYW5kIGtlZXAgdGhlIGxhc3QKLSAgICAvLyBvbmUgaWYg
bXVsdGlwbGUgZW50cmllcyBoYXZlIHRoZSBzYW1lIG5hbWUuIFRoaXMgaXMgbm90IHRoZSBkZXNp
cmVkIGJlaGF2aW9yIGJ1dCBpdCBjYW4KLSAgICAvLyBvbmx5IGJlIGZpeGVkIGJ5IHVzaW5nIG91
ciBvd24gcGFyc2VyLiBIZXJlIHdlIG9ubHkgdGVzdCB0aGUgY2FzZXMgd2hlcmUgdGhlIG5hbWVz
IGFyZQotICAgIC8vIGRpZmZlcmVudCBidXQgc3RpbGwgcmVmZXJyaW5nIHRvIHRoZSBzYW1lIGZp
ZWxkLgotCi0gICAgLy8gRHVwbGljYXRlZCBvcHRpb25hbCBmaWVsZHMuCi0gICAgdHJ5IHsKLSAg
ICAgIFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRl
cigpOwotICAgICAgbWVyZ2VGcm9tSnNvbigKLSAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICArICIgIFwib3B0aW9uYWxOZXN0ZWRNZXNzYWdlXCI6IHt9LFxuIgotICAgICAgICAgICAgICAr
ICIgIFwib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2VcIjoge31cbiIKLSAgICAgICAgICArICJ9Iiwg
YnVpbGRlcik7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVm
ZmVyRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4Y2VwdGlvbiBleHBlY3RlZC4KLSAgICB9Ci0K
LSAgICAvLyBEdXBsaWNhdGVkIHJlcGVhdGVkIGZpZWxkcy4KLSAgICB0cnkgewotICAgICAgVGVz
dEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0g
ICAgICBtZXJnZUZyb21Kc29uKAotICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgKyAiICBcInJl
cGVhdGVkTmVzdGVkTWVzc2FnZVwiOiBbbnVsbCwgbnVsbF0sXG4iCi0gICAgICAgICAgKyAiICBc
InJlcGVhdGVkX25lc3RlZF9tZXNzYWdlXCI6IFtudWxsLCBudWxsXVxuIgotICAgICAgICAgICsg
In0iLCBidWlsZGVyKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgLy8gRXhjZXB0aW9uIGV4cGVjdGVkLgotICAg
IH0KLQotICAgIC8vIER1cGxpY2F0ZWQgb25lb2YgZmllbGRzLgotICAgIHRyeSB7Ci0gICAgICBU
ZXN0T25lb2YuQnVpbGRlciBidWlsZGVyID0gVGVzdE9uZW9mLm5ld0J1aWxkZXIoKTsKLSAgICAg
IG1lcmdlRnJvbUpzb24oCi0gICAgICAgICAgIntcbiIKLSAgICAgICAgICArICIgIFwib25lb2ZJ
bnQzMlwiOiAxLFxuIgotICAgICAgICAgICsgIiAgXCJvbmVvZl9pbnQzMlwiOiAyXG4iCi0gICAg
ICAgICAgKyAifSIsIGJ1aWxkZXIpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKEludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeGNlcHRpb24gZXhwZWN0
ZWQuCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1hcEZpZWxkcygpIHRocm93cyBF
eGNlcHRpb24gewotICAgIFRlc3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1hcC5uZXdCdWls
ZGVyKCk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0ludDMyTWFwKCkucHV0KDEsIDEw
KTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQ2NFRvSW50MzJNYXAoKS5wdXQoMTIzNDU2Nzg5
MDEyMzQ1Njc4OUwsIDEwKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVVaW50MzJUb0ludDMyTWFw
KCkucHV0KDIsIDIwKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVVaW50NjRUb0ludDMyTWFwKCku
cHV0KDIyMzQ1Njc4OTAxMjM0NTY3ODlMLCAyMCk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlU2lu
dDMyVG9JbnQzMk1hcCgpLnB1dCgzLCAzMCk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlU2ludDY0
VG9JbnQzMk1hcCgpLnB1dCgzMjM0NTY3ODkwMTIzNDU2Nzg5TCwgMzApOwotICAgIGJ1aWxkZXIu
Z2V0TXV0YWJsZUZpeGVkMzJUb0ludDMyTWFwKCkucHV0KDQsIDQwKTsKLSAgICBidWlsZGVyLmdl
dE11dGFibGVGaXhlZDY0VG9JbnQzMk1hcCgpLnB1dCg0MjM0NTY3ODkwMTIzNDU2Nzg5TCwgNDAp
OwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZVNmaXhlZDMyVG9JbnQzMk1hcCgpLnB1dCg1LCA1MCk7
Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlU2ZpeGVkNjRUb0ludDMyTWFwKCkucHV0KDUyMzQ1Njc4
OTAxMjM0NTY3ODlMLCA1MCk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlQm9vbFRvSW50MzJNYXAo
KS5wdXQoZmFsc2UsIDYpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZVN0cmluZ1RvSW50MzJNYXAo
KS5wdXQoIkhlbGxvIiwgMTApOwotCi0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0ludDY0
TWFwKCkucHV0KDEsIDEyMzQ1Njc4OTAxMjM0NTY3ODlMKTsKLSAgICBidWlsZGVyLmdldE11dGFi
bGVJbnQzMlRvVWludDMyTWFwKCkucHV0KDIsIDIwKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJ
bnQzMlRvVWludDY0TWFwKCkucHV0KDIsIDIyMzQ1Njc4OTAxMjM0NTY3ODlMKTsKLSAgICBidWls
ZGVyLmdldE11dGFibGVJbnQzMlRvU2ludDMyTWFwKCkucHV0KDMsIDMwKTsKLSAgICBidWlsZGVy
LmdldE11dGFibGVJbnQzMlRvU2ludDY0TWFwKCkucHV0KDMsIDMyMzQ1Njc4OTAxMjM0NTY3ODlM
KTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvRml4ZWQzMk1hcCgpLnB1dCg0LCA0MCk7
Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb0ZpeGVkNjRNYXAoKS5wdXQoNCwgNDIzNDU2
Nzg5MDEyMzQ1Njc4OUwpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9TZml4ZWQzMk1h
cCgpLnB1dCg1LCA1MCk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJUb1NmaXhlZDY0TWFw
KCkucHV0KDUsIDUyMzQ1Njc4OTAxMjM0NTY3ODlMKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJ
bnQzMlRvRmxvYXRNYXAoKS5wdXQoNiwgMS41Zik7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50
MzJUb0RvdWJsZU1hcCgpLnB1dCg2LCAxLjI1KTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQz
MlRvQm9vbE1hcCgpLnB1dCg3LCBmYWxzZSk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJU
b1N0cmluZ01hcCgpLnB1dCg3LCAiV29ybGQiKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQz
MlRvQnl0ZXNNYXAoKS5wdXQoCi0gICAgICAgIDgsIEJ5dGVTdHJpbmcuY29weUZyb20obmV3IGJ5
dGVbXXsxLCAyLCAzfSkpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9NZXNzYWdlTWFw
KCkucHV0KAotICAgICAgICA4LCBOZXN0ZWRNZXNzYWdlLm5ld0J1aWxkZXIoKS5zZXRWYWx1ZSgx
MjM0KS5idWlsZCgpKTsKLSAgICBidWlsZGVyLmdldE11dGFibGVJbnQzMlRvRW51bU1hcCgpLnB1
dCg5LCBOZXN0ZWRFbnVtLkJBUik7Ci0gICAgVGVzdE1hcCBtZXNzYWdlID0gYnVpbGRlci5idWls
ZCgpOwotCi0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAie1xuIgotICAgICAgICArICIgIFwi
aW50MzJUb0ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAgKyAiICAgIFwiMVwiOiAxMFxuIgotICAg
ICAgICArICIgIH0sXG4iCi0gICAgICAgICsgIiAgXCJpbnQ2NFRvSW50MzJNYXBcIjoge1xuIgot
ICAgICAgICArICIgICAgXCIxMjM0NTY3ODkwMTIzNDU2Nzg5XCI6IDEwXG4iCi0gICAgICAgICsg
IiAgfSxcbiIKLSAgICAgICAgKyAiICBcInVpbnQzMlRvSW50MzJNYXBcIjoge1xuIgotICAgICAg
ICArICIgICAgXCIyXCI6IDIwXG4iCi0gICAgICAgICsgIiAgfSxcbiIKLSAgICAgICAgKyAiICBc
InVpbnQ2NFRvSW50MzJNYXBcIjoge1xuIgotICAgICAgICArICIgICAgXCIyMjM0NTY3ODkwMTIz
NDU2Nzg5XCI6IDIwXG4iCi0gICAgICAgICsgIiAgfSxcbiIKLSAgICAgICAgKyAiICBcInNpbnQz
MlRvSW50MzJNYXBcIjoge1xuIgotICAgICAgICArICIgICAgXCIzXCI6IDMwXG4iCi0gICAgICAg
ICsgIiAgfSxcbiIKLSAgICAgICAgKyAiICBcInNpbnQ2NFRvSW50MzJNYXBcIjoge1xuIgotICAg
ICAgICArICIgICAgXCIzMjM0NTY3ODkwMTIzNDU2Nzg5XCI6IDMwXG4iCi0gICAgICAgICsgIiAg
fSxcbiIKLSAgICAgICAgKyAiICBcImZpeGVkMzJUb0ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAg
KyAiICAgIFwiNFwiOiA0MFxuIgotICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICsgIiAgXCJm
aXhlZDY0VG9JbnQzMk1hcFwiOiB7XG4iCi0gICAgICAgICsgIiAgICBcIjQyMzQ1Njc4OTAxMjM0
NTY3ODlcIjogNDBcbiIKLSAgICAgICAgKyAiICB9LFxuIgotICAgICAgICArICIgIFwic2ZpeGVk
MzJUb0ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAgKyAiICAgIFwiNVwiOiA1MFxuIgotICAgICAg
ICArICIgIH0sXG4iCi0gICAgICAgICsgIiAgXCJzZml4ZWQ2NFRvSW50MzJNYXBcIjoge1xuIgot
ICAgICAgICArICIgICAgXCI1MjM0NTY3ODkwMTIzNDU2Nzg5XCI6IDUwXG4iCi0gICAgICAgICsg
IiAgfSxcbiIKLSAgICAgICAgKyAiICBcImJvb2xUb0ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAg
KyAiICAgIFwiZmFsc2VcIjogNlxuIgotICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICsgIiAg
XCJzdHJpbmdUb0ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAgKyAiICAgIFwiSGVsbG9cIjogMTBc
biIKLSAgICAgICAgKyAiICB9LFxuIgotICAgICAgICArICIgIFwiaW50MzJUb0ludDY0TWFwXCI6
IHtcbiIKLSAgICAgICAgKyAiICAgIFwiMVwiOiBcIjEyMzQ1Njc4OTAxMjM0NTY3ODlcIlxuIgot
ICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICsgIiAgXCJpbnQzMlRvVWludDMyTWFwXCI6IHtc
biIKLSAgICAgICAgKyAiICAgIFwiMlwiOiAyMFxuIgotICAgICAgICArICIgIH0sXG4iCi0gICAg
ICAgICsgIiAgXCJpbnQzMlRvVWludDY0TWFwXCI6IHtcbiIKLSAgICAgICAgKyAiICAgIFwiMlwi
OiBcIjIyMzQ1Njc4OTAxMjM0NTY3ODlcIlxuIgotICAgICAgICArICIgIH0sXG4iCi0gICAgICAg
ICsgIiAgXCJpbnQzMlRvU2ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAgKyAiICAgIFwiM1wiOiAz
MFxuIgotICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICsgIiAgXCJpbnQzMlRvU2ludDY0TWFw
XCI6IHtcbiIKLSAgICAgICAgKyAiICAgIFwiM1wiOiBcIjMyMzQ1Njc4OTAxMjM0NTY3ODlcIlxu
IgotICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICsgIiAgXCJpbnQzMlRvRml4ZWQzMk1hcFwi
OiB7XG4iCi0gICAgICAgICsgIiAgICBcIjRcIjogNDBcbiIKLSAgICAgICAgKyAiICB9LFxuIgot
ICAgICAgICArICIgIFwiaW50MzJUb0ZpeGVkNjRNYXBcIjoge1xuIgotICAgICAgICArICIgICAg
XCI0XCI6IFwiNDIzNDU2Nzg5MDEyMzQ1Njc4OVwiXG4iCi0gICAgICAgICsgIiAgfSxcbiIKLSAg
ICAgICAgKyAiICBcImludDMyVG9TZml4ZWQzMk1hcFwiOiB7XG4iCi0gICAgICAgICsgIiAgICBc
IjVcIjogNTBcbiIKLSAgICAgICAgKyAiICB9LFxuIgotICAgICAgICArICIgIFwiaW50MzJUb1Nm
aXhlZDY0TWFwXCI6IHtcbiIKLSAgICAgICAgKyAiICAgIFwiNVwiOiBcIjUyMzQ1Njc4OTAxMjM0
NTY3ODlcIlxuIgotICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICsgIiAgXCJpbnQzMlRvRmxv
YXRNYXBcIjoge1xuIgotICAgICAgICArICIgICAgXCI2XCI6IDEuNVxuIgotICAgICAgICArICIg
IH0sXG4iCi0gICAgICAgICsgIiAgXCJpbnQzMlRvRG91YmxlTWFwXCI6IHtcbiIKLSAgICAgICAg
KyAiICAgIFwiNlwiOiAxLjI1XG4iCi0gICAgICAgICsgIiAgfSxcbiIKLSAgICAgICAgKyAiICBc
ImludDMyVG9Cb29sTWFwXCI6IHtcbiIKLSAgICAgICAgKyAiICAgIFwiN1wiOiBmYWxzZVxuIgot
ICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICsgIiAgXCJpbnQzMlRvU3RyaW5nTWFwXCI6IHtc
biIKLSAgICAgICAgKyAiICAgIFwiN1wiOiBcIldvcmxkXCJcbiIKLSAgICAgICAgKyAiICB9LFxu
IgotICAgICAgICArICIgIFwiaW50MzJUb0J5dGVzTWFwXCI6IHtcbiIKLSAgICAgICAgKyAiICAg
IFwiOFwiOiBcIkFRSURcIlxuIgotICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICsgIiAgXCJp
bnQzMlRvTWVzc2FnZU1hcFwiOiB7XG4iCi0gICAgICAgICsgIiAgICBcIjhcIjoge1xuIgotICAg
ICAgICArICIgICAgICBcInZhbHVlXCI6IDEyMzRcbiIKLSAgICAgICAgKyAiICAgIH1cbiIKLSAg
ICAgICAgKyAiICB9LFxuIgotICAgICAgICArICIgIFwiaW50MzJUb0VudW1NYXBcIjoge1xuIgot
ICAgICAgICArICIgICAgXCI5XCI6IFwiQkFSXCJcbiIKLSAgICAgICAgKyAiICB9XG4iCi0gICAg
ICAgICsgIn0iLCB0b0pzb25TdHJpbmcobWVzc2FnZSkpOwotICAgIGFzc2VydFJvdW5kVHJpcEVx
dWFscyhtZXNzYWdlKTsKLQotICAgIC8vIFRlc3QgbXVsdGlwbGUgZW50cmllcy4KLSAgICBidWls
ZGVyID0gVGVzdE1hcC5uZXdCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5nZXRNdXRhYmxlSW50MzJU
b0ludDMyTWFwKCkucHV0KDEsIDIpOwotICAgIGJ1aWxkZXIuZ2V0TXV0YWJsZUludDMyVG9JbnQz
Mk1hcCgpLnB1dCgzLCA0KTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotCi0gICAg
YXNzZXJ0RXF1YWxzKAotICAgICAgICAie1xuIgotICAgICAgICArICIgIFwiaW50MzJUb0ludDMy
TWFwXCI6IHtcbiIKLSAgICAgICAgKyAiICAgIFwiMVwiOiAyLFxuIgotICAgICAgICArICIgICAg
XCIzXCI6IDRcbiIKLSAgICAgICAgKyAiICB9XG4iCi0gICAgICAgICsgIn0iLCB0b0pzb25TdHJp
bmcobWVzc2FnZSkpOwotICAgIGFzc2VydFJvdW5kVHJpcEVxdWFscyhtZXNzYWdlKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RNYXBOdWxsVmFsdWVJc1JlamVjdGVkKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIFRlc3RNYXAuQnVpbGRlciBidWlsZGVyID0gVGVzdE1h
cC5uZXdCdWlsZGVyKCk7Ci0gICAgICBtZXJnZUZyb21Kc29uKAotICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgKyAiICBcImludDMyVG9JbnQzMk1hcFwiOiB7bnVsbDogMX0sXG4iCi0gICAgICAg
ICAgKyAiICBcImludDMyVG9NZXNzYWdlTWFwXCI6IHtudWxsOiAyfVxuIgotICAgICAgICAgICsg
In0iLCBidWlsZGVyKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgLy8gRXhjZXB0aW9uIGV4cGVjdGVkLgotICAg
IH0KLQotICAgIHRyeSB7Ci0gICAgICBUZXN0TWFwLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RNYXAu
bmV3QnVpbGRlcigpOwotICAgICAgbWVyZ2VGcm9tSnNvbigKLSAgICAgICAgICAie1xuIgotICAg
ICAgICAgICsgIiAgXCJpbnQzMlRvSW50MzJNYXBcIjoge1wiMVwiOiBudWxsfSxcbiIKLSAgICAg
ICAgICArICIgIFwiaW50MzJUb01lc3NhZ2VNYXBcIjoge1wiMlwiOiBudWxsfVxuIgotICAgICAg
ICAgICsgIn0iLCBidWlsZGVyKTsKLSAgICAgIGZhaWwoKTsKLSAgICB9IGNhdGNoIChJbnZhbGlk
UHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gZSkgewotICAgICAgLy8gRXhjZXB0aW9uIGV4cGVjdGVk
LgotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZXJBY2NlcHROb25RdW90ZWRP
YmplY3RLZXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TWFwLkJ1aWxkZXIgYnVpbGRl
ciA9IFRlc3RNYXAubmV3QnVpbGRlcigpOwotICAgIG1lcmdlRnJvbUpzb24oCi0gICAgICAgICJ7
XG4iCi0gICAgICAgICsgIiAgaW50MzJUb0ludDMyTWFwOiB7MTogMn0sXG4iCi0gICAgICAgICsg
IiAgc3RyaW5nVG9JbnQzMk1hcDoge2hlbGxvOiAzfVxuIgotICAgICAgICArICJ9IiwgYnVpbGRl
cik7Ci0gICAgVGVzdE1hcCBtZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotICAgIGFzc2VydEVx
dWFscygyLCBtZXNzYWdlLmdldEludDMyVG9JbnQzMk1hcCgpLmdldCgxKS5pbnRWYWx1ZSgpKTsK
LSAgICBhc3NlcnRFcXVhbHMoMywgbWVzc2FnZS5nZXRTdHJpbmdUb0ludDMyTWFwKCkuZ2V0KCJo
ZWxsbyIpLmludFZhbHVlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFdyYXBwZXJzKCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdFdyYXBwZXJzLkJ1aWxkZXIgYnVpbGRlciA9IFRl
c3RXcmFwcGVycy5uZXdCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5nZXRCb29sVmFsdWVCdWlsZGVy
KCkuc2V0VmFsdWUoZmFsc2UpOwotICAgIGJ1aWxkZXIuZ2V0SW50MzJWYWx1ZUJ1aWxkZXIoKS5z
ZXRWYWx1ZSgwKTsKLSAgICBidWlsZGVyLmdldEludDY0VmFsdWVCdWlsZGVyKCkuc2V0VmFsdWUo
MCk7Ci0gICAgYnVpbGRlci5nZXRVaW50MzJWYWx1ZUJ1aWxkZXIoKS5zZXRWYWx1ZSgwKTsKLSAg
ICBidWlsZGVyLmdldFVpbnQ2NFZhbHVlQnVpbGRlcigpLnNldFZhbHVlKDApOwotICAgIGJ1aWxk
ZXIuZ2V0RmxvYXRWYWx1ZUJ1aWxkZXIoKS5zZXRWYWx1ZSgwLjBmKTsKLSAgICBidWlsZGVyLmdl
dERvdWJsZVZhbHVlQnVpbGRlcigpLnNldFZhbHVlKDAuMCk7Ci0gICAgYnVpbGRlci5nZXRTdHJp
bmdWYWx1ZUJ1aWxkZXIoKS5zZXRWYWx1ZSgiIik7Ci0gICAgYnVpbGRlci5nZXRCeXRlc1ZhbHVl
QnVpbGRlcigpLnNldFZhbHVlKEJ5dGVTdHJpbmcuRU1QVFkpOwotICAgIFRlc3RXcmFwcGVycyBt
ZXNzYWdlID0gYnVpbGRlci5idWlsZCgpOwotCi0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAi
e1xuIgotICAgICAgICArICIgIFwiaW50MzJWYWx1ZVwiOiAwLFxuIgotICAgICAgICArICIgIFwi
dWludDMyVmFsdWVcIjogMCxcbiIKLSAgICAgICAgKyAiICBcImludDY0VmFsdWVcIjogXCIwXCIs
XG4iCi0gICAgICAgICsgIiAgXCJ1aW50NjRWYWx1ZVwiOiBcIjBcIixcbiIKLSAgICAgICAgKyAi
ICBcImZsb2F0VmFsdWVcIjogMC4wLFxuIgotICAgICAgICArICIgIFwiZG91YmxlVmFsdWVcIjog
MC4wLFxuIgotICAgICAgICArICIgIFwiYm9vbFZhbHVlXCI6IGZhbHNlLFxuIgotICAgICAgICAr
ICIgIFwic3RyaW5nVmFsdWVcIjogXCJcIixcbiIKLSAgICAgICAgKyAiICBcImJ5dGVzVmFsdWVc
IjogXCJcIlxuIgotICAgICAgICArICJ9IiwgdG9Kc29uU3RyaW5nKG1lc3NhZ2UpKTsKLSAgICBh
c3NlcnRSb3VuZFRyaXBFcXVhbHMobWVzc2FnZSk7Ci0KLSAgICBidWlsZGVyID0gVGVzdFdyYXBw
ZXJzLm5ld0J1aWxkZXIoKTsKLSAgICBidWlsZGVyLmdldEJvb2xWYWx1ZUJ1aWxkZXIoKS5zZXRW
YWx1ZSh0cnVlKTsKLSAgICBidWlsZGVyLmdldEludDMyVmFsdWVCdWlsZGVyKCkuc2V0VmFsdWUo
MSk7Ci0gICAgYnVpbGRlci5nZXRJbnQ2NFZhbHVlQnVpbGRlcigpLnNldFZhbHVlKDIpOwotICAg
IGJ1aWxkZXIuZ2V0VWludDMyVmFsdWVCdWlsZGVyKCkuc2V0VmFsdWUoMyk7Ci0gICAgYnVpbGRl
ci5nZXRVaW50NjRWYWx1ZUJ1aWxkZXIoKS5zZXRWYWx1ZSg0KTsKLSAgICBidWlsZGVyLmdldEZs
b2F0VmFsdWVCdWlsZGVyKCkuc2V0VmFsdWUoNS4wZik7Ci0gICAgYnVpbGRlci5nZXREb3VibGVW
YWx1ZUJ1aWxkZXIoKS5zZXRWYWx1ZSg2LjApOwotICAgIGJ1aWxkZXIuZ2V0U3RyaW5nVmFsdWVC
dWlsZGVyKCkuc2V0VmFsdWUoIjciKTsKLSAgICBidWlsZGVyLmdldEJ5dGVzVmFsdWVCdWlsZGVy
KCkuc2V0VmFsdWUoQnl0ZVN0cmluZy5jb3B5RnJvbShuZXcgYnl0ZVtdezh9KSk7Ci0gICAgbWVz
c2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLQotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgIntc
biIKLSAgICAgICAgKyAiICBcImludDMyVmFsdWVcIjogMSxcbiIKLSAgICAgICAgKyAiICBcInVp
bnQzMlZhbHVlXCI6IDMsXG4iCi0gICAgICAgICsgIiAgXCJpbnQ2NFZhbHVlXCI6IFwiMlwiLFxu
IgotICAgICAgICArICIgIFwidWludDY0VmFsdWVcIjogXCI0XCIsXG4iCi0gICAgICAgICsgIiAg
XCJmbG9hdFZhbHVlXCI6IDUuMCxcbiIKLSAgICAgICAgKyAiICBcImRvdWJsZVZhbHVlXCI6IDYu
MCxcbiIKLSAgICAgICAgKyAiICBcImJvb2xWYWx1ZVwiOiB0cnVlLFxuIgotICAgICAgICArICIg
IFwic3RyaW5nVmFsdWVcIjogXCI3XCIsXG4iCi0gICAgICAgICsgIiAgXCJieXRlc1ZhbHVlXCI6
IFwiQ0E9PVwiXG4iCi0gICAgICAgICsgIn0iLCB0b0pzb25TdHJpbmcobWVzc2FnZSkpOwotICAg
IGFzc2VydFJvdW5kVHJpcEVxdWFscyhtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3RUaW1lc3RhbXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0VGltZXN0YW1wIG1lc3Nh
Z2UgPSBUZXN0VGltZXN0YW1wLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0VGltZXN0YW1wVmFs
dWUoVGltZVV0aWwucGFyc2VUaW1lc3RhbXAoIjE5NzAtMDEtMDFUMDA6MDA6MDBaIikpCi0gICAg
ICAgIC5idWlsZCgpOwotCi0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAie1xuIgotICAgICAg
ICArICIgIFwidGltZXN0YW1wVmFsdWVcIjogXCIxOTcwLTAxLTAxVDAwOjAwOjAwWlwiXG4iCi0g
ICAgICAgICsgIn0iLCB0b0pzb25TdHJpbmcobWVzc2FnZSkpOwotICAgIGFzc2VydFJvdW5kVHJp
cEVxdWFscyhtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3REdXJhdGlvbigpIHRo
cm93cyBFeGNlcHRpb24gewotICAgIFRlc3REdXJhdGlvbiBtZXNzYWdlID0gVGVzdER1cmF0aW9u
Lm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0RHVyYXRpb25WYWx1ZShUaW1lVXRpbC5wYXJzZUR1
cmF0aW9uKCIxMjM0NXMiKSkKLSAgICAgICAgLmJ1aWxkKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMo
Ci0gICAgICAgICJ7XG4iCi0gICAgICAgICsgIiAgXCJkdXJhdGlvblZhbHVlXCI6IFwiMTIzNDVz
XCJcbiIKLSAgICAgICAgKyAifSIsIHRvSnNvblN0cmluZyhtZXNzYWdlKSk7Ci0gICAgYXNzZXJ0
Um91bmRUcmlwRXF1YWxzKG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEZpZWxk
TWFzaygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RGaWVsZE1hc2sgbWVzc2FnZSA9IFRl
c3RGaWVsZE1hc2submV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRGaWVsZE1hc2tWYWx1ZShGaWVs
ZE1hc2tVdGlsLmZyb21TdHJpbmcoImZvby5iYXIsYmF6IikpCi0gICAgICAgIC5idWlsZCgpOwot
Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAie1xuIgotICAgICAgICArICIgIFwiZmllbGRN
YXNrVmFsdWVcIjogXCJmb28uYmFyLGJhelwiXG4iCi0gICAgICAgICsgIn0iLCB0b0pzb25TdHJp
bmcobWVzc2FnZSkpOwotICAgIGFzc2VydFJvdW5kVHJpcEVxdWFscyhtZXNzYWdlKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBC
dWlsZCBhIHN0cnVjdCB3aXRoIGFsbCBwb3NzaWJsZSB2YWx1ZXMuCi0gICAgVGVzdFN0cnVjdC5C
dWlsZGVyIGJ1aWxkZXIgPSBUZXN0U3RydWN0Lm5ld0J1aWxkZXIoKTsKLSAgICBTdHJ1Y3QuQnVp
bGRlciBzdHJ1Y3RCdWlsZGVyID0gYnVpbGRlci5nZXRTdHJ1Y3RWYWx1ZUJ1aWxkZXIoKTsKLSAg
ICBzdHJ1Y3RCdWlsZGVyLmdldE11dGFibGVGaWVsZHMoKS5wdXQoCi0gICAgICAgICJudWxsX3Zh
bHVlIiwgVmFsdWUubmV3QnVpbGRlcigpLnNldE51bGxWYWx1ZVZhbHVlKDApLmJ1aWxkKCkpOwot
ICAgIHN0cnVjdEJ1aWxkZXIuZ2V0TXV0YWJsZUZpZWxkcygpLnB1dCgKLSAgICAgICAgIm51bWJl
cl92YWx1ZSIsIFZhbHVlLm5ld0J1aWxkZXIoKS5zZXROdW1iZXJWYWx1ZSgxLjI1KS5idWlsZCgp
KTsKLSAgICBzdHJ1Y3RCdWlsZGVyLmdldE11dGFibGVGaWVsZHMoKS5wdXQoCi0gICAgICAgICJz
dHJpbmdfdmFsdWUiLCBWYWx1ZS5uZXdCdWlsZGVyKCkuc2V0U3RyaW5nVmFsdWUoImhlbGxvIiku
YnVpbGQoKSk7Ci0gICAgU3RydWN0LkJ1aWxkZXIgc3ViU3RydWN0QnVpbGRlciA9IFN0cnVjdC5u
ZXdCdWlsZGVyKCk7Ci0gICAgc3ViU3RydWN0QnVpbGRlci5nZXRNdXRhYmxlRmllbGRzKCkucHV0
KAotICAgICAgICAibnVtYmVyX3ZhbHVlIiwgVmFsdWUubmV3QnVpbGRlcigpLnNldE51bWJlclZh
bHVlKDEyMzQpLmJ1aWxkKCkpOwotICAgIHN0cnVjdEJ1aWxkZXIuZ2V0TXV0YWJsZUZpZWxkcygp
LnB1dCgKLSAgICAgICAgInN0cnVjdF92YWx1ZSIsIFZhbHVlLm5ld0J1aWxkZXIoKS5zZXRTdHJ1
Y3RWYWx1ZShzdWJTdHJ1Y3RCdWlsZGVyLmJ1aWxkKCkpLmJ1aWxkKCkpOwotICAgIExpc3RWYWx1
ZS5CdWlsZGVyIGxpc3RCdWlsZGVyID0gTGlzdFZhbHVlLm5ld0J1aWxkZXIoKTsKLSAgICBsaXN0
QnVpbGRlci5hZGRWYWx1ZXMoVmFsdWUubmV3QnVpbGRlcigpLnNldE51bWJlclZhbHVlKDEuMTI1
KS5idWlsZCgpKTsKLSAgICBsaXN0QnVpbGRlci5hZGRWYWx1ZXMoVmFsdWUubmV3QnVpbGRlcigp
LnNldE51bGxWYWx1ZVZhbHVlKDApLmJ1aWxkKCkpOwotICAgIHN0cnVjdEJ1aWxkZXIuZ2V0TXV0
YWJsZUZpZWxkcygpLnB1dCgKLSAgICAgICAgImxpc3RfdmFsdWUiLCBWYWx1ZS5uZXdCdWlsZGVy
KCkuc2V0TGlzdFZhbHVlKGxpc3RCdWlsZGVyLmJ1aWxkKCkpLmJ1aWxkKCkpOwotICAgIFRlc3RT
dHJ1Y3QgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLQotICAgIGFzc2VydEVxdWFscygKLSAg
ICAgICAgIntcbiIKLSAgICAgICAgKyAiICBcInN0cnVjdFZhbHVlXCI6IHtcbiIKLSAgICAgICAg
KyAiICAgIFwibnVsbF92YWx1ZVwiOiBudWxsLFxuIgotICAgICAgICArICIgICAgXCJudW1iZXJf
dmFsdWVcIjogMS4yNSxcbiIKLSAgICAgICAgKyAiICAgIFwic3RyaW5nX3ZhbHVlXCI6IFwiaGVs
bG9cIixcbiIKLSAgICAgICAgKyAiICAgIFwic3RydWN0X3ZhbHVlXCI6IHtcbiIKLSAgICAgICAg
KyAiICAgICAgXCJudW1iZXJfdmFsdWVcIjogMTIzNC4wXG4iCi0gICAgICAgICsgIiAgICB9LFxu
IgotICAgICAgICArICIgICAgXCJsaXN0X3ZhbHVlXCI6IFsxLjEyNSwgbnVsbF1cbiIKLSAgICAg
ICAgKyAiICB9XG4iCi0gICAgICAgICsgIn0iLCB0b0pzb25TdHJpbmcobWVzc2FnZSkpOwotICAg
IGFzc2VydFJvdW5kVHJpcEVxdWFscyhtZXNzYWdlKTsKLQotICAgIGJ1aWxkZXIgPSBUZXN0U3Ry
dWN0Lm5ld0J1aWxkZXIoKTsKLSAgICBidWlsZGVyLnNldFZhbHVlKFZhbHVlLm5ld0J1aWxkZXIo
KS5zZXROdWxsVmFsdWVWYWx1ZSgwKS5idWlsZCgpKTsKLSAgICBtZXNzYWdlID0gYnVpbGRlci5i
dWlsZCgpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgIntcbiIKLSAgICAgICAgKyAiICBc
InZhbHVlXCI6IG51bGxcbiIKLSAgICAgICAgKyAifSIsIHRvSnNvblN0cmluZyhtZXNzYWdlKSk7
Ci0gICAgYXNzZXJ0Um91bmRUcmlwRXF1YWxzKG1lc3NhZ2UpOwotCi0gICAgYnVpbGRlciA9IFRl
c3RTdHJ1Y3QubmV3QnVpbGRlcigpOwotICAgIGxpc3RCdWlsZGVyID0gYnVpbGRlci5nZXRMaXN0
VmFsdWVCdWlsZGVyKCk7Ci0gICAgbGlzdEJ1aWxkZXIuYWRkVmFsdWVzKFZhbHVlLm5ld0J1aWxk
ZXIoKS5zZXROdW1iZXJWYWx1ZSgzMTgzMS4xMjUpLmJ1aWxkKCkpOwotICAgIGxpc3RCdWlsZGVy
LmFkZFZhbHVlcyhWYWx1ZS5uZXdCdWlsZGVyKCkuc2V0TnVsbFZhbHVlVmFsdWUoMCkuYnVpbGQo
KSk7Ci0gICAgbWVzc2FnZSA9IGJ1aWxkZXIuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0g
ICAgICAgICJ7XG4iCi0gICAgICAgICsgIiAgXCJsaXN0VmFsdWVcIjogWzMxODMxLjEyNSwgbnVs
bF1cbiIKLSAgICAgICAgKyAifSIsIHRvSnNvblN0cmluZyhtZXNzYWdlKSk7Ci0gICAgYXNzZXJ0
Um91bmRUcmlwRXF1YWxzKG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEFueUZp
ZWxkcygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlcyBjb250ZW50ID0gVGVz
dEFsbFR5cGVzLm5ld0J1aWxkZXIoKS5zZXRPcHRpb25hbEludDMyKDEyMzQpLmJ1aWxkKCk7Ci0g
ICAgVGVzdEFueSBtZXNzYWdlID0gVGVzdEFueS5uZXdCdWlsZGVyKCkuc2V0QW55VmFsdWUoQW55
LnBhY2soY29udGVudCkpLmJ1aWxkKCk7Ci0KLSAgICAvLyBBIFR5cGVSZWdpc3RyeSBtdXN0IGJl
IHByb3ZpZGVkIGluIG9yZGVyIHRvIGNvbnZlcnQgQW55IHR5cGVzLgotICAgIHRyeSB7Ci0gICAg
ICB0b0pzb25TdHJpbmcobWVzc2FnZSk7Ci0gICAgICBmYWlsKCJFeGNlcHRpb24gaXMgZXhwZWN0
ZWQuIik7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgLy8gRXhwZWN0ZWQu
Ci0gICAgfQotCi0gICAgSnNvbkZvcm1hdC5UeXBlUmVnaXN0cnkgcmVnaXN0cnkgPSBKc29uRm9y
bWF0LlR5cGVSZWdpc3RyeS5uZXdCdWlsZGVyKCkKLSAgICAgICAgLmFkZChUZXN0QWxsVHlwZXMu
Z2V0RGVzY3JpcHRvcigpKS5idWlsZCgpOwotICAgIEpzb25Gb3JtYXQuUHJpbnRlciBwcmludGVy
ID0gSnNvbkZvcm1hdC5wcmludGVyKCkudXNpbmdUeXBlUmVnaXN0cnkocmVnaXN0cnkpOwotCi0g
ICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAie1xuIgotICAgICAgICArICIgIFwiYW55VmFsdWVc
Ijoge1xuIgotICAgICAgICArICIgICAgXCJAdHlwZVwiOiBcInR5cGUuZ29vZ2xlYXBpcy5jb20v
anNvbl90ZXN0LlRlc3RBbGxUeXBlc1wiLFxuIgotICAgICAgICArICIgICAgXCJvcHRpb25hbElu
dDMyXCI6IDEyMzRcbiIKLSAgICAgICAgKyAiICB9XG4iCi0gICAgICAgICsgIn0iICwgcHJpbnRl
ci5wcmludChtZXNzYWdlKSk7Ci0gICAgYXNzZXJ0Um91bmRUcmlwRXF1YWxzKG1lc3NhZ2UsIHJl
Z2lzdHJ5KTsKLQotCi0gICAgLy8gV2VsbC1rbm93biB0eXBlcyBoYXZlIGEgc3BlY2lhbCBmb3Jt
YXR0aW5nIHdoZW4gZW1iZWRkZWQgaW4gQW55LgotICAgIC8vCi0gICAgLy8gMS4gQW55IGluIEFu
eS4KLSAgICBBbnkgYW55TWVzc2FnZSA9IEFueS5wYWNrKEFueS5wYWNrKGNvbnRlbnQpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ7XG4iCi0gICAgICAgICsgIiAgXCJAdHlwZVwiOiBc
InR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkFueVwiLFxuIgotICAgICAgICAr
ICIgIFwidmFsdWVcIjoge1xuIgotICAgICAgICArICIgICAgXCJAdHlwZVwiOiBcInR5cGUuZ29v
Z2xlYXBpcy5jb20vanNvbl90ZXN0LlRlc3RBbGxUeXBlc1wiLFxuIgotICAgICAgICArICIgICAg
XCJvcHRpb25hbEludDMyXCI6IDEyMzRcbiIKLSAgICAgICAgKyAiICB9XG4iCi0gICAgICAgICsg
In0iLCBwcmludGVyLnByaW50KGFueU1lc3NhZ2UpKTsKLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVh
bHMoYW55TWVzc2FnZSwgcmVnaXN0cnkpOwotCi0gICAgLy8gMi4gV3JhcHBlcnMgaW4gQW55Lgot
ICAgIGFueU1lc3NhZ2UgPSBBbnkucGFjayhJbnQzMlZhbHVlLm5ld0J1aWxkZXIoKS5zZXRWYWx1
ZSgxMjM0NSkuYnVpbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAie1xuIgotICAg
ICAgICArICIgIFwiQHR5cGVcIjogXCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1
Zi5JbnQzMlZhbHVlXCIsXG4iCi0gICAgICAgICsgIiAgXCJ2YWx1ZVwiOiAxMjM0NVxuIgotICAg
ICAgICArICJ9IiwgcHJpbnRlci5wcmludChhbnlNZXNzYWdlKSk7Ci0gICAgYXNzZXJ0Um91bmRU
cmlwRXF1YWxzKGFueU1lc3NhZ2UsIHJlZ2lzdHJ5KTsKLSAgICBhbnlNZXNzYWdlID0gQW55LnBh
Y2soVUludDMyVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKDEyMzQ1KS5idWlsZCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ7XG4iCi0gICAgICAgICsgIiAgXCJAdHlwZVwiOiBc
InR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlXCIsXG4iCi0g
ICAgICAgICsgIiAgXCJ2YWx1ZVwiOiAxMjM0NVxuIgotICAgICAgICArICJ9IiwgcHJpbnRlci5w
cmludChhbnlNZXNzYWdlKSk7Ci0gICAgYXNzZXJ0Um91bmRUcmlwRXF1YWxzKGFueU1lc3NhZ2Us
IHJlZ2lzdHJ5KTsKLSAgICBhbnlNZXNzYWdlID0gQW55LnBhY2soSW50NjRWYWx1ZS5uZXdCdWls
ZGVyKCkuc2V0VmFsdWUoMTIzNDUpLmJ1aWxkKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAg
ICAgIntcbiIKLSAgICAgICAgKyAiICBcIkB0eXBlXCI6IFwidHlwZS5nb29nbGVhcGlzLmNvbS9n
b29nbGUucHJvdG9idWYuSW50NjRWYWx1ZVwiLFxuIgotICAgICAgICArICIgIFwidmFsdWVcIjog
XCIxMjM0NVwiXG4iCi0gICAgICAgICsgIn0iLCBwcmludGVyLnByaW50KGFueU1lc3NhZ2UpKTsK
LSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMoYW55TWVzc2FnZSwgcmVnaXN0cnkpOwotICAgIGFu
eU1lc3NhZ2UgPSBBbnkucGFjayhVSW50NjRWYWx1ZS5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoMTIz
NDUpLmJ1aWxkKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgIntcbiIKLSAgICAgICAg
KyAiICBcIkB0eXBlXCI6IFwidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVUlu
dDY0VmFsdWVcIixcbiIKLSAgICAgICAgKyAiICBcInZhbHVlXCI6IFwiMTIzNDVcIlxuIgotICAg
ICAgICArICJ9IiwgcHJpbnRlci5wcmludChhbnlNZXNzYWdlKSk7Ci0gICAgYXNzZXJ0Um91bmRU
cmlwRXF1YWxzKGFueU1lc3NhZ2UsIHJlZ2lzdHJ5KTsKLSAgICBhbnlNZXNzYWdlID0gQW55LnBh
Y2soRmxvYXRWYWx1ZS5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoMTIzNDUpLmJ1aWxkKCkpOwotICAg
IGFzc2VydEVxdWFscygKLSAgICAgICAgIntcbiIKLSAgICAgICAgKyAiICBcIkB0eXBlXCI6IFwi
dHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVwiLFxuIgotICAg
ICAgICArICIgIFwidmFsdWVcIjogMTIzNDUuMFxuIgotICAgICAgICArICJ9IiwgcHJpbnRlci5w
cmludChhbnlNZXNzYWdlKSk7Ci0gICAgYXNzZXJ0Um91bmRUcmlwRXF1YWxzKGFueU1lc3NhZ2Us
IHJlZ2lzdHJ5KTsKLSAgICBhbnlNZXNzYWdlID0gQW55LnBhY2soRG91YmxlVmFsdWUubmV3QnVp
bGRlcigpLnNldFZhbHVlKDEyMzQ1KS5idWlsZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAg
ICAgICJ7XG4iCi0gICAgICAgICsgIiAgXCJAdHlwZVwiOiBcInR5cGUuZ29vZ2xlYXBpcy5jb20v
Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlXCIsXG4iCi0gICAgICAgICsgIiAgXCJ2YWx1ZVwi
OiAxMjM0NS4wXG4iCi0gICAgICAgICsgIn0iLCBwcmludGVyLnByaW50KGFueU1lc3NhZ2UpKTsK
LSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMoYW55TWVzc2FnZSwgcmVnaXN0cnkpOwotICAgIGFu
eU1lc3NhZ2UgPSBBbnkucGFjayhCb29sVmFsdWUubmV3QnVpbGRlcigpLnNldFZhbHVlKHRydWUp
LmJ1aWxkKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgIntcbiIKLSAgICAgICAgKyAi
ICBcIkB0eXBlXCI6IFwidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuQm9vbFZh
bHVlXCIsXG4iCi0gICAgICAgICsgIiAgXCJ2YWx1ZVwiOiB0cnVlXG4iCi0gICAgICAgICsgIn0i
LCBwcmludGVyLnByaW50KGFueU1lc3NhZ2UpKTsKLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMo
YW55TWVzc2FnZSwgcmVnaXN0cnkpOwotICAgIGFueU1lc3NhZ2UgPSBBbnkucGFjayhTdHJpbmdW
YWx1ZS5uZXdCdWlsZGVyKCkuc2V0VmFsdWUoIkhlbGxvIikuYnVpbGQoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKAotICAgICAgICAie1xuIgotICAgICAgICArICIgIFwiQHR5cGVcIjogXCJ0eXBlLmdv
b2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVwiLFxuIgotICAgICAgICAr
ICIgIFwidmFsdWVcIjogXCJIZWxsb1wiXG4iCi0gICAgICAgICsgIn0iLCBwcmludGVyLnByaW50
KGFueU1lc3NhZ2UpKTsKLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMoYW55TWVzc2FnZSwgcmVn
aXN0cnkpOwotICAgIGFueU1lc3NhZ2UgPSBBbnkucGFjayhCeXRlc1ZhbHVlLm5ld0J1aWxkZXIo
KS5zZXRWYWx1ZSgKLSAgICAgICAgQnl0ZVN0cmluZy5jb3B5RnJvbShuZXcgYnl0ZVtdezEsIDJ9
KSkuYnVpbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAie1xuIgotICAgICAgICAr
ICIgIFwiQHR5cGVcIjogXCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5CeXRl
c1ZhbHVlXCIsXG4iCi0gICAgICAgICsgIiAgXCJ2YWx1ZVwiOiBcIkFRST1cIlxuIgotICAgICAg
ICArICJ9IiwgcHJpbnRlci5wcmludChhbnlNZXNzYWdlKSk7Ci0gICAgYXNzZXJ0Um91bmRUcmlw
RXF1YWxzKGFueU1lc3NhZ2UsIHJlZ2lzdHJ5KTsKLQotICAgIC8vIDMuIFRpbWVzdGFtcCBpbiBB
bnkuCi0gICAgYW55TWVzc2FnZSA9IEFueS5wYWNrKFRpbWVVdGlsLnBhcnNlVGltZXN0YW1wKCIx
OTY5LTEyLTMxVDIzOjU5OjU5WiIpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ7XG4i
Ci0gICAgICAgICsgIiAgXCJAdHlwZVwiOiBcInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnBy
b3RvYnVmLlRpbWVzdGFtcFwiLFxuIgotICAgICAgICArICIgIFwidmFsdWVcIjogXCIxOTY5LTEy
LTMxVDIzOjU5OjU5WlwiXG4iCi0gICAgICAgICsgIn0iLCBwcmludGVyLnByaW50KGFueU1lc3Nh
Z2UpKTsKLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMoYW55TWVzc2FnZSwgcmVnaXN0cnkpOwot
Ci0gICAgLy8gNC4gRHVyYXRpb24gaW4gQW55Ci0gICAgYW55TWVzc2FnZSA9IEFueS5wYWNrKFRp
bWVVdGlsLnBhcnNlRHVyYXRpb24oIjEyMzQ1LjEwcyIpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0g
ICAgICAgICJ7XG4iCi0gICAgICAgICsgIiAgXCJAdHlwZVwiOiBcInR5cGUuZ29vZ2xlYXBpcy5j
b20vZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uXCIsXG4iCi0gICAgICAgICsgIiAgXCJ2YWx1ZVwi
OiBcIjEyMzQ1LjEwMHNcIlxuIgotICAgICAgICArICJ9IiwgcHJpbnRlci5wcmludChhbnlNZXNz
YWdlKSk7Ci0gICAgYXNzZXJ0Um91bmRUcmlwRXF1YWxzKGFueU1lc3NhZ2UsIHJlZ2lzdHJ5KTsK
LQotICAgIC8vIDUuIEZpZWxkTWFzayBpbiBBbnkKLSAgICBhbnlNZXNzYWdlID0gQW55LnBhY2so
RmllbGRNYXNrVXRpbC5mcm9tU3RyaW5nKCJmb28uYmFyLGJheiIpKTsKLSAgICBhc3NlcnRFcXVh
bHMoCi0gICAgICAgICJ7XG4iCi0gICAgICAgICsgIiAgXCJAdHlwZVwiOiBcInR5cGUuZ29vZ2xl
YXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza1wiLFxuIgotICAgICAgICArICIgIFwi
dmFsdWVcIjogXCJmb28uYmFyLGJhelwiXG4iCi0gICAgICAgICsgIn0iLCBwcmludGVyLnByaW50
KGFueU1lc3NhZ2UpKTsKLSAgICBhc3NlcnRSb3VuZFRyaXBFcXVhbHMoYW55TWVzc2FnZSwgcmVn
aXN0cnkpOwotCi0gICAgLy8gNi4gU3RydWN0IGluIEFueQotICAgIFN0cnVjdC5CdWlsZGVyIHN0
cnVjdEJ1aWxkZXIgPSBTdHJ1Y3QubmV3QnVpbGRlcigpOwotICAgIHN0cnVjdEJ1aWxkZXIuZ2V0
TXV0YWJsZUZpZWxkcygpLnB1dCgKLSAgICAgICAgIm51bWJlciIsIFZhbHVlLm5ld0J1aWxkZXIo
KS5zZXROdW1iZXJWYWx1ZSgxLjEyNSkuYnVpbGQoKSk7Ci0gICAgYW55TWVzc2FnZSA9IEFueS5w
YWNrKHN0cnVjdEJ1aWxkZXIuYnVpbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAi
e1xuIgotICAgICAgICArICIgIFwiQHR5cGVcIjogXCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2ds
ZS5wcm90b2J1Zi5TdHJ1Y3RcIixcbiIKLSAgICAgICAgKyAiICBcInZhbHVlXCI6IHtcbiIKLSAg
ICAgICAgKyAiICAgIFwibnVtYmVyXCI6IDEuMTI1XG4iCi0gICAgICAgICsgIiAgfVxuIgotICAg
ICAgICArICJ9IiwgcHJpbnRlci5wcmludChhbnlNZXNzYWdlKSk7Ci0gICAgYXNzZXJ0Um91bmRU
cmlwRXF1YWxzKGFueU1lc3NhZ2UsIHJlZ2lzdHJ5KTsKLSAgICBWYWx1ZS5CdWlsZGVyIHZhbHVl
QnVpbGRlciA9IFZhbHVlLm5ld0J1aWxkZXIoKTsKLSAgICB2YWx1ZUJ1aWxkZXIuc2V0TnVtYmVy
VmFsdWUoMSk7Ci0gICAgYW55TWVzc2FnZSA9IEFueS5wYWNrKHZhbHVlQnVpbGRlci5idWlsZCgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ7XG4iCi0gICAgICAgICsgIiAgXCJAdHlw
ZVwiOiBcInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlZhbHVlXCIsXG4iCi0g
ICAgICAgICsgIiAgXCJ2YWx1ZVwiOiAxLjBcbiIKLSAgICAgICAgKyAifSIsIHByaW50ZXIucHJp
bnQoYW55TWVzc2FnZSkpOwotICAgIGFzc2VydFJvdW5kVHJpcEVxdWFscyhhbnlNZXNzYWdlLCBy
ZWdpc3RyeSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VyTWlzc2luZ1R5cGVVcmwo
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB0cnkgewotICAgICAgQW55LkJ1aWxkZXIgYnVpbGRl
ciA9IEFueS5uZXdCdWlsZGVyKCk7Ci0gICAgICBtZXJnZUZyb21Kc29uKAotICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgKyAiICBcIm9wdGlvbmFsSW50MzJcIjogMTIzNFxuIgotICAgICAgICAg
ICsgIn0iLCBidWlsZGVyKTsKLSAgICAgIGZhaWwoIkV4Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsK
LSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VyVW5leHBlY3RlZFR5cGVVcmwoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICB0cnkgewotICAgICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVp
bGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgICBtZXJnZUZyb21Kc29uKAot
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgKyAiICBcIkB0eXBlXCI6IFwidHlwZS5nb29nbGVh
cGlzLmNvbS9qc29uX3Rlc3QuVGVzdEFsbFR5cGVzXCIsXG4iCi0gICAgICAgICAgKyAiICBcIm9w
dGlvbmFsSW50MzJcIjogMTIzNDVcbiIKLSAgICAgICAgICArICJ9IiwgYnVpbGRlcik7Ci0gICAg
ICBmYWlsKCJFeGNlcHRpb24gaXMgZXhwZWN0ZWQuIik7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRp
b24gZSkgewotICAgICAgLy8gRXhwZWN0ZWQuCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdFBhcnNlclJlamVjdFRyYWlsaW5nQ29tbWEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB0
cnkgewotICAgICAgVGVzdEFsbFR5cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5u
ZXdCdWlsZGVyKCk7Ci0gICAgICBtZXJnZUZyb21Kc29uKAotICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgKyAiICBcIm9wdGlvbmFsSW50MzJcIjogMTIzNDUsXG4iCi0gICAgICAgICAgKyAifSIs
IGJ1aWxkZXIpOwotICAgICAgZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwotICAgIH0g
Y2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLQotICAg
IC8vIFRPRE8oeGlhb2ZlbmcpOiBHU09OIGFsbG93cyB0cmFpbGluZyBjb21tYSBpbiBhcnJheXMg
ZXZlbiBhZnRlciBJIHNldAotICAgIC8vIHRoZSBKc29uUmVhZGVyIHRvIG5vbi1sZW5pZW50IG1v
ZGUuIElmIHdlIHdhbnQgdG8gZW5mb3JjZSBzdHJpY3QgSlNPTgotICAgIC8vIGNvbXBsaWFuY2Us
IHdlIG1pZ2h0IHdhbnQgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IEpTT04gcGFyc2VyIG9yCi0g
ICAgLy8gaW1wbGVtZW50IG9uZSBieSBvdXJzZWx2ZXMuCi0gICAgLy8gdHJ5IHsKLSAgICAvLyAg
IFRlc3RBbGxUeXBlcy5CdWlsZGVyIGJ1aWxkZXIgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigp
OwotICAgIC8vICAgSnNvbkZvcm1hdC5tZXJnZSgKLSAgICAvLyAgICAgICAie1xuIgotICAgIC8v
ICAgICAgICsgIiAgXCJyZXBlYXRlZEludDMyXCI6IFsxMjM0NSxdXG4iCi0gICAgLy8gICAgICAg
KyAifSIsIGJ1aWxkZXIpOwotICAgIC8vICAgZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIp
OwotICAgIC8vIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAvLyAgIC8vIEV4cGVjdGVk
LgotICAgIC8vIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQYXJzZXJSZWplY3RJbnZhbGlk
QmFzZTY0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0UmVqZWN0cygib3B0aW9uYWxC
eXRlcyIsICIhQCMkIik7Ci0gICAgLy8gV2UgdXNlIHN0YW5kYXJkIEJBU0U2NCB3aXRoIHBhZGRp
bmdzLgotICAgIGFzc2VydFJlamVjdHMoIm9wdGlvbmFsQnl0ZXMiLCAiQVFJIik7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VyUmVqZWN0SW52YWxpZEVudW1WYWx1ZSgpIHRocm93cyBF
eGNlcHRpb24gewotICAgIHRyeSB7Ci0gICAgICBUZXN0QWxsVHlwZXMuQnVpbGRlciBidWlsZGVy
ID0gVGVzdEFsbFR5cGVzLm5ld0J1aWxkZXIoKTsKLSAgICAgIG1lcmdlRnJvbUpzb24oCi0gICAg
ICAgICAgIntcbiIKLSAgICAgICAgICArICIgIFwib3B0aW9uYWxOZXN0ZWRFbnVtXCI6IFwiWFhY
XCJcbiIKLSAgICAgICAgICArICJ9IiwgYnVpbGRlcik7Ci0gICAgICBmYWlsKCJFeGNlcHRpb24g
aXMgZXhwZWN0ZWQuIik7Ci0gICAgfSBjYXRjaCAoSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0
aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3RDdXN0b21Kc29uTmFtZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RDdXN0b21K
c29uTmFtZSBtZXNzYWdlID0gVGVzdEN1c3RvbUpzb25OYW1lLm5ld0J1aWxkZXIoKS5zZXRWYWx1
ZSgxMjM0NSkuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoIntcbiIgKyAiICBcIkB2YWx1ZVwi
OiAxMjM0NVxuIiArICJ9IiwgSnNvbkZvcm1hdC5wcmludGVyKCkucHJpbnQobWVzc2FnZSkpOwot
ICAgIGFzc2VydFJvdW5kVHJpcEVxdWFscyhtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3REZWZhdWx0R3NvbkRvZXNOb3RIdG1sRXNjYXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgVGVzdEFsbFR5cGVzIG1lc3NhZ2UgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLnNldE9w
dGlvbmFsU3RyaW5nKCI9IikuYnVpbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ7
XG4iICsgIiAgXCJvcHRpb25hbFN0cmluZ1wiOiBcIj1cIiIgKyAiXG59IiwgSnNvbkZvcm1hdC5w
cmludGVyKCkucHJpbnQobWVzc2FnZSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEluY2x1
ZGluZ0RlZmF1bHRWYWx1ZUZpZWxkcygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxU
eXBlcyBtZXNzYWdlID0gVGVzdEFsbFR5cGVzLmdldERlZmF1bHRJbnN0YW5jZSgpOwotICAgIGFz
c2VydEVxdWFscygie1xufSIsIEpzb25Gb3JtYXQucHJpbnRlcigpLnByaW50KG1lc3NhZ2UpKTsK
LSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ7XG4iCi0gICAgICAgICAgICArICIgIFwib3B0
aW9uYWxJbnQzMlwiOiAwLFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlvbmFsSW50NjRcIjog
XCIwXCIsXG4iCi0gICAgICAgICAgICArICIgIFwib3B0aW9uYWxVaW50MzJcIjogMCxcbiIKLSAg
ICAgICAgICAgICsgIiAgXCJvcHRpb25hbFVpbnQ2NFwiOiBcIjBcIixcbiIKLSAgICAgICAgICAg
ICsgIiAgXCJvcHRpb25hbFNpbnQzMlwiOiAwLFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlv
bmFsU2ludDY0XCI6IFwiMFwiLFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlvbmFsRml4ZWQz
MlwiOiAwLFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlvbmFsRml4ZWQ2NFwiOiBcIjBcIixc
biIKLSAgICAgICAgICAgICsgIiAgXCJvcHRpb25hbFNmaXhlZDMyXCI6IDAsXG4iCi0gICAgICAg
ICAgICArICIgIFwib3B0aW9uYWxTZml4ZWQ2NFwiOiBcIjBcIixcbiIKLSAgICAgICAgICAgICsg
IiAgXCJvcHRpb25hbEZsb2F0XCI6IDAuMCxcbiIKLSAgICAgICAgICAgICsgIiAgXCJvcHRpb25h
bERvdWJsZVwiOiAwLjAsXG4iCi0gICAgICAgICAgICArICIgIFwib3B0aW9uYWxCb29sXCI6IGZh
bHNlLFxuIgotICAgICAgICAgICAgKyAiICBcIm9wdGlvbmFsU3RyaW5nXCI6IFwiXCIsXG4iCi0g
ICAgICAgICAgICArICIgIFwib3B0aW9uYWxCeXRlc1wiOiBcIlwiLFxuIgotICAgICAgICAgICAg
KyAiICBcIm9wdGlvbmFsTmVzdGVkRW51bVwiOiBcIkZPT1wiLFxuIgotICAgICAgICAgICAgKyAi
ICBcInJlcGVhdGVkSW50MzJcIjogW10sXG4iCi0gICAgICAgICAgICArICIgIFwicmVwZWF0ZWRJ
bnQ2NFwiOiBbXSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZFVpbnQzMlwiOiBbXSxc
biIKLSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZFVpbnQ2NFwiOiBbXSxcbiIKLSAgICAgICAg
ICAgICsgIiAgXCJyZXBlYXRlZFNpbnQzMlwiOiBbXSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJy
ZXBlYXRlZFNpbnQ2NFwiOiBbXSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZEZpeGVk
MzJcIjogW10sXG4iCi0gICAgICAgICAgICArICIgIFwicmVwZWF0ZWRGaXhlZDY0XCI6IFtdLFxu
IgotICAgICAgICAgICAgKyAiICBcInJlcGVhdGVkU2ZpeGVkMzJcIjogW10sXG4iCi0gICAgICAg
ICAgICArICIgIFwicmVwZWF0ZWRTZml4ZWQ2NFwiOiBbXSxcbiIKLSAgICAgICAgICAgICsgIiAg
XCJyZXBlYXRlZEZsb2F0XCI6IFtdLFxuIgotICAgICAgICAgICAgKyAiICBcInJlcGVhdGVkRG91
YmxlXCI6IFtdLFxuIgotICAgICAgICAgICAgKyAiICBcInJlcGVhdGVkQm9vbFwiOiBbXSxcbiIK
LSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZFN0cmluZ1wiOiBbXSxcbiIKLSAgICAgICAgICAg
ICsgIiAgXCJyZXBlYXRlZEJ5dGVzXCI6IFtdLFxuIgotICAgICAgICAgICAgKyAiICBcInJlcGVh
dGVkTmVzdGVkTWVzc2FnZVwiOiBbXSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJyZXBlYXRlZE5l
c3RlZEVudW1cIjogW11cbiIKLSAgICAgICAgICAgICsgIn0iLAotICAgICAgICBKc29uRm9ybWF0
LnByaW50ZXIoKS5pbmNsdWRpbmdEZWZhdWx0VmFsdWVGaWVsZHMoKS5wcmludChtZXNzYWdlKSk7
Ci0KLSAgICBUZXN0TWFwIG1hcE1lc3NhZ2UgPSBUZXN0TWFwLmdldERlZmF1bHRJbnN0YW5jZSgp
OwotICAgIGFzc2VydEVxdWFscygie1xufSIsIEpzb25Gb3JtYXQucHJpbnRlcigpLnByaW50KG1h
cE1lc3NhZ2UpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICArICIgIFwiaW50MzJUb0ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAgICAgICsgIiAgfSxcbiIK
LSAgICAgICAgICAgICsgIiAgXCJpbnQ2NFRvSW50MzJNYXBcIjoge1xuIgotICAgICAgICAgICAg
KyAiICB9LFxuIgotICAgICAgICAgICAgKyAiICBcInVpbnQzMlRvSW50MzJNYXBcIjoge1xuIgot
ICAgICAgICAgICAgKyAiICB9LFxuIgotICAgICAgICAgICAgKyAiICBcInVpbnQ2NFRvSW50MzJN
YXBcIjoge1xuIgotICAgICAgICAgICAgKyAiICB9LFxuIgotICAgICAgICAgICAgKyAiICBcInNp
bnQzMlRvSW50MzJNYXBcIjoge1xuIgotICAgICAgICAgICAgKyAiICB9LFxuIgotICAgICAgICAg
ICAgKyAiICBcInNpbnQ2NFRvSW50MzJNYXBcIjoge1xuIgotICAgICAgICAgICAgKyAiICB9LFxu
IgotICAgICAgICAgICAgKyAiICBcImZpeGVkMzJUb0ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAg
ICAgICsgIiAgfSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJmaXhlZDY0VG9JbnQzMk1hcFwiOiB7
XG4iCi0gICAgICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICAgICArICIgIFwic2ZpeGVkMzJU
b0ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAgICAgICsgIiAgfSxcbiIKLSAgICAgICAgICAgICsg
IiAgXCJzZml4ZWQ2NFRvSW50MzJNYXBcIjoge1xuIgotICAgICAgICAgICAgKyAiICB9LFxuIgot
ICAgICAgICAgICAgKyAiICBcImJvb2xUb0ludDMyTWFwXCI6IHtcbiIKLSAgICAgICAgICAgICsg
IiAgfSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJzdHJpbmdUb0ludDMyTWFwXCI6IHtcbiIKLSAg
ICAgICAgICAgICsgIiAgfSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJpbnQzMlRvSW50NjRNYXBc
Ijoge1xuIgotICAgICAgICAgICAgKyAiICB9LFxuIgotICAgICAgICAgICAgKyAiICBcImludDMy
VG9VaW50MzJNYXBcIjoge1xuIgotICAgICAgICAgICAgKyAiICB9LFxuIgotICAgICAgICAgICAg
KyAiICBcImludDMyVG9VaW50NjRNYXBcIjoge1xuIgotICAgICAgICAgICAgKyAiICB9LFxuIgot
ICAgICAgICAgICAgKyAiICBcImludDMyVG9TaW50MzJNYXBcIjoge1xuIgotICAgICAgICAgICAg
KyAiICB9LFxuIgotICAgICAgICAgICAgKyAiICBcImludDMyVG9TaW50NjRNYXBcIjoge1xuIgot
ICAgICAgICAgICAgKyAiICB9LFxuIgotICAgICAgICAgICAgKyAiICBcImludDMyVG9GaXhlZDMy
TWFwXCI6IHtcbiIKLSAgICAgICAgICAgICsgIiAgfSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJp
bnQzMlRvRml4ZWQ2NE1hcFwiOiB7XG4iCi0gICAgICAgICAgICArICIgIH0sXG4iCi0gICAgICAg
ICAgICArICIgIFwiaW50MzJUb1NmaXhlZDMyTWFwXCI6IHtcbiIKLSAgICAgICAgICAgICsgIiAg
fSxcbiIKLSAgICAgICAgICAgICsgIiAgXCJpbnQzMlRvU2ZpeGVkNjRNYXBcIjoge1xuIgotICAg
ICAgICAgICAgKyAiICB9LFxuIgotICAgICAgICAgICAgKyAiICBcImludDMyVG9GbG9hdE1hcFwi
OiB7XG4iCi0gICAgICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICAgICArICIgIFwiaW50MzJU
b0RvdWJsZU1hcFwiOiB7XG4iCi0gICAgICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICAgICAr
ICIgIFwiaW50MzJUb0Jvb2xNYXBcIjoge1xuIgotICAgICAgICAgICAgKyAiICB9LFxuIgotICAg
ICAgICAgICAgKyAiICBcImludDMyVG9TdHJpbmdNYXBcIjoge1xuIgotICAgICAgICAgICAgKyAi
ICB9LFxuIgotICAgICAgICAgICAgKyAiICBcImludDMyVG9CeXRlc01hcFwiOiB7XG4iCi0gICAg
ICAgICAgICArICIgIH0sXG4iCi0gICAgICAgICAgICArICIgIFwiaW50MzJUb01lc3NhZ2VNYXBc
Ijoge1xuIgotICAgICAgICAgICAgKyAiICB9LFxuIgotICAgICAgICAgICAgKyAiICBcImludDMy
VG9FbnVtTWFwXCI6IHtcbiIKLSAgICAgICAgICAgICsgIiAgfVxuIgotICAgICAgICAgICAgKyAi
fSIsCi0gICAgICAgIEpzb25Gb3JtYXQucHJpbnRlcigpLmluY2x1ZGluZ0RlZmF1bHRWYWx1ZUZp
ZWxkcygpLnByaW50KG1hcE1lc3NhZ2UpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RQcmVz
ZXJ2aW5nUHJvdG9GaWVsZE5hbWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5
cGVzIG1lc3NhZ2UgPSBUZXN0QWxsVHlwZXMubmV3QnVpbGRlcigpLnNldE9wdGlvbmFsSW50MzIo
MTIzNDUpLmJ1aWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJ7XG4iICsgIiAgXCJvcHRpb25hbElu
dDMyXCI6IDEyMzQ1XG4iICsgIn0iLCBKc29uRm9ybWF0LnByaW50ZXIoKS5wcmludChtZXNzYWdl
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAie1xuIiArICIgIFwib3B0aW9uYWxfaW50
MzJcIjogMTIzNDVcbiIgKyAifSIsCi0gICAgICAgIEpzb25Gb3JtYXQucHJpbnRlcigpLnByZXNl
cnZpbmdQcm90b0ZpZWxkTmFtZXMoKS5wcmludChtZXNzYWdlKSk7Ci0KLSAgICAvLyBUaGUganNv
bl9uYW1lIGZpZWxkIG9wdGlvbiBpcyBpZ25vcmVkIHdoZW4gY29uZmlndXJlZCB0byB1c2Ugb3Jp
Z2luYWwgcHJvdG8gZmllbGQgbmFtZXMuCi0gICAgVGVzdEN1c3RvbUpzb25OYW1lIG1lc3NhZ2VX
aXRoQ3VzdG9tSnNvbk5hbWUgPQotICAgICAgICBUZXN0Q3VzdG9tSnNvbk5hbWUubmV3QnVpbGRl
cigpLnNldFZhbHVlKDEyMzQ1KS5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAg
IntcbiIgKyAiICBcInZhbHVlXCI6IDEyMzQ1XG4iICsgIn0iLAotICAgICAgICBKc29uRm9ybWF0
LnByaW50ZXIoKS5wcmVzZXJ2aW5nUHJvdG9GaWVsZE5hbWVzKCkucHJpbnQobWVzc2FnZVdpdGhD
dXN0b21Kc29uTmFtZSkpOwotCi0gICAgLy8gUGFyc2VycyBhY2NlcHQgYm90aCBvcmlnaW5hbCBw
cm90byBmaWVsZCBuYW1lcyBhbmQgbG93ZXJDYW1lbENhc2UgbmFtZXMuCi0gICAgVGVzdEFsbFR5
cGVzLkJ1aWxkZXIgYnVpbGRlciA9IFRlc3RBbGxUeXBlcy5uZXdCdWlsZGVyKCk7Ci0gICAgSnNv
bkZvcm1hdC5wYXJzZXIoKS5tZXJnZSgie1wib3B0aW9uYWxJbnQzMlwiOiAxMjM0NX0iLCBidWls
ZGVyKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzNDUsIGJ1aWxkZXIuZ2V0T3B0aW9uYWxJbnQzMigp
KTsKLSAgICBidWlsZGVyLmNsZWFyKCk7Ci0gICAgSnNvbkZvcm1hdC5wYXJzZXIoKS5tZXJnZSgi
e1wib3B0aW9uYWxfaW50MzJcIjogNTQzMjF9IiwgYnVpbGRlcik7Ci0gICAgYXNzZXJ0RXF1YWxz
KDU0MzIxLCBidWlsZGVyLmdldE9wdGlvbmFsSW50MzIoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YS91dGlsL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi91dGlsL1RpbWVVdGls
VGVzdC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvVGltZVV0aWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMzFi
MmIzZGQ0NDkwYmY0N2Y3MjQ1ZmU5M2ZjZWY4NzY0ZTJmYzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhL3V0aWwvc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvVGltZVV0aWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1
MDYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2Ug
Y29tLmdvb2dsZS5wcm90b2J1Zi51dGlsOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5E
dXJhdGlvbjsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcDsKLQotaW1wb3J0
IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7Ci0K
LWltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqIFVuaXQgdGVzdHMgZm9yIHtAbGlu
ayBUaW1lVXRpbH0uICovCi1wdWJsaWMgY2xhc3MgVGltZVV0aWxUZXN0IGV4dGVuZHMgVGVzdENh
c2UgewotICBwdWJsaWMgdm9pZCB0ZXN0VGltZXN0YW1wU3RyaW5nRm9ybWF0KCkgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgVGltZXN0YW1wIHN0YXJ0ID0gVGltZVV0aWwucGFyc2VUaW1lc3RhbXAo
IjAwMDEtMDEtMDFUMDA6MDA6MDBaIik7Ci0gICAgVGltZXN0YW1wIGVuZCA9IFRpbWVVdGlsLnBh
cnNlVGltZXN0YW1wKCI5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTk5OVoiKTsKLSAgICBhc3Nl
cnRFcXVhbHMoVGltZVV0aWwuVElNRVNUQU1QX1NFQ09ORFNfTUlOLCBzdGFydC5nZXRTZWNvbmRz
KCkpOwotICAgIGFzc2VydEVxdWFscygwLCBzdGFydC5nZXROYW5vcygpKTsKLSAgICBhc3NlcnRF
cXVhbHMoVGltZVV0aWwuVElNRVNUQU1QX1NFQ09ORFNfTUFYLCBlbmQuZ2V0U2Vjb25kcygpKTsK
LSAgICBhc3NlcnRFcXVhbHMoOTk5OTk5OTk5LCBlbmQuZ2V0TmFub3MoKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCIwMDAxLTAxLTAxVDAwOjAwOjAwWiIsIFRpbWVVdGlsLnRvU3RyaW5nKHN0YXJ0KSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCI5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTk5OVoiLCBUaW1l
VXRpbC50b1N0cmluZyhlbmQpKTsKLQotICAgIFRpbWVzdGFtcCB2YWx1ZSA9IFRpbWVVdGlsLnBh
cnNlVGltZXN0YW1wKCIxOTcwLTAxLTAxVDAwOjAwOjAwWiIpOwotICAgIGFzc2VydEVxdWFscygw
LCB2YWx1ZS5nZXRTZWNvbmRzKCkpOwotICAgIGFzc2VydEVxdWFscygwLCB2YWx1ZS5nZXROYW5v
cygpKTsKLQotICAgIC8vIFRlc3QgbmVnYXRpdmUgdGltZXN0YW1wcy4KLSAgICB2YWx1ZSA9IFRp
bWVVdGlsLnBhcnNlVGltZXN0YW1wKCIxOTY5LTEyLTMxVDIzOjU5OjU5Ljk5OVoiKTsKLSAgICBh
c3NlcnRFcXVhbHMoLTEsIHZhbHVlLmdldFNlY29uZHMoKSk7Ci0gICAgLy8gTmFubyBwYXJ0IGlz
IGluIHRoZSByYW5nZSBvZiBbMCwgOTk5OTk5OTk5XSBmb3IgVGltZXN0YW1wLgotICAgIGFzc2Vy
dEVxdWFscyg5OTkwMDAwMDAsIHZhbHVlLmdldE5hbm9zKCkpOwotCi0gICAgLy8gVGVzdCB0aGF0
IDMsIDYsIG9yIDkgZGlnaXRzIGFyZSB1c2VkIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0LgotICAg
IHZhbHVlID0gVGltZXN0YW1wLm5ld0J1aWxkZXIoKS5zZXROYW5vcygxMCkuYnVpbGQoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoIjE5NzAtMDEtMDFUMDA6MDA6MDAuMDAwMDAwMDEwWiIsIFRpbWVVdGls
LnRvU3RyaW5nKHZhbHVlKSk7Ci0gICAgdmFsdWUgPSBUaW1lc3RhbXAubmV3QnVpbGRlcigpLnNl
dE5hbm9zKDEwMDAwKS5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygiMTk3MC0wMS0wMVQwMDow
MDowMC4wMDAwMTBaIiwgVGltZVV0aWwudG9TdHJpbmcodmFsdWUpKTsKLSAgICB2YWx1ZSA9IFRp
bWVzdGFtcC5uZXdCdWlsZGVyKCkuc2V0TmFub3MoMTAwMDAwMDApLmJ1aWxkKCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKCIxOTcwLTAxLTAxVDAwOjAwOjAwLjAxMFoiLCBUaW1lVXRpbC50b1N0cmluZyh2
YWx1ZSkpOwotCi0gICAgLy8gVGVzdCB0aGF0IHBhcnNpbmcgYWNjZXB0cyB0aW1lem9uZSBvZmZz
ZXRzLgotICAgIHZhbHVlID0gVGltZVV0aWwucGFyc2VUaW1lc3RhbXAoIjE5NzAtMDEtMDFUMDA6
MDA6MDAuMDEwKzA4OjAwIik7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxOTY5LTEyLTMxVDE2OjAwOjAw
LjAxMFoiLCBUaW1lVXRpbC50b1N0cmluZyh2YWx1ZSkpOwotICAgIHZhbHVlID0gVGltZVV0aWwu
cGFyc2VUaW1lc3RhbXAoIjE5NzAtMDEtMDFUMDA6MDA6MDAuMDEwLTA4OjAwIik7Ci0gICAgYXNz
ZXJ0RXF1YWxzKCIxOTcwLTAxLTAxVDA4OjAwOjAwLjAxMFoiLCBUaW1lVXRpbC50b1N0cmluZyh2
YWx1ZSkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIHN0b3BQYXJzaW5nVGhy
ZWFkcyA9IGZhbHNlOwotICBwcml2YXRlIHZvbGF0aWxlIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAi
IjsKLQotICBwcml2YXRlIGNsYXNzIFBhcnNlVGltZXN0YW1wVGhyZWFkIGV4dGVuZHMgVGhyZWFk
IHsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIHN0cmluZ3M7Ci0gICAgcHJpdmF0ZSBmaW5h
bCBUaW1lc3RhbXBbXSB2YWx1ZXM7Ci0gICAgcHVibGljIFBhcnNlVGltZXN0YW1wVGhyZWFkKFN0
cmluZ1tdIHN0cmluZ3MsIFRpbWVzdGFtcFtdIHZhbHVlcykgewotICAgICAgdGhpcy5zdHJpbmdz
ID0gc3RyaW5nczsKLSAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIGludCBpbmRleCA9IDA7Ci0g
ICAgICB3aGlsZSAoIXN0b3BQYXJzaW5nVGhyZWFkcykgewotICAgICAgICBUaW1lc3RhbXAgcmVz
dWx0OwotICAgICAgICB0cnkgewotICAgICAgICAgIHJlc3VsdCA9IFRpbWVVdGlsLnBhcnNlVGlt
ZXN0YW1wKHN0cmluZ3NbaW5kZXhdKTsKLSAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24g
ZSkgewotICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJGYWlsZWQgdG8gcGFyc2UgdGltZXN0YW1w
OiAiICsgc3RyaW5nc1tpbmRleF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHJlc3VsdC5nZXRTZWNvbmRzKCkgIT0gdmFsdWVzW2luZGV4XS5nZXRTZWNvbmRzKCkK
LSAgICAgICAgICAgIHx8IHJlc3VsdC5nZXROYW5vcygpICE9IHZhbHVlc1tpbmRleF0uZ2V0TmFu
b3MoKSkgewotICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJBY3R1YWwgcmVzdWx0OiAiICsgcmVz
dWx0LnRvU3RyaW5nKCkgKyAiLCBleHBlY3RlZDogIgotICAgICAgICAgICAgICArIHZhbHVlc1tp
bmRleF0udG9TdHJpbmcoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBp
bmRleCA9IChpbmRleCArIDEpICUgc3RyaW5ncy5sZW5ndGg7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0KLSAgcHVibGljIHZvaWQgdGVzdFRpbWVzdGFtcENvbmN1cnJlbnRQYXJzaW5nKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nW10gdGltZXN0YW1wU3RyaW5ncyA9IG5ldyBTdHJpbmdb
XXsKLSAgICAgICIwMDAxLTAxLTAxVDAwOjAwOjAwWiIsCi0gICAgICAiOTk5OS0xMi0zMVQyMzo1
OTo1OS45OTk5OTk5OTlaIiwKLSAgICAgICIxOTcwLTAxLTAxVDAwOjAwOjAwWiIsCi0gICAgICAi
MTk2OS0xMi0zMVQyMzo1OTo1OS45OTlaIiwKLSAgICB9OwotICAgIFRpbWVzdGFtcFtdIHRpbWVz
dGFtcFZhbHVlcyA9IG5ldyBUaW1lc3RhbXBbdGltZXN0YW1wU3RyaW5ncy5sZW5ndGhdOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdGltZXN0YW1wU3RyaW5ncy5sZW5ndGg7IGkrKykgewotICAg
ICAgdGltZXN0YW1wVmFsdWVzW2ldID0gVGltZVV0aWwucGFyc2VUaW1lc3RhbXAodGltZXN0YW1w
U3RyaW5nc1tpXSk7Ci0gICAgfQotCi0gICAgZmluYWwgaW50IFRIUkVBRF9DT1VOVCA9IDE2Owot
ICAgIGZpbmFsIGludCBSVU5OSU5HX1RJTUUgPSA1MDAwOyAgLy8gaW4gbWlsbGlzZWNvbmRzLgot
ICAgIGZpbmFsIExpc3Q8VGhyZWFkPiB0aHJlYWRzID0gbmV3IEFycmF5TGlzdDxUaHJlYWQ+KCk7
Ci0KLSAgICBzdG9wUGFyc2luZ1RocmVhZHMgPSBmYWxzZTsKLSAgICBlcnJvck1lc3NhZ2UgPSAi
IjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFRIUkVBRF9DT1VOVDsgaSsrKSB7Ci0gICAgICBU
aHJlYWQgdGhyZWFkID0gbmV3IFBhcnNlVGltZXN0YW1wVGhyZWFkKAotICAgICAgICAgIHRpbWVz
dGFtcFN0cmluZ3MsIHRpbWVzdGFtcFZhbHVlcyk7Ci0gICAgICB0aHJlYWQuc3RhcnQoKTsKLSAg
ICAgIHRocmVhZHMuYWRkKHRocmVhZCk7Ci0gICAgfQotICAgIFRocmVhZC5zbGVlcChSVU5OSU5H
X1RJTUUpOwotICAgIHN0b3BQYXJzaW5nVGhyZWFkcyA9IHRydWU7Ci0gICAgZm9yIChUaHJlYWQg
dGhyZWFkIDogdGhyZWFkcykgewotICAgICAgdGhyZWFkLmpvaW4oKTsKLSAgICB9Ci0gICAgQXNz
ZXJ0LmFzc2VydEVxdWFscygiIiwgZXJyb3JNZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3RUaW1ldGFtcEludmFsaWRGb3JtYXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB0cnkg
ewotICAgICAgLy8gVmFsdWUgdG9vIHNtYWxsLgotICAgICAgVGltZXN0YW1wIHZhbHVlID0gVGlt
ZXN0YW1wLm5ld0J1aWxkZXIoKQotICAgICAgICAuc2V0U2Vjb25kcyhUaW1lVXRpbC5USU1FU1RB
TVBfU0VDT05EU19NSU4gLSAxKS5idWlsZCgpOwotICAgICAgVGltZVV0aWwudG9TdHJpbmcodmFs
dWUpOwotICAgICAgQXNzZXJ0LmZhaWwoIkV4Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsKLSAgICB9
IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgLy8gRXhwZWN0ZWQu
Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIC8vIFZhbHVlIHRvbyBsYXJnZS4KLSAgICAgIFRp
bWVzdGFtcCB2YWx1ZSA9IFRpbWVzdGFtcC5uZXdCdWlsZGVyKCkKLSAgICAgICAgLnNldFNlY29u
ZHMoVGltZVV0aWwuVElNRVNUQU1QX1NFQ09ORFNfTUFYICsgMSkuYnVpbGQoKTsKLSAgICAgIFRp
bWVVdGlsLnRvU3RyaW5nKHZhbHVlKTsKLSAgICAgIEFzc2VydC5mYWlsKCJFeGNlcHRpb24gaXMg
ZXhwZWN0ZWQuIik7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsK
LSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLSAgICAKLSAgICB0cnkgewotICAgICAgLy8gSW52
YWxpZCBuYW5vcyB2YWx1ZS4KLSAgICAgIFRpbWVzdGFtcCB2YWx1ZSA9IFRpbWVzdGFtcC5uZXdC
dWlsZGVyKCkuc2V0TmFub3MoLTEpLmJ1aWxkKCk7Ci0gICAgICBUaW1lVXRpbC50b1N0cmluZyh2
YWx1ZSk7Ci0gICAgICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwotICAg
IH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3Rl
ZC4KLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgLy8gSW52YWxpZCBuYW5vcyB2YWx1ZS4KLSAg
ICAgIFRpbWVzdGFtcCB2YWx1ZSA9IFRpbWVzdGFtcC5uZXdCdWlsZGVyKCkuc2V0TmFub3MoMTAw
MDAwMDAwMCkuYnVpbGQoKTsKLSAgICAgIFRpbWVVdGlsLnRvU3RyaW5nKHZhbHVlKTsKLSAgICAg
IEFzc2VydC5mYWlsKCJFeGNlcHRpb24gaXMgZXhwZWN0ZWQuIik7Ci0gICAgfSBjYXRjaCAoSWxs
ZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLQot
ICAgIHRyeSB7Ci0gICAgICAvLyBWYWx1ZSB0byBzbWFsbC4KLSAgICAgIFRpbWVVdGlsLnBhcnNl
VGltZXN0YW1wKCIwMDAwLTAxLTAxVDAwOjAwOjAwWiIpOwotICAgICAgQXNzZXJ0LmZhaWwoIkV4
Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsKLSAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgLy8gVmFsdWUg
dG8gbGFyZ2UuCi0gICAgICBUaW1lVXRpbC5wYXJzZVRpbWVzdGFtcCgiMTAwMDAtMDEtMDFUMDA6
MDA6MDBaIik7Ci0gICAgICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwot
ICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAg
IH0KLQotICAgIHRyeSB7Ci0gICAgICAvLyBNaXNzaW5nICdUJy4KLSAgICAgIFRpbWVVdGlsLnBh
cnNlVGltZXN0YW1wKCIxOTcwLTAxLTAxIDAwOjAwOjAwWiIpOwotICAgICAgQXNzZXJ0LmZhaWwo
IkV4Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsKLSAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgLy8gTWlz
c2luZyAnWicuCi0gICAgICBUaW1lVXRpbC5wYXJzZVRpbWVzdGFtcCgiMTk3MC0wMS0wMVQwMDow
MDowMCIpOwotICAgICAgQXNzZXJ0LmZhaWwoIkV4Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsKLSAg
ICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9
Ci0KLSAgICB0cnkgewotICAgICAgLy8gSW52YWxpZCBvZmZzZXQuCi0gICAgICBUaW1lVXRpbC5w
YXJzZVRpbWVzdGFtcCgiMTk3MC0wMS0wMVQwMDowMDowMCswMDAwIik7Ci0gICAgICBBc3NlcnQu
ZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwotICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0
aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICAv
LyBUcmFpbGluZyB0ZXh0LgotICAgICAgVGltZVV0aWwucGFyc2VUaW1lc3RhbXAoIjE5NzAtMDEt
MDFUMDA6MDA6MDBaMCIpOwotICAgICAgQXNzZXJ0LmZhaWwoIkV4Y2VwdGlvbiBpcyBleHBlY3Rl
ZC4iKTsKLSAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3Rl
ZC4KLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgLy8gSW52YWxpZCBuYW5vc2Vjb25kIHZhbHVl
LgotICAgICAgVGltZVV0aWwucGFyc2VUaW1lc3RhbXAoIjE5NzAtMDEtMDFUMDA6MDA6MDAuQUJD
WiIpOwotICAgICAgQXNzZXJ0LmZhaWwoIkV4Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsKLSAgICB9
IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RHVyYXRpb25TdHJpbmdGb3JtYXQoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBUaW1lc3RhbXAgc3RhcnQgPSBUaW1lVXRpbC5wYXJzZVRpbWVzdGFtcCgi
MDAwMS0wMS0wMVQwMDowMDowMFoiKTsKLSAgICBUaW1lc3RhbXAgZW5kID0gVGltZVV0aWwucGFy
c2VUaW1lc3RhbXAoIjk5OTktMTItMzFUMjM6NTk6NTkuOTk5OTk5OTk5WiIpOwotICAgIER1cmF0
aW9uIGR1cmF0aW9uID0gVGltZVV0aWwuZGlzdGFuY2Uoc3RhcnQsIGVuZCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCIzMTU1Mzc4OTc1OTkuOTk5OTk5OTk5cyIsIFRpbWVVdGlsLnRvU3RyaW5nKGR1cmF0
aW9uKSk7Ci0gICAgZHVyYXRpb24gPSBUaW1lVXRpbC5kaXN0YW5jZShlbmQsIHN0YXJ0KTsKLSAg
ICBhc3NlcnRFcXVhbHMoIi0zMTU1Mzc4OTc1OTkuOTk5OTk5OTk5cyIsIFRpbWVVdGlsLnRvU3Ry
aW5nKGR1cmF0aW9uKSk7Ci0KLSAgICAvLyBHZW5lcmF0ZWQgb3V0cHV0IHNob3VsZCBjb250YWlu
IDMsIDYsIG9yIDkgZnJhY3Rpb25hbCBkaWdpdHMuCi0gICAgZHVyYXRpb24gPSBEdXJhdGlvbi5u
ZXdCdWlsZGVyKCkuc2V0U2Vjb25kcygxKS5idWlsZCgpOwotICAgIGFzc2VydEVxdWFscygiMXMi
LCBUaW1lVXRpbC50b1N0cmluZyhkdXJhdGlvbikpOwotICAgIGR1cmF0aW9uID0gRHVyYXRpb24u
bmV3QnVpbGRlcigpLnNldE5hbm9zKDEwMDAwMDAwKS5idWlsZCgpOwotICAgIGFzc2VydEVxdWFs
cygiMC4wMTBzIiwgVGltZVV0aWwudG9TdHJpbmcoZHVyYXRpb24pKTsKLSAgICBkdXJhdGlvbiA9
IER1cmF0aW9uLm5ld0J1aWxkZXIoKS5zZXROYW5vcygxMDAwMCkuYnVpbGQoKTsKLSAgICBhc3Nl
cnRFcXVhbHMoIjAuMDAwMDEwcyIsIFRpbWVVdGlsLnRvU3RyaW5nKGR1cmF0aW9uKSk7Ci0gICAg
ZHVyYXRpb24gPSBEdXJhdGlvbi5uZXdCdWlsZGVyKCkuc2V0TmFub3MoMTApLmJ1aWxkKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKCIwLjAwMDAwMDAxMHMiLCBUaW1lVXRpbC50b1N0cmluZyhkdXJhdGlv
bikpOwotCi0gICAgLy8gUGFyc2luZyBhY2NlcHRzIGFuIGZyYWN0aW9uYWwgZGlnaXRzIGFzIGxv
bmcgYXMgdGhleSBmaXQgaW50byBuYW5vCi0gICAgLy8gcHJlY2lzaW9uLgotICAgIGR1cmF0aW9u
ID0gVGltZVV0aWwucGFyc2VEdXJhdGlvbigiMC4xcyIpOwotICAgIGFzc2VydEVxdWFscygxMDAw
MDAwMDAsIGR1cmF0aW9uLmdldE5hbm9zKCkpOwotICAgIGR1cmF0aW9uID0gVGltZVV0aWwucGFy
c2VEdXJhdGlvbigiMC4wMDAxcyIpOwotICAgIGFzc2VydEVxdWFscygxMDAwMDAsIGR1cmF0aW9u
LmdldE5hbm9zKCkpOwotICAgIGR1cmF0aW9uID0gVGltZVV0aWwucGFyc2VEdXJhdGlvbigiMC4w
MDAwMDAxcyIpOwotICAgIGFzc2VydEVxdWFscygxMDAsIGR1cmF0aW9uLmdldE5hbm9zKCkpOwot
Ci0gICAgLy8gRHVyYXRpb24gbXVzdCBzdXBwb3J0IHJhbmdlIGZyb20gLTMxNSw1NzYsMDAwLDAw
MHMgdG8gKzMxNTU3NjAwMDAwMHMKLSAgICAvLyB3aGljaCBpbmNsdWRlcyBuZWdhdGl2ZSB2YWx1
ZXMuCi0gICAgZHVyYXRpb24gPSBUaW1lVXRpbC5wYXJzZUR1cmF0aW9uKCIzMTU1NzYwMDAwMDAu
OTk5OTk5OTk5cyIpOwotICAgIGFzc2VydEVxdWFscygzMTU1NzYwMDAwMDBMLCBkdXJhdGlvbi5n
ZXRTZWNvbmRzKCkpOwotICAgIGFzc2VydEVxdWFscyg5OTk5OTk5OTksIGR1cmF0aW9uLmdldE5h
bm9zKCkpOwotICAgIGR1cmF0aW9uID0gVGltZVV0aWwucGFyc2VEdXJhdGlvbigiLTMxNTU3NjAw
MDAwMC45OTk5OTk5OTlzIik7Ci0gICAgYXNzZXJ0RXF1YWxzKC0zMTU1NzYwMDAwMDBMLCBkdXJh
dGlvbi5nZXRTZWNvbmRzKCkpOwotICAgIGFzc2VydEVxdWFscygtOTk5OTk5OTk5LCBkdXJhdGlv
bi5nZXROYW5vcygpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3REdXJhdGlvbkludmFsaWRG
b3JtYXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB0cnkgewotICAgICAgLy8gVmFsdWUgdG9v
IHNtYWxsLgotICAgICAgRHVyYXRpb24gdmFsdWUgPSBEdXJhdGlvbi5uZXdCdWlsZGVyKCkKLSAg
ICAgICAgLnNldFNlY29uZHMoVGltZVV0aWwuRFVSQVRJT05fU0VDT05EU19NSU4gLSAxKS5idWls
ZCgpOwotICAgICAgVGltZVV0aWwudG9TdHJpbmcodmFsdWUpOwotICAgICAgQXNzZXJ0LmZhaWwo
IkV4Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24gZSkgewotICAgICAgLy8gRXhwZWN0ZWQuCi0gICAgfQotCi0gICAgdHJ5IHsKLSAg
ICAgIC8vIFZhbHVlIHRvbyBsYXJnZS4KLSAgICAgIER1cmF0aW9uIHZhbHVlID0gRHVyYXRpb24u
bmV3QnVpbGRlcigpCi0gICAgICAgIC5zZXRTZWNvbmRzKFRpbWVVdGlsLkRVUkFUSU9OX1NFQ09O
RFNfTUFYICsgMSkuYnVpbGQoKTsKLSAgICAgIFRpbWVVdGlsLnRvU3RyaW5nKHZhbHVlKTsKLSAg
ICAgIEFzc2VydC5mYWlsKCJFeGNlcHRpb24gaXMgZXhwZWN0ZWQuIik7Ci0gICAgfSBjYXRjaCAo
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0K
LSAgICAKLSAgICB0cnkgewotICAgICAgLy8gSW52YWxpZCBuYW5vcyB2YWx1ZS4KLSAgICAgIER1
cmF0aW9uIHZhbHVlID0gRHVyYXRpb24ubmV3QnVpbGRlcigpLnNldFNlY29uZHMoMSkuc2V0TmFu
b3MoLTEpCi0gICAgICAgICAgLmJ1aWxkKCk7Ci0gICAgICBUaW1lVXRpbC50b1N0cmluZyh2YWx1
ZSk7Ci0gICAgICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwotICAgIH0g
Y2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3RlZC4K
LSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgLy8gSW52YWxpZCBuYW5vcyB2YWx1ZS4KLSAgICAg
IER1cmF0aW9uIHZhbHVlID0gRHVyYXRpb24ubmV3QnVpbGRlcigpLnNldFNlY29uZHMoLTEpLnNl
dE5hbm9zKDEpCi0gICAgICAgICAgLmJ1aWxkKCk7Ci0gICAgICBUaW1lVXRpbC50b1N0cmluZyh2
YWx1ZSk7Ci0gICAgICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwotICAg
IH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBFeHBlY3Rl
ZC4KLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgLy8gVmFsdWUgdG9vIHNtYWxsLgotICAgICAg
VGltZVV0aWwucGFyc2VEdXJhdGlvbigiLTMxNTU3NjAwMDAwMXMiKTsKLSAgICAgIEFzc2VydC5m
YWlsKCJFeGNlcHRpb24gaXMgZXhwZWN0ZWQuIik7Ci0gICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRp
b24gZSkgewotICAgICAgLy8gRXhwZWN0ZWQuCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIC8v
IFZhbHVlIHRvbyBsYXJnZS4KLSAgICAgIFRpbWVVdGlsLnBhcnNlRHVyYXRpb24oIjMxNTU3NjAw
MDAwMXMiKTsKLSAgICAgIEFzc2VydC5mYWlsKCJFeGNlcHRpb24gaXMgZXhwZWN0ZWQuIik7Ci0g
ICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgewotICAgICAgLy8gRXhwZWN0ZWQuCi0gICAg
fQotCi0gICAgdHJ5IHsKLSAgICAgIC8vIEVtcHR5LgotICAgICAgVGltZVV0aWwucGFyc2VEdXJh
dGlvbigiIik7Ci0gICAgICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwot
ICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAg
IH0KLQotICAgIHRyeSB7Ci0gICAgICAvLyBNaXNzaW5nICJzIi4KLSAgICAgIFRpbWVVdGlsLnBh
cnNlRHVyYXRpb24oIjAiKTsKLSAgICAgIEFzc2VydC5mYWlsKCJFeGNlcHRpb24gaXMgZXhwZWN0
ZWQuIik7Ci0gICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgewotICAgICAgLy8gRXhwZWN0
ZWQuCi0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIC8vIEludmFsaWQgdHJhaWxpbmcgZGF0YS4K
LSAgICAgIFRpbWVVdGlsLnBhcnNlRHVyYXRpb24oIjBzMCIpOwotICAgICAgQXNzZXJ0LmZhaWwo
IkV4Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsKLSAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAvLyBFeHBlY3RlZC4KLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgLy8gSW52
YWxpZCBwcmVmaXguCi0gICAgICBUaW1lVXRpbC5wYXJzZUR1cmF0aW9uKCItLTFzIik7Ci0gICAg
ICBBc3NlcnQuZmFpbCgiRXhjZXB0aW9uIGlzIGV4cGVjdGVkLiIpOwotICAgIH0gY2F0Y2ggKFBh
cnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3RUaW1lc3RhbXBDb252ZXJzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgVGltZXN0YW1wIHRpbWVzdGFtcCA9Ci0gICAgICBUaW1lVXRpbC5wYXJzZVRpbWVzdGFtcCgi
MTk3MC0wMS0wMVQwMDowMDowMS4xMTExMTExMTFaIik7Ci0gICAgYXNzZXJ0RXF1YWxzKDExMTEx
MTExMTEsIFRpbWVVdGlsLnRvTmFub3ModGltZXN0YW1wKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEx
MTExMTEsIFRpbWVVdGlsLnRvTWljcm9zKHRpbWVzdGFtcCkpOwotICAgIGFzc2VydEVxdWFscygx
MTExLCBUaW1lVXRpbC50b01pbGxpcyh0aW1lc3RhbXApKTsKLSAgICB0aW1lc3RhbXAgPSBUaW1l
VXRpbC5jcmVhdGVUaW1lc3RhbXBGcm9tTmFub3MoMTExMTExMTExMSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKCIxOTcwLTAxLTAxVDAwOjAwOjAxLjExMTExMTExMVoiLCBUaW1lVXRpbC50b1N0cmluZyh0
aW1lc3RhbXApKTsKLSAgICB0aW1lc3RhbXAgPSBUaW1lVXRpbC5jcmVhdGVUaW1lc3RhbXBGcm9t
TWljcm9zKDExMTExMTEpOwotICAgIGFzc2VydEVxdWFscygiMTk3MC0wMS0wMVQwMDowMDowMS4x
MTExMTFaIiwgVGltZVV0aWwudG9TdHJpbmcodGltZXN0YW1wKSk7Ci0gICAgdGltZXN0YW1wID0g
VGltZVV0aWwuY3JlYXRlVGltZXN0YW1wRnJvbU1pbGxpcygxMTExKTsKLSAgICBhc3NlcnRFcXVh
bHMoIjE5NzAtMDEtMDFUMDA6MDA6MDEuMTExWiIsIFRpbWVVdGlsLnRvU3RyaW5nKHRpbWVzdGFt
cCkpOwotICAgIAotICAgIHRpbWVzdGFtcCA9IFRpbWVVdGlsLnBhcnNlVGltZXN0YW1wKCIxOTY5
LTEyLTMxVDIzOjU5OjU5LjExMTExMTExMVoiKTsKLSAgICBhc3NlcnRFcXVhbHMoLTg4ODg4ODg4
OSwgVGltZVV0aWwudG9OYW5vcyh0aW1lc3RhbXApKTsKLSAgICBhc3NlcnRFcXVhbHMoLTg4ODg4
OSwgVGltZVV0aWwudG9NaWNyb3ModGltZXN0YW1wKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKC04ODks
IFRpbWVVdGlsLnRvTWlsbGlzKHRpbWVzdGFtcCkpOwotICAgIHRpbWVzdGFtcCA9IFRpbWVVdGls
LmNyZWF0ZVRpbWVzdGFtcEZyb21OYW5vcygtODg4ODg4ODg5KTsKLSAgICBhc3NlcnRFcXVhbHMo
IjE5NjktMTItMzFUMjM6NTk6NTkuMTExMTExMTExWiIsIFRpbWVVdGlsLnRvU3RyaW5nKHRpbWVz
dGFtcCkpOwotICAgIHRpbWVzdGFtcCA9IFRpbWVVdGlsLmNyZWF0ZVRpbWVzdGFtcEZyb21NaWNy
b3MoLTg4ODg4OSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxOTY5LTEyLTMxVDIzOjU5OjU5LjExMTEx
MVoiLCBUaW1lVXRpbC50b1N0cmluZyh0aW1lc3RhbXApKTsKLSAgICB0aW1lc3RhbXAgPSBUaW1l
VXRpbC5jcmVhdGVUaW1lc3RhbXBGcm9tTWlsbGlzKC04ODkpOwotICAgIGFzc2VydEVxdWFscygi
MTk2OS0xMi0zMVQyMzo1OTo1OS4xMTFaIiwgVGltZVV0aWwudG9TdHJpbmcodGltZXN0YW1wKSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0RHVyYXRpb25Db252ZXJzaW9uKCkgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgRHVyYXRpb24gZHVyYXRpb24gPSBUaW1lVXRpbC5wYXJzZUR1cmF0aW9u
KCIxLjExMTExMTExMXMiKTsKLSAgICBhc3NlcnRFcXVhbHMoMTExMTExMTExMSwgVGltZVV0aWwu
dG9OYW5vcyhkdXJhdGlvbikpOwotICAgIGFzc2VydEVxdWFscygxMTExMTExLCBUaW1lVXRpbC50
b01pY3JvcyhkdXJhdGlvbikpOwotICAgIGFzc2VydEVxdWFscygxMTExLCBUaW1lVXRpbC50b01p
bGxpcyhkdXJhdGlvbikpOwotICAgIGR1cmF0aW9uID0gVGltZVV0aWwuY3JlYXRlRHVyYXRpb25G
cm9tTmFub3MoMTExMTExMTExMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxLjExMTExMTExMXMiLCBU
aW1lVXRpbC50b1N0cmluZyhkdXJhdGlvbikpOwotICAgIGR1cmF0aW9uID0gVGltZVV0aWwuY3Jl
YXRlRHVyYXRpb25Gcm9tTWljcm9zKDExMTExMTEpOwotICAgIGFzc2VydEVxdWFscygiMS4xMTEx
MTFzIiwgVGltZVV0aWwudG9TdHJpbmcoZHVyYXRpb24pKTsKLSAgICBkdXJhdGlvbiA9IFRpbWVV
dGlsLmNyZWF0ZUR1cmF0aW9uRnJvbU1pbGxpcygxMTExKTsKLSAgICBhc3NlcnRFcXVhbHMoIjEu
MTExcyIsIFRpbWVVdGlsLnRvU3RyaW5nKGR1cmF0aW9uKSk7Ci0gICAgCi0gICAgZHVyYXRpb24g
PSBUaW1lVXRpbC5wYXJzZUR1cmF0aW9uKCItMS4xMTExMTExMTFzIik7Ci0gICAgYXNzZXJ0RXF1
YWxzKC0xMTExMTExMTExLCBUaW1lVXRpbC50b05hbm9zKGR1cmF0aW9uKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKC0xMTExMTExLCBUaW1lVXRpbC50b01pY3JvcyhkdXJhdGlvbikpOwotICAgIGFzc2Vy
dEVxdWFscygtMTExMSwgVGltZVV0aWwudG9NaWxsaXMoZHVyYXRpb24pKTsKLSAgICBkdXJhdGlv
biA9IFRpbWVVdGlsLmNyZWF0ZUR1cmF0aW9uRnJvbU5hbm9zKC0xMTExMTExMTExKTsKLSAgICBh
c3NlcnRFcXVhbHMoIi0xLjExMTExMTExMXMiLCBUaW1lVXRpbC50b1N0cmluZyhkdXJhdGlvbikp
OwotICAgIGR1cmF0aW9uID0gVGltZVV0aWwuY3JlYXRlRHVyYXRpb25Gcm9tTWljcm9zKC0xMTEx
MTExKTsKLSAgICBhc3NlcnRFcXVhbHMoIi0xLjExMTExMXMiLCBUaW1lVXRpbC50b1N0cmluZyhk
dXJhdGlvbikpOwotICAgIGR1cmF0aW9uID0gVGltZVV0aWwuY3JlYXRlRHVyYXRpb25Gcm9tTWls
bGlzKC0xMTExKTsKLSAgICBhc3NlcnRFcXVhbHMoIi0xLjExMXMiLCBUaW1lVXRpbC50b1N0cmlu
ZyhkdXJhdGlvbikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFRpbWVPcGVyYXRpb25zKCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGltZXN0YW1wIHN0YXJ0ID0gVGltZVV0aWwucGFyc2VU
aW1lc3RhbXAoIjAwMDEtMDEtMDFUMDA6MDA6MDBaIik7Ci0gICAgVGltZXN0YW1wIGVuZCA9IFRp
bWVVdGlsLnBhcnNlVGltZXN0YW1wKCI5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTk5OVoiKTsK
LQotICAgIER1cmF0aW9uIGR1cmF0aW9uID0gVGltZVV0aWwuZGlzdGFuY2Uoc3RhcnQsIGVuZCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCIzMTU1Mzc4OTc1OTkuOTk5OTk5OTk5cyIsIFRpbWVVdGlsLnRv
U3RyaW5nKGR1cmF0aW9uKSk7Ci0gICAgVGltZXN0YW1wIHZhbHVlID0gVGltZVV0aWwuYWRkKHN0
YXJ0LCBkdXJhdGlvbik7Ci0gICAgYXNzZXJ0RXF1YWxzKGVuZCwgdmFsdWUpOwotICAgIHZhbHVl
ID0gVGltZVV0aWwuc3VidHJhY3QoZW5kLCBkdXJhdGlvbik7Ci0gICAgYXNzZXJ0RXF1YWxzKHN0
YXJ0LCB2YWx1ZSk7Ci0KLSAgICBkdXJhdGlvbiA9IFRpbWVVdGlsLmRpc3RhbmNlKGVuZCwgc3Rh
cnQpOwotICAgIGFzc2VydEVxdWFscygiLTMxNTUzNzg5NzU5OS45OTk5OTk5OTlzIiwgVGltZVV0
aWwudG9TdHJpbmcoZHVyYXRpb24pKTsKLSAgICB2YWx1ZSA9IFRpbWVVdGlsLmFkZChlbmQsIGR1
cmF0aW9uKTsKLSAgICBhc3NlcnRFcXVhbHMoc3RhcnQsIHZhbHVlKTsKLSAgICB2YWx1ZSA9IFRp
bWVVdGlsLnN1YnRyYWN0KHN0YXJ0LCBkdXJhdGlvbik7Ci0gICAgYXNzZXJ0RXF1YWxzKGVuZCwg
dmFsdWUpOwotCi0gICAgLy8gUmVzdWx0IGlzIGxhcmdlciB0aGFuIExvbmcuTUFYX1ZBTFVFLgot
ICAgIHRyeSB7Ci0gICAgICBkdXJhdGlvbiA9IFRpbWVVdGlsLnBhcnNlRHVyYXRpb24oIjMxNTUz
Nzg5NzU5OS45OTk5OTk5OTlzIik7Ci0gICAgICBkdXJhdGlvbiA9IFRpbWVVdGlsLm11bHRpcGx5
KGR1cmF0aW9uLCAzMTU1Mzc4OTc1OTkuOTk5OTk5OTk5KTsKLSAgICAgIEFzc2VydC5mYWlsKCJF
eGNlcHRpb24gaXMgZXhwZWN0ZWQuIik7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uIGUpIHsKLSAgICAgIC8vIEV4cGVjdGVkLgotICAgIH0KLQotICAgIC8vIFJlc3VsdCBp
cyBsZXNzZXIgdGhhbiBMb25nLk1JTl9WQUxVRS4KLSAgICB0cnkgewotICAgICAgZHVyYXRpb24g
PSBUaW1lVXRpbC5wYXJzZUR1cmF0aW9uKCIzMTU1Mzc4OTc1OTkuOTk5OTk5OTk5cyIpOwotICAg
ICAgZHVyYXRpb24gPSBUaW1lVXRpbC5tdWx0aXBseShkdXJhdGlvbiwgLTMxNTUzNzg5NzU5OS45
OTk5OTk5OTkpOwotICAgICAgQXNzZXJ0LmZhaWwoIkV4Y2VwdGlvbiBpcyBleHBlY3RlZC4iKTsK
LSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgLy8gRXhw
ZWN0ZWQuCi0gICAgfQotCi0gICAgZHVyYXRpb24gPSBUaW1lVXRpbC5wYXJzZUR1cmF0aW9uKCIt
MS4xMjVzIik7Ci0gICAgZHVyYXRpb24gPSBUaW1lVXRpbC5kaXZpZGUoZHVyYXRpb24sIDIuMCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCItMC41NjI1MDBzIiwgVGltZVV0aWwudG9TdHJpbmcoZHVyYXRp
b24pKTsKLSAgICBkdXJhdGlvbiA9IFRpbWVVdGlsLm11bHRpcGx5KGR1cmF0aW9uLCAyLjApOwot
ICAgIGFzc2VydEVxdWFscygiLTEuMTI1cyIsIFRpbWVVdGlsLnRvU3RyaW5nKGR1cmF0aW9uKSk7
Ci0KLSAgICBkdXJhdGlvbiA9IFRpbWVVdGlsLmFkZChkdXJhdGlvbiwgZHVyYXRpb24pOwotICAg
IGFzc2VydEVxdWFscygiLTIuMjUwcyIsIFRpbWVVdGlsLnRvU3RyaW5nKGR1cmF0aW9uKSk7Ci0g
ICAgCi0gICAgZHVyYXRpb24gPSBUaW1lVXRpbC5zdWJ0cmFjdChkdXJhdGlvbiwgVGltZVV0aWwu
cGFyc2VEdXJhdGlvbigiLTFzIikpOwotICAgIGFzc2VydEVxdWFscygiLTEuMjUwcyIsIFRpbWVV
dGlsLnRvU3RyaW5nKGR1cmF0aW9uKSk7Ci0gICAgCi0gICAgLy8gTXVsdGlwbGljYXRpb25zICh3
aXRoIHJlc3VsdHMgbGFyZ2VyIHRoYW4gTG9uZy5NQVhfVkFMVUUgaW4gbmFub3NlY29uZHMpLgot
ICAgIGR1cmF0aW9uID0gVGltZVV0aWwucGFyc2VEdXJhdGlvbigiMC45OTk5OTk5OTlzIik7Ci0g
ICAgYXNzZXJ0RXF1YWxzKCIzMTU1NzU5OTk2ODQuNDI0cyIsCi0gICAgICBUaW1lVXRpbC50b1N0
cmluZyhUaW1lVXRpbC5tdWx0aXBseShkdXJhdGlvbiwgMzE1NTc2MDAwMDAwTCkpKTsKLSAgICBk
dXJhdGlvbiA9IFRpbWVVdGlsLnBhcnNlRHVyYXRpb24oIi0wLjk5OTk5OTk5OXMiKTsKLSAgICBh
c3NlcnRFcXVhbHMoIi0zMTU1NzU5OTk2ODQuNDI0cyIsCi0gICAgICBUaW1lVXRpbC50b1N0cmlu
ZyhUaW1lVXRpbC5tdWx0aXBseShkdXJhdGlvbiwgMzE1NTc2MDAwMDAwTCkpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoIjMxNTU3NTk5OTY4NC40MjRzIiwKLSAgICAgIFRpbWVVdGlsLnRvU3RyaW5nKFRp
bWVVdGlsLm11bHRpcGx5KGR1cmF0aW9uLCAtMzE1NTc2MDAwMDAwTCkpKTsKLSAgICAKLSAgICAv
LyBEaXZpc2lvbnMgKHdpdGggdmFsdWVzIGxhcmdlciB0aGFuIExvbmcuTUFYX1ZBTFVFIGluIG5h
bm9zZWNvbmRzKS4KLSAgICBEdXJhdGlvbiBkMSA9IFRpbWVVdGlsLnBhcnNlRHVyYXRpb24oIjMx
NTU3NjAwMDAwMHMiKTsKLSAgICBEdXJhdGlvbiBkMiA9IFRpbWVVdGlsLnN1YnRyYWN0KGQxLCBU
aW1lVXRpbC5jcmVhdGVEdXJhdGlvbkZyb21OYW5vcygxKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEs
IFRpbWVVdGlsLmRpdmlkZShkMSwgZDIpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgVGltZVV0aWwu
ZGl2aWRlKGQyLCBkMSkpOwotICAgIGFzc2VydEVxdWFscygiMC4wMDAwMDAwMDFzIiwgVGltZVV0
aWwudG9TdHJpbmcoVGltZVV0aWwucmVtYWluZGVyKGQxLCBkMikpKTsKLSAgICBhc3NlcnRFcXVh
bHMoIjMxNTU3NTk5OTk5OS45OTk5OTk5OTlzIiwKLSAgICAgIFRpbWVVdGlsLnRvU3RyaW5nKFRp
bWVVdGlsLnJlbWFpbmRlcihkMiwgZDEpKSk7Ci0gICAgCi0gICAgLy8gRGl2aXNpb25zIGludm9s
dmluZyBuZWdhdGl2ZSB2YWx1ZXMuCi0gICAgLy8KLSAgICAvLyAoLTUpIC8gMiA9IC0yLCByZW1h
aW5kZXIgPSAtMQotICAgIGQxID0gVGltZVV0aWwucGFyc2VEdXJhdGlvbigiLTVzIik7Ci0gICAg
ZDIgPSBUaW1lVXRpbC5wYXJzZUR1cmF0aW9uKCIycyIpOwotICAgIGFzc2VydEVxdWFscygtMiwg
VGltZVV0aWwuZGl2aWRlKGQxLCBkMikpOwotICAgIGFzc2VydEVxdWFscygtMiwgVGltZVV0aWwu
ZGl2aWRlKGQxLCAyKS5nZXRTZWNvbmRzKCkpOwotICAgIGFzc2VydEVxdWFscygtMSwgVGltZVV0
aWwucmVtYWluZGVyKGQxLCBkMikuZ2V0U2Vjb25kcygpKTsKLSAgICAvLyAoLTUpIC8gKC0yKSA9
IDIsIHJlbWFpbmRlciA9IC0xCi0gICAgZDEgPSBUaW1lVXRpbC5wYXJzZUR1cmF0aW9uKCItNXMi
KTsKLSAgICBkMiA9IFRpbWVVdGlsLnBhcnNlRHVyYXRpb24oIi0ycyIpOwotICAgIGFzc2VydEVx
dWFscygyLCBUaW1lVXRpbC5kaXZpZGUoZDEsIGQyKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIFRp
bWVVdGlsLmRpdmlkZShkMSwgLTIpLmdldFNlY29uZHMoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKC0x
LCBUaW1lVXRpbC5yZW1haW5kZXIoZDEsIGQyKS5nZXRTZWNvbmRzKCkpOwotICAgIC8vIDUgLyAo
LTIpID0gLTIsIHJlbWFpbmRlciA9IDEKLSAgICBkMSA9IFRpbWVVdGlsLnBhcnNlRHVyYXRpb24o
IjVzIik7Ci0gICAgZDIgPSBUaW1lVXRpbC5wYXJzZUR1cmF0aW9uKCItMnMiKTsKLSAgICBhc3Nl
cnRFcXVhbHMoLTIsIFRpbWVVdGlsLmRpdmlkZShkMSwgZDIpKTsKLSAgICBhc3NlcnRFcXVhbHMo
LTIsIFRpbWVVdGlsLmRpdmlkZShkMSwgLTIpLmdldFNlY29uZHMoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDEsIFRpbWVVdGlsLnJlbWFpbmRlcihkMSwgZDIpLmdldFNlY29uZHMoKSk7Ci0gIH0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvamF2YS91dGlsL3NyYy90ZXN0L3Byb3RvL2NvbS9nb29nbGUvcHJvdG9idWYv
dXRpbC9qc29uX3Rlc3QucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmEvdXRpbC9zcmMvdGVzdC9wcm90by9jb20vZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvanNvbl90ZXN0LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2ODZlZGM0MjIxODNkMzRkM2E2NzEzMGQxMTJmYTc2ZDliZjY1ODhlLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YS91dGlsL3NyYy90ZXN0L3By
b3RvL2NvbS9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3Rlc3QucHJvdG8KKysrIC9kZXYvbnVs
bApAQCAtMSwyMDEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsK
LQotcGFja2FnZSBqc29uX3Rlc3Q7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2ds
ZS5wcm90b2J1Zi51dGlsIjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJKc29uVGVz
dFByb3RvIjsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvYW55LnByb3RvIjsKLWltcG9ydCAi
Z29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvIjsKLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVm
L3RpbWVzdGFtcC5wcm90byI7Ci1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90
byI7Ci1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNrLnByb3RvIjsKLWltcG9ydCAi
Z29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90byI7Ci0KLW1lc3NhZ2UgVGVzdEFsbFR5cGVzIHsK
LSAgZW51bSBOZXN0ZWRFbnVtIHsKLSAgICBGT08gPSAwOwotICAgIEJBUiA9IDE7Ci0gICAgQkFa
ID0gMjsKLSAgfQotICBtZXNzYWdlIE5lc3RlZE1lc3NhZ2UgewotICAgIGludDMyIHZhbHVlID0g
MTsKLSAgfQotCi0gIGludDMyIG9wdGlvbmFsX2ludDMyID0gMTsKLSAgaW50NjQgb3B0aW9uYWxf
aW50NjQgPSAyOwotICB1aW50MzIgb3B0aW9uYWxfdWludDMyID0gMzsKLSAgdWludDY0IG9wdGlv
bmFsX3VpbnQ2NCA9IDQ7Ci0gIHNpbnQzMiBvcHRpb25hbF9zaW50MzIgPSA1OwotICBzaW50NjQg
b3B0aW9uYWxfc2ludDY0ID0gNjsKLSAgZml4ZWQzMiBvcHRpb25hbF9maXhlZDMyID0gNzsKLSAg
Zml4ZWQ2NCBvcHRpb25hbF9maXhlZDY0ID0gODsKLSAgc2ZpeGVkMzIgb3B0aW9uYWxfc2ZpeGVk
MzIgPSA5OwotICBzZml4ZWQ2NCBvcHRpb25hbF9zZml4ZWQ2NCA9IDEwOwotICBmbG9hdCBvcHRp
b25hbF9mbG9hdCA9IDExOwotICBkb3VibGUgb3B0aW9uYWxfZG91YmxlID0gMTI7Ci0gIGJvb2wg
b3B0aW9uYWxfYm9vbCA9IDEzOwotICBzdHJpbmcgb3B0aW9uYWxfc3RyaW5nID0gMTQ7Ci0gIGJ5
dGVzIG9wdGlvbmFsX2J5dGVzID0gMTU7Ci0gIE5lc3RlZE1lc3NhZ2Ugb3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UgPSAxODsKLSAgTmVzdGVkRW51bSBvcHRpb25hbF9uZXN0ZWRfZW51bSA9IDIxOwot
Ci0gIC8vIFJlcGVhdGVkCi0gIHJlcGVhdGVkIGludDMyIHJlcGVhdGVkX2ludDMyID0gMzE7Ci0g
IHJlcGVhdGVkIGludDY0IHJlcGVhdGVkX2ludDY0ID0gMzI7Ci0gIHJlcGVhdGVkIHVpbnQzMiBy
ZXBlYXRlZF91aW50MzIgPSAzMzsKLSAgcmVwZWF0ZWQgdWludDY0IHJlcGVhdGVkX3VpbnQ2NCA9
IDM0OwotICByZXBlYXRlZCBzaW50MzIgcmVwZWF0ZWRfc2ludDMyID0gMzU7Ci0gIHJlcGVhdGVk
IHNpbnQ2NCByZXBlYXRlZF9zaW50NjQgPSAzNjsKLSAgcmVwZWF0ZWQgZml4ZWQzMiByZXBlYXRl
ZF9maXhlZDMyID0gMzc7Ci0gIHJlcGVhdGVkIGZpeGVkNjQgcmVwZWF0ZWRfZml4ZWQ2NCA9IDM4
OwotICByZXBlYXRlZCBzZml4ZWQzMiByZXBlYXRlZF9zZml4ZWQzMiA9IDM5OwotICByZXBlYXRl
ZCBzZml4ZWQ2NCByZXBlYXRlZF9zZml4ZWQ2NCA9IDQwOwotICByZXBlYXRlZCBmbG9hdCByZXBl
YXRlZF9mbG9hdCA9IDQxOwotICByZXBlYXRlZCBkb3VibGUgcmVwZWF0ZWRfZG91YmxlID0gNDI7
Ci0gIHJlcGVhdGVkIGJvb2wgcmVwZWF0ZWRfYm9vbCA9IDQzOwotICByZXBlYXRlZCBzdHJpbmcg
cmVwZWF0ZWRfc3RyaW5nID0gNDQ7Ci0gIHJlcGVhdGVkIGJ5dGVzIHJlcGVhdGVkX2J5dGVzID0g
NDU7Ci0gIHJlcGVhdGVkIE5lc3RlZE1lc3NhZ2UgcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgPSA0
ODsKLSAgcmVwZWF0ZWQgTmVzdGVkRW51bSByZXBlYXRlZF9uZXN0ZWRfZW51bSA9IDUxOwotfQot
Ci1tZXNzYWdlIFRlc3RPbmVvZiB7Ci0gIG9uZW9mIG9uZW9mX2ZpZWxkIHsKLSAgICBpbnQzMiBv
bmVvZl9pbnQzMiA9IDE7Ci0gICAgVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2Ugb25lb2ZfbmVz
dGVkX21lc3NhZ2UgPSAyOwotICB9Ci19Ci0KLW1lc3NhZ2UgVGVzdE1hcCB7Ci0gIC8vIEluc3Rl
YWQgb2YgdGVzdGluZyBhbGwgY29tYmluYXRpb25zICh0b28gbWFueSksIHdlIG9ubHkgbWFrZSBz
dXJlIGFsbAotICAvLyB2YWxpZCB0eXBlcyBoYXZlIGJlZW4gdXNlZCBhdCBsZWFzdCBpbiBvbmUg
ZmllbGQgYXMga2V5IGFuZCBpbiBvbmUKLSAgLy8gZmllbGQgYXMgdmFsdWUuCi0gIG1hcDxpbnQz
MiwgaW50MzI+IGludDMyX3RvX2ludDMyX21hcCA9IDE7Ci0gIG1hcDxpbnQ2NCwgaW50MzI+IGlu
dDY0X3RvX2ludDMyX21hcCA9IDI7Ci0gIG1hcDx1aW50MzIsIGludDMyPiB1aW50MzJfdG9faW50
MzJfbWFwID0gMzsKLSAgbWFwPHVpbnQ2NCwgaW50MzI+IHVpbnQ2NF90b19pbnQzMl9tYXAgPSA0
OwotICBtYXA8c2ludDMyLCBpbnQzMj4gc2ludDMyX3RvX2ludDMyX21hcCA9IDU7Ci0gIG1hcDxz
aW50NjQsIGludDMyPiBzaW50NjRfdG9faW50MzJfbWFwID0gNjsKLSAgbWFwPGZpeGVkMzIsIGlu
dDMyPiBmaXhlZDMyX3RvX2ludDMyX21hcCA9IDc7Ci0gIG1hcDxmaXhlZDY0LCBpbnQzMj4gZml4
ZWQ2NF90b19pbnQzMl9tYXAgPSA4OwotICBtYXA8c2ZpeGVkMzIsIGludDMyPiBzZml4ZWQzMl90
b19pbnQzMl9tYXAgPSA5OwotICBtYXA8c2ZpeGVkNjQsIGludDMyPiBzZml4ZWQ2NF90b19pbnQz
Ml9tYXAgPSAxMDsKLSAgbWFwPGJvb2wsIGludDMyPiBib29sX3RvX2ludDMyX21hcCA9IDExOwot
ICBtYXA8c3RyaW5nLCBpbnQzMj4gc3RyaW5nX3RvX2ludDMyX21hcCA9IDEyOwotCi0gIG1hcDxp
bnQzMiwgaW50NjQ+IGludDMyX3RvX2ludDY0X21hcCA9IDEwMTsKLSAgbWFwPGludDMyLCB1aW50
MzI+IGludDMyX3RvX3VpbnQzMl9tYXAgPSAxMDI7Ci0gIG1hcDxpbnQzMiwgdWludDY0PiBpbnQz
Ml90b191aW50NjRfbWFwID0gMTAzOwotICBtYXA8aW50MzIsIHNpbnQzMj4gaW50MzJfdG9fc2lu
dDMyX21hcCA9IDEwNDsKLSAgbWFwPGludDMyLCBzaW50NjQ+IGludDMyX3RvX3NpbnQ2NF9tYXAg
PSAxMDU7Ci0gIG1hcDxpbnQzMiwgZml4ZWQzMj4gaW50MzJfdG9fZml4ZWQzMl9tYXAgPSAxMDY7
Ci0gIG1hcDxpbnQzMiwgZml4ZWQ2ND4gaW50MzJfdG9fZml4ZWQ2NF9tYXAgPSAxMDc7Ci0gIG1h
cDxpbnQzMiwgc2ZpeGVkMzI+IGludDMyX3RvX3NmaXhlZDMyX21hcCA9IDEwODsKLSAgbWFwPGlu
dDMyLCBzZml4ZWQ2ND4gaW50MzJfdG9fc2ZpeGVkNjRfbWFwID0gMTA5OwotICBtYXA8aW50MzIs
IGZsb2F0PiBpbnQzMl90b19mbG9hdF9tYXAgPSAxMTA7Ci0gIG1hcDxpbnQzMiwgZG91YmxlPiBp
bnQzMl90b19kb3VibGVfbWFwID0gMTExOwotICBtYXA8aW50MzIsIGJvb2w+IGludDMyX3RvX2Jv
b2xfbWFwID0gMTEyOwotICBtYXA8aW50MzIsIHN0cmluZz4gaW50MzJfdG9fc3RyaW5nX21hcCA9
IDExMzsKLSAgbWFwPGludDMyLCBieXRlcz4gaW50MzJfdG9fYnl0ZXNfbWFwID0gMTE0OwotICBt
YXA8aW50MzIsIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlPiBpbnQzMl90b19tZXNzYWdlX21h
cCA9IDExNTsKLSAgbWFwPGludDMyLCBUZXN0QWxsVHlwZXMuTmVzdGVkRW51bT4gaW50MzJfdG9f
ZW51bV9tYXAgPSAxMTY7Ci19Ci0KLW1lc3NhZ2UgVGVzdFdyYXBwZXJzIHsKLSAgZ29vZ2xlLnBy
b3RvYnVmLkludDMyVmFsdWUgaW50MzJfdmFsdWUgPSAxOwotICBnb29nbGUucHJvdG9idWYuVUlu
dDMyVmFsdWUgdWludDMyX3ZhbHVlID0gMjsKLSAgZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUg
aW50NjRfdmFsdWUgPSAzOwotICBnb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUgdWludDY0X3Zh
bHVlID0gNDsKLSAgZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWUgZmxvYXRfdmFsdWUgPSA1Owot
ICBnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUgZG91YmxlX3ZhbHVlID0gNjsKLSAgZ29vZ2xl
LnByb3RvYnVmLkJvb2xWYWx1ZSBib29sX3ZhbHVlID0gNzsKLSAgZ29vZ2xlLnByb3RvYnVmLlN0
cmluZ1ZhbHVlIHN0cmluZ192YWx1ZSA9IDg7Ci0gIGdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVl
IGJ5dGVzX3ZhbHVlID0gOTsKLX0KLQotbWVzc2FnZSBUZXN0VGltZXN0YW1wIHsKLSAgZ29vZ2xl
LnByb3RvYnVmLlRpbWVzdGFtcCB0aW1lc3RhbXBfdmFsdWUgPSAxOwotfQotCi1tZXNzYWdlIFRl
c3REdXJhdGlvbiB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiBkdXJhdGlvbl92YWx1ZSA9
IDE7Ci19Ci0KLW1lc3NhZ2UgVGVzdEZpZWxkTWFzayB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5GaWVs
ZE1hc2sgZmllbGRfbWFza192YWx1ZSA9IDE7Ci19Ci0KLW1lc3NhZ2UgVGVzdFN0cnVjdCB7Ci0g
IGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qgc3RydWN0X3ZhbHVlID0gMTsKLSAgZ29vZ2xlLnByb3Rv
YnVmLlZhbHVlIHZhbHVlID0gMjsKLSAgZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSBsaXN0X3Zh
bHVlID0gMzsKLX0KLQotbWVzc2FnZSBUZXN0QW55IHsKLSAgZ29vZ2xlLnByb3RvYnVmLkFueSBh
bnlfdmFsdWUgPSAxOwotfQotCi1tZXNzYWdlIFRlc3RDdXN0b21Kc29uTmFtZSB7Ci0gIGludDMy
IHZhbHVlID0gMSBbanNvbl9uYW1lID0gIkB2YWx1ZSJdOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFu
by9SRUFETUUubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2phdmFuYW5vL1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTE5YjkwYjFjMjc1MDI0YzY2OGY3NGUyZTlkOGViMGJiYzQwMjNjZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL1JFQURNRS5tZAor
KysgL2Rldi9udWxsCkBAIC0xLDM5OCArMCwwIEBACi1Qcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotCi1bIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlz
LWNpLm9yZy9nb29nbGUvcHJvdG9idWYuc3ZnP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL3RyYXZp
cy1jaS5vcmcvZ29vZ2xlL3Byb3RvYnVmKQotCi1Db3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgot
Ci1UaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgSmF2YSBQcm90b2NvbCBCdWZmZXJzIE5hbm8g
cnVudGltZSBsaWJyYXJ5LgotCi1JbnN0YWxsYXRpb24gLSBXaXRoIE1hdmVuCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBQcm90b2NvbCBCdWZmZXJzIGJ1aWxkIGlzIG1hbmFnZWQg
dXNpbmcgTWF2ZW4uICBJZiB5b3Ugd291bGQKLXJhdGhlciBidWlsZCB3aXRob3V0IE1hdmVuLCBz
ZWUgYmVsb3cuCi0KLTEpIEluc3RhbGwgQXBhY2hlIE1hdmVuIGlmIHlvdSBkb24ndCBoYXZlIGl0
OgotCi0gICAgIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLwotCi0yKSBCdWlsZCB0aGUgQysrIGNv
ZGUsIG9yIG9idGFpbiBhIGJpbmFyeSBkaXN0cmlidXRpb24gb2YgcHJvdG9jLiAgSWYKLSAgIHlv
dSBpbnN0YWxsIGEgYmluYXJ5IGRpc3RyaWJ1dGlvbiwgbWFrZSBzdXJlIHRoYXQgaXQgaXMgdGhl
IHNhbWUKLSAgIHZlcnNpb24gYXMgdGhpcyBwYWNrYWdlLiAgSWYgaW4gZG91YnQsIHJ1bjoKLQot
ICAgICAkIHByb3RvYyAtLXZlcnNpb24KLQotICAgWW91IHdpbGwgbmVlZCB0byBwbGFjZSB0aGUg
cHJvdG9jIGV4ZWN1dGFibGUgaW4gLi4vc3JjLiAgKElmIHlvdQotICAgYnVpbHQgaXQgeW91cnNl
bGYsIGl0IHNob3VsZCBhbHJlYWR5IGJlIHRoZXJlLikKLQotMykgUnVuIHRoZSB0ZXN0czoKLQot
ICAgICAkIG12biB0ZXN0Ci0KLSAgIElmIHNvbWUgdGVzdHMgZmFpbCwgdGhpcyBsaWJyYXJ5IG1h
eSBub3Qgd29yayBjb3JyZWN0bHkgb24geW91cgotICAgc3lzdGVtLiAgQ29udGludWUgYXQgeW91
ciBvd24gcmlzay4KLQotNCkgSW5zdGFsbCB0aGUgbGlicmFyeSBpbnRvIHlvdXIgTWF2ZW4gcmVw
b3NpdG9yeToKLQotICAgICAkIG12biBpbnN0YWxsCi0KLTUpIElmIHlvdSBkbyBub3QgdXNlIE1h
dmVuIHRvIG1hbmFnZSB5b3VyIG93biBidWlsZCwgeW91IGNhbiBidWlsZCBhCi0gICAuamFyIGZp
bGUgdG8gdXNlOgotCi0gICAgICQgbXZuIHBhY2thZ2UKLQotICAgVGhlIC5qYXIgd2lsbCBiZSBw
bGFjZWQgaW4gdGhlICJ0YXJnZXQiIGRpcmVjdG9yeS4KLQotSW5zdGFsbGF0aW9uIC0gV2l0aG91
dCBNYXZlbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiB5b3Ugd291bGQgcmF0
aGVyIG5vdCBpbnN0YWxsIE1hdmVuIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5LCB5b3UgbWF5Ci1mb2xs
b3cgdGhlc2UgaW5zdHJ1Y3Rpb25zIGluc3RlYWQuICBOb3RlIHRoYXQgdGhlc2UgaW5zdHJ1Y3Rp
b25zIHNraXAKLXJ1bm5pbmcgdW5pdCB0ZXN0cy4KLQotMSkgQnVpbGQgdGhlIEMrKyBjb2RlLCBv
ciBvYnRhaW4gYSBiaW5hcnkgZGlzdHJpYnV0aW9uIG9mIHByb3RvYy4gIElmCi0gICB5b3UgaW5z
dGFsbCBhIGJpbmFyeSBkaXN0cmlidXRpb24sIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIHRoZSBzYW1l
Ci0gICB2ZXJzaW9uIGFzIHRoaXMgcGFja2FnZS4gIElmIGluIGRvdWJ0LCBydW46Ci0KLSAgICAg
JCBwcm90b2MgLS12ZXJzaW9uCi0KLSAgIElmIHlvdSBidWlsdCB0aGUgQysrIGNvZGUgd2l0aG91
dCBpbnN0YWxsaW5nLCB0aGUgY29tcGlsZXIgYmluYXJ5Ci0gICBzaG91bGQgYmUgbG9jYXRlZCBp
biAuLi9zcmMuCi0KLTIpIEludm9rZSBwcm90b2MgdG8gYnVpbGQgRGVzY3JpcHRvclByb3Rvcy5q
YXZhOgotCi0gICAgICQgcHJvdG9jIC0tamF2YV9vdXQ9c3JjL21haW4vamF2YSAtSS4uL3NyYyBc
Ci0gICAgICAgICAuLi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8KLQotMykg
Q29tcGlsZSB0aGUgY29kZSBpbiBzcmMvbWFpbi9qYXZhIHVzaW5nIHdoYXRldmVyIG1lYW5zIHlv
dSBwcmVmZXIuCi0KLTQpIEluc3RhbGwgdGhlIGNsYXNzZXMgd2hlcmV2ZXIgeW91IHByZWZlci4K
LQotTmFubyB2ZXJzaW9uCi0tLS0tLS0tLS0tLS0KLQotSmF2YU5hbm8gaXMgYSBzcGVjaWFsIGNv
ZGUgZ2VuZXJhdG9yIGFuZCBydW50aW1lIGxpYnJhcnkgZGVzaWduZWQgc3BlY2lhbGx5IGZvcgot
cmVzb3VyY2UtcmVzdHJpY3RlZCBzeXN0ZW1zLCBsaWtlIEFuZHJvaWQuIEl0IGlzIHZlcnkgcmVz
b3VyY2UtZnJpZW5kbHkgaW4gYm90aAotdGhlIGFtb3VudCBvZiBjb2RlIGFuZCB0aGUgcnVudGlt
ZSBvdmVyaGVhZC4gSGVyZSBpcyBhbiBvdmVydmlldyBvZiBKYXZhTmFubwotZmVhdHVyZXMgY29t
cGFyZWQgd2l0aCB0aGUgb2ZmaWNpYWwgSmF2YSBwcm90b2J1ZjoKLQotLSBObyBkZXNjcmlwdG9y
cyBvciBtZXNzYWdlIGJ1aWxkZXJzLgotLSBBbGwgbWVzc2FnZXMgYXJlIG11dGFibGU7IGZpZWxk
cyBhcmUgcHVibGljIEphdmEgZmllbGRzLgotLSBGb3Igb3B0aW9uYWwgZmllbGRzIG9ubHksIGVu
Y2Fwc3VsYXRpb24gYmVoaW5kIHNldHRlci9nZXR0ZXIvaGF6emVyLwotICBjbGVhcmVyIGZ1bmN0
aW9ucyBpcyBvcHQtaW4sIHdoaWNoIHByb3ZpZGUgcHJvcGVyICdoYXMnIHN0YXRlIHN1cHBvcnQu
Ci0tIEZvciBwcm90bzIsIGlmIG5vdCBvcHRlZCBpbiwgaGFzIHN0YXRlIChmaWVsZCBwcmVzZW5j
ZSkgaXMgbm90IGF2YWlsYWJsZS4KLSAgU2VyaWFsaXphdGlvbiBvdXRwdXRzIGFsbCBmaWVsZHMg
bm90IGVxdWFsIHRvIHRoZWlyIGRlZmF1bHRzCi0gIChzZWUgaW1wb3J0YW50IGltcGxpY2F0aW9u
cyBiZWxvdykuCi0gIFRoZSBiZWhhdmlvciBpcyBjb25zaXN0ZW50IHdpdGggcHJvdG8zIHNlbWFu
dGljcy4KLS0gUmVxdWlyZWQgZmllbGRzIChwcm90bzIgb25seSkgYXJlIGFsd2F5cyBzZXJpYWxp
emVkLgotLSBFbnVtIGNvbnN0YW50cyBhcmUgaW50ZWdlcnM7IHByb3RlY3Rpb24gYWdhaW5zdCBp
bnZhbGlkIHZhbHVlcyBvbmx5Ci0gIHdoZW4gcGFyc2luZyBmcm9tIHRoZSB3aXJlLgotLSBFbnVt
IGNvbnN0YW50cyBjYW4gYmUgZ2VuZXJhdGVkIGludG8gY29udGFpbmVyIGludGVyZmFjZXMgYmVh
cmluZwotICB0aGUgZW51bSdzIG5hbWUgKHNvIHRoZSByZWZlcmVuY2luZyBjb2RlIGlzIGluIEph
dmEgc3R5bGUpLgotLSBDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8gY2FuIG9ubHkgdGFrZSBieXRl
W10gKG5vdCBJbnB1dFN0cmVhbSkuCi0tIFNpbWlsYXJseSBDb2RlZE91dHB1dEJ5dGVCdWZmZXJO
YW5vIGNhbiBvbmx5IHdyaXRlIHRvIGJ5dGVbXS4KLS0gUmVwZWF0ZWQgZmllbGRzIGFyZSBpbiBh
cnJheXMsIG5vdCBBcnJheUxpc3Qgb3IgVmVjdG9yLiBOdWxsIGFycmF5Ci0gIGVsZW1lbnRzIGFy
ZSBhbGxvd2VkIGFuZCBzaWxlbnRseSBpZ25vcmVkLgotLSBGdWxsIHN1cHBvcnQgZm9yIHNlcmlh
bGl6aW5nL2Rlc2VyaWFsaXppbmcgcmVwZWF0ZWQgcGFja2VkIGZpZWxkcy4KLS0gU3VwcG9ydCAg
ZXh0ZW5zaW9ucyAoaW4gcHJvdG8yKS4KLS0gVW5zZXQgbWVzc2FnZXMvZ3JvdXBzIGFyZSBudWxs
LCBub3QgYW4gaW1tdXRhYmxlIGVtcHR5IGRlZmF1bHQKLSAgaW5zdGFuY2UuCi0tIHRvQnl0ZUFy
cmF5KC4uLikgYW5kIG1lcmdlRnJvbSguLi4pIGFyZSBub3cgc3RhdGljIGZ1bmN0aW9ucyBvZgot
ICBNZXNzYWdlTmFuby4KLS0gVGhlICdieXRlcycgdHlwZSB0cmFuc2xhdGVzIHRvIHRoZSBKYXZh
IHR5cGUgYnl0ZVtdLgotCi1UaGUgZ2VuZXJhdGVkIG1lc3NhZ2VzIGFyZSBub3QgdGhyZWFkLXNh
ZmUgZm9yIHdyaXRlcywgYnV0IG1heSBiZQotdXNlZCBzaW11bHRhbmVvdXNseSBmcm9tIG11bHRp
cGxlIHRocmVhZHMgaW4gYSByZWFkLW9ubHkgbWFubmVyLgotSW4gb3RoZXIgd29yZHMsIGFuIGFw
cHJvcHJpYXRlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gKHN1Y2ggYXMKLWEgUmVhZFdyaXRl
TG9jaykgbXVzdCBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0IGEgbWVzc2FnZSwgaXRzCi1hbmNlc3Rv
cnMsIGFuZCBkZXNjZW5kYW50cyBhcmUgbm90IGFjY2Vzc2VkIGJ5IGFueSBvdGhlciB0aHJlYWRz
Ci13aGlsZSB0aGUgbWVzc2FnZSBpcyBiZWluZyBtb2RpZmllZC4gRmllbGQgcmVhZHMsIGdldHRl
ciBtZXRob2RzCi0oYnV0IG5vdCBnZXRFeHRlbnNpb24oLi4uKSksIHRvQnl0ZUFycmF5KC4uLiks
IHdyaXRlVG8oLi4uKSwKLWdldENhY2hlZFNpemUoKSwgYW5kIGdldFNlcmlhbGl6ZWRTaXplKCkg
YXJlIGFsbCBjb25zaWRlcmVkIHJlYWQtb25seQotb3BlcmF0aW9ucy4KLQotSU1QT1JUQU5UOiBJ
ZiB5b3UgaGF2ZSBmaWVsZHMgd2l0aCBkZWZhdWx0cyBhbmQgb3B0IG91dCBvZiBhY2Nlc3NvcnMK
LQotSG93IGZpZWxkcyB3aXRoIGRlZmF1bHRzIGFyZSBzZXJpYWxpemVkIGhhcyBjaGFuZ2VkLiBC
ZWNhdXNlIHdlIGRvbid0Ci1rZWVwICJoYXMiIHN0YXRlLCBhbnkgZmllbGQgZXF1YWwgdG8gaXRz
IGRlZmF1bHQgaXMgYXNzdW1lZCB0byBiZSBub3QKLXNldCBhbmQgdGhlcmVmb3JlIGlzIG5vdCBz
ZXJpYWxpemVkLiBDb25zaWRlciB0aGUgc2l0dWF0aW9uIHdoZXJlIHdlCi1jaGFuZ2UgdGhlIGRl
ZmF1bHQgdmFsdWUgb2YgYSBmaWVsZC4gU2VuZGVycyBjb21waWxlZCBhZ2FpbnN0IGFuIG9sZGVy
Ci12ZXJzaW9uIG9mIHRoZSBwcm90byBjb250aW51ZSB0byBtYXRjaCBhZ2FpbnN0IHRoZSBvbGQg
ZGVmYXVsdCwgYW5kCi1kb24ndCBzZW5kIHZhbHVlcyB0byB0aGUgcmVjZWl2ZXIgZXZlbiB0aG91
Z2ggdGhlIHJlY2VpdmVyIGFzc3VtZXMgdGhlCi1uZXcgZGVmYXVsdCB2YWx1ZS4gVGhlcmVmb3Jl
LCB0aGluayBjYXJlZnVsbHkgYWJvdXQgdGhlIGltcGxpY2F0aW9ucwotb2YgY2hhbmdpbmcgdGhl
IGRlZmF1bHQgdmFsdWUuIEFsdGVybmF0aXZlbHksIHR1cm4gb24gYWNjZXNzb3JzIGFuZAotZW5q
b3kgdGhlIGJlbmVmaXQgb2YgdGhlIGV4cGxpY2l0IGhhcygpIGNoZWNrcy4KLQotSU1QT1JUQU5U
OiBJZiB5b3UgaGF2ZSAiYnl0ZXMiIGZpZWxkcyB3aXRoIG5vbi1lbXB0eSBkZWZhdWx0cwotCi1C
ZWNhdXNlIHRoZSBieXRlIGJ1ZmZlciBpcyBub3cgb2YgbXV0YWJsZSB0eXBlIGJ5dGVbXSwgdGhl
IGRlZmF1bHQKLXN0YXRpYyBmaW5hbCBjYW5ub3QgYmUgZXhwb3NlZCB0aHJvdWdoIGEgcHVibGlj
IGZpZWxkLiBFYWNoIHRpbWUgYQotbWVzc2FnZSdzIGNvbnN0cnVjdG9yIG9yIGNsZWFyKCkgZnVu
Y3Rpb24gaXMgY2FsbGVkLCB0aGUgZGVmYXVsdCB2YWx1ZQotKGtlcHQgaW4gYSBwcml2YXRlIGJ5
dGVbXSkgaXMgY2xvbmVkLiBUaGlzIGNhdXNlcyBhIHNtYWxsIG1lbW9yeQotcGVuYWx0eS4gVGhp
cyBpcyBub3QgYSBwcm9ibGVtIGlmIHRoZSBmaWVsZCBoYXMgbm8gZGVmYXVsdCBvciBpcyBhbgot
ZW1wdHkgZGVmYXVsdC4KLQotTmFubyBHZW5lcmF0b3Igb3B0aW9ucwotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1gYGAKLWphdmFfcGFja2FnZSAgICAgICAgICAgLT4gPGZpbGUtbmFtZT58PHBh
Y2thZ2UtbmFtZT4KLWphdmFfb3V0ZXJfY2xhc3NuYW1lICAgLT4gPGZpbGUtbmFtZT58PHBhY2th
Z2UtbmFtZT4KLWphdmFfbXVsdGlwbGVfZmlsZXMgICAgLT4gdHJ1ZSBvciBmYWxzZQotamF2YV9u
YW5vX2dlbmVyYXRlX2hhcyAtPiB0cnVlIG9yIGZhbHNlIFtERVBSRUNBVEVEXQotb3B0aW9uYWxf
ZmllbGRfc3R5bGUgICAtPiBkZWZhdWx0IG9yIGFjY2Vzc29ycwotZW51bV9zdHlsZSAgICAgICAg
ICAgICAtPiBjIG9yIGphdmEKLWlnbm9yZV9zZXJ2aWNlcyAgICAgICAgLT4gdHJ1ZSBvciBmYWxz
ZQotcGFyY2VsYWJsZV9tZXNzYWdlcyAgICAtPiB0cnVlIG9yIGZhbHNlCi1nZW5lcmF0ZV9pbnRk
ZWZzICAgICAgIC0+IHRydWUgb3IgZmFsc2UKLWBgYAotCi0qKmphdmFfcGFja2FnZT1cPGZpbGUt
bmFtZVw+fFw8cGFja2FnZS1uYW1lXD4qKiAobm8gZGVmYXVsdCkKLQotICBUaGlzIGFsbG93cyBv
dmVycmlkaW5nIHRoZSAnamF2YV9wYWNrYWdlJyBvcHRpb24gdmFsdWUKLSAgZm9yIHRoZSBnaXZl
biBmaWxlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gVXNlIG11bHRpcGxlCi0gIGphdmFfcGFja2Fn
ZSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBvcHRpb24gZm9yIG11bHRpcGxlCi0gIGZpbGVzLiBU
aGUgZmluYWwgSmF2YSBwYWNrYWdlIGZvciBlYWNoIGZpbGUgaXMgdGhlIHZhbHVlCi0gIG9mIHRo
aXMgY29tbWFuZCBsaW5lIG9wdGlvbiBpZiBwcmVzZW50LCBvciB0aGUgdmFsdWUgb2YKLSAgdGhl
IHNhbWUgb3B0aW9uIGRlZmluZWQgaW4gdGhlIGZpbGUgaWYgcHJlc2VudCwgb3IgdGhlCi0gIHBy
b3RvIHBhY2thZ2UgaWYgcHJlc2VudCwgb3IgdGhlIGRlZmF1bHQgSmF2YSBwYWNrYWdlLgotCi0q
KmphdmFfb3V0ZXJfY2xhc3NuYW1lPVw8ZmlsZS1uYW1lXD58XDxvdXRlci1jbGFzc25hbWVcPioq
IChubyBkZWZhdWx0KQotCi0gIFRoaXMgYWxsb3dzIG92ZXJyaWRpbmcgdGhlICdqYXZhX291dGVy
X2NsYXNzbmFtZScgb3B0aW9uCi0gIGZvciB0aGUgZ2l2ZW4gZmlsZSBmcm9tIHRoZSBjb21tYW5k
IGxpbmUuIFVzZSBtdWx0aXBsZQotICBqYXZhX291dGVyX2NsYXNzbmFtZSBvcHRpb25zIHRvIG92
ZXJyaWRlIHRoZSBvcHRpb24gZm9yCi0gIG11bHRpcGxlIGZpbGVzLiBUaGUgZmluYWwgSmF2YSBv
dXRlciBjbGFzcyBuYW1lIGZvciBlYWNoCi0gIGZpbGUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgY29t
bWFuZCBsaW5lIG9wdGlvbiBpZiBwcmVzZW50LAotICBvciB0aGUgdmFsdWUgb2YgdGhlIHNhbWUg
b3B0aW9uIGRlZmluZWQgaW4gdGhlIGZpbGUgaWYKLSAgcHJlc2VudCwgb3IgdGhlIGZpbGUgbmFt
ZSBjb252ZXJ0ZWQgdG8gQ2FtZWxDYXNlLiBUaGlzCi0gIG91dGVyIGNsYXNzIHdpbGwgbmVzdCBh
bGwgY2xhc3NlcyBhbmQgaW50ZWdlciBjb25zdGFudHMKLSAgZ2VuZXJhdGVkIGZyb20gZmlsZS1z
Y29wZSBtZXNzYWdlcyBhbmQgZW51bXMuCi0KLSoqamF2YV9tdWx0aXBsZV9maWxlcz17dHJ1ZSxm
YWxzZX0qKiAobm8gZGVmYXVsdCkKLQotICBUaGlzIGFsbG93cyBvdmVycmlkaW5nIHRoZSAnamF2
YV9tdWx0aXBsZV9maWxlcycgb3B0aW9uCi0gIGluIGFsbCBzb3VyY2UgZmlsZXMgYW5kIHRoZWly
IGltcG9ydGVkIGZpbGVzIGZyb20gdGhlCi0gIGNvbW1hbmQgbGluZS4gVGhlIGZpbmFsIHZhbHVl
IG9mIHRoaXMgb3B0aW9uIGZvciBlYWNoCi0gIGZpbGUgaXMgdGhlIHZhbHVlIGRlZmluZWQgaW4g
dGhpcyBjb21tYW5kIGxpbmUgb3B0aW9uLCBvcgotICB0aGUgdmFsdWUgb2YgdGhlIHNhbWUgb3B0
aW9uIGRlZmluZWQgaW4gdGhlIGZpbGUgaWYKLSAgcHJlc2VudCwgb3IgZmFsc2UuIFRoaXMgc3Bl
Y2lmaWVzIHdoZXRoZXIgdG8gZ2VuZXJhdGUKLSAgcGFja2FnZS1sZXZlbCBjbGFzc2VzIGZvciB0
aGUgZmlsZS1zY29wZSBtZXNzYWdlcyBpbiB0aGUKLSAgc2FtZSBKYXZhIHBhY2thZ2UgYXMgdGhl
IG91dGVyIGNsYXNzIChpbnN0ZWFkIG9mIG5lc3RlZAotICBjbGFzc2VzIGluIHRoZSBvdXRlciBj
bGFzcykuIEZpbGUtc2NvcGUgZW51bSBjb25zdGFudHMKLSAgYXJlIHN0aWxsIGdlbmVyYXRlZCBh
cyBpbnRlZ2VyIGNvbnN0YW50cyBpbiB0aGUgb3V0ZXIKLSAgY2xhc3MuIFRoaXMgYWZmZWN0cyB0
aGUgZnVsbHkgcXVhbGlmaWVkIHJlZmVyZW5jZXMgaW4gdGhlCi0gIEphdmEgY29kZS4gTk9URTog
YmVjYXVzZSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbgotICBvdmVycmlkZXMgdGhlIHZhbHVlIGZv
ciBhbGwgZmlsZXMgYW5kIHRoZWlyIGltcG9ydGVkCi0gIGZpbGVzLCB1c2luZyB0aGlzIG9wdGlv
biBpbmNvbnNpc3RlbnRseSBtYXkgcmVzdWx0IGluCi0gIGluY29ycmVjdCByZWZlcmVuY2VzIHRv
IHRoZSBpbXBvcnRlZCBtZXNzYWdlcyBhbmQgZW51bQotICBjb25zdGFudHMuCi0KLSoqamF2YV9u
YW5vX2dlbmVyYXRlX2hhcz17dHJ1ZSxmYWxzZX0qKiAoZGVmYXVsdDogZmFsc2UpCi0KLSAgREVQ
UkVDQVRFRC4gVXNlIG9wdGlvbmFsX2ZpZWxkX3N0eWxlPWFjY2Vzc29ycy4KLQotICBJZiB0cnVl
LCBnZW5lcmF0ZXMgYSBwdWJsaWMgYm9vbGVhbiB2YXJpYWJsZSBoYXNcPGZpZWxkbmFtZVw+Ci0g
IGFjY29tcGFueWluZyBlYWNoIG9wdGlvbmFsIG9yIHJlcXVpcmVkIGZpZWxkIChub3QgcHJlc2Vu
dCBmb3IKLSAgcmVwZWF0ZWQgZmllbGRzLCBncm91cHMgb3IgbWVzc2FnZXMpLiBJdCBpcyBzZXQg
dG8gZmFsc2UgaW5pdGlhbGx5Ci0gIGFuZCB1cG9uIGNsZWFyKCkuIElmIHBhcnNlRnJvbSguLi4p
IHJlYWRzIHRoZSBmaWVsZCBmcm9tIHRoZSB3aXJlLAotICBpdCBpcyBzZXQgdG8gdHJ1ZS4gVGhp
cyBpcyBhIHdheSBmb3IgY2xpZW50cyB0byBpbnNwZWN0IHRoZSAiaGFzIgotICB2YWx1ZSB1cG9u
IHBhcnNlLiBJZiBpdCBpcyBzZXQgdG8gdHJ1ZSwgd3JpdGVUbyguLi4pIHdpbGwgQUxXQVlTCi0g
IG91dHB1dCB0aGF0IGZpZWxkIChldmVuIGlmIGZpZWxkIHZhbHVlIGlzIGVxdWFsIHRvIGl0cwot
ICBkZWZhdWx0KS4KLQotICBJTVBPUlRBTlQ6IFRoaXMgb3B0aW9uIGNvc3RzIGFuIGV4dHJhIDQg
Ynl0ZXMgcGVyIHByaW1pdGl2ZSBmaWVsZCBpbgotICB0aGUgbWVzc2FnZS4gVGhpbmsgY2FyZWZ1
bGx5IGFib3V0IHdoZXRoZXIgeW91IHJlYWxseSBuZWVkIHRoaXMuIEluCi0gIG1hbnkgY2FzZXMg
cmVhZGluZyB0aGUgZGVmYXVsdCB3b3JrcyBhbmQgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUKLSAg
ZmllbGQgd2FzIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUgaXMgaXJyZWxldmFudC4KLQotKipvcHRp
b25hbF9maWVsZF9zdHlsZT17ZGVmYXVsdCxhY2Nlc3NvcnMscmVmdHlwZXN9KiogKGRlZmF1bHQ6
IGRlZmF1bHQpCi0KLSAgRGVmaW5lcyB0aGUgc3R5bGUgb2YgdGhlIGdlbmVyYXRlZCBjb2RlIGZv
ciBmaWVsZHMuCi0KLSAgKiBkZWZhdWx0Ci0KLSAgSW4gdGhlIGRlZmF1bHQgc3R5bGUsIG9wdGlv
bmFsIGZpZWxkcyB0cmFuc2xhdGUgaW50byBwdWJsaWMgbXV0YWJsZQotICBKYXZhIGZpZWxkcywg
YW5kIHRoZSBzZXJpYWxpemF0aW9uIHByb2Nlc3MgaXMgYXMgZGlzY3Vzc2VkIGluIHRoZQotICAi
SU1QT1JUQU5UIiBzZWN0aW9uIGFib3ZlLgotCi0gICogYWNjZXNzb3JzCi0KLSAgV2hlbiBzZXQg
dG8gJ2FjY2Vzc29ycycsIGVhY2ggb3B0aW9uYWwgZmllbGQgaXMgZW5jYXBzdWxhdGVkIGJlaGlu
ZAotICA0IGFjY2Vzc29ycywgbmFtZWx5IGdldFw8ZmllbGRuYW1lXD4oKSwgc2V0XDxmaWVsZG5h
bWVcPigpLCBoYXNcPGZpZWxkbmFtZVw+KCkKLSAgYW5kIGNsZWFyXDxmaWVsZG5hbWVcPigpIG1l
dGhvZHMsIHdpdGggdGhlIHN0YW5kYXJkIHNlbWFudGljcy4gVGhlIGhhenplcidzCi0gIHJldHVy
biB2YWx1ZSBkZXRlcm1pbmVzIHdoZXRoZXIgYSBmaWVsZCBpcyBzZXJpYWxpemVkLCBzbyB0aGlz
IHN0eWxlIGlzCi0gIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIHNlcmlhbGl6ZSBhIGZpZWxkIHdp
dGggdGhlIGRlZmF1bHQgdmFsdWUsIG9yIGNoZWNrCi0gIGlmIGEgZmllbGQgaGFzIGJlZW4gZXhw
bGljaXRseSBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgd2lyZS4KLQotICBJbiB0
aGUgJ2FjY2Vzc29ycycgc3R5bGUsIHJlcXVpcmVkIGFuZCBuZXN0ZWQgbWVzc2FnZSBmaWVsZHMg
YXJlIHN0aWxsCi0gIHRyYW5zbGF0ZWQgdG8gb25lIHB1YmxpYyBtdXRhYmxlIEphdmEgZmllbGQg
ZWFjaCwgcmVwZWF0ZWQgZmllbGRzIGFyZSBzdGlsbAotICB0cmFuc2xhdGVkIHRvIGFycmF5cy4g
Tm8gYWNjZXNzb3JzIGFyZSBnZW5lcmF0ZWQgZm9yIHRoZW0uCi0KLSAgSU1QT1JUQU5UOiBXaGVu
IHVzaW5nIHRoZSAnYWNjZXNzb3JzJyBzdHlsZSwgUHJvR3VhcmQgc2hvdWxkIGFsd2F5cwotICBi
ZSBlbmFibGVkIHdpdGggb3B0aW1pemF0aW9uIChkb24ndCB1c2UgLWRvbnRvcHRpbWl6ZSkgYW5k
IGFsbG93aW5nCi0gIGFjY2VzcyBtb2RpZmljYXRpb24gKHVzZSAtYWxsb3dhY2Nlc3Ntb2RpZmlj
YXRpb24pLiBUaGlzIHJlbW92ZXMgdGhlCi0gIHVudXNlZCBhY2Nlc3NvcnMgYW5kIG1heWJlIGlu
bGluZSB0aGUgcmVzdCBhdCB0aGUgY2FsbCBzaXRlcywKLSAgcmVkdWNpbmcgdGhlIGZpbmFsIGNv
ZGUgc2l6ZS4KLSAgVE9ETyhtYXh0cm95KTogZmluZCBQcm9HdWFyZCBjb25maWcgdGhhdCB3b3Vs
ZCB3b3JrIHRoZSBiZXN0LgotCi0gICogcmVmdHlwZXMKLQotICBXaGVuIHNldCB0byAncmVmdHlw
ZXMnLCBlYWNoIHByb3RvIGZpZWxkIGlzIGdlbmVyYXRlZCBhcyBhIHB1YmxpYyBKYXZhCi0gIGZp
ZWxkLiBGb3IgcHJpbWl0aXZlIHR5cGVzLCB0aGVzZSBmaWVsZHMgdXNlIHRoZSBKYXZhIHJlZmVy
ZW5jZSB0eXBlcwotICBzdWNoIGFzIGphdmEubGFuZy5JbnRlZ2VyIGluc3RlYWQgb2YgcHJpbWl0
aXZlIHR5cGVzIHN1Y2ggYXMgaW50LgotCi0gIEluIHRoZSAncmVmdHlwZXMnIHN0eWxlLCBmaWVs
ZHMgYXJlIGluaXRpYWxpemVkIHRvIG51bGwgKG9yIGVtcHR5Ci0gIGFycmF5cyBmb3IgcmVwZWF0
ZWQgZmllbGRzKSwgYW5kIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYXZhaWxhYmxlLgot
ICBUaGV5IGFyZSBzZXJpYWxpemVkIG92ZXIgdGhlIHdpcmUgYmFzZWQgb24gZXF1YWxpdHkgdG8g
bnVsbC4KLQotICBUaGUgJ3JlZnR5cGVzJyBtb2RlIGhhcyBzb21lIGFkZGl0aW9uYWwgY29zdCBk
dWUgdG8gYXV0b2JveGluZyBhbmQgdXNhZ2UKLSAgb2YgcmVmZXJlbmNlIHR5cGVzLiBJbiBwcmFj
dGljZSwgbWFueSBib3hlZCB0eXBlcyBhcmUgY2FjaGVkLCBhbmQgc28gZG9uJ3QKLSAgcmVzdWx0
IGluIG9iamVjdCBjcmVhdGlvbi4gSG93ZXZlciwgcmVmZXJlbmNlcyBkbyB0YWtlIHNsaWdodGx5
IG1vcmUgbWVtb3J5Ci0gIHRoYW4gcHJpbWl0aXZlcy4KLQotICBUaGUgJ3JlZnR5cGVzJyBtb2Rl
IGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gc2VyaWFsaXplIGZpZWxkcwot
ICB3aXRoIGRlZmF1bHQgdmFsdWVzLCBvciBjaGVjayBpZiBhIGZpZWxkIGhhcyBiZWVuIGV4cGxp
Y2l0bHkgc2V0IHRvIHRoZQotICBkZWZhdWx0IG92ZXIgdGhlIHdpcmUgd2l0aG91dCBwYXlpbmcg
dGhlIGV4dHJhIG1ldGhvZCBjb3N0IG9mIHRoZQotICAnYWNjZXNzb3JzJyBtb2RlLgotCi0gIE5v
dGUgdGhhdCBpZiB5b3UgYXR0ZW1wdCB0byB3cml0ZSBudWxsIHRvIGEgcmVxdWlyZWQgZmllbGQg
aW4gdGhlIHJlZnR5cGVzCi0gIG1vZGUsIHNlcmlhbGl6YXRpb24gb2YgdGhlIHByb3RvIHdpbGwg
Y2F1c2UgYSBOdWxsUG9pbnRlckV4Y2VwdGlvbi4gVGhpcyBpcwotICBhbiBpbnRlbnRpb25hbCBp
bmRpY2F0b3IgdGhhdCB5b3UgbXVzdCBzZXQgcmVxdWlyZWQgZmllbGRzLgotCi0gIE5PVEUKLSAg
b3B0aW9uYWxfZmllbGRfc3R5bGU9YWNjZXNzb3JzIG9yIHJlZnR5cGVzIGNhbm5vdCBiZSB1c2Vk
IHRvZ2V0aGVyIHdpdGgKLSAgamF2YV9uYW5vX2dlbmVyYXRlX2hhcz10cnVlLiBJZiB5b3UgbmVl
ZCB0aGUgJ2hhcycgZmxhZyBmb3IgYW55Ci0gIHJlcXVpcmVkIGZpZWxkICh5b3UgaGF2ZSBubyBy
ZWFzb24gdG8pLCB5b3UgY2FuIG9ubHkgdXNlCi0gIGphdmFfbmFub19nZW5lcmF0ZV9oYXM9dHJ1
ZS4KLQotKiplbnVtX3N0eWxlPXtjLGphdmF9KiogKGRlZmF1bHQ6IGMpCi0KLSAgRGVmaW5lcyB3
aGVyZSB0byBwdXQgdGhlIGludCBjb25zdGFudHMgZ2VuZXJhdGVkIGZyb20gZW51bSBtZW1iZXJz
LgotCi0gICogYwotCi0gIFVzZSBDLXN0eWxlLCBzbyB0aGUgZW51bSBjb25zdGFudHMgYXJlIGF2
YWlsYWJsZSBhdCB0aGUgc2NvcGUgd2hlcmUKLSAgdGhlIGVudW0gaXMgZGVmaW5lZC4gQSBmaWxl
LXNjb3BlIGVudW0ncyBtZW1iZXJzIGFyZSByZWZlcmVuY2VkIGxpa2UKLSAgJ0ZpbGVPdXRlckNs
YXNzLkVOVU1fVkFMVUUnOyBhIG1lc3NhZ2Utc2NvcGUgZW51bSdzIG1lbWJlcnMgYXJlCi0gIHJl
ZmVyZW5jZWQgYXMgJ01lc3NhZ2UuRU5VTV9WQUxVRScuIFRoZSBlbnVtIG5hbWUgaXMgdW5hdmFp
bGFibGUuCi0gIFRoaXMgY29tcGxpZXMgd2l0aCB0aGUgTWljcm8gY29kZSBnZW5lcmF0b3IncyBi
ZWhhdmlvci4KLQotICAqIGphdmEKLQotICBVc2UgSmF2YS1zdHlsZSwgc28gdGhlIGVudW0gY29u
c3RhbnRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIGVudW0KLSAgbmFtZSBhbmQgcmVmZXJlbmNl
ZCBsaWtlICdFbnVtTmFtZS5FTlVNX1ZBTFVFJyAodGhleSBhcmUgc3RpbGwgaW50Ci0gIGNvbnN0
YW50cykuIFRoZSBlbnVtIG5hbWUgYmVjb21lcyB0aGUgbmFtZSBvZiBhIHB1YmxpYyBpbnRlcmZh
Y2UsIGF0Ci0gIHRoZSBzY29wZSB3aGVyZSB0aGUgZW51bSBpcyBkZWZpbmVkLiBJZiB0aGUgZW51
bSBpcyBmaWxlLXNjb3BlIGFuZAotICB0aGUgamF2YV9tdWx0aXBsZV9maWxlcyBvcHRpb24gaXMg
b24sIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBkZWZpbmVkCi0gIGluIGl0cyBvd24gZmlsZS4gVG8g
cmVkdWNlIGNvZGUgc2l6ZSwgdGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG5vdCBiZQotICBpbXBsZW1l
bnRlZCBhbmQgUHJvR3VhcmQgc2hyaW5raW5nIHNob3VsZCBiZSB1c2VkLCBzbyBhZnRlciB0aGUg
SmF2YQotICBjb21waWxlciBpbmxpbmVzIGFsbCByZWZlcmVuY2VkIGVudW0gY29uc3RhbnRzIGlu
dG8gdGhlIGNhbGwgc2l0ZXMsCi0gIHRoZSBpbnRlcmZhY2UgcmVtYWlucyB1bnVzZWQgYW5kIGNh
biBiZSByZW1vdmVkIGJ5IFByb0d1YXJkLgotCi0qKmlnbm9yZV9zZXJ2aWNlcz17dHJ1ZSxmYWxz
ZX0qKiAoZGVmYXVsdDogZmFsc2UpCi0KLSAgU2tpcHMgc2VydmljZXMgZGVmaW5pdGlvbnMuCi0K
LSAgTmFubyBkb2Vzbid0IHN1cHBvcnQgc2VydmljZXMuIEJ5IGRlZmF1bHQsIGlmIGEgc2Vydmlj
ZSBpcyBkZWZpbmVkCi0gIGl0IHdpbGwgZ2VuZXJhdGUgYSBjb21waWxhdGlvbiBlcnJvci4gSWYg
dGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLAotICBzZXJ2aWNlcyB3aWxsIGJlIHNpbGVudGx5IGln
bm9yZWQsIGluc3RlYWQuCi0KLSoqcGFyY2VsYWJsZV9tZXNzYWdlcz17dHJ1ZSxmYWxzZX0qKiAo
ZGVmYXVsdDogZmFsc2UpCi0KLSAgQW5kcm9pZC1zcGVjaWZpYyBvcHRpb24gdG8gZ2VuZXJhdGUg
UGFyY2VsYWJsZSBtZXNzYWdlcy4KLQotKipnZW5lcmF0ZV9pbnRkZWZzPXt0cnVlLGZhbHNlfSoq
IChkZWZhdWx0OiBmYWxzZSkKLSAgQW5kcm9pZC1zcGVjaWZpYyBvcHRpb24gdG8gZ2VuZXJhdGUg
QEludERlZiBhbm5vdGF0aW9ucyBmb3IgZW51bXMuCi0KLSAgSWYgdHVybmVkIG9uLCBhbiAnQElu
dERlZicgYW5ub3RhdGlvbiAoYSBwdWJsaWMgQGludGVyZmFjZSkgd2lsbCBiZQotICBnZW5lcmF0
ZWQgZm9yIGVhY2ggZW51bSwgYW5kIGV2ZXJ5IGludGVnZXIgcGFyYW1ldGVyIGFuZCByZXR1cm4K
LSAgdmFsdWUgaW4gdGhlIGdlbmVyYXRlZCBjb2RlIG1lYW50IGZvciB0aGlzIGVudW0gd2lsbCBi
ZSBhbm5vdGF0ZWQKLSAgd2l0aCBpdC4gVGhpcyBpbnRlcmZhY2UgaXMgZ2VuZXJhdGVkIHdpdGgg
dGhlIHNhbWUgbmFtZSBhbmQgYXQgdGhlCi0gIHNhbWUgcGxhY2UgYXMgdGhlIGVudW0gbWVtYmVy
cycgY29udGFpbmVyIGludGVyZmFjZXMgZGVzY3JpYmVkCi0gIGFib3ZlIHVuZGVyICdlbnVtX3N0
eWxlPWphdmEnLCByZWdhcmRsZXNzIG9mIHRoZSBlbnVtX3N0eWxlIG9wdGlvbgotICB1c2VkLiBX
aGVuIHRoaXMgaXMgY29tYmluZWQgd2l0aCBlbnVtX3N0eWxlPWphdmEsIHRoZSBpbnRlcmZhY2UK
LSAgd2lsbCBiZSBib3RoIHRoZSAnQEludERlZicgYW5ub3RhdGlvbiBhbmQgdGhlIGNvbnRhaW5l
ciBvZiB0aGUgZW51bQotICBtZW1iZXJzOyBvdGhlcndpc2UgdGhlIGludGVyZmFjZSBoYXMgYW4g
ZW1wdHkgYm9keS4KLQotICBZb3VyIGFwcCBtdXN0IGRlY2xhcmUgYSBjb21waWxlLXRpbWUgZGVw
ZW5kZW5jeSBvbiB0aGUKLSAgYW5kcm9pZC1zdXBwb3J0LWFubm90YXRpb25zIGxpYnJhcnkuCi0K
LSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoZXNlIEBJbnREZWYgYW5ub3RhdGlvbnMg
aGVscCB3aXRoCi0gIGNvbXBpbGUtdGltZSB0eXBlIHNhZmV0eSwgc2VlOgotICBodHRwczovL3Np
dGVzLmdvb2dsZS5jb20vYS9hbmRyb2lkLmNvbS90b29scy90ZWNoLWRvY3Mvc3VwcG9ydC1hbm5v
dGF0aW9ucwotICBhbmQKLSAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNl
L2FuZHJvaWQvc3VwcG9ydC9hbm5vdGF0aW9uL0ludERlZi5odG1sCi0KLQotVG8gdXNlIG5hbm8g
cHJvdG9idWZzIHdpdGhpbiB0aGUgQW5kcm9pZCByZXBvOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIFNldCAnTE9DQUxfUFJPVE9DX09QVElNSVpF
X1RZUEUgOj0gbmFubycgaW4geW91ciBsb2NhbCAubWsgZmlsZS4KLSAgV2hlbiBidWlsZGluZyBh
IEphdmEgbGlicmFyeSBvciBhbiBhcHAgKHBhY2thZ2UpIHRhcmdldCwgdGhlIGJ1aWxkCi0gIHN5
c3RlbSB3aWxsIGFkZCB0aGUgSmF2YSBuYW5vIHJ1bnRpbWUgbGlicmFyeSB0byB0aGUKLSAgTE9D
QUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIHZhcmlhYmxlLCBzbyB5b3UgZG9uJ3QgbmVlZCB0by4K
LS0gU2V0ICdMT0NBTF9QUk9UT19KQVZBX09VVFBVVF9QQVJBTVMgOj0gLi4uJyBpbiB5b3VyIGxv
Y2FsIC5tayBmaWxlCi0gIGZvciBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMgeW91IG5lZWQuIFVz
ZSBjb21tYXMgdG8gam9pbiBtdWx0aXBsZQotICBvcHRpb25zLiBJbiB0aGUgbmFubyBmbGF2b3Ig
b25seSwgd2hpdGVzcGFjZSBzdXJyb3VuZGluZyB0aGUgb3B0aW9uCi0gIG5hbWVzIGFuZCB2YWx1
ZXMgYXJlIGlnbm9yZWQsIHNvIHlvdSBjYW4gdXNlIGJhY2tzbGFzaC1uZXdsaW5lIG9yCi0gICcr
PScgdG8gc3RydWN0dXJlIHlvdXIgbWFrZSBmaWxlcyBuaWNlbHkuCi0tIFRoZSBvcHRpb25zIHdp
bGwgYmUgYXBwbGllZCB0byAqYWxsKiBwcm90byBmaWxlcyBpbiBMT0NBTF9TUkNfRklMRVMKLSAg
d2hlbiB5b3UgYnVpbGQgYSBKYXZhIGxpYnJhcnkgb3IgcGFja2FnZS4gSW4gY2FzZSBkaWZmZXJl
bnQgb3B0aW9ucwotICBhcmUgbmVlZGVkIGZvciBkaWZmZXJlbnQgcHJvdG8gZmlsZXMsIGJ1aWxk
IHNlcGFyYXRlIEphdmEgbGlicmFyaWVzCi0gIGFuZCByZWZlcmVuY2UgdGhlbSBpbiB5b3VyIG1h
aW4gdGFyZ2V0LiBOb3RlOiB5b3Ugc2hvdWxkIG1ha2Ugc3VyZQotICB0aGF0LCBmb3IgZWFjaCBz
ZXBhcmF0ZSB0YXJnZXQsIGFsbCBwcm90byBmaWxlcyBpbXBvcnRlZCBmcm9tIGFueQotICBwcm90
byBmaWxlIGluIExPQ0FMX1NSQ19GSUxFUyBhcmUgaW5jbHVkZWQgaW4gTE9DQUxfU1JDX0ZJTEVT
LiBUaGlzCi0gIGlzIGJlY2F1c2UgdGhlIGdlbmVyYXRvciBoYXMgdG8gYXNzdW1lIHRoYXQgdGhl
IGltcG9ydGVkIGZpbGVzIGFyZQotICBidWlsdCB1c2luZyB0aGUgc2FtZSBvcHRpb25zLCBhbmQg
d2lsbCBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVmZXJlbmNlCi0gIHRoZSBmaWVsZHMgYW5kIGVudW1z
IGZyb20gdGhlIGltcG9ydGVkIGZpbGVzIHVzaW5nIHRoZSBzYW1lIGNvZGUKLSAgc3R5bGUuCi0t
IEhpbnQ6ICdpbmNsdWRlICQoQ0xFQVJfVkFSUyknIHJlc2V0cyBhbGwgTE9DQUxfIHZhcmlhYmxl
cywgaW5jbHVkaW5nCi0gIHRoZSB0d28gYWJvdmUuCi0KLVRvIHVzZSBuYW5vIHByb3RvYnVmcyBv
dXRzaWRlIG9mIEFuZHJvaWQgcmVwbzoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotLSBMaW5rIHdpdGggdGhlIGdlbmVyYXRlZCBqYXIgZmlsZQotICBc
PHByb3RvYnVmLXJvb3RcPmphdmEvdGFyZ2V0L3Byb3RvYnVmLWphdmEtMi4zLjAtbmFuby5qYXIu
Ci0tIEludm9rZSB3aXRoIC0tamF2YW5hbm9fb3V0LCBlLmcuOgotYGBgCi0uL3Byb3RvYyAnLS1q
YXZhbmFub19vdXQ9XAotICAgIGphdmFfcGFja2FnZT1zcmMvcHJvdG8vc2ltcGxlLWRhdGEucHJv
dG98bXlfcGFja2FnZSxcCi0gICAgamF2YV9vdXRlcl9jbGFzc25hbWU9c3JjL3Byb3RvL3NpbXBs
ZS1kYXRhLnByb3RvfE91dGVyTmFtZVwKLSAgOi4nIHNyYy9wcm90by9zaW1wbGUtZGF0YS5wcm90
bwotYGBgCi0KLUNvbnRyaWJ1dGluZyB0byBuYW5vOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LVBsZWFzZSBhZGQvZWRpdCB0ZXN0cyBpbiBOYW5vVGVzdC5qYXZhLgotCi1QbGVhc2UgcnVuIHRo
ZSBmb2xsb3dpbmcgc3RlcHMgdG8gdGVzdDoKLQotLSBjZCBleHRlcm5hbC9wcm90b2J1ZgotLSAu
L2NvbmZpZ3VyZQotLSBSdW4gIm1ha2UgLWoxMiBjaGVjayIgYW5kIHZlcmlmeSBhbGwgdGVzdHMg
cGFzcy4KLS0gY2QgamF2YQotLSBSdW4gIm12biB0ZXN0IiBhbmQgdmVyaWZ5IGFsbCB0ZXN0cyBw
YXNzLgotLSBjZCAuLi8uLi8uLgotLSAuIGJ1aWxkL2VudnNldHVwLnNoCi0tIGx1bmNoIDEKLS0g
Im1ha2UgLWoxMiBhcHJvdG9jIGxpYnByb3RvYnVmLWphdmEtMi4zLjAtbmFubyBhcHJvdG9jLXRl
c3QtbmFuby1wYXJhbXMgTmFub0FuZHJvaWRUZXN0IiBhbmQKLSAgY2hlY2sgZm9yIGJ1aWxkIGVy
cm9ycy4KLS0gUGx1ZyBpbiBhbiBBbmRyb2lkIGRldmljZSBvciBzdGFydCBhbiBlbXVsYXRvci4K
LS0gYWRiIGluc3RhbGwgLXIgb3V0L3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvZGF0YS9hcHAvTmFu
b0FuZHJvaWRUZXN0LmFwawotLSBSdW46Ci0gICJhZGIgc2hlbGwgYW0gaW5zdHJ1bWVudCAtdyBj
b20uZ29vZ2xlLnByb3RvYnVmLm5hbm8udGVzdC9hbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9u
VGVzdFJ1bm5lciIKLSAgYW5kIHZlcmlmeSBhbGwgdGVzdHMgcGFzcy4KLS0gcmVwbyBzeW5jIC1j
IC1qMjU2Ci0tICJtYWtlIC1qMTIiIGFuZCBjaGVjayBmb3IgYnVpbGQgZXJyb3JzCi0KLVVzYWdl
Ci0tLS0tLQotCi1UaGUgY29tcGxldGUgZG9jdW1lbnRhdGlvbiBmb3IgUHJvdG9jb2wgQnVmZmVy
cyBpcyBhdmFpbGFibGUgdmlhIHRoZQotd2ViIGF0OgotCi0gICAgaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vcG9tLnht
bCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YW5hbm8vcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJlY2Ew
OWQxY2IyMTNhNWQ0NDc4MTY4ZjhiZmY0Y2JkYjYzZmVhNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3BvbS54bWwKKysrIC9kZXYvbnVsbApA
QCAtMSwyNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K
LTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gIHht
bG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gIHhz
aTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6
Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotICA8bW9kZWxWZXJzaW9uPjQu
MC4wPC9tb2RlbFZlcnNpb24+Ci0gIDxwYXJlbnQ+Ci0gICAgPGdyb3VwSWQ+Y29tLmdvb2dsZTwv
Z3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5nb29nbGU8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNp
b24+MTwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0gIDxncm91cElkPmNvbS5nb29nbGUucHJvdG9i
dWYubmFubzwvZ3JvdXBJZD4KLSAgPGFydGlmYWN0SWQ+cHJvdG9idWYtamF2YW5hbm88L2FydGlm
YWN0SWQ+Ci0gIDx2ZXJzaW9uPjMuMC4wLWFscGhhLTY8L3ZlcnNpb24+Ci0gIDxwYWNrYWdpbmc+
YnVuZGxlPC9wYWNrYWdpbmc+Ci0gIDxuYW1lPlByb3RvY29sIEJ1ZmZlciBKYXZhTmFubyBBUEk8
L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj4KLSAgICBQcm90b2NvbCBCdWZmZXJzIGFyZSBhIHdheSBv
ZiBlbmNvZGluZyBzdHJ1Y3R1cmVkIGRhdGEgaW4gYW4gZWZmaWNpZW50IHlldAotICAgIGV4dGVu
c2libGUgZm9ybWF0LgotICA8L2Rlc2NyaXB0aW9uPgotICA8aW5jZXB0aW9uWWVhcj4yMDA4PC9p
bmNlcHRpb25ZZWFyPgotICA8dXJsPmh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvPC91cmw+Ci0gIDxsaWNlbnNlcz4KLSAgICA8bGljZW5zZT4KLSAgICAgIDxu
YW1lPk5ldyBCU0QgbGljZW5zZTwvbmFtZT4KLSAgICAgIDx1cmw+aHR0cDovL3d3dy5vcGVuc291
cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHA8L3VybD4KLSAgICAgIDxkaXN0cmlidXRp
b24+cmVwbzwvZGlzdHJpYnV0aW9uPgotICAgIDwvbGljZW5zZT4KLSAgPC9saWNlbnNlcz4KLSAg
PHNjbT4KLSAgICA8dXJsPmh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWY8L3VybD4K
LSAgICA8Y29ubmVjdGlvbj4KLSAgICAgIHNjbTpnaXQ6aHR0cHM6Ly9naXRodWIuY29tL2dvb2ds
ZS9wcm90b2J1Zi5naXQKLSAgICA8L2Nvbm5lY3Rpb24+Ci0gIDwvc2NtPgotICA8cHJvcGVydGll
cz4KLSAgICA8cHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZz5VVEYtODwvcHJvamVjdC5idWls
ZC5zb3VyY2VFbmNvZGluZz4KLSAgPC9wcm9wZXJ0aWVzPgotICA8ZGVwZW5kZW5jaWVzPgotICAg
IDxkZXBlbmRlbmN5PgotICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICA8YXJ0
aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjQuNDwvdmVyc2lvbj4K
LSAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRlcGVu
ZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuZWFzeW1vY2s8L2dyb3VwSWQ+Ci0gICAgICA8YXJ0
aWZhY3RJZD5lYXN5bW9jazwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjIuMjwvdmVyc2lv
bj4KLSAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPGRl
cGVuZGVuY3k+Ci0gICAgICA8Z3JvdXBJZD5vcmcuZWFzeW1vY2s8L2dyb3VwSWQ+Ci0gICAgICA8
YXJ0aWZhY3RJZD5lYXN5bW9ja2NsYXNzZXh0ZW5zaW9uPC9hcnRpZmFjdElkPgotICAgICAgPHZl
cnNpb24+Mi4yLjE8L3ZlcnNpb24+Ci0gICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgPC9k
ZXBlbmRlbmN5PgotICA8L2RlcGVuZGVuY2llcz4KLSAgPGJ1aWxkPgotICAgIDxwbHVnaW5zPgot
ICAgICAgPHBsdWdpbj4KLSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2lu
PC9hcnRpZmFjdElkPgotICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICA8c291cmNl
PjEuNTwvc291cmNlPgotICAgICAgICAgIDx0YXJnZXQ+MS41PC90YXJnZXQ+Ci0gICAgICAgIDwv
Y29uZmlndXJhdGlvbj4KLSAgICAgIDwvcGx1Z2luPgotICAgICAgPHBsdWdpbj4KLSAgICAgICAg
PGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICA8
Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICA8aW5jbHVkZXM+Ci0gICAgICAgICAgICA8aW5jbHVk
ZT4qKi8qVGVzdC5qYXZhPC9pbmNsdWRlPgotICAgICAgICAgIDwvaW5jbHVkZXM+Ci0gICAgICAg
IDwvY29uZmlndXJhdGlvbj4KLSAgICAgIDwvcGx1Z2luPgotICAgICAgPHBsdWdpbj4KLSAgICAg
ICAgPGFydGlmYWN0SWQ+bWF2ZW4tYW50cnVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAg
PGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgIDxpZD5nZW5l
cmF0ZS10ZXN0LXNvdXJjZXM8L2lkPgotICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXRlc3Qt
c291cmNlczwvcGhhc2U+Ci0gICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAg
ICAgPHRhc2tzPgotICAgICAgICAgICAgICAgIDxta2RpciBkaXI9InRhcmdldC9nZW5lcmF0ZWQt
dGVzdC1zb3VyY2VzIiAvPgotICAgICAgICAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9Ii4uL3Ny
Yy9wcm90b2MiPgotICAgICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS1qYXZhbmFub19vdXQ9
Z2VuZXJhdGVfZXF1YWxzPXRydWU6dGFyZ2V0L2dlbmVyYXRlZC10ZXN0LXNvdXJjZXMiIC8+Ci0g
ICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXByb3RvX3BhdGg9c3JjL3Rlc3QvamF2YS9j
b20iIC8+Ci0gICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSJzcmMvdGVzdC9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9uYW5vLnByb3RvIiAvPgotICAgICAgICAgICAg
ICAgICAgPGFyZyB2YWx1ZT0ic3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8v
dW5pdHRlc3Rfc2ltcGxlX25hbm8ucHJvdG8iIC8+Ci0gICAgICAgICAgICAgICAgICA8YXJnIHZh
bHVlPSJzcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9zdHJp
bmd1dGY4X25hbm8ucHJvdG8iIC8+Ci0gICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSJzcmMv
dGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9yZWN1cnNpdmVfbmFu
by5wcm90byIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9InNyYy90ZXN0L2phdmEv
Y29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2ltcG9ydF9uYW5vLnByb3RvIiAvPgot
ICAgICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0ic3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL25hbm8vdW5pdHRlc3Rfc2luZ2xlX25hbm8ucHJvdG8iIC8+Ci0gICAgICAgICAgICAg
ICAgICA8YXJnIHZhbHVlPSJzcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91
bml0dGVzdF9tdWx0aXBsZV9uYW5vLnByb3RvIiAvPgotICAgICAgICAgICAgICAgICAgPGFyZyB2
YWx1ZT0ic3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfbXVs
dGlwbGVfbmFtZWNsYXNoX25hbm8ucHJvdG8iIC8+Ci0gICAgICAgICAgICAgICAgICA8YXJnIHZh
bHVlPSJzcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9lbnVt
X2NsYXNzX25hbm8ucHJvdG8iIC8+Ci0gICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSJzcmMv
dGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9yZXBlYXRlZF9tZXJn
ZV9uYW5vLnByb3RvIiAvPgotICAgICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0ic3JjL3Rlc3Qv
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vbWFwX3Rlc3QucHJvdG8iIC8+Ci0gICAgICAg
ICAgICAgICAgPC9leGVjPgotICAgICAgICAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9Ii4uL3Ny
Yy9wcm90b2MiPgotICAgICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS1qYXZhbmFub19vdXQ9
c3RvcmVfdW5rbm93bl9maWVsZHM9dHJ1ZSxnZW5lcmF0ZV9lcXVhbHM9dHJ1ZSxnZW5lcmF0ZV9j
bG9uZT10cnVlOnRhcmdldC9nZW5lcmF0ZWQtdGVzdC1zb3VyY2VzIiAvPgotICAgICAgICAgICAg
ICAgICAgPGFyZyB2YWx1ZT0iLS1wcm90b19wYXRoPXNyYy90ZXN0L2phdmEvY29tIiAvPgotICAg
ICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0ic3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL25hbm8vdW5pdHRlc3RfZXh0ZW5zaW9uX25hbm8ucHJvdG8iIC8+Ci0gICAgICAgICAgICAg
ICAgICA8YXJnIHZhbHVlPSJzcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91
bml0dGVzdF9leHRlbnNpb25fc2luZ3VsYXJfbmFuby5wcm90byIgLz4KLSAgICAgICAgICAgICAg
ICAgIDxhcmcgdmFsdWU9InNyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3Vu
aXR0ZXN0X2V4dGVuc2lvbl9yZXBlYXRlZF9uYW5vLnByb3RvIiAvPgotICAgICAgICAgICAgICAg
IDwvZXhlYz4KLSAgICAgICAgICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIuLi9zcmMvcHJvdG9j
Ij4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tamF2YW5hbm9fb3V0PXN0b3JlX3Vu
a25vd25fZmllbGRzPXRydWUsZ2VuZXJhdGVfY2xvbmU9dHJ1ZTp0YXJnZXQvZ2VuZXJhdGVkLXRl
c3Qtc291cmNlcyIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tcHJvdG9fcGF0
aD1zcmMvdGVzdC9qYXZhL2NvbSIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9InNy
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lvbl9w
YWNrZWRfbmFuby5wcm90byIgLz4KLSAgICAgICAgICAgICAgICA8L2V4ZWM+Ci0gICAgICAgICAg
ICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iLi4vc3JjL3Byb3RvYyI+Ci0gICAgICAgICAgICAgICAg
ICA8YXJnIHZhbHVlPSItLWphdmFuYW5vX291dD1qYXZhX25hbm9fZ2VuZXJhdGVfaGFzPXRydWUs
Z2VuZXJhdGVfZXF1YWxzPXRydWUsZ2VuZXJhdGVfY2xvbmU9dHJ1ZTp0YXJnZXQvZ2VuZXJhdGVk
LXRlc3Qtc291cmNlcyIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tcHJvdG9f
cGF0aD1zcmMvdGVzdC9qYXZhL2NvbSIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9
InNyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2hhc19uYW5v
LnByb3RvIiAvPgotICAgICAgICAgICAgICAgIDwvZXhlYz4KLSAgICAgICAgICAgICAgICA8ZXhl
YyBleGVjdXRhYmxlPSIuLi9zcmMvcHJvdG9jIj4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFs
dWU9Ii0tamF2YW5hbm9fb3V0PW9wdGlvbmFsX2ZpZWxkX3N0eWxlPWFjY2Vzc29ycyxnZW5lcmF0
ZV9lcXVhbHM9dHJ1ZTp0YXJnZXQvZ2VuZXJhdGVkLXRlc3Qtc291cmNlcyIgLz4KLSAgICAgICAg
ICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tcHJvdG9fcGF0aD1zcmMvdGVzdC9qYXZhL2NvbSIgLz4K
LSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9InNyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2FjY2Vzc29yc19uYW5vLnByb3RvIiAvPgotICAgICAgICAg
ICAgICAgIDwvZXhlYz4KLSAgICAgICAgICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIuLi9zcmMv
cHJvdG9jIj4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tamF2YW5hbm9fb3V0PWVu
dW1fc3R5bGU9amF2YTp0YXJnZXQvZ2VuZXJhdGVkLXRlc3Qtc291cmNlcyIgLz4KLSAgICAgICAg
ICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tcHJvdG9fcGF0aD1zcmMvdGVzdC9qYXZhL2NvbSIgLz4K
LSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9InNyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2VudW1fY2xhc3NfbmFuby5wcm90byIgLz4KLSAgICAgICAg
ICAgICAgICAgIDxhcmcgdmFsdWU9InNyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9u
YW5vL3VuaXR0ZXN0X2VudW1fY2xhc3NfbXVsdGlwbGVfbmFuby5wcm90byIgLz4KLSAgICAgICAg
ICAgICAgICAgIDxhcmcgdmFsdWU9InNyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9u
YW5vL3VuaXR0ZXN0X3JlcGVhdGVkX3BhY2thYmxlc19uYW5vLnByb3RvIiAvPgotICAgICAgICAg
ICAgICAgICAgPGFyZyB2YWx1ZT0ic3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25h
bm8vdW5pdHRlc3RfZW51bV92YWxpZGl0eV9uYW5vLnByb3RvIiAvPgotICAgICAgICAgICAgICAg
IDwvZXhlYz4KLSAgICAgICAgICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIuLi9zcmMvcHJvdG9j
Ij4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tamF2YW5hbm9fb3V0PQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX2ZpZWxkX3N0eWxlPWFjY2Vzc29y
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhX291dGVyX2NsYXNzbmFt
ZT1nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9lbnVtX3ZhbGlkaXR5X25hbm8ucHJvdG98
RW51bVZhbGlkaXR5QWNjZXNzb3JzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0
YXJnZXQvZ2VuZXJhdGVkLXRlc3Qtc291cmNlcyIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcg
dmFsdWU9Ii0tcHJvdG9fcGF0aD1zcmMvdGVzdC9qYXZhL2NvbSIgLz4KLSAgICAgICAgICAgICAg
ICAgIDxhcmcgdmFsdWU9InNyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3Vu
aXR0ZXN0X2VudW1fdmFsaWRpdHlfbmFuby5wcm90byIgLz4KLSAgICAgICAgICAgICAgICA8L2V4
ZWM+Ci0gICAgICAgICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iLi4vc3JjL3Byb3RvYyI+Ci0g
ICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLWphdmFuYW5vX291dD1vcHRpb25hbF9maWVs
ZF9zdHlsZT1yZWZ0eXBlcyxnZW5lcmF0ZV9lcXVhbHM9dHJ1ZTp0YXJnZXQvZ2VuZXJhdGVkLXRl
c3Qtc291cmNlcyIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tcHJvdG9fcGF0
aD1zcmMvdGVzdC9qYXZhL2NvbSIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9InNy
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X3JlZmVyZW5jZV90
eXBlc19uYW5vLnByb3RvIiAvPgotICAgICAgICAgICAgICAgIDwvZXhlYz4KLSAgICAgICAgICAg
ICAgICA8ZXhlYyBleGVjdXRhYmxlPSIuLi9zcmMvcHJvdG9jIj4KLSAgICAgICAgICAgICAgICAg
IDxhcmcgdmFsdWU9Ii0tamF2YW5hbm9fb3V0PQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbmFsX2ZpZWxkX3N0eWxlPXJlZnR5cGVzX2NvbXBhdF9tb2RlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2VxdWFscz10cnVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmFfb3V0ZXJfY2xhc3NuYW1lPWdvb2dsZS9w
cm90b2J1Zi9uYW5vL3VuaXR0ZXN0X3JlZmVyZW5jZV90eXBlc19uYW5vLnByb3RvfE5hbm9SZWZl
cmVuY2VUeXBlc0NvbXBhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0YXJn
ZXQvZ2VuZXJhdGVkLXRlc3Qtc291cmNlcyIgLz4KLSAgICAgICAgICAgICAgICAgIDxhcmcgdmFs
dWU9Ii0tcHJvdG9fcGF0aD1zcmMvdGVzdC9qYXZhL2NvbSIgLz4KLSAgICAgICAgICAgICAgICAg
IDxhcmcgdmFsdWU9InNyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0
ZXN0X3JlZmVyZW5jZV90eXBlc19uYW5vLnByb3RvIiAvPgotICAgICAgICAgICAgICAgIDwvZXhl
Yz4KLSAgICAgICAgICAgICAgPC90YXNrcz4KLSAgICAgICAgICAgICAgPHRlc3RTb3VyY2VSb290
PnRhcmdldC9nZW5lcmF0ZWQtdGVzdC1zb3VyY2VzPC90ZXN0U291cmNlUm9vdD4KLSAgICAgICAg
ICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAg
PGdvYWw+cnVuPC9nb2FsPgotICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICA8L2V4ZWN1
dGlvbj4KLSAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgPC9wbHVnaW4+Ci0gICAgICA8cGx1
Z2luPgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgotICAgICAg
ICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICA8
ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgotICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAg
ICAgICAgICA8aW5zdHJ1Y3Rpb25zPgotICAgICAgICAgICAgPEJ1bmRsZS1Eb2NVUkw+aHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy88L0J1bmRsZS1Eb2NVUkw+
Ci0gICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT5jb20uZ29vZ2xlLnByb3RvYnVmPC9C
dW5kbGUtU3ltYm9saWNOYW1lPgotICAgICAgICAgICAgPEV4cG9ydC1QYWNrYWdlPmNvbS5nb29n
bGUucHJvdG9idWY7dmVyc2lvbj0zLjAuMC1hbHBoYS01PC9FeHBvcnQtUGFja2FnZT4KLSAgICAg
ICAgICA8L2luc3RydWN0aW9ucz4KLSAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgPC9w
bHVnaW4+Ci0gICAgPC9wbHVnaW5zPgotICA8L2J1aWxkPgotICA8cHJvZmlsZXM+Ci0gICAgPHBy
b2ZpbGU+Ci0gICAgICA8aWQ+cmVsZWFzZTwvaWQ+Ci0gICAgICA8ZGlzdHJpYnV0aW9uTWFuYWdl
bWVudD4KLSAgICAgICAgPHNuYXBzaG90UmVwb3NpdG9yeT4KLSAgICAgICAgICA8aWQ+c29uYXR5
cGUtbmV4dXMtc3RhZ2luZzwvaWQ+Ci0gICAgICAgICAgPHVybD5odHRwczovL29zcy5zb25hdHlw
ZS5vcmcvY29udGVudC9yZXBvc2l0b3JpZXMvc25hcHNob3RzPC91cmw+Ci0gICAgICAgIDwvc25h
cHNob3RSZXBvc2l0b3J5PgotICAgICAgICA8cmVwb3NpdG9yeT4KLSAgICAgICAgICA8aWQ+c29u
YXR5cGUtbmV4dXMtc3RhZ2luZzwvaWQ+Ci0gICAgICAgICAgPHVybD5odHRwczovL29zcy5zb25h
dHlwZS5vcmcvc2VydmljZS9sb2NhbC9zdGFnaW5nL2RlcGxveS9tYXZlbjIvPC91cmw+Ci0gICAg
ICAgIDwvcmVwb3NpdG9yeT4KLSAgICAgIDwvZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4KLSAgICAg
IDxidWlsZD4KLSAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAg
ICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAg
ICAgIDxhcnRpZmFjdElkPm1hdmVuLXNvdXJjZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAg
ICAgICA8dmVyc2lvbj4yLjIuMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxleGVjdXRpb25zPgot
ICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDxpZD5hdHRhY2gtc291
cmNlczwvaWQ+Ci0gICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgPGdv
YWw+amFyLW5vLWZvcms8L2dvYWw+Ci0gICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAg
ICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAg
PC9wbHVnaW4+Ci0gICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5h
cGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm1h
dmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi45
LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgPGV4
ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8aWQ+YXR0YWNoLWphdmFkb2NzPC9pZD4KLSAgICAg
ICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICA8Z29hbD5qYXI8L2dvYWw+Ci0g
ICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAg
ICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgPHBs
dWdpbj4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3Jv
dXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWdwZy1wbHVnaW48L2FydGlmYWN0
SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjU8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8ZXhl
Y3V0aW9ucz4KLSAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8aWQ+
c2lnbi1hcnRpZmFjdHM8L2lkPgotICAgICAgICAgICAgICAgIDxwaGFzZT52ZXJpZnk8L3BoYXNl
PgotICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgIDxnb2FsPnNpZ248
L2dvYWw+Ci0gICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgPC9leGVjdXRp
b24+Ci0gICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgPC9wbHVnaW4+Ci0gICAg
ICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5zb25hdHlwZS5wbHVnaW5z
PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmV4dXMtc3RhZ2luZy1tYXZlbi1w
bHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjYuMzwvdmVyc2lvbj4K
LSAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+Ci0gICAgICAgICAgICA8
Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgIDxzZXJ2ZXJJZD5zb25hdHlwZS1uZXh1cy1z
dGFnaW5nPC9zZXJ2ZXJJZD4KLSAgICAgICAgICAgICAgIDxuZXh1c1VybD5odHRwczovL29zcy5z
b25hdHlwZS5vcmcvPC9uZXh1c1VybD4KLSAgICAgICAgICAgICAgIDxhdXRvUmVsZWFzZUFmdGVy
Q2xvc2U+ZmFsc2U8L2F1dG9SZWxlYXNlQWZ0ZXJDbG9zZT4KLSAgICAgICAgICAgIDwvY29uZmln
dXJhdGlvbj4KLSAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPC9wbHVnaW5zPgotICAgICAg
PC9idWlsZD4KLSAgICA8L3Byb2ZpbGU+Ci0gIDwvcHJvZmlsZXM+Ci08L3Byb2plY3Q+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL0Nv
ZGVkSW5wdXRCeXRlQnVmZmVyTmFuby5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvbmFuby9Db2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8uamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM5OTMxNTUxMTI4YjZlZWRjYWFlOGJjYjE4MzhiNmQx
YmYwMmExOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2ph
dmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL0NvZGVkSW5wdXRC
eXRlQnVmZmVyTmFuby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjgzICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMTMgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9i
dWYubmFubzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLS8qKgotICogUmVhZHMg
YW5kIGRlY29kZXMgcHJvdG9jb2wgbWVzc2FnZSBmaWVsZHMuCi0gKgotICogVGhpcyBjbGFzcyBj
b250YWlucyB0d28ga2luZHMgb2YgbWV0aG9kczogIG1ldGhvZHMgdGhhdCByZWFkIHNwZWNpZmlj
Ci0gKiBwcm90b2NvbCBtZXNzYWdlIGNvbnN0cnVjdHMgYW5kIGZpZWxkIHR5cGVzIChlLmcuIHtA
bGluayAjcmVhZFRhZygpfSBhbmQKLSAqIHtAbGluayAjcmVhZEludDMyKCl9KSBhbmQgbWV0aG9k
cyB0aGF0IHJlYWQgbG93LWxldmVsIHZhbHVlcyAoZS5nLgotICoge0BsaW5rICNyZWFkUmF3VmFy
aW50MzIoKX0gYW5kIHtAbGluayAjcmVhZFJhd0J5dGVzfSkuICBJZiB5b3UgYXJlIHJlYWRpbmcK
LSAqIGVuY29kZWQgcHJvdG9jb2wgbWVzc2FnZXMsIHlvdSBzaG91bGQgdXNlIHRoZSBmb3JtZXIg
bWV0aG9kcywgYnV0IGlmIHlvdSBhcmUKLSAqIHJlYWRpbmcgc29tZSBvdGhlciBmb3JtYXQgb2Yg
eW91ciBvd24gZGVzaWduLCB1c2UgdGhlIGxhdHRlci4KLSAqCi0gKiBAYXV0aG9yIGtlbnRvbkBn
b29nbGUuY29tIEtlbnRvbiBWYXJkYQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQ29kZWRJbnB1
dEJ5dGVCdWZmZXJOYW5vIHsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIG5ldyBDb2RlZElucHV0U3Ry
ZWFtIHdyYXBwaW5nIHRoZSBnaXZlbiBieXRlIGFycmF5LgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyBDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8gbmV3SW5zdGFuY2UoZmluYWwgYnl0ZVtdIGJ1Zikg
ewotICAgIHJldHVybiBuZXdJbnN0YW5jZShidWYsIDAsIGJ1Zi5sZW5ndGgpOwotICB9Ci0KLSAg
LyoqCi0gICAqIENyZWF0ZSBhIG5ldyBDb2RlZElucHV0U3RyZWFtIHdyYXBwaW5nIHRoZSBnaXZl
biBieXRlIGFycmF5IHNsaWNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBDb2RlZElucHV0Qnl0
ZUJ1ZmZlck5hbm8gbmV3SW5zdGFuY2UoZmluYWwgYnl0ZVtdIGJ1ZiwgZmluYWwgaW50IG9mZiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBs
ZW4pIHsKLSAgICByZXR1cm4gbmV3IENvZGVkSW5wdXRCeXRlQnVmZmVyTmFubyhidWYsIG9mZiwg
bGVuKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLyoqCi0gICAqIEF0dGVtcHQgdG8gcmVh
ZCBhIGZpZWxkIHRhZywgcmV0dXJuaW5nIHplcm8gaWYgd2UgaGF2ZSByZWFjaGVkIEVPRi4KLSAg
ICogUHJvdG9jb2wgbWVzc2FnZSBwYXJzZXJzIHVzZSB0aGlzIHRvIHJlYWQgdGFncywgc2luY2Ug
YSBwcm90b2NvbCBtZXNzYWdlCi0gICAqIG1heSBsZWdhbGx5IGVuZCB3aGVyZXZlciBhIHRhZyBv
Y2N1cnMsIGFuZCB6ZXJvIGlzIG5vdCBhIHZhbGlkIHRhZyBudW1iZXIuCi0gICAqLwotICBwdWJs
aWMgaW50IHJlYWRUYWcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGlmIChpc0F0RW5kKCkp
IHsKLSAgICAgIGxhc3RUYWcgPSAwOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbGFz
dFRhZyA9IHJlYWRSYXdWYXJpbnQzMigpOwotICAgIGlmIChsYXN0VGFnID09IDApIHsKLSAgICAg
IC8vIElmIHdlIGFjdHVhbGx5IHJlYWQgemVybywgdGhhdCdzIG5vdCBhIHZhbGlkIHRhZy4KLSAg
ICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24uaW52YWxpZFRhZygp
OwotICAgIH0KLSAgICByZXR1cm4gbGFzdFRhZzsKLSAgfQotCi0gIC8qKgotICAgKiBWZXJpZmll
cyB0aGF0IHRoZSBsYXN0IGNhbGwgdG8gcmVhZFRhZygpIHJldHVybmVkIHRoZSBnaXZlbiB0YWcg
dmFsdWUuCi0gICAqIFRoaXMgaXMgdXNlZCB0byB2ZXJpZnkgdGhhdCBhIG5lc3RlZCBncm91cCBl
bmRlZCB3aXRoIHRoZSBjb3JyZWN0Ci0gICAqIGVuZCB0YWcuCi0gICAqCi0gICAqIEB0aHJvd3Mg
SW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbiB7QGNvZGUgdmFsdWV9IGRvZXMgbm90
IG1hdGNoIHRoZQotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
YXN0IHRhZy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNoZWNrTGFzdFRhZ1dhcyhmaW5hbCBpbnQg
dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSW52YWxpZFByb3Rv
Y29sQnVmZmVyTmFub0V4Y2VwdGlvbiB7Ci0gICAgaWYgKGxhc3RUYWcgIT0gdmFsdWUpIHsKLSAg
ICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24uaW52YWxpZEVuZFRh
ZygpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZWFkcyBhbmQgZGlzY2FyZHMgYSBzaW5n
bGUgZmllbGQsIGdpdmVuIGl0cyB0YWcgdmFsdWUuCi0gICAqCi0gICAqIEByZXR1cm4ge0Bjb2Rl
IGZhbHNlfSBpZiB0aGUgdGFnIGlzIGFuIGVuZGdyb3VwIHRhZywgaW4gd2hpY2ggY2FzZQotICAg
KiAgICAgICAgIG5vdGhpbmcgaXMgc2tpcHBlZC4gIE90aGVyd2lzZSwgcmV0dXJucyB7QGNvZGUg
dHJ1ZX0uCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBza2lwRmllbGQoZmluYWwgaW50IHRhZykg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBzd2l0Y2ggKFdpcmVGb3JtYXROYW5vLmdldFRhZ1dp
cmVUeXBlKHRhZykpIHsKLSAgICAgIGNhc2UgV2lyZUZvcm1hdE5hbm8uV0lSRVRZUEVfVkFSSU5U
OgotICAgICAgICByZWFkSW50MzIoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNl
IFdpcmVGb3JtYXROYW5vLldJUkVUWVBFX0ZJWEVENjQ6Ci0gICAgICAgIHJlYWRSYXdMaXR0bGVF
bmRpYW42NCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgV2lyZUZvcm1hdE5h
bm8uV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRDoKLSAgICAgICAgc2tpcFJhd0J5dGVzKHJlYWRS
YXdWYXJpbnQzMigpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIFdpcmVGb3Jt
YXROYW5vLldJUkVUWVBFX1NUQVJUX0dST1VQOgotICAgICAgICBza2lwTWVzc2FnZSgpOwotICAg
ICAgICBjaGVja0xhc3RUYWdXYXMoCi0gICAgICAgICAgV2lyZUZvcm1hdE5hbm8ubWFrZVRhZyhX
aXJlRm9ybWF0TmFuby5nZXRUYWdGaWVsZE51bWJlcih0YWcpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXaXJlRm9ybWF0TmFuby5XSVJFVFlQRV9FTkRfR1JPVVApKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXROYW5vLldJUkVUWVBFX0VORF9HUk9V
UDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBXaXJlRm9ybWF0TmFuby5XSVJF
VFlQRV9GSVhFRDMyOgotICAgICAgICByZWFkUmF3TGl0dGxlRW5kaWFuMzIoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB0aHJvdyBJbnZhbGlkUHJvdG9j
b2xCdWZmZXJOYW5vRXhjZXB0aW9uLmludmFsaWRXaXJlVHlwZSgpOwotICAgIH0KLSAgfQotCi0g
IC8qKgotICAgKiBSZWFkcyBhbmQgZGlzY2FyZHMgYW4gZW50aXJlIG1lc3NhZ2UuICBUaGlzIHdp
bGwgcmVhZCBlaXRoZXIgdW50aWwgRU9GCi0gICAqIG9yIHVudGlsIGFuIGVuZGdyb3VwIHRhZywg
d2hpY2hldmVyIGNvbWVzIGZpcnN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2tpcE1lc3NhZ2Uo
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBmaW5hbCBp
bnQgdGFnID0gcmVhZFRhZygpOwotICAgICAgaWYgKHRhZyA9PSAwIHx8ICFza2lwRmllbGQodGFn
KSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotICAvKiogUmVhZCBhIHtAY29kZSBkb3VibGV9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0
cmVhbS4gKi8KLSAgcHVibGljIGRvdWJsZSByZWFkRG91YmxlKCkgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICByZXR1cm4gRG91YmxlLmxvbmdCaXRzVG9Eb3VibGUocmVhZFJhd0xpdHRsZUVuZGlh
bjY0KCkpOwotICB9Ci0KLSAgLyoqIFJlYWQgYSB7QGNvZGUgZmxvYXR9IGZpZWxkIHZhbHVlIGZy
b20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGZsb2F0IHJlYWRGbG9hdCgpIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIEZsb2F0LmludEJpdHNUb0Zsb2F0KHJlYWRSYXdMaXR0bGVF
bmRpYW4zMigpKTsKLSAgfQotCi0gIC8qKiBSZWFkIGEge0Bjb2RlIHVpbnQ2NH0gZmllbGQgdmFs
dWUgZnJvbSB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgbG9uZyByZWFkVUludDY0KCkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gcmVhZFJhd1ZhcmludDY0KCk7Ci0gIH0KLQotICAv
KiogUmVhZCBhbiB7QGNvZGUgaW50NjR9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8K
LSAgcHVibGljIGxvbmcgcmVhZEludDY0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICByZXR1
cm4gcmVhZFJhd1ZhcmludDY0KCk7Ci0gIH0KLQotICAvKiogUmVhZCBhbiB7QGNvZGUgaW50MzJ9
IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGludCByZWFkSW50MzIo
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHJldHVybiByZWFkUmF3VmFyaW50MzIoKTsKLSAg
fQotCi0gIC8qKiBSZWFkIGEge0Bjb2RlIGZpeGVkNjR9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0
cmVhbS4gKi8KLSAgcHVibGljIGxvbmcgcmVhZEZpeGVkNjQoKSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIHJldHVybiByZWFkUmF3TGl0dGxlRW5kaWFuNjQoKTsKLSAgfQotCi0gIC8qKiBSZWFk
IGEge0Bjb2RlIGZpeGVkMzJ9IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVi
bGljIGludCByZWFkRml4ZWQzMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHJl
YWRSYXdMaXR0bGVFbmRpYW4zMigpOwotICB9Ci0KLSAgLyoqIFJlYWQgYSB7QGNvZGUgYm9vbH0g
ZmllbGQgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgYm9vbGVhbiByZWFkQm9v
bCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHJlYWRSYXdWYXJpbnQzMigpICE9
IDA7Ci0gIH0KLQotICAvKiogUmVhZCBhIHtAY29kZSBzdHJpbmd9IGZpZWxkIHZhbHVlIGZyb20g
dGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIFN0cmluZyByZWFkU3RyaW5nKCkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgc2l6ZSA9IHJlYWRSYXdWYXJpbnQzMigpOwotICAgIGlm
IChzaXplIDw9IChidWZmZXJTaXplIC0gYnVmZmVyUG9zKSAmJiBzaXplID4gMCkgewotICAgICAg
Ly8gRmFzdCBwYXRoOiAgV2UgYWxyZWFkeSBoYXZlIHRoZSBieXRlcyBpbiBhIGNvbnRpZ3VvdXMg
YnVmZmVyLCBzbwotICAgICAgLy8gICBqdXN0IGNvcHkgZGlyZWN0bHkgZnJvbSBpdC4KLSAgICAg
IGZpbmFsIFN0cmluZyByZXN1bHQgPSBuZXcgU3RyaW5nKGJ1ZmZlciwgYnVmZmVyUG9zLCBzaXpl
LCBJbnRlcm5hbE5hbm8uVVRGXzgpOwotICAgICAgYnVmZmVyUG9zICs9IHNpemU7Ci0gICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBTbG93IHBhdGg6ICBCdWlsZCBh
IGJ5dGUgYXJyYXkgZmlyc3QgdGhlbiBjb3B5IGl0LgotICAgICAgcmV0dXJuIG5ldyBTdHJpbmco
cmVhZFJhd0J5dGVzKHNpemUpLCBJbnRlcm5hbE5hbm8uVVRGXzgpOwotICAgIH0KLSAgfQotCi0g
IC8qKiBSZWFkIGEge0Bjb2RlIGdyb3VwfSBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uICov
Ci0gIHB1YmxpYyB2b2lkIHJlYWRHcm91cChmaW5hbCBNZXNzYWdlTmFubyBtc2csIGZpbmFsIGlu
dCBmaWVsZE51bWJlcikKLSAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKHJlY3Vy
c2lvbkRlcHRoID49IHJlY3Vyc2lvbkxpbWl0KSB7Ci0gICAgICB0aHJvdyBJbnZhbGlkUHJvdG9j
b2xCdWZmZXJOYW5vRXhjZXB0aW9uLnJlY3Vyc2lvbkxpbWl0RXhjZWVkZWQoKTsKLSAgICB9Ci0g
ICAgKytyZWN1cnNpb25EZXB0aDsKLSAgICBtc2cubWVyZ2VGcm9tKHRoaXMpOwotICAgIGNoZWNr
TGFzdFRhZ1dhcygKLSAgICAgIFdpcmVGb3JtYXROYW5vLm1ha2VUYWcoZmllbGROdW1iZXIsIFdp
cmVGb3JtYXROYW5vLldJUkVUWVBFX0VORF9HUk9VUCkpOwotICAgIC0tcmVjdXJzaW9uRGVwdGg7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWFkTWVzc2FnZShmaW5hbCBNZXNzYWdlTmFubyBtc2cp
Ci0gICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZpbmFsIGludCBsZW5ndGggPSByZWFk
UmF3VmFyaW50MzIoKTsKLSAgICBpZiAocmVjdXJzaW9uRGVwdGggPj0gcmVjdXJzaW9uTGltaXQp
IHsKLSAgICAgIHRocm93IEludmFsaWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24ucmVjdXJz
aW9uTGltaXRFeGNlZWRlZCgpOwotICAgIH0KLSAgICBmaW5hbCBpbnQgb2xkTGltaXQgPSBwdXNo
TGltaXQobGVuZ3RoKTsKLSAgICArK3JlY3Vyc2lvbkRlcHRoOwotICAgIG1zZy5tZXJnZUZyb20o
dGhpcyk7Ci0gICAgY2hlY2tMYXN0VGFnV2FzKDApOwotICAgIC0tcmVjdXJzaW9uRGVwdGg7Ci0g
ICAgcG9wTGltaXQob2xkTGltaXQpOwotICB9Ci0KLSAgLyoqIFJlYWQgYSB7QGNvZGUgYnl0ZXN9
IGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGJ5dGVbXSByZWFkQnl0
ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZpbmFsIGludCBzaXplID0gcmVhZFJhd1Zh
cmludDMyKCk7Ci0gICAgaWYgKHNpemUgPD0gKGJ1ZmZlclNpemUgLSBidWZmZXJQb3MpICYmIHNp
emUgPiAwKSB7Ci0gICAgICAvLyBGYXN0IHBhdGg6ICBXZSBhbHJlYWR5IGhhdmUgdGhlIGJ5dGVz
IGluIGEgY29udGlndW91cyBidWZmZXIsIHNvCi0gICAgICAvLyAgIGp1c3QgY29weSBkaXJlY3Rs
eSBmcm9tIGl0LgotICAgICAgZmluYWwgYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW3NpemVdOwot
ICAgICAgU3lzdGVtLmFycmF5Y29weShidWZmZXIsIGJ1ZmZlclBvcywgcmVzdWx0LCAwLCBzaXpl
KTsKLSAgICAgIGJ1ZmZlclBvcyArPSBzaXplOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
IGVsc2UgaWYgKHNpemUgPT0gMCkgewotICAgICAgcmV0dXJuIFdpcmVGb3JtYXROYW5vLkVNUFRZ
X0JZVEVTOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBTbG93IHBhdGg6ICBCdWlsZCBhIGJ5dGUg
YXJyYXkgZmlyc3QgdGhlbiBjb3B5IGl0LgotICAgICAgcmV0dXJuIHJlYWRSYXdCeXRlcyhzaXpl
KTsKLSAgICB9Ci0gIH0KLQotICAvKiogUmVhZCBhIHtAY29kZSB1aW50MzJ9IGZpZWxkIHZhbHVl
IGZyb20gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIGludCByZWFkVUludDMyKCkgdGhyb3dzIElP
RXhjZXB0aW9uIHsKLSAgICByZXR1cm4gcmVhZFJhd1ZhcmludDMyKCk7Ci0gIH0KLQotICAvKioK
LSAgICogUmVhZCBhbiBlbnVtIGZpZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4gIENhbGxlciBp
cyByZXNwb25zaWJsZQotICAgKiBmb3IgY29udmVydGluZyB0aGUgbnVtZXJpYyB2YWx1ZSB0byBh
biBhY3R1YWwgZW51bS4KLSAgICovCi0gIHB1YmxpYyBpbnQgcmVhZEVudW0oKSB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgIHJldHVybiByZWFkUmF3VmFyaW50MzIoKTsKLSAgfQotCi0gIC8qKiBS
ZWFkIGFuIHtAY29kZSBzZml4ZWQzMn0gZmllbGQgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLiAqLwot
ICBwdWJsaWMgaW50IHJlYWRTRml4ZWQzMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0
dXJuIHJlYWRSYXdMaXR0bGVFbmRpYW4zMigpOwotICB9Ci0KLSAgLyoqIFJlYWQgYW4ge0Bjb2Rl
IHNmaXhlZDY0fSBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyBsb25n
IHJlYWRTRml4ZWQ2NCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIHJlYWRSYXdM
aXR0bGVFbmRpYW42NCgpOwotICB9Ci0KLSAgLyoqIFJlYWQgYW4ge0Bjb2RlIHNpbnQzMn0gZmll
bGQgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgaW50IHJlYWRTSW50MzIoKSB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHJldHVybiBkZWNvZGVaaWdaYWczMihyZWFkUmF3VmFy
aW50MzIoKSk7Ci0gIH0KLQotICAvKiogUmVhZCBhbiB7QGNvZGUgc2ludDY0fSBmaWVsZCB2YWx1
ZSBmcm9tIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyBsb25nIHJlYWRTSW50NjQoKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgIHJldHVybiBkZWNvZGVaaWdaYWc2NChyZWFkUmF3VmFyaW50NjQo
KSk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gIC8qKgotICAgKiBSZWFkIGEgcmF3IFZhcmlu
dCBmcm9tIHRoZSBzdHJlYW0uICBJZiBsYXJnZXIgdGhhbiAzMiBiaXRzLCBkaXNjYXJkIHRoZQot
ICAgKiB1cHBlciBiaXRzLgotICAgKi8KLSAgcHVibGljIGludCByZWFkUmF3VmFyaW50MzIoKSB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGJ5dGUgdG1wID0gcmVhZFJhd0J5dGUoKTsKLSAgICBp
ZiAodG1wID49IDApIHsKLSAgICAgIHJldHVybiB0bXA7Ci0gICAgfQotICAgIGludCByZXN1bHQg
PSB0bXAgJiAweDdmOwotICAgIGlmICgodG1wID0gcmVhZFJhd0J5dGUoKSkgPj0gMCkgewotICAg
ICAgcmVzdWx0IHw9IHRtcCA8PCA3OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXN1bHQgfD0gKHRt
cCAmIDB4N2YpIDw8IDc7Ci0gICAgICBpZiAoKHRtcCA9IHJlYWRSYXdCeXRlKCkpID49IDApIHsK
LSAgICAgICAgcmVzdWx0IHw9IHRtcCA8PCAxNDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
c3VsdCB8PSAodG1wICYgMHg3ZikgPDwgMTQ7Ci0gICAgICAgIGlmICgodG1wID0gcmVhZFJhd0J5
dGUoKSkgPj0gMCkgewotICAgICAgICAgIHJlc3VsdCB8PSB0bXAgPDwgMjE7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgcmVzdWx0IHw9ICh0bXAgJiAweDdmKSA8PCAyMTsKLSAgICAgICAg
ICByZXN1bHQgfD0gKHRtcCA9IHJlYWRSYXdCeXRlKCkpIDw8IDI4OwotICAgICAgICAgIGlmICh0
bXAgPCAwKSB7Ci0gICAgICAgICAgICAvLyBEaXNjYXJkIHVwcGVyIDMyIGJpdHMuCi0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgICBpZiAocmVh
ZFJhd0J5dGUoKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyb3cgSW52YWxpZFByb3Rv
Y29sQnVmZmVyTmFub0V4Y2VwdGlvbi5tYWxmb3JtZWRWYXJpbnQoKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8q
KiBSZWFkIGEgcmF3IFZhcmludCBmcm9tIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyBsb25nIHJl
YWRSYXdWYXJpbnQ2NCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaW50IHNoaWZ0ID0gMDsK
LSAgICBsb25nIHJlc3VsdCA9IDA7Ci0gICAgd2hpbGUgKHNoaWZ0IDwgNjQpIHsKLSAgICAgIGZp
bmFsIGJ5dGUgYiA9IHJlYWRSYXdCeXRlKCk7Ci0gICAgICByZXN1bHQgfD0gKGxvbmcpKGIgJiAw
eDdGKSA8PCBzaGlmdDsKLSAgICAgIGlmICgoYiAmIDB4ODApID09IDApIHsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIHNoaWZ0ICs9IDc7Ci0gICAgfQotICAgIHRocm93
IEludmFsaWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24ubWFsZm9ybWVkVmFyaW50KCk7Ci0g
IH0KLQotICAvKiogUmVhZCBhIDMyLWJpdCBsaXR0bGUtZW5kaWFuIGludGVnZXIgZnJvbSB0aGUg
c3RyZWFtLiAqLwotICBwdWJsaWMgaW50IHJlYWRSYXdMaXR0bGVFbmRpYW4zMigpIHRocm93cyBJ
T0V4Y2VwdGlvbiB7Ci0gICAgZmluYWwgYnl0ZSBiMSA9IHJlYWRSYXdCeXRlKCk7Ci0gICAgZmlu
YWwgYnl0ZSBiMiA9IHJlYWRSYXdCeXRlKCk7Ci0gICAgZmluYWwgYnl0ZSBiMyA9IHJlYWRSYXdC
eXRlKCk7Ci0gICAgZmluYWwgYnl0ZSBiNCA9IHJlYWRSYXdCeXRlKCk7Ci0gICAgcmV0dXJuICgo
YjEgJiAweGZmKSAgICAgICkgfAotICAgICAgICAgICAoKGIyICYgMHhmZikgPDwgIDgpIHwKLSAg
ICAgICAgICAgKChiMyAmIDB4ZmYpIDw8IDE2KSB8Ci0gICAgICAgICAgICgoYjQgJiAweGZmKSA8
PCAyNCk7Ci0gIH0KLQotICAvKiogUmVhZCBhIDY0LWJpdCBsaXR0bGUtZW5kaWFuIGludGVnZXIg
ZnJvbSB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgbG9uZyByZWFkUmF3TGl0dGxlRW5kaWFuNjQo
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZpbmFsIGJ5dGUgYjEgPSByZWFkUmF3Qnl0ZSgp
OwotICAgIGZpbmFsIGJ5dGUgYjIgPSByZWFkUmF3Qnl0ZSgpOwotICAgIGZpbmFsIGJ5dGUgYjMg
PSByZWFkUmF3Qnl0ZSgpOwotICAgIGZpbmFsIGJ5dGUgYjQgPSByZWFkUmF3Qnl0ZSgpOwotICAg
IGZpbmFsIGJ5dGUgYjUgPSByZWFkUmF3Qnl0ZSgpOwotICAgIGZpbmFsIGJ5dGUgYjYgPSByZWFk
UmF3Qnl0ZSgpOwotICAgIGZpbmFsIGJ5dGUgYjcgPSByZWFkUmF3Qnl0ZSgpOwotICAgIGZpbmFs
IGJ5dGUgYjggPSByZWFkUmF3Qnl0ZSgpOwotICAgIHJldHVybiAoKChsb25nKWIxICYgMHhmZikg
ICAgICApIHwKLSAgICAgICAgICAgKCgobG9uZyliMiAmIDB4ZmYpIDw8ICA4KSB8Ci0gICAgICAg
ICAgICgoKGxvbmcpYjMgJiAweGZmKSA8PCAxNikgfAotICAgICAgICAgICAoKChsb25nKWI0ICYg
MHhmZikgPDwgMjQpIHwKLSAgICAgICAgICAgKCgobG9uZyliNSAmIDB4ZmYpIDw8IDMyKSB8Ci0g
ICAgICAgICAgICgoKGxvbmcpYjYgJiAweGZmKSA8PCA0MCkgfAotICAgICAgICAgICAoKChsb25n
KWI3ICYgMHhmZikgPDwgNDgpIHwKLSAgICAgICAgICAgKCgobG9uZyliOCAmIDB4ZmYpIDw8IDU2
KTsKLSAgfQotCi0gIC8qKgotICAgKiBEZWNvZGUgYSBaaWdaYWctZW5jb2RlZCAzMi1iaXQgdmFs
dWUuICBaaWdaYWcgZW5jb2RlcyBzaWduZWQgaW50ZWdlcnMKLSAgICogaW50byB2YWx1ZXMgdGhh
dCBjYW4gYmUgZWZmaWNpZW50bHkgZW5jb2RlZCB3aXRoIHZhcmludC4gIChPdGhlcndpc2UsCi0g
ICAqIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyB0byBi
ZSB2YXJpbnQgZW5jb2RlZCwKLSAgICogdGh1cyBhbHdheXMgdGFraW5nIDEwIGJ5dGVzIG9uIHRo
ZSB3aXJlLikKLSAgICoKLSAgICogQHBhcmFtIG4gQW4gdW5zaWduZWQgMzItYml0IGludGVnZXIs
IHN0b3JlZCBpbiBhIHNpZ25lZCBpbnQgYmVjYXVzZQotICAgKiAgICAgICAgICBKYXZhIGhhcyBu
byBleHBsaWNpdCB1bnNpZ25lZCBzdXBwb3J0LgotICAgKiBAcmV0dXJuIEEgc2lnbmVkIDMyLWJp
dCBpbnRlZ2VyLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZGVjb2RlWmlnWmFnMzIoZmlu
YWwgaW50IG4pIHsKLSAgICByZXR1cm4gKG4gPj4+IDEpIF4gLShuICYgMSk7Ci0gIH0KLQotICAv
KioKLSAgICogRGVjb2RlIGEgWmlnWmFnLWVuY29kZWQgNjQtYml0IHZhbHVlLiAgWmlnWmFnIGVu
Y29kZXMgc2lnbmVkIGludGVnZXJzCi0gICAqIGludG8gdmFsdWVzIHRoYXQgY2FuIGJlIGVmZmlj
aWVudGx5IGVuY29kZWQgd2l0aCB2YXJpbnQuICAoT3RoZXJ3aXNlLAotICAgKiBuZWdhdGl2ZSB2
YWx1ZXMgbXVzdCBiZSBzaWduLWV4dGVuZGVkIHRvIDY0IGJpdHMgdG8gYmUgdmFyaW50IGVuY29k
ZWQsCi0gICAqIHRodXMgYWx3YXlzIHRha2luZyAxMCBieXRlcyBvbiB0aGUgd2lyZS4pCi0gICAq
Ci0gICAqIEBwYXJhbSBuIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLCBzdG9yZWQgaW4gYSBz
aWduZWQgaW50IGJlY2F1c2UKLSAgICogICAgICAgICAgSmF2YSBoYXMgbm8gZXhwbGljaXQgdW5z
aWduZWQgc3VwcG9ydC4KLSAgICogQHJldHVybiBBIHNpZ25lZCA2NC1iaXQgaW50ZWdlci4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgbG9uZyBkZWNvZGVaaWdaYWc2NChmaW5hbCBsb25nIG4pIHsK
LSAgICByZXR1cm4gKG4gPj4+IDEpIF4gLShuICYgMSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIHByaXZhdGUgZmluYWwgYnl0ZVtdIGJ1ZmZlcjsKLSAgcHJpdmF0ZSBpbnQgYnVmZmVyU3Rh
cnQ7Ci0gIHByaXZhdGUgaW50IGJ1ZmZlclNpemU7Ci0gIHByaXZhdGUgaW50IGJ1ZmZlclNpemVB
ZnRlckxpbWl0OwotICBwcml2YXRlIGludCBidWZmZXJQb3M7Ci0gIHByaXZhdGUgaW50IGxhc3RU
YWc7Ci0KLSAgLyoqIFRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBjdXJy
ZW50IG1lc3NhZ2UuICovCi0gIHByaXZhdGUgaW50IGN1cnJlbnRMaW1pdCA9IEludGVnZXIuTUFY
X1ZBTFVFOwotCi0gIC8qKiBTZWUgc2V0UmVjdXJzaW9uTGltaXQoKSAqLwotICBwcml2YXRlIGlu
dCByZWN1cnNpb25EZXB0aDsKLSAgcHJpdmF0ZSBpbnQgcmVjdXJzaW9uTGltaXQgPSBERUZBVUxU
X1JFQ1VSU0lPTl9MSU1JVDsKLQotICAvKiogU2VlIHNldFNpemVMaW1pdCgpICovCi0gIHByaXZh
dGUgaW50IHNpemVMaW1pdCA9IERFRkFVTFRfU0laRV9MSU1JVDsKLQotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgREVGQVVMVF9SRUNVUlNJT05fTElNSVQgPSA2NDsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IERFRkFVTFRfU0laRV9MSU1JVCA9IDY0IDw8IDIwOyAgLy8gNjRNQgotCi0g
IHByaXZhdGUgQ29kZWRJbnB1dEJ5dGVCdWZmZXJOYW5vKGZpbmFsIGJ5dGVbXSBidWZmZXIsIGZp
bmFsIGludCBvZmYsIGZpbmFsIGludCBsZW4pIHsKLSAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjsK
LSAgICBidWZmZXJTdGFydCA9IG9mZjsKLSAgICBidWZmZXJTaXplID0gb2ZmICsgbGVuOwotICAg
IGJ1ZmZlclBvcyA9IG9mZjsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIG1heGltdW0gbWVz
c2FnZSByZWN1cnNpb24gZGVwdGguICBJbiBvcmRlciB0byBwcmV2ZW50IG1hbGljaW91cwotICAg
KiBtZXNzYWdlcyBmcm9tIGNhdXNpbmcgc3RhY2sgb3ZlcmZsb3dzLCB7QGNvZGUgQ29kZWRJbnB1
dFN0cmVhbX0gbGltaXRzCi0gICAqIGhvdyBkZWVwbHkgbWVzc2FnZXMgbWF5IGJlIG5lc3RlZC4g
IFRoZSBkZWZhdWx0IGxpbWl0IGlzIDY0LgotICAgKgotICAgKiBAcmV0dXJuIHRoZSBvbGQgbGlt
aXQuCi0gICAqLwotICBwdWJsaWMgaW50IHNldFJlY3Vyc2lvbkxpbWl0KGZpbmFsIGludCBsaW1p
dCkgewotICAgIGlmIChsaW1pdCA8IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24oCi0gICAgICAgICJSZWN1cnNpb24gbGltaXQgY2Fubm90IGJlIG5lZ2F0aXZl
OiAiICsgbGltaXQpOwotICAgIH0KLSAgICBmaW5hbCBpbnQgb2xkTGltaXQgPSByZWN1cnNpb25M
aW1pdDsKLSAgICByZWN1cnNpb25MaW1pdCA9IGxpbWl0OwotICAgIHJldHVybiBvbGRMaW1pdDsK
LSAgfQotCi0gIC8qKgotICAgKiBTZXQgdGhlIG1heGltdW0gbWVzc2FnZSBzaXplLiAgSW4gb3Jk
ZXIgdG8gcHJldmVudCBtYWxpY2lvdXMKLSAgICogbWVzc2FnZXMgZnJvbSBleGhhdXN0aW5nIG1l
bW9yeSBvciBjYXVzaW5nIGludGVnZXIgb3ZlcmZsb3dzLAotICAgKiB7QGNvZGUgQ29kZWRJbnB1
dFN0cmVhbX0gbGltaXRzIGhvdyBsYXJnZSBhIG1lc3NhZ2UgbWF5IGJlLgotICAgKiBUaGUgZGVm
YXVsdCBsaW1pdCBpcyA2NE1CLiAgWW91IHNob3VsZCBzZXQgdGhpcyBsaW1pdCBhcyBzbWFsbAot
ICAgKiBhcyB5b3UgY2FuIHdpdGhvdXQgaGFybWluZyB5b3VyIGFwcCdzIGZ1bmN0aW9uYWxpdHku
ICBOb3RlIHRoYXQKLSAgICogc2l6ZSBsaW1pdHMgb25seSBhcHBseSB3aGVuIHJlYWRpbmcgZnJv
bSBhbiB7QGNvZGUgSW5wdXRTdHJlYW19LCBub3QKLSAgICogd2hlbiBjb25zdHJ1Y3RlZCBhcm91
bmQgYSByYXcgYnl0ZSBhcnJheS4KLSAgICogPHA+Ci0gICAqIElmIHlvdSB3YW50IHRvIHJlYWQg
c2V2ZXJhbCBtZXNzYWdlcyBmcm9tIGEgc2luZ2xlIENvZGVkSW5wdXRTdHJlYW0sIHlvdQotICAg
KiBjb3VsZCBjYWxsIHtAbGluayAjcmVzZXRTaXplQ291bnRlcigpfSBhZnRlciBlYWNoIG9uZSB0
byBhdm9pZCBoaXR0aW5nIHRoZQotICAgKiBzaXplIGxpbWl0LgotICAgKgotICAgKiBAcmV0dXJu
IHRoZSBvbGQgbGltaXQuCi0gICAqLwotICBwdWJsaWMgaW50IHNldFNpemVMaW1pdChmaW5hbCBp
bnQgbGltaXQpIHsKLSAgICBpZiAobGltaXQgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdh
bEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAiU2l6ZSBsaW1pdCBjYW5ub3QgYmUgbmVnYXRp
dmU6ICIgKyBsaW1pdCk7Ci0gICAgfQotICAgIGZpbmFsIGludCBvbGRMaW1pdCA9IHNpemVMaW1p
dDsKLSAgICBzaXplTGltaXQgPSBsaW1pdDsKLSAgICByZXR1cm4gb2xkTGltaXQ7Ci0gIH0KLQot
ICAvKioKLSAgICogUmVzZXRzIHRoZSBjdXJyZW50IHNpemUgY291bnRlciB0byB6ZXJvIChzZWUg
e0BsaW5rICNzZXRTaXplTGltaXQoaW50KX0pLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzZXRT
aXplQ291bnRlcigpIHsKLSAgfQotCi0gIC8qKgotICAgKiBTZXRzIHtAY29kZSBjdXJyZW50TGlt
aXR9IHRvIChjdXJyZW50IHBvc2l0aW9uKSArIHtAY29kZSBieXRlTGltaXR9LiAgVGhpcwotICAg
KiBpcyBjYWxsZWQgd2hlbiBkZXNjZW5kaW5nIGludG8gYSBsZW5ndGgtZGVsaW1pdGVkIGVtYmVk
ZGVkIG1lc3NhZ2UuCi0gICAqCi0gICAqIEByZXR1cm4gdGhlIG9sZCBsaW1pdC4KLSAgICovCi0g
IHB1YmxpYyBpbnQgcHVzaExpbWl0KGludCBieXRlTGltaXQpIHRocm93cyBJbnZhbGlkUHJvdG9j
b2xCdWZmZXJOYW5vRXhjZXB0aW9uIHsKLSAgICBpZiAoYnl0ZUxpbWl0IDwgMCkgewotICAgICAg
dGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbi5uZWdhdGl2ZVNpemUoKTsK
LSAgICB9Ci0gICAgYnl0ZUxpbWl0ICs9IGJ1ZmZlclBvczsKLSAgICBmaW5hbCBpbnQgb2xkTGlt
aXQgPSBjdXJyZW50TGltaXQ7Ci0gICAgaWYgKGJ5dGVMaW1pdCA+IG9sZExpbWl0KSB7Ci0gICAg
ICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJOYW5vRXhjZXB0aW9uLnRydW5jYXRlZE1lc3Nh
Z2UoKTsKLSAgICB9Ci0gICAgY3VycmVudExpbWl0ID0gYnl0ZUxpbWl0OwotCi0gICAgcmVjb21w
dXRlQnVmZmVyU2l6ZUFmdGVyTGltaXQoKTsKLQotICAgIHJldHVybiBvbGRMaW1pdDsKLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCByZWNvbXB1dGVCdWZmZXJTaXplQWZ0ZXJMaW1pdCgpIHsKLSAgICBi
dWZmZXJTaXplICs9IGJ1ZmZlclNpemVBZnRlckxpbWl0OwotICAgIGZpbmFsIGludCBidWZmZXJF
bmQgPSBidWZmZXJTaXplOwotICAgIGlmIChidWZmZXJFbmQgPiBjdXJyZW50TGltaXQpIHsKLSAg
ICAgIC8vIExpbWl0IGlzIGluIGN1cnJlbnQgYnVmZmVyLgotICAgICAgYnVmZmVyU2l6ZUFmdGVy
TGltaXQgPSBidWZmZXJFbmQgLSBjdXJyZW50TGltaXQ7Ci0gICAgICBidWZmZXJTaXplIC09IGJ1
ZmZlclNpemVBZnRlckxpbWl0OwotICAgIH0gZWxzZSB7Ci0gICAgICBidWZmZXJTaXplQWZ0ZXJM
aW1pdCA9IDA7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIERpc2NhcmRzIHRoZSBjdXJyZW50
IGxpbWl0LCByZXR1cm5pbmcgdG8gdGhlIHByZXZpb3VzIGxpbWl0LgotICAgKgotICAgKiBAcGFy
YW0gb2xkTGltaXQgVGhlIG9sZCBsaW1pdCwgYXMgcmV0dXJuZWQgYnkge0Bjb2RlIHB1c2hMaW1p
dH0uCi0gICAqLwotICBwdWJsaWMgdm9pZCBwb3BMaW1pdChmaW5hbCBpbnQgb2xkTGltaXQpIHsK
LSAgICBjdXJyZW50TGltaXQgPSBvbGRMaW1pdDsKLSAgICByZWNvbXB1dGVCdWZmZXJTaXplQWZ0
ZXJMaW1pdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRl
cyB0byBiZSByZWFkIGJlZm9yZSB0aGUgY3VycmVudCBsaW1pdC4KLSAgICogSWYgbm8gbGltaXQg
aXMgc2V0LCByZXR1cm5zIC0xLgotICAgKi8KLSAgcHVibGljIGludCBnZXRCeXRlc1VudGlsTGlt
aXQoKSB7Ci0gICAgaWYgKGN1cnJlbnRMaW1pdCA9PSBJbnRlZ2VyLk1BWF9WQUxVRSkgewotICAg
ICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGZpbmFsIGludCBjdXJyZW50QWJzb2x1dGVQb3Np
dGlvbiA9IGJ1ZmZlclBvczsKLSAgICByZXR1cm4gY3VycmVudExpbWl0IC0gY3VycmVudEFic29s
dXRlUG9zaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJl
YW0gaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuICBUaGlzIGlzIHRoZQotICAgKiBj
YXNlIGlmIGVpdGhlciB0aGUgZW5kIG9mIHRoZSB1bmRlcmx5aW5nIGlucHV0IHNvdXJjZSBoYXMg
YmVlbiByZWFjaGVkIG9yCi0gICAqIGlmIHRoZSBzdHJlYW0gaGFzIHJlYWNoZWQgYSBsaW1pdCBj
cmVhdGVkIHVzaW5nIHtAbGluayAjcHVzaExpbWl0KGludCl9LgotICAgKi8KLSAgcHVibGljIGJv
b2xlYW4gaXNBdEVuZCgpIHsKLSAgICByZXR1cm4gYnVmZmVyUG9zID09IGJ1ZmZlclNpemU7Ci0g
IH0KLQotICAvKioKLSAgICogR2V0IGN1cnJlbnQgcG9zaXRpb24gaW4gYnVmZmVyIHJlbGF0aXZl
IHRvIGJlZ2lubmluZyBvZmZzZXQuCi0gICAqLwotICBwdWJsaWMgaW50IGdldFBvc2l0aW9uKCkg
ewotICAgIHJldHVybiBidWZmZXJQb3MgLSBidWZmZXJTdGFydDsKLSAgfQotCi0gIC8qKgotICAg
KiBSZXRyaWV2ZXMgYSBzdWJzZXQgb2YgZGF0YSBpbiB0aGUgYnVmZmVyLiBUaGUgcmV0dXJuZWQg
YXJyYXkgaXMgbm90IGJhY2tlZCBieSB0aGUgb3JpZ2luYWwKLSAgICogYnVmZmVyIGFycmF5Lgot
ICAgKgotICAgKiBAcGFyYW0gb2Zmc2V0IHRoZSBwb3NpdGlvbiAocmVsYXRpdmUgdG8gdGhlIGJ1
ZmZlciBzdGFydCBwb3NpdGlvbikgdG8gc3RhcnQgYXQuCi0gICAqIEBwYXJhbSBsZW5ndGggdGhl
IG51bWJlciBvZiBieXRlcyB0byByZXRyaWV2ZS4KLSAgICovCi0gIHB1YmxpYyBieXRlW10gZ2V0
RGF0YShpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0gICAgaWYgKGxlbmd0aCA9PSAwKSB7Ci0g
ICAgICByZXR1cm4gV2lyZUZvcm1hdE5hbm8uRU1QVFlfQllURVM7Ci0gICAgfQotICAgIGJ5dGVb
XSBjb3B5ID0gbmV3IGJ5dGVbbGVuZ3RoXTsKLSAgICBpbnQgc3RhcnQgPSBidWZmZXJTdGFydCAr
IG9mZnNldDsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZmZlciwgc3RhcnQsIGNvcHksIDAsIGxl
bmd0aCk7Ci0gICAgcmV0dXJuIGNvcHk7Ci0gIH0KLQotICAvKioKLSAgICogUmV3aW5kIHRvIHBy
ZXZpb3VzIHBvc2l0aW9uLiBDYW5ub3QgZ28gZm9yd2FyZC4KLSAgICovCi0gIHB1YmxpYyB2b2lk
IHJld2luZFRvUG9zaXRpb24oaW50IHBvc2l0aW9uKSB7Ci0gICAgaWYgKHBvc2l0aW9uID4gYnVm
ZmVyUG9zIC0gYnVmZmVyU3RhcnQpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24oCi0gICAgICAgICAgICAgICJQb3NpdGlvbiAiICsgcG9zaXRpb24gKyAiIGlzIGJl
eW9uZCBjdXJyZW50ICIgKyAoYnVmZmVyUG9zIC0gYnVmZmVyU3RhcnQpKTsKLSAgICB9Ci0gICAg
aWYgKHBvc2l0aW9uIDwgMCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2Vw
dGlvbigiQmFkIHBvc2l0aW9uICIgKyBwb3NpdGlvbik7Ci0gICAgfQotICAgIGJ1ZmZlclBvcyA9
IGJ1ZmZlclN0YXJ0ICsgcG9zaXRpb247Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCBvbmUgYnl0
ZSBmcm9tIHRoZSBpbnB1dC4KLSAgICoKLSAgICogQHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZm
ZXJOYW5vRXhjZXB0aW9uIFRoZSBlbmQgb2YgdGhlIHN0cmVhbSBvciB0aGUgY3VycmVudAotICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCB3YXMgcmVhY2hl
ZC4KLSAgICovCi0gIHB1YmxpYyBieXRlIHJlYWRSYXdCeXRlKCkgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICBpZiAoYnVmZmVyUG9zID09IGJ1ZmZlclNpemUpIHsKLSAgICAgIHRocm93IEludmFs
aWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24udHJ1bmNhdGVkTWVzc2FnZSgpOwotICAgIH0K
LSAgICByZXR1cm4gYnVmZmVyW2J1ZmZlclBvcysrXTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFk
IGEgZml4ZWQgc2l6ZSBvZiBieXRlcyBmcm9tIHRoZSBpbnB1dC4KLSAgICoKLSAgICogQHRocm93
cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJOYW5vRXhjZXB0aW9uIFRoZSBlbmQgb2YgdGhlIHN0cmVh
bSBvciB0aGUgY3VycmVudAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW1pdCB3YXMgcmVhY2hlZC4KLSAgICovCi0gIHB1YmxpYyBieXRlW10gcmVhZFJhd0J5
dGVzKGZpbmFsIGludCBzaXplKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGlmIChzaXplIDwg
MCkgewotICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbi5uZWdh
dGl2ZVNpemUoKTsKLSAgICB9Ci0KLSAgICBpZiAoYnVmZmVyUG9zICsgc2l6ZSA+IGN1cnJlbnRM
aW1pdCkgewotICAgICAgLy8gUmVhZCB0byB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gYW55d2F5Lgot
ICAgICAgc2tpcFJhd0J5dGVzKGN1cnJlbnRMaW1pdCAtIGJ1ZmZlclBvcyk7Ci0gICAgICAvLyBU
aGVuIGZhaWwuCi0gICAgICB0aHJvdyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJOYW5vRXhjZXB0aW9u
LnRydW5jYXRlZE1lc3NhZ2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoc2l6ZSA8PSBidWZmZXJTaXpl
IC0gYnVmZmVyUG9zKSB7Ci0gICAgICAvLyBXZSBoYXZlIGFsbCB0aGUgYnl0ZXMgd2UgbmVlZCBh
bHJlYWR5LgotICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbc2l6ZV07Ci0gICAg
ICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZmZlciwgYnVmZmVyUG9zLCBieXRlcywgMCwgc2l6ZSk7Ci0g
ICAgICBidWZmZXJQb3MgKz0gc2l6ZTsKLSAgICAgIHJldHVybiBieXRlczsKLSAgICB9IGVsc2Ug
ewotICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbi50cnVuY2F0
ZWRNZXNzYWdlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWRzIGFuZCBkaXNjYXJk
cyB7QGNvZGUgc2l6ZX0gYnl0ZXMuCi0gICAqCi0gICAqIEB0aHJvd3MgSW52YWxpZFByb3RvY29s
QnVmZmVyTmFub0V4Y2VwdGlvbiBUaGUgZW5kIG9mIHRoZSBzdHJlYW0gb3IgdGhlIGN1cnJlbnQK
LSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgd2FzIHJl
YWNoZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBza2lwUmF3Qnl0ZXMoZmluYWwgaW50IHNpemUp
IHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKHNpemUgPCAwKSB7Ci0gICAgICB0aHJvdyBJ
bnZhbGlkUHJvdG9jb2xCdWZmZXJOYW5vRXhjZXB0aW9uLm5lZ2F0aXZlU2l6ZSgpOwotICAgIH0K
LQotICAgIGlmIChidWZmZXJQb3MgKyBzaXplID4gY3VycmVudExpbWl0KSB7Ci0gICAgICAvLyBS
ZWFkIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBhbnl3YXkuCi0gICAgICBza2lwUmF3Qnl0ZXMo
Y3VycmVudExpbWl0IC0gYnVmZmVyUG9zKTsKLSAgICAgIC8vIFRoZW4gZmFpbC4KLSAgICAgIHRo
cm93IEludmFsaWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24udHJ1bmNhdGVkTWVzc2FnZSgp
OwotICAgIH0KLQotICAgIGlmIChzaXplIDw9IGJ1ZmZlclNpemUgLSBidWZmZXJQb3MpIHsKLSAg
ICAgIC8vIFdlIGhhdmUgYWxsIHRoZSBieXRlcyB3ZSBuZWVkIGFscmVhZHkuCi0gICAgICBidWZm
ZXJQb3MgKz0gc2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgdGhyb3cgSW52YWxpZFByb3RvY29s
QnVmZmVyTmFub0V4Y2VwdGlvbi50cnVuY2F0ZWRNZXNzYWdlKCk7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gUmVhZCBhIHByaW1pdGl2ZSB0eXBlLgotICBPYmplY3QgcmVhZFByaW1pdGl2ZUZpZWxkKGlu
dCB0eXBlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAg
Y2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9ET1VCTEU6Ci0gICAgICAgICAgcmV0dXJuIHJlYWREb3Vi
bGUoKTsKLSAgICAgIGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfRkxPQVQ6Ci0gICAgICAgICAgcmV0
dXJuIHJlYWRGbG9hdCgpOwotICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9JTlQ2NDoKLSAg
ICAgICAgICByZXR1cm4gcmVhZEludDY0KCk7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBF
X1VJTlQ2NDoKLSAgICAgICAgICByZXR1cm4gcmVhZFVJbnQ2NCgpOwotICAgICAgY2FzZSBJbnRl
cm5hbE5hbm8uVFlQRV9JTlQzMjoKLSAgICAgICAgICByZXR1cm4gcmVhZEludDMyKCk7Ci0gICAg
ICBjYXNlIEludGVybmFsTmFuby5UWVBFX0ZJWEVENjQ6Ci0gICAgICAgICAgcmV0dXJuIHJlYWRG
aXhlZDY0KCk7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBFX0ZJWEVEMzI6Ci0gICAgICAg
ICAgcmV0dXJuIHJlYWRGaXhlZDMyKCk7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBFX0JP
T0w6Ci0gICAgICAgICAgcmV0dXJuIHJlYWRCb29sKCk7Ci0gICAgICBjYXNlIEludGVybmFsTmFu
by5UWVBFX1NUUklORzoKLSAgICAgICAgICByZXR1cm4gcmVhZFN0cmluZygpOwotICAgICAgY2Fz
ZSBJbnRlcm5hbE5hbm8uVFlQRV9CWVRFUzoKLSAgICAgICAgICByZXR1cm4gcmVhZEJ5dGVzKCk7
Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBFX1VJTlQzMjoKLSAgICAgICAgICByZXR1cm4g
cmVhZFVJbnQzMigpOwotICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9FTlVNOgotICAgICAg
ICAgIHJldHVybiByZWFkRW51bSgpOwotICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9TRklY
RUQzMjoKLSAgICAgICAgICByZXR1cm4gcmVhZFNGaXhlZDMyKCk7Ci0gICAgICBjYXNlIEludGVy
bmFsTmFuby5UWVBFX1NGSVhFRDY0OgotICAgICAgICAgIHJldHVybiByZWFkU0ZpeGVkNjQoKTsK
LSAgICAgIGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfU0lOVDMyOgotICAgICAgICAgIHJldHVybiBy
ZWFkU0ludDMyKCk7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBFX1NJTlQ2NDoKLSAgICAg
ICAgICByZXR1cm4gcmVhZFNJbnQ2NCgpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgICB0aHJv
dyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIHR5cGUgIiArIHR5cGUpOwot
ICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvbWFpbi9qYXZhL2NvbS9nb29n
bGUvcHJvdG9idWYvbmFuby9Db2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vLmphdmEgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5v
L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL0NvZGVkT3V0cHV0Qnl0ZUJ1
ZmZlck5hbm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIyYWRhOGUxZjgy
MzBjMWJiMTljNzAyZjNkOWQ0NjM0NzE0YjkwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9uYW5vL0NvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8uamF2YQorKysgL2Rldi9udWxsCkBA
IC0xLDEyMTQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBh
Y2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2Vw
dGlvbjsKLWltcG9ydCBqYXZhLm5pby5CdWZmZXJPdmVyZmxvd0V4Y2VwdGlvbjsKLWltcG9ydCBq
YXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKLWltcG9ydCBq
YXZhLm5pby5SZWFkT25seUJ1ZmZlckV4Y2VwdGlvbjsKLQotLyoqCi0gKiBFbmNvZGVzIGFuZCB3
cml0ZXMgcHJvdG9jb2wgbWVzc2FnZSBmaWVsZHMuCi0gKgotICogPHA+VGhpcyBjbGFzcyBjb250
YWlucyB0d28ga2luZHMgb2YgbWV0aG9kczogIG1ldGhvZHMgdGhhdCB3cml0ZSBzcGVjaWZpYwot
ICogcHJvdG9jb2wgbWVzc2FnZSBjb25zdHJ1Y3RzIGFuZCBmaWVsZCB0eXBlcyAoZS5nLiB7QGxp
bmsgI3dyaXRlVGFnfSBhbmQKLSAqIHtAbGluayAjd3JpdGVJbnQzMn0pIGFuZCBtZXRob2RzIHRo
YXQgd3JpdGUgbG93LWxldmVsIHZhbHVlcyAoZS5nLgotICoge0BsaW5rICN3cml0ZVJhd1Zhcmlu
dDMyfSBhbmQge0BsaW5rICN3cml0ZVJhd0J5dGVzfSkuICBJZiB5b3UgYXJlCi0gKiB3cml0aW5n
IGVuY29kZWQgcHJvdG9jb2wgbWVzc2FnZXMsIHlvdSBzaG91bGQgdXNlIHRoZSBmb3JtZXIgbWV0
aG9kcywgYnV0IGlmCi0gKiB5b3UgYXJlIHdyaXRpbmcgc29tZSBvdGhlciBmb3JtYXQgb2YgeW91
ciBvd24gZGVzaWduLCB1c2UgdGhlIGxhdHRlci4KLSAqCi0gKiA8cD5UaGlzIGNsYXNzIGlzIHRv
dGFsbHkgdW5zeW5jaHJvbml6ZWQuCi0gKgotICogQGF1dGhvciBrbmV0b25AZ29vZ2xlLmNvbSBL
ZW50b24gVmFyZGEKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZl
ck5hbm8gewotICAvKiBtYXggYnl0ZXMgcGVyIGphdmEgVVRGLTE2IGNoYXIgaW4gVVRGLTggKi8K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9VVEY4X0VYUEFOU0lPTiA9IDM7Ci0gIHBy
aXZhdGUgZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXI7Ci0KLSAgcHJpdmF0ZSBDb2RlZE91dHB1dEJ5
dGVCdWZmZXJOYW5vKGZpbmFsIGJ5dGVbXSBidWZmZXIsIGZpbmFsIGludCBvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGxlbmd0aCkgewotICAgIHRoaXMoQnl0
ZUJ1ZmZlci53cmFwKGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpKTsKLSAgfQotCi0gIHByaXZhdGUg
Q29kZWRPdXRwdXRCeXRlQnVmZmVyTmFubyhmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlcikgewotICAg
IHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAgIHRoaXMuYnVmZmVyLm9yZGVyKEJ5dGVPcmRlci5M
SVRUTEVfRU5ESUFOKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcge0Bjb2RlIENv
ZGVkT3V0cHV0U3RyZWFtfSB0aGF0IHdyaXRlcyBkaXJlY3RseSB0byB0aGUgZ2l2ZW4KLSAgICog
Ynl0ZSBhcnJheS4gIElmIG1vcmUgYnl0ZXMgYXJlIHdyaXR0ZW4gdGhhbiBmaXQgaW4gdGhlIGFy
cmF5LAotICAgKiB7QGxpbmsgT3V0T2ZTcGFjZUV4Y2VwdGlvbn0gd2lsbCBiZSB0aHJvd24uICBX
cml0aW5nIGRpcmVjdGx5IHRvIGEgZmxhdAotICAgKiBhcnJheSBpcyBmYXN0ZXIgdGhhbiB3cml0
aW5nIHRvIGFuIHtAY29kZSBPdXRwdXRTdHJlYW19LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBD
b2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vIG5ld0luc3RhbmNlKGZpbmFsIGJ5dGVbXSBmbGF0QXJy
YXkpIHsKLSAgICByZXR1cm4gbmV3SW5zdGFuY2UoZmxhdEFycmF5LCAwLCBmbGF0QXJyYXkubGVu
Z3RoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSBuZXcge0Bjb2RlIENvZGVkT3V0cHV0
U3RyZWFtfSB0aGF0IHdyaXRlcyBkaXJlY3RseSB0byB0aGUgZ2l2ZW4KLSAgICogYnl0ZSBhcnJh
eSBzbGljZS4gIElmIG1vcmUgYnl0ZXMgYXJlIHdyaXR0ZW4gdGhhbiBmaXQgaW4gdGhlIHNsaWNl
LAotICAgKiB7QGxpbmsgT3V0T2ZTcGFjZUV4Y2VwdGlvbn0gd2lsbCBiZSB0aHJvd24uICBXcml0
aW5nIGRpcmVjdGx5IHRvIGEgZmxhdAotICAgKiBhcnJheSBpcyBmYXN0ZXIgdGhhbiB3cml0aW5n
IHRvIGFuIHtAY29kZSBPdXRwdXRTdHJlYW19LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBDb2Rl
ZE91dHB1dEJ5dGVCdWZmZXJOYW5vIG5ld0luc3RhbmNlKGZpbmFsIGJ5dGVbXSBmbGF0QXJyYXks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50
IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aW5hbCBpbnQgbGVuZ3RoKSB7Ci0gICAgcmV0dXJuIG5ldyBDb2RlZE91dHB1dEJ5dGVCdWZmZXJO
YW5vKGZsYXRBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAvKiogV3JpdGUgYSB7QGNvZGUgZG91YmxlfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhl
IHN0cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVEb3VibGUoZmluYWwgaW50IGZpZWxkTnVt
YmVyLCBmaW5hbCBkb3VibGUgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXROYW5v
LldJUkVUWVBFX0ZJWEVENjQpOwotICAgIHdyaXRlRG91YmxlTm9UYWcodmFsdWUpOwotICB9Ci0K
LSAgLyoqIFdyaXRlIGEge0Bjb2RlIGZsb2F0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhl
IHN0cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVGbG9hdChmaW5hbCBpbnQgZmllbGROdW1i
ZXIsIGZpbmFsIGZsb2F0IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJ
T0V4Y2VwdGlvbiB7Ci0gICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXROYW5vLldJ
UkVUWVBFX0ZJWEVEMzIpOwotICAgIHdyaXRlRmxvYXROb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAv
KiogV3JpdGUgYSB7QGNvZGUgdWludDY0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0
cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVVSW50NjQoZmluYWwgaW50IGZpZWxkTnVtYmVy
LCBmaW5hbCBsb25nIHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9F
eGNlcHRpb24gewotICAgIHdyaXRlVGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0TmFuby5XSVJF
VFlQRV9WQVJJTlQpOwotICAgIHdyaXRlVUludDY0Tm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoq
IFdyaXRlIGFuIHtAY29kZSBpbnQ2NH0gZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJl
YW0uICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlSW50NjQoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBm
aW5hbCBsb25nIHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXROYW5vLldJUkVUWVBF
X1ZBUklOVCk7Ci0gICAgd3JpdGVJbnQ2NE5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKiBXcml0
ZSBhbiB7QGNvZGUgaW50MzJ9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3RyZWFtLiAq
LwotICBwdWJsaWMgdm9pZCB3cml0ZUludDMyKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwg
aW50IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7
Ci0gICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXROYW5vLldJUkVUWVBFX1ZBUklO
VCk7Ci0gICAgd3JpdGVJbnQzMk5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBhIHtA
Y29kZSBmaXhlZDY0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4gKi8KLSAg
cHVibGljIHZvaWQgd3JpdGVGaXhlZDY0KGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgbG9u
ZyB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7
Ci0gICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXROYW5vLldJUkVUWVBFX0ZJWEVE
NjQpOwotICAgIHdyaXRlRml4ZWQ2NE5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBh
IHtAY29kZSBmaXhlZDMyfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4gKi8K
LSAgcHVibGljIHZvaWQgd3JpdGVGaXhlZDMyKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwg
aW50IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdE5hbm8uV0lSRVRZUEVfRklY
RUQzMik7Ci0gICAgd3JpdGVGaXhlZDMyTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqIFdyaXRl
IGEge0Bjb2RlIGJvb2x9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3RyZWFtLiAqLwot
ICBwdWJsaWMgdm9pZCB3cml0ZUJvb2woZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBib29s
ZWFuIHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsK
LSAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdE5hbm8uV0lSRVRZUEVfVkFSSU5U
KTsKLSAgICB3cml0ZUJvb2xOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKiogV3JpdGUgYSB7QGNv
ZGUgc3RyaW5nfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4gKi8KLSAgcHVi
bGljIHZvaWQgd3JpdGVTdHJpbmcoZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBTdHJpbmcg
dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0g
ICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXROYW5vLldJUkVUWVBFX0xFTkdUSF9E
RUxJTUlURUQpOwotICAgIHdyaXRlU3RyaW5nTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqIFdy
aXRlIGEge0Bjb2RlIGdyb3VwfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4g
Ki8KLSAgcHVibGljIHZvaWQgd3JpdGVHcm91cChmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFs
IE1lc3NhZ2VOYW5vIHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4
Y2VwdGlvbiB7Ci0gICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXROYW5vLldJUkVU
WVBFX1NUQVJUX0dST1VQKTsKLSAgICB3cml0ZUdyb3VwTm9UYWcodmFsdWUpOwotICAgIHdyaXRl
VGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0TmFuby5XSVJFVFlQRV9FTkRfR1JPVVApOwotICB9
Ci0KLSAgLyoqIFdyaXRlIGFuIGVtYmVkZGVkIG1lc3NhZ2UgZmllbGQsIGluY2x1ZGluZyB0YWcs
IHRvIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlTWVzc2FnZShmaW5hbCBpbnQg
ZmllbGROdW1iZXIsIGZpbmFsIE1lc3NhZ2VOYW5vIHZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwg
V2lyZUZvcm1hdE5hbm8uV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCk7Ci0gICAgd3JpdGVNZXNz
YWdlTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGEge0Bjb2RlIGJ5dGVzfSBmaWVs
ZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVC
eXRlcyhmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGJ5dGVbXSB2YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlVGFnKGZpZWxk
TnVtYmVyLCBXaXJlRm9ybWF0TmFuby5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgICB3
cml0ZUJ5dGVzTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGEge0Bjb2RlIHVpbnQz
Mn0gZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyB2b2lk
IHdyaXRlVUludDMyKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlVGFn
KGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0TmFuby5XSVJFVFlQRV9WQVJJTlQpOwotICAgIHdyaXRl
VUludDMyTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFdyaXRlIGFuIGVudW0gZmll
bGQsIGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJlYW0uICBDYWxsZXIgaXMgcmVzcG9uc2libGUK
LSAgICogZm9yIGNvbnZlcnRpbmcgdGhlIGVudW0gdmFsdWUgdG8gaXRzIG51bWVyaWMgdmFsdWUu
Ci0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZUVudW0oZmluYWwgaW50IGZpZWxkTnVtYmVyLCBm
aW5hbCBpbnQgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRp
b24gewotICAgIHdyaXRlVGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0TmFuby5XSVJFVFlQRV9W
QVJJTlQpOwotICAgIHdyaXRlRW51bU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBh
biB7QGNvZGUgc2ZpeGVkMzJ9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3RyZWFtLiAq
LwotICBwdWJsaWMgdm9pZCB3cml0ZVNGaXhlZDMyKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmlu
YWwgaW50IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2Vw
dGlvbiB7Ci0gICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXROYW5vLldJUkVUWVBF
X0ZJWEVEMzIpOwotICAgIHdyaXRlU0ZpeGVkMzJOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKiog
V3JpdGUgYW4ge0Bjb2RlIHNmaXhlZDY0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0
cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVTRml4ZWQ2NChmaW5hbCBpbnQgZmllbGROdW1i
ZXIsIGZpbmFsIGxvbmcgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdE5hbm8u
V0lSRVRZUEVfRklYRUQ2NCk7Ci0gICAgd3JpdGVTRml4ZWQ2NE5vVGFnKHZhbHVlKTsKLSAgfQot
Ci0gIC8qKiBXcml0ZSBhbiB7QGNvZGUgc2ludDMyfSBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8g
dGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVTSW50MzIoZmluYWwgaW50IGZpZWxk
TnVtYmVyLCBmaW5hbCBpbnQgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgd3JpdGVUYWcoZmllbGROdW1iZXIsIFdpcmVGb3JtYXROYW5v
LldJUkVUWVBFX1ZBUklOVCk7Ci0gICAgd3JpdGVTSW50MzJOb1RhZyh2YWx1ZSk7Ci0gIH0KLQot
ICAvKiogV3JpdGUgYW4ge0Bjb2RlIHNpbnQ2NH0gZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRo
ZSBzdHJlYW0uICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlU0ludDY0KGZpbmFsIGludCBmaWVsZE51
bWJlciwgZmluYWwgbG9uZyB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVRhZyhmaWVsZE51bWJlciwgV2lyZUZvcm1hdE5hbm8u
V0lSRVRZUEVfVkFSSU5UKTsKLSAgICB3cml0ZVNJbnQ2NE5vVGFnKHZhbHVlKTsKLSAgfQotCi0g
IC8qKgotICAgKiBXcml0ZSBhIE1lc3NhZ2VTZXQgZXh0ZW5zaW9uIGZpZWxkIHRvIHRoZSBzdHJl
YW0uICBGb3IgaGlzdG9yaWNhbCByZWFzb25zLAotICAgKiB0aGUgd2lyZSBmb3JtYXQgZGlmZmVy
cyBmcm9tIG5vcm1hbCBmaWVsZHMuCi0gICAqLwotLy8gIHB1YmxpYyB2b2lkIHdyaXRlTWVzc2Fn
ZVNldEV4dGVuc2lvbihmaW5hbCBpbnQgZmllbGROdW1iZXIsCi0vLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2VNaWNybyB2YWx1ZSkKLS8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLS8v
ICAgIHdyaXRlVGFnKFdpcmVGb3JtYXRNaWNyby5NRVNTQUdFX1NFVF9JVEVNLCBXaXJlRm9ybWF0
TWljcm8uV0lSRVRZUEVfU1RBUlRfR1JPVVApOwotLy8gICAgd3JpdGVVSW50MzIoV2lyZUZvcm1h
dE1pY3JvLk1FU1NBR0VfU0VUX1RZUEVfSUQsIGZpZWxkTnVtYmVyKTsKLS8vICAgIHdyaXRlTWVz
c2FnZShXaXJlRm9ybWF0TWljcm8uTUVTU0FHRV9TRVRfTUVTU0FHRSwgdmFsdWUpOwotLy8gICAg
d3JpdGVUYWcoV2lyZUZvcm1hdE1pY3JvLk1FU1NBR0VfU0VUX0lURU0sIFdpcmVGb3JtYXRNaWNy
by5XSVJFVFlQRV9FTkRfR1JPVVApOwotLy8gIH0KLQotICAvKioKLSAgICogV3JpdGUgYW4gdW5w
YXJzZWQgTWVzc2FnZVNldCBleHRlbnNpb24gZmllbGQgdG8gdGhlIHN0cmVhbS4gIEZvcgotICAg
KiBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoZSB3aXJlIGZvcm1hdCBkaWZmZXJzIGZyb20gbm9ybWFs
IGZpZWxkcy4KLSAgICovCi0vLyAgcHVibGljIHZvaWQgd3JpdGVSYXdNZXNzYWdlU2V0RXh0ZW5z
aW9uKGZpbmFsIGludCBmaWVsZE51bWJlciwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmluYWwgQnl0ZVN0cmluZ01pY3JvIHZhbHVlKQotLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotLy8g
ICAgd3JpdGVUYWcoV2lyZUZvcm1hdE1pY3JvLk1FU1NBR0VfU0VUX0lURU0sIFdpcmVGb3JtYXRN
aWNyby5XSVJFVFlQRV9TVEFSVF9HUk9VUCk7Ci0vLyAgICB3cml0ZVVJbnQzMihXaXJlRm9ybWF0
TWljcm8uTUVTU0FHRV9TRVRfVFlQRV9JRCwgZmllbGROdW1iZXIpOwotLy8gICAgd3JpdGVCeXRl
cyhXaXJlRm9ybWF0TWljcm8uTUVTU0FHRV9TRVRfTUVTU0FHRSwgdmFsdWUpOwotLy8gICAgd3Jp
dGVUYWcoV2lyZUZvcm1hdE1pY3JvLk1FU1NBR0VfU0VUX0lURU0sIFdpcmVGb3JtYXRNaWNyby5X
SVJFVFlQRV9FTkRfR1JPVVApOwotLy8gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8qKiBXcml0
ZSBhIHtAY29kZSBkb3VibGV9IGZpZWxkIHRvIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyB2b2lk
IHdyaXRlRG91YmxlTm9UYWcoZmluYWwgZG91YmxlIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgIHdyaXRlUmF3TGl0dGxlRW5kaWFuNjQoRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHModmFs
dWUpKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBhIHtAY29kZSBmbG9hdH0gZmllbGQgdG8gdGhlIHN0
cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVGbG9hdE5vVGFnKGZpbmFsIGZsb2F0IHZhbHVl
KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlUmF3TGl0dGxlRW5kaWFuMzIoRmxvYXQu
ZmxvYXRUb0ludEJpdHModmFsdWUpKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBhIHtAY29kZSB1aW50
NjR9IGZpZWxkIHRvIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlVUludDY0Tm9U
YWcoZmluYWwgbG9uZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVJhd1Zh
cmludDY0KHZhbHVlKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBhbiB7QGNvZGUgaW50NjR9IGZpZWxk
IHRvIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlSW50NjROb1RhZyhmaW5hbCBs
b25nIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlUmF3VmFyaW50NjQodmFs
dWUpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGFuIHtAY29kZSBpbnQzMn0gZmllbGQgdG8gdGhlIHN0
cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVJbnQzMk5vVGFnKGZpbmFsIGludCB2YWx1ZSkg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpZiAodmFsdWUgPj0gMCkgewotICAgICAgd3JpdGVS
YXdWYXJpbnQzMih2YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIE11c3Qgc2lnbi1leHRl
bmQuCi0gICAgICB3cml0ZVJhd1ZhcmludDY0KHZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICAvKiog
V3JpdGUgYSB7QGNvZGUgZml4ZWQ2NH0gZmllbGQgdG8gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGlj
IHZvaWQgd3JpdGVGaXhlZDY0Tm9UYWcoZmluYWwgbG9uZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0
aW9uIHsKLSAgICB3cml0ZVJhd0xpdHRsZUVuZGlhbjY0KHZhbHVlKTsKLSAgfQotCi0gIC8qKiBX
cml0ZSBhIHtAY29kZSBmaXhlZDMyfSBmaWVsZCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMg
dm9pZCB3cml0ZUZpeGVkMzJOb1RhZyhmaW5hbCBpbnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlv
biB7Ci0gICAgd3JpdGVSYXdMaXR0bGVFbmRpYW4zMih2YWx1ZSk7Ci0gIH0KLQotICAvKiogV3Jp
dGUgYSB7QGNvZGUgYm9vbH0gZmllbGQgdG8gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIHZvaWQg
d3JpdGVCb29sTm9UYWcoZmluYWwgYm9vbGVhbiB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsK
LSAgICB3cml0ZVJhd0J5dGUodmFsdWUgPyAxIDogMCk7Ci0gIH0KLQotICAvKiogV3JpdGUgYSB7
QGNvZGUgc3RyaW5nfSBmaWVsZCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgdm9pZCB3cml0
ZVN0cmluZ05vVGFnKGZpbmFsIFN0cmluZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAg
ICAvLyBVVEYtOCBieXRlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIGF0IGxlYXN0IGl0cyBVVEYt
MTYgY29kZSB1bml0IGxlbmd0aCAodmFsdWUubGVuZ3RoKCkpLAotICAgIC8vIGFuZCBhdCBtb3N0
IDMgdGltZXMgb2YgaXQuIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoaXMg
bGVuZ3RoIHJlc3VsdHMgaW4gYQotICAgIC8vIGNvbnN0YW50IHZhcmludCBsZW5ndGggLSBzYXZl
cyBtZWFzdXJpbmcgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCi0gICAgdHJ5IHsKLSAgICAgIGZpbmFs
IGludCBtaW5MZW5ndGhWYXJJbnRTaXplID0gY29tcHV0ZVJhd1ZhcmludDMyU2l6ZSh2YWx1ZS5s
ZW5ndGgoKSk7Ci0gICAgICBmaW5hbCBpbnQgbWF4TGVuZ3RoVmFySW50U2l6ZSA9IGNvbXB1dGVS
YXdWYXJpbnQzMlNpemUodmFsdWUubGVuZ3RoKCkgKiBNQVhfVVRGOF9FWFBBTlNJT04pOwotICAg
ICAgaWYgKG1pbkxlbmd0aFZhckludFNpemUgPT0gbWF4TGVuZ3RoVmFySW50U2l6ZSkgewotICAg
ICAgICBpbnQgb2xkUG9zaXRpb24gPSBidWZmZXIucG9zaXRpb24oKTsKLSAgICAgICAgLy8gQnVm
ZmVyLnBvc2l0aW9uLCB3aGVuIHBhc3NlZCBhIHBvc2l0aW9uIHRoYXQgaXMgcGFzdCBpdHMgbGlt
aXQsIHRocm93cwotICAgICAgICAvLyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24sIGFuZCB0aGlz
IGNsYXNzIGlzIGRvY3VtZW50ZWQgdG8gdGhyb3cKLSAgICAgICAgLy8gT3V0T2ZTcGFjZUV4Y2Vw
dGlvbiBpbnN0ZWFkLgotICAgICAgICBpZiAoYnVmZmVyLnJlbWFpbmluZygpIDwgbWluTGVuZ3Ro
VmFySW50U2l6ZSkgewotICAgICAgICAgIHRocm93IG5ldyBPdXRPZlNwYWNlRXhjZXB0aW9uKG9s
ZFBvc2l0aW9uICsgbWluTGVuZ3RoVmFySW50U2l6ZSwgYnVmZmVyLmxpbWl0KCkpOwotICAgICAg
ICB9Ci0gICAgICAgIGJ1ZmZlci5wb3NpdGlvbihvbGRQb3NpdGlvbiArIG1pbkxlbmd0aFZhcklu
dFNpemUpOwotICAgICAgICBlbmNvZGUodmFsdWUsIGJ1ZmZlcik7Ci0gICAgICAgIGludCBuZXdQ
b3NpdGlvbiA9IGJ1ZmZlci5wb3NpdGlvbigpOwotICAgICAgICBidWZmZXIucG9zaXRpb24ob2xk
UG9zaXRpb24pOwotICAgICAgICB3cml0ZVJhd1ZhcmludDMyKG5ld1Bvc2l0aW9uIC0gb2xkUG9z
aXRpb24gLSBtaW5MZW5ndGhWYXJJbnRTaXplKTsKLSAgICAgICAgYnVmZmVyLnBvc2l0aW9uKG5l
d1Bvc2l0aW9uKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHdyaXRlUmF3VmFyaW50MzIoZW5j
b2RlZExlbmd0aCh2YWx1ZSkpOwotICAgICAgICBlbmNvZGUodmFsdWUsIGJ1ZmZlcik7Ci0gICAg
ICB9Ci0gICAgfSBjYXRjaCAoQnVmZmVyT3ZlcmZsb3dFeGNlcHRpb24gZSkgewotICAgICAgZmlu
YWwgT3V0T2ZTcGFjZUV4Y2VwdGlvbiBvdXRPZlNwYWNlRXhjZXB0aW9uID0gbmV3IE91dE9mU3Bh
Y2VFeGNlcHRpb24oYnVmZmVyLnBvc2l0aW9uKCksCi0gICAgICAgICAgYnVmZmVyLmxpbWl0KCkp
OwotICAgICAgb3V0T2ZTcGFjZUV4Y2VwdGlvbi5pbml0Q2F1c2UoZSk7Ci0gICAgICB0aHJvdyBv
dXRPZlNwYWNlRXhjZXB0aW9uOwotICAgIH0KLSAgfQotCi0gIC8vIFRoZXNlIFVURi04IGhhbmRs
aW5nIG1ldGhvZHMgYXJlIGNvcGllZCBmcm9tIEd1YXZhJ3MgVXRmOCBjbGFzcy4KLSAgLyoqCi0g
ICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgVVRGLTgtZW5jb2RlZCBmb3Jt
IG9mIHtAY29kZSBzZXF1ZW5jZX0uIEZvciBhIHN0cmluZywKLSAgICogdGhpcyBtZXRob2QgaXMg
ZXF1aXZhbGVudCB0byB7QGNvZGUgc3RyaW5nLmdldEJ5dGVzKFVURl84KS5sZW5ndGh9LCBidXQg
aXMgbW9yZSBlZmZpY2llbnQgaW4KLSAgICogYm90aCB0aW1lIGFuZCBzcGFjZS4KLSAgICoKLSAg
ICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYge0Bjb2RlIHNlcXVlbmNlfSBj
b250YWlucyBpbGwtZm9ybWVkIFVURi0xNiAodW5wYWlyZWQKLSAgICogICAgIHN1cnJvZ2F0ZXMp
Ci0gICAqLwotICBwcml2YXRlIHN0YXRpYyBpbnQgZW5jb2RlZExlbmd0aChDaGFyU2VxdWVuY2Ug
c2VxdWVuY2UpIHsKLSAgICAvLyBXYXJuaW5nIHRvIG1haW50YWluZXJzOiB0aGlzIGltcGxlbWVu
dGF0aW9uIGlzIGhpZ2hseSBvcHRpbWl6ZWQuCi0gICAgaW50IHV0ZjE2TGVuZ3RoID0gc2VxdWVu
Y2UubGVuZ3RoKCk7Ci0gICAgaW50IHV0ZjhMZW5ndGggPSB1dGYxNkxlbmd0aDsKLSAgICBpbnQg
aSA9IDA7Ci0KLSAgICAvLyBUaGlzIGxvb3Agb3B0aW1pemVzIGZvciBwdXJlIEFTQ0lJLgotICAg
IHdoaWxlIChpIDwgdXRmMTZMZW5ndGggJiYgc2VxdWVuY2UuY2hhckF0KGkpIDwgMHg4MCkgewot
ICAgICAgaSsrOwotICAgIH0KLQotICAgIC8vIFRoaXMgbG9vcCBvcHRpbWl6ZXMgZm9yIGNoYXJz
IGxlc3MgdGhhbiAweDgwMC4KLSAgICBmb3IgKDsgaSA8IHV0ZjE2TGVuZ3RoOyBpKyspIHsKLSAg
ICAgIGNoYXIgYyA9IHNlcXVlbmNlLmNoYXJBdChpKTsKLSAgICAgIGlmIChjIDwgMHg4MDApIHsK
LSAgICAgICAgdXRmOExlbmd0aCArPSAoKDB4N2YgLSBjKSA+Pj4gMzEpOyAgLy8gYnJhbmNoIGZy
ZWUhCi0gICAgICB9IGVsc2UgewotICAgICAgICB1dGY4TGVuZ3RoICs9IGVuY29kZWRMZW5ndGhH
ZW5lcmFsKHNlcXVlbmNlLCBpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKHV0ZjhMZW5ndGggPCB1dGYxNkxlbmd0aCkgewotICAgICAgLy8gTmVjZXNzYXJ5IGFu
ZCBzdWZmaWNpZW50IGNvbmRpdGlvbiBmb3Igb3ZlcmZsb3cgYmVjYXVzZSBvZiBtYXhpbXVtIDN4
IGV4cGFuc2lvbgotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVVRG
LTggbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQ6ICIKLSAgICAgICAgICAgICAgKyAodXRmOExl
bmd0aCArICgxTCA8PCAzMikpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHV0ZjhMZW5ndGg7Ci0gIH0K
LQotICBwcml2YXRlIHN0YXRpYyBpbnQgZW5jb2RlZExlbmd0aEdlbmVyYWwoQ2hhclNlcXVlbmNl
IHNlcXVlbmNlLCBpbnQgc3RhcnQpIHsKLSAgICBpbnQgdXRmMTZMZW5ndGggPSBzZXF1ZW5jZS5s
ZW5ndGgoKTsKLSAgICBpbnQgdXRmOExlbmd0aCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0
OyBpIDwgdXRmMTZMZW5ndGg7IGkrKykgewotICAgICAgY2hhciBjID0gc2VxdWVuY2UuY2hhckF0
KGkpOwotICAgICAgaWYgKGMgPCAweDgwMCkgewotICAgICAgICB1dGY4TGVuZ3RoICs9ICgweDdm
IC0gYykgPj4+IDMxOyAvLyBicmFuY2ggZnJlZSEKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHV0
ZjhMZW5ndGggKz0gMjsKLSAgICAgICAgLy8gamRrNys6IGlmIChDaGFyYWN0ZXIuaXNTdXJyb2dh
dGUoYykpIHsKLSAgICAgICAgaWYgKENoYXJhY3Rlci5NSU5fU1VSUk9HQVRFIDw9IGMgJiYgYyA8
PSBDaGFyYWN0ZXIuTUFYX1NVUlJPR0FURSkgewotICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2Ug
aGF2ZSBhIHdlbGwtZm9ybWVkIHN1cnJvZ2F0ZSBwYWlyLgotICAgICAgICAgIGludCBjcCA9IENo
YXJhY3Rlci5jb2RlUG9pbnRBdChzZXF1ZW5jZSwgaSk7Ci0gICAgICAgICAgaWYgKGNwIDwgQ2hh
cmFjdGVyLk1JTl9TVVBQTEVNRU5UQVJZX0NPREVfUE9JTlQpIHsKLSAgICAgICAgICAgIHRocm93
IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVucGFpcmVkIHN1cnJvZ2F0ZSBhdCBpbmRl
eCAiICsgaSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdXRmOExlbmd0aDsKLSAgfQotCi0gIC8qKgotICAgKiBFbmNv
ZGVzIHtAY29kZSBzZXF1ZW5jZX0gaW50byBVVEYtOCwgaW4ge0Bjb2RlIGJ5dGVCdWZmZXJ9LiBG
b3IgYSBzdHJpbmcsIHRoaXMgbWV0aG9kIGlzCi0gICAqIGVxdWl2YWxlbnQgdG8ge0Bjb2RlIGJ1
ZmZlci5wdXQoc3RyaW5nLmdldEJ5dGVzKFVURl84KSl9LCBidXQgaXMgbW9yZSBlZmZpY2llbnQg
aW4gYm90aCB0aW1lCi0gICAqIGFuZCBzcGFjZS4gQnl0ZXMgYXJlIHdyaXR0ZW4gc3RhcnRpbmcg
YXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHBhaXJlZAotICAg
KiBzdXJyb2dhdGVzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IHN1cHBvcnQgY2h1bmtpbmcuCi0g
ICAqCi0gICAqIDxwPlRvIGVuc3VyZSBzdWZmaWNpZW50IHNwYWNlIGluIHRoZSBvdXRwdXQgYnVm
ZmVyLCBlaXRoZXIgY2FsbCB7QGxpbmsgI2VuY29kZWRMZW5ndGh9IHRvCi0gICAqIGNvbXB1dGUg
dGhlIGV4YWN0IGFtb3VudCBuZWVkZWQsIG9yIGxlYXZlIHJvb20gZm9yIHtAY29kZSAzICogc2Vx
dWVuY2UubGVuZ3RoKCl9LCB3aGljaCBpcyB0aGUKLSAgICogbGFyZ2VzdCBwb3NzaWJsZSBudW1i
ZXIgb2YgYnl0ZXMgdGhhdCBhbnkgaW5wdXQgY2FuIGJlIGVuY29kZWQgdG8uCi0gICAqCi0gICAq
IEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHtAY29kZSBzZXF1ZW5jZX0gY29u
dGFpbnMgaWxsLWZvcm1lZCBVVEYtMTYgKHVucGFpcmVkCi0gICAqICAgICBzdXJyb2dhdGVzKQot
ICAgKiBAdGhyb3dzIEJ1ZmZlck92ZXJmbG93RXhjZXB0aW9uIGlmIHtAY29kZSBzZXF1ZW5jZX0g
ZW5jb2RlZCBpbiBVVEYtOCBkb2VzIG5vdCBmaXQgaW4KLSAgICogICAgIHtAY29kZSBieXRlQnVm
ZmVyfSdzIHJlbWFpbmluZyBzcGFjZS4KLSAgICogQHRocm93cyBSZWFkT25seUJ1ZmZlckV4Y2Vw
dGlvbiBpZiB7QGNvZGUgYnl0ZUJ1ZmZlcn0gaXMgYSByZWFkLW9ubHkgYnVmZmVyLgotICAgKi8K
LSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBlbmNvZGUoQ2hhclNlcXVlbmNlIHNlcXVlbmNlLCBCeXRl
QnVmZmVyIGJ5dGVCdWZmZXIpIHsKLSAgICBpZiAoYnl0ZUJ1ZmZlci5pc1JlYWRPbmx5KCkpIHsK
LSAgICAgIHRocm93IG5ldyBSZWFkT25seUJ1ZmZlckV4Y2VwdGlvbigpOwotICAgIH0gZWxzZSBp
ZiAoYnl0ZUJ1ZmZlci5oYXNBcnJheSgpKSB7Ci0gICAgICB0cnkgewotICAgICAgICBpbnQgZW5j
b2RlZCA9IGVuY29kZShzZXF1ZW5jZSwKLSAgICAgICAgICAgICAgICBieXRlQnVmZmVyLmFycmF5
KCksCi0gICAgICAgICAgICAgICAgYnl0ZUJ1ZmZlci5hcnJheU9mZnNldCgpICsgYnl0ZUJ1ZmZl
ci5wb3NpdGlvbigpLAotICAgICAgICAgICAgICAgIGJ5dGVCdWZmZXIucmVtYWluaW5nKCkpOwot
ICAgICAgICBieXRlQnVmZmVyLnBvc2l0aW9uKGVuY29kZWQgLSBieXRlQnVmZmVyLmFycmF5T2Zm
c2V0KCkpOwotICAgICAgfSBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUp
IHsKLSAgICAgICAgQnVmZmVyT3ZlcmZsb3dFeGNlcHRpb24gYm9lID0gbmV3IEJ1ZmZlck92ZXJm
bG93RXhjZXB0aW9uKCk7Ci0gICAgICAgIGJvZS5pbml0Q2F1c2UoZSk7Ci0gICAgICAgIHRocm93
IGJvZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZW5jb2RlRGlyZWN0KHNlcXVlbmNl
LCBieXRlQnVmZmVyKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGVuY29k
ZURpcmVjdChDaGFyU2VxdWVuY2Ugc2VxdWVuY2UsIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlcikgewot
ICAgIGludCB1dGYxNkxlbmd0aCA9IHNlcXVlbmNlLmxlbmd0aCgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdXRmMTZMZW5ndGg7IGkrKykgewotICAgICAgZmluYWwgY2hhciBjID0gc2VxdWVu
Y2UuY2hhckF0KGkpOwotICAgICAgaWYgKGMgPCAweDgwKSB7IC8vIEFTQ0lJCi0gICAgICAgIGJ5
dGVCdWZmZXIucHV0KChieXRlKSBjKTsKLSAgICAgIH0gZWxzZSBpZiAoYyA8IDB4ODAwKSB7IC8v
IDExIGJpdHMsIHR3byBVVEYtOCBieXRlcwotICAgICAgICBieXRlQnVmZmVyLnB1dCgoYnl0ZSkg
KCgweEYgPDwgNikgfCAoYyA+Pj4gNikpKTsKLSAgICAgICAgYnl0ZUJ1ZmZlci5wdXQoKGJ5dGUp
ICgweDgwIHwgKDB4M0YgJiBjKSkpOwotICAgICAgfSBlbHNlIGlmIChjIDwgQ2hhcmFjdGVyLk1J
Tl9TVVJST0dBVEUgfHwgQ2hhcmFjdGVyLk1BWF9TVVJST0dBVEUgPCBjKSB7Ci0gICAgICAgIC8v
IE1heGltaXVtIHNpbmdsZS1jaGFyIGNvZGUgcG9pbnQgaXMgMHhGRkZGLCAxNiBiaXRzLCB0aHJl
ZSBVVEYtOCBieXRlcwotICAgICAgICBieXRlQnVmZmVyLnB1dCgoYnl0ZSkgKCgweEYgPDwgNSkg
fCAoYyA+Pj4gMTIpKSk7Ci0gICAgICAgIGJ5dGVCdWZmZXIucHV0KChieXRlKSAoMHg4MCB8ICgw
eDNGICYgKGMgPj4+IDYpKSkpOwotICAgICAgICBieXRlQnVmZmVyLnB1dCgoYnl0ZSkgKDB4ODAg
fCAoMHgzRiAmIGMpKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmaW5hbCBjaGFyIGxvdzsK
LSAgICAgICAgaWYgKGkgKyAxID09IHNlcXVlbmNlLmxlbmd0aCgpCi0gICAgICAgICAgICAgICAg
fHwgIUNoYXJhY3Rlci5pc1N1cnJvZ2F0ZVBhaXIoYywgKGxvdyA9IHNlcXVlbmNlLmNoYXJBdCgr
K2kpKSkpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJV
bnBhaXJlZCBzdXJyb2dhdGUgYXQgaW5kZXggIiArIChpIC0gMSkpOwotICAgICAgICB9Ci0gICAg
ICAgIGludCBjb2RlUG9pbnQgPSBDaGFyYWN0ZXIudG9Db2RlUG9pbnQoYywgbG93KTsKLSAgICAg
ICAgYnl0ZUJ1ZmZlci5wdXQoKGJ5dGUpICgoMHhGIDw8IDQpIHwgKGNvZGVQb2ludCA+Pj4gMTgp
KSk7Ci0gICAgICAgIGJ5dGVCdWZmZXIucHV0KChieXRlKSAoMHg4MCB8ICgweDNGICYgKGNvZGVQ
b2ludCA+Pj4gMTIpKSkpOwotICAgICAgICBieXRlQnVmZmVyLnB1dCgoYnl0ZSkgKDB4ODAgfCAo
MHgzRiAmIChjb2RlUG9pbnQgPj4+IDYpKSkpOwotICAgICAgICBieXRlQnVmZmVyLnB1dCgoYnl0
ZSkgKDB4ODAgfCAoMHgzRiAmIGNvZGVQb2ludCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBpbnQgZW5jb2RlKENoYXJTZXF1ZW5jZSBzZXF1ZW5jZSwgYnl0ZVtd
IGJ5dGVzLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0gICAgaW50IHV0ZjE2TGVuZ3RoID0g
c2VxdWVuY2UubGVuZ3RoKCk7Ci0gICAgaW50IGogPSBvZmZzZXQ7Ci0gICAgaW50IGkgPSAwOwot
ICAgIGludCBsaW1pdCA9IG9mZnNldCArIGxlbmd0aDsKLSAgICAvLyBEZXNpZ25lZCB0byB0YWtl
IGFkdmFudGFnZSBvZgotICAgIC8vIGh0dHBzOi8vd2lraXMub3JhY2xlLmNvbS9kaXNwbGF5L0hv
dFNwb3RJbnRlcm5hbHMvUmFuZ2VDaGVja0VsaW1pbmF0aW9uCi0gICAgZm9yIChjaGFyIGM7IGkg
PCB1dGYxNkxlbmd0aCAmJiBpICsgaiA8IGxpbWl0ICYmIChjID0gc2VxdWVuY2UuY2hhckF0KGkp
KSA8IDB4ODA7IGkrKykgewotICAgICAgYnl0ZXNbaiArIGldID0gKGJ5dGUpIGM7Ci0gICAgfQot
ICAgIGlmIChpID09IHV0ZjE2TGVuZ3RoKSB7Ci0gICAgICByZXR1cm4gaiArIHV0ZjE2TGVuZ3Ro
OwotICAgIH0KLSAgICBqICs9IGk7Ci0gICAgZm9yIChjaGFyIGM7IGkgPCB1dGYxNkxlbmd0aDsg
aSsrKSB7Ci0gICAgICBjID0gc2VxdWVuY2UuY2hhckF0KGkpOwotICAgICAgaWYgKGMgPCAweDgw
ICYmIGogPCBsaW1pdCkgewotICAgICAgICBieXRlc1tqKytdID0gKGJ5dGUpIGM7Ci0gICAgICB9
IGVsc2UgaWYgKGMgPCAweDgwMCAmJiBqIDw9IGxpbWl0IC0gMikgeyAvLyAxMSBiaXRzLCB0d28g
VVRGLTggYnl0ZXMKLSAgICAgICAgYnl0ZXNbaisrXSA9IChieXRlKSAoKDB4RiA8PCA2KSB8IChj
ID4+PiA2KSk7Ci0gICAgICAgIGJ5dGVzW2orK10gPSAoYnl0ZSkgKDB4ODAgfCAoMHgzRiAmIGMp
KTsKLSAgICAgIH0gZWxzZSBpZiAoKGMgPCBDaGFyYWN0ZXIuTUlOX1NVUlJPR0FURSB8fCBDaGFy
YWN0ZXIuTUFYX1NVUlJPR0FURSA8IGMpICYmIGogPD0gbGltaXQgLSAzKSB7Ci0gICAgICAgIC8v
IE1heGltdW0gc2luZ2xlLWNoYXIgY29kZSBwb2ludCBpcyAweEZGRkYsIDE2IGJpdHMsIHRocmVl
IFVURi04IGJ5dGVzCi0gICAgICAgIGJ5dGVzW2orK10gPSAoYnl0ZSkgKCgweEYgPDwgNSkgfCAo
YyA+Pj4gMTIpKTsKLSAgICAgICAgYnl0ZXNbaisrXSA9IChieXRlKSAoMHg4MCB8ICgweDNGICYg
KGMgPj4+IDYpKSk7Ci0gICAgICAgIGJ5dGVzW2orK10gPSAoYnl0ZSkgKDB4ODAgfCAoMHgzRiAm
IGMpKTsKLSAgICAgIH0gZWxzZSBpZiAoaiA8PSBsaW1pdCAtIDQpIHsKLSAgICAgICAgLy8gTWlu
aW11bSBjb2RlIHBvaW50IHJlcHJlc2VudGVkIGJ5IGEgc3Vycm9nYXRlIHBhaXIgaXMgMHgxMDAw
MCwgMTcgYml0cywgZm91ciBVVEYtOCBieXRlcwotICAgICAgICBmaW5hbCBjaGFyIGxvdzsKLSAg
ICAgICAgaWYgKGkgKyAxID09IHNlcXVlbmNlLmxlbmd0aCgpCi0gICAgICAgICAgICAgICAgfHwg
IUNoYXJhY3Rlci5pc1N1cnJvZ2F0ZVBhaXIoYywgKGxvdyA9IHNlcXVlbmNlLmNoYXJBdCgrK2kp
KSkpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnBh
aXJlZCBzdXJyb2dhdGUgYXQgaW5kZXggIiArIChpIC0gMSkpOwotICAgICAgICB9Ci0gICAgICAg
IGludCBjb2RlUG9pbnQgPSBDaGFyYWN0ZXIudG9Db2RlUG9pbnQoYywgbG93KTsKLSAgICAgICAg
Ynl0ZXNbaisrXSA9IChieXRlKSAoKDB4RiA8PCA0KSB8IChjb2RlUG9pbnQgPj4+IDE4KSk7Ci0g
ICAgICAgIGJ5dGVzW2orK10gPSAoYnl0ZSkgKDB4ODAgfCAoMHgzRiAmIChjb2RlUG9pbnQgPj4+
IDEyKSkpOwotICAgICAgICBieXRlc1tqKytdID0gKGJ5dGUpICgweDgwIHwgKDB4M0YgJiAoY29k
ZVBvaW50ID4+PiA2KSkpOwotICAgICAgICBieXRlc1tqKytdID0gKGJ5dGUpICgweDgwIHwgKDB4
M0YgJiBjb2RlUG9pbnQpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocm93IG5ldyBBcnJh
eUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkZhaWxlZCB3cml0aW5nICIgKyBjICsgIiBhdCBp
bmRleCAiICsgaik7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBqOwotICB9Ci0KLSAgLy8g
RW5kIGd1YXZhIFVURi04IG1ldGhvZHMKLQotCi0gIC8qKiBXcml0ZSBhIHtAY29kZSBncm91cH0g
ZmllbGQgdG8gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVHcm91cE5vVGFnKGZp
bmFsIE1lc3NhZ2VOYW5vIHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHZhbHVlLndy
aXRlVG8odGhpcyk7Ci0gIH0KLQotICAvKiogV3JpdGUgYW4gZW1iZWRkZWQgbWVzc2FnZSBmaWVs
ZCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgdm9pZCB3cml0ZU1lc3NhZ2VOb1RhZyhmaW5h
bCBNZXNzYWdlTmFubyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVJhd1Zh
cmludDMyKHZhbHVlLmdldENhY2hlZFNpemUoKSk7Ci0gICAgdmFsdWUud3JpdGVUbyh0aGlzKTsK
LSAgfQotCi0gIC8qKiBXcml0ZSBhIHtAY29kZSBieXRlc30gZmllbGQgdG8gdGhlIHN0cmVhbS4g
Ki8KLSAgcHVibGljIHZvaWQgd3JpdGVCeXRlc05vVGFnKGZpbmFsIGJ5dGVbXSB2YWx1ZSkgdGhy
b3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVJhd1ZhcmludDMyKHZhbHVlLmxlbmd0aCk7Ci0g
ICAgd3JpdGVSYXdCeXRlcyh2YWx1ZSk7Ci0gIH0KLQotICAvKiogV3JpdGUgYSB7QGNvZGUgdWlu
dDMyfSBmaWVsZCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgdm9pZCB3cml0ZVVJbnQzMk5v
VGFnKGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVJhd1Zh
cmludDMyKHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBXcml0ZSBhbiBlbnVtIGZpZWxkIHRv
IHRoZSBzdHJlYW0uICBDYWxsZXIgaXMgcmVzcG9uc2libGUKLSAgICogZm9yIGNvbnZlcnRpbmcg
dGhlIGVudW0gdmFsdWUgdG8gaXRzIG51bWVyaWMgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9p
ZCB3cml0ZUVudW1Ob1RhZyhmaW5hbCBpbnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0g
ICAgd3JpdGVSYXdWYXJpbnQzMih2YWx1ZSk7Ci0gIH0KLQotICAvKiogV3JpdGUgYW4ge0Bjb2Rl
IHNmaXhlZDMyfSBmaWVsZCB0byB0aGUgc3RyZWFtLiAqLwotICBwdWJsaWMgdm9pZCB3cml0ZVNG
aXhlZDMyTm9UYWcoZmluYWwgaW50IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdy
aXRlUmF3TGl0dGxlRW5kaWFuMzIodmFsdWUpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGFuIHtAY29k
ZSBzZml4ZWQ2NH0gZmllbGQgdG8gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVT
Rml4ZWQ2NE5vVGFnKGZpbmFsIGxvbmcgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAg
d3JpdGVSYXdMaXR0bGVFbmRpYW42NCh2YWx1ZSk7Ci0gIH0KLQotICAvKiogV3JpdGUgYW4ge0Bj
b2RlIHNpbnQzMn0gZmllbGQgdG8gdGhlIHN0cmVhbS4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVT
SW50MzJOb1RhZyhmaW5hbCBpbnQgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgd3Jp
dGVSYXdWYXJpbnQzMihlbmNvZGVaaWdaYWczMih2YWx1ZSkpOwotICB9Ci0KLSAgLyoqIFdyaXRl
IGFuIHtAY29kZSBzaW50NjR9IGZpZWxkIHRvIHRoZSBzdHJlYW0uICovCi0gIHB1YmxpYyB2b2lk
IHdyaXRlU0ludDY0Tm9UYWcoZmluYWwgbG9uZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsK
LSAgICB3cml0ZVJhd1ZhcmludDY0KGVuY29kZVppZ1phZzY0KHZhbHVlKSk7Ci0gIH0KLQotICAv
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhh
dCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGRvdWJsZX0gZmllbGQs
IGluY2x1ZGluZyB0YWcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRlRG91Ymxl
U2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbmFsIGRvdWJsZSB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6
ZShmaWVsZE51bWJlcikgKyBjb21wdXRlRG91YmxlU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0g
IC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVk
ZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGZsb2F0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVGbG9hdFNpemUoZmluYWwgaW50IGZp
ZWxkTnVtYmVyLCBmaW5hbCBmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6
ZShmaWVsZE51bWJlcikgKyBjb21wdXRlRmxvYXRTaXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAg
LyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRl
ZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgdWludDY0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVVSW50NjRTaXplKGZpbmFsIGludCBm
aWVsZE51bWJlciwgZmluYWwgbG9uZyB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6
ZShmaWVsZE51bWJlcikgKyBjb21wdXRlVUludDY0U2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0g
IC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVk
ZWQgdG8gZW5jb2RlIGFuCi0gICAqIHtAY29kZSBpbnQ2NH0gZmllbGQsIGluY2x1ZGluZyB0YWcu
Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRlSW50NjRTaXplKGZpbmFsIGludCBm
aWVsZE51bWJlciwgZmluYWwgbG9uZyB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6
ZShmaWVsZE51bWJlcikgKyBjb21wdXRlSW50NjRTaXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAg
LyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRl
ZCB0byBlbmNvZGUgYW4KLSAgICoge0Bjb2RlIGludDMyfSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVJbnQzMlNpemUoZmluYWwgaW50IGZp
ZWxkTnVtYmVyLCBmaW5hbCBpbnQgdmFsdWUpIHsKLSAgICByZXR1cm4gY29tcHV0ZVRhZ1NpemUo
ZmllbGROdW1iZXIpICsgY29tcHV0ZUludDMyU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8q
KgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQg
dG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGZpeGVkNjR9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgot
ICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUZpeGVkNjRTaXplKGZpbmFsIGludCBm
aWVsZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFs
IGxvbmcgdmFsdWUpIHsKLSAgICByZXR1cm4gY29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsg
Y29tcHV0ZUZpeGVkNjRTaXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1
dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQot
ICAgKiB7QGNvZGUgZml4ZWQzMn0gZmllbGQsIGluY2x1ZGluZyB0YWcuCi0gICAqLwotICBwdWJs
aWMgc3RhdGljIGludCBjb21wdXRlRml4ZWQzMlNpemUoZmluYWwgaW50IGZpZWxkTnVtYmVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHZhbHVlKSB7
Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSArIGNvbXB1dGVGaXhlZDMy
U2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIg
b2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGJv
b2x9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29t
cHV0ZUJvb2xTaXplKGZpbmFsIGludCBmaWVsZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdmFsdWUpIHsKLSAgICByZXR1cm4gY29tcHV0
ZVRhZ1NpemUoZmllbGROdW1iZXIpICsgY29tcHV0ZUJvb2xTaXplTm9UYWcodmFsdWUpOwotICB9
Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJl
IG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgc3RyaW5nfSBmaWVsZCwgaW5jbHVkaW5n
IHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVTdHJpbmdTaXplKGZpbmFs
IGludCBmaWVsZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmluYWwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKGZpZWxkTnVt
YmVyKSArIGNvbXB1dGVTdHJpbmdTaXplTm9UYWcodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAq
IENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNv
ZGUgYQotICAgKiB7QGNvZGUgZ3JvdXB9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAg
cHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUdyb3VwU2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTWVzc2FnZU5hbm8g
dmFsdWUpIHsKLSAgICByZXR1cm4gY29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICogMiArIGNv
bXB1dGVHcm91cFNpemVOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0
aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAg
KiBlbWJlZGRlZCBtZXNzYWdlIGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGlj
IHN0YXRpYyBpbnQgY29tcHV0ZU1lc3NhZ2VTaXplKGZpbmFsIGludCBmaWVsZE51bWJlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2VOYW5vIHZh
bHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSArIGNvbXB1dGVN
ZXNzYWdlU2l6ZU5vVGFnKHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBu
dW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bj
b2RlIGJ5dGVzfSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMg
aW50IGNvbXB1dGVCeXRlc1NpemUoZmluYWwgaW50IGZpZWxkTnVtYmVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSB2YWx1ZSkgewotICAgIHJldHVy
biBjb21wdXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKyBjb21wdXRlQnl0ZXNTaXplTm9UYWcodmFs
dWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0
IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgdWludDMyfSBmaWVsZCwg
aW5jbHVkaW5nIHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVVSW50MzJT
aXplKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHZhbHVlKSB7Ci0gICAgcmV0dXJu
IGNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSArIGNvbXB1dGVVSW50MzJTaXplTm9UYWcodmFs
dWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0
IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICogZW51bSBmaWVsZCwgaW5jbHVkaW5n
IHRhZy4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY29udmVydGluZyB0aGUKLSAgICogZW51
bSB2YWx1ZSB0byBpdHMgbnVtZXJpYyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50
IGNvbXB1dGVFbnVtU2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGludCB2YWx1ZSkg
ewotICAgIHJldHVybiBjb21wdXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKyBjb21wdXRlRW51bVNp
emVOb1RhZyh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9m
IGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAgKiB7QGNvZGUgc2Zp
eGVkMzJ9IGZpZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQg
Y29tcHV0ZVNGaXhlZDMyU2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHZhbHVlKSB7Ci0gICAgcmV0dXJu
IGNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSArIGNvbXB1dGVTRml4ZWQzMlNpemVOb1RhZyh2
YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRo
YXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAgKiB7QGNvZGUgc2ZpeGVkNjR9IGZp
ZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVNG
aXhlZDY0U2l6ZShmaW5hbCBpbnQgZmllbGROdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRl
VGFnU2l6ZShmaWVsZE51bWJlcikgKyBjb21wdXRlU0ZpeGVkNjRTaXplTm9UYWcodmFsdWUpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxk
IGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICoge0Bjb2RlIHNpbnQzMn0gZmllbGQsIGluY2x1
ZGluZyB0YWcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRlU0ludDMyU2l6ZShm
aW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGludCB2YWx1ZSkgewotICAgIHJldHVybiBjb21w
dXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKyBjb21wdXRlU0ludDMyU2l6ZU5vVGFnKHZhbHVlKTsK
LSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3Vs
ZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGFuCi0gICAqIHtAY29kZSBzaW50NjR9IGZpZWxkLCBpbmNs
dWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVNJbnQ2NFNpemUo
ZmluYWwgaW50IGZpZWxkTnVtYmVyLCBmaW5hbCBsb25nIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNv
bXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSArIGNvbXB1dGVTSW50NjRTaXplTm9UYWcodmFsdWUp
OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdv
dWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiBNZXNzYWdlU2V0IGV4dGVuc2lvbiB0byB0
aGUgc3RyZWFtLiAgRm9yIGhpc3RvcmljYWwgcmVhc29ucywKLSAgICogdGhlIHdpcmUgZm9ybWF0
IGRpZmZlcnMgZnJvbSBub3JtYWwgZmllbGRzLgotICAgKi8KLS8vICBwdWJsaWMgc3RhdGljIGlu
dCBjb21wdXRlTWVzc2FnZVNldEV4dGVuc2lvblNpemUoCi0vLyAgICAgIGZpbmFsIGludCBmaWVs
ZE51bWJlciwgZmluYWwgTWVzc2FnZU1pY3JvIHZhbHVlKSB7Ci0vLyAgICByZXR1cm4gY29tcHV0
ZVRhZ1NpemUoV2lyZUZvcm1hdE1pY3JvLk1FU1NBR0VfU0VUX0lURU0pICogMiArCi0vLyAgICAg
ICAgICAgY29tcHV0ZVVJbnQzMlNpemUoV2lyZUZvcm1hdE1pY3JvLk1FU1NBR0VfU0VUX1RZUEVf
SUQsIGZpZWxkTnVtYmVyKSArCi0vLyAgICAgICAgICAgY29tcHV0ZU1lc3NhZ2VTaXplKFdpcmVG
b3JtYXRNaWNyby5NRVNTQUdFX1NFVF9NRVNTQUdFLCB2YWx1ZSk7Ci0vLyAgfQotCi0gIC8qKgot
ICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8g
ZW5jb2RlIGFuCi0gICAqIHVucGFyc2VkIE1lc3NhZ2VTZXQgZXh0ZW5zaW9uIGZpZWxkIHRvIHRo
ZSBzdHJlYW0uICBGb3IKLSAgICogaGlzdG9yaWNhbCByZWFzb25zLCB0aGUgd2lyZSBmb3JtYXQg
ZGlmZmVycyBmcm9tIG5vcm1hbCBmaWVsZHMuCi0gICAqLwotLy8gIHB1YmxpYyBzdGF0aWMgaW50
IGNvbXB1dGVSYXdNZXNzYWdlU2V0RXh0ZW5zaW9uU2l6ZSgKLS8vICAgICAgZmluYWwgaW50IGZp
ZWxkTnVtYmVyLCBmaW5hbCBCeXRlU3RyaW5nTWljcm8gdmFsdWUpIHsKLS8vICAgIHJldHVybiBj
b21wdXRlVGFnU2l6ZShXaXJlRm9ybWF0TWljcm8uTUVTU0FHRV9TRVRfSVRFTSkgKiAyICsKLS8v
ICAgICAgICAgICBjb21wdXRlVUludDMyU2l6ZShXaXJlRm9ybWF0TWljcm8uTUVTU0FHRV9TRVRf
VFlQRV9JRCwgZmllbGROdW1iZXIpICsKLS8vICAgICAgICAgICBjb21wdXRlQnl0ZXNTaXplKFdp
cmVGb3JtYXRNaWNyby5NRVNTQUdFX1NFVF9NRVNTQUdFLCB2YWx1ZSk7Ci0vLyAgfQotCi0gIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0
IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgZG91YmxlfSBmaWVsZCwg
aW5jbHVkaW5nIHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVEb3VibGVT
aXplTm9UYWcoZmluYWwgZG91YmxlIHZhbHVlKSB7Ci0gICAgcmV0dXJuIExJVFRMRV9FTkRJQU5f
NjRfU0laRTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMg
dGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGZsb2F0fSBmaWVs
ZCwgaW5jbHVkaW5nIHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVGbG9h
dFNpemVOb1RhZyhmaW5hbCBmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiBMSVRUTEVfRU5ESUFO
XzMyX1NJWkU7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVz
IHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhCi0gICAqIHtAY29kZSB1aW50NjR9IGZp
ZWxkLCBpbmNsdWRpbmcgdGFnLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVVJ
bnQ2NFNpemVOb1RhZyhmaW5hbCBsb25nIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVSYXdW
YXJpbnQ2NFNpemUodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJl
ciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICoge0Bjb2Rl
IGludDY0fSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50
IGNvbXB1dGVJbnQ2NFNpemVOb1RhZyhmaW5hbCBsb25nIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGNv
bXB1dGVSYXdWYXJpbnQ2NFNpemUodmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUg
dGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAg
ICoge0Bjb2RlIGludDMyfSBmaWVsZCwgaW5jbHVkaW5nIHRhZy4KLSAgICovCi0gIHB1YmxpYyBz
dGF0aWMgaW50IGNvbXB1dGVJbnQzMlNpemVOb1RhZyhmaW5hbCBpbnQgdmFsdWUpIHsKLSAgICBp
ZiAodmFsdWUgPj0gMCkgewotICAgICAgcmV0dXJuIGNvbXB1dGVSYXdWYXJpbnQzMlNpemUodmFs
dWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBNdXN0IHNpZ24tZXh0ZW5kLgotICAgICAgcmV0
dXJuIDEwOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIGZpeGVk
NjR9IGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUZpeGVkNjRTaXpl
Tm9UYWcoZmluYWwgbG9uZyB2YWx1ZSkgewotICAgIHJldHVybiBMSVRUTEVfRU5ESUFOXzY0X1NJ
WkU7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQg
d291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhCi0gICAqIHtAY29kZSBmaXhlZDMyfSBmaWVsZC4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVGaXhlZDMyU2l6ZU5vVGFnKGZpbmFs
IGludCB2YWx1ZSkgewotICAgIHJldHVybiBMSVRUTEVfRU5ESUFOXzMyX1NJWkU7Ci0gIH0KLQot
ICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVl
ZGVkIHRvIGVuY29kZSBhCi0gICAqIHtAY29kZSBib29sfSBmaWVsZC4KLSAgICovCi0gIHB1Ymxp
YyBzdGF0aWMgaW50IGNvbXB1dGVCb29sU2l6ZU5vVGFnKGZpbmFsIGJvb2xlYW4gdmFsdWUpIHsK
LSAgICByZXR1cm4gMTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gZW5jb2RlIGEKLSAgICoge0Bjb2RlIHN0cmlu
Z30gZmllbGQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRlU3RyaW5nU2l6ZU5v
VGFnKGZpbmFsIFN0cmluZyB2YWx1ZSkgewotICAgIGZpbmFsIGludCBsZW5ndGggPSBlbmNvZGVk
TGVuZ3RoKHZhbHVlKTsKLSAgICByZXR1cm4gY29tcHV0ZVJhd1ZhcmludDMyU2l6ZShsZW5ndGgp
ICsgbGVuZ3RoOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRl
cyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgZ3JvdXB9IGZp
ZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUdyb3VwU2l6ZU5vVGFnKGZp
bmFsIE1lc3NhZ2VOYW5vIHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlLmdldFNlcmlhbGl6ZWRT
aXplKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRo
YXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbiBlbWJlZGRlZAotICAgKiBtZXNzYWdlIGZp
ZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZU1lc3NhZ2VTaXplTm9UYWco
ZmluYWwgTWVzc2FnZU5hbm8gdmFsdWUpIHsKLSAgICBmaW5hbCBpbnQgc2l6ZSA9IHZhbHVlLmdl
dFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgcmV0dXJuIGNvbXB1dGVSYXdWYXJpbnQzMlNpemUoc2l6
ZSkgKyBzaXplOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRl
cyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotICAgKiB7QGNvZGUgYnl0ZXN9IGZp
ZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZUJ5dGVzU2l6ZU5vVGFnKGZp
bmFsIGJ5dGVbXSB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlUmF3VmFyaW50MzJTaXplKHZh
bHVlLmxlbmd0aCkgKyB2YWx1ZS5sZW5ndGg7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0
aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhCi0gICAq
IHtAY29kZSB1aW50MzJ9IGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0
ZVVJbnQzMlNpemVOb1RhZyhmaW5hbCBpbnQgdmFsdWUpIHsKLSAgICByZXR1cm4gY29tcHV0ZVJh
d1ZhcmludDMyU2l6ZSh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbiBlbnVtIGZpZWxk
LgotICAgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNvbnZlcnRpbmcgdGhlIGVudW0gdmFs
dWUgdG8gaXRzIG51bWVyaWMgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21w
dXRlRW51bVNpemVOb1RhZyhmaW5hbCBpbnQgdmFsdWUpIHsKLSAgICByZXR1cm4gY29tcHV0ZVJh
d1ZhcmludDMyU2l6ZSh2YWx1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAgKiB7QGNv
ZGUgc2ZpeGVkMzJ9IGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVNG
aXhlZDMyU2l6ZU5vVGFnKGZpbmFsIGludCB2YWx1ZSkgewotICAgIHJldHVybiBMSVRUTEVfRU5E
SUFOXzMyX1NJWkU7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5
dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAgKiB7QGNvZGUgc2ZpeGVk
NjR9IGZpZWxkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVNGaXhlZDY0U2l6
ZU5vVGFnKGZpbmFsIGxvbmcgdmFsdWUpIHsKLSAgICByZXR1cm4gTElUVExFX0VORElBTl82NF9T
SVpFOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0
IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLSAgICoge0Bjb2RlIHNpbnQzMn0gZmllbGQu
Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRlU0ludDMyU2l6ZU5vVGFnKGZpbmFs
IGludCB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlUmF3VmFyaW50MzJTaXplKGVuY29kZVpp
Z1phZzMyKHZhbHVlKSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9m
IGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRvIGVuY29kZSBhbgotICAgKiB7QGNvZGUgc2lu
dDY0fSBmaWVsZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVTSW50NjRTaXpl
Tm9UYWcoZmluYWwgbG9uZyB2YWx1ZSkgewotICAgIHJldHVybiBjb21wdXRlUmF3VmFyaW50NjRT
aXplKGVuY29kZVppZ1phZzY0KHZhbHVlKSk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gIC8q
KgotICAgKiBJZiB3cml0aW5nIHRvIGEgZmxhdCBhcnJheSwgcmV0dXJuIHRoZSBzcGFjZSBsZWZ0
IGluIHRoZSBhcnJheS4KLSAgICogT3RoZXJ3aXNlLCB0aHJvd3Mge0Bjb2RlIFVuc3VwcG9ydGVk
T3BlcmF0aW9uRXhjZXB0aW9ufS4KLSAgICovCi0gIHB1YmxpYyBpbnQgc3BhY2VMZWZ0KCkgewot
ICAgIHJldHVybiBidWZmZXIucmVtYWluaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogVmVyaWZp
ZXMgdGhhdCB7QGxpbmsgI3NwYWNlTGVmdCgpfSByZXR1cm5zIHplcm8uICBJdCdzIGNvbW1vbiB0
byBjcmVhdGUKLSAgICogYSBieXRlIGFycmF5IHRoYXQgaXMgZXhhY3RseSBiaWcgZW5vdWdoIHRv
IGhvbGQgYSBtZXNzYWdlLCB0aGVuIHdyaXRlIHRvCi0gICAqIGl0IHdpdGggYSB7QGNvZGUgQ29k
ZWRPdXRwdXRTdHJlYW19LiAgQ2FsbGluZyB7QGNvZGUgY2hlY2tOb1NwYWNlTGVmdCgpfQotICAg
KiBhZnRlciB3cml0aW5nIHZlcmlmaWVzIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIGFjdHVhbGx5IGFz
IGJpZyBhcyBleHBlY3RlZCwKLSAgICogd2hpY2ggY2FuIGhlbHAgY2F0Y2ggYnVncy4KLSAgICov
Ci0gIHB1YmxpYyB2b2lkIGNoZWNrTm9TcGFjZUxlZnQoKSB7Ci0gICAgaWYgKHNwYWNlTGVmdCgp
ICE9IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0gICAgICAg
ICJEaWQgbm90IHdyaXRlIGFzIG11Y2ggZGF0YSBhcyBleHBlY3RlZC4iKTsKLSAgICB9Ci0gIH0K
LQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBpbnRlcm5hbCBi
dWZmZXIuCi0gICAqLwotICBwdWJsaWMgaW50IHBvc2l0aW9uKCkgewotICAgIHJldHVybiBidWZm
ZXIucG9zaXRpb24oKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNldHMgdGhlIHBvc2l0aW9uIHdp
dGhpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIHplcm8uCi0gICAqCi0gICAqIEBzZWUgI3Bvc2l0
aW9uCi0gICAqIEBzZWUgI3NwYWNlTGVmdAotICAgKi8KLSAgcHVibGljIHZvaWQgcmVzZXQoKSB7
Ci0gICAgYnVmZmVyLmNsZWFyKCk7Ci0gIH0KLQotICAvKioKLSAgICogSWYgeW91IGNyZWF0ZSBh
IENvZGVkT3V0cHV0U3RyZWFtIGFyb3VuZCBhIHNpbXBsZSBmbGF0IGFycmF5LCB5b3UgbXVzdAot
ICAgKiBub3QgYXR0ZW1wdCB0byB3cml0ZSBtb3JlIGJ5dGVzIHRoYW4gdGhlIGFycmF5IGhhcyBz
cGFjZS4gIE90aGVyd2lzZSwKLSAgICogdGhpcyBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIE91dE9mU3BhY2VFeGNlcHRpb24gZXh0ZW5kcyBJ
T0V4Y2VwdGlvbiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9u
VUlEID0gLTY5NDc0ODY4ODY5OTc4ODk0OTlMOwotCi0gICAgT3V0T2ZTcGFjZUV4Y2VwdGlvbihp
bnQgcG9zaXRpb24sIGludCBsaW1pdCkgewotICAgICAgc3VwZXIoIkNvZGVkT3V0cHV0U3RyZWFt
IHdhcyB3cml0aW5nIHRvIGEgZmxhdCBieXRlIGFycmF5IGFuZCByYW4gIiArCi0gICAgICAgICAg
ICAib3V0IG9mIHNwYWNlIChwb3MgIiArIHBvc2l0aW9uICsgIiBsaW1pdCAiICsgbGltaXQgKyAi
KS4iKTsKLSAgICB9Ci0gIH0KLQotICAvKiogV3JpdGUgYSBzaW5nbGUgYnl0ZS4gKi8KLSAgcHVi
bGljIHZvaWQgd3JpdGVSYXdCeXRlKGZpbmFsIGJ5dGUgdmFsdWUpIHRocm93cyBJT0V4Y2VwdGlv
biB7Ci0gICAgaWYgKCFidWZmZXIuaGFzUmVtYWluaW5nKCkpIHsKLSAgICAgIC8vIFdlJ3JlIHdy
aXRpbmcgdG8gYSBzaW5nbGUgYnVmZmVyLgotICAgICAgdGhyb3cgbmV3IE91dE9mU3BhY2VFeGNl
cHRpb24oYnVmZmVyLnBvc2l0aW9uKCksIGJ1ZmZlci5saW1pdCgpKTsKLSAgICB9Ci0KLSAgICBi
dWZmZXIucHV0KHZhbHVlKTsKLSAgfQotCi0gIC8qKiBXcml0ZSBhIHNpbmdsZSBieXRlLCByZXBy
ZXNlbnRlZCBieSBhbiBpbnRlZ2VyIHZhbHVlLiAqLwotICBwdWJsaWMgdm9pZCB3cml0ZVJhd0J5
dGUoZmluYWwgaW50IHZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlUmF3Qnl0
ZSgoYnl0ZSkgdmFsdWUpOwotICB9Ci0KLSAgLyoqIFdyaXRlIGFuIGFycmF5IG9mIGJ5dGVzLiAq
LwotICBwdWJsaWMgdm9pZCB3cml0ZVJhd0J5dGVzKGZpbmFsIGJ5dGVbXSB2YWx1ZSkgdGhyb3dz
IElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVJhd0J5dGVzKHZhbHVlLCAwLCB2YWx1ZS5sZW5ndGgp
OwotICB9Ci0KLSAgLyoqIFdyaXRlIHBhcnQgb2YgYW4gYXJyYXkgb2YgYnl0ZXMuICovCi0gIHB1
YmxpYyB2b2lkIHdyaXRlUmF3Qnl0ZXMoZmluYWwgYnl0ZVtdIHZhbHVlLCBpbnQgb2Zmc2V0LCBp
bnQgbGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlv
biB7Ci0gICAgaWYgKGJ1ZmZlci5yZW1haW5pbmcoKSA+PSBsZW5ndGgpIHsKLSAgICAgIGJ1ZmZl
ci5wdXQodmFsdWUsIG9mZnNldCwgbGVuZ3RoKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gV2Un
cmUgd3JpdGluZyB0byBhIHNpbmdsZSBidWZmZXIuCi0gICAgICB0aHJvdyBuZXcgT3V0T2ZTcGFj
ZUV4Y2VwdGlvbihidWZmZXIucG9zaXRpb24oKSwgYnVmZmVyLmxpbWl0KCkpOwotICAgIH0KLSAg
fQotCi0gIC8qKiBFbmNvZGUgYW5kIHdyaXRlIGEgdGFnLiAqLwotICBwdWJsaWMgdm9pZCB3cml0
ZVRhZyhmaW5hbCBpbnQgZmllbGROdW1iZXIsIGZpbmFsIGludCB3aXJlVHlwZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB3cml0ZVJhd1ZhcmludDMy
KFdpcmVGb3JtYXROYW5vLm1ha2VUYWcoZmllbGROdW1iZXIsIHdpcmVUeXBlKSk7Ci0gIH0KLQot
ICAvKiogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgbmVlZGVkIHRv
IGVuY29kZSBhIHRhZy4gKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgY29tcHV0ZVRhZ1NpemUoZmlu
YWwgaW50IGZpZWxkTnVtYmVyKSB7Ci0gICAgcmV0dXJuIGNvbXB1dGVSYXdWYXJpbnQzMlNpemUo
V2lyZUZvcm1hdE5hbm8ubWFrZVRhZyhmaWVsZE51bWJlciwgMCkpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEVuY29kZSBhbmQgd3JpdGUgYSB2YXJpbnQuICB7QGNvZGUgdmFsdWV9IGlzIHRyZWF0ZWQg
YXMKLSAgICogdW5zaWduZWQsIHNvIGl0IHdvbid0IGJlIHNpZ24tZXh0ZW5kZWQgaWYgbmVnYXRp
dmUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB3cml0ZVJhd1ZhcmludDMyKGludCB2YWx1ZSkgdGhy
b3dzIElPRXhjZXB0aW9uIHsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgaWYgKCh2YWx1ZSAm
IH4weDdGKSA9PSAwKSB7Ci0gICAgICAgIHdyaXRlUmF3Qnl0ZSh2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHdyaXRlUmF3Qnl0ZSgodmFsdWUgJiAweDdG
KSB8IDB4ODApOwotICAgICAgICB2YWx1ZSA+Pj49IDc7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSAgLyoqCi0gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5l
ZWRlZCB0byBlbmNvZGUgYSB2YXJpbnQuCi0gICAqIHtAY29kZSB2YWx1ZX0gaXMgdHJlYXRlZCBh
cyB1bnNpZ25lZCwgc28gaXQgd29uJ3QgYmUgc2lnbi1leHRlbmRlZCBpZgotICAgKiBuZWdhdGl2
ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGNvbXB1dGVSYXdWYXJpbnQzMlNpemUoZmlu
YWwgaW50IHZhbHVlKSB7Ci0gICAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmIDw8ICA3KSkgPT0g
MCkgcmV0dXJuIDE7Ci0gICAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmIDw8IDE0KSkgPT0gMCkg
cmV0dXJuIDI7Ci0gICAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmIDw8IDIxKSkgPT0gMCkgcmV0
dXJuIDM7Ci0gICAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmIDw8IDI4KSkgPT0gMCkgcmV0dXJu
IDQ7Ci0gICAgcmV0dXJuIDU7Ci0gIH0KLQotICAvKiogRW5jb2RlIGFuZCB3cml0ZSBhIHZhcmlu
dC4gKi8KLSAgcHVibGljIHZvaWQgd3JpdGVSYXdWYXJpbnQ2NChsb25nIHZhbHVlKSB0aHJvd3Mg
SU9FeGNlcHRpb24gewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBpZiAoKHZhbHVlICYgfjB4
N0ZMKSA9PSAwKSB7Ci0gICAgICAgIHdyaXRlUmF3Qnl0ZSgoaW50KXZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgd3JpdGVSYXdCeXRlKCgoaW50KXZhbHVl
ICYgMHg3RikgfCAweDgwKTsKLSAgICAgICAgdmFsdWUgPj4+PSA3OwotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIC8qKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBu
ZWVkZWQgdG8gZW5jb2RlIGEgdmFyaW50LiAqLwotICBwdWJsaWMgc3RhdGljIGludCBjb21wdXRl
UmF3VmFyaW50NjRTaXplKGZpbmFsIGxvbmcgdmFsdWUpIHsKLSAgICBpZiAoKHZhbHVlICYgKDB4
ZmZmZmZmZmZmZmZmZmZmZkwgPDwgIDcpKSA9PSAwKSByZXR1cm4gMTsKLSAgICBpZiAoKHZhbHVl
ICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwgMTQpKSA9PSAwKSByZXR1cm4gMjsKLSAgICBpZiAo
KHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwgMjEpKSA9PSAwKSByZXR1cm4gMzsKLSAg
ICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwgMjgpKSA9PSAwKSByZXR1cm4g
NDsKLSAgICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwgMzUpKSA9PSAwKSBy
ZXR1cm4gNTsKLSAgICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwgNDIpKSA9
PSAwKSByZXR1cm4gNjsKLSAgICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwg
NDkpKSA9PSAwKSByZXR1cm4gNzsKLSAgICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZm
ZkwgPDwgNTYpKSA9PSAwKSByZXR1cm4gODsKLSAgICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmZm
ZmZmZmZmZkwgPDwgNjMpKSA9PSAwKSByZXR1cm4gOTsKLSAgICByZXR1cm4gMTA7Ci0gIH0KLQot
ICAvKiogV3JpdGUgYSBsaXR0bGUtZW5kaWFuIDMyLWJpdCBpbnRlZ2VyLiAqLwotICBwdWJsaWMg
dm9pZCB3cml0ZVJhd0xpdHRsZUVuZGlhbjMyKGZpbmFsIGludCB2YWx1ZSkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICBpZiAoYnVmZmVyLnJlbWFpbmluZygpIDwgNCkgewotICAgICAgdGhyb3cg
bmV3IE91dE9mU3BhY2VFeGNlcHRpb24oYnVmZmVyLnBvc2l0aW9uKCksIGJ1ZmZlci5saW1pdCgp
KTsKLSAgICB9Ci0gICAgYnVmZmVyLnB1dEludCh2YWx1ZSk7Ci0gIH0KLQotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIGludCBMSVRUTEVfRU5ESUFOXzMyX1NJWkUgPSA0OwotCi0gIC8qKiBXcml0ZSBh
IGxpdHRsZS1lbmRpYW4gNjQtYml0IGludGVnZXIuICovCi0gIHB1YmxpYyB2b2lkIHdyaXRlUmF3
TGl0dGxlRW5kaWFuNjQoZmluYWwgbG9uZyB2YWx1ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAg
ICBpZiAoYnVmZmVyLnJlbWFpbmluZygpIDwgOCkgewotICAgICAgdGhyb3cgbmV3IE91dE9mU3Bh
Y2VFeGNlcHRpb24oYnVmZmVyLnBvc2l0aW9uKCksIGJ1ZmZlci5saW1pdCgpKTsKLSAgICB9Ci0g
ICAgYnVmZmVyLnB1dExvbmcodmFsdWUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBp
bnQgTElUVExFX0VORElBTl82NF9TSVpFID0gODsKLQotICAvKioKLSAgICogRW5jb2RlIGEgWmln
WmFnLWVuY29kZWQgMzItYml0IHZhbHVlLiAgWmlnWmFnIGVuY29kZXMgc2lnbmVkIGludGVnZXJz
Ci0gICAqIGludG8gdmFsdWVzIHRoYXQgY2FuIGJlIGVmZmljaWVudGx5IGVuY29kZWQgd2l0aCB2
YXJpbnQuICAoT3RoZXJ3aXNlLAotICAgKiBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSBzaWduLWV4
dGVuZGVkIHRvIDY0IGJpdHMgdG8gYmUgdmFyaW50IGVuY29kZWQsCi0gICAqIHRodXMgYWx3YXlz
IHRha2luZyAxMCBieXRlcyBvbiB0aGUgd2lyZS4pCi0gICAqCi0gICAqIEBwYXJhbSBuIEEgc2ln
bmVkIDMyLWJpdCBpbnRlZ2VyLgotICAgKiBAcmV0dXJuIEFuIHVuc2lnbmVkIDMyLWJpdCBpbnRl
Z2VyLCBzdG9yZWQgaW4gYSBzaWduZWQgaW50IGJlY2F1c2UKLSAgICogICAgICAgICBKYXZhIGhh
cyBubyBleHBsaWNpdCB1bnNpZ25lZCBzdXBwb3J0LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBp
bnQgZW5jb2RlWmlnWmFnMzIoZmluYWwgaW50IG4pIHsKLSAgICAvLyBOb3RlOiAgdGhlIHJpZ2h0
LXNoaWZ0IG11c3QgYmUgYXJpdGhtZXRpYwotICAgIHJldHVybiAobiA8PCAxKSBeIChuID4+IDMx
KTsKLSAgfQotCi0gIC8qKgotICAgKiBFbmNvZGUgYSBaaWdaYWctZW5jb2RlZCA2NC1iaXQgdmFs
dWUuICBaaWdaYWcgZW5jb2RlcyBzaWduZWQgaW50ZWdlcnMKLSAgICogaW50byB2YWx1ZXMgdGhh
dCBjYW4gYmUgZWZmaWNpZW50bHkgZW5jb2RlZCB3aXRoIHZhcmludC4gIChPdGhlcndpc2UsCi0g
ICAqIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyB0byBi
ZSB2YXJpbnQgZW5jb2RlZCwKLSAgICogdGh1cyBhbHdheXMgdGFraW5nIDEwIGJ5dGVzIG9uIHRo
ZSB3aXJlLikKLSAgICoKLSAgICogQHBhcmFtIG4gQSBzaWduZWQgNjQtYml0IGludGVnZXIuCi0g
ICAqIEByZXR1cm4gQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIsIHN0b3JlZCBpbiBhIHNpZ25l
ZCBpbnQgYmVjYXVzZQotICAgKiAgICAgICAgIEphdmEgaGFzIG5vIGV4cGxpY2l0IHVuc2lnbmVk
IHN1cHBvcnQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGxvbmcgZW5jb2RlWmlnWmFnNjQoZmlu
YWwgbG9uZyBuKSB7Ci0gICAgLy8gTm90ZTogIHRoZSByaWdodC1zaGlmdCBtdXN0IGJlIGFyaXRo
bWV0aWMKLSAgICByZXR1cm4gKG4gPDwgMSkgXiAobiA+PiA2Myk7Ci0gIH0KLQotICBzdGF0aWMg
aW50IGNvbXB1dGVGaWVsZFNpemUoaW50IG51bWJlciwgaW50IHR5cGUsIE9iamVjdCBvYmplY3Qp
IHsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgIGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfQk9P
TDoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVCb29sU2l6ZShudW1iZXIsIChCb29sZWFuKSBvYmpl
Y3QpOwotICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9CWVRFUzoKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVCeXRlc1NpemUobnVtYmVyLCAoYnl0ZVtdKSBvYmplY3QpOwotICAgICAgY2FzZSBJ
bnRlcm5hbE5hbm8uVFlQRV9TVFJJTkc6Ci0gICAgICAgIHJldHVybiBjb21wdXRlU3RyaW5nU2l6
ZShudW1iZXIsIChTdHJpbmcpIG9iamVjdCk7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBF
X0ZMT0FUOgotICAgICAgICByZXR1cm4gY29tcHV0ZUZsb2F0U2l6ZShudW1iZXIsIChGbG9hdCkg
b2JqZWN0KTsKLSAgICAgIGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfRE9VQkxFOgotICAgICAgICBy
ZXR1cm4gY29tcHV0ZURvdWJsZVNpemUobnVtYmVyLCAoRG91YmxlKSBvYmplY3QpOwotICAgICAg
Y2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9FTlVNOgotICAgICAgICByZXR1cm4gY29tcHV0ZUVudW1T
aXplKG51bWJlciwgKEludGVnZXIpIG9iamVjdCk7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5U
WVBFX0ZJWEVEMzI6Ci0gICAgICAgIHJldHVybiBjb21wdXRlRml4ZWQzMlNpemUobnVtYmVyLCAo
SW50ZWdlcikgb2JqZWN0KTsKLSAgICAgIGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfSU5UMzI6Ci0g
ICAgICAgIHJldHVybiBjb21wdXRlSW50MzJTaXplKG51bWJlciwgKEludGVnZXIpIG9iamVjdCk7
Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBFX1VJTlQzMjoKLSAgICAgICAgcmV0dXJuIGNv
bXB1dGVVSW50MzJTaXplKG51bWJlciwgKEludGVnZXIpIG9iamVjdCk7Ci0gICAgICBjYXNlIElu
dGVybmFsTmFuby5UWVBFX1NJTlQzMjoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVTSW50MzJTaXpl
KG51bWJlciwgKEludGVnZXIpIG9iamVjdCk7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBF
X1NGSVhFRDMyOgotICAgICAgICByZXR1cm4gY29tcHV0ZVNGaXhlZDMyU2l6ZShudW1iZXIsIChJ
bnRlZ2VyKSBvYmplY3QpOwotICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9JTlQ2NDoKLSAg
ICAgICAgcmV0dXJuIGNvbXB1dGVJbnQ2NFNpemUobnVtYmVyLCAoTG9uZykgb2JqZWN0KTsKLSAg
ICAgIGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfVUlOVDY0OgotICAgICAgICByZXR1cm4gY29tcHV0
ZVVJbnQ2NFNpemUobnVtYmVyLCAoTG9uZykgb2JqZWN0KTsKLSAgICAgIGNhc2UgSW50ZXJuYWxO
YW5vLlRZUEVfU0lOVDY0OgotICAgICAgICByZXR1cm4gY29tcHV0ZVNJbnQ2NFNpemUobnVtYmVy
LCAoTG9uZykgb2JqZWN0KTsKLSAgICAgIGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfRklYRUQ2NDoK
LSAgICAgICAgcmV0dXJuIGNvbXB1dGVGaXhlZDY0U2l6ZShudW1iZXIsIChMb25nKSBvYmplY3Qp
OwotICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9TRklYRUQ2NDoKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVTRml4ZWQ2NFNpemUobnVtYmVyLCAoTG9uZykgb2JqZWN0KTsKLSAgICAgIGNhc2Ug
SW50ZXJuYWxOYW5vLlRZUEVfTUVTU0FHRToKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVNZXNzYWdl
U2l6ZShudW1iZXIsIChNZXNzYWdlTmFubykgb2JqZWN0KTsKLSAgICAgIGNhc2UgSW50ZXJuYWxO
YW5vLlRZUEVfR1JPVVA6Ci0gICAgICAgIHJldHVybiBjb21wdXRlR3JvdXBTaXplKG51bWJlciwg
KE1lc3NhZ2VOYW5vKSBvYmplY3QpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgdGhyb3cgbmV3
IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biB0eXBlOiAiICsgdHlwZSk7Ci0gICAg
fQotICB9Ci0KLSAgdm9pZCB3cml0ZUZpZWxkKGludCBudW1iZXIsIGludCB0eXBlLCBPYmplY3Qg
dmFsdWUpCi0gICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9ET1VCTEU6Ci0gICAgICAgIERvdWJsZSBkb3Vi
bGVWYWx1ZSA9IChEb3VibGUpIHZhbHVlOwotICAgICAgICB3cml0ZURvdWJsZShudW1iZXIsIGRv
dWJsZVZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBF
X0ZMT0FUOgotICAgICAgICBGbG9hdCBmbG9hdFZhbHVlID0gKEZsb2F0KSB2YWx1ZTsKLSAgICAg
ICAgd3JpdGVGbG9hdChudW1iZXIsIGZsb2F0VmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfSU5UNjQ6Ci0gICAgICAgIExvbmcgaW50NjRWYWx1ZSA9
IChMb25nKSB2YWx1ZTsKLSAgICAgICAgd3JpdGVJbnQ2NChudW1iZXIsIGludDY0VmFsdWUpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfVUlOVDY0OgotICAg
ICAgICBMb25nIHVpbnQ2NFZhbHVlID0gKExvbmcpIHZhbHVlOwotICAgICAgICB3cml0ZVVJbnQ2
NChudW1iZXIsIHVpbnQ2NFZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEludGVy
bmFsTmFuby5UWVBFX0lOVDMyOgotICAgICAgICBJbnRlZ2VyIGludDMyVmFsdWUgPSAoSW50ZWdl
cikgdmFsdWU7Ci0gICAgICAgIHdyaXRlSW50MzIobnVtYmVyLCBpbnQzMlZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBFX0ZJWEVENjQ6Ci0gICAgICAg
IExvbmcgZml4ZWQ2NFZhbHVlID0gKExvbmcpIHZhbHVlOwotICAgICAgICB3cml0ZUZpeGVkNjQo
bnVtYmVyLCBmaXhlZDY0VmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSW50ZXJu
YWxOYW5vLlRZUEVfRklYRUQzMjoKLSAgICAgICAgSW50ZWdlciBmaXhlZDMyVmFsdWUgPSAoSW50
ZWdlcikgdmFsdWU7Ci0gICAgICAgIHdyaXRlRml4ZWQzMihudW1iZXIsIGZpeGVkMzJWYWx1ZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9CT09MOgotICAg
ICAgICBCb29sZWFuIGJvb2xWYWx1ZSA9IChCb29sZWFuKSB2YWx1ZTsKLSAgICAgICAgd3JpdGVC
b29sKG51bWJlciwgYm9vbFZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEludGVy
bmFsTmFuby5UWVBFX1NUUklORzoKLSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gKFN0cmlu
ZykgdmFsdWU7Ci0gICAgICAgIHdyaXRlU3RyaW5nKG51bWJlciwgc3RyaW5nVmFsdWUpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgSW50ZXJuYWxOYW5vLlRZUEVfQllURVM6Ci0gICAgICAg
IGJ5dGVbXSBieXRlc1ZhbHVlID0gKGJ5dGVbXSkgdmFsdWU7Ci0gICAgICAgIHdyaXRlQnl0ZXMo
bnVtYmVyLCBieXRlc1ZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEludGVybmFs
TmFuby5UWVBFX1VJTlQzMjoKLSAgICAgICAgSW50ZWdlciB1aW50MzJWYWx1ZSA9IChJbnRlZ2Vy
KSB2YWx1ZTsKLSAgICAgICAgd3JpdGVVSW50MzIobnVtYmVyLCB1aW50MzJWYWx1ZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9FTlVNOgotICAgICAgICBJ
bnRlZ2VyIGVudW1WYWx1ZSA9IChJbnRlZ2VyKSB2YWx1ZTsKLSAgICAgICAgd3JpdGVFbnVtKG51
bWJlciwgZW51bVZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEludGVybmFsTmFu
by5UWVBFX1NGSVhFRDMyOgotICAgICAgICBJbnRlZ2VyIHNmaXhlZDMyVmFsdWUgPSAoSW50ZWdl
cikgdmFsdWU7Ci0gICAgICAgIHdyaXRlU0ZpeGVkMzIobnVtYmVyLCBzZml4ZWQzMlZhbHVlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEludGVybmFsTmFuby5UWVBFX1NGSVhFRDY0Ogot
ICAgICAgICBMb25nIHNmaXhlZDY0VmFsdWUgPSAoTG9uZykgdmFsdWU7Ci0gICAgICAgIHdyaXRl
U0ZpeGVkNjQobnVtYmVyLCBzZml4ZWQ2NFZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEludGVybmFsTmFuby5UWVBFX1NJTlQzMjoKLSAgICAgICAgSW50ZWdlciBzaW50MzJWYWx1
ZSA9IChJbnRlZ2VyKSB2YWx1ZTsKLSAgICAgICAgd3JpdGVTSW50MzIobnVtYmVyLCBzaW50MzJW
YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJbnRlcm5hbE5hbm8uVFlQRV9TSU5U
NjQ6Ci0gICAgICAgIExvbmcgc2ludDY0VmFsdWUgPSAoTG9uZykgdmFsdWU7Ci0gICAgICAgIHdy
aXRlU0ludDY0KG51bWJlciwgc2ludDY0VmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgSW50ZXJuYWxOYW5vLlRZUEVfTUVTU0FHRToKLSAgICAgICAgTWVzc2FnZU5hbm8gbWVzc2Fn
ZVZhbHVlID0gKE1lc3NhZ2VOYW5vKSB2YWx1ZTsKLSAgICAgICAgd3JpdGVNZXNzYWdlKG51bWJl
ciwgbWVzc2FnZVZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEludGVybmFsTmFu
by5UWVBFX0dST1VQOgotICAgICAgICBNZXNzYWdlTmFubyBncm91cFZhbHVlID0gKE1lc3NhZ2VO
YW5vKSB2YWx1ZTsKLSAgICAgICAgd3JpdGVHcm91cChudW1iZXIsIGdyb3VwVmFsdWUpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlv
bigiVW5rbm93biB0eXBlOiAiICsgdHlwZSk7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vRXh0ZW5kYWJs
ZU1lc3NhZ2VOYW5vLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9uYW5vL0V4dGVuZGFibGVNZXNzYWdlTmFuby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4Nzk3M2Q3NmYwNzAzNDI0OWQ4MzNhYmJjNWU0ZGZiNDIzNmViMjM4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL21h
aW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vRXh0ZW5kYWJsZU1lc3NhZ2VOYW5vLmph
dmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxMyBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vOwotCi1pbXBv
cnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIG9mIHRob3NlIFBy
b3RvY29sIEJ1ZmZlciBtZXNzYWdlcyB0aGF0IG5lZWQgdG8gc3RvcmUgdW5rbm93biBmaWVsZHMs
Ci0gKiBzdWNoIGFzIGV4dGVuc2lvbnMuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFeHRl
bmRhYmxlTWVzc2FnZU5hbm88TSBleHRlbmRzIEV4dGVuZGFibGVNZXNzYWdlTmFubzxNPj4KLSAg
ICAgICAgZXh0ZW5kcyBNZXNzYWdlTmFubyB7Ci0gICAgLyoqCi0gICAgICogQSBjb250YWluZXIg
Zm9yIGZpZWxkcyB1bmtub3duIHRvIHRoZSBtZXNzYWdlLCBpbmNsdWRpbmcgZXh0ZW5zaW9ucy4g
RXh0ZW5zaW9uIGZpZWxkcyBjYW4KLSAgICAgKiBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUg
e0BsaW5rICNnZXRFeHRlbnNpb259IGFuZCB7QGxpbmsgI3NldEV4dGVuc2lvbn0gbWV0aG9kcy4K
LSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgRmllbGRBcnJheSB1bmtub3duRmllbGREYXRhOwotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIGludCBjb21wdXRlU2VyaWFsaXplZFNpemUoKSB7
Ci0gICAgICAgIGludCBzaXplID0gMDsKLSAgICAgICAgaWYgKHVua25vd25GaWVsZERhdGEgIT0g
bnVsbCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1bmtub3duRmllbGREYXRh
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgRmllbGREYXRhIGZpZWxkID0gdW5rbm93
bkZpZWxkRGF0YS5kYXRhQXQoaSk7Ci0gICAgICAgICAgICAgICAgc2l6ZSArPSBmaWVsZC5jb21w
dXRlU2VyaWFsaXplZFNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0
ZVRvKENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8gb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24g
ewotICAgICAgICBpZiAodW5rbm93bkZpZWxkRGF0YSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1bmtub3duRmll
bGREYXRhLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBGaWVsZERhdGEgZmllbGQgPSB1bmtu
b3duRmllbGREYXRhLmRhdGFBdChpKTsKLSAgICAgICAgICAgIGZpZWxkLndyaXRlVG8ob3V0cHV0
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiB0aGVyZSBp
cyBhIHZhbHVlIHN0b3JlZCBmb3IgdGhlIHNwZWNpZmllZCBleHRlbnNpb24gaW4gdGhpcwotICAg
ICAqIG1lc3NhZ2UuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFzRXh0ZW5z
aW9uKEV4dGVuc2lvbjxNLCA/PiBleHRlbnNpb24pIHsKLSAgICAgICAgaWYgKHVua25vd25GaWVs
ZERhdGEgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIEZpZWxkRGF0YSBmaWVsZCA9IHVua25vd25GaWVsZERhdGEuZ2V0KFdpcmVGb3JtYXRO
YW5vLmdldFRhZ0ZpZWxkTnVtYmVyKGV4dGVuc2lvbi50YWcpKTsKLSAgICAgICAgcmV0dXJuIGZp
ZWxkICE9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdmFsdWUgc3Rv
cmVkIGluIHRoZSBzcGVjaWZpZWQgZXh0ZW5zaW9uIG9mIHRoaXMgbWVzc2FnZS4KLSAgICAgKi8K
LSAgICBwdWJsaWMgZmluYWwgPFQ+IFQgZ2V0RXh0ZW5zaW9uKEV4dGVuc2lvbjxNLCBUPiBleHRl
bnNpb24pIHsKLSAgICAgICAgaWYgKHVua25vd25GaWVsZERhdGEgPT0gbnVsbCkgewotICAgICAg
ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgRmllbGREYXRhIGZpZWxkID0g
dW5rbm93bkZpZWxkRGF0YS5nZXQoV2lyZUZvcm1hdE5hbm8uZ2V0VGFnRmllbGROdW1iZXIoZXh0
ZW5zaW9uLnRhZykpOwotICAgICAgICByZXR1cm4gZmllbGQgPT0gbnVsbCA/IG51bGwgOiBmaWVs
ZC5nZXRWYWx1ZShleHRlbnNpb24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhl
IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZXh0ZW5zaW9uIG9mIHRoaXMgbWVzc2FnZS4KLSAgICAg
Ki8KLSAgICBwdWJsaWMgZmluYWwgPFQ+IE0gc2V0RXh0ZW5zaW9uKEV4dGVuc2lvbjxNLCBUPiBl
eHRlbnNpb24sIFQgdmFsdWUpIHsKLSAgICAgICAgaW50IGZpZWxkTnVtYmVyID0gV2lyZUZvcm1h
dE5hbm8uZ2V0VGFnRmllbGROdW1iZXIoZXh0ZW5zaW9uLnRhZyk7Ci0gICAgICAgIGlmICh2YWx1
ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAodW5rbm93bkZpZWxkRGF0YSAhPSBudWxsKSB7
Ci0gICAgICAgICAgICAgICAgdW5rbm93bkZpZWxkRGF0YS5yZW1vdmUoZmllbGROdW1iZXIpOwot
ICAgICAgICAgICAgICAgIGlmICh1bmtub3duRmllbGREYXRhLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgICAgICB1bmtub3duRmllbGREYXRhID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBGaWVsZERhdGEg
ZmllbGQgPSBudWxsOwotICAgICAgICAgICAgaWYgKHVua25vd25GaWVsZERhdGEgPT0gbnVsbCkg
ewotICAgICAgICAgICAgICAgIHVua25vd25GaWVsZERhdGEgPSBuZXcgRmllbGRBcnJheSgpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmaWVsZCA9IHVua25vd25GaWVs
ZERhdGEuZ2V0KGZpZWxkTnVtYmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChm
aWVsZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdW5rbm93bkZpZWxkRGF0YS5wdXQoZmll
bGROdW1iZXIsIG5ldyBGaWVsZERhdGEoZXh0ZW5zaW9uLCB2YWx1ZSkpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmaWVsZC5zZXRWYWx1ZShleHRlbnNpb24sIHZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBTdXBwcmVzc1dhcm5pbmdz
KCJ1bmNoZWNrZWQiKSAvLyBHZW5lcmF0ZWQgY29kZSBzaG91bGQgZ3VhcmFudGVlIHR5cGUgc2Fm
ZXR5Ci0gICAgICAgIE0gdHlwZWRUaGlzID0gKE0pIHRoaXM7Ci0gICAgICAgIHJldHVybiB0eXBl
ZFRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RvcmVzIHRoZSBiaW5hcnkgZGF0YSBv
ZiBhbiB1bmtub3duIGZpZWxkLgotICAgICAqCi0gICAgICogPHA+R2VuZXJhdGVkIG1lc3NhZ2Vz
IHdpbGwgY2FsbCB0aGlzIGZvciB1bmtub3duIGZpZWxkcyBpZiB0aGUgc3RvcmVfdW5rbm93bl9m
aWVsZHMKLSAgICAgKiBvcHRpb24gaXMgb24uCi0gICAgICoKLSAgICAgKiA8cD5Ob3RlIHRoYXQg
dGhlIHRhZyBtaWdodCBiZSBhIGVuZC1ncm91cCB0YWcgKHJhdGhlciB0aGFuIHRoZSBzdGFydCBv
ZiBhbiB1bmtub3duIGZpZWxkKSBpbgotICAgICAqIHdoaWNoIGNhc2Ugd2UgZG8gbm90IHdhbnQg
dG8gYWRkIGFuIHVua25vd24gZmllbGQgZW50cnkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5w
dXQgdGhlIGlucHV0IGJ1ZmZlci4KLSAgICAgKiBAcGFyYW0gdGFnIHRoZSB0YWcgb2YgdGhlIGZp
ZWxkLgotCi0gICAgICogQHJldHVybiB7QGxpdGVyYWwgdHJ1ZX0gdW5sZXNzIHRoZSB0YWcgaXMg
YW4gZW5kLWdyb3VwIHRhZy4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBz
dG9yZVVua25vd25GaWVsZChDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8gaW5wdXQsIGludCB0YWcp
Ci0gICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBpbnQgc3RhcnRQb3Mg
PSBpbnB1dC5nZXRQb3NpdGlvbigpOwotICAgICAgICBpZiAoIWlucHV0LnNraXBGaWVsZCh0YWcp
KSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBUaGlzIHdhc24ndCBhbiB1bmtub3du
IGZpZWxkLCBpdCdzIGFuIGVuZC1ncm91cCB0YWcuCi0gICAgICAgIH0KLSAgICAgICAgaW50IGZp
ZWxkTnVtYmVyID0gV2lyZUZvcm1hdE5hbm8uZ2V0VGFnRmllbGROdW1iZXIodGFnKTsKLSAgICAg
ICAgaW50IGVuZFBvcyA9IGlucHV0LmdldFBvc2l0aW9uKCk7Ci0gICAgICAgIGJ5dGVbXSBieXRl
cyA9IGlucHV0LmdldERhdGEoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKTsKLSAgICAgICAg
VW5rbm93bkZpZWxkRGF0YSB1bmtub3duRmllbGQgPSBuZXcgVW5rbm93bkZpZWxkRGF0YSh0YWcs
IGJ5dGVzKTsKLQotICAgICAgICBGaWVsZERhdGEgZmllbGQgPSBudWxsOwotICAgICAgICBpZiAo
dW5rbm93bkZpZWxkRGF0YSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB1bmtub3duRmllbGREYXRh
ID0gbmV3IEZpZWxkQXJyYXkoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZpZWxk
ID0gdW5rbm93bkZpZWxkRGF0YS5nZXQoZmllbGROdW1iZXIpOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChmaWVsZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBmaWVsZCA9IG5ldyBGaWVsZERhdGEo
KTsKLSAgICAgICAgICAgIHVua25vd25GaWVsZERhdGEucHV0KGZpZWxkTnVtYmVyLCBmaWVsZCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZmllbGQuYWRkVW5rbm93bkZpZWxkKHVua25vd25GaWVsZCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBNIGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKLSAgICAgICAg
TSBjbG9uZWQgPSAoTSkgc3VwZXIuY2xvbmUoKTsKLSAgICAgICAgSW50ZXJuYWxOYW5vLmNsb25l
VW5rbm93bkZpZWxkRGF0YSh0aGlzLCBjbG9uZWQpOwotICAgICAgICByZXR1cm4gY2xvbmVkOwot
ICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL25hbm8vRXh0ZW5zaW9uLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dv
b2dsZS9wcm90b2J1Zi9uYW5vL0V4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjNDU4ZjliMWZjODBmZDI4MTE3YjU1ZGUxMWVhNWUzZGYzNWEwOWVmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL21haW4v
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVs
bApAQCAtMSw3MDYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vOwotCi1pbXBvcnQgamF2YS5pby5JT0V4
Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5BcnJheTsKLWltcG9ydCBqYXZhLnV0
aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIFJlcHJlc2Vu
dHMgYW4gZXh0ZW5zaW9uLgotICoKLSAqIEBhdXRob3IgYmR1ZmZAZ29vZ2xlLmNvbSAoQnJpYW4g
RHVmZikKLSAqIEBhdXRob3IgbWF4dHJveUBnb29nbGUuY29tIChNYXggQ2FpKQotICogQHBhcmFt
IDxNPiB0aGUgdHlwZSBvZiB0aGUgZXh0ZW5kYWJsZSBtZXNzYWdlIHRoaXMgZXh0ZW5zaW9uIGlz
IGZvci4KLSAqIEBwYXJhbSA8VD4gdGhlIEphdmEgdHlwZSBvZiB0aGUgZXh0ZW5zaW9uOyBzZWUg
e0BsaW5rICNjbGF6en0uCi0gKi8KLXB1YmxpYyBjbGFzcyBFeHRlbnNpb248TSBleHRlbmRzIEV4
dGVuZGFibGVNZXNzYWdlTmFubzxNPiwgVD4gewotCi0gICAgLyoKLSAgICAgKiBCZWNhdXNlIHdl
IHR5cGljYWxseSBvbmx5IGRlZmluZSBtZXNzYWdlLXR5cGVkIGV4dGVuc2lvbnMsIHRoZSBFeHRl
bnNpb24gY2xhc3MgaGllcmFyY2h5IGlzCi0gICAgICogZGVzaWduZWQgYXMgZm9sbG93cywgdG8g
YWxsb3cgYSBiaWcgYW1vdW50IG9mIGNvZGUgaW4gdGhpcyBmaWxlIHRvIGJlIHJlbW92ZWQgYnkg
UHJvR3VhcmQ6Ci0gICAgICoKLSAgICAgKiAgICAgICAgICAgIEV4dGVuc2lvbiAgICAgICAgICAv
LyByZWFkeSB0byB1c2UgZm9yIG1lc3NhZ2UvZ3JvdXAgdHlwZWQgZXh0ZW5zaW9ucwotICAgICAq
ICAgICAgICAgICAgICAgIM6UCi0gICAgICogICAgICAgICAgICAgICAgfAotICAgICAqICAgICAg
IFByaW1pdGl2ZUV4dGVuc2lvbiAgICAgIC8vIGZvciBwcmltaXRpdmUvZW51bSB0eXBlZCBleHRl
bnNpb25zCi0gICAgICovCi0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX0RPVUJM
RSAgID0gSW50ZXJuYWxOYW5vLlRZUEVfRE9VQkxFOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg
aW50IFRZUEVfRkxPQVQgICAgPSBJbnRlcm5hbE5hbm8uVFlQRV9GTE9BVDsKLSAgICBwdWJsaWMg
c3RhdGljIGZpbmFsIGludCBUWVBFX0lOVDY0ICAgID0gSW50ZXJuYWxOYW5vLlRZUEVfSU5UNjQ7
Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9VSU5UNjQgICA9IEludGVybmFsTmFu
by5UWVBFX1VJTlQ2NDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX0lOVDMyICAg
ID0gSW50ZXJuYWxOYW5vLlRZUEVfSU5UMzI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQg
VFlQRV9GSVhFRDY0ICA9IEludGVybmFsTmFuby5UWVBFX0ZJWEVENjQ7Ci0gICAgcHVibGljIHN0
YXRpYyBmaW5hbCBpbnQgVFlQRV9GSVhFRDMyICA9IEludGVybmFsTmFuby5UWVBFX0ZJWEVEMzI7
Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9CT09MICAgICA9IEludGVybmFsTmFu
by5UWVBFX0JPT0w7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9TVFJJTkcgICA9
IEludGVybmFsTmFuby5UWVBFX1NUUklORzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBU
WVBFX0dST1VQICAgID0gSW50ZXJuYWxOYW5vLlRZUEVfR1JPVVA7Ci0gICAgcHVibGljIHN0YXRp
YyBmaW5hbCBpbnQgVFlQRV9NRVNTQUdFICA9IEludGVybmFsTmFuby5UWVBFX01FU1NBR0U7Ci0g
ICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9CWVRFUyAgICA9IEludGVybmFsTmFuby5U
WVBFX0JZVEVTOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfVUlOVDMyICAgPSBJ
bnRlcm5hbE5hbm8uVFlQRV9VSU5UMzI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQ
RV9FTlVNICAgICA9IEludGVybmFsTmFuby5UWVBFX0VOVU07Ci0gICAgcHVibGljIHN0YXRpYyBm
aW5hbCBpbnQgVFlQRV9TRklYRUQzMiA9IEludGVybmFsTmFuby5UWVBFX1NGSVhFRDMyOwotICAg
IHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfU0ZJWEVENjQgPSBJbnRlcm5hbE5hbm8uVFlQ
RV9TRklYRUQ2NDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1NJTlQzMiAgID0g
SW50ZXJuYWxOYW5vLlRZUEVfU0lOVDMyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZ
UEVfU0lOVDY0ICAgPSBJbnRlcm5hbE5hbm8uVFlQRV9TSU5UNjQ7Ci0KLSAgICAvKioKLSAgICAg
KiBDcmVhdGVzIGFuIHtAY29kZSBFeHRlbnNpb259IG9mIHRoZSBnaXZlbiBtZXNzYWdlIHR5cGUg
YW5kIHRhZyBudW1iZXIuCi0gICAgICogU2hvdWxkIGJlIHVzZWQgYnkgdGhlIGdlbmVyYXRlZCBj
b2RlIG9ubHkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdHlwZSB7QGxpbmsgI1RZUEVfTUVTU0FH
RX0gb3Ige0BsaW5rICNUWVBFX0dST1VQfQotICAgICAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsg
I2NyZWF0ZU1lc3NhZ2VUeXBlZChpbnQsIENsYXNzLCBsb25nKX0gaW5zdGVhZC4KLSAgICAgKi8K
LSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBzdGF0aWMgPE0gZXh0ZW5kcyBFeHRlbmRhYmxl
TWVzc2FnZU5hbm88TT4sIFQgZXh0ZW5kcyBNZXNzYWdlTmFubz4KLSAgICAgICAgICAgIEV4dGVu
c2lvbjxNLCBUPiBjcmVhdGVNZXNzYWdlVHlwZWQoaW50IHR5cGUsIENsYXNzPFQ+IGNsYXp6LCBp
bnQgdGFnKSB7Ci0gICAgICAgIHJldHVybiBuZXcgRXh0ZW5zaW9uPE0sIFQ+KHR5cGUsIGNsYXp6
LCB0YWcsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBOb3RlOiB0aGVzZSBjcmVhdGUuLi4oKSBt
ZXRob2RzIHRha2UgYSBsb25nIGZvciB0aGUgdGFnIHBhcmFtZXRlciwKLSAgICAvLyBiZWNhdXNl
IHRhZ3MgYXJlIHJlcHJlc2VudGVkIGFzIHVuc2lnbmVkIGludHMsIGFuZCB0aGVzZSB2YWx1ZXMg
ZXhpc3QKLSAgICAvLyBpbiBnZW5lcmF0ZWQgY29kZSBhcyBsb25nIHZhbHVlcy4gSG93ZXZlciwg
dGhleSBjYW4gZml0IGluIDMyLWJpdHMsIHNvCi0gICAgLy8gaXQncyBzYWZlIHRvIGNhc3QgdGhl
bSB0byBpbnQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4KLQotICAgIC8qKgotICAgICAqIENy
ZWF0ZXMgYW4ge0Bjb2RlIEV4dGVuc2lvbn0gb2YgdGhlIGdpdmVuIG1lc3NhZ2UgdHlwZSBhbmQg
dGFnIG51bWJlci4KLSAgICAgKiBTaG91bGQgYmUgdXNlZCBieSB0aGUgZ2VuZXJhdGVkIGNvZGUg
b25seS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB0eXBlIHtAbGluayAjVFlQRV9NRVNTQUdFfSBv
ciB7QGxpbmsgI1RZUEVfR1JPVVB9Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyA8TSBleHRl
bmRzIEV4dGVuZGFibGVNZXNzYWdlTmFubzxNPiwgVCBleHRlbmRzIE1lc3NhZ2VOYW5vPgotICAg
ICAgICAgICAgRXh0ZW5zaW9uPE0sIFQ+IGNyZWF0ZU1lc3NhZ2VUeXBlZChpbnQgdHlwZSwgQ2xh
c3M8VD4gY2xhenosIGxvbmcgdGFnKSB7Ci0gICAgICAgIHJldHVybiBuZXcgRXh0ZW5zaW9uPE0s
IFQ+KHR5cGUsIGNsYXp6LCAoaW50KSB0YWcsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBDcmVhdGVzIGEgcmVwZWF0ZWQge0Bjb2RlIEV4dGVuc2lvbn0gb2YgdGhlIGdpdmVuIG1l
c3NhZ2UgdHlwZSBhbmQgdGFnIG51bWJlci4KLSAgICAgKiBTaG91bGQgYmUgdXNlZCBieSB0aGUg
Z2VuZXJhdGVkIGNvZGUgb25seS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB0eXBlIHtAbGluayAj
VFlQRV9NRVNTQUdFfSBvciB7QGxpbmsgI1RZUEVfR1JPVVB9Ci0gICAgICovCi0gICAgcHVibGlj
IHN0YXRpYyA8TSBleHRlbmRzIEV4dGVuZGFibGVNZXNzYWdlTmFubzxNPiwgVCBleHRlbmRzIE1l
c3NhZ2VOYW5vPgotICAgICAgICAgICAgRXh0ZW5zaW9uPE0sIFRbXT4gY3JlYXRlUmVwZWF0ZWRN
ZXNzYWdlVHlwZWQoaW50IHR5cGUsIENsYXNzPFRbXT4gY2xhenosIGxvbmcgdGFnKSB7Ci0gICAg
ICAgIHJldHVybiBuZXcgRXh0ZW5zaW9uPE0sIFRbXT4odHlwZSwgY2xhenosIChpbnQpIHRhZywg
dHJ1ZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbiB7QGNvZGUgRXh0ZW5z
aW9ufSBvZiB0aGUgZ2l2ZW4gcHJpbWl0aXZlIHR5cGUgYW5kIHRhZyBudW1iZXIuCi0gICAgICog
U2hvdWxkIGJlIHVzZWQgYnkgdGhlIGdlbmVyYXRlZCBjb2RlIG9ubHkuCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gdHlwZSBvbmUgb2Yge0Bjb2RlIFRZUEVfKn0sIGV4Y2VwdCB7QGxpbmsgI1RZUEVf
TUVTU0FHRX0gYW5kIHtAbGluayAjVFlQRV9HUk9VUH0KLSAgICAgKiBAcGFyYW0gY2xhenogdGhl
IGJveGVkIEphdmEgdHlwZSBvZiB0aGlzIGV4dGVuc2lvbgotICAgICAqLwotICAgIHB1YmxpYyBz
dGF0aWMgPE0gZXh0ZW5kcyBFeHRlbmRhYmxlTWVzc2FnZU5hbm88TT4sIFQ+Ci0gICAgICAgICAg
ICBFeHRlbnNpb248TSwgVD4gY3JlYXRlUHJpbWl0aXZlVHlwZWQoaW50IHR5cGUsIENsYXNzPFQ+
IGNsYXp6LCBsb25nIHRhZykgewotICAgICAgICByZXR1cm4gbmV3IFByaW1pdGl2ZUV4dGVuc2lv
bjxNLCBUPih0eXBlLCBjbGF6eiwgKGludCkgdGFnLCBmYWxzZSwgMCwgMCk7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIHJlcGVhdGVkIHtAY29kZSBFeHRlbnNpb259IG9mIHRo
ZSBnaXZlbiBwcmltaXRpdmUgdHlwZSBhbmQgdGFnIG51bWJlci4KLSAgICAgKiBTaG91bGQgYmUg
dXNlZCBieSB0aGUgZ2VuZXJhdGVkIGNvZGUgb25seS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB0
eXBlIG9uZSBvZiB7QGNvZGUgVFlQRV8qfSwgZXhjZXB0IHtAbGluayAjVFlQRV9NRVNTQUdFfSBh
bmQge0BsaW5rICNUWVBFX0dST1VQfQotICAgICAqIEBwYXJhbSBjbGF6eiB0aGUgSmF2YSBhcnJh
eSB0eXBlIG9mIHRoaXMgZXh0ZW5zaW9uLCB3aXRoIGFuIHVuYm94ZWQgY29tcG9uZW50IHR5cGUK
LSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIDxNIGV4dGVuZHMgRXh0ZW5kYWJsZU1lc3NhZ2VO
YW5vPE0+LCBUPgotICAgICAgICAgICAgRXh0ZW5zaW9uPE0sIFQ+IGNyZWF0ZVJlcGVhdGVkUHJp
bWl0aXZlVHlwZWQoCi0gICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBDbGFzczxUPiBjbGF6
eiwgbG9uZyB0YWcsIGxvbmcgbm9uUGFja2VkVGFnLCBsb25nIHBhY2tlZFRhZykgewotICAgICAg
ICByZXR1cm4gbmV3IFByaW1pdGl2ZUV4dGVuc2lvbjxNLCBUPih0eXBlLCBjbGF6eiwgKGludCkg
dGFnLCB0cnVlLAotICAgICAgICAgICAgKGludCkgbm9uUGFja2VkVGFnLCAoaW50KSBwYWNrZWRU
YWcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb3RvY29sIEJ1ZmZlciB0eXBlIG9mIHRo
aXMgZXh0ZW5zaW9uOyBvbmUgb2YgdGhlIHtAY29kZSBUWVBFX30gY29uc3RhbnRzLgotICAgICAq
LwotICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgdHlwZTsKLQotICAgIC8qKgotICAgICAqIEphdmEg
dHlwZSBvZiB0aGlzIGV4dGVuc2lvbi4gRm9yIGEgc2luZ3VsYXIgZXh0ZW5zaW9uLCB0aGlzIGlz
IHRoZSBib3hlZCBKYXZhIHR5cGUgZm9yIHRoZQotICAgICAqIFByb3RvY29sIEJ1ZmZlciB7QGxp
bmsgI3R5cGV9OyBmb3IgYSByZXBlYXRlZCBleHRlbnNpb24sIHRoaXMgaXMgYW4gYXJyYXkgdHlw
ZSB3aG9zZQotICAgICAqIGNvbXBvbmVudCB0eXBlIGlzIHRoZSB1bmJveGVkIEphdmEgdHlwZSBm
b3Ige0BsaW5rICN0eXBlfS4gRm9yIGV4YW1wbGUsIGZvciBhIHNpbmd1bGFyCi0gICAgICoge0Bj
b2RlIGludDMyfS97QGxpbmsgI1RZUEVfSU5UMzJ9IGV4dGVuc2lvbiwgdGhpcyBlcXVhbHMge0Bj
b2RlIEludGVnZXIuY2xhc3N9OyBmb3IgYQotICAgICAqIHJlcGVhdGVkIHtAY29kZSBpbnQzMn0g
ZXh0ZW5zaW9uLCB0aGlzIGVxdWFscyB7QGNvZGUgaW50W10uY2xhc3N9LgotICAgICAqLwotICAg
IHByb3RlY3RlZCBmaW5hbCBDbGFzczxUPiBjbGF6ejsKLQotICAgIC8qKgotICAgICAqIFRhZyBu
dW1iZXIgb2YgdGhpcyBleHRlbnNpb24uIFRoZSBkYXRhIHNob3VsZCBiZSB2aWV3ZWQgYXMgYW4g
dW5zaWduZWQgMzItYml0IHZhbHVlLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgdGFn
OwotCi0gICAgLyoqCi0gICAgICogV2hldGhlciB0aGlzIGV4dGVuc2lvbiBpcyByZXBlYXRlZC4K
LSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiByZXBlYXRlZDsKLQotICAgIHBy
aXZhdGUgRXh0ZW5zaW9uKGludCB0eXBlLCBDbGFzczxUPiBjbGF6eiwgaW50IHRhZywgYm9vbGVh
biByZXBlYXRlZCkgewotICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgICAgICB0aGlzLmNs
YXp6ID0gY2xheno7Ci0gICAgICAgIHRoaXMudGFnID0gdGFnOwotICAgICAgICB0aGlzLnJlcGVh
dGVkID0gcmVwZWF0ZWQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFs
dWUgb2YgdGhpcyBleHRlbnNpb24gc3RvcmVkIGluIHRoZSBnaXZlbiBsaXN0IG9mIHVua25vd24g
ZmllbGRzLCBvcgotICAgICAqIHtAY29kZSBudWxsfSBpZiBubyB1bmtub3duIGZpZWxkcyBtYXRj
aGVzIHRoaXMgZXh0ZW5zaW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIHVua25vd25GaWVsZHMg
YSBsaXN0IG9mIHtAbGluayBVbmtub3duRmllbGREYXRhfS4gQWxsIG9mIHRoZSBlbGVtZW50cyBt
dXN0IGhhdmUgYSB0YWcKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICB0aGF0IG1hdGNoZXMg
dGhpcyBFeHRlbnNpb24ncyB0YWcuCi0gICAgICoKLSAgICAgKi8KLSAgICBmaW5hbCBUIGdldFZh
bHVlRnJvbShMaXN0PFVua25vd25GaWVsZERhdGE+IHVua25vd25GaWVsZHMpIHsKLSAgICAgICAg
aWYgKHVua25vd25GaWVsZHMgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlcGVhdGVkID8gZ2V0UmVwZWF0ZWRWYWx1ZUZyb20o
dW5rbm93bkZpZWxkcykgOiBnZXRTaW5ndWxhclZhbHVlRnJvbSh1bmtub3duRmllbGRzKTsKLSAg
ICB9Ci0KLSAgICBwcml2YXRlIFQgZ2V0UmVwZWF0ZWRWYWx1ZUZyb20oTGlzdDxVbmtub3duRmll
bGREYXRhPiB1bmtub3duRmllbGRzKSB7Ci0gICAgICAgIC8vIEZvciByZXBlYXRlZCBleHRlbnNp
b25zLCByZWFkIGFsbCBtYXRjaGluZyB1bmtub3duIGZpZWxkcyBpbiB0aGVpciBvcmlnaW5hbCBv
cmRlci4KLSAgICAgICAgTGlzdDxPYmplY3Q+IHJlc3VsdExpc3QgPSBuZXcgQXJyYXlMaXN0PE9i
amVjdD4oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1bmtub3duRmllbGRzLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgICAgICBVbmtub3duRmllbGREYXRhIGRhdGEgPSB1bmtub3duRmll
bGRzLmdldChpKTsKLSAgICAgICAgICAgIGlmIChkYXRhLmJ5dGVzLmxlbmd0aCAhPSAwKSB7Ci0g
ICAgICAgICAgICAgICAgcmVhZERhdGFJbnRvKGRhdGEsIHJlc3VsdExpc3QpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHJlc3VsdFNpemUgPSByZXN1bHRMaXN0LnNp
emUoKTsKLSAgICAgICAgaWYgKHJlc3VsdFNpemUgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBUIHJlc3VsdCA9IGNsYXp6LmNh
c3QoQXJyYXkubmV3SW5zdGFuY2UoY2xhenouZ2V0Q29tcG9uZW50VHlwZSgpLCByZXN1bHRTaXpl
KSk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdFNpemU7IGkrKykgewot
ICAgICAgICAgICAgICAgIEFycmF5LnNldChyZXN1bHQsIGksIHJlc3VsdExpc3QuZ2V0KGkpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBwcml2YXRlIFQgZ2V0U2luZ3VsYXJWYWx1ZUZyb20oTGlzdDxVbmtub3duRmll
bGREYXRhPiB1bmtub3duRmllbGRzKSB7Ci0gICAgICAgIC8vIEZvciBzaW5ndWxhciBleHRlbnNp
b25zLCBnZXQgdGhlIGxhc3QgcGllY2Ugb2YgZGF0YSBzdG9yZWQgdW5kZXIgdGhpcyBleHRlbnNp
b24uCi0gICAgICAgIGlmICh1bmtub3duRmllbGRzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgVW5rbm93bkZpZWxkRGF0YSBsYXN0RGF0
YSA9IHVua25vd25GaWVsZHMuZ2V0KHVua25vd25GaWVsZHMuc2l6ZSgpIC0gMSk7Ci0gICAgICAg
IHJldHVybiBjbGF6ei5jYXN0KHJlYWREYXRhKENvZGVkSW5wdXRCeXRlQnVmZmVyTmFuby5uZXdJ
bnN0YW5jZShsYXN0RGF0YS5ieXRlcykpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgT2JqZWN0
IHJlYWREYXRhKENvZGVkSW5wdXRCeXRlQnVmZmVyTmFubyBpbnB1dCkgewotICAgICAgICAvLyBU
aGlzIGltcGxlbWVudGF0aW9uIGlzIGZvciBtZXNzYWdlL2dyb3VwIGV4dGVuc2lvbnMuCi0gICAg
ICAgIENsYXNzPD8+IG1lc3NhZ2VUeXBlID0gcmVwZWF0ZWQgPyBjbGF6ei5nZXRDb21wb25lbnRU
eXBlKCkgOiBjbGF6ejsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAg
TWVzc2FnZU5hbm8gZ3JvdXAgPSAoTWVzc2FnZU5hbm8pIG1lc3NhZ2VUeXBlLm5ld0luc3RhbmNl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlucHV0LnJlYWRHcm91cChncm91cCwgV2lyZUZvcm1h
dE5hbm8uZ2V0VGFnRmllbGROdW1iZXIodGFnKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBncm91cDsKLSAgICAgICAgICAgICAgICBjYXNlIFRZUEVfTUVTU0FHRToKLSAgICAgICAgICAg
ICAgICAgICAgTWVzc2FnZU5hbm8gbWVzc2FnZSA9IChNZXNzYWdlTmFubykgbWVzc2FnZVR5cGUu
bmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgaW5wdXQucmVhZE1lc3NhZ2UobWVz
c2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlOwotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24oIlVua25vd24gdHlwZSAiICsgdHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhy
b3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIkVy
cm9yIGNyZWF0aW5nIGluc3RhbmNlIG9mIGNsYXNzICIgKyBtZXNzYWdlVHlwZSwgZSk7Ci0gICAg
ICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhy
b3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIkVy
cm9yIGNyZWF0aW5nIGluc3RhbmNlIG9mIGNsYXNzICIgKyBtZXNzYWdlVHlwZSwgZSk7Ci0gICAg
ICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxl
Z2FsQXJndW1lbnRFeGNlcHRpb24oIkVycm9yIHJlYWRpbmcgZXh0ZW5zaW9uIGZpZWxkIiwgZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCByZWFkRGF0YUludG8oVW5r
bm93bkZpZWxkRGF0YSBkYXRhLCBMaXN0PE9iamVjdD4gcmVzdWx0TGlzdCkgewotICAgICAgICAv
LyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGZvciBtZXNzYWdlL2dyb3VwIGV4dGVuc2lvbnMuCi0g
ICAgICAgIHJlc3VsdExpc3QuYWRkKHJlYWREYXRhKENvZGVkSW5wdXRCeXRlQnVmZmVyTmFuby5u
ZXdJbnN0YW5jZShkYXRhLmJ5dGVzKSkpOwotICAgIH0KLQotICAgIHZvaWQgd3JpdGVUbyhPYmpl
Y3QgdmFsdWUsIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8gb3V0cHV0KSB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgICAgICBpZiAocmVwZWF0ZWQpIHsKLSAgICAgICAgICAgIHdyaXRlUmVwZWF0
ZWREYXRhKHZhbHVlLCBvdXRwdXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd3Jp
dGVTaW5ndWxhckRhdGEodmFsdWUsIG91dHB1dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBw
cm90ZWN0ZWQgdm9pZCB3cml0ZVNpbmd1bGFyRGF0YShPYmplY3QgdmFsdWUsIENvZGVkT3V0cHV0
Qnl0ZUJ1ZmZlck5hbm8gb3V0KSB7Ci0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMg
Zm9yIG1lc3NhZ2UvZ3JvdXAgZXh0ZW5zaW9ucy4KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IG91dC53cml0ZVJhd1ZhcmludDMyKHRhZyk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICAgICAgICAgICAgICBjYXNlIFRZUEVfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIE1l
c3NhZ2VOYW5vIGdyb3VwVmFsdWUgPSAoTWVzc2FnZU5hbm8pIHZhbHVlOwotICAgICAgICAgICAg
ICAgICAgICBpbnQgZmllbGROdW1iZXIgPSBXaXJlRm9ybWF0TmFuby5nZXRUYWdGaWVsZE51bWJl
cih0YWcpOwotICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVHcm91cE5vVGFnKGdyb3VwVmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZW5kZ3JvdXAgdGFnIG11c3QgYmUgaW5j
bHVkZWQgaW4gdGhlIGRhdGEgcGF5bG9hZC4KLSAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRl
VGFnKGZpZWxkTnVtYmVyLCBXaXJlRm9ybWF0TmFuby5XSVJFVFlQRV9FTkRfR1JPVVApOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFRZUEVfTUVTU0FH
RToKLSAgICAgICAgICAgICAgICAgICAgTWVzc2FnZU5hbm8gbWVzc2FnZVZhbHVlID0gKE1lc3Nh
Z2VOYW5vKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlTWVzc2FnZU5vVGFn
KG1lc3NhZ2VWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24oIlVua25vd24gdHlwZSAiICsgdHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIFNob3VsZCBub3Qg
aGFwcGVuCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVSZXBlYXRlZERhdGEo
T2JqZWN0IGFycmF5LCBDb2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vIG91dHB1dCkgewotICAgICAg
ICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGZvciBub24tcGFja2VkIGV4dGVuc2lvbnMuCi0g
ICAgICAgIGludCBhcnJheUxlbmd0aCA9IEFycmF5LmdldExlbmd0aChhcnJheSk7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlMZW5ndGg7IGkrKykgewotICAgICAgICAgICAgT2Jq
ZWN0IGVsZW1lbnQgPSBBcnJheS5nZXQoYXJyYXksIGkpOwotICAgICAgICAgICAgaWYgKGVsZW1l
bnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHdyaXRlU2luZ3VsYXJEYXRhKGVsZW1lbnQs
IG91dHB1dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgY29t
cHV0ZVNlcmlhbGl6ZWRTaXplKE9iamVjdCB2YWx1ZSkgewotICAgICAgICBpZiAocmVwZWF0ZWQp
IHsKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlUmVwZWF0ZWRTZXJpYWxpemVkU2l6ZSh2YWx1
ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcHV0ZVNpbmd1bGFy
U2VyaWFsaXplZFNpemUodmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVk
IGludCBjb21wdXRlUmVwZWF0ZWRTZXJpYWxpemVkU2l6ZShPYmplY3QgYXJyYXkpIHsKLSAgICAg
ICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBmb3Igbm9uLXBhY2tlZCBleHRlbnNpb25zLgot
ICAgICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICAgIGludCBhcnJheUxlbmd0aCA9IEFycmF5Lmdl
dExlbmd0aChhcnJheSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlMZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgT2JqZWN0IGVsZW1lbnQgPSBBcnJheS5nZXQoYXJyYXksIGkp
OwotICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHNp
emUgKz0gY29tcHV0ZVNpbmd1bGFyU2VyaWFsaXplZFNpemUoQXJyYXkuZ2V0KGFycmF5LCBpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQot
Ci0gICAgcHJvdGVjdGVkIGludCBjb21wdXRlU2luZ3VsYXJTZXJpYWxpemVkU2l6ZShPYmplY3Qg
dmFsdWUpIHsKLSAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgbWVzc2FnZS9n
cm91cCBleHRlbnNpb25zLgotICAgICAgICBpbnQgZmllbGROdW1iZXIgPSBXaXJlRm9ybWF0TmFu
by5nZXRUYWdGaWVsZE51bWJlcih0YWcpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAg
ICAgICAgIGNhc2UgVFlQRV9HUk9VUDoKLSAgICAgICAgICAgICAgICBNZXNzYWdlTmFubyBncm91
cFZhbHVlID0gKE1lc3NhZ2VOYW5vKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29k
ZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRlR3JvdXBTaXplKGZpZWxkTnVtYmVyLCBncm91
cFZhbHVlKTsKLSAgICAgICAgICAgIGNhc2UgVFlQRV9NRVNTQUdFOgotICAgICAgICAgICAgICAg
IE1lc3NhZ2VOYW5vIG1lc3NhZ2VWYWx1ZSA9IChNZXNzYWdlTmFubykgdmFsdWU7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8uY29tcHV0ZU1lc3NhZ2VT
aXplKGZpZWxkTnVtYmVyLCBtZXNzYWdlVmFsdWUpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3du
IHR5cGUgIiArIHR5cGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVw
cmVzZW50cyBhbiBleHRlbnNpb24gb2YgYSBwcmltaXRpdmUgKGluY2x1ZGluZyBlbnVtKSB0eXBl
LiBJZiB0aGVyZSBpcyBubyBwcmltaXRpdmUKLSAgICAgKiBleHRlbnNpb25zLCB0aGlzIHN1YmNs
YXNzIHdpbGwgYmUgcmVtb3ZhYmxlIGJ5IFByb0d1YXJkLgotICAgICAqLwotICAgIHByaXZhdGUg
c3RhdGljIGNsYXNzIFByaW1pdGl2ZUV4dGVuc2lvbjxNIGV4dGVuZHMgRXh0ZW5kYWJsZU1lc3Nh
Z2VOYW5vPE0+LCBUPgotICAgICAgICAgICAgZXh0ZW5kcyBFeHRlbnNpb248TSwgVD4gewotCi0g
ICAgICAgIC8qKgotICAgICAgICAgKiBUYWcgb2YgYSBwaWVjZSBvZiBub24tcGFja2VkIGRhdGEg
ZnJvbSB0aGUgd2lyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBleHRlbnNpb24uCi0gICAgICAgICAq
LwotICAgICAgICBwcml2YXRlIGZpbmFsIGludCBub25QYWNrZWRUYWc7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAqIFRhZyBvZiBhIHBpZWNlIG9mIHBhY2tlZCBkYXRhIGZyb20gdGhlIHdpcmUg
Y29tcGF0aWJsZSB3aXRoIHRoaXMgZXh0ZW5zaW9uLgotICAgICAgICAgKiAwIGlmIHRoZSB0eXBl
IG9mIHRoaXMgZXh0ZW5zaW9uIGlzIG5vdCBwYWNrYWJsZS4KLSAgICAgICAgICovCi0gICAgICAg
IHByaXZhdGUgZmluYWwgaW50IHBhY2tlZFRhZzsKLQotICAgICAgICBwdWJsaWMgUHJpbWl0aXZl
RXh0ZW5zaW9uKGludCB0eXBlLCBDbGFzczxUPiBjbGF6eiwgaW50IHRhZywgYm9vbGVhbiByZXBl
YXRlZCwKLSAgICAgICAgICAgICAgICBpbnQgbm9uUGFja2VkVGFnLCBpbnQgcGFja2VkVGFnKSB7
Ci0gICAgICAgICAgICBzdXBlcih0eXBlLCBjbGF6eiwgdGFnLCByZXBlYXRlZCk7Ci0gICAgICAg
ICAgICB0aGlzLm5vblBhY2tlZFRhZyA9IG5vblBhY2tlZFRhZzsKLSAgICAgICAgICAgIHRoaXMu
cGFja2VkVGFnID0gcGFja2VkVGFnOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0g
ICAgICAgIHByb3RlY3RlZCBPYmplY3QgcmVhZERhdGEoQ29kZWRJbnB1dEJ5dGVCdWZmZXJOYW5v
IGlucHV0KSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICByZXR1cm4gaW5wdXQu
cmVhZFByaW1pdGl2ZUZpZWxkKHR5cGUpOwotICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRp
b24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRp
b24oIkVycm9yIHJlYWRpbmcgZXh0ZW5zaW9uIGZpZWxkIiwgZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcmVh
ZERhdGFJbnRvKFVua25vd25GaWVsZERhdGEgZGF0YSwgTGlzdDxPYmplY3Q+IHJlc3VsdExpc3Qp
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgZm9yIHByaW1pdGl2ZSB0
eXBlZCBleHRlbnNpb25zLAotICAgICAgICAgICAgLy8gd2hpY2ggY2FuIHJlYWQgYm90aCBwYWNr
ZWQgYW5kIG5vbi1wYWNrZWQgZGF0YS4KLSAgICAgICAgICAgIGlmIChkYXRhLnRhZyA9PSBub25Q
YWNrZWRUYWcpIHsKLSAgICAgICAgICAgICAgICByZXN1bHRMaXN0LmFkZChyZWFkRGF0YShDb2Rl
ZElucHV0Qnl0ZUJ1ZmZlck5hbm8ubmV3SW5zdGFuY2UoZGF0YS5ieXRlcykpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29kZWRJbnB1dEJ5dGVCdWZmZXJOYW5vIGJ1
ZmZlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8u
bmV3SW5zdGFuY2UoZGF0YS5ieXRlcyk7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyLnB1c2hMaW1pdChidWZmZXIucmVhZFJhd1ZhcmludDMyKCkpOyAv
LyBsZW5ndGggbGltaXQKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24o
IkVycm9yIHJlYWRpbmcgZXh0ZW5zaW9uIGZpZWxkIiwgZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHdoaWxlICghYnVmZmVyLmlzQXRFbmQoKSkgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHRMaXN0LmFkZChyZWFkRGF0YShidWZmZXIpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAg
ICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgd3JpdGVTaW5ndWxhckRhdGEoT2JqZWN0IHZhbHVlLCBD
b2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vIG91dHB1dCkgewotICAgICAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgICAgICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMih0YWcpOwotICAgICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfRE9VQkxF
OgotICAgICAgICAgICAgICAgICAgICAgICAgRG91YmxlIGRvdWJsZVZhbHVlID0gKERvdWJsZSkg
dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGVEb3VibGVOb1RhZyhk
b3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBUWVBFX0ZMT0FUOgotICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQg
ZmxvYXRWYWx1ZSA9IChGbG9hdCkgdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQud3JpdGVGbG9hdE5vVGFnKGZsb2F0VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9JTlQ2NDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIExvbmcgaW50NjRWYWx1ZSA9IChMb25nKSB2YWx1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dC53cml0ZUludDY0Tm9UYWcoaW50NjRWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1VJ
TlQ2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIExvbmcgdWludDY0VmFsdWUgPSAoTG9uZykg
dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGVVSW50NjROb1RhZyh1
aW50NjRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBUWVBFX0lOVDMyOgotICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdl
ciBpbnQzMlZhbHVlID0gKEludGVnZXIpIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LndyaXRlSW50MzJOb1RhZyhpbnQzMlZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfRklYRUQ2NDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIExvbmcgZml4ZWQ2NFZhbHVlID0gKExvbmcpIHZhbHVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlRml4ZWQ2NE5vVGFnKGZpeGVkNjRWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBUWVBFX0ZJWEVEMzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGZpeGVk
MzJWYWx1ZSA9IChJbnRlZ2VyKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC53cml0ZUZpeGVkMzJOb1RhZyhmaXhlZDMyVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9CT09MOgotICAgICAgICAg
ICAgICAgICAgICAgICAgQm9vbGVhbiBib29sVmFsdWUgPSAoQm9vbGVhbikgdmFsdWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGVCb29sTm9UYWcoYm9vbFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRZ
UEVfU1RSSU5HOgotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0g
KFN0cmluZykgdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGVTdHJp
bmdOb1RhZyhzdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX0JZVEVTOgotICAgICAgICAgICAgICAgICAgICAg
ICAgYnl0ZVtdIGJ5dGVzVmFsdWUgPSAoYnl0ZVtdKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC53cml0ZUJ5dGVzTm9UYWcoYnl0ZXNWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1VJTlQzMjoK
LSAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgdWludDMyVmFsdWUgPSAoSW50ZWdlcikg
dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGVVSW50MzJOb1RhZyh1
aW50MzJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBUWVBFX0VOVU06Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2Vy
IGVudW1WYWx1ZSA9IChJbnRlZ2VyKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dC53cml0ZUVudW1Ob1RhZyhlbnVtVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9TRklYRUQzMjoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEludGVnZXIgc2ZpeGVkMzJWYWx1ZSA9IChJbnRlZ2VyKSB2YWx1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZVNGaXhlZDMyTm9UYWcoc2ZpeGVk
MzJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUWVBFX1NGSVhFRDY0OgotICAgICAgICAgICAgICAgICAgICAgICAgTG9uZyBz
Zml4ZWQ2NFZhbHVlID0gKExvbmcpIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LndyaXRlU0ZpeGVkNjROb1RhZyhzZml4ZWQ2NFZhbHVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfU0lOVDMyOgotICAg
ICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBzaW50MzJWYWx1ZSA9IChJbnRlZ2VyKSB2YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZVNJbnQzMk5vVGFnKHNpbnQz
MlZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIFRZUEVfU0lOVDY0OgotICAgICAgICAgICAgICAgICAgICAgICAgTG9uZyBzaW50
NjRWYWx1ZSA9IChMb25nKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC53
cml0ZVNJbnQ2NE5vVGFnKHNpbnQ2NFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biB0eXBlICIgKyB0
eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlv
biBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBoYXBwZW4KLSAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIHdy
aXRlUmVwZWF0ZWREYXRhKE9iamVjdCBhcnJheSwgQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFubyBv
dXRwdXQpIHsKLSAgICAgICAgICAgIGlmICh0YWcgPT0gbm9uUGFja2VkVGFnKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVXNlIGJhc2UgaW1wbGVtZW50YXRpb24gZm9yIG5vbi1wYWNrZWQgZGF0YQot
ICAgICAgICAgICAgICAgIHN1cGVyLndyaXRlUmVwZWF0ZWREYXRhKGFycmF5LCBvdXRwdXQpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gcGFja2VkVGFnKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gUGFja2VkLiBOb3RlIHRoYXQgdGhlIGFycmF5IGVsZW1lbnQgdHlwZSBpcyBndWFyYW50
ZWVkIHRvIGJlIHByaW1pdGl2ZSwgc28gdGhlcmUKLSAgICAgICAgICAgICAgICAvLyB3b24ndCBi
ZSBhbnkgbnVsbCBlbGVtZW50cywgc28gbm8gbnVsbCBjaGVjayBpbiB0aGlzIGJsb2NrLgotICAg
ICAgICAgICAgICAgIGludCBhcnJheUxlbmd0aCA9IEFycmF5LmdldExlbmd0aChhcnJheSk7Ci0g
ICAgICAgICAgICAgICAgaW50IGRhdGFTaXplID0gY29tcHV0ZVBhY2tlZERhdGFTaXplKGFycmF5
KTsKLQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dC53
cml0ZVJhd1ZhcmludDMyKHRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZVJh
d1ZhcmludDMyKGRhdGFTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfQk9PTDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5TGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlQm9vbE5vVGFnKEFycmF5
LmdldEJvb2xlYW4oYXJyYXksIGkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFRZUEVfRklYRUQzMjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGFycmF5TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0LndyaXRlRml4ZWQzMk5vVGFnKEFycmF5LmdldEludChhcnJheSwgaSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9TRklYRUQzMjoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5TGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRl
U0ZpeGVkMzJOb1RhZyhBcnJheS5nZXRJbnQoYXJyYXksIGkpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZUZsb2F0Tm9UYWcoQXJyYXkuZ2V0Rmxv
YXQoYXJyYXksIGkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZ
UEVfRklYRUQ2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFycmF5TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LndyaXRlRml4ZWQ2NE5vVGFnKEFycmF5LmdldExvbmcoYXJyYXksIGkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfU0ZJWEVENjQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZVNGaXhlZDY0
Tm9UYWcoQXJyYXkuZ2V0TG9uZyhhcnJheSwgaSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgVFlQRV9ET1VCTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZURvdWJsZU5vVGFnKEFycmF5LmdldERvdWJsZShh
cnJheSwgaSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9J
TlQzMjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFy
cmF5TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LndyaXRlSW50MzJOb1RhZyhBcnJheS5nZXRJbnQoYXJyYXksIGkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfU0lOVDMyOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlMZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGVTSW50MzJOb1RhZyhBcnJheS5n
ZXRJbnQoYXJyYXksIGkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFRZUEVfVUlOVDMyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgYXJyYXlMZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQud3JpdGVVSW50MzJOb1RhZyhBcnJheS5nZXRJbnQoYXJyYXksIGkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfSU5UNjQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZUludDY0Tm9UYWco
QXJyYXkuZ2V0TG9uZyhhcnJheSwgaSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgVFlQRV9TSU5UNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC53cml0ZVNJbnQ2NE5vVGFnKEFycmF5LmdldExvbmcoYXJyYXksIGkp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfVUlOVDY0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlMZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGVV
SW50NjROb1RhZyhBcnJheS5nZXRMb25nKGFycmF5LCBpKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBUWVBFX0VOVU06Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZUVudW1Ob1RhZyhBcnJheS5nZXRJbnQoYXJy
YXksIGkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRp
b24oIlVucGFja2FibGUgdHlwZSAiICsgdHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFNob3VsZCBub3QgaGFwcGVuLgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
SWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2Vw
dGlvbigiVW5leHBlY3RlZCByZXBlYXRlZCBleHRlbnNpb24gdGFnICIgKyB0YWcKLSAgICAgICAg
ICAgICAgICAgICAgICAgICsgIiwgdW5lcXVhbCB0byBib3RoIG5vbi1wYWNrZWQgdmFyaWFudCAi
ICsgbm9uUGFja2VkVGFnCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgYW5kIHBhY2tlZCB2
YXJpYW50ICIgKyBwYWNrZWRUYWcpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgcHJpdmF0ZSBpbnQgY29tcHV0ZVBhY2tlZERhdGFTaXplKE9iamVjdCBhcnJheSkgewotICAg
ICAgICAgICAgaW50IGRhdGFTaXplID0gMDsKLSAgICAgICAgICAgIGludCBhcnJheUxlbmd0aCA9
IEFycmF5LmdldExlbmd0aChhcnJheSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIFRZUEVfQk9PTDoKLSAgICAgICAgICAgICAgICAgICAgLy8gQm9v
bHMgYXJlIHN0b3JlZCBhcyBpbnQzMiBidXQganVzdCBhcyAwIG9yIDEsIHNvIDEgYnl0ZSBlYWNo
LgotICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSA9IGFycmF5TGVuZ3RoOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFRZUEVfRklYRUQzMjoKLSAg
ICAgICAgICAgICAgICBjYXNlIFRZUEVfU0ZJWEVEMzI6Ci0gICAgICAgICAgICAgICAgY2FzZSBU
WVBFX0ZMT0FUOgotICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSA9IGFycmF5TGVuZ3RoICog
Q29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5MSVRUTEVfRU5ESUFOXzMyX1NJWkU7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9GSVhFRDY0Ogot
ICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9TRklYRUQ2NDoKLSAgICAgICAgICAgICAgICBjYXNl
IFRZUEVfRE9VQkxFOgotICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSA9IGFycmF5TGVuZ3Ro
ICogQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5MSVRUTEVfRU5ESUFOXzY0X1NJWkU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9JTlQzMjoK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSArPSBDb2RlZE91dHB1dEJ5dGVC
dWZmZXJOYW5vLmNvbXB1dGVJbnQzMlNpemVOb1RhZygKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJyYXkuZ2V0SW50KGFycmF5LCBpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBUWVBFX1NJ
TlQzMjoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSArPSBDb2RlZE91dHB1
dEJ5dGVCdWZmZXJOYW5vLmNvbXB1dGVTSW50MzJTaXplTm9UYWcoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFycmF5LmdldEludChhcnJheSwgaSkpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
VFlQRV9VSU5UMzI6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJy
YXlMZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNpemUgKz0gQ29k
ZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRlVUludDMyU2l6ZU5vVGFnKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5nZXRJbnQoYXJyYXksIGkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIFRZUEVfSU5UNjQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgYXJyYXlMZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNpemUg
Kz0gQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRlSW50NjRTaXplTm9UYWcoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmdldExvbmcoYXJyYXksIGkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIFRZUEVfU0lOVDY0OgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGFycmF5TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFTaXplICs9IENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8uY29tcHV0ZVNJbnQ2NFNpemVOb1Rh
ZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZ2V0TG9uZyhhcnJheSwg
aSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9VSU5UNjQ6Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgYXJyYXlMZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YVNpemUgKz0gQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRlVUludDY0
U2l6ZU5vVGFnKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5nZXRMb25n
KGFycmF5LCBpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBUWVBFX0VOVU06Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlMZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YVNpemUgKz0gQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRl
RW51bVNpemVOb1RhZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZ2V0
SW50KGFycmF5LCBpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5leHBlY3RlZCBub24tcGFja2Fi
bGUgdHlwZSAiICsgdHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZGF0
YVNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVk
IGludCBjb21wdXRlUmVwZWF0ZWRTZXJpYWxpemVkU2l6ZShPYmplY3QgYXJyYXkpIHsKLSAgICAg
ICAgICAgIGlmICh0YWcgPT0gbm9uUGFja2VkVGFnKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXNl
IGJhc2UgaW1wbGVtZW50YXRpb24gZm9yIG5vbi1wYWNrZWQgZGF0YQotICAgICAgICAgICAgICAg
IHJldHVybiBzdXBlci5jb21wdXRlUmVwZWF0ZWRTZXJpYWxpemVkU2l6ZShhcnJheSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSBwYWNrZWRUYWcpIHsKLSAgICAgICAgICAgICAgICAv
LyBQYWNrZWQuCi0gICAgICAgICAgICAgICAgaW50IGRhdGFTaXplID0gY29tcHV0ZVBhY2tlZERh
dGFTaXplKGFycmF5KTsKLSAgICAgICAgICAgICAgICBpbnQgcGF5bG9hZFNpemUgPQotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YVNpemUgKyBDb2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vLmNv
bXB1dGVSYXdWYXJpbnQzMlNpemUoZGF0YVNpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiBw
YXlsb2FkU2l6ZSArIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8uY29tcHV0ZVJhd1ZhcmludDMy
U2l6ZSh0YWcpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJlcGVhdGVkIGV4dGVuc2lv
biB0YWcgIiArIHRhZwotICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB1bmVxdWFsIHRvIGJv
dGggbm9uLXBhY2tlZCB2YXJpYW50ICIgKyBub25QYWNrZWRUYWcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICsgIiBhbmQgcGFja2VkIHZhcmlhbnQgIiArIHBhY2tlZFRhZyk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIGZp
bmFsIGludCBjb21wdXRlU2luZ3VsYXJTZXJpYWxpemVkU2l6ZShPYmplY3QgdmFsdWUpIHsKLSAg
ICAgICAgICAgIGludCBmaWVsZE51bWJlciA9IFdpcmVGb3JtYXROYW5vLmdldFRhZ0ZpZWxkTnVt
YmVyKHRhZyk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIFRZUEVfRE9VQkxFOgotICAgICAgICAgICAgICAgICAgICBEb3VibGUgZG91YmxlVmFsdWUg
PSAoRG91YmxlKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVkT3V0cHV0
Qnl0ZUJ1ZmZlck5hbm8uY29tcHV0ZURvdWJsZVNpemUoZmllbGROdW1iZXIsIGRvdWJsZVZhbHVl
KTsKLSAgICAgICAgICAgICAgICBjYXNlIFRZUEVfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgICAg
IEZsb2F0IGZsb2F0VmFsdWUgPSAoRmxvYXQpIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRlRmxvYXRTaXplKGZpZWxkTnVt
YmVyLCBmbG9hdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBjYXNlIFRZUEVfSU5UNjQ6Ci0gICAg
ICAgICAgICAgICAgICAgIExvbmcgaW50NjRWYWx1ZSA9IChMb25nKSB2YWx1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8uY29tcHV0ZUludDY0
U2l6ZShmaWVsZE51bWJlciwgaW50NjRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgY2FzZSBUWVBF
X1VJTlQ2NDoKLSAgICAgICAgICAgICAgICAgICAgTG9uZyB1aW50NjRWYWx1ZSA9IChMb25nKSB2
YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5h
bm8uY29tcHV0ZVVJbnQ2NFNpemUoZmllbGROdW1iZXIsIHVpbnQ2NFZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBjYXNlIFRZUEVfSU5UMzI6Ci0gICAgICAgICAgICAgICAgICAgIEludGVnZXIgaW50
MzJWYWx1ZSA9IChJbnRlZ2VyKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENv
ZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8uY29tcHV0ZUludDMyU2l6ZShmaWVsZE51bWJlciwgaW50
MzJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgY2FzZSBUWVBFX0ZJWEVENjQ6Ci0gICAgICAgICAg
ICAgICAgICAgIExvbmcgZml4ZWQ2NFZhbHVlID0gKExvbmcpIHZhbHVlOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRlRml4ZWQ2NFNp
emUoZmllbGROdW1iZXIsIGZpeGVkNjRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgY2FzZSBUWVBF
X0ZJWEVEMzI6Ci0gICAgICAgICAgICAgICAgICAgIEludGVnZXIgZml4ZWQzMlZhbHVlID0gKElu
dGVnZXIpIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZWRPdXRwdXRCeXRl
QnVmZmVyTmFuby5jb21wdXRlRml4ZWQzMlNpemUoZmllbGROdW1iZXIsIGZpeGVkMzJWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgY2FzZSBUWVBFX0JPT0w6Ci0gICAgICAgICAgICAgICAgICAgIEJv
b2xlYW4gYm9vbFZhbHVlID0gKEJvb2xlYW4pIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRlQm9vbFNpemUoZmllbGROdW1i
ZXIsIGJvb2xWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgY2FzZSBUWVBFX1NUUklORzoKLSAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gKFN0cmluZykgdmFsdWU7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDb2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vLmNvbXB1dGVT
dHJpbmdTaXplKGZpZWxkTnVtYmVyLCBzdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBUWVBFX0JZVEVTOgotICAgICAgICAgICAgICAgICAgICBieXRlW10gYnl0ZXNWYWx1ZSA9IChi
eXRlW10pIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZWRPdXRwdXRCeXRl
QnVmZmVyTmFuby5jb21wdXRlQnl0ZXNTaXplKGZpZWxkTnVtYmVyLCBieXRlc1ZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBjYXNlIFRZUEVfVUlOVDMyOgotICAgICAgICAgICAgICAgICAgICBJbnRl
Z2VyIHVpbnQzMlZhbHVlID0gKEludGVnZXIpIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRlVUludDMyU2l6ZShmaWVsZE51
bWJlciwgdWludDMyVmFsdWUpOwotICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9FTlVNOgotICAg
ICAgICAgICAgICAgICAgICBJbnRlZ2VyIGVudW1WYWx1ZSA9IChJbnRlZ2VyKSB2YWx1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8uY29tcHV0
ZUVudW1TaXplKGZpZWxkTnVtYmVyLCBlbnVtVmFsdWUpOwotICAgICAgICAgICAgICAgIGNhc2Ug
VFlQRV9TRklYRUQzMjoKLSAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBzZml4ZWQzMlZhbHVl
ID0gKEludGVnZXIpIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZWRPdXRw
dXRCeXRlQnVmZmVyTmFuby5jb21wdXRlU0ZpeGVkMzJTaXplKGZpZWxkTnVtYmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNmaXhlZDMyVmFsdWUpOwotICAgICAgICAgICAgICAgIGNh
c2UgVFlQRV9TRklYRUQ2NDoKLSAgICAgICAgICAgICAgICAgICAgTG9uZyBzZml4ZWQ2NFZhbHVl
ID0gKExvbmcpIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZWRPdXRwdXRC
eXRlQnVmZmVyTmFuby5jb21wdXRlU0ZpeGVkNjRTaXplKGZpZWxkTnVtYmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNmaXhlZDY0VmFsdWUpOwotICAgICAgICAgICAgICAgIGNhc2Ug
VFlQRV9TSU5UMzI6Ci0gICAgICAgICAgICAgICAgICAgIEludGVnZXIgc2ludDMyVmFsdWUgPSAo
SW50ZWdlcikgdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2RlZE91dHB1dEJ5
dGVCdWZmZXJOYW5vLmNvbXB1dGVTSW50MzJTaXplKGZpZWxkTnVtYmVyLCBzaW50MzJWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgY2FzZSBUWVBFX1NJTlQ2NDoKLSAgICAgICAgICAgICAgICAgICAg
TG9uZyBzaW50NjRWYWx1ZSA9IChMb25nKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8uY29tcHV0ZVNJbnQ2NFNpemUoZmllbGROdW1i
ZXIsIHNpbnQ2NFZhbHVlKTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIHR5cGUg
IiArIHR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9qYXZhbmFuby9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby9GaWVsZEFy
cmF5LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5v
L0ZpZWxkQXJyYXkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ5YTk3ZmE1
YWJlOWQ4YjFlZTBkNjE1MGVkMjZmZWRjMzVjODdiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9uYW5vL0ZpZWxkQXJyYXkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29v
Z2xlLnByb3RvYnVmLm5hbm87Ci0KLQotLyoqCi0gKiBBIGN1c3RvbSB2ZXJzaW9uIG9mIHtAY29k
ZSBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXl9IHdpdGggdGhlIG1pbmltYWwgQVBJCi0gKiBmb3Ig
c3RvcmluZyB7QGxpbmsgRmllbGREYXRhfSBvYmplY3RzLgotICoKLSAqIDxwPlRoaXMgY2xhc3Mg
aXMgYW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIG5hbm8gYW5kIHNob3VsZCBu
b3QKLSAqIGJlIGNhbGxlZCBkaXJlY3RseSBieSBjbGllbnRzLgotICoKLSAqIEJhc2VkIG9uIHtA
Y29kZSBhbmRyb2lkLnN1cHBvcnQudjQudXRpbC5TcGFyZUFycmF5Q29tcGF0fS4KLSAqLwotcHVi
bGljIGZpbmFsIGNsYXNzIEZpZWxkQXJyYXkgaW1wbGVtZW50cyBDbG9uZWFibGUgewotICAgIHBy
aXZhdGUgc3RhdGljIGZpbmFsIEZpZWxkRGF0YSBERUxFVEVEID0gbmV3IEZpZWxkRGF0YSgpOwot
ICAgIHByaXZhdGUgYm9vbGVhbiBtR2FyYmFnZSA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBpbnRb
XSBtRmllbGROdW1iZXJzOwotICAgIHByaXZhdGUgRmllbGREYXRhW10gbURhdGE7Ci0gICAgcHJp
dmF0ZSBpbnQgbVNpemU7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IEZpZWxkQXJy
YXkgY29udGFpbmluZyBubyBmaWVsZHMuCi0gICAgICovCi0gICAgRmllbGRBcnJheSgpIHsKLSAg
ICAgICAgdGhpcygxMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBG
aWVsZEFycmF5IGNvbnRhaW5pbmcgbm8gbWFwcGluZ3MgdGhhdCB3aWxsIG5vdAotICAgICAqIHJl
cXVpcmUgYW55IGFkZGl0aW9uYWwgbWVtb3J5IGFsbG9jYXRpb24gdG8gc3RvcmUgdGhlIHNwZWNp
ZmllZAotICAgICAqIG51bWJlciBvZiBtYXBwaW5ncy4KLSAgICAgKi8KLSAgICBGaWVsZEFycmF5
KGludCBpbml0aWFsQ2FwYWNpdHkpIHsKLSAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gaWRlYWxJ
bnRBcnJheVNpemUoaW5pdGlhbENhcGFjaXR5KTsKLSAgICAgICAgbUZpZWxkTnVtYmVycyA9IG5l
dyBpbnRbaW5pdGlhbENhcGFjaXR5XTsKLSAgICAgICAgbURhdGEgPSBuZXcgRmllbGREYXRhW2lu
aXRpYWxDYXBhY2l0eV07Ci0gICAgICAgIG1TaXplID0gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBHZXRzIHRoZSBGaWVsZERhdGEgbWFwcGVkIGZyb20gdGhlIHNwZWNpZmllZCBmaWVsZE51
bWJlciwgb3IgPGNvZGU+bnVsbDwvY29kZT4KLSAgICAgKiBpZiBubyBzdWNoIG1hcHBpbmcgaGFz
IGJlZW4gbWFkZS4KLSAgICAgKi8KLSAgICBGaWVsZERhdGEgZ2V0KGludCBmaWVsZE51bWJlcikg
ewotICAgICAgICBpbnQgaSA9IGJpbmFyeVNlYXJjaChmaWVsZE51bWJlcik7Ci0KLSAgICAgICAg
aWYgKGkgPCAwIHx8IG1EYXRhW2ldID09IERFTEVURUQpIHsKLSAgICAgICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1EYXRhW2ldOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgZGF0YSBmcm9tIHRo
ZSBzcGVjaWZpZWQgZmllbGROdW1iZXIsIGlmIHRoZXJlIHdhcyBhbnkuCi0gICAgICovCi0gICAg
dm9pZCByZW1vdmUoaW50IGZpZWxkTnVtYmVyKSB7Ci0gICAgICAgIGludCBpID0gYmluYXJ5U2Vh
cmNoKGZpZWxkTnVtYmVyKTsKLQotICAgICAgICBpZiAoaSA+PSAwICYmIG1EYXRhW2ldICE9IERF
TEVURUQpIHsKLSAgICAgICAgICAgIG1EYXRhW2ldID0gREVMRVRFRDsKLSAgICAgICAgICAgIG1H
YXJiYWdlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBnYygp
IHsKLSAgICAgICAgaW50IG4gPSBtU2l6ZTsKLSAgICAgICAgaW50IG8gPSAwOwotICAgICAgICBp
bnRbXSBrZXlzID0gbUZpZWxkTnVtYmVyczsKLSAgICAgICAgRmllbGREYXRhW10gdmFsdWVzID0g
bURhdGE7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAg
ICAgIEZpZWxkRGF0YSB2YWwgPSB2YWx1ZXNbaV07Ci0KLSAgICAgICAgICAgIGlmICh2YWwgIT0g
REVMRVRFRCkgewotICAgICAgICAgICAgICAgIGlmIChpICE9IG8pIHsKLSAgICAgICAgICAgICAg
ICAgICAga2V5c1tvXSA9IGtleXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1tvXSA9
IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2ldID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBtR2FyYmFnZSA9IGZhbHNlOwotICAgICAgICBtU2l6ZSA9IG87Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogQWRkcyBhIG1hcHBpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIGZpZWxk
TnVtYmVyIHRvIHRoZSBzcGVjaWZpZWQgZGF0YSwKLSAgICAgKiByZXBsYWNpbmcgdGhlIHByZXZp
b3VzIG1hcHBpbmcgaWYgdGhlcmUgd2FzIG9uZS4KLSAgICAgKi8KLSAgICB2b2lkIHB1dChpbnQg
ZmllbGROdW1iZXIsIEZpZWxkRGF0YSBkYXRhKSB7Ci0gICAgICAgIGludCBpID0gYmluYXJ5U2Vh
cmNoKGZpZWxkTnVtYmVyKTsKLQotICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAgICBt
RGF0YVtpXSA9IGRhdGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpID0gfmk7Ci0K
LSAgICAgICAgICAgIGlmIChpIDwgbVNpemUgJiYgbURhdGFbaV0gPT0gREVMRVRFRCkgewotICAg
ICAgICAgICAgICAgIG1GaWVsZE51bWJlcnNbaV0gPSBmaWVsZE51bWJlcjsKLSAgICAgICAgICAg
ICAgICBtRGF0YVtpXSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobUdhcmJhZ2UgJiYgbVNpemUgPj0gbUZpZWxkTnVtYmVy
cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBnYygpOwotCi0gICAgICAgICAgICAgICAgLy8g
U2VhcmNoIGFnYWluIGJlY2F1c2UgaW5kaWNlcyBtYXkgaGF2ZSBjaGFuZ2VkLgotICAgICAgICAg
ICAgICAgIGkgPSB+IGJpbmFyeVNlYXJjaChmaWVsZE51bWJlcik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChtU2l6ZSA+PSBtRmllbGROdW1iZXJzLmxlbmd0aCkgewotICAgICAg
ICAgICAgICAgIGludCBuID0gaWRlYWxJbnRBcnJheVNpemUobVNpemUgKyAxKTsKLQotICAgICAg
ICAgICAgICAgIGludFtdIG5rZXlzID0gbmV3IGludFtuXTsKLSAgICAgICAgICAgICAgICBGaWVs
ZERhdGFbXSBudmFsdWVzID0gbmV3IEZpZWxkRGF0YVtuXTsKLQotICAgICAgICAgICAgICAgIFN5
c3RlbS5hcnJheWNvcHkobUZpZWxkTnVtYmVycywgMCwgbmtleXMsIDAsIG1GaWVsZE51bWJlcnMu
bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1EYXRhLCAwLCBudmFs
dWVzLCAwLCBtRGF0YS5sZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgbUZpZWxkTnVtYmVycyA9
IG5rZXlzOwotICAgICAgICAgICAgICAgIG1EYXRhID0gbnZhbHVlczsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKG1TaXplIC0gaSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgU3lz
dGVtLmFycmF5Y29weShtRmllbGROdW1iZXJzLCBpLCBtRmllbGROdW1iZXJzLCBpICsgMSwgbVNp
emUgLSBpKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1EYXRhLCBpLCBtRGF0
YSwgaSArIDEsIG1TaXplIC0gaSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1GaWVs
ZE51bWJlcnNbaV0gPSBmaWVsZE51bWJlcjsKLSAgICAgICAgICAgIG1EYXRhW2ldID0gZGF0YTsK
LSAgICAgICAgICAgIG1TaXplKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIG1hcHBpbmdzIHRoYXQgdGhpcyBGaWVs
ZEFycmF5Ci0gICAgICogY3VycmVudGx5IHN0b3Jlcy4KLSAgICAgKi8KLSAgICBpbnQgc2l6ZSgp
IHsKLSAgICAgICAgaWYgKG1HYXJiYWdlKSB7Ci0gICAgICAgICAgICBnYygpOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIG1TaXplOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlz
RW1wdHkoKSB7Ci0gICAgICAgIHJldHVybiBzaXplKCkgPT0gMDsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBHaXZlbiBhbiBpbmRleCBpbiB0aGUgcmFuZ2UgPGNvZGU+MC4uLnNpemUoKS0xPC9j
b2RlPiwgcmV0dXJucwotICAgICAqIHRoZSB2YWx1ZSBmcm9tIHRoZSA8Y29kZT5pbmRleDwvY29k
ZT50aCBrZXktdmFsdWUgbWFwcGluZyB0aGF0IHRoaXMKLSAgICAgKiBGaWVsZEFycmF5IHN0b3Jl
cy4KLSAgICAgKi8KLSAgICBGaWVsZERhdGEgZGF0YUF0KGludCBpbmRleCkgewotICAgICAgICBp
ZiAobUdhcmJhZ2UpIHsKLSAgICAgICAgICAgIGdjKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gbURhdGFbaW5kZXhdOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBi
b29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgICAgICBpZiAobyA9PSB0aGlzKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShvIGluc3RhbmNl
b2YgRmllbGRBcnJheSkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEZpZWxkQXJyYXkgb3RoZXIgPSAoRmllbGRBcnJheSkgbzsKLSAgICAgICAgaWYg
KHNpemUoKSAhPSBvdGhlci5zaXplKCkpIHsgIC8vIHNpemUoKSB3aWxsIGNhbGwgZ2MoKSBpZiBu
ZWNlc3NhcnkuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGFycmF5RXF1YWxzKG1GaWVsZE51bWJlcnMsIG90aGVyLm1GaWVsZE51bWJlcnMsIG1T
aXplKSAmJgotICAgICAgICAgICAgICAgIGFycmF5RXF1YWxzKG1EYXRhLCBvdGhlci5tRGF0YSwg
bVNpemUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgaGFzaENvZGUo
KSB7Ci0gICAgICAgIGlmIChtR2FyYmFnZSkgewotICAgICAgICAgICAgZ2MoKTsKLSAgICAgICAg
fQotICAgICAgICBpbnQgcmVzdWx0ID0gMTc7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bVNpemU7IGkrKykgewotICAgICAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyBtRmllbGRO
dW1iZXJzW2ldOwotICAgICAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyBtRGF0YVtpXS5o
YXNoQ29kZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgcHJpdmF0ZSBpbnQgaWRlYWxJbnRBcnJheVNpemUoaW50IG5lZWQpIHsKLSAgICAgICAgcmV0
dXJuIGlkZWFsQnl0ZUFycmF5U2l6ZShuZWVkICogNCkgLyA0OwotICAgIH0KLQotICAgIHByaXZh
dGUgaW50IGlkZWFsQnl0ZUFycmF5U2l6ZShpbnQgbmVlZCkgewotICAgICAgICBmb3IgKGludCBp
ID0gNDsgaSA8IDMyOyBpKyspCi0gICAgICAgICAgICBpZiAobmVlZCA8PSAoMSA8PCBpKSAtIDEy
KQotICAgICAgICAgICAgICAgIHJldHVybiAoMSA8PCBpKSAtIDEyOwotCi0gICAgICAgIHJldHVy
biBuZWVkOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGJpbmFyeVNlYXJjaChpbnQgdmFsdWUp
IHsKLSAgICAgICAgaW50IGxvID0gMDsKLSAgICAgICAgaW50IGhpID0gbVNpemUgLSAxOwotCi0g
ICAgICAgIHdoaWxlIChsbyA8PSBoaSkgewotICAgICAgICAgICAgaW50IG1pZCA9IChsbyArIGhp
KSA+Pj4gMTsKLSAgICAgICAgICAgIGludCBtaWRWYWwgPSBtRmllbGROdW1iZXJzW21pZF07Ci0K
LSAgICAgICAgICAgIGlmIChtaWRWYWwgPCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIGxvID0g
bWlkICsgMTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobWlkVmFsID4gdmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICBoaSA9IG1pZCAtIDE7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHJldHVybiBtaWQ7IC8vIHZhbHVlIGZvdW5kCi0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIH5sbzsgLy8gdmFsdWUgbm90IHByZXNlbnQKLSAgICB9Ci0KLSAg
ICBwcml2YXRlIGJvb2xlYW4gYXJyYXlFcXVhbHMoaW50W10gYSwgaW50W10gYiwgaW50IHNpemUp
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAg
IGlmIChhW2ldICE9IGJbaV0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
cHJpdmF0ZSBib29sZWFuIGFycmF5RXF1YWxzKEZpZWxkRGF0YVtdIGEsIEZpZWxkRGF0YVtdIGIs
IGludCBzaXplKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0g
ICAgICAgICAgICBpZiAoIWFbaV0uZXF1YWxzKGJbaV0pKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCBGaWVsZEFycmF5IGNs
b25lKCkgewotICAgICAgICAvLyBUcmlnZ2VyIEdDIHNvIHdlIGNvbXBhY3QgYW5kIGRvbid0IGNv
cHkgREVMRVRFRCBlbGVtZW50cy4KLSAgICAgICAgaW50IHNpemUgPSBzaXplKCk7Ci0gICAgICAg
IEZpZWxkQXJyYXkgY2xvbmUgPSBuZXcgRmllbGRBcnJheShzaXplKTsKLSAgICAgICAgU3lzdGVt
LmFycmF5Y29weShtRmllbGROdW1iZXJzLCAwLCBjbG9uZS5tRmllbGROdW1iZXJzLCAwLCBzaXpl
KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAg
IGlmIChtRGF0YVtpXSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY2xvbmUubURhdGFbaV0g
PSBtRGF0YVtpXS5jbG9uZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNs
b25lLm1TaXplID0gc2l6ZTsKLSAgICAgICAgcmV0dXJuIGNsb25lOwotICAgIH0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vRmll
bGREYXRhLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9u
YW5vL0ZpZWxkRGF0YS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmViYWJj
OGU1YzE5MDJlZjdkYTIwMmY3MTgyZWZjZDMzOWFiN2NiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL25hbm8vRmllbGREYXRhLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdv
b2dsZS5wcm90b2J1Zi5uYW5vOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9y
dCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQg
amF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogU3RvcmVzIHVua25vd24gZmllbGRzLiBUaGVzZSBt
aWdodCBiZSBleHRlbnNpb25zIG9yIGZpZWxkcyB0aGF0IHRoZSBnZW5lcmF0ZWQgQVBJIGRvZXNu
J3QKLSAqIGtub3cgYWJvdXQgeWV0LgotICovCi1jbGFzcyBGaWVsZERhdGEgaW1wbGVtZW50cyBD
bG9uZWFibGUgewotICAgIHByaXZhdGUgRXh0ZW5zaW9uPD8sID8+IGNhY2hlZEV4dGVuc2lvbjsK
LSAgICBwcml2YXRlIE9iamVjdCB2YWx1ZTsKLSAgICAvKiogVGhlIHNlcmlhbGlzZWQgdmFsdWVz
IGZvciB0aGlzIG9iamVjdC4gV2lsbCBiZSBjbGVhcmVkIGlmIGdldFZhbHVlIGlzIGNhbGxlZCAq
LwotICAgIHByaXZhdGUgTGlzdDxVbmtub3duRmllbGREYXRhPiB1bmtub3duRmllbGREYXRhOwot
Ci0gICAgPFQ+IEZpZWxkRGF0YShFeHRlbnNpb248PywgVD4gZXh0ZW5zaW9uLCBUIG5ld1ZhbHVl
KSB7Ci0gICAgICAgIGNhY2hlZEV4dGVuc2lvbiA9IGV4dGVuc2lvbjsKLSAgICAgICAgdmFsdWUg
PSBuZXdWYWx1ZTsKLSAgICB9Ci0KLSAgICBGaWVsZERhdGEoKSB7Ci0gICAgICAgIHVua25vd25G
aWVsZERhdGEgPSBuZXcgQXJyYXlMaXN0PFVua25vd25GaWVsZERhdGE+KCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBhZGRVbmtub3duRmllbGQoVW5rbm93bkZpZWxkRGF0YSB1bmtub3duRmllbGQpIHsK
LSAgICAgICAgdW5rbm93bkZpZWxkRGF0YS5hZGQodW5rbm93bkZpZWxkKTsKLSAgICB9Ci0KLSAg
ICBVbmtub3duRmllbGREYXRhIGdldFVua25vd25GaWVsZChpbnQgaW5kZXgpIHsKLSAgICAgICAg
aWYgKHVua25vd25GaWVsZERhdGEgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4IDwgdW5rbm93bkZpZWxkRGF0YS5zaXplKCkp
IHsKLSAgICAgICAgICAgIHJldHVybiB1bmtub3duRmllbGREYXRhLmdldChpbmRleCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgaW50IGdldFVua25vd25G
aWVsZFNpemUoKSB7Ci0gICAgICAgIGlmICh1bmtub3duRmllbGREYXRhID09IG51bGwpIHsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB1bmtub3duRmll
bGREYXRhLnNpemUoKTsKLSAgICB9Ci0KLSAgICA8VD4gVCBnZXRWYWx1ZShFeHRlbnNpb248Pywg
VD4gZXh0ZW5zaW9uKSB7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKXsKLSAgICAgICAgICAg
IGlmIChjYWNoZWRFeHRlbnNpb24gIT0gZXh0ZW5zaW9uKSB7ICAvLyBFeHRlbnNpb24gb2JqZWN0
cyBhcmUgc2luZ2xldG9ucy4KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIlRyaWVkIHRvIGdldEV4dGVuc2lv
biB3aXRoIGEgZGlmZmVyZXJudCBFeHRlbnNpb24uIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBjYWNoZWRFeHRlbnNpb24gPSBleHRlbnNpb247Ci0gICAg
ICAgICAgICB2YWx1ZSA9IGV4dGVuc2lvbi5nZXRWYWx1ZUZyb20odW5rbm93bkZpZWxkRGF0YSk7
Ci0gICAgICAgICAgICB1bmtub3duRmllbGREYXRhID0gbnVsbDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gKFQpIHZhbHVlOwotICAgIH0KLQotICAgIDxUPiB2b2lkIHNldFZhbHVlKEV4dGVu
c2lvbjw/LCBUPiBleHRlbnNpb24sIFQgbmV3VmFsdWUpIHsKLSAgICAgICAgY2FjaGVkRXh0ZW5z
aW9uID0gZXh0ZW5zaW9uOwotICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOwotICAgICAgICB1bmtu
b3duRmllbGREYXRhID0gbnVsbDsKLSAgICB9Ci0KLSAgICBpbnQgY29tcHV0ZVNlcmlhbGl6ZWRT
aXplKCkgewotICAgICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxs
KSB7Ci0gICAgICAgICAgICBzaXplID0gY2FjaGVkRXh0ZW5zaW9uLmNvbXB1dGVTZXJpYWxpemVk
U2l6ZSh2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKFVua25vd25G
aWVsZERhdGEgdW5rbm93bkZpZWxkIDogdW5rbm93bkZpZWxkRGF0YSkgewotICAgICAgICAgICAg
ICAgIHNpemUgKz0gdW5rbm93bkZpZWxkLmNvbXB1dGVTZXJpYWxpemVkU2l6ZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIHZv
aWQgd3JpdGVUbyhDb2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vIG91dHB1dCkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGNhY2hl
ZEV4dGVuc2lvbi53cml0ZVRvKHZhbHVlLCBvdXRwdXQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZm9yIChVbmtub3duRmllbGREYXRhIHVua25vd25GaWVsZCA6IHVua25vd25GaWVs
ZERhdGEpIHsKLSAgICAgICAgICAgICAgICB1bmtub3duRmllbGQud3JpdGVUbyhvdXRwdXQpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7Ci0gICAgICAgIGlmIChvID09IHRoaXMpIHsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghKG8gaW5z
dGFuY2VvZiBGaWVsZERhdGEpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLQotICAgICAgICBGaWVsZERhdGEgb3RoZXIgPSAoRmllbGREYXRhKSBvOwotICAgICAgICBp
ZiAodmFsdWUgIT0gbnVsbCAmJiBvdGhlci52YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAv
LyBJZiBib3RoIG9iamVjdHMgaGF2ZSBkZXNlcmlhbGl6ZWQgdmFsdWVzLCBjb21wYXJlIHRob3Nl
LgotICAgICAgICAgICAgLy8gU2luY2UgdW5rbm93biBmaWVsZHMgYXJlIG9ubHkgY29tcGFyZWQg
aWYgbWVzc2FnZXMgaGF2ZSBnZW5lcmF0ZWQgZXF1YWxzIG1ldGhvZHMKLSAgICAgICAgICAgIC8v
IHdlIGtub3cgdGhpcyB3aWxsIGJlIGEgbWVhbmluZ2Z1bCBjb21wYXJpc29uIChub3QgaWRlbnRp
dHkpIGZvciBhbGwgdmFsdWVzLgotICAgICAgICAgICAgaWYgKGNhY2hlZEV4dGVuc2lvbiAhPSBv
dGhlci5jYWNoZWRFeHRlbnNpb24pIHsgIC8vIEV4dGVuc2lvbiBvYmplY3RzIGFyZSBzaW5nbGV0
b25zLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICghY2FjaGVkRXh0ZW5zaW9uLmNsYXp6LmlzQXJyYXkoKSkgewotICAgICAgICAg
ICAgICAgIC8vIENhbid0IHRlc3QgKCFjYWNoZWRFeHRlbnNpb24ucmVwZWF0ZWQpIGR1ZSB0byAn
Ynl0ZXMnIC0+ICdieXRlW10nCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmVxdWFscyhv
dGhlci52YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFu
Y2VvZiBieXRlW10pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXlzLmVxdWFscygoYnl0
ZVtdKSB2YWx1ZSwgKGJ5dGVbXSkgb3RoZXIudmFsdWUpOwotICAgICAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZSBpbnN0YW5jZW9mIGludFtdKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5
cy5lcXVhbHMoKGludFtdKSB2YWx1ZSwgKGludFtdKSBvdGhlci52YWx1ZSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgbG9uZ1tdKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEFycmF5cy5lcXVhbHMoKGxvbmdbXSkgdmFsdWUsIChsb25nW10pIG90aGVyLnZhbHVl
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBmbG9hdFtdKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKGZsb2F0W10pIHZhbHVlLCAoZmxv
YXRbXSkgb3RoZXIudmFsdWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5j
ZW9mIGRvdWJsZVtdKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKGRv
dWJsZVtdKSB2YWx1ZSwgKGRvdWJsZVtdKSBvdGhlci52YWx1ZSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgYm9vbGVhbltdKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEFycmF5cy5lcXVhbHMoKGJvb2xlYW5bXSkgdmFsdWUsIChib29sZWFuW10pIG90aGVyLnZh
bHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5
cy5kZWVwRXF1YWxzKChPYmplY3RbXSkgdmFsdWUsIChPYmplY3RbXSkgb3RoZXIudmFsdWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh1bmtub3duRmllbGREYXRhICE9
IG51bGwgJiYgb3RoZXIudW5rbm93bkZpZWxkRGF0YSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAv
LyBJZiBib3RoIG9iamVjdHMgaGF2ZSBieXRlIGFycmF5cyBjb21wYXJlIHRob3NlIGRpcmVjdGx5
LgotICAgICAgICAgICAgcmV0dXJuIHVua25vd25GaWVsZERhdGEuZXF1YWxzKG90aGVyLnVua25v
d25GaWVsZERhdGEpOwotICAgICAgICB9Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBB
cyBhIGxhc3QgcmVzb3J0LCBzZXJpYWxpemUgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdGluZyBieXRl
IGFycmF5cy4KLSAgICAgICAgICAgIHJldHVybiBBcnJheXMuZXF1YWxzKHRvQnl0ZUFycmF5KCks
IG90aGVyLnRvQnl0ZUFycmF5KCkpOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7
Ci0gICAgICAgICAgICAvLyBTaG91bGQgbm90IGhhcHBlbi4KLSAgICAgICAgICAgIHRocm93IG5l
dyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICBpbnQgcmVzdWx0ID0g
MTc7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBUaGUgb25seSB3YXkgdG8gZ2VuZXJh
dGUgYSBjb25zaXN0ZW50IGhhc2ggaXMgdG8gdXNlIHRoZSBzZXJpYWxpemVkIGZvcm0uCi0gICAg
ICAgICAgICByZXN1bHQgPSAzMSAqIHJlc3VsdCArIEFycmF5cy5oYXNoQ29kZSh0b0J5dGVBcnJh
eSgpKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8g
U2hvdWxkIG5vdCBoYXBwZW4uCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhj
ZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgcHJpdmF0ZSBieXRlW10gdG9CeXRlQXJyYXkoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAg
ICAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbY29tcHV0ZVNlcmlhbGl6ZWRTaXplKCldOwot
ICAgICAgICBDb2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vIG91dHB1dCA9IENvZGVkT3V0cHV0Qnl0
ZUJ1ZmZlck5hbm8ubmV3SW5zdGFuY2UocmVzdWx0KTsKLSAgICAgICAgd3JpdGVUbyhvdXRwdXQp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBmaW5hbCBGaWVsZERhdGEgY2xvbmUoKSB7Ci0gICAgICAgIEZpZWxkRGF0YSBjbG9uZSA9
IG5ldyBGaWVsZERhdGEoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsb25lLmNhY2hl
ZEV4dGVuc2lvbiA9IGNhY2hlZEV4dGVuc2lvbjsKLSAgICAgICAgICAgIGlmICh1bmtub3duRmll
bGREYXRhID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjbG9uZS51bmtub3duRmllbGREYXRh
ID0gbnVsbDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2xvbmUudW5r
bm93bkZpZWxkRGF0YS5hZGRBbGwodW5rbm93bkZpZWxkRGF0YSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFdoZXRoZXIgd2UgbmVlZCB0byBkZWVwIGNsb25lIHZhbHVlIGRlcGVu
ZHMgb24gaXRzIHR5cGUuIFByaW1pdGl2ZSByZWZlcmVuY2UgdHlwZXMKLSAgICAgICAgICAgIC8v
IChlLmcuIEludGVnZXIsIExvbmcgZXRjLikgYXJlIG9rLCBzaW5jZSB0aGV5J3JlIGltbXV0YWJs
ZS4gV2UgbmVlZCB0byBjbG9uZSBhcnJheXMKLSAgICAgICAgICAgIC8vIGFuZCBtZXNzYWdlcy4K
LSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm8g
Y2xvbmluZyByZXF1aXJlZC4KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2Vv
ZiBNZXNzYWdlTmFubykgewotICAgICAgICAgICAgICAgIGNsb25lLnZhbHVlID0gKChNZXNzYWdl
TmFubykgdmFsdWUpLmNsb25lKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3Rh
bmNlb2YgYnl0ZVtdKSB7Ci0gICAgICAgICAgICAgICAgY2xvbmUudmFsdWUgPSAoKGJ5dGVbXSkg
dmFsdWUpLmNsb25lKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2Yg
Ynl0ZVtdW10pIHsKLSAgICAgICAgICAgICAgICBieXRlW11bXSB2YWx1ZUFycmF5ID0gKGJ5dGVb
XVtdKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICBieXRlW11bXSBjbG9uZUFycmF5ID0gbmV3IGJ5
dGVbdmFsdWVBcnJheS5sZW5ndGhdW107Ci0gICAgICAgICAgICAgICAgY2xvbmUudmFsdWUgPSBj
bG9uZUFycmF5OwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVBcnJh
eS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBjbG9uZUFycmF5W2ldID0gdmFs
dWVBcnJheVtpXS5jbG9uZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBib29sZWFuW10pIHsKLSAgICAgICAgICAgICAgICBjbG9u
ZS52YWx1ZSA9ICgoYm9vbGVhbltdKSB2YWx1ZSkuY2xvbmUoKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBpbnRbXSkgewotICAgICAgICAgICAgICAgIGNsb25lLnZh
bHVlID0gKChpbnRbXSkgdmFsdWUpLmNsb25lKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZh
bHVlIGluc3RhbmNlb2YgbG9uZ1tdKSB7Ci0gICAgICAgICAgICAgICAgY2xvbmUudmFsdWUgPSAo
KGxvbmdbXSkgdmFsdWUpLmNsb25lKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGlu
c3RhbmNlb2YgZmxvYXRbXSkgewotICAgICAgICAgICAgICAgIGNsb25lLnZhbHVlID0gKChmbG9h
dFtdKSB2YWx1ZSkuY2xvbmUoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFu
Y2VvZiBkb3VibGVbXSkgewotICAgICAgICAgICAgICAgIGNsb25lLnZhbHVlID0gKChkb3VibGVb
XSkgdmFsdWUpLmNsb25lKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNl
b2YgTWVzc2FnZU5hbm9bXSkgewotICAgICAgICAgICAgICAgIE1lc3NhZ2VOYW5vW10gdmFsdWVB
cnJheSA9IChNZXNzYWdlTmFub1tdKSB2YWx1ZTsKLSAgICAgICAgICAgICAgICBNZXNzYWdlTmFu
b1tdIGNsb25lQXJyYXkgPSBuZXcgTWVzc2FnZU5hbm9bdmFsdWVBcnJheS5sZW5ndGhdOwotICAg
ICAgICAgICAgICAgIGNsb25lLnZhbHVlID0gY2xvbmVBcnJheTsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHZhbHVlQXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2xvbmVBcnJheVtpXSA9IHZhbHVlQXJyYXlbaV0uY2xvbmUoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY2xvbmU7Ci0gICAg
ICAgIH0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAg
IHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vSW50
ZXJuYWxOYW5vLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9uYW5vL0ludGVybmFsTmFuby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
MTI2M2RmNTgwN2M5ZjJiOTVlYmVhYjc5MjFiOWRjZTY1MDAxZTA4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL25hbm8vSW50ZXJuYWxOYW5vLmphdmEKKysrIC9kZXYvbnVsbApAQCAt
MSw1NDcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2th
Z2UgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1
Zi5uYW5vLk1hcEZhY3Rvcmllcy5NYXBGYWN0b3J5OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2Vw
dGlvbjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGls
LkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50
cnk7Ci0KLS8qKgotICogVGhlIGNsYXNzZXMgY29udGFpbmVkIHdpdGhpbiBhcmUgdXNlZCBpbnRl
cm5hbGx5IGJ5IHRoZSBQcm90b2NvbCBCdWZmZXIKLSAqIGxpYnJhcnkgYW5kIGdlbmVyYXRlZCBt
ZXNzYWdlIGltcGxlbWVudGF0aW9ucy4gVGhleSBhcmUgcHVibGljIG9ubHkgYmVjYXVzZQotICog
dGhvc2UgZ2VuZXJhdGVkIG1lc3NhZ2VzIGRvIG5vdCByZXNpZGUgaW4gdGhlIHtAY29kZSBwcm90
b2J1Zn0gcGFja2FnZS4KLSAqIE90aGVycyBzaG91bGQgbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVj
dGx5LgotICoKLSAqIEBhdXRob3Iga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLSAq
LwotcHVibGljIGZpbmFsIGNsYXNzIEludGVybmFsTmFubyB7Ci0KLSAgcHVibGljIHN0YXRpYyBm
aW5hbCBpbnQgVFlQRV9ET1VCTEUgICA9IDE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZ
UEVfRkxPQVQgICAgPSAyOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX0lOVDY0ICAg
ID0gMzsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9VSU5UNjQgICA9IDQ7Ci0gIHB1
YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfSU5UMzIgICAgPSA1OwotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIGludCBUWVBFX0ZJWEVENjQgID0gNjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQg
VFlQRV9GSVhFRDMyICA9IDc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfQk9PTCAg
ICAgPSA4OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1NUUklORyAgID0gOTsKLSAg
cHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9HUk9VUCAgICA9IDEwOwotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIGludCBUWVBFX01FU1NBR0UgID0gMTE7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwg
aW50IFRZUEVfQllURVMgICAgPSAxMjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9V
SU5UMzIgICA9IDEzOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX0VOVU0gICAgID0g
MTQ7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfU0ZJWEVEMzIgPSAxNTsKLSAgcHVi
bGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9TRklYRUQ2NCA9IDE2OwotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIGludCBUWVBFX1NJTlQzMiAgID0gMTc7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50
IFRZUEVfU0lOVDY0ICAgPSAxODsKLQotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIENoYXJzZXQg
VVRGXzggPSBDaGFyc2V0LmZvck5hbWUoIlVURi04Iik7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmlu
YWwgQ2hhcnNldCBJU09fODg1OV8xID0gQ2hhcnNldC5mb3JOYW1lKCJJU08tODg1OS0xIik7Ci0K
LSAgcHJpdmF0ZSBJbnRlcm5hbE5hbm8oKSB7fQotCi0gIC8qKgotICAgKiBBbiBvYmplY3QgdG8g
cHJvdmlkZSBzeW5jaHJvbml6YXRpb24gd2hlbiBsYXppbHkgaW5pdGlhbGl6aW5nIHN0YXRpYyBm
aWVsZHMKLSAgICogb2Yge0BsaW5rIE1lc3NhZ2VOYW5vfSBzdWJjbGFzc2VzLgotICAgKiA8cD4K
LSAgICogVG8gZW5hYmxlIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHJvR3VhcmQgdG8gaW5saW5lIHNo
b3J0IG1ldGhvZHMgZnJvbSBhCi0gICAqIGdlbmVyYXRlZCBNZXNzYWdlTmFubyBzdWJjbGFzcyB0
byB0aGUgY2FsbCBzaXRlcywgdGhhdCBjbGFzcyBtdXN0IG5vdCBoYXZlCi0gICAqIGEgY2xhc3Mg
aW5pdGlhbGl6ZXIsIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiB0aGVyZSBpcyBhbnkgc3RhdGlj
IHZhcmlhYmxlCi0gICAqIGluaXRpYWxpemVycy4gVG8gbGF6aWx5IGluaXRpYWxpemUgdGhlIHN0
YXRpYyB2YXJpYWJsZXMgaW4gYSB0aHJlYWQtc2FmZQotICAgKiBtYW5uZXIsIHRoZSBpbml0aWFs
aXphdGlvbiBjb2RlIHdpbGwgc3luY2hyb25pemUgb24gdGhpcyBvYmplY3QuCi0gICAqLwotICBw
dWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBMQVpZX0lOSVRfTE9DSyA9IG5ldyBPYmplY3QoKTsK
LQotICAvKioKLSAgICogSGVscGVyIGNhbGxlZCBieSBnZW5lcmF0ZWQgY29kZSB0byBjb25zdHJ1
Y3QgZGVmYXVsdCB2YWx1ZXMgZm9yIHN0cmluZwotICAgKiBmaWVsZHMuCi0gICAqIDxwPgotICAg
KiBUaGUgcHJvdG9jb2wgY29tcGlsZXIgZG9lcyBub3QgYWN0dWFsbHkgY29udGFpbiBhIFVURi04
IGRlY29kZXIgLS0gaXQKLSAgICoganVzdCBwdXNoZXMgVVRGLTgtZW5jb2RlZCB0ZXh0IGFyb3Vu
ZCB3aXRob3V0IHRvdWNoaW5nIGl0LiAgVGhlIG9uZSBwbGFjZQotICAgKiB3aGVyZSB0aGlzIHBy
ZXNlbnRzIGEgcHJvYmxlbSBpcyB3aGVuIGdlbmVyYXRpbmcgSmF2YSBzdHJpbmcgbGl0ZXJhbHMu
Ci0gICAqIFVuaWNvZGUgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGxpdGVyYWwgd291bGQgbm9y
bWFsbHkgbmVlZCB0byBiZSBlbmNvZGVkCi0gICAqIHVzaW5nIGEgVW5pY29kZSBlc2NhcGUgc2Vx
dWVuY2UsIHdoaWNoIHdvdWxkIHJlcXVpcmUgZGVjb2RpbmcgdGhlbS4KLSAgICogVG8gZ2V0IGFy
b3VuZCB0aGlzLCBwcm90b2MgaW5zdGVhZCBlbWJlZHMgdGhlIFVURi04IGJ5dGVzIGludG8gdGhl
Ci0gICAqIGdlbmVyYXRlZCBjb2RlIGFuZCBsZWF2ZXMgaXQgdG8gdGhlIHJ1bnRpbWUgbGlicmFy
eSB0byBkZWNvZGUgdGhlbS4KLSAgICogPHA+Ci0gICAqIEl0IGdldHMgd29yc2UsIHRob3VnaC4g
IElmIHByb3RvYyBqdXN0IGdlbmVyYXRlZCBhIGJ5dGUgYXJyYXksIGxpa2U6Ci0gICAqICAgbmV3
IGJ5dGVbXSB7MHgxMiwgMHgzNCwgMHg1NiwgMHg3OH0KLSAgICogSmF2YSBhY3R1YWxseSBnZW5l
cmF0ZXMgKmNvZGUqIHdoaWNoIGFsbG9jYXRlcyBhbiBhcnJheSBhbmQgdGhlbiBmaWxscwotICAg
KiBpbiBlYWNoIHZhbHVlLiAgVGhpcyBpcyBtdWNoIGxlc3MgZWZmaWNpZW50IHRoYW4ganVzdCBl
bWJlZGRpbmcgdGhlIGJ5dGVzCi0gICAqIGRpcmVjdGx5IGludG8gdGhlIGJ5dGVjb2RlLiAgVG8g
Z2V0IGFyb3VuZCB0aGlzLCB3ZSBuZWVkIGFub3RoZXIKLSAgICogd29yay1hcm91bmQuICBTdHJp
bmcgbGl0ZXJhbHMgYXJlIGVtYmVkZGVkIGRpcmVjdGx5LCBzbyBwcm90b2MgYWN0dWFsbHkKLSAg
ICogZ2VuZXJhdGVzIGEgc3RyaW5nIGxpdGVyYWwgY29ycmVzcG9uZGluZyB0byB0aGUgYnl0ZXMu
ICBUaGUgZWFzaWVzdCB3YXkKLSAgICogdG8gZG8gdGhpcyBpcyB0byB1c2UgdGhlIElTTy04ODU5
LTEgY2hhcmFjdGVyIHNldCwgd2hpY2ggY29ycmVzcG9uZHMgdG8KLSAgICogdGhlIGZpcnN0IDI1
NiBjaGFyYWN0ZXJzIG9mIHRoZSBVbmljb2RlIHJhbmdlLiAgUHJvdG9jIGNhbiB0aGVuIHVzZQot
ICAgKiBnb29kIG9sZCBDRXNjYXBlIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmcuCi0gICAqIDxwPgot
ICAgKiBTbyB3ZSBoYXZlIGEgc3RyaW5nIGxpdGVyYWwgd2hpY2ggcmVwcmVzZW50cyBhIHNldCBv
ZiBieXRlcyB3aGljaAotICAgKiByZXByZXNlbnRzIGFub3RoZXIgc3RyaW5nLiAgVGhpcyBmdW5j
dGlvbiAtLSBzdHJpbmdEZWZhdWx0VmFsdWUgLS0KLSAgICogY29udmVydHMgZnJvbSB0aGUgZ2Vu
ZXJhdGVkIHN0cmluZyB0byB0aGUgc3RyaW5nIHdlIGFjdHVhbGx5IHdhbnQuICBUaGUKLSAgICog
Z2VuZXJhdGVkIGNvZGUgY2FsbHMgdGhpcyBhdXRvbWF0aWNhbGx5LgotICAgKi8KLSAgcHVibGlj
IHN0YXRpYyBTdHJpbmcgc3RyaW5nRGVmYXVsdFZhbHVlKFN0cmluZyBieXRlcykgewotICAgIHJl
dHVybiBuZXcgU3RyaW5nKGJ5dGVzLmdldEJ5dGVzKElTT184ODU5XzEpLCBJbnRlcm5hbE5hbm8u
VVRGXzgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBjYWxsZWQgYnkgZ2VuZXJhdGVkIGNv
ZGUgdG8gY29uc3RydWN0IGRlZmF1bHQgdmFsdWVzIGZvciBieXRlcwotICAgKiBmaWVsZHMuCi0g
ICAqIDxwPgotICAgKiBUaGlzIGlzIGEgbG90IGxpa2Uge0BsaW5rICNzdHJpbmdEZWZhdWx0VmFs
dWV9LCBidXQgZm9yIGJ5dGVzIGZpZWxkcy4KLSAgICogSW4gdGhpcyBjYXNlIHdlIG9ubHkgbmVl
ZCB0aGUgc2Vjb25kIG9mIHRoZSB0d28gaGFja3MgLS0gYWxsb3dpbmcgdXMgdG8KLSAgICogZW1i
ZWQgcmF3IGJ5dGVzIGFzIGEgc3RyaW5nIGxpdGVyYWwgd2l0aCBJU08tODg1OS0xIGVuY29kaW5n
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBieXRlW10gYnl0ZXNEZWZhdWx0VmFsdWUoU3RyaW5n
IGJ5dGVzKSB7Ci0gICAgcmV0dXJuIGJ5dGVzLmdldEJ5dGVzKElTT184ODU5XzEpOwotICB9Ci0K
LSAgLyoqCi0gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgc3RyaW5nIGludG8gVVRG
LTggd2hpbGUgdHVybmluZyB0aGUKLSAgICogVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB0
byBhIFJ1bnRpbWVFeGNlcHRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJ5dGVbXSBjb3B5
RnJvbVV0ZjgoZmluYWwgU3RyaW5nIHRleHQpIHsKLSAgICByZXR1cm4gdGV4dC5nZXRCeXRlcyhJ
bnRlcm5hbE5hbm8uVVRGXzgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyByZXBlYXRlZCBp
bnQgZmllbGQgZXF1YWxpdHk7IG51bGwtdmFsdWUgYW5kIDAtbGVuZ3RoIGZpZWxkcyBhcmUKLSAg
ICogY29uc2lkZXJlZCBlcXVhbC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlcXVh
bHMoaW50W10gZmllbGQxLCBpbnRbXSBmaWVsZDIpIHsKLSAgICBpZiAoZmllbGQxID09IG51bGwg
fHwgZmllbGQxLmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmllbGQyID09IG51bGwgfHwg
ZmllbGQyLmxlbmd0aCA9PSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gQXJyYXlzLmVx
dWFscyhmaWVsZDEsIGZpZWxkMik7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBy
ZXBlYXRlZCBsb25nIGZpZWxkIGVxdWFsaXR5OyBudWxsLXZhbHVlIGFuZCAwLWxlbmd0aCBmaWVs
ZHMgYXJlCi0gICAqIGNvbnNpZGVyZWQgZXF1YWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJv
b2xlYW4gZXF1YWxzKGxvbmdbXSBmaWVsZDEsIGxvbmdbXSBmaWVsZDIpIHsKLSAgICBpZiAoZmll
bGQxID09IG51bGwgfHwgZmllbGQxLmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmllbGQy
ID09IG51bGwgfHwgZmllbGQyLmxlbmd0aCA9PSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1
cm4gQXJyYXlzLmVxdWFscyhmaWVsZDEsIGZpZWxkMik7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIENoZWNrcyByZXBlYXRlZCBmbG9hdCBmaWVsZCBlcXVhbGl0eTsgbnVsbC12YWx1ZSBhbmQg
MC1sZW5ndGggZmllbGRzIGFyZQotICAgKiBjb25zaWRlcmVkIGVxdWFsLgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyBib29sZWFuIGVxdWFscyhmbG9hdFtdIGZpZWxkMSwgZmxvYXRbXSBmaWVsZDIp
IHsKLSAgICBpZiAoZmllbGQxID09IG51bGwgfHwgZmllbGQxLmxlbmd0aCA9PSAwKSB7Ci0gICAg
ICByZXR1cm4gZmllbGQyID09IG51bGwgfHwgZmllbGQyLmxlbmd0aCA9PSAwOwotICAgIH0gZWxz
ZSB7Ci0gICAgICByZXR1cm4gQXJyYXlzLmVxdWFscyhmaWVsZDEsIGZpZWxkMik7Ci0gICAgfQot
ICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyByZXBlYXRlZCBkb3VibGUgZmllbGQgZXF1YWxpdHk7
IG51bGwtdmFsdWUgYW5kIDAtbGVuZ3RoIGZpZWxkcyBhcmUKLSAgICogY29uc2lkZXJlZCBlcXVh
bC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlcXVhbHMoZG91YmxlW10gZmllbGQx
LCBkb3VibGVbXSBmaWVsZDIpIHsKLSAgICBpZiAoZmllbGQxID09IG51bGwgfHwgZmllbGQxLmxl
bmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmllbGQyID09IG51bGwgfHwgZmllbGQyLmxlbmd0
aCA9PSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gQXJyYXlzLmVxdWFscyhmaWVsZDEs
IGZpZWxkMik7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyByZXBlYXRlZCBib29s
ZWFuIGZpZWxkIGVxdWFsaXR5OyBudWxsLXZhbHVlIGFuZCAwLWxlbmd0aCBmaWVsZHMgYXJlCi0g
ICAqIGNvbnNpZGVyZWQgZXF1YWwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1
YWxzKGJvb2xlYW5bXSBmaWVsZDEsIGJvb2xlYW5bXSBmaWVsZDIpIHsKLSAgICBpZiAoZmllbGQx
ID09IG51bGwgfHwgZmllbGQxLmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmllbGQyID09
IG51bGwgfHwgZmllbGQyLmxlbmd0aCA9PSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4g
QXJyYXlzLmVxdWFscyhmaWVsZDEsIGZpZWxkMik7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IENoZWNrcyByZXBlYXRlZCBieXRlcyBmaWVsZCBlcXVhbGl0eS4gT25seSBub24tbnVsbCBlbGVt
ZW50cyBhcmUgdGVzdGVkLgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBmaWVsZHMgaGF2
ZSB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBub24tbnVsbAotICAgKiBlbGVtZW50cy4gTnVsbC12YWx1
ZSBmaWVsZHMgYW5kIGZpZWxkcyBvZiBhbnkgbGVuZ3RoIHdpdGggb25seSBudWxsCi0gICAqIGVs
ZW1lbnRzIGFyZSBjb25zaWRlcmVkIGVxdWFsLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29s
ZWFuIGVxdWFscyhieXRlW11bXSBmaWVsZDEsIGJ5dGVbXVtdIGZpZWxkMikgewotICAgIGludCBp
bmRleDEgPSAwOwotICAgIGludCBsZW5ndGgxID0gZmllbGQxID09IG51bGwgPyAwIDogZmllbGQx
Lmxlbmd0aDsKLSAgICBpbnQgaW5kZXgyID0gMDsKLSAgICBpbnQgbGVuZ3RoMiA9IGZpZWxkMiA9
PSBudWxsID8gMCA6IGZpZWxkMi5sZW5ndGg7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIHdo
aWxlIChpbmRleDEgPCBsZW5ndGgxICYmIGZpZWxkMVtpbmRleDFdID09IG51bGwpIHsKLSAgICAg
ICAgaW5kZXgxKys7Ci0gICAgICB9Ci0gICAgICB3aGlsZSAoaW5kZXgyIDwgbGVuZ3RoMiAmJiBm
aWVsZDJbaW5kZXgyXSA9PSBudWxsKSB7Ci0gICAgICAgIGluZGV4MisrOwotICAgICAgfQotICAg
ICAgYm9vbGVhbiBhdEVuZE9mMSA9IGluZGV4MSA+PSBsZW5ndGgxOwotICAgICAgYm9vbGVhbiBh
dEVuZE9mMiA9IGluZGV4MiA+PSBsZW5ndGgyOwotICAgICAgaWYgKGF0RW5kT2YxICYmIGF0RW5k
T2YyKSB7Ci0gICAgICAgIC8vIG5vIG1vcmUgbm9uLW51bGwgZWxlbWVudHMgdG8gdGVzdCBpbiBi
b3RoIGFycmF5cwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gZWxzZSBpZiAoYXRFbmRP
ZjEgIT0gYXRFbmRPZjIpIHsKLSAgICAgICAgLy8gb25lIG9mIHRoZSBhcnJheXMgaGF2ZSBleHRy
YSBub24tbnVsbCBlbGVtZW50cwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9IGVsc2Ug
aWYgKCFBcnJheXMuZXF1YWxzKGZpZWxkMVtpbmRleDFdLCBmaWVsZDJbaW5kZXgyXSkpIHsKLSAg
ICAgICAgLy8gZWxlbWVudCBtaXNtYXRjaAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9
Ci0gICAgICBpbmRleDErKzsKLSAgICAgIGluZGV4MisrOwotICAgIH0KLSAgfQotCi0gIC8qKgot
ICAgKiBDaGVja3MgcmVwZWF0ZWQgc3RyaW5nL21lc3NhZ2UgZmllbGQgZXF1YWxpdHkuIE9ubHkg
bm9uLW51bGwgZWxlbWVudHMgYXJlCi0gICAqIHRlc3RlZC4gUmV0dXJucyB0cnVlIGlmIHRoZSB0
d28gZmllbGRzIGhhdmUgdGhlIHNhbWUgc2VxdWVuY2Ugb2Ygbm9uLW51bGwKLSAgICogZWxlbWVu
dHMuIE51bGwtdmFsdWUgZmllbGRzIGFuZCBmaWVsZHMgb2YgYW55IGxlbmd0aCB3aXRoIG9ubHkg
bnVsbAotICAgKiBlbGVtZW50cyBhcmUgY29uc2lkZXJlZCBlcXVhbC4KLSAgICovCi0gIHB1Ymxp
YyBzdGF0aWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0W10gZmllbGQxLCBPYmplY3RbXSBmaWVsZDIp
IHsKLSAgICBpbnQgaW5kZXgxID0gMDsKLSAgICBpbnQgbGVuZ3RoMSA9IGZpZWxkMSA9PSBudWxs
ID8gMCA6IGZpZWxkMS5sZW5ndGg7Ci0gICAgaW50IGluZGV4MiA9IDA7Ci0gICAgaW50IGxlbmd0
aDIgPSBmaWVsZDIgPT0gbnVsbCA/IDAgOiBmaWVsZDIubGVuZ3RoOwotICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICB3aGlsZSAoaW5kZXgxIDwgbGVuZ3RoMSAmJiBmaWVsZDFbaW5kZXgxXSA9PSBu
dWxsKSB7Ci0gICAgICAgIGluZGV4MSsrOwotICAgICAgfQotICAgICAgd2hpbGUgKGluZGV4MiA8
IGxlbmd0aDIgJiYgZmllbGQyW2luZGV4Ml0gPT0gbnVsbCkgewotICAgICAgICBpbmRleDIrKzsK
LSAgICAgIH0KLSAgICAgIGJvb2xlYW4gYXRFbmRPZjEgPSBpbmRleDEgPj0gbGVuZ3RoMTsKLSAg
ICAgIGJvb2xlYW4gYXRFbmRPZjIgPSBpbmRleDIgPj0gbGVuZ3RoMjsKLSAgICAgIGlmIChhdEVu
ZE9mMSAmJiBhdEVuZE9mMikgewotICAgICAgICAvLyBubyBtb3JlIG5vbi1udWxsIGVsZW1lbnRz
IHRvIHRlc3QgaW4gYm90aCBhcnJheXMKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGVs
c2UgaWYgKGF0RW5kT2YxICE9IGF0RW5kT2YyKSB7Ci0gICAgICAgIC8vIG9uZSBvZiB0aGUgYXJy
YXlzIGhhdmUgZXh0cmEgbm9uLW51bGwgZWxlbWVudHMKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgfSBlbHNlIGlmICghZmllbGQxW2luZGV4MV0uZXF1YWxzKGZpZWxkMltpbmRleDJdKSkg
ewotICAgICAgICAvLyBlbGVtZW50IG1pc21hdGNoCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgIH0KLSAgICAgIGluZGV4MSsrOwotICAgICAgaW5kZXgyKys7Ci0gICAgfQotICB9Ci0KLSAg
LyoqCi0gICAqIENvbXB1dGVzIHRoZSBoYXNoIGNvZGUgb2YgYSByZXBlYXRlZCBpbnQgZmllbGQu
IE51bGwtdmFsdWUgYW5kIDAtbGVuZ3RoCi0gICAqIGZpZWxkcyBoYXZlIHRoZSBzYW1lIGhhc2gg
Y29kZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGhhc2hDb2RlKGludFtdIGZpZWxkKSB7
Ci0gICAgcmV0dXJuIGZpZWxkID09IG51bGwgfHwgZmllbGQubGVuZ3RoID09IDAgPyAwIDogQXJy
YXlzLmhhc2hDb2RlKGZpZWxkKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlcyB0aGUgaGFz
aCBjb2RlIG9mIGEgcmVwZWF0ZWQgbG9uZyBmaWVsZC4gTnVsbC12YWx1ZSBhbmQgMC1sZW5ndGgK
LSAgICogZmllbGRzIGhhdmUgdGhlIHNhbWUgaGFzaCBjb2RlLgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBpbnQgaGFzaENvZGUobG9uZ1tdIGZpZWxkKSB7Ci0gICAgcmV0dXJuIGZpZWxkID09IG51
bGwgfHwgZmllbGQubGVuZ3RoID09IDAgPyAwIDogQXJyYXlzLmhhc2hDb2RlKGZpZWxkKTsKLSAg
fQotCi0gIC8qKgotICAgKiBDb21wdXRlcyB0aGUgaGFzaCBjb2RlIG9mIGEgcmVwZWF0ZWQgZmxv
YXQgZmllbGQuIE51bGwtdmFsdWUgYW5kIDAtbGVuZ3RoCi0gICAqIGZpZWxkcyBoYXZlIHRoZSBz
YW1lIGhhc2ggY29kZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGhhc2hDb2RlKGZsb2F0
W10gZmllbGQpIHsKLSAgICByZXR1cm4gZmllbGQgPT0gbnVsbCB8fCBmaWVsZC5sZW5ndGggPT0g
MCA/IDAgOiBBcnJheXMuaGFzaENvZGUoZmllbGQpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1
dGVzIHRoZSBoYXNoIGNvZGUgb2YgYSByZXBlYXRlZCBkb3VibGUgZmllbGQuIE51bGwtdmFsdWUg
YW5kIDAtbGVuZ3RoCi0gICAqIGZpZWxkcyBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZS4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgaW50IGhhc2hDb2RlKGRvdWJsZVtdIGZpZWxkKSB7Ci0gICAgcmV0
dXJuIGZpZWxkID09IG51bGwgfHwgZmllbGQubGVuZ3RoID09IDAgPyAwIDogQXJyYXlzLmhhc2hD
b2RlKGZpZWxkKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlcyB0aGUgaGFzaCBjb2RlIG9m
IGEgcmVwZWF0ZWQgYm9vbGVhbiBmaWVsZC4gTnVsbC12YWx1ZSBhbmQgMC1sZW5ndGgKLSAgICog
ZmllbGRzIGhhdmUgdGhlIHNhbWUgaGFzaCBjb2RlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBp
bnQgaGFzaENvZGUoYm9vbGVhbltdIGZpZWxkKSB7Ci0gICAgcmV0dXJuIGZpZWxkID09IG51bGwg
fHwgZmllbGQubGVuZ3RoID09IDAgPyAwIDogQXJyYXlzLmhhc2hDb2RlKGZpZWxkKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBDb21wdXRlcyB0aGUgaGFzaCBjb2RlIG9mIGEgcmVwZWF0ZWQgYnl0ZXMg
ZmllbGQuIE9ubHkgdGhlIHNlcXVlbmNlIG9mIGFsbAotICAgKiBub24tbnVsbCBlbGVtZW50cyBh
cmUgdXNlZCBpbiB0aGUgY29tcHV0YXRpb24uIE51bGwtdmFsdWUgZmllbGRzIGFuZCBmaWVsZHMK
LSAgICogb2YgYW55IGxlbmd0aCB3aXRoIG9ubHkgbnVsbCBlbGVtZW50cyBoYXZlIHRoZSBzYW1l
IGhhc2ggY29kZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGhhc2hDb2RlKGJ5dGVbXVtd
IGZpZWxkKSB7Ci0gICAgaW50IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDAsIHNpemUg
PSBmaWVsZCA9PSBudWxsID8gMCA6IGZpZWxkLmxlbmd0aDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgYnl0ZVtdIGVsZW1lbnQgPSBmaWVsZFtpXTsKLSAgICAgIGlmIChlbGVtZW50ICE9IG51bGwp
IHsKLSAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyBBcnJheXMuaGFzaENvZGUoZWxlbWVu
dCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAg
ICogQ29tcHV0ZXMgdGhlIGhhc2ggY29kZSBvZiBhIHJlcGVhdGVkIHN0cmluZy9tZXNzYWdlIGZp
ZWxkLiBPbmx5IHRoZQotICAgKiBzZXF1ZW5jZSBvZiBhbGwgbm9uLW51bGwgZWxlbWVudHMgYXJl
IHVzZWQgaW4gdGhlIGNvbXB1dGF0aW9uLiBOdWxsLXZhbHVlCi0gICAqIGZpZWxkcyBhbmQgZmll
bGRzIG9mIGFueSBsZW5ndGggd2l0aCBvbmx5IG51bGwgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSBo
YXNoCi0gICAqIGNvZGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBoYXNoQ29kZShPYmpl
Y3RbXSBmaWVsZCkgewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGZvciAoaW50IGkgPSAwLCBz
aXplID0gZmllbGQgPT0gbnVsbCA/IDAgOiBmaWVsZC5sZW5ndGg7IGkgPCBzaXplOyBpKyspIHsK
LSAgICAgIE9iamVjdCBlbGVtZW50ID0gZmllbGRbaV07Ci0gICAgICBpZiAoZWxlbWVudCAhPSBu
dWxsKSB7Ci0gICAgICAgIHJlc3VsdCA9IDMxICogcmVzdWx0ICsgZWxlbWVudC5oYXNoQ29kZSgp
OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIHByaXZhdGUgc3Rh
dGljIE9iamVjdCBwcmltaXRpdmVEZWZhdWx0VmFsdWUoaW50IHR5cGUpIHsKLSAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgIGNhc2UgVFlQRV9CT09MOgotICAgICAgICByZXR1cm4gQm9vbGVhbi5G
QUxTRTsKLSAgICAgIGNhc2UgVFlQRV9CWVRFUzoKLSAgICAgICAgcmV0dXJuIFdpcmVGb3JtYXRO
YW5vLkVNUFRZX0JZVEVTOwotICAgICAgY2FzZSBUWVBFX1NUUklORzoKLSAgICAgICAgcmV0dXJu
ICIiOwotICAgICAgY2FzZSBUWVBFX0ZMT0FUOgotICAgICAgICByZXR1cm4gRmxvYXQudmFsdWVP
ZigwKTsKLSAgICAgIGNhc2UgVFlQRV9ET1VCTEU6Ci0gICAgICAgIHJldHVybiBEb3VibGUudmFs
dWVPZigwKTsKLSAgICAgIGNhc2UgVFlQRV9FTlVNOgotICAgICAgY2FzZSBUWVBFX0ZJWEVEMzI6
Ci0gICAgICBjYXNlIFRZUEVfSU5UMzI6Ci0gICAgICBjYXNlIFRZUEVfVUlOVDMyOgotICAgICAg
Y2FzZSBUWVBFX1NJTlQzMjoKLSAgICAgIGNhc2UgVFlQRV9TRklYRUQzMjoKLSAgICAgICAgcmV0
dXJuIEludGVnZXIudmFsdWVPZigwKTsKLSAgICAgIGNhc2UgVFlQRV9JTlQ2NDoKLSAgICAgIGNh
c2UgVFlQRV9VSU5UNjQ6Ci0gICAgICBjYXNlIFRZUEVfU0lOVDY0OgotICAgICAgY2FzZSBUWVBF
X0ZJWEVENjQ6Ci0gICAgICBjYXNlIFRZUEVfU0ZJWEVENjQ6Ci0gICAgICAgIHJldHVybiBMb25n
LnZhbHVlT2YoMEwpOwotICAgICAgY2FzZSBUWVBFX01FU1NBR0U6Ci0gICAgICBjYXNlIFRZUEVf
R1JPVVA6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uKAotICAgICAgICAgICAgIlR5cGU6ICIgKyB0eXBlICsgIiBpcyBub3QgYSBwcmlt
aXRpdmUgdHlwZS4iKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTWVyZ2VzIHRoZSBtYXAg
ZW50cnkgaW50byB0aGUgbWFwIGZpZWxkLiBOb3RlIHRoaXMgaXMgb25seSBzdXBwb3NlZCB0bwot
ICAgKiBiZSBjYWxsZWQgYnkgZ2VuZXJhdGVkIG1lc3NhZ2VzLgotICAgKgotICAgKiBAcGFyYW0g
bWFwIHRoZSBtYXAgZmllbGQ7IG1heSBiZSBudWxsLCBpbiB3aGljaCBjYXNlIGEgbWFwIHdpbGwg
YmUKLSAgICogICAgICAgIGluc3RhbnRpYXRlZCB1c2luZyB0aGUge0BsaW5rIE1hcEZhY3Rvcmll
cy5NYXBGYWN0b3J5fQotICAgKiBAcGFyYW0gaW5wdXQgdGhlIGlucHV0IGJ5dGUgYnVmZmVyCi0g
ICAqIEBwYXJhbSBrZXlUeXBlIGtleSB0eXBlLCBhcyBkZWZpbmVkIGluIEludGVybmFsTmFuby5U
WVBFXyoKLSAgICogQHBhcmFtIHZhbHVlVHlwZSB2YWx1ZSB0eXBlLCBhcyBkZWZpbmVkIGluIElu
dGVybmFsTmFuby5UWVBFXyoKLSAgICogQHBhcmFtIHZhbHVlIGFuIG5ldyBpbnN0YW5jZSBvZiB0
aGUgdmFsdWUsIGlmIHRoZSB2YWx1ZSBpcyBhIFRZUEVfTUVTU0FHRTsKLSAgICogICAgICAgIG90
aGVyd2lzZSB0aGlzIHBhcmFtZXRlciBjYW4gYmUgbnVsbCBhbmQgd2lsbCBiZSBpZ25vcmVkLgot
ICAgKiBAcGFyYW0ga2V5VGFnIHdpcmUgdGFnIGZvciB0aGUga2V5Ci0gICAqIEBwYXJhbSB2YWx1
ZVRhZyB3aXJlIHRhZyBmb3IgdGhlIHZhbHVlCi0gICAqIEByZXR1cm4gdGhlIG1hcCBmaWVsZAot
ICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0gICAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygidW5j
aGVja2VkIikKLSAgcHVibGljIHN0YXRpYyBmaW5hbCA8SywgVj4gTWFwPEssIFY+IG1lcmdlTWFw
RW50cnkoCi0gICAgICBDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8gaW5wdXQsCi0gICAgICBNYXA8
SywgVj4gbWFwLAotICAgICAgTWFwRmFjdG9yeSBtYXBGYWN0b3J5LAotICAgICAgaW50IGtleVR5
cGUsCi0gICAgICBpbnQgdmFsdWVUeXBlLAotICAgICAgViB2YWx1ZSwKLSAgICAgIGludCBrZXlU
YWcsCi0gICAgICBpbnQgdmFsdWVUYWcpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgbWFwID0g
bWFwRmFjdG9yeS5mb3JNYXAobWFwKTsKLSAgICBmaW5hbCBpbnQgbGVuZ3RoID0gaW5wdXQucmVh
ZFJhd1ZhcmludDMyKCk7Ci0gICAgZmluYWwgaW50IG9sZExpbWl0ID0gaW5wdXQucHVzaExpbWl0
KGxlbmd0aCk7Ci0gICAgSyBrZXkgPSBudWxsOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBp
bnQgdGFnID0gaW5wdXQucmVhZFRhZygpOwotICAgICAgaWYgKHRhZyA9PSAwKSB7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKHRhZyA9PSBrZXlUYWcpIHsKLSAgICAgICAga2V5
ID0gKEspIGlucHV0LnJlYWRQcmltaXRpdmVGaWVsZChrZXlUeXBlKTsKLSAgICAgIH0gZWxzZSBp
ZiAodGFnID09IHZhbHVlVGFnKSB7Ci0gICAgICAgIGlmICh2YWx1ZVR5cGUgPT0gVFlQRV9NRVNT
QUdFKSB7Ci0gICAgICAgICAgaW5wdXQucmVhZE1lc3NhZ2UoKE1lc3NhZ2VOYW5vKSB2YWx1ZSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdmFsdWUgPSAoVikgaW5wdXQucmVhZFByaW1p
dGl2ZUZpZWxkKHZhbHVlVHlwZSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICghaW5wdXQuc2tpcEZpZWxkKHRhZykpIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLSAgICBpbnB1dC5jaGVja0xhc3RUYWdXYXMoMCk7Ci0gICAgaW5w
dXQucG9wTGltaXQob2xkTGltaXQpOwotCi0gICAgaWYgKGtleSA9PSBudWxsKSB7Ci0gICAgICAv
LyBrZXkgY2FuIG9ubHkgYmUgcHJpbWl0aXZlIHR5cGVzLgotICAgICAga2V5ID0gKEspIHByaW1p
dGl2ZURlZmF1bHRWYWx1ZShrZXlUeXBlKTsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUgPT0gbnVs
bCkgewotICAgICAgLy8gbWVzc2FnZSB0eXBlIHZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkg
Y29kZS1nZW4uCi0gICAgICB2YWx1ZSA9IChWKSBwcmltaXRpdmVEZWZhdWx0VmFsdWUodmFsdWVU
eXBlKTsKLSAgICB9Ci0KLSAgICBtYXAucHV0KGtleSwgdmFsdWUpOwotICAgIHJldHVybiBtYXA7
Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIDxLLCBWPiB2b2lkIHNlcmlhbGl6ZU1hcEZpZWxkKAot
ICAgICAgQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFubyBvdXRwdXQsCi0gICAgICBNYXA8SywgVj4g
bWFwLCBpbnQgbnVtYmVyLCBpbnQga2V5VHlwZSwgaW50IHZhbHVlVHlwZSkKLSAgICAgICAgICB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGZvciAoRW50cnk8SywgVj4gZW50cnk6IG1hcC5lbnRy
eVNldCgpKSB7Ci0gICAgICBLIGtleSA9IGVudHJ5LmdldEtleSgpOwotICAgICAgViB2YWx1ZSA9
IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICBpZiAoa2V5ID09IG51bGwgfHwgdmFsdWUgPT0gbnVs
bCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAg
ICAgImtleXMgYW5kIHZhbHVlcyBpbiBtYXBzIGNhbm5vdCBiZSBudWxsIik7Ci0gICAgICB9Ci0g
ICAgICBpbnQgZW50cnlTaXplID0KLSAgICAgICAgICBDb2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5v
LmNvbXB1dGVGaWVsZFNpemUoMSwga2V5VHlwZSwga2V5KSArCi0gICAgICAgICAgQ29kZWRPdXRw
dXRCeXRlQnVmZmVyTmFuby5jb21wdXRlRmllbGRTaXplKDIsIHZhbHVlVHlwZSwgdmFsdWUpOwot
ICAgICAgb3V0cHV0LndyaXRlVGFnKG51bWJlciwgV2lyZUZvcm1hdE5hbm8uV0lSRVRZUEVfTEVO
R1RIX0RFTElNSVRFRCk7Ci0gICAgICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMihlbnRyeVNpemUp
OwotICAgICAgb3V0cHV0LndyaXRlRmllbGQoMSwga2V5VHlwZSwga2V5KTsKLSAgICAgIG91dHB1
dC53cml0ZUZpZWxkKDIsIHZhbHVlVHlwZSwgdmFsdWUpOwotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyBzdGF0aWMgPEssIFY+IGludCBjb21wdXRlTWFwRmllbGRTaXplKAotICAgICAgTWFwPEssIFY+
IG1hcCwgaW50IG51bWJlciwgaW50IGtleVR5cGUsIGludCB2YWx1ZVR5cGUpIHsKLSAgICBpbnQg
c2l6ZSA9IDA7Ci0gICAgaW50IHRhZ1NpemUgPSBDb2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vLmNv
bXB1dGVUYWdTaXplKG51bWJlcik7Ci0gICAgZm9yIChFbnRyeTxLLCBWPiBlbnRyeTogbWFwLmVu
dHJ5U2V0KCkpIHsKLSAgICAgIEsga2V5ID0gZW50cnkuZ2V0S2V5KCk7Ci0gICAgICBWIHZhbHVl
ID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCB2YWx1ZSA9PSBu
dWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0gICAgICAg
ICAgICAia2V5cyBhbmQgdmFsdWVzIGluIG1hcHMgY2Fubm90IGJlIG51bGwiKTsKLSAgICAgIH0K
LSAgICAgIGludCBlbnRyeVNpemUgPQotICAgICAgICAgIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5h
bm8uY29tcHV0ZUZpZWxkU2l6ZSgxLCBrZXlUeXBlLCBrZXkpICsKLSAgICAgICAgICBDb2RlZE91
dHB1dEJ5dGVCdWZmZXJOYW5vLmNvbXB1dGVGaWVsZFNpemUoMiwgdmFsdWVUeXBlLCB2YWx1ZSk7
Ci0gICAgICBzaXplICs9IHRhZ1NpemUgKyBlbnRyeVNpemUKLSAgICAgICAgICArIENvZGVkT3V0
cHV0Qnl0ZUJ1ZmZlck5hbm8uY29tcHV0ZVJhd1ZhcmludDMyU2l6ZShlbnRyeVNpemUpOwotICAg
IH0KLSAgICByZXR1cm4gc2l6ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciB0
d28ge0BsaW5rIE1hcH0gYXJlIGVxdWFsLiBXZSBkb24ndCB1c2UgdGhlIGRlZmF1bHQgZXF1YWxz
Ci0gICAqIG1ldGhvZCBvZiB7QGxpbmsgTWFwfSBiZWNhdXNlIGl0IGNvbXBhcmVzIGJ5IGlkZW50
aXR5IG5vdCBieSBjb250ZW50IGZvcgotICAgKiBieXRlIGFycmF5cy4KLSAgICovCi0gIHB1Ymxp
YyBzdGF0aWMgPEssIFY+IGJvb2xlYW4gZXF1YWxzKE1hcDxLLCBWPiBhLCBNYXA8SywgVj4gYikg
ewotICAgIGlmIChhID09IGIpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAo
YSA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gYi5zaXplKCkgPT0gMDsKLSAgICB9Ci0gICAgaWYg
KGIgPT0gbnVsbCkgewotICAgICAgcmV0dXJuIGEuc2l6ZSgpID09IDA7Ci0gICAgfQotICAgIGlm
IChhLnNpemUoKSAhPSBiLnNpemUoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBmb3IgKEVudHJ5PEssIFY+IGVudHJ5IDogYS5lbnRyeVNldCgpKSB7Ci0gICAgICBpZiAoIWIu
Y29udGFpbnNLZXkoZW50cnkuZ2V0S2V5KCkpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgIH0KLSAgICAgIGlmICghZXF1YWxzTWFwVmFsdWUoZW50cnkuZ2V0VmFsdWUoKSwgYi5nZXQo
ZW50cnkuZ2V0S2V5KCkpKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBlcXVh
bHNNYXBWYWx1ZShPYmplY3QgYSwgT2JqZWN0IGIpIHsKLSAgICBpZiAoYSA9PSBudWxsIHx8IGIg
PT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLSAgICAg
ICAgICAia2V5cyBhbmQgdmFsdWVzIGluIG1hcHMgY2Fubm90IGJlIG51bGwiKTsKLSAgICB9Ci0g
ICAgaWYgKGEgaW5zdGFuY2VvZiBieXRlW10gJiYgYiBpbnN0YW5jZW9mIGJ5dGVbXSkgewotICAg
ICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKGJ5dGVbXSkgYSwgKGJ5dGVbXSkgYik7Ci0gICAgfQot
ICAgIHJldHVybiBhLmVxdWFscyhiKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgPEssIFY+IGlu
dCBoYXNoQ29kZShNYXA8SywgVj4gbWFwKSB7Ci0gICAgaWYgKG1hcCA9PSBudWxsKSB7Ci0gICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaW50IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChFbnRyeTxL
LCBWPiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7Ci0gICAgICByZXN1bHQgKz0gaGFzaENvZGVG
b3JNYXAoZW50cnkuZ2V0S2V5KCkpCi0gICAgICAgICAgXiBoYXNoQ29kZUZvck1hcChlbnRyeS5n
ZXRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIGludCBoYXNoQ29kZUZvck1hcChPYmplY3QgbykgewotICAgIGlmIChvIGluc3RhbmNl
b2YgYnl0ZVtdKSB7Ci0gICAgICByZXR1cm4gQXJyYXlzLmhhc2hDb2RlKChieXRlW10pIG8pOwot
ICAgIH0KLSAgICByZXR1cm4gby5oYXNoQ29kZSgpOwotICB9Ci0KLSAgLy8gVGhpcyBhdm9pZHMg
aGF2aW5nIHRvIG1ha2UgRmllbGRBcnJheSBwdWJsaWMuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBj
bG9uZVVua25vd25GaWVsZERhdGEoRXh0ZW5kYWJsZU1lc3NhZ2VOYW5vIG9yaWdpbmFsLAotICAg
ICAgRXh0ZW5kYWJsZU1lc3NhZ2VOYW5vIGNsb25lZCkgewotICAgIGlmIChvcmlnaW5hbC51bmtu
b3duRmllbGREYXRhICE9IG51bGwpIHsKLSAgICAgIGNsb25lZC51bmtub3duRmllbGREYXRhID0g
KEZpZWxkQXJyYXkpIG9yaWdpbmFsLnVua25vd25GaWVsZERhdGEuY2xvbmUoKTsKLSAgICB9Ci0g
IH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL25hbm8vSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbi5qYXZhIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFu
by9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby9JbnZhbGlkUHJvdG9jb2xC
dWZmZXJOYW5vRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4
NjRkMzhhYmM3NmMzNGIyNjFlNjQyOTIwYmIxYTA5OTBiODYwOTcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvbmFuby9JbnZhbGlkUHJvdG9jb2xCdWZmZXJOYW5vRXhjZXB0aW9uLmph
dmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDEzIEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm87Ci0KLWltcG9y
dCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi0vKioKLSAqIFRocm93biB3aGVuIGEgcHJvdG9jb2wg
bWVzc2FnZSBiZWluZyBwYXJzZWQgaXMgaW52YWxpZCBpbiBzb21lIHdheSwKLSAqIGUuZy4gaXQg
Y29udGFpbnMgYSBtYWxmb3JtZWQgdmFyaW50IG9yIGEgbmVnYXRpdmUgYnl0ZSBsZW5ndGguCi0g
KgotICogQGF1dGhvciBrZW50b25AZ29vZ2xlLmNvbSBLZW50b24gVmFyZGEKLSAqLwotcHVibGlj
IGNsYXNzIEludmFsaWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24gZXh0ZW5kcyBJT0V4Y2Vw
dGlvbiB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0x
NjE2MTUxNzYzMDcyNDUwNDc2TDsKLQotICBwdWJsaWMgSW52YWxpZFByb3RvY29sQnVmZmVyTmFu
b0V4Y2VwdGlvbihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICBzdXBlcihkZXNjcmlw
dGlvbik7Ci0gIH0KLQotICBzdGF0aWMgSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlv
biB0cnVuY2F0ZWRNZXNzYWdlKCkgewotICAgIHJldHVybiBuZXcgSW52YWxpZFByb3RvY29sQnVm
ZmVyTmFub0V4Y2VwdGlvbigKLSAgICAgICJXaGlsZSBwYXJzaW5nIGEgcHJvdG9jb2wgbWVzc2Fn
ZSwgdGhlIGlucHV0IGVuZGVkIHVuZXhwZWN0ZWRseSAiICsKLSAgICAgICJpbiB0aGUgbWlkZGxl
IG9mIGEgZmllbGQuICBUaGlzIGNvdWxkIG1lYW4gZWl0aGVyIHRoYW4gdGhlICIgKwotICAgICAg
ImlucHV0IGhhcyBiZWVuIHRydW5jYXRlZCBvciB0aGF0IGFuIGVtYmVkZGVkIG1lc3NhZ2UgIiAr
Ci0gICAgICAibWlzcmVwb3J0ZWQgaXRzIG93biBsZW5ndGguIik7Ci0gIH0KLQotICBzdGF0aWMg
SW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbiBuZWdhdGl2ZVNpemUoKSB7Ci0gICAg
cmV0dXJuIG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJOYW5vRXhjZXB0aW9uKAotICAgICAgIkNv
ZGVkSW5wdXRTdHJlYW0gZW5jb3VudGVyZWQgYW4gZW1iZWRkZWQgc3RyaW5nIG9yIG1lc3NhZ2Ug
IiArCi0gICAgICAid2hpY2ggY2xhaW1lZCB0byBoYXZlIG5lZ2F0aXZlIHNpemUuIik7Ci0gIH0K
LQotICBzdGF0aWMgSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbiBtYWxmb3JtZWRW
YXJpbnQoKSB7Ci0gICAgcmV0dXJuIG5ldyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJOYW5vRXhjZXB0
aW9uKAotICAgICAgIkNvZGVkSW5wdXRTdHJlYW0gZW5jb3VudGVyZWQgYSBtYWxmb3JtZWQgdmFy
aW50LiIpOwotICB9Ci0KLSAgc3RhdGljIEludmFsaWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRp
b24gaW52YWxpZFRhZygpIHsKLSAgICByZXR1cm4gbmV3IEludmFsaWRQcm90b2NvbEJ1ZmZlck5h
bm9FeGNlcHRpb24oCi0gICAgICAiUHJvdG9jb2wgbWVzc2FnZSBjb250YWluZWQgYW4gaW52YWxp
ZCB0YWcgKHplcm8pLiIpOwotICB9Ci0KLSAgc3RhdGljIEludmFsaWRQcm90b2NvbEJ1ZmZlck5h
bm9FeGNlcHRpb24gaW52YWxpZEVuZFRhZygpIHsKLSAgICByZXR1cm4gbmV3IEludmFsaWRQcm90
b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24oCi0gICAgICAiUHJvdG9jb2wgbWVzc2FnZSBlbmQtZ3Jv
dXAgdGFnIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgdGFnLiIpOwotICB9Ci0KLSAgc3RhdGljIElu
dmFsaWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24gaW52YWxpZFdpcmVUeXBlKCkgewotICAg
IHJldHVybiBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbigKLSAgICAgICJQ
cm90b2NvbCBtZXNzYWdlIHRhZyBoYWQgaW52YWxpZCB3aXJlIHR5cGUuIik7Ci0gIH0KLQotICBz
dGF0aWMgSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbiByZWN1cnNpb25MaW1pdEV4
Y2VlZGVkKCkgewotICAgIHJldHVybiBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2Vw
dGlvbigKLSAgICAgICJQcm90b2NvbCBtZXNzYWdlIGhhZCB0b28gbWFueSBsZXZlbHMgb2YgbmVz
dGluZy4gIE1heSBiZSBtYWxpY2lvdXMuICAiICsKLSAgICAgICJVc2UgQ29kZWRJbnB1dFN0cmVh
bS5zZXRSZWN1cnNpb25MaW1pdCgpIHRvIGluY3JlYXNlIHRoZSBkZXB0aCBsaW1pdC4iKTsKLSAg
fQotCi0gIHN0YXRpYyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJOYW5vRXhjZXB0aW9uIHNpemVMaW1p
dEV4Y2VlZGVkKCkgewotICAgIHJldHVybiBuZXcgSW52YWxpZFByb3RvY29sQnVmZmVyTmFub0V4
Y2VwdGlvbigKLSAgICAgICJQcm90b2NvbCBtZXNzYWdlIHdhcyB0b28gbGFyZ2UuICBNYXkgYmUg
bWFsaWNpb3VzLiAgIiArCi0gICAgICAiVXNlIENvZGVkSW5wdXRTdHJlYW0uc2V0U2l6ZUxpbWl0
KCkgdG8gaW5jcmVhc2UgdGhlIHNpemUgbGltaXQuIik7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2
YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vTWFwRmFjdG9yaWVz
LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL01h
cEZhY3Rvcmllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGZhNDg3N2Jj
NDA0NDUxZmY5ZDM2NDgzZjIzZjdhYzBhMDU5ZjRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL25hbm8vTWFwRmFjdG9yaWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDEzIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotcGFja2FnZSBjb20uZ29v
Z2xlLnByb3RvYnVmLm5hbm87Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBq
YXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIFV0aWxpdHkgY2xhc3MgZm9yIG1hcHMgc3VwcG9ydC4K
LSAqLwotcHVibGljIGZpbmFsIGNsYXNzIE1hcEZhY3RvcmllcyB7Ci0gIHB1YmxpYyBzdGF0aWMg
aW50ZXJmYWNlIE1hcEZhY3RvcnkgewotICAgIDxLLCBWPiBNYXA8SywgVj4gZm9yTWFwKE1hcDxL
LCBWPiBvbGRNYXApOwotICB9Ci0KLSAgLy8gTk9URShsaXVqaXNpKTogVGhlIGZhY3Rvcnkgc2V0
dGVyIGlzIHRlbXBvcmFyaWx5IG1hcmtlZCBhcyBwYWNrYWdlIHByaXZhdGUuCi0gIC8vIFRoZSB3
YXkgdG8gcHJvdmlkZSBjdXN0b21pemVkIGltcGxlbWVudGF0aW9ucyBvZiBtYXBzIGZvciBkaWZm
ZXJlbnQKLSAgLy8gcGxhdGZvcm1zIGFyZSBzdGlsbCB1bmRlciBkaXNjdXNzaW9uLiAgTWFyayBp
dCBhcyBwcml2YXRlIHRvIGF2b2lkIGV4cG9zaW5nCi0gIC8vIHRoZSBBUEkgaW4gcHJvdG8zIGFs
cGhhIHJlbGVhc2UuCi0gIC8qIHB1YmxpYyAqLyBzdGF0aWMgdm9pZCBzZXRNYXBGYWN0b3J5KE1h
cEZhY3RvcnkgbmV3TWFwRmFjdG9yeSkgewotICAgIG1hcEZhY3RvcnkgPSBuZXdNYXBGYWN0b3J5
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBNYXBGYWN0b3J5IGdldE1hcEZhY3RvcnkoKSB7Ci0g
ICAgcmV0dXJuIG1hcEZhY3Rvcnk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZWZh
dWx0TWFwRmFjdG9yeSBpbXBsZW1lbnRzIE1hcEZhY3RvcnkgewotICAgIHB1YmxpYyA8SywgVj4g
TWFwPEssIFY+IGZvck1hcChNYXA8SywgVj4gb2xkTWFwKSB7Ci0gICAgICBpZiAob2xkTWFwID09
IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBIYXNoTWFwPEssIFY+KCk7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gb2xkTWFwOwotICAgIH0KLSAgfQotICBwcml2YXRlIHN0YXRpYyB2b2xhdGls
ZSBNYXBGYWN0b3J5IG1hcEZhY3RvcnkgPSBuZXcgRGVmYXVsdE1hcEZhY3RvcnkoKTsKLQotICBw
cml2YXRlIE1hcEZhY3RvcmllcygpIHt9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWlu
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL01lc3NhZ2VOYW5vLmphdmEgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5v
L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL01lc3NhZ2VOYW5vLmphdmEK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDc1MDI3MDJkMDYwNDgxNTBiNmUyMWE5
ZDJmN2EzYTIxZDYyM2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qYXZhbmFuby9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby9NZXNz
YWdlTmFuby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMTMgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWYubmFu
bzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5
czsKLQotLyoqCi0gKiBBYnN0cmFjdCBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgUHJvdG9jb2wg
TWVzc2FnZSBvYmplY3RzLgotICoKLSAqIEBhdXRob3Igd2lua0Bnb29nbGUuY29tIFdpbmsgU2F2
aWxsZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWVzc2FnZU5hbm8gewotICAgIHByb3Rl
Y3RlZCB2b2xhdGlsZSBpbnQgY2FjaGVkU2l6ZSA9IC0xOwotCi0gICAgLyoqCi0gICAgICogR2V0
IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gZW5jb2RlIHRoaXMgbWVzc2FnZS4KLSAg
ICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgc2l6ZSBvciBjYWxscyBnZXRTZXJpYWxpemVkU2l6ZSB3
aGljaAotICAgICAqIHNldHMgdGhlIGNhY2hlZCBzaXplLiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxs
eSB3aGVuIHNlcmlhbGl6aW5nCi0gICAgICogc28gdGhlIHNpemUgaXMgb25seSBjb21wdXRlZCBv
bmNlLiBJZiBhIG1lbWJlciBpcyBtb2RpZmllZAotICAgICAqIHRoZW4gdGhpcyBjb3VsZCBiZSBz
dGFsZSBjYWxsIGdldFNlcmlhbGl6ZWRTaXplIGlmIGluIGRvdWJ0LgotICAgICAqLwotICAgIHB1
YmxpYyBpbnQgZ2V0Q2FjaGVkU2l6ZSgpIHsKLSAgICAgICAgaWYgKGNhY2hlZFNpemUgPCAwKSB7
Ci0gICAgICAgICAgICAvLyBnZXRTZXJpYWxpemVkU2l6ZSBzZXRzIGNhY2hlZFNpemUKLSAgICAg
ICAgICAgIGdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNh
Y2hlZFNpemU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcHV0ZXMgdGhlIG51bWJlciBv
ZiBieXRlcyByZXF1aXJlZCB0byBlbmNvZGUgdGhpcyBtZXNzYWdlLgotICAgICAqIFRoZSBzaXpl
IGlzIGNhY2hlZCBhbmQgdGhlIGNhY2hlZCByZXN1bHQgY2FuIGJlIHJldHJpZXZlZAotICAgICAq
IHVzaW5nIGdldENhY2hlZFNpemUoKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFNlcmlh
bGl6ZWRTaXplKCkgewotICAgICAgICBpbnQgc2l6ZSA9IGNvbXB1dGVTZXJpYWxpemVkU2l6ZSgp
OwotICAgICAgICBjYWNoZWRTaXplID0gc2l6ZTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogQ29tcHV0ZXMgdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJl
ZCB0byBlbmNvZGUgdGhpcyBtZXNzYWdlLiBUaGlzIGRvZXMgbm90IHVwZGF0ZSB0aGUKLSAgICAg
KiBjYWNoZWQgc2l6ZS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgaW50IGNvbXB1dGVTZXJpYWxp
emVkU2l6ZSgpIHsKLSAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpZiB0aGUgZ2VuZXJhdGVk
IG1lc3NhZ2UgaGFzIHNlcmlhbGl6ZWQgZmllbGRzLgotICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSBhbmQgd3JpdGVzIGl0IHRv
IHtAY29kZSBvdXRwdXR9LgotICAgICAqCi0gICAgICogQHBhcmFtIG91dHB1dCB0aGUgb3V0cHV0
IHRvIHJlY2VpdmUgdGhlIHNlcmlhbGl6ZWQgZm9ybS4KLSAgICAgKiBAdGhyb3dzIElPRXhjZXB0
aW9uIGlmIGFuIGVycm9yIG9jY3VycmVkIHdyaXRpbmcgdG8ge0Bjb2RlIG91dHB1dH0uCi0gICAg
ICovCi0gICAgcHVibGljIHZvaWQgd3JpdGVUbyhDb2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vIG91
dHB1dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gRG9lcyBub3RoaW5nIGJ5IGRl
ZmF1bHQuIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyB3aGljaCBoYXZlIGRhdGEgdG8gd3JpdGUu
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUGFyc2Uge0Bjb2RlIGlucHV0fSBhcyBhIG1lc3Nh
Z2Ugb2YgdGhpcyB0eXBlIGFuZCBtZXJnZSBpdCB3aXRoIHRoZQotICAgICAqIG1lc3NhZ2UgYmVp
bmcgYnVpbHQuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IE1lc3NhZ2VOYW5vIG1lcmdl
RnJvbShDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8gaW5wdXQpIHRocm93cyBJT0V4Y2VwdGlvbjsK
LQotICAgIC8qKgotICAgICAqIFNlcmlhbGl6ZSB0byBhIGJ5dGUgYXJyYXkuCi0gICAgICogQHJl
dHVybiBieXRlIGFycmF5IHdpdGggdGhlIHNlcmlhbGl6ZWQgZGF0YS4KLSAgICAgKi8KLSAgICBw
dWJsaWMgc3RhdGljIGZpbmFsIGJ5dGVbXSB0b0J5dGVBcnJheShNZXNzYWdlTmFubyBtc2cpIHsK
LSAgICAgICAgZmluYWwgYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW21zZy5nZXRTZXJpYWxpemVk
U2l6ZSgpXTsKLSAgICAgICAgdG9CeXRlQXJyYXkobXNnLCByZXN1bHQsIDAsIHJlc3VsdC5sZW5n
dGgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNl
cmlhbGl6ZSB0byBhIGJ5dGUgYXJyYXkgc3RhcnRpbmcgYXQgb2Zmc2V0IHRocm91Z2ggbGVuZ3Ro
LiBUaGUKLSAgICAgKiBtZXRob2QgZ2V0U2VyaWFsaXplZFNpemUgbXVzdCBoYXZlIGJlZW4gY2Fs
bGVkIHByaW9yIHRvIGNhbGxpbmcKLSAgICAgKiB0aGlzIG1ldGhvZCBzbyB0aGUgcHJvcGVyIGxl
bmd0aCBpcyBrbm93LiAgSWYgYW4gYXR0ZW1wdCB0bwotICAgICAqIHdyaXRlIG1vcmUgdGhhbiBs
ZW5ndGggYnl0ZXMgT3V0T2ZTcGFjZUV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bgotICAgICAqIGFu
ZCBpZiBsZW5ndGggYnl0ZXMgYXJlIG5vdCB3cml0dGVuIHRoZW4gSWxsZWdhbFN0YXRlRXhjZXB0
aW9uCi0gICAgICogaXMgdGhyb3duLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg
dm9pZCB0b0J5dGVBcnJheShNZXNzYWdlTmFubyBtc2csIGJ5dGVbXSBkYXRhLCBpbnQgb2Zmc2V0
LCBpbnQgbGVuZ3RoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBDb2RlZE91
dHB1dEJ5dGVCdWZmZXJOYW5vIG91dHB1dCA9Ci0gICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRC
eXRlQnVmZmVyTmFuby5uZXdJbnN0YW5jZShkYXRhLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgICAg
ICAgICBtc2cud3JpdGVUbyhvdXRwdXQpOwotICAgICAgICAgICAgb3V0cHV0LmNoZWNrTm9TcGFj
ZUxlZnQoKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNlcmlhbGl6aW5nIHRvIGEgYnl0ZSBhcnJheSB0
aHJldyBhbiBJT0V4Y2VwdGlvbiAiCi0gICAgICAgICAgICAgICAgICAgICsgIihzaG91bGQgbmV2
ZXIgaGFwcGVuKS4iLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBh
cnNlIHtAY29kZSBkYXRhfSBhcyBhIG1lc3NhZ2Ugb2YgdGhpcyB0eXBlIGFuZCBtZXJnZSBpdCB3
aXRoIHRoZQotICAgICAqIG1lc3NhZ2UgYmVpbmcgYnVpbHQuCi0gICAgICovCi0gICAgcHVibGlj
IHN0YXRpYyBmaW5hbCA8VCBleHRlbmRzIE1lc3NhZ2VOYW5vPiBUIG1lcmdlRnJvbShUIG1zZywg
ZmluYWwgYnl0ZVtdIGRhdGEpCi0gICAgICAgIHRocm93cyBJbnZhbGlkUHJvdG9jb2xCdWZmZXJO
YW5vRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIG1lcmdlRnJvbShtc2csIGRhdGEsIDAsIGRh
dGEubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQYXJzZSB7QGNvZGUgZGF0YX0g
YXMgYSBtZXNzYWdlIG9mIHRoaXMgdHlwZSBhbmQgbWVyZ2UgaXQgd2l0aCB0aGUKLSAgICAgKiBt
ZXNzYWdlIGJlaW5nIGJ1aWx0LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgPFQg
ZXh0ZW5kcyBNZXNzYWdlTmFubz4gVCBtZXJnZUZyb20oVCBtc2csIGZpbmFsIGJ5dGVbXSBkYXRh
LAotICAgICAgICAgICAgZmluYWwgaW50IG9mZiwgZmluYWwgaW50IGxlbikgdGhyb3dzIEludmFs
aWRQcm90b2NvbEJ1ZmZlck5hbm9FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAg
ICAgZmluYWwgQ29kZWRJbnB1dEJ5dGVCdWZmZXJOYW5vIGlucHV0ID0KLSAgICAgICAgICAgICAg
ICBDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8ubmV3SW5zdGFuY2UoZGF0YSwgb2ZmLCBsZW4pOwot
ICAgICAgICAgICAgbXNnLm1lcmdlRnJvbShpbnB1dCk7Ci0gICAgICAgICAgICBpbnB1dC5jaGVj
a0xhc3RUYWdXYXMoMCk7Ci0gICAgICAgICAgICByZXR1cm4gbXNnOwotICAgICAgICB9IGNhdGNo
IChJbnZhbGlkUHJvdG9jb2xCdWZmZXJOYW5vRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRo
cm93IGU7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJSZWFkaW5nIGZyb20gYSBieXRlIGFycmF5IHRocmV3
IGFuIElPRXhjZXB0aW9uIChzaG91bGQgIgotICAgICAgICAgICAgICAgICAgICArICJuZXZlciBo
YXBwZW4pLiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGFyZXMg
dHdvIHtAY29kZSBNZXNzYWdlTmFub31zIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIG1lc3NhZ2Un
cyBhcmUgdGhlIHNhbWUgY2xhc3MgYW5kCi0gICAgICogaGF2ZSBzZXJpYWxpemVkIGZvcm0gZXF1
YWxpdHkgKGkuZS4gYWxsIG9mIHRoZSBmaWVsZCB2YWx1ZXMgYXJlIHRoZSBzYW1lKS4KLSAgICAg
Ki8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gbWVzc2FnZU5hbm9FcXVhbHMoTWVz
c2FnZU5hbm8gYSwgTWVzc2FnZU5hbm8gYikgewotICAgICAgICBpZiAoYSA9PSBiKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYSA9PSBudWxsIHx8
IGIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChhLmdldENsYXNzKCkgIT0gYi5nZXRDbGFzcygpKSB7Ci0gICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIGludCBzZXJpYWxpemVkU2l6ZSA9IGEu
Z2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAgICAgaWYgKGIuZ2V0U2VyaWFsaXplZFNpemUoKSAh
PSBzZXJpYWxpemVkU2l6ZSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGZpbmFsIGJ5dGVbXSBhQnl0ZUFycmF5ID0gbmV3IGJ5dGVbc2VyaWFsaXplZFNp
emVdOwotICAgICAgICBmaW5hbCBieXRlW10gYkJ5dGVBcnJheSA9IG5ldyBieXRlW3NlcmlhbGl6
ZWRTaXplXTsKLSAgICAgICAgdG9CeXRlQXJyYXkoYSwgYUJ5dGVBcnJheSwgMCwgc2VyaWFsaXpl
ZFNpemUpOwotICAgICAgICB0b0J5dGVBcnJheShiLCBiQnl0ZUFycmF5LCAwLCBzZXJpYWxpemVk
U2l6ZSk7Ci0gICAgICAgIHJldHVybiBBcnJheXMuZXF1YWxzKGFCeXRlQXJyYXksIGJCeXRlQXJy
YXkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyAo
bW9zdGx5KSBjb21wYXRpYmxlIHdpdGggUHJvdG9CdWZmZXIncyBUZXh0Rm9ybWF0LiBOb3RlIHRo
YXQgZ3JvdXBzCi0gICAgICogKHdoaWNoIGFyZSBkZXByZWNhdGVkKSBhcmUgbm90IHNlcmlhbGl6
ZWQgd2l0aCB0aGUgY29ycmVjdCBmaWVsZCBuYW1lLgotICAgICAqCi0gICAgICogPHA+VGhpcyBp
cyBpbXBsZW1lbnRlZCB1c2luZyByZWZsZWN0aW9uLCBzbyBpdCBpcyBub3QgZXNwZWNpYWxseSBm
YXN0IG5vciBpcyBpdCBndWFyYW50ZWVkCi0gICAgICogdG8gZmluZCBhbGwgZmllbGRzIGlmIHlv
dSBoYXZlIG1ldGhvZCByZW1vdmFsIHR1cm5lZCBvbiBmb3IgcHJvZ3VhcmQuCi0gICAgICovCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0
dXJuIE1lc3NhZ2VOYW5vUHJpbnRlci5wcmludCh0aGlzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBQcm92aWRlcyBzdXBwb3J0IGZvciBjbG9uaW5nLiBUaGlzIG9ubHkgd29ya3MgaWYgeW91
IHNwZWNpZnkgdGhlIGdlbmVyYXRlX2Nsb25lIG1ldGhvZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgTWVzc2FnZU5hbm8gY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0
ZWRFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gKE1lc3NhZ2VOYW5vKSBzdXBlci5jbG9uZSgp
OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL25hbm8vTWVzc2FnZU5hbm9QcmludGVyLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWlu
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL01lc3NhZ2VOYW5vUHJpbnRlci5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTUwMGJiOTQ4YzlkMzMyYjk4MjE2NjhmODNi
OWMxNDA0YTA2NjUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vTWVzc2Fn
ZU5hbm9QcmludGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1
Zi5uYW5vOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXk7Ci1pbXBvcnQgamF2YS5s
YW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRh
cmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQg
amF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoq
Ci0gKiBTdGF0aWMgaGVscGVyIG1ldGhvZHMgZm9yIHByaW50aW5nIG5hbm8gcHJvdG9zLgotICoK
LSAqIEBhdXRob3IgZmx5bm5AZ29vZ2xlLmNvbSBBbmRyZXcgRmx5bm4KLSAqLwotcHVibGljIGZp
bmFsIGNsYXNzIE1lc3NhZ2VOYW5vUHJpbnRlciB7Ci0gICAgLy8gRG8gbm90IGFsbG93IGluc3Rh
bnRpYXRpb24KLSAgICBwcml2YXRlIE1lc3NhZ2VOYW5vUHJpbnRlcigpIHt9Ci0KLSAgICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERU5UID0gIiAgIjsKLSAgICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgTUFYX1NUUklOR19MRU4gPSAyMDA7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1
cm5zIGFuIHRleHQgcmVwcmVzZW50YXRpb24gb2YgYSBNZXNzYWdlTmFubyBzdWl0YWJsZSBmb3Ig
ZGVidWdnaW5nLiBUaGUgcmV0dXJuZWQgc3RyaW5nCi0gICAgICogaXMgbW9zdGx5IGNvbXBhdGli
bGUgd2l0aCBQcm90b2NvbCBCdWZmZXIncyBUZXh0Rm9ybWF0IChhcyBwcm92aWRlZCBieSBub24t
bmFubyBwcm90b2NvbAotICAgICAqIGJ1ZmZlcnMpIC0tIGdyb3VwcyAod2hpY2ggYXJlIGRlcHJl
Y2F0ZWQpIGFyZSBvdXRwdXQgd2l0aCBhbiB1bmRlcnNjb3JlIG5hbWUgKGUuZy4gZm9vX2Jhcgot
ICAgICAqIGluc3RlYWQgb2YgRm9vQmFyKSBhbmQgd2lsbCB0aHVzIG5vdCBwYXJzZS4KLSAgICAg
KgotICAgICAqIDxwPkVtcGxveXMgSmF2YSByZWZsZWN0aW9uIG9uIHRoZSBnaXZlbiBvYmplY3Qg
YW5kIHJlY3Vyc2l2ZWx5IHByaW50cyBwcmltaXRpdmUgZmllbGRzLAotICAgICAqIGdyb3Vwcywg
YW5kIG1lc3NhZ2VzLjwvcD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMg
TWVzc2FnZU5hbm8+IFN0cmluZyBwcmludChUIG1lc3NhZ2UpIHsKLSAgICAgICAgaWYgKG1lc3Nh
Z2UgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICB9Ci0KLSAgICAg
ICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgIHByaW50KG51bGwsIG1lc3NhZ2UsIG5ldyBTdHJpbmdCdWZmZXIoKSwgYnVm
KTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gIkVycm9yIHByaW50aW5nIHByb3RvOiAiICsgZS5nZXRNZXNzYWdlKCk7Ci0g
ICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotICAgICAgICAg
ICAgcmV0dXJuICJFcnJvciBwcmludGluZyBwcm90bzogIiArIGUuZ2V0TWVzc2FnZSgpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBGdW5jdGlvbiB0aGF0IHdpbGwgcHJpbnQgdGhlIGdpdmVuIG1lc3NhZ2UvZmllbGQg
aW50byB0aGUgU3RyaW5nQnVmZmVyLgotICAgICAqIE1lYW50IHRvIGJlIGNhbGxlZCByZWN1cnNp
dmVseS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpZGVudGlmaWVyIHRoZSBpZGVudGlmaWVyIHRv
IHVzZSwgb3Ige0Bjb2RlIG51bGx9IGlmIHRoaXMgaXMgdGhlIHJvb3QgbWVzc2FnZSB0bwotICAg
ICAqICAgICAgICBwcmludC4KLSAgICAgKiBAcGFyYW0gb2JqZWN0IHRoZSB2YWx1ZSB0byBwcmlu
dC4gTWF5IGluIGZhY3QgYmUgYSBwcmltaXRpdmUgdmFsdWUgb3IgYnl0ZSBhcnJheSBhbmQgbm90
IGEKLSAgICAgKiAgICAgICAgbWVzc2FnZS4KLSAgICAgKiBAcGFyYW0gaW5kZW50QnVmIHRoZSBp
bmRlbnRhdGlvbiBlYWNoIGxpbmUgc2hvdWxkIGJlZ2luIHdpdGguCi0gICAgICogQHBhcmFtIGJ1
ZiB0aGUgb3V0cHV0IGJ1ZmZlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHBy
aW50KFN0cmluZyBpZGVudGlmaWVyLCBPYmplY3Qgb2JqZWN0LAotICAgICAgICAgICAgU3RyaW5n
QnVmZmVyIGluZGVudEJ1ZiwgU3RyaW5nQnVmZmVyIGJ1ZikgdGhyb3dzIElsbGVnYWxBY2Nlc3NF
eGNlcHRpb24sCi0gICAgICAgICAgICBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIHsKLSAgICAg
ICAgaWYgKG9iamVjdCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4g
aWYuLi4KLSAgICAgICAgICAgIC8vICAgLSB3ZSdyZSBhYm91dCB0byBwcmludCBhIG1lc3NhZ2Us
IFN0cmluZywgb3IgYnl0ZVtdLCBidXQgaXQgbm90IHByZXNlbnQ7Ci0gICAgICAgICAgICAvLyAg
IC0gd2UncmUgYWJvdXQgdG8gcHJpbnQgYSBwcmltaXRpdmUsIGJ1dCAicmVmdHlwZSIgb3B0aW9u
YWwgc3R5bGUgaXMgZW5hYmxlZCwgYW5kCi0gICAgICAgICAgICAvLyAgICAgdGhlIGZpZWxkIGlz
IHVuc2V0LgotICAgICAgICAgICAgLy8gSW4gYm90aCBjYXNlcyB0aGUgYXBwcm9wcmlhdGUgYmVo
YXZpb3IgaXMgdG8gb3V0cHV0IG5vdGhpbmcuCi0gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGlu
c3RhbmNlb2YgTWVzc2FnZU5hbm8pIHsgIC8vIE5hbm8gcHJvdG8gbWVzc2FnZQotICAgICAgICAg
ICAgaW50IG9yaWdJbmRlbnRCdWZMZW5ndGggPSBpbmRlbnRCdWYubGVuZ3RoKCk7Ci0gICAgICAg
ICAgICBpZiAoaWRlbnRpZmllciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYnVmLmFwcGVu
ZChpbmRlbnRCdWYpLmFwcGVuZChkZUNhbWVsQ2FzZWlmeShpZGVudGlmaWVyKSkuYXBwZW5kKCIg
PFxuIik7Ci0gICAgICAgICAgICAgICAgaW5kZW50QnVmLmFwcGVuZChJTkRFTlQpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgQ2xhc3M8Pz4gY2xhenogPSBvYmplY3QuZ2V0Q2xhc3MoKTsK
LQotICAgICAgICAgICAgLy8gUHJvdG8gZmllbGRzIGZvbGxvdyBvbmUgb2YgdHdvIGZvcm1hdHM6
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gMSkgUHVibGljLCBub24tc3RhdGljIHZh
cmlhYmxlcyB0aGF0IGRvIG5vdCBiZWdpbiBvciBlbmQgd2l0aCAnXycKLSAgICAgICAgICAgIC8v
IEZpbmQgYW5kIHByaW50IHRoZXNlIHVzaW5nIGRlY2xhcmVkIHB1YmxpYyBmaWVsZHMKLSAgICAg
ICAgICAgIGZvciAoRmllbGQgZmllbGQgOiBjbGF6ei5nZXRGaWVsZHMoKSkgewotICAgICAgICAg
ICAgICAgIGludCBtb2RpZmllcnMgPSBmaWVsZC5nZXRNb2RpZmllcnMoKTsKLSAgICAgICAgICAg
ICAgICBTdHJpbmcgZmllbGROYW1lID0gZmllbGQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAg
IGlmICgiY2FjaGVkU2l6ZSIuZXF1YWxzKGZpZWxkTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVE9ETyhiZHVmZik6IHBlcmhhcHMgY2FjaGVkU2l6ZSBzaG91bGQgaGF2ZSBhIG1vcmUg
b2JzY3VyZSBuYW1lLgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoKG1vZGlmaWVycyAmIE1vZGlmaWVyLlBVQkxJ
QykgPT0gTW9kaWZpZXIuUFVCTElDCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAobW9kaWZp
ZXJzICYgTW9kaWZpZXIuU1RBVElDKSAhPSBNb2RpZmllci5TVEFUSUMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICYmICFmaWVsZE5hbWUuc3RhcnRzV2l0aCgiXyIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAmJiAhZmllbGROYW1lLmVuZHNXaXRoKCJfIikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ2xhc3M8Pz4gZmllbGRUeXBlID0gZmllbGQuZ2V0VHlwZSgpOwotICAgICAgICAgICAgICAg
ICAgICBPYmplY3QgdmFsdWUgPSBmaWVsZC5nZXQob2JqZWN0KTsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoZmllbGRUeXBlLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Q2xhc3M8Pz4gYXJyYXlUeXBlID0gZmllbGRUeXBlLmdldENvbXBvbmVudFR5cGUoKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgaXMgc3BlY2lhbCBzaW5jZSBpdCdzIG5vdCBy
ZXBlYXRlZCwgYnV0IGlzIHJlcHJlc2VudGVkIGJ5IGFuIGFycmF5Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJyYXlUeXBlID09IGJ5dGUuY2xhc3MpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmludChmaWVsZE5hbWUsIHZhbHVlLCBpbmRlbnRCdWYsIGJ1Zik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsZW4gPSB2YWx1ZSA9PSBudWxsID8gMCA6IEFycmF5LmdldExlbmd0aCh2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgZWxlbSA9IEFycmF5Lmdl
dCh2YWx1ZSwgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGZpZWxk
TmFtZSwgZWxlbSwgaW5kZW50QnVmLCBidWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGZpZWxkTmFtZSwgdmFsdWUsIGluZGVu
dEJ1ZiwgYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gMikgRmllbGRzIHRoYXQgYXJlIGFjY2Vzc2Vk
IHZpYSBnZXR0ZXIgbWV0aG9kcyAod2hlbiBhY2Nlc3NvcnMKLSAgICAgICAgICAgIC8vICAgIG1v
ZGUgaXMgdHVybmVkIG9uKQotICAgICAgICAgICAgLy8gRmluZCBhbmQgcHJpbnQgdGhlc2UgdXNp
bmcgZ2V0dGVyIG1ldGhvZHMuCi0gICAgICAgICAgICBmb3IgKE1ldGhvZCBtZXRob2QgOiBjbGF6
ei5nZXRNZXRob2RzKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IG1ldGhvZC5n
ZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSBzZXR0ZXIgYWNjZXNz
b3IgbWV0aG9kIHNpbmNlIGdldHRlcnMgYW5kIGhhenplcnMgYm90aCBoYXZlCi0gICAgICAgICAg
ICAgICAgLy8gbm9uLXByb3RvLWZpZWxkIG5hbWUgY29sbGlzaW9ucyAoaGFzaENvZGUoKSBhbmQg
Z2V0U2VyaWFsaXplZFNpemUoKSkKLSAgICAgICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRo
KCJzZXQiKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3ViZmllbGROYW1lID0gbmFt
ZS5zdWJzdHJpbmcoMyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgTWV0aG9kIGhhenplciA9IG51
bGw7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBo
YXp6ZXIgPSBjbGF6ei5nZXRNZXRob2QoImhhcyIgKyBzdWJmaWVsZE5hbWUpOwotICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgaGF6emVyIGRvZXMndCBleGlzdCBvciByZXR1cm5zIGZhbHNlLCBu
byBuZWVkIHRvIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIGlmICghKEJvb2xlYW4pIGhh
enplci5pbnZva2Uob2JqZWN0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBNZXRob2QgZ2V0
dGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGdldHRlciA9IGNsYXp6LmdldE1ldGhvZCgiZ2V0IiArIHN1YmZpZWxkTmFtZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KHN1YmZpZWxkTmFtZSwgZ2V0dGVyLmludm9rZShv
YmplY3QpLCBpbmRlbnRCdWYsIGJ1Zik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAg
IGluZGVudEJ1Zi5zZXRMZW5ndGgob3JpZ0luZGVudEJ1Zkxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAgYnVmLmFwcGVuZChpbmRlbnRCdWYpLmFwcGVuZCgiPlxuIik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSB7Ci0gICAgICAgICAgTWFw
PD8sPz4gbWFwID0gKE1hcDw/LD8+KSBvYmplY3Q7Ci0gICAgICAgICAgaWRlbnRpZmllciA9IGRl
Q2FtZWxDYXNlaWZ5KGlkZW50aWZpZXIpOwotCi0gICAgICAgICAgZm9yIChNYXAuRW50cnk8Pyw/
PiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICBidWYuYXBwZW5kKGluZGVu
dEJ1ZikuYXBwZW5kKGlkZW50aWZpZXIpLmFwcGVuZCgiIDxcbiIpOwotICAgICAgICAgICAgaW50
IG9yaWdJbmRlbnRCdWZMZW5ndGggPSBpbmRlbnRCdWYubGVuZ3RoKCk7Ci0gICAgICAgICAgICBp
bmRlbnRCdWYuYXBwZW5kKElOREVOVCk7Ci0gICAgICAgICAgICBwcmludCgia2V5IiwgZW50cnku
Z2V0S2V5KCksIGluZGVudEJ1ZiwgYnVmKTsKLSAgICAgICAgICAgIHByaW50KCJ2YWx1ZSIsIGVu
dHJ5LmdldFZhbHVlKCksIGluZGVudEJ1ZiwgYnVmKTsKLSAgICAgICAgICAgIGluZGVudEJ1Zi5z
ZXRMZW5ndGgob3JpZ0luZGVudEJ1Zkxlbmd0aCk7Ci0gICAgICAgICAgICBidWYuYXBwZW5kKGlu
ZGVudEJ1ZikuYXBwZW5kKCI+XG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBOb24tbnVsbCBwcmltaXRpdmUgdmFsdWUKLSAgICAgICAgICAgIGlkZW50
aWZpZXIgPSBkZUNhbWVsQ2FzZWlmeShpZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGJ1Zi5hcHBl
bmQoaW5kZW50QnVmKS5hcHBlbmQoaWRlbnRpZmllcikuYXBwZW5kKCI6ICIpOwotICAgICAgICAg
ICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykgewotICAgICAgICAgICAgICAgIFN0cmlu
ZyBzdHJpbmdNZXNzYWdlID0gc2FuaXRpemVTdHJpbmcoKFN0cmluZykgb2JqZWN0KTsKLSAgICAg
ICAgICAgICAgICBidWYuYXBwZW5kKCJcIiIpLmFwcGVuZChzdHJpbmdNZXNzYWdlKS5hcHBlbmQo
IlwiIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIGJ5dGVbXSkg
ewotICAgICAgICAgICAgICAgIGFwcGVuZFF1b3RlZEJ5dGVzKChieXRlW10pIG9iamVjdCwgYnVm
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVmLmFwcGVuZChvYmpl
Y3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVmLmFwcGVuZCgiXG4iKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnZlcnRzIGFuIGlkZW50aWZpZXIgb2Yg
dGhlIGZvcm1hdCAiRmllbGROYW1lIiBpbnRvICJmaWVsZF9uYW1lIi4KLSAgICAgKi8KLSAgICBw
cml2YXRlIHN0YXRpYyBTdHJpbmcgZGVDYW1lbENhc2VpZnkoU3RyaW5nIGlkZW50aWZpZXIpIHsK
LSAgICAgICAgU3RyaW5nQnVmZmVyIG91dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBpZGVudGlmaWVyLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAg
ICAgIGNoYXIgY3VycmVudENoYXIgPSBpZGVudGlmaWVyLmNoYXJBdChpKTsKLSAgICAgICAgICAg
IGlmIChpID09IDApIHsKLSAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKENoYXJhY3Rlci50b0xv
d2VyQ2FzZShjdXJyZW50Q2hhcikpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChDaGFyYWN0ZXIu
aXNVcHBlckNhc2UoY3VycmVudENoYXIpKSB7Ci0gICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgn
XycpLmFwcGVuZChDaGFyYWN0ZXIudG9Mb3dlckNhc2UoY3VycmVudENoYXIpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb3V0LmFwcGVuZChjdXJyZW50Q2hhcik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG91dC50b1N0cmluZygpOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIFNob3J0ZW5zIGFuZCBlc2NhcGVzIHRoZSBnaXZlbiBz
dHJpbmcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNhbml0aXplU3RyaW5n
KFN0cmluZyBzdHIpIHsKLSAgICAgICAgaWYgKCFzdHIuc3RhcnRzV2l0aCgiaHR0cCIpICYmIHN0
ci5sZW5ndGgoKSA+IE1BWF9TVFJJTkdfTEVOKSB7Ci0gICAgICAgICAgICAvLyBUcmltIG5vbi1V
Ukwgc3RyaW5ncy4KLSAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgTUFYX1NUUklO
R19MRU4pICsgIlsuLi5dIjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZXNjYXBlU3RyaW5n
KHN0cik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXNjYXBlIGV2ZXJ5dGhpbmcgZXhjZXB0
IGZvciBsb3cgQVNDSUkgY29kZSBwb2ludHMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMg
U3RyaW5nIGVzY2FwZVN0cmluZyhTdHJpbmcgc3RyKSB7Ci0gICAgICAgIGludCBzdHJMZW4gPSBz
dHIubGVuZ3RoKCk7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYiA9IG5ldyBTdHJpbmdCdWlsZGVy
KHN0ckxlbik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspIHsKLSAg
ICAgICAgICAgIGNoYXIgb3JpZ2luYWwgPSBzdHIuY2hhckF0KGkpOwotICAgICAgICAgICAgaWYg
KG9yaWdpbmFsID49ICcgJyAmJiBvcmlnaW5hbCA8PSAnficgJiYgb3JpZ2luYWwgIT0gJyInICYm
IG9yaWdpbmFsICE9ICdcJycpIHsKLSAgICAgICAgICAgICAgICBiLmFwcGVuZChvcmlnaW5hbCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGIuYXBwZW5kKFN0cmluZy5m
b3JtYXQoIlxcdSUwNHgiLCAoaW50KSBvcmlnaW5hbCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBiLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogQXBwZW5kcyBhIHF1b3RlZCBieXRlIGFycmF5IHRvIHRoZSBwcm92aWRlZCB7QGNvZGUgU3Ry
aW5nQnVmZmVyfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFwcGVuZFF1b3Rl
ZEJ5dGVzKGJ5dGVbXSBieXRlcywgU3RyaW5nQnVmZmVyIGJ1aWxkZXIpIHsKLSAgICAgICAgaWYg
KGJ5dGVzID09IG51bGwpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcIlwiIik7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBidWlsZGVyLmFwcGVuZCgn
IicpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICBpbnQgY2ggPSBieXRlc1tpXSAmIDB4ZmY7Ci0gICAgICAgICAgICBpZiAoY2gg
PT0gJ1xcJyB8fCBjaCA9PSAnIicpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
XFwnKS5hcHBlbmQoKGNoYXIpIGNoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gMzIg
JiYgY2ggPCAxMjcpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgoY2hhcikgY2gp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChT
dHJpbmcuZm9ybWF0KCJcXCUwM28iLCBjaCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFu
by9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby9Vbmtub3duRmllbGREYXRh
LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL1Vu
a25vd25GaWVsZERhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE2Nzhk
MWI5M2EwYjYzZDBlOWRmMzVhZGMwMzhjMjMzYzRmYzEwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9uYW5vL1Vua25vd25GaWVsZERhdGEuamF2YQorKysgL2Rldi9udWxsCkBAIC0x
LDg4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTMgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1wYWNrYWdl
IGNvbS5nb29nbGUucHJvdG9idWYubmFubzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247
Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotLyoqCi0gKiBTdG9yZXMgdW5rbm93biBmaWVs
ZHMuIFRoZXNlIG1pZ2h0IGJlIGV4dGVuc2lvbnMgb3IgZmllbGRzIHRoYXQgdGhlIGdlbmVyYXRl
ZAotICogQVBJIGRvZXNuJ3Qga25vdyBhYm91dCB5ZXQuCi0gKgotICogQGF1dGhvciBiZHVmZkBn
b29nbGUuY29tIChCcmlhbiBEdWZmKQotICovCi1maW5hbCBjbGFzcyBVbmtub3duRmllbGREYXRh
IHsKLQotICAgIGZpbmFsIGludCB0YWc7Ci0gICAgLyoqCi0gICAgICogSW1wb3J0YW50OiB0aGlz
IHNob3VsZCBiZSB0cmVhdGVkIGFzIGltbXV0YWJsZSwgZXZlbiB0aG91Z2ggaXQncyBwb3NzaWJs
ZQotICAgICAqIHRvIGNoYW5nZSB0aGUgYXJyYXkgdmFsdWVzLgotICAgICAqLwotICAgIGZpbmFs
IGJ5dGVbXSBieXRlczsKLQotICAgIFVua25vd25GaWVsZERhdGEoaW50IHRhZywgYnl0ZVtdIGJ5
dGVzKSB7Ci0gICAgICAgIHRoaXMudGFnID0gdGFnOwotICAgICAgICB0aGlzLmJ5dGVzID0gYnl0
ZXM7Ci0gICAgfQotCi0gICAgaW50IGNvbXB1dGVTZXJpYWxpemVkU2l6ZSgpIHsKLSAgICAgICAg
aW50IHNpemUgPSAwOwotICAgICAgICBzaXplICs9IENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8u
Y29tcHV0ZVJhd1ZhcmludDMyU2l6ZSh0YWcpOwotICAgICAgICBzaXplICs9IGJ5dGVzLmxlbmd0
aDsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgdm9pZCB3cml0ZVRvKENvZGVk
T3V0cHV0Qnl0ZUJ1ZmZlck5hbm8gb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAg
ICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMih0YWcpOwotICAgICAgICBvdXRwdXQud3JpdGVSYXdC
eXRlcyhieXRlcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4g
ZXF1YWxzKE9iamVjdCBvKSB7Ci0gICAgICAgIGlmIChvID09IHRoaXMpIHsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghKG8gaW5zdGFuY2VvZiBVbmtu
b3duRmllbGREYXRhKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgVW5rbm93bkZpZWxkRGF0YSBvdGhlciA9IChVbmtub3duRmllbGREYXRhKSBvOwot
ICAgICAgICByZXR1cm4gdGFnID09IG90aGVyLnRhZyAmJiBBcnJheXMuZXF1YWxzKGJ5dGVzLCBv
dGhlci5ieXRlcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBoYXNo
Q29kZSgpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IDE3OwotICAgICAgICByZXN1bHQgPSAzMSAq
IHJlc3VsdCArIHRhZzsKLSAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyBBcnJheXMuaGFz
aENvZGUoYnl0ZXMpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vV2lyZUZv
cm1hdE5hbm8uamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVm
L25hbm8vV2lyZUZvcm1hdE5hbm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YmJiNjM3MGEzZTYwNTdjZjQzMDM3YTAxZDc2ZWViODY0YjVmOGQwMi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy9tYWluL2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9uYW5vL1dpcmVGb3JtYXROYW5vLmphdmEKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBh
Y2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2Vw
dGlvbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgUHJv
dG9jb2wgQnVmZmVyIGxpYnJhcnkgYW5kIGdlbmVyYXRlZAotICogbWVzc2FnZSBpbXBsZW1lbnRh
dGlvbnMuICBJdCBpcyBwdWJsaWMgb25seSBiZWNhdXNlIHRob3NlIGdlbmVyYXRlZCBtZXNzYWdl
cwotICogZG8gbm90IHJlc2lkZSBpbiB0aGUge0Bjb2RlIHByb3RvYnVmfSBwYWNrYWdlLiAgT3Ro
ZXJzIHNob3VsZCBub3QgdXNlIHRoaXMKLSAqIGNsYXNzIGRpcmVjdGx5LgotICoKLSAqIFRoaXMg
Y2xhc3MgY29udGFpbnMgY29uc3RhbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHVzZWZ1bCBmb3Ig
ZGVhbGluZyB3aXRoCi0gKiB0aGUgUHJvdG9jb2wgQnVmZmVyIHdpcmUgZm9ybWF0LgotICoKLSAq
IEBhdXRob3Iga2VudG9uQGdvb2dsZS5jb20gS2VudG9uIFZhcmRhCi0gKi8KLXB1YmxpYyBmaW5h
bCBjbGFzcyBXaXJlRm9ybWF0TmFubyB7Ci0gIC8vIERvIG5vdCBhbGxvdyBpbnN0YW50aWF0aW9u
LgotICBwcml2YXRlIFdpcmVGb3JtYXROYW5vKCkge30KLQotICBzdGF0aWMgZmluYWwgaW50IFdJ
UkVUWVBFX1ZBUklOVCAgICAgICAgICAgPSAwOwotICBzdGF0aWMgZmluYWwgaW50IFdJUkVUWVBF
X0ZJWEVENjQgICAgICAgICAgPSAxOwotICBzdGF0aWMgZmluYWwgaW50IFdJUkVUWVBFX0xFTkdU
SF9ERUxJTUlURUQgPSAyOwotICBzdGF0aWMgZmluYWwgaW50IFdJUkVUWVBFX1NUQVJUX0dST1VQ
ICAgICAgPSAzOwotICBzdGF0aWMgZmluYWwgaW50IFdJUkVUWVBFX0VORF9HUk9VUCAgICAgICAg
PSA0OwotICBzdGF0aWMgZmluYWwgaW50IFdJUkVUWVBFX0ZJWEVEMzIgICAgICAgICAgPSA1Owot
Ci0gIHN0YXRpYyBmaW5hbCBpbnQgVEFHX1RZUEVfQklUUyA9IDM7Ci0gIHN0YXRpYyBmaW5hbCBp
bnQgVEFHX1RZUEVfTUFTSyA9ICgxIDw8IFRBR19UWVBFX0JJVFMpIC0gMTsKLQotICAvKiogR2l2
ZW4gYSB0YWcgdmFsdWUsIGRldGVybWluZXMgdGhlIHdpcmUgdHlwZSAodGhlIGxvd2VyIDMgYml0
cykuICovCi0gIHN0YXRpYyBpbnQgZ2V0VGFnV2lyZVR5cGUoZmluYWwgaW50IHRhZykgewotICAg
IHJldHVybiB0YWcgJiBUQUdfVFlQRV9NQVNLOwotICB9Ci0KLSAgLyoqIEdpdmVuIGEgdGFnIHZh
bHVlLCBkZXRlcm1pbmVzIHRoZSBmaWVsZCBudW1iZXIgKHRoZSB1cHBlciAyOSBiaXRzKS4gKi8K
LSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0VGFnRmllbGROdW1iZXIoZmluYWwgaW50IHRhZykgewot
ICAgIHJldHVybiB0YWcgPj4+IFRBR19UWVBFX0JJVFM7Ci0gIH0KLQotICAvKiogTWFrZXMgYSB0
YWcgdmFsdWUgZ2l2ZW4gYSBmaWVsZCBudW1iZXIgYW5kIHdpcmUgdHlwZS4gKi8KLSAgc3RhdGlj
IGludCBtYWtlVGFnKGZpbmFsIGludCBmaWVsZE51bWJlciwgZmluYWwgaW50IHdpcmVUeXBlKSB7
Ci0gICAgcmV0dXJuIChmaWVsZE51bWJlciA8PCBUQUdfVFlQRV9CSVRTKSB8IHdpcmVUeXBlOwot
ICB9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU1QVFlfSU5UX0FSUkFZW10gPSB7fTsK
LSAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEVNUFRZX0xPTkdfQVJSQVlbXSA9IHt9OwotICBw
dWJsaWMgc3RhdGljIGZpbmFsIGZsb2F0IEVNUFRZX0ZMT0FUX0FSUkFZW10gPSB7fTsKLSAgcHVi
bGljIHN0YXRpYyBmaW5hbCBkb3VibGUgRU1QVFlfRE9VQkxFX0FSUkFZW10gPSB7fTsKLSAgcHVi
bGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEVNUFRZX0JPT0xFQU5fQVJSQVlbXSA9IHt9OwotICBw
dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkdfQVJSQVlbXSA9IHt9OwotICBw
dWJsaWMgc3RhdGljIGZpbmFsIGJ5dGVbXSBFTVBUWV9CWVRFU19BUlJBWVtdID0ge307Ci0gIHB1
YmxpYyBzdGF0aWMgZmluYWwgYnl0ZVtdIEVNUFRZX0JZVEVTID0ge307Ci0KLSAgLyoqCi0gICAq
IFBhcnNlcyBhbiB1bmtub3duIGZpZWxkLiBUaGlzIGltcGxlbWVudGF0aW9uIHNraXBzIHRoZSBm
aWVsZC4KLSAgICoKLSAgICogPHA+R2VuZXJhdGVkIG1lc3NhZ2VzIHdpbGwgY2FsbCB0aGlzIGZv
ciB1bmtub3duIGZpZWxkcyBpZiB0aGUgc3RvcmVfdW5rbm93bl9maWVsZHMKLSAgICogb3B0aW9u
IGlzIG9mZi4KLSAgICoKLSAgICogQHJldHVybiB7QGxpdGVyYWwgdHJ1ZX0gdW5sZXNzIHRoZSB0
YWcgaXMgYW4gZW5kLWdyb3VwIHRhZy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBw
YXJzZVVua25vd25GaWVsZCgKLSAgICAgIGZpbmFsIENvZGVkSW5wdXRCeXRlQnVmZmVyTmFubyBp
bnB1dCwKLSAgICAgIGZpbmFsIGludCB0YWcpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgcmV0
dXJuIGlucHV0LnNraXBGaWVsZCh0YWcpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbXB1dGVzIHRo
ZSBhcnJheSBsZW5ndGggb2YgYSByZXBlYXRlZCBmaWVsZC4gV2UgYXNzdW1lIHRoYXQgaW4gdGhl
IGNvbW1vbiBjYXNlIHJlcGVhdGVkCi0gICAqIGZpZWxkcyBhcmUgY29udGlndW91c2x5IHNlcmlh
bGl6ZWQgYnV0IHdlIHN0aWxsIGNvcnJlY3RseSBoYW5kbGUgaW50ZXJzcGVyc2VkIHZhbHVlcyBv
ZiBhCi0gICAqIHJlcGVhdGVkIGZpZWxkIChidXQgd2l0aCBleHRyYSBhbGxvY2F0aW9ucykuCi0g
ICAqCi0gICAqIFJld2luZHMgdG8gY3VycmVudCBpbnB1dCBwb3NpdGlvbiBiZWZvcmUgcmV0dXJu
aW5nLgotICAgKgotICAgKiBAcGFyYW0gaW5wdXQgc3RyZWFtIGlucHV0LCBwb2ludGluZyB0byB0
aGUgYnl0ZSBhZnRlciB0aGUgZmlyc3QgdGFnCi0gICAqIEBwYXJhbSB0YWcgcmVwZWF0ZWQgZmll
bGQgdGFnIGp1c3QgcmVhZAotICAgKiBAcmV0dXJuIGxlbmd0aCBvZiBhcnJheQotICAgKiBAdGhy
b3dzIElPRXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBnZXRSZXBl
YXRlZEZpZWxkQXJyYXlMZW5ndGgoCi0gICAgICBmaW5hbCBDb2RlZElucHV0Qnl0ZUJ1ZmZlck5h
bm8gaW5wdXQsCi0gICAgICBmaW5hbCBpbnQgdGFnKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAg
IGludCBhcnJheUxlbmd0aCA9IDE7Ci0gICAgaW50IHN0YXJ0UG9zID0gaW5wdXQuZ2V0UG9zaXRp
b24oKTsKLSAgICBpbnB1dC5za2lwRmllbGQodGFnKTsKLSAgICB3aGlsZSAoaW5wdXQucmVhZFRh
ZygpID09IHRhZykgewotICAgICAgaW5wdXQuc2tpcEZpZWxkKHRhZyk7Ci0gICAgICBhcnJheUxl
bmd0aCsrOwotICAgIH0KLSAgICBpbnB1dC5yZXdpbmRUb1Bvc2l0aW9uKHN0YXJ0UG9zKTsKLSAg
ICByZXR1cm4gYXJyYXlMZW5ndGg7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMv
dGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby9OYW5vVGVzdC5qYXZhIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFu
by9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby9OYW5vVGVzdC5qYXZhCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWJmN2MwYWM5ZmVlNThiN2UwNmQ1MGFlNDlk
ZjhlOGU3NGM4NTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vTmFub1Rl
c3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0NjggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAx
MyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vOwot
Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLk1hcFRlc3RQcm90by5UZXN0TWFwOwot
aW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYubmFuby5Db2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5v
OwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYubmFuby5NYXBUZXN0UHJvdG8uVGVzdE1hcC5N
ZXNzYWdlVmFsdWU7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLk5hbm9BY2Nlc3Nv
cnNPdXRlckNsYXNzLlRlc3ROYW5vQWNjZXNzb3JzOwotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9i
dWYubmFuby5OYW5vSGFzT3V0ZXJDbGFzcy5UZXN0QWxsVHlwZXNOYW5vSGFzOwotaW1wb3J0IGNv
bS5nb29nbGUucHJvdG9idWYubmFuby5OYW5vT3V0ZXJDbGFzcy5UZXN0QWxsVHlwZXNOYW5vOwot
aW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYubmFuby5Vbml0dGVzdFJlY3Vyc2l2ZU5hbm8uUmVj
dXJzaXZlTWVzc2FnZU5hbm87Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLk5hbm9S
ZWZlcmVuY2VUeXBlc0NvbXBhdDsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uVW5p
dHRlc3RTaW1wbGVOYW5vLlNpbXBsZU1lc3NhZ2VOYW5vOwotaW1wb3J0IGNvbS5nb29nbGUucHJv
dG9idWYubmFuby5Vbml0dGVzdFNpbmdsZU5hbm8uU2luZ2xlTWVzc2FnZU5hbm87Ci1pbXBvcnQg
Y29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLnRlc3RleHQubmFuby5FeHRlbnNpb25zOwotaW1wb3J0
IGNvbS5nb29nbGUucHJvdG9idWYubmFuby50ZXN0ZXh0Lm5hbm8uRXh0ZW5zaW9ucy5Bbm90aGVy
TWVzc2FnZTsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8udGVzdGV4dC5uYW5vLkV4
dGVuc2lvbnMuTWVzc2FnZVdpdGhHcm91cDsKLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLm5h
bm8udGVzdGltcG9ydC5uYW5vLlVuaXR0ZXN0SW1wb3J0TmFubzsKLQotaW1wb3J0IGp1bml0LmZy
YW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2
YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwu
VHJlZU1hcDsKLQotLyoqCi0gKiBUZXN0IG5hbm8gcnVudGltZS4KLSAqCi0gKiBAYXV0aG9yIHVs
YXNAZ29vZ2xlLmNvbSBVbGFzIEtpcmF6Y2kKLSAqLwotcHVibGljIGNsYXNzIE5hbm9UZXN0IGV4
dGVuZHMgVGVzdENhc2UgewotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGVNZXNzYWdlTmFu
bygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFNpbXBsZU1lc3NhZ2VOYW5vIG1zZyA9IG5ldyBT
aW1wbGVNZXNzYWdlTmFubygpOwotICAgIGFzc2VydEVxdWFscygxMjMsIG1zZy5kKTsKLSAgICBh
c3NlcnRFcXVhbHMobnVsbCwgbXNnLm5lc3RlZE1zZyk7Ci0gICAgYXNzZXJ0RXF1YWxzKFNpbXBs
ZU1lc3NhZ2VOYW5vLkJBWiwgbXNnLmRlZmF1bHROZXN0ZWRFbnVtKTsKLQotICAgIG1zZy5kID0g
NDU2OwotICAgIGFzc2VydEVxdWFscyg0NTYsIG1zZy5kKTsKLQotICAgIFNpbXBsZU1lc3NhZ2VO
YW5vLk5lc3RlZE1lc3NhZ2UgbmVzdGVkTXNnID0gbmV3IFNpbXBsZU1lc3NhZ2VOYW5vLk5lc3Rl
ZE1lc3NhZ2UoKTsKLSAgICBuZXN0ZWRNc2cuYmIgPSAyOwotICAgIGFzc2VydEVxdWFscygyLCBu
ZXN0ZWRNc2cuYmIpOwotICAgIG1zZy5uZXN0ZWRNc2cgPSBuZXN0ZWRNc2c7Ci0gICAgYXNzZXJ0
RXF1YWxzKDIsIG1zZy5uZXN0ZWRNc2cuYmIpOwotCi0gICAgbXNnLmRlZmF1bHROZXN0ZWRFbnVt
ID0gU2ltcGxlTWVzc2FnZU5hbm8uQkFSOwotICAgIGFzc2VydEVxdWFscyhTaW1wbGVNZXNzYWdl
TmFuby5CQVIsIG1zZy5kZWZhdWx0TmVzdGVkRW51bSk7Ci0KLSAgICBieXRlIFtdIHJlc3VsdCA9
IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXpl
ID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNz
PSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3Ro
KTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDkpOwotICAgIGFzc2VydEVx
dWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBTaW1wbGVNZXNz
YWdlTmFubyBuZXdNc2cgPSBTaW1wbGVNZXNzYWdlTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAg
ICBhc3NlcnRFcXVhbHMoNDU2LCBuZXdNc2cuZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1zZy5u
ZXN0ZWRNc2cuYmIpOwotICAgIGFzc2VydEVxdWFscyhTaW1wbGVNZXNzYWdlTmFuby5CQVIsIG1z
Zy5kZWZhdWx0TmVzdGVkRW51bSk7Ci0KLSAgICBtc2cubmVzdGVkTXNnID0gbnVsbDsKLSAgICBh
c3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplICE9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpKTsK
LQotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cuZ2V0U2VyaWFsaXpl
ZFNpemUoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVjdXJzaXZlTWVzc2FnZU5hbm8o
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZWN1cnNpdmVNZXNzYWdlTmFubyBtc2cgPSBuZXcg
UmVjdXJzaXZlTWVzc2FnZU5hbm8oKTsKLSAgICBhc3NlcnRUcnVlKG1zZy5yZXBlYXRlZFJlY3Vy
c2l2ZU1lc3NhZ2VOYW5vLmxlbmd0aCA9PSAwKTsKLQotICAgIFJlY3Vyc2l2ZU1lc3NhZ2VOYW5v
IG1zZzEgPSBuZXcgUmVjdXJzaXZlTWVzc2FnZU5hbm8oKTsKLSAgICBtc2cxLmlkID0gMTsKLSAg
ICBhc3NlcnRFcXVhbHMoMSwgbXNnMS5pZCk7Ci0gICAgUmVjdXJzaXZlTWVzc2FnZU5hbm8gbXNn
MiA9IG5ldyBSZWN1cnNpdmVNZXNzYWdlTmFubygpOwotICAgIG1zZzIuaWQgPSAyOwotICAgIFJl
Y3Vyc2l2ZU1lc3NhZ2VOYW5vIG1zZzMgPSBuZXcgUmVjdXJzaXZlTWVzc2FnZU5hbm8oKTsKLSAg
ICBtc2czLmlkID0gMzsKLQotICAgIFJlY3Vyc2l2ZU1lc3NhZ2VOYW5vLk5lc3RlZE1lc3NhZ2Ug
bmVzdGVkTXNnID0gbmV3IFJlY3Vyc2l2ZU1lc3NhZ2VOYW5vLk5lc3RlZE1lc3NhZ2UoKTsKLSAg
ICBuZXN0ZWRNc2cuYSA9IG1zZzE7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG5lc3RlZE1zZy5hLmlk
KTsKLQotICAgIG1zZy5pZCA9IDA7Ci0gICAgbXNnLm5lc3RlZE1lc3NhZ2UgPSBuZXN0ZWRNc2c7
Ci0gICAgbXNnLm9wdGlvbmFsUmVjdXJzaXZlTWVzc2FnZU5hbm8gPSBtc2cyOwotICAgIG1zZy5y
ZXBlYXRlZFJlY3Vyc2l2ZU1lc3NhZ2VOYW5vID0gbmV3IFJlY3Vyc2l2ZU1lc3NhZ2VOYW5vW10g
eyBtc2czIH07Ci0KLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5
KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXpl
KCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIs
IG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1Nl
cmlhbGl6ZWRTaXplID09IDE2KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNn
U2VyaWFsaXplZFNpemUpOwotCi0gICAgUmVjdXJzaXZlTWVzc2FnZU5hbm8gbmV3TXNnID0gUmVj
dXJzaXZlTWVzc2FnZU5hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEs
IG5ld01zZy5yZXBlYXRlZFJlY3Vyc2l2ZU1lc3NhZ2VOYW5vLmxlbmd0aCk7Ci0KLSAgICBhc3Nl
cnRFcXVhbHMoMCwgbmV3TXNnLmlkKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLm5lc3Rl
ZE1lc3NhZ2UuYS5pZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG5ld01zZy5vcHRpb25hbFJlY3Vy
c2l2ZU1lc3NhZ2VOYW5vLmlkKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgbmV3TXNnLnJlcGVhdGVk
UmVjdXJzaXZlTWVzc2FnZU5hbm9bMF0uaWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE1l
c3NhZ2VOb0ZpZWxkcygpIHsKLSAgICBTaW5nbGVNZXNzYWdlTmFubyBtc2cgPSBuZXcgU2luZ2xl
TWVzc2FnZU5hbm8oKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLmdldFNlcmlhbGl6ZWRTaXpl
KCkpOwotICAgIGFzc2VydEVxdWFscygwLCBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpLmxl
bmd0aCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub1JlcXVpcmVkSW50MzIoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlw
ZXNOYW5vKCk7Ci0gICAgbXNnLmlkID0gMTIzOwotICAgIGFzc2VydEVxdWFscygxMjMsIG1zZy5p
ZCk7Ci0gICAgbXNnLmNsZWFyKCkuaWQgPSA0NTY7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNn
LmlkKTsKLSAgICBtc2cuY2xlYXIoKTsKLQotICAgIG1zZy5pZCA9IDEyMzsKLSAgICBieXRlIFtd
IHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1Nlcmlh
bGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnBy
aW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1
bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDMpOwotICAg
IGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBU
ZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3Vs
dCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3TXNnLmlkKTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHRlc3ROYW5vT3B0aW9uYWxJbnQzMigpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RB
bGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBtc2cub3B0aW9u
YWxJbnQzMiA9IDEyMzsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBtc2cub3B0aW9uYWxJbnQzMik7
Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAub3B0aW9uYWxJbnQzMiA9IDQ1NjsKLSAgICBhc3Nl
cnRFcXVhbHMoNDU2LCBtc2cub3B0aW9uYWxJbnQzMik7Ci0gICAgbXNnLmNsZWFyKCk7Ci0KLSAg
ICBtc2cub3B0aW9uYWxJbnQzMiA9IDEyMzsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VO
YW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdl
dFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3Vs
dC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBh
c3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDUpOwotICAgIGFzc2VydEVxdWFscyhyZXN1
bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5l
d01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDEyMywgbmV3TXNnLm9wdGlvbmFsSW50MzIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVz
dE5hbm9PcHRpb25hbEludDY0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVz
TmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIG1zZy5vcHRpb25hbEludDY0
ID0gMTIzOwotICAgIGFzc2VydEVxdWFscygxMjMsIG1zZy5vcHRpb25hbEludDY0KTsKLSAgICBt
c2cuY2xlYXIoKQotICAgICAgIC5vcHRpb25hbEludDY0ID0gNDU2OwotICAgIGFzc2VydEVxdWFs
cyg0NTYsIG1zZy5vcHRpb25hbEludDY0KTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRF
cXVhbHMoMCwgbXNnLm9wdGlvbmFsSW50NjQpOwotCi0gICAgbXNnLm9wdGlvbmFsSW50NjQgPSAx
MjM7Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwot
ICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAg
IC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJp
YWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVk
U2l6ZSA9PSA1KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXpl
ZFNpemUpOwotCi0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5v
LnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygxMjMsIG5ld01zZy5vcHRpb25h
bEludDY0KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vT3B0aW9uYWxVaW50MzIoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxs
VHlwZXNOYW5vKCk7Ci0gICAgbXNnLm9wdGlvbmFsVWludDMyID0gMTIzOwotICAgIGFzc2VydEVx
dWFscygxMjMsIG1zZy5vcHRpb25hbFVpbnQzMik7Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAu
b3B0aW9uYWxVaW50MzIgPSA0NTY7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNnLm9wdGlvbmFs
VWludDMyKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLm9wdGlv
bmFsVWludDMyKTsKLQotICAgIG1zZy5vcHRpb25hbFVpbnQzMiA9IDEyMzsKLSAgICBieXRlIFtd
IHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1Nlcmlh
bGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnBy
aW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1
bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDUpOwotICAg
IGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBU
ZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3Vs
dCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3TXNnLm9wdGlvbmFsVWludDMyKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vT3B0aW9uYWxVaW50NjQoKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0g
ICAgbXNnLm9wdGlvbmFsVWludDY0ID0gMTIzOwotICAgIGFzc2VydEVxdWFscygxMjMsIG1zZy5v
cHRpb25hbFVpbnQ2NCk7Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAub3B0aW9uYWxVaW50NjQg
PSA0NTY7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNnLm9wdGlvbmFsVWludDY0KTsKLSAgICBt
c2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLm9wdGlvbmFsVWludDY0KTsKLQot
ICAgIG1zZy5vcHRpb25hbFVpbnQ2NCA9IDEyMzsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3Nh
Z2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNn
LmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJl
c3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAg
ICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDUpOwotICAgIGFzc2VydEVxdWFscyhy
ZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5v
IG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDEyMywgbmV3TXNnLm9wdGlvbmFsVWludDY0KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3ROYW5vT3B0aW9uYWxTaW50MzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxs
VHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgbXNnLm9wdGlvbmFs
U2ludDMyID0gMTIzOwotICAgIGFzc2VydEVxdWFscygxMjMsIG1zZy5vcHRpb25hbFNpbnQzMik7
Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAub3B0aW9uYWxTaW50MzIgPSA0NTY7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDQ1NiwgbXNnLm9wdGlvbmFsU2ludDMyKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMCwgbXNnLm9wdGlvbmFsU2ludDMyKTsKLQotICAgIG1zZy5vcHRpb25h
bFNpbnQzMiA9IC0xMjM7Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVB
cnJheShtc2cpOwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVk
U2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVk
XG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZSht
c2dTZXJpYWxpemVkU2l6ZSA9PSA2KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwg
bXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0
QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygtMTIzLCBu
ZXdNc2cub3B0aW9uYWxTaW50MzIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9PcHRp
b25hbFNpbnQ2NCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNn
ID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBtc2cub3B0aW9uYWxTaW50NjQgPSAxMjM7
Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbXNnLm9wdGlvbmFsU2ludDY0KTsKLSAgICBtc2cuY2xl
YXIoKQotICAgICAgIC5vcHRpb25hbFNpbnQ2NCA9IDQ1NjsKLSAgICBhc3NlcnRFcXVhbHMoNDU2
LCBtc2cub3B0aW9uYWxTaW50NjQpOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFs
cygwLCBtc2cub3B0aW9uYWxTaW50NjQpOwotCi0gICAgbXNnLm9wdGlvbmFsU2ludDY0ID0gLTEy
MzsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0g
ICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAg
Ly9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1Nlcmlh
bGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRT
aXplID09IDYpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVk
U2l6ZSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8u
cGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKC0xMjMsIG5ld01zZy5vcHRpb25h
bFNpbnQ2NCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub09wdGlvbmFsRml4ZWQzMigp
IHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RB
bGxUeXBlc05hbm8oKTsKLSAgICBtc2cub3B0aW9uYWxGaXhlZDMyID0gMTIzOwotICAgIGFzc2Vy
dEVxdWFscygxMjMsIG1zZy5vcHRpb25hbEZpeGVkMzIpOwotICAgIG1zZy5jbGVhcigpCi0gICAg
ICAgLm9wdGlvbmFsRml4ZWQzMiA9IDQ1NjsKLSAgICBhc3NlcnRFcXVhbHMoNDU2LCBtc2cub3B0
aW9uYWxGaXhlZDMyKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNn
Lm9wdGlvbmFsRml4ZWQzMik7Ci0KLSAgICBtc2cub3B0aW9uYWxGaXhlZDMyID0gMTIzOwotICAg
IGJ5dGUgW10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQg
bXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3Rl
bS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNp
emUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0g
OCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsK
LQotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZy
b20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBuZXdNc2cub3B0aW9uYWxGaXhlZDMy
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vT3B0aW9uYWxGaXhlZDY0KCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVz
TmFubygpOwotICAgIG1zZy5vcHRpb25hbEZpeGVkNjQgPSAxMjM7Ci0gICAgYXNzZXJ0RXF1YWxz
KDEyMywgbXNnLm9wdGlvbmFsRml4ZWQ2NCk7Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAub3B0
aW9uYWxGaXhlZDY0ID0gNDU2OwotICAgIGFzc2VydEVxdWFscyg0NTYsIG1zZy5vcHRpb25hbEZp
eGVkNjQpOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cub3B0aW9u
YWxGaXhlZDY0KTsKLQotICAgIG1zZy5vcHRpb25hbEZpeGVkNjQgPSAxMjM7Ci0gICAgYnl0ZSBb
XSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dTZXJp
YWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5w
cmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVz
dWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSAxMik7Ci0g
ICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAg
IFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVz
dWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBuZXdNc2cub3B0aW9uYWxGaXhlZDY0KTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vT3B0aW9uYWxTZml4ZWQzMigpIHRocm93cyBFeGNl
cHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm8o
KTsKLSAgICBtc2cub3B0aW9uYWxTZml4ZWQzMiA9IDEyMzsKLSAgICBhc3NlcnRFcXVhbHMoMTIz
LCBtc2cub3B0aW9uYWxTZml4ZWQzMik7Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAub3B0aW9u
YWxTZml4ZWQzMiA9IDQ1NjsKLSAgICBhc3NlcnRFcXVhbHMoNDU2LCBtc2cub3B0aW9uYWxTZml4
ZWQzMik7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5vcHRpb25h
bFNmaXhlZDMyKTsKLQotICAgIG1zZy5vcHRpb25hbFNmaXhlZDMyID0gMTIzOwotICAgIGJ5dGUg
W10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNnU2Vy
aWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQu
cHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJl
c3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gOCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAg
IFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVz
dWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBuZXdNc2cub3B0aW9uYWxTZml4ZWQzMik7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub09wdGlvbmFsU2ZpeGVkNjQoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5v
KCk7Ci0gICAgbXNnLm9wdGlvbmFsU2ZpeGVkNjQgPSAxMjM7Ci0gICAgYXNzZXJ0RXF1YWxzKDEy
MywgbXNnLm9wdGlvbmFsU2ZpeGVkNjQpOwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLm9wdGlv
bmFsU2ZpeGVkNjQgPSA0NTY7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNnLm9wdGlvbmFsU2Zp
eGVkNjQpOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cub3B0aW9u
YWxTZml4ZWQ2NCk7Ci0KLSAgICBtc2cub3B0aW9uYWxTZml4ZWQ2NCA9IC0xMjM7Ci0gICAgYnl0
ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dT
ZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91
dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwg
cmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSAxMik7
Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQot
ICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20o
cmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoLTEyMywgbmV3TXNnLm9wdGlvbmFsU2ZpeGVkNjQp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9PcHRpb25hbEZsb2F0KCkgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFu
bygpOwotICAgIG1zZy5vcHRpb25hbEZsb2F0ID0gMTIzZjsKLSAgICBhc3NlcnRUcnVlKDEyMy4w
ZiA9PSBtc2cub3B0aW9uYWxGbG9hdCk7Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAub3B0aW9u
YWxGbG9hdCA9IDQ1Ni4wZjsKLSAgICBhc3NlcnRUcnVlKDQ1Ni4wZiA9PSBtc2cub3B0aW9uYWxG
bG9hdCk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0VHJ1ZSgwLjBmID09IG1zZy5vcHRp
b25hbEZsb2F0KTsKLQotICAgIG1zZy5vcHRpb25hbEZsb2F0ID0gLTEyMy40NTZmOwotICAgIGJ5
dGUgW10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNn
U2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5v
dXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUs
IHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gOCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQot
ICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20o
cmVzdWx0KTsKLSAgICBhc3NlcnRUcnVlKC0xMjMuNDU2ZiA9PSBuZXdNc2cub3B0aW9uYWxGbG9h
dCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub09wdGlvbmFsRG91YmxlKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVz
TmFubygpOwotICAgIG1zZy5vcHRpb25hbERvdWJsZSA9IDEyMzsKLSAgICBhc3NlcnRUcnVlKDEy
My4wID09IG1zZy5vcHRpb25hbERvdWJsZSk7Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAub3B0
aW9uYWxEb3VibGUgPSA0NTYuMDsKLSAgICBhc3NlcnRUcnVlKDQ1Ni4wID09IG1zZy5vcHRpb25h
bERvdWJsZSk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0VHJ1ZSgwLjAgPT0gbXNnLm9w
dGlvbmFsRG91YmxlKTsKLQotICAgIG1zZy5vcHRpb25hbERvdWJsZSA9IC0xMjMuNDU2OwotICAg
IGJ5dGUgW10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQg
bXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3Rl
bS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNp
emUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0g
MTIpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7
Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VG
cm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0VHJ1ZSgtMTIzLjQ1NiA9PSBuZXdNc2cub3B0aW9uYWxE
b3VibGUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9PcHRpb25hbEJvb2woKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlw
ZXNOYW5vKCk7Ci0gICAgbXNnLm9wdGlvbmFsQm9vbCA9IHRydWU7Ci0gICAgYXNzZXJ0VHJ1ZSht
c2cub3B0aW9uYWxCb29sKTsKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5vcHRpb25hbEJvb2wg
PSB0cnVlOwotICAgIGFzc2VydFRydWUobXNnLm9wdGlvbmFsQm9vbCk7Ci0gICAgbXNnLmNsZWFy
KCk7Ci0gICAgYXNzZXJ0RmFsc2UobXNnLm9wdGlvbmFsQm9vbCk7Ci0KLSAgICBtc2cub3B0aW9u
YWxCb29sID0gdHJ1ZTsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFy
cmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRT
aXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRc
biIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1z
Z1NlcmlhbGl6ZWRTaXplID09IDUpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBt
c2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRlc3RB
bGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cub3B0
aW9uYWxCb29sKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vT3B0aW9uYWxTdHJpbmco
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0
QWxsVHlwZXNOYW5vKCk7Ci0gICAgbXNnLm9wdGlvbmFsU3RyaW5nID0gImhlbGxvIjsKLSAgICBh
c3NlcnRFcXVhbHMoImhlbGxvIiwgbXNnLm9wdGlvbmFsU3RyaW5nKTsKLSAgICBtc2cuY2xlYXIo
KTsKLSAgICBhc3NlcnRUcnVlKG1zZy5vcHRpb25hbFN0cmluZy5pc0VtcHR5KCkpOwotICAgIG1z
Zy5jbGVhcigpCi0gICAgICAgLm9wdGlvbmFsU3RyaW5nID0gImhlbGxvMiI7Ci0gICAgYXNzZXJ0
RXF1YWxzKCJoZWxsbzIiLCBtc2cub3B0aW9uYWxTdHJpbmcpOwotICAgIG1zZy5jbGVhcigpOwot
ICAgIGFzc2VydFRydWUobXNnLm9wdGlvbmFsU3RyaW5nLmlzRW1wdHkoKSk7Ci0KLSAgICBtc2cu
b3B0aW9uYWxTdHJpbmcgPSAiYnllIjsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5v
LnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNl
cmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5s
ZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3Nl
cnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDgpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQu
bGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5ld01z
ZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0VHJ1ZShu
ZXdNc2cub3B0aW9uYWxTdHJpbmcgIT0gbnVsbCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJieWUiLCBu
ZXdNc2cub3B0aW9uYWxTdHJpbmcpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9PcHRp
b25hbEJ5dGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cg
PSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIGFzc2VydEZhbHNlKG1zZy5vcHRpb25hbEJ5
dGVzLmxlbmd0aCA+IDApOwotICAgIG1zZy5vcHRpb25hbEJ5dGVzID0gSW50ZXJuYWxOYW5vLmNv
cHlGcm9tVXRmOCgiaGVsbG8iKTsKLSAgICBhc3NlcnRUcnVlKG1zZy5vcHRpb25hbEJ5dGVzLmxl
bmd0aCA+IDApOwotICAgIGFzc2VydEVxdWFscygiaGVsbG8iLCBuZXcgU3RyaW5nKG1zZy5vcHRp
b25hbEJ5dGVzLCBJbnRlcm5hbE5hbm8uVVRGXzgpKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBh
c3NlcnRGYWxzZShtc2cub3B0aW9uYWxCeXRlcy5sZW5ndGggPiAwKTsKLSAgICBtc2cuY2xlYXIo
KQotICAgICAgIC5vcHRpb25hbEJ5dGVzID0gSW50ZXJuYWxOYW5vLmNvcHlGcm9tVXRmOCgiaGVs
bG8iKTsKLSAgICBhc3NlcnRUcnVlKG1zZy5vcHRpb25hbEJ5dGVzLmxlbmd0aCA+IDApOwotICAg
IG1zZy5jbGVhcigpOwotICAgIGFzc2VydEZhbHNlKG1zZy5vcHRpb25hbEJ5dGVzLmxlbmd0aCA+
IDApOwotCi0gICAgbXNnLm9wdGlvbmFsQnl0ZXMgPSBJbnRlcm5hbE5hbm8uY29weUZyb21VdGY4
KCJieWUiKTsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1z
Zyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7
Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1z
Z1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1Nlcmlh
bGl6ZWRTaXplID09IDgpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJp
YWxpemVkU2l6ZSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRlc3RBbGxUeXBl
c05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cub3B0aW9uYWxC
eXRlcy5sZW5ndGggPiAwKTsKLSAgICBhc3NlcnRFcXVhbHMoImJ5ZSIsIG5ldyBTdHJpbmcobmV3
TXNnLm9wdGlvbmFsQnl0ZXMsIEludGVybmFsTmFuby5VVEZfOCkpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgdGVzdE5hbm9PcHRpb25hbEdyb3VwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVz
dEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIFRlc3RBbGxU
eXBlc05hbm8uT3B0aW9uYWxHcm91cCBncnAgPSBuZXcgVGVzdEFsbFR5cGVzTmFuby5PcHRpb25h
bEdyb3VwKCk7Ci0gICAgZ3JwLmEgPSAxOwotICAgIGFzc2VydEZhbHNlKG1zZy5vcHRpb25hbEdy
b3VwICE9IG51bGwpOwotICAgIG1zZy5vcHRpb25hbEdyb3VwID0gZ3JwOwotICAgIGFzc2VydFRy
dWUobXNnLm9wdGlvbmFsR3JvdXAgIT0gbnVsbCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5v
cHRpb25hbEdyb3VwLmEpOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEZhbHNlKG1zZy5v
cHRpb25hbEdyb3VwICE9IG51bGwpOwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLm9wdGlvbmFs
R3JvdXAgPSBuZXcgVGVzdEFsbFR5cGVzTmFuby5PcHRpb25hbEdyb3VwKCk7Ci0gICAgbXNnLm9w
dGlvbmFsR3JvdXAuYSA9IDI7Ci0gICAgYXNzZXJ0VHJ1ZShtc2cub3B0aW9uYWxHcm91cCAhPSBu
dWxsKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRGYWxzZShtc2cub3B0aW9uYWxHcm91
cCAhPSBudWxsKTsKLQotICAgIG1zZy5vcHRpb25hbEdyb3VwID0gZ3JwOwotICAgIGJ5dGUgW10g
cmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNnU2VyaWFs
aXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJp
bnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3Vs
dC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gMTApOwotICAg
IGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBU
ZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3Vs
dCk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cub3B0aW9uYWxHcm91cCAhPSBudWxsKTsKLSAgICBh
c3NlcnRFcXVhbHMoMSwgbmV3TXNnLm9wdGlvbmFsR3JvdXAuYSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0TmFub09wdGlvbmFsR3JvdXBXaXRoVW5rbm93bkZpZWxkc0VuYWJsZWQoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBNZXNzYWdlV2l0aEdyb3VwIG1zZyA9IG5ldyBNZXNzYWdlV2l0
aEdyb3VwKCk7Ci0gICAgTWVzc2FnZVdpdGhHcm91cC5Hcm91cCBncnAgPSBuZXcgTWVzc2FnZVdp
dGhHcm91cC5Hcm91cCgpOwotICAgIGdycC5hID0gMTsKLSAgICBtc2cuZ3JvdXAgPSBncnA7Ci0g
ICAgYnl0ZSBbXSBzZXJpYWxpemVkID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLQot
ICAgIE1lc3NhZ2VXaXRoR3JvdXAgcGFyc2VkID0gTWVzc2FnZVdpdGhHcm91cC5wYXJzZUZyb20o
c2VyaWFsaXplZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHBhcnNlZC5ncm91cC5hKTsKLQotICAg
IGJ5dGUgW10gc2VyaWFsaXplZDIgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShwYXJzZWQpOwot
ICAgIGFzc2VydEVxdWFscyhzZXJpYWxpemVkLmxlbmd0aCwgc2VyaWFsaXplZDIubGVuZ3RoKTsK
LSAgICBNZXNzYWdlV2l0aEdyb3VwIHBhcnNlZDIgPSBNZXNzYWdlV2l0aEdyb3VwLnBhcnNlRnJv
bShzZXJpYWxpemVkMik7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHBhcnNlZDIuZ3JvdXAuYSk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub09wdGlvbmFsTmVzdGVkTWVzc2FnZSgpIHRocm93
cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBl
c05hbm8oKTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UgbmVzdGVkTXNnID0g
bmV3IFRlc3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2FnZSgpOwotICAgIG5lc3RlZE1zZy5iYiA9
IDE7Ci0gICAgYXNzZXJ0RmFsc2UobXNnLm9wdGlvbmFsTmVzdGVkTWVzc2FnZSAhPSBudWxsKTsK
LSAgICBtc2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlID0gbmVzdGVkTXNnOwotICAgIGFzc2VydFRy
dWUobXNnLm9wdGlvbmFsTmVzdGVkTWVzc2FnZSAhPSBudWxsKTsKLSAgICBhc3NlcnRFcXVhbHMo
MSwgbXNnLm9wdGlvbmFsTmVzdGVkTWVzc2FnZS5iYik7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAg
YXNzZXJ0RmFsc2UobXNnLm9wdGlvbmFsTmVzdGVkTWVzc2FnZSAhPSBudWxsKTsKLSAgICBtc2cu
Y2xlYXIoKQotICAgICAgIC5vcHRpb25hbE5lc3RlZE1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVz
TmFuby5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAgbXNnLm9wdGlvbmFsTmVzdGVkTWVzc2FnZS5iYiA9
IDI7Ci0gICAgYXNzZXJ0VHJ1ZShtc2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlICE9IG51bGwpOwot
ICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEZhbHNlKG1zZy5vcHRpb25hbE5lc3RlZE1lc3Nh
Z2UgIT0gbnVsbCk7Ci0KLSAgICBtc2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlID0gbmVzdGVkTXNn
OwotICAgIGJ5dGUgW10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAg
ICBpbnQgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAv
L1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFs
aXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNp
emUgPT0gOCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRT
aXplKTsKLQotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5w
YXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRUcnVlKG5ld01zZy5vcHRpb25hbE5lc3RlZE1l
c3NhZ2UgIT0gbnVsbCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG5ld01zZy5vcHRpb25hbE5lc3Rl
ZE1lc3NhZ2UuYmIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9PcHRpb25hbEZvcmVp
Z25NZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cg
PSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIE5hbm9PdXRlckNsYXNzLkZvcmVpZ25NZXNz
YWdlTmFubyBuZXN0ZWRNc2cgPSBuZXcgTmFub091dGVyQ2xhc3MuRm9yZWlnbk1lc3NhZ2VOYW5v
KCk7Ci0gICAgbmVzdGVkTXNnLmMgPSAxOwotICAgIGFzc2VydEZhbHNlKG1zZy5vcHRpb25hbEZv
cmVpZ25NZXNzYWdlICE9IG51bGwpOwotICAgIG1zZy5vcHRpb25hbEZvcmVpZ25NZXNzYWdlID0g
bmVzdGVkTXNnOwotICAgIGFzc2VydFRydWUobXNnLm9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UgIT0g
bnVsbCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5vcHRpb25hbEZvcmVpZ25NZXNzYWdlLmMp
OwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEZhbHNlKG1zZy5vcHRpb25hbEZvcmVpZ25N
ZXNzYWdlICE9IG51bGwpOwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLm9wdGlvbmFsRm9yZWln
bk1lc3NhZ2UgPSBuZXcgTmFub091dGVyQ2xhc3MuRm9yZWlnbk1lc3NhZ2VOYW5vKCk7Ci0gICAg
bXNnLm9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UuYyA9IDI7Ci0gICAgYXNzZXJ0VHJ1ZShtc2cub3B0
aW9uYWxGb3JlaWduTWVzc2FnZSAhPSBudWxsKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3Nl
cnRGYWxzZShtc2cub3B0aW9uYWxGb3JlaWduTWVzc2FnZSAhPSBudWxsKTsKLQotICAgIG1zZy5v
cHRpb25hbEZvcmVpZ25NZXNzYWdlID0gbmVzdGVkTXNnOwotICAgIGJ5dGUgW10gcmVzdWx0ID0g
TWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNnU2VyaWFsaXplZFNpemUg
PSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9
JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgp
OwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gOCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAgIFRlc3RBbGxUeXBl
c05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBh
c3NlcnRUcnVlKG5ld01zZy5vcHRpb25hbEZvcmVpZ25NZXNzYWdlICE9IG51bGwpOwotICAgIGFz
c2VydEVxdWFscygxLCBuZXdNc2cub3B0aW9uYWxGb3JlaWduTWVzc2FnZS5jKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3ROYW5vT3B0aW9uYWxJbXBvcnRNZXNzYWdlKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygp
OwotICAgIFVuaXR0ZXN0SW1wb3J0TmFuby5JbXBvcnRNZXNzYWdlTmFubyBuZXN0ZWRNc2cgPSBu
ZXcgVW5pdHRlc3RJbXBvcnROYW5vLkltcG9ydE1lc3NhZ2VOYW5vKCk7Ci0gICAgbmVzdGVkTXNn
LmQgPSAxOwotICAgIGFzc2VydEZhbHNlKG1zZy5vcHRpb25hbEltcG9ydE1lc3NhZ2UgIT0gbnVs
bCk7Ci0gICAgbXNnLm9wdGlvbmFsSW1wb3J0TWVzc2FnZSA9IG5lc3RlZE1zZzsKLSAgICBhc3Nl
cnRUcnVlKG1zZy5vcHRpb25hbEltcG9ydE1lc3NhZ2UgIT0gbnVsbCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDEsIG1zZy5vcHRpb25hbEltcG9ydE1lc3NhZ2UuZCk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0g
ICAgYXNzZXJ0RmFsc2UobXNnLm9wdGlvbmFsSW1wb3J0TWVzc2FnZSAhPSBudWxsKTsKLSAgICBt
c2cuY2xlYXIoKQotICAgICAgIC5vcHRpb25hbEltcG9ydE1lc3NhZ2UgPSBuZXcgVW5pdHRlc3RJ
bXBvcnROYW5vLkltcG9ydE1lc3NhZ2VOYW5vKCk7Ci0gICAgbXNnLm9wdGlvbmFsSW1wb3J0TWVz
c2FnZS5kID0gMjsKLSAgICBhc3NlcnRUcnVlKG1zZy5vcHRpb25hbEltcG9ydE1lc3NhZ2UgIT0g
bnVsbCk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RmFsc2UobXNnLm9wdGlvbmFsSW1w
b3J0TWVzc2FnZSAhPSBudWxsKTsKLQotICAgIG1zZy5vcHRpb25hbEltcG9ydE1lc3NhZ2UgPSBu
ZXN0ZWRNc2c7Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheSht
c2cpOwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgp
OwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBt
c2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJp
YWxpemVkU2l6ZSA9PSA4KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2Vy
aWFsaXplZFNpemUpOwotCi0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlw
ZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydFRydWUobmV3TXNnLm9wdGlvbmFs
SW1wb3J0TWVzc2FnZSAhPSBudWxsKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLm9wdGlv
bmFsSW1wb3J0TWVzc2FnZS5kKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vT3B0aW9u
YWxOZXN0ZWRFbnVtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBt
c2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIG1zZy5vcHRpb25hbE5lc3RlZEVudW0g
PSBUZXN0QWxsVHlwZXNOYW5vLkJBUjsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzTmFu
by5CQVIsIG1zZy5vcHRpb25hbE5lc3RlZEVudW0pOwotICAgIG1zZy5jbGVhcigpCi0gICAgICAg
Lm9wdGlvbmFsTmVzdGVkRW51bSA9IFRlc3RBbGxUeXBlc05hbm8uQkFaOwotICAgIGFzc2VydEVx
dWFscyhUZXN0QWxsVHlwZXNOYW5vLkJBWiwgbXNnLm9wdGlvbmFsTmVzdGVkRW51bSk7Ci0gICAg
bXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlc05hbm8uRk9PLCBtc2cu
b3B0aW9uYWxOZXN0ZWRFbnVtKTsKLQotICAgIG1zZy5vcHRpb25hbE5lc3RlZEVudW0gPSBUZXN0
QWxsVHlwZXNOYW5vLkJBUjsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0
ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6
ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9
JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVl
KG1zZ1NlcmlhbGl6ZWRTaXplID09IDYpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3Ro
LCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRl
c3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RB
bGxUeXBlc05hbm8uQkFSLCBuZXdNc2cub3B0aW9uYWxOZXN0ZWRFbnVtKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRlc3ROYW5vT3B0aW9uYWxGb3JlaWduRW51bSgpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAg
ICBtc2cub3B0aW9uYWxGb3JlaWduRW51bSA9IE5hbm9PdXRlckNsYXNzLkZPUkVJR05fTkFOT19C
QVI7Ci0gICAgYXNzZXJ0RXF1YWxzKE5hbm9PdXRlckNsYXNzLkZPUkVJR05fTkFOT19CQVIsIG1z
Zy5vcHRpb25hbEZvcmVpZ25FbnVtKTsKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5vcHRpb25h
bEZvcmVpZ25FbnVtID0gTmFub091dGVyQ2xhc3MuRk9SRUlHTl9OQU5PX0JBWjsKLSAgICBhc3Nl
cnRFcXVhbHMoTmFub091dGVyQ2xhc3MuRk9SRUlHTl9OQU5PX0JBWiwgbXNnLm9wdGlvbmFsRm9y
ZWlnbkVudW0pOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscyhOYW5vT3V0ZXJD
bGFzcy5GT1JFSUdOX05BTk9fRk9PLCBtc2cub3B0aW9uYWxGb3JlaWduRW51bSk7Ci0KLSAgICBt
c2cub3B0aW9uYWxGb3JlaWduRW51bSA9IE5hbm9PdXRlckNsYXNzLkZPUkVJR05fTkFOT19CQVI7
Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAg
IGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8v
U3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxp
emVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6
ZSA9PSA2KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNp
emUpOwotCi0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBh
cnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscyhOYW5vT3V0ZXJDbGFzcy5GT1JFSUdO
X05BTk9fQkFSLCBuZXdNc2cub3B0aW9uYWxGb3JlaWduRW51bSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0TmFub09wdGlvbmFsSW1wb3J0RW51bSgpIHRocm93cyBFeGNlcHRpb24gewotICAg
IFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBtc2cu
b3B0aW9uYWxJbXBvcnRFbnVtID0gVW5pdHRlc3RJbXBvcnROYW5vLklNUE9SVF9OQU5PX0JBUjsK
LSAgICBhc3NlcnRFcXVhbHMoVW5pdHRlc3RJbXBvcnROYW5vLklNUE9SVF9OQU5PX0JBUiwgbXNn
Lm9wdGlvbmFsSW1wb3J0RW51bSk7Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAub3B0aW9uYWxJ
bXBvcnRFbnVtID0gVW5pdHRlc3RJbXBvcnROYW5vLklNUE9SVF9OQU5PX0JBWjsKLSAgICBhc3Nl
cnRFcXVhbHMoVW5pdHRlc3RJbXBvcnROYW5vLklNUE9SVF9OQU5PX0JBWiwgbXNnLm9wdGlvbmFs
SW1wb3J0RW51bSk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0
SW1wb3J0TmFuby5JTVBPUlRfTkFOT19GT08sIG1zZy5vcHRpb25hbEltcG9ydEVudW0pOwotCi0g
ICAgbXNnLm9wdGlvbmFsSW1wb3J0RW51bSA9IFVuaXR0ZXN0SW1wb3J0TmFuby5JTVBPUlRfTkFO
T19CQVI7Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cp
OwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwot
ICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dT
ZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxp
emVkU2l6ZSA9PSA2KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFs
aXplZFNpemUpOwotCi0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlwZXNO
YW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscyhVbml0dGVzdEltcG9ydE5h
bm8uSU1QT1JUX05BTk9fQkFSLCBuZXdNc2cub3B0aW9uYWxJbXBvcnRFbnVtKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3ROYW5vT3B0aW9uYWxTdHJpbmdQaWVjZSgpIHRocm93cyBFeGNlcHRp
b24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsK
LSAgICBtc2cub3B0aW9uYWxTdHJpbmdQaWVjZSA9ICJoZWxsbyI7Ci0gICAgYXNzZXJ0RXF1YWxz
KCJoZWxsbyIsIG1zZy5vcHRpb25hbFN0cmluZ1BpZWNlKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAg
ICBhc3NlcnRUcnVlKG1zZy5vcHRpb25hbFN0cmluZ1BpZWNlLmlzRW1wdHkoKSk7Ci0gICAgbXNn
LmNsZWFyKCkKLSAgICAgICAub3B0aW9uYWxTdHJpbmdQaWVjZSA9ICJoZWxsbzIiOwotICAgIGFz
c2VydEVxdWFscygiaGVsbG8yIiwgbXNnLm9wdGlvbmFsU3RyaW5nUGllY2UpOwotICAgIG1zZy5j
bGVhcigpOwotICAgIGFzc2VydFRydWUobXNnLm9wdGlvbmFsU3RyaW5nUGllY2UuaXNFbXB0eSgp
KTsKLQotICAgIG1zZy5vcHRpb25hbFN0cmluZ1BpZWNlID0gImJ5ZSI7Ci0gICAgYnl0ZSBbXSBy
ZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dTZXJpYWxp
emVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmlu
dGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0
Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSA5KTsKLSAgICBh
c3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAgVGVz
dEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQp
OwotICAgIGFzc2VydFRydWUobmV3TXNnLm9wdGlvbmFsU3RyaW5nUGllY2UgIT0gbnVsbCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKCJieWUiLCBuZXdNc2cub3B0aW9uYWxTdHJpbmdQaWVjZSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub09wdGlvbmFsQ29yZCgpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAg
ICBtc2cub3B0aW9uYWxDb3JkID0gImhlbGxvIjsKLSAgICBhc3NlcnRFcXVhbHMoImhlbGxvIiwg
bXNnLm9wdGlvbmFsQ29yZCk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2cu
b3B0aW9uYWxDb3JkLmlzRW1wdHkoKSk7Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAub3B0aW9u
YWxDb3JkID0gImhlbGxvMiI7Ci0gICAgYXNzZXJ0RXF1YWxzKCJoZWxsbzIiLCBtc2cub3B0aW9u
YWxDb3JkKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRUcnVlKG1zZy5vcHRpb25hbENv
cmQuaXNFbXB0eSgpKTsKLQotICAgIG1zZy5vcHRpb25hbENvcmQgPSAiYnllIjsKLSAgICBieXRl
IFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1Nl
cmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0
LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCBy
ZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDkpOwot
ICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAg
ICBUZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJl
c3VsdCk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cub3B0aW9uYWxDb3JkICE9IG51bGwpOwotICAg
IGFzc2VydEVxdWFscygiYnllIiwgbmV3TXNnLm9wdGlvbmFsQ29yZCk7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCB0ZXN0TmFub1JlcGVhdGVkSW50MzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBU
ZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDAsIG1zZy5yZXBlYXRlZEludDMyLmxlbmd0aCk7Ci0gICAgbXNnLnJlcGVhdGVkSW50
MzIgPSBuZXcgaW50W10geyAxMjMsIDc4OSwgNDU2IH07Ci0gICAgYXNzZXJ0RXF1YWxzKDc4OSwg
bXNnLnJlcGVhdGVkSW50MzJbMV0pOwotICAgIGFzc2VydEVxdWFscyg0NTYsIG1zZy5yZXBlYXRl
ZEludDMyWzJdKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJl
cGVhdGVkSW50MzIubGVuZ3RoKTsKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZElu
dDMyID0gbmV3IGludFtdIHsgNDU2IH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRl
ZEludDMyLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNnLnJlcGVhdGVkSW50MzJb
MF0pOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRJ
bnQzMi5sZW5ndGgpOwotCi0gICAgLy8gVGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFyKCkKLSAg
ICAgICAucmVwZWF0ZWRJbnQzMiA9IG5ldyBpbnRbXSB7IDEyMyB9OwotICAgIGFzc2VydEVxdWFs
cygxLCBtc2cucmVwZWF0ZWRJbnQzMi5sZW5ndGgpOwotICAgIGJ5dGUgW10gcmVzdWx0ID0gTWVz
c2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNnU2VyaWFsaXplZFNpemUgPSBt
c2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQg
cmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwot
ICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gNik7Ci0gICAgYXNzZXJ0RXF1YWxz
KHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLSAgICBUZXN0QWxsVHlwZXNOYW5v
IG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDEsIG5ld01zZy5yZXBlYXRlZEludDMyLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDEyMywgbmV3TXNnLnJlcGVhdGVkSW50MzJbMF0pOwotCi0gICAgLy8gVGVzdCAyIGVudHJpZXMK
LSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZEludDMyID0gbmV3IGludFtdIHsgMTIz
LCA0NTYgfTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbXNnLnJlcGVhdGVkSW50MzIubGVuZ3RoKTsK
LSAgICByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1Nlcmlh
bGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnBy
aW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1
bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDEwKTsKLSAg
ICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAg
bmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRF
cXVhbHMoMiwgbmV3TXNnLnJlcGVhdGVkSW50MzIubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMo
MTIzLCBuZXdNc2cucmVwZWF0ZWRJbnQzMlswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbmV3
TXNnLnJlcGVhdGVkSW50MzJbMV0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBl
YXRlZEludDY0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cg
PSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0
ZWRJbnQ2NC5sZW5ndGgpOwotICAgIG1zZy5yZXBlYXRlZEludDY0ID0gbmV3IGxvbmdbXSB7IDEy
MywgNzg5LCA0NTYgfTsKLSAgICBhc3NlcnRFcXVhbHMoNzg5LCBtc2cucmVwZWF0ZWRJbnQ2NFsx
XSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNnLnJlcGVhdGVkSW50NjRbMl0pOwotICAgIG1z
Zy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRJbnQ2NC5sZW5ndGgp
OwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkSW50NjQgPSBuZXcgbG9uZ1tdIHsg
NDU2IH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZEludDY0Lmxlbmd0aCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNnLnJlcGVhdGVkSW50NjRbMF0pOwotICAgIG1zZy5jbGVh
cigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRJbnQ2NC5sZW5ndGgpOwotCi0g
ICAgLy8gVGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRJbnQ2
NCA9IG5ldyBsb25nW10geyAxMjMgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVk
SW50NjQubGVuZ3RoKTsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFy
cmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRT
aXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRc
biIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1z
Z1NlcmlhbGl6ZWRTaXplID09IDYpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBt
c2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxs
VHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygxLCBuZXdNc2cu
cmVwZWF0ZWRJbnQ2NC5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygxMjMsIG5ld01zZy5yZXBl
YXRlZEludDY0WzBdKTsKLQotICAgIC8vIFRlc3QgMiBlbnRyaWVzCi0gICAgbXNnLmNsZWFyKCkK
LSAgICAgICAucmVwZWF0ZWRJbnQ2NCA9IG5ldyBsb25nW10geyAxMjMsIDQ1NiB9OwotICAgIGFz
c2VydEVxdWFscygyLCBtc2cucmVwZWF0ZWRJbnQ2NC5sZW5ndGgpOwotICAgIHJlc3VsdCA9IE1l
c3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cu
Z2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVz
dWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAg
IGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gMTApOwotICAgIGFzc2VydEVxdWFscyhy
ZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBuZXdNc2cgPSBUZXN0QWxs
VHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygyLCBuZXdNc2cu
cmVwZWF0ZWRJbnQ2NC5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygxMjMsIG5ld01zZy5yZXBl
YXRlZEludDY0WzBdKTsKLSAgICBhc3NlcnRFcXVhbHMoNDU2LCBuZXdNc2cucmVwZWF0ZWRJbnQ2
NFsxXSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub1JlcGVhdGVkVWludDMyKCkgdGhy
b3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5
cGVzTmFubygpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRVaW50MzIubGVuZ3Ro
KTsKLSAgICBtc2cucmVwZWF0ZWRVaW50MzIgPSBuZXcgaW50W10geyAxMjMsIDc4OSwgNDU2IH07
Ci0gICAgYXNzZXJ0RXF1YWxzKDc4OSwgbXNnLnJlcGVhdGVkVWludDMyWzFdKTsKLSAgICBhc3Nl
cnRFcXVhbHMoNDU2LCBtc2cucmVwZWF0ZWRVaW50MzJbMl0pOwotICAgIG1zZy5jbGVhcigpOwot
ICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRVaW50MzIubGVuZ3RoKTsKLSAgICBtc2cu
Y2xlYXIoKQotICAgICAgIC5yZXBlYXRlZFVpbnQzMiA9IG5ldyBpbnRbXSB7IDQ1NiB9OwotICAg
IGFzc2VydEVxdWFscygxLCBtc2cucmVwZWF0ZWRVaW50MzIubGVuZ3RoKTsKLSAgICBhc3NlcnRF
cXVhbHMoNDU2LCBtc2cucmVwZWF0ZWRVaW50MzJbMF0pOwotICAgIG1zZy5jbGVhcigpOwotICAg
IGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRVaW50MzIubGVuZ3RoKTsKLQotICAgIC8vIFRl
c3QgMSBlbnRyeQotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkVWludDMyID0gbmV3
IGludFtdIHsgMTIzIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZFVpbnQzMi5s
ZW5ndGgpOwotICAgIGJ5dGUgW10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNn
KTsKLSAgICBpbnQgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsK
LSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNn
U2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFs
aXplZFNpemUgPT0gNik7Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1Nlcmlh
bGl6ZWRTaXplKTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRlc3RBbGxUeXBlc05h
bm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG5ld01zZy5yZXBlYXRl
ZFVpbnQzMi5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygxMjMsIG5ld01zZy5yZXBlYXRlZFVp
bnQzMlswXSk7Ci0KLSAgICAvLyBUZXN0IDIgZW50cmllcwotICAgIG1zZy5jbGVhcigpCi0gICAg
ICAgLnJlcGVhdGVkVWludDMyID0gbmV3IGludFtdIHsgMTIzLCA0NTYgfTsKLSAgICBhc3NlcnRF
cXVhbHMoMiwgbXNnLnJlcGVhdGVkVWludDMyLmxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gTWVzc2Fn
ZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRT
ZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQu
bGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNz
ZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3Vs
dC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAgIG5ld01zZyA9IFRlc3RBbGxUeXBl
c05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG5ld01zZy5yZXBl
YXRlZFVpbnQzMi5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygxMjMsIG5ld01zZy5yZXBlYXRl
ZFVpbnQzMlswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbmV3TXNnLnJlcGVhdGVkVWludDMy
WzFdKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vUmVwZWF0ZWRVaW50NjQoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlw
ZXNOYW5vKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZFVpbnQ2NC5sZW5ndGgp
OwotICAgIG1zZy5yZXBlYXRlZFVpbnQ2NCA9IG5ldyBsb25nW10geyAxMjMsIDc4OSwgNDU2IH07
Ci0gICAgYXNzZXJ0RXF1YWxzKDc4OSwgbXNnLnJlcGVhdGVkVWludDY0WzFdKTsKLSAgICBhc3Nl
cnRFcXVhbHMoNDU2LCBtc2cucmVwZWF0ZWRVaW50NjRbMl0pOwotICAgIG1zZy5jbGVhcigpOwot
ICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRVaW50NjQubGVuZ3RoKTsKLSAgICBtc2cu
Y2xlYXIoKQotICAgICAgIC5yZXBlYXRlZFVpbnQ2NCA9IG5ldyBsb25nW10geyA0NTYgfTsKLSAg
ICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkVWludDY0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDQ1NiwgbXNnLnJlcGVhdGVkVWludDY0WzBdKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkVWludDY0Lmxlbmd0aCk7Ci0KLSAgICAvLyBU
ZXN0IDEgZW50cnkKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZFVpbnQ2NCA9IG5l
dyBsb25nW10geyAxMjMgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkVWludDY0
Lmxlbmd0aCk7Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheSht
c2cpOwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgp
OwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBt
c2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJp
YWxpemVkU2l6ZSA9PSA2KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2Vy
aWFsaXplZFNpemUpOwotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVz
TmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVh
dGVkVWludDY0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3TXNnLnJlcGVhdGVk
VWludDY0WzBdKTsKLQotICAgIC8vIFRlc3QgMiBlbnRyaWVzCi0gICAgbXNnLmNsZWFyKCkKLSAg
ICAgICAucmVwZWF0ZWRVaW50NjQgPSBuZXcgbG9uZ1tdIHsgMTIzLCA0NTYgfTsKLSAgICBhc3Nl
cnRFcXVhbHMoMiwgbXNnLnJlcGVhdGVkVWludDY0Lmxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gTWVz
c2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5n
ZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1
bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAg
YXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJl
c3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAgIG5ld01zZyA9IFRlc3RBbGxU
eXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG5ld01zZy5y
ZXBlYXRlZFVpbnQ2NC5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygxMjMsIG5ld01zZy5yZXBl
YXRlZFVpbnQ2NFswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbmV3TXNnLnJlcGVhdGVkVWlu
dDY0WzFdKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vUmVwZWF0ZWRTaW50MzIoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxs
VHlwZXNOYW5vKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZFNpbnQzMi5sZW5n
dGgpOwotICAgIG1zZy5yZXBlYXRlZFNpbnQzMiA9IG5ldyBpbnRbXSB7IDEyMywgNzg5LCA0NTYg
fTsKLSAgICBhc3NlcnRFcXVhbHMoNzg5LCBtc2cucmVwZWF0ZWRTaW50MzJbMV0pOwotICAgIGFz
c2VydEVxdWFscyg0NTYsIG1zZy5yZXBlYXRlZFNpbnQzMlsyXSk7Ci0gICAgbXNnLmNsZWFyKCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZFNpbnQzMi5sZW5ndGgpOwotICAgIG1z
Zy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkU2ludDMyID0gbmV3IGludFtdIHsgNDU2IH07Ci0g
ICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZFNpbnQzMi5sZW5ndGgpOwotICAgIGFzc2Vy
dEVxdWFscyg0NTYsIG1zZy5yZXBlYXRlZFNpbnQzMlswXSk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZFNpbnQzMi5sZW5ndGgpOwotCi0gICAgLy8g
VGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRTaW50MzIgPSBu
ZXcgaW50W10geyAxMjMgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkU2ludDMy
Lmxlbmd0aCk7Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheSht
c2cpOwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgp
OwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBt
c2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJp
YWxpemVkU2l6ZSA9PSA3KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2Vy
aWFsaXplZFNpemUpOwotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVz
TmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVh
dGVkU2ludDMyLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3TXNnLnJlcGVhdGVk
U2ludDMyWzBdKTsKLQotICAgIC8vIFRlc3QgMiBlbnRyaWVzCi0gICAgbXNnLmNsZWFyKCkKLSAg
ICAgICAucmVwZWF0ZWRTaW50MzIgPSBuZXcgaW50W10geyAxMjMsIDQ1NiB9OwotICAgIGFzc2Vy
dEVxdWFscygyLCBtc2cucmVwZWF0ZWRTaW50MzIubGVuZ3RoKTsKLSAgICByZXN1bHQgPSBNZXNz
YWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdl
dFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3Vs
dC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBh
c3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDExKTsKLSAgICBhc3NlcnRFcXVhbHMocmVz
dWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAgbmV3TXNnID0gVGVzdEFsbFR5
cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbmV3TXNnLnJl
cGVhdGVkU2ludDMyLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3TXNnLnJlcGVh
dGVkU2ludDMyWzBdKTsKLSAgICBhc3NlcnRFcXVhbHMoNDU2LCBuZXdNc2cucmVwZWF0ZWRTaW50
MzJbMV0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZFNpbnQ2NCgpIHRo
cm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxU
eXBlc05hbm8oKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkU2ludDY0Lmxlbmd0
aCk7Ci0gICAgbXNnLnJlcGVhdGVkU2ludDY0ID0gbmV3IGxvbmdbXSB7IDEyMywgNzg5LCA0NTYg
fTsKLSAgICBhc3NlcnRFcXVhbHMoNzg5LCBtc2cucmVwZWF0ZWRTaW50NjRbMV0pOwotICAgIGFz
c2VydEVxdWFscyg0NTYsIG1zZy5yZXBlYXRlZFNpbnQ2NFsyXSk7Ci0gICAgbXNnLmNsZWFyKCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZFNpbnQ2NC5sZW5ndGgpOwotICAgIG1z
Zy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkU2ludDY0ID0gbmV3IGxvbmdbXSB7IDQ1NiB9Owot
ICAgIGFzc2VydEVxdWFscygxLCBtc2cucmVwZWF0ZWRTaW50NjQubGVuZ3RoKTsKLSAgICBhc3Nl
cnRFcXVhbHMoNDU2LCBtc2cucmVwZWF0ZWRTaW50NjRbMF0pOwotICAgIG1zZy5jbGVhcigpOwot
ICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRTaW50NjQubGVuZ3RoKTsKLQotICAgIC8v
IFRlc3QgMSBlbnRyeQotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkU2ludDY0ID0g
bmV3IGxvbmdbXSB7IDEyMyB9OwotICAgIGFzc2VydEVxdWFscygxLCBtc2cucmVwZWF0ZWRTaW50
NjQubGVuZ3RoKTsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5
KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXpl
KCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIs
IG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1Nl
cmlhbGl6ZWRTaXplID09IDcpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dT
ZXJpYWxpemVkU2l6ZSk7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlw
ZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygxLCBuZXdNc2cucmVw
ZWF0ZWRTaW50NjQubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBuZXdNc2cucmVwZWF0
ZWRTaW50NjRbMF0pOwotCi0gICAgLy8gVGVzdCAyIGVudHJpZXMKLSAgICBtc2cuY2xlYXIoKQot
ICAgICAgIC5yZXBlYXRlZFNpbnQ2NCA9IG5ldyBsb25nW10geyAxMjMsIDQ1NiB9OwotICAgIGFz
c2VydEVxdWFscygyLCBtc2cucmVwZWF0ZWRTaW50NjQubGVuZ3RoKTsKLSAgICByZXN1bHQgPSBN
ZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNn
LmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJl
c3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAg
ICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDExKTsKLSAgICBhc3NlcnRFcXVhbHMo
cmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAgbmV3TXNnID0gVGVzdEFs
bFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbmV3TXNn
LnJlcGVhdGVkU2ludDY0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3TXNnLnJl
cGVhdGVkU2ludDY0WzBdKTsKLSAgICBhc3NlcnRFcXVhbHMoNDU2LCBuZXdNc2cucmVwZWF0ZWRT
aW50NjRbMV0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZEZpeGVkMzIo
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0
QWxsVHlwZXNOYW5vKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZEZpeGVkMzIu
bGVuZ3RoKTsKLSAgICBtc2cucmVwZWF0ZWRGaXhlZDMyID0gbmV3IGludFtdIHsgMTIzLCA3ODks
IDQ1NiB9OwotICAgIGFzc2VydEVxdWFscyg3ODksIG1zZy5yZXBlYXRlZEZpeGVkMzJbMV0pOwot
ICAgIGFzc2VydEVxdWFscyg0NTYsIG1zZy5yZXBlYXRlZEZpeGVkMzJbMl0pOwotICAgIG1zZy5j
bGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRGaXhlZDMyLmxlbmd0aCk7
Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRGaXhlZDMyID0gbmV3IGludFtdIHsg
NDU2IH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZEZpeGVkMzIubGVuZ3RoKTsK
LSAgICBhc3NlcnRFcXVhbHMoNDU2LCBtc2cucmVwZWF0ZWRGaXhlZDMyWzBdKTsKLSAgICBtc2cu
Y2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkRml4ZWQzMi5sZW5ndGgp
OwotCi0gICAgLy8gVGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0
ZWRGaXhlZDMyID0gbmV3IGludFtdIHsgMTIzIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5y
ZXBlYXRlZEZpeGVkMzIubGVuZ3RoKTsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5v
LnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNl
cmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5s
ZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3Nl
cnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDkpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQu
bGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cg
PSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygx
LCBuZXdNc2cucmVwZWF0ZWRGaXhlZDMyLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywg
bmV3TXNnLnJlcGVhdGVkRml4ZWQzMlswXSk7Ci0KLSAgICAvLyBUZXN0IDIgZW50cmllcwotICAg
IG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkRml4ZWQzMiA9IG5ldyBpbnRbXSB7IDEyMywg
NDU2IH07Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1zZy5yZXBlYXRlZEZpeGVkMzIubGVuZ3RoKTsK
LSAgICByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1Nlcmlh
bGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnBy
aW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1
bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDE1KTsKLSAg
ICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAg
bmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRF
cXVhbHMoMiwgbmV3TXNnLnJlcGVhdGVkRml4ZWQzMi5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFs
cygxMjMsIG5ld01zZy5yZXBlYXRlZEZpeGVkMzJbMF0pOwotICAgIGFzc2VydEVxdWFscyg0NTYs
IG5ld01zZy5yZXBlYXRlZEZpeGVkMzJbMV0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5h
bm9SZXBlYXRlZEZpeGVkNjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNO
YW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1z
Zy5yZXBlYXRlZEZpeGVkNjQubGVuZ3RoKTsKLSAgICBtc2cucmVwZWF0ZWRGaXhlZDY0ID0gbmV3
IGxvbmdbXSB7IDEyMywgNzg5LCA0NTYgfTsKLSAgICBhc3NlcnRFcXVhbHMoNzg5LCBtc2cucmVw
ZWF0ZWRGaXhlZDY0WzFdKTsKLSAgICBhc3NlcnRFcXVhbHMoNDU2LCBtc2cucmVwZWF0ZWRGaXhl
ZDY0WzJdKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVh
dGVkRml4ZWQ2NC5sZW5ndGgpOwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkRml4
ZWQ2NCA9IG5ldyBsb25nW10geyA0NTYgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVh
dGVkRml4ZWQ2NC5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscyg0NTYsIG1zZy5yZXBlYXRlZEZp
eGVkNjRbMF0pOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVw
ZWF0ZWRGaXhlZDY0Lmxlbmd0aCk7Ci0KLSAgICAvLyBUZXN0IDEgZW50cnkKLSAgICBtc2cuY2xl
YXIoKQotICAgICAgIC5yZXBlYXRlZEZpeGVkNjQgPSBuZXcgbG9uZ1tdIHsgMTIzIH07Ci0gICAg
YXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZEZpeGVkNjQubGVuZ3RoKTsKLSAgICBieXRlIFtd
IHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1Nlcmlh
bGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnBy
aW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1
bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDEzKTsKLSAg
ICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotICAgIFRl
c3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0
KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVhdGVkRml4ZWQ2NC5sZW5ndGgpOwot
ICAgIGFzc2VydEVxdWFscygxMjMsIG5ld01zZy5yZXBlYXRlZEZpeGVkNjRbMF0pOwotCi0gICAg
Ly8gVGVzdCAyIGVudHJpZXMKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZEZpeGVk
NjQgPSBuZXcgbG9uZ1tdIHsgMTIzLCA0NTYgfTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbXNnLnJl
cGVhdGVkRml4ZWQ2NC5sZW5ndGgpOwotICAgIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFy
cmF5KG1zZyk7Ci0gICAgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUo
KTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwg
bXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2Vy
aWFsaXplZFNpemUgPT0gMjMpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dT
ZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJv
bShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygyLCBuZXdNc2cucmVwZWF0ZWRGaXhlZDY0Lmxl
bmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3TXNnLnJlcGVhdGVkRml4ZWQ2NFswXSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbmV3TXNnLnJlcGVhdGVkRml4ZWQ2NFsxXSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub1JlcGVhdGVkU2ZpeGVkMzIoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZFNmaXhlZDMyLmxlbmd0aCk7Ci0gICAg
bXNnLnJlcGVhdGVkU2ZpeGVkMzIgPSBuZXcgaW50W10geyAxMjMsIDc4OSwgNDU2IH07Ci0gICAg
YXNzZXJ0RXF1YWxzKDc4OSwgbXNnLnJlcGVhdGVkU2ZpeGVkMzJbMV0pOwotICAgIGFzc2VydEVx
dWFscyg0NTYsIG1zZy5yZXBlYXRlZFNmaXhlZDMyWzJdKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkU2ZpeGVkMzIubGVuZ3RoKTsKLSAgICBtc2cu
Y2xlYXIoKQotICAgICAgIC5yZXBlYXRlZFNmaXhlZDMyID0gbmV3IGludFtdIHsgNDU2IH07Ci0g
ICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZFNmaXhlZDMyLmxlbmd0aCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDQ1NiwgbXNnLnJlcGVhdGVkU2ZpeGVkMzJbMF0pOwotICAgIG1zZy5jbGVhcigp
OwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRTZml4ZWQzMi5sZW5ndGgpOwotCi0g
ICAgLy8gVGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRTZml4
ZWQzMiA9IG5ldyBpbnRbXSB7IDEyMyB9OwotICAgIGFzc2VydEVxdWFscygxLCBtc2cucmVwZWF0
ZWRTZml4ZWQzMi5sZW5ndGgpOwotICAgIGJ5dGUgW10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9C
eXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFs
aXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0
aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRy
dWUobXNnU2VyaWFsaXplZFNpemUgPT0gOSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5n
dGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRl
c3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG5l
d01zZy5yZXBlYXRlZFNmaXhlZDMyLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3
TXNnLnJlcGVhdGVkU2ZpeGVkMzJbMF0pOwotCi0gICAgLy8gVGVzdCAyIGVudHJpZXMKLSAgICBt
c2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZFNmaXhlZDMyID0gbmV3IGludFtdIHsgMTIzLCA0
NTYgfTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbXNnLnJlcGVhdGVkU2ZpeGVkMzIubGVuZ3RoKTsK
LSAgICByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1Nlcmlh
bGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnBy
aW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1
bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDE1KTsKLSAg
ICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAg
bmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRF
cXVhbHMoMiwgbmV3TXNnLnJlcGVhdGVkU2ZpeGVkMzIubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVh
bHMoMTIzLCBuZXdNc2cucmVwZWF0ZWRTZml4ZWQzMlswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1
NiwgbmV3TXNnLnJlcGVhdGVkU2ZpeGVkMzJbMV0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVz
dE5hbm9SZXBlYXRlZFNmaXhlZDY0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5
cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIGFzc2VydEVxdWFscygw
LCBtc2cucmVwZWF0ZWRTZml4ZWQ2NC5sZW5ndGgpOwotICAgIG1zZy5yZXBlYXRlZFNmaXhlZDY0
ID0gbmV3IGxvbmdbXSB7IDEyMywgNzg5LCA0NTYgfTsKLSAgICBhc3NlcnRFcXVhbHMoNzg5LCBt
c2cucmVwZWF0ZWRTZml4ZWQ2NFsxXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNnLnJlcGVh
dGVkU2ZpeGVkNjRbMl0pOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBt
c2cucmVwZWF0ZWRTZml4ZWQ2NC5sZW5ndGgpOwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJl
cGVhdGVkU2ZpeGVkNjQgPSBuZXcgbG9uZ1tdIHsgNDU2IH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEs
IG1zZy5yZXBlYXRlZFNmaXhlZDY0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNn
LnJlcGVhdGVkU2ZpeGVkNjRbMF0pOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFs
cygwLCBtc2cucmVwZWF0ZWRTZml4ZWQ2NC5sZW5ndGgpOwotCi0gICAgLy8gVGVzdCAxIGVudHJ5
Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRTZml4ZWQ2NCA9IG5ldyBsb25nW10g
eyAxMjMgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkU2ZpeGVkNjQubGVuZ3Ro
KTsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0g
ICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAg
Ly9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1Nlcmlh
bGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRT
aXplID09IDEzKTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXpl
ZFNpemUpOwotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5w
YXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVhdGVkU2Zp
eGVkNjQubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBuZXdNc2cucmVwZWF0ZWRTZml4
ZWQ2NFswXSk7Ci0KLSAgICAvLyBUZXN0IDIgZW50cmllcwotICAgIG1zZy5jbGVhcigpCi0gICAg
ICAgLnJlcGVhdGVkU2ZpeGVkNjQgPSBuZXcgbG9uZ1tdIHsgMTIzLCA0NTYgfTsKLSAgICBhc3Nl
cnRFcXVhbHMoMiwgbXNnLnJlcGVhdGVkU2ZpeGVkNjQubGVuZ3RoKTsKLSAgICByZXN1bHQgPSBN
ZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNn
LmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJl
c3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAg
ICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDIzKTsKLSAgICBhc3NlcnRFcXVhbHMo
cmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAgbmV3TXNnID0gVGVzdEFs
bFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbmV3TXNn
LnJlcGVhdGVkU2ZpeGVkNjQubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBuZXdNc2cu
cmVwZWF0ZWRTZml4ZWQ2NFswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbmV3TXNnLnJlcGVh
dGVkU2ZpeGVkNjRbMV0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZEZs
b2F0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcg
VGVzdEFsbFR5cGVzTmFubygpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRGbG9h
dC5sZW5ndGgpOwotICAgIG1zZy5yZXBlYXRlZEZsb2F0ID0gbmV3IGZsb2F0W10geyAxMjNmLCA3
ODlmLCA0NTZmIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDc4OWYsIG1zZy5yZXBlYXRlZEZsb2F0WzFd
KTsKLSAgICBhc3NlcnRFcXVhbHMoNDU2ZiwgbXNnLnJlcGVhdGVkRmxvYXRbMl0pOwotICAgIG1z
Zy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRGbG9hdC5sZW5ndGgp
OwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkRmxvYXQgPSBuZXcgZmxvYXRbXSB7
IDQ1NmYgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkRmxvYXQubGVuZ3RoKTsK
LSAgICBhc3NlcnRFcXVhbHMoNDU2ZiwgbXNnLnJlcGVhdGVkRmxvYXRbMF0pOwotICAgIG1zZy5j
bGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRGbG9hdC5sZW5ndGgpOwot
Ci0gICAgLy8gVGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRG
bG9hdCA9IG5ldyBmbG9hdFtdIHsgMTIzZiB9OwotICAgIGFzc2VydEVxdWFscygxLCBtc2cucmVw
ZWF0ZWRGbG9hdC5sZW5ndGgpOwotICAgIGJ5dGUgW10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9C
eXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFs
aXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0
aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRy
dWUobXNnU2VyaWFsaXplZFNpemUgPT0gOSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5n
dGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5ld01zZyA9IFRl
c3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG5l
d01zZy5yZXBlYXRlZEZsb2F0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyM2YsIG5ld01z
Zy5yZXBlYXRlZEZsb2F0WzBdKTsKLQotICAgIC8vIFRlc3QgMiBlbnRyaWVzCi0gICAgbXNnLmNs
ZWFyKCkKLSAgICAgICAucmVwZWF0ZWRGbG9hdCA9IG5ldyBmbG9hdFtdIHsgMTIzZiwgNDU2ZiB9
OwotICAgIGFzc2VydEVxdWFscygyLCBtc2cucmVwZWF0ZWRGbG9hdC5sZW5ndGgpOwotICAgIHJl
c3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgbXNnU2VyaWFsaXplZFNp
emUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJt
c3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5n
dGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gMTUpOwotICAgIGFzc2Vy
dEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBuZXdNc2cg
PSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygy
LCBuZXdNc2cucmVwZWF0ZWRGbG9hdC5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygxMjNmLCBu
ZXdNc2cucmVwZWF0ZWRGbG9hdFswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NmYsIG5ld01zZy5y
ZXBlYXRlZEZsb2F0WzFdKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vUmVwZWF0ZWRE
b3VibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5l
dyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZERv
dWJsZS5sZW5ndGgpOwotICAgIG1zZy5yZXBlYXRlZERvdWJsZSA9IG5ldyBkb3VibGVbXSB7IDEy
My4wLCA3ODkuMCwgNDU2LjAgfTsKLSAgICBhc3NlcnRFcXVhbHMoNzg5LjAsIG1zZy5yZXBlYXRl
ZERvdWJsZVsxXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1Ni4wLCBtc2cucmVwZWF0ZWREb3VibGVb
Ml0pOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRE
b3VibGUubGVuZ3RoKTsKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZERvdWJsZSA9
IG5ldyBkb3VibGVbXSB7IDQ1Ni4wIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRl
ZERvdWJsZS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscyg0NTYuMCwgbXNnLnJlcGVhdGVkRG91
YmxlWzBdKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVh
dGVkRG91YmxlLmxlbmd0aCk7Ci0KLSAgICAvLyBUZXN0IDEgZW50cnkKLSAgICBtc2cuY2xlYXIo
KQotICAgICAgIC5yZXBlYXRlZERvdWJsZSA9IG5ldyBkb3VibGVbXSB7IDEyMy4wIH07Ci0gICAg
YXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZERvdWJsZS5sZW5ndGgpOwotICAgIGJ5dGUgW10g
cmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNnU2VyaWFs
aXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJp
bnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3Vs
dC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gMTMpOwotICAg
IGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAgVGVz
dEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQp
OwotICAgIGFzc2VydEVxdWFscygxLCBuZXdNc2cucmVwZWF0ZWREb3VibGUubGVuZ3RoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMTIzLjAsIG5ld01zZy5yZXBlYXRlZERvdWJsZVswXSk7Ci0KLSAgICAv
LyBUZXN0IDIgZW50cmllcwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkRG91Ymxl
ID0gbmV3IGRvdWJsZVtdIHsgMTIzLjAsIDQ1Ni4wIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1z
Zy5yZXBlYXRlZERvdWJsZS5sZW5ndGgpOwotICAgIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0
ZUFycmF5KG1zZyk7Ci0gICAgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNp
emUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxu
IiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNn
U2VyaWFsaXplZFNpemUgPT0gMjMpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBt
c2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNl
RnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygyLCBuZXdNc2cucmVwZWF0ZWREb3VibGUu
bGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLjAsIG5ld01zZy5yZXBlYXRlZERvdWJsZVsw
XSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1Ni4wLCBuZXdNc2cucmVwZWF0ZWREb3VibGVbMV0pOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZEJvb2woKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZEJvb2wubGVuZ3RoKTsKLSAgICBtc2cu
cmVwZWF0ZWRCb29sID0gbmV3IGJvb2xlYW5bXSB7IGZhbHNlLCB0cnVlLCBmYWxzZSB9OwotICAg
IGFzc2VydFRydWUobXNnLnJlcGVhdGVkQm9vbFsxXSk7Ci0gICAgYXNzZXJ0RmFsc2UobXNnLnJl
cGVhdGVkQm9vbFsyXSk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1z
Zy5yZXBlYXRlZEJvb2wubGVuZ3RoKTsKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRl
ZEJvb2wgPSBuZXcgYm9vbGVhbltdIHsgdHJ1ZSB9OwotICAgIGFzc2VydEVxdWFscygxLCBtc2cu
cmVwZWF0ZWRCb29sLmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2cucmVwZWF0ZWRCb29sWzBd
KTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkQm9v
bC5sZW5ndGgpOwotCi0gICAgLy8gVGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAg
ICAucmVwZWF0ZWRCb29sID0gbmV3IGJvb2xlYW5bXSB7IGZhbHNlIH07Ci0gICAgYXNzZXJ0RXF1
YWxzKDEsIG1zZy5yZXBlYXRlZEJvb2wubGVuZ3RoKTsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1l
c3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0g
bXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVk
IHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsK
LSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDYpOwotICAgIGFzc2VydEVxdWFs
cyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAgVGVzdEFsbFR5cGVzTmFu
byBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2Vy
dEVxdWFscygxLCBuZXdNc2cucmVwZWF0ZWRCb29sLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RmFsc2Uo
bmV3TXNnLnJlcGVhdGVkQm9vbFswXSk7Ci0KLSAgICAvLyBUZXN0IDIgZW50cmllcwotICAgIG1z
Zy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkQm9vbCA9IG5ldyBib29sZWFuW10geyB0cnVlLCBm
YWxzZSB9OwotICAgIGFzc2VydEVxdWFscygyLCBtc2cucmVwZWF0ZWRCb29sLmxlbmd0aCk7Ci0g
ICAgcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBtc2dTZXJpYWxp
emVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmlu
dGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0
Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSA5KTsKLSAgICBh
c3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAgbmV3
TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVh
bHMoMiwgbmV3TXNnLnJlcGVhdGVkQm9vbC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobmV3TXNn
LnJlcGVhdGVkQm9vbFswXSk7Ci0gICAgYXNzZXJ0RmFsc2UobmV3TXNnLnJlcGVhdGVkQm9vbFsx
XSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub1JlcGVhdGVkU3RyaW5nKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVz
TmFubygpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRTdHJpbmcubGVuZ3RoKTsK
LSAgICBtc2cucmVwZWF0ZWRTdHJpbmcgPSBuZXcgU3RyaW5nW10geyAiaGVsbG8iLCAiYnllIiwg
ImJvbyIgfTsKLSAgICBhc3NlcnRFcXVhbHMoImJ5ZSIsIG1zZy5yZXBlYXRlZFN0cmluZ1sxXSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCJib28iLCBtc2cucmVwZWF0ZWRTdHJpbmdbMl0pOwotICAgIG1z
Zy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRTdHJpbmcubGVuZ3Ro
KTsKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZFN0cmluZyA9IG5ldyBTdHJpbmdb
XSB7ICJib28iIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZFN0cmluZy5sZW5n
dGgpOwotICAgIGFzc2VydEVxdWFscygiYm9vIiwgbXNnLnJlcGVhdGVkU3RyaW5nWzBdKTsKLSAg
ICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkU3RyaW5nLmxl
bmd0aCk7Ci0KLSAgICAvLyBUZXN0IDEgZW50cnkKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5y
ZXBlYXRlZFN0cmluZyA9IG5ldyBTdHJpbmdbXSB7ICIiIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEs
IG1zZy5yZXBlYXRlZFN0cmluZy5sZW5ndGgpOwotICAgIGJ5dGUgW10gcmVzdWx0ID0gTWVzc2Fn
ZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cu
Z2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVz
dWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAg
IGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gNik7Ci0gICAgYXNzZXJ0RXF1YWxzKHJl
c3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG5l
d01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDEsIG5ld01zZy5yZXBlYXRlZFN0cmluZy5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobmV3
TXNnLnJlcGVhdGVkU3RyaW5nWzBdLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBUZXN0IDIgZW50cmll
cwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkU3RyaW5nID0gbmV3IFN0cmluZ1td
IHsgImhlbGxvIiwgIndvcmxkIiB9OwotICAgIGFzc2VydEVxdWFscygyLCBtc2cucmVwZWF0ZWRT
dHJpbmcubGVuZ3RoKTsKLSAgICByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cp
OwotICAgIG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAg
Ly9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1Nlcmlh
bGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRT
aXplID09IDE5KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXpl
ZFNpemUpOwotCi0gICAgbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0
KTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbmV3TXNnLnJlcGVhdGVkU3RyaW5nLmxlbmd0aCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKCJoZWxsbyIsIG5ld01zZy5yZXBlYXRlZFN0cmluZ1swXSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKCJ3b3JsZCIsIG5ld01zZy5yZXBlYXRlZFN0cmluZ1sxXSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0TmFub1JlcGVhdGVkQnl0ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZEJ5dGVzLmxlbmd0aCk7Ci0gICAgbXNnLnJlcGVh
dGVkQnl0ZXMgPSBuZXcgYnl0ZVtdW10gewotICAgICAgICBJbnRlcm5hbE5hbm8uY29weUZyb21V
dGY4KCJoZWxsbyIpLAotICAgICAgICBJbnRlcm5hbE5hbm8uY29weUZyb21VdGY4KCJieWUiKSwK
LSAgICAgICAgSW50ZXJuYWxOYW5vLmNvcHlGcm9tVXRmOCgiYm9vIikKLSAgICB9OwotICAgIGFz
c2VydEVxdWFscygiYnllIiwgbmV3IFN0cmluZyhtc2cucmVwZWF0ZWRCeXRlc1sxXSwgSW50ZXJu
YWxOYW5vLlVURl84KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJib28iLCBuZXcgU3RyaW5nKG1zZy5y
ZXBlYXRlZEJ5dGVzWzJdLCBJbnRlcm5hbE5hbm8uVVRGXzgpKTsKLSAgICBtc2cuY2xlYXIoKTsK
LSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkQnl0ZXMubGVuZ3RoKTsKLSAgICBtc2cu
Y2xlYXIoKQotICAgICAgIC5yZXBlYXRlZEJ5dGVzID0gbmV3IGJ5dGVbXVtdIHsgSW50ZXJuYWxO
YW5vLmNvcHlGcm9tVXRmOCgiYm9vIikgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVh
dGVkQnl0ZXMubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoImJvbyIsIG5ldyBTdHJpbmcobXNn
LnJlcGVhdGVkQnl0ZXNbMF0sIEludGVybmFsTmFuby5VVEZfOCkpOwotICAgIG1zZy5jbGVhcigp
OwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRCeXRlcy5sZW5ndGgpOwotCi0gICAg
Ly8gVGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRCeXRlcyA9
IG5ldyBieXRlW11bXSB7IEludGVybmFsTmFuby5jb3B5RnJvbVV0ZjgoIiIpIH07Ci0gICAgYXNz
ZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZEJ5dGVzLmxlbmd0aCk7Ci0gICAgYnl0ZSBbXSByZXN1
bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dTZXJpYWxpemVk
U2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYo
Im1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxl
bmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSA2KTsKLSAgICBhc3Nl
cnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotICAgIFRlc3RBbGxU
eXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAg
ICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVhdGVkQnl0ZXMubGVuZ3RoKTsKLSAgICBhc3Nl
cnRUcnVlKG5ld01zZy5yZXBlYXRlZEJ5dGVzWzBdLmxlbmd0aCA9PSAwKTsKLQotICAgIC8vIFRl
c3QgMiBlbnRyaWVzCi0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRCeXRlcyA9IG5l
dyBieXRlW11bXSB7Ci0gICAgICBJbnRlcm5hbE5hbm8uY29weUZyb21VdGY4KCJoZWxsbyIpLAot
ICAgICAgSW50ZXJuYWxOYW5vLmNvcHlGcm9tVXRmOCgid29ybGQiKQotICAgIH07Ci0gICAgYXNz
ZXJ0RXF1YWxzKDIsIG1zZy5yZXBlYXRlZEJ5dGVzLmxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gTWVz
c2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5n
ZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1
bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAg
YXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSAxOSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJl
c3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAgIG5ld01zZyA9IFRlc3RBbGxU
eXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG5ld01zZy5y
ZXBlYXRlZEJ5dGVzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJoZWxsbyIsIG5ldyBTdHJp
bmcobmV3TXNnLnJlcGVhdGVkQnl0ZXNbMF0sIEludGVybmFsTmFuby5VVEZfOCkpOwotICAgIGFz
c2VydEVxdWFscygid29ybGQiLCBuZXcgU3RyaW5nKG5ld01zZy5yZXBlYXRlZEJ5dGVzWzFdLCBJ
bnRlcm5hbE5hbm8uVVRGXzgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vUmVwZWF0
ZWRHcm91cCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0g
bmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vLlJlcGVhdGVkR3Jv
dXAgZ3JvdXAwID0KLSAgICAgIG5ldyBUZXN0QWxsVHlwZXNOYW5vLlJlcGVhdGVkR3JvdXAoKTsK
LSAgICBncm91cDAuYSA9IDA7Ci0gICAgVGVzdEFsbFR5cGVzTmFuby5SZXBlYXRlZEdyb3VwIGdy
b3VwMSA9Ci0gICAgICBuZXcgVGVzdEFsbFR5cGVzTmFuby5SZXBlYXRlZEdyb3VwKCk7Ci0gICAg
Z3JvdXAxLmEgPSAxOwotICAgIFRlc3RBbGxUeXBlc05hbm8uUmVwZWF0ZWRHcm91cCBncm91cDIg
PQotICAgICAgbmV3IFRlc3RBbGxUeXBlc05hbm8uUmVwZWF0ZWRHcm91cCgpOwotICAgIGdyb3Vw
Mi5hID0gMjsKLQotICAgIG1zZy5yZXBlYXRlZEdyb3VwID0gbmV3IFRlc3RBbGxUeXBlc05hbm8u
UmVwZWF0ZWRHcm91cFtdIHsgZ3JvdXAwLCBncm91cDEsIGdyb3VwMiB9OwotICAgIGFzc2VydEVx
dWFscygzLCBtc2cucmVwZWF0ZWRHcm91cC5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygwLCBt
c2cucmVwZWF0ZWRHcm91cFswXS5hKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVk
R3JvdXBbMV0uYSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1zZy5yZXBlYXRlZEdyb3VwWzJdLmEp
OwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRHcm91
cC5sZW5ndGgpOwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkR3JvdXAgPSBuZXcg
VGVzdEFsbFR5cGVzTmFuby5SZXBlYXRlZEdyb3VwW10geyBncm91cDEgfTsKLSAgICBhc3NlcnRF
cXVhbHMoMSwgbXNnLnJlcGVhdGVkR3JvdXAubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwg
bXNnLnJlcGVhdGVkR3JvdXBbMF0uYSk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDAsIG1zZy5yZXBlYXRlZEdyb3VwLmxlbmd0aCk7Ci0KLSAgICAvLyBUZXN0IDEgZW50cnkK
LSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZEdyb3VwID0gbmV3IFRlc3RBbGxUeXBl
c05hbm8uUmVwZWF0ZWRHcm91cFtdIHsgZ3JvdXAwIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1z
Zy5yZXBlYXRlZEdyb3VwLmxlbmd0aCk7Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFu
by50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRT
ZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQu
bGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNz
ZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSA3KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0
Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNn
ID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMo
MSwgbmV3TXNnLnJlcGVhdGVkR3JvdXAubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbmV3
TXNnLnJlcGVhdGVkR3JvdXBbMF0uYSk7Ci0KLSAgICAvLyBUZXN0IDIgZW50cmllcwotICAgIG1z
Zy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkR3JvdXAgPSBuZXcgVGVzdEFsbFR5cGVzTmFuby5S
ZXBlYXRlZEdyb3VwW10geyBncm91cDAsIGdyb3VwMSB9OwotICAgIGFzc2VydEVxdWFscygyLCBt
c2cucmVwZWF0ZWRHcm91cC5sZW5ndGgpOwotICAgIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0
ZUFycmF5KG1zZyk7Ci0gICAgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNp
emUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxu
IiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNn
U2VyaWFsaXplZFNpemUgPT0gMTQpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBt
c2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNl
RnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygyLCBuZXdNc2cucmVwZWF0ZWRHcm91cC5s
ZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygwLCBuZXdNc2cucmVwZWF0ZWRHcm91cFswXS5hKTsK
LSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVhdGVkR3JvdXBbMV0uYSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0TmFub1JlcGVhdGVkTmVzdGVkTWVzc2FnZSgpIHRocm93cyBFeGNl
cHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm8o
KTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UgbmVzdGVkTXNnMCA9Ci0gICAg
ICBuZXcgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAgbmVzdGVkTXNnMC5i
YiA9IDA7Ci0gICAgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlIG5lc3RlZE1zZzEgPQot
ICAgICAgbmV3IFRlc3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2FnZSgpOwotICAgIG5lc3RlZE1z
ZzEuYmIgPSAxOwotICAgIFRlc3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2FnZSBuZXN0ZWRNc2cy
ID0KLSAgICAgIG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UoKTsKLSAgICBuZXN0
ZWRNc2cyLmJiID0gMjsKLQotICAgIG1zZy5yZXBlYXRlZE5lc3RlZE1lc3NhZ2UgPQotICAgICAg
ICBuZXcgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlW10geyBuZXN0ZWRNc2cwLCBuZXN0
ZWRNc2cxLCBuZXN0ZWRNc2cyIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1zZy5yZXBlYXRlZE5l
c3RlZE1lc3NhZ2UubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkTmVz
dGVkTWVzc2FnZVswXS5iYik7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZE5lc3Rl
ZE1lc3NhZ2VbMV0uYmIpOwotICAgIGFzc2VydEVxdWFscygyLCBtc2cucmVwZWF0ZWROZXN0ZWRN
ZXNzYWdlWzJdLmJiKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNn
LnJlcGVhdGVkTmVzdGVkTWVzc2FnZS5sZW5ndGgpOwotICAgIG1zZy5jbGVhcigpCi0gICAgICAg
LnJlcGVhdGVkTmVzdGVkTWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3Nh
Z2VbXSB7IG5lc3RlZE1zZzEgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkTmVz
dGVkTWVzc2FnZS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygxLCBtc2cucmVwZWF0ZWROZXN0
ZWRNZXNzYWdlWzBdLmJiKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwg
bXNnLnJlcGVhdGVkTmVzdGVkTWVzc2FnZS5sZW5ndGgpOwotCi0gICAgLy8gVGVzdCAxIGVudHJ5
Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWROZXN0ZWRNZXNzYWdlID0gbmV3IFRl
c3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2FnZVtdIHsgbmVzdGVkTXNnMCB9OwotICAgIGFzc2Vy
dEVxdWFscygxLCBtc2cucmVwZWF0ZWROZXN0ZWRNZXNzYWdlLmxlbmd0aCk7Ci0gICAgYnl0ZSBb
XSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dTZXJp
YWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5w
cmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVz
dWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSA2KTsKLSAg
ICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotICAgIFRl
c3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0
KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVhdGVkTmVzdGVkTWVzc2FnZS5sZW5n
dGgpOwotICAgIGFzc2VydEVxdWFscygwLCBuZXdNc2cucmVwZWF0ZWROZXN0ZWRNZXNzYWdlWzBd
LmJiKTsKLQotICAgIC8vIFRlc3QgMiBlbnRyaWVzCi0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAu
cmVwZWF0ZWROZXN0ZWRNZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2Fn
ZVtdIHsgbmVzdGVkTXNnMCwgbmVzdGVkTXNnMSB9OwotICAgIGFzc2VydEVxdWFscygyLCBtc2cu
cmVwZWF0ZWROZXN0ZWRNZXNzYWdlLmxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gTWVzc2FnZU5hbm8u
dG9CeXRlQXJyYXkobXNnKTsKLSAgICBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxp
emVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3Ro
PSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1
ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSAxMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5n
dGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAgIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8u
cGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG5ld01zZy5yZXBlYXRlZE5l
c3RlZE1lc3NhZ2UubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbmV3TXNnLnJlcGVhdGVk
TmVzdGVkTWVzc2FnZVswXS5iYik7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG5ld01zZy5yZXBlYXRl
ZE5lc3RlZE1lc3NhZ2VbMV0uYmIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBl
YXRlZEZvcmVpZ25NZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVz
TmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIE5hbm9PdXRlckNsYXNzLkZv
cmVpZ25NZXNzYWdlTmFubyBmb3JlaWduTXNnMCA9Ci0gICAgICBuZXcgTmFub091dGVyQ2xhc3Mu
Rm9yZWlnbk1lc3NhZ2VOYW5vKCk7Ci0gICAgZm9yZWlnbk1zZzAuYyA9IDA7Ci0gICAgTmFub091
dGVyQ2xhc3MuRm9yZWlnbk1lc3NhZ2VOYW5vIGZvcmVpZ25Nc2cxID0KLSAgICAgIG5ldyBOYW5v
T3V0ZXJDbGFzcy5Gb3JlaWduTWVzc2FnZU5hbm8oKTsKLSAgICBmb3JlaWduTXNnMS5jID0gMTsK
LSAgICBOYW5vT3V0ZXJDbGFzcy5Gb3JlaWduTWVzc2FnZU5hbm8gZm9yZWlnbk1zZzIgPQotICAg
ICAgbmV3IE5hbm9PdXRlckNsYXNzLkZvcmVpZ25NZXNzYWdlTmFubygpOwotICAgIGZvcmVpZ25N
c2cyLmMgPSAyOwotCi0gICAgbXNnLnJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UgPQotICAgICAgICBu
ZXcgTmFub091dGVyQ2xhc3MuRm9yZWlnbk1lc3NhZ2VOYW5vW10geyBmb3JlaWduTXNnMCwgZm9y
ZWlnbk1zZzEsIGZvcmVpZ25Nc2cyIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1zZy5yZXBlYXRl
ZEZvcmVpZ25NZXNzYWdlLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRl
ZEZvcmVpZ25NZXNzYWdlWzBdLmMpOwotICAgIGFzc2VydEVxdWFscygxLCBtc2cucmVwZWF0ZWRG
b3JlaWduTWVzc2FnZVsxXS5jKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbXNnLnJlcGVhdGVkRm9y
ZWlnbk1lc3NhZ2VbMl0uYyk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAs
IG1zZy5yZXBlYXRlZEZvcmVpZ25NZXNzYWdlLmxlbmd0aCk7Ci0gICAgbXNnLmNsZWFyKCkKLSAg
ICAgICAucmVwZWF0ZWRGb3JlaWduTWVzc2FnZSA9IG5ldyBOYW5vT3V0ZXJDbGFzcy5Gb3JlaWdu
TWVzc2FnZU5hbm9bXSB7IGZvcmVpZ25Nc2cxIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5y
ZXBlYXRlZEZvcmVpZ25NZXNzYWdlLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5y
ZXBlYXRlZEZvcmVpZ25NZXNzYWdlWzBdLmMpOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2Vy
dEVxdWFscygwLCBtc2cucmVwZWF0ZWRGb3JlaWduTWVzc2FnZS5sZW5ndGgpOwotCi0gICAgLy8g
VGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRGb3JlaWduTWVz
c2FnZSA9IG5ldyBOYW5vT3V0ZXJDbGFzcy5Gb3JlaWduTWVzc2FnZU5hbm9bXSB7IGZvcmVpZ25N
c2cwIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZEZvcmVpZ25NZXNzYWdlLmxl
bmd0aCk7Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cp
OwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwot
ICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dT
ZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxp
emVkU2l6ZSA9PSA2KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFs
aXplZFNpemUpOwotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFu
by5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVhdGVk
Rm9yZWlnbk1lc3NhZ2UubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbmV3TXNnLnJlcGVh
dGVkRm9yZWlnbk1lc3NhZ2VbMF0uYyk7Ci0KLSAgICAvLyBUZXN0IDIgZW50cmllcwotICAgIG1z
Zy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UgPSBuZXcgTmFub091dGVy
Q2xhc3MuRm9yZWlnbk1lc3NhZ2VOYW5vW10geyBmb3JlaWduTXNnMCwgZm9yZWlnbk1zZzEgfTsK
LSAgICBhc3NlcnRFcXVhbHMoMiwgbXNnLnJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UubGVuZ3RoKTsK
LSAgICByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1Nlcmlh
bGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnBy
aW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1
bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDExKTsKLSAg
ICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAg
bmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRF
cXVhbHMoMiwgbmV3TXNnLnJlcGVhdGVkRm9yZWlnbk1lc3NhZ2UubGVuZ3RoKTsKLSAgICBhc3Nl
cnRFcXVhbHMoMCwgbmV3TXNnLnJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VbMF0uYyk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDEsIG5ld01zZy5yZXBlYXRlZEZvcmVpZ25NZXNzYWdlWzFdLmMpOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZEltcG9ydE1lc3NhZ2UoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5v
KCk7Ci0gICAgVW5pdHRlc3RJbXBvcnROYW5vLkltcG9ydE1lc3NhZ2VOYW5vIGZvcmVpZ25Nc2cw
ID0KLSAgICAgIG5ldyBVbml0dGVzdEltcG9ydE5hbm8uSW1wb3J0TWVzc2FnZU5hbm8oKTsKLSAg
ICBmb3JlaWduTXNnMC5kID0gMDsKLSAgICBVbml0dGVzdEltcG9ydE5hbm8uSW1wb3J0TWVzc2Fn
ZU5hbm8gZm9yZWlnbk1zZzEgPQotICAgICAgbmV3IFVuaXR0ZXN0SW1wb3J0TmFuby5JbXBvcnRN
ZXNzYWdlTmFubygpOwotICAgIGZvcmVpZ25Nc2cxLmQgPSAxOwotICAgIFVuaXR0ZXN0SW1wb3J0
TmFuby5JbXBvcnRNZXNzYWdlTmFubyBmb3JlaWduTXNnMiA9Ci0gICAgICBuZXcgVW5pdHRlc3RJ
bXBvcnROYW5vLkltcG9ydE1lc3NhZ2VOYW5vKCk7Ci0gICAgZm9yZWlnbk1zZzIuZCA9IDI7Ci0K
LSAgICBtc2cucmVwZWF0ZWRJbXBvcnRNZXNzYWdlID0KLSAgICAgICAgbmV3IFVuaXR0ZXN0SW1w
b3J0TmFuby5JbXBvcnRNZXNzYWdlTmFub1tdIHsgZm9yZWlnbk1zZzAsIGZvcmVpZ25Nc2cxLCBm
b3JlaWduTXNnMiB9OwotICAgIGFzc2VydEVxdWFscygzLCBtc2cucmVwZWF0ZWRJbXBvcnRNZXNz
YWdlLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZEltcG9ydE1lc3Nh
Z2VbMF0uZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZEltcG9ydE1lc3NhZ2Vb
MV0uZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1zZy5yZXBlYXRlZEltcG9ydE1lc3NhZ2VbMl0u
ZCk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZElt
cG9ydE1lc3NhZ2UubGVuZ3RoKTsKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZElt
cG9ydE1lc3NhZ2UgPSBuZXcgVW5pdHRlc3RJbXBvcnROYW5vLkltcG9ydE1lc3NhZ2VOYW5vW10g
eyBmb3JlaWduTXNnMSB9OwotICAgIGFzc2VydEVxdWFscygxLCBtc2cucmVwZWF0ZWRJbXBvcnRN
ZXNzYWdlLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZEltcG9ydE1l
c3NhZ2VbMF0uZCk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5y
ZXBlYXRlZEltcG9ydE1lc3NhZ2UubGVuZ3RoKTsKLQotICAgIC8vIFRlc3QgMSBlbnRyeQotICAg
IG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkSW1wb3J0TWVzc2FnZSA9IG5ldyBVbml0dGVz
dEltcG9ydE5hbm8uSW1wb3J0TWVzc2FnZU5hbm9bXSB7IGZvcmVpZ25Nc2cwIH07Ci0gICAgYXNz
ZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZEltcG9ydE1lc3NhZ2UubGVuZ3RoKTsKLSAgICBieXRl
IFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1Nl
cmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0
LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCBy
ZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDYpOwot
ICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAg
VGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1
bHQpOwotICAgIGFzc2VydEVxdWFscygxLCBuZXdNc2cucmVwZWF0ZWRJbXBvcnRNZXNzYWdlLmxl
bmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG5ld01zZy5yZXBlYXRlZEltcG9ydE1lc3NhZ2Vb
MF0uZCk7Ci0KLSAgICAvLyBUZXN0IDIgZW50cmllcwotICAgIG1zZy5jbGVhcigpCi0gICAgICAg
LnJlcGVhdGVkSW1wb3J0TWVzc2FnZSA9IG5ldyBVbml0dGVzdEltcG9ydE5hbm8uSW1wb3J0TWVz
c2FnZU5hbm9bXSB7IGZvcmVpZ25Nc2cwLCBmb3JlaWduTXNnMSB9OwotICAgIGFzc2VydEVxdWFs
cygyLCBtc2cucmVwZWF0ZWRJbXBvcnRNZXNzYWdlLmxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gTWVz
c2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5n
ZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1
bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAg
YXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSAxMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJl
c3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAgIG5ld01zZyA9IFRlc3RBbGxU
eXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG5ld01zZy5y
ZXBlYXRlZEltcG9ydE1lc3NhZ2UubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbmV3TXNn
LnJlcGVhdGVkSW1wb3J0TWVzc2FnZVswXS5kKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNn
LnJlcGVhdGVkSW1wb3J0TWVzc2FnZVsxXS5kKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RO
YW5vUmVwZWF0ZWROZXN0ZWRFbnVtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5
cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIG1zZy5yZXBlYXRlZE5l
c3RlZEVudW0gPSBuZXcgaW50W10gewotICAgICAgICBUZXN0QWxsVHlwZXNOYW5vLkZPTywKLSAg
ICAgICAgVGVzdEFsbFR5cGVzTmFuby5CQVIsCi0gICAgICAgIFRlc3RBbGxUeXBlc05hbm8uQkFa
Ci0gICAgfTsKLSAgICBhc3NlcnRFcXVhbHMoMywgbXNnLnJlcGVhdGVkTmVzdGVkRW51bS5sZW5n
dGgpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXNOYW5vLkZPTywgbXNnLnJlcGVhdGVk
TmVzdGVkRW51bVswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlc05hbm8uQkFSLCBt
c2cucmVwZWF0ZWROZXN0ZWRFbnVtWzFdKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVz
TmFuby5CQVosIG1zZy5yZXBlYXRlZE5lc3RlZEVudW1bMl0pOwotICAgIG1zZy5jbGVhcigpOwot
ICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWROZXN0ZWRFbnVtLmxlbmd0aCk7Ci0gICAg
bXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWROZXN0ZWRFbnVtID0gbmV3IGludFtdIHsgVGVz
dEFsbFR5cGVzTmFuby5CQVIgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkTmVz
dGVkRW51bS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXNOYW5vLkJBUiwg
bXNnLnJlcGVhdGVkTmVzdGVkRW51bVswXSk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDAsIG1zZy5yZXBlYXRlZE5lc3RlZEVudW0ubGVuZ3RoKTsKLQotICAgIC8vIFRlc3Qg
MSBlbnRyeQotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkTmVzdGVkRW51bSA9IG5l
dyBpbnRbXSB7IFRlc3RBbGxUeXBlc05hbm8uRk9PIH07Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBN
ZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9
IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0l
ZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7
Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSA2KTsKLSAgICBhc3NlcnRFcXVh
bHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotICAgIFRlc3RBbGxUeXBlc05h
bm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3Nl
cnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVhdGVkTmVzdGVkRW51bS5sZW5ndGgpOwotICAgIGFzc2Vy
dEVxdWFscyhUZXN0QWxsVHlwZXNOYW5vLkZPTywgbXNnLnJlcGVhdGVkTmVzdGVkRW51bVswXSk7
Ci0KLSAgICAvLyBUZXN0IDIgZW50cmllcwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVh
dGVkTmVzdGVkRW51bSA9IG5ldyBpbnRbXSB7IFRlc3RBbGxUeXBlc05hbm8uRk9PLCBUZXN0QWxs
VHlwZXNOYW5vLkJBUiB9OwotICAgIGFzc2VydEVxdWFscygyLCBtc2cucmVwZWF0ZWROZXN0ZWRF
bnVtLmxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsK
LSAgICBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8v
U3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxp
emVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6
ZSA9PSA5KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNp
emUpOwotCi0gICAgbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsK
LSAgICBhc3NlcnRFcXVhbHMoMiwgbmV3TXNnLnJlcGVhdGVkTmVzdGVkRW51bS5sZW5ndGgpOwot
ICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXNOYW5vLkZPTywgbXNnLnJlcGVhdGVkTmVzdGVk
RW51bVswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlc05hbm8uQkFSLCBtc2cucmVw
ZWF0ZWROZXN0ZWRFbnVtWzFdKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vUmVwZWF0
ZWRGb3JlaWduRW51bSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8g
bXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBtc2cucmVwZWF0ZWRGb3JlaWduRW51
bSA9IG5ldyBpbnRbXSB7Ci0gICAgICAgIE5hbm9PdXRlckNsYXNzLkZPUkVJR05fTkFOT19GT08s
Ci0gICAgICAgIE5hbm9PdXRlckNsYXNzLkZPUkVJR05fTkFOT19CQVIsCi0gICAgICAgIE5hbm9P
dXRlckNsYXNzLkZPUkVJR05fTkFOT19CQVoKLSAgICB9OwotICAgIGFzc2VydEVxdWFscygzLCBt
c2cucmVwZWF0ZWRGb3JlaWduRW51bS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscyhOYW5vT3V0
ZXJDbGFzcy5GT1JFSUdOX05BTk9fRk9PLCBtc2cucmVwZWF0ZWRGb3JlaWduRW51bVswXSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKE5hbm9PdXRlckNsYXNzLkZPUkVJR05fTkFOT19CQVIsIG1zZy5yZXBl
YXRlZEZvcmVpZ25FbnVtWzFdKTsKLSAgICBhc3NlcnRFcXVhbHMoTmFub091dGVyQ2xhc3MuRk9S
RUlHTl9OQU5PX0JBWiwgbXNnLnJlcGVhdGVkRm9yZWlnbkVudW1bMl0pOwotICAgIG1zZy5jbGVh
cigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRGb3JlaWduRW51bS5sZW5ndGgp
OwotICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkRm9yZWlnbkVudW0gPSBuZXcgaW50
W10geyBOYW5vT3V0ZXJDbGFzcy5GT1JFSUdOX05BTk9fQkFSIH07Ci0gICAgYXNzZXJ0RXF1YWxz
KDEsIG1zZy5yZXBlYXRlZEZvcmVpZ25FbnVtLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKE5h
bm9PdXRlckNsYXNzLkZPUkVJR05fTkFOT19CQVIsIG1zZy5yZXBlYXRlZEZvcmVpZ25FbnVtWzBd
KTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkRm9y
ZWlnbkVudW0ubGVuZ3RoKTsKLQotICAgIC8vIFRlc3QgMSBlbnRyeQotICAgIG1zZy5jbGVhcigp
Ci0gICAgICAgLnJlcGVhdGVkRm9yZWlnbkVudW0gPSBuZXcgaW50W10geyBOYW5vT3V0ZXJDbGFz
cy5GT1JFSUdOX05BTk9fRk9PIH07Ci0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50
b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJp
YWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVu
Z3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0
VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSA2KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxl
bmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0g
VGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwg
bmV3TXNnLnJlcGVhdGVkRm9yZWlnbkVudW0ubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoTmFu
b091dGVyQ2xhc3MuRk9SRUlHTl9OQU5PX0ZPTywgbXNnLnJlcGVhdGVkRm9yZWlnbkVudW1bMF0p
OwotCi0gICAgLy8gVGVzdCAyIGVudHJpZXMKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBl
YXRlZEZvcmVpZ25FbnVtID0gbmV3IGludFtdIHsKLSAgICAgIE5hbm9PdXRlckNsYXNzLkZPUkVJ
R05fTkFOT19GT08sCi0gICAgICBOYW5vT3V0ZXJDbGFzcy5GT1JFSUdOX05BTk9fQkFSCi0gICAg
fTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbXNnLnJlcGVhdGVkRm9yZWlnbkVudW0ubGVuZ3RoKTsK
LSAgICByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1Nlcmlh
bGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnBy
aW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1
bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDkpOwotICAg
IGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBu
ZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVx
dWFscygyLCBuZXdNc2cucmVwZWF0ZWRGb3JlaWduRW51bS5sZW5ndGgpOwotICAgIGFzc2VydEVx
dWFscyhOYW5vT3V0ZXJDbGFzcy5GT1JFSUdOX05BTk9fRk9PLCBtc2cucmVwZWF0ZWRGb3JlaWdu
RW51bVswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKE5hbm9PdXRlckNsYXNzLkZPUkVJR05fTkFOT19C
QVIsIG1zZy5yZXBlYXRlZEZvcmVpZ25FbnVtWzFdKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3ROYW5vUmVwZWF0ZWRJbXBvcnRFbnVtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFs
bFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIG1zZy5yZXBlYXRl
ZEltcG9ydEVudW0gPSBuZXcgaW50W10gewotICAgICAgICBVbml0dGVzdEltcG9ydE5hbm8uSU1Q
T1JUX05BTk9fRk9PLAotICAgICAgICBVbml0dGVzdEltcG9ydE5hbm8uSU1QT1JUX05BTk9fQkFS
LAotICAgICAgICBVbml0dGVzdEltcG9ydE5hbm8uSU1QT1JUX05BTk9fQkFaCi0gICAgfTsKLSAg
ICBhc3NlcnRFcXVhbHMoMywgbXNnLnJlcGVhdGVkSW1wb3J0RW51bS5sZW5ndGgpOwotICAgIGFz
c2VydEVxdWFscyhVbml0dGVzdEltcG9ydE5hbm8uSU1QT1JUX05BTk9fRk9PLCBtc2cucmVwZWF0
ZWRJbXBvcnRFbnVtWzBdKTsKLSAgICBhc3NlcnRFcXVhbHMoVW5pdHRlc3RJbXBvcnROYW5vLklN
UE9SVF9OQU5PX0JBUiwgbXNnLnJlcGVhdGVkSW1wb3J0RW51bVsxXSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKFVuaXR0ZXN0SW1wb3J0TmFuby5JTVBPUlRfTkFOT19CQVosIG1zZy5yZXBlYXRlZEltcG9y
dEVudW1bMl0pOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVw
ZWF0ZWRJbXBvcnRFbnVtLmxlbmd0aCk7Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0
ZWRJbXBvcnRFbnVtID0gbmV3IGludFtdIHsgVW5pdHRlc3RJbXBvcnROYW5vLklNUE9SVF9OQU5P
X0JBUiB9OwotICAgIGFzc2VydEVxdWFscygxLCBtc2cucmVwZWF0ZWRJbXBvcnRFbnVtLmxlbmd0
aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFVuaXR0ZXN0SW1wb3J0TmFuby5JTVBPUlRfTkFOT19CQVIs
IG1zZy5yZXBlYXRlZEltcG9ydEVudW1bMF0pOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2Vy
dEVxdWFscygwLCBtc2cucmVwZWF0ZWRJbXBvcnRFbnVtLmxlbmd0aCk7Ci0KLSAgICAvLyBUZXN0
IDEgZW50cnkKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZEltcG9ydEVudW0gPSBu
ZXcgaW50W10geyBVbml0dGVzdEltcG9ydE5hbm8uSU1QT1JUX05BTk9fRk9PIH07Ci0gICAgYnl0
ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dT
ZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91
dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwg
cmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSA2KTsK
LSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotICAg
IFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVz
dWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVhdGVkSW1wb3J0RW51bS5sZW5n
dGgpOwotICAgIGFzc2VydEVxdWFscyhVbml0dGVzdEltcG9ydE5hbm8uSU1QT1JUX05BTk9fRk9P
LCBtc2cucmVwZWF0ZWRJbXBvcnRFbnVtWzBdKTsKLQotICAgIC8vIFRlc3QgMiBlbnRyaWVzCi0g
ICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRJbXBvcnRFbnVtID0gbmV3IGludFtdIHsK
LSAgICAgIFVuaXR0ZXN0SW1wb3J0TmFuby5JTVBPUlRfTkFOT19GT08sCi0gICAgICBVbml0dGVz
dEltcG9ydE5hbm8uSU1QT1JUX05BTk9fQkFSCi0gICAgfTsKLSAgICBhc3NlcnRFcXVhbHMoMiwg
bXNnLnJlcGVhdGVkSW1wb3J0RW51bS5sZW5ndGgpOwotICAgIHJlc3VsdCA9IE1lc3NhZ2VOYW5v
LnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFs
aXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0
aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRy
dWUobXNnU2VyaWFsaXplZFNpemUgPT0gOSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5n
dGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAgIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8u
cGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG5ld01zZy5yZXBlYXRlZElt
cG9ydEVudW0ubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoVW5pdHRlc3RJbXBvcnROYW5vLklN
UE9SVF9OQU5PX0ZPTywgbXNnLnJlcGVhdGVkSW1wb3J0RW51bVswXSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKFVuaXR0ZXN0SW1wb3J0TmFuby5JTVBPUlRfTkFOT19CQVIsIG1zZy5yZXBlYXRlZEltcG9y
dEVudW1bMV0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZFN0cmluZ1Bp
ZWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcg
VGVzdEFsbFR5cGVzTmFubygpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRTdHJp
bmdQaWVjZS5sZW5ndGgpOwotICAgIG1zZy5yZXBlYXRlZFN0cmluZ1BpZWNlID0gbmV3IFN0cmlu
Z1tdIHsgImhlbGxvIiwgImJ5ZSIsICJib28iIH07Ci0gICAgYXNzZXJ0RXF1YWxzKCJieWUiLCBt
c2cucmVwZWF0ZWRTdHJpbmdQaWVjZVsxXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJib28iLCBtc2cu
cmVwZWF0ZWRTdHJpbmdQaWVjZVsyXSk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDAsIG1zZy5yZXBlYXRlZFN0cmluZ1BpZWNlLmxlbmd0aCk7Ci0gICAgbXNnLmNsZWFyKCkK
LSAgICAgICAucmVwZWF0ZWRTdHJpbmdQaWVjZSA9IG5ldyBTdHJpbmdbXSB7ICJib28iIH07Ci0g
ICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZFN0cmluZ1BpZWNlLmxlbmd0aCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKCJib28iLCBtc2cucmVwZWF0ZWRTdHJpbmdQaWVjZVswXSk7Ci0gICAgbXNn
LmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZFN0cmluZ1BpZWNlLmxl
bmd0aCk7Ci0KLSAgICAvLyBUZXN0IDEgZW50cnkKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5y
ZXBlYXRlZFN0cmluZ1BpZWNlID0gbmV3IFN0cmluZ1tdIHsgIiIgfTsKLSAgICBhc3NlcnRFcXVh
bHMoMSwgbXNnLnJlcGVhdGVkU3RyaW5nUGllY2UubGVuZ3RoKTsKLSAgICBieXRlIFtdIHJlc3Vs
dCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRT
aXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50Zigi
bXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVu
Z3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDYpOwotICAgIGFzc2Vy
dEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAgVGVzdEFsbFR5
cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAg
IGFzc2VydEVxdWFscygxLCBuZXdNc2cucmVwZWF0ZWRTdHJpbmdQaWVjZS5sZW5ndGgpOwotICAg
IGFzc2VydFRydWUobmV3TXNnLnJlcGVhdGVkU3RyaW5nUGllY2VbMF0uaXNFbXB0eSgpKTsKLQot
ICAgIC8vIFRlc3QgMiBlbnRyaWVzCi0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRT
dHJpbmdQaWVjZSA9IG5ldyBTdHJpbmdbXSB7ICJoZWxsbyIsICJ3b3JsZCIgfTsKLSAgICBhc3Nl
cnRFcXVhbHMoMiwgbXNnLnJlcGVhdGVkU3RyaW5nUGllY2UubGVuZ3RoKTsKLSAgICByZXN1bHQg
PSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1NlcmlhbGl6ZWRTaXplID0g
bXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVk
IHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsK
LSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDE5KTsKLSAgICBhc3NlcnRFcXVh
bHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAgbmV3TXNnID0gVGVz
dEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbmV3
TXNnLnJlcGVhdGVkU3RyaW5nUGllY2UubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoImhlbGxv
IiwgbmV3TXNnLnJlcGVhdGVkU3RyaW5nUGllY2VbMF0pOwotICAgIGFzc2VydEVxdWFscygid29y
bGQiLCBuZXdNc2cucmVwZWF0ZWRTdHJpbmdQaWVjZVsxXSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0TmFub1JlcGVhdGVkQ29yZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxU
eXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBhc3NlcnRFcXVhbHMo
MCwgbXNnLnJlcGVhdGVkQ29yZC5sZW5ndGgpOwotICAgIG1zZy5yZXBlYXRlZENvcmQgPSBuZXcg
U3RyaW5nW10geyAiaGVsbG8iLCAiYnllIiwgImJvbyIgfTsKLSAgICBhc3NlcnRFcXVhbHMoImJ5
ZSIsIG1zZy5yZXBlYXRlZENvcmRbMV0pOwotICAgIGFzc2VydEVxdWFscygiYm9vIiwgbXNnLnJl
cGVhdGVkQ29yZFsyXSk7Ci0gICAgbXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1z
Zy5yZXBlYXRlZENvcmQubGVuZ3RoKTsKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRl
ZENvcmQgPSBuZXcgU3RyaW5nW10geyAiYm9vIiB9OwotICAgIGFzc2VydEVxdWFscygxLCBtc2cu
cmVwZWF0ZWRDb3JkLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJib28iLCBtc2cucmVwZWF0
ZWRDb3JkWzBdKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJl
cGVhdGVkQ29yZC5sZW5ndGgpOwotCi0gICAgLy8gVGVzdCAxIGVudHJ5Ci0gICAgbXNnLmNsZWFy
KCkKLSAgICAgICAucmVwZWF0ZWRDb3JkID0gbmV3IFN0cmluZ1tdIHsgIiIgfTsKLSAgICBhc3Nl
cnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkQ29yZC5sZW5ndGgpOwotICAgIGJ5dGUgW10gcmVzdWx0
ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBpbnQgbXNnU2VyaWFsaXplZFNp
emUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJt
c3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5n
dGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNpemUgPT0gNik7Ci0gICAgYXNzZXJ0
RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLSAgICBUZXN0QWxsVHlw
ZXNOYW5vIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDEsIG5ld01zZy5yZXBlYXRlZENvcmQubGVuZ3RoKTsKLSAgICBhc3NlcnRU
cnVlKG5ld01zZy5yZXBlYXRlZENvcmRbMF0uaXNFbXB0eSgpKTsKLQotICAgIC8vIFRlc3QgMiBl
bnRyaWVzCi0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRDb3JkID0gbmV3IFN0cmlu
Z1tdIHsgImhlbGxvIiwgIndvcmxkIiB9OwotICAgIGFzc2VydEVxdWFscygyLCBtc2cucmVwZWF0
ZWRDb3JkLmxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNn
KTsKLSAgICBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAg
IC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJp
YWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVk
U2l6ZSA9PSAxOSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6
ZWRTaXplKTsKLQotICAgIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm8ucGFyc2VGcm9tKHJlc3Vs
dCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG5ld01zZy5yZXBlYXRlZENvcmQubGVuZ3RoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoImhlbGxvIiwgbmV3TXNnLnJlcGVhdGVkQ29yZFswXSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKCJ3b3JsZCIsIG5ld01zZy5yZXBlYXRlZENvcmRbMV0pOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZFBhY2tlZEludDMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7
Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAg
IGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRQYWNrZWRJbnQzMi5sZW5ndGgpOwotICAgIG1z
Zy5yZXBlYXRlZFBhY2tlZEludDMyID0gbmV3IGludFtdIHsgMTIzLCA3ODksIDQ1NiB9OwotICAg
IGFzc2VydEVxdWFscyg3ODksIG1zZy5yZXBlYXRlZFBhY2tlZEludDMyWzFdKTsKLSAgICBhc3Nl
cnRFcXVhbHMoNDU2LCBtc2cucmVwZWF0ZWRQYWNrZWRJbnQzMlsyXSk7Ci0gICAgbXNnLmNsZWFy
KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZFBhY2tlZEludDMyLmxlbmd0aCk7
Ci0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRQYWNrZWRJbnQzMiA9IG5ldyBpbnRb
XSB7IDQ1NiB9OwotICAgIGFzc2VydEVxdWFscygxLCBtc2cucmVwZWF0ZWRQYWNrZWRJbnQzMi5s
ZW5ndGgpOwotICAgIGFzc2VydEVxdWFscyg0NTYsIG1zZy5yZXBlYXRlZFBhY2tlZEludDMyWzBd
KTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkUGFj
a2VkSW50MzIubGVuZ3RoKTsKLQotICAgIC8vIFRlc3QgMSBlbnRyeQotICAgIG1zZy5jbGVhcigp
Ci0gICAgICAgLnJlcGVhdGVkUGFja2VkSW50MzIgPSBuZXcgaW50W10geyAxMjMgfTsKLSAgICBh
c3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkUGFja2VkSW50MzIubGVuZ3RoKTsKLSAgICBieXRl
IFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1Nl
cmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0
LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCBy
ZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDcpOwot
ICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAg
VGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1
bHQpOwotICAgIGFzc2VydEVxdWFscygxLCBuZXdNc2cucmVwZWF0ZWRQYWNrZWRJbnQzMi5sZW5n
dGgpOwotICAgIGFzc2VydEVxdWFscygxMjMsIG5ld01zZy5yZXBlYXRlZFBhY2tlZEludDMyWzBd
KTsKLQotICAgIC8vIFRlc3QgMiBlbnRyaWVzCi0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAucmVw
ZWF0ZWRQYWNrZWRJbnQzMiA9IG5ldyBpbnRbXSB7IDEyMywgNDU2IH07Ci0gICAgYXNzZXJ0RXF1
YWxzKDIsIG1zZy5yZXBlYXRlZFBhY2tlZEludDMyLmxlbmd0aCk7Ci0gICAgcmVzdWx0ID0gTWVz
c2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5n
ZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIC8vU3lzdGVtLm91dC5wcmludGYoIm1zcz0lZCByZXN1
bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAg
YXNzZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA9PSA5KTsKLSAgICBhc3NlcnRFcXVhbHMocmVz
dWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAgbmV3TXNnID0gVGVzdEFsbFR5
cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbmV3TXNnLnJl
cGVhdGVkUGFja2VkSW50MzIubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBuZXdNc2cu
cmVwZWF0ZWRQYWNrZWRJbnQzMlswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbmV3TXNnLnJl
cGVhdGVkUGFja2VkSW50MzJbMV0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBl
YXRlZFBhY2tlZFNmaXhlZDY0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVz
TmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIGFzc2VydEVxdWFscygwLCBt
c2cucmVwZWF0ZWRQYWNrZWRTZml4ZWQ2NC5sZW5ndGgpOwotICAgIG1zZy5yZXBlYXRlZFBhY2tl
ZFNmaXhlZDY0ID0gbmV3IGxvbmdbXSB7IDEyMywgNzg5LCA0NTYgfTsKLSAgICBhc3NlcnRFcXVh
bHMoNzg5LCBtc2cucmVwZWF0ZWRQYWNrZWRTZml4ZWQ2NFsxXSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDQ1NiwgbXNnLnJlcGVhdGVkUGFja2VkU2ZpeGVkNjRbMl0pOwotICAgIG1zZy5jbGVhcigpOwot
ICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVwZWF0ZWRQYWNrZWRTZml4ZWQ2NC5sZW5ndGgpOwot
ICAgIG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkUGFja2VkU2ZpeGVkNjQgPSBuZXcgbG9u
Z1tdIHsgNDU2IH07Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1zZy5yZXBlYXRlZFBhY2tlZFNmaXhl
ZDY0Lmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbXNnLnJlcGVhdGVkUGFja2VkU2Zp
eGVkNjRbMF0pOwotICAgIG1zZy5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cucmVw
ZWF0ZWRQYWNrZWRTZml4ZWQ2NC5sZW5ndGgpOwotCi0gICAgLy8gVGVzdCAxIGVudHJ5Ci0gICAg
bXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRQYWNrZWRTZml4ZWQ2NCA9IG5ldyBsb25nW10g
eyAxMjMgfTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbXNnLnJlcGVhdGVkUGFja2VkU2ZpeGVkNjQu
bGVuZ3RoKTsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1z
Zyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7
Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1z
Z1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1Nlcmlh
bGl6ZWRTaXplID09IDE0KTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2Vy
aWFsaXplZFNpemUpOwotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFsbFR5cGVz
TmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgbmV3TXNnLnJlcGVh
dGVkUGFja2VkU2ZpeGVkNjQubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBuZXdNc2cu
cmVwZWF0ZWRQYWNrZWRTZml4ZWQ2NFswXSk7Ci0KLSAgICAvLyBUZXN0IDIgZW50cmllcwotICAg
IG1zZy5jbGVhcigpCi0gICAgICAgLnJlcGVhdGVkUGFja2VkU2ZpeGVkNjQgPSBuZXcgbG9uZ1td
IHsgMTIzLCA0NTYgfTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbXNnLnJlcGVhdGVkUGFja2VkU2Zp
eGVkNjQubGVuZ3RoKTsKLSAgICByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cp
OwotICAgIG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAg
Ly9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1Nlcmlh
bGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRT
aXplID09IDIyKTsKLSAgICBhc3NlcnRFcXVhbHMocmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXpl
ZFNpemUpOwotCi0gICAgbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0
KTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbmV3TXNnLnJlcGVhdGVkUGFja2VkU2ZpeGVkNjQubGVu
Z3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzLCBuZXdNc2cucmVwZWF0ZWRQYWNrZWRTZml4ZWQ2
NFswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQ1NiwgbmV3TXNnLnJlcGVhdGVkUGFja2VkU2ZpeGVk
NjRbMV0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZFBhY2tlZE5lc3Rl
ZEVudW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5l
dyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgbXNnLnJlcGVhdGVkUGFja2VkTmVzdGVkRW51bSA9
IG5ldyBpbnRbXSB7Ci0gICAgICAgIFRlc3RBbGxUeXBlc05hbm8uRk9PLAotICAgICAgICBUZXN0
QWxsVHlwZXNOYW5vLkJBUiwKLSAgICAgICAgVGVzdEFsbFR5cGVzTmFuby5CQVoKLSAgICB9Owot
ICAgIGFzc2VydEVxdWFscygzLCBtc2cucmVwZWF0ZWRQYWNrZWROZXN0ZWRFbnVtLmxlbmd0aCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlc05hbm8uRk9PLCBtc2cucmVwZWF0ZWRQYWNr
ZWROZXN0ZWRFbnVtWzBdKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzTmFuby5CQVIs
IG1zZy5yZXBlYXRlZFBhY2tlZE5lc3RlZEVudW1bMV0pOwotICAgIGFzc2VydEVxdWFscyhUZXN0
QWxsVHlwZXNOYW5vLkJBWiwgbXNnLnJlcGVhdGVkUGFja2VkTmVzdGVkRW51bVsyXSk7Ci0gICAg
bXNnLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1zZy5yZXBlYXRlZFBhY2tlZE5lc3Rl
ZEVudW0ubGVuZ3RoKTsKLSAgICBtc2cuY2xlYXIoKQotICAgICAgIC5yZXBlYXRlZFBhY2tlZE5l
c3RlZEVudW0gPSBuZXcgaW50W10geyBUZXN0QWxsVHlwZXNOYW5vLkJBUiB9OwotICAgIGFzc2Vy
dEVxdWFscygxLCBtc2cucmVwZWF0ZWRQYWNrZWROZXN0ZWRFbnVtLmxlbmd0aCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKFRlc3RBbGxUeXBlc05hbm8uQkFSLCBtc2cucmVwZWF0ZWRQYWNrZWROZXN0ZWRF
bnVtWzBdKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVh
dGVkUGFja2VkTmVzdGVkRW51bS5sZW5ndGgpOwotCi0gICAgLy8gVGVzdCAxIGVudHJ5Ci0gICAg
bXNnLmNsZWFyKCkKLSAgICAgICAucmVwZWF0ZWRQYWNrZWROZXN0ZWRFbnVtID0gbmV3IGludFtd
IHsgVGVzdEFsbFR5cGVzTmFuby5GT08gfTsKLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3NhZ2VO
YW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdl
dFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3Vs
dC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBh
c3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDcpOwotICAgIGFzc2VydEVxdWFscyhyZXN1
bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdN
c2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFs
cygxLCBuZXdNc2cucmVwZWF0ZWRQYWNrZWROZXN0ZWRFbnVtLmxlbmd0aCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKFRlc3RBbGxUeXBlc05hbm8uRk9PLCBtc2cucmVwZWF0ZWRQYWNrZWROZXN0ZWRFbnVt
WzBdKTsKLQotICAgIC8vIFRlc3QgMiBlbnRyaWVzCi0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAu
cmVwZWF0ZWRQYWNrZWROZXN0ZWRFbnVtID0gbmV3IGludFtdIHsgVGVzdEFsbFR5cGVzTmFuby5G
T08sIFRlc3RBbGxUeXBlc05hbm8uQkFSIH07Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1zZy5yZXBl
YXRlZFBhY2tlZE5lc3RlZEVudW0ubGVuZ3RoKTsKLSAgICByZXN1bHQgPSBNZXNzYWdlTmFuby50
b0J5dGVBcnJheShtc2cpOwotICAgIG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNnLmdldFNlcmlhbGl6
ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJlc3VsdC5sZW5ndGg9
JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVl
KG1zZ1NlcmlhbGl6ZWRTaXplID09IDgpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3Ro
LCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICBuZXdNc2cgPSBUZXN0QWxsVHlwZXNOYW5vLnBh
cnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscygyLCBuZXdNc2cucmVwZWF0ZWRQYWNr
ZWROZXN0ZWRFbnVtLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBlc05hbm8u
Rk9PLCBtc2cucmVwZWF0ZWRQYWNrZWROZXN0ZWRFbnVtWzBdKTsKLSAgICBhc3NlcnRFcXVhbHMo
VGVzdEFsbFR5cGVzTmFuby5CQVIsIG1zZy5yZXBlYXRlZFBhY2tlZE5lc3RlZEVudW1bMV0pOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZFBhY2tlZFNlcmlhbGl6ZWRTaXpl
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVz
dEFsbFR5cGVzTmFubygpOwotICAgIG1zZy5yZXBlYXRlZFBhY2tlZEludDMyID0gbmV3IGludFtd
IHsgMTIzLCA3ODksIDQ1NiB9OwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRT
ZXJpYWxpemVkU2l6ZSgpOwotICAgIGJ5dGUgW10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRl
QXJyYXkobXNnKTsKLSAgICAvL1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0
aD0lZFxuIiwgbXNnU2VyaWFsaXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRy
dWUobXNnU2VyaWFsaXplZFNpemUgPT0gMTEpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVu
Z3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cyID0gbmV3
IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBtc2cyLnJlcGVhdGVkUGFja2VkSW50MzIgPSBuZXcg
aW50W10geyAxMjMsIDc4OSwgNDU2IH07Ci0gICAgYnl0ZSBbXSByZXN1bHQyID0gbmV3IGJ5dGVb
bXNnU2VyaWFsaXplZFNpemVdOwotICAgIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZzIsIHJl
c3VsdDIsIDAsIG1zZ1NlcmlhbGl6ZWRTaXplKTsKLQotICAgIC8vIENoZWNrIGVxdWFsIHNpemUg
YW5kIGNvbnRlbnQuCi0gICAgYXNzZXJ0RXF1YWxzKG1zZ1NlcmlhbGl6ZWRTaXplLCBtc2cyLmdl
dFNlcmlhbGl6ZWRTaXplKCkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhyZXN1bHQs
IHJlc3VsdDIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vUmVwZWF0ZWRJbnQzMlJl
TWVyZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5l
dyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgbXNnLnJlcGVhdGVkSW50MzIgPSBuZXcgaW50W10g
eyAyMzQgfTsKLSAgICBieXRlIFtdIHJlc3VsdDEgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheSht
c2cpOwotCi0gICAgbXNnLmNsZWFyKCkub3B0aW9uYWxJbnQzMiA9IDc4OTsKLSAgICBieXRlIFtd
IHJlc3VsdDIgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotCi0gICAgbXNnLmNsZWFy
KCkucmVwZWF0ZWRJbnQzMiA9IG5ldyBpbnRbXSB7IDEyMywgNDU2IH07Ci0gICAgYnl0ZSBbXSBy
ZXN1bHQzID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLQotICAgIC8vIENvbmNhdGVu
YXRlIHRoZSB0aHJlZSBzZXJpYWxpemF0aW9ucyBhbmQgcmVhZCBhcyBvbmUgbWVzc2FnZS4KLSAg
ICBieXRlIFtdIHJlc3VsdCA9IG5ldyBieXRlW3Jlc3VsdDEubGVuZ3RoICsgcmVzdWx0Mi5sZW5n
dGggKyByZXN1bHQzLmxlbmd0aF07Ci0gICAgU3lzdGVtLmFycmF5Y29weShyZXN1bHQxLCAwLCBy
ZXN1bHQsIDAsIHJlc3VsdDEubGVuZ3RoKTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHJlc3VsdDIs
IDAsIHJlc3VsdCwgcmVzdWx0MS5sZW5ndGgsIHJlc3VsdDIubGVuZ3RoKTsKLSAgICBTeXN0ZW0u
YXJyYXljb3B5KHJlc3VsdDMsIDAsIHJlc3VsdCwgcmVzdWx0MS5sZW5ndGggKyByZXN1bHQyLmxl
bmd0aCwgcmVzdWx0My5sZW5ndGgpOwotCi0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBU
ZXN0QWxsVHlwZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscyg3ODks
IG5ld01zZy5vcHRpb25hbEludDMyKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgbmV3TXNnLnJlcGVh
dGVkSW50MzIubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMjM0LCBuZXdNc2cucmVwZWF0ZWRJ
bnQzMlswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3TXNnLnJlcGVhdGVkSW50MzJbMV0p
OwotICAgIGFzc2VydEVxdWFscyg0NTYsIG5ld01zZy5yZXBlYXRlZEludDMyWzJdKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vUmVwZWF0ZWROZXN0ZWRFbnVtUmVNZXJnZSgpIHRocm93
cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbXNnID0gbmV3IFRlc3RBbGxUeXBl
c05hbm8oKTsKLSAgICBtc2cucmVwZWF0ZWROZXN0ZWRFbnVtID0gbmV3IGludFtdIHsgVGVzdEFs
bFR5cGVzTmFuby5GT08gfTsKLSAgICBieXRlIFtdIHJlc3VsdDEgPSBNZXNzYWdlTmFuby50b0J5
dGVBcnJheShtc2cpOwotCi0gICAgbXNnLmNsZWFyKCkub3B0aW9uYWxJbnQzMiA9IDc4OTsKLSAg
ICBieXRlIFtdIHJlc3VsdDIgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotCi0gICAg
bXNnLmNsZWFyKCkucmVwZWF0ZWROZXN0ZWRFbnVtID0gbmV3IGludFtdIHsgVGVzdEFsbFR5cGVz
TmFuby5CQVIsIFRlc3RBbGxUeXBlc05hbm8uRk9PIH07Ci0gICAgYnl0ZSBbXSByZXN1bHQzID0g
TWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLQotICAgIC8vIENvbmNhdGVuYXRlIHRoZSB0
aHJlZSBzZXJpYWxpemF0aW9ucyBhbmQgcmVhZCBhcyBvbmUgbWVzc2FnZS4KLSAgICBieXRlIFtd
IHJlc3VsdCA9IG5ldyBieXRlW3Jlc3VsdDEubGVuZ3RoICsgcmVzdWx0Mi5sZW5ndGggKyByZXN1
bHQzLmxlbmd0aF07Ci0gICAgU3lzdGVtLmFycmF5Y29weShyZXN1bHQxLCAwLCByZXN1bHQsIDAs
IHJlc3VsdDEubGVuZ3RoKTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KHJlc3VsdDIsIDAsIHJlc3Vs
dCwgcmVzdWx0MS5sZW5ndGgsIHJlc3VsdDIubGVuZ3RoKTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5
KHJlc3VsdDMsIDAsIHJlc3VsdCwgcmVzdWx0MS5sZW5ndGggKyByZXN1bHQyLmxlbmd0aCwgcmVz
dWx0My5sZW5ndGgpOwotCi0gICAgVGVzdEFsbFR5cGVzTmFubyBuZXdNc2cgPSBUZXN0QWxsVHlw
ZXNOYW5vLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydEVxdWFscyg3ODksIG5ld01zZy5v
cHRpb25hbEludDMyKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgbmV3TXNnLnJlcGVhdGVkTmVzdGVk
RW51bS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXNOYW5vLkZPTywgbmV3
TXNnLnJlcGVhdGVkTmVzdGVkRW51bVswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RBbGxUeXBl
c05hbm8uQkFSLCBuZXdNc2cucmVwZWF0ZWROZXN0ZWRFbnVtWzFdKTsKLSAgICBhc3NlcnRFcXVh
bHMoVGVzdEFsbFR5cGVzTmFuby5GT08sIG5ld01zZy5yZXBlYXRlZE5lc3RlZEVudW1bMl0pOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9SZXBlYXRlZE5lc3RlZE1lc3NhZ2VSZU1lcmdl
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVz
dEFsbFR5cGVzTmFubygpOwotICAgIFRlc3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2FnZSBuZXN0
ZWRNc2cwID0KLSAgICAgIG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UoKTsKLSAg
ICBuZXN0ZWRNc2cwLmJiID0gMDsKLSAgICBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2Ug
bmVzdGVkTXNnMSA9Ci0gICAgICBuZXcgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlKCk7
Ci0gICAgbmVzdGVkTXNnMS5iYiA9IDE7Ci0gICAgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNz
YWdlIG5lc3RlZE1zZzIgPQotICAgICAgbmV3IFRlc3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2Fn
ZSgpOwotICAgIG5lc3RlZE1zZzIuYmIgPSAyOwotCi0gICAgbXNnLnJlcGVhdGVkTmVzdGVkTWVz
c2FnZSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2VbXSB7IG5lc3RlZE1zZzAg
fTsKLSAgICBieXRlIFtdIHJlc3VsdDEgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwot
Ci0gICAgbXNnLmNsZWFyKCkub3B0aW9uYWxJbnQzMiA9IDc4OTsKLSAgICBieXRlIFtdIHJlc3Vs
dDIgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotCi0gICAgbXNnLmNsZWFyKCkucmVw
ZWF0ZWROZXN0ZWRNZXNzYWdlID0KLSAgICAgICAgbmV3IFRlc3RBbGxUeXBlc05hbm8uTmVzdGVk
TWVzc2FnZVtdIHsgbmVzdGVkTXNnMSwgbmVzdGVkTXNnMiB9OwotICAgIGJ5dGUgW10gcmVzdWx0
MyA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0KLSAgICAvLyBDb25jYXRlbmF0ZSB0
aGUgdGhyZWUgc2VyaWFsaXphdGlvbnMgYW5kIHJlYWQgYXMgb25lIG1lc3NhZ2UuCi0gICAgYnl0
ZSBbXSByZXN1bHQgPSBuZXcgYnl0ZVtyZXN1bHQxLmxlbmd0aCArIHJlc3VsdDIubGVuZ3RoICsg
cmVzdWx0My5sZW5ndGhdOwotICAgIFN5c3RlbS5hcnJheWNvcHkocmVzdWx0MSwgMCwgcmVzdWx0
LCAwLCByZXN1bHQxLmxlbmd0aCk7Ci0gICAgU3lzdGVtLmFycmF5Y29weShyZXN1bHQyLCAwLCBy
ZXN1bHQsIHJlc3VsdDEubGVuZ3RoLCByZXN1bHQyLmxlbmd0aCk7Ci0gICAgU3lzdGVtLmFycmF5
Y29weShyZXN1bHQzLCAwLCByZXN1bHQsIHJlc3VsdDEubGVuZ3RoICsgcmVzdWx0Mi5sZW5ndGgs
IHJlc3VsdDMubGVuZ3RoKTsKLQotICAgIFRlc3RBbGxUeXBlc05hbm8gbmV3TXNnID0gVGVzdEFs
bFR5cGVzTmFuby5wYXJzZUZyb20ocmVzdWx0KTsKLSAgICBhc3NlcnRFcXVhbHMoNzg5LCBuZXdN
c2cub3B0aW9uYWxJbnQzMik7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG5ld01zZy5yZXBlYXRlZE5l
c3RlZE1lc3NhZ2UubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMobmVzdGVkTXNnMC5iYiwgbmV3
TXNnLnJlcGVhdGVkTmVzdGVkTWVzc2FnZVswXS5iYik7Ci0gICAgYXNzZXJ0RXF1YWxzKG5lc3Rl
ZE1zZzEuYmIsIG5ld01zZy5yZXBlYXRlZE5lc3RlZE1lc3NhZ2VbMV0uYmIpOwotICAgIGFzc2Vy
dEVxdWFscyhuZXN0ZWRNc2cyLmJiLCBuZXdNc2cucmVwZWF0ZWROZXN0ZWRNZXNzYWdlWzJdLmJi
KTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB0aGF0IGludmFsaWQgZW51bSB2YWx1ZXMgZnJv
bSB0aGUgd2lyZSBhcmUgbm90IGFjY2VwdGVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5h
bm9FbnVtVmFsaWRpdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgaW52YWxp
ZCA9IDEyMDsKLSAgICBmaW5hbCBpbnQgYWxzb0ludmFsaWQgPSAxMjE7Ci0KLSAgICBFbnVtVmFs
aWRpdHkuTSBtID0gbmV3IEVudW1WYWxpZGl0eS5NKCk7Ci0gICAgLy8gU2FuaXR5IGNoZWNrICYg
YmFzZWxpbmUgb2YgdGhlIGFzc2VydGlvbnMgZm9yIHRoZSBmaXJzdCBjYXNlIGJlbG93LgotICAg
IGFzc2VydEVxdWFscyhFbnVtVmFsaWRpdHkuRS5kZWZhdWx0XywgbS5vcHRpb25hbEUpOwotICAg
IGFzc2VydEVxdWFscyhFbnVtVmFsaWRpdHkuRS5CQVosIG0uZGVmYXVsdEUpOwotCi0gICAgbS5v
cHRpb25hbEUgPSBpbnZhbGlkOwotICAgIG0uZGVmYXVsdEUgPSBpbnZhbGlkOwotICAgIC8vIEUg
Y29udGFpbnMgYWxsIHZhbGlkIHZhbHVlcwotICAgIG0ucmVwZWF0ZWRFID0gbmV3IGludFtdIHtF
bnVtVmFsaWRpdHkuRS5GT08sIEVudW1WYWxpZGl0eS5FLkJBUn07Ci0gICAgbS5wYWNrZWRFID0g
bmV3IGludFtdIHtFbnVtVmFsaWRpdHkuRS5GT08sIEVudW1WYWxpZGl0eS5FLkJBWn07Ci0gICAg
Ly8gRTIgY29udGFpbnMgc29tZSBpbnZhbGlkIHZhbHVlcwotICAgIG0ucmVwZWF0ZWRFMiA9IG5l
dyBpbnRbXSB7aW52YWxpZCwgRW51bVZhbGlkaXR5LkUuQkFSLCBhbHNvSW52YWxpZH07Ci0gICAg
bS5wYWNrZWRFMiA9IG5ldyBpbnRbXSB7RW51bVZhbGlkaXR5LkUuRk9PLCBpbnZhbGlkLCBhbHNv
SW52YWxpZH07Ci0gICAgLy8gRTMgY29udGFpbnMgYWxsIGludmFsaWQgdmFsdWVzCi0gICAgbS5y
ZXBlYXRlZEUzID0gbmV3IGludFtdIHtpbnZhbGlkLCBpbnZhbGlkfTsKLSAgICBtLnBhY2tlZEUz
ID0gbmV3IGludFtdIHthbHNvSW52YWxpZCwgYWxzb0ludmFsaWR9OwotICAgIGJ5dGVbXSBzZXJp
YWxpemVkID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobSk7Ci0gICAgLy8gU2FuaXR5IGNoZWNr
IHRoYXQgd2UgZG8gaGF2ZSBhbGwgZGF0YSBpbiB0aGUgYnl0ZSBhcnJheS4KLSAgICBhc3NlcnRF
cXVhbHMoMzEsIHNlcmlhbGl6ZWQubGVuZ3RoKTsKLQotICAgIC8vIFRlc3QgMTogdGVzdHMgdGhh
dCBpbnZhbGlkIHZhbHVlcyBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlIGRlc2VyaWFsaXplZCBtZXNz
YWdlLgotICAgIEVudW1WYWxpZGl0eS5NIGRlc2VyaWFsaXplZCA9IE1lc3NhZ2VOYW5vLm1lcmdl
RnJvbShuZXcgRW51bVZhbGlkaXR5Lk0oKSwgc2VyaWFsaXplZCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KEVudW1WYWxpZGl0eS5FLmRlZmF1bHRfLCBkZXNlcmlhbGl6ZWQub3B0aW9uYWxFKTsKLSAgICBh
c3NlcnRFcXVhbHMoRW51bVZhbGlkaXR5LkUuQkFaLCBkZXNlcmlhbGl6ZWQuZGVmYXVsdEUpOwot
ICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscygKLSAgICAgICAgbmV3IGludFtdIHtFbnVtVmFs
aWRpdHkuRS5GT08sIEVudW1WYWxpZGl0eS5FLkJBUn0sIGRlc2VyaWFsaXplZC5yZXBlYXRlZEUp
KTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoCi0gICAgICAgIG5ldyBpbnRbXSB7RW51
bVZhbGlkaXR5LkUuRk9PLCBFbnVtVmFsaWRpdHkuRS5CQVp9LCBkZXNlcmlhbGl6ZWQucGFja2Vk
RSkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscygKLSAgICAgICAgbmV3IGludFtdIHtF
bnVtVmFsaWRpdHkuRS5CQVJ9LCBkZXNlcmlhbGl6ZWQucmVwZWF0ZWRFMikpOwotICAgIGFzc2Vy
dFRydWUoQXJyYXlzLmVxdWFscygKLSAgICAgICAgbmV3IGludFtdIHtFbnVtVmFsaWRpdHkuRS5G
T099LCBkZXNlcmlhbGl6ZWQucGFja2VkRTIpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgZGVzZXJp
YWxpemVkLnJlcGVhdGVkRTMubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgZGVzZXJpYWxp
emVkLnBhY2tlZEUzLmxlbmd0aCk7Ci0KLSAgICAvLyBUZXN0IDI6IHRlc3RzIHRoYXQgaW52YWxp
ZCB2YWx1ZXMgZG8gbm90IG92ZXJyaWRlIHByZXZpb3VzIHZhbHVlcyBpbiB0aGUgZmllbGQsIGlu
Y2x1ZGluZwotICAgIC8vIGFycmF5cywgaW5jbHVkaW5nIHByZS1leGlzdGluZyBpbnZhbGlkIHZh
bHVlcy4KLSAgICBkZXNlcmlhbGl6ZWQub3B0aW9uYWxFID0gRW51bVZhbGlkaXR5LkUuQkFSOwot
ICAgIGRlc2VyaWFsaXplZC5kZWZhdWx0RSA9IGFsc29JbnZhbGlkOwotICAgIGRlc2VyaWFsaXpl
ZC5yZXBlYXRlZEUgPSBuZXcgaW50W10ge0VudW1WYWxpZGl0eS5FLkJBWn07Ci0gICAgZGVzZXJp
YWxpemVkLnBhY2tlZEUgPSBuZXcgaW50W10ge0VudW1WYWxpZGl0eS5FLkJBWiwgYWxzb0ludmFs
aWR9OwotICAgIGRlc2VyaWFsaXplZC5yZXBlYXRlZEUyID0gbmV3IGludFtdIHtpbnZhbGlkLCBh
bHNvSW52YWxpZH07Ci0gICAgZGVzZXJpYWxpemVkLnBhY2tlZEUyID0gbnVsbDsKLSAgICBkZXNl
cmlhbGl6ZWQucmVwZWF0ZWRFMyA9IG51bGw7Ci0gICAgZGVzZXJpYWxpemVkLnBhY2tlZEUzID0g
bmV3IGludFswXTsKLSAgICBNZXNzYWdlTmFuby5tZXJnZUZyb20oZGVzZXJpYWxpemVkLCBzZXJp
YWxpemVkKTsKLSAgICBhc3NlcnRFcXVhbHMoRW51bVZhbGlkaXR5LkUuQkFSLCBkZXNlcmlhbGl6
ZWQub3B0aW9uYWxFKTsKLSAgICBhc3NlcnRFcXVhbHMoYWxzb0ludmFsaWQsIGRlc2VyaWFsaXpl
ZC5kZWZhdWx0RSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKAotICAgICAgICBuZXcg
aW50W10ge0VudW1WYWxpZGl0eS5FLkJBWiwgLyogKyAqLyBFbnVtVmFsaWRpdHkuRS5GT08sIEVu
dW1WYWxpZGl0eS5FLkJBUn0sCi0gICAgICAgIGRlc2VyaWFsaXplZC5yZXBlYXRlZEUpKTsKLSAg
ICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoCi0gICAgICAgIG5ldyBpbnRbXSB7RW51bVZhbGlk
aXR5LkUuQkFaLCBhbHNvSW52YWxpZCwgLyogKyAqLyBFbnVtVmFsaWRpdHkuRS5GT08sIEVudW1W
YWxpZGl0eS5FLkJBWn0sCi0gICAgICAgIGRlc2VyaWFsaXplZC5wYWNrZWRFKSk7Ci0gICAgYXNz
ZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKAotICAgICAgICBuZXcgaW50W10ge2ludmFsaWQsIGFsc29J
bnZhbGlkLCAvKiArICovIEVudW1WYWxpZGl0eS5FLkJBUn0sCi0gICAgICAgIGRlc2VyaWFsaXpl
ZC5yZXBlYXRlZEUyKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKAotICAgICAgICBu
ZXcgaW50W10gey8qIDxudWxsPiArICovIEVudW1WYWxpZGl0eS5FLkZPT30sCi0gICAgICAgIGRl
c2VyaWFsaXplZC5wYWNrZWRFMikpOwotICAgIGFzc2VydE51bGwoZGVzZXJpYWxpemVkLnJlcGVh
dGVkRTMpOyAvLyBudWxsICsgYWxsIGludmFsaWQgPT0gbnVsbAotICAgIGFzc2VydEVxdWFscygw
LCBkZXNlcmlhbGl6ZWQucGFja2VkRTMubGVuZ3RoKTsgLy8gZW1wdHkgKyBhbGwgaW52YWxpZCA9
PSBlbXB0eQotCi0gICAgLy8gVGVzdCAzOiByZWFkaW5nIGJ5IGFsdGVybmF0aXZlIGZvcm1zCi0g
ICAgRW51bVZhbGlkaXR5LkFsdCBhbHQgPSBNZXNzYWdlTmFuby5tZXJnZUZyb20obmV3IEVudW1W
YWxpZGl0eS5BbHQoKSwgc2VyaWFsaXplZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKEVudW1WYWxpZGl0
eS5FLkJBUiwgLy8gbGFzdCB2YWxpZCB2YWx1ZSBpbiBtLnJlcGVhdGVkRTIKLSAgICAgICAgYWx0
LnJlcGVhdGVkRTJBc09wdGlvbmFsKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMobmV3
IGludFtdIHtFbnVtVmFsaWRpdHkuRS5GT099LCBhbHQucGFja2VkRTJBc05vblBhY2tlZCkpOwot
ICAgIGFzc2VydEVxdWFscygwLCBhbHQubm9uUGFja2VkRTNBc1BhY2tlZC5sZW5ndGgpOwotICB9
Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoZSBzYW1lIGFzIHtAbGluayAjdGVzdE5hbm9FbnVtVmFs
aWRpdHkoKX0gd2l0aCBhY2Nlc3NvciBzdHlsZS4gUmVwZWF0ZWQgZmllbGRzIGFyZQotICAgKiBu
b3QgcmUtdGVzdGVkIGhlcmUgYmVjYXVzZSB0aGV5IGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhlIGFj
Y2Vzc29yIHN0eWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9FbnVtVmFsaWRpdHlB
Y2Nlc3NvcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgaW52YWxpZCA9IDEy
MDsKLSAgICBmaW5hbCBpbnQgYWxzb0ludmFsaWQgPSAxMjE7Ci0KLSAgICBFbnVtVmFsaWRpdHlB
Y2Nlc3NvcnMuTSBtID0gbmV3IEVudW1WYWxpZGl0eUFjY2Vzc29ycy5NKCk7Ci0gICAgLy8gU2Fu
aXR5IGNoZWNrICYgYmFzZWxpbmUgb2YgdGhlIGFzc2VydGlvbnMgZm9yIHRoZSBmaXJzdCBjYXNl
IGJlbG93LgotICAgIGFzc2VydEVxdWFscyhFbnVtVmFsaWRpdHlBY2Nlc3NvcnMuZGVmYXVsdF8s
IG0uZ2V0T3B0aW9uYWxFKCkpOwotICAgIGFzc2VydEVxdWFscyhFbnVtVmFsaWRpdHlBY2Nlc3Nv
cnMuQkFaLCBtLmdldERlZmF1bHRFKCkpOwotCi0gICAgbS5zZXRPcHRpb25hbEUoaW52YWxpZCk7
Ci0gICAgbS5zZXREZWZhdWx0RShpbnZhbGlkKTsKLSAgICAvLyBTZXQgcmVwZWF0ZWRFMiBmb3Ig
QWx0LnJlcGVhdGVkRTJBc09wdGlvbmFsCi0gICAgbS5yZXBlYXRlZEUyID0gbmV3IGludFtdIHtp
bnZhbGlkLCBFbnVtVmFsaWRpdHlBY2Nlc3NvcnMuQkFSLCBhbHNvSW52YWxpZH07Ci0gICAgYnl0
ZVtdIHNlcmlhbGl6ZWQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtKTsKLSAgICAvLyBTYW5p
dHkgY2hlY2sgdGhhdCB3ZSBkbyBoYXZlIGFsbCBkYXRhIGluIHRoZSBieXRlIGFycmF5LgotICAg
IGFzc2VydEVxdWFscygxMCwgc2VyaWFsaXplZC5sZW5ndGgpOwotCi0gICAgLy8gVGVzdCAxOiB0
ZXN0cyB0aGF0IGludmFsaWQgdmFsdWVzIGFyZW4ndCBpbmNsdWRlZCBpbiB0aGUgZGVzZXJpYWxp
emVkIG1lc3NhZ2UuCi0gICAgRW51bVZhbGlkaXR5QWNjZXNzb3JzLk0gZGVzZXJpYWxpemVkID0K
LSAgICAgICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKG5ldyBFbnVtVmFsaWRpdHlBY2Nlc3NvcnMu
TSgpLCBzZXJpYWxpemVkKTsKLSAgICBhc3NlcnRFcXVhbHMoRW51bVZhbGlkaXR5QWNjZXNzb3Jz
LmRlZmF1bHRfLCBkZXNlcmlhbGl6ZWQuZ2V0T3B0aW9uYWxFKCkpOwotICAgIGFzc2VydEVxdWFs
cyhFbnVtVmFsaWRpdHlBY2Nlc3NvcnMuQkFaLCBkZXNlcmlhbGl6ZWQuZ2V0RGVmYXVsdEUoKSk7
Ci0KLSAgICAvLyBUZXN0IDI6IHRlc3RzIHRoYXQgaW52YWxpZCB2YWx1ZXMgZG8gbm90IG92ZXJy
aWRlIHByZXZpb3VzIHZhbHVlcyBpbiB0aGUgZmllbGQsIGluY2x1ZGluZwotICAgIC8vIHByZS1l
eGlzdGluZyBpbnZhbGlkIHZhbHVlcy4KLSAgICBkZXNlcmlhbGl6ZWQuc2V0T3B0aW9uYWxFKEVu
dW1WYWxpZGl0eUFjY2Vzc29ycy5CQVIpOwotICAgIGRlc2VyaWFsaXplZC5zZXREZWZhdWx0RShh
bHNvSW52YWxpZCk7Ci0gICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKGRlc2VyaWFsaXplZCwgc2Vy
aWFsaXplZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKEVudW1WYWxpZGl0eUFjY2Vzc29ycy5CQVIsIGRl
c2VyaWFsaXplZC5nZXRPcHRpb25hbEUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFsc29JbnZhbGlk
LCBkZXNlcmlhbGl6ZWQuZ2V0RGVmYXVsdEUoKSk7Ci0KLSAgICAvLyBUZXN0IDM6IHJlYWRpbmcg
YnkgYWx0ZXJuYXRpdmUgZm9ybXMKLSAgICBFbnVtVmFsaWRpdHlBY2Nlc3NvcnMuQWx0IGFsdCA9
Ci0gICAgICAgIE1lc3NhZ2VOYW5vLm1lcmdlRnJvbShuZXcgRW51bVZhbGlkaXR5QWNjZXNzb3Jz
LkFsdCgpLCBzZXJpYWxpemVkKTsKLSAgICBhc3NlcnRFcXVhbHMoRW51bVZhbGlkaXR5QWNjZXNz
b3JzLkJBUiwgLy8gbGFzdCB2YWxpZCB2YWx1ZSBpbiBtLnJlcGVhdGVkRTIKLSAgICAgICAgYWx0
LmdldFJlcGVhdGVkRTJBc09wdGlvbmFsKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRo
YXQgY29kZSBnZW5lcmF0aW9uIGNvcnJlY3RseSB3cmFwcyBhIHNpbmdsZSBtZXNzYWdlIGludG8g
aXRzIG91dGVyCi0gICAqIGNsYXNzLiBUaGUgY2xhc3Mge0Bjb2RlIFNpbmdsZU1lc3NhZ2VOYW5v
fSBpcyBpbXBvcnRlZCBmcm9tIHRoZSBvdXRlcgotICAgKiBjbGFzcyB7QGNvZGUgVW5pdHRlc3RT
aW5nbGVOYW5vfSwgd2hvc2UgbmFtZSBpcyBpbXBsaWNpdC4gQW55IGVycm9yIHdvdWxkCi0gICAq
IGNhdXNlIHRoaXMgbWV0aG9kIHRvIGZhaWwgY29tcGlsYXRpb24uCi0gICAqLwotICBwdWJsaWMg
dm9pZCB0ZXN0TmFub1NpbmdsZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFNpbmdsZU1lc3Nh
Z2VOYW5vIG1zZyA9IG5ldyBTaW5nbGVNZXNzYWdlTmFubygpOwotICAgIGFzc2VydE5vdE51bGwo
bXNnKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB0aGF0IGNvZGUgZ2VuZXJhdGlvbiBjb3Jy
ZWN0bHkgc2tpcHMgZ2VuZXJhdGluZyB0aGUgb3V0ZXIgY2xhc3MgaWYKLSAgICogdW5uZWNlc3Nh
cnksIGxldHRpbmcgYSBmaWxlLXNjb3BlIGVudGl0eSBoYXZlIHRoZSBzYW1lIG5hbWUuIFRoZSBj
bGFzcwotICAgKiB7QGNvZGUgTXVsdGlwbGVOYW1lQ2xhc2hOYW5vfSBzaGFyZXMgdGhlIHNhbWUg
bmFtZSB3aXRoIHRoZSBmaWxlJ3Mgb3V0ZXIKLSAgICogY2xhc3MgZGVmaW5lZCBleHBsaWNpdGx5
LCBidXQgdGhlIGZpbGUgY29udGFpbnMgbm8gb3RoZXIgZW50aXRpZXMgYW5kIGhhcwotICAgKiBq
YXZhX211bHRpcGxlX2ZpbGVzIHNldC4gQW55IGVycm9yIHdvdWxkIGNhdXNlIHRoaXMgbWV0aG9k
IHRvIGZhaWwKLSAgICogY29tcGlsYXRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TmFu
b011bHRpcGxlTmFtZUNsYXNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgTXVsdGlwbGVOYW1l
Q2xhc2hOYW5vIG1zZyA9IG5ldyBNdWx0aXBsZU5hbWVDbGFzaE5hbm8oKTsKLSAgICBtc2cuZmll
bGQgPSAwOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgY29kZSBnZW5lcmF0aW9uIGNv
cnJlY3RseSBoYW5kbGVzIGVudW1zIGluIGRpZmZlcmVudCBzY29wZXMgaW4KLSAgICogYSBzb3Vy
Y2UgZmlsZSB3aXRoIHRoZSBvcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyBzZXQgdG8gdHJ1ZS4g
QW55IGVycm9yCi0gICAqIHdvdWxkIGNhdXNlIHRoaXMgbWV0aG9kIHRvIGZhaWwgY29tcGlsYXRp
b24uCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TmFub011bHRpcGxlRW51bVNjb3BpbmcoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBGaWxlU2NvcGVFbnVtUmVmTmFubyBtc2cxID0gbmV3IEZp
bGVTY29wZUVudW1SZWZOYW5vKCk7Ci0gICAgbXNnMS5lbnVtRmllbGQgPSBVbml0dGVzdE11bHRp
cGxlTmFuby5PTkU7Ci0gICAgTWVzc2FnZVNjb3BlRW51bVJlZk5hbm8gbXNnMiA9IG5ldyBNZXNz
YWdlU2NvcGVFbnVtUmVmTmFubygpOwotICAgIG1zZzIuZW51bUZpZWxkID0gTWVzc2FnZVNjb3Bl
RW51bVJlZk5hbm8uVFdPOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgY29kZSBnZW5l
cmF0aW9uIHdpdGggbWl4ZWQgdmFsdWVzIG9mIHRoZSBqYXZhX211bHRpcGxlX2ZpbGVzCi0gICAq
IG9wdGlvbnMgYmV0d2VlbiB0aGUgbWFpbiBzb3VyY2UgZmlsZSBhbmQgdGhlIGltcG9ydGVkIHNv
dXJjZSBmaWxlcyB3b3VsZAotICAgKiBnZW5lcmF0ZSBjb3JyZWN0IHJlZmVyZW5jZXMuIEFueSBl
cnJvciB3b3VsZCBjYXVzZSB0aGlzIG1ldGhvZCB0byBmYWlsCi0gICAqIGNvbXBpbGF0aW9uLgot
ICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5hbm9NdWx0aXBsZUltcG9ydGluZ05vbk11bHRpcGxl
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVW5pdHRlc3RJbXBvcnROYW5vLkltcG9ydE1lc3Nh
Z2VOYW5vIGltcG9ydE1zZyA9IG5ldyBVbml0dGVzdEltcG9ydE5hbm8uSW1wb3J0TWVzc2FnZU5h
bm8oKTsKLSAgICBNdWx0aXBsZUltcG9ydGluZ05vbk11bHRpcGxlTmFubzEgbmFubzEgPSBuZXcg
TXVsdGlwbGVJbXBvcnRpbmdOb25NdWx0aXBsZU5hbm8xKCk7Ci0gICAgbmFubzEuZmllbGQgPSBp
bXBvcnRNc2c7Ci0gICAgTXVsdGlwbGVJbXBvcnRpbmdOb25NdWx0aXBsZU5hbm8yIG5hbm8yID0g
bmV3IE11bHRpcGxlSW1wb3J0aW5nTm9uTXVsdGlwbGVOYW5vMigpOwotICAgIG5hbm8yLm5hbm8x
ID0gbmFubzE7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub0RlZmF1bHRzKCkgdGhyb3dz
IEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtc2cgPSBuZXcgVGVzdEFsbFR5cGVz
TmFubygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgICBhc3NlcnRF
cXVhbHMoNDEsIG1zZy5kZWZhdWx0SW50MzIpOwotICAgICAgYXNzZXJ0RXF1YWxzKDQyLCBtc2cu
ZGVmYXVsdEludDY0KTsKLSAgICAgIGFzc2VydEVxdWFscyg0MywgbXNnLmRlZmF1bHRVaW50MzIp
OwotICAgICAgYXNzZXJ0RXF1YWxzKDQ0LCBtc2cuZGVmYXVsdFVpbnQ2NCk7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoLTQ1LCBtc2cuZGVmYXVsdFNpbnQzMik7Ci0gICAgICBhc3NlcnRFcXVhbHMoNDYs
IG1zZy5kZWZhdWx0U2ludDY0KTsKLSAgICAgIGFzc2VydEVxdWFscyg0NywgbXNnLmRlZmF1bHRG
aXhlZDMyKTsKLSAgICAgIGFzc2VydEVxdWFscyg0OCwgbXNnLmRlZmF1bHRGaXhlZDY0KTsKLSAg
ICAgIGFzc2VydEVxdWFscyg0OSwgbXNnLmRlZmF1bHRTZml4ZWQzMik7Ci0gICAgICBhc3NlcnRF
cXVhbHMoLTUwLCBtc2cuZGVmYXVsdFNmaXhlZDY0KTsKLSAgICAgIGFzc2VydFRydWUoNTEuNWYg
PT0gbXNnLmRlZmF1bHRGbG9hdCk7Ci0gICAgICBhc3NlcnRUcnVlKDUyLjBlMyA9PSBtc2cuZGVm
YXVsdERvdWJsZSk7Ci0gICAgICBhc3NlcnRFcXVhbHModHJ1ZSwgbXNnLmRlZmF1bHRCb29sKTsK
LSAgICAgIGFzc2VydEVxdWFscygiaGVsbG8iLCBtc2cuZGVmYXVsdFN0cmluZyk7Ci0gICAgICBh
c3NlcnRFcXVhbHMoIndvcmxkIiwgbmV3IFN0cmluZyhtc2cuZGVmYXVsdEJ5dGVzLCBJbnRlcm5h
bE5hbm8uVVRGXzgpKTsKLSAgICAgIGFzc2VydEVxdWFscygiZMO8bnlhIiwgbXNnLmRlZmF1bHRT
dHJpbmdOb25hc2NpaSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImTDvG55YWIiLCBuZXcgU3RyaW5n
KG1zZy5kZWZhdWx0Qnl0ZXNOb25hc2NpaSwgSW50ZXJuYWxOYW5vLlVURl84KSk7Ci0gICAgICBh
c3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzTmFuby5CQVIsIG1zZy5kZWZhdWx0TmVzdGVkRW51bSk7
Ci0gICAgICBhc3NlcnRFcXVhbHMoTmFub091dGVyQ2xhc3MuRk9SRUlHTl9OQU5PX0JBUiwgbXNn
LmRlZmF1bHRGb3JlaWduRW51bSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoVW5pdHRlc3RJbXBvcnRO
YW5vLklNUE9SVF9OQU5PX0JBUiwgbXNnLmRlZmF1bHRJbXBvcnRFbnVtKTsKLSAgICAgIGFzc2Vy
dEVxdWFscyhGbG9hdC5QT1NJVElWRV9JTkZJTklUWSwgbXNnLmRlZmF1bHRGbG9hdEluZik7Ci0g
ICAgICBhc3NlcnRFcXVhbHMoRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFksIG1zZy5kZWZhdWx0Rmxv
YXROZWdJbmYpOwotICAgICAgYXNzZXJ0RXF1YWxzKEZsb2F0Lk5hTiwgbXNnLmRlZmF1bHRGbG9h
dE5hbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoRG91YmxlLlBPU0lUSVZFX0lORklOSVRZLCBtc2cu
ZGVmYXVsdERvdWJsZUluZik7Ci0gICAgICBhc3NlcnRFcXVhbHMoRG91YmxlLk5FR0FUSVZFX0lO
RklOSVRZLCBtc2cuZGVmYXVsdERvdWJsZU5lZ0luZik7Ci0gICAgICBhc3NlcnRFcXVhbHMoRG91
YmxlLk5hTiwgbXNnLmRlZmF1bHREb3VibGVOYW4pOwotCi0gICAgICAvLyBEZWZhdWx0IHZhbHVl
cyBhcmUgbm90IG91dHB1dCwgZXhjZXB0IGZvciByZXF1aXJlZCBmaWVsZHMuCi0gICAgICBieXRl
IFtdIHJlc3VsdCA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgICBpbnQgbXNn
U2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAgIC8vU3lzdGVt
Lm91dC5wcmludGYoIm1zcz0lZCByZXN1bHQubGVuZ3RoPSVkXG4iLCBtc2dTZXJpYWxpemVkU2l6
ZSwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09
IDMpOwotICAgICAgYXNzZXJ0RXF1YWxzKHJlc3VsdC5sZW5ndGgsIG1zZ1NlcmlhbGl6ZWRTaXpl
KTsKLSAgICAgIG1zZy5jbGVhcigpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RE
aWZmZXJlbnRTdHJpbmdMZW5ndGhzTmFubygpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFRl
c3Qgc3RyaW5nIHNlcmlhbGl6YXRpb24gcm91bmR0cmlwIHVzaW5nIHN0cmluZ3Mgb2YgdGhlIGZv
bGxvd2luZyBsZW5ndGhzLAotICAgIC8vIHdpdGggQVNDSUkgYW5kIFVuaWNvZGUgY2hhcmFjdGVy
cyByZXF1aXJpbmcgZGlmZmVyZW50IFVURi04IGJ5dGUgY291bnRzIHBlcgotICAgIC8vIGNoYXIs
IGhlbmNlIGNhdXNpbmcgdGhlIGxlbmd0aCBkZWxpbWl0ZXIgdmFyaW50IHRvIHNvbWV0aW1lcyBy
ZXF1aXJlIG1vcmUKLSAgICAvLyBieXRlcyBmb3IgdGhlIFVuaWNvZGUgc3RyaW5ncyB0aGFuIHRo
ZSBBU0NJSSBzdHJpbmcgb2YgdGhlIHNhbWUgbGVuZ3RoLgotICAgIGludFtdIGxlbmd0aHMgPSBu
ZXcgaW50W10gewotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAo
MSA8PCA0KSAtIDEsICAvLyAxIGJ5dGUgZm9yIEFTQ0lJIGFuZCBVbmljb2RlCi0gICAgICAgICAg
ICAoMSA8PCA3KSAtIDEsICAvLyAxIGJ5dGUgZm9yIEFTQ0lJLCAyIGJ5dGVzIGZvciBVbmljb2Rl
Ci0gICAgICAgICAgICAoMSA8PCAxMSkgLSAxLCAvLyAyIGJ5dGVzIGZvciBBU0NJSSBhbmQgVW5p
Y29kZQotICAgICAgICAgICAgKDEgPDwgMTQpIC0gMSwgLy8gMiBieXRlcyBmb3IgQVNDSUksIDMg
Ynl0ZXMgZm9yIFVuaWNvZGUKLSAgICAgICAgICAgICgxIDw8IDE3KSAtIDEsIC8vIDMgYnl0ZXMg
Zm9yIEFTQ0lJIGFuZCBVbmljb2RlCi0gICAgfTsKLSAgICBmb3IgKGludCBpIDogbGVuZ3Rocykg
ewotICAgICAgdGVzdEVuY29kaW5nT2ZTdHJpbmcoJ3EnLCBpKTsgICAgICAvLyAxIGJ5dGUgcGVy
IGNoYXIKLSAgICAgIHRlc3RFbmNvZGluZ09mU3RyaW5nKCdcdTA3RkYnLCBpKTsgLy8gMiBieXRl
cyBwZXIgY2hhcgotICAgICAgdGVzdEVuY29kaW5nT2ZTdHJpbmcoJ1x1MDk4MScsIGkpOyAvLyAz
IGJ5dGVzIHBlciBjaGFyCi0gICAgfQotICB9Ci0KLSAgLyoqIFJlZ3Jlc3Npb24gdGVzdCBmb3Ig
aHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi9pc3N1ZXMvMjkyICovCi0gIHB1Ymxp
YyB2b2lkIHRlc3RDb3JyZWN0RXhjZXB0aW9uVGhyb3dXaGVuRW5jb2RpbmdTdHJpbmdzV2l0aG91
dEVub3VnaFNwYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIHRlc3RDYXNlID0g
IkZvb29vb29vbyI7Ci0gICAgYXNzZXJ0RXF1YWxzKENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8u
Y29tcHV0ZVJhd1ZhcmludDMyU2l6ZSh0ZXN0Q2FzZS5sZW5ndGgoKSksCi0gICAgICAgICAgICBD
b2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vLmNvbXB1dGVSYXdWYXJpbnQzMlNpemUodGVzdENhc2Uu
bGVuZ3RoKCkgKiAzKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExLCBDb2RlZE91dHB1dEJ5dGVCdWZm
ZXJOYW5vLmNvbXB1dGVTdHJpbmdTaXplKDEsIHRlc3RDYXNlKSk7Ci0gICAgLy8gVGFnIGlzIG9u
ZSBieXRlLCB2YXJpbnQgZGVzY3JpYmluZyBzdHJpbmcgbGVuZ3RoIGlzIDEgYnl0ZSwgc3RyaW5n
IGxlbmd0aCBpcyA5IGJ5dGVzLgotICAgIC8vIEFuIGFycmF5IG9mIHNpemUgMSB3aWxsIGNhdXNl
IGEgZmFpbHVyZSB3aGVuIHRyeWluZyB0byB3cml0ZSB0aGUgdmFyaW50LgotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMTE7IGkrKykgewotICAgICAgQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFubyBi
dWZmZXJOYW5vID0gQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5uZXdJbnN0YW5jZShuZXcgYnl0
ZVtpXSk7Ci0gICAgICB0cnkgewotICAgICAgICBidWZmZXJOYW5vLndyaXRlU3RyaW5nKDEsIHRl
c3RDYXNlKTsKLSAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIG91dCBvZiBzcGFj
ZSBleGNlcHRpb24iKTsKLSAgICAgIH0gY2F0Y2ggKENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm8u
T3V0T2ZTcGFjZUV4Y2VwdGlvbiBleHBlY3RlZCkge30KLSAgICB9Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgdGVzdEVuY29kaW5nT2ZTdHJpbmcoY2hhciBjLCBpbnQgbGVuZ3RoKSB0aHJvd3MgSW52
YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyB0
ZXN0QWxsVHlwZXNOYW5vID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBmaW5hbCBTdHJp
bmcgZnVsbFN0cmluZyA9IGZ1bGxTdHJpbmcoYywgbGVuZ3RoKTsKLSAgICB0ZXN0QWxsVHlwZXNO
YW5vLm9wdGlvbmFsU3RyaW5nID0gZnVsbFN0cmluZzsKLSAgICBmaW5hbCBUZXN0QWxsVHlwZXNO
YW5vIHJlc3VsdE5hbm8gPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIE1lc3NhZ2VOYW5v
Lm1lcmdlRnJvbShyZXN1bHROYW5vLCBNZXNzYWdlTmFuby50b0J5dGVBcnJheSh0ZXN0QWxsVHlw
ZXNOYW5vKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGZ1bGxTdHJpbmcsIHJlc3VsdE5hbm8ub3B0aW9u
YWxTdHJpbmcpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZnVsbFN0cmluZyhjaGFyIGMsIGlu
dCBsZW5ndGgpIHsKLSAgICBjaGFyW10gcmVzdWx0ID0gbmV3IGNoYXJbbGVuZ3RoXTsKLSAgICBB
cnJheXMuZmlsbChyZXN1bHQsIGMpOwotICAgIHJldHVybiBuZXcgU3RyaW5nKHJlc3VsdCk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub1dpdGhIYXNQYXJzZUZyb20oKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vSGFzIG1zZyA9IG51bGw7Ci0gICAgLy8gVGVz
dCBmYWxzZSBvbiBjcmVhdGlvbiwgYWZ0ZXIgY2xlYXIgYW5kIHVwb24gZW1wdHkgcGFyc2UuCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgIGlmIChpID09IDApIHsKLSAg
ICAgICAgbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm9IYXMoKTsKLSAgICAgIH0gZWxzZSBpZiAo
aSA9PSAxKSB7Ci0gICAgICAgIG1zZy5jbGVhcigpOwotICAgICAgfSBlbHNlIGlmIChpID09IDIp
IHsKLSAgICAgICAgbXNnID0gVGVzdEFsbFR5cGVzTmFub0hhcy5wYXJzZUZyb20obmV3IGJ5dGVb
MF0pOwotICAgICAgfQotICAgICAgYXNzZXJ0RmFsc2UobXNnLmhhc09wdGlvbmFsSW50MzIpOwot
ICAgICAgYXNzZXJ0RmFsc2UobXNnLmhhc09wdGlvbmFsU3RyaW5nKTsKLSAgICAgIGFzc2VydEZh
bHNlKG1zZy5oYXNPcHRpb25hbEJ5dGVzKTsKLSAgICAgIGFzc2VydEZhbHNlKG1zZy5oYXNPcHRp
b25hbE5lc3RlZEVudW0pOwotICAgICAgYXNzZXJ0RmFsc2UobXNnLmhhc0RlZmF1bHRJbnQzMik7
Ci0gICAgICBhc3NlcnRGYWxzZShtc2cuaGFzRGVmYXVsdFN0cmluZyk7Ci0gICAgICBhc3NlcnRG
YWxzZShtc2cuaGFzRGVmYXVsdEJ5dGVzKTsKLSAgICAgIGFzc2VydEZhbHNlKG1zZy5oYXNEZWZh
dWx0RmxvYXROYW4pOwotICAgICAgYXNzZXJ0RmFsc2UobXNnLmhhc0RlZmF1bHROZXN0ZWRFbnVt
KTsKLSAgICAgIGFzc2VydEZhbHNlKG1zZy5oYXNJZCk7Ci0gICAgICBhc3NlcnRGYWxzZShtc2cu
aGFzUmVxdWlyZWRFbnVtKTsKLSAgICAgIG1zZy5vcHRpb25hbEludDMyID0gMTIzOwotICAgICAg
bXNnLm9wdGlvbmFsTmVzdGVkTWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vSGFzLk5lc3Rl
ZE1lc3NhZ2UoKTsKLSAgICAgIG1zZy5vcHRpb25hbE5lc3RlZE1lc3NhZ2UuYmIgPSAyOwotICAg
ICAgbXNnLm9wdGlvbmFsTmVzdGVkRW51bSA9IFRlc3RBbGxUeXBlc05hbm8uQkFaOwotICAgIH0K
LQotICAgIGJ5dGUgW10gcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAg
ICBpbnQgbXNnU2VyaWFsaXplZFNpemUgPSBtc2cuZ2V0U2VyaWFsaXplZFNpemUoKTsKLSAgICAv
L1N5c3RlbS5vdXQucHJpbnRmKCJtc3M9JWQgcmVzdWx0Lmxlbmd0aD0lZFxuIiwgbXNnU2VyaWFs
aXplZFNpemUsIHJlc3VsdC5sZW5ndGgpOwotICAgIGFzc2VydFRydWUobXNnU2VyaWFsaXplZFNp
emUgPT0gMTApOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVk
U2l6ZSk7Ci0KLSAgICAvLyBIYXMgZmllbGRzIHRydWUgdXBvbiBwYXJzZS4KLSAgICBUZXN0QWxs
VHlwZXNOYW5vSGFzIG5ld01zZyA9IFRlc3RBbGxUeXBlc05hbm9IYXMucGFyc2VGcm9tKHJlc3Vs
dCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbmV3TXNnLm9wdGlvbmFsSW50MzIpOwotICAgIGFz
c2VydFRydWUobmV3TXNnLmhhc09wdGlvbmFsSW50MzIpOwotICAgIGFzc2VydEVxdWFscygyLCBu
ZXdNc2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlLmJiKTsKLSAgICBhc3NlcnRUcnVlKG5ld01zZy5v
cHRpb25hbE5lc3RlZE1lc3NhZ2UuaGFzQmIpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlw
ZXNOYW5vSGFzLkJBWiwgbmV3TXNnLm9wdGlvbmFsTmVzdGVkRW51bSk7Ci0gICAgYXNzZXJ0VHJ1
ZShuZXdNc2cuaGFzT3B0aW9uYWxOZXN0ZWRFbnVtKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRl
c3ROYW5vV2l0aEhhc1NlcmlhbGl6ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxU
eXBlc05hbm9IYXMgbXNnID0gbmV3IFRlc3RBbGxUeXBlc05hbm9IYXMoKTsKLSAgICBtc2cuaGFz
T3B0aW9uYWxJbnQzMiA9IHRydWU7Ci0gICAgbXNnLmhhc09wdGlvbmFsU3RyaW5nID0gdHJ1ZTsK
LSAgICBtc2cuaGFzT3B0aW9uYWxCeXRlcyA9IHRydWU7Ci0gICAgbXNnLm9wdGlvbmFsTmVzdGVk
TWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vSGFzLk5lc3RlZE1lc3NhZ2UoKTsKLSAgICBt
c2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlLmhhc0JiID0gdHJ1ZTsKLSAgICBtc2cuaGFzT3B0aW9u
YWxOZXN0ZWRFbnVtID0gdHJ1ZTsKLSAgICBtc2cuaGFzRGVmYXVsdEludDMyID0gdHJ1ZTsKLSAg
ICBtc2cuaGFzRGVmYXVsdFN0cmluZyA9IHRydWU7Ci0gICAgbXNnLmhhc0RlZmF1bHRCeXRlcyA9
IHRydWU7Ci0gICAgbXNnLmhhc0RlZmF1bHRGbG9hdE5hbiA9IHRydWU7Ci0gICAgbXNnLmhhc0Rl
ZmF1bHROZXN0ZWRFbnVtID0gdHJ1ZTsKLSAgICBtc2cuaGFzSWQgPSB0cnVlOwotICAgIG1zZy5o
YXNSZXF1aXJlZEVudW0gPSB0cnVlOwotCi0gICAgYnl0ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFu
by50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRT
ZXJpYWxpemVkU2l6ZSgpOwotICAgIGFzc2VydEVxdWFscyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJp
YWxpemVkU2l6ZSk7Ci0KLSAgICAvLyBOb3cgZGVzZXJpYWxpemUgYW5kIGZpbmQgdGhhdCBhbGwg
ZmllbGRzIGFyZSBzZXQgYW5kIGVxdWFsIHRvIHRoZWlyIGRlZmF1bHRzLgotICAgIFRlc3RBbGxU
eXBlc05hbm9IYXMgbmV3TXNnID0gVGVzdEFsbFR5cGVzTmFub0hhcy5wYXJzZUZyb20ocmVzdWx0
KTsKLSAgICBhc3NlcnRUcnVlKG5ld01zZy5oYXNPcHRpb25hbEludDMyKTsKLSAgICBhc3NlcnRU
cnVlKG5ld01zZy5oYXNPcHRpb25hbFN0cmluZyk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cuaGFz
T3B0aW9uYWxCeXRlcyk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cub3B0aW9uYWxOZXN0ZWRNZXNz
YWdlLmhhc0JiKTsKLSAgICBhc3NlcnRUcnVlKG5ld01zZy5oYXNPcHRpb25hbE5lc3RlZEVudW0p
OwotICAgIGFzc2VydFRydWUobmV3TXNnLmhhc0RlZmF1bHRJbnQzMik7Ci0gICAgYXNzZXJ0VHJ1
ZShuZXdNc2cuaGFzRGVmYXVsdFN0cmluZyk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cuaGFzRGVm
YXVsdEJ5dGVzKTsKLSAgICBhc3NlcnRUcnVlKG5ld01zZy5oYXNEZWZhdWx0RmxvYXROYW4pOwot
ICAgIGFzc2VydFRydWUobmV3TXNnLmhhc0RlZmF1bHROZXN0ZWRFbnVtKTsKLSAgICBhc3NlcnRU
cnVlKG5ld01zZy5oYXNJZCk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cuaGFzUmVxdWlyZWRFbnVt
KTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbmV3TXNnLm9wdGlvbmFsSW50MzIpOwotICAgIGFzc2Vy
dEVxdWFscygwLCBuZXdNc2cub3B0aW9uYWxTdHJpbmcubGVuZ3RoKCkpOwotICAgIGFzc2VydEVx
dWFscygwLCBuZXdNc2cub3B0aW9uYWxCeXRlcy5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygw
LCBuZXdNc2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlLmJiKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVz
dEFsbFR5cGVzTmFub0hhcy5GT08sIG5ld01zZy5vcHRpb25hbE5lc3RlZEVudW0pOwotICAgIGFz
c2VydEVxdWFscyg0MSwgbmV3TXNnLmRlZmF1bHRJbnQzMik7Ci0gICAgYXNzZXJ0RXF1YWxzKCJo
ZWxsbyIsIG5ld01zZy5kZWZhdWx0U3RyaW5nKTsKLSAgICBhc3NlcnRFcXVhbHMoIndvcmxkIiwg
bmV3IFN0cmluZyhuZXdNc2cuZGVmYXVsdEJ5dGVzLCBJbnRlcm5hbE5hbm8uVVRGXzgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzTmFub0hhcy5CQVIsIG5ld01zZy5kZWZhdWx0TmVz
dGVkRW51bSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEZsb2F0Lk5hTiwgbmV3TXNnLmRlZmF1bHRGbG9h
dE5hbik7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG5ld01zZy5pZCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KFRlc3RBbGxUeXBlc05hbm9IYXMuRk9PLCBuZXdNc2cucmVxdWlyZWRFbnVtKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRlc3ROYW5vV2l0aEFjY2Vzc29yc0Jhc2ljKCkgdGhyb3dzIEV4Y2VwdGlv
biB7Ci0gICAgVGVzdE5hbm9BY2Nlc3NvcnMgbXNnID0gbmV3IFRlc3ROYW5vQWNjZXNzb3JzKCk7
Ci0KLSAgICAvLyBNYWtlcyBzdXJlIHJlcXVpcmVkLCByZXBlYXRlZCwgYW5kIG1lc3NhZ2UgZmll
bGRzIGFyZSBzdGlsbCBwdWJsaWMKLSAgICBtc2cuaWQgPSAzOwotICAgIG1zZy5yZXBlYXRlZEJ5
dGVzID0gbmV3IGJ5dGVbMl1bM107Ci0gICAgbXNnLm9wdGlvbmFsTmVzdGVkTWVzc2FnZSA9IG51
bGw7Ci0KLSAgICAvLyBUZXN0IGFjY2Vzc29ycwotICAgIGFzc2VydEVxdWFscygwLCBtc2cuZ2V0
T3B0aW9uYWxJbnQzMigpKTsKLSAgICBhc3NlcnRGYWxzZShtc2cuaGFzT3B0aW9uYWxJbnQzMigp
KTsKLSAgICBtc2cuc2V0T3B0aW9uYWxJbnQzMigxMzUpOwotICAgIGFzc2VydEVxdWFscygxMzUs
IG1zZy5nZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydFRydWUobXNnLmhhc09wdGlvbmFs
SW50MzIoKSk7Ci0gICAgbXNnLmNsZWFyT3B0aW9uYWxJbnQzMigpOwotICAgIGFzc2VydEZhbHNl
KG1zZy5oYXNPcHRpb25hbEludDMyKCkpOwotICAgIG1zZy5zZXRPcHRpb25hbEludDMyKDApOyAv
LyBkZWZhdWx0IHZhbHVlCi0gICAgYXNzZXJ0VHJ1ZShtc2cuaGFzT3B0aW9uYWxJbnQzMigpKTsK
LQotICAgIC8vIFRlc3QgTlBFCi0gICAgdHJ5IHsKLSAgICAgIG1zZy5zZXRPcHRpb25hbEJ5dGVz
KG51bGwpOwotICAgICAgZmFpbCgpOwotICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9u
IGV4cGVjdGVkKSB7fQotICAgIHRyeSB7Ci0gICAgICBtc2cuc2V0T3B0aW9uYWxTdHJpbmcobnVs
bCk7Ci0gICAgICBmYWlsKCk7Ci0gICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZXhw
ZWN0ZWQpIHt9Ci0KLSAgICAvLyBUZXN0IGhhcyBiaXQgb24gYnl0ZXMgZmllbGQgd2l0aCBkZWZh
dWx0cyBhbmQgY2xlYXIoKSByZS1jbG9uZXMgdGhlIGRlZmF1bHQgYXJyYXkKLSAgICBhc3NlcnRG
YWxzZShtc2cuaGFzRGVmYXVsdEJ5dGVzKCkpOwotICAgIGJ5dGVbXSBkZWZhdWx0Qnl0ZXMgPSBt
c2cuZ2V0RGVmYXVsdEJ5dGVzKCk7Ci0gICAgbXNnLnNldERlZmF1bHRCeXRlcyhkZWZhdWx0Qnl0
ZXMpOwotICAgIGFzc2VydFRydWUobXNnLmhhc0RlZmF1bHRCeXRlcygpKTsKLSAgICBtc2cuY2xl
YXJEZWZhdWx0Qnl0ZXMoKTsKLSAgICBhc3NlcnRGYWxzZShtc2cuaGFzRGVmYXVsdEJ5dGVzKCkp
OwotICAgIGRlZmF1bHRCeXRlc1swXSsrOyAvLyBtb2RpZnkgb3JpZ2luYWwgYXJyYXkKLSAgICBh
c3NlcnRGYWxzZShBcnJheXMuZXF1YWxzKGRlZmF1bHRCeXRlcywgbXNnLmdldERlZmF1bHRCeXRl
cygpKSk7Ci0KLSAgICAvLyBUZXN0IGhhcyBiaXRzIHRoYXQgcmVxdWlyZSBhZGRpdGlvbmFsIGJp
dCBmaWVsZHMKLSAgICBhc3NlcnRGYWxzZShtc2cuaGFzQml0RmllbGRDaGVjaygpKTsKLSAgICBt
c2cuc2V0Qml0RmllbGRDaGVjaygwKTsKLSAgICBhc3NlcnRUcnVlKG1zZy5oYXNCaXRGaWVsZENo
ZWNrKCkpOwotICAgIGFzc2VydEZhbHNlKG1zZy5oYXNCZWZvcmVCaXRGaWVsZENoZWNrKCkpOyAv
LyBjaGVja3MgYml0IGZpZWxkIGRvZXMgbm90IGxlYWsKLSAgICBhc3NlcnRGYWxzZShtc2cuaGFz
QWZ0ZXJCaXRGaWVsZENoZWNrKCkpOwotCi0gICAgLy8gVGVzdCBjbGVhcigpIGNsZWFycyBoYXMg
Yml0cwotICAgIG1zZy5zZXRPcHRpb25hbFN0cmluZygiaGkiKTsKLSAgICBtc2cuc2V0RGVmYXVs
dFN0cmluZygidGhlcmUiKTsKLSAgICBtc2cuY2xlYXIoKTsKLSAgICBhc3NlcnRGYWxzZShtc2cu
aGFzT3B0aW9uYWxTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0RmFsc2UobXNnLmhhc0RlZmF1bHRTdHJp
bmcoKSk7Ci0gICAgYXNzZXJ0RmFsc2UobXNnLmhhc0JpdEZpZWxkQ2hlY2soKSk7Ci0KLSAgICAv
LyBUZXN0IHNldCgpIGFuZCBjbGVhcigpIHJldHVybnMgaXRzZWxmIChjb21waWxlcyA9IHN1Y2Nl
c3MpCi0gICAgbXNnLmNsZWFyKCkKLSAgICAgICAgLnNldE9wdGlvbmFsSW50MzIoMykKLSAgICAg
ICAgLmNsZWFyRGVmYXVsdEJ5dGVzKCkKLSAgICAgICAgLnNldE9wdGlvbmFsU3RyaW5nKCI0Iik7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TmFub1dpdGhBY2Nlc3NvcnNQYXJzZUZyb20oKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TmFub0FjY2Vzc29ycyBtc2cgPSBudWxsOwotICAg
IC8vIFRlc3QgZmFsc2Ugb24gY3JlYXRpb24sIGFmdGVyIGNsZWFyIGFuZCB1cG9uIGVtcHR5IHBh
cnNlLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICBpZiAoaSA9PSAw
KSB7Ci0gICAgICAgIG1zZyA9IG5ldyBUZXN0TmFub0FjY2Vzc29ycygpOwotICAgICAgfSBlbHNl
IGlmIChpID09IDEpIHsKLSAgICAgICAgbXNnLmNsZWFyKCk7Ci0gICAgICB9IGVsc2UgaWYgKGkg
PT0gMikgewotICAgICAgICBtc2cgPSBUZXN0TmFub0FjY2Vzc29ycy5wYXJzZUZyb20obmV3IGJ5
dGVbMF0pOwotICAgICAgfQotICAgICAgYXNzZXJ0RmFsc2UobXNnLmhhc09wdGlvbmFsSW50MzIo
KSk7Ci0gICAgICBhc3NlcnRGYWxzZShtc2cuaGFzT3B0aW9uYWxTdHJpbmcoKSk7Ci0gICAgICBh
c3NlcnRGYWxzZShtc2cuaGFzT3B0aW9uYWxCeXRlcygpKTsKLSAgICAgIGFzc2VydEZhbHNlKG1z
Zy5oYXNPcHRpb25hbE5lc3RlZEVudW0oKSk7Ci0gICAgICBhc3NlcnRGYWxzZShtc2cuaGFzRGVm
YXVsdEludDMyKCkpOwotICAgICAgYXNzZXJ0RmFsc2UobXNnLmhhc0RlZmF1bHRTdHJpbmcoKSk7
Ci0gICAgICBhc3NlcnRGYWxzZShtc2cuaGFzRGVmYXVsdEJ5dGVzKCkpOwotICAgICAgYXNzZXJ0
RmFsc2UobXNnLmhhc0RlZmF1bHRGbG9hdE5hbigpKTsKLSAgICAgIGFzc2VydEZhbHNlKG1zZy5o
YXNEZWZhdWx0TmVzdGVkRW51bSgpKTsKLSAgICAgIG1zZy5vcHRpb25hbE5lc3RlZE1lc3NhZ2Ug
PSBuZXcgVGVzdE5hbm9BY2Nlc3NvcnMuTmVzdGVkTWVzc2FnZSgpOwotICAgICAgbXNnLm9wdGlv
bmFsTmVzdGVkTWVzc2FnZS5zZXRCYigyKTsKLSAgICAgIG1zZy5zZXRPcHRpb25hbE5lc3RlZEVu
dW0oVGVzdE5hbm9BY2Nlc3NvcnMuQkFaKTsKLSAgICAgIG1zZy5zZXREZWZhdWx0SW50MzIobXNn
LmdldERlZmF1bHRJbnQzMigpKTsKLSAgICB9Ci0KLSAgICBieXRlIFtdIHJlc3VsdCA9IE1lc3Nh
Z2VOYW5vLnRvQnl0ZUFycmF5KG1zZyk7Ci0gICAgaW50IG1zZ1NlcmlhbGl6ZWRTaXplID0gbXNn
LmdldFNlcmlhbGl6ZWRTaXplKCk7Ci0gICAgLy9TeXN0ZW0ub3V0LnByaW50ZigibXNzPSVkIHJl
c3VsdC5sZW5ndGg9JWRcbiIsIG1zZ1NlcmlhbGl6ZWRTaXplLCByZXN1bHQubGVuZ3RoKTsKLSAg
ICBhc3NlcnRUcnVlKG1zZ1NlcmlhbGl6ZWRTaXplID09IDE0KTsKLSAgICBhc3NlcnRFcXVhbHMo
cmVzdWx0Lmxlbmd0aCwgbXNnU2VyaWFsaXplZFNpemUpOwotCi0gICAgLy8gSGFzIGZpZWxkcyB0
cnVlIHVwb24gcGFyc2UuCi0gICAgVGVzdE5hbm9BY2Nlc3NvcnMgbmV3TXNnID0gVGVzdE5hbm9B
Y2Nlc3NvcnMucGFyc2VGcm9tKHJlc3VsdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG5ld01zZy5v
cHRpb25hbE5lc3RlZE1lc3NhZ2UuZ2V0QmIoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cub3B0
aW9uYWxOZXN0ZWRNZXNzYWdlLmhhc0JiKCkpOwotICAgIGFzc2VydEVxdWFscyhUZXN0TmFub0Fj
Y2Vzc29ycy5CQVosIG5ld01zZy5nZXRPcHRpb25hbE5lc3RlZEVudW0oKSk7Ci0gICAgYXNzZXJ0
VHJ1ZShuZXdNc2cuaGFzT3B0aW9uYWxOZXN0ZWRFbnVtKCkpOwotCi0gICAgLy8gSGFzIGZpZWxk
IHRydWUgb24gZmllbGRzIHdpdGggZXhwbGljaXQgZGVmYXVsdCB2YWx1ZXMgZnJvbSB3aXJlLgot
ICAgIGFzc2VydFRydWUobmV3TXNnLmhhc0RlZmF1bHRJbnQzMigpKTsKLSAgICBhc3NlcnRFcXVh
bHMoNDEsIG5ld01zZy5nZXREZWZhdWx0SW50MzIoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0TmFub1dpdGhBY2Nlc3NvcnNQdWJsaWNGaWVsZFR5cGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7
Ci0gICAgVGVzdE5hbm9BY2Nlc3NvcnMgbXNnID0gbmV3IFRlc3ROYW5vQWNjZXNzb3JzKCk7Ci0g
ICAgYXNzZXJ0TnVsbChtc2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlKTsKLSAgICBhc3NlcnRFcXVh
bHMoMCwgbXNnLmlkKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbXNnLnJlcGVhdGVkTmVzdGVkRW51
bS5sZW5ndGgpOwotCi0gICAgVGVzdE5hbm9BY2Nlc3NvcnMgbmV3TXNnID0gVGVzdE5hbm9BY2Nl
c3NvcnMucGFyc2VGcm9tKE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1zZykpOwotICAgIGFzc2Vy
dE51bGwobmV3TXNnLm9wdGlvbmFsTmVzdGVkTWVzc2FnZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAs
IG5ld01zZy5pZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG5ld01zZy5yZXBlYXRlZE5lc3RlZEVu
dW0ubGVuZ3RoKTsKLQotICAgIFRlc3ROYW5vQWNjZXNzb3JzLk5lc3RlZE1lc3NhZ2UgbmVzdGVk
TWVzc2FnZSA9IG5ldyBUZXN0TmFub0FjY2Vzc29ycy5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAgbmVz
dGVkTWVzc2FnZS5zZXRCYig1KTsKLSAgICBuZXdNc2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlID0g
bmVzdGVkTWVzc2FnZTsKLSAgICBuZXdNc2cuaWQgPSAtMTsKLSAgICBuZXdNc2cucmVwZWF0ZWRO
ZXN0ZWRFbnVtID0gbmV3IGludFtdIHsgVGVzdEFsbFR5cGVzTmFuby5GT08gfTsKLQotICAgIFRl
c3ROYW5vQWNjZXNzb3JzIG5ld01zZzIgPSBUZXN0TmFub0FjY2Vzc29ycy5wYXJzZUZyb20oTWVz
c2FnZU5hbm8udG9CeXRlQXJyYXkobmV3TXNnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5lc3RlZE1l
c3NhZ2UuZ2V0QmIoKSwgbmV3TXNnMi5vcHRpb25hbE5lc3RlZE1lc3NhZ2UuZ2V0QmIoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKC0xLCBuZXdNc2cyLmlkKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFs
bFR5cGVzTmFuby5GT08sIG5ld01zZzIucmVwZWF0ZWROZXN0ZWRFbnVtWzBdKTsKLQotICAgIG5l
d01zZzIub3B0aW9uYWxOZXN0ZWRNZXNzYWdlID0gbnVsbDsKLSAgICBuZXdNc2cyLmlkID0gMDsK
LSAgICBuZXdNc2cyLnJlcGVhdGVkTmVzdGVkRW51bSA9IG51bGw7Ci0KLSAgICBUZXN0TmFub0Fj
Y2Vzc29ycyBuZXdNc2czID0gVGVzdE5hbm9BY2Nlc3NvcnMucGFyc2VGcm9tKE1lc3NhZ2VOYW5v
LnRvQnl0ZUFycmF5KG5ld01zZzIpKTsKLSAgICBhc3NlcnROdWxsKG5ld01zZzMub3B0aW9uYWxO
ZXN0ZWRNZXNzYWdlKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbmV3TXNnMy5pZCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDAsIG5ld01zZzMucmVwZWF0ZWROZXN0ZWRFbnVtLmxlbmd0aCk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0TmFub1dpdGhBY2Nlc3NvcnNTZXJpYWxpemUoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBUZXN0TmFub0FjY2Vzc29ycyBtc2cgPSBuZXcgVGVzdE5hbm9BY2Nlc3Nv
cnMoKTsKLSAgICBtc2cuc2V0T3B0aW9uYWxJbnQzMihtc2cuZ2V0T3B0aW9uYWxJbnQzMigpKTsK
LSAgICBtc2cuc2V0T3B0aW9uYWxTdHJpbmcobXNnLmdldE9wdGlvbmFsU3RyaW5nKCkpOwotICAg
IG1zZy5zZXRPcHRpb25hbEJ5dGVzKG1zZy5nZXRPcHRpb25hbEJ5dGVzKCkpOwotICAgIFRlc3RO
YW5vQWNjZXNzb3JzLk5lc3RlZE1lc3NhZ2UgbmVzdGVkTWVzc2FnZSA9IG5ldyBUZXN0TmFub0Fj
Y2Vzc29ycy5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAgbmVzdGVkTWVzc2FnZS5zZXRCYihuZXN0ZWRN
ZXNzYWdlLmdldEJiKCkpOwotICAgIG1zZy5vcHRpb25hbE5lc3RlZE1lc3NhZ2UgPSBuZXN0ZWRN
ZXNzYWdlOwotICAgIG1zZy5zZXRPcHRpb25hbE5lc3RlZEVudW0obXNnLmdldE9wdGlvbmFsTmVz
dGVkRW51bSgpKTsKLSAgICBtc2cuc2V0RGVmYXVsdEludDMyKG1zZy5nZXREZWZhdWx0SW50MzIo
KSk7Ci0gICAgbXNnLnNldERlZmF1bHRTdHJpbmcobXNnLmdldERlZmF1bHRTdHJpbmcoKSk7Ci0g
ICAgbXNnLnNldERlZmF1bHRCeXRlcyhtc2cuZ2V0RGVmYXVsdEJ5dGVzKCkpOwotICAgIG1zZy5z
ZXREZWZhdWx0RmxvYXROYW4obXNnLmdldERlZmF1bHRGbG9hdE5hbigpKTsKLSAgICBtc2cuc2V0
RGVmYXVsdE5lc3RlZEVudW0obXNnLmdldERlZmF1bHROZXN0ZWRFbnVtKCkpOwotCi0gICAgYnl0
ZSBbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwotICAgIGludCBtc2dT
ZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIGFzc2VydEVxdWFs
cyhyZXN1bHQubGVuZ3RoLCBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0KLSAgICAvLyBOb3cgZGVzZXJp
YWxpemUgYW5kIGZpbmQgdGhhdCBhbGwgZmllbGRzIGFyZSBzZXQgYW5kIGVxdWFsIHRvIHRoZWly
IGRlZmF1bHRzLgotICAgIFRlc3ROYW5vQWNjZXNzb3JzIG5ld01zZyA9IFRlc3ROYW5vQWNjZXNz
b3JzLnBhcnNlRnJvbShyZXN1bHQpOwotICAgIGFzc2VydFRydWUobmV3TXNnLmhhc09wdGlvbmFs
SW50MzIoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdNc2cuaGFzT3B0aW9uYWxTdHJpbmcoKSk7Ci0g
ICAgYXNzZXJ0VHJ1ZShuZXdNc2cuaGFzT3B0aW9uYWxCeXRlcygpKTsKLSAgICBhc3NlcnRUcnVl
KG5ld01zZy5vcHRpb25hbE5lc3RlZE1lc3NhZ2UuaGFzQmIoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShu
ZXdNc2cuaGFzT3B0aW9uYWxOZXN0ZWRFbnVtKCkpOwotICAgIGFzc2VydFRydWUobmV3TXNnLmhh
c0RlZmF1bHRJbnQzMigpKTsKLSAgICBhc3NlcnRUcnVlKG5ld01zZy5oYXNEZWZhdWx0U3RyaW5n
KCkpOwotICAgIGFzc2VydFRydWUobmV3TXNnLmhhc0RlZmF1bHRCeXRlcygpKTsKLSAgICBhc3Nl
cnRUcnVlKG5ld01zZy5oYXNEZWZhdWx0RmxvYXROYW4oKSk7Ci0gICAgYXNzZXJ0VHJ1ZShuZXdN
c2cuaGFzRGVmYXVsdE5lc3RlZEVudW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG5ld01zZy5n
ZXRPcHRpb25hbEludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygwLCBuZXdNc2cuZ2V0T3B0aW9u
YWxTdHJpbmcoKS5sZW5ndGgoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG5ld01zZy5nZXRPcHRp
b25hbEJ5dGVzKCkubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbmV3TXNnLm9wdGlvbmFs
TmVzdGVkTWVzc2FnZS5nZXRCYigpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdE5hbm9BY2Nlc3Nv
cnMuRk9PLCBuZXdNc2cuZ2V0T3B0aW9uYWxOZXN0ZWRFbnVtKCkpOwotICAgIGFzc2VydEVxdWFs
cyg0MSwgbmV3TXNnLmdldERlZmF1bHRJbnQzMigpKTsKLSAgICBhc3NlcnRFcXVhbHMoImhlbGxv
IiwgbmV3TXNnLmdldERlZmF1bHRTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJ3b3JsZCIs
IG5ldyBTdHJpbmcobmV3TXNnLmdldERlZmF1bHRCeXRlcygpLCBJbnRlcm5hbE5hbm8uVVRGXzgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdE5hbm9BY2Nlc3NvcnMuQkFSLCBuZXdNc2cuZ2V0RGVm
YXVsdE5lc3RlZEVudW0oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEZsb2F0Lk5hTiwgbmV3TXNnLmdl
dERlZmF1bHRGbG9hdE5hbigpKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwgbmV3TXNnLmlkKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRlc3ROYW5vSmF2YUVudW1TdHlsZSgpIHRocm93cyBFeGNlcHRp
b24gewotICAgIEVudW1DbGFzc05hbm9zLkVudW1DbGFzc05hbm8gbXNnID0gbmV3IEVudW1DbGFz
c05hbm9zLkVudW1DbGFzc05hbm8oKTsKLSAgICBhc3NlcnRFcXVhbHMoRW51bUNsYXNzTmFub3Mu
RmlsZVNjb3BlRW51bS5PTkUsIG1zZy5vbmUpOwotICAgIGFzc2VydEVxdWFscyhFbnVtQ2xhc3NO
YW5vcy5FbnVtQ2xhc3NOYW5vLk1lc3NhZ2VTY29wZUVudW0uVFdPLCBtc2cudHdvKTsKLQotICAg
IEVudW1DbGFzc05hbm9NdWx0aXBsZSBtc2cyID0gbmV3IEVudW1DbGFzc05hbm9NdWx0aXBsZSgp
OwotICAgIGFzc2VydEVxdWFscyhGaWxlU2NvcGVFbnVtTXVsdGlwbGUuVEhSRUUsIG1zZzIudGhy
ZWUpOwotICAgIGFzc2VydEVxdWFscyhFbnVtQ2xhc3NOYW5vTXVsdGlwbGUuTWVzc2FnZVNjb3Bl
RW51bU11bHRpcGxlLkZPVVIsIG1zZzIuZm91cik7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMg
dGhhdCBmaWVsZHMgd2l0aCBhIGRlZmF1bHQgdmFsdWUgb2YgTmFOIGFyZSBub3Qgc2VyaWFsaXpl
ZCB3aGVuCi0gICAqIHNldCB0byBOYU4uIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgYXMgTmFOICE9
IE5hTiwgc28gbm9ybWFsIGVxdWFsaXR5Ci0gICAqIGNoZWNrcyBkb24ndCB3b3JrLgotICAgKi8K
LSAgcHVibGljIHZvaWQgdGVzdE5hbm9Ob3RBTnVtYmVyRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7
Ci0gICAgbXNnLmRlZmF1bHREb3VibGVOYW4gPSAwOwotICAgIG1zZy5kZWZhdWx0RmxvYXROYW4g
PSAwOwotICAgIGJ5dGVbXSByZXN1bHQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtc2cpOwot
ICAgIGludCBtc2dTZXJpYWxpemVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAg
IGFzc2VydFRydWUocmVzdWx0Lmxlbmd0aCA9PSBtc2dTZXJpYWxpemVkU2l6ZSk7Ci0gICAgYXNz
ZXJ0VHJ1ZShtc2dTZXJpYWxpemVkU2l6ZSA+IDMpOwotCi0gICAgbXNnLmRlZmF1bHREb3VibGVO
YW4gPSBEb3VibGUuTmFOOwotICAgIG1zZy5kZWZhdWx0RmxvYXROYW4gPSBGbG9hdC5OYU47Ci0g
ICAgcmVzdWx0ID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobXNnKTsKLSAgICBtc2dTZXJpYWxp
emVkU2l6ZSA9IG1zZy5nZXRTZXJpYWxpemVkU2l6ZSgpOwotICAgIGFzc2VydEVxdWFscygzLCBy
ZXN1bHQubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgbXNnU2VyaWFsaXplZFNpemUpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgdGhhdCBhIGJ1ZyBpbiBza2lwUmF3Qnl0ZXMoKSBoYXMg
YmVlbiBmaXhlZDogIGlmIHRoZSBza2lwIHNraXBzCi0gICAqIGV4YWN0bHkgdXAgdG8gYSBsaW1p
dCwgdGhpcyBzaG91bGQgbm90IGJyZWFrIHRoaW5ncy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRl
c3RTa2lwUmF3Qnl0ZXNCdWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBieXRlW10gcmF3Qnl0
ZXMgPSBuZXcgYnl0ZVtdIHsgMSwgMiB9OwotICAgIENvZGVkSW5wdXRCeXRlQnVmZmVyTmFubyBp
bnB1dCA9IENvZGVkSW5wdXRCeXRlQnVmZmVyTmFuby5uZXdJbnN0YW5jZShyYXdCeXRlcyk7Ci0K
LSAgICBpbnQgbGltaXQgPSBpbnB1dC5wdXNoTGltaXQoMSk7Ci0gICAgaW5wdXQuc2tpcFJhd0J5
dGVzKDEpOwotICAgIGlucHV0LnBvcExpbWl0KGxpbWl0KTsKLSAgICBhc3NlcnRFcXVhbHMoMiwg
aW5wdXQucmVhZFJhd0J5dGUoKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCB0aGF0IGEgYnVn
IGluIHNraXBSYXdCeXRlcygpIGhhcyBiZWVuIGZpeGVkOiAgaWYgdGhlIHNraXAgc2tpcHMKLSAg
ICogcGFzdCB0aGUgZW5kIG9mIGEgYnVmZmVyIHdpdGggYSBsaW1pdCB0aGF0IGhhcyBiZWVuIHNl
dCBwYXN0IHRoZSBlbmQgb2YKLSAgICogdGhhdCBidWZmZXIsIHRoaXMgc2hvdWxkIG5vdCBicmVh
ayB0aGluZ3MuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2tpcFJhd0J5dGVzUGFzdEVuZE9m
QnVmZmVyV2l0aExpbWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYnl0ZVtdIHJhd0J5dGVz
ID0gbmV3IGJ5dGVbXSB7IDEsIDIsIDMsIDQsIDUgfTsKLSAgICBDb2RlZElucHV0Qnl0ZUJ1ZmZl
ck5hbm8gaW5wdXQgPSBDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8ubmV3SW5zdGFuY2UocmF3Qnl0
ZXMpOwotCi0gICAgaW50IGxpbWl0ID0gaW5wdXQucHVzaExpbWl0KDQpOwotICAgIC8vIEluIG9y
ZGVyIHRvIGV4cG9zZSB0aGUgYnVnIHdlIG5lZWQgdG8gcmVhZCBhdCBsZWFzdCBvbmUgYnl0ZSB0
byBwcmltZSB0aGUKLSAgICAvLyBidWZmZXIgaW5zaWRlIHRoZSBDb2RlZElucHV0U3RyZWFtLgot
ICAgIGFzc2VydEVxdWFscygxLCBpbnB1dC5yZWFkUmF3Qnl0ZSgpKTsKLSAgICAvLyBTa2lwIHRv
IHRoZSBlbmQgb2YgdGhlIGxpbWl0LgotICAgIGlucHV0LnNraXBSYXdCeXRlcygzKTsKLSAgICBh
c3NlcnRUcnVlKGlucHV0LmlzQXRFbmQoKSk7Ci0gICAgaW5wdXQucG9wTGltaXQobGltaXQpOwot
ICAgIGFzc2VydEVxdWFscyg1LCBpbnB1dC5yZWFkUmF3Qnl0ZSgpKTsKLSAgfQotCi0gIC8vIFRl
c3QgYSBzbWF0dGVyaW5nIG9mIHZhcmlvdXMgcHJvdG8gdHlwZXMgZm9yIHByaW50aW5nCi0gIHB1
YmxpYyB2b2lkIHRlc3RNZXNzYWdlTmFub1ByaW50ZXIoKSB7Ci0gICAgVGVzdEFsbFR5cGVzTmFu
byBtc2cgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIG1zZy5vcHRpb25hbEludDMyID0g
MTQ7Ci0gICAgbXNnLm9wdGlvbmFsRmxvYXQgPSA0Mi4zZjsKLSAgICBtc2cub3B0aW9uYWxTdHJp
bmcgPSAiU3RyaW5nIFwid2l0aCcgYm90aCBxdW90ZXMiOwotICAgIG1zZy5vcHRpb25hbEJ5dGVz
ID0gbmV3IGJ5dGVbXSB7JyInLCAnXDAnLCAxLCA4fTsKLSAgICBtc2cub3B0aW9uYWxHcm91cCA9
IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk9wdGlvbmFsR3JvdXAoKTsKLSAgICBtc2cub3B0aW9uYWxH
cm91cC5hID0gMTU7Ci0gICAgbXNnLnJlcGVhdGVkSW50NjQgPSBuZXcgbG9uZ1syXTsKLSAgICBt
c2cucmVwZWF0ZWRJbnQ2NFswXSA9IDFMOwotICAgIG1zZy5yZXBlYXRlZEludDY0WzFdID0gLTFM
OwotICAgIG1zZy5yZXBlYXRlZEJ5dGVzID0gbmV3IGJ5dGVbMl1bXTsKLSAgICBtc2cucmVwZWF0
ZWRCeXRlc1sxXSA9IG5ldyBieXRlW10geydoJywgJ2UnLCAnbCcsICdsJywgJ28nfTsKLSAgICBt
c2cucmVwZWF0ZWRHcm91cCA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLlJlcGVhdGVkR3JvdXBbMl07
Ci0gICAgbXNnLnJlcGVhdGVkR3JvdXBbMF0gPSBuZXcgVGVzdEFsbFR5cGVzTmFuby5SZXBlYXRl
ZEdyb3VwKCk7Ci0gICAgbXNnLnJlcGVhdGVkR3JvdXBbMF0uYSA9IC0yNzsKLSAgICBtc2cucmVw
ZWF0ZWRHcm91cFsxXSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLlJlcGVhdGVkR3JvdXAoKTsKLSAg
ICBtc2cucmVwZWF0ZWRHcm91cFsxXS5hID0gLTcyOwotICAgIG1zZy5vcHRpb25hbE5lc3RlZE1l
c3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAgbXNnLm9w
dGlvbmFsTmVzdGVkTWVzc2FnZS5iYiA9IDc7Ci0gICAgbXNnLnJlcGVhdGVkTmVzdGVkTWVzc2Fn
ZSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2VbMl07Ci0gICAgbXNnLnJlcGVh
dGVkTmVzdGVkTWVzc2FnZVswXSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2Uo
KTsKLSAgICBtc2cucmVwZWF0ZWROZXN0ZWRNZXNzYWdlWzBdLmJiID0gNzc7Ci0gICAgbXNnLnJl
cGVhdGVkTmVzdGVkTWVzc2FnZVsxXSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3Nh
Z2UoKTsKLSAgICBtc2cucmVwZWF0ZWROZXN0ZWRNZXNzYWdlWzFdLmJiID0gODg7Ci0gICAgbXNn
Lm9wdGlvbmFsTmVzdGVkRW51bSA9IFRlc3RBbGxUeXBlc05hbm8uQkFaOwotICAgIG1zZy5yZXBl
YXRlZE5lc3RlZEVudW0gPSBuZXcgaW50WzJdOwotICAgIG1zZy5yZXBlYXRlZE5lc3RlZEVudW1b
MF0gPSBUZXN0QWxsVHlwZXNOYW5vLkJBUjsKLSAgICBtc2cucmVwZWF0ZWROZXN0ZWRFbnVtWzFd
ID0gVGVzdEFsbFR5cGVzTmFuby5GT087Ci0gICAgbXNnLnJlcGVhdGVkU3RyaW5nUGllY2UgPSBu
ZXcgU3RyaW5nW10ge251bGwsICJ3b3JsZCJ9OwotICAgIG1zZy5zZXRPbmVvZlN0cmluZygiaGVs
bG8iKTsKLQotICAgIFN0cmluZyBwcm90b1ByaW50ID0gbXNnLnRvU3RyaW5nKCk7Ci0gICAgYXNz
ZXJ0VHJ1ZShwcm90b1ByaW50LmNvbnRhaW5zKCJvcHRpb25hbF9pbnQzMjogMTQiKSk7Ci0gICAg
YXNzZXJ0VHJ1ZShwcm90b1ByaW50LmNvbnRhaW5zKCJvcHRpb25hbF9mbG9hdDogNDIuMyIpKTsK
LSAgICBhc3NlcnRUcnVlKHByb3RvUHJpbnQuY29udGFpbnMoIm9wdGlvbmFsX2RvdWJsZTogMC4w
IikpOwotICAgIGFzc2VydFRydWUocHJvdG9QcmludC5jb250YWlucygib3B0aW9uYWxfc3RyaW5n
OiBcIlN0cmluZyBcXHUwMDIyd2l0aFxcdTAwMjcgYm90aCBxdW90ZXNcIiIpKTsKLSAgICBhc3Nl
cnRUcnVlKHByb3RvUHJpbnQuY29udGFpbnMoIm9wdGlvbmFsX2J5dGVzOiBcIlxcXCJcXDAwMFxc
MDAxXFwwMTBcIiIpKTsKLSAgICBhc3NlcnRUcnVlKHByb3RvUHJpbnQuY29udGFpbnMoIm9wdGlv
bmFsX2dyb3VwIDxcbiAgYTogMTVcbj4iKSk7Ci0KLSAgICBhc3NlcnRUcnVlKHByb3RvUHJpbnQu
Y29udGFpbnMoInJlcGVhdGVkX2ludDY0OiAxXG5yZXBlYXRlZF9pbnQ2NDogLTEiKSk7Ci0gICAg
YXNzZXJ0RmFsc2UocHJvdG9QcmludC5jb250YWlucygicmVwZWF0ZWRfYnl0ZXM6IFwiXCIiKSk7
IC8vIG51bGwgc2hvdWxkIGJlIGRyb3BwZWQKLSAgICBhc3NlcnRUcnVlKHByb3RvUHJpbnQuY29u
dGFpbnMoInJlcGVhdGVkX2J5dGVzOiBcImhlbGxvXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShwcm90
b1ByaW50LmNvbnRhaW5zKCJyZXBlYXRlZF9ncm91cCA8XG4gIGE6IC0yN1xuPlxuIgotICAgICAg
ICAgICAgKyAicmVwZWF0ZWRfZ3JvdXAgPFxuICBhOiAtNzJcbj4iKSk7Ci0gICAgYXNzZXJ0VHJ1
ZShwcm90b1ByaW50LmNvbnRhaW5zKCJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSA8XG4gIGJiOiA3
XG4+IikpOwotICAgIGFzc2VydFRydWUocHJvdG9QcmludC5jb250YWlucygicmVwZWF0ZWRfbmVz
dGVkX21lc3NhZ2UgPFxuICBiYjogNzdcbj5cbiIKLSAgICAgICAgICAgICsgInJlcGVhdGVkX25l
c3RlZF9tZXNzYWdlIDxcbiAgYmI6IDg4XG4+IikpOwotICAgIGFzc2VydFRydWUocHJvdG9Qcmlu
dC5jb250YWlucygib3B0aW9uYWxfbmVzdGVkX2VudW06IDMiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShw
cm90b1ByaW50LmNvbnRhaW5zKCJyZXBlYXRlZF9uZXN0ZWRfZW51bTogMlxucmVwZWF0ZWRfbmVz
dGVkX2VudW06IDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShwcm90b1ByaW50LmNvbnRhaW5zKCJkZWZh
dWx0X2ludDMyOiA0MSIpKTsKLSAgICBhc3NlcnRUcnVlKHByb3RvUHJpbnQuY29udGFpbnMoImRl
ZmF1bHRfc3RyaW5nOiBcImhlbGxvXCIiKSk7Ci0gICAgYXNzZXJ0RmFsc2UocHJvdG9QcmludC5j
b250YWlucygicmVwZWF0ZWRfc3RyaW5nX3BpZWNlOiBcIlwiIikpOyAgLy8gbnVsbCBzaG91bGQg
YmUgZHJvcHBlZAotICAgIGFzc2VydFRydWUocHJvdG9QcmludC5jb250YWlucygicmVwZWF0ZWRf
c3RyaW5nX3BpZWNlOiBcIndvcmxkXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShwcm90b1ByaW50LmNv
bnRhaW5zKCJvbmVvZl9zdHJpbmc6IFwiaGVsbG9cIiIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHRlc3RNZXNzYWdlTmFub1ByaW50ZXJBY2Nlc3NvcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBUZXN0TmFub0FjY2Vzc29ycyBtc2cgPSBuZXcgVGVzdE5hbm9BY2Nlc3NvcnMoKTsKLSAgICBt
c2cuc2V0T3B0aW9uYWxJbnQzMigxMyk7Ci0gICAgbXNnLnNldE9wdGlvbmFsU3RyaW5nKCJmb28i
KTsKLSAgICBtc2cuc2V0T3B0aW9uYWxCeXRlcyhuZXcgYnl0ZVtdIHsnIicsICdcMCcsIDEsIDh9
KTsKLSAgICBtc2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlID0gbmV3IFRlc3ROYW5vQWNjZXNzb3Jz
Lk5lc3RlZE1lc3NhZ2UoKTsKLSAgICBtc2cub3B0aW9uYWxOZXN0ZWRNZXNzYWdlLnNldEJiKDcp
OwotICAgIG1zZy5zZXRPcHRpb25hbE5lc3RlZEVudW0oVGVzdE5hbm9BY2Nlc3NvcnMuQkFaKTsK
LSAgICBtc2cucmVwZWF0ZWRJbnQzMiA9IG5ldyBpbnRbXSB7IDEsIC0xIH07Ci0gICAgbXNnLnJl
cGVhdGVkU3RyaW5nID0gbmV3IFN0cmluZ1tdIHsgIkhlbGxvIiwgIndvcmxkIiB9OwotICAgIG1z
Zy5yZXBlYXRlZEJ5dGVzID0gbmV3IGJ5dGVbMl1bXTsKLSAgICBtc2cucmVwZWF0ZWRCeXRlc1sx
XSA9IG5ldyBieXRlW10geydoJywgJ2UnLCAnbCcsICdsJywgJ28nfTsKLSAgICBtc2cucmVwZWF0
ZWROZXN0ZWRNZXNzYWdlID0gbmV3IFRlc3ROYW5vQWNjZXNzb3JzLk5lc3RlZE1lc3NhZ2VbMl07
Ci0gICAgbXNnLnJlcGVhdGVkTmVzdGVkTWVzc2FnZVswXSA9IG5ldyBUZXN0TmFub0FjY2Vzc29y
cy5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAgbXNnLnJlcGVhdGVkTmVzdGVkTWVzc2FnZVswXS5zZXRC
Yig1KTsKLSAgICBtc2cucmVwZWF0ZWROZXN0ZWRNZXNzYWdlWzFdID0gbmV3IFRlc3ROYW5vQWNj
ZXNzb3JzLk5lc3RlZE1lc3NhZ2UoKTsKLSAgICBtc2cucmVwZWF0ZWROZXN0ZWRNZXNzYWdlWzFd
LnNldEJiKDYpOwotICAgIG1zZy5yZXBlYXRlZE5lc3RlZEVudW0gPSBuZXcgaW50W10geyBUZXN0
TmFub0FjY2Vzc29ycy5GT08sIFRlc3ROYW5vQWNjZXNzb3JzLkJBUiB9OwotICAgIG1zZy5pZCA9
IDMzOwotCi0gICAgU3RyaW5nIHByb3RvUHJpbnQgPSBtc2cudG9TdHJpbmcoKTsKLSAgICBhc3Nl
cnRUcnVlKHByb3RvUHJpbnQuY29udGFpbnMoIm9wdGlvbmFsX2ludDMyOiAxMyIpKTsKLSAgICBh
c3NlcnRUcnVlKHByb3RvUHJpbnQuY29udGFpbnMoIm9wdGlvbmFsX3N0cmluZzogXCJmb29cIiIp
KTsKLSAgICBhc3NlcnRUcnVlKHByb3RvUHJpbnQuY29udGFpbnMoIm9wdGlvbmFsX2J5dGVzOiBc
IlxcXCJcXDAwMFxcMDAxXFwwMTBcIiIpKTsKLSAgICBhc3NlcnRUcnVlKHByb3RvUHJpbnQuY29u
dGFpbnMoIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIDxcbiAgYmI6IDdcbj4iKSk7Ci0gICAgYXNz
ZXJ0VHJ1ZShwcm90b1ByaW50LmNvbnRhaW5zKCJvcHRpb25hbF9uZXN0ZWRfZW51bTogMyIpKTsK
LSAgICBhc3NlcnRUcnVlKHByb3RvUHJpbnQuY29udGFpbnMoInJlcGVhdGVkX2ludDMyOiAxXG5y
ZXBlYXRlZF9pbnQzMjogLTEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShwcm90b1ByaW50LmNvbnRhaW5z
KCJyZXBlYXRlZF9zdHJpbmc6IFwiSGVsbG9cIlxucmVwZWF0ZWRfc3RyaW5nOiBcIndvcmxkXCIi
KSk7Ci0gICAgYXNzZXJ0RmFsc2UocHJvdG9QcmludC5jb250YWlucygicmVwZWF0ZWRfYnl0ZXM6
IFwiXCIiKSk7IC8vIG51bGwgc2hvdWxkIGJlIGRyb3BwZWQKLSAgICBhc3NlcnRUcnVlKHByb3Rv
UHJpbnQuY29udGFpbnMoInJlcGVhdGVkX2J5dGVzOiBcImhlbGxvXCIiKSk7Ci0gICAgYXNzZXJ0
VHJ1ZShwcm90b1ByaW50LmNvbnRhaW5zKCJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSA8XG4gIGJi
OiA1XG4+XG4iCi0gICAgICAgICAgICArICJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSA8XG4gIGJi
OiA2XG4+IikpOwotICAgIGFzc2VydFRydWUocHJvdG9QcmludC5jb250YWlucygicmVwZWF0ZWRf
bmVzdGVkX2VudW06IDFcbnJlcGVhdGVkX25lc3RlZF9lbnVtOiAyIikpOwotICAgIGFzc2VydFRy
dWUocHJvdG9QcmludC5jb250YWlucygiaWQ6IDMzIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
dGVzdE1lc3NhZ2VOYW5vUHJpbnRlckZvck1hcHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBU
ZXN0TWFwIG1zZyA9IG5ldyBUZXN0TWFwKCk7Ci0gICAgTWVzc2FnZVZhbHVlIG1zZ1ZhbHVlc1td
ID0gbmV3IE1lc3NhZ2VWYWx1ZVtdIHsKLSAgICAgIG5ldyBNZXNzYWdlVmFsdWUoKSwgbmV3IE1l
c3NhZ2VWYWx1ZSgpCi0gICAgfTsKLSAgICBtc2dWYWx1ZXNbMF0udmFsdWUgPSAxOwotICAgIG1z
Z1ZhbHVlc1sxXS52YWx1ZSA9IDI7Ci0gICAgbXNnLmludDMyVG9CeXRlc0ZpZWxkID0gbmV3IEhh
c2hNYXA8SW50ZWdlciwgYnl0ZVtdPigpOwotICAgIG1zZy5pbnQzMlRvQnl0ZXNGaWVsZC5wdXQo
MSwgbmV3IGJ5dGVbXSB7JyInLCAnXDAnfSk7Ci0gICAgbXNnLmludDMyVG9CeXRlc0ZpZWxkLnB1
dCgyLCBuZXcgYnl0ZVtdIHsxLCA4fSk7Ci0gICAgbXNnLnN0cmluZ1RvSW50MzJGaWVsZCA9IG5l
dyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKLSAgICBtc2cuc3RyaW5nVG9JbnQzMkZpZWxk
LnB1dCgiaGVsbG8iLCAxKTsKLSAgICBtc2cuc3RyaW5nVG9JbnQzMkZpZWxkLnB1dCgid29ybGQi
LCAyKTsKLSAgICBtc2cuaW50MzJUb01lc3NhZ2VGaWVsZCA9IG5ldyBIYXNoTWFwPEludGVnZXIs
IE1hcFRlc3RQcm90by5UZXN0TWFwLk1lc3NhZ2VWYWx1ZT4oKTsKLSAgICBtc2cuaW50MzJUb01l
c3NhZ2VGaWVsZC5wdXQoMCwgbXNnVmFsdWVzWzBdKTsKLSAgICBtc2cuaW50MzJUb01lc3NhZ2VG
aWVsZC5wdXQoMSwgbXNnVmFsdWVzWzFdKTsKLSAgICBtc2cuaW50MzJUb0VudW1GaWVsZCA9IG5l
dyBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7Ci0gICAgbXNnLmludDMyVG9FbnVtRmllbGQu
cHV0KDEsIDIpOwotICAgIG1zZy5pbnQzMlRvRW51bUZpZWxkLnB1dCgyLCAzKTsKLSAgICBTdHJp
bmcgcHJvdG9QcmludCA9IG1zZy50b1N0cmluZygpOwotCi0gICAgYXNzZXJ0VHJ1ZShwcm90b1By
aW50LmNvbnRhaW5zKAotICAgICAgICAiaW50MzJfdG9fYnl0ZXNfZmllbGQgPFxuICBrZXk6IDFc
biAgdmFsdWU6IFwiXFxcIlxcMDAwXCJcbj4iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShwcm90b1ByaW50
LmNvbnRhaW5zKAotICAgICAgICAiaW50MzJfdG9fYnl0ZXNfZmllbGQgPFxuICBrZXk6IDJcbiAg
dmFsdWU6IFwiXFwwMDFcXDAxMFwiXG4+IikpOwotICAgIGFzc2VydFRydWUocHJvdG9QcmludC5j
b250YWlucygKLSAgICAgICAgInN0cmluZ190b19pbnQzMl9maWVsZCA8XG4gIGtleTogXCJoZWxs
b1wiXG4gIHZhbHVlOiAxXG4+IikpOwotICAgIGFzc2VydFRydWUocHJvdG9QcmludC5jb250YWlu
cygKLSAgICAgICAgInN0cmluZ190b19pbnQzMl9maWVsZCA8XG4gIGtleTogXCJ3b3JsZFwiXG4g
IHZhbHVlOiAyXG4+IikpOwotICAgIGFzc2VydFRydWUocHJvdG9QcmludC5jb250YWlucygKLSAg
ICAgICAgImludDMyX3RvX21lc3NhZ2VfZmllbGQgPFxuICBrZXk6IDBcbiAgdmFsdWUgPFxuICAg
IHZhbHVlOiAxXG4iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShwcm90b1ByaW50LmNvbnRhaW5zKAotICAg
ICAgICAiaW50MzJfdG9fbWVzc2FnZV9maWVsZCA8XG4gIGtleTogMVxuICB2YWx1ZSA8XG4gICAg
dmFsdWU6IDJcbiIpKTsKLSAgICBhc3NlcnRUcnVlKHByb3RvUHJpbnQuY29udGFpbnMoCi0gICAg
ICAgICJpbnQzMl90b19lbnVtX2ZpZWxkIDxcbiAga2V5OiAxXG4gIHZhbHVlOiAyXG4+IikpOwot
ICAgIGFzc2VydFRydWUocHJvdG9QcmludC5jb250YWlucygKLSAgICAgICAgImludDMyX3RvX2Vu
dW1fZmllbGQgPFxuICBrZXk6IDJcbiAgdmFsdWU6IDNcbj4iKSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCB0ZXN0RXh0ZW5zaW9ucygpIHRocm93cyBFeGNlcHRpb24gewotICAgIEV4dGVuc2lvbnMu
RXh0ZW5kYWJsZU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBFeHRlbnNpb25zLkV4dGVuZGFibGVNZXNz
YWdlKCk7Ci0gICAgbWVzc2FnZS5maWVsZCA9IDU7Ci0gICAgaW50W10gaW50MzJzID0gezEsIDJ9
OwotICAgIGludFtdIHVpbnQzMnMgPSB7MywgNH07Ci0gICAgaW50W10gc2ludDMycyA9IHstNSwg
LTZ9OwotICAgIGxvbmdbXSBpbnQ2NHMgPSB7NywgOH07Ci0gICAgbG9uZ1tdIHVpbnQ2NHMgPSB7
OSwgMTB9OwotICAgIGxvbmdbXSBzaW50NjRzID0gey0xMSwgLTEyfTsKLSAgICBpbnRbXSBmaXhl
ZDMycyA9IHsxMywgMTR9OwotICAgIGludFtdIHNmaXhlZDMycyA9IHstMTUsIC0xNn07Ci0gICAg
bG9uZ1tdIGZpeGVkNjRzID0gezE3LCAxOH07Ci0gICAgbG9uZ1tdIHNmaXhlZDY0cyA9IHstMTks
IC0yMH07Ci0gICAgYm9vbGVhbltdIGJvb2xzID0ge3RydWUsIGZhbHNlfTsKLSAgICBmbG9hdFtd
IGZsb2F0cyA9IHsyLjFmLCAyLjJmfTsKLSAgICBkb3VibGVbXSBkb3VibGVzID0gezIuMywgMi40
fTsKLSAgICBpbnRbXSBlbnVtcyA9IHtFeHRlbnNpb25zLlNFQ09ORF9WQUxVRSwgRXh0ZW5zaW9u
cy5GSVJTVF9WQUxVRX07Ci0gICAgU3RyaW5nW10gc3RyaW5ncyA9IHsidmlqZmVudHdpbnRpZyIs
ICJ0d2VudHktc2l4In07Ci0gICAgYnl0ZVtdW10gYnl0ZXNzID0ge3syLCA3fSwgezIsIDh9fTsK
LSAgICBBbm90aGVyTWVzc2FnZSBhbm90aGVyMSA9IG5ldyBBbm90aGVyTWVzc2FnZSgpOwotICAg
IGFub3RoZXIxLnN0cmluZyA9ICJlciBzaGkgaml1IjsKLSAgICBhbm90aGVyMS52YWx1ZSA9IGZh
bHNlOwotICAgIEFub3RoZXJNZXNzYWdlIGFub3RoZXIyID0gbmV3IEFub3RoZXJNZXNzYWdlKCk7
Ci0gICAgYW5vdGhlcjIuc3RyaW5nID0gInRyZW50ZSI7Ci0gICAgYW5vdGhlcjIudmFsdWUgPSB0
cnVlOwotICAgIEFub3RoZXJNZXNzYWdlW10gbWVzc2FnZXMgPSB7YW5vdGhlcjEsIGFub3RoZXIy
fTsKLSAgICBSZXBlYXRlZEV4dGVuc2lvbnMuUmVwZWF0ZWRHcm91cCBncm91cDEgPSBuZXcgUmVw
ZWF0ZWRFeHRlbnNpb25zLlJlcGVhdGVkR3JvdXAoKTsKLSAgICBncm91cDEuYSA9IDMxOwotICAg
IFJlcGVhdGVkRXh0ZW5zaW9ucy5SZXBlYXRlZEdyb3VwIGdyb3VwMiA9IG5ldyBSZXBlYXRlZEV4
dGVuc2lvbnMuUmVwZWF0ZWRHcm91cCgpOwotICAgIGdyb3VwMi5hID0gMzI7Ci0gICAgUmVwZWF0
ZWRFeHRlbnNpb25zLlJlcGVhdGVkR3JvdXBbXSBncm91cHMgPSB7Z3JvdXAxLCBncm91cDJ9Owot
ICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5y
ZXBlYXRlZEludDMyKSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNp
b25zLnJlcGVhdGVkSW50MzIsIGludDMycyk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4
dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRJbnQzMikpOwotICAgIGFzc2VydEZh
bHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFVpbnQz
MikpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRl
ZFVpbnQzMiwgdWludDMycyk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihS
ZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRVaW50MzIpKTsKLSAgICBtZXNzYWdlLnNldEV4dGVu
c2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRTaW50MzIsIHNpbnQzMnMpOwotICAgIGFz
c2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRl
ZEludDY0KSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJl
cGVhdGVkSW50NjQsIGludDY0cyk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lv
bihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRJbnQ2NCkpOwotICAgIGFzc2VydEZhbHNlKG1l
c3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFVpbnQ2NCkpOwot
ICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFVpbnQ2
NCwgdWludDY0cyk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihSZXBlYXRl
ZEV4dGVuc2lvbnMucmVwZWF0ZWRVaW50NjQpKTsKLSAgICBhc3NlcnRGYWxzZShtZXNzYWdlLmhh
c0V4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRTaW50NjQpKTsKLSAgICBtZXNz
YWdlLnNldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRTaW50NjQsIHNpbnQ2
NHMpOwotICAgIGFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNp
b25zLnJlcGVhdGVkU2ludDY0KSk7Ci0gICAgYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNp
b24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkRml4ZWQzMikpOwotICAgIG1lc3NhZ2Uuc2V0
RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEZpeGVkMzIsIGZpeGVkMzJzKTsK
LSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5y
ZXBlYXRlZEZpeGVkMzIpKTsKLSAgICBhc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihS
ZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRTZml4ZWQzMikpOwotICAgIG1lc3NhZ2Uuc2V0RXh0
ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNmaXhlZDMyLCBzZml4ZWQzMnMpOwot
ICAgIGFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJl
cGVhdGVkU2ZpeGVkMzIpKTsKLSAgICBhc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVuc2lvbihS
ZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRGaXhlZDY0KSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRl
bnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkRml4ZWQ2NCwgZml4ZWQ2NHMpOwotICAg
IGFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVh
dGVkRml4ZWQ2NCkpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVh
dGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNmaXhlZDY0KSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNp
b24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkU2ZpeGVkNjQsIHNmaXhlZDY0cyk7Ci0gICAg
YXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0
ZWRTZml4ZWQ2NCkpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVh
dGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEJvb2wpKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihS
ZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRCb29sLCBib29scyk7Ci0gICAgYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRCb29sKSk7Ci0g
ICAgYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJl
cGVhdGVkRmxvYXQpKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lv
bnMucmVwZWF0ZWRGbG9hdCwgZmxvYXRzKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0
ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEZsb2F0KSk7Ci0gICAgYXNzZXJ0RmFs
c2UobWVzc2FnZS5oYXNFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkRG91Ymxl
KSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVk
RG91YmxlLCBkb3VibGVzKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJl
cGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZERvdWJsZSkpOwotICAgIGFzc2VydEZhbHNlKG1lc3Nh
Z2UuaGFzRXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEVudW0pKTsKLSAgICBt
ZXNzYWdlLnNldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRFbnVtLCBlbnVt
cyk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lv
bnMucmVwZWF0ZWRFbnVtKSk7Ci0gICAgYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24o
UmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkU3RyaW5nKSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRl
bnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkU3RyaW5nLCBzdHJpbmdzKTsKLSAgICBh
c3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRl
ZFN0cmluZykpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVhdGVk
RXh0ZW5zaW9ucy5yZXBlYXRlZEJ5dGVzKSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oUmVw
ZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkQnl0ZXMsIGJ5dGVzcyk7Ci0gICAgYXNzZXJ0VHJ1ZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRCeXRlcykpOwot
ICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5y
ZXBlYXRlZE1lc3NhZ2UpKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVu
c2lvbnMucmVwZWF0ZWRNZXNzYWdlLCBtZXNzYWdlcyk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdl
Lmhhc0V4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRNZXNzYWdlKSk7Ci0gICAg
YXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVh
dGVkR3JvdXApKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMu
cmVwZWF0ZWRHcm91cCwgZ3JvdXBzKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5z
aW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEdyb3VwKSk7Ci0KLSAgICBieXRlW10gZGF0
YSA9IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1lc3NhZ2UpOwotICAgIG1lc3NhZ2UgPSBFeHRl
bnNpb25zLkV4dGVuZGFibGVNZXNzYWdlLnBhcnNlRnJvbShkYXRhKTsKLSAgICBhc3NlcnRFcXVh
bHMoNSwgbWVzc2FnZS5maWVsZCk7Ci0KLSAgICAvLyBUZXN0IHJlYWRpbmcgYmFjayB1c2luZyBT
aW5ndWxhckV4dGVuc2lvbnM6IHRoZSByZXRyaWV2ZWQgdmFsdWUgc2hvdWxkIGVxdWFsIHRoZSBs
YXN0Ci0gICAgLy8gaW4gZWFjaCBhcnJheS4KLSAgICBhc3NlcnRFcXVhbHMoaW50MzJzWzFdLCAo
aW50KSBtZXNzYWdlLmdldEV4dGVuc2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZUludDMyKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKHVpbnQzMnNbMV0sIChpbnQpIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KFNpbmd1bGFyRXh0ZW5zaW9ucy5zb21lVWludDMyKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbnQz
MnNbMV0sIChpbnQpIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFNpbmd1bGFyRXh0ZW5zaW9ucy5zb21l
U2ludDMyKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGludDY0c1sxXSwgKGxvbmcpIG1lc3NhZ2UuZ2V0
RXh0ZW5zaW9uKFNpbmd1bGFyRXh0ZW5zaW9ucy5zb21lSW50NjQpKTsKLSAgICBhc3NlcnRFcXVh
bHModWludDY0c1sxXSwgKGxvbmcpIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFNpbmd1bGFyRXh0ZW5z
aW9ucy5zb21lVWludDY0KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNpbnQ2NHNbMV0sIChsb25nKSBt
ZXNzYWdlLmdldEV4dGVuc2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZVNpbnQ2NCkpOwotICAg
IGFzc2VydEVxdWFscyhmaXhlZDMyc1sxXSwgKGludCkgbWVzc2FnZS5nZXRFeHRlbnNpb24oU2lu
Z3VsYXJFeHRlbnNpb25zLnNvbWVGaXhlZDMyKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNmaXhlZDMy
c1sxXSwgKGludCkgbWVzc2FnZS5nZXRFeHRlbnNpb24oU2luZ3VsYXJFeHRlbnNpb25zLnNvbWVT
Zml4ZWQzMikpOwotICAgIGFzc2VydEVxdWFscyhmaXhlZDY0c1sxXSwgKGxvbmcpIG1lc3NhZ2Uu
Z2V0RXh0ZW5zaW9uKFNpbmd1bGFyRXh0ZW5zaW9ucy5zb21lRml4ZWQ2NCkpOwotICAgIGFzc2Vy
dEVxdWFscyhzZml4ZWQ2NHNbMV0sIChsb25nKSBtZXNzYWdlLmdldEV4dGVuc2lvbihTaW5ndWxh
ckV4dGVuc2lvbnMuc29tZVNmaXhlZDY0KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGJvb2xzWzFdLCAo
Ym9vbGVhbikgbWVzc2FnZS5nZXRFeHRlbnNpb24oU2luZ3VsYXJFeHRlbnNpb25zLnNvbWVCb29s
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGZsb2F0c1sxXSwgKGZsb2F0KSBtZXNzYWdlLmdldEV4dGVu
c2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZUZsb2F0KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGRv
dWJsZXNbMV0sIChkb3VibGUpIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFNpbmd1bGFyRXh0ZW5zaW9u
cy5zb21lRG91YmxlKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVudW1zWzFdLCAoaW50KSBtZXNzYWdl
LmdldEV4dGVuc2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZUVudW0pKTsKLSAgICBhc3NlcnRF
cXVhbHMoc3RyaW5nc1sxXSwgbWVzc2FnZS5nZXRFeHRlbnNpb24oU2luZ3VsYXJFeHRlbnNpb25z
LnNvbWVTdHJpbmcpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoYnl0ZXNzWzFdLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZUJ5dGVzKSkpOwotICAg
IEFub3RoZXJNZXNzYWdlIGRlc2VyaWFsaXplZE1lc3NhZ2UgPSBtZXNzYWdlLmdldEV4dGVuc2lv
bihTaW5ndWxhckV4dGVuc2lvbnMuc29tZU1lc3NhZ2UpOwotICAgIGFzc2VydEVxdWFscyhhbm90
aGVyMi5zdHJpbmcsIGRlc2VyaWFsaXplZE1lc3NhZ2Uuc3RyaW5nKTsKLSAgICBhc3NlcnRFcXVh
bHMoYW5vdGhlcjIudmFsdWUsIGRlc2VyaWFsaXplZE1lc3NhZ2UudmFsdWUpOwotICAgIGFzc2Vy
dEVxdWFscyhncm91cDIuYSwgbWVzc2FnZS5nZXRFeHRlbnNpb24oU2luZ3VsYXJFeHRlbnNpb25z
LnNvbWVHcm91cCkuYSk7Ci0KLSAgICAvLyBUZXN0IHJlYWRpbmcgYmFjayB1c2luZyBSZXBlYXRl
ZEV4dGVuc2lvbnM6IHRoZSBhcnJheXMgc2hvdWxkIGJlIGVxdWFsLgotICAgIG1lc3NhZ2UgPSBF
eHRlbnNpb25zLkV4dGVuZGFibGVNZXNzYWdlLnBhcnNlRnJvbShkYXRhKTsKLSAgICBhc3NlcnRF
cXVhbHMoNSwgbWVzc2FnZS5maWVsZCk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKGlu
dDMycywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkSW50
MzIpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKHVpbnQzMnMsIG1lc3NhZ2UuZ2V0
RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFVpbnQzMikpKTsKLSAgICBhc3Nl
cnRUcnVlKEFycmF5cy5lcXVhbHMoc2ludDMycywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0
ZWRFeHRlbnNpb25zLnJlcGVhdGVkU2ludDMyKSkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVx
dWFscyhpbnQ2NHMsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBl
YXRlZEludDY0KSkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyh1aW50NjRzLCBtZXNz
YWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRVaW50NjQpKSk7Ci0g
ICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKHNpbnQ2NHMsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNpbnQ2NCkpKTsKLSAgICBhc3NlcnRUcnVlKEFy
cmF5cy5lcXVhbHMoZml4ZWQzMnMsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5z
aW9ucy5yZXBlYXRlZEZpeGVkMzIpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKHNm
aXhlZDMycywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVk
U2ZpeGVkMzIpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKGZpeGVkNjRzLCBtZXNz
YWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRGaXhlZDY0KSkpOwot
ICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhzZml4ZWQ2NHMsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNmaXhlZDY0KSkpOwotICAgIGFzc2VydFRy
dWUoQXJyYXlzLmVxdWFscyhib29scywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRl
bnNpb25zLnJlcGVhdGVkQm9vbCkpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoZmxv
YXRzLCBtZXNzYWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRGbG9h
dCkpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoZG91YmxlcywgbWVzc2FnZS5nZXRF
eHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkRG91YmxlKSkpOwotICAgIGFzc2Vy
dFRydWUoQXJyYXlzLmVxdWFscyhlbnVtcywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRF
eHRlbnNpb25zLnJlcGVhdGVkRW51bSkpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMo
c3RyaW5ncywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVk
U3RyaW5nKSkpOwotICAgIGJ5dGVbXVtdIGRlc2VyaWFsaXplZFJlcGVhdGVkQnl0ZXMgPSBtZXNz
YWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRCeXRlcyk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDIsIGRlc2VyaWFsaXplZFJlcGVhdGVkQnl0ZXMubGVuZ3RoKTsKLSAgICBh
c3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoYnl0ZXNzWzBdLCBkZXNlcmlhbGl6ZWRSZXBlYXRlZEJ5
dGVzWzBdKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKGJ5dGVzc1sxXSwgZGVzZXJp
YWxpemVkUmVwZWF0ZWRCeXRlc1sxXSkpOwotICAgIEFub3RoZXJNZXNzYWdlW10gZGVzZXJpYWxp
emVkUmVwZWF0ZWRNZXNzYWdlID0KLSAgICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0
ZWRFeHRlbnNpb25zLnJlcGVhdGVkTWVzc2FnZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGRlc2Vy
aWFsaXplZFJlcGVhdGVkTWVzc2FnZS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscyhhbm90aGVy
MS5zdHJpbmcsIGRlc2VyaWFsaXplZFJlcGVhdGVkTWVzc2FnZVswXS5zdHJpbmcpOwotICAgIGFz
c2VydEVxdWFscyhhbm90aGVyMS52YWx1ZSwgZGVzZXJpYWxpemVkUmVwZWF0ZWRNZXNzYWdlWzBd
LnZhbHVlKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5vdGhlcjIuc3RyaW5nLCBkZXNlcmlhbGl6ZWRS
ZXBlYXRlZE1lc3NhZ2VbMV0uc3RyaW5nKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5vdGhlcjIudmFs
dWUsIGRlc2VyaWFsaXplZFJlcGVhdGVkTWVzc2FnZVsxXS52YWx1ZSk7Ci0gICAgUmVwZWF0ZWRF
eHRlbnNpb25zLlJlcGVhdGVkR3JvdXBbXSBkZXNlcmlhbGl6ZWRSZXBlYXRlZEdyb3VwID0KLSAg
ICAgICAgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkR3Jv
dXApOwotICAgIGFzc2VydEVxdWFscygyLCBkZXNlcmlhbGl6ZWRSZXBlYXRlZEdyb3VwLmxlbmd0
aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGdyb3VwMS5hLCBkZXNlcmlhbGl6ZWRSZXBlYXRlZEdyb3Vw
WzBdLmEpOwotICAgIGFzc2VydEVxdWFscyhncm91cDIuYSwgZGVzZXJpYWxpemVkUmVwZWF0ZWRH
cm91cFsxXS5hKTsKLQotICAgIG1lc3NhZ2UgPSBFeHRlbnNpb25zLkV4dGVuZGFibGVNZXNzYWdl
LnBhcnNlRnJvbShkYXRhKTsKLSAgICBhc3NlcnRFcXVhbHMoNSwgbWVzc2FnZS5maWVsZCk7Ci0g
ICAgLy8gVGVzdCBoYXNFeHRlbnNpb24gdXNpbmcgUGFja2VkRXh0ZW5zaW9ucy4KLSAgICBhc3Nl
cnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2VkSW50MzIp
KTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMu
cGFja2VkVWludDMyKSk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihQYWNr
ZWRFeHRlbnNpb25zLnBhY2tlZFNpbnQzMikpOwotICAgIGFzc2VydFRydWUobWVzc2FnZS5oYXNF
eHRlbnNpb24oUGFja2VkRXh0ZW5zaW9ucy5wYWNrZWRJbnQ2NCkpOwotICAgIGFzc2VydFRydWUo
bWVzc2FnZS5oYXNFeHRlbnNpb24oUGFja2VkRXh0ZW5zaW9ucy5wYWNrZWRVaW50NjQpKTsKLSAg
ICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2Vk
U2ludDY0KSk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lvbihQYWNrZWRFeHRl
bnNpb25zLnBhY2tlZEZpeGVkMzIpKTsKLSAgICBhc3NlcnRUcnVlKG1lc3NhZ2UuaGFzRXh0ZW5z
aW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2VkU2ZpeGVkMzIpKTsKLSAgICBhc3NlcnRUcnVlKG1l
c3NhZ2UuaGFzRXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2VkRml4ZWQ2NCkpOwotICAg
IGFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oUGFja2VkRXh0ZW5zaW9ucy5wYWNrZWRT
Zml4ZWQ2NCkpOwotICAgIGFzc2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oUGFja2VkRXh0
ZW5zaW9ucy5wYWNrZWRCb29sKSk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdlLmhhc0V4dGVuc2lv
bihQYWNrZWRFeHRlbnNpb25zLnBhY2tlZEZsb2F0KSk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXNzYWdl
Lmhhc0V4dGVuc2lvbihQYWNrZWRFeHRlbnNpb25zLnBhY2tlZERvdWJsZSkpOwotICAgIGFzc2Vy
dFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oUGFja2VkRXh0ZW5zaW9ucy5wYWNrZWRFbnVtKSk7
Ci0KLSAgICAvLyBUZXN0IHJlYWRpbmcgYmFjayB1c2luZyBQYWNrZWRFeHRlbnNpb25zOiB0aGUg
YXJyYXlzIHNob3VsZCBiZSBlcXVhbCwgZXZlbiB0aGUgZmllbGRzCi0gICAgLy8gYXJlIG5vbi1w
YWNrZWQuCi0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKGludDMycywgbWVzc2FnZS5nZXRF
eHRlbnNpb24oUGFja2VkRXh0ZW5zaW9ucy5wYWNrZWRJbnQzMikpKTsKLSAgICBhc3NlcnRUcnVl
KEFycmF5cy5lcXVhbHModWludDMycywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUGFja2VkRXh0ZW5z
aW9ucy5wYWNrZWRVaW50MzIpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKHNpbnQz
MnMsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2VkU2ludDMyKSkp
OwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhpbnQ2NHMsIG1lc3NhZ2UuZ2V0RXh0ZW5z
aW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2VkSW50NjQpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJh
eXMuZXF1YWxzKHVpbnQ2NHMsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMu
cGFja2VkVWludDY0KSkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhzaW50NjRzLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbihQYWNrZWRFeHRlbnNpb25zLnBhY2tlZFNpbnQ2NCkpKTsKLSAg
ICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoZml4ZWQzMnMsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KFBhY2tlZEV4dGVuc2lvbnMucGFja2VkRml4ZWQzMikpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5
cy5lcXVhbHMoc2ZpeGVkMzJzLCBtZXNzYWdlLmdldEV4dGVuc2lvbihQYWNrZWRFeHRlbnNpb25z
LnBhY2tlZFNmaXhlZDMyKSkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhmaXhlZDY0
cywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUGFja2VkRXh0ZW5zaW9ucy5wYWNrZWRGaXhlZDY0KSkp
OwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhzZml4ZWQ2NHMsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2VkU2ZpeGVkNjQpKSk7Ci0gICAgYXNzZXJ0VHJ1
ZShBcnJheXMuZXF1YWxzKGJvb2xzLCBtZXNzYWdlLmdldEV4dGVuc2lvbihQYWNrZWRFeHRlbnNp
b25zLnBhY2tlZEJvb2wpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKGZsb2F0cywg
bWVzc2FnZS5nZXRFeHRlbnNpb24oUGFja2VkRXh0ZW5zaW9ucy5wYWNrZWRGbG9hdCkpKTsKLSAg
ICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoZG91YmxlcywgbWVzc2FnZS5nZXRFeHRlbnNpb24o
UGFja2VkRXh0ZW5zaW9ucy5wYWNrZWREb3VibGUpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMu
ZXF1YWxzKGVudW1zLCBtZXNzYWdlLmdldEV4dGVuc2lvbihQYWNrZWRFeHRlbnNpb25zLnBhY2tl
ZEVudW0pKSk7Ci0KLSAgICAvLyBOb3cgc2V0IHRoZSBwYWNrYWJsZSBleHRlbnNpb24gdmFsdWVz
IHVzaW5nIFBhY2tlZEV4dGVuc2lvbnMgc28gdGhleSdyZSBzZXJpYWxpemVkIHBhY2tlZC4KLSAg
ICBtZXNzYWdlLnNldEV4dGVuc2lvbihQYWNrZWRFeHRlbnNpb25zLnBhY2tlZEludDMyLCBpbnQz
MnMpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2VkVWlu
dDMyLCB1aW50MzJzKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihQYWNrZWRFeHRlbnNpb25z
LnBhY2tlZFNpbnQzMiwgc2ludDMycyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oUGFja2Vk
RXh0ZW5zaW9ucy5wYWNrZWRJbnQ2NCwgaW50NjRzKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lv
bihQYWNrZWRFeHRlbnNpb25zLnBhY2tlZFVpbnQ2NCwgdWludDY0cyk7Ci0gICAgbWVzc2FnZS5z
ZXRFeHRlbnNpb24oUGFja2VkRXh0ZW5zaW9ucy5wYWNrZWRTaW50NjQsIHNpbnQ2NHMpOwotICAg
IG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2VkRml4ZWQzMiwgZml4
ZWQzMnMpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2Vk
U2ZpeGVkMzIsIHNmaXhlZDMycyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24oUGFja2VkRXh0
ZW5zaW9ucy5wYWNrZWRGaXhlZDY0LCBmaXhlZDY0cyk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNp
b24oUGFja2VkRXh0ZW5zaW9ucy5wYWNrZWRTZml4ZWQ2NCwgc2ZpeGVkNjRzKTsKLSAgICBtZXNz
YWdlLnNldEV4dGVuc2lvbihQYWNrZWRFeHRlbnNpb25zLnBhY2tlZEJvb2wsIGJvb2xzKTsKLSAg
ICBtZXNzYWdlLnNldEV4dGVuc2lvbihQYWNrZWRFeHRlbnNpb25zLnBhY2tlZEZsb2F0LCBmbG9h
dHMpOwotICAgIG1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFBhY2tlZEV4dGVuc2lvbnMucGFja2VkRG91
YmxlLCBkb3VibGVzKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihQYWNrZWRFeHRlbnNpb25z
LnBhY2tlZEVudW0sIGVudW1zKTsKLQotICAgIC8vIEFuZCByZWFkIGJhY2sgdXNpbmcgbm9uLXBh
Y2tlZCBSZXBlYXRlZEV4dGVuc2lvbnMuCi0gICAgYnl0ZVtdIGRhdGEyID0gTWVzc2FnZU5hbm8u
dG9CeXRlQXJyYXkobWVzc2FnZSk7Ci0gICAgbWVzc2FnZSA9IE1lc3NhZ2VOYW5vLm1lcmdlRnJv
bShuZXcgRXh0ZW5zaW9ucy5FeHRlbmRhYmxlTWVzc2FnZSgpLCBkYXRhMik7Ci0gICAgYXNzZXJ0
VHJ1ZShBcnJheXMuZXF1YWxzKGludDMycywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRF
eHRlbnNpb25zLnJlcGVhdGVkSW50MzIpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxz
KHVpbnQzMnMsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRl
ZFVpbnQzMikpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoc2ludDMycywgbWVzc2Fn
ZS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkU2ludDMyKSkpOwotICAg
IGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhpbnQ2NHMsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJl
cGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEludDY0KSkpOwotICAgIGFzc2VydFRydWUoQXJyYXlz
LmVxdWFscyh1aW50NjRzLCBtZXNzYWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMu
cmVwZWF0ZWRVaW50NjQpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKHNpbnQ2NHMs
IG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNpbnQ2NCkp
KTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoZml4ZWQzMnMsIG1lc3NhZ2UuZ2V0RXh0
ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEZpeGVkMzIpKSk7Ci0gICAgYXNzZXJ0
VHJ1ZShBcnJheXMuZXF1YWxzKHNmaXhlZDMycywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0
ZWRFeHRlbnNpb25zLnJlcGVhdGVkU2ZpeGVkMzIpKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMu
ZXF1YWxzKGZpeGVkNjRzLCBtZXNzYWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMu
cmVwZWF0ZWRGaXhlZDY0KSkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhzZml4ZWQ2
NHMsIG1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNmaXhl
ZDY0KSkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhib29scywgbWVzc2FnZS5nZXRF
eHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkQm9vbCkpKTsKLSAgICBhc3NlcnRU
cnVlKEFycmF5cy5lcXVhbHMoZmxvYXRzLCBtZXNzYWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4
dGVuc2lvbnMucmVwZWF0ZWRGbG9hdCkpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMo
ZG91YmxlcywgbWVzc2FnZS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVk
RG91YmxlKSkpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhlbnVtcywgbWVzc2FnZS5n
ZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVkRW51bSkpKTsKLQotICAgIC8v
IENsb25lIHRoZSBtZXNzYWdlIGFuZCBlbnN1cmUgaXQncyBzdGlsbCBlcXVhbC4KLSAgICBFeHRl
bnNpb25zLkV4dGVuZGFibGVNZXNzYWdlIGNsb25lID0gbWVzc2FnZS5jbG9uZSgpOwotICAgIGFz
c2VydEVxdWFscyhjbG9uZSwgbWVzc2FnZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TnVs
bEV4dGVuc2lvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBDaGVjayB0aGF0IGNsZWFy
aW5nIHRoZSBleHRlbnNpb24gb24gYW4gZW1wdHkgbWVzc2FnZSBpcyBhIG5vLW9wLgotICAgIEV4
dGVuc2lvbnMuRXh0ZW5kYWJsZU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBFeHRlbnNpb25zLkV4dGVu
ZGFibGVNZXNzYWdlKCk7Ci0gICAgYXNzZXJ0RmFsc2UobWVzc2FnZS5oYXNFeHRlbnNpb24oU2lu
Z3VsYXJFeHRlbnNpb25zLnNvbWVNZXNzYWdlKSk7Ci0gICAgbWVzc2FnZS5zZXRFeHRlbnNpb24o
U2luZ3VsYXJFeHRlbnNpb25zLnNvbWVNZXNzYWdlLCBudWxsKTsKLSAgICBhc3NlcnRGYWxzZSht
ZXNzYWdlLmhhc0V4dGVuc2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZU1lc3NhZ2UpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMCwgTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobWVzc2FnZSkubGVuZ3Ro
KTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2UgaXMgZW1wdHkgYWZ0ZXIgc2V0dGlu
ZyBhbmQgY2xlYXJpbmcgYW4gZXh0ZW5zaW9uLgotICAgIEFub3RoZXJNZXNzYWdlIGFub3RoZXIg
PSBuZXcgQW5vdGhlck1lc3NhZ2UoKTsKLSAgICBhc3NlcnRGYWxzZShtZXNzYWdlLmhhc0V4dGVu
c2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZU1lc3NhZ2UpKTsKLSAgICBtZXNzYWdlLnNldEV4
dGVuc2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZU1lc3NhZ2UsIGFub3RoZXIpOwotICAgIGFz
c2VydFRydWUobWVzc2FnZS5oYXNFeHRlbnNpb24oU2luZ3VsYXJFeHRlbnNpb25zLnNvbWVNZXNz
YWdlKSk7Ci0gICAgYXNzZXJ0VHJ1ZShNZXNzYWdlTmFuby50b0J5dGVBcnJheShtZXNzYWdlKS5s
ZW5ndGggPiAwKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihTaW5ndWxhckV4dGVuc2lvbnMu
c29tZU1lc3NhZ2UsIG51bGwpOwotICAgIGFzc2VydEZhbHNlKG1lc3NhZ2UuaGFzRXh0ZW5zaW9u
KFNpbmd1bGFyRXh0ZW5zaW9ucy5zb21lTWVzc2FnZSkpOwotICAgIGFzc2VydEVxdWFscygwLCBN
ZXNzYWdlTmFuby50b0J5dGVBcnJheShtZXNzYWdlKS5sZW5ndGgpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgdGVzdEV4dGVuc2lvbnNNdXRhdGlvbigpIHsKLSAgICBFeHRlbnNpb25zLkV4dGVuZGFi
bGVNZXNzYWdlIGV4dGVuZGFibGVNZXNzYWdlID0gbmV3IEV4dGVuc2lvbnMuRXh0ZW5kYWJsZU1l
c3NhZ2UoKTsKLSAgICBleHRlbmRhYmxlTWVzc2FnZS5zZXRFeHRlbnNpb24oU2luZ3VsYXJFeHRl
bnNpb25zLnNvbWVNZXNzYWdlLAotICAgICAgICBuZXcgRXh0ZW5zaW9ucy5Bbm90aGVyTWVzc2Fn
ZSgpKTsKLQotICAgIGV4dGVuZGFibGVNZXNzYWdlLmdldEV4dGVuc2lvbihTaW5ndWxhckV4dGVu
c2lvbnMuc29tZU1lc3NhZ2UpLnN0cmluZyA9ICJub3QgZW1wdHkiOwotCi0gICAgYXNzZXJ0RXF1
YWxzKCJub3QgZW1wdHkiLAotICAgICAgICBleHRlbmRhYmxlTWVzc2FnZS5nZXRFeHRlbnNpb24o
U2luZ3VsYXJFeHRlbnNpb25zLnNvbWVNZXNzYWdlKS5zdHJpbmcpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgdGVzdEV4dGVuc2lvbnNNdXRhdGlvbl9FcXVhbHMoKSB0aHJvd3MgSW52YWxpZFByb3Rv
Y29sQnVmZmVyTmFub0V4Y2VwdGlvbiB7Ci0gICAgRXh0ZW5zaW9ucy5FeHRlbmRhYmxlTWVzc2Fn
ZSBleHRlbmRhYmxlTWVzc2FnZSA9IG5ldyBFeHRlbnNpb25zLkV4dGVuZGFibGVNZXNzYWdlKCk7
Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2UuZmllbGQgPSA1OwotICAgIGludCBpbnQzMiA9IDQyOwot
ICAgIGludFtdIHVpbnQzMnMgPSB7MywgNH07Ci0gICAgaW50W10gc2ludDMycyA9IHstNSwgLTZ9
OwotICAgIGxvbmdbXSBpbnQ2NHMgPSB7NywgOH07Ci0gICAgbG9uZ1tdIHVpbnQ2NHMgPSB7OSwg
MTB9OwotICAgIGxvbmdbXSBzaW50NjRzID0gey0xMSwgLTEyfTsKLSAgICBpbnRbXSBmaXhlZDMy
cyA9IHsxMywgMTR9OwotICAgIGludFtdIHNmaXhlZDMycyA9IHstMTUsIC0xNn07Ci0gICAgbG9u
Z1tdIGZpeGVkNjRzID0gezE3LCAxOH07Ci0gICAgbG9uZ1tdIHNmaXhlZDY0cyA9IHstMTksIC0y
MH07Ci0gICAgYm9vbGVhbltdIGJvb2xzID0ge3RydWUsIGZhbHNlfTsKLSAgICBmbG9hdFtdIGZs
b2F0cyA9IHsyLjFmLCAyLjJmfTsKLSAgICBkb3VibGVbXSBkb3VibGVzID0gezIuMywgMi40fTsK
LSAgICBpbnRbXSBlbnVtcyA9IHtFeHRlbnNpb25zLlNFQ09ORF9WQUxVRSwgRXh0ZW5zaW9ucy5G
SVJTVF9WQUxVRX07Ci0gICAgU3RyaW5nW10gc3RyaW5ncyA9IHsidmlqZmVudHdpbnRpZyIsICJ0
d2VudHktc2l4In07Ci0gICAgYnl0ZVtdW10gYnl0ZXNzID0ge3syLCA3fSwgezIsIDh9fTsKLSAg
ICBBbm90aGVyTWVzc2FnZSBhbm90aGVyMSA9IG5ldyBBbm90aGVyTWVzc2FnZSgpOwotICAgIGFu
b3RoZXIxLnN0cmluZyA9ICJlciBzaGkgaml1IjsKLSAgICBhbm90aGVyMS52YWx1ZSA9IGZhbHNl
OwotICAgIEFub3RoZXJNZXNzYWdlIGFub3RoZXIyID0gbmV3IEFub3RoZXJNZXNzYWdlKCk7Ci0g
ICAgYW5vdGhlcjIuc3RyaW5nID0gInRyZW50ZSI7Ci0gICAgYW5vdGhlcjIudmFsdWUgPSB0cnVl
OwotICAgIEFub3RoZXJNZXNzYWdlW10gbWVzc2FnZXMgPSB7YW5vdGhlcjEsIGFub3RoZXIyfTsK
LSAgICBSZXBlYXRlZEV4dGVuc2lvbnMuUmVwZWF0ZWRHcm91cCBncm91cDEgPSBuZXcgUmVwZWF0
ZWRFeHRlbnNpb25zLlJlcGVhdGVkR3JvdXAoKTsKLSAgICBncm91cDEuYSA9IDMxOwotICAgIFJl
cGVhdGVkRXh0ZW5zaW9ucy5SZXBlYXRlZEdyb3VwIGdyb3VwMiA9IG5ldyBSZXBlYXRlZEV4dGVu
c2lvbnMuUmVwZWF0ZWRHcm91cCgpOwotICAgIGdyb3VwMi5hID0gMzI7Ci0gICAgUmVwZWF0ZWRF
eHRlbnNpb25zLlJlcGVhdGVkR3JvdXBbXSBncm91cHMgPSB7Z3JvdXAxLCBncm91cDJ9OwotICAg
IGV4dGVuZGFibGVNZXNzYWdlLnNldEV4dGVuc2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZUlu
dDMyLCBpbnQzMik7Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVk
RXh0ZW5zaW9ucy5yZXBlYXRlZFVpbnQzMiwgdWludDMycyk7Ci0gICAgZXh0ZW5kYWJsZU1lc3Nh
Z2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNpbnQzMiwgc2ludDMy
cyk7Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9u
cy5yZXBlYXRlZEludDY0LCBpbnQ2NHMpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLnNldEV4dGVu
c2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRVaW50NjQsIHVpbnQ2NHMpOwotICAgIGV4
dGVuZGFibGVNZXNzYWdlLnNldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRT
aW50NjQsIHNpbnQ2NHMpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLnNldEV4dGVuc2lvbihSZXBl
YXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRGaXhlZDMyLCBmaXhlZDMycyk7Ci0gICAgZXh0ZW5kYWJs
ZU1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNmaXhlZDMy
LCBzZml4ZWQzMnMpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLnNldEV4dGVuc2lvbihSZXBlYXRl
ZEV4dGVuc2lvbnMucmVwZWF0ZWRGaXhlZDY0LCBmaXhlZDY0cyk7Ci0gICAgZXh0ZW5kYWJsZU1l
c3NhZ2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNmaXhlZDY0LCBz
Zml4ZWQ2NHMpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLnNldEV4dGVuc2lvbihSZXBlYXRlZEV4
dGVuc2lvbnMucmVwZWF0ZWRCb29sLCBib29scyk7Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2Uuc2V0
RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEZsb2F0LCBmbG9hdHMpOwotICAg
IGV4dGVuZGFibGVNZXNzYWdlLnNldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0
ZWREb3VibGUsIGRvdWJsZXMpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLnNldEV4dGVuc2lvbihS
ZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRFbnVtLCBlbnVtcyk7Ci0gICAgZXh0ZW5kYWJsZU1l
c3NhZ2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFN0cmluZywgc3Ry
aW5ncyk7Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5z
aW9ucy5yZXBlYXRlZEJ5dGVzLCBieXRlc3MpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLnNldEV4
dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRNZXNzYWdlLCBtZXNzYWdlcyk7Ci0g
ICAgZXh0ZW5kYWJsZU1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBl
YXRlZEdyb3VwLCBncm91cHMpOwotCi0gICAgYnl0ZVtdIGRhdGEgPSBNZXNzYWdlTmFuby50b0J5
dGVBcnJheShleHRlbmRhYmxlTWVzc2FnZSk7Ci0KLSAgICBleHRlbmRhYmxlTWVzc2FnZSA9IEV4
dGVuc2lvbnMuRXh0ZW5kYWJsZU1lc3NhZ2UucGFyc2VGcm9tKGRhdGEpOwotICAgIEV4dGVuc2lv
bnMuRXh0ZW5kYWJsZU1lc3NhZ2UgbWVzc2FnZUNvcHkgPSBFeHRlbnNpb25zLkV4dGVuZGFibGVN
ZXNzYWdlLnBhcnNlRnJvbShkYXRhKTsKLQotICAgIC8vIFdpdGhvdXQgZGVzZXJpYWxpc2luZy4K
LSAgICBhc3NlcnRFcXVhbHMoZXh0ZW5kYWJsZU1lc3NhZ2UsIG1lc3NhZ2VDb3B5KTsKLSAgICBh
c3NlcnRFcXVhbHMoZXh0ZW5kYWJsZU1lc3NhZ2UuaGFzaENvZGUoKSwgbWVzc2FnZUNvcHkuaGFz
aENvZGUoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSBkZXNlcmlhbGl6ZWQuCi0gICAgZXh0ZW5kYWJs
ZU1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFNpbmd1bGFyRXh0ZW5zaW9ucy5zb21lSW50MzIpOwotICAg
IGV4dGVuZGFibGVNZXNzYWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0
ZWRVaW50MzIpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4
dGVuc2lvbnMucmVwZWF0ZWRTaW50MzIpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLmdldEV4dGVu
c2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRJbnQ2NCk7Ci0gICAgZXh0ZW5kYWJsZU1l
c3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFVpbnQ2NCk7Ci0g
ICAgZXh0ZW5kYWJsZU1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBl
YXRlZFNpbnQ2NCk7Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVk
RXh0ZW5zaW9ucy5yZXBlYXRlZEZpeGVkMzIpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLmdldEV4
dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRTZml4ZWQzMik7Ci0gICAgZXh0ZW5k
YWJsZU1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEZpeGVk
NjQpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lv
bnMucmVwZWF0ZWRTZml4ZWQ2NCk7Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2UuZ2V0RXh0ZW5zaW9u
KFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEJvb2wpOwotICAgIGV4dGVuZGFibGVNZXNzYWdl
LmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRGbG9hdCk7Ci0gICAgZXh0
ZW5kYWJsZU1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZERv
dWJsZSk7Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5z
aW9ucy5yZXBlYXRlZEVudW0pOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLmdldEV4dGVuc2lvbihS
ZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRTdHJpbmcpOwotICAgIGV4dGVuZGFibGVNZXNzYWdl
LmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRCeXRlcyk7Ci0gICAgZXh0
ZW5kYWJsZU1lc3NhZ2UuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZE1l
c3NhZ2UpOwotICAgIGV4dGVuZGFibGVNZXNzYWdlLmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVu
c2lvbnMucmVwZWF0ZWRHcm91cCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4dGVuZGFibGVNZXNzYWdl
LCBtZXNzYWdlQ29weSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4dGVuZGFibGVNZXNzYWdlLmhhc2hD
b2RlKCksIG1lc3NhZ2VDb3B5Lmhhc2hDb2RlKCkpOwotCi0gICAgLy8gQm90aCBkZXNlcmlhbGl6
ZWQuCi0gICAgbWVzc2FnZUNvcHkuZ2V0RXh0ZW5zaW9uKFNpbmd1bGFyRXh0ZW5zaW9ucy5zb21l
SW50MzIpOwotICAgIG1lc3NhZ2VDb3B5LmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMu
cmVwZWF0ZWRVaW50MzIpOwotICAgIG1lc3NhZ2VDb3B5LmdldEV4dGVuc2lvbihSZXBlYXRlZEV4
dGVuc2lvbnMucmVwZWF0ZWRTaW50MzIpOwotICAgIG1lc3NhZ2VDb3B5LmdldEV4dGVuc2lvbihS
ZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRJbnQ2NCk7Ci0gICAgbWVzc2FnZUNvcHkuZ2V0RXh0
ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFVpbnQ2NCk7Ci0gICAgbWVzc2FnZUNv
cHkuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZFNpbnQ2NCk7Ci0gICAg
bWVzc2FnZUNvcHkuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEZpeGVk
MzIpOwotICAgIG1lc3NhZ2VDb3B5LmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVw
ZWF0ZWRTZml4ZWQzMik7Ci0gICAgbWVzc2FnZUNvcHkuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0
ZW5zaW9ucy5yZXBlYXRlZEZpeGVkNjQpOwotICAgIG1lc3NhZ2VDb3B5LmdldEV4dGVuc2lvbihS
ZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRTZml4ZWQ2NCk7Ci0gICAgbWVzc2FnZUNvcHkuZ2V0
RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZEJvb2wpOwotICAgIG1lc3NhZ2VD
b3B5LmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRGbG9hdCk7Ci0gICAg
bWVzc2FnZUNvcHkuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZERvdWJs
ZSk7Ci0gICAgbWVzc2FnZUNvcHkuZ2V0RXh0ZW5zaW9uKFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBl
YXRlZEVudW0pOwotICAgIG1lc3NhZ2VDb3B5LmdldEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lv
bnMucmVwZWF0ZWRTdHJpbmcpOwotICAgIG1lc3NhZ2VDb3B5LmdldEV4dGVuc2lvbihSZXBlYXRl
ZEV4dGVuc2lvbnMucmVwZWF0ZWRCeXRlcyk7Ci0gICAgbWVzc2FnZUNvcHkuZ2V0RXh0ZW5zaW9u
KFJlcGVhdGVkRXh0ZW5zaW9ucy5yZXBlYXRlZE1lc3NhZ2UpOwotICAgIG1lc3NhZ2VDb3B5Lmdl
dEV4dGVuc2lvbihSZXBlYXRlZEV4dGVuc2lvbnMucmVwZWF0ZWRHcm91cCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGV4dGVuZGFibGVNZXNzYWdlLCBtZXNzYWdlQ29weSk7Ci0gICAgYXNzZXJ0RXF1YWxz
KGV4dGVuZGFibGVNZXNzYWdlLmhhc2hDb2RlKCksIG1lc3NhZ2VDb3B5Lmhhc2hDb2RlKCkpOwot
Ci0gICAgLy8gQ2hhbmdlIG9uZSwgbWFrZSBzdXJlIHRoZXkgYXJlIHN0aWxsIGRpZmZlcmVudC4K
LSAgICBtZXNzYWdlQ29weS5nZXRFeHRlbnNpb24oUmVwZWF0ZWRFeHRlbnNpb25zLnJlcGVhdGVk
TWVzc2FnZSlbMF0uc3RyaW5nID0gIm5vdCBlbXB0eSI7Ci0gICAgYXNzZXJ0RmFsc2UoZXh0ZW5k
YWJsZU1lc3NhZ2UuZXF1YWxzKG1lc3NhZ2VDb3B5KSk7Ci0KLSAgICAvLyBFdmVuIGlmIHRoZSBl
eHRlbnNpb24gaGFzbid0IGJlZW4gZGVzZXJpYWxpemVkLgotICAgIGV4dGVuZGFibGVNZXNzYWdl
ID0gRXh0ZW5zaW9ucy5FeHRlbmRhYmxlTWVzc2FnZS5wYXJzZUZyb20oZGF0YSk7Ci0gICAgYXNz
ZXJ0RmFsc2UoZXh0ZW5kYWJsZU1lc3NhZ2UuZXF1YWxzKG1lc3NhZ2VDb3B5KSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXN0RXh0ZW5zaW9uc0NhY2hpbmcoKSB7Ci0gICAgRXh0ZW5zaW9ucy5F
eHRlbmRhYmxlTWVzc2FnZSBleHRlbmRhYmxlTWVzc2FnZSA9IG5ldyBFeHRlbnNpb25zLkV4dGVu
ZGFibGVNZXNzYWdlKCk7Ci0gICAgZXh0ZW5kYWJsZU1lc3NhZ2Uuc2V0RXh0ZW5zaW9uKFNpbmd1
bGFyRXh0ZW5zaW9ucy5zb21lTWVzc2FnZSwKLSAgICAgICAgbmV3IEV4dGVuc2lvbnMuQW5vdGhl
ck1lc3NhZ2UoKSk7Ci0gICAgYXNzZXJ0U2FtZSgiQ29uc2VjdXRpdmUgY2FsbHMgdG8gZ2V0RXh0
ZW5zaW9ucyBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCIsCi0gICAgICAgIGV4dGVuZGFi
bGVNZXNzYWdlLmdldEV4dGVuc2lvbihTaW5ndWxhckV4dGVuc2lvbnMuc29tZU1lc3NhZ2UpLAot
ICAgICAgICBleHRlbmRhYmxlTWVzc2FnZS5nZXRFeHRlbnNpb24oU2luZ3VsYXJFeHRlbnNpb25z
LnNvbWVNZXNzYWdlKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0VW5rbm93bkZpZWxkcygp
IHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIENoZWNrIHRoYXQgd2Ugcm91bmR0cmlwIChzZXJp
YWxpemUgYW5kIGRlc2VyaWFsaXplKSB1bnJlY29nbml6ZWQgZmllbGRzLgotICAgIEFub3RoZXJN
ZXNzYWdlIG1lc3NhZ2UgPSBuZXcgQW5vdGhlck1lc3NhZ2UoKTsKLSAgICBtZXNzYWdlLnN0cmlu
ZyA9ICJIZWxsbyBXb3JsZCI7Ci0gICAgbWVzc2FnZS52YWx1ZSA9IGZhbHNlOwotCi0gICAgYnl0
ZVtdIGJ5dGVzID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobWVzc2FnZSk7Ci0gICAgaW50IGV4
dHJhRmllbGRTaXplID0gQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5jb21wdXRlU3RyaW5nU2l6
ZSgKLSAgICAgICAgMTAwMSwgIlRoaXMgaXMgYW4gdW5rbm93biBmaWVsZCIpOwotICAgIGJ5dGVb
XSBuZXdCeXRlcyA9IG5ldyBieXRlW2J5dGVzLmxlbmd0aCArIGV4dHJhRmllbGRTaXplXTsKLSAg
ICBTeXN0ZW0uYXJyYXljb3B5KGJ5dGVzLCAwLCBuZXdCeXRlcywgMCwgYnl0ZXMubGVuZ3RoKTsK
LSAgICBDb2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vLm5ld0luc3RhbmNlKG5ld0J5dGVzLCBieXRl
cy5sZW5ndGgsIGV4dHJhRmllbGRTaXplKQotICAgICAgICAud3JpdGVTdHJpbmcoMTAwMSwgIlRo
aXMgaXMgYW4gdW5rbm93biBmaWVsZCIpOwotCi0gICAgLy8gRGVzZXJpYWxpemUgd2l0aCBhbiB1
bmtub3duIGZpZWxkLgotICAgIEFub3RoZXJNZXNzYWdlIGRlc2VyaWFsaXplZCA9IEFub3RoZXJN
ZXNzYWdlLnBhcnNlRnJvbShuZXdCeXRlcyk7Ci0gICAgYnl0ZVtdIHNlcmlhbGl6ZWQgPSBNZXNz
YWdlTmFuby50b0J5dGVBcnJheShkZXNlcmlhbGl6ZWQpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG5l
d0J5dGVzLmxlbmd0aCwgc2VyaWFsaXplZC5sZW5ndGgpOwotCi0gICAgLy8gQ2xlYXIsIGFuZCBt
YWtlIHN1cmUgaXQgY2xlYXJzIGV2ZXJ5dGhpbmcuCi0gICAgZGVzZXJpYWxpemVkLmNsZWFyKCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KGRlc2VyaWFsaXpl
ZCkubGVuZ3RoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RNZXJnZUZyb20oKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICBTaW1wbGVNZXNzYWdlTmFubyBtZXNzYWdlID0gbmV3IFNpbXBsZU1l
c3NhZ2VOYW5vKCk7Ci0gICAgbWVzc2FnZS5kID0gMTIzOwotICAgIGJ5dGVbXSBieXRlcyA9IE1l
c3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG1lc3NhZ2UpOwotCi0gICAgU2ltcGxlTWVzc2FnZU5hbm8g
bmV3TWVzc2FnZSA9IE1lc3NhZ2VOYW5vLm1lcmdlRnJvbShuZXcgU2ltcGxlTWVzc2FnZU5hbm8o
KSwgYnl0ZXMpOwotICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLmQsIG5ld01lc3NhZ2UuZCk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SmF2YUtleXdvcmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBUZXN0QWxsVHlwZXNOYW5vIG1zZyA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAg
bXNnLnN5bmNocm9uaXplZF8gPSAxMjM7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMywgbXNnLnN5bmNo
cm9uaXplZF8pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdFJlZmVyZW5jZVR5cGVzRm9yUHJp
bWl0aXZlcygpIHRocm93cyBFeGNlcHRpb24gewotICAgIE5hbm9SZWZlcmVuY2VUeXBlcy5UZXN0
QWxsVHlwZXNOYW5vIG1lc3NhZ2UgPSBuZXcgTmFub1JlZmVyZW5jZVR5cGVzLlRlc3RBbGxUeXBl
c05hbm8oKTsKLQotICAgIC8vIEJhc2UgY2hlY2sgLSB3aGVuIG5vdGhpbmcgaXMgc2V0LCB3ZSBz
ZXJpYWxpemUgbm90aGluZy4KLSAgICBhc3NlcnRIYXNXaXJlRGF0YShtZXNzYWdlLCBmYWxzZSk7
Ci0KLSAgICBtZXNzYWdlLmRlZmF1bHRCb29sID0gdHJ1ZTsKLSAgICBhc3NlcnRIYXNXaXJlRGF0
YShtZXNzYWdlLCB0cnVlKTsKLQotICAgIG1lc3NhZ2UuZGVmYXVsdEJvb2wgPSBmYWxzZTsKLSAg
ICBhc3NlcnRIYXNXaXJlRGF0YShtZXNzYWdlLCB0cnVlKTsKLQotICAgIG1lc3NhZ2UuZGVmYXVs
dEJvb2wgPSBudWxsOwotICAgIGFzc2VydEhhc1dpcmVEYXRhKG1lc3NhZ2UsIGZhbHNlKTsKLQot
ICAgIG1lc3NhZ2UuZGVmYXVsdEludDMyID0gNTsKLSAgICBhc3NlcnRIYXNXaXJlRGF0YShtZXNz
YWdlLCB0cnVlKTsKLQotICAgIG1lc3NhZ2UuZGVmYXVsdEludDMyID0gbnVsbDsKLSAgICBhc3Nl
cnRIYXNXaXJlRGF0YShtZXNzYWdlLCBmYWxzZSk7Ci0KLSAgICBtZXNzYWdlLmRlZmF1bHRJbnQ2
NCA9IDEyMzQ1Nkw7Ci0gICAgYXNzZXJ0SGFzV2lyZURhdGEobWVzc2FnZSwgdHJ1ZSk7Ci0KLSAg
ICBtZXNzYWdlLmRlZmF1bHRJbnQ2NCA9IG51bGw7Ci0gICAgYXNzZXJ0SGFzV2lyZURhdGEobWVz
c2FnZSwgZmFsc2UpOwotCi0gICAgbWVzc2FnZS5kZWZhdWx0RmxvYXQgPSAxZjsKLSAgICBhc3Nl
cnRIYXNXaXJlRGF0YShtZXNzYWdlLCB0cnVlKTsKLQotICAgIG1lc3NhZ2UuZGVmYXVsdEZsb2F0
ID0gbnVsbDsKLSAgICBhc3NlcnRIYXNXaXJlRGF0YShtZXNzYWdlLCBmYWxzZSk7Ci0KLSAgICBt
ZXNzYWdlLmRlZmF1bHREb3VibGUgPSAyLjE7Ci0gICAgYXNzZXJ0SGFzV2lyZURhdGEobWVzc2Fn
ZSwgdHJ1ZSk7Ci0KLSAgICBtZXNzYWdlLmRlZmF1bHREb3VibGUgPSBudWxsOwotICAgIGFzc2Vy
dEhhc1dpcmVEYXRhKG1lc3NhZ2UsIGZhbHNlKTsKLQotICAgIG1lc3NhZ2UuZGVmYXVsdFN0cmlu
ZyA9ICJoZWxsbyI7Ci0gICAgYXNzZXJ0SGFzV2lyZURhdGEobWVzc2FnZSwgdHJ1ZSk7Ci0KLSAg
ICBtZXNzYWdlLmRlZmF1bHRTdHJpbmcgPSBudWxsOwotICAgIGFzc2VydEhhc1dpcmVEYXRhKG1l
c3NhZ2UsIGZhbHNlKTsKLQotICAgIG1lc3NhZ2UuZGVmYXVsdEJ5dGVzID0gbmV3IGJ5dGVbXSB7
IDEsIDIsIDMgfTsKLSAgICBhc3NlcnRIYXNXaXJlRGF0YShtZXNzYWdlLCB0cnVlKTsKLQotICAg
IG1lc3NhZ2UuZGVmYXVsdEJ5dGVzID0gbnVsbDsKLSAgICBhc3NlcnRIYXNXaXJlRGF0YShtZXNz
YWdlLCBmYWxzZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SGFzaENvZGVFcXVhbHMoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBDb21wbGV0ZSBlcXVhbGl0eToKLSAgICBUZXN0QWxs
VHlwZXNOYW5vIGEgPSBjcmVhdGVNZXNzYWdlRm9ySGFzaENvZGVFcXVhbHNUZXN0KCk7Ci0gICAg
VGVzdEFsbFR5cGVzTmFubyBhRXF1aXZhbGVudCA9IGNyZWF0ZU1lc3NhZ2VGb3JIYXNoQ29kZUVx
dWFsc1Rlc3QoKTsKLQotICAgIGFzc2VydFRydWUoTWVzc2FnZU5hbm8ubWVzc2FnZU5hbm9FcXVh
bHMoYSwgYUVxdWl2YWxlbnQpKTsKLSAgICBhc3NlcnRGYWxzZShNZXNzYWdlTmFuby5tZXNzYWdl
TmFub0VxdWFscyhhLCBuZXcgVGVzdEFsbFR5cGVzTmFubygpKSk7Ci0KLSAgICAvLyBOdWxsIGFu
ZCBlbXB0eSBhcnJheSBmb3IgcmVwZWF0ZWQgZmllbGRzIGVxdWFsaXR5OgotICAgIFRlc3RBbGxU
eXBlc05hbm8gYiA9IGNyZWF0ZU1lc3NhZ2VGb3JIYXNoQ29kZUVxdWFsc1Rlc3QoKTsKLSAgICBi
LnJlcGVhdGVkQm9vbCA9IG51bGw7Ci0gICAgYi5yZXBlYXRlZEZsb2F0ID0gbmV3IGZsb2F0WzBd
OwotICAgIFRlc3RBbGxUeXBlc05hbm8gYkVxdWl2YWxlbnQgPSBjcmVhdGVNZXNzYWdlRm9ySGFz
aENvZGVFcXVhbHNUZXN0KCk7Ci0gICAgYkVxdWl2YWxlbnQucmVwZWF0ZWRCb29sID0gbmV3IGJv
b2xlYW5bMF07Ci0gICAgYkVxdWl2YWxlbnQucmVwZWF0ZWRGbG9hdCA9IG51bGw7Ci0KLSAgICAv
LyBSZWYtZWxlbWVudC10eXBlIHJlcGVhdGVkIGZpZWxkcyB1c2Ugbm9uLW51bGwgc3Vic2VxdWVu
Y2UgZXF1YWxpdHk6Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBjID0gY3JlYXRlTWVzc2FnZUZvckhh
c2hDb2RlRXF1YWxzVGVzdCgpOwotICAgIGMucmVwZWF0ZWRTdHJpbmcgPSBudWxsOwotICAgIGMu
cmVwZWF0ZWRTdHJpbmdQaWVjZSA9IG5ldyBTdHJpbmdbXSB7bnVsbCwgIm9uZSIsIG51bGwsICJ0
d28ifTsKLSAgICBjLnJlcGVhdGVkQnl0ZXMgPSBuZXcgYnl0ZVtdW10ge3szLCA0fSwgbnVsbH07
Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBjRXF1aXZhbGVudCA9IGNyZWF0ZU1lc3NhZ2VGb3JIYXNo
Q29kZUVxdWFsc1Rlc3QoKTsKLSAgICBjRXF1aXZhbGVudC5yZXBlYXRlZFN0cmluZyA9IG5ldyBT
dHJpbmdbM107Ci0gICAgY0VxdWl2YWxlbnQucmVwZWF0ZWRTdHJpbmdQaWVjZSA9IG5ldyBTdHJp
bmdbXSB7Im9uZSIsICJ0d28iLCBudWxsfTsKLSAgICBjRXF1aXZhbGVudC5yZXBlYXRlZEJ5dGVz
ID0gbmV3IGJ5dGVbXVtdIHt7MywgNH19OwotCi0gICAgLy8gQ29tcGxldGUgZXF1YWxpdHkgZm9y
IG1lc3NhZ2VzIHdpdGggaGFzIGZpZWxkczoKLSAgICBUZXN0QWxsVHlwZXNOYW5vSGFzIGQgPSBj
cmVhdGVNZXNzYWdlV2l0aEhhc0Zvckhhc2hDb2RlRXF1YWxzVGVzdCgpOwotICAgIFRlc3RBbGxU
eXBlc05hbm9IYXMgZEVxdWl2YWxlbnQgPSBjcmVhdGVNZXNzYWdlV2l0aEhhc0Zvckhhc2hDb2Rl
RXF1YWxzVGVzdCgpOwotCi0gICAgLy8gSWYgaGFzLWZpZWxkcyBleGlzdCwgZmllbGRzIHdpdGgg
dGhlIHNhbWUgZGVmYXVsdCB2YWx1ZXMgYnV0Ci0gICAgLy8gZGlmZmVyZW50IGhhcy1maWVsZCB2
YWx1ZXMgYXJlIGRpZmZlcmVudC4KLSAgICBUZXN0QWxsVHlwZXNOYW5vSGFzIGUgPSBjcmVhdGVN
ZXNzYWdlV2l0aEhhc0Zvckhhc2hDb2RlRXF1YWxzVGVzdCgpOwotICAgIGUub3B0aW9uYWxJbnQz
MisrOyAvLyBtYWtlIGRpZmZlcmVudCBmcm9tIGQKLSAgICBlLmhhc0RlZmF1bHRTdHJpbmcgPSBm
YWxzZTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vSGFzIGVEaWZmZXJlbnQgPSBjcmVhdGVNZXNzYWdl
V2l0aEhhc0Zvckhhc2hDb2RlRXF1YWxzVGVzdCgpOwotICAgIGVEaWZmZXJlbnQub3B0aW9uYWxJ
bnQzMiA9IGUub3B0aW9uYWxJbnQzMjsKLSAgICBlRGlmZmVyZW50Lmhhc0RlZmF1bHRTdHJpbmcg
PSB0cnVlOwotCi0gICAgLy8gQ29tcGxldGUgZXF1YWxpdHkgZm9yIG1lc3NhZ2VzIHdpdGggYWNj
ZXNzb3JzOgotICAgIFRlc3ROYW5vQWNjZXNzb3JzIGYgPSBjcmVhdGVNZXNzYWdlV2l0aEFjY2Vz
c29yc0Zvckhhc2hDb2RlRXF1YWxzVGVzdCgpOwotICAgIFRlc3ROYW5vQWNjZXNzb3JzIGZFcXVp
dmFsZW50ID0gY3JlYXRlTWVzc2FnZVdpdGhBY2Nlc3NvcnNGb3JIYXNoQ29kZUVxdWFsc1Rlc3Qo
KTsKLQotICAgIC8vIElmIHVzaW5nIGFjY2Vzc29ycywgZXhwbGljaXRseSBzZXR0aW5nIGEgZmll
bGQgdG8gaXRzIGRlZmF1bHQgdmFsdWUKLSAgICAvLyBzaG91bGQgbWFrZSB0aGUgbWVzc2FnZSBk
aWZmZXJlbnQuCi0gICAgVGVzdE5hbm9BY2Nlc3NvcnMgZyA9IGNyZWF0ZU1lc3NhZ2VXaXRoQWNj
ZXNzb3JzRm9ySGFzaENvZGVFcXVhbHNUZXN0KCk7Ci0gICAgZy5zZXRPcHRpb25hbEludDMyKGcu
Z2V0T3B0aW9uYWxJbnQzMigpICsgMSk7IC8vIG1ha2UgZGlmZmVyZW50IGZyb20gZgotICAgIGcu
Y2xlYXJEZWZhdWx0U3RyaW5nKCk7Ci0gICAgVGVzdE5hbm9BY2Nlc3NvcnMgZ0RpZmZlcmVudCA9
IGNyZWF0ZU1lc3NhZ2VXaXRoQWNjZXNzb3JzRm9ySGFzaENvZGVFcXVhbHNUZXN0KCk7Ci0gICAg
Z0RpZmZlcmVudC5zZXRPcHRpb25hbEludDMyKGcuZ2V0T3B0aW9uYWxJbnQzMigpKTsKLSAgICBn
RGlmZmVyZW50LnNldERlZmF1bHRTdHJpbmcoZy5nZXREZWZhdWx0U3RyaW5nKCkpOwotCi0gICAg
Ly8gQ29tcGxldGUgZXF1YWxpdHkgZm9yIHJlZmVyZW5jZSB0eXBlZCBtZXNzYWdlczoKLSAgICBO
YW5vUmVmZXJlbmNlVHlwZXMuVGVzdEFsbFR5cGVzTmFubyBoID0gY3JlYXRlUmVmVHlwZWRNZXNz
YWdlRm9ySGFzaENvZGVFcXVhbHNUZXN0KCk7Ci0gICAgTmFub1JlZmVyZW5jZVR5cGVzLlRlc3RB
bGxUeXBlc05hbm8gaEVxdWl2YWxlbnQgPSBjcmVhdGVSZWZUeXBlZE1lc3NhZ2VGb3JIYXNoQ29k
ZUVxdWFsc1Rlc3QoKTsKLQotICAgIC8vIEluZXF1YWxpdHkgb2YgbnVsbCBhbmQgZGVmYXVsdCB2
YWx1ZSBmb3IgcmVmZXJlbmNlIHR5cGVkIG1lc3NhZ2VzOgotICAgIE5hbm9SZWZlcmVuY2VUeXBl
cy5UZXN0QWxsVHlwZXNOYW5vIGkgPSBjcmVhdGVSZWZUeXBlZE1lc3NhZ2VGb3JIYXNoQ29kZUVx
dWFsc1Rlc3QoKTsKLSAgICBpLm9wdGlvbmFsSW50MzIgPSAxOyAvLyBtYWtlIGRpZmZlcmVudCBm
cm9tIGgKLSAgICBpLm9wdGlvbmFsRmxvYXQgPSBudWxsOwotICAgIE5hbm9SZWZlcmVuY2VUeXBl
cy5UZXN0QWxsVHlwZXNOYW5vIGlEaWZmZXJlbnQgPSBjcmVhdGVSZWZUeXBlZE1lc3NhZ2VGb3JI
YXNoQ29kZUVxdWFsc1Rlc3QoKTsKLSAgICBpRGlmZmVyZW50Lm9wdGlvbmFsSW50MzIgPSBpLm9w
dGlvbmFsSW50MzI7Ci0gICAgaURpZmZlcmVudC5vcHRpb25hbEZsb2F0ID0gMC4wZjsKLQotICAg
IEhhc2hNYXA8TWVzc2FnZU5hbm8sIFN0cmluZz4gaGFzaE1hcCA9IG5ldyBIYXNoTWFwPE1lc3Nh
Z2VOYW5vLCBTdHJpbmc+KCk7Ci0gICAgaGFzaE1hcC5wdXQoYSwgImEiKTsKLSAgICBoYXNoTWFw
LnB1dChiLCAiYiIpOwotICAgIGhhc2hNYXAucHV0KGMsICJjIik7Ci0gICAgaGFzaE1hcC5wdXQo
ZCwgImQiKTsKLSAgICBoYXNoTWFwLnB1dChlLCAiZSIpOwotICAgIGhhc2hNYXAucHV0KGYsICJm
Iik7Ci0gICAgaGFzaE1hcC5wdXQoZywgImciKTsKLSAgICBoYXNoTWFwLnB1dChoLCAiaCIpOwot
ICAgIGhhc2hNYXAucHV0KGksICJpIik7Ci0KLSAgICBhc3NlcnRFcXVhbHMoOSwgaGFzaE1hcC5z
aXplKCkpOyAvLyBhLWkgc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIGVhY2ggb3RoZXIuCi0KLSAg
ICBhc3NlcnRFcXVhbHMoImEiLCBoYXNoTWFwLmdldChhKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJh
IiwgaGFzaE1hcC5nZXQoYUVxdWl2YWxlbnQpKTsKLQotICAgIGFzc2VydEVxdWFscygiYiIsIGhh
c2hNYXAuZ2V0KGIpKTsKLSAgICBhc3NlcnRFcXVhbHMoImIiLCBoYXNoTWFwLmdldChiRXF1aXZh
bGVudCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKCJjIiwgaGFzaE1hcC5nZXQoYykpOwotICAgIGFz
c2VydEVxdWFscygiYyIsIGhhc2hNYXAuZ2V0KGNFcXVpdmFsZW50KSk7Ci0KLSAgICBhc3NlcnRF
cXVhbHMoImQiLCBoYXNoTWFwLmdldChkKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJkIiwgaGFzaE1h
cC5nZXQoZEVxdWl2YWxlbnQpKTsKLQotICAgIGFzc2VydEVxdWFscygiZSIsIGhhc2hNYXAuZ2V0
KGUpKTsKLSAgICBhc3NlcnROdWxsKGhhc2hNYXAuZ2V0KGVEaWZmZXJlbnQpKTsKLQotICAgIGFz
c2VydEVxdWFscygiZiIsIGhhc2hNYXAuZ2V0KGYpKTsKLSAgICBhc3NlcnRFcXVhbHMoImYiLCBo
YXNoTWFwLmdldChmRXF1aXZhbGVudCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKCJnIiwgaGFzaE1h
cC5nZXQoZykpOwotICAgIGFzc2VydE51bGwoaGFzaE1hcC5nZXQoZ0RpZmZlcmVudCkpOwotCi0g
ICAgYXNzZXJ0RXF1YWxzKCJoIiwgaGFzaE1hcC5nZXQoaCkpOwotICAgIGFzc2VydEVxdWFscygi
aCIsIGhhc2hNYXAuZ2V0KGhFcXVpdmFsZW50KSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoImkiLCBo
YXNoTWFwLmdldChpKSk7Ci0gICAgYXNzZXJ0TnVsbChoYXNoTWFwLmdldChpRGlmZmVyZW50KSk7
Ci0gIH0KLQotICBwcml2YXRlIFRlc3RBbGxUeXBlc05hbm8gY3JlYXRlTWVzc2FnZUZvckhhc2hD
b2RlRXF1YWxzVGVzdCgpIHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1lc3NhZ2UgPSBuZXcgVGVz
dEFsbFR5cGVzTmFubygpOwotICAgIG1lc3NhZ2Uub3B0aW9uYWxJbnQzMiA9IDU7Ci0gICAgbWVz
c2FnZS5vcHRpb25hbEludDY0ID0gNzc3OwotICAgIG1lc3NhZ2Uub3B0aW9uYWxGbG9hdCA9IDEu
MGY7Ci0gICAgbWVzc2FnZS5vcHRpb25hbERvdWJsZSA9IDIuMDsKLSAgICBtZXNzYWdlLm9wdGlv
bmFsQm9vbCA9IHRydWU7Ci0gICAgbWVzc2FnZS5vcHRpb25hbFN0cmluZyA9ICJIZWxsbyI7Ci0g
ICAgbWVzc2FnZS5vcHRpb25hbEJ5dGVzID0gbmV3IGJ5dGVbXSB7IDEsIDIsIDMgfTsKLSAgICBt
ZXNzYWdlLm9wdGlvbmFsTmVzdGVkTWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3Rl
ZE1lc3NhZ2UoKTsKLSAgICBtZXNzYWdlLm9wdGlvbmFsTmVzdGVkTWVzc2FnZS5iYiA9IDI3Owot
ICAgIG1lc3NhZ2Uub3B0aW9uYWxOZXN0ZWRFbnVtID0gVGVzdEFsbFR5cGVzTmFuby5CQVI7Ci0g
ICAgbWVzc2FnZS5yZXBlYXRlZEludDMyID0gbmV3IGludFtdIHsgNSwgNiwgNywgOCB9OwotICAg
IG1lc3NhZ2UucmVwZWF0ZWRJbnQ2NCA9IG5ldyBsb25nW10geyAyN0wsIDI4TCwgMjlMIH07Ci0g
ICAgbWVzc2FnZS5yZXBlYXRlZEZsb2F0ID0gbmV3IGZsb2F0W10geyA1LjBmLCA2LjBmIH07Ci0g
ICAgbWVzc2FnZS5yZXBlYXRlZERvdWJsZSA9IG5ldyBkb3VibGVbXSB7IDk5LjEsIDIyLjUgfTsK
LSAgICBtZXNzYWdlLnJlcGVhdGVkQm9vbCA9IG5ldyBib29sZWFuW10geyB0cnVlLCBmYWxzZSwg
dHJ1ZSB9OwotICAgIG1lc3NhZ2UucmVwZWF0ZWRTdHJpbmcgPSBuZXcgU3RyaW5nW10geyAiT25l
IiwgIlR3byIgfTsKLSAgICBtZXNzYWdlLnJlcGVhdGVkQnl0ZXMgPSBuZXcgYnl0ZVtdW10geyB7
IDIsIDcgfSwgeyAyLCA3IH0gfTsKLSAgICBtZXNzYWdlLnJlcGVhdGVkTmVzdGVkTWVzc2FnZSA9
IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2VbXSB7Ci0gICAgICBtZXNzYWdlLm9w
dGlvbmFsTmVzdGVkTWVzc2FnZSwKLSAgICAgIG1lc3NhZ2Uub3B0aW9uYWxOZXN0ZWRNZXNzYWdl
Ci0gICAgfTsKLSAgICBtZXNzYWdlLnJlcGVhdGVkTmVzdGVkRW51bSA9IG5ldyBpbnRbXSB7Ci0g
ICAgICBUZXN0QWxsVHlwZXNOYW5vLkJBUiwKLSAgICAgIFRlc3RBbGxUeXBlc05hbm8uQkFaCi0g
ICAgfTsKLSAgICBtZXNzYWdlLnNldE9uZW9mVWludDMyKDMpOwotICAgIHJldHVybiBtZXNzYWdl
OwotICB9Ci0KLSAgcHJpdmF0ZSBUZXN0QWxsVHlwZXNOYW5vSGFzIGNyZWF0ZU1lc3NhZ2VXaXRo
SGFzRm9ySGFzaENvZGVFcXVhbHNUZXN0KCkgewotICAgIFRlc3RBbGxUeXBlc05hbm9IYXMgbWVz
c2FnZSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vSGFzKCk7Ci0gICAgbWVzc2FnZS5vcHRpb25hbElu
dDMyID0gNTsKLSAgICBtZXNzYWdlLm9wdGlvbmFsU3RyaW5nID0gIkhlbGxvIjsKLSAgICBtZXNz
YWdlLm9wdGlvbmFsQnl0ZXMgPSBuZXcgYnl0ZVtdIHsgMSwgMiwgMyB9OwotICAgIG1lc3NhZ2Uu
b3B0aW9uYWxOZXN0ZWRNZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBlc05hbm9IYXMuTmVzdGVkTWVz
c2FnZSgpOwotICAgIG1lc3NhZ2Uub3B0aW9uYWxOZXN0ZWRNZXNzYWdlLmJiID0gMjc7Ci0gICAg
bWVzc2FnZS5vcHRpb25hbE5lc3RlZEVudW0gPSBUZXN0QWxsVHlwZXNOYW5vLkJBUjsKLSAgICBt
ZXNzYWdlLnJlcGVhdGVkSW50MzIgPSBuZXcgaW50W10geyA1LCA2LCA3LCA4IH07Ci0gICAgbWVz
c2FnZS5yZXBlYXRlZFN0cmluZyA9IG5ldyBTdHJpbmdbXSB7ICJPbmUiLCAiVHdvIiB9OwotICAg
IG1lc3NhZ2UucmVwZWF0ZWRCeXRlcyA9IG5ldyBieXRlW11bXSB7IHsgMiwgNyB9LCB7IDIsIDcg
fSB9OwotICAgIG1lc3NhZ2UucmVwZWF0ZWROZXN0ZWRNZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBl
c05hbm9IYXMuTmVzdGVkTWVzc2FnZVtdIHsKLSAgICAgIG1lc3NhZ2Uub3B0aW9uYWxOZXN0ZWRN
ZXNzYWdlLAotICAgICAgbWVzc2FnZS5vcHRpb25hbE5lc3RlZE1lc3NhZ2UKLSAgICB9OwotICAg
IG1lc3NhZ2UucmVwZWF0ZWROZXN0ZWRFbnVtID0gbmV3IGludFtdIHsKLSAgICAgIFRlc3RBbGxU
eXBlc05hbm8uQkFSLAotICAgICAgVGVzdEFsbFR5cGVzTmFuby5CQVoKLSAgICB9OwotICAgIHJl
dHVybiBtZXNzYWdlOwotICB9Ci0KLSAgcHJpdmF0ZSBUZXN0TmFub0FjY2Vzc29ycyBjcmVhdGVN
ZXNzYWdlV2l0aEFjY2Vzc29yc0Zvckhhc2hDb2RlRXF1YWxzVGVzdCgpIHsKLSAgICBUZXN0TmFu
b0FjY2Vzc29ycyBtZXNzYWdlID0gbmV3IFRlc3ROYW5vQWNjZXNzb3JzKCkKLSAgICAgICAgLnNl
dE9wdGlvbmFsSW50MzIoNSkKLSAgICAgICAgLnNldE9wdGlvbmFsU3RyaW5nKCJIZWxsbyIpCi0g
ICAgICAgIC5zZXRPcHRpb25hbEJ5dGVzKG5ldyBieXRlW10gezEsIDIsIDN9KQotICAgICAgICAu
c2V0T3B0aW9uYWxOZXN0ZWRFbnVtKFRlc3ROYW5vQWNjZXNzb3JzLkJBUik7Ci0gICAgbWVzc2Fn
ZS5vcHRpb25hbE5lc3RlZE1lc3NhZ2UgPSBuZXcgVGVzdE5hbm9BY2Nlc3NvcnMuTmVzdGVkTWVz
c2FnZSgpLnNldEJiKDI3KTsKLSAgICBtZXNzYWdlLnJlcGVhdGVkSW50MzIgPSBuZXcgaW50W10g
eyA1LCA2LCA3LCA4IH07Ci0gICAgbWVzc2FnZS5yZXBlYXRlZFN0cmluZyA9IG5ldyBTdHJpbmdb
XSB7ICJPbmUiLCAiVHdvIiB9OwotICAgIG1lc3NhZ2UucmVwZWF0ZWRCeXRlcyA9IG5ldyBieXRl
W11bXSB7IHsgMiwgNyB9LCB7IDIsIDcgfSB9OwotICAgIG1lc3NhZ2UucmVwZWF0ZWROZXN0ZWRN
ZXNzYWdlID0gbmV3IFRlc3ROYW5vQWNjZXNzb3JzLk5lc3RlZE1lc3NhZ2VbXSB7Ci0gICAgICBt
ZXNzYWdlLm9wdGlvbmFsTmVzdGVkTWVzc2FnZSwKLSAgICAgIG1lc3NhZ2Uub3B0aW9uYWxOZXN0
ZWRNZXNzYWdlCi0gICAgfTsKLSAgICBtZXNzYWdlLnJlcGVhdGVkTmVzdGVkRW51bSA9IG5ldyBp
bnRbXSB7Ci0gICAgICBUZXN0QWxsVHlwZXNOYW5vLkJBUiwKLSAgICAgIFRlc3RBbGxUeXBlc05h
bm8uQkFaCi0gICAgfTsKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQotCi0gIHByaXZhdGUgTmFu
b1JlZmVyZW5jZVR5cGVzLlRlc3RBbGxUeXBlc05hbm8gY3JlYXRlUmVmVHlwZWRNZXNzYWdlRm9y
SGFzaENvZGVFcXVhbHNUZXN0KCkgewotICAgIE5hbm9SZWZlcmVuY2VUeXBlcy5UZXN0QWxsVHlw
ZXNOYW5vIG1lc3NhZ2UgPSBuZXcgTmFub1JlZmVyZW5jZVR5cGVzLlRlc3RBbGxUeXBlc05hbm8o
KTsKLSAgICBtZXNzYWdlLm9wdGlvbmFsSW50MzIgPSA1OwotICAgIG1lc3NhZ2Uub3B0aW9uYWxJ
bnQ2NCA9IDc3N0w7Ci0gICAgbWVzc2FnZS5vcHRpb25hbEZsb2F0ID0gMS4wZjsKLSAgICBtZXNz
YWdlLm9wdGlvbmFsRG91YmxlID0gMi4wOwotICAgIG1lc3NhZ2Uub3B0aW9uYWxCb29sID0gdHJ1
ZTsKLSAgICBtZXNzYWdlLm9wdGlvbmFsU3RyaW5nID0gIkhlbGxvIjsKLSAgICBtZXNzYWdlLm9w
dGlvbmFsQnl0ZXMgPSBuZXcgYnl0ZVtdIHsgMSwgMiwgMyB9OwotICAgIG1lc3NhZ2Uub3B0aW9u
YWxOZXN0ZWRNZXNzYWdlID0KLSAgICAgICAgbmV3IE5hbm9SZWZlcmVuY2VUeXBlcy5UZXN0QWxs
VHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UoKTsKLSAgICBtZXNzYWdlLm9wdGlvbmFsTmVzdGVkTWVz
c2FnZS5mb28gPSAyNzsKLSAgICBtZXNzYWdlLm9wdGlvbmFsTmVzdGVkRW51bSA9IE5hbm9SZWZl
cmVuY2VUeXBlcy5UZXN0QWxsVHlwZXNOYW5vLkJBUjsKLSAgICBtZXNzYWdlLnJlcGVhdGVkSW50
MzIgPSBuZXcgaW50W10geyA1LCA2LCA3LCA4IH07Ci0gICAgbWVzc2FnZS5yZXBlYXRlZEludDY0
ID0gbmV3IGxvbmdbXSB7IDI3TCwgMjhMLCAyOUwgfTsKLSAgICBtZXNzYWdlLnJlcGVhdGVkRmxv
YXQgPSBuZXcgZmxvYXRbXSB7IDUuMGYsIDYuMGYgfTsKLSAgICBtZXNzYWdlLnJlcGVhdGVkRG91
YmxlID0gbmV3IGRvdWJsZVtdIHsgOTkuMSwgMjIuNSB9OwotICAgIG1lc3NhZ2UucmVwZWF0ZWRC
b29sID0gbmV3IGJvb2xlYW5bXSB7IHRydWUsIGZhbHNlLCB0cnVlIH07Ci0gICAgbWVzc2FnZS5y
ZXBlYXRlZFN0cmluZyA9IG5ldyBTdHJpbmdbXSB7ICJPbmUiLCAiVHdvIiB9OwotICAgIG1lc3Nh
Z2UucmVwZWF0ZWRCeXRlcyA9IG5ldyBieXRlW11bXSB7IHsgMiwgNyB9LCB7IDIsIDcgfSB9Owot
ICAgIG1lc3NhZ2UucmVwZWF0ZWROZXN0ZWRNZXNzYWdlID0KLSAgICAgICAgbmV3IE5hbm9SZWZl
cmVuY2VUeXBlcy5UZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2VbXSB7Ci0gICAgICAgICAg
bWVzc2FnZS5vcHRpb25hbE5lc3RlZE1lc3NhZ2UsCi0gICAgICAgICAgbWVzc2FnZS5vcHRpb25h
bE5lc3RlZE1lc3NhZ2UKLSAgICAgICAgfTsKLSAgICBtZXNzYWdlLnJlcGVhdGVkTmVzdGVkRW51
bSA9IG5ldyBpbnRbXSB7Ci0gICAgICBOYW5vUmVmZXJlbmNlVHlwZXMuVGVzdEFsbFR5cGVzTmFu
by5CQVIsCi0gICAgICBOYW5vUmVmZXJlbmNlVHlwZXMuVGVzdEFsbFR5cGVzTmFuby5CQVoKLSAg
ICB9OwotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEVxdWFs
c1dpdGhTcGVjaWFsRmxvYXRpbmdQb2ludFZhbHVlcygpIHRocm93cyBFeGNlcHRpb24gewotICAg
IC8vIENoZWNrcyB0aGF0IHRoZSBuYW5vIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggT2Jq
ZWN0LmVxdWFscygpIHdoZW4gdHJlYXRpbmcKLSAgICAvLyBmbG9hdGluZyBwb2ludCBudW1iZXJz
LCBpLmUuIE5hTiA9PSBOYU4gYW5kICswLjAgIT0gLTAuMC4KLSAgICAvLyBUaGlzIHRlc3QgYXNz
dW1lcyB0aGF0IHRoZSBnZW5lcmF0ZWQgZXF1YWxzKCkgaW1wbGVtZW50YXRpb25zIGFyZSBzeW1t
ZXRyaWMsIHNvCi0gICAgLy8gdGhlcmUgd2lsbCBvbmx5IGJlIG9uZSBkaXJlY3Rpb24gZm9yIGVh
Y2ggZXF1YWxpdHkgY2hlY2suCi0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG0xID0gbmV3IFRlc3RB
bGxUeXBlc05hbm8oKTsKLSAgICBtMS5vcHRpb25hbEZsb2F0ID0gRmxvYXQuTmFOOwotICAgIG0x
Lm9wdGlvbmFsRG91YmxlID0gRG91YmxlLk5hTjsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG0yID0g
bmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBtMi5vcHRpb25hbEZsb2F0ID0gRmxvYXQuTmFO
OwotICAgIG0yLm9wdGlvbmFsRG91YmxlID0gRG91YmxlLk5hTjsKLSAgICBhc3NlcnRUcnVlKG0x
LmVxdWFscyhtMikpOwotICAgIGFzc2VydFRydWUobTEuZXF1YWxzKAotICAgICAgICBNZXNzYWdl
TmFuby5tZXJnZUZyb20obmV3IFRlc3RBbGxUeXBlc05hbm8oKSwgTWVzc2FnZU5hbm8udG9CeXRl
QXJyYXkobTEpKSkpOwotCi0gICAgbTEub3B0aW9uYWxGbG9hdCA9ICswZjsKLSAgICBtMi5vcHRp
b25hbEZsb2F0ID0gLTBmOwotICAgIGFzc2VydEZhbHNlKG0xLmVxdWFscyhtMikpOwotCi0gICAg
bTEub3B0aW9uYWxGbG9hdCA9IC0wZjsKLSAgICBtMS5vcHRpb25hbERvdWJsZSA9ICswZDsKLSAg
ICBtMi5vcHRpb25hbERvdWJsZSA9IC0wZDsKLSAgICBhc3NlcnRGYWxzZShtMS5lcXVhbHMobTIp
KTsKLQotICAgIG0xLm9wdGlvbmFsRG91YmxlID0gLTBkOwotICAgIGFzc2VydFRydWUobTEuZXF1
YWxzKG0yKSk7Ci0gICAgYXNzZXJ0RmFsc2UobTEuZXF1YWxzKG5ldyBUZXN0QWxsVHlwZXNOYW5v
KCkpKTsgLy8gLTAgZG9lcyBub3QgZXF1YWxzKCkgdGhlIGRlZmF1bHQgKzAKLSAgICBhc3NlcnRU
cnVlKG0xLmVxdWFscygKLSAgICAgICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKG5ldyBUZXN0QWxs
VHlwZXNOYW5vKCksIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG0xKSkpKTsKLQotICAgIC8vIC0t
LS0tLS0KLQotICAgIFRlc3RBbGxUeXBlc05hbm9IYXMgbTMgPSBuZXcgVGVzdEFsbFR5cGVzTmFu
b0hhcygpOwotICAgIG0zLm9wdGlvbmFsRmxvYXQgPSBGbG9hdC5OYU47Ci0gICAgbTMuaGFzT3B0
aW9uYWxGbG9hdCA9IHRydWU7Ci0gICAgbTMub3B0aW9uYWxEb3VibGUgPSBEb3VibGUuTmFOOwot
ICAgIG0zLmhhc09wdGlvbmFsRG91YmxlID0gdHJ1ZTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vSGFz
IG00ID0gbmV3IFRlc3RBbGxUeXBlc05hbm9IYXMoKTsKLSAgICBtNC5vcHRpb25hbEZsb2F0ID0g
RmxvYXQuTmFOOwotICAgIG00Lmhhc09wdGlvbmFsRmxvYXQgPSB0cnVlOwotICAgIG00Lm9wdGlv
bmFsRG91YmxlID0gRG91YmxlLk5hTjsKLSAgICBtNC5oYXNPcHRpb25hbERvdWJsZSA9IHRydWU7
Ci0gICAgYXNzZXJ0VHJ1ZShtMy5lcXVhbHMobTQpKTsKLSAgICBhc3NlcnRUcnVlKG0zLmVxdWFs
cygKLSAgICAgICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKG5ldyBUZXN0QWxsVHlwZXNOYW5vSGFz
KCksIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG0zKSkpKTsKLQotICAgIG0zLm9wdGlvbmFsRmxv
YXQgPSArMGY7Ci0gICAgbTQub3B0aW9uYWxGbG9hdCA9IC0wZjsKLSAgICBhc3NlcnRGYWxzZSht
My5lcXVhbHMobTQpKTsKLQotICAgIG0zLm9wdGlvbmFsRmxvYXQgPSAtMGY7Ci0gICAgbTMub3B0
aW9uYWxEb3VibGUgPSArMGQ7Ci0gICAgbTQub3B0aW9uYWxEb3VibGUgPSAtMGQ7Ci0gICAgYXNz
ZXJ0RmFsc2UobTMuZXF1YWxzKG00KSk7Ci0KLSAgICBtMy5vcHRpb25hbERvdWJsZSA9IC0wZDsK
LSAgICBtMy5oYXNPcHRpb25hbEZsb2F0ID0gZmFsc2U7ICAvLyAtMCBkb2VzIG5vdCBlcXVhbHMo
KSB0aGUgZGVmYXVsdCArMCwKLSAgICBtMy5oYXNPcHRpb25hbERvdWJsZSA9IGZhbHNlOyAvLyBz
byB0aGVzZSBpbmNvcnJlY3QgJ2hhcycgZmxhZ3Mgc2hvdWxkIGJlIGRpc3JlZ2FyZGVkLgotICAg
IGFzc2VydFRydWUobTMuZXF1YWxzKG00KSk7ICAgIC8vIG5vdGU6IG00IGhhcyB0aGUgJ2hhcycg
ZmxhZ3Mgc2V0LgotICAgIGFzc2VydEZhbHNlKG0zLmVxdWFscyhuZXcgVGVzdEFsbFR5cGVzTmFu
b0hhcygpKSk7IC8vIG5vdGU6IHRoZSBuZXcgbWVzc2FnZSBoYXMgKzAgZGVmYXVsdHMKLSAgICBh
c3NlcnRUcnVlKG0zLmVxdWFscygKLSAgICAgICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKG5ldyBU
ZXN0QWxsVHlwZXNOYW5vSGFzKCksIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG0zKSkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiB0aGUgZGVzZXJpYWxpemVk
IG1lc3NhZ2UgaGFzIHRoZSAnaGFzJyBmbGFncyBzZXQuCi0KLSAgICAvLyAtLS0tLS0tCi0KLSAg
ICBUZXN0TmFub0FjY2Vzc29ycyBtNSA9IG5ldyBUZXN0TmFub0FjY2Vzc29ycygpOwotICAgIG01
LnNldE9wdGlvbmFsRmxvYXQoRmxvYXQuTmFOKTsKLSAgICBtNS5zZXRPcHRpb25hbERvdWJsZShE
b3VibGUuTmFOKTsKLSAgICBUZXN0TmFub0FjY2Vzc29ycyBtNiA9IG5ldyBUZXN0TmFub0FjY2Vz
c29ycygpOwotICAgIG02LnNldE9wdGlvbmFsRmxvYXQoRmxvYXQuTmFOKTsKLSAgICBtNi5zZXRP
cHRpb25hbERvdWJsZShEb3VibGUuTmFOKTsKLSAgICBhc3NlcnRUcnVlKG01LmVxdWFscyhtNikp
OwotICAgIGFzc2VydFRydWUobTUuZXF1YWxzKAotICAgICAgICBNZXNzYWdlTmFuby5tZXJnZUZy
b20obmV3IFRlc3ROYW5vQWNjZXNzb3JzKCksIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG02KSkp
KTsKLQotICAgIG01LnNldE9wdGlvbmFsRmxvYXQoKzBmKTsKLSAgICBtNi5zZXRPcHRpb25hbEZs
b2F0KC0wZik7Ci0gICAgYXNzZXJ0RmFsc2UobTUuZXF1YWxzKG02KSk7Ci0KLSAgICBtNS5zZXRP
cHRpb25hbEZsb2F0KC0wZik7Ci0gICAgbTUuc2V0T3B0aW9uYWxEb3VibGUoKzBkKTsKLSAgICBt
Ni5zZXRPcHRpb25hbERvdWJsZSgtMGQpOwotICAgIGFzc2VydEZhbHNlKG01LmVxdWFscyhtNikp
OwotCi0gICAgbTUuc2V0T3B0aW9uYWxEb3VibGUoLTBkKTsKLSAgICBhc3NlcnRUcnVlKG01LmVx
dWFscyhtNikpOwotICAgIGFzc2VydEZhbHNlKG01LmVxdWFscyhuZXcgVGVzdE5hbm9BY2Nlc3Nv
cnMoKSkpOwotICAgIGFzc2VydFRydWUobTUuZXF1YWxzKAotICAgICAgICBNZXNzYWdlTmFuby5t
ZXJnZUZyb20obmV3IFRlc3ROYW5vQWNjZXNzb3JzKCksIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5
KG02KSkpKTsKLQotICAgIC8vIC0tLS0tLS0KLQotICAgIE5hbm9SZWZlcmVuY2VUeXBlcy5UZXN0
QWxsVHlwZXNOYW5vIG03ID0gbmV3IE5hbm9SZWZlcmVuY2VUeXBlcy5UZXN0QWxsVHlwZXNOYW5v
KCk7Ci0gICAgbTcub3B0aW9uYWxGbG9hdCA9IEZsb2F0Lk5hTjsKLSAgICBtNy5vcHRpb25hbERv
dWJsZSA9IERvdWJsZS5OYU47Ci0gICAgTmFub1JlZmVyZW5jZVR5cGVzLlRlc3RBbGxUeXBlc05h
bm8gbTggPSBuZXcgTmFub1JlZmVyZW5jZVR5cGVzLlRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBt
OC5vcHRpb25hbEZsb2F0ID0gRmxvYXQuTmFOOwotICAgIG04Lm9wdGlvbmFsRG91YmxlID0gRG91
YmxlLk5hTjsKLSAgICBhc3NlcnRUcnVlKG03LmVxdWFscyhtOCkpOwotICAgIGFzc2VydFRydWUo
bTcuZXF1YWxzKE1lc3NhZ2VOYW5vLm1lcmdlRnJvbSgKLSAgICAgICAgbmV3IE5hbm9SZWZlcmVu
Y2VUeXBlcy5UZXN0QWxsVHlwZXNOYW5vKCksIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG03KSkp
KTsKLQotICAgIG03Lm9wdGlvbmFsRmxvYXQgPSArMGY7Ci0gICAgbTgub3B0aW9uYWxGbG9hdCA9
IC0wZjsKLSAgICBhc3NlcnRGYWxzZShtNy5lcXVhbHMobTgpKTsKLQotICAgIG03Lm9wdGlvbmFs
RmxvYXQgPSAtMGY7Ci0gICAgbTcub3B0aW9uYWxEb3VibGUgPSArMGQ7Ci0gICAgbTgub3B0aW9u
YWxEb3VibGUgPSAtMGQ7Ci0gICAgYXNzZXJ0RmFsc2UobTcuZXF1YWxzKG04KSk7Ci0KLSAgICBt
Ny5vcHRpb25hbERvdWJsZSA9IC0wZDsKLSAgICBhc3NlcnRUcnVlKG03LmVxdWFscyhtOCkpOwot
ICAgIGFzc2VydEZhbHNlKG03LmVxdWFscyhuZXcgTmFub1JlZmVyZW5jZVR5cGVzLlRlc3RBbGxU
eXBlc05hbm8oKSkpOwotICAgIGFzc2VydFRydWUobTcuZXF1YWxzKE1lc3NhZ2VOYW5vLm1lcmdl
RnJvbSgKLSAgICAgICAgbmV3IE5hbm9SZWZlcmVuY2VUeXBlcy5UZXN0QWxsVHlwZXNOYW5vKCks
IE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG03KSkpKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGlj
IFRlc3RBbGxUeXBlc05hbm8gZ2VuZXJhdGVNZXNzYWdlRm9yT25lb2YoaW50IGNhc2VOdW1iZXIp
IHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIHJlc3VsdCA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7
Ci0gICAgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlIG5lc3RlZCA9Ci0gICAgICAgIG5l
dyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UoKTsKLSAgICBuZXN0ZWQuYmIgPSAyOwot
ICAgIHN3aXRjaCAoY2FzZU51bWJlcikgewotICAgICAgY2FzZSBUZXN0QWxsVHlwZXNOYW5vLk9O
RU9GX1VJTlQzMl9GSUVMRF9OVU1CRVI6Ci0gICAgICAgIHJlc3VsdC5zZXRPbmVvZlVpbnQzMigx
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFRlc3RBbGxUeXBlc05hbm8uT05FT0ZfRU5V
TV9GSUVMRF9OVU1CRVI6Ci0gICAgICAgIHJlc3VsdC5zZXRPbmVvZkVudW0oVGVzdEFsbFR5cGVz
TmFuby5CQVIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVGVzdEFsbFR5cGVzTmFuby5P
TkVPRl9ORVNURURfTUVTU0FHRV9GSUVMRF9OVU1CRVI6Ci0gICAgICAgIHJlc3VsdC5zZXRPbmVv
Zk5lc3RlZE1lc3NhZ2UobmVzdGVkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFRlc3RB
bGxUeXBlc05hbm8uT05FT0ZfQllURVNfRklFTERfTlVNQkVSOgotICAgICAgICByZXN1bHQuc2V0
T25lb2ZCeXRlcyhuZXcgYnl0ZVtdIHsxLCAyfSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBUZXN0QWxsVHlwZXNOYW5vLk9ORU9GX1NUUklOR19GSUVMRF9OVU1CRVI6Ci0gICAgICAgIHJl
c3VsdC5zZXRPbmVvZlN0cmluZygiaGVsbG8iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IFRlc3RBbGxUeXBlc05hbm8uT05FT0ZfRklYRUQ2NF9GSUVMRF9OVU1CRVI6Ci0gICAgICAgIHJl
c3VsdC5zZXRPbmVvZkZpeGVkNjQoLTFMKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigidW5leHBlY3RlZCBjYXNlIG51
bWJlcjogIiArIGNhc2VOdW1iZXIpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdE9uZW9mSGFzaENvZGVFcXVhbHMoKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG0xID0gZ2VuZXJhdGVNZXNzYWdlRm9yT25lb2YoCi0g
ICAgICAgIFRlc3RBbGxUeXBlc05hbm8uT05FT0ZfVUlOVDMyX0ZJRUxEX05VTUJFUik7Ci0gICAg
YXNzZXJ0RXF1YWxzKG0xLCBnZW5lcmF0ZU1lc3NhZ2VGb3JPbmVvZigKLSAgICAgICAgVGVzdEFs
bFR5cGVzTmFuby5PTkVPRl9VSU5UMzJfRklFTERfTlVNQkVSKSk7Ci0gICAgYXNzZXJ0RmFsc2Uo
bTEuZXF1YWxzKG5ldyBUZXN0QWxsVHlwZXNOYW5vKCkpKTsKLQotICAgIFRlc3RBbGxUeXBlc05h
bm8gbTIgPSBnZW5lcmF0ZU1lc3NhZ2VGb3JPbmVvZigKLSAgICAgICAgVGVzdEFsbFR5cGVzTmFu
by5PTkVPRl9FTlVNX0ZJRUxEX05VTUJFUik7Ci0gICAgYXNzZXJ0RXF1YWxzKG0yLCBnZW5lcmF0
ZU1lc3NhZ2VGb3JPbmVvZigKLSAgICAgICAgVGVzdEFsbFR5cGVzTmFuby5PTkVPRl9FTlVNX0ZJ
RUxEX05VTUJFUikpOwotICAgIGFzc2VydEZhbHNlKG0yLmVxdWFscyhuZXcgVGVzdEFsbFR5cGVz
TmFubygpKSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG0zID0gZ2VuZXJhdGVNZXNzYWdlRm9y
T25lb2YoCi0gICAgICAgIFRlc3RBbGxUeXBlc05hbm8uT05FT0ZfTkVTVEVEX01FU1NBR0VfRklF
TERfTlVNQkVSKTsKLSAgICBhc3NlcnRFcXVhbHMobTMsIGdlbmVyYXRlTWVzc2FnZUZvck9uZW9m
KAotICAgICAgICBUZXN0QWxsVHlwZXNOYW5vLk9ORU9GX05FU1RFRF9NRVNTQUdFX0ZJRUxEX05V
TUJFUikpOwotICAgIGFzc2VydEZhbHNlKG0zLmVxdWFscyhuZXcgVGVzdEFsbFR5cGVzTmFubygp
KSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG00ID0gZ2VuZXJhdGVNZXNzYWdlRm9yT25lb2Yo
Ci0gICAgICAgIFRlc3RBbGxUeXBlc05hbm8uT05FT0ZfQllURVNfRklFTERfTlVNQkVSKTsKLSAg
ICBhc3NlcnRFcXVhbHMobTQsIGdlbmVyYXRlTWVzc2FnZUZvck9uZW9mKAotICAgICAgICBUZXN0
QWxsVHlwZXNOYW5vLk9ORU9GX0JZVEVTX0ZJRUxEX05VTUJFUikpOwotICAgIGFzc2VydEZhbHNl
KG00LmVxdWFscyhuZXcgVGVzdEFsbFR5cGVzTmFubygpKSk7Ci0KLSAgICBUZXN0QWxsVHlwZXNO
YW5vIG01ID0gZ2VuZXJhdGVNZXNzYWdlRm9yT25lb2YoCi0gICAgICAgIFRlc3RBbGxUeXBlc05h
bm8uT05FT0ZfU1RSSU5HX0ZJRUxEX05VTUJFUik7Ci0gICAgYXNzZXJ0RXF1YWxzKG01LCBnZW5l
cmF0ZU1lc3NhZ2VGb3JPbmVvZigKLSAgICAgICAgVGVzdEFsbFR5cGVzTmFuby5PTkVPRl9TVFJJ
TkdfRklFTERfTlVNQkVSKSk7Ci0gICAgYXNzZXJ0RmFsc2UobTUuZXF1YWxzKG5ldyBUZXN0QWxs
VHlwZXNOYW5vKCkpKTsKLQotICAgIFRlc3RBbGxUeXBlc05hbm8gbTYgPSBnZW5lcmF0ZU1lc3Nh
Z2VGb3JPbmVvZigKLSAgICAgICAgVGVzdEFsbFR5cGVzTmFuby5PTkVPRl9GSVhFRDY0X0ZJRUxE
X05VTUJFUik7Ci0gICAgYXNzZXJ0RXF1YWxzKG02LCBnZW5lcmF0ZU1lc3NhZ2VGb3JPbmVvZigK
LSAgICAgICAgVGVzdEFsbFR5cGVzTmFuby5PTkVPRl9GSVhFRDY0X0ZJRUxEX05VTUJFUikpOwot
ICAgIGFzc2VydEZhbHNlKG02LmVxdWFscyhuZXcgVGVzdEFsbFR5cGVzTmFubygpKSk7Ci0KLSAg
ICBNYXA8VGVzdEFsbFR5cGVzTmFubywgSW50ZWdlcj4gbWFwID0KLSAgICAgICAgbmV3IEhhc2hN
YXA8VGVzdEFsbFR5cGVzTmFubywgSW50ZWdlcj4oKTsKLSAgICBtYXAucHV0KG0xLCAxKTsKLSAg
ICBtYXAucHV0KG0yLCAyKTsKLSAgICBtYXAucHV0KG0zLCAzKTsKLSAgICBtYXAucHV0KG00LCA0
KTsKLSAgICBtYXAucHV0KG01LCA1KTsKLSAgICBtYXAucHV0KG02LCA2KTsKLQotICAgIGFzc2Vy
dEVxdWFscyg2LCBtYXAuc2l6ZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja09uZW9m
Q2FzZShUZXN0QWxsVHlwZXNOYW5vIG5hbm8sIGludCBmaWVsZCkKLSAgICAgIHRocm93cyBFeGNl
cHRpb24gewotICAgIGFzc2VydEVxdWFscyhmaWVsZCwgbmFuby5nZXRPbmVvZkZpZWxkQ2FzZSgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIGZpZWxkID09IFRlc3RBbGxUeXBlc05hbm8u
T05FT0ZfQllURVNfRklFTERfTlVNQkVSLAotICAgICAgICBuYW5vLmhhc09uZW9mQnl0ZXMoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBmaWVsZCA9PSBUZXN0QWxsVHlwZXNOYW5vLk9O
RU9GX0VOVU1fRklFTERfTlVNQkVSLAotICAgICAgICBuYW5vLmhhc09uZW9mRW51bSgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIGZpZWxkID09IFRlc3RBbGxUeXBlc05hbm8uT05FT0Zf
RklYRUQ2NF9GSUVMRF9OVU1CRVIsCi0gICAgICAgIG5hbm8uaGFzT25lb2ZGaXhlZDY0KCkpOwot
ICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgZmllbGQgPT0gVGVzdEFsbFR5cGVzTmFuby5PTkVP
Rl9ORVNURURfTUVTU0FHRV9GSUVMRF9OVU1CRVIsCi0gICAgICAgIG5hbm8uaGFzT25lb2ZOZXN0
ZWRNZXNzYWdlKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgZmllbGQgPT0gVGVzdEFs
bFR5cGVzTmFuby5PTkVPRl9TVFJJTkdfRklFTERfTlVNQkVSLAotICAgICAgICBuYW5vLmhhc09u
ZW9mU3RyaW5nKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgZmllbGQgPT0gVGVzdEFs
bFR5cGVzTmFuby5PTkVPRl9VSU5UMzJfRklFTERfTlVNQkVSLAotICAgICAgICBuYW5vLmhhc09u
ZW9mVWludDMyKCkpOwotCi0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0T25lb2ZEZWZhdWx0KCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVzdEFsbFR5cGVzTmFubyBtMSA9IG5ldyBUZXN0QWxs
VHlwZXNOYW5vKCk7Ci0gICAgY2hlY2tPbmVvZkNhc2UobTEsIDApOwotICAgIGFzc2VydEVxdWFs
cyhXaXJlRm9ybWF0TmFuby5FTVBUWV9CWVRFUywgbTEuZ2V0T25lb2ZCeXRlcygpKTsKLSAgICBh
c3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzTmFuby5GT08sIG0xLmdldE9uZW9mRW51bSgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMEwsIG0xLmdldE9uZW9mRml4ZWQ2NCgpKTsKLSAgICBhc3NlcnRFcXVh
bHMobnVsbCwgbTEuZ2V0T25lb2ZOZXN0ZWRNZXNzYWdlKCkpOwotICAgIGFzc2VydEVxdWFscygi
IiwgbTEuZ2V0T25lb2ZTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG0xLmdldE9uZW9m
VWludDMyKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9uZW9mRXhjbHVzaXZlbmVzcygp
IHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RBbGxUeXBlc05hbm8gbSA9IG5ldyBUZXN0QWxs
VHlwZXNOYW5vKCk7Ci0gICAgY2hlY2tPbmVvZkNhc2UobSwgMCk7Ci0KLSAgICBtLnNldE9uZW9m
Qnl0ZXMobmV3IGJ5dGVbXXswLCAxfSk7Ci0gICAgY2hlY2tPbmVvZkNhc2UobSwgVGVzdEFsbFR5
cGVzTmFuby5PTkVPRl9CWVRFU19GSUVMRF9OVU1CRVIpOwotICAgIGFzc2VydFRydWUoQXJyYXlz
LmVxdWFscyhuZXcgYnl0ZVtdezAsICAxfSwgbS5nZXRPbmVvZkJ5dGVzKCkpKTsKLQotICAgIG0u
c2V0T25lb2ZFbnVtKFRlc3RBbGxUeXBlc05hbm8uQkFaKTsKLSAgICBjaGVja09uZW9mQ2FzZSht
LCBUZXN0QWxsVHlwZXNOYW5vLk9ORU9GX0VOVU1fRklFTERfTlVNQkVSKTsKLSAgICBhc3NlcnRF
cXVhbHMoVGVzdEFsbFR5cGVzTmFuby5CQVosIG0uZ2V0T25lb2ZFbnVtKCkpOwotICAgIGFzc2Vy
dEVxdWFscyhXaXJlRm9ybWF0TmFuby5FTVBUWV9CWVRFUywgbS5nZXRPbmVvZkJ5dGVzKCkpOwot
Ci0gICAgbS5zZXRPbmVvZkZpeGVkNjQoLTFMKTsKLSAgICBjaGVja09uZW9mQ2FzZShtLCBUZXN0
QWxsVHlwZXNOYW5vLk9ORU9GX0ZJWEVENjRfRklFTERfTlVNQkVSKTsKLSAgICBhc3NlcnRFcXVh
bHMoLTFMLCBtLmdldE9uZW9mRml4ZWQ2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5
cGVzTmFuby5GT08sIG0uZ2V0T25lb2ZFbnVtKCkpOwotCi0gICAgbS5zZXRPbmVvZk5lc3RlZE1l
c3NhZ2UobmV3IFRlc3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2FnZSgpKTsKLSAgICBjaGVja09u
ZW9mQ2FzZShtLCBUZXN0QWxsVHlwZXNOYW5vLk9ORU9GX05FU1RFRF9NRVNTQUdFX0ZJRUxEX05V
TUJFUik7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBuZXcgVGVzdEFsbFR5cGVzTmFuby5O
ZXN0ZWRNZXNzYWdlKCksIG0uZ2V0T25lb2ZOZXN0ZWRNZXNzYWdlKCkpOwotICAgIGFzc2VydEVx
dWFscygwTCwgbS5nZXRPbmVvZkZpeGVkNjQoKSk7Ci0KLSAgICBtLnNldE9uZW9mU3RyaW5nKCJo
ZWxsbyIpOwotICAgIGNoZWNrT25lb2ZDYXNlKG0sIFRlc3RBbGxUeXBlc05hbm8uT05FT0ZfU1RS
SU5HX0ZJRUxEX05VTUJFUik7Ci0gICAgYXNzZXJ0RXF1YWxzKCJoZWxsbyIsIG0uZ2V0T25lb2ZT
dHJpbmcoKSk7Ci0gICAgYXNzZXJ0TnVsbChtLmdldE9uZW9mTmVzdGVkTWVzc2FnZSgpKTsKLQot
ICAgIG0uc2V0T25lb2ZVaW50MzIoMTApOwotICAgIGNoZWNrT25lb2ZDYXNlKG0sIFRlc3RBbGxU
eXBlc05hbm8uT05FT0ZfVUlOVDMyX0ZJRUxEX05VTUJFUik7Ci0gICAgYXNzZXJ0RXF1YWxzKDEw
LCBtLmdldE9uZW9mVWludDMyKCkpOwotICAgIGFzc2VydEVxdWFscygiIiwgbS5nZXRPbmVvZlN0
cmluZygpKTsKLQotICAgIG0uc2V0T25lb2ZCeXRlcyhuZXcgYnl0ZVtdezAsIDF9KTsKLSAgICBj
aGVja09uZW9mQ2FzZShtLCBUZXN0QWxsVHlwZXNOYW5vLk9ORU9GX0JZVEVTX0ZJRUxEX05VTUJF
Uik7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKG5ldyBieXRlW117MCwgIDF9LCBtLmdl
dE9uZW9mQnl0ZXMoKSkpOwotICAgIGFzc2VydEVxdWFscygwLCBtLmdldE9uZW9mVWludDMyKCkp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdE9uZW9mQ2xlYXIoKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIG0gPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAg
IG0uc2V0T25lb2ZCeXRlcyhuZXcgYnl0ZVtdezAsIDF9KTsKLSAgICBtLmNsZWFyT25lb2ZGaWVs
ZCgpOwotICAgIGNoZWNrT25lb2ZDYXNlKG0sIDApOwotCi0gICAgbS5zZXRPbmVvZkVudW0oVGVz
dEFsbFR5cGVzTmFuby5CQVopOwotICAgIG0uY2xlYXJPbmVvZkZpZWxkKCk7Ci0gICAgY2hlY2tP
bmVvZkNhc2UobSwgMCk7Ci0KLSAgICBtLnNldE9uZW9mRml4ZWQ2NCgtMUwpOwotICAgIG0uY2xl
YXJPbmVvZkZpZWxkKCk7Ci0gICAgY2hlY2tPbmVvZkNhc2UobSwgMCk7Ci0KLSAgICBtLnNldE9u
ZW9mTmVzdGVkTWVzc2FnZShuZXcgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlKCkpOwot
ICAgIG0uY2xlYXJPbmVvZkZpZWxkKCk7Ci0gICAgY2hlY2tPbmVvZkNhc2UobSwgMCk7Ci0KLSAg
ICBtLnNldE9uZW9mU3RyaW5nKCJoZWxsbyIpOwotICAgIG0uY2xlYXJPbmVvZkZpZWxkKCk7Ci0g
ICAgY2hlY2tPbmVvZkNhc2UobSwgMCk7Ci0KLSAgICBtLnNldE9uZW9mVWludDMyKDEwKTsKLSAg
ICBtLmNsZWFyT25lb2ZGaWVsZCgpOwotICAgIGNoZWNrT25lb2ZDYXNlKG0sIDApOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdE9uZW9mTWFyc2hhbGluZygpIHRocm93cyBFeGNlcHRpb24gewot
ICAgIFRlc3RBbGxUeXBlc05hbm8gbSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgVGVz
dEFsbFR5cGVzTmFubyBwYXJzZWQgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIHsKLSAg
ICAgIG0uc2V0T25lb2ZCeXRlcyhuZXcgYnl0ZVtdezAsIDF9KTsKLSAgICAgIGJ5dGVbXSBzZXJp
YWxpemVkID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobSk7Ci0gICAgICBNZXNzYWdlTmFuby5t
ZXJnZUZyb20ocGFyc2VkLCBzZXJpYWxpemVkKTsKLSAgICAgIGNoZWNrT25lb2ZDYXNlKHBhcnNl
ZCwgVGVzdEFsbFR5cGVzTmFuby5PTkVPRl9CWVRFU19GSUVMRF9OVU1CRVIpOwotICAgICAgYXNz
ZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKG5ldyBieXRlW117MCwgMX0sIHBhcnNlZC5nZXRPbmVvZkJ5
dGVzKCkpKTsKLSAgICB9Ci0gICAgewotICAgICAgbS5zZXRPbmVvZkVudW0oVGVzdEFsbFR5cGVz
TmFuby5CQVopOwotICAgICAgYnl0ZVtdIHNlcmlhbGl6ZWQgPSBNZXNzYWdlTmFuby50b0J5dGVB
cnJheShtKTsKLSAgICAgIE1lc3NhZ2VOYW5vLm1lcmdlRnJvbShwYXJzZWQsIHNlcmlhbGl6ZWQp
OwotICAgICAgY2hlY2tPbmVvZkNhc2UobSwgVGVzdEFsbFR5cGVzTmFuby5PTkVPRl9FTlVNX0ZJ
RUxEX05VTUJFUik7Ci0gICAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzTmFuby5CQVosIG0u
Z2V0T25lb2ZFbnVtKCkpOwotICAgIH0KLSAgICB7Ci0gICAgICBtLnNldE9uZW9mRW51bShUZXN0
QWxsVHlwZXNOYW5vLkJBWik7Ci0gICAgICBieXRlW10gc2VyaWFsaXplZCA9IE1lc3NhZ2VOYW5v
LnRvQnl0ZUFycmF5KG0pOwotICAgICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKHBhcnNlZCwgc2Vy
aWFsaXplZCk7Ci0gICAgICBjaGVja09uZW9mQ2FzZShtLCBUZXN0QWxsVHlwZXNOYW5vLk9ORU9G
X0VOVU1fRklFTERfTlVNQkVSKTsKLSAgICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXNOYW5v
LkJBWiwgbS5nZXRPbmVvZkVudW0oKSk7Ci0gICAgfQotICAgIHsKLSAgICAgIG0uc2V0T25lb2ZG
aXhlZDY0KC0xTCk7Ci0gICAgICBieXRlW10gc2VyaWFsaXplZCA9IE1lc3NhZ2VOYW5vLnRvQnl0
ZUFycmF5KG0pOwotICAgICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKHBhcnNlZCwgc2VyaWFsaXpl
ZCk7Ci0gICAgICBjaGVja09uZW9mQ2FzZShtLCBUZXN0QWxsVHlwZXNOYW5vLk9ORU9GX0ZJWEVE
NjRfRklFTERfTlVNQkVSKTsKLSAgICAgIGFzc2VydEVxdWFscygtMUwsIG0uZ2V0T25lb2ZGaXhl
ZDY0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICBtLnNldE9uZW9mTmVzdGVkTWVzc2FnZShuZXcg
VGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlKCkpOwotICAgICAgYnl0ZVtdIHNlcmlhbGl6
ZWQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtKTsKLSAgICAgIE1lc3NhZ2VOYW5vLm1lcmdl
RnJvbShwYXJzZWQsIHNlcmlhbGl6ZWQpOwotICAgICAgY2hlY2tPbmVvZkNhc2UobSwgVGVzdEFs
bFR5cGVzTmFuby5PTkVPRl9ORVNURURfTUVTU0FHRV9GSUVMRF9OVU1CRVIpOwotICAgICAgYXNz
ZXJ0RXF1YWxzKAotICAgICAgICAgIG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2Uo
KSwgbS5nZXRPbmVvZk5lc3RlZE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgIG0uc2V0
T25lb2ZTdHJpbmcoImhlbGxvIik7Ci0gICAgICBieXRlW10gc2VyaWFsaXplZCA9IE1lc3NhZ2VO
YW5vLnRvQnl0ZUFycmF5KG0pOwotICAgICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKHBhcnNlZCwg
c2VyaWFsaXplZCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoImhlbGxvIiwgbS5nZXRPbmVvZlN0cmlu
ZygpKTsKLSAgICAgIGFzc2VydE51bGwobS5nZXRPbmVvZk5lc3RlZE1lc3NhZ2UoKSk7Ci0gICAg
fQotICAgIHsKLSAgICAgIG0uc2V0T25lb2ZVaW50MzIoMTApOwotICAgICAgYnl0ZVtdIHNlcmlh
bGl6ZWQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtKTsKLSAgICAgIE1lc3NhZ2VOYW5vLm1l
cmdlRnJvbShwYXJzZWQsIHNlcmlhbGl6ZWQpOwotICAgICAgY2hlY2tPbmVvZkNhc2UobSwgVGVz
dEFsbFR5cGVzTmFuby5PTkVPRl9VSU5UMzJfRklFTERfTlVNQkVSKTsKLSAgICAgIGFzc2VydEVx
dWFscygxMCwgbS5nZXRPbmVvZlVpbnQzMigpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCB0ZXN0T25lb2ZTZXJpYWxpemVkQ29uY2F0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgVGVz
dEFsbFR5cGVzTmFubyBtMSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgbTEuc2V0T25l
b2ZCeXRlcyhuZXcgYnl0ZVtdIHswLCAxfSk7Ci0gICAgYnl0ZVtdIGIxID0gTWVzc2FnZU5hbm8u
dG9CeXRlQXJyYXkobTEpOwotICAgIFRlc3RBbGxUeXBlc05hbm8gbTIgPSBuZXcgVGVzdEFsbFR5
cGVzTmFubygpOwotICAgIG0yLnNldE9uZW9mRW51bShUZXN0QWxsVHlwZXNOYW5vLkJBWik7Ci0g
ICAgYnl0ZVtdIGIyID0gTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobTIpOwotICAgIGJ5dGVbXSBi
MyA9IG5ldyBieXRlW2IxLmxlbmd0aCArIGIyLmxlbmd0aF07Ci0gICAgU3lzdGVtLmFycmF5Y29w
eShiMSwgMCwgYjMsIDAsIGIxLmxlbmd0aCk7Ci0gICAgU3lzdGVtLmFycmF5Y29weShiMiwgMCwg
YjMsIGIxLmxlbmd0aCwgYjIubGVuZ3RoKTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIHBhcnNlZCA9
IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKHBhcnNl
ZCwgYjMpOwotICAgIC8vIHRoZSBsYXN0IG9uIHRoZSB3aXJlIHdpbnMuCi0gICAgY2hlY2tPbmVv
ZkNhc2UocGFyc2VkLCBUZXN0QWxsVHlwZXNOYW5vLk9ORU9GX0VOVU1fRklFTERfTlVNQkVSKTsK
LSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzTmFuby5CQVosIHBhcnNlZC5nZXRPbmVvZkVu
dW0oKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0TnVsbFJlcGVhdGVkRmllbGRzKCkgdGhy
b3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gQ2hlY2sgdGhhdCBzZXJpYWxpemF0aW9uIGFmdGVyIGV4
cGxpY2l0bHkgc2V0dGluZyBhIHJlcGVhdGVkIGZpZWxkCi0gICAgLy8gdG8gbnVsbCBkb2Vzbid0
IE5QRS4KLSAgICBUZXN0QWxsVHlwZXNOYW5vIG1lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzTmFu
bygpOwotICAgIG1lc3NhZ2UucmVwZWF0ZWRJbnQzMiA9IG51bGw7Ci0gICAgTWVzc2FnZU5hbm8u
dG9CeXRlQXJyYXkobWVzc2FnZSk7ICAvLyBzaG91bGQgbm90IE5QRQotICAgIG1lc3NhZ2UudG9T
dHJpbmcoKTsgLy8gc2hvdWxkIG5vdCBOUEUKLQotICAgIG1lc3NhZ2UucmVwZWF0ZWROZXN0ZWRF
bnVtID0gbnVsbDsKLSAgICBNZXNzYWdlTmFuby50b0J5dGVBcnJheShtZXNzYWdlKTsgIC8vIHNo
b3VsZCBub3QgTlBFCi0gICAgbWVzc2FnZS50b1N0cmluZygpOyAvLyBzaG91bGQgbm90IE5QRQot
Ci0gICAgbWVzc2FnZS5yZXBlYXRlZEJ5dGVzID0gbnVsbDsKLSAgICBNZXNzYWdlTmFuby50b0J5
dGVBcnJheShtZXNzYWdlKTsgLy8gc2hvdWxkIG5vdCBOUEUKLSAgICBtZXNzYWdlLnRvU3RyaW5n
KCk7IC8vIHNob3VsZCBub3QgTlBFCi0KLSAgICBtZXNzYWdlLnJlcGVhdGVkTmVzdGVkTWVzc2Fn
ZSA9IG51bGw7Ci0gICAgTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobWVzc2FnZSk7IC8vIHNob3Vs
ZCBub3QgTlBFCi0gICAgbWVzc2FnZS50b1N0cmluZygpOyAvLyBzaG91bGQgbm90IE5QRQotCi0g
ICAgbWVzc2FnZS5yZXBlYXRlZFBhY2tlZEludDMyID0gbnVsbDsKLSAgICBNZXNzYWdlTmFuby50
b0J5dGVBcnJheShtZXNzYWdlKTsgLy8gc2hvdWxkIG5vdCBOUEUKLSAgICBtZXNzYWdlLnRvU3Ry
aW5nKCk7IC8vIHNob3VsZCBub3QgTlBFCi0KLSAgICBtZXNzYWdlLnJlcGVhdGVkUGFja2VkTmVz
dGVkRW51bSA9IG51bGw7Ci0gICAgTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkobWVzc2FnZSk7IC8v
IHNob3VsZCBub3QgTlBFCi0gICAgbWVzc2FnZS50b1N0cmluZygpOyAvLyBzaG91bGQgbm90IE5Q
RQotCi0gICAgLy8gQ3JlYXRlIGEgc2Vjb25kIG1lc3NhZ2UgdG8gbWVyZ2UgaW50byBtZXNzYWdl
LgotICAgIFRlc3RBbGxUeXBlc05hbm8gc2Vjb25kTWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXNO
YW5vKCk7Ci0gICAgc2Vjb25kTWVzc2FnZS5yZXBlYXRlZEludDMyID0gbmV3IGludFtdIHsxLCAy
LCAzfTsKLSAgICBzZWNvbmRNZXNzYWdlLnJlcGVhdGVkTmVzdGVkRW51bSA9IG5ldyBpbnRbXSB7
Ci0gICAgICBUZXN0QWxsVHlwZXNOYW5vLkZPTywgVGVzdEFsbFR5cGVzTmFuby5CQVIKLSAgICB9
OwotICAgIHNlY29uZE1lc3NhZ2UucmVwZWF0ZWRCeXRlcyA9IG5ldyBieXRlW11bXSB7ezEsIDJ9
LCB7MywgNH19OwotICAgIFRlc3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2FnZSBuZXN0ZWQgPQot
ICAgICAgICBuZXcgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlKCk7Ci0gICAgbmVzdGVk
LmJiID0gNTU7Ci0gICAgc2Vjb25kTWVzc2FnZS5yZXBlYXRlZE5lc3RlZE1lc3NhZ2UgPQotICAg
ICAgICBuZXcgVGVzdEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlW10ge25lc3RlZH07Ci0gICAg
c2Vjb25kTWVzc2FnZS5yZXBlYXRlZFBhY2tlZEludDMyID0gbmV3IGludFtdIHsxLCAyLCAzfTsK
LSAgICBzZWNvbmRNZXNzYWdlLnJlcGVhdGVkUGFja2VkTmVzdGVkRW51bSA9IG5ldyBpbnRbXSB7
Ci0gICAgICAgIFRlc3RBbGxUeXBlc05hbm8uRk9PLCBUZXN0QWxsVHlwZXNOYW5vLkJBUgotICAg
ICAgfTsKLQotICAgIC8vIFNob3VsZCBub3QgTlBFCi0gICAgbWVzc2FnZS5tZXJnZUZyb20oQ29k
ZWRJbnB1dEJ5dGVCdWZmZXJOYW5vLm5ld0luc3RhbmNlKAotICAgICAgICBNZXNzYWdlTmFuby50
b0J5dGVBcnJheShzZWNvbmRNZXNzYWdlKSkpOwotICAgIGFzc2VydEVxdWFscygzLCBtZXNzYWdl
LnJlcGVhdGVkSW50MzIubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgbWVzc2FnZS5yZXBl
YXRlZEludDMyWzJdKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbWVzc2FnZS5yZXBlYXRlZE5lc3Rl
ZEVudW0ubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzTmFuby5GT08sIG1l
c3NhZ2UucmVwZWF0ZWROZXN0ZWRFbnVtWzBdKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgbWVzc2Fn
ZS5yZXBlYXRlZEJ5dGVzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDQsIG1lc3NhZ2UucmVw
ZWF0ZWRCeXRlc1sxXVsxXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIG1lc3NhZ2UucmVwZWF0ZWRO
ZXN0ZWRNZXNzYWdlLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDU1LCBtZXNzYWdlLnJlcGVh
dGVkTmVzdGVkTWVzc2FnZVswXS5iYik7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIG1lc3NhZ2UucmVw
ZWF0ZWRQYWNrZWRJbnQzMi5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygyLCBtZXNzYWdlLnJl
cGVhdGVkUGFja2VkSW50MzJbMV0pOwotICAgIGFzc2VydEVxdWFscygyLCBtZXNzYWdlLnJlcGVh
dGVkUGFja2VkTmVzdGVkRW51bS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlw
ZXNOYW5vLkJBUiwgbWVzc2FnZS5yZXBlYXRlZFBhY2tlZE5lc3RlZEVudW1bMV0pOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdE51bGxSZXBlYXRlZEZpZWxkRWxlbWVudHMoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICAvLyBDaGVjayB0aGF0IHNlcmlhbGl6YXRpb24gd2l0aCBudWxsIGFycmF5
IGVsZW1lbnRzIGRvZXNuJ3QgTlBFLgotICAgIFN0cmluZyBzdHJpbmcxID0gIjEiOwotICAgIFN0
cmluZyBzdHJpbmcyID0gIjIiOwotICAgIGJ5dGVbXSBieXRlczEgPSB7MywgNH07Ci0gICAgYnl0
ZVtdIGJ5dGVzMiA9IHs1LCA2fTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2Ug
bXNnMSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UoKTsKLSAgICBtc2cxLmJi
ID0gNzsKLSAgICBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UgbXNnMiA9IG5ldyBUZXN0
QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UoKTsKLSAgICBtc2cyLmJiID0gODsKLQotICAgIFRl
c3RBbGxUeXBlc05hbm8gbWVzc2FnZSA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgbWVz
c2FnZS5yZXBlYXRlZFN0cmluZyA9IG5ldyBTdHJpbmdbXSB7bnVsbCwgc3RyaW5nMSwgc3RyaW5n
Mn07Ci0gICAgbWVzc2FnZS5yZXBlYXRlZEJ5dGVzID0gbmV3IGJ5dGVbXVtdIHtieXRlczEsIG51
bGwsIGJ5dGVzMn07Ci0gICAgbWVzc2FnZS5yZXBlYXRlZE5lc3RlZE1lc3NhZ2UgPSBuZXcgVGVz
dEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlW10ge21zZzEsIG1zZzIsIG51bGx9OwotICAgIG1l
c3NhZ2UucmVwZWF0ZWRHcm91cCA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vLlJlcGVhdGVkR3JvdXBb
XSB7bnVsbCwgbnVsbCwgbnVsbH07Ci0KLSAgICBieXRlW10gc2VyaWFsaXplZCA9IE1lc3NhZ2VO
YW5vLnRvQnl0ZUFycmF5KG1lc3NhZ2UpOyAvLyBzaG91bGQgbm90IE5QRQotICAgIFRlc3RBbGxU
eXBlc05hbm8gZGVzZXJpYWxpemVkID0gTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKG5ldyBUZXN0QWxs
VHlwZXNOYW5vKCksIHNlcmlhbGl6ZWQpOwotICAgIGFzc2VydEVxdWFscygyLCBkZXNlcmlhbGl6
ZWQucmVwZWF0ZWRTdHJpbmcubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoc3RyaW5nMSwgZGVz
ZXJpYWxpemVkLnJlcGVhdGVkU3RyaW5nWzBdKTsKLSAgICBhc3NlcnRFcXVhbHMoc3RyaW5nMiwg
ZGVzZXJpYWxpemVkLnJlcGVhdGVkU3RyaW5nWzFdKTsKLSAgICBhc3NlcnRFcXVhbHMoMiwgZGVz
ZXJpYWxpemVkLnJlcGVhdGVkQnl0ZXMubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5l
cXVhbHMoYnl0ZXMxLCBkZXNlcmlhbGl6ZWQucmVwZWF0ZWRCeXRlc1swXSkpOwotICAgIGFzc2Vy
dFRydWUoQXJyYXlzLmVxdWFscyhieXRlczIsIGRlc2VyaWFsaXplZC5yZXBlYXRlZEJ5dGVzWzFd
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGRlc2VyaWFsaXplZC5yZXBlYXRlZE5lc3RlZE1lc3Nh
Z2UubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnMS5iYiwgZGVzZXJpYWxpemVkLnJlcGVh
dGVkTmVzdGVkTWVzc2FnZVswXS5iYik7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZzIuYmIsIGRlc2Vy
aWFsaXplZC5yZXBlYXRlZE5lc3RlZE1lc3NhZ2VbMV0uYmIpOwotICAgIGFzc2VydEVxdWFscygw
LCBkZXNlcmlhbGl6ZWQucmVwZWF0ZWRHcm91cC5sZW5ndGgpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgdGVzdFJlcGVhdGVkTWVyZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBDaGVjayB0
aGF0IG1lcmdpbmcgcmVwZWF0ZWQgZmllbGRzIGNhdXNlIHRoZSBhcnJheXMgdG8gZXhwYW5kIHdp
dGgKLSAgICAvLyBuZXcgZGF0YS4KLSAgICBUZXN0QWxsVHlwZXNOYW5vIGZpcnN0ID0gbmV3IFRl
c3RBbGxUeXBlc05hbm8oKTsKLSAgICBmaXJzdC5yZXBlYXRlZEludDMyID0gbmV3IGludFtdIHsx
LCAyLCAzfTsKLSAgICBUZXN0QWxsVHlwZXNOYW5vIHNlY29uZCA9IG5ldyBUZXN0QWxsVHlwZXNO
YW5vKCk7Ci0gICAgc2Vjb25kLnJlcGVhdGVkSW50MzIgPSBuZXcgaW50W10gezQsIDV9OwotICAg
IE1lc3NhZ2VOYW5vLm1lcmdlRnJvbShmaXJzdCwgTWVzc2FnZU5hbm8udG9CeXRlQXJyYXkoc2Vj
b25kKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDUsIGZpcnN0LnJlcGVhdGVkSW50MzIubGVuZ3RoKTsK
LSAgICBhc3NlcnRFcXVhbHMoMSwgZmlyc3QucmVwZWF0ZWRJbnQzMlswXSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDQsIGZpcnN0LnJlcGVhdGVkSW50MzJbM10pOwotCi0gICAgZmlyc3QgPSBuZXcgVGVz
dEFsbFR5cGVzTmFubygpOwotICAgIGZpcnN0LnJlcGVhdGVkTmVzdGVkRW51bSA9IG5ldyBpbnRb
XSB7VGVzdEFsbFR5cGVzTmFuby5CQVJ9OwotICAgIHNlY29uZCA9IG5ldyBUZXN0QWxsVHlwZXNO
YW5vKCk7Ci0gICAgc2Vjb25kLnJlcGVhdGVkTmVzdGVkRW51bSA9IG5ldyBpbnRbXSB7VGVzdEFs
bFR5cGVzTmFuby5GT099OwotICAgIE1lc3NhZ2VOYW5vLm1lcmdlRnJvbShmaXJzdCwgTWVzc2Fn
ZU5hbm8udG9CeXRlQXJyYXkoc2Vjb25kKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIGZpcnN0LnJl
cGVhdGVkTmVzdGVkRW51bS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscyhUZXN0QWxsVHlwZXNO
YW5vLkJBUiwgZmlyc3QucmVwZWF0ZWROZXN0ZWRFbnVtWzBdKTsKLSAgICBhc3NlcnRFcXVhbHMo
VGVzdEFsbFR5cGVzTmFuby5GT08sIGZpcnN0LnJlcGVhdGVkTmVzdGVkRW51bVsxXSk7Ci0KLSAg
ICBmaXJzdCA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgZmlyc3QucmVwZWF0ZWROZXN0
ZWRNZXNzYWdlID0gbmV3IFRlc3RBbGxUeXBlc05hbm8uTmVzdGVkTWVzc2FnZVtdIHsKLSAgICAg
IG5ldyBUZXN0QWxsVHlwZXNOYW5vLk5lc3RlZE1lc3NhZ2UoKQotICAgIH07Ci0gICAgZmlyc3Qu
cmVwZWF0ZWROZXN0ZWRNZXNzYWdlWzBdLmJiID0gMzsKLSAgICBzZWNvbmQgPSBuZXcgVGVzdEFs
bFR5cGVzTmFubygpOwotICAgIHNlY29uZC5yZXBlYXRlZE5lc3RlZE1lc3NhZ2UgPSBuZXcgVGVz
dEFsbFR5cGVzTmFuby5OZXN0ZWRNZXNzYWdlW10gewotICAgICAgbmV3IFRlc3RBbGxUeXBlc05h
bm8uTmVzdGVkTWVzc2FnZSgpCi0gICAgfTsKLSAgICBzZWNvbmQucmVwZWF0ZWROZXN0ZWRNZXNz
YWdlWzBdLmJiID0gNTsKLSAgICBNZXNzYWdlTmFuby5tZXJnZUZyb20oZmlyc3QsIE1lc3NhZ2VO
YW5vLnRvQnl0ZUFycmF5KHNlY29uZCkpOwotICAgIGFzc2VydEVxdWFscygyLCBmaXJzdC5yZXBl
YXRlZE5lc3RlZE1lc3NhZ2UubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgZmlyc3QucmVw
ZWF0ZWROZXN0ZWRNZXNzYWdlWzBdLmJiKTsKLSAgICBhc3NlcnRFcXVhbHMoNSwgZmlyc3QucmVw
ZWF0ZWROZXN0ZWRNZXNzYWdlWzFdLmJiKTsKLQotICAgIGZpcnN0ID0gbmV3IFRlc3RBbGxUeXBl
c05hbm8oKTsKLSAgICBmaXJzdC5yZXBlYXRlZFBhY2tlZFNmaXhlZDY0ID0gbmV3IGxvbmdbXSB7
LTEsIC0yLCAtM307Ci0gICAgc2Vjb25kID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBz
ZWNvbmQucmVwZWF0ZWRQYWNrZWRTZml4ZWQ2NCA9IG5ldyBsb25nW10gey00LCAtNX07Ci0gICAg
TWVzc2FnZU5hbm8ubWVyZ2VGcm9tKGZpcnN0LCBNZXNzYWdlTmFuby50b0J5dGVBcnJheShzZWNv
bmQpKTsKLSAgICBhc3NlcnRFcXVhbHMoNSwgZmlyc3QucmVwZWF0ZWRQYWNrZWRTZml4ZWQ2NC5s
ZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygtMSwgZmlyc3QucmVwZWF0ZWRQYWNrZWRTZml4ZWQ2
NFswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKC00LCBmaXJzdC5yZXBlYXRlZFBhY2tlZFNmaXhlZDY0
WzNdKTsKLQotICAgIGZpcnN0ID0gbmV3IFRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBmaXJzdC5y
ZXBlYXRlZFBhY2tlZE5lc3RlZEVudW0gPSBuZXcgaW50W10ge1Rlc3RBbGxUeXBlc05hbm8uQkFS
fTsKLSAgICBzZWNvbmQgPSBuZXcgVGVzdEFsbFR5cGVzTmFubygpOwotICAgIHNlY29uZC5yZXBl
YXRlZFBhY2tlZE5lc3RlZEVudW0gPSBuZXcgaW50W10ge1Rlc3RBbGxUeXBlc05hbm8uRk9PfTsK
LSAgICBNZXNzYWdlTmFuby5tZXJnZUZyb20oZmlyc3QsIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5
KHNlY29uZCkpOwotICAgIGFzc2VydEVxdWFscygyLCBmaXJzdC5yZXBlYXRlZFBhY2tlZE5lc3Rl
ZEVudW0ubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoVGVzdEFsbFR5cGVzTmFuby5CQVIsIGZp
cnN0LnJlcGVhdGVkUGFja2VkTmVzdGVkRW51bVswXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFRlc3RB
bGxUeXBlc05hbm8uRk9PLCBmaXJzdC5yZXBlYXRlZFBhY2tlZE5lc3RlZEVudW1bMV0pOwotCi0g
ICAgLy8gTm93IHRlc3QgcmVwZWF0ZWQgbWVyZ2luZyBpbiBhIG5lc3RlZCBzY29wZQotICAgIFRl
c3RSZXBlYXRlZE1lcmdlTmFubyBmaXJzdENvbnRhaW5lciA9IG5ldyBUZXN0UmVwZWF0ZWRNZXJn
ZU5hbm8oKTsKLSAgICBmaXJzdENvbnRhaW5lci5jb250YWluZWQgPSBuZXcgVGVzdEFsbFR5cGVz
TmFubygpOwotICAgIGZpcnN0Q29udGFpbmVyLmNvbnRhaW5lZC5yZXBlYXRlZEludDMyID0gbmV3
IGludFtdIHsxMCwgMjB9OwotICAgIFRlc3RSZXBlYXRlZE1lcmdlTmFubyBzZWNvbmRDb250YWlu
ZXIgPSBuZXcgVGVzdFJlcGVhdGVkTWVyZ2VOYW5vKCk7Ci0gICAgc2Vjb25kQ29udGFpbmVyLmNv
bnRhaW5lZCA9IG5ldyBUZXN0QWxsVHlwZXNOYW5vKCk7Ci0gICAgc2Vjb25kQ29udGFpbmVyLmNv
bnRhaW5lZC5yZXBlYXRlZEludDMyID0gbmV3IGludFtdIHszMH07Ci0gICAgTWVzc2FnZU5hbm8u
bWVyZ2VGcm9tKGZpcnN0Q29udGFpbmVyLCBNZXNzYWdlTmFuby50b0J5dGVBcnJheShzZWNvbmRD
b250YWluZXIpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgZmlyc3RDb250YWluZXIuY29udGFpbmVk
LnJlcGVhdGVkSW50MzIubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMjAsIGZpcnN0Q29udGFp
bmVyLmNvbnRhaW5lZC5yZXBlYXRlZEludDMyWzFdKTsKLSAgICBhc3NlcnRFcXVhbHMoMzAsIGZp
cnN0Q29udGFpbmVyLmNvbnRhaW5lZC5yZXBlYXRlZEludDMyWzJdKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHRlc3RSZXBlYXRlZFBhY2thYmxlcygpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8v
IENoZWNrIHRoYXQgcmVwZWF0ZWQgZmllbGRzIHdpdGggcGFja2FibGUgdHlwZXMgY2FuIGFjY2Vw
dCBib3RoIHBhY2tlZCBhbmQgdW5wYWNrZWQKLSAgICAvLyBzZXJpYWxpemVkIGZvcm1zLgotICAg
IE5hbm9SZXBlYXRlZFBhY2thYmxlcy5Ob25QYWNrZWQgbm9uUGFja2VkID0gbmV3IE5hbm9SZXBl
YXRlZFBhY2thYmxlcy5Ob25QYWNrZWQoKTsKLSAgICAvLyBFeGFnZ2VyYXRlcyB0aGUgZmlyc3Qg
dmFsdWVzIG9mIHZhcmludC10eXBlZCBhcnJheXMuIFRoaXMgaXMgdG8gdGVzdCB0aGF0IHRoZSBw
YXJzaW5nIGNvZGUKLSAgICAvLyBvZiBwYWNrZWQgZmllbGRzIGhhbmRsZXMgbm9uLXBhY2tlZCBk
YXRhIGNvcnJlY3RseS4gSWYgdGhlIGNvZGUgaW5jb3JyZWN0bHkgdGhpbmtzIGl0IGlzCi0gICAg
Ly8gcmVhZGluZyBmcm9tIGEgcGFja2VkIHRhZywgaXQgd2lsbCByZWFkIHRoZSBmaXJzdCB2YWx1
ZSBhcyB0aGUgYnl0ZSBsZW5ndGggb2YgdGhlIGZpZWxkLAotICAgIC8vIGFuZCB0aGUgbGFyZ2Ug
bnVtYmVyIHdpbGwgY2F1c2UgdGhlIGlucHV0IHRvIGdvIG91dCBvZiBib3VuZHMsIHRodXMgY2Fw
dHVyaW5nIHRoZSBlcnJvci4KLSAgICBub25QYWNrZWQuaW50MzJTID0gbmV3IGludFtdIHsxMDAw
LCAyLCAzfTsKLSAgICBub25QYWNrZWQuaW50NjRTID0gbmV3IGxvbmdbXSB7NDAwMCwgNSwgNn07
Ci0gICAgbm9uUGFja2VkLnVpbnQzMlMgPSBuZXcgaW50W10gezcwMDAsIDgsIDl9OwotICAgIG5v
blBhY2tlZC51aW50NjRTID0gbmV3IGxvbmdbXSB7MTAwMDAsIDExLCAxMn07Ci0gICAgbm9uUGFj
a2VkLnNpbnQzMlMgPSBuZXcgaW50W10gezEzMDAwLCAxNCwgMTV9OwotICAgIG5vblBhY2tlZC5z
aW50NjRTID0gbmV3IGxvbmdbXSB7MTYwMDAsIDE3LCAxOH07Ci0gICAgbm9uUGFja2VkLmZpeGVk
MzJTID0gbmV3IGludFtdIHsxOSwgMjAsIDIxfTsKLSAgICBub25QYWNrZWQuZml4ZWQ2NFMgPSBu
ZXcgbG9uZ1tdIHsyMiwgMjMsIDI0fTsKLSAgICBub25QYWNrZWQuc2ZpeGVkMzJTID0gbmV3IGlu
dFtdIHsyNSwgMjYsIDI3fTsKLSAgICBub25QYWNrZWQuc2ZpeGVkNjRTID0gbmV3IGxvbmdbXSB7
MjgsIDI5LCAzMH07Ci0gICAgbm9uUGFja2VkLmZsb2F0cyA9IG5ldyBmbG9hdFtdIHszMSwgMzIs
IDMzfTsKLSAgICBub25QYWNrZWQuZG91YmxlcyA9IG5ldyBkb3VibGVbXSB7MzQsIDM1LCAzNn07
Ci0gICAgbm9uUGFja2VkLmJvb2xzID0gbmV3IGJvb2xlYW5bXSB7ZmFsc2UsIHRydWV9OwotICAg
IG5vblBhY2tlZC5lbnVtcyA9IG5ldyBpbnRbXSB7Ci0gICAgICBOYW5vUmVwZWF0ZWRQYWNrYWJs
ZXMuRW51bS5PUFRJT05fT05FLAotICAgICAgTmFub1JlcGVhdGVkUGFja2FibGVzLkVudW0uT1BU
SU9OX1RXTywKLSAgICB9OwotICAgIG5vblBhY2tlZC5ub2lzZSA9IDEzNTc5OwotCi0gICAgYnl0
ZVtdIG5vblBhY2tlZFNlcmlhbGl6ZWQgPSBNZXNzYWdlTmFuby50b0J5dGVBcnJheShub25QYWNr
ZWQpOwotCi0gICAgTmFub1JlcGVhdGVkUGFja2FibGVzLlBhY2tlZCBwYWNrZWQgPQotICAgICAg
ICBNZXNzYWdlTmFuby5tZXJnZUZyb20obmV3IE5hbm9SZXBlYXRlZFBhY2thYmxlcy5QYWNrZWQo
KSwgbm9uUGFja2VkU2VyaWFsaXplZCk7Ci0gICAgYXNzZXJ0UmVwZWF0ZWRQYWNrYWJsZXNFcXVh
bChub25QYWNrZWQsIHBhY2tlZCk7Ci0KLSAgICBieXRlW10gcGFja2VkU2VyaWFsaXplZCA9IE1l
c3NhZ2VOYW5vLnRvQnl0ZUFycmF5KHBhY2tlZCk7Ci0gICAgLy8gSnVzdCBhIGNhdXRpb3VzIGNo
ZWNrIHRoYXQgdGhlIHR3byBzZXJpYWxpemVkIGZvcm1zIGFyZSBkaWZmZXJlbnQsCi0gICAgLy8g
dG8gbWFrZSBzdXJlIHRoZSByZW1haW5pbmcgb2YgdGhpcyB0ZXN0IGlzIHVzZWZ1bDoKLSAgICBh
c3NlcnRGYWxzZShBcnJheXMuZXF1YWxzKG5vblBhY2tlZFNlcmlhbGl6ZWQsIHBhY2tlZFNlcmlh
bGl6ZWQpKTsKLQotICAgIG5vblBhY2tlZCA9IE1lc3NhZ2VOYW5vLm1lcmdlRnJvbShuZXcgTmFu
b1JlcGVhdGVkUGFja2FibGVzLk5vblBhY2tlZCgpLCBwYWNrZWRTZXJpYWxpemVkKTsKLSAgICBh
c3NlcnRSZXBlYXRlZFBhY2thYmxlc0VxdWFsKG5vblBhY2tlZCwgcGFja2VkKTsKLQotICAgIC8v
IFRlc3QgbWl4ZWQgc2VyaWFsaXplZCBmb3JtLgotICAgIGJ5dGVbXSBtaXhlZFNlcmlhbGl6ZWQg
PSBuZXcgYnl0ZVtub25QYWNrZWRTZXJpYWxpemVkLmxlbmd0aCArIHBhY2tlZFNlcmlhbGl6ZWQu
bGVuZ3RoXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KG5vblBhY2tlZFNlcmlhbGl6ZWQsIDAsIG1p
eGVkU2VyaWFsaXplZCwgMCwgbm9uUGFja2VkU2VyaWFsaXplZC5sZW5ndGgpOwotICAgIFN5c3Rl
bS5hcnJheWNvcHkocGFja2VkU2VyaWFsaXplZCwgMCwKLSAgICAgICAgbWl4ZWRTZXJpYWxpemVk
LCBub25QYWNrZWRTZXJpYWxpemVkLmxlbmd0aCwgcGFja2VkU2VyaWFsaXplZC5sZW5ndGgpOwot
Ci0gICAgbm9uUGFja2VkID0gTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKG5ldyBOYW5vUmVwZWF0ZWRQ
YWNrYWJsZXMuTm9uUGFja2VkKCksIG1peGVkU2VyaWFsaXplZCk7Ci0gICAgcGFja2VkID0gTWVz
c2FnZU5hbm8ubWVyZ2VGcm9tKG5ldyBOYW5vUmVwZWF0ZWRQYWNrYWJsZXMuUGFja2VkKCksIG1p
eGVkU2VyaWFsaXplZCk7Ci0gICAgYXNzZXJ0UmVwZWF0ZWRQYWNrYWJsZXNFcXVhbChub25QYWNr
ZWQsIHBhY2tlZCk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKG5ldyBpbnRbXSB7MTAw
MCwgMiwgMywgMTAwMCwgMiwgM30sIG5vblBhY2tlZC5pbnQzMlMpKTsKLSAgICBhc3NlcnRUcnVl
KEFycmF5cy5lcXVhbHMobmV3IGludFtdIHsxMzAwMCwgMTQsIDE1LCAxMzAwMCwgMTQsIDE1fSwg
bm9uUGFja2VkLnNpbnQzMlMpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMobmV3IGlu
dFtdIHsyNSwgMjYsIDI3LCAyNSwgMjYsIDI3fSwgbm9uUGFja2VkLnNmaXhlZDMyUykpOwotICAg
IGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhuZXcgYm9vbGVhbltdIHtmYWxzZSwgdHJ1ZSwgZmFs
c2UsIHRydWV9LCBub25QYWNrZWQuYm9vbHMpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RN
YXBzU2VyaWFsaXplQW5kUGFyc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBUZXN0TWFwIG9y
aWdpbiA9IG5ldyBUZXN0TWFwKCk7Ci0gICAgc2V0TWFwTWVzc2FnZShvcmlnaW4pOwotICAgIGFz
c2VydE1hcE1lc3NhZ2VTZXQob3JpZ2luKTsKLQotICAgIGJ5dGVbXSBvdXRwdXQgPSBNZXNzYWdl
TmFuby50b0J5dGVBcnJheShvcmlnaW4pOwotICAgIFRlc3RNYXAgcGFyc2VkID0gbmV3IFRlc3RN
YXAoKTsKLSAgICBNZXNzYWdlTmFuby5tZXJnZUZyb20ocGFyc2VkLCBvdXRwdXQpOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgdGVzdE1hcFNlcmlhbGl6ZVJlamVjdE51bGwoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICBUZXN0TWFwIHByaW1pdGl2ZU1hcCA9IG5ldyBUZXN0TWFwKCk7Ci0gICAgcHJp
bWl0aXZlTWFwLmludDMyVG9JbnQzMkZpZWxkID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgSW50ZWdl
cj4oKTsKLSAgICBwcmltaXRpdmVNYXAuaW50MzJUb0ludDMyRmllbGQucHV0KG51bGwsIDEpOwot
ICAgIHRyeSB7Ci0gICAgICBNZXNzYWdlTmFuby50b0J5dGVBcnJheShwcmltaXRpdmVNYXApOwot
ICAgICAgZmFpbCgic2hvdWxkIHJlamVjdCBudWxsIGtleXMiKTsKLSAgICB9IGNhdGNoIChJbGxl
Z2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgLy8gcGFzcy4KLSAgICB9Ci0KLSAgICBUZXN0
TWFwIG1lc3NhZ2VNYXAgPSBuZXcgVGVzdE1hcCgpOwotICAgIG1lc3NhZ2VNYXAuaW50MzJUb01l
c3NhZ2VGaWVsZCA9Ci0gICAgICAgIG5ldyBIYXNoTWFwPEludGVnZXIsIE1hcFRlc3RQcm90by5U
ZXN0TWFwLk1lc3NhZ2VWYWx1ZT4oKTsKLSAgICBtZXNzYWdlTWFwLmludDMyVG9NZXNzYWdlRmll
bGQucHV0KDAsIG51bGwpOwotICAgIHRyeSB7Ci0gICAgICBNZXNzYWdlTmFuby50b0J5dGVBcnJh
eShtZXNzYWdlTWFwKTsKLSAgICAgIGZhaWwoInNob3VsZCByZWplY3QgbnVsbCB2YWx1ZXMiKTsK
LSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgLy8gcGFzcy4K
LSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgdGhhdCBtZXJnaW5nIGJ5dGVzIGNvbnRh
aW5pbmcgY29uZmxpY3Rpbmcga2V5cyB3aXRoIG92ZXJyaWRlIHRoZQotICAgKiBtZXNzYWdlIHZh
bHVlIGluc3RlYWQgb2YgbWVyZ2luZyB0aGUgbWVzc2FnZSB2YWx1ZSBpbnRvIHRoZSBleGlzdGlu
ZyBlbnRyeS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RNYXBNZXJnZU92ZXJyaWRlTWVzc2Fn
ZVZhbHVlcygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RNYXAuTWVzc2FnZVZhbHVlIG9y
aWdWYWx1ZSA9IG5ldyBUZXN0TWFwLk1lc3NhZ2VWYWx1ZSgpOwotICAgIG9yaWdWYWx1ZS52YWx1
ZSA9IDE7Ci0gICAgb3JpZ1ZhbHVlLnZhbHVlMiA9IDI7Ci0gICAgVGVzdE1hcC5NZXNzYWdlVmFs
dWUgbmV3VmFsdWUgPSBuZXcgVGVzdE1hcC5NZXNzYWdlVmFsdWUoKTsKLSAgICBuZXdWYWx1ZS52
YWx1ZSA9IDM7Ci0KLSAgICBUZXN0TWFwIG9yaWdNZXNzYWdlID0gbmV3IFRlc3RNYXAoKTsKLSAg
ICBvcmlnTWVzc2FnZS5pbnQzMlRvTWVzc2FnZUZpZWxkID0KLSAgICAgICAgbmV3IEhhc2hNYXA8
SW50ZWdlciwgTWFwVGVzdFByb3RvLlRlc3RNYXAuTWVzc2FnZVZhbHVlPigpOwotICAgIG9yaWdN
ZXNzYWdlLmludDMyVG9NZXNzYWdlRmllbGQucHV0KDEsIG9yaWdWYWx1ZSk7Ci0KLSAgICBUZXN0
TWFwIG5ld01lc3NhZ2UgPSBuZXcgVGVzdE1hcCgpOwotICAgIG5ld01lc3NhZ2UuaW50MzJUb01l
c3NhZ2VGaWVsZCA9Ci0gICAgICAgIG5ldyBIYXNoTWFwPEludGVnZXIsIE1hcFRlc3RQcm90by5U
ZXN0TWFwLk1lc3NhZ2VWYWx1ZT4oKTsKLSAgICBuZXdNZXNzYWdlLmludDMyVG9NZXNzYWdlRmll
bGQucHV0KDEsIG5ld1ZhbHVlKTsKLSAgICBNZXNzYWdlTmFuby5tZXJnZUZyb20ob3JpZ01lc3Nh
Z2UsCi0gICAgICAgIE1lc3NhZ2VOYW5vLnRvQnl0ZUFycmF5KG5ld01lc3NhZ2UpKTsKLSAgICBU
ZXN0TWFwLk1lc3NhZ2VWYWx1ZSBtZXJnZWRWYWx1ZSA9IG9yaWdNZXNzYWdlLmludDMyVG9NZXNz
YWdlRmllbGQuZ2V0KDEpOwotICAgIGFzc2VydEVxdWFscygzLCBtZXJnZWRWYWx1ZS52YWx1ZSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lcmdlZFZhbHVlLnZhbHVlMik7Ci0gIH0KLQotICAvKioK
LSAgICogVGVzdHMgdGhhdCB3aGVuIG1lcmdpbmcgd2l0aCBlbXB0eSBlbnRyaWVzLAotICAgKiB3
ZSB3aWxsIHVzZSBkZWZhdWx0IGZvciB0aGUga2V5IGFuZCB2YWx1ZSwgaW5zdGVhZCBvZiBudWxs
LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1hcE1lcmdlRW1wdHlFbnRyeSgpIHRocm93cyBF
eGNlcHRpb24gewotICAgIFRlc3RNYXAgdGVzdE1hcCA9IG5ldyBUZXN0TWFwKCk7Ci0gICAgYnl0
ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOwotICAgIENvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5h
bm8gb3V0cHV0ID0KLSAgICAgICAgQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFuby5uZXdJbnN0YW5j
ZShidWZmZXIpOwotICAgIC8vIEFuIGVtcHR5IGVudHJ5IGZvciBpbnQzMl90b19pbnQzMiBtYXAu
Ci0gICAgb3V0cHV0LndyaXRlVGFnKDEsIFdpcmVGb3JtYXROYW5vLldJUkVUWVBFX0xFTkdUSF9E
RUxJTUlURUQpOwotICAgIG91dHB1dC53cml0ZVJhd1ZhcmludDMyKDApOwotICAgIC8vIEFuIGVt
cHR5IGVudHJ5IGZvciBpbnQzMl90b19tZXNzYWdlIG1hcC4KLSAgICBvdXRwdXQud3JpdGVUYWco
NSwgV2lyZUZvcm1hdE5hbm8uV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCk7Ci0gICAgb3V0cHV0
LndyaXRlUmF3VmFyaW50MzIoMCk7Ci0KLSAgICBDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8gaW5w
dXQgPSBDb2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8ubmV3SW5zdGFuY2UoCi0gICAgICAgIGJ1ZmZl
ciwgMCwgYnVmZmVyLmxlbmd0aCAtIG91dHB1dC5zcGFjZUxlZnQoKSk7Ci0gICAgdGVzdE1hcC5t
ZXJnZUZyb20oaW5wdXQpOwotICAgIGFzc2VydE5vdE51bGwodGVzdE1hcC5pbnQzMlRvSW50MzJG
aWVsZCk7OwotICAgIGFzc2VydEVxdWFscygxLCB0ZXN0TWFwLmludDMyVG9JbnQzMkZpZWxkLnNp
emUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigwKSwgdGVzdE1hcC5pbnQz
MlRvSW50MzJGaWVsZC5nZXQoMCkpOwotICAgIGFzc2VydE5vdE51bGwodGVzdE1hcC5pbnQzMlRv
TWVzc2FnZUZpZWxkKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgdGVzdE1hcC5pbnQzMlRvTWVzc2Fn
ZUZpZWxkLnNpemUoKSk7Ci0gICAgVGVzdE1hcC5NZXNzYWdlVmFsdWUgbWVzc2FnZVZhbHVlID0g
dGVzdE1hcC5pbnQzMlRvTWVzc2FnZUZpZWxkLmdldCgwKTsKLSAgICBhc3NlcnROb3ROdWxsKG1l
c3NhZ2VWYWx1ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2VWYWx1ZS52YWx1ZSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDAsIG1lc3NhZ2VWYWx1ZS52YWx1ZTIpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgdGVzdE1hcEVxdWFscygpIHRocm93cyBFeGNlcHRpb24gewotICAgIFRlc3RNYXAgYSA9
IG5ldyBUZXN0TWFwKCk7Ci0gICAgVGVzdE1hcCBiID0gbmV3IFRlc3RNYXAoKTsKLQotICAgIC8v
IGVtcHR5IGFuZCBudWxsIG1hcCBmaWVsZHMgYXJlIGVxdWFsLgotICAgIGFzc2VydFRlc3RNYXBF
cXVhbChhLCBiKTsKLSAgICBhLmludDMyVG9CeXRlc0ZpZWxkID0gbmV3IEhhc2hNYXA8SW50ZWdl
ciwgYnl0ZVtdPigpOwotICAgIGFzc2VydFRlc3RNYXBFcXVhbChhLCBiKTsKLQotICAgIGEuaW50
MzJUb0ludDMyRmllbGQgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigpOwotICAgIGIu
aW50MzJUb0ludDMyRmllbGQgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigpOwotICAg
IHNldE1hcChhLmludDMyVG9JbnQzMkZpZWxkLCBkZWVwQ29weShpbnQzMlZhbHVlcyksIGRlZXBD
b3B5KGludDMyVmFsdWVzKSk7Ci0gICAgc2V0TWFwKGIuaW50MzJUb0ludDMyRmllbGQsIGRlZXBD
b3B5KGludDMyVmFsdWVzKSwgZGVlcENvcHkoaW50MzJWYWx1ZXMpKTsKLSAgICBhc3NlcnRUZXN0
TWFwRXF1YWwoYSwgYik7Ci0KLSAgICBhLmludDMyVG9NZXNzYWdlRmllbGQgPQotICAgICAgICBu
ZXcgSGFzaE1hcDxJbnRlZ2VyLCBNYXBUZXN0UHJvdG8uVGVzdE1hcC5NZXNzYWdlVmFsdWU+KCk7
Ci0gICAgYi5pbnQzMlRvTWVzc2FnZUZpZWxkID0KLSAgICAgICAgbmV3IEhhc2hNYXA8SW50ZWdl
ciwgTWFwVGVzdFByb3RvLlRlc3RNYXAuTWVzc2FnZVZhbHVlPigpOwotICAgIHNldE1hcChhLmlu
dDMyVG9NZXNzYWdlRmllbGQsCi0gICAgICAgIGRlZXBDb3B5KGludDMyVmFsdWVzKSwgZGVlcENv
cHkobWVzc2FnZVZhbHVlcykpOwotICAgIHNldE1hcChiLmludDMyVG9NZXNzYWdlRmllbGQsCi0g
ICAgICAgIGRlZXBDb3B5KGludDMyVmFsdWVzKSwgZGVlcENvcHkobWVzc2FnZVZhbHVlcykpOwot
ICAgIGFzc2VydFRlc3RNYXBFcXVhbChhLCBiKTsKLQotICAgIGEuc3RyaW5nVG9JbnQzMkZpZWxk
ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOwotICAgIGIuc3RyaW5nVG9JbnQzMkZp
ZWxkID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOwotICAgIHNldE1hcChhLnN0cmlu
Z1RvSW50MzJGaWVsZCwgZGVlcENvcHkoc3RyaW5nVmFsdWVzKSwgZGVlcENvcHkoaW50MzJWYWx1
ZXMpKTsKLSAgICBzZXRNYXAoYi5zdHJpbmdUb0ludDMyRmllbGQsIGRlZXBDb3B5KHN0cmluZ1Zh
bHVlcyksIGRlZXBDb3B5KGludDMyVmFsdWVzKSk7Ci0gICAgYXNzZXJ0VGVzdE1hcEVxdWFsKGEs
IGIpOwotCi0gICAgYS5pbnQzMlRvQnl0ZXNGaWVsZCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIGJ5
dGVbXT4oKTsKLSAgICBiLmludDMyVG9CeXRlc0ZpZWxkID0gbmV3IEhhc2hNYXA8SW50ZWdlciwg
Ynl0ZVtdPigpOwotICAgIHNldE1hcChhLmludDMyVG9CeXRlc0ZpZWxkLCBkZWVwQ29weShpbnQz
MlZhbHVlcyksIGRlZXBDb3B5KGJ5dGVzVmFsdWVzKSk7Ci0gICAgc2V0TWFwKGIuaW50MzJUb0J5
dGVzRmllbGQsIGRlZXBDb3B5KGludDMyVmFsdWVzKSwgZGVlcENvcHkoYnl0ZXNWYWx1ZXMpKTsK
LSAgICBhc3NlcnRUZXN0TWFwRXF1YWwoYSwgYik7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIG1h
cCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBtYXR0ZXIuCi0gICAgYS5pbnQzMlRvU3RyaW5nRmll
bGQgPSBuZXcgVHJlZU1hcDxJbnRlZ2VyLCBTdHJpbmc+KCk7Ci0gICAgYi5pbnQzMlRvU3RyaW5n
RmllbGQgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBTdHJpbmc+KCk7Ci0gICAgc2V0TWFwKGEuaW50
MzJUb1N0cmluZ0ZpZWxkLCBkZWVwQ29weShpbnQzMlZhbHVlcyksIGRlZXBDb3B5KHN0cmluZ1Zh
bHVlcykpOwotICAgIHNldE1hcChiLmludDMyVG9TdHJpbmdGaWVsZCwgZGVlcENvcHkoaW50MzJW
YWx1ZXMpLCBkZWVwQ29weShzdHJpbmdWYWx1ZXMpKTsKLSAgICBhc3NlcnRUZXN0TWFwRXF1YWwo
YSwgYik7Ci0KLSAgICBhLmNsZWFyKCk7Ci0gICAgYi5jbGVhcigpOwotCi0gICAgLy8gdW5lcXVh
bCBjYXNlczogZGlmZmVyZW50IHZhbHVlCi0gICAgYS5pbnQzMlRvSW50MzJGaWVsZCA9IG5ldyBI
YXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7Ci0gICAgYi5pbnQzMlRvSW50MzJGaWVsZCA9IG5l
dyBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7Ci0gICAgYS5pbnQzMlRvSW50MzJGaWVsZC5w
dXQoMSwgMSk7Ci0gICAgYi5pbnQzMlRvSW50MzJGaWVsZC5wdXQoMSwgMik7Ci0gICAgYXNzZXJ0
VGVzdE1hcFVuZXF1YWwoYSwgYik7Ci0gICAgLy8gdW5lcXVhbCBjYXNlOiBhZGRpdGlvbmFsIGVu
dHJ5Ci0gICAgYi5pbnQzMlRvSW50MzJGaWVsZC5wdXQoMSwgMSk7Ci0gICAgYi5pbnQzMlRvSW50
MzJGaWVsZC5wdXQoMiwgMSk7Ci0gICAgYXNzZXJ0VGVzdE1hcFVuZXF1YWwoYSwgYik7Ci0gICAg
YS5pbnQzMlRvSW50MzJGaWVsZC5wdXQoMiwgMSk7Ci0gICAgYXNzZXJ0VGVzdE1hcEVxdWFsKGEs
IGIpOwotCi0gICAgLy8gdW5lcXVhbCBjYXNlOiBkaWZmZXJlbnQgbWVzc2FnZSB2YWx1ZS4KLSAg
ICBhLmludDMyVG9NZXNzYWdlRmllbGQgPQotICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBN
YXBUZXN0UHJvdG8uVGVzdE1hcC5NZXNzYWdlVmFsdWU+KCk7Ci0gICAgYi5pbnQzMlRvTWVzc2Fn
ZUZpZWxkID0KLSAgICAgICAgbmV3IEhhc2hNYXA8SW50ZWdlciwgTWFwVGVzdFByb3RvLlRlc3RN
YXAuTWVzc2FnZVZhbHVlPigpOwotICAgIE1lc3NhZ2VWYWx1ZSB2YSA9IG5ldyBNZXNzYWdlVmFs
dWUoKTsKLSAgICB2YS52YWx1ZSA9IDE7Ci0gICAgTWVzc2FnZVZhbHVlIHZiID0gbmV3IE1lc3Nh
Z2VWYWx1ZSgpOwotICAgIHZiLnZhbHVlID0gMTsKLSAgICBhLmludDMyVG9NZXNzYWdlRmllbGQu
cHV0KDEsIHZhKTsKLSAgICBiLmludDMyVG9NZXNzYWdlRmllbGQucHV0KDEsIHZiKTsKLSAgICBh
c3NlcnRUZXN0TWFwRXF1YWwoYSwgYik7Ci0gICAgdmIudmFsdWUgPSAyOwotICAgIGFzc2VydFRl
c3RNYXBVbmVxdWFsKGEsIGIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRU
ZXN0TWFwRXF1YWwoVGVzdE1hcCBhLCBUZXN0TWFwIGIpCi0gICAgICB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBhc3NlcnRFcXVhbHMoYS5oYXNoQ29kZSgpLCBiLmhhc2hDb2RlKCkpOwotICAgIGFz
c2VydFRydWUoYS5lcXVhbHMoYikpOwotICAgIGFzc2VydFRydWUoYi5lcXVhbHMoYSkpOwotICB9
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRUZXN0TWFwVW5lcXVhbChUZXN0TWFwIGEs
IFRlc3RNYXAgYikKLSAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgIGFzc2VydEZhbHNlKGEu
ZXF1YWxzKGIpKTsKLSAgICBhc3NlcnRGYWxzZShiLmVxdWFscyhhKSk7Ci0gIH0KLQotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBJbnRlZ2VyW10gaW50MzJWYWx1ZXMgPSBuZXcgSW50ZWdlcltdIHsK
LSAgICAwLCAxLCAtMSwgSW50ZWdlci5NQVhfVkFMVUUsIEludGVnZXIuTUlOX1ZBTFVFLAotICB9
OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExvbmdbXSBpbnQ2NFZhbHVlcyA9IG5ldyBMb25n
W10gewotICAgIDBMLCAxTCwgLTFMLCBMb25nLk1BWF9WQUxVRSwgTG9uZy5NSU5fVkFMVUUsCi0g
IH07Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gc3RyaW5nVmFsdWVzID0gbmV3
IFN0cmluZ1tdIHsKLSAgICAiIiwgImhlbGxvIiwgIndvcmxkIiwgImZvbyIsICJiYXIiLAotICB9
OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXVtdIGJ5dGVzVmFsdWVzID0gbmV3IGJ5
dGVbXVtdIHsKLSAgICBuZXcgYnl0ZVtdIHt9LAotICAgIG5ldyBieXRlW10gezB9LAotICAgIG5l
dyBieXRlW10gezEsIC0xfSwKLSAgICBuZXcgYnl0ZVtdIHsxMjcsIC0xMjh9LAotICAgIG5ldyBi
eXRlW10geydhJywgJ2InLCAnMCcsICcxJ30sCi0gIH07Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgQm9vbGVhbltdIGJvb2xWYWx1ZXMgPSBuZXcgQm9vbGVhbltdIHsKLSAgICBmYWxzZSwgdHJ1
ZSwKLSAgfTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbnRlZ2VyW10gZW51bVZhbHVlcyA9
IG5ldyBJbnRlZ2VyW10gewotICAgIFRlc3RNYXAuRk9PLCBUZXN0TWFwLkJBUiwgVGVzdE1hcC5C
QVosIFRlc3RNYXAuUVVYLAotICAgIEludGVnZXIuTUFYX1ZBTFVFIC8qIHVua25vd24gKi8sCi0g
IH07Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGVzdE1hcC5NZXNzYWdlVmFsdWVbXSBtZXNz
YWdlVmFsdWVzID0KLSAgICAgIG5ldyBUZXN0TWFwLk1lc3NhZ2VWYWx1ZVtdIHsKLSAgICBuZXdN
YXBWYWx1ZU1lc3NhZ2UoMCksCi0gICAgbmV3TWFwVmFsdWVNZXNzYWdlKDEpLAotICAgIG5ld01h
cFZhbHVlTWVzc2FnZSgtMSksCi0gICAgbmV3TWFwVmFsdWVNZXNzYWdlKEludGVnZXIuTUFYX1ZB
TFVFKSwKLSAgICBuZXdNYXBWYWx1ZU1lc3NhZ2UoSW50ZWdlci5NSU5fVkFMVUUpLAotICB9Owot
Ci0gIHByaXZhdGUgc3RhdGljIFRlc3RNYXAuTWVzc2FnZVZhbHVlIG5ld01hcFZhbHVlTWVzc2Fn
ZShpbnQgdmFsdWUpIHsKLSAgICBUZXN0TWFwLk1lc3NhZ2VWYWx1ZSByZXN1bHQgPSBuZXcgVGVz
dE1hcC5NZXNzYWdlVmFsdWUoKTsKLSAgICByZXN1bHQudmFsdWUgPSB2YWx1ZTsKLSAgICByZXR1
cm4gcmVzdWx0OwotICB9Ci0KLSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHBy
aXZhdGUgc3RhdGljIDxUPiBUW10gZGVlcENvcHkoVFtdIG9yaWcpIHRocm93cyBFeGNlcHRpb24g
ewotICAgIGlmIChvcmlnIGluc3RhbmNlb2YgTWVzc2FnZVZhbHVlW10pIHsKLSAgICAgIE1lc3Nh
Z2VWYWx1ZVtdIHJlc3VsdCA9IG5ldyBNZXNzYWdlVmFsdWVbb3JpZy5sZW5ndGhdOwotICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBvcmlnLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHJlc3VsdFtp
XSA9IG5ldyBNZXNzYWdlVmFsdWUoKTsKLSAgICAgICAgTWVzc2FnZU5hbm8ubWVyZ2VGcm9tKAot
ICAgICAgICAgICAgcmVzdWx0W2ldLCBNZXNzYWdlTmFuby50b0J5dGVBcnJheSgoTWVzc2FnZVZh
bHVlKSBvcmlnW2ldKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gKFRbXSkgcmVzdWx0OwotICAg
IH0KLSAgICBpZiAob3JpZyBpbnN0YW5jZW9mIGJ5dGVbXVtdKSB7Ci0gICAgICBieXRlW11bXSBy
ZXN1bHQgPSBuZXcgYnl0ZVtvcmlnLmxlbmd0aF1bXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgb3JpZy5sZW5ndGg7IGkrKykgewotICAgICAgICBieXRlW10gb3JpZ0J5dGVzID0gKGJ5dGVb
XSkgb3JpZ1tpXTsKLSAgICAgICAgcmVzdWx0W2ldID0gQXJyYXlzLmNvcHlPZihvcmlnQnl0ZXMs
IG9yaWdCeXRlcy5sZW5ndGgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gQXJyYXlzLmNv
cHlPZihvcmlnLCBvcmlnLmxlbmd0aCk7Ci0gIH0KLQotICBwcml2YXRlIDxLLCBWPiB2b2lkIHNl
dE1hcChNYXA8SywgVj4gbWFwLCBLW10ga2V5cywgVltdIHZhbHVlcykgewotICAgIGFzc2VydChr
ZXlzLmxlbmd0aCA9PSB2YWx1ZXMubGVuZ3RoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGtl
eXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIG1hcC5wdXQoa2V5c1tpXSwgdmFsdWVzW2ldKTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIDxLLCBWPiB2b2lkIGFzc2VydE1hcFNldCgKLSAgICAgIE1h
cDxLLCBWPiBtYXAsIEtbXSBrZXlzLCBWW10gdmFsdWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBhc3NlcnQoa2V5cy5sZW5ndGggPT0gdmFsdWVzLmxlbmd0aCk7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFzc2VydEVxdWFscyh2YWx1ZXNb
aV0sIG1hcC5nZXQoa2V5c1tpXSkpOwotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMoa2V5cy5sZW5n
dGgsIG1hcC5zaXplKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldE1hcE1lc3NhZ2UoVGVz
dE1hcCB0ZXN0TWFwKSB7Ci0gICAgdGVzdE1hcC5pbnQzMlRvSW50MzJGaWVsZCA9IG5ldyBIYXNo
TWFwPEludGVnZXIsIEludGVnZXI+KCk7Ci0gICAgdGVzdE1hcC5pbnQzMlRvQnl0ZXNGaWVsZCA9
IG5ldyBIYXNoTWFwPEludGVnZXIsIGJ5dGVbXT4oKTsKLSAgICB0ZXN0TWFwLmludDMyVG9FbnVt
RmllbGQgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigpOwotICAgIHRlc3RNYXAuaW50
MzJUb01lc3NhZ2VGaWVsZCA9Ci0gICAgICAgIG5ldyBIYXNoTWFwPEludGVnZXIsIE1hcFRlc3RQ
cm90by5UZXN0TWFwLk1lc3NhZ2VWYWx1ZT4oKTsKLSAgICB0ZXN0TWFwLmludDMyVG9TdHJpbmdG
aWVsZCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIFN0cmluZz4oKTsKLSAgICB0ZXN0TWFwLnN0cmlu
Z1RvSW50MzJGaWVsZCA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKLSAgICB0ZXN0
TWFwLmJvb2xUb0Jvb2xGaWVsZCA9IG5ldyBIYXNoTWFwPEJvb2xlYW4sIEJvb2xlYW4+KCk7Ci0g
ICAgdGVzdE1hcC51aW50MzJUb1VpbnQzMkZpZWxkID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgSW50
ZWdlcj4oKTsKLSAgICB0ZXN0TWFwLnNpbnQzMlRvU2ludDMyRmllbGQgPSBuZXcgSGFzaE1hcDxJ
bnRlZ2VyLCBJbnRlZ2VyPigpOwotICAgIHRlc3RNYXAuZml4ZWQzMlRvRml4ZWQzMkZpZWxkID0g
bmV3IEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4oKTsKLSAgICB0ZXN0TWFwLnNmaXhlZDMyVG9T
Zml4ZWQzMkZpZWxkID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4oKTsKLSAgICB0ZXN0
TWFwLmludDY0VG9JbnQ2NEZpZWxkID0gbmV3IEhhc2hNYXA8TG9uZywgTG9uZz4oKTsKLSAgICB0
ZXN0TWFwLnVpbnQ2NFRvVWludDY0RmllbGQgPSBuZXcgSGFzaE1hcDxMb25nLCBMb25nPigpOwot
ICAgIHRlc3RNYXAuc2ludDY0VG9TaW50NjRGaWVsZCA9IG5ldyBIYXNoTWFwPExvbmcsIExvbmc+
KCk7Ci0gICAgdGVzdE1hcC5maXhlZDY0VG9GaXhlZDY0RmllbGQgPSBuZXcgSGFzaE1hcDxMb25n
LCBMb25nPigpOwotICAgIHRlc3RNYXAuc2ZpeGVkNjRUb1NmaXhlZDY0RmllbGQgPSBuZXcgSGFz
aE1hcDxMb25nLCBMb25nPigpOwotICAgIHNldE1hcCh0ZXN0TWFwLmludDMyVG9JbnQzMkZpZWxk
LCBpbnQzMlZhbHVlcywgaW50MzJWYWx1ZXMpOwotICAgIHNldE1hcCh0ZXN0TWFwLmludDMyVG9C
eXRlc0ZpZWxkLCBpbnQzMlZhbHVlcywgYnl0ZXNWYWx1ZXMpOwotICAgIHNldE1hcCh0ZXN0TWFw
LmludDMyVG9FbnVtRmllbGQsIGludDMyVmFsdWVzLCBlbnVtVmFsdWVzKTsKLSAgICBzZXRNYXAo
dGVzdE1hcC5pbnQzMlRvTWVzc2FnZUZpZWxkLCBpbnQzMlZhbHVlcywgbWVzc2FnZVZhbHVlcyk7
Ci0gICAgc2V0TWFwKHRlc3RNYXAuaW50MzJUb1N0cmluZ0ZpZWxkLCBpbnQzMlZhbHVlcywgc3Ry
aW5nVmFsdWVzKTsKLSAgICBzZXRNYXAodGVzdE1hcC5zdHJpbmdUb0ludDMyRmllbGQsIHN0cmlu
Z1ZhbHVlcywgaW50MzJWYWx1ZXMpOwotICAgIHNldE1hcCh0ZXN0TWFwLmJvb2xUb0Jvb2xGaWVs
ZCwgYm9vbFZhbHVlcywgYm9vbFZhbHVlcyk7Ci0gICAgc2V0TWFwKHRlc3RNYXAudWludDMyVG9V
aW50MzJGaWVsZCwgaW50MzJWYWx1ZXMsIGludDMyVmFsdWVzKTsKLSAgICBzZXRNYXAodGVzdE1h
cC5zaW50MzJUb1NpbnQzMkZpZWxkLCBpbnQzMlZhbHVlcywgaW50MzJWYWx1ZXMpOwotICAgIHNl
dE1hcCh0ZXN0TWFwLmZpeGVkMzJUb0ZpeGVkMzJGaWVsZCwgaW50MzJWYWx1ZXMsIGludDMyVmFs
dWVzKTsKLSAgICBzZXRNYXAodGVzdE1hcC5zZml4ZWQzMlRvU2ZpeGVkMzJGaWVsZCwgaW50MzJW
YWx1ZXMsIGludDMyVmFsdWVzKTsKLSAgICBzZXRNYXAodGVzdE1hcC5pbnQ2NFRvSW50NjRGaWVs
ZCwgaW50NjRWYWx1ZXMsIGludDY0VmFsdWVzKTsKLSAgICBzZXRNYXAodGVzdE1hcC51aW50NjRU
b1VpbnQ2NEZpZWxkLCBpbnQ2NFZhbHVlcywgaW50NjRWYWx1ZXMpOwotICAgIHNldE1hcCh0ZXN0
TWFwLnNpbnQ2NFRvU2ludDY0RmllbGQsIGludDY0VmFsdWVzLCBpbnQ2NFZhbHVlcyk7Ci0gICAg
c2V0TWFwKHRlc3RNYXAuZml4ZWQ2NFRvRml4ZWQ2NEZpZWxkLCBpbnQ2NFZhbHVlcywgaW50NjRW
YWx1ZXMpOwotICAgIHNldE1hcCh0ZXN0TWFwLnNmaXhlZDY0VG9TZml4ZWQ2NEZpZWxkLCBpbnQ2
NFZhbHVlcywgaW50NjRWYWx1ZXMpOwotICB9Ci0gIHByaXZhdGUgdm9pZCBhc3NlcnRNYXBNZXNz
YWdlU2V0KFRlc3RNYXAgdGVzdE1hcCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgYXNzZXJ0TWFw
U2V0KHRlc3RNYXAuaW50MzJUb0ludDMyRmllbGQsIGludDMyVmFsdWVzLCBpbnQzMlZhbHVlcyk7
Ci0gICAgYXNzZXJ0TWFwU2V0KHRlc3RNYXAuaW50MzJUb0J5dGVzRmllbGQsIGludDMyVmFsdWVz
LCBieXRlc1ZhbHVlcyk7Ci0gICAgYXNzZXJ0TWFwU2V0KHRlc3RNYXAuaW50MzJUb0VudW1GaWVs
ZCwgaW50MzJWYWx1ZXMsIGVudW1WYWx1ZXMpOwotICAgIGFzc2VydE1hcFNldCh0ZXN0TWFwLmlu
dDMyVG9NZXNzYWdlRmllbGQsIGludDMyVmFsdWVzLCBtZXNzYWdlVmFsdWVzKTsKLSAgICBhc3Nl
cnRNYXBTZXQodGVzdE1hcC5pbnQzMlRvU3RyaW5nRmllbGQsIGludDMyVmFsdWVzLCBzdHJpbmdW
YWx1ZXMpOwotICAgIGFzc2VydE1hcFNldCh0ZXN0TWFwLnN0cmluZ1RvSW50MzJGaWVsZCwgc3Ry
aW5nVmFsdWVzLCBpbnQzMlZhbHVlcyk7Ci0gICAgYXNzZXJ0TWFwU2V0KHRlc3RNYXAuYm9vbFRv
Qm9vbEZpZWxkLCBib29sVmFsdWVzLCBib29sVmFsdWVzKTsKLSAgICBhc3NlcnRNYXBTZXQodGVz
dE1hcC51aW50MzJUb1VpbnQzMkZpZWxkLCBpbnQzMlZhbHVlcywgaW50MzJWYWx1ZXMpOwotICAg
IGFzc2VydE1hcFNldCh0ZXN0TWFwLnNpbnQzMlRvU2ludDMyRmllbGQsIGludDMyVmFsdWVzLCBp
bnQzMlZhbHVlcyk7Ci0gICAgYXNzZXJ0TWFwU2V0KHRlc3RNYXAuZml4ZWQzMlRvRml4ZWQzMkZp
ZWxkLCBpbnQzMlZhbHVlcywgaW50MzJWYWx1ZXMpOwotICAgIGFzc2VydE1hcFNldCh0ZXN0TWFw
LnNmaXhlZDMyVG9TZml4ZWQzMkZpZWxkLCBpbnQzMlZhbHVlcywgaW50MzJWYWx1ZXMpOwotICAg
IGFzc2VydE1hcFNldCh0ZXN0TWFwLmludDY0VG9JbnQ2NEZpZWxkLCBpbnQ2NFZhbHVlcywgaW50
NjRWYWx1ZXMpOwotICAgIGFzc2VydE1hcFNldCh0ZXN0TWFwLnVpbnQ2NFRvVWludDY0RmllbGQs
IGludDY0VmFsdWVzLCBpbnQ2NFZhbHVlcyk7Ci0gICAgYXNzZXJ0TWFwU2V0KHRlc3RNYXAuc2lu
dDY0VG9TaW50NjRGaWVsZCwgaW50NjRWYWx1ZXMsIGludDY0VmFsdWVzKTsKLSAgICBhc3NlcnRN
YXBTZXQodGVzdE1hcC5maXhlZDY0VG9GaXhlZDY0RmllbGQsIGludDY0VmFsdWVzLCBpbnQ2NFZh
bHVlcyk7Ci0gICAgYXNzZXJ0TWFwU2V0KHRlc3RNYXAuc2ZpeGVkNjRUb1NmaXhlZDY0RmllbGQs
IGludDY0VmFsdWVzLCBpbnQ2NFZhbHVlcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0UmVw
ZWF0ZWRGaWVsZEluaXRpYWxpemVkSW5SZWZ0eXBlc0NvbXBhdE1vZGUoKSB7Ci0gICAgTmFub1Jl
ZmVyZW5jZVR5cGVzQ29tcGF0LlRlc3RBbGxUeXBlc05hbm8gcHJvdG8gPSBuZXcgTmFub1JlZmVy
ZW5jZVR5cGVzQ29tcGF0LlRlc3RBbGxUeXBlc05hbm8oKTsKLSAgICBhc3NlcnROb3ROdWxsKHBy
b3RvLnJlcGVhdGVkU3RyaW5nKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhc3NlcnRSZXBlYXRl
ZFBhY2thYmxlc0VxdWFsKAotICAgICAgTmFub1JlcGVhdGVkUGFja2FibGVzLk5vblBhY2tlZCBu
b25QYWNrZWQsIE5hbm9SZXBlYXRlZFBhY2thYmxlcy5QYWNrZWQgcGFja2VkKSB7Ci0gICAgLy8g
Tm90IHVzaW5nIE1lc3NhZ2VOYW5vLmVxdWFscygpIC0tIHRoYXQgYmVsb25ncyB0byBhIHNlcGFy
YXRlIHRlc3QuCi0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKG5vblBhY2tlZC5pbnQzMlMs
IHBhY2tlZC5pbnQzMlMpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMobm9uUGFja2Vk
LmludDY0UywgcGFja2VkLmludDY0UykpOwotICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhu
b25QYWNrZWQudWludDMyUywgcGFja2VkLnVpbnQzMlMpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5
cy5lcXVhbHMobm9uUGFja2VkLnVpbnQ2NFMsIHBhY2tlZC51aW50NjRTKSk7Ci0gICAgYXNzZXJ0
VHJ1ZShBcnJheXMuZXF1YWxzKG5vblBhY2tlZC5zaW50MzJTLCBwYWNrZWQuc2ludDMyUykpOwot
ICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhub25QYWNrZWQuc2ludDY0UywgcGFja2VkLnNp
bnQ2NFMpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMobm9uUGFja2VkLmZpeGVkMzJT
LCBwYWNrZWQuZml4ZWQzMlMpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMobm9uUGFj
a2VkLmZpeGVkNjRTLCBwYWNrZWQuZml4ZWQ2NFMpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5l
cXVhbHMobm9uUGFja2VkLnNmaXhlZDMyUywgcGFja2VkLnNmaXhlZDMyUykpOwotICAgIGFzc2Vy
dFRydWUoQXJyYXlzLmVxdWFscyhub25QYWNrZWQuc2ZpeGVkNjRTLCBwYWNrZWQuc2ZpeGVkNjRT
KSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKG5vblBhY2tlZC5mbG9hdHMsIHBhY2tl
ZC5mbG9hdHMpKTsKLSAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMobm9uUGFja2VkLmRvdWJs
ZXMsIHBhY2tlZC5kb3VibGVzKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKG5vblBh
Y2tlZC5ib29scywgcGFja2VkLmJvb2xzKSk7Ci0gICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxz
KG5vblBhY2tlZC5lbnVtcywgcGFja2VkLmVudW1zKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0
ZXN0Q2xvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBBIHNpbXBsZSBtZXNzYWdlLgot
ICAgIEFub3RoZXJNZXNzYWdlIGFub3RoZXJNZXNzYWdlID0gbmV3IEFub3RoZXJNZXNzYWdlKCk7
Ci0gICAgYW5vdGhlck1lc3NhZ2Uuc3RyaW5nID0gIkhlbGxvIjsKLSAgICBhbm90aGVyTWVzc2Fn
ZS52YWx1ZSA9IHRydWU7Ci0gICAgYW5vdGhlck1lc3NhZ2UuaW50ZWdlcnMgPSBuZXcgaW50W10g
eyAxLCAyLCAzIH07Ci0KLSAgICBBbm90aGVyTWVzc2FnZSBjbG9uZSA9IGFub3RoZXJNZXNzYWdl
LmNsb25lKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNsb25lLCBhbm90aGVyTWVzc2FnZSk7Ci0KLSAg
ICAvLyBWZXJpZnkgaXQgd2FzIGEgZGVlcCBjbG9uZSAtIGNoYW5nZXMgdG8gdGhlIGNsb25lIHNo
b3VsZG4ndCBhZmZlY3QgdGhlCi0gICAgLy8gb3JpZ2luYWwuCi0gICAgY2xvbmUuaW50ZWdlcnNb
MV0gPSAxMDA7Ci0gICAgYXNzZXJ0RmFsc2UoY2xvbmUuZXF1YWxzKGFub3RoZXJNZXNzYWdlKSk7
Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYXNzZXJ0SGFzV2lyZURhdGEoTWVzc2FnZU5hbm8gbWVz
c2FnZSwgYm9vbGVhbiBleHBlY3RlZCkgewotICAgIGJ5dGVbXSBieXRlcyA9IE1lc3NhZ2VOYW5v
LnRvQnl0ZUFycmF5KG1lc3NhZ2UpOwotICAgIGludCB3aXJlTGVuZ3RoID0gYnl0ZXMubGVuZ3Ro
OwotICAgIGlmIChleHBlY3RlZCkgewotICAgICAgYXNzZXJ0RmFsc2Uod2lyZUxlbmd0aCA9PSAw
KTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKHdpcmVMZW5ndGggIT0gMCkgewotICAgICAgICBm
YWlsKCJFeHBlY3RlZCBubyB3aXJlIGRhdGEgZm9yIG1lc3NhZ2UgXG4iICsgbWVzc2FnZQotICAg
ICAgICAgICAgKyAiXG5CdXQgZ290OlxuIgotICAgICAgICAgICAgKyBoZXhEdW1wKGJ5dGVzKSk7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGhleER1bXAo
Ynl0ZVtdIGJ5dGVzKSB7Ci0gICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVy
KCk7Ci0gICAgZm9yIChieXRlIGIgOiBieXRlcykgewotICAgICAgc2IuYXBwZW5kKFN0cmluZy5m
b3JtYXQoIiUwMnggIiwgYikpOwotICAgIH0KLSAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAg
fQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvbmFuby9tYXBfdGVzdC5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL25hbm8vbWFwX3Rlc3QucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDUxNDk4YTQ5MjU3MTM2MjI0YzAzZWRhNDhjOTA1NzlmYTkwOTExODguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZh
L2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby9tYXBfdGVzdC5wcm90bworKysgL2Rldi9udWxsCkBA
IC0xLDcwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50
YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBtYXBfdGVzdDsKLQotb3B0aW9uIGphdmFfcGFja2Fn
ZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmIjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9
ICJNYXBUZXN0UHJvdG8iOwotCi1tZXNzYWdlIFRlc3RNYXAgewotICBtZXNzYWdlIE1lc3NhZ2VW
YWx1ZSB7Ci0gICAgaW50MzIgdmFsdWUgPSAxOwotICAgIGludDMyIHZhbHVlMiA9IDI7Ci0gIH0K
LSAgZW51bSBFbnVtVmFsdWUgewotICAgIEZPTyA9IDA7Ci0gICAgQkFSID0gMTsKLSAgICBCQVog
PSAyOwotICAgIFFVWCA9IDM7Ci0gIH0KLQotICBtYXA8aW50MzIsIGludDMyPiAgICAgICAgaW50
MzJfdG9faW50MzJfZmllbGQgPSAxOwotICBtYXA8aW50MzIsIHN0cmluZz4gICAgICAgaW50MzJf
dG9fc3RyaW5nX2ZpZWxkID0gMjsKLSAgbWFwPGludDMyLCBieXRlcz4gICAgICAgIGludDMyX3Rv
X2J5dGVzX2ZpZWxkID0gMzsKLSAgbWFwPGludDMyLCBFbnVtVmFsdWU+ICAgIGludDMyX3RvX2Vu
dW1fZmllbGQgPSA0OwotICBtYXA8aW50MzIsIE1lc3NhZ2VWYWx1ZT4gaW50MzJfdG9fbWVzc2Fn
ZV9maWVsZCA9IDU7Ci0gIG1hcDxzdHJpbmcsIGludDMyPiAgICAgICBzdHJpbmdfdG9faW50MzJf
ZmllbGQgPSA2OwotICBtYXA8Ym9vbCwgYm9vbD4gICAgICAgICAgYm9vbF90b19ib29sX2ZpZWxk
ID0gNzsKLQotICAvLyBUZXN0IGFsbCB0aGUgb3RoZXIgcHJpbWl0aXZlIHR5cGVzLiBBcyB0aGUg
a2V5IGFuZCB2YWx1ZSBhcmUgbm90IGNvdXBsZWQgaW4KLSAgLy8gdGhlIGltcGxlbWVudGF0aW9u
LCB3ZSBkbyBub3QgdGVzdCBhbGwgdGhlIGNvbWJpbmF0aW9ucyBvZiBrZXkvdmFsdWUgcGFpcnMs
Ci0gIC8vIHNvIHRoYXQgd2UgY2FuIGtlZXAgdGhlIG51bWJlciBvZiB0ZXN0IGNhc2VzIG1hbmFn
ZWFibGUKLSAgbWFwPHVpbnQzMiwgdWludDMyPiAgICAgIHVpbnQzMl90b191aW50MzJfZmllbGQg
PSAxMTsKLSAgbWFwPHNpbnQzMiwgc2ludDMyPiAgICAgIHNpbnQzMl90b19zaW50MzJfZmllbGQg
PSAxMjsKLSAgbWFwPGZpeGVkMzIsIGZpeGVkMzI+ICAgIGZpeGVkMzJfdG9fZml4ZWQzMl9maWVs
ZCA9IDEzOwotICBtYXA8c2ZpeGVkMzIsIHNmaXhlZDMyPiAgc2ZpeGVkMzJfdG9fc2ZpeGVkMzJf
ZmllbGQgPSAxNDsKLSAgbWFwPGludDY0LCBpbnQ2ND4gICAgICAgIGludDY0X3RvX2ludDY0X2Zp
ZWxkID0gMTU7Ci0gIG1hcDx1aW50NjQsIHVpbnQ2ND4gICAgICB1aW50NjRfdG9fdWludDY0X2Zp
ZWxkID0gMTY7Ci0gIG1hcDxzaW50NjQsIHNpbnQ2ND4gICAgICBzaW50NjRfdG9fc2ludDY0X2Zp
ZWxkID0gMTc7Ci0gIG1hcDxmaXhlZDY0LCBmaXhlZDY0PiAgICBmaXhlZDY0X3RvX2ZpeGVkNjRf
ZmllbGQgPSAxODsKLSAgbWFwPHNmaXhlZDY0LCBzZml4ZWQ2ND4gIHNmaXhlZDY0X3RvX3NmaXhl
ZDY0X2ZpZWxkID0gMTk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2FjY2Vzc29yc19uYW5vLnByb3RvIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZh
bmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9hY2Nl
c3NvcnNfbmFuby5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxMWU0NzAz
YjM3ZTJhMzc0YTY4YmZhMmE2ZDhhYzgwNjE1ZDlmZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2FjY2Vzc29yc19uYW5vLnByb3RvCisrKyAvZGV2L251bGwK
QEAgLTEsMTE4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyBBdXRob3I6IG1heHRyb3lAZ29vZ2xlLmNvbSAoTWF4IENhaSkKLQotcGFja2FnZSBwcm90b2J1
Zl91bml0dGVzdDsKLQotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVm
IjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJOYW5vQWNjZXNzb3JzT3V0ZXJDbGFz
cyI7Ci0KLW1lc3NhZ2UgVGVzdE5hbm9BY2Nlc3NvcnMgewotCi0gIG1lc3NhZ2UgTmVzdGVkTWVz
c2FnZSB7Ci0gICAgb3B0aW9uYWwgaW50MzIgYmIgPSAxOwotICB9Ci0KLSAgZW51bSBOZXN0ZWRF
bnVtIHsKLSAgICBGT08gPSAxOwotICAgIEJBUiA9IDI7Ci0gICAgQkFaID0gMzsKLSAgfQotCi0g
IC8vIFNpbmd1bGFyCi0gIG9wdGlvbmFsIGludDMyICBvcHRpb25hbF9pbnQzMiAgICA9ICAxOwot
ICBvcHRpb25hbCBmbG9hdCAgb3B0aW9uYWxfZmxvYXQgICAgPSAxMTsKLSAgb3B0aW9uYWwgZG91
YmxlIG9wdGlvbmFsX2RvdWJsZSAgID0gMTI7Ci0gIG9wdGlvbmFsIHN0cmluZyBvcHRpb25hbF9z
dHJpbmcgICA9IDE0OwotICBvcHRpb25hbCBieXRlcyAgb3B0aW9uYWxfYnl0ZXMgICAgPSAxNTsK
LQotICBvcHRpb25hbCBOZXN0ZWRNZXNzYWdlIG9wdGlvbmFsX25lc3RlZF9tZXNzYWdlID0gMTg7
Ci0KLSAgb3B0aW9uYWwgTmVzdGVkRW51bSBvcHRpb25hbF9uZXN0ZWRfZW51bSA9IDIxOwotCi0g
IC8vIFJlcGVhdGVkCi0gIHJlcGVhdGVkIGludDMyICByZXBlYXRlZF9pbnQzMiAgICA9IDMxOwot
ICByZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRfc3RyaW5nICAgPSA0NDsKLSAgcmVwZWF0ZWQgYnl0
ZXMgIHJlcGVhdGVkX2J5dGVzICAgID0gNDU7Ci0KLSAgcmVwZWF0ZWQgTmVzdGVkTWVzc2FnZSBy
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSAgPSA0ODsKLQotICByZXBlYXRlZCBOZXN0ZWRFbnVtIHJl
cGVhdGVkX25lc3RlZF9lbnVtICA9IDUxOwotCi0gIC8vIFNpbmd1bGFyIHdpdGggZGVmYXVsdHMK
LSAgb3B0aW9uYWwgaW50MzIgIGRlZmF1bHRfaW50MzIgICAgPSA2MSBbZGVmYXVsdCA9ICA0MSAg
ICBdOwotICBvcHRpb25hbCBzdHJpbmcgZGVmYXVsdF9zdHJpbmcgICA9IDc0IFtkZWZhdWx0ID0g
ImhlbGxvIl07Ci0gIG9wdGlvbmFsIGJ5dGVzICBkZWZhdWx0X2J5dGVzICAgID0gNzUgW2RlZmF1
bHQgPSAid29ybGQiXTsKLQotICBvcHRpb25hbCBmbG9hdCBkZWZhdWx0X2Zsb2F0X25hbiA9IDk5
ICBbZGVmYXVsdCA9ICBuYW5dOwotCi0gIG9wdGlvbmFsIE5lc3RlZEVudW0gZGVmYXVsdF9uZXN0
ZWRfZW51bSA9IDgxIFtkZWZhdWx0ID0gQkFSXTsKLQotICAvLyBSZXF1aXJlZAotICByZXF1aXJl
ZCBpbnQzMiBpZCA9IDg2OwotCi0gIC8vIEFkZCBlbm91Z2ggb3B0aW9uYWwgZmllbGRzIHRvIG1h
a2UgMiBiaXQgZmllbGRzIGluIHRvdGFsCi0gIG9wdGlvbmFsIGludDMyIGZpbGxlcjEwMCA9IDEw
MDsKLSAgb3B0aW9uYWwgaW50MzIgZmlsbGVyMTAxID0gMTAxOwotICBvcHRpb25hbCBpbnQzMiBm
aWxsZXIxMDIgPSAxMDI7Ci0gIG9wdGlvbmFsIGludDMyIGZpbGxlcjEwMyA9IDEwMzsKLSAgb3B0
aW9uYWwgaW50MzIgZmlsbGVyMTA0ID0gMTA0OwotICBvcHRpb25hbCBpbnQzMiBmaWxsZXIxMDUg
PSAxMDU7Ci0gIG9wdGlvbmFsIGludDMyIGZpbGxlcjEwNiA9IDEwNjsKLSAgb3B0aW9uYWwgaW50
MzIgZmlsbGVyMTA3ID0gMTA3OwotICBvcHRpb25hbCBpbnQzMiBmaWxsZXIxMDggPSAxMDg7Ci0g
IG9wdGlvbmFsIGludDMyIGZpbGxlcjEwOSA9IDEwOTsKLSAgb3B0aW9uYWwgaW50MzIgZmlsbGVy
MTEwID0gMTEwOwotICBvcHRpb25hbCBpbnQzMiBmaWxsZXIxMTEgPSAxMTE7Ci0gIG9wdGlvbmFs
IGludDMyIGZpbGxlcjExMiA9IDExMjsKLSAgb3B0aW9uYWwgaW50MzIgZmlsbGVyMTEzID0gMTEz
OwotICBvcHRpb25hbCBpbnQzMiBmaWxsZXIxMTQgPSAxMTQ7Ci0gIG9wdGlvbmFsIGludDMyIGZp
bGxlcjExNSA9IDExNTsKLSAgb3B0aW9uYWwgaW50MzIgZmlsbGVyMTE2ID0gMTE2OwotICBvcHRp
b25hbCBpbnQzMiBmaWxsZXIxMTcgPSAxMTc7Ci0gIG9wdGlvbmFsIGludDMyIGZpbGxlcjExOCA9
IDExODsKLSAgb3B0aW9uYWwgaW50MzIgZmlsbGVyMTE5ID0gMTE5OwotICBvcHRpb25hbCBpbnQz
MiBmaWxsZXIxMjAgPSAxMjA7Ci0gIG9wdGlvbmFsIGludDMyIGZpbGxlcjEyMSA9IDEyMTsKLSAg
b3B0aW9uYWwgaW50MzIgZmlsbGVyMTIyID0gMTIyOwotICBvcHRpb25hbCBpbnQzMiBmaWxsZXIx
MjMgPSAxMjM7Ci0gIG9wdGlvbmFsIGludDMyIGZpbGxlcjEyNCA9IDEyNDsKLSAgb3B0aW9uYWwg
aW50MzIgZmlsbGVyMTI1ID0gMTI1OwotICBvcHRpb25hbCBpbnQzMiBmaWxsZXIxMjYgPSAxMjY7
Ci0gIG9wdGlvbmFsIGludDMyIGZpbGxlcjEyNyA9IDEyNzsKLSAgb3B0aW9uYWwgaW50MzIgZmls
bGVyMTI4ID0gMTI4OwotICBvcHRpb25hbCBpbnQzMiBmaWxsZXIxMjkgPSAxMjk7Ci0gIG9wdGlv
bmFsIGludDMyIGZpbGxlcjEzMCA9IDEzMDsKLQotICBvcHRpb25hbCBpbnQzMiBiZWZvcmVfYml0
X2ZpZWxkX2NoZWNrID0gMTM5OwotICBvcHRpb25hbCBpbnQzMiBiaXRfZmllbGRfY2hlY2sgPSAx
NDA7Ci0gIG9wdGlvbmFsIGludDMyIGFmdGVyX2JpdF9maWVsZF9jaGVjayA9IDE0MTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8v
dW5pdHRlc3RfZW51bV9jbGFzc19tdWx0aXBsZV9uYW5vLnByb3RvIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVz
dC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9lbnVtX2NsYXNzX211bHRp
cGxlX25hbm8ucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1OGUxZjE3Y2Fm
NmVjMjBkZWE1OGY3MmZlYmY0OTQ5MGU0ODFkZWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvbmFuby91bml0dGVzdF9lbnVtX2NsYXNzX211bHRpcGxlX25hbm8ucHJvdG8KKysrIC9k
ZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotLy8gQXV0aG9yOiBtYXh0cm95QGdvb2dsZS5jb20gKE1heCBDYWkpCi0KLXBhY2thZ2Ug
cHJvdG9idWZfdW5pdHRlc3Q7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5w
cm90b2J1ZiI7Ci1vcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7Ci0KLWVudW0gRmls
ZVNjb3BlRW51bU11bHRpcGxlIHsKLSAgVEhSRUUgPSAzOwotfQotCi1tZXNzYWdlIEVudW1DbGFz
c05hbm9NdWx0aXBsZSB7Ci0gIGVudW0gTWVzc2FnZVNjb3BlRW51bU11bHRpcGxlIHsKLSAgICBG
T1VSID0gNDsKLSAgfQotICBvcHRpb25hbCBGaWxlU2NvcGVFbnVtTXVsdGlwbGUgdGhyZWUgPSAz
IFsgZGVmYXVsdCA9IFRIUkVFIF07Ci0gIG9wdGlvbmFsIE1lc3NhZ2VTY29wZUVudW1NdWx0aXBs
ZSBmb3VyID0gNCBbIGRlZmF1bHQgPSBGT1VSIF07Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3Ny
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2VudW1fY2xhc3Nf
bmFuby5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25h
bm8vdW5pdHRlc3RfZW51bV9jbGFzc19uYW5vLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzYTFlMDdmNmQ5ZDMyNTk5M2ZmZTU1ODVjMGQ5NWFkODQ0ZGMzYjllLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3Qv
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfZW51bV9jbGFzc19uYW5vLnBy
b3RvCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogbWF4dHJveUBnb29nbGUuY29tIChNYXggQ2FpKQot
Ci1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi1vcHRpb24gamF2YV9wYWNrYWdlID0gImNv
bS5nb29nbGUucHJvdG9idWYiOwotb3B0aW9uIGphdmFfb3V0ZXJfY2xhc3NuYW1lID0gIkVudW1D
bGFzc05hbm9zIjsKLQotZW51bSBGaWxlU2NvcGVFbnVtIHsKLSAgT05FID0gMTsKLX0KLQotbWVz
c2FnZSBFbnVtQ2xhc3NOYW5vIHsKLSAgZW51bSBNZXNzYWdlU2NvcGVFbnVtIHsKLSAgICBUV08g
PSAyOwotICB9Ci0gIG9wdGlvbmFsIEZpbGVTY29wZUVudW0gb25lID0gMSBbIGRlZmF1bHQgPSBP
TkUgXTsKLSAgb3B0aW9uYWwgTWVzc2FnZVNjb3BlRW51bSB0d28gPSAyIFsgZGVmYXVsdCA9IFRX
TyBdOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvbmFuby91bml0dGVzdF9lbnVtX3ZhbGlkaXR5X25hbm8ucHJvdG8gYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3Ny
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2VudW1fdmFsaWRp
dHlfbmFuby5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBkYThiNDIyZWU2
OWM1NzZiNDQ3M2FjY2U2OGVjNGEyYmYzYzY0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9uYW5vL3VuaXR0ZXN0X2VudW1fdmFsaWRpdHlfbmFuby5wcm90bworKysgL2Rldi9udWxs
CkBAIC0xLDI4ICswLDAgQEAKLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7Ci0KLW9wdGlvbiBq
YXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5wcm90b2J1ZiI7Ci1vcHRpb24gamF2YV9vdXRlcl9j
bGFzc25hbWUgPSAiRW51bVZhbGlkaXR5IjsKLQotZW51bSBFIHsKLSAgZGVmYXVsdCA9IDE7IC8v
IHRlc3QgamF2YSBrZXl3b3JkIHJlbmFtaW5nCi0gIEZPTyA9IDI7Ci0gIEJBUiA9IDM7Ci0gIEJB
WiA9IDQ7Ci19Ci0KLW1lc3NhZ2UgTSB7Ci0gIG9wdGlvbmFsIEUgb3B0aW9uYWxfZSA9IDE7Ci0g
IG9wdGlvbmFsIEUgZGVmYXVsdF9lID0gMiBbIGRlZmF1bHQgPSBCQVogXTsKLSAgcmVwZWF0ZWQg
RSByZXBlYXRlZF9lID0gMzsKLSAgcmVwZWF0ZWQgRSBwYWNrZWRfZSA9IDQgWyBwYWNrZWQgPSB0
cnVlIF07Ci0gIHJlcGVhdGVkIEUgcmVwZWF0ZWRfZTIgPSA1OwotICByZXBlYXRlZCBFIHBhY2tl
ZF9lMiA9IDYgWyBwYWNrZWQgPSB0cnVlIF07Ci0gIHJlcGVhdGVkIEUgcmVwZWF0ZWRfZTMgPSA3
OwotICByZXBlYXRlZCBFIHBhY2tlZF9lMyA9IDggWyBwYWNrZWQgPSB0cnVlIF07Ci19Ci0KLW1l
c3NhZ2UgQWx0IHsKLSAgb3B0aW9uYWwgRSByZXBlYXRlZF9lMl9hc19vcHRpb25hbCA9IDU7Ci0g
IHJlcGVhdGVkIEUgcGFja2VkX2UyX2FzX25vbl9wYWNrZWQgPSA2OwotICByZXBlYXRlZCBFIG5v
bl9wYWNrZWRfZTNfYXNfcGFja2VkID0gNyBbIHBhY2tlZCA9IHRydWUgXTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRl
c3RfZXh0ZW5zaW9uX25hbm8ucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2ds
ZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lvbl9uYW5vLnByb3RvCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjYTU2YjNkZDQ1NDc3YWYxY2RlMGU1YjE0M2NmYTg1MzI4MDdj
ZGY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5h
bm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfZXh0ZW5z
aW9uX25hbm8ucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1zeW50YXggPSAi
cHJvdG8yIjsKLQotb3B0aW9uIGphdmFfb3V0ZXJfY2xhc3NuYW1lID0gIkV4dGVuc2lvbnMiOwot
b3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8udGVzdGV4dCI7
Ci0KLW1lc3NhZ2UgRXh0ZW5kYWJsZU1lc3NhZ2UgewotICBvcHRpb25hbCBpbnQzMiBmaWVsZCA9
IDE7Ci0gIGV4dGVuc2lvbnMgMTAgdG8gbWF4OwotfQotCi1lbnVtIEFuRW51bSB7Ci0gIEZJUlNU
X1ZBTFVFID0gMTsKLSAgU0VDT05EX1ZBTFVFID0gMjsKLX0KLQotbWVzc2FnZSBBbm90aGVyTWVz
c2FnZSB7Ci0gIG9wdGlvbmFsIHN0cmluZyBzdHJpbmcgPSAxOwotICBvcHRpb25hbCBib29sIHZh
bHVlID0gMjsKLSAgcmVwZWF0ZWQgaW50MzIgaW50ZWdlcnMgPSAzOwotfQotCi1tZXNzYWdlIENv
bnRhaW5lck1lc3NhZ2UgewotICBleHRlbmQgRXh0ZW5kYWJsZU1lc3NhZ2UgewotICAgIG9wdGlv
bmFsIGJvb2wgYW5vdGhlcl90aGluZyA9IDEwMDsKLSAgICAvLyBUaGUgbGFyZ2VzdCBwZXJtaXR0
ZWQgZmllbGQgbnVtYmVyLCBwZXIKLSAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8jc2ltcGxlCi0gICAgb3B0aW9uYWwgYm9vbCBs
YXJnZV9maWVsZF9udW1iZXIgPSA1MzY4NzA5MTE7Ci0gIH0KLX0KLQotLy8gRm9yIHRlc3ROYW5v
T3B0aW9uYWxHcm91cFdpdGhVbmtub3duRmllbGRzRW5hYmxlZDsKLS8vIG5vdCBwYXJ0IG9mIHRo
ZSBleHRlbnNpb25zIHRlc3RzLgotbWVzc2FnZSBNZXNzYWdlV2l0aEdyb3VwIHsKLSAgb3B0aW9u
YWwgZ3JvdXAgR3JvdXAgPSAxIHsKLSAgICBvcHRpb25hbCBpbnQzMiBhID0gMjsKLSAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFu
by91bml0dGVzdF9leHRlbnNpb25fcGFja2VkX25hbm8ucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lvbl9wYWNrZWRf
bmFuby5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I3YTAwNGM5ZTJiMWEz
NGJmMDJhZmI0ZTY0MGM5YWE0Y2ZkNjI2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lvbl9wYWNrZWRfbmFuby5wcm90bworKysgL2Rldi9udWxs
CkBAIC0xLDI5ICswLDAgQEAKLXN5bnRheCA9ICJwcm90bzIiOwotCi1vcHRpb24gamF2YV9tdWx0
aXBsZV9maWxlcyA9IHRydWU7Ci1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUucHJv
dG9idWYiOwotCi1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lv
bl9uYW5vLnByb3RvIjsKLQotLy8gTXVzdCBiZSBjb21waWxlZCBzZXBhcmF0ZWx5IGR1ZSB0byBl
eHRlbnNpb24gbnVtYmVyIHJldXNlLgotLy8gVGhlIHJldXNlIGlzIGRlbGliZXJhdGUsIGZvciB0
ZXN0aW5nIHdpcmUgY29tcGF0aWJpbGl0eS4KLQotbWVzc2FnZSBQYWNrZWRFeHRlbnNpb25zIHsK
LSAgZXh0ZW5kIEV4dGVuZGFibGVNZXNzYWdlIHsKLSAgICByZXBlYXRlZCBpbnQzMiAgICBwYWNr
ZWRfaW50MzIgICAgPSAxMCBbIHBhY2tlZCA9IHRydWUgXTsKLSAgICByZXBlYXRlZCB1aW50MzIg
ICBwYWNrZWRfdWludDMyICAgPSAxMSBbIHBhY2tlZCA9IHRydWUgXTsKLSAgICByZXBlYXRlZCBz
aW50MzIgICBwYWNrZWRfc2ludDMyICAgPSAxMiBbIHBhY2tlZCA9IHRydWUgXTsKLSAgICByZXBl
YXRlZCBpbnQ2NCAgICBwYWNrZWRfaW50NjQgICAgPSAxMyBbIHBhY2tlZCA9IHRydWUgXTsKLSAg
ICByZXBlYXRlZCB1aW50NjQgICBwYWNrZWRfdWludDY0ICAgPSAxNCBbIHBhY2tlZCA9IHRydWUg
XTsKLSAgICByZXBlYXRlZCBzaW50NjQgICBwYWNrZWRfc2ludDY0ICAgPSAxNSBbIHBhY2tlZCA9
IHRydWUgXTsKLSAgICByZXBlYXRlZCBmaXhlZDMyICBwYWNrZWRfZml4ZWQzMiAgPSAxNiBbIHBh
Y2tlZCA9IHRydWUgXTsKLSAgICByZXBlYXRlZCBzZml4ZWQzMiBwYWNrZWRfc2ZpeGVkMzIgPSAx
NyBbIHBhY2tlZCA9IHRydWUgXTsKLSAgICByZXBlYXRlZCBmaXhlZDY0ICBwYWNrZWRfZml4ZWQ2
NCAgPSAxOCBbIHBhY2tlZCA9IHRydWUgXTsKLSAgICByZXBlYXRlZCBzZml4ZWQ2NCBwYWNrZWRf
c2ZpeGVkNjQgPSAxOSBbIHBhY2tlZCA9IHRydWUgXTsKLSAgICByZXBlYXRlZCBib29sICAgICBw
YWNrZWRfYm9vbCAgICAgPSAyMCBbIHBhY2tlZCA9IHRydWUgXTsKLSAgICByZXBlYXRlZCBmbG9h
dCAgICBwYWNrZWRfZmxvYXQgICAgPSAyMSBbIHBhY2tlZCA9IHRydWUgXTsKLSAgICByZXBlYXRl
ZCBkb3VibGUgICBwYWNrZWRfZG91YmxlICAgPSAyMiBbIHBhY2tlZCA9IHRydWUgXTsKLSAgICBy
ZXBlYXRlZCBBbkVudW0gICBwYWNrZWRfZW51bSAgICAgPSAyMyBbIHBhY2tlZCA9IHRydWUgXTsK
LSAgICAvLyBOb24tcGFja2FibGUgdHlwZXMgb21pdHRlZC4KLSAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9l
eHRlbnNpb25fcmVwZWF0ZWRfbmFuby5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfZXh0ZW5zaW9uX3JlcGVhdGVkX25hbm8ucHJv
dG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MzNjNjViNDNjMDIwZjlhM2RkNGMx
OWU0ZjE4OTg0YTQ5N2QzOTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91
bml0dGVzdF9leHRlbnNpb25fcmVwZWF0ZWRfbmFuby5wcm90bworKysgL2Rldi9udWxsCkBAIC0x
LDM0ICswLDAgQEAKLXN5bnRheCA9ICJwcm90bzIiOwotCi1vcHRpb24gamF2YV9tdWx0aXBsZV9m
aWxlcyA9IHRydWU7Ci1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUucHJvdG9idWYi
OwotCi1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4dGVuc2lvbl9uYW5v
LnByb3RvIjsKLQotLy8gTXVzdCBiZSBjb21waWxlZCBzZXBhcmF0ZWx5IGR1ZSB0byBleHRlbnNp
b24gbnVtYmVyIHJldXNlLgotLy8gVGhlIHJldXNlIGlzIGRlbGliZXJhdGUsIGZvciB0ZXN0aW5n
IHdpcmUgY29tcGF0aWJpbGl0eS4KLQotbWVzc2FnZSBSZXBlYXRlZEV4dGVuc2lvbnMgewotICBl
eHRlbmQgRXh0ZW5kYWJsZU1lc3NhZ2UgewotICAgIHJlcGVhdGVkIGludDMyICAgICAgICAgIHJl
cGVhdGVkX2ludDMyICAgID0gMTA7Ci0gICAgcmVwZWF0ZWQgdWludDMyICAgICAgICAgcmVwZWF0
ZWRfdWludDMyICAgPSAxMTsKLSAgICByZXBlYXRlZCBzaW50MzIgICAgICAgICByZXBlYXRlZF9z
aW50MzIgICA9IDEyOwotICAgIHJlcGVhdGVkIGludDY0ICAgICAgICAgIHJlcGVhdGVkX2ludDY0
ICAgID0gMTM7Ci0gICAgcmVwZWF0ZWQgdWludDY0ICAgICAgICAgcmVwZWF0ZWRfdWludDY0ICAg
PSAxNDsKLSAgICByZXBlYXRlZCBzaW50NjQgICAgICAgICByZXBlYXRlZF9zaW50NjQgICA9IDE1
OwotICAgIHJlcGVhdGVkIGZpeGVkMzIgICAgICAgIHJlcGVhdGVkX2ZpeGVkMzIgID0gMTY7Ci0g
ICAgcmVwZWF0ZWQgc2ZpeGVkMzIgICAgICAgcmVwZWF0ZWRfc2ZpeGVkMzIgPSAxNzsKLSAgICBy
ZXBlYXRlZCBmaXhlZDY0ICAgICAgICByZXBlYXRlZF9maXhlZDY0ICA9IDE4OwotICAgIHJlcGVh
dGVkIHNmaXhlZDY0ICAgICAgIHJlcGVhdGVkX3NmaXhlZDY0ID0gMTk7Ci0gICAgcmVwZWF0ZWQg
Ym9vbCAgICAgICAgICAgcmVwZWF0ZWRfYm9vbCAgICAgPSAyMDsKLSAgICByZXBlYXRlZCBmbG9h
dCAgICAgICAgICByZXBlYXRlZF9mbG9hdCAgICA9IDIxOwotICAgIHJlcGVhdGVkIGRvdWJsZSAg
ICAgICAgIHJlcGVhdGVkX2RvdWJsZSAgID0gMjI7Ci0gICAgcmVwZWF0ZWQgQW5FbnVtICAgICAg
ICAgcmVwZWF0ZWRfZW51bSAgICAgPSAyMzsKLSAgICByZXBlYXRlZCBzdHJpbmcgICAgICAgICBy
ZXBlYXRlZF9zdHJpbmcgICA9IDI0OwotICAgIHJlcGVhdGVkIGJ5dGVzICAgICAgICAgIHJlcGVh
dGVkX2J5dGVzICAgID0gMjU7Ci0gICAgcmVwZWF0ZWQgQW5vdGhlck1lc3NhZ2UgcmVwZWF0ZWRf
bWVzc2FnZSAgPSAyNjsKLSAgICByZXBlYXRlZCBncm91cCAgICAgICAgICBSZXBlYXRlZEdyb3Vw
ICAgICA9IDI3IHsKLSAgICAgIG9wdGlvbmFsIGludDMyIGEgPSAxOwotICAgIH0KLSAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFu
by91bml0dGVzdF9leHRlbnNpb25fc2luZ3VsYXJfbmFuby5wcm90byBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rl
c3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfZXh0ZW5zaW9uX3Npbmd1
bGFyX25hbm8ucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMmQ5NjU4ODgw
YWYxMWVkN2VkZDRlOThkYjZhMGQ2N2M4OTQ4NmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJv
dG9idWYvbmFuby91bml0dGVzdF9leHRlbnNpb25fc2luZ3VsYXJfbmFuby5wcm90bworKysgL2Rl
di9udWxsCkBAIC0xLDM0ICswLDAgQEAKLXN5bnRheCA9ICJwcm90bzIiOwotCi1vcHRpb24gamF2
YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7Ci1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29n
bGUucHJvdG9idWYiOwotCi1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2V4
dGVuc2lvbl9uYW5vLnByb3RvIjsKLQotLy8gTXVzdCBiZSBjb21waWxlZCBzZXBhcmF0ZWx5IGR1
ZSB0byBleHRlbnNpb24gbnVtYmVyIHJldXNlLgotLy8gVGhlIHJldXNlIGlzIGRlbGliZXJhdGUs
IGZvciB0ZXN0aW5nIHdpcmUgY29tcGF0aWJpbGl0eS4KLQotbWVzc2FnZSBTaW5ndWxhckV4dGVu
c2lvbnMgewotICBleHRlbmQgRXh0ZW5kYWJsZU1lc3NhZ2UgewotICAgIG9wdGlvbmFsIGludDMy
ICAgICAgICAgIHNvbWVfaW50MzIgICAgPSAxMDsKLSAgICBvcHRpb25hbCB1aW50MzIgICAgICAg
ICBzb21lX3VpbnQzMiAgID0gMTE7Ci0gICAgb3B0aW9uYWwgc2ludDMyICAgICAgICAgc29tZV9z
aW50MzIgICA9IDEyOwotICAgIG9wdGlvbmFsIGludDY0ICAgICAgICAgIHNvbWVfaW50NjQgICAg
PSAxMzsKLSAgICBvcHRpb25hbCB1aW50NjQgICAgICAgICBzb21lX3VpbnQ2NCAgID0gMTQ7Ci0g
ICAgb3B0aW9uYWwgc2ludDY0ICAgICAgICAgc29tZV9zaW50NjQgICA9IDE1OwotICAgIG9wdGlv
bmFsIGZpeGVkMzIgICAgICAgIHNvbWVfZml4ZWQzMiAgPSAxNjsKLSAgICBvcHRpb25hbCBzZml4
ZWQzMiAgICAgICBzb21lX3NmaXhlZDMyID0gMTc7Ci0gICAgb3B0aW9uYWwgZml4ZWQ2NCAgICAg
ICAgc29tZV9maXhlZDY0ICA9IDE4OwotICAgIG9wdGlvbmFsIHNmaXhlZDY0ICAgICAgIHNvbWVf
c2ZpeGVkNjQgPSAxOTsKLSAgICBvcHRpb25hbCBib29sICAgICAgICAgICBzb21lX2Jvb2wgICAg
ID0gMjA7Ci0gICAgb3B0aW9uYWwgZmxvYXQgICAgICAgICAgc29tZV9mbG9hdCAgICA9IDIxOwot
ICAgIG9wdGlvbmFsIGRvdWJsZSAgICAgICAgIHNvbWVfZG91YmxlICAgPSAyMjsKLSAgICBvcHRp
b25hbCBBbkVudW0gICAgICAgICBzb21lX2VudW0gICAgID0gMjM7Ci0gICAgb3B0aW9uYWwgc3Ry
aW5nICAgICAgICAgc29tZV9zdHJpbmcgICA9IDI0OwotICAgIG9wdGlvbmFsIGJ5dGVzICAgICAg
ICAgIHNvbWVfYnl0ZXMgICAgPSAyNTsKLSAgICBvcHRpb25hbCBBbm90aGVyTWVzc2FnZSBzb21l
X21lc3NhZ2UgID0gMjY7Ci0gICAgb3B0aW9uYWwgZ3JvdXAgICAgICAgICAgU29tZUdyb3VwICAg
ICA9IDI3IHsKLSAgICAgIG9wdGlvbmFsIGludDMyIGEgPSAxOwotICAgIH0KLSAgfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91
bml0dGVzdF9oYXNfbmFuby5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xl
L3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfaGFzX25hbm8ucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGZlN2QxNzk0YTc2ODA5NjllNTJiOTg2MWEyMWE1MDlkYmYwNjI1MzguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMv
dGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9oYXNfbmFuby5wcm90
bworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBBdXRob3I6IHVsYXNAZ29vZ2xlLmNvbSAoVWxhcyBLaXJhemNpKQot
Ci1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi1vcHRpb24gamF2YV9wYWNrYWdlID0gImNv
bS5nb29nbGUucHJvdG9idWYiOwotb3B0aW9uIGphdmFfb3V0ZXJfY2xhc3NuYW1lID0gIk5hbm9I
YXNPdXRlckNsYXNzIjsKLQotbWVzc2FnZSBUZXN0QWxsVHlwZXNOYW5vSGFzIHsKLQotICBtZXNz
YWdlIE5lc3RlZE1lc3NhZ2UgewotICAgIG9wdGlvbmFsIGludDMyIGJiID0gMTsKLSAgfQotCi0g
IGVudW0gTmVzdGVkRW51bSB7Ci0gICAgRk9PID0gMTsKLSAgICBCQVIgPSAyOwotICAgIEJBWiA9
IDM7Ci0gIH0KLQotICAvLyBTaW5ndWxhcgotICBvcHRpb25hbCBpbnQzMiAgb3B0aW9uYWxfaW50
MzIgICAgPSAgMTsKLSAgb3B0aW9uYWwgZmxvYXQgIG9wdGlvbmFsX2Zsb2F0ICAgID0gMTE7Ci0g
IG9wdGlvbmFsIGRvdWJsZSBvcHRpb25hbF9kb3VibGUgICA9IDEyOwotICBvcHRpb25hbCBzdHJp
bmcgb3B0aW9uYWxfc3RyaW5nICAgPSAxNDsKLSAgb3B0aW9uYWwgYnl0ZXMgIG9wdGlvbmFsX2J5
dGVzICAgID0gMTU7Ci0KLSAgb3B0aW9uYWwgTmVzdGVkTWVzc2FnZSBvcHRpb25hbF9uZXN0ZWRf
bWVzc2FnZSA9IDE4OwotCi0gIG9wdGlvbmFsIE5lc3RlZEVudW0gb3B0aW9uYWxfbmVzdGVkX2Vu
dW0gPSAyMTsKLQotICAvLyBSZXBlYXRlZAotICByZXBlYXRlZCBpbnQzMiAgcmVwZWF0ZWRfaW50
MzIgICAgPSAzMTsKLSAgcmVwZWF0ZWQgc3RyaW5nIHJlcGVhdGVkX3N0cmluZyAgID0gNDQ7Ci0g
IHJlcGVhdGVkIGJ5dGVzICByZXBlYXRlZF9ieXRlcyAgICA9IDQ1OwotCi0gIHJlcGVhdGVkIE5l
c3RlZE1lc3NhZ2UgcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgID0gNDg7Ci0KLSAgcmVwZWF0ZWQg
TmVzdGVkRW51bSByZXBlYXRlZF9uZXN0ZWRfZW51bSAgPSA1MTsKLQotICAvLyBTaW5ndWxhciB3
aXRoIGRlZmF1bHRzCi0gIG9wdGlvbmFsIGludDMyICBkZWZhdWx0X2ludDMyICAgID0gNjEgW2Rl
ZmF1bHQgPSAgNDEgICAgXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfc3RyaW5nICAgPSA3
NCBbZGVmYXVsdCA9ICJoZWxsbyJdOwotICBvcHRpb25hbCBieXRlcyAgZGVmYXVsdF9ieXRlcyAg
ICA9IDc1IFtkZWZhdWx0ID0gIndvcmxkIl07Ci0KLSAgb3B0aW9uYWwgZmxvYXQgZGVmYXVsdF9m
bG9hdF9uYW4gPSA5OSAgW2RlZmF1bHQgPSAgbmFuXTsKLQotICBvcHRpb25hbCBOZXN0ZWRFbnVt
IGRlZmF1bHRfbmVzdGVkX2VudW0gPSA4MSBbZGVmYXVsdCA9IEJBUl07Ci0KLSAgcmVxdWlyZWQg
aW50MzIgaWQgPSA4NjsKLSAgcmVxdWlyZWQgTmVzdGVkRW51bSByZXF1aXJlZF9lbnVtID0gODc7
Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL25hbm8vdW5pdHRlc3RfaW1wb3J0X25hbm8ucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2ph
dmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X2ltcG9ydF9uYW5vLnByb3RvCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTNkZGM1N2VhODk4NTRjZDQ2NjY1NWZhNTUx
YzdiNjdiNjhhNGM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRl
c3RfaW1wb3J0X25hbm8ucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xl
LmNvbSAoS2VudG9uIFZhcmRhKQotLy8KLS8vIFRoaXMgaXMgbGlrZSB1bml0dGVzdF9pbXBvcnQu
cHJvdG8gYnV0IHdpdGggb3B0aW1pemVfZm9yID0gTkFOT19SVU5USU1FLgotCi1wYWNrYWdlIHBy
b3RvYnVmX3VuaXR0ZXN0X2ltcG9ydDsKLQotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZ29v
Z2xlLnByb3RvYnVmLm5hbm8udGVzdGltcG9ydCI7Ci1vcHRpb24gamF2YV9vdXRlcl9jbGFzc25h
bWUgPSAiVW5pdHRlc3RJbXBvcnROYW5vIjsKLQotbWVzc2FnZSBJbXBvcnRNZXNzYWdlTmFubyB7
Ci0gIG9wdGlvbmFsIGludDMyIGQgPSAxOwotfQotCi1lbnVtIEltcG9ydEVudW1OYW5vIHsKLSAg
SU1QT1JUX05BTk9fRk9PID0gNzsKLSAgSU1QT1JUX05BTk9fQkFSID0gODsKLSAgSU1QT1JUX05B
Tk9fQkFaID0gOTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfbXVsdGlwbGVfbmFtZWNsYXNoX25hbm8ucHJvdG8g
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0
X211bHRpcGxlX25hbWVjbGFzaF9uYW5vLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiMzFjNDM5OTRjOWU4YWM0MTQyZmE4NDkwZDVkOTAxN2Y4M2MyYjc4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2
YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfbXVsdGlwbGVfbmFtZWNsYXNoX25h
bm8ucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBtYXh0cm95QGdvb2dsZS5jb20gKE1heCBD
YWkpCi0KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0OwotCi1vcHRpb24gamF2YV9w
YWNrYWdlID0gImNvbS5nb29nbGUucHJvdG9idWYiOwotb3B0aW9uIGphdmFfb3V0ZXJfY2xhc3Nu
YW1lID0gIk11bHRpcGxlTmFtZUNsYXNoTmFubyI7Ci1vcHRpb24gamF2YV9tdWx0aXBsZV9maWxl
cyA9IHRydWU7Ci0KLW1lc3NhZ2UgTXVsdGlwbGVOYW1lQ2xhc2hOYW5vIHsKLSAgb3B0aW9uYWwg
aW50MzIgZmllbGQgPSAxOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9tdWx0aXBsZV9uYW5vLnByb3RvIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZh
bmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9tdWx0
aXBsZV9uYW5vLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDZhYjc3NDFj
MDFhNWZlZWNlNWI1OTMyZjFmM2EwNzRjNDM0MmRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL25hbm8vdW5pdHRlc3RfbXVsdGlwbGVfbmFuby5wcm90bworKysgL2Rldi9udWxsCkBA
IC0xLDYzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBB
dXRob3I6IG1heHRyb3lAZ29vZ2xlLmNvbSAoTWF4IENhaSkKLQotcGFja2FnZSBwcm90b2J1Zl91
bml0dGVzdF9pbXBvcnQ7Ci0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3Rf
aW1wb3J0X25hbm8ucHJvdG8iOwotCi1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUu
cHJvdG9idWYiOwotb3B0aW9uIGphdmFfbXVsdGlwbGVfZmlsZXMgPSB0cnVlOwotCi1lbnVtIEZp
bGVTY29wZUVudW0gewotICBPTkUgPSAxOwotICBUV08gPSAyOwotfQotCi1tZXNzYWdlIEZpbGVT
Y29wZUVudW1SZWZOYW5vIHsKLSAgb3B0aW9uYWwgRmlsZVNjb3BlRW51bSBlbnVtX2ZpZWxkID0g
MTsKLX0KLQotbWVzc2FnZSBNZXNzYWdlU2NvcGVFbnVtUmVmTmFubyB7Ci0gIGVudW0gTWVzc2Fn
ZVNjb3BlRW51bSB7Ci0gICAgT05FID0gMTsKLSAgICBUV08gPSAyOwotICB9Ci0gIG9wdGlvbmFs
IE1lc3NhZ2VTY29wZUVudW0gZW51bV9maWVsZCA9IDE7Ci19Ci0KLW1lc3NhZ2UgTXVsdGlwbGVJ
bXBvcnRpbmdOb25NdWx0aXBsZU5hbm8xIHsKLSAgb3B0aW9uYWwgSW1wb3J0TWVzc2FnZU5hbm8g
ZmllbGQgPSAxOwotfQotCi1tZXNzYWdlIE11bHRpcGxlSW1wb3J0aW5nTm9uTXVsdGlwbGVOYW5v
MiB7Ci0gIG9wdGlvbmFsIE11bHRpcGxlSW1wb3J0aW5nTm9uTXVsdGlwbGVOYW5vMSBuYW5vMSA9
IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9uYW5vL3VuaXR0ZXN0X25hbm8ucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29t
L2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X25hbm8ucHJvdG8KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNmZmYyNGMwYzRlMGQ1YTE0OTQ4YTE2NThmMWEwOGZiYTAyMGQ5Y2Uu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9z
cmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9uYW5vLnByb3Rv
CisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBBdXRob3I6IHdpbmtAZ29vZ2xlLmNvbSAoV2luayBTYXZpbGxlKQot
Ci1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9u
YW5vL3VuaXR0ZXN0X2ltcG9ydF9uYW5vLnByb3RvIjsKLQotb3B0aW9uIGphdmFfcGFja2FnZSA9
ICJjb20uZ29vZ2xlLnByb3RvYnVmIjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJO
YW5vT3V0ZXJDbGFzcyI7Ci0KLS8vIFNhbWUgYXMgVGVzdEFsbFR5cGVzIGJ1dCB3aXRoIHRoZSBu
YW5vIHJ1bnRpbWUuCi1tZXNzYWdlIFRlc3RBbGxUeXBlc05hbm8gewotCi0gIG1lc3NhZ2UgTmVz
dGVkTWVzc2FnZSB7Ci0gICAgb3B0aW9uYWwgaW50MzIgYmIgPSAxOwotICB9Ci0KLSAgZW51bSBO
ZXN0ZWRFbnVtIHsKLSAgICBGT08gPSAxOwotICAgIEJBUiA9IDI7Ci0gICAgQkFaID0gMzsKLSAg
fQotCi0gIC8vIFNpbmd1bGFyCi0gIG9wdGlvbmFsICAgIGludDMyIG9wdGlvbmFsX2ludDMyICAg
ID0gIDE7Ci0gIG9wdGlvbmFsICAgIGludDY0IG9wdGlvbmFsX2ludDY0ICAgID0gIDI7Ci0gIG9w
dGlvbmFsICAgdWludDMyIG9wdGlvbmFsX3VpbnQzMiAgID0gIDM7Ci0gIG9wdGlvbmFsICAgdWlu
dDY0IG9wdGlvbmFsX3VpbnQ2NCAgID0gIDQ7Ci0gIG9wdGlvbmFsICAgc2ludDMyIG9wdGlvbmFs
X3NpbnQzMiAgID0gIDU7Ci0gIG9wdGlvbmFsICAgc2ludDY0IG9wdGlvbmFsX3NpbnQ2NCAgID0g
IDY7Ci0gIG9wdGlvbmFsICBmaXhlZDMyIG9wdGlvbmFsX2ZpeGVkMzIgID0gIDc7Ci0gIG9wdGlv
bmFsICBmaXhlZDY0IG9wdGlvbmFsX2ZpeGVkNjQgID0gIDg7Ci0gIG9wdGlvbmFsIHNmaXhlZDMy
IG9wdGlvbmFsX3NmaXhlZDMyID0gIDk7Ci0gIG9wdGlvbmFsIHNmaXhlZDY0IG9wdGlvbmFsX3Nm
aXhlZDY0ID0gMTA7Ci0gIG9wdGlvbmFsICAgIGZsb2F0IG9wdGlvbmFsX2Zsb2F0ICAgID0gMTE7
Ci0gIG9wdGlvbmFsICAgZG91YmxlIG9wdGlvbmFsX2RvdWJsZSAgID0gMTI7Ci0gIG9wdGlvbmFs
ICAgICBib29sIG9wdGlvbmFsX2Jvb2wgICAgID0gMTM7Ci0gIG9wdGlvbmFsICAgc3RyaW5nIG9w
dGlvbmFsX3N0cmluZyAgID0gMTQ7Ci0gIG9wdGlvbmFsICAgIGJ5dGVzIG9wdGlvbmFsX2J5dGVz
ICAgID0gMTU7Ci0KLSAgb3B0aW9uYWwgZ3JvdXAgT3B0aW9uYWxHcm91cCA9IDE2IHsKLSAgICBv
cHRpb25hbCBpbnQzMiBhID0gMTc7Ci0gIH0KLQotICBvcHRpb25hbCBOZXN0ZWRNZXNzYWdlICAg
ICAgb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgID0gMTg7Ci0gIG9wdGlvbmFsIEZvcmVpZ25NZXNz
YWdlTmFubyBvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UgPSAxOTsKLSAgb3B0aW9uYWwgcHJvdG9i
dWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2VOYW5vCi0gICAgb3B0aW9uYWxfaW1wb3J0
X21lc3NhZ2UgPSAyMDsKLQotICBvcHRpb25hbCBOZXN0ZWRFbnVtICAgICAgb3B0aW9uYWxfbmVz
dGVkX2VudW0gICAgID0gMjE7Ci0gIG9wdGlvbmFsIEZvcmVpZ25FbnVtTmFubyBvcHRpb25hbF9m
b3JlaWduX2VudW0gICAgPSAyMjsKLSAgb3B0aW9uYWwgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0
LkltcG9ydEVudW1OYW5vIG9wdGlvbmFsX2ltcG9ydF9lbnVtID0gMjM7Ci0KLSAgb3B0aW9uYWwg
c3RyaW5nIG9wdGlvbmFsX3N0cmluZ19waWVjZSA9IDI0IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwot
ICBvcHRpb25hbCBzdHJpbmcgb3B0aW9uYWxfY29yZCA9IDI1IFtjdHlwZT1DT1JEXTsKLQotICAv
LyBSZXBlYXRlZAotICByZXBlYXRlZCAgICBpbnQzMiByZXBlYXRlZF9pbnQzMiAgICA9IDMxOwot
ICByZXBlYXRlZCAgICBpbnQ2NCByZXBlYXRlZF9pbnQ2NCAgICA9IDMyOwotICByZXBlYXRlZCAg
IHVpbnQzMiByZXBlYXRlZF91aW50MzIgICA9IDMzOwotICByZXBlYXRlZCAgIHVpbnQ2NCByZXBl
YXRlZF91aW50NjQgICA9IDM0OwotICByZXBlYXRlZCAgIHNpbnQzMiByZXBlYXRlZF9zaW50MzIg
ICA9IDM1OwotICByZXBlYXRlZCAgIHNpbnQ2NCByZXBlYXRlZF9zaW50NjQgICA9IDM2OwotICBy
ZXBlYXRlZCAgZml4ZWQzMiByZXBlYXRlZF9maXhlZDMyICA9IDM3OwotICByZXBlYXRlZCAgZml4
ZWQ2NCByZXBlYXRlZF9maXhlZDY0ICA9IDM4OwotICByZXBlYXRlZCBzZml4ZWQzMiByZXBlYXRl
ZF9zZml4ZWQzMiA9IDM5OwotICByZXBlYXRlZCBzZml4ZWQ2NCByZXBlYXRlZF9zZml4ZWQ2NCA9
IDQwOwotICByZXBlYXRlZCAgICBmbG9hdCByZXBlYXRlZF9mbG9hdCAgICA9IDQxOwotICByZXBl
YXRlZCAgIGRvdWJsZSByZXBlYXRlZF9kb3VibGUgICA9IDQyOwotICByZXBlYXRlZCAgICAgYm9v
bCByZXBlYXRlZF9ib29sICAgICA9IDQzOwotICByZXBlYXRlZCAgIHN0cmluZyByZXBlYXRlZF9z
dHJpbmcgICA9IDQ0OwotICByZXBlYXRlZCAgICBieXRlcyByZXBlYXRlZF9ieXRlcyAgICA9IDQ1
OwotCi0gIHJlcGVhdGVkIGdyb3VwIFJlcGVhdGVkR3JvdXAgPSA0NiB7Ci0gICAgb3B0aW9uYWwg
aW50MzIgYSA9IDQ3OwotICB9Ci0KLSAgcmVwZWF0ZWQgTmVzdGVkTWVzc2FnZSAgICAgIHJlcGVh
dGVkX25lc3RlZF9tZXNzYWdlICA9IDQ4OwotICByZXBlYXRlZCBGb3JlaWduTWVzc2FnZU5hbm8g
cmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlID0gNDk7Ci0gIHJlcGVhdGVkIHByb3RvYnVmX3VuaXR0
ZXN0X2ltcG9ydC5JbXBvcnRNZXNzYWdlTmFubwotICAgIHJlcGVhdGVkX2ltcG9ydF9tZXNzYWdl
ID0gNTA7Ci0KLSAgcmVwZWF0ZWQgTmVzdGVkRW51bSAgICAgIHJlcGVhdGVkX25lc3RlZF9lbnVt
ICA9IDUxOwotICByZXBlYXRlZCBGb3JlaWduRW51bU5hbm8gcmVwZWF0ZWRfZm9yZWlnbl9lbnVt
ID0gNTI7Ci0gIHJlcGVhdGVkIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVtTmFu
byByZXBlYXRlZF9pbXBvcnRfZW51bSA9IDUzOwotCi0gIHJlcGVhdGVkIHN0cmluZyByZXBlYXRl
ZF9zdHJpbmdfcGllY2UgPSA1NCBbY3R5cGU9U1RSSU5HX1BJRUNFXTsKLSAgcmVwZWF0ZWQgc3Ry
aW5nIHJlcGVhdGVkX2NvcmQgPSA1NSBbY3R5cGU9Q09SRF07Ci0KLSAgLy8gUmVwZWF0ZWQgcGFj
a2VkCi0gIHJlcGVhdGVkICAgIGludDMyIHJlcGVhdGVkX3BhY2tlZF9pbnQzMiAgICA9IDg3IFtw
YWNrZWQ9dHJ1ZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IHJlcGVhdGVkX3BhY2tlZF9zZml4ZWQ2
NCA9IDg4IFtwYWNrZWQ9dHJ1ZV07Ci0KLSAgcmVwZWF0ZWQgTmVzdGVkRW51bSByZXBlYXRlZF9w
YWNrZWRfbmVzdGVkX2VudW0gID0gODkgW3BhY2tlZD10cnVlXTsKLQotICAvLyBTaW5ndWxhciB3
aXRoIGRlZmF1bHRzCi0gIG9wdGlvbmFsICAgIGludDMyIGRlZmF1bHRfaW50MzIgICAgPSA2MSBb
ZGVmYXVsdCA9ICA0MSAgICBdOwotICBvcHRpb25hbCAgICBpbnQ2NCBkZWZhdWx0X2ludDY0ICAg
ID0gNjIgW2RlZmF1bHQgPSAgNDIgICAgXTsKLSAgb3B0aW9uYWwgICB1aW50MzIgZGVmYXVsdF91
aW50MzIgICA9IDYzIFtkZWZhdWx0ID0gIDQzICAgIF07Ci0gIG9wdGlvbmFsICAgdWludDY0IGRl
ZmF1bHRfdWludDY0ICAgPSA2NCBbZGVmYXVsdCA9ICA0NCAgICBdOwotICBvcHRpb25hbCAgIHNp
bnQzMiBkZWZhdWx0X3NpbnQzMiAgID0gNjUgW2RlZmF1bHQgPSAtNDUgICAgXTsKLSAgb3B0aW9u
YWwgICBzaW50NjQgZGVmYXVsdF9zaW50NjQgICA9IDY2IFtkZWZhdWx0ID0gIDQ2ICAgIF07Ci0g
IG9wdGlvbmFsICBmaXhlZDMyIGRlZmF1bHRfZml4ZWQzMiAgPSA2NyBbZGVmYXVsdCA9ICA0NyAg
ICBdOwotICBvcHRpb25hbCAgZml4ZWQ2NCBkZWZhdWx0X2ZpeGVkNjQgID0gNjggW2RlZmF1bHQg
PSAgNDggICAgXTsKLSAgb3B0aW9uYWwgc2ZpeGVkMzIgZGVmYXVsdF9zZml4ZWQzMiA9IDY5IFtk
ZWZhdWx0ID0gIDQ5ICAgIF07Ci0gIG9wdGlvbmFsIHNmaXhlZDY0IGRlZmF1bHRfc2ZpeGVkNjQg
PSA3MCBbZGVmYXVsdCA9IC01MCAgICBdOwotICBvcHRpb25hbCAgICBmbG9hdCBkZWZhdWx0X2Zs
b2F0ICAgID0gNzEgW2RlZmF1bHQgPSAgNTEuNSAgXTsKLSAgb3B0aW9uYWwgICBkb3VibGUgZGVm
YXVsdF9kb3VibGUgICA9IDcyIFtkZWZhdWx0ID0gIDUyZTMgIF07Ci0gIG9wdGlvbmFsICAgICBi
b29sIGRlZmF1bHRfYm9vbCAgICAgPSA3MyBbZGVmYXVsdCA9IHRydWUgICBdOwotICBvcHRpb25h
bCAgIHN0cmluZyBkZWZhdWx0X3N0cmluZyAgID0gNzQgW2RlZmF1bHQgPSAiaGVsbG8iXTsKLSAg
b3B0aW9uYWwgICAgYnl0ZXMgZGVmYXVsdF9ieXRlcyAgICA9IDc1IFtkZWZhdWx0ID0gIndvcmxk
Il07Ci0KLSAgb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfc3RyaW5nX25vbmFzY2lpID0gNzYgW2Rl
ZmF1bHQgPSAiZMO8bnlhIl07Ci0gIG9wdGlvbmFsICBieXRlcyBkZWZhdWx0X2J5dGVzX25vbmFz
Y2lpICA9IDc3IFtkZWZhdWx0ID0gImTDvG55YWIiXTsKLQotICBvcHRpb25hbCAgZmxvYXQgZGVm
YXVsdF9mbG9hdF9pbmYgICAgICA9IDk3ICBbZGVmYXVsdCA9ICBpbmZdOwotICBvcHRpb25hbCAg
ZmxvYXQgZGVmYXVsdF9mbG9hdF9uZWdfaW5mICA9IDk4ICBbZGVmYXVsdCA9IC1pbmZdOwotICBv
cHRpb25hbCAgZmxvYXQgZGVmYXVsdF9mbG9hdF9uYW4gICAgICA9IDk5ICBbZGVmYXVsdCA9ICBu
YW5dOwotICBvcHRpb25hbCBkb3VibGUgZGVmYXVsdF9kb3VibGVfaW5mICAgICA9IDEwMCBbZGVm
YXVsdCA9ICBpbmZdOwotICBvcHRpb25hbCBkb3VibGUgZGVmYXVsdF9kb3VibGVfbmVnX2luZiA9
IDEwMSBbZGVmYXVsdCA9IC1pbmZdOwotICBvcHRpb25hbCBkb3VibGUgZGVmYXVsdF9kb3VibGVf
bmFuICAgICA9IDEwMiBbZGVmYXVsdCA9ICBuYW5dOwotCi0gIG9wdGlvbmFsIE5lc3RlZEVudW0g
ZGVmYXVsdF9uZXN0ZWRfZW51bSA9IDgxIFtkZWZhdWx0ID0gQkFSXTsKLSAgb3B0aW9uYWwgRm9y
ZWlnbkVudW1OYW5vIGRlZmF1bHRfZm9yZWlnbl9lbnVtID0gODIKLSAgICAgIFtkZWZhdWx0ID0g
Rk9SRUlHTl9OQU5PX0JBUl07Ci0gIG9wdGlvbmFsIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5J
bXBvcnRFbnVtTmFubwotICAgICAgZGVmYXVsdF9pbXBvcnRfZW51bSA9IDgzIFtkZWZhdWx0ID0g
SU1QT1JUX05BTk9fQkFSXTsKLQotICBvcHRpb25hbCBzdHJpbmcgZGVmYXVsdF9zdHJpbmdfcGll
Y2UgPSA4NCBbY3R5cGU9U1RSSU5HX1BJRUNFLGRlZmF1bHQ9ImFiYyJdOwotICBvcHRpb25hbCBz
dHJpbmcgZGVmYXVsdF9jb3JkID0gODUgW2N0eXBlPUNPUkQsZGVmYXVsdD0iMTIzIl07Ci0KLSAg
cmVxdWlyZWQgaW50MzIgaWQgPSA4NjsKLQotICAvLyBUcnkgdG8gY2F1c2UgY29uZmxpY3RzLgot
ICBvcHRpb25hbCBpbnQzMiB0YWcgPSA5MzsKLSAgb3B0aW9uYWwgaW50MzIgZ2V0X3NlcmlhbGl6
ZWRfc2l6ZSA9IDk0OwotICBvcHRpb25hbCBpbnQzMiB3cml0ZV90byA9IDk1OwotCi0gIC8vIFRy
eSB0byBmYWlsIHdpdGggamF2YSByZXNlcnZlZCBrZXl3b3JkcwotICBvcHRpb25hbCBpbnQzMiBz
eW5jaHJvbml6ZWQgPSA5NjsKLQotICBvbmVvZiBvbmVvZl9maWVsZCB7Ci0gICAgdWludDMyIG9u
ZW9mX3VpbnQzMiA9IDExMTsKLSAgICBOZXN0ZWRNZXNzYWdlIG9uZW9mX25lc3RlZF9tZXNzYWdl
ID0gMTEyOwotICAgIHN0cmluZyBvbmVvZl9zdHJpbmcgPSAxMjM7Ci0gICAgYnl0ZXMgb25lb2Zf
Ynl0ZXMgPSAxMjQ7Ci0gICAgZml4ZWQ2NCBvbmVvZl9maXhlZDY0ID0gMTE1OwotICAgIE5lc3Rl
ZEVudW0gb25lb2ZfZW51bSA9IDExNjsKLSAgfQotfQotCi1tZXNzYWdlIEZvcmVpZ25NZXNzYWdl
TmFubyB7Ci0gIG9wdGlvbmFsIGludDMyIGMgPSAxOwotfQotCi1lbnVtIEZvcmVpZ25FbnVtTmFu
byB7Ci0gIEZPUkVJR05fTkFOT19GT08gPSA0OwotICBGT1JFSUdOX05BTk9fQkFSID0gNTsKLSAg
Rk9SRUlHTl9OQU5PX0JBWiA9IDY7Ci19Ci0KLS8vIFRlc3QgdGhhdCBkZXByZWNhdGVkIGZpZWxk
cyB3b3JrLiAgV2Ugb25seSB2ZXJpZnkgdGhhdCB0aGV5IGNvbXBpbGUgKGF0IG9uZQotLy8gcG9p
bnQgdGhpcyBmYWlsZWQpLgotbWVzc2FnZSBUZXN0RGVwcmVjYXRlZE5hbm8gewotICBvcHRpb25h
bCBpbnQzMiBkZXByZWNhdGVkX2ZpZWxkID0gMSBbZGVwcmVjYXRlZCA9IHRydWVdOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91
bml0dGVzdF9yZWN1cnNpdmVfbmFuby5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfcmVjdXJzaXZlX25hbm8ucHJvdG8KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5Yjk0NGYwMWZkN2I0MzgzNjFhMmRmMTliY2RmOGZk
YmEzNmZlMzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
YXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9y
ZWN1cnNpdmVfbmFuby5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IHdpbmtAZ29vZ2xlLmNv
bSAoV2luayBTYXZpbGxlKQotLy8KLQotcGFja2FnZSBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQ7
Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5wcm90b2J1ZiI7Ci0vLyBFeHBs
aWNpdCBvdXRlciBjbGFzc25hbWUgdG8gc3VwcHJlc3MgbGVnYWN5IGluZm8uCi1vcHRpb24gamF2
YV9vdXRlcl9jbGFzc25hbWUgPSAiVW5pdHRlc3RSZWN1cnNpdmVOYW5vIjsKLQotbWVzc2FnZSBS
ZWN1cnNpdmVNZXNzYWdlTmFubyB7Ci0gIG1lc3NhZ2UgTmVzdGVkTWVzc2FnZSB7Ci0gICAgb3B0
aW9uYWwgUmVjdXJzaXZlTWVzc2FnZU5hbm8gYSA9IDE7Ci0gIH0KLQotICByZXF1aXJlZCBpbnQz
MiBpZCA9IDE7Ci0gIG9wdGlvbmFsIE5lc3RlZE1lc3NhZ2UgbmVzdGVkX21lc3NhZ2UgPSAyOwot
ICBvcHRpb25hbCBSZWN1cnNpdmVNZXNzYWdlTmFubyBvcHRpb25hbF9yZWN1cnNpdmVfbWVzc2Fn
ZV9uYW5vID0gMzsKLSAgcmVwZWF0ZWQgUmVjdXJzaXZlTWVzc2FnZU5hbm8gcmVwZWF0ZWRfcmVj
dXJzaXZlX21lc3NhZ2VfbmFubyA9IDQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X3JlZmVyZW5jZV90eXBlc19u
YW5vLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFu
by91bml0dGVzdF9yZWZlcmVuY2VfdHlwZXNfbmFuby5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggODJlYjhkMTE3NWMwMGI5NzcxMDNiNGE3YzBlYmViMWMyZTJiNzRhNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90
ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X3JlZmVyZW5jZV90eXBl
c19uYW5vLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLXBhY2thZ2UgcHJv
dG9idWZfdW5pdHRlc3Q7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5wcm90
b2J1ZiI7Ci1vcHRpb24gamF2YV9vdXRlcl9jbGFzc25hbWUgPSAiTmFub1JlZmVyZW5jZVR5cGVz
IjsKLQotbWVzc2FnZSBUZXN0QWxsVHlwZXNOYW5vIHsKLQotICBlbnVtIE5lc3RlZEVudW0gewot
ICAgIEZPTyA9IDE7Ci0gICAgQkFSID0gMjsKLSAgICBCQVogPSAzOwotICB9Ci0KLSAgbWVzc2Fn
ZSBOZXN0ZWRNZXNzYWdlIHsKLSAgICBvcHRpb25hbCBpbnQzMiBmb28gPSAxOwotICB9Ci0KLSAg
Ly8gU2luZ3VsYXIKLSAgb3B0aW9uYWwgICAgaW50MzIgb3B0aW9uYWxfaW50MzIgICAgPSAgMTsK
LSAgb3B0aW9uYWwgICAgaW50NjQgb3B0aW9uYWxfaW50NjQgICAgPSAgMjsKLSAgb3B0aW9uYWwg
ICB1aW50MzIgb3B0aW9uYWxfdWludDMyICAgPSAgMzsKLSAgb3B0aW9uYWwgICB1aW50NjQgb3B0
aW9uYWxfdWludDY0ICAgPSAgNDsKLSAgb3B0aW9uYWwgICBzaW50MzIgb3B0aW9uYWxfc2ludDMy
ICAgPSAgNTsKLSAgb3B0aW9uYWwgICBzaW50NjQgb3B0aW9uYWxfc2ludDY0ICAgPSAgNjsKLSAg
b3B0aW9uYWwgIGZpeGVkMzIgb3B0aW9uYWxfZml4ZWQzMiAgPSAgNzsKLSAgb3B0aW9uYWwgIGZp
eGVkNjQgb3B0aW9uYWxfZml4ZWQ2NCAgPSAgODsKLSAgb3B0aW9uYWwgc2ZpeGVkMzIgb3B0aW9u
YWxfc2ZpeGVkMzIgPSAgOTsKLSAgb3B0aW9uYWwgc2ZpeGVkNjQgb3B0aW9uYWxfc2ZpeGVkNjQg
PSAxMDsKLSAgb3B0aW9uYWwgICAgZmxvYXQgb3B0aW9uYWxfZmxvYXQgICAgPSAxMTsKLSAgb3B0
aW9uYWwgICBkb3VibGUgb3B0aW9uYWxfZG91YmxlICAgPSAxMjsKLSAgb3B0aW9uYWwgICAgIGJv
b2wgb3B0aW9uYWxfYm9vbCAgICAgPSAxMzsKLSAgb3B0aW9uYWwgICBzdHJpbmcgb3B0aW9uYWxf
c3RyaW5nICAgPSAxNDsKLSAgb3B0aW9uYWwgICAgYnl0ZXMgb3B0aW9uYWxfYnl0ZXMgICAgPSAx
NTsKLQotICBvcHRpb25hbCBncm91cCBPcHRpb25hbEdyb3VwID0gMTYgewotICAgIG9wdGlvbmFs
IGludDMyIGEgPSAxNzsKLSAgfQotCi0gIG9wdGlvbmFsIE5lc3RlZE1lc3NhZ2UgICAgICBvcHRp
b25hbF9uZXN0ZWRfbWVzc2FnZSAgPSAxODsKLQotICBvcHRpb25hbCBOZXN0ZWRFbnVtICAgICAg
b3B0aW9uYWxfbmVzdGVkX2VudW0gICAgID0gMjE7Ci0KLSAgb3B0aW9uYWwgc3RyaW5nIG9wdGlv
bmFsX3N0cmluZ19waWVjZSA9IDI0IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICBvcHRpb25hbCBz
dHJpbmcgb3B0aW9uYWxfY29yZCA9IDI1IFtjdHlwZT1DT1JEXTsKLQotICAvLyBSZXBlYXRlZAot
ICByZXBlYXRlZCAgICBpbnQzMiByZXBlYXRlZF9pbnQzMiAgICA9IDMxOwotICByZXBlYXRlZCAg
ICBpbnQ2NCByZXBlYXRlZF9pbnQ2NCAgICA9IDMyOwotICByZXBlYXRlZCAgIHVpbnQzMiByZXBl
YXRlZF91aW50MzIgICA9IDMzOwotICByZXBlYXRlZCAgIHVpbnQ2NCByZXBlYXRlZF91aW50NjQg
ICA9IDM0OwotICByZXBlYXRlZCAgIHNpbnQzMiByZXBlYXRlZF9zaW50MzIgICA9IDM1OwotICBy
ZXBlYXRlZCAgIHNpbnQ2NCByZXBlYXRlZF9zaW50NjQgICA9IDM2OwotICByZXBlYXRlZCAgZml4
ZWQzMiByZXBlYXRlZF9maXhlZDMyICA9IDM3OwotICByZXBlYXRlZCAgZml4ZWQ2NCByZXBlYXRl
ZF9maXhlZDY0ICA9IDM4OwotICByZXBlYXRlZCBzZml4ZWQzMiByZXBlYXRlZF9zZml4ZWQzMiA9
IDM5OwotICByZXBlYXRlZCBzZml4ZWQ2NCByZXBlYXRlZF9zZml4ZWQ2NCA9IDQwOwotICByZXBl
YXRlZCAgICBmbG9hdCByZXBlYXRlZF9mbG9hdCAgICA9IDQxOwotICByZXBlYXRlZCAgIGRvdWJs
ZSByZXBlYXRlZF9kb3VibGUgICA9IDQyOwotICByZXBlYXRlZCAgICAgYm9vbCByZXBlYXRlZF9i
b29sICAgICA9IDQzOwotICByZXBlYXRlZCAgIHN0cmluZyByZXBlYXRlZF9zdHJpbmcgICA9IDQ0
OwotICByZXBlYXRlZCAgICBieXRlcyByZXBlYXRlZF9ieXRlcyAgICA9IDQ1OwotCi0gIHJlcGVh
dGVkIGdyb3VwIFJlcGVhdGVkR3JvdXAgPSA0NiB7Ci0gICAgb3B0aW9uYWwgaW50MzIgYSA9IDQ3
OwotICB9Ci0KLSAgcmVwZWF0ZWQgTmVzdGVkTWVzc2FnZSAgICAgIHJlcGVhdGVkX25lc3RlZF9t
ZXNzYWdlICA9IDQ4OwotCi0gIHJlcGVhdGVkIE5lc3RlZEVudW0gICAgICByZXBlYXRlZF9uZXN0
ZWRfZW51bSAgPSA1MTsKLQotICByZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRfc3RyaW5nX3BpZWNl
ID0gNTQgW2N0eXBlPVNUUklOR19QSUVDRV07Ci0gIHJlcGVhdGVkIHN0cmluZyByZXBlYXRlZF9j
b3JkID0gNTUgW2N0eXBlPUNPUkRdOwotCi0gIC8vIFJlcGVhdGVkIHBhY2tlZAotICByZXBlYXRl
ZCAgICBpbnQzMiByZXBlYXRlZF9wYWNrZWRfaW50MzIgICAgPSA4NyBbcGFja2VkPXRydWVdOwot
ICByZXBlYXRlZCBzZml4ZWQ2NCByZXBlYXRlZF9wYWNrZWRfc2ZpeGVkNjQgPSA4OCBbcGFja2Vk
PXRydWVdOwotCi0gIHJlcGVhdGVkIE5lc3RlZEVudW0gcmVwZWF0ZWRfcGFja2VkX25lc3RlZF9l
bnVtICA9IDg5IFtwYWNrZWQ9dHJ1ZV07Ci0KLSAgLy8gU2luZ3VsYXIgd2l0aCBkZWZhdWx0cwot
ICBvcHRpb25hbCAgICBpbnQzMiBkZWZhdWx0X2ludDMyICAgID0gNjEgW2RlZmF1bHQgPSAgNDEg
ICAgXTsKLSAgb3B0aW9uYWwgICAgaW50NjQgZGVmYXVsdF9pbnQ2NCAgICA9IDYyIFtkZWZhdWx0
ID0gIDQyICAgIF07Ci0gIG9wdGlvbmFsICAgdWludDMyIGRlZmF1bHRfdWludDMyICAgPSA2MyBb
ZGVmYXVsdCA9ICA0MyAgICBdOwotICBvcHRpb25hbCAgIHVpbnQ2NCBkZWZhdWx0X3VpbnQ2NCAg
ID0gNjQgW2RlZmF1bHQgPSAgNDQgICAgXTsKLSAgb3B0aW9uYWwgICBzaW50MzIgZGVmYXVsdF9z
aW50MzIgICA9IDY1IFtkZWZhdWx0ID0gLTQ1ICAgIF07Ci0gIG9wdGlvbmFsICAgc2ludDY0IGRl
ZmF1bHRfc2ludDY0ICAgPSA2NiBbZGVmYXVsdCA9ICA0NiAgICBdOwotICBvcHRpb25hbCAgZml4
ZWQzMiBkZWZhdWx0X2ZpeGVkMzIgID0gNjcgW2RlZmF1bHQgPSAgNDcgICAgXTsKLSAgb3B0aW9u
YWwgIGZpeGVkNjQgZGVmYXVsdF9maXhlZDY0ICA9IDY4IFtkZWZhdWx0ID0gIDQ4ICAgIF07Ci0g
IG9wdGlvbmFsIHNmaXhlZDMyIGRlZmF1bHRfc2ZpeGVkMzIgPSA2OSBbZGVmYXVsdCA9ICA0OSAg
ICBdOwotICBvcHRpb25hbCBzZml4ZWQ2NCBkZWZhdWx0X3NmaXhlZDY0ID0gNzAgW2RlZmF1bHQg
PSAtNTAgICAgXTsKLSAgb3B0aW9uYWwgICAgZmxvYXQgZGVmYXVsdF9mbG9hdCAgICA9IDcxIFtk
ZWZhdWx0ID0gIDUxLjUgIF07Ci0gIG9wdGlvbmFsICAgZG91YmxlIGRlZmF1bHRfZG91YmxlICAg
PSA3MiBbZGVmYXVsdCA9ICA1MmUzICBdOwotICBvcHRpb25hbCAgICAgYm9vbCBkZWZhdWx0X2Jv
b2wgICAgID0gNzMgW2RlZmF1bHQgPSB0cnVlICAgXTsKLSAgb3B0aW9uYWwgICBzdHJpbmcgZGVm
YXVsdF9zdHJpbmcgICA9IDc0IFtkZWZhdWx0ID0gImhlbGxvIl07Ci0gIG9wdGlvbmFsICAgIGJ5
dGVzIGRlZmF1bHRfYnl0ZXMgICAgPSA3NSBbZGVmYXVsdCA9ICJ3b3JsZCJdOwotCi0KLSAgb3B0
aW9uYWwgIGZsb2F0IGRlZmF1bHRfZmxvYXRfaW5mICAgICAgPSA5NyAgW2RlZmF1bHQgPSAgaW5m
XTsKLSAgb3B0aW9uYWwgIGZsb2F0IGRlZmF1bHRfZmxvYXRfbmVnX2luZiAgPSA5OCAgW2RlZmF1
bHQgPSAtaW5mXTsKLSAgb3B0aW9uYWwgIGZsb2F0IGRlZmF1bHRfZmxvYXRfbmFuICAgICAgPSA5
OSAgW2RlZmF1bHQgPSAgbmFuXTsKLSAgb3B0aW9uYWwgZG91YmxlIGRlZmF1bHRfZG91YmxlX2lu
ZiAgICAgPSAxMDAgW2RlZmF1bHQgPSAgaW5mXTsKLSAgb3B0aW9uYWwgZG91YmxlIGRlZmF1bHRf
ZG91YmxlX25lZ19pbmYgPSAxMDEgW2RlZmF1bHQgPSAtaW5mXTsKLSAgb3B0aW9uYWwgZG91Ymxl
IGRlZmF1bHRfZG91YmxlX25hbiAgICAgPSAxMDIgW2RlZmF1bHQgPSAgbmFuXTsKLQotfQotCi1t
ZXNzYWdlIEZvcmVpZ25NZXNzYWdlTmFubyB7Ci0gIG9wdGlvbmFsIGludDMyIGMgPSAxOwotfQot
Ci1lbnVtIEZvcmVpZ25FbnVtTmFubyB7Ci0gIEZPUkVJR05fTkFOT19GT08gPSA0OwotICBGT1JF
SUdOX05BTk9fQkFSID0gNTsKLSAgRk9SRUlHTl9OQU5PX0JBWiA9IDY7Ci19Ci0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRl
c3RfcmVwZWF0ZWRfbWVyZ2VfbmFuby5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfcmVwZWF0ZWRfbWVyZ2VfbmFuby5wcm90bwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY0ZTJkMmY2NWZmYmQ2YTAxMDQ0NDE5OTdm
NzNlZTkyNGYzM2YyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0
ZXN0X3JlcGVhdGVkX21lcmdlX25hbm8ucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBtYXh0
cm95QGdvb2dsZS5jb20gKE1heCBDYWkpCi0KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7Ci0K
LWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3RfbmFuby5wcm90byI7Ci0KLW9w
dGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5wcm90b2J1ZiI7Ci1vcHRpb24gamF2YV9t
dWx0aXBsZV9maWxlcyA9IHRydWU7Ci0KLS8vIEEgY29udGFpbmVyIG1lc3NhZ2UgZm9yIHRlc3Rp
bmcgdGhlIG1lcmdpbmcgb2YgcmVwZWF0ZWQgZmllbGRzIGF0IGEKLS8vIG5lc3RlZCBsZXZlbC4g
T3RoZXIgdGVzdHMgd2lsbCBiZSBkb25lIHVzaW5nIHRoZSByZXBlYXRlZCBmaWVsZHMgaW4KLS8v
IFRlc3RBbGxUeXBlc05hbm8uCi1tZXNzYWdlIFRlc3RSZXBlYXRlZE1lcmdlTmFubyB7Ci0KLSAg
b3B0aW9uYWwgVGVzdEFsbFR5cGVzTmFubyBjb250YWluZWQgPSAxOwotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0
X3JlcGVhdGVkX3BhY2thYmxlc19uYW5vLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9yZXBlYXRlZF9wYWNrYWJsZXNfbmFuby5w
cm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhZjg4NTZjZmI0NDc4MDlhNGFh
OTkzMDY3ZTIzZWM0MmVmYmM4Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5v
L3VuaXR0ZXN0X3JlcGVhdGVkX3BhY2thYmxlc19uYW5vLnByb3RvCisrKyAvZGV2L251bGwKQEAg
LTEsOTUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1
dGhvcjogbWF4dHJveUBnb29nbGUuY29tIChNYXggQ2FpKQotCi1wYWNrYWdlIHByb3RvYnVmX3Vu
aXR0ZXN0OwotCi1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUucHJvdG9idWYiOwot
b3B0aW9uIGphdmFfb3V0ZXJfY2xhc3NuYW1lID0gIk5hbm9SZXBlYXRlZFBhY2thYmxlcyI7Ci0K
LWVudW0gRW51bSB7Ci0gIE9QVElPTl9PTkUgPSAxOwotICBPUFRJT05fVFdPID0gMjsKLX0KLQot
Ly8gVHdvIGFsbW9zdCBpZGVudGljYWwgbWVzc2FnZXMgd2l0aCBhbGwgcGFja2FibGUgcmVwZWF0
ZWQgZmllbGQgdHlwZXMuCi0vLyBPbmUgd2l0aCBub25lIG1hcmtlZCBhcyBwYWNrZWQgYW5kIHRo
ZSBvdGhlciBhbGwgcGFja2VkLiBGb3IKLS8vIGNvbXBhdGliaWxpdHksIHRoZXkgc2hvdWxkIGJl
IGFibGUgdG8gcGFyc2UgZWFjaCBvdGhlcidzIHNlcmlhbGl6ZWQKLS8vIGZvcm1zLgotCi1tZXNz
YWdlIE5vblBhY2tlZCB7Ci0KLSAgLy8gQWxsIHBhY2thYmxlIHR5cGVzLCBub25lIG1hcmtlZCBh
cyBwYWNrZWQuCi0KLSAgcmVwZWF0ZWQgICAgaW50MzIgaW50MzJzICAgID0gMTsKLSAgcmVwZWF0
ZWQgICAgaW50NjQgaW50NjRzICAgID0gMjsKLSAgcmVwZWF0ZWQgICB1aW50MzIgdWludDMycyAg
ID0gMzsKLSAgcmVwZWF0ZWQgICB1aW50NjQgdWludDY0cyAgID0gNDsKLSAgcmVwZWF0ZWQgICBz
aW50MzIgc2ludDMycyAgID0gNTsKLSAgcmVwZWF0ZWQgICBzaW50NjQgc2ludDY0cyAgID0gNjsK
LSAgcmVwZWF0ZWQgIGZpeGVkMzIgZml4ZWQzMnMgID0gNzsKLSAgcmVwZWF0ZWQgIGZpeGVkNjQg
Zml4ZWQ2NHMgID0gODsKLSAgcmVwZWF0ZWQgc2ZpeGVkMzIgc2ZpeGVkMzJzID0gOTsKLSAgcmVw
ZWF0ZWQgc2ZpeGVkNjQgc2ZpeGVkNjRzID0gMTA7Ci0gIHJlcGVhdGVkICAgIGZsb2F0IGZsb2F0
cyAgICA9IDExOwotICByZXBlYXRlZCAgIGRvdWJsZSBkb3VibGVzICAgPSAxMjsKLSAgcmVwZWF0
ZWQgICAgIGJvb2wgYm9vbHMgICAgID0gMTM7Ci0gIHJlcGVhdGVkICAgICBFbnVtIGVudW1zICAg
ICA9IDE0OwotCi0gIC8vIE5vaXNlIGZvciB0ZXN0aW5nIG1lcmdlZCBkZXNlcmlhbGl6YXRpb24u
Ci0gIG9wdGlvbmFsIGludDMyIG5vaXNlID0gMTU7Ci0KLX0KLQotbWVzc2FnZSBQYWNrZWQgewot
Ci0gIC8vIEFsbCBwYWNrYWJsZSB0eXBlcywgYWxsIG1hdGNoaW5nIHRoZSBmaWVsZCBudW1iZXJz
IGluIE5vblBhY2tlZCwKLSAgLy8gYWxsIG1hcmtlZCBhcyBwYWNrZWQuCi0KLSAgcmVwZWF0ZWQg
ICAgaW50MzIgaW50MzJzICAgID0gMSAgWyBwYWNrZWQgPSB0cnVlIF07Ci0gIHJlcGVhdGVkICAg
IGludDY0IGludDY0cyAgICA9IDIgIFsgcGFja2VkID0gdHJ1ZSBdOwotICByZXBlYXRlZCAgIHVp
bnQzMiB1aW50MzJzICAgPSAzICBbIHBhY2tlZCA9IHRydWUgXTsKLSAgcmVwZWF0ZWQgICB1aW50
NjQgdWludDY0cyAgID0gNCAgWyBwYWNrZWQgPSB0cnVlIF07Ci0gIHJlcGVhdGVkICAgc2ludDMy
IHNpbnQzMnMgICA9IDUgIFsgcGFja2VkID0gdHJ1ZSBdOwotICByZXBlYXRlZCAgIHNpbnQ2NCBz
aW50NjRzICAgPSA2ICBbIHBhY2tlZCA9IHRydWUgXTsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIgZml4
ZWQzMnMgID0gNyAgWyBwYWNrZWQgPSB0cnVlIF07Ci0gIHJlcGVhdGVkICBmaXhlZDY0IGZpeGVk
NjRzICA9IDggIFsgcGFja2VkID0gdHJ1ZSBdOwotICByZXBlYXRlZCBzZml4ZWQzMiBzZml4ZWQz
MnMgPSA5ICBbIHBhY2tlZCA9IHRydWUgXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkNjQgc2ZpeGVkNjRz
ID0gMTAgWyBwYWNrZWQgPSB0cnVlIF07Ci0gIHJlcGVhdGVkICAgIGZsb2F0IGZsb2F0cyAgICA9
IDExIFsgcGFja2VkID0gdHJ1ZSBdOwotICByZXBlYXRlZCAgIGRvdWJsZSBkb3VibGVzICAgPSAx
MiBbIHBhY2tlZCA9IHRydWUgXTsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgYm9vbHMgICAgID0gMTMg
WyBwYWNrZWQgPSB0cnVlIF07Ci0gIHJlcGVhdGVkICAgICBFbnVtIGVudW1zICAgICA9IDE0IFsg
cGFja2VkID0gdHJ1ZSBdOwotCi0gIC8vIE5vaXNlIGZvciB0ZXN0aW5nIG1lcmdlZCBkZXNlcmlh
bGl6YXRpb24uCi0gIG9wdGlvbmFsIGludDMyIG5vaXNlID0gMTU7Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
amF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3Rf
c2ltcGxlX25hbm8ucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9uYW5vL3VuaXR0ZXN0X3NpbXBsZV9uYW5vLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyNTc4NmNjMjI3Y2JiYTI3MGYyYjc3MTYxNTI4YjA1ZjFiYzgyNTA0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rl
c3QvamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3Rfc2ltcGxlX25hbm8ucHJv
dG8KKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiB3aW5rQGdvb2dsZS5jb20gKFdpbmsgU2F2aWxsZSkK
LS8vCi0KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0OwotCi1vcHRpb24gamF2YV9w
YWNrYWdlID0gImNvbS5nb29nbGUucHJvdG9idWYiOwotLy8gRXhwbGljaXQgb3V0ZXIgY2xhc3Nu
YW1lIHRvIHN1cHByZXNzIGxlZ2FjeSBpbmZvLgotb3B0aW9uIGphdmFfb3V0ZXJfY2xhc3NuYW1l
ID0gIlVuaXR0ZXN0U2ltcGxlTmFubyI7Ci0KLW1lc3NhZ2UgU2ltcGxlTWVzc2FnZU5hbm8gewot
ICBtZXNzYWdlIE5lc3RlZE1lc3NhZ2UgewotICAgIG9wdGlvbmFsIGludDMyIGJiID0gMTsKLSAg
fQotCi0gIGVudW0gTmVzdGVkRW51bSB7Ci0gICAgRk9PID0gMTsKLSAgICBCQVIgPSAyOwotICAg
IEJBWiA9IDM7Ci0gIH0KLQotICBvcHRpb25hbCBpbnQzMiBkID0gMSBbZGVmYXVsdCA9IDEyM107
Ci0gIG9wdGlvbmFsIE5lc3RlZE1lc3NhZ2UgbmVzdGVkX21zZyA9IDI7Ci0gIG9wdGlvbmFsIE5l
c3RlZEVudW0gZGVmYXVsdF9uZXN0ZWRfZW51bSA9IDMgW2RlZmF1bHQgPSBCQVpdOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91
bml0dGVzdF9zaW5nbGVfbmFuby5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamF2YW5hbm8vc3JjL3Rlc3QvamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL25hbm8vdW5pdHRlc3Rfc2luZ2xlX25hbm8ucHJvdG8KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdkZTMwYzg3N2QyZDYwYmYxYzc1OGM5NjExZGQ5MmYyNTcyODU3
YjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFu
by9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvbmFuby91bml0dGVzdF9zaW5nbGVf
bmFuby5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IG1heHRyb3lAZ29vZ2xlLmNvbSAoTWF4
IENhaSkKLQotcGFja2FnZSBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQ7Ci0KLW9wdGlvbiBqYXZh
X3BhY2thZ2UgPSAiY29tLmdvb2dsZS5wcm90b2J1ZiI7Ci0KLW1lc3NhZ2UgU2luZ2xlTWVzc2Fn
ZU5hbm8gewotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qYXZhbmFuby9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvbmFuby91bml0dGVzdF9zdHJpbmd1dGY4X25hbm8ucHJvdG8gYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3Ny
Yy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9uYW5vL3VuaXR0ZXN0X3N0cmluZ3V0Zjhf
bmFuby5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkNjc3Y2ZkNmYwMDhm
YTM0MGU1NGE5NGE0NmFmYWVjYjc4YmM3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2phdmFuYW5vL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9uYW5vL3VuaXR0ZXN0X3N0cmluZ3V0ZjhfbmFuby5wcm90bworKysgL2Rldi9udWxsCkBAIC0x
LDQzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRo
b3I6IHdpbmtAZ29vZ2xlLmNvbSAoV2luayBTYXZpbGxlKQotLy8KLQotcGFja2FnZSBwcm90b2J1
Zl91bml0dGVzdF9pbXBvcnQ7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5w
cm90b2J1ZiI7Ci0vLyBFeHBsaWNpdCBvdXRlciBjbGFzc25hbWUgdG8gc3VwcHJlc3MgbGVnYWN5
IGluZm8uCi1vcHRpb24gamF2YV9vdXRlcl9jbGFzc25hbWUgPSAiVW5pdHRlc3RTdHJpbmd1dGY4
TmFubyI7Ci0KLW1lc3NhZ2UgU3RyaW5nVXRmOCB7Ci0gIG9wdGlvbmFsIHN0cmluZyBpZCA9IDE7
Ci0gIHJlcGVhdGVkIHN0cmluZyBycyA9IDI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2plbmtpbnMvUkVBRE1F
Lm1kIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qZW5raW5zL1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlm
NjY0ZjI5OWI4ZWY1OWE2NjQ0MjFlNDBiNWY0MzFjYzI5ZTc1OC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2plbmtpbnMvUkVBRE1FLm1kCisrKyAvZGV2L251
bGwKQEAgLTEsNiArMCwwIEBACi0KLUplbmtpbnMgSW5mcmFzdHJ1Y3R1cmUKLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotVGhlIHNjcmlwdHMgaW4gdGhpcyBkaXJlY3Rvcnkgc2VydmUgYXMgcGx1
bWJpbmcgZm9yIHJ1bm5pbmcgdGhlIHByb3RvYnVmCi10ZXN0cyB1bmRlciBKZW5raW5zLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qZW5raW5zL2J1aWxkX2FuZF9ydW5fZG9ja2VyLnNoIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qZW5raW5zL2J1aWxkX2Fu
ZF9ydW5fZG9ja2VyLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhYmM2ZjA1NWM0
NjNkODY2MTUyMmYyM2FhY2MwODQ3NWYzMjc2ZmYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvamVua2lucy9idWlsZF9hbmRfcnVuX2RvY2tlci5zaAorKysg
L2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jCi0jIEJ1aWxkcyBkb2Nr
ZXIgaW1hZ2UgYW5kIHJ1bnMgYSBjb21tYW5kIHVuZGVyIGl0LgotIyBUaGlzIGlzIGEgZ2VuZXJp
YyBzY3JpcHQgdGhhdCBpcyBjb25maWd1cmVkIHdpdGggdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6
Ci0jCi0jIERPQ0tFUkZJTEVfRElSIC0gRGlyZWN0b3J5IGluIHdoaWNoIERvY2tlcmZpbGUgZmls
ZSBpcyBsb2NhdGVkLgotIyBET0NLRVJfUlVOX1NDUklQVCAtIFNjcmlwdCB0byBydW4gdW5kZXIg
ZG9ja2VyIChyZWxhdGl2ZSB0byBwcm90b2J1ZiByZXBvIHJvb3QpCi0jIE9VVFBVVF9ESVIgLSBE
aXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNvcGllZCBmcm9tIGluc2lkZSBkb2NrZXIgYWZ0ZXIgZmlu
aXNoaW5nLgotIyAkQCAtIEV4dHJhIGFyZ3MgdG8gcGFzcyB0byBkb2NrZXIgcnVuCi0KLQotc2V0
IC1leAotCi1jZCAkKGRpcm5hbWUgJDApLy4uCi1naXRfcm9vdD0kKHB3ZCkKLWNkIC0KLQotIyBV
c2UgaW1hZ2UgbmFtZSBiYXNlZCBvbiBEb2NrZXJmaWxlIGxvY2F0aW9uIGNoZWNrc3VtCi1ET0NL
RVJfSU1BR0VfTkFNRT0kKGJhc2VuYW1lICRET0NLRVJGSUxFX0RJUilfJChzaGExc3VtICRET0NL
RVJGSUxFX0RJUi9Eb2NrZXJmaWxlIHwgY3V0IC1mMSAtZFwgKQotCi0jIE1ha2Ugc3VyZSBkb2Nr
ZXIgaW1hZ2UgaGFzIGJlZW4gYnVpbHQuIFNob3VsZCBiZSBpbnN0YW50YW5lb3VzIGlmIHNvLgot
ZG9ja2VyIGJ1aWxkIC10ICRET0NLRVJfSU1BR0VfTkFNRSAkRE9DS0VSRklMRV9ESVIKLQotIyBF
bnN1cmUgZXhpc3RlbmNlIG9mIGNjYWNoZSBkaXJlY3RvcnkKLUNDQUNIRV9ESVI9L3RtcC9wcm90
b2J1Zi1jY2FjaGUKLW1rZGlyIC1wICRDQ0FDSEVfRElSCi0KLSMgQ2hvb3NlIHJhbmRvbSBuYW1l
IGZvciBkb2NrZXIgY29udGFpbmVyCi1DT05UQUlORVJfTkFNRT0iYnVpbGRfYW5kX3J1bl9kb2Nr
ZXJfJCh1dWlkZ2VuKSIKLQotIyBSdW4gY29tbWFuZCBpbnNpZGUgZG9ja2VyCi1kb2NrZXIgcnVu
IFwKLSAgIiRAIiBcCi0gIC1lIENDQUNIRV9ESVI9JENDQUNIRV9ESVIgXAotICAtZSBFWFRFUk5B
TF9HSVRfUk9PVD0iL3Zhci9sb2NhbC9qZW5raW5zL3Byb3RvYnVmIiBcCi0gIC1lIFRISVNfSVNf
UkVBTExZX05FRURFRD0nc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kb2NrZXIvZG9ja2VyL2lzc3Vl
cy8xNDIwMyBmb3Igd2h5IGRvY2tlciBpcyBhd2Z1bCcgXAotICAtdiAiJGdpdF9yb290Oi92YXIv
bG9jYWwvamVua2lucy9wcm90b2J1ZjpybyIgXAotICAtdiAkQ0NBQ0hFX0RJUjokQ0NBQ0hFX0RJ
UiBcCi0gIC13IC92YXIvbG9jYWwvZ2l0L3Byb3RvYnVmIFwKLSAgLS1uYW1lPSRDT05UQUlORVJf
TkFNRSBcCi0gICRET0NLRVJfSU1BR0VfTkFNRSBcCi0gIGJhc2ggLWwgIi92YXIvbG9jYWwvamVu
a2lucy9wcm90b2J1Zi8kRE9DS0VSX1JVTl9TQ1JJUFQiIHx8IEZBSUxFRD0idHJ1ZSIKLQotIyBD
b3B5IG91dHB1dCBhcnRpZmFjdHMKLWlmIFsgIiRPVVRQVVRfRElSIiAhPSAiIiBdCi10aGVuCi0g
IGRvY2tlciBjcCAiJENPTlRBSU5FUl9OQU1FOi92YXIvbG9jYWwvZ2l0L3Byb3RvYnVmLyRPVVRQ
VVRfRElSIiAiJGdpdF9yb290IiB8fCBGQUlMRUQ9InRydWUiCi1maQotCi0jIHJlbW92ZSB0aGUg
Y29udGFpbmVyLCBwb3NzaWJseSBraWxsaW5nIGl0IGZpcnN0Ci1kb2NrZXIgcm0gLWYgJENPTlRB
SU5FUl9OQU1FIHx8IHRydWUKLQotaWYgWyAiJEZBSUxFRCIgIT0gIiIgXQotdGhlbgotICBleGl0
IDEKLWZpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2plbmtpbnMvYnVpbGRjbWRzL1JFQURNRS5tZCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamVua2lucy9i
dWlsZGNtZHMvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTQ4ZjJk
NWM5NmJkNGFmZjI2MjdiOThjNmZkMGVhYjNkOTg3OGY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamVua2lucy9idWlsZGNtZHMvUkVBRE1FLm1kCisrKyAv
ZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLUplbmtpbnMgQnVpbGQgQ29tbWFuZHMKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIHNjcmlwdHMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIGRl
c2lnbmVkIHRvIGJlIHRvcC1sZXZlbCBlbnRyeSBwb2ludHMgZm9yCi1KZW5raW5zIHByb2plY3Rz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qZW5raW5zL2J1aWxkY21kcy9wdWxsX3JlcXVlc3Quc2ggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2plbmtpbnMv
YnVpbGRjbWRzL3B1bGxfcmVxdWVzdC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDFmZGE3OTg1ODZkYWZiNzgwNjhkYWEwNjczOWZmZjM1MGFkYmFlZS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2plbmtpbnMvYnVpbGRjbWRzL3B1bGxfcmVx
dWVzdC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jCi0j
IFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzY3JpcHQgd2UgZ2l2ZSB0byBKZW5raW5zIGFzIHRoZSBl
bnRyeSBwb2ludCBmb3IKLSMgcnVubmluZyB0aGUgInB1bGwgcmVxdWVzdCIgcHJvamVjdDoKLSMK
LSMgICBodHRwczovL2dycGMtdGVzdGluZy5hcHBzcG90LmNvbS92aWV3L1Byb3RvY29sJTIwQnVm
ZmVycy9qb2IvcHJvdG9idWZfcHVsbF9yZXF1ZXN0LwotIwotIyBUaGlzIHNjcmlwdCBzZWxlY3Rz
IGEgc3BlY2lmaWMgRG9ja2VyZmlsZSAoZm9yIGJ1aWxkaW5nIGEgRG9ja2VyIGltYWdlKSBhbmQK
LSMgYSBzY3JpcHQgdG8gcnVuIGluc2lkZSB0aGF0IGltYWdlLiAgVGhlbiB3ZSBkZWxlZ2F0ZSB0
byB0aGUgZ2VuZXJhbAotIyBidWlsZF9hbmRfcnVuX2RvY2tlci5zaCBzY3JpcHQuCi0KLWV4cG9y
dCBET0NLRVJGSUxFX0RJUj1qZW5raW5zL2RvY2tlcgotZXhwb3J0IERPQ0tFUl9SVU5fU0NSSVBU
PWplbmtpbnMvcHVsbF9yZXF1ZXN0X2luX2RvY2tlci5zaAotZXhwb3J0IE9VVFBVVF9ESVI9dGVz
dG91dHB1dAotLi9qZW5raW5zL2J1aWxkX2FuZF9ydW5fZG9ja2VyLnNoCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pl
bmtpbnMvZG9ja2VyL0RvY2tlcmZpbGUgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2plbmtpbnMvZG9ja2VyL0RvY2tlcmZpbGUKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NjdhZWZmNTFmNjRjMDgxNGI4NzdjMDY4NTMwOGQ5
OTYxOWRiN2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
ZW5raW5zL2RvY2tlci9Eb2NrZXJmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAK
LSMgVGhpcyBEb2NrZXJmaWxlIHNwZWNpZmllcyB0aGUgcmVjaXBlIGZvciBjcmVhdGluZyBhbiBp
bWFnZSBmb3IgdGhlIHRlc3RzCi0jIHRvIHJ1biBpbi4KLSMKLSMgV2UgaW5zdGFsbCBhcyBtYW55
IHRlc3QgZGVwZW5kZW5jaWVzIGhlcmUgYXMgd2UgY2FuLCBiZWNhdXNlIHRoZXNlIHNldHVwCi0j
IHN0ZXBzIGNhbiBiZSBjYWNoZWQuICBUaGV5IGRvICpub3QqIHJ1biBldmVyeSB0aW1lIHdlIHJ1
biB0aGUgYnVpbGQuCi0jIFRoZSBEb2NrZXIgaW1hZ2UgaXMgb25seSByZWJ1aWx0IHdoZW4gdGhl
IERvY2tlcmZpbGUgKGllLiB0aGlzIGZpbGUpCi0jIGNoYW5nZXMuCi0KLSMgQmFzZSBEb2NrZXJm
aWxlIGZvciBnUlBDIGRldiBpbWFnZXMKLUZST00gZGViaWFuOmxhdGVzdAotCi0jIEFwdCBzb3Vy
Y2UgZm9yIG9sZCBQeXRob24gdmVyc2lvbnMuCi1SVU4gZWNobyAnZGViIGh0dHA6Ly9wcGEubGF1
bmNocGFkLm5ldC9ma3J1bGwvZGVhZHNuYWtlcy91YnVudHUgdHJ1c3R5IG1haW4nID4gL2V0Yy9h
cHQvc291cmNlcy5saXN0LmQvZGVhZHNuYWtlcy5saXN0ICYmIFwKLSAgYXB0LWtleSBhZHYgLS1r
ZXlzZXJ2ZXIga2V5c2VydmVyLnVidW50dS5jb20gLS1yZWN2LWtleXMgREI4MjY2NkMKLQotIyBB
cHQgc291cmNlIGZvciBPcmFjbGUgSmF2YS4KLXJ1biBlY2hvICdkZWIgaHR0cDovL3BwYS5sYXVu
Y2hwYWQubmV0L3dlYnVwZDh0ZWFtL2phdmEvdWJ1bnR1IHRydXN0eSBtYWluJyA+IC9ldGMvYXB0
L3NvdXJjZXMubGlzdC5kL3dlYnVwZDh0ZWFtLWphdmEtdHJ1c3R5Lmxpc3QgJiYgXAotICBhcHQt
a2V5IGFkdiAtLWtleXNlcnZlciBrZXlzZXJ2ZXIudWJ1bnR1LmNvbSAtLXJlY3Yta2V5cyBFRUEx
NDg4NiAmJiBcCi0gIGVjaG8gIm9yYWNsZS1qYXZhNy1pbnN0YWxsZXIgc2hhcmVkL2FjY2VwdGVk
LW9yYWNsZS1saWNlbnNlLXYxLTEgc2VsZWN0IHRydWUiIHwgZGViY29uZi1zZXQtc2VsZWN0aW9u
cwotCi0jIEFwdCBzb3VyY2UgZm9yIE1vbm8KLXJ1biBlY2hvICJkZWIgaHR0cDovL2Rvd25sb2Fk
Lm1vbm8tcHJvamVjdC5jb20vcmVwby9kZWJpYW4gd2hlZXp5IG1haW4iIHwgdGVlIC9ldGMvYXB0
L3NvdXJjZXMubGlzdC5kL21vbm8teGFtYXJpbi5saXN0ICYmIFwKLSAgZWNobyAiZGViIGh0dHA6
Ly9kb3dubG9hZC5tb25vLXByb2plY3QuY29tL3JlcG8vZGViaWFuIHdoZWV6eS1saWJqcGVnNjIt
Y29tcGF0IG1haW4iIHwgdGVlIC1hIC9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL21vbm8teGFtYXJp
bi5saXN0ICYmIFwKLSAgYXB0LWtleSBhZHYgLS1rZXlzZXJ2ZXIga2V5c2VydmVyLnVidW50dS5j
b20gLS1yZWN2LWtleXMgM0ZBN0UwMzI4MDgxQkZGNkExNERBMjlBQTZBMTlCMzhEM0Q4MzFFRgot
Ci0jIEluc3RhbGwgZGVwZW5kZW5jaWVzLiAgV2Ugc3RhcnQgd2l0aCB0aGUgYmFzaWMgb25lcyBy
ZXF1aXJlIHRvIGJ1aWxkIHByb3RvYwotIyBhbmQgdGhlIEMrKyBidWlsZAotUlVOIGFwdC1nZXQg
dXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBcCi0gIGF1dG9jb25mIFwKLSAgYXV0b3Rvb2xz
LWRldiBcCi0gIGJ1aWxkLWVzc2VudGlhbCBcCi0gIGJ6aXAyIFwKLSAgY2NhY2hlIFwKLSAgY3Vy
bCBcCi0gIGdjYyBcCi0gIGdpdCBcCi0gIGxpYmM2IFwKLSAgbGliYzYtZGJnIFwKLSAgbGliYzYt
ZGV2IFwKLSAgbGliZ3Rlc3QtZGV2IFwKLSAgbGlidG9vbCBcCi0gIG1ha2UgXAotICBwYXJhbGxl
bCBcCi0gIHRpbWUgXAotICB3Z2V0IFwKLSAgIyAtLSBGb3IgY3NoYXJwIC0tCi0gIG1vbm8tZGV2
ZWwgXAotICByZWZlcmVuY2Vhc3NlbWJsaWVzLXBjbCBcCi0gIG51bml0IFwKLSAgIyAtLSBGb3Ig
YWxsIEphdmEgYnVpbGRzIC0tIFwKLSAgbWF2ZW4gXAotICAjIC0tIEZvciBqYXZhX2pkazYgLS0g
XAotICAjICAgb29wcyEgbm90IGluIGplc3NpZS4gdG9vIG9sZD8gb3Blbmpkay02LWpkayBcCi0g
ICMgLS0gRm9yIGphdmFfamRrNyAtLSBcCi0gIG9wZW5qZGstNy1qZGsgXAotICAjIC0tIEZvciBq
YXZhX29yYWNsZTcgLS0gXAotICBvcmFjbGUtamF2YTctaW5zdGFsbGVyIFwKLSAgIyAtLSBGb3Ig
cHl0aG9uIC8gcHl0aG9uX2NwcCAtLSBcCi0gIHB5dGhvbi1zZXR1cHRvb2xzIFwKLSAgcHl0aG9u
LXBpcCBcCi0gIHB5dGhvbi1kZXYgXAotICBweXRob24yLjYtZGV2IFwKLSAgcHl0aG9uMy4zLWRl
diBcCi0gIHB5dGhvbjMuNC1kZXYgXAotICAjIC0tIEZvciBSdWJ5IC0tCi0gIHJ1YnkgXAotICAm
JiBhcHQtZ2V0IGNsZWFuCi0KLSMjIyMjIyMjIyMjIyMjIyMjIwotIyBDIyBkZXBlbmRlbmNpZXMK
LQotUlVOIHdnZXQgd3d3Lm51Z2V0Lm9yZy9OdUdldC5leGUgLU8gL3Vzci9sb2NhbC9iaW4vbnVn
ZXQuZXhlCi0KLSMjIyMjIyMjIyMjIyMjIyMjIwotIyBQeXRob24gZGVwZW5kZW5jaWVzCi0KLSMg
VGhlc2UgcGFja2FnZXMgZXhpc3QgaW4gYXB0LWdldCwgYnV0IHRoZWlyIHZlcnNpb25zIGFyZSB0
b28gb2xkLCBzbyB3ZSBoYXZlCi0jIHRvIGdldCB1cGRhdGVzIGZyb20gcGlwLgotCi1SVU4gcGlw
IGluc3RhbGwgcGlwIC0tdXBncmFkZQotUlVOIHBpcCBpbnN0YWxsIHZpcnR1YWxlbnYgdG94IHlh
dHRhZwotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIwotIyBSdWJ5IGRlcGVuZGVuY2llcwotCi0jIElu
c3RhbGwgcnZtCi1SVU4gZ3BnIC0ta2V5c2VydmVyIGhrcDovL2tleXMuZ251cGcubmV0IC0tcmVj
di1rZXlzIDQwOUI2QjE3OTZDMjc1NDYyQTE3MDMxMTM4MDRCQjgyRDM5REMwRTMKLVJVTiBcY3Vy
bCAtc1NMIGh0dHBzOi8vZ2V0LnJ2bS5pbyB8IGJhc2ggLXMgc3RhYmxlCi0KLSMgSW5zdGFsbCBS
dWJ5IDIuMQotUlVOIC9iaW4vYmFzaCAtbCAtYyAicnZtIGluc3RhbGwgcnVieS0yLjEiCi1SVU4g
L2Jpbi9iYXNoIC1sIC1jICJydm0gdXNlIC0tZGVmYXVsdCBydWJ5LTIuMSIKLVJVTiAvYmluL2Jh
c2ggLWwgLWMgImVjaG8gJ2dlbTogLS1uby1yaSAtLW5vLXJkb2MnID4gfi8uZ2VtcmMiCi1SVU4g
L2Jpbi9iYXNoIC1sIC1jICJlY2hvICdleHBvcnQgUEFUSD0vdXNyL2xvY2FsL3J2bS9iaW46JFBB
VEgnID4+IH4vLmJhc2hyYyIKLVJVTiAvYmluL2Jhc2ggLWwgLWMgImVjaG8gJ3J2bSAtLWRlZmF1
bHQgdXNlIHJ1YnktMi4xJyA+PiB+Ly5iYXNocmMiCi1SVU4gL2Jpbi9iYXNoIC1sIC1jICJnZW0g
aW5zdGFsbCBidW5kbGVyIC0tbm8tcmkgLS1uby1yZG9jIgotCi0jIyMjIyMjIyMjIyMjIyMjIyMK
LSMgSmF2YSBkZXBlbmRlbmNpZXMKLQotIyBUaGlzIHN0ZXAgcmVxdWlyZXMgY29tcGlsaW5nIHBy
b3RvYy4gOigKLQotRU5WIE1BVkVOX1JFUE8gL3Zhci9tYXZlbl9sb2NhbF9yZXBvc2l0b3J5Ci1F
TlYgTVZOIG12biAtLWJhdGNoLW1vZGUKLQotUlVOIGNkIC90bXAgJiYgXAotICBnaXQgY2xvbmUg
aHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi5naXQgJiYgXAotICBjZCBwcm90b2J1
ZiAmJiBcCi0gIC4vYXV0b2dlbi5zaCAmJiBcCi0gIC4vY29uZmlndXJlICYmIFwKLSAgbWFrZSAt
ajYgJiYgXAotICBjZCBqYXZhICYmIFwKLSAgJE1WTiBpbnN0YWxsIGRlcGVuZGVuY3k6Z28tb2Zm
bGluZSAtRG1hdmVuLnJlcG8ubG9jYWw9JE1BVkVOX1JFUE8gLVAgbGl0ZSAmJiBcCi0gICRNVk4g
aW5zdGFsbCBkZXBlbmRlbmN5OmdvLW9mZmxpbmUgLURtYXZlbi5yZXBvLmxvY2FsPSRNQVZFTl9S
RVBPICYmIFwKLSAgY2QgLi4vamF2YW5hbm8gJiYgXAotICAkTVZOIGluc3RhbGwgZGVwZW5kZW5j
eTpnby1vZmZsaW5lIC1EbWF2ZW4ucmVwby5sb2NhbD0kTUFWRU5fUkVQTwotCi0jIyMjIyMjIyMj
IyMjIyMjIyMKLSMgUHJlcGFyZSBjY2FjaGUKLQotUlVOIGxuIC1zIC91c3IvYmluL2NjYWNoZSAv
dXNyL2xvY2FsL2Jpbi9nY2MKLVJVTiBsbiAtcyAvdXNyL2Jpbi9jY2FjaGUgL3Vzci9sb2NhbC9i
aW4vZysrCi1SVU4gbG4gLXMgL3Vzci9iaW4vY2NhY2hlIC91c3IvbG9jYWwvYmluL2NjCi1SVU4g
bG4gLXMgL3Vzci9iaW4vY2NhY2hlIC91c3IvbG9jYWwvYmluL2MrKwotUlVOIGxuIC1zIC91c3Iv
YmluL2NjYWNoZSAvdXNyL2xvY2FsL2Jpbi9jbGFuZwotUlVOIGxuIC1zIC91c3IvYmluL2NjYWNo
ZSAvdXNyL2xvY2FsL2Jpbi9jbGFuZysrCi0KLSMgRGVmaW5lIHRoZSBkZWZhdWx0IGNvbW1hbmQu
Ci1DTUQgWyJiYXNoIl0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvamVua2lucy9tYWtlX3Rlc3Rfb3V0cHV0LnB5IGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
ZW5raW5zL21ha2VfdGVzdF9vdXRwdXQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGIxZjJlMmMwYmI2N2ZkOWIzOWM0ZTk5MzM0MmJkMDcwOThiYjUyZDcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qZW5raW5zL21ha2VfdGVzdF9vdXRwdXQu
cHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0iIiJHYXRoZXJzIG91dHB1dCBmcm9t
IHRlc3QgcnVucyBhbmQgY3JlYXRlIGFuIFhNTCBmaWxlIGluIEpVbml0IGZvcm1hdC4KLQotVGhl
IG91dHB1dCBmaWxlcyBmcm9tIHRoZSBpbmRpdmlkdWFsIHRlc3RzIGhhdmUgYmVlbiB3cml0dGVu
IGluIGEgZGlyZWN0b3J5Ci1zdHJ1Y3R1cmUgbGlrZToKLQotICAkRElSL2pvYmxvZyAgKG91dHB1
dCBmcm9tICJwYXJhbGxlbCAtLWpvYmxvZyBqb2Jsb2ciKQotICAkRElSL2xvZ3MvMS9jcHAvc3Rk
b3V0Ci0gICRESVIvbG9ncy8xL2NwcC9zdGRlcnIKLSAgJERJUi9sb2dzLzEvY3NoYXJwL3N0ZG91
dAotICAkRElSL2xvZ3MvMS9jc2hhcnAvc3RkZXJyCi0gICRESVIvbG9ncy8xL2phdmFfamRrNy9z
dGRvdXQKLSAgJERJUi9sb2dzLzEvamF2YV9qZGs3L3N0ZGVycgotICBldGMuCi0KLVRoaXMgc2Ny
aXB0IGJ1bmRsZXMgdGhlbSBpbnRvIGEgc2luZ2xlIG91dHB1dCBYTUwgZmlsZSBzbyBKZW5raW5z
IGNhbiBzaG93Ci1kZXRhaWxlZCB0ZXN0IHJlc3VsdHMuICBJdCBydW5zIGFzIHRoZSBsYXN0IHN0
ZXAgYmVmb3JlIHRoZSBKZW5raW5zIGJ1aWxkCi1maW5pc2hlcy4KLSIiIgotCi1pbXBvcnQgb3M7
Ci1pbXBvcnQgc3lzOwotZnJvbSB5YXR0YWcgaW1wb3J0IERvYwotZnJvbSBjb2xsZWN0aW9ucyBp
bXBvcnQgZGVmYXVsdGRpY3QKLQotZGVmIHJlYWR0ZXN0cyhiYXNlZGlyKToKLSAgdGVzdHMgPSBk
ZWZhdWx0ZGljdChkaWN0KQotCi0gICMgU2FtcGxlIGlucHV0IChub3RlOiBzZXBhcmF0b3JzIGFy
ZSB0YWJzKS4KLSAgIwotICAjIFNlcQlIb3N0CVN0YXJ0dGltZQlSdW50aW1lCVNlbmQJUmVjZWl2
ZQlFeGl0dmFsCVNpZ25hbAlDb21tYW5kCi0gICMgMQk6CTE0NTYyNjM4MzguMzEzCTAuMDA1CTAJ
MAkwCTAJZWNobyBBCi0gIHdpdGggb3BlbihiYXNlZGlyICsgIi9qb2Jsb2ciKSBhcyBqb2JzOgot
ICAgIGZpcnN0bGluZSA9IG5leHQoam9icykKLSAgICBmb3IgbGluZSBpbiBqb2JzOgotICAgICAg
dmFsdWVzID0gbGluZS5zcGxpdCgiXHQiKQotCi0gICAgICBuYW1lID0gdmFsdWVzWzhdLnNwbGl0
KClbLTFdCi0gICAgICB0ZXN0ID0gdGVzdHNbbmFtZV0KLSAgICAgIHRlc3RbIm5hbWUiXSA9IG5h
bWUKLSAgICAgIHRlc3RbInRpbWUiXSA9IHZhbHVlc1szXQotCi0gICAgICBleGl0dmFsID0gdmFs
dWVzWzZdCi0gICAgICBpZiBpbnQoZXhpdHZhbCk6Ci0gICAgICAgICMgV2UgZG9uJ3QgaGF2ZSBh
IG1vcmUgc3BlY2lmaWMgbWVzc2FnZS4gIFVzZXIgc2hvdWxkIGxvb2sgYXQgc3RkZXJyLgotICAg
ICAgICB0ZXN0WyJmYWlsdXJlIl0gPSAiVEVTVCBGQUlMVVJFIgotICAgICAgZWxzZToKLSAgICAg
ICAgdGVzdFsiZmFpbHVyZSJdID0gRmFsc2UKLQotICBmb3IgdGVzdG5hbWUgaW4gb3MubGlzdGRp
cihiYXNlZGlyICsgIi9sb2dzLzEiKToKLSAgICB0ZXN0ID0gdGVzdHNbdGVzdG5hbWVdCi0KLSAg
ICB3aXRoIG9wZW4oYmFzZWRpciArICIvbG9ncy8xLyIgKyB0ZXN0bmFtZSArICIvc3Rkb3V0Iikg
YXMgZjoKLSAgICAgIHRlc3RbInN0ZG91dCJdID0gZi5yZWFkKCkKLQotICAgIHdpdGggb3Blbihi
YXNlZGlyICsgIi9sb2dzLzEvIiArIHRlc3RuYW1lICsgIi9zdGRlcnIiKSBhcyBmOgotICAgICAg
dGVzdFsic3RkZXJyIl0gPSBmLnJlYWQoKQotCi0gICMgVGhlIGNwcCB0ZXN0IGlzIHNwZWNpYWwg
c2luY2UgaXQgZG9lc24ndCBydW4gdW5kZXIgcGFyYWxsZWwgc28gZG9lc24ndCBzaG93Ci0gICMg
dXAgaW4gdGhlIGpvYiBsb2cuCi0gIHRlc3RzWyJjcHAiXVsibmFtZSJdID0gImNwcCIKLQotICB3
aXRoIG9wZW4oYmFzZWRpciArICcvbG9ncy8xL2NwcC9idWlsZF90aW1lJywgJ3InKSBhcyBmOgot
ICAgIHRlc3RzWyJjcHAiXVsidGltZSJdID0gZi5yZWFkKCkuc3RyaXAoKQotICB0ZXN0c1siY3Bw
Il1bImZhaWx1cmUiXSA9IEZhbHNlCi0KLSAgcmV0ID0gdGVzdHMudmFsdWVzKCkKLSAgcmV0LnNv
cnQoa2V5PWxhbWJkYSB4OiB4WyJuYW1lIl0pCi0KLSAgcmV0dXJuIHJldAotCi1kZWYgZ2VueG1s
KHRlc3RzKToKLSAgZG9jLCB0YWcsIHRleHQgPSBEb2MoKS50YWd0ZXh0KCkKLQotICB3aXRoIHRh
ZygidGVzdHN1aXRlcyIpOgotICAgIHdpdGggdGFnKCJ0ZXN0c3VpdGUiLCBuYW1lPSJQcm90b2J1
ZiBUZXN0cyIpOgotICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgIHdpdGggdGFnKCJ0
ZXN0Y2FzZSIsIG5hbWU9dGVzdFsibmFtZSJdLCBjbGFzc25hbWU9dGVzdFsibmFtZSJdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lPXRlc3RbInRpbWUiXSk6Ci0gICAgICAgICAg
d2l0aCB0YWcoInN5c3RlbS1vdXQiKToKLSAgICAgICAgICAgIHRleHQodGVzdFsic3Rkb3V0Il0p
Ci0gICAgICAgICAgd2l0aCB0YWcoInN5c3RlbS1lcnIiKToKLSAgICAgICAgICAgIHRleHQodGVz
dFsic3RkZXJyIl0pCi0gICAgICAgICAgaWYgdGVzdFsiZmFpbHVyZSJdOgotICAgICAgICAgICAg
d2l0aCB0YWcoImZhaWx1cmUiKToKLSAgICAgICAgICAgICAgdGV4dCh0ZXN0WyJmYWlsdXJlIl0p
Ci0KLSAgcmV0dXJuIGRvYy5nZXR2YWx1ZSgpCi0KLXN5cy5zdGRlcnIud3JpdGUoIm1ha2VfdGVz
dF9vdXRwdXQucHk6IHdyaXRpbmcgWE1MIGZyb20gZGlyZWN0b3J5OiAiICsKLSAgICAgICAgICAg
ICAgICAgc3lzLmFyZ3ZbMV0gKyAiXG4iKTsKLXByaW50IGdlbnhtbChyZWFkdGVzdHMoc3lzLmFy
Z3ZbMV0pKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qZW5raW5zL3B1bGxfcmVxdWVzdF9pbl9kb2NrZXIuc2ggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pl
bmtpbnMvcHVsbF9yZXF1ZXN0X2luX2RvY2tlci5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggODg3Zjk3YzU5YmEzYWU4ZjAxOTdiODIyNmUyMmEyNTM1ZmM0YTlkYy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2plbmtpbnMvcHVsbF9yZXF1ZXN0
X2luX2RvY2tlci5zaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLSMhL2Jpbi9iYXNo
Ci0jCi0jIFRoaXMgaXMgdGhlIHNjcmlwdCB0aGF0IHJ1bnMgaW5zaWRlIERvY2tlciwgb25jZSB0
aGUgaW1hZ2UgaGFzIGJlZW4gYnVpbHQsCi0jIHRvIGV4ZWN1dGUgYWxsIHRlc3RzIGZvciB0aGUg
InB1bGwgcmVxdWVzdCIgcHJvamVjdC4KLQotV09SS1NQQUNFX0JBU0U9YHB3ZGAKLU1ZX0RJUj0i
JChkaXJuYW1lICIkMCIpIgotVEVTVF9TQ1JJUFQ9JE1ZX0RJUi8uLi90ZXN0cy5zaAotQlVJTERf
RElSPS90bXAvcHJvdG9idWYKLQotc2V0IC1lICAjIGV4aXQgaW1tZWRpYXRlbHkgb24gZXJyb3IK
LXNldCAteCAgIyBkaXNwbGF5IGFsbCBjb21tYW5kcwotCi0jIFRoZSBwcm90b2J1ZiByZXBvc2l0
b3J5IGlzIG1vdW50ZWQgaW50byBvdXIgRG9ja2VyIGltYWdlLCBidXQgcmVhZC1vbmx5LgotIyBX
ZSBjbG9uZSBpbnRvIGEgZGlyZWN0b3J5IGluc2lkZSBEb2NrZXIgKHRoaXMgaXMgZmFzdGVyIHRo
YW4gY3ApLgotcm0gLXJmICRCVUlMRF9ESVIKLW1rZGlyIC1wICRCVUlMRF9ESVIKLWNkICRCVUlM
RF9ESVIKLWdpdCBjbG9uZSAvdmFyL2xvY2FsL2plbmtpbnMvcHJvdG9idWYKLWNkIHByb3RvYnVm
Ci0KLSMgU2V0IHVwIHRoZSBkaXJlY3Rvcnkgd2hlcmUgb3VyIHRlc3Qgb3V0cHV0IGlzIGdvaW5n
IHRvIGdvLgotT1VUUFVUX0RJUj1gbWt0ZW1wIC1kYAotTE9HX09VVFBVVF9ESVI9JE9VVFBVVF9E
SVIvbG9ncwotbWtkaXIgLXAgJExPR19PVVRQVVRfRElSLzEvY3BwCi0KLSMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCi0jIGNwcCBidWlsZCBuZWVkcyB0byBydW4gZmlyc3QsIG5vbi1wYXJhbGxlbGl6
ZWQsIHNvIHRoYXQgcHJvdG9jIGlzIGF2YWlsYWJsZQotIyBmb3Igb3RoZXIgYnVpbGRzLgotCi0j
IE91dHB1dCBmaWxlbmFtZXMgdG8gZm9sbG93IHRoZSBvdmVyYWxsIHNjaGVtZSB1c2VkIGJ5IHBh
cmFsbGVsLCBpZToKLSMgICRESVIvbG9ncy8xL2NwcC9zdGRvdXQKLSMgICRESVIvbG9ncy8xL2Nw
cC9zdGRlcnIKLSMgICRESVIvbG9ncy8xL2NzaGFycC9zdGRvdXQKLSMgICRESVIvbG9ncy8xL2Nz
aGFycC9zdGRlcnIKLSMgICRESVIvbG9ncy8xL2phdmFfamRrNy9zdGRvdXQKLSMgICRESVIvbG9n
cy8xL2phdmFfamRrNy9zdGRlcnIKLUNQUF9TVERPVVQ9JExPR19PVVRQVVRfRElSLzEvY3BwL3N0
ZG91dAotQ1BQX1NUREVSUj0kTE9HX09VVFBVVF9ESVIvMS9jcHAvc3RkZXJyCi0KLSMgVGltZSB0
aGUgQysrIGJ1aWxkLCBzbyB3ZSBjYW4gcHV0IHRoaXMgaW5mbyBpbiB0aGUgdGVzdCBvdXRwdXQu
Ci0jIEl0J3MgaW1wb3J0YW50IHRoYXQgd2UgZ2V0IC91c3IvYmluL3RpbWUgKHdoaWNoIHN1cHBv
cnRzIC1mIGFuZCAtbykgYW5kIG5vdAotIyB0aGUgYmFzaCBidWlsdGluICJ0aW1lIiB3aGljaCBk
b2Vzbid0LgotVElNRV9DTUQ9Ii91c3IvYmluL3RpbWUgLWYgJWUgLW8gJExPR19PVVRQVVRfRElS
LzEvY3BwL2J1aWxkX3RpbWUiCi0KLSRUSU1FX0NNRCAkVEVTVF9TQ1JJUFQgY3BwID4gPih0ZWUg
JENQUF9TVERPVVQpIDI+ID4odGVlICRDUFBfU1RERVJSID4mMikKLQotIyBPdGhlciB0ZXN0cyBh
cmUgcnVuIGluIHBhcmFsbGVsLgotCi1wYXJhbGxlbCAtLXJlc3VsdHMgJExPR19PVVRQVVRfRElS
IC0tam9ibG9nICRPVVRQVVRfRElSL2pvYmxvZyAkVEVTVF9TQ1JJUFQgOjo6IFwKLSAgY3NoYXJw
IFwKLSAgamF2YV9qZGs3IFwKLSAgamF2YW5hbm9famRrNyBcCi0gIGphdmFfb3JhY2xlNyBcCi0g
IGphdmFuYW5vX29yYWNsZTcgXAotICBweXRob24gXAotICBweXRob25fY3BwIFwKLSAgcnVieTIx
IFwKLSAgfHwgdHJ1ZSAgIyBQcm9jZXNzIHRlc3QgcmVzdWx0cyBldmVuIGlmIHRlc3RzIGZhaWwu
Ci0KLWNhdCAkT1VUUFVUX0RJUi9qb2Jsb2cKLQotIyBUaGUgZGlyZWN0b3J5IHRoYXQgaXMgY29w
aWVkIGZyb20gRG9ja2VyIGJhY2sgaW50byB0aGUgSmVua2lucyB3b3Jrc3BhY2UuCi1DT1BZX0ZS
T01fRE9DS0VSPS92YXIvbG9jYWwvZ2l0L3Byb3RvYnVmL3Rlc3RvdXRwdXQKLW1rZGlyIC1wICRD
T1BZX0ZST01fRE9DS0VSCi1URVNUT1VUUFVUX1hNTF9GSUxFPSRDT1BZX0ZST01fRE9DS0VSL3Rl
c3RyZXN1bHRzLnhtbAotCi0jIFByb2Nlc3MgYWxsIHRoZSBvdXRwdXQgZmlsZXMgZnJvbSAicGFy
YWxsZWwiIGFuZCBwYWNrYWdlIHRoZW0gaW50byBhIHNpbmdsZQotIyAueG1sIGZpbGUgd2l0aCBk
ZXRhaWxlZCwgYnJva2VuLWRvd24gdGVzdCBvdXRwdXQuCi1weXRob24gJE1ZX0RJUi9tYWtlX3Rl
c3Rfb3V0cHV0LnB5ICRPVVRQVVRfRElSID4gJFRFU1RPVVRQVVRfWE1MX0ZJTEUKLQotbHMgLWwg
JFRFU1RPVVRQVVRfWE1MX0ZJTEUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvUkVBRE1FLm1kIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9SRUFETUUu
bWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZDQ4Yzg3ZjcwNmJjNzI1OGY1ZTQ4
ZjY2N2IxNjI3MDRiNDRjNjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qcy9SRUFETUUubWQKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotWyFbQnVpbGQg
U3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvZ29vZ2xlL3Byb3RvYnVmLnN2Zz9icmFuY2g9
bWFzdGVyKV0oaHR0cHM6Ly90cmF2aXMtY2kub3JnL2dvb2dsZS9wcm90b2J1ZikKLQotQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4KLQotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIEphdmFT
Y3JpcHQgUHJvdG9jb2wgQnVmZmVycyBydW50aW1lIGxpYnJhcnkuCi0KLVRoZSBsaWJyYXJ5IGlz
IGN1cnJlbnRseSBjb21wYXRpYmxlIHdpdGg6Ci0KLTEuIENvbW1vbkpTLXN0eWxlIGltcG9ydHMg
KGVnLiBgdmFyIHByb3RvcyA9IHJlcXVpcmUoJ215LXByb3RvcycpO2ApCi0yLiBDbG9zdXJlLXN0
eWxlIGltcG9ydHMgKGVnLiBgZ29vZy5yZXF1aXJlKCdteS5wYWNrYWdlLk15UHJvdG8nKTtgKQot
Ci1TdXBwb3J0IGZvciBFUzYtc3R5bGUgaW1wb3J0cyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiAg
QnJvd3NlcnMgY2FuCi1iZSBzdXBwb3J0ZWQgYnkgdXNpbmcgQnJvd3NlcmlmeSwgd2VicGFjaywg
Q2xvc3VyZSBDb21waWxlciwgZXRjLiB0bwotcmVzb2x2ZSBpbXBvcnRzIGF0IGNvbXBpbGUgdGlt
ZS4KLQotVG8gdXNlIFByb3RvY29sIEJ1ZmZlcnMgd2l0aCBKYXZhU2NyaXB0LCB5b3UgbmVlZCB0
d28gbWFpbiBjb21wb25lbnRzOgotCi0xLiBUaGUgcHJvdG9idWYgcnVudGltZSBsaWJyYXJ5LiAg
WW91IGNhbiBpbnN0YWxsIHRoaXMgd2l0aAotICAgYG5wbSBpbnN0YWxsIGdvb2dsZS1wcm90b2J1
ZmAsIG9yIHVzZSB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCi0yLiBUaGUgUHJvdG9jb2wg
Q29tcGlsZXIgYHByb3RvY2AuICBUaGlzIHRyYW5zbGF0ZXMgYC5wcm90b2AgZmlsZXMKLSAgIGlu
dG8gYC5qc2AgZmlsZXMuICBUaGUgY29tcGlsZXIgaXMgbm90IGN1cnJlbnRseSBhdmFpbGFibGUg
dmlhCi0gICBucG0sIGJ1dCB5b3UgY2FuIGRvd25sb2FkIGEgcHJlLWJ1aWx0IGJpbmFyeQotICAg
W29uIEdpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi9yZWxlYXNlcykK
LSAgIChsb29rIGZvciB0aGUgYHByb3RvYy0qLnppcGAgZmlsZXMgdW5kZXIgKipEb3dubG9hZHMq
KikuCi0KLQotU2V0dXAKLT09PT09Ci0KLUZpcnN0LCBvYnRhaW4gdGhlIFByb3RvY29sIENvbXBp
bGVyLiAgVGhlIGVhc2llc3Qgd2F5IGlzIHRvIGRvd25sb2FkCi1hIHByZS1idWlsdCBiaW5hcnkg
ZnJvbSBbaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi9yZWxlYXNlc10oaHR0cHM6
Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1Zi9yZWxlYXNlcykuCi0KLUlmIHlvdSB3YW50LCB5
b3UgY2FuIGNvbXBpbGUgYHByb3RvY2AgZnJvbSBzb3VyY2UgaW5zdGVhZC4gIFRvIGRvIHRoaXMK
LWZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIFt0aGUgdG9wLWxldmVsCi1SRUFETUVdKGh0dHBz
Oi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWYvYmxvYi9tYXN0ZXIvc3JjL1JFQURNRS5tZCku
Ci0KLU9uY2UgeW91IGhhdmUgYHByb3RvY2AgY29tcGlsZWQsIHlvdSBjYW4gcnVuIHRoZSB0ZXN0
cyBieSB0eXBpbmc6Ci0KLSAgICAkIGNkIGpzCi0gICAgJCBucG0gaW5zdGFsbAotICAgICQgbnBt
IHRlc3QKLQotICAgICMgSWYgeW91ciBwcm90b2MgaXMgc29tZXdoZXJlIGVsc2UgdGhhbiAuLi9z
cmMvcHJvdG9jLCBpbnN0ZWFkIGRvIHRoaXMuCi0gICAgIyBCdXQgbWFrZSBzdXJlIHlvdXIgcHJv
dG9jIGlzIHRoZSBzYW1lIHZlcnNpb24gYXMgdGhpcyAob3IgY29tcGF0aWJsZSkhCi0gICAgJCBQ
Uk9UT0M9L3Vzci9sb2NhbC9iaW4vcHJvdG9jIG5wbSB0ZXN0Ci0KLVRoaXMgd2lsbCBydW4gdHdv
IHNlcGFyYXRlIGNvcGllcyBvZiB0aGUgdGVzdHM6IG9uZSB0aGF0IHVzZXMKLUNsb3N1cmUgQ29t
cGlsZXIgc3R5bGUgaW1wb3J0cyBhbmQgb25lIHRoYXQgdXNlcyBDb21tb25KUyBpbXBvcnRzLgot
WW91IGNhbiBzZWUgYWxsIHRoZSBDb21tb25KUyBmaWxlcyBpbiBgY29tbW9uanNfb3V0L2AuCi1J
ZiBhbGwgb2YgdGhlc2UgdGVzdHMgcGFzcywgeW91IGtub3cgeW91IGhhdmUgYSB3b3JraW5nIHNl
dHVwLgotCi0KLVVzaW5nIFByb3RvY29sIEJ1ZmZlcnMgaW4geW91ciBvd24gcHJvamVjdAotPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRvIHVzZSBQcm90b2Nv
bCBCdWZmZXJzIGluIHlvdXIgb3duIHByb2plY3QsIHlvdSBuZWVkIHRvIGludGVncmF0ZQotdGhl
IFByb3RvY29sIENvbXBpbGVyIGludG8geW91ciBidWlsZCBzeXN0ZW0uICBUaGUgZGV0YWlscyBh
cmUgYQotbGl0dGxlIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlciB5b3UgYXJlIHVzaW5n
IENsb3N1cmUgaW1wb3J0cwotb3IgQ29tbW9uSlMgaW1wb3J0czoKLQotQ2xvc3VyZSBJbXBvcnRz
Ci0tLS0tLS0tLS0tLS0tLS0KLQotSWYgeW91IHdhbnQgdG8gdXNlIENsb3N1cmUgaW1wb3J0cywg
eW91ciBidWlsZCBzaG91bGQgcnVuIGEgY29tbWFuZAotbGlrZSB0aGlzOgotCi0gICAgJCBwcm90
b2MgLS1qc19vdXQ9bGlicmFyeT1teXByb3RvX2xpYnMsYmluYXJ5Oi4gbWVzc2FnZXMucHJvdG8g
YmFzZS5wcm90bwotCi1Gb3IgQ2xvc3VyZSBpbXBvcnRzLCBgcHJvdG9jYCB3aWxsIGdlbmVyYXRl
IGEgc2luZ2xlIG91dHB1dCBmaWxlCi0oYG15cHJvdG9fbGlicy5qc2AgaW4gdGhpcyBleGFtcGxl
KS4gIFRoZSBnZW5lcmF0ZWQgZmlsZSB3aWxsIGBnb29nLnByb3ZpZGUoKWAKLWFsbCBvZiB0aGUg
dHlwZXMgZGVmaW5lZCBpbiB5b3VyIC5wcm90byBmaWxlcy4gIEZvciBleGFtcGxlLCBmb3IgdGhl
IHVuaXQKLXRlc3RzIHRoZSBnZW5lcmF0ZWQgZmlsZXMgY29udGFpbiBtYW55IGBnb29nLnByb3Zp
ZGVgIHN0YXRlbWVudHMgbGlrZToKLQotICAgIGdvb2cucHJvdmlkZSgncHJvdG8uZ29vZ2xlLnBy
b3RvYnVmLkRlc2NyaXB0b3JQcm90bycpOwotICAgIGdvb2cucHJvdmlkZSgncHJvdG8uZ29vZ2xl
LnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZScpOwotICAgIGdvb2cucHJv
dmlkZSgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdl
Jyk7Ci0gICAgZ29vZy5wcm92aWRlKCdwcm90by5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0
b3JQcm90bycpOwotICAgIGdvb2cucHJvdmlkZSgncHJvdG8uZ29vZ2xlLnByb3RvYnVmLkVudW1P
cHRpb25zJyk7Ci0KLVRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGFsc28gYGdvb2cucmVxdWlyZSgp
YCBtYW55IHR5cGVzIGluIHRoZSBjb3JlIGxpYnJhcnksCi1hbmQgdGhleSB3aWxsIHJlcXVpcmUg
bWFueSB0eXBlcyBpbiB0aGUgR29vZ2xlIENsb3N1cmUgbGlicmFyeS4gIFNvIG1ha2Ugc3VyZQot
dGhhdCB5b3VyIGBnb29nLnByb3ZpZGUoKWAgLyBgZ29vZy5yZXF1aXJlKClgIHNldHVwIGNhbiBm
aW5kIGFsbCBvZiB5b3VyCi1nZW5lcmF0ZWQgY29kZSwgdGhlIGNvcmUgbGlicmFyeSBgLmpzYCBm
aWxlcyBpbiB0aGlzIGRpcmVjdG9yeSwgYW5kIHRoZQotR29vZ2xlIENsb3N1cmUgbGlicmFyeSBp
dHNlbGYuCi0KLU9uY2UgeW91J3ZlIGRvbmUgdGhpcywgeW91IHNob3VsZCBiZSBhYmxlIHRvIGlt
cG9ydCB5b3VyIHR5cGVzIHdpdGgKLXN0YXRlbWVudHMgbGlrZToKLQotICAgIGdvb2cucmVxdWly
ZSgncHJvdG8ubXkucGFja2FnZS5NeU1lc3NhZ2UnKTsKLQotICAgIHZhciBtZXNzYWdlID0gcHJv
dG8ubXkucGFja2FnZS5NeU1lc3NhZ2UoKTsKLQotQ29tbW9uSlMgaW1wb3J0cwotLS0tLS0tLS0t
LS0tLS0tLQotCi1JZiB5b3Ugd2FudCB0byB1c2UgQ29tbW9uSlMgaW1wb3J0cywgeW91ciBidWls
ZCBzaG91bGQgcnVuIGEgY29tbWFuZAotbGlrZSB0aGlzOgotCi0gICAgJCBwcm90b2MgLS1qc19v
dXQ9aW1wb3J0X3N0eWxlPWNvbW1vbmpzLGJpbmFyeTouIG1lc3NhZ2VzLnByb3RvIGJhc2UucHJv
dG8KLQotRm9yIENvbW1vbkpTIGltcG9ydHMsIGBwcm90b2NgIHdpbGwgc3BpdCBvdXQgb25lIGZp
bGUgcGVyIGlucHV0IGZpbGUKLShzbyBgbWVzc2FnZXNfcGIuanNgIGFuZCBgYmFzZV9wYi5qc2Ag
aW4gdGhpcyBleGFtcGxlKS4gIFRoZSBnZW5lcmF0ZWQKLWNvZGUgd2lsbCBkZXBlbmQgb24gdGhl
IGNvcmUgcnVudGltZSwgd2hpY2ggc2hvdWxkIGJlIGluIGEgZmlsZSBjYWxsZWQKLWBnb29nbGUt
cHJvdG9idWYuanNgLiAgSWYgeW91IGFyZSBpbnN0YWxsaW5nIGZyb20gYG5wbWAsIHRoaXMgZmls
ZSBzaG91bGQKLWFscmVhZHkgYmUgYnVpbHQgYW5kIGF2YWlsYWJsZS4gIElmIHlvdSBhcmUgcnVu
bmluZyBmcm9tIEdpdEh1YiwgeW91IG5lZWQKLXRvIGJ1aWxkIGl0IGZpcnN0IGJ5IHJ1bm5pbmc6
Ci0KLSAgICAkIGd1bHAgZGlzdAotCi1PbmNlIHlvdSd2ZSBkb25lIHRoaXMsIHlvdSBzaG91bGQg
YmUgYWJsZSB0byBpbXBvcnQgeW91ciB0eXBlcyB3aXRoCi1zdGF0ZW1lbnRzIGxpa2U6Ci0KLSAg
ICB2YXIgbWVzc2FnZXMgPSByZXF1aXJlKCcuL21lc3NhZ2VzX3BiJyk7Ci0KLSAgICB2YXIgbWVz
c2FnZSA9IG5ldyBtZXNzYWdlcy5NeU1lc3NhZ2UoKTsKLQotVGhlIGAtLWpzX291dGAgZmxhZwot
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgc3ludGF4IG9mIHRoZSBgLS1qc19vdXRgIGZsYWcg
aXM6Ci0KLSAgICAtLWpzX291dD1bT1BUSU9OUzpdb3V0cHV0X2RpcgotCi1XaGVyZSBgT1BUSU9O
U2AgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMuICBPcHRpb25zIGFyZSBlaXRoZXIgYG9wdD12YWxg
IG9yCi1qdXN0IGBvcHRgIChmb3Igb3B0aW9ucyB0aGF0IGRvbid0IHRha2UgYSB2YWx1ZSkuICBU
aGUgYXZhaWxhYmxlIG9wdGlvbnMKLWFyZSBzcGVjaWZpZWQgYW5kIGRvY3VtZW50ZWQgaW4gdGhl
IGBHZW5lcmF0b3JPcHRpb25zYCBzdHJ1Y3QgaW4KLVtzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2pzL2pzX2dlbmVyYXRvci5oXShodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVm
L2Jsb2IvbWFzdGVyL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvanMvanNfZ2VuZXJhdG9y
LmgjTDUzKS4KLQotU29tZSBleGFtcGxlczoKLQotLSBgLS1qc19vdXQ9bGlicmFyeT1teXByb3Rv
c19saWIuanMsYmluYXJ5Oi5gOiB0aGlzIGNvbnRhaW5zIHRoZSBvcHRpb25zCi0gIGBsaWJyYXJ5
PW15cHJvdG9zLmxpYi5qc2AgYW5kIGBiaW5hcnlgIGFuZCBvdXRwdXRzIHRvIHRoZSBjdXJyZW50
IGRpcmVjdG9yeS4KLSAgVGhlIGBpbXBvcnRfc3R5bGVgIG9wdGlvbiBpcyBsZWZ0IHRvIHRoZSBk
ZWZhdWx0LCB3aGljaCBpcyBgY2xvc3VyZWAuCi0tIGAtLWpzX291dD1pbXBvcnRfc3R5bGU9Y29t
bW9uanMsYmluYXJ5OnByb3Rvc2A6IHRoaXMgY29udGFpbnMgdGhlIG9wdGlvbnMKLSAgYGltcG9y
dF9zdHlsZT1jb21tb25qc2AgYW5kIGBiaW5hcnlgIGFuZCBvdXRwdXRzIHRvIHRoZSBkaXJlY3Rv
cnkgYHByb3Rvc2AuCi0KLUFQSQotPT09Ci0KLVRoZSBBUEkgaXMgbm90IHdlbGwtZG9jdW1lbnRl
ZCB5ZXQuICBIZXJlIGlzIGEgcXVpY2sgZXhhbXBsZSB0byBnaXZlIHlvdSBhbgotaWRlYSBvZiBo
b3cgdGhlIGxpYnJhcnkgZ2VuZXJhbGx5IHdvcmtzOgotCi0gICAgdmFyIG1lc3NhZ2UgPSBuZXcg
TXlNZXNzYWdlKCk7Ci0KLSAgICBtZXNzYWdlLnNldE5hbWUoIkpvaG4gRG9lIik7Ci0gICAgbWVz
c2FnZS5zZXRBZ2UoMjUpOwotICAgIG1lc3NhZ2Uuc2V0UGhvbmVOdW1iZXJzKFsiODAwLTU1NS0x
MjEyIiwgIjgwMC01NTUtMDAwMCJdKTsKLQotICAgIC8vIFNlcmlhbGl6ZXMgdG8gYSBVSW50OEFy
cmF5LgotICAgIGJ5dGVzID0gbWVzc2FnZS5zZXJpYWxpemVCaW5hcnkoKTsKLQotICAgIHZhciBt
ZXNzYWdlMiA9IG5ldyBNeU1lc3NhZ2UoKTsKLSAgICBtZXNzYWdlMi5kZXNlcmlhbGl6ZUJpbmFy
eShieXRlcyk7Ci0KLUZvciBtb3JlIGV4YW1wbGVzLCBzZWUgdGhlIHRlc3RzLiAgWW91IGNhbiBh
bHNvIGxvb2sgYXQgdGhlIGdlbmVyYXRlZCBjb2RlCi10byBzZWUgd2hhdCBtZXRob2RzIGFyZSBk
ZWZpbmVkIGZvciB5b3VyIGdlbmVyYXRlZCBtZXNzYWdlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvYmluYXJ5
L2FyaXRoLmpzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qcy9iaW5hcnkvYXJpdGguanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDcwMjU3ZGU3MTY5ZjA2MzExYjRmNjEyZjU1MzcyYjYyZjcwNTRhMWIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9iaW5hcnkvYXJpdGguanMKKysr
IC9kZXYvbnVsbApAQCAtMSw0MTMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLS8qKgotICogQGZpbGVvdmVydmlldyBUaGlzIGZpbGUgY29udGFpbnMgaGVscGVy
IGNvZGUgdXNlZCBieSBqc3BiLnV0aWxzIHRvCi0gKiBoYW5kbGUgNjQtYml0IGludGVnZXIgY29u
dmVyc2lvbiB0by9mcm9tIHN0cmluZ3MuCi0gKgotICogQGF1dGhvciBjZmFsbGluQGdvb2dsZS5j
b20gKENocmlzIEZhbGxpbikKLSAqCi0gKiBUT0RPKGhhYmVybWFuKTogbW92ZSB0aGlzIHRvIGph
dmFzY3JpcHQvY2xvc3VyZS9tYXRoPwotICovCi0KLWdvb2cucHJvdmlkZSgnanNwYi5hcml0aC5J
bnQ2NCcpOwotZ29vZy5wcm92aWRlKCdqc3BiLmFyaXRoLlVJbnQ2NCcpOwotCi0vKioKLSAqIFVJ
bnQ2NCBpbXBsZW1lbnRzIHNvbWUgNjQtYml0IGFyaXRobWV0aWMgcm91dGluZXMgbmVjZXNzYXJ5
IGZvciBwcm9wZXJseQotICogaGFuZGxpbmcgNjQtYml0IGludGVnZXIgZmllbGRzLiBJdCBpbXBs
ZW1lbnRzIGxvc3NsZXNzIGludGVnZXIgYXJpdGhtZXRpYyBvbgotICogdG9wIG9mIEphdmFTY3Jp
cHQncyBudW1iZXIgdHlwZSwgd2hpY2ggaGFzIG9ubHkgNTMgYml0cyBvZiBwcmVjaXNpb24sIGJ5
Ci0gKiByZXByZXNlbnRpbmcgNjQtYml0IGludGVnZXJzIGFzIHR3byAzMi1iaXQgaGFsdmVzLgot
ICoKLSAqIEBwYXJhbSB7bnVtYmVyfSBsbyBUaGUgbG93IDMyIGJpdHMuCi0gKiBAcGFyYW0ge251
bWJlcn0gaGkgVGhlIGhpZ2ggMzIgYml0cy4KLSAqIEBjb25zdHJ1Y3RvcgotICovCi1qc3BiLmFy
aXRoLlVJbnQ2NCA9IGZ1bmN0aW9uKGxvLCBoaSkgewotICAvKioKLSAgICogVGhlIGxvdyAzMiBi
aXRzLgotICAgKiBAcHVibGljIHtudW1iZXJ9Ci0gICAqLwotICB0aGlzLmxvID0gbG87Ci0gIC8q
KgotICAgKiBUaGUgaGlnaCAzMiBiaXRzLgotICAgKiBAcHVibGljIHtudW1iZXJ9Ci0gICAqLwot
ICB0aGlzLmhpID0gaGk7Ci19OwotCi0KLS8qKgotICogQ29tcGFyZSB0d28gNjQtYml0IG51bWJl
cnMuIFJldHVybnMgLTEgaWYgdGhlIGZpcnN0IGlzCi0gKiBsZXNzLCArMSBpZiB0aGUgZmlyc3Qg
aXMgZ3JlYXRlciwgb3IgMCBpZiBib3RoIGFyZSBlcXVhbC4KLSAqIEBwYXJhbSB7IWpzcGIuYXJp
dGguVUludDY0fSBvdGhlcgotICogQHJldHVybiB7bnVtYmVyfQotICovCi1qc3BiLmFyaXRoLlVJ
bnQ2NC5wcm90b3R5cGUuY21wID0gZnVuY3Rpb24ob3RoZXIpIHsKLSAgaWYgKHRoaXMuaGkgPCBv
dGhlci5oaSB8fCAodGhpcy5oaSA9PSBvdGhlci5oaSAmJiB0aGlzLmxvIDwgb3RoZXIubG8pKSB7
Ci0gICAgcmV0dXJuIC0xOwotICB9IGVsc2UgaWYgKHRoaXMuaGkgPT0gb3RoZXIuaGkgJiYgdGhp
cy5sbyA9PSBvdGhlci5sbykgewotICAgIHJldHVybiAwOwotICB9IGVsc2UgewotICAgIHJldHVy
biAxOwotICB9Ci19OwotCi0KLS8qKgotICogUmlnaHQtc2hpZnQgdGhpcyBudW1iZXIgYnkgb25l
IGJpdC4KLSAqIEByZXR1cm4geyFqc3BiLmFyaXRoLlVJbnQ2NH0KLSAqLwotanNwYi5hcml0aC5V
SW50NjQucHJvdG90eXBlLnJpZ2h0U2hpZnQgPSBmdW5jdGlvbigpIHsKLSAgdmFyIGhpID0gdGhp
cy5oaSA+Pj4gMTsKLSAgdmFyIGxvID0gKHRoaXMubG8gPj4+IDEpIHwgKCh0aGlzLmhpICYgMSkg
PDwgMzEpOwotICByZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KGxvID4+PiAwLCBoaSA+Pj4g
MCk7Ci19OwotCi0KLS8qKgotICogTGVmdC1zaGlmdCB0aGlzIG51bWJlciBieSBvbmUgYml0Lgot
ICogQHJldHVybiB7IWpzcGIuYXJpdGguVUludDY0fQotICovCi1qc3BiLmFyaXRoLlVJbnQ2NC5w
cm90b3R5cGUubGVmdFNoaWZ0ID0gZnVuY3Rpb24oKSB7Ci0gIHZhciBsbyA9IHRoaXMubG8gPDwg
MTsKLSAgdmFyIGhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5sbyA+Pj4gMzEpOwotICByZXR1
cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KGxvID4+PiAwLCBoaSA+Pj4gMCk7Ci19OwotCi0KLS8q
KgotICogVGVzdCB0aGUgTVNCLgotICogQHJldHVybiB7Ym9vbGVhbn0KLSAqLwotanNwYi5hcml0
aC5VSW50NjQucHJvdG90eXBlLm1zYiA9IGZ1bmN0aW9uKCkgewotICByZXR1cm4gISEodGhpcy5o
aSAmIDB4ODAwMDAwMDApOwotfTsKLQotCi0vKioKLSAqIFRlc3QgdGhlIExTQi4KLSAqIEByZXR1
cm4ge2Jvb2xlYW59Ci0gKi8KLWpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5sc2IgPSBmdW5j
dGlvbigpIHsKLSAgcmV0dXJuICEhKHRoaXMubG8gJiAxKTsKLX07Ci0KLQotLyoqCi0gKiBUZXN0
IHdoZXRoZXIgdGhpcyBudW1iZXIgaXMgemVyby4KLSAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gKi8K
LWpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS56ZXJvID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVy
biB0aGlzLmxvID09IDAgJiYgdGhpcy5oaSA9PSAwOwotfTsKLQotCi0vKioKLSAqIEFkZCB0d28g
NjQtYml0IG51bWJlcnMgdG8gcHJvZHVjZSBhIDY0LWJpdCBudW1iZXIuCi0gKiBAcGFyYW0geyFq
c3BiLmFyaXRoLlVJbnQ2NH0gb3RoZXIKLSAqIEByZXR1cm4geyFqc3BiLmFyaXRoLlVJbnQ2NH0K
LSAqLwotanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG90aGVyKSB7
Ci0gIHZhciBsbyA9ICgodGhpcy5sbyArIG90aGVyLmxvKSAmIDB4ZmZmZmZmZmYpID4+PiAwOwot
ICB2YXIgaGkgPQotICAgICAgKCgodGhpcy5oaSArIG90aGVyLmhpKSAmIDB4ZmZmZmZmZmYpID4+
PiAwKSArCi0gICAgICAoKCh0aGlzLmxvICsgb3RoZXIubG8pID49IDB4MTAwMDAwMDAwKSA/IDEg
OiAwKTsKLSAgcmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NChsbyA+Pj4gMCwgaGkgPj4+IDAp
OwotfTsKLQotCi0vKioKLSAqIFN1YnRyYWN0IHR3byA2NC1iaXQgbnVtYmVycyB0byBwcm9kdWNl
IGEgNjQtYml0IG51bWJlci4KLSAqIEBwYXJhbSB7IWpzcGIuYXJpdGguVUludDY0fSBvdGhlcgot
ICogQHJldHVybiB7IWpzcGIuYXJpdGguVUludDY0fQotICovCi1qc3BiLmFyaXRoLlVJbnQ2NC5w
cm90b3R5cGUuc3ViID0gZnVuY3Rpb24ob3RoZXIpIHsKLSAgdmFyIGxvID0gKCh0aGlzLmxvIC0g
b3RoZXIubG8pICYgMHhmZmZmZmZmZikgPj4+IDA7Ci0gIHZhciBoaSA9Ci0gICAgICAoKCh0aGlz
LmhpIC0gb3RoZXIuaGkpICYgMHhmZmZmZmZmZikgPj4+IDApIC0KLSAgICAgICgoKHRoaXMubG8g
LSBvdGhlci5sbykgPCAwKSA/IDEgOiAwKTsKLSAgcmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2
NChsbyA+Pj4gMCwgaGkgPj4+IDApOwotfTsKLQotCi0vKioKLSAqIE11bHRpcGx5IHR3byAzMi1i
aXQgbnVtYmVycyB0byBwcm9kdWNlIGEgNjQtYml0IG51bWJlci4KLSAqIEBwYXJhbSB7bnVtYmVy
fSBhIFRoZSBmaXJzdCBpbnRlZ2VyOiAgbXVzdCBiZSBpbiBbMCwgMl4zMi0xKS4KLSAqIEBwYXJh
bSB7bnVtYmVyfSBiIFRoZSBzZWNvbmQgaW50ZWdlcjogbXVzdCBiZSBpbiBbMCwgMl4zMi0xKS4K
LSAqIEByZXR1cm4geyFqc3BiLmFyaXRoLlVJbnQ2NH0KLSAqLwotanNwYi5hcml0aC5VSW50NjQu
bXVsMzJ4MzIgPSBmdW5jdGlvbihhLCBiKSB7Ci0gIC8vIERpcmVjdGx5IG11bHRpcGx5aW5nIHR3
byAzMi1iaXQgbnVtYmVycyBtYXkgcHJvZHVjZSB1cCB0byA2NCBiaXRzIG9mCi0gIC8vIHByZWNp
c2lvbiwgdGh1cyBsb3NpbmcgcHJlY2lzaW9uIGJlY2F1c2Ugb2YgdGhlIDUzLWJpdCBtYW50aXNz
YSBvZgotICAvLyBKYXZhU2NyaXB0IG51bWJlcnMuIFNvIHdlIG11bHRpcGx5IHdpdGggMTYtYml0
IGRpZ2l0cyAocmFkaXggNjU1MzYpCi0gIC8vIGluc3RlYWQuCi0gIHZhciBhTG93ID0gKGEgJiAw
eGZmZmYpOwotICB2YXIgYUhpZ2ggPSAoYSA+Pj4gMTYpOwotICB2YXIgYkxvdyA9IChiICYgMHhm
ZmZmKTsKLSAgdmFyIGJIaWdoID0gKGIgPj4+IDE2KTsKLSAgdmFyIHByb2R1Y3RMb3cgPQotICAg
ICAgLy8gMzItYml0IHJlc3VsdCwgcmVzdWx0IGJpdHMgMC0zMSwgdGFrZSBhbGwgMzIgYml0cwot
ICAgICAgKGFMb3cgKiBiTG93KSArCi0gICAgICAvLyAzMi1iaXQgcmVzdWx0LCByZXN1bHQgYml0
cyAxNi00NywgdGFrZSBib3R0b20gMTYgYXMgb3VyIHRvcCAxNgotICAgICAgKChhTG93ICogYkhp
Z2gpICYgMHhmZmZmKSAqIDB4MTAwMDAgKwotICAgICAgLy8gMzItYml0IHJlc3VsdCwgcmVzdWx0
IGJpdHMgMTYtNDcsIHRha2UgYm90dG9tIDE2IGFzIG91ciB0b3AgMTYKLSAgICAgICgoYUhpZ2gg
KiBiTG93KSAmIDB4ZmZmZikgKiAweDEwMDAwOwotICB2YXIgcHJvZHVjdEhpZ2ggPQotICAgICAg
Ly8gMzItYml0IHJlc3VsdCwgcmVzdWx0IGJpdHMgMzItNjMsIHRha2UgYWxsIDMyIGJpdHMKLSAg
ICAgIChhSGlnaCAqIGJIaWdoKSArCi0gICAgICAvLyAzMi1iaXQgcmVzdWx0LCByZXN1bHQgYml0
cyAxNi00NywgdGFrZSB0b3AgMTYgYXMgb3VyIGJvdHRvbSAxNgotICAgICAgKChhTG93ICogYkhp
Z2gpID4+PiAxNikgKwotICAgICAgLy8gMzItYml0IHJlc3VsdCwgcmVzdWx0IGJpdHMgMTYtNDcs
IHRha2UgdG9wIDE2IGFzIG91ciBib3R0b20gMTYKLSAgICAgICgoYUhpZ2ggKiBiTG93KSA+Pj4g
MTYpOwotCi0gIC8vIENhcnJ5LiBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSB1cCB0byAqdHdv
KiBjYXJyaWVzIGR1ZSB0byBhZGRpdGlvbiBvZgotICAvLyB0aHJlZSB0ZXJtcy4KLSAgd2hpbGUg
KHByb2R1Y3RMb3cgPj0gMHgxMDAwMDAwMDApIHsKLSAgICBwcm9kdWN0TG93IC09IDB4MTAwMDAw
MDAwOwotICAgIHByb2R1Y3RIaWdoICs9IDE7Ci0gIH0KLQotICByZXR1cm4gbmV3IGpzcGIuYXJp
dGguVUludDY0KHByb2R1Y3RMb3cgPj4+IDAsIHByb2R1Y3RIaWdoID4+PiAwKTsKLX07Ci0KLQot
LyoqCi0gKiBNdWx0aXBseSB0aGlzIG51bWJlciBieSBhIDMyLWJpdCBudW1iZXIsIHByb2R1Y2lu
ZyBhIDk2LWJpdCBudW1iZXIsIHRoZW4KLSAqIHRydW5jYXRlIHRoZSB0b3AgMzIgYml0cy4KLSAq
IEBwYXJhbSB7bnVtYmVyfSBhIFRoZSBtdWx0aXBsaWVyLgotICogQHJldHVybiB7IWpzcGIuYXJp
dGguVUludDY0fQotICovCi1qc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubXVsID0gZnVuY3Rp
b24oYSkgewotICAvLyBQcm9kdWNlIHR3byBwYXJ0czogYXQgYml0cyAwLTYzLCBhbmQgMzItOTUu
Ci0gIHZhciBsbyA9IGpzcGIuYXJpdGguVUludDY0Lm11bDMyeDMyKHRoaXMubG8sIGEpOwotICB2
YXIgaGkgPSBqc3BiLmFyaXRoLlVJbnQ2NC5tdWwzMngzMih0aGlzLmhpLCBhKTsKLSAgLy8gTGVm
dC1zaGlmdCBoaSBieSAzMiBiaXRzLCB0cnVuY2F0aW5nIGl0cyB0b3AgYml0cy4gVGhlIHBhcnRz
IHdpbGwgdGhlbiBiZQotICAvLyBhbGlnbmVkIGZvciBhZGRpdGlvbi4KLSAgaGkuaGkgPSBoaS5s
bzsKLSAgaGkubG8gPSAwOwotICByZXR1cm4gbG8uYWRkKGhpKTsKLX07Ci0KLQotLyoqCi0gKiBE
aXZpZGUgYSA2NC1iaXQgbnVtYmVyIGJ5IGEgMzItYml0IG51bWJlciB0byBwcm9kdWNlIGEKLSAq
IDY0LWJpdCBxdW90aWVudCBhbmQgYSAzMi1iaXQgcmVtYWluZGVyLgotICogQHBhcmFtIHtudW1i
ZXJ9IF9kaXZpc29yCi0gKiBAcmV0dXJuIHtBcnJheS48anNwYi5hcml0aC5VSW50NjQ+fSBhcnJh
eSBvZiBbcXVvdGllbnQsIHJlbWFpbmRlcl0sCi0gKiB1bmxlc3MgZGl2aXNvciBpcyAwLCBpbiB3
aGljaCBjYXNlIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLgotICovCi1qc3BiLmFyaXRoLlVJ
bnQ2NC5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24oX2Rpdmlzb3IpIHsKLSAgaWYgKF9kaXZpc29y
ID09IDApIHsKLSAgICByZXR1cm4gW107Ci0gIH0KLQotICAvLyBXZSBwZXJmb3JtIGxvbmcgZGl2
aXNpb24gdXNpbmcgYSByYWRpeC0yIGFsZ29yaXRobSwgZm9yIHNpbXBsaWNpdHkgKGkuZS4sCi0g
IC8vIG9uZSBiaXQgYXQgYSB0aW1lKS4gVE9ETzogb3B0aW1pemUgdG8gYSByYWRpeC0yXjMyIGFs
Z29yaXRobSwgdGFraW5nIGNhcmUKLSAgLy8gdG8gZ2V0IHRoZSB2YXJpYWJsZSBzaGlmdHMgcmln
aHQuCi0gIHZhciBxdW90aWVudCA9IG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLCAwKTsKLSAgdmFy
IHJlbWFpbmRlciA9IG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvLCB0aGlzLmhpKTsKLSAg
dmFyIGRpdmlzb3IgPSBuZXcganNwYi5hcml0aC5VSW50NjQoX2Rpdmlzb3IsIDApOwotICB2YXIg
dW5pdCA9IG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgxLCAwKTsKLQotICAvLyBMZWZ0LXNoaWZ0IHRo
ZSBkaXZpc29yIGFuZCB1bml0IHVudGlsIHRoZSBoaWdoIGJpdCBvZiBkaXZpc29yIGlzIHNldC4K
LSAgd2hpbGUgKCFkaXZpc29yLm1zYigpKSB7Ci0gICAgZGl2aXNvciA9IGRpdmlzb3IubGVmdFNo
aWZ0KCk7Ci0gICAgdW5pdCA9IHVuaXQubGVmdFNoaWZ0KCk7Ci0gIH0KLQotICAvLyBQZXJmb3Jt
IGxvbmcgZGl2aXNpb24gb25lIGJpdCBhdCBhIHRpbWUuCi0gIHdoaWxlICghdW5pdC56ZXJvKCkp
IHsKLSAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLCBhZGQgdW5pdCB0byBxdW90aWVudCBh
bmQgc3VidHJhY3QgZGl2aXNvciBmcm9tCi0gICAgLy8gcmVtYWluZGVyLgotICAgIGlmIChkaXZp
c29yLmNtcChyZW1haW5kZXIpIDw9IDApIHsKLSAgICAgIHF1b3RpZW50ID0gcXVvdGllbnQuYWRk
KHVuaXQpOwotICAgICAgcmVtYWluZGVyID0gcmVtYWluZGVyLnN1YihkaXZpc29yKTsKLSAgICB9
Ci0gICAgLy8gUmlnaHQtc2hpZnQgdGhlIGRpdmlzb3IgYW5kIHVuaXQuCi0gICAgZGl2aXNvciA9
IGRpdmlzb3IucmlnaHRTaGlmdCgpOwotICAgIHVuaXQgPSB1bml0LnJpZ2h0U2hpZnQoKTsKLSAg
fQotCi0gIHJldHVybiBbcXVvdGllbnQsIHJlbWFpbmRlcl07Ci19OwotCi0KLS8qKgotICogQ29u
dmVydCBhIDY0LWJpdCBudW1iZXIgdG8gYSBzdHJpbmcuCi0gKiBAcmV0dXJuIHtzdHJpbmd9Ci0g
KiBAb3ZlcnJpZGUKLSAqLwotanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnRvU3RyaW5nID0g
ZnVuY3Rpb24oKSB7Ci0gIHZhciByZXN1bHQgPSAnJzsKLSAgdmFyIG51bSA9IHRoaXM7Ci0gIHdo
aWxlICghbnVtLnplcm8oKSkgewotICAgIHZhciBkaXZSZXN1bHQgPSBudW0uZGl2KDEwKTsKLSAg
ICB2YXIgcXVvdGllbnQgPSBkaXZSZXN1bHRbMF0sIHJlbWFpbmRlciA9IGRpdlJlc3VsdFsxXTsK
LSAgICByZXN1bHQgPSByZW1haW5kZXIubG8gKyByZXN1bHQ7Ci0gICAgbnVtID0gcXVvdGllbnQ7
Ci0gIH0KLSAgaWYgKHJlc3VsdCA9PSAnJykgewotICAgIHJlc3VsdCA9ICcwJzsKLSAgfQotICBy
ZXR1cm4gcmVzdWx0OwotfTsKLQotCi0vKioKLSAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSA2NC1i
aXQgbnVtYmVyLiBSZXR1cm5zIGBudWxsYCBvbiBhIHBhcnNlIGVycm9yLgotICogQHBhcmFtIHtz
dHJpbmd9IHMKLSAqIEByZXR1cm4gez9qc3BiLmFyaXRoLlVJbnQ2NH0KLSAqLwotanNwYi5hcml0
aC5VSW50NjQuZnJvbVN0cmluZyA9IGZ1bmN0aW9uKHMpIHsKLSAgdmFyIHJlc3VsdCA9IG5ldyBq
c3BiLmFyaXRoLlVJbnQ2NCgwLCAwKTsKLSAgLy8gb3B0aW1pemF0aW9uOiByZXVzZSB0aGlzIGlu
c3RhbmNlIGZvciBlYWNoIGRpZ2l0LgotICB2YXIgZGlnaXQ2NCA9IG5ldyBqc3BiLmFyaXRoLlVJ
bnQ2NCgwLCAwKTsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7Ci0gICAg
aWYgKHNbaV0gPCAnMCcgfHwgc1tpXSA+ICc5JykgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fQotICAgIHZhciBkaWdpdCA9IHBhcnNlSW50KHNbaV0sIDEwKTsKLSAgICBkaWdpdDY0LmxvID0g
ZGlnaXQ7Ci0gICAgcmVzdWx0ID0gcmVzdWx0Lm11bCgxMCkuYWRkKGRpZ2l0NjQpOwotICB9Ci0g
IHJldHVybiByZXN1bHQ7Ci19OwotCi0KLS8qKgotICogTWFrZSBhIGNvcHkgb2YgdGhlIHVpbnQ2
NC4KLSAqIEByZXR1cm4geyFqc3BiLmFyaXRoLlVJbnQ2NH0KLSAqLwotanNwYi5hcml0aC5VSW50
NjQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiBuZXcganNwYi5hcml0
aC5VSW50NjQodGhpcy5sbywgdGhpcy5oaSk7Ci19OwotCi0KLS8qKgotICogSW50NjQgaXMgbGlr
ZSBVSW50NjQsIGJ1dCBtb2RpZmllcyBzdHJpbmcgY29udmVyc2lvbnMgdG8gaW50ZXJwcmV0IHRo
ZSBzdG9yZWQKLSAqIDY0LWJpdCB2YWx1ZSBhcyBhIHR3b3MtY29tcGxlbWVudC1zaWduZWQgaW50
ZWdlci4gSXQgZG9lcyAqbm90KiBzdXBwb3J0IHRoZQotICogZnVsbCByYW5nZSBvZiBvcGVyYXRp
b25zIHRoYXQgVUludDY0IGRvZXM6IG9ubHkgYWRkLCBzdWJ0cmFjdCwgYW5kIHN0cmluZwotICog
Y29udmVyc2lvbnMuCi0gKgotICogTi5CLiB0aGF0IG11bHRpcGx5IGFuZCBkaXZpZGUgcm91dGlu
ZXMgYXJlICpOT1QqIHN1cHBvcnRlZC4gVGhleSB3aWxsIHRocm93Ci0gKiBleGNlcHRpb25zLiAo
VGhleSBhcmUgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgc3RyaW5nIGNvbnZlcnNpb25zLCB3
aGljaAotICogYXJlIHRoZSBvbmx5IG9wZXJhdGlvbnMgd2UgcmVhbGx5IG5lZWQgaW4ganNwYi4p
Ci0gKgotICogQHBhcmFtIHtudW1iZXJ9IGxvIFRoZSBsb3cgMzIgYml0cy4KLSAqIEBwYXJhbSB7
bnVtYmVyfSBoaSBUaGUgaGlnaCAzMiBiaXRzLgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWpzcGIu
YXJpdGguSW50NjQgPSBmdW5jdGlvbihsbywgaGkpIHsKLSAgLyoqCi0gICAqIFRoZSBsb3cgMzIg
Yml0cy4KLSAgICogQHB1YmxpYyB7bnVtYmVyfQotICAgKi8KLSAgdGhpcy5sbyA9IGxvOwotICAv
KioKLSAgICogVGhlIGhpZ2ggMzIgYml0cy4KLSAgICogQHB1YmxpYyB7bnVtYmVyfQotICAgKi8K
LSAgdGhpcy5oaSA9IGhpOwotfTsKLQotCi0vKioKLSAqIEFkZCB0d28gNjQtYml0IG51bWJlcnMg
dG8gcHJvZHVjZSBhIDY0LWJpdCBudW1iZXIuCi0gKiBAcGFyYW0geyFqc3BiLmFyaXRoLkludDY0
fSBvdGhlcgotICogQHJldHVybiB7IWpzcGIuYXJpdGguSW50NjR9Ci0gKi8KLWpzcGIuYXJpdGgu
SW50NjQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG90aGVyKSB7Ci0gIHZhciBsbyA9ICgodGhp
cy5sbyArIG90aGVyLmxvKSAmIDB4ZmZmZmZmZmYpID4+PiAwOwotICB2YXIgaGkgPQotICAgICAg
KCgodGhpcy5oaSArIG90aGVyLmhpKSAmIDB4ZmZmZmZmZmYpID4+PiAwKSArCi0gICAgICAoKCh0
aGlzLmxvICsgb3RoZXIubG8pID49IDB4MTAwMDAwMDAwKSA/IDEgOiAwKTsKLSAgcmV0dXJuIG5l
dyBqc3BiLmFyaXRoLkludDY0KGxvID4+PiAwLCBoaSA+Pj4gMCk7Ci19OwotCi0KLS8qKgotICog
U3VidHJhY3QgdHdvIDY0LWJpdCBudW1iZXJzIHRvIHByb2R1Y2UgYSA2NC1iaXQgbnVtYmVyLgot
ICogQHBhcmFtIHshanNwYi5hcml0aC5JbnQ2NH0gb3RoZXIKLSAqIEByZXR1cm4geyFqc3BiLmFy
aXRoLkludDY0fQotICovCi1qc3BiLmFyaXRoLkludDY0LnByb3RvdHlwZS5zdWIgPSBmdW5jdGlv
bihvdGhlcikgewotICB2YXIgbG8gPSAoKHRoaXMubG8gLSBvdGhlci5sbykgJiAweGZmZmZmZmZm
KSA+Pj4gMDsKLSAgdmFyIGhpID0KLSAgICAgICgoKHRoaXMuaGkgLSBvdGhlci5oaSkgJiAweGZm
ZmZmZmZmKSA+Pj4gMCkgLQotICAgICAgKCgodGhpcy5sbyAtIG90aGVyLmxvKSA8IDApID8gMSA6
IDApOwotICByZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQobG8gPj4+IDAsIGhpID4+PiAwKTsK
LX07Ci0KLQotLyoqCi0gKiBNYWtlIGEgY29weSBvZiB0aGUgaW50NjQuCi0gKiBAcmV0dXJuIHsh
anNwYi5hcml0aC5JbnQ2NH0KLSAqLwotanNwYi5hcml0aC5JbnQ2NC5wcm90b3R5cGUuY2xvbmUg
PSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIG5ldyBqc3BiLmFyaXRoLkludDY0KHRoaXMubG8sIHRo
aXMuaGkpOwotfTsKLQotCi0vKioKLSAqIENvbnZlcnQgYSA2NC1iaXQgbnVtYmVyIHRvIGEgc3Ry
aW5nLgotICogQHJldHVybiB7c3RyaW5nfQotICogQG92ZXJyaWRlCi0gKi8KLWpzcGIuYXJpdGgu
SW50NjQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gIC8vIElmIHRoZSBudW1i
ZXIgaXMgbmVnYXRpdmUsIGZpbmQgaXRzIHR3b3MtY29tcGxlbWVudCBpbnZlcnNlLgotICB2YXIg
c2lnbiA9ICh0aGlzLmhpICYgMHg4MDAwMDAwMCkgIT0gMDsKLSAgdmFyIG51bSA9IG5ldyBqc3Bi
LmFyaXRoLlVJbnQ2NCh0aGlzLmxvLCB0aGlzLmhpKTsKLSAgaWYgKHNpZ24pIHsKLSAgICBudW0g
PSBuZXcganNwYi5hcml0aC5VSW50NjQoMCwgMCkuc3ViKG51bSk7Ci0gIH0KLSAgcmV0dXJuIChz
aWduID8gJy0nIDogJycpICsgbnVtLnRvU3RyaW5nKCk7Ci19OwotCi0KLS8qKgotICogUGFyc2Ug
YSBzdHJpbmcgaW50byBhIDY0LWJpdCBudW1iZXIuIFJldHVybnMgYG51bGxgIG9uIGEgcGFyc2Ug
ZXJyb3IuCi0gKiBAcGFyYW0ge3N0cmluZ30gcwotICogQHJldHVybiB7P2pzcGIuYXJpdGguSW50
NjR9Ci0gKi8KLWpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZyA9IGZ1bmN0aW9uKHMpIHsKLSAg
dmFyIGhhc05lZ2F0aXZlID0gKHMubGVuZ3RoID4gMCAmJiBzWzBdID09ICctJyk7Ci0gIGlmICho
YXNOZWdhdGl2ZSkgewotICAgIHMgPSBzLnN1YnN0cmluZygxKTsKLSAgfQotICB2YXIgbnVtID0g
anNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZyhzKTsKLSAgaWYgKG51bSA9PT0gbnVsbCkgewot
ICAgIHJldHVybiBudWxsOwotICB9Ci0gIGlmIChoYXNOZWdhdGl2ZSkgewotICAgIG51bSA9IG5l
dyBqc3BiLmFyaXRoLlVJbnQ2NCgwLCAwKS5zdWIobnVtKTsKLSAgfQotICByZXR1cm4gbmV3IGpz
cGIuYXJpdGguSW50NjQobnVtLmxvLCBudW0uaGkpOwotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvYmluYXJ5
L2FyaXRoX3Rlc3QuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS9hcml0aF90ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4OTc5NmJmNzk1MDc5MTlmMzJlOGEyNzdkMTI0YjQwZjlmMzUwNDcxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvYmluYXJ5L2Fy
aXRoX3Rlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUgKzAsMCBAQAotLy8gUHJvdG9jb2wg
QnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQg
MjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxv
cGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8qKgotICogQGZpbGVvdmVydmlldyBUZXN0IGNhc2Vz
IGZvciBJbnQ2NC1tYW5pcHVsYXRpb24gZnVuY3Rpb25zLgotICoKLSAqIFRlc3Qgc3VpdGUgaXMg
d3JpdHRlbiB1c2luZyBKYXNtaW5lIC0tIHNlZSBodHRwOi8vamFzbWluZS5naXRodWIuaW8vCi0g
KgotICogQGF1dGhvciBjZmFsbGluQGdvb2dsZS5jb20gKENocmlzIEZhbGxpbikKLSAqLwotCi1n
b29nLnJlcXVpcmUoJ2dvb2cudGVzdGluZy5hc3NlcnRzJyk7Ci1nb29nLnJlcXVpcmUoJ2pzcGIu
YXJpdGguSW50NjQnKTsKLWdvb2cucmVxdWlyZSgnanNwYi5hcml0aC5VSW50NjQnKTsKLQotCi1k
ZXNjcmliZSgnYmluYXJ5QXJpdGhUZXN0JywgZnVuY3Rpb24oKSB7Ci0gIC8qKgotICAgKiBUZXN0
cyBjb21wYXJpc29uIG9wZXJhdGlvbnMuCi0gICAqLwotICBpdCgndGVzdENvbXBhcmUnLCBmdW5j
dGlvbigpIHsKLSAgICB2YXIgYSA9IG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgxMjM0LCA1Njc4KTsK
LSAgICB2YXIgYiA9IG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgxMjM0LCA1Njc4KTsKLSAgICBhc3Nl
cnRFcXVhbHMoYS5jbXAoYiksIDApOwotICAgIGFzc2VydEVxdWFscyhiLmNtcChhKSwgMCk7Ci0g
ICAgYi5sbyAtPSAxOwotICAgIGFzc2VydEVxdWFscyhhLmNtcChiKSwgMSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGIuY21wKGEpLCAtMSk7Ci0gICAgYi5sbyArPSAyOwotICAgIGFzc2VydEVxdWFscyhh
LmNtcChiKSwgLTEpOwotICAgIGFzc2VydEVxdWFscyhiLmNtcChhKSwgMSk7Ci0gICAgYi5sbyA9
IGEubG87Ci0gICAgYi5oaSA9IGEuaGkgLSAxOwotICAgIGFzc2VydEVxdWFscyhhLmNtcChiKSwg
MSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGIuY21wKGEpLCAtMSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMo
YS56ZXJvKCksIGZhbHNlKTsKLSAgICBhc3NlcnRFcXVhbHMoYS5tc2IoKSwgZmFsc2UpOwotICAg
IGFzc2VydEVxdWFscyhhLmxzYigpLCBmYWxzZSk7Ci0gICAgYS5oaSA9IDA7Ci0gICAgYS5sbyA9
IDA7Ci0gICAgYXNzZXJ0RXF1YWxzKGEuemVybygpLCB0cnVlKTsKLSAgICBhLmhpID0gMHg4MDAw
MDAwMDsKLSAgICBhc3NlcnRFcXVhbHMoYS56ZXJvKCksIGZhbHNlKTsKLSAgICBhc3NlcnRFcXVh
bHMoYS5tc2IoKSwgdHJ1ZSk7Ci0gICAgYS5sbyA9IDB4MDAwMDAwMDE7Ci0gICAgYXNzZXJ0RXF1
YWxzKGEubHNiKCksIHRydWUpOwotICB9KTsKLQotCi0gIC8qKgotICAgKiBUZXN0cyBzaGlmdHMu
Ci0gICAqLwotICBpdCgndGVzdFNoaWZ0cycsIGZ1bmN0aW9uKCkgewotICAgIHZhciBhID0gbmV3
IGpzcGIuYXJpdGguVUludDY0KDEsIDApOwotICAgIGFzc2VydEVxdWFscyhhLmxvLCAxKTsKLSAg
ICBhc3NlcnRFcXVhbHMoYS5oaSwgMCk7Ci0gICAgdmFyIG9yaWcgPSBhOwotICAgIGEgPSBhLmxl
ZnRTaGlmdCgpOwotICAgIGFzc2VydEVxdWFscyhvcmlnLmxvLCAxKTsgIC8vIG9yaWdpbmFsIHVu
bW9kaWZpZWQuCi0gICAgYXNzZXJ0RXF1YWxzKG9yaWcuaGksIDApOwotICAgIGFzc2VydEVxdWFs
cyhhLmxvLCAyKTsKLSAgICBhc3NlcnRFcXVhbHMoYS5oaSwgMCk7Ci0gICAgYSA9IGEubGVmdFNo
aWZ0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGEubG8sIDQpOwotICAgIGFzc2VydEVxdWFscyhhLmhp
LCAwKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI5OyBpKyspIHsKLSAgICAgIGEgPSBhLmxl
ZnRTaGlmdCgpOwotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMoYS5sbywgMHg4MDAwMDAwMCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGEuaGksIDApOwotICAgIGEgPSBhLmxlZnRTaGlmdCgpOwotICAgIGFz
c2VydEVxdWFscyhhLmxvLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMoYS5oaSwgMSk7Ci0gICAgYSA9
IGEubGVmdFNoaWZ0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGEubG8sIDApOwotICAgIGFzc2VydEVx
dWFscyhhLmhpLCAyKTsKLSAgICBhID0gYS5yaWdodFNoaWZ0KCk7Ci0gICAgYSA9IGEucmlnaHRT
aGlmdCgpOwotICAgIGFzc2VydEVxdWFscyhhLmxvLCAweDgwMDAwMDAwKTsKLSAgICBhc3NlcnRF
cXVhbHMoYS5oaSwgMCk7Ci0gICAgYSA9IGEucmlnaHRTaGlmdCgpOwotICAgIGFzc2VydEVxdWFs
cyhhLmxvLCAweDQwMDAwMDAwKTsKLSAgICBhc3NlcnRFcXVhbHMoYS5oaSwgMCk7Ci0gIH0pOwot
Ci0KLSAgLyoqCi0gICAqIFRlc3RzIGFkZGl0aW9ucy4KLSAgICovCi0gIGl0KCd0ZXN0QWRkJywg
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGEgPSBuZXcganNwYi5hcml0aC5VSW50NjQoLyogbG8gPSAq
LyAweDg5YWJjZGVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBoaSA9ICovIDB4MDEyMzQ1NjcpOwotICAgIHZhciBiID0gbmV3IGpzcGIuYXJpdGguVUludDY0
KC8qIGxvID0gKi8gMHhmZjUyYWI5MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyogaGkgPSAqLyAweDkyZmEyMTIzKTsKLSAgICAvLyBBZGRpdGlvbiB3aXRoIGNh
cnJ5LgotICAgIHZhciBjID0gYS5hZGQoYik7Ci0gICAgYXNzZXJ0RXF1YWxzKGEubG8sIDB4ODlh
YmNkZWYpOyAgLy8gb3JpZ2luYWxzIHVubW9kaWZpZWQuCi0gICAgYXNzZXJ0RXF1YWxzKGEuaGks
IDB4MDEyMzQ1NjcpOwotICAgIGFzc2VydEVxdWFscyhiLmxvLCAweGZmNTJhYjkxKTsKLSAgICBh
c3NlcnRFcXVhbHMoYi5oaSwgMHg5MmZhMjEyMyk7Ci0gICAgYXNzZXJ0RXF1YWxzKGMubG8sIDB4
ODhmZTc5ODApOwotICAgIGFzc2VydEVxdWFscyhjLmhpLCAweDk0MWQ2NjhiKTsKLQotICAgIC8v
IFNpbXBsZSBhZGRpdGlvbiB3aXRob3V0IGNhcnJ5LgotICAgIGEubG8gPSAyOwotICAgIGEuaGkg
PSAwOwotICAgIGIubG8gPSAzOwotICAgIGIuaGkgPSAwOwotICAgIGMgPSBhLmFkZChiKTsKLSAg
ICBhc3NlcnRFcXVhbHMoYy5sbywgNSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGMuaGksIDApOwotICB9
KTsKLQotCi0gIC8qKgotICAgKiBUZXN0IHN1YnRyYWN0aW9ucy4KLSAgICovCi0gIGl0KCd0ZXN0
U3ViJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGtMZW5ndGggPSAxMDsKLSAgICB2YXIgaGlWYWx1
ZXMgPSBbMHgxNjgyZWYzMiwKLSAgICAgICAgICAgICAgICAgICAgMHg1ODM5MDJmNywKLSAgICAg
ICAgICAgICAgICAgICAgMHhiNjJmNTk1NSwKLSAgICAgICAgICAgICAgICAgICAgMHg2ZWE5OWJi
ZiwKLSAgICAgICAgICAgICAgICAgICAgMHgyNWEzOWMyMCwKLSAgICAgICAgICAgICAgICAgICAg
MHgwNzAwYTA4YiwKLSAgICAgICAgICAgICAgICAgICAgMHgwMGY3MzA0ZCwKLSAgICAgICAgICAg
ICAgICAgICAgMHg5MWE1YjVhZiwKLSAgICAgICAgICAgICAgICAgICAgMHg4OTA3N2ZkMiwKLSAg
ICAgICAgICAgICAgICAgICAgMHhlMDllMzQ3Y107Ci0gICAgdmFyIGxvVmFsdWVzID0gWzB4ZTE1
MzhiMTgsCi0gICAgICAgICAgICAgICAgICAgIDB4YmVhY2Q1NTYsCi0gICAgICAgICAgICAgICAg
ICAgIDB4NzQxMDA3NTgsCi0gICAgICAgICAgICAgICAgICAgIDB4OTZlM2NiMjYsCi0gICAgICAg
ICAgICAgICAgICAgIDB4NTZjMzdjM2YsCi0gICAgICAgICAgICAgICAgICAgIDB4ZTAwYjNmN2Qs
Ci0gICAgICAgICAgICAgICAgICAgIDB4ODU5ZjI1ZDcsCi0gICAgICAgICAgICAgICAgICAgIDB4
YzJlZTYxNGEsCi0gICAgICAgICAgICAgICAgICAgIDB4ZTFkMjFjZDcsCi0gICAgICAgICAgICAg
ICAgICAgIDB4MzBhYWU2YTRdOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwga0xlbmd0aDsgaSsr
KSB7Ci0gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtMZW5ndGg7IGorKykgewotICAgICAgICB2
YXIgYSA9IG5ldyBqc3BiLmFyaXRoLlVJbnQ2NChsb1ZhbHVlc1tpXSwgaGlWYWx1ZXNbal0pOwot
ICAgICAgICB2YXIgYiA9IG5ldyBqc3BiLmFyaXRoLlVJbnQ2NChsb1ZhbHVlc1tqXSwgaGlWYWx1
ZXNbaV0pOwotICAgICAgICB2YXIgYyA9IGEuYWRkKGIpLnN1YihiKTsKLSAgICAgICAgYXNzZXJ0
RXF1YWxzKGMuaGksIGEuaGkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoYy5sbywgYS5sbyk7Ci0g
ICAgICB9Ci0gICAgfQotICB9KTsKLQotCi0gIC8qKgotICAgKiBUZXN0cyAzMi1ieS0zMiBtdWx0
aXBsaWNhdGlvbi4KLSAgICovCi0gIGl0KCd0ZXN0TXVsMzJ4MzInLCBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgdGVzdERhdGEgPSBbCi0gICAgICAvLyBhICAgICAgICBiICAgICAgICAgIGxvdyhhKmIp
ICAgaGlnaChhKmIpCi0gICAgICBbMHhjMGFiZTJmOCwgMHgxNjA3ODk4YSwgMHg1ZGU3MTFiMCwg
MHgxMDk0NzFiOF0sCi0gICAgICBbMHg5MTVlYjNjYiwgMHg0ZmI2NmQwZSwgMHhiZDBkNDQxYSwg
MHgyZDQzZDBiY10sCi0gICAgICBbMHhmZTRlZmU3MCwgMHg4MGI0OGMzNywgMHhiY2RkZWExMCwg
MHg3ZmRhZGEwY10sCi0gICAgICBbMHhlMjIyZmQ0YSwgMHhlNDNkNTI0YSwgMHhkNWUwZWI2NCwg
MHhjOTlkNTQ5Y10sCi0gICAgICBbMHhkMTcxZjQ2OSwgMHhiOTRlYmQwMSwgMHg0YmUxNzk2OSwg
MHg5NzliYzRmYV0sCi0gICAgICBbMHg4MjljYzFkZiwgMHhlMjU5OGIzOCwgMHhmNDE1N2RjOCwg
MHg3MzdjMTJhZF0sCi0gICAgICBbMHhmMTBjMzc2NywgMHg4MzgyODgxZSwgMHg5NDJiMzYxMiwg
MHg3YmQ0MjhiOF0sCi0gICAgICBbMHhiMGY2ZGQyNCwgMHgyMzI1OTdlMSwgMHgwNzljOThhNCwg
MHgxODRiYmNlN10sCi0gICAgICBbMHhmY2RiMDVhNywgMHg5MDJmNTViYywgMHg2MzYxOTlhNCwg
MHg4ZTY5ZjQxMl0sCi0gICAgICBbMHgwZGQwYmZhOSwgMHg5MTZlMjdiMSwgMHg2ZTI1NDJkOSwg
MHgwN2Q5MmU2NV0KLSAgICBdOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0RGF0YS5s
ZW5ndGg7IGkrKykgewotICAgICAgdmFyIGEgPSB0ZXN0RGF0YVtpXVswXSA+Pj4gMDsKLSAgICAg
IHZhciBiID0gdGVzdERhdGFbaV1bMV0gPj4+IDA7Ci0gICAgICB2YXIgY0xvdyA9IHRlc3REYXRh
W2ldWzJdID4+PiAwOwotICAgICAgdmFyIGNIaWdoID0gdGVzdERhdGFbaV1bM10gPj4+IDA7Ci0g
ICAgICB2YXIgYyA9IGpzcGIuYXJpdGguVUludDY0Lm11bDMyeDMyKGEsIGIpOwotICAgICAgYXNz
ZXJ0RXF1YWxzKGMubG8sIGNMb3cpOwotICAgICAgYXNzZXJ0RXF1YWxzKGMuaGksIGNIaWdoKTsK
LSAgICB9Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAqIFRlc3RzIDY0LWJ5LTMyIG11bHRpcGxpY2F0
aW9uLgotICAgKi8KLSAgaXQoJ3Rlc3RNdWwnLCBmdW5jdGlvbigpIHsKLSAgICAvLyA2NHgzMiBi
aXRzIHByb2R1Y2VzIDk2IGJpdHMgb2YgcHJvZHVjdC4gVGhlIG11bHRpcGxpY2F0aW9uIGZ1bmN0
aW9uIHVuZGVyCi0gICAgLy8gdGVzdCB0cnVuY2F0ZXMgdGhlIHRvcCAzMiBiaXRzLCBzbyB3ZSBj
b21wYXJlIGFnYWluc3QgYSA2NC1iaXQgZXhwZWN0ZWQKLSAgICAvLyBwcm9kdWN0LgotICAgIHZh
ciB0ZXN0RGF0YSA9IFsKLSAgICAgIC8vIGxvdyhhKSAgIGhpZ2goYSkgICAgICAgICAgICAgICBs
b3coYSpiKSAgIGhpZ2goYSpiKQotICAgICAgWzB4ZWMxMDk1NWIsIDB4MzYwZWIxNjgsIDB4NGI3
ZjNmNWIsIDB4YmZjYjdjNTksIDB4OTUxN2RhNWZdLAotICAgICAgWzB4NDJiMDAwZmMsIDB4OWQx
MDE2NDIsIDB4NmZhMWFiNzIsIDB4MjU4NGM0MzgsIDB4NmE5ZTZkMmJdLAotICAgICAgWzB4ZjQy
ZDRmYjQsIDB4YWUzNjY0MDMsIDB4YTY1YTEwMDAsIDB4OTI0MzQwMDAsIDB4MWZmOTc4ZGZdLAot
ICAgICAgWzB4MTdlMmY1NmIsIDB4MjU0ODc2OTMsIDB4ZjEzZjk4YzcsIDB4NzM3OTRlMmQsIDB4
YTk2YjBjNmFdLAotICAgICAgWzB4NDkyZjI0MWYsIDB4NzZjMGViNjcsIDB4NzM3N2FjNDQsIDB4
ZDQzMzZjM2MsIDB4ZmM0YjFlYmVdLAotICAgICAgWzB4ZDZiOTIzMjEsIDB4ZTE4NGZhNDgsIDB4
ZDZlNzY5MDQsIDB4OTMxNDE1ODQsIDB4Y2JmNDRkYTFdLAotICAgICAgWzB4NGJmMDA3ZWEsIDB4
OTY4YzBhOWUsIDB4ZjVlNDAyNmEsIDB4NGZkYjFhZTQsIDB4NjFiOWZiN2RdLAotICAgICAgWzB4
MTBhODNiZTcsIDB4MmQ2ODViYTYsIDB4YzllNWZiN2YsIDB4MmFkNDM0OTksIDB4Mzc0MjQ3M2Rd
LAotICAgICAgWzB4MmYyNjE4MjksIDB4MWFjYTY4MWEsIDB4M2QzNDk0ZTMsIDB4ODIxMzIwNWIs
IDB4MjgzNzE5ZjhdLAotICAgICAgWzB4ZTRmMmNlMjEsIDB4MmU3NGI3YmQsIDB4ZDgwMWIzOGIs
IDB4YmMxN2ZlZWIsIDB4YzZjNDRlMGZdCi0gICAgXTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGVzdERhdGEubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBhID0gbmV3IGpzcGIuYXJpdGgu
VUludDY0KHRlc3REYXRhW2ldWzBdLCB0ZXN0RGF0YVtpXVsxXSk7Ci0gICAgICB2YXIgcHJvZCA9
IGEubXVsKHRlc3REYXRhW2ldWzJdKTsKLSAgICAgIGFzc2VydEVxdWFscyhwcm9kLmxvLCB0ZXN0
RGF0YVtpXVszXSk7Ci0gICAgICBhc3NlcnRFcXVhbHMocHJvZC5oaSwgdGVzdERhdGFbaV1bNF0p
OwotICAgIH0KLSAgfSk7Ci0KLQotICAvKioKLSAgICogVGVzdHMgNjQtZGl2LWJ5LTMyIGRpdmlz
aW9uLgotICAgKi8KLSAgaXQoJ3Rlc3REaXYnLCBmdW5jdGlvbigpIHsKLSAgICAvLyBDb21wdXRl
IGEvYiwgeWllbGRpbmcgcXVvdCA9IGEvYiBhbmQgcmVtID0gYSViLgotICAgIHZhciB0ZXN0RGF0
YSA9IFsKLSAgICAgIC8vIC0tLSBkaXZpc29ycyBpbiAoMCwgMl4zMi0xKSB0byB0ZXN0IGZ1bGwg
ZGl2aXNvciByYW5nZQotICAgICAgLy8gbG93KGEpICAgaGlnaChhKSAgICBiICAgICAgICAgIGxv
dyhxdW90KSAgaGlnaChxdW90KSByZW0KLSAgICAgIFsweDcxMjQ0M2YxLCAweGU4NWNlZmNjLCAw
eGMxYTcwNTBiLCAweDMzMmM3OWFkLCAweDAwMDAwMDAxLCAweDkyZmZhODgyXSwKLSAgICAgIFsw
eDExOTEyOTE1LCAweGIyNjk5ZWI1LCAweDMwNDY3Y2JlLCAweGIyMWI0YmU0LCAweDAwMDAwMDAz
LCAweDI4MzQ2NWRkXSwKLSAgICAgIFsweDBkOTE3OTgyLCAweDIwMWYyYTZlLCAweDNmMzViZjAz
LCAweDgyMTdjOGU0LCAweDAwMDAwMDAwLCAweDE1MzQwMmQ2XSwKLSAgICAgIFsweGEwNzJjMTA4
LCAweDc0MDIwYzk2LCAweGM2MDU2OGZkLCAweDk1Zjk2MTNlLCAweDAwMDAwMDAwLCAweDNmNDY3
NmMyXSwKLSAgICAgIFsweGQ4NDVkNWQ4LCAweGNkZDIzNWM0LCAweDIwNDI2NDc1LCAweDYxNTRl
NzhiLCAweDAwMDAwMDA2LCAweDIwMmZiNzUxXSwKLSAgICAgIFsweGE0ZGJmNzFmLCAweDllOTA0
NjVlLCAweGYwOGUwMjJmLCAweGE4YmU5NDdmLCAweDAwMDAwMDAwLCAweGJlNDNiNWNlXSwKLSAg
ICAgIFsweDNkYmU2MjdmLCAweGE3OTFmNGI5LCAweDI4YTViZDg5LCAweDFmNWRmZTkzLCAweDAw
MDAwMDA0LCAweDAyYmY5ZWQ0XSwKLSAgICAgIFsweDVjMWM1M2VlLCAweGNjZjUxMDJlLCAweDE5
ODU3NmU3LCAweDA3ZTNhZTMxLCAweDAwMDAwMDA4LCAweDAyZWE4ZmI3XSwKLSAgICAgIFsweGZl
ZjFlNTgxLCAweDA0NzE0MDY3LCAweGNhNjU0MGMxLCAweDA1OWU3M2VjLCAweDAwMDAwMDAwLCAw
eDMxNjU4MDk1XSwKLSAgICAgIFsweDFlMmRkOTBjLCAweDEzZGQ2NjY3LCAweDhiMjE4NGMzLCAw
eDI0OGQxYTQyLCAweDAwMDAwMDAwLCAweDRjYTZkMGM2XSwKLSAgICAgIC8vIC0tLSBkaXZpc29y
cyBpbiAoMCwgMl4xNi0xKSB0byB0ZXN0IGxhcmdlciBxdW90aWVudCBoaWdoLXdvcmRzCi0gICAg
ICAvLyBsb3coYSkgICBoaWdoKGEpICAgIGIgICAgICAgICAgbG93KHF1b3QpICBoaWdoKHF1b3Qp
IHJlbQotICAgICAgWzB4ODY3MjJiNDcsIDB4MmNkNTdjOWEsIDB4MDAwMDMxMjMsIDB4MmFlNDFi
N2EsIDB4MDAwMGU5OTUsIDB4MDAwMDBmOTldLAotICAgICAgWzB4MWRkNzg4NGMsIDB4ZjVlODM5
YmMsIDB4MDAwMDllZWIsIDB4NWM4ODYyNDIsIDB4MDAwMThjMjEsIDB4MDAwMDk5YjZdLAotICAg
ICAgWzB4NWM1M2Q2MjUsIDB4ODk5ZmM3ZTUsIDB4MDAwMDg3ZDcsIDB4ZDYyNTAwN2EsIDB4MDAw
MTAzNWMsIDB4MDAwMDE5YWZdLAotICAgICAgWzB4NjkzMmQ5MzIsIDB4OWQwYTU0ODgsIDB4MDAw
MDUxZmIsIDB4OWQ5NzYxNDMsIDB4MDAwMWVhNjMsIDB4MDAwMDQ5ODFdLAotICAgICAgWzB4NGQx
OGJiODUsIDB4MGM5MmZiMzEsIDB4MDAwMDFkOWYsIDB4MDMyNjVhYjQsIDB4MDAwMDZjYWMsIDB4
MDAwMDAxYjldLAotICAgICAgWzB4YmU3NTY3NjgsIDB4ZGVhNjdjY2IsIDB4MDAwMDhhMDMsIDB4
NThhZGQ0NDIsIDB4MDAwMTljZmYsIDB4MDAwMDU2YTJdLAotICAgICAgWzB4ZTI0NjZmOWEsIDB4
MjUyMWYxMTQsIDB4MDAwMGMzNTAsIDB4YTBjMDg2MGQsIDB4MDAwMDMwYWIsIDB4MDAwMGE0OGFd
LAotICAgICAgWzB4ZjAwZGRhZDEsIDB4ZTJmNTQ0NmEsIDB4MDAwMDJjZmMsIDB4NzYyNjk3YTYs
IDB4MDAwNTBiOTYsIDB4MDAwMDBiNjldLAotICAgICAgWzB4YTg3OTE1MmEsIDB4MGE3MGUwYTUs
IDB4MDAwMDdjZGYsIDB4YjQ0MTUxYjMsIDB4MDAwMDE1NjcsIDB4MDAwMDM2M2RdLAotICAgICAg
WzB4NzE3OWE3NGMsIDB4NDYwODNmZmYsIDB4MDAwMDI1M2MsIDB4NGQzOWJhNmUsIDB4MDAwMWUx
N2YsIDB4MDAwMDBmODRdCi0gICAgXTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdERh
dGEubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBhID0gbmV3IGpzcGIuYXJpdGguVUludDY0KHRl
c3REYXRhW2ldWzBdLCB0ZXN0RGF0YVtpXVsxXSk7Ci0gICAgICB2YXIgcmVzdWx0ID0gYS5kaXYo
dGVzdERhdGFbaV1bMl0pOwotICAgICAgdmFyIHF1b3RpZW50ID0gcmVzdWx0WzBdOwotICAgICAg
dmFyIHJlbWFpbmRlciA9IHJlc3VsdFsxXTsKLSAgICAgIGFzc2VydEVxdWFscyhxdW90aWVudC5s
bywgdGVzdERhdGFbaV1bM10pOwotICAgICAgYXNzZXJ0RXF1YWxzKHF1b3RpZW50LmhpLCB0ZXN0
RGF0YVtpXVs0XSk7Ci0gICAgICBhc3NlcnRFcXVhbHMocmVtYWluZGVyLmxvLCB0ZXN0RGF0YVtp
XVs1XSk7Ci0gICAgfQotICB9KTsKLQotCi0gIC8qKgotICAgKiBUZXN0cyAudG9TdHJpbmcoKSBh
bmQgLmZyb21TdHJpbmcoKS4KLSAgICovCi0gIGl0KCd0ZXN0U3RyaW5ncycsIGZ1bmN0aW9uKCkg
ewotICAgIHZhciB0ZXN0RGF0YSA9IFsKLSAgICAgICAgWzB4NWU4NGM5MzUsIDB4Y2FlMzNkMGUs
ICcxNDYxOTU5NTk0NzI5OTM1OTAyOSddLAotICAgICAgICBbMHg2MmIzYjhiOCwgMHg5MzQ4MDU0
NCwgJzEwNjEyNzM4MzEzMTcwNDM0MjMyJ10sCi0gICAgICAgIFsweDMxOWJmYjEzLCAweGMwMWM0
MTcyLCAnMTM4NDMwMTEzMTMzNDQ0NDUyMDMnXSwKLSAgICAgICAgWzB4NWI4YTY1ZmIsIDB4YTU4
ODViMzEsICcxMTkyNzg4Mzg4MDYzODA4MDUwNyddLAotICAgICAgICBbMHg2YmRiODBmMSwgMHhi
MGQxYjE2YiwgJzEyNzQxMTU5ODk1NzM3MDA4MzY5J10sCi0gICAgICAgIFsweDRiODJiNDQyLCAw
eDJlMGQ4Yzk3LCAnMzMxODQ2MzA4MTg3NjczMDk0NiddLAotICAgICAgICBbMHg3ODBkNTIwOCwg
MHg3ZDc2NzUyYywgJzkwNDA1NDIxMzU4NDU5OTkxMTInXSwKLSAgICAgICAgWzB4MmU0NjgwMGYs
IDB4MDk5Mzc3OGQsICc2OTAwMjY2MTYxNjgyODQxNzUnXSwKLSAgICAgICAgWzB4ZjAwYTdlMzIs
IDB4Y2Q4ZTM5MzEsICcxNDgxMTgzOTExMTExMTU0MDI3NCddLAotICAgICAgICBbMHgxYmFlY2Nk
NiwgMHg5MjMwNDhjNCwgJzEwNTMzOTk5NTM1NTM0ODIwNTY2J10sCi0gICAgICAgIFsweDAzNjY5
ZDI5LCAweGJmZjNhYjcyLCAnMTM4MzE1ODczODY3NTY2MDMxNzcnXSwKLSAgICAgICAgWzB4MjUy
NjA3M2UsIDB4MDFhZmZjODEsICcxMjE1OTMzNDY1NjY1MjI2ODYnXSwKLSAgICAgICAgWzB4YzI0
MjQ0ZTAsIDB4ZDdmNDBkMGUsICcxNTU2MTA3Njk2OTUxMTczMjQ0OCddLAotICAgICAgICBbMHhj
NTZhMzQxZSwgMHhhNjhiNjZhNywgJzEyMDAwNzk4NTAyODE2NDYxODU0J10sCi0gICAgICAgIFsw
eDg3MzhkNjRkLCAweGJmZTc4NjA0LCAnMTM4MjgxNjg1MzQ4NzEwMzc1MTcnXSwKLSAgICAgICAg
WzB4NWJhZmYwM2IsIDB4ZDc1NzJhZWEsICcxNTUxNjkxODIyNzE3NzMwNDEyMyddLAotICAgICAg
ICBbMHg0YTg0M2Q4YSwgMHg4NjRlMTMyYiwgJzk2Nzc2OTM3MjU5MjA0NzY1NTQnXSwKLSAgICAg
ICAgWzB4MjViNGU5NGQsIDB4MjJiNTRkYzYsICcyNTAwOTkwNjgxNTA1NjU1MTE3J10sCi0gICAg
ICAgIFsweDZiYmU2NjRiLCAweDU1YTVjYzBlLCAnNjE3MTU2MzIyNjY5MDM4MTM4NyddLAotICAg
ICAgICBbMHhlZTkxNmM4MSwgMHhiMDBhYWJiMywgJzEyNjg1MTQwMDg5NzMyNDI2ODgxJ10KLSAg
ICBdOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0RGF0YS5sZW5ndGg7IGkrKykgewot
ICAgICAgdmFyIGEgPSBuZXcganNwYi5hcml0aC5VSW50NjQodGVzdERhdGFbaV1bMF0sIHRlc3RE
YXRhW2ldWzFdKTsKLSAgICAgIHZhciByb3VuZHRyaXAgPSBqc3BiLmFyaXRoLlVJbnQ2NC5mcm9t
U3RyaW5nKGEudG9TdHJpbmcoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMocm91bmR0cmlwLmxvLCBh
LmxvKTsKLSAgICAgIGFzc2VydEVxdWFscyhyb3VuZHRyaXAuaGksIGEuaGkpOwotICAgICAgYXNz
ZXJ0RXF1YWxzKGEudG9TdHJpbmcoKSwgdGVzdERhdGFbaV1bMl0pOwotICAgIH0KLSAgfSk7Ci0K
LQotICAvKioKLSAgICogVGVzdHMgc2lnbmVkIEludDY0cy4gVGhlc2UgYXJlIGJ1aWx0IG9uIFVJ
bnQ2NHMsIHNvIHdlIG9ubHkgbmVlZCB0byB0ZXN0Ci0gICAqIHRoZSBleHBsaWNpdCBvdmVycmlk
ZXM6IC50b1N0cmluZygpIGFuZCAuZnJvbVN0cmluZygpLgotICAgKi8KLSAgaXQoJ3Rlc3RTaWdu
ZWRJbnQ2NCcsIGZ1bmN0aW9uKCkgewotICAgIHZhciB0ZXN0U3RyaW5ncyA9IFsKLSAgICAgICAg
Jy03ODQ3NDk5NjQ0MTc4NTkzNjY2JywKLSAgICAgICAgJzM3NzE5NDY1MDEyMjkxMzk1MjMnLAot
ICAgICAgICAnMjg3Mjg1NjU0OTA1NDk5NTA2MCcsCi0gICAgICAgICctNTc4MDA0OTU5NDI3NDM1
MDkwNCcsCi0gICAgICAgICczMzgzNzg1OTU2Njk1MTA1MjAxJywKLSAgICAgICAgJzI5NzMwNTUx
ODQ4NTcwNzI2MTAnLAotICAgICAgICAnLTM4Nzk0Mjg0NTkyMTU2MjcyMDYnLAotICAgICAgICAn
NDU4OTgxMjQzMTA2NDE1NjYzMScsCi0gICAgICAgICc4NDg0MDc1NTU3MzMzNjg5OTQwJywKLSAg
ICAgICAgJzEwNzUzMjU4MTcwOTgwOTI0MDcnLAotICAgICAgICAnLTQzNDY2OTc1MDEwMTIyOTIz
MTQnLAotICAgICAgICAnMjQ4ODYyMDQ1OTcxODMxNjYzNycsCi0gICAgICAgICc2MTEyNjU1MTg3
NDIzNTIwNjcyJywKLSAgICAgICAgJy0zNjU1Mjc4MjczOTI4NjEyMTA0JywKLSAgICAgICAgJzM0
MzkxNTQwMTk0MzU4MDMxOTYnLAotICAgICAgICAnMTAwNDExMjQ3ODg0Mzc2Mzc1NycsCi0gICAg
ICAgICctNjU4Nzc5MDc3NjYxNDM2ODQxMycsCi0gICAgICAgICc2NjQzMjAwNjUwOTk3MTQ1ODYn
LAotICAgICAgICAnNDc2MDQxMjkwOTk3MzI5MjkxMicsCi0gICAgICAgICctNzkxMTkwMzk4OTYw
MjI3NDY3MicKLSAgICBdOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0U3RyaW5ncy5s
ZW5ndGg7IGkrKykgewotICAgICAgdmFyIHJvdW5kdHJpcCA9Ci0gICAgICAgICAganNwYi5hcml0
aC5JbnQ2NC5mcm9tU3RyaW5nKHRlc3RTdHJpbmdzW2ldKS50b1N0cmluZygpOwotICAgICAgYXNz
ZXJ0RXF1YWxzKHJvdW5kdHJpcCwgdGVzdFN0cmluZ3NbaV0pOwotICAgIH0KLSAgfSk7Ci19KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvanMvYmluYXJ5L2NvbnN0YW50cy5qcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvYmluYXJ5L2NvbnN0YW50cy5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM2MjE2YmZhMmNkYTYwMDJhNjZkMDg4
NGNmZjUyN2QyYTJlMmI0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2pzL2JpbmFyeS9jb25zdGFudHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjAgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8qKgotICogQGZpbGVv
dmVydmlldyBUaGlzIGZpbGUgY29udGFpbnMgY29uc3RhbnRzIGFuZCB0eXBlZGVmcyB1c2VkIGJ5
Ci0gKiBqc3BiLkJpbmFyeVJlYWRlciBhbmQgQmluYXJ5V3JpdGVyLgotICoKLSAqIEBhdXRob3Ig
YWFwcGxlYnlAZ29vZ2xlLmNvbSAoQXVzdGluIEFwcGxlYnkpCi0gKi8KLQotZ29vZy5wcm92aWRl
KCdqc3BiLkFueUZpZWxkVHlwZScpOwotZ29vZy5wcm92aWRlKCdqc3BiLkJpbmFyeUNvbnN0YW50
cycpOwotZ29vZy5wcm92aWRlKCdqc3BiLkJpbmFyeU1lc3NhZ2UnKTsKLWdvb2cucHJvdmlkZSgn
anNwYi5CdWlsZGVyRnVuY3Rpb24nKTsKLWdvb2cucHJvdmlkZSgnanNwYi5CeXRlU291cmNlJyk7
Ci1nb29nLnByb3ZpZGUoJ2pzcGIuQ2xvbmVyRnVuY3Rpb24nKTsKLWdvb2cucHJvdmlkZSgnanNw
Yi5Db21wYXJlckZ1bmN0aW9uJyk7Ci1nb29nLnByb3ZpZGUoJ2pzcGIuQ29uc3RCaW5hcnlNZXNz
YWdlJyk7Ci1nb29nLnByb3ZpZGUoJ2pzcGIuUHJ1bmVyRnVuY3Rpb24nKTsKLWdvb2cucHJvdmlk
ZSgnanNwYi5SZWFkZXJGdW5jdGlvbicpOwotZ29vZy5wcm92aWRlKCdqc3BiLlJlY3ljbGVyRnVu
Y3Rpb24nKTsKLWdvb2cucHJvdmlkZSgnanNwYi5SZXBlYXRlZEZpZWxkVHlwZScpOwotZ29vZy5w
cm92aWRlKCdqc3BiLlNjYWxhckZpZWxkVHlwZScpOwotZ29vZy5wcm92aWRlKCdqc3BiLldyaXRl
ckZ1bmN0aW9uJyk7Ci0KLQotZ29vZy5mb3J3YXJkRGVjbGFyZSgnanNwYi5NZXNzYWdlJyk7Ci1n
b29nLmZvcndhcmREZWNsYXJlKCdqc3Byb3RvLkJpbmFyeUV4dGVuc2lvbicpOwotCi0KLQotLyoq
Ci0gKiBCYXNlIGludGVyZmFjZSBjbGFzcyBmb3IgYWxsIGNvbnN0IG1lc3NhZ2VzLiBEb2VzIF9f
bm90X18gZGVmaW5lIGFueQotICogbWV0aG9kcywgYXMgZG9pbmcgc28gb24gYSB3aWRlbHktdXNl
ZCBpbnRlcmZhY2UgZGVmZWF0cyBkZWFkLWNvZGUKLSAqIGVsaW1pbmF0aW9uLgotICogQGludGVy
ZmFjZQotICovCi1qc3BiLkNvbnN0QmluYXJ5TWVzc2FnZSA9IGZ1bmN0aW9uKCkge307Ci0KLQot
Ci0vKioKLSAqIEJhc2UgaW50ZXJmYWNlIGNsYXNzIGZvciBhbGwgbWVzc2FnZXMuIERvZXMgX19u
b3RfXyBkZWZpbmUgYW55IG1ldGhvZHMsIGFzCi0gKiBkb2luZyBzbyBvbiBhIHdpZGVseS11c2Vk
IGludGVyZmFjZSBkZWZlYXRzIGRlYWQtY29kZSBlbGltaW5hdGlvbi4KLSAqIEBpbnRlcmZhY2UK
LSAqIEBleHRlbmRzIHtqc3BiLkNvbnN0QmluYXJ5TWVzc2FnZX0KLSAqLwotanNwYi5CaW5hcnlN
ZXNzYWdlID0gZnVuY3Rpb24oKSB7fTsKLQotCi0vKioKLSAqIFRoZSB0eXBlcyBjb252ZXJ0aWJs
ZSB0byBVaW50OEFycmF5cy4gU3RyaW5ncyBhcmUgYXNzdW1lZCB0byBiZQotICogYmFzZTY0LWVu
Y29kZWQuCi0gKiBAdHlwZWRlZiB7QXJyYXlCdWZmZXJ8VWludDhBcnJheXxBcnJheTxudW1iZXI+
fHN0cmluZ30KLSAqLwotanNwYi5CeXRlU291cmNlOwotCi0KLS8qKgotICogQSBzY2FsYXIgZmll
bGQgaW4ganNwYiBjYW4gYmUgYSBib29sZWFuLCBudW1iZXIsIG9yIHN0cmluZy4KLSAqIEB0eXBl
ZGVmIHtib29sZWFufG51bWJlcnxzdHJpbmd9Ci0gKi8KLWpzcGIuU2NhbGFyRmllbGRUeXBlOwot
Ci0KLS8qKgotICogQSByZXBlYXRlZCBmaWVsZCBpbiBqc3BiIGlzIGFuIGFycmF5IG9mIHNjYWxh
cnMsIGJsb2JzLCBvciBtZXNzYWdlcy4KLSAqIEB0eXBlZGVmIHshQXJyYXk8anNwYi5TY2FsYXJG
aWVsZFR5cGU+fAotICAgICAgICAgICAgICFBcnJheTwhVWludDhBcnJheT58Ci0gICAgICAgICAg
ICAgIUFycmF5PCFqc3BiLkJpbmFyeU1lc3NhZ2U+fQotICovCi1qc3BiLlJlcGVhdGVkRmllbGRU
eXBlOwotCi0KLS8qKgotICogQSBmaWVsZCBpbiBqc3BiIGNhbiBiZSBhIHNjYWxhciwgYSBibG9j
ayBvZiBieXRlcywgYW5vdGhlciBwcm90bywgb3IgYW4KLSAqIGFycmF5IG9mIGFueSBvZiB0aGUg
YWJvdmUuCi0gKiBAdHlwZWRlZiB7anNwYi5TY2FsYXJGaWVsZFR5cGV8Ci0gICAgICAgICAgICAg
anNwYi5SZXBlYXRlZEZpZWxkVHlwZXwKLSAgICAgICAgICAgICAhVWludDhBcnJheXwKLSAgICAg
ICAgICAgICAhanNwYi5CaW5hcnlNZXNzYWdlfAotICAgICAgICAgICAgICFqc3Byb3RvLkJpbmFy
eUV4dGVuc2lvbn0KLSAqLwotanNwYi5BbnlGaWVsZFR5cGU7Ci0KLQotLyoqCi0gKiBBIGJ1aWxk
ZXIgZnVuY3Rpb24gY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBhIG1lc3NhZ2Ugb2JqZWN0LgotICog
QHR5cGVkZWYge2Z1bmN0aW9uKCk6IWpzcGIuQmluYXJ5TWVzc2FnZX0KLSAqLwotanNwYi5CdWls
ZGVyRnVuY3Rpb247Ci0KLQotLyoqCi0gKiBBIGNsb25lciBmdW5jdGlvbiBjcmVhdGVzIGEgZGVl
cCBjb3B5IG9mIGEgbWVzc2FnZSBvYmplY3QuCi0gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oanNwYi5D
b25zdEJpbmFyeU1lc3NhZ2UpOmpzcGIuQmluYXJ5TWVzc2FnZX0KLSAqLwotanNwYi5DbG9uZXJG
dW5jdGlvbjsKLQotCi0vKioKLSAqIEEgcmVjeWNsZXIgZnVuY3Rpb24gZGVzdHJveXMgYW4gaW5z
dGFuY2Ugb2YgYSBtZXNzYWdlIG9iamVjdC4KLSAqIEB0eXBlZGVmIHtmdW5jdGlvbighanNwYi5C
aW5hcnlNZXNzYWdlKTp2b2lkfQotICovCi1qc3BiLlJlY3ljbGVyRnVuY3Rpb247Ci0KLQotLyoq
Ci0gKiBBIHJlYWRlciBmdW5jdGlvbiBpbml0aWFsaXplcyBhIG1lc3NhZ2UgdXNpbmcgZGF0YSBm
cm9tIGEgQmluYXJ5UmVhZGVyLgotICogQHR5cGVkZWYge2Z1bmN0aW9uKCFqc3BiLkJpbmFyeU1l
c3NhZ2UsICFqc3BiLkJpbmFyeVJlYWRlcik6dm9pZH0KLSAqLwotanNwYi5SZWFkZXJGdW5jdGlv
bjsKLQotCi0vKioKLSAqIEEgd3JpdGVyIGZ1bmN0aW9uIHNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRv
IGEgQmluYXJ5V3JpdGVyLgotICogQHR5cGVkZWYgeyFmdW5jdGlvbighanNwYi5NZXNzYWdlLCAh
anNwYi5CaW5hcnlXcml0ZXIpOnZvaWQgfAotICogICAgICAgICAgICFmdW5jdGlvbighanNwYi5D
b25zdEJpbmFyeU1lc3NhZ2UsICFqc3BiLkJpbmFyeVdyaXRlcik6dm9pZH0KLSAqLwotanNwYi5X
cml0ZXJGdW5jdGlvbjsKLQotCi0vKioKLSAqIEEgcHJ1bmVyIGZ1bmN0aW9uIHJlbW92ZXMgZGVm
YXVsdC12YWx1ZWQgZmllbGRzIGFuZCBlbXB0eSBzdWJtZXNzYWdlcyBmcm9tIGEKLSAqIG1lc3Nh
Z2UgYW5kIHJldHVybnMgZWl0aGVyIHRoZSBwcnVuZWQgbWVzc2FnZSBvciBudWxsIGlmIHRoZSBl
bnRpcmUgbWVzc2FnZQotICogd2FzIHBydW5lZCBhd2F5LgotICogQHR5cGVkZWYge2Z1bmN0aW9u
KD9qc3BiLkJpbmFyeU1lc3NhZ2UpOj9qc3BiLkJpbmFyeU1lc3NhZ2V9Ci0gKi8KLWpzcGIuUHJ1
bmVyRnVuY3Rpb247Ci0KLQotLyoqCi0gKiBBIGNvbXBhcmVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1
ZSBpZiB0d28gcHJvdG9zIGFyZSBlcXVhbC4KLSAqIEB0eXBlZGVmIHshZnVuY3Rpb24oP2pzcGIu
Q29uc3RCaW5hcnlNZXNzYWdlLAotICogICAgICAgICAgICAgICAgICAgICA/anNwYi5Db25zdEJp
bmFyeU1lc3NhZ2UpOmJvb2xlYW59Ci0gKi8KLWpzcGIuQ29tcGFyZXJGdW5jdGlvbjsKLQotCi0v
KioKLSAqIEZpZWxkIHR5cGUgY29kZXMsIHRha2VuIGZyb20gcHJvdG8yL3B1YmxpYy93aXJlX2Zv
cm1hdF9saXRlLmguCi0gKiBAZW51bSB7bnVtYmVyfQotICovCi1qc3BiLkJpbmFyeUNvbnN0YW50
cy5GaWVsZFR5cGUgPSB7Ci0gIElOVkFMSUQ6IC0xLAotICBET1VCTEU6IDEsCi0gIEZMT0FUOiAy
LAotICBJTlQ2NDogMywKLSAgVUlOVDY0OiA0LAotICBJTlQzMjogNSwKLSAgRklYRUQ2NDogNiwK
LSAgRklYRUQzMjogNywKLSAgQk9PTDogOCwKLSAgU1RSSU5HOiA5LAotICBHUk9VUDogMTAsCi0g
IE1FU1NBR0U6IDExLAotICBCWVRFUzogMTIsCi0gIFVJTlQzMjogMTMsCi0gIEVOVU06IDE0LAot
ICBTRklYRUQzMjogMTUsCi0gIFNGSVhFRDY0OiAxNiwKLSAgU0lOVDMyOiAxNywKLSAgU0lOVDY0
OiAxOCwKLQotICAvLyBFeHRlbmRlZCB0eXBlcyBmb3IgSmF2YXNjcmlwdAotCi0gIEZIQVNINjQ6
IDMwLCAvLyA2NC1iaXQgaGFzaCBzdHJpbmcsIGZpeGVkLWxlbmd0aCBlbmNvZGluZy4KLSAgVkhB
U0g2NDogMzEgIC8vIDY0LWJpdCBoYXNoIHN0cmluZywgdmFyaW50IGVuY29kaW5nLgotfTsKLQot
Ci0vKioKLSAqIFdpcmUtZm9ybWF0IHR5cGUgY29kZXMsIHRha2VuIGZyb20gcHJvdG8yL3B1Ymxp
Yy93aXJlX2Zvcm1hdF9saXRlLmguCi0gKiBAZW51bSB7bnVtYmVyfQotICovCi1qc3BiLkJpbmFy
eUNvbnN0YW50cy5XaXJlVHlwZSA9IHsKLSAgSU5WQUxJRDogLTEsCi0gIFZBUklOVDogMCwKLSAg
RklYRUQ2NDogMSwKLSAgREVMSU1JVEVEOiAyLAotICBTVEFSVF9HUk9VUDogMywKLSAgRU5EX0dS
T1VQOiA0LAotICBGSVhFRDMyOiA1Ci19OwotCi0KLS8qKgotICogVHJhbnNsYXRlcyBmaWVsZCB0
eXBlIHRvIHdpcmUgdHlwZS4KLSAqIEBwYXJhbSB7anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRU
eXBlfSBmaWVsZFR5cGUKLSAqIEByZXR1cm4ge2pzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBl
fQotICovCi1qc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGVUb1dpcmVUeXBlID0gZnVuY3Rp
b24oZmllbGRUeXBlKSB7Ci0gIHZhciBmaWVsZFR5cGVzID0ganNwYi5CaW5hcnlDb25zdGFudHMu
RmllbGRUeXBlOwotICB2YXIgd2lyZVR5cGVzID0ganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5
cGU7Ci0gIHN3aXRjaCAoZmllbGRUeXBlKSB7Ci0gICAgY2FzZSBmaWVsZFR5cGVzLklOVDMyOgot
ICAgIGNhc2UgZmllbGRUeXBlcy5JTlQ2NDoKLSAgICBjYXNlIGZpZWxkVHlwZXMuVUlOVDMyOgot
ICAgIGNhc2UgZmllbGRUeXBlcy5VSU5UNjQ6Ci0gICAgY2FzZSBmaWVsZFR5cGVzLlNJTlQzMjoK
LSAgICBjYXNlIGZpZWxkVHlwZXMuU0lOVDY0OgotICAgIGNhc2UgZmllbGRUeXBlcy5CT09MOgot
ICAgIGNhc2UgZmllbGRUeXBlcy5FTlVNOgotICAgIGNhc2UgZmllbGRUeXBlcy5WSEFTSDY0Ogot
ICAgICAgcmV0dXJuIHdpcmVUeXBlcy5WQVJJTlQ7Ci0KLSAgICBjYXNlIGZpZWxkVHlwZXMuRE9V
QkxFOgotICAgIGNhc2UgZmllbGRUeXBlcy5GSVhFRDY0OgotICAgIGNhc2UgZmllbGRUeXBlcy5T
RklYRUQ2NDoKLSAgICBjYXNlIGZpZWxkVHlwZXMuRkhBU0g2NDoKLSAgICAgIHJldHVybiB3aXJl
VHlwZXMuRklYRUQ2NDsKLQotICAgIGNhc2UgZmllbGRUeXBlcy5TVFJJTkc6Ci0gICAgY2FzZSBm
aWVsZFR5cGVzLk1FU1NBR0U6Ci0gICAgY2FzZSBmaWVsZFR5cGVzLkJZVEVTOgotICAgICAgcmV0
dXJuIHdpcmVUeXBlcy5ERUxJTUlURUQ7Ci0KLSAgICBjYXNlIGZpZWxkVHlwZXMuRkxPQVQ6Ci0g
ICAgY2FzZSBmaWVsZFR5cGVzLkZJWEVEMzI6Ci0gICAgY2FzZSBmaWVsZFR5cGVzLlNGSVhFRDMy
OgotICAgICAgcmV0dXJuIHdpcmVUeXBlcy5GSVhFRDMyOwotCi0gICAgY2FzZSBmaWVsZFR5cGVz
LklOVkFMSUQ6Ci0gICAgY2FzZSBmaWVsZFR5cGVzLkdST1VQOgotICAgIGRlZmF1bHQ6Ci0gICAg
ICByZXR1cm4gd2lyZVR5cGVzLklOVkFMSUQ7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBGbGFnIHRv
IGluZGljYXRlIGEgbWlzc2luZyBmaWVsZC4KLSAqIEBjb25zdCB7bnVtYmVyfQotICovCi1qc3Bi
LkJpbmFyeUNvbnN0YW50cy5JTlZBTElEX0ZJRUxEX05VTUJFUiA9IC0xOwotCi0KLS8qKgotICog
VGhlIHNtYWxsZXN0IGRlbm9ybWFsIGZsb2F0MzIgdmFsdWUuCi0gKiBAY29uc3Qge251bWJlcn0K
LSAqLwotanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9FUFMgPSAxLjQwMTI5ODQ2NDMyNDgx
N2UtNDU7Ci0KLQotLyoqCi0gKiBUaGUgc21hbGxlc3Qgbm9ybWFsIGZsb2F0NjQgdmFsdWUuCi0g
KiBAY29uc3Qge251bWJlcn0KLSAqLwotanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NSU4g
PSAxLjE3NTQ5NDM1MDgyMjI4NzVlLTM4OwotCi0KLS8qKgotICogVGhlIGxhcmdlc3QgZmluaXRl
IGZsb2F0MzIgdmFsdWUuCi0gKiBAY29uc3Qge251bWJlcn0KLSAqLwotanNwYi5CaW5hcnlDb25z
dGFudHMuRkxPQVQzMl9NQVggPSAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4OwotCi0KLS8qKgotICog
VGhlIHNtYWxsZXN0IGRlbm9ybWFsIGZsb2F0NjQgdmFsdWUuCi0gKiBAY29uc3Qge251bWJlcn0K
LSAqLwotanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9FUFMgPSA1ZS0zMjQ7Ci0KLQotLyoq
Ci0gKiBUaGUgc21hbGxlc3Qgbm9ybWFsIGZsb2F0NjQgdmFsdWUuCi0gKiBAY29uc3Qge251bWJl
cn0KLSAqLwotanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NSU4gPSAyLjIyNTA3Mzg1ODUw
NzIwMTRlLTMwODsKLQotCi0vKioKLSAqIFRoZSBsYXJnZXN0IGZpbml0ZSBmbG9hdDY0IHZhbHVl
LgotICogQGNvbnN0IHtudW1iZXJ9Ci0gKi8KLWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRf
TUFYID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7Ci0KLQotLyoqCi0gKiBDb252ZW5pZW5jZSBj
b25zdGFudCBlcXVhbCB0byAyXjIwLgotICogQGNvbnN0IHtudW1iZXJ9Ci0gKi8KLWpzcGIuQmlu
YXJ5Q29uc3RhbnRzLlRXT19UT18yMCA9IDEwNDg1NzY7Ci0KLQotLyoqCi0gKiBDb252ZW5pZW5j
ZSBjb25zdGFudCBlcXVhbCB0byAyXjIzLgotICogQGNvbnN0IHtudW1iZXJ9Ci0gKi8KLWpzcGIu
QmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMyA9IDgzODg2MDg7Ci0KLQotLyoqCi0gKiBDb252ZW5p
ZW5jZSBjb25zdGFudCBlcXVhbCB0byAyXjMxLgotICogQGNvbnN0IHtudW1iZXJ9Ci0gKi8KLWpz
cGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSA9IDIxNDc0ODM2NDg7Ci0KLQotLyoqCi0gKiBD
b252ZW5pZW5jZSBjb25zdGFudCBlcXVhbCB0byAyXjMyLgotICogQGNvbnN0IHtudW1iZXJ9Ci0g
Ki8KLWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiA9IDQyOTQ5NjcyOTY7Ci0KLQotLyoq
Ci0gKiBDb252ZW5pZW5jZSBjb25zdGFudCBlcXVhbCB0byAyXjUyLgotICogQGNvbnN0IHtudW1i
ZXJ9Ci0gKi8KLWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT181MiA9IDQ1MDM1OTk2MjczNzA0
OTY7Ci0KLQotLyoqCi0gKiBDb252ZW5pZW5jZSBjb25zdGFudCBlcXVhbCB0byAyXjYzLgotICog
QGNvbnN0IHtudW1iZXJ9Ci0gKi8KLWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyA9IDky
MjMzNzIwMzY4NTQ3NzU4MDg7Ci0KLQotLyoqCi0gKiBDb252ZW5pZW5jZSBjb25zdGFudCBlcXVh
bCB0byAyXjY0LgotICogQGNvbnN0IHtudW1iZXJ9Ci0gKi8KLWpzcGIuQmluYXJ5Q29uc3RhbnRz
LlRXT19UT182NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2OwotCi0KLS8qKgotICogRWlnaHQtY2hh
cmFjdGVyIHN0cmluZyBvZiB6ZXJvcywgdXNlZCBhcyB0aGUgZGVmYXVsdCA2NC1iaXQgaGFzaCB2
YWx1ZS4KLSAqIEBjb25zdCB7c3RyaW5nfQotICovCi1qc3BiLkJpbmFyeUNvbnN0YW50cy5aRVJP
X0hBU0ggPSAnXDBcMFwwXDBcMFwwXDBcMCc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS9kZWNvZGVy
LmpzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9qcy9iaW5hcnkvZGVjb2Rlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDEwOTRhMzY4ODFlY2UyZGVlODIwOGJkZDliMmI2OTBhMTY1MzZjMS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS9kZWNvZGVyLmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMTAwNyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFRoaXMgZmlsZSBjb250YWlucyB1dGlsaXRp
ZXMgZm9yIGRlY29kaW5nIHByaW1pdGl2ZSB2YWx1ZXMKLSAqIChzaWduZWQgYW5kIHVuc2lnbmVk
IGludGVnZXJzLCB2YXJpbnRzLCBib29sZWFucywgZW51bXMsIGhhc2hlcywgc3RyaW5ncywKLSAq
IGFuZCByYXcgYnl0ZXMpIGVtYmVkZGVkIGluIFVpbnQ4QXJyYXlzIGludG8gdGhlaXIgY29ycmVz
cG9uZGluZyBKYXZhc2NyaXB0Ci0gKiB0eXBlcy4KLSAqCi0gKiBNYWpvciBjYXZlYXQgLSBKYXZh
c2NyaXB0IGlzIHVuYWJsZSB0byBhY2N1cmF0ZWx5IHJlcHJlc2VudCBpbnRlZ2VycyBsYXJnZXIK
LSAqIHRoYW4gMl41MyBkdWUgdG8gaXRzIHVzZSBvZiBhIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRp
bmcgcG9pbnQgZm9ybWF0IG9yIGFsbAotICogbnVtYmVycy4gSWYgeW91IG5lZWQgdG8gZ3VhcmFu
dGVlIHRoYXQgNjQtYml0IHZhbHVlcyBzdXJ2aXZlIHdpdGggYWxsIGJpdHMKLSAqIGludGFjdCwg
eW91IF9tdXN0XyByZWFkIHRoZW0gdXNpbmcgb25lIG9mIHRoZSBIYXNoNjQgbWV0aG9kcywgd2hp
Y2ggcmV0dXJuCi0gKiBhbiA4LWNoYXJhY3RlciBzdHJpbmcuCi0gKgotICogQGF1dGhvciBhYXBw
bGVieUBnb29nbGUuY29tIChBdXN0aW4gQXBwbGVieSkKLSAqLwotCi1nb29nLnByb3ZpZGUoJ2pz
cGIuQmluYXJ5RGVjb2RlcicpOwotZ29vZy5wcm92aWRlKCdqc3BiLkJpbmFyeUl0ZXJhdG9yJyk7
Ci0KLWdvb2cucmVxdWlyZSgnZ29vZy5hc3NlcnRzJyk7Ci1nb29nLnJlcXVpcmUoJ2pzcGIudXRp
bHMnKTsKLQotCi0KLS8qKgotICogU2ltcGxlIGhlbHBlciBjbGFzcyBmb3IgdHJhdmVyc2luZyB0
aGUgY29udGVudHMgb2YgcmVwZWF0ZWQgc2NhbGFyIGZpZWxkcy4KLSAqIHRoYXQgbWF5IG9yIG1h
eSBub3QgaGF2ZSBiZWVuIHBhY2tlZCBpbnRvIGEgd2lyZS1mb3JtYXQgYmxvYi4KLSAqIEBwYXJh
bSB7P2pzcGIuQmluYXJ5RGVjb2Rlcj19IG9wdF9kZWNvZGVyCi0gKiBAcGFyYW0gez9mdW5jdGlv
bih0aGlzOmpzcGIuQmluYXJ5RGVjb2Rlcik6KG51bWJlcnxib29sZWFufHN0cmluZyk9fQotICog
ICAgIG9wdF9uZXh0IFRoZSBkZWNvZGVyIG1ldGhvZCB0byB1c2UgZm9yIG5leHQoKS4KLSAqIEBw
YXJhbSB7P0FycmF5LjxudW1iZXJ8Ym9vbGVhbnxzdHJpbmc+PX0gb3B0X2VsZW1lbnRzCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBzdHJ1Y3QKLSAqLwotanNwYi5CaW5hcnlJdGVyYXRvciA9IGZ1bmN0
aW9uKG9wdF9kZWNvZGVyLCBvcHRfbmV4dCwgb3B0X2VsZW1lbnRzKSB7Ci0gIC8qKiBAcHJpdmF0
ZSB7anNwYi5CaW5hcnlEZWNvZGVyfSAqLwotICB0aGlzLmRlY29kZXJfID0gbnVsbDsKLQotICAv
KioKLSAgICogVGhlIEJpbmFyeURlY29kZXIgbWVtYmVyIGZ1bmN0aW9uIHVzZWQgd2hlbiBpdGVy
YXRpbmcgb3ZlciBwYWNrZWQgZGF0YS4KLSAgICogQHByaXZhdGUgez9mdW5jdGlvbih0aGlzOmpz
cGIuQmluYXJ5RGVjb2Rlcik6KG51bWJlcnxib29sZWFufHN0cmluZyl9Ci0gICAqLwotICB0aGlz
Lm5leHRNZXRob2RfID0gbnVsbDsKLQotICAvKiogQHByaXZhdGUge0FycmF5LjxudW1iZXI+fSAq
LwotICB0aGlzLmVsZW1lbnRzXyA9IG51bGw7Ci0KLSAgLyoqIEBwcml2YXRlIHtudW1iZXJ9ICov
Ci0gIHRoaXMuY3Vyc29yXyA9IDA7Ci0KLSAgLyoqIEBwcml2YXRlIHtudW1iZXJ8Ym9vbGVhbnxz
dHJpbmd8bnVsbH0gKi8KLSAgdGhpcy5uZXh0VmFsdWVfID0gbnVsbDsKLQotICAvKiogQHByaXZh
dGUge2Jvb2xlYW59ICovCi0gIHRoaXMuYXRFbmRfID0gdHJ1ZTsKLQotICB0aGlzLmluaXRfKG9w
dF9kZWNvZGVyLCBvcHRfbmV4dCwgb3B0X2VsZW1lbnRzKTsKLX07Ci0KLQotLyoqCi0gKiBAcGFy
YW0gez9qc3BiLkJpbmFyeURlY29kZXI9fSBvcHRfZGVjb2RlcgotICogQHBhcmFtIHs/ZnVuY3Rp
b24odGhpczpqc3BiLkJpbmFyeURlY29kZXIpOihudW1iZXJ8Ym9vbGVhbnxzdHJpbmcpPX0KLSAq
ICAgICBvcHRfbmV4dCBUaGUgZGVjb2RlciBtZXRob2QgdG8gdXNlIGZvciBuZXh0KCkuCi0gKiBA
cGFyYW0gez9BcnJheS48bnVtYmVyfGJvb2xlYW58c3RyaW5nPj19IG9wdF9lbGVtZW50cwotICog
QHByaXZhdGUKLSAqLwotanNwYi5CaW5hcnlJdGVyYXRvci5wcm90b3R5cGUuaW5pdF8gPQotICAg
IGZ1bmN0aW9uKG9wdF9kZWNvZGVyLCBvcHRfbmV4dCwgb3B0X2VsZW1lbnRzKSB7Ci0gIGlmIChv
cHRfZGVjb2RlciAmJiBvcHRfbmV4dCkgewotICAgIHRoaXMuZGVjb2Rlcl8gPSBvcHRfZGVjb2Rl
cjsKLSAgICB0aGlzLm5leHRNZXRob2RfID0gb3B0X25leHQ7Ci0gIH0KLSAgdGhpcy5lbGVtZW50
c18gPSBvcHRfZWxlbWVudHMgPyBvcHRfZWxlbWVudHMgOiBudWxsOwotICB0aGlzLmN1cnNvcl8g
PSAwOwotICB0aGlzLm5leHRWYWx1ZV8gPSBudWxsOwotICB0aGlzLmF0RW5kXyA9ICF0aGlzLmRl
Y29kZXJfICYmICF0aGlzLmVsZW1lbnRzXzsKLQotICB0aGlzLm5leHQoKTsKLX07Ci0KLQotLyoq
Ci0gKiBHbG9iYWwgcG9vbCBvZiBCaW5hcnlJdGVyYXRvciBpbnN0YW5jZXMuCi0gKiBAcHJpdmF0
ZSB7IUFycmF5LjwhanNwYi5CaW5hcnlJdGVyYXRvcj59Ci0gKi8KLWpzcGIuQmluYXJ5SXRlcmF0
b3IuaW5zdGFuY2VDYWNoZV8gPSBbXTsKLQotCi0vKioKLSAqIEFsbG9jYXRlcyBhIEJpbmFyeUl0
ZXJhdG9yIGZyb20gdGhlIGNhY2hlLCBjcmVhdGluZyBhIG5ldyBvbmUgaWYgdGhlIGNhY2hlCi0g
KiBpcyBlbXB0eS4KLSAqIEBwYXJhbSB7P2pzcGIuQmluYXJ5RGVjb2Rlcj19IG9wdF9kZWNvZGVy
Ci0gKiBAcGFyYW0gez9mdW5jdGlvbih0aGlzOmpzcGIuQmluYXJ5RGVjb2Rlcik6KG51bWJlcnxi
b29sZWFufHN0cmluZyk9fQotICogICAgIG9wdF9uZXh0IFRoZSBkZWNvZGVyIG1ldGhvZCB0byB1
c2UgZm9yIG5leHQoKS4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXJ8Ym9vbGVhbnxzdHJpbmc+
PX0gb3B0X2VsZW1lbnRzCi0gKiBAcmV0dXJuIHshanNwYi5CaW5hcnlJdGVyYXRvcn0KLSAqLwot
anNwYi5CaW5hcnlJdGVyYXRvci5hbGxvYyA9IGZ1bmN0aW9uKG9wdF9kZWNvZGVyLCBvcHRfbmV4
dCwgb3B0X2VsZW1lbnRzKSB7Ci0gIGlmIChqc3BiLkJpbmFyeUl0ZXJhdG9yLmluc3RhbmNlQ2Fj
aGVfLmxlbmd0aCkgewotICAgIHZhciBpdGVyYXRvciA9IGpzcGIuQmluYXJ5SXRlcmF0b3IuaW5z
dGFuY2VDYWNoZV8ucG9wKCk7Ci0gICAgaXRlcmF0b3IuaW5pdF8ob3B0X2RlY29kZXIsIG9wdF9u
ZXh0LCBvcHRfZWxlbWVudHMpOwotICAgIHJldHVybiBpdGVyYXRvcjsKLSAgfSBlbHNlIHsKLSAg
ICByZXR1cm4gbmV3IGpzcGIuQmluYXJ5SXRlcmF0b3Iob3B0X2RlY29kZXIsIG9wdF9uZXh0LCBv
cHRfZWxlbWVudHMpOwotICB9Ci19OwotCi0KLS8qKgotICogUHV0cyB0aGlzIGluc3RhbmNlIGJh
Y2sgaW4gdGhlIGluc3RhbmNlIGNhY2hlLgotICovCi1qc3BiLkJpbmFyeUl0ZXJhdG9yLnByb3Rv
dHlwZS5mcmVlID0gZnVuY3Rpb24oKSB7Ci0gIHRoaXMuY2xlYXIoKTsKLSAgaWYgKGpzcGIuQmlu
YXJ5SXRlcmF0b3IuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoIDwgMTAwKSB7Ci0gICAganNwYi5CaW5h
cnlJdGVyYXRvci5pbnN0YW5jZUNhY2hlXy5wdXNoKHRoaXMpOwotICB9Ci19OwotCi0KLS8qKgot
ICogQ2xlYXJzIHRoZSBpdGVyYXRvci4KLSAqLwotanNwYi5CaW5hcnlJdGVyYXRvci5wcm90b3R5
cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKLSAgaWYgKHRoaXMuZGVjb2Rlcl8pIHsKLSAgICB0aGlz
LmRlY29kZXJfLmZyZWUoKTsKLSAgfQotICB0aGlzLmRlY29kZXJfID0gbnVsbDsKLSAgdGhpcy5u
ZXh0TWV0aG9kXyA9IG51bGw7Ci0gIHRoaXMuZWxlbWVudHNfID0gbnVsbDsKLSAgdGhpcy5jdXJz
b3JfID0gMDsKLSAgdGhpcy5uZXh0VmFsdWVfID0gbnVsbDsKLSAgdGhpcy5hdEVuZF8gPSB0cnVl
OwotfTsKLQotCi0vKioKLSAqIFJldHVybnMgdGhlIGVsZW1lbnQgYXQgdGhlIGl0ZXJhdG9yLCBv
ciBudWxsIGlmIHRoZSBpdGVyYXRvciBpcyBpbnZhbGlkIG9yCi0gKiBwYXN0IHRoZSBlbmQgb2Yg
dGhlIGRlY29kZXIvYXJyYXkuCi0gKiBAcmV0dXJuIHtudW1iZXJ8Ym9vbGVhbnxzdHJpbmd8bnVs
bH0KLSAqLwotanNwYi5CaW5hcnlJdGVyYXRvci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oKSB7
Ci0gIHJldHVybiB0aGlzLm5leHRWYWx1ZV87Ci19OwotCi0KLS8qKgotICogUmV0dXJucyB0cnVl
IGlmIHRoZSBpdGVyYXRvciBpcyBhdCB0aGUgZW5kIG9mIHRoZSBkZWNvZGVyL2FycmF5LgotICog
QHJldHVybiB7Ym9vbGVhbn0KLSAqLwotanNwYi5CaW5hcnlJdGVyYXRvci5wcm90b3R5cGUuYXRF
bmQgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIHRoaXMuYXRFbmRfOwotfTsKLQotCi0vKioKLSAq
IFJldHVybnMgdGhlIGVsZW1lbnQgYXQgdGhlIGl0ZXJhdG9yIGFuZCBzdGVwcyB0byB0aGUgbmV4
dCBlbGVtZW50LAotICogZXF1aXZhbGVudCB0byAnKnBvaW50ZXIrKycgaW4gQy4KLSAqIEByZXR1
cm4ge251bWJlcnxib29sZWFufHN0cmluZ3xudWxsfQotICovCi1qc3BiLkJpbmFyeUl0ZXJhdG9y
LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7Ci0gIHZhciBsYXN0VmFsdWUgPSB0aGlzLm5l
eHRWYWx1ZV87Ci0gIGlmICh0aGlzLmRlY29kZXJfKSB7Ci0gICAgaWYgKHRoaXMuZGVjb2Rlcl8u
YXRFbmQoKSkgewotICAgICAgdGhpcy5uZXh0VmFsdWVfID0gbnVsbDsKLSAgICAgIHRoaXMuYXRF
bmRfID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5uZXh0VmFsdWVfID0gdGhpcy5u
ZXh0TWV0aG9kXy5jYWxsKHRoaXMuZGVjb2Rlcl8pOwotICAgIH0KLSAgfSBlbHNlIGlmICh0aGlz
LmVsZW1lbnRzXykgewotICAgIGlmICh0aGlzLmN1cnNvcl8gPT0gdGhpcy5lbGVtZW50c18ubGVu
Z3RoKSB7Ci0gICAgICB0aGlzLm5leHRWYWx1ZV8gPSBudWxsOwotICAgICAgdGhpcy5hdEVuZF8g
PSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLm5leHRWYWx1ZV8gPSB0aGlzLmVsZW1l
bnRzX1t0aGlzLmN1cnNvcl8rK107Ci0gICAgfQotICB9Ci0gIHJldHVybiBsYXN0VmFsdWU7Ci19
OwotCi0KLQotLyoqCi0gKiBCaW5hcnlEZWNvZGVyIGltcGxlbWVudHMgdGhlIGRlY29kZXJzIGZv
ciBhbGwgdGhlIHdpcmUgdHlwZXMgc3BlY2lmaWVkIGluCi0gKiBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvZW5jb2RpbmcuCi0gKgotICogQHBhcmFt
IHtqc3BiLkJ5dGVTb3VyY2U9fSBvcHRfYnl0ZXMgVGhlIGJ5dGVzIHdlJ3JlIHJlYWRpbmcgZnJv
bS4KLSAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X3N0YXJ0IFRoZSBvcHRpb25hbCBvZmZzZXQgdG8g
c3RhcnQgcmVhZGluZyBhdC4KLSAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2xlbmd0aCBUaGUgb3B0
aW9uYWwgbGVuZ3RoIG9mIHRoZSBibG9jayB0byByZWFkIC0KLSAqICAgICB3ZSdsbCB0aHJvdyBh
biBhc3NlcnRpb24gaWYgd2UgZ28gb2ZmIHRoZSBlbmQgb2YgdGhlIGJsb2NrLgotICogQGNvbnN0
cnVjdG9yCi0gKiBAc3RydWN0Ci0gKi8KLWpzcGIuQmluYXJ5RGVjb2RlciA9IGZ1bmN0aW9uKG9w
dF9ieXRlcywgb3B0X3N0YXJ0LCBvcHRfbGVuZ3RoKSB7Ci0gIC8qKgotICAgKiBUeXBlZCBieXRl
LXdpc2UgdmlldyBvZiB0aGUgc291cmNlIGJ1ZmZlci4KLSAgICogQHByaXZhdGUgez9VaW50OEFy
cmF5fQotICAgKi8KLSAgdGhpcy5ieXRlc18gPSBudWxsOwotCi0gIC8qKgotICAgKiBTdGFydCBw
b2ludCBvZiB0aGUgYmxvY2sgdG8gcmVhZC4KLSAgICogQHByaXZhdGUge251bWJlcn0KLSAgICov
Ci0gIHRoaXMuc3RhcnRfID0gMDsKLQotICAvKioKLSAgICogRW5kIHBvaW50IG9mIHRoZSBibG9j
ayB0byByZWFkLgotICAgKiBAcHJpdmF0ZSB7bnVtYmVyfQotICAgKi8KLSAgdGhpcy5lbmRfID0g
MDsKLQotICAvKioKLSAgICogQ3VycmVudCByZWFkIGxvY2F0aW9uIGluIGJ5dGVzXy4KLSAgICog
QHByaXZhdGUge251bWJlcn0KLSAgICovCi0gIHRoaXMuY3Vyc29yXyA9IDA7Ci0KLSAgLyoqCi0g
ICAqIFRlbXBvcmFyeSBzdG9yYWdlIGZvciB0aGUgbG93IDMyIGJpdHMgb2YgNjQtYml0IGRhdGEg
dHlwZXMgdGhhdCB3ZSdyZQotICAgKiBkZWNvZGluZy4KLSAgICogQHByaXZhdGUge251bWJlcn0K
LSAgICovCi0gIHRoaXMudGVtcExvd18gPSAwOwotCi0gIC8qKgotICAgKiBUZW1wb3Jhcnkgc3Rv
cmFnZSBmb3IgdGhlIGhpZ2ggMzIgYml0cyBvZiA2NC1iaXQgZGF0YSB0eXBlcyB0aGF0IHdlJ3Jl
Ci0gICAqIGRlY29kaW5nLgotICAgKiBAcHJpdmF0ZSB7bnVtYmVyfQotICAgKi8KLSAgdGhpcy50
ZW1wSGlnaF8gPSAwOwotCi0gIC8qKgotICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIGRlY29kZXIg
ZW5jb3VudGVyZWQgYW4gZXJyb3IgZHVlIHRvIGNvcnJ1cHQgZGF0YS4KLSAgICogQHByaXZhdGUg
e2Jvb2xlYW59Ci0gICAqLwotICB0aGlzLmVycm9yXyA9IGZhbHNlOwotCi0gIGlmIChvcHRfYnl0
ZXMpIHsKLSAgICB0aGlzLnNldEJsb2NrKG9wdF9ieXRlcywgb3B0X3N0YXJ0LCBvcHRfbGVuZ3Ro
KTsKLSAgfQotfTsKLQotCi0vKioKLSAqIEdsb2JhbCBwb29sIG9mIEJpbmFyeURlY29kZXIgaW5z
dGFuY2VzLgotICogQHByaXZhdGUgeyFBcnJheS48IWpzcGIuQmluYXJ5RGVjb2Rlcj59Ci0gKi8K
LWpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXyA9IFtdOwotCi0KLS8qKgotICogUG9w
cyBhbiBpbnN0YW5jZSBvZmYgdGhlIGluc3RhbmNlIGNhY2hlLCBvciBjcmVhdGVzIG9uZSBpZiB0
aGUgY2FjaGUgaXMKLSAqIGVtcHR5LgotICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2U9fSBvcHRf
Ynl0ZXMgVGhlIGJ5dGVzIHdlJ3JlIHJlYWRpbmcgZnJvbS4KLSAqIEBwYXJhbSB7bnVtYmVyPX0g
b3B0X3N0YXJ0IFRoZSBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgcmVhZGluZyBhdC4KLSAqIEBw
YXJhbSB7bnVtYmVyPX0gb3B0X2xlbmd0aCBUaGUgb3B0aW9uYWwgbGVuZ3RoIG9mIHRoZSBibG9j
ayB0byByZWFkIC0KLSAqICAgICB3ZSdsbCB0aHJvdyBhbiBhc3NlcnRpb24gaWYgd2UgZ28gb2Zm
IHRoZSBlbmQgb2YgdGhlIGJsb2NrLgotICogQHJldHVybiB7IWpzcGIuQmluYXJ5RGVjb2Rlcn0K
LSAqLwotanNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jID0gZnVuY3Rpb24ob3B0X2J5dGVzLCBvcHRf
c3RhcnQsIG9wdF9sZW5ndGgpIHsKLSAgaWYgKGpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNh
Y2hlXy5sZW5ndGgpIHsKLSAgICB2YXIgbmV3RGVjb2RlciA9IGpzcGIuQmluYXJ5RGVjb2Rlci5p
bnN0YW5jZUNhY2hlXy5wb3AoKTsKLSAgICBpZiAob3B0X2J5dGVzKSB7Ci0gICAgICBuZXdEZWNv
ZGVyLnNldEJsb2NrKG9wdF9ieXRlcywgb3B0X3N0YXJ0LCBvcHRfbGVuZ3RoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG5ld0RlY29kZXI7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG5ldyBqc3BiLkJp
bmFyeURlY29kZXIob3B0X2J5dGVzLCBvcHRfc3RhcnQsIG9wdF9sZW5ndGgpOwotICB9Ci19Owot
Ci0KLS8qKgotICogUHV0cyB0aGlzIGluc3RhbmNlIGJhY2sgaW4gdGhlIGluc3RhbmNlIGNhY2hl
LgotICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmZyZWUgPSBmdW5jdGlvbigpIHsK
LSAgdGhpcy5jbGVhcigpOwotICBpZiAoanNwYi5CaW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVf
Lmxlbmd0aCA8IDEwMCkgewotICAgIGpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5w
dXNoKHRoaXMpOwotICB9Ci19OwotCi0KLS8qKgotICogTWFrZXMgYSBjb3B5IG9mIHRoaXMgZGVj
b2Rlci4KLSAqIEByZXR1cm4geyFqc3BiLkJpbmFyeURlY29kZXJ9Ci0gKi8KLWpzcGIuQmluYXJ5
RGVjb2Rlci5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIGpzcGIuQmlu
YXJ5RGVjb2Rlci5hbGxvYyh0aGlzLmJ5dGVzXywKLSAgICAgIHRoaXMuc3RhcnRfLCB0aGlzLmVu
ZF8gLSB0aGlzLnN0YXJ0Xyk7Ci19OwotCi0KLS8qKgotICogQ2xlYXJzIHRoZSBkZWNvZGVyLgot
ICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7Ci0g
IHRoaXMuYnl0ZXNfID0gbnVsbDsKLSAgdGhpcy5zdGFydF8gPSAwOwotICB0aGlzLmVuZF8gPSAw
OwotICB0aGlzLmN1cnNvcl8gPSAwOwotICB0aGlzLmVycm9yXyA9IGZhbHNlOwotfTsKLQotCi0v
KioKLSAqIFJldHVybnMgdGhlIHJhdyBidWZmZXIuCi0gKiBAcmV0dXJuIHs/VWludDhBcnJheX0g
VGhlIHJhdyBidWZmZXIuCi0gKi8KLWpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0QnVm
ZmVyID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB0aGlzLmJ5dGVzXzsKLX07Ci0KLQotLyoqCi0g
KiBDaGFuZ2VzIHRoZSBibG9jayBvZiBieXRlcyB3ZSdyZSBkZWNvZGluZy4KLSAqIEBwYXJhbSB7
IWpzcGIuQnl0ZVNvdXJjZX0gZGF0YSBUaGUgYnl0ZXMgd2UncmUgcmVhZGluZyBmcm9tLgotICog
QHBhcmFtIHtudW1iZXI9fSBvcHRfc3RhcnQgVGhlIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCBy
ZWFkaW5nIGF0LgotICogQHBhcmFtIHtudW1iZXI9fSBvcHRfbGVuZ3RoIFRoZSBvcHRpb25hbCBs
ZW5ndGggb2YgdGhlIGJsb2NrIHRvIHJlYWQgLQotICogICAgIHdlJ2xsIHRocm93IGFuIGFzc2Vy
dGlvbiBpZiB3ZSBnbyBvZmYgdGhlIGVuZCBvZiB0aGUgYmxvY2suCi0gKi8KLWpzcGIuQmluYXJ5
RGVjb2Rlci5wcm90b3R5cGUuc2V0QmxvY2sgPQotICAgIGZ1bmN0aW9uKGRhdGEsIG9wdF9zdGFy
dCwgb3B0X2xlbmd0aCkgewotICB0aGlzLmJ5dGVzXyA9IGpzcGIudXRpbHMuYnl0ZVNvdXJjZVRv
VWludDhBcnJheShkYXRhKTsKLSAgdGhpcy5zdGFydF8gPSBnb29nLmlzRGVmKG9wdF9zdGFydCkg
PyBvcHRfc3RhcnQgOiAwOwotICB0aGlzLmVuZF8gPQotICAgICAgZ29vZy5pc0RlZihvcHRfbGVu
Z3RoKSA/IHRoaXMuc3RhcnRfICsgb3B0X2xlbmd0aCA6IHRoaXMuYnl0ZXNfLmxlbmd0aDsKLSAg
dGhpcy5jdXJzb3JfID0gdGhpcy5zdGFydF87Ci19OwotCi0KLS8qKgotICogQHJldHVybiB7bnVt
YmVyfQotICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmdldEVuZCA9IGZ1bmN0aW9u
KCkgewotICByZXR1cm4gdGhpcy5lbmRfOwotfTsKLQotCi0vKioKLSAqIEBwYXJhbSB7bnVtYmVy
fSBlbmQKLSAqLwotanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5zZXRFbmQgPSBmdW5jdGlv
bihlbmQpIHsKLSAgdGhpcy5lbmRfID0gZW5kOwotfTsKLQotCi0vKioKLSAqIE1vdmVzIHRoZSBy
ZWFkIGN1cnNvciBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgYmxvY2suCi0gKi8KLWpzcGIuQmlu
YXJ5RGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKLSAgdGhpcy5jdXJzb3Jf
ID0gdGhpcy5zdGFydF87Ci19OwotCi0KLS8qKgotICogUmV0dXJucyB0aGUgaW50ZXJuYWwgcmVh
ZCBjdXJzb3IuCi0gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbnRlcm5hbCByZWFkIGN1cnNvci4K
LSAqLwotanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5nZXRDdXJzb3IgPSBmdW5jdGlvbigp
IHsKLSAgcmV0dXJuIHRoaXMuY3Vyc29yXzsKLX07Ci0KLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBp
bnRlcm5hbCByZWFkIGN1cnNvci4KLSAqIEBwYXJhbSB7bnVtYmVyfSBjdXJzb3IgVGhlIG5ldyBj
dXJzb3IuCi0gKi8KLWpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuc2V0Q3Vyc29yID0gZnVu
Y3Rpb24oY3Vyc29yKSB7Ci0gIHRoaXMuY3Vyc29yXyA9IGN1cnNvcjsKLX07Ci0KLQotLyoqCi0g
KiBBZHZhbmNlcyB0aGUgc3RyZWFtIGN1cnNvciBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVz
LgotICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWR2YW5j
ZSBieS4KLSAqLwotanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5hZHZhbmNlID0gZnVuY3Rp
b24oY291bnQpIHsKLSAgdGhpcy5jdXJzb3JfICs9IGNvdW50OwotICBnb29nLmFzc2VydHMuYXNz
ZXJ0KHRoaXMuY3Vyc29yXyA8PSB0aGlzLmVuZF8pOwotfTsKLQotCi0vKioKLSAqIFJldHVybnMg
dHJ1ZSBpZiB0aGlzIGRlY29kZXIgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suCi0gKiBAcmV0
dXJuIHtib29sZWFufQotICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmF0RW5kID0g
ZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB0aGlzLmN1cnNvcl8gPT0gdGhpcy5lbmRfOwotfTsKLQot
Ci0vKioKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGRlY29kZXIgaXMgYXQgdGhlIGVuZCBvZiB0
aGUgYmxvY2suCi0gKiBAcmV0dXJuIHtib29sZWFufQotICovCi1qc3BiLkJpbmFyeURlY29kZXIu
cHJvdG90eXBlLnBhc3RFbmQgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIHRoaXMuY3Vyc29yXyA+
IHRoaXMuZW5kXzsKLX07Ci0KLQotLyoqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBkZWNvZGVy
IGVuY291bnRlcmVkIGFuIGVycm9yIGR1ZSB0byBjb3JydXB0IGRhdGEuCi0gKiBAcmV0dXJuIHti
b29sZWFufQotICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmdldEVycm9yID0gZnVu
Y3Rpb24oKSB7Ci0gIHJldHVybiB0aGlzLmVycm9yXyB8fAotICAgICAgICAgKHRoaXMuY3Vyc29y
XyA8IDApIHx8Ci0gICAgICAgICAodGhpcy5jdXJzb3JfID4gdGhpcy5lbmRfKTsKLX07Ci0KLQot
LyoqCi0gKiBSZWFkcyBhbiB1bnNpZ25lZCB2YXJpbnQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSBh
bmQgc3RvcmVzIGl0IGFzIGEgc3BsaXQKLSAqIDY0LWJpdCBpbnRlZ2VyLiBTaW5jZSB0aGlzIGRv
ZXMgbm90IGNvbnZlcnQgdGhlIHZhbHVlIHRvIGEgbnVtYmVyLCBubwotICogcHJlY2lzaW9uIGlz
IGxvc3QuCi0gKgotICogSXQncyBwb3NzaWJsZSBmb3IgYW4gdW5zaWduZWQgdmFyaW50IHRvIGJl
IGluY29ycmVjdGx5IGVuY29kZWQgLSBtb3JlIHRoYW4KLSAqIDY0IGJpdHMnIHdvcnRoIG9mIGRh
dGEgY291bGQgYmUgcHJlc2VudC4gSWYgdGhpcyBoYXBwZW5zLCB0aGlzIG1ldGhvZCB3aWxsCi0g
KiB0aHJvdyBhbiBlcnJvci4KLSAqCi0gKiBEZWNvZGluZyB2YXJpbnRzIHJlcXVpcmVzIGRvaW5n
IHNvbWUgZnVubnkgYmFzZS0xMjggbWF0aCAtIGZvciBtb3JlCi0gKiBkZXRhaWxzIG9uIHRoZSBm
b3JtYXQsIHNlZQotICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy9kb2NzL2VuY29kaW5nCi0gKgotICogQHByaXZhdGUKLSAqLwotanNwYi5CaW5hcnlEZWNv
ZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRWYXJpbnQ2NF8gPSBmdW5jdGlvbigpIHsKLSAgdmFyIHRl
bXA7Ci0gIHZhciBsb3dCaXRzID0gMDsKLSAgdmFyIGhpZ2hCaXRzID0gMDsKLQotICAvLyBSZWFk
IHRoZSBmaXJzdCBmb3VyIGJ5dGVzIG9mIHRoZSB2YXJpbnQsIHN0b3BwaW5nIGF0IHRoZSB0ZXJt
aW5hdG9yIGlmIHdlCi0gIC8vIHNlZSBpdC4KLSAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKysp
IHsKLSAgICB0ZW1wID0gdGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdOwotICAgIGxvd0JpdHMg
fD0gKHRlbXAgJiAweDdGKSA8PCAoaSAqIDcpOwotICAgIGlmICh0ZW1wIDwgMTI4KSB7Ci0gICAg
ICB0aGlzLnRlbXBMb3dfID0gbG93Qml0cyA+Pj4gMDsKLSAgICAgIHRoaXMudGVtcEhpZ2hfID0g
MDsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLQotICAvLyBSZWFkIHRoZSBmaWZ0aCBieXRl
LCB3aGljaCBzdHJhZGRsZXMgdGhlIGxvdyBhbmQgaGlnaCBkd29yZHMuCi0gIHRlbXAgPSB0aGlz
LmJ5dGVzX1t0aGlzLmN1cnNvcl8rK107Ci0gIGxvd0JpdHMgfD0gKHRlbXAgJiAweDdGKSA8PCAy
ODsKLSAgaGlnaEJpdHMgfD0gKHRlbXAgJiAweDdGKSA+PiA0OwotICBpZiAodGVtcCA8IDEyOCkg
ewotICAgIHRoaXMudGVtcExvd18gPSBsb3dCaXRzID4+PiAwOwotICAgIHRoaXMudGVtcEhpZ2hf
ID0gaGlnaEJpdHMgPj4+IDA7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gUmVhZCB0aGUgc2l4
dGggdGhyb3VnaCB0ZW50aCBieXRlLgotICBmb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKykgewot
ICAgIHRlbXAgPSB0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK107Ci0gICAgaGlnaEJpdHMgfD0g
KHRlbXAgJiAweDdGKSA8PCAoaSAqIDcgKyAzKTsKLSAgICBpZiAodGVtcCA8IDEyOCkgewotICAg
ICAgdGhpcy50ZW1wTG93XyA9IGxvd0JpdHMgPj4+IDA7Ci0gICAgICB0aGlzLnRlbXBIaWdoXyA9
IGhpZ2hCaXRzID4+PiAwOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotCi0gIC8vIElmIHdl
IGRpZCBub3Qgc2VlIHRoZSB0ZXJtaW5hdG9yLCB0aGUgZW5jb2Rpbmcgd2FzIGludmFsaWQuCi0g
IGdvb2cuYXNzZXJ0cy5mYWlsKCdGYWlsZWQgdG8gcmVhZCB2YXJpbnQsIGVuY29kaW5nIGlzIGlu
dmFsaWQuJyk7Ci0gIHRoaXMuZXJyb3JfID0gdHJ1ZTsKLX07Ci0KLQotLyoqCi0gKiBTa2lwcyBv
dmVyIGEgdmFyaW50IGluIHRoZSBibG9jayB3aXRob3V0IGRlY29kaW5nIGl0LgotICovCi1qc3Bi
LkJpbmFyeURlY29kZXIucHJvdG90eXBlLnNraXBWYXJpbnQgPSBmdW5jdGlvbigpIHsKLSAgd2hp
bGUgKHRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yX10gJiAweDgwKSB7Ci0gICAgdGhpcy5jdXJzb3Jf
Kys7Ci0gIH0KLSAgdGhpcy5jdXJzb3JfKys7Ci19OwotCi0KLS8qKgotICogU2tpcHMgYmFja3dh
cmRzIG92ZXIgYSB2YXJpbnQgaW4gdGhlIGJsb2NrIC0gdG8gZG8gdGhpcyBjb3JyZWN0bHksIHdl
IGhhdmUKLSAqIHRvIGtub3cgdGhlIHZhbHVlIHdlJ3JlIHNraXBwaW5nIGJhY2t3YXJkcyBvdmVy
IG9yIHRoaW5ncyBhcmUgYW1iaWd1b3VzLgotICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSB2
YXJpbnQgdmFsdWUgdG8gdW5za2lwLgotICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBl
LnVuc2tpcFZhcmludCA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIHdoaWxlICh2YWx1ZSA+IDEyOCkg
ewotICAgIHRoaXMuY3Vyc29yXy0tOwotICAgIHZhbHVlID0gdmFsdWUgPj4+IDc7Ci0gIH0KLSAg
dGhpcy5jdXJzb3JfLS07Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSAzMi1iaXQgdmFyaW50IGZy
b20gdGhlIGJpbmFyeSBzdHJlYW0uIER1ZSB0byBhIHF1aXJrIG9mIHRoZSBlbmNvZGluZwotICog
Zm9ybWF0IGFuZCBKYXZhc2NyaXB0J3MgaGFuZGxpbmcgb2YgYml0d2lzZSBtYXRoLCB0aGlzIGFj
dHVhbGx5IHdvcmtzCi0gKiBjb3JyZWN0bHkgZm9yIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZCAz
Mi1iaXQgdmFyaW50cy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB2YXN0bHkgbW9y
ZSBmcmVxdWVudGx5IHRoYW4gYW55IG90aGVyIGluCi0gKiBCaW5hcnlEZWNvZGVyLCBzbyBpdCBo
YXMgYmVlbiB1bnJvbGxlZCBhbmQgdHdlYWtlZCBmb3IgcGVyZm9ybWFuY2UuCi0gKgotICogSWYg
dGhlcmUgYXJlIG1vcmUgdGhhbiAzMiBiaXRzIG9mIGRhdGEgaW4gdGhlIHZhcmludCwgaXQgX211
c3RfIGJlIGR1ZSB0bwotICogc2lnbi1leHRlbnNpb24uIElmIHdlJ3JlIGluIGRlYnVnIG1vZGUg
YW5kIHRoZSBoaWdoIDMyIGJpdHMgZG9uJ3QgbWF0Y2ggdGhlCi0gKiBleHBlY3RlZCBzaWduIGV4
dGVuc2lvbiwgdGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhbiBlcnJvci4KLSAqCi0gKiBEZWNvZGlu
ZyB2YXJpbnRzIHJlcXVpcmVzIGRvaW5nIHNvbWUgZnVubnkgYmFzZS0xMjggbWF0aCAtIGZvciBt
b3JlCi0gKiBkZXRhaWxzIG9uIHRoZSBmb3JtYXQsIHNlZQotICogaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nCi0gKgotICogQHJldHVy
biB7bnVtYmVyfSBUaGUgZGVjb2RlZCB1bnNpZ25lZCAzMi1iaXQgdmFyaW50LgotICovCi1qc3Bi
LkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDMyID0gZnVuY3Rpb24o
KSB7Ci0gIHZhciB0ZW1wOwotICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzXzsKLQotICB0ZW1wID0g
Ynl0ZXNbdGhpcy5jdXJzb3JfICsgMF07Ci0gIHZhciB4ID0gKHRlbXAgJiAweDdGKTsKLSAgaWYg
KHRlbXAgPCAxMjgpIHsKLSAgICB0aGlzLmN1cnNvcl8gKz0gMTsKLSAgICBnb29nLmFzc2VydHMu
YXNzZXJ0KHRoaXMuY3Vyc29yXyA8PSB0aGlzLmVuZF8pOwotICAgIHJldHVybiB4OwotICB9Ci0K
LSAgdGVtcCA9IGJ5dGVzW3RoaXMuY3Vyc29yXyArIDFdOwotICB4IHw9ICh0ZW1wICYgMHg3Rikg
PDwgNzsKLSAgaWYgKHRlbXAgPCAxMjgpIHsKLSAgICB0aGlzLmN1cnNvcl8gKz0gMjsKLSAgICBn
b29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXyA8PSB0aGlzLmVuZF8pOwotICAgIHJldHVy
biB4OwotICB9Ci0KLSAgdGVtcCA9IGJ5dGVzW3RoaXMuY3Vyc29yXyArIDJdOwotICB4IHw9ICh0
ZW1wICYgMHg3RikgPDwgMTQ7Ci0gIGlmICh0ZW1wIDwgMTI4KSB7Ci0gICAgdGhpcy5jdXJzb3Jf
ICs9IDM7Ci0gICAgZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl8gPD0gdGhpcy5lbmRf
KTsKLSAgICByZXR1cm4geDsKLSAgfQotCi0gIHRlbXAgPSBieXRlc1t0aGlzLmN1cnNvcl8gKyAz
XTsKLSAgeCB8PSAodGVtcCAmIDB4N0YpIDw8IDIxOwotICBpZiAodGVtcCA8IDEyOCkgewotICAg
IHRoaXMuY3Vyc29yXyArPSA0OwotICAgIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3Jf
IDw9IHRoaXMuZW5kXyk7Ci0gICAgcmV0dXJuIHg7Ci0gIH0KLQotICB0ZW1wID0gYnl0ZXNbdGhp
cy5jdXJzb3JfICsgNF07Ci0gIHggfD0gKHRlbXAgJiAweDBGKSA8PCAyODsKLSAgaWYgKHRlbXAg
PCAxMjgpIHsKLSAgICAvLyBXZSdyZSByZWFkaW5nIHRoZSBoaWdoIGJpdHMgb2YgYW4gdW5zaWdu
ZWQgdmFyaW50LiBUaGUgYnl0ZSB3ZSBqdXN0IHJlYWQKLSAgICAvLyBhbHNvIGNvbnRhaW5zIGJp
dHMgMzMgdGhyb3VnaCAzNSwgd2hpY2ggd2UncmUgZ29pbmcgdG8gZGlzY2FyZC4gVGhvc2UKLSAg
ICAvLyBiaXRzIF9tdXN0XyBiZSB6ZXJvLCBvciB0aGUgZW5jb2RpbmcgaXMgaW52YWxpZC4KLSAg
ICBnb29nLmFzc2VydHMuYXNzZXJ0KCh0ZW1wICYgMHhGMCkgPT0gMCk7Ci0gICAgdGhpcy5jdXJz
b3JfICs9IDU7Ci0gICAgZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl8gPD0gdGhpcy5l
bmRfKTsKLSAgICByZXR1cm4geCA+Pj4gMDsKLSAgfQotCi0gIC8vIElmIHdlIGdldCBoZXJlLCB3
ZSdyZSByZWFkaW5nIHRoZSBzaWduIGV4dGVuc2lvbiBvZiBhIG5lZ2F0aXZlIDMyLWJpdCBpbnQu
Ci0gIC8vIFdlIGNhbiBza2lwIHRoZXNlIGJ5dGVzLCBhcyB3ZSBrbm93IGluIGFkdmFuY2UgdGhh
dCB0aGV5IGhhdmUgdG8gYmUgYWxsCi0gIC8vIDEncyBpZiB0aGUgdmFyaW50IGlzIGNvcnJlY3Rs
eSBlbmNvZGVkLiBTaW5jZSB3ZSBhbHNvIGtub3cgdGhlIHZhbHVlIGlzCi0gIC8vIG5lZ2F0aXZl
LCB3ZSBkb24ndCBoYXZlIHRvIGNvZXJjZSBpdCB0byB1bnNpZ25lZCBiZWZvcmUgd2UgcmV0dXJu
IGl0LgotCi0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoKHRlbXAgJiAweEYwKSA9PSAweEYwKTsKLSAg
Z29vZy5hc3NlcnRzLmFzc2VydChieXRlc1t0aGlzLmN1cnNvcl8gKyA1XSA9PSAweEZGKTsKLSAg
Z29vZy5hc3NlcnRzLmFzc2VydChieXRlc1t0aGlzLmN1cnNvcl8gKyA2XSA9PSAweEZGKTsKLSAg
Z29vZy5hc3NlcnRzLmFzc2VydChieXRlc1t0aGlzLmN1cnNvcl8gKyA3XSA9PSAweEZGKTsKLSAg
Z29vZy5hc3NlcnRzLmFzc2VydChieXRlc1t0aGlzLmN1cnNvcl8gKyA4XSA9PSAweEZGKTsKLSAg
Z29vZy5hc3NlcnRzLmFzc2VydChieXRlc1t0aGlzLmN1cnNvcl8gKyA5XSA9PSAweDAxKTsKLQot
ICB0aGlzLmN1cnNvcl8gKz0gMTA7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3Jf
IDw9IHRoaXMuZW5kXyk7Ci0gIHJldHVybiB4OwotfTsKLQotCi0vKioKLSAqIFRoZSByZWFkVW5z
aWduZWRWYXJpbnQzMiBhYm92ZSBkZWFscyB3aXRoIHNpZ25lZCAzMi1iaXQgdmFyaW50cyBjb3Jy
ZWN0bHksCi0gKiBzbyB0aGlzIGlzIGp1c3QgYW4gYWxpYXMuCi0gKgotICogQHJldHVybiB7bnVt
YmVyfSBUaGUgZGVjb2RlZCBzaWduZWQgMzItYml0IHZhcmludC4KLSAqLwotanNwYi5CaW5hcnlE
ZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50MzIgPQotICAgIGpzcGIuQmluYXJ5RGVj
b2Rlci5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50MzI7Ci0KLQotLyoqCi0gKiBSZWFkcyBh
IDMyLWJpdCB1bnNpZ25lZCB2YXJpYW50IGFuZCByZXR1cm5zIGl0cyB2YWx1ZSBhcyBhIHN0cmlu
Zy4KLSAqCi0gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZWNvZGVkIHVuc2lnbmVkIDMyLWJpdCB2
YXJpbnQgYXMgYSBzdHJpbmcuCi0gKi8KLWpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVh
ZFVuc2lnbmVkVmFyaW50MzJTdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgLy8gMzItYml0IGludGVn
ZXJzIGZpdCBpbiBKYXZhU2NyaXB0IG51bWJlcnMgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbiwg
c28KLSAgLy8gc3RyaW5nIHZhcmlhbnRzIG9mIDMyLWJpdCB2YXJpbnQgcmVhZGVycyBjYW4gc2lt
cGx5IGRlbGVnYXRlIHRoZW4gY29udmVydAotICAvLyB0byBzdHJpbmcuCi0gIHZhciB2YWx1ZSA9
IHRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKTsKLSAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7
Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSAzMi1iaXQgc2lnbmVkIHZhcmlhbnQgYW5kIHJldHVy
bnMgaXRzIHZhbHVlIGFzIGEgc3RyaW5nLgotICoKLSAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRl
Y29kZWQgc2lnbmVkIDMyLWJpdCB2YXJpbnQgYXMgYSBzdHJpbmcuCi0gKi8KLWpzcGIuQmluYXJ5
RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nID0gZnVuY3Rpb24oKSB7
Ci0gIC8vIDMyLWJpdCBpbnRlZ2VycyBmaXQgaW4gSmF2YVNjcmlwdCBudW1iZXJzIHdpdGhvdXQg
bG9zcyBvZiBwcmVjaXNpb24sIHNvCi0gIC8vIHN0cmluZyB2YXJpYW50cyBvZiAzMi1iaXQgdmFy
aW50IHJlYWRlcnMgY2FuIHNpbXBseSBkZWxlZ2F0ZSB0aGVuIGNvbnZlcnQKLSAgLy8gdG8gc3Ry
aW5nLgotICB2YXIgdmFsdWUgPSB0aGlzLnJlYWRTaWduZWRWYXJpbnQzMigpOwotICByZXR1cm4g
dmFsdWUudG9TdHJpbmcoKTsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBhIHNpZ25lZCwgemlnemFn
LWVuY29kZWQgMzItYml0IHZhcmludCBmcm9tIHRoZSBiaW5hcnkgc3RyZWFtLgotICoKLSAqIFpp
Z3phZyBlbmNvZGluZyBpcyBhIG1vZGlmaWNhdGlvbiBvZiB2YXJpbnQgZW5jb2RpbmcgdGhhdCBy
ZWR1Y2VzIHRoZQotICogc3RvcmFnZSBvdmVyaGVhZCBmb3Igc21hbGwgbmVnYXRpdmUgaW50ZWdl
cnMgLSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZQotICogZm9ybWF0LCBzZWUgaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nCi0gKgotICog
QHJldHVybiB7bnVtYmVyfSBUaGUgZGVjb2RlZCBzaWduZWQsIHppZ3phZy1lbmNvZGVkIDMyLWJp
dCB2YXJpbnQuCi0gKi8KLWpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFppZ3phZ1Zh
cmludDMyID0gZnVuY3Rpb24oKSB7Ci0gIHZhciByZXN1bHQgPSB0aGlzLnJlYWRVbnNpZ25lZFZh
cmludDMyKCk7Ci0gIHJldHVybiAocmVzdWx0ID4+PiAxKSBeIC0gKHJlc3VsdCAmIDEpOwotfTsK
LQotCi0vKioKLSAqIFJlYWRzIGFuIHVuc2lnbmVkIDY0LWJpdCB2YXJpbnQgZnJvbSB0aGUgYmlu
YXJ5IHN0cmVhbS4gTm90ZSB0aGF0IHNpbmNlCi0gKiBKYXZhc2NyaXB0IHJlcHJlc2VudHMgYWxs
IG51bWJlcnMgYXMgZG91YmxlLXByZWNpc2lvbiBmbG9hdHMsIHRoZXJlIHdpbGwgYmUKLSAqIHBy
ZWNpc2lvbiBsb3N0IGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgdmFyaW50IGlzIGxhcmdl
ciB0aGFuIDJeNTMuCi0gKgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGVjb2RlZCB1bnNpZ25l
ZCB2YXJpbnQuIFByZWNpc2lvbiB3aWxsIGJlIGxvc3QgaWYgdGhlCi0gKiAgICAgaW50ZWdlciBl
eGNlZWRzIDJeNTMuCi0gKi8KLWpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVuc2ln
bmVkVmFyaW50NjQgPSBmdW5jdGlvbigpIHsKLSAgdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NF8oKTsK
LSAgcmV0dXJuIGpzcGIudXRpbHMuam9pblVpbnQ2NCh0aGlzLnRlbXBMb3dfLCB0aGlzLnRlbXBI
aWdoXyk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYW4gdW5zaWduZWQgNjQtYml0IHZhcmludCBm
cm9tIHRoZSBiaW5hcnkgc3RyZWFtIGFuZCByZXR1cm5zIHRoZSB2YWx1ZQotICogYXMgYSBkZWNp
bWFsIHN0cmluZy4KLSAqCi0gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZWNvZGVkIHVuc2lnbmVk
IHZhcmludCBhcyBhIGRlY2ltYWwgc3RyaW5nLgotICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJv
dG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDY0U3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gIHRoaXMu
cmVhZFNwbGl0VmFyaW50NjRfKCk7Ci0gIHJldHVybiBqc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERl
Y2ltYWxTdHJpbmcodGhpcy50ZW1wTG93XywgdGhpcy50ZW1wSGlnaF8pOwotfTsKLQotCi0vKioK
LSAqIFJlYWRzIGEgc2lnbmVkIDY0LWJpdCB2YXJpbnQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbS4g
Tm90ZSB0aGF0IHNpbmNlCi0gKiBKYXZhc2NyaXB0IHJlcHJlc2VudHMgYWxsIG51bWJlcnMgYXMg
ZG91YmxlLXByZWNpc2lvbiBmbG9hdHMsIHRoZXJlIHdpbGwgYmUKLSAqIHByZWNpc2lvbiBsb3N0
IGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgdmFyaW50IGlzIGxhcmdlciB0aGFuIDJeNTMu
Ci0gKgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGVjb2RlZCBzaWduZWQgdmFyaW50LiBQcmVj
aXNpb24gd2lsbCBiZSBsb3N0IGlmIHRoZQotICogICAgIGludGVnZXIgZXhjZWVkcyAyXjUzLgot
ICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTaWduZWRWYXJpbnQ2NCA9IGZ1
bmN0aW9uKCkgewotICB0aGlzLnJlYWRTcGxpdFZhcmludDY0XygpOwotICByZXR1cm4ganNwYi51
dGlscy5qb2luSW50NjQodGhpcy50ZW1wTG93XywgdGhpcy50ZW1wSGlnaF8pOwotfTsKLQotCi0v
KioKLSAqIFJlYWRzIGFuIHNpZ25lZCA2NC1iaXQgdmFyaW50IGZyb20gdGhlIGJpbmFyeSBzdHJl
YW0gYW5kIHJldHVybnMgdGhlIHZhbHVlCi0gKiBhcyBhIGRlY2ltYWwgc3RyaW5nLgotICoKLSAq
IEByZXR1cm4ge3N0cmluZ30gVGhlIGRlY29kZWQgc2lnbmVkIHZhcmludCBhcyBhIGRlY2ltYWwg
c3RyaW5nLgotICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTaWduZWRWYXJp
bnQ2NFN0cmluZyA9IGZ1bmN0aW9uKCkgewotICB0aGlzLnJlYWRTcGxpdFZhcmludDY0XygpOwot
ICByZXR1cm4ganNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyh0aGlzLnRlbXBMb3df
LCB0aGlzLnRlbXBIaWdoXyk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBzaWduZWQsIHppZ3ph
Zy1lbmNvZGVkIDY0LWJpdCB2YXJpbnQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbS4gTm90ZQotICog
dGhhdCBzaW5jZSBKYXZhc2NyaXB0IHJlcHJlc2VudHMgYWxsIG51bWJlcnMgYXMgZG91YmxlLXBy
ZWNpc2lvbiBmbG9hdHMsCi0gKiB0aGVyZSB3aWxsIGJlIHByZWNpc2lvbiBsb3N0IGlmIHRoZSBh
YnNvbHV0ZSB2YWx1ZSBvZiB0aGUgdmFyaW50IGlzIGxhcmdlcgotICogdGhhbiAyXjUzLgotICoK
LSAqIFppZ3phZyBlbmNvZGluZyBpcyBhIG1vZGlmaWNhdGlvbiBvZiB2YXJpbnQgZW5jb2Rpbmcg
dGhhdCByZWR1Y2VzIHRoZQotICogc3RvcmFnZSBvdmVyaGVhZCBmb3Igc21hbGwgbmVnYXRpdmUg
aW50ZWdlcnMgLSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZQotICogZm9ybWF0LCBzZWUgaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nCi0g
KgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGVjb2RlZCB6aWd6YWcgdmFyaW50LiBQcmVjaXNp
b24gd2lsbCBiZSBsb3N0IGlmIHRoZQotICogICAgIGludGVnZXIgZXhjZWVkcyAyXjUzLgotICov
Ci1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQ2NCA9IGZ1bmN0
aW9uKCkgewotICB0aGlzLnJlYWRTcGxpdFZhcmludDY0XygpOwotICByZXR1cm4ganNwYi51dGls
cy5qb2luWmlnemFnNjQodGhpcy50ZW1wTG93XywgdGhpcy50ZW1wSGlnaF8pOwotfTsKLQotCi0v
KioKLSAqIFJlYWRzIGEgcmF3IHVuc2lnbmVkIDgtYml0IGludGVnZXIgZnJvbSB0aGUgYmluYXJ5
IHN0cmVhbS4KLSAqCi0gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB1bnNpZ25lZCA4LWJpdCBpbnRl
Z2VyIHJlYWQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbS4KLSAqLwotanNwYi5CaW5hcnlEZWNvZGVy
LnByb3RvdHlwZS5yZWFkVWludDggPSBmdW5jdGlvbigpIHsKLSAgdmFyIGEgPSB0aGlzLmJ5dGVz
X1t0aGlzLmN1cnNvcl8gKyAwXTsKLSAgdGhpcy5jdXJzb3JfICs9IDE7Ci0gIGdvb2cuYXNzZXJ0
cy5hc3NlcnQodGhpcy5jdXJzb3JfIDw9IHRoaXMuZW5kXyk7Ci0gIHJldHVybiBhOwotfTsKLQot
Ci0vKioKLSAqIFJlYWRzIGEgcmF3IHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIGZyb20gdGhlIGJp
bmFyeSBzdHJlYW0uCi0gKgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgdW5zaWduZWQgMTYtYml0
IGludGVnZXIgcmVhZCBmcm9tIHRoZSBiaW5hcnkgc3RyZWFtLgotICovCi1qc3BiLkJpbmFyeURl
Y29kZXIucHJvdG90eXBlLnJlYWRVaW50MTYgPSBmdW5jdGlvbigpIHsKLSAgdmFyIGEgPSB0aGlz
LmJ5dGVzX1t0aGlzLmN1cnNvcl8gKyAwXTsKLSAgdmFyIGIgPSB0aGlzLmJ5dGVzX1t0aGlzLmN1
cnNvcl8gKyAxXTsKLSAgdGhpcy5jdXJzb3JfICs9IDI7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQo
dGhpcy5jdXJzb3JfIDw9IHRoaXMuZW5kXyk7Ci0gIHJldHVybiAoYSA8PCAwKSB8IChiIDw8IDgp
OwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGEgcmF3IHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGZy
b20gdGhlIGJpbmFyeSBzdHJlYW0uCi0gKgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgdW5zaWdu
ZWQgMzItYml0IGludGVnZXIgcmVhZCBmcm9tIHRoZSBiaW5hcnkgc3RyZWFtLgotICovCi1qc3Bi
LkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MzIgPSBmdW5jdGlvbigpIHsKLSAgdmFy
IGEgPSB0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8gKyAwXTsKLSAgdmFyIGIgPSB0aGlzLmJ5dGVz
X1t0aGlzLmN1cnNvcl8gKyAxXTsKLSAgdmFyIGMgPSB0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8g
KyAyXTsKLSAgdmFyIGQgPSB0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8gKyAzXTsKLSAgdGhpcy5j
dXJzb3JfICs9IDQ7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfIDw9IHRoaXMu
ZW5kXyk7Ci0gIHJldHVybiAoKGEgPDwgMCkgfCAoYiA8PCA4KSB8IChjIDw8IDE2KSB8IChkIDw8
IDI0KSkgPj4+IDA7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSByYXcgdW5zaWduZWQgNjQtYml0
IGludGVnZXIgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbS4gTm90ZSB0aGF0IHNpbmNlCi0gKiBKYXZh
c2NyaXB0IHJlcHJlc2VudHMgYWxsIG51bWJlcnMgYXMgZG91YmxlLXByZWNpc2lvbiBmbG9hdHMs
IHRoZXJlIHdpbGwgYmUKLSAqIHByZWNpc2lvbiBsb3N0IGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBv
ZiB0aGUgaW50ZWdlciBpcyBsYXJnZXIgdGhhbiAyXjUzLgotICoKLSAqIEByZXR1cm4ge251bWJl
cn0gVGhlIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHJlYWQgZnJvbSB0aGUgYmluYXJ5IHN0cmVh
bS4KLSAqICAgICBQcmVjaXNpb24gd2lsbCBiZSBsb3N0IGlmIHRoZSBpbnRlZ2VyIGV4Y2VlZHMg
Ml41My4KLSAqLwotanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDY0ID0gZnVu
Y3Rpb24oKSB7Ci0gIHZhciBiaXRzTG93ID0gdGhpcy5yZWFkVWludDMyKCk7Ci0gIHZhciBiaXRz
SGlnaCA9IHRoaXMucmVhZFVpbnQzMigpOwotICByZXR1cm4ganNwYi51dGlscy5qb2luVWludDY0
KGJpdHNMb3csIGJpdHNIaWdoKTsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBhIHJhdyBzaWduZWQg
OC1iaXQgaW50ZWdlciBmcm9tIHRoZSBiaW5hcnkgc3RyZWFtLgotICoKLSAqIEByZXR1cm4ge251
bWJlcn0gVGhlIHNpZ25lZCA4LWJpdCBpbnRlZ2VyIHJlYWQgZnJvbSB0aGUgYmluYXJ5IHN0cmVh
bS4KLSAqLwotanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9u
KCkgewotICB2YXIgYSA9IHRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyArIDBdOwotICB0aGlzLmN1
cnNvcl8gKz0gMTsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl8gPD0gdGhpcy5l
bmRfKTsKLSAgcmV0dXJuIChhIDw8IDI0KSA+PiAyNDsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBh
IHJhdyBzaWduZWQgMTYtYml0IGludGVnZXIgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbS4KLSAqCi0g
KiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBzaWduZWQgMTYtYml0IGludGVnZXIgcmVhZCBmcm9tIHRo
ZSBiaW5hcnkgc3RyZWFtLgotICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRJ
bnQxNiA9IGZ1bmN0aW9uKCkgewotICB2YXIgYSA9IHRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyAr
IDBdOwotICB2YXIgYiA9IHRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyArIDFdOwotICB0aGlzLmN1
cnNvcl8gKz0gMjsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl8gPD0gdGhpcy5l
bmRfKTsKLSAgcmV0dXJuICgoKGEgPDwgMCkgfCAoYiA8PCA4KSkgPDwgMTYpID4+IDE2OwotfTsK
LQotCi0vKioKLSAqIFJlYWRzIGEgcmF3IHNpZ25lZCAzMi1iaXQgaW50ZWdlciBmcm9tIHRoZSBi
aW5hcnkgc3RyZWFtLgotICoKLSAqIEByZXR1cm4ge251bWJlcn0gVGhlIHNpZ25lZCAzMi1iaXQg
aW50ZWdlciByZWFkIGZyb20gdGhlIGJpbmFyeSBzdHJlYW0uCi0gKi8KLWpzcGIuQmluYXJ5RGVj
b2Rlci5wcm90b3R5cGUucmVhZEludDMyID0gZnVuY3Rpb24oKSB7Ci0gIHZhciBhID0gdGhpcy5i
eXRlc19bdGhpcy5jdXJzb3JfICsgMF07Ci0gIHZhciBiID0gdGhpcy5ieXRlc19bdGhpcy5jdXJz
b3JfICsgMV07Ci0gIHZhciBjID0gdGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfICsgMl07Ci0gIHZh
ciBkID0gdGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfICsgM107Ci0gIHRoaXMuY3Vyc29yXyArPSA0
OwotICBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXyA8PSB0aGlzLmVuZF8pOwotICBy
ZXR1cm4gKGEgPDwgMCkgfCAoYiA8PCA4KSB8IChjIDw8IDE2KSB8IChkIDw8IDI0KTsKLX07Ci0K
LQotLyoqCi0gKiBSZWFkcyBhIHJhdyBzaWduZWQgNjQtYml0IGludGVnZXIgZnJvbSB0aGUgYmlu
YXJ5IHN0cmVhbS4gTm90ZSB0aGF0IHNpbmNlCi0gKiBKYXZhc2NyaXB0IHJlcHJlc2VudHMgYWxs
IG51bWJlcnMgYXMgZG91YmxlLXByZWNpc2lvbiBmbG9hdHMsIHRoZXJlIHdpbGwgYmUKLSAqIHBy
ZWNpc2lvbiBsb3N0IGlmIHRoZSBhYnNvbHV0ZSB2bGF1ZSBvZiB0aGUgaW50ZWdlciBpcyBsYXJn
ZXIgdGhhbiAyXjUzLgotICoKLSAqIEByZXR1cm4ge251bWJlcn0gVGhlIHNpZ25lZCA2NC1iaXQg
aW50ZWdlciByZWFkIGZyb20gdGhlIGJpbmFyeSBzdHJlYW0uCi0gKiAgICAgUHJlY2lzaW9uIHdp
bGwgYmUgbG9zdCBpZiB0aGUgaW50ZWdlciBleGNlZWRzIDJeNTMuCi0gKi8KLWpzcGIuQmluYXJ5
RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0ID0gZnVuY3Rpb24oKSB7Ci0gIHZhciBiaXRzTG93
ID0gdGhpcy5yZWFkVWludDMyKCk7Ci0gIHZhciBiaXRzSGlnaCA9IHRoaXMucmVhZFVpbnQzMigp
OwotICByZXR1cm4ganNwYi51dGlscy5qb2luSW50NjQoYml0c0xvdywgYml0c0hpZ2gpOwotfTsK
LQotCi0vKioKLSAqIFJlYWRzIGEgMzItYml0IGZsb2F0aW5nLXBvaW50IG51bWJlciBmcm9tIHRo
ZSBiaW5hcnkgc3RyZWFtLCB1c2luZyB0aGUKLSAqIHRlbXBvcmFyeSBidWZmZXIgdG8gcmVhbGln
biB0aGUgZGF0YS4KLSAqCi0gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBmbG9hdCByZWFkIGZyb20g
dGhlIGJpbmFyeSBzdHJlYW0uCi0gKi8KLWpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVh
ZEZsb2F0ID0gZnVuY3Rpb24oKSB7Ci0gIHZhciBiaXRzTG93ID0gdGhpcy5yZWFkVWludDMyKCk7
Ci0gIHZhciBiaXRzSGlnaCA9IDA7Ci0gIHJldHVybiBqc3BiLnV0aWxzLmpvaW5GbG9hdDMyKGJp
dHNMb3csIGJpdHNIaWdoKTsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBhIDY0LWJpdCBmbG9hdGlu
Zy1wb2ludCBudW1iZXIgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwgdXNpbmcgdGhlCi0gKiB0ZW1w
b3JhcnkgYnVmZmVyIHRvIHJlYWxpZ24gdGhlIGRhdGEuCi0gKgotICogQHJldHVybiB7bnVtYmVy
fSBUaGUgZG91YmxlIHJlYWQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbS4KLSAqLwotanNwYi5CaW5h
cnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkRG91YmxlID0gZnVuY3Rpb24oKSB7Ci0gIHZhciBiaXRz
TG93ID0gdGhpcy5yZWFkVWludDMyKCk7Ci0gIHZhciBiaXRzSGlnaCA9IHRoaXMucmVhZFVpbnQz
MigpOwotICByZXR1cm4ganNwYi51dGlscy5qb2luRmxvYXQ2NChiaXRzTG93LCBiaXRzSGlnaCk7
Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBib29sZWFuIHZhbHVlIGZyb20gdGhlIGJpbmFyeSBz
dHJlYW0uCi0gKiBAcmV0dXJuIHtib29sZWFufSBUaGUgYm9vbGVhbiByZWFkIGZyb20gdGhlIGJp
bmFyeSBzdHJlYW0uCi0gKi8KLWpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEJvb2wg
PSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuICEhdGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdOwot
fTsKLQotCi0vKioKLSAqIFJlYWRzIGFuIGVudW0gdmFsdWUgZnJvbSB0aGUgYmluYXJ5IHN0cmVh
bSwgd2hpY2ggYXJlIGFsd2F5cyBlbmNvZGVkIGFzCi0gKiBzaWduZWQgdmFyaW50cy4KLSAqIEBy
ZXR1cm4ge251bWJlcn0gVGhlIGVudW0gdmFsdWUgcmVhZCBmcm9tIHRoZSBiaW5hcnkgc3RyZWFt
LgotICovCi1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRFbnVtID0gZnVuY3Rpb24o
KSB7Ci0gIHJldHVybiB0aGlzLnJlYWRTaWduZWRWYXJpbnQzMigpOwotfTsKLQotCi0vKioKLSAq
IFJlYWRzIGFuZCBwYXJzZXMgYSBVVEYtOCBlbmNvZGVkIHVuaWNvZGUgc3RyaW5nIGZyb20gdGhl
IHN0cmVhbS4KLSAqIFRoZSBjb2RlIGlzIGluc3BpcmVkIGJ5IG1hcHMudmVjdG9ydG93bi5wYXJz
ZS5TdHJlYW1lZERhdGFWaWV3UmVhZGVyLCB3aXRoCi0gKiB0aGUgZXhjZXB0aW9uIHRoYXQgdGhl
IGltcGxlbWVudGF0aW9uIGhlcmUgZG9lcyBub3QgZ2V0IGNvbmZ1c2VkIGlmIGl0Ci0gKiBlbmNv
dW50ZXJzIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhyZWUgYnl0ZXMuIFRoZXNlIGNoYXJhY3Rl
cnMgYXJlIGlnbm9yZWQKLSAqIHRob3VnaCwgYXMgdGhleSBhcmUgZXh0cmVtZWx5IHJhcmU6IHRo
cmVlIFVURi04IGJ5dGVzIGNvdmVyIHZpcnR1YWxseSBhbGwKLSAqIGNoYXJhY3RlcnMgaW4gY29t
bW9uIHVzZSAoaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCkuCi0gKiBAcGFyYW0g
e251bWJlcn0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB0byByZWFkLgotICogQHJl
dHVybiB7c3RyaW5nfSBUaGUgZGVjb2RlZCBzdHJpbmcuCi0gKi8KLWpzcGIuQmluYXJ5RGVjb2Rl
ci5wcm90b3R5cGUucmVhZFN0cmluZyA9IGZ1bmN0aW9uKGxlbmd0aCkgewotICB2YXIgYnl0ZXMg
PSB0aGlzLmJ5dGVzXzsKLSAgdmFyIGN1cnNvciA9IHRoaXMuY3Vyc29yXzsKLSAgdmFyIGVuZCA9
IGN1cnNvciArIGxlbmd0aDsKLSAgdmFyIGNoYXJzID0gW107Ci0KLSAgd2hpbGUgKGN1cnNvciA8
IGVuZCkgewotICAgIHZhciBjID0gYnl0ZXNbY3Vyc29yKytdOwotICAgIGlmIChjIDwgMTI4KSB7
IC8vIFJlZ3VsYXIgNy1iaXQgQVNDSUkuCi0gICAgICBjaGFycy5wdXNoKGMpOwotICAgIH0gZWxz
ZSBpZiAoYyA8IDE5MikgewotICAgICAgLy8gVVRGLTggY29udGludWF0aW9uIG1hcmsuIFdlIGFy
ZSBvdXQgb2Ygc3luYy4gVGhpcwotICAgICAgLy8gbWlnaHQgaGFwcGVuIGlmIHdlIGF0dGVtcHRl
ZCB0byByZWFkIGEgY2hhcmFjdGVyCi0gICAgICAvLyB3aXRoIG1vcmUgdGhhbiB0aHJlZSBieXRl
cy4KLSAgICAgIGNvbnRpbnVlOwotICAgIH0gZWxzZSBpZiAoYyA8IDIyNCkgeyAvLyBVVEYtOCB3
aXRoIHR3byBieXRlcy4KLSAgICAgIHZhciBjMiA9IGJ5dGVzW2N1cnNvcisrXTsKLSAgICAgIGNo
YXJzLnB1c2goKChjICYgMzEpIDw8IDYpIHwgKGMyICYgNjMpKTsKLSAgICB9IGVsc2UgaWYgKGMg
PCAyNDApIHsgLy8gVVRGLTggd2l0aCB0aHJlZSBieXRlcy4KLSAgICAgIHZhciBjMiA9IGJ5dGVz
W2N1cnNvcisrXTsKLSAgICAgIHZhciBjMyA9IGJ5dGVzW2N1cnNvcisrXTsKLSAgICAgIGNoYXJz
LnB1c2goKChjICYgMTUpIDw8IDEyKSB8ICgoYzIgJiA2MykgPDwgNikgfCAoYzMgJiA2MykpOwot
ICAgIH0KLSAgfQotCi0gIC8vIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkgaXMgZmFzdGVyIHRo
YW4gbWFudWFsbHkgYXBwZW5kaW5nIGNoYXJhY3RlcnMgb24KLSAgLy8gQ2hyb21lIDI1KywgYW5k
IGdlbmVyYXRlcyBubyBhZGRpdGlvbmFsIGNvbnMgc3RyaW5nIGdhcmJhZ2UuCi0gIHZhciByZXN1
bHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNoYXJzKTsKLSAgdGhpcy5jdXJz
b3JfID0gY3Vyc29yOwotICByZXR1cm4gcmVzdWx0OwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGFu
ZCBwYXJzZXMgYSBVVEYtOCBlbmNvZGVkIHVuaWNvZGUgc3RyaW5nICh3aXRoIGxlbmd0aCBwcmVm
aXgpIGZyb20KLSAqIHRoZSBzdHJlYW0uCi0gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZWNvZGVk
IHN0cmluZy4KLSAqLwotanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nV2l0
aExlbmd0aCA9IGZ1bmN0aW9uKCkgewotICB2YXIgbGVuZ3RoID0gdGhpcy5yZWFkVW5zaWduZWRW
YXJpbnQzMigpOwotICByZXR1cm4gdGhpcy5yZWFkU3RyaW5nKGxlbmd0aCk7Ci19OwotCi0KLS8q
KgotICogUmVhZHMgYSBibG9jayBvZiByYXcgYnl0ZXMgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbS4K
LSAqCi0gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVh
ZC4KLSAqIEByZXR1cm4geyFVaW50OEFycmF5fSBUaGUgZGVjb2RlZCBibG9jayBvZiBieXRlcywg
b3IgYW4gZW1wdHkgYmxvY2sgaWYgdGhlCi0gKiAgICAgbGVuZ3RoIHdhcyBpbnZhbGlkLgotICov
Ci1qc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRCeXRlcyA9IGZ1bmN0aW9uKGxlbmd0
aCkgewotICBpZiAobGVuZ3RoIDwgMCB8fAotICAgICAgdGhpcy5jdXJzb3JfICsgbGVuZ3RoID4g
dGhpcy5ieXRlc18ubGVuZ3RoKSB7Ci0gICAgdGhpcy5lcnJvcl8gPSB0cnVlOwotICAgIGdvb2cu
YXNzZXJ0cy5mYWlsKCdJbnZhbGlkIGJ5dGUgbGVuZ3RoIScpOwotICAgIHJldHVybiBuZXcgVWlu
dDhBcnJheSgwKTsKLSAgfQotCi0gIHZhciByZXN1bHQgPSB0aGlzLmJ5dGVzXy5zdWJhcnJheSh0
aGlzLmN1cnNvcl8sIHRoaXMuY3Vyc29yXyArIGxlbmd0aCk7Ci0KLSAgdGhpcy5jdXJzb3JfICs9
IGxlbmd0aDsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl8gPD0gdGhpcy5lbmRf
KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBhIDY0LWJpdCB2YXJp
bnQgZnJvbSB0aGUgc3RyZWFtIGFuZCByZXR1cm5zIGl0IGFzIGFuIDgtY2hhcmFjdGVyCi0gKiBV
bmljb2RlIHN0cmluZyBmb3IgdXNlIGFzIGEgaGFzaCB0YWJsZSBrZXkuCi0gKgotICogQHJldHVy
biB7c3RyaW5nfSBUaGUgaGFzaCB2YWx1ZS4KLSAqLwotanNwYi5CaW5hcnlEZWNvZGVyLnByb3Rv
dHlwZS5yZWFkVmFyaW50SGFzaDY0ID0gZnVuY3Rpb24oKSB7Ci0gIHRoaXMucmVhZFNwbGl0VmFy
aW50NjRfKCk7Ci0gIHJldHVybiBqc3BiLnV0aWxzLmpvaW5IYXNoNjQodGhpcy50ZW1wTG93Xywg
dGhpcy50ZW1wSGlnaF8pOwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGEgNjQtYml0IGZpeGVkLXdp
ZHRoIHZhbHVlIGZyb20gdGhlIHN0cmVhbSBhbmQgcmV0dXJucyBpdCBhcyBhbgotICogOC1jaGFy
YWN0ZXIgVW5pY29kZSBzdHJpbmcgZm9yIHVzZSBhcyBhIGhhc2ggdGFibGUga2V5LgotICoKLSAq
IEByZXR1cm4ge3N0cmluZ30gVGhlIGhhc2ggdmFsdWUuCi0gKi8KLWpzcGIuQmluYXJ5RGVjb2Rl
ci5wcm90b3R5cGUucmVhZEZpeGVkSGFzaDY0ID0gZnVuY3Rpb24oKSB7Ci0gIHZhciBieXRlcyA9
IHRoaXMuYnl0ZXNfOwotICB2YXIgY3Vyc29yID0gdGhpcy5jdXJzb3JfOwotCi0gIHZhciBhID0g
Ynl0ZXNbY3Vyc29yICsgMF07Ci0gIHZhciBiID0gYnl0ZXNbY3Vyc29yICsgMV07Ci0gIHZhciBj
ID0gYnl0ZXNbY3Vyc29yICsgMl07Ci0gIHZhciBkID0gYnl0ZXNbY3Vyc29yICsgM107Ci0gIHZh
ciBlID0gYnl0ZXNbY3Vyc29yICsgNF07Ci0gIHZhciBmID0gYnl0ZXNbY3Vyc29yICsgNV07Ci0g
IHZhciBnID0gYnl0ZXNbY3Vyc29yICsgNl07Ci0gIHZhciBoID0gYnl0ZXNbY3Vyc29yICsgN107
Ci0KLSAgdGhpcy5jdXJzb3JfICs9IDg7Ci0KLSAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUo
YSwgYiwgYywgZCwgZSwgZiwgZywgaCk7Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9iaW5hcnkvZGVjb2Rl
cl90ZXN0LmpzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qcy9iaW5hcnkvZGVjb2Rlcl90ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMDQ1ZTkxMmNmMDQ0OTg1YzUxZTNkYjQzMzlhMzRlYzM0ZDA3NDgzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvYmluYXJ5L2RlY29k
ZXJfdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFRlc3QgY2FzZXMg
Zm9yIGpzcGIncyBiaW5hcnkgcHJvdG9jb2wgYnVmZmVyIGRlY29kZXIuCi0gKgotICogVGhlcmUg
YXJlIHR3byBwYXJ0aWN1bGFyIG1hZ2ljIG51bWJlcnMgdGhhdCBuZWVkIHRvIGJlIHBvaW50ZWQg
b3V0IC0KLSAqIDJeNjQtMTAyNSBpcyB0aGUgbGFyZ2VzdCBudW1iZXIgcmVwcmVzZW50YWJsZSBh
cyBib3RoIGEgZG91YmxlIGFuZCBhbgotICogdW5zaWduZWQgNjQtYml0IGludGVnZXIsIGFuZCAy
XjYzLTUxMyBpcyB0aGUgbGFyZ2VzdCBudW1iZXIgcmVwcmVzZW50YWJsZSBhcwotICogYm90aCBh
IGRvdWJsZSBhbmQgYSBzaWduZWQgNjQtYml0IGludGVnZXIuCi0gKgotICogVGVzdCBzdWl0ZSBp
cyB3cml0dGVuIHVzaW5nIEphc21pbmUgLS0gc2VlIGh0dHA6Ly9qYXNtaW5lLmdpdGh1Yi5pby8K
LSAqCi0gKiBAYXV0aG9yIGFhcHBsZWJ5QGdvb2dsZS5jb20gKEF1c3RpbiBBcHBsZWJ5KQotICov
Ci0KLWdvb2cucmVxdWlyZSgnZ29vZy50ZXN0aW5nLmFzc2VydHMnKTsKLWdvb2cucmVxdWlyZSgn
anNwYi5CaW5hcnlDb25zdGFudHMnKTsKLWdvb2cucmVxdWlyZSgnanNwYi5CaW5hcnlEZWNvZGVy
Jyk7Ci1nb29nLnJlcXVpcmUoJ2pzcGIuQmluYXJ5RW5jb2RlcicpOwotCi0KLS8qKgotICogVGVz
dHMgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHVuc2lnbmVkIHR5cGVzLgotICogQHBhcmFtIHtG
dW5jdGlvbn0gcmVhZFZhbHVlCi0gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cml0ZVZhbHVlCi0gKiBA
cGFyYW0ge251bWJlcn0gZXBzaWxvbgotICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyTGltaXQKLSAq
IEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlcgotICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGll
c3x2aXNpYmlsaXR5fQotICovCi1mdW5jdGlvbiBkb1Rlc3RVbnNpZ25lZFZhbHVlKHJlYWRWYWx1
ZSwKLSAgICB3cml0ZVZhbHVlLCBlcHNpbG9uLCB1cHBlckxpbWl0LCBmaWx0ZXIpIHsKLSAgdmFy
IGVuY29kZXIgPSBuZXcganNwYi5CaW5hcnlFbmNvZGVyKCk7Ci0KLSAgLy8gRW5jb2RlIHplcm8g
YW5kIGxpbWl0cy4KLSAgd3JpdGVWYWx1ZS5jYWxsKGVuY29kZXIsIGZpbHRlcigwKSk7Ci0gIHdy
aXRlVmFsdWUuY2FsbChlbmNvZGVyLCBmaWx0ZXIoZXBzaWxvbikpOwotICB3cml0ZVZhbHVlLmNh
bGwoZW5jb2RlciwgZmlsdGVyKHVwcGVyTGltaXQpKTsKLQotICAvLyBFbmNvZGUgcG9zaXRpdmUg
dmFsdWVzLgotICBmb3IgKHZhciBjdXJzb3IgPSBlcHNpbG9uOyBjdXJzb3IgPCB1cHBlckxpbWl0
OyBjdXJzb3IgKj0gMS4xKSB7Ci0gICAgd3JpdGVWYWx1ZS5jYWxsKGVuY29kZXIsIGZpbHRlcihj
dXJzb3IpKTsKLSAgfQotCi0gIHZhciBkZWNvZGVyID0ganNwYi5CaW5hcnlEZWNvZGVyLmFsbG9j
KGVuY29kZXIuZW5kKCkpOwotCi0gIC8vIENoZWNrIHplcm8gYW5kIGxpbWl0cy4KLSAgYXNzZXJ0
RXF1YWxzKGZpbHRlcigwKSwgcmVhZFZhbHVlLmNhbGwoZGVjb2RlcikpOwotICBhc3NlcnRFcXVh
bHMoZmlsdGVyKGVwc2lsb24pLCByZWFkVmFsdWUuY2FsbChkZWNvZGVyKSk7Ci0gIGFzc2VydEVx
dWFscyhmaWx0ZXIodXBwZXJMaW1pdCksIHJlYWRWYWx1ZS5jYWxsKGRlY29kZXIpKTsKLQotICAv
LyBDaGVjayBwb3NpdGl2ZSB2YWx1ZXMuCi0gIGZvciAodmFyIGN1cnNvciA9IGVwc2lsb247IGN1
cnNvciA8IHVwcGVyTGltaXQ7IGN1cnNvciAqPSAxLjEpIHsKLSAgICBpZiAoZmlsdGVyKGN1cnNv
cikgIT0gcmVhZFZhbHVlLmNhbGwoZGVjb2RlcikpIHRocm93ICdmYWlsISc7Ci0gIH0KLQotICAv
LyBFbmNvZGluZyB2YWx1ZXMgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2Ugc2hvdWxkIGFzc2VydC4K
LSAgYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkge3dyaXRlVmFsdWUuY2FsbChlbmNvZGVyLCAtMSk7
fSk7Ci0gIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHt3cml0ZVZhbHVlLmNhbGwoZW5jb2Rlciwg
dXBwZXJMaW1pdCAqIDEuMSk7fSk7Ci19Ci0KLQotLyoqCi0gKiBUZXN0cyBlbmNvZGluZyBhbmQg
ZGVjb2Rpbmcgb2Ygc2lnbmVkIHR5cGVzLgotICogQHBhcmFtIHtGdW5jdGlvbn0gcmVhZFZhbHVl
Ci0gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cml0ZVZhbHVlCi0gKiBAcGFyYW0ge251bWJlcn0gZXBz
aWxvbgotICogQHBhcmFtIHtudW1iZXJ9IGxvd2VyTGltaXQKLSAqIEBwYXJhbSB7bnVtYmVyfSB1
cHBlckxpbWl0Ci0gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIKLSAqIEBzdXBwcmVzcyB7bWlz
c2luZ1Byb3BlcnRpZXN9Ci0gKi8KLWZ1bmN0aW9uIGRvVGVzdFNpZ25lZFZhbHVlKHJlYWRWYWx1
ZSwKLSAgICB3cml0ZVZhbHVlLCBlcHNpbG9uLCBsb3dlckxpbWl0LCB1cHBlckxpbWl0LCBmaWx0
ZXIpIHsKLSAgdmFyIGVuY29kZXIgPSBuZXcganNwYi5CaW5hcnlFbmNvZGVyKCk7Ci0KLSAgLy8g
RW5jb2RlIHplcm8gYW5kIGxpbWl0cy4KLSAgd3JpdGVWYWx1ZS5jYWxsKGVuY29kZXIsIGZpbHRl
cihsb3dlckxpbWl0KSk7Ci0gIHdyaXRlVmFsdWUuY2FsbChlbmNvZGVyLCBmaWx0ZXIoLWVwc2ls
b24pKTsKLSAgd3JpdGVWYWx1ZS5jYWxsKGVuY29kZXIsIGZpbHRlcigwKSk7Ci0gIHdyaXRlVmFs
dWUuY2FsbChlbmNvZGVyLCBmaWx0ZXIoZXBzaWxvbikpOwotICB3cml0ZVZhbHVlLmNhbGwoZW5j
b2RlciwgZmlsdGVyKHVwcGVyTGltaXQpKTsKLQotICB2YXIgaW5wdXRWYWx1ZXMgPSBbXTsKLQot
ICAvLyBFbmNvZGUgbmVnYXRpdmUgdmFsdWVzLgotICBmb3IgKHZhciBjdXJzb3IgPSBsb3dlckxp
bWl0OyBjdXJzb3IgPCAtZXBzaWxvbjsgY3Vyc29yIC89IDEuMSkgewotICAgIHZhciB2YWwgPSBm
aWx0ZXIoY3Vyc29yKTsKLSAgICB3cml0ZVZhbHVlLmNhbGwoZW5jb2RlciwgdmFsKTsKLSAgICBp
bnB1dFZhbHVlcy5wdXNoKHZhbCk7Ci0gIH0KLQotICAvLyBFbmNvZGUgcG9zaXRpdmUgdmFsdWVz
LgotICBmb3IgKHZhciBjdXJzb3IgPSBlcHNpbG9uOyBjdXJzb3IgPCB1cHBlckxpbWl0OyBjdXJz
b3IgKj0gMS4xKSB7Ci0gICAgdmFyIHZhbCA9IGZpbHRlcihjdXJzb3IpOwotICAgIHdyaXRlVmFs
dWUuY2FsbChlbmNvZGVyLCB2YWwpOwotICAgIGlucHV0VmFsdWVzLnB1c2godmFsKTsKLSAgfQot
Ci0gIHZhciBkZWNvZGVyID0ganNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKGVuY29kZXIuZW5kKCkp
OwotCi0gIC8vIENoZWNrIHplcm8gYW5kIGxpbWl0cy4KLSAgYXNzZXJ0RXF1YWxzKGZpbHRlcihs
b3dlckxpbWl0KSwgcmVhZFZhbHVlLmNhbGwoZGVjb2RlcikpOwotICBhc3NlcnRFcXVhbHMoZmls
dGVyKC1lcHNpbG9uKSwgcmVhZFZhbHVlLmNhbGwoZGVjb2RlcikpOwotICBhc3NlcnRFcXVhbHMo
ZmlsdGVyKDApLCByZWFkVmFsdWUuY2FsbChkZWNvZGVyKSk7Ci0gIGFzc2VydEVxdWFscyhmaWx0
ZXIoZXBzaWxvbiksIHJlYWRWYWx1ZS5jYWxsKGRlY29kZXIpKTsKLSAgYXNzZXJ0RXF1YWxzKGZp
bHRlcih1cHBlckxpbWl0KSwgcmVhZFZhbHVlLmNhbGwoZGVjb2RlcikpOwotCi0gIC8vIFZlcmlm
eSBkZWNvZGVkIHZhbHVlcy4KLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dFZhbHVlcy5sZW5n
dGg7IGkrKykgewotICAgIGFzc2VydEVxdWFscyhpbnB1dFZhbHVlc1tpXSwgcmVhZFZhbHVlLmNh
bGwoZGVjb2RlcikpOwotICB9Ci0KLSAgLy8gRW5jb2RpbmcgdmFsdWVzIG91dHNpZGUgdGhlIHZh
bGlkIHJhbmdlIHNob3VsZCBhc3NlcnQuCi0gIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHt3cml0
ZVZhbHVlLmNhbGwoZW5jb2RlciwgbG93ZXJMaW1pdCAqIDEuMSk7fSk7Ci0gIGFzc2VydFRocm93
cyhmdW5jdGlvbigpIHt3cml0ZVZhbHVlLmNhbGwoZW5jb2RlciwgdXBwZXJMaW1pdCAqIDEuMSk7
fSk7Ci19Ci0KLWRlc2NyaWJlKCdiaW5hcnlEZWNvZGVyVGVzdCcsIGZ1bmN0aW9uKCkgewotICAv
KioKLSAgICogVGVzdHMgdGhlIGRlY29kZXIgaW5zdGFuY2UgY2FjaGUuCi0gICAqIEBzdXBwcmVz
cyB7dmlzaWJpbGl0eX0KLSAgICovCi0gIGl0KCd0ZXN0SW5zdGFuY2VDYWNoZScsIGZ1bmN0aW9u
KCkgewotICAgIC8vIEVtcHR5IHRoZSBpbnN0YW5jZSBjYWNoZXMuCi0gICAganNwYi5CaW5hcnlE
ZWNvZGVyLmluc3RhbmNlQ2FjaGVfID0gW107Ci0KLSAgICAvLyBBbGxvY2F0aW5nIGFuZCB0aGVu
IGZyZWVpbmcgYSBkZWNvZGVyIHNob3VsZCBwdXQgaXQgaW4gdGhlIGluc3RhbmNlCi0gICAgLy8g
Y2FjaGUuCi0gICAganNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKCkuZnJlZSgpOwotCi0gICAgYXNz
ZXJ0RXF1YWxzKDEsIGpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgpOwot
Ci0gICAgLy8gQWxsb2NhdGluZyBhbmQgdGhlbiBmcmVlaW5nIHRocmVlIGRlY29kZXJzIHNob3Vs
ZCBsZWF2ZSB1cyB3aXRoIHRocmVlIGluCi0gICAgLy8gdGhlIGNhY2hlLgotCi0gICAgdmFyIGRl
Y29kZXIxID0ganNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKCk7Ci0gICAgdmFyIGRlY29kZXIyID0g
anNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKCk7Ci0gICAgdmFyIGRlY29kZXIzID0ganNwYi5CaW5h
cnlEZWNvZGVyLmFsbG9jKCk7Ci0gICAgZGVjb2RlcjEuZnJlZSgpOwotICAgIGRlY29kZXIyLmZy
ZWUoKTsKLSAgICBkZWNvZGVyMy5mcmVlKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMywganNwYi5C
aW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCk7Ci0gIH0pOwotCi0KLSAgLyoqCi0g
ICAqIFRlc3RzIHJlYWRpbmcgNjQtYml0IGludGVnZXJzIGFzIGhhc2ggc3RyaW5ncy4KLSAgICov
Ci0gIGl0KCd0ZXN0SGFzaFN0cmluZ3MnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgZW5jb2RlciA9
IG5ldyBqc3BiLkJpbmFyeUVuY29kZXIoKTsKLQotICAgIHZhciBoYXNoQSA9IFN0cmluZy5mcm9t
Q2hhckNvZGUoMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwotICAgIHZhciBoYXNoQiA9IFN0
cmluZy5mcm9tQ2hhckNvZGUoMHgxMiwgMHgzNCwgMHgwMCwgMHgwMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwotICAgIHZhciBo
YXNoQyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODcsIDB4NjUsIDB4NDMsIDB4MjEpOwot
ICAgIHZhciBoYXNoRCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhGRiwgMHhGRiwgMHhGRiwgMHhG
RiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsIDB4RkYsIDB4RkYs
IDB4RkYpOwotCi0gICAgZW5jb2Rlci53cml0ZVZhcmludEhhc2g2NChoYXNoQSk7Ci0gICAgZW5j
b2Rlci53cml0ZVZhcmludEhhc2g2NChoYXNoQik7Ci0gICAgZW5jb2Rlci53cml0ZVZhcmludEhh
c2g2NChoYXNoQyk7Ci0gICAgZW5jb2Rlci53cml0ZVZhcmludEhhc2g2NChoYXNoRCk7Ci0KLSAg
ICBlbmNvZGVyLndyaXRlRml4ZWRIYXNoNjQoaGFzaEEpOwotICAgIGVuY29kZXIud3JpdGVGaXhl
ZEhhc2g2NChoYXNoQik7Ci0gICAgZW5jb2Rlci53cml0ZUZpeGVkSGFzaDY0KGhhc2hDKTsKLSAg
ICBlbmNvZGVyLndyaXRlRml4ZWRIYXNoNjQoaGFzaEQpOwotCi0gICAgdmFyIGRlY29kZXIgPSBq
c3BiLkJpbmFyeURlY29kZXIuYWxsb2MoZW5jb2Rlci5lbmQoKSk7Ci0KLSAgICBhc3NlcnRFcXVh
bHMoaGFzaEEsIGRlY29kZXIucmVhZFZhcmludEhhc2g2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMo
aGFzaEIsIGRlY29kZXIucmVhZFZhcmludEhhc2g2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoaGFz
aEMsIGRlY29kZXIucmVhZFZhcmludEhhc2g2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoaGFzaEQs
IGRlY29kZXIucmVhZFZhcmludEhhc2g2NCgpKTsKLQotICAgIGFzc2VydEVxdWFscyhoYXNoQSwg
ZGVjb2Rlci5yZWFkRml4ZWRIYXNoNjQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGhhc2hCLCBkZWNv
ZGVyLnJlYWRGaXhlZEhhc2g2NCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoaGFzaEMsIGRlY29kZXIu
cmVhZEZpeGVkSGFzaDY0KCkpOwotICAgIGFzc2VydEVxdWFscyhoYXNoRCwgZGVjb2Rlci5yZWFk
Rml4ZWRIYXNoNjQoKSk7Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAqIFZlcmlmaWVzIHRoYXQgbWlz
dXNlIG9mIHRoZSBkZWNvZGVyIGNsYXNzIHRyaWdnZXJzIGFzc2VydGlvbnMuCi0gICAqIEBzdXBw
cmVzcyB7Y2hlY2tUeXBlc3x2aXNpYmlsaXR5fQotICAgKi8KLSAgaXQoJ3Rlc3REZWNvZGVFcnJv
cnMnLCBmdW5jdGlvbigpIHsKLSAgICAvLyBSZWFkaW5nIGEgdmFsdWUgcGFzdCB0aGUgZW5kIG9m
IHRoZSBzdHJlYW0gc2hvdWxkIHRyaWdnZXIgYW4gYXNzZXJ0aW9uLgotICAgIHZhciBkZWNvZGVy
ID0ganNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKFswLCAxLCAyXSk7Ci0gICAgYXNzZXJ0VGhyb3dz
KGZ1bmN0aW9uKCkge2RlY29kZXIucmVhZFVpbnQ2NCgpfSk7Ci0KLSAgICAvLyBPdmVybG9uZyB2
YXJpbnRzIHNob3VsZCB0cmlnZ2VyIGFzc2VydGlvbnMuCi0gICAgZGVjb2Rlci5zZXRCbG9jayhb
MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKLSAgICAgICAgICAgICAgICAgICAgICAyNTUs
IDI1NSwgMjU1LCAyNTUsIDI1NSwgMF0pOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHtk
ZWNvZGVyLnJlYWRVbnNpZ25lZFZhcmludDY0KCl9KTsKLSAgICBkZWNvZGVyLnJlc2V0KCk7Ci0g
ICAgYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkge2RlY29kZXIucmVhZFNpZ25lZFZhcmludDY0KCl9
KTsKLSAgICBkZWNvZGVyLnJlc2V0KCk7Ci0gICAgYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkge2Rl
Y29kZXIucmVhZFppZ3phZ1ZhcmludDY0KCl9KTsKLQotICAgIC8vIFBvc2l0aXZlIDMyLWJpdCB2
YXJpbnRzIGVuY29kZWQgd2l0aCAxIGJpdHMgaW4gcG9zaXRpb25zIDMzIHRocm91Z2ggMzUKLSAg
ICAvLyBzaG91bGQgdHJpZ2dlciBhc3NlcnRpb25zLgotICAgIGRlY29kZXIuc2V0QmxvY2soWzI1
NSwgMjU1LCAyNTUsIDI1NSwgMHgxRl0pOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHtk
ZWNvZGVyLnJlYWRVbnNpZ25lZFZhcmludDMyKCl9KTsKLQotICAgIGRlY29kZXIuc2V0QmxvY2so
WzI1NSwgMjU1LCAyNTUsIDI1NSwgMHgyRl0pOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigp
IHtkZWNvZGVyLnJlYWRVbnNpZ25lZFZhcmludDMyKCl9KTsKLQotICAgIGRlY29kZXIuc2V0Qmxv
Y2soWzI1NSwgMjU1LCAyNTUsIDI1NSwgMHg0Rl0pOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlv
bigpIHtkZWNvZGVyLnJlYWRVbnNpZ25lZFZhcmludDMyKCl9KTsKLQotICAgIC8vIE5lZ2F0aXZl
IDMyLWJpdCB2YXJpbnRzIGVuY29kZWQgd2l0aCBub24tMSBiaXRzIGluIHRoZSBoaWdoIGR3b3Jk
IHNob3VsZAotICAgIC8vIHRyaWdnZXIgYXNzZXJ0aW9ucy4KLSAgICBkZWNvZGVyLnNldEJsb2Nr
KFsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAyNTUsIDI1NSwgMV0pOwotICAgIGFz
c2VydFRocm93cyhmdW5jdGlvbigpIHtkZWNvZGVyLnJlYWRVbnNpZ25lZFZhcmludDMyKCl9KTsK
LQotICAgIGRlY29kZXIuc2V0QmxvY2soWzI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1
NSwgMjU1LCAyNTUsIDBdKTsKLSAgICBhc3NlcnRUaHJvd3MoZnVuY3Rpb24oKSB7ZGVjb2Rlci5y
ZWFkVW5zaWduZWRWYXJpbnQzMigpfSk7Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAqIFRlc3RzIGVu
Y29kaW5nIGFuZCBkZWNvZGluZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KLSAgICovCi0gIGl0KCd0
ZXN0VW5zaWduZWRJbnRlZ2VycycsIGZ1bmN0aW9uKCkgewotICAgIGRvVGVzdFVuc2lnbmVkVmFs
dWUoCi0gICAgICAgIGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ4LAotICAg
ICAgICBqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDgsCi0gICAgICAgIDEs
IDB4RkYsIE1hdGgucm91bmQpOwotCi0gICAgZG9UZXN0VW5zaWduZWRWYWx1ZSgKLSAgICAgICAg
anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDE2LAotICAgICAgICBqc3BiLkJp
bmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDE2LAotICAgICAgICAxLCAweEZGRkYsIE1h
dGgucm91bmQpOwotCi0gICAgZG9UZXN0VW5zaWduZWRWYWx1ZSgKLSAgICAgICAganNwYi5CaW5h
cnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDMyLAotICAgICAgICBqc3BiLkJpbmFyeUVuY29k
ZXIucHJvdG90eXBlLndyaXRlVWludDMyLAotICAgICAgICAxLCAweEZGRkZGRkZGLCBNYXRoLnJv
dW5kKTsKLQotICAgIGRvVGVzdFVuc2lnbmVkVmFsdWUoCi0gICAgICAgIGpzcGIuQmluYXJ5RGVj
b2Rlci5wcm90b3R5cGUucmVhZFVpbnQ2NCwKLSAgICAgICAganNwYi5CaW5hcnlFbmNvZGVyLnBy
b3RvdHlwZS53cml0ZVVpbnQ2NCwKLSAgICAgICAgMSwgTWF0aC5wb3coMiwgNjQpIC0gMTAyNSwg
TWF0aC5yb3VuZCk7Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAqIFRlc3RzIGVuY29kaW5nIGFuZCBk
ZWNvZGluZyBvZiBzaWduZWQgaW50ZWdlcnMuCi0gICAqLwotICBpdCgndGVzdFNpZ25lZEludGVn
ZXJzJywgZnVuY3Rpb24oKSB7Ci0gICAgZG9UZXN0U2lnbmVkVmFsdWUoCi0gICAgICAgIGpzcGIu
QmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDgsCi0gICAgICAgIGpzcGIuQmluYXJ5RW5j
b2Rlci5wcm90b3R5cGUud3JpdGVJbnQ4LAotICAgICAgICAxLCAtMHg4MCwgMHg3RiwgTWF0aC5y
b3VuZCk7Ci0KLSAgICBkb1Rlc3RTaWduZWRWYWx1ZSgKLSAgICAgICAganNwYi5CaW5hcnlEZWNv
ZGVyLnByb3RvdHlwZS5yZWFkSW50MTYsCi0gICAgICAgIGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90
b3R5cGUud3JpdGVJbnQxNiwKLSAgICAgICAgMSwgLTB4ODAwMCwgMHg3RkZGLCBNYXRoLnJvdW5k
KTsKLQotICAgIGRvVGVzdFNpZ25lZFZhbHVlKAotICAgICAgICBqc3BiLkJpbmFyeURlY29kZXIu
cHJvdG90eXBlLnJlYWRJbnQzMiwKLSAgICAgICAganNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlw
ZS53cml0ZUludDMyLAotICAgICAgICAxLCAtMHg4MDAwMDAwMCwgMHg3RkZGRkZGRiwgTWF0aC5y
b3VuZCk7Ci0KLSAgICBkb1Rlc3RTaWduZWRWYWx1ZSgKLSAgICAgICAganNwYi5CaW5hcnlEZWNv
ZGVyLnByb3RvdHlwZS5yZWFkSW50NjQsCi0gICAgICAgIGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90
b3R5cGUud3JpdGVJbnQ2NCwKLSAgICAgICAgMSwgLU1hdGgucG93KDIsIDYzKSwgTWF0aC5wb3co
MiwgNjMpIC0gNTEzLCBNYXRoLnJvdW5kKTsKLSAgfSk7Ci0KLQotICAvKioKLSAgICogVGVzdHMg
ZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIGZsb2F0cy4KLSAgICovCi0gIGl0KCd0ZXN0RmxvYXRz
JywgZnVuY3Rpb24oKSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHgKLSAgICAg
KiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gdHJ1bmNhdGUoeCkgewot
ICAgICAgdmFyIHRlbXAgPSBuZXcgRmxvYXQzMkFycmF5KDEpOwotICAgICAgdGVtcFswXSA9IHg7
Ci0gICAgICByZXR1cm4gdGVtcFswXTsKLSAgICB9Ci0gICAgZG9UZXN0U2lnbmVkVmFsdWUoCi0g
ICAgICAgIGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEZsb2F0LAotICAgICAgICBq
c3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRmxvYXQsCi0gICAgICAgIGpzcGIuQmlu
YXJ5Q29uc3RhbnRzLkZMT0FUMzJfRVBTLAotICAgICAgICAtanNwYi5CaW5hcnlDb25zdGFudHMu
RkxPQVQzMl9NQVgsCi0gICAgICAgIGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUFYLAot
ICAgICAgICB0cnVuY2F0ZSk7Ci0KLSAgICBkb1Rlc3RTaWduZWRWYWx1ZSgKLSAgICAgICAganNw
Yi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkRG91YmxlLAotICAgICAgICBqc3BiLkJpbmFy
eUVuY29kZXIucHJvdG90eXBlLndyaXRlRG91YmxlLAotICAgICAgICBqc3BiLkJpbmFyeUNvbnN0
YW50cy5GTE9BVDY0X0VQUyAqIDEwLAotICAgICAgICAtanNwYi5CaW5hcnlDb25zdGFudHMuRkxP
QVQ2NF9NQVgsCi0gICAgICAgIGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYLAotICAg
ICAgICBmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9KTsKLSAgfSk7Ci19KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
anMvYmluYXJ5L2VuY29kZXIuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS9lbmNvZGVyLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjOWIwYzJhZWU3NjI2MGQyMGQ3ZDM4NzUyNzk1ZWViYzNhNWExZDVj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvYmluYXJ5
L2VuY29kZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzAgKzAsMCBAQAotLy8gUHJvdG9jb2wg
QnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQg
MjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxv
cGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8qKgotICogQGZpbGVvdmVydmlldyBCaW5hcnlFbmNv
ZGUgZGVmaW5lcyBtZXRob2RzIGZvciBlbmNvZGluZyBKYXZhc2NyaXB0IHZhbHVlcwotICogaW50
byBhcnJheXMgb2YgYnl0ZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBQcm90b2NvbCBCdWZmZXIgd2ly
ZSBmb3JtYXQuCi0gKgotICogQGF1dGhvciBhYXBwbGVieUBnb29nbGUuY29tIChBdXN0aW4gQXBw
bGVieSkKLSAqLwotCi1nb29nLnByb3ZpZGUoJ2pzcGIuQmluYXJ5RW5jb2RlcicpOwotCi1nb29n
LnJlcXVpcmUoJ2dvb2cuYXNzZXJ0cycpOwotZ29vZy5yZXF1aXJlKCdqc3BiLkJpbmFyeUNvbnN0
YW50cycpOwotZ29vZy5yZXF1aXJlKCdqc3BiLnV0aWxzJyk7Ci0KLQotCi0vKioKLSAqIEJpbmFy
eUVuY29kZXIgaW1wbGVtZW50cyBlbmNvZGVycyBmb3IgYWxsIHRoZSB3aXJlIHR5cGVzIHNwZWNp
ZmllZCBpbgotICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy9kb2NzL2VuY29kaW5nLgotICoKLSAqIEBjb25zdHJ1Y3RvcgotICogQHN0cnVjdAotICovCi1q
c3BiLkJpbmFyeUVuY29kZXIgPSBmdW5jdGlvbigpIHsKLSAgLyoqIEBwcml2YXRlIHshQXJyYXku
PG51bWJlcj59ICovCi0gIHRoaXMuYnVmZmVyXyA9IFtdOwotfTsKLQotCi0vKioKLSAqIEByZXR1
cm4ge251bWJlcn0KLSAqLwotanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS5sZW5ndGggPSBm
dW5jdGlvbigpIHsKLSAgcmV0dXJuIHRoaXMuYnVmZmVyXy5sZW5ndGg7Ci19OwotCi0KLS8qKgot
ICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fQotICovCi1qc3BiLkJpbmFyeUVuY29kZXIucHJv
dG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkgewotICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXJfOwot
ICB0aGlzLmJ1ZmZlcl8gPSBbXTsKLSAgcmV0dXJuIGJ1ZmZlcjsKLX07Ci0KLQotLyoqCi0gKiBF
bmNvZGVzIGEgNjQtYml0IGludGVnZXIgaW4gMzI6MzIgc3BsaXQgcmVwcmVzZW50YXRpb24gaW50
byBpdHMgd2lyZS1mb3JtYXQKLSAqIHZhcmludCByZXByZXNlbnRhdGlvbiBhbmQgc3RvcmVzIGl0
IGluIHRoZSBidWZmZXIuCi0gKiBAcGFyYW0ge251bWJlcn0gbG93Qml0cyBUaGUgbG93IDMyIGJp
dHMgb2YgdGhlIGludC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoQml0cyBUaGUgaGlnaCAzMiBi
aXRzIG9mIHRoZSBpbnQuCi0gKi8KLWpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVT
cGxpdFZhcmludDY0ID0gZnVuY3Rpb24obG93Qml0cywgaGlnaEJpdHMpIHsKLSAgZ29vZy5hc3Nl
cnRzLmFzc2VydChsb3dCaXRzID09IE1hdGguZmxvb3IobG93Qml0cykpOwotICBnb29nLmFzc2Vy
dHMuYXNzZXJ0KGhpZ2hCaXRzID09IE1hdGguZmxvb3IoaGlnaEJpdHMpKTsKLSAgZ29vZy5hc3Nl
cnRzLmFzc2VydCgobG93Qml0cyA+PSAwKSAmJgotICAgICAgICAgICAgICAgICAgICAgIChsb3dC
aXRzIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSk7Ci0gIGdvb2cuYXNzZXJ0cy5h
c3NlcnQoKGhpZ2hCaXRzID49IDApICYmCi0gICAgICAgICAgICAgICAgICAgICAgKGhpZ2hCaXRz
IDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSk7Ci0KLSAgLy8gQnJlYWsgdGhlIGJp
bmFyeSByZXByZXNlbnRhdGlvbiBpbnRvIGNodW5rcyBvZiA3IGJpdHMsIHNldCB0aGUgOHRoIGJp
dAotICAvLyBpbiBlYWNoIGNodW5rIGlmIGl0J3Mgbm90IHRoZSBmaW5hbCBjaHVuaywgYW5kIGFw
cGVuZCB0byB0aGUgcmVzdWx0LgotICB3aGlsZSAoaGlnaEJpdHMgPiAwIHx8IGxvd0JpdHMgPiAx
MjcpIHsKLSAgICB0aGlzLmJ1ZmZlcl8ucHVzaCgobG93Qml0cyAmIDB4N2YpIHwgMHg4MCk7Ci0g
ICAgbG93Qml0cyA9ICgobG93Qml0cyA+Pj4gNykgfCAoaGlnaEJpdHMgPDwgMjUpKSA+Pj4gMDsK
LSAgICBoaWdoQml0cyA9IGhpZ2hCaXRzID4+PiA3OwotICB9Ci0gIHRoaXMuYnVmZmVyXy5wdXNo
KGxvd0JpdHMpOwotfTsKLQotCi0vKioKLSAqIEVuY29kZXMgYSAzMi1iaXQgdW5zaWduZWQgaW50
ZWdlciBpbnRvIGl0cyB3aXJlLWZvcm1hdCB2YXJpbnQgcmVwcmVzZW50YXRpb24KLSAqIGFuZCBz
dG9yZXMgaXQgaW4gdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgaW50
ZWdlciB0byBjb252ZXJ0LgotICovCi1qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRl
VW5zaWduZWRWYXJpbnQzMiA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3Nl
cnQodmFsdWUgPT0gTWF0aC5mbG9vcih2YWx1ZSkpOwotICBnb29nLmFzc2VydHMuYXNzZXJ0KCh2
YWx1ZSA+PSAwKSAmJgotICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA8IGpzcGIuQmluYXJ5
Q29uc3RhbnRzLlRXT19UT18zMikpOwotCi0gIHdoaWxlICh2YWx1ZSA+IDEyNykgewotICAgIHRo
aXMuYnVmZmVyXy5wdXNoKCh2YWx1ZSAmIDB4N2YpIHwgMHg4MCk7Ci0gICAgdmFsdWUgPSB2YWx1
ZSA+Pj4gNzsKLSAgfQotCi0gIHRoaXMuYnVmZmVyXy5wdXNoKHZhbHVlKTsKLX07Ci0KLQotLyoq
Ci0gKiBFbmNvZGVzIGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGludG8gaXRzIHdpcmUtZm9ybWF0
IHZhcmludCByZXByZXNlbnRhdGlvbgotICogYW5kIHN0b3JlcyBpdCBpbiB0aGUgYnVmZmVyLgot
ICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSBpbnRlZ2VyIHRvIGNvbnZlcnQuCi0gKi8KLWpz
cGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQzMiA9IGZ1bmN0aW9u
KHZhbHVlKSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQodmFsdWUgPT0gTWF0aC5mbG9vcih2YWx1
ZSkpOwotICBnb29nLmFzc2VydHMuYXNzZXJ0KCh2YWx1ZSA+PSAtanNwYi5CaW5hcnlDb25zdGFu
dHMuVFdPX1RPXzMxKSAmJgotICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA8IGpzcGIuQmlu
YXJ5Q29uc3RhbnRzLlRXT19UT18zMSkpOwotCi0gIC8vIFVzZSB0aGUgdW5zaWduZWQgdmVyc2lv
biBpZiB0aGUgdmFsdWUgaXMgbm90IG5lZ2F0aXZlLgotICBpZiAodmFsdWUgPj0gMCkgewotICAg
IHRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyKHZhbHVlKTsKLSAgICByZXR1cm47Ci0gIH0KLQot
ICAvLyBXcml0ZSBuaW5lIGJ5dGVzIHdpdGggYSBfc2lnbmVkXyByaWdodCBzaGlmdCBzbyB3ZSBw
cmVzZXJ2ZSB0aGUgc2lnbiBiaXQuCi0gIGZvciAodmFyIGkgPSAwOyBpIDwgOTsgaSsrKSB7Ci0g
ICAgdGhpcy5idWZmZXJfLnB1c2goKHZhbHVlICYgMHg3ZikgfCAweDgwKTsKLSAgICB2YWx1ZSA9
IHZhbHVlID4+IDc7Ci0gIH0KLQotICAvLyBUaGUgYWJvdmUgbG9vcCB3cml0ZXMgb3V0IDYzIGJp
dHMsIHNvIHRoZSBsYXN0IGJ5dGUgaXMgYWx3YXlzIHRoZSBzaWduIGJpdAotICAvLyB3aGljaCBp
cyBhbHdheXMgc2V0IGZvciBuZWdhdGl2ZSBudW1iZXJzLgotICB0aGlzLmJ1ZmZlcl8ucHVzaCgx
KTsKLX07Ci0KLQotLyoqCi0gKiBFbmNvZGVzIGEgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgaW50
byBpdHMgd2lyZS1mb3JtYXQgdmFyaW50IHJlcHJlc2VudGF0aW9uCi0gKiBhbmQgc3RvcmVzIGl0
IGluIHRoZSBidWZmZXIuIEludGVnZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlIGluIDY0
IGJpdHMKLSAqIHdpbGwgYmUgdHJ1bmNhdGVkLgotICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRo
ZSBpbnRlZ2VyIHRvIGNvbnZlcnQuCi0gKi8KLWpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUu
d3JpdGVVbnNpZ25lZFZhcmludDY0ID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgZ29vZy5hc3NlcnRz
LmFzc2VydCh2YWx1ZSA9PSBNYXRoLmZsb29yKHZhbHVlKSk7Ci0gIGdvb2cuYXNzZXJ0cy5hc3Nl
cnQoKHZhbHVlID49IDApICYmCi0gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIDwganNwYi5C
aW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSk7Ci0gIGpzcGIudXRpbHMuc3BsaXRJbnQ2NCh2YWx1
ZSk7Ci0gIHRoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAganNwYi51dGlscy5zcGxpdDY0SGlnaCk7Ci19OwotCi0K
LS8qKgotICogRW5jb2RlcyBhIDY0LWJpdCBzaWduZWQgaW50ZWdlciBpbnRvIGl0cyB3aXJlLWZv
cm1hdCB2YXJpbnQgcmVwcmVzZW50YXRpb24KLSAqIGFuZCBzdG9yZXMgaXQgaW4gdGhlIGJ1ZmZl
ci4gSW50ZWdlcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUgaW4gNjQgYml0cwotICogd2ls
bCBiZSB0cnVuY2F0ZWQuCi0gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIGludGVnZXIgdG8g
Y29udmVydC4KLSAqLwotanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVNpZ25lZFZh
cmludDY0ID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCh2YWx1ZSA9
PSBNYXRoLmZsb29yKHZhbHVlKSk7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoKHZhbHVlID49IC1q
c3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpICYmCi0gICAgICAgICAgICAgICAgICAgICAg
KHZhbHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSk7Ci0gIGpzcGIudXRpbHMu
c3BsaXRJbnQ2NCh2YWx1ZSk7Ci0gIHRoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMu
c3BsaXQ2NExvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAganNwYi51dGlscy5zcGxpdDY0
SGlnaCk7Ci19OwotCi0KLS8qKgotICogRW5jb2RlcyBhIEphdmFTY3JpcHQgaW50ZWdlciBpbnRv
IGl0cyB3aXJlLWZvcm1hdCwgemlnemFnLWVuY29kZWQgdmFyaW50Ci0gKiByZXByZXNlbnRhdGlv
biBhbmQgc3RvcmVzIGl0IGluIHRoZSBidWZmZXIuCi0gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUg
VGhlIGludGVnZXIgdG8gY29udmVydC4KLSAqLwotanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlw
ZS53cml0ZVppZ3phZ1ZhcmludDMyID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgZ29vZy5hc3NlcnRz
LmFzc2VydCh2YWx1ZSA9PSBNYXRoLmZsb29yKHZhbHVlKSk7Ci0gIGdvb2cuYXNzZXJ0cy5hc3Nl
cnQoKHZhbHVlID49IC1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgKHZhbHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSk7
Ci0gIHRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyKCgodmFsdWUgPDwgMSkgXiAodmFsdWUgPj4g
MzEpKSA+Pj4gMCk7Ci19OwotCi0KLS8qKgotICogRW5jb2RlcyBhIEphdmFTY3JpcHQgaW50ZWdl
ciBpbnRvIGl0cyB3aXJlLWZvcm1hdCwgemlnemFnLWVuY29kZWQgdmFyaW50Ci0gKiByZXByZXNl
bnRhdGlvbiBhbmQgc3RvcmVzIGl0IGluIHRoZSBidWZmZXIuIEludGVnZXJzIG5vdCByZXByZXNl
bnRhYmxlIGluIDY0Ci0gKiBiaXRzIHdpbGwgYmUgdHJ1bmNhdGVkLgotICogQHBhcmFtIHtudW1i
ZXJ9IHZhbHVlIFRoZSBpbnRlZ2VyIHRvIGNvbnZlcnQuCi0gKi8KLWpzcGIuQmluYXJ5RW5jb2Rl
ci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQ2NCA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIGdv
b2cuYXNzZXJ0cy5hc3NlcnQodmFsdWUgPT0gTWF0aC5mbG9vcih2YWx1ZSkpOwotICBnb29nLmFz
c2VydHMuYXNzZXJ0KCh2YWx1ZSA+PSAtanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSAm
JgotICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA8IGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRX
T19UT182MykpOwotICBqc3BiLnV0aWxzLnNwbGl0WmlnemFnNjQodmFsdWUpOwotICB0aGlzLndy
aXRlU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLnNwbGl0NjRMb3csCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpOwotfTsKLQotCi0vKioKLSAqIFdyaXRl
cyBhIDgtYml0IHVuc2lnbmVkIGludGVnZXIgdG8gdGhlIGJ1ZmZlci4gTnVtYmVycyBvdXRzaWRl
IHRoZSByYW5nZQotICogWzAsMl44KSB3aWxsIGJlIHRydW5jYXRlZC4KLSAqIEBwYXJhbSB7bnVt
YmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5RW5jb2Rlci5w
cm90b3R5cGUud3JpdGVVaW50OCA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIGdvb2cuYXNzZXJ0cy5h
c3NlcnQodmFsdWUgPT0gTWF0aC5mbG9vcih2YWx1ZSkpOwotICBnb29nLmFzc2VydHMuYXNzZXJ0
KCh2YWx1ZSA+PSAwKSAmJiAodmFsdWUgPCAyNTYpKTsKLSAgdGhpcy5idWZmZXJfLnB1c2goKHZh
bHVlID4+PiAwKSAmIDB4RkYpOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIDE2LWJpdCB1bnNp
Z25lZCBpbnRlZ2VyIHRvIHRoZSBidWZmZXIuIE51bWJlcnMgb3V0c2lkZSB0aGUKLSAqIHJhbmdl
IFswLDJeMTYpIHdpbGwgYmUgdHJ1bmNhdGVkLgotICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRo
ZSB2YWx1ZSB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0
ZVVpbnQxNiA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQodmFsdWUg
PT0gTWF0aC5mbG9vcih2YWx1ZSkpOwotICBnb29nLmFzc2VydHMuYXNzZXJ0KCh2YWx1ZSA+PSAw
KSAmJiAodmFsdWUgPCA2NTUzNikpOwotICB0aGlzLmJ1ZmZlcl8ucHVzaCgodmFsdWUgPj4+IDAp
ICYgMHhGRik7Ci0gIHRoaXMuYnVmZmVyXy5wdXNoKCh2YWx1ZSA+Pj4gOCkgJiAweEZGKTsKLX07
Ci0KLQotLyoqCi0gKiBXcml0ZXMgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciB0byB0aGUgYnVm
ZmVyLiBOdW1iZXJzIG91dHNpZGUgdGhlCi0gKiByYW5nZSBbMCwyXjMyKSB3aWxsIGJlIHRydW5j
YXRlZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUuCi0gKi8K
LWpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzIgPSBmdW5jdGlvbih2YWx1
ZSkgewotICBnb29nLmFzc2VydHMuYXNzZXJ0KHZhbHVlID09IE1hdGguZmxvb3IodmFsdWUpKTsK
LSAgZ29vZy5hc3NlcnRzLmFzc2VydCgodmFsdWUgPj0gMCkgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAodmFsdWUgPCBqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpKTsKLSAgdGhpcy5i
dWZmZXJfLnB1c2goKHZhbHVlID4+PiAwKSAmIDB4RkYpOwotICB0aGlzLmJ1ZmZlcl8ucHVzaCgo
dmFsdWUgPj4+IDgpICYgMHhGRik7Ci0gIHRoaXMuYnVmZmVyXy5wdXNoKCh2YWx1ZSA+Pj4gMTYp
ICYgMHhGRik7Ci0gIHRoaXMuYnVmZmVyXy5wdXNoKCh2YWx1ZSA+Pj4gMjQpICYgMHhGRik7Ci19
OwotCi0KLS8qKgotICogV3JpdGVzIGEgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgdG8gdGhlIGJ1
ZmZlci4gTnVtYmVycyBvdXRzaWRlIHRoZQotICogcmFuZ2UgWzAsMl42NCkgd2lsbCBiZSB0cnVu
Y2F0ZWQuCi0gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyaXRlLgotICov
Ci1qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDY0ID0gZnVuY3Rpb24odmFs
dWUpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCh2YWx1ZSA9PSBNYXRoLmZsb29yKHZhbHVlKSk7
Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoKHZhbHVlID49IDApICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgKHZhbHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSk7Ci0gIGpzcGIu
dXRpbHMuc3BsaXRVaW50NjQodmFsdWUpOwotICB0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMu
c3BsaXQ2NExvdyk7Ci0gIHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0SGlnaCk7
Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgOC1iaXQgaW50ZWdlciB0byB0aGUgYnVmZmVyLiBO
dW1iZXJzIG91dHNpZGUgdGhlIHJhbmdlCi0gKiBbLTJeNywyXjcpIHdpbGwgYmUgdHJ1bmNhdGVk
LgotICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZS4KLSAqLwotanNw
Yi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbih2YWx1ZSkgewot
ICBnb29nLmFzc2VydHMuYXNzZXJ0KHZhbHVlID09IE1hdGguZmxvb3IodmFsdWUpKTsKLSAgZ29v
Zy5hc3NlcnRzLmFzc2VydCgodmFsdWUgPj0gLTEyOCkgJiYgKHZhbHVlIDwgMTI4KSk7Ci0gIHRo
aXMuYnVmZmVyXy5wdXNoKCh2YWx1ZSA+Pj4gMCkgJiAweEZGKTsKLX07Ci0KLQotLyoqCi0gKiBX
cml0ZXMgYSAxNi1iaXQgaW50ZWdlciB0byB0aGUgYnVmZmVyLiBOdW1iZXJzIG91dHNpZGUgdGhl
IHJhbmdlCi0gKiBbLTJeMTUsMl4xNSkgd2lsbCBiZSB0cnVuY2F0ZWQuCi0gKiBAcGFyYW0ge251
bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFyeUVuY29kZXIu
cHJvdG90eXBlLndyaXRlSW50MTYgPSBmdW5jdGlvbih2YWx1ZSkgewotICBnb29nLmFzc2VydHMu
YXNzZXJ0KHZhbHVlID09IE1hdGguZmxvb3IodmFsdWUpKTsKLSAgZ29vZy5hc3NlcnRzLmFzc2Vy
dCgodmFsdWUgPj0gLTMyNzY4KSAmJiAodmFsdWUgPCAzMjc2OCkpOwotICB0aGlzLmJ1ZmZlcl8u
cHVzaCgodmFsdWUgPj4+IDApICYgMHhGRik7Ci0gIHRoaXMuYnVmZmVyXy5wdXNoKCh2YWx1ZSA+
Pj4gOCkgJiAweEZGKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYSAzMi1iaXQgaW50ZWdlciB0
byB0aGUgYnVmZmVyLiBOdW1iZXJzIG91dHNpZGUgdGhlIHJhbmdlCi0gKiBbLTJeMzEsMl4zMSkg
d2lsbCBiZSB0cnVuY2F0ZWQuCi0gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRv
IHdyaXRlLgotICovCi1qc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50MzIgPSBm
dW5jdGlvbih2YWx1ZSkgewotICBnb29nLmFzc2VydHMuYXNzZXJ0KHZhbHVlID09IE1hdGguZmxv
b3IodmFsdWUpKTsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCgodmFsdWUgPj0gLWpzcGIuQmluYXJ5
Q29uc3RhbnRzLlRXT19UT18zMSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPCBq
c3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpKTsKLSAgdGhpcy5idWZmZXJfLnB1c2goKHZh
bHVlID4+PiAwKSAmIDB4RkYpOwotICB0aGlzLmJ1ZmZlcl8ucHVzaCgodmFsdWUgPj4+IDgpICYg
MHhGRik7Ci0gIHRoaXMuYnVmZmVyXy5wdXNoKCh2YWx1ZSA+Pj4gMTYpICYgMHhGRik7Ci0gIHRo
aXMuYnVmZmVyXy5wdXNoKCh2YWx1ZSA+Pj4gMjQpICYgMHhGRik7Ci19OwotCi0KLS8qKgotICog
V3JpdGVzIGEgNjQtYml0IGludGVnZXIgdG8gdGhlIGJ1ZmZlci4gTnVtYmVycyBvdXRzaWRlIHRo
ZSByYW5nZQotICogWy0yXjYzLDJeNjMpIHdpbGwgYmUgdHJ1bmNhdGVkLgotICogQHBhcmFtIHtu
dW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlFbmNvZGVy
LnByb3RvdHlwZS53cml0ZUludDY0ID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgZ29vZy5hc3NlcnRz
LmFzc2VydCh2YWx1ZSA9PSBNYXRoLmZsb29yKHZhbHVlKSk7Ci0gIGdvb2cuYXNzZXJ0cy5hc3Nl
cnQoKHZhbHVlID49IC1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgKHZhbHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSk7
Ci0gIGpzcGIudXRpbHMuc3BsaXRJbnQ2NCh2YWx1ZSk7Ci0gIHRoaXMud3JpdGVVaW50MzIoanNw
Yi51dGlscy5zcGxpdDY0TG93KTsKLSAgdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0
NjRIaWdoKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0
aW5nIHBvaW50IHZhbHVlIHRvIHRoZSBidWZmZXIuIE51bWJlcnMKLSAqIHJlcXVpcmluZyBtb3Jl
IHRoYW4gMzIgYml0cyBvZiBwcmVjaXNpb24gd2lsbCBiZSB0cnVuY2F0ZWQuCi0gKiBAcGFyYW0g
e251bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFyeUVuY29k
ZXIucHJvdG90eXBlLndyaXRlRmxvYXQgPSBmdW5jdGlvbih2YWx1ZSkgewotICBnb29nLmFzc2Vy
dHMuYXNzZXJ0KCh2YWx1ZSA+PSAtanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVgpICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIDw9IGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZM
T0FUMzJfTUFYKSk7Ci0gIGpzcGIudXRpbHMuc3BsaXRGbG9hdDMyKHZhbHVlKTsKLSAgdGhpcy53
cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpOwotfTsKLQotCi0vKioKLSAqIFdyaXRl
cyBhIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUgdG8gdGhlIGJ1ZmZlci4g
QXMgdGhpcyBpcwotICogdGhlIG5hdGl2ZSBmb3JtYXQgdXNlZCBieSBKYXZhU2NyaXB0LCBubyBw
cmVjaXNpb24gd2lsbCBiZSBsb3N0LgotICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSB2YWx1
ZSB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZURvdWJs
ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoKHZhbHVlID49IC1q
c3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWCkgJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAodmFsdWUgPD0ganNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NQVgpKTsKLSAganNwYi51
dGlscy5zcGxpdEZsb2F0NjQodmFsdWUpOwotICB0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMu
c3BsaXQ2NExvdyk7Ci0gIHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0SGlnaCk7
Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgYm9vbGVhbiB2YWx1ZSB0byB0aGUgYnVmZmVyIGFz
IGEgdmFyaW50LgotICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUu
Ci0gKi8KLWpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVCb29sID0gZnVuY3Rpb24o
dmFsdWUpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydChnb29nLmlzQm9vbGVhbih2YWx1ZSkpOwot
ICB0aGlzLmJ1ZmZlcl8ucHVzaCh2YWx1ZSA/IDEgOiAwKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0
ZXMgYW4gZW51bSB2YWx1ZSB0byB0aGUgYnVmZmVyIGFzIGEgdmFyaW50LgotICogQHBhcmFtIHtu
dW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlFbmNvZGVy
LnByb3RvdHlwZS53cml0ZUVudW0gPSBmdW5jdGlvbih2YWx1ZSkgewotICBnb29nLmFzc2VydHMu
YXNzZXJ0KHZhbHVlID09IE1hdGguZmxvb3IodmFsdWUpKTsKLSAgZ29vZy5hc3NlcnRzLmFzc2Vy
dCgodmFsdWUgPj0gLWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSkgJiYKLSAgICAgICAg
ICAgICAgICAgICAgICAodmFsdWUgPCBqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpKTsK
LSAgdGhpcy53cml0ZVNpZ25lZFZhcmludDMyKHZhbHVlKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0
ZXMgYW4gYXJiaXRyYXJ5IGJ5dGUgYXJyYXkgdG8gdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSB7IVVp
bnQ4QXJyYXl9IGJ5dGVzIFRoZSBhcnJheSBvZiBieXRlcyB0byB3cml0ZS4KLSAqLwotanNwYi5C
aW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUJ5dGVzID0gZnVuY3Rpb24oYnl0ZXMpIHsKLSAg
dGhpcy5idWZmZXJfLnB1c2guYXBwbHkodGhpcy5idWZmZXJfLCBieXRlcyk7Ci19OwotCi0KLS8q
KgotICogV3JpdGVzIGEgNjQtYml0IGhhc2ggc3RyaW5nICg4IGNoYXJhY3RlcnMgQCA4IGJpdHMg
b2YgZGF0YSBlYWNoKSB0byB0aGUKLSAqIGJ1ZmZlciBhcyBhIHZhcmludC4KLSAqIEBwYXJhbSB7
c3RyaW5nfSBoYXNoIFRoZSBoYXNoIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFyeUVuY29kZXIu
cHJvdG90eXBlLndyaXRlVmFyaW50SGFzaDY0ID0gZnVuY3Rpb24oaGFzaCkgewotICBqc3BiLnV0
aWxzLnNwbGl0SGFzaDY0KGhhc2gpOwotICB0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChqc3BiLnV0
aWxzLnNwbGl0NjRMb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGpzcGIudXRpbHMuc3Bs
aXQ2NEhpZ2gpOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIDY0LWJpdCBoYXNoIHN0cmluZyAo
OCBjaGFyYWN0ZXJzIEAgOCBiaXRzIG9mIGRhdGEgZWFjaCkgdG8gdGhlCi0gKiBidWZmZXIgYXMg
YSBmaXhlZDY0LgotICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggVGhlIGhhc2ggdG8gd3JpdGUuCi0g
Ki8KLWpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVGaXhlZEhhc2g2NCA9IGZ1bmN0
aW9uKGhhc2gpIHsKLSAganNwYi51dGlscy5zcGxpdEhhc2g2NChoYXNoKTsKLSAgdGhpcy53cml0
ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpOwotICB0aGlzLndyaXRlVWludDMyKGpzcGIu
dXRpbHMuc3BsaXQ2NEhpZ2gpOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIFVURjE2IEphdmFz
Y3JpcHQgc3RyaW5nIHRvIHRoZSBidWZmZXIgZW5jb2RlZCBhcyBVVEY4LgotICogVE9ETyhhYXBw
bGVieSk6IEFkZCBzdXBwb3J0IGZvciBzdXJyb2dhdGUgcGFpcnMsIHJlamVjdCB1bnBhaXJlZCBz
dXJyb2dhdGVzLgotICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSBzdHJpbmcgdG8gd3JpdGUu
Ci0gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCB0byBlbmNvZGUg
dGhlIHN0cmluZy4KLSAqLwotanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVN0cmlu
ZyA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIHZhciBvbGRMZW5ndGggPSB0aGlzLmJ1ZmZlcl8ubGVu
Z3RoOwotCi0gIC8vIFVURjE2IHRvIFVURjggY29udmVyc2lvbiBsb29wIHN3aXBlZCBmcm9tIGdv
b2cuY3J5cHQuc3RyaW5nVG9VdGY4Qnl0ZUFycmF5LgotICBmb3IgKHZhciBpID0gMDsgaSA8IHZh
bHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAgdmFyIGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpOwotICAg
IGlmIChjIDwgMTI4KSB7Ci0gICAgICB0aGlzLmJ1ZmZlcl8ucHVzaChjKTsKLSAgICB9IGVsc2Ug
aWYgKGMgPCAyMDQ4KSB7Ci0gICAgICB0aGlzLmJ1ZmZlcl8ucHVzaCgoYyA+PiA2KSB8IDE5Mik7
Ci0gICAgICB0aGlzLmJ1ZmZlcl8ucHVzaCgoYyAmIDYzKSB8IDEyOCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHRoaXMuYnVmZmVyXy5wdXNoKChjID4+IDEyKSB8IDIyNCk7Ci0gICAgICB0aGlzLmJ1
ZmZlcl8ucHVzaCgoKGMgPj4gNikgJiA2MykgfCAxMjgpOwotICAgICAgdGhpcy5idWZmZXJfLnB1
c2goKGMgJiA2MykgfCAxMjgpOwotICAgIH0KLSAgfQotCi0gIHZhciBsZW5ndGggPSB0aGlzLmJ1
ZmZlcl8ubGVuZ3RoIC0gb2xkTGVuZ3RoOwotICByZXR1cm4gbGVuZ3RoOwotfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvanMvYmluYXJ5L3Byb3RvX3Rlc3QuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS9wcm90b190ZXN0LmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQwZjQyZTk1NDliNjQzODliN2M4NWNiM2YwY2Zj
Mzg3Mzc3ZTUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
anMvYmluYXJ5L3Byb3RvX3Rlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2MjggKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFRlc3Qgc3VpdGUgaXMgd3Jp
dHRlbiB1c2luZyBKYXNtaW5lIC0tIHNlZSBodHRwOi8vamFzbWluZS5naXRodWIuaW8vCi0KLWdv
b2cucmVxdWlyZSgnZ29vZy5jcnlwdC5iYXNlNjQnKTsKLWdvb2cucmVxdWlyZSgnZ29vZy50ZXN0
aW5nLmFzc2VydHMnKTsKLWdvb2cucmVxdWlyZSgnanNwYi5NZXNzYWdlJyk7Ci0KLS8vIENvbW1v
bkpTLUxvYWRGcm9tRmlsZTogLi4vdGVzdGJpbmFyeV9wYiBwcm90by5qc3BiLnRlc3QKLWdvb2cu
cmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LkV4dGVuZHNXaXRoTWVzc2FnZScpOwotZ29vZy5yZXF1
aXJlKCdwcm90by5qc3BiLnRlc3QuRm9yZWlnbkVudW0nKTsKLWdvb2cucmVxdWlyZSgncHJvdG8u
anNwYi50ZXN0LkZvcmVpZ25NZXNzYWdlJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVz
dC5UZXN0QWxsVHlwZXMnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LlRlc3RFeHRl
bmRhYmxlJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5leHRlbmRPcHRpb25hbEJv
b2wnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFsQnl0ZXMn
KTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFsRG91YmxlJyk7
Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5leHRlbmRPcHRpb25hbEZpeGVkMzInKTsK
LWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFsRml4ZWQ2NCcpOwot
Z29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxGbG9hdCcpOwotZ29v
Zy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxGb3JlaWduRW51bScpOwot
Z29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxJbnQzMicpOwotZ29v
Zy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxJbnQ2NCcpOwotZ29vZy5y
ZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxTZml4ZWQzMicpOwotZ29vZy5y
ZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxTZml4ZWQ2NCcpOwotZ29vZy5y
ZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxTaW50MzInKTsKLWdvb2cucmVx
dWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFsU2ludDY0Jyk7Ci1nb29nLnJlcXVp
cmUoJ3Byb3RvLmpzcGIudGVzdC5leHRlbmRPcHRpb25hbFN0cmluZycpOwotZ29vZy5yZXF1aXJl
KCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxVaW50MzInKTsKLWdvb2cucmVxdWlyZSgn
cHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFsVWludDY0Jyk7Ci1nb29nLnJlcXVpcmUoJ3By
b3RvLmpzcGIudGVzdC5leHRlbmRQYWNrZWRSZXBlYXRlZEJvb2xMaXN0Jyk7Ci1nb29nLnJlcXVp
cmUoJ3Byb3RvLmpzcGIudGVzdC5leHRlbmRQYWNrZWRSZXBlYXRlZERvdWJsZUxpc3QnKTsKLWdv
b2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVkRml4ZWQzMkxp
c3QnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVk
Rml4ZWQ2NExpc3QnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tl
ZFJlcGVhdGVkRmxvYXRMaXN0Jyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5leHRl
bmRQYWNrZWRSZXBlYXRlZEZvcmVpZ25FbnVtTGlzdCcpOwotZ29vZy5yZXF1aXJlKCdwcm90by5q
c3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRJbnQzMkxpc3QnKTsKLWdvb2cucmVxdWlyZSgn
cHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVkSW50NjRMaXN0Jyk7Ci1nb29nLnJl
cXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5leHRlbmRQYWNrZWRSZXBlYXRlZFNmaXhlZDMyTGlzdCcp
OwotZ29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRTZml4
ZWQ2NExpc3QnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tlZFJl
cGVhdGVkU2ludDMyTGlzdCcpOwotZ29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5k
UGFja2VkUmVwZWF0ZWRTaW50NjRMaXN0Jyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVz
dC5leHRlbmRQYWNrZWRSZXBlYXRlZFVpbnQzMkxpc3QnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8u
anNwYi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVkVWludDY0TGlzdCcpOwotZ29vZy5yZXF1aXJl
KCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRCb29sTGlzdCcpOwotZ29vZy5yZXF1aXJl
KCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRCeXRlc0xpc3QnKTsKLWdvb2cucmVxdWly
ZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZFJlcGVhdGVkRG91YmxlTGlzdCcpOwotZ29vZy5yZXF1
aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRGaXhlZDMyTGlzdCcpOwotZ29vZy5y
ZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRGaXhlZDY0TGlzdCcpOwotZ29v
Zy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRGbG9hdExpc3QnKTsKLWdv
b2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZFJlcGVhdGVkRm9yZWlnbkVudW1MaXN0
Jyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZEludDMyTGlz
dCcpOwotZ29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRJbnQ2NExp
c3QnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZFJlcGVhdGVkU2ZpeGVk
MzJMaXN0Jyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZFNm
aXhlZDY0TGlzdCcpOwotZ29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0
ZWRTaW50MzJMaXN0Jyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5leHRlbmRSZXBl
YXRlZFNpbnQ2NExpc3QnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LmV4dGVuZFJl
cGVhdGVkU3RyaW5nTGlzdCcpOwotZ29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuZXh0ZW5k
UmVwZWF0ZWRVaW50MzJMaXN0Jyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5leHRl
bmRSZXBlYXRlZFVpbnQ2NExpc3QnKTsKLQotCi12YXIgc3VpdGUgPSB7fTsKLQotdmFyIEJZVEVT
ID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDIsIDgsIDldKTsKLQotdmFyIEJZVEVTX0I2NCA9IGdvb2cu
Y3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheShCWVRFUyk7Ci0KLQotLyoqCi0gKiBIZWxwZXI6
IGZpbGwgYWxsIGZpZWxkcyBvbiBhIFRlc3RBbGxUeXBlcyBtZXNzYWdlLgotICogQHBhcmFtIHtw
cm90by5qc3BiLnRlc3QuVGVzdEFsbFR5cGVzfSBtc2cKLSAqLwotZnVuY3Rpb24gZmlsbEFsbEZp
ZWxkcyhtc2cpIHsKLSAgbXNnLnNldE9wdGlvbmFsSW50MzIoLTQyKTsKLSAgLy8gY2FuIGJlIGV4
YWN0bHkgcmVwcmVzZW50ZWQgYnkgSlMgbnVtYmVyICg2NC1iaXQgZG91YmxlLCBpLmUuLCA1Mi1i
aXQKLSAgLy8gbWFudGlzc2EpLgotICBtc2cuc2V0T3B0aW9uYWxJbnQ2NCgtMHg3ZmZmZmZmZjAw
MDAwMDAwKTsKLSAgbXNnLnNldE9wdGlvbmFsVWludDMyKDB4ODAwMDAwMDApOwotICBtc2cuc2V0
T3B0aW9uYWxVaW50NjQoMHhmMDAwMDAwMDAwMDAwMDAwKTsKLSAgbXNnLnNldE9wdGlvbmFsU2lu
dDMyKC0xMDApOwotICBtc2cuc2V0T3B0aW9uYWxTaW50NjQoLTB4ODAwMDAwMDAwMDAwMDAwMCk7
Ci0gIG1zZy5zZXRPcHRpb25hbEZpeGVkMzIoMTIzNCk7Ci0gIG1zZy5zZXRPcHRpb25hbEZpeGVk
NjQoMHgxMjM0NTY3ODAwMDAwMDAwKTsKLSAgbXNnLnNldE9wdGlvbmFsU2ZpeGVkMzIoLTEyMzQp
OwotICBtc2cuc2V0T3B0aW9uYWxTZml4ZWQ2NCgtMHgxMjM0NTY3ODAwMDAwMDAwKTsKLSAgbXNn
LnNldE9wdGlvbmFsRmxvYXQoMS41KTsKLSAgbXNnLnNldE9wdGlvbmFsRG91YmxlKC0xLjUpOwot
ICBtc2cuc2V0T3B0aW9uYWxCb29sKHRydWUpOwotICBtc2cuc2V0T3B0aW9uYWxTdHJpbmcoJ2hl
bGxvIHdvcmxkJyk7Ci0gIG1zZy5zZXRPcHRpb25hbEJ5dGVzKEJZVEVTKTsKLSAgbXNnLnNldE9w
dGlvbmFsR3JvdXAobmV3IHByb3RvLmpzcGIudGVzdC5UZXN0QWxsVHlwZXMuT3B0aW9uYWxHcm91
cCgpKTsKLSAgbXNnLmdldE9wdGlvbmFsR3JvdXAoKS5zZXRBKDEwMCk7Ci0gIHZhciBzdWJtc2cg
PSBuZXcgcHJvdG8uanNwYi50ZXN0LkZvcmVpZ25NZXNzYWdlKCk7Ci0gIHN1Ym1zZy5zZXRDKDE2
KTsKLSAgbXNnLnNldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2Uoc3VibXNnKTsKLSAgbXNnLnNldE9w
dGlvbmFsRm9yZWlnbkVudW0ocHJvdG8uanNwYi50ZXN0LkZvcmVpZ25FbnVtLkZPUkVJR05fRk9P
KTsKLSAgbXNnLnNldE9uZW9mU3RyaW5nKCdvbmVvZicpOwotCi0KLSAgbXNnLnNldFJlcGVhdGVk
SW50MzJMaXN0KFstNDJdKTsKLSAgbXNnLnNldFJlcGVhdGVkSW50NjRMaXN0KFstMHg3ZmZmZmZm
ZjAwMDAwMDAwXSk7Ci0gIG1zZy5zZXRSZXBlYXRlZFVpbnQzMkxpc3QoWzB4ODAwMDAwMDBdKTsK
LSAgbXNnLnNldFJlcGVhdGVkVWludDY0TGlzdChbMHhmMDAwMDAwMDAwMDAwMDAwXSk7Ci0gIG1z
Zy5zZXRSZXBlYXRlZFNpbnQzMkxpc3QoWy0xMDBdKTsKLSAgbXNnLnNldFJlcGVhdGVkU2ludDY0
TGlzdChbLTB4ODAwMDAwMDAwMDAwMDAwMF0pOwotICBtc2cuc2V0UmVwZWF0ZWRGaXhlZDMyTGlz
dChbMTIzNF0pOwotICBtc2cuc2V0UmVwZWF0ZWRGaXhlZDY0TGlzdChbMHgxMjM0NTY3ODAwMDAw
MDAwXSk7Ci0gIG1zZy5zZXRSZXBlYXRlZFNmaXhlZDMyTGlzdChbLTEyMzRdKTsKLSAgbXNnLnNl
dFJlcGVhdGVkU2ZpeGVkNjRMaXN0KFstMHgxMjM0NTY3ODAwMDAwMDAwXSk7Ci0gIG1zZy5zZXRS
ZXBlYXRlZEZsb2F0TGlzdChbMS41XSk7Ci0gIG1zZy5zZXRSZXBlYXRlZERvdWJsZUxpc3QoWy0x
LjVdKTsKLSAgbXNnLnNldFJlcGVhdGVkQm9vbExpc3QoW3RydWVdKTsKLSAgbXNnLnNldFJlcGVh
dGVkU3RyaW5nTGlzdChbJ2hlbGxvIHdvcmxkJ10pOwotICBtc2cuc2V0UmVwZWF0ZWRCeXRlc0xp
c3QoW0JZVEVTLCBCWVRFU10pOwotICBtc2cuc2V0UmVwZWF0ZWRHcm91cExpc3QoW25ldyBwcm90
by5qc3BiLnRlc3QuVGVzdEFsbFR5cGVzLlJlcGVhdGVkR3JvdXAoKV0pOwotICBtc2cuZ2V0UmVw
ZWF0ZWRHcm91cExpc3QoKVswXS5zZXRBKDEwMCk7Ci0gIHN1Ym1zZyA9IG5ldyBwcm90by5qc3Bi
LnRlc3QuRm9yZWlnbk1lc3NhZ2UoKTsKLSAgc3VibXNnLnNldEMoMTAwMCk7Ci0gIG1zZy5zZXRS
ZXBlYXRlZEZvcmVpZ25NZXNzYWdlTGlzdChbc3VibXNnXSk7Ci0gIG1zZy5zZXRSZXBlYXRlZEZv
cmVpZ25FbnVtTGlzdChbcHJvdG8uanNwYi50ZXN0LkZvcmVpZ25FbnVtLkZPUkVJR05fRk9PXSk7
Ci0KLSAgbXNnLnNldFBhY2tlZFJlcGVhdGVkSW50MzJMaXN0KFstNDJdKTsKLSAgbXNnLnNldFBh
Y2tlZFJlcGVhdGVkSW50NjRMaXN0KFstMHg3ZmZmZmZmZjAwMDAwMDAwXSk7Ci0gIG1zZy5zZXRQ
YWNrZWRSZXBlYXRlZFVpbnQzMkxpc3QoWzB4ODAwMDAwMDBdKTsKLSAgbXNnLnNldFBhY2tlZFJl
cGVhdGVkVWludDY0TGlzdChbMHhmMDAwMDAwMDAwMDAwMDAwXSk7Ci0gIG1zZy5zZXRQYWNrZWRS
ZXBlYXRlZFNpbnQzMkxpc3QoWy0xMDBdKTsKLSAgbXNnLnNldFBhY2tlZFJlcGVhdGVkU2ludDY0
TGlzdChbLTB4ODAwMDAwMDAwMDAwMDAwMF0pOwotICBtc2cuc2V0UGFja2VkUmVwZWF0ZWRGaXhl
ZDMyTGlzdChbMTIzNF0pOwotICBtc2cuc2V0UGFja2VkUmVwZWF0ZWRGaXhlZDY0TGlzdChbMHgx
MjM0NTY3ODAwMDAwMDAwXSk7Ci0gIG1zZy5zZXRQYWNrZWRSZXBlYXRlZFNmaXhlZDMyTGlzdChb
LTEyMzRdKTsKLSAgbXNnLnNldFBhY2tlZFJlcGVhdGVkU2ZpeGVkNjRMaXN0KFstMHgxMjM0NTY3
ODAwMDAwMDAwXSk7Ci0gIG1zZy5zZXRQYWNrZWRSZXBlYXRlZEZsb2F0TGlzdChbMS41XSk7Ci0g
IG1zZy5zZXRQYWNrZWRSZXBlYXRlZERvdWJsZUxpc3QoWy0xLjVdKTsKLSAgbXNnLnNldFBhY2tl
ZFJlcGVhdGVkQm9vbExpc3QoW3RydWVdKTsKLQotfQotCi0KLS8qKgotICogSGVscGVyOiBjb21w
YXJlIGEgYnl0ZXMgZmllbGQgdG8gYW4gZXhwZWN0ZWQgdmFsdWUKLSAqIEBwYXJhbSB7VWludDhB
cnJheXxzdHJpbmd9IGFycgotICogQHBhcmFtIHtVaW50OEFycmF5fSBleHBlY3RlZAotICogQHJl
dHVybiB7Ym9vbGVhbn0KLSAqLwotZnVuY3Rpb24gYnl0ZXNDb21wYXJlKGFyciwgZXhwZWN0ZWQp
IHsKLSAgaWYgKGdvb2cuaXNTdHJpbmcoYXJyKSkgewotICAgIGFyciA9IGdvb2cuY3J5cHQuYmFz
ZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheShhcnIpOwotICB9Ci0gIGlmIChhcnIubGVuZ3Ro
ICE9IGV4cGVjdGVkLmxlbmd0aCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgewotICAgIGlmIChhcnJbaV0gIT0gZXhwZWN0
ZWRbaV0pIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLQotLyoqCi0gKiBIZWxwZXI6IHZlcmlmeSBjb250ZW50cyBvZiBnaXZlbiBUZXN0QWxs
VHlwZXMgbWVzc2FnZSBhcyBzZXQgYnkKLSAqIGZpbGxBbGxGaWVsZHMoKS4KLSAqIEBwYXJhbSB7
cHJvdG8uanNwYi50ZXN0LlRlc3RBbGxUeXBlc30gb3JpZ2luYWwKLSAqIEBwYXJhbSB7cHJvdG8u
anNwYi50ZXN0LlRlc3RBbGxUeXBlc30gY29weQotICovCi1mdW5jdGlvbiBjaGVja0FsbEZpZWxk
cyhvcmlnaW5hbCwgY29weSkgewotICBhc3NlcnRUcnVlKGpzcGIuTWVzc2FnZS5lcXVhbHMob3Jp
Z2luYWwsIGNvcHkpKTsKLQotICBhc3NlcnRFcXVhbHMoY29weS5nZXRPcHRpb25hbEludDMyKCks
IC00Mik7Ci0gIGFzc2VydEVxdWFscyhjb3B5LmdldE9wdGlvbmFsSW50NjQoKSwgLTB4N2ZmZmZm
ZmYwMDAwMDAwMCk7Ci0gIGFzc2VydEVxdWFscyhjb3B5LmdldE9wdGlvbmFsVWludDMyKCksIDB4
ODAwMDAwMDApOwotICBhc3NlcnRFcXVhbHMoY29weS5nZXRPcHRpb25hbFVpbnQ2NCgpLCAweGYw
MDAwMDAwMDAwMDAwMDApOwotICBhc3NlcnRFcXVhbHMoY29weS5nZXRPcHRpb25hbFNpbnQzMigp
LCAtMTAwKTsKLSAgYXNzZXJ0RXF1YWxzKGNvcHkuZ2V0T3B0aW9uYWxTaW50NjQoKSwgLTB4ODAw
MDAwMDAwMDAwMDAwMCk7Ci0gIGFzc2VydEVxdWFscyhjb3B5LmdldE9wdGlvbmFsRml4ZWQzMigp
LCAxMjM0KTsKLSAgYXNzZXJ0RXF1YWxzKGNvcHkuZ2V0T3B0aW9uYWxGaXhlZDY0KCksIDB4MTIz
NDU2NzgwMDAwMDAwMCk7Ci0gIGFzc2VydEVxdWFscyhjb3B5LmdldE9wdGlvbmFsU2ZpeGVkMzIo
KSwgLTEyMzQpOwotICBhc3NlcnRFcXVhbHMoY29weS5nZXRPcHRpb25hbFNmaXhlZDY0KCksIC0w
eDEyMzQ1Njc4MDAwMDAwMDApOwotICBhc3NlcnRFcXVhbHMoY29weS5nZXRPcHRpb25hbEZsb2F0
KCksIDEuNSk7Ci0gIGFzc2VydEVxdWFscyhjb3B5LmdldE9wdGlvbmFsRG91YmxlKCksIC0xLjUp
OwotICBhc3NlcnRFcXVhbHMoY29weS5nZXRPcHRpb25hbEJvb2woKSwgdHJ1ZSk7Ci0gIGFzc2Vy
dEVxdWFscyhjb3B5LmdldE9wdGlvbmFsU3RyaW5nKCksICdoZWxsbyB3b3JsZCcpOwotICBhc3Nl
cnRFcXVhbHModHJ1ZSwgYnl0ZXNDb21wYXJlKGNvcHkuZ2V0T3B0aW9uYWxCeXRlcygpLCBCWVRF
UykpOwotICBhc3NlcnRFcXVhbHModHJ1ZSwgYnl0ZXNDb21wYXJlKGNvcHkuZ2V0T3B0aW9uYWxC
eXRlc19hc1U4KCksIEJZVEVTKSk7Ci0gIGFzc2VydEVxdWFscygKLSAgICAgIGNvcHkuZ2V0T3B0
aW9uYWxCeXRlc19hc0I2NCgpLCBnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoQllU
RVMpKTsKLQotICBhc3NlcnRFcXVhbHMoY29weS5nZXRPcHRpb25hbEdyb3VwKCkuZ2V0QSgpLCAx
MDApOwotICBhc3NlcnRFcXVhbHMoY29weS5nZXRPcHRpb25hbEZvcmVpZ25NZXNzYWdlKCkuZ2V0
QygpLCAxNik7Ci0gIGFzc2VydEVxdWFscyhjb3B5LmdldE9wdGlvbmFsRm9yZWlnbkVudW0oKSwK
LSAgICAgIHByb3RvLmpzcGIudGVzdC5Gb3JlaWduRW51bS5GT1JFSUdOX0ZPTyk7Ci0KLQotICBh
c3NlcnRFcXVhbHMoY29weS5nZXRPbmVvZlN0cmluZygpLCAnb25lb2YnKTsKLSAgYXNzZXJ0RXF1
YWxzKGNvcHkuZ2V0T25lb2ZGaWVsZENhc2UoKSwKLSAgICAgIHByb3RvLmpzcGIudGVzdC5UZXN0
QWxsVHlwZXMuT25lb2ZGaWVsZENhc2UuT05FT0ZfU1RSSU5HKTsKLQotICBhc3NlcnRFbGVtZW50
c0VxdWFscyhjb3B5LmdldFJlcGVhdGVkSW50MzJMaXN0KCksIFstNDJdKTsKLSAgYXNzZXJ0RWxl
bWVudHNFcXVhbHMoY29weS5nZXRSZXBlYXRlZEludDY0TGlzdCgpLCBbLTB4N2ZmZmZmZmYwMDAw
MDAwMF0pOwotICBhc3NlcnRFbGVtZW50c0VxdWFscyhjb3B5LmdldFJlcGVhdGVkVWludDMyTGlz
dCgpLCBbMHg4MDAwMDAwMF0pOwotICBhc3NlcnRFbGVtZW50c0VxdWFscyhjb3B5LmdldFJlcGVh
dGVkVWludDY0TGlzdCgpLCBbMHhmMDAwMDAwMDAwMDAwMDAwXSk7Ci0gIGFzc2VydEVsZW1lbnRz
RXF1YWxzKGNvcHkuZ2V0UmVwZWF0ZWRTaW50MzJMaXN0KCksIFstMTAwXSk7Ci0gIGFzc2VydEVs
ZW1lbnRzRXF1YWxzKGNvcHkuZ2V0UmVwZWF0ZWRTaW50NjRMaXN0KCksIFstMHg4MDAwMDAwMDAw
MDAwMDAwXSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKGNvcHkuZ2V0UmVwZWF0ZWRGaXhlZDMy
TGlzdCgpLCBbMTIzNF0pOwotICBhc3NlcnRFbGVtZW50c0VxdWFscyhjb3B5LmdldFJlcGVhdGVk
Rml4ZWQ2NExpc3QoKSwgWzB4MTIzNDU2NzgwMDAwMDAwMF0pOwotICBhc3NlcnRFbGVtZW50c0Vx
dWFscyhjb3B5LmdldFJlcGVhdGVkU2ZpeGVkMzJMaXN0KCksIFstMTIzNF0pOwotICBhc3NlcnRF
bGVtZW50c0VxdWFscyhjb3B5LmdldFJlcGVhdGVkU2ZpeGVkNjRMaXN0KCksIFstMHgxMjM0NTY3
ODAwMDAwMDAwXSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKGNvcHkuZ2V0UmVwZWF0ZWRGbG9h
dExpc3QoKSwgWzEuNV0pOwotICBhc3NlcnRFbGVtZW50c0VxdWFscyhjb3B5LmdldFJlcGVhdGVk
RG91YmxlTGlzdCgpLCBbLTEuNV0pOwotICBhc3NlcnRFbGVtZW50c0VxdWFscyhjb3B5LmdldFJl
cGVhdGVkQm9vbExpc3QoKSwgW3RydWVdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoY29weS5n
ZXRSZXBlYXRlZFN0cmluZ0xpc3QoKSwgWydoZWxsbyB3b3JsZCddKTsKLSAgYXNzZXJ0RXF1YWxz
KGNvcHkuZ2V0UmVwZWF0ZWRCeXRlc0xpc3QoKS5sZW5ndGgsIDIpOwotICBhc3NlcnRFcXVhbHMo
dHJ1ZSwgYnl0ZXNDb21wYXJlKGNvcHkuZ2V0UmVwZWF0ZWRCeXRlc0xpc3RfYXNVOCgpWzBdLCBC
WVRFUykpOwotICBhc3NlcnRFcXVhbHModHJ1ZSwgYnl0ZXNDb21wYXJlKGNvcHkuZ2V0UmVwZWF0
ZWRCeXRlc0xpc3QoKVswXSwgQllURVMpKTsKLSAgYXNzZXJ0RXF1YWxzKHRydWUsIGJ5dGVzQ29t
cGFyZShjb3B5LmdldFJlcGVhdGVkQnl0ZXNMaXN0X2FzVTgoKVsxXSwgQllURVMpKTsKLSAgYXNz
ZXJ0RXF1YWxzKGNvcHkuZ2V0UmVwZWF0ZWRCeXRlc0xpc3RfYXNCNjQoKVswXSwgQllURVNfQjY0
KTsKLSAgYXNzZXJ0RXF1YWxzKGNvcHkuZ2V0UmVwZWF0ZWRCeXRlc0xpc3RfYXNCNjQoKVsxXSwg
QllURVNfQjY0KTsKLSAgYXNzZXJ0RXF1YWxzKGNvcHkuZ2V0UmVwZWF0ZWRHcm91cExpc3QoKS5s
ZW5ndGgsIDEpOwotICBhc3NlcnRFcXVhbHMoY29weS5nZXRSZXBlYXRlZEdyb3VwTGlzdCgpWzBd
LmdldEEoKSwgMTAwKTsKLSAgYXNzZXJ0RXF1YWxzKGNvcHkuZ2V0UmVwZWF0ZWRGb3JlaWduTWVz
c2FnZUxpc3QoKS5sZW5ndGgsIDEpOwotICBhc3NlcnRFcXVhbHMoY29weS5nZXRSZXBlYXRlZEZv
cmVpZ25NZXNzYWdlTGlzdCgpWzBdLmdldEMoKSwgMTAwMCk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1
YWxzKGNvcHkuZ2V0UmVwZWF0ZWRGb3JlaWduRW51bUxpc3QoKSwKLSAgICAgIFtwcm90by5qc3Bi
LnRlc3QuRm9yZWlnbkVudW0uRk9SRUlHTl9GT09dKTsKLQotICBhc3NlcnRFbGVtZW50c0VxdWFs
cyhjb3B5LmdldFBhY2tlZFJlcGVhdGVkSW50MzJMaXN0KCksIFstNDJdKTsKLSAgYXNzZXJ0RWxl
bWVudHNFcXVhbHMoY29weS5nZXRQYWNrZWRSZXBlYXRlZEludDY0TGlzdCgpLAotICAgICAgWy0w
eDdmZmZmZmZmMDAwMDAwMDBdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoY29weS5nZXRQYWNr
ZWRSZXBlYXRlZFVpbnQzMkxpc3QoKSwgWzB4ODAwMDAwMDBdKTsKLSAgYXNzZXJ0RWxlbWVudHNF
cXVhbHMoY29weS5nZXRQYWNrZWRSZXBlYXRlZFVpbnQ2NExpc3QoKSwKLSAgICAgIFsweGYwMDAw
MDAwMDAwMDAwMDBdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoY29weS5nZXRQYWNrZWRSZXBl
YXRlZFNpbnQzMkxpc3QoKSwgWy0xMDBdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoY29weS5n
ZXRQYWNrZWRSZXBlYXRlZFNpbnQ2NExpc3QoKSwKLSAgICAgIFstMHg4MDAwMDAwMDAwMDAwMDAw
XSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKGNvcHkuZ2V0UGFja2VkUmVwZWF0ZWRGaXhlZDMy
TGlzdCgpLCBbMTIzNF0pOwotICBhc3NlcnRFbGVtZW50c0VxdWFscyhjb3B5LmdldFBhY2tlZFJl
cGVhdGVkRml4ZWQ2NExpc3QoKSwKLSAgICAgIFsweDEyMzQ1Njc4MDAwMDAwMDBdKTsKLSAgYXNz
ZXJ0RWxlbWVudHNFcXVhbHMoY29weS5nZXRQYWNrZWRSZXBlYXRlZFNmaXhlZDMyTGlzdCgpLCBb
LTEyMzRdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoY29weS5nZXRQYWNrZWRSZXBlYXRlZFNm
aXhlZDY0TGlzdCgpLAotICAgICAgWy0weDEyMzQ1Njc4MDAwMDAwMDBdKTsKLSAgYXNzZXJ0RWxl
bWVudHNFcXVhbHMoY29weS5nZXRQYWNrZWRSZXBlYXRlZEZsb2F0TGlzdCgpLCBbMS41XSk7Ci0g
IGFzc2VydEVsZW1lbnRzRXF1YWxzKGNvcHkuZ2V0UGFja2VkUmVwZWF0ZWREb3VibGVMaXN0KCks
IFstMS41XSk7Ci0KLX0KLQotCi0vKioKLSAqIEhlbHBlcjogdmVyaWZ5IHRoYXQgYWxsIGV4cGVj
dGVkIGV4dGVuc2lvbnMgYXJlIHByZXNlbnQuCi0gKiBAcGFyYW0geyFwcm90by5qc3BiLnRlc3Qu
VGVzdEV4dGVuZGFibGV9IG1zZwotICovCi1mdW5jdGlvbiBjaGVja0V4dGVuc2lvbnMobXNnKSB7
Ci0gIGFzc2VydEVxdWFscygtNDIsCi0gICAgICBtc2cuZ2V0RXh0ZW5zaW9uKHByb3RvLmpzcGIu
dGVzdC5leHRlbmRPcHRpb25hbEludDMyKSk7Ci0gIGFzc2VydEVxdWFscygtMHg3ZmZmZmZmZjAw
MDAwMDAwLAotICAgICAgbXNnLmdldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0
aW9uYWxJbnQ2NCkpOwotICBhc3NlcnRFcXVhbHMoMHg4MDAwMDAwMCwKLSAgICAgIG1zZy5nZXRF
eHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFsVWludDMyKSk7Ci0gIGFzc2Vy
dEVxdWFscygweGYwMDAwMDAwMDAwMDAwMDAsCi0gICAgICBtc2cuZ2V0RXh0ZW5zaW9uKHByb3Rv
LmpzcGIudGVzdC5leHRlbmRPcHRpb25hbFVpbnQ2NCkpOwotICBhc3NlcnRFcXVhbHMoLTEwMCwK
LSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFsU2lu
dDMyKSk7Ci0gIGFzc2VydEVxdWFscygtMHg4MDAwMDAwMDAwMDAwMDAwLAotICAgICAgbXNnLmdl
dEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxTaW50NjQpKTsKLSAgYXNz
ZXJ0RXF1YWxzKDEyMzQsCi0gICAgICBtc2cuZ2V0RXh0ZW5zaW9uKHByb3RvLmpzcGIudGVzdC5l
eHRlbmRPcHRpb25hbEZpeGVkMzIpKTsKLSAgYXNzZXJ0RXF1YWxzKDB4MTIzNDU2NzgwMDAwMDAw
MCwKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFs
Rml4ZWQ2NCkpOwotICBhc3NlcnRFcXVhbHMoLTEyMzQsCi0gICAgICBtc2cuZ2V0RXh0ZW5zaW9u
KHByb3RvLmpzcGIudGVzdC5leHRlbmRPcHRpb25hbFNmaXhlZDMyKSk7Ci0gIGFzc2VydEVxdWFs
cygtMHgxMjM0NTY3ODAwMDAwMDAwLAotICAgICAgbXNnLmdldEV4dGVuc2lvbihwcm90by5qc3Bi
LnRlc3QuZXh0ZW5kT3B0aW9uYWxTZml4ZWQ2NCkpOwotICBhc3NlcnRFcXVhbHMoMS41LAotICAg
ICAgbXNnLmdldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxGbG9hdCkp
OwotICBhc3NlcnRFcXVhbHMoLTEuNSwKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNw
Yi50ZXN0LmV4dGVuZE9wdGlvbmFsRG91YmxlKSk7Ci0gIGFzc2VydEVxdWFscyh0cnVlLAotICAg
ICAgbXNnLmdldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxCb29sKSk7
Ci0gIGFzc2VydEVxdWFscygnaGVsbG8gd29ybGQnLAotICAgICAgbXNnLmdldEV4dGVuc2lvbihw
cm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxTdHJpbmcpKTsKLSAgYXNzZXJ0RXF1YWxzKAot
ICAgICAgdHJ1ZSwgYnl0ZXNDb21wYXJlKAotICAgICAgICAgICAgICAgIG1zZy5nZXRFeHRlbnNp
b24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFsQnl0ZXMpLCBCWVRFUykpOwotICBhc3Nl
cnRFcXVhbHMoMTYsCi0gICAgICBtc2cuZ2V0RXh0ZW5zaW9uKAotICAgICAgICAgIHByb3RvLmpz
cGIudGVzdC5FeHRlbmRzV2l0aE1lc3NhZ2Uub3B0aW9uYWxFeHRlbnNpb24pLmdldEZvbygpKTsK
LQotCi0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdldEV4dGVuc2lvbihwcm90
by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRJbnQzMkxpc3QpLAotICAgICAgWy00Ml0pOwotICBh
c3NlcnRFbGVtZW50c0VxdWFscygKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50
ZXN0LmV4dGVuZFJlcGVhdGVkSW50NjRMaXN0KSwKLSAgICAgIFstMHg3ZmZmZmZmZjAwMDAwMDAw
XSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdldEV4dGVuc2lvbihwcm90
by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRVaW50MzJMaXN0KSwKLSAgICAgIFsweDgwMDAwMDAw
XSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdldEV4dGVuc2lvbihwcm90
by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRVaW50NjRMaXN0KSwKLSAgICAgIFsweGYwMDAwMDAw
MDAwMDAwMDBdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoCi0gICAgICBtc2cuZ2V0RXh0ZW5z
aW9uKHByb3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZFNpbnQzMkxpc3QpLAotICAgICAgWy0x
MDBdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoCi0gICAgICBtc2cuZ2V0RXh0ZW5zaW9uKHBy
b3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZFNpbnQ2NExpc3QpLAotICAgICAgWy0weDgwMDAw
MDAwMDAwMDAwMDBdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoCi0gICAgICBtc2cuZ2V0RXh0
ZW5zaW9uKHByb3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZEZpeGVkMzJMaXN0KSwKLSAgICAg
IFsxMjM0XSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdldEV4dGVuc2lv
bihwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRGaXhlZDY0TGlzdCksCi0gICAgICBbMHgx
MjM0NTY3ODAwMDAwMDAwXSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdl
dEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRTZml4ZWQzMkxpc3QpLAot
ICAgICAgWy0xMjM0XSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdldEV4
dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRTZml4ZWQ2NExpc3QpLAotICAg
ICAgWy0weDEyMzQ1Njc4MDAwMDAwMDBdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoCi0gICAg
ICBtc2cuZ2V0RXh0ZW5zaW9uKHByb3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZEZsb2F0TGlz
dCksCi0gICAgICBbMS41XSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdl
dEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWREb3VibGVMaXN0KSwKLSAg
ICAgIFstMS41XSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdldEV4dGVu
c2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRCb29sTGlzdCksCi0gICAgICBbdHJ1
ZV0pOwotICBhc3NlcnRFbGVtZW50c0VxdWFscygKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJv
dG8uanNwYi50ZXN0LmV4dGVuZFJlcGVhdGVkU3RyaW5nTGlzdCksCi0gICAgICBbJ2hlbGxvIHdv
cmxkJ10pOwotICBhc3NlcnRFcXVhbHMoCi0gICAgICB0cnVlLAotICAgICAgYnl0ZXNDb21wYXJl
KAotICAgICAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZFJlcGVh
dGVkQnl0ZXNMaXN0KVswXSwgQllURVMpKTsKLSAgYXNzZXJ0RXF1YWxzKDEwMDAsCi0gICAgICBt
c2cuZ2V0RXh0ZW5zaW9uKAotICAgICAgICAgIHByb3RvLmpzcGIudGVzdC5FeHRlbmRzV2l0aE1l
c3NhZ2UucmVwZWF0ZWRFeHRlbnNpb25MaXN0KVswXQotICAgICAgLmdldEZvbygpKTsKLSAgYXNz
ZXJ0RWxlbWVudHNFcXVhbHMoCi0gICAgICBtc2cuZ2V0RXh0ZW5zaW9uKHByb3RvLmpzcGIudGVz
dC5leHRlbmRSZXBlYXRlZEZvcmVpZ25FbnVtTGlzdCksCi0gICAgICBbcHJvdG8uanNwYi50ZXN0
LkZvcmVpZ25FbnVtLkZPUkVJR05fRk9PXSk7Ci0KLQotICBhc3NlcnRFbGVtZW50c0VxdWFscygK
LSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVh
dGVkSW50MzJMaXN0KSwKLSAgICAgIFstNDJdKTsKLSAgYXNzZXJ0RWxlbWVudHNFcXVhbHMoCi0g
ICAgICBtc2cuZ2V0RXh0ZW5zaW9uKHByb3RvLmpzcGIudGVzdC5leHRlbmRQYWNrZWRSZXBlYXRl
ZEludDY0TGlzdCksCi0gICAgICBbLTB4N2ZmZmZmZmYwMDAwMDAwMF0pOwotICBhc3NlcnRFbGVt
ZW50c0VxdWFscygKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVu
ZFBhY2tlZFJlcGVhdGVkVWludDMyTGlzdCksCi0gICAgICBbMHg4MDAwMDAwMF0pOwotICBhc3Nl
cnRFbGVtZW50c0VxdWFscygKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0
LmV4dGVuZFBhY2tlZFJlcGVhdGVkVWludDY0TGlzdCksCi0gICAgICBbMHhmMDAwMDAwMDAwMDAw
MDAwXSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdldEV4dGVuc2lvbihw
cm90by5qc3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRTaW50MzJMaXN0KSwKLSAgICAgIFst
MTAwXSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdldEV4dGVuc2lvbihw
cm90by5qc3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRTaW50NjRMaXN0KSwKLSAgICAgIFst
MHg4MDAwMDAwMDAwMDAwMDAwXSk7Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNn
LmdldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRGaXhlZDMy
TGlzdCksCi0gICAgICBbMTIzNF0pOwotICBhc3NlcnRFbGVtZW50c0VxdWFscygKLSAgICAgIG1z
Zy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVkRml4ZWQ2
NExpc3QpLAotICAgICAgWzB4MTIzNDU2NzgwMDAwMDAwMF0pOwotICBhc3NlcnRFbGVtZW50c0Vx
dWFscygKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tl
ZFJlcGVhdGVkU2ZpeGVkMzJMaXN0KSwKLSAgICAgIFstMTIzNF0pOwotICBhc3NlcnRFbGVtZW50
c0VxdWFscygKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZFBh
Y2tlZFJlcGVhdGVkU2ZpeGVkNjRMaXN0KSwKLSAgICAgIFstMHgxMjM0NTY3ODAwMDAwMDAwXSk7
Ci0gIGFzc2VydEVsZW1lbnRzRXF1YWxzKAotICAgICAgbXNnLmdldEV4dGVuc2lvbihwcm90by5q
c3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRGbG9hdExpc3QpLAotICAgICAgWzEuNV0pOwot
ICBhc3NlcnRFbGVtZW50c0VxdWFscygKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNw
Yi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVkRG91YmxlTGlzdCksCi0gICAgICBbLTEuNV0pOwot
ICBhc3NlcnRFbGVtZW50c0VxdWFscygKLSAgICAgIG1zZy5nZXRFeHRlbnNpb24ocHJvdG8uanNw
Yi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVkQm9vbExpc3QpLAotICAgICAgW3RydWVdKTsKLSAg
YXNzZXJ0RWxlbWVudHNFcXVhbHMoCi0gICAgICBtc2cuZ2V0RXh0ZW5zaW9uKHByb3RvLmpzcGIu
dGVzdC5leHRlbmRQYWNrZWRSZXBlYXRlZEZvcmVpZ25FbnVtTGlzdCksCi0gICAgICBbcHJvdG8u
anNwYi50ZXN0LkZvcmVpZ25FbnVtLkZPUkVJR05fRk9PXSk7Ci0KLX0KLQotCi1kZXNjcmliZSgn
cHJvdG9CaW5hcnlUZXN0JywgZnVuY3Rpb24oKSB7Ci0gIC8qKgotICAgKiBUZXN0cyBhIGJhc2lj
IHNlcmlhbGl6YXRpb24tZGVzZXJpYWxpemF0b24gcm91bmQtdHJpcCB3aXRoIGFsbCBzdXBwb3J0
ZWQKLSAgICogZmllbGQgdHlwZXMgKG9uIHRoZSBUZXN0QWxsVHlwZXMgbWVzc2FnZSB0eXBlKS4K
LSAgICovCi0gIGl0KCd0ZXN0Um91bmRUcmlwJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1zZyA9
IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdEFsbFR5cGVzKCk7Ci0gICAgZmlsbEFsbEZpZWxkcyht
c2cpOwotICAgIHZhciBlbmNvZGVkID0gbXNnLnNlcmlhbGl6ZUJpbmFyeSgpOwotICAgIHZhciBk
ZWNvZGVkID0gcHJvdG8uanNwYi50ZXN0LlRlc3RBbGxUeXBlcy5kZXNlcmlhbGl6ZUJpbmFyeShl
bmNvZGVkKTsKLSAgICBjaGVja0FsbEZpZWxkcyhtc2csIGRlY29kZWQpOwotICB9KTsKLQotICAv
KioKLSAgICogVGVzdCB0aGF0IGJhc2U2NCBzdHJpbmcgYW5kIFVpbnQ4QXJyYXkgYXJlIGludGVy
Y2hhbmdlYWJsZSBpbiBieXRlcyBmaWVsZHMuCi0gICAqLwotICBpdCgndGVzdEJ5dGVzRmllbGRz
R2V0dGVyc0ludGVyb3AnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgbXNnID0gbmV3IHByb3RvLmpz
cGIudGVzdC5UZXN0QWxsVHlwZXMoKTsKLSAgICAvLyBTZXQgZnJvbSBhIGJhc2U2NCBzdHJpbmcg
YW5kIGNoZWNrIGFsbCB0aGUgZ2V0dGVycyB3b3JrLgotICAgIG1zZy5zZXRPcHRpb25hbEJ5dGVz
KEJZVEVTX0I2NCk7Ci0gICAgYXNzZXJ0VHJ1ZShieXRlc0NvbXBhcmUobXNnLmdldE9wdGlvbmFs
Qnl0ZXNfYXNVOCgpLCBCWVRFUykpOwotICAgIGFzc2VydFRydWUoYnl0ZXNDb21wYXJlKG1zZy5n
ZXRPcHRpb25hbEJ5dGVzX2FzQjY0KCksIEJZVEVTKSk7Ci0gICAgYXNzZXJ0VHJ1ZShieXRlc0Nv
bXBhcmUobXNnLmdldE9wdGlvbmFsQnl0ZXMoKSwgQllURVMpKTsKLQotICAgIC8vIFRlc3QgYmlu
YXJ5IHNlcmlhbGl6ZSByb3VuZCB0cmlwIGRvZXNuJ3QgYnJlYWsgaXQuCi0gICAgbXNnID0gcHJv
dG8uanNwYi50ZXN0LlRlc3RBbGxUeXBlcy5kZXNlcmlhbGl6ZUJpbmFyeShtc2cuc2VyaWFsaXpl
QmluYXJ5KCkpOwotICAgIGFzc2VydFRydWUoYnl0ZXNDb21wYXJlKG1zZy5nZXRPcHRpb25hbEJ5
dGVzX2FzVTgoKSwgQllURVMpKTsKLSAgICBhc3NlcnRUcnVlKGJ5dGVzQ29tcGFyZShtc2cuZ2V0
T3B0aW9uYWxCeXRlc19hc0I2NCgpLCBCWVRFUykpOwotICAgIGFzc2VydFRydWUoYnl0ZXNDb21w
YXJlKG1zZy5nZXRPcHRpb25hbEJ5dGVzKCksIEJZVEVTKSk7Ci0KLSAgICBtc2cgPSBuZXcgcHJv
dG8uanNwYi50ZXN0LlRlc3RBbGxUeXBlcygpOwotICAgIC8vIFNldCBmcm9tIGEgVWludDhBcnJh
eSBhbmQgY2hlY2sgYWxsIHRoZSBnZXR0ZXJzIHdvcmsuCi0gICAgbXNnLnNldE9wdGlvbmFsQnl0
ZXMoQllURVMpOwotICAgIGFzc2VydFRydWUoYnl0ZXNDb21wYXJlKG1zZy5nZXRPcHRpb25hbEJ5
dGVzX2FzVTgoKSwgQllURVMpKTsKLSAgICBhc3NlcnRUcnVlKGJ5dGVzQ29tcGFyZShtc2cuZ2V0
T3B0aW9uYWxCeXRlc19hc0I2NCgpLCBCWVRFUykpOwotICAgIGFzc2VydFRydWUoYnl0ZXNDb21w
YXJlKG1zZy5nZXRPcHRpb25hbEJ5dGVzKCksIEJZVEVTKSk7Ci0KLSAgfSk7Ci0KLSAgLyoqCi0g
ICAqIFRlc3QgdGhhdCBieXRlcyBzZXR0ZXJzIHdpbGwgcmVjZWl2ZSByZXN1bHQgb2YgYW55IG9m
IHRoZSBnZXR0ZXJzLgotICAgKi8KLSAgaXQoJ3Rlc3RCeXRlc0ZpZWxkc1NldHRlcnNJbnRlcm9w
JywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1zZyA9IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdEFs
bFR5cGVzKCk7Ci0gICAgbXNnLnNldE9wdGlvbmFsQnl0ZXMoQllURVMpOwotICAgIGFzc2VydFRy
dWUoYnl0ZXNDb21wYXJlKG1zZy5nZXRPcHRpb25hbEJ5dGVzKCksIEJZVEVTKSk7Ci0KLSAgICBt
c2cuc2V0T3B0aW9uYWxCeXRlcyhtc2cuZ2V0T3B0aW9uYWxCeXRlcygpKTsKLSAgICBhc3NlcnRU
cnVlKGJ5dGVzQ29tcGFyZShtc2cuZ2V0T3B0aW9uYWxCeXRlcygpLCBCWVRFUykpOwotICAgIG1z
Zy5zZXRPcHRpb25hbEJ5dGVzKG1zZy5nZXRPcHRpb25hbEJ5dGVzX2FzQjY0KCkpOwotICAgIGFz
c2VydFRydWUoYnl0ZXNDb21wYXJlKG1zZy5nZXRPcHRpb25hbEJ5dGVzKCksIEJZVEVTKSk7Ci0g
ICAgbXNnLnNldE9wdGlvbmFsQnl0ZXMobXNnLmdldE9wdGlvbmFsQnl0ZXNfYXNVOCgpKTsKLSAg
ICBhc3NlcnRUcnVlKGJ5dGVzQ29tcGFyZShtc2cuZ2V0T3B0aW9uYWxCeXRlcygpLCBCWVRFUykp
OwotICB9KTsKLQotICAvKioKLSAgICogVGVzdCB0aGF0IGJ5dGVzIHNldHRlcnMgd2lsbCByZWNl
aXZlIHJlc3VsdCBvZiBhbnkgb2YgdGhlIGdldHRlcnMuCi0gICAqLwotICBpdCgndGVzdFJlcGVh
dGVkQnl0ZXNHZXR0ZXJzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1zZyA9IG5ldyBwcm90by5q
c3BiLnRlc3QuVGVzdEFsbFR5cGVzKCk7Ci0KLSAgICBmdW5jdGlvbiBhc3NlcnRHZXR0ZXJzKCkg
ewotICAgICAgYXNzZXJ0VHJ1ZShnb29nLmlzU3RyaW5nKG1zZy5nZXRSZXBlYXRlZEJ5dGVzTGlz
dF9hc0I2NCgpWzBdKSk7Ci0gICAgICBhc3NlcnRUcnVlKGdvb2cuaXNTdHJpbmcobXNnLmdldFJl
cGVhdGVkQnl0ZXNMaXN0X2FzQjY0KClbMV0pKTsKLSAgICAgIGFzc2VydFRydWUobXNnLmdldFJl
cGVhdGVkQnl0ZXNMaXN0X2FzVTgoKVswXSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpOwotICAgICAg
YXNzZXJ0VHJ1ZShtc2cuZ2V0UmVwZWF0ZWRCeXRlc0xpc3RfYXNVOCgpWzFdIGluc3RhbmNlb2Yg
VWludDhBcnJheSk7Ci0KLSAgICAgIGFzc2VydFRydWUoYnl0ZXNDb21wYXJlKG1zZy5nZXRSZXBl
YXRlZEJ5dGVzTGlzdCgpWzBdLCBCWVRFUykpOwotICAgICAgYXNzZXJ0VHJ1ZShieXRlc0NvbXBh
cmUobXNnLmdldFJlcGVhdGVkQnl0ZXNMaXN0KClbMV0sIEJZVEVTKSk7Ci0gICAgICBhc3NlcnRU
cnVlKGJ5dGVzQ29tcGFyZShtc2cuZ2V0UmVwZWF0ZWRCeXRlc0xpc3RfYXNCNjQoKVswXSwgQllU
RVMpKTsKLSAgICAgIGFzc2VydFRydWUoYnl0ZXNDb21wYXJlKG1zZy5nZXRSZXBlYXRlZEJ5dGVz
TGlzdF9hc0I2NCgpWzFdLCBCWVRFUykpOwotICAgICAgYXNzZXJ0VHJ1ZShieXRlc0NvbXBhcmUo
bXNnLmdldFJlcGVhdGVkQnl0ZXNMaXN0X2FzVTgoKVswXSwgQllURVMpKTsKLSAgICAgIGFzc2Vy
dFRydWUoYnl0ZXNDb21wYXJlKG1zZy5nZXRSZXBlYXRlZEJ5dGVzTGlzdF9hc1U4KClbMV0sIEJZ
VEVTKSk7Ci0gICAgfQotCi0gICAgbXNnLnNldFJlcGVhdGVkQnl0ZXNMaXN0KFtCWVRFUywgQllU
RVNdKTsKLSAgICBhc3NlcnRHZXR0ZXJzKCk7Ci0KLSAgICBtc2cuc2V0UmVwZWF0ZWRCeXRlc0xp
c3QoW0JZVEVTX0I2NCwgQllURVNfQjY0XSk7Ci0gICAgYXNzZXJ0R2V0dGVycygpOwotCi0gICAg
bXNnLnNldFJlcGVhdGVkQnl0ZXNMaXN0KG51bGwpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cu
Z2V0UmVwZWF0ZWRCeXRlc0xpc3QoKS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygwLCBtc2cu
Z2V0UmVwZWF0ZWRCeXRlc0xpc3RfYXNCNjQoKS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygw
LCBtc2cuZ2V0UmVwZWF0ZWRCeXRlc0xpc3RfYXNVOCgpLmxlbmd0aCk7Ci0gIH0pOwotCi0gIC8q
KgotICAgKiBIZWxwZXI6IGZpbGwgYWxsIGV4dGVuc2lvbiB2YWx1ZXMuCi0gICAqIEBwYXJhbSB7
cHJvdG8uanNwYi50ZXN0LlRlc3RFeHRlbmRhYmxlfSBtc2cKLSAgICovCi0gIGZ1bmN0aW9uIGZp
bGxFeHRlbnNpb25zKG1zZykgewotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3Rv
LmpzcGIudGVzdC5leHRlbmRPcHRpb25hbEludDMyLCAtNDIpOwotICAgIG1zZy5zZXRFeHRlbnNp
b24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRPcHRpb25hbEludDY0LCAtMHg3ZmZm
ZmZmZjAwMDAwMDAwKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5qc3Bi
LnRlc3QuZXh0ZW5kT3B0aW9uYWxVaW50MzIsIDB4ODAwMDAwMDApOwotICAgIG1zZy5zZXRFeHRl
bnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRPcHRpb25hbFVpbnQ2NCwgMHhm
MDAwMDAwMDAwMDAwMDAwKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5q
c3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxTaW50MzIsIC0xMDApOwotICAgIG1zZy5zZXRFeHRlbnNp
b24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRPcHRpb25hbFNpbnQ2NCwgLTB4ODAw
MDAwMDAwMDAwMDAwMCk7Ci0gICAgbXNnLnNldEV4dGVuc2lvbigKLSAgICAgICAgcHJvdG8uanNw
Yi50ZXN0LmV4dGVuZE9wdGlvbmFsRml4ZWQzMiwgMTIzNCk7Ci0gICAgbXNnLnNldEV4dGVuc2lv
bigKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LmV4dGVuZE9wdGlvbmFsRml4ZWQ2NCwgMHgxMjM0
NTY3ODAwMDAwMDAwKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5qc3Bi
LnRlc3QuZXh0ZW5kT3B0aW9uYWxTZml4ZWQzMiwgLTEyMzQpOwotICAgIG1zZy5zZXRFeHRlbnNp
b24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRPcHRpb25hbFNmaXhlZDY0LCAtMHgx
MjM0NTY3ODAwMDAwMDAwKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5q
c3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxGbG9hdCwgMS41KTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9u
KAotICAgICAgICBwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxEb3VibGUsIC0xLjUpOwot
ICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRPcHRp
b25hbEJvb2wsIHRydWUpOwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpz
cGIudGVzdC5leHRlbmRPcHRpb25hbFN0cmluZywgJ2hlbGxvIHdvcmxkJyk7Ci0gICAgbXNnLnNl
dEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZXh0ZW5kT3B0aW9uYWxCeXRlcywgQllURVMpOwot
ICAgIHZhciBzdWJtc2cgPSBuZXcgcHJvdG8uanNwYi50ZXN0LkV4dGVuZHNXaXRoTWVzc2FnZSgp
OwotICAgIHN1Ym1zZy5zZXRGb28oMTYpOwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAg
IHByb3RvLmpzcGIudGVzdC5FeHRlbmRzV2l0aE1lc3NhZ2Uub3B0aW9uYWxFeHRlbnNpb24sIHN1
Ym1zZyk7Ci0gICAgbXNnLnNldEV4dGVuc2lvbigKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LmV4
dGVuZE9wdGlvbmFsRm9yZWlnbkVudW0sCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5Gb3JlaWdu
RW51bS5GT1JFSUdOX0ZPTyk7Ci0KLQotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHBy
b3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZEludDMyTGlzdCwgWy00Ml0pOwotICAgIG1zZy5z
ZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZEludDY0
TGlzdCwgWy0weDdmZmZmZmZmMDAwMDAwMDBdKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAg
ICAgICBwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRVaW50MzJMaXN0LCBbMHg4MDAwMDAw
MF0pOwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRl
bmRSZXBlYXRlZFVpbnQ2NExpc3QsIFsweGYwMDAwMDAwMDAwMDAwMDBdKTsKLSAgICBtc2cuc2V0
RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRTaW50MzJM
aXN0LCBbLTEwMF0pOwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIu
dGVzdC5leHRlbmRSZXBlYXRlZFNpbnQ2NExpc3QsIFstMHg4MDAwMDAwMDAwMDAwMDAwXSk7Ci0g
ICAgbXNnLnNldEV4dGVuc2lvbigKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LmV4dGVuZFJlcGVh
dGVkRml4ZWQzMkxpc3QsIFsxMjM0XSk7Ci0gICAgbXNnLnNldEV4dGVuc2lvbigKLSAgICAgICAg
cHJvdG8uanNwYi50ZXN0LmV4dGVuZFJlcGVhdGVkRml4ZWQ2NExpc3QsIFsweDEyMzQ1Njc4MDAw
MDAwMDBdKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5qc3BiLnRlc3Qu
ZXh0ZW5kUmVwZWF0ZWRTZml4ZWQzMkxpc3QsIFstMTIzNF0pOwotICAgIG1zZy5zZXRFeHRlbnNp
b24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZFNmaXhlZDY0TGlzdCwg
Wy0weDEyMzQ1Njc4MDAwMDAwMDBdKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAgICAgICBw
cm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWRGbG9hdExpc3QsIFsxLjVdKTsKLSAgICBtc2cu
c2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5qc3BiLnRlc3QuZXh0ZW5kUmVwZWF0ZWREb3Vi
bGVMaXN0LCBbLTEuNV0pOwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpz
cGIudGVzdC5leHRlbmRSZXBlYXRlZEJvb2xMaXN0LCBbdHJ1ZV0pOwotICAgIG1zZy5zZXRFeHRl
bnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRSZXBlYXRlZFN0cmluZ0xpc3Qs
IFsnaGVsbG8gd29ybGQnXSk7Ci0gICAgbXNnLnNldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3Qu
ZXh0ZW5kUmVwZWF0ZWRCeXRlc0xpc3QsIFtCWVRFU10pOwotICAgIHN1Ym1zZyA9IG5ldyBwcm90
by5qc3BiLnRlc3QuRXh0ZW5kc1dpdGhNZXNzYWdlKCk7Ci0gICAgc3VibXNnLnNldEZvbygxMDAw
KTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5qc3BiLnRlc3QuRXh0ZW5k
c1dpdGhNZXNzYWdlLnJlcGVhdGVkRXh0ZW5zaW9uTGlzdCwgW3N1Ym1zZ10pOwotICAgIG1zZy5z
ZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZFJlcGVhdGVkRm9yZWlnbkVudW1MaXN0
LAotICAgICAgICBbcHJvdG8uanNwYi50ZXN0LkZvcmVpZ25FbnVtLkZPUkVJR05fRk9PXSk7Ci0K
LQotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRQ
YWNrZWRSZXBlYXRlZEludDMyTGlzdCwgWy00Ml0pOwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0g
ICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRQYWNrZWRSZXBlYXRlZEludDY0TGlzdCwgWy0w
eDdmZmZmZmZmMDAwMDAwMDBdKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90
by5qc3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRVaW50MzJMaXN0LCBbMHg4MDAwMDAwMF0p
OwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5leHRlbmRQ
YWNrZWRSZXBlYXRlZFVpbnQ2NExpc3QsIFsweGYwMDAwMDAwMDAwMDAwMDBdKTsKLSAgICBtc2cu
c2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5qc3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0
ZWRTaW50MzJMaXN0LCBbLTEwMF0pOwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHBy
b3RvLmpzcGIudGVzdC5leHRlbmRQYWNrZWRSZXBlYXRlZFNpbnQ2NExpc3QsIFstMHg4MDAwMDAw
MDAwMDAwMDAwXSk7Ci0gICAgbXNnLnNldEV4dGVuc2lvbigKLSAgICAgICAgcHJvdG8uanNwYi50
ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVkRml4ZWQzMkxpc3QsIFsxMjM0XSk7Ci0gICAgbXNnLnNl
dEV4dGVuc2lvbigKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVk
Rml4ZWQ2NExpc3QsIFsweDEyMzQ1Njc4MDAwMDAwMDBdKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9u
KAotICAgICAgICBwcm90by5qc3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRTZml4ZWQzMkxp
c3QsIFstMTIzNF0pOwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIu
dGVzdC5leHRlbmRQYWNrZWRSZXBlYXRlZFNmaXhlZDY0TGlzdCwKLSAgICAgICAgWy0weDEyMzQ1
Njc4MDAwMDAwMDBdKTsKLSAgICBtc2cuc2V0RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5qc3Bi
LnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRGbG9hdExpc3QsIFsxLjVdKTsKLSAgICBtc2cuc2V0
RXh0ZW5zaW9uKAotICAgICAgICBwcm90by5qc3BiLnRlc3QuZXh0ZW5kUGFja2VkUmVwZWF0ZWRE
b3VibGVMaXN0LCBbLTEuNV0pOwotICAgIG1zZy5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3Rv
LmpzcGIudGVzdC5leHRlbmRQYWNrZWRSZXBlYXRlZEJvb2xMaXN0LCBbdHJ1ZV0pOwotICAgIG1z
Zy5zZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LmV4dGVuZFBhY2tlZFJlcGVhdGVkRm9yZWln
bkVudW1MaXN0LAotICAgICAgICBbcHJvdG8uanNwYi50ZXN0LkZvcmVpZ25FbnVtLkZPUkVJR05f
Rk9PXSk7Ci0KLSAgfQotCi0KLSAgLyoqCi0gICAqIFRlc3RzIGV4dGVuc2lvbiBzZXJpYWxpemF0
aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCi0gICAqLwotICBpdCgndGVzdEV4dGVuc2lvbnMnLCBm
dW5jdGlvbigpIHsKLSAgICB2YXIgbXNnID0gbmV3IHByb3RvLmpzcGIudGVzdC5UZXN0RXh0ZW5k
YWJsZSgpOwotICAgIGZpbGxFeHRlbnNpb25zKG1zZyk7Ci0gICAgdmFyIGVuY29kZWQgPSBtc2cu
c2VyaWFsaXplQmluYXJ5KCk7Ci0gICAgdmFyIGRlY29kZWQgPSBwcm90by5qc3BiLnRlc3QuVGVz
dEV4dGVuZGFibGUuZGVzZXJpYWxpemVCaW5hcnkoZW5jb2RlZCk7Ci0gICAgY2hlY2tFeHRlbnNp
b25zKGRlY29kZWQpOwotICB9KTsKLX0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9iaW5hcnkvcmVhZGVyLmpz
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9qcy9iaW5hcnkvcmVhZGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWY5
MDQzMmQ4OWVlNDQwMjc5YjI1YmE5N2E1NmYxYmRmNWFhMWJkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvYmluYXJ5L3JlYWRlci5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDExMjcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLS8qKgotICogQGZpbGVvdmVydmlldyBUaGlzIGZpbGUgY29udGFpbnMgdXRpbGl0aWVzIGZv
ciBjb252ZXJ0aW5nIGJpbmFyeSwKLSAqIHdpcmUtZm9ybWF0IHByb3RvY29sIGJ1ZmZlcnMgaW50
byBKYXZhc2NyaXB0IGRhdGEgc3RydWN0dXJlcy4KLSAqCi0gKiBqc3BiJ3MgQmluYXJ5UmVhZGVy
IGNsYXNzIHdyYXBzIHRoZSBCaW5hcnlEZWNvZGVyIGNsYXNzIHRvIGFkZCBtZXRob2RzCi0gKiB0
aGF0IHVuZGVyc3RhbmQgdGhlIHByb3RvY29sIGJ1ZmZlciBzeW50YXggYW5kIGNhbiBkbyB0aGUg
dHlwZSBjaGVja2luZyBhbmQKLSAqIGJvb2trZWVwaW5nIG5lY2Vzc2FyeSB0byBwYXJzZSB0cmVl
cyBvZiBuZXN0ZWQgbWVzc2FnZXMuCi0gKgotICogTWFqb3IgY2F2ZWF0IC0gVXNlcnMgb2YgdGhp
cyBsaWJyYXJ5IF9tdXN0XyBrZWVwIHRoZWlyIEphdmFzY3JpcHQgcHJvdG8KLSAqIHBhcnNpbmcg
Y29kZSBpbiBzeW5jIHdpdGggdGhlIG9yaWdpbmFsIC5wcm90byBmaWxlIC0gcHJlc3VtYWJseSB5
b3UnbGwgYmUKLSAqIHVzaW5nIHRoZSB0eXBlZCBqc3BiIGNvZGUgZ2VuZXJhdG9yLCBidXQgaWYg
eW91IGJ5cGFzcyB0aGF0IHlvdSdsbCBuZWVkCi0gKiB0byBrZWVwIHRoaW5ncyBpbiBzeW5jIGJ5
IGhhbmQuCi0gKgotICogQGF1dGhvciBhYXBwbGVieUBnb29nbGUuY29tIChBdXN0aW4gQXBwbGVi
eSkKLSAqLwotCi1nb29nLnByb3ZpZGUoJ2pzcGIuQmluYXJ5UmVhZGVyJyk7Ci0KLWdvb2cucmVx
dWlyZSgnZ29vZy5hc3NlcnRzJyk7Ci1nb29nLnJlcXVpcmUoJ2pzcGIuQmluYXJ5Q29uc3RhbnRz
Jyk7Ci1nb29nLnJlcXVpcmUoJ2pzcGIuQmluYXJ5RGVjb2RlcicpOwotCi0KLQotLyoqCi0gKiBC
aW5hcnlSZWFkZXIgaW1wbGVtZW50cyB0aGUgZGVjb2RlcnMgZm9yIGFsbCB0aGUgd2lyZSB0eXBl
cyBzcGVjaWZpZWQgaW4KLSAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvZG9jcy9lbmNvZGluZy4KLSAqCi0gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZT19
IG9wdF9ieXRlcyBUaGUgYnl0ZXMgd2UncmUgcmVhZGluZyBmcm9tLgotICogQHBhcmFtIHtudW1i
ZXI9fSBvcHRfc3RhcnQgVGhlIG9wdGlvbmFsIG9mZnNldCB0byBzdGFydCByZWFkaW5nIGF0Lgot
ICogQHBhcmFtIHtudW1iZXI9fSBvcHRfbGVuZ3RoIFRoZSBvcHRpb25hbCBsZW5ndGggb2YgdGhl
IGJsb2NrIHRvIHJlYWQgLQotICogICAgIHdlJ2xsIHRocm93IGFuIGFzc2VydGlvbiBpZiB3ZSBn
byBvZmYgdGhlIGVuZCBvZiB0aGUgYmxvY2suCi0gKiBAY29uc3RydWN0b3IKLSAqIEBzdHJ1Y3QK
LSAqLwotanNwYi5CaW5hcnlSZWFkZXIgPSBmdW5jdGlvbihvcHRfYnl0ZXMsIG9wdF9zdGFydCwg
b3B0X2xlbmd0aCkgewotICAvKioKLSAgICogV2lyZS1mb3JtYXQgZGVjb2Rlci4KLSAgICogQHBy
aXZhdGUgeyFqc3BiLkJpbmFyeURlY29kZXJ9Ci0gICAqLwotICB0aGlzLmRlY29kZXJfID0ganNw
Yi5CaW5hcnlEZWNvZGVyLmFsbG9jKG9wdF9ieXRlcywgb3B0X3N0YXJ0LCBvcHRfbGVuZ3RoKTsK
LQotICAvKioKLSAgICogQ3Vyc29yIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZmllbGQgdGFnLgot
ICAgKiBAcHJpdmF0ZSB7bnVtYmVyfQotICAgKi8KLSAgdGhpcy5maWVsZEN1cnNvcl8gPSB0aGlz
LmRlY29kZXJfLmdldEN1cnNvcigpOwotCi0gIC8qKgotICAgKiBGaWVsZCBudW1iZXIgb2YgdGhl
IG5leHQgZmllbGQgaW4gdGhlIGJ1ZmZlciwgZmlsbGVkIGluIGJ5IG5leHRGaWVsZCgpLgotICAg
KiBAcHJpdmF0ZSB7bnVtYmVyfQotICAgKi8KLSAgdGhpcy5uZXh0RmllbGRfID0ganNwYi5CaW5h
cnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVI7Ci0KLSAgLyoqCi0gICAqIFdpcmUgdHlw
ZSBvZiB0aGUgbmV4dCBwcm90byBmaWVsZCBpbiB0aGUgYnVmZmVyLCBmaWxsZWQgaW4gYnkKLSAg
ICogbmV4dEZpZWxkKCkuCi0gICAqIEBwcml2YXRlIHtqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJl
VHlwZX0KLSAgICovCi0gIHRoaXMubmV4dFdpcmVUeXBlXyA9IGpzcGIuQmluYXJ5Q29uc3RhbnRz
LldpcmVUeXBlLklOVkFMSUQ7Ci0KLSAgLyoqCi0gICAqIFNldCB0byB0cnVlIGlmIHRoaXMgcmVh
ZGVyIGVuY291bnRlcmVkIGFuIGVycm9yIGR1ZSB0byBjb3JydXB0IGRhdGEuCi0gICAqIEBwcml2
YXRlIHtib29sZWFufQotICAgKi8KLSAgdGhpcy5lcnJvcl8gPSBmYWxzZTsKLQotICAvKioKLSAg
ICogVXNlci1kZWZpbmVkIHJlYWRlciBjYWxsYmFja3MuCi0gICAqIEBwcml2YXRlIHtPYmplY3Qu
PHN0cmluZywgZnVuY3Rpb24oIWpzcGIuQmluYXJ5UmVhZGVyKToqPn0KLSAgICovCi0gIHRoaXMu
cmVhZENhbGxiYWNrc18gPSBudWxsOwotfTsKLQotCi0vKioKLSAqIEdsb2JhbCBwb29sIG9mIEJp
bmFyeVJlYWRlciBpbnN0YW5jZXMuCi0gKiBAcHJpdmF0ZSB7IUFycmF5LjwhanNwYi5CaW5hcnlS
ZWFkZXI+fQotICovCi1qc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXyA9IFtdOwotCi0K
LS8qKgotICogUG9wcyBhbiBpbnN0YW5jZSBvZmYgdGhlIGluc3RhbmNlIGNhY2hlLCBvciBjcmVh
dGVzIG9uZSBpZiB0aGUgY2FjaGUgaXMKLSAqIGVtcHR5LgotICogQHBhcmFtIHtqc3BiLkJ5dGVT
b3VyY2U9fSBvcHRfYnl0ZXMgVGhlIGJ5dGVzIHdlJ3JlIHJlYWRpbmcgZnJvbS4KLSAqIEBwYXJh
bSB7bnVtYmVyPX0gb3B0X3N0YXJ0IFRoZSBvcHRpb25hbCBvZmZzZXQgdG8gc3RhcnQgcmVhZGlu
ZyBhdC4KLSAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2xlbmd0aCBUaGUgb3B0aW9uYWwgbGVuZ3Ro
IG9mIHRoZSBibG9jayB0byByZWFkIC0KLSAqICAgICB3ZSdsbCB0aHJvdyBhbiBhc3NlcnRpb24g
aWYgd2UgZ28gb2ZmIHRoZSBlbmQgb2YgdGhlIGJsb2NrLgotICogQHJldHVybiB7IWpzcGIuQmlu
YXJ5UmVhZGVyfQotICovCi1qc3BiLkJpbmFyeVJlYWRlci5hbGxvYyA9Ci0gICAgZnVuY3Rpb24o
b3B0X2J5dGVzLCBvcHRfc3RhcnQsIG9wdF9sZW5ndGgpIHsKLSAgaWYgKGpzcGIuQmluYXJ5UmVh
ZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCkgewotICAgIHZhciBuZXdSZWFkZXIgPSBqc3BiLkJp
bmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5wb3AoKTsKLSAgICBpZiAob3B0X2J5dGVzKSB7Ci0g
ICAgICBuZXdSZWFkZXIuZGVjb2Rlcl8uc2V0QmxvY2sob3B0X2J5dGVzLCBvcHRfc3RhcnQsIG9w
dF9sZW5ndGgpOwotICAgIH0KLSAgICByZXR1cm4gbmV3UmVhZGVyOwotICB9IGVsc2UgewotICAg
IHJldHVybiBuZXcganNwYi5CaW5hcnlSZWFkZXIob3B0X2J5dGVzLCBvcHRfc3RhcnQsIG9wdF9s
ZW5ndGgpOwotICB9Ci19OwotCi0KLS8qKgotICogQWxpYXMgZm9yIHRoZSBhYm92ZSBtZXRob2Qu
Ci0gKiBAcGFyYW0ge2pzcGIuQnl0ZVNvdXJjZT19IG9wdF9ieXRlcyBUaGUgYnl0ZXMgd2UncmUg
cmVhZGluZyBmcm9tLgotICogQHBhcmFtIHtudW1iZXI9fSBvcHRfc3RhcnQgVGhlIG9wdGlvbmFs
IG9mZnNldCB0byBzdGFydCByZWFkaW5nIGF0LgotICogQHBhcmFtIHtudW1iZXI9fSBvcHRfbGVu
Z3RoIFRoZSBvcHRpb25hbCBsZW5ndGggb2YgdGhlIGJsb2NrIHRvIHJlYWQgLQotICogICAgIHdl
J2xsIHRocm93IGFuIGFzc2VydGlvbiBpZiB3ZSBnbyBvZmYgdGhlIGVuZCBvZiB0aGUgYmxvY2su
Ci0gKiBAcmV0dXJuIHshanNwYi5CaW5hcnlSZWFkZXJ9Ci0gKi8KLWpzcGIuQmluYXJ5UmVhZGVy
LnByb3RvdHlwZS5hbGxvYyA9IGpzcGIuQmluYXJ5UmVhZGVyLmFsbG9jOwotCi0KLS8qKgotICog
UHV0cyB0aGlzIGluc3RhbmNlIGJhY2sgaW4gdGhlIGluc3RhbmNlIGNhY2hlLgotICovCi1qc3Bi
LkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZnJlZSA9IGZ1bmN0aW9uKCkgewotICB0aGlzLmRlY29k
ZXJfLmNsZWFyKCk7Ci0gIHRoaXMubmV4dEZpZWxkXyA9IGpzcGIuQmluYXJ5Q29uc3RhbnRzLklO
VkFMSURfRklFTERfTlVNQkVSOwotICB0aGlzLm5leHRXaXJlVHlwZV8gPSBqc3BiLkJpbmFyeUNv
bnN0YW50cy5XaXJlVHlwZS5JTlZBTElEOwotICB0aGlzLmVycm9yXyA9IGZhbHNlOwotICB0aGlz
LnJlYWRDYWxsYmFja3NfID0gbnVsbDsKLQotICBpZiAoanNwYi5CaW5hcnlSZWFkZXIuaW5zdGFu
Y2VDYWNoZV8ubGVuZ3RoIDwgMTAwKSB7Ci0gICAganNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VD
YWNoZV8ucHVzaCh0aGlzKTsKLSAgfQotfTsKLQotCi0vKioKLSAqIFJldHVybnMgdGhlIGN1cnNv
ciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnJlbnQgZmllbGQncyB0YWcuCi0gKiBAcmV0dXJu
IHtudW1iZXJ9IFRoZSBpbnRlcm5hbCByZWFkIGN1cnNvci4KLSAqLwotanNwYi5CaW5hcnlSZWFk
ZXIucHJvdG90eXBlLmdldEZpZWxkQ3Vyc29yID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB0aGlz
LmZpZWxkQ3Vyc29yXzsKLX07Ci0KLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBpbnRlcm5hbCByZWFk
IGN1cnNvci4KLSAqIEByZXR1cm4ge251bWJlcn0gVGhlIGludGVybmFsIHJlYWQgY3Vyc29yLgot
ICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0Q3Vyc29yID0gZnVuY3Rpb24oKSB7
Ci0gIHJldHVybiB0aGlzLmRlY29kZXJfLmdldEN1cnNvcigpOwotfTsKLQotCi0vKioKLSAqIFJl
dHVybnMgdGhlIHJhdyBidWZmZXIuCi0gKiBAcmV0dXJuIHs/VWludDhBcnJheX0gVGhlIHJhdyBi
dWZmZXIuCi0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5j
dGlvbigpIHsKLSAgcmV0dXJuIHRoaXMuZGVjb2Rlcl8uZ2V0QnVmZmVyKCk7Ci19OwotCi0KLS8q
KgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgZmllbGQgbnVtYmVyIG9mIHRoZSBuZXh0IGZpZWxk
IGluIHRoZSBidWZmZXIsIG9yCi0gKiAgICAgSU5WQUxJRF9GSUVMRF9OVU1CRVIgaWYgdGhlcmUg
aXMgbm8gbmV4dCBmaWVsZC4KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEZp
ZWxkTnVtYmVyID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB0aGlzLm5leHRGaWVsZF87Ci19Owot
Ci0KLS8qKgotICogQHJldHVybiB7anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGV9IFRoZSB3
aXJlIHR5cGUgb2YgdGhlIG5leHQgZmllbGQKLSAqICAgICBpbiB0aGUgc3RyZWFtLCBvciBXaXJl
VHlwZS5JTlZBTElEIGlmIHRoZXJlIGlzIG5vIG5leHQgZmllbGQuCi0gKi8KLWpzcGIuQmluYXJ5
UmVhZGVyLnByb3RvdHlwZS5nZXRXaXJlVHlwZSA9IGZ1bmN0aW9uKCkgewotICByZXR1cm4gdGhp
cy5uZXh0V2lyZVR5cGVfOwotfTsKLQotCi0vKioKLSAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRo
ZXIgdGhlIGN1cnJlbnQgd2lyZSB0eXBlIGlzIGFuIGVuZC1ncm91cCB0YWcuIFVzZWQgYXMKLSAq
IGFuIGV4aXQgY29uZGl0aW9uIGluIGRlY29kZXIgbG9vcHMgaW4gZ2VuZXJhdGVkIGNvZGUuCi0g
Ki8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5pc0VuZEdyb3VwID0gZnVuY3Rpb24oKSB7
Ci0gIHJldHVybiB0aGlzLm5leHRXaXJlVHlwZV8gPT0ganNwYi5CaW5hcnlDb25zdGFudHMuV2ly
ZVR5cGUuRU5EX0dST1VQOwotfTsKLQotCi0vKioKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJl
YWRlciBoaXQgYW4gZXJyb3IgZHVlIHRvIGNvcnJ1cHQgZGF0YS4KLSAqIEByZXR1cm4ge2Jvb2xl
YW59Ci0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRFcnJvciA9IGZ1bmN0aW9u
KCkgewotICByZXR1cm4gdGhpcy5lcnJvcl8gfHwgdGhpcy5kZWNvZGVyXy5nZXRFcnJvcigpOwot
fTsKLQotCi0vKioKLSAqIFBvaW50cyB0aGlzIHJlYWRlciBhdCBhIG5ldyBibG9jayBvZiBieXRl
cy4KLSAqIEBwYXJhbSB7IVVpbnQ4QXJyYXl9IGJ5dGVzIFRoZSBibG9jayBvZiBieXRlcyB3ZSdy
ZSByZWFkaW5nIGZyb20uCi0gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIG9mZnNldCB0byBz
dGFydCByZWFkaW5nIGF0LgotICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBUaGUgbGVuZ3RoIG9m
IHRoZSBibG9jayB0byByZWFkLgotICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2V0
QmxvY2sgPSBmdW5jdGlvbihieXRlcywgc3RhcnQsIGxlbmd0aCkgewotICB0aGlzLmRlY29kZXJf
LnNldEJsb2NrKGJ5dGVzLCBzdGFydCwgbGVuZ3RoKTsKLSAgdGhpcy5uZXh0RmllbGRfID0ganNw
Yi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVI7Ci0gIHRoaXMubmV4dFdpcmVU
eXBlXyA9IGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUQ7Ci19OwotCi0KLS8q
KgotICogUmV3aW5kcyB0aGUgc3RyZWFtIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBi
dWZmZXIgYW5kIHJlc2V0cyBhbGwKLSAqIGludGVybmFsIHN0YXRlLgotICovCi1qc3BiLkJpbmFy
eVJlYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKLSAgdGhpcy5kZWNvZGVyXy5y
ZXNldCgpOwotICB0aGlzLm5leHRGaWVsZF8gPSBqc3BiLkJpbmFyeUNvbnN0YW50cy5JTlZBTElE
X0ZJRUxEX05VTUJFUjsKLSAgdGhpcy5uZXh0V2lyZVR5cGVfID0ganNwYi5CaW5hcnlDb25zdGFu
dHMuV2lyZVR5cGUuSU5WQUxJRDsKLX07Ci0KLQotLyoqCi0gKiBBZHZhbmNlcyB0aGUgc3RyZWFt
IGN1cnNvciBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgotICogQHBhcmFtIHtudW1iZXJ9
IGNvdW50IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWR2YW5jZSBieS4KLSAqLwotanNwYi5CaW5h
cnlSZWFkZXIucHJvdG90eXBlLmFkdmFuY2UgPSBmdW5jdGlvbihjb3VudCkgewotICB0aGlzLmRl
Y29kZXJfLmFkdmFuY2UoY291bnQpOwotfTsKLQotCi0vKioKLSAqIFJlYWRzIHRoZSBuZXh0IGZp
ZWxkIGhlYWRlciBpbiB0aGUgc3RyZWFtIGlmIHRoZXJlIGlzIG9uZSwgcmV0dXJucyB0cnVlIGlm
Ci0gKiB3ZSBzYXcgYSB2YWxpZCBmaWVsZCBoZWFkZXIgb3IgZmFsc2UgaWYgd2UndmUgcmVhZCB0
aGUgd2hvbGUgc3RyZWFtLgotICogVGhyb3dzIGFuIGVycm9yIGlmIHdlIGVuY291bnRlcmVkIGEg
ZGVwcmVjYXRlZCBTVEFSVF9HUk9VUC9FTkRfR1JPVVAgZmllbGQuCi0gKiBAcmV0dXJuIHtib29s
ZWFufSBUcnVlIGlmIHRoZSBzdHJlYW0gY29udGFpbnMgbW9yZSBmaWVsZHMuCi0gKi8KLWpzcGIu
QmluYXJ5UmVhZGVyLnByb3RvdHlwZS5uZXh0RmllbGQgPSBmdW5jdGlvbigpIHsKLSAgLy8gSWYg
d2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2ssIHRoZXJlIGFyZSBubyBtb3JlIGZpZWxkcy4K
LSAgaWYgKHRoaXMuZGVjb2Rlcl8uYXRFbmQoKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
Ci0gIC8vIElmIHdlIGhpdCBhbiBlcnJvciBkZWNvZGluZyB0aGUgcHJldmlvdXMgZmllbGQsIHN0
b3Agbm93IGJlZm9yZSB3ZQotICAvLyB0cnkgdG8gZGVjb2RlIGFueXRoaW5nIGVsc2UKLSAgaWYg
KHRoaXMuZ2V0RXJyb3IoKSkgewotICAgIGdvb2cuYXNzZXJ0cy5mYWlsKCdEZWNvZGVyIGhpdCBh
biBlcnJvcicpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIE90aGVyd2lzZSBqdXN0
IHJlYWQgdGhlIGhlYWRlciBvZiB0aGUgbmV4dCBmaWVsZC4KLSAgdGhpcy5maWVsZEN1cnNvcl8g
PSB0aGlzLmRlY29kZXJfLmdldEN1cnNvcigpOwotICB2YXIgaGVhZGVyID0gdGhpcy5kZWNvZGVy
Xy5yZWFkVW5zaWduZWRWYXJpbnQzMigpOwotCi0gIHZhciBuZXh0RmllbGQgPSBoZWFkZXIgPj4+
IDM7Ci0gIHZhciBuZXh0V2lyZVR5cGUgPSAvKiogQHR5cGUge2pzcGIuQmluYXJ5Q29uc3RhbnRz
LldpcmVUeXBlfSAqLwotICAgICAgKGhlYWRlciAmIDB4Nyk7Ci0KLSAgLy8gSWYgdGhlIHdpcmUg
dHlwZSBpc24ndCBvbmUgb2YgdGhlIHZhbGlkIG9uZXMsIHNvbWV0aGluZydzIGJyb2tlbi4KLSAg
aWYgKG5leHRXaXJlVHlwZSAhPSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQg
JiYKLSAgICAgIG5leHRXaXJlVHlwZSAhPSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5G
SVhFRDMyICYmCi0gICAgICBuZXh0V2lyZVR5cGUgIT0ganNwYi5CaW5hcnlDb25zdGFudHMuV2ly
ZVR5cGUuRklYRUQ2NCAmJgotICAgICAgbmV4dFdpcmVUeXBlICE9IGpzcGIuQmluYXJ5Q29uc3Rh
bnRzLldpcmVUeXBlLkRFTElNSVRFRCAmJgotICAgICAgbmV4dFdpcmVUeXBlICE9IGpzcGIuQmlu
YXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQICYmCi0gICAgICBuZXh0V2lyZVR5cGUg
IT0ganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKSB7Ci0gICAgZ29vZy5h
c3NlcnRzLmZhaWwoJ0ludmFsaWQgd2lyZSB0eXBlJyk7Ci0gICAgdGhpcy5lcnJvcl8gPSB0cnVl
OwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHRoaXMubmV4dEZpZWxkXyA9IG5leHRGaWVs
ZDsKLSAgdGhpcy5uZXh0V2lyZVR5cGVfID0gbmV4dFdpcmVUeXBlOwotCi0gIHJldHVybiB0cnVl
OwotfTsKLQotCi0vKioKLSAqIFdpbmRzIHRoZSByZWFkZXIgYmFjayB0byBqdXN0IGJlZm9yZSB0
aGlzIGZpZWxkJ3MgaGVhZGVyLgotICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUudW5z
a2lwSGVhZGVyID0gZnVuY3Rpb24oKSB7Ci0gIHRoaXMuZGVjb2Rlcl8udW5za2lwVmFyaW50KCh0
aGlzLm5leHRGaWVsZF8gPDwgMykgfCB0aGlzLm5leHRXaXJlVHlwZV8pOwotfTsKLQotCi0vKioK
LSAqIFNraXBzIGFsbCBjb250aWd1b3VzIGZpZWxkcyB3aG9zZSBoZWFkZXIgbWF0Y2hlcyB0aGUg
b25lIHdlIGp1c3QgcmVhZC4KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBN
YXRjaGluZ0ZpZWxkcyA9IGZ1bmN0aW9uKCkgewotICB2YXIgZmllbGQgPSB0aGlzLm5leHRGaWVs
ZF87Ci0gIHRoaXMudW5za2lwSGVhZGVyKCk7Ci0KLSAgd2hpbGUgKHRoaXMubmV4dEZpZWxkKCkg
JiYgKHRoaXMuZ2V0RmllbGROdW1iZXIoKSA9PSBmaWVsZCkpIHsKLSAgICB0aGlzLnNraXBGaWVs
ZCgpOwotICB9Ci0KLSAgaWYgKCF0aGlzLmRlY29kZXJfLmF0RW5kKCkpIHsKLSAgICB0aGlzLnVu
c2tpcEhlYWRlcigpOwotICB9Ci19OwotCi0KLS8qKgotICogU2tpcHMgb3ZlciB0aGUgbmV4dCB2
YXJpbnQgZmllbGQgaW4gdGhlIGJpbmFyeSBzdHJlYW0uCi0gKi8KLWpzcGIuQmluYXJ5UmVhZGVy
LnByb3RvdHlwZS5za2lwVmFyaW50RmllbGQgPSBmdW5jdGlvbigpIHsKLSAgaWYgKHRoaXMubmV4
dFdpcmVUeXBlXyAhPSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpIHsKLSAg
ICBnb29nLmFzc2VydHMuZmFpbCgnSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBWYXJpbnRGaWVs
ZCcpOwotICAgIHRoaXMuc2tpcEZpZWxkKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgdGhpcy5k
ZWNvZGVyXy5za2lwVmFyaW50KCk7Ci19OwotCi0KLS8qKgotICogU2tpcHMgb3ZlciB0aGUgbmV4
dCBkZWxpbWl0ZWQgZmllbGQgaW4gdGhlIGJpbmFyeSBzdHJlYW0uCi0gKi8KLWpzcGIuQmluYXJ5
UmVhZGVyLnByb3RvdHlwZS5za2lwRGVsaW1pdGVkRmllbGQgPSBmdW5jdGlvbigpIHsKLSAgaWYg
KHRoaXMubmV4dFdpcmVUeXBlXyAhPSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJ
TUlURUQpIHsKLSAgICBnb29nLmFzc2VydHMuZmFpbCgnSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNr
aXBEZWxpbWl0ZWRGaWVsZCcpOwotICAgIHRoaXMuc2tpcEZpZWxkKCk7Ci0gICAgcmV0dXJuOwot
ICB9Ci0KLSAgdmFyIGxlbmd0aCA9IHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIo
KTsKLSAgdGhpcy5kZWNvZGVyXy5hZHZhbmNlKGxlbmd0aCk7Ci19OwotCi0KLS8qKgotICogU2tp
cHMgb3ZlciB0aGUgbmV4dCBmaXhlZDMyIGZpZWxkIGluIHRoZSBiaW5hcnkgc3RyZWFtLgotICov
Ci1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcEZpeGVkMzJGaWVsZCA9IGZ1bmN0aW9u
KCkgewotICBpZiAodGhpcy5uZXh0V2lyZVR5cGVfICE9IGpzcGIuQmluYXJ5Q29uc3RhbnRzLldp
cmVUeXBlLkZJWEVEMzIpIHsKLSAgICBnb29nLmFzc2VydHMuZmFpbCgnSW52YWxpZCB3aXJlIHR5
cGUgZm9yIHNraXBGaXhlZDMyRmllbGQnKTsKLSAgICB0aGlzLnNraXBGaWVsZCgpOwotICAgIHJl
dHVybjsKLSAgfQotCi0gIHRoaXMuZGVjb2Rlcl8uYWR2YW5jZSg0KTsKLX07Ci0KLQotLyoqCi0g
KiBTa2lwcyBvdmVyIHRoZSBuZXh0IGZpeGVkNjQgZmllbGQgaW4gdGhlIGJpbmFyeSBzdHJlYW0u
Ci0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRml4ZWQ2NEZpZWxkID0gZnVu
Y3Rpb24oKSB7Ci0gIGlmICh0aGlzLm5leHRXaXJlVHlwZV8gIT0ganNwYi5CaW5hcnlDb25zdGFu
dHMuV2lyZVR5cGUuRklYRUQ2NCkgewotICAgIGdvb2cuYXNzZXJ0cy5mYWlsKCdJbnZhbGlkIHdp
cmUgdHlwZSBmb3Igc2tpcEZpeGVkNjRGaWVsZCcpOwotICAgIHRoaXMuc2tpcEZpZWxkKCk7Ci0g
ICAgcmV0dXJuOwotICB9Ci0KLSAgdGhpcy5kZWNvZGVyXy5hZHZhbmNlKDgpOwotfTsKLQotCi0v
KioKLSAqIFNraXBzIG92ZXIgdGhlIG5leHQgZ3JvdXAgZmllbGQgaW4gdGhlIGJpbmFyeSBzdHJl
YW0uCi0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwR3JvdXAgPSBmdW5jdGlv
bigpIHsKLSAgLy8gS2VlcCBhIHN0YWNrIG9mIHN0YXJ0LWdyb3VwIHRhZ3MgdGhhdCBtdXN0IGJl
IG1hdGNoZWQgYnkgZW5kLWdyb3VwIHRhZ3MuCi0gIHZhciBuZXN0ZWRHcm91cHMgPSBbdGhpcy5u
ZXh0RmllbGRfXTsKLSAgZG8gewotICAgIGlmICghdGhpcy5uZXh0RmllbGQoKSkgewotICAgICAg
Z29vZy5hc3NlcnRzLmZhaWwoJ1VubWF0Y2hlZCBzdGFydC1ncm91cCB0YWc6IHN0cmVhbSBFT0Yn
KTsKLSAgICAgIHRoaXMuZXJyb3JfID0gdHJ1ZTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKHRoaXMubmV4dFdpcmVUeXBlXyA9PQotICAgICAgICBqc3BiLkJpbmFyeUNvbnN0YW50cy5X
aXJlVHlwZS5TVEFSVF9HUk9VUCkgewotICAgICAgLy8gTmVzdGVkIGdyb3VwIHN0YXJ0LgotICAg
ICAgbmVzdGVkR3JvdXBzLnB1c2godGhpcy5uZXh0RmllbGRfKTsKLSAgICB9IGVsc2UgaWYgKHRo
aXMubmV4dFdpcmVUeXBlXyA9PQotICAgICAgICAgICAgICAganNwYi5CaW5hcnlDb25zdGFudHMu
V2lyZVR5cGUuRU5EX0dST1VQKSB7Ci0gICAgICAvLyBHcm91cCBlbmQ6IGNoZWNrIHRoYXQgaXQg
bWF0Y2hlcyB0b3Atb2Ytc3RhY2suCi0gICAgICBpZiAodGhpcy5uZXh0RmllbGRfICE9IG5lc3Rl
ZEdyb3Vwcy5wb3AoKSkgewotICAgICAgICBnb29nLmFzc2VydHMuZmFpbCgnVW5tYXRjaGVkIGVu
ZC1ncm91cCB0YWcnKTsKLSAgICAgICAgdGhpcy5lcnJvcl8gPSB0cnVlOwotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxlIChuZXN0ZWRHcm91cHMubGVuZ3RoID4gMCk7
Ci19OwotCi0KLS8qKgotICogU2tpcHMgb3ZlciB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgYmluYXJ5
IHN0cmVhbSAtIHRoaXMgaXMgdXNlZnVsIGlmIHdlJ3JlCi0gKiBkZWNvZGluZyBhIG1lc3NhZ2Ug
dGhhdCBjb250YWluIHVua25vd24gZmllbGRzLgotICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90
b3R5cGUuc2tpcEZpZWxkID0gZnVuY3Rpb24oKSB7Ci0gIHN3aXRjaCAodGhpcy5uZXh0V2lyZVR5
cGVfKSB7Ci0gICAgY2FzZSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQ6Ci0g
ICAgICB0aGlzLnNraXBWYXJpbnRGaWVsZCgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBqc3Bi
LkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0OgotICAgICAgdGhpcy5za2lwRml4ZWQ2
NEZpZWxkKCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldp
cmVUeXBlLkRFTElNSVRFRDoKLSAgICAgIHRoaXMuc2tpcERlbGltaXRlZEZpZWxkKCk7Ci0gICAg
ICBicmVhazsKLSAgICBjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzI6
Ci0gICAgICB0aGlzLnNraXBGaXhlZDMyRmllbGQoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVA6Ci0gICAgICB0aGlzLnNr
aXBHcm91cCgpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdvb2cuYXNzZXJ0
cy5mYWlsKCdJbnZhbGlkIHdpcmUgZW5jb2RpbmcgZm9yIGZpZWxkLicpOwotICB9Ci19OwotCi0K
LS8qKgotICogUmVnaXN0ZXJzIGEgdXNlci1kZWZpbmVkIHJlYWQgY2FsbGJhY2suCi0gKiBAcGFy
YW0ge3N0cmluZ30gY2FsbGJhY2tOYW1lCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKCFqc3BiLkJpbmFy
eVJlYWRlcik6Kn0gY2FsbGJhY2sKLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJl
Z2lzdGVyUmVhZENhbGxiYWNrID0KLSAgICBmdW5jdGlvbihjYWxsYmFja05hbWUsIGNhbGxiYWNr
KSB7Ci0gIGlmIChnb29nLmlzTnVsbCh0aGlzLnJlYWRDYWxsYmFja3NfKSkgewotICAgIHRoaXMu
cmVhZENhbGxiYWNrc18gPSB7fTsKLSAgfQotICBnb29nLmFzc2VydHMuYXNzZXJ0KCF0aGlzLnJl
YWRDYWxsYmFja3NfW2NhbGxiYWNrTmFtZV0pOwotICB0aGlzLnJlYWRDYWxsYmFja3NfW2NhbGxi
YWNrTmFtZV0gPSBjYWxsYmFjazsKLX07Ci0KLQotLyoqCi0gKiBSdW5zIGEgcmVnaXN0ZXJlZCBy
ZWFkIGNhbGxiYWNrLgotICogQHBhcmFtIHtzdHJpbmd9IGNhbGxiYWNrTmFtZSBUaGUgbmFtZSB0
aGUgY2FsbGJhY2sgaXMgcmVnaXN0ZXJlZCB1bmRlci4KLSAqIEByZXR1cm4geyp9IFRoZSB2YWx1
ZSByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2suCi0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3Rv
dHlwZS5ydW5SZWFkQ2FsbGJhY2sgPSBmdW5jdGlvbihjYWxsYmFja05hbWUpIHsKLSAgZ29vZy5h
c3NlcnRzLmFzc2VydCghZ29vZy5pc051bGwodGhpcy5yZWFkQ2FsbGJhY2tzXykpOwotICB2YXIg
Y2FsbGJhY2sgPSB0aGlzLnJlYWRDYWxsYmFja3NfW2NhbGxiYWNrTmFtZV07Ci0gIGdvb2cuYXNz
ZXJ0cy5hc3NlcnQoY2FsbGJhY2spOwotICByZXR1cm4gY2FsbGJhY2sodGhpcyk7Ci19OwotCi0K
LS8qKgotICogUmVhZHMgYSBmaWVsZCBvZiBhbnkgdmFsaWQgbm9uLW1lc3NhZ2UgdHlwZSBmcm9t
IHRoZSBiaW5hcnkgc3RyZWFtLgotICogQHBhcmFtIHtqc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVs
ZFR5cGV9IGZpZWxkVHlwZQotICogQHJldHVybiB7anNwYi5BbnlGaWVsZFR5cGV9Ci0gKi8KLWpz
cGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkQW55ID0gZnVuY3Rpb24oZmllbGRUeXBlKSB7
Ci0gIHRoaXMubmV4dFdpcmVUeXBlXyA9IGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZVRv
V2lyZVR5cGUoZmllbGRUeXBlKTsKLSAgdmFyIGZpZWxkVHlwZXMgPSBqc3BiLkJpbmFyeUNvbnN0
YW50cy5GaWVsZFR5cGU7Ci0gIHN3aXRjaCAoZmllbGRUeXBlKSB7Ci0gICAgY2FzZSBmaWVsZFR5
cGVzLkRPVUJMRToKLSAgICAgIHJldHVybiB0aGlzLnJlYWREb3VibGUoKTsKLSAgICBjYXNlIGZp
ZWxkVHlwZXMuRkxPQVQ6Ci0gICAgICByZXR1cm4gdGhpcy5yZWFkRmxvYXQoKTsKLSAgICBjYXNl
IGZpZWxkVHlwZXMuSU5UNjQ6Ci0gICAgICByZXR1cm4gdGhpcy5yZWFkSW50NjQoKTsKLSAgICBj
YXNlIGZpZWxkVHlwZXMuVUlOVDY0OgotICAgICAgcmV0dXJuIHRoaXMucmVhZFVpbnQ2NCgpOwot
ICAgIGNhc2UgZmllbGRUeXBlcy5JTlQzMjoKLSAgICAgIHJldHVybiB0aGlzLnJlYWRJbnQzMigp
OwotICAgIGNhc2UgZmllbGRUeXBlcy5GSVhFRDY0OgotICAgICAgcmV0dXJuIHRoaXMucmVhZEZp
eGVkNjQoKTsKLSAgICBjYXNlIGZpZWxkVHlwZXMuRklYRUQzMjoKLSAgICAgIHJldHVybiB0aGlz
LnJlYWRGaXhlZDMyKCk7Ci0gICAgY2FzZSBmaWVsZFR5cGVzLkJPT0w6Ci0gICAgICByZXR1cm4g
dGhpcy5yZWFkQm9vbCgpOwotICAgIGNhc2UgZmllbGRUeXBlcy5TVFJJTkc6Ci0gICAgICByZXR1
cm4gdGhpcy5yZWFkU3RyaW5nKCk7Ci0gICAgY2FzZSBmaWVsZFR5cGVzLkdST1VQOgotICAgICAg
Z29vZy5hc3NlcnRzLmZhaWwoJ0dyb3VwIGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiByZWFk
QW55KCknKTsKLSAgICBjYXNlIGZpZWxkVHlwZXMuTUVTU0FHRToKLSAgICAgIGdvb2cuYXNzZXJ0
cy5mYWlsKCdNZXNzYWdlIGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiByZWFkQW55KCknKTsK
LSAgICBjYXNlIGZpZWxkVHlwZXMuQllURVM6Ci0gICAgICByZXR1cm4gdGhpcy5yZWFkQnl0ZXMo
KTsKLSAgICBjYXNlIGZpZWxkVHlwZXMuVUlOVDMyOgotICAgICAgcmV0dXJuIHRoaXMucmVhZFVp
bnQzMigpOwotICAgIGNhc2UgZmllbGRUeXBlcy5FTlVNOgotICAgICAgcmV0dXJuIHRoaXMucmVh
ZEVudW0oKTsKLSAgICBjYXNlIGZpZWxkVHlwZXMuU0ZJWEVEMzI6Ci0gICAgICByZXR1cm4gdGhp
cy5yZWFkU2ZpeGVkMzIoKTsKLSAgICBjYXNlIGZpZWxkVHlwZXMuU0ZJWEVENjQ6Ci0gICAgICBy
ZXR1cm4gdGhpcy5yZWFkU2ZpeGVkNjQoKTsKLSAgICBjYXNlIGZpZWxkVHlwZXMuU0lOVDMyOgot
ICAgICAgcmV0dXJuIHRoaXMucmVhZFNpbnQzMigpOwotICAgIGNhc2UgZmllbGRUeXBlcy5TSU5U
NjQ6Ci0gICAgICByZXR1cm4gdGhpcy5yZWFkU2ludDY0KCk7Ci0gICAgY2FzZSBmaWVsZFR5cGVz
LkZIQVNINjQ6Ci0gICAgICByZXR1cm4gdGhpcy5yZWFkRml4ZWRIYXNoNjQoKTsKLSAgICBjYXNl
IGZpZWxkVHlwZXMuVkhBU0g2NDoKLSAgICAgIHJldHVybiB0aGlzLnJlYWRWYXJpbnRIYXNoNjQo
KTsKLSAgICBkZWZhdWx0OgotICAgICAgZ29vZy5hc3NlcnRzLmZhaWwoJ0ludmFsaWQgZmllbGQg
dHlwZSBpbiByZWFkQW55KCknKTsKLSAgfQotICByZXR1cm4gMDsKLX07Ci0KLQotLyoqCi0gKiBE
ZXNlcmlhbGl6ZSBhIHByb3RvIGludG8gdGhlIHByb3ZpZGVkIG1lc3NhZ2Ugb2JqZWN0IHVzaW5n
IHRoZSBwcm92aWRlZAotICogcmVhZGVyIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHRlbXBs
YXRlZCBhcyB3ZSBjdXJyZW50bHkgaGF2ZSBvbmUgY2xpZW50Ci0gKiB3aG8gaXMgdXNpbmcgbWFu
dWFsIGRlc2VyaWFsaXphdGlvbiBpbnN0ZWFkIG9mIHRoZSBjb2RlLWdlbmVyYXRlZCB2ZXJzaW9u
cy4KLSAqIEB0ZW1wbGF0ZSBUCi0gKiBAcGFyYW0ge1R9IG1lc3NhZ2UKLSAqIEBwYXJhbSB7ZnVu
Y3Rpb24oVCwgIWpzcGIuQmluYXJ5UmVhZGVyKX0gcmVhZGVyCi0gKi8KLWpzcGIuQmluYXJ5UmVh
ZGVyLnByb3RvdHlwZS5yZWFkTWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHJlYWRlcikgewot
ICBnb29nLmFzc2VydHMuYXNzZXJ0KAotICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIu
QmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7Ci0KLSAgLy8gU2F2ZSB0aGUgY3Vy
cmVudCBlbmRwb2ludCBvZiB0aGUgZGVjb2RlciBhbmQgbW92ZSBpdCB0byB0aGUgZW5kIG9mIHRo
ZQotICAvLyBlbWJlZGRlZCBtZXNzYWdlLgotICB2YXIgb2xkRW5kID0gdGhpcy5kZWNvZGVyXy5n
ZXRFbmQoKTsKLSAgdmFyIGxlbmd0aCA9IHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50
MzIoKTsKLSAgdmFyIG5ld0VuZCA9IHRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCkgKyBsZW5ndGg7
Ci0gIHRoaXMuZGVjb2Rlcl8uc2V0RW5kKG5ld0VuZCk7Ci0KLSAgLy8gRGVzZXJpYWxpemUgdGhl
IGVtYmVkZGVkIG1lc3NhZ2UuCi0gIHJlYWRlcihtZXNzYWdlLCB0aGlzKTsKLQotICAvLyBBZHZh
bmNlIHRoZSBkZWNvZGVyIHBhc3QgdGhlIGVtYmVkZGVkIG1lc3NhZ2UgYW5kIHJlc3RvcmUgdGhl
IGVuZHBvaW50LgotICB0aGlzLmRlY29kZXJfLnNldEN1cnNvcihuZXdFbmQpOwotICB0aGlzLmRl
Y29kZXJfLnNldEVuZChvbGRFbmQpOwotfTsKLQotCi0vKioKLSAqIERlc2VyaWFsaXplIGEgcHJv
dG8gaW50byB0aGUgcHJvdmlkZWQgbWVzc2FnZSBvYmplY3QgdXNpbmcgdGhlIHByb3ZpZGVkCi0g
KiByZWFkZXIgZnVuY3Rpb24sIGFzc3VtaW5nIHRoYXQgdGhlIG1lc3NhZ2UgaXMgc2VyaWFsaXpl
ZCBhcyBhIGdyb3VwCi0gKiB3aXRoIHRoZSBnaXZlbiB0YWcuCi0gKiBAdGVtcGxhdGUgVAotICog
QHBhcmFtIHtudW1iZXJ9IGZpZWxkCi0gKiBAcGFyYW0ge1R9IG1lc3NhZ2UKLSAqIEBwYXJhbSB7
ZnVuY3Rpb24oVCwgIWpzcGIuQmluYXJ5UmVhZGVyKX0gcmVhZGVyCi0gKi8KLWpzcGIuQmluYXJ5
UmVhZGVyLnByb3RvdHlwZS5yZWFkR3JvdXAgPQotICAgIGZ1bmN0aW9uKGZpZWxkLCBtZXNzYWdl
LCByZWFkZXIpIHsKLSAgLy8gRW5zdXJlIHRoYXQgdGhlIHdpcmUgdHlwZSBpcyBjb3JyZWN0Lgot
ICBnb29nLmFzc2VydHMuYXNzZXJ0KAotICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIu
QmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQKTsKLSAgLy8gRW5zdXJlIHRoYXQg
dGhlIGZpZWxkIG51bWJlciBpcyBjb3JyZWN0LgotICBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMu
bmV4dEZpZWxkXyA9PSBmaWVsZCk7Ci0KLSAgLy8gRGVzZXJpYWxpemUgdGhlIG1lc3NhZ2UuIFRo
ZSBkZXNlcmlhbGl6YXRpb24gd2lsbCBzdG9wIGF0IGFuIEVORF9HUk9VUCB0YWcuCi0gIHJlYWRl
cihtZXNzYWdlLCB0aGlzKTsKLQotICBpZiAoIXRoaXMuZXJyb3JfICYmCi0gICAgICB0aGlzLm5l
eHRXaXJlVHlwZV8gIT0ganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKSB7
Ci0gICAgZ29vZy5hc3NlcnRzLmZhaWwoJ0dyb3VwIHN1Ym1lc3NhZ2UgZGlkIG5vdCBlbmQgd2l0
aCBhbiBFTkRfR1JPVVAgdGFnJyk7Ci0gICAgdGhpcy5lcnJvcl8gPSB0cnVlOwotICB9Ci19Owot
Ci0KLS8qKgotICogUmV0dXJuIGEgZGVjb2RlciB0aGF0IHdyYXBzIHRoZSBjdXJyZW50IGRlbGlt
aXRlZCBmaWVsZC4KLSAqIEByZXR1cm4geyFqc3BiLkJpbmFyeURlY29kZXJ9Ci0gKi8KLWpzcGIu
QmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRGaWVsZERlY29kZXIgPSBmdW5jdGlvbigpIHsKLSAg
Z29vZy5hc3NlcnRzLmFzc2VydCgKLSAgICAgIHRoaXMubmV4dFdpcmVUeXBlXyA9PSBqc3BiLkJp
bmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpOwotCi0gIHZhciBsZW5ndGggPSB0aGlz
LmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7Ci0gIHZhciBzdGFydCA9IHRoaXMuZGVj
b2Rlcl8uZ2V0Q3Vyc29yKCk7Ci0gIHZhciBlbmQgPSBzdGFydCArIGxlbmd0aDsKLQotICB2YXIg
aW5uZXJEZWNvZGVyID0KLSAgICAgIGpzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYyh0aGlzLmRlY29k
ZXJfLmdldEJ1ZmZlcigpLCBzdGFydCwgbGVuZ3RoKTsKLSAgdGhpcy5kZWNvZGVyXy5zZXRDdXJz
b3IoZW5kKTsKLSAgcmV0dXJuIGlubmVyRGVjb2RlcjsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBh
IHNpZ25lZCAzMi1iaXQgaW50ZWdlciBmaWVsZCBmcm9tIHRoZSBiaW5hcnkgc3RyZWFtLCBvciB0
aHJvd3MgYW4KLSAqIGVycm9yIGlmIHRoZSBuZXh0IGZpZWxkIGluIHRoZSBzdHJlYW0gaXMgbm90
IG9mIHRoZSBjb3JyZWN0IHdpcmUgdHlwZS4KLSAqCi0gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2
YWx1ZSBvZiB0aGUgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGZpZWxkLgotICovCi1qc3BiLkJpbmFy
eVJlYWRlci5wcm90b3R5cGUucmVhZEludDMyID0gZnVuY3Rpb24oKSB7Ci0gIGdvb2cuYXNzZXJ0
cy5hc3NlcnQoCi0gICAgICB0aGlzLm5leHRXaXJlVHlwZV8gPT0ganNwYi5CaW5hcnlDb25zdGFu
dHMuV2lyZVR5cGUuVkFSSU5UKTsKLSAgcmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZh
cmludDMyKCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBzaWduZWQgMzItYml0IGludGVnZXIg
ZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwgb3IgdGhyb3dzIGFuCi0gKiBlcnJvciBpZiB0
aGUgbmV4dCBmaWVsZCBpbiB0aGUgc3RyZWFtIGlzIG5vdCBvZiB0aGUgY29ycmVjdCB3aXJlIHR5
cGUuCi0gKgotICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSBzdHJpbmcuCi0gKgotICogQHJldHVy
biB7c3RyaW5nfSBUaGUgdmFsdWUgb2YgdGhlIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBmaWVsZCBh
cyBhIGRlY2ltYWwKLSAqIHN0cmluZy4KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBl
LnJlYWRJbnQzMlN0cmluZyA9IGZ1bmN0aW9uKCkgewotICBnb29nLmFzc2VydHMuYXNzZXJ0KAot
ICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBl
LlZBUklOVCk7Ci0gIHJldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMlN0cmlu
ZygpOwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGEgc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGZpZWxk
IGZyb20gdGhlIGJpbmFyeSBzdHJlYW0sIG9yIHRocm93cyBhbgotICogZXJyb3IgaWYgdGhlIG5l
eHQgZmllbGQgaW4gdGhlIHN0cmVhbSBpcyBub3Qgb2YgdGhlIGNvcnJlY3Qgd2lyZSB0eXBlLgot
ICoKLSAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZhbHVlIG9mIHRoZSBzaWduZWQgNjQtYml0IGlu
dGVnZXIgZmllbGQuCi0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50NjQg
PSBmdW5jdGlvbigpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCgKLSAgICAgIHRoaXMubmV4dFdp
cmVUeXBlXyA9PSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpOwotICByZXR1
cm4gdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjQoKTsKLX07Ci0KLQotLyoqCi0gKiBS
ZWFkcyBhIHNpZ25lZCA2NC1iaXQgaW50ZWdlciBmaWVsZCBmcm9tIHRoZSBiaW5hcnkgc3RyZWFt
LCBvciB0aHJvd3MgYW4KLSAqIGVycm9yIGlmIHRoZSBuZXh0IGZpZWxkIGluIHRoZSBzdHJlYW0g
aXMgbm90IG9mIHRoZSBjb3JyZWN0IHdpcmUgdHlwZS4KLSAqCi0gKiBSZXR1cm5zIHRoZSB2YWx1
ZSBhcyBhIHN0cmluZy4KLSAqCi0gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB2YWx1ZSBvZiB0aGUg
c2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGZpZWxkIGFzIGEgZGVjaW1hbAotICogc3RyaW5nLgotICov
Ci1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDY0U3RyaW5nID0gZnVuY3Rpb24o
KSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoCi0gICAgICB0aGlzLm5leHRXaXJlVHlwZV8gPT0g
anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTsKLSAgcmV0dXJuIHRoaXMuZGVj
b2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0U3RyaW5nKCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMg
YW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwg
b3IgdGhyb3dzIGFuCi0gKiBlcnJvciBpZiB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgc3RyZWFtIGlz
IG5vdCBvZiB0aGUgY29ycmVjdCB3aXJlIHR5cGUuCi0gKgotICogQHJldHVybiB7bnVtYmVyfSBU
aGUgdmFsdWUgb2YgdGhlIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGZpZWxkLgotICovCi1qc3Bi
LkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFVpbnQzMiA9IGZ1bmN0aW9uKCkgewotICBnb29n
LmFzc2VydHMuYXNzZXJ0KAotICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIuQmluYXJ5
Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7Ci0gIHJldHVybiB0aGlzLmRlY29kZXJfLnJlYWRV
bnNpZ25lZFZhcmludDMyKCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYW4gdW5zaWduZWQgMzIt
Yml0IGludGVnZXIgZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwgb3IgdGhyb3dzIGFuCi0g
KiBlcnJvciBpZiB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgc3RyZWFtIGlzIG5vdCBvZiB0aGUgY29y
cmVjdCB3aXJlIHR5cGUuCi0gKgotICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSBzdHJpbmcuCi0g
KgotICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmFsdWUgb2YgdGhlIHVuc2lnbmVkIDMyLWJpdCBp
bnRlZ2VyIGZpZWxkIGFzIGEgZGVjaW1hbAotICogc3RyaW5nLgotICovCi1qc3BiLkJpbmFyeVJl
YWRlci5wcm90b3R5cGUucmVhZFVpbnQzMlN0cmluZyA9IGZ1bmN0aW9uKCkgewotICBnb29nLmFz
c2VydHMuYXNzZXJ0KAotICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIuQmluYXJ5Q29u
c3RhbnRzLldpcmVUeXBlLlZBUklOVCk7Ci0gIHJldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVbnNp
Z25lZFZhcmludDMyU3RyaW5nKCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYW4gdW5zaWduZWQg
NjQtYml0IGludGVnZXIgZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwgb3IgdGhyb3dzIGFu
Ci0gKiBlcnJvciBpZiB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgc3RyZWFtIGlzIG5vdCBvZiB0aGUg
Y29ycmVjdCB3aXJlIHR5cGUuCi0gKgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmFsdWUgb2Yg
dGhlIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGZpZWxkLgotICovCi1qc3BiLkJpbmFyeVJlYWRl
ci5wcm90b3R5cGUucmVhZFVpbnQ2NCA9IGZ1bmN0aW9uKCkgewotICBnb29nLmFzc2VydHMuYXNz
ZXJ0KAotICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIuQmluYXJ5Q29uc3RhbnRzLldp
cmVUeXBlLlZBUklOVCk7Ci0gIHJldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmlu
dDY0KCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIg
ZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwgb3IgdGhyb3dzIGFuCi0gKiBlcnJvciBpZiB0
aGUgbmV4dCBmaWVsZCBpbiB0aGUgc3RyZWFtIGlzIG5vdCBvZiB0aGUgY29ycmVjdCB3aXJlIHR5
cGUuCi0gKgotICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSBzdHJpbmcuCi0gKgotICogQHJldHVy
biB7c3RyaW5nfSBUaGUgdmFsdWUgb2YgdGhlIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGZpZWxk
IGFzIGEgZGVjaW1hbAotICogc3RyaW5nLgotICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5
cGUucmVhZFVpbnQ2NFN0cmluZyA9IGZ1bmN0aW9uKCkgewotICBnb29nLmFzc2VydHMuYXNzZXJ0
KAotICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVU
eXBlLlZBUklOVCk7Ci0gIHJldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0
U3RyaW5nKCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBzaWduZWQgemlnemFnLWVuY29kZWQg
MzItYml0IGludGVnZXIgZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwKLSAqIG9yIHRocm93
cyBhbiBlcnJvciBpZiB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgc3RyZWFtIGlzIG5vdCBvZiB0aGUg
Y29ycmVjdAotICogd2lyZSB0eXBlLgotICoKLSAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZhbHVl
IG9mIHRoZSBzaWduZWQgMzItYml0IGludGVnZXIgZmllbGQuCi0gKi8KLWpzcGIuQmluYXJ5UmVh
ZGVyLnByb3RvdHlwZS5yZWFkU2ludDMyID0gZnVuY3Rpb24oKSB7Ci0gIGdvb2cuYXNzZXJ0cy5h
c3NlcnQoCi0gICAgICB0aGlzLm5leHRXaXJlVHlwZV8gPT0ganNwYi5CaW5hcnlDb25zdGFudHMu
V2lyZVR5cGUuVkFSSU5UKTsKLSAgcmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1Zhcmlu
dDMyKCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBzaWduZWQgemlnemFnLWVuY29kZWQgNjQt
Yml0IGludGVnZXIgZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwKLSAqIG9yIHRocm93cyBh
biBlcnJvciBpZiB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgc3RyZWFtIGlzIG5vdCBvZiB0aGUgY29y
cmVjdAotICogd2lyZSB0eXBlLgotICoKLSAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZhbHVlIG9m
IHRoZSBzaWduZWQgNjQtYml0IGludGVnZXIgZmllbGQuCi0gKi8KLWpzcGIuQmluYXJ5UmVhZGVy
LnByb3RvdHlwZS5yZWFkU2ludDY0ID0gZnVuY3Rpb24oKSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3Nl
cnQoCi0gICAgICB0aGlzLm5leHRXaXJlVHlwZV8gPT0ganNwYi5CaW5hcnlDb25zdGFudHMuV2ly
ZVR5cGUuVkFSSU5UKTsKLSAgcmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0
KCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYW4gdW5zaWduZWQgMzItYml0IGZpeGVkLWxlbmd0
aCBpbnRlZ2VyIGZpaWVsZCBmcm9tIHRoZSBiaW5hcnkgc3RyZWFtLAotICogb3IgdGhyb3dzIGFu
IGVycm9yIGlmIHRoZSBuZXh0IGZpZWxkIGluIHRoZSBzdHJlYW0gaXMgbm90IG9mIHRoZSBjb3Jy
ZWN0Ci0gKiB3aXJlIHR5cGUuCi0gKgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmFsdWUgb2Yg
dGhlIGRvdWJsZSBmaWVsZC4KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRG
aXhlZDMyID0gZnVuY3Rpb24oKSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoCi0gICAgICB0aGlz
Lm5leHRXaXJlVHlwZV8gPT0ganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMik7
Ci0gIHJldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVaW50MzIoKTsKLX07Ci0KLQotLyoqCi0gKiBS
ZWFkcyBhbiB1bnNpZ25lZCA2NC1iaXQgZml4ZWQtbGVuZ3RoIGludGVnZXIgZmlpZWxkIGZyb20g
dGhlIGJpbmFyeSBzdHJlYW0sCi0gKiBvciB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIG5leHQgZmll
bGQgaW4gdGhlIHN0cmVhbSBpcyBub3Qgb2YgdGhlIGNvcnJlY3QKLSAqIHdpcmUgdHlwZS4KLSAq
Ci0gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2YWx1ZSBvZiB0aGUgZmxvYXQgZmllbGQuCi0gKi8K
LWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRml4ZWQ2NCA9IGZ1bmN0aW9uKCkgewot
ICBnb29nLmFzc2VydHMuYXNzZXJ0KAotICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIu
QmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpOwotICByZXR1cm4gdGhpcy5kZWNvZGVy
Xy5yZWFkVWludDY0KCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBzaWduZWQgMzItYml0IGZp
eGVkLWxlbmd0aCBpbnRlZ2VyIGZpaWVsZCBmcm9tIHRoZSBiaW5hcnkgc3RyZWFtLCBvcgotICog
dGhyb3dzIGFuIGVycm9yIGlmIHRoZSBuZXh0IGZpZWxkIGluIHRoZSBzdHJlYW0gaXMgbm90IG9m
IHRoZSBjb3JyZWN0IHdpcmUKLSAqIHR5cGUuCi0gKgotICogQHJldHVybiB7bnVtYmVyfSBUaGUg
dmFsdWUgb2YgdGhlIGRvdWJsZSBmaWVsZC4KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90
eXBlLnJlYWRTZml4ZWQzMiA9IGZ1bmN0aW9uKCkgewotICBnb29nLmFzc2VydHMuYXNzZXJ0KAot
ICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBl
LkZJWEVEMzIpOwotICByZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkSW50MzIoKTsKLX07Ci0KLQot
LyoqCi0gKiBSZWFkcyBhIHNpZ25lZCA2NC1iaXQgZml4ZWQtbGVuZ3RoIGludGVnZXIgZmlpZWxk
IGZyb20gdGhlIGJpbmFyeSBzdHJlYW0sIG9yCi0gKiB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIG5l
eHQgZmllbGQgaW4gdGhlIHN0cmVhbSBpcyBub3Qgb2YgdGhlIGNvcnJlY3Qgd2lyZQotICogdHlw
ZS4KLSAqCi0gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2YWx1ZSBvZiB0aGUgZmxvYXQgZmllbGQu
Ci0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU2ZpeGVkNjQgPSBmdW5jdGlv
bigpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCgKLSAgICAgIHRoaXMubmV4dFdpcmVUeXBlXyA9
PSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KTsKLSAgcmV0dXJuIHRoaXMu
ZGVjb2Rlcl8ucmVhZEludDY0KCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSAzMi1iaXQgZmxv
YXRpbmctcG9pbnQgZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwgb3IgdGhyb3dzIGFuCi0g
KiBlcnJvciBpZiB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgc3RyZWFtIGlzIG5vdCBvZiB0aGUgY29y
cmVjdCB3aXJlIHR5cGUuCi0gKgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmFsdWUgb2YgdGhl
IGZsb2F0IGZpZWxkLgotICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZsb2F0
ID0gZnVuY3Rpb24oKSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoCi0gICAgICB0aGlzLm5leHRX
aXJlVHlwZV8gPT0ganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMik7Ci0gIHJl
dHVybiB0aGlzLmRlY29kZXJfLnJlYWRGbG9hdCgpOwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGEg
NjQtYml0IGZsb2F0aW5nLXBvaW50IGZpZWxkIGZyb20gdGhlIGJpbmFyeSBzdHJlYW0sIG9yIHRo
cm93cyBhbgotICogZXJyb3IgaWYgdGhlIG5leHQgZmllbGQgaW4gdGhlIHN0cmVhbSBpcyBub3Qg
b2YgdGhlIGNvcnJlY3Qgd2lyZSB0eXBlLgotICoKLSAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZh
bHVlIG9mIHRoZSBkb3VibGUgZmllbGQuCi0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlw
ZS5yZWFkRG91YmxlID0gZnVuY3Rpb24oKSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoCi0gICAg
ICB0aGlzLm5leHRXaXJlVHlwZV8gPT0ganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklY
RUQ2NCk7Ci0gIHJldHVybiB0aGlzLmRlY29kZXJfLnJlYWREb3VibGUoKTsKLX07Ci0KLQotLyoq
Ci0gKiBSZWFkcyBhIGJvb2xlYW4gZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwgb3IgdGhy
b3dzIGFuIGVycm9yIGlmIHRoZSBuZXh0Ci0gKiBmaWVsZCBpbiB0aGUgc3RyZWFtIGlzIG5vdCBv
ZiB0aGUgY29ycmVjdCB3aXJlIHR5cGUuCi0gKgotICogQHJldHVybiB7Ym9vbGVhbn0gVGhlIHZh
bHVlIG9mIHRoZSBib29sZWFuIGZpZWxkLgotICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5
cGUucmVhZEJvb2wgPSBmdW5jdGlvbigpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCgKLSAgICAg
IHRoaXMubmV4dFdpcmVUeXBlXyA9PSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJ
TlQpOwotICByZXR1cm4gISF0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7Ci19
OwotCi0KLS8qKgotICogUmVhZHMgYW4gZW51bSBmaWVsZCBmcm9tIHRoZSBiaW5hcnkgc3RyZWFt
LCBvciB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIG5leHQKLSAqIGZpZWxkIGluIHRoZSBzdHJlYW0g
aXMgbm90IG9mIHRoZSBjb3JyZWN0IHdpcmUgdHlwZS4KLSAqCi0gKiBAcmV0dXJuIHtudW1iZXJ9
IFRoZSB2YWx1ZSBvZiB0aGUgZW51bSBmaWVsZC4KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJv
dG90eXBlLnJlYWRFbnVtID0gZnVuY3Rpb24oKSB7Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoCi0g
ICAgICB0aGlzLm5leHRXaXJlVHlwZV8gPT0ganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUu
VkFSSU5UKTsKLSAgcmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KCk7Ci19
OwotCi0KLS8qKgotICogUmVhZHMgYSBzdHJpbmcgZmllbGQgZnJvbSB0aGUgYmluYXJ5IHN0cmVh
bSwgb3IgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBuZXh0Ci0gKiBmaWVsZCBpbiB0aGUgc3RyZWFt
IGlzIG5vdCBvZiB0aGUgY29ycmVjdCB3aXJlIHR5cGUuCi0gKgotICogQHJldHVybiB7c3RyaW5n
fSBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBmaWVsZC4KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIu
cHJvdG90eXBlLnJlYWRTdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2Vy
dCgKLSAgICAgIHRoaXMubmV4dFdpcmVUeXBlXyA9PSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJl
VHlwZS5ERUxJTUlURUQpOwotICB2YXIgbGVuZ3RoID0gdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWdu
ZWRWYXJpbnQzMigpOwotICByZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU3RyaW5nKGxlbmd0aCk7
Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBsZW5ndGgtcHJlZml4ZWQgYmxvY2sgb2YgYnl0ZXMg
ZnJvbSB0aGUgYmluYXJ5IHN0cmVhbSwgb3IgcmV0dXJucwotICogbnVsbCBpZiB0aGUgbmV4dCBm
aWVsZCBpbiB0aGUgc3RyZWFtIGhhcyBhbiBpbnZhbGlkIGxlbmd0aCB2YWx1ZS4KLSAqCi0gKiBA
cmV0dXJuIHshVWludDhBcnJheX0gVGhlIGJsb2NrIG9mIGJ5dGVzLgotICovCi1qc3BiLkJpbmFy
eVJlYWRlci5wcm90b3R5cGUucmVhZEJ5dGVzID0gZnVuY3Rpb24oKSB7Ci0gIGdvb2cuYXNzZXJ0
cy5hc3NlcnQoCi0gICAgICB0aGlzLm5leHRXaXJlVHlwZV8gPT0ganNwYi5CaW5hcnlDb25zdGFu
dHMuV2lyZVR5cGUuREVMSU1JVEVEKTsKLSAgdmFyIGxlbmd0aCA9IHRoaXMuZGVjb2Rlcl8ucmVh
ZFVuc2lnbmVkVmFyaW50MzIoKTsKLSAgcmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEJ5dGVzKGxl
bmd0aCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSA2NC1iaXQgdmFyaW50IG9yIGZpeGVkNjQg
ZmllbGQgZnJvbSB0aGUgc3RyZWFtIGFuZCByZXR1cm5zIGl0IGFzIGEKLSAqIDgtY2hhcmFjdGVy
IFVuaWNvZGUgc3RyaW5nIGZvciB1c2UgYXMgYSBoYXNoIHRhYmxlIGtleSwgb3IgdGhyb3dzIGFu
IGVycm9yCi0gKiBpZiB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgc3RyZWFtIGlzIG5vdCBvZiB0aGUg
Y29ycmVjdCB3aXJlIHR5cGUuCi0gKgotICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGFzaCB2YWx1
ZS4KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRWYXJpbnRIYXNoNjQgPSBm
dW5jdGlvbigpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCgKLSAgICAgIHRoaXMubmV4dFdpcmVU
eXBlXyA9PSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpOwotICByZXR1cm4g
dGhpcy5kZWNvZGVyXy5yZWFkVmFyaW50SGFzaDY0KCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMg
YSA2NC1iaXQgdmFyaW50IG9yIGZpeGVkNjQgZmllbGQgZnJvbSB0aGUgc3RyZWFtIGFuZCByZXR1
cm5zIGl0IGFzIGEKLSAqIDgtY2hhcmFjdGVyIFVuaWNvZGUgc3RyaW5nIGZvciB1c2UgYXMgYSBo
YXNoIHRhYmxlIGtleSwgb3IgdGhyb3dzIGFuIGVycm9yCi0gKiBpZiB0aGUgbmV4dCBmaWVsZCBp
biB0aGUgc3RyZWFtIGlzIG5vdCBvZiB0aGUgY29ycmVjdCB3aXJlIHR5cGUuCi0gKgotICogQHJl
dHVybiB7c3RyaW5nfSBUaGUgaGFzaCB2YWx1ZS4KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJv
dG90eXBlLnJlYWRGaXhlZEhhc2g2NCA9IGZ1bmN0aW9uKCkgewotICBnb29nLmFzc2VydHMuYXNz
ZXJ0KAotICAgICAgdGhpcy5uZXh0V2lyZVR5cGVfID09IGpzcGIuQmluYXJ5Q29uc3RhbnRzLldp
cmVUeXBlLkZJWEVENjQpOwotICByZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkRml4ZWRIYXNoNjQo
KTsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBhIHBhY2tlZCBzY2FsYXIgZmllbGQgdXNpbmcgdGhl
IHN1cHBsaWVkIHJhdyByZWFkZXIgZnVuY3Rpb24uCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGRl
Y29kZU1ldGhvZAotICogQHJldHVybiB7IUFycmF5fQotICogQHByaXZhdGUKLSAqLwotanNwYi5C
aW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaWVsZF8gPSBmdW5jdGlvbihkZWNvZGVN
ZXRob2QpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCgKLSAgICAgIHRoaXMubmV4dFdpcmVUeXBl
XyA9PSBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpOwotICB2YXIgbGVu
Z3RoID0gdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpOwotICB2YXIgZW5kID0g
dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKSArIGxlbmd0aDsKLSAgdmFyIHJlc3VsdCA9IFtdOwot
ICB3aGlsZSAodGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKSA8IGVuZCkgewotICAgIC8vIFRPRE8o
YWFwcGxlYnkpOiAuY2FsbCBpcyBzbG93Ci0gICAgcmVzdWx0LnB1c2goZGVjb2RlTWV0aG9kLmNh
bGwodGhpcy5kZWNvZGVyXykpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19OwotCi0KLS8qKgot
ICogUmVhZHMgYSBwYWNrZWQgaW50MzIgZmllbGQsIHdoaWNoIGNvbnNpc3RzIG9mIGEgbGVuZ3Ro
IGhlYWRlciBhbmQgYSBsaXN0IG9mCi0gKiBzaWduZWQgdmFyaW50cy4KLSAqIEByZXR1cm4geyFB
cnJheS48bnVtYmVyPn0KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNr
ZWRJbnQzMiA9IGZ1bmN0aW9uKCkgewotICByZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRo
aXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyKTsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBh
IHBhY2tlZCBpbnQzMiBmaWVsZCwgd2hpY2ggY29uc2lzdHMgb2YgYSBsZW5ndGggaGVhZGVyIGFu
ZCBhIGxpc3Qgb2YKLSAqIHNpZ25lZCB2YXJpbnRzLiBSZXR1cm5zIGEgbGlzdCBvZiBzdHJpbmdz
LgotICogQHJldHVybiB7IUFycmF5LjxzdHJpbmc+fQotICovCi1qc3BiLkJpbmFyeVJlYWRlci5w
cm90b3R5cGUucmVhZFBhY2tlZEludDMyU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB0
aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50MzJTdHJp
bmcpOwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGEgcGFja2VkIGludDY0IGZpZWxkLCB3aGljaCBj
b25zaXN0cyBvZiBhIGxlbmd0aCBoZWFkZXIgYW5kIGEgbGlzdCBvZgotICogc2lnbmVkIHZhcmlu
dHMuCi0gKiBAcmV0dXJuIHshQXJyYXkuPG51bWJlcj59Ci0gKi8KLWpzcGIuQmluYXJ5UmVhZGVy
LnByb3RvdHlwZS5yZWFkUGFja2VkSW50NjQgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIHRoaXMu
cmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCk7Ci19Owot
Ci0KLS8qKgotICogUmVhZHMgYSBwYWNrZWQgaW50NjQgZmllbGQsIHdoaWNoIGNvbnNpc3RzIG9m
IGEgbGVuZ3RoIGhlYWRlciBhbmQgYSBsaXN0IG9mCi0gKiBzaWduZWQgdmFyaW50cy4gUmV0dXJu
cyBhIGxpc3Qgb2Ygc3RyaW5ncy4KLSAqIEByZXR1cm4geyFBcnJheS48c3RyaW5nPn0KLSAqLwot
anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRJbnQ2NFN0cmluZyA9IGZ1bmN0
aW9uKCkgewotICByZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVh
ZFNpZ25lZFZhcmludDY0U3RyaW5nKTsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBhIHBhY2tlZCB1
aW50MzIgZmllbGQsIHdoaWNoIGNvbnNpc3RzIG9mIGEgbGVuZ3RoIGhlYWRlciBhbmQgYSBsaXN0
IG9mCi0gKiB1bnNpZ25lZCB2YXJpbnRzLgotICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fQot
ICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQzMiA9IGZ1bmN0
aW9uKCkgewotICByZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVh
ZFVuc2lnbmVkVmFyaW50MzIpOwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGEgcGFja2VkIHVpbnQz
MiBmaWVsZCwgd2hpY2ggY29uc2lzdHMgb2YgYSBsZW5ndGggaGVhZGVyIGFuZCBhIGxpc3Qgb2YK
LSAqIHVuc2lnbmVkIHZhcmludHMuIFJldHVybnMgYSBsaXN0IG9mIHN0cmluZ3MuCi0gKiBAcmV0
dXJuIHshQXJyYXkuPHN0cmluZz59Ci0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5y
ZWFkUGFja2VkVWludDMyU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB0aGlzLnJlYWRQ
YWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZyk7Ci19
OwotCi0KLS8qKgotICogUmVhZHMgYSBwYWNrZWQgdWludDY0IGZpZWxkLCB3aGljaCBjb25zaXN0
cyBvZiBhIGxlbmd0aCBoZWFkZXIgYW5kIGEgbGlzdCBvZgotICogdW5zaWduZWQgdmFyaW50cy4K
LSAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJv
dG90eXBlLnJlYWRQYWNrZWRVaW50NjQgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIHRoaXMucmVh
ZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0KTsKLX07Ci0K
LQotLyoqCi0gKiBSZWFkcyBhIHBhY2tlZCB1aW50NjQgZmllbGQsIHdoaWNoIGNvbnNpc3RzIG9m
IGEgbGVuZ3RoIGhlYWRlciBhbmQgYSBsaXN0IG9mCi0gKiB1bnNpZ25lZCB2YXJpbnRzLiBSZXR1
cm5zIGEgbGlzdCBvZiBzdHJpbmdzLgotICogQHJldHVybiB7IUFycmF5LjxzdHJpbmc+fQotICov
Ci1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQ2NFN0cmluZyA9IGZ1
bmN0aW9uKCkgewotICByZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8u
cmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcpOwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGEgcGFj
a2VkIHNpbnQzMiBmaWVsZCwgd2hpY2ggY29uc2lzdHMgb2YgYSBsZW5ndGggaGVhZGVyIGFuZCBh
IGxpc3Qgb2YKLSAqIHppZ3phZyB2YXJpbnRzLgotICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+
fQotICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNpbnQzMiA9IGZ1
bmN0aW9uKCkgewotICByZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8u
cmVhZFppZ3phZ1ZhcmludDMyKTsKLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBhIHBhY2tlZCBzaW50
NjQgZmllbGQsIHdoaWNoIGNvbnNpc3RzIG9mIGEgbGVuZ3RoIGhlYWRlciBhbmQgYSBsaXN0IG9m
Ci0gKiB6aWd6YWcgdmFyaW50cy4KLSAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0KLSAqLwot
anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50NjQgPSBmdW5jdGlvbigp
IHsKLSAgcmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6
YWdWYXJpbnQ2NCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBwYWNrZWQgZml4ZWQzMiBmaWVs
ZCwgd2hpY2ggY29uc2lzdHMgb2YgYSBsZW5ndGggaGVhZGVyIGFuZCBhIGxpc3QKLSAqIG9mIHVu
c2lnbmVkIDMyLWJpdCBpbnRzLgotICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fQotICovCi1q
c3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZpeGVkMzIgPSBmdW5jdGlvbigp
IHsKLSAgcmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50
MzIpOwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGEgcGFja2VkIGZpeGVkNjQgZmllbGQsIHdoaWNo
IGNvbnNpc3RzIG9mIGEgbGVuZ3RoIGhlYWRlciBhbmQgYSBsaXN0Ci0gKiBvZiB1bnNpZ25lZCA2
NC1iaXQgaW50cy4KLSAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0KLSAqLwotanNwYi5CaW5h
cnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZDY0ID0gZnVuY3Rpb24oKSB7Ci0gIHJl
dHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0KTsKLX07
Ci0KLQotLyoqCi0gKiBSZWFkcyBhIHBhY2tlZCBzZml4ZWQzMiBmaWVsZCwgd2hpY2ggY29uc2lz
dHMgb2YgYSBsZW5ndGggaGVhZGVyIGFuZCBhIGxpc3QKLSAqIG9mIDMyLWJpdCBpbnRzLgotICog
QHJldHVybiB7IUFycmF5LjxudW1iZXI+fQotICovCi1qc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5
cGUucmVhZFBhY2tlZFNmaXhlZDMyID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB0aGlzLnJlYWRQ
YWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkSW50MzIpOwotfTsKLQotCi0vKioKLSAqIFJl
YWRzIGEgcGFja2VkIHNmaXhlZDY0IGZpZWxkLCB3aGljaCBjb25zaXN0cyBvZiBhIGxlbmd0aCBo
ZWFkZXIgYW5kIGEgbGlzdAotICogb2YgNjQtYml0IGludHMuCi0gKiBAcmV0dXJuIHshQXJyYXku
PG51bWJlcj59Ci0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2Zp
eGVkNjQgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlz
LmRlY29kZXJfLnJlYWRJbnQ2NCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBwYWNrZWQgZmxv
YXQgZmllbGQsIHdoaWNoIGNvbnNpc3RzIG9mIGEgbGVuZ3RoIGhlYWRlciBhbmQgYSBsaXN0IG9m
Ci0gKiBmbG9hdHMuCi0gKiBAcmV0dXJuIHshQXJyYXkuPG51bWJlcj59Ci0gKi8KLWpzcGIuQmlu
YXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRmxvYXQgPSBmdW5jdGlvbigpIHsKLSAgcmV0
dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRGbG9hdCk7Ci19Owot
Ci0KLS8qKgotICogUmVhZHMgYSBwYWNrZWQgZG91YmxlIGZpZWxkLCB3aGljaCBjb25zaXN0cyBv
ZiBhIGxlbmd0aCBoZWFkZXIgYW5kIGEgbGlzdCBvZgotICogZG91Ymxlcy4KLSAqIEByZXR1cm4g
eyFBcnJheS48bnVtYmVyPn0KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQ
YWNrZWREb3VibGUgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxk
Xyh0aGlzLmRlY29kZXJfLnJlYWREb3VibGUpOwotfTsKLQotCi0vKioKLSAqIFJlYWRzIGEgcGFj
a2VkIGJvb2wgZmllbGQsIHdoaWNoIGNvbnNpc3RzIG9mIGEgbGVuZ3RoIGhlYWRlciBhbmQgYSBs
aXN0IG9mCi0gKiB1bnNpZ25lZCB2YXJpbnRzLgotICogQHJldHVybiB7IUFycmF5Ljxib29sZWFu
Pn0KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRCb29sID0gZnVu
Y3Rpb24oKSB7Ci0gIHJldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5y
ZWFkQm9vbCk7Ci19OwotCi0KLS8qKgotICogUmVhZHMgYSBwYWNrZWQgZW51bSBmaWVsZCwgd2hp
Y2ggY29uc2lzdHMgb2YgYSBsZW5ndGggaGVhZGVyIGFuZCBhIGxpc3Qgb2YKLSAqIHVuc2lnbmVk
IHZhcmludHMuCi0gKiBAcmV0dXJuIHshQXJyYXkuPG51bWJlcj59Ci0gKi8KLWpzcGIuQmluYXJ5
UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRW51bSA9IGZ1bmN0aW9uKCkgewotICByZXR1cm4g
dGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEVudW0pOwotfTsKLQotCi0v
KioKLSAqIFJlYWRzIGEgcGFja2VkIHZhcmludCBoYXNoNjQgZmllbGQsIHdoaWNoIGNvbnNpc3Rz
IG9mIGEgbGVuZ3RoIGhlYWRlciBhbmQgYQotICogbGlzdCBvZiB2YXJpbnQgaGFzaDY0cy4KLSAq
IEByZXR1cm4geyFBcnJheS48c3RyaW5nPn0KLSAqLwotanNwYi5CaW5hcnlSZWFkZXIucHJvdG90
eXBlLnJlYWRQYWNrZWRWYXJpbnRIYXNoNjQgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIHRoaXMu
cmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRWYXJpbnRIYXNoNjQpOwotfTsKLQot
Ci0vKioKLSAqIFJlYWRzIGEgcGFja2VkIGZpeGVkIGhhc2g2NCBmaWVsZCwgd2hpY2ggY29uc2lz
dHMgb2YgYSBsZW5ndGggaGVhZGVyIGFuZCBhCi0gKiBsaXN0IG9mIGZpeGVkIGhhc2g2NHMuCi0g
KiBAcmV0dXJuIHshQXJyYXkuPHN0cmluZz59Ci0gKi8KLWpzcGIuQmluYXJ5UmVhZGVyLnByb3Rv
dHlwZS5yZWFkUGFja2VkRml4ZWRIYXNoNjQgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIHRoaXMu
cmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRGaXhlZEhhc2g2NCk7Ci19OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qcy9iaW5hcnkvcmVhZGVyX3Rlc3QuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS9yZWFkZXJfdGVzdC5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY3ZTVkNDU2N2QxMmFlZjk1MDhmM2Rj
YjAzMzMyYWQ3M2Y5Y2IwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL2pzL2JpbmFyeS9yZWFkZXJfdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDg3MyAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLyoqCi0gKiBAZmls
ZW92ZXJ2aWV3IFRlc3QgY2FzZXMgZm9yIGpzcGIncyBiaW5hcnkgcHJvdG9jb2wgYnVmZmVyIHJl
YWRlci4KLSAqCi0gKiBUaGVyZSBhcmUgdHdvIHBhcnRpY3VsYXIgbWFnaWMgbnVtYmVycyB0aGF0
IG5lZWQgdG8gYmUgcG9pbnRlZCBvdXQgLQotICogMl42NC0xMDI1IGlzIHRoZSBsYXJnZXN0IG51
bWJlciByZXByZXNlbnRhYmxlIGFzIGJvdGggYSBkb3VibGUgYW5kIGFuCi0gKiB1bnNpZ25lZCA2
NC1iaXQgaW50ZWdlciwgYW5kIDJeNjMtNTEzIGlzIHRoZSBsYXJnZXN0IG51bWJlciByZXByZXNl
bnRhYmxlIGFzCi0gKiBib3RoIGEgZG91YmxlIGFuZCBhIHNpZ25lZCA2NC1iaXQgaW50ZWdlci4K
LSAqCi0gKiBUZXN0IHN1aXRlIGlzIHdyaXR0ZW4gdXNpbmcgSmFzbWluZSAtLSBzZWUgaHR0cDov
L2phc21pbmUuZ2l0aHViLmlvLwotICoKLSAqIEBhdXRob3IgYWFwcGxlYnlAZ29vZ2xlLmNvbSAo
QXVzdGluIEFwcGxlYnkpCi0gKi8KLQotZ29vZy5yZXF1aXJlKCdnb29nLnRlc3RpbmcuYXNzZXJ0
cycpOwotZ29vZy5yZXF1aXJlKCdqc3BiLkJpbmFyeUNvbnN0YW50cycpOwotZ29vZy5yZXF1aXJl
KCdqc3BiLkJpbmFyeURlY29kZXInKTsKLWdvb2cucmVxdWlyZSgnanNwYi5CaW5hcnlSZWFkZXIn
KTsKLWdvb2cucmVxdWlyZSgnanNwYi5CaW5hcnlXcml0ZXInKTsKLQotCi0KLWRlc2NyaWJlKCdi
aW5hcnlSZWFkZXJUZXN0JywgZnVuY3Rpb24oKSB7Ci0gIC8qKgotICAgKiBUZXN0cyB0aGUgcmVh
ZGVyIGluc3RhbmNlIGNhY2hlLgotICAgKiBAc3VwcHJlc3Mge3Zpc2liaWxpdHl9Ci0gICAqLwot
ICBpdCgndGVzdEluc3RhbmNlQ2FjaGVzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHdyaXRlciA9
IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpOwotICAgIHZhciBkdW1teU1lc3NhZ2UgPSAvKiogQHR5
cGUgeyFqc3BiLkJpbmFyeU1lc3NhZ2V9ICovKHt9KTsKLSAgICB3cml0ZXIud3JpdGVNZXNzYWdl
KDEsIGR1bW15TWVzc2FnZSwgZ29vZy5udWxsRnVuY3Rpb24pOwotICAgIHdyaXRlci53cml0ZU1l
c3NhZ2UoMiwgZHVtbXlNZXNzYWdlLCBnb29nLm51bGxGdW5jdGlvbik7Ci0KLSAgICB2YXIgYnVm
ZmVyID0gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpOwotCi0gICAgLy8gRW1wdHkgdGhlIGluc3Rh
bmNlIGNhY2hlcy4KLSAgICBqc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXyA9IFtdOwot
Ci0gICAgLy8gQWxsb2NhdGluZyBhbmQgdGhlbiBmcmVlaW5nIHRocmVlIGRlY29kZXJzIHNob3Vs
ZCBsZWF2ZSB1cyB3aXRoIHRocmVlIGluCi0gICAgLy8gdGhlIGNhY2hlLgotCi0gICAgdmFyIGRl
Y29kZXIxID0ganNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKCk7Ci0gICAgdmFyIGRlY29kZXIyID0g
anNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKCk7Ci0gICAgdmFyIGRlY29kZXIzID0ganNwYi5CaW5h
cnlEZWNvZGVyLmFsbG9jKCk7Ci0gICAgZGVjb2RlcjEuZnJlZSgpOwotICAgIGRlY29kZXIyLmZy
ZWUoKTsKLSAgICBkZWNvZGVyMy5mcmVlKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoMywganNwYi5C
aW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDAs
IGpzcGIuQmluYXJ5UmVhZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCk7Ci0KLSAgICAvLyBBbGxv
Y2F0aW5nIGFuZCB0aGVuIGZyZWVpbmcgYSByZWFkZXIgc2hvdWxkIHJlbW92ZSBvbmUgZGVjb2Rl
ciBmcm9tIGl0cwotICAgIC8vIGNhY2hlLCBidXQgaXQgc2hvdWxkIHN0YXkgc3R1Y2sgdG8gdGhl
IHJlYWRlciBhZnRlcndhcmRzIHNpbmNlIHdlIGNhbid0Ci0gICAgLy8gaGF2ZSBhIHJlYWRlciB3
aXRob3V0IGEgZGVjb2Rlci4KLSAgICBqc3BiLkJpbmFyeVJlYWRlci5hbGxvYygpLmZyZWUoKTsK
LQotICAgIGFzc2VydEVxdWFscygyLCBqc3BiLkJpbmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8u
bGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwganNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VD
YWNoZV8ubGVuZ3RoKTsKLQotICAgIC8vIEFsbG9jYXRpbmcgYSByZWFkZXIgc2hvdWxkIHJlbW92
ZSBhIHJlYWRlciBmcm9tIHRoZSBjYWNoZS4KLSAgICB2YXIgcmVhZGVyID0ganNwYi5CaW5hcnlS
ZWFkZXIuYWxsb2MoYnVmZmVyKTsKLQotICAgIGFzc2VydEVxdWFscygyLCBqc3BiLkJpbmFyeURl
Y29kZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwganNwYi5C
aW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKTsKLQotICAgIC8vIFByb2Nlc3Npbmcg
dGhlIG1lc3NhZ2UgcmV1c2VzIHRoZSBjdXJyZW50IHJlYWRlci4KLSAgICByZWFkZXIubmV4dEZp
ZWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlYWRlci5nZXRGaWVsZE51bWJlcigpKTsKLSAg
ICByZWFkZXIucmVhZE1lc3NhZ2UoZHVtbXlNZXNzYWdlLCBmdW5jdGlvbigpIHsKLSAgICAgIGFz
c2VydEVxdWFscygwLCBqc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgpOwot
ICAgIH0pOwotCi0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2VydEVxdWFscygyLCBy
ZWFkZXIuZ2V0RmllbGROdW1iZXIoKSk7Ci0gICAgcmVhZGVyLnJlYWRNZXNzYWdlKGR1bW15TWVz
c2FnZSwgZnVuY3Rpb24oKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoMCwganNwYi5CaW5hcnlSZWFk
ZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKTsKLSAgICB9KTsKLQotICAgIGFzc2VydEVxdWFscyhm
YWxzZSwgcmVhZGVyLm5leHRGaWVsZCgpKTsKLQotICAgIGFzc2VydEVxdWFscygyLCBqc3BiLkJp
bmFyeURlY29kZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMCwg
anNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKTsKLQotICAgIC8vIEZyZWVp
bmcgdGhlIHJlYWRlciBzaG91bGQgcHV0IGl0IGJhY2sgaW50byB0aGUgY2FjaGUuCi0gICAgcmVh
ZGVyLmZyZWUoKTsKLQotICAgIGFzc2VydEVxdWFscygyLCBqc3BiLkJpbmFyeURlY29kZXIuaW5z
dGFuY2VDYWNoZV8ubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwganNwYi5CaW5hcnlSZWFk
ZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKTsKLSAgfSk7Ci0KLQotICAvKioKLSAgICogQHBhcmFt
IHtudW1iZXJ9IHgKLSAgICogQHJldHVybiB7bnVtYmVyfQotICAgKi8KLSAgZnVuY3Rpb24gdHJ1
bmNhdGUoeCkgewotICAgIHZhciB0ZW1wID0gbmV3IEZsb2F0MzJBcnJheSgxKTsKLSAgICB0ZW1w
WzBdID0geDsKLSAgICByZXR1cm4gdGVtcFswXTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFZlcmlm
aWVzIHRoYXQgbWlzdXNlIG9mIHRoZSByZWFkZXIgY2xhc3MgdHJpZ2dlcnMgYXNzZXJ0aW9ucy4K
LSAgICogQHN1cHByZXNzIHtjaGVja1R5cGVzfHZpc2liaWxpdHl9Ci0gICAqLwotICBpdCgndGVz
dFJlYWRFcnJvcnMnLCBmdW5jdGlvbigpIHsKLSAgICAvLyBDYWxsaW5nIHJlYWRNZXNzYWdlIG9u
IGEgbm9uLWRlbGltaXRlZCBmaWVsZCBzaG91bGQgdHJpZ2dlciBhbgotICAgIC8vIGFzc2VydGlv
bi4KLSAgICB2YXIgcmVhZGVyID0ganNwYi5CaW5hcnlSZWFkZXIuYWxsb2MoWzgsIDFdKTsKLSAg
ICB2YXIgZHVtbXlNZXNzYWdlID0gLyoqIEB0eXBlIHshanNwYi5CaW5hcnlNZXNzYWdlfSAqLyh7
fSk7Ci0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigp
IHsKLSAgICAgIHJlYWRlci5yZWFkTWVzc2FnZShkdW1teU1lc3NhZ2UsIGdvb2cubnVsbEZ1bmN0
aW9uKTsKLSAgICB9KTsKLQotICAgIC8vIFJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBzdHJl
YW0gc2hvdWxkIHRyaWdnZXIgYW4gYXNzZXJ0aW9uLgotICAgIHJlYWRlciA9IGpzcGIuQmluYXJ5
UmVhZGVyLmFsbG9jKFs5LCAxXSk7Ci0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2Vy
dFRocm93cyhmdW5jdGlvbigpIHtyZWFkZXIucmVhZEZpeGVkNjQoKX0pOwotCi0gICAgLy8gUmVh
ZGluZyBwYXN0IHRoZSBlbmQgb2YgYSBzdWJtZXNzYWdlIHNob3VsZCB0cmlnZ2VyIGFuIGFzc2Vy
dGlvbi4KLSAgICByZWFkZXIgPSBqc3BiLkJpbmFyeVJlYWRlci5hbGxvYyhbMTAsIDQsIDEzLCAx
LCAxLCAxXSk7Ci0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIHJlYWRlci5yZWFkTWVzc2Fn
ZShkdW1teU1lc3NhZ2UsIGZ1bmN0aW9uKCkgewotICAgICAgcmVhZGVyLm5leHRGaWVsZCgpOwot
ICAgICAgYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkge3JlYWRlci5yZWFkRml4ZWQzMigpfSk7Ci0g
ICAgfSk7Ci0KLSAgICAvLyBTa2lwcGluZyBhbiBpbnZhbGlkIGZpZWxkIHNob3VsZCB0cmlnZ2Vy
IGFuIGFzc2VydGlvbi4KLSAgICByZWFkZXIgPSBqc3BiLkJpbmFyeVJlYWRlci5hbGxvYyhbMTIs
IDFdKTsKLSAgICByZWFkZXIubmV4dFdpcmVUeXBlXyA9IDEwMDA7Ci0gICAgYXNzZXJ0VGhyb3dz
KGZ1bmN0aW9uKCkge3JlYWRlci5za2lwRmllbGQoKX0pOwotCi0gICAgLy8gUmVhZGluZyBmaWVs
ZHMgd2l0aCB0aGUgd3Jvbmcgd2lyZSB0eXBlIHNob3VsZCBhc3NlcnQuCi0gICAgcmVhZGVyID0g
anNwYi5CaW5hcnlSZWFkZXIuYWxsb2MoWzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdKTsKLSAg
ICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkge3JlYWRl
ci5yZWFkSW50MzIoKX0pOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHtyZWFkZXIucmVh
ZEludDMyU3RyaW5nKCl9KTsKLSAgICBhc3NlcnRUaHJvd3MoZnVuY3Rpb24oKSB7cmVhZGVyLnJl
YWRJbnQ2NCgpfSk7Ci0gICAgYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkge3JlYWRlci5yZWFkSW50
NjRTdHJpbmcoKX0pOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHtyZWFkZXIucmVhZFVp
bnQzMigpfSk7Ci0gICAgYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkge3JlYWRlci5yZWFkVWludDMy
U3RyaW5nKCl9KTsKLSAgICBhc3NlcnRUaHJvd3MoZnVuY3Rpb24oKSB7cmVhZGVyLnJlYWRVaW50
NjQoKX0pOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHtyZWFkZXIucmVhZFVpbnQ2NFN0
cmluZygpfSk7Ci0gICAgYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkge3JlYWRlci5yZWFkU2ludDMy
KCl9KTsKLSAgICBhc3NlcnRUaHJvd3MoZnVuY3Rpb24oKSB7cmVhZGVyLnJlYWRCb29sKCl9KTsK
LSAgICBhc3NlcnRUaHJvd3MoZnVuY3Rpb24oKSB7cmVhZGVyLnJlYWRFbnVtKCl9KTsKLQotICAg
IHJlYWRlciA9IGpzcGIuQmluYXJ5UmVhZGVyLmFsbG9jKFs4LCAxXSk7Ci0gICAgcmVhZGVyLm5l
eHRGaWVsZCgpOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHtyZWFkZXIucmVhZEZpeGVk
MzIoKX0pOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHtyZWFkZXIucmVhZEZpeGVkNjQo
KX0pOwotICAgIGFzc2VydFRocm93cyhmdW5jdGlvbigpIHtyZWFkZXIucmVhZFNmaXhlZDMyKCl9
KTsKLSAgICBhc3NlcnRUaHJvd3MoZnVuY3Rpb24oKSB7cmVhZGVyLnJlYWRTZml4ZWQ2NCgpfSk7
Ci0gICAgYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkge3JlYWRlci5yZWFkRmxvYXQoKX0pOwotICAg
IGFzc2VydFRocm93cyhmdW5jdGlvbigpIHtyZWFkZXIucmVhZERvdWJsZSgpfSk7Ci0KLSAgICBh
c3NlcnRUaHJvd3MoZnVuY3Rpb24oKSB7cmVhZGVyLnJlYWRTdHJpbmcoKX0pOwotICAgIGFzc2Vy
dFRocm93cyhmdW5jdGlvbigpIHtyZWFkZXIucmVhZEJ5dGVzKCl9KTsKLSAgfSk7Ci0KLQotICAv
KioKLSAgICogVGVzdHMgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHVuc2lnbmVkIGZpZWxkIHR5
cGVzLgotICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWFkRmllbGQKLSAgICogQHBhcmFtIHtGdW5j
dGlvbn0gd3JpdGVGaWVsZAotICAgKiBAcGFyYW0ge251bWJlcn0gZXBzaWxvbgotICAgKiBAcGFy
YW0ge251bWJlcn0gdXBwZXJMaW1pdAotICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIKLSAg
ICogQHByaXZhdGUKLSAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30KLSAgICovCi0g
IGZ1bmN0aW9uIGRvVGVzdFVuc2lnbmVkRmllbGRfKHJlYWRGaWVsZCwKLSAgICAgIHdyaXRlRmll
bGQsIGVwc2lsb24sIHVwcGVyTGltaXQsIGZpbHRlcikgewotICAgIGFzc2VydE5vdE51bGwocmVh
ZEZpZWxkKTsKLSAgICBhc3NlcnROb3ROdWxsKHdyaXRlRmllbGQpOwotCi0gICAgdmFyIHdyaXRl
ciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpOwotCi0gICAgLy8gRW5jb2RlIHplcm8gYW5kIGxp
bWl0cy4KLSAgICB3cml0ZUZpZWxkLmNhbGwod3JpdGVyLCAxLCBmaWx0ZXIoMCkpOwotICAgIHdy
aXRlRmllbGQuY2FsbCh3cml0ZXIsIDIsIGZpbHRlcihlcHNpbG9uKSk7Ci0gICAgd3JpdGVGaWVs
ZC5jYWxsKHdyaXRlciwgMywgZmlsdGVyKHVwcGVyTGltaXQpKTsKLQotICAgIC8vIEVuY29kZSBw
b3NpdGl2ZSB2YWx1ZXMuCi0gICAgZm9yICh2YXIgY3Vyc29yID0gZXBzaWxvbjsgY3Vyc29yIDwg
dXBwZXJMaW1pdDsgY3Vyc29yICo9IDEuMSkgewotICAgICAgd3JpdGVGaWVsZC5jYWxsKHdyaXRl
ciwgNCwgZmlsdGVyKGN1cnNvcikpOwotICAgIH0KLQotICAgIHZhciByZWFkZXIgPSBqc3BiLkJp
bmFyeVJlYWRlci5hbGxvYyh3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCkpOwotCi0gICAgLy8gQ2hl
Y2sgemVybyBhbmQgbGltaXRzLgotICAgIHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICBhc3NlcnRF
cXVhbHMoMSwgcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFscyhmaWx0
ZXIoMCksIHJlYWRGaWVsZC5jYWxsKHJlYWRlcikpOwotCi0gICAgcmVhZGVyLm5leHRGaWVsZCgp
OwotICAgIGFzc2VydEVxdWFscygyLCByZWFkZXIuZ2V0RmllbGROdW1iZXIoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKGZpbHRlcihlcHNpbG9uKSwgcmVhZEZpZWxkLmNhbGwocmVhZGVyKSk7Ci0KLSAg
ICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIHJlYWRlci5nZXRGaWVs
ZE51bWJlcigpKTsKLSAgICBhc3NlcnRFcXVhbHMoZmlsdGVyKHVwcGVyTGltaXQpLCByZWFkRmll
bGQuY2FsbChyZWFkZXIpKTsKLQotICAgIC8vIENoZWNrIHBvc2l0aXZlIHZhbHVlcy4KLSAgICBm
b3IgKHZhciBjdXJzb3IgPSBlcHNpbG9uOyBjdXJzb3IgPCB1cHBlckxpbWl0OyBjdXJzb3IgKj0g
MS4xKSB7Ci0gICAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgICBpZiAoNCAhPSByZWFkZXIu
Z2V0RmllbGROdW1iZXIoKSkgdGhyb3cgJ2ZhaWwhJzsKLSAgICAgIGlmIChmaWx0ZXIoY3Vyc29y
KSAhPSByZWFkRmllbGQuY2FsbChyZWFkZXIpKSB0aHJvdyAnZmFpbCEnOwotICAgIH0KLSAgfTsK
LQotCi0gIC8qKgotICAgKiBUZXN0cyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgb2Ygc2lnbmVkIGZp
ZWxkIHR5cGVzLgotICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWFkRmllbGQKLSAgICogQHBhcmFt
IHtGdW5jdGlvbn0gd3JpdGVGaWVsZAotICAgKiBAcGFyYW0ge251bWJlcn0gZXBzaWxvbgotICAg
KiBAcGFyYW0ge251bWJlcn0gbG93ZXJMaW1pdAotICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXJM
aW1pdAotICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIKLSAgICogQHByaXZhdGUKLSAgICog
QHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30KLSAgICovCi0gIGZ1bmN0aW9uIGRvVGVzdFNp
Z25lZEZpZWxkXyhyZWFkRmllbGQsCi0gICAgICB3cml0ZUZpZWxkLCBlcHNpbG9uLCBsb3dlckxp
bWl0LCB1cHBlckxpbWl0LCBmaWx0ZXIpIHsKLSAgICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmlu
YXJ5V3JpdGVyKCk7Ci0KLSAgICAvLyBFbmNvZGUgemVybyBhbmQgbGltaXRzLgotICAgIHdyaXRl
RmllbGQuY2FsbCh3cml0ZXIsIDEsIGZpbHRlcihsb3dlckxpbWl0KSk7Ci0gICAgd3JpdGVGaWVs
ZC5jYWxsKHdyaXRlciwgMiwgZmlsdGVyKC1lcHNpbG9uKSk7Ci0gICAgd3JpdGVGaWVsZC5jYWxs
KHdyaXRlciwgMywgZmlsdGVyKDApKTsKLSAgICB3cml0ZUZpZWxkLmNhbGwod3JpdGVyLCA0LCBm
aWx0ZXIoZXBzaWxvbikpOwotICAgIHdyaXRlRmllbGQuY2FsbCh3cml0ZXIsIDUsIGZpbHRlcih1
cHBlckxpbWl0KSk7Ci0KLSAgICB2YXIgaW5wdXRWYWx1ZXMgPSBbXTsKLQotICAgIC8vIEVuY29k
ZSBuZWdhdGl2ZSB2YWx1ZXMuCi0gICAgZm9yICh2YXIgY3Vyc29yID0gbG93ZXJMaW1pdDsgY3Vy
c29yIDwgLWVwc2lsb247IGN1cnNvciAvPSAxLjEpIHsKLSAgICAgIHZhciB2YWwgPSBmaWx0ZXIo
Y3Vyc29yKTsKLSAgICAgIHdyaXRlRmllbGQuY2FsbCh3cml0ZXIsIDYsIHZhbCk7Ci0gICAgICBp
bnB1dFZhbHVlcy5wdXNoKHsKLSAgICAgICAgZmllbGROdW1iZXI6IDYsCi0gICAgICAgIHZhbHVl
OiB2YWwKLSAgICAgIH0pOwotICAgIH0KLQotICAgIC8vIEVuY29kZSBwb3NpdGl2ZSB2YWx1ZXMu
Ci0gICAgZm9yICh2YXIgY3Vyc29yID0gZXBzaWxvbjsgY3Vyc29yIDwgdXBwZXJMaW1pdDsgY3Vy
c29yICo9IDEuMSkgewotICAgICAgdmFyIHZhbCA9IGZpbHRlcihjdXJzb3IpOwotICAgICAgd3Jp
dGVGaWVsZC5jYWxsKHdyaXRlciwgNywgdmFsKTsKLSAgICAgIGlucHV0VmFsdWVzLnB1c2goewot
ICAgICAgICBmaWVsZE51bWJlcjogNywKLSAgICAgICAgdmFsdWU6IHZhbAotICAgICAgfSk7Ci0g
ICAgfQotCi0gICAgdmFyIHJlYWRlciA9IGpzcGIuQmluYXJ5UmVhZGVyLmFsbG9jKHdyaXRlci5n
ZXRSZXN1bHRCdWZmZXIoKSk7Ci0KLSAgICAvLyBDaGVjayB6ZXJvIGFuZCBsaW1pdHMuCi0gICAg
cmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2VydEVxdWFscygxLCByZWFkZXIuZ2V0RmllbGRO
dW1iZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGZpbHRlcihsb3dlckxpbWl0KSwgcmVhZEZpZWxk
LmNhbGwocmVhZGVyKSk7Ci0KLSAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKDIsIHJlYWRlci5nZXRGaWVsZE51bWJlcigpKTsKLSAgICBhc3NlcnRFcXVhbHMoZmlsdGVy
KC1lcHNpbG9uKSwgcmVhZEZpZWxkLmNhbGwocmVhZGVyKSk7Ci0KLSAgICByZWFkZXIubmV4dEZp
ZWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDMsIHJlYWRlci5nZXRGaWVsZE51bWJlcigpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoZmlsdGVyKDApLCByZWFkRmllbGQuY2FsbChyZWFkZXIpKTsKLQotICAg
IHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoNCwgcmVhZGVyLmdldEZpZWxk
TnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFscyhmaWx0ZXIoZXBzaWxvbiksIHJlYWRGaWVsZC5j
YWxsKHJlYWRlcikpOwotCi0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2VydEVxdWFs
cyg1LCByZWFkZXIuZ2V0RmllbGROdW1iZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGZpbHRlcih1
cHBlckxpbWl0KSwgcmVhZEZpZWxkLmNhbGwocmVhZGVyKSk7Ci0KLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGlucHV0VmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgZXhwZWN0ZWQgPSBp
bnB1dFZhbHVlc1tpXTsKLSAgICAgIHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICAgIGFzc2VydEVx
dWFscyhleHBlY3RlZC5maWVsZE51bWJlciwgcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpOwotICAg
ICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnZhbHVlLCByZWFkRmllbGQuY2FsbChyZWFkZXIpKTsK
LSAgICB9Ci0gIH07Ci0KLQotICAvKioKLSAgICogVGVzdHMgZmllbGRzIHRoYXQgdXNlIHZhcmlu
dCBlbmNvZGluZy4KLSAgICovCi0gIGl0KCd0ZXN0VmFyaW50RmllbGRzJywgZnVuY3Rpb24oKSB7
Ci0gICAgYXNzZXJ0Tm90TnVsbChqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFVpbnQz
Mik7Ci0gICAgYXNzZXJ0Tm90TnVsbChqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUud3JpdGVV
aW50MzIpOwotICAgIGFzc2VydE5vdE51bGwoanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJl
YWRVaW50NjQpOwotICAgIGFzc2VydE5vdE51bGwoanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBl
LndyaXRlVWludDY0KTsKLSAgICBhc3NlcnROb3ROdWxsKGpzcGIuQmluYXJ5UmVhZGVyLnByb3Rv
dHlwZS5yZWFkQm9vbCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChqc3BiLkJpbmFyeVJlYWRlci5wcm90
b3R5cGUud3JpdGVCb29sKTsKLSAgICBkb1Rlc3RVbnNpZ25lZEZpZWxkXygKLSAgICAgICAganNw
Yi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50MzIsCi0gICAgICAgIGpzcGIuQmluYXJ5
V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMiwKLSAgICAgICAgMSwgTWF0aC5wb3coMiwgMzIp
IC0gMSwgTWF0aC5yb3VuZCk7Ci0KLSAgICBkb1Rlc3RVbnNpZ25lZEZpZWxkXygKLSAgICAgICAg
anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50NjQsCi0gICAgICAgIGpzcGIuQmlu
YXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQ2NCwKLSAgICAgICAgMSwgTWF0aC5wb3coMiwg
NjQpIC0gMTAyNSwgTWF0aC5yb3VuZCk7Ci0KLSAgICBkb1Rlc3RTaWduZWRGaWVsZF8oCi0gICAg
ICAgIGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50MzIsCi0gICAgICAgIGpzcGIu
QmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDMyLAotICAgICAgICAxLCAtTWF0aC5wb3co
MiwgMzEpLCBNYXRoLnBvdygyLCAzMSkgLSAxLCBNYXRoLnJvdW5kKTsKLQotICAgIGRvVGVzdFNp
Z25lZEZpZWxkXygKLSAgICAgICAganNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2
NCwKLSAgICAgICAganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50NjQsCi0gICAg
ICAgIDEsIC1NYXRoLnBvdygyLCA2MyksIE1hdGgucG93KDIsIDYzKSAtIDUxMywgTWF0aC5yb3Vu
ZCk7Ci0KLSAgICBkb1Rlc3RTaWduZWRGaWVsZF8oCi0gICAgICAgIGpzcGIuQmluYXJ5UmVhZGVy
LnByb3RvdHlwZS5yZWFkRW51bSwKLSAgICAgICAganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBl
LndyaXRlRW51bSwKLSAgICAgICAgMSwgLU1hdGgucG93KDIsIDMxKSwgTWF0aC5wb3coMiwgMzEp
IC0gMSwgTWF0aC5yb3VuZCk7Ci0KLSAgICBkb1Rlc3RVbnNpZ25lZEZpZWxkXygKLSAgICAgICAg
anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRCb29sLAotICAgICAgICBqc3BiLkJpbmFy
eVdyaXRlci5wcm90b3R5cGUud3JpdGVCb29sLAotICAgICAgICAxLCAxLCBmdW5jdGlvbih4KSB7
IHJldHVybiAhIXg7IH0pOwotICB9KTsKLQotCi0gIC8qKgotICAgKiBUZXN0cyA2NC1iaXQgZmll
bGRzIHRoYXQgYXJlIGhhbmRsZWQgYXMgc3RyaW5ncy4KLSAgICovCi0gIGl0KCd0ZXN0U3RyaW5n
SW50NjRGaWVsZHMnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmlu
YXJ5V3JpdGVyKCk7Ci0KLSAgICB2YXIgdGVzdFNpZ25lZERhdGEgPSBbCi0gICAgICAnMjczMDUz
ODI1MjIwNzgwMTc3NicsCi0gICAgICAnLTI2ODg0NzA5OTQ4NDQ2MDQ1NjAnLAotICAgICAgJzMz
OTg1Mjk3Nzk0ODY1MzYzNTknLAotICAgICAgJzM1Njg1Nzc0MTE2Mjc5NzEwMDAnLAotICAgICAg
JzI3MjQ3NzE4ODg0NzQ4NDkwMCcsCi0gICAgICAnLTY2NDkwNTg3MTQwODYxNTgxODgnLAotICAg
ICAgJy03Njk1MjU0NzY1NzEyMDYwODA2JywKLSAgICAgICctNDUyNTU0MTQzODAzNzEwNDAyOScs
Ci0gICAgICAnLTQ5OTM3MDY1Mzg4MzY1MDg1NjgnLAotICAgICAgJzQ5OTAxNjAzMjE4OTM3Mjkx
MzgnCi0gICAgXTsKLSAgICB2YXIgdGVzdFVuc2lnbmVkRGF0YSA9IFsKLSAgICAgICc3ODIyNzMy
NjMwMjQxNjk0ODgyJywKLSAgICAgICc2NzUzNjAyOTcxOTE2Njg3MzUyJywKLSAgICAgICcyMzk5
OTM1MDc1MjQ0NDQyMTE2JywKLSAgICAgICc4NzI0MjkyNTY3MzI1MzM4ODY3JywKLSAgICAgICcx
Njk0ODc4NDgwMjYyNTY5NjU4NCcsCi0gICAgICAnNDEzNjI3NTkwODUxNjA2NjkzNCcsCi0gICAg
ICAnMzU3NTM4ODM0Njc5MzcwMDM2NCcsCi0gICAgICAnNTE2NzE0MjAyODM3OTI1OTQ2MScsCi0g
ICAgICAnMTU1NzU3Mzk0ODY4OTczNzY5OScsCi0gICAgICAnMTcxMDA3MjUyODA4MTI1NDg1Njcn
Ci0gICAgXTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdFNpZ25lZERhdGEubGVuZ3Ro
OyBpKyspIHsKLSAgICAgIHdyaXRlci53cml0ZUludDY0U3RyaW5nKDIgKiBpICsgMSwgdGVzdFNp
Z25lZERhdGFbaV0pOwotICAgICAgd3JpdGVyLndyaXRlVWludDY0U3RyaW5nKDIgKiBpICsgMiwg
dGVzdFVuc2lnbmVkRGF0YVtpXSk7Ci0gICAgfQotCi0gICAgdmFyIHJlYWRlciA9IGpzcGIuQmlu
YXJ5UmVhZGVyLmFsbG9jKHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKSk7Ci0KLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRlc3RTaWduZWREYXRhLmxlbmd0aDsgaSsrKSB7Ci0gICAgICByZWFkZXIu
bmV4dEZpZWxkKCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMiAqIGkgKyAxLCByZWFkZXIuZ2V0Rmll
bGROdW1iZXIoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHModGVzdFNpZ25lZERhdGFbaV0sIHJlYWRl
ci5yZWFkSW50NjRTdHJpbmcoKSk7Ci0gICAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgICBh
c3NlcnRFcXVhbHMoMiAqIGkgKyAyLCByZWFkZXIuZ2V0RmllbGROdW1iZXIoKSk7Ci0gICAgICBh
c3NlcnRFcXVhbHModGVzdFVuc2lnbmVkRGF0YVtpXSwgcmVhZGVyLnJlYWRVaW50NjRTdHJpbmco
KSk7Ci0gICAgfQotICB9KTsKLQotCi0gIC8qKgotICAgKiBUZXN0cyBmaWVsZHMgdGhhdCB1c2Ug
emlnemFnIGVuY29kaW5nLgotICAgKi8KLSAgaXQoJ3Rlc3RaaWd6YWdGaWVsZHMnLCBmdW5jdGlv
bigpIHsKLSAgICBkb1Rlc3RTaWduZWRGaWVsZF8oCi0gICAgICAgIGpzcGIuQmluYXJ5UmVhZGVy
LnByb3RvdHlwZS5yZWFkU2ludDMyLAotICAgICAgICBqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5
cGUud3JpdGVTaW50MzIsCi0gICAgICAgIDEsIC1NYXRoLnBvdygyLCAzMSksIE1hdGgucG93KDIs
IDMxKSAtIDEsIE1hdGgucm91bmQpOwotCi0gICAgZG9UZXN0U2lnbmVkRmllbGRfKAotICAgICAg
ICBqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNpbnQ2NCwKLSAgICAgICAganNwYi5C
aW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludDY0LAotICAgICAgICAxLCAtTWF0aC5wb3co
MiwgNjMpLCBNYXRoLnBvdygyLCA2MykgLSA1MTMsIE1hdGgucm91bmQpOwotICB9KTsKLQotCi0g
IC8qKgotICAgKiBUZXN0cyBmaWVsZHMgdGhhdCB1c2UgZml4ZWQtbGVuZ3RoIGVuY29kaW5nLgot
ICAgKi8KLSAgaXQoJ3Rlc3RGaXhlZEZpZWxkcycsIGZ1bmN0aW9uKCkgewotICAgIGRvVGVzdFVu
c2lnbmVkRmllbGRfKAotICAgICAgICBqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZp
eGVkMzIsCi0gICAgICAgIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpeGVkMzIs
Ci0gICAgICAgIDEsIE1hdGgucG93KDIsIDMyKSAtIDEsIE1hdGgucm91bmQpOwotCi0gICAgZG9U
ZXN0VW5zaWduZWRGaWVsZF8oCi0gICAgICAgIGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5y
ZWFkRml4ZWQ2NCwKLSAgICAgICAganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4
ZWQ2NCwKLSAgICAgICAgMSwgTWF0aC5wb3coMiwgNjQpIC0gMTAyNSwgTWF0aC5yb3VuZCk7Ci0K
LSAgICBkb1Rlc3RTaWduZWRGaWVsZF8oCi0gICAgICAgIGpzcGIuQmluYXJ5UmVhZGVyLnByb3Rv
dHlwZS5yZWFkU2ZpeGVkMzIsCi0gICAgICAgIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53
cml0ZVNmaXhlZDMyLAotICAgICAgICAxLCAtTWF0aC5wb3coMiwgMzEpLCBNYXRoLnBvdygyLCAz
MSkgLSAxLCBNYXRoLnJvdW5kKTsKLQotICAgIGRvVGVzdFNpZ25lZEZpZWxkXygKLSAgICAgICAg
anNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTZml4ZWQ2NCwKLSAgICAgICAganNwYi5C
aW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ZpeGVkNjQsCi0gICAgICAgIDEsIC1NYXRoLnBv
dygyLCA2MyksIE1hdGgucG93KDIsIDYzKSAtIDUxMywgTWF0aC5yb3VuZCk7Ci0gIH0pOwotCi0K
LSAgLyoqCi0gICAqIFRlc3RzIGZsb2F0aW5nIHBvaW50IGZpZWxkcy4KLSAgICovCi0gIGl0KCd0
ZXN0RmxvYXRGaWVsZHMnLCBmdW5jdGlvbigpIHsKLSAgICBkb1Rlc3RTaWduZWRGaWVsZF8oCi0g
ICAgICAgIGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkRmxvYXQsCi0gICAgICAgIGpz
cGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZsb2F0LAotICAgICAgICBqc3BiLkJpbmFy
eUNvbnN0YW50cy5GTE9BVDMyX01JTiwKLSAgICAgICAgLWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZM
T0FUMzJfTUFYLAotICAgICAgICBqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWCwKLSAg
ICAgICAgdHJ1bmNhdGUpOwotCi0gICAgZG9UZXN0U2lnbmVkRmllbGRfKAotICAgICAgICBqc3Bi
LkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZERvdWJsZSwKLSAgICAgICAganNwYi5CaW5hcnlX
cml0ZXIucHJvdG90eXBlLndyaXRlRG91YmxlLAotICAgICAgICBqc3BiLkJpbmFyeUNvbnN0YW50
cy5GTE9BVDY0X0VQUyAqIDEwLAotICAgICAgICAtanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2
NF9NSU4sCi0gICAgICAgIGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUlOLAotICAgICAg
ICBmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9KTsKLSAgfSk7Ci0KLQotICAvKioKLSAgICogVGVz
dHMgbGVuZ3RoLWRlbGltaXRlZCBzdHJpbmcgZmllbGRzLgotICAgKi8KLSAgaXQoJ3Rlc3RTdHJp
bmdGaWVsZHMnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgczEgPSAnVGhlIHF1aWNrIGJyb3duIGZv
eCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4nOwotICAgIHZhciBzMiA9ICfkurrkurrnlJ/ogIzo
h6rnlLHvvIzlnKjlsIrlmrTlkozmrIrliKnkuIrkuIDlvovlubPnrYnjgIInOwotCi0gICAgdmFy
IHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpOwotCi0gICAgd3JpdGVyLndyaXRlU3Ry
aW5nKDEsIHMxKTsKLSAgICB3cml0ZXIud3JpdGVTdHJpbmcoMiwgczIpOwotCi0gICAgdmFyIHJl
YWRlciA9IGpzcGIuQmluYXJ5UmVhZGVyLmFsbG9jKHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKSk7
Ci0KLSAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlYWRlci5n
ZXRGaWVsZE51bWJlcigpKTsKLSAgICBhc3NlcnRFcXVhbHMoczEsIHJlYWRlci5yZWFkU3RyaW5n
KCkpOwotCi0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2VydEVxdWFscygyLCByZWFk
ZXIuZ2V0RmllbGROdW1iZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHMyLCByZWFkZXIucmVhZFN0
cmluZygpKTsKLSAgfSk7Ci0KLQotICAvKioKLSAgICogVGVzdHMgbGVuZ3RoLWRlbGltaXRlZCBi
eXRlIGZpZWxkcy4KLSAgICovCi0gIGl0KCd0ZXN0Qnl0ZUZpZWxkcycsIGZ1bmN0aW9uKCkgewot
ICAgIHZhciBtZXNzYWdlID0gW107Ci0gICAgdmFyIGxvd2VyTGltaXQgPSAxOwotICAgIHZhciB1
cHBlckxpbWl0ID0gMjU2OwotICAgIHZhciBzY2FsZSA9IDEuMTsKLQotICAgIHZhciB3cml0ZXIg
PSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTsKLQotICAgIGZvciAodmFyIGN1cnNvciA9IGxvd2Vy
TGltaXQ7IGN1cnNvciA8IHVwcGVyTGltaXQ7IGN1cnNvciAqPSAxLjEpIHsKLSAgICAgIHZhciBs
ZW4gPSBNYXRoLnJvdW5kKGN1cnNvcik7Ci0gICAgICB2YXIgYnl0ZXMgPSBbXTsKLSAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGJ5dGVzLnB1c2goaSAlIDI1Nik7Ci0KLSAgICAg
IHdyaXRlci53cml0ZUJ5dGVzKGxlbiwgYnl0ZXMpOwotICAgIH0KLQotICAgIHZhciByZWFkZXIg
PSBqc3BiLkJpbmFyeVJlYWRlci5hbGxvYyh3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCkpOwotCi0g
ICAgZm9yICh2YXIgY3Vyc29yID0gbG93ZXJMaW1pdDsgcmVhZGVyLm5leHRGaWVsZCgpOyBjdXJz
b3IgKj0gMS4xKSB7Ci0gICAgICB2YXIgbGVuID0gTWF0aC5yb3VuZChjdXJzb3IpOwotICAgICAg
aWYgKGxlbiAhPSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkgdGhyb3cgJ2ZhaWwhJzsKLQotICAg
ICAgdmFyIGJ5dGVzID0gcmVhZGVyLnJlYWRCeXRlcygpOwotICAgICAgaWYgKGxlbiAhPSBieXRl
cy5sZW5ndGgpIHRocm93ICdmYWlsISc7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVz
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChpICUgMjU2ICE9IGJ5dGVzW2ldKSB0aHJvdyAn
ZmFpbCEnOwotICAgICAgfQotICAgIH0KLSAgfSk7Ci0KLQotICAvKioKLSAgICogVGVzdHMgbmVz
dGVkIG1lc3NhZ2VzLgotICAgKi8KLSAgaXQoJ3Rlc3ROZXN0aW5nJywgZnVuY3Rpb24oKSB7Ci0g
ICAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpOwotICAgIHZhciBkdW1teU1l
c3NhZ2UgPSAvKiogQHR5cGUgeyFqc3BiLkJpbmFyeU1lc3NhZ2V9ICovKHt9KTsKLQotICAgIHdy
aXRlci53cml0ZUludDMyKDEsIDEwMCk7Ci0KLSAgICAvLyBBZGQgb25lIG1lc3NhZ2Ugd2l0aCAz
IGludCBmaWVsZHMuCi0gICAgd3JpdGVyLndyaXRlTWVzc2FnZSgyLCBkdW1teU1lc3NhZ2UsIGZ1
bmN0aW9uKCkgewotICAgICAgd3JpdGVyLndyaXRlSW50MzIoMywgMzAwKTsKLSAgICAgIHdyaXRl
ci53cml0ZUludDMyKDQsIDQwMCk7Ci0gICAgICB3cml0ZXIud3JpdGVJbnQzMig1LCA1MDApOwot
ICAgIH0pOwotCi0gICAgLy8gQWRkIG9uZSBlbXB0eSBtZXNzYWdlLgotICAgIHdyaXRlci53cml0
ZU1lc3NhZ2UoNiwgZHVtbXlNZXNzYWdlLCBnb29nLm51bGxGdW5jdGlvbik7Ci0KLSAgICB3cml0
ZXIud3JpdGVJbnQzMig3LCA3MDApOwotCi0gICAgdmFyIHJlYWRlciA9IGpzcGIuQmluYXJ5UmVh
ZGVyLmFsbG9jKHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSBv
dXRlcm1vc3QgbWVzc2FnZS4KLQotICAgIHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICBhc3NlcnRF
cXVhbHMoMSwgcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFscygxMDAs
IHJlYWRlci5yZWFkSW50MzIoKSk7Ci0KLSAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDIsIHJlYWRlci5nZXRGaWVsZE51bWJlcigpKTsKLSAgICByZWFkZXIucmVhZE1l
c3NhZ2UoZHVtbXlNZXNzYWdlLCBmdW5jdGlvbigpIHsKLSAgICAgIC8vIFZhbGlkYXRlIGVtYmVk
ZGVkIG1lc3NhZ2UgMS4KLSAgICAgIHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICAgIGFzc2VydEVx
dWFscygzLCByZWFkZXIuZ2V0RmllbGROdW1iZXIoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMzAw
LCByZWFkZXIucmVhZEludDMyKCkpOwotCi0gICAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAg
ICBhc3NlcnRFcXVhbHMoNCwgcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpOwotICAgICAgYXNzZXJ0
RXF1YWxzKDQwMCwgcmVhZGVyLnJlYWRJbnQzMigpKTsKLQotICAgICAgcmVhZGVyLm5leHRGaWVs
ZCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKDUsIHJlYWRlci5nZXRGaWVsZE51bWJlcigpKTsKLSAg
ICAgIGFzc2VydEVxdWFscyg1MDAsIHJlYWRlci5yZWFkSW50MzIoKSk7Ci0KLSAgICAgIGFzc2Vy
dEVxdWFscyhmYWxzZSwgcmVhZGVyLm5leHRGaWVsZCgpKTsKLSAgICB9KTsKLQotICAgIHJlYWRl
ci5uZXh0RmllbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoNiwgcmVhZGVyLmdldEZpZWxkTnVtYmVy
KCkpOwotICAgIHJlYWRlci5yZWFkTWVzc2FnZShkdW1teU1lc3NhZ2UsIGZ1bmN0aW9uKCkgewot
ICAgICAgLy8gVmFsaWRhdGUgZW1iZWRkZWQgbWVzc2FnZSAyLgotCi0gICAgICBhc3NlcnRFcXVh
bHMoZmFsc2UsIHJlYWRlci5uZXh0RmllbGQoKSk7Ci0gICAgfSk7Ci0KLSAgICByZWFkZXIubmV4
dEZpZWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDcsIHJlYWRlci5nZXRGaWVsZE51bWJlcigpKTsK
LSAgICBhc3NlcnRFcXVhbHMoNzAwLCByZWFkZXIucmVhZEludDMyKCkpOwotCi0gICAgYXNzZXJ0
RXF1YWxzKGZhbHNlLCByZWFkZXIubmV4dEZpZWxkKCkpOwotICB9KTsKLQotICAvKioKLSAgICog
VGVzdHMgc2tpcHBpbmcgZmllbGRzIG9mIGVhY2ggdHlwZSBieSBpbnRlcmxlYXZpbmcgdGhlbSB3
aXRoIHNlbnRpbmVsCi0gICAqIHZhbHVlcyBhbmQgc2tpcHBpbmcgZXZlcnl0aGluZyB0aGF0J3Mg
bm90IGEgc2VudGluZWwuCi0gICAqLwotICBpdCgndGVzdFNraXBGaWVsZCcsIGZ1bmN0aW9uKCkg
ewotICAgIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTsKLQotICAgIHZhciBz
ZW50aW5lbCA9IDEyMzQ1Njc4OTsKLQotICAgIC8vIFdyaXRlIHZhcmludCBmaWVsZHMgb2YgZGlm
ZmVyZW50IHNpemVzLgotICAgIHdyaXRlci53cml0ZUludDMyKDEsIHNlbnRpbmVsKTsKLSAgICB3
cml0ZXIud3JpdGVJbnQzMigxLCAxKTsKLSAgICB3cml0ZXIud3JpdGVJbnQzMigxLCAxMDAwKTsK
LSAgICB3cml0ZXIud3JpdGVJbnQzMigxLCAxMDAwMDAwKTsKLSAgICB3cml0ZXIud3JpdGVJbnQz
MigxLCAxMDAwMDAwMDAwKTsKLQotICAgIC8vIFdyaXRlIGZpeGVkIDY0LWJpdCBlbmNvZGVkIGZp
ZWxkcy4KLSAgICB3cml0ZXIud3JpdGVJbnQzMigyLCBzZW50aW5lbCk7Ci0gICAgd3JpdGVyLndy
aXRlRG91YmxlKDIsIDEpOwotICAgIHdyaXRlci53cml0ZUZpeGVkNjQoMiwgMSk7Ci0gICAgd3Jp
dGVyLndyaXRlU2ZpeGVkNjQoMiwgMSk7Ci0KLSAgICAvLyBXcml0ZSBmaXhlZCAzMi1iaXQgZW5j
b2RlZCBmaWVsZHMuCi0gICAgd3JpdGVyLndyaXRlSW50MzIoMywgc2VudGluZWwpOwotICAgIHdy
aXRlci53cml0ZUZsb2F0KDMsIDEpOwotICAgIHdyaXRlci53cml0ZUZpeGVkMzIoMywgMSk7Ci0g
ICAgd3JpdGVyLndyaXRlU2ZpeGVkMzIoMywgMSk7Ci0KLSAgICAvLyBXcml0ZSBkZWxpbWl0ZWQg
ZmllbGRzLgotICAgIHdyaXRlci53cml0ZUludDMyKDQsIHNlbnRpbmVsKTsKLSAgICB3cml0ZXIu
d3JpdGVCeXRlcyg0LCBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdKTsKLSAgICB3cml0
ZXIud3JpdGVTdHJpbmcoNCwgJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6
eSBkb2cnKTsKLQotICAgIC8vIFdyaXRlIGEgZ3JvdXAgd2l0aCBhIG5lc3RlZCBncm91cCBpbnNp
ZGUuCi0gICAgd3JpdGVyLndyaXRlSW50MzIoNSwgc2VudGluZWwpOwotICAgIHZhciBkdW1teU1l
c3NhZ2UgPSAvKiogQHR5cGUgeyFqc3BiLkJpbmFyeU1lc3NhZ2V9ICovKHt9KTsKLSAgICB3cml0
ZXIud3JpdGVHcm91cCg1LCBkdW1teU1lc3NhZ2UsIGZ1bmN0aW9uKCkgewotICAgICAgd3JpdGVy
LndyaXRlSW50NjQoNDIsIDQyKTsKLSAgICAgIHdyaXRlci53cml0ZUdyb3VwKDYsIGR1bW15TWVz
c2FnZSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHdyaXRlci53cml0ZUludDY0KDg0LCA0Mik7Ci0g
ICAgICB9KTsKLSAgICB9KTsKLQotICAgIC8vIFdyaXRlIGZpbmFsIHNlbnRpbmVsLgotICAgIHdy
aXRlci53cml0ZUludDMyKDYsIHNlbnRpbmVsKTsKLQotICAgIHZhciByZWFkZXIgPSBqc3BiLkJp
bmFyeVJlYWRlci5hbGxvYyh3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCkpOwotCi0gICAgZnVuY3Rp
b24gc2tpcChmaWVsZCwgY291bnQpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgewotICAgICAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgICAgIGlmIChmaWVsZCAh
PSByZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkgdGhyb3cgJ2ZhaWwhJzsKLSAgICAgICAgcmVhZGVy
LnNraXBGaWVsZCgpOwotICAgICAgfQotICAgIH0KLQotICAgIHJlYWRlci5uZXh0RmllbGQoKTsK
LSAgICBhc3NlcnRFcXVhbHMoMSwgcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpOwotICAgIGFzc2Vy
dEVxdWFscyhzZW50aW5lbCwgcmVhZGVyLnJlYWRJbnQzMigpKTsKLSAgICBza2lwKDEsIDQpOwot
Ci0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2VydEVxdWFscygyLCByZWFkZXIuZ2V0
RmllbGROdW1iZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNlbnRpbmVsLCByZWFkZXIucmVhZElu
dDMyKCkpOwotICAgIHNraXAoMiwgMyk7Ci0KLSAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKDMsIHJlYWRlci5nZXRGaWVsZE51bWJlcigpKTsKLSAgICBhc3NlcnRFcXVh
bHMoc2VudGluZWwsIHJlYWRlci5yZWFkSW50MzIoKSk7Ci0gICAgc2tpcCgzLCAzKTsKLQotICAg
IHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoNCwgcmVhZGVyLmdldEZpZWxk
TnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFscyhzZW50aW5lbCwgcmVhZGVyLnJlYWRJbnQzMigp
KTsKLSAgICBza2lwKDQsIDIpOwotCi0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2Vy
dEVxdWFscyg1LCByZWFkZXIuZ2V0RmllbGROdW1iZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNl
bnRpbmVsLCByZWFkZXIucmVhZEludDMyKCkpOwotICAgIHNraXAoNSwgMSk7Ci0KLSAgICByZWFk
ZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDYsIHJlYWRlci5nZXRGaWVsZE51bWJl
cigpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2VudGluZWwsIHJlYWRlci5yZWFkSW50MzIoKSk7Ci0g
IH0pOwotCi0KLSAgLyoqCi0gICAqIFRlc3RzIHBhY2tlZCBmaWVsZHMuCi0gICAqLwotICBpdCgn
dGVzdFBhY2tlZEZpZWxkcycsIGZ1bmN0aW9uKCkgewotICAgIHZhciB3cml0ZXIgPSBuZXcganNw
Yi5CaW5hcnlXcml0ZXIoKTsKLQotICAgIHZhciBzZW50aW5lbCA9IDEyMzQ1Njc4OTsKLQotICAg
IHZhciB1bnNpZ25lZERhdGEgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdOwotICAg
IHZhciBzaWduZWREYXRhID0gWy0xLCAyLCAtMywgNCwgLTUsIDYsIC03LCA4LCAtOSwgMTBdOwot
ICAgIHZhciBmbG9hdERhdGEgPSBbMS4xLCAyLjIsIDMuMywgNC40LCA1LjUsIDYuNiwgNy43LCA4
LjgsIDkuOSwgMTAuMTBdOwotICAgIHZhciBkb3VibGVEYXRhID0gWzEuMSwgMi4yLCAzLjMsIDQu
NCwgNS41LCA2LjYsIDcuNywgOC44LCA5LjksIDEwLjEwXTsKLSAgICB2YXIgYm9vbERhdGEgPSBb
dHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdOwotCi0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbG9hdERhdGEubGVuZ3RoOyBpKyspIHsKLSAgICAgIGZs
b2F0RGF0YVtpXSA9IHRydW5jYXRlKGZsb2F0RGF0YVtpXSk7Ci0gICAgfQotCi0gICAgd3JpdGVy
LndyaXRlSW50MzIoMSwgc2VudGluZWwpOwotCi0gICAgd3JpdGVyLndyaXRlUGFja2VkSW50MzIo
Miwgc2lnbmVkRGF0YSk7Ci0gICAgd3JpdGVyLndyaXRlUGFja2VkSW50NjQoMiwgc2lnbmVkRGF0
YSk7Ci0gICAgd3JpdGVyLndyaXRlUGFja2VkVWludDMyKDIsIHVuc2lnbmVkRGF0YSk7Ci0gICAg
d3JpdGVyLndyaXRlUGFja2VkVWludDY0KDIsIHVuc2lnbmVkRGF0YSk7Ci0gICAgd3JpdGVyLndy
aXRlUGFja2VkU2ludDMyKDIsIHNpZ25lZERhdGEpOwotICAgIHdyaXRlci53cml0ZVBhY2tlZFNp
bnQ2NCgyLCBzaWduZWREYXRhKTsKLSAgICB3cml0ZXIud3JpdGVQYWNrZWRGaXhlZDMyKDIsIHVu
c2lnbmVkRGF0YSk7Ci0gICAgd3JpdGVyLndyaXRlUGFja2VkRml4ZWQ2NCgyLCB1bnNpZ25lZERh
dGEpOwotICAgIHdyaXRlci53cml0ZVBhY2tlZFNmaXhlZDMyKDIsIHNpZ25lZERhdGEpOwotICAg
IHdyaXRlci53cml0ZVBhY2tlZFNmaXhlZDY0KDIsIHNpZ25lZERhdGEpOwotICAgIHdyaXRlci53
cml0ZVBhY2tlZEZsb2F0KDIsIGZsb2F0RGF0YSk7Ci0gICAgd3JpdGVyLndyaXRlUGFja2VkRG91
YmxlKDIsIGRvdWJsZURhdGEpOwotICAgIHdyaXRlci53cml0ZVBhY2tlZEJvb2woMiwgYm9vbERh
dGEpOwotICAgIHdyaXRlci53cml0ZVBhY2tlZEVudW0oMiwgdW5zaWduZWREYXRhKTsKLQotICAg
IHdyaXRlci53cml0ZUludDMyKDMsIHNlbnRpbmVsKTsKLQotICAgIHZhciByZWFkZXIgPSBqc3Bi
LkJpbmFyeVJlYWRlci5hbGxvYyh3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCkpOwotCi0gICAgcmVh
ZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2VydEVxdWFscyhzZW50aW5lbCwgcmVhZGVyLnJlYWRJ
bnQzMigpKTsKLQotICAgIHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICBhc3NlcnRFbGVtZW50c0Vx
dWFscyhyZWFkZXIucmVhZFBhY2tlZEludDMyKCksIHNpZ25lZERhdGEpOwotCi0gICAgcmVhZGVy
Lm5leHRGaWVsZCgpOwotICAgIGFzc2VydEVsZW1lbnRzRXF1YWxzKHJlYWRlci5yZWFkUGFja2Vk
SW50NjQoKSwgc2lnbmVkRGF0YSk7Ci0KLSAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNz
ZXJ0RWxlbWVudHNFcXVhbHMocmVhZGVyLnJlYWRQYWNrZWRVaW50MzIoKSwgdW5zaWduZWREYXRh
KTsKLQotICAgIHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICBhc3NlcnRFbGVtZW50c0VxdWFscyhy
ZWFkZXIucmVhZFBhY2tlZFVpbnQ2NCgpLCB1bnNpZ25lZERhdGEpOwotCi0gICAgcmVhZGVyLm5l
eHRGaWVsZCgpOwotICAgIGFzc2VydEVsZW1lbnRzRXF1YWxzKHJlYWRlci5yZWFkUGFja2VkU2lu
dDMyKCksIHNpZ25lZERhdGEpOwotCi0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2Vy
dEVsZW1lbnRzRXF1YWxzKHJlYWRlci5yZWFkUGFja2VkU2ludDY0KCksIHNpZ25lZERhdGEpOwot
Ci0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2VydEVsZW1lbnRzRXF1YWxzKHJlYWRl
ci5yZWFkUGFja2VkRml4ZWQzMigpLCB1bnNpZ25lZERhdGEpOwotCi0gICAgcmVhZGVyLm5leHRG
aWVsZCgpOwotICAgIGFzc2VydEVsZW1lbnRzRXF1YWxzKHJlYWRlci5yZWFkUGFja2VkRml4ZWQ2
NCgpLCB1bnNpZ25lZERhdGEpOwotCi0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2Vy
dEVsZW1lbnRzRXF1YWxzKHJlYWRlci5yZWFkUGFja2VkU2ZpeGVkMzIoKSwgc2lnbmVkRGF0YSk7
Ci0KLSAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNzZXJ0RWxlbWVudHNFcXVhbHMocmVh
ZGVyLnJlYWRQYWNrZWRTZml4ZWQ2NCgpLCBzaWduZWREYXRhKTsKLQotICAgIHJlYWRlci5uZXh0
RmllbGQoKTsKLSAgICBhc3NlcnRFbGVtZW50c0VxdWFscyhyZWFkZXIucmVhZFBhY2tlZEZsb2F0
KCksIGZsb2F0RGF0YSk7Ci0KLSAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNzZXJ0RWxl
bWVudHNFcXVhbHMocmVhZGVyLnJlYWRQYWNrZWREb3VibGUoKSwgZG91YmxlRGF0YSk7Ci0KLSAg
ICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNzZXJ0RWxlbWVudHNFcXVhbHMocmVhZGVyLnJl
YWRQYWNrZWRCb29sKCksIGJvb2xEYXRhKTsKLQotICAgIHJlYWRlci5uZXh0RmllbGQoKTsKLSAg
ICBhc3NlcnRFbGVtZW50c0VxdWFscyhyZWFkZXIucmVhZFBhY2tlZEVudW0oKSwgdW5zaWduZWRE
YXRhKTsKLQotICAgIHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoc2VudGlu
ZWwsIHJlYWRlci5yZWFkSW50MzIoKSk7Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAqIEJ5dGUgYmxv
YnMgaW5zaWRlIG5lc3RlZCBtZXNzYWdlcyBzaG91bGQgYWx3YXlzIGhhdmUgdGhlaXIgYnl0ZSBv
ZmZzZXQgc2V0Ci0gICAqIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgb3V0ZXJtb3N0IGJs
b2IsIG5vdCB0aGUgc3RhcnQgb2YgdGhlaXIgcGFyZW50Ci0gICAqIGJsb2IuCi0gICAqLwotICBp
dCgndGVzdE5lc3RlZEJsb2JzJywgZnVuY3Rpb24oKSB7Ci0gICAgLy8gQ3JlYXRlIGEgcHJvdG8g
Y29uc2lzdGluZyBvZiB0d28gbmVzdGVkIG1lc3NhZ2VzLCB3aXRoIHRoZSBpbm5lciBvbmUKLSAg
ICAvLyBjb250YWluaW5nIGEgYmxvYiBvZiBieXRlcy4KLQotICAgIHZhciBmaWVsZFRhZyA9ICgx
IDw8IDMpIHwganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEOwotICAgIHZh
ciBibG9iID0gWzEsIDIsIDMsIDQsIDVdOwotICAgIHZhciB3cml0ZXIgPSBuZXcganNwYi5CaW5h
cnlXcml0ZXIoKTsKLSAgICB2YXIgZHVtbXlNZXNzYWdlID0gLyoqIEB0eXBlIHshanNwYi5CaW5h
cnlNZXNzYWdlfSAqLyh7fSk7Ci0KLSAgICB3cml0ZXIud3JpdGVNZXNzYWdlKDEsIGR1bW15TWVz
c2FnZSwgZnVuY3Rpb24oKSB7Ci0gICAgICB3cml0ZXIud3JpdGVNZXNzYWdlKDEsIGR1bW15TWVz
c2FnZSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHdyaXRlci53cml0ZUJ5dGVzKDEsIGJsb2IpOwot
ICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICAvLyBQZWVsIG9mZiB0aGUgb3V0ZXIgdHdvIG1lc3Nh
Z2UgbGF5ZXJzLiBFYWNoIGxheWVyIHNob3VsZCBoYXZlIHR3byBieXRlcwotICAgIC8vIG9mIG92
ZXJoZWFkLCBvbmUgZm9yIHRoZSBmaWVsZCB0YWcgYW5kIG9uZSBmb3IgdGhlIGxlbmd0aCBvZiB0
aGUgaW5uZXIKLSAgICAvLyBibG9iLgotCi0gICAgdmFyIGRlY29kZXIxID0gbmV3IGpzcGIuQmlu
YXJ5RGVjb2Rlcih3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCkpOwotICAgIGFzc2VydEVxdWFscyhm
aWVsZFRhZywgZGVjb2RlcjEucmVhZFVuc2lnbmVkVmFyaW50MzIoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKGJsb2IubGVuZ3RoICsgNCwgZGVjb2RlcjEucmVhZFVuc2lnbmVkVmFyaW50MzIoKSk7Ci0K
LSAgICB2YXIgZGVjb2RlcjIgPSBuZXcganNwYi5CaW5hcnlEZWNvZGVyKGRlY29kZXIxLnJlYWRC
eXRlcyhibG9iLmxlbmd0aCArIDQpKTsKLSAgICBhc3NlcnRFcXVhbHMoZmllbGRUYWcsIGRlY29k
ZXIyLnJlYWRVbnNpZ25lZFZhcmludDMyKCkpOwotICAgIGFzc2VydEVxdWFscyhibG9iLmxlbmd0
aCArIDIsIGRlY29kZXIyLnJlYWRVbnNpZ25lZFZhcmludDMyKCkpOwotCi0gICAgYXNzZXJ0RXF1
YWxzKGZpZWxkVGFnLCBkZWNvZGVyMi5yZWFkVW5zaWduZWRWYXJpbnQzMigpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoYmxvYi5sZW5ndGgsIGRlY29kZXIyLnJlYWRVbnNpZ25lZFZhcmludDMyKCkpOwot
ICAgIHZhciBieXRlcyA9IGRlY29kZXIyLnJlYWRCeXRlcyhibG9iLmxlbmd0aCk7Ci0KLSAgICBh
c3NlcnRFbGVtZW50c0VxdWFscyhieXRlcywgYmxvYik7Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAq
IFRlc3RzIHJlYWQgY2FsbGJhY2tzLgotICAgKi8KLSAgaXQoJ3Rlc3RSZWFkQ2FsbGJhY2tzJywg
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpOwot
ICAgIHZhciBkdW1teU1lc3NhZ2UgPSAvKiogQHR5cGUgeyFqc3BiLkJpbmFyeU1lc3NhZ2V9ICov
KHt9KTsKLQotICAgIC8vIEFkZCBhbiBpbnQsIGEgc3VibWVzc2FnZSwgYW5kIGFub3RoZXIgaW50
LgotICAgIHdyaXRlci53cml0ZUludDMyKDEsIDEwMCk7Ci0KLSAgICB3cml0ZXIud3JpdGVNZXNz
YWdlKDIsIGR1bW15TWVzc2FnZSwgZnVuY3Rpb24oKSB7Ci0gICAgICB3cml0ZXIud3JpdGVJbnQz
MigzLCAzMDApOwotICAgICAgd3JpdGVyLndyaXRlSW50MzIoNCwgNDAwKTsKLSAgICAgIHdyaXRl
ci53cml0ZUludDMyKDUsIDUwMCk7Ci0gICAgfSk7Ci0KLSAgICB3cml0ZXIud3JpdGVJbnQzMig3
LCA3MDApOwotCi0gICAgLy8gQ3JlYXRlIHRoZSByZWFkZXIgYW5kIHJlZ2lzdGVyIGEgY3VzdG9t
IHJlYWQgY2FsbGJhY2suCi0gICAgdmFyIHJlYWRlciA9IGpzcGIuQmluYXJ5UmVhZGVyLmFsbG9j
KHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKSk7Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFq
c3BiLkJpbmFyeVJlYWRlcn0gcmVhZGVyCi0gICAgICogQHJldHVybiB7Kn0KLSAgICAgKi8KLSAg
ICBmdW5jdGlvbiByZWFkQ2FsbGJhY2socmVhZGVyKSB7Ci0gICAgICByZWFkZXIubmV4dEZpZWxk
KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMywgcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpOwotICAg
ICAgYXNzZXJ0RXF1YWxzKDMwMCwgcmVhZGVyLnJlYWRJbnQzMigpKTsKLQotICAgICAgcmVhZGVy
Lm5leHRGaWVsZCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKDQsIHJlYWRlci5nZXRGaWVsZE51bWJl
cigpKTsKLSAgICAgIGFzc2VydEVxdWFscyg0MDAsIHJlYWRlci5yZWFkSW50MzIoKSk7Ci0KLSAg
ICAgIHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICAgIGFzc2VydEVxdWFscyg1LCByZWFkZXIuZ2V0
RmllbGROdW1iZXIoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoNTAwLCByZWFkZXIucmVhZEludDMy
KCkpOwotCi0gICAgICBhc3NlcnRFcXVhbHMoZmFsc2UsIHJlYWRlci5uZXh0RmllbGQoKSk7Ci0g
ICAgfTsKLQotICAgIHJlYWRlci5yZWdpc3RlclJlYWRDYWxsYmFjaygncmVhZENhbGxiYWNrJywg
cmVhZENhbGxiYWNrKTsKLQotICAgIC8vIFJlYWQgdGhlIGNvbnRhaW5lciBtZXNzYWdlLgotICAg
IHJlYWRlci5uZXh0RmllbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVhZGVyLmdldEZpZWxk
TnVtYmVyKCkpOwotICAgIGFzc2VydEVxdWFscygxMDAsIHJlYWRlci5yZWFkSW50MzIoKSk7Ci0K
LSAgICByZWFkZXIubmV4dEZpZWxkKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIHJlYWRlci5nZXRG
aWVsZE51bWJlcigpKTsKLSAgICByZWFkZXIucmVhZE1lc3NhZ2UoZHVtbXlNZXNzYWdlLCBmdW5j
dGlvbigpIHsKLSAgICAgIC8vIERlY29kZSB0aGUgZW1iZWRkZWQgbWVzc2FnZSB1c2luZyB0aGUg
cmVnaXN0ZXJlZCBjYWxsYmFjay4KLSAgICAgIHJlYWRlci5ydW5SZWFkQ2FsbGJhY2soJ3JlYWRD
YWxsYmFjaycpOwotICAgIH0pOwotCi0gICAgcmVhZGVyLm5leHRGaWVsZCgpOwotICAgIGFzc2Vy
dEVxdWFscyg3LCByZWFkZXIuZ2V0RmllbGROdW1iZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDcw
MCwgcmVhZGVyLnJlYWRJbnQzMigpKTsKLQotICAgIGFzc2VydEVxdWFscyhmYWxzZSwgcmVhZGVy
Lm5leHRGaWVsZCgpKTsKLSAgfSk7Ci19KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvYmluYXJ5L3V0aWxzLmpz
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9qcy9iaW5hcnkvdXRpbHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNDA1
NTUzMWM2MzcyY2NkZWY2MTBkMjg5ZWRjZTk2ZTFmYTRjZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9iaW5hcnkvdXRpbHMuanMKKysrIC9kZXYvbnVs
bApAQCAtMSw5NzUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LS8qKgotICogQGZpbGVvdmVydmlldyBUaGlzIGZpbGUgY29udGFpbnMgaGVscGVyIGNvZGUgdXNl
ZCBieSBqc3BiLkJpbmFyeVJlYWRlcgotICogYW5kIEJpbmFyeVdyaXRlci4KLSAqCi0gKiBAYXV0
aG9yIGFhcHBsZWJ5QGdvb2dsZS5jb20gKEF1c3RpbiBBcHBsZWJ5KQotICovCi0KLWdvb2cucHJv
dmlkZSgnanNwYi51dGlscycpOwotCi1nb29nLnJlcXVpcmUoJ2dvb2cuYXNzZXJ0cycpOwotZ29v
Zy5yZXF1aXJlKCdnb29nLmNyeXB0LmJhc2U2NCcpOwotZ29vZy5yZXF1aXJlKCdnb29nLnN0cmlu
ZycpOwotZ29vZy5yZXF1aXJlKCdqc3BiLkJpbmFyeUNvbnN0YW50cycpOwotCi0KLS8qKgotICog
SmF2YXNjcmlwdCBjYW4ndCBuYXRpdmVseSBoYW5kbGUgNjQtYml0IGRhdGEgdHlwZXMsIHNvIHRv
IG1hbmlwdWxhdGUgdGhlbSB3ZQotICogaGF2ZSB0byBzcGxpdCB0aGVtIGludG8gdHdvIDMyLWJp
dCBoYWx2ZXMgYW5kIGRvIHRoZSBtYXRoIG1hbnVhbGx5LgotICoKLSAqIEluc3RlYWQgb2YgaW5z
dGFudGlhdGluZyBhbmQgcGFzc2luZyBzbWFsbCBzdHJ1Y3R1cmVzIGFyb3VuZCB0byBkbyB0aGlz
LCB3ZQotICogaW5zdGVhZCBqdXN0IHVzZSB0d28gZ2xvYmFsIHRlbXBvcmFyeSB2YWx1ZXMuIFRo
aXMgb25lIHN0b3JlcyB0aGUgbG93IDMyCi0gKiBiaXRzIG9mIGEgc3BsaXQgdmFsdWUgLSBmb3Ig
ZXhhbXBsZSwgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBhIDY0LWJpdAotICogaW50ZWdlciwg
dGhpcyB0ZW1wb3JhcnkgdmFsdWUgd2lsbCBjb250YWluIHRoZSBsb3cgMzIgYml0cyBvZiB0aGF0
IGludGVnZXIuCi0gKiBJZiB0aGUgb3JpZ2luYWwgdmFsdWUgd2FzIGEgZG91YmxlLCB0aGlzIHRl
bXBvcmFyeSB2YWx1ZSB3aWxsIGNvbnRhaW4gdGhlCi0gKiBsb3cgMzIgYml0cyBvZiB0aGUgYmlu
YXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoYXQgZG91YmxlLCBldGNldGVyYS4KLSAqIEB0eXBlIHtu
dW1iZXJ9Ci0gKi8KLWpzcGIudXRpbHMuc3BsaXQ2NExvdyA9IDA7Ci0KLQotLyoqCi0gKiBBbmQg
Y29ycmVzcG9uZGluZ2x5LCB0aGlzIHRlbXBvcmFyeSB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gdGhl
IGhpZ2ggMzIgYml0cwotICogb2Ygd2hhdGV2ZXIgdmFsdWUgd2FzIHNwbGl0LgotICogQHR5cGUg
e251bWJlcn0KLSAqLwotanNwYi51dGlscy5zcGxpdDY0SGlnaCA9IDA7Ci0KLQotLyoqCi0gKiBT
cGxpdHMgYW4gdW5zaWduZWQgSmF2YXNjcmlwdCBpbnRlZ2VyIGludG8gdHdvIDMyLWJpdCBoYWx2
ZXMgYW5kIHN0b3JlcyBpdAotICogaW4gdGhlIHRlbXAgdmFsdWVzIGFib3ZlLgotICogQHBhcmFt
IHtudW1iZXJ9IHZhbHVlIFRoZSBudW1iZXIgdG8gc3BsaXQuCi0gKi8KLWpzcGIudXRpbHMuc3Bs
aXRVaW50NjQgPSBmdW5jdGlvbih2YWx1ZSkgewotICAvLyBFeHRyYWN0IGxvdyAzMiBiaXRzIGFu
ZCBoaWdoIDMyIGJpdHMgYXMgdW5zaWduZWQgaW50ZWdlcnMuCi0gIHZhciBsb3dCaXRzID0gdmFs
dWUgPj4+IDA7Ci0gIHZhciBoaWdoQml0cyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gbG93Qml0cykg
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19U
T18zMikgPj4+IDA7Ci0KLSAganNwYi51dGlscy5zcGxpdDY0TG93ID0gbG93Qml0czsKLSAganNw
Yi51dGlscy5zcGxpdDY0SGlnaCA9IGhpZ2hCaXRzOwotfTsKLQotCi0vKioKLSAqIFNwbGl0cyBh
IHNpZ25lZCBKYXZhc2NyaXB0IGludGVnZXIgaW50byB0d28gMzItYml0IGhhbHZlcyBhbmQgc3Rv
cmVzIGl0IGluCi0gKiB0aGUgdGVtcCB2YWx1ZXMgYWJvdmUuCi0gKiBAcGFyYW0ge251bWJlcn0g
dmFsdWUgVGhlIG51bWJlciB0byBzcGxpdC4KLSAqLwotanNwYi51dGlscy5zcGxpdEludDY0ID0g
ZnVuY3Rpb24odmFsdWUpIHsKLSAgLy8gQ29udmVydCB0byBzaWduLW1hZ25pdHVkZSByZXByZXNl
bnRhdGlvbi4KLSAgdmFyIHNpZ24gPSAodmFsdWUgPCAwKTsKLSAgdmFsdWUgPSBNYXRoLmFicyh2
YWx1ZSk7Ci0KLSAgLy8gRXh0cmFjdCBsb3cgMzIgYml0cyBhbmQgaGlnaCAzMiBiaXRzIGFzIHVu
c2lnbmVkIGludGVnZXJzLgotICB2YXIgbG93Qml0cyA9IHZhbHVlID4+PiAwOwotICB2YXIgaGln
aEJpdHMgPSBNYXRoLmZsb29yKCh2YWx1ZSAtIGxvd0JpdHMpIC8KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpOwotICBoaWdoQml0cyA9
IGhpZ2hCaXRzID4+PiAwOwotCi0gIC8vIFBlcmZvcm0gdHdvJ3MgY29tcGxlbWVudCBjb252ZXJz
aW9uIGlmIHRoZSBzaWduIGJpdCB3YXMgc2V0LgotICBpZiAoc2lnbikgewotICAgIGhpZ2hCaXRz
ID0gfmhpZ2hCaXRzID4+PiAwOwotICAgIGxvd0JpdHMgPSB+bG93Qml0cyA+Pj4gMDsKLSAgICBs
b3dCaXRzICs9IDE7Ci0gICAgaWYgKGxvd0JpdHMgPiAweEZGRkZGRkZGKSB7Ci0gICAgICBsb3dC
aXRzID0gMDsKLSAgICAgIGhpZ2hCaXRzKys7Ci0gICAgICBpZiAoaGlnaEJpdHMgPiAweEZGRkZG
RkZGKSBoaWdoQml0cyA9IDA7Ci0gICAgfQotICB9Ci0KLSAganNwYi51dGlscy5zcGxpdDY0TG93
ID0gbG93Qml0czsKLSAganNwYi51dGlscy5zcGxpdDY0SGlnaCA9IGhpZ2hCaXRzOwotfTsKLQot
Ci0vKioKLSAqIENvbnZlcnMgYSBzaWduZWQgSmF2YXNjcmlwdCBpbnRlZ2VyIGludG8gemlnemFn
IGZvcm1hdCwgc3BsaXRzIGl0IGludG8gdHdvCi0gKiAzMi1iaXQgaGFsdmVzLCBhbmQgc3RvcmVz
IGl0IGluIHRoZSB0ZW1wIHZhbHVlcyBhYm92ZS4KLSAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBU
aGUgbnVtYmVyIHRvIHNwbGl0LgotICovCi1qc3BiLnV0aWxzLnNwbGl0WmlnemFnNjQgPSBmdW5j
dGlvbih2YWx1ZSkgewotICAvLyBDb252ZXJ0IHRvIHNpZ24tbWFnbml0dWRlIGFuZCBzY2FsZSBi
eSAyIGJlZm9yZSB3ZSBzcGxpdCB0aGUgdmFsdWUuCi0gIHZhciBzaWduID0gKHZhbHVlIDwgMCk7
Ci0gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpICogMjsKLQotICBqc3BiLnV0aWxzLnNwbGl0VWlu
dDY0KHZhbHVlKTsKLSAgdmFyIGxvd0JpdHMgPSBqc3BiLnV0aWxzLnNwbGl0NjRMb3c7Ci0gIHZh
ciBoaWdoQml0cyA9IGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g7Ci0KLSAgLy8gSWYgdGhlIHZhbHVl
IGlzIG5lZ2F0aXZlLCBzdWJ0cmFjdCAxIGZyb20gdGhlIHNwbGl0IHJlcHJlc2VudGF0aW9uIHNv
IHdlCi0gIC8vIGRvbid0IGxvc2UgdGhlIHNpZ24gYml0IGR1ZSB0byBwcmVjaXNpb24gaXNzdWVz
LgotICBpZiAoc2lnbikgewotICAgIGlmIChsb3dCaXRzID09IDApIHsKLSAgICAgIGlmIChoaWdo
Qml0cyA9PSAwKSB7Ci0gICAgICAgIGxvd0JpdHMgPSAweEZGRkZGRkZGOwotICAgICAgICBoaWdo
Qml0cyA9IDB4RkZGRkZGRkY7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBoaWdoQml0cy0tOwot
ICAgICAgICBsb3dCaXRzID0gMHhGRkZGRkZGRjsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgbG93Qml0cy0tOwotICAgIH0KLSAgfQotCi0gIGpzcGIudXRpbHMuc3BsaXQ2NExvdyA9IGxv
d0JpdHM7Ci0gIGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2ggPSBoaWdoQml0czsKLX07Ci0KLQotLyoq
Ci0gKiBDb252ZXJ0cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBpbnRvIDMyLWJpdCBJRUVFIHJl
cHJlc2VudGF0aW9uIGFuZCBzdG9yZXMKLSAqIGl0IGluIHRoZSB0ZW1wIHZhbHVlcyBhYm92ZS4K
LSAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZQotICovCi1qc3BiLnV0aWxzLnNwbGl0RmxvYXQzMiA9
IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIHZhciBzaWduID0gKHZhbHVlIDwgMCkgPyAxIDogMDsKLSAg
dmFsdWUgPSBzaWduID8gLXZhbHVlIDogdmFsdWU7Ci0gIHZhciBleHA7Ci0gIHZhciBtYW50Owot
Ci0gIC8vIEhhbmRsZSB6ZXJvcy4KLSAgaWYgKHZhbHVlID09PSAwKSB7Ci0gICAgaWYgKCgxIC8g
dmFsdWUpID4gMCkgewotICAgICAgLy8gUG9zaXRpdmUgemVyby4KLSAgICAgIGpzcGIudXRpbHMu
c3BsaXQ2NEhpZ2ggPSAwOwotICAgICAganNwYi51dGlscy5zcGxpdDY0TG93ID0gMHgwMDAwMDAw
MDsKLSAgICB9IGVsc2UgewotICAgICAgLy8gTmVnYXRpdmUgemVyby4KLSAgICAgIGpzcGIudXRp
bHMuc3BsaXQ2NEhpZ2ggPSAwOwotICAgICAganNwYi51dGlscy5zcGxpdDY0TG93ID0gMHg4MDAw
MDAwMDsKLSAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gSGFuZGxlIG5hbnMuCi0gIGlm
IChpc05hTih2YWx1ZSkpIHsKLSAgICBqc3BiLnV0aWxzLnNwbGl0NjRIaWdoID0gMDsKLSAgICBq
c3BiLnV0aWxzLnNwbGl0NjRMb3cgPSAweDdGRkZGRkZGOwotICAgIHJldHVybjsKLSAgfQotCi0g
IC8vIEhhbmRsZSBpbmZpbml0aWVzLgotICBpZiAodmFsdWUgPiBqc3BiLkJpbmFyeUNvbnN0YW50
cy5GTE9BVDMyX01BWCkgewotICAgIGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2ggPSAwOwotICAgIGpz
cGIudXRpbHMuc3BsaXQ2NExvdyA9ICgoc2lnbiA8PCAzMSkgfCAoMHg3RjgwMDAwMCkpID4+PiAw
OwotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIEhhbmRsZSBkZW5vcm1hbHMuCi0gIGlmICh2YWx1
ZSA8IGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUlOKSB7Ci0gICAgLy8gTnVtYmVyIGlz
IGEgZGVub3JtYWwuCi0gICAgbWFudCA9IE1hdGgucm91bmQodmFsdWUgLyBNYXRoLnBvdygyLCAt
MTQ5KSk7Ci0gICAganNwYi51dGlscy5zcGxpdDY0SGlnaCA9IDA7Ci0gICAganNwYi51dGlscy5z
cGxpdDY0TG93ID0gKChzaWduIDw8IDMxKSB8IG1hbnQpID4+PiAwOwotICAgIHJldHVybjsKLSAg
fQotCi0gIGV4cCA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpOwotICBt
YW50ID0gdmFsdWUgKiBNYXRoLnBvdygyLCAtZXhwKTsKLSAgbWFudCA9IE1hdGgucm91bmQobWFu
dCAqIGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMykgJiAweDdGRkZGRjsKLQotICBqc3Bi
LnV0aWxzLnNwbGl0NjRIaWdoID0gMDsKLSAganNwYi51dGlscy5zcGxpdDY0TG93ID0gKChzaWdu
IDw8IDMxKSB8ICgoZXhwICsgMTI3KSA8PCAyMykgfCBtYW50KSA+Pj4gMDsKLX07Ci0KLQotLyoq
Ci0gKiBDb252ZXJ0cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBpbnRvIDY0LWJpdCBJRUVFIHJl
cHJlc2VudGF0aW9uIGFuZCBzdG9yZXMKLSAqIGl0IGluIHRoZSB0ZW1wIHZhbHVlcyBhYm92ZS4K
LSAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZQotICovCi1qc3BiLnV0aWxzLnNwbGl0RmxvYXQ2NCA9
IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIHZhciBzaWduID0gKHZhbHVlIDwgMCkgPyAxIDogMDsKLSAg
dmFsdWUgPSBzaWduID8gLXZhbHVlIDogdmFsdWU7Ci0KLSAgLy8gSGFuZGxlIHplcm9zLgotICBp
ZiAodmFsdWUgPT09IDApIHsKLSAgICBpZiAoKDEgLyB2YWx1ZSkgPiAwKSB7Ci0gICAgICAvLyBQ
b3NpdGl2ZSB6ZXJvLgotICAgICAganNwYi51dGlscy5zcGxpdDY0SGlnaCA9IDB4MDAwMDAwMDA7
Ci0gICAgICBqc3BiLnV0aWxzLnNwbGl0NjRMb3cgPSAweDAwMDAwMDAwOwotICAgIH0gZWxzZSB7
Ci0gICAgICAvLyBOZWdhdGl2ZSB6ZXJvLgotICAgICAganNwYi51dGlscy5zcGxpdDY0SGlnaCA9
IDB4ODAwMDAwMDA7Ci0gICAgICBqc3BiLnV0aWxzLnNwbGl0NjRMb3cgPSAweDAwMDAwMDAwOwot
ICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBIYW5kbGUgbmFucy4KLSAgaWYgKGlzTmFO
KHZhbHVlKSkgewotICAgIGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2ggPSAweDdGRkZGRkZGOwotICAg
IGpzcGIudXRpbHMuc3BsaXQ2NExvdyA9IDB4RkZGRkZGRkY7Ci0gICAgcmV0dXJuOwotICB9Ci0K
LSAgLy8gSGFuZGxlIGluZmluaXRpZXMuCi0gIGlmICh2YWx1ZSA+IGpzcGIuQmluYXJ5Q29uc3Rh
bnRzLkZMT0FUNjRfTUFYKSB7Ci0gICAganNwYi51dGlscy5zcGxpdDY0SGlnaCA9ICgoc2lnbiA8
PCAzMSkgfCAoMHg3RkYwMDAwMCkpID4+PiAwOwotICAgIGpzcGIudXRpbHMuc3BsaXQ2NExvdyA9
IDA7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gSGFuZGxlIGRlbm9ybWFscy4KLSAgaWYgKHZh
bHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NSU4pIHsKLSAgICAvLyBOdW1iZXIg
aXMgYSBkZW5vcm1hbC4KLSAgICB2YXIgbWFudCA9IHZhbHVlIC8gTWF0aC5wb3coMiwgLTEwNzQp
OwotICAgIHZhciBtYW50SGlnaCA9IChtYW50IC8ganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RP
XzMyKTsKLSAgICBqc3BiLnV0aWxzLnNwbGl0NjRIaWdoID0gKChzaWduIDw8IDMxKSB8IG1hbnRI
aWdoKSA+Pj4gMDsKLSAgICBqc3BiLnV0aWxzLnNwbGl0NjRMb3cgPSAobWFudCA+Pj4gMCk7Ci0g
ICAgcmV0dXJuOwotICB9Ci0KLSAgdmFyIGV4cCA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUp
IC8gTWF0aC5MTjIpOwotICBpZiAoZXhwID09IDEwMjQpIGV4cCA9IDEwMjM7Ci0gIHZhciBtYW50
ID0gdmFsdWUgKiBNYXRoLnBvdygyLCAtZXhwKTsKLQotICB2YXIgbWFudEhpZ2ggPSAobWFudCAq
IGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMCkgJiAweEZGRkZGOwotICB2YXIgbWFudExv
dyA9IChtYW50ICoganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzUyKSA+Pj4gMDsKLQotICBq
c3BiLnV0aWxzLnNwbGl0NjRIaWdoID0KLSAgICAgICgoc2lnbiA8PCAzMSkgfCAoKGV4cCArIDEw
MjMpIDw8IDIwKSB8IG1hbnRIaWdoKSA+Pj4gMDsKLSAganNwYi51dGlscy5zcGxpdDY0TG93ID0g
bWFudExvdzsKLX07Ci0KLQotLyoqCi0gKiBDb252ZXJ0cyBhbiA4LWNoYXJhY3RlciBoYXNoIHN0
cmluZyBpbnRvIHR3byAzMi1iaXQgbnVtYmVycyBhbmQgc3RvcmVzIHRoZW0KLSAqIGluIHRoZSB0
ZW1wIHZhbHVlcyBhYm92ZS4KLSAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoCi0gKi8KLWpzcGIudXRp
bHMuc3BsaXRIYXNoNjQgPSBmdW5jdGlvbihoYXNoKSB7Ci0gIHZhciBhID0gaGFzaC5jaGFyQ29k
ZUF0KDApOwotICB2YXIgYiA9IGhhc2guY2hhckNvZGVBdCgxKTsKLSAgdmFyIGMgPSBoYXNoLmNo
YXJDb2RlQXQoMik7Ci0gIHZhciBkID0gaGFzaC5jaGFyQ29kZUF0KDMpOwotICB2YXIgZSA9IGhh
c2guY2hhckNvZGVBdCg0KTsKLSAgdmFyIGYgPSBoYXNoLmNoYXJDb2RlQXQoNSk7Ci0gIHZhciBn
ID0gaGFzaC5jaGFyQ29kZUF0KDYpOwotICB2YXIgaCA9IGhhc2guY2hhckNvZGVBdCg3KTsKLQot
ICBqc3BiLnV0aWxzLnNwbGl0NjRMb3cgPSAoYSArIChiIDw8IDgpICsgKGMgPDwgMTYpICsgKGQg
PDwgMjQpKSA+Pj4gMDsKLSAganNwYi51dGlscy5zcGxpdDY0SGlnaCA9IChlICsgKGYgPDwgOCkg
KyAoZyA8PCAxNikgKyAoaCA8PCAyNCkpID4+PiAwOwotfTsKLQotCi0vKioKLSAqIEpvaW5zIHR3
byAzMi1iaXQgdmFsdWVzIGludG8gYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlci4gUHJlY2lzaW9u
IHdpbGwgYmUKLSAqIGxvc3QgaWYgdGhlIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gMl41Mi4KLSAq
IEBwYXJhbSB7bnVtYmVyfSBiaXRzTG93Ci0gKiBAcGFyYW0ge251bWJlcn0gYml0c0hpZ2gKLSAq
IEByZXR1cm4ge251bWJlcn0KLSAqLwotanNwYi51dGlscy5qb2luVWludDY0ID0gZnVuY3Rpb24o
Yml0c0xvdywgYml0c0hpZ2gpIHsKLSAgcmV0dXJuIGJpdHNIaWdoICoganNwYi5CaW5hcnlDb25z
dGFudHMuVFdPX1RPXzMyICsgYml0c0xvdzsKLX07Ci0KLQotLyoqCi0gKiBKb2lucyB0d28gMzIt
Yml0IHZhbHVlcyBpbnRvIGEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyLiBQcmVjaXNpb24gd2lsbCBi
ZSBsb3N0Ci0gKiBpZiB0aGUgcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiAyXjUyLgotICogQHBhcmFt
IHtudW1iZXJ9IGJpdHNMb3cKLSAqIEBwYXJhbSB7bnVtYmVyfSBiaXRzSGlnaAotICogQHJldHVy
biB7bnVtYmVyfQotICovCi1qc3BiLnV0aWxzLmpvaW5JbnQ2NCA9IGZ1bmN0aW9uKGJpdHNMb3cs
IGJpdHNIaWdoKSB7Ci0gIC8vIElmIHRoZSBoaWdoIGJpdCBpcyBzZXQsIGRvIGEgbWFudWFsIHR3
bydzIGNvbXBsZW1lbnQgY29udmVyc2lvbi4KLSAgdmFyIHNpZ24gPSAoYml0c0hpZ2ggJiAweDgw
MDAwMDAwKTsKLSAgaWYgKHNpZ24pIHsKLSAgICBiaXRzTG93ID0gKH5iaXRzTG93ICsgMSkgPj4+
IDA7Ci0gICAgYml0c0hpZ2ggPSB+Yml0c0hpZ2ggPj4+IDA7Ci0gICAgaWYgKGJpdHNMb3cgPT0g
MCkgewotICAgICAgYml0c0hpZ2ggPSAoYml0c0hpZ2ggKyAxKSA+Pj4gMDsKLSAgICB9Ci0gIH0K
LQotICB2YXIgcmVzdWx0ID0ganNwYi51dGlscy5qb2luVWludDY0KGJpdHNMb3csIGJpdHNIaWdo
KTsKLSAgcmV0dXJuIHNpZ24gPyAtcmVzdWx0IDogcmVzdWx0OwotfTsKLQotCi0vKioKLSAqIEpv
aW5zIHR3byAzMi1iaXQgdmFsdWVzIGludG8gYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBhbmQg
YXBwbGllcyB6aWd6YWcKLSAqIGRlY29kaW5nLiBQcmVjaXNpb24gd2lsbCBiZSBsb3N0IGlmIHRo
ZSByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIDJeNTIuCi0gKiBAcGFyYW0ge251bWJlcn0gYml0c0xv
dwotICogQHBhcmFtIHtudW1iZXJ9IGJpdHNIaWdoCi0gKiBAcmV0dXJuIHtudW1iZXJ9Ci0gKi8K
LWpzcGIudXRpbHMuam9pblppZ3phZzY0ID0gZnVuY3Rpb24oYml0c0xvdywgYml0c0hpZ2gpIHsK
LSAgLy8gRXh0cmFjdCB0aGUgc2lnbiBiaXQgYW5kIHNoaWZ0IHJpZ2h0IGJ5IG9uZS4KLSAgdmFy
IHNpZ24gPSBiaXRzTG93ICYgMTsKLSAgYml0c0xvdyA9ICgoYml0c0xvdyA+Pj4gMSkgfCAoYml0
c0hpZ2ggPDwgMzEpKSA+Pj4gMDsKLSAgYml0c0hpZ2ggPSBiaXRzSGlnaCA+Pj4gMTsKLQotICAv
LyBJbmNyZW1lbnQgdGhlIHNwbGl0IHZhbHVlIGlmIHRoZSBzaWduIGJpdCB3YXMgc2V0LgotICBp
ZiAoc2lnbikgewotICAgIGJpdHNMb3cgPSAoYml0c0xvdyArIDEpID4+PiAwOwotICAgIGlmIChi
aXRzTG93ID09IDApIHsKLSAgICAgIGJpdHNIaWdoID0gKGJpdHNIaWdoICsgMSkgPj4+IDA7Ci0g
ICAgfQotICB9Ci0KLSAgdmFyIHJlc3VsdCA9IGpzcGIudXRpbHMuam9pblVpbnQ2NChiaXRzTG93
LCBiaXRzSGlnaCk7Ci0gIHJldHVybiBzaWduID8gLXJlc3VsdCA6IHJlc3VsdDsKLX07Ci0KLQot
LyoqCi0gKiBKb2lucyB0d28gMzItYml0IHZhbHVlcyBpbnRvIGEgMzItYml0IElFRUUgZmxvYXRp
bmcgcG9pbnQgbnVtYmVyIGFuZAotICogY29udmVydHMgaXQgYmFjayBpbnRvIGEgSmF2YXNjcmlw
dCBudW1iZXIuCi0gKiBAcGFyYW0ge251bWJlcn0gYml0c0xvdyBUaGUgbG93IDMyIGJpdHMgb2Yg
dGhlIGJpbmFyeSBudW1iZXI7Ci0gKiBAcGFyYW0ge251bWJlcn0gYml0c0hpZ2ggVGhlIGhpZ2gg
MzIgYml0cyBvZiB0aGUgYmluYXJ5IG51bWJlci4KLSAqIEByZXR1cm4ge251bWJlcn0KLSAqLwot
anNwYi51dGlscy5qb2luRmxvYXQzMiA9IGZ1bmN0aW9uKGJpdHNMb3csIGJpdHNIaWdoKSB7Ci0g
IHZhciBzaWduID0gKChiaXRzTG93ID4+IDMxKSAqIDIgKyAxKTsKLSAgdmFyIGV4cCA9IChiaXRz
TG93ID4+PiAyMykgJiAweEZGOwotICB2YXIgbWFudCA9IGJpdHNMb3cgJiAweDdGRkZGRjsKLQot
ICBpZiAoZXhwID09IDB4RkYpIHsKLSAgICBpZiAobWFudCkgewotICAgICAgcmV0dXJuIE5hTjsK
LSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHNpZ24gKiBJbmZpbml0eTsKLSAgICB9Ci0gIH0K
LQotICBpZiAoZXhwID09IDApIHsKLSAgICAvLyBEZW5vcm1hbC4KLSAgICByZXR1cm4gc2lnbiAq
IE1hdGgucG93KDIsIC0xNDkpICogbWFudDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gc2lnbiAq
IE1hdGgucG93KDIsIGV4cCAtIDE1MCkgKgotICAgICAgICAgICAobWFudCArIE1hdGgucG93KDIs
IDIzKSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBKb2lucyB0d28gMzItYml0IHZhbHVlcyBpbnRv
IGEgNjQtYml0IElFRUUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGFuZAotICogY29udmVydHMgaXQg
YmFjayBpbnRvIGEgSmF2YXNjcmlwdCBudW1iZXIuCi0gKiBAcGFyYW0ge251bWJlcn0gYml0c0xv
dyBUaGUgbG93IDMyIGJpdHMgb2YgdGhlIGJpbmFyeSBudW1iZXI7Ci0gKiBAcGFyYW0ge251bWJl
cn0gYml0c0hpZ2ggVGhlIGhpZ2ggMzIgYml0cyBvZiB0aGUgYmluYXJ5IG51bWJlci4KLSAqIEBy
ZXR1cm4ge251bWJlcn0KLSAqLwotanNwYi51dGlscy5qb2luRmxvYXQ2NCA9IGZ1bmN0aW9uKGJp
dHNMb3csIGJpdHNIaWdoKSB7Ci0gIHZhciBzaWduID0gKChiaXRzSGlnaCA+PiAzMSkgKiAyICsg
MSk7Ci0gIHZhciBleHAgPSAoYml0c0hpZ2ggPj4+IDIwKSAmIDB4N0ZGOwotICB2YXIgbWFudCA9
IGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiAqIChiaXRzSGlnaCAmIDB4RkZGRkYpICsg
Yml0c0xvdzsKLQotICBpZiAoZXhwID09IDB4N0ZGKSB7Ci0gICAgaWYgKG1hbnQpIHsKLSAgICAg
IHJldHVybiBOYU47Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBzaWduICogSW5maW5pdHk7
Ci0gICAgfQotICB9Ci0KLSAgaWYgKGV4cCA9PSAwKSB7Ci0gICAgLy8gRGVub3JtYWwuCi0gICAg
cmV0dXJuIHNpZ24gKiBNYXRoLnBvdygyLCAtMTA3NCkgKiBtYW50OwotICB9IGVsc2UgewotICAg
IHJldHVybiBzaWduICogTWF0aC5wb3coMiwgZXhwIC0gMTA3NSkgKgotICAgICAgICAgICAobWFu
dCArIGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT181Mik7Ci0gIH0KLX07Ci0KLQotLyoqCi0g
KiBKb2lucyB0d28gMzItYml0IHZhbHVlcyBpbnRvIGFuIDgtY2hhcmFjdGVyIGhhc2ggc3RyaW5n
LgotICogQHBhcmFtIHtudW1iZXJ9IGJpdHNMb3cKLSAqIEBwYXJhbSB7bnVtYmVyfSBiaXRzSGln
aAotICogQHJldHVybiB7c3RyaW5nfQotICovCi1qc3BiLnV0aWxzLmpvaW5IYXNoNjQgPSBmdW5j
dGlvbihiaXRzTG93LCBiaXRzSGlnaCkgewotICB2YXIgYSA9IChiaXRzTG93ID4+PiAwKSAmIDB4
RkY7Ci0gIHZhciBiID0gKGJpdHNMb3cgPj4+IDgpICYgMHhGRjsKLSAgdmFyIGMgPSAoYml0c0xv
dyA+Pj4gMTYpICYgMHhGRjsKLSAgdmFyIGQgPSAoYml0c0xvdyA+Pj4gMjQpICYgMHhGRjsKLSAg
dmFyIGUgPSAoYml0c0hpZ2ggPj4+IDApICYgMHhGRjsKLSAgdmFyIGYgPSAoYml0c0hpZ2ggPj4+
IDgpICYgMHhGRjsKLSAgdmFyIGcgPSAoYml0c0hpZ2ggPj4+IDE2KSAmIDB4RkY7Ci0gIHZhciBo
ID0gKGJpdHNIaWdoID4+PiAyNCkgJiAweEZGOwotCi0gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJD
b2RlKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpOwotfTsKLQotCi0vKioKLSAqIEluZGl2aWR1YWwg
ZGlnaXRzIGZvciBudW1iZXItPnN0cmluZyBjb252ZXJzaW9uLgotICogQGNvbnN0IHshQXJyYXku
PG51bWJlcj59Ci0gKi8KLWpzcGIudXRpbHMuRElHSVRTID0gWwotICAnMCcsICcxJywgJzInLCAn
MycsICc0JywgJzUnLCAnNicsICc3JywKLSAgJzgnLCAnOScsICdhJywgJ2InLCAnYycsICdkJywg
J2UnLCAnZicKLV07Ci0KLQotLyoqCi0gKiBMb3NzbGVzc2x5IGNvbnZlcnRzIGEgNjQtYml0IHVu
c2lnbmVkIGludGVnZXIgaW4gMzI6MzIgc3BsaXQgcmVwcmVzZW50YXRpb24KLSAqIGludG8gYSBk
ZWNpbWFsIHN0cmluZy4KLSAqIEBwYXJhbSB7bnVtYmVyfSBiaXRzTG93IFRoZSBsb3cgMzIgYml0
cyBvZiB0aGUgYmluYXJ5IG51bWJlcjsKLSAqIEBwYXJhbSB7bnVtYmVyfSBiaXRzSGlnaCBUaGUg
aGlnaCAzMiBiaXRzIG9mIHRoZSBiaW5hcnkgbnVtYmVyLgotICogQHJldHVybiB7c3RyaW5nfSBU
aGUgYmluYXJ5IG51bWJlciByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAqLwotanNwYi51dGls
cy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nID0gZnVuY3Rpb24oYml0c0xvdywgYml0c0hpZ2gp
IHsKLSAgLy8gU2tpcCB0aGUgZXhwZW5zaXZlIGNvbnZlcnNpb24gaWYgdGhlIG51bWJlciBpcyBz
bWFsbCBlbm91Z2ggdG8gdXNlIHRoZQotICAvLyBidWlsdC1pbiBjb252ZXJzaW9ucy4KLSAgaWYg
KGJpdHNIaWdoIDw9IDB4MUZGRkZGKSB7Ci0gICAgcmV0dXJuICcnICsgKGpzcGIuQmluYXJ5Q29u
c3RhbnRzLlRXT19UT18zMiAqIGJpdHNIaWdoICsgYml0c0xvdyk7Ci0gIH0KLQotICAvLyBXaGF0
IHRoaXMgY29kZSBpcyBkb2luZyBpcyBlc3NlbnRpYWxseSBjb252ZXJ0aW5nIHRoZSBpbnB1dCBu
dW1iZXIgZnJvbQotICAvLyBiYXNlLTIgdG8gYmFzZS0xZTcsIHdoaWNoIGFsbG93cyB1cyB0byBy
ZXByZXNlbnQgdGhlIDY0LWJpdCByYW5nZSB3aXRoCi0gIC8vIG9ubHkgMyAodmVyeSBsYXJnZSkg
ZGlnaXRzLiBUaG9zZSBkaWdpdHMgYXJlIHRoZW4gdHJpdmlhbCB0byBjb252ZXJ0IHRvCi0gIC8v
IGEgYmFzZS0xMCBzdHJpbmcuCi0KLSAgLy8gVGhlIG1hZ2ljIG51bWJlcnMgdXNlZCBoZXJlIGFy
ZSAtCi0gIC8vIDJeMjQgPSAxNjc3NzIxNiA9ICgxLDY3NzcyMTYpIGluIGJhc2UtMWU3LgotICAv
LyAyXjQ4ID0gMjgxNDc0OTc2NzEwNjU2ID0gKDIsODE0NzQ5Nyw2NzEwNjU2KSBpbiBiYXNlLTFl
Ny4KLQotICAvLyBTcGxpdCAzMjozMiByZXByZXNlbnRhdGlvbiBpbnRvIDE2OjI0OjI0IHJlcHJl
c2VudGF0aW9uIHNvIG91cgotICAvLyBpbnRlcm1lZGlhdGUgZGlnaXRzIGRvbid0IG92ZXJmbG93
LgotICB2YXIgbG93ID0gYml0c0xvdyAmIDB4RkZGRkZGOwotICB2YXIgbWlkID0gKCgoYml0c0xv
dyA+Pj4gMjQpIHwgKGJpdHNIaWdoIDw8IDgpKSA+Pj4gMCkgJiAweEZGRkZGRjsKLSAgdmFyIGhp
Z2ggPSAoYml0c0hpZ2ggPj4gMTYpICYgMHhGRkZGOwotCi0gIC8vIEFzc2VtYmxlIG91ciB0aHJl
ZSBiYXNlLTFlNyBkaWdpdHMsIGlnbm9yaW5nIGNhcnJpZXMuIFRoZSBtYXhpbXVtCi0gIC8vIHZh
bHVlIGluIGEgZGlnaXQgYXQgdGhpcyBzdGVwIGlzIHJlcHJlc2VudGFibGUgYXMgYSA0OC1iaXQg
aW50ZWdlciwgd2hpY2gKLSAgLy8gY2FuIGJlIHN0b3JlZCBpbiBhIDY0LWJpdCBmbG9hdGluZyBw
b2ludCBudW1iZXIuCi0gIHZhciBkaWdpdEEgPSBsb3cgKyAobWlkICogNjc3NzIxNikgKyAoaGln
aCAqIDY3MTA2NTYpOwotICB2YXIgZGlnaXRCID0gbWlkICsgKGhpZ2ggKiA4MTQ3NDk3KTsKLSAg
dmFyIGRpZ2l0QyA9IChoaWdoICogMik7Ci0KLSAgLy8gQXBwbHkgY2FycmllcyBmcm9tIEEgdG8g
QiBhbmQgZnJvbSBCIHRvIEMuCi0gIHZhciBiYXNlID0gMTAwMDAwMDA7Ci0gIGlmIChkaWdpdEEg
Pj0gYmFzZSkgewotICAgIGRpZ2l0QiArPSBNYXRoLmZsb29yKGRpZ2l0QSAvIGJhc2UpOwotICAg
IGRpZ2l0QSAlPSBiYXNlOwotICB9Ci0KLSAgaWYgKGRpZ2l0QiA+PSBiYXNlKSB7Ci0gICAgZGln
aXRDICs9IE1hdGguZmxvb3IoZGlnaXRCIC8gYmFzZSk7Ci0gICAgZGlnaXRCICU9IGJhc2U7Ci0g
IH0KLQotICAvLyBDb252ZXJ0IGJhc2UtMWU3IGRpZ2l0cyB0byBiYXNlLTEwLCBvbWl0dGluZyBs
ZWFkaW5nIHplcm9lcy4KLSAgdmFyIHRhYmxlID0ganNwYi51dGlscy5ESUdJVFM7Ci0gIHZhciBz
dGFydCA9IGZhbHNlOwotICB2YXIgcmVzdWx0ID0gJyc7Ci0KLSAgZnVuY3Rpb24gZW1pdChkaWdp
dCkgewotICAgIHZhciB0ZW1wID0gYmFzZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDc7IGkr
KykgewotICAgICAgdGVtcCAvPSAxMDsKLSAgICAgIHZhciBkZWNpbWFsRGlnaXQgPSAoKGRpZ2l0
IC8gdGVtcCkgJSAxMCkgPj4+IDA7Ci0gICAgICBpZiAoKGRlY2ltYWxEaWdpdCA9PSAwKSAmJiAh
c3RhcnQpIGNvbnRpbnVlOwotICAgICAgc3RhcnQgPSB0cnVlOwotICAgICAgcmVzdWx0ICs9IHRh
YmxlW2RlY2ltYWxEaWdpdF07Ci0gICAgfQotICB9Ci0KLSAgaWYgKGRpZ2l0QyB8fCBzdGFydCkg
ZW1pdChkaWdpdEMpOwotICBpZiAoZGlnaXRCIHx8IHN0YXJ0KSBlbWl0KGRpZ2l0Qik7Ci0gIGlm
IChkaWdpdEEgfHwgc3RhcnQpIGVtaXQoZGlnaXRBKTsKLQotICByZXR1cm4gcmVzdWx0OwotfTsK
LQotCi0vKioKLSAqIExvc3NsZXNzbHkgY29udmVydHMgYSA2NC1iaXQgc2lnbmVkIGludGVnZXIg
aW4gMzI6MzIgc3BsaXQgcmVwcmVzZW50YXRpb24KLSAqIGludG8gYSBkZWNpbWFsIHN0cmluZy4K
LSAqIEBwYXJhbSB7bnVtYmVyfSBiaXRzTG93IFRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmluYXJ5
IG51bWJlcjsKLSAqIEBwYXJhbSB7bnVtYmVyfSBiaXRzSGlnaCBUaGUgaGlnaCAzMiBiaXRzIG9m
IHRoZSBiaW5hcnkgbnVtYmVyLgotICogQHJldHVybiB7c3RyaW5nfSBUaGUgYmluYXJ5IG51bWJl
ciByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4KLSAqLwotanNwYi51dGlscy5qb2luU2lnbmVkRGVj
aW1hbFN0cmluZyA9IGZ1bmN0aW9uKGJpdHNMb3csIGJpdHNIaWdoKSB7Ci0gIC8vIElmIHdlJ3Jl
IHRyZWF0aW5nIHRoZSBpbnB1dCBhcyBhIHNpZ25lZCB2YWx1ZSBhbmQgdGhlIGhpZ2ggYml0IGlz
IHNldCwgZG8KLSAgLy8gYSBtYW51YWwgdHdvJ3MgY29tcGxlbWVudCBjb252ZXJzaW9uIGJlZm9y
ZSB0aGUgZGVjaW1hbCBjb252ZXJzaW9uLgotICB2YXIgbmVnYXRpdmUgPSAoYml0c0hpZ2ggJiAw
eDgwMDAwMDAwKTsKLSAgaWYgKG5lZ2F0aXZlKSB7Ci0gICAgYml0c0xvdyA9ICh+Yml0c0xvdyAr
IDEpID4+PiAwOwotICAgIHZhciBjYXJyeSA9IChiaXRzTG93ID09IDApID8gMSA6IDA7Ci0gICAg
Yml0c0hpZ2ggPSAofmJpdHNIaWdoICsgY2FycnkpID4+PiAwOwotICB9Ci0KLSAgdmFyIHJlc3Vs
dCA9IGpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyhiaXRzTG93LCBiaXRzSGln
aCk7Ci0gIHJldHVybiBuZWdhdGl2ZSA/ICctJyArIHJlc3VsdCA6IHJlc3VsdDsKLX07Ci0KLQot
LyoqCi0gKiBDb252ZXJ0IGFuIDgtY2hhcmFjdGVyIGhhc2ggc3RyaW5nIHJlcHJlc2VudGluZyBl
aXRoZXIgYSBzaWduZWQgb3IgdW5zaWduZWQKLSAqIDY0LWJpdCBpbnRlZ2VyIGludG8gaXRzIGRl
Y2ltYWwgcmVwcmVzZW50YXRpb24gd2l0aG91dCBsb3NpbmcgYWNjdXJhY3kuCi0gKiBAcGFyYW0g
e3N0cmluZ30gaGFzaCBUaGUgaGFzaCBzdHJpbmcgdG8gY29udmVydC4KLSAqIEBwYXJhbSB7Ym9v
bGVhbn0gc2lnbmVkIFRydWUgaWYgd2Ugc2hvdWxkIHRyZWF0IHRoZSBoYXNoIHN0cmluZyBhcyBl
bmNvZGluZwotICogICAgIGEgc2lnbmVkIGludGVnZXIuCi0gKiBAcmV0dXJuIHtzdHJpbmd9Ci0g
Ki8KLWpzcGIudXRpbHMuaGFzaDY0VG9EZWNpbWFsU3RyaW5nID0gZnVuY3Rpb24oaGFzaCwgc2ln
bmVkKSB7Ci0gIGpzcGIudXRpbHMuc3BsaXRIYXNoNjQoaGFzaCk7Ci0gIHZhciBiaXRzTG93ID0g
anNwYi51dGlscy5zcGxpdDY0TG93OwotICB2YXIgYml0c0hpZ2ggPSBqc3BiLnV0aWxzLnNwbGl0
NjRIaWdoOwotICByZXR1cm4gc2lnbmVkID8KLSAgICAgIGpzcGIudXRpbHMuam9pblNpZ25lZERl
Y2ltYWxTdHJpbmcoYml0c0xvdywgYml0c0hpZ2gpIDoKLSAgICAgIGpzcGIudXRpbHMuam9pblVu
c2lnbmVkRGVjaW1hbFN0cmluZyhiaXRzTG93LCBiaXRzSGlnaCk7Ci19OwotCi0KLS8qKgotICog
Q29udmVydHMgYW4gYXJyYXkgb2YgOC1jaGFyYWN0ZXIgaGFzaCBzdHJpbmdzIGludG8gdGhlaXIg
ZGVjaW1hbAotICogcmVwcmVzZW50YXRpb25zLgotICogQHBhcmFtIHshQXJyYXkuPHN0cmluZz59
IGhhc2hlcyBUaGUgYXJyYXkgb2YgaGFzaCBzdHJpbmdzIHRvIGNvbnZlcnQuCi0gKiBAcGFyYW0g
e2Jvb2xlYW59IHNpZ25lZCBUcnVlIGlmIHdlIHNob3VsZCB0cmVhdCB0aGUgaGFzaCBzdHJpbmcg
YXMgZW5jb2RpbmcKLSAqICAgICBhIHNpZ25lZCBpbnRlZ2VyLgotICogQHJldHVybiB7IUFycmF5
LjxzdHJpbmc+fQotICovCi1qc3BiLnV0aWxzLmhhc2g2NEFycmF5VG9EZWNpbWFsU3RyaW5ncyA9
IGZ1bmN0aW9uKGhhc2hlcywgc2lnbmVkKSB7Ci0gIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoaGFz
aGVzLmxlbmd0aCk7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgaGFzaGVzLmxlbmd0aDsgaSsrKSB7
Ci0gICAgcmVzdWx0W2ldID0ganNwYi51dGlscy5oYXNoNjRUb0RlY2ltYWxTdHJpbmcoaGFzaGVz
W2ldLCBzaWduZWQpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19OwotCi0KLS8qKgotICogQ29u
dmVydHMgYSBzaWduZWQgb3IgdW5zaWduZWQgZGVjaW1hbCBzdHJpbmcgaW50byBpdHMgaGFzaCBz
dHJpbmcKLSAqIHJlcHJlc2VudGF0aW9uLgotICogQHBhcmFtIHtzdHJpbmd9IGRlYwotICogQHJl
dHVybiB7c3RyaW5nfQotICovCi1qc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NCA9IGZ1
bmN0aW9uKGRlYykgewotICBnb29nLmFzc2VydHMuYXNzZXJ0KGRlYy5sZW5ndGggPiAwKTsKLQot
ICAvLyBDaGVjayBmb3IgbWludXMgc2lnbi4KLSAgdmFyIG1pbnVzID0gZmFsc2U7Ci0gIGlmIChk
ZWNbMF0gPT09ICctJykgewotICAgIG1pbnVzID0gdHJ1ZTsKLSAgICBkZWMgPSBkZWMuc2xpY2Uo
MSk7Ci0gIH0KLQotICAvLyBTdG9yZSByZXN1bHQgYXMgYSBieXRlIGFycmF5LgotICB2YXIgcmVz
dWx0Qnl0ZXMgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07Ci0KLSAgLy8gU2V0IHJlc3VsdCB0
byBtKnJlc3VsdCArIGMuCi0gIGZ1bmN0aW9uIG11bGFkZChtLCBjKSB7Ci0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCA4ICYmIChtICE9PSAxIHx8IGMgPiAwKTsgaSsrKSB7Ci0gICAgICB2YXIgciA9
IG0gKiByZXN1bHRCeXRlc1tpXSArIGM7Ci0gICAgICByZXN1bHRCeXRlc1tpXSA9IHIgJiAweEZG
OwotICAgICAgYyA9IHIgPj4+IDg7Ci0gICAgfQotICB9Ci0KLSAgLy8gTmVnYXRlIHRoZSByZXN1
bHQgYml0cy4KLSAgZnVuY3Rpb24gbmVnKCkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsg
aSsrKSB7Ci0gICAgICByZXN1bHRCeXRlc1tpXSA9ICh+cmVzdWx0Qnl0ZXNbaV0pICYgMHhGRjsK
LSAgICB9Ci0gIH0KLQotICAvLyBGb3IgZWFjaCBkZWNpbWFsIGRpZ2l0LCBzZXQgcmVzdWx0IHRv
IDEwKnJlc3VsdCArIGRpZ2l0LgotICBmb3IgKHZhciBpID0gMDsgaSA8IGRlYy5sZW5ndGg7IGkr
KykgewotICAgIG11bGFkZCgxMCwganNwYi51dGlscy5ESUdJVFMuaW5kZXhPZihkZWNbaV0pKTsK
LSAgfQotCi0gIC8vIElmIHRoZXJlJ3MgYSBtaW51cyBzaWduLCBjb252ZXJ0IGludG8gdHdvJ3Mg
Y29tcGxlbWVudC4KLSAgaWYgKG1pbnVzKSB7Ci0gICAgbmVnKCk7Ci0gICAgbXVsYWRkKDEsIDEp
OwotICB9Ci0KLSAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcmVzdWx0
Qnl0ZXMpOwotfTsKLQotCi0vKioKLSAqIENvbnZlcnRzIGFuIDgtY2hhcmFjdGVyIGhhc2ggc3Ry
aW5nIGludG8gaXRzIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgotICogQHBhcmFtIHtzdHJp
bmd9IGhhc2gKLSAqIEByZXR1cm4ge3N0cmluZ30KLSAqLwotanNwYi51dGlscy5oYXNoNjRUb0hl
eFN0cmluZyA9IGZ1bmN0aW9uKGhhc2gpIHsKLSAgdmFyIHRlbXAgPSBuZXcgQXJyYXkoMTgpOwot
ICB0ZW1wWzBdID0gJzAnOwotICB0ZW1wWzFdID0gJ3gnOwotCi0gIGZvciAodmFyIGkgPSAwOyBp
IDwgODsgaSsrKSB7Ci0gICAgdmFyIGMgPSBoYXNoLmNoYXJDb2RlQXQoNyAtIGkpOwotICAgIHRl
bXBbaSAqIDIgKyAyXSA9IGpzcGIudXRpbHMuRElHSVRTW2MgPj4gNF07Ci0gICAgdGVtcFtpICog
MiArIDNdID0ganNwYi51dGlscy5ESUdJVFNbYyAmIDB4Rl07Ci0gIH0KLQotICB2YXIgcmVzdWx0
ID0gdGVtcC5qb2luKCcnKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX07Ci0KLQotLyoqCi0gKiBDb252
ZXJ0cyBhICcweDwxNiBkaWdpdHM+JyBoZXggc3RyaW5nIGludG8gaXRzIGhhc2ggc3RyaW5nIHJl
cHJlc2VudGF0aW9uLgotICogQHBhcmFtIHtzdHJpbmd9IGhleAotICogQHJldHVybiB7c3RyaW5n
fQotICovCi1qc3BiLnV0aWxzLmhleFN0cmluZ1RvSGFzaDY0ID0gZnVuY3Rpb24oaGV4KSB7Ci0g
IGhleCA9IGhleC50b0xvd2VyQ2FzZSgpOwotICBnb29nLmFzc2VydHMuYXNzZXJ0KGhleC5sZW5n
dGggPT0gMTgpOwotICBnb29nLmFzc2VydHMuYXNzZXJ0KGhleFswXSA9PSAnMCcpOwotICBnb29n
LmFzc2VydHMuYXNzZXJ0KGhleFsxXSA9PSAneCcpOwotCi0gIHZhciByZXN1bHQgPSAnJzsKLSAg
Zm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICB2YXIgaGkgPSBqc3BiLnV0aWxzLkRJ
R0lUUy5pbmRleE9mKGhleFtpICogMiArIDJdKTsKLSAgICB2YXIgbG8gPSBqc3BiLnV0aWxzLkRJ
R0lUUy5pbmRleE9mKGhleFtpICogMiArIDNdKTsKLSAgICByZXN1bHQgPSBTdHJpbmcuZnJvbUNo
YXJDb2RlKGhpICogMTYgKyBsbykgKyByZXN1bHQ7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0Owot
fTsKLQotCi0vKioKLSAqIENvbnZlcnQgYW4gOC1jaGFyYWN0ZXIgaGFzaCBzdHJpbmcgcmVwcmVz
ZW50aW5nIGVpdGhlciBhIHNpZ25lZCBvciB1bnNpZ25lZAotICogNjQtYml0IGludGVnZXIgaW50
byBhIEphdmFzY3JpcHQgbnVtYmVyLiBXaWxsIGxvc2UgYWNjdXJhY3kgaWYgdGhlIHJlc3VsdCBp
cwotICogbGFyZ2VyIHRoYW4gMl41Mi4KLSAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIFRoZSBoYXNo
IHN0cmluZyB0byBjb252ZXJ0LgotICogQHBhcmFtIHtib29sZWFufSBzaWduZWQgVHJ1ZSBpZiB0
aGUgaGFzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIHNpZ25lZAotICogICAgIG51bWJlci4K
LSAqIEByZXR1cm4ge251bWJlcn0KLSAqLwotanNwYi51dGlscy5oYXNoNjRUb051bWJlciA9IGZ1
bmN0aW9uKGhhc2gsIHNpZ25lZCkgewotICBqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGhhc2gpOwot
ICB2YXIgYml0c0xvdyA9IGpzcGIudXRpbHMuc3BsaXQ2NExvdzsKLSAgdmFyIGJpdHNIaWdoID0g
anNwYi51dGlscy5zcGxpdDY0SGlnaDsKLSAgcmV0dXJuIHNpZ25lZCA/IGpzcGIudXRpbHMuam9p
bkludDY0KGJpdHNMb3csIGJpdHNIaWdoKSA6Ci0gICAgICAgICAgICAgICAgICBqc3BiLnV0aWxz
LmpvaW5VaW50NjQoYml0c0xvdywgYml0c0hpZ2gpOwotfTsKLQotCi0vKioKLSAqIENvbnZlcnQg
YSBKYXZhc2NyaXB0IG51bWJlciBpbnRvIGFuIDgtY2hhcmFjdGVyIGhhc2ggc3RyaW5nLiBXaWxs
IGxvc2UKLSAqIHByZWNpc2lvbiBpZiB0aGUgdmFsdWUgaXMgbm9uLWludGVncmFsIG9yIGdyZWF0
ZXIgdGhhbiAyXjY0LgotICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSBpbnRlZ2VyIHRvIGNv
bnZlcnQuCi0gKiBAcmV0dXJuIHtzdHJpbmd9Ci0gKi8KLWpzcGIudXRpbHMubnVtYmVyVG9IYXNo
NjQgPSBmdW5jdGlvbih2YWx1ZSkgewotICBqc3BiLnV0aWxzLnNwbGl0SW50NjQodmFsdWUpOwot
ICByZXR1cm4ganNwYi51dGlscy5qb2luSGFzaDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKTsK
LX07Ci0KLQotLyoqCi0gKiBDb3VudHMgdGhlIG51bWJlciBvZiBjb250aWd1b3VzIHZhcmludHMg
aW4gYSBidWZmZXIuCi0gKiBAcGFyYW0geyFVaW50OEFycmF5fSBidWZmZXIgVGhlIGJ1ZmZlciB0
byBzY2FuLgotICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydGluZyBwb2ludCBpbiB0
aGUgYnVmZmVyIHRvIHNjYW4uCi0gKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgcG9pbnQg
aW4gdGhlIGJ1ZmZlciB0byBzY2FuLgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9m
IHZhcmludHMgaW4gdGhlIGJ1ZmZlci4KLSAqLwotanNwYi51dGlscy5jb3VudFZhcmludHMgPSBm
dW5jdGlvbihidWZmZXIsIHN0YXJ0LCBlbmQpIHsKLSAgLy8gQ291bnQgaG93IG1hbnkgaGlnaCBi
aXRzIG9mIGVhY2ggYnl0ZSB3ZXJlIHNldCBpbiB0aGUgYnVmZmVyLgotICB2YXIgY291bnQgPSAw
OwotICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotICAgIGNvdW50ICs9IGJ1
ZmZlcltpXSA+PiA3OwotICB9Ci0KLSAgLy8gVGhlIG51bWJlciBvZiB2YXJpbnRzIGluIHRoZSBi
dWZmZXIgZXF1YWxzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgbWludXMKLSAgLy8gdGhlIG51bWJl
ciBvZiBub24tdGVybWluYWwgYnl0ZXMgaW4gdGhlIGJ1ZmZlciAodGhvc2Ugd2l0aCB0aGUgaGln
aCBiaXQKLSAgLy8gc2V0KS4KLSAgcmV0dXJuIChlbmQgLSBzdGFydCkgLSBjb3VudDsKLX07Ci0K
LQotLyoqCi0gKiBDb3VudHMgdGhlIG51bWJlciBvZiBjb250aWd1b3VzIHZhcmludCBmaWVsZHMg
d2l0aCB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyIGluCi0gKiB0aGUgYnVmZmVyLgotICogQHBhcmFt
IHshVWludDhBcnJheX0gYnVmZmVyIFRoZSBidWZmZXIgdG8gc2Nhbi4KLSAqIEBwYXJhbSB7bnVt
YmVyfSBzdGFydCBUaGUgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGJ1ZmZlciB0byBzY2FuLgotICog
QHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIHBvaW50IGluIHRoZSBidWZmZXIgdG8gc2Nhbi4K
LSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyIHRvIGNvdW50LgotICog
QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1hdGNoaW5nIGZpZWxkcyBpbiB0aGUgYnVm
ZmVyLgotICovCi1qc3BiLnV0aWxzLmNvdW50VmFyaW50RmllbGRzID0gZnVuY3Rpb24oYnVmZmVy
LCBzdGFydCwgZW5kLCBmaWVsZCkgewotICB2YXIgY291bnQgPSAwOwotICB2YXIgY3Vyc29yID0g
c3RhcnQ7Ci0gIHZhciB0YWcgPSBmaWVsZCAqIDggKyBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJl
VHlwZS5WQVJJTlQ7Ci0KLSAgaWYgKHRhZyA8IDEyOCkgewotICAgIC8vIFNpbmdsZS1ieXRlIGZp
ZWxkIHRhZywgd2UgY2FuIHVzZSBhIHNsaWdodGx5IHF1aWNrZXIgY291bnQuCi0gICAgd2hpbGUg
KGN1cnNvciA8IGVuZCkgewotICAgICAgLy8gU2tpcCB0aGUgZmllbGQgdGFnLCBvciBleGl0IGlm
IHdlIGZpbmQgYSBub24tbWF0Y2hpbmcgdGFnLgotICAgICAgaWYgKGJ1ZmZlcltjdXJzb3IrK10g
IT0gdGFnKSByZXR1cm4gY291bnQ7Ci0KLSAgICAgIC8vIEZpZWxkIHRhZyBtYXRjaGVzLCB3ZSd2
ZSBmb3VuZCBhIHZhbGlkIGZpZWxkLgotICAgICAgY291bnQrKzsKLQotICAgICAgLy8gU2tpcCB0
aGUgdmFyaW50LgotICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgdmFyIHggPSBidWZmZXJbY3Vy
c29yKytdOwotICAgICAgICBpZiAoKHggJiAweDgwKSA9PSAwKSBicmVhazsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0gZWxzZSB7Ci0gICAgd2hpbGUgKGN1cnNvciA8IGVuZCkgewotICAgICAgLy8gU2tp
cCB0aGUgZmllbGQgdGFnLCBvciBleGl0IGlmIHdlIGZpbmQgYSBub24tbWF0Y2hpbmcgdGFnLgot
ICAgICAgdmFyIHRlbXAgPSB0YWc7Ci0gICAgICB3aGlsZSAodGVtcCA+IDEyOCkgewotICAgICAg
ICBpZiAoYnVmZmVyW2N1cnNvcl0gIT0gKCh0ZW1wICYgMHg3RikgfCAweDgwKSkgcmV0dXJuIGNv
dW50OwotICAgICAgICBjdXJzb3IrKzsKLSAgICAgICAgdGVtcCA+Pj0gNzsKLSAgICAgIH0KLSAg
ICAgIGlmIChidWZmZXJbY3Vyc29yKytdICE9IHRlbXApIHJldHVybiBjb3VudDsKLQotICAgICAg
Ly8gRmllbGQgdGFnIG1hdGNoZXMsIHdlJ3ZlIGZvdW5kIGEgdmFsaWQgZmllbGQuCi0gICAgICBj
b3VudCsrOwotCi0gICAgICAvLyBTa2lwIHRoZSB2YXJpbnQuCi0gICAgICB3aGlsZSAoMSkgewot
ICAgICAgICB2YXIgeCA9IGJ1ZmZlcltjdXJzb3IrK107Ci0gICAgICAgIGlmICgoeCAmIDB4ODAp
ID09IDApIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gY291bnQ7Ci19Owot
Ci0KLS8qKgotICogQ291bnRzIHRoZSBudW1iZXIgb2YgY29udGlndW91cyBmaXhlZDMyIGZpZWxk
cyB3aXRoIHRoZSBnaXZlbiB0YWcgaW4gdGhlCi0gKiBidWZmZXIuCi0gKiBAcGFyYW0geyFVaW50
OEFycmF5fSBidWZmZXIgVGhlIGJ1ZmZlciB0byBzY2FuLgotICogQHBhcmFtIHtudW1iZXJ9IHN0
YXJ0IFRoZSBzdGFydGluZyBwb2ludCBpbiB0aGUgYnVmZmVyIHRvIHNjYW4uCi0gKiBAcGFyYW0g
e251bWJlcn0gZW5kIFRoZSBlbmQgcG9pbnQgaW4gdGhlIGJ1ZmZlciB0byBzY2FuLgotICogQHBh
cmFtIHtudW1iZXJ9IHRhZyBUaGUgdGFnIHZhbHVlIHRvIGNvdW50LgotICogQHBhcmFtIHtudW1i
ZXJ9IHN0cmlkZSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgcGVyIGZpZWxkLgotICogQHJl
dHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGZpZWxkcyB3aXRoIGEgbWF0Y2hpbmcgdGFnIGlu
IHRoZSBidWZmZXIuCi0gKiBAcHJpdmF0ZQotICovCi1qc3BiLnV0aWxzLmNvdW50Rml4ZWRGaWVs
ZHNfID0KLSAgICBmdW5jdGlvbihidWZmZXIsIHN0YXJ0LCBlbmQsIHRhZywgc3RyaWRlKSB7Ci0g
IHZhciBjb3VudCA9IDA7Ci0gIHZhciBjdXJzb3IgPSBzdGFydDsKLQotICBpZiAodGFnIDwgMTI4
KSB7Ci0gICAgLy8gU2luZ2xlLWJ5dGUgZmllbGQgdGFnLCB3ZSBjYW4gdXNlIGEgc2xpZ2h0bHkg
cXVpY2tlciBjb3VudC4KLSAgICB3aGlsZSAoY3Vyc29yIDwgZW5kKSB7Ci0gICAgICAvLyBTa2lw
IHRoZSBmaWVsZCB0YWcsIG9yIGV4aXQgaWYgd2UgZmluZCBhIG5vbi1tYXRjaGluZyB0YWcuCi0g
ICAgICBpZiAoYnVmZmVyW2N1cnNvcisrXSAhPSB0YWcpIHJldHVybiBjb3VudDsKLQotICAgICAg
Ly8gRmllbGQgdGFnIG1hdGNoZXMsIHdlJ3ZlIGZvdW5kIGEgdmFsaWQgZmllbGQuCi0gICAgICBj
b3VudCsrOwotCi0gICAgICAvLyBTa2lwIHRoZSB2YWx1ZS4KLSAgICAgIGN1cnNvciArPSBzdHJp
ZGU7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHdoaWxlIChjdXJzb3IgPCBlbmQpIHsKLSAgICAg
IC8vIFNraXAgdGhlIGZpZWxkIHRhZywgb3IgZXhpdCBpZiB3ZSBmaW5kIGEgbm9uLW1hdGNoaW5n
IHRhZy4KLSAgICAgIHZhciB0ZW1wID0gdGFnOwotICAgICAgd2hpbGUgKHRlbXAgPiAxMjgpIHsK
LSAgICAgICAgaWYgKGJ1ZmZlcltjdXJzb3IrK10gIT0gKCh0ZW1wICYgMHg3RikgfCAweDgwKSkg
cmV0dXJuIGNvdW50OwotICAgICAgICB0ZW1wID4+PSA3OwotICAgICAgfQotICAgICAgaWYgKGJ1
ZmZlcltjdXJzb3IrK10gIT0gdGVtcCkgcmV0dXJuIGNvdW50OwotCi0gICAgICAvLyBGaWVsZCB0
YWcgbWF0Y2hlcywgd2UndmUgZm91bmQgYSB2YWxpZCBmaWVsZC4KLSAgICAgIGNvdW50Kys7Ci0K
LSAgICAgIC8vIFNraXAgdGhlIHZhbHVlLgotICAgICAgY3Vyc29yICs9IHN0cmlkZTsKLSAgICB9
Ci0gIH0KLSAgcmV0dXJuIGNvdW50OwotfTsKLQotCi0vKioKLSAqIENvdW50cyB0aGUgbnVtYmVy
IG9mIGNvbnRpZ3VvdXMgZml4ZWQzMiBmaWVsZHMgd2l0aCB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVy
Ci0gKiBpbiB0aGUgYnVmZmVyLgotICogQHBhcmFtIHshVWludDhBcnJheX0gYnVmZmVyIFRoZSBi
dWZmZXIgdG8gc2Nhbi4KLSAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnRpbmcgcG9p
bnQgaW4gdGhlIGJ1ZmZlciB0byBzY2FuLgotICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5k
IHBvaW50IGluIHRoZSBidWZmZXIgdG8gc2Nhbi4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBU
aGUgZmllbGQgbnVtYmVyIHRvIGNvdW50LgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVy
IG9mIG1hdGNoaW5nIGZpZWxkcyBpbiB0aGUgYnVmZmVyLgotICovCi1qc3BiLnV0aWxzLmNvdW50
Rml4ZWQzMkZpZWxkcyA9IGZ1bmN0aW9uKGJ1ZmZlciwgc3RhcnQsIGVuZCwgZmllbGQpIHsKLSAg
dmFyIHRhZyA9IGZpZWxkICogOCArIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVE
MzI7Ci0gIHJldHVybiBqc3BiLnV0aWxzLmNvdW50Rml4ZWRGaWVsZHNfKGJ1ZmZlciwgc3RhcnQs
IGVuZCwgdGFnLCA0KTsKLX07Ci0KLQotLyoqCi0gKiBDb3VudHMgdGhlIG51bWJlciBvZiBjb250
aWd1b3VzIGZpeGVkNjQgZmllbGRzIHdpdGggdGhlIGdpdmVuIGZpZWxkIG51bWJlcgotICogaW4g
dGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSB7IVVpbnQ4QXJyYXl9IGJ1ZmZlciBUaGUgYnVmZmVyIHRv
IHNjYW4uCi0gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0aW5nIHBvaW50IGluIHRo
ZSBidWZmZXIgdG8gc2Nhbi4KLSAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBwb2ludCBp
biB0aGUgYnVmZmVyIHRvIHNjYW4uCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxk
IG51bWJlciB0byBjb3VudAotICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1hdGNo
aW5nIGZpZWxkcyBpbiB0aGUgYnVmZmVyLgotICovCi1qc3BiLnV0aWxzLmNvdW50Rml4ZWQ2NEZp
ZWxkcyA9IGZ1bmN0aW9uKGJ1ZmZlciwgc3RhcnQsIGVuZCwgZmllbGQpIHsKLSAgdmFyIHRhZyA9
IGZpZWxkICogOCArIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQ7Ci0gIHJl
dHVybiBqc3BiLnV0aWxzLmNvdW50Rml4ZWRGaWVsZHNfKGJ1ZmZlciwgc3RhcnQsIGVuZCwgdGFn
LCA4KTsKLX07Ci0KLQotLyoqCi0gKiBDb3VudHMgdGhlIG51bWJlciBvZiBjb250aWd1b3VzIGRl
bGltaXRlZCBmaWVsZHMgd2l0aCB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyCi0gKiBpbiB0aGUgYnVm
ZmVyLgotICogQHBhcmFtIHshVWludDhBcnJheX0gYnVmZmVyIFRoZSBidWZmZXIgdG8gc2Nhbi4K
LSAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGJ1ZmZl
ciB0byBzY2FuLgotICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIHBvaW50IGluIHRoZSBi
dWZmZXIgdG8gc2Nhbi4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVy
IHRvIGNvdW50LgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1hdGNoaW5nIGZp
ZWxkcyBpbiB0aGUgYnVmZmVyLgotICovCi1qc3BiLnV0aWxzLmNvdW50RGVsaW1pdGVkRmllbGRz
ID0gZnVuY3Rpb24oYnVmZmVyLCBzdGFydCwgZW5kLCBmaWVsZCkgewotICB2YXIgY291bnQgPSAw
OwotICB2YXIgY3Vyc29yID0gc3RhcnQ7Ci0gIHZhciB0YWcgPSBmaWVsZCAqIDggKyBqc3BiLkJp
bmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQ7Ci0KLSAgd2hpbGUgKGN1cnNvciA8IGVu
ZCkgewotICAgIC8vIFNraXAgdGhlIGZpZWxkIHRhZywgb3IgZXhpdCBpZiB3ZSBmaW5kIGEgbm9u
LW1hdGNoaW5nIHRhZy4KLSAgICB2YXIgdGVtcCA9IHRhZzsKLSAgICB3aGlsZSAodGVtcCA+IDEy
OCkgewotICAgICAgaWYgKGJ1ZmZlcltjdXJzb3IrK10gIT0gKCh0ZW1wICYgMHg3RikgfCAweDgw
KSkgcmV0dXJuIGNvdW50OwotICAgICAgdGVtcCA+Pj0gNzsKLSAgICB9Ci0gICAgaWYgKGJ1ZmZl
cltjdXJzb3IrK10gIT0gdGVtcCkgcmV0dXJuIGNvdW50OwotCi0gICAgLy8gRmllbGQgdGFnIG1h
dGNoZXMsIHdlJ3ZlIGZvdW5kIGEgdmFsaWQgZmllbGQuCi0gICAgY291bnQrKzsKLQotICAgIC8v
IERlY29kZSB0aGUgbGVuZ3RoIHByZWZpeC4KLSAgICB2YXIgbGVuZ3RoID0gMDsKLSAgICB2YXIg
c2hpZnQgPSAxOwotICAgIHdoaWxlICgxKSB7Ci0gICAgICB0ZW1wID0gYnVmZmVyW2N1cnNvcisr
XTsKLSAgICAgIGxlbmd0aCArPSAodGVtcCAmIDB4N2YpICogc2hpZnQ7Ci0gICAgICBzaGlmdCAq
PSAxMjg7Ci0gICAgICBpZiAoKHRlbXAgJiAweDgwKSA9PSAwKSBicmVhazsKLSAgICB9Ci0KLSAg
ICAvLyBBZHZhbmNlIHRoZSBjdXJzb3IgcGFzdCB0aGUgYmxvYi4KLSAgICBjdXJzb3IgKz0gbGVu
Z3RoOwotICB9Ci0gIHJldHVybiBjb3VudDsKLX07Ci0KLQotLyoqCi0gKiBTdHJpbmctaWZ5IGJ5
dGVzIGZvciB0ZXh0IGZvcm1hdC4gU2hvdWxkIGJlIG9wdGltaXplZCBhd2F5IGluIG5vbi1kZWJ1
Zy4KLSAqIFRoZSByZXR1cm5lZCBzdHJpbmcgdXNlcyBceFhYIGVzY2FwZXMgZm9yIGFsbCB2YWx1
ZXMgYW5kIGlzIGl0c2VsZiBxdW90ZWQuCi0gKiBbMSwgMzFdIHNlcmlhbGl6ZXMgdG8gJyJceDAx
XHgxZiInLgotICogQHBhcmFtIHtqc3BiLkJ5dGVTb3VyY2V9IGJ5dGVTb3VyY2UgVGhlIGJ5dGVz
IHRvIHNlcmlhbGl6ZS4KLSAqIEByZXR1cm4ge3N0cmluZ30gU3RyaW5naWZpZWQgYnl0ZXMgZm9y
IHRleHQgZm9ybWF0LgotICovCi1qc3BiLnV0aWxzLmRlYnVnQnl0ZXNUb1RleHRGb3JtYXQgPSBm
dW5jdGlvbihieXRlU291cmNlKSB7Ci0gIHZhciBzID0gJyInOwotICBpZiAoYnl0ZVNvdXJjZSkg
ewotICAgIHZhciBieXRlcyA9IGpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheShieXRl
U291cmNlKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICBzICs9ICdcXHgnOwotICAgICAgaWYgKGJ5dGVzW2ldIDwgMTYpIHMgKz0gJzAnOwotICAg
ICAgcyArPSBieXRlc1tpXS50b1N0cmluZygxNik7Ci0gICAgfQotICB9Ci0gIHJldHVybiBzICsg
JyInOwotfTsKLQotCi0vKioKLSAqIFN0cmluZy1pZnkgYSBzY2FsYXIgZm9yIHRleHQgZm9ybWF0
LiBTaG91bGQgYmUgb3B0aW1pemVkIGF3YXkgaW4gbm9uLWRlYnVnLgotICogQHBhcmFtIHtzdHJp
bmd8bnVtYmVyfGJvb2xlYW59IHNjYWxhciBUaGUgc2NhbGFyIHRvIHN0cmluZ2lmeS4KLSAqIEBy
ZXR1cm4ge3N0cmluZ30gU3RyaW5naWZpZWQgc2NhbGFyIGZvciB0ZXh0IGZvcm1hdC4KLSAqLwot
anNwYi51dGlscy5kZWJ1Z1NjYWxhclRvVGV4dEZvcm1hdCA9IGZ1bmN0aW9uKHNjYWxhcikgewot
ICBpZiAoZ29vZy5pc1N0cmluZyhzY2FsYXIpKSB7Ci0gICAgcmV0dXJuIGdvb2cuc3RyaW5nLnF1
b3RlKHNjYWxhcik7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHNjYWxhci50b1N0cmluZygpOwot
ICB9Ci19OwotCi0KLS8qKgotICogVXRpbGl0eSBmdW5jdGlvbjogY29udmVydCBhIHN0cmluZyB3
aXRoIGNvZGVwb2ludHMgMC0tMjU1IGluY2x1c2l2ZSB0byBhCi0gKiBVaW50OEFycmF5LiBJZiBh
bnkgY29kZXBvaW50cyBncmVhdGVyIHRoYW4gMjU1IGV4aXN0IGluIHRoZSBzdHJpbmcsIHRocm93
cyBhbgotICogZXhjZXB0aW9uLgotICogQHBhcmFtIHtzdHJpbmd9IHN0cgotICogQHJldHVybiB7
IVVpbnQ4QXJyYXl9Ci0gKi8KLWpzcGIudXRpbHMuc3RyaW5nVG9CeXRlQXJyYXkgPSBmdW5jdGlv
bihzdHIpIHsKLSAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KHN0ci5sZW5ndGgpOwotICBmb3Ig
KHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgewotICAgIHZhciBjb2RlcG9pbnQgPSBz
dHIuY2hhckNvZGVBdChpKTsKLSAgICBpZiAoY29kZXBvaW50ID4gMjU1KSB7Ci0gICAgICB0aHJv
dyBuZXcgRXJyb3IoJ0NvbnZlcnNpb24gZXJyb3I6IHN0cmluZyBjb250YWlucyBjb2RlcG9pbnQg
JyArCi0gICAgICAgICAgICAgICAgICAgICAgJ291dHNpZGUgb2YgYnl0ZSByYW5nZScpOwotICAg
IH0KLSAgICBhcnJbaV0gPSBjb2RlcG9pbnQ7Ci0gIH0KLSAgcmV0dXJuIGFycjsKLX07Ci0KLQot
LyoqCi0gKiBDb252ZXJ0cyBhbnkgdHlwZSBkZWZpbmVkIGluIGpzcGIuQnl0ZVNvdXJjZSBpbnRv
IGEgVWludDhBcnJheS4KLSAqIEBwYXJhbSB7IWpzcGIuQnl0ZVNvdXJjZX0gZGF0YQotICogQHJl
dHVybiB7IVVpbnQ4QXJyYXl9Ci0gKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30KLSAqLwotanNw
Yi51dGlscy5ieXRlU291cmNlVG9VaW50OEFycmF5ID0gZnVuY3Rpb24oZGF0YSkgewotICBpZiAo
ZGF0YS5jb25zdHJ1Y3RvciA9PT0gVWludDhBcnJheSkgewotICAgIHJldHVybiAvKiogQHR5cGUg
eyFVaW50OEFycmF5fSAqLyhkYXRhKTsKLSAgfQotCi0gIGlmIChkYXRhLmNvbnN0cnVjdG9yID09
PSBBcnJheUJ1ZmZlcikgewotICAgIGRhdGEgPSAvKiogQHR5cGUgeyFBcnJheUJ1ZmZlcn0gKi8o
ZGF0YSk7Ci0gICAgcmV0dXJuIC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovKG5ldyBVaW50OEFy
cmF5KGRhdGEpKTsKLSAgfQotCi0gIGlmIChkYXRhLmNvbnN0cnVjdG9yID09PSBBcnJheSkgewot
ICAgIGRhdGEgPSAvKiogQHR5cGUgeyFBcnJheS48bnVtYmVyPn0gKi8oZGF0YSk7Ci0gICAgcmV0
dXJuIC8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovKG5ldyBVaW50OEFycmF5KGRhdGEpKTsKLSAg
fQotCi0gIGlmIChkYXRhLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHsKLSAgICBkYXRhID0gLyoq
IEB0eXBlIHtzdHJpbmd9ICovKGRhdGEpOwotICAgIHJldHVybiBnb29nLmNyeXB0LmJhc2U2NC5k
ZWNvZGVTdHJpbmdUb1VpbnQ4QXJyYXkoZGF0YSk7Ci0gIH0KLQotICBnb29nLmFzc2VydHMuZmFp
bCgnVHlwZSBub3QgY29udmVydGlibGUgdG8gVWludDhBcnJheS4nKTsKLSAgcmV0dXJuIC8qKiBA
dHlwZSB7IVVpbnQ4QXJyYXl9ICovKG5ldyBVaW50OEFycmF5KDApKTsKLX07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2pzL2JpbmFyeS91dGlsc190ZXN0LmpzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9iaW5hcnkvdXRpbHNfdGVzdC5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZTVlYTJjNjMwNTNkZGEyMmVhZTI3MWI4MTNhNjRh
MWRkY2EzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pz
L2JpbmFyeS91dGlsc190ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjY4ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vKioKLSAqIEBmaWxlb3ZlcnZpZXcg
VGVzdCBjYXNlcyBmb3IganNwYidzIGhlbHBlciBmdW5jdGlvbnMuCi0gKgotICogVGVzdCBzdWl0
ZSBpcyB3cml0dGVuIHVzaW5nIEphc21pbmUgLS0gc2VlIGh0dHA6Ly9qYXNtaW5lLmdpdGh1Yi5p
by8KLSAqCi0gKiBAYXV0aG9yIGFhcHBsZWJ5QGdvb2dsZS5jb20gKEF1c3RpbiBBcHBsZWJ5KQot
ICovCi0KLWdvb2cucmVxdWlyZSgnZ29vZy5jcnlwdC5iYXNlNjQnKTsKLWdvb2cucmVxdWlyZSgn
Z29vZy50ZXN0aW5nLmFzc2VydHMnKTsKLWdvb2cucmVxdWlyZSgnanNwYi5CaW5hcnlDb25zdGFu
dHMnKTsKLWdvb2cucmVxdWlyZSgnanNwYi5CaW5hcnlXcml0ZXInKTsKLWdvb2cucmVxdWlyZSgn
anNwYi51dGlscycpOwotCi0KLS8qKgotICogQHBhcmFtIHtudW1iZXJ9IHgKLSAqIEByZXR1cm4g
e251bWJlcn0KLSAqLwotZnVuY3Rpb24gdHJ1bmNhdGUoeCkgewotICB2YXIgdGVtcCA9IG5ldyBG
bG9hdDMyQXJyYXkoMSk7Ci0gIHRlbXBbMF0gPSB4OwotICByZXR1cm4gdGVtcFswXTsKLX0KLQot
Ci0vKioKLSAqIENvbnZlcnRzIGFuIDY0LWJpdCBpbnRlZ2VyIGluIHNwbGl0IHJlcHJlc2VudGF0
aW9uIHRvIGEgNjQtYml0IGhhc2ggc3RyaW5nCi0gKiAoOCBiaXRzIGVuY29kZWQgcGVyIGNoYXJh
Y3RlcikuCi0gKiBAcGFyYW0ge251bWJlcn0gYml0c0xvdyBUaGUgbG93IDMyIGJpdHMgb2YgdGhl
IHNwbGl0IDY0LWJpdCBpbnRlZ2VyLgotICogQHBhcmFtIHtudW1iZXJ9IGJpdHNIaWdoIFRoZSBo
aWdoIDMyIGJpdHMgb2YgdGhlIHNwbGl0IDY0LWJpdCBpbnRlZ2VyLgotICogQHJldHVybiB7c3Ry
aW5nfSBUaGUgZW5jb2RlZCBoYXNoIHN0cmluZywgOCBiaXRzIHBlciBjaGFyYWN0ZXIuCi0gKi8K
LWZ1bmN0aW9uIHRvSGFzaFN0cmluZyhiaXRzTG93LCBiaXRzSGlnaCkgewotICByZXR1cm4gU3Ry
aW5nLmZyb21DaGFyQ29kZSgoYml0c0xvdyA+Pj4gMCkgJiAweEZGLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoYml0c0xvdyA+Pj4gOCkgJiAweEZGLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoYml0c0xvdyA+Pj4gMTYpICYgMHhGRiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGJpdHNMb3cgPj4+IDI0KSAmIDB4RkYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChiaXRzSGlnaCA+Pj4gMCkgJiAweEZGLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoYml0c0hpZ2ggPj4+IDgpICYgMHhGRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGJpdHNIaWdoID4+PiAxNikgJiAweEZGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoYml0c0hpZ2ggPj4+IDI0KSAmIDB4RkYpOwotfQotCi0KLWRlc2NyaWJlKCdiaW5hcnlVdGls
c1Rlc3QnLCBmdW5jdGlvbigpIHsKLSAgLyoqCi0gICAqIFRlc3RzIGxvc3NsZXNzIGJpbmFyeS10
by1kZWNpbWFsIGNvbnZlcnNpb24uCi0gICAqLwotICBpdCgndGVzdERlY2ltYWxDb252ZXJzaW9u
JywgZnVuY3Rpb24oKSB7Ci0gICAgLy8gQ2hlY2sgc29tZSBtYWdpYyBudW1iZXJzLgotICAgIHZh
ciByZXN1bHQgPQotICAgICAgICBqc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmco
MHg4OWU4MDAwMSwgMHg4YWM3MjMwNCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCcxMDAwMDAwMDAwMDAw
MDAwMDAwMScsIHJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBqc3BiLnV0aWxzLmpvaW5VbnNpZ25l
ZERlY2ltYWxTdHJpbmcoMHhhY2QwNWYxNSwgMHgxYjY5YjRiKTsKLSAgICBhc3NlcnRFcXVhbHMo
JzEyMzQ1Njc4OTEyMzQ1Njc4OScsIHJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBqc3BiLnV0aWxz
LmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmcoMHhlYjFmMGFkMiwgMHhhYjU0YTk4Yyk7Ci0gICAg
YXNzZXJ0RXF1YWxzKCcxMjM0NTY3ODkwMTIzNDU2Nzg5MCcsIHJlc3VsdCk7Ci0KLSAgICByZXN1
bHQgPSBqc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmcoMHhlM2I3MGNiMSwgMHg4
OTEwODdiOCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCc5ODc2NTQzMjEwOTg3NjU0MzIxJywgcmVzdWx0
KTsKLQotICAgIC8vIENoZWNrIGxpbWl0cy4KLSAgICByZXN1bHQgPSBqc3BiLnV0aWxzLmpvaW5V
bnNpZ25lZERlY2ltYWxTdHJpbmcoMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKCcwJywgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGpzcGIudXRpbHMuam9pblVuc2ln
bmVkRGVjaW1hbFN0cmluZygweEZGRkZGRkZGLCAweEZGRkZGRkZGKTsKLSAgICBhc3NlcnRFcXVh
bHMoJzE4NDQ2NzQ0MDczNzA5NTUxNjE1JywgcmVzdWx0KTsKLQotICAgIC8vIENoZWNrIGVhY2gg
Yml0IG9mIHRoZSBsb3cgZHdvcmQuCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSB7
Ci0gICAgICB2YXIgbG93ID0gKDEgPDwgaSkgPj4+IDA7Ci0gICAgICByZXN1bHQgPSBqc3BiLnV0
aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmcobG93LCAwKTsKLSAgICAgIGFzc2VydEVxdWFs
cygnJyArIE1hdGgucG93KDIsIGkpLCByZXN1bHQpOwotICAgIH0KLQotICAgIC8vIENoZWNrIHRo
ZSBmaXJzdCAyMCBiaXRzIG9mIHRoZSBoaWdoIGR3b3JkLgotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMjA7IGkrKykgewotICAgICAgdmFyIGhpZ2ggPSAoMSA8PCBpKSA+Pj4gMDsKLSAgICAgIHJl
c3VsdCA9IGpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZygwLCBoaWdoKTsKLSAg
ICAgIGFzc2VydEVxdWFscygnJyArIE1hdGgucG93KDIsIDMyICsgaSksIHJlc3VsdCk7Ci0gICAg
fQotCi0gICAgLy8gVjgncyBpbnRlcm5hbCBkb3VibGUtdG8tc3RyaW5nIGNvbnZlcnNpb24gaXMg
aW5hY2N1cmF0ZSBmb3IgdmFsdWVzIGFib3ZlCi0gICAgLy8gMl41MiwgZXZlbiBpZiB0aGV5J3Jl
IHJlcHJlc2VudGFibGUgaW50ZWdlcnMgLSBjaGVjayB0aGUgcmVzdCBvZiB0aGUgYml0cwotICAg
IC8vIG1hbnVhbGx5IGFnYWluc3QgdGhlIGNvcnJlY3Qgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBv
ZiAyXk4uCi0KLSAgICByZXN1bHQgPSBqc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJp
bmcoMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCc0NTAzNTk5NjI3
MzcwNDk2JywgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGpzcGIudXRpbHMuam9pblVuc2lnbmVk
RGVjaW1hbFN0cmluZygweDAwMDAwMDAwLCAweDAwMjAwMDAwKTsKLSAgICBhc3NlcnRFcXVhbHMo
JzkwMDcxOTkyNTQ3NDA5OTInLCByZXN1bHQpOwotCi0gICAgcmVzdWx0ID0ganNwYi51dGlscy5q
b2luVW5zaWduZWREZWNpbWFsU3RyaW5nKDB4MDAwMDAwMDAsIDB4MDA0MDAwMDApOwotICAgIGFz
c2VydEVxdWFscygnMTgwMTQzOTg1MDk0ODE5ODQnLCByZXN1bHQpOwotCi0gICAgcmVzdWx0ID0g
anNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKDB4MDAwMDAwMDAsIDB4MDA4MDAw
MDApOwotICAgIGFzc2VydEVxdWFscygnMzYwMjg3OTcwMTg5NjM5NjgnLCByZXN1bHQpOwotCi0g
ICAgcmVzdWx0ID0ganNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKDB4MDAwMDAw
MDAsIDB4MDEwMDAwMDApOwotICAgIGFzc2VydEVxdWFscygnNzIwNTc1OTQwMzc5Mjc5MzYnLCBy
ZXN1bHQpOwotCi0gICAgcmVzdWx0ID0ganNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3Ry
aW5nKDB4MDAwMDAwMDAsIDB4MDIwMDAwMDApOwotICAgIGFzc2VydEVxdWFscygnMTQ0MTE1MTg4
MDc1ODU1ODcyJywgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGpzcGIudXRpbHMuam9pblVuc2ln
bmVkRGVjaW1hbFN0cmluZygweDAwMDAwMDAwLCAweDA0MDAwMDAwKTsKLSAgICBhc3NlcnRFcXVh
bHMoJzI4ODIzMDM3NjE1MTcxMTc0NCcsIHJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBqc3BiLnV0
aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmcoMHgwMDAwMDAwMCwgMHgwODAwMDAwMCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKCc1NzY0NjA3NTIzMDM0MjM0ODgnLCByZXN1bHQpOwotCi0gICAgcmVz
dWx0ID0ganNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKDB4MDAwMDAwMDAsIDB4
MTAwMDAwMDApOwotICAgIGFzc2VydEVxdWFscygnMTE1MjkyMTUwNDYwNjg0Njk3NicsIHJlc3Vs
dCk7Ci0KLSAgICByZXN1bHQgPSBqc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmco
MHgwMDAwMDAwMCwgMHgyMDAwMDAwMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCcyMzA1ODQzMDA5MjEz
NjkzOTUyJywgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGpzcGIudXRpbHMuam9pblVuc2lnbmVk
RGVjaW1hbFN0cmluZygweDAwMDAwMDAwLCAweDQwMDAwMDAwKTsKLSAgICBhc3NlcnRFcXVhbHMo
JzQ2MTE2ODYwMTg0MjczODc5MDQnLCByZXN1bHQpOwotCi0gICAgcmVzdWx0ID0ganNwYi51dGls
cy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKDB4MDAwMDAwMDAsIDB4ODAwMDAwMDApOwotICAg
IGFzc2VydEVxdWFscygnOTIyMzM3MjAzNjg1NDc3NTgwOCcsIHJlc3VsdCk7Ci0gIH0pOwotCi0K
LSAgLyoqCi0gICAqIEdvaW5nIGZyb20gaGFzaCBzdHJpbmdzIHRvIGRlY2ltYWwgc3RyaW5ncyBz
aG91bGQgYWxzbyBiZSBsb3NzbGVzcy4KLSAgICovCi0gIGl0KCd0ZXN0SGFzaFRvRGVjaW1hbENv
bnZlcnNpb24nLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0OwotICAgIHZhciBjb252ZXJ0
ID0ganNwYi51dGlscy5oYXNoNjRUb0RlY2ltYWxTdHJpbmc7Ci0KLSAgICByZXN1bHQgPSBjb252
ZXJ0KHRvSGFzaFN0cmluZygweDAwMDAwMDAwLCAweDAwMDAwMDAwKSwgZmFsc2UpOwotICAgIGFz
c2VydEVxdWFscygnMCcsIHJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBjb252ZXJ0KHRvSGFzaFN0
cmluZygweDAwMDAwMDAwLCAweDAwMDAwMDAwKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCcw
JywgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGNvbnZlcnQodG9IYXNoU3RyaW5nKDB4RkZGRkZG
RkYsIDB4RkZGRkZGRkYpLCBmYWxzZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCcxODQ0Njc0NDA3Mzcw
OTU1MTYxNScsIHJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBjb252ZXJ0KHRvSGFzaFN0cmluZygw
eEZGRkZGRkZGLCAweEZGRkZGRkZGKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCctMScsIHJl
c3VsdCk7Ci0KLSAgICByZXN1bHQgPSBjb252ZXJ0KHRvSGFzaFN0cmluZygweDAwMDAwMDAwLCAw
eDgwMDAwMDAwKSwgZmFsc2UpOwotICAgIGFzc2VydEVxdWFscygnOTIyMzM3MjAzNjg1NDc3NTgw
OCcsIHJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBjb252ZXJ0KHRvSGFzaFN0cmluZygweDAwMDAw
MDAwLCAweDgwMDAwMDAwKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCctOTIyMzM3MjAzNjg1
NDc3NTgwOCcsIHJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBjb252ZXJ0KHRvSGFzaFN0cmluZygw
eGFjZDA1ZjE1LCAweDAxYjY5YjRiKSwgZmFsc2UpOwotICAgIGFzc2VydEVxdWFscygnMTIzNDU2
Nzg5MTIzNDU2Nzg5JywgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGNvbnZlcnQodG9IYXNoU3Ry
aW5nKH4weGFjZDA1ZjE1ICsgMSwgfjB4MDFiNjliNGIpLCB0cnVlKTsKLSAgICBhc3NlcnRFcXVh
bHMoJy0xMjM0NTY3ODkxMjM0NTY3ODknLCByZXN1bHQpOwotCi0gICAgLy8gQW5kIGNvbnZlcnRp
bmcgYXJyYXlzIG9mIGhhc2hlcyBzaG91bGQgd29yayB0aGUgc2FtZSB3YXkuCi0gICAgcmVzdWx0
ID0ganNwYi51dGlscy5oYXNoNjRBcnJheVRvRGVjaW1hbFN0cmluZ3MoWwotICAgICAgdG9IYXNo
U3RyaW5nKDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYpLAotICAgICAgdG9IYXNoU3RyaW5nKDB4MDAw
MDAwMDAsIDB4ODAwMDAwMDApLAotICAgICAgdG9IYXNoU3RyaW5nKDB4YWNkMDVmMTUsIDB4MDFi
NjliNGIpXSwgZmFsc2UpOwotICAgIGFzc2VydEVxdWFscygzLCByZXN1bHQubGVuZ3RoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoJzE4NDQ2NzQ0MDczNzA5NTUxNjE1JywgcmVzdWx0WzBdKTsKLSAgICBh
c3NlcnRFcXVhbHMoJzkyMjMzNzIwMzY4NTQ3NzU4MDgnLCByZXN1bHRbMV0pOwotICAgIGFzc2Vy
dEVxdWFscygnMTIzNDU2Nzg5MTIzNDU2Nzg5JywgcmVzdWx0WzJdKTsKLSAgfSk7Ci0KLSAgLyoK
LSAgICogR29pbmcgZnJvbSBkZWNpbWFsIHN0cmluZ3MgdG8gaGFzaCBzdHJpbmdzIHNob3VsZCBi
ZSBsb3NzbGVzcy4KLSAgICovCi0gIGl0KCd0ZXN0RGVjaW1hbFRvSGFzaENvbnZlcnNpb24nLCBm
dW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0OwotICAgIHZhciBjb252ZXJ0ID0ganNwYi51dGls
cy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQ7Ci0KLSAgICByZXN1bHQgPSBjb252ZXJ0KCcwJyk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwKLSAgICAgIFsw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXSksIHJlc3VsdCk7
Ci0KLSAgICByZXN1bHQgPSBjb252ZXJ0KCctMScpOwotICAgIGFzc2VydEVxdWFscyhTdHJpbmcu
ZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsCi0gICAgICBbMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwg
MHhGRiwgMHhGRiwgMHhGRiwgMHhGRl0pLCByZXN1bHQpOwotCi0gICAgcmVzdWx0ID0gY29udmVy
dCgnMTg0NDY3NDQwNzM3MDk1NTE2MTUnKTsKLSAgICBhc3NlcnRFcXVhbHMoU3RyaW5nLmZyb21D
aGFyQ29kZS5hcHBseShudWxsLAotICAgICAgWzB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYs
IDB4RkYsIDB4RkYsIDB4RkZdKSwgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGNvbnZlcnQoJzky
MjMzNzIwMzY4NTQ3NzU4MDgnKTsKLSAgICBhc3NlcnRFcXVhbHMoU3RyaW5nLmZyb21DaGFyQ29k
ZS5hcHBseShudWxsLAotICAgICAgWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4ODBdKSwgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGNvbnZlcnQoJy05MjIzMzcy
MDM2ODU0Nzc1ODA4Jyk7Ci0gICAgYXNzZXJ0RXF1YWxzKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBw
bHkobnVsbCwKLSAgICAgIFsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDgwXSksIHJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBjb252ZXJ0KCcxMjM0NTY3ODkxMjM0
NTY3ODknKTsKLSAgICBhc3NlcnRFcXVhbHMoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxs
LAotICAgICAgWzB4MTUsIDB4NUYsIDB4RDAsIDB4QUMsIDB4NEIsIDB4OUIsIDB4QjYsIDB4MDFd
KSwgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGNvbnZlcnQoJy0xMjM0NTY3ODkxMjM0NTY3ODkn
KTsKLSAgICBhc3NlcnRFcXVhbHMoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLAotICAg
ICAgWzB4RUIsIDB4QTAsIDB4MkYsIDB4NTMsIDB4QjQsIDB4NjQsIDB4NDksIDB4RkVdKSwgcmVz
dWx0KTsKLSAgfSk7Ci0KLSAgLyoqCi0gICAqIEdvaW5nIGZyb20gaGFzaCBzdHJpbmdzIHRvIGhl
eCBzdHJpbmdzIHNob3VsZCBiZSBsb3NzbGVzcy4KLSAgICovCi0gIGl0KCd0ZXN0SGFzaFRvSGV4
Q29udmVyc2lvbicsIGZ1bmN0aW9uKCkgewotICAgIHZhciByZXN1bHQ7Ci0gICAgdmFyIGNvbnZl
cnQgPSBqc3BiLnV0aWxzLmhhc2g2NFRvSGV4U3RyaW5nOwotCi0gICAgcmVzdWx0ID0gY29udmVy
dCh0b0hhc2hTdHJpbmcoMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCkpOwotICAgIGFzc2VydEVxdWFs
cygnMHgwMDAwMDAwMDAwMDAwMDAwJywgcmVzdWx0KTsKLQotICAgIHJlc3VsdCA9IGNvbnZlcnQo
dG9IYXNoU3RyaW5nKDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYpKTsKLSAgICBhc3NlcnRFcXVhbHMo
JzB4ZmZmZmZmZmZmZmZmZmZmZicsIHJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBjb252ZXJ0KHRv
SGFzaFN0cmluZygweDEyMzQ1Njc4LCAweDlBQkNERUYwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCcw
eDlhYmNkZWYwMTIzNDU2NzgnLCByZXN1bHQpOwotICB9KTsKLQotCi0gIC8qKgotICAgKiBHb2lu
ZyBmcm9tIGhleCBzdHJpbmdzIHRvIGhhc2ggc3RyaW5ncyBzaG91bGQgYmUgbG9zc2xlc3MuCi0g
ICAqLwotICBpdCgndGVzdEhleFRvSGFzaENvbnZlcnNpb24nLCBmdW5jdGlvbigpIHsKLSAgICB2
YXIgcmVzdWx0OwotICAgIHZhciBjb252ZXJ0ID0ganNwYi51dGlscy5oZXhTdHJpbmdUb0hhc2g2
NDsKLQotICAgIHJlc3VsdCA9IGNvbnZlcnQoJzB4MDAwMDAwMDAwMDAwMDAwMCcpOwotICAgIGFz
c2VydEVxdWFscyhTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsCi0gICAgICAgIFsweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXSksIHJlc3VsdCk7Ci0K
LSAgICByZXN1bHQgPSBjb252ZXJ0KCcweGZmZmZmZmZmZmZmZmZmZmYnKTsKLSAgICBhc3NlcnRF
cXVhbHMoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLAotICAgICAgICBbMHhGRiwgMHhG
RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRl0pLCByZXN1bHQpOwotCi0gICAg
Ly8gSGV4IHN0cmluZyBpcyBiaWctZW5kaWFuLCBoYXNoIHN0cmluZyBpcyBsaXR0bGUtZW5kaWFu
LgotICAgIHJlc3VsdCA9IGNvbnZlcnQoJzB4MTIzNDU2Nzg5QUJDREVGMCcpOwotICAgIGFzc2Vy
dEVxdWFscyhTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsCi0gICAgICAgIFsweEYwLCAw
eERFLCAweEJDLCAweDlBLCAweDc4LCAweDU2LCAweDM0LCAweDEyXSksIHJlc3VsdCk7Ci0KLSAg
ICAvLyBDYXBpdGFsaXphdGlvbiBzaG91bGQgbm90IG1hdHRlci4KLSAgICByZXN1bHQgPSBjb252
ZXJ0KCcweDAwMDBhYmNkZWZBQkNERUYnKTsKLSAgICBhc3NlcnRFcXVhbHMoU3RyaW5nLmZyb21D
aGFyQ29kZS5hcHBseShudWxsLAotICAgICAgICBbMHhFRiwgMHhDRCwgMHhBQiwgMHhFRiwgMHhD
RCwgMHhBQiwgMHgwMCwgMHgwMF0pLCByZXN1bHQpOwotICB9KTsKLQotCi0gIC8qKgotICAgKiBH
b2luZyBmcm9tIG51bWJlcnMgdG8gaGFzaCBzdHJpbmdzIHNob3VsZCBiZSBsb3NzbGVzcyBmb3Ig
dXAgdG8gNTMgYml0cyBvZgotICAgKiBwcmVjaXNpb24uCi0gICAqLwotICBpdCgndGVzdE51bWJl
clRvSGFzaENvbnZlcnNpb24nLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0OwotICAgIHZh
ciBjb252ZXJ0ID0ganNwYi51dGlscy5udW1iZXJUb0hhc2g2NDsKLQotICAgIHJlc3VsdCA9IGNv
bnZlcnQoMHgwMDAwMDAwMDAwMDAwKTsKLSAgICBhc3NlcnRFcXVhbHMoJzB4MDAwMDAwMDAwMDAw
MDAwMCcsIGpzcGIudXRpbHMuaGFzaDY0VG9IZXhTdHJpbmcocmVzdWx0KSk7Ci0KLSAgICByZXN1
bHQgPSBjb252ZXJ0KDB4RkZGRkZGRkZGRkZGRik7Ci0gICAgYXNzZXJ0RXF1YWxzKCcweDAwMGZm
ZmZmZmZmZmZmZmYnLCBqc3BiLnV0aWxzLmhhc2g2NFRvSGV4U3RyaW5nKHJlc3VsdCkpOwotCi0g
ICAgcmVzdWx0ID0gY29udmVydCgweDEyMzQ1Njc4OUFCQ0QpOwotICAgIGFzc2VydEVxdWFscygn
MHgwMDAxMjM0NTY3ODlhYmNkJywganNwYi51dGlscy5oYXNoNjRUb0hleFN0cmluZyhyZXN1bHQp
KTsKLQotICAgIHJlc3VsdCA9IGNvbnZlcnQoMHhEQ0JBOTg3NjU0MzIxKTsKLSAgICBhc3NlcnRF
cXVhbHMoJzB4MDAwZGNiYTk4NzY1NDMyMScsIGpzcGIudXRpbHMuaGFzaDY0VG9IZXhTdHJpbmco
cmVzdWx0KSk7Ci0KLSAgICAvLyA1MyBiaXRzIG9mIHByZWNpc2lvbiBzaG91bGQgbm90IGJlIHRy
dW5jYXRlZC4KLSAgICByZXN1bHQgPSBjb252ZXJ0KDB4MTAwMDAwMDAwMDAwMDEpOwotICAgIGFz
c2VydEVxdWFscygnMHgwMDEwMDAwMDAwMDAwMDAxJywganNwYi51dGlscy5oYXNoNjRUb0hleFN0
cmluZyhyZXN1bHQpKTsKLQotICAgIC8vIDU0IGJpdHMgb2YgcHJlY2lzaW9uIHNob3VsZCBiZSB0
cnVuY2F0ZWQuCi0gICAgcmVzdWx0ID0gY29udmVydCgweDIwMDAwMDAwMDAwMDAxKTsKLSAgICBh
c3NlcnROb3RFcXVhbHMoCi0gICAgICAgICcweDAwMjAwMDAwMDAwMDAwMDEnLCBqc3BiLnV0aWxz
Lmhhc2g2NFRvSGV4U3RyaW5nKHJlc3VsdCkpOwotICB9KTsKLQotCi0gIC8qKgotICAgKiBTYW5p
dHkgY2hlY2sgdGhlIGJlaGF2aW9yIG9mIEphdmFzY3JpcHQncyBzdHJpbmdzIHdoZW4gZG9pbmcg
ZnVubnkgdGhpbmdzCi0gICAqIHdpdGggdW5pY29kZSBjaGFyYWN0ZXJzLgotICAgKi8KLSAgaXQo
J3Nhbml0eUNoZWNrVW5pY29kZVN0cmluZ3MnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgc3RyaW5n
cyA9IG5ldyBBcnJheSg2NTUzNik7Ci0KLSAgICAvLyBBbGwgcG9zc2libGUgdW5zaWduZWQgMTYt
Yml0IHZhbHVlcyBzaG91bGQgYmUgc3RvcmFibGUgaW4gYSBzdHJpbmcsIHRoZXkKLSAgICAvLyBz
aG91bGRuJ3QgZG8gd2VpcmQgdGhpbmdzIHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBh
bmQgdGhleSBzaG91bGQKLSAgICAvLyBjb21lIGJhY2sgb3V0IG9mIHRoZSBzdHJpbmcgdW5jaGFu
Z2VkLgotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjU1MzY7IGkrKykgewotICAgICAgc3RyaW5n
c1tpXSA9ICdhJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSkgKyAnYSc7Ci0gICAgICBpZiAoMyAh
PSBzdHJpbmdzW2ldLmxlbmd0aCkgdGhyb3cgJ2ZhaWwhJzsKLSAgICAgIGlmIChpICE9IHN0cmlu
Z3NbaV0uY2hhckNvZGVBdCgxKSkgdGhyb3cgJ2ZhaWwhJzsKLSAgICB9Ci0KLSAgICAvLyBFYWNo
IHVuaWNvZGUgY2hhcmFjdGVyIHNob3VsZCBjb21wYXJlIGVxdWFsIHRvIGl0c2VsZiBhbmQgbm90
IGVxdWFsIHRvIGEKLSAgICAvLyBkaWZmZXJlbnQgdW5pY29kZSBjaGFyYWN0ZXIuCi0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCA2NTUzNjsgaSsrKSB7Ci0gICAgICBpZiAoc3RyaW5nc1tpXSAhPSBz
dHJpbmdzW2ldKSB0aHJvdyAnZmFpbCEnOwotICAgICAgaWYgKHN0cmluZ3NbaV0gPT0gc3RyaW5n
c1soaSArIDEpICUgNjU1MzZdKSB0aHJvdyAnZmFpbCEnOwotICAgIH0KLSAgfSk7Ci0KLQotICAv
KioKLSAgICogVGVzdHMgY29udmVyc2lvbiBmcm9tIDMyLWJpdCBmbG9hdGluZyBwb2ludCBudW1i
ZXJzIHRvIHNwbGl0NjQgbnVtYmVycy4KLSAgICovCi0gIGl0KCd0ZXN0RmxvYXQzMlRvU3BsaXQ2
NCcsIGZ1bmN0aW9uKCkgewotICAgIHZhciBmMzJfZXBzID0ganNwYi5CaW5hcnlDb25zdGFudHMu
RkxPQVQzMl9FUFM7Ci0gICAgdmFyIGYzMl9taW4gPSBqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9B
VDMyX01JTjsKLSAgICB2YXIgZjMyX21heCA9IGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJf
TUFYOwotCi0gICAgLy8gTmFOLgotICAgIGpzcGIudXRpbHMuc3BsaXRGbG9hdDMyKE5hTik7Ci0g
ICAgaWYgKCFpc05hTihqc3BiLnV0aWxzLmpvaW5GbG9hdDMyKGpzcGIudXRpbHMuc3BsaXQ2NExv
dywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNwYi51dGlscy5zcGxp
dDY0SGlnaCkpKSB7Ci0gICAgICB0aHJvdyAnZmFpbCEnOwotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSB4Ci0gICAgICogQHBhcmFtIHtudW1iZXI9fSBvcHRfYml0cwot
ICAgICAqLwotICAgIGZ1bmN0aW9uIHRlc3QoeCwgb3B0X2JpdHMpIHsKLSAgICAgIGpzcGIudXRp
bHMuc3BsaXRGbG9hdDMyKHgpOwotICAgICAgaWYgKGdvb2cuaXNEZWYob3B0X2JpdHMpKSB7Ci0g
ICAgICAgIGlmIChvcHRfYml0cyAhPSBqc3BiLnV0aWxzLnNwbGl0NjRMb3cpIHRocm93ICdmYWls
ISc7Ci0gICAgICB9Ci0gICAgICBpZiAodHJ1bmNhdGUoeCkgIT0ganNwYi51dGlscy5qb2luRmxv
YXQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3csCi0gICAgICAgICAganNwYi51dGlscy5zcGxpdDY0
SGlnaCkpIHsKLSAgICAgICAgdGhyb3cgJ2ZhaWwhJzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHkuCi0gICAgdGVzdChJbmZpbml0eSwgMHg3
ZjgwMDAwMCk7Ci0gICAgdGVzdCgtSW5maW5pdHksIDB4ZmY4MDAwMDApOwotCi0gICAgLy8gUG9z
aXRpdmUgYW5kIG5lZ2F0aXZlIHplcm8uCi0gICAgdGVzdCgwLCAweDAwMDAwMDAwKTsKLSAgICB0
ZXN0KC0wLCAweDgwMDAwMDAwKTsKLQotICAgIC8vIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlcHNp
bG9uLgotICAgIHRlc3QoZjMyX2VwcywgMHgwMDAwMDAwMSk7Ci0gICAgdGVzdCgtZjMyX2Vwcywg
MHg4MDAwMDAwMSk7Ci0KLSAgICAvLyBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWluLgotICAgIHRl
c3QoZjMyX21pbiwgMHgwMDgwMDAwMCk7Ci0gICAgdGVzdCgtZjMyX21pbiwgMHg4MDgwMDAwMCk7
Ci0KLSAgICAvLyBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWF4LgotICAgIHRlc3QoZjMyX21heCwg
MHg3RjdGRkZGRik7Ci0gICAgdGVzdCgtZjMyX21heCwgMHhGRjdGRkZGRik7Ci0KLSAgICAvLyBW
YXJpb3VzIHBvc2l0aXZlIHZhbHVlcy4KLSAgICB2YXIgY3Vyc29yID0gZjMyX2VwcyAqIDEwOwot
ICAgIHdoaWxlIChjdXJzb3IgIT0gSW5maW5pdHkpIHsKLSAgICAgIHRlc3QoY3Vyc29yKTsKLSAg
ICAgIGN1cnNvciAqPSAxLjE7Ci0gICAgfQotCi0gICAgLy8gVmFyaW91cyBuZWdhdGl2ZSB2YWx1
ZXMuCi0gICAgY3Vyc29yID0gLWYzMl9lcHMgKiAxMDsKLSAgICB3aGlsZSAoY3Vyc29yICE9IC1J
bmZpbml0eSkgewotICAgICAgdGVzdChjdXJzb3IpOwotICAgICAgY3Vyc29yICo9IDEuMTsKLSAg
ICB9Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAqIFRlc3RzIGNvbnZlcnNpb24gZnJvbSA2NC1iaXQg
ZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB0byBzcGxpdDY0IG51bWJlcnMuCi0gICAqLwotICBpdCgn
dGVzdEZsb2F0NjRUb1NwbGl0NjQnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgZjY0X2VwcyA9IGpz
cGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfRVBTOwotICAgIHZhciBmNjRfbWluID0ganNwYi5C
aW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NSU47Ci0gICAgdmFyIGY2NF9tYXggPSBqc3BiLkJpbmFy
eUNvbnN0YW50cy5GTE9BVDY0X01BWDsKLQotICAgIC8vIE5hTi4KLSAgICBqc3BiLnV0aWxzLnNw
bGl0RmxvYXQ2NChOYU4pOwotICAgIGlmICghaXNOYU4oanNwYi51dGlscy5qb2luRmxvYXQ2NChq
c3BiLnV0aWxzLnNwbGl0NjRMb3csCi0gICAgICAgIGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpKSkg
ewotICAgICAgdGhyb3cgJ2ZhaWwhJzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0geAotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2hpZ2hCaXRzCi0gICAgICog
QHBhcmFtIHtudW1iZXI9fSBvcHRfbG93Qml0cwotICAgICAqLwotICAgIGZ1bmN0aW9uIHRlc3Qo
eCwgb3B0X2hpZ2hCaXRzLCBvcHRfbG93Qml0cykgewotICAgICAganNwYi51dGlscy5zcGxpdEZs
b2F0NjQoeCk7Ci0gICAgICBpZiAoZ29vZy5pc0RlZihvcHRfaGlnaEJpdHMpKSB7Ci0gICAgICAg
IGlmIChvcHRfaGlnaEJpdHMgIT0ganNwYi51dGlscy5zcGxpdDY0SGlnaCkgdGhyb3cgJ2ZhaWwh
JzsKLSAgICAgIH0KLSAgICAgIGlmIChnb29nLmlzRGVmKG9wdF9sb3dCaXRzKSkgewotICAgICAg
ICBpZiAob3B0X2xvd0JpdHMgIT0ganNwYi51dGlscy5zcGxpdDY0TG93KSB0aHJvdyAnZmFpbCEn
OwotICAgICAgfQotICAgICAgaWYgKHggIT0ganNwYi51dGlscy5qb2luRmxvYXQ2NChqc3BiLnV0
aWxzLnNwbGl0NjRMb3csCi0gICAgICAgICAganNwYi51dGlscy5zcGxpdDY0SGlnaCkpIHsKLSAg
ICAgICAgdGhyb3cgJ2ZhaWwhJzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQb3NpdGl2ZSBh
bmQgbmVnYXRpdmUgaW5maW5pdHkuCi0gICAgdGVzdChJbmZpbml0eSwgMHg3ZmYwMDAwMCwgMHgw
MDAwMDAwMCk7Ci0gICAgdGVzdCgtSW5maW5pdHksIDB4ZmZmMDAwMDAsIDB4MDAwMDAwMDApOwot
Ci0gICAgLy8gUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHplcm8uCi0gICAgdGVzdCgwLCAweDAwMDAw
MDAwLCAweDAwMDAwMDAwKTsKLSAgICB0ZXN0KC0wLCAweDgwMDAwMDAwLCAweDAwMDAwMDAwKTsK
LQotICAgIC8vIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlcHNpbG9uLgotICAgIHRlc3QoZjY0X2Vw
cywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSk7Ci0gICAgdGVzdCgtZjY0X2VwcywgMHg4MDAwMDAw
MCwgMHgwMDAwMDAwMSk7Ci0KLSAgICAvLyBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWluLgotICAg
IHRlc3QoZjY0X21pbiwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCk7Ci0gICAgdGVzdCgtZjY0X21p
biwgMHg4MDEwMDAwMCwgMHgwMDAwMDAwMCk7Ci0KLSAgICAvLyBQb3NpdGl2ZSBhbmQgbmVnYXRp
dmUgbWF4LgotICAgIHRlc3QoZjY0X21heCwgMHg3RkVGRkZGRiwgMHhGRkZGRkZGRik7Ci0gICAg
dGVzdCgtZjY0X21heCwgMHhGRkVGRkZGRiwgMHhGRkZGRkZGRik7Ci0KLSAgICAvLyBWYXJpb3Vz
IHBvc2l0aXZlIHZhbHVlcy4KLSAgICB2YXIgY3Vyc29yID0gZjY0X2VwcyAqIDEwOwotICAgIHdo
aWxlIChjdXJzb3IgIT0gSW5maW5pdHkpIHsKLSAgICAgIHRlc3QoY3Vyc29yKTsKLSAgICAgIGN1
cnNvciAqPSAxLjE7Ci0gICAgfQotCi0gICAgLy8gVmFyaW91cyBuZWdhdGl2ZSB2YWx1ZXMuCi0g
ICAgY3Vyc29yID0gLWY2NF9lcHMgKiAxMDsKLSAgICB3aGlsZSAoY3Vyc29yICE9IC1JbmZpbml0
eSkgewotICAgICAgdGVzdChjdXJzb3IpOwotICAgICAgY3Vyc29yICo9IDEuMTsKLSAgICB9Ci0g
IH0pOwotCi0KLSAgLyoqCi0gICAqIFRlc3RzIGNvdW50aW5nIHBhY2tlZCB2YXJpbnRzLgotICAg
Ki8KLSAgaXQoJ3Rlc3RDb3VudFZhcmludHMnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgdmFsdWVz
ID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDE7IGkgPCAxMDAwMDAwMDAwOyBpICo9IDEuMSkgewot
ICAgICAgdmFsdWVzLnB1c2goTWF0aC5mbG9vcihpKSk7Ci0gICAgfQotCi0gICAgdmFyIHdyaXRl
ciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpOwotICAgIHdyaXRlci53cml0ZVBhY2tlZFVpbnQ2
NCgxLCB2YWx1ZXMpOwotCi0gICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5n
ZXRSZXN1bHRCdWZmZXIoKSk7Ci0KLSAgICAvLyBXZSBzaG91bGQgaGF2ZSB0d28gbW9yZSB2YXJp
bnRzIHRoYW4gd2Ugc3RhcnRlZCB3aXRoIC0gb25lIGZvciB0aGUgZmllbGQKLSAgICAvLyB0YWcs
IG9uZSBmb3IgdGhlIHBhY2tlZCBsZW5ndGguCi0gICAgYXNzZXJ0RXF1YWxzKHZhbHVlcy5sZW5n
dGggKyAyLAotICAgICAgICAgICAgICAgICBqc3BiLnV0aWxzLmNvdW50VmFyaW50cyhidWZmZXIs
IDAsIGJ1ZmZlci5sZW5ndGgpKTsKLSAgfSk7Ci0KLQotICAvKioKLSAgICogVGVzdHMgY291bnRp
bmcgbWF0Y2hpbmcgdmFyaW50IGZpZWxkcy4KLSAgICovCi0gIGl0KCd0ZXN0Q291bnRWYXJpbnRG
aWVsZHMnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3Jp
dGVyKCk7Ci0KLSAgICB2YXIgY291bnQgPSAwOwotICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMTAw
MDAwMDAwMDsgaSAqPSAxLjEpIHsKLSAgICAgIHdyaXRlci53cml0ZVVpbnQ2NCgxLCBNYXRoLmZs
b29yKGkpKTsKLSAgICAgIGNvdW50Kys7Ci0gICAgfQotICAgIHdyaXRlci53cml0ZVN0cmluZygy
LCAndGVybWluYXRvcicpOwotCi0gICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRl
ci5nZXRSZXN1bHRCdWZmZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNvdW50LAotICAgICAgICBq
c3BiLnV0aWxzLmNvdW50VmFyaW50RmllbGRzKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCwgMSkp
OwotCi0gICAgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7Ci0KLSAgICBjb3VudCA9
IDA7Ci0gICAgZm9yICh2YXIgaSA9IDE7IGkgPCAxMDAwMDAwMDAwOyBpICo9IDEuMSkgewotICAg
ICAgd3JpdGVyLndyaXRlVWludDY0KDEyMzQ1Njc4OSwgTWF0aC5mbG9vcihpKSk7Ci0gICAgICBj
b3VudCsrOwotICAgIH0KLSAgICB3cml0ZXIud3JpdGVTdHJpbmcoMiwgJ3Rlcm1pbmF0b3InKTsK
LQotICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKGNvdW50LAotICAgICAgICBqc3BiLnV0aWxzLmNvdW50VmFyaW50
RmllbGRzKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCwgMTIzNDU2Nzg5KSk7Ci0gIH0pOwotCi0K
LSAgLyoqCi0gICAqIFRlc3RzIGNvdW50aW5nIG1hdGNoaW5nIGZpeGVkMzIgZmllbGRzLgotICAg
Ki8KLSAgaXQoJ3Rlc3RDb3VudEZpeGVkMzJGaWVsZHMnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIg
d3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7Ci0KLSAgICB2YXIgY291bnQgPSAwOwot
ICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMTAwMDAwMDAwMDsgaSAqPSAxLjEpIHsKLSAgICAgIHdy
aXRlci53cml0ZUZpeGVkMzIoMSwgTWF0aC5mbG9vcihpKSk7Ci0gICAgICBjb3VudCsrOwotICAg
IH0KLSAgICB3cml0ZXIud3JpdGVTdHJpbmcoMiwgJ3Rlcm1pbmF0b3InKTsKLQotICAgIHZhciBi
dWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCkpOwotICAgIGFz
c2VydEVxdWFscyhjb3VudCwKLSAgICAgICAganNwYi51dGlscy5jb3VudEZpeGVkMzJGaWVsZHMo
YnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoLCAxKSk7Ci0KLSAgICB3cml0ZXIgPSBuZXcganNwYi5C
aW5hcnlXcml0ZXIoKTsKLQotICAgIGNvdW50ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMTsgaSA8
IDEwMDAwMDAwMDA7IGkgKj0gMS4xKSB7Ci0gICAgICB3cml0ZXIud3JpdGVGaXhlZDMyKDEyMzQ1
Njc4OSwgTWF0aC5mbG9vcihpKSk7Ci0gICAgICBjb3VudCsrOwotICAgIH0KLSAgICB3cml0ZXIu
d3JpdGVTdHJpbmcoMiwgJ3Rlcm1pbmF0b3InKTsKLQotICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFy
cmF5KHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNvdW50LAot
ICAgICAgICBqc3BiLnV0aWxzLmNvdW50Rml4ZWQzMkZpZWxkcyhidWZmZXIsIDAsIGJ1ZmZlci5s
ZW5ndGgsIDEyMzQ1Njc4OSkpOwotICB9KTsKLQotCi0gIC8qKgotICAgKiBUZXN0cyBjb3VudGlu
ZyBtYXRjaGluZyBmaXhlZDY0IGZpZWxkcy4KLSAgICovCi0gIGl0KCd0ZXN0Q291bnRGaXhlZDY0
RmllbGRzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHdyaXRlciA9IG5ldyBqc3BiLkJpbmFyeVdy
aXRlcigpOwotCi0gICAgdmFyIGNvdW50ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMTsgaSA8IDEw
MDAwMDAwMDA7IGkgKj0gMS4xKSB7Ci0gICAgICB3cml0ZXIud3JpdGVEb3VibGUoMSwgaSk7Ci0g
ICAgICBjb3VudCsrOwotICAgIH0KLSAgICB3cml0ZXIud3JpdGVTdHJpbmcoMiwgJ3Rlcm1pbmF0
b3InKTsKLQotICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZ2V0UmVzdWx0
QnVmZmVyKCkpOwotICAgIGFzc2VydEVxdWFscyhjb3VudCwKLSAgICAgICAganNwYi51dGlscy5j
b3VudEZpeGVkNjRGaWVsZHMoYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoLCAxKSk7Ci0KLSAgICB3
cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTsKLQotICAgIGNvdW50ID0gMDsKLSAgICBm
b3IgKHZhciBpID0gMTsgaSA8IDEwMDAwMDAwMDA7IGkgKj0gMS4xKSB7Ci0gICAgICB3cml0ZXIu
d3JpdGVEb3VibGUoMTIzNDU2Nzg5LCBpKTsKLSAgICAgIGNvdW50Kys7Ci0gICAgfQotICAgIHdy
aXRlci53cml0ZVN0cmluZygyLCAndGVybWluYXRvcicpOwotCi0gICAgYnVmZmVyID0gbmV3IFVp
bnQ4QXJyYXkod3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpKTsKLSAgICBhc3NlcnRFcXVhbHMoY291
bnQsCi0gICAgICAgIGpzcGIudXRpbHMuY291bnRGaXhlZDY0RmllbGRzKGJ1ZmZlciwgMCwgYnVm
ZmVyLmxlbmd0aCwgMTIzNDU2Nzg5KSk7Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAqIFRlc3RzIGNv
dW50aW5nIG1hdGNoaW5nIGRlbGltaXRlZCBmaWVsZHMuCi0gICAqLwotICBpdCgndGVzdENvdW50
RGVsaW1pdGVkRmllbGRzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHdyaXRlciA9IG5ldyBqc3Bi
LkJpbmFyeVdyaXRlcigpOwotCi0gICAgdmFyIGNvdW50ID0gMDsKLSAgICBmb3IgKHZhciBpID0g
MTsgaSA8IDEwMDA7IGkgKj0gMS4xKSB7Ci0gICAgICB3cml0ZXIud3JpdGVCeXRlcygxLCBbTWF0
aC5mbG9vcihpKV0pOwotICAgICAgY291bnQrKzsKLSAgICB9Ci0gICAgd3JpdGVyLndyaXRlU3Ry
aW5nKDIsICd0ZXJtaW5hdG9yJyk7Ci0KLSAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXko
d3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpKTsKLSAgICBhc3NlcnRFcXVhbHMoY291bnQsCi0gICAg
ICAgIGpzcGIudXRpbHMuY291bnREZWxpbWl0ZWRGaWVsZHMoYnVmZmVyLCAwLCBidWZmZXIubGVu
Z3RoLCAxKSk7Ci0KLSAgICB3cml0ZXIgPSBuZXcganNwYi5CaW5hcnlXcml0ZXIoKTsKLQotICAg
IGNvdW50ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMTsgaSA8IDEwMDA7IGkgKj0gMS4xKSB7Ci0g
ICAgICB3cml0ZXIud3JpdGVCeXRlcygxMjM0NTY3ODksIFtNYXRoLmZsb29yKGkpXSk7Ci0gICAg
ICBjb3VudCsrOwotICAgIH0KLSAgICB3cml0ZXIud3JpdGVTdHJpbmcoMiwgJ3Rlcm1pbmF0b3In
KTsKLQotICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5nZXRSZXN1bHRCdWZmZXIo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGNvdW50LAotICAgICAgICBqc3BiLnV0aWxzLmNvdW50RGVs
aW1pdGVkRmllbGRzKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCwgMTIzNDU2Nzg5KSk7Ci0gIH0p
OwotCi0KLSAgLyoqCi0gICAqIFRlc3RzIGJ5dGUgZm9ybWF0IGZvciBkZWJ1ZyBzdHJpbmdzLgot
ICAgKi8KLSAgaXQoJ3Rlc3REZWJ1Z0J5dGVzVG9UZXh0Rm9ybWF0JywgZnVuY3Rpb24oKSB7Ci0g
ICAgYXNzZXJ0RXF1YWxzKCciIicsIGpzcGIudXRpbHMuZGVidWdCeXRlc1RvVGV4dEZvcm1hdChu
dWxsKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCciXFx4MDBcXHgxMFxceGZmIicsCi0gICAgICAgIGpz
cGIudXRpbHMuZGVidWdCeXRlc1RvVGV4dEZvcm1hdChbMCwgMTYsIDI1NV0pKTsKLSAgfSk7Ci0K
LQotICAvKioKLSAgICogVGVzdHMgY29udmVydGluZyBieXRlIGJsb2Igc291cmNlcyBpbnRvIGJ5
dGUgYmxvYnMuCi0gICAqLwotICBpdCgndGVzdEJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXknLCBmdW5j
dGlvbigpIHsKLSAgICB2YXIgY29udmVydCA9IGpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhB
cnJheTsKLQotICAgIHZhciBzb3VyY2VEYXRhID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAyNTY7IGkrKykgewotICAgICAgc291cmNlRGF0YS5wdXNoKGkpOwotICAgIH0KLQotICAgIHZh
ciBzb3VyY2VCeXRlcyA9IG5ldyBVaW50OEFycmF5KHNvdXJjZURhdGEpOwotICAgIHZhciBzb3Vy
Y2VCdWZmZXIgPSBzb3VyY2VCeXRlcy5idWZmZXI7Ci0gICAgdmFyIHNvdXJjZUJhc2U2NCA9IGdv
b2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheShzb3VyY2VEYXRhKTsKLSAgICB2YXIgc291
cmNlU3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBzb3VyY2VEYXRhKTsK
LQotICAgIGZ1bmN0aW9uIGNoZWNrKHJlc3VsdCkgewotICAgICAgYXNzZXJ0RXF1YWxzKFVpbnQ4
QXJyYXksIHJlc3VsdC5jb25zdHJ1Y3Rvcik7Ci0gICAgICBhc3NlcnRFcXVhbHMoc291cmNlRGF0
YS5sZW5ndGgsIHJlc3VsdC5sZW5ndGgpOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1
bHQubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHNvdXJjZURhdGFbaV0sIHJl
c3VsdFtpXSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29udmVydGluZyBVaW50OEFycmF5
cyBpbnRvIFVpbnQ4QXJyYXlzIHNob3VsZCBiZSBhIG5vLW9wLgotICAgIGFzc2VydEVxdWFscyhz
b3VyY2VCeXRlcywgY29udmVydChzb3VyY2VCeXRlcykpOwotCi0gICAgLy8gQ29udmVydGluZyBB
cnJheS48bnVtYmVycz4gaW50byBVaW50OEFycmF5cyBzaG91bGQgd29yay4KLSAgICBjaGVjayhj
b252ZXJ0KHNvdXJjZURhdGEpKTsKLQotICAgIC8vIENvbnZlcnRpbmcgQXJyYXlCdWZmZXJzIGlu
dG8gVWludDhBcnJheXMgc2hvdWxkIHdvcmsuCi0gICAgY2hlY2soY29udmVydChzb3VyY2VCdWZm
ZXIpKTsKLQotICAgIC8vIENvbnZlcnRpbmcgYmFzZTY0LWVuY29kZWQgc3RyaW5ncyBpbnRvIFVp
bnQ4QXJyYXlzIHNob3VsZCB3b3JrLgotICAgIGNoZWNrKGNvbnZlcnQoc291cmNlQmFzZTY0KSk7
Ci0gIH0pOwotfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS93cml0ZXIuanMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS93
cml0ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNDQ3OGVlMGFiZjExNjY5
NzNhZmY5MzYwYjgwYTg3MTEwZDJjYTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9qcy9iaW5hcnkvd3JpdGVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTU2
MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLyoqCi0gKiBA
ZmlsZW92ZXJ2aWV3IFRoaXMgZmlsZSBjb250YWlucyB1dGlsaXRpZXMgZm9yIGVuY29kaW5nIEph
dmFzY3JpcHQgb2JqZWN0cwotICogaW50byBiaW5hcnksIHdpcmUtZm9ybWF0IHByb3RvY29sIGJ1
ZmZlcnMgKGluIHRoZSBmb3JtIG9mIFVpbnQ4QXJyYXlzKSB0aGF0Ci0gKiBhIHNlcnZlciBjYW4g
Y29uc3VtZSBkaXJlY3RseS4KLSAqCi0gKiBqc3BiJ3MgQmluYXJ5V3JpdGVyIGNsYXNzIGRlZmlu
ZXMgbWV0aG9kcyBmb3IgZWZmaWNpZW50bHkgZW5jb2RpbmcKLSAqIEphdmFzY3JpcHQgb2JqZWN0
cyBpbnRvIGJpbmFyeSwgd2lyZS1mb3JtYXQgcHJvdG9jb2wgYnVmZmVycyBhbmQgc3VwcG9ydHMK
LSAqIGFsbCB0aGUgZnVuZGFtZW50YWwgZmllbGQgdHlwZXMgdXNlZCBpbiBwcm90b2NvbCBidWZm
ZXJzLgotICoKLSAqIE1ham9yIGNhdmVhdCAxIC0gVXNlcnMgb2YgdGhpcyBsaWJyYXJ5IF9tdXN0
XyBrZWVwIHRoZWlyIEphdmFzY3JpcHQgcHJvdG8KLSAqIHBhcnNpbmcgY29kZSBpbiBzeW5jIHdp
dGggdGhlIG9yaWdpbmFsIC5wcm90byBmaWxlIC0gcHJlc3VtYWJseSB5b3UnbGwgYmUKLSAqIHVz
aW5nIHRoZSB0eXBlZCBqc3BiIGNvZGUgZ2VuZXJhdG9yLCBidXQgaWYgeW91IGJ5cGFzcyB0aGF0
IHlvdSdsbCBuZWVkCi0gKiB0byBrZWVwIHRoaW5ncyBpbiBzeW5jIGJ5IGhhbmQuCi0gKgotICog
TWFqb3IgY2F2ZWF0IDIgLSBKYXZhc2NyaXB0IGlzIHVuYWJsZSB0byBhY2N1cmF0ZWx5IHJlcHJl
c2VudCBpbnRlZ2VycwotICogbGFyZ2VyIHRoYW4gMl41MyBkdWUgdG8gaXRzIHVzZSBvZiBhIGRv
dWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgZm9ybWF0Ci0gKiBmb3IgYWxsIG51bWJlcnMu
IEJpbmFyeVdyaXRlciBkb2VzIG5vdCBtYWtlIGFueSBzcGVjaWFsIGVmZm9ydCB0byBwcmVzZXJ2
ZQotICogcHJlY2lzaW9uIGZvciB2YWx1ZXMgYWJvdmUgdGhpcyBsaW1pdCAtIGlmIHlvdSBuZWVk
IHRvIHBhc3MgNjQtYml0IGludGVnZXJzCi0gKiAoaGFzaCBjb2RlcywgZm9yIGV4YW1wbGUpIGJl
dHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIHdpdGhvdXQgcHJlY2lzaW9uCi0gKiBsb3NzLCBk
byBfbm90XyB1c2UgdGhpcyBsaWJyYXJ5LgotICoKLSAqIE1ham9yIGNhdmVhdCAzIC0gVGhpcyBj
bGFzcyB1c2VzIHR5cGVkIGFycmF5cyBhbmQgbXVzdCBub3QgYmUgdXNlZCBvbiBvbGRlcgotICog
YnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGVtLgotICoKLSAqIEBhdXRob3IgYWFwcGxl
YnlAZ29vZ2xlLmNvbSAoQXVzdGluIEFwcGxlYnkpCi0gKi8KLQotZ29vZy5wcm92aWRlKCdqc3Bi
LkJpbmFyeVdyaXRlcicpOwotCi1nb29nLnJlcXVpcmUoJ2dvb2cuYXNzZXJ0cycpOwotZ29vZy5y
ZXF1aXJlKCdnb29nLmNyeXB0LmJhc2U2NCcpOwotZ29vZy5yZXF1aXJlKCdqc3BiLkJpbmFyeUNv
bnN0YW50cycpOwotZ29vZy5yZXF1aXJlKCdqc3BiLkJpbmFyeUVuY29kZXInKTsKLWdvb2cucmVx
dWlyZSgnanNwYi5hcml0aC5JbnQ2NCcpOwotZ29vZy5yZXF1aXJlKCdqc3BiLmFyaXRoLlVJbnQ2
NCcpOwotZ29vZy5yZXF1aXJlKCdqc3BiLnV0aWxzJyk7Ci0KLQotCi0vKioKLSAqIEJpbmFyeVdy
aXRlciBpbXBsZW1lbnRzIGVuY29kZXJzIGZvciBhbGwgdGhlIHdpcmUgdHlwZXMgc3BlY2lmaWVk
IGluCi0gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2Rv
Y3MvZW5jb2RpbmcuCi0gKgotICogQGNvbnN0cnVjdG9yCi0gKiBAc3RydWN0Ci0gKi8KLWpzcGIu
QmluYXJ5V3JpdGVyID0gZnVuY3Rpb24oKSB7Ci0gIC8qKgotICAgKiBCbG9ja3Mgb2Ygc2VyaWFs
aXplZCBkYXRhIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQgb25jZSBhbGwgbWVzc2FnZXMgaGF2
ZQotICAgKiBiZWVuIHdyaXR0ZW4uCi0gICAqIEBwcml2YXRlIHshQXJyYXk8IVVpbnQ4QXJyYXl8
IUFycmF5PG51bWJlcj4+fQotICAgKi8KLSAgdGhpcy5ibG9ja3NfID0gW107Ci0KLSAgLyoqCi0g
ICAqIFRvdGFsIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYmxvY2tzXyBhcnJheS4gRG9lcyBfbm90
XyBpbmNsdWRlIGJ5dGVzIGluCi0gICAqIHRoZSBlbmNvZGVyIGJlbG93LgotICAgKiBAcHJpdmF0
ZSB7bnVtYmVyfQotICAgKi8KLSAgdGhpcy50b3RhbExlbmd0aF8gPSAwOwotCi0gIC8qKgotICAg
KiBCaW5hcnkgZW5jb2RlciBob2xkaW5nIHBpZWNlcyBvZiBhIG1lc3NhZ2UgdGhhdCB3ZSdyZSBz
dGlsbCBzZXJpYWxpemluZy4KLSAgICogV2hlbiB3ZSBnZXQgdG8gYSBzdG9wcGluZyBwb2ludCAo
ZWl0aGVyIHRoZSBzdGFydCBvZiBhIG5ldyBzdWJtZXNzYWdlLCBvcgotICAgKiB3aGVuIHdlIG5l
ZWQgdG8gYXBwZW5kIGEgcmF3IFVpbnQ4QXJyYXkpLCB0aGUgZW5jb2RlcidzIGJ1ZmZlciB3aWxs
IGJlCi0gICAqIGFkZGVkIHRvIHRoZSBibG9jayBhcnJheSBhYm92ZSBhbmQgdGhlIGVuY29kZXIg
d2lsbCBiZSByZXNldC4KLSAgICogQHByaXZhdGUgeyFqc3BiLkJpbmFyeUVuY29kZXJ9Ci0gICAq
LwotICB0aGlzLmVuY29kZXJfID0gbmV3IGpzcGIuQmluYXJ5RW5jb2RlcigpOwotCi0gIC8qKgot
ICAgKiBBIHN0YWNrIG9mIGJvb2ttYXJrcyBjb250YWluaW5nIHRoZSBwYXJlbnQgYmxvY2tzIGZv
ciBlYWNoIG1lc3NhZ2Ugc3RhcnRlZAotICAgKiB2aWEgYmVnaW5TdWJNZXNzYWdlKCksIG5lZWRl
ZCBhcyBib29ra2VlcGluZyBmb3IgZW5kU3ViTWVzc2FnZSgpLgotICAgKiBUT0RPKGFhcHBsZWJ5
KTogRGVwcmVjYXRlZCwgdXNlcnMgc2hvdWxkIGJlIGNhbGxpbmcgd3JpdGVNZXNzYWdlKCkuCi0g
ICAqIEBwcml2YXRlIHshQXJyYXkuPCFBcnJheS48bnVtYmVyPj59Ci0gICAqLwotICB0aGlzLmJv
b2ttYXJrc18gPSBbXTsKLX07Ci0KLQotLyoqCi0gKiBBcHBlbmQgYSB0eXBlZCBhcnJheSBvZiBi
eXRlcyBvbnRvIHRoZSBidWZmZXIuCi0gKgotICogQHBhcmFtIHshVWludDhBcnJheX0gYXJyIFRo
ZSBieXRlIGFycmF5IHRvIGFwcGVuZC4KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuQmluYXJ5V3Jp
dGVyLnByb3RvdHlwZS5hcHBlbmRVaW50OEFycmF5XyA9IGZ1bmN0aW9uKGFycikgewotICB2YXIg
dGVtcCA9IHRoaXMuZW5jb2Rlcl8uZW5kKCk7Ci0gIHRoaXMuYmxvY2tzXy5wdXNoKHRlbXApOwot
ICB0aGlzLmJsb2Nrc18ucHVzaChhcnIpOwotICB0aGlzLnRvdGFsTGVuZ3RoXyArPSB0ZW1wLmxl
bmd0aCArIGFyci5sZW5ndGg7Ci19OwotCi0KLS8qKgotICogQmVnaW5zIGEgbmV3IG1lc3NhZ2Ug
Ynkgd3JpdGluZyB0aGUgZmllbGQgaGVhZGVyIGFuZCByZXR1cm5pbmcgYSBib29rbWFyawotICog
d2hpY2ggd2Ugd2lsbCB1c2UgdG8gcGF0Y2ggaW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIHRvIGluIGVu
ZERlbGltaXRlZF8gYmVsb3cuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQKLSAqIEByZXR1cm4g
eyFBcnJheS48bnVtYmVyPn0KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnBy
b3RvdHlwZS5iZWdpbkRlbGltaXRlZF8gPSBmdW5jdGlvbihmaWVsZCkgewotICB0aGlzLndyaXRl
RmllbGRIZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlU
RUQpOwotICB2YXIgYm9va21hcmsgPSB0aGlzLmVuY29kZXJfLmVuZCgpOwotICB0aGlzLmJsb2Nr
c18ucHVzaChib29rbWFyayk7Ci0gIHRoaXMudG90YWxMZW5ndGhfICs9IGJvb2ttYXJrLmxlbmd0
aDsKLSAgYm9va21hcmsucHVzaCh0aGlzLnRvdGFsTGVuZ3RoXyk7Ci0gIHJldHVybiBib29rbWFy
azsKLX07Ci0KLQotLyoqCi0gKiBFbmRzIGEgbWVzc2FnZSBieSBlbmNvZGluZyB0aGUgX2NoYW5n
ZV8gaW4gbGVuZ3RoIG9mIHRoZSBidWZmZXIgdG8gdGhlCi0gKiBwYXJlbnQgYmxvY2sgYW5kIGFk
ZHMgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gZW5jb2RlIHRoYXQgbGVuZ3RoIHRvCi0g
KiB0aGUgdG90YWwgYnl0ZSBsZW5ndGguCi0gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYm9v
a21hcmsKLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5lbmRE
ZWxpbWl0ZWRfID0gZnVuY3Rpb24oYm9va21hcmspIHsKLSAgdmFyIG9sZExlbmd0aCA9IGJvb2tt
YXJrLnBvcCgpOwotICB2YXIgbWVzc2FnZUxlbmd0aCA9IHRoaXMudG90YWxMZW5ndGhfICsgdGhp
cy5lbmNvZGVyXy5sZW5ndGgoKSAtIG9sZExlbmd0aDsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCht
ZXNzYWdlTGVuZ3RoID49IDApOwotCi0gIHdoaWxlIChtZXNzYWdlTGVuZ3RoID4gMTI3KSB7Ci0g
ICAgYm9va21hcmsucHVzaCgobWVzc2FnZUxlbmd0aCAmIDB4N2YpIHwgMHg4MCk7Ci0gICAgbWVz
c2FnZUxlbmd0aCA9IG1lc3NhZ2VMZW5ndGggPj4+IDc7Ci0gICAgdGhpcy50b3RhbExlbmd0aF8r
KzsKLSAgfQotCi0gIGJvb2ttYXJrLnB1c2gobWVzc2FnZUxlbmd0aCk7Ci0gIHRoaXMudG90YWxM
ZW5ndGhfKys7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgcHJlLXNlcmlhbGl6ZWQgbWVzc2Fn
ZSB0byB0aGUgYnVmZmVyLgotICogQHBhcmFtIHshVWludDhBcnJheX0gYnl0ZXMgVGhlIGFycmF5
IG9mIGJ5dGVzIHRvIHdyaXRlLgotICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBv
ZiB0aGUgcmFuZ2UgdG8gd3JpdGUuCi0gKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2Yg
dGhlIHJhbmdlIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3Jp
dGVTZXJpYWxpemVkTWVzc2FnZSA9IGZ1bmN0aW9uKAotICAgIGJ5dGVzLCBzdGFydCwgZW5kKSB7
Ci0gIHRoaXMuYXBwZW5kVWludDhBcnJheV8oYnl0ZXMuc3ViYXJyYXkoc3RhcnQsIGVuZCkpOwot
fTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIHByZS1zZXJpYWxpemVkIG1lc3NhZ2UgdG8gdGhlIGJ1
ZmZlciBpZiB0aGUgbWVzc2FnZSBhbmQgZW5kcG9pbnRzCi0gKiBhcmUgbm9uLW51bGwuCi0gKiBA
cGFyYW0gez9VaW50OEFycmF5fSBieXRlcyBUaGUgYXJyYXkgb2YgYnl0ZXMgdG8gd3JpdGUuCi0g
KiBAcGFyYW0gez9udW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gd3JpdGUu
Ci0gKiBAcGFyYW0gez9udW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZSB0byB3cml0ZS4K
LSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLm1heWJlV3JpdGVTZXJpYWxpemVkTWVz
c2FnZSA9IGZ1bmN0aW9uKAotICAgIGJ5dGVzLCBzdGFydCwgZW5kKSB7Ci0gIGlmIChieXRlcyAh
PSBudWxsICYmIHN0YXJ0ICE9IG51bGwgJiYgZW5kICE9IG51bGwpIHsKLSAgICB0aGlzLndyaXRl
U2VyaWFsaXplZE1lc3NhZ2UoYnl0ZXMsIHN0YXJ0LCBlbmQpOwotICB9Ci19OwotCi0KLS8qKgot
ICogUmVzZXRzIHRoZSB3cml0ZXIsIHRocm93aW5nIGF3YXkgYW55IGFjY3VtdWxhdGVkIGJ1ZmZl
cnMuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkg
ewotICB0aGlzLmJsb2Nrc18gPSBbXTsKLSAgdGhpcy5lbmNvZGVyXy5lbmQoKTsKLSAgdGhpcy50
b3RhbExlbmd0aF8gPSAwOwotICB0aGlzLmJvb2ttYXJrc18gPSBbXTsKLX07Ci0KLQotLyoqCi0g
KiBDb252ZXJ0cyB0aGUgZW5jb2RlZCBkYXRhIGludG8gYSBVaW50OEFycmF5LgotICogQHJldHVy
biB7IVVpbnQ4QXJyYXl9Ci0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5nZXRSZXN1
bHRCdWZmZXIgPSBmdW5jdGlvbigpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmJvb2tt
YXJrc18ubGVuZ3RoID09IDApOwotCi0gIHZhciBmbGF0ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy50
b3RhbExlbmd0aF8gKyB0aGlzLmVuY29kZXJfLmxlbmd0aCgpKTsKLQotICB2YXIgYmxvY2tzID0g
dGhpcy5ibG9ja3NfOwotICB2YXIgYmxvY2tDb3VudCA9IGJsb2Nrcy5sZW5ndGg7Ci0gIHZhciBv
ZmZzZXQgPSAwOwotCi0gIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tDb3VudDsgaSsrKSB7Ci0g
ICAgdmFyIGJsb2NrID0gYmxvY2tzW2ldOwotICAgIGZsYXQuc2V0KGJsb2NrLCBvZmZzZXQpOwot
ICAgIG9mZnNldCArPSBibG9jay5sZW5ndGg7Ci0gIH0KLQotICB2YXIgdGFpbCA9IHRoaXMuZW5j
b2Rlcl8uZW5kKCk7Ci0gIGZsYXQuc2V0KHRhaWwsIG9mZnNldCk7Ci0gIG9mZnNldCArPSB0YWls
Lmxlbmd0aDsKLQotICAvLyBQb3N0IGNvbmRpdGlvbjogYGZsYXR0ZW5lZGAgbXVzdCBoYXZlIGhh
ZCBldmVyeSBieXRlIHdyaXR0ZW4uCi0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQob2Zmc2V0ID09IGZs
YXQubGVuZ3RoKTsKLQotICAvLyBSZXBsYWNlIG91ciBibG9jayBsaXN0IHdpdGggdGhlIGZsYXR0
ZW5lZCBibG9jaywgd2hpY2ggbGV0cyBHQyByZWNsYWltCi0gIC8vIHRoZSB0ZW1wIGJsb2NrcyBz
b29uZXIuCi0gIHRoaXMuYmxvY2tzXyA9IFtmbGF0XTsKLQotICByZXR1cm4gZmxhdDsKLX07Ci0K
LQotLyoqCi0gKiBDb252ZXJ0cyB0aGUgZW5jb2RlZCBkYXRhIGludG8gYSBiYXM2NC1lbmNvZGVk
IHN0cmluZy4KLSAqIEByZXR1cm4ge3N0cmluZ30KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJv
dG90eXBlLmdldFJlc3VsdEJhc2U2NFN0cmluZyA9IGZ1bmN0aW9uKCkgewotICByZXR1cm4gZ29v
Zy5jcnlwdC5iYXNlNjQuZW5jb2RlQnl0ZUFycmF5KHRoaXMuZ2V0UmVzdWx0QnVmZmVyKCkpOwot
fTsKLQotCi0vKioKLSAqIEJlZ2lucyBhIG5ldyBzdWItbWVzc2FnZS4gVGhlIGNsaWVudCBtdXN0
IGNhbGwgZW5kU3ViTWVzc2FnZSgpIHdoZW4gdGhleSdyZQotICogZG9uZS4KLSAqIFRPRE8oYWFw
cGxlYnkpOiBEZXByZWNhdGVkLiBNb3ZlIGNhbGxlcnMgdG8gd3JpdGVNZXNzYWdlKCkuCi0gKiBA
cGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlciBvZiB0aGUgc3ViLW1lc3NhZ2Uu
Ci0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5iZWdpblN1Yk1lc3NhZ2UgPSBmdW5j
dGlvbihmaWVsZCkgewotICB0aGlzLmJvb2ttYXJrc18ucHVzaCh0aGlzLmJlZ2luRGVsaW1pdGVk
XyhmaWVsZCkpOwotfTsKLQotCi0vKioKLSAqIEZpbmlzaGVzIGEgc3ViLW1lc3NhZ2UgYW5kIHBh
Y2tzIGl0IGludG8gdGhlIHBhcmVudCBtZXNzYWdlcycgYnVmZmVyLgotICogVE9ETyhhYXBwbGVi
eSk6IERlcHJlY2F0ZWQuIE1vdmUgY2FsbGVycyB0byB3cml0ZU1lc3NhZ2UoKS4KLSAqLwotanNw
Yi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmVuZFN1Yk1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKLSAg
Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmJvb2ttYXJrc18ubGVuZ3RoID49IDApOwotICB0aGlz
LmVuZERlbGltaXRlZF8odGhpcy5ib29rbWFya3NfLnBvcCgpKTsKLX07Ci0KLQotLyoqCi0gKiBF
bmNvZGVzIGEgKGZpZWxkIG51bWJlciwgd2lyZSB0eXBlKSB0dXBsZSBpbnRvIGEgd2lyZS1mb3Jt
YXQgZmllbGQgaGVhZGVyCi0gKiBhbmQgc3RvcmVzIGl0IGluIHRoZSBidWZmZXIgYXMgYSB2YXJp
bnQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJh
bSB7bnVtYmVyfSB3aXJlVHlwZSBUaGUgd2lyZS10eXBlIG9mIHRoZSBmaWVsZCwgYXMgc3BlY2lm
aWVkIGluIHRoZQotICogICAgIHByb3RvY29sIGJ1ZmZlciBkb2N1bWVudGF0aW9uLgotICogQHBy
aXZhdGUKLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRmllbGRIZWFkZXJf
ID0KLSAgICBmdW5jdGlvbihmaWVsZCwgd2lyZVR5cGUpIHsKLSAgZ29vZy5hc3NlcnRzLmFzc2Vy
dChmaWVsZCA+PSAxICYmIGZpZWxkID09IE1hdGguZmxvb3IoZmllbGQpKTsKLSAgdmFyIHggPSBm
aWVsZCAqIDggKyB3aXJlVHlwZTsKLSAgdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50
MzIoeCk7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgZmllbGQgb2YgYW55IHZhbGlkIHNjYWxh
ciB0eXBlIHRvIHRoZSBiaW5hcnkgc3RyZWFtLgotICogQHBhcmFtIHtqc3BiLkJpbmFyeUNvbnN0
YW50cy5GaWVsZFR5cGV9IGZpZWxkVHlwZQotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkCi0gKiBA
cGFyYW0ge2pzcGIuQW55RmllbGRUeXBlfSB2YWx1ZQotICovCi1qc3BiLkJpbmFyeVdyaXRlci5w
cm90b3R5cGUud3JpdGVBbnkgPSBmdW5jdGlvbihmaWVsZFR5cGUsIGZpZWxkLCB2YWx1ZSkgewot
ICB2YXIgZmllbGRUeXBlcyA9IGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZTsKLSAgc3dp
dGNoIChmaWVsZFR5cGUpIHsKLSAgICBjYXNlIGZpZWxkVHlwZXMuRE9VQkxFOgotICAgICAgdGhp
cy53cml0ZURvdWJsZShmaWVsZCwgLyoqIEB0eXBlIHtudW1iZXJ9ICovKHZhbHVlKSk7Ci0gICAg
ICByZXR1cm47Ci0gICAgY2FzZSBmaWVsZFR5cGVzLkZMT0FUOgotICAgICAgdGhpcy53cml0ZUZs
b2F0KGZpZWxkLCAvKiogQHR5cGUge251bWJlcn0gKi8odmFsdWUpKTsKLSAgICAgIHJldHVybjsK
LSAgICBjYXNlIGZpZWxkVHlwZXMuSU5UNjQ6Ci0gICAgICB0aGlzLndyaXRlSW50NjQoZmllbGQs
IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyh2YWx1ZSkpOwotICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
ZmllbGRUeXBlcy5VSU5UNjQ6Ci0gICAgICB0aGlzLndyaXRlVWludDY0KGZpZWxkLCAvKiogQHR5
cGUge251bWJlcn0gKi8odmFsdWUpKTsKLSAgICAgIHJldHVybjsKLSAgICBjYXNlIGZpZWxkVHlw
ZXMuSU5UMzI6Ci0gICAgICB0aGlzLndyaXRlSW50MzIoZmllbGQsIC8qKiBAdHlwZSB7bnVtYmVy
fSAqLyh2YWx1ZSkpOwotICAgICAgcmV0dXJuOwotICAgIGNhc2UgZmllbGRUeXBlcy5GSVhFRDY0
OgotICAgICAgdGhpcy53cml0ZUZpeGVkNjQoZmllbGQsIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyh2
YWx1ZSkpOwotICAgICAgcmV0dXJuOwotICAgIGNhc2UgZmllbGRUeXBlcy5GSVhFRDMyOgotICAg
ICAgdGhpcy53cml0ZUZpeGVkMzIoZmllbGQsIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyh2YWx1ZSkp
OwotICAgICAgcmV0dXJuOwotICAgIGNhc2UgZmllbGRUeXBlcy5CT09MOgotICAgICAgdGhpcy53
cml0ZUJvb2woZmllbGQsIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8odmFsdWUpKTsKLSAgICAgIHJl
dHVybjsKLSAgICBjYXNlIGZpZWxkVHlwZXMuU1RSSU5HOgotICAgICAgdGhpcy53cml0ZVN0cmlu
ZyhmaWVsZCwgLyoqIEB0eXBlIHtzdHJpbmd9ICovKHZhbHVlKSk7Ci0gICAgICByZXR1cm47Ci0g
ICAgY2FzZSBmaWVsZFR5cGVzLkdST1VQOgotICAgICAgZ29vZy5hc3NlcnRzLmZhaWwoJ0dyb3Vw
IGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiB3cml0ZUFueSgpJyk7Ci0gICAgICByZXR1cm47
Ci0gICAgY2FzZSBmaWVsZFR5cGVzLk1FU1NBR0U6Ci0gICAgICBnb29nLmFzc2VydHMuZmFpbCgn
TWVzc2FnZSBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKScpOwotICAgICAg
cmV0dXJuOwotICAgIGNhc2UgZmllbGRUeXBlcy5CWVRFUzoKLSAgICAgIHRoaXMud3JpdGVCeXRl
cyhmaWVsZCwgLyoqIEB0eXBlIHs/VWludDhBcnJheX0gKi8odmFsdWUpKTsKLSAgICAgIHJldHVy
bjsKLSAgICBjYXNlIGZpZWxkVHlwZXMuVUlOVDMyOgotICAgICAgdGhpcy53cml0ZVVpbnQzMihm
aWVsZCwgLyoqIEB0eXBlIHtudW1iZXJ9ICovKHZhbHVlKSk7Ci0gICAgICByZXR1cm47Ci0gICAg
Y2FzZSBmaWVsZFR5cGVzLkVOVU06Ci0gICAgICB0aGlzLndyaXRlRW51bShmaWVsZCwgLyoqIEB0
eXBlIHtudW1iZXJ9ICovKHZhbHVlKSk7Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBmaWVsZFR5
cGVzLlNGSVhFRDMyOgotICAgICAgdGhpcy53cml0ZVNmaXhlZDMyKGZpZWxkLCAvKiogQHR5cGUg
e251bWJlcn0gKi8odmFsdWUpKTsKLSAgICAgIHJldHVybjsKLSAgICBjYXNlIGZpZWxkVHlwZXMu
U0ZJWEVENjQ6Ci0gICAgICB0aGlzLndyaXRlU2ZpeGVkNjQoZmllbGQsIC8qKiBAdHlwZSB7bnVt
YmVyfSAqLyh2YWx1ZSkpOwotICAgICAgcmV0dXJuOwotICAgIGNhc2UgZmllbGRUeXBlcy5TSU5U
MzI6Ci0gICAgICB0aGlzLndyaXRlU2ludDMyKGZpZWxkLCAvKiogQHR5cGUge251bWJlcn0gKi8o
dmFsdWUpKTsKLSAgICAgIHJldHVybjsKLSAgICBjYXNlIGZpZWxkVHlwZXMuU0lOVDY0OgotICAg
ICAgdGhpcy53cml0ZVNpbnQ2NChmaWVsZCwgLyoqIEB0eXBlIHtudW1iZXJ9ICovKHZhbHVlKSk7
Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBmaWVsZFR5cGVzLkZIQVNINjQ6Ci0gICAgICB0aGlz
LndyaXRlRml4ZWRIYXNoNjQoZmllbGQsIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyh2YWx1ZSkpOwot
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgZmllbGRUeXBlcy5WSEFTSDY0OgotICAgICAgdGhpcy53
cml0ZVZhcmludEhhc2g2NChmaWVsZCwgLyoqIEB0eXBlIHtzdHJpbmd9ICovKHZhbHVlKSk7Ci0g
ICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdvb2cuYXNzZXJ0cy5mYWlsKCdJbnZh
bGlkIGZpZWxkIHR5cGUgaW4gd3JpdGVBbnkoKScpOwotICAgICAgcmV0dXJuOwotICB9Ci19Owot
Ci0KLS8qKgotICogV3JpdGVzIGEgdmFyaW50IGZpZWxkIHRvIHRoZSBidWZmZXIgd2l0aG91dCBy
YW5nZSBjaGVja2luZy4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVy
LgotICogQHBhcmFtIHtudW1iZXI/fSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUuCi0gKiBAcHJp
dmF0ZQotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVbnNpZ25lZFZhcmlu
dDMyXyA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0
dXJuOwotICB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50
cy5XaXJlVHlwZS5WQVJJTlQpOwotICB0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQz
Mih2YWx1ZSk7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgdmFyaW50IGZpZWxkIHRvIHRoZSBi
dWZmZXIgd2l0aG91dCByYW5nZSBjaGVja2luZy4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBU
aGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtudW1iZXI/fSB2YWx1ZSBUaGUgdmFsdWUgdG8g
d3JpdGUuCi0gKiBAcHJpdmF0ZQotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3Jp
dGVTaWduZWRWYXJpbnQzMl8gPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUpIHsKLSAgaWYgKHZhbHVl
ID09IG51bGwpIHJldHVybjsKLSAgdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhmaWVsZCwganNwYi5C
aW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKTsKLSAgdGhpcy5lbmNvZGVyXy53cml0ZVNp
Z25lZFZhcmludDMyKHZhbHVlKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYSB2YXJpbnQgZmll
bGQgdG8gdGhlIGJ1ZmZlciB3aXRob3V0IHJhbmdlIGNoZWNraW5nLgotICogQHBhcmFtIHtudW1i
ZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0ge251bWJlcj99IHZhbHVlIFRo
ZSB2YWx1ZSB0byB3cml0ZS4KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnBy
b3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50NjRfID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7
Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIHRoaXMud3JpdGVGaWVsZEhlYWRlcl8o
ZmllbGQsIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7Ci0gIHRoaXMuZW5j
b2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDY0KHZhbHVlKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0
ZXMgYSB2YXJpbnQgZmllbGQgdG8gdGhlIGJ1ZmZlciB3aXRob3V0IHJhbmdlIGNoZWNraW5nLgot
ICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0ge251
bWJlcj99IHZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZS4KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIu
QmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpZ25lZFZhcmludDY0XyA9IGZ1bmN0aW9uKGZp
ZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICB0aGlzLndyaXRl
RmllbGRIZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQp
OwotICB0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50NjQodmFsdWUpOwotfTsKLQotCi0v
KioKLSAqIFdyaXRlcyBhIHppZ3phZyB2YXJpbnQgZmllbGQgdG8gdGhlIGJ1ZmZlciB3aXRob3V0
IHJhbmdlIGNoZWNraW5nLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1i
ZXIuCi0gKiBAcGFyYW0ge251bWJlcj99IHZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZS4KLSAqIEBw
cml2YXRlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1Zhcmlu
dDMyXyA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0
dXJuOwotICB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50
cy5XaXJlVHlwZS5WQVJJTlQpOwotICB0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50MzIo
dmFsdWUpOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIHppZ3phZyB2YXJpbnQgZmllbGQgdG8g
dGhlIGJ1ZmZlciB3aXRob3V0IHJhbmdlIGNoZWNraW5nLgotICogQHBhcmFtIHtudW1iZXJ9IGZp
ZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0ge251bWJlcj99IHZhbHVlIFRoZSB2YWx1
ZSB0byB3cml0ZS4KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlw
ZS53cml0ZVppZ3phZ1ZhcmludDY0XyA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAo
dmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGZpZWxkLCBq
c3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpOwotICB0aGlzLmVuY29kZXJfLndy
aXRlWmlnemFnVmFyaW50NjQodmFsdWUpOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBpbnQz
MiBmaWVsZCB0byB0aGUgYnVmZmVyLiBOdW1iZXJzIG91dHNpZGUgdGhlIHJhbmdlIFstMl4zMSwy
XjMxKQotICogd2lsbCBiZSB0cnVuY2F0ZWQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhl
IGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7bnVtYmVyP30gdmFsdWUgVGhlIHZhbHVlIHRvIHdy
aXRlLgotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQzMiA9IGZ1bmN0
aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICBnb29n
LmFzc2VydHMuYXNzZXJ0KCh2YWx1ZSA+PSAtanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMx
KSAmJgotICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA8IGpzcGIuQmluYXJ5Q29uc3RhbnRz
LlRXT19UT18zMSkpOwotICB0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGZpZWxkLCB2YWx1ZSk7
Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGFuIGludDMyIGZpZWxkIHJlcHJlc2VudGVkIGFzIGEg
c3RyaW5nIHRvIHRoZSBidWZmZXIuIE51bWJlcnMgb3V0c2lkZQotICogdGhlIHJhbmdlIFstMl4z
MSwyXjMxKSB3aWxsIGJlIHRydW5jYXRlZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUg
ZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtzdHJpbmc/fSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3Jp
dGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDMyU3RyaW5nID0g
ZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0g
IHZhciBpbnRWYWx1ZSA9IC8qKiB7bnVtYmVyfSAqLyBwYXJzZUludCh2YWx1ZSwgMTApOwotICBn
b29nLmFzc2VydHMuYXNzZXJ0KChpbnRWYWx1ZSA+PSAtanNwYi5CaW5hcnlDb25zdGFudHMuVFdP
X1RPXzMxKSAmJgotICAgICAgICAgICAgICAgICAgICAgIChpbnRWYWx1ZSA8IGpzcGIuQmluYXJ5
Q29uc3RhbnRzLlRXT19UT18zMSkpOwotICB0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGZpZWxk
LCBpbnRWYWx1ZSk7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGFuIGludDY0IGZpZWxkIHRvIHRo
ZSBidWZmZXIuIE51bWJlcnMgb3V0c2lkZSB0aGUgcmFuZ2UgWy0yXjYzLDJeNjMpCi0gKiB3aWxs
IGJlIHRydW5jYXRlZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVy
LgotICogQHBhcmFtIHtudW1iZXI/fSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUuCi0gKi8KLWpz
cGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0ID0gZnVuY3Rpb24oZmllbGQsIHZh
bHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGdvb2cuYXNzZXJ0cy5hc3Nl
cnQoKHZhbHVlID49IC1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgKHZhbHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSk7
Ci0gIHRoaXMud3JpdGVTaWduZWRWYXJpbnQ2NF8oZmllbGQsIHZhbHVlKTsKLX07Ci0KLQotLyoq
Ci0gKiBXcml0ZXMgYSBpbnQ2NCBmaWVsZCAod2l0aCB2YWx1ZSBhcyBhIHN0cmluZykgdG8gdGhl
IGJ1ZmZlci4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICog
QHBhcmFtIHtzdHJpbmc/fSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmlu
YXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUludDY0U3RyaW5nID0gZnVuY3Rpb24oZmllbGQsIHZh
bHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIHZhciBudW0gPSBqc3BiLmFy
aXRoLkludDY0LmZyb21TdHJpbmcodmFsdWUpOwotICB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGZp
ZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpOwotICB0aGlzLmVuY29k
ZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChudW0ubG8sIG51bS5oaSk7Ci19OwotCi0KLS8qKgotICog
V3JpdGVzIGEgdWludDMyIGZpZWxkIHRvIHRoZSBidWZmZXIuIE51bWJlcnMgb3V0c2lkZSB0aGUg
cmFuZ2UgWzAsMl4zMikKLSAqIHdpbGwgYmUgdHJ1bmNhdGVkLgotICogQHBhcmFtIHtudW1iZXJ9
IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0ge251bWJlcj99IHZhbHVlIFRoZSB2
YWx1ZSB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWlu
dDMyID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1
cm47Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoKHZhbHVlID49IDApICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgKHZhbHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSk7Ci0gIHRo
aXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhmaWVsZCwgdmFsdWUpOwotfTsKLQotCi0vKioKLSAq
IFdyaXRlcyBhIHVpbnQzMiBmaWVsZCByZXByZXNlbnRlZCBhcyBhIHN0cmluZyB0byB0aGUgYnVm
ZmVyLiBOdW1iZXJzIG91dHNpZGUKLSAqIHRoZSByYW5nZSBbMCwyXjMyKSB3aWxsIGJlIHRydW5j
YXRlZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBh
cmFtIHtzdHJpbmc/fSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5
V3JpdGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMlN0cmluZyA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1
ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICB2YXIgaW50VmFsdWUgPSAvKiog
e251bWJlcn0gKi8gcGFyc2VJbnQodmFsdWUsIDEwKTsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCgo
aW50VmFsdWUgPj0gMCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAoaW50VmFsdWUgPCBqc3Bi
LkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpKTsKLSAgdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50
MzJfKGZpZWxkLCBpbnRWYWx1ZSk7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgdWludDY0IGZp
ZWxkIHRvIHRoZSBidWZmZXIuIE51bWJlcnMgb3V0c2lkZSB0aGUgcmFuZ2UgWzAsMl42NCkKLSAq
IHdpbGwgYmUgdHJ1bmNhdGVkLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBu
dW1iZXIuCi0gKiBAcGFyYW0ge251bWJlcj99IHZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZS4KLSAq
LwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWludDY0ID0gZnVuY3Rpb24oZmll
bGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGdvb2cuYXNzZXJ0
cy5hc3NlcnQoKHZhbHVlID49IDApICYmCi0gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIDwg
anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSk7Ci0gIHRoaXMud3JpdGVVbnNpZ25lZFZh
cmludDY0XyhmaWVsZCwgdmFsdWUpOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIHVpbnQ2NCBm
aWVsZCAod2l0aCB2YWx1ZSBhcyBhIHN0cmluZykgdG8gdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSB7
bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtzdHJpbmc/fSB2YWx1
ZSBUaGUgdmFsdWUgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53
cml0ZVVpbnQ2NFN0cmluZyA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUg
PT0gbnVsbCkgcmV0dXJuOwotICB2YXIgbnVtID0ganNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmlu
Zyh2YWx1ZSk7Ci0gIHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZmllbGQsIGpzcGIuQmluYXJ5Q29u
c3RhbnRzLldpcmVUeXBlLlZBUklOVCk7Ci0gIHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmlu
dDY0KG51bS5sbywgbnVtLmhpKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYSBzaW50MzIgZmll
bGQgdG8gdGhlIGJ1ZmZlci4gTnVtYmVycyBvdXRzaWRlIHRoZSByYW5nZSBbLTJeMzEsMl4zMSkK
LSAqIHdpbGwgYmUgdHJ1bmNhdGVkLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVs
ZCBudW1iZXIuCi0gKiBAcGFyYW0ge251bWJlcj99IHZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZS4K
LSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludDMyID0gZnVuY3Rpb24o
ZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGdvb2cuYXNz
ZXJ0cy5hc3NlcnQoKHZhbHVlID49IC1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdP
X1RPXzMxKSk7Ci0gIHRoaXMud3JpdGVaaWd6YWdWYXJpbnQzMl8oZmllbGQsIHZhbHVlKTsKLX07
Ci0KLQotLyoqCi0gKiBXcml0ZXMgYSBzaW50NjQgZmllbGQgdG8gdGhlIGJ1ZmZlci4gTnVtYmVy
cyBvdXRzaWRlIHRoZSByYW5nZSBbLTJeNjMsMl42MykKLSAqIHdpbGwgYmUgdHJ1bmNhdGVkLgot
ICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0ge251
bWJlcj99IHZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIu
cHJvdG90eXBlLndyaXRlU2ludDY0ID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2
YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoKHZhbHVlID49IC1q
c3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpICYmCi0gICAgICAgICAgICAgICAgICAgICAg
KHZhbHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSk7Ci0gIHRoaXMud3JpdGVa
aWd6YWdWYXJpbnQ2NF8oZmllbGQsIHZhbHVlKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYSBm
aXhlZDMyIGZpZWxkIHRvIHRoZSBidWZmZXIuIE51bWJlcnMgb3V0c2lkZSB0aGUgcmFuZ2UgWzAs
Ml4zMikKLSAqIHdpbGwgYmUgdHJ1bmNhdGVkLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRo
ZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0ge251bWJlcj99IHZhbHVlIFRoZSB2YWx1ZSB0byB3
cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4ZWQzMiA9IGZ1
bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICBn
b29nLmFzc2VydHMuYXNzZXJ0KCh2YWx1ZSA+PSAwKSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICh2YWx1ZSA8IGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMikpOwotICB0aGlzLndyaXRl
RmllbGRIZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMy
KTsKLSAgdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQzMih2YWx1ZSk7Ci19OwotCi0KLS8qKgotICog
V3JpdGVzIGEgZml4ZWQ2NCBmaWVsZCB0byB0aGUgYnVmZmVyLiBOdW1iZXJzIG91dHNpZGUgdGhl
IHJhbmdlIFswLDJeNjQpCi0gKiB3aWxsIGJlIHRydW5jYXRlZC4KLSAqIEBwYXJhbSB7bnVtYmVy
fSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtudW1iZXI/fSB2YWx1ZSBUaGUg
dmFsdWUgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZp
eGVkNjQgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUpIHsKLSAgaWYgKHZhbHVlID09IG51bGwpIHJl
dHVybjsKLSAgZ29vZy5hc3NlcnRzLmFzc2VydCgodmFsdWUgPj0gMCkgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAodmFsdWUgPCBqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQpKTsKLSAg
dGhpcy53cml0ZUZpZWxkSGVhZGVyXyhmaWVsZCwganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5
cGUuRklYRUQ2NCk7Ci0gIHRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50NjQodmFsdWUpOwotfTsKLQot
Ci0vKioKLSAqIFdyaXRlcyBhIHNmaXhlZDMyIGZpZWxkIHRvIHRoZSBidWZmZXIuIE51bWJlcnMg
b3V0c2lkZSB0aGUgcmFuZ2UKLSAqIFstMl4zMSwyXjMxKSB3aWxsIGJlIHRydW5jYXRlZC4KLSAq
IEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtudW1i
ZXI/fSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnBy
b3RvdHlwZS53cml0ZVNmaXhlZDMyID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2
YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoKHZhbHVlID49IC1q
c3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpICYmCi0gICAgICAgICAgICAgICAgICAgICAg
KHZhbHVlIDwganNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSk7Ci0gIHRoaXMud3JpdGVG
aWVsZEhlYWRlcl8oZmllbGQsIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIp
OwotICB0aGlzLmVuY29kZXJfLndyaXRlSW50MzIodmFsdWUpOwotfTsKLQotCi0vKioKLSAqIFdy
aXRlcyBhIHNmaXhlZDY0IGZpZWxkIHRvIHRoZSBidWZmZXIuIE51bWJlcnMgb3V0c2lkZSB0aGUg
cmFuZ2UKLSAqIFstMl42MywyXjYzKSB3aWxsIGJlIHRydW5jYXRlZC4KLSAqIEBwYXJhbSB7bnVt
YmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtudW1iZXI/fSB2YWx1ZSBU
aGUgdmFsdWUgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0
ZVNmaXhlZDY0ID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxs
KSByZXR1cm47Ci0gIGdvb2cuYXNzZXJ0cy5hc3NlcnQoKHZhbHVlID49IC1qc3BiLkJpbmFyeUNv
bnN0YW50cy5UV09fVE9fNjMpICYmCi0gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIDwganNw
Yi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSk7Ci0gIHRoaXMud3JpdGVGaWVsZEhlYWRlcl8o
ZmllbGQsIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpOwotICB0aGlzLmVu
Y29kZXJfLndyaXRlSW50NjQodmFsdWUpOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIHNpbmds
ZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgZmllbGQgdG8gdGhlIGJ1ZmZlci4gTnVtYmVycwot
ICogcmVxdWlyaW5nIG1vcmUgdGhhbiAzMiBiaXRzIG9mIHByZWNpc2lvbiB3aWxsIGJlIHRydW5j
YXRlZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBh
cmFtIHtudW1iZXI/fSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5
V3JpdGVyLnByb3RvdHlwZS53cml0ZUZsb2F0ID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0g
IGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZmll
bGQsIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpOwotICB0aGlzLmVuY29k
ZXJfLndyaXRlRmxvYXQodmFsdWUpOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIGRvdWJsZS1w
cmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgZmllbGQgdG8gdGhlIGJ1ZmZlci4gQXMgdGhpcyBpcyB0
aGUKLSAqIG5hdGl2ZSBmb3JtYXQgdXNlZCBieSBKYXZhU2NyaXB0LCBubyBwcmVjaXNpb24gd2ls
bCBiZSBsb3N0LgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0g
KiBAcGFyYW0ge251bWJlcj99IHZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZS4KLSAqLwotanNwYi5C
aW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRG91YmxlID0gZnVuY3Rpb24oZmllbGQsIHZhbHVl
KSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIHRoaXMud3JpdGVGaWVsZEhlYWRl
cl8oZmllbGQsIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpOwotICB0aGlz
LmVuY29kZXJfLndyaXRlRG91YmxlKHZhbHVlKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYSBi
b29sZWFuIGZpZWxkIHRvIHRoZSBidWZmZXIuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhl
IGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7Ym9vbGVhbj99IHZhbHVlIFRoZSB2YWx1ZSB0byB3
cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlQm9vbCA9IGZ1bmN0
aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICBnb29n
LmFzc2VydHMuYXNzZXJ0KGdvb2cuaXNCb29sZWFuKHZhbHVlKSk7Ci0gIHRoaXMud3JpdGVGaWVs
ZEhlYWRlcl8oZmllbGQsIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCk7Ci0g
IHRoaXMuZW5jb2Rlcl8ud3JpdGVCb29sKHZhbHVlKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMg
YW4gZW51bSBmaWVsZCB0byB0aGUgYnVmZmVyLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRo
ZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0ge251bWJlcj99IHZhbHVlIFRoZSB2YWx1ZSB0byB3
cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRW51bSA9IGZ1bmN0
aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICBnb29n
LmFzc2VydHMuYXNzZXJ0KCh2YWx1ZSA+PSAtanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMx
KSAmJgotICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA8IGpzcGIuQmluYXJ5Q29uc3RhbnRz
LlRXT19UT18zMSkpOwotICB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFy
eUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpOwotICB0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVk
VmFyaW50MzIodmFsdWUpOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIHN0cmluZyBmaWVsZCB0
byB0aGUgYnVmZmVyLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIu
Ci0gKiBAcGFyYW0ge3N0cmluZz99IHZhbHVlIFRoZSBzdHJpbmcgdG8gd3JpdGUuCi0gKi8KLWpz
cGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZyA9IGZ1bmN0aW9uKGZpZWxkLCB2
YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICB2YXIgYm9va21hcmsgPSB0
aGlzLmJlZ2luRGVsaW1pdGVkXyhmaWVsZCk7Ci0gIHRoaXMuZW5jb2Rlcl8ud3JpdGVTdHJpbmco
dmFsdWUpOwotICB0aGlzLmVuZERlbGltaXRlZF8oYm9va21hcmspOwotfTsKLQotCi0vKioKLSAq
IFdyaXRlcyBhbiBhcmJpdHJhcnkgYnl0ZSBmaWVsZCB0byB0aGUgYnVmZmVyLiBOb3RlIC0gdG8g
bWF0Y2ggdGhlIGJlaGF2aW9yCi0gKiBvZiB0aGUgQysrIGltcGxlbWVudGF0aW9uLCBlbXB0eSBi
eXRlIGFycmF5cyBfYXJlXyBzZXJpYWxpemVkLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRo
ZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9qc3BiLkJ5dGVTb3VyY2V9IHZhbHVlIFRoZSBh
cnJheSBvZiBieXRlcyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBl
LndyaXRlQnl0ZXMgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUpIHsKLSAgaWYgKHZhbHVlID09IG51
bGwpIHJldHVybjsKLSAgdmFyIGJ5dGVzID0ganNwYi51dGlscy5ieXRlU291cmNlVG9VaW50OEFy
cmF5KHZhbHVlKTsKLSAgdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhmaWVsZCwganNwYi5CaW5hcnlD
b25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTsKLSAgdGhpcy5lbmNvZGVyXy53cml0ZVVuc2ln
bmVkVmFyaW50MzIoYnl0ZXMubGVuZ3RoKTsKLSAgdGhpcy5hcHBlbmRVaW50OEFycmF5XyhieXRl
cyk7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgbWVzc2FnZSB0byB0aGUgYnVmZmVyLgotICog
QHRlbXBsYXRlIE1lc3NhZ2VUeXBlCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxk
IG51bWJlci4KLSAqIEBwYXJhbSB7P01lc3NhZ2VUeXBlfSB2YWx1ZSBUaGUgbWVzc2FnZSB0byB3
cml0ZS4KLSAqIEBwYXJhbSB7IWpzcGIuV3JpdGVyRnVuY3Rpb259IHdyaXRlckNhbGxiYWNrIFdp
bGwgYmUgaW52b2tlZCB3aXRoIHRoZSB2YWx1ZQotICogICAgIHRvIHdyaXRlIGFuZCB0aGUgd3Jp
dGVyIHRvIHdyaXRlIGl0IHdpdGguCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53
cml0ZU1lc3NhZ2UgPSBmdW5jdGlvbigKLSAgICBmaWVsZCwgdmFsdWUsIHdyaXRlckNhbGxiYWNr
KSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIHZhciBib29rbWFyayA9IHRoaXMu
YmVnaW5EZWxpbWl0ZWRfKGZpZWxkKTsKLSAgd3JpdGVyQ2FsbGJhY2sodmFsdWUsIHRoaXMpOwot
ICB0aGlzLmVuZERlbGltaXRlZF8oYm9va21hcmspOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBh
IGdyb3VwIG1lc3NhZ2UgdG8gdGhlIGJ1ZmZlci4KLSAqCi0gKiBAdGVtcGxhdGUgTWVzc2FnZVR5
cGUKLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFt
IHs/TWVzc2FnZVR5cGV9IHZhbHVlIFRoZSBtZXNzYWdlIHRvIHdyaXRlLCB3cmFwcGVkIHdpdGgg
U1RBUlRfR1JPVVAgLwotICogICAgIEVORF9HUk9VUCB0YWdzLiBXaWxsIGJlIGEgbm8tb3AgaWYg
J3ZhbHVlJyBpcyBudWxsLgotICogQHBhcmFtIHshanNwYi5Xcml0ZXJGdW5jdGlvbn0gd3JpdGVy
Q2FsbGJhY2sgV2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIHZhbHVlCi0gKiAgICAgdG8gd3JpdGUg
YW5kIHRoZSB3cml0ZXIgdG8gd3JpdGUgaXQgd2l0aC4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIu
cHJvdG90eXBlLndyaXRlR3JvdXAgPSBmdW5jdGlvbigKLSAgICBmaWVsZCwgdmFsdWUsIHdyaXRl
ckNhbGxiYWNrKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIHRoaXMud3JpdGVG
aWVsZEhlYWRlcl8oZmllbGQsIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dS
T1VQKTsKLSAgd3JpdGVyQ2FsbGJhY2sodmFsdWUsIHRoaXMpOwotICB0aGlzLndyaXRlRmllbGRI
ZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVApOwot
fTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIDY0LWJpdCBoYXNoIHN0cmluZyBmaWVsZCAoOCBjaGFy
YWN0ZXJzIEAgOCBiaXRzIG9mIGRhdGEgZWFjaCkgdG8KLSAqIHRoZSBidWZmZXIuCi0gKiBAcGFy
YW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7c3RyaW5nP30g
dmFsdWUgVGhlIGhhc2ggc3RyaW5nLgotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUu
d3JpdGVGaXhlZEhhc2g2NCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUg
PT0gbnVsbCkgcmV0dXJuOwotICBnb29nLmFzc2VydHMuYXNzZXJ0KHZhbHVlLmxlbmd0aCA9PSA4
KTsKLSAgdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhmaWVsZCwganNwYi5CaW5hcnlDb25zdGFudHMu
V2lyZVR5cGUuRklYRUQ2NCk7Ci0gIHRoaXMuZW5jb2Rlcl8ud3JpdGVGaXhlZEhhc2g2NCh2YWx1
ZSk7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgNjQtYml0IGhhc2ggc3RyaW5nIGZpZWxkICg4
IGNoYXJhY3RlcnMgQCA4IGJpdHMgb2YgZGF0YSBlYWNoKSB0bwotICogdGhlIGJ1ZmZlci4KLSAq
IEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtzdHJp
bmc/fSB2YWx1ZSBUaGUgaGFzaCBzdHJpbmcuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3Rv
dHlwZS53cml0ZVZhcmludEhhc2g2NCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAo
dmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICBnb29nLmFzc2VydHMuYXNzZXJ0KHZhbHVlLmxlbmd0
aCA9PSA4KTsKLSAgdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhmaWVsZCwganNwYi5CaW5hcnlDb25z
dGFudHMuV2lyZVR5cGUuVkFSSU5UKTsKLSAgdGhpcy5lbmNvZGVyXy53cml0ZVZhcmludEhhc2g2
NCh2YWx1ZSk7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgdG8g
dGhlIGJ1ZmZlciBhcyBhIHJlcGVhdGVkIHZhcmludCBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVy
fSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJyYXkuPG51bWJlcj59IHZh
bHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdyaXRlLgotICogQHByaXZhdGUKLSAqLwotanNwYi5C
aW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVbnNpZ25lZFZhcmludDMyXyA9Ci0g
ICAgZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47
Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKLSAgICB0aGlzLndy
aXRlVW5zaWduZWRWYXJpbnQzMl8oZmllbGQsIHZhbHVlW2ldKTsKLSAgfQotfTsKLQotCi0vKioK
LSAqIFdyaXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIHRvIHRoZSBidWZmZXIgYXMgYSByZXBlYXRl
ZCB2YXJpbnQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJl
ci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0
byB3cml0ZS4KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53
cml0ZVJlcGVhdGVkU2lnbmVkVmFyaW50MzJfID0KLSAgICBmdW5jdGlvbihmaWVsZCwgdmFsdWUp
IHsKLSAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCB2
YWx1ZS5sZW5ndGg7IGkrKykgewotICAgIHRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oZmllbGQs
IHZhbHVlW2ldKTsKLSAgfQotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBhcnJheSBvZiBudW1i
ZXJzIHRvIHRoZSBidWZmZXIgYXMgYSByZXBlYXRlZCB2YXJpbnQgZmllbGQuCi0gKiBAcGFyYW0g
e251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1i
ZXI+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0ZS4KLSAqIEBwcml2YXRlCi0gKi8K
LWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVW5zaWduZWRWYXJpbnQ2
NF8gPQotICAgIGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkg
cmV0dXJuOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAg
dGhpcy53cml0ZVVuc2lnbmVkVmFyaW50NjRfKGZpZWxkLCB2YWx1ZVtpXSk7Ci0gIH0KLX07Ci0K
LQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0aGUgYnVmZmVyIGFzIGEg
cmVwZWF0ZWQgdmFyaW50IGZpZWxkLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVs
ZCBudW1iZXIuCi0gKiBAcGFyYW0gez9BcnJheS48bnVtYmVyPn0gdmFsdWUgVGhlIGFycmF5IG9m
IGludHMgdG8gd3JpdGUuCi0gKiBAcHJpdmF0ZQotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90
b3R5cGUud3JpdGVSZXBlYXRlZFNpZ25lZFZhcmludDY0XyA9Ci0gICAgZnVuY3Rpb24oZmllbGQs
IHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGZvciAodmFyIGkgPSAw
OyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKLSAgICB0aGlzLndyaXRlU2lnbmVkVmFyaW50NjRf
KGZpZWxkLCB2YWx1ZVtpXSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkg
b2YgbnVtYmVycyB0byB0aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQgemlnemFnIGZpZWxkLgotICog
QHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9BcnJh
eS48bnVtYmVyPn0gdmFsdWUgVGhlIGFycmF5IG9mIGludHMgdG8gd3JpdGUuCi0gKiBAcHJpdmF0
ZQotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFppZ3phZzMy
XyA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJu
OwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAgdGhpcy53
cml0ZVppZ3phZ1ZhcmludDMyXyhmaWVsZCwgdmFsdWVbaV0pOwotICB9Ci19OwotCi0KLS8qKgot
ICogV3JpdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgdG8gdGhlIGJ1ZmZlciBhcyBhIHJlcGVhdGVk
IHppZ3phZyBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVy
LgotICogQHBhcmFtIHs/QXJyYXkuPG51bWJlcj59IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRv
IHdyaXRlLgotICogQHByaXZhdGUKLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndy
aXRlUmVwZWF0ZWRaaWd6YWdfID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1
ZSA9PSBudWxsKSByZXR1cm47Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBp
KyspIHsKLSAgICB0aGlzLndyaXRlWmlnemFnVmFyaW50NjRfKGZpZWxkLCB2YWx1ZVtpXSk7Ci0g
IH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0aGUgYnVm
ZmVyIGFzIGEgcmVwZWF0ZWQgMzItYml0IGludCBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBm
aWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJyYXkuPG51bWJlcj59IHZhbHVl
IFRoZSBhcnJheSBvZiBpbnRzIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90
b3R5cGUud3JpdGVSZXBlYXRlZEludDMyID0KLSAgICBqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5
cGUud3JpdGVSZXBlYXRlZFNpZ25lZFZhcmludDMyXzsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBh
cnJheSBvZiBudW1iZXJzIGZvcm1hdHRlZCBhcyBzdHJpbmdzIHRvIHRoZSBidWZmZXIgYXMgYSBy
ZXBlYXRlZAotICogMzItYml0IGludCBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBU
aGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJyYXkuPHN0cmluZz59IHZhbHVlIFRoZSBh
cnJheSBvZiBpbnRzIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUu
d3JpdGVSZXBlYXRlZEludDMyU3RyaW5nID0KLSAgICBmdW5jdGlvbihmaWVsZCwgdmFsdWUpIHsK
LSAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1
ZS5sZW5ndGg7IGkrKykgewotICAgIHRoaXMud3JpdGVJbnQzMlN0cmluZyhmaWVsZCwgdmFsdWVb
aV0pOwotICB9Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgdG8g
dGhlIGJ1ZmZlciBhcyBhIHJlcGVhdGVkIDY0LWJpdCBpbnQgZmllbGQuCi0gKiBAcGFyYW0ge251
bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+
fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0
ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRJbnQ2NCA9Ci0gICAganNwYi5CaW5hcnlXcml0ZXIu
cHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaWduZWRWYXJpbnQ2NF87Ci0KLQotLyoqCi0gKiBXcml0
ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyBmb3JtYXR0ZWQgYXMgc3RyaW5ncyB0byB0aGUgYnVmZmVy
IGFzIGEgcmVwZWF0ZWQKLSAqIDY0LWJpdCBpbnQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0g
ZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxzdHJpbmc+fSB2YWx1
ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJv
dG90eXBlLndyaXRlUmVwZWF0ZWRJbnQ2NFN0cmluZyA9Ci0gICAgZnVuY3Rpb24oZmllbGQsIHZh
bHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGZvciAodmFyIGkgPSAwOyBp
IDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKLSAgICB0aGlzLndyaXRlSW50NjRTdHJpbmcoZmllbGQs
IHZhbHVlW2ldKTsKLSAgfQotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBhcnJheSBudW1iZXJz
IHRvIHRoZSBidWZmZXIgYXMgYSByZXBlYXRlZCB1bnNpZ25lZCAzMi1iaXQgaW50Ci0gKiAgICAg
ZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBw
YXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0ZS4K
LSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50MzIgPQot
ICAgIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVW5zaWduZWRWYXJp
bnQzMl87Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyBmb3JtYXR0ZWQg
YXMgc3RyaW5ncyB0byB0aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQKLSAqIHVuc2lnbmVkIDMyLWJp
dCBpbnQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4K
LSAqIEBwYXJhbSB7P0FycmF5LjxzdHJpbmc+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3
cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50
MzJTdHJpbmcgPQotICAgIGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0g
bnVsbCkgcmV0dXJuOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7
Ci0gICAgdGhpcy53cml0ZVVpbnQzMlN0cmluZyhmaWVsZCwgdmFsdWVbaV0pOwotICB9Ci19Owot
Ci0KLS8qKgotICogV3JpdGVzIGFuIGFycmF5IG51bWJlcnMgdG8gdGhlIGJ1ZmZlciBhcyBhIHJl
cGVhdGVkIHVuc2lnbmVkIDY0LWJpdCBpbnQKLSAqICAgICBmaWVsZC4KLSAqIEBwYXJhbSB7bnVt
YmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJyYXkuPG51bWJlcj59
IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFyeVdyaXRl
ci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQ2NCA9Ci0gICAganNwYi5CaW5hcnlXcml0ZXIu
cHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVbnNpZ25lZFZhcmludDY0XzsKLQotCi0vKioKLSAqIFdy
aXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIGZvcm1hdHRlZCBhcyBzdHJpbmdzIHRvIHRoZSBidWZm
ZXIgYXMgYSByZXBlYXRlZAotICogdW5zaWduZWQgNjQtYml0IGludCBmaWVsZC4KLSAqIEBwYXJh
bSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJyYXkuPHN0
cmluZz59IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFy
eVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQ2NFN0cmluZyA9Ci0gICAgZnVuY3Rp
b24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGZvciAo
dmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKLSAgICB0aGlzLndyaXRlVWludDY0
U3RyaW5nKGZpZWxkLCB2YWx1ZVtpXSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4g
YXJyYXkgbnVtYmVycyB0byB0aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQgc2lnbmVkIDMyLWJpdCBp
bnQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAq
IEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0
ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50MzIg
PQotICAgIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkWmlnemFnMzJf
OwotCi0KLS8qKgotICogV3JpdGVzIGFuIGFycmF5IG51bWJlcnMgdG8gdGhlIGJ1ZmZlciBhcyBh
IHJlcGVhdGVkIHNpZ25lZCA2NC1iaXQgaW50IGZpZWxkLgotICogQHBhcmFtIHtudW1iZXJ9IGZp
ZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9BcnJheS48bnVtYmVyPn0gdmFsdWUg
VGhlIGFycmF5IG9mIGludHMgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3Rv
dHlwZS53cml0ZVJlcGVhdGVkU2ludDY0ID0KLSAgICBqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5
cGUud3JpdGVSZXBlYXRlZFppZ3phZ187Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2Yg
bnVtYmVycyB0byB0aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQgZml4ZWQzMiBmaWVsZC4gVGhpcwot
ICogd29ya3MgZm9yIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZCBmaXhlZDMycy4KLSAqIEBwYXJh
bSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJyYXkuPG51
bWJlcj59IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFy
eVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkMzIgPSBmdW5jdGlvbihmaWVsZCwg
dmFsdWUpIHsKLSAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjsKLSAgZm9yICh2YXIgaSA9IDA7
IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewotICAgIHRoaXMud3JpdGVGaXhlZDMyKGZpZWxkLCB2
YWx1ZVtpXSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVy
cyB0byB0aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQgZml4ZWQ2NCBmaWVsZC4gVGhpcwotICogd29y
a3MgZm9yIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZCBmaXhlZDY0cy4KLSAqIEBwYXJhbSB7bnVt
YmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJyYXkuPG51bWJlcj59
IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdyaXRlLgotICovCi1qc3BiLkJpbmFyeVdyaXRl
ci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkNjQgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUp
IHsKLSAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCB2
YWx1ZS5sZW5ndGg7IGkrKykgewotICAgIHRoaXMud3JpdGVGaXhlZDY0KGZpZWxkLCB2YWx1ZVtp
XSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0
aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQgc2ZpeGVkMzIgZmllbGQuCi0gKiBAcGFyYW0ge251bWJl
cn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2
YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIu
cHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTZml4ZWQzMiA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkg
ewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZh
bHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAgdGhpcy53cml0ZVNmaXhlZDMyKGZpZWxkLCB2YWx1ZVtp
XSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0
aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQgc2ZpeGVkNjQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJl
cn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2
YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIu
cHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTZml4ZWQ2NCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkg
ewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZh
bHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAgdGhpcy53cml0ZVNmaXhlZDY0KGZpZWxkLCB2YWx1ZVtp
XSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0
aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQgZmxvYXQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0g
ZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1
ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJv
dG90eXBlLndyaXRlUmVwZWF0ZWRGbG9hdCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBp
ZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxl
bmd0aDsgaSsrKSB7Ci0gICAgdGhpcy53cml0ZUZsb2F0KGZpZWxkLCB2YWx1ZVtpXSk7Ci0gIH0K
LX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0aGUgYnVmZmVy
IGFzIGEgcmVwZWF0ZWQgZG91YmxlIGZpZWxkLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRo
ZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9BcnJheS48bnVtYmVyPn0gdmFsdWUgVGhlIGFy
cmF5IG9mIGludHMgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53
cml0ZVJlcGVhdGVkRG91YmxlID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1
ZSA9PSBudWxsKSByZXR1cm47Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBp
KyspIHsKLSAgICB0aGlzLndyaXRlRG91YmxlKGZpZWxkLCB2YWx1ZVtpXSk7Ci0gIH0KLX07Ci0K
LQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgYm9vbGVhbnMgdG8gdGhlIGJ1ZmZlciBhcyBh
IHJlcGVhdGVkIGJvb2wgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxk
IG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5Ljxib29sZWFuPn0gdmFsdWUgVGhlIGFycmF5IG9m
IGludHMgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJl
cGVhdGVkQm9vbCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVs
bCkgcmV0dXJuOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7Ci0g
ICAgdGhpcy53cml0ZUJvb2woZmllbGQsIHZhbHVlW2ldKTsKLSAgfQotfTsKLQotCi0vKioKLSAq
IFdyaXRlcyBhbiBhcnJheSBvZiBlbnVtcyB0byB0aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQgZW51
bSBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICog
QHBhcmFtIHs/QXJyYXkuPG51bWJlcj59IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdyaXRl
LgotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEVudW0gPSBm
dW5jdGlvbihmaWVsZCwgdmFsdWUpIHsKLSAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjsKLSAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewotICAgIHRoaXMud3JpdGVF
bnVtKGZpZWxkLCB2YWx1ZVtpXSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJy
YXkgb2Ygc3RyaW5ncyB0byB0aGUgYnVmZmVyIGFzIGEgcmVwZWF0ZWQgc3RyaW5nIGZpZWxkLgot
ICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9B
cnJheS48c3RyaW5nPn0gdmFsdWUgVGhlIGFycmF5IG9mIHN0cmluZ3MgdG8gd3JpdGUuCi0gKi8K
LWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU3RyaW5nID0gZnVuY3Rp
b24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGZvciAo
dmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKLSAgICB0aGlzLndyaXRlU3RyaW5n
KGZpZWxkLCB2YWx1ZVtpXSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkg
b2YgYXJiaXRyYXJ5IGJ5dGUgZmllbGRzIHRvIHRoZSBidWZmZXIuCi0gKiBAcGFyYW0ge251bWJl
cn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjwhanNwYi5CeXRl
U291cmNlPn0gdmFsdWUgVGhlIGFycmF5cyBvZiBhcnJheXMgb2YgYnl0ZXMgdG8KLSAqICAgICB3
cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRCeXRl
cyA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJu
OwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAgdGhpcy53
cml0ZUJ5dGVzKGZpZWxkLCB2YWx1ZVtpXSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMg
YW4gYXJyYXkgb2YgbWVzc2FnZXMgdG8gdGhlIGJ1ZmZlci4KLSAqIEB0ZW1wbGF0ZSBNZXNzYWdl
VHlwZQotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFy
YW0gez9BcnJheS48TWVzc2FnZVR5cGU+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgbWVzc2FnZXMgdG8K
LSAqICAgIHdyaXRlLgotICogQHBhcmFtIHshanNwYi5Xcml0ZXJGdW5jdGlvbn0gd3JpdGVyQ2Fs
bGJhY2sgV2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIHZhbHVlCi0gKiAgICAgdG8gd3JpdGUgYW5k
IHRoZSB3cml0ZXIgdG8gd3JpdGUgaXQgd2l0aC4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJv
dG90eXBlLndyaXRlUmVwZWF0ZWRNZXNzYWdlID0gZnVuY3Rpb24oCi0gICAgZmllbGQsIHZhbHVl
LCB3cml0ZXJDYWxsYmFjaykgewotICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuOwotICBmb3Ig
KHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAgdmFyIGJvb2ttYXJrID0g
dGhpcy5iZWdpbkRlbGltaXRlZF8oZmllbGQpOwotICAgIHdyaXRlckNhbGxiYWNrKHZhbHVlW2ld
LCB0aGlzKTsKLSAgICB0aGlzLmVuZERlbGltaXRlZF8oYm9va21hcmspOwotICB9Ci19OwotCi0K
LS8qKgotICogV3JpdGVzIGFuIGFycmF5IG9mIGdyb3VwIG1lc3NhZ2VzIHRvIHRoZSBidWZmZXIu
Ci0gKiBAdGVtcGxhdGUgTWVzc2FnZVR5cGUKLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUg
ZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJyYXkuPE1lc3NhZ2VUeXBlPn0gdmFsdWUgVGhl
IGFycmF5IG9mIG1lc3NhZ2VzIHRvCi0gKiAgICB3cml0ZS4KLSAqIEBwYXJhbSB7IWpzcGIuV3Jp
dGVyRnVuY3Rpb259IHdyaXRlckNhbGxiYWNrIFdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSB2YWx1
ZQotICogICAgIHRvIHdyaXRlIGFuZCB0aGUgd3JpdGVyIHRvIHdyaXRlIGl0IHdpdGguCi0gKi8K
LWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkR3JvdXAgPSBmdW5jdGlv
bigKLSAgICBmaWVsZCwgdmFsdWUsIHdyaXRlckNhbGxiYWNrKSB7Ci0gIGlmICh2YWx1ZSA9PSBu
dWxsKSByZXR1cm47Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsK
LSAgICB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5X
aXJlVHlwZS5TVEFSVF9HUk9VUCk7Ci0gICAgd3JpdGVyQ2FsbGJhY2sodmFsdWVbaV0sIHRoaXMp
OwotICAgIHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZmllbGQsIGpzcGIuQmluYXJ5Q29uc3RhbnRz
LldpcmVUeXBlLkVORF9HUk9VUCk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYSA2NC1i
aXQgaGFzaCBzdHJpbmcgZmllbGQgKDggY2hhcmFjdGVycyBAIDggYml0cyBvZiBkYXRhIGVhY2gp
IHRvCi0gKiB0aGUgYnVmZmVyLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBu
dW1iZXIuCi0gKiBAcGFyYW0gez9BcnJheS48c3RyaW5nPn0gdmFsdWUgVGhlIGFycmF5IG9mIGhh
c2hlcyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVw
ZWF0ZWRGaXhlZEhhc2g2NCA9Ci0gICAgZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2
YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3Ro
OyBpKyspIHsKLSAgICB0aGlzLndyaXRlRml4ZWRIYXNoNjQoZmllbGQsIHZhbHVlW2ldKTsKLSAg
fQotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhIHJlcGVhdGVkIDY0LWJpdCBoYXNoIHN0cmluZyBm
aWVsZCAoOCBjaGFyYWN0ZXJzIEAgOCBiaXRzIG9mIGRhdGEKLSAqIGVhY2gpIHRvIHRoZSBidWZm
ZXIuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJh
bSB7P0FycmF5LjxzdHJpbmc+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaGFzaGVzIHRvIHdyaXRlLgot
ICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFZhcmludEhhc2g2
NCA9Ci0gICAgZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsKSBy
ZXR1cm47Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKLSAgICB0
aGlzLndyaXRlVmFyaW50SGFzaDY0KGZpZWxkLCB2YWx1ZVtpXSk7Ci0gIH0KLX07Ci0KLQotLyoq
Ci0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0aGUgYnVmZmVyIGFzIGEgcGFja2Vk
IHZhcmludCBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVy
LgotICogQHBhcmFtIHs/QXJyYXkuPG51bWJlcj59IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRv
IHdyaXRlLgotICogQHByaXZhdGUKLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndy
aXRlUGFja2VkVW5zaWduZWRWYXJpbnQzMl8gPSBmdW5jdGlvbigKLSAgICBmaWVsZCwgdmFsdWUp
IHsKLSAgaWYgKHZhbHVlID09IG51bGwgfHwgIXZhbHVlLmxlbmd0aCkgcmV0dXJuOwotICB2YXIg
Ym9va21hcmsgPSB0aGlzLmJlZ2luRGVsaW1pdGVkXyhmaWVsZCk7Ci0gIGZvciAodmFyIGkgPSAw
OyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKLSAgICB0aGlzLmVuY29kZXJfLndyaXRlVW5zaWdu
ZWRWYXJpbnQzMih2YWx1ZVtpXSk7Ci0gIH0KLSAgdGhpcy5lbmREZWxpbWl0ZWRfKGJvb2ttYXJr
KTsKLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0aGUgYnVm
ZmVyIGFzIGEgcGFja2VkIHZhcmludCBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBU
aGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJyYXkuPG51bWJlcj59IHZhbHVlIFRoZSBh
cnJheSBvZiBpbnRzIHRvIHdyaXRlLgotICogQHByaXZhdGUKLSAqLwotanNwYi5CaW5hcnlXcml0
ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2lnbmVkVmFyaW50MzJfID0gZnVuY3Rpb24oCi0gICAg
ZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsIHx8ICF2YWx1ZS5sZW5ndGgpIHJl
dHVybjsKLSAgdmFyIGJvb2ttYXJrID0gdGhpcy5iZWdpbkRlbGltaXRlZF8oZmllbGQpOwotICBm
b3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAgdGhpcy5lbmNvZGVy
Xy53cml0ZVNpZ25lZFZhcmludDMyKHZhbHVlW2ldKTsKLSAgfQotICB0aGlzLmVuZERlbGltaXRl
ZF8oYm9va21hcmspOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBhcnJheSBvZiBudW1iZXJz
IHRvIHRoZSBidWZmZXIgYXMgYSBwYWNrZWQgdmFyaW50IGZpZWxkLgotICogQHBhcmFtIHtudW1i
ZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9BcnJheS48bnVtYmVyPn0g
dmFsdWUgVGhlIGFycmF5IG9mIGludHMgdG8gd3JpdGUuCi0gKiBAcHJpdmF0ZQotICovCi1qc3Bi
LkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRVbnNpZ25lZFZhcmludDY0XyA9IGZ1
bmN0aW9uKAotICAgIGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCB8fCAhdmFs
dWUubGVuZ3RoKSByZXR1cm47Ci0gIHZhciBib29rbWFyayA9IHRoaXMuYmVnaW5EZWxpbWl0ZWRf
KGZpZWxkKTsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewotICAg
IHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDY0KHZhbHVlW2ldKTsKLSAgfQotICB0
aGlzLmVuZERlbGltaXRlZF8oYm9va21hcmspOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBh
cnJheSBvZiBudW1iZXJzIHRvIHRoZSBidWZmZXIgYXMgYSBwYWNrZWQgdmFyaW50IGZpZWxkLgot
ICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9B
cnJheS48bnVtYmVyPn0gdmFsdWUgVGhlIGFycmF5IG9mIGludHMgdG8gd3JpdGUuCi0gKiBAcHJp
dmF0ZQotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaWduZWRW
YXJpbnQ2NF8gPSBmdW5jdGlvbigKLSAgICBmaWVsZCwgdmFsdWUpIHsKLSAgaWYgKHZhbHVlID09
IG51bGwgfHwgIXZhbHVlLmxlbmd0aCkgcmV0dXJuOwotICB2YXIgYm9va21hcmsgPSB0aGlzLmJl
Z2luRGVsaW1pdGVkXyhmaWVsZCk7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3Ro
OyBpKyspIHsKLSAgICB0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50NjQodmFsdWVbaV0p
OwotICB9Ci0gIHRoaXMuZW5kRGVsaW1pdGVkXyhib29rbWFyayk7Ci19OwotCi0KLS8qKgotICog
V3JpdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgdG8gdGhlIGJ1ZmZlciBhcyBhIHBhY2tlZCB6aWd6
YWcgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAq
IEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0
ZS4KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBh
Y2tlZFppZ3phZzMyXyA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0g
bnVsbCB8fCAhdmFsdWUubGVuZ3RoKSByZXR1cm47Ci0gIHZhciBib29rbWFyayA9IHRoaXMuYmVn
aW5EZWxpbWl0ZWRfKGZpZWxkKTsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7
IGkrKykgewotICAgIHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMih2YWx1ZVtpXSk7
Ci0gIH0KLSAgdGhpcy5lbmREZWxpbWl0ZWRfKGJvb2ttYXJrKTsKLX07Ci0KLQotLyoqCi0gKiBX
cml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0aGUgYnVmZmVyIGFzIGEgcGFja2VkIHppZ3ph
ZyBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICog
QHBhcmFtIHs/QXJyYXkuPG51bWJlcj59IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdyaXRl
LgotICogQHByaXZhdGUKLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFj
a2VkWmlnemFnNjRfID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBu
dWxsIHx8ICF2YWx1ZS5sZW5ndGgpIHJldHVybjsKLSAgdmFyIGJvb2ttYXJrID0gdGhpcy5iZWdp
bkRlbGltaXRlZF8oZmllbGQpOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsg
aSsrKSB7Ci0gICAgdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0KHZhbHVlW2ldKTsK
LSAgfQotICB0aGlzLmVuZERlbGltaXRlZF8oYm9va21hcmspOwotfTsKLQotCi0vKioKLSAqIFdy
aXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIHRvIHRoZSBidWZmZXIgYXMgYSBwYWNrZWQgMzItYml0
IGludCBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgot
ICogQHBhcmFtIHs/QXJyYXkuPG51bWJlcj59IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdy
aXRlLgotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRJbnQzMiA9
Ci0gICAganNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2lnbmVkVmFyaW50
MzJfOwotCi0KLS8qKgotICogV3JpdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgcmVwcmVzZW50ZWQg
YXMgc3RyaW5ncyB0byB0aGUgYnVmZmVyIGFzIGEgcGFja2VkCi0gKiAzMi1iaXQgaW50IGZpZWxk
LgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkCi0gKiBAcGFyYW0gez9BcnJheS48c3RyaW5nPn0g
dmFsdWUKLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkSW50MzJT
dHJpbmcgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUpIHsKLSAgaWYgKHZhbHVlID09IG51bGwgfHwg
IXZhbHVlLmxlbmd0aCkgcmV0dXJuOwotICB2YXIgYm9va21hcmsgPSB0aGlzLmJlZ2luRGVsaW1p
dGVkXyhmaWVsZCk7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsK
LSAgICB0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIocGFyc2VJbnQodmFsdWVbaV0s
IDEwKSk7Ci0gIH0KLSAgdGhpcy5lbmREZWxpbWl0ZWRfKGJvb2ttYXJrKTsKLX07Ci0KLQotLyoq
Ci0gKiBXcml0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyB0byB0aGUgYnVmZmVyIGFzIGEgcGFja2Vk
IDY0LWJpdCBpbnQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51
bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50
cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2Vk
SW50NjQgPQotICAgIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNpZ25l
ZFZhcmludDY0XzsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIHJlcHJl
c2VudGVkIGFzIHN0cmluZ3MgdG8gdGhlIGJ1ZmZlciBhcyBhIHBhY2tlZAotICogNjQtYml0IGlu
dCBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZAotICogQHBhcmFtIHs/QXJyYXkuPHN0
cmluZz59IHZhbHVlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tl
ZEludDY0U3RyaW5nID0KLSAgICBmdW5jdGlvbihmaWVsZCwgdmFsdWUpIHsKLSAgaWYgKHZhbHVl
ID09IG51bGwgfHwgIXZhbHVlLmxlbmd0aCkgcmV0dXJuOwotICB2YXIgYm9va21hcmsgPSB0aGlz
LmJlZ2luRGVsaW1pdGVkXyhmaWVsZCk7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVu
Z3RoOyBpKyspIHsKLSAgICB2YXIgbnVtID0ganNwYi5hcml0aC5JbnQ2NC5mcm9tU3RyaW5nKHZh
bHVlW2ldKTsKLSAgICB0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChudW0ubG8sIG51
bS5oaSk7Ci0gIH0KLSAgdGhpcy5lbmREZWxpbWl0ZWRfKGJvb2ttYXJrKTsKLX07Ci0KLQotLyoq
Ci0gKiBXcml0ZXMgYW4gYXJyYXkgbnVtYmVycyB0byB0aGUgYnVmZmVyIGFzIGEgcGFja2VkIHVu
c2lnbmVkIDMyLWJpdCBpbnQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZp
ZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJyYXkg
b2YgaW50cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRl
UGFja2VkVWludDMyID0KLSAgICBqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNr
ZWRVbnNpZ25lZFZhcmludDMyXzsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBhcnJheSBvZiBudW1i
ZXJzIHJlcHJlc2VudGVkIGFzIHN0cmluZ3MgdG8gdGhlIGJ1ZmZlciBhcyBhIHBhY2tlZAotICog
dW5zaWduZWQgMzItYml0IGludCBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZAotICog
QHBhcmFtIHs/QXJyYXkuPHN0cmluZz59IHZhbHVlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnBy
b3RvdHlwZS53cml0ZVBhY2tlZFVpbnQzMlN0cmluZyA9Ci0gICAgZnVuY3Rpb24oZmllbGQsIHZh
bHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsIHx8ICF2YWx1ZS5sZW5ndGgpIHJldHVybjsKLSAg
dmFyIGJvb2ttYXJrID0gdGhpcy5iZWdpbkRlbGltaXRlZF8oZmllbGQpOwotICBmb3IgKHZhciBp
ID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAgdGhpcy5lbmNvZGVyXy53cml0ZVVu
c2lnbmVkVmFyaW50MzIocGFyc2VJbnQodmFsdWVbaV0sIDEwKSk7Ci0gIH0KLSAgdGhpcy5lbmRE
ZWxpbWl0ZWRfKGJvb2ttYXJrKTsKLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgbnVt
YmVycyB0byB0aGUgYnVmZmVyIGFzIGEgcGFja2VkIHVuc2lnbmVkIDY0LWJpdCBpbnQgZmllbGQu
Ci0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7
P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50cyB0byB3cml0ZS4KLSAqLwot
anNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkVWludDY0ID0KLSAgICBqc3Bi
LkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRVbnNpZ25lZFZhcmludDY0XzsKLQot
Ci0vKioKLSAqIFdyaXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIHJlcHJlc2VudGVkIGFzIHN0cmlu
Z3MgdG8gdGhlIGJ1ZmZlciBhcyBhIHBhY2tlZAotICogdW5zaWduZWQgNjQtYml0IGludCBmaWVs
ZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZAotICogQHBhcmFtIHs/QXJyYXkuPHN0cmluZz59
IHZhbHVlCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQ2
NFN0cmluZyA9Ci0gICAgZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBu
dWxsIHx8ICF2YWx1ZS5sZW5ndGgpIHJldHVybjsKLSAgdmFyIGJvb2ttYXJrID0gdGhpcy5iZWdp
bkRlbGltaXRlZF8oZmllbGQpOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsg
aSsrKSB7Ci0gICAgdmFyIG51bSA9IGpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcodmFsdWVb
aV0pOwotICAgIHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KG51bS5sbywgbnVtLmhp
KTsKLSAgfQotICB0aGlzLmVuZERlbGltaXRlZF8oYm9va21hcmspOwotfTsKLQotCi0vKioKLSAq
IFdyaXRlcyBhbiBhcnJheSBudW1iZXJzIHRvIHRoZSBidWZmZXIgYXMgYSBwYWNrZWQgc2lnbmVk
IDMyLWJpdCBpbnQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51
bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJyYXkgb2YgaW50
cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2Vk
U2ludDMyID0KLSAgICBqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRaaWd6
YWczMl87Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4gYXJyYXkgbnVtYmVycyB0byB0aGUgYnVmZmVy
IGFzIGEgcGFja2VkIHNpZ25lZCA2NC1iaXQgaW50IGZpZWxkLgotICogQHBhcmFtIHtudW1iZXJ9
IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9BcnJheS48bnVtYmVyPn0gdmFs
dWUgVGhlIGFycmF5IG9mIGludHMgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnBy
b3RvdHlwZS53cml0ZVBhY2tlZFNpbnQ2NCA9Ci0gICAganNwYi5CaW5hcnlXcml0ZXIucHJvdG90
eXBlLndyaXRlUGFja2VkWmlnemFnNjRfOwotCi0KLS8qKgotICogV3JpdGVzIGFuIGFycmF5IG9m
IG51bWJlcnMgdG8gdGhlIGJ1ZmZlciBhcyBhIHBhY2tlZCBmaXhlZDMyIGZpZWxkLgotICogQHBh
cmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9BcnJheS48
bnVtYmVyPn0gdmFsdWUgVGhlIGFycmF5IG9mIGludHMgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmlu
YXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkMzIgPSBmdW5jdGlvbihmaWVsZCwg
dmFsdWUpIHsKLSAgaWYgKHZhbHVlID09IG51bGwgfHwgIXZhbHVlLmxlbmd0aCkgcmV0dXJuOwot
ICB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJl
VHlwZS5ERUxJTUlURUQpOwotICB0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMih2
YWx1ZS5sZW5ndGggKiA0KTsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkr
KykgewotICAgIHRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50MzIodmFsdWVbaV0pOwotICB9Ci19Owot
Ci0KLS8qKgotICogV3JpdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgdG8gdGhlIGJ1ZmZlciBhcyBh
IHBhY2tlZCBmaXhlZDY0IGZpZWxkLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVs
ZCBudW1iZXIuCi0gKiBAcGFyYW0gez9BcnJheS48bnVtYmVyPn0gdmFsdWUgVGhlIGFycmF5IG9m
IGludHMgdG8gd3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBh
Y2tlZEZpeGVkNjQgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUpIHsKLSAgaWYgKHZhbHVlID09IG51
bGwgfHwgIXZhbHVlLmxlbmd0aCkgcmV0dXJuOwotICB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGZp
ZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpOwotICB0aGlzLmVu
Y29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMih2YWx1ZS5sZW5ndGggKiA4KTsKLSAgZm9yICh2
YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewotICAgIHRoaXMuZW5jb2Rlcl8ud3Jp
dGVVaW50NjQodmFsdWVbaV0pOwotICB9Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGFuIGFycmF5
IG9mIG51bWJlcnMgdG8gdGhlIGJ1ZmZlciBhcyBhIHBhY2tlZCBzZml4ZWQzMiBmaWVsZC4KLSAq
IEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHs/QXJy
YXkuPG51bWJlcj59IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdyaXRlLgotICovCi1qc3Bi
LkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTZml4ZWQzMiA9IGZ1bmN0aW9uKGZp
ZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCB8fCAhdmFsdWUubGVuZ3RoKSByZXR1
cm47Ci0gIHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZmllbGQsIGpzcGIuQmluYXJ5Q29uc3RhbnRz
LldpcmVUeXBlLkRFTElNSVRFRCk7Ci0gIHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmlu
dDMyKHZhbHVlLmxlbmd0aCAqIDQpOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0
aDsgaSsrKSB7Ci0gICAgdGhpcy5lbmNvZGVyXy53cml0ZUludDMyKHZhbHVlW2ldKTsKLSAgfQot
fTsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIHRvIHRoZSBidWZmZXIg
YXMgYSBwYWNrZWQgc2ZpeGVkNjQgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhl
IGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJy
YXkgb2YgaW50cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndy
aXRlUGFja2VkU2ZpeGVkNjQgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUpIHsKLSAgaWYgKHZhbHVl
ID09IG51bGwgfHwgIXZhbHVlLmxlbmd0aCkgcmV0dXJuOwotICB0aGlzLndyaXRlRmllbGRIZWFk
ZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpOwotICB0
aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMih2YWx1ZS5sZW5ndGggKiA4KTsKLSAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewotICAgIHRoaXMuZW5jb2Rl
cl8ud3JpdGVJbnQ2NCh2YWx1ZVtpXSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBXcml0ZXMgYW4g
YXJyYXkgb2YgbnVtYmVycyB0byB0aGUgYnVmZmVyIGFzIGEgcGFja2VkIGZsb2F0IGZpZWxkLgot
ICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkIFRoZSBmaWVsZCBudW1iZXIuCi0gKiBAcGFyYW0gez9B
cnJheS48bnVtYmVyPn0gdmFsdWUgVGhlIGFycmF5IG9mIGludHMgdG8gd3JpdGUuCi0gKi8KLWpz
cGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZsb2F0ID0gZnVuY3Rpb24oZmll
bGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsIHx8ICF2YWx1ZS5sZW5ndGgpIHJldHVy
bjsKLSAgdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhmaWVsZCwganNwYi5CaW5hcnlDb25zdGFudHMu
V2lyZVR5cGUuREVMSU1JVEVEKTsKLSAgdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50
MzIodmFsdWUubGVuZ3RoICogNCk7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3Ro
OyBpKyspIHsKLSAgICB0aGlzLmVuY29kZXJfLndyaXRlRmxvYXQodmFsdWVbaV0pOwotICB9Ci19
OwotCi0KLS8qKgotICogV3JpdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgdG8gdGhlIGJ1ZmZlciBh
cyBhIHBhY2tlZCBkb3VibGUgZmllbGQuCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZp
ZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5LjxudW1iZXI+fSB2YWx1ZSBUaGUgYXJyYXkg
b2YgaW50cyB0byB3cml0ZS4KLSAqLwotanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRl
UGFja2VkRG91YmxlID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBu
dWxsIHx8ICF2YWx1ZS5sZW5ndGgpIHJldHVybjsKLSAgdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhm
aWVsZCwganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTsKLSAgdGhpcy5l
bmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIodmFsdWUubGVuZ3RoICogOCk7Ci0gIGZvciAo
dmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKLSAgICB0aGlzLmVuY29kZXJfLndy
aXRlRG91YmxlKHZhbHVlW2ldKTsKLSAgfQotfTsKLQotCi0vKioKLSAqIFdyaXRlcyBhbiBhcnJh
eSBvZiBib29sZWFucyB0byB0aGUgYnVmZmVyIGFzIGEgcGFja2VkIGJvb2wgZmllbGQuCi0gKiBA
cGFyYW0ge251bWJlcn0gZmllbGQgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7P0FycmF5
Ljxib29sZWFuPn0gdmFsdWUgVGhlIGFycmF5IG9mIGludHMgdG8gd3JpdGUuCi0gKi8KLWpzcGIu
QmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEJvb2wgPSBmdW5jdGlvbihmaWVsZCwg
dmFsdWUpIHsKLSAgaWYgKHZhbHVlID09IG51bGwgfHwgIXZhbHVlLmxlbmd0aCkgcmV0dXJuOwot
ICB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGZpZWxkLCBqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJl
VHlwZS5ERUxJTUlURUQpOwotICB0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMih2
YWx1ZS5sZW5ndGgpOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7
Ci0gICAgdGhpcy5lbmNvZGVyXy53cml0ZUJvb2wodmFsdWVbaV0pOwotICB9Ci19OwotCi0KLS8q
KgotICogV3JpdGVzIGFuIGFycmF5IG9mIGVudW1zIHRvIHRoZSBidWZmZXIgYXMgYSBwYWNrZWQg
ZW51bSBmaWVsZC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgot
ICogQHBhcmFtIHs/QXJyYXkuPG51bWJlcj59IHZhbHVlIFRoZSBhcnJheSBvZiBpbnRzIHRvIHdy
aXRlLgotICovCi1qc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRFbnVtID0g
ZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsIHx8ICF2YWx1ZS5s
ZW5ndGgpIHJldHVybjsKLSAgdmFyIGJvb2ttYXJrID0gdGhpcy5iZWdpbkRlbGltaXRlZF8oZmll
bGQpOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7Ci0gICAgdGhp
cy5lbmNvZGVyXy53cml0ZUVudW0odmFsdWVbaV0pOwotICB9Ci0gIHRoaXMuZW5kRGVsaW1pdGVk
Xyhib29rbWFyayk7Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgNjQtYml0IGhhc2ggc3RyaW5n
IGZpZWxkICg4IGNoYXJhY3RlcnMgQCA4IGJpdHMgb2YgZGF0YSBlYWNoKSB0bwotICogdGhlIGJ1
ZmZlci4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgotICogQHBh
cmFtIHs/QXJyYXkuPHN0cmluZz59IHZhbHVlIFRoZSBhcnJheSBvZiBoYXNoZXMgdG8gd3JpdGUu
Ci0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEZpeGVkSGFzaDY0
ID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsIHx8ICF2YWx1
ZS5sZW5ndGgpIHJldHVybjsKLSAgdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhmaWVsZCwganNwYi5C
aW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTsKLSAgdGhpcy5lbmNvZGVyXy53cml0
ZVVuc2lnbmVkVmFyaW50MzIodmFsdWUubGVuZ3RoICogOCk7Ci0gIGZvciAodmFyIGkgPSAwOyBp
IDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKLSAgICB0aGlzLmVuY29kZXJfLndyaXRlRml4ZWRIYXNo
NjQodmFsdWVbaV0pOwotICB9Ci19OwotCi0KLS8qKgotICogV3JpdGVzIGEgNjQtYml0IGhhc2gg
c3RyaW5nIGZpZWxkICg4IGNoYXJhY3RlcnMgQCA4IGJpdHMgb2YgZGF0YSBlYWNoKSB0bwotICog
dGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZCBUaGUgZmllbGQgbnVtYmVyLgot
ICogQHBhcmFtIHs/QXJyYXkuPHN0cmluZz59IHZhbHVlIFRoZSBhcnJheSBvZiBoYXNoZXMgdG8g
d3JpdGUuCi0gKi8KLWpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFZhcmlu
dEhhc2g2NCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSkgewotICBpZiAodmFsdWUgPT0gbnVsbCB8
fCAhdmFsdWUubGVuZ3RoKSByZXR1cm47Ci0gIHZhciBib29rbWFyayA9IHRoaXMuYmVnaW5EZWxp
bWl0ZWRfKGZpZWxkKTsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykg
ewotICAgIHRoaXMuZW5jb2Rlcl8ud3JpdGVWYXJpbnRIYXNoNjQodmFsdWVbaV0pOwotICB9Ci0g
IHRoaXMuZW5kRGVsaW1pdGVkXyhib29rbWFyayk7Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9iaW5hcnkv
d3JpdGVyX3Rlc3QuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS93cml0ZXJfdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTRkMzdhMjE1ZGY5MGJkMDBmYmM1Yjk2MWM5NTMyMWQ0Yjk0Njc4Mi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2JpbmFyeS93
cml0ZXJfdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFRlc3QgY2Fz
ZXMgZm9yIGpzcGIncyBiaW5hcnkgcHJvdG9jb2wgYnVmZmVyIHdyaXRlci4gSW4KLSAqIHByYWN0
aWNlIEJpbmFyeVdyaXRlciBpcyB1c2VkIHRvIGRyaXZlIHRoZSBEZWNvZGVyIGFuZCBSZWFkZXIg
dGVzdCBjYXNlcywKLSAqIHNvIG9ubHkgd3JpdGVyLXNwZWNpZmljIHRlc3RzIGFyZSBoZXJlLgot
ICoKLSAqIFRlc3Qgc3VpdGUgaXMgd3JpdHRlbiB1c2luZyBKYXNtaW5lIC0tIHNlZSBodHRwOi8v
amFzbWluZS5naXRodWIuaW8vCi0gKgotICogQGF1dGhvciBhYXBwbGVieUBnb29nbGUuY29tIChB
dXN0aW4gQXBwbGVieSkKLSAqLwotCi1nb29nLnJlcXVpcmUoJ2dvb2cuY3J5cHQnKTsKLWdvb2cu
cmVxdWlyZSgnZ29vZy50ZXN0aW5nLmFzc2VydHMnKTsKLWdvb2cucmVxdWlyZSgnanNwYi5CaW5h
cnlXcml0ZXInKTsKLQotCi0vKioKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZnVuYyBUaGlzIGZ1
bmN0aW9uIHNob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHJ1bi4KLSAqLwotZnVuY3Rpb24gYXNz
ZXJ0RmFpbHMoZnVuYykgewotICB2YXIgZSA9IGFzc2VydFRocm93cyhmdW5jKTsKLSAgY29uc29s
ZS5sb2coZSk7Ci0gIC8vYXNzZXJ0Tm90TnVsbChlLnRvU3RyaW5nKCkubWF0Y2goL0Vycm9yLykp
OwotfQotCi0KLWRlc2NyaWJlKCdiaW5hcnlXcml0ZXJUZXN0JywgZnVuY3Rpb24oKSB7Ci0gIC8q
KgotICAgKiBWZXJpZmllcyB0aGF0IG1pc3VzZSBvZiB0aGUgd3JpdGVyIGNsYXNzIHRyaWdnZXJz
IGFzc2VydGlvbnMuCi0gICAqLwotICBpdCgndGVzdFdyaXRlRXJyb3JzJywgZnVuY3Rpb24oKSB7
Ci0gICAgLy8gU3VibWVzc2FnZXMgd2l0aCBpbnZhbGlkIGZpZWxkIGluZGljZXMgc2hvdWxkIGFz
c2VydC4KLSAgICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7Ci0gICAgdmFy
IGR1bW15TWVzc2FnZSA9IC8qKiBAdHlwZSB7IWpzcGIuQmluYXJ5TWVzc2FnZX0gKi8oe30pOwot
Ci0gICAgYXNzZXJ0RmFpbHMoZnVuY3Rpb24oKSB7Ci0gICAgICB3cml0ZXIud3JpdGVNZXNzYWdl
KC0xLCBkdW1teU1lc3NhZ2UsIGdvb2cubnVsbEZ1bmN0aW9uKTsKLSAgICB9KTsKLQotICAgIC8v
IFdyaXRpbmcgaW52YWxpZCBmaWVsZCBpbmRpY2VzIHNob3VsZCBhc3NlcnQuCi0gICAgd3JpdGVy
ID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7Ci0gICAgYXNzZXJ0RmFpbHMoZnVuY3Rpb24oKSB7
d3JpdGVyLndyaXRlVWludDY0KC0xLCAxKTt9KTsKLQotICAgIC8vIFdyaXRpbmcgb3V0LW9mLXJh
bmdlIGZpZWxkIHZhbHVlcyBzaG91bGQgYXNzZXJ0LgotICAgIHdyaXRlciA9IG5ldyBqc3BiLkJp
bmFyeVdyaXRlcigpOwotCi0gICAgYXNzZXJ0RmFpbHMoZnVuY3Rpb24oKSB7d3JpdGVyLndyaXRl
SW50MzIoMSwgLUluZmluaXR5KTt9KTsKLSAgICBhc3NlcnRGYWlscyhmdW5jdGlvbigpIHt3cml0
ZXIud3JpdGVJbnQzMigxLCBJbmZpbml0eSk7fSk7Ci0KLSAgICBhc3NlcnRGYWlscyhmdW5jdGlv
bigpIHt3cml0ZXIud3JpdGVJbnQ2NCgxLCAtSW5maW5pdHkpO30pOwotICAgIGFzc2VydEZhaWxz
KGZ1bmN0aW9uKCkge3dyaXRlci53cml0ZUludDY0KDEsIEluZmluaXR5KTt9KTsKLQotICAgIGFz
c2VydEZhaWxzKGZ1bmN0aW9uKCkge3dyaXRlci53cml0ZVVpbnQzMigxLCAtMSk7fSk7Ci0gICAg
YXNzZXJ0RmFpbHMoZnVuY3Rpb24oKSB7d3JpdGVyLndyaXRlVWludDMyKDEsIEluZmluaXR5KTt9
KTsKLQotICAgIGFzc2VydEZhaWxzKGZ1bmN0aW9uKCkge3dyaXRlci53cml0ZVVpbnQ2NCgxLCAt
MSk7fSk7Ci0gICAgYXNzZXJ0RmFpbHMoZnVuY3Rpb24oKSB7d3JpdGVyLndyaXRlVWludDY0KDEs
IEluZmluaXR5KTt9KTsKLQotICAgIGFzc2VydEZhaWxzKGZ1bmN0aW9uKCkge3dyaXRlci53cml0
ZVNpbnQzMigxLCAtSW5maW5pdHkpO30pOwotICAgIGFzc2VydEZhaWxzKGZ1bmN0aW9uKCkge3dy
aXRlci53cml0ZVNpbnQzMigxLCBJbmZpbml0eSk7fSk7Ci0KLSAgICBhc3NlcnRGYWlscyhmdW5j
dGlvbigpIHt3cml0ZXIud3JpdGVTaW50NjQoMSwgLUluZmluaXR5KTt9KTsKLSAgICBhc3NlcnRG
YWlscyhmdW5jdGlvbigpIHt3cml0ZXIud3JpdGVTaW50NjQoMSwgSW5maW5pdHkpO30pOwotCi0g
ICAgYXNzZXJ0RmFpbHMoZnVuY3Rpb24oKSB7d3JpdGVyLndyaXRlRml4ZWQzMigxLCAtMSk7fSk7
Ci0gICAgYXNzZXJ0RmFpbHMoZnVuY3Rpb24oKSB7d3JpdGVyLndyaXRlRml4ZWQzMigxLCBJbmZp
bml0eSk7fSk7Ci0KLSAgICBhc3NlcnRGYWlscyhmdW5jdGlvbigpIHt3cml0ZXIud3JpdGVGaXhl
ZDY0KDEsIC0xKTt9KTsKLSAgICBhc3NlcnRGYWlscyhmdW5jdGlvbigpIHt3cml0ZXIud3JpdGVG
aXhlZDY0KDEsIEluZmluaXR5KTt9KTsKLQotICAgIGFzc2VydEZhaWxzKGZ1bmN0aW9uKCkge3dy
aXRlci53cml0ZVNmaXhlZDMyKDEsIC1JbmZpbml0eSk7fSk7Ci0gICAgYXNzZXJ0RmFpbHMoZnVu
Y3Rpb24oKSB7d3JpdGVyLndyaXRlU2ZpeGVkMzIoMSwgSW5maW5pdHkpO30pOwotCi0gICAgYXNz
ZXJ0RmFpbHMoZnVuY3Rpb24oKSB7d3JpdGVyLndyaXRlU2ZpeGVkNjQoMSwgLUluZmluaXR5KTt9
KTsKLSAgICBhc3NlcnRGYWlscyhmdW5jdGlvbigpIHt3cml0ZXIud3JpdGVTZml4ZWQ2NCgxLCBJ
bmZpbml0eSk7fSk7Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAqIEJhc2ljIHRlc3Qgb2YgcmV0cmll
dmluZyB0aGUgcmVzdWx0IGFzIGEgVWludDhBcnJheSBidWZmZXIKLSAgICovCi0gIGl0KCd0ZXN0
R2V0UmVzdWx0QnVmZmVyJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGV4cGVjdGVkID0gJzA4NjQx
MjBiNDg2NTZjNmM2ZjIwNzc2ZjcyNmM2NDFhMDMwMTAyMDMyMGM4MDEnOwotCi0gICAgdmFyIHdy
aXRlciA9IG5ldyBqc3BiLkJpbmFyeVdyaXRlcigpOwotICAgIHdyaXRlci53cml0ZVVpbnQzMigx
LCAxMDApOwotICAgIHdyaXRlci53cml0ZVN0cmluZygyLCAnSGVsbG8gd29ybGQnKTsKLSAgICB3
cml0ZXIud3JpdGVCeXRlcygzLCBuZXcgVWludDhBcnJheShbMSwgMiwgM10pKTsKLSAgICB3cml0
ZXIud3JpdGVVaW50MzIoNCwgMjAwKTsKLQotICAgIHZhciBidWZmZXIgPSB3cml0ZXIuZ2V0UmVz
dWx0QnVmZmVyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBnb29nLmNyeXB0LmJ5dGVB
cnJheVRvSGV4KGJ1ZmZlcikpOwotICB9KTsKLX0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9jb21tb25qcy9l
eHBvcnQuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2pzL2NvbW1vbmpzL2V4cG9ydC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTNjZmJkNmYxZGJiYWQxZDJjNjU3NDRjZDRkOTAyYTgwNzQzNDUxZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2NvbW1vbmpzL2V4cG9ydC5q
cworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qKgotICogQGZpbGVvdmVydmlldyBF
eHBvcnQgc3ltYm9scyBuZWVkZWQgYnkgZ2VuZXJhdGVkIGNvZGUgaW4gQ29tbW9uSlMgc3R5bGUu
Ci0gKgotICogVGhpcyBlZmZlY3RpdmVseSBpcyBvdXIgY2Fub25pY2FsIGxpc3Qgb2Ygd2hhdCB3
ZSBwdWJsaWNseSBleHBvcnQgZnJvbQotICogdGhlIGdvb2dsZS1wcm90b2J1Zi5qcyBmaWxlIHRo
YXQgd2UgYnVpbGQgYXQgZGlzdHJpYnV0aW9uIHRpbWUuCi0gKi8KLQotZ29vZy5yZXF1aXJlKCdn
b29nLm9iamVjdCcpOwotZ29vZy5yZXF1aXJlKCdqc3BiLkJpbmFyeVJlYWRlcicpOwotZ29vZy5y
ZXF1aXJlKCdqc3BiLkJpbmFyeVdyaXRlcicpOwotZ29vZy5yZXF1aXJlKCdqc3BiLkV4dGVuc2lv
bkZpZWxkSW5mbycpOwotZ29vZy5yZXF1aXJlKCdqc3BiLk1lc3NhZ2UnKTsKLQotZXhwb3J0cy5N
ZXNzYWdlID0ganNwYi5NZXNzYWdlOwotZXhwb3J0cy5CaW5hcnlSZWFkZXIgPSBqc3BiLkJpbmFy
eVJlYWRlcjsKLWV4cG9ydHMuQmluYXJ5V3JpdGVyID0ganNwYi5CaW5hcnlXcml0ZXI7Ci1leHBv
cnRzLkV4dGVuc2lvbkZpZWxkSW5mbyA9IGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvOwotCi0vLyBU
aGVzZSBhcmUgdXNlZCBieSBnZW5lcmF0ZWQgY29kZSBidXQgc2hvdWxkIG5vdCBiZSB1c2VkIGRp
cmVjdGx5IGJ5IGNsaWVudHMuCi1leHBvcnRzLmV4cG9ydFN5bWJvbCA9IGdvb2cuZXhwb3J0U3lt
Ym9sOwotZXhwb3J0cy5pbmhlcml0cyA9IGdvb2cuaW5oZXJpdHM7Ci1leHBvcnRzLm9iamVjdCA9
IHtleHRlbmQ6IGdvb2cub2JqZWN0LmV4dGVuZH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2NvbW1vbmpzL2V4
cG9ydF9hc3NlcnRzLmpzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qcy9jb21tb25qcy9leHBvcnRfYXNzZXJ0cy5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxOWQxMjBjMWQ5ZGNiODYxMTM3MzVlODYyNTNlYmViZWQx
MWNmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2Nv
bW1vbmpzL2V4cG9ydF9hc3NlcnRzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAot
LyoqCi0gKiBAZmlsZW92ZXJ2aWV3IEV4cG9ydHMgc3ltYm9scyBuZWVkZWQgb25seSBieSB0ZXN0
cy4KLSAqCi0gKiBUaGlzIGZpbGUgZXhwb3J0cyBzZXZlcmFsIENsb3N1cmUgTGlicmFyeSBzeW1i
b2xzIHRoYXQgYXJlIG9ubHkKLSAqIHVzZWQgYnkgdGVzdHMuICBJdCBpcyB1c2VkIHRvIGdlbmVy
YXRlIGEgZmlsZQotICogY2xvc3VyZV9hc3NlcnRzX2NvbW1vbmpzLmpzIHRoYXQgaXMgb25seSB1
c2VkIGF0IHRlc3RpbmcgdGltZS4KLSAqLwotCi1nb29nLnJlcXVpcmUoJ2dvb2cudGVzdGluZy5h
c3NlcnRzJyk7Ci0KLXZhciBnbG9iYWwgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpOwotCi0v
LyBBbGwgb2YgdGhlIGNsb3N1cmUgImFzc2VydCIgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhdCB0
aGUgZ2xvYmFsIGxldmVsLgotLy8KLS8vIFRoZSBHb29nbGUgQ2xvc3VyZSBhc3NlcnQgZnVuY3Rp
b25zIHN0YXJ0IHdpdGggYXNzZXJ0LCBlZy4KLS8vICAgYXNzZXJ0VGhyb3dzCi0vLyAgIGFzc2Vy
dE5vdFRocm93cwotLy8gICBhc3NlcnRUcnVlCi0vLyAgIC4uLgotLy8KLS8vIFRoZSBvbmUgZXhj
ZXB0aW9uIGlzIHRoZSAiZmFpbCIgZnVuY3Rpb24uCi1mdW5jdGlvbiBzaG91bGRFeHBvcnQoc3Ry
KSB7Ci0gIHJldHVybiBzdHIubGFzdEluZGV4T2YoJ2Fzc2VydCcpID09PSAwIHx8IHN0ciA9PSAn
ZmFpbCc7Ci19Ci0KLWZvciAodmFyIGtleSBpbiBnbG9iYWwpIHsKLSAgaWYgKCh0eXBlb2Yga2V5
ID09ICJzdHJpbmciKSAmJiBnbG9iYWwuaGFzT3duUHJvcGVydHkoa2V5KSAmJgotICAgICAgc2hv
dWxkRXhwb3J0KGtleSkpIHsKLSAgICBleHBvcnRzW2tleV0gPSBnbG9iYWxba2V5XTsKLSAgfQot
fQotCi0vLyBUaGUgQ09NUElMRUQgdmFyaWFibGUgaXMgc2V0IGJ5IENsb3N1cmUgY29tcGlsZXIg
dG8gInRydWUiIHdoZW4gaXQgY29tcGlsZXMKLS8vIEphdmFTY3JpcHQsIHNvIGluIHByYWN0aWNl
IHRoaXMgaXMgZXF1aXZhbGVudCB0byAiZXhwb3J0cy5DT01QSUxFRCA9IHRydWUiLgotLy8gVGhp
cyB3aWxsIGRpc2FibGUgc29tZSBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eSBpbiBkZWJ1Zy5qcy4g
IFdlIGNvdWxkCi0vLyBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoaXMgY2FuL3Nob3VsZCBiZSBlbmFi
bGVkIGluIENvbW1vbkpTIGJ1aWxkcy4KLWV4cG9ydHMuQ09NUElMRUQgPSBDT01QSUxFRApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9qcy9jb21tb25qcy9leHBvcnRfdGVzdGRlcHMuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2NvbW1vbmpzL2V4cG9y
dF90ZXN0ZGVwcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTljNzdjYTJjZDRm
MzY3ZTM5NWEyNDEyNDczMzNkZDYzZDg4OTViNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2pzL2NvbW1vbmpzL2V4cG9ydF90ZXN0ZGVwcy5qcworKysgL2Rl
di9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qKgotICogQGZpbGVvdmVydmlldyBFeHBvcnQgc3lt
Ym9scyBuZWVkZWQgYnkgdGVzdHMgaW4gQ29tbW9uSlMgc3R5bGUuCi0gKgotICogVGhpcyBmaWxl
IGlzIGxpa2UgZXhwb3J0LmpzLCBidXQgZm9yIHN5bWJvbHMgdGhhdCBhcmUgb25seSB1c2VkIGJ5
IHRlc3RzLgotICogSG93ZXZlciB3ZSBleGNsdWRlIGFzc2VydCBmdW5jdGlvbnMgaGVyZSwgYmVj
YXVzZSB0aGV5IGFyZSBleHBvcnRlZCBpbnRvCi0gKiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgc28g
dGhvc2UgYXJlIGhhbmRsZWQgYXMgYSBzcGVjaWFsIGNhc2UgaW4KLSAqIGV4cG9ydF9hc3NlcnRz
LmpzLgotICovCi0KLWdvb2cucmVxdWlyZSgnZ29vZy5jcnlwdC5iYXNlNjQnKTsKLWdvb2cucmVx
dWlyZSgnanNwYi5hcml0aC5JbnQ2NCcpOwotZ29vZy5yZXF1aXJlKCdqc3BiLmFyaXRoLlVJbnQ2
NCcpOwotZ29vZy5yZXF1aXJlKCdqc3BiLkJpbmFyeUVuY29kZXInKTsKLWdvb2cucmVxdWlyZSgn
anNwYi5CaW5hcnlEZWNvZGVyJyk7Ci1nb29nLnJlcXVpcmUoJ2pzcGIudXRpbHMnKTsKLQotZXhw
b3J0cy5nb29nID0gZ29vZzsKLWV4cG9ydHMuanNwYiA9IGpzcGI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2Nv
bW1vbmpzL2ltcG9ydF90ZXN0LmpzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9jb21tb25qcy9pbXBvcnRfdGVzdC5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhMzRmZWE2MWUzM2MwNTUxMjNjMmI5N2M4MDRhNWY4
MDE4MWIyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pz
L2NvbW1vbmpzL2ltcG9ydF90ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFRlc3Qgc3VpdGUgaXMgd3Jp
dHRlbiB1c2luZyBKYXNtaW5lIC0tIHNlZSBodHRwOi8vamFzbWluZS5naXRodWIuaW8vCi0KLQot
Ci12YXIgZ29vZ2xlUHJvdG9idWYgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTsKLXZhciBh
c3NlcnRzID0gcmVxdWlyZSgnY2xvc3VyZV9hc3NlcnRzX2NvbW1vbmpzJyk7Ci12YXIgZ2xvYmFs
ID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTsKLQotLy8gQnJpbmcgYXNzZXJ0cyBpbnRvIHRo
ZSBnbG9iYWwgbmFtZXNwYWNlLgotZ29vZ2xlUHJvdG9idWYub2JqZWN0LmV4dGVuZChnbG9iYWws
IGFzc2VydHMpOwotZ29vZ2xlUHJvdG9idWYuZXhwb3J0U3ltYm9sKCdqc3BiLk1lc3NhZ2UnLCBn
b29nbGVQcm90b2J1Zi5NZXNzYWdlLCBnbG9iYWwpOwotCi12YXIgdGVzdDdfcGIgPSByZXF1aXJl
KCcuL3Rlc3Q3L3Rlc3Q3X3BiJyk7Ci1nb29nbGVQcm90b2J1Zi5leHBvcnRTeW1ib2woJ3Byb3Rv
LmpzcGIudGVzdC5mcmFtaW5nLkZyYW1pbmdNZXNzYWdlJywgdGVzdDdfcGIuRnJhbWluZ01lc3Nh
Z2UsIGdsb2JhbCk7Ci0KLWRlc2NyaWJlKCdJbXBvcnQgdGVzdCBzdWl0ZScsIGZ1bmN0aW9uKCkg
ewotICBpdCgndGVzdEltcG9ydGVkTWVzc2FnZScsIGZ1bmN0aW9uKCkgewotICAgIHZhciBmcmFt
aW5nMSA9IG5ldyBwcm90by5qc3BiLnRlc3QuZnJhbWluZy5GcmFtaW5nTWVzc2FnZShbXSk7Ci0g
ICAgdmFyIGZyYW1pbmcyID0gbmV3IHByb3RvLmpzcGIudGVzdC5mcmFtaW5nLkZyYW1pbmdNZXNz
YWdlKFtdKTsKLSAgICBhc3NlcnRPYmplY3RFcXVhbHMoZnJhbWluZzEudG9PYmplY3QoKSwgZnJh
bWluZzIudG9PYmplY3QoKSk7Ci0gIH0pOwotfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2NvbW1vbmpzL2ph
c21pbmUuanNvbiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvanMvY29tbW9uanMvamFzbWluZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2NjZiOGVkYmY4N2FhMDM0Y2MyMmMwNDFjMDk4NWE3MGZkMDUxMWVhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvY29tbW9uanMvamFz
bWluZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgInNwZWNfZGly
IjogIiIsCi0gICAgInNwZWNfZmlsZXMiOiBbCi0gICAgICAgICIqX3Rlc3QuanMiLAotICAgICAg
ICAiYmluYXJ5L3Byb3RvX3Rlc3QuanMiCi0gICAgXSwKLSAgICAiaGVscGVycyI6IFsKLSAgICBd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL2pzL2NvbW1vbmpzL3Jld3JpdGVfdGVzdHNfZm9yX2NvbW1vbmpzLmpz
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9qcy9jb21tb25qcy9yZXdyaXRlX3Rlc3RzX2Zvcl9jb21tb25qcy5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjZkOTBkMjg3ZGE3MTA4NzQ3YjNiNWUxNmY0OTU5NGIxOTdlZGM1
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2NvbW1v
bmpzL3Jld3JpdGVfdGVzdHNfZm9yX2NvbW1vbmpzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsOTcg
KzAsMCBAQAotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFV0aWxpdHkgdG8gdHJhbnNsYXRlIHRlc3Qg
ZmlsZXMgdG8gQ29tbW9uSlMgaW1wb3J0cy4KLSAqCi0gKiBUaGlzIGlzIGEgc29tZXdoYXQgaGFj
a3kgdG9vbCBkZXNpZ25lZCB0byBkbyBvbmUgdmVyeSBzcGVjaWZpYyB0aGluZy4KLSAqIEFsbCBv
ZiB0aGUgdGVzdCBmaWxlcyBpbiAqX3Rlc3QuanMgYXJlIHdyaXR0ZW4gd2l0aCBDbG9zdXJlLXN0
eWxlCi0gKiBpbXBvcnRzIChnb29nLnJlcXVpcmUoKSkuICBUaGlzIHdvcmtzIGdyZWF0IGZvciBy
dW5uaW5nIHRoZSB0ZXN0cwotICogYWdhaW5zdCBDbG9zdXJlLXN0eWxlIGdlbmVyYXRlZCBjb2Rl
LCBidXQgd2UgYWxzbyB3YW50IHRvIHJ1biB0aGUKLSAqIHRlc3RzIGFnYWluc3QgQ29tbW9uSlMt
c3R5bGUgZ2VuZXJhdGVkIGNvZGUgd2l0aG91dCBoYXZpbmcgdG8gZm9yawotICogdGhlIHRlc3Rz
LgotICoKLSAqIENsb3N1cmUtc3R5bGUgaW1wb3J0cyBpbXBvcnQgZWFjaCBpbmRpdmlkdWFsIHR5
cGUgYnkgbmFtZS4gIFRoaXMgaXMKLSAqIHZlcnkgZGlmZmVyZW50IHRoYW4gQ29tbW9uSlMgaW1w
b3J0cyB3aGljaCBhcmUgYnkgZmlsZS4gIFNvIHdlIHB1dAotICogc3BlY2lhbCBjb21tZW50cyBp
biB0aGVzZSB0ZXN0cyBsaWtlOgotICoKLSAqIC8vIENvbW1vbkpTLUxvYWRGcm9tRmlsZTogdGVz
dF9wYgotICogZ29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuQ2xvbmVFeHRlbnNpb24nKTsK
LSAqIGdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LkNvbXBsZXgnKTsKLSAqIGdvb2cucmVx
dWlyZSgncHJvdG8uanNwYi50ZXN0LkRlZmF1bHRWYWx1ZXMnKTsKLSAqCi0gKiBUaGlzIHNjcmlw
dCBwYXJzZXMgdGhhdCBzcGVjaWFsIGNvbW1lbnQgYW5kIHVzZXMgaXQgdG8gZ2VuZXJhdGUgcHJv
cGVyCi0gKiBDb21tb25KUyByZXF1aXJlKCkgc3RhdGVtZW50cyBzbyB0aGF0IHRoZSB0ZXN0cyBj
YW4gcnVuIGFuZCBwYXNzIHVzaW5nCi0gKiBDb21tb25KUyBpbXBvcnRzLiAgVGhlIHNjcmlwdCB3
aWxsIGNoYW5nZSB0aGUgYWJvdmUgc3RhdGVtZW50cyBpbnRvOgotICoKLSAqICAgdmFyIHRlc3Rf
cGIgPSByZXF1aXJlKCd0ZXN0X3BiJyk7Ci0gKiAgIGdvb2dsZVByb3RvYnVmLmV4cG9ydFN5bWJv
bCgncHJvdG8uanNwYi50ZXN0LkNsb25lRXh0ZW5zaW9uJywgdGVzdF9wYi5DbG9uZUV4dGVuc2lv
biwgZ2xvYmFsKTsKLSAqICAgZ29vZ2xlUHJvdG9idWYuZXhwb3J0U3ltYm9sKCdwcm90by5qc3Bi
LnRlc3QuQ29tcGxleCcsIHRlc3RfcGIuQ29tcGxleCwgZ2xvYmFsKTsKLSAqICAgZ29vZ2xlUHJv
dG9idWYuZXhwb3J0U3ltYm9sKCdwcm90by5qc3BiLnRlc3QuRGVmYXVsdFZhbHVlcycsIHRlc3Rf
cGIuRGVmYXVsdFZhbHVlcywgZ2xvYmFsKTsKLSAqCi0gKiAoVGhlICJleHBvcnRTeW1ib2wiIGZ1
bmN0aW9uIHdpbGwgZGVmaW5lIHRoZSBnaXZlbiBuYW1lcyBpbiB0aGUgZ2xvYmFsCi0gKiBuYW1l
c3BhY2UsIHRha2luZyBjYXJlIG5vdCB0byBvdmVyd3JpdGUgYW55IHByZXZpb3VzIHZhbHVlIGZv
cgotICogInByb3RvLmpzcGIudGVzdCIpLgotICovCi0KLXZhciBsaW5lUmVhZGVyID0gcmVxdWly
ZSgncmVhZGxpbmUnKS5jcmVhdGVJbnRlcmZhY2UoewotICBpbnB1dDogcHJvY2Vzcy5zdGRpbiwK
LSAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dAotfSk7Ci0KLWZ1bmN0aW9uIHRyeVN0cmlwUHJlZml4
KHN0ciwgcHJlZml4KSB7Ci0gIGlmIChzdHIubGFzdEluZGV4T2YocHJlZml4KSAhPT0gMCkgewot
ICAgIHRocm93ICJTdHJpbmc6ICIgKyBzdHIgKyAiIGRpZG4ndCBzdGFydCB3aXRoOiAiICsgcHJl
Zml4OwotICB9Ci0gIHJldHVybiBzdHIuc3Vic3RyKHByZWZpeC5sZW5ndGgpOwotfQotCi1mdW5j
dGlvbiBjYW1lbENhc2Uoc3RyKSB7Ci0gIHZhciByZXQgPSAnJzsKLSAgdmFyIHVjYXNlTmV4dCA9
IGZhbHNlOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgewotICAgIGlm
IChzdHJbaV0gPT0gJy0nKSB7Ci0gICAgICB1Y2FzZU5leHQgPSB0cnVlOwotICAgIH0gZWxzZSBp
ZiAodWNhc2VOZXh0KSB7Ci0gICAgICByZXQgKz0gc3RyW2ldLnRvVXBwZXJDYXNlKCk7Ci0gICAg
ICB1Y2FzZU5leHQgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0ICs9IHN0cltpXTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotdmFyIG1vZHVsZSA9IG51bGw7Ci12YXIg
cGtnID0gbnVsbDsKLQotLy8gSGVhZGVyOiBnb2VzIGluIGV2ZXJ5IGZpbGUgYXQgdGhlIHRvcC4K
LWNvbnNvbGUubG9nKCJ2YXIgZ2xvYmFsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTsiKTsK
LWNvbnNvbGUubG9nKCJ2YXIgZ29vZ2xlUHJvdG9idWYgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9i
dWYnKTsiKTsKLWNvbnNvbGUubG9nKCJ2YXIgdGVzdGRlcHMgPSByZXF1aXJlKCd0ZXN0ZGVwc19j
b21tb25qcycpOyIpOwotY29uc29sZS5sb2coImdsb2JhbC5nb29nID0gdGVzdGRlcHMuZ29vZzsi
KTsKLWNvbnNvbGUubG9nKCJnbG9iYWwuanNwYiA9IHRlc3RkZXBzLmpzcGI7Iik7Ci1jb25zb2xl
LmxvZygidmFyIGFzc2VydHMgPSByZXF1aXJlKCdjbG9zdXJlX2Fzc2VydHNfY29tbW9uanMnKTsi
KTsKLWNvbnNvbGUubG9nKCIiKTsKLWNvbnNvbGUubG9nKCIvLyBCcmluZyBhc3NlcnRzIGludG8g
dGhlIGdsb2JhbCBuYW1lc3BhY2UuIik7Ci1jb25zb2xlLmxvZygiZ29vZ2xlUHJvdG9idWYub2Jq
ZWN0LmV4dGVuZChnbG9iYWwsIGFzc2VydHMpOyIpOwotCi1saW5lUmVhZGVyLm9uKCdsaW5lJywg
ZnVuY3Rpb24obGluZSkgewotICB2YXIgaXNSZXF1aXJlID0gbGluZS5tYXRjaCgvZ29vZ1wucmVx
dWlyZVwoJyhbXiddKiknXCkvKTsKLSAgdmFyIGlzTG9hZEZyb21GaWxlID0gbGluZS5tYXRjaCgv
Q29tbW9uSlMtTG9hZEZyb21GaWxlOiAoXFMqKSAoLiopLyk7Ci0gIHZhciBpc1NldFRlc3RPbmx5
ID0gbGluZS5tYXRjaCgvZ29vZy5zZXRUZXN0T25seSgpLyk7Ci0gIGlmIChpc1JlcXVpcmUpIHsK
LSAgICBpZiAobW9kdWxlKSB7ICAvLyBTa2lwIGdvb2cucmVxdWlyZSgpIGxpbmVzIGJlZm9yZSB0
aGUgZmlyc3QgZGlyZWN0aXZlLgotICAgICAgdmFyIGZ1bGxTeW0gPSBpc1JlcXVpcmVbMV07Ci0g
ICAgICB2YXIgc3ltID0gdHJ5U3RyaXBQcmVmaXgoZnVsbFN5bSwgcGtnKTsKLSAgICAgIGNvbnNv
bGUubG9nKCJnb29nbGVQcm90b2J1Zi5leHBvcnRTeW1ib2woJyIgKyBmdWxsU3ltICsgIicsICIg
KyBtb2R1bGUgKyBzeW0gKyAnLCBnbG9iYWwpOycpOwotICAgIH0KLSAgfSBlbHNlIGlmIChpc0xv
YWRGcm9tRmlsZSkgewotICAgIHZhciBtb2R1bGVfcGF0aCA9IGlzTG9hZEZyb21GaWxlWzFdLnNw
bGl0KCcvJyk7Ci0gICAgbW9kdWxlID0gY2FtZWxDYXNlKG1vZHVsZV9wYXRoW21vZHVsZV9wYXRo
Lmxlbmd0aCAtIDFdKTsKLSAgICBwa2cgPSBpc0xvYWRGcm9tRmlsZVsyXTsKLQotICAgIGlmICht
b2R1bGUgIT0gImdvb2dsZVByb3RvYnVmIikgeyAgLy8gV2UgdW5jb25kaXRpb25hbGx5IHJlcXVp
cmUgdGhpcyBpbiB0aGUgaGVhZGVyLgotICAgICAgY29uc29sZS5sb2coInZhciAiICsgbW9kdWxl
ICsgIiA9IHJlcXVpcmUoJy4vIiArIGlzTG9hZEZyb21GaWxlWzFdICsgIicpOyIpOwotICAgIH0K
LSAgfSBlbHNlIGlmICghaXNTZXRUZXN0T25seSkgeyAgLy8gUmVtb3ZlIGdvb2cuc2V0VGVzdE9u
bHkoKSBsaW5lcy4KLSAgICBjb25zb2xlLmxvZyhsaW5lKTsKLSAgfQotfSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2pzL2NvbW1vbmpzL3Rlc3Q2L3Rlc3Q2LnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9jb21tb25qcy90ZXN0Ni90ZXN0Ni5w
cm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA2MDkyNWYyZDUwNWQzODRkYmQx
Mzg3YWVjNDE4ZWIzZTY2YzIzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL2pzL2NvbW1vbmpzL3Rlc3Q2L3Rlc3Q2LnByb3RvCisrKyAvZGV2L251bGwKQEAg
LTEsNDAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRh
eCA9ICJwcm90bzMiOwotCi1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUuYXBwcy5q
c3BiLnByb3RvIjsKLW9wdGlvbiBqYXZhX211bHRpcGxlX2ZpbGVzID0gdHJ1ZTsKLQotcGFja2Fn
ZSBqc3BiLnRlc3QuaW1wb3J0aW5nOwotCi1tZXNzYWdlIEltcG9ydGVkTWVzc2FnZSB7Ci0gIHN0
cmluZyBzdHJpbmdfdmFsdWUgPSAxOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9jb21tb25qcy90ZXN0Ny90
ZXN0Ny5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvanMvY29tbW9uanMvdGVzdDcvdGVzdDcucHJvdG8KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY1NTc0YTNkZDNmOGJiNmJlYWEyNTRjMDk1NmM5ZjU2NTA3OWQ4M2Qu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9jb21tb25q
cy90ZXN0Ny90ZXN0Ny5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMTYgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotb3B0
aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLmFwcHMuanNwYi5wcm90byI7Ci1vcHRpb24g
amF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7Ci0KLXBhY2thZ2UganNwYi50ZXN0LmZyYW1pbmc7
Ci0KLWltcG9ydCAidGVzdDYvdGVzdDYucHJvdG8iOwotCi1tZXNzYWdlIEZyYW1pbmdNZXNzYWdl
IHsKLSAganNwYi50ZXN0LmltcG9ydGluZy5JbXBvcnRlZE1lc3NhZ2UgaW1wb3J0ZWRfbWVzc2Fn
ZSA9IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2RhdGEucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2RhdGEucHJvdG8KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0YThhOTk0Yzc1ZjAxYzgyNWFkOTAwOWU4ZjBkYTdj
MmFjM2RlZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9q
cy9kYXRhLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLy8gUHJvdG9jb2wg
QnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQg
MjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxv
cGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogbXdyQGdvb2dsZS5jb20gKE1hcmsg
UmF3bGluZykKLQotc3ludGF4ID0gInByb3RvMiI7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAi
Y29tLmdvb2dsZS5hcHBzLmpzcGIucHJvdG8iOwotb3B0aW9uIGphdmFfbXVsdGlwbGVfZmlsZXMg
PSB0cnVlOwotCi1wYWNrYWdlIGpzcGIudGVzdDsKLQotLy8gbGVnYWN5IGRhdGEsIG11c3QgYmUg
bmVzdGVkCi1tZXNzYWdlIGRhdGEgewotICBtZXNzYWdlIE5lc3RlZERhdGEgewotICAgIHJlcXVp
cmVkIHN0cmluZyBzdHIgPSAxOwotICB9Ci19Ci0KLS8vIG5ldyBkYXRhLCBkb2VzIG5vdCByZXF1
aXJlIG5lc3RpbmcKLW1lc3NhZ2UgVW5uZXN0ZWREYXRhIHsKLSAgcmVxdWlyZWQgc3RyaW5nIHN0
ciA9IDE7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvZGVidWcuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL2RlYnVnLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzAxYTA5NTdlYTA1ODYzZGVlNGY1NDc1NDVjYzlkYTli
OGI1MjljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMv
ZGVidWcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8qKgotICogQGZpbGVvdmVydmlldyBVdGlsaXRpZXMgdG8g
ZGVidWcgSlNQQiBiYXNlZCBwcm90byBvYmplY3RzLgotICovCi0KLWdvb2cucHJvdmlkZSgnanNw
Yi5kZWJ1ZycpOwotCi1nb29nLnJlcXVpcmUoJ2dvb2cuYXJyYXknKTsKLWdvb2cucmVxdWlyZSgn
Z29vZy5hc3NlcnRzJyk7Ci1nb29nLnJlcXVpcmUoJ2dvb2cub2JqZWN0Jyk7Ci1nb29nLnJlcXVp
cmUoJ2pzcGIuTWVzc2FnZScpOwotCi0KLS8qKgotICogVHVybnMgYSBwcm90byBpbnRvIGEgaHVt
YW4gcmVhZGFibGUgb2JqZWN0IHRoYXQgY2FuIGkuZS4gYmUgd3JpdHRlbiB0byB0aGUKLSAqIGNv
bnNvbGU6IHtAY29kZSBjb25zb2xlLmxvZyhqc3BiLmRlYnVnLmR1bXAobXlQcm90bykpfS4KLSAq
IFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBiZXN0IGVmZm9ydCBhbmQgbWF5IG5vdCB3b3JrIGluIGFs
bCBjYXNlcy4gSXQgd2lsbCBub3QKLSAqIHdvcmsgaW4gb2JmdXNjYXRlZCBhbmQgb3Igb3B0aW1p
emVkIGNvZGUuCi0gKiBVc2UgdGhpcyBpbiBlbnZpcm9ubWVudHMgd2hlcmUge0BzZWUganNwYi5N
ZXNzYWdlLnByb3RvdHlwZS50b09iamVjdH0gaXMKLSAqIG5vdCBhdmFpbGFibGUgZm9yIGNvZGUg
c2l6ZSByZWFzb25zLgotICogQHBhcmFtIHtqc3BiLk1lc3NhZ2V9IG1lc3NhZ2UgQSBqc3BiLk1l
c3NhZ2UuCi0gKiBAcmV0dXJuIHtPYmplY3R9Ci0gKi8KLWpzcGIuZGVidWcuZHVtcCA9IGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKLSAgaWYgKCFnb29nLkRFQlVHKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0g
IH0KLSAgZ29vZy5hc3NlcnRzLmFzc2VydChtZXNzYWdlIGluc3RhbmNlb2YganNwYi5NZXNzYWdl
LAotICAgICAgJ2pzcGIuTWVzc2FnZSBpbnN0YW5jZSBleHBlY3RlZCcpOwotICAvKiogQHR5cGUg
e09iamVjdH0gKi8KLSAgdmFyIG9iamVjdCA9IG1lc3NhZ2U7Ci0gIGdvb2cuYXNzZXJ0cy5hc3Nl
cnQob2JqZWN0WydnZXRFeHRlbnNpb24nXSwKLSAgICAgICdPbmx5IHVub2JmdXNjYXRlZCBhbmQg
dW5vcHRpbWl6ZWQgY29tcGlsYXRpb24gbW9kZXMgc3VwcG9ydGVkLicpOwotICByZXR1cm4gLyoq
IEB0eXBlIHtPYmplY3R9ICovIChqc3BiLmRlYnVnLmR1bXBfKG1lc3NhZ2UpKTsKLX07Ci0KLQot
LyoqCi0gKiBSZWN1cnNpdmVseSBpbnRyb3NwZWN0cyBhIG1lc3NhZ2UgYW5kIHRoZSB2YWx1ZXMg
aXRzIGdldHRlcnMgcmV0dXJuIHRvCi0gKiBtYWtlIGEgYmVzdCBlZmZvcnQgaW4gY3JlYXRpbmcg
YSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUKLSAqIG1lc3NhZ2UuCi0gKiBA
cGFyYW0gez99IHRoaW5nIEEganNwYi5NZXNzYWdlLCBBcnJheSBvciBwcmltaXRpdmUgdHlwZSB0
byBkdW1wLgotICogQHJldHVybiB7Kn0KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuZGVidWcuZHVt
cF8gPSBmdW5jdGlvbih0aGluZykgewotICB2YXIgdHlwZSA9IGdvb2cudHlwZU9mKHRoaW5nKTsK
LSAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdi
b29sZWFuJyB8fAotICAgICAgdHlwZSA9PSAnbnVsbCcgfHwgdHlwZSA9PSAndW5kZWZpbmVkJykg
ewotICAgIHJldHVybiB0aGluZzsKLSAgfQotICBpZiAodHlwZSA9PSAnYXJyYXknKSB7Ci0gICAg
Z29vZy5hc3NlcnRzLmFzc2VydEFycmF5KHRoaW5nKTsKLSAgICByZXR1cm4gZ29vZy5hcnJheS5t
YXAodGhpbmcsIGpzcGIuZGVidWcuZHVtcF8pOwotICB9Ci0gIHZhciBtZXNzYWdlID0gdGhpbmc7
ICAvLyBDb3B5IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0eXBlIGluZmVyZW5jZSBvbiB0aGluZy4K
LSAgZ29vZy5hc3NlcnRzLmFzc2VydChtZXNzYWdlIGluc3RhbmNlb2YganNwYi5NZXNzYWdlLAot
ICAgICAgJ09ubHkgbWVzc2FnZXMgZXhwZWN0ZWQ6ICcgKyB0aGluZyk7Ci0gIHZhciBjdG9yID0g
bWVzc2FnZS5jb25zdHJ1Y3RvcjsKLSAgdmFyIG1lc3NhZ2VOYW1lID0gY3Rvci5uYW1lIHx8IGN0
b3IuZGlzcGxheU5hbWU7Ci0gIHZhciBvYmplY3QgPSB7Ci0gICAgJyRuYW1lJzogbWVzc2FnZU5h
bWUKLSAgfTsKLSAgZm9yICh2YXIgbmFtZSBpbiBjdG9yLnByb3RvdHlwZSkgewotICAgIHZhciBt
YXRjaCA9IC9eZ2V0KFtBLVpdXHcqKS8uZXhlYyhuYW1lKTsKLSAgICBpZiAobWF0Y2ggJiYgbmFt
ZSAhPSAnZ2V0RXh0ZW5zaW9uJyAmJgotICAgICAgICBuYW1lICE9ICdnZXRKc1BiTWVzc2FnZUlk
JykgewotICAgICAgdmFyIHZhbCA9IHRoaW5nW25hbWVdKCk7Ci0gICAgICBpZiAodmFsICE9IG51
bGwpIHsKLSAgICAgICAgb2JqZWN0W2pzcGIuZGVidWcuZm9ybWF0RmllbGROYW1lXyhtYXRjaFsx
XSldID0ganNwYi5kZWJ1Zy5kdW1wXyh2YWwpOwotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAo
Q09NUElMRUQgJiYgdGhpbmdbJ2V4dGVuc2lvbk9iamVjdF8nXSkgewotICAgIG9iamVjdFsnJGV4
dGVuc2lvbnMnXSA9ICdSZWN1cnNpdmUgZHVtcGluZyBvZiBleHRlbnNpb25zIG5vdCBzdXBwb3J0
ZWQgJyArCi0gICAgICAgICdpbiBjb21waWxlZCBjb2RlLiBTd2l0Y2ggdG8gdW5jb21waWxlZCBv
ciBkdW1wIGV4dGVuc2lvbiBvYmplY3QgJyArCi0gICAgICAgICdkaXJlY3RseSc7Ci0gICAgcmV0
dXJuIG9iamVjdDsKLSAgfQotICB2YXIgZXh0ZW5zaW9uc09iamVjdDsKLSAgZm9yICh2YXIgaWQg
aW4gY3RvclsnZXh0ZW5zaW9ucyddKSB7Ci0gICAgaWYgKC9eXGQrJC8udGVzdChpZCkpIHsKLSAg
ICAgIHZhciBleHQgPSBjdG9yWydleHRlbnNpb25zJ11baWRdOwotICAgICAgdmFyIGV4dFZhbCA9
IHRoaW5nLmdldEV4dGVuc2lvbihleHQpOwotICAgICAgdmFyIGZpZWxkTmFtZSA9IGdvb2cub2Jq
ZWN0LmdldEtleXMoZXh0LmZpZWxkTmFtZSlbMF07Ci0gICAgICBpZiAoZXh0VmFsICE9IG51bGwp
IHsKLSAgICAgICAgaWYgKCFleHRlbnNpb25zT2JqZWN0KSB7Ci0gICAgICAgICAgZXh0ZW5zaW9u
c09iamVjdCA9IG9iamVjdFsnJGV4dGVuc2lvbnMnXSA9IHt9OwotICAgICAgICB9Ci0gICAgICAg
IGV4dGVuc2lvbnNPYmplY3RbanNwYi5kZWJ1Zy5mb3JtYXRGaWVsZE5hbWVfKGZpZWxkTmFtZSld
ID0KLSAgICAgICAgICAgIGpzcGIuZGVidWcuZHVtcF8oZXh0VmFsKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLSAgcmV0dXJuIG9iamVjdDsKLX07Ci0KLQotLyoqCi0gKiBGb3JtYXRzIGEgZmllbGQg
bmFtZSBmb3Igb3V0cHV0IGFzIGNhbWVsQ2FzZS4KLSAqCi0gKiBAcGFyYW0ge3N0cmluZ30gbmFt
ZSBOYW1lIG9mIHRoZSBmaWVsZC4KLSAqIEByZXR1cm4ge3N0cmluZ30KLSAqIEBwcml2YXRlCi0g
Ki8KLWpzcGIuZGVidWcuZm9ybWF0RmllbGROYW1lXyA9IGZ1bmN0aW9uKG5hbWUpIHsKLSAgLy8g
TmFtZSBtYXkgYmUgaW4gVGl0bGVDYXNlLgotICByZXR1cm4gbmFtZS5yZXBsYWNlKC9eW0EtWl0v
LCBmdW5jdGlvbihjKSB7Ci0gICAgcmV0dXJuIGMudG9Mb3dlckNhc2UoKTsKLSAgfSk7Ci19Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9qcy9kZWJ1Z190ZXN0LmpzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9kZWJ1Z190ZXN0LmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMWNiZjg5MWFiNTA5NzFlMzZlODkwODg0MWI5ZTQ1MWY4YThk
NGJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvZGVi
dWdfdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotZ29vZy5zZXRUZXN0T25seSgpOwotCi1nb29nLnJlcXVp
cmUoJ2dvb2cudGVzdGluZy5hc3NlcnRzJyk7Ci0KLS8vIENvbW1vbkpTLUxvYWRGcm9tRmlsZTog
Z29vZ2xlLXByb3RvYnVmCi1nb29nLnJlcXVpcmUoJ2pzcGIuZGVidWcnKTsKLQotLy8gQ29tbW9u
SlMtTG9hZEZyb21GaWxlOiB0ZXN0X3BiCi1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5I
YXNFeHRlbnNpb25zJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5Jc0V4dGVuc2lv
bicpOwotZ29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuU2ltcGxlMScpOwotCi0KLQotZGVz
Y3JpYmUoJ2RlYnVnVGVzdCcsIGZ1bmN0aW9uKCkgewotICBpdCgndGVzdFNpbXBsZTEnLCBmdW5j
dGlvbigpIHsKLSAgICBpZiAoQ09NUElMRUQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
dmFyIG1lc3NhZ2UgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlNpbXBsZTEoKTsKLSAgICBtZXNzYWdl
LnNldEFTdHJpbmcoJ2ZvbycpOwotICAgIGFzc2VydE9iamVjdEVxdWFscyh7Ci0gICAgICAkbmFt
ZTogJ3Byb3RvLmpzcGIudGVzdC5TaW1wbGUxJywKLSAgICAgICdhU3RyaW5nJzogJ2ZvbycsCi0g
ICAgICAnYVJlcGVhdGVkU3RyaW5nTGlzdCc6IFtdCi0gICAgfSwganNwYi5kZWJ1Zy5kdW1wKG1l
c3NhZ2UpKTsKLQotICAgIG1lc3NhZ2Uuc2V0QUJvb2xlYW4odHJ1ZSk7Ci0gICAgbWVzc2FnZS5z
ZXRBUmVwZWF0ZWRTdHJpbmdMaXN0KFsnMScsICcyJ10pOwotCi0gICAgYXNzZXJ0T2JqZWN0RXF1
YWxzKHsKLSAgICAgICRuYW1lOiAncHJvdG8uanNwYi50ZXN0LlNpbXBsZTEnLAotICAgICAgJ2FT
dHJpbmcnOiAnZm9vJywKLSAgICAgICdhUmVwZWF0ZWRTdHJpbmdMaXN0JzogWycxJywgJzInXSwK
LSAgICAgICdhQm9vbGVhbic6IHRydWUKLSAgICB9LCBqc3BiLmRlYnVnLmR1bXAobWVzc2FnZSkp
OwotCi0gICAgbWVzc2FnZS5zZXRBU3RyaW5nKHVuZGVmaW5lZCk7Ci0KLSAgICBhc3NlcnRPYmpl
Y3RFcXVhbHMoewotICAgICAgJG5hbWU6ICdwcm90by5qc3BiLnRlc3QuU2ltcGxlMScsCi0gICAg
ICAnYVJlcGVhdGVkU3RyaW5nTGlzdCc6IFsnMScsICcyJ10sCi0gICAgICAnYUJvb2xlYW4nOiB0
cnVlCi0gICAgfSwganNwYi5kZWJ1Zy5kdW1wKG1lc3NhZ2UpKTsKLSAgfSk7Ci0KLQotICBpdCgn
dGVzdEV4dGVuc2lvbnMnLCBmdW5jdGlvbigpIHsKLSAgICBpZiAoQ09NUElMRUQpIHsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgdmFyIGV4dGVuc2lvbiA9IG5ldyBwcm90by5qc3BiLnRlc3Qu
SXNFeHRlbnNpb24oKTsKLSAgICBleHRlbnNpb24uc2V0RXh0MSgnZXh0MWZpZWxkJyk7Ci0gICAg
dmFyIGV4dGVuZGFibGUgPSBuZXcgcHJvdG8uanNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoKTsKLSAg
ICBleHRlbmRhYmxlLnNldFN0cjEoJ3YxJyk7Ci0gICAgZXh0ZW5kYWJsZS5zZXRTdHIyKCd2Micp
OwotICAgIGV4dGVuZGFibGUuc2V0U3RyMygndjMnKTsKLSAgICBleHRlbmRhYmxlLnNldEV4dGVu
c2lvbihwcm90by5qc3BiLnRlc3QuSXNFeHRlbnNpb24uZXh0RmllbGQsIGV4dGVuc2lvbik7Ci0K
LSAgICBhc3NlcnRPYmplY3RFcXVhbHMoewotICAgICAgJyRuYW1lJzogJ3Byb3RvLmpzcGIudGVz
dC5IYXNFeHRlbnNpb25zJywKLSAgICAgICdzdHIxJzogJ3YxJywKLSAgICAgICdzdHIyJzogJ3Yy
JywKLSAgICAgICdzdHIzJzogJ3YzJywKLSAgICAgICckZXh0ZW5zaW9ucyc6IHsKLSAgICAgICAg
J2V4dEZpZWxkJzogewotICAgICAgICAgICckbmFtZSc6ICdwcm90by5qc3BiLnRlc3QuSXNFeHRl
bnNpb24nLAotICAgICAgICAgICdleHQxJzogJ2V4dDFmaWVsZCcKLSAgICAgICAgfSwKLSAgICAg
ICAgJ3JlcGVhdGVkU2ltcGxlTGlzdCc6IFtdCi0gICAgICB9Ci0gICAgfSwganNwYi5kZWJ1Zy5k
dW1wKGV4dGVuZGFibGUpKTsKLSAgfSk7Ci0KLX0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9ndWxwZmlsZS5q
cyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvanMvZ3VscGZpbGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MjIwMTUz
YjViZDdkYTk1ZGJkYWQ4ZDQyOWEwNmUxODRjMDJlMmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9ndWxwZmlsZS5qcworKysgL2Rldi9udWxsCkBAIC0x
LDExMCArMCwwIEBACi12YXIgZ3VscCA9IHJlcXVpcmUoJ2d1bHAnKTsKLXZhciBleGVjRmlsZSA9
IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZTsKLXZhciBnbG9iID0gcmVxdWlyZSgn
Z2xvYicpOwotCi1mdW5jdGlvbiBleGVjKGNvbW1hbmQsIGNiKSB7Ci0gIGV4ZWNGaWxlKCdzaCcs
IFsnLWMnLCBjb21tYW5kXSwgY2IpOwotfQotCi12YXIgcHJvdG9jID0gcHJvY2Vzcy5lbnYuUFJP
VE9DIHx8ICcuLi9zcmMvcHJvdG9jJzsKLQotZ3VscC50YXNrKCdnZW5wcm90b19jbG9zdXJlJywg
ZnVuY3Rpb24gKGNiKSB7Ci0gIGV4ZWMocHJvdG9jICsgJyAtLWpzX291dD1saWJyYXJ5PXRlc3Rw
cm90b19saWJzLGJpbmFyeTouICAtSSAuLi9zcmMgLUkgLiAqLnByb3RvIC4uL3NyYy9nb29nbGUv
cHJvdG9idWYvZGVzY3JpcHRvci5wcm90bycsCi0gICAgICAgZnVuY3Rpb24gKGVyciwgc3Rkb3V0
LCBzdGRlcnIpIHsKLSAgICBjb25zb2xlLmxvZyhzdGRvdXQpOwotICAgIGNvbnNvbGUubG9nKHN0
ZGVycik7Ci0gICAgY2IoZXJyKTsKLSAgfSk7Ci19KTsKLQotZ3VscC50YXNrKCdnZW5wcm90b19j
b21tb25qcycsIGZ1bmN0aW9uIChjYikgewotICBleGVjKCdta2RpciAtcCBjb21tb25qc19vdXQg
JiYgJyArIHByb3RvYyArICcgLS1qc19vdXQ9aW1wb3J0X3N0eWxlPWNvbW1vbmpzLGJpbmFyeTpj
b21tb25qc19vdXQgLUkgLi4vc3JjIC1JIGNvbW1vbmpzIC1JIC4gKi5wcm90byBjb21tb25qcy90
ZXN0Ki8qLnByb3RvIC4uL3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bycsCi0g
ICAgICAgZnVuY3Rpb24gKGVyciwgc3Rkb3V0LCBzdGRlcnIpIHsKLSAgICBjb25zb2xlLmxvZyhz
dGRvdXQpOwotICAgIGNvbnNvbGUubG9nKHN0ZGVycik7Ci0gICAgY2IoZXJyKTsKLSAgfSk7Ci19
KTsKLQotZ3VscC50YXNrKCdkaXN0JywgZnVuY3Rpb24gKGNiKSB7Ci0gIC8vIFRPRE8oaGFiZXJt
YW4pOiBtaW5pZnkgdGhpcyBtb3JlIGFnZ3Jlc3NpdmVseS4KLSAgLy8gV2lsbCByZXF1aXJlIHBy
b3BlciBleHRlcm5zL2V4cG9ydHMuCi0gIGV4ZWMoJy4vbm9kZV9tb2R1bGVzL2dvb2dsZS1jbG9z
dXJlLWxpYnJhcnkvY2xvc3VyZS9iaW4vY2FsY2RlcHMucHkgLWkgbWVzc2FnZS5qcyAtaSBiaW5h
cnkvcmVhZGVyLmpzIC1pIGJpbmFyeS93cml0ZXIuanMgLWkgY29tbW9uanMvZXhwb3J0LmpzIC1w
IC4gLXAgbm9kZV9tb2R1bGVzL2dvb2dsZS1jbG9zdXJlLWxpYnJhcnkvY2xvc3VyZSAtbyBjb21w
aWxlZCAtLWNvbXBpbGVyX2phciBub2RlX21vZHVsZXMvZ29vZ2xlLWNsb3N1cmUtY29tcGlsZXIv
Y29tcGlsZXIuamFyID4gZ29vZ2xlLXByb3RvYnVmLmpzJywKLSAgICAgICBmdW5jdGlvbiAoZXJy
LCBzdGRvdXQsIHN0ZGVycikgewotICAgIGNvbnNvbGUubG9nKHN0ZG91dCk7Ci0gICAgY29uc29s
ZS5sb2coc3RkZXJyKTsKLSAgICBjYihlcnIpOwotICB9KTsKLX0pOwotCi1ndWxwLnRhc2soJ2Nv
bW1vbmpzX2Fzc2VydHMnLCBmdW5jdGlvbiAoY2IpIHsKLSAgZXhlYygnbWtkaXIgLXAgY29tbW9u
anNfb3V0L3Rlc3Rfbm9kZV9tb2R1bGVzICYmIC4vbm9kZV9tb2R1bGVzL2dvb2dsZS1jbG9zdXJl
LWxpYnJhcnkvY2xvc3VyZS9iaW4vY2FsY2RlcHMucHkgLWkgY29tbW9uanMvZXhwb3J0X2Fzc2Vy
dHMuanMgLXAgLiAtcCBub2RlX21vZHVsZXMvZ29vZ2xlLWNsb3N1cmUtbGlicmFyeS9jbG9zdXJl
IC1vIGNvbXBpbGVkIC0tY29tcGlsZXJfamFyIG5vZGVfbW9kdWxlcy9nb29nbGUtY2xvc3VyZS1j
b21waWxlci9jb21waWxlci5qYXIgPiBjb21tb25qc19vdXQvdGVzdF9ub2RlX21vZHVsZXMvY2xv
c3VyZV9hc3NlcnRzX2NvbW1vbmpzLmpzJywKLSAgICAgICBmdW5jdGlvbiAoZXJyLCBzdGRvdXQs
IHN0ZGVycikgewotICAgIGNvbnNvbGUubG9nKHN0ZG91dCk7Ci0gICAgY29uc29sZS5sb2coc3Rk
ZXJyKTsKLSAgICBjYihlcnIpOwotICB9KTsKLX0pOwotCi1ndWxwLnRhc2soJ2NvbW1vbmpzX3Rl
c3RkZXBzJywgZnVuY3Rpb24gKGNiKSB7Ci0gIGV4ZWMoJ21rZGlyIC1wIGNvbW1vbmpzX291dC90
ZXN0X25vZGVfbW9kdWxlcyAmJiAuL25vZGVfbW9kdWxlcy9nb29nbGUtY2xvc3VyZS1saWJyYXJ5
L2Nsb3N1cmUvYmluL2NhbGNkZXBzLnB5IC1pIGNvbW1vbmpzL2V4cG9ydF90ZXN0ZGVwcy5qcyAt
cCAuIC1wIG5vZGVfbW9kdWxlcy9nb29nbGUtY2xvc3VyZS1saWJyYXJ5L2Nsb3N1cmUgLW8gY29t
cGlsZWQgLS1jb21waWxlcl9qYXIgbm9kZV9tb2R1bGVzL2dvb2dsZS1jbG9zdXJlLWNvbXBpbGVy
L2NvbXBpbGVyLmphciA+IGNvbW1vbmpzX291dC90ZXN0X25vZGVfbW9kdWxlcy90ZXN0ZGVwc19j
b21tb25qcy5qcycsCi0gICAgICAgZnVuY3Rpb24gKGVyciwgc3Rkb3V0LCBzdGRlcnIpIHsKLSAg
ICBjb25zb2xlLmxvZyhzdGRvdXQpOwotICAgIGNvbnNvbGUubG9nKHN0ZGVycik7Ci0gICAgY2Io
ZXJyKTsKLSAgfSk7Ci19KTsKLQotZ3VscC50YXNrKCdtYWtlX2NvbW1vbmpzX291dCcsIFsnZGlz
dCcsICdnZW5wcm90b19jb21tb25qcycsICdjb21tb25qc19hc3NlcnRzJywgJ2NvbW1vbmpzX3Rl
c3RkZXBzJ10sIGZ1bmN0aW9uIChjYikgewotICAvLyBUT0RPKGhhYmVybWFuKTogbWluaWZ5IHRo
aXMgbW9yZSBhZ2dyZXNzaXZlbHkuCi0gIC8vIFdpbGwgcmVxdWlyZSBwcm9wZXIgZXh0ZXJucy9l
eHBvcnRzLgotICB2YXIgY21kID0gIm1rZGlyIC1wIGNvbW1vbmpzX291dC9iaW5hcnkgJiYgbWtk
aXIgLXAgY29tbW9uanNfb3V0L3Rlc3Rfbm9kZV9tb2R1bGVzICYmICI7Ci0gIGZ1bmN0aW9uIGFk
ZFRlc3RGaWxlKGZpbGUpIHsKLSAgICBjbWQgKz0gJ25vZGUgY29tbW9uanMvcmV3cml0ZV90ZXN0
c19mb3JfY29tbW9uanMuanMgPCAnICsgZmlsZSArCi0gICAgICAgICAgICcgPiBjb21tb25qc19v
dXQvJyArIGZpbGUgKyAnJiYgJzsKLSAgfQotCi0gIGdsb2Iuc3luYygnKl90ZXN0LmpzJykuZm9y
RWFjaChhZGRUZXN0RmlsZSk7Ci0gIGdsb2Iuc3luYygnYmluYXJ5LypfdGVzdC5qcycpLmZvckVh
Y2goYWRkVGVzdEZpbGUpOwotCi0gIGV4ZWMoY21kICsKLSAgICAgICAnY3AgY29tbW9uanMvamFz
bWluZS5qc29uIGNvbW1vbmpzX291dC9qYXNtaW5lLmpzb24gJiYgJyArCi0gICAgICAgJ2NwIGdv
b2dsZS1wcm90b2J1Zi5qcyBjb21tb25qc19vdXQvdGVzdF9ub2RlX21vZHVsZXMgJiYgJyArCi0g
ICAgICAgJ2NwIGNvbW1vbmpzL2ltcG9ydF90ZXN0LmpzIGNvbW1vbmpzX291dC9pbXBvcnRfdGVz
dC5qcycsCi0gICAgICAgZnVuY3Rpb24gKGVyciwgc3Rkb3V0LCBzdGRlcnIpIHsKLSAgICBjb25z
b2xlLmxvZyhzdGRvdXQpOwotICAgIGNvbnNvbGUubG9nKHN0ZGVycik7Ci0gICAgY2IoZXJyKTsK
LSAgfSk7Ci19KTsKLQotZ3VscC50YXNrKCdkZXBzJywgWydnZW5wcm90b19jbG9zdXJlJ10sIGZ1
bmN0aW9uIChjYikgewotICBleGVjKCcuL25vZGVfbW9kdWxlcy9nb29nbGUtY2xvc3VyZS1saWJy
YXJ5L2Nsb3N1cmUvYmluL2J1aWxkL2RlcHN3cml0ZXIucHkgKi5qcyBiaW5hcnkvKi5qcyA+IGRl
cHMuanMnLAotICAgICAgIGZ1bmN0aW9uIChlcnIsIHN0ZG91dCwgc3RkZXJyKSB7Ci0gICAgY29u
c29sZS5sb2coc3Rkb3V0KTsKLSAgICBjb25zb2xlLmxvZyhzdGRlcnIpOwotICAgIGNiKGVycik7
Ci0gIH0pOwotfSk7Ci0KLWd1bHAudGFzaygndGVzdF9jbG9zdXJlJywgWydnZW5wcm90b19jbG9z
dXJlJywgJ2RlcHMnXSwgZnVuY3Rpb24gKGNiKSB7Ci0gIGV4ZWMoJ0pBU01JTkVfQ09ORklHX1BB
VEg9amFzbWluZS5qc29uIC4vbm9kZV9tb2R1bGVzLy5iaW4vamFzbWluZScsCi0gICAgICAgZnVu
Y3Rpb24gKGVyciwgc3Rkb3V0LCBzdGRlcnIpIHsKLSAgICBjb25zb2xlLmxvZyhzdGRvdXQpOwot
ICAgIGNvbnNvbGUubG9nKHN0ZGVycik7Ci0gICAgY2IoZXJyKTsKLSAgfSk7Ci19KTsKLQotZ3Vs
cC50YXNrKCd0ZXN0X2NvbW1vbmpzJywgWydtYWtlX2NvbW1vbmpzX291dCddLCBmdW5jdGlvbiAo
Y2IpIHsKLSAgZXhlYygnY2QgY29tbW9uanNfb3V0ICYmIEpBU01JTkVfQ09ORklHX1BBVEg9amFz
bWluZS5qc29uIE5PREVfUEFUSD10ZXN0X25vZGVfbW9kdWxlcyAuLi9ub2RlX21vZHVsZXMvLmJp
bi9qYXNtaW5lJywKLSAgICAgICBmdW5jdGlvbiAoZXJyLCBzdGRvdXQsIHN0ZGVycikgewotICAg
IGNvbnNvbGUubG9nKHN0ZG91dCk7Ci0gICAgY29uc29sZS5sb2coc3RkZXJyKTsKLSAgICBjYihl
cnIpOwotICB9KTsKLX0pOwotCi1ndWxwLnRhc2soJ3Rlc3QnLCBbJ3Rlc3RfY2xvc3VyZScsICd0
ZXN0X2NvbW1vbmpzJ10sIGZ1bmN0aW9uKGNiKSB7Ci0gIGNiKCk7Ci19KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
anMvamFzbWluZS5qc29uIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qcy9qYXNtaW5lLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGY4M2M1NGMwOWQzNWRjMzM2ZmU5ODJiZTY1ZDlkMTM2MWQ3MjcwMTQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9qYXNtaW5lLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi17Ci0gICAgInNwZWNfZGlyIjogIiIsCi0gICAg
InNwZWNfZmlsZXMiOiBbCi0gICAgICAgICIqX3Rlc3QuanMiLAotICAgICAgICAiYmluYXJ5Lypf
dGVzdC5qcyIKLSAgICBdLAotICAgICJoZWxwZXJzIjogWwotICAgICAgICAibm9kZV9tb2R1bGVz
L2dvb2dsZS1jbG9zdXJlLWxpYnJhcnkvY2xvc3VyZS9nb29nL2Jvb3RzdHJhcC9ub2RlanMuanMi
LAotICAgICAgICAibm9kZV9sb2FkZXIuanMiLAotICAgICAgICAiZGVwcy5qcyIKLSAgICBdCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2pzL21lc3NhZ2UuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL21lc3NhZ2UuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDgxM2U2YjhjZDFkMmYwMmEwODNjODk4OTIyMTFmZTRiMTVkOTViMGEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9tZXNzYWdl
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IERlZmluaXRpb24gb2YganNw
Yi5NZXNzYWdlLgotICoKLSAqIEBhdXRob3IgbXdyQGdvb2dsZS5jb20gKE1hcmsgUmF3bGluZykK
LSAqLwotCi1nb29nLnByb3ZpZGUoJ2pzcGIuRXh0ZW5zaW9uRmllbGRJbmZvJyk7Ci1nb29nLnBy
b3ZpZGUoJ2pzcGIuTWVzc2FnZScpOwotCi1nb29nLnJlcXVpcmUoJ2dvb2cuYXJyYXknKTsKLWdv
b2cucmVxdWlyZSgnZ29vZy5hc3NlcnRzJyk7Ci1nb29nLnJlcXVpcmUoJ2dvb2cuY3J5cHQuYmFz
ZTY0Jyk7Ci1nb29nLnJlcXVpcmUoJ2dvb2cuanNvbicpOwotCi0vLyBOb3QgbmVlZGVkIGluIGNv
bXBpbGF0aW9uIHVuaXRzIHRoYXQgaGF2ZSBubyBwcm90b3Mgd2l0aCB4aWRzLgotZ29vZy5mb3J3
YXJkRGVjbGFyZSgneGlkLlN0cmluZycpOwotCi0KLQotLyoqCi0gKiBTdG9yZXMgaW5mb3JtYXRp
b24gZm9yIGEgc2luZ2xlIGV4dGVuc2lvbiBmaWVsZC4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgYW4g
ZXh0ZW5zaW9uIGZpZWxkIGRlZmluZWQgbGlrZSBzbzoKLSAqCi0gKiAgICAgZXh0ZW5kIEJhc2VN
ZXNzYWdlIHsKLSAqICAgICAgIG9wdGlvbmFsIE15TWVzc2FnZSBteV9maWVsZCA9IDEyMzsKLSAq
ICAgICB9Ci0gKgotICogd2lsbCByZXN1bHQgaW4gYW4gRXh0ZW5zaW9uRmllbGRJbmZvIG9iamVj
dCB3aXRoIHRoZXNlIHByb3BlcnRpZXM6Ci0gKgotICogICAgIHsKLSAqICAgICAgIGZpZWxkSW5k
ZXg6IDEyMywKLSAqICAgICAgIGZpZWxkTmFtZToge215X2ZpZWxkX3JlbmFtZWQ6IDB9LAotICog
ICAgICAgY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2UsCi0gKiAgICAgICB0b09iamVjdEZu
OiBwcm90by5leGFtcGxlLk15TWVzc2FnZS50b09iamVjdCwKLSAqICAgICAgIGlzUmVwZWF0ZWQ6
IDAKLSAqICAgICB9Ci0gKgotICogV2UgaW5jbHVkZSBgdG9PYmplY3RGbmAgdG8gYWxsb3cgdGhl
IEpTQ29tcGlsZXIgdG8gcGVyZm9ybSBkZWFkLWNvZGUgcmVtb3ZhbAotICogb24gdW51c2VkIHRv
T2JqZWN0KCkgbWV0aG9kcy4KLSAqCi0gKiBJZiBhbiBleHRlbnNpb24gZmllbGQgaXMgcHJpbWl0
aXZlLCBjdG9yIGFuZCB0b09iamVjdEZuIHdpbGwgYmUgbnVsbC4KLSAqIGlzUmVwZWF0ZWQgc2hv
dWxkIGJlIDAgb3IgMS4KLSAqCi0gKiBiaW5hcnl7UmVhZGVyLFdyaXRlcn1GbiBhbmQgKGlmIG1l
c3NhZ2UgdHlwZSkgYmluYXJ5TWVzc2FnZVNlcmlhbGl6ZUZuIGFyZQotICogYWx3YXlzIHByb3Zp
ZGVkLiBiaW5hcnlSZWFkZXJGbiBhbmQgYmluYXJ5V3JpdGVyRm4gYXJlIHJlZmVyZW5jZXMgdG8g
dGhlCi0gKiBhcHByb3ByaWF0ZSBtZXRob2RzIG9uIEJpbmFyeVJlYWRlci9CaW5hcnlXcml0ZXIg
dG8gcmVhZC93cml0ZSB0aGUgdmFsdWUgb2YKLSAqIHRoaXMgZXh0ZW5zaW9uLCBhbmQgYmluYXJ5
TWVzc2FnZVNlcmlhbGl6ZUZuIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlCi0gKiBjbGFz
cydzIC5zZXJpYWxpemVCaW5hcnkgbWV0aG9kLCBpZiBhdmFpbGFibGUuCi0gKgotICogQHBhcmFt
IHtudW1iZXJ9IGZpZWxkTnVtYmVyCi0gKiBAcGFyYW0ge09iamVjdH0gZmllbGROYW1lIFRoaXMg
aGFzIHRoZSBleHRlbnNpb24gZmllbGQgbmFtZSBhcyBhIHByb3BlcnR5LgotICogQHBhcmFtIHs/
ZnVuY3Rpb24obmV3OiBqc3BiLk1lc3NhZ2UsIEFycmF5PSl9IGN0b3IKLSAqIEBwYXJhbSB7P2Z1
bmN0aW9uKChib29sZWFufHVuZGVmaW5lZCksIWpzcGIuTWVzc2FnZSk6IU9iamVjdH0gdG9PYmpl
Y3RGbgotICogQHBhcmFtIHtudW1iZXJ9IGlzUmVwZWF0ZWQKLSAqIEBwYXJhbSB7P2Z1bmN0aW9u
KG51bWJlciw/KT19IG9wdF9iaW5hcnlSZWFkZXJGbgotICogQHBhcmFtIHs/ZnVuY3Rpb24obnVt
YmVyLD8pfGZ1bmN0aW9uKG51bWJlciw/LD8sPyw/LD8pPX0gb3B0X2JpbmFyeVdyaXRlckZuCi0g
KiBAcGFyYW0gez9mdW5jdGlvbig/LD8pPX0gb3B0X2JpbmFyeU1lc3NhZ2VTZXJpYWxpemVGbgot
ICogQHBhcmFtIHs/ZnVuY3Rpb24oPyw/KT19IG9wdF9iaW5hcnlNZXNzYWdlRGVzZXJpYWxpemVG
bgotICogQHBhcmFtIHs/Ym9vbGVhbj19IG9wdF9pc1BhY2tlZAotICogQGNvbnN0cnVjdG9yCi0g
KiBAc3RydWN0Ci0gKiBAdGVtcGxhdGUgVAotICovCi1qc3BiLkV4dGVuc2lvbkZpZWxkSW5mbyA9
IGZ1bmN0aW9uKGZpZWxkTnVtYmVyLCBmaWVsZE5hbWUsIGN0b3IsIHRvT2JqZWN0Rm4sCi0gICAg
aXNSZXBlYXRlZCwgb3B0X2JpbmFyeVJlYWRlckZuLCBvcHRfYmluYXJ5V3JpdGVyRm4sCi0gICAg
b3B0X2JpbmFyeU1lc3NhZ2VTZXJpYWxpemVGbiwgb3B0X2JpbmFyeU1lc3NhZ2VEZXNlcmlhbGl6
ZUZuLAotICAgIG9wdF9pc1BhY2tlZCkgewotICAvKiogQGNvbnN0ICovCi0gIHRoaXMuZmllbGRJ
bmRleCA9IGZpZWxkTnVtYmVyOwotICAvKiogQGNvbnN0ICovCi0gIHRoaXMuZmllbGROYW1lID0g
ZmllbGROYW1lOwotICAvKiogQGNvbnN0ICovCi0gIHRoaXMuY3RvciA9IGN0b3I7Ci0gIC8qKiBA
Y29uc3QgKi8KLSAgdGhpcy50b09iamVjdEZuID0gdG9PYmplY3RGbjsKLSAgLyoqIEBjb25zdCAq
LwotICB0aGlzLmJpbmFyeVJlYWRlckZuID0gb3B0X2JpbmFyeVJlYWRlckZuOwotICAvKiogQGNv
bnN0ICovCi0gIHRoaXMuYmluYXJ5V3JpdGVyRm4gPSBvcHRfYmluYXJ5V3JpdGVyRm47Ci0gIC8q
KiBAY29uc3QgKi8KLSAgdGhpcy5iaW5hcnlNZXNzYWdlU2VyaWFsaXplRm4gPSBvcHRfYmluYXJ5
TWVzc2FnZVNlcmlhbGl6ZUZuOwotICAvKiogQGNvbnN0ICovCi0gIHRoaXMuYmluYXJ5TWVzc2Fn
ZURlc2VyaWFsaXplRm4gPSBvcHRfYmluYXJ5TWVzc2FnZURlc2VyaWFsaXplRm47Ci0gIC8qKiBA
Y29uc3QgKi8KLSAgdGhpcy5pc1JlcGVhdGVkID0gaXNSZXBlYXRlZDsKLSAgLyoqIEBjb25zdCAq
LwotICB0aGlzLmlzUGFja2VkID0gb3B0X2lzUGFja2VkOwotfTsKLQotCi0vKioKLSAqIEByZXR1
cm4ge2Jvb2xlYW59IERvZXMgdGhpcyBmaWVsZCByZXByZXNlbnQgYSBzdWIgTWVzc2FnZT8KLSAq
LwotanNwYi5FeHRlbnNpb25GaWVsZEluZm8ucHJvdG90eXBlLmlzTWVzc2FnZVR5cGUgPSBmdW5j
dGlvbigpIHsKLSAgcmV0dXJuICEhdGhpcy5jdG9yOwotfTsKLQotCi0vKioKLSAqIEJhc2UgY2xh
c3MgZm9yIGFsbCBKc1BiIG1lc3NhZ2VzLgotICogQGNvbnN0cnVjdG9yCi0gKiBAc3RydWN0Ci0g
Ki8KLWpzcGIuTWVzc2FnZSA9IGZ1bmN0aW9uKCkgewotfTsKLQotCi0vKioKLSAqIEBkZWZpbmUg
e2Jvb2xlYW59IFdoZXRoZXIgdG8gZ2VuZXJhdGUgdG9PYmplY3QgbWV0aG9kcyBmb3Igb2JqZWN0
cy4gVHVybgotICogICAgIHRoaXMgb2ZmLCBpZiB5b3UgZG8gbm90IHdhbnQgdG9PYmplY3QgdG8g
YmUgZXZlciB1c2VkIGluIHlvdXIgcHJvamVjdC4KLSAqICAgICBXaGVuIHR1cm5pbmcgb2ZmIHRo
aXMgZmxhZywgY29uc2lkZXIgYWRkaW5nIGEgY29uZm9ybWFuY2UgdGVzdCB0aGF0IGJhbnMKLSAq
ICAgICBjYWxsaW5nIHRvT2JqZWN0LiBFbmFibGluZyB0aGlzIHdpbGwgZGlzYWJsZSB0aGUgSlND
b21waWxlcidzIGFiaWxpdHkgdG8KLSAqICAgICBkZWFkIGNvZGUgZWxpbWluYXRlIGZpZWxkcyB1
c2VkIGluIHByb3RvY29sIGJ1ZmZlcnMgdGhhdCBhcmUgbmV2ZXIgdXNlZAotICogICAgIGluIGFu
IGFwcGxpY2F0aW9uLgotICovCi1nb29nLmRlZmluZSgnanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RP
X09CSkVDVCcsIHRydWUpOwotCi0KLS8qKgotICogQGRlZmluZSB7Ym9vbGVhbn0gV2hldGhlciB0
byBnZW5lcmF0ZSBmcm9tT2JqZWN0IG1ldGhvZHMgZm9yIG9iamVjdHMuIFR1cm4KLSAqICAgICB0
aGlzIG9mZiwgaWYgeW91IGRvIG5vdCB3YW50IGZyb21PYmplY3QgdG8gYmUgZXZlciB1c2VkIGlu
IHlvdXIgcHJvamVjdC4KLSAqICAgICBXaGVuIHR1cm5pbmcgb2ZmIHRoaXMgZmxhZywgY29uc2lk
ZXIgYWRkaW5nIGEgY29uZm9ybWFuY2UgdGVzdCB0aGF0IGJhbnMKLSAqICAgICBjYWxsaW5nIGZy
b21PYmplY3QuIEVuYWJsaW5nIHRoaXMgbWlnaHQgZGlzYWJsZSB0aGUgSlNDb21waWxlcidzIGFi
aWxpdHkKLSAqICAgICB0byBkZWFkIGNvZGUgZWxpbWluYXRlIGZpZWxkcyB1c2VkIGluIHByb3Rv
Y29sIGJ1ZmZlcnMgdGhhdCBhcmUgbmV2ZXIKLSAqICAgICB1c2VkIGluIGFuIGFwcGxpY2F0aW9u
LgotICogICAgIE5PVEU6IEJ5IGRlZmF1bHQgbm8gcHJvdG9zIGFjdHVhbGx5IGhhdmUgYSBmcm9t
T2JqZWN0IG1ldGhvZC4gWW91IG5lZWQgdG8KLSAqICAgICBhZGQgdGhlIGpzcGIuZ2VuZXJhdGVf
ZnJvbV9vYmplY3Qgb3B0aW9ucyB0byB0aGUgcHJvdG8gZGVmaW5pdGlvbiB0bwotICogICAgIGFj
dGl2YXRlIHRoZSBmZWF0dXJlLgotICogICAgIEJ5IGRlZmF1bHQgdGhpcyBpcyBlbmFibGVkIGZv
ciB0ZXN0IGNvZGUgb25seS4KLSAqLwotZ29vZy5kZWZpbmUoJ2pzcGIuTWVzc2FnZS5HRU5FUkFU
RV9GUk9NX09CSkVDVCcsICFnb29nLkRJU0FMTE9XX1RFU1RfT05MWV9DT0RFKTsKLQotCi0vKioK
LSAqIEBkZWZpbmUge2Jvb2xlYW59IFR1cm5pbmcgb24gdGhpcyBmbGFnIGRvZXMgTk9UIGNoYW5n
ZSB0aGUgYmVoYXZpb3Igb2YgSlNQQgotICogICAgIGFuZCBvbmx5IGFmZmVjdHMgcHJpdmF0ZSBp
bnRlcm5hbCBzdGF0ZS4gSXQgbWF5LCBob3dldmVyLCBicmVhayBzb21lCi0gKiAgICAgdGVzdHMg
dGhhdCB1c2UgbmFpdmUgZGVlcGx5LWVxdWFscyBhbGdvcml0aG1zLCBiZWNhdXNlIHVzaW5nIGEg
cHJvdG8KLSAqICAgICBtdXRhdGVzIGl0cyBpbnRlcm5hbCBzdGF0ZS4KLSAqICAgICBQcm9qZWN0
cyBhcmUgYWR2aXNlZCB0byB0dXJuIHRoaXMgZmxhZyBhbHdheXMgb24uCi0gKi8KLWdvb2cuZGVm
aW5lKCdqc3BiLk1lc3NhZ2UuTUlOSU1JWkVfTUVNT1JZX0FMTE9DQVRJT05TJywgQ09NUElMRUQp
OwotLy8gVE9ETyhiLzE5NDE5NDM2KSBUdXJuIHRoaXMgb24gYnkgZGVmYXVsdC4KLQotCi0vKioK
LSAqIERvZXMgdGhpcyBicm93c2VyIHN1cHBvcnQgVWludDhBcmF5IHR5cGVkIGFycmF5cz8KLSAq
IEB0eXBlIHtib29sZWFufQotICogQHByaXZhdGUKLSAqLwotanNwYi5NZXNzYWdlLlNVUFBPUlRT
X1VJTlQ4QVJSQVlfID0gKHR5cGVvZiBVaW50OEFycmF5ID09ICdmdW5jdGlvbicpOwotCi0KLS8q
KgotICogVGhlIGludGVybmFsIGRhdGEgYXJyYXkuCi0gKiBAdHlwZSB7IUFycmF5fQotICogQHBy
b3RlY3RlZAotICovCi1qc3BiLk1lc3NhZ2UucHJvdG90eXBlLmFycmF5OwotCi0KLS8qKgotICog
V3JhcHBlcnMgYXJlIHRoZSBjb25zdHJ1Y3RlZCBpbnN0YW5jZXMgb2YgbWVzc2FnZS10eXBlIGZp
ZWxkcy4gVGhleSBhcmUgYnVpbHQKLSAqIG9uIGRlbWFuZCBmcm9tIHRoZSByYXcgYXJyYXkgZGF0
YS4gSW5jbHVkZXMgbWVzc2FnZSBmaWVsZHMsIHJlcGVhdGVkIG1lc3NhZ2UKLSAqIGZpZWxkcyBh
bmQgZXh0ZW5zaW9uIG1lc3NhZ2UgZmllbGRzLiBJbmRleGVkIGJ5IGZpZWxkIG51bWJlci4KLSAq
IEB0eXBlIHtPYmplY3R9Ci0gKiBAcHJpdmF0ZQotICovCi1qc3BiLk1lc3NhZ2UucHJvdG90eXBl
LndyYXBwZXJzXzsKLQotCi0vKioKLSAqIFRoZSBvYmplY3QgdGhhdCBjb250YWlucyBleHRlbnNp
b24gZmllbGRzLCBpZiBhbnkuIFRoaXMgaXMgYW4gb2JqZWN0IHRoYXQKLSAqIG1hcHMgZnJvbSBh
IHByb3RvIGZpZWxkIG51bWJlciB0byB0aGUgZmllbGQncyB2YWx1ZS4KLSAqIEB0eXBlIHtPYmpl
Y3R9Ci0gKiBAcHJpdmF0ZQotICovCi1qc3BiLk1lc3NhZ2UucHJvdG90eXBlLmV4dGVuc2lvbk9i
amVjdF87Ci0KLQotLyoqCi0gKiBOb24tZXh0ZW5zaW9uIGZpZWxkcyB3aXRoIGEgZmllbGQgbnVt
YmVyIGF0IG9yIGFib3ZlIHRoZSBwaXZvdCBhcmUKLSAqIHN0b3JlZCBpbiB0aGUgZXh0ZW5zaW9u
IG9iamVjdCAoaW4gYWRkaXRpb24gdG8gYWxsIGV4dGVuc2lvbiBmaWVsZHMpLgotICogQHR5cGUg
e251bWJlcn0KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuTWVzc2FnZS5wcm90b3R5cGUucGl2b3Rf
OwotCi0KLS8qKgotICogVGhlIEpzUGIgbWVzc2FnZV9pZCBvZiB0aGlzIHByb3RvLgotICogQHR5
cGUge3N0cmluZ3x1bmRlZmluZWR9IHRoZSBtZXNzYWdlIGlkIG9yIHVuZGVmaW5lZCBpZiB0aGlz
IG1lc3NhZ2UKLSAqICAgICBoYXMgbm8gaWQuCi0gKiBAcHJpdmF0ZQotICovCi1qc3BiLk1lc3Nh
Z2UucHJvdG90eXBlLm1lc3NhZ2VJZF87Ci0KLQotLyoqCi0gKiBSZXBlYXRlZCBmbG9hdCBvciBk
b3VibGUgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gaW5jbHVkZSBvbmx5Ci0g
KiBudW1iZXJzIGFuZCBub3Qgc3RyaW5ncyBob2xkaW5nICJOYU4iLCAiSW5maW5pdHkiIGFuZCAi
LUluZmluaXR5Ii4KLSAqIEBwcml2YXRlIHshT2JqZWN0PG51bWJlcixib29sZWFuPnx1bmRlZmlu
ZWR9Ci0gKi8KLWpzcGIuTWVzc2FnZS5wcm90b3R5cGUuY29udmVydGVkRmxvYXRpbmdQb2ludEZp
ZWxkc187Ci0KLQotLyoqCi0gKiBUaGUgeGlkIG9mIHRoaXMgcHJvdG8gdHlwZSAoVGhlIHNhbWUg
Zm9yIGFsbCBpbnN0YW5jZXMgb2YgYSBwcm90bykuIFByb3ZpZGVzCi0gKiBhIHdheSB0byBpZGVu
dGlmeSBhIHByb3RvIGJ5IHN0YWJsZSBvYmZ1c2NhdGVkIG5hbWUuCi0gKiBAc2VlIHt4aWR9Lgot
ICogQXZhaWxhYmxlIGlmIHtAbGluayBqc3BiLmdlbmVyYXRlX3hpZH0gaXMgYWRkZWQgYXMgYSBN
ZXNzYWdlIG9wdGlvbiB0bwotICogYSBwcm90b2NvbCBidWZmZXIuCi0gKiBAY29uc3QgeyF4aWQu
U3RyaW5nfHVuZGVmaW5lZH0gVGhlIHhpZCBvciB1bmRlZmluZWQgaWYgbWVzc2FnZSBpcwotICog
ICAgIGFubm90YXRlZCB0byBnZW5lcmF0ZSB0aGUgeGlkLgotICovCi1qc3BiLk1lc3NhZ2UucHJv
dG90eXBlLm1lc3NhZ2VYaWQ7Ci0KLQotCi0vKioKLSAqIFJldHVybnMgdGhlIEpzUGIgbWVzc2Fn
ZV9pZCBvZiB0aGlzIHByb3RvLgotICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH0gdGhlIG1l
c3NhZ2UgaWQgb3IgdW5kZWZpbmVkIGlmIHRoaXMgbWVzc2FnZQotICogICAgIGhhcyBubyBpZC4K
LSAqLwotanNwYi5NZXNzYWdlLnByb3RvdHlwZS5nZXRKc1BiTWVzc2FnZUlkID0gZnVuY3Rpb24o
KSB7Ci0gIHJldHVybiB0aGlzLm1lc3NhZ2VJZF87Ci19OwotCi0KLS8qKgotICogQW4gb2Zmc2V0
IGFwcGxpZWQgdG8gbG9va3VwcyBpbnRvIHRoaXMuYXJyYXkgdG8gYWNjb3VudCBmb3IgdGhlIHBy
ZXNlbmNlIG9yCi0gKiBhYnNlbmNlIG9mIGEgbWVzc2FnZUlkIGF0IHBvc2l0aW9uIDAuIEZvciBy
ZXNwb25zZSBtZXNzYWdlcywgdGhpcyB3aWxsIGJlIDAuCi0gKiBPdGhlcndpc2UsIGl0IHdpbGwg
YmUgLTEgc28gdGhhdCB0aGUgZmlyc3QgYXJyYXkgcG9zaXRpb24gaXMgbm90IHdhc3RlZC4KLSAq
IEB0eXBlIHtudW1iZXJ9Ci0gKiBAcHJpdmF0ZQotICovCi1qc3BiLk1lc3NhZ2UucHJvdG90eXBl
LmFycmF5SW5kZXhPZmZzZXRfOwotCi0KLS8qKgotICogUmV0dXJucyB0aGUgaW5kZXggaW50byBt
c2cuYXJyYXkgYXQgd2hpY2ggdGhlIHByb3RvIGZpZWxkIHdpdGggdGFnIG51bWJlcgotICogZmll
bGROdW1iZXIgd2lsbCBiZSBsb2NhdGVkLgotICogQHBhcmFtIHshanNwYi5NZXNzYWdlfSBtc2cg
TWVzc2FnZSBmb3Igd2hpY2ggd2UncmUgY2FsY3VsYXRpbmcgYW4gaW5kZXguCi0gKiBAcGFyYW0g
e251bWJlcn0gZmllbGROdW1iZXIgVGhlIGZpZWxkIG51bWJlci4KLSAqIEByZXR1cm4ge251bWJl
cn0gVGhlIGluZGV4LgotICogQHByaXZhdGUKLSAqLwotanNwYi5NZXNzYWdlLmdldEluZGV4XyA9
IGZ1bmN0aW9uKG1zZywgZmllbGROdW1iZXIpIHsKLSAgcmV0dXJuIGZpZWxkTnVtYmVyICsgbXNn
LmFycmF5SW5kZXhPZmZzZXRfOwotfTsKLQotCi0vKioKLSAqIEluaXRpYWxpemVzIGEgSnNQYiBN
ZXNzYWdlLgotICogQHBhcmFtIHshanNwYi5NZXNzYWdlfSBtc2cgVGhlIEpzUGIgcHJvdG8gdG8g
bW9kaWZ5LgotICogQHBhcmFtIHtBcnJheXx1bmRlZmluZWR9IGRhdGEgQW4gaW5pdGlhbCBkYXRh
IGFycmF5LgotICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBtZXNzYWdlSWQgRm9yIHJlc3BvbnNl
IG1lc3NhZ2VzLCB0aGUgbWVzc2FnZSBpZCBvciAnJwotICogICAgIGlmIG5vIG1lc3NhZ2UgaWQg
aXMgc3BlY2lmaWVkLiBGb3Igbm9uLXJlc3BvbnNlIG1lc3NhZ2VzLCAwLgotICogQHBhcmFtIHtu
dW1iZXJ9IHN1Z2dlc3RlZFBpdm90IFRoZSBmaWVsZCBudW1iZXIgYXQgd2hpY2ggdG8gc3RhcnQg
cHV0dGluZwotICogICAgIGZpZWxkcyBpbnRvIHRoZSBleHRlbnNpb24gb2JqZWN0LiBUaGlzIGlz
IG9ubHkgdXNlZCBpZiBkYXRhIGRvZXMgbm90Ci0gKiAgICAgY29udGFpbiBhbiBleHRlbnNpb24g
b2JqZWN0IGFscmVhZHkuIC0xIGlmIG5vIGV4dGVuc2lvbiBvYmplY3QgaXMKLSAqICAgICByZXF1
aXJlZCBmb3IgdGhpcyBtZXNzYWdlIHR5cGUuCi0gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHJl
cGVhdGVkRmllbGRzIFRoZSBtZXNzYWdlJ3MgcmVwZWF0ZWQgZmllbGRzLgotICogQHBhcmFtIHtB
cnJheTwhQXJyYXk8bnVtYmVyPj49fSBvcHRfb25lb2ZGaWVsZHMgVGhlIGZpZWxkcyBiZWxvbmdp
bmcgdG8KLSAqICAgICBlYWNoIG9mIHRoZSBtZXNzYWdlJ3Mgb25lb2YgdW5pb25zLgotICogQHBy
b3RlY3RlZAotICovCi1qc3BiLk1lc3NhZ2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKAotICAgIG1z
ZywgZGF0YSwgbWVzc2FnZUlkLCBzdWdnZXN0ZWRQaXZvdCwgcmVwZWF0ZWRGaWVsZHMsIG9wdF9v
bmVvZkZpZWxkcykgewotICBtc2cud3JhcHBlcnNfID0ganNwYi5NZXNzYWdlLk1JTklNSVpFX01F
TU9SWV9BTExPQ0FUSU9OUyA/IG51bGwgOiB7fTsKLSAgaWYgKCFkYXRhKSB7Ci0gICAgZGF0YSA9
IG1lc3NhZ2VJZCA/IFttZXNzYWdlSWRdIDogW107Ci0gIH0KLSAgbXNnLm1lc3NhZ2VJZF8gPSBt
ZXNzYWdlSWQgPyBTdHJpbmcobWVzc2FnZUlkKSA6IHVuZGVmaW5lZDsKLSAgLy8gSWYgdGhlIG1l
c3NhZ2VJZCBpcyAwLCB0aGlzIG1lc3NhZ2UgaXMgbm90IGEgcmVzcG9uc2UgbWVzc2FnZSwgc28g
d2Ugc2hpZnQKLSAgLy8gYXJyYXkgaW5kaWNlcyBkb3duIGJ5IDEgc28gYXMgbm90IHRvIHdhc3Rl
IHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgYXJyYXksCi0gIC8vIHdoaWNoIHdvdWxkIG90aGVy
d2lzZSBnbyB1bnVzZWQuCi0gIG1zZy5hcnJheUluZGV4T2Zmc2V0XyA9IG1lc3NhZ2VJZCA9PT0g
MCA/IC0xIDogMDsKLSAgbXNnLmFycmF5ID0gZGF0YTsKLSAganNwYi5NZXNzYWdlLm1hdGVyaWFs
aXplRXh0ZW5zaW9uT2JqZWN0Xyhtc2csIHN1Z2dlc3RlZFBpdm90KTsKLSAgbXNnLmNvbnZlcnRl
ZEZsb2F0aW5nUG9pbnRGaWVsZHNfID0ge307Ci0KLSAgaWYgKHJlcGVhdGVkRmllbGRzKSB7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBlYXRlZEZpZWxkcy5sZW5ndGg7IGkrKykgewotICAg
ICAgdmFyIGZpZWxkTnVtYmVyID0gcmVwZWF0ZWRGaWVsZHNbaV07Ci0gICAgICBpZiAoZmllbGRO
dW1iZXIgPCBtc2cucGl2b3RfKSB7Ci0gICAgICAgIHZhciBpbmRleCA9IGpzcGIuTWVzc2FnZS5n
ZXRJbmRleF8obXNnLCBmaWVsZE51bWJlcik7Ci0gICAgICAgIG1zZy5hcnJheVtpbmRleF0gPSBt
c2cuYXJyYXlbaW5kZXhdIHx8Ci0gICAgICAgICAgICAoanNwYi5NZXNzYWdlLk1JTklNSVpFX01F
TU9SWV9BTExPQ0FUSU9OUyA/Ci0gICAgICAgICAgICAgICAganNwYi5NZXNzYWdlLkVNUFRZX0xJ
U1RfU0VOVElORUxfIDoKLSAgICAgICAgICAgICAgICBbXSk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBtc2cuZXh0ZW5zaW9uT2JqZWN0X1tmaWVsZE51bWJlcl0gPQotICAgICAgICAgICAgbXNn
LmV4dGVuc2lvbk9iamVjdF9bZmllbGROdW1iZXJdIHx8Ci0gICAgICAgICAgICAoanNwYi5NZXNz
YWdlLk1JTklNSVpFX01FTU9SWV9BTExPQ0FUSU9OUyA/Ci0gICAgICAgICAgICAgICAganNwYi5N
ZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfIDoKLSAgICAgICAgICAgICAgICBbXSk7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKG9wdF9vbmVvZkZpZWxkcyAmJiBvcHRfb25lb2ZGaWVs
ZHMubGVuZ3RoKSB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgb25lb2YgY2FzZSBmb3IgZWFjaCB1bmlv
bi4gVGhpcyBlbnN1cmVzIG9ubHkgb25lIHZhbHVlIGlzCi0gICAgLy8gc2V0IGluIHRoZSB1bmlv
bi4KLSAgICBnb29nLmFycmF5LmZvckVhY2goCi0gICAgICAgIG9wdF9vbmVvZkZpZWxkcywgZ29v
Zy5wYXJ0aWFsKGpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlLCBtc2cpKTsKLSAgfQotfTsK
LQotCi0vKioKLSAqIFVzZWQgdG8gbWFyayBlbXB0eSByZXBlYXRlZCBmaWVsZHMuIFNlcmlhbGl6
ZXMgdG8gbnVsbCB3aGVuIHNlcmlhbGl6ZWQKLSAqIHRvIEpTT04uCi0gKiBXaGVuIHJlYWRpbmcg
YSByZXBlYXRlZCBmaWVsZCByZWFkZXJzIG11c3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBhZ2Fp
bnN0Ci0gKiB0aGlzIHZhbHVlIGFuZCByZXR1cm4gYW5kIHJlcGxhY2UgaXQgd2l0aCBhIG5ldyBl
bXB0eSBhcnJheSBpZiBpdCBpcwotICogcHJlc2VudC4KLSAqIEBwcml2YXRlIEBjb25zdCB7IU9i
amVjdH0KLSAqLwotanNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfID0gZ29vZy5ERUJV
RyAmJiBPYmplY3QuZnJlZXplID8KLSAgICBPYmplY3QuZnJlZXplKFtdKSA6Ci0gICAgW107Ci0K
LQotLyoqCi0gKiBFbnN1cmVzIHRoYXQgdGhlIGFycmF5IGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBv
YmplY3QgaWYgbmVjZXNzYXJ5LgotICogSWYgdGhlIGFycmF5IGNvbnRhaW5zIGFuIGV4dGVuc2lv
biBvYmplY3QgaW4gaXRzIGxhc3QgcG9zaXRpb24sIHRoZW4gdGhlCi0gKiBvYmplY3QgaXMga2Vw
dCBpbiBwbGFjZSBhbmQgaXRzIHBvc2l0aW9uIGlzIHVzZWQgYXMgdGhlIHBpdm90LiAgSWYgbm90
LCB0aGVuCi0gKiBjcmVhdGUgYW4gZXh0ZW5zaW9uIG9iamVjdCB1c2luZyBzdWdnZXN0ZWRQaXZv
dC4gIElmIHN1Z2dlc3RlZFBpdm90IGlzIC0xLAotICogd2UgZG9uJ3QgaGF2ZSBhbiBleHRlbnNp
b24gb2JqZWN0IGF0IGFsbCwgaW4gd2hpY2ggY2FzZSBhbGwgZmllbGRzIGFyZSBzdG9yZWQKLSAq
IGluIHRoZSBhcnJheS4KLSAqIEBwYXJhbSB7IWpzcGIuTWVzc2FnZX0gbXNnIFRoZSBKc1BiIHBy
b3RvIHRvIG1vZGlmeS4KLSAqIEBwYXJhbSB7bnVtYmVyfSBzdWdnZXN0ZWRQaXZvdCBTZWUgZGVz
Y3JpcHRpb24gZm9yIGluaXRpYWxpemUoKS4KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuTWVzc2Fn
ZS5tYXRlcmlhbGl6ZUV4dGVuc2lvbk9iamVjdF8gPSBmdW5jdGlvbihtc2csIHN1Z2dlc3RlZFBp
dm90KSB7Ci0gIGlmIChtc2cuYXJyYXkubGVuZ3RoKSB7Ci0gICAgdmFyIGZvdW5kSW5kZXggPSBt
c2cuYXJyYXkubGVuZ3RoIC0gMTsKLSAgICB2YXIgb2JqID0gbXNnLmFycmF5W2ZvdW5kSW5kZXhd
OwotICAgIC8vIE5vcm1hbCBmaWVsZHMgYXJlIG5ldmVyIG9iamVjdHMsIHNvIHdlIGNhbiBiZSBz
dXJlIHRoYXQgaWYgd2UgZmluZCBhbgotICAgIC8vIG9iamVjdCBoZXJlLCB0aGVuIGl0J3MgdGhl
IGV4dGVuc2lvbiBvYmplY3QuIEhvd2V2ZXIsIHdlIG11c3QgZW5zdXJlIHRoYXQKLSAgICAvLyB0
aGUgb2JqZWN0IGlzIG5vdCBhbiBhcnJheSwgc2luY2UgYXJyYXlzIGFyZSB2YWxpZCBmaWVsZCB2
YWx1ZXMuCi0gICAgLy8gTk9URShsdWtlc3RlYmJpbmcpOiBXZSBhdm9pZCBsb29raW5nIGF0IC5s
ZW5ndGggdG8gYXZvaWQgYSBKSVQgYnVnCi0gICAgLy8gaW4gU2FmYXJpIG9uIGlPUyA4LiBTZWUg
dGhlIGRlc2NyaXB0aW9uIG9mIENMLzg2NTExNDY0IGZvciBkZXRhaWxzLgotICAgIGlmIChvYmog
JiYgdHlwZW9mIG9iaiA9PSAnb2JqZWN0JyAmJiAhZ29vZy5pc0FycmF5KG9iaikpIHsKLSAgICAg
IG1zZy5waXZvdF8gPSBmb3VuZEluZGV4IC0gbXNnLmFycmF5SW5kZXhPZmZzZXRfOwotICAgICAg
bXNnLmV4dGVuc2lvbk9iamVjdF8gPSBvYmo7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0g
IC8vIFRoaXMgY29tcGxleGl0eSBleGlzdHMgYmVjYXVzZSB3ZSBrZWVwIGFsbCBleHRlbnNpb24g
ZmllbGRzIGluIHRoZQotICAvLyBleHRlbnNpb25PYmplY3RfIHJlZ2FyZGxlc3Mgb2YgcHJvdG8g
ZmllbGQgbnVtYmVyLiBDaGFuZ2luZyB0aGlzIHdvdWxkCi0gIC8vIHNpbXBsaWZ5IHRoZSBjb2Rl
IGhlcmUsIGJ1dCBpdCB3b3VsZCByZXF1aXJlIGNoYW5naW5nIHRoZSBzZXJpYWxpemF0aW9uCi0g
IC8vIGZvcm1hdCBmcm9tIHRoZSBzZXJ2ZXIsIHdoaWNoIGlzIG5vdCBiYWNrd2FyZHMgY29tcGF0
aWJsZS4KLSAgLy8gVE9ETyhqc2huZWllcik6IFNob3VsZCB3ZSBqdXN0IHRyZWF0IGV4dGVuc2lv
biBmaWVsZHMgdGhlIHNhbWUgYXMKLSAgLy8gbm9uLWV4dGVuc2lvbiBmaWVsZHMsIGFuZCBzZWxl
Y3Qgd2hldGhlciB0aGV5IGFwcGVhciBpbiB0aGUgb2JqZWN0IG9yIGluCi0gIC8vIHRoZSBhcnJh
eSBwdXJlbHkgYmFzZWQgb24gdGFnIG51bWJlcj8gVGhpcyB3b3VsZCBhbGxvdyBzaW1wbGlmeWlu
ZyBhbGwgdGhlCi0gIC8vIGdldC9zZXRFeHRlbnNpb24gbG9naWMsIGJ1dCBpdCB3b3VsZCByZXF1
aXJlIHRoZSBicmVha2luZyBjaGFuZ2UgZGVzY3JpYmVkCi0gIC8vIGFib3ZlLgotICBpZiAoc3Vn
Z2VzdGVkUGl2b3QgPiAtMSkgewotICAgIG1zZy5waXZvdF8gPSBzdWdnZXN0ZWRQaXZvdDsKLSAg
ICB2YXIgcGl2b3RJbmRleCA9IGpzcGIuTWVzc2FnZS5nZXRJbmRleF8obXNnLCBzdWdnZXN0ZWRQ
aXZvdCk7Ci0gICAgaWYgKCFqc3BiLk1lc3NhZ2UuTUlOSU1JWkVfTUVNT1JZX0FMTE9DQVRJT05T
KSB7Ci0gICAgICBtc2cuZXh0ZW5zaW9uT2JqZWN0XyA9IG1zZy5hcnJheVtwaXZvdEluZGV4XSA9
IHt9OwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBJbml0aWFsaXplIHRvIG51bGwgdG8gYXZvaWQg
Y2hhbmdpbmcgdGhlIHNoYXBlIG9mIHRoZSBwcm90byB3aGVuIGl0Ci0gICAgICAvLyBnZXRzIGV2
ZW50dWFsbHkgc2V0LgotICAgICAgbXNnLmV4dGVuc2lvbk9iamVjdF8gPSBudWxsOwotICAgIH0K
LSAgfSBlbHNlIHsKLSAgICBtc2cucGl2b3RfID0gTnVtYmVyLk1BWF9WQUxVRTsKLSAgfQotfTsK
LQotCi0vKioKLSAqIENyZWF0ZXMgYW4gZW1wdHkgZXh0ZW5zaW9uT2JqZWN0XyBpZiBub24gZXhp
c3RzLgotICogQHBhcmFtIHshanNwYi5NZXNzYWdlfSBtc2cgVGhlIEpzUGIgcHJvdG8gdG8gbW9k
aWZ5LgotICogQHByaXZhdGUKLSAqLwotanNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5z
aW9uT2JqZWN0XyA9IGZ1bmN0aW9uKG1zZykgewotICB2YXIgcGl2b3RJbmRleCA9IGpzcGIuTWVz
c2FnZS5nZXRJbmRleF8obXNnLCBtc2cucGl2b3RfKTsKLSAgaWYgKCFtc2cuYXJyYXlbcGl2b3RJ
bmRleF0pIHsKLSAgICBtc2cuZXh0ZW5zaW9uT2JqZWN0XyA9IG1zZy5hcnJheVtwaXZvdEluZGV4
XSA9IHt9OwotICB9Ci19OwotCi0KLS8qKgotICogQ29udmVydHMgYSBKc1BiIHJlcGVhdGVkIG1l
c3NhZ2UgZmllbGQgaW50byBhbiBvYmplY3QgbGlzdC4KLSAqIEBwYXJhbSB7IUFycmF5PFQ+fSBm
aWVsZCBUaGUgcmVwZWF0ZWQgbWVzc2FnZSBmaWVsZCB0byBiZQotICogICAgIGNvbnZlcnRlZC4K
LSAqIEBwYXJhbSB7P2Z1bmN0aW9uKGJvb2xlYW49KTogT2JqZWN0fAotICogICAgIGZ1bmN0aW9u
KChib29sZWFufHVuZGVmaW5lZCksVCk6IE9iamVjdH0gdG9PYmplY3RGbiBUaGUgdG9PYmplY3QK
LSAqICAgICBmdW5jdGlvbiBmb3IgdGhpcyBmaWVsZC4gIFdlIG5lZWQgdG8gcGFzcyB0aGlzIGZv
ciBlZmZlY3RpdmUgZGVhZCBjb2RlCi0gKiAgICAgcmVtb3ZhbC4KLSAqIEBwYXJhbSB7Ym9vbGVh
bj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgV2hldGhlciB0byBpbmNsdWRlIHRoZSBKU1BCIGluc3Rh
bmNlCi0gKiAgICAgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDogaHR0cDovL2dv
dG8vc295LXBhcmFtLW1pZ3JhdGlvbgotICogQHJldHVybiB7IUFycmF5PE9iamVjdD59IEFuIGFy
cmF5IG9mIGNvbnZlcnRlZCBtZXNzYWdlIG9iamVjdHMuCi0gKiBAdGVtcGxhdGUgVAotICovCi1q
c3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0ID0gZnVuY3Rpb24oZmllbGQsIHRvT2JqZWN0Rm4sIG9w
dF9pbmNsdWRlSW5zdGFuY2UpIHsKLSAgLy8gTm90IHVzaW5nIGdvb2cuYXJyYXkubWFwIGluIHRo
ZSBnZW5lcmF0ZWQgY29kZSB0byBrZWVwIGl0IHNtYWxsLgotICAvLyBBbmQgbm90IHVzaW5nIGl0
IGhlcmUgdG8gYXZvaWQgYSBmdW5jdGlvbiBjYWxsLgotICB2YXIgcmVzdWx0ID0gW107Ci0gIGZv
ciAodmFyIGkgPSAwOyBpIDwgZmllbGQubGVuZ3RoOyBpKyspIHsKLSAgICByZXN1bHRbaV0gPSB0
b09iamVjdEZuLmNhbGwoZmllbGRbaV0sIG9wdF9pbmNsdWRlSW5zdGFuY2UsCi0gICAgICAvKiog
QHR5cGUgeyFqc3BiLk1lc3NhZ2V9ICovIChmaWVsZFtpXSkpOwotICB9Ci0gIHJldHVybiByZXN1
bHQ7Ci19OwotCi0KLS8qKgotICogQWRkcyBhIHByb3RvJ3MgZXh0ZW5zaW9uIGRhdGEgdG8gYSBT
b3kgcmVuZGVyaW5nIG9iamVjdC4KLSAqIEBwYXJhbSB7IWpzcGIuTWVzc2FnZX0gcHJvdG8gVGhl
IHByb3RvIHdob3NlIGV4dGVuc2lvbnMgdG8gY29udmVydC4KLSAqIEBwYXJhbSB7IU9iamVjdH0g
b2JqIFRoZSBTb3kgb2JqZWN0IHRvIGFkZCBjb252ZXJ0ZWQgZXh0ZW5zaW9uIGRhdGEgdG8uCi0g
KiBAcGFyYW0geyFPYmplY3R9IGV4dGVuc2lvbnMgVGhlIHByb3RvIGNsYXNzJyByZWdpc3RlcmVk
IGV4dGVuc2lvbnMuCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKHRoaXM6PywganNwYi5FeHRlbnNpb25G
aWVsZEluZm8pIDogKn0gZ2V0RXh0ZW5zaW9uRm4KLSAqICAgICBUaGUgcHJvdG8gY2xhc3MnIGdl
dEV4dGVuc2lvbiBmdW5jdGlvbi4gUGFzc2VkIGZvciBlZmZlY3RpdmUgZGVhZCBjb2RlCi0gKiAg
ICAgcmVtb3ZhbC4KLSAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9pbmNsdWRlSW5zdGFuY2UgV2hl
dGhlciB0byBpbmNsdWRlIHRoZSBKU1BCIGluc3RhbmNlCi0gKiAgICAgZm9yIHRyYW5zaXRpb25h
bCBzb3kgcHJvdG8gc3VwcG9ydDogaHR0cDovL2dvdG8vc295LXBhcmFtLW1pZ3JhdGlvbgotICov
Ci1qc3BiLk1lc3NhZ2UudG9PYmplY3RFeHRlbnNpb24gPSBmdW5jdGlvbihwcm90bywgb2JqLCBl
eHRlbnNpb25zLAotICAgIGdldEV4dGVuc2lvbkZuLCBvcHRfaW5jbHVkZUluc3RhbmNlKSB7Ci0g
IGZvciAodmFyIGZpZWxkTnVtYmVyIGluIGV4dGVuc2lvbnMpIHsKLSAgICB2YXIgZmllbGRJbmZv
ID0gZXh0ZW5zaW9uc1tmaWVsZE51bWJlcl07Ci0gICAgdmFyIHZhbHVlID0gZ2V0RXh0ZW5zaW9u
Rm4uY2FsbChwcm90bywgZmllbGRJbmZvKTsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgIGZvciAo
dmFyIG5hbWUgaW4gZmllbGRJbmZvLmZpZWxkTmFtZSkgewotICAgICAgICBpZiAoZmllbGRJbmZv
LmZpZWxkTmFtZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewotICAgICAgICAgIGJyZWFrOyAvLyB0
aGUgY29tcGlsZWQgZmllbGQgbmFtZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIWZp
ZWxkSW5mby50b09iamVjdEZuKSB7Ci0gICAgICAgIG9ialtuYW1lXSA9IHZhbHVlOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKGZpZWxkSW5mby5pc1JlcGVhdGVkKSB7Ci0gICAgICAgICAg
b2JqW25hbWVdID0ganNwYi5NZXNzYWdlLnRvT2JqZWN0TGlzdCgKLSAgICAgICAgICAgICAgLyoq
IEB0eXBlIHshQXJyYXk8anNwYi5NZXNzYWdlPn0gKi8gKHZhbHVlKSwKLSAgICAgICAgICAgICAg
ZmllbGRJbmZvLnRvT2JqZWN0Rm4sIG9wdF9pbmNsdWRlSW5zdGFuY2UpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIG9ialtuYW1lXSA9IGZpZWxkSW5mby50b09iamVjdEZuKG9wdF9pbmNs
dWRlSW5zdGFuY2UsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfTsK
LQotCi0vKioKLSAqIFdyaXRlcyBhIHByb3RvJ3MgZXh0ZW5zaW9uIGRhdGEgdG8gYSBiaW5hcnkt
Zm9ybWF0IG91dHB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geyFqc3BiLk1lc3NhZ2V9IHByb3RvIFRo
ZSBwcm90byB3aG9zZSBleHRlbnNpb25zIHRvIGNvbnZlcnQuCi0gKiBAcGFyYW0geyp9IHdyaXRl
ciBUaGUgYmluYXJ5LWZvcm1hdCB3cml0ZXIgdG8gd3JpdGUgdG8uCi0gKiBAcGFyYW0geyFPYmpl
Y3R9IGV4dGVuc2lvbnMgVGhlIHByb3RvIGNsYXNzJyByZWdpc3RlcmVkIGV4dGVuc2lvbnMuCi0g
KiBAcGFyYW0ge2Z1bmN0aW9uKGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvKSA6ICp9IGdldEV4dGVu
c2lvbkZuIFRoZSBwcm90bwotICogICAgIGNsYXNzJyBnZXRFeHRlbnNpb24gZnVuY3Rpb24uIFBh
c3NlZCBmb3IgZWZmZWN0aXZlIGRlYWQgY29kZSByZW1vdmFsLgotICovCi1qc3BiLk1lc3NhZ2Uu
c2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uKHByb3RvLCB3cml0ZXIsIGV4dGVu
c2lvbnMsCi0gICAgZ2V0RXh0ZW5zaW9uRm4pIHsKLSAgZm9yICh2YXIgZmllbGROdW1iZXIgaW4g
ZXh0ZW5zaW9ucykgewotICAgIHZhciBmaWVsZEluZm8gPSBleHRlbnNpb25zW2ZpZWxkTnVtYmVy
XTsKLSAgICAvLyBUaGUgb2xkIGNvZGVnZW4gZG9lc24ndCBhZGQgdGhlIGV4dHJhIGZpZWxkcyB0
byBFeHRlbnNpb25GaWVsZEluZm8sIHNvIHdlCi0gICAgLy8gbmVlZCB0byBncmFjZWZ1bGx5IGVy
cm9yLW91dCBoZXJlIHJhdGhlciB0aGFuIHByb2R1Y2UgYSBudWxsIGRlcmVmZXJlbmNlCi0gICAg
Ly8gYmVsb3cuCi0gICAgaWYgKCFmaWVsZEluZm8uYmluYXJ5V3JpdGVyRm4pIHsKLSAgICAgIHRo
cm93IG5ldyBFcnJvcignTWVzc2FnZSBleHRlbnNpb24gcHJlc2VudCB0aGF0IHdhcyBnZW5lcmF0
ZWQgJyArCi0gICAgICAgICAgICAgICAgICAgICAgJ3dpdGhvdXQgYmluYXJ5IHNlcmlhbGl6YXRp
b24gc3VwcG9ydCcpOwotICAgIH0KLSAgICB2YXIgdmFsdWUgPSBnZXRFeHRlbnNpb25Gbi5jYWxs
KHByb3RvLCBmaWVsZEluZm8pOwotICAgIGlmICh2YWx1ZSkgewotICAgICAgaWYgKGZpZWxkSW5m
by5pc01lc3NhZ2VUeXBlKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgdHlwZSBvZiB0
aGUgZXh0ZW5zaW9uIHdhcyBnZW5lcmF0ZWQgd2l0aG91dCBiaW5hcnkKLSAgICAgICAgLy8gc3Vw
cG9ydCwgdGhlcmUgbWF5IG5vdCBiZSBhIGJpbmFyeSBtZXNzYWdlIHNlcmlhbGl6ZXIgZnVuY3Rp
b24sIGFuZAotICAgICAgICAvLyB3ZSBjYW4ndCBrbm93IHdoZW4gd2UgY29kZWdlbiB0aGUgZXh0
ZW5kaW5nIG1lc3NhZ2UgdGhhdCB0aGUgZXh0ZW5kZWQKLSAgICAgICAgLy8gbWVzc2FnZSBtYXkg
cmVxdWlyZSBiaW5hcnkgc3VwcG9ydCwgc28gd2UgY2FuICpvbmx5KiBjYXRjaCB0aGlzIGVycm9y
Ci0gICAgICAgIC8vIGhlcmUsIGF0IHJ1bnRpbWUgKGFuZCB0aGlzIGRlY291cGxlZCBjb2RlZ2Vu
IGlzIHRoZSB3aG9sZSBwb2ludCBvZgotICAgICAgICAvLyBleHRlbnNpb25zISkuCi0gICAgICAg
IGlmIChmaWVsZEluZm8uYmluYXJ5TWVzc2FnZVNlcmlhbGl6ZUZuKSB7Ci0gICAgICAgICAgZmll
bGRJbmZvLmJpbmFyeVdyaXRlckZuLmNhbGwod3JpdGVyLCBmaWVsZEluZm8uZmllbGRJbmRleCwK
LSAgICAgICAgICAgICAgdmFsdWUsIGZpZWxkSW5mby5iaW5hcnlNZXNzYWdlU2VyaWFsaXplRm4p
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWVzc2FnZSBl
eHRlbnNpb24gcHJlc2VudCBob2xkaW5nIHN1Ym1lc3NhZ2UgJyArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICd3aXRob3V0IGJpbmFyeSBzdXBwb3J0IGVuYWJsZWQsIGFuZCBtZXNzYWdlIGlz
ICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVpbmcgc2VyaWFsaXplZCB0byBiaW5h
cnkgZm9ybWF0Jyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpZWxkSW5m
by5iaW5hcnlXcml0ZXJGbi5jYWxsKHdyaXRlciwgZmllbGRJbmZvLmZpZWxkSW5kZXgsIHZhbHVl
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBSZWFkcyBhbiBleHRlbnNp
b24gZmllbGQgZnJvbSB0aGUgZ2l2ZW4gcmVhZGVyIGFuZCwgaWYgYSB2YWxpZCBleHRlbnNpb24s
Ci0gKiBzZXRzIHRoZSBleHRlbnNpb24gdmFsdWUuCi0gKiBAcGFyYW0geyFqc3BiLk1lc3NhZ2V9
IG1zZyBBIGpzcGIgcHJvdG8uCi0gKiBAcGFyYW0ge3tza2lwRmllbGQ6ZnVuY3Rpb24oKSxnZXRG
aWVsZE51bWJlcjpmdW5jdGlvbigpOm51bWJlcn19IHJlYWRlcgotICogQHBhcmFtIHshT2JqZWN0
fSBleHRlbnNpb25zIFRoZSBleHRlbnNpb25zIG9iamVjdC4KLSAqIEBwYXJhbSB7ZnVuY3Rpb24o
anNwYi5FeHRlbnNpb25GaWVsZEluZm8pfSBnZXRFeHRlbnNpb25GbgotICogQHBhcmFtIHtmdW5j
dGlvbihqc3BiLkV4dGVuc2lvbkZpZWxkSW5mbywgPyl9IHNldEV4dGVuc2lvbkZuCi0gKi8KLWpz
cGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uID0gZnVuY3Rpb24obXNnLCByZWFkZXIsIGV4
dGVuc2lvbnMsCi0gICAgZ2V0RXh0ZW5zaW9uRm4sIHNldEV4dGVuc2lvbkZuKSB7Ci0gIHZhciBm
aWVsZEluZm8gPSBleHRlbnNpb25zW3JlYWRlci5nZXRGaWVsZE51bWJlcigpXTsKLSAgaWYgKCFm
aWVsZEluZm8pIHsKLSAgICByZWFkZXIuc2tpcEZpZWxkKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0g
IGlmICghZmllbGRJbmZvLmJpbmFyeVJlYWRlckZuKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdE
ZXNlcmlhbGl6aW5nIGV4dGVuc2lvbiB3aG9zZSBnZW5lcmF0ZWQgY29kZSBkb2VzIG5vdCAnICsK
LSAgICAgICAgICAgICAgICAgICAgJ3N1cHBvcnQgYmluYXJ5IGZvcm1hdCcpOwotICB9Ci0KLSAg
dmFyIHZhbHVlOwotICBpZiAoZmllbGRJbmZvLmlzTWVzc2FnZVR5cGUoKSkgewotICAgIHZhbHVl
ID0gbmV3IGZpZWxkSW5mby5jdG9yKCk7Ci0gICAgZmllbGRJbmZvLmJpbmFyeVJlYWRlckZuLmNh
bGwoCi0gICAgICAgIHJlYWRlciwgdmFsdWUsIGZpZWxkSW5mby5iaW5hcnlNZXNzYWdlRGVzZXJp
YWxpemVGbik7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gQWxsIG90aGVyIHR5cGVzLgotICAgIHZhbHVl
ID0gZmllbGRJbmZvLmJpbmFyeVJlYWRlckZuLmNhbGwocmVhZGVyKTsKLSAgfQotCi0gIGlmIChm
aWVsZEluZm8uaXNSZXBlYXRlZCAmJiAhZmllbGRJbmZvLmlzUGFja2VkKSB7Ci0gICAgdmFyIGN1
cnJlbnRMaXN0ID0gZ2V0RXh0ZW5zaW9uRm4uY2FsbChtc2csIGZpZWxkSW5mbyk7Ci0gICAgaWYg
KCFjdXJyZW50TGlzdCkgewotICAgICAgc2V0RXh0ZW5zaW9uRm4uY2FsbChtc2csIGZpZWxkSW5m
bywgW3ZhbHVlXSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGN1cnJlbnRMaXN0LnB1c2godmFsdWUp
OwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBzZXRFeHRlbnNpb25Gbi5jYWxsKG1zZywgZmllbGRJ
bmZvLCB2YWx1ZSk7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBHZXRzIHRoZSB2YWx1ZSBvZiBhIG5v
bi1leHRlbnNpb24gZmllbGQuCi0gKiBAcGFyYW0geyFqc3BiLk1lc3NhZ2V9IG1zZyBBIGpzcGIg
cHJvdG8uCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGROdW1iZXIgVGhlIGZpZWxkIG51bWJlci4K
LSAqIEByZXR1cm4ge3N0cmluZ3xudW1iZXJ8Ym9vbGVhbnxVaW50OEFycmF5fEFycmF5fG51bGx8
dW5kZWZpbmVkfQotICogVGhlIGZpZWxkJ3MgdmFsdWUuCi0gKiBAcHJvdGVjdGVkCi0gKi8KLWpz
cGIuTWVzc2FnZS5nZXRGaWVsZCA9IGZ1bmN0aW9uKG1zZywgZmllbGROdW1iZXIpIHsKLSAgaWYg
KGZpZWxkTnVtYmVyIDwgbXNnLnBpdm90XykgewotICAgIHZhciBpbmRleCA9IGpzcGIuTWVzc2Fn
ZS5nZXRJbmRleF8obXNnLCBmaWVsZE51bWJlcik7Ci0gICAgdmFyIHZhbCA9IG1zZy5hcnJheVtp
bmRleF07Ci0gICAgaWYgKHZhbCA9PT0ganNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxf
KSB7Ci0gICAgICByZXR1cm4gbXNnLmFycmF5W2luZGV4XSA9IFtdOwotICAgIH0KLSAgICByZXR1
cm4gdmFsOwotICB9IGVsc2UgewotICAgIHZhciB2YWwgPSBtc2cuZXh0ZW5zaW9uT2JqZWN0X1tm
aWVsZE51bWJlcl07Ci0gICAgaWYgKHZhbCA9PT0ganNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VO
VElORUxfKSB7Ci0gICAgICByZXR1cm4gbXNnLmV4dGVuc2lvbk9iamVjdF9bZmllbGROdW1iZXJd
ID0gW107Ci0gICAgfQotICAgIHJldHVybiB2YWw7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBHZXRz
IHRoZSB2YWx1ZSBvZiBhbiBvcHRpb25hbCBmbG9hdCBvciBkb3VibGUgZmllbGQuCi0gKiBAcGFy
YW0geyFqc3BiLk1lc3NhZ2V9IG1zZyBBIGpzcGIgcHJvdG8uCi0gKiBAcGFyYW0ge251bWJlcn0g
ZmllbGROdW1iZXIgVGhlIGZpZWxkIG51bWJlci4KLSAqIEByZXR1cm4gez9udW1iZXJ8dW5kZWZp
bmVkfSBUaGUgZmllbGQncyB2YWx1ZS4KLSAqIEBwcm90ZWN0ZWQKLSAqLwotanNwYi5NZXNzYWdl
LmdldE9wdGlvbmFsRmxvYXRpbmdQb2ludEZpZWxkID0gZnVuY3Rpb24obXNnLCBmaWVsZE51bWJl
cikgewotICB2YXIgdmFsdWUgPSBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQobXNnLCBmaWVsZE51bWJl
cik7Ci0gIC8vIENvbnZlcnRzICJOYU4iLCAiSW5maW5pdHkiIGFuZCAiLUluZmluaXR5IiB0byB0
aGVpciBjb3JyZXNwb25kaW5nIG51bWJlcnMuCi0gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdmFs
dWUgOiArdmFsdWU7Ci19OwotCi0KLS8qKgotICogR2V0cyB0aGUgdmFsdWUgb2YgYSByZXBlYXRl
ZCBmbG9hdCBvciBkb3VibGUgZmllbGQuCi0gKiBAcGFyYW0geyFqc3BiLk1lc3NhZ2V9IG1zZyBB
IGpzcGIgcHJvdG8uCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGROdW1iZXIgVGhlIGZpZWxkIG51
bWJlci4KLSAqIEByZXR1cm4geyFBcnJheTxudW1iZXI+fSBUaGUgZmllbGQncyB2YWx1ZS4KLSAq
IEBwcm90ZWN0ZWQKLSAqLwotanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZp
ZWxkID0gZnVuY3Rpb24obXNnLCBmaWVsZE51bWJlcikgewotICB2YXIgdmFsdWVzID0ganNwYi5N
ZXNzYWdlLmdldEZpZWxkKG1zZywgZmllbGROdW1iZXIpOwotICBpZiAoIW1zZy5jb252ZXJ0ZWRG
bG9hdGluZ1BvaW50RmllbGRzXykgewotICAgIG1zZy5jb252ZXJ0ZWRGbG9hdGluZ1BvaW50Rmll
bGRzXyA9IHt9OwotICB9Ci0gIGlmICghbXNnLmNvbnZlcnRlZEZsb2F0aW5nUG9pbnRGaWVsZHNf
W2ZpZWxkTnVtYmVyXSkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsg
aSsrKSB7Ci0gICAgICAvLyBDb252ZXJ0cyAiTmFOIiwgIkluZmluaXR5IiBhbmQgIi1JbmZpbml0
eSIgdG8gdGhlaXIgY29ycmVzcG9uZGluZwotICAgICAgLy8gbnVtYmVycy4KLSAgICAgIHZhbHVl
c1tpXSA9ICt2YWx1ZXNbaV07Ci0gICAgfQotICAgIG1zZy5jb252ZXJ0ZWRGbG9hdGluZ1BvaW50
RmllbGRzX1tmaWVsZE51bWJlcl0gPSB0cnVlOwotICB9Ci0gIHJldHVybiAvKiogQHR5cGUgeyFB
cnJheTxudW1iZXI+fSAqLyAodmFsdWVzKTsKLX07Ci0KLQotLyoqCi0gKiBDb2VyY2UgYSAnYnl0
ZXMnIGZpZWxkIHRvIGEgYmFzZSA2NCBzdHJpbmcuCi0gKiBAcGFyYW0ge3N0cmluZ3xVaW50OEFy
cmF5fG51bGx9IHZhbHVlCi0gKiBAcmV0dXJuIHs/c3RyaW5nfSBUaGUgZmllbGQncyBjb2VyY2Vk
IHZhbHVlLgotICovCi1qc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2NCA9IGZ1bmN0aW9uKHZhbHVlKSB7
Ci0gIGlmICh2YWx1ZSA9PSBudWxsIHx8IGdvb2cuaXNTdHJpbmcodmFsdWUpKSB7Ci0gICAgcmV0
dXJuIHZhbHVlOwotICB9Ci0gIGlmIChqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8g
JiYgdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7Ci0gICAgcmV0dXJuIGdvb2cuY3J5cHQu
YmFzZTY0LmVuY29kZUJ5dGVBcnJheSh2YWx1ZSk7Ci0gIH0KLSAgZ29vZy5hc3NlcnRzLmZhaWwo
J0Nhbm5vdCBjb2VyY2UgdG8gYjY0IHN0cmluZzogJyArIGdvb2cudHlwZU9mKHZhbHVlKSk7Ci0g
IHJldHVybiBudWxsOwotfTsKLQotCi0vKioKLSAqIENvZXJjZSBhICdieXRlcycgZmllbGQgdG8g
YSBVaW50OEFycmF5IGJ5dGUgYnVmZmVyLgotICogTm90ZSB0aGF0IFVpbnQ4QXJyYXkgaXMgbm90
IHN1cHBvcnRlZCBvbiBJRSB2ZXJzaW9ucyBiZWZvcmUgMTAgbm9yIG9uIE9wZXJhCi0gKiBNaW5p
LiBAc2VlIGh0dHA6Ly9jYW5pdXNlLmNvbS9VaW50OEFycmF5Ci0gKiBAcGFyYW0ge3N0cmluZ3xV
aW50OEFycmF5fG51bGx9IHZhbHVlCi0gKiBAcmV0dXJuIHs/VWludDhBcnJheX0gVGhlIGZpZWxk
J3MgY29lcmNlZCB2YWx1ZS4KLSAqLwotanNwYi5NZXNzYWdlLmJ5dGVzQXNVOCA9IGZ1bmN0aW9u
KHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlIGluc3RhbmNlb2YgVWludDhB
cnJheSkgewotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICBpZiAoZ29vZy5pc1N0cmluZyh2YWx1
ZSkpIHsKLSAgICByZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nVG9VaW50OEFy
cmF5KHZhbHVlKTsKLSAgfQotICBnb29nLmFzc2VydHMuZmFpbCgnQ2Fubm90IGNvZXJjZSB0byBV
aW50OEFycmF5OiAnICsgZ29vZy50eXBlT2YodmFsdWUpKTsKLSAgcmV0dXJuIG51bGw7Ci19Owot
Ci0KLS8qKgotICogQ29lcmNlIGEgcmVwZWF0ZWQgJ2J5dGVzJyBmaWVsZCB0byBhbiBhcnJheSBv
ZiBiYXNlIDY0IHN0cmluZ3MuCi0gKiBOb3RlOiB0aGUgcmV0dXJuZWQgYXJyYXkgc2hvdWxkIGJl
IHRyZWF0ZWQgYXMgaW1tdXRhYmxlLgotICogQHBhcmFtIHshQXJyYXk8c3RyaW5nPnwhQXJyYXk8
IVVpbnQ4QXJyYXk+fSB2YWx1ZQotICogQHJldHVybiB7IUFycmF5PHN0cmluZz8+fSBUaGUgZmll
bGQncyBjb2VyY2VkIHZhbHVlLgotICovCi1qc3BiLk1lc3NhZ2UuYnl0ZXNMaXN0QXNCNjQgPSBm
dW5jdGlvbih2YWx1ZSkgewotICBqc3BiLk1lc3NhZ2UuYXNzZXJ0Q29uc2lzdGVudFR5cGVzXyh2
YWx1ZSk7Ci0gIGlmICghdmFsdWUubGVuZ3RoIHx8IGdvb2cuaXNTdHJpbmcodmFsdWVbMF0pKSB7
Ci0gICAgcmV0dXJuIC8qKiBAdHlwZSB7IUFycmF5PHN0cmluZz59ICovICh2YWx1ZSk7Ci0gIH0K
LSAgcmV0dXJuIGdvb2cuYXJyYXkubWFwKHZhbHVlLCBqc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2NCk7
Ci19OwotCi0KLS8qKgotICogQ29lcmNlIGEgcmVwZWF0ZWQgJ2J5dGVzJyBmaWVsZCB0byBhbiBh
cnJheSBvZiBVaW50OEFycmF5IGJ5dGUgYnVmZmVycy4KLSAqIE5vdGU6IHRoZSByZXR1cm5lZCBh
cnJheSBzaG91bGQgYmUgdHJlYXRlZCBhcyBpbW11dGFibGUuCi0gKiBOb3RlIHRoYXQgVWludDhB
cnJheSBpcyBub3Qgc3VwcG9ydGVkIG9uIElFIHZlcnNpb25zIGJlZm9yZSAxMCBub3Igb24gT3Bl
cmEKLSAqIE1pbmkuIEBzZWUgaHR0cDovL2Nhbml1c2UuY29tL1VpbnQ4QXJyYXkKLSAqIEBwYXJh
bSB7IUFycmF5PHN0cmluZz58IUFycmF5PCFVaW50OEFycmF5Pn0gdmFsdWUKLSAqIEByZXR1cm4g
eyFBcnJheTxVaW50OEFycmF5Pz59IFRoZSBmaWVsZCdzIGNvZXJjZWQgdmFsdWUuCi0gKi8KLWpz
cGIuTWVzc2FnZS5ieXRlc0xpc3RBc1U4ID0gZnVuY3Rpb24odmFsdWUpIHsKLSAganNwYi5NZXNz
YWdlLmFzc2VydENvbnNpc3RlbnRUeXBlc18odmFsdWUpOwotICBpZiAoIXZhbHVlLmxlbmd0aCB8
fCB2YWx1ZVswXSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKLSAgICByZXR1cm4gLyoqIEB0eXBl
IHshQXJyYXk8IVVpbnQ4QXJyYXk+fSAqLyAodmFsdWUpOwotICB9Ci0gIHJldHVybiBnb29nLmFy
cmF5Lm1hcCh2YWx1ZSwganNwYi5NZXNzYWdlLmJ5dGVzQXNVOCk7Ci19OwotCi0KLS8qKgotICog
QXNzZXJ0cyB0aGF0IGFsbCBlbGVtZW50cyBvZiBhbiBhcnJheSBhcmUgb2YgdGhlIHNhbWUgdHlw
ZS4KLSAqIEBwYXJhbSB7QXJyYXk/fSBhcnJheSBUaGUgYXJyYXkgdG8gdGVzdC4KLSAqIEBwcml2
YXRlCi0gKi8KLWpzcGIuTWVzc2FnZS5hc3NlcnRDb25zaXN0ZW50VHlwZXNfID0gZnVuY3Rpb24o
YXJyYXkpIHsKLSAgaWYgKGdvb2cuREVCVUcgJiYgYXJyYXkgJiYgYXJyYXkubGVuZ3RoID4gMSkg
ewotICAgIHZhciBleHBlY3RlZCA9IGdvb2cudHlwZU9mKGFycmF5WzBdKTsKLSAgICBnb29nLmFy
cmF5LmZvckVhY2goYXJyYXksIGZ1bmN0aW9uKGUpIHsKLSAgICAgIGlmIChnb29nLnR5cGVPZihl
KSAhPSBleHBlY3RlZCkgewotICAgICAgICBnb29nLmFzc2VydHMuZmFpbCgnSW5jb25zaXN0ZW50
IHR5cGUgaW4gSlNQQiByZXBlYXRlZCBmaWVsZCBhcnJheS4gJyArCi0gICAgICAgICAgICAnR290
ICcgKyBnb29nLnR5cGVPZihlKSArICcgZXhwZWN0ZWQgJyArIGV4cGVjdGVkKTsKLSAgICAgIH0K
LSAgICB9KTsKLSAgfQotfTsKLQotCi0vKioKLSAqIEdldHMgdGhlIHZhbHVlIG9mIGEgbm9uLWV4
dGVuc2lvbiBwcmltaXRpdmUgZmllbGQsIHdpdGggcHJvdG8zIChub24tbnVsbGFibGUKLSAqIHBy
aW1pdGl2ZXMpIHNlbWFudGljcy4gUmV0dXJucyBgZGVmYXVsdFZhbHVlYCBpZiB0aGUgZmllbGQg
aXMgbm90IG90aGVyd2lzZQotICogc2V0LgotICogQHRlbXBsYXRlIFQKLSAqIEBwYXJhbSB7IWpz
cGIuTWVzc2FnZX0gbXNnIEEganNwYiBwcm90by4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZE51
bWJlciBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtUfSBkZWZhdWx0VmFsdWUgVGhlIGRl
ZmF1bHQgdmFsdWUuCi0gKiBAcmV0dXJuIHtUfSBUaGUgZmllbGQncyB2YWx1ZS4KLSAqIEBwcm90
ZWN0ZWQKLSAqLwotanNwYi5NZXNzYWdlLmdldEZpZWxkUHJvdG8zID0gZnVuY3Rpb24obXNnLCBm
aWVsZE51bWJlciwgZGVmYXVsdFZhbHVlKSB7Ci0gIHZhciB2YWx1ZSA9IGpzcGIuTWVzc2FnZS5n
ZXRGaWVsZChtc2csIGZpZWxkTnVtYmVyKTsKLSAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICBy
ZXR1cm4gZGVmYXVsdFZhbHVlOwotICB9IGVsc2UgewotICAgIHJldHVybiB2YWx1ZTsKLSAgfQot
fTsKLQotCi0vKioKLSAqIFNldHMgdGhlIHZhbHVlIG9mIGEgbm9uLWV4dGVuc2lvbiBmaWVsZC4K
LSAqIEBwYXJhbSB7IWpzcGIuTWVzc2FnZX0gbXNnIEEganNwYiBwcm90by4KLSAqIEBwYXJhbSB7
bnVtYmVyfSBmaWVsZE51bWJlciBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtzdHJpbmd8
bnVtYmVyfGJvb2xlYW58VWludDhBcnJheXxBcnJheXx1bmRlZmluZWR9IHZhbHVlIE5ldyB2YWx1
ZQotICogQHByb3RlY3RlZAotICovCi1qc3BiLk1lc3NhZ2Uuc2V0RmllbGQgPSBmdW5jdGlvbiht
c2csIGZpZWxkTnVtYmVyLCB2YWx1ZSkgewotICBpZiAoZmllbGROdW1iZXIgPCBtc2cucGl2b3Rf
KSB7Ci0gICAgbXNnLmFycmF5W2pzcGIuTWVzc2FnZS5nZXRJbmRleF8obXNnLCBmaWVsZE51bWJl
cildID0gdmFsdWU7Ci0gIH0gZWxzZSB7Ci0gICAgbXNnLmV4dGVuc2lvbk9iamVjdF9bZmllbGRO
dW1iZXJdID0gdmFsdWU7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBTZXRzIHRoZSB2YWx1ZSBvZiBh
IGZpZWxkIGluIGEgb25lb2YgdW5pb24gYW5kIGNsZWFycyBhbGwgb3RoZXIgZmllbGRzIGluCi0g
KiB0aGUgdW5pb24uCi0gKiBAcGFyYW0geyFqc3BiLk1lc3NhZ2V9IG1zZyBBIGpzcGIgcHJvdG8u
Ci0gKiBAcGFyYW0ge251bWJlcn0gZmllbGROdW1iZXIgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBw
YXJhbSB7IUFycmF5PG51bWJlcj59IG9uZW9mIFRoZSBmaWVsZHMgYmVsb25naW5nIHRvIHRoZSB1
bmlvbi4KLSAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxib29sZWFufFVpbnQ4QXJyYXl8QXJyYXl8
dW5kZWZpbmVkfSB2YWx1ZSBOZXcgdmFsdWUKLSAqIEBwcm90ZWN0ZWQKLSAqLwotanNwYi5NZXNz
YWdlLnNldE9uZW9mRmllbGQgPSBmdW5jdGlvbihtc2csIGZpZWxkTnVtYmVyLCBvbmVvZiwgdmFs
dWUpIHsKLSAgdmFyIGN1cnJlbnRDYXNlID0ganNwYi5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2Uo
bXNnLCBvbmVvZik7Ci0gIGlmIChjdXJyZW50Q2FzZSAmJiBjdXJyZW50Q2FzZSAhPT0gZmllbGRO
dW1iZXIgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgewotICAgIGlmIChtc2cud3JhcHBlcnNfICYm
IGN1cnJlbnRDYXNlIGluIG1zZy53cmFwcGVyc18pIHsKLSAgICAgIG1zZy53cmFwcGVyc19bY3Vy
cmVudENhc2VdID0gdW5kZWZpbmVkOwotICAgIH0KLSAgICBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQo
bXNnLCBjdXJyZW50Q2FzZSwgdW5kZWZpbmVkKTsKLSAgfQotICBqc3BiLk1lc3NhZ2Uuc2V0Rmll
bGQobXNnLCBmaWVsZE51bWJlciwgdmFsdWUpOwotfTsKLQotCi0vKioKLSAqIENvbXB1dGVzIHRo
ZSBzZWxlY3Rpb24gaW4gYSBvbmVvZiBncm91cCBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGVuc3Vy
aW5nCi0gKiBvbmx5IG9uZSBmaWVsZCBpcyBzZXQgaW4gdGhlIHByb2Nlc3MuCi0gKgotICogQWNj
b3JkaW5nIHRvIHRoZSBwcm90b2J1ZiBsYW5ndWFnZSBndWlkZSAoCi0gKiBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8jb25lb2YpLCAiaWYg
dGhlCi0gKiBwYXJzZXIgZW5jb3VudGVycyBtdWx0aXBsZSBtZW1iZXJzIG9mIHRoZSBzYW1lIG9u
ZW9mIG9uIHRoZSB3aXJlLCBvbmx5IHRoZQotICogbGFzdCBtZW1iZXIgc2VlbiBpcyB1c2VkIGlu
IHRoZSBwYXJzZWQgbWVzc2FnZS4iIFNpbmNlIEpTUEIgc2VyaWFsaXplcwotICogbWVzc2FnZXMg
dG8gYSBKU09OIGFycmF5LCB0aGUgImxhc3QgbWVtYmVyIHNlZW4iIHdpbGwgYWx3YXlzIGJlIHRo
ZSBmaWVsZAotICogd2l0aCB0aGUgZ3JlYXRlc3QgZmllbGQgbnVtYmVyIChkaXJlY3RseSBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBncmVhdGVzdAotICogYXJyYXkgaW5kZXgpLgotICoKLSAqIEBwYXJh
bSB7IWpzcGIuTWVzc2FnZX0gbXNnIEEganNwYiBwcm90by4KLSAqIEBwYXJhbSB7IUFycmF5PG51
bWJlcj59IG9uZW9mIFRoZSBmaWVsZCBudW1iZXJzIGJlbG9uZ2luZyB0byB0aGUgdW5pb24uCi0g
KiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBmaWVsZCBudW1iZXIgY3VycmVudGx5IHNldCBpbiB0aGUg
dW5pb24sIG9yIDAgaWYgbm9uZS4KLSAqIEBwcm90ZWN0ZWQKLSAqLwotanNwYi5NZXNzYWdlLmNv
bXB1dGVPbmVvZkNhc2UgPSBmdW5jdGlvbihtc2csIG9uZW9mKSB7Ci0gIHZhciBvbmVvZkZpZWxk
OwotICB2YXIgb25lb2ZWYWx1ZTsKLQotICBnb29nLmFycmF5LmZvckVhY2gob25lb2YsIGZ1bmN0
aW9uKGZpZWxkTnVtYmVyKSB7Ci0gICAgdmFyIHZhbHVlID0ganNwYi5NZXNzYWdlLmdldEZpZWxk
KG1zZywgZmllbGROdW1iZXIpOwotICAgIGlmIChnb29nLmlzRGVmQW5kTm90TnVsbCh2YWx1ZSkp
IHsKLSAgICAgIG9uZW9mRmllbGQgPSBmaWVsZE51bWJlcjsKLSAgICAgIG9uZW9mVmFsdWUgPSB2
YWx1ZTsKLSAgICAgIGpzcGIuTWVzc2FnZS5zZXRGaWVsZChtc2csIGZpZWxkTnVtYmVyLCB1bmRl
ZmluZWQpOwotICAgIH0KLSAgfSk7Ci0KLSAgaWYgKG9uZW9mRmllbGQpIHsKLSAgICAvLyBOQjog
V2Uga25vdyB0aGUgdmFsdWUgaXMgdW5pcXVlLCBzbyB3ZSBjYW4gY2FsbCBqc3BiLk1lc3NhZ2Uu
c2V0RmllbGQKLSAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIGpwc2IuTWVzc2FnZS5zZXRPbmVv
ZkZpZWxkLiBBbHNvLCBzZXRPbmVvZkZpZWxkCi0gICAgLy8gY2FsbHMgdGhpcyBmdW5jdGlvbi4K
LSAgICBqc3BiLk1lc3NhZ2Uuc2V0RmllbGQobXNnLCBvbmVvZkZpZWxkLCBvbmVvZlZhbHVlKTsK
LSAgICByZXR1cm4gb25lb2ZGaWVsZDsKLSAgfQotCi0gIHJldHVybiAwOwotfTsKLQotCi0vKioK
LSAqIEdldHMgYW5kIHdyYXBzIGEgcHJvdG8gZmllbGQgb24gYWNjZXNzLgotICogQHBhcmFtIHsh
anNwYi5NZXNzYWdlfSBtc2cgQSBqc3BiIHByb3RvLgotICogQHBhcmFtIHtmdW5jdGlvbihuZXc6
anNwYi5NZXNzYWdlLCBBcnJheSl9IGN0b3IgQ29uc3RydWN0b3IgZm9yIHRoZSBmaWVsZC4KLSAq
IEBwYXJhbSB7bnVtYmVyfSBmaWVsZE51bWJlciBUaGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFt
IHtudW1iZXI9fSBvcHRfcmVxdWlyZWQgVHJ1ZSAoMSkgaWYgdGhpcyBpcyBhIHJlcXVpcmVkIGZp
ZWxkLgotICogQHJldHVybiB7anNwYi5NZXNzYWdlfSBUaGUgZmllbGQgYXMgYSBqc3BiIHByb3Rv
LgotICogQHByb3RlY3RlZAotICovCi1qc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkID0gZnVu
Y3Rpb24obXNnLCBjdG9yLCBmaWVsZE51bWJlciwgb3B0X3JlcXVpcmVkKSB7Ci0gIC8vIFRPRE8o
bXdyKTogQ29uc2lkZXIgY29weWluZyBkYXRhIGFuZC9vciBhcnJheXMuCi0gIGlmICghbXNnLndy
YXBwZXJzXykgewotICAgIG1zZy53cmFwcGVyc18gPSB7fTsKLSAgfQotICBpZiAoIW1zZy53cmFw
cGVyc19bZmllbGROdW1iZXJdKSB7Ci0gICAgdmFyIGRhdGEgPSAvKiogQHR5cGUge0FycmF5fSAq
LyAoanNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgZmllbGROdW1iZXIpKTsKLSAgICBpZiAob3B0
X3JlcXVpcmVkIHx8IGRhdGEpIHsKLSAgICAgIC8vIFRPRE8obXdyKTogUmVtb3ZlIGV4aXN0ZW5j
ZSB0ZXN0IGZvciBhbHdheXMgdmFsaWQgZGVmYXVsdCBwcm90b3MuCi0gICAgICBtc2cud3JhcHBl
cnNfW2ZpZWxkTnVtYmVyXSA9IG5ldyBjdG9yKGRhdGEpOwotICAgIH0KLSAgfQotICByZXR1cm4g
LyoqIEB0eXBlIHtqc3BiLk1lc3NhZ2V9ICovIChtc2cud3JhcHBlcnNfW2ZpZWxkTnVtYmVyXSk7
Ci19OwotCi0KLS8qKgotICogR2V0cyBhbmQgd3JhcHMgYSByZXBlYXRlZCBwcm90byBmaWVsZCBv
biBhY2Nlc3MuCi0gKiBAcGFyYW0geyFqc3BiLk1lc3NhZ2V9IG1zZyBBIGpzcGIgcHJvdG8uCi0g
KiBAcGFyYW0ge2Z1bmN0aW9uKG5ldzpqc3BiLk1lc3NhZ2UsIEFycmF5KX0gY3RvciBDb25zdHJ1
Y3RvciBmb3IgdGhlIGZpZWxkLgotICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkTnVtYmVyIFRoZSBm
aWVsZCBudW1iZXIuCi0gKiBAcmV0dXJuIHtBcnJheTwhanNwYi5NZXNzYWdlPn0gVGhlIHJlcGVh
dGVkIGZpZWxkIGFzIGFuIGFycmF5IG9mIHByb3Rvcy4KLSAqIEBwcm90ZWN0ZWQKLSAqLwotanNw
Yi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkID0gZnVuY3Rpb24obXNnLCBjdG9yLCBm
aWVsZE51bWJlcikgewotICBpZiAoIW1zZy53cmFwcGVyc18pIHsKLSAgICBtc2cud3JhcHBlcnNf
ID0ge307Ci0gIH0KLSAgaWYgKCFtc2cud3JhcHBlcnNfW2ZpZWxkTnVtYmVyXSkgewotICAgIHZh
ciBkYXRhID0ganNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgZmllbGROdW1iZXIpOwotICAgIGZv
ciAodmFyIHdyYXBwZXJzID0gW10sIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgewotICAg
ICAgd3JhcHBlcnNbaV0gPSBuZXcgY3RvcihkYXRhW2ldKTsKLSAgICB9Ci0gICAgbXNnLndyYXBw
ZXJzX1tmaWVsZE51bWJlcl0gPSB3cmFwcGVyczsKLSAgfQotICB2YXIgdmFsID0gbXNnLndyYXBw
ZXJzX1tmaWVsZE51bWJlcl07Ci0gIGlmICh2YWwgPT0ganNwYi5NZXNzYWdlLkVNUFRZX0xJU1Rf
U0VOVElORUxfKSB7Ci0gICAgdmFsID0gbXNnLndyYXBwZXJzX1tmaWVsZE51bWJlcl0gPSBbXTsK
LSAgfQotICByZXR1cm4gLyoqIEB0eXBlIHtBcnJheTwhanNwYi5NZXNzYWdlPn0gKi8gKHZhbCk7
Ci19OwotCi0KLS8qKgotICogU2V0cyBhIHByb3RvIGZpZWxkIGFuZCBzeW5jcyBpdCB0byB0aGUg
YmFja2luZyBhcnJheS4KLSAqIEBwYXJhbSB7IWpzcGIuTWVzc2FnZX0gbXNnIEEganNwYiBwcm90
by4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZE51bWJlciBUaGUgZmllbGQgbnVtYmVyLgotICog
QHBhcmFtIHtqc3BiLk1lc3NhZ2V8dW5kZWZpbmVkfSB2YWx1ZSBBIG5ldyB2YWx1ZSBmb3IgdGhp
cyBwcm90byBmaWVsZC4KLSAqIEBwcm90ZWN0ZWQKLSAqLwotanNwYi5NZXNzYWdlLnNldFdyYXBw
ZXJGaWVsZCA9IGZ1bmN0aW9uKG1zZywgZmllbGROdW1iZXIsIHZhbHVlKSB7Ci0gIGlmICghbXNn
LndyYXBwZXJzXykgewotICAgIG1zZy53cmFwcGVyc18gPSB7fTsKLSAgfQotICB2YXIgZGF0YSA9
IHZhbHVlID8gdmFsdWUudG9BcnJheSgpIDogdmFsdWU7Ci0gIG1zZy53cmFwcGVyc19bZmllbGRO
dW1iZXJdID0gdmFsdWU7Ci0gIGpzcGIuTWVzc2FnZS5zZXRGaWVsZChtc2csIGZpZWxkTnVtYmVy
LCBkYXRhKTsKLX07Ci0KLQotLyoqCi0gKiBTZXRzIGEgcHJvdG8gZmllbGQgaW4gYSBvbmVvZiB1
bmlvbiBhbmQgc3luY3MgaXQgdG8gdGhlIGJhY2tpbmcgYXJyYXkuCi0gKiBAcGFyYW0geyFqc3Bi
Lk1lc3NhZ2V9IG1zZyBBIGpzcGIgcHJvdG8uCi0gKiBAcGFyYW0ge251bWJlcn0gZmllbGROdW1i
ZXIgVGhlIGZpZWxkIG51bWJlci4KLSAqIEBwYXJhbSB7IUFycmF5PG51bWJlcj59IG9uZW9mIFRo
ZSBmaWVsZHMgYmVsb25naW5nIHRvIHRoZSB1bmlvbi4KLSAqIEBwYXJhbSB7anNwYi5NZXNzYWdl
fHVuZGVmaW5lZH0gdmFsdWUgQSBuZXcgdmFsdWUgZm9yIHRoaXMgcHJvdG8gZmllbGQuCi0gKiBA
cHJvdGVjdGVkCi0gKi8KLWpzcGIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCA9IGZ1bmN0
aW9uKG1zZywgZmllbGROdW1iZXIsIG9uZW9mLCB2YWx1ZSkgewotICBpZiAoIW1zZy53cmFwcGVy
c18pIHsKLSAgICBtc2cud3JhcHBlcnNfID0ge307Ci0gIH0KLSAgdmFyIGRhdGEgPSB2YWx1ZSA/
IHZhbHVlLnRvQXJyYXkoKSA6IHZhbHVlOwotICBtc2cud3JhcHBlcnNfW2ZpZWxkTnVtYmVyXSA9
IHZhbHVlOwotICBqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZChtc2csIGZpZWxkTnVtYmVyLCBv
bmVvZiwgZGF0YSk7Ci19OwotCi0KLS8qKgotICogU2V0cyBhIHJlcGVhdGVkIHByb3RvIGZpZWxk
IGFuZCBzeW5jcyBpdCB0byB0aGUgYmFja2luZyBhcnJheS4KLSAqIEBwYXJhbSB7IWpzcGIuTWVz
c2FnZX0gbXNnIEEganNwYiBwcm90by4KLSAqIEBwYXJhbSB7bnVtYmVyfSBmaWVsZE51bWJlciBU
aGUgZmllbGQgbnVtYmVyLgotICogQHBhcmFtIHtBcnJheTwhanNwYi5NZXNzYWdlPnx1bmRlZmlu
ZWR9IHZhbHVlIEFuIGFycmF5IG9mIHByb3Rvcy4KLSAqIEBwcm90ZWN0ZWQKLSAqLwotanNwYi5N
ZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkID0gZnVuY3Rpb24obXNnLCBmaWVsZE51bWJl
ciwgdmFsdWUpIHsKLSAgaWYgKCFtc2cud3JhcHBlcnNfKSB7Ci0gICAgbXNnLndyYXBwZXJzXyA9
IHt9OwotICB9Ci0gIHZhbHVlID0gdmFsdWUgfHwgW107Ci0gIGZvciAodmFyIGRhdGEgPSBbXSwg
aSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewotICAgIGRhdGFbaV0gPSB2YWx1ZVtpXS50
b0FycmF5KCk7Ci0gIH0KLSAgbXNnLndyYXBwZXJzX1tmaWVsZE51bWJlcl0gPSB2YWx1ZTsKLSAg
anNwYi5NZXNzYWdlLnNldEZpZWxkKG1zZywgZmllbGROdW1iZXIsIGRhdGEpOwotfTsKLQotCi0v
KioKLSAqIENvbnZlcnRzIGEgSnNQYiByZXBlYXRlZCBtZXNzYWdlIGZpZWxkIGludG8gYSBtYXAu
IFRoZSBtYXAgd2lsbCBjb250YWluCi0gKiBwcm90b3MgdW5sZXNzIGFuIG9wdGlvbmFsIHRvT2Jq
ZWN0IGZ1bmN0aW9uIGlzIGdpdmVuLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwKLSAqIGNvbnRhaW4g
b2JqZWN0cyBzdWl0YWJsZSBmb3IgU295IHJlbmRlcmluZy4KLSAqIEBwYXJhbSB7IUFycmF5PFQ+
fSBmaWVsZCBUaGUgcmVwZWF0ZWQgbWVzc2FnZSBmaWVsZCB0byBiZQotICogICAgIGNvbnZlcnRl
ZC4KLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKSA6IHN0cmluZz99IG1hcEtleUdldHRlckZuIFRoZSBm
dW5jdGlvbiB0byBnZXQgdGhlIGtleSBvZgotICogICAgIHRoZSBtYXAuCi0gKiBAcGFyYW0gez9m
dW5jdGlvbihib29sZWFuPSk6IE9iamVjdHwKLSAqICAgICBmdW5jdGlvbigoYm9vbGVhbnx1bmRl
ZmluZWQpLFQpOiBPYmplY3R9IG9wdF90b09iamVjdEZuIFRoZQotICogICAgIHRvT2JqZWN0IGZ1
bmN0aW9uIGZvciB0aGlzIGZpZWxkLiBXZSBuZWVkIHRvIHBhc3MgdGhpcyBmb3IgZWZmZWN0aXZl
Ci0gKiAgICAgZGVhZCBjb2RlIHJlbW92YWwuCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5j
bHVkZUluc3RhbmNlIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgSlNQQiBpbnN0YW5jZQotICogICAg
IGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6IGh0dHA6Ly9nb3RvL3NveS1wYXJh
bS1taWdyYXRpb24KLSAqIEByZXR1cm4geyFPYmplY3QuPHN0cmluZywgT2JqZWN0Pn0gQSBtYXAg
b2YgcHJvdG8gb3IgU295IG9iamVjdHMuCi0gKiBAdGVtcGxhdGUgVAotICovCi1qc3BiLk1lc3Nh
Z2UudG9NYXAgPSBmdW5jdGlvbigKLSAgICBmaWVsZCwgbWFwS2V5R2V0dGVyRm4sIG9wdF90b09i
amVjdEZuLCBvcHRfaW5jbHVkZUluc3RhbmNlKSB7Ci0gIHZhciByZXN1bHQgPSB7fTsKLSAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBmaWVsZC5sZW5ndGg7IGkrKykgewotICAgIHJlc3VsdFttYXBLZXlH
ZXR0ZXJGbi5jYWxsKGZpZWxkW2ldKV0gPSBvcHRfdG9PYmplY3RGbiA/Ci0gICAgICAgIG9wdF90
b09iamVjdEZuLmNhbGwoZmllbGRbaV0sIG9wdF9pbmNsdWRlSW5zdGFuY2UsCi0gICAgICAgICAg
ICAvKiogQHR5cGUgeyFqc3BiLk1lc3NhZ2V9ICovIChmaWVsZFtpXSkpIDogZmllbGRbaV07Ci0g
IH0KLSAgcmV0dXJuIHJlc3VsdDsKLX07Ci0KLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBpbnRlcm5h
bCBhcnJheSBvZiB0aGlzIHByb3RvLgotICogPHA+Tm90ZTogSWYgeW91IHVzZSB0aGlzIGFycmF5
IHRvIGNvbnN0cnVjdCBhIHNlY29uZCBwcm90bywgdGhlIGNvbnRlbnQKLSAqIHdvdWxkIHRoZW4g
YmUgcGFydGlhbGx5IHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gcHJvdG9zLgotICogQHJldHVybiB7
IUFycmF5fSBUaGUgcHJvdG8gcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkuCi0gKi8KLWpzcGIuTWVz
c2FnZS5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkgewotICByZXR1cm4gdGhpcy5hcnJh
eTsKLX07Ci0KLQotCi0KLS8qKgotICogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgaW50ZXJuYWwgZGF0YSBhcnJheSBvZiB0aGlzIHByb3RvLgotICogPHA+Tk9URTogVGhp
cyBzdHJpbmcgaXMgKm5vdCogc3VpdGFibGUgZm9yIHVzZSBpbiBzZXJ2ZXIgcmVxdWVzdHMuCi0g
KiBAcmV0dXJuIHtzdHJpbmd9IEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8u
Ci0gKiBAb3ZlcnJpZGUKLSAqLwotanNwYi5NZXNzYWdlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1
bmN0aW9uKCkgewotICByZXR1cm4gdGhpcy5hcnJheS50b1N0cmluZygpOwotfTsKLQotCi0vKioK
LSAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBleHRlbnNpb24gZmllbGQgZnJvbSB0aGUgZXh0ZW5k
ZWQgb2JqZWN0LgotICogQHBhcmFtIHtqc3BiLkV4dGVuc2lvbkZpZWxkSW5mby48VD59IGZpZWxk
SW5mbyBTcGVjaWZpZXMgdGhlIGZpZWxkIHRvIGdldC4KLSAqIEByZXR1cm4ge1R9IFRoZSB2YWx1
ZSBvZiB0aGUgZmllbGQuCi0gKiBAdGVtcGxhdGUgVAotICovCi1qc3BiLk1lc3NhZ2UucHJvdG90
eXBlLmdldEV4dGVuc2lvbiA9IGZ1bmN0aW9uKGZpZWxkSW5mbykgewotICBpZiAoIXRoaXMuZXh0
ZW5zaW9uT2JqZWN0XykgewotICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gIH0KLSAgaWYgKCF0aGlz
LndyYXBwZXJzXykgewotICAgIHRoaXMud3JhcHBlcnNfID0ge307Ci0gIH0KLSAgdmFyIGZpZWxk
TnVtYmVyID0gZmllbGRJbmZvLmZpZWxkSW5kZXg7Ci0gIGlmIChmaWVsZEluZm8uaXNSZXBlYXRl
ZCkgewotICAgIGlmIChmaWVsZEluZm8uaXNNZXNzYWdlVHlwZSgpKSB7Ci0gICAgICBpZiAoIXRo
aXMud3JhcHBlcnNfW2ZpZWxkTnVtYmVyXSkgewotICAgICAgICB0aGlzLndyYXBwZXJzX1tmaWVs
ZE51bWJlcl0gPQotICAgICAgICAgICAgZ29vZy5hcnJheS5tYXAodGhpcy5leHRlbnNpb25PYmpl
Y3RfW2ZpZWxkTnVtYmVyXSB8fCBbXSwKLSAgICAgICAgICAgICAgICBmdW5jdGlvbihhcnIpIHsK
LSAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZmllbGRJbmZvLmN0b3IoYXJyKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLndyYXBwZXJzX1tmaWVs
ZE51bWJlcl07Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbk9iamVj
dF9bZmllbGROdW1iZXJdOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoZmllbGRJbmZvLmlz
TWVzc2FnZVR5cGUoKSkgewotICAgICAgaWYgKCF0aGlzLndyYXBwZXJzX1tmaWVsZE51bWJlcl0g
JiYgdGhpcy5leHRlbnNpb25PYmplY3RfW2ZpZWxkTnVtYmVyXSkgewotICAgICAgICB0aGlzLndy
YXBwZXJzX1tmaWVsZE51bWJlcl0gPSBuZXcgZmllbGRJbmZvLmN0b3IoCi0gICAgICAgICAgICAv
KiogQHR5cGUge0FycmF5fHVuZGVmaW5lZH0gKi8gKAotICAgICAgICAgICAgICAgIHRoaXMuZXh0
ZW5zaW9uT2JqZWN0X1tmaWVsZE51bWJlcl0pKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlz
LndyYXBwZXJzX1tmaWVsZE51bWJlcl07Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiB0aGlz
LmV4dGVuc2lvbk9iamVjdF9bZmllbGROdW1iZXJdOwotICAgIH0KLSAgfQotfTsKLQotCi0vKioK
LSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBleHRlbnNpb24gZmllbGQgaW4gdGhlIGV4dGVuZGVk
IG9iamVjdC4KLSAqIEBwYXJhbSB7anNwYi5FeHRlbnNpb25GaWVsZEluZm99IGZpZWxkSW5mbyBT
cGVjaWZpZXMgdGhlIGZpZWxkIHRvIHNldC4KLSAqIEBwYXJhbSB7anNwYi5NZXNzYWdlfHN0cmlu
Z3xVaW50OEFycmF5fG51bWJlcnxib29sZWFufEFycmF5P30gdmFsdWUgVGhlIHZhbHVlCi0gKiAg
ICAgdG8gc2V0LgotICovCi1qc3BiLk1lc3NhZ2UucHJvdG90eXBlLnNldEV4dGVuc2lvbiA9IGZ1
bmN0aW9uKGZpZWxkSW5mbywgdmFsdWUpIHsKLSAgaWYgKCF0aGlzLndyYXBwZXJzXykgewotICAg
IHRoaXMud3JhcHBlcnNfID0ge307Ci0gIH0KLSAganNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5
RXh0ZW5zaW9uT2JqZWN0Xyh0aGlzKTsKLSAgdmFyIGZpZWxkTnVtYmVyID0gZmllbGRJbmZvLmZp
ZWxkSW5kZXg7Ci0gIGlmIChmaWVsZEluZm8uaXNSZXBlYXRlZCkgewotICAgIHZhbHVlID0gdmFs
dWUgfHwgW107Ci0gICAgaWYgKGZpZWxkSW5mby5pc01lc3NhZ2VUeXBlKCkpIHsKLSAgICAgIHRo
aXMud3JhcHBlcnNfW2ZpZWxkTnVtYmVyXSA9IHZhbHVlOwotICAgICAgdGhpcy5leHRlbnNpb25P
YmplY3RfW2ZpZWxkTnVtYmVyXSA9IGdvb2cuYXJyYXkubWFwKAotICAgICAgICAgIC8qKiBAdHlw
ZSB7QXJyYXk8anNwYi5NZXNzYWdlPn0gKi8gKHZhbHVlKSwgZnVuY3Rpb24obXNnKSB7Ci0gICAg
ICAgIHJldHVybiBtc2cudG9BcnJheSgpOwotICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tmaWVsZE51bWJlcl0gPSB2YWx1ZTsKLSAgICB9Ci0gIH0g
ZWxzZSB7Ci0gICAgaWYgKGZpZWxkSW5mby5pc01lc3NhZ2VUeXBlKCkpIHsKLSAgICAgIHRoaXMu
d3JhcHBlcnNfW2ZpZWxkTnVtYmVyXSA9IHZhbHVlOwotICAgICAgdGhpcy5leHRlbnNpb25PYmpl
Y3RfW2ZpZWxkTnVtYmVyXSA9IHZhbHVlID8gdmFsdWUudG9BcnJheSgpIDogdmFsdWU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tmaWVsZE51bWJlcl0gPSB2YWx1
ZTsKLSAgICB9Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBDcmVhdGVzIGEgZGlmZmVyZW5jZSBvYmpl
Y3QgYmV0d2VlbiB0d28gbWVzc2FnZXMuCi0gKgotICogVGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4g
dGhlIHRvcC1sZXZlbCBmaWVsZHMgb2YgbTIgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBvZgotICog
bTEgYXQgYW55IGxldmVsIG9mIG5lc3RpbmcuIE5vIGRhdGEgaXMgY2xvbmVkLCB0aGUgcmVzdWx0
IG9iamVjdCB3aWxsCi0gKiBzaGFyZSBpdHMgdG9wLWxldmVsIGVsZW1lbnRzIHdpdGggbTIgKGJ1
dCBub3Qgd2l0aCBtMSkuCi0gKgotICogTm90ZSB0aGF0IHJlcGVhdGVkIGZpZWxkcyBzaG91bGQg
bm90IGhhdmUgbnVsbC91bmRlZmluZWQgZWxlbWVudHMsIGJ1dCBpZgotICogdGhleSBkbywgdGhp
cyBvcGVyYXRpb24gd2lsbCB0cmVhdCByZXBlYXRlZCBmaWVsZHMgb2YgZGlmZmVyZW50IGxlbmd0
aCBhcwotICogdGhlIHNhbWUgaWYgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gaXMg
ZHVlIHRvIHRyYWlsaW5nCi0gKiBudWxsL3VuZGVmaW5lZCB2YWx1ZXMuCi0gKgotICogQHBhcmFt
IHshanNwYi5NZXNzYWdlfSBtMSBUaGUgZmlyc3QgbWVzc2FnZSBvYmplY3QuCi0gKiBAcGFyYW0g
eyFqc3BiLk1lc3NhZ2V9IG0yIFRoZSBzZWNvbmQgbWVzc2FnZSBvYmplY3QuCi0gKiBAcmV0dXJu
IHshanNwYi5NZXNzYWdlfSBUaGUgZGlmZmVyZW5jZSByZXR1cm5lZCBhcyBhIHByb3RvIG1lc3Nh
Z2UuCi0gKiAgICAgTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBtZXNzYWdlIG1heSBiZSBtaXNzaW5n
IHJlcXVpcmVkIGZpZWxkcy4gVGhpcyBpcwotICogICAgIGN1cnJlbnRseSB0b2xlcmF0ZWQgaW4g
SnMsIGJ1dCB3b3VsZCBjYXVzZSBhbiBlcnJvciBpZiB5b3UgdHJpZWQgdG8KLSAqICAgICBzZW5k
IHN1Y2ggYSBwcm90byB0byB0aGUgc2VydmVyLiBZb3UgY2FuIGFjY2VzcyB0aGUgcmF3IGRpZmZl
cmVuY2UKLSAqICAgICBhcnJheSB3aXRoIHJlc3VsdC50b0FycmF5KCkuCi0gKiBAdGhyb3dzIHtF
cnJvcn0gSWYgdGhlIG1lc3NhZ2VzIGFyZSByZXNwb25zZXMgd2l0aCBkaWZmZXJlbnQgdHlwZXMu
Ci0gKi8KLWpzcGIuTWVzc2FnZS5kaWZmZXJlbmNlID0gZnVuY3Rpb24obTEsIG0yKSB7Ci0gIGlm
ICghKG0xIGluc3RhbmNlb2YgbTIuY29uc3RydWN0b3IpKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9y
KCdNZXNzYWdlcyBoYXZlIGRpZmZlcmVudCB0eXBlcy4nKTsKLSAgfQotICB2YXIgYXJyMSA9IG0x
LnRvQXJyYXkoKTsKLSAgdmFyIGFycjIgPSBtMi50b0FycmF5KCk7Ci0gIHZhciByZXMgPSBbXTsK
LSAgdmFyIHN0YXJ0ID0gMDsKLSAgdmFyIGxlbmd0aCA9IGFycjEubGVuZ3RoID4gYXJyMi5sZW5n
dGggPyBhcnIxLmxlbmd0aCA6IGFycjIubGVuZ3RoOwotICBpZiAobTEuZ2V0SnNQYk1lc3NhZ2VJ
ZCgpKSB7Ci0gICAgcmVzWzBdID0gbTEuZ2V0SnNQYk1lc3NhZ2VJZCgpOwotICAgIHN0YXJ0ID0g
MTsKLSAgfQotICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgewotICAgIGlm
ICghanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHMoYXJyMVtpXSwgYXJyMltpXSkpIHsKLSAgICAg
IHJlc1tpXSA9IGFycjJbaV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBuZXcgbTEuY29uc3RydWN0
b3IocmVzKTsKLX07Ci0KLQotLyoqCi0gKiBUZXN0cyB3aGV0aGVyIHR3byBtZXNzYWdlcyBhcmUg
ZXF1YWwuCi0gKiBAcGFyYW0ge2pzcGIuTWVzc2FnZXx1bmRlZmluZWR9IG0xIFRoZSBmaXJzdCBt
ZXNzYWdlIG9iamVjdC4KLSAqIEBwYXJhbSB7anNwYi5NZXNzYWdlfHVuZGVmaW5lZH0gbTIgVGhl
IHNlY29uZCBtZXNzYWdlIG9iamVjdC4KLSAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYm90
aCBtZXNzYWdlcyBhcmUgbnVsbC91bmRlZmluZWQsIG9yIGlmIGJvdGggYXJlCi0gKiAgICAgb2Yg
dGhlIHNhbWUgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBmaWVsZCB2YWx1ZXMuCi0gKi8KLWpzcGIu
TWVzc2FnZS5lcXVhbHMgPSBmdW5jdGlvbihtMSwgbTIpIHsKLSAgcmV0dXJuIG0xID09IG0yIHx8
ICghIShtMSAmJiBtMikgJiYgKG0xIGluc3RhbmNlb2YgbTIuY29uc3RydWN0b3IpICYmCi0gICAg
ICBqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhtMS50b0FycmF5KCksIG0yLnRvQXJyYXkoKSkp
OwotfTsKLQotCi0vKioKLSAqIENvbXBhcmVzIHR3byBtZXNzYWdlIGV4dGVuc2lvbiBmaWVsZHMg
cmVjdXJzaXZlbHkuCi0gKiBAcGFyYW0geyFPYmplY3R9IGV4dGVuc2lvbjEgVGhlIGZpcnN0IGZp
ZWxkLgotICogQHBhcmFtIHshT2JqZWN0fSBleHRlbnNpb24yIFRoZSBzZWNvbmQgZmllbGQuCi0g
KiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRoZSBleHRlbnNpb25zIGFyZSBudWxsL3VuZGVm
aW5lZCwgb3Igb3RoZXJ3aXNlCi0gKiAgICAgZXF1YWwuCi0gKi8KLWpzcGIuTWVzc2FnZS5jb21w
YXJlRXh0ZW5zaW9ucyA9IGZ1bmN0aW9uKGV4dGVuc2lvbjEsIGV4dGVuc2lvbjIpIHsKLSAgZXh0
ZW5zaW9uMSA9IGV4dGVuc2lvbjEgfHwge307Ci0gIGV4dGVuc2lvbjIgPSBleHRlbnNpb24yIHx8
IHt9OwotCi0gIHZhciBrZXlzID0ge307Ci0gIGZvciAodmFyIG5hbWUgaW4gZXh0ZW5zaW9uMSkg
ewotICAgIGtleXNbbmFtZV0gPSAwOwotICB9Ci0gIGZvciAodmFyIG5hbWUgaW4gZXh0ZW5zaW9u
MikgewotICAgIGtleXNbbmFtZV0gPSAwOwotICB9Ci0gIGZvciAobmFtZSBpbiBrZXlzKSB7Ci0g
ICAgaWYgKCFqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhleHRlbnNpb24xW25hbWVdLCBleHRl
bnNpb24yW25hbWVdKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICByZXR1
cm4gdHJ1ZTsKLX07Ci0KLQotLyoqCi0gKiBDb21wYXJlcyB0d28gbWVzc2FnZSBmaWVsZHMgcmVj
dXJzaXZlbHkuCi0gKiBAcGFyYW0geyp9IGZpZWxkMSBUaGUgZmlyc3QgZmllbGQuCi0gKiBAcGFy
YW0geyp9IGZpZWxkMiBUaGUgc2Vjb25kIGZpZWxkLgotICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1
ZSBpZiB0aGUgZmllbGRzIGFyZSBudWxsL3VuZGVmaW5lZCwgb3Igb3RoZXJ3aXNlIGVxdWFsLgot
ICovCi1qc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyA9IGZ1bmN0aW9uKGZpZWxkMSwgZmllbGQy
KSB7Ci0gIC8vIElmIHRoZSBmaWVsZHMgYXJlIHRyaXZpYWxseSBlcXVhbCwgdGhleSdyZSBlcXVh
bC4KLSAgaWYgKGZpZWxkMSA9PSBmaWVsZDIpIHJldHVybiB0cnVlOwotCi0gIC8vIElmIHRoZSBm
aWVsZHMgYXJlbid0IHRyaXZpYWxseSBlcXVhbCBhbmQgb25lIG9mIHRoZW0gaXNuJ3QgYW4gb2Jq
ZWN0LAotICAvLyB0aGV5IGNhbid0IHBvc3NpYmx5IGJlIGVxdWFsLgotICBpZiAoIWdvb2cuaXNP
YmplY3QoZmllbGQxKSB8fCAhZ29vZy5pc09iamVjdChmaWVsZDIpKSB7Ci0gICAgcmV0dXJuIGZh
bHNlOwotICB9Ci0KLSAgLy8gV2UgaGF2ZSB0d28gb2JqZWN0cy4gSWYgdGhleSdyZSBkaWZmZXJl
bnQgdHlwZXMsIHRoZXkncmUgbm90IGVxdWFsLgotICBmaWVsZDEgPSAvKiogQHR5cGUgeyFPYmpl
Y3R9ICovKGZpZWxkMSk7Ci0gIGZpZWxkMiA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8oZmllbGQy
KTsKLSAgaWYgKGZpZWxkMS5jb25zdHJ1Y3RvciAhPSBmaWVsZDIuY29uc3RydWN0b3IpIHJldHVy
biBmYWxzZTsKLQotICAvLyBJZiBib3RoIGFyZSBVaW50OEFycmF5cywgY29tcGFyZSB0aGVtIGVs
ZW1lbnQtYnktZWxlbWVudC4KLSAgaWYgKGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZ
XyAmJiBmaWVsZDEuY29uc3RydWN0b3IgPT09IFVpbnQ4QXJyYXkpIHsKLSAgICB2YXIgYnl0ZXMx
ID0gLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi8oZmllbGQxKTsKLSAgICB2YXIgYnl0ZXMyID0g
LyoqIEB0eXBlIHshVWludDhBcnJheX0gKi8oZmllbGQyKTsKLSAgICBpZiAoYnl0ZXMxLmxlbmd0
aCAhPSBieXRlczIubGVuZ3RoKSByZXR1cm4gZmFsc2U7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBieXRlczEubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChieXRlczFbaV0gIT0gYnl0ZXMyW2ld
KSByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gSWYg
dGhleSdyZSBib3RoIEFycmF5cywgY29tcGFyZSB0aGVtIGVsZW1lbnQgYnkgZWxlbWVudCBleGNl
cHQgZm9yIHRoZQotICAvLyBvcHRpb25hbCBleHRlbnNpb24gb2JqZWN0cyBhdCB0aGUgZW5kLCB3
aGljaCB3ZSBjb21wYXJlIHNlcGFyYXRlbHkuCi0gIGlmIChmaWVsZDEuY29uc3RydWN0b3IgPT09
IEFycmF5KSB7Ci0gICAgdmFyIGV4dGVuc2lvbjEgPSB1bmRlZmluZWQ7Ci0gICAgdmFyIGV4dGVu
c2lvbjIgPSB1bmRlZmluZWQ7Ci0KLSAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoZmllbGQxLmxl
bmd0aCwgZmllbGQyLmxlbmd0aCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgdmFyIHZhbDEgPSBmaWVsZDFbaV07Ci0gICAgICB2YXIgdmFsMiA9IGZpZWxk
MltpXTsKLQotICAgICAgaWYgKHZhbDEgJiYgKHZhbDEuY29uc3RydWN0b3IgPT0gT2JqZWN0KSkg
ewotICAgICAgICBnb29nLmFzc2VydHMuYXNzZXJ0KGV4dGVuc2lvbjEgPT09IHVuZGVmaW5lZCk7
Ci0gICAgICAgIGdvb2cuYXNzZXJ0cy5hc3NlcnQoaSA9PT0gZmllbGQxLmxlbmd0aCAtIDEpOwot
ICAgICAgICBleHRlbnNpb24xID0gdmFsMTsKLSAgICAgICAgdmFsMSA9IHVuZGVmaW5lZDsKLSAg
ICAgIH0KLQotICAgICAgaWYgKHZhbDIgJiYgKHZhbDIuY29uc3RydWN0b3IgPT0gT2JqZWN0KSkg
ewotICAgICAgICBnb29nLmFzc2VydHMuYXNzZXJ0KGV4dGVuc2lvbjIgPT09IHVuZGVmaW5lZCk7
Ci0gICAgICAgIGdvb2cuYXNzZXJ0cy5hc3NlcnQoaSA9PT0gZmllbGQyLmxlbmd0aCAtIDEpOwot
ICAgICAgICBleHRlbnNpb24yID0gdmFsMjsKLSAgICAgICAgdmFsMiA9IHVuZGVmaW5lZDsKLSAg
ICAgIH0KLQotICAgICAgaWYgKCFqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyh2YWwxLCB2YWwy
KSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGV4
dGVuc2lvbjEgfHwgZXh0ZW5zaW9uMikgewotICAgICAgZXh0ZW5zaW9uMSA9IGV4dGVuc2lvbjEg
fHwge307Ci0gICAgICBleHRlbnNpb24yID0gZXh0ZW5zaW9uMiB8fCB7fTsKLSAgICAgIHJldHVy
biBqc3BiLk1lc3NhZ2UuY29tcGFyZUV4dGVuc2lvbnMoZXh0ZW5zaW9uMSwgZXh0ZW5zaW9uMik7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBJZiB0aGV5J3JlIGJvdGgg
cGxhaW4gT2JqZWN0cyAoaS5lLiBleHRlbnNpb25zKSwgY29tcGFyZSB0aGVtIGFzCi0gIC8vIGV4
dGVuc2lvbnMuCi0gIGlmIChmaWVsZDEuY29uc3RydWN0b3IgPT09IE9iamVjdCkgewotICAgIHJl
dHVybiBqc3BiLk1lc3NhZ2UuY29tcGFyZUV4dGVuc2lvbnMoZmllbGQxLCBmaWVsZDIpOwotICB9
Ci0KLSAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGUgaW4gSlNQQiBhcnJheScpOwotfTsK
LQotCi0vKioKLSAqIFN0YXRpYyBjbG9uZSBmdW5jdGlvbi4gTk9URTogQSB0eXBlLXNhZmUgbWV0
aG9kIGNhbGxlZCAiY2xvbmVNZXNzYWdlIiBleGlzdHMKLSAqIG9uIGVhY2ggZ2VuZXJhdGVkIEpz
UGIgY2xhc3MuIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuCi0gKiBAcGFyYW0g
eyFqc3BiLk1lc3NhZ2V9IG1zZyBBIG1lc3NhZ2UgdG8gY2xvbmUuCi0gKiBAcmV0dXJuIHshanNw
Yi5NZXNzYWdlfSBBIGRlZXAgY2xvbmUgb2YgdGhlIGdpdmVuIG1lc3NhZ2UuCi0gKi8KLWpzcGIu
TWVzc2FnZS5jbG9uZSA9IGZ1bmN0aW9uKG1zZykgewotICAvLyBBbHRob3VnaCB3ZSBjb3VsZCBp
bmNsdWRlIHRoZSB3cmFwcGVycywgd2UgbGVhdmUgdGhlbSBvdXQgaGVyZS4KLSAgcmV0dXJuIGpz
cGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2UobXNnKTsKLX07Ci0KLQotLyoqCi0gKiBAcGFyYW0geyFq
c3BiLk1lc3NhZ2V9IG1zZyBBIG1lc3NhZ2UgdG8gY2xvbmUuCi0gKiBAcmV0dXJuIHshanNwYi5N
ZXNzYWdlfSBBIGRlZXAgY2xvbmUgb2YgdGhlIGdpdmVuIG1lc3NhZ2UuCi0gKiBAcHJvdGVjdGVk
Ci0gKi8KLWpzcGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2UgPSBmdW5jdGlvbihtc2cpIHsKLSAgLy8g
QWx0aG91Z2ggd2UgY291bGQgaW5jbHVkZSB0aGUgd3JhcHBlcnMsIHdlIGxlYXZlIHRoZW0gb3V0
IGhlcmUuCi0gIHJldHVybiBuZXcgbXNnLmNvbnN0cnVjdG9yKGpzcGIuTWVzc2FnZS5jbG9uZV8o
bXNnLnRvQXJyYXkoKSkpOwotfTsKLQotCi0vKioKLSAqIFRha2VzIDIgbWVzc2FnZXMgb2YgdGhl
IHNhbWUgdHlwZSBhbmQgY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlyc3QKLSAqIG1lc3Nh
Z2UgaW50byB0aGUgc2Vjb25kLiBBZnRlciB0aGlzIHRoZSAyIG1lc3NhZ2VzIHdpbGwgZXF1YWxz
IGluIHRlcm1zIG9mCi0gKiB2YWx1ZSBzZW1hbnRpY3MgYnV0IHNoYXJlIG5vIHN0YXRlLiBBbGwg
ZGF0YSBpbiB0aGUgZGVzdGluYXRpb24gbWVzc2FnZSB3aWxsCi0gKiBiZSBvdmVycmlkZGVuLgot
ICoKLSAqIEBwYXJhbSB7TUVTU0FHRX0gZnJvbU1lc3NhZ2UgTWVzc2FnZSB0aGF0IHdpbGwgYmUg
Y29waWVkIGludG8gdG9NZXNzYWdlLgotICogQHBhcmFtIHtNRVNTQUdFfSB0b01lc3NhZ2UgTWVz
c2FnZSB3aGljaCB3aWxsIHJlY2VpdmUgYSBjb3B5IG9mIGZyb21NZXNzYWdlCi0gKiAgICAgYXMg
aXRzIGNvbnRlbnRzLgotICogQHRlbXBsYXRlIE1FU1NBR0UKLSAqLwotanNwYi5NZXNzYWdlLmNv
cHlJbnRvID0gZnVuY3Rpb24oZnJvbU1lc3NhZ2UsIHRvTWVzc2FnZSkgewotICBnb29nLmFzc2Vy
dHMuYXNzZXJ0SW5zdGFuY2VvZihmcm9tTWVzc2FnZSwganNwYi5NZXNzYWdlKTsKLSAgZ29vZy5h
c3NlcnRzLmFzc2VydEluc3RhbmNlb2YodG9NZXNzYWdlLCBqc3BiLk1lc3NhZ2UpOwotICBnb29n
LmFzc2VydHMuYXNzZXJ0KGZyb21NZXNzYWdlLmNvbnN0cnVjdG9yID09IHRvTWVzc2FnZS5jb25z
dHJ1Y3RvciwKLSAgICAgICdDb3B5IHNvdXJjZSBhbmQgdGFyZ2V0IG1lc3NhZ2Ugc2hvdWxkIGhh
dmUgdGhlIHNhbWUgdHlwZS4nKTsKLSAgdmFyIGNvcHlPZkZyb20gPSBqc3BiLk1lc3NhZ2UuY2xv
bmUoZnJvbU1lc3NhZ2UpOwotCi0gIHZhciB0byA9IHRvTWVzc2FnZS50b0FycmF5KCk7Ci0gIHZh
ciBmcm9tID0gY29weU9mRnJvbS50b0FycmF5KCk7Ci0KLSAgLy8gRW1wdHkgZGVzdGluYXRpb24g
aW4gY2FzZSBpdCBoYXMgbW9yZSB2YWx1ZXMgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0gIHRv
Lmxlbmd0aCA9IDA7Ci0gIC8vIGFuZCB0aGVuIGNvcHkgZXZlcnl0aGluZyBmcm9tIHRoZSBuZXcg
dG8gdGhlIGV4aXN0aW5nIG1lc3NhZ2UuCi0gIGZvciAodmFyIGkgPSAwOyBpIDwgZnJvbS5sZW5n
dGg7IGkrKykgewotICAgIHRvW2ldID0gZnJvbVtpXTsKLSAgfQotCi0gIC8vIFRoaXMgaXMgZWl0
aGVyIG51bGwgb3IgZW1wdHkgZm9yIGEgZnJlc2ggY29weS4KLSAgdG9NZXNzYWdlLndyYXBwZXJz
XyA9IGNvcHlPZkZyb20ud3JhcHBlcnNfOwotICAvLyBKdXN0IGEgcmVmZXJlbmNlIGludG8gdGhl
IHNoYXJlZCBhcnJheS4KLSAgdG9NZXNzYWdlLmV4dGVuc2lvbk9iamVjdF8gPSBjb3B5T2ZGcm9t
LmV4dGVuc2lvbk9iamVjdF87Ci19OwotCi0KLS8qKgotICogSGVscGVyIGZvciBjbG9uaW5nIGFu
IGludGVybmFsIEpzUGIgb2JqZWN0LgotICogQHBhcmFtIHshT2JqZWN0fSBvYmogQSBKc1BiIG9i
amVjdCwgZWcsIGEgZmllbGQsIHRvIGJlIGNsb25lZC4KLSAqIEByZXR1cm4geyFPYmplY3R9IEEg
Y2xvbmUgb2YgdGhlIGlucHV0IG9iamVjdC4KLSAqIEBwcml2YXRlCi0gKi8KLWpzcGIuTWVzc2Fn
ZS5jbG9uZV8gPSBmdW5jdGlvbihvYmopIHsKLSAgdmFyIG87Ci0gIGlmIChnb29nLmlzQXJyYXko
b2JqKSkgewotICAgIC8vIEFsbG9jYXRlIGFycmF5IG9mIGNvcnJlY3Qgc2l6ZS4KLSAgICB2YXIg
Y2xvbmVkQXJyYXkgPSBuZXcgQXJyYXkob2JqLmxlbmd0aCk7Ci0gICAgLy8gVXNlIGFycmF5IGl0
ZXJhdGlvbiB3aGVyZSBwb3NzaWJsZSBiZWNhdXNlIGl0IGlzIGZhc3RlciB0aGFuIGZvci1pbi4K
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKChv
ID0gb2JqW2ldKSAhPSBudWxsKSB7Ci0gICAgICAgIGNsb25lZEFycmF5W2ldID0gdHlwZW9mIG8g
PT0gJ29iamVjdCcgPyBqc3BiLk1lc3NhZ2UuY2xvbmVfKG8pIDogbzsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGNsb25lZEFycmF5OwotICB9Ci0gIHZhciBjbG9uZSA9IHt9OwotICBmb3Ig
KHZhciBrZXkgaW4gb2JqKSB7Ci0gICAgaWYgKChvID0gb2JqW2tleV0pICE9IG51bGwpIHsKLSAg
ICAgIGNsb25lW2tleV0gPSB0eXBlb2YgbyA9PSAnb2JqZWN0JyA/IGpzcGIuTWVzc2FnZS5jbG9u
ZV8obykgOiBvOwotICAgIH0KLSAgfQotICByZXR1cm4gY2xvbmU7Ci19OwotCi0KLS8qKgotICog
UmVnaXN0ZXJzIGEgSnNQYiBtZXNzYWdlIHR5cGUgaWQgd2l0aCBpdHMgY29uc3RydWN0b3IuCi0g
KiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIGlkIGZvciB0aGlzIHR5cGUgb2YgbWVzc2FnZS4KLSAq
IEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yIFRoZSBtZXNzYWdlIGNvbnN0cnVjdG9yLgot
ICovCi1qc3BiLk1lc3NhZ2UucmVnaXN0ZXJNZXNzYWdlVHlwZSA9IGZ1bmN0aW9uKGlkLCBjb25z
dHJ1Y3RvcikgewotICBqc3BiLk1lc3NhZ2UucmVnaXN0cnlfW2lkXSA9IGNvbnN0cnVjdG9yOwot
ICAvLyBUaGlzIGlzIG5lZWRlZCBzbyB3ZSBjYW4gbGF0ZXIgYWNjZXNzIG1lc3NhZ2VJZCBkaXJl
Y3RseSBvbiB0aGUgY29udHJ1Y3RvciwKLSAgLy8gb3RoZXJ3aXNlIGl0IGlzIG5vdCBhdmFpbGFi
bGUgZHVlIHRvICdwcm9wZXJ0eSBjb2xsYXBzaW5nJyBieSB0aGUgY29tcGlsZXIuCi0gIGNvbnN0
cnVjdG9yLm1lc3NhZ2VJZCA9IGlkOwotfTsKLQotCi0vKioKLSAqIFRoZSByZWdpc3RyeSBvZiBt
ZXNzYWdlIGlkcyB0byBtZXNzYWdlIGNvbnN0cnVjdG9ycy4KLSAqIEBwcml2YXRlCi0gKi8KLWpz
cGIuTWVzc2FnZS5yZWdpc3RyeV8gPSB7fTsKLQotCi0vKioKLSAqIFRoZSBleHRlbnNpb25zIHJl
Z2lzdGVyZWQgb24gTWVzc2FnZVNldC4gVGhpcyBpcyBhIG1hcCBvZiBleHRlbnNpb24KLSAqIGZp
ZWxkIG51bWJlciB0byBmaWVsZCBpbmZvIG9iamVjdC4gVGhpcyBzaG91bGQgYmUgY29uc2lkZXJl
ZCBhcyBhCi0gKiBwcml2YXRlIEFQSS4KLSAqCi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gW2pzcGIg
Y2xhc3MgbmFtZV0uZXh0ZW5zaW9ucyBvYmplY3QgZm9yCi0gKiBub24tTWVzc2FnZVNldC4gV2Ug
c3BlY2lhbCBjYXNlIE1lc3NhZ2VTZXQgc28gdGhhdCB3ZSBkbyBub3QgbmVlZAotICogdG8gZ29v
Zy5yZXF1aXJlIE1lc3NhZ2VTZXQgZnJvbSBjbGFzc2VzIHRoYXQgZXh0ZW5kcyBNZXNzYWdlU2V0
LgotICoKLSAqIEB0eXBlIHshT2JqZWN0LjxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJbmZv
Pn0KLSAqLwotanNwYi5NZXNzYWdlLm1lc3NhZ2VTZXRFeHRlbnNpb25zID0ge307CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2pzL21lc3NhZ2VfdGVzdC5qcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvbWVzc2FnZV90ZXN0LmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMWFkZDVmMWRkMjc5ZDliMWE2YzRmYTdmMjllY2NjYTQ5ODA3NzBh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvbWVzc2Fn
ZV90ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTAxMCArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVGVzdCBzdWl0ZSBpcyB3cml0dGVuIHVzaW5nIEph
c21pbmUgLS0gc2VlIGh0dHA6Ly9qYXNtaW5lLmdpdGh1Yi5pby8KLQotZ29vZy5zZXRUZXN0T25s
eSgpOwotCi1nb29nLnJlcXVpcmUoJ2dvb2cuanNvbicpOwotZ29vZy5yZXF1aXJlKCdnb29nLnRl
c3RpbmcuYXNzZXJ0cycpOwotCi0vLyBDb21tb25KUy1Mb2FkRnJvbUZpbGU6IGdvb2dsZS1wcm90
b2J1ZiBqc3BiCi1nb29nLnJlcXVpcmUoJ2pzcGIuTWVzc2FnZScpOwotCi0vLyBDb21tb25KUy1M
b2FkRnJvbUZpbGU6IHRlc3Q1X3BiIHByb3RvLmpzcGIuZXh0dGVzdC5iZXRhCi1nb29nLnJlcXVp
cmUoJ3Byb3RvLmpzcGIuZXh0dGVzdC5iZXRhLmZsb2F0aW5nU3RyRmllbGQnKTsKLQotLy8gQ29t
bW9uSlMtTG9hZEZyb21GaWxlOiB0ZXN0M19wYiBwcm90by5qc3BiLmV4dHRlc3QKLWdvb2cucmVx
dWlyZSgncHJvdG8uanNwYi5leHR0ZXN0LmZsb2F0aW5nTXNnRmllbGQnKTsKLQotLy8gQ29tbW9u
SlMtTG9hZEZyb21GaWxlOiB0ZXN0NF9wYiBwcm90by5qc3BiLmV4dHRlc3QKLWdvb2cucmVxdWly
ZSgncHJvdG8uanNwYi5leHR0ZXN0LmZsb2F0aW5nTXNnRmllbGRUd28nKTsKLQotLy8gQ29tbW9u
SlMtTG9hZEZyb21GaWxlOiB0ZXN0X3BiIHByb3RvLmpzcGIudGVzdAotZ29vZy5yZXF1aXJlKCdw
cm90by5qc3BiLnRlc3QuQ2xvbmVFeHRlbnNpb24nKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNw
Yi50ZXN0LkNvbXBsZXgnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LkRlZmF1bHRW
YWx1ZXMnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LkVtcHR5Jyk7Ci1nb29nLnJl
cXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5FbnVtQ29udGFpbmVyJyk7Ci1nb29nLnJlcXVpcmUoJ3By
b3RvLmpzcGIudGVzdC5mbG9hdGluZ01zZ0ZpZWxkJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpz
cGIudGVzdC5GbG9hdGluZ1BvaW50RmllbGRzJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIu
dGVzdC5mbG9hdGluZ1N0ckZpZWxkJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5I
YXNFeHRlbnNpb25zJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5JbmRpcmVjdEV4
dGVuc2lvbicpOwotZ29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuSXNFeHRlbnNpb24nKTsK
LWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0Lk9wdGlvbmFsRmllbGRzJyk7Ci1nb29nLnJl
cXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5PdXRlckVudW0nKTsKLWdvb2cucmVxdWlyZSgncHJvdG8u
anNwYi50ZXN0Lk91dGVyTWVzc2FnZS5Db21wbGV4Jyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpz
cGIudGVzdC5TaW1wbGUxJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5TaW1wbGUy
Jyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5TcGVjaWFsQ2FzZXMnKTsKLWdvb2cu
cmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LlRlc3RDbG9uZScpOwotZ29vZy5yZXF1aXJlKCdwcm90
by5qc3BiLnRlc3QuVGVzdEdyb3VwJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5U
ZXN0R3JvdXAxJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5UZXN0TWVzc2FnZVdp
dGhPbmVvZicpOwotZ29vZy5yZXF1aXJlKCdwcm90by5qc3BiLnRlc3QuVGVzdFJlc2VydmVkTmFt
ZXMnKTsKLWdvb2cucmVxdWlyZSgncHJvdG8uanNwYi50ZXN0LlRlc3RSZXNlcnZlZE5hbWVzRXh0
ZW5zaW9uJyk7Ci0KLS8vIENvbW1vbkpTLUxvYWRGcm9tRmlsZTogdGVzdDJfcGIgcHJvdG8uanNw
Yi50ZXN0Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5FeHRlbnNpb25NZXNzYWdlJyk7
Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5UZXN0RXh0ZW5zaW9uc01lc3NhZ2UnKTsK
LQotCi0KLQotZGVzY3JpYmUoJ01lc3NhZ2UgdGVzdCBzdWl0ZScsIGZ1bmN0aW9uKCkgewotICBp
dCgndGVzdEVtcHR5UHJvdG8nLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgZW1wdHkxID0gbmV3IHBy
b3RvLmpzcGIudGVzdC5FbXB0eShbXSk7Ci0gICAgdmFyIGVtcHR5MiA9IG5ldyBwcm90by5qc3Bi
LnRlc3QuRW1wdHkoW10pOwotICAgIGFzc2VydE9iamVjdEVxdWFscyh7fSwgZW1wdHkxLnRvT2Jq
ZWN0KCkpOwotICAgIGFzc2VydE9iamVjdEVxdWFscygnTWVzc2FnZSBzaG91bGQgbm90IGJlIGNv
cnJ1cHRlZDonLCBlbXB0eTIsIGVtcHR5MSk7Ci0gIH0pOwotCi0gIGl0KCd0ZXN0VG9wTGV2ZWxF
bnVtJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3BvbnNlID0gbmV3IHByb3RvLmpzcGIudGVz
dC5FbnVtQ29udGFpbmVyKFtdKTsKLSAgICByZXNwb25zZS5zZXRPdXRlckVudW0ocHJvdG8uanNw
Yi50ZXN0Lk91dGVyRW51bS5GT08pOwotICAgIGFzc2VydEVxdWFscyhwcm90by5qc3BiLnRlc3Qu
T3V0ZXJFbnVtLkZPTywgcmVzcG9uc2UuZ2V0T3V0ZXJFbnVtKCkpOwotICB9KTsKLQotICBpdCgn
dGVzdEJ5dGVTdHJpbmdzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGRhdGEgPSBuZXcgcHJvdG8u
anNwYi50ZXN0LkRlZmF1bHRWYWx1ZXMoW10pOwotICAgIGRhdGEuc2V0Qnl0ZXNGaWVsZCgnc29t
ZV9ieXRlcycpOwotICAgIGFzc2VydEVxdWFscygnc29tZV9ieXRlcycsIGRhdGEuZ2V0Qnl0ZXNG
aWVsZCgpKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3RDb21wbGV4Q29udmVyc2lvbicsIGZ1bmN0aW9u
KCkgewotICAgIHZhciBkYXRhMSA9IFsnYScsLCwgWywgMTFdLCBbWywgMjJdLCBbLCAzM11dLCwg
WydzMScsICdzMiddLCwgMV07Ci0gICAgdmFyIGRhdGEyID0gWydhJywsLCBbLCAxMV0sIFtbLCAy
Ml0sIFssIDMzXV0sLCBbJ3MxJywgJ3MyJ10sLCAxXTsKLSAgICB2YXIgZm9vID0gbmV3IHByb3Rv
LmpzcGIudGVzdC5Db21wbGV4KGRhdGExKTsKLSAgICB2YXIgYmFyID0gbmV3IHByb3RvLmpzcGIu
dGVzdC5Db21wbGV4KGRhdGEyKTsKLSAgICB2YXIgcmVzdWx0ID0gZm9vLnRvT2JqZWN0KCk7Ci0g
ICAgYXNzZXJ0T2JqZWN0RXF1YWxzKHsKLSAgICAgIGFTdHJpbmc6ICdhJywKLSAgICAgIGFuT3V0
T2ZPcmRlckJvb2w6IDEsCi0gICAgICBhTmVzdGVkTWVzc2FnZTogewotICAgICAgICBhbkludDog
MTEKLSAgICAgIH0sCi0gICAgICBhUmVwZWF0ZWRNZXNzYWdlTGlzdDogW3thbkludDogMjJ9LCB7
YW5JbnQ6IDMzfV0sCi0gICAgICBhUmVwZWF0ZWRTdHJpbmdMaXN0OiBbJ3MxJywgJ3MyJ10KLSAg
ICB9LCByZXN1bHQpOwotCi0gICAgLy8gTm93IHRlc3Qgd2l0aCB0aGUganNwYiBpbnN0YW5jZXMg
aW5jbHVkZWQuCi0gICAgcmVzdWx0ID0gZm9vLnRvT2JqZWN0KHRydWUgLyogb3B0X2luY2x1ZGVJ
bnN0YW5jZSAqLyk7Ci0gICAgYXNzZXJ0T2JqZWN0RXF1YWxzKHsKLSAgICAgIGFTdHJpbmc6ICdh
JywKLSAgICAgIGFuT3V0T2ZPcmRlckJvb2w6IDEsCi0gICAgICBhTmVzdGVkTWVzc2FnZTogewot
ICAgICAgICBhbkludDogMTEsCi0gICAgICAgICRqc3BiTWVzc2FnZUluc3RhbmNlOiBmb28uZ2V0
QU5lc3RlZE1lc3NhZ2UoKQotICAgICAgfSwKLSAgICAgIGFSZXBlYXRlZE1lc3NhZ2VMaXN0OiBb
Ci0gICAgICAgIHthbkludDogMjIsICRqc3BiTWVzc2FnZUluc3RhbmNlOiBmb28uZ2V0QVJlcGVh
dGVkTWVzc2FnZUxpc3QoKVswXX0sCi0gICAgICAgIHthbkludDogMzMsICRqc3BiTWVzc2FnZUlu
c3RhbmNlOiBmb28uZ2V0QVJlcGVhdGVkTWVzc2FnZUxpc3QoKVsxXX0KLSAgICAgIF0sCi0gICAg
ICBhUmVwZWF0ZWRTdHJpbmdMaXN0OiBbJ3MxJywgJ3MyJ10sCi0gICAgICAkanNwYk1lc3NhZ2VJ
bnN0YW5jZTogZm9vCi0gICAgfSwgcmVzdWx0KTsKLQotICB9KTsKLQotICBpdCgndGVzdE1pc3Np
bmdGaWVsZHMnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgZm9vID0gbmV3IHByb3RvLmpzcGIudGVz
dC5Db21wbGV4KFsKLSAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgW10s
Ci0gICAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF0pOwot
ICAgIHZhciBiYXIgPSBuZXcgcHJvdG8uanNwYi50ZXN0LkNvbXBsZXgoWwotICAgICAgICB1bmRl
ZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBbXSwKLSAgICAgICAgdW5kZWZpbmVkLCB1bmRl
ZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXSk7Ci0gICAgdmFyIHJlc3VsdCA9IGZvby50b09i
amVjdCgpOwotICAgIGFzc2VydE9iamVjdEVxdWFscyh7Ci0gICAgICBhU3RyaW5nOiB1bmRlZmlu
ZWQsCi0gICAgICBhbk91dE9mT3JkZXJCb29sOiB1bmRlZmluZWQsCi0gICAgICBhTmVzdGVkTWVz
c2FnZTogewotICAgICAgICBhbkludDogdW5kZWZpbmVkCi0gICAgICB9LAotICAgICAgLy8gTm90
ZTogSnNQYiBjb252ZXJ0cyB1bmRlZmluZWQgcmVwZWF0ZWQgZmllbGRzIHRvIGVtcHR5IGFycmF5
cy4KLSAgICAgIGFSZXBlYXRlZE1lc3NhZ2VMaXN0OiBbXSwKLSAgICAgIGFSZXBlYXRlZFN0cmlu
Z0xpc3Q6IFtdCi0gICAgfSwgcmVzdWx0KTsKLQotICB9KTsKLQotICBpdCgndGVzdE5lc3RlZENv
bXBsZXhNZXNzYWdlJywgZnVuY3Rpb24oKSB7Ci0gICAgLy8gSW5zdGFudGlhdGUgdGhlIG1lc3Nh
Z2UgYW5kIHNldCBhIHVuaXF1ZSBmaWVsZCwganVzdCB0byBlbnN1cmUgdGhhdCB3ZQotICAgIC8v
IGFyZSBub3QgZ2V0dGluZyBqc3BiLnRlc3QuQ29tcGxleCBpbnN0ZWFkLgotICAgIHZhciBtc2cg
PSBuZXcgcHJvdG8uanNwYi50ZXN0Lk91dGVyTWVzc2FnZS5Db21wbGV4KCk7Ci0gICAgbXNnLnNl
dElubmVyQ29tcGxleEZpZWxkKDUpOwotICB9KTsKLQotICBpdCgndGVzdFNwZWNpYWxDYXNlcycs
IGZ1bmN0aW9uKCkgewotICAgIC8vIE5vdGU6IFNvbWUgcHJvcGVydHkgbmFtZXMgYXJlIHJlc2Vy
dmVkIGluIEphdmFTY3JpcHQuCi0gICAgLy8gVGhlc2UgbmFtZXMgYXJlIGNvbnZlcnRlZCB0byB0
aGUgSnMgcHJvcGVydHkgbmFtZWQgcGJfPHJlc2VydmVkX25hbWU+LgotICAgIHZhciBzcGVjaWFs
ID0KLSAgICAgICAgbmV3IHByb3RvLmpzcGIudGVzdC5TcGVjaWFsQ2FzZXMoWydub3JtYWwnLCAn
ZGVmYXVsdCcsICdmdW5jdGlvbicsCi0gICAgICAgICd2YXInXSk7Ci0gICAgdmFyIHJlc3VsdCA9
IHNwZWNpYWwudG9PYmplY3QoKTsKLSAgICBhc3NlcnRPYmplY3RFcXVhbHMoewotICAgICAgbm9y
bWFsOiAnbm9ybWFsJywKLSAgICAgIHBiX2RlZmF1bHQ6ICdkZWZhdWx0JywKLSAgICAgIHBiX2Z1
bmN0aW9uOiAnZnVuY3Rpb24nLAotICAgICAgcGJfdmFyOiAndmFyJwotICAgIH0sIHJlc3VsdCk7
Ci0gIH0pOwotCi0gIGl0KCd0ZXN0RGVmYXVsdFZhbHVlcycsIGZ1bmN0aW9uKCkgewotICAgIHZh
ciBkZWZhdWx0U3RyaW5nID0gImRlZmF1bHQ8PlwnXCJhYmMiOwotICAgIHZhciByZXNwb25zZSA9
IG5ldyBwcm90by5qc3BiLnRlc3QuRGVmYXVsdFZhbHVlcygpOwotCi0gICAgLy8gVGVzdCB0b09i
amVjdAotICAgIHZhciBleHBlY3RlZE9iamVjdCA9IHsKLSAgICAgIHN0cmluZ0ZpZWxkOiBkZWZh
dWx0U3RyaW5nLAotICAgICAgYm9vbEZpZWxkOiB0cnVlLAotICAgICAgaW50RmllbGQ6IDExLAot
ICAgICAgZW51bUZpZWxkOiAxMywKLSAgICAgIGVtcHR5RmllbGQ6ICcnLAotICAgICAgYnl0ZXNG
aWVsZDogJ2JXOXYnCi0gICAgfTsKLSAgICBhc3NlcnRPYmplY3RFcXVhbHMoZXhwZWN0ZWRPYmpl
Y3QsIHJlc3BvbnNlLnRvT2JqZWN0KCkpOwotCi0KLSAgICAvLyBUZXN0IGdldHRlcnMKLSAgICBy
ZXNwb25zZSA9IG5ldyBwcm90by5qc3BiLnRlc3QuRGVmYXVsdFZhbHVlcygpOwotICAgIGFzc2Vy
dEVxdWFscyhkZWZhdWx0U3RyaW5nLCByZXNwb25zZS5nZXRTdHJpbmdGaWVsZCgpKTsKLSAgICBh
c3NlcnRFcXVhbHModHJ1ZSwgcmVzcG9uc2UuZ2V0Qm9vbEZpZWxkKCkpOwotICAgIGFzc2VydEVx
dWFscygxMSwgcmVzcG9uc2UuZ2V0SW50RmllbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEzLCBy
ZXNwb25zZS5nZXRFbnVtRmllbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCcnLCByZXNwb25zZS5n
ZXRFbXB0eUZpZWxkKCkpOwotICAgIGFzc2VydEVxdWFscygnYlc5dicsIHJlc3BvbnNlLmdldEJ5
dGVzRmllbGQoKSk7Ci0KLSAgICBmdW5jdGlvbiBtYWtlRGVmYXVsdCh2YWx1ZXMpIHsKLSAgICAg
IHJldHVybiBuZXcgcHJvdG8uanNwYi50ZXN0LkRlZmF1bHRWYWx1ZXModmFsdWVzKTsKLSAgICB9
Ci0KLSAgICAvLyBUZXN0IHdpdGggdW5kZWZpbmVkIHZhbHVlcywKLSAgICAvLyBVc2UgcHVzaCB0
byB3b3JrYXJvdW5kIElFIHRyZWF0aW5nIHVuZGVmaW5lZCBhcnJheSBlbGVtZW50cyBhcyBob2xl
cy4KLSAgICByZXNwb25zZSA9IG1ha2VEZWZhdWx0KFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5k
ZWZpbmVkLCB1bmRlZmluZWRdKTsKLSAgICBhc3NlcnRFcXVhbHMoZGVmYXVsdFN0cmluZywgcmVz
cG9uc2UuZ2V0U3RyaW5nRmllbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHRydWUsIHJlc3BvbnNl
LmdldEJvb2xGaWVsZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTEsIHJlc3BvbnNlLmdldEludEZp
ZWxkKCkpOwotICAgIGFzc2VydEVxdWFscygxMywgcmVzcG9uc2UuZ2V0RW51bUZpZWxkKCkpOwot
Ci0gICAgLy8gVGVzdCB3aXRoIG51bGwgdmFsdWVzLCBhcyB3b3VsZCBiZSByZXR1cm5lZCBieSBh
IEpTT04gc2VyaWFsaXplci4KLSAgICByZXNwb25zZSA9IG1ha2VEZWZhdWx0KFtudWxsLCBudWxs
LCBudWxsLCBudWxsXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGRlZmF1bHRTdHJpbmcsIHJlc3BvbnNl
LmdldFN0cmluZ0ZpZWxkKCkpOwotICAgIGFzc2VydEVxdWFscyh0cnVlLCByZXNwb25zZS5nZXRC
b29sRmllbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDExLCByZXNwb25zZS5nZXRJbnRGaWVsZCgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoMTMsIHJlc3BvbnNlLmdldEVudW1GaWVsZCgpKTsKLQotICAg
IC8vIFRlc3Qgd2l0aCBmYWxzZS1saWtlIHZhbHVlcy4KLSAgICByZXNwb25zZSA9IG1ha2VEZWZh
dWx0KFsnJywgZmFsc2UsIDAsIDBdKTsKLSAgICBhc3NlcnRFcXVhbHMoJycsIHJlc3BvbnNlLmdl
dFN0cmluZ0ZpZWxkKCkpOwotICAgIGFzc2VydEVxdWFscyhmYWxzZSwgcmVzcG9uc2UuZ2V0Qm9v
bEZpZWxkKCkpOwotICAgIGFzc2VydEVxdWFscyh0cnVlLCByZXNwb25zZS5nZXRJbnRGaWVsZCgp
ID09IDApOwotICAgIGFzc2VydEVxdWFscyh0cnVlLCByZXNwb25zZS5nZXRFbnVtRmllbGQoKSA9
PSAwKTsKLQotICAgIC8vIFRlc3QgdGhhdCBjbGVhcmluZyB0aGUgdmFsdWVzIHJldmVydHMgdGhl
bSB0byB0aGUgZGVmYXVsdCBzdGF0ZS4KLSAgICByZXNwb25zZSA9IG1ha2VEZWZhdWx0KFsnYmxh
aCcsIGZhbHNlLCAxMTEsIDc3XSk7Ci0gICAgcmVzcG9uc2UuY2xlYXJTdHJpbmdGaWVsZCgpOyBy
ZXNwb25zZS5jbGVhckJvb2xGaWVsZCgpOwotICAgIHJlc3BvbnNlLmNsZWFySW50RmllbGQoKTsg
cmVzcG9uc2UuY2xlYXJFbnVtRmllbGQoKTsKLSAgICBhc3NlcnRFcXVhbHMoZGVmYXVsdFN0cmlu
ZywgcmVzcG9uc2UuZ2V0U3RyaW5nRmllbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHRydWUsIHJl
c3BvbnNlLmdldEJvb2xGaWVsZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTEsIHJlc3BvbnNlLmdl
dEludEZpZWxkKCkpOwotICAgIGFzc2VydEVxdWFscygxMywgcmVzcG9uc2UuZ2V0RW51bUZpZWxk
KCkpOwotCi0gICAgLy8gVGVzdCB0aGF0IHNldEZvbyhudWxsKSBjbGVhcnMgdGhlIHZhbHVlcy4K
LSAgICByZXNwb25zZSA9IG1ha2VEZWZhdWx0KFsnYmxhaCcsIGZhbHNlLCAxMTEsIDc3XSk7Ci0g
ICAgcmVzcG9uc2Uuc2V0U3RyaW5nRmllbGQobnVsbCk7IHJlc3BvbnNlLnNldEJvb2xGaWVsZChu
dWxsKTsKLSAgICByZXNwb25zZS5zZXRJbnRGaWVsZCh1bmRlZmluZWQpOyByZXNwb25zZS5zZXRF
bnVtRmllbGQodW5kZWZpbmVkKTsKLSAgICBhc3NlcnRFcXVhbHMoZGVmYXVsdFN0cmluZywgcmVz
cG9uc2UuZ2V0U3RyaW5nRmllbGQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHRydWUsIHJlc3BvbnNl
LmdldEJvb2xGaWVsZCgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTEsIHJlc3BvbnNlLmdldEludEZp
ZWxkKCkpOwotICAgIGFzc2VydEVxdWFscygxMywgcmVzcG9uc2UuZ2V0RW51bUZpZWxkKCkpOwot
ICB9KTsKLQotICBpdCgndGVzdE1lc3NhZ2VSZWdpc3RyYXRpb24nLCBmdW5jdGlvbigpIHsKLSAg
ICAvLyBnb29nLnJlcXVpcmUoU29tZVJlc3BvbnNlKSB3aWxsIGluY2x1ZGUgaXRzIGxpYnJhcnks
IHdoaWNoIHdpbGwgaW4KLSAgICAvLyB0dXJuIGFkZCBTb21lUmVzcG9uc2UgdG8gdGhlIG1lc3Nh
Z2UgcmVnaXN0cnkuCi0gICAgYXNzZXJ0RXF1YWxzKGpzcGIuTWVzc2FnZS5yZWdpc3RyeV9bJ3Jl
cyddLCBwcm90by5qc3BiLnRlc3QuU29tZVJlc3BvbnNlKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3RD
bGVhckZpZWxkcycsIGZ1bmN0aW9uKCkgewotICAgIC8vIFdlIGRvbid0IHNldCAncHJvcGVyJyBk
ZWZhdWx0cywgcmF0aGVyLCBib29scywgc3RyaW5ncywKLSAgICAvLyBldGMsIGFyZSBjbGVhcmVk
IHRvIHVuZGVmaW5lZCBvciBudWxsIGFuZCB0YWtlIG9uIHRoZSBKYXZhc2NyaXB0Ci0gICAgLy8g
bWVhbmluZyBmb3IgdGhhdCB2YWx1ZS4gUmVwZWF0ZWQgZmllbGRzIGFyZSBzZXQgdG8gW10gd2hl
biBjbGVhcmVkLgotICAgIHZhciBkYXRhID0gWydzdHInLCB0cnVlLCBbMTFdLCBbWzIyXSwgWzMz
XV0sIFsnczEnLCAnczInXV07Ci0gICAgdmFyIGZvbyA9IG5ldyBwcm90by5qc3BiLnRlc3QuT3B0
aW9uYWxGaWVsZHMoZGF0YSk7Ci0gICAgZm9vLmNsZWFyQVN0cmluZygpOwotICAgIGZvby5jbGVh
ckFCb29sKCk7Ci0gICAgZm9vLmNsZWFyQU5lc3RlZE1lc3NhZ2UoKTsKLSAgICBmb28uY2xlYXJB
UmVwZWF0ZWRNZXNzYWdlTGlzdCgpOwotICAgIGZvby5jbGVhckFSZXBlYXRlZFN0cmluZ0xpc3Qo
KTsKLSAgICBhc3NlcnRVbmRlZmluZWQoZm9vLmdldEFTdHJpbmcoKSk7Ci0gICAgYXNzZXJ0VW5k
ZWZpbmVkKGZvby5nZXRBQm9vbCgpKTsKLSAgICBhc3NlcnRVbmRlZmluZWQoZm9vLmdldEFOZXN0
ZWRNZXNzYWdlKCkpOwotICAgIGFzc2VydE9iamVjdEVxdWFscyhbXSwgZm9vLmdldEFSZXBlYXRl
ZE1lc3NhZ2VMaXN0KCkpOwotICAgIGFzc2VydE9iamVjdEVxdWFscyhbXSwgZm9vLmdldEFSZXBl
YXRlZFN0cmluZ0xpc3QoKSk7Ci0gICAgLy8gTk9URTogV2Ugd2FudCB0aGUgbWlzc2luZyBmaWVs
ZHMgaW4gJ2V4cGVjdGVkJyB0byBiZSB1bmRlZmluZWQsCi0gICAgLy8gYnV0IHdlIGFjdHVhbGx5
IGdldCBhIHNwYXJzZSBhcnJheSBpbnN0ZWFkLiBXZSBjb3VsZCB1c2Ugc29tZXRoaW5nCi0gICAg
Ly8gbGlrZSBbMSx1bmRlZmluZWQsMl0gdG8gYXZvaWQgdGhpcywgZXhjZXB0IHRoYXQgdGhpcyBp
cyBzdGlsbAotICAgIC8vIHNwYXJzZSBvbiBJRS4gTm8gY29tbWVudC4uLgotICAgIHZhciBleHBl
Y3RlZCA9IFssLCwgW10sIFtdXTsKLSAgICBleHBlY3RlZFswXSA9IGV4cGVjdGVkWzFdID0gZXhw
ZWN0ZWRbMl0gPSB1bmRlZmluZWQ7Ci0gICAgYXNzZXJ0T2JqZWN0RXF1YWxzKGV4cGVjdGVkLCBm
b28udG9BcnJheSgpKTsKLQotICAgIC8vIFRlc3Qgc2V0KG51bGwpLiBXZSBjb3VsZCBkZXByZWNh
dGVkIHRoaXMgaW4gZmF2b3Igb2YgY2xlYXIoKSwgYnV0Ci0gICAgLy8gaXQncyBhbHNvIGNvbnZl
bmllbnQgdG8gaGF2ZS4KLSAgICBkYXRhID0gWydzdHInLCB0cnVlLCBbMTFdLCBbWzIyXSwgWzMz
XV0sIFsnczEnLCAnczInXV07Ci0gICAgZm9vID0gbmV3IHByb3RvLmpzcGIudGVzdC5PcHRpb25h
bEZpZWxkcyhkYXRhKTsKLSAgICBmb28uc2V0QVN0cmluZyhudWxsKTsKLSAgICBmb28uc2V0QUJv
b2wobnVsbCk7Ci0gICAgZm9vLnNldEFOZXN0ZWRNZXNzYWdlKG51bGwpOwotICAgIGZvby5zZXRB
UmVwZWF0ZWRNZXNzYWdlTGlzdChudWxsKTsKLSAgICBmb28uc2V0QVJlcGVhdGVkU3RyaW5nTGlz
dChudWxsKTsKLSAgICBhc3NlcnROdWxsKGZvby5nZXRBU3RyaW5nKCkpOwotICAgIGFzc2VydE51
bGwoZm9vLmdldEFCb29sKCkpOwotICAgIGFzc2VydE51bGwoZm9vLmdldEFOZXN0ZWRNZXNzYWdl
KCkpOwotICAgIGFzc2VydE9iamVjdEVxdWFscyhbXSwgZm9vLmdldEFSZXBlYXRlZE1lc3NhZ2VM
aXN0KCkpOwotICAgIGFzc2VydE9iamVjdEVxdWFscyhbXSwgZm9vLmdldEFSZXBlYXRlZFN0cmlu
Z0xpc3QoKSk7Ci0gICAgYXNzZXJ0T2JqZWN0RXF1YWxzKFtudWxsLCBudWxsLCBudWxsLCBbXSwg
W11dLCBmb28udG9BcnJheSgpKTsKLQotICAgIC8vIFRlc3Qgc2V0KHVuZGVmaW5lZCkuIEFnYWlu
LCBub3Qgc29tZXRoaW5nIHdlIHJlYWxseSBuZWVkLCBhbmQgbm90Ci0gICAgLy8gc3VwcG9ydGVk
IGRpcmVjdGx5IGJ5IG91ciB0eXBpbmcsIGJ1dCBpdCBzaG91bGQgJ2RvIHRoZSByaWdodCB0aGlu
ZycuCi0gICAgZGF0YSA9IFsnc3RyJywgdHJ1ZSwgWzExXSwgW1syMl0sIFszM11dLCBbJ3MxJywg
J3MyJ11dOwotICAgIGZvbyA9IG5ldyBwcm90by5qc3BiLnRlc3QuT3B0aW9uYWxGaWVsZHMoZGF0
YSk7Ci0gICAgZm9vLnNldEFTdHJpbmcodW5kZWZpbmVkKTsKLSAgICBmb28uc2V0QUJvb2wodW5k
ZWZpbmVkKTsKLSAgICBmb28uc2V0QU5lc3RlZE1lc3NhZ2UodW5kZWZpbmVkKTsKLSAgICBmb28u
c2V0QVJlcGVhdGVkTWVzc2FnZUxpc3QodW5kZWZpbmVkKTsKLSAgICBmb28uc2V0QVJlcGVhdGVk
U3RyaW5nTGlzdCh1bmRlZmluZWQpOwotICAgIGFzc2VydFVuZGVmaW5lZChmb28uZ2V0QVN0cmlu
ZygpKTsKLSAgICBhc3NlcnRVbmRlZmluZWQoZm9vLmdldEFCb29sKCkpOwotICAgIGFzc2VydFVu
ZGVmaW5lZChmb28uZ2V0QU5lc3RlZE1lc3NhZ2UoKSk7Ci0gICAgYXNzZXJ0T2JqZWN0RXF1YWxz
KFtdLCBmb28uZ2V0QVJlcGVhdGVkTWVzc2FnZUxpc3QoKSk7Ci0gICAgYXNzZXJ0T2JqZWN0RXF1
YWxzKFtdLCBmb28uZ2V0QVJlcGVhdGVkU3RyaW5nTGlzdCgpKTsKLSAgICBleHBlY3RlZCA9IFss
LCwgW10sIFtdXTsKLSAgICBleHBlY3RlZFswXSA9IGV4cGVjdGVkWzFdID0gZXhwZWN0ZWRbMl0g
PSB1bmRlZmluZWQ7Ci0gICAgYXNzZXJ0T2JqZWN0RXF1YWxzKGV4cGVjdGVkLCBmb28udG9BcnJh
eSgpKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3REaWZmZXJlbmNlUmF3T2JqZWN0JywgZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIHAxID0gbmV3IHByb3RvLmpzcGIudGVzdC5IYXNFeHRlbnNpb25zKFsnaGkn
LCAnZGlmZicsIHt9XSk7Ci0gICAgdmFyIHAyID0gbmV3IHByb3RvLmpzcGIudGVzdC5IYXNFeHRl
bnNpb25zKFsnaGknLCAnd2hhdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsxMDAwOiAndW5pcXVlJ31dKTsKLSAgICB2YXIgZGlmZiA9IC8qKiBAdHlw
ZSB7cHJvdG8uanNwYi50ZXN0Lkhhc0V4dGVuc2lvbnN9ICovCi0gICAgICAgIChqc3BiLk1lc3Nh
Z2UuZGlmZmVyZW5jZShwMSwgcDIpKTsKLSAgICBhc3NlcnRVbmRlZmluZWQoZGlmZi5nZXRTdHIx
KCkpOwotICAgIGFzc2VydEVxdWFscygnd2hhdCcsIGRpZmYuZ2V0U3RyMigpKTsKLSAgICBhc3Nl
cnRVbmRlZmluZWQoZGlmZi5nZXRTdHIzKCkpOwotICAgIGFzc2VydEVxdWFscygndW5pcXVlJywg
ZGlmZi5leHRlbnNpb25PYmplY3RfWzEwMDBdKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3RFcXVhbHNT
aW1wbGUnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgczEgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlNp
bXBsZTEoWydoaSddKTsKLSAgICBhc3NlcnRUcnVlKGpzcGIuTWVzc2FnZS5lcXVhbHMoczEsIG5l
dyBwcm90by5qc3BiLnRlc3QuU2ltcGxlMShbJ2hpJ10pKSk7Ci0gICAgYXNzZXJ0RmFsc2UoanNw
Yi5NZXNzYWdlLmVxdWFscyhzMSwgbmV3IHByb3RvLmpzcGIudGVzdC5TaW1wbGUxKFsnYnllJ10p
KSk7Ci0gICAgdmFyIHMxYiA9IG5ldyBwcm90by5qc3BiLnRlc3QuU2ltcGxlMShbJ2hpJywgWydo
ZWxsbyddXSk7Ci0gICAgYXNzZXJ0VHJ1ZShqc3BiLk1lc3NhZ2UuZXF1YWxzKHMxYiwKLSAgICAg
ICAgbmV3IHByb3RvLmpzcGIudGVzdC5TaW1wbGUxKFsnaGknLCBbJ2hlbGxvJ11dKSkpOwotICAg
IGFzc2VydFRydWUoanNwYi5NZXNzYWdlLmVxdWFscyhzMWIsCi0gICAgICAgIG5ldyBwcm90by5q
c3BiLnRlc3QuU2ltcGxlMShbJ2hpJywgWydoZWxsbycsIHVuZGVmaW5lZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWRdXSkp
KTsKLSAgICBhc3NlcnRGYWxzZShqc3BiLk1lc3NhZ2UuZXF1YWxzKHMxYiwKLSAgICAgICAgbmV3
IHByb3RvLmpzcGIudGVzdC5TaW1wbGUxKFsnbm8nLCBbJ2hlbGxvJ11dKSkpOwotICAgIC8vIFRl
c3Qgd2l0aCBtZXNzYWdlcyBvZiBkaWZmZXJlbnQgdHlwZXMKLSAgICB2YXIgczIgPSBuZXcgcHJv
dG8uanNwYi50ZXN0LlNpbXBsZTIoWydoaSddKTsKLSAgICBhc3NlcnRGYWxzZShqc3BiLk1lc3Nh
Z2UuZXF1YWxzKHMxLCBzMikpOwotICB9KTsKLQotICBpdCgndGVzdEVxdWFsc19zb2Z0Q29tcGFy
aXNvbicsIGZ1bmN0aW9uKCkgewotICAgIHZhciBzMSA9IG5ldyBwcm90by5qc3BiLnRlc3QuU2lt
cGxlMShbJ2hpJywgW10sIG51bGxdKTsKLSAgICBhc3NlcnRUcnVlKGpzcGIuTWVzc2FnZS5lcXVh
bHMoczEsCi0gICAgICAgIG5ldyBwcm90by5qc3BiLnRlc3QuU2ltcGxlMShbJ2hpJywgW11dKSkp
OwotCi0gICAgdmFyIHMxYiA9IG5ldyBwcm90by5qc3BiLnRlc3QuU2ltcGxlMShbJ2hpJywgW10s
IHRydWVdKTsKLSAgICBhc3NlcnRUcnVlKGpzcGIuTWVzc2FnZS5lcXVhbHMoczFiLAotICAgICAg
ICBuZXcgcHJvdG8uanNwYi50ZXN0LlNpbXBsZTEoWydoaScsIFtdLCAxXSkpKTsKLSAgfSk7Ci0K
LSAgaXQoJ3Rlc3RFcXVhbHNDb21wbGV4JywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGRhdGExID0g
WydhJywsLCBbLCAxMV0sIFtbLCAyMl0sIFssIDMzXV0sLCBbJ3MxJywgJ3MyJ10sLCAxXTsKLSAg
ICB2YXIgZGF0YTIgPSBbJ2EnLCwsIFssIDExXSwgW1ssIDIyXSwgWywgMzRdXSwsIFsnczEnLCAn
czInXSwsIDFdOwotICAgIHZhciBkYXRhMyA9IFsnYScsLCwgWywgMTFdLCBbWywgMjJdXSwsIFsn
czEnLCAnczInXSwsIDFdOwotICAgIHZhciBkYXRhNCA9IFsnaGknXTsKLSAgICB2YXIgYzFhID0g
bmV3IHByb3RvLmpzcGIudGVzdC5Db21wbGV4KGRhdGExKTsKLSAgICB2YXIgYzFiID0gbmV3IHBy
b3RvLmpzcGIudGVzdC5Db21wbGV4KGRhdGExKTsKLSAgICB2YXIgYzIgPSBuZXcgcHJvdG8uanNw
Yi50ZXN0LkNvbXBsZXgoZGF0YTIpOwotICAgIHZhciBjMyA9IG5ldyBwcm90by5qc3BiLnRlc3Qu
Q29tcGxleChkYXRhMyk7Ci0gICAgdmFyIHMxID0gbmV3IHByb3RvLmpzcGIudGVzdC5TaW1wbGUx
KGRhdGE0KTsKLQotICAgIGFzc2VydFRydWUoanNwYi5NZXNzYWdlLmVxdWFscyhjMWEsIGMxYikp
OwotICAgIGFzc2VydEZhbHNlKGpzcGIuTWVzc2FnZS5lcXVhbHMoYzFhLCBjMikpOwotICAgIGFz
c2VydEZhbHNlKGpzcGIuTWVzc2FnZS5lcXVhbHMoYzIsIGMzKSk7Ci0gICAgYXNzZXJ0RmFsc2Uo
anNwYi5NZXNzYWdlLmVxdWFscyhjMWEsIHMxKSk7Ci0gIH0pOwotCi0gIGl0KCd0ZXN0RXF1YWxz
RXh0ZW5zaW9uc0NvbnN0cnVjdGVkJywgZnVuY3Rpb24oKSB7Ci0gICAgYXNzZXJ0VHJ1ZShqc3Bi
Lk1lc3NhZ2UuZXF1YWxzKAotICAgICAgICBuZXcgcHJvdG8uanNwYi50ZXN0Lkhhc0V4dGVuc2lv
bnMoW10pLAotICAgICAgICBuZXcgcHJvdG8uanNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoW3t9XSkK
LSAgICApKTsKLSAgICBhc3NlcnRUcnVlKGpzcGIuTWVzc2FnZS5lcXVhbHMoCi0gICAgICAgIG5l
dyBwcm90by5qc3BiLnRlc3QuSGFzRXh0ZW5zaW9ucyhbJ2hpJywgezEwMDogW3syMDA6ICdhJ31d
fV0pLAotICAgICAgICBuZXcgcHJvdG8uanNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoWydoaScsIHsx
MDA6IFt7MjAwOiAnYSd9XX1dKQotICAgICkpOwotICAgIGFzc2VydEZhbHNlKGpzcGIuTWVzc2Fn
ZS5lcXVhbHMoCi0gICAgICAgIG5ldyBwcm90by5qc3BiLnRlc3QuSGFzRXh0ZW5zaW9ucyhbJ2hp
JywgezEwMDogW3syMDA6ICdhJ31dfV0pLAotICAgICAgICBuZXcgcHJvdG8uanNwYi50ZXN0Lkhh
c0V4dGVuc2lvbnMoWydoaScsIHsxMDA6IFt7MjAwOiAnYid9XX1dKQotICAgICkpOwotICAgIGFz
c2VydFRydWUoanNwYi5NZXNzYWdlLmVxdWFscygKLSAgICAgICAgbmV3IHByb3RvLmpzcGIudGVz
dC5IYXNFeHRlbnNpb25zKFt7MTAwOiBbezIwMDogJ2EnfV19XSksCi0gICAgICAgIG5ldyBwcm90
by5qc3BiLnRlc3QuSGFzRXh0ZW5zaW9ucyhbezEwMDogW3syMDA6ICdhJ31dfV0pCi0gICAgKSk7
Ci0gICAgYXNzZXJ0VHJ1ZShqc3BiLk1lc3NhZ2UuZXF1YWxzKAotICAgICAgICBuZXcgcHJvdG8u
anNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoW3sxMDA6IFt7MjAwOiAnYSd9XX1dKSwKLSAgICAgICAg
bmV3IHByb3RvLmpzcGIudGVzdC5IYXNFeHRlbnNpb25zKFssLCwgezEwMDogW3syMDA6ICdhJ31d
fV0pCi0gICAgKSk7Ci0gICAgYXNzZXJ0VHJ1ZShqc3BiLk1lc3NhZ2UuZXF1YWxzKAotICAgICAg
ICBuZXcgcHJvdG8uanNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoWywsLCB7MTAwOiBbezIwMDogJ2En
fV19XSksCi0gICAgICAgIG5ldyBwcm90by5qc3BiLnRlc3QuSGFzRXh0ZW5zaW9ucyhbezEwMDog
W3syMDA6ICdhJ31dfV0pCi0gICAgKSk7Ci0gICAgYXNzZXJ0VHJ1ZShqc3BiLk1lc3NhZ2UuZXF1
YWxzKAotICAgICAgICBuZXcgcHJvdG8uanNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoWydoaScsIHsx
MDA6IFt7MjAwOiAnYSd9XX1dKSwKLSAgICAgICAgbmV3IHByb3RvLmpzcGIudGVzdC5IYXNFeHRl
bnNpb25zKFsnaGknLCwsIHsxMDA6IFt7MjAwOiAnYSd9XX1dKQotICAgICkpOwotICAgIGFzc2Vy
dFRydWUoanNwYi5NZXNzYWdlLmVxdWFscygKLSAgICAgICAgbmV3IHByb3RvLmpzcGIudGVzdC5I
YXNFeHRlbnNpb25zKFsnaGknLCwsIHsxMDA6IFt7MjAwOiAnYSd9XX1dKSwKLSAgICAgICAgbmV3
IHByb3RvLmpzcGIudGVzdC5IYXNFeHRlbnNpb25zKFsnaGknLCB7MTAwOiBbezIwMDogJ2EnfV19
XSkKLSAgICApKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3RFcXVhbHNFeHRlbnNpb25zVW5jb25zdHJ1
Y3RlZCcsIGZ1bmN0aW9uKCkgewotICAgIGFzc2VydFRydWUoanNwYi5NZXNzYWdlLmNvbXBhcmVG
aWVsZHMoW10sIFt7fV0pKTsKLSAgICBhc3NlcnRUcnVlKGpzcGIuTWVzc2FnZS5jb21wYXJlRmll
bGRzKFssLCwge31dLCBbXSkpOwotICAgIGFzc2VydFRydWUoanNwYi5NZXNzYWdlLmNvbXBhcmVG
aWVsZHMoWywsLCB7fV0sIFssLCB7fV0pKTsKLSAgICBhc3NlcnRUcnVlKGpzcGIuTWVzc2FnZS5j
b21wYXJlRmllbGRzKAotICAgICAgICBbJ2hpJywgezEwMDogW3syMDA6ICdhJ31dfV0sIFsnaGkn
LCB7MTAwOiBbezIwMDogJ2EnfV19XSkpOwotICAgIGFzc2VydEZhbHNlKGpzcGIuTWVzc2FnZS5j
b21wYXJlRmllbGRzKAotICAgICAgICBbJ2hpJywgezEwMDogW3syMDA6ICdhJ31dfV0sIFsnaGkn
LCB7MTAwOiBbezIwMDogJ2InfV19XSkpOwotICAgIGFzc2VydFRydWUoanNwYi5NZXNzYWdlLmNv
bXBhcmVGaWVsZHMoCi0gICAgICAgIFt7MTAwOiBbezIwMDogJ2EnfV19XSwgW3sxMDA6IFt7MjAw
OiAnYSd9XX1dKSk7Ci0gICAgYXNzZXJ0VHJ1ZShqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcygK
LSAgICAgICAgW3sxMDA6IFt7MjAwOiAnYSd9XX1dLCBbLCwsIHsxMDA6IFt7MjAwOiAnYSd9XX1d
KSk7Ci0gICAgYXNzZXJ0VHJ1ZShqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcygKLSAgICAgICAg
WywsLCB7MTAwOiBbezIwMDogJ2EnfV19XSwgW3sxMDA6IFt7MjAwOiAnYSd9XX1dKSk7Ci0gICAg
YXNzZXJ0VHJ1ZShqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcygKLSAgICAgICAgWydoaScsIHsx
MDA6IFt7MjAwOiAnYSd9XX1dLCBbJ2hpJywsLCB7MTAwOiBbezIwMDogJ2EnfV19XSkpOwotICAg
IGFzc2VydFRydWUoanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHMoCi0gICAgICAgIFsnaGknLCws
IHsxMDA6IFt7MjAwOiAnYSd9XX1dLCBbJ2hpJywgezEwMDogW3syMDA6ICdhJ31dfV0pKTsKLSAg
fSk7Ci0KLSAgaXQoJ3Rlc3RUb01hcCcsIGZ1bmN0aW9uKCkgewotICAgIHZhciBwMSA9IG5ldyBw
cm90by5qc3BiLnRlc3QuU2ltcGxlMShbJ2snLCBbJ3YnXV0pOwotICAgIHZhciBwMiA9IG5ldyBw
cm90by5qc3BiLnRlc3QuU2ltcGxlMShbJ2sxJywgWyd2MScsICd2MiddXSk7Ci0gICAgdmFyIHNv
eW1hcCA9IGpzcGIuTWVzc2FnZS50b01hcChbcDEsIHAyXSwKLSAgICAgICAgcHJvdG8uanNwYi50
ZXN0LlNpbXBsZTEucHJvdG90eXBlLmdldEFTdHJpbmcsCi0gICAgICAgIHByb3RvLmpzcGIudGVz
dC5TaW1wbGUxLnByb3RvdHlwZS50b09iamVjdCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCdrJywgc295
bWFwWydrJ10uYVN0cmluZyk7Ci0gICAgYXNzZXJ0QXJyYXlFcXVhbHMoWyd2J10sIHNveW1hcFsn
ayddLmFSZXBlYXRlZFN0cmluZ0xpc3QpOwotICAgIHZhciBwcm90b21hcCA9IGpzcGIuTWVzc2Fn
ZS50b01hcChbcDEsIHAyXSwKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LlNpbXBsZTEucHJvdG90
eXBlLmdldEFTdHJpbmcpOwotICAgIGFzc2VydEVxdWFscygnaycsIHByb3RvbWFwWydrJ10uZ2V0
QVN0cmluZygpKTsKLSAgICBhc3NlcnRBcnJheUVxdWFscyhbJ3YnXSwgcHJvdG9tYXBbJ2snXS5n
ZXRBUmVwZWF0ZWRTdHJpbmdMaXN0KCkpOwotICB9KTsKLQotICBpdCgndGVzdENsb25lJywgZnVu
Y3Rpb24oKSB7Ci0gICAgdmFyIG9yaWdpbmFsID0gbmV3IHByb3RvLmpzcGIudGVzdC5UZXN0Q2xv
bmUoKTsKLSAgICBvcmlnaW5hbC5zZXRTdHIoJ3YxJyk7Ci0gICAgdmFyIHNpbXBsZTEgPSBuZXcg
cHJvdG8uanNwYi50ZXN0LlNpbXBsZTEoWyd4MScsIFsneTEnLCAnejEnXV0pOwotICAgIHZhciBz
aW1wbGUyID0gbmV3IHByb3RvLmpzcGIudGVzdC5TaW1wbGUxKFsneDInLCBbJ3kyJywgJ3oyJ11d
KTsKLSAgICB2YXIgc2ltcGxlMyA9IG5ldyBwcm90by5qc3BiLnRlc3QuU2ltcGxlMShbJ3gzJywg
Wyd5MycsICd6MyddXSk7Ci0gICAgb3JpZ2luYWwuc2V0U2ltcGxlMShzaW1wbGUxKTsKLSAgICBv
cmlnaW5hbC5zZXRTaW1wbGUyTGlzdChbc2ltcGxlMiwgc2ltcGxlM10pOwotICAgIHZhciBleHRl
bnNpb24gPSBuZXcgcHJvdG8uanNwYi50ZXN0LkNsb25lRXh0ZW5zaW9uKCk7Ci0gICAgZXh0ZW5z
aW9uLnNldEV4dCgnZTEnKTsKLSAgICBvcmlnaW5hbC5zZXRFeHRlbnNpb24ocHJvdG8uanNwYi50
ZXN0LklzRXh0ZW5zaW9uLmV4dEZpZWxkLCBleHRlbnNpb24pOwotICAgIHZhciBjbG9uZSA9IG9y
aWdpbmFsLmNsb25lTWVzc2FnZSgpOwotICAgIGFzc2VydEFycmF5RXF1YWxzKFsndjEnLCwgWyd4
MScsIFsneTEnLCAnejEnXV0sLAotICAgICAgW1sneDInLCBbJ3kyJywgJ3oyJ11dLCBbJ3gzJywg
Wyd5MycsICd6MyddXV0sLCwgeyAxMDA6IFssICdlMSddIH1dLAotICAgICAgICBjbG9uZS50b0Fy
cmF5KCkpOwotICAgIGNsb25lLnNldFN0cigndjInKTsKLSAgICB2YXIgc2ltcGxlNCA9IG5ldyBw
cm90by5qc3BiLnRlc3QuU2ltcGxlMShbJ2ExJywgWydiMScsICdjMSddXSk7Ci0gICAgdmFyIHNp
bXBsZTUgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlNpbXBsZTEoWydhMicsIFsnYjInLCAnYzInXV0p
OwotICAgIHZhciBzaW1wbGU2ID0gbmV3IHByb3RvLmpzcGIudGVzdC5TaW1wbGUxKFsnYTMnLCBb
J2IzJywgJ2MzJ11dKTsKLSAgICBjbG9uZS5zZXRTaW1wbGUxKHNpbXBsZTQpOwotICAgIGNsb25l
LnNldFNpbXBsZTJMaXN0KFtzaW1wbGU1LCBzaW1wbGU2XSk7Ci0gICAgdmFyIG5ld0V4dGVuc2lv
biA9IG5ldyBwcm90by5qc3BiLnRlc3QuQ2xvbmVFeHRlbnNpb24oKTsKLSAgICBuZXdFeHRlbnNp
b24uc2V0RXh0KCdlMicpOwotICAgIGNsb25lLnNldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3Qu
Q2xvbmVFeHRlbnNpb24uZXh0RmllbGQsIG5ld0V4dGVuc2lvbik7Ci0gICAgYXNzZXJ0QXJyYXlF
cXVhbHMoWyd2MicsLCBbJ2ExJywgWydiMScsICdjMSddXSwsCi0gICAgICBbWydhMicsIFsnYjIn
LCAnYzInXV0sIFsnYTMnLCBbJ2IzJywgJ2MzJ11dXSwsLCB7IDEwMDogWywgJ2UyJ10gfV0sCi0g
ICAgICAgIGNsb25lLnRvQXJyYXkoKSk7Ci0gICAgYXNzZXJ0QXJyYXlFcXVhbHMoWyd2MScsLCBb
J3gxJywgWyd5MScsICd6MSddXSwsCi0gICAgICBbWyd4MicsIFsneTInLCAnejInXV0sIFsneDMn
LCBbJ3kzJywgJ3ozJ11dXSwsLCB7IDEwMDogWywgJ2UxJ10gfV0sCi0gICAgICAgIG9yaWdpbmFs
LnRvQXJyYXkoKSk7Ci0gIH0pOwotCi0gIGl0KCd0ZXN0Q29weUludG8nLCBmdW5jdGlvbigpIHsK
LSAgICB2YXIgb3JpZ2luYWwgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RDbG9uZSgpOwotICAg
IG9yaWdpbmFsLnNldFN0cigndjEnKTsKLSAgICB2YXIgZGVzdCA9IG5ldyBwcm90by5qc3BiLnRl
c3QuVGVzdENsb25lKCk7Ci0gICAgZGVzdC5zZXRTdHIoJ292ZXJyaWRlJyk7Ci0gICAgdmFyIHNp
bXBsZTEgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlNpbXBsZTEoWyd4MScsIFsneTEnLCAnejEnXV0p
OwotICAgIHZhciBzaW1wbGUyID0gbmV3IHByb3RvLmpzcGIudGVzdC5TaW1wbGUxKFsneDInLCBb
J3kyJywgJ3oyJ11dKTsKLSAgICB2YXIgc2ltcGxlMyA9IG5ldyBwcm90by5qc3BiLnRlc3QuU2lt
cGxlMShbJ3gzJywgWyd5MycsICd6MyddXSk7Ci0gICAgdmFyIGRlc3RTaW1wbGUxID0gbmV3IHBy
b3RvLmpzcGIudGVzdC5TaW1wbGUxKFsnb3gxJywgWydveTEnLCAnb3oxJ11dKTsKLSAgICB2YXIg
ZGVzdFNpbXBsZTIgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlNpbXBsZTEoWydveDInLCBbJ295Mics
ICdvejInXV0pOwotICAgIHZhciBkZXN0U2ltcGxlMyA9IG5ldyBwcm90by5qc3BiLnRlc3QuU2lt
cGxlMShbJ294MycsIFsnb3kzJywgJ296MyddXSk7Ci0gICAgb3JpZ2luYWwuc2V0U2ltcGxlMShz
aW1wbGUxKTsKLSAgICBvcmlnaW5hbC5zZXRTaW1wbGUyTGlzdChbc2ltcGxlMiwgc2ltcGxlM10p
OwotICAgIGRlc3Quc2V0U2ltcGxlMShkZXN0U2ltcGxlMSk7Ci0gICAgZGVzdC5zZXRTaW1wbGUy
TGlzdChbZGVzdFNpbXBsZTIsIGRlc3RTaW1wbGUzXSk7Ci0gICAgdmFyIGV4dGVuc2lvbiA9IG5l
dyBwcm90by5qc3BiLnRlc3QuQ2xvbmVFeHRlbnNpb24oKTsKLSAgICBleHRlbnNpb24uc2V0RXh0
KCdlMScpOwotICAgIG9yaWdpbmFsLnNldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuQ2xvbmVF
eHRlbnNpb24uZXh0RmllbGQsIGV4dGVuc2lvbik7Ci0KLSAgICBqc3BiLk1lc3NhZ2UuY29weUlu
dG8ob3JpZ2luYWwsIGRlc3QpOwotICAgIGFzc2VydEFycmF5RXF1YWxzKG9yaWdpbmFsLnRvQXJy
YXkoKSwgZGVzdC50b0FycmF5KCkpOwotICAgIGFzc2VydEVxdWFscygneDEnLCBkZXN0LmdldFNp
bXBsZTEoKS5nZXRBU3RyaW5nKCkpOwotICAgIGFzc2VydEVxdWFscygnZTEnLAotICAgICAgICBk
ZXN0LmdldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuQ2xvbmVFeHRlbnNpb24uZXh0RmllbGQp
LmdldEV4dCgpKTsKLSAgICBkZXN0LmdldFNpbXBsZTEoKS5zZXRBU3RyaW5nKCduZXcgdmFsdWUn
KTsKLSAgICBhc3NlcnROb3RFcXVhbHMoZGVzdC5nZXRTaW1wbGUxKCkuZ2V0QVN0cmluZygpLAot
ICAgICAgICBvcmlnaW5hbC5nZXRTaW1wbGUxKCkuZ2V0QVN0cmluZygpKTsKLSAgICBkZXN0Lmdl
dEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuQ2xvbmVFeHRlbnNpb24uZXh0RmllbGQpLgotICAg
ICAgICBzZXRFeHQoJ25ldyB2YWx1ZScpOwotICAgIGFzc2VydE5vdEVxdWFscygKLSAgICAgICAg
ZGVzdC5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LkNsb25lRXh0ZW5zaW9uLmV4dEZpZWxk
KS5nZXRFeHQoKSwKLSAgICAgICAgb3JpZ2luYWwuZ2V0RXh0ZW5zaW9uKAotICAgICAgICAgICAg
cHJvdG8uanNwYi50ZXN0LkNsb25lRXh0ZW5zaW9uLmV4dEZpZWxkKS5nZXRFeHQoKSk7Ci0gIH0p
OwotCi0gIGl0KCd0ZXN0Q29weUludG9fbm90U2FtZVR5cGUnLCBmdW5jdGlvbigpIHsKLSAgICB2
YXIgYSA9IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdENsb25lKCk7Ci0gICAgdmFyIGIgPSBuZXcg
cHJvdG8uanNwYi50ZXN0LlNpbXBsZTEoWydzdHInLCBbJ3MxJywgJ3MyJ11dKTsKLQotICAgIHZh
ciBlID0gYXNzZXJ0VGhyb3dzKGZ1bmN0aW9uKCkgewotICAgICAganNwYi5NZXNzYWdlLmNvcHlJ
bnRvKGEsIGIpOwotICAgIH0pOwotICAgIGFzc2VydENvbnRhaW5zKCdzaG91bGQgaGF2ZSB0aGUg
c2FtZSB0eXBlJywgZS5tZXNzYWdlKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3RFeHRlbnNpb25zJywg
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGV4dGVuc2lvbjEgPSBuZXcgcHJvdG8uanNwYi50ZXN0Lklz
RXh0ZW5zaW9uKFsnZXh0MWZpZWxkJ10pOwotICAgIHZhciBleHRlbnNpb24yID0gbmV3IHByb3Rv
LmpzcGIudGVzdC5TaW1wbGUxKFsnc3RyJywgWydzMScsICdzMiddXSk7Ci0gICAgdmFyIGV4dGVu
ZGFibGUgPSBuZXcgcHJvdG8uanNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoWyd2MScsICd2MicsICd2
MyddKTsKLSAgICBleHRlbmRhYmxlLnNldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuSXNFeHRl
bnNpb24uZXh0RmllbGQsIGV4dGVuc2lvbjEpOwotICAgIGV4dGVuZGFibGUuc2V0RXh0ZW5zaW9u
KHByb3RvLmpzcGIudGVzdC5JbmRpcmVjdEV4dGVuc2lvbi5zaW1wbGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXh0ZW5zaW9uMik7Ci0gICAgZXh0ZW5kYWJsZS5zZXRFeHRlbnNpb24o
cHJvdG8uanNwYi50ZXN0LkluZGlyZWN0RXh0ZW5zaW9uLnN0ciwgJ3h5enp5Jyk7Ci0gICAgZXh0
ZW5kYWJsZS5zZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LkluZGlyZWN0RXh0ZW5zaW9uLnJl
cGVhdGVkU3RyTGlzdCwKLSAgICAgICAgWydhJywgJ2InXSk7Ci0gICAgdmFyIHMxID0gbmV3IHBy
b3RvLmpzcGIudGVzdC5TaW1wbGUxKFsnZm9vJywgWydzMScsICdzMiddXSk7Ci0gICAgdmFyIHMy
ID0gbmV3IHByb3RvLmpzcGIudGVzdC5TaW1wbGUxKFsnYmFyJywgWyd0MScsICd0MiddXSk7Ci0g
ICAgZXh0ZW5kYWJsZS5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5JbmRp
cmVjdEV4dGVuc2lvbi5yZXBlYXRlZFNpbXBsZUxpc3QsCi0gICAgICAgIFtzMSwgczJdKTsKLSAg
ICBhc3NlcnRPYmplY3RFcXVhbHMoZXh0ZW5zaW9uMSwKLSAgICAgICAgZXh0ZW5kYWJsZS5nZXRF
eHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LklzRXh0ZW5zaW9uLmV4dEZpZWxkKSk7Ci0gICAgYXNz
ZXJ0T2JqZWN0RXF1YWxzKGV4dGVuc2lvbjIsCi0gICAgICAgIGV4dGVuZGFibGUuZ2V0RXh0ZW5z
aW9uKHByb3RvLmpzcGIudGVzdC5JbmRpcmVjdEV4dGVuc2lvbi5zaW1wbGUpKTsKLSAgICBhc3Nl
cnRPYmplY3RFcXVhbHMoJ3h5enp5JywKLSAgICAgICAgZXh0ZW5kYWJsZS5nZXRFeHRlbnNpb24o
cHJvdG8uanNwYi50ZXN0LkluZGlyZWN0RXh0ZW5zaW9uLnN0cikpOwotICAgIGFzc2VydE9iamVj
dEVxdWFscyhbJ2EnLCAnYiddLCBleHRlbmRhYmxlLmdldEV4dGVuc2lvbigKLSAgICAgICAgcHJv
dG8uanNwYi50ZXN0LkluZGlyZWN0RXh0ZW5zaW9uLnJlcGVhdGVkU3RyTGlzdCkpOwotICAgIGFz
c2VydE9iamVjdEVxdWFscyhbczEsIHMyXSwgZXh0ZW5kYWJsZS5nZXRFeHRlbnNpb24oCi0gICAg
ICAgIHByb3RvLmpzcGIudGVzdC5JbmRpcmVjdEV4dGVuc2lvbi5yZXBlYXRlZFNpbXBsZUxpc3Qp
KTsKLSAgICAvLyBOb3Qgc3VwcG9ydGVkIHlldCwgYnV0IGl0IHNob3VsZCB3b3JrLi4uCi0gICAg
ZXh0ZW5kYWJsZS5zZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LkluZGlyZWN0RXh0ZW5zaW9u
LnNpbXBsZSwgbnVsbCk7Ci0gICAgYXNzZXJ0TnVsbCgKLSAgICAgICAgZXh0ZW5kYWJsZS5nZXRF
eHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LkluZGlyZWN0RXh0ZW5zaW9uLnNpbXBsZSkpOwotICAg
IGV4dGVuZGFibGUuc2V0RXh0ZW5zaW9uKHByb3RvLmpzcGIudGVzdC5JbmRpcmVjdEV4dGVuc2lv
bi5zdHIsIG51bGwpOwotICAgIGFzc2VydE51bGwoZXh0ZW5kYWJsZS5nZXRFeHRlbnNpb24ocHJv
dG8uanNwYi50ZXN0LkluZGlyZWN0RXh0ZW5zaW9uLnN0cikpOwotCi0KLSAgICAvLyBFeHRlbnNp
b24gZmllbGRzIHdpdGgganNwYi5pZ25vcmUgPSB0cnVlIGFyZSBpZ25vcmVkLgotICAgIGFzc2Vy
dFVuZGVmaW5lZChwcm90by5qc3BiLnRlc3QuSW5kaXJlY3RFeHRlbnNpb25bJ2lnbm9yZWQnXSk7
Ci0gICAgYXNzZXJ0VW5kZWZpbmVkKHByb3RvLmpzcGIudGVzdC5IYXNFeHRlbnNpb25zWydpZ25v
cmVkRmxvYXRpbmcnXSk7Ci0gIH0pOwotCi0gIGl0KCd0ZXN0RmxvYXRpbmdFeHRlbnNpb25zJywg
ZnVuY3Rpb24oKSB7Ci0gICAgLy8gRnJvbSBhbiBhdXRvZ2VuZXJhdGVkIGNvbnRhaW5lci4KLSAg
ICB2YXIgZXh0ZW5kYWJsZSA9IG5ldyBwcm90by5qc3BiLnRlc3QuSGFzRXh0ZW5zaW9ucyhbJ3Yx
JywgJ3YyJywgJ3YzJ10pOwotICAgIHZhciBleHRlbnNpb24gPSBuZXcgcHJvdG8uanNwYi50ZXN0
LlNpbXBsZTEoWydmb28nLCBbJ3MxJywgJ3MyJ11dKTsKLSAgICBleHRlbmRhYmxlLnNldEV4dGVu
c2lvbihwcm90by5qc3BiLnRlc3Quc2ltcGxlMSwgZXh0ZW5zaW9uKTsKLSAgICBhc3NlcnRPYmpl
Y3RFcXVhbHMoZXh0ZW5zaW9uLAotICAgICAgICBleHRlbmRhYmxlLmdldEV4dGVuc2lvbihwcm90
by5qc3BiLnRlc3Quc2ltcGxlMSkpOwotCi0gICAgLy8gRnJvbSBfbGliIG1vZGUuCi0gICAgZXh0
ZW5zaW9uID0gbmV3IHByb3RvLmpzcGIudGVzdC5FeHRlbnNpb25NZXNzYWdlKFsnczEnXSk7Ci0g
ICAgZXh0ZW5kYWJsZSA9IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdEV4dGVuc2lvbnNNZXNzYWdl
KFsxNl0pOwotICAgIGV4dGVuZGFibGUuc2V0RXh0ZW5zaW9uKHByb3RvLmpzcGIudGVzdC5mbG9h
dGluZ01zZ0ZpZWxkLCBleHRlbnNpb24pOwotICAgIGV4dGVuZGFibGUuc2V0RXh0ZW5zaW9uKHBy
b3RvLmpzcGIudGVzdC5mbG9hdGluZ1N0ckZpZWxkLCAnczInKTsKLSAgICBhc3NlcnRPYmplY3RF
cXVhbHMoZXh0ZW5zaW9uLAotICAgICAgICBleHRlbmRhYmxlLmdldEV4dGVuc2lvbihwcm90by5q
c3BiLnRlc3QuZmxvYXRpbmdNc2dGaWVsZCkpOwotICAgIGFzc2VydE9iamVjdEVxdWFscygnczIn
LAotICAgICAgICBleHRlbmRhYmxlLmdldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuZmxvYXRp
bmdTdHJGaWVsZCkpOwotICAgIGFzc2VydE5vdFVuZGVmaW5lZChwcm90by5qc3BiLmV4dHRlc3Qu
ZmxvYXRpbmdNc2dGaWVsZCk7Ci0gICAgYXNzZXJ0Tm90VW5kZWZpbmVkKHByb3RvLmpzcGIuZXh0
dGVzdC5mbG9hdGluZ01zZ0ZpZWxkVHdvKTsKLSAgICBhc3NlcnROb3RVbmRlZmluZWQocHJvdG8u
anNwYi5leHR0ZXN0LmJldGEuZmxvYXRpbmdTdHJGaWVsZCk7Ci0gIH0pOwotCi0gIGl0KCd0ZXN0
VG9PYmplY3RfZXh0ZW5kZWRPYmplY3QnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgZXh0ZW5zaW9u
MSA9IG5ldyBwcm90by5qc3BiLnRlc3QuSXNFeHRlbnNpb24oWydleHQxZmllbGQnXSk7Ci0gICAg
dmFyIGV4dGVuc2lvbjIgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlNpbXBsZTEoWydzdHInLCBbJ3Mx
JywgJ3MyJ10sIHRydWVdKTsKLSAgICB2YXIgZXh0ZW5kYWJsZSA9IG5ldyBwcm90by5qc3BiLnRl
c3QuSGFzRXh0ZW5zaW9ucyhbJ3YxJywgJ3YyJywgJ3YzJ10pOwotICAgIGV4dGVuZGFibGUuc2V0
RXh0ZW5zaW9uKHByb3RvLmpzcGIudGVzdC5Jc0V4dGVuc2lvbi5leHRGaWVsZCwgZXh0ZW5zaW9u
MSk7Ci0gICAgZXh0ZW5kYWJsZS5zZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LkluZGlyZWN0
RXh0ZW5zaW9uLnNpbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24y
KTsKLSAgICBleHRlbmRhYmxlLnNldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuSW5kaXJlY3RF
eHRlbnNpb24uc3RyLCAneHl6enknKTsKLSAgICBleHRlbmRhYmxlLnNldEV4dGVuc2lvbihwcm90
by5qc3BiLnRlc3QuSW5kaXJlY3RFeHRlbnNpb24ucmVwZWF0ZWRTdHJMaXN0LAotICAgICAgICBb
J2EnLCAnYiddKTsKLSAgICB2YXIgczEgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlNpbXBsZTEoWydm
b28nLCBbJ3MxJywgJ3MyJ10sIHRydWVdKTsKLSAgICB2YXIgczIgPSBuZXcgcHJvdG8uanNwYi50
ZXN0LlNpbXBsZTEoWydiYXInLCBbJ3QxJywgJ3QyJ10sIGZhbHNlXSk7Ci0gICAgZXh0ZW5kYWJs
ZS5zZXRFeHRlbnNpb24oCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5JbmRpcmVjdEV4dGVuc2lv
bi5yZXBlYXRlZFNpbXBsZUxpc3QsCi0gICAgICAgIFtzMSwgczJdKTsKLSAgICBhc3NlcnRPYmpl
Y3RFcXVhbHMoewotICAgICAgc3RyMTogJ3YxJywgc3RyMjogJ3YyJywgc3RyMzogJ3YzJywKLSAg
ICAgIGV4dEZpZWxkOiB7IGV4dDE6ICdleHQxZmllbGQnIH0sCi0gICAgICBzaW1wbGU6IHsKLSAg
ICAgICAgYVN0cmluZzogJ3N0cicsIGFSZXBlYXRlZFN0cmluZ0xpc3Q6IFsnczEnLCAnczInXSwg
YUJvb2xlYW46IHRydWUKLSAgICAgIH0sCi0gICAgICBzdHI6ICd4eXp6eScsCi0gICAgICByZXBl
YXRlZFN0ckxpc3Q6IFsnYScsICdiJ10sCi0gICAgICByZXBlYXRlZFNpbXBsZUxpc3Q6IFsKLSAg
ICAgICAgeyBhU3RyaW5nOiAnZm9vJywgYVJlcGVhdGVkU3RyaW5nTGlzdDogWydzMScsICdzMidd
LCBhQm9vbGVhbjogdHJ1ZX0sCi0gICAgICAgIHsgYVN0cmluZzogJ2JhcicsIGFSZXBlYXRlZFN0
cmluZ0xpc3Q6IFsndDEnLCAndDInXSwgYUJvb2xlYW46IGZhbHNlfQotICAgICAgXQotICAgIH0s
IGV4dGVuZGFibGUudG9PYmplY3QoKSk7Ci0KLSAgICAvLyBOb3csIHdpdGggaW5zdGFuY2VzIGlu
Y2x1ZGVkLgotICAgIGFzc2VydE9iamVjdEVxdWFscyh7Ci0gICAgICBzdHIxOiAndjEnLCBzdHIy
OiAndjInLCBzdHIzOiAndjMnLAotICAgICAgZXh0RmllbGQ6IHsKLSAgICAgICAgZXh0MTogJ2V4
dDFmaWVsZCcsCi0gICAgICAgICRqc3BiTWVzc2FnZUluc3RhbmNlOgotICAgICAgICAgICAgZXh0
ZW5kYWJsZS5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LklzRXh0ZW5zaW9uLmV4dEZpZWxk
KQotICAgICAgfSwKLSAgICAgIHNpbXBsZTogewotICAgICAgICBhU3RyaW5nOiAnc3RyJywKLSAg
ICAgICAgYVJlcGVhdGVkU3RyaW5nTGlzdDogWydzMScsICdzMiddLAotICAgICAgICBhQm9vbGVh
bjogdHJ1ZSwKLSAgICAgICAgJGpzcGJNZXNzYWdlSW5zdGFuY2U6Ci0gICAgICAgICAgICBleHRl
bmRhYmxlLmdldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuSW5kaXJlY3RFeHRlbnNpb24uc2lt
cGxlKQotICAgICAgfSwKLSAgICAgIHN0cjogJ3h5enp5JywKLSAgICAgIHJlcGVhdGVkU3RyTGlz
dDogWydhJywgJ2InXSwKLSAgICAgIHJlcGVhdGVkU2ltcGxlTGlzdDogW3sKLSAgICAgICAgYVN0
cmluZzogJ2ZvbycsCi0gICAgICAgIGFSZXBlYXRlZFN0cmluZ0xpc3Q6IFsnczEnLCAnczInXSwK
LSAgICAgICAgYUJvb2xlYW46IHRydWUsCi0gICAgICAgICRqc3BiTWVzc2FnZUluc3RhbmNlOiBz
MQotICAgICAgfSwgewotICAgICAgICBhU3RyaW5nOiAnYmFyJywKLSAgICAgICAgYVJlcGVhdGVk
U3RyaW5nTGlzdDogWyd0MScsICd0MiddLAotICAgICAgICBhQm9vbGVhbjogZmFsc2UsCi0gICAg
ICAgICRqc3BiTWVzc2FnZUluc3RhbmNlOiBzMgotICAgICAgfV0sCi0gICAgICAkanNwYk1lc3Nh
Z2VJbnN0YW5jZTogZXh0ZW5kYWJsZQotICAgIH0sIGV4dGVuZGFibGUudG9PYmplY3QodHJ1ZSAv
KiBvcHRfaW5jbHVkZUluc3RhbmNlICovKSk7Ci0gIH0pOwotCi0gIGl0KCd0ZXN0SW5pdGlhbGl6
YXRpb25fZW1wdHlBcnJheScsIGZ1bmN0aW9uKCkgewotICAgIHZhciBtc2cgPSBuZXcgcHJvdG8u
anNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoW10pOwotICAgIGlmIChqc3BiLk1lc3NhZ2UuTUlOSU1J
WkVfTUVNT1JZX0FMTE9DQVRJT05TKSB7Ci0gICAgICBhc3NlcnRBcnJheUVxdWFscyhbXSwgbXNn
LnRvQXJyYXkoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEV4dGVuc2lvbiBvYmplY3QgaXMg
Y3JlYXRlZCBwYXN0IGFsbCByZWd1bGFyIGZpZWxkcy4KLSAgICAgIGFzc2VydEFycmF5RXF1YWxz
KFssLCwge31dLCBtc2cudG9BcnJheSgpKTsKLSAgICB9Ci0gIH0pOwotCi0gIGl0KCd0ZXN0SW5p
dGlhbGl6YXRpb25fanVzdEV4dGVuc2lvbk9iamVjdCcsIGZ1bmN0aW9uKCkgewotICAgIHZhciBt
c2cgPSBuZXcgcHJvdG8uanNwYi50ZXN0LkVtcHR5KFt7MTogJ2hpJ31dKTsKLSAgICAvLyBUaGUg
ZXh0ZW5zaW9uT2JqZWN0IGlzIG5vdCBtb3ZlZCBmcm9tIGl0cyBvcmlnaW5hbCBsb2NhdGlvbi4K
LSAgICBhc3NlcnRBcnJheUVxdWFscyhbezE6ICdoaSd9XSwgbXNnLnRvQXJyYXkoKSk7Ci0gIH0p
OwotCi0gIGl0KCd0ZXN0SW5pdGlhbGl6YXRpb25faW5jb21wbGV0ZUxpc3QnLCBmdW5jdGlvbigp
IHsKLSAgICB2YXIgbXNnID0gbmV3IHByb3RvLmpzcGIudGVzdC5FbXB0eShbMSwgezQ6ICdoaSd9
XSk7Ci0gICAgLy8gVGhlIGV4dGVuc2lvbk9iamVjdCBpcyBub3QgbW92ZWQgZnJvbSBpdHMgb3Jp
Z2luYWwgbG9jYXRpb24uCi0gICAgYXNzZXJ0QXJyYXlFcXVhbHMoWzEsIHs0OiAnaGknfV0sIG1z
Zy50b0FycmF5KCkpOwotICB9KTsKLQotICBpdCgndGVzdEluaXRpYWxpemF0aW9uX2ZvcndhcmRD
b21wYXRpYmxlJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1zZyA9IG5ldyBwcm90by5qc3BiLnRl
c3QuRW1wdHkoWzEsIDIsIDMsIHsxOiAnaGknfV0pOwotICAgIGFzc2VydEFycmF5RXF1YWxzKFsx
LCAyLCAzLCB7MTogJ2hpJ31dLCBtc2cudG9BcnJheSgpKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3RF
eHRlbmRlZE1lc3NhZ2VFbnN1cmVPYmplY3QnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgZGF0YSA9
IG5ldyBwcm90by5qc3BiLnRlc3QuSGFzRXh0ZW5zaW9ucyhbJ3N0cjEnLAotICAgICAgICB7J2Ff
a2V5JzogJ2FuX29iamVjdCd9XSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCdhbl9vYmplY3QnLCBkYXRh
LmV4dGVuc2lvbk9iamVjdF9bJ2Ffa2V5J10pOwotICB9KTsKLQotICBpdCgndGVzdFRvT2JqZWN0
X2hhc0V4dGVuc2lvbkZpZWxkJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGRhdGEgPSBuZXcgcHJv
dG8uanNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoWydzdHIxJywgezEwMDogWydleHQxJ119XSk7Ci0g
ICAgdmFyIG9iaiA9IGRhdGEudG9PYmplY3QoKTsKLSAgICBhc3NlcnRFcXVhbHMoJ3N0cjEnLCBv
Ymouc3RyMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCdleHQxJywgb2JqLmV4dEZpZWxkLmV4dDEpOwot
ICB9KTsKLQotICBpdCgndGVzdEdldEV4dGVuc2lvbicsIGZ1bmN0aW9uKCkgewotICAgIHZhciBk
YXRhID0gbmV3IHByb3RvLmpzcGIudGVzdC5IYXNFeHRlbnNpb25zKFsnc3RyMScsIHsxMDA6IFsn
ZXh0MSddfV0pOwotICAgIGFzc2VydEVxdWFscygnc3RyMScsIGRhdGEuZ2V0U3RyMSgpKTsKLSAg
ICB2YXIgZXh0ZW5zaW9uID0gZGF0YS5nZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LklzRXh0
ZW5zaW9uLmV4dEZpZWxkKTsKLSAgICBhc3NlcnROb3ROdWxsKGV4dGVuc2lvbik7Ci0gICAgYXNz
ZXJ0RXF1YWxzKCdleHQxJywgZXh0ZW5zaW9uLmdldEV4dDEoKSk7Ci0gIH0pOwotCi0gIGl0KCd0
ZXN0U2V0RXh0ZW5zaW9uJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGRhdGEgPSBuZXcgcHJvdG8u
anNwYi50ZXN0Lkhhc0V4dGVuc2lvbnMoKTsKLSAgICB2YXIgZXh0ZW5zaW9uTWVzc2FnZSA9IG5l
dyBwcm90by5qc3BiLnRlc3QuSXNFeHRlbnNpb24oWydpc19leHRlbnNpb24nXSk7Ci0gICAgZGF0
YS5zZXRFeHRlbnNpb24ocHJvdG8uanNwYi50ZXN0LklzRXh0ZW5zaW9uLmV4dEZpZWxkLCBleHRl
bnNpb25NZXNzYWdlKTsKLSAgICB2YXIgb2JqID0gZGF0YS50b09iamVjdCgpOwotICAgIGFzc2Vy
dE5vdE51bGwoCi0gICAgICAgIGRhdGEuZ2V0RXh0ZW5zaW9uKHByb3RvLmpzcGIudGVzdC5Jc0V4
dGVuc2lvbi5leHRGaWVsZCkpOwotICAgIGFzc2VydEVxdWFscygnaXNfZXh0ZW5zaW9uJywgb2Jq
LmV4dEZpZWxkLmV4dDEpOwotICB9KTsKLQotICAvKioKLSAgICogTm90ZSB0aGF0IGdyb3VwIGlz
IGxvbmcgZGVwcmVjYXRlZCwgd2Ugb25seSBzdXBwb3J0IGl0IGJlY2F1c2UgSnNQYiBoYXMKLSAg
ICogYSBnb2FsIG9mIGJlaW5nIGFibGUgdG8gZ2VuZXJhdGUgSlMgY2xhc3NlcyBmb3IgYWxsIHBy
b3RvIGRlc2NyaXB0b3JzLgotICAgKi8KLSAgaXQoJ3Rlc3RHcm91cHMnLCBmdW5jdGlvbigpIHsK
LSAgICB2YXIgZ3JvdXAgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RHcm91cCgpOwotICAgIHZh
ciBzb21lR3JvdXAgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RHcm91cC5SZXBlYXRlZEdyb3Vw
KCk7Ci0gICAgc29tZUdyb3VwLnNldElkKCdnMScpOwotICAgIHNvbWVHcm91cC5zZXRTb21lQm9v
bExpc3QoW3RydWUsIGZhbHNlXSk7Ci0gICAgZ3JvdXAuc2V0UmVwZWF0ZWRHcm91cExpc3QoW3Nv
bWVHcm91cF0pOwotICAgIHZhciBncm91cHMgPSBncm91cC5nZXRSZXBlYXRlZEdyb3VwTGlzdCgp
OwotICAgIGFzc2VydEVxdWFscygnZzEnLCBncm91cHNbMF0uZ2V0SWQoKSk7Ci0gICAgYXNzZXJ0
T2JqZWN0RXF1YWxzKFt0cnVlLCBmYWxzZV0sIGdyb3Vwc1swXS5nZXRTb21lQm9vbExpc3QoKSk7
Ci0gICAgYXNzZXJ0T2JqZWN0RXF1YWxzKHtpZDogJ2cxJywgc29tZUJvb2xMaXN0OiBbdHJ1ZSwg
ZmFsc2VdfSwKLSAgICAgICAgZ3JvdXBzWzBdLnRvT2JqZWN0KCkpOwotICAgIGFzc2VydE9iamVj
dEVxdWFscyh7Ci0gICAgICByZXBlYXRlZEdyb3VwTGlzdDogW3tpZDogJ2cxJywgc29tZUJvb2xM
aXN0OiBbdHJ1ZSwgZmFsc2VdfV0sCi0gICAgICByZXF1aXJlZEdyb3VwOiB7aWQ6IHVuZGVmaW5l
ZH0sCi0gICAgICBvcHRpb25hbEdyb3VwOiB1bmRlZmluZWQsCi0gICAgICByZXF1aXJlZFNpbXBs
ZToge2FSZXBlYXRlZFN0cmluZ0xpc3Q6IFtdLCBhU3RyaW5nOiB1bmRlZmluZWR9LAotICAgICAg
b3B0aW9uYWxTaW1wbGU6IHVuZGVmaW5lZCwKLSAgICAgIGlkOiB1bmRlZmluZWQKLSAgICB9LCBn
cm91cC50b09iamVjdCgpKTsKLSAgICB2YXIgZ3JvdXAxID0gbmV3IHByb3RvLmpzcGIudGVzdC5U
ZXN0R3JvdXAxKCk7Ci0gICAgZ3JvdXAxLnNldEdyb3VwKHNvbWVHcm91cCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKHNvbWVHcm91cCwgZ3JvdXAxLmdldEdyb3VwKCkpOwotICB9KTsKLQotICBpdCgndGVz
dE5vbkV4dGVuc2lvbkZpZWxkc0FmdGVyRXh0ZW5zaW9uUmFuZ2UnLCBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgZGF0YSA9IFt7JzEnOiAnYV9zdHJpbmcnfV07Ci0gICAgdmFyIG1lc3NhZ2UgPSBuZXcg
cHJvdG8uanNwYi50ZXN0LkNvbXBsZXgoZGF0YSk7Ci0gICAgYXNzZXJ0QXJyYXlFcXVhbHMoW10s
IG1lc3NhZ2UuZ2V0QVJlcGVhdGVkU3RyaW5nTGlzdCgpKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3RS
ZXNlcnZlZEdldHRlck5hbWVzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBuZXcg
cHJvdG8uanNwYi50ZXN0LlRlc3RSZXNlcnZlZE5hbWVzKCk7Ci0gICAgbWVzc2FnZS5zZXRFeHRl
bnNpb24kKDExKTsKLSAgICBtZXNzYWdlLnNldEV4dGVuc2lvbihwcm90by5qc3BiLnRlc3QuVGVz
dFJlc2VydmVkTmFtZXNFeHRlbnNpb24uZm9vLCAxMik7Ci0gICAgYXNzZXJ0RXF1YWxzKDExLCBt
ZXNzYWdlLmdldEV4dGVuc2lvbiQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyLCBtZXNzYWdlLmdl
dEV4dGVuc2lvbigKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LlRlc3RSZXNlcnZlZE5hbWVzRXh0
ZW5zaW9uLmZvbykpOwotICAgIGFzc2VydE9iamVjdEVxdWFscyh7ZXh0ZW5zaW9uOiAxMSwgZm9v
OiAxMn0sIG1lc3NhZ2UudG9PYmplY3QoKSk7Ci0gIH0pOwotCi0gIGl0KCd0ZXN0SW5pdGlhbGl6
ZU1lc3NhZ2VXaXRoVW5zZXRPbmVvZicsIGZ1bmN0aW9uKCkgewotICAgIHZhciBtZXNzYWdlID0g
bmV3IHByb3RvLmpzcGIudGVzdC5UZXN0TWVzc2FnZVdpdGhPbmVvZihbXSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKAotICAgICAgICBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRoT25lb2YuUGFy
dGlhbE9uZW9mQ2FzZS4KLSAgICAgICAgICAgIFBBUlRJQUxfT05FT0ZfTk9UX1NFVCwKLSAgICAg
ICAgbWVzc2FnZS5nZXRQYXJ0aWFsT25lb2ZDYXNlKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAg
ICAgICAgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9mLlJlY3Vyc2l2ZU9uZW9m
Q2FzZS4KLSAgICAgICAgICAgIFJFQ1VSU0lWRV9PTkVPRl9OT1RfU0VULAotICAgICAgICBtZXNz
YWdlLmdldFJlY3Vyc2l2ZU9uZW9mQ2FzZSgpKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3RJbml0aWFs
aXplTWVzc2FnZVdpdGhTaW5nbGVWYWx1ZVNldEluT25lb2YnLCBmdW5jdGlvbigpIHsKLSAgICB2
YXIgbWVzc2FnZSA9IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRoT25lb2YoWyws
ICd4J10pOwotCi0gICAgYXNzZXJ0RXF1YWxzKCd4JywgbWVzc2FnZS5nZXRQb25lKCkpOwotICAg
IGFzc2VydFVuZGVmaW5lZChtZXNzYWdlLmdldFB0aHJlZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMo
Ci0gICAgICAgIHByb3RvLmpzcGIudGVzdC5UZXN0TWVzc2FnZVdpdGhPbmVvZi5QYXJ0aWFsT25l
b2ZDYXNlLlBPTkUsCi0gICAgICAgIG1lc3NhZ2UuZ2V0UGFydGlhbE9uZW9mQ2FzZSgpKTsKLSAg
fSk7Ci0KLSAgaXQoJ3Rlc3RLZWVwc0xhc3RXaXJlVmFsdWVTZXRJblVuaW9uX211bHRpcGxlVmFs
dWVzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBuZXcgcHJvdG8uanNwYi50ZXN0
LlRlc3RNZXNzYWdlV2l0aE9uZW9mKFssLCAneCcsLCAneSddKTsKLQotICAgIGFzc2VydFVuZGVm
aW5lZCgneCcsIG1lc3NhZ2UuZ2V0UG9uZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoJ3knLCBtZXNz
YWdlLmdldFB0aHJlZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHByb3RvLmpzcGIu
dGVzdC5UZXN0TWVzc2FnZVdpdGhPbmVvZi5QYXJ0aWFsT25lb2ZDYXNlLlBUSFJFRSwKLSAgICAg
ICAgbWVzc2FnZS5nZXRQYXJ0aWFsT25lb2ZDYXNlKCkpOwotICB9KTsKLQotICBpdCgndGVzdFNl
dHRpbmdPbmVvZkZpZWxkQ2xlYXJzT3RoZXJzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1lc3Nh
Z2UgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9mOwotICAgIGFzc2Vy
dFVuZGVmaW5lZChtZXNzYWdlLmdldFBvbmUoKSk7Ci0gICAgYXNzZXJ0VW5kZWZpbmVkKG1lc3Nh
Z2UuZ2V0UHRocmVlKCkpOwotCi0gICAgbWVzc2FnZS5zZXRQb25lKCdoaScpOwotICAgIGFzc2Vy
dEVxdWFscygnaGknLCBtZXNzYWdlLmdldFBvbmUoKSk7Ci0gICAgYXNzZXJ0VW5kZWZpbmVkKG1l
c3NhZ2UuZ2V0UHRocmVlKCkpOwotCi0gICAgbWVzc2FnZS5zZXRQdGhyZWUoJ2J5ZScpOwotICAg
IGFzc2VydFVuZGVmaW5lZChtZXNzYWdlLmdldFBvbmUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCdi
eWUnLCBtZXNzYWdlLmdldFB0aHJlZSgpKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rlc3RTZXR0aW5nT25l
b2ZGaWVsZERvZXNOb3RDbGVhckZpZWxkc0Zyb21PdGhlclVuaW9ucycsIGZ1bmN0aW9uKCkgewot
ICAgIHZhciBvdGhlciA9IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRoT25lb2Y7
Ci0gICAgdmFyIG1lc3NhZ2UgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9u
ZW9mOwotICAgIGFzc2VydFVuZGVmaW5lZChtZXNzYWdlLmdldFBvbmUoKSk7Ci0gICAgYXNzZXJ0
VW5kZWZpbmVkKG1lc3NhZ2UuZ2V0UHRocmVlKCkpOwotICAgIGFzc2VydFVuZGVmaW5lZChtZXNz
YWdlLmdldFJvbmUoKSk7Ci0KLSAgICBtZXNzYWdlLnNldFBvbmUoJ2hpJyk7Ci0gICAgbWVzc2Fn
ZS5zZXRSb25lKG90aGVyKTsKLSAgICBhc3NlcnRFcXVhbHMoJ2hpJywgbWVzc2FnZS5nZXRQb25l
KCkpOwotICAgIGFzc2VydFVuZGVmaW5lZChtZXNzYWdlLmdldFB0aHJlZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMob3RoZXIsIG1lc3NhZ2UuZ2V0Um9uZSgpKTsKLQotICAgIG1lc3NhZ2Uuc2V0UHRo
cmVlKCdieWUnKTsKLSAgICBhc3NlcnRVbmRlZmluZWQobWVzc2FnZS5nZXRQb25lKCkpOwotICAg
IGFzc2VydEVxdWFscygnYnllJywgbWVzc2FnZS5nZXRQdGhyZWUoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKG90aGVyLCBtZXNzYWdlLmdldFJvbmUoKSk7Ci0gIH0pOwotCi0gIGl0KCd0ZXN0VW5zZXRz
T25lb2ZDYXNlV2hlbkZpZWxkSXNDbGVhcmVkJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1lc3Nh
Z2UgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9mOwotICAgIGFzc2Vy
dEVxdWFscygKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9mLlBh
cnRpYWxPbmVvZkNhc2UuCi0gICAgICAgICAgICBQQVJUSUFMX09ORU9GX05PVF9TRVQsCi0gICAg
ICAgIG1lc3NhZ2UuZ2V0UGFydGlhbE9uZW9mQ2FzZSgpKTsKLQotICAgIG1lc3NhZ2Uuc2V0UG9u
ZSgnaGknKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5UZXN0
TWVzc2FnZVdpdGhPbmVvZi5QYXJ0aWFsT25lb2ZDYXNlLlBPTkUsCi0gICAgICAgIG1lc3NhZ2Uu
Z2V0UGFydGlhbE9uZW9mQ2FzZSgpKTsKLQotICAgIG1lc3NhZ2UuY2xlYXJQb25lKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKAotICAgICAgICBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRoT25l
b2YuUGFydGlhbE9uZW9mQ2FzZS4KLSAgICAgICAgICAgIFBBUlRJQUxfT05FT0ZfTk9UX1NFVCwK
LSAgICAgICAgbWVzc2FnZS5nZXRQYXJ0aWFsT25lb2ZDYXNlKCkpOwotICB9KTsKLQotICBpdCgn
dGVzdE1lc3NhZ2VXaXRoRGVmYXVsdE9uZW9mVmFsdWVzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFy
IG1lc3NhZ2UgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9mOwotICAg
IGFzc2VydEVxdWFscygxMjM0LCBtZXNzYWdlLmdldEFvbmUoKSk7Ci0gICAgYXNzZXJ0VW5kZWZp
bmVkKG1lc3NhZ2UuZ2V0QXR3bygpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHByb3Rv
LmpzcGIudGVzdC5UZXN0TWVzc2FnZVdpdGhPbmVvZi5EZWZhdWx0T25lb2ZBQ2FzZQotICAgICAg
ICAgICAgLkRFRkFVTFRfT05FT0ZfQV9OT1RfU0VULAotICAgICAgICBtZXNzYWdlLmdldERlZmF1
bHRPbmVvZkFDYXNlKCkpOwotCi0gICAgbWVzc2FnZS5zZXRBb25lKDU2Nyk7Ci0gICAgYXNzZXJ0
RXF1YWxzKDU2NywgbWVzc2FnZS5nZXRBb25lKCkpOwotICAgIGFzc2VydFVuZGVmaW5lZChtZXNz
YWdlLmdldEF0d28oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBwcm90by5qc3BiLnRl
c3QuVGVzdE1lc3NhZ2VXaXRoT25lb2YuRGVmYXVsdE9uZW9mQUNhc2UuQU9ORSwKLSAgICAgICAg
bWVzc2FnZS5nZXREZWZhdWx0T25lb2ZBQ2FzZSgpKTsKLQotICAgIG1lc3NhZ2Uuc2V0QXR3byg4
OTApOwotICAgIGFzc2VydEVxdWFscygxMjM0LCBtZXNzYWdlLmdldEFvbmUoKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDg5MCwgbWVzc2FnZS5nZXRBdHdvKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAg
ICAgICAgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9mLkRlZmF1bHRPbmVvZkFD
YXNlLkFUV08sCi0gICAgICAgIG1lc3NhZ2UuZ2V0RGVmYXVsdE9uZW9mQUNhc2UoKSk7Ci0KLSAg
ICBtZXNzYWdlLmNsZWFyQXR3bygpOwotICAgIGFzc2VydEVxdWFscygxMjM0LCBtZXNzYWdlLmdl
dEFvbmUoKSk7Ci0gICAgYXNzZXJ0VW5kZWZpbmVkKG1lc3NhZ2UuZ2V0QXR3bygpKTsKLSAgICBh
c3NlcnRFcXVhbHMoCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5UZXN0TWVzc2FnZVdpdGhPbmVv
Zi5EZWZhdWx0T25lb2ZBQ2FzZQotICAgICAgICAgICAgLkRFRkFVTFRfT05FT0ZfQV9OT1RfU0VU
LAotICAgICAgICBtZXNzYWdlLmdldERlZmF1bHRPbmVvZkFDYXNlKCkpOwotICB9KTsKLQotICBp
dCgndGVzdE1lc3NhZ2VXaXRoRGVmYXVsdE9uZW9mVmFsdWVzX2RlZmF1bHROb3RPbkZpcnN0Rmll
bGQnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG5ldyBwcm90by5qc3BiLnRlc3Qu
VGVzdE1lc3NhZ2VXaXRoT25lb2Y7Ci0gICAgYXNzZXJ0VW5kZWZpbmVkKG1lc3NhZ2UuZ2V0Qm9u
ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMTIzNCwgbWVzc2FnZS5nZXRCdHdvKCkpOwotICAgIGFz
c2VydEVxdWFscygKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9m
LkRlZmF1bHRPbmVvZkJDYXNlCi0gICAgICAgICAgICAuREVGQVVMVF9PTkVPRl9CX05PVF9TRVQs
Ci0gICAgICAgIG1lc3NhZ2UuZ2V0RGVmYXVsdE9uZW9mQkNhc2UoKSk7Ci0KLSAgICBtZXNzYWdl
LnNldEJvbmUoMik7Ci0gICAgYXNzZXJ0RXF1YWxzKDIsIG1lc3NhZ2UuZ2V0Qm9uZSgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoMTIzNCwgbWVzc2FnZS5nZXRCdHdvKCkpOwotICAgIGFzc2VydEVxdWFs
cygKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9mLkRlZmF1bHRP
bmVvZkJDYXNlLkJPTkUsCi0gICAgICAgIG1lc3NhZ2UuZ2V0RGVmYXVsdE9uZW9mQkNhc2UoKSk7
Ci0KLSAgICBtZXNzYWdlLnNldEJ0d28oMyk7Ci0gICAgYXNzZXJ0VW5kZWZpbmVkKG1lc3NhZ2Uu
Z2V0Qm9uZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoMywgbWVzc2FnZS5nZXRCdHdvKCkpOwotICAg
IGFzc2VydEVxdWFscygKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9u
ZW9mLkRlZmF1bHRPbmVvZkJDYXNlLkJUV08sCi0gICAgICAgIG1lc3NhZ2UuZ2V0RGVmYXVsdE9u
ZW9mQkNhc2UoKSk7Ci0KLSAgICBtZXNzYWdlLmNsZWFyQnR3bygpOwotICAgIGFzc2VydFVuZGVm
aW5lZChtZXNzYWdlLmdldEJvbmUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMzQsIG1lc3NhZ2Uu
Z2V0QnR3bygpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5U
ZXN0TWVzc2FnZVdpdGhPbmVvZi5EZWZhdWx0T25lb2ZCQ2FzZQotICAgICAgICAgICAgLkRFRkFV
TFRfT05FT0ZfQl9OT1RfU0VULAotICAgICAgICBtZXNzYWdlLmdldERlZmF1bHRPbmVvZkJDYXNl
KCkpOwotICB9KTsKLQotICBpdCgndGVzdEluaXRpYWxpemVNZXNzYWdlV2l0aE9uZW9mRGVmYXVs
dHMnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgbWVzc2FnZSA9Ci0gICAgICAgIG5ldyBwcm90by5q
c3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRoT25lb2YobmV3IEFycmF5KDkpLmNvbmNhdCg1NjcpKTsK
LSAgICBhc3NlcnRFcXVhbHMoNTY3LCBtZXNzYWdlLmdldEFvbmUoKSk7Ci0gICAgYXNzZXJ0VW5k
ZWZpbmVkKG1lc3NhZ2UuZ2V0QXR3bygpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgIHBy
b3RvLmpzcGIudGVzdC5UZXN0TWVzc2FnZVdpdGhPbmVvZi5EZWZhdWx0T25lb2ZBQ2FzZS5BT05F
LAotICAgICAgICBtZXNzYWdlLmdldERlZmF1bHRPbmVvZkFDYXNlKCkpOwotCi0gICAgbWVzc2Fn
ZSA9Ci0gICAgICAgIG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRoT25lb2YobmV3
IEFycmF5KDEwKS5jb25jYXQoODkwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEyMzQsIG1lc3NhZ2Uu
Z2V0QW9uZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoODkwLCBtZXNzYWdlLmdldEF0d28oKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRo
T25lb2YuRGVmYXVsdE9uZW9mQUNhc2UuQVRXTywKLSAgICAgICAgbWVzc2FnZS5nZXREZWZhdWx0
T25lb2ZBQ2FzZSgpKTsKLQotICAgIG1lc3NhZ2UgPQotICAgICAgICBuZXcgcHJvdG8uanNwYi50
ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9mKG5ldyBBcnJheSg5KS5jb25jYXQoNTY3LCA4OTApKTsK
LSAgICBhc3NlcnRFcXVhbHMoMTIzNCwgbWVzc2FnZS5nZXRBb25lKCkpOwotICAgIGFzc2VydEVx
dWFscyg4OTAsIG1lc3NhZ2UuZ2V0QXR3bygpKTsKLSAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAg
IHByb3RvLmpzcGIudGVzdC5UZXN0TWVzc2FnZVdpdGhPbmVvZi5EZWZhdWx0T25lb2ZBQ2FzZS5B
VFdPLAotICAgICAgICBtZXNzYWdlLmdldERlZmF1bHRPbmVvZkFDYXNlKCkpOwotICB9KTsKLQot
ICBpdCgndGVzdEluaXRpYWxpemVNZXNzYWdlV2l0aE9uZW9mRGVmYXVsdHNfZGVmYXVsdE5vdFNl
dE9uRmlyc3RGaWVsZCcsCi0gICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIG1lc3NhZ2U7
Ci0KLSAgICAgICAgbWVzc2FnZSA9Ci0gICAgICAgICAgICBuZXcgcHJvdG8uanNwYi50ZXN0LlRl
c3RNZXNzYWdlV2l0aE9uZW9mKG5ldyBBcnJheSgxMSkuY29uY2F0KDU2NykpOwotICAgICAgICBh
c3NlcnRFcXVhbHMoNTY3LCBtZXNzYWdlLmdldEJvbmUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFs
cygxMjM0LCBtZXNzYWdlLmdldEJ0d28oKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygKLSAgICAg
ICAgICAgIHByb3RvLmpzcGIudGVzdC5UZXN0TWVzc2FnZVdpdGhPbmVvZi5EZWZhdWx0T25lb2ZC
Q2FzZS5CT05FLAotICAgICAgICAgICAgbWVzc2FnZS5nZXREZWZhdWx0T25lb2ZCQ2FzZSgpKTsK
LQotICAgICAgICBtZXNzYWdlID0KLSAgICAgICAgICAgIG5ldyBwcm90by5qc3BiLnRlc3QuVGVz
dE1lc3NhZ2VXaXRoT25lb2YobmV3IEFycmF5KDEyKS5jb25jYXQoODkwKSk7Ci0gICAgICAgIGFz
c2VydFVuZGVmaW5lZChtZXNzYWdlLmdldEJvbmUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg4
OTAsIG1lc3NhZ2UuZ2V0QnR3bygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAg
ICAgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9mLkRlZmF1bHRPbmVvZkJDYXNl
LkJUV08sCi0gICAgICAgICAgICBtZXNzYWdlLmdldERlZmF1bHRPbmVvZkJDYXNlKCkpOwotCi0g
ICAgICAgIG1lc3NhZ2UgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNzYWdlV2l0aE9uZW9m
KAotICAgICAgICAgICAgbmV3IEFycmF5KDExKS5jb25jYXQoNTY3LCA4OTApKTsKLSAgICAgICAg
YXNzZXJ0VW5kZWZpbmVkKG1lc3NhZ2UuZ2V0Qm9uZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxz
KDg5MCwgbWVzc2FnZS5nZXRCdHdvKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAg
ICAgICBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRoT25lb2YuRGVmYXVsdE9uZW9mQkNh
c2UuQlRXTywKLSAgICAgICAgICAgIG1lc3NhZ2UuZ2V0RGVmYXVsdE9uZW9mQkNhc2UoKSk7Ci0g
ICAgICB9KTsKLQotICBpdCgndGVzdE9uZW9mQ29udGFpbmluZ0Fub3RoZXJNZXNzYWdlJywgZnVu
Y3Rpb24oKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RNZXNz
YWdlV2l0aE9uZW9mOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0
LlRlc3RNZXNzYWdlV2l0aE9uZW9mLlJlY3Vyc2l2ZU9uZW9mQ2FzZS4KLSAgICAgICAgICAgIFJF
Q1VSU0lWRV9PTkVPRl9OT1RfU0VULAotICAgICAgICBtZXNzYWdlLmdldFJlY3Vyc2l2ZU9uZW9m
Q2FzZSgpKTsKLQotICAgIHZhciBvdGhlciA9IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3Nh
Z2VXaXRoT25lb2Y7Ci0gICAgbWVzc2FnZS5zZXRSb25lKG90aGVyKTsKLSAgICBhc3NlcnRFcXVh
bHMob3RoZXIsIG1lc3NhZ2UuZ2V0Um9uZSgpKTsKLSAgICBhc3NlcnRVbmRlZmluZWQobWVzc2Fn
ZS5nZXRSdHdvKCkpOwotICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgcHJvdG8uanNwYi50ZXN0
LlRlc3RNZXNzYWdlV2l0aE9uZW9mLlJlY3Vyc2l2ZU9uZW9mQ2FzZS5ST05FLAotICAgICAgICBt
ZXNzYWdlLmdldFJlY3Vyc2l2ZU9uZW9mQ2FzZSgpKTsKLQotICAgIG1lc3NhZ2Uuc2V0UnR3bygn
aGknKTsKLSAgICBhc3NlcnRVbmRlZmluZWQobWVzc2FnZS5nZXRSb25lKCkpOwotICAgIGFzc2Vy
dEVxdWFscygnaGknLCBtZXNzYWdlLmdldFJ0d28oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKAotICAg
ICAgICBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRoT25lb2YuUmVjdXJzaXZlT25lb2ZD
YXNlLlJUV08sCi0gICAgICAgIG1lc3NhZ2UuZ2V0UmVjdXJzaXZlT25lb2ZDYXNlKCkpOwotICB9
KTsKLQotICBpdCgndGVzdFF1ZXJ5aW5nT25lb2ZDYXNlRW5zdXJlc09ubHlPbmVGaWVsZElzU2V0
SW5VbmRlcmx5aW5nQXJyYXknLAotICAgICBmdW5jdGlvbigpIHsKLSAgICB2YXIgbWVzc2FnZSA9
IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdE1lc3NhZ2VXaXRoT25lb2Y7Ci0gICAgbWVzc2FnZS5z
ZXRQb25lKCd4Jyk7Ci0gICAgYXNzZXJ0RXF1YWxzKCd4JywgbWVzc2FnZS5nZXRQb25lKCkpOwot
ICAgIGFzc2VydFVuZGVmaW5lZChtZXNzYWdlLmdldFB0aHJlZSgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5UZXN0TWVzc2FnZVdpdGhPbmVvZi5QYXJ0aWFs
T25lb2ZDYXNlLlBPTkUsCi0gICAgICAgIG1lc3NhZ2UuZ2V0UGFydGlhbE9uZW9mQ2FzZSgpKTsK
LQotICAgIHZhciBhcnJheSA9IG1lc3NhZ2UudG9BcnJheSgpOwotICAgIGFzc2VydEVxdWFscygn
eCcsIGFycmF5WzJdKTsKLSAgICBhc3NlcnRVbmRlZmluZWQoYXJyYXlbNF0pOwotICAgIGFycmF5
WzRdID0gJ3knOwotCi0gICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICBwcm90by5qc3BiLnRlc3Qu
VGVzdE1lc3NhZ2VXaXRoT25lb2YuUGFydGlhbE9uZW9mQ2FzZS5QVEhSRUUsCi0gICAgICAgIG1l
c3NhZ2UuZ2V0UGFydGlhbE9uZW9mQ2FzZSgpKTsKLSAgICBhc3NlcnRVbmRlZmluZWQoYXJyYXlb
Ml0pOwotICAgIGFzc2VydEVxdWFscygneScsIGFycmF5WzRdKTsKLSAgfSk7Ci0KLSAgaXQoJ3Rl
c3RGbG9hdGluZ1BvaW50RmllbGRzU3VwcG9ydE5hbicsIGZ1bmN0aW9uKCkgewotICAgIHZhciBh
c3NlcnROYW4gPSBmdW5jdGlvbih4KSB7Ci0gICAgICBhc3NlcnRUcnVlKCdFeHBlY3RlZCAnICsg
eCArICcgKCcgKyBnb29nLnR5cGVPZih4KSArICcpIHRvIGJlIE5hTi4nLAotICAgICAgICAgIGdv
b2cuaXNOdW1iZXIoeCkgJiYgaXNOYU4oeCkpOwotICAgIH07Ci0KLSAgICB2YXIgbWVzc2FnZSA9
IG5ldyBwcm90by5qc3BiLnRlc3QuRmxvYXRpbmdQb2ludEZpZWxkcyhbCi0gICAgICAnTmFOJywg
J05hTicsIFsnTmFOJywgJ05hTiddLCAnTmFOJywKLSAgICAgICdOYU4nLCAnTmFOJywgWydOYU4n
LCAnTmFOJ10sICdOYU4nCi0gICAgXSk7Ci0gICAgYXNzZXJ0TmFuKG1lc3NhZ2UuZ2V0T3B0aW9u
YWxGbG9hdEZpZWxkKCkpOwotICAgIGFzc2VydE5hbihtZXNzYWdlLmdldFJlcXVpcmVkRmxvYXRG
aWVsZCgpKTsKLSAgICBhc3NlcnROYW4obWVzc2FnZS5nZXRSZXBlYXRlZEZsb2F0RmllbGRMaXN0
KClbMF0pOwotICAgIGFzc2VydE5hbihtZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRGaWVsZExpc3Qo
KVsxXSk7Ci0gICAgYXNzZXJ0TmFuKG1lc3NhZ2UuZ2V0RGVmYXVsdEZsb2F0RmllbGQoKSk7Ci0g
ICAgYXNzZXJ0TmFuKG1lc3NhZ2UuZ2V0T3B0aW9uYWxEb3VibGVGaWVsZCgpKTsKLSAgICBhc3Nl
cnROYW4obWVzc2FnZS5nZXRSZXF1aXJlZERvdWJsZUZpZWxkKCkpOwotICAgIGFzc2VydE5hbiht
ZXNzYWdlLmdldFJlcGVhdGVkRG91YmxlRmllbGRMaXN0KClbMF0pOwotICAgIGFzc2VydE5hbiht
ZXNzYWdlLmdldFJlcGVhdGVkRG91YmxlRmllbGRMaXN0KClbMV0pOwotICAgIGFzc2VydE5hbiht
ZXNzYWdlLmdldERlZmF1bHREb3VibGVGaWVsZCgpKTsKLSAgfSk7Ci0KLX0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9qcy9ub2RlX2xvYWRlci5qcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvanMvbm9kZV9sb2FkZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDc5MjExYWRkYTQ5YTMyNWFkNjRkODBlMTIyNzYxN2JmYjlhZWY1YmEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9ub2RlX2xvYWRl
ci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgTG9hZGVyIHRoYXQgaGFuZGxl
cyBnb29nLnJlcXVpcmUoKSBmb3IgTm9kZS5KUy4KLSAqLwotCi12YXIgb2xkTG9hZGVyID0gZ29v
Zy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUOwotCi1nb29nLmdsb2JhbC5DTE9TVVJFX0lN
UE9SVF9TQ1JJUFQgPSBmdW5jdGlvbihzcmMsIG9wdF9zb3VyY2VUZXh0KSB7Ci0gIGlmIChvcHRf
c291cmNlVGV4dCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgdHJ5IHsKLSAgICAgIC8vIExvYWQgZnJv
bSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0gICAgICByZXF1aXJlKCIuLyIgKyBzcmMpOwotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgLy8gRmFsbCBiYWNrIHRv
IHRoZSBDbG9zdXJlIGxvYWRlci4KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gb2xkTG9hZGVyKHNy
Yywgb3B0X3NvdXJjZVRleHQpOwotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvcGFja2FnZS5qc29uIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9w
YWNrYWdlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMDU3MjJhNTQxYjdk
Zjc4NTZkMDMzZTQ0YmI4YzNkM2NmNWJjMGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9qcy9wYWNrYWdlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyNCAr
MCwwIEBACi17Ci0gICJuYW1lIjogImdvb2dsZS1wcm90b2J1ZiIsCi0gICJ2ZXJzaW9uIjogIjMu
MC4wLWFscGhhLjYiLAotICAiZGVzY3JpcHRpb24iOiAiUHJvdG9jb2wgQnVmZmVycyBmb3IgSmF2
YVNjcmlwdCIsCi0gICJtYWluIjogImdvb2dsZS1wcm90b2J1Zi5qcyIsCi0gICJkZXBlbmRlbmNp
ZXMiOiB7Ci0gICAgImdvb2dsZS1jbG9zdXJlLWxpYnJhcnkiOiAifjIwMTYwMTI1LjAuMCIsCi0g
ICAgImd1bHAiOiAifjMuOS4wIiwKLSAgICAiamFzbWluZSI6ICJ+Mi40LjEiCi0gIH0sCi0gICJk
ZXZEZXBlbmRlbmNpZXMiOiB7Ci0gICAgImdvb2dsZS1jbG9zdXJlLWNvbXBpbGVyIjogIn4yMDE1
MTIxNi4yLjAiLAotICAgICJnbG9iIjogIn42LjAuNCIKLSAgfSwKLSAgInNjcmlwdHMiOiB7Ci0g
ICAgInRlc3QiOiAibm9kZSAuL25vZGVfbW9kdWxlcy9ndWxwL2Jpbi9ndWxwLmpzIHRlc3QiCi0g
IH0sCi0gICJyZXBvc2l0b3J5IjogewotICAgICJ0eXBlIjogImdpdCIsCi0gICAgInVybCI6ICJo
dHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmL3RyZWUvbWFzdGVyL2pzIgotICB9LAot
ICAiYXV0aG9yIjogIiIsCi0gICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2pzL3Byb3RvM190ZXN0LmpzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy9wcm90bzNfdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNGRkNzc5MGYxNmI5NDI3MTI4ZjYyYmY1YzA0MzI1Y2UwZTUzNzhmNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL3Byb3RvM190ZXN0
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi1nb29nLnJlcXVpcmUoJ2dvb2cuY3J5cHQuYmFzZTY0Jyk7Ci1nb29n
LnJlcXVpcmUoJ2dvb2cudGVzdGluZy5hc3NlcnRzJyk7Ci0KLS8vIENvbW1vbkpTLUxvYWRGcm9t
RmlsZTogdGVzdGJpbmFyeV9wYiBwcm90by5qc3BiLnRlc3QKLWdvb2cucmVxdWlyZSgncHJvdG8u
anNwYi50ZXN0LkZvcmVpZ25NZXNzYWdlJyk7Ci0KLS8vIENvbW1vbkpTLUxvYWRGcm9tRmlsZTog
cHJvdG8zX3Rlc3RfcGIgcHJvdG8uanNwYi50ZXN0Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIu
dGVzdC5Qcm90bzNFbnVtJyk7Ci1nb29nLnJlcXVpcmUoJ3Byb3RvLmpzcGIudGVzdC5UZXN0UHJv
dG8zJyk7Ci0KLQotdmFyIEJZVEVTID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDIsIDgsIDldKTsKLXZh
ciBCWVRFU19CNjQgPSBnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoQllURVMpOwot
Ci0KLS8qKgotICogSGVscGVyOiBjb21wYXJlIGEgYnl0ZXMgZmllbGQgdG8gYW4gZXhwZWN0ZWQg
dmFsdWUKLSAqIEBwYXJhbSB7VWludDhBcnJheXxzdHJpbmd9IGFycgotICogQHBhcmFtIHtVaW50
OEFycmF5fSBleHBlY3RlZAotICogQHJldHVybiB7Ym9vbGVhbn0KLSAqLwotZnVuY3Rpb24gYnl0
ZXNDb21wYXJlKGFyciwgZXhwZWN0ZWQpIHsKLSAgaWYgKGdvb2cuaXNTdHJpbmcoYXJyKSkgewot
ICAgIGFyciA9IGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheShhcnIp
OwotICB9Ci0gIGlmIChhcnIubGVuZ3RoICE9IGV4cGVjdGVkLmxlbmd0aCkgewotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgewot
ICAgIGlmIChhcnJbaV0gIT0gZXhwZWN0ZWRbaV0pIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotZGVzY3JpYmUoJ3Byb3RvM1Rlc3QnLCBm
dW5jdGlvbigpIHsKLSAgLyoqCi0gICAqIFRlc3QgZGVmYXVsdHMgZm9yIHByb3RvMyBtZXNzYWdl
IGZpZWxkcy4KLSAgICovCi0gIGl0KCd0ZXN0UHJvdG8zRmllbGREZWZhdWx0cycsIGZ1bmN0aW9u
KCkgewotICAgIHZhciBtc2cgPSBuZXcgcHJvdG8uanNwYi50ZXN0LlRlc3RQcm90bzMoKTsKLQot
ICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T3B0aW9uYWxJbnQzMigpLCAwKTsKLSAgICBhc3NlcnRF
cXVhbHMobXNnLmdldE9wdGlvbmFsSW50NjQoKSwgMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5n
ZXRPcHRpb25hbFVpbnQzMigpLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9wdGlvbmFs
VWludDY0KCksIDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T3B0aW9uYWxTaW50MzIoKSwg
MCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRpb25hbFNpbnQ2NCgpLCAwKTsKLSAgICBh
c3NlcnRFcXVhbHMobXNnLmdldE9wdGlvbmFsRml4ZWQzMigpLCAwKTsKLSAgICBhc3NlcnRFcXVh
bHMobXNnLmdldE9wdGlvbmFsRml4ZWQ2NCgpLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdl
dE9wdGlvbmFsU2ZpeGVkMzIoKSwgMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRpb25h
bFNmaXhlZDY0KCksIDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T3B0aW9uYWxGbG9hdCgp
LCAwKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9wdGlvbmFsRG91YmxlKCksIDApOwotICAg
IGFzc2VydEVxdWFscyhtc2cuZ2V0T3B0aW9uYWxTdHJpbmcoKSwgJycpOwotCi0gICAgLy8gVE9E
TyhiLzI2MTczNzAxKTogd2hlbiB3ZSBjaGFuZ2UgYnl0ZXMgZmllbGRzIGRlZmF1bHQgZ2V0dGVy
IHRvIHJldHVybgotICAgIC8vIFVpbnQ4QXJyYXksIHdlJ2xsIHdhbnQgdG8gc3dpdGNoIHRoaXMg
YXNzZXJ0aW9uIHRvIG1hdGNoIHRoZSB1OCBjYXNlLgotICAgIGFzc2VydEVxdWFscyh0eXBlb2Yg
bXNnLmdldE9wdGlvbmFsQnl0ZXMoKSwgJ3N0cmluZycpOwotICAgIGFzc2VydEVxdWFscyhtc2cu
Z2V0T3B0aW9uYWxCeXRlc19hc1U4KCkgaW5zdGFuY2VvZiBVaW50OEFycmF5LCB0cnVlKTsKLSAg
ICBhc3NlcnRFcXVhbHModHlwZW9mIG1zZy5nZXRPcHRpb25hbEJ5dGVzX2FzQjY0KCksICdzdHJp
bmcnKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9wdGlvbmFsQnl0ZXMoKS5sZW5ndGgsIDAp
OwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T3B0aW9uYWxCeXRlc19hc1U4KCkubGVuZ3RoLCAw
KTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9wdGlvbmFsQnl0ZXNfYXNCNjQoKSwgJycpOwot
Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRpb25hbEZvcmVpZ25FbnVtKCksCi0gICAgICAg
ICAgICAgICAgIHByb3RvLmpzcGIudGVzdC5Qcm90bzNFbnVtLlBST1RPM19GT08pOwotICAgIGFz
c2VydEVxdWFscyhtc2cuZ2V0T3B0aW9uYWxGb3JlaWduTWVzc2FnZSgpLCB1bmRlZmluZWQpOwot
ICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T3B0aW9uYWxGb3JlaWduTWVzc2FnZSgpLCB1bmRlZmlu
ZWQpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXBlYXRlZEludDMyTGlzdCgpLmxlbmd0
aCwgMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXBlYXRlZEludDY0TGlzdCgpLmxlbmd0
aCwgMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXBlYXRlZFVpbnQzMkxpc3QoKS5sZW5n
dGgsIDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVwZWF0ZWRVaW50NjRMaXN0KCkubGVu
Z3RoLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcGVhdGVkU2ludDMyTGlzdCgpLmxl
bmd0aCwgMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXBlYXRlZFNpbnQ2NExpc3QoKS5s
ZW5ndGgsIDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVwZWF0ZWRGaXhlZDMyTGlzdCgp
Lmxlbmd0aCwgMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXBlYXRlZEZpeGVkNjRMaXN0
KCkubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcGVhdGVkU2ZpeGVkMzJM
aXN0KCkubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcGVhdGVkU2ZpeGVk
NjRMaXN0KCkubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcGVhdGVkRmxv
YXRMaXN0KCkubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcGVhdGVkRG91
YmxlTGlzdCgpLmxlbmd0aCwgMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXBlYXRlZFN0
cmluZ0xpc3QoKS5sZW5ndGgsIDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVwZWF0ZWRC
eXRlc0xpc3QoKS5sZW5ndGgsIDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVwZWF0ZWRG
b3JlaWduRW51bUxpc3QoKS5sZW5ndGgsIDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVw
ZWF0ZWRGb3JlaWduTWVzc2FnZUxpc3QoKS5sZW5ndGgsIDApOwotCi0gIH0pOwotCi0KLSAgLyoq
Ci0gICAqIFRlc3QgdGhhdCBhbGwgZmllbGRzIGNhbiBiZSBzZXQgYW5kIHJlYWQgdmlhIGEgc2Vy
aWFsaXphdGlvbiByb3VuZHRyaXAuCi0gICAqLwotICBpdCgndGVzdFByb3RvM0ZpZWxkU2V0R2V0
JywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1zZyA9IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdFBy
b3RvMygpOwotCi0gICAgbXNnLnNldE9wdGlvbmFsSW50MzIoLTQyKTsKLSAgICBtc2cuc2V0T3B0
aW9uYWxJbnQ2NCgtMHg3ZmZmZmZmZjAwMDAwMDAwKTsKLSAgICBtc2cuc2V0T3B0aW9uYWxVaW50
MzIoMHg4MDAwMDAwMCk7Ci0gICAgbXNnLnNldE9wdGlvbmFsVWludDY0KDB4ZjAwMDAwMDAwMDAw
MDAwMCk7Ci0gICAgbXNnLnNldE9wdGlvbmFsU2ludDMyKC0xMDApOwotICAgIG1zZy5zZXRPcHRp
b25hbFNpbnQ2NCgtMHg4MDAwMDAwMDAwMDAwMDAwKTsKLSAgICBtc2cuc2V0T3B0aW9uYWxGaXhl
ZDMyKDEyMzQpOwotICAgIG1zZy5zZXRPcHRpb25hbEZpeGVkNjQoMHgxMjM0NTY3ODAwMDAwMDAw
KTsKLSAgICBtc2cuc2V0T3B0aW9uYWxTZml4ZWQzMigtMTIzNCk7Ci0gICAgbXNnLnNldE9wdGlv
bmFsU2ZpeGVkNjQoLTB4MTIzNDU2NzgwMDAwMDAwMCk7Ci0gICAgbXNnLnNldE9wdGlvbmFsRmxv
YXQoMS41KTsKLSAgICBtc2cuc2V0T3B0aW9uYWxEb3VibGUoLTEuNSk7Ci0gICAgbXNnLnNldE9w
dGlvbmFsQm9vbCh0cnVlKTsKLSAgICBtc2cuc2V0T3B0aW9uYWxTdHJpbmcoJ2hlbGxvIHdvcmxk
Jyk7Ci0gICAgbXNnLnNldE9wdGlvbmFsQnl0ZXMoQllURVMpOwotICAgIHZhciBzdWJtc2cgPSBu
ZXcgcHJvdG8uanNwYi50ZXN0LkZvcmVpZ25NZXNzYWdlKCk7Ci0gICAgc3VibXNnLnNldEMoMTYp
OwotICAgIG1zZy5zZXRPcHRpb25hbEZvcmVpZ25NZXNzYWdlKHN1Ym1zZyk7Ci0gICAgbXNnLnNl
dE9wdGlvbmFsRm9yZWlnbkVudW0ocHJvdG8uanNwYi50ZXN0LlByb3RvM0VudW0uUFJPVE8zX0JB
Uik7Ci0KLSAgICBtc2cuc2V0UmVwZWF0ZWRJbnQzMkxpc3QoWy00Ml0pOwotICAgIG1zZy5zZXRS
ZXBlYXRlZEludDY0TGlzdChbLTB4N2ZmZmZmZmYwMDAwMDAwMF0pOwotICAgIG1zZy5zZXRSZXBl
YXRlZFVpbnQzMkxpc3QoWzB4ODAwMDAwMDBdKTsKLSAgICBtc2cuc2V0UmVwZWF0ZWRVaW50NjRM
aXN0KFsweGYwMDAwMDAwMDAwMDAwMDBdKTsKLSAgICBtc2cuc2V0UmVwZWF0ZWRTaW50MzJMaXN0
KFstMTAwXSk7Ci0gICAgbXNnLnNldFJlcGVhdGVkU2ludDY0TGlzdChbLTB4ODAwMDAwMDAwMDAw
MDAwMF0pOwotICAgIG1zZy5zZXRSZXBlYXRlZEZpeGVkMzJMaXN0KFsxMjM0XSk7Ci0gICAgbXNn
LnNldFJlcGVhdGVkRml4ZWQ2NExpc3QoWzB4MTIzNDU2NzgwMDAwMDAwMF0pOwotICAgIG1zZy5z
ZXRSZXBlYXRlZFNmaXhlZDMyTGlzdChbLTEyMzRdKTsKLSAgICBtc2cuc2V0UmVwZWF0ZWRTZml4
ZWQ2NExpc3QoWy0weDEyMzQ1Njc4MDAwMDAwMDBdKTsKLSAgICBtc2cuc2V0UmVwZWF0ZWRGbG9h
dExpc3QoWzEuNV0pOwotICAgIG1zZy5zZXRSZXBlYXRlZERvdWJsZUxpc3QoWy0xLjVdKTsKLSAg
ICBtc2cuc2V0UmVwZWF0ZWRCb29sTGlzdChbdHJ1ZV0pOwotICAgIG1zZy5zZXRSZXBlYXRlZFN0
cmluZ0xpc3QoWydoZWxsbyB3b3JsZCddKTsKLSAgICBtc2cuc2V0UmVwZWF0ZWRCeXRlc0xpc3Qo
W0JZVEVTXSk7Ci0gICAgc3VibXNnID0gbmV3IHByb3RvLmpzcGIudGVzdC5Gb3JlaWduTWVzc2Fn
ZSgpOwotICAgIHN1Ym1zZy5zZXRDKDEwMDApOwotICAgIG1zZy5zZXRSZXBlYXRlZEZvcmVpZ25N
ZXNzYWdlTGlzdChbc3VibXNnXSk7Ci0gICAgbXNnLnNldFJlcGVhdGVkRm9yZWlnbkVudW1MaXN0
KFtwcm90by5qc3BiLnRlc3QuUHJvdG8zRW51bS5QUk9UTzNfQkFSXSk7Ci0KLSAgICBtc2cuc2V0
T25lb2ZTdHJpbmcoJ2FzZGYnKTsKLQotICAgIHZhciBzZXJpYWxpemVkID0gbXNnLnNlcmlhbGl6
ZUJpbmFyeSgpOwotICAgIG1zZyA9IHByb3RvLmpzcGIudGVzdC5UZXN0UHJvdG8zLmRlc2VyaWFs
aXplQmluYXJ5KHNlcmlhbGl6ZWQpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRpb25h
bEludDMyKCksIC00Mik7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRpb25hbEludDY0KCks
IC0weDdmZmZmZmZmMDAwMDAwMDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T3B0aW9uYWxV
aW50MzIoKSwgMHg4MDAwMDAwMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRpb25hbFVp
bnQ2NCgpLCAweGYwMDAwMDAwMDAwMDAwMDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T3B0
aW9uYWxTaW50MzIoKSwgLTEwMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRpb25hbFNp
bnQ2NCgpLCAtMHg4MDAwMDAwMDAwMDAwMDAwKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9w
dGlvbmFsRml4ZWQzMigpLCAxMjM0KTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9wdGlvbmFs
Rml4ZWQ2NCgpLCAweDEyMzQ1Njc4MDAwMDAwMDApOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0
T3B0aW9uYWxTZml4ZWQzMigpLCAtMTIzNCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRp
b25hbFNmaXhlZDY0KCksIC0weDEyMzQ1Njc4MDAwMDAwMDApOwotICAgIGFzc2VydEVxdWFscyht
c2cuZ2V0T3B0aW9uYWxGbG9hdCgpLCAxLjUpOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T3B0
aW9uYWxEb3VibGUoKSwgLTEuNSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRpb25hbEJv
b2woKSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRpb25hbFN0cmluZygpLCAn
aGVsbG8gd29ybGQnKTsKLSAgICBhc3NlcnRFcXVhbHModHJ1ZSwgYnl0ZXNDb21wYXJlKG1zZy5n
ZXRPcHRpb25hbEJ5dGVzKCksIEJZVEVTKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPcHRp
b25hbEZvcmVpZ25NZXNzYWdlKCkuZ2V0QygpLCAxNik7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5n
ZXRPcHRpb25hbEZvcmVpZ25FbnVtKCksCi0gICAgICAgIHByb3RvLmpzcGIudGVzdC5Qcm90bzNF
bnVtLlBST1RPM19CQVIpOwotCi0gICAgYXNzZXJ0RWxlbWVudHNFcXVhbHMobXNnLmdldFJlcGVh
dGVkSW50MzJMaXN0KCksIFstNDJdKTsKLSAgICBhc3NlcnRFbGVtZW50c0VxdWFscyhtc2cuZ2V0
UmVwZWF0ZWRJbnQ2NExpc3QoKSwgWy0weDdmZmZmZmZmMDAwMDAwMDBdKTsKLSAgICBhc3NlcnRF
bGVtZW50c0VxdWFscyhtc2cuZ2V0UmVwZWF0ZWRVaW50MzJMaXN0KCksIFsweDgwMDAwMDAwXSk7
Ci0gICAgYXNzZXJ0RWxlbWVudHNFcXVhbHMobXNnLmdldFJlcGVhdGVkVWludDY0TGlzdCgpLCBb
MHhmMDAwMDAwMDAwMDAwMDAwXSk7Ci0gICAgYXNzZXJ0RWxlbWVudHNFcXVhbHMobXNnLmdldFJl
cGVhdGVkU2ludDMyTGlzdCgpLCBbLTEwMF0pOwotICAgIGFzc2VydEVsZW1lbnRzRXF1YWxzKG1z
Zy5nZXRSZXBlYXRlZFNpbnQ2NExpc3QoKSwgWy0weDgwMDAwMDAwMDAwMDAwMDBdKTsKLSAgICBh
c3NlcnRFbGVtZW50c0VxdWFscyhtc2cuZ2V0UmVwZWF0ZWRGaXhlZDMyTGlzdCgpLCBbMTIzNF0p
OwotICAgIGFzc2VydEVsZW1lbnRzRXF1YWxzKG1zZy5nZXRSZXBlYXRlZEZpeGVkNjRMaXN0KCks
IFsweDEyMzQ1Njc4MDAwMDAwMDBdKTsKLSAgICBhc3NlcnRFbGVtZW50c0VxdWFscyhtc2cuZ2V0
UmVwZWF0ZWRTZml4ZWQzMkxpc3QoKSwgWy0xMjM0XSk7Ci0gICAgYXNzZXJ0RWxlbWVudHNFcXVh
bHMobXNnLmdldFJlcGVhdGVkU2ZpeGVkNjRMaXN0KCksIFstMHgxMjM0NTY3ODAwMDAwMDAwXSk7
Ci0gICAgYXNzZXJ0RWxlbWVudHNFcXVhbHMobXNnLmdldFJlcGVhdGVkRmxvYXRMaXN0KCksIFsx
LjVdKTsKLSAgICBhc3NlcnRFbGVtZW50c0VxdWFscyhtc2cuZ2V0UmVwZWF0ZWREb3VibGVMaXN0
KCksIFstMS41XSk7Ci0gICAgYXNzZXJ0RWxlbWVudHNFcXVhbHMobXNnLmdldFJlcGVhdGVkQm9v
bExpc3QoKSwgW3RydWVdKTsKLSAgICBhc3NlcnRFbGVtZW50c0VxdWFscyhtc2cuZ2V0UmVwZWF0
ZWRTdHJpbmdMaXN0KCksIFsnaGVsbG8gd29ybGQnXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5n
ZXRSZXBlYXRlZEJ5dGVzTGlzdCgpLmxlbmd0aCwgMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHRydWUs
IGJ5dGVzQ29tcGFyZShtc2cuZ2V0UmVwZWF0ZWRCeXRlc0xpc3QoKVswXSwgQllURVMpKTsKLSAg
ICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VMaXN0KCkubGVuZ3Ro
LCAxKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcGVhdGVkRm9yZWlnbk1lc3NhZ2VMaXN0
KClbMF0uZ2V0QygpLCAxMDAwKTsKLSAgICBhc3NlcnRFbGVtZW50c0VxdWFscyhtc2cuZ2V0UmVw
ZWF0ZWRGb3JlaWduRW51bUxpc3QoKSwKLSAgICAgICAgW3Byb3RvLmpzcGIudGVzdC5Qcm90bzNF
bnVtLlBST1RPM19CQVJdKTsKLQotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T25lb2ZTdHJpbmco
KSwgJ2FzZGYnKTsKLSAgfSk7Ci0KLQotICAvKioKLSAgICogVGVzdCB0aGF0IG9uZW9mcyBjb250
aW51ZSB0byBoYXZlIGEgbm90aW9uIG9mIGZpZWxkIHByZXNlbmNlLgotICAgKi8KLSAgaXQoJ3Rl
c3RPbmVvZnMnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgbXNnID0gbmV3IHByb3RvLmpzcGIudGVz
dC5UZXN0UHJvdG8zKCk7Ci0KLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9uZW9mVWludDMyKCks
IHVuZGVmaW5lZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPbmVvZkZvcmVpZ25NZXNzYWdl
KCksIHVuZGVmaW5lZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPbmVvZlN0cmluZygpLCB1
bmRlZmluZWQpOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T25lb2ZCeXRlcygpLCB1bmRlZmlu
ZWQpOwotCi0gICAgbXNnLnNldE9uZW9mVWludDMyKDQyKTsKLSAgICBhc3NlcnRFcXVhbHMobXNn
LmdldE9uZW9mVWludDMyKCksIDQyKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9uZW9mRm9y
ZWlnbk1lc3NhZ2UoKSwgdW5kZWZpbmVkKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9uZW9m
U3RyaW5nKCksIHVuZGVmaW5lZCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPbmVvZkJ5dGVz
KCksIHVuZGVmaW5lZCk7Ci0KLQotICAgIHZhciBzdWJtc2cgPSBuZXcgcHJvdG8uanNwYi50ZXN0
LkZvcmVpZ25NZXNzYWdlKCk7Ci0gICAgbXNnLnNldE9uZW9mRm9yZWlnbk1lc3NhZ2Uoc3VibXNn
KTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9uZW9mVWludDMyKCksIHVuZGVmaW5lZCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPbmVvZkZvcmVpZ25NZXNzYWdlKCksIHN1Ym1zZyk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPbmVvZlN0cmluZygpLCB1bmRlZmluZWQpOwotICAgIGFz
c2VydEVxdWFscyhtc2cuZ2V0T25lb2ZCeXRlcygpLCB1bmRlZmluZWQpOwotCi0gICAgbXNnLnNl
dE9uZW9mU3RyaW5nKCdoZWxsbycpOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T25lb2ZVaW50
MzIoKSwgdW5kZWZpbmVkKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9uZW9mRm9yZWlnbk1l
c3NhZ2UoKSwgdW5kZWZpbmVkKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9uZW9mU3RyaW5n
KCksICdoZWxsbycpOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T25lb2ZCeXRlcygpLCB1bmRl
ZmluZWQpOwotCi0gICAgbXNnLnNldE9uZW9mQnl0ZXMoZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2Rl
U3RyaW5nKCdcdTAwRkZcdTAwRkYnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRPbmVvZlVp
bnQzMigpLCB1bmRlZmluZWQpOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T25lb2ZGb3JlaWdu
TWVzc2FnZSgpLCB1bmRlZmluZWQpOwotICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0T25lb2ZTdHJp
bmcoKSwgdW5kZWZpbmVkKTsKLSAgICBhc3NlcnRFcXVhbHMobXNnLmdldE9uZW9mQnl0ZXNfYXNC
NjQoKSwKLSAgICAgICAgZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlU3RyaW5nKCdcdTAwRkZcdTAw
RkYnKSk7Ci0gIH0pOwotCi0KLSAgLyoqCi0gICAqIFRlc3QgdGhhdCAiZGVmYXVsdCItdmFsdWVk
IHByaW1pdGl2ZSBmaWVsZHMgYXJlIG5vdCBlbWl0dGVkIG9uIHRoZSB3aXJlLgotICAgKi8KLSAg
aXQoJ3Rlc3ROb1NlcmlhbGl6ZURlZmF1bHRzJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1zZyA9
IG5ldyBwcm90by5qc3BiLnRlc3QuVGVzdFByb3RvMygpOwotCi0gICAgLy8gU2V0IGVhY2ggcHJp
bWl0aXZlIHRvIGEgbm9uLWRlZmF1bHQgdmFsdWUsIHRoZW4gYmFjayB0byBpdHMgZGVmYXVsdCwg
dG8KLSAgICAvLyBlbnN1cmUgdGhhdCB0aGUgc2VyaWFsaXphdGlvbiBpcyBhY3R1YWxseSBjaGVj
a2luZyB0aGUgdmFsdWUgYW5kIG5vdCBqdXN0Ci0gICAgLy8gd2hldGhlciBpdCBoYXMgZXZlciBi
ZWVuIHNldC4KLSAgICBtc2cuc2V0T3B0aW9uYWxJbnQzMig0Mik7Ci0gICAgbXNnLnNldE9wdGlv
bmFsSW50MzIoMCk7Ci0gICAgbXNnLnNldE9wdGlvbmFsRG91YmxlKDMuMTQpOwotICAgIG1zZy5z
ZXRPcHRpb25hbERvdWJsZSgwLjApOwotICAgIG1zZy5zZXRPcHRpb25hbEJvb2wodHJ1ZSk7Ci0g
ICAgbXNnLnNldE9wdGlvbmFsQm9vbChmYWxzZSk7Ci0gICAgbXNnLnNldE9wdGlvbmFsU3RyaW5n
KCdoZWxsbyB3b3JsZCcpOwotICAgIG1zZy5zZXRPcHRpb25hbFN0cmluZygnJyk7Ci0gICAgbXNn
LnNldE9wdGlvbmFsQnl0ZXMoZ29vZy5jcnlwdC5iYXNlNjQuZW5jb2RlU3RyaW5nKCdcdTAwRkZc
dTAwRkYnKSk7Ci0gICAgbXNnLnNldE9wdGlvbmFsQnl0ZXMoJycpOwotICAgIG1zZy5zZXRPcHRp
b25hbEZvcmVpZ25NZXNzYWdlKG5ldyBwcm90by5qc3BiLnRlc3QuRm9yZWlnbk1lc3NhZ2UoKSk7
Ci0gICAgbXNnLnNldE9wdGlvbmFsRm9yZWlnbk1lc3NhZ2UobnVsbCk7Ci0gICAgbXNnLnNldE9w
dGlvbmFsRm9yZWlnbkVudW0ocHJvdG8uanNwYi50ZXN0LlByb3RvM0VudW0uUFJPVE8zX0JBUik7
Ci0gICAgbXNnLnNldE9wdGlvbmFsRm9yZWlnbkVudW0ocHJvdG8uanNwYi50ZXN0LlByb3RvM0Vu
dW0uUFJPVE8zX0ZPTyk7Ci0gICAgbXNnLnNldE9uZW9mVWludDMyKDMyKTsKLSAgICBtc2cuc2V0
T25lb2ZVaW50MzIobnVsbCk7Ci0KLQotICAgIHZhciBzZXJpYWxpemVkID0gbXNnLnNlcmlhbGl6
ZUJpbmFyeSgpOwotICAgIGFzc2VydEVxdWFscygwLCBzZXJpYWxpemVkLmxlbmd0aCk7Ci0gIH0p
OwotCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYmFzZTY0IHN0cmluZyBhbmQgVWludDhBcnJheSBh
cmUgaW50ZXJjaGFuZ2VhYmxlIGluIGJ5dGVzIGZpZWxkcy4KLSAgICovCi0gIGl0KCd0ZXN0Qnl0
ZXNGaWVsZHNJbnRlcm9wJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG1zZyA9IG5ldyBwcm90by5q
c3BiLnRlc3QuVGVzdFByb3RvMygpOwotICAgIC8vIFNldCBhcyBhIGJhc2U2NCBzdHJpbmcgYW5k
IGNoZWNrIGFsbCB0aGUgZ2V0dGVycyB3b3JrLgotICAgIG1zZy5zZXRPcHRpb25hbEJ5dGVzKEJZ
VEVTX0I2NCk7Ci0gICAgYXNzZXJ0VHJ1ZShieXRlc0NvbXBhcmUobXNnLmdldE9wdGlvbmFsQnl0
ZXNfYXNVOCgpLCBCWVRFUykpOwotICAgIGFzc2VydFRydWUoYnl0ZXNDb21wYXJlKG1zZy5nZXRP
cHRpb25hbEJ5dGVzX2FzQjY0KCksIEJZVEVTKSk7Ci0gICAgYXNzZXJ0VHJ1ZShieXRlc0NvbXBh
cmUobXNnLmdldE9wdGlvbmFsQnl0ZXMoKSwgQllURVMpKTsKLQotICAgIC8vIFRlc3QgYmluYXJ5
IHNlcmlhbGl6ZSByb3VuZCB0cmlwIGRvZXNuJ3QgYnJlYWsgaXQuCi0gICAgbXNnID0gcHJvdG8u
anNwYi50ZXN0LlRlc3RQcm90bzMuZGVzZXJpYWxpemVCaW5hcnkobXNnLnNlcmlhbGl6ZUJpbmFy
eSgpKTsKLSAgICBhc3NlcnRUcnVlKGJ5dGVzQ29tcGFyZShtc2cuZ2V0T3B0aW9uYWxCeXRlc19h
c1U4KCksIEJZVEVTKSk7Ci0gICAgYXNzZXJ0VHJ1ZShieXRlc0NvbXBhcmUobXNnLmdldE9wdGlv
bmFsQnl0ZXNfYXNCNjQoKSwgQllURVMpKTsKLSAgICBhc3NlcnRUcnVlKGJ5dGVzQ29tcGFyZSht
c2cuZ2V0T3B0aW9uYWxCeXRlcygpLCBCWVRFUykpOwotCi0gICAgbXNnID0gbmV3IHByb3RvLmpz
cGIudGVzdC5UZXN0UHJvdG8zKCk7Ci0gICAgLy8gU2V0IGFzIGEgVWludDhBcnJheSBhbmQgY2hl
Y2sgYWxsIHRoZSBnZXR0ZXJzIHdvcmsuCi0gICAgbXNnLnNldE9wdGlvbmFsQnl0ZXMoQllURVMp
OwotICAgIGFzc2VydFRydWUoYnl0ZXNDb21wYXJlKG1zZy5nZXRPcHRpb25hbEJ5dGVzX2FzVTgo
KSwgQllURVMpKTsKLSAgICBhc3NlcnRUcnVlKGJ5dGVzQ29tcGFyZShtc2cuZ2V0T3B0aW9uYWxC
eXRlc19hc0I2NCgpLCBCWVRFUykpOwotICAgIGFzc2VydFRydWUoYnl0ZXNDb21wYXJlKG1zZy5n
ZXRPcHRpb25hbEJ5dGVzKCksIEJZVEVTKSk7Ci0KLSAgfSk7Ci19KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMv
cHJvdG8zX3Rlc3QucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL2pzL3Byb3RvM190ZXN0LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhY2I2NzE2NDkyNGRmOWQyZTFhYTQxZTZiNzQwNWRmNDc0NTY3ZDY3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvcHJvdG8zX3Rl
c3QucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMyI7Ci0KLWltcG9ydCAidGVzdGJp
bmFyeS5wcm90byI7Ci0KLXBhY2thZ2UganNwYi50ZXN0OwotCi1tZXNzYWdlIFRlc3RQcm90bzMg
ewotICAgICBpbnQzMiBvcHRpb25hbF9pbnQzMiAgICA9ICAxOwotICAgICBpbnQ2NCBvcHRpb25h
bF9pbnQ2NCAgICA9ICAyOwotICAgIHVpbnQzMiBvcHRpb25hbF91aW50MzIgICA9ICAzOwotICAg
IHVpbnQ2NCBvcHRpb25hbF91aW50NjQgICA9ICA0OwotICAgIHNpbnQzMiBvcHRpb25hbF9zaW50
MzIgICA9ICA1OwotICAgIHNpbnQ2NCBvcHRpb25hbF9zaW50NjQgICA9ICA2OwotICAgZml4ZWQz
MiBvcHRpb25hbF9maXhlZDMyICA9ICA3OwotICAgZml4ZWQ2NCBvcHRpb25hbF9maXhlZDY0ICA9
ICA4OwotICBzZml4ZWQzMiBvcHRpb25hbF9zZml4ZWQzMiA9ICA5OwotICBzZml4ZWQ2NCBvcHRp
b25hbF9zZml4ZWQ2NCA9IDEwOwotICAgICBmbG9hdCBvcHRpb25hbF9mbG9hdCAgICA9IDExOwot
ICAgIGRvdWJsZSBvcHRpb25hbF9kb3VibGUgICA9IDEyOwotICAgICAgYm9vbCBvcHRpb25hbF9i
b29sICAgICA9IDEzOwotICAgIHN0cmluZyBvcHRpb25hbF9zdHJpbmcgICA9IDE0OwotICAgICBi
eXRlcyBvcHRpb25hbF9ieXRlcyAgICA9IDE1OwotCi0gIEZvcmVpZ25NZXNzYWdlIG9wdGlvbmFs
X2ZvcmVpZ25fbWVzc2FnZSA9IDE5OwotICBQcm90bzNFbnVtICAgICBvcHRpb25hbF9mb3JlaWdu
X2VudW0gICAgPSAyMjsKLQotICByZXBlYXRlZCAgICBpbnQzMiByZXBlYXRlZF9pbnQzMiAgICA9
IDMxOwotICByZXBlYXRlZCAgICBpbnQ2NCByZXBlYXRlZF9pbnQ2NCAgICA9IDMyOwotICByZXBl
YXRlZCAgIHVpbnQzMiByZXBlYXRlZF91aW50MzIgICA9IDMzOwotICByZXBlYXRlZCAgIHVpbnQ2
NCByZXBlYXRlZF91aW50NjQgICA9IDM0OwotICByZXBlYXRlZCAgIHNpbnQzMiByZXBlYXRlZF9z
aW50MzIgICA9IDM1OwotICByZXBlYXRlZCAgIHNpbnQ2NCByZXBlYXRlZF9zaW50NjQgICA9IDM2
OwotICByZXBlYXRlZCAgZml4ZWQzMiByZXBlYXRlZF9maXhlZDMyICA9IDM3OwotICByZXBlYXRl
ZCAgZml4ZWQ2NCByZXBlYXRlZF9maXhlZDY0ICA9IDM4OwotICByZXBlYXRlZCBzZml4ZWQzMiBy
ZXBlYXRlZF9zZml4ZWQzMiA9IDM5OwotICByZXBlYXRlZCBzZml4ZWQ2NCByZXBlYXRlZF9zZml4
ZWQ2NCA9IDQwOwotICByZXBlYXRlZCAgICBmbG9hdCByZXBlYXRlZF9mbG9hdCAgICA9IDQxOwot
ICByZXBlYXRlZCAgIGRvdWJsZSByZXBlYXRlZF9kb3VibGUgICA9IDQyOwotICByZXBlYXRlZCAg
ICAgYm9vbCByZXBlYXRlZF9ib29sICAgICA9IDQzOwotICByZXBlYXRlZCAgIHN0cmluZyByZXBl
YXRlZF9zdHJpbmcgICA9IDQ0OwotICByZXBlYXRlZCAgICBieXRlcyByZXBlYXRlZF9ieXRlcyAg
ICA9IDQ1OwotCi0gIHJlcGVhdGVkIEZvcmVpZ25NZXNzYWdlIHJlcGVhdGVkX2ZvcmVpZ25fbWVz
c2FnZSA9IDQ5OwotICByZXBlYXRlZCBQcm90bzNFbnVtICAgICByZXBlYXRlZF9mb3JlaWduX2Vu
dW0gICAgPSA1MjsKLQotCi0gIG9uZW9mIG9uZW9mX2ZpZWxkIHsKLSAgICB1aW50MzIgb25lb2Zf
dWludDMyID0gMTExOwotICAgIEZvcmVpZ25NZXNzYWdlIG9uZW9mX2ZvcmVpZ25fbWVzc2FnZSA9
IDExMjsKLSAgICBzdHJpbmcgb25lb2Zfc3RyaW5nID0gMTEzOwotICAgIGJ5dGVzIG9uZW9mX2J5
dGVzID0gMTE0OwotICB9Ci19Ci0KLWVudW0gUHJvdG8zRW51bSB7Ci0gIFBST1RPM19GT08gPSAw
OwotICBQUk9UTzNfQkFSID0gMTsKLSAgUFJPVE8zX0JBWiA9IDI7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pz
L3Rlc3QucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL2pzL3Rlc3QucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDZiOWRjODkxMTNmZWVlMGE1OTUwYTg4ZGYxMTlhZjIyM2RmNzdmODcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy90ZXN0LnByb3RvCisrKyAvZGV2L251
bGwKQEAgLTEsMjMwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0vLyBBdXRob3I6IG13ckBnb29nbGUuY29tIChNYXJrIFJhd2xpbmcpCi0KLXN5bnRheCA9ICJw
cm90bzIiOwotCi1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUuYXBwcy5qc3BiLnBy
b3RvIjsKLW9wdGlvbiBqYXZhX211bHRpcGxlX2ZpbGVzID0gdHJ1ZTsKLQotaW1wb3J0ICJnb29n
bGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90byI7Ci0KLXBhY2thZ2UganNwYi50ZXN0OwotCi1t
ZXNzYWdlIEVtcHR5IHsKLX0KLQotZW51bSBPdXRlckVudW0gewotICBGT08gPSAxOwotICBCQVIg
PSAyOwotfQotCi1tZXNzYWdlIEVudW1Db250YWluZXIgewotICBvcHRpb25hbCBPdXRlckVudW0g
b3V0ZXJfZW51bSA9IDE7Ci19Ci0KLW1lc3NhZ2UgU2ltcGxlMSB7Ci0gIHJlcXVpcmVkIHN0cmlu
ZyBhX3N0cmluZyA9IDE7Ci0gIHJlcGVhdGVkIHN0cmluZyBhX3JlcGVhdGVkX3N0cmluZyA9IDI7
Ci0gIG9wdGlvbmFsIGJvb2wgYV9ib29sZWFuID0gMzsKLX0KLQotLy8gQSBtZXNzYWdlIHRoYXQg
ZGlmZmVycyBmcm9tIFNpbXBsZTEgb25seSBieSBuYW1lCi1tZXNzYWdlIFNpbXBsZTIgewotICBy
ZXF1aXJlZCBzdHJpbmcgYV9zdHJpbmcgPSAxOwotICByZXBlYXRlZCBzdHJpbmcgYV9yZXBlYXRl
ZF9zdHJpbmcgPSAyOwotfQotCi1tZXNzYWdlIFNwZWNpYWxDYXNlcyB7Ci0gIHJlcXVpcmVkIHN0
cmluZyBub3JtYWwgPSAxOwotICAvLyBFeGFtcGxlcyBvZiBKcyByZXNlcnZlZCBuYW1lcyB0aGF0
IGFyZSBjb252ZXJ0ZWQgdG8gcGJfPG5hbWU+LgotICByZXF1aXJlZCBzdHJpbmcgZGVmYXVsdCA9
IDI7Ci0gIHJlcXVpcmVkIHN0cmluZyBmdW5jdGlvbiA9IDM7Ci0gIHJlcXVpcmVkIHN0cmluZyB2
YXIgPSA0OwotfQotCi1tZXNzYWdlIE9wdGlvbmFsRmllbGRzIHsKLSAgbWVzc2FnZSBOZXN0ZWQg
ewotICAgIG9wdGlvbmFsIGludDMyIGFuX2ludCA9IDE7Ci0gIH0KLSAgb3B0aW9uYWwgc3RyaW5n
IGFfc3RyaW5nID0gMTsKLSAgcmVxdWlyZWQgYm9vbCBhX2Jvb2wgPSAyOwotICBvcHRpb25hbCBO
ZXN0ZWQgYV9uZXN0ZWRfbWVzc2FnZSA9IDM7Ci0gIHJlcGVhdGVkIE5lc3RlZCBhX3JlcGVhdGVk
X21lc3NhZ2UgPSA0OwotICByZXBlYXRlZCBzdHJpbmcgYV9yZXBlYXRlZF9zdHJpbmcgPSA1Owot
fQotCi1tZXNzYWdlIEhhc0V4dGVuc2lvbnMgewotICBvcHRpb25hbCBzdHJpbmcgc3RyMSA9IDE7
Ci0gIG9wdGlvbmFsIHN0cmluZyBzdHIyID0gMjsKLSAgb3B0aW9uYWwgc3RyaW5nIHN0cjMgPSAz
OwotICBleHRlbnNpb25zIDEwIHRvIG1heDsKLX0KLQotbWVzc2FnZSBDb21wbGV4IHsKLSAgbWVz
c2FnZSBOZXN0ZWQgewotICAgIHJlcXVpcmVkIGludDMyIGFuX2ludCA9IDI7Ci0gIH0KLSAgcmVx
dWlyZWQgc3RyaW5nIGFfc3RyaW5nID0gMTsKLSAgcmVxdWlyZWQgYm9vbCBhbl9vdXRfb2Zfb3Jk
ZXJfYm9vbCA9IDk7Ci0gIG9wdGlvbmFsIE5lc3RlZCBhX25lc3RlZF9tZXNzYWdlID0gNDsKLSAg
cmVwZWF0ZWQgTmVzdGVkIGFfcmVwZWF0ZWRfbWVzc2FnZSA9IDU7Ci0gIHJlcGVhdGVkIHN0cmlu
ZyBhX3JlcGVhdGVkX3N0cmluZyA9IDc7Ci19Ci0KLW1lc3NhZ2UgT3V0ZXJNZXNzYWdlIHsKLSAg
Ly8gTWFrZSBzdXJlIHRoaXMgZG9lc24ndCBjb25mbGljdCB3aXRoIHRoZSBvdGhlciBDb21wbGV4
IG1lc3NhZ2UuCi0gIG1lc3NhZ2UgQ29tcGxleCB7Ci0gICAgb3B0aW9uYWwgaW50MzIgaW5uZXJf
Y29tcGxleF9maWVsZCA9IDE7Ci0gIH0KLX0KLQotbWVzc2FnZSBJc0V4dGVuc2lvbiB7Ci0gIGV4
dGVuZCBIYXNFeHRlbnNpb25zIHsKLSAgICBvcHRpb25hbCBJc0V4dGVuc2lvbiBleHRfZmllbGQg
PSAxMDA7Ci0gIH0KLSAgb3B0aW9uYWwgc3RyaW5nIGV4dDEgPSAxOwotCi0gIC8vIEV4dGVuc2lv
bnMgb2YgcHJvdG8yIERlc2NyaXB0b3IgbWVzc2FnZXMgd2lsbCBiZSBpZ25vcmVkLgotICBleHRl
bmQgZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zIHsKLSAgICBvcHRpb25hbCBzdHJpbmcgc2lt
cGxlX29wdGlvbiA9IDQyMTEzMDM4OwotICB9Ci19Ci0KLW1lc3NhZ2UgSW5kaXJlY3RFeHRlbnNp
b24gewotICBleHRlbmQgSGFzRXh0ZW5zaW9ucyB7Ci0gICAgb3B0aW9uYWwgU2ltcGxlMSBzaW1w
bGUgPSAxMDE7Ci0gICAgb3B0aW9uYWwgc3RyaW5nIHN0ciA9IDEwMjsKLSAgICByZXBlYXRlZCBz
dHJpbmcgcmVwZWF0ZWRfc3RyID0gMTAzOwotICAgIHJlcGVhdGVkIFNpbXBsZTEgcmVwZWF0ZWRf
c2ltcGxlID0gMTA0OwotICB9Ci19Ci0KLWV4dGVuZCBIYXNFeHRlbnNpb25zIHsKLSAgb3B0aW9u
YWwgU2ltcGxlMSBzaW1wbGUxID0gMTA1OwotfQotCi1tZXNzYWdlIERlZmF1bHRWYWx1ZXMgewot
ICBlbnVtIEVudW0gewotICAgIEUxID0gMTM7Ci0gICAgRTIgPSA3NzsKLSAgfQotICBvcHRpb25h
bCBzdHJpbmcgc3RyaW5nX2ZpZWxkID0gMSBbZGVmYXVsdD0iZGVmYXVsdDw+XCdcImFiYyJdOwot
ICBvcHRpb25hbCBib29sIGJvb2xfZmllbGQgPSAyIFtkZWZhdWx0PXRydWVdOwotICBvcHRpb25h
bCBpbnQ2NCBpbnRfZmllbGQgPSAzIFtkZWZhdWx0PTExXTsKLSAgb3B0aW9uYWwgRW51bSBlbnVt
X2ZpZWxkID0gNCBbZGVmYXVsdD1FMV07Ci0gIG9wdGlvbmFsIHN0cmluZyBlbXB0eV9maWVsZCA9
IDYgW2RlZmF1bHQ9IiJdOwotICBvcHRpb25hbCBieXRlcyBieXRlc19maWVsZCA9IDggW2RlZmF1
bHQ9Im1vbyJdOyAvLyBCYXNlNjQgZW5jb2RpbmcgaXMgImJXOXYiCi19Ci0KLW1lc3NhZ2UgRmxv
YXRpbmdQb2ludEZpZWxkcyB7Ci0gIG9wdGlvbmFsIGZsb2F0IG9wdGlvbmFsX2Zsb2F0X2ZpZWxk
ID0gMTsKLSAgcmVxdWlyZWQgZmxvYXQgcmVxdWlyZWRfZmxvYXRfZmllbGQgPSAyOwotICByZXBl
YXRlZCBmbG9hdCByZXBlYXRlZF9mbG9hdF9maWVsZCA9IDM7Ci0gIG9wdGlvbmFsIGZsb2F0IGRl
ZmF1bHRfZmxvYXRfZmllbGQgPSA0IFtkZWZhdWx0ID0gMi4wXTsKLSAgb3B0aW9uYWwgZG91Ymxl
IG9wdGlvbmFsX2RvdWJsZV9maWVsZCA9IDU7Ci0gIHJlcXVpcmVkIGRvdWJsZSByZXF1aXJlZF9k
b3VibGVfZmllbGQgPSA2OwotICByZXBlYXRlZCBkb3VibGUgcmVwZWF0ZWRfZG91YmxlX2ZpZWxk
ID0gNzsKLSAgb3B0aW9uYWwgZG91YmxlIGRlZmF1bHRfZG91YmxlX2ZpZWxkID0gOCBbZGVmYXVs
dCA9IDIuMF07Ci19Ci0KLW1lc3NhZ2UgVGVzdENsb25lIHsKLSAgb3B0aW9uYWwgc3RyaW5nIHN0
ciA9IDE7Ci0gIG9wdGlvbmFsIFNpbXBsZTEgc2ltcGxlMSA9IDM7Ci0gIHJlcGVhdGVkIFNpbXBs
ZTEgc2ltcGxlMiA9IDU7Ci0gIG9wdGlvbmFsIHN0cmluZyB1bnVzZWQgPSA3OwotICBleHRlbnNp
b25zIDEwIHRvIG1heDsKLX0KLQotbWVzc2FnZSBDbG9uZUV4dGVuc2lvbiB7Ci0gIGV4dGVuZCBU
ZXN0Q2xvbmUgewotICAgIG9wdGlvbmFsIENsb25lRXh0ZW5zaW9uIGV4dF9maWVsZCA9IDEwMDsK
LSAgfQotICBvcHRpb25hbCBzdHJpbmcgZXh0ID0gMjsKLX0KLQotbWVzc2FnZSBUZXN0R3JvdXAg
ewotICByZXBlYXRlZCBncm91cCBSZXBlYXRlZEdyb3VwID0gMSB7Ci0gICAgcmVxdWlyZWQgc3Ry
aW5nIGlkID0gMTsKLSAgICByZXBlYXRlZCBib29sIHNvbWVfYm9vbCA9IDI7Ci0gIH0KLSAgcmVx
dWlyZWQgZ3JvdXAgUmVxdWlyZWRHcm91cCA9IDIgewotICAgIHJlcXVpcmVkIHN0cmluZyBpZCA9
IDE7Ci0gIH0KLSAgb3B0aW9uYWwgZ3JvdXAgT3B0aW9uYWxHcm91cCA9IDMgewotICAgIHJlcXVp
cmVkIHN0cmluZyBpZCA9IDE7Ci0gIH0KLSAgb3B0aW9uYWwgc3RyaW5nIGlkID0gNDsKLSAgcmVx
dWlyZWQgU2ltcGxlMiByZXF1aXJlZF9zaW1wbGUgPSA1OwotICBvcHRpb25hbCBTaW1wbGUyIG9w
dGlvbmFsX3NpbXBsZSA9IDY7Ci19Ci0KLW1lc3NhZ2UgVGVzdEdyb3VwMSB7Ci0gIG9wdGlvbmFs
IFRlc3RHcm91cC5SZXBlYXRlZEdyb3VwIGdyb3VwID0gMTsKLX0KLQotbWVzc2FnZSBUZXN0UmVz
ZXJ2ZWROYW1lcyB7Ci0gIG9wdGlvbmFsIGludDMyIGV4dGVuc2lvbiA9IDE7Ci0gIGV4dGVuc2lv
bnMgMTAgdG8gbWF4OwotfQotCi1tZXNzYWdlIFRlc3RSZXNlcnZlZE5hbWVzRXh0ZW5zaW9uIHsK
LSAgZXh0ZW5kIFRlc3RSZXNlcnZlZE5hbWVzIHsKLSAgICBvcHRpb25hbCBpbnQzMiBmb28gPSAx
MDsKLSAgfQotfQotCi1tZXNzYWdlIFRlc3RNZXNzYWdlV2l0aE9uZW9mIHsKLQotICBvbmVvZiBw
YXJ0aWFsX29uZW9mIHsKLSAgICBzdHJpbmcgcG9uZSA9IDM7Ci0gICAgc3RyaW5nIHB0aHJlZSA9
IDU7Ci0gIH0KLQotICBvbmVvZiByZWN1cnNpdmVfb25lb2YgewotICAgIFRlc3RNZXNzYWdlV2l0
aE9uZW9mIHJvbmUgPSA2OwotICAgIHN0cmluZyBydHdvID0gNzsKLSAgfQotCi0gIG9wdGlvbmFs
IGJvb2wgbm9ybWFsX2ZpZWxkID0gODsKLSAgcmVwZWF0ZWQgc3RyaW5nIHJlcGVhdGVkX2ZpZWxk
ID0gOTsKLQotICBvbmVvZiBkZWZhdWx0X29uZW9mX2EgewotICAgIGludDMyIGFvbmUgPSAxMCBb
ZGVmYXVsdCA9IDEyMzRdOwotICAgIGludDMyIGF0d28gPSAxMTsKLSAgfQotCi0gIG9uZW9mIGRl
ZmF1bHRfb25lb2ZfYiB7Ci0gICAgaW50MzIgYm9uZSA9IDEyOwotICAgIGludDMyIGJ0d28gPSAx
MyBbZGVmYXVsdCA9IDEyMzRdOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvdGVzdDIucHJvdG8g
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L2pzL3Rlc3QyLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGU1NWVmZmNi
NDdlOTgzNzI5ZjQxYTBiOTVmM2UwZjIwNDk3YzA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvanMvdGVzdDIucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw1
NCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0g
InByb3RvMiI7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5hcHBzLmpzcGIu
cHJvdG8iOwotb3B0aW9uIGphdmFfbXVsdGlwbGVfZmlsZXMgPSB0cnVlOwotCi1wYWNrYWdlIGpz
cGIudGVzdDsKLQotbWVzc2FnZSBUZXN0RXh0ZW5zaW9uc01lc3NhZ2UgewotICBvcHRpb25hbCBp
bnQzMiBpbnRmaWVsZCA9IDE7Ci0gIGV4dGVuc2lvbnMgMTAwIHRvIG1heDsKLX0KLQotbWVzc2Fn
ZSBFeHRlbnNpb25NZXNzYWdlIHsKLSAgZXh0ZW5kIFRlc3RFeHRlbnNpb25zTWVzc2FnZSB7Ci0g
ICAgb3B0aW9uYWwgRXh0ZW5zaW9uTWVzc2FnZSBleHRfZmllbGQgPSAxMDA7Ci0gIH0KLSAgb3B0
aW9uYWwgc3RyaW5nIGV4dDEgPSAxOwotfQotCi0vLyBGbG9hdGluZyBleHRlbnNpb25zIGFyZSBv
bmx5IHN1cHBvcnRlZCB3aGVuIGdlbmVyYXRpbmcgYSBfbGliLmpzIGxpYnJhcnkuCi1leHRlbmQg
VGVzdEV4dGVuc2lvbnNNZXNzYWdlIHsKLSAgb3B0aW9uYWwgRXh0ZW5zaW9uTWVzc2FnZSBmbG9h
dGluZ19tc2dfZmllbGQgPSAxMDE7Ci0gIG9wdGlvbmFsIHN0cmluZyBmbG9hdGluZ19zdHJfZmll
bGQgPSAxMDI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL3Rlc3QzLnByb3RvIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy90ZXN0My5wcm90bwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQwYTU1MmVkNTZmMDVhMWNkZmUyN2IwZTdk
NzRkNWM2YTk4YmRiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL2pzL3Rlc3QzLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi1vcHRp
b24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUuYXBwcy5qc3BiLnByb3RvIjsKLW9wdGlvbiBq
YXZhX211bHRpcGxlX2ZpbGVzID0gdHJ1ZTsKLQotcGFja2FnZSBqc3BiLmV4dHRlc3Q7Ci0KLW1l
c3NhZ2UgVGVzdEV4dGVuc2lvbnNNZXNzYWdlIHsKLSAgb3B0aW9uYWwgaW50MzIgaW50ZmllbGQg
PSAxOwotICBleHRlbnNpb25zIDEwMCB0byBtYXg7Ci19Ci0KLW1lc3NhZ2UgRXh0ZW5zaW9uTWVz
c2FnZSB7Ci0gIGV4dGVuZCBUZXN0RXh0ZW5zaW9uc01lc3NhZ2UgewotICAgIG9wdGlvbmFsIEV4
dGVuc2lvbk1lc3NhZ2UgZXh0X2ZpZWxkID0gMTAwOwotICB9Ci0gIG9wdGlvbmFsIHN0cmluZyBl
eHQxID0gMTsKLX0KLQotZXh0ZW5kIFRlc3RFeHRlbnNpb25zTWVzc2FnZSB7Ci0gIG9wdGlvbmFs
IEV4dGVuc2lvbk1lc3NhZ2UgZmxvYXRpbmdfbXNnX2ZpZWxkID0gMTAxOwotICBvcHRpb25hbCBz
dHJpbmcgZmxvYXRpbmdfc3RyX2ZpZWxkID0gMTAyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy90ZXN0NC5w
cm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvanMvdGVzdDQucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjQ1
MWU5Y2JlNDgzZTFiMDZlZmQyMjdmMjlmMTdlNjU1MDc3Y2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9qcy90ZXN0NC5wcm90bworKysgL2Rldi9udWxsCkBA
IC0xLDQyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50
YXggPSAicHJvdG8yIjsKLQotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLmFwcHMu
anNwYi5wcm90byI7Ci1vcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7Ci0KLXBhY2th
Z2UganNwYi5leHR0ZXN0OwotCi1pbXBvcnQgInRlc3QzLnByb3RvIjsKLQotZXh0ZW5kIFRlc3RF
eHRlbnNpb25zTWVzc2FnZSB7Ci0gIG9wdGlvbmFsIEV4dGVuc2lvbk1lc3NhZ2UgZmxvYXRpbmdf
bXNnX2ZpZWxkX3R3byA9IDEwMzsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvdGVzdDUucHJvdG8gYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL3Rl
c3Q1LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDk3OTUxN2U1NTFjZDdl
NDFkZjEyYTI1ZjFhNjUzN2RiMzJiMGQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvanMvdGVzdDUucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3Rv
MiI7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5hcHBzLmpzcGIucHJvdG8i
Owotb3B0aW9uIGphdmFfbXVsdGlwbGVfZmlsZXMgPSB0cnVlOwotCi1wYWNrYWdlIGpzcGIuZXh0
dGVzdC5iZXRhOwotCi1tZXNzYWdlIFRlc3RCZXRhRXh0ZW5zaW9uc01lc3NhZ2UgewotICBleHRl
bnNpb25zIDEwMCB0byBtYXg7Ci19Ci0KLWV4dGVuZCBUZXN0QmV0YUV4dGVuc2lvbnNNZXNzYWdl
IHsKLSAgb3B0aW9uYWwgc3RyaW5nIGZsb2F0aW5nX3N0cl9maWVsZCA9IDEwMTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvanMvdGVzdF9ib290c3RyYXAuanMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL3Rlc3RfYm9vdHN0cmFwLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDAwYTFjNDMwYjllMDdiMzcyY2FhNzgzYmE4ZTQ4OTli
NzJiNjNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMv
dGVzdF9ib290c3RyYXAuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFNldHMg
ZmxhZ3MgZm9yIHVuY29tcGlsZWQgSlNVbml0IHRlc3RzLgotICovCi0KLS8qKgotICogU2V0IHVu
Y29tcGlsZWQgZmxhZ3MuCi0gKi8KLXZhciBDTE9TVVJFX0RFRklORVMgPSB7Ci0gICAgLy8gRW5h
YmxlIHRoZSBmcm9tT2JqZWN0IG1ldGhvZCBvbiB0aGUgbWVzc2FnZSBjbGFzcy4KLSAgICAnanNw
Yi5NZXNzYWdlLkdFTkVSQVRFX0ZST01fT0JKRUNUJzogdHJ1ZQotfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMv
dGVzdGJpbmFyeS5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvanMvdGVzdGJpbmFyeS5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjBjNzAxOTBmNjNlMzAxMDcwMTliMzI2N2I1N2RhMzJjYzEwMDQ4Zi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL3Rlc3RiaW5hcnku
cHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLS8vIExJTlQ6IEFMTE9XX0dST1VQUwotCi1zeW50YXggPSAicHJv
dG8yIjsKLQotCi1wYWNrYWdlIGpzcGIudGVzdDsKLQotLy8gVGhlc2UgdHlwZXMgYXJlIGJvcnJv
d2VkIGZyb20gYHVuaXR0ZXN0LnByb3RvYCBpbiB0aGUgcHJvdG9idWYgdHJlZS4gV2Ugd2FudAot
Ly8gdG8gZW5zdXJlIHRoYXQgdGhlIGJpbmFyeS1mb3JtYXQgc3VwcG9ydCB3aWxsIGhhbmRsZSBh
bGwgZmllbGQgdHlwZXMKLS8vIHByb3Blcmx5LgotbWVzc2FnZSBUZXN0QWxsVHlwZXMgewotICBv
cHRpb25hbCAgICBpbnQzMiBvcHRpb25hbF9pbnQzMiAgICA9ICAxOwotICBvcHRpb25hbCAgICBp
bnQ2NCBvcHRpb25hbF9pbnQ2NCAgICA9ICAyOwotICBvcHRpb25hbCAgIHVpbnQzMiBvcHRpb25h
bF91aW50MzIgICA9ICAzOwotICBvcHRpb25hbCAgIHVpbnQ2NCBvcHRpb25hbF91aW50NjQgICA9
ICA0OwotICBvcHRpb25hbCAgIHNpbnQzMiBvcHRpb25hbF9zaW50MzIgICA9ICA1OwotICBvcHRp
b25hbCAgIHNpbnQ2NCBvcHRpb25hbF9zaW50NjQgICA9ICA2OwotICBvcHRpb25hbCAgZml4ZWQz
MiBvcHRpb25hbF9maXhlZDMyICA9ICA3OwotICBvcHRpb25hbCAgZml4ZWQ2NCBvcHRpb25hbF9m
aXhlZDY0ICA9ICA4OwotICBvcHRpb25hbCBzZml4ZWQzMiBvcHRpb25hbF9zZml4ZWQzMiA9ICA5
OwotICBvcHRpb25hbCBzZml4ZWQ2NCBvcHRpb25hbF9zZml4ZWQ2NCA9IDEwOwotICBvcHRpb25h
bCAgICBmbG9hdCBvcHRpb25hbF9mbG9hdCAgICA9IDExOwotICBvcHRpb25hbCAgIGRvdWJsZSBv
cHRpb25hbF9kb3VibGUgICA9IDEyOwotICBvcHRpb25hbCAgICAgYm9vbCBvcHRpb25hbF9ib29s
ICAgICA9IDEzOwotICBvcHRpb25hbCAgIHN0cmluZyBvcHRpb25hbF9zdHJpbmcgICA9IDE0Owot
ICBvcHRpb25hbCAgICBieXRlcyBvcHRpb25hbF9ieXRlcyAgICA9IDE1OwotICBvcHRpb25hbCBn
cm91cCBPcHRpb25hbEdyb3VwID0gMTYgewotICAgIG9wdGlvbmFsIGludDMyIGEgPSAxNzsKLSAg
fQotCi0gIG9wdGlvbmFsIEZvcmVpZ25NZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25hbF9mb3JlaWduX21lc3NhZ2UgPSAxOTsKLSAgb3B0aW9uYWwgRm9yZWlnbkVudW0gICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX2ZvcmVpZ25fZW51bSAgICA9IDIyOwotCi0gIC8v
IFJlcGVhdGVkCi0gIHJlcGVhdGVkICAgIGludDMyIHJlcGVhdGVkX2ludDMyICAgID0gMzE7Ci0g
IHJlcGVhdGVkICAgIGludDY0IHJlcGVhdGVkX2ludDY0ICAgID0gMzI7Ci0gIHJlcGVhdGVkICAg
dWludDMyIHJlcGVhdGVkX3VpbnQzMiAgID0gMzM7Ci0gIHJlcGVhdGVkICAgdWludDY0IHJlcGVh
dGVkX3VpbnQ2NCAgID0gMzQ7Ci0gIHJlcGVhdGVkICAgc2ludDMyIHJlcGVhdGVkX3NpbnQzMiAg
ID0gMzU7Ci0gIHJlcGVhdGVkICAgc2ludDY0IHJlcGVhdGVkX3NpbnQ2NCAgID0gMzY7Ci0gIHJl
cGVhdGVkICBmaXhlZDMyIHJlcGVhdGVkX2ZpeGVkMzIgID0gMzc7Ci0gIHJlcGVhdGVkICBmaXhl
ZDY0IHJlcGVhdGVkX2ZpeGVkNjQgID0gMzg7Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHJlcGVhdGVk
X3NmaXhlZDMyID0gMzk7Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IHJlcGVhdGVkX3NmaXhlZDY0ID0g
NDA7Ci0gIHJlcGVhdGVkICAgIGZsb2F0IHJlcGVhdGVkX2Zsb2F0ICAgID0gNDE7Ci0gIHJlcGVh
dGVkICAgZG91YmxlIHJlcGVhdGVkX2RvdWJsZSAgID0gNDI7Ci0gIHJlcGVhdGVkICAgICBib29s
IHJlcGVhdGVkX2Jvb2wgICAgID0gNDM7Ci0gIHJlcGVhdGVkICAgc3RyaW5nIHJlcGVhdGVkX3N0
cmluZyAgID0gNDQ7Ci0gIHJlcGVhdGVkICAgIGJ5dGVzIHJlcGVhdGVkX2J5dGVzICAgID0gNDU7
Ci0KLSAgcmVwZWF0ZWQgZ3JvdXAgUmVwZWF0ZWRHcm91cCA9IDQ2IHsKLSAgICBvcHRpb25hbCBp
bnQzMiBhID0gNDc7Ci0gIH0KLQotICByZXBlYXRlZCBGb3JlaWduTWVzc2FnZSAgICAgICAgICAg
ICAgICAgICAgICAgcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlID0gNDk7Ci0gIHJlcGVhdGVkIEZv
cmVpZ25FbnVtICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRlZF9mb3JlaWduX2VudW0g
ICAgPSA1MjsKLQotICAvLyBQYWNrZWQgcmVwZWF0ZWQKLSAgcmVwZWF0ZWQgICAgaW50MzIgcGFj
a2VkX3JlcGVhdGVkX2ludDMyICAgID0gNjEgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgICAg
aW50NjQgcGFja2VkX3JlcGVhdGVkX2ludDY0ICAgID0gNjIgW3BhY2tlZD10cnVlXTsKLSAgcmVw
ZWF0ZWQgICB1aW50MzIgcGFja2VkX3JlcGVhdGVkX3VpbnQzMiAgID0gNjMgW3BhY2tlZD10cnVl
XTsKLSAgcmVwZWF0ZWQgICB1aW50NjQgcGFja2VkX3JlcGVhdGVkX3VpbnQ2NCAgID0gNjQgW3Bh
Y2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgICBzaW50MzIgcGFja2VkX3JlcGVhdGVkX3NpbnQzMiAg
ID0gNjUgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgICBzaW50NjQgcGFja2VkX3JlcGVhdGVk
X3NpbnQ2NCAgID0gNjYgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIgcGFja2Vk
X3JlcGVhdGVkX2ZpeGVkMzIgID0gNjcgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgIGZpeGVk
NjQgcGFja2VkX3JlcGVhdGVkX2ZpeGVkNjQgID0gNjggW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0
ZWQgc2ZpeGVkMzIgcGFja2VkX3JlcGVhdGVkX3NmaXhlZDMyID0gNjkgW3BhY2tlZD10cnVlXTsK
LSAgcmVwZWF0ZWQgc2ZpeGVkNjQgcGFja2VkX3JlcGVhdGVkX3NmaXhlZDY0ID0gNzAgW3BhY2tl
ZD10cnVlXTsKLSAgcmVwZWF0ZWQgICAgZmxvYXQgcGFja2VkX3JlcGVhdGVkX2Zsb2F0ICAgID0g
NzEgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgICBkb3VibGUgcGFja2VkX3JlcGVhdGVkX2Rv
dWJsZSAgID0gNzIgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgcGFja2VkX3Jl
cGVhdGVkX2Jvb2wgICAgID0gNzMgW3BhY2tlZD10cnVlXTsKLQotICBvbmVvZiBvbmVvZl9maWVs
ZCB7Ci0gICAgdWludDMyIG9uZW9mX3VpbnQzMiA9IDExMTsKLSAgICBGb3JlaWduTWVzc2FnZSBv
bmVvZl9mb3JlaWduX21lc3NhZ2UgPSAxMTI7Ci0gICAgc3RyaW5nIG9uZW9mX3N0cmluZyA9IDEx
MzsKLSAgICBieXRlcyBvbmVvZl9ieXRlcyA9IDExNDsKLSAgfQotCi19Ci0KLW1lc3NhZ2UgRm9y
ZWlnbk1lc3NhZ2UgewotICBvcHRpb25hbCBpbnQzMiBjID0gMTsKLX0KLQotZW51bSBGb3JlaWdu
RW51bSB7Ci0gIEZPUkVJR05fRk9PID0gNDsKLSAgRk9SRUlHTl9CQVIgPSA1OwotICBGT1JFSUdO
X0JBWiA9IDY7Ci19Ci0KLW1lc3NhZ2UgVGVzdEV4dGVuZGFibGUgewotICBleHRlbnNpb25zIDEg
dG8gbWF4OwotfQotCi1tZXNzYWdlIEV4dGVuZHNXaXRoTWVzc2FnZSB7Ci0gIGV4dGVuZCBUZXN0
RXh0ZW5kYWJsZSB7Ci0gICAgb3B0aW9uYWwgRXh0ZW5kc1dpdGhNZXNzYWdlIG9wdGlvbmFsX2V4
dGVuc2lvbiA9IDE5OwotICAgIHJlcGVhdGVkIEV4dGVuZHNXaXRoTWVzc2FnZSByZXBlYXRlZF9l
eHRlbnNpb24gPSA0OTsKLSAgfQotICBvcHRpb25hbCBpbnQzMiBmb28gPSAxOwotfQotCi1leHRl
bmQgVGVzdEV4dGVuZGFibGUgewotICBvcHRpb25hbCAgICBpbnQzMiBleHRlbmRfb3B0aW9uYWxf
aW50MzIgICAgPSAgMTsKLSAgb3B0aW9uYWwgICAgaW50NjQgZXh0ZW5kX29wdGlvbmFsX2ludDY0
ICAgID0gIDI7Ci0gIG9wdGlvbmFsICAgdWludDMyIGV4dGVuZF9vcHRpb25hbF91aW50MzIgICA9
ICAzOwotICBvcHRpb25hbCAgIHVpbnQ2NCBleHRlbmRfb3B0aW9uYWxfdWludDY0ICAgPSAgNDsK
LSAgb3B0aW9uYWwgICBzaW50MzIgZXh0ZW5kX29wdGlvbmFsX3NpbnQzMiAgID0gIDU7Ci0gIG9w
dGlvbmFsICAgc2ludDY0IGV4dGVuZF9vcHRpb25hbF9zaW50NjQgICA9ICA2OwotICBvcHRpb25h
bCAgZml4ZWQzMiBleHRlbmRfb3B0aW9uYWxfZml4ZWQzMiAgPSAgNzsKLSAgb3B0aW9uYWwgIGZp
eGVkNjQgZXh0ZW5kX29wdGlvbmFsX2ZpeGVkNjQgID0gIDg7Ci0gIG9wdGlvbmFsIHNmaXhlZDMy
IGV4dGVuZF9vcHRpb25hbF9zZml4ZWQzMiA9ICA5OwotICBvcHRpb25hbCBzZml4ZWQ2NCBleHRl
bmRfb3B0aW9uYWxfc2ZpeGVkNjQgPSAxMDsKLSAgb3B0aW9uYWwgICAgZmxvYXQgZXh0ZW5kX29w
dGlvbmFsX2Zsb2F0ICAgID0gMTE7Ci0gIG9wdGlvbmFsICAgZG91YmxlIGV4dGVuZF9vcHRpb25h
bF9kb3VibGUgICA9IDEyOwotICBvcHRpb25hbCAgICAgYm9vbCBleHRlbmRfb3B0aW9uYWxfYm9v
bCAgICAgPSAxMzsKLSAgb3B0aW9uYWwgICBzdHJpbmcgZXh0ZW5kX29wdGlvbmFsX3N0cmluZyAg
ID0gMTQ7Ci0gIG9wdGlvbmFsICAgIGJ5dGVzIGV4dGVuZF9vcHRpb25hbF9ieXRlcyAgICA9IDE1
OwotICBvcHRpb25hbCBGb3JlaWduRW51bSBleHRlbmRfb3B0aW9uYWxfZm9yZWlnbl9lbnVtICAg
ID0gMjI7Ci0KLSAgcmVwZWF0ZWQgICAgaW50MzIgZXh0ZW5kX3JlcGVhdGVkX2ludDMyICAgID0g
MzE7Ci0gIHJlcGVhdGVkICAgIGludDY0IGV4dGVuZF9yZXBlYXRlZF9pbnQ2NCAgICA9IDMyOwot
ICByZXBlYXRlZCAgIHVpbnQzMiBleHRlbmRfcmVwZWF0ZWRfdWludDMyICAgPSAzMzsKLSAgcmVw
ZWF0ZWQgICB1aW50NjQgZXh0ZW5kX3JlcGVhdGVkX3VpbnQ2NCAgID0gMzQ7Ci0gIHJlcGVhdGVk
ICAgc2ludDMyIGV4dGVuZF9yZXBlYXRlZF9zaW50MzIgICA9IDM1OwotICByZXBlYXRlZCAgIHNp
bnQ2NCBleHRlbmRfcmVwZWF0ZWRfc2ludDY0ICAgPSAzNjsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIg
ZXh0ZW5kX3JlcGVhdGVkX2ZpeGVkMzIgID0gMzc7Ci0gIHJlcGVhdGVkICBmaXhlZDY0IGV4dGVu
ZF9yZXBlYXRlZF9maXhlZDY0ICA9IDM4OwotICByZXBlYXRlZCBzZml4ZWQzMiBleHRlbmRfcmVw
ZWF0ZWRfc2ZpeGVkMzIgPSAzOTsKLSAgcmVwZWF0ZWQgc2ZpeGVkNjQgZXh0ZW5kX3JlcGVhdGVk
X3NmaXhlZDY0ID0gNDA7Ci0gIHJlcGVhdGVkICAgIGZsb2F0IGV4dGVuZF9yZXBlYXRlZF9mbG9h
dCAgICA9IDQxOwotICByZXBlYXRlZCAgIGRvdWJsZSBleHRlbmRfcmVwZWF0ZWRfZG91YmxlICAg
PSA0MjsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgZXh0ZW5kX3JlcGVhdGVkX2Jvb2wgICAgID0gNDM7
Ci0gIHJlcGVhdGVkICAgc3RyaW5nIGV4dGVuZF9yZXBlYXRlZF9zdHJpbmcgICA9IDQ0OwotICBy
ZXBlYXRlZCAgICBieXRlcyBleHRlbmRfcmVwZWF0ZWRfYnl0ZXMgICAgPSA0NTsKLSAgcmVwZWF0
ZWQgRm9yZWlnbkVudW0gZXh0ZW5kX3JlcGVhdGVkX2ZvcmVpZ25fZW51bSAgICA9IDUyOwotCi0g
IHJlcGVhdGVkICAgIGludDMyIGV4dGVuZF9wYWNrZWRfcmVwZWF0ZWRfaW50MzIgICAgPSA2MSBb
cGFja2VkPXRydWVdOwotICByZXBlYXRlZCAgICBpbnQ2NCBleHRlbmRfcGFja2VkX3JlcGVhdGVk
X2ludDY0ICAgID0gNjIgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgICB1aW50MzIgZXh0ZW5k
X3BhY2tlZF9yZXBlYXRlZF91aW50MzIgICA9IDYzIFtwYWNrZWQ9dHJ1ZV07Ci0gIHJlcGVhdGVk
ICAgdWludDY0IGV4dGVuZF9wYWNrZWRfcmVwZWF0ZWRfdWludDY0ICAgPSA2NCBbcGFja2VkPXRy
dWVdOwotICByZXBlYXRlZCAgIHNpbnQzMiBleHRlbmRfcGFja2VkX3JlcGVhdGVkX3NpbnQzMiAg
ID0gNjUgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgICBzaW50NjQgZXh0ZW5kX3BhY2tlZF9y
ZXBlYXRlZF9zaW50NjQgICA9IDY2IFtwYWNrZWQ9dHJ1ZV07Ci0gIHJlcGVhdGVkICBmaXhlZDMy
IGV4dGVuZF9wYWNrZWRfcmVwZWF0ZWRfZml4ZWQzMiAgPSA2NyBbcGFja2VkPXRydWVdOwotICBy
ZXBlYXRlZCAgZml4ZWQ2NCBleHRlbmRfcGFja2VkX3JlcGVhdGVkX2ZpeGVkNjQgID0gNjggW3Bh
Y2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkMzIgZXh0ZW5kX3BhY2tlZF9yZXBlYXRlZF9z
Zml4ZWQzMiA9IDY5IFtwYWNrZWQ9dHJ1ZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IGV4dGVuZF9w
YWNrZWRfcmVwZWF0ZWRfc2ZpeGVkNjQgPSA3MCBbcGFja2VkPXRydWVdOwotICByZXBlYXRlZCAg
ICBmbG9hdCBleHRlbmRfcGFja2VkX3JlcGVhdGVkX2Zsb2F0ICAgID0gNzEgW3BhY2tlZD10cnVl
XTsKLSAgcmVwZWF0ZWQgICBkb3VibGUgZXh0ZW5kX3BhY2tlZF9yZXBlYXRlZF9kb3VibGUgICA9
IDcyIFtwYWNrZWQ9dHJ1ZV07Ci0gIHJlcGVhdGVkICAgICBib29sIGV4dGVuZF9wYWNrZWRfcmVw
ZWF0ZWRfYm9vbCAgICAgPSA3MyBbcGFja2VkPXRydWVdOwotICByZXBlYXRlZCBGb3JlaWduRW51
bSBleHRlbmRfcGFja2VkX3JlcGVhdGVkX2ZvcmVpZ25fZW51bSAgICA9IDgyCi0gICAgICBbcGFj
a2VkPXRydWVdOwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL2pzL3Rlc3RlbXB0eS5wcm90byBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvanMvdGVzdGVt
cHR5LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjBiY2U0ZTVjNjljODlh
ODYzZDE1ZjI0OTBhYTg5MGJmYTk3NzY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvanMvdGVzdGVtcHR5LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsMzQg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9ICJw
cm90bzIiOwotCi1wYWNrYWdlIGphdmF0ZXN0cy5jb20uZ29vZ2xlLmFwcHMuanNwYjsKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9tNC9hY19zeXN0ZW1fZXh0ZW5zaW9ucy5tNCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvbTQvYWNfc3lzdGVtX2V4dGVuc2lv
bnMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYTJlZWIxZDhhY2VmZmIxYThm
OGJhMzIzNmRjYjRjNDY1NWY5ODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9tNC9hY19zeXN0ZW1fZXh0ZW5zaW9ucy5tNAorKysgL2Rldi9udWxsCkBAIC0x
LDM3ICswLDAgQEAKLWRubCBQcm92aWRlIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3Igb2xk
IGF1dG9jb25mIG1hY2hpbmVzLgotQUNfREVGVU4oW0FDWF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNd
LFsKLSAgaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sWwotICAgIEFDX1VTRV9TWVNU
RU1fRVhURU5TSU9OUwotICBdLFsKLSAgICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZF
TFNFXSkKLSAgICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQotCi0gICAgQUNfUkVR
VUlSRShbQUNfR05VX1NPVVJDRV0pCi0gICAgQUNfUkVRVUlSRShbQUNfQUlYXSkKLSAgICBBQ19S
RVFVSVJFKFtBQ19NSU5JWF0pCi0KLSAgICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAot
Wy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLwotI2lmbmRlZiBfX0VYVEVOU0lP
TlNfXwotIyB1bmRlZiBfX0VYVEVOU0lPTlNfXwotI2VuZGlmCi0jaWZuZGVmIF9QT1NJWF9QVEhS
RUFEX1NFTUFOVElDUwotIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKLSNlbmRpZgot
I2lmbmRlZiBfVEFOREVNX1NPVVJDRQotIyB1bmRlZiBfVEFOREVNX1NPVVJDRQotI2VuZGlmXSkK
LSAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVO
U0lPTlNfX10sCi0gICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAot
ICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAotICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCi0j
ICAgICAgICAgICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQotICAgICAgICAgICAgQUNfSU5DTFVE
RVNfREVGQVVMVF0pXSwKLSAgICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lv
bnNfXz15ZXNdLAotICAgICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19f
PW5vXSldKQotICAgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0g
eWVzICYmCi0gICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKLSAgICBBQ19ERUZJTkUo
W19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCi0gICAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJD
RV0pCi0gIF0pCi1dKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9tNC9hY3hfY2hlY2tfc3VuY2MubTQgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL200L2FjeF9j
aGVja19zdW5jYy5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJjMGE4OTBkYzI1
NzY0NTBiNDgyMGUzMDI4Zjg5MjExNGI2N2E5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL200L2FjeF9jaGVja19zdW5jYy5tNAorKysgL2Rldi9udWxsCkBA
IC0xLDcwICswLDAgQEAKLWRubCBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBTdW4gU3R1
ZGlvIGNvbXBpbGVyLgotZG5sIElmIFN1biBTdHVkaW8gY29tcGlsZXIgaXMgZm91bmQsIHNldCBh
cHByb3ByaWF0ZSBmbGFncy4KLWRubCBBZGRpdGlvbmFsbHksIFN1biBTdHVkaW8gZG9lc24ndCBk
ZWZhdWx0IHRvIDY0LWJpdCBieSBpdHNlbGYsCi1kbmwgbm9yIGRvZXMgaXQgYXV0b21hdGljYWxs
eSBsb29rIGluIHN0YW5kYXJkIFNvbGFyaXMgcGxhY2VzIGZvcgotZG5sIDY0LWJpdCBsaWJzLCBz
byB3ZSBtdXN0IGFkZCB0aG9zZSBvcHRpb25zIGFuZCBwYXRocyB0byB0aGUgc2VhcmNoCi1kbmwg
cGF0aHMuCi0KLWRubCBUT0RPKGtlbnRvbik6ICBUaGlzIGlzIHByZXR0eSBoYWNreS4gIEl0IHNl
dHMgQ1hYRkxBR1MsIHdoaWNoIHRoZSBhdXRvY29uZgotZG5sIGRvY3Mgc2F5IHNob3VsZCBuZXZl
ciBiZSBvdmVycmlkZGVuIGV4Y2VwdCBieSB0aGUgdXNlci4gIEl0IGFsc28gaXNuJ3QKLWRubCBj
cm9zcy1jb21waWxlIHNhZmUuICBXZSBzaG91bGQgZml4IHRoZXNlIHByb2JsZW1zLCBidXQgc2lu
Y2UgSSBkb24ndCBoYXZlCi1kbmwgU3VuIENDIGF0IG15IGRpc3Bvc2FsIGZvciB0ZXN0aW5nLCBz
b21lb25lIGVsc2Ugd2lsbCBoYXZlIHRvIGRvIGl0LgotCi1BQ19ERUZVTihbQUNYX0NIRUNLX1NV
TkNDXSxbCi0KLSAgQUNfTEFOR19QVVNIKFtDKytdKQotICBBQ19DSEVDS19ERUNMKFtfX1NVTlBS
T19DQ10sIFtTVU5DQz0ieWVzIl0sIFtTVU5DQz0ibm8iXSkKLSAgQUNfTEFOR19QT1AoKQotCi0K
LSAgQUNfQVJHX0VOQUJMRShbNjRiaXQtc29sYXJpc10sCi0gICAgW0FTX0hFTFBfU1RSSU5HKFst
LWRpc2FibGUtNjRiaXQtc29sYXJpc10sCi0gICAgICBbQnVpbGQgNjQgYml0IGJpbmFyeSBvbiBT
b2xhcmlzIEA8OkBkZWZhdWx0PW9uQDo+QF0pXSwKLSAgICAgICAgICAgICBbYWNfZW5hYmxlXzY0
Yml0PSIkZW5hYmxldmFsIl0sCi0gICAgICAgICAgICAgW2FjX2VuYWJsZV82NGJpdD0ieWVzIl0p
Ci0KLSAgQVNfSUYoW3Rlc3QgIiRTVU5DQyIgPSAieWVzIiAtYSAieCR7YWNfY3ZfZW52X0NYWEZM
QUdTX3NldH0iID0gIngiXSxbCi0gICAgZG5sIFN1biBTdHVkaW8gaGFzIGEgY3Jhc2hpbmcgYnVn
IHdpdGggLXhPNCBpbiBzb21lIGNhc2VzLiBLZWVwIHRoaXMKLSAgICBkbmwgYXQgLXhPMyB1bnRp
bCBhIHByb3BlciB0ZXN0IHRvIGRldGVjdCB0aG9zZSBjcmFzaGVzIGNhbiBiZSBkb25lLgotICAg
IENYWEZMQUdTPSItZzAgLXhPMyAteGxpYm1pbCAteGRlcGVuZCAteGJ1aWx0aW4gLW10IC1jb21w
YXQ9NSAtbGlicmFyeT1zdGxwb3J0NCAtbGlicmFyeT1DcnVuIC10ZW1wbGF0ZT1ubyVleHRkZWYg
JHtDWFhGTEFHU30iCi0gIF0pCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgICpzb2xhcmlzKikK
LSAgICAgIEFDX0NIRUNLX1BST0dTKElTQUlORk8sIFtpc2FpbmZvXSwgW25vXSkKLSAgICAgIEFT
X0lGKFt0ZXN0ICJ4JElTQUlORk8iICE9ICJ4bm8iXSwKLSAgICAgICAgICAgIFtpc2FpbmZvX2I9
YCR7SVNBSU5GT30gLWJgXSwKLSAgICAgICAgICAgIFtpc2FpbmZvX2I9IngiXSkKLQotICAgICAg
QVNfSUYoW3Rlc3QgIiRpc2FpbmZvX2IiICE9ICJ4Il0sWwotCi0gICAgICAgIGlzYWluZm9faz1g
JHtJU0FJTkZPfSAta2AKLQotICAgICAgICBBU19JRihbdGVzdCAieCRhY19lbmFibGVfNjRiaXQi
ID0gInh5ZXMiXSxbCi0KLSAgICAgICAgICBBU19JRihbdGVzdCAieCRsaWJkaXIiID0gInhcJHtl
eGVjX3ByZWZpeH0vbGliIl0sWwotICAgICAgICAgICBkbmwgVGhlIHVzZXIgaGFzbid0IG92ZXJy
aWRkZW4gdGhlIGRlZmF1bHQgbGliZGlyLCBzbyB3ZSdsbAotICAgICAgICAgICBkbmwgdGhlIGRp
ciBzdWZmaXggdG8gbWF0Y2ggc29sYXJpcyAzMi82NC1iaXQgcG9saWN5Ci0gICAgICAgICAgIGxp
YmRpcj0iJHtsaWJkaXJ9LyR7aXNhaW5mb19rfSIKLSAgICAgICAgICBdKQotCi0gICAgICAgICAg
ZG5sIFRoaXMgc2hvdWxkIGp1c3QgYmUgc2V0IGluIENQUEZMQUdTIGFuZCBpbiBMREZMQUdTLCBi
dXQgbGlidG9vbAotICAgICAgICAgIGRubCBkb2VzIHRoZSB3cm9uZyB0aGluZyBpZiB5b3UgZG9u
J3QgcHV0IGl0IGludG8gQ1hYRkxBR1MuIHNpZ2guCi0gICAgICAgICAgZG5sIChJdCBhbHNvIG5l
ZWRzIGl0IGluIENGTEFHUywgb3IgaXQgZG9lcyBhIGRpZmZlcmVudCB3cm9uZyB0aGluZyEpCi0g
ICAgICAgICAgQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9IC1tNjQiCi0gICAgICAgICAgYWNfY3ZfZW52
X0NYWEZMQUdTX3NldD1zZXQKLSAgICAgICAgICBhY19jdl9lbnZfQ1hYRkxBR1NfdmFsdWU9Jy1t
NjQnCi0KLSAgICAgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtbTY0IgotICAgICAgICAgIGFjX2N2
X2Vudl9DRkxBR1Nfc2V0PXNldAotICAgICAgICAgIGFjX2N2X2Vudl9DRkxBR1NfdmFsdWU9Jy1t
NjQnCi0KLSAgICAgICAgICBBU19JRihbdGVzdCAiJHRhcmdldF9jcHUiID0gInNwYXJjIiAtYSAi
eCRTVU5DQyIgPSAieHllcyIgXSxbCi0gICAgICAgICAgICBDWFhGTEFHUz0iLXhtZW1hbGlnbj04
cyAke0NYWEZMQUdTfSIKLSAgICAgICAgICBdKQotICAgICAgICBdKQotICAgICAgXSkKLSAgICA7
OwotICBlc2FjCi0KLV0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL200L2FjeF9wdGhyZWFkLm00IGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9tNC9hY3hfcHRo
cmVhZC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlkNDJjNzQ0OWVmM2FlZWY4
YzZjNmFiOTZmYzNlMWRiYzMwNmRlYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL200L2FjeF9wdGhyZWFkLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzk3ICsw
LDAgQEAKLSMgVGhpcyB3YXMgcmV0cmlldmVkIGZyb20KLSMgICAgaHR0cDovL3N2bi4wcG9pbnRl
ci5kZS92aWV3dmMvdHJ1bmsvY29tbW9uL2FjeF9wdGhyZWFkLm00P3JldmlzaW9uPTEyNzcmcm9v
dD1hdmFoaQotIyBTZWUgYWxzbyAocGVyaGFwcyBmb3IgbmV3IHZlcnNpb25zPykKLSMgICAgaHR0
cDovL3N2bi4wcG9pbnRlci5kZS92aWV3dmMvdHJ1bmsvY29tbW9uL2FjeF9wdGhyZWFkLm00P3Jv
b3Q9YXZhaGkKLSMKLSMgV2UndmUgcmV3cml0dGVuIHRoZSBpbmNvbnNpc3RlbmN5IGNoZWNrIGNv
ZGUgKGZyb20gYXZhaGkpLCB0byB3b3JrCi0jIG1vcmUgYnJvYWRseS4gIEluIHBhcnRpY3VsYXIs
IGl0IG5vIGxvbmdlciBhc3N1bWVzIGxkIGFjY2VwdHMgLXpkZWZzLgotIyBUaGlzIGNhdXNlZCBh
IHJlc3RydWN0aW5nIG9mIHRoZSBjb2RlLCBidXQgdGhlIGZ1bmN0aW9uYWxpdHkgaGFzIG9ubHkK
LSMgY2hhbmdlZCBhIGxpdHRsZS4KLQotZG5sIEBzeW5vcHNpcyBBQ1hfUFRIUkVBRChbQUNUSU9O
LUlGLUZPVU5EWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dKQotZG5sCi1kbmwgQHN1bW1hcnkgZmln
dXJlIG91dCBob3cgdG8gYnVpbGQgQyBwcm9ncmFtcyB1c2luZyBQT1NJWCB0aHJlYWRzCi1kbmwK
LWRubCBUaGlzIG1hY3JvIGZpZ3VyZXMgb3V0IGhvdyB0byBidWlsZCBDIHByb2dyYW1zIHVzaW5n
IFBPU0lYIHRocmVhZHMuCi1kbmwgSXQgc2V0cyB0aGUgUFRIUkVBRF9MSUJTIG91dHB1dCB2YXJp
YWJsZSB0byB0aGUgdGhyZWFkcyBsaWJyYXJ5IGFuZAotZG5sIGxpbmtlciBmbGFncywgYW5kIHRo
ZSBQVEhSRUFEX0NGTEFHUyBvdXRwdXQgdmFyaWFibGUgdG8gYW55IHNwZWNpYWwKLWRubCBDIGNv
bXBpbGVyIGZsYWdzIHRoYXQgYXJlIG5lZWRlZC4gKFRoZSB1c2VyIGNhbiBhbHNvIGZvcmNlIGNl
cnRhaW4KLWRubCBjb21waWxlciBmbGFncy9saWJzIHRvIGJlIHRlc3RlZCBieSBzZXR0aW5nIHRo
ZXNlIGVudmlyb25tZW50Ci1kbmwgdmFyaWFibGVzLikKLWRubAotZG5sIEFsc28gc2V0cyBQVEhS
RUFEX0NDIHRvIGFueSBzcGVjaWFsIEMgY29tcGlsZXIgdGhhdCBpcyBuZWVkZWQgZm9yCi1kbmwg
bXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgKGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBDQyBvdGhl
cndpc2UpLgotZG5sIChUaGlzIGlzIG5lY2Vzc2FyeSBvbiBBSVggdG8gdXNlIHRoZSBzcGVjaWFs
IGNjX3IgY29tcGlsZXIgYWxpYXMuKQotZG5sCi1kbmwgTk9URTogWW91IGFyZSBhc3N1bWVkIHRv
IG5vdCBvbmx5IGNvbXBpbGUgeW91ciBwcm9ncmFtIHdpdGggdGhlc2UKLWRubCBmbGFncywgYnV0
IGFsc28gbGluayBpdCB3aXRoIHRoZW0gYXMgd2VsbC4gZS5nLiB5b3Ugc2hvdWxkIGxpbmsKLWRu
bCB3aXRoICRQVEhSRUFEX0NDICRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTICRMREZMQUdTIC4uLiAk
UFRIUkVBRF9MSUJTCi1kbmwgJExJQlMKLWRubAotZG5sIElmIHlvdSBhcmUgb25seSBidWlsZGlu
ZyB0aHJlYWRzIHByb2dyYW1zLCB5b3UgbWF5IHdpc2ggdG8gdXNlCi1kbmwgdGhlc2UgdmFyaWFi
bGVzIGluIHlvdXIgZGVmYXVsdCBMSUJTLCBDRkxBR1MsIGFuZCBDQzoKLWRubAotZG5sICAgICAg
ICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgotZG5sICAgICAgICBDRkxBR1M9IiRDRkxBR1Mg
JFBUSFJFQURfQ0ZMQUdTIgotZG5sICAgICAgICBDQz0iJFBUSFJFQURfQ0MiCi1kbmwKLWRubCBJ
biBhZGRpdGlvbiwgaWYgdGhlIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIHRocmVhZC1hdHRyaWJ1
dGUKLWRubCBjb25zdGFudCBoYXMgYSBub25zdGFuZGFyZCBuYW1lLCBkZWZpbmVzIFBUSFJFQURf
Q1JFQVRFX0pPSU5BQkxFIHRvCi1kbmwgdGhhdCBuYW1lIChlLmcuIFBUSFJFQURfQ1JFQVRFX1VO
REVUQUNIRUQgb24gQUlYKS4KLWRubAotZG5sIEFDVElPTi1JRi1GT1VORCBpcyBhIGxpc3Qgb2Yg
c2hlbGwgY29tbWFuZHMgdG8gcnVuIGlmIGEgdGhyZWFkcwotZG5sIGxpYnJhcnkgaXMgZm91bmQs
IGFuZCBBQ1RJT04tSUYtTk9ULUZPVU5EIGlzIGEgbGlzdCBvZiBjb21tYW5kcyB0bwotZG5sIHJ1
biBpdCBpZiBpdCBpcyBub3QgZm91bmQuIElmIEFDVElPTi1JRi1GT1VORCBpcyBub3Qgc3BlY2lm
aWVkLCB0aGUKLWRubCBkZWZhdWx0IGFjdGlvbiB3aWxsIGRlZmluZSBIQVZFX1BUSFJFQUQuCi1k
bmwKLWRubCBQbGVhc2UgbGV0IHRoZSBhdXRob3JzIGtub3cgaWYgdGhpcyBtYWNybyBmYWlscyBv
biBhbnkgcGxhdGZvcm0sIG9yCi1kbmwgaWYgeW91IGhhdmUgYW55IG90aGVyIHN1Z2dlc3Rpb25z
IG9yIGNvbW1lbnRzLiBUaGlzIG1hY3JvIHdhcyBiYXNlZAotZG5sIG9uIHdvcmsgYnkgU0dKIG9u
IGF1dG9jb25mIHNjcmlwdHMgZm9yIEZGVFcgKHd3dy5mZnR3Lm9yZykgKHdpdGgKLWRubCBoZWxw
IGZyb20gTS4gRnJpZ28pLCBhcyB3ZWxsIGFzIGFjX3B0aHJlYWQgYW5kIGhiX3B0aHJlYWQgbWFj
cm9zCi1kbmwgcG9zdGVkIGJ5IEFsZWphbmRybyBGb3Jlcm8gQ3VlcnZvIHRvIHRoZSBhdXRvY29u
ZiBtYWNybyByZXBvc2l0b3J5LgotZG5sIFdlIGFyZSBhbHNvIGdyYXRlZnVsIGZvciB0aGUgaGVs
cGZ1bCBmZWVkYmFjayBvZiBudW1lcm91cyB1c2Vycy4KLWRubAotZG5sIEBjYXRlZ29yeSBJbnN0
YWxsZWRQYWNrYWdlcwotZG5sIEBhdXRob3IgU3RldmVuIEcuIEpvaG5zb24gPHN0ZXZlbmpAYWx1
bS5taXQuZWR1PgotZG5sIEB2ZXJzaW9uIDIwMDYtMDUtMjkKLWRubCBAbGljZW5zZSBHUExXaXRo
QUNFeGNlcHRpb24KLWRubCAKLWRubCBDaGVja3MgZm9yIEdDQyBzaGFyZWQvcHRocmVhZCBpbmNv
bnNpc3RlbmN5IGJhc2VkIG9uIHdvcmsgYnkKLWRubCBNYXJjaW4gT3dzaWFueSA8bWFyY2luQG93
c2lhbnkucGw+Ci0KLQotQUNfREVGVU4oW0FDWF9QVEhSRUFEXSwgWwotQUNfUkVRVUlSRShbQUNf
Q0FOT05JQ0FMX0hPU1RdKQotQUNfTEFOR19TQVZFCi1BQ19MQU5HX0MKLWFjeF9wdGhyZWFkX29r
PW5vCi0KLSMgV2UgdXNlZCB0byBjaGVjayBmb3IgcHRocmVhZC5oIGZpcnN0LCBidXQgdGhpcyBm
YWlscyBpZiBwdGhyZWFkLmgKLSMgcmVxdWlyZXMgc3BlY2lhbCBjb21waWxlciBmbGFncyAoZS5n
LiBvbiBUcnVlNjQgb3IgU2VxdWVudCkuCi0jIEl0IGdldHMgY2hlY2tlZCBmb3IgaW4gdGhlIGxp
bmsgdGVzdCBhbnl3YXkuCi0KLSMgRmlyc3Qgb2YgYWxsLCBjaGVjayBpZiB0aGUgdXNlciBoYXMg
c2V0IGFueSBvZiB0aGUgUFRIUkVBRF9MSUJTLAotIyBldGNldGVyYSBlbnZpcm9ubWVudCB2YXJp
YWJsZXMsIGFuZCBpZiB0aHJlYWRzIGxpbmtpbmcgd29ya3MgdXNpbmcKLSMgdGhlbToKLWlmIHRl
c3QgeCIkUFRIUkVBRF9MSUJTJFBUSFJFQURfQ0ZMQUdTIiAhPSB4OyB0aGVuCi0gICAgICAgIHNh
dmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZM
QUdTIgotICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICBMSUJTPSIkUFRIUkVBRF9M
SUJTICRMSUJTIgotICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwdGhyZWFkX2pvaW4gaW4g
TElCUz0kUFRIUkVBRF9MSUJTIHdpdGggQ0ZMQUdTPSRQVEhSRUFEX0NGTEFHU10pCi0gICAgICAg
IEFDX1RSWV9MSU5LX0ZVTkMocHRocmVhZF9qb2luLCBhY3hfcHRocmVhZF9vaz15ZXMpCi0gICAg
ICAgIEFDX01TR19SRVNVTFQoJGFjeF9wdGhyZWFkX29rKQotICAgICAgICBpZiB0ZXN0IHgiJGFj
eF9wdGhyZWFkX29rIiA9IHhubzsgdGhlbgotICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0i
IgotICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCi0gICAgICAgIGZpCi0gICAgICAg
IExJQlM9IiRzYXZlX0xJQlMiCi0gICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotZmkKLQot
IyBXZSBtdXN0IGNoZWNrIGZvciB0aGUgdGhyZWFkcyBsaWJyYXJ5IHVuZGVyIGEgbnVtYmVyIG9m
IGRpZmZlcmVudAotIyBuYW1lczsgdGhlIG9yZGVyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1
c2Ugc29tZSBzeXN0ZW1zCi0jIChlLmcuIERFQykgaGF2ZSBib3RoIC1scHRocmVhZCBhbmQgLWxw
dGhyZWFkcywgd2hlcmUgb25lIG9mIHRoZQotIyBsaWJyYXJpZXMgaXMgYnJva2VuIChub24tUE9T
SVgpLgotCi0jIENyZWF0ZSBhIGxpc3Qgb2YgdGhyZWFkIGZsYWdzIHRvIHRyeS4gIEl0ZW1zIHN0
YXJ0aW5nIHdpdGggYSAiLSIgYXJlCi0jIEMgY29tcGlsZXIgZmxhZ3MsIGFuZCBvdGhlciBpdGVt
cyBhcmUgbGlicmFyeSBuYW1lcywgZXhjZXB0IGZvciAibm9uZSIKLSMgd2hpY2ggaW5kaWNhdGVz
IHRoYXQgd2UgdHJ5IHdpdGhvdXQgYW55IGZsYWdzIGF0IGFsbCwgYW5kICJwdGhyZWFkLWNvbmZp
ZyIKLSMgd2hpY2ggaXMgYSBwcm9ncmFtIHJldHVybmluZyB0aGUgZmxhZ3MgZm9yIHRoZSBQdGgg
ZW11bGF0aW9uIGxpYnJhcnkuCi0KLWFjeF9wdGhyZWFkX2ZsYWdzPSJwdGhyZWFkcyBub25lIC1L
dGhyZWFkIC1rdGhyZWFkIGx0aHJlYWQgLXB0aHJlYWQgLXB0aHJlYWRzIC1tdGhyZWFkcyBwdGhy
ZWFkIC0tdGhyZWFkLXNhZmUgLW10IHB0aHJlYWQtY29uZmlnIgotCi0jIFRoZSBvcmRlcmluZyAq
aXMqIChzb21ldGltZXMpIGltcG9ydGFudC4gIFNvbWUgbm90ZXMgb24gdGhlCi0jIGluZGl2aWR1
YWwgaXRlbXMgZm9sbG93OgotCi0jIHB0aHJlYWRzOiBBSVggKG11c3QgY2hlY2sgdGhpcyBiZWZv
cmUgLWxwdGhyZWFkKQotIyBub25lOiBpbiBjYXNlIHRocmVhZHMgYXJlIGluIGxpYmM7IHNob3Vs
ZCBiZSB0cmllZCBiZWZvcmUgLUt0aHJlYWQgYW5kCi0jICAgICAgIG90aGVyIGNvbXBpbGVyIGZs
YWdzIHRvIHByZXZlbnQgY29udGludWFsIGNvbXBpbGVyIHdhcm5pbmdzCi0jIC1LdGhyZWFkOiBT
ZXF1ZW50ICh0aHJlYWRzIGluIGxpYmMsIGJ1dCAtS3RocmVhZCBuZWVkZWQgZm9yIHB0aHJlYWQu
aCkKLSMgLWt0aHJlYWQ6IEZyZWVCU0Qga2VybmVsIHRocmVhZHMgKHByZWZlcnJlZCB0byAtcHRo
cmVhZCBzaW5jZSBTTVAtYWJsZSkKLSMgbHRocmVhZDogTGludXhUaHJlYWRzIHBvcnQgb24gRnJl
ZUJTRCAoYWxzbyBwcmVmZXJyZWQgdG8gLXB0aHJlYWQpCi0jIC1wdGhyZWFkOiBMaW51eC9nY2Mg
KGtlcm5lbCB0aHJlYWRzKSwgQlNEL2djYyAodXNlcmxhbmQgdGhyZWFkcykKLSMgLXB0aHJlYWRz
OiBTb2xhcmlzL2djYwotIyAtbXRocmVhZHM6IE1pbmd3MzIvZ2NjLCBMeW54L2djYwotIyAtbXQ6
IFN1biBXb3Jrc2hvcCBDIChtYXkgb25seSBsaW5rIFN1bk9TIHRocmVhZHMgWy1sdGhyZWFkXSwg
YnV0IGl0Ci0jICAgICAgZG9lc24ndCBodXJ0IHRvIGNoZWNrIHNpbmNlIHRoaXMgc29tZXRpbWVz
IGRlZmluZXMgcHRocmVhZHMgdG9vOwotIyAgICAgIGFsc28gZGVmaW5lcyAtRF9SRUVOVFJBTlQp
Ci0jICAgICAgLi4uIC1tdCBpcyBhbHNvIHRoZSBwdGhyZWFkcyBmbGFnIGZvciBIUC9hQ0MKLSMg
cHRocmVhZDogTGludXgsIGV0Y2V0ZXJhCi0jIC0tdGhyZWFkLXNhZmU6IEtBSSBDKysKLSMgcHRo
cmVhZC1jb25maWc6IHVzZSBwdGhyZWFkLWNvbmZpZyBwcm9ncmFtIChmb3IgR05VIFB0aCBsaWJy
YXJ5KQotCi1jYXNlICIke2hvc3RfY3B1fS0ke2hvc3Rfb3N9IiBpbgotICAgICAgICAqc29sYXJp
cyopCi0KLSAgICAgICAgIyBPbiBTb2xhcmlzIChhdCBsZWFzdCwgZm9yIHNvbWUgdmVyc2lvbnMp
LCBsaWJjIGNvbnRhaW5zIHN0dWJiZWQKLSAgICAgICAgIyAobm9uLWZ1bmN0aW9uYWwpIHZlcnNp
b25zIG9mIHRoZSBwdGhyZWFkcyByb3V0aW5lcywgc28gbGluay1iYXNlZAotICAgICAgICAjIHRl
c3RzIHdpbGwgZXJyb25lb3VzbHkgc3VjY2VlZC4gIChXZSBuZWVkIHRvIGxpbmsgd2l0aCAtcHRo
cmVhZHMvLW10LwotICAgICAgICAjIC1scHRocmVhZC4pICAoVGhlIHN0dWJzIGFyZSBtaXNzaW5n
IHB0aHJlYWRfY2xlYW51cF9wdXNoLCBvciByYXRoZXIKLSAgICAgICAgIyBhIGZ1bmN0aW9uIGNh
bGxlZCBieSB0aGlzIG1hY3JvLCBzbyB3ZSBjb3VsZCBjaGVjayBmb3IgdGhhdCwgYnV0Ci0gICAg
ICAgICMgd2hvIGtub3dzIHdoZXRoZXIgdGhleSdsbCBzdHViIHRoYXQgdG9vIGluIGEgZnV0dXJl
IGxpYmMuKSAgU28sCi0gICAgICAgICMgd2UnbGwganVzdCBsb29rIGZvciAtcHRocmVhZHMgYW5k
IC1scHRocmVhZCBmaXJzdDoKLQotICAgICAgICBhY3hfcHRocmVhZF9mbGFncz0iLXB0aHJlYWRz
IHB0aHJlYWQgLW10IC1wdGhyZWFkICRhY3hfcHRocmVhZF9mbGFncyIKLSAgICAgICAgOzsKLWVz
YWMKLQotaWYgdGVzdCB4IiRhY3hfcHRocmVhZF9vayIgPSB4bm87IHRoZW4KLWZvciBmbGFnIGlu
ICRhY3hfcHRocmVhZF9mbGFnczsgZG8KLQotICAgICAgICBjYXNlICRmbGFnIGluCi0gICAgICAg
ICAgICAgICAgbm9uZSkKLSAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIg
cHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFnc10pCi0gICAgICAgICAgICAgICAgOzsKLQot
ICAgICAgICAgICAgICAgIC0qKQotICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hl
dGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGZsYWddKQotICAgICAgICAgICAgICAgIFBUSFJFQURf
Q0ZMQUdTPSIkZmxhZyIKLSAgICAgICAgICAgICAgICA7OwotCi0JCXB0aHJlYWQtY29uZmlnKQot
CQlBQ19DSEVDS19QUk9HKGFjeF9wdGhyZWFkX2NvbmZpZywgcHRocmVhZC1jb25maWcsIHllcywg
bm8pCi0JCWlmIHRlc3QgeCIkYWN4X3B0aHJlYWRfY29uZmlnIiA9IHhubzsgdGhlbiBjb250aW51
ZTsgZmkKLQkJUFRIUkVBRF9DRkxBR1M9ImBwdGhyZWFkLWNvbmZpZyAtLWNmbGFnc2AiCi0JCVBU
SFJFQURfTElCUz0iYHB0aHJlYWQtY29uZmlnIC0tbGRmbGFnc2AgYHB0aHJlYWQtY29uZmlnIC0t
bGlic2AiCi0JCTs7Ci0KLSAgICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgIEFDX01T
R19DSEVDS0lORyhbZm9yIHRoZSBwdGhyZWFkcyBsaWJyYXJ5IC1sJGZsYWddKQotICAgICAgICAg
ICAgICAgIFBUSFJFQURfTElCUz0iLWwkZmxhZyIKLSAgICAgICAgICAgICAgICA7OwotICAgICAg
ICBlc2FjCi0KLSAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgICAgc2F2ZV9DRkxBR1M9
IiRDRkxBR1MiCi0gICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCi0gICAgICAgIENG
TEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCi0KLSAgICAgICAgIyBDaGVjayBmb3IgdmFy
aW91cyBmdW5jdGlvbnMuICBXZSBtdXN0IGluY2x1ZGUgcHRocmVhZC5oLAotICAgICAgICAjIHNp
bmNlIHNvbWUgZnVuY3Rpb25zIG1heSBiZSBtYWNyb3MuICAoT24gdGhlIFNlcXVlbnQsIHdlCi0g
ICAgICAgICMgbmVlZCBhIHNwZWNpYWwgZmxhZyAtS3RocmVhZCB0byBtYWtlIHRoaXMgaGVhZGVy
IGNvbXBpbGUuKQotICAgICAgICAjIFdlIGNoZWNrIGZvciBwdGhyZWFkX2pvaW4gYmVjYXVzZSBp
dCBpcyBpbiAtbHB0aHJlYWQgb24gSVJJWAotICAgICAgICAjIHdoaWxlIHB0aHJlYWRfY3JlYXRl
IGlzIGluIGxpYmMuICBXZSBjaGVjayBmb3IgcHRocmVhZF9hdHRyX2luaXQKLSAgICAgICAgIyBk
dWUgdG8gREVDIGNyYXppbmVzcyB3aXRoIC1scHRocmVhZHMuICBXZSBjaGVjayBmb3IKLSAgICAg
ICAgIyBwdGhyZWFkX2NsZWFudXBfcHVzaCBiZWNhdXNlIGl0IGlzIG9uZSBvZiB0aGUgZmV3IHB0
aHJlYWQKLSAgICAgICAgIyBmdW5jdGlvbnMgb24gU29sYXJpcyB0aGF0IGRvZXNuJ3QgaGF2ZSBh
IG5vbi1mdW5jdGlvbmFsIGxpYmMgc3R1Yi4KLSAgICAgICAgIyBXZSB0cnkgcHRocmVhZF9jcmVh
dGUgb24gZ2VuZXJhbCBwcmluY2lwbGVzLgotICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUg
PHB0aHJlYWQuaD5dLAotICAgICAgICAgICAgICAgICAgICBbcHRocmVhZF90IHRoOyBwdGhyZWFk
X2pvaW4odGgsIDApOwotICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX2luaXQoMCk7
IHB0aHJlYWRfY2xlYW51cF9wdXNoKDAsIDApOwotICAgICAgICAgICAgICAgICAgICAgcHRocmVh
ZF9jcmVhdGUoMCwwLDAsMCk7IHB0aHJlYWRfY2xlYW51cF9wb3AoMCk7IF0sCi0gICAgICAgICAg
ICAgICAgICAgIFthY3hfcHRocmVhZF9vaz15ZXNdKQotCi0gICAgICAgIExJQlM9IiRzYXZlX0xJ
QlMiCi0gICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCi0gICAgICAgIEFDX01TR19SRVNV
TFQoJGFjeF9wdGhyZWFkX29rKQotICAgICAgICBpZiB0ZXN0ICJ4JGFjeF9wdGhyZWFkX29rIiA9
IHh5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZmkKLQotICAgICAg
ICBQVEhSRUFEX0xJQlM9IiIKLSAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKLWRvbmUKLWZpCi0K
LSMgVmFyaW91cyBvdGhlciBjaGVja3M6Ci1pZiB0ZXN0ICJ4JGFjeF9wdGhyZWFkX29rIiA9IHh5
ZXM7IHRoZW4KLSAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgICAgTElCUz0iJFBUSFJF
QURfTElCUyAkTElCUyIKLSAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gICAgICAgIENG
TEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCi0KLSAgICAgICAgIyBEZXRlY3QgQUlYIGxv
c3NhZ2U6IEpPSU5BQkxFIGF0dHJpYnV0ZSBpcyBjYWxsZWQgVU5ERVRBQ0hFRC4KLQlBQ19NU0df
Q0hFQ0tJTkcoW2ZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZV0pCi0JYXR0cl9uYW1lPXVu
a25vd24KLQlmb3IgYXR0ciBpbiBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSBQVEhSRUFEX0NSRUFU
RV9VTkRFVEFDSEVEOyBkbwotCSAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aHJlYWQuaD5d
LCBbaW50IGF0dHI9JGF0dHI7IHJldHVybiBhdHRyO10sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBbYXR0cl9uYW1lPSRhdHRyOyBicmVha10pCi0JZG9uZQotICAgICAgICBBQ19NU0dfUkVTVUxU
KCRhdHRyX25hbWUpCi0gICAgICAgIGlmIHRlc3QgIiRhdHRyX25hbWUiICE9IFBUSFJFQURfQ1JF
QVRFX0pPSU5BQkxFOyB0aGVuCi0gICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUFRIUkVB
RF9DUkVBVEVfSk9JTkFCTEUsICRhdHRyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgW0RlZmluZSB0byBuZWNlc3Nhcnkgc3ltYm9sIGlmIHRoaXMgY29uc3RhbnQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBhIG5vbi1zdGFuZGFyZCBuYW1lIG9uIHlv
dXIgc3lzdGVtLl0pCi0gICAgICAgIGZpCi0KLSAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBt
b3JlIHNwZWNpYWwgZmxhZ3MgYXJlIHJlcXVpcmVkIGZvciBwdGhyZWFkc10pCi0gICAgICAgIGZs
YWc9bm8KLSAgICAgICAgY2FzZSAiJHtob3N0X2NwdX0tJHtob3N0X29zfSIgaW4KLSAgICAgICAg
ICAgICotYWl4KiB8ICotZnJlZWJzZCogfCAqLWRhcndpbiopIGZsYWc9Ii1EX1RIUkVBRF9TQUZF
Ijs7Ci0gICAgICAgICAgICAqc29sYXJpcyogfCAqLW9zZiogfCAqLWhwdXgqKSBmbGFnPSItRF9S
RUVOVFJBTlQiOzsKLSAgICAgICAgZXNhYwotICAgICAgICBBQ19NU0dfUkVTVUxUKCR7ZmxhZ30p
Ci0gICAgICAgIGlmIHRlc3QgIngkZmxhZyIgIT0geG5vOyB0aGVuCi0gICAgICAgICAgICBQVEhS
RUFEX0NGTEFHUz0iJGZsYWcgJFBUSFJFQURfQ0ZMQUdTIgotICAgICAgICBmaQotCi0gICAgICAg
IExJQlM9IiRzYXZlX0xJQlMiCi0gICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotICAgICAg
ICAjIE1vcmUgQUlYIGxvc3NhZ2U6IG11c3QgY29tcGlsZSB3aXRoIHhsY19yIG9yIGNjX3IKLQlp
ZiB0ZXN0IHgiJEdDQyIgIT0geHllczsgdGhlbgotICAgICAgICAgIEFDX0NIRUNLX1BST0dTKFBU
SFJFQURfQ0MsIHhsY19yIGNjX3IsICR7Q0N9KQotICAgICAgICBlbHNlCi0gICAgICAgICAgUFRI
UkVBRF9DQz0kQ0MKLQlmaQotCi0JIyBUaGUgbmV4dCBwYXJ0IHRyaWVzIHRvIGRldGVjdCBHQ0Mg
aW5jb25zaXN0ZW5jeSB3aXRoIC1zaGFyZWQgb24gc29tZQotCSMgYXJjaGl0ZWN0dXJlcyBhbmQg
c3lzdGVtcy4gVGhlIHByb2JsZW0gaXMgdGhhdCBpbiBjZXJ0YWluCi0JIyBjb25maWd1cmF0aW9u
cywgd2hlbiAtc2hhcmVkIGlzIHNwZWNpZmllZCwgR0NDICJmb3JnZXRzIiB0bwotCSMgaW50ZXJu
YWxseSB1c2UgdmFyaW91cyBmbGFncyB3aGljaCBhcmUgc3RpbGwgbmVjZXNzYXJ5LgotCQotCSMK
LQkjIFByZXBhcmUgdGhlIGZsYWdzCi0JIwotCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotCXNhdmVf
TElCUz0iJExJQlMiCi0Jc2F2ZV9DQz0iJENDIgotCQotCSMgVHJ5IHdpdGggdGhlIGZsYWdzIGRl
dGVybWluZWQgYnkgdGhlIGVhcmxpZXIgY2hlY2tzLgotCSMKLQkjIC1XbCwteixkZWZzIGZvcmNl
cyBsaW5rLXRpbWUgc3ltYm9sIHJlc29sdXRpb24sIHNvIHRoYXQgdGhlCi0JIyBsaW5raW5nIGNo
ZWNrcyB3aXRoIC1zaGFyZWQgYWN0dWFsbHkgaGF2ZSBhbnkgdmFsdWUKLQkjCi0JIyBGSVhNRTog
LWZQSUMgaXMgcmVxdWlyZWQgZm9yIC1zaGFyZWQgb24gbWFueSBhcmNoaXRlY3R1cmVzLAotCSMg
c28gd2Ugc3BlY2lmeSBpdCBoZXJlLCBidXQgdGhlIHJpZ2h0IHdheSB3b3VsZCBwcm9iYWJseSBi
ZSB0bwotCSMgcHJvcGVybHkgZGV0ZWN0IHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgcmVxdWlyZWQu
Ci0JQ0ZMQUdTPSItc2hhcmVkIC1mUElDIC1XbCwteixkZWZzICRDRkxBR1MgJFBUSFJFQURfQ0ZM
QUdTIgotCUxJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCi0JQ0M9IiRQVEhSRUFEX0NDIgotCQot
CSMgSW4gb3JkZXIgbm90IHRvIGNyZWF0ZSBzZXZlcmFsIGxldmVscyBvZiBpbmRlbnRhdGlvbiwg
d2UgdGVzdAotCSMgdGhlIHZhbHVlIG9mICIkZG9uZSIgdW50aWwgd2UgZmluZCB0aGUgY3VyZSBv
ciBydW4gb3V0IG9mIGlkZWFzLgotCWRvbmU9Im5vIgotCQotCSMgRmlyc3QsIG1ha2Ugc3VyZSB0
aGUgQ0ZMQUdTIHdlIGFkZGVkIGFyZSBhY3R1YWxseSBhY2NlcHRlZCBieSBvdXIKLQkjIGNvbXBp
bGVyLiAgSWYgbm90IChhbmQgT1MgWCdzIGxkLCBmb3IgaW5zdGFuY2UsIGRvZXMgbm90IGFjY2Vw
dCAteiksCi0JIyB0aGVuIHdlIGNhbid0IGRvIHRoaXMgdGVzdC4KLQlpZiB0ZXN0IHgiJGRvbmUi
ID0geG5vOyB0aGVuCi0JICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGNoZWNrIGZvciBH
Q0MgcHRocmVhZC9zaGFyZWQgaW5jb25zaXN0ZW5jaWVzXSkKLQkgICBBQ19UUllfTElOSygsLCAs
IFtkb25lPXllc10pCi0JCi0JICAgaWYgdGVzdCAieCRkb25lIiA9IHh5ZXMgOyB0aGVuCi0JICAg
ICAgQUNfTVNHX1JFU1VMVChbbm9dKQotCSAgIGVsc2UKLQkgICAgICBBQ19NU0dfUkVTVUxUKFt5
ZXNdKQotCSAgIGZpCi0JZmkKLQkKLQlpZiB0ZXN0IHgiJGRvbmUiID0geG5vOyB0aGVuCi0JICAg
QUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIC1wdGhyZWFkIGlzIHN1ZmZpY2llbnQgd2l0aCAtc2hh
cmVkXSkKLQkgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAotCSAgICAgIFtw
dGhyZWFkX3QgdGg7IHB0aHJlYWRfam9pbih0aCwgMCk7Ci0JICAgICAgcHRocmVhZF9hdHRyX2lu
aXQoMCk7IHB0aHJlYWRfY2xlYW51cF9wdXNoKDAsIDApOwotCSAgICAgIHB0aHJlYWRfY3JlYXRl
KDAsMCwwLDApOyBwdGhyZWFkX2NsZWFudXBfcG9wKDApOyBdLAotCSAgICAgIFtkb25lPXllc10p
Ci0JICAgCi0JICAgaWYgdGVzdCAieCRkb25lIiA9IHh5ZXM7IHRoZW4KLQkgICAgICBBQ19NU0df
UkVTVUxUKFt5ZXNdKQotCSAgIGVsc2UKLQkgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCi0JICAg
ZmkKLQlmaQotCQotCSMKLQkjIExpbnV4IGdjYyBvbiBzb21lIGFyY2hpdGVjdHVyZXMgc3VjaCBh
cyBtaXBzL21pcHNlbCBmb3JnZXRzCi0JIyBhYm91dCAtbHB0aHJlYWQKLQkjCi0JaWYgdGVzdCB4
IiRkb25lIiA9IHhubzsgdGhlbgotCSAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAtbHB0aHJl
YWQgZml4ZXMgdGhhdF0pCi0JICAgTElCUz0iLWxwdGhyZWFkICRQVEhSRUFEX0xJQlMgJHNhdmVf
TElCUyIKLQkgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAotCSAgICAgIFtw
dGhyZWFkX3QgdGg7IHB0aHJlYWRfam9pbih0aCwgMCk7Ci0JICAgICAgcHRocmVhZF9hdHRyX2lu
aXQoMCk7IHB0aHJlYWRfY2xlYW51cF9wdXNoKDAsIDApOwotCSAgICAgIHB0aHJlYWRfY3JlYXRl
KDAsMCwwLDApOyBwdGhyZWFkX2NsZWFudXBfcG9wKDApOyBdLAotCSAgICAgIFtkb25lPXllc10p
Ci0JCi0JICAgaWYgdGVzdCAieCRkb25lIiA9IHh5ZXM7IHRoZW4KLQkgICAgICBBQ19NU0dfUkVT
VUxUKFt5ZXNdKQotCSAgICAgIFBUSFJFQURfTElCUz0iLWxwdGhyZWFkICRQVEhSRUFEX0xJQlMi
Ci0JICAgZWxzZQotCSAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKLQkgICBmaQotCWZpCi0JIwot
CSMgRnJlZUJTRCA0LjEwIGdjYyBmb3JnZXRzIHRvIHVzZSAtbGNfciBpbnN0ZWFkIG9mIC1sYwot
CSMKLQlpZiB0ZXN0IHgiJGRvbmUiID0geG5vOyB0aGVuCi0JICAgQUNfTVNHX0NIRUNLSU5HKFt3
aGV0aGVyIC1sY19yIGZpeGVzIHRoYXRdKQotCSAgIExJQlM9Ii1sY19yICRQVEhSRUFEX0xJQlMg
JHNhdmVfTElCUyIKLQkgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAotCSAg
ICAgICBbcHRocmVhZF90IHRoOyBwdGhyZWFkX2pvaW4odGgsIDApOwotCSAgICAgICAgcHRocmVh
ZF9hdHRyX2luaXQoMCk7IHB0aHJlYWRfY2xlYW51cF9wdXNoKDAsIDApOwotCSAgICAgICAgcHRo
cmVhZF9jcmVhdGUoMCwwLDAsMCk7IHB0aHJlYWRfY2xlYW51cF9wb3AoMCk7IF0sCi0JICAgICAg
IFtkb25lPXllc10pCi0JCi0JICAgaWYgdGVzdCAieCRkb25lIiA9IHh5ZXM7IHRoZW4KLQkgICAg
ICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQotCSAgICAgIFBUSFJFQURfTElCUz0iLWxjX3IgJFBUSFJF
QURfTElCUyIKLQkgICBlbHNlCi0JICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQotCSAgIGZpCi0J
ZmkKLQlpZiB0ZXN0IHgiJGRvbmUiID0geG5vOyB0aGVuCi0JICAgIyBPSywgd2UgaGF2ZSBydW4g
b3V0IG9mIGlkZWFzCi0JICAgQUNfTVNHX1dBUk4oW0ltcG9zc2libGUgdG8gZGV0ZXJtaW5lIGhv
dyB0byB1c2UgcHRocmVhZHMgd2l0aCBzaGFyZWQgbGlicmFyaWVzXSkKLQkKLQkgICAjIHNvIGl0
J3Mgbm90IHNhZmUgdG8gYXNzdW1lIHRoYXQgd2UgbWF5IHVzZSBwdGhyZWFkcwotCSAgIGFjeF9w
dGhyZWFkX29rPW5vCi0JZmkKLQkKLQlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgd2hhdCB3ZSBo
YXZlIHNvIGZhciBpcyBzdWZmaWNpZW50IHdpdGggLW5vc3RkbGliXSkKLQlDRkxBR1M9Ii1ub3N0
ZGxpYiAkQ0ZMQUdTIgotCSMgd2UgbmVlZCBjIHdpdGggbm9zdGRsaWIKLQlMSUJTPSIkTElCUyAt
bGMiCi0JQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxwdGhyZWFkLmg+XSwKLQkgICAgICBbcHRocmVh
ZF90IHRoOyBwdGhyZWFkX2pvaW4odGgsIDApOwotCSAgICAgICBwdGhyZWFkX2F0dHJfaW5pdCgw
KTsgcHRocmVhZF9jbGVhbnVwX3B1c2goMCwgMCk7Ci0JICAgICAgIHB0aHJlYWRfY3JlYXRlKDAs
MCwwLDApOyBwdGhyZWFkX2NsZWFudXBfcG9wKDApOyBdLAotCSAgICAgIFtkb25lPXllc10sW2Rv
bmU9bm9dKQotCi0JaWYgdGVzdCAieCRkb25lIiA9IHh5ZXM7IHRoZW4KLQkgICBBQ19NU0dfUkVT
VUxUKFt5ZXNdKQotCWVsc2UKLQkgICBBQ19NU0dfUkVTVUxUKFtub10pCi0JZmkKLQkKLQlpZiB0
ZXN0IHgiJGRvbmUiID0geG5vOyB0aGVuCi0JICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIC1s
cHRocmVhZCBzYXZlcyB0aGUgZGF5XSkKLQkgICBMSUJTPSItbHB0aHJlYWQgJExJQlMiCi0JICAg
QUNfVFJZX0xJTksoWyNpbmNsdWRlIDxwdGhyZWFkLmg+XSwKLQkgICAgICBbcHRocmVhZF90IHRo
OyBwdGhyZWFkX2pvaW4odGgsIDApOwotCSAgICAgICBwdGhyZWFkX2F0dHJfaW5pdCgwKTsgcHRo
cmVhZF9jbGVhbnVwX3B1c2goMCwgMCk7Ci0JICAgICAgIHB0aHJlYWRfY3JlYXRlKDAsMCwwLDAp
OyBwdGhyZWFkX2NsZWFudXBfcG9wKDApOyBdLAotCSAgICAgIFtkb25lPXllc10sW2RvbmU9bm9d
KQotCi0JICAgaWYgdGVzdCAieCRkb25lIiA9IHh5ZXM7IHRoZW4KLQkgICAgICBBQ19NU0dfUkVT
VUxUKFt5ZXNdKQotCSAgICAgIFBUSFJFQURfTElCUz0iJFBUSFJFQURfTElCUyAtbHB0aHJlYWQi
Ci0JICAgZWxzZQotCSAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKLQkgICAgICBBQ19NU0dfV0FS
TihbSW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgaG93IHRvIHVzZSBwdGhyZWFkcyB3aXRoIHNoYXJl
ZCBsaWJyYXJpZXMgYW5kIC1ub3N0ZGxpYl0pCi0JICAgZmkKLQlmaQotCi0JQ0ZMQUdTPSIkc2F2
ZV9DRkxBR1MiCi0JTElCUz0iJHNhdmVfTElCUyIKLQlDQz0iJHNhdmVfQ0MiCi1lbHNlCi0gICAg
ICAgIFBUSFJFQURfQ0M9IiRDQyIKLWZpCi0KLUFDX1NVQlNUKFBUSFJFQURfTElCUykKLUFDX1NV
QlNUKFBUSFJFQURfQ0ZMQUdTKQotQUNfU1VCU1QoUFRIUkVBRF9DQykKLQotIyBGaW5hbGx5LCBl
eGVjdXRlIEFDVElPTi1JRi1GT1VORC9BQ1RJT04tSUYtTk9ULUZPVU5EOgotaWYgdGVzdCB4IiRh
Y3hfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCi0gICAgICAgIGlmZWxzZShbJDFdLCxBQ19ERUZJ
TkUoSEFWRV9QVEhSRUFELDEsW0RlZmluZSBpZiB5b3UgaGF2ZSBQT1NJWCB0aHJlYWRzIGxpYnJh
cmllcyBhbmQgaGVhZGVyIGZpbGVzLl0pLFskMV0pCi0gICAgICAgIDoKLWVsc2UKLSAgICAgICAg
YWN4X3B0aHJlYWRfb2s9bm8KLSAgICAgICAgJDIKLWZpCi1BQ19MQU5HX1JFU1RPUkUKLV0pZG5s
IEFDWF9QVEhSRUFECmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL200L3N0bF9oYXNoLm00IGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9tNC9zdGxfaGFzaC5tNApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkZWYxYWY5YjU1Y2U5NzVlZTIyN2ZmNjgx
OTQ0MTRiMDZlOTZmMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL200L3N0bF9oYXNoLm00CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotIyBXZSBj
aGVjayB0d28gdGhpbmdzOiB3aGVyZSB0aGUgaW5jbHVkZSBmaWxlIGlzIGZvcgotIyB1bm9yZGVy
ZWRfbWFwL2hhc2hfbWFwICh3ZSBwcmVmZXIgdGhlIGZpcnN0IGZvcm0pLCBhbmQgd2hhdAotIyBu
YW1lc3BhY2UgdW5vcmRlcmVkL2hhc2hfbWFwIGxpdmVzIGluIHdpdGhpbiB0aGF0IGluY2x1ZGUg
ZmlsZS4gIFdlCi0jIGluY2x1ZGUgQUNfVFJZX0NPTVBJTEUgZm9yIGFsbCB0aGUgY29tYmluYXRp
b25zIHdlJ3ZlIHNlZW4gaW4gdGhlCi0jIHdpbGQuICBXZSBkZWZpbmUgSEFTSF9NQVBfSCB0byB0
aGUgbG9jYXRpb24gb2YgdGhlIGhlYWRlciBmaWxlLCBhbmQKLSMgSEFTSF9OQU1FU1BBQ0UgdG8g
dGhlIG5hbWVzcGFjZSB0aGUgY2xhc3MgKHVub3JkZXJlZF9tYXAgb3IKLSMgaGFzaF9tYXApIGlz
IGluLgotCi0jIFRoaXMgYWxzbyBjaGVja3MgaWYgdW5vcmRlcmVkIG1hcCBleGlzdHMuCi1BQ19E
RUZVTihbQUNfQ1hYX1NUTF9IQVNIXSwKLSAgWwotICAgQUNfTVNHX0NIRUNLSU5HKHRoZSBsb2Nh
dGlvbiBvZiBoYXNoX21hcCkKLSAgIEFDX0xBTkdfU0FWRQotICAgQUNfTEFOR19DUExVU1BMVVMK
LSAgIGFjX2N2X2N4eF9oYXNoX21hcD0iIgotICAgIyBGaXJzdCB0cnkgdW5vcmRlcmVkX21hcCwg
YnV0IG5vdCBvbiBnY2MncyBiZWZvcmUgNC4yIC0tIEkndmUKLSAgICMgc2VlbiB1bmV4cGxhaW5h
YmxlIHVub3JkZXJlZF9tYXAgYnVncyB3aXRoIC1PMiBvbiBvbGRlciBnY2Mncy4KLSAgIEFDX1RS
WV9DT01QSUxFKFsjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fIDwgNCB8fCAoX19H
TlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8IDIpKQotICAgICAgICAgICAgICAgICAgICMg
ZXJyb3IgR0NDIHRvbyBvbGQgZm9yIHVub3JkZXJlZF9tYXAKLSAgICAgICAgICAgICAgICAgICAj
ZW5kaWYKLSAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgIFsvKiBubyBw
cm9ncmFtIGJvZHkgbmVjZXNzYXJ5ICovXSwKLSAgICAgICAgICAgICAgICAgICBbc3RsX2hhc2hf
b2xkX2djYz1ub10sCi0gICAgICAgICAgICAgICAgICAgW3N0bF9oYXNoX29sZF9nY2M9eWVzXSkK
LSAgIGZvciBsb2NhdGlvbiBpbiB1bm9yZGVyZWRfbWFwIHRyMS91bm9yZGVyZWRfbWFwOyBkbwot
ICAgICBmb3IgbmFtZXNwYWNlIGluIHN0ZCBzdGQ6OnRyMTsgZG8KLSAgICAgICBpZiB0ZXN0IC16
ICIkYWNfY3ZfY3h4X2hhc2hfbWFwIiAtYSAiJHN0bF9oYXNoX29sZF9nY2MiICE9IHllczsgdGhl
bgotICAgICAgICAgIyBTb21lIG9sZGVyIGdjYydzIGhhdmUgYSBidWdneSB0cjEsIHNvIHRlc3Qg
YSBiaXQgb2YgY29kZS4KLSAgICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8JGxvY2F0
aW9uPl0sCi0gICAgICAgICAgICAgICAgICAgICAgICBbY29uc3QgJHtuYW1lc3BhY2V9Ojp1bm9y
ZGVyZWRfbWFwPGludCwgaW50PiB0OwotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
LmZpbmQoNSkgPT0gdC5lbmQoKTtdLAotICAgICAgICAgICAgICAgICAgICAgICAgW2FjX2N2X2N4
eF9oYXNoX21hcD0iPCRsb2NhdGlvbj4iOwotICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2
X2N4eF9oYXNoX25hbWVzcGFjZT0iJG5hbWVzcGFjZSI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgYWNfY3ZfY3h4X2hhc2hfbWFwX2NsYXNzPSJ1bm9yZGVyZWRfbWFwIjtdKQotICAgICAgIGZp
Ci0gICAgIGRvbmUKLSAgIGRvbmUKLSAgICMgTm93IHRyeSBoYXNoX21hcAotICAgZm9yIGxvY2F0
aW9uIGluIGV4dC9oYXNoX21hcCBoYXNoX21hcDsgZG8KLSAgICAgZm9yIG5hbWVzcGFjZSBpbiBf
X2dudV9jeHggIiIgc3RkIHN0ZGV4dDsgZG8KLSAgICAgICBpZiB0ZXN0IC16ICIkYWNfY3ZfY3h4
X2hhc2hfbWFwIjsgdGhlbgotICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDwkbG9j
YXRpb24+XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFske25hbWVzcGFjZX06Omhhc2hfbWFw
PGludCwgaW50PiB0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFthY19jdl9jeHhfaGFzaF9t
YXA9IjwkbG9jYXRpb24+IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9jeHhfaGFz
aF9uYW1lc3BhY2U9IiRuYW1lc3BhY2UiOwotICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2
X2N4eF9oYXNoX21hcF9jbGFzcz0iaGFzaF9tYXAiO10pCi0gICAgICAgZmkKLSAgICAgZG9uZQot
ICAgZG9uZQotICAgYWNfY3ZfY3h4X2hhc2hfc2V0PWBlY2hvICIkYWNfY3ZfY3h4X2hhc2hfbWFw
IiB8IHNlZCBzL21hcC9zZXQvYDsKLSAgIGFjX2N2X2N4eF9oYXNoX3NldF9jbGFzcz1gZWNobyAi
JGFjX2N2X2N4eF9oYXNoX21hcF9jbGFzcyIgfCBzZWQgcy9tYXAvc2V0L2A7Ci0gICBpZiB0ZXN0
IC1uICIkYWNfY3ZfY3h4X2hhc2hfbWFwIjsgdGhlbgotICAgICAgQUNfREVGSU5FKEhBVkVfSEFT
SF9NQVAsIDEsIFtkZWZpbmUgaWYgdGhlIGNvbXBpbGVyIGhhcyBoYXNoX21hcF0pCi0gICAgICBB
Q19ERUZJTkUoSEFWRV9IQVNIX1NFVCwgMSwgW2RlZmluZSBpZiB0aGUgY29tcGlsZXIgaGFzIGhh
c2hfc2V0XSkKLSAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVNIX01BUF9ILCRhY19jdl9jeHhf
aGFzaF9tYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgW3RoZSBsb2NhdGlvbiBvZiA8dW5v
cmRlcmVkX21hcD4gb3IgPGhhc2hfbWFwPl0pCi0gICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFT
SF9TRVRfSCwkYWNfY3ZfY3h4X2hhc2hfc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgIFt0
aGUgbG9jYXRpb24gb2YgPHVub3JkZXJlZF9zZXQ+IG9yIDxoYXNoX3NldD5dKQotICAgICAgQUNf
REVGSU5FX1VOUVVPVEVEKEhBU0hfTkFNRVNQQUNFLCRhY19jdl9jeHhfaGFzaF9uYW1lc3BhY2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgW3RoZSBuYW1lc3BhY2Ugb2YgaGFzaF9tYXAvaGFz
aF9zZXRdKQotICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBU0hfTUFQX0NMQVNTLCRhY19jdl9j
eHhfaGFzaF9tYXBfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgW3RoZSBuYW1lIG9m
IDxoYXNoX21hcD5dKQotICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBU0hfU0VUX0NMQVNTLCRh
Y19jdl9jeHhfaGFzaF9zZXRfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgW3RoZSBu
YW1lIG9mIDxoYXNoX3NldD5dKQotICAgICAgQUNfTVNHX1JFU1VMVChbJGFjX2N2X2N4eF9oYXNo
X21hcF0pCi0gICBlbHNlCi0gICAgICBBQ19NU0dfUkVTVUxUKCkKLSAgICAgIEFDX01TR19XQVJO
KFtjb3VsZCBub3QgZmluZCBhbiBTVEwgaGFzaF9tYXBdKQotICAgZmkKLV0pCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvb2JqZWN0aXZlYy9EZXZUb29scy9jaGVja192ZXJzaW9uX3N0YW1wcy5zaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZl
Yy9EZXZUb29scy9jaGVja192ZXJzaW9uX3N0YW1wcy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMzI1YjcxZGQ5YTI5NmNiZDdhYzkxZTVjNjZjZjUxZjQ3OGZkZmYxOS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvRGV2VG9v
bHMvY2hlY2tfdmVyc2lvbl9zdGFtcHMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBA
Ci0jIS9iaW4vYmFzaAotCi0jIFRoaXMgc2NyaXB0IGNoZWNrcyB0aGF0IHRoZSBydW50aW1lIHZl
cnNpb24gbnVtYmVyIGNvbnN0YW50IGluIHRoZSBjb21waWxlcgotIyBzb3VyY2UgYW5kIGluIHRo
ZSBydW50aW1lIHNvdXJjZSBpcyB0aGUgc2FtZS4KLSMKLSMgQSBkaXN0cm8gY2FuIGJlIG1hZGUg
b2YgdGhlIHByb3RvYnVmIHNvdXJjZXMgd2l0aCBvbmx5IGEgc3Vic2V0IG9mIHRoZQotIyBsYW5n
dWFnZXMsIHNvIGlmIHRoZSBjb21waWxlciBkZXBlbmRlZCBvbiB0aGUgT2JqZWN0aXZlIEMgcnVu
dGltZSwgdGhvc2UKLSMgYnVpbGRzIHdvdWxkIGJyZWFrLiBBdCB0aGUgc2FtZSB0aW1lLCB3ZSBk
b24ndCB3YW50IHRoZSBydW50aW1lIHNvdXJjZQotIyBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVy
IHNvdXJjZXM7IHNvIHR3byBjb3BpZXMgb2YgdGhlIGNvbnN0YW50IGFyZSBuZWVkZWQuCi0KLXNl
dCAtZXUKLQotcmVhZG9ubHkgU2NyaXB0RGlyPSQoZGlybmFtZSAiJChlY2hvICQwIHwgc2VkIC1l
ICJzLF5cKFteL11cKSwkKHB3ZCkvXDEsIikiKQotcmVhZG9ubHkgUHJvdG9Sb290RGlyPSIke1Nj
cmlwdERpcn0vLi4vLi4iCi0KLWRpZSgpIHsKLSAgICBlY2hvICJFcnJvcjogJDEiCi0gICAgZXhp
dCAxCi19Ci0KLXJlYWRvbmx5IENvbnN0YW50TmFtZT1HT09HTEVfUFJPVE9CVUZfT0JKQ19HRU5f
VkVSU0lPTgotCi0jIENvbGxlY3QgdmVyc2lvbiBmcm9tIHBsdWdpbiBzb3VyY2VzLgotCi1yZWFk
b25seSBQbHVnaW5TcmM9IiR7UHJvdG9Sb290RGlyfS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWxlLmNjIgotcmVhZG9ubHkgUGx1Z2luVmVyc2lv
bj0kKCBcCi0gICAgY2F0ICIke1BsdWdpblNyY30iIFwKLSAgICAgICAgfCBzZWQgLW4gLWUgInM6
Y29uc3QgaW50MzIgJHtDb25zdGFudE5hbWV9ID0gXChbMC05XSpcKTs6XDE6cCIKLSkKLQotaWYg
W1sgLXogIiR7UGx1Z2luVmVyc2lvbn0iIF1dIDsgdGhlbgotICAgIGRpZSAiRmFpbGVkIHRvIGZp
bmQgJHtDb25zdGFudE5hbWV9IGluIHRoZSBwbHVnaW4gc291cmNlICgke1BsdWdpblNyY30pLiIK
LWZpCi0KLSMgQ29sbGVjdCB2ZXJzaW9uIGZyb20gcnVudGltZSBzb3VyY2VzLgotCi1yZWFkb25s
eSBSdW50aW1lU3JjPSIke1Byb3RvUm9vdERpcn0vb2JqZWN0aXZlYy9HUEJCb290c3RyYXAuaCIK
LXJlYWRvbmx5IFJ1bnRpbWVWZXJzaW9uPSQoIFwKLSAgICBjYXQgIiR7UnVudGltZVNyY30iIFwK
LSAgICAgICAgfCBzZWQgLW4gLWUgInM6I2RlZmluZSAke0NvbnN0YW50TmFtZX0gXChbMC05XSpc
KTpcMTpwIgotKQotCi1pZiBbWyAteiAiJHtSdW50aW1lVmVyc2lvbn0iIF1dIDsgdGhlbgotICAg
IGRpZSAiRmFpbGVkIHRvIGZpbmQgJHtDb25zdGFudE5hbWV9IGluIHRoZSBydW50aW1lIHNvdXJj
ZSAoJHtSdW50aW1lU3JjfSkuIgotZmkKLQotIyBDb21wYXJlIHRoZW0uCi0KLWlmIFtbICIke1Bs
dWdpblZlcnNpb259IiAhPSAiJHtSdW50aW1lVmVyc2lvbn0iIF1dIDsgdGhlbgotICAgIGRpZSAi
VmVyc2lvbnMgZG9uJ3QgbWF0Y2ghCi0gICBQbHVnaW46ICR7UGx1Z2luVmVyc2lvbn0gZnJvbSAk
e1BsdWdpblNyY30KLSAgUnVudGltZTogJHtSdW50aW1lVmVyc2lvbn0gZnJvbSAke1J1bnRpbWVT
cmN9Ci0iCi1maQotCi0jIFN1Y2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9EZXZUb29scy9j
b21waWxlX3Rlc3RpbmdfcHJvdG9zLnNoIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0RldlRvb2xzL2NvbXBpbGVfdGVz
dGluZ19wcm90b3Muc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDgyOTUzMTMwYzk2
N2VlNmEwM2JhMTMzZmY1NmY0NmMyNGVmYmFkMmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0RldlRvb2xzL2NvbXBpbGVfdGVzdGluZ19w
cm90b3Muc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotIyEvYmluL2Jhc2gKLQot
IyBJbnZva2VkIGJ5IHRoZSBYY29kZSBwcm9qZWN0cyB0byBidWlsZCB0aGUgcHJvdG9zIG5lZWRl
ZCBmb3IgdGhlIHVuaXR0ZXN0cy4KLQotc2V0IC1ldQotCi1yZWFkb25seSBPVVRQVVRfRElSPSIk
e1BST0pFQ1RfREVSSVZFRF9GSUxFX0RJUn0vcHJvdG9zIgotCi0jIEhlbHBlciBmb3IgYmFpbGlu
Zy4KLWRpZSgpIHsKLSAgZWNobyAiRXJyb3I6ICQxIgotICBleGl0IDIKLX0KLQotIyBXaGF0IHRv
IGRvLgotY2FzZSAiJHtBQ1RJT059IiBpbgotICAiIikKLSAgICAjIEJ1aWxkLCBmYWxsIHRocnUK
LSAgICA7OwotICAiY2xlYW4iKQotICAgIHJtIC1yZiAiJHtPVVRQVVRfRElSfSIKLSAgICBleGl0
IDAKLSAgICA7OwotICAqKQotICAgIGRpZSAiVW5rbm93biBhY3Rpb24gcmVxdWVzdGVkOiAke0FD
VElPTn0iCi0gICAgOzsKLWVzYWMKLQotIyBNb3ZlIHRvIHRoZSB0b3Agb2YgdGhlIHByb3RvYnVm
IGRpcmVjdG9yaWVzLgotY2QgIiR7U1JDUk9PVH0vLi4iCi0KLVtbIC14IHNyYy9wcm90b2MgXV0g
fHwgXAotICBkaWUgIkNvdWxkIG5vdCBmaW5kIHRoZSBwcm90b2MgYmluYXJ5OyBtYWtlIHN1cmUg
eW91IGhhdmUgYnVpbHQgaXQgKG9iamVjdGl2ZWMvRGV2VG9vbHMvZnVsbF9tYWNfYnVpbGQuc2gg
LWgpLiIKLQotUlVOX1BST1RPQz1ubwotaWYgW1sgISAtZCAiJHtPVVRQVVRfRElSfSIgXV0gOyB0
aGVuCi0gIFJVTl9QUk9UT0M9eWVzCi1lbHNlCi0gICMgRmluZCB0aGUgbmV3ZXN0IGlucHV0IGZp
bGUgKHByb3RvcywgY29tcGlsZXIsIGFuZCB0aGlzIHNjcmlwdCkuCi0gICMgKHRoZXNlIHBhdHRl
cm5zIGNhdGNoIHNvbWUgZXh0cmEgc3R1ZmYsIGJ1dCBiZXR0ZXIgdG8gb3ZlciBzYW1wbGUgdGhh
bgotICAjIHVuZGVyKQotICByZWFkb25seSBOZXdlc3RJbnB1dD0kKGZpbmQgXAotICAgICBzcmMv
Z29vZ2xlL3Byb3RvYnVmLyoucHJvdG8gXAotICAgICBvYmplY3RpdmVjL1Rlc3RzLyoucHJvdG8g
XAotICAgICBzcmMvLmxpYnMgc3JjLyoubGEgc3JjL3Byb3RvYyBcCi0gICAgIG9iamVjdGl2ZWMv
RGV2VG9vbHMvY29tcGlsZV90ZXN0aW5nX3Byb3Rvcy5zaCBcCi0gICAgICAgIC10eXBlIGYgLXBy
aW50MCBcCi0gICAgICAgIHwgeGFyZ3MgLTAgc3RhdCAtZiAiJW0gJU4iIFwKLSAgICAgICAgfCBz
b3J0IC1uIHwgdGFpbCAtbjEgfCBjdXQgLWYyLSAtZCIgIikKLSAgIyBGaW5kIHRoZSBvbGRlc3Qg
b3V0cHV0IGZpbGUuCi0gIHJlYWRvbmx5IE9sZGVzdE91dHB1dD0kKGZpbmQgXAotICAgICAgICAi
JHtPVVRQVVRfRElSfSIgXAotICAgICAgICAtdHlwZSBmIC1wcmludDAgXAotICAgICAgICB8IHhh
cmdzIC0wIHN0YXQgLWYgIiVtICVOIiBcCi0gICAgICAgIHwgc29ydCAtbiAtciB8IHRhaWwgLW4x
IHwgY3V0IC1mMi0gLWQiICIpCi0gICMgSWYgdGhlIG5ld2VzdCBpbnB1dCBpcyBuZXdlciB0aGFu
IHRoZSBvbGRlc3Qgb3V0cHV0LCByZWdlbmVyYXRlLgotICBpZiBbWyAiJHtOZXdlc3RJbnB1dH0i
IC1udCAiJHtPbGRlc3RPdXRwdXR9IiBdXSA7IHRoZW4KLSAgICBSVU5fUFJPVE9DPXllcwotICBm
aQotZmkKLQotaWYgW1sgIiR7UlVOX1BST1RPQ30iICE9ICJ5ZXMiIF1dIDsgdGhlbgotICAjIFVw
IHRvIGRhdGUuCi0gIGV4aXQgMAotZmkKLQotIyBFbnN1cmUgdGhlIG91dHB1dCBkaXIgZXhpc3Rz
Ci1ta2RpciAtcCAiJHtPVVRQVVRfRElSfS9nb29nbGUvcHJvdG9idWYiCi0KLUNPUkVfUFJPVE9f
RklMRVM9KAotICBzcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2FyZW5hLnByb3RvCi0gIHNy
Yy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJvdG8KLSAgc3JjL2dv
b2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbm9ybW91c19kZXNjcmlwdG9yLnByb3RvCi0gIHNyYy9n
b29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZW1iZWRfb3B0aW1pemVfZm9yLnByb3RvCi0gIHNyYy9n
b29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZW1wdHkucHJvdG8KLSAgc3JjL2dvb2dsZS9wcm90b2J1
Zi91bml0dGVzdF9pbXBvcnQucHJvdG8KLSAgc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9p
bXBvcnRfbGl0ZS5wcm90bwotICBzcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2xpdGUucHJv
dG8KLSAgc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0LnByb3RvCi0gIHNyYy9nb29n
bGUvcHJvdG9idWYvdW5pdHRlc3RfbXNldF93aXJlX2Zvcm1hdC5wcm90bwotICBzcmMvZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0X25vX2FyZW5hLnByb3RvCi0gIHNyYy9nb29nbGUvcHJvdG9idWYv
dW5pdHRlc3Rfbm9fYXJlbmFfaW1wb3J0LnByb3RvCi0gIHNyYy9nb29nbGUvcHJvdG9idWYvdW5p
dHRlc3Rfbm9fZ2VuZXJpY19zZXJ2aWNlcy5wcm90bwotICBzcmMvZ29vZ2xlL3Byb3RvYnVmL3Vu
aXR0ZXN0X29wdGltaXplX2Zvci5wcm90bwotICBzcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0
LnByb3RvCi0gIHNyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpYy5wcm90
bwotICBzcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydF9wdWJsaWNfbGl0ZS5wcm90
bwotICBzcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2Ryb3BfdW5rbm93bl9maWVsZHMucHJv
dG8KLSAgc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcmVzZXJ2ZV91bmtub3duX2VudW0u
cHJvdG8KLSAgc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfbGl0ZV91bml0dGVzdC5wcm90bwotICBz
cmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9wcm90bzJfdW5pdHRlc3QucHJvdG8KLSAgc3JjL2dvb2ds
ZS9wcm90b2J1Zi9tYXBfdW5pdHRlc3QucHJvdG8KLSkKLQotIyBUaGUgdW5pdHRlc3RfY3VzdG9t
X29wdGlvbnMucHJvdG8gZXh0ZW5kcyB0aGUgbWVzc2FnZXMgaW4gZGVzY3JpcHRvci5wcm90bwot
IyBzbyB3ZSBidWlsZCBpdCBpbiB0byB0ZXN0IGV4dGVuZGluZyBpbiBnZW5lcmFsLiBUaGUgbGli
cmFyeSBkb2Vzbid0IHByb3ZpZGUKLSMgYSBkZXNjcmlwdG9yIGFzIGl0IGRvZXNuJ3QgdXNlIHRo
ZSBjbGFzc2VzL2VudW1zLgotQ09SRV9QUk9UT19GSUxFUys9KAotICBzcmMvZ29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IucHJvdG8KLSkKLQotY29tcGlsZV9wcm90bygpIHsKLSAgc3JjL3Byb3Rv
YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIC0tb2JqY19vdXQ9IiR7
T1VUUFVUX0RJUn0vZ29vZ2xlL3Byb3RvYnVmIiBcCi0gICAgLS1wcm90b19wYXRoPXNyYy9nb29n
bGUvcHJvdG9idWYvICAgICAgICAgIFwKLSAgICAtLXByb3RvX3BhdGg9c3JjICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICQqCi19Ci0KLWZvciBhX3Byb3RvIGluICIke0NPUkVfUFJP
VE9fRklMRVNbQF19IiA7IGRvCi0gIGNvbXBpbGVfcHJvdG8gIiR7YV9wcm90b30iCi1kb25lCi0K
LU9CSkNfUFJPVE9fRklMRVM9KAotICBvYmplY3RpdmVjL1Rlc3RzL3VuaXR0ZXN0X2N5Y2xlLnBy
b3RvCi0gIG9iamVjdGl2ZWMvVGVzdHMvdW5pdHRlc3RfcnVudGltZV9wcm90bzIucHJvdG8KLSAg
b2JqZWN0aXZlYy9UZXN0cy91bml0dGVzdF9ydW50aW1lX3Byb3RvMy5wcm90bwotICBvYmplY3Rp
dmVjL1Rlc3RzL3VuaXR0ZXN0X29iamMucHJvdG8KLSAgb2JqZWN0aXZlYy9UZXN0cy91bml0dGVz
dF9vYmpjX3N0YXJ0dXAucHJvdG8KLSkKLQotZm9yIGFfcHJvdG8gaW4gIiR7T0JKQ19QUk9UT19G
SUxFU1tAXX0iIDsgZG8KLSAgY29tcGlsZV9wcm90byAtLXByb3RvX3BhdGg9Im9iamVjdGl2ZWMv
VGVzdHMiICIke2FfcHJvdG99IgotZG9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0RldlRvb2xz
L2Z1bGxfbWFjX2J1aWxkLnNoIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0RldlRvb2xzL2Z1bGxfbWFjX2J1aWxkLnNo
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmZjUxZDlmMDE2OTlhMWQ3MTY1MDAyMTJm
MTlhOTE2YTkzZGZlZmU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvb2JqZWN0aXZlYy9EZXZUb29scy9mdWxsX21hY19idWlsZC5zaAorKysgL2Rldi9udWxs
CkBAIC0xLDI3MSArMCwwIEBACi0jIS9iaW4vYmFzaAotIwotIyBIZWxwZXIgdG8gZG8gYnVpbGQg
c28geW91IGRvbid0IGhhdmUgdG8gcmVtZW1iZXIgYWxsIHRoZSBzdGVwcy9hcmdzLgotCi0KLXNl
dCAtZXUKLQotIyBTb21lIGJhc2UgbG9jYXRpb25zLgotcmVhZG9ubHkgU2NyaXB0RGlyPSQoZGly
bmFtZSAiJChlY2hvICQwIHwgc2VkIC1lICJzLF5cKFteL11cKSwkKHB3ZCkvXDEsIikiKQotcmVh
ZG9ubHkgUHJvdG9Sb290RGlyPSIke1NjcmlwdERpcn0vLi4vLi4iCi0KLXByaW50VXNhZ2UoKSB7
Ci0gIE5BTUU9JChiYXNlbmFtZSAiJHswfSIpCi0gIGNhdCA8PCBFT0YKLXVzYWdlOiAke05BTUV9
IFtPUFRJT05TXQotCi1UaGlzIHNjcmlwdCBkb2VzIHRoZSBjb21tb24gYnVpbGQgc3RlcHMgbmVl
ZGVkLgotCi1PUFRJT05TOgotCi0gR2VuZXJhbDoKLQotICAgLWgsIC0taGVscAotICAgICAgICAg
U2hvdyB0aGlzIG1lc3NhZ2UKLSAgIC1jLCAtLWNsZWFuCi0gICAgICAgICBJc3N1ZSBhIGNsZWFu
IGJlZm9yZSB0aGUgbm9ybWFsIGJ1aWxkLgotICAgLWEsIC0tYXV0b2dlbgotICAgICAgICAgU3Rh
cnQgYnkgcmVydW5uaW5nIGF1dG9nZW4gJiBjb25maWd1cmUuCi0gICAtciwgLS1yZWdlbmVyYXRl
LWRlc2NyaXB0b3JzCi0gICAgICAgICBSdW4gZ2VuZXJhdGVfZGVzY3JpcHRvcl9wcm90by5zaCB0
byByZWdlbmVyYXRlIGFsbCB0aGUgY2hlY2tlZCBpbgotICAgICAgICAgcHJvdG8gc291cmNlcy4K
LSAgIC1qICMsIC0tam9icyAjCi0gICAgICAgICBGb3JjZSB0aGUgbnVtYmVyIG9mIHBhcmFsbGVs
IGpvYnMgKHVzZWZ1bCBmb3IgZGVidWdnaW5nIGJ1aWxkIGlzc3VlcykuCi0gICAtLWNvcmUtb25s
eQotICAgICAgICAgU2tpcCBzb21lIG9mIHRoZSBjb3JlIHByb3RvYnVmIGJ1aWxkL2NoZWNrcyB0
byBzaG9ydGVuIHRoZSBidWlsZCB0aW1lLgotICAgLS1za2lwLXhjb2RlCi0gICAgICAgICBTa2lw
IHRoZSBpbnZva2Ugb2YgWGNvZGUgdG8gdGVzdCB0aGUgcnVudGltZSBvbiBib3RoIGlPUyBhbmQg
T1MgWC4KLSAgIC0tc2tpcC14Y29kZS1pb3MKLSAgICAgICAgIFNraXAgdGhlIGludm9rZSBvZiBY
Y29kZSB0byB0ZXN0IHRoZSBydW50aW1lIG9uIGlPUy4KLSAgIC0tc2tpcC14Y29kZS1vc3gKLSAg
ICAgICAgIFNraXAgdGhlIGludm9rZSBvZiBYY29kZSB0byB0ZXN0IHRoZSBydW50aW1lIG9uIE9T
IFguCi0gICAtLXNraXAtb2JqYy1jb25mb3JtYW5jZQotICAgICAgICAgU2tpcCB0aGUgT2JqZWN0
aXZlIEMgY29uZm9ybWFuY2UgdGVzdHMgKHJ1biBvbiBPUyBYKS4KLQotRU9GCi19Ci0KLWhlYWRl
cigpIHsKLSAgZWNobyAiIgotICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0gIGVjaG8gIiAgICAk
e0B9IgotICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi19Ci0KLSMgVGhhbmtzIHRvIGxpYnRvb2ws
IGJ1aWxkcyBjYW4gZmFpbCBpbiBvZGQgd2F5cyBhbmQgc2luY2UgaXQgZWF0cyBzb21lIG91dHB1
dAotIyBpdCBjYW4gYmUgaGFyZCB0byBzcG90LCBzbyBmb3JjZSBlcnJvciBvdXRwdXQgaWYgbWFr
ZSBleGl0cyB3aXRoIGEgbm9uIHplcm8uCi13cmFwcGVkX21ha2UoKSB7Ci0gIHNldCArZSAgIyBE
b24ndCBzdG9wIGlmIHRoZSBjb21tYW5kIGZhaWxzLgotICBtYWtlICQqCi0gIE1BS0VfRVhJVF9T
VEFUVVM9JD8KLSAgaWYgWyAke01BS0VfRVhJVF9TVEFUVVN9IC1uZSAwIF07IHRoZW4KLSAgICBl
Y2hvICJFcnJvcjogJ21ha2UgJConIGV4aXRlZCB3aXRoIHN0YXR1cyAke01BS0VfRVhJVF9TVEFU
VVN9IgotICAgIGV4aXQgJHtNQUtFX0VYSVRfU1RBVFVTfQotICBmaQotICBzZXQgLWUKLX0KLQot
TlVNX01BS0VfSk9CUz0kKC91c3Ivc2Jpbi9zeXNjdGwgLW4gaHcubmNwdSkKLWlmIFtbICIke05V
TV9NQUtFX0pPQlN9IiAtbHQgNCBdXSA7IHRoZW4KLSAgTlVNX01BS0VfSk9CUz00Ci1maQotCi1E
T19BVVRPR0VOPW5vCi1ET19DTEVBTj1ubwotUkVHRU5fREVTQ1JJUFRPUlM9bm8KLUNPUkVfT05M
WT1ubwotRE9fWENPREVfSU9TX1RFU1RTPXllcwotRE9fWENPREVfT1NYX1RFU1RTPXllcwotRE9f
T0JKQ19DT05GT1JNQU5DRV9URVNUUz15ZXMKLXdoaWxlIFtbICQjICE9IDAgXV07IGRvCi0gIGNh
c2UgIiR7MX0iIGluCi0gICAgLWggfCAtLWhlbHAgKQotICAgICAgcHJpbnRVc2FnZQotICAgICAg
ZXhpdCAwCi0gICAgICA7OwotICAgIC1jIHwgLS1jbGVhbiApCi0gICAgICBET19DTEVBTj15ZXMK
LSAgICAgIDs7Ci0gICAgLWEgfCAtLWF1dG9nZW4gKQotICAgICAgRE9fQVVUT0dFTj15ZXMKLSAg
ICAgIDs7Ci0gICAgLXIgfCAtLXJlZ2VuZXJhdGUtZGVzY3JpcHRvcnMgKQotICAgICAgUkVHRU5f
REVTQ1JJUFRPUlM9eWVzCi0gICAgICA7OwotICAgIC1qIHwgLS1qb2JzICkKLSAgICAgIHNoaWZ0
Ci0gICAgICBOVU1fTUFLRV9KT0JTPSIkezF9IgotICAgICAgOzsKLSAgICAtLWNvcmUtb25seSAp
Ci0gICAgICBDT1JFX09OTFk9eWVzCi0gICAgICA7OwotICAgIC0tc2tpcC14Y29kZSApCi0gICAg
ICBET19YQ09ERV9JT1NfVEVTVFM9bm8KLSAgICAgIERPX1hDT0RFX09TWF9URVNUUz1ubwotICAg
ICAgOzsKLSAgICAtLXNraXAteGNvZGUtaW9zICkKLSAgICAgIERPX1hDT0RFX0lPU19URVNUUz1u
bwotICAgICAgOzsKLSAgICAtLXNraXAteGNvZGUtb3N4ICkKLSAgICAgIERPX1hDT0RFX09TWF9U
RVNUUz1ubwotICAgICAgOzsKLSAgICAtLXNraXAtb2JqYy1jb25mb3JtYW5jZSApCi0gICAgICBE
T19PQkpDX0NPTkZPUk1BTkNFX1RFU1RTPW5vCi0gICAgICA7OwotICAgIC0qKQotICAgICAgZWNo
byAiRVJST1I6IFVua25vd24gb3B0aW9uOiAkezF9IiAxPiYyCi0gICAgICBwcmludFVzYWdlCi0g
ICAgICBleGl0IDEKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGVjaG8gIkVSUk9SOiBVbmtub3du
IGFyZ3VtZW50OiAkezF9IiAxPiYyCi0gICAgICBwcmludFVzYWdlCi0gICAgICBleGl0IDEKLSAg
ICAgIDs7Ci0gIGVzYWMKLSAgc2hpZnQKLWRvbmUKLQotIyBJbnRvIHRoZSBwcm90byBkaXIuCi1j
ZCAiJHtQcm90b1Jvb3REaXJ9IgotCi0jIGlmIG5vIE1ha2VmaWxlLCBmb3JjZSB0aGUgYXV0b2dl
bi4KLWlmIFtbICEgLWYgTWFrZWZpbGUgXV0gOyB0aGVuCi0gIERPX0FVVE9HRU49eWVzCi1maQot
Ci1pZiBbWyAiJHtET19BVVRPR0VOfSIgPT0gInllcyIgXV0gOyB0aGVuCi0gIGhlYWRlciAiUnVu
bmluZyBhdXRvZ2VuICYgY29uZmlndXJlIgotICAuL2F1dG9nZW4uc2gKLSAgLi9jb25maWd1cmUg
XAotICAgIENQUEZMQUdTPSItbW1hY29zeC12ZXJzaW9uLW1pbj0xMC45IC1XdW51c2VkLWNvbnN0
LXZhcmlhYmxlIC1XdW51c2VkLWZ1bmN0aW9uIiBcCi0gICAgQ1hYRkxBR1M9Ii1Xbm9uLXZpcnR1
YWwtZHRvciAtV292ZXJsb2FkZWQtdmlydHVhbCIKLWZpCi0KLWlmIFtbICIke0RPX0NMRUFOfSIg
PT0gInllcyIgXV0gOyB0aGVuCi0gIGhlYWRlciAiQ2xlYW5pbmciCi0gIHdyYXBwZWRfbWFrZSBj
bGVhbgotICBpZiBbWyAiJHtET19YQ09ERV9JT1NfVEVTVFN9IiA9PSAieWVzIiBdXSA7IHRoZW4K
LSAgICBYQ09ERUJVSUxEX0NMRUFOX0JBU0VfSU9TPSgKLSAgICAgIHhjb2RlYnVpbGQKLSAgICAg
ICAgLXByb2plY3Qgb2JqZWN0aXZlYy9Qcm90b2NvbEJ1ZmZlcnNfaU9TLnhjb2RlcHJvagotICAg
ICAgICAtc2NoZW1lIFByb3RvY29sQnVmZmVycwotICAgICkKLSAgIiR7WENPREVCVUlMRF9DTEVB
Tl9CQVNFX0lPU1tAXX0iIC1jb25maWd1cmF0aW9uIERlYnVnIGNsZWFuCi0gICIke1hDT0RFQlVJ
TERfQ0xFQU5fQkFTRV9JT1NbQF19IiAtY29uZmlndXJhdGlvbiBSZWxlYXNlIGNsZWFuCi0gIGZp
Ci0gIGlmIFtbICIke0RPX1hDT0RFX09TWF9URVNUU30iID09ICJ5ZXMiIF1dIDsgdGhlbgotICAg
IFhDT0RFQlVJTERfQ0xFQU5fQkFTRV9PU1g9KAotICAgICAgeGNvZGVidWlsZAotICAgICAgICAt
cHJvamVjdCBvYmplY3RpdmVjL1Byb3RvY29sQnVmZmVyc19PU1gueGNvZGVwcm9qCi0gICAgICAg
IC1zY2hlbWUgUHJvdG9jb2xCdWZmZXJzCi0gICAgKQotICAiJHtYQ09ERUJVSUxEX0NMRUFOX0JB
U0VfT1NYW0BdfSIgLWNvbmZpZ3VyYXRpb24gRGVidWcgY2xlYW4KLSAgIiR7WENPREVCVUlMRF9D
TEVBTl9CQVNFX09TWFtAXX0iIC1jb25maWd1cmF0aW9uIFJlbGVhc2UgY2xlYW4KLSAgZmkKLWZp
Ci0KLWlmIFtbICIke1JFR0VOX0RFU0NSSVBUT1JTfSIgPT0gInllcyIgXV0gOyB0aGVuCi0gIGhl
YWRlciAiUmVnZW5lcmF0aW5nIHRoZSBkZXNjcmlwdG9yIHNvdXJjZXMuIgotICAuL2dlbmVyYXRl
X2Rlc2NyaXB0b3JfcHJvdG8uc2ggLWogIiR7TlVNX01BS0VfSk9CU30iCi1maQotCi1pZiBbWyAi
JHtDT1JFX09OTFl9IiA9PSAieWVzIiBdXSA7IHRoZW4KLSAgaGVhZGVyICJCdWlsZGluZyBjb3Jl
IE9ubHkiCi0gIHdyYXBwZWRfbWFrZSAtaiAiJHtOVU1fTUFLRV9KT0JTfSIKLWVsc2UKLSAgaGVh
ZGVyICJCdWlsZGluZyIKLSAgIyBDYW4ndCBpc3N1ZSB0aGVzZSB0b2dldGhlciwgd2hlbiBmdWxs
eSBwYXJhbGxlbCwgc29tZXRoaW5nIHNvbWV0aW1lcyBjaG9rZXMKLSAgIyBhdCByYW5kb20uCi0g
IHdyYXBwZWRfbWFrZSAtaiAiJHtOVU1fTUFLRV9KT0JTfSIgYWxsCi0gIHdyYXBwZWRfbWFrZSAt
aiAiJHtOVU1fTUFLRV9KT0JTfSIgY2hlY2sKLSAgIyBGaXJlIG9mZiB0aGUgY29uZm9ybWFuY2Ug
dGVzdHMgYWxzby4KLSAgY2QgY29uZm9ybWFuY2UKLSAgd3JhcHBlZF9tYWtlIC1qICIke05VTV9N
QUtFX0pPQlN9IiB0ZXN0X2NwcAotICBjZCAuLgotZmkKLQotIyBFbnN1cmUgdGhlIFdLVCBzb3Vy
Y2VzIGNoZWNrZWQgaW4gYXJlIGN1cnJlbnQuCi1vYmplY3RpdmVjL2dlbmVyYXRlX3dlbGxfa25v
d25fdHlwZXMuc2ggLS1jaGVjay1vbmx5IC1qICIke05VTV9NQUtFX0pPQlN9IgotCi1oZWFkZXIg
IkNoZWNraW5nIG9uIHRoZSBPYmpDIFJ1bnRpbWUgQ29kZSIKLW9iamVjdGl2ZWMvRGV2VG9vbHMv
cGRkbV90ZXN0cy5weQotaWYgISBvYmplY3RpdmVjL0RldlRvb2xzL3BkZG0ucHkgLS1kcnktcnVu
IG9iamVjdGl2ZWMvKi5baG1dIG9iamVjdGl2ZWMvVGVzdHMvKi5baG1dIDsgdGhlbgotICBlY2hv
ICIiCi0gIGVjaG8gIlVwZGF0ZSBieSBydW5uaW5nOiIKLSAgZWNobyAiICAgb2JqZWN0aXZlYy9E
ZXZUb29scy9wZGRtLnB5IG9iamVjdGl2ZWMvKi5baG1dIG9iamVjdGl2ZWMvVGVzdHMvKi5baG1d
IgotICBleGl0IDEKLWZpCi0KLWlmIFtbICIke0RPX1hDT0RFX0lPU19URVNUU30iID09ICJ5ZXMi
IF1dIDsgdGhlbgotICBYQ09ERUJVSUxEX1RFU1RfQkFTRV9JT1M9KAotICAgIHhjb2RlYnVpbGQK
LSAgICAgIC1wcm9qZWN0IG9iamVjdGl2ZWMvUHJvdG9jb2xCdWZmZXJzX2lPUy54Y29kZXByb2oK
LSAgICAgIC1zY2hlbWUgUHJvdG9jb2xCdWZmZXJzCi0gICkKLSAgIyBEb24ndCBuZWVkIHRvIHdv
cnJ5IGFib3V0IGZvcm0gZmFjdG9ycyBvciByZXRpbmEvbm9uIHJldGluYTsKLSAgIyBqdXN0IHBp
Y2sgYSBtaXggb2YgT1MgVmVyc2lvbnMgYW5kIDMyLzY0IGJpdC4KLSAgIyBOT1RFOiBEaWZmZXJl
bnQgWGNvZGUgaGF2ZSBkaWZmZXJlbnQgc2ltdWxhdGVkIGhhcmR3YXJlL29zIHN1cHBvcnQuCi0g
IHJlYWRvbmx5IFhDT0RFX1ZFUlNJT05fTElORT0iJCh4Y29kZWJ1aWxkIC12ZXJzaW9uIHwgZ3Jl
cCBYY29kZVwgICkiCi0gIHJlYWRvbmx5IFhDT0RFX1ZFUlNJT049IiR7WENPREVfVkVSU0lPTl9M
SU5FL1hjb2RlIC99IiAgIyBkcm9wIHRoZSBwcmVmaXguCi0gIElPU19TSU1VTEFUT1JfTkFNRT0i
U2ltdWxhdG9yIgotICBjYXNlICIke1hDT0RFX1ZFUlNJT059IiBpbgotICAgIDYuKiApCi0gICAg
ICBlY2hvICJFUlJPUjogWGNvZGUgNi4zLzYuNCBubyBsb25nZXIgc3VwcG9ydGVkIGZvciBidWls
ZGluZywgcGxlYXNlIHVzZSA3LjAgb3IgaGlnaGVyLiIgMT4mMgotICAgICAgZXhpdCAxMAotICAg
ICAgOzsKLSAgICA3LjEqICkKLSAgICAgIFhDT0RFQlVJTERfVEVTVF9CQVNFX0lPUys9KAotICAg
ICAgICAgIC1kZXN0aW5hdGlvbiAicGxhdGZvcm09aU9TIFNpbXVsYXRvcixuYW1lPWlQaG9uZSA0
cyxPUz04LjEiICMgMzJiaXQKLSAgICAgICAgICAtZGVzdGluYXRpb24gInBsYXRmb3JtPWlPUyBT
aW11bGF0b3IsbmFtZT1pUGhvbmUgNixPUz05LjAiICMgNjRiaXQKLSAgICAgICAgICAtZGVzdGlu
YXRpb24gInBsYXRmb3JtPWlPUyBTaW11bGF0b3IsbmFtZT1pUGFkIDIsT1M9OC4xIiAjIDMyYml0
Ci0gICAgICAgICAgLWRlc3RpbmF0aW9uICJwbGF0Zm9ybT1pT1MgU2ltdWxhdG9yLG5hbWU9aVBh
ZCBBaXIsT1M9OS4wIiAjIDY0Yml0Ci0gICAgICApCi0gICAgICA7OwotICAgIDcuMyogKQotICAg
ICAgWENPREVCVUlMRF9URVNUX0JBU0VfSU9TKz0oCi0gICAgICAgICAgLWRlc3RpbmF0aW9uICJw
bGF0Zm9ybT1pT1MgU2ltdWxhdG9yLG5hbWU9aVBob25lIDRzLE9TPTguMSIgIyAzMmJpdAotICAg
ICAgICAgIC1kZXN0aW5hdGlvbiAicGxhdGZvcm09aU9TIFNpbXVsYXRvcixuYW1lPWlQaG9uZSA2
LE9TPTkuMyIgIyA2NGJpdAotICAgICAgICAgIC1kZXN0aW5hdGlvbiAicGxhdGZvcm09aU9TIFNp
bXVsYXRvcixuYW1lPWlQYWQgMixPUz04LjEiICMgMzJiaXQKLSAgICAgICAgICAtZGVzdGluYXRp
b24gInBsYXRmb3JtPWlPUyBTaW11bGF0b3IsbmFtZT1pUGFkIEFpcixPUz05LjMiICMgNjRiaXQK
LSAgICAgICkKLSAgICAgIDs7Ci0gICAgNy4qICkKLSAgICAgIFhDT0RFQlVJTERfVEVTVF9CQVNF
X0lPUys9KAotICAgICAgICAgIC1kZXN0aW5hdGlvbiAicGxhdGZvcm09aU9TIFNpbXVsYXRvcixu
YW1lPWlQaG9uZSA0cyxPUz04LjEiICMgMzJiaXQKLSAgICAgICAgICAtZGVzdGluYXRpb24gInBs
YXRmb3JtPWlPUyBTaW11bGF0b3IsbmFtZT1pUGhvbmUgNixPUz05LjIiICMgNjRiaXQKLSAgICAg
ICAgICAtZGVzdGluYXRpb24gInBsYXRmb3JtPWlPUyBTaW11bGF0b3IsbmFtZT1pUGFkIDIsT1M9
OC4xIiAjIDMyYml0Ci0gICAgICAgICAgLWRlc3RpbmF0aW9uICJwbGF0Zm9ybT1pT1MgU2ltdWxh
dG9yLG5hbWU9aVBhZCBBaXIsT1M9OS4yIiAjIDY0Yml0Ci0gICAgICApCi0gICAgICA7OwotICAg
ICogKQotICAgICAgZWNobyAiVGltZSB0byB1cGRhdGUgdGhlIHNpbXVsYXRvciB0YXJnZXRzIGZv
ciBYY29kZSAke1hDT0RFX1ZFUlNJT059IgotICAgICAgZXhpdCAyCi0gICAgICA7OwotICBlc2Fj
Ci0gIGhlYWRlciAiRG9pbmcgWGNvZGUgaU9TIGJ1aWxkL3Rlc3RzIC0gRGVidWciCi0gICIke1hD
T0RFQlVJTERfVEVTVF9CQVNFX0lPU1tAXX0iIC1jb25maWd1cmF0aW9uIERlYnVnIHRlc3QKLSAg
aGVhZGVyICJEb2luZyBYY29kZSBpT1MgYnVpbGQvdGVzdHMgLSBSZWxlYXNlIgotICAiJHtYQ09E
RUJVSUxEX1RFU1RfQkFTRV9JT1NbQF19IiAtY29uZmlndXJhdGlvbiBSZWxlYXNlIHRlc3QKLSAg
IyBEb24ndCBsZWF2ZSB0aGUgc2ltdWxhdG9yIGluIHRoZSBkZXZlbG9wZXIncyBmYWNlLgotICBr
aWxsYWxsICIke0lPU19TSU1VTEFUT1JfTkFNRX0iCi1maQotaWYgW1sgIiR7RE9fWENPREVfT1NY
X1RFU1RTfSIgPT0gInllcyIgXV0gOyB0aGVuCi0gIFhDT0RFQlVJTERfVEVTVF9CQVNFX09TWD0o
Ci0gICAgeGNvZGVidWlsZAotICAgICAgLXByb2plY3Qgb2JqZWN0aXZlYy9Qcm90b2NvbEJ1ZmZl
cnNfT1NYLnhjb2RlcHJvagotICAgICAgLXNjaGVtZSBQcm90b2NvbEJ1ZmZlcnMKLSAgICAgICMg
U2luY2UgdGhlIE9iakMgMi4wIFJ1bnRpbWUgaXMgcmVxdWlyZWQsIDMyYml0IE9TIFggaXNuJ3Qg
c3VwcG9ydGVkLgotICAgICAgLWRlc3RpbmF0aW9uICJwbGF0Zm9ybT1PUyBYLGFyY2g9eDg2XzY0
IiAjIDY0Yml0Ci0gICkKLSAgaGVhZGVyICJEb2luZyBYY29kZSBPUyBYIGJ1aWxkL3Rlc3RzIC0g
RGVidWciCi0gICIke1hDT0RFQlVJTERfVEVTVF9CQVNFX09TWFtAXX0iIC1jb25maWd1cmF0aW9u
IERlYnVnIHRlc3QKLSAgaGVhZGVyICJEb2luZyBYY29kZSBPUyBYIGJ1aWxkL3Rlc3RzIC0gUmVs
ZWFzZSIKLSAgIiR7WENPREVCVUlMRF9URVNUX0JBU0VfT1NYW0BdfSIgLWNvbmZpZ3VyYXRpb24g
UmVsZWFzZSB0ZXN0Ci1maQotCi1pZiBbWyAiJHtET19PQkpDX0NPTkZPUk1BTkNFX1RFU1RTfSIg
PT0gInllcyIgXV0gOyB0aGVuCi0gIGNkIGNvbmZvcm1hbmNlCi0gIHdyYXBwZWRfbWFrZSAtaiAi
JHtOVU1fTUFLRV9KT0JTfSIgdGVzdF9vYmpjCi0gIGNkIC4uCi1maQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmpl
Y3RpdmVjL0RldlRvb2xzL3BkZG0ucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvRGV2VG9vbHMvcGRkbS5weQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWExMWZlYzQ0OWVkNzllZWFlNjZkZWE2ZDVkMjUw
ZDBiYjFmMzk1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L29iamVjdGl2ZWMvRGV2VG9vbHMvcGRkbS5weQorKysgL2Rldi9udWxsCkBAIC0xLDY4NiArMCww
IEBACi0jISAvdXNyL2Jpbi9weXRob24KLSMKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0j
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiUERETSAtIFBvb3IgRGV2ZWxv
cGVycycgRGVidWctYWJsZSBNYWNyb3MKLQotQSBzaW1wbGUgbWFya3VwIHRoYXQgY2FuIGJlIGFk
ZGVkIGluIGNvbW1lbnRzIG9mIHNvdXJjZSBzbyB0aGV5IGNhbiB0aGVuIGJlCi1leHBhbmRlZCBv
dXQgaW50byBjb2RlLiBNb3N0IG9mIHRoaXMgY291bGQgYmUgZG9uZSB3aXRoIENQUCBtYWNyb3Ms
IGJ1dCB0aGVuCi1kZXZlbG9wZXJzIGNhbid0IHJlYWxseSBzdGVwIHRocm91Z2ggdGhlbSBpbiB0
aGUgZGVidWdnZXIsIHRoaXMgd2F5IHRoZXkgYXJlCi1leHBhbmRlZCB0byB0aGUgc2FtZSBjb2Rl
LCBidXQgeW91IGNhbiBkZWJ1ZyB0aGVtLgotCi1BbnkgZmlsZSBjYW4gYmUgcHJvY2Vzc2VkLCBi
dXQgdGhlIHN5bnRheCBpcyBkZXNpZ25lZCBhcm91bmQgYSBDIGJhc2VkIGNvbXBpbGVyLgotUHJv
Y2Vzc2VkIGxpbmVzIHN0YXJ0IHdpdGggIi8vJSIuICBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2Yg
c2VjdGlvbnMgeW91IGNhbgotY3JlYXRlOiBUZXh0IChsZWZ0IGFsb25lKSwgTWFjcm8gRGVmaW5p
dGlvbnMsIGFuZCBNYWNybyBFeHBhbnNpb25zLiAgVGhlcmUgaXMKLW5vIG9yZGVyIHJlcXVpcmVk
IGJldHdlZW4gZGVmaW5pdGlvbnMgYW5kIGV4cGFuc2lvbnMsIGFsbCBkZWZpbml0aW9ucyBhcmUg
cmVhZAotYmVmb3JlIGFueSBleHBhbnNpb25zIGFyZSBwcm9jZXNzZWQgKHRodXMsIGlmIGRlc2ly
ZWQsIGRlZmluaXRpb25zIGNhbiBiZSBwdXQKLWF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgdG8ga2Vl
cCB0aGVtIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBjb2RlKS4KLQotTWFjcm8gRGVmaW5pdGlvbnMg
YXJlIHN0YXJ0ZWQgd2l0aCAiLy8lUERETS1ERUZJTkUgTmFtZShhcmdzKSIgYW5kIGFsbCBsaW5l
cwotYWZ0ZXJ3YXJkcyB0aGF0IHN0YXJ0IHdpdGggIi8vJSIgYXJlIGluY2x1ZGVkIGluIHRoZSBk
ZWZpbml0aW9uLiAgTXVsdGlwbGUKLW1hY3JvcyBjYW4gYmUgZGVmaW5lZCBpbiBvbmUgYmxvY2sg
YnkganVzdCB1c2luZyBhIGFub3RoZXIgIi8vJVBERE0tREVGSU5FIgotbGluZSB0byBzdGFydCB0
aGUgbmV4dCBtYWNyby4gIE9wdGlvbmFsbHksIGEgbWFjcm8gY2FuIGJlIGVuZGVkIHdpdGgKLSIv
LyVQRERNLURFRklORS1FTkQiLCB0aGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBt
YWtlIGl0IGNsZWFyIHRoYXQKLXRyYWlsaW5nIGJsYW5rIGxpbmVzIGFyZSBpbmNsdWRlZCBpbiB0
aGUgbWFjcm8uICBZb3UgY2FuIGFsc28gZW5kIGEgZGVmaW5pdGlvbgotd2l0aCBhbiBleHBhbnNp
b24uCi0KLU1hY3JvIEV4cGFuc2lvbnMgYXJlIHN0YXJ0ZWQgYnkgc2luZ2xlIGxpbmVzIGNvbnRh
aW5pbmcKLSIvLyVQRERNLUVYUEFORCBOYW1lKGFyZ3MpIiBhbmQgdGhlbiB3aXRoICIvLyVQRERN
LUVYUEFORC1FTkQiIG9yIGFub3RoZXIKLWV4cGFuc2lvbnMuICBBbGwgbGluZXMgaW4tYmV0d2Vl
biBhcmUgcmVwbGFjZWQgYnkgdGhlIHJlc3VsdCBvZiB0aGUgZXhwYW5zaW9uLgotVGhlIGZpcnN0
IGxpbmUgb2YgdGhlIGV4cGFuc2lvbiBpcyBhbHdheXMgYSBibGFuayBsaWtlIGp1c3QgZm9yIHJl
YWRhYmlsaXR5LgotCi1FeHBhbnNpb24gaXRzZWxmIGlzIHByZXR0eSBzaW1wbGUsIG9uZSBtYWNy
byBjYW4gaW52b2tlIGFub3RoZXIgbWFjcm8sIGJ1dAoteW91IGNhbm5vdCBuZXN0IHRoZSBpbnZv
a2Ugb2YgYSBtYWNybyBpbiBhbm90aGVyIG1hY3JvIChpLmUuIC0gY2FuJ3QgZG8KLSJmb28oYmFy
KGEpKSIsIGJ1dCB5b3UgY2FuIGRlZmluZSBmb28oYSkgYW5kIGJhcihiKSB3aGVyZSBiYXIgaW52
b2tlcyBmb28oKQotd2l0aGluIGl0cyBleHBhbnNpb24uCi0KLVdoZW4gbWFjcm9zIGFyZSBleHBh
bmRlZCwgdGhlIGFyZyByZWZlcmVuY2VzIGNhbiBhbHNvIGFkZCAiJE8iIHN1ZmZpeCB0byB0aGUK
LW5hbWUgKGkuZS4gLSAiTkFNRSRPIikgdG8gc3BlY2lmeSBhbiBvcHRpb24gdG8gYmUgYXBwbGll
ZC4gVGhlIG9wdGlvbnMgYXJlOgotCi0gICAgJFMgLSBSZXBsYWNlIGVhY2ggY2hhcmFjdGVyIGlu
IHRoZSB2YWx1ZSB3aXRoIGEgc3BhY2UuCi0gICAgJGwgLSBMb3dlcmNhc2UgdGhlIGZpcnN0IGxl
dHRlciBvZiB0aGUgdmFsdWUuCi0gICAgJEwgLSBMb3dlcmNhc2UgdGhlIHdob2xlIHZhbHVlLgot
ICAgICR1IC0gVXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHZhbHVlLgotICAgICRV
IC0gVXBwZXJjYXNlIHRoZSB3aG9sZSB2YWx1ZS4KLQotV2l0aGluIGEgbWFjcm8geW91IGNhbiB1
c2UgIyMgdG8gY2F1c2UgdGhpbmdzIHRvIGdldCBqb2luZWQgdG9nZXRoZXIgYWZ0ZXIKLWV4cGFu
c2lvbiAoaS5lLiAtICJhIyNiIiB3aXRoaW4gYSBtYWNybyB3aWxsIGJlY29tZSAiYWIiKS4KLQot
RXhhbXBsZToKLQotICAgIGludCBmb28oTXlFbnVtIHgpIHsKLSAgICBzd2l0Y2ggKHgpIHsKLSAg
ICAvLyVQRERNLUVYUEFORCBjYXNlKEVudW1fTGVmdCwgMSkKLSAgICAvLyVQRERNLUVYUEFORCBj
YXNlKEVudW1fQ2VudGVyLCAyKQotICAgIC8vJVBERE0tRVhQQU5EIGNhc2UoRW51bV9SaWdodCwg
MykKLSAgICAvLyVQRERNLUVYUEFORC1FTkQKLSAgICB9Ci0KLSAgICAvLyVQRERNLURFRklORSBj
YXNlKF9BLCBfQikKLSAgICAvLyUgIGNhc2UgX0E6Ci0gICAgLy8lICAgIHJldHVybiBfQjsKLQot
ICBBIG1hY3JvIGVuZHMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IG9uZSwgb3IgYW4gb3B0aW9u
YWwgJVBERE0tREVGSU5FLUVORAotICBjYW4gYmUgdXNlZCB0byBhdm9pZCBhZGRpbmcgZXh0cmEg
YmxhbmsgbGluZXMvcmV0dXJucyAob3IgbWFrZSBpdCBjbGVhciB3aGVuCi0gIGl0IGlzIGRlc2ly
ZWQpLgotCi0gIE9uZSBtYWNybyBjYW4gaW52b2tlIGFub3RoZXIgYnkgc2ltcGx5IHVzaW5nIGl0
cyBuYW1lIE5BTUUoQVJHUykuIFlvdSBjYW5ub3QKLSAgbmVzdCBhbiBpbnZva2UgaW5zaWRlIGFu
b3RoZXIgKGkuZS4gLSBOQU1FMShOQU1FMihBUkdTKSkgaXNuJ3Qgc3VwcG9ydGVkKS4KLQotICBX
aXRoaW4gYSBtYWNybyB5b3UgY2FuIHVzZSAjIyB0byBjYXVzZSB0aGluZ3MgdG8gZ2V0IGpvaW5l
ZCB0b2dldGhlciBhZnRlcgotICBwcm9jZXNzaW5nIChpLmUuIC0gImEjI2IiIHdpdGhpbiBhIG1h
Y3JvIHdpbGwgYmVjb21lICJhYiIpLgotCi0KLSIiIgotCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9y
dCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi0KLQotIyBSZWdleCBmb3IgbWFjcm8gZGVmaW5p
dGlvbi4KLV9NQUNST19SRSA9IHJlLmNvbXBpbGUocicoP1A8bmFtZT5cdyspXCgoP1A8YXJncz4u
Kj8pXCknKQotIyBSZWdleCBmb3IgbWFjcm8ncyBhcmd1bWVudCBkZWZpbml0aW9uLgotX01BQ1JP
X0FSR19OQU1FX1JFID0gcmUuY29tcGlsZShyJ15cdyskJykKLQotIyBMaW5lIGluc2VydGVkIGFm
dGVyIGVhY2ggRVhQQU5ELgotX0dFTkVSQVRFRF9DT0RFX0xJTkUgPSAoCi0gICcvLyBUaGlzIGJs
b2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4nCi0pCi0K
LQotZGVmIF9NYWNyb1JlZlJlKG1hY3JvX25hbWVzKToKLSAgIyBUYWtlcyBpbiBhIGxpc3Qgb2Yg
bWFjcm8gbmFtZXMgYW5kIG1ha2VzIGEgcmVnZXggdGhhdCB3aWxsIG1hdGNoIGludm9rZXMKLSAg
IyBvZiB0aG9zZSBtYWNyb3MuCi0gIHJldHVybiByZS5jb21waWxlKHInXGIoP1A8bWFjcm9fcmVm
Pig/UDxuYW1lPiglcykpXCgoP1A8YXJncz4uKj8pXCkpJyAlCi0gICAgICAgICAgICAgICAgICAg
ICd8Jy5qb2luKG1hY3JvX25hbWVzKSkKLQotZGVmIF9NYWNyb0FyZ1JlZlJlKG1hY3JvX2FyZ19u
YW1lcyk6Ci0gICMgVGFrZXMgaW4gYSBsaXN0IG9mIG1hY3JvIGFyZyBuYW1lcyBhbmQgbWFrZXMg
YSByZWdleCB0aGF0IHdpbGwgbWF0Y2gKLSAgIyB1c2VzIG9mIHRob3NlIGFyZ3MuCi0gIHJldHVy
biByZS5jb21waWxlKHInXGIoP1A8bmFtZT4oJXMpKShcJCg/UDxvcHRpb24+LikpP1xiJyAlCi0g
ICAgICAgICAgICAgICAgICAgICd8Jy5qb2luKG1hY3JvX2FyZ19uYW1lcykpCi0KLQotY2xhc3Mg
UERETUVycm9yKEV4Y2VwdGlvbik6Ci0gICIiIkVycm9yIHRocm93biBieSBwZGRtLiIiIgotICBw
YXNzCi0KLQotY2xhc3MgTWFjcm9Db2xsZWN0aW9uKG9iamVjdCk6Ci0gICIiIkhvbGQgYSBzZXQg
b2YgbWFjcm9zIGFuZCBjYW4gcmVzb2x2ZS9leHBhbmQgdGhlbS4iIiIKLQotICBkZWYgX19pbml0
X18oc2VsZiwgYV9maWxlPU5vbmUpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSBjb2xsZWN0aW9u
LgotCi0gICAgQXJnczoKLSAgICAgIGFfZmlsZTogVGhlIGZpbGUgbGlrZSBzdHJlYW0gdG8gcGFy
c2UuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBQRERNRXJyb3IgaWYgdGhlcmUgYXJlIGFueSBpc3N1
ZXMuCi0gICAgIiIiCi0gICAgc2VsZi5fbWFjcm9zID0gZGljdCgpCi0gICAgaWYgYV9maWxlOgot
ICAgICAgc2VsZi5QYXJzZUlucHV0KGFfZmlsZSkKLQotICBjbGFzcyBNYWNyb0RlZmluaXRpb24o
b2JqZWN0KToKLSAgICAiIiJIb2xkcyBhIG1hY3JvIGRlZmluaXRpb24uIiIiCi0KLSAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSwgYXJnX25hbWVzKToKLSAgICAgIHNlbGYuX25hbWUgPSBuYW1l
Ci0gICAgICBzZWxmLl9hcmdzID0gdHVwbGUoYXJnX25hbWVzKQotICAgICAgc2VsZi5fYm9keSA9
ICcnCi0gICAgICBzZWxmLl9uZWVkTmV3TGluZSA9IEZhbHNlCi0KLSAgICBkZWYgQXBwZW5kTGlu
ZShzZWxmLCBsaW5lKToKLSAgICAgIGlmIHNlbGYuX25lZWROZXdMaW5lOgotICAgICAgICBzZWxm
Ll9ib2R5ICs9ICdcbicKLSAgICAgIHNlbGYuX2JvZHkgKz0gbGluZQotICAgICAgc2VsZi5fbmVl
ZE5ld0xpbmUgPSBub3QgbGluZS5lbmRzd2l0aCgnXG4nKQotCi0gICAgQHByb3BlcnR5Ci0gICAg
ZGVmIG5hbWUoc2VsZik6Ci0gICAgICByZXR1cm4gc2VsZi5fbmFtZQotCi0gICAgQHByb3BlcnR5
Ci0gICAgZGVmIGFyZ3Moc2VsZik6Ci0gICAgICByZXR1cm4gc2VsZi5fYXJncwotCi0gICAgQHBy
b3BlcnR5Ci0gICAgZGVmIGJvZHkoc2VsZik6Ci0gICAgICByZXR1cm4gc2VsZi5fYm9keQotCi0g
IGRlZiBQYXJzZUlucHV0KHNlbGYsIGFfZmlsZSk6Ci0gICAgIiIiQ29uc3VtZXMgaW5wdXQgZXh0
cmFjdGluZyBkZWZpbml0aW9ucy4KLQotICAgIEFyZ3M6Ci0gICAgICBhX2ZpbGU6IFRoZSBmaWxl
IGxpa2Ugc3RyZWFtIHRvIHBhcnNlLgotCi0gICAgUmFpc2VzOgotICAgICAgUERETUVycm9yIGlm
IHRoZXJlIGFyZSBhbnkgaXNzdWVzLgotICAgICIiIgotICAgIGlucHV0X2xpbmVzID0gYV9maWxl
LnJlYWQoKS5zcGxpdGxpbmVzKCkKLSAgICBzZWxmLlBhcnNlTGluZXMoaW5wdXRfbGluZXMpCi0K
LSAgZGVmIFBhcnNlTGluZXMoc2VsZiwgaW5wdXRfbGluZXMpOgotICAgICIiIlBhcnNlcyBsaXN0
IG9mIGxpbmVzLgotCi0gICAgQXJnczoKLSAgICAgIGlucHV0X2xpbmVzOiBBIGxpc3Qgb2Ygc3Ry
aW5ncyBvZiBpbnB1dCB0byBwYXJzZSAobm8gbmV3bGluZXMgb24gdGhlCi0gICAgICAgICAgICAg
ICAgICAgc3RyaW5ncykuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBQRERNRXJyb3IgaWYgdGhlcmUg
YXJlIGFueSBpc3N1ZXMuCi0gICAgIiIiCi0gICAgY3VycmVudF9tYWNybyA9IE5vbmUKLSAgICBm
b3IgbGluZSBpbiBpbnB1dF9saW5lczoKLSAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnUERETS0n
KToKLSAgICAgICAgZGlyZWN0aXZlID0gbGluZS5zcGxpdCgnICcsIDEpWzBdCi0gICAgICAgIGlm
IGRpcmVjdGl2ZSA9PSAnUERETS1ERUZJTkUnOgotICAgICAgICAgIG5hbWUsIGFyZ3MgPSBzZWxm
Ll9QYXJzZURlZmluZUxpbmUobGluZSkKLSAgICAgICAgICBpZiBzZWxmLl9tYWNyb3MuZ2V0KG5h
bWUpOgotICAgICAgICAgICAgcmFpc2UgUERETUVycm9yKCdBdHRlbXB0IHRvIHJlZGVmaW5lIG1h
Y3JvOiAiJXMiJyAlIGxpbmUpCi0gICAgICAgICAgY3VycmVudF9tYWNybyA9IHNlbGYuTWFjcm9E
ZWZpbml0aW9uKG5hbWUsIGFyZ3MpCi0gICAgICAgICAgc2VsZi5fbWFjcm9zW25hbWVdID0gY3Vy
cmVudF9tYWNybwotICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIGRpcmVjdGl2ZSA9PSAn
UERETS1ERUZJTkUtRU5EJzoKLSAgICAgICAgICBpZiBub3QgY3VycmVudF9tYWNybzoKLSAgICAg
ICAgICAgIHJhaXNlIFBERE1FcnJvcignR290IERFRklORS1FTkQgZGlyZWN0aXZlIHdpdGhvdXQg
YW4gYWN0aXZlIG1hY3JvOicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICIlcyInICUg
bGluZSkKLSAgICAgICAgICBjdXJyZW50X21hY3JvID0gTm9uZQotICAgICAgICAgIGNvbnRpbnVl
Ci0gICAgICAgIHJhaXNlIFBERE1FcnJvcignSGl0IGEgbGluZSB3aXRoIGFuIHVua25vd24gZGly
ZWN0aXZlOiAiJXMiJyAlIGxpbmUpCi0KLSAgICAgIGlmIGN1cnJlbnRfbWFjcm86Ci0gICAgICAg
IGN1cnJlbnRfbWFjcm8uQXBwZW5kTGluZShsaW5lKQotICAgICAgICBjb250aW51ZQotCi0gICAg
ICAjIEFsbG93IGJsYW5rIGxpbmVzIGJldHdlZW4gbWFjcm8gZGVmaW5pdGlvbnMuCi0gICAgICBp
ZiBsaW5lLnN0cmlwKCkgPT0gJyc6Ci0gICAgICAgIGNvbnRpbnVlCi0KLSAgICAgIHJhaXNlIFBE
RE1FcnJvcignSGl0IGEgbGluZSB0aGF0IHdhc25cJ3QgYSBkaXJlY3RpdmUgYW5kIG5vIG9wZW4g
bWFjcm8nCi0gICAgICAgICAgICAgICAgICAgICAgJyBkZWZpbml0aW9uOiAiJXMiJyAlIGxpbmUp
Ci0KLSAgZGVmIF9QYXJzZURlZmluZUxpbmUoc2VsZiwgaW5wdXRfbGluZSk6Ci0gICAgYXNzZXJ0
IGlucHV0X2xpbmUuc3RhcnRzd2l0aCgnUERETS1ERUZJTkUnKQotICAgIGxpbmUgPSBpbnB1dF9s
aW5lWzEyOl0uc3RyaXAoKQotICAgIG1hdGNoID0gX01BQ1JPX1JFLm1hdGNoKGxpbmUpCi0gICAg
IyBNdXN0IG1hdGNoIGZ1bGwgbGluZQotICAgIGlmIG1hdGNoIGlzIE5vbmUgb3IgbWF0Y2guZ3Jv
dXAoMCkgIT0gbGluZToKLSAgICAgIHJhaXNlIFBERE1FcnJvcignRmFpbGVkIHRvIHBhcnNlIG1h
Y3JvIGRlZmluaXRpb246ICIlcyInICUgaW5wdXRfbGluZSkKLSAgICBuYW1lID0gbWF0Y2guZ3Jv
dXAoJ25hbWUnKQotICAgIGFyZ3Nfc3RyID0gbWF0Y2guZ3JvdXAoJ2FyZ3MnKS5zdHJpcCgpCi0g
ICAgYXJncyA9IFtdCi0gICAgaWYgYXJnc19zdHI6Ci0gICAgICBmb3IgcGFydCBpbiBhcmdzX3N0
ci5zcGxpdCgnLCcpOgotICAgICAgICBhcmcgPSBwYXJ0LnN0cmlwKCkKLSAgICAgICAgaWYgYXJn
ID09ICcnOgotICAgICAgICAgIHJhaXNlIFBERE1FcnJvcignRW1wdHkgYXJnIG5hbWUgaW4gbWFj
cm8gZGVmaW5pdGlvbjogIiVzIicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbnB1dF9s
aW5lKQotICAgICAgICBpZiBub3QgX01BQ1JPX0FSR19OQU1FX1JFLm1hdGNoKGFyZyk6Ci0gICAg
ICAgICAgcmFpc2UgUERETUVycm9yKCdJbnZhbGlkIGFyZyBuYW1lICIlcyIgaW4gbWFjcm8gZGVm
aW5pdGlvbjogIiVzIicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoYXJnLCBpbnB1dF9s
aW5lKSkKLSAgICAgICAgaWYgYXJnIGluIGFyZ3M6Ci0gICAgICAgICAgcmFpc2UgUERETUVycm9y
KCdBcmcgbmFtZSAiJXMiIHVzZWQgbW9yZSB0aGFuIG9uY2UgaW4gbWFjcm8nCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICcgZGVmaW5pdGlvbjogIiVzIicgJSAoYXJnLCBpbnB1dF9saW5lKSkK
LSAgICAgICAgYXJncy5hcHBlbmQoYXJnKQotICAgIHJldHVybiAobmFtZSwgdHVwbGUoYXJncykp
Ci0KLSAgZGVmIEV4cGFuZChzZWxmLCBtYWNyb19yZWZfc3RyKToKLSAgICAiIiJFeHBhbmRzIHRo
ZSBtYWNybyByZWZlcmVuY2UuCi0KLSAgICBBcmdzOgotICAgICAgbWFjcm9fcmVmX3N0cjogU3Ry
aW5nIG9mIGEgbWFjcm8gcmVmZXJlbmNlIChpLmUuIGZvbyhhLCBiKSkuCi0KLSAgICBSZXR1cm5z
OgotICAgICAgVGhlIHRleHQgZnJvbSB0aGUgZXhwYW5zaW9uLgotCi0gICAgUmFpc2VzOgotICAg
ICAgUERETUVycm9yIGlmIHRoZXJlIGFyZSBhbnkgaXNzdWVzLgotICAgICIiIgotICAgIG1hdGNo
ID0gX01BQ1JPX1JFLm1hdGNoKG1hY3JvX3JlZl9zdHIpCi0gICAgaWYgbWF0Y2ggaXMgTm9uZSBv
ciBtYXRjaC5ncm91cCgwKSAhPSBtYWNyb19yZWZfc3RyOgotICAgICAgcmFpc2UgUERETUVycm9y
KCdGYWlsZWQgdG8gcGFyc2UgbWFjcm8gcmVmZXJlbmNlOiAiJXMiJyAlIG1hY3JvX3JlZl9zdHIp
Ci0gICAgaWYgbWF0Y2guZ3JvdXAoJ25hbWUnKSBub3QgaW4gc2VsZi5fbWFjcm9zOgotICAgICAg
cmFpc2UgUERETUVycm9yKCdObyBtYWNybyBuYW1lZCAiJXMiLicgJSBtYXRjaC5ncm91cCgnbmFt
ZScpKQotICAgIHJldHVybiBzZWxmLl9FeHBhbmQobWF0Y2gsIFtdLCBtYWNyb19yZWZfc3RyKQot
Ci0gIGRlZiBfRm9ybWF0U3RhY2soc2VsZiwgbWFjcm9fcmVmX3N0YWNrKToKLSAgICByZXN1bHQg
PSAnJwotICAgIGZvciBfLCBtYWNyb19yZWYgaW4gcmV2ZXJzZWQobWFjcm9fcmVmX3N0YWNrKToK
LSAgICAgIHJlc3VsdCArPSAnXG4uLi53aGlsZSBleHBhbmRpbmcgIiVzIi4nICUgbWFjcm9fcmVm
Ci0gICAgcmV0dXJuIHJlc3VsdAotCi0gIGRlZiBfRXhwYW5kKHNlbGYsIG1hY3JvX3JlZl9tYXRj
aCwgbWFjcm9fc3RhY2ssIG1hY3JvX3JlZl9zdHI9Tm9uZSk6Ci0gICAgaWYgbWFjcm9fcmVmX3N0
ciBpcyBOb25lOgotICAgICAgbWFjcm9fcmVmX3N0ciA9IG1hY3JvX3JlZl9tYXRjaC5ncm91cCgn
bWFjcm9fcmVmJykKLSAgICBuYW1lID0gbWFjcm9fcmVmX21hdGNoLmdyb3VwKCduYW1lJykKLSAg
ICBmb3IgcHJldl9uYW1lLCBwcmV2X21hY3JvX3JlZiBpbiBtYWNyb19zdGFjazoKLSAgICAgIGlm
IG5hbWUgPT0gcHJldl9uYW1lOgotICAgICAgICByYWlzZSBQRERNRXJyb3IoJ0ZvdW5kIG1hY3Jv
IHJlY3VzaW9uLCBpbnZva2luZyAiJXMiOiVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAo
bWFjcm9fcmVmX3N0ciwgc2VsZi5fRm9ybWF0U3RhY2sobWFjcm9fc3RhY2spKSkKLSAgICBtYWNy
byA9IHNlbGYuX21hY3Jvc1tuYW1lXQotICAgIGFyZ3Nfc3RyID0gbWFjcm9fcmVmX21hdGNoLmdy
b3VwKCdhcmdzJykuc3RyaXAoKQotICAgIGFyZ3MgPSBbXQotICAgIGlmIGFyZ3Nfc3RyIG9yIGxl
bihtYWNyby5hcmdzKToKLSAgICAgIGFyZ3MgPSBbeC5zdHJpcCgpIGZvciB4IGluIGFyZ3Nfc3Ry
LnNwbGl0KCcsJyldCi0gICAgaWYgbGVuKGFyZ3MpICE9IGxlbihtYWNyby5hcmdzKToKLSAgICAg
IHJhaXNlIFBERE1FcnJvcignRXhwZWN0ZWQgJWQgYXJncywgZ290OiAiJXMiLiVzJyAlCi0gICAg
ICAgICAgICAgICAgICAgICAgKGxlbihtYWNyby5hcmdzKSwgbWFjcm9fcmVmX3N0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fRm9ybWF0U3RhY2sobWFjcm9fc3RhY2spKSkKLSAgICAj
IFJlcGxhY2UgYXJncyB1c2FnZXMuCi0gICAgcmVzdWx0ID0gc2VsZi5fUmVwbGFjZUFyZ1ZhbHVl
cyhtYWNybywgYXJncywgbWFjcm9fcmVmX3N0ciwgbWFjcm9fc3RhY2spCi0gICAgIyBFeHBhbmQg
YW55IG1hY3JvIGludm9rZXMuCi0gICAgbmV3X21hY3JvX3N0YWNrID0gbWFjcm9fc3RhY2sgKyBb
KG5hbWUsIG1hY3JvX3JlZl9zdHIpXQotICAgIHdoaWxlIFRydWU6Ci0gICAgICBldmFsX3Jlc3Vs
dCA9IHNlbGYuX0V2YWxNYWNyb3NSZWZzKHJlc3VsdCwgbmV3X21hY3JvX3N0YWNrKQotICAgICAg
IyBDb25zdW1lIGFsbCAjIyBkaXJlY3RpdmVzIHRvIGdsdWUgdGhpbmdzIHRvZ2V0aGVyLgotICAg
ICAgZXZhbF9yZXN1bHQgPSBldmFsX3Jlc3VsdC5yZXBsYWNlKCcjIycsICcnKQotICAgICAgaWYg
ZXZhbF9yZXN1bHQgPT0gcmVzdWx0OgotICAgICAgICBicmVhawotICAgICAgcmVzdWx0ID0gZXZh
bF9yZXN1bHQKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIF9SZXBsYWNlQXJnVmFsdWVzKHNl
bGYsCi0gICAgICAgICAgICAgICAgICAgICAgICBtYWNybywgYXJnX3ZhbHVlcywgbWFjcm9fcmVm
X3RvX3JlcG9ydCwgbWFjcm9fc3RhY2spOgotICAgIGlmIGxlbihhcmdfdmFsdWVzKSA9PSAwOgot
ICAgICAgIyBOb3RoaW5nIHRvIGRvCi0gICAgICByZXR1cm4gbWFjcm8uYm9keQotICAgIGFzc2Vy
dCBsZW4oYXJnX3ZhbHVlcykgPT0gbGVuKG1hY3JvLmFyZ3MpCi0gICAgYXJncyA9IGRpY3Qoemlw
KG1hY3JvLmFyZ3MsIGFyZ192YWx1ZXMpKQotICAgIGRlZiBfbG9va3VwQXJnKG1hdGNoKToKLSAg
ICAgIHZhbCA9IGFyZ3NbbWF0Y2guZ3JvdXAoJ25hbWUnKV0KLSAgICAgIG9wdCA9IG1hdGNoLmdy
b3VwKCdvcHRpb24nKQotICAgICAgaWYgb3B0OgotICAgICAgICBpZiBvcHQgPT0gJ1MnOiAjIFNw
YWNlcyBmb3IgdGhlIGxlbmd0aAotICAgICAgICAgIHJldHVybiAnICcgKiBsZW4odmFsKQotICAg
ICAgICBlbGlmIG9wdCA9PSAnbCc6ICMgTG93ZXJjYXNlIGZpcnN0IGNoYXJhY3RlcgotICAgICAg
ICAgIGlmIHZhbDoKLSAgICAgICAgICAgIHJldHVybiB2YWxbMF0ubG93ZXIoKSArIHZhbFsxOl0K
LSAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHZhbAotICAgICAgICBlbGlmIG9w
dCA9PSAnTCc6ICMgQWxsIExvd2VyY2FzZQotICAgICAgICAgIHJldHVybiB2YWwubG93ZXIoKQot
ICAgICAgICBlbGlmIG9wdCA9PSAndSc6ICMgVXBwZXJjYXNlIGZpcnN0IGNoYXJhY3RlcgotICAg
ICAgICAgIGlmIHZhbDoKLSAgICAgICAgICAgIHJldHVybiB2YWxbMF0udXBwZXIoKSArIHZhbFsx
Ol0KLSAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHZhbAotICAgICAgICBlbGlm
IG9wdCA9PSAnVSc6ICMgQWxsIFVwcGVyY2FzZQotICAgICAgICAgIHJldHVybiB2YWwudXBwZXIo
KQotICAgICAgICBlbHNlOgotICAgICAgICAgIHJhaXNlIFBERE1FcnJvcignVW5rbm93biBhcmcg
b3B0aW9uICIlcyQlcyIgd2hpbGUgZXhwYW5kaW5nICIlcyIuJXMnCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICUgKG1hdGNoLmdyb3VwKCduYW1lJyksIG1hdGNoLmdyb3VwKCdvcHRpb24nKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm9fcmVmX3RvX3JlcG9ydCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fRm9ybWF0U3RhY2sobWFjcm9fc3RhY2spKSkK
LSAgICAgIHJldHVybiB2YWwKLSAgICAjIExldCB0aGUgcmVnZXggZG8gdGhlIHdvcmshCi0gICAg
bWFjcm9fYXJnX3JlZl9yZSA9IF9NYWNyb0FyZ1JlZlJlKG1hY3JvLmFyZ3MpCi0gICAgcmV0dXJu
IG1hY3JvX2FyZ19yZWZfcmUuc3ViKF9sb29rdXBBcmcsIG1hY3JvLmJvZHkpCi0KLSAgZGVmIF9F
dmFsTWFjcm9zUmVmcyhzZWxmLCB0ZXh0LCBtYWNyb19zdGFjayk6Ci0gICAgbWFjcm9fcmVmX3Jl
ID0gX01hY3JvUmVmUmUoc2VsZi5fbWFjcm9zLmtleXMoKSkKLSAgICBkZWYgX3Jlc29sdmVNYWNy
byhtYXRjaCk6Ci0gICAgICByZXR1cm4gc2VsZi5fRXhwYW5kKG1hdGNoLCBtYWNyb19zdGFjaykK
LSAgICByZXR1cm4gbWFjcm9fcmVmX3JlLnN1YihfcmVzb2x2ZU1hY3JvLCB0ZXh0KQotCi0KLWNs
YXNzIFNvdXJjZUZpbGUob2JqZWN0KToKLSAgIiIiUmVwcmVzZW50cyBhIHNvdXJjZSBmaWxlIHdp
dGggUERETSBkaXJlY3RpdmVzIGluIGl0LiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBhX2Zp
bGUsIGltcG9ydF9yZXNvbHZlcj1Ob25lKToKLSAgICAiIiJJbml0aWFsaXplcyB0aGUgZmlsZSBy
ZWFkaW5nIGluIHRoZSBmaWxlLgotCi0gICAgQXJnczoKLSAgICAgIGFfZmlsZTogVGhlIGZpbGUg
dG8gcmVhZCBpbi4KLSAgICAgIGltcG9ydF9yZXNvbHZlcjogYSBmdW5jdGlvbiB0aGF0IGdpdmVu
IGEgcGF0aCB3aWxsIHJldHVybiBhIHN0cmVhbSBmb3IKLSAgICAgICAgdGhlIGNvbnRlbnRzLgot
Ci0gICAgUmFpc2VzOgotICAgICAgUERETUVycm9yIGlmIHRoZXJlIGFyZSBhbnkgaXNzdWVzLgot
ICAgICIiIgotICAgIHNlbGYuX3NlY3Rpb25zID0gW10KLSAgICBzZWxmLl9vcmlnaW5hbF9jb250
ZW50ID0gYV9maWxlLnJlYWQoKQotICAgIHNlbGYuX2ltcG9ydF9yZXNvbHZlciA9IGltcG9ydF9y
ZXNvbHZlcgotICAgIHNlbGYuX3Byb2Nlc3NlZF9jb250ZW50ID0gTm9uZQotCi0gIGNsYXNzIFNl
Y3Rpb25CYXNlKG9iamVjdCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlyc3RfbGluZV9u
dW0pOgotICAgICAgc2VsZi5fbGluZXMgPSBbXQotICAgICAgc2VsZi5fZmlyc3RfbGluZV9udW0g
PSBmaXJzdF9saW5lX251bQotCi0gICAgZGVmIFRyeUFwcGVuZChzZWxmLCBsaW5lLCBsaW5lX251
bSk6Ci0gICAgICAiIiJUcnkgYXBwZW5kaW5nIGEgbGluZS4KLQotICAgICAgQXJnczoKLSAgICAg
ICAgbGluZTogVGhlIGxpbmUgdG8gYXBwZW5kLgotICAgICAgICBsaW5lX251bTogVGhlIG51bWJl
ciBvZiB0aGUgbGluZS4KLQotICAgICAgUmV0dXJuczoKLSAgICAgICAgQSB0dXBsZSBvZiAoU1VD
Q0VTUywgQ0FOX0FERF9NT1JFKS4gIElmIFNVQ0NFU1MgaWYgRmFsc2UsIHRoZSBsaW5lCi0gICAg
ICAgIHdhc24ndCBhcHBlbmQuICBJZiBTVUNDRVNTIGlzIFRydWUsIHRoZW4gQ0FOX0FERF9NT1JF
IGlzIFRydWUvRmFsc2UgdG8KLSAgICAgICAgaW5kaWNhdGUgaWYgbW9yZSBsaW5lcyBjYW4gYmUg
YWRkZWQgYWZ0ZXIgdGhpcyBvbmUuCi0gICAgICAiIiIKLSAgICAgIGFzc2VydCBGYWxzZSwgInN1
YmxjYXNzIHNob3VsZCBoYXZlIG92ZXJyaWRkZW4iCi0gICAgICByZXR1cm4gKEZhbHNlLCBGYWxz
ZSkKLQotICAgIGRlZiBIaXRFT0Yoc2VsZik6Ci0gICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgRU9G
IHdhcyByZWFjaGVkIGZvciBmb3IgYSBnaXZlbiBzZWN0aW9uLiIiIgotICAgICAgcGFzcwotCi0g
ICAgZGVmIEJpbmRNYWNyb0NvbGxlY3Rpb24oc2VsZiwgbWFjcm9fY29sbGVjdGlvbik6Ci0gICAg
ICAiIiJCaW5kcyB0aGUgY2h1bmsgdG8gYSBtYWNybyBjb2xsZWN0aW9uLgotCi0gICAgICBBcmdz
OgotICAgICAgICBtYWNyb19jb2xsZWN0aW9uOiBUaGUgY29sbGVjdGlvbiB0byBiaW5kIHRvby4K
LSAgICAgICIiIgotICAgICAgcGFzcwotCi0gICAgZGVmIEFwcGVuZChzZWxmLCBsaW5lKToKLSAg
ICAgIHNlbGYuX2xpbmVzLmFwcGVuZChsaW5lKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGxp
bmVzKHNlbGYpOgotICAgICAgcmV0dXJuIHNlbGYuX2xpbmVzCi0KLSAgICBAcHJvcGVydHkKLSAg
ICBkZWYgbnVtX2xpbmVzX2NhcHR1cmVkKHNlbGYpOgotICAgICAgcmV0dXJuIGxlbihzZWxmLl9s
aW5lcykKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBmaXJzdF9saW5lX251bShzZWxmKToKLSAg
ICAgIHJldHVybiBzZWxmLl9maXJzdF9saW5lX251bQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVm
IGZpcnN0X2xpbmUoc2VsZik6Ci0gICAgICBpZiBub3Qgc2VsZi5fbGluZXM6Ci0gICAgICAgIHJl
dHVybiAnJwotICAgICAgcmV0dXJuIHNlbGYuX2xpbmVzWzBdCi0KLSAgICBAcHJvcGVydHkKLSAg
ICBkZWYgdGV4dChzZWxmKToKLSAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5saW5lcykgKyAn
XG4nCi0KLSAgY2xhc3MgVGV4dFNlY3Rpb24oU2VjdGlvbkJhc2UpOgotICAgICIiIlRleHQgc2Vj
dGlvbiB0aGF0IGlzIGVjaG9lZCBvdXQgYXMgaXMuIiIiCi0KLSAgICBkZWYgVHJ5QXBwZW5kKHNl
bGYsIGxpbmUsIGxpbmVfbnVtKToKLSAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnLy8lUERETScp
OgotICAgICAgICByZXR1cm4gKEZhbHNlLCBGYWxzZSkKLSAgICAgIHNlbGYuQXBwZW5kKGxpbmUp
Ci0gICAgICByZXR1cm4gKFRydWUsIFRydWUpCi0KLSAgY2xhc3MgRXhwYW5zaW9uU2VjdGlvbihT
ZWN0aW9uQmFzZSk6Ci0gICAgIiIiU2VjdGlvbiB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYW4gbWFj
cm8gZXhwYW5zaW9uLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpcnN0X2xpbmVfbnVt
KToKLSAgICAgIFNvdXJjZUZpbGUuU2VjdGlvbkJhc2UuX19pbml0X18oc2VsZiwgZmlyc3RfbGlu
ZV9udW0pCi0gICAgICBzZWxmLl9tYWNyb19jb2xsZWN0aW9uID0gTm9uZQotCi0gICAgZGVmIFRy
eUFwcGVuZChzZWxmLCBsaW5lLCBsaW5lX251bSk6Ci0gICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgo
Jy8vJVBERE0nKToKLSAgICAgICAgZGlyZWN0aXZlID0gbGluZS5zcGxpdCgnICcsIDEpWzBdCi0g
ICAgICAgIGlmIGRpcmVjdGl2ZSA9PSAnLy8lUERETS1FWFBBTkQnOgotICAgICAgICAgIHNlbGYu
QXBwZW5kKGxpbmUpCi0gICAgICAgICAgcmV0dXJuIChUcnVlLCBUcnVlKQotICAgICAgICBpZiBk
aXJlY3RpdmUgPT0gJy8vJVBERE0tRVhQQU5ELUVORCc6Ci0gICAgICAgICAgYXNzZXJ0IHNlbGYu
bnVtX2xpbmVzX2NhcHR1cmVkID4gMAotICAgICAgICAgIHJldHVybiAoVHJ1ZSwgRmFsc2UpCi0g
ICAgICAgIHJhaXNlIFBERE1FcnJvcignUmFuIGludG8gZGlyZWN0aXZlICgiJXMiLCBsaW5lICVk
KSB3aGlsZSBpbiAiJXMiLicgJQotICAgICAgICAgICAgICAgICAgICAgICAgKGRpcmVjdGl2ZSwg
bGluZV9udW0sIHNlbGYuZmlyc3RfbGluZSkpCi0gICAgICAjIEVhdCBvdGhlciBsaW5lcy4KLSAg
ICAgIHJldHVybiAoVHJ1ZSwgVHJ1ZSkKLQotICAgIGRlZiBIaXRFT0Yoc2VsZik6Ci0gICAgICBy
YWlzZSBQRERNRXJyb3IoJ0hpdCB0aGUgZW5kIG9mIHRoZSBmaWxlIHdoaWxlIGluICIlcyIuJyAl
Ci0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5maXJzdF9saW5lKQotCi0gICAgZGVmIEJpbmRN
YWNyb0NvbGxlY3Rpb24oc2VsZiwgbWFjcm9fY29sbGVjdGlvbik6Ci0gICAgICBzZWxmLl9tYWNy
b19jb2xsZWN0aW9uID0gbWFjcm9fY29sbGVjdGlvbgotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVm
IGxpbmVzKHNlbGYpOgotICAgICAgY2FwdHVyZWRfbGluZXMgPSBTb3VyY2VGaWxlLlNlY3Rpb25C
YXNlLmxpbmVzLmZnZXQoc2VsZikKLSAgICAgIGRpcmVjdGl2ZV9sZW4gPSBsZW4oJy8vJVBERE0t
RVhQQU5EJykKLSAgICAgIHJlc3VsdCA9IFtdCi0gICAgICBmb3IgbGluZSBpbiBjYXB0dXJlZF9s
aW5lczoKLSAgICAgICAgcmVzdWx0LmFwcGVuZChsaW5lKQotICAgICAgICBpZiBzZWxmLl9tYWNy
b19jb2xsZWN0aW9uOgotICAgICAgICAgICMgQWx3YXlzIGFkZCBhIGJsYW5rIGxpbmUsIHNlZW1z
IHRvIHJlYWQgYmV0dGVyLiAoSWYgbmVlZCBiZSwgYWRkIGFuCi0gICAgICAgICAgIyBvcHRpb24g
dG8gdGhlIEVYUEFORCB0byBpbmRpY2F0ZSBpZiB0aGlzIHNob3VsZCBiZSBkb25lLikKLSAgICAg
ICAgICByZXN1bHQuZXh0ZW5kKFtfR0VORVJBVEVEX0NPREVfTElORSwgJyddKQotICAgICAgICAg
IG1hY3JvID0gbGluZVtkaXJlY3RpdmVfbGVuOl0uc3RyaXAoKQotICAgICAgICAgIHRyeToKLSAg
ICAgICAgICAgIGV4cGFuZF9yZXN1bHQgPSBzZWxmLl9tYWNyb19jb2xsZWN0aW9uLkV4cGFuZCht
YWNybykKLSAgICAgICAgICAgICMgU2luY2UgZXhwYW5zaW9ucyBhcmUgbGluZSBvcmllbnRlZCwg
c3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZQotICAgICAgICAgICAgIyBmcm9tIHRoZSBsaW5lcy4K
LSAgICAgICAgICAgIGxpbmVzID0gW3gucnN0cmlwKCkgZm9yIHggaW4gZXhwYW5kX3Jlc3VsdC5z
cGxpdCgnXG4nKV0KLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuJy5qb2luKGxpbmVzKSkK
LSAgICAgICAgICBleGNlcHQgUERETUVycm9yIGFzIGU6Ci0gICAgICAgICAgICByYWlzZSBQRERN
RXJyb3IoJyVzXG4uLi53aGlsZSBleHBhbmRpbmcgIiVzIiBmcm9tIHRoZSBzZWN0aW9uJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcgdGhhdCBzdGFydGVkOlxuICAgTGluZSAlZDogJXMn
ICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5tZXNzYWdlLCBtYWNybywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maXJzdF9saW5lX251bSwgc2VsZi5maXJzdF9s
aW5lKSkKLQotICAgICAgIyBBZGQgdGhlIGVuZGluZyBtYXJrZXIuCi0gICAgICBpZiBsZW4oY2Fw
dHVyZWRfbGluZXMpID09IDE6Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJy8vJSVQRERNLUVYUEFO
RC1FTkQgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRfbGluZXNbMF1bZGly
ZWN0aXZlX2xlbjpdLnN0cmlwKCkpCi0gICAgICBlbHNlOgotICAgICAgICByZXN1bHQuYXBwZW5k
KCcvLyUlUERETS1FWFBBTkQtRU5EICglcyBleHBhbnNpb25zKScgJSBsZW4oY2FwdHVyZWRfbGlu
ZXMpKQotCi0gICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgY2xhc3MgRGVmaW5pdGlvblNlY3Rpb24o
U2VjdGlvbkJhc2UpOgotICAgICIiIlNlY3Rpb24gY29udGFpbmluZyBtYWNybyBkZWZpbml0aW9u
cyIiIgotCi0gICAgZGVmIFRyeUFwcGVuZChzZWxmLCBsaW5lLCBsaW5lX251bSk6Ci0gICAgICBp
ZiBub3QgbGluZS5zdGFydHN3aXRoKCcvLyUnKToKLSAgICAgICAgcmV0dXJuIChGYWxzZSwgRmFs
c2UpCi0gICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy8vJVBERE0nKToKLSAgICAgICAgZGlyZWN0
aXZlID0gbGluZS5zcGxpdCgnICcsIDEpWzBdCi0gICAgICAgIGlmIGRpcmVjdGl2ZSA9PSAiLy8l
UERETS1FWFBBTkQiOgotICAgICAgICAgIHJldHVybiBGYWxzZSwgRmFsc2UKLSAgICAgICAgaWYg
ZGlyZWN0aXZlIG5vdCBpbiAoJy8vJVBERE0tREVGSU5FJywgJy8vJVBERE0tREVGSU5FLUVORCcp
OgotICAgICAgICAgIHJhaXNlIFBERE1FcnJvcignUmFuIGludG8gZGlyZWN0aXZlICgiJXMiLCBs
aW5lICVkKSB3aGlsZSBpbiAiJXMiLicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAoZGly
ZWN0aXZlLCBsaW5lX251bSwgc2VsZi5maXJzdF9saW5lKSkKLSAgICAgIHNlbGYuQXBwZW5kKGxp
bmUpCi0gICAgICByZXR1cm4gKFRydWUsIFRydWUpCi0KLSAgICBkZWYgQmluZE1hY3JvQ29sbGVj
dGlvbihzZWxmLCBtYWNyb19jb2xsZWN0aW9uKToKLSAgICAgIGlmIG1hY3JvX2NvbGxlY3Rpb246
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAjIFBhcnNlIHRoZSBsaW5lcyBhZnRlciBzdHJpcHBp
bmcgdGhlIHByZWZpeC4KLSAgICAgICAgICBtYWNyb19jb2xsZWN0aW9uLlBhcnNlTGluZXMoW3hb
MzpdIGZvciB4IGluIHNlbGYubGluZXNdKQotICAgICAgICBleGNlcHQgUERETUVycm9yIGFzIGU6
Ci0gICAgICAgICAgcmFpc2UgUERETUVycm9yKCclc1xuLi4ud2hpbGUgcGFyc2luZyBzZWN0aW9u
IHRoYXQgc3RhcnRlZDpcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgTGluZSAlZDog
JXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGUubWVzc2FnZSwgc2VsZi5maXJzdF9s
aW5lX251bSwgc2VsZi5maXJzdF9saW5lKSkKLQotICBjbGFzcyBJbXBvcnREZWZpbmVzU2VjdGlv
bihTZWN0aW9uQmFzZSk6Ci0gICAgIiIiU2VjdGlvbiBjb250YWluaW5nIGFuIGltcG9ydCBvZiBQ
RERNLURFRklORVMgZnJvbSBhbiBleHRlcm5hbCBmaWxlLiIiIgotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIGZpcnN0X2xpbmVfbnVtLCBpbXBvcnRfcmVzb2x2ZXIpOgotICAgICAgU291cmNlRmls
ZS5TZWN0aW9uQmFzZS5fX2luaXRfXyhzZWxmLCBmaXJzdF9saW5lX251bSkKLSAgICAgIHNlbGYu
X2ltcG9ydF9yZXNvbHZlciA9IGltcG9ydF9yZXNvbHZlcgotCi0gICAgZGVmIFRyeUFwcGVuZChz
ZWxmLCBsaW5lLCBsaW5lX251bSk6Ci0gICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKCcvLyVQ
RERNLUlNUE9SVC1ERUZJTkVTICcpOgotICAgICAgICByZXR1cm4gKEZhbHNlLCBGYWxzZSkKLSAg
ICAgIGFzc2VydCBzZWxmLm51bV9saW5lc19jYXB0dXJlZCA9PSAwCi0gICAgICBzZWxmLkFwcGVu
ZChsaW5lKQotICAgICAgcmV0dXJuIChUcnVlLCBGYWxzZSkKLQotICAgIGRlZiBCaW5kTWFjcm9D
b2xsZWN0aW9uKHNlbGYsIG1hY3JvX2NvbGxldGlvbik6Ci0gICAgICBpZiBub3QgbWFjcm9fY29s
bGV0aW9uOgotICAgICAgICByZXR1cm4KLSAgICAgIGlmIHNlbGYuX2ltcG9ydF9yZXNvbHZlciBp
cyBOb25lOgotICAgICAgICByYWlzZSBQRERNRXJyb3IoJ0dvdCBhbiBJTVBPUlQtREVGSU5FUyB3
aXRob3V0IGEgcmVzb2x2ZXIgKGxpbmUgJWQpOicKLSAgICAgICAgICAgICAgICAgICAgICAgICcg
IiVzIi4nICUgKHNlbGYuZmlyc3RfbGluZV9udW0sIHNlbGYuZmlyc3RfbGluZSkpCi0gICAgICBp
bXBvcnRfbmFtZSA9IHNlbGYuZmlyc3RfbGluZS5zcGxpdCgnICcsIDEpWzFdLnN0cmlwKCkKLSAg
ICAgIGltcG9ydGVkX2ZpbGUgPSBzZWxmLl9pbXBvcnRfcmVzb2x2ZXIoaW1wb3J0X25hbWUpCi0g
ICAgICBpZiBpbXBvcnRlZF9maWxlIGlzIE5vbmU6Ci0gICAgICAgIHJhaXNlIFBERE1FcnJvcign
UmVzb2x2ZXIgZmFpbGVkIHRvIGZpbmQgIiVzIiAobGluZSAlZCk6JwotICAgICAgICAgICAgICAg
ICAgICAgICAgJyAiJXMiLicgJQotICAgICAgICAgICAgICAgICAgICAgICAgKGltcG9ydF9uYW1l
LCBzZWxmLmZpcnN0X2xpbmVfbnVtLCBzZWxmLmZpcnN0X2xpbmUpKQotICAgICAgdHJ5OgotICAg
ICAgICBpbXBvcnRlZF9zcmNfZmlsZSA9IFNvdXJjZUZpbGUoaW1wb3J0ZWRfZmlsZSwgc2VsZi5f
aW1wb3J0X3Jlc29sdmVyKQotICAgICAgICBpbXBvcnRlZF9zcmNfZmlsZS5fUGFyc2VGaWxlKCkK
LSAgICAgICAgZm9yIHNlY3Rpb24gaW4gaW1wb3J0ZWRfc3JjX2ZpbGUuX3NlY3Rpb25zOgotICAg
ICAgICAgIHNlY3Rpb24uQmluZE1hY3JvQ29sbGVjdGlvbihtYWNyb19jb2xsZXRpb24pCi0gICAg
ICBleGNlcHQgUERETUVycm9yIGFzIGU6Ci0gICAgICAgIHJhaXNlIFBERE1FcnJvcignJXNcbi4u
LndoaWxlIGltcG9ydGluZyBkZWZpbmVzOlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgJyAg
TGluZSAlZDogJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgIChlLm1lc3NhZ2UsIHNlbGYu
Zmlyc3RfbGluZV9udW0sIHNlbGYuZmlyc3RfbGluZSkpCi0KLSAgZGVmIF9QYXJzZUZpbGUoc2Vs
Zik6Ci0gICAgc2VsZi5fc2VjdGlvbnMgPSBbXQotICAgIGxpbmVzID0gc2VsZi5fb3JpZ2luYWxf
Y29udGVudC5zcGxpdGxpbmVzKCkKLSAgICBjdXJfc2VjdGlvbiA9IE5vbmUKLSAgICBmb3IgbGlu
ZV9udW0sIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzLCAxKToKLSAgICAgIGlmIG5vdCBjdXJfc2Vj
dGlvbjoKLSAgICAgICAgY3VyX3NlY3Rpb24gPSBzZWxmLl9NYWtlU2VjdGlvbihsaW5lLCBsaW5l
X251bSkKLSAgICAgIHdhc19hZGRlZCwgYWNjZXB0X21vcmUgPSBjdXJfc2VjdGlvbi5UcnlBcHBl
bmQobGluZSwgbGluZV9udW0pCi0gICAgICBpZiBub3Qgd2FzX2FkZGVkOgotICAgICAgICBjdXJf
c2VjdGlvbiA9IHNlbGYuX01ha2VTZWN0aW9uKGxpbmUsIGxpbmVfbnVtKQotICAgICAgICB3YXNf
YWRkZWQsIGFjY2VwdF9tb3JlID0gY3VyX3NlY3Rpb24uVHJ5QXBwZW5kKGxpbmUsIGxpbmVfbnVt
KQotICAgICAgICBhc3NlcnQgd2FzX2FkZGVkCi0gICAgICBpZiBub3QgYWNjZXB0X21vcmU6Ci0g
ICAgICAgIGN1cl9zZWN0aW9uID0gTm9uZQotCi0gICAgaWYgY3VyX3NlY3Rpb246Ci0gICAgICBj
dXJfc2VjdGlvbi5IaXRFT0YoKQotCi0gIGRlZiBfTWFrZVNlY3Rpb24oc2VsZiwgbGluZSwgbGlu
ZV9udW0pOgotICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJy8vJVBERE0nKToKLSAgICAgIHNl
Y3Rpb24gPSBzZWxmLlRleHRTZWN0aW9uKGxpbmVfbnVtKQotICAgIGVsc2U6Ci0gICAgICBkaXJl
Y3RpdmUgPSBsaW5lLnNwbGl0KCcgJywgMSlbMF0KLSAgICAgIGlmIGRpcmVjdGl2ZSA9PSAnLy8l
UERETS1FWFBBTkQnOgotICAgICAgICBzZWN0aW9uID0gc2VsZi5FeHBhbnNpb25TZWN0aW9uKGxp
bmVfbnVtKQotICAgICAgZWxpZiBkaXJlY3RpdmUgPT0gJy8vJVBERE0tREVGSU5FJzoKLSAgICAg
ICAgc2VjdGlvbiA9IHNlbGYuRGVmaW5pdGlvblNlY3Rpb24obGluZV9udW0pCi0gICAgICBlbGlm
IGRpcmVjdGl2ZSA9PSAnLy8lUERETS1JTVBPUlQtREVGSU5FUyc6Ci0gICAgICAgIHNlY3Rpb24g
PSBzZWxmLkltcG9ydERlZmluZXNTZWN0aW9uKGxpbmVfbnVtLCBzZWxmLl9pbXBvcnRfcmVzb2x2
ZXIpCi0gICAgICBlbHNlOgotICAgICAgICByYWlzZSBQRERNRXJyb3IoJ1VuZXhwZWN0ZWQgbGlu
ZSAlZDogIiVzIi4nICUgKGxpbmVfbnVtLCBsaW5lKSkKLSAgICBzZWxmLl9zZWN0aW9ucy5hcHBl
bmQoc2VjdGlvbikKLSAgICByZXR1cm4gc2VjdGlvbgotCi0gIGRlZiBQcm9jZXNzQ29udGVudChz
ZWxmLCBzdHJpcF9leHBhbnNpb249RmFsc2UpOgotICAgICIiIlByb2Nlc3NlcyB0aGUgZmlsZSBj
b250ZW50cy4iIiIKLSAgICBzZWxmLl9QYXJzZUZpbGUoKQotICAgIGlmIHN0cmlwX2V4cGFuc2lv
bjoKLSAgICAgICMgV2l0aG91dCBhIGNvbGxlY3Rpb24gdGhlIGV4cGFuc2lvbnMgYmVjb21lIGJs
YW5rLCByZW1vdmluZyB0aGVtLgotICAgICAgY29sbGVjdGlvbiA9IE5vbmUKLSAgICBlbHNlOgot
ICAgICAgY29sbGVjdGlvbiA9IE1hY3JvQ29sbGVjdGlvbigpCi0gICAgZm9yIHNlY3Rpb24gaW4g
c2VsZi5fc2VjdGlvbnM6Ci0gICAgICBzZWN0aW9uLkJpbmRNYWNyb0NvbGxlY3Rpb24oY29sbGVj
dGlvbikKLSAgICByZXN1bHQgPSAnJwotICAgIGZvciBzZWN0aW9uIGluIHNlbGYuX3NlY3Rpb25z
OgotICAgICAgcmVzdWx0ICs9IHNlY3Rpb24udGV4dAotICAgIHNlbGYuX3Byb2Nlc3NlZF9jb250
ZW50ID0gcmVzdWx0Ci0KLSAgQHByb3BlcnR5Ci0gIGRlZiBvcmlnaW5hbF9jb250ZW50KHNlbGYp
OgotICAgIHJldHVybiBzZWxmLl9vcmlnaW5hbF9jb250ZW50Ci0KLSAgQHByb3BlcnR5Ci0gIGRl
ZiBwcm9jZXNzZWRfY29udGVudChzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fcHJvY2Vzc2VkX2Nv
bnRlbnQKLQotCi1kZWYgbWFpbihhcmdzKToKLSAgdXNhZ2UgPSAnJXByb2cgW09QVElPTlNdIFBB
VEggLi4uJwotICBkZXNjcmlwdGlvbiA9ICgKLSAgICAgICdQcm9jZXNzZXMgUERETSBkaXJlY3Rp
dmVzIGluIHRoZSBnaXZlbiBwYXRocyBhbmQgd3JpdGUgdGhlbSBiYWNrIG91dC4nCi0gICkKLSAg
cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlLCBkZXNjcmlwdGlvbj1k
ZXNjcmlwdGlvbikKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy0tZHJ5LXJ1bicsCi0gICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAg
ICAgICAgICAgIGhlbHA9J0RvblwndCB3cml0ZSBiYWNrIHRvIHRoZSBmaWxlKHMpLCBqdXN0IHJl
cG9ydCBpZiB0aGUnCi0gICAgICAgICAgICAgICAgICAgICcgY29udGVudHMgbmVlZHMgYW4gdXBk
YXRlIGFuZCBleGl0IHdpdGggYSB2YWx1ZSBvZiAxLicpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCct
LXZlcmJvc2UnLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBhY3Rpb249J3N0
b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSdSZXBvcnRzIGlzIGEgZmlsZSBp
cyBhbHJlYWR5IGN1cnJlbnQuJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy0tY29sbGFwc2UnLAot
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBhY3Rpb249J3N0b3JlX3RydWUnLAot
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdSZW1vdmVzIGFsbCB0aGUgZ2VuZXJhdGVkIGNvZGUu
JykKLSAgb3B0cywgZXh0cmFfYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCi0KLSAgaWYg
bm90IGV4dHJhX2FyZ3M6Ci0gICAgcGFyc2VyLmVycm9yKCdOZWVkIGF0bGVhc3Qgb25lIGZpbGUg
dG8gcHJvY2VzcycpCi0KLSAgcmVzdWx0ID0gMAotICBmb3IgYV9wYXRoIGluIGV4dHJhX2FyZ3M6
Ci0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFfcGF0aCk6Ci0gICAgICBzeXMuc3RkZXJyLndy
aXRlKCdFUlJPUjogRmlsZSBub3QgZm91bmQ6ICVzXG4nICUgYV9wYXRoKQotICAgICAgcmV0dXJu
IDEwMAotCi0gICAgZGVmIF9JbXBvcnRSZXNvbHZlcihuYW1lKToKLSAgICAgICMgcmVzb2x2ZSBi
YXNlZCBvbiB0aGUgZmlsZSBiZWluZyByZWFkLgotICAgICAgYV9kaXIgPSBvcy5wYXRoLmRpcm5h
bWUoYV9wYXRoKQotICAgICAgaW1wb3J0X3BhdGggPSBvcy5wYXRoLmpvaW4oYV9kaXIsIG5hbWUp
Ci0gICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW1wb3J0X3BhdGgpOgotICAgICAgICByZXR1
cm4gTm9uZQotICAgICAgcmV0dXJuIG9wZW4oaW1wb3J0X3BhdGgsICdyJykKLQotICAgIHdpdGgg
b3BlbihhX3BhdGgsICdyJykgYXMgZjoKLSAgICAgIHNyY19maWxlID0gU291cmNlRmlsZShmLCBf
SW1wb3J0UmVzb2x2ZXIpCi0KLSAgICB0cnk6Ci0gICAgICBzcmNfZmlsZS5Qcm9jZXNzQ29udGVu
dChzdHJpcF9leHBhbnNpb249b3B0cy5jb2xsYXBzZSkKLSAgICBleGNlcHQgUERETUVycm9yIGFz
IGU6Ci0gICAgICBzeXMuc3RkZXJyLndyaXRlKCdFUlJPUjogJXNcbi4uLldoaWxlIHByb2Nlc3Np
bmcgIiVzIlxuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgIChlLm1lc3NhZ2UsIGFfcGF0aCkp
Ci0gICAgICByZXR1cm4gMTAxCi0KLSAgICBpZiBzcmNfZmlsZS5wcm9jZXNzZWRfY29udGVudCAh
PSBzcmNfZmlsZS5vcmlnaW5hbF9jb250ZW50OgotICAgICAgaWYgbm90IG9wdHMuZHJ5X3J1bjoK
LSAgICAgICAgcHJpbnQgJ1VwZGF0aW5nIGZvciAiJXMiLicgJSBhX3BhdGgKLSAgICAgICAgd2l0
aCBvcGVuKGFfcGF0aCwgJ3cnKSBhcyBmOgotICAgICAgICAgIGYud3JpdGUoc3JjX2ZpbGUucHJv
Y2Vzc2VkX2NvbnRlbnQpCi0gICAgICBlbHNlOgotICAgICAgICAjIFNwZWNpYWwgcmVzdWx0IHRv
IGluZGljYXRlIHRoaW5ncyBuZWVkIHVwZGF0aW5nLgotICAgICAgICBwcmludCAnVXBkYXRlIG5l
ZWRlZCBmb3IgIiVzIi4nICUgYV9wYXRoCi0gICAgICAgIHJlc3VsdCA9IDEKLSAgICBlbGlmIG9w
dHMudmVyYm9zZToKLSAgICAgIHByaW50ICdObyB1cGRhdGUgZm9yICIlcyIuJyAlIGFfcGF0aAot
Ci0gIHJldHVybiByZXN1bHQKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMu
ZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvRGV2VG9vbHMv
cGRkbV90ZXN0cy5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9EZXZUb29scy9wZGRtX3Rlc3RzLnB5CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4YTczYjg0MjdiY2Y1ZWQ1MGY4NTg0Mjg0MmNiZWQzZTdj
YmJmNTdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2Jq
ZWN0aXZlYy9EZXZUb29scy9wZGRtX3Rlc3RzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTE1ICsw
LDAgQEAKLSMhIC91c3IvYmluL3B5dGhvbgotIwotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoK
LSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJUZXN0cyBmb3IgcGRkbS5w
eS4iIiIKLQotaW1wb3J0IGlvCi1pbXBvcnQgdW5pdHRlc3QKLQotaW1wb3J0IHBkZG0KLQotCi1j
bGFzcyBUZXN0UGFyc2luZ01hY3Jvcyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RQ
YXJzZUVtcHR5KHNlbGYpOgotICAgIGYgPSBpby5TdHJpbmdJTyh1JycpCi0gICAgcmVzdWx0ID0g
cGRkbS5NYWNyb0NvbGxlY3Rpb24oZikKLSAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQu
X21hY3JvcyksIDApCi0KLSAgZGVmIHRlc3RQYXJzZU9uZShzZWxmKToKLSAgICBmID0gaW8uU3Ry
aW5nSU8odSIiIlBERE0tREVGSU5FIGZvbyggKQotYm9keSIiIikKLSAgICByZXN1bHQgPSBwZGRt
Lk1hY3JvQ29sbGVjdGlvbihmKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5fbWFj
cm9zKSwgMSkKLSAgICBtYWNybyA9IHJlc3VsdC5fbWFjcm9zLmdldCgnZm9vJykKLSAgICBzZWxm
LmFzc2VydElzTm90Tm9uZShtYWNybykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhtYWNyby5uYW1l
LCAnZm9vJykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhtYWNyby5hcmdzLCB0dXBsZSgpKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKG1hY3JvLmJvZHksICdib2R5JykKLQotICBkZWYgdGVzdFBhcnNl
R2VuZXJhbChzZWxmKToKLSAgICAjIFRlc3RzIG11bHRpcGxlIGRlZmluZXMsIHNwYWNlcyBpbiBh
bGwgcGxhY2VzLCBldGMuCi0gICAgZiA9IGlvLlN0cmluZ0lPKHUiIiIKLVBERE0tREVGSU5FIG5v
QXJncyggKQotYm9keTEKLWJvZHkyCi0KLVBERE0tREVGSU5FLUVORAotCi1QRERNLURFRklORSBv
bmVBcmcoZm9vKQotYm9keTMKLVBERE0tREVGSU5FICB0d29BcmdzKCBiYXJfICwgYmF6ICkKLWJv
ZHk0Ci1ib2R5NSIiIikKLSAgICByZXN1bHQgPSBwZGRtLk1hY3JvQ29sbGVjdGlvbihmKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5fbWFjcm9zKSwgMykKLSAgICBtYWNybyA9IHJl
c3VsdC5fbWFjcm9zLmdldCgnbm9BcmdzJykKLSAgICBzZWxmLmFzc2VydElzTm90Tm9uZShtYWNy
bykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhtYWNyby5uYW1lLCAnbm9BcmdzJykKLSAgICBzZWxm
LmFzc2VydEVxdWFscyhtYWNyby5hcmdzLCB0dXBsZSgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KG1hY3JvLmJvZHksICdib2R5MVxuYm9keTJcbicpCi0gICAgbWFjcm8gPSByZXN1bHQuX21hY3Jv
cy5nZXQoJ29uZUFyZycpCi0gICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobWFjcm8pCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbHMobWFjcm8ubmFtZSwgJ29uZUFyZycpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bHMobWFjcm8uYXJncywgKCdmb28nLCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMobWFjcm8uYm9k
eSwgJ2JvZHkzJykKLSAgICBtYWNybyA9IHJlc3VsdC5fbWFjcm9zLmdldCgndHdvQXJncycpCi0g
ICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobWFjcm8pCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMobWFj
cm8ubmFtZSwgJ3R3b0FyZ3MnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hY3JvLmFyZ3MsICgn
YmFyXycsICdiYXonKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhtYWNyby5ib2R5LCAnYm9keTRc
bmJvZHk1JykKLSAgICAjIEFkZCBpbnRvIGV4aXN0aW5nIGNvbGxlY3Rpb24KLSAgICBmID0gaW8u
U3RyaW5nSU8odSIiIgotUERETS1ERUZJTkUgYW5vdGhlcihhLGIsYykKLWJvZHkxCi1ib2R5MiIi
IikKLSAgICByZXN1bHQuUGFyc2VJbnB1dChmKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJl
c3VsdC5fbWFjcm9zKSwgNCkKLSAgICBtYWNybyA9IHJlc3VsdC5fbWFjcm9zLmdldCgnYW5vdGhl
cicpCi0gICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobWFjcm8pCi0gICAgc2VsZi5hc3NlcnRFcXVh
bHMobWFjcm8ubmFtZSwgJ2Fub3RoZXInKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hY3JvLmFy
Z3MsICgnYScsICdiJywgJ2MnKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhtYWNyby5ib2R5LCAn
Ym9keTFcbmJvZHkyJykKLQotICBkZWYgdGVzdFBhcnNlRGlyZWN0aXZlSXNzdWVzKHNlbGYpOgot
ICAgIHRlc3RfbGlzdCA9IFsKLSAgICAgICMgVW5rbm93biBkaXJlY3RpdmUKLSAgICAgICh1J1BE
RE0tREVGSU5FIGZvbygpXG5ib2R5XG5QRERNLURFRklORUQgZm9vXG5iYXonLAotICAgICAgICdI
aXQgYSBsaW5lIHdpdGggYW4gdW5rbm93biBkaXJlY3RpdmU6ICcpLAotICAgICAgIyBFbmQgd2l0
aG91dCBiZWdpbgotICAgICAgKHUnUERETS1ERUZJTkUgZm9vKClcbmJvZHlcblBERE0tREVGSU5F
LUVORFxuUERETS1ERUZJTkUtRU5EXG4nLAotICAgICAgICdHb3QgREVGSU5FLUVORCBkaXJlY3Rp
dmUgd2l0aG91dCBhbiBhY3RpdmUgbWFjcm86ICcpLAotICAgICAgIyBMaW5lIG5vdCBpbiBtYWNy
byBibG9jawotICAgICAgKHUnUERETS1ERUZJTkUgZm9vKClcbmJvZHlcblBERE0tREVGSU5FLUVO
RFxubXVtYmxlXG4nLAotICAgICAgICdIaXQgYSBsaW5lIHRoYXQgd2FzblwndCBhIGRpcmVjdGl2
ZSBhbmQgbm8gb3BlbiBtYWNybyBkZWZpbml0aW9uOiAnKSwKLSAgICAgICMgUmVkZWZpbmUgbWFj
cm8KLSAgICAgICh1J1BERE0tREVGSU5FIGZvbygpXG5ib2R5XG5QRERNLURFRklORSBmb28oYSlc
bm11bWJsZVxuJywKLSAgICAgICAnQXR0ZW1wdCB0byByZWRlZmluZSBtYWNybzogJyksCi0gICAg
XQotICAgIGZvciBpZHgsIChpbnB1dF9zdHIsIGV4cGVjdGVkX3ByZWZpeCkgaW4gZW51bWVyYXRl
KHRlc3RfbGlzdCwgMSk6Ci0gICAgICBmID0gaW8uU3RyaW5nSU8oaW5wdXRfc3RyKQotICAgICAg
dHJ5OgotICAgICAgICByZXN1bHQgPSBwZGRtLk1hY3JvQ29sbGVjdGlvbihmKQotICAgICAgICBz
ZWxmLmZhaWwoJ1Nob3VsZCB0aHJvdyBleGNlcHRpb24sIGVudHJ5ICVkJyAlIGlkeCkKLSAgICAg
IGV4Y2VwdCBwZGRtLlBERE1FcnJvciBhcyBlOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5t
ZXNzYWdlLnN0YXJ0c3dpdGgoZXhwZWN0ZWRfcHJlZml4KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICdFbnRyeSAlZCBmYWlsZWQ6ICVyJyAlIChpZHgsIGUpKQotCi0gIGRlZiB0ZXN0UGFyc2VC
ZWdpbklzc3VlcyhzZWxmKToKLSAgICB0ZXN0X2xpc3QgPSBbCi0gICAgICAjIDEuIE5vIG5hbWUK
LSAgICAgICh1J1BERE0tREVGSU5FXG5tdW1ibGUnLAotICAgICAgICdGYWlsZWQgdG8gcGFyc2Ug
bWFjcm8gZGVmaW5pdGlvbjogJyksCi0gICAgICAjIDIuIE5vIG5hbWUgKHdpdGggc3BhY2VzKQot
ICAgICAgKHUnUERETS1ERUZJTkUgIFxubXVtYmxlJywKLSAgICAgICAnRmFpbGVkIHRvIHBhcnNl
IG1hY3JvIGRlZmluaXRpb246ICcpLAotICAgICAgIyAzLiBObyBvcGVuIHBhcmVuCi0gICAgICAo
dSdQRERNLURFRklORSAgZm9vXG5tdW1ibGUnLAotICAgICAgICdGYWlsZWQgdG8gcGFyc2UgbWFj
cm8gZGVmaW5pdGlvbjogJyksCi0gICAgICAjIDQuIE5vIGNsb3NlIHBhcmVuCi0gICAgICAodSdQ
RERNLURFRklORSBmb28oXG5tdW1ibGUnLAotICAgICAgICdGYWlsZWQgdG8gcGFyc2UgbWFjcm8g
ZGVmaW5pdGlvbjogJyksCi0gICAgICAjIDUuIE5vIGNsb3NlIHBhcmVuICh3aXRoIGFyZ3MpCi0g
ICAgICAodSdQRERNLURFRklORSBmb28oYSwgYlxubXVtYmxlJywKLSAgICAgICAnRmFpbGVkIHRv
IHBhcnNlIG1hY3JvIGRlZmluaXRpb246ICcpLAotICAgICAgIyA2LiBObyBuYW1lIGJlZm9yZSBh
cmdzCi0gICAgICAodSdQRERNLURFRklORSAgKGEsIGIpXG5tdW1ibGUnLAotICAgICAgICdGYWls
ZWQgdG8gcGFyc2UgbWFjcm8gZGVmaW5pdGlvbjogJyksCi0gICAgICAjIDcuIE5vIG5hbWUgYmVm
b3JlIGFyZ3MKLSAgICAgICh1J1BERE0tREVGSU5FIGZvbyBiYXIoYSwgYilcbm11bWJsZScsCi0g
ICAgICAgJ0ZhaWxlZCB0byBwYXJzZSBtYWNybyBkZWZpbml0aW9uOiAnKSwKLSAgICAgICMgOC4g
RW1wdHkgYXJnIG5hbWUKLSAgICAgICh1J1BERE0tREVGSU5FIGZvbyhhLCAsYilcbm11bWJsZScs
Ci0gICAgICAgJ0VtcHR5IGFyZyBuYW1lIGluIG1hY3JvIGRlZmluaXRpb246ICcpLAotICAgICAg
KHUnUERETS1ERUZJTkUgZm9vKGEsLGIpXG5tdW1ibGUnLAotICAgICAgICdFbXB0eSBhcmcgbmFt
ZSBpbiBtYWNybyBkZWZpbml0aW9uOiAnKSwKLSAgICAgICMgMTAuIER1cGxpY2F0ZSBuYW1lCi0g
ICAgICAodSdQRERNLURFRklORSBmb28oYSxiLGEsYylcbm11bWJsZScsCi0gICAgICAgJ0FyZyBu
YW1lICJhIiB1c2VkIG1vcmUgdGhhbiBvbmNlIGluIG1hY3JvIGRlZmluaXRpb246ICcpLAotICAg
ICAgIyAxMS4gSW52YWxpZCBhcmcgbmFtZQotICAgICAgKHUnUERETS1ERUZJTkUgZm9vKGEgYixj
KVxubXVtYmxlJywKLSAgICAgICAnSW52YWxpZCBhcmcgbmFtZSAiYSBiIiBpbiBtYWNybyBkZWZp
bml0aW9uOiAnKSwKLSAgICAgICh1J1BERE0tREVGSU5FIGZvbyhhLmIsYylcbm11bWJsZScsCi0g
ICAgICAgJ0ludmFsaWQgYXJnIG5hbWUgImEuYiIgaW4gbWFjcm8gZGVmaW5pdGlvbjogJyksCi0g
ICAgICAodSdQRERNLURFRklORSBmb28oYS1iLGMpXG5tdW1ibGUnLAotICAgICAgICdJbnZhbGlk
IGFyZyBuYW1lICJhLWIiIGluIG1hY3JvIGRlZmluaXRpb246ICcpLAotICAgICAgKHUnUERETS1E
RUZJTkUgZm9vKGEsYixjLilcbm11bWJsZScsCi0gICAgICAgJ0ludmFsaWQgYXJnIG5hbWUgImMu
IiBpbiBtYWNybyBkZWZpbml0aW9uOiAnKSwKLSAgICAgICMgMTUuIEV4dHJhIHN0dWZmIGFmdGVy
IHRoZSBuYW1lCi0gICAgICAodSdQRERNLURFRklORSBmb28oYSxjKSBmb29cbm11bWJsZScsCi0g
ICAgICAgJ0ZhaWxlZCB0byBwYXJzZSBtYWNybyBkZWZpbml0aW9uOiAnKSwKLSAgICAgICh1J1BE
RE0tREVGSU5FIGZvbyhhLGMpIGZvbylcbm11bWJsZScsCi0gICAgICAgJ0ZhaWxlZCB0byBwYXJz
ZSBtYWNybyBkZWZpbml0aW9uOiAnKSwKLSAgICBdCi0gICAgZm9yIGlkeCwgKGlucHV0X3N0ciwg
ZXhwZWN0ZWRfcHJlZml4KSBpbiBlbnVtZXJhdGUodGVzdF9saXN0LCAxKToKLSAgICAgIGYgPSBp
by5TdHJpbmdJTyhpbnB1dF9zdHIpCi0gICAgICB0cnk6Ci0gICAgICAgIHJlc3VsdCA9IHBkZG0u
TWFjcm9Db2xsZWN0aW9uKGYpCi0gICAgICAgIHNlbGYuZmFpbCgnU2hvdWxkIHRocm93IGV4Y2Vw
dGlvbiwgZW50cnkgJWQnICUgaWR4KQotICAgICAgZXhjZXB0IHBkZG0uUERETUVycm9yIGFzIGU6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLm1lc3NhZ2Uuc3RhcnRzd2l0aChleHBlY3RlZF9w
cmVmaXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgJ0VudHJ5ICVkIGZhaWxlZDogJXInICUg
KGlkeCwgZSkpCi0KLQotY2xhc3MgVGVzdEV4cGFuZGluZ01hY3Jvcyh1bml0dGVzdC5UZXN0Q2Fz
ZSk6Ci0KLSAgZGVmIHRlc3RFeHBhbmRCYXNpY3Moc2VsZik6Ci0gICAgZiA9IGlvLlN0cmluZ0lP
KHUiIiIKLVBERE0tREVGSU5FIG5vQXJncyggKQotYm9keTEKLWJvZHkyCi0KLVBERE0tREVGSU5F
LUVORAotCi1QRERNLURFRklORSBvbmVBcmcoYSkKLWJvZHkzIGEKLQotUERETS1ERUZJTkUtRU5E
Ci0KLVBERE0tREVGSU5FIHR3b0FyZ3MoYixjKQotYm9keTQgYiBjCi1ib2R5NQotUERETS1ERUZJ
TkUtRU5ECi0KLSIiIikKLSAgICBtYyA9IHBkZG0uTWFjcm9Db2xsZWN0aW9uKGYpCi0gICAgdGVz
dF9saXN0ID0gWwotICAgICAgKHUnbm9BcmdzKCknLAotICAgICAgICdib2R5MVxuYm9keTJcbicp
LAotICAgICAgKHUnb25lQXJnKHdlZSknLAotICAgICAgICdib2R5MyB3ZWVcbicpLAotICAgICAg
KHUndHdvQXJncyhoYXZpbmcgc29tZSwgZnVuKScsCi0gICAgICAgJ2JvZHk0IGhhdmluZyBzb21l
IGZ1blxuYm9keTUnKSwKLSAgICAgICMgT25lIGFyZywgcGFzcyBlbXB0eS4KLSAgICAgICh1J29u
ZUFyZygpJywKLSAgICAgICAnYm9keTMgXG4nKSwKLSAgICAgICMgVHdvIGFyZ3MsIGdldHMgZW1w
dHkgaW4gZWFjaCBzbG90LgotICAgICAgKHUndHdvQXJncygsIGVtcHR5KScsCi0gICAgICAgJ2Jv
ZHk0ICBlbXB0eVxuYm9keTUnKSwKLSAgICAgICh1J3R3b0FyZ3MoZW1wdHksICknLAotICAgICAg
ICdib2R5NCBlbXB0eSBcbmJvZHk1JyksCi0gICAgICAodSd0d29BcmdzKCwgKScsCi0gICAgICAg
J2JvZHk0ICBcbmJvZHk1JyksCi0gICAgXQotICAgIGZvciBpZHgsIChpbnB1dF9zdHIsIGV4cGVj
dGVkKSBpbiBlbnVtZXJhdGUodGVzdF9saXN0LCAxKToKLSAgICAgIHJlc3VsdCA9IG1jLkV4cGFu
ZChpbnB1dF9zdHIpCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICdFbnRyeSAlZCAtLVxuICAgICAgIFJlc3VsdDogJXJcbiAg
ICAgRXhwZWN0ZWQ6ICVyJyAlCi0gICAgICAgICAgICAgICAgICAgICAgIChpZHgsIHJlc3VsdCwg
ZXhwZWN0ZWQpKQotCi0gIGRlZiB0ZXN0RXhwYW5kQXJnT3B0aW9ucyhzZWxmKToKLSAgICBmID0g
aW8uU3RyaW5nSU8odSIiIgotUERETS1ERUZJTkUgYmFyKGEpCi1hLWEkUy1hJGwtYSRMLWEkdS1h
JFUKLVBERE0tREVGSU5FLUVORAotIiIiKQotICAgIG1jID0gcGRkbS5NYWNyb0NvbGxlY3Rpb24o
ZikKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWMuRXhwYW5kKCdiYXIoeFl6KScpLCAneFl6LSAg
IC14WXoteHl6LVhZei1YWVonKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWMuRXhwYW5kKCdiYXIo
TW5vUCknKSwgJ01ub1AtICAgIC1tbm9QLW1ub3AtTW5vUC1NTk9QJykKLSAgICAjIFRlc3QgZW1w
dHkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1jLkV4cGFuZCgnYmFyKCknKSwgJy0tLS0tJykKLQot
ICBkZWYgdGVzdEV4cGFuZFNpbXBsZU1hY3JvRXJyb3JzKHNlbGYpOgotICAgIGYgPSBpby5TdHJp
bmdJTyh1IiIiCi1QRERNLURFRklORSBmb28oYSwgYikKLTxhLXo+Ci1QRERNLURFRklORSBiYXoo
YSkKLWEgLSBhJHoKLSIiIikKLSAgICBtYyA9IHBkZG0uTWFjcm9Db2xsZWN0aW9uKGYpCi0gICAg
dGVzdF9saXN0ID0gWwotICAgICAgIyAxLiBVbmtub3duIG1hY3JvCi0gICAgICAodSdiYXIoKScs
Ci0gICAgICAgJ05vIG1hY3JvIG5hbWVkICJiYXIiLicpLAotICAgICAgKHUnYmFyKGEpJywKLSAg
ICAgICAnTm8gbWFjcm8gbmFtZWQgImJhciIuJyksCi0gICAgICAjIDMuIEFyZyBtaXNtYXRjaAot
ICAgICAgKHUnZm9vKCknLAotICAgICAgICdFeHBlY3RlZCAyIGFyZ3MsIGdvdDogImZvbygpIi4n
KSwKLSAgICAgICh1J2ZvbyhhIGIpJywKLSAgICAgICAnRXhwZWN0ZWQgMiBhcmdzLCBnb3Q6ICJm
b28oYSBiKSIuJyksCi0gICAgICAodSdmb28oYSxiLGMpJywKLSAgICAgICAnRXhwZWN0ZWQgMiBh
cmdzLCBnb3Q6ICJmb28oYSxiLGMpIi4nKSwKLSAgICAgICMgNi4gVW5rbm93biBvcHRpb24gaW4g
ZXhwYW5zaW9uCi0gICAgICAodSdiYXoobXVtYmxlKScsCi0gICAgICAgJ1Vua25vd24gYXJnIG9w
dGlvbiAiYSR6IiB3aGlsZSBleHBhbmRpbmcgImJheihtdW1ibGUpIi4nKSwKLSAgICBdCi0gICAg
Zm9yIGlkeCwgKGlucHV0X3N0ciwgZXhwZWN0ZWRfZXJyKSBpbiBlbnVtZXJhdGUodGVzdF9saXN0
LCAxKToKLSAgICAgIHRyeToKLSAgICAgICAgcmVzdWx0ID0gbWMuRXhwYW5kKGlucHV0X3N0cikK
LSAgICAgICAgc2VsZi5mYWlsKCdTaG91bGQgdGhyb3cgZXhjZXB0aW9uLCBlbnRyeSAlZCcgJSBp
ZHgpCi0gICAgICBleGNlcHQgcGRkbS5QRERNRXJyb3IgYXMgZToKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChlLm1lc3NhZ2UsIGV4cGVjdGVkX2VyciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICdFbnRyeSAlZCBmYWlsZWQ6ICVyJyAlIChpZHgsIGUpKQotCi0gIGRlZiB0ZXN0RXhwYW5kUmVm
ZXJlbmNlcyhzZWxmKToKLSAgICBmID0gaW8uU3RyaW5nSU8odSIiIgotUERETS1ERUZJTkUgU3Rh
cnRJdCgpCi1mb28oYWJjLCBkZWYpCi1mb28oZ2hpLCBqa2wpCi1QRERNLURFRklORSBmb28oYSwg
YikKLWJhcihhLCBpbnQpCi1iYXIoYiwgTlNTdHJpbmcgKikKLVBERE0tREVGSU5FIGJhcihuLCB0
KQotLSAodCluOwotLSAodm9pZClzZXQjI24kdSMjOih0KXZhbHVlOwotCi0iIiIpCi0gICAgbWMg
PSBwZGRtLk1hY3JvQ29sbGVjdGlvbihmKQotICAgIGV4cGVjdGVkID0gIiIiLSAoaW50KWFiYzsK
LS0gKHZvaWQpc2V0QWJjOihpbnQpdmFsdWU7Ci0KLS0gKE5TU3RyaW5nICopZGVmOwotLSAodm9p
ZClzZXREZWY6KE5TU3RyaW5nICopdmFsdWU7Ci0KLS0gKGludClnaGk7Ci0tICh2b2lkKXNldEdo
aTooaW50KXZhbHVlOwotCi0tIChOU1N0cmluZyAqKWprbDsKLS0gKHZvaWQpc2V0SmtsOihOU1N0
cmluZyAqKXZhbHVlOwotIiIiCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtYy5FeHBhbmQoJ1N0YXJ0
SXQoKScpLCBleHBlY3RlZCkKLQotICBkZWYgdGVzdENhdGNoUmVjdXJzaW9uKHNlbGYpOgotICAg
IGYgPSBpby5TdHJpbmdJTyh1IiIiCi1QRERNLURFRklORSBmb28oYSwgYikKLWJhcigxLCBhKQot
YmFyKDIsIGIpCi1QRERNLURFRklORSBiYXIoeCwgeSkKLWZvbyh4LCB5KQotIiIiKQotICAgIG1j
ID0gcGRkbS5NYWNyb0NvbGxlY3Rpb24oZikKLSAgICB0cnk6Ci0gICAgICByZXN1bHQgPSBtYy5F
eHBhbmQoJ2ZvbyhBLEIpJykKLSAgICAgIHNlbGYuZmFpbCgnU2hvdWxkIHRocm93IGV4Y2VwdGlv
biwgZW50cnkgJWQnICUgaWR4KQotICAgIGV4Y2VwdCBwZGRtLlBERE1FcnJvciBhcyBlOgotICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChlLm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICdG
b3VuZCBtYWNybyByZWN1c2lvbiwgaW52b2tpbmcgImZvbygxLCBBKSI6XG4uLi53aGlsZSBleHBh
bmRpbmcgImJhcigxLCBBKSIuXG4uLi53aGlsZSBleHBhbmRpbmcgImZvbyhBLEIpIi4nKQotCi0K
LWNsYXNzIFRlc3RQYXJzaW5nU291cmNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVz
dEJhc2ljUGFyc2Uoc2VsZik6Ci0gICAgdGVzdF9saXN0ID0gWwotICAgICAgIyAxLiBubyBkaXJl
Y3RpdmVzCi0gICAgICAodSdhXG5iXG5jJywKLSAgICAgICAoMywpICksCi0gICAgICAjIDIuIE9u
ZSBkZWZpbmUKLSAgICAgICh1J2Fcbi8vJVBERE0tREVGSU5FIGZvbygpXG4vLyVib2R5XG5jJywK
LSAgICAgICAoMSwgMiwgMSkgKSwKLSAgICAgICMgMy4gVHdvIGRlZmluZXMKLSAgICAgICh1J2Fc
bi8vJVBERE0tREVGSU5FIGZvbygpXG4vLyVib2R5XG4vLyVQRERNLURFRklORSBiYXIoKVxuLy8l
Ym9keTJcbmMnLAotICAgICAgICgxLCA0LCAxKSApLAotICAgICAgIyA0LiBUd28gZGVmaW5lcyB3
aXRoIGVuZHMKLSAgICAgICh1J2Fcbi8vJVBERE0tREVGSU5FIGZvbygpXG4vLyVib2R5XG4vLyVQ
RERNLURFRklORS1FTkRcbicKLSAgICAgICB1Jy8vJVBERE0tREVGSU5FIGJhcigpXG4vLyVib2R5
MlxuLy8lUERETS1ERUZJTkUtRU5EXG5jJywKLSAgICAgICAoMSwgNiwgMSkgKSwKLSAgICAgICMg
NS4gT25lIGV4cGFuZCwgb25lIGRlZmluZSAodGhhdCBydW5zIHRvIGVuZCBvZiBmaWxlKQotICAg
ICAgKHUnYVxuLy8lUERETS1FWFBBTkQgZm9vKClcbmJvZHlcbi8vJVBERE0tRVhQQU5ELUVORFxu
JwotICAgICAgIHUnLy8lUERETS1ERUZJTkUgYmFyKClcbi8vJWJvZHkyXG4nLAotICAgICAgICgx
LCAxLCAyKSApLAotICAgICAgIyA2LiBPbmUgZGVmaW5lIGVuZGVkIHdpdGggYW4gZXhwYW5kLgot
ICAgICAgKHUnYVxuYlxuLy8lUERETS1ERUZJTkUgYmFyKClcbi8vJWJvZHkyXG4nCi0gICAgICAg
dScvLyVQRERNLUVYUEFORCBiYXIoKVxuYm9keTJcbi8vJVBERE0tRVhQQU5ELUVORFxuJywKLSAg
ICAgICAoMiwgMiwgMSkgKSwKLSAgICAgICMgNy4gVHdvIGV4cGFuZHMgKG9uZSBlbmQpLCBvbmUg
ZGVmaW5lLgotICAgICAgKHUnYVxuLy8lUERETS1FWFBBTkQgZm9vKDEpXG5ib2R5XG4vLyVQRERN
LUVYUEFORCBmb28oMilcbmJvZHkyXG4vLyVQRERNLUVYUEFORC1FTkRcbicKLSAgICAgICB1Jy8v
JVBERE0tREVGSU5FIGZvbygpXG4vLyVib2R5MlxuJywKLSAgICAgICAoMSwgMiwgMikgKSwKLSAg
ICBdCi0gICAgZm9yIGlkeCwgKGlucHV0X3N0ciwgbGluZV9jb3VudHMpIGluIGVudW1lcmF0ZSh0
ZXN0X2xpc3QsIDEpOgotICAgICAgZiA9IGlvLlN0cmluZ0lPKGlucHV0X3N0cikKLSAgICAgIHNm
ID0gcGRkbS5Tb3VyY2VGaWxlKGYpCi0gICAgICBzZi5fUGFyc2VGaWxlKCkKLSAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobGVuKHNmLl9zZWN0aW9ucyksIGxlbihsaW5lX2NvdW50cyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICdFbnRyeSAlZCAtLSAlZCAhPSAlZCcgJQotICAgICAgICAgICAgICAg
ICAgICAgICAoaWR4LCBsZW4oc2YuX3NlY3Rpb25zKSwgbGVuKGxpbmVfY291bnRzKSkpCi0gICAg
ICBmb3IgaWR4MiwgKHNlYywgZXhwZWN0ZWQpIGluIGVudW1lcmF0ZSh6aXAoc2YuX3NlY3Rpb25z
LCBsaW5lX2NvdW50cyksIDEpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYy5udW1fbGlu
ZXNfY2FwdHVyZWQsIGV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICdFbnRyeSAl
ZCwgc2VjdGlvbiAlZCAtLSAlZCAhPSAlZCcgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChp
ZHgsIGlkeDIsIHNlYy5udW1fbGluZXNfY2FwdHVyZWQsIGV4cGVjdGVkKSkKLQotICBkZWYgdGVz
dEVycm9ycyhzZWxmKToKLSAgICB0ZXN0X2xpc3QgPSBbCi0gICAgICAjIDEuIERpcmVjdGl2ZSB3
aXRoaW4gZXhwYW5zaW9uCi0gICAgICAodScvLyVQRERNLUVYUEFORCBhKClcbi8vJVBERE0tQk9H
VVMnLAotICAgICAgICdSYW4gaW50byBkaXJlY3RpdmUgKCIvLyVQRERNLUJPR1VTIiwgbGluZSAy
KSB3aGlsZSBpbiAiLy8lUERETS1FWFBBTkQgYSgpIi4nKSwKLSAgICAgICh1Jy8vJVBERE0tRVhQ
QU5EIGEoKVxuLy8lUERETS1ERUZJTkUgYSgpXG4vLyVib2R5XG4nLAotICAgICAgICdSYW4gaW50
byBkaXJlY3RpdmUgKCIvLyVQRERNLURFRklORSIsIGxpbmUgMikgd2hpbGUgaW4gIi8vJVBERE0t
RVhQQU5EIGEoKSIuJyksCi0gICAgICAjIDMuIEV4cGFuc2lvbiByYW4gb2ZmIGVuZCBvZiBmaWxl
Ci0gICAgICAodScvLyVQRERNLUVYUEFORCBhKClcbmFcbmJcbicsCi0gICAgICAgJ0hpdCB0aGUg
ZW5kIG9mIHRoZSBmaWxlIHdoaWxlIGluICIvLyVQRERNLUVYUEFORCBhKCkiLicpLAotICAgICAg
IyA0LiBEaXJlY3RpdmUgd2l0aGluIGRlZmluZQotICAgICAgKHUnLy8lUERETS1ERUZJTkUgYSgp
XG4vLyVib2R5XG4vLyVQRERNLUJPR1VTJywKLSAgICAgICAnUmFuIGludG8gZGlyZWN0aXZlICgi
Ly8lUERETS1CT0dVUyIsIGxpbmUgMykgd2hpbGUgaW4gIi8vJVBERE0tREVGSU5FIGEoKSIuJyks
Ci0gICAgICAodScvLyVQRERNLURFRklORSBhKClcbi8vJWJvZHlcbi8vJVBERE0tRVhQQU5ELUVO
RCBhKCknLAotICAgICAgICdSYW4gaW50byBkaXJlY3RpdmUgKCIvLyVQRERNLUVYUEFORC1FTkQi
LCBsaW5lIDMpIHdoaWxlIGluICIvLyVQRERNLURFRklORSBhKCkiLicpLAotICAgICAgIyA2LiBE
aXJlY3RpdmVzIHRoYXQgc2hvdWxkbid0IHN0YXJ0IHNlY3Rpb25zCi0gICAgICAodSdhXG4vLyVQ
RERNLURFRklORS1FTkQgYSgpXG4vL2FcbicsCi0gICAgICAgJ1VuZXhwZWN0ZWQgbGluZSAyOiAi
Ly8lUERETS1ERUZJTkUtRU5EIGEoKSIuJyksCi0gICAgICAodSdhXG4vLyVQRERNLUVYUEFORC1F
TkQgYSgpXG4vL2FcbicsCi0gICAgICAgJ1VuZXhwZWN0ZWQgbGluZSAyOiAiLy8lUERETS1FWFBB
TkQtRU5EIGEoKSIuJyksCi0gICAgICAodScvLyVQRERNLUJPR1VTXG4vL2FcbicsCi0gICAgICAg
J1VuZXhwZWN0ZWQgbGluZSAxOiAiLy8lUERETS1CT0dVUyIuJyksCi0gICAgXQotICAgIGZvciBp
ZHgsIChpbnB1dF9zdHIsIGV4cGVjdGVkX2VycikgaW4gZW51bWVyYXRlKHRlc3RfbGlzdCwgMSk6
Ci0gICAgICBmID0gaW8uU3RyaW5nSU8oaW5wdXRfc3RyKQotICAgICAgdHJ5OgotICAgICAgICBw
ZGRtLlNvdXJjZUZpbGUoZikuX1BhcnNlRmlsZSgpCi0gICAgICAgIHNlbGYuZmFpbCgnU2hvdWxk
IHRocm93IGV4Y2VwdGlvbiwgZW50cnkgJWQnICUgaWR4KQotICAgICAgZXhjZXB0IHBkZG0uUERE
TUVycm9yIGFzIGU6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5tZXNzYWdlLCBleHBlY3Rl
ZF9lcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAnRW50cnkgJWQgZmFpbGVkOiAlcicgJSAo
aWR4LCBlKSkKLQotY2xhc3MgVGVzdFByb2Nlc3NpbmdTb3VyY2UodW5pdHRlc3QuVGVzdENhc2Up
OgotCi0gIGRlZiB0ZXN0QmFzaWNzKHNlbGYpOgotICAgIGlucHV0X3N0ciA9IHUiIiIKLS8vJVBE
RE0tSU1QT1JULURFRklORVMgSW1wb3J0RmlsZQotZm9vCi0vLyVQRERNLUVYUEFORCBtdW1ibGUo
YWJjKQotLy8lUERETS1FWFBBTkQtRU5ECi1iYXIKLS8vJVBERE0tRVhQQU5EIG11bWJsZShkZWYp
Ci0vLyVQRERNLUVYUEFORCBtdW1ibGUoZ2hpKQotLy8lUERETS1FWFBBTkQtRU5ECi1iYXoKLS8v
JVBERE0tREVGSU5FIG11bWJsZShhXykKLS8vJWFfOiBnZXROYW1lKGFfKQotIiIiCi0gICAgaW5w
dXRfc3RyMiA9IHUiIiIKLS8vJVBERE0tREVGSU5FIGdldE5hbWUoeF8pCi0vLyVkbyMjeF8kdSMj
KGludCB4Xyk7Ci0KLSIiIgotICAgIGV4cGVjdGVkID0gdSIiIgotLy8lUERETS1JTVBPUlQtREVG
SU5FUyBJbXBvcnRGaWxlCi1mb28KLS8vJVBERE0tRVhQQU5EIG11bWJsZShhYmMpCi0vLyBUaGlz
IGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQot
YWJjOiBkb0FiYyhpbnQgYWJjKTsKLS8vJVBERE0tRVhQQU5ELUVORCBtdW1ibGUoYWJjKQotYmFy
Ci0vLyVQRERNLUVYUEFORCBtdW1ibGUoZGVmKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdl
bmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLWRlZjogZG9EZWYoaW50IGRlZik7
Ci0vLyVQRERNLUVYUEFORCBtdW1ibGUoZ2hpKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdl
bmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLWdoaTogZG9HaGkoaW50IGdoaSk7
Ci0vLyVQRERNLUVYUEFORC1FTkQgKDIgZXhwYW5zaW9ucykKLWJhegotLy8lUERETS1ERUZJTkUg
bXVtYmxlKGFfKQotLy8lYV86IGdldE5hbWUoYV8pCi0iIiIKLSAgICBleHBlY3RlZF9zdHJpcHBl
ZCA9IHUiIiIKLS8vJVBERE0tSU1QT1JULURFRklORVMgSW1wb3J0RmlsZQotZm9vCi0vLyVQRERN
LUVYUEFORCBtdW1ibGUoYWJjKQotLy8lUERETS1FWFBBTkQtRU5EIG11bWJsZShhYmMpCi1iYXIK
LS8vJVBERE0tRVhQQU5EIG11bWJsZShkZWYpCi0vLyVQRERNLUVYUEFORCBtdW1ibGUoZ2hpKQot
Ly8lUERETS1FWFBBTkQtRU5EICgyIGV4cGFuc2lvbnMpCi1iYXoKLS8vJVBERE0tREVGSU5FIG11
bWJsZShhXykKLS8vJWFfOiBnZXROYW1lKGFfKQotIiIiCi0gICAgZGVmIF9SZXNvbHZlcihuYW1l
KToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgJ0ltcG9ydEZpbGUnKQotICAgICAgcmV0
dXJuIGlvLlN0cmluZ0lPKGlucHV0X3N0cjIpCi0gICAgZiA9IGlvLlN0cmluZ0lPKGlucHV0X3N0
cikKLSAgICBzZiA9IHBkZG0uU291cmNlRmlsZShmLCBfUmVzb2x2ZXIpCi0gICAgc2YuUHJvY2Vz
c0NvbnRlbnQoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2YucHJvY2Vzc2VkX2NvbnRlbnQsIGV4
cGVjdGVkKQotICAgICMgRmVlZCBpdCB0aHJvdWdoIGFuZCBub3RoaW5nIHNob3VsZCBjaGFuZ2Uu
Ci0gICAgZjIgPSBpby5TdHJpbmdJTyhzZi5wcm9jZXNzZWRfY29udGVudCkKLSAgICBzZjIgPSBw
ZGRtLlNvdXJjZUZpbGUoZjIsIF9SZXNvbHZlcikKLSAgICBzZjIuUHJvY2Vzc0NvbnRlbnQoKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2YyLnByb2Nlc3NlZF9jb250ZW50LCBleHBlY3RlZCkKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKHNmMi5wcm9jZXNzZWRfY29udGVudCwgc2YucHJvY2Vzc2VkX2Nv
bnRlbnQpCi0gICAgIyBUZXN0IHN0cmlwcGluZyAod2l0aCB0aGUgb3JpZ2luYWwgaW5wdXQgYW5k
IGV4cGFuZGVkIHZlcnNpb24pLgotICAgIGYyID0gaW8uU3RyaW5nSU8oaW5wdXRfc3RyKQotICAg
IHNmMiA9IHBkZG0uU291cmNlRmlsZShmMikKLSAgICBzZjIuUHJvY2Vzc0NvbnRlbnQoc3RyaXBf
ZXhwYW5zaW9uPVRydWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZjIucHJvY2Vzc2VkX2NvbnRl
bnQsIGV4cGVjdGVkX3N0cmlwcGVkKQotICAgIGYyID0gaW8uU3RyaW5nSU8oc2YucHJvY2Vzc2Vk
X2NvbnRlbnQpCi0gICAgc2YyID0gcGRkbS5Tb3VyY2VGaWxlKGYyLCBfUmVzb2x2ZXIpCi0gICAg
c2YyLlByb2Nlc3NDb250ZW50KHN0cmlwX2V4cGFuc2lvbj1UcnVlKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2YyLnByb2Nlc3NlZF9jb250ZW50LCBleHBlY3RlZF9zdHJpcHBlZCkKLQotICBkZWYg
dGVzdFByb2Nlc3NGaWxlV2l0aE1hY3JvUGFyc2VFcnJvcihzZWxmKToKLSAgICBpbnB1dF9zdHIg
PSB1IiIiCi1mb28KLS8vJVBERE0tREVGSU5FIG11bWJsZShhXykKLS8vJWJvZHkKLS8vJVBERE0t
REVGSU5FIG11bWJsZSh4XykKLS8vJWJvZHkyCi0KLSIiIgotICAgIGYgPSBpby5TdHJpbmdJTyhp
bnB1dF9zdHIpCi0gICAgc2YgPSBwZGRtLlNvdXJjZUZpbGUoZikKLSAgICB0cnk6Ci0gICAgICBz
Zi5Qcm9jZXNzQ29udGVudCgpCi0gICAgICBzZWxmLmZhaWwoJ1Nob3VsZCB0aHJvdyBleGNlcHRp
b24sIGVudHJ5ICVkJyAlIGlkeCkKLSAgICBleGNlcHQgcGRkbS5QRERNRXJyb3IgYXMgZToKLSAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAn
QXR0ZW1wdCB0byByZWRlZmluZSBtYWNybzogIlBERE0tREVGSU5FIG11bWJsZSh4XykiXG4nCi0g
ICAgICAgICAgICAgICAgICAgICAgICcuLi53aGlsZSBwYXJzaW5nIHNlY3Rpb24gdGhhdCBzdGFy
dGVkOlxuJwotICAgICAgICAgICAgICAgICAgICAgICAnICBMaW5lIDM6IC8vJVBERE0tREVGSU5F
IG11bWJsZShhXyknKQotCi0gIGRlZiB0ZXN0UHJvY2Vzc0ZpbGVXaXRoRXhwYW5kRXJyb3Ioc2Vs
Zik6Ci0gICAgaW5wdXRfc3RyID0gdSIiIgotZm9vCi0vLyVQRERNLURFRklORSBtdW1ibGUoYV8p
Ci0vLyVib2R5Ci0vLyVQRERNLUVYUEFORCBmb29iYXIoeF8pCi0vLyVQRERNLUVYUEFORC1FTkQK
LQotIiIiCi0gICAgZiA9IGlvLlN0cmluZ0lPKGlucHV0X3N0cikKLSAgICBzZiA9IHBkZG0uU291
cmNlRmlsZShmKQotICAgIHRyeToKLSAgICAgIHNmLlByb2Nlc3NDb250ZW50KCkKLSAgICAgIHNl
bGYuZmFpbCgnU2hvdWxkIHRocm93IGV4Y2VwdGlvbiwgZW50cnkgJWQnICUgaWR4KQotICAgIGV4
Y2VwdCBwZGRtLlBERE1FcnJvciBhcyBlOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm1lc3Nh
Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICdObyBtYWNybyBuYW1lZCAiZm9vYmFyIi5cbicK
LSAgICAgICAgICAgICAgICAgICAgICAgJy4uLndoaWxlIGV4cGFuZGluZyAiZm9vYmFyKHhfKSIg
ZnJvbSB0aGUgc2VjdGlvbiB0aGF0JwotICAgICAgICAgICAgICAgICAgICAgICAnIHN0YXJ0ZWQ6
XG4gICBMaW5lIDU6IC8vJVBERE0tRVhQQU5EIGZvb2Jhcih4XyknKQotCi0KLWlmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVj
L0dQQkFycmF5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCQXJyYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWZkYTU3ZjNiNjJiMWU5YTMzNzBkNGU2YTNiNTZjYTcwMzM2ZTJlYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCQXJy
YXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNp
bXBvcnQgIkdQQlJ1bnRpbWVUeXBlcy5oIgotCi0vLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGZv
ciByZXBlYXRlZCBmaWVsZHMgb2YgYmFzaWMgZGF0YSB0eXBlcy4gVGhleSBhcmUgdXNlZCBiZWNh
dXNlCi0vLyB0aGV5IHBlcmZvcm0gYmV0dGVyIHRoYW4gYm94aW5nIGludG8gTlNOdW1iZXJzIGlu
IE5TQXJyYXlzLgotCi0vLyBOb3RlOiBUaGVzZSBhcmUgbm90IG1lYW50IHRvIGJlIHN1YmNsYXNz
ZWQuCi0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi0KLS8vJVBERE0tRVhQQU5EIERFQ0xBUkVf
QVJSQVlTKCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0
IGl0IGRpcmVjdGx5LgotCi0jcHJhZ21hIG1hcmsgLSBJbnQzMgotCi1AaW50ZXJmYWNlIEdQQklu
dDMyQXJyYXkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWFycmF5OwotKyAo
aW5zdGFuY2V0eXBlKWFycmF5V2l0aFZhbHVlOihpbnQzMl90KXZhbHVlOwotKyAoaW5zdGFuY2V0
eXBlKWFycmF5V2l0aFZhbHVlQXJyYXk6KEdQQkludDMyQXJyYXkgKilhcnJheTsKLSsgKGluc3Rh
bmNldHlwZSlhcnJheVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciljb3VudDsKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS8vIEluaXRpYWxpemVzIHRo
ZSBhcnJheSwgY29weWluZyB0aGUgdmFsdWVzLgotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFs
dWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50OihOU1VJbnRlZ2VyKWNvdW50OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVBcnJh
eTooR1BCSW50MzJBcnJheSAqKWFycmF5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNp
dHk6KE5TVUludGVnZXIpY291bnQ7Ci0KLS0gKGludDMyX3QpdmFsdWVBdEluZGV4OihOU1VJbnRl
Z2VyKWluZGV4OwotCi0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazoodm9pZCAoXiko
aW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrOwotLSAodm9p
ZCllbnVtZXJhdGVWYWx1ZXNXaXRoT3B0aW9uczooTlNFbnVtZXJhdGlvbk9wdGlvbnMpb3B0cwot
ICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdCbG9jazoodm9pZCAoXikoaW50MzJfdCB2YWx1
ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZFZhbHVl
OihpbnQzMl90KXZhbHVlOwotLSAodm9pZClhZGRWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFs
dWVzIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotLSAodm9pZClhZGRWYWx1ZXNGcm9tQXJyYXk6
KEdQQkludDMyQXJyYXkgKilhcnJheTsKLQotLSAodm9pZClpbnNlcnRWYWx1ZTooaW50MzJfdCl2
YWx1ZSBhdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OwotCi0tICh2b2lkKXJlcGxhY2VWYWx1ZUF0
SW5kZXg6KE5TVUludGVnZXIpaW5kZXggd2l0aFZhbHVlOihpbnQzMl90KXZhbHVlOwotCi0tICh2
b2lkKXJlbW92ZVZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpbmRleDsKLS0gKHZvaWQpcmVtb3Zl
QWxsOwotCi0tICh2b2lkKWV4Y2hhbmdlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWlkeDEKLSAg
ICAgICAgICAgIHdpdGhWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaWR4MjsKLQotQGVuZAotCi0j
cHJhZ21hIG1hcmsgLSBVSW50MzIKLQotQGludGVyZmFjZSBHUEJVSW50MzJBcnJheSA6IE5TT2Jq
ZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRl
Z2VyIGNvdW50OwotCi0rIChpbnN0YW5jZXR5cGUpYXJyYXk7Ci0rIChpbnN0YW5jZXR5cGUpYXJy
YXlXaXRoVmFsdWU6KHVpbnQzMl90KXZhbHVlOwotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0aFZh
bHVlQXJyYXk6KEdQQlVJbnQzMkFycmF5ICopYXJyYXk7Ci0rIChpbnN0YW5jZXR5cGUpYXJyYXlX
aXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpY291bnQ7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IE5T
X0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0vLyBJbml0aWFsaXplcyB0aGUgYXJyYXksIGNvcHlp
bmcgdGhlIHZhbHVlcy4KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgdWlu
dDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVn
ZXIpY291bnQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZUFycmF5OihHUEJVSW50MzJB
cnJheSAqKWFycmF5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVn
ZXIpY291bnQ7Ci0KLS0gKHVpbnQzMl90KXZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpbmRleDsK
LQotLSAodm9pZCllbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6KHZvaWQgKF4pKHVpbnQzMl90IHZh
bHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0tICh2b2lkKWVudW1lcmF0
ZVZhbHVlc1dpdGhPcHRpb25zOihOU0VudW1lcmF0aW9uT3B0aW9ucylvcHRzCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1c2luZ0Jsb2NrOih2b2lkICheKSh1aW50MzJfdCB2YWx1ZSwgTlNVSW50
ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZFZhbHVlOih1aW50MzJf
dCl2YWx1ZTsKLS0gKHZvaWQpYWRkVmFsdWVzOihjb25zdCB1aW50MzJfdCBbXSl2YWx1ZXMgY291
bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0tICh2b2lkKWFkZFZhbHVlc0Zyb21BcnJheTooR1BCVUlu
dDMyQXJyYXkgKilhcnJheTsKLQotLSAodm9pZClpbnNlcnRWYWx1ZToodWludDMyX3QpdmFsdWUg
YXRJbmRleDooTlNVSW50ZWdlcilpbmRleDsKLQotLSAodm9pZClyZXBsYWNlVmFsdWVBdEluZGV4
OihOU1VJbnRlZ2VyKWluZGV4IHdpdGhWYWx1ZToodWludDMyX3QpdmFsdWU7Ci0KLS0gKHZvaWQp
cmVtb3ZlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OwotLSAodm9pZClyZW1vdmVBbGw7
Ci0KLS0gKHZvaWQpZXhjaGFuZ2VWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaWR4MQotICAgICAg
ICAgICAgd2l0aFZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpZHgyOwotCi1AZW5kCi0KLSNwcmFn
bWEgbWFyayAtIEludDY0Ci0KLUBpbnRlcmZhY2UgR1BCSW50NjRBcnJheSA6IE5TT2JqZWN0IDxO
U0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNv
dW50OwotCi0rIChpbnN0YW5jZXR5cGUpYXJyYXk7Ci0rIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRo
VmFsdWU6KGludDY0X3QpdmFsdWU7Ci0rIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsdWVBcnJh
eTooR1BCSW50NjRBcnJheSAqKWFycmF5OwotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0aENhcGFj
aXR5OihOU1VJbnRlZ2VyKWNvdW50OwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCBOU19ERVNJR05B
VEVEX0lOSVRJQUxJWkVSOwotLy8gSW5pdGlhbGl6ZXMgdGhlIGFycmF5LCBjb3B5aW5nIHRoZSB2
YWx1ZXMuCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGludDY0X3QgW10p
dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZUFycmF5OihHUEJJbnQ2NEFycmF5ICopYXJy
YXk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciljb3VudDsK
LQotLSAoaW50NjRfdCl2YWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXg7Ci0KLS0gKHZvaWQp
ZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOih2b2lkICheKShpbnQ2NF90IHZhbHVlLCBOU1VJbnRl
Z2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhP
cHRpb25zOihOU0VudW1lcmF0aW9uT3B0aW9ucylvcHRzCi0gICAgICAgICAgICAgICAgICAgICAg
ICB1c2luZ0Jsb2NrOih2b2lkICheKShpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9P
TCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkVmFsdWU6KGludDY0X3QpdmFsdWU7Ci0tICh2
b2lkKWFkZFZhbHVlczooY29uc3QgaW50NjRfdCBbXSl2YWx1ZXMgY291bnQ6KE5TVUludGVnZXIp
Y291bnQ7Ci0tICh2b2lkKWFkZFZhbHVlc0Zyb21BcnJheTooR1BCSW50NjRBcnJheSAqKWFycmF5
OwotCi0tICh2b2lkKWluc2VydFZhbHVlOihpbnQ2NF90KXZhbHVlIGF0SW5kZXg6KE5TVUludGVn
ZXIpaW5kZXg7Ci0KLS0gKHZvaWQpcmVwbGFjZVZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpbmRl
eCB3aXRoVmFsdWU6KGludDY0X3QpdmFsdWU7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVBdEluZGV4
OihOU1VJbnRlZ2VyKWluZGV4OwotLSAodm9pZClyZW1vdmVBbGw7Ci0KLS0gKHZvaWQpZXhjaGFu
Z2VWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaWR4MQotICAgICAgICAgICAgd2l0aFZhbHVlQXRJ
bmRleDooTlNVSW50ZWdlcilpZHgyOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJbnQ2NAot
Ci1AaW50ZXJmYWNlIEdQQlVJbnQ2NEFycmF5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHBy
b3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3Rh
bmNldHlwZSlhcnJheTsKLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhWYWx1ZToodWludDY0X3Qp
dmFsdWU7Ci0rIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsdWVBcnJheTooR1BCVUludDY0QXJy
YXkgKilhcnJheTsKLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhDYXBhY2l0eTooTlNVSW50ZWdl
ciljb3VudDsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpF
UjsKLS8vIEluaXRpYWxpemVzIHRoZSBhcnJheSwgY29weWluZyB0aGUgdmFsdWVzLgotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCB1aW50NjRfdCBbXSl2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFZhbHVlQXJyYXk6KEdQQlVJbnQ2NEFycmF5ICopYXJyYXk7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciljb3VudDsKLQotLSAodWludDY0
X3QpdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OwotCi0tICh2b2lkKWVudW1lcmF0ZVZh
bHVlc1dpdGhCbG9jazoodm9pZCAoXikodWludDY0X3QgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBC
T09MICpzdG9wKSlibG9jazsKLS0gKHZvaWQpZW51bWVyYXRlVmFsdWVzV2l0aE9wdGlvbnM6KE5T
RW51bWVyYXRpb25PcHRpb25zKW9wdHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nQmxv
Y2s6KHZvaWQgKF4pKHVpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkp
YmxvY2s7Ci0KLS0gKHZvaWQpYWRkVmFsdWU6KHVpbnQ2NF90KXZhbHVlOwotLSAodm9pZClhZGRW
YWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtdKXZhbHVlcyBjb3VudDooTlNVSW50ZWdlciljb3VudDsK
LS0gKHZvaWQpYWRkVmFsdWVzRnJvbUFycmF5OihHUEJVSW50NjRBcnJheSAqKWFycmF5OwotCi0t
ICh2b2lkKWluc2VydFZhbHVlOih1aW50NjRfdCl2YWx1ZSBhdEluZGV4OihOU1VJbnRlZ2VyKWlu
ZGV4OwotCi0tICh2b2lkKXJlcGxhY2VWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggd2l0
aFZhbHVlOih1aW50NjRfdCl2YWx1ZTsKLQotLSAodm9pZClyZW1vdmVWYWx1ZUF0SW5kZXg6KE5T
VUludGVnZXIpaW5kZXg7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotLSAodm9pZClleGNoYW5nZVZh
bHVlQXRJbmRleDooTlNVSW50ZWdlcilpZHgxCi0gICAgICAgICAgICB3aXRoVmFsdWVBdEluZGV4
OihOU1VJbnRlZ2VyKWlkeDI7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gRmxvYXQKLQotQGlu
dGVyZmFjZSBHUEJGbG9hdEFycmF5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5
KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlw
ZSlhcnJheTsKLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhWYWx1ZTooZmxvYXQpdmFsdWU7Ci0r
IChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsdWVBcnJheTooR1BCRmxvYXRBcnJheSAqKWFycmF5
OwotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKWNvdW50Owot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLy8gSW5p
dGlhbGl6ZXMgdGhlIGFycmF5LCBjb3B5aW5nIHRoZSB2YWx1ZXMuCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGZsb2F0IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
VmFsdWVBcnJheTooR1BCRmxvYXRBcnJheSAqKWFycmF5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpY291bnQ7Ci0KLS0gKGZsb2F0KXZhbHVlQXRJbmRleDoo
TlNVSW50ZWdlcilpbmRleDsKLQotLSAodm9pZCllbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6KHZv
aWQgKF4pKGZsb2F0IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0t
ICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25zOihOU0VudW1lcmF0aW9uT3B0aW9ucylv
cHRzCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Jsb2NrOih2b2lkICheKShmbG9hdCB2
YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZFZh
bHVlOihmbG9hdCl2YWx1ZTsKLS0gKHZvaWQpYWRkVmFsdWVzOihjb25zdCBmbG9hdCBbXSl2YWx1
ZXMgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0tICh2b2lkKWFkZFZhbHVlc0Zyb21BcnJheToo
R1BCRmxvYXRBcnJheSAqKWFycmF5OwotCi0tICh2b2lkKWluc2VydFZhbHVlOihmbG9hdCl2YWx1
ZSBhdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OwotCi0tICh2b2lkKXJlcGxhY2VWYWx1ZUF0SW5k
ZXg6KE5TVUludGVnZXIpaW5kZXggd2l0aFZhbHVlOihmbG9hdCl2YWx1ZTsKLQotLSAodm9pZCly
ZW1vdmVWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXg7Ci0tICh2b2lkKXJlbW92ZUFsbDsK
LQotLSAodm9pZClleGNoYW5nZVZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpZHgxCi0gICAgICAg
ICAgICB3aXRoVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWlkeDI7Ci0KLUBlbmQKLQotI3ByYWdt
YSBtYXJrIC0gRG91YmxlCi0KLUBpbnRlcmZhY2UgR1BCRG91YmxlQXJyYXkgOiBOU09iamVjdCA8
TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBj
b3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWFycmF5OwotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0
aFZhbHVlOihkb3VibGUpdmFsdWU7Ci0rIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsdWVBcnJh
eTooR1BCRG91YmxlQXJyYXkgKilhcnJheTsKLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhDYXBh
Y2l0eTooTlNVSW50ZWdlciljb3VudDsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfREVTSUdO
QVRFRF9JTklUSUFMSVpFUjsKLS8vIEluaXRpYWxpemVzIHRoZSBhcnJheSwgY29weWluZyB0aGUg
dmFsdWVzLgotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBkb3VibGUgW10p
dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZUFycmF5OihHUEJEb3VibGVBcnJheSAqKWFy
cmF5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpY291bnQ7
Ci0KLS0gKGRvdWJsZSl2YWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXg7Ci0KLS0gKHZvaWQp
ZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOih2b2lkICheKShkb3VibGUgdmFsdWUsIE5TVUludGVn
ZXIgaWR4LCBCT09MICpzdG9wKSlibG9jazsKLS0gKHZvaWQpZW51bWVyYXRlVmFsdWVzV2l0aE9w
dGlvbnM6KE5TRW51bWVyYXRpb25PcHRpb25zKW9wdHMKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVzaW5nQmxvY2s6KHZvaWQgKF4pKGRvdWJsZSB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wg
KnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZFZhbHVlOihkb3VibGUpdmFsdWU7Ci0tICh2b2lk
KWFkZFZhbHVlczooY29uc3QgZG91YmxlIFtdKXZhbHVlcyBjb3VudDooTlNVSW50ZWdlciljb3Vu
dDsKLS0gKHZvaWQpYWRkVmFsdWVzRnJvbUFycmF5OihHUEJEb3VibGVBcnJheSAqKWFycmF5Owot
Ci0tICh2b2lkKWluc2VydFZhbHVlOihkb3VibGUpdmFsdWUgYXRJbmRleDooTlNVSW50ZWdlcilp
bmRleDsKLQotLSAodm9pZClyZXBsYWNlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHdp
dGhWYWx1ZTooZG91YmxlKXZhbHVlOwotCi0tICh2b2lkKXJlbW92ZVZhbHVlQXRJbmRleDooTlNV
SW50ZWdlcilpbmRleDsKLS0gKHZvaWQpcmVtb3ZlQWxsOwotCi0tICh2b2lkKWV4Y2hhbmdlVmFs
dWVBdEluZGV4OihOU1VJbnRlZ2VyKWlkeDEKLSAgICAgICAgICAgIHdpdGhWYWx1ZUF0SW5kZXg6
KE5TVUludGVnZXIpaWR4MjsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBCb29sCi0KLUBpbnRl
cmZhY2UgR1BCQm9vbEFycmF5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlh
cnJheTsKLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhWYWx1ZTooQk9PTCl2YWx1ZTsKLSsgKGlu
c3RhbmNldHlwZSlhcnJheVdpdGhWYWx1ZUFycmF5OihHUEJCb29sQXJyYXkgKilhcnJheTsKLSsg
KGluc3RhbmNldHlwZSlhcnJheVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciljb3VudDsKLQotLSAo
aW5zdGFuY2V0eXBlKWluaXQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS8vIEluaXRpYWxp
emVzIHRoZSBhcnJheSwgY29weWluZyB0aGUgdmFsdWVzLgotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoVmFsdWVzOihjb25zdCBCT09MIFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAg
IGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVB
cnJheTooR1BCQm9vbEFycmF5ICopYXJyYXk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBh
Y2l0eTooTlNVSW50ZWdlciljb3VudDsKLQotLSAoQk9PTCl2YWx1ZUF0SW5kZXg6KE5TVUludGVn
ZXIpaW5kZXg7Ci0KLS0gKHZvaWQpZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOih2b2lkICheKShC
T09MIHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0tICh2b2lkKWVu
dW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25zOihOU0VudW1lcmF0aW9uT3B0aW9ucylvcHRzCi0gICAg
ICAgICAgICAgICAgICAgICAgICB1c2luZ0Jsb2NrOih2b2lkICheKShCT09MIHZhbHVlLCBOU1VJ
bnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkVmFsdWU6KEJPT0wp
dmFsdWU7Ci0tICh2b2lkKWFkZFZhbHVlczooY29uc3QgQk9PTCBbXSl2YWx1ZXMgY291bnQ6KE5T
VUludGVnZXIpY291bnQ7Ci0tICh2b2lkKWFkZFZhbHVlc0Zyb21BcnJheTooR1BCQm9vbEFycmF5
ICopYXJyYXk7Ci0KLS0gKHZvaWQpaW5zZXJ0VmFsdWU6KEJPT0wpdmFsdWUgYXRJbmRleDooTlNV
SW50ZWdlcilpbmRleDsKLQotLSAodm9pZClyZXBsYWNlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2Vy
KWluZGV4IHdpdGhWYWx1ZTooQk9PTCl2YWx1ZTsKLQotLSAodm9pZClyZW1vdmVWYWx1ZUF0SW5k
ZXg6KE5TVUludGVnZXIpaW5kZXg7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotLSAodm9pZClleGNo
YW5nZVZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpZHgxCi0gICAgICAgICAgICB3aXRoVmFsdWVB
dEluZGV4OihOU1VJbnRlZ2VyKWlkeDI7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gRW51bQot
Ci1AaW50ZXJmYWNlIEdQQkVudW1BcnJheSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9w
ZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZG9ubHkpIEdQQkVudW1WYWxpZGF0aW9uRnVuYyB2YWxpZGF0aW9uRnVuYzsK
LQotKyAoaW5zdGFuY2V0eXBlKWFycmF5OwotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0aFZhbGlk
YXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmM7Ci0rIChp
bnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVt
VmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
YXdWYWx1ZTooaW50MzJfdCl2YWx1ZTsKLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhWYWx1ZUFy
cmF5OihHUEJFbnVtQXJyYXkgKilhcnJheTsKLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhWYWxp
ZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKWNvdW50
OwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxl
IEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpF
UjsKLQotLy8gSW5pdGlhbGl6ZXMgdGhlIGFycmF5LCBjb3B5aW5nIHRoZSB2YWx1ZXMuCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1W
YWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdW
YWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhWYWx1ZUFycmF5OihHUEJFbnVtQXJyYXkgKilhcnJheTsKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5j
KWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhY2l0eTooTlNVSW50
ZWdlciljb3VudDsKLQotLy8gVGhlc2Ugd2lsbCByZXR1cm4ga0dQQlVucmVjb2duaXplZEVudW1l
cmF0b3JWYWx1ZSBpZiB0aGUgdmFsdWUgYXQgaW5kZXggaXMgbm90IGEKLS8vIHZhbGlkIGVudW1l
cmF0b3IgYXMgZGVmaW5lZCBieSB2YWxpZGF0aW9uRnVuYy4gSWYgdGhlIGFjdHVhbCB2YWx1ZSBp
cwotLy8gZGVzaXJlZCwgdXNlICJyYXciIHZlcnNpb24gb2YgdGhlIG1ldGhvZC4KLQotLSAoaW50
MzJfdCl2YWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXg7Ci0KLS0gKHZvaWQpZW51bWVyYXRl
VmFsdWVzV2l0aEJsb2NrOih2b2lkICheKShpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwg
Qk9PTCAqc3RvcCkpYmxvY2s7Ci0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25zOihO
U0VudW1lcmF0aW9uT3B0aW9ucylvcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Js
b2NrOih2b2lkICheKShpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkp
YmxvY2s7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgYnlwYXNzIHRoZSB2YWxpZGF0aW9uRnVuYyB0byBw
cm92aWRlIGFjY2VzcyB0byB2YWx1ZXMgdGhhdCB3ZXJlIG5vdAotLy8ga25vd24gYXQgdGhlIHRp
bWUgdGhlIGJpbmFyeSB3YXMgY29tcGlsZWQuCi0KLS0gKGludDMyX3QpcmF3VmFsdWVBdEluZGV4
OihOU1VJbnRlZ2VyKWluZGV4OwotCi0tICh2b2lkKWVudW1lcmF0ZVJhd1ZhbHVlc1dpdGhCbG9j
azoodm9pZCAoXikoaW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJs
b2NrOwotLSAodm9pZCllbnVtZXJhdGVSYXdWYWx1ZXNXaXRoT3B0aW9uczooTlNFbnVtZXJhdGlv
bk9wdGlvbnMpb3B0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdCbG9jazoodm9p
ZCAoXikoaW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrOwot
Ci0vLyBJZiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIGFzIGRlZmluZWQgYnkgdmFs
aWRhdGlvbkZ1bmMsIHRoZXNlCi0vLyBtZXRob2RzIHdpbGwgYXNzZXJ0IGluIGRlYnVnLCBhbmQg
d2lsbCBsb2cgaW4gcmVsZWFzZSBhbmQgYXNzaWduIHRoZSB2YWx1ZQotLy8gdG8gdGhlIGRlZmF1
bHQgdmFsdWUuIFVzZSB0aGUgcmF3VmFsdWUgbWV0aG9kcyBiZWxvdyB0byBhc3NpZ24gbm9uIGVu
dW1lcmF0b3IKLS8vIHZhbHVlcy4KLQotLSAodm9pZClhZGRWYWx1ZTooaW50MzJfdCl2YWx1ZTsK
LS0gKHZvaWQpYWRkVmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcyBjb3VudDooTlNVSW50
ZWdlciljb3VudDsKLQotLSAodm9pZClpbnNlcnRWYWx1ZTooaW50MzJfdCl2YWx1ZSBhdEluZGV4
OihOU1VJbnRlZ2VyKWluZGV4OwotCi0tICh2b2lkKXJlcGxhY2VWYWx1ZUF0SW5kZXg6KE5TVUlu
dGVnZXIpaW5kZXggd2l0aFZhbHVlOihpbnQzMl90KXZhbHVlOwotCi0vLyBUaGVzZSBtZXRob2Rz
IGJ5cGFzcyB0aGUgdmFsaWRhdGlvbkZ1bmMgdG8gcHJvdmlkZSBzZXR0aW5nIG9mIHZhbHVlcyB0
aGF0IHdlcmUgbm90Ci0vLyBrbm93biBhdCB0aGUgdGltZSB0aGUgYmluYXJ5IHdhcyBjb21waWxl
ZC4KLQotLSAodm9pZClhZGRSYXdWYWx1ZTooaW50MzJfdCl2YWx1ZTsKLS0gKHZvaWQpYWRkUmF3
VmFsdWVzRnJvbUFycmF5OihHUEJFbnVtQXJyYXkgKilhcnJheTsKLS0gKHZvaWQpYWRkUmF3VmFs
dWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcyBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLQot
LSAodm9pZClpbnNlcnRSYXdWYWx1ZTooaW50MzJfdCl2YWx1ZSBhdEluZGV4OihOU1VJbnRlZ2Vy
KWluZGV4OwotCi0tICh2b2lkKXJlcGxhY2VWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgg
d2l0aFJhd1ZhbHVlOihpbnQzMl90KXZhbHVlOwotCi0vLyBObyB2YWxpZGF0aW9uIGFwcGxpZXMg
dG8gdGhlc2UgbWV0aG9kcy4KLQotLSAodm9pZClyZW1vdmVWYWx1ZUF0SW5kZXg6KE5TVUludGVn
ZXIpaW5kZXg7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotLSAodm9pZClleGNoYW5nZVZhbHVlQXRJ
bmRleDooTlNVSW50ZWdlcilpZHgxCi0gICAgICAgICAgICB3aXRoVmFsdWVBdEluZGV4OihOU1VJ
bnRlZ2VyKWlkeDI7Ci0KLUBlbmQKLQotLy8lUERETS1FWFBBTkQtRU5EIERFQ0xBUkVfQVJSQVlT
KCkKLQotTlNfQVNTVU1FX05PTk5VTExfRU5ECi0KLS8vJVBERE0tREVGSU5FIERFQ0xBUkVfQVJS
QVlTKCkKLS8vJUFSUkFZX0lOVEVSRkFDRV9TSU1QTEUoSW50MzIsIGludDMyX3QpCi0vLyVBUlJB
WV9JTlRFUkZBQ0VfU0lNUExFKFVJbnQzMiwgdWludDMyX3QpCi0vLyVBUlJBWV9JTlRFUkZBQ0Vf
U0lNUExFKEludDY0LCBpbnQ2NF90KQotLy8lQVJSQVlfSU5URVJGQUNFX1NJTVBMRShVSW50NjQs
IHVpbnQ2NF90KQotLy8lQVJSQVlfSU5URVJGQUNFX1NJTVBMRShGbG9hdCwgZmxvYXQpCi0vLyVB
UlJBWV9JTlRFUkZBQ0VfU0lNUExFKERvdWJsZSwgZG91YmxlKQotLy8lQVJSQVlfSU5URVJGQUNF
X1NJTVBMRShCb29sLCBCT09MKQotLy8lQVJSQVlfSU5URVJGQUNFX0VOVU0oRW51bSwgaW50MzJf
dCkKLQotLy8KLS8vIFRoZSBjb21tb24gY2FzZSAoZXZlcnl0aGluZyBidXQgRW51bSkKLS8vCi0K
LS8vJVBERE0tREVGSU5FIEFSUkFZX0lOVEVSRkFDRV9TSU1QTEUoTkFNRSwgVFlQRSkKLS8vJSNw
cmFnbWEgbWFyayAtIE5BTUUKLS8vJQotLy8lQGludGVyZmFjZSBHUEIjI05BTUUjI0FycmF5IDog
TlNPYmplY3QgPE5TQ29weWluZz4KLS8vJQotLy8lQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9u
bHkpIE5TVUludGVnZXIgY291bnQ7Ci0vLyUKLS8vJSsgKGluc3RhbmNldHlwZSlhcnJheTsKLS8v
JSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhWYWx1ZTooVFlQRSl2YWx1ZTsKLS8vJSsgKGluc3Rh
bmNldHlwZSlhcnJheVdpdGhWYWx1ZUFycmF5OihHUEIjI05BTUUjI0FycmF5ICopYXJyYXk7Ci0v
LyUrIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpY291bnQ7Ci0v
LyUKLS8vJS0gKGluc3RhbmNldHlwZSlpbml0IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0v
LyUvLyBJbml0aWFsaXplcyB0aGUgYXJyYXksIGNvcHlpbmcgdGhlIHZhbHVlcy4KLS8vJS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgVFlQRSBbXSl2YWx1ZXMKLS8vJSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLS8vJS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFZhbHVlQXJyYXk6KEdQQiMjTkFNRSMjQXJyYXkgKilhcnJheTsKLS8v
JS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKWNvdW50OwotLy8l
Ci0vLyVBUlJBWV9JTU1VVEFCTEVfSU5URVJGQUNFKE5BTUUsIFRZUEUsIEJhc2ljKQotLy8lCi0v
LyVBUlJBWV9NVVRBQkxFX0lOVEVSRkFDRShOQU1FLCBUWVBFLCBCYXNpYykKLS8vJQotLy8lQGVu
ZAotLy8lCi0KLS8vCi0vLyBNYWNyb3Mgc3BlY2lmaWMgdG8gRW51bXMgKHRvIHR3ZWFrIHRoZWly
IGludGVyZmFjZSkuCi0vLwotCi0vLyVQRERNLURFRklORSBBUlJBWV9JTlRFUkZBQ0VfRU5VTShO
QU1FLCBUWVBFKQotLy8lI3ByYWdtYSBtYXJrIC0gTkFNRQotLy8lCi0vLyVAaW50ZXJmYWNlIEdQ
QiMjTkFNRSMjQXJyYXkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotLy8lCi0vLyVAcHJvcGVydHko
bm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLS8vJUBwcm9wZXJ0eShub25h
dG9taWMsIHJlYWRvbmx5KSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMgdmFsaWRhdGlvbkZ1bmM7Ci0v
LyUKLS8vJSsgKGluc3RhbmNldHlwZSlhcnJheTsKLS8vJSsgKGluc3RhbmNldHlwZSlhcnJheVdp
dGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5j
OwotLy8lKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFi
bGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmF3VmFsdWU6KFRZUEUpdmFsdWU7Ci0vLyUrIChpbnN0YW5jZXR5cGUpYXJy
YXlXaXRoVmFsdWVBcnJheTooR1BCIyNOQU1FIyNBcnJheSAqKWFycmF5OwotLy8lKyAoaW5zdGFu
Y2V0eXBlKWFycmF5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlk
YXRpb25GdW5jKWZ1bmMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fw
YWNpdHk6KE5TVUludGVnZXIpY291bnQ7Ci0vLyUKLS8vJS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMK
LS8vJSAgICBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLy8lCi0vLyUvLyBJbml0aWFsaXpl
cyB0aGUgYXJyYXksIGNvcHlpbmcgdGhlIHZhbHVlcy4KLS8vJS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1
bmMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczooY29uc3Qg
VFlQRSBbXSl2YWx1ZXMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDooTlNVSW50ZWdlciljb3VudDsKLS8vJS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVl
QXJyYXk6KEdQQiMjTkFNRSMjQXJyYXkgKilhcnJheTsKLS8vJS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1
bmMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhY2l0eTooTlNVSW50
ZWdlciljb3VudDsKLS8vJQotLy8lLy8gVGhlc2Ugd2lsbCByZXR1cm4ga0dQQlVucmVjb2duaXpl
ZEVudW1lcmF0b3JWYWx1ZSBpZiB0aGUgdmFsdWUgYXQgaW5kZXggaXMgbm90IGEKLS8vJS8vIHZh
bGlkIGVudW1lcmF0b3IgYXMgZGVmaW5lZCBieSB2YWxpZGF0aW9uRnVuYy4gSWYgdGhlIGFjdHVh
bCB2YWx1ZSBpcwotLy8lLy8gZGVzaXJlZCwgdXNlICJyYXciIHZlcnNpb24gb2YgdGhlIG1ldGhv
ZC4KLS8vJQotLy8lQVJSQVlfSU1NVVRBQkxFX0lOVEVSRkFDRShOQU1FLCBUWVBFLCBOQU1FKQot
Ly8lCi0vLyUvLyBUaGVzZSBtZXRob2RzIGJ5cGFzcyB0aGUgdmFsaWRhdGlvbkZ1bmMgdG8gcHJv
dmlkZSBhY2Nlc3MgdG8gdmFsdWVzIHRoYXQgd2VyZSBub3QKLS8vJS8vIGtub3duIGF0IHRoZSB0
aW1lIHRoZSBiaW5hcnkgd2FzIGNvbXBpbGVkLgotLy8lCi0vLyUtIChUWVBFKXJhd1ZhbHVlQXRJ
bmRleDooTlNVSW50ZWdlcilpbmRleDsKLS8vJQotLy8lLSAodm9pZCllbnVtZXJhdGVSYXdWYWx1
ZXNXaXRoQmxvY2s6KHZvaWQgKF4pKFRZUEUgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBCT09MICpz
dG9wKSlibG9jazsKLS8vJS0gKHZvaWQpZW51bWVyYXRlUmF3VmFsdWVzV2l0aE9wdGlvbnM6KE5T
RW51bWVyYXRpb25PcHRpb25zKW9wdHMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVz
aW5nQmxvY2s6KHZvaWQgKF4pKFRZUEUgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBCT09MICpzdG9w
KSlibG9jazsKLS8vJQotLy8lLy8gSWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBh
cyBkZWZpbmVkIGJ5IHZhbGlkYXRpb25GdW5jLCB0aGVzZQotLy8lLy8gbWV0aG9kcyB3aWxsIGFz
c2VydCBpbiBkZWJ1ZywgYW5kIHdpbGwgbG9nIGluIHJlbGVhc2UgYW5kIGFzc2lnbiB0aGUgdmFs
dWUKLS8vJS8vIHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBVc2UgdGhlIHJhd1ZhbHVlIG1ldGhvZHMg
YmVsb3cgdG8gYXNzaWduIG5vbiBlbnVtZXJhdG9yCi0vLyUvLyB2YWx1ZXMuCi0vLyUKLS8vJUFS
UkFZX01VVEFCTEVfSU5URVJGQUNFKE5BTUUsIFRZUEUsIE5BTUUpCi0vLyUKLS8vJUBlbmQKLS8v
JQotCi0vLyVQRERNLURFRklORSBBUlJBWV9JTU1VVEFCTEVfSU5URVJGQUNFKE5BTUUsIFRZUEUs
IEhFTFBFUl9OQU1FKQotLy8lLSAoVFlQRSl2YWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXg7
Ci0vLyUKLS8vJS0gKHZvaWQpZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOih2b2lkICheKShUWVBF
IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0vLyUtICh2b2lkKWVu
dW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25zOihOU0VudW1lcmF0aW9uT3B0aW9ucylvcHRzCi0vLyUg
ICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Jsb2NrOih2b2lkICheKShUWVBFIHZhbHVlLCBO
U1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS8vJVBERE0tREVGSU5FIEFSUkFZ
X01VVEFCTEVfSU5URVJGQUNFKE5BTUUsIFRZUEUsIEhFTFBFUl9OQU1FKQotLy8lLSAodm9pZClh
ZGRWYWx1ZTooVFlQRSl2YWx1ZTsKLS8vJS0gKHZvaWQpYWRkVmFsdWVzOihjb25zdCBUWVBFIFtd
KXZhbHVlcyBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLS8vJUFSUkFZX0VYVFJBX01VVEFCTEVf
TUVUSE9EUzFfIyNIRUxQRVJfTkFNRShOQU1FLCBUWVBFKQotLy8lLSAodm9pZClpbnNlcnRWYWx1
ZTooVFlQRSl2YWx1ZSBhdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OwotLy8lCi0vLyUtICh2b2lk
KXJlcGxhY2VWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggd2l0aFZhbHVlOihUWVBFKXZh
bHVlOwotLy8lQVJSQVlfRVhUUkFfTVVUQUJMRV9NRVRIT0RTMl8jI0hFTFBFUl9OQU1FKE5BTUUs
IFRZUEUpCi0vLyUtICh2b2lkKXJlbW92ZVZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpbmRleDsK
LS8vJS0gKHZvaWQpcmVtb3ZlQWxsOwotLy8lCi0vLyUtICh2b2lkKWV4Y2hhbmdlVmFsdWVBdElu
ZGV4OihOU1VJbnRlZ2VyKWlkeDEKLS8vJSAgICAgICAgICAgIHdpdGhWYWx1ZUF0SW5kZXg6KE5T
VUludGVnZXIpaWR4MjsKLQotLy8KLS8vIFRoZXNlIGFyZSBob29rcyBpbnZva2VkIGJ5IHRoZSBh
Ym92ZSB0byBkbyBpbnNlcnQgYXMgbmVlZGVkLgotLy8KLQotLy8lUERETS1ERUZJTkUgQVJSQVlf
RVhUUkFfTVVUQUJMRV9NRVRIT0RTMV9CYXNpYyhOQU1FLCBUWVBFKQotLy8lLSAodm9pZClhZGRW
YWx1ZXNGcm9tQXJyYXk6KEdQQiMjTkFNRSMjQXJyYXkgKilhcnJheTsKLS8vJQotLy8lUERETS1E
RUZJTkUgQVJSQVlfRVhUUkFfTVVUQUJMRV9NRVRIT0RTMl9CYXNpYyhOQU1FLCBUWVBFKQotLy8g
RW1wdHkKLS8vJVBERE0tREVGSU5FIEFSUkFZX0VYVFJBX01VVEFCTEVfTUVUSE9EUzFfRW51bShO
QU1FLCBUWVBFKQotLy8gRW1wdHkKLS8vJVBERE0tREVGSU5FIEFSUkFZX0VYVFJBX01VVEFCTEVf
TUVUSE9EUzJfRW51bShOQU1FLCBUWVBFKQotLy8lCi0vLyUvLyBUaGVzZSBtZXRob2RzIGJ5cGFz
cyB0aGUgdmFsaWRhdGlvbkZ1bmMgdG8gcHJvdmlkZSBzZXR0aW5nIG9mIHZhbHVlcyB0aGF0IHdl
cmUgbm90Ci0vLyUvLyBrbm93biBhdCB0aGUgdGltZSB0aGUgYmluYXJ5IHdhcyBjb21waWxlZC4K
LS8vJQotLy8lLSAodm9pZClhZGRSYXdWYWx1ZTooVFlQRSl2YWx1ZTsKLS8vJS0gKHZvaWQpYWRk
UmF3VmFsdWVzRnJvbUFycmF5OihHUEIjI05BTUUjI0FycmF5ICopYXJyYXk7Ci0vLyUtICh2b2lk
KWFkZFJhd1ZhbHVlczooY29uc3QgVFlQRSBbXSl2YWx1ZXMgY291bnQ6KE5TVUludGVnZXIpY291
bnQ7Ci0vLyUKLS8vJS0gKHZvaWQpaW5zZXJ0UmF3VmFsdWU6KFRZUEUpdmFsdWUgYXRJbmRleDoo
TlNVSW50ZWdlcilpbmRleDsKLS8vJQotLy8lLSAodm9pZClyZXBsYWNlVmFsdWVBdEluZGV4OihO
U1VJbnRlZ2VyKWluZGV4IHdpdGhSYXdWYWx1ZTooVFlQRSl2YWx1ZTsKLS8vJQotLy8lLy8gTm8g
dmFsaWRhdGlvbiBhcHBsaWVzIHRvIHRoZXNlIG1ldGhvZHMuCi0vLyUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2Jq
ZWN0aXZlYy9HUEJBcnJheS5tIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkFycmF5Lm0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQyNmM3Y2JkZGUwM2VkNTllNzQ3MTBlYTcyY2Y0ZDRmOGI4MGIzNDAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVj
L0dQQkFycmF5Lm0KKysrIC9kZXYvbnVsbApAQCAtMSwyNTM0ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW1wb3J0ICJHUEJBcnJheV9QYWNrYWdlUHJpdmF0
ZS5oIgotCi0jaW1wb3J0ICJHUEJNZXNzYWdlX1BhY2thZ2VQcml2YXRlLmgiCi0KLS8vIE11dGFi
bGUgYXJyYXlzIHVzZSBhbiBpbnRlcm5hbCBidWZmZXIgdGhhdCBjYW4gYWx3YXlzIGhvbGQgYSBt
dWx0aXBsZSBvZiB0aGlzIGVsZW1lbnRzLgotI2RlZmluZSBrQ2h1bmtTaXplIDE2Ci0jZGVmaW5l
IENhcGFjaXR5RnJvbUNvdW50KHgpICgoKHggLyBrQ2h1bmtTaXplKSArIDEpICoga0NodW5rU2l6
ZSkKLQotc3RhdGljIEJPT0wgQXJyYXlEZWZhdWx0X0lzVmFsaWRWYWx1ZShpbnQzMl90IHZhbHVl
KSB7Ci0gIC8vIEFueXRoaW5nIGJ1dCB0aGUgYmFkIHZhbHVlIG1hcmtlciBpcyBhbGxvd2VkLgot
ICByZXR1cm4gKHZhbHVlICE9IGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWUpOwotfQot
Ci0vLyVQRERNLURFRklORSBWQUxJREFURV9SQU5HRShJTkRFWCwgQ09VTlQpCi0vLyUgIGlmIChJ
TkRFWCA+PSBDT1VOVCkgewotLy8lICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0
aW9uCi0vLyUgICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5k
cyAoJWx1KSIsCi0vLyUgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKUlOREVY
LCAodW5zaWduZWQgbG9uZylDT1VOVF07Ci0vLyUgIH0KLS8vJVBERE0tREVGSU5FIE1BWUJFX0dS
T1dfVE9fU0VUX0NPVU5UKE5FV19DT1VOVCkKLS8vJSAgaWYgKE5FV19DT1VOVCA+IF9jYXBhY2l0
eSkgewotLy8lICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBhY2l0eTpDYXBhY2l0eUZyb21D
b3VudChORVdfQ09VTlQpXTsKLS8vJSAgfQotLy8lICBfY291bnQgPSBORVdfQ09VTlQ7Ci0vLyVQ
RERNLURFRklORSBTRVRfQ09VTlRfQU5EX01BWUJFX1NIUklOSyhORVdfQ09VTlQpCi0vLyUgIF9j
b3VudCA9IE5FV19DT1VOVDsKLS8vJSAgaWYgKChORVdfQ09VTlQgKyAoMiAqIGtDaHVua1NpemUp
KSA8IF9jYXBhY2l0eSkgewotLy8lICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBhY2l0eTpD
YXBhY2l0eUZyb21Db3VudChORVdfQ09VTlQpXTsKLS8vJSAgfQotCi0vLwotLy8gTWFjcm9zIGZv
ciB0aGUgY29tbW9uIGJhc2ljIGNhc2VzLgotLy8KLQotLy8lUERETS1ERUZJTkUgQVJSQVlfSU5U
RVJGQUNFX1NJTVBMRShOQU1FLCBUWVBFLCBGT1JNQVQpCi0vLyUjcHJhZ21hIG1hcmsgLSBOQU1F
Ci0vLyUKLS8vJUBpbXBsZW1lbnRhdGlvbiBHUEIjI05BTUUjI0FycmF5IHsKLS8vJSBAcGFja2Fn
ZQotLy8lICBUWVBFICpfdmFsdWVzOwotLy8lICBOU1VJbnRlZ2VyIF9jb3VudDsKLS8vJSAgTlNV
SW50ZWdlciBfY2FwYWNpdHk7Ci0vLyV9Ci0vLyUKLS8vJUBzeW50aGVzaXplIGNvdW50ID0gX2Nv
dW50OwotLy8lCi0vLyUrIChpbnN0YW5jZXR5cGUpYXJyYXkgewotLy8lICByZXR1cm4gW1tbc2Vs
ZiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotLy8lfQotLy8lCi0vLyUrIChpbnN0YW5jZXR5
cGUpYXJyYXlXaXRoVmFsdWU6KFRZUEUpdmFsdWUgewotLy8lICAvLyBDYXN0IGlzIG5lZWRlZCBz
byB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhW
YWx1ZXM6IG9uIHRvIGdldAotLy8lICAvLyB0aGUgdHlwZSBjb3JyZWN0LgotLy8lICByZXR1cm4g
W1soR1BCIyNOQU1FIyNBcnJheSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2YWx1ZSBj
b3VudDoxXSBhdXRvcmVsZWFzZV07Ci0vLyV9Ci0vLyUKLS8vJSsgKGluc3RhbmNldHlwZSlhcnJh
eVdpdGhWYWx1ZUFycmF5OihHUEIjI05BTUUjI0FycmF5ICopYXJyYXkgewotLy8lICByZXR1cm4g
W1soR1BCIyNOQU1FIyNBcnJheSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVBcnJheTphcnJh
eV0gYXV0b3JlbGVhc2VdOwotLy8lfQotLy8lCi0vLyUrIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRo
Q2FwYWNpdHk6KE5TVUludGVnZXIpY291bnQgewotLy8lICByZXR1cm4gW1tbc2VsZiBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpjb3VudF0gYXV0b3JlbGVhc2VdOwotLy8lfQotLy8lCi0vLyUtIChp
bnN0YW5jZXR5cGUpaW5pdCB7Ci0vLyUgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0vLyUgIC8vIE5v
IHdvcmsgbmVlZGVkOwotLy8lICByZXR1cm4gc2VsZjsKLS8vJX0KLS8vJQotLy8lLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoVmFsdWVBcnJheTooR1BCIyNOQU1FIyNBcnJheSAqKWFycmF5IHsKLS8v
JSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOmFycmF5LT5fdmFsdWVzIGNvdW50OmFycmF5
LT5fY291bnRdOwotLy8lfQotLy8lCi0vLyUtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6
KGNvbnN0IFRZUEUgW10pdmFsdWVzIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLS8vJSAgc2Vs
ZiA9IFtzZWxmIGluaXRdOwotLy8lICBpZiAoc2VsZikgewotLy8lICAgIGlmIChjb3VudCAmJiB2
YWx1ZXMpIHsKLS8vJSAgICAgIF92YWx1ZXMgPSByZWFsbG9jZihfdmFsdWVzLCBjb3VudCAqIHNp
emVvZihUWVBFKSk7Ci0vLyUgICAgICBpZiAoX3ZhbHVlcyAhPSBOVUxMKSB7Ci0vLyUgICAgICAg
IF9jYXBhY2l0eSA9IGNvdW50OwotLy8lICAgICAgICBtZW1jcHkoX3ZhbHVlcywgdmFsdWVzLCBj
b3VudCAqIHNpemVvZihUWVBFKSk7Ci0vLyUgICAgICAgIF9jb3VudCA9IGNvdW50OwotLy8lICAg
ICAgfSBlbHNlIHsKLS8vJSAgICAgICAgW3NlbGYgcmVsZWFzZV07Ci0vLyUgICAgICAgIFtOU0V4
Y2VwdGlvbiByYWlzZTpOU01hbGxvY0V4Y2VwdGlvbgotLy8lICAgICAgICAgICAgICAgICAgICBm
b3JtYXQ6QCJGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIiwKLS8vJSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShjb3VudCAqIHNpemVvZihUWVBFKSldOwotLy8l
ICAgICAgfQotLy8lICAgIH0KLS8vJSAgfQotLy8lICByZXR1cm4gc2VsZjsKLS8vJX0KLS8vJQot
Ly8lLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpY291bnQgewot
Ly8lICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBjb3VudDowXTsKLS8vJSAgaWYg
KHNlbGYgJiYgY291bnQpIHsKLS8vJSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6
Y291bnRdOwotLy8lICB9Ci0vLyUgIHJldHVybiBzZWxmOwotLy8lfQotLy8lCi0vLyUtIChpbnN0
YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLS8vJSAgcmV0dXJuIFtbR1BC
IyNOQU1FIyNBcnJheSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoVmFsdWVzOl92YWx1ZXMg
Y291bnQ6X2NvdW50XTsKLS8vJX0KLS8vJQotLy8lQVJSQVlfSU1NVVRBQkxFX0NPUkUoTkFNRSwg
VFlQRSwgLCBGT1JNQVQpCi0vLyUKLS8vJS0gKFRZUEUpdmFsdWVBdEluZGV4OihOU1VJbnRlZ2Vy
KWluZGV4IHsKLS8vJVZBTElEQVRFX1JBTkdFKGluZGV4LCBfY291bnQpCi0vLyUgIHJldHVybiBf
dmFsdWVzW2luZGV4XTsKLS8vJX0KLS8vJQotLy8lQVJSQVlfTVVUQUJMRV9DT1JFKE5BTUUsIFRZ
UEUsICwgRk9STUFUKQotLy8lQGVuZAotLy8lCi0KLS8vCi0vLyBTb21lIGNvcmUgbWFjcm9zIHVz
ZWQgZm9yIGJvdGggdGhlIHNpbXBsZSB0eXBlcyBhbmQgRW51bXMuCi0vLwotCi0vLyVQRERNLURF
RklORSBBUlJBWV9JTU1VVEFCTEVfQ09SRShOQU1FLCBUWVBFLCBBQ0NFU1NPUl9OQU1FLCBGT1JN
QVQpCi0vLyUtICh2b2lkKWRlYWxsb2MgewotLy8lICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAot
Ly8lICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJl
bGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0vLyUgICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1
dG9jcmVhdG9yKTsKLS8vJSAgZnJlZShfdmFsdWVzKTsKLS8vJSAgW3N1cGVyIGRlYWxsb2NdOwot
Ly8lfQotLy8lCi0vLyUtIChCT09MKWlzRXF1YWw6KEdQQiMjTkFNRSMjQXJyYXkgKilvdGhlciB7
Ci0vLyUgIGlmIChzZWxmID09IG90aGVyKSB7Ci0vLyUgICAgcmV0dXJuIFlFUzsKLS8vJSAgfQot
Ly8lICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEIjI05BTUUjI0FycmF5IGNsYXNzXV0p
IHsKLS8vJSAgICByZXR1cm4gTk87Ci0vLyUgIH0KLS8vJSAgcmV0dXJuIChfY291bnQgPT0gb3Ro
ZXItPl9jb3VudAotLy8lICAgICAgICAgICYmIG1lbWNtcChfdmFsdWVzLCBvdGhlci0+X3ZhbHVl
cywgKF9jb3VudCAqIHNpemVvZihUWVBFKSkpID09IDApOwotLy8lfQotLy8lCi0vLyUtIChOU1VJ
bnRlZ2VyKWhhc2ggewotLy8lICAvLyBGb2xsb3cgTlNBcnJheSdzIGxlYWQsIGFuZCB1c2UgdGhl
IGNvdW50IGFzIHRoZSBoYXNoLgotLy8lICByZXR1cm4gX2NvdW50OwotLy8lfQotLy8lCi0vLyUt
IChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLS8vJSAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQg
PSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgIiwgW3NlbGYg
Y2xhc3NdLCBzZWxmXTsKLS8vJSAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwLCBjb3VudCA9IF9jb3Vu
dDsgaSA8IGNvdW50OyArK2kpIHsKLS8vJSAgICBpZiAoaSA9PSAwKSB7Ci0vLyUgICAgICBbcmVz
dWx0IGFwcGVuZEZvcm1hdDpAIiMjRk9STUFUIyMiLCBfdmFsdWVzW2ldXTsKLS8vJSAgICB9IGVs
c2UgewotLy8lICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIsICMjRk9STUFUIyMiLCBfdmFs
dWVzW2ldXTsKLS8vJSAgICB9Ci0vLyUgIH0KLS8vJSAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIg
fSJdOwotLy8lICByZXR1cm4gcmVzdWx0OwotLy8lfQotLy8lCi0vLyUtICh2b2lkKWVudW1lcmF0
ZSMjQUNDRVNTT1JfTkFNRSMjVmFsdWVzV2l0aEJsb2NrOih2b2lkICheKShUWVBFIHZhbHVlLCBO
U1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2sgewotLy8lICBbc2VsZiBlbnVtZXJhdGUj
I0FDQ0VTU09SX05BTUUjI1ZhbHVlc1dpdGhPcHRpb25zOjAgdXNpbmdCbG9jazpibG9ja107Ci0v
LyV9Ci0vLyUKLS8vJS0gKHZvaWQpZW51bWVyYXRlIyNBQ0NFU1NPUl9OQU1FIyNWYWx1ZXNXaXRo
T3B0aW9uczooTlNFbnVtZXJhdGlvbk9wdGlvbnMpb3B0cwotLy8lICAgICAgICAgICAgICAgICAg
QUNDRVNTT1JfTkFNRSRTICAgICAgdXNpbmdCbG9jazoodm9pZCAoXikoVFlQRSB2YWx1ZSwgTlNV
SW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLS8vJSAgLy8gTlNFbnVtZXJhdGlvbkNv
bmN1cnJlbnQgaXNuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCAoYW5kIEFwcGxlJ3MgZG9jcyBzYXkg
dGhhdCBpcyBvaykuCi0vLyUgIEJPT0wgc3RvcCA9IE5POwotLy8lICBpZiAoKG9wdHMgJiBOU0Vu
dW1lcmF0aW9uUmV2ZXJzZSkgPT0gMCkgewotLy8lICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCwg
Y291bnQgPSBfY291bnQ7IGkgPCBjb3VudDsgKytpKSB7Ci0vLyUgICAgICBibG9jayhfdmFsdWVz
W2ldLCBpLCAmc3RvcCk7Ci0vLyUgICAgICBpZiAoc3RvcCkgYnJlYWs7Ci0vLyUgICAgfQotLy8l
ICB9IGVsc2UgaWYgKF9jb3VudCA+IDApIHsKLS8vJSAgICBmb3IgKE5TVUludGVnZXIgaSA9IF9j
b3VudDsgaSA+IDA7IC0taSkgewotLy8lICAgICAgYmxvY2soX3ZhbHVlc1tpIC0gMV0sIChpIC0g
MSksICZzdG9wKTsKLS8vJSAgICAgIGlmIChzdG9wKSBicmVhazsKLS8vJSAgICB9Ci0vLyUgIH0K
LS8vJX0KLQotLy8lUERETS1ERUZJTkUgTVVUQVRJT05fSE9PS19Ob25lKCkKLS8vJVBERE0tREVG
SU5FIE1VVEFUSU9OX01FVEhPRFMoTkFNRSwgVFlQRSwgQUNDRVNTT1JfTkFNRSwgSE9PS18xLCBI
T09LXzIpCi0vLyUtICh2b2lkKWFkZCMjQUNDRVNTT1JfTkFNRSMjVmFsdWU6KFRZUEUpdmFsdWUg
ewotLy8lICBbc2VsZiBhZGQjI0FDQ0VTU09SX05BTUUjI1ZhbHVlczomdmFsdWUgY291bnQ6MV07
Ci0vLyV9Ci0vLyUKLS8vJS0gKHZvaWQpYWRkIyNBQ0NFU1NPUl9OQU1FIyNWYWx1ZXM6KGNvbnN0
IFRZUEUgW10pdmFsdWVzIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLS8vJSAgaWYgKHZhbHVl
cyA9PSBOVUxMIHx8IGNvdW50ID09IDApIHJldHVybjsKLS8vJU1VVEFUSU9OX0hPT0tfIyNIT09L
XzEoKSAgTlNVSW50ZWdlciBpbml0aWFsQ291bnQgPSBfY291bnQ7Ci0vLyUgIE5TVUludGVnZXIg
bmV3Q291bnQgPSBpbml0aWFsQ291bnQgKyBjb3VudDsKLS8vJU1BWUJFX0dST1dfVE9fU0VUX0NP
VU5UKG5ld0NvdW50KQotLy8lICBtZW1jcHkoJl92YWx1ZXNbaW5pdGlhbENvdW50XSwgdmFsdWVz
LCBjb3VudCAqIHNpemVvZihUWVBFKSk7Ci0vLyUgIGlmIChfYXV0b2NyZWF0b3IpIHsKLS8vJSAg
ICBHUEJBdXRvY3JlYXRlZEFycmF5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLS8vJSAg
fQotLy8lfQotLy8lCi0vLyUtICh2b2lkKWluc2VydCMjQUNDRVNTT1JfTkFNRSMjVmFsdWU6KFRZ
UEUpdmFsdWUgYXRJbmRleDooTlNVSW50ZWdlcilpbmRleCB7Ci0vLyVWQUxJREFURV9SQU5HRShp
bmRleCwgX2NvdW50ICsgMSkKLS8vJU1VVEFUSU9OX0hPT0tfIyNIT09LXzIoKSAgTlNVSW50ZWdl
ciBpbml0aWFsQ291bnQgPSBfY291bnQ7Ci0vLyUgIE5TVUludGVnZXIgbmV3Q291bnQgPSBpbml0
aWFsQ291bnQgKyAxOwotLy8lTUFZQkVfR1JPV19UT19TRVRfQ09VTlQobmV3Q291bnQpCi0vLyUg
IGlmIChpbmRleCAhPSBpbml0aWFsQ291bnQpIHsKLS8vJSAgICBtZW1tb3ZlKCZfdmFsdWVzW2lu
ZGV4ICsgMV0sICZfdmFsdWVzW2luZGV4XSwgKGluaXRpYWxDb3VudCAtIGluZGV4KSAqIHNpemVv
ZihUWVBFKSk7Ci0vLyUgIH0KLS8vJSAgX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTsKLS8vJSAgaWYg
KF9hdXRvY3JlYXRvcikgewotLy8lICAgIEdQQkF1dG9jcmVhdGVkQXJyYXlNb2RpZmllZChfYXV0
b2NyZWF0b3IsIHNlbGYpOwotLy8lICB9Ci0vLyV9Ci0vLyUKLS8vJS0gKHZvaWQpcmVwbGFjZVZh
bHVlQXRJbmRleDooTlNVSW50ZWdlcilpbmRleCB3aXRoIyNBQ0NFU1NPUl9OQU1FIyNWYWx1ZToo
VFlQRSl2YWx1ZSB7Ci0vLyVWQUxJREFURV9SQU5HRShpbmRleCwgX2NvdW50KQotLy8lTVVUQVRJ
T05fSE9PS18jI0hPT0tfMigpICBfdmFsdWVzW2luZGV4XSA9IHZhbHVlOwotLy8lfQotCi0vLyVQ
RERNLURFRklORSBBUlJBWV9NVVRBQkxFX0NPUkUoTkFNRSwgVFlQRSwgQUNDRVNTT1JfTkFNRSwg
Rk9STUFUKQotLy8lLSAodm9pZClpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6KE5TVUludGVnZXIp
bmV3Q2FwYWNpdHkgewotLy8lICBfdmFsdWVzID0gcmVhbGxvY2YoX3ZhbHVlcywgbmV3Q2FwYWNp
dHkgKiBzaXplb2YoVFlQRSkpOwotLy8lICBpZiAoX3ZhbHVlcyA9PSBOVUxMKSB7Ci0vLyUgICAg
X2NhcGFjaXR5ID0gMDsKLS8vJSAgICBfY291bnQgPSAwOwotLy8lICAgIFtOU0V4Y2VwdGlvbiBy
YWlzZTpOU01hbGxvY0V4Y2VwdGlvbgotLy8lICAgICAgICAgICAgICAgIGZvcm1hdDpAIkZhaWxl
ZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMiLAotLy8lICAgICAgICAgICAgICAgICAgICAgICAodW5z
aWduZWQgbG9uZykobmV3Q2FwYWNpdHkgKiBzaXplb2YoVFlQRSkpXTsKLS8vJSAgfQotLy8lICBf
Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKLS8vJX0KLS8vJQotLy8lTVVUQVRJT05fTUVUSE9EUyhO
QU1FLCBUWVBFLCBBQ0NFU1NPUl9OQU1FLCBOb25lLCBOb25lKQotLy8lCi0vLyUtICh2b2lkKWFk
ZCMjQUNDRVNTT1JfTkFNRSMjVmFsdWVzRnJvbUFycmF5OihHUEIjI05BTUUjI0FycmF5ICopYXJy
YXkgewotLy8lICBbc2VsZiBhZGQjI0FDQ0VTU09SX05BTUUjI1ZhbHVlczphcnJheS0+X3ZhbHVl
cyBjb3VudDphcnJheS0+X2NvdW50XTsKLS8vJX0KLS8vJQotLy8lLSAodm9pZClyZW1vdmVWYWx1
ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggewotLy8lVkFMSURBVEVfUkFOR0UoaW5kZXgsIF9j
b3VudCkKLS8vJSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IF9jb3VudCAtIDE7Ci0vLyUgIGlmIChp
bmRleCAhPSBuZXdDb3VudCkgewotLy8lICAgIG1lbW1vdmUoJl92YWx1ZXNbaW5kZXhdLCAmX3Zh
bHVlc1tpbmRleCArIDFdLCAobmV3Q291bnQgLSBpbmRleCkgKiBzaXplb2YoVFlQRSkpOwotLy8l
ICB9Ci0vLyVTRVRfQ09VTlRfQU5EX01BWUJFX1NIUklOSyhuZXdDb3VudCkKLS8vJX0KLS8vJQot
Ly8lLSAodm9pZClyZW1vdmVBbGwgewotLy8lU0VUX0NPVU5UX0FORF9NQVlCRV9TSFJJTksoMCkK
LS8vJX0KLS8vJQotLy8lLSAodm9pZClleGNoYW5nZVZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilp
ZHgxCi0vLyUgICAgICAgICAgICB3aXRoVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWlkeDIgewot
Ly8lVkFMSURBVEVfUkFOR0UoaWR4MSwgX2NvdW50KQotLy8lVkFMSURBVEVfUkFOR0UoaWR4Miwg
X2NvdW50KQotLy8lICBUWVBFIHRlbXAgPSBfdmFsdWVzW2lkeDFdOwotLy8lICBfdmFsdWVzW2lk
eDFdID0gX3ZhbHVlc1tpZHgyXTsKLS8vJSAgX3ZhbHVlc1tpZHgyXSA9IHRlbXA7Ci0vLyV9Ci0v
LyUKLQotLy8lUERETS1FWFBBTkQgQVJSQVlfSU5URVJGQUNFX1NJTVBMRShJbnQzMiwgaW50MzJf
dCwgJWQpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBp
dCBkaXJlY3RseS4KLQotI3ByYWdtYSBtYXJrIC0gSW50MzIKLQotQGltcGxlbWVudGF0aW9uIEdQ
QkludDMyQXJyYXkgewotIEBwYWNrYWdlCi0gIGludDMyX3QgKl92YWx1ZXM7Ci0gIE5TVUludGVn
ZXIgX2NvdW50OwotICBOU1VJbnRlZ2VyIF9jYXBhY2l0eTsKLX0KLQotQHN5bnRoZXNpemUgY291
bnQgPSBfY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJheSB7Ci0gIHJldHVybiBbW1tzZWxm
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJheVdp
dGhWYWx1ZTooaW50MzJfdCl2YWx1ZSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21w
aWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczogb24g
dG8gZ2V0Ci0gIC8vIHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQzMkFycmF5
Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6JnZhbHVlIGNvdW50OjFdIGF1dG9yZWxlYXNl
XTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0aFZhbHVlQXJyYXk6KEdQQkludDMyQXJy
YXkgKilhcnJheSB7Ci0gIHJldHVybiBbWyhHUEJJbnQzMkFycmF5Kilbc2VsZiBhbGxvY10gaW5p
dFdpdGhWYWx1ZUFycmF5OmFycmF5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlhcnJheVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBbW1tzZWxm
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgLy8gTm8gd29yayBu
ZWVkZWQ7Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1
ZUFycmF5OihHUEJJbnQzMkFycmF5ICopYXJyYXkgewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhW
YWx1ZXM6YXJyYXktPl92YWx1ZXMgY291bnQ6YXJyYXktPl9jb3VudF07Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMgY291bnQ6KE5T
VUludGVnZXIpY291bnQgewotICBzZWxmID0gW3NlbGYgaW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0g
ICAgaWYgKGNvdW50ICYmIHZhbHVlcykgewotICAgICAgX3ZhbHVlcyA9IHJlYWxsb2NmKF92YWx1
ZXMsIGNvdW50ICogc2l6ZW9mKGludDMyX3QpKTsKLSAgICAgIGlmIChfdmFsdWVzICE9IE5VTEwp
IHsKLSAgICAgICAgX2NhcGFjaXR5ID0gY291bnQ7Ci0gICAgICAgIG1lbWNweShfdmFsdWVzLCB2
YWx1ZXMsIGNvdW50ICogc2l6ZW9mKGludDMyX3QpKTsKLSAgICAgICAgX2NvdW50ID0gY291bnQ7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBbc2VsZiByZWxlYXNlXTsKLSAgICAgICAgW05TRXhj
ZXB0aW9uIHJhaXNlOk5TTWFsbG9jRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgIGZvcm1h
dDpAIkZhaWxlZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHVuc2lnbmVkIGxvbmcpKGNvdW50ICogc2l6ZW9mKGludDMyX3QpKV07Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDYXBhY2l0eTooTlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZh
bHVlczpOVUxMIGNvdW50OjBdOwotICBpZiAoc2VsZiAmJiBjb3VudCkgewotICAgIFtzZWxmIGlu
dGVybmFsUmVzaXplVG9DYXBhY2l0eTpjb3VudF07Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4g
W1tHUEJJbnQzMkFycmF5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhWYWx1ZXM6X3ZhbHVl
cyBjb3VudDpfY291bnRdOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1
dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQg
YmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNz
XSwgX2F1dG9jcmVhdG9yKTsKLSAgZnJlZShfdmFsdWVzKTsKLSAgW3N1cGVyIGRlYWxsb2NdOwot
fQotCi0tIChCT09MKWlzRXF1YWw6KEdQQkludDMyQXJyYXkgKilvdGhlciB7Ci0gIGlmIChzZWxm
ID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRP
ZkNsYXNzOltHUEJJbnQzMkFycmF5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAg
cmV0dXJuIChfY291bnQgPT0gb3RoZXItPl9jb3VudAotICAgICAgICAgICYmIG1lbWNtcChfdmFs
dWVzLCBvdGhlci0+X3ZhbHVlcywgKF9jb3VudCAqIHNpemVvZihpbnQzMl90KSkpID09IDApOwot
fQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICAvLyBGb2xsb3cgTlNBcnJheSdzIGxlYWQsIGFu
ZCB1c2UgdGhlIGNvdW50IGFzIHRoZSBoYXNoLgotICByZXR1cm4gX2NvdW50OwotfQotCi0tIChO
U1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNN
dXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgIiwgW3NlbGYgY2xhc3Nd
LCBzZWxmXTsKLSAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwLCBjb3VudCA9IF9jb3VudDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICBbcmVzdWx0IGFwcGVuZEZvcm1h
dDpAIiVkIiwgX3ZhbHVlc1tpXV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIFtyZXN1bHQgYXBwZW5k
Rm9ybWF0OkAiLCAlZCIsIF92YWx1ZXNbaV1dOwotICAgIH0KLSAgfQotICBbcmVzdWx0IGFwcGVu
ZEZvcm1hdDpAIiB9Il07Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRl
VmFsdWVzV2l0aEJsb2NrOih2b2lkICheKShpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwg
Qk9PTCAqc3RvcCkpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVWYWx1ZXNXaXRoT3B0aW9uczow
IHVzaW5nQmxvY2s6YmxvY2tdOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhPcHRp
b25zOihOU0VudW1lcmF0aW9uT3B0aW9ucylvcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICB1
c2luZ0Jsb2NrOih2b2lkICheKShpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAq
c3RvcCkpYmxvY2sgewotICAvLyBOU0VudW1lcmF0aW9uQ29uY3VycmVudCBpc24ndCBjdXJyZW50
bHkgc3VwcG9ydGVkIChhbmQgQXBwbGUncyBkb2NzIHNheSB0aGF0IGlzIG9rKS4KLSAgQk9PTCBz
dG9wID0gTk87Ci0gIGlmICgob3B0cyAmIE5TRW51bWVyYXRpb25SZXZlcnNlKSA9PSAwKSB7Ci0g
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwLCBjb3VudCA9IF9jb3VudDsgaSA8IGNvdW50OyArK2kp
IHsKLSAgICAgIGJsb2NrKF92YWx1ZXNbaV0sIGksICZzdG9wKTsKLSAgICAgIGlmIChzdG9wKSBi
cmVhazsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoX2NvdW50ID4gMCkgewotICAgIGZvciAoTlNVSW50
ZWdlciBpID0gX2NvdW50OyBpID4gMDsgLS1pKSB7Ci0gICAgICBibG9jayhfdmFsdWVzW2kgLSAx
XSwgKGkgLSAxKSwgJnN0b3ApOwotICAgICAgaWYgKHN0b3ApIGJyZWFrOwotICAgIH0KLSAgfQot
fQotCi0tIChpbnQzMl90KXZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpbmRleCB7Ci0gIGlmIChp
bmRleCA+PSBfY291bnQpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlv
bgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVs
dSkiLAotICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylpbmRleCwgKHVuc2ln
bmVkIGxvbmcpX2NvdW50XTsKLSAgfQotICByZXR1cm4gX3ZhbHVlc1tpbmRleF07Ci19Ci0KLS0g
KHZvaWQpaW50ZXJuYWxSZXNpemVUb0NhcGFjaXR5OihOU1VJbnRlZ2VyKW5ld0NhcGFjaXR5IHsK
LSAgX3ZhbHVlcyA9IHJlYWxsb2NmKF92YWx1ZXMsIG5ld0NhcGFjaXR5ICogc2l6ZW9mKGludDMy
X3QpKTsKLSAgaWYgKF92YWx1ZXMgPT0gTlVMTCkgewotICAgIF9jYXBhY2l0eSA9IDA7Ci0gICAg
X2NvdW50ID0gMDsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNNYWxsb2NFeGNlcHRpb24KLSAg
ICAgICAgICAgICAgICBmb3JtYXQ6QCJGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKG5ld0NhcGFjaXR5ICogc2l6ZW9m
KGludDMyX3QpKV07Ci0gIH0KLSAgX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7Ci19Ci0KLS0gKHZv
aWQpYWRkVmFsdWU6KGludDMyX3QpdmFsdWUgewotICBbc2VsZiBhZGRWYWx1ZXM6JnZhbHVlIGNv
dW50OjFdOwotfQotCi0tICh2b2lkKWFkZFZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMg
Y291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBpZiAodmFsdWVzID09IE5VTEwgfHwgY291bnQg
PT0gMCkgcmV0dXJuOwotICBOU1VJbnRlZ2VyIGluaXRpYWxDb3VudCA9IF9jb3VudDsKLSAgTlNV
SW50ZWdlciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIGNvdW50OwotICBpZiAobmV3Q291bnQg
PiBfY2FwYWNpdHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNp
dHlGcm9tQ291bnQobmV3Q291bnQpXTsKLSAgfQotICBfY291bnQgPSBuZXdDb3VudDsKLSAgbWVt
Y3B5KCZfdmFsdWVzW2luaXRpYWxDb3VudF0sIHZhbHVlcywgY291bnQgKiBzaXplb2YoaW50MzJf
dCkpOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWRBcnJheU1vZGlm
aWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClpbnNlcnRWYWx1ZToo
aW50MzJfdCl2YWx1ZSBhdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHsKLSAgaWYgKGluZGV4ID49
IF9jb3VudCArIDEpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgot
ICAgICAgICAgICAgICAgIGZvcm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSki
LAotICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylpbmRleCwgKHVuc2lnbmVk
IGxvbmcpX2NvdW50ICsgMV07Ci0gIH0KLSAgTlNVSW50ZWdlciBpbml0aWFsQ291bnQgPSBfY291
bnQ7Ci0gIE5TVUludGVnZXIgbmV3Q291bnQgPSBpbml0aWFsQ291bnQgKyAxOwotICBpZiAobmV3
Q291bnQgPiBfY2FwYWNpdHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6
Q2FwYWNpdHlGcm9tQ291bnQobmV3Q291bnQpXTsKLSAgfQotICBfY291bnQgPSBuZXdDb3VudDsK
LSAgaWYgKGluZGV4ICE9IGluaXRpYWxDb3VudCkgewotICAgIG1lbW1vdmUoJl92YWx1ZXNbaW5k
ZXggKyAxXSwgJl92YWx1ZXNbaW5kZXhdLCAoaW5pdGlhbENvdW50IC0gaW5kZXgpICogc2l6ZW9m
KGludDMyX3QpKTsKLSAgfQotICBfdmFsdWVzW2luZGV4XSA9IHZhbHVlOwotICBpZiAoX2F1dG9j
cmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWRBcnJheU1vZGlmaWVkKF9hdXRvY3JlYXRvciwg
c2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZXBsYWNlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2Vy
KWluZGV4IHdpdGhWYWx1ZTooaW50MzJfdCl2YWx1ZSB7Ci0gIGlmIChpbmRleCA+PSBfY291bnQp
IHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAg
ICAgIGZvcm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAg
ICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylpbmRleCwgKHVuc2lnbmVkIGxvbmcpX2NvdW50
XTsKLSAgfQotICBfdmFsdWVzW2luZGV4XSA9IHZhbHVlOwotfQotCi0tICh2b2lkKWFkZFZhbHVl
c0Zyb21BcnJheTooR1BCSW50MzJBcnJheSAqKWFycmF5IHsKLSAgW3NlbGYgYWRkVmFsdWVzOmFy
cmF5LT5fdmFsdWVzIGNvdW50OmFycmF5LT5fY291bnRdOwotfQotCi0tICh2b2lkKXJlbW92ZVZh
bHVlQXRJbmRleDooTlNVSW50ZWdlcilpbmRleCB7Ci0gIGlmIChpbmRleCA+PSBfY291bnQpIHsK
LSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAg
IGZvcm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAg
ICAgICAgICAgICAodW5zaWduZWQgbG9uZylpbmRleCwgKHVuc2lnbmVkIGxvbmcpX2NvdW50XTsK
LSAgfQotICBOU1VJbnRlZ2VyIG5ld0NvdW50ID0gX2NvdW50IC0gMTsKLSAgaWYgKGluZGV4ICE9
IG5ld0NvdW50KSB7Ci0gICAgbWVtbW92ZSgmX3ZhbHVlc1tpbmRleF0sICZfdmFsdWVzW2luZGV4
ICsgMV0sIChuZXdDb3VudCAtIGluZGV4KSAqIHNpemVvZihpbnQzMl90KSk7Ci0gIH0KLSAgX2Nv
dW50ID0gbmV3Q291bnQ7Ci0gIGlmICgobmV3Q291bnQgKyAoMiAqIGtDaHVua1NpemUpKSA8IF9j
YXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBhY2l0eTpDYXBhY2l0eUZy
b21Db3VudChuZXdDb3VudCldOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgX2Nv
dW50ID0gMDsKLSAgaWYgKCgwICsgKDIgKiBrQ2h1bmtTaXplKSkgPCBfY2FwYWNpdHkpIHsKLSAg
ICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNpdHlGcm9tQ291bnQoMCldOwot
ICB9Ci19Ci0KLS0gKHZvaWQpZXhjaGFuZ2VWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaWR4MQot
ICAgICAgICAgICAgd2l0aFZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpZHgyIHsKLSAgaWYgKGlk
eDEgPj0gX2NvdW50KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24K
LSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUp
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaWR4MSwgKHVuc2lnbmVk
IGxvbmcpX2NvdW50XTsKLSAgfQotICBpZiAoaWR4MiA+PSBfY291bnQpIHsKLSAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIklu
ZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAgICAgICAgICAo
dW5zaWduZWQgbG9uZylpZHgyLCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9Ci0gIGludDMy
X3QgdGVtcCA9IF92YWx1ZXNbaWR4MV07Ci0gIF92YWx1ZXNbaWR4MV0gPSBfdmFsdWVzW2lkeDJd
OwotICBfdmFsdWVzW2lkeDJdID0gdGVtcDsKLX0KLQotQGVuZAotCi0vLyVQRERNLUVYUEFORCBB
UlJBWV9JTlRFUkZBQ0VfU0lNUExFKFVJbnQzMiwgdWludDMyX3QsICV1KQotLy8gVGhpcyBibG9j
ayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLSNwcmFn
bWEgbWFyayAtIFVJbnQzMgotCi1AaW1wbGVtZW50YXRpb24gR1BCVUludDMyQXJyYXkgewotIEBw
YWNrYWdlCi0gIHVpbnQzMl90ICpfdmFsdWVzOwotICBOU1VJbnRlZ2VyIF9jb3VudDsKLSAgTlNV
SW50ZWdlciBfY2FwYWNpdHk7Ci19Ci0KLUBzeW50aGVzaXplIGNvdW50ID0gX2NvdW50OwotCi0r
IChpbnN0YW5jZXR5cGUpYXJyYXkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsdWU6KHVpbnQzMl90
KXZhbHVlIHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQg
Y2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOiBvbiB0byBnZXQKLSAgLy8gdGhl
IHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQzMkFycmF5Kilbc2VsZiBhbGxvY10g
aW5pdFdpdGhWYWx1ZXM6JnZhbHVlIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5z
dGFuY2V0eXBlKWFycmF5V2l0aFZhbHVlQXJyYXk6KEdQQlVJbnQzMkFycmF5ICopYXJyYXkgewot
ICByZXR1cm4gW1soR1BCVUludDMyQXJyYXkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlQXJy
YXk6YXJyYXldIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0aENh
cGFjaXR5OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAvLyBObyB3b3JrIG5lZWRlZDsKLSAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlQXJyYXk6KEdQQlVJ
bnQzMkFycmF5ICopYXJyYXkgewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6YXJyYXkt
Pl92YWx1ZXMgY291bnQ6YXJyYXktPl9jb3VudF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFZhbHVlczooY29uc3QgdWludDMyX3QgW10pdmFsdWVzIGNvdW50OihOU1VJbnRlZ2VyKWNv
dW50IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIGlmIChjb3Vu
dCAmJiB2YWx1ZXMpIHsKLSAgICAgIF92YWx1ZXMgPSByZWFsbG9jZihfdmFsdWVzLCBjb3VudCAq
IHNpemVvZih1aW50MzJfdCkpOwotICAgICAgaWYgKF92YWx1ZXMgIT0gTlVMTCkgewotICAgICAg
ICBfY2FwYWNpdHkgPSBjb3VudDsKLSAgICAgICAgbWVtY3B5KF92YWx1ZXMsIHZhbHVlcywgY291
bnQgKiBzaXplb2YodWludDMyX3QpKTsKLSAgICAgICAgX2NvdW50ID0gY291bnQ7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBbc2VsZiByZWxlYXNlXTsKLSAgICAgICAgW05TRXhjZXB0aW9uIHJh
aXNlOk5TTWFsbG9jRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdDpAIkZhaWxl
ZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVu
c2lnbmVkIGxvbmcpKGNvdW50ICogc2l6ZW9mKHVpbnQzMl90KSldOwotICAgICAgfQotICAgIH0K
LSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNp
dHk6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVM
TCBjb3VudDowXTsKLSAgaWYgKHNlbGYgJiYgY291bnQpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJl
c2l6ZVRvQ2FwYWNpdHk6Y291bnRdOwotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCVUlu
dDMyQXJyYXkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aFZhbHVlczpfdmFsdWVzIGNvdW50
Ol9jb3VudF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0
b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUg
cmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0
b2NyZWF0b3IpOwotICBmcmVlKF92YWx1ZXMpOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KEJPT0wpaXNFcXVhbDooR1BCVUludDMyQXJyYXkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90
aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNz
OltHUEJVSW50MzJBcnJheSBjbGFzc11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVy
biAoX2NvdW50ID09IG90aGVyLT5fY291bnQKLSAgICAgICAgICAmJiBtZW1jbXAoX3ZhbHVlcywg
b3RoZXItPl92YWx1ZXMsIChfY291bnQgKiBzaXplb2YodWludDMyX3QpKSkgPT0gMCk7Ci19Ci0K
LS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIC8vIEZvbGxvdyBOU0FycmF5J3MgbGVhZCwgYW5kIHVz
ZSB0aGUgY291bnQgYXMgdGhlIGhhc2guCi0gIHJldHVybiBfY291bnQ7Ci19Ci0KLS0gKE5TU3Ry
aW5nICopZGVzY3JpcHRpb24gewotICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFi
bGVTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAiLCBbc2VsZiBjbGFzc10sIHNl
bGZdOwotICBmb3IgKE5TVUludGVnZXIgaSA9IDAsIGNvdW50ID0gX2NvdW50OyBpIDwgY291bnQ7
ICsraSkgewotICAgIGlmIChpID09IDApIHsKLSAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAi
JXUiLCBfdmFsdWVzW2ldXTsKLSAgICB9IGVsc2UgewotICAgICAgW3Jlc3VsdCBhcHBlbmRGb3Jt
YXQ6QCIsICV1IiwgX3ZhbHVlc1tpXV07Ci0gICAgfQotICB9Ci0gIFtyZXN1bHQgYXBwZW5kRm9y
bWF0OkAiIH0iXTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVWYWx1
ZXNXaXRoQmxvY2s6KHZvaWQgKF4pKHVpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9P
TCAqc3RvcCkpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVWYWx1ZXNXaXRoT3B0aW9uczowIHVz
aW5nQmxvY2s6YmxvY2tdOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25z
OihOU0VudW1lcmF0aW9uT3B0aW9ucylvcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2lu
Z0Jsb2NrOih2b2lkICheKSh1aW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0
b3ApKWJsb2NrIHsKLSAgLy8gTlNFbnVtZXJhdGlvbkNvbmN1cnJlbnQgaXNuJ3QgY3VycmVudGx5
IHN1cHBvcnRlZCAoYW5kIEFwcGxlJ3MgZG9jcyBzYXkgdGhhdCBpcyBvaykuCi0gIEJPT0wgc3Rv
cCA9IE5POwotICBpZiAoKG9wdHMgJiBOU0VudW1lcmF0aW9uUmV2ZXJzZSkgPT0gMCkgewotICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMCwgY291bnQgPSBfY291bnQ7IGkgPCBjb3VudDsgKytpKSB7
Ci0gICAgICBibG9jayhfdmFsdWVzW2ldLCBpLCAmc3RvcCk7Ci0gICAgICBpZiAoc3RvcCkgYnJl
YWs7Ci0gICAgfQotICB9IGVsc2UgaWYgKF9jb3VudCA+IDApIHsKLSAgICBmb3IgKE5TVUludGVn
ZXIgaSA9IF9jb3VudDsgaSA+IDA7IC0taSkgewotICAgICAgYmxvY2soX3ZhbHVlc1tpIC0gMV0s
IChpIC0gMSksICZzdG9wKTsKLSAgICAgIGlmIChzdG9wKSBicmVhazsKLSAgICB9Ci0gIH0KLX0K
LQotLSAodWludDMyX3QpdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHsKLSAgaWYgKGlu
ZGV4ID49IF9jb3VudCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0aW9u
Ci0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1
KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4LCAodW5zaWdu
ZWQgbG9uZylfY291bnRdOwotICB9Ci0gIHJldHVybiBfdmFsdWVzW2luZGV4XTsKLX0KLQotLSAo
dm9pZClpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6KE5TVUludGVnZXIpbmV3Q2FwYWNpdHkgewot
ICBfdmFsdWVzID0gcmVhbGxvY2YoX3ZhbHVlcywgbmV3Q2FwYWNpdHkgKiBzaXplb2YodWludDMy
X3QpKTsKLSAgaWYgKF92YWx1ZXMgPT0gTlVMTCkgewotICAgIF9jYXBhY2l0eSA9IDA7Ci0gICAg
X2NvdW50ID0gMDsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNNYWxsb2NFeGNlcHRpb24KLSAg
ICAgICAgICAgICAgICBmb3JtYXQ6QCJGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKG5ld0NhcGFjaXR5ICogc2l6ZW9m
KHVpbnQzMl90KSldOwotICB9Ci0gIF9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwotfQotCi0tICh2
b2lkKWFkZFZhbHVlOih1aW50MzJfdCl2YWx1ZSB7Ci0gIFtzZWxmIGFkZFZhbHVlczomdmFsdWUg
Y291bnQ6MV07Ci19Ci0KLS0gKHZvaWQpYWRkVmFsdWVzOihjb25zdCB1aW50MzJfdCBbXSl2YWx1
ZXMgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBpZiAodmFsdWVzID09IE5VTEwgfHwgY291
bnQgPT0gMCkgcmV0dXJuOwotICBOU1VJbnRlZ2VyIGluaXRpYWxDb3VudCA9IF9jb3VudDsKLSAg
TlNVSW50ZWdlciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIGNvdW50OwotICBpZiAobmV3Q291
bnQgPiBfY2FwYWNpdHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2Fw
YWNpdHlGcm9tQ291bnQobmV3Q291bnQpXTsKLSAgfQotICBfY291bnQgPSBuZXdDb3VudDsKLSAg
bWVtY3B5KCZfdmFsdWVzW2luaXRpYWxDb3VudF0sIHZhbHVlcywgY291bnQgKiBzaXplb2YodWlu
dDMyX3QpKTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkQXJyYXlN
b2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpaW5zZXJ0VmFs
dWU6KHVpbnQzMl90KXZhbHVlIGF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggewotICBpZiAoaW5k
ZXggPj0gX2NvdW50ICsgMSkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0
aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAo
JWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4LCAodW5z
aWduZWQgbG9uZylfY291bnQgKyAxXTsKLSAgfQotICBOU1VJbnRlZ2VyIGluaXRpYWxDb3VudCA9
IF9jb3VudDsKLSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIDE7Ci0gIGlm
IChuZXdDb3VudCA+IF9jYXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBh
Y2l0eTpDYXBhY2l0eUZyb21Db3VudChuZXdDb3VudCldOwotICB9Ci0gIF9jb3VudCA9IG5ld0Nv
dW50OwotICBpZiAoaW5kZXggIT0gaW5pdGlhbENvdW50KSB7Ci0gICAgbWVtbW92ZSgmX3ZhbHVl
c1tpbmRleCArIDFdLCAmX3ZhbHVlc1tpbmRleF0sIChpbml0aWFsQ291bnQgLSBpbmRleCkgKiBz
aXplb2YodWludDMyX3QpKTsKLSAgfQotICBfdmFsdWVzW2luZGV4XSA9IHZhbHVlOwotICBpZiAo
X2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWRBcnJheU1vZGlmaWVkKF9hdXRvY3Jl
YXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZXBsYWNlVmFsdWVBdEluZGV4OihOU1VJ
bnRlZ2VyKWluZGV4IHdpdGhWYWx1ZToodWludDMyX3QpdmFsdWUgewotICBpZiAoaW5kZXggPj0g
X2NvdW50KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAg
ICAgICAgICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5kZXgsICh1bnNpZ25lZCBsb25n
KV9jb3VudF07Ci0gIH0KLSAgX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTsKLX0KLQotLSAodm9pZClh
ZGRWYWx1ZXNGcm9tQXJyYXk6KEdQQlVJbnQzMkFycmF5ICopYXJyYXkgewotICBbc2VsZiBhZGRW
YWx1ZXM6YXJyYXktPl92YWx1ZXMgY291bnQ6YXJyYXktPl9jb3VudF07Ci19Ci0KLS0gKHZvaWQp
cmVtb3ZlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHsKLSAgaWYgKGluZGV4ID49IF9j
b3VudCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0aW9uCi0gICAgICAg
ICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1KSIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4LCAodW5zaWduZWQgbG9uZylf
Y291bnRdOwotICB9Ci0gIE5TVUludGVnZXIgbmV3Q291bnQgPSBfY291bnQgLSAxOwotICBpZiAo
aW5kZXggIT0gbmV3Q291bnQpIHsKLSAgICBtZW1tb3ZlKCZfdmFsdWVzW2luZGV4XSwgJl92YWx1
ZXNbaW5kZXggKyAxXSwgKG5ld0NvdW50IC0gaW5kZXgpICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0g
IH0KLSAgX2NvdW50ID0gbmV3Q291bnQ7Ci0gIGlmICgobmV3Q291bnQgKyAoMiAqIGtDaHVua1Np
emUpKSA8IF9jYXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBhY2l0eTpD
YXBhY2l0eUZyb21Db3VudChuZXdDb3VudCldOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxs
IHsKLSAgX2NvdW50ID0gMDsKLSAgaWYgKCgwICsgKDIgKiBrQ2h1bmtTaXplKSkgPCBfY2FwYWNp
dHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNpdHlGcm9tQ291
bnQoMCldOwotICB9Ci19Ci0KLS0gKHZvaWQpZXhjaGFuZ2VWYWx1ZUF0SW5kZXg6KE5TVUludGVn
ZXIpaWR4MQotICAgICAgICAgICAgd2l0aFZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpZHgyIHsK
LSAgaWYgKGlkeDEgPj0gX2NvdW50KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VF
eGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91
bmRzICglbHUpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaWR4MSwg
KHVuc2lnbmVkIGxvbmcpX2NvdW50XTsKLSAgfQotICBpZiAoaWR4MiA+PSBfY291bnQpIHsKLSAg
ICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZv
cm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAg
ICAgICAgICAodW5zaWduZWQgbG9uZylpZHgyLCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9
Ci0gIHVpbnQzMl90IHRlbXAgPSBfdmFsdWVzW2lkeDFdOwotICBfdmFsdWVzW2lkeDFdID0gX3Zh
bHVlc1tpZHgyXTsKLSAgX3ZhbHVlc1tpZHgyXSA9IHRlbXA7Ci19Ci0KLUBlbmQKLQotLy8lUERE
TS1FWFBBTkQgQVJSQVlfSU5URVJGQUNFX1NJTVBMRShJbnQ2NCwgaW50NjRfdCwgJWxsZCkKLS8v
IFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5
LgotCi0jcHJhZ21hIG1hcmsgLSBJbnQ2NAotCi1AaW1wbGVtZW50YXRpb24gR1BCSW50NjRBcnJh
eSB7Ci0gQHBhY2thZ2UKLSAgaW50NjRfdCAqX3ZhbHVlczsKLSAgTlNVSW50ZWdlciBfY291bnQ7
Ci0gIE5TVUludGVnZXIgX2NhcGFjaXR5OwotfQotCi1Ac3ludGhlc2l6ZSBjb3VudCA9IF9jb3Vu
dDsKLQotKyAoaW5zdGFuY2V0eXBlKWFycmF5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0aFZhbHVlOihp
bnQ2NF90KXZhbHVlIHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOiBvbiB0byBnZXQKLSAg
Ly8gdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDY0QXJyYXkqKVtzZWxmIGFs
bG9jXSBpbml0V2l0aFZhbHVlczomdmFsdWUgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0r
IChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsdWVBcnJheTooR1BCSW50NjRBcnJheSAqKWFycmF5
IHsKLSAgcmV0dXJuIFtbKEdQQkludDY0QXJyYXkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVl
QXJyYXk6YXJyYXldIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0
aENhcGFjaXR5OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAvLyBObyB3b3JrIG5lZWRlZDsKLSAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlQXJyYXk6KEdQ
QkludDY0QXJyYXkgKilhcnJheSB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczphcnJh
eS0+X3ZhbHVlcyBjb3VudDphcnJheS0+X2NvdW50XTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoVmFsdWVzOihjb25zdCBpbnQ2NF90IFtdKXZhbHVlcyBjb3VudDooTlNVSW50ZWdlcilj
b3VudCB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoY291
bnQgJiYgdmFsdWVzKSB7Ci0gICAgICBfdmFsdWVzID0gcmVhbGxvY2YoX3ZhbHVlcywgY291bnQg
KiBzaXplb2YoaW50NjRfdCkpOwotICAgICAgaWYgKF92YWx1ZXMgIT0gTlVMTCkgewotICAgICAg
ICBfY2FwYWNpdHkgPSBjb3VudDsKLSAgICAgICAgbWVtY3B5KF92YWx1ZXMsIHZhbHVlcywgY291
bnQgKiBzaXplb2YoaW50NjRfdCkpOwotICAgICAgICBfY291bnQgPSBjb3VudDsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFtzZWxmIHJlbGVhc2VdOwotICAgICAgICBbTlNFeGNlcHRpb24gcmFp
c2U6TlNNYWxsb2NFeGNlcHRpb24KLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0OkAiRmFpbGVk
IHRvIGFsbG9jYXRlICVsdSBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodW5z
aWduZWQgbG9uZykoY291bnQgKiBzaXplb2YoaW50NjRfdCkpXTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5
OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwg
Y291bnQ6MF07Ci0gIGlmIChzZWxmICYmIGNvdW50KSB7Ci0gICAgW3NlbGYgaW50ZXJuYWxSZXNp
emVUb0NhcGFjaXR5OmNvdW50XTsKLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQkludDY0
QXJyYXkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aFZhbHVlczpfdmFsdWVzIGNvdW50Ol9j
b3VudF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3Is
Ci0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVs
ZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2Ny
ZWF0b3IpOwotICBmcmVlKF92YWx1ZXMpOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKEJP
T0wpaXNFcXVhbDooR1BCSW50NjRBcnJheSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIp
IHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQ
QkludDY0QXJyYXkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4gKF9j
b3VudCA9PSBvdGhlci0+X2NvdW50Ci0gICAgICAgICAgJiYgbWVtY21wKF92YWx1ZXMsIG90aGVy
LT5fdmFsdWVzLCAoX2NvdW50ICogc2l6ZW9mKGludDY0X3QpKSkgPT0gMCk7Ci19Ci0KLS0gKE5T
VUludGVnZXIpaGFzaCB7Ci0gIC8vIEZvbGxvdyBOU0FycmF5J3MgbGVhZCwgYW5kIHVzZSB0aGUg
Y291bnQgYXMgdGhlIGhhc2guCi0gIHJldHVybiBfY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICop
ZGVzY3JpcHRpb24gewotICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAiLCBbc2VsZiBjbGFzc10sIHNlbGZdOwot
ICBmb3IgKE5TVUludGVnZXIgaSA9IDAsIGNvdW50ID0gX2NvdW50OyBpIDwgY291bnQ7ICsraSkg
ewotICAgIGlmIChpID09IDApIHsKLSAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJWxsZCIs
IF92YWx1ZXNbaV1dOwotICAgIH0gZWxzZSB7Ci0gICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpA
IiwgJWxsZCIsIF92YWx1ZXNbaV1dOwotICAgIH0KLSAgfQotICBbcmVzdWx0IGFwcGVuZEZvcm1h
dDpAIiB9Il07Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlVmFsdWVz
V2l0aEJsb2NrOih2b2lkICheKShpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAq
c3RvcCkpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVWYWx1ZXNXaXRoT3B0aW9uczowIHVzaW5n
QmxvY2s6YmxvY2tdOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25zOihO
U0VudW1lcmF0aW9uT3B0aW9ucylvcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Js
b2NrOih2b2lkICheKShpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkp
YmxvY2sgewotICAvLyBOU0VudW1lcmF0aW9uQ29uY3VycmVudCBpc24ndCBjdXJyZW50bHkgc3Vw
cG9ydGVkIChhbmQgQXBwbGUncyBkb2NzIHNheSB0aGF0IGlzIG9rKS4KLSAgQk9PTCBzdG9wID0g
Tk87Ci0gIGlmICgob3B0cyAmIE5TRW51bWVyYXRpb25SZXZlcnNlKSA9PSAwKSB7Ci0gICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwLCBjb3VudCA9IF9jb3VudDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgIGJsb2NrKF92YWx1ZXNbaV0sIGksICZzdG9wKTsKLSAgICAgIGlmIChzdG9wKSBicmVhazsK
LSAgICB9Ci0gIH0gZWxzZSBpZiAoX2NvdW50ID4gMCkgewotICAgIGZvciAoTlNVSW50ZWdlciBp
ID0gX2NvdW50OyBpID4gMDsgLS1pKSB7Ci0gICAgICBibG9jayhfdmFsdWVzW2kgLSAxXSwgKGkg
LSAxKSwgJnN0b3ApOwotICAgICAgaWYgKHN0b3ApIGJyZWFrOwotICAgIH0KLSAgfQotfQotCi0t
IChpbnQ2NF90KXZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpbmRleCB7Ci0gIGlmIChpbmRleCA+
PSBfY291bnQpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAg
ICAgICAgICAgICAgIGZvcm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAot
ICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylpbmRleCwgKHVuc2lnbmVkIGxv
bmcpX2NvdW50XTsKLSAgfQotICByZXR1cm4gX3ZhbHVlc1tpbmRleF07Ci19Ci0KLS0gKHZvaWQp
aW50ZXJuYWxSZXNpemVUb0NhcGFjaXR5OihOU1VJbnRlZ2VyKW5ld0NhcGFjaXR5IHsKLSAgX3Zh
bHVlcyA9IHJlYWxsb2NmKF92YWx1ZXMsIG5ld0NhcGFjaXR5ICogc2l6ZW9mKGludDY0X3QpKTsK
LSAgaWYgKF92YWx1ZXMgPT0gTlVMTCkgewotICAgIF9jYXBhY2l0eSA9IDA7Ci0gICAgX2NvdW50
ID0gMDsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNNYWxsb2NFeGNlcHRpb24KLSAgICAgICAg
ICAgICAgICBmb3JtYXQ6QCJGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKG5ld0NhcGFjaXR5ICogc2l6ZW9mKGludDY0
X3QpKV07Ci0gIH0KLSAgX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7Ci19Ci0KLS0gKHZvaWQpYWRk
VmFsdWU6KGludDY0X3QpdmFsdWUgewotICBbc2VsZiBhZGRWYWx1ZXM6JnZhbHVlIGNvdW50OjFd
OwotfQotCi0tICh2b2lkKWFkZFZhbHVlczooY29uc3QgaW50NjRfdCBbXSl2YWx1ZXMgY291bnQ6
KE5TVUludGVnZXIpY291bnQgewotICBpZiAodmFsdWVzID09IE5VTEwgfHwgY291bnQgPT0gMCkg
cmV0dXJuOwotICBOU1VJbnRlZ2VyIGluaXRpYWxDb3VudCA9IF9jb3VudDsKLSAgTlNVSW50ZWdl
ciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIGNvdW50OwotICBpZiAobmV3Q291bnQgPiBfY2Fw
YWNpdHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNpdHlGcm9t
Q291bnQobmV3Q291bnQpXTsKLSAgfQotICBfY291bnQgPSBuZXdDb3VudDsKLSAgbWVtY3B5KCZf
dmFsdWVzW2luaXRpYWxDb3VudF0sIHZhbHVlcywgY291bnQgKiBzaXplb2YoaW50NjRfdCkpOwot
ICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWRBcnJheU1vZGlmaWVkKF9h
dXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClpbnNlcnRWYWx1ZTooaW50NjRf
dCl2YWx1ZSBhdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHsKLSAgaWYgKGluZGV4ID49IF9jb3Vu
dCArIDEpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAg
ICAgICAgICAgIGZvcm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAg
ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylpbmRleCwgKHVuc2lnbmVkIGxvbmcp
X2NvdW50ICsgMV07Ci0gIH0KLSAgTlNVSW50ZWdlciBpbml0aWFsQ291bnQgPSBfY291bnQ7Ci0g
IE5TVUludGVnZXIgbmV3Q291bnQgPSBpbml0aWFsQ291bnQgKyAxOwotICBpZiAobmV3Q291bnQg
PiBfY2FwYWNpdHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNp
dHlGcm9tQ291bnQobmV3Q291bnQpXTsKLSAgfQotICBfY291bnQgPSBuZXdDb3VudDsKLSAgaWYg
KGluZGV4ICE9IGluaXRpYWxDb3VudCkgewotICAgIG1lbW1vdmUoJl92YWx1ZXNbaW5kZXggKyAx
XSwgJl92YWx1ZXNbaW5kZXhdLCAoaW5pdGlhbENvdW50IC0gaW5kZXgpICogc2l6ZW9mKGludDY0
X3QpKTsKLSAgfQotICBfdmFsdWVzW2luZGV4XSA9IHZhbHVlOwotICBpZiAoX2F1dG9jcmVhdG9y
KSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWRBcnJheU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7
Ci0gIH0KLX0KLQotLSAodm9pZClyZXBsYWNlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4
IHdpdGhWYWx1ZTooaW50NjRfdCl2YWx1ZSB7Ci0gIGlmIChpbmRleCA+PSBfY291bnQpIHsKLSAg
ICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZv
cm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAg
ICAgICAgICAodW5zaWduZWQgbG9uZylpbmRleCwgKHVuc2lnbmVkIGxvbmcpX2NvdW50XTsKLSAg
fQotICBfdmFsdWVzW2luZGV4XSA9IHZhbHVlOwotfQotCi0tICh2b2lkKWFkZFZhbHVlc0Zyb21B
cnJheTooR1BCSW50NjRBcnJheSAqKWFycmF5IHsKLSAgW3NlbGYgYWRkVmFsdWVzOmFycmF5LT5f
dmFsdWVzIGNvdW50OmFycmF5LT5fY291bnRdOwotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlQXRJ
bmRleDooTlNVSW50ZWdlcilpbmRleCB7Ci0gIGlmIChpbmRleCA+PSBfY291bnQpIHsKLSAgICBb
TlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1h
dDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAgICAg
ICAgICAodW5zaWduZWQgbG9uZylpbmRleCwgKHVuc2lnbmVkIGxvbmcpX2NvdW50XTsKLSAgfQot
ICBOU1VJbnRlZ2VyIG5ld0NvdW50ID0gX2NvdW50IC0gMTsKLSAgaWYgKGluZGV4ICE9IG5ld0Nv
dW50KSB7Ci0gICAgbWVtbW92ZSgmX3ZhbHVlc1tpbmRleF0sICZfdmFsdWVzW2luZGV4ICsgMV0s
IChuZXdDb3VudCAtIGluZGV4KSAqIHNpemVvZihpbnQ2NF90KSk7Ci0gIH0KLSAgX2NvdW50ID0g
bmV3Q291bnQ7Ci0gIGlmICgobmV3Q291bnQgKyAoMiAqIGtDaHVua1NpemUpKSA8IF9jYXBhY2l0
eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBhY2l0eTpDYXBhY2l0eUZyb21Db3Vu
dChuZXdDb3VudCldOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgX2NvdW50ID0g
MDsKLSAgaWYgKCgwICsgKDIgKiBrQ2h1bmtTaXplKSkgPCBfY2FwYWNpdHkpIHsKLSAgICBbc2Vs
ZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNpdHlGcm9tQ291bnQoMCldOwotICB9Ci19
Ci0KLS0gKHZvaWQpZXhjaGFuZ2VWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaWR4MQotICAgICAg
ICAgICAgd2l0aFZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpZHgyIHsKLSAgaWYgKGlkeDEgPj0g
X2NvdW50KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAg
ICAgICAgICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaWR4MSwgKHVuc2lnbmVkIGxvbmcp
X2NvdW50XTsKLSAgfQotICBpZiAoaWR4MiA+PSBfY291bnQpIHsKLSAgICBbTlNFeGNlcHRpb24g
cmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkluZGV4ICgl
bHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAgICAgICAgICAodW5zaWdu
ZWQgbG9uZylpZHgyLCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9Ci0gIGludDY0X3QgdGVt
cCA9IF92YWx1ZXNbaWR4MV07Ci0gIF92YWx1ZXNbaWR4MV0gPSBfdmFsdWVzW2lkeDJdOwotICBf
dmFsdWVzW2lkeDJdID0gdGVtcDsKLX0KLQotQGVuZAotCi0vLyVQRERNLUVYUEFORCBBUlJBWV9J
TlRFUkZBQ0VfU0lNUExFKFVJbnQ2NCwgdWludDY0X3QsICVsbHUpCi0vLyBUaGlzIGJsb2NrIG9m
IGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotI3ByYWdtYSBt
YXJrIC0gVUludDY0Ci0KLUBpbXBsZW1lbnRhdGlvbiBHUEJVSW50NjRBcnJheSB7Ci0gQHBhY2th
Z2UKLSAgdWludDY0X3QgKl92YWx1ZXM7Ci0gIE5TVUludGVnZXIgX2NvdW50OwotICBOU1VJbnRl
Z2VyIF9jYXBhY2l0eTsKLX0KLQotQHN5bnRoZXNpemUgY291bnQgPSBfY291bnQ7Ci0KLSsgKGlu
c3RhbmNldHlwZSlhcnJheSB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhWYWx1ZToodWludDY0X3QpdmFs
dWUgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFz
cyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6IG9uIHRvIGdldAotICAvLyB0aGUgdHlw
ZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDY0QXJyYXkqKVtzZWxmIGFsbG9jXSBpbml0
V2l0aFZhbHVlczomdmFsdWUgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5j
ZXR5cGUpYXJyYXlXaXRoVmFsdWVBcnJheTooR1BCVUludDY0QXJyYXkgKilhcnJheSB7Ci0gIHJl
dHVybiBbWyhHUEJVSW50NjRBcnJheSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVBcnJheTph
cnJheV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoQ2FwYWNp
dHk6KE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7
Ci0gIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gIC8vIE5vIHdvcmsgbmVlZGVkOwotICByZXR1cm4g
c2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVBcnJheTooR1BCVUludDY0
QXJyYXkgKilhcnJheSB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczphcnJheS0+X3Zh
bHVlcyBjb3VudDphcnJheS0+X2NvdW50XTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
VmFsdWVzOihjb25zdCB1aW50NjRfdCBbXSl2YWx1ZXMgY291bnQ6KE5TVUludGVnZXIpY291bnQg
ewotICBzZWxmID0gW3NlbGYgaW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGNvdW50ICYm
IHZhbHVlcykgewotICAgICAgX3ZhbHVlcyA9IHJlYWxsb2NmKF92YWx1ZXMsIGNvdW50ICogc2l6
ZW9mKHVpbnQ2NF90KSk7Ci0gICAgICBpZiAoX3ZhbHVlcyAhPSBOVUxMKSB7Ci0gICAgICAgIF9j
YXBhY2l0eSA9IGNvdW50OwotICAgICAgICBtZW1jcHkoX3ZhbHVlcywgdmFsdWVzLCBjb3VudCAq
IHNpemVvZih1aW50NjRfdCkpOwotICAgICAgICBfY291bnQgPSBjb3VudDsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFtzZWxmIHJlbGVhc2VdOwotICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6
TlNNYWxsb2NFeGNlcHRpb24KLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0OkAiRmFpbGVkIHRv
IGFsbG9jYXRlICVsdSBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWdu
ZWQgbG9uZykoY291bnQgKiBzaXplb2YodWludDY0X3QpKV07Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eToo
TlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGNv
dW50OjBdOwotICBpZiAoc2VsZiAmJiBjb3VudCkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXpl
VG9DYXBhY2l0eTpjb3VudF07Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tHUEJVSW50NjRB
cnJheSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoVmFsdWVzOl92YWx1ZXMgY291bnQ6X2Nv
dW50XTsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwK
LSAgICAgICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxl
YXNlLCBhdXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3Jl
YXRvcik7Ci0gIGZyZWUoX3ZhbHVlcyk7Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoQk9P
TClpc0VxdWFsOihHUEJVSW50NjRBcnJheSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIp
IHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQ
QlVJbnQ2NEFycmF5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIChf
Y291bnQgPT0gb3RoZXItPl9jb3VudAotICAgICAgICAgICYmIG1lbWNtcChfdmFsdWVzLCBvdGhl
ci0+X3ZhbHVlcywgKF9jb3VudCAqIHNpemVvZih1aW50NjRfdCkpKSA9PSAwKTsKLX0KLQotLSAo
TlNVSW50ZWdlciloYXNoIHsKLSAgLy8gRm9sbG93IE5TQXJyYXkncyBsZWFkLCBhbmQgdXNlIHRo
ZSBjb3VudCBhcyB0aGUgaGFzaC4KLSAgcmV0dXJuIF9jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcg
KilkZXNjcmlwdGlvbiB7Ci0gIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVAICVwPiB7ICIsIFtzZWxmIGNsYXNzXSwgc2VsZl07
Ci0gIGZvciAoTlNVSW50ZWdlciBpID0gMCwgY291bnQgPSBfY291bnQ7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgaWYgKGkgPT0gMCkgewotICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlbGx1
IiwgX3ZhbHVlc1tpXV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0
OkAiLCAlbGx1IiwgX3ZhbHVlc1tpXV07Ci0gICAgfQotICB9Ci0gIFtyZXN1bHQgYXBwZW5kRm9y
bWF0OkAiIH0iXTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVWYWx1
ZXNXaXRoQmxvY2s6KHZvaWQgKF4pKHVpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9P
TCAqc3RvcCkpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVWYWx1ZXNXaXRoT3B0aW9uczowIHVz
aW5nQmxvY2s6YmxvY2tdOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25z
OihOU0VudW1lcmF0aW9uT3B0aW9ucylvcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2lu
Z0Jsb2NrOih2b2lkICheKSh1aW50NjRfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0
b3ApKWJsb2NrIHsKLSAgLy8gTlNFbnVtZXJhdGlvbkNvbmN1cnJlbnQgaXNuJ3QgY3VycmVudGx5
IHN1cHBvcnRlZCAoYW5kIEFwcGxlJ3MgZG9jcyBzYXkgdGhhdCBpcyBvaykuCi0gIEJPT0wgc3Rv
cCA9IE5POwotICBpZiAoKG9wdHMgJiBOU0VudW1lcmF0aW9uUmV2ZXJzZSkgPT0gMCkgewotICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMCwgY291bnQgPSBfY291bnQ7IGkgPCBjb3VudDsgKytpKSB7
Ci0gICAgICBibG9jayhfdmFsdWVzW2ldLCBpLCAmc3RvcCk7Ci0gICAgICBpZiAoc3RvcCkgYnJl
YWs7Ci0gICAgfQotICB9IGVsc2UgaWYgKF9jb3VudCA+IDApIHsKLSAgICBmb3IgKE5TVUludGVn
ZXIgaSA9IF9jb3VudDsgaSA+IDA7IC0taSkgewotICAgICAgYmxvY2soX3ZhbHVlc1tpIC0gMV0s
IChpIC0gMSksICZzdG9wKTsKLSAgICAgIGlmIChzdG9wKSBicmVhazsKLSAgICB9Ci0gIH0KLX0K
LQotLSAodWludDY0X3QpdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHsKLSAgaWYgKGlu
ZGV4ID49IF9jb3VudCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0aW9u
Ci0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1
KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4LCAodW5zaWdu
ZWQgbG9uZylfY291bnRdOwotICB9Ci0gIHJldHVybiBfdmFsdWVzW2luZGV4XTsKLX0KLQotLSAo
dm9pZClpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6KE5TVUludGVnZXIpbmV3Q2FwYWNpdHkgewot
ICBfdmFsdWVzID0gcmVhbGxvY2YoX3ZhbHVlcywgbmV3Q2FwYWNpdHkgKiBzaXplb2YodWludDY0
X3QpKTsKLSAgaWYgKF92YWx1ZXMgPT0gTlVMTCkgewotICAgIF9jYXBhY2l0eSA9IDA7Ci0gICAg
X2NvdW50ID0gMDsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNNYWxsb2NFeGNlcHRpb24KLSAg
ICAgICAgICAgICAgICBmb3JtYXQ6QCJGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKG5ld0NhcGFjaXR5ICogc2l6ZW9m
KHVpbnQ2NF90KSldOwotICB9Ci0gIF9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwotfQotCi0tICh2
b2lkKWFkZFZhbHVlOih1aW50NjRfdCl2YWx1ZSB7Ci0gIFtzZWxmIGFkZFZhbHVlczomdmFsdWUg
Y291bnQ6MV07Ci19Ci0KLS0gKHZvaWQpYWRkVmFsdWVzOihjb25zdCB1aW50NjRfdCBbXSl2YWx1
ZXMgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBpZiAodmFsdWVzID09IE5VTEwgfHwgY291
bnQgPT0gMCkgcmV0dXJuOwotICBOU1VJbnRlZ2VyIGluaXRpYWxDb3VudCA9IF9jb3VudDsKLSAg
TlNVSW50ZWdlciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIGNvdW50OwotICBpZiAobmV3Q291
bnQgPiBfY2FwYWNpdHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2Fw
YWNpdHlGcm9tQ291bnQobmV3Q291bnQpXTsKLSAgfQotICBfY291bnQgPSBuZXdDb3VudDsKLSAg
bWVtY3B5KCZfdmFsdWVzW2luaXRpYWxDb3VudF0sIHZhbHVlcywgY291bnQgKiBzaXplb2YodWlu
dDY0X3QpKTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkQXJyYXlN
b2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpaW5zZXJ0VmFs
dWU6KHVpbnQ2NF90KXZhbHVlIGF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggewotICBpZiAoaW5k
ZXggPj0gX2NvdW50ICsgMSkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0
aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAo
JWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4LCAodW5z
aWduZWQgbG9uZylfY291bnQgKyAxXTsKLSAgfQotICBOU1VJbnRlZ2VyIGluaXRpYWxDb3VudCA9
IF9jb3VudDsKLSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIDE7Ci0gIGlm
IChuZXdDb3VudCA+IF9jYXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBh
Y2l0eTpDYXBhY2l0eUZyb21Db3VudChuZXdDb3VudCldOwotICB9Ci0gIF9jb3VudCA9IG5ld0Nv
dW50OwotICBpZiAoaW5kZXggIT0gaW5pdGlhbENvdW50KSB7Ci0gICAgbWVtbW92ZSgmX3ZhbHVl
c1tpbmRleCArIDFdLCAmX3ZhbHVlc1tpbmRleF0sIChpbml0aWFsQ291bnQgLSBpbmRleCkgKiBz
aXplb2YodWludDY0X3QpKTsKLSAgfQotICBfdmFsdWVzW2luZGV4XSA9IHZhbHVlOwotICBpZiAo
X2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWRBcnJheU1vZGlmaWVkKF9hdXRvY3Jl
YXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZXBsYWNlVmFsdWVBdEluZGV4OihOU1VJ
bnRlZ2VyKWluZGV4IHdpdGhWYWx1ZToodWludDY0X3QpdmFsdWUgewotICBpZiAoaW5kZXggPj0g
X2NvdW50KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAg
ICAgICAgICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5kZXgsICh1bnNpZ25lZCBsb25n
KV9jb3VudF07Ci0gIH0KLSAgX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTsKLX0KLQotLSAodm9pZClh
ZGRWYWx1ZXNGcm9tQXJyYXk6KEdQQlVJbnQ2NEFycmF5ICopYXJyYXkgewotICBbc2VsZiBhZGRW
YWx1ZXM6YXJyYXktPl92YWx1ZXMgY291bnQ6YXJyYXktPl9jb3VudF07Ci19Ci0KLS0gKHZvaWQp
cmVtb3ZlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHsKLSAgaWYgKGluZGV4ID49IF9j
b3VudCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0aW9uCi0gICAgICAg
ICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1KSIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4LCAodW5zaWduZWQgbG9uZylf
Y291bnRdOwotICB9Ci0gIE5TVUludGVnZXIgbmV3Q291bnQgPSBfY291bnQgLSAxOwotICBpZiAo
aW5kZXggIT0gbmV3Q291bnQpIHsKLSAgICBtZW1tb3ZlKCZfdmFsdWVzW2luZGV4XSwgJl92YWx1
ZXNbaW5kZXggKyAxXSwgKG5ld0NvdW50IC0gaW5kZXgpICogc2l6ZW9mKHVpbnQ2NF90KSk7Ci0g
IH0KLSAgX2NvdW50ID0gbmV3Q291bnQ7Ci0gIGlmICgobmV3Q291bnQgKyAoMiAqIGtDaHVua1Np
emUpKSA8IF9jYXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBhY2l0eTpD
YXBhY2l0eUZyb21Db3VudChuZXdDb3VudCldOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxs
IHsKLSAgX2NvdW50ID0gMDsKLSAgaWYgKCgwICsgKDIgKiBrQ2h1bmtTaXplKSkgPCBfY2FwYWNp
dHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNpdHlGcm9tQ291
bnQoMCldOwotICB9Ci19Ci0KLS0gKHZvaWQpZXhjaGFuZ2VWYWx1ZUF0SW5kZXg6KE5TVUludGVn
ZXIpaWR4MQotICAgICAgICAgICAgd2l0aFZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpZHgyIHsK
LSAgaWYgKGlkeDEgPj0gX2NvdW50KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VF
eGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91
bmRzICglbHUpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaWR4MSwg
KHVuc2lnbmVkIGxvbmcpX2NvdW50XTsKLSAgfQotICBpZiAoaWR4MiA+PSBfY291bnQpIHsKLSAg
ICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZv
cm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAg
ICAgICAgICAodW5zaWduZWQgbG9uZylpZHgyLCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9
Ci0gIHVpbnQ2NF90IHRlbXAgPSBfdmFsdWVzW2lkeDFdOwotICBfdmFsdWVzW2lkeDFdID0gX3Zh
bHVlc1tpZHgyXTsKLSAgX3ZhbHVlc1tpZHgyXSA9IHRlbXA7Ci19Ci0KLUBlbmQKLQotLy8lUERE
TS1FWFBBTkQgQVJSQVlfSU5URVJGQUNFX1NJTVBMRShGbG9hdCwgZmxvYXQsICVmKQotLy8gVGhp
cyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0K
LSNwcmFnbWEgbWFyayAtIEZsb2F0Ci0KLUBpbXBsZW1lbnRhdGlvbiBHUEJGbG9hdEFycmF5IHsK
LSBAcGFja2FnZQotICBmbG9hdCAqX3ZhbHVlczsKLSAgTlNVSW50ZWdlciBfY291bnQ7Ci0gIE5T
VUludGVnZXIgX2NhcGFjaXR5OwotfQotCi1Ac3ludGhlc2l6ZSBjb3VudCA9IF9jb3VudDsKLQot
KyAoaW5zdGFuY2V0eXBlKWFycmF5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWFycmF5V2l0aFZhbHVlOihmbG9hdCl2
YWx1ZSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczogb24gdG8gZ2V0Ci0gIC8vIHRoZSB0
eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJGbG9hdEFycmF5Kilbc2VsZiBhbGxvY10gaW5p
dFdpdGhWYWx1ZXM6JnZhbHVlIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFu
Y2V0eXBlKWFycmF5V2l0aFZhbHVlQXJyYXk6KEdQQkZsb2F0QXJyYXkgKilhcnJheSB7Ci0gIHJl
dHVybiBbWyhHUEJGbG9hdEFycmF5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZUFycmF5OmFy
cmF5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhDYXBhY2l0
eTooTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsK
LSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgLy8gTm8gd29yayBuZWVkZWQ7Ci0gIHJldHVybiBz
ZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZUFycmF5OihHUEJGbG9hdEFy
cmF5ICopYXJyYXkgewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6YXJyYXktPl92YWx1
ZXMgY291bnQ6YXJyYXktPl9jb3VudF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZh
bHVlczooY29uc3QgZmxvYXQgW10pdmFsdWVzIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAg
c2VsZiA9IFtzZWxmIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIGlmIChjb3VudCAmJiB2YWx1
ZXMpIHsKLSAgICAgIF92YWx1ZXMgPSByZWFsbG9jZihfdmFsdWVzLCBjb3VudCAqIHNpemVvZihm
bG9hdCkpOwotICAgICAgaWYgKF92YWx1ZXMgIT0gTlVMTCkgewotICAgICAgICBfY2FwYWNpdHkg
PSBjb3VudDsKLSAgICAgICAgbWVtY3B5KF92YWx1ZXMsIHZhbHVlcywgY291bnQgKiBzaXplb2Yo
ZmxvYXQpKTsKLSAgICAgICAgX2NvdW50ID0gY291bnQ7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBbc2VsZiByZWxlYXNlXTsKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TTWFsbG9jRXhj
ZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdDpAIkZhaWxlZCB0byBhbGxvY2F0ZSAl
bHUgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKGNv
dW50ICogc2l6ZW9mKGZsb2F0KSldOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpY291
bnQgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBjb3VudDowXTsKLSAgaWYg
KHNlbGYgJiYgY291bnQpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Y291
bnRdOwotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpY29weVdpdGha
b25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCRmxvYXRBcnJheSBhbGxvY1dpdGha
b25lOnpvbmVdIGluaXRXaXRoVmFsdWVzOl92YWx1ZXMgY291bnQ6X2NvdW50XTsKLX0KLQotLSAo
dm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAgQCIl
QDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRv
cjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIGZyZWUo
X3ZhbHVlcyk7Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJG
bG9hdEFycmF5ICopb3RoZXIgewotICBpZiAoc2VsZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZ
RVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbR1BCRmxvYXRBcnJheSBjbGFz
c11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiAoX2NvdW50ID09IG90aGVyLT5f
Y291bnQKLSAgICAgICAgICAmJiBtZW1jbXAoX3ZhbHVlcywgb3RoZXItPl92YWx1ZXMsIChfY291
bnQgKiBzaXplb2YoZmxvYXQpKSkgPT0gMCk7Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0g
IC8vIEZvbGxvdyBOU0FycmF5J3MgbGVhZCwgYW5kIHVzZSB0aGUgY291bnQgYXMgdGhlIGhhc2gu
Ci0gIHJldHVybiBfY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICBO
U011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIjwlQCAlcD4geyAiLCBbc2VsZiBjbGFzc10sIHNlbGZdOwotICBmb3IgKE5TVUludGVnZXIg
aSA9IDAsIGNvdW50ID0gX2NvdW50OyBpIDwgY291bnQ7ICsraSkgewotICAgIGlmIChpID09IDAp
IHsKLSAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJWYiLCBfdmFsdWVzW2ldXTsKLSAgICB9
IGVsc2UgewotICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIsICVmIiwgX3ZhbHVlc1tpXV07
Ci0gICAgfQotICB9Ci0gIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiIH0iXTsKLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6KHZvaWQgKF4pKGZs
b2F0IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbc2VsZiBl
bnVtZXJhdGVWYWx1ZXNXaXRoT3B0aW9uczowIHVzaW5nQmxvY2s6YmxvY2tdOwotfQotCi0tICh2
b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25zOihOU0VudW1lcmF0aW9uT3B0aW9ucylvcHRz
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Jsb2NrOih2b2lkICheKShmbG9hdCB2YWx1
ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgLy8gTlNFbnVtZXJhdGlv
bkNvbmN1cnJlbnQgaXNuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCAoYW5kIEFwcGxlJ3MgZG9jcyBz
YXkgdGhhdCBpcyBvaykuCi0gIEJPT0wgc3RvcCA9IE5POwotICBpZiAoKG9wdHMgJiBOU0VudW1l
cmF0aW9uUmV2ZXJzZSkgPT0gMCkgewotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCwgY291bnQg
PSBfY291bnQ7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICBibG9jayhfdmFsdWVzW2ldLCBpLCAm
c3RvcCk7Ci0gICAgICBpZiAoc3RvcCkgYnJlYWs7Ci0gICAgfQotICB9IGVsc2UgaWYgKF9jb3Vu
dCA+IDApIHsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IF9jb3VudDsgaSA+IDA7IC0taSkgewot
ICAgICAgYmxvY2soX3ZhbHVlc1tpIC0gMV0sIChpIC0gMSksICZzdG9wKTsKLSAgICAgIGlmIChz
dG9wKSBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotLSAoZmxvYXQpdmFsdWVBdEluZGV4OihOU1VJ
bnRlZ2VyKWluZGV4IHsKLSAgaWYgKGluZGV4ID49IF9jb3VudCkgewotICAgIFtOU0V4Y2VwdGlv
biByYWlzZTpOU1JhbmdlRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXgg
KCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNp
Z25lZCBsb25nKWluZGV4LCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9Ci0gIHJldHVybiBf
dmFsdWVzW2luZGV4XTsKLX0KLQotLSAodm9pZClpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6KE5T
VUludGVnZXIpbmV3Q2FwYWNpdHkgewotICBfdmFsdWVzID0gcmVhbGxvY2YoX3ZhbHVlcywgbmV3
Q2FwYWNpdHkgKiBzaXplb2YoZmxvYXQpKTsKLSAgaWYgKF92YWx1ZXMgPT0gTlVMTCkgewotICAg
IF9jYXBhY2l0eSA9IDA7Ci0gICAgX2NvdW50ID0gMDsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6
TlNNYWxsb2NFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJGYWlsZWQgdG8gYWxs
b2NhdGUgJWx1IGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcp
KG5ld0NhcGFjaXR5ICogc2l6ZW9mKGZsb2F0KSldOwotICB9Ci0gIF9jYXBhY2l0eSA9IG5ld0Nh
cGFjaXR5OwotfQotCi0tICh2b2lkKWFkZFZhbHVlOihmbG9hdCl2YWx1ZSB7Ci0gIFtzZWxmIGFk
ZFZhbHVlczomdmFsdWUgY291bnQ6MV07Ci19Ci0KLS0gKHZvaWQpYWRkVmFsdWVzOihjb25zdCBm
bG9hdCBbXSl2YWx1ZXMgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBpZiAodmFsdWVzID09
IE5VTEwgfHwgY291bnQgPT0gMCkgcmV0dXJuOwotICBOU1VJbnRlZ2VyIGluaXRpYWxDb3VudCA9
IF9jb3VudDsKLSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIGNvdW50Owot
ICBpZiAobmV3Q291bnQgPiBfY2FwYWNpdHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRv
Q2FwYWNpdHk6Q2FwYWNpdHlGcm9tQ291bnQobmV3Q291bnQpXTsKLSAgfQotICBfY291bnQgPSBu
ZXdDb3VudDsKLSAgbWVtY3B5KCZfdmFsdWVzW2luaXRpYWxDb3VudF0sIHZhbHVlcywgY291bnQg
KiBzaXplb2YoZmxvYXQpKTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVh
dGVkQXJyYXlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQp
aW5zZXJ0VmFsdWU6KGZsb2F0KXZhbHVlIGF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggewotICBp
ZiAoaW5kZXggPj0gX2NvdW50ICsgMSkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1Jhbmdl
RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJv
dW5kcyAoJWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4
LCAodW5zaWduZWQgbG9uZylfY291bnQgKyAxXTsKLSAgfQotICBOU1VJbnRlZ2VyIGluaXRpYWxD
b3VudCA9IF9jb3VudDsKLSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIDE7
Ci0gIGlmIChuZXdDb3VudCA+IF9jYXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXpl
VG9DYXBhY2l0eTpDYXBhY2l0eUZyb21Db3VudChuZXdDb3VudCldOwotICB9Ci0gIF9jb3VudCA9
IG5ld0NvdW50OwotICBpZiAoaW5kZXggIT0gaW5pdGlhbENvdW50KSB7Ci0gICAgbWVtbW92ZSgm
X3ZhbHVlc1tpbmRleCArIDFdLCAmX3ZhbHVlc1tpbmRleF0sIChpbml0aWFsQ291bnQgLSBpbmRl
eCkgKiBzaXplb2YoZmxvYXQpKTsKLSAgfQotICBfdmFsdWVzW2luZGV4XSA9IHZhbHVlOwotICBp
ZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWRBcnJheU1vZGlmaWVkKF9hdXRv
Y3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZXBsYWNlVmFsdWVBdEluZGV4OihO
U1VJbnRlZ2VyKWluZGV4IHdpdGhWYWx1ZTooZmxvYXQpdmFsdWUgewotICBpZiAoaW5kZXggPj0g
X2NvdW50KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAg
ICAgICAgICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5kZXgsICh1bnNpZ25lZCBsb25n
KV9jb3VudF07Ci0gIH0KLSAgX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTsKLX0KLQotLSAodm9pZClh
ZGRWYWx1ZXNGcm9tQXJyYXk6KEdQQkZsb2F0QXJyYXkgKilhcnJheSB7Ci0gIFtzZWxmIGFkZFZh
bHVlczphcnJheS0+X3ZhbHVlcyBjb3VudDphcnJheS0+X2NvdW50XTsKLX0KLQotLSAodm9pZCly
ZW1vdmVWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggewotICBpZiAoaW5kZXggPj0gX2Nv
dW50KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAgICAg
ICAgICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5kZXgsICh1bnNpZ25lZCBsb25nKV9j
b3VudF07Ci0gIH0KLSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IF9jb3VudCAtIDE7Ci0gIGlmIChp
bmRleCAhPSBuZXdDb3VudCkgewotICAgIG1lbW1vdmUoJl92YWx1ZXNbaW5kZXhdLCAmX3ZhbHVl
c1tpbmRleCArIDFdLCAobmV3Q291bnQgLSBpbmRleCkgKiBzaXplb2YoZmxvYXQpKTsKLSAgfQot
ICBfY291bnQgPSBuZXdDb3VudDsKLSAgaWYgKChuZXdDb3VudCArICgyICoga0NodW5rU2l6ZSkp
IDwgX2NhcGFjaXR5KSB7Ci0gICAgW3NlbGYgaW50ZXJuYWxSZXNpemVUb0NhcGFjaXR5OkNhcGFj
aXR5RnJvbUNvdW50KG5ld0NvdW50KV07Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVBbGwgewot
ICBfY291bnQgPSAwOwotICBpZiAoKDAgKyAoMiAqIGtDaHVua1NpemUpKSA8IF9jYXBhY2l0eSkg
ewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBhY2l0eTpDYXBhY2l0eUZyb21Db3VudCgw
KV07Ci0gIH0KLX0KLQotLSAodm9pZClleGNoYW5nZVZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilp
ZHgxCi0gICAgICAgICAgICB3aXRoVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWlkeDIgewotICBp
ZiAoaWR4MSA+PSBfY291bnQpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2Vw
dGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMg
KCVsdSkiLAotICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylpZHgxLCAodW5z
aWduZWQgbG9uZylfY291bnRdOwotICB9Ci0gIGlmIChpZHgyID49IF9jb3VudCkgewotICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0
OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1KSIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICh1bnNpZ25lZCBsb25nKWlkeDIsICh1bnNpZ25lZCBsb25nKV9jb3VudF07Ci0gIH0KLSAg
ZmxvYXQgdGVtcCA9IF92YWx1ZXNbaWR4MV07Ci0gIF92YWx1ZXNbaWR4MV0gPSBfdmFsdWVzW2lk
eDJdOwotICBfdmFsdWVzW2lkeDJdID0gdGVtcDsKLX0KLQotQGVuZAotCi0vLyVQRERNLUVYUEFO
RCBBUlJBWV9JTlRFUkZBQ0VfU0lNUExFKERvdWJsZSwgZG91YmxlLCAlbGYpCi0vLyBUaGlzIGJs
b2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotI3By
YWdtYSBtYXJrIC0gRG91YmxlCi0KLUBpbXBsZW1lbnRhdGlvbiBHUEJEb3VibGVBcnJheSB7Ci0g
QHBhY2thZ2UKLSAgZG91YmxlICpfdmFsdWVzOwotICBOU1VJbnRlZ2VyIF9jb3VudDsKLSAgTlNV
SW50ZWdlciBfY2FwYWNpdHk7Ci19Ci0KLUBzeW50aGVzaXplIGNvdW50ID0gX2NvdW50OwotCi0r
IChpbnN0YW5jZXR5cGUpYXJyYXkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsdWU6KGRvdWJsZSl2
YWx1ZSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczogb24gdG8gZ2V0Ci0gIC8vIHRoZSB0
eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJEb3VibGVBcnJheSopW3NlbGYgYWxsb2NdIGlu
aXRXaXRoVmFsdWVzOiZ2YWx1ZSBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3Rh
bmNldHlwZSlhcnJheVdpdGhWYWx1ZUFycmF5OihHUEJEb3VibGVBcnJheSAqKWFycmF5IHsKLSAg
cmV0dXJuIFtbKEdQQkRvdWJsZUFycmF5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZUFycmF5
OmFycmF5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhDYXBh
Y2l0eTooTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgLy8gTm8gd29yayBuZWVkZWQ7Ci0gIHJldHVy
biBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZUFycmF5OihHUEJEb3Vi
bGVBcnJheSAqKWFycmF5IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOmFycmF5LT5f
dmFsdWVzIGNvdW50OmFycmF5LT5fY291bnRdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhWYWx1ZXM6KGNvbnN0IGRvdWJsZSBbXSl2YWx1ZXMgY291bnQ6KE5TVUludGVnZXIpY291bnQg
ewotICBzZWxmID0gW3NlbGYgaW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGNvdW50ICYm
IHZhbHVlcykgewotICAgICAgX3ZhbHVlcyA9IHJlYWxsb2NmKF92YWx1ZXMsIGNvdW50ICogc2l6
ZW9mKGRvdWJsZSkpOwotICAgICAgaWYgKF92YWx1ZXMgIT0gTlVMTCkgewotICAgICAgICBfY2Fw
YWNpdHkgPSBjb3VudDsKLSAgICAgICAgbWVtY3B5KF92YWx1ZXMsIHZhbHVlcywgY291bnQgKiBz
aXplb2YoZG91YmxlKSk7Ci0gICAgICAgIF9jb3VudCA9IGNvdW50OwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgW3NlbGYgcmVsZWFzZV07Ci0gICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU01h
bGxvY0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6QCJGYWlsZWQgdG8gYWxs
b2NhdGUgJWx1IGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBs
b25nKShjb3VudCAqIHNpemVvZihkb3VibGUpKV07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJl
dHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50
ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGNvdW50OjBd
OwotICBpZiAoc2VsZiAmJiBjb3VudCkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBh
Y2l0eTpjb3VudF07Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlj
b3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tHUEJEb3VibGVBcnJheSBh
bGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoVmFsdWVzOl92YWx1ZXMgY291bnQ6X2NvdW50XTsK
LX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAg
ICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBh
dXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7
Ci0gIGZyZWUoX3ZhbHVlcyk7Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoQk9PTClpc0Vx
dWFsOihHUEJEb3VibGVBcnJheSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAg
ICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQkRvdWJs
ZUFycmF5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIChfY291bnQg
PT0gb3RoZXItPl9jb3VudAotICAgICAgICAgICYmIG1lbWNtcChfdmFsdWVzLCBvdGhlci0+X3Zh
bHVlcywgKF9jb3VudCAqIHNpemVvZihkb3VibGUpKSkgPT0gMCk7Ci19Ci0KLS0gKE5TVUludGVn
ZXIpaGFzaCB7Ci0gIC8vIEZvbGxvdyBOU0FycmF5J3MgbGVhZCwgYW5kIHVzZSB0aGUgY291bnQg
YXMgdGhlIGhhc2guCi0gIHJldHVybiBfY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3Jp
cHRpb24gewotICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAiLCBbc2VsZiBjbGFzc10sIHNlbGZdOwotICBmb3Ig
KE5TVUludGVnZXIgaSA9IDAsIGNvdW50ID0gX2NvdW50OyBpIDwgY291bnQ7ICsraSkgewotICAg
IGlmIChpID09IDApIHsKLSAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJWxmIiwgX3ZhbHVl
c1tpXV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiLCAlbGYi
LCBfdmFsdWVzW2ldXTsKLSAgICB9Ci0gIH0KLSAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIgfSJd
OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhCbG9j
azoodm9pZCAoXikoZG91YmxlIHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxv
Y2sgewotICBbc2VsZiBlbnVtZXJhdGVWYWx1ZXNXaXRoT3B0aW9uczowIHVzaW5nQmxvY2s6Ymxv
Y2tdOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25zOihOU0VudW1lcmF0
aW9uT3B0aW9ucylvcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Jsb2NrOih2b2lk
ICheKShkb3VibGUgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBCT09MICpzdG9wKSlibG9jayB7Ci0g
IC8vIE5TRW51bWVyYXRpb25Db25jdXJyZW50IGlzbid0IGN1cnJlbnRseSBzdXBwb3J0ZWQgKGFu
ZCBBcHBsZSdzIGRvY3Mgc2F5IHRoYXQgaXMgb2spLgotICBCT09MIHN0b3AgPSBOTzsKLSAgaWYg
KChvcHRzICYgTlNFbnVtZXJhdGlvblJldmVyc2UpID09IDApIHsKLSAgICBmb3IgKE5TVUludGVn
ZXIgaSA9IDAsIGNvdW50ID0gX2NvdW50OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgYmxvY2so
X3ZhbHVlc1tpXSwgaSwgJnN0b3ApOwotICAgICAgaWYgKHN0b3ApIGJyZWFrOwotICAgIH0KLSAg
fSBlbHNlIGlmIChfY291bnQgPiAwKSB7Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSBfY291bnQ7
IGkgPiAwOyAtLWkpIHsKLSAgICAgIGJsb2NrKF92YWx1ZXNbaSAtIDFdLCAoaSAtIDEpLCAmc3Rv
cCk7Ci0gICAgICBpZiAoc3RvcCkgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLS0gKGRvdWJsZSl2
YWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggewotICBpZiAoaW5kZXggPj0gX2NvdW50KSB7
Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAgICAgICAgICAg
ICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5kZXgsICh1bnNpZ25lZCBsb25nKV9jb3VudF07
Ci0gIH0KLSAgcmV0dXJuIF92YWx1ZXNbaW5kZXhdOwotfQotCi0tICh2b2lkKWludGVybmFsUmVz
aXplVG9DYXBhY2l0eTooTlNVSW50ZWdlciluZXdDYXBhY2l0eSB7Ci0gIF92YWx1ZXMgPSByZWFs
bG9jZihfdmFsdWVzLCBuZXdDYXBhY2l0eSAqIHNpemVvZihkb3VibGUpKTsKLSAgaWYgKF92YWx1
ZXMgPT0gTlVMTCkgewotICAgIF9jYXBhY2l0eSA9IDA7Ci0gICAgX2NvdW50ID0gMDsKLSAgICBb
TlNFeGNlcHRpb24gcmFpc2U6TlNNYWxsb2NFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3Jt
YXQ6QCJGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgKHVuc2lnbmVkIGxvbmcpKG5ld0NhcGFjaXR5ICogc2l6ZW9mKGRvdWJsZSkpXTsKLSAgfQot
ICBfY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKLX0KLQotLSAodm9pZClhZGRWYWx1ZTooZG91Ymxl
KXZhbHVlIHsKLSAgW3NlbGYgYWRkVmFsdWVzOiZ2YWx1ZSBjb3VudDoxXTsKLX0KLQotLSAodm9p
ZClhZGRWYWx1ZXM6KGNvbnN0IGRvdWJsZSBbXSl2YWx1ZXMgY291bnQ6KE5TVUludGVnZXIpY291
bnQgewotICBpZiAodmFsdWVzID09IE5VTEwgfHwgY291bnQgPT0gMCkgcmV0dXJuOwotICBOU1VJ
bnRlZ2VyIGluaXRpYWxDb3VudCA9IF9jb3VudDsKLSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IGlu
aXRpYWxDb3VudCArIGNvdW50OwotICBpZiAobmV3Q291bnQgPiBfY2FwYWNpdHkpIHsKLSAgICBb
c2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNpdHlGcm9tQ291bnQobmV3Q291bnQp
XTsKLSAgfQotICBfY291bnQgPSBuZXdDb3VudDsKLSAgbWVtY3B5KCZfdmFsdWVzW2luaXRpYWxD
b3VudF0sIHZhbHVlcywgY291bnQgKiBzaXplb2YoZG91YmxlKSk7Ci0gIGlmIChfYXV0b2NyZWF0
b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZEFycmF5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxm
KTsKLSAgfQotfQotCi0tICh2b2lkKWluc2VydFZhbHVlOihkb3VibGUpdmFsdWUgYXRJbmRleDoo
TlNVSW50ZWdlcilpbmRleCB7Ci0gIGlmIChpbmRleCA+PSBfY291bnQgKyAxKSB7Ci0gICAgW05T
RXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6
QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgKHVuc2lnbmVkIGxvbmcpaW5kZXgsICh1bnNpZ25lZCBsb25nKV9jb3VudCArIDFdOwotICB9
Ci0gIE5TVUludGVnZXIgaW5pdGlhbENvdW50ID0gX2NvdW50OwotICBOU1VJbnRlZ2VyIG5ld0Nv
dW50ID0gaW5pdGlhbENvdW50ICsgMTsKLSAgaWYgKG5ld0NvdW50ID4gX2NhcGFjaXR5KSB7Ci0g
ICAgW3NlbGYgaW50ZXJuYWxSZXNpemVUb0NhcGFjaXR5OkNhcGFjaXR5RnJvbUNvdW50KG5ld0Nv
dW50KV07Ci0gIH0KLSAgX2NvdW50ID0gbmV3Q291bnQ7Ci0gIGlmIChpbmRleCAhPSBpbml0aWFs
Q291bnQpIHsKLSAgICBtZW1tb3ZlKCZfdmFsdWVzW2luZGV4ICsgMV0sICZfdmFsdWVzW2luZGV4
XSwgKGluaXRpYWxDb3VudCAtIGluZGV4KSAqIHNpemVvZihkb3VibGUpKTsKLSAgfQotICBfdmFs
dWVzW2luZGV4XSA9IHZhbHVlOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2Ny
ZWF0ZWRBcnJheU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9p
ZClyZXBsYWNlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHdpdGhWYWx1ZTooZG91Ymxl
KXZhbHVlIHsKLSAgaWYgKGluZGV4ID49IF9jb3VudCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlz
ZTpOU1JhbmdlRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkg
YmV5b25kIGJvdW5kcyAoJWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBs
b25nKWluZGV4LCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9Ci0gIF92YWx1ZXNbaW5kZXhd
ID0gdmFsdWU7Ci19Ci0KLS0gKHZvaWQpYWRkVmFsdWVzRnJvbUFycmF5OihHUEJEb3VibGVBcnJh
eSAqKWFycmF5IHsKLSAgW3NlbGYgYWRkVmFsdWVzOmFycmF5LT5fdmFsdWVzIGNvdW50OmFycmF5
LT5fY291bnRdOwotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilp
bmRleCB7Ci0gIGlmIChpbmRleCA+PSBfY291bnQpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6
TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkluZGV4ICglbHUpIGJl
eW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9u
ZylpbmRleCwgKHVuc2lnbmVkIGxvbmcpX2NvdW50XTsKLSAgfQotICBOU1VJbnRlZ2VyIG5ld0Nv
dW50ID0gX2NvdW50IC0gMTsKLSAgaWYgKGluZGV4ICE9IG5ld0NvdW50KSB7Ci0gICAgbWVtbW92
ZSgmX3ZhbHVlc1tpbmRleF0sICZfdmFsdWVzW2luZGV4ICsgMV0sIChuZXdDb3VudCAtIGluZGV4
KSAqIHNpemVvZihkb3VibGUpKTsKLSAgfQotICBfY291bnQgPSBuZXdDb3VudDsKLSAgaWYgKChu
ZXdDb3VudCArICgyICoga0NodW5rU2l6ZSkpIDwgX2NhcGFjaXR5KSB7Ci0gICAgW3NlbGYgaW50
ZXJuYWxSZXNpemVUb0NhcGFjaXR5OkNhcGFjaXR5RnJvbUNvdW50KG5ld0NvdW50KV07Ci0gIH0K
LX0KLQotLSAodm9pZClyZW1vdmVBbGwgewotICBfY291bnQgPSAwOwotICBpZiAoKDAgKyAoMiAq
IGtDaHVua1NpemUpKSA8IF9jYXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9D
YXBhY2l0eTpDYXBhY2l0eUZyb21Db3VudCgwKV07Ci0gIH0KLX0KLQotLSAodm9pZClleGNoYW5n
ZVZhbHVlQXRJbmRleDooTlNVSW50ZWdlcilpZHgxCi0gICAgICAgICAgICB3aXRoVmFsdWVBdElu
ZGV4OihOU1VJbnRlZ2VyKWlkeDIgewotICBpZiAoaWR4MSA+PSBfY291bnQpIHsKLSAgICBbTlNF
eGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpA
IkluZGV4ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAgICAgICAg
ICAodW5zaWduZWQgbG9uZylpZHgxLCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9Ci0gIGlm
IChpZHgyID49IF9jb3VudCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0
aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAo
JWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWlkeDIsICh1bnNp
Z25lZCBsb25nKV9jb3VudF07Ci0gIH0KLSAgZG91YmxlIHRlbXAgPSBfdmFsdWVzW2lkeDFdOwot
ICBfdmFsdWVzW2lkeDFdID0gX3ZhbHVlc1tpZHgyXTsKLSAgX3ZhbHVlc1tpZHgyXSA9IHRlbXA7
Ci19Ci0KLUBlbmQKLQotLy8lUERETS1FWFBBTkQgQVJSQVlfSU5URVJGQUNFX1NJTVBMRShCb29s
LCBCT09MLCAlZCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBl
ZGl0IGl0IGRpcmVjdGx5LgotCi0jcHJhZ21hIG1hcmsgLSBCb29sCi0KLUBpbXBsZW1lbnRhdGlv
biBHUEJCb29sQXJyYXkgewotIEBwYWNrYWdlCi0gIEJPT0wgKl92YWx1ZXM7Ci0gIE5TVUludGVn
ZXIgX2NvdW50OwotICBOU1VJbnRlZ2VyIF9jYXBhY2l0eTsKLX0KLQotQHN5bnRoZXNpemUgY291
bnQgPSBfY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJheSB7Ci0gIHJldHVybiBbW1tzZWxm
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJheVdp
dGhWYWx1ZTooQk9PTCl2YWx1ZSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxl
ciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczogb24gdG8g
Z2V0Ci0gIC8vIHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJCb29sQXJyYXkqKVtz
ZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczomdmFsdWUgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwot
fQotCi0rIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsdWVBcnJheTooR1BCQm9vbEFycmF5ICop
YXJyYXkgewotICByZXR1cm4gW1soR1BCQm9vbEFycmF5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhW
YWx1ZUFycmF5OmFycmF5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJh
eVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgLy8gTm8gd29yayBuZWVkZWQ7
Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZUFycmF5
OihHUEJCb29sQXJyYXkgKilhcnJheSB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczph
cnJheS0+X3ZhbHVlcyBjb3VudDphcnJheS0+X2NvdW50XTsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoVmFsdWVzOihjb25zdCBCT09MIFtdKXZhbHVlcyBjb3VudDooTlNVSW50ZWdlcilj
b3VudCB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoY291
bnQgJiYgdmFsdWVzKSB7Ci0gICAgICBfdmFsdWVzID0gcmVhbGxvY2YoX3ZhbHVlcywgY291bnQg
KiBzaXplb2YoQk9PTCkpOwotICAgICAgaWYgKF92YWx1ZXMgIT0gTlVMTCkgewotICAgICAgICBf
Y2FwYWNpdHkgPSBjb3VudDsKLSAgICAgICAgbWVtY3B5KF92YWx1ZXMsIHZhbHVlcywgY291bnQg
KiBzaXplb2YoQk9PTCkpOwotICAgICAgICBfY291bnQgPSBjb3VudDsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIFtzZWxmIHJlbGVhc2VdOwotICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNN
YWxsb2NFeGNlcHRpb24KLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0OkAiRmFpbGVkIHRvIGFs
bG9jYXRlICVsdSBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQg
bG9uZykoY291bnQgKiBzaXplb2YoQk9PTCkpXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRl
Z2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgY291bnQ6MF07
Ci0gIGlmIChzZWxmICYmIGNvdW50KSB7Ci0gICAgW3NlbGYgaW50ZXJuYWxSZXNpemVUb0NhcGFj
aXR5OmNvdW50XTsKLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNv
cHlXaXRoWm9uZTooTlNab25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQkJvb2xBcnJheSBhbGxv
Y1dpdGhab25lOnpvbmVdIGluaXRXaXRoVmFsdWVzOl92YWx1ZXMgY291bnQ6X2NvdW50XTsKLX0K
LQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAg
ICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRv
Y3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0g
IGZyZWUoX3ZhbHVlcyk7Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoQk9PTClpc0VxdWFs
OihHUEJCb29sQXJyYXkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0
dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJCb29sQXJyYXkg
Y2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4gKF9jb3VudCA9PSBvdGhl
ci0+X2NvdW50Ci0gICAgICAgICAgJiYgbWVtY21wKF92YWx1ZXMsIG90aGVyLT5fdmFsdWVzLCAo
X2NvdW50ICogc2l6ZW9mKEJPT0wpKSkgPT0gMCk7Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7
Ci0gIC8vIEZvbGxvdyBOU0FycmF5J3MgbGVhZCwgYW5kIHVzZSB0aGUgY291bnQgYXMgdGhlIGhh
c2guCi0gIHJldHVybiBfY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewot
ICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIjwlQCAlcD4geyAiLCBbc2VsZiBjbGFzc10sIHNlbGZdOwotICBmb3IgKE5TVUludGVn
ZXIgaSA9IDAsIGNvdW50ID0gX2NvdW50OyBpIDwgY291bnQ7ICsraSkgewotICAgIGlmIChpID09
IDApIHsKLSAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJWQiLCBfdmFsdWVzW2ldXTsKLSAg
ICB9IGVsc2UgewotICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIsICVkIiwgX3ZhbHVlc1tp
XV07Ci0gICAgfQotICB9Ci0gIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiIH0iXTsKLSAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6KHZvaWQgKF4p
KEJPT0wgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBCT09MICpzdG9wKSlibG9jayB7Ci0gIFtzZWxm
IGVudW1lcmF0ZVZhbHVlc1dpdGhPcHRpb25zOjAgdXNpbmdCbG9jazpibG9ja107Ci19Ci0KLS0g
KHZvaWQpZW51bWVyYXRlVmFsdWVzV2l0aE9wdGlvbnM6KE5TRW51bWVyYXRpb25PcHRpb25zKW9w
dHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nQmxvY2s6KHZvaWQgKF4pKEJPT0wgdmFs
dWUsIE5TVUludGVnZXIgaWR4LCBCT09MICpzdG9wKSlibG9jayB7Ci0gIC8vIE5TRW51bWVyYXRp
b25Db25jdXJyZW50IGlzbid0IGN1cnJlbnRseSBzdXBwb3J0ZWQgKGFuZCBBcHBsZSdzIGRvY3Mg
c2F5IHRoYXQgaXMgb2spLgotICBCT09MIHN0b3AgPSBOTzsKLSAgaWYgKChvcHRzICYgTlNFbnVt
ZXJhdGlvblJldmVyc2UpID09IDApIHsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDAsIGNvdW50
ID0gX2NvdW50OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgYmxvY2soX3ZhbHVlc1tpXSwgaSwg
JnN0b3ApOwotICAgICAgaWYgKHN0b3ApIGJyZWFrOwotICAgIH0KLSAgfSBlbHNlIGlmIChfY291
bnQgPiAwKSB7Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSBfY291bnQ7IGkgPiAwOyAtLWkpIHsK
LSAgICAgIGJsb2NrKF92YWx1ZXNbaSAtIDFdLCAoaSAtIDEpLCAmc3RvcCk7Ci0gICAgICBpZiAo
c3RvcCkgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLS0gKEJPT0wpdmFsdWVBdEluZGV4OihOU1VJ
bnRlZ2VyKWluZGV4IHsKLSAgaWYgKGluZGV4ID49IF9jb3VudCkgewotICAgIFtOU0V4Y2VwdGlv
biByYWlzZTpOU1JhbmdlRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXgg
KCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNp
Z25lZCBsb25nKWluZGV4LCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9Ci0gIHJldHVybiBf
dmFsdWVzW2luZGV4XTsKLX0KLQotLSAodm9pZClpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6KE5T
VUludGVnZXIpbmV3Q2FwYWNpdHkgewotICBfdmFsdWVzID0gcmVhbGxvY2YoX3ZhbHVlcywgbmV3
Q2FwYWNpdHkgKiBzaXplb2YoQk9PTCkpOwotICBpZiAoX3ZhbHVlcyA9PSBOVUxMKSB7Ci0gICAg
X2NhcGFjaXR5ID0gMDsKLSAgICBfY291bnQgPSAwOwotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpO
U01hbGxvY0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkZhaWxlZCB0byBhbGxv
Y2F0ZSAlbHUgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyko
bmV3Q2FwYWNpdHkgKiBzaXplb2YoQk9PTCkpXTsKLSAgfQotICBfY2FwYWNpdHkgPSBuZXdDYXBh
Y2l0eTsKLX0KLQotLSAodm9pZClhZGRWYWx1ZTooQk9PTCl2YWx1ZSB7Ci0gIFtzZWxmIGFkZFZh
bHVlczomdmFsdWUgY291bnQ6MV07Ci19Ci0KLS0gKHZvaWQpYWRkVmFsdWVzOihjb25zdCBCT09M
IFtdKXZhbHVlcyBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIGlmICh2YWx1ZXMgPT0gTlVM
TCB8fCBjb3VudCA9PSAwKSByZXR1cm47Ci0gIE5TVUludGVnZXIgaW5pdGlhbENvdW50ID0gX2Nv
dW50OwotICBOU1VJbnRlZ2VyIG5ld0NvdW50ID0gaW5pdGlhbENvdW50ICsgY291bnQ7Ci0gIGlm
IChuZXdDb3VudCA+IF9jYXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBh
Y2l0eTpDYXBhY2l0eUZyb21Db3VudChuZXdDb3VudCldOwotICB9Ci0gIF9jb3VudCA9IG5ld0Nv
dW50OwotICBtZW1jcHkoJl92YWx1ZXNbaW5pdGlhbENvdW50XSwgdmFsdWVzLCBjb3VudCAqIHNp
emVvZihCT09MKSk7Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZEFy
cmF5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKWluc2Vy
dFZhbHVlOihCT09MKXZhbHVlIGF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggewotICBpZiAoaW5k
ZXggPj0gX2NvdW50ICsgMSkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0
aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAo
JWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4LCAodW5z
aWduZWQgbG9uZylfY291bnQgKyAxXTsKLSAgfQotICBOU1VJbnRlZ2VyIGluaXRpYWxDb3VudCA9
IF9jb3VudDsKLSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIDE7Ci0gIGlm
IChuZXdDb3VudCA+IF9jYXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBh
Y2l0eTpDYXBhY2l0eUZyb21Db3VudChuZXdDb3VudCldOwotICB9Ci0gIF9jb3VudCA9IG5ld0Nv
dW50OwotICBpZiAoaW5kZXggIT0gaW5pdGlhbENvdW50KSB7Ci0gICAgbWVtbW92ZSgmX3ZhbHVl
c1tpbmRleCArIDFdLCAmX3ZhbHVlc1tpbmRleF0sIChpbml0aWFsQ291bnQgLSBpbmRleCkgKiBz
aXplb2YoQk9PTCkpOwotICB9Ci0gIF92YWx1ZXNbaW5kZXhdID0gdmFsdWU7Ci0gIGlmIChfYXV0
b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZEFycmF5TW9kaWZpZWQoX2F1dG9jcmVhdG9y
LCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlcGxhY2VWYWx1ZUF0SW5kZXg6KE5TVUludGVn
ZXIpaW5kZXggd2l0aFZhbHVlOihCT09MKXZhbHVlIHsKLSAgaWYgKGluZGV4ID49IF9jb3VudCkg
ewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0aW9uCi0gICAgICAgICAgICAg
ICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1KSIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4LCAodW5zaWduZWQgbG9uZylfY291bnRd
OwotICB9Ci0gIF92YWx1ZXNbaW5kZXhdID0gdmFsdWU7Ci19Ci0KLS0gKHZvaWQpYWRkVmFsdWVz
RnJvbUFycmF5OihHUEJCb29sQXJyYXkgKilhcnJheSB7Ci0gIFtzZWxmIGFkZFZhbHVlczphcnJh
eS0+X3ZhbHVlcyBjb3VudDphcnJheS0+X2NvdW50XTsKLX0KLQotLSAodm9pZClyZW1vdmVWYWx1
ZUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXggewotICBpZiAoaW5kZXggPj0gX2NvdW50KSB7Ci0g
ICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBm
b3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5kZXgsICh1bnNpZ25lZCBsb25nKV9jb3VudF07Ci0g
IH0KLSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IF9jb3VudCAtIDE7Ci0gIGlmIChpbmRleCAhPSBu
ZXdDb3VudCkgewotICAgIG1lbW1vdmUoJl92YWx1ZXNbaW5kZXhdLCAmX3ZhbHVlc1tpbmRleCAr
IDFdLCAobmV3Q291bnQgLSBpbmRleCkgKiBzaXplb2YoQk9PTCkpOwotICB9Ci0gIF9jb3VudCA9
IG5ld0NvdW50OwotICBpZiAoKG5ld0NvdW50ICsgKDIgKiBrQ2h1bmtTaXplKSkgPCBfY2FwYWNp
dHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNpdHlGcm9tQ291
bnQobmV3Q291bnQpXTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZUFsbCB7Ci0gIF9jb3VudCA9
IDA7Ci0gIGlmICgoMCArICgyICoga0NodW5rU2l6ZSkpIDwgX2NhcGFjaXR5KSB7Ci0gICAgW3Nl
bGYgaW50ZXJuYWxSZXNpemVUb0NhcGFjaXR5OkNhcGFjaXR5RnJvbUNvdW50KDApXTsKLSAgfQot
fQotCi0tICh2b2lkKWV4Y2hhbmdlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWlkeDEKLSAgICAg
ICAgICAgIHdpdGhWYWx1ZUF0SW5kZXg6KE5TVUludGVnZXIpaWR4MiB7Ci0gIGlmIChpZHgxID49
IF9jb3VudCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0aW9uCi0gICAg
ICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1KSIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWlkeDEsICh1bnNpZ25lZCBsb25n
KV9jb3VudF07Ci0gIH0KLSAgaWYgKGlkeDIgPj0gX2NvdW50KSB7Ci0gICAgW05TRXhjZXB0aW9u
IHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJJbmRleCAo
JWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVuc2ln
bmVkIGxvbmcpaWR4MiwgKHVuc2lnbmVkIGxvbmcpX2NvdW50XTsKLSAgfQotICBCT09MIHRlbXAg
PSBfdmFsdWVzW2lkeDFdOwotICBfdmFsdWVzW2lkeDFdID0gX3ZhbHVlc1tpZHgyXTsKLSAgX3Zh
bHVlc1tpZHgyXSA9IHRlbXA7Ci19Ci0KLUBlbmQKLQotLy8lUERETS1FWFBBTkQtRU5EICg3IGV4
cGFuc2lvbnMpCi0KLSNwcmFnbWEgbWFyayAtIEVudW0KLQotQGltcGxlbWVudGF0aW9uIEdQQkVu
dW1BcnJheSB7Ci0gQHBhY2thZ2UKLSAgR1BCRW51bVZhbGlkYXRpb25GdW5jIF92YWxpZGF0aW9u
RnVuYzsKLSAgaW50MzJfdCAqX3ZhbHVlczsKLSAgTlNVSW50ZWdlciBfY291bnQ7Ci0gIE5TVUlu
dGVnZXIgX2NhcGFjaXR5OwotfQotCi1Ac3ludGhlc2l6ZSBjb3VudCA9IF9jb3VudDsKLUBzeW50
aGVzaXplIHZhbGlkYXRpb25GdW5jID0gX3ZhbGlkYXRpb25GdW5jOwotCi0rIChpbnN0YW5jZXR5
cGUpYXJyYXkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxpZGF0aW9uRnVu
Y3Rpb246TlVMTF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpYXJyYXlXaXRo
VmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYyB7Ci0gIHJldHVy
biBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpmdW5jXSBhdXRvcmVs
ZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhWYWxpZGF0aW9uRnVuY3Rpb246
KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJhd1ZhbHVlOihpbnQzMl90KXZhbHVlIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2Nd
IGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOiZ2YWx1ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChp
bnN0YW5jZXR5cGUpYXJyYXlXaXRoVmFsdWVBcnJheTooR1BCRW51bUFycmF5ICopYXJyYXkgewot
ICByZXR1cm4gW1soR1BCRW51bUFycmF5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZUFycmF5
OmFycmF5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlhcnJheVdpdGhWYWxp
ZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0
dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmMgY2FwYWNp
dHk6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICBy
ZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246TlVMTF07Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFZhbHVlQXJyYXk6KEdQQkVudW1BcnJheSAqKWFycmF5IHsKLSAg
cmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmFycmF5LT5fdmFsaWRhdGlv
bkZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOmFycmF5LT5f
dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDphcnJheS0+
X2NvdW50XTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9u
OihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYyB7Ci0gIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
IGlmIChzZWxmKSB7Ci0gICAgX3ZhbGlkYXRpb25GdW5jID0gKGZ1bmMgIT0gTlVMTCA/IGZ1bmMg
OiBBcnJheURlZmF1bHRfSXNWYWxpZFZhbHVlKTsKLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRh
dGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVz
Oihjb25zdCBpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRo
VmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmNdOwotICBpZiAoc2VsZikgewotICAgIGlmIChjb3VudCAm
JiB2YWx1ZXMpIHsKLSAgICAgIF92YWx1ZXMgPSByZWFsbG9jZihfdmFsdWVzLCBjb3VudCAqIHNp
emVvZihpbnQzMl90KSk7Ci0gICAgICBpZiAoX3ZhbHVlcyAhPSBOVUxMKSB7Ci0gICAgICAgIF9j
YXBhY2l0eSA9IGNvdW50OwotICAgICAgICBtZW1jcHkoX3ZhbHVlcywgdmFsdWVzLCBjb3VudCAq
IHNpemVvZihpbnQzMl90KSk7Ci0gICAgICAgIF9jb3VudCA9IGNvdW50OwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgW3NlbGYgcmVsZWFzZV07Ci0gICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpO
U01hbGxvY0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6QCJGYWlsZWQgdG8g
YWxsb2NhdGUgJWx1IGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25l
ZCBsb25nKShjb3VudCAqIHNpemVvZihpbnQzMl90KSldOwotICAgICAgfQotICAgIH0KLSAgfQot
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1
bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzZWxm
IGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmNdOwotICBpZiAoc2VsZiAmJiBjb3VudCkg
ewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBhY2l0eTpjb3VudF07Ci0gIH0KLSAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpv
bmUgewotICByZXR1cm4gW1tHUEJFbnVtQXJyYXkgYWxsb2NXaXRoWm9uZTp6b25lXQotICAgICAg
ICAgICAgIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOl92YWxpZGF0aW9uRnVuYwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOl92YWx1ZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDpfY291bnRdOwotfQotCi0vLyVQRERNLUVYUEFORCBB
UlJBWV9JTU1VVEFCTEVfQ09SRShFbnVtLCBpbnQzMl90LCBSYXcsICVkKQotLy8gVGhpcyBibG9j
ayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLS0gKHZv
aWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6
IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6
ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBmcmVlKF92
YWx1ZXMpOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BCRW51
bUFycmF5ICopb3RoZXIgewotICBpZiAoc2VsZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZRVM7
Ci0gIH0KLSAgaWYgKCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbR1BCRW51bUFycmF5IGNsYXNzXV0p
IHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIChfY291bnQgPT0gb3RoZXItPl9jb3Vu
dAotICAgICAgICAgICYmIG1lbWNtcChfdmFsdWVzLCBvdGhlci0+X3ZhbHVlcywgKF9jb3VudCAq
IHNpemVvZihpbnQzMl90KSkpID09IDApOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICAv
LyBGb2xsb3cgTlNBcnJheSdzIGxlYWQsIGFuZCB1c2UgdGhlIGNvdW50IGFzIHRoZSBoYXNoLgot
ICByZXR1cm4gX2NvdW50OwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgTlNN
dXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCI8JUAgJXA+IHsgIiwgW3NlbGYgY2xhc3NdLCBzZWxmXTsKLSAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwLCBjb3VudCA9IF9jb3VudDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICBpZiAoaSA9PSAwKSB7
Ci0gICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVkIiwgX3ZhbHVlc1tpXV07Ci0gICAgfSBl
bHNlIHsKLSAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiLCAlZCIsIF92YWx1ZXNbaV1dOwot
ICAgIH0KLSAgfQotICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiB9Il07Ci0gIHJldHVybiByZXN1
bHQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlUmF3VmFsdWVzV2l0aEJsb2NrOih2b2lkICheKShp
bnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbc2Vs
ZiBlbnVtZXJhdGVSYXdWYWx1ZXNXaXRoT3B0aW9uczowIHVzaW5nQmxvY2s6YmxvY2tdOwotfQot
Ci0tICh2b2lkKWVudW1lcmF0ZVJhd1ZhbHVlc1dpdGhPcHRpb25zOihOU0VudW1lcmF0aW9uT3B0
aW9ucylvcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Jsb2NrOih2b2lkIChe
KShpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkpYmxvY2sgewotICAv
LyBOU0VudW1lcmF0aW9uQ29uY3VycmVudCBpc24ndCBjdXJyZW50bHkgc3VwcG9ydGVkIChhbmQg
QXBwbGUncyBkb2NzIHNheSB0aGF0IGlzIG9rKS4KLSAgQk9PTCBzdG9wID0gTk87Ci0gIGlmICgo
b3B0cyAmIE5TRW51bWVyYXRpb25SZXZlcnNlKSA9PSAwKSB7Ci0gICAgZm9yIChOU1VJbnRlZ2Vy
IGkgPSAwLCBjb3VudCA9IF9jb3VudDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgIGJsb2NrKF92
YWx1ZXNbaV0sIGksICZzdG9wKTsKLSAgICAgIGlmIChzdG9wKSBicmVhazsKLSAgICB9Ci0gIH0g
ZWxzZSBpZiAoX2NvdW50ID4gMCkgewotICAgIGZvciAoTlNVSW50ZWdlciBpID0gX2NvdW50OyBp
ID4gMDsgLS1pKSB7Ci0gICAgICBibG9jayhfdmFsdWVzW2kgLSAxXSwgKGkgLSAxKSwgJnN0b3Ap
OwotICAgICAgaWYgKHN0b3ApIGJyZWFrOwotICAgIH0KLSAgfQotfQotLy8lUERETS1FWFBBTkQt
RU5EIEFSUkFZX0lNTVVUQUJMRV9DT1JFKEVudW0sIGludDMyX3QsIFJhdywgJWQpCi0KLS0gKGlu
dDMyX3QpdmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHsKLS8vJVBERE0tRVhQQU5EIFZB
TElEQVRFX1JBTkdFKGluZGV4LCBfY291bnQpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2Vu
ZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotICBpZiAoaW5kZXggPj0gX2NvdW50
KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAgICAgICAg
ICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5kZXgsICh1bnNpZ25lZCBsb25nKV9jb3Vu
dF07Ci0gIH0KLS8vJVBERE0tRVhQQU5ELUVORCBWQUxJREFURV9SQU5HRShpbmRleCwgX2NvdW50
KQotICBpbnQzMl90IHJlc3VsdCA9IF92YWx1ZXNbaW5kZXhdOwotICBpZiAoIV92YWxpZGF0aW9u
RnVuYyhyZXN1bHQpKSB7Ci0gICAgcmVzdWx0ID0ga0dQQlVucmVjb2duaXplZEVudW1lcmF0b3JW
YWx1ZTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChpbnQzMl90KXJhd1ZhbHVlQXRJ
bmRleDooTlNVSW50ZWdlcilpbmRleCB7Ci0vLyVQRERNLUVYUEFORCBWQUxJREFURV9SQU5HRShp
bmRleCwgX2NvdW50KQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90
IGVkaXQgaXQgZGlyZWN0bHkuCi0KLSAgaWYgKGluZGV4ID49IF9jb3VudCkgewotICAgIFtOU0V4
Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAi
SW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICh1bnNpZ25lZCBsb25nKWluZGV4LCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9Ci0vLyVQ
RERNLUVYUEFORC1FTkQgVkFMSURBVEVfUkFOR0UoaW5kZXgsIF9jb3VudCkKLSAgcmV0dXJuIF92
YWx1ZXNbaW5kZXhdOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazoodm9p
ZCAoXikoaW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrIHsK
LSAgW3NlbGYgZW51bWVyYXRlVmFsdWVzV2l0aE9wdGlvbnM6MCB1c2luZ0Jsb2NrOmJsb2NrXTsK
LX0KLQotLSAodm9pZCllbnVtZXJhdGVWYWx1ZXNXaXRoT3B0aW9uczooTlNFbnVtZXJhdGlvbk9w
dGlvbnMpb3B0cwotICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdCbG9jazoodm9pZCAoXiko
aW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgLy8g
TlNFbnVtZXJhdGlvbkNvbmN1cnJlbnQgaXNuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCAoYW5kIEFw
cGxlJ3MgZG9jcyBzYXkgdGhhdCBpcyBvaykuCi0gIEJPT0wgc3RvcCA9IE5POwotICBHUEJFbnVt
VmFsaWRhdGlvbkZ1bmMgZnVuYyA9IF92YWxpZGF0aW9uRnVuYzsKLSAgaWYgKChvcHRzICYgTlNF
bnVtZXJhdGlvblJldmVyc2UpID09IDApIHsKLSAgICBpbnQzMl90ICpzY2FuID0gX3ZhbHVlczsK
LSAgICBpbnQzMl90ICplbmQgPSBzY2FuICsgX2NvdW50OwotICAgIGZvciAoTlNVSW50ZWdlciBp
ID0gMDsgc2NhbiA8IGVuZDsgKytpLCArK3NjYW4pIHsKLSAgICAgIGludDMyX3QgdmFsdWUgPSAq
c2NhbjsKLSAgICAgIGlmICghZnVuYyh2YWx1ZSkpIHsKLSAgICAgICAgdmFsdWUgPSBrR1BCVW5y
ZWNvZ25pemVkRW51bWVyYXRvclZhbHVlOwotICAgICAgfQotICAgICAgYmxvY2sodmFsdWUsIGks
ICZzdG9wKTsKLSAgICAgIGlmIChzdG9wKSBicmVhazsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoX2Nv
dW50ID4gMCkgewotICAgIGludDMyX3QgKmVuZCA9IF92YWx1ZXM7Ci0gICAgaW50MzJfdCAqc2Nh
biA9IGVuZCArIChfY291bnQgLSAxKTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IChfY291bnQg
LSAxKTsgc2NhbiA+PSBlbmQ7IC0taSwgLS1zY2FuKSB7Ci0gICAgICBpbnQzMl90IHZhbHVlID0g
KnNjYW47Ci0gICAgICBpZiAoIWZ1bmModmFsdWUpKSB7Ci0gICAgICAgIHZhbHVlID0ga0dQQlVu
cmVjb2duaXplZEVudW1lcmF0b3JWYWx1ZTsKLSAgICAgIH0KLSAgICAgIGJsb2NrKHZhbHVlLCBp
LCAmc3RvcCk7Ci0gICAgICBpZiAoc3RvcCkgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLS8vJVBE
RE0tRVhQQU5EIEFSUkFZX01VVEFCTEVfQ09SRShFbnVtLCBpbnQzMl90LCBSYXcsICVkKQotLy8g
VGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHku
Ci0KLS0gKHZvaWQpaW50ZXJuYWxSZXNpemVUb0NhcGFjaXR5OihOU1VJbnRlZ2VyKW5ld0NhcGFj
aXR5IHsKLSAgX3ZhbHVlcyA9IHJlYWxsb2NmKF92YWx1ZXMsIG5ld0NhcGFjaXR5ICogc2l6ZW9m
KGludDMyX3QpKTsKLSAgaWYgKF92YWx1ZXMgPT0gTlVMTCkgewotICAgIF9jYXBhY2l0eSA9IDA7
Ci0gICAgX2NvdW50ID0gMDsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNNYWxsb2NFeGNlcHRp
b24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVz
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKG5ld0NhcGFjaXR5ICog
c2l6ZW9mKGludDMyX3QpKV07Ci0gIH0KLSAgX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7Ci19Ci0K
LS0gKHZvaWQpYWRkUmF3VmFsdWU6KGludDMyX3QpdmFsdWUgewotICBbc2VsZiBhZGRSYXdWYWx1
ZXM6JnZhbHVlIGNvdW50OjFdOwotfQotCi0tICh2b2lkKWFkZFJhd1ZhbHVlczooY29uc3QgaW50
MzJfdCBbXSl2YWx1ZXMgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBpZiAodmFsdWVzID09
IE5VTEwgfHwgY291bnQgPT0gMCkgcmV0dXJuOwotICBOU1VJbnRlZ2VyIGluaXRpYWxDb3VudCA9
IF9jb3VudDsKLSAgTlNVSW50ZWdlciBuZXdDb3VudCA9IGluaXRpYWxDb3VudCArIGNvdW50Owot
ICBpZiAobmV3Q291bnQgPiBfY2FwYWNpdHkpIHsKLSAgICBbc2VsZiBpbnRlcm5hbFJlc2l6ZVRv
Q2FwYWNpdHk6Q2FwYWNpdHlGcm9tQ291bnQobmV3Q291bnQpXTsKLSAgfQotICBfY291bnQgPSBu
ZXdDb3VudDsKLSAgbWVtY3B5KCZfdmFsdWVzW2luaXRpYWxDb3VudF0sIHZhbHVlcywgY291bnQg
KiBzaXplb2YoaW50MzJfdCkpOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2Ny
ZWF0ZWRBcnJheU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9p
ZClpbnNlcnRSYXdWYWx1ZTooaW50MzJfdCl2YWx1ZSBhdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4
IHsKLSAgaWYgKGluZGV4ID49IF9jb3VudCArIDEpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6
TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkluZGV4ICglbHUpIGJl
eW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9u
ZylpbmRleCwgKHVuc2lnbmVkIGxvbmcpX2NvdW50ICsgMV07Ci0gIH0KLSAgTlNVSW50ZWdlciBp
bml0aWFsQ291bnQgPSBfY291bnQ7Ci0gIE5TVUludGVnZXIgbmV3Q291bnQgPSBpbml0aWFsQ291
bnQgKyAxOwotICBpZiAobmV3Q291bnQgPiBfY2FwYWNpdHkpIHsKLSAgICBbc2VsZiBpbnRlcm5h
bFJlc2l6ZVRvQ2FwYWNpdHk6Q2FwYWNpdHlGcm9tQ291bnQobmV3Q291bnQpXTsKLSAgfQotICBf
Y291bnQgPSBuZXdDb3VudDsKLSAgaWYgKGluZGV4ICE9IGluaXRpYWxDb3VudCkgewotICAgIG1l
bW1vdmUoJl92YWx1ZXNbaW5kZXggKyAxXSwgJl92YWx1ZXNbaW5kZXhdLCAoaW5pdGlhbENvdW50
IC0gaW5kZXgpICogc2l6ZW9mKGludDMyX3QpKTsKLSAgfQotICBfdmFsdWVzW2luZGV4XSA9IHZh
bHVlOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWRBcnJheU1vZGlm
aWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZXBsYWNlVmFsdWVB
dEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHdpdGhSYXdWYWx1ZTooaW50MzJfdCl2YWx1ZSB7Ci0g
IGlmIChpbmRleCA+PSBfY291bnQpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNSYW5nZUV4
Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkluZGV4ICglbHUpIGJleW9uZCBib3Vu
ZHMgKCVsdSkiLAotICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylpbmRleCwg
KHVuc2lnbmVkIGxvbmcpX2NvdW50XTsKLSAgfQotICBfdmFsdWVzW2luZGV4XSA9IHZhbHVlOwot
fQotCi0tICh2b2lkKWFkZFJhd1ZhbHVlc0Zyb21BcnJheTooR1BCRW51bUFycmF5ICopYXJyYXkg
ewotICBbc2VsZiBhZGRSYXdWYWx1ZXM6YXJyYXktPl92YWx1ZXMgY291bnQ6YXJyYXktPl9jb3Vu
dF07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHsK
LSAgaWYgKGluZGV4ID49IF9jb3VudCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1Jhbmdl
RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJv
dW5kcyAoJWx1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWluZGV4
LCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9Ci0gIE5TVUludGVnZXIgbmV3Q291bnQgPSBf
Y291bnQgLSAxOwotICBpZiAoaW5kZXggIT0gbmV3Q291bnQpIHsKLSAgICBtZW1tb3ZlKCZfdmFs
dWVzW2luZGV4XSwgJl92YWx1ZXNbaW5kZXggKyAxXSwgKG5ld0NvdW50IC0gaW5kZXgpICogc2l6
ZW9mKGludDMyX3QpKTsKLSAgfQotICBfY291bnQgPSBuZXdDb3VudDsKLSAgaWYgKChuZXdDb3Vu
dCArICgyICoga0NodW5rU2l6ZSkpIDwgX2NhcGFjaXR5KSB7Ci0gICAgW3NlbGYgaW50ZXJuYWxS
ZXNpemVUb0NhcGFjaXR5OkNhcGFjaXR5RnJvbUNvdW50KG5ld0NvdW50KV07Ci0gIH0KLX0KLQot
LSAodm9pZClyZW1vdmVBbGwgewotICBfY291bnQgPSAwOwotICBpZiAoKDAgKyAoMiAqIGtDaHVu
a1NpemUpKSA8IF9jYXBhY2l0eSkgewotICAgIFtzZWxmIGludGVybmFsUmVzaXplVG9DYXBhY2l0
eTpDYXBhY2l0eUZyb21Db3VudCgwKV07Ci0gIH0KLX0KLQotLSAodm9pZClleGNoYW5nZVZhbHVl
QXRJbmRleDooTlNVSW50ZWdlcilpZHgxCi0gICAgICAgICAgICB3aXRoVmFsdWVBdEluZGV4OihO
U1VJbnRlZ2VyKWlkeDIgewotICBpZiAoaWR4MSA+PSBfY291bnQpIHsKLSAgICBbTlNFeGNlcHRp
b24gcmFpc2U6TlNSYW5nZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkluZGV4
ICglbHUpIGJleW9uZCBib3VuZHMgKCVsdSkiLAotICAgICAgICAgICAgICAgICAgICAgICAodW5z
aWduZWQgbG9uZylpZHgxLCAodW5zaWduZWQgbG9uZylfY291bnRdOwotICB9Ci0gIGlmIChpZHgy
ID49IF9jb3VudCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1JhbmdlRXhjZXB0aW9uCi0g
ICAgICAgICAgICAgICAgZm9ybWF0OkAiSW5kZXggKCVsdSkgYmV5b25kIGJvdW5kcyAoJWx1KSIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWlkeDIsICh1bnNpZ25lZCBs
b25nKV9jb3VudF07Ci0gIH0KLSAgaW50MzJfdCB0ZW1wID0gX3ZhbHVlc1tpZHgxXTsKLSAgX3Zh
bHVlc1tpZHgxXSA9IF92YWx1ZXNbaWR4Ml07Ci0gIF92YWx1ZXNbaWR4Ml0gPSB0ZW1wOwotfQot
Ci0vLyVQRERNLUVYUEFORCBNVVRBVElPTl9NRVRIT0RTKEVudW0sIGludDMyX3QsICwgRW51bVZh
bGlkYXRpb25MaXN0LCBFbnVtVmFsaWRhdGlvbk9uZSkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBp
cyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0tICh2b2lkKWFkZFZhbHVl
OihpbnQzMl90KXZhbHVlIHsKLSAgW3NlbGYgYWRkVmFsdWVzOiZ2YWx1ZSBjb3VudDoxXTsKLX0K
LQotLSAodm9pZClhZGRWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFsdWVzIGNvdW50OihOU1VJ
bnRlZ2VyKWNvdW50IHsKLSAgaWYgKHZhbHVlcyA9PSBOVUxMIHx8IGNvdW50ID09IDApIHJldHVy
bjsKLSAgR1BCRW51bVZhbGlkYXRpb25GdW5jIGZ1bmMgPSBfdmFsaWRhdGlvbkZ1bmM7Ci0gIGZv
ciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICBpZiAoIWZ1bmModmFs
dWVzW2ldKSkgewotICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhj
ZXB0aW9uCi0gICAgICAgICAgICAgICAgICBmb3JtYXQ6QCIlQDogQXR0ZW1wdCB0byBzZXQgYW4g
dW5rbm93biBlbnVtIHZhbHVlICglZCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxm
IGNsYXNzXSwgdmFsdWVzW2ldXTsKLSAgICB9Ci0gIH0KLSAgTlNVSW50ZWdlciBpbml0aWFsQ291
bnQgPSBfY291bnQ7Ci0gIE5TVUludGVnZXIgbmV3Q291bnQgPSBpbml0aWFsQ291bnQgKyBjb3Vu
dDsKLSAgaWYgKG5ld0NvdW50ID4gX2NhcGFjaXR5KSB7Ci0gICAgW3NlbGYgaW50ZXJuYWxSZXNp
emVUb0NhcGFjaXR5OkNhcGFjaXR5RnJvbUNvdW50KG5ld0NvdW50KV07Ci0gIH0KLSAgX2NvdW50
ID0gbmV3Q291bnQ7Ci0gIG1lbWNweSgmX3ZhbHVlc1tpbml0aWFsQ291bnRdLCB2YWx1ZXMsIGNv
dW50ICogc2l6ZW9mKGludDMyX3QpKTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1
dG9jcmVhdGVkQXJyYXlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0g
KHZvaWQpaW5zZXJ0VmFsdWU6KGludDMyX3QpdmFsdWUgYXRJbmRleDooTlNVSW50ZWdlcilpbmRl
eCB7Ci0gIGlmIChpbmRleCA+PSBfY291bnQgKyAxKSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNl
Ok5TUmFuZ2VFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBi
ZXlvbmQgYm91bmRzICglbHUpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxv
bmcpaW5kZXgsICh1bnNpZ25lZCBsb25nKV9jb3VudCArIDFdOwotICB9Ci0gIGlmICghX3ZhbGlk
YXRpb25GdW5jKHZhbHVlKSkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1
bWVudEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIiVAOiBBdHRlbXB0IHRvIHNl
dCBhbiB1bmtub3duIGVudW0gdmFsdWUgKCVkKSIsCi0gICAgICAgICAgICAgICAgICAgICAgIFtz
ZWxmIGNsYXNzXSwgdmFsdWVdOwotICB9Ci0gIE5TVUludGVnZXIgaW5pdGlhbENvdW50ID0gX2Nv
dW50OwotICBOU1VJbnRlZ2VyIG5ld0NvdW50ID0gaW5pdGlhbENvdW50ICsgMTsKLSAgaWYgKG5l
d0NvdW50ID4gX2NhcGFjaXR5KSB7Ci0gICAgW3NlbGYgaW50ZXJuYWxSZXNpemVUb0NhcGFjaXR5
OkNhcGFjaXR5RnJvbUNvdW50KG5ld0NvdW50KV07Ci0gIH0KLSAgX2NvdW50ID0gbmV3Q291bnQ7
Ci0gIGlmIChpbmRleCAhPSBpbml0aWFsQ291bnQpIHsKLSAgICBtZW1tb3ZlKCZfdmFsdWVzW2lu
ZGV4ICsgMV0sICZfdmFsdWVzW2luZGV4XSwgKGluaXRpYWxDb3VudCAtIGluZGV4KSAqIHNpemVv
ZihpbnQzMl90KSk7Ci0gIH0KLSAgX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTsKLSAgaWYgKF9hdXRv
Y3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkQXJyYXlNb2RpZmllZChfYXV0b2NyZWF0b3Is
IHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVwbGFjZVZhbHVlQXRJbmRleDooTlNVSW50ZWdl
cilpbmRleCB3aXRoVmFsdWU6KGludDMyX3QpdmFsdWUgewotICBpZiAoaW5kZXggPj0gX2NvdW50
KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUmFuZ2VFeGNlcHRpb24KLSAgICAgICAgICAg
ICAgICBmb3JtYXQ6QCJJbmRleCAoJWx1KSBiZXlvbmQgYm91bmRzICglbHUpIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5kZXgsICh1bnNpZ25lZCBsb25nKV9jb3Vu
dF07Ci0gIH0KLSAgaWYgKCFfdmFsaWRhdGlvbkZ1bmModmFsdWUpKSB7Ci0gICAgW05TRXhjZXB0
aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9y
bWF0OkAiJUA6IEF0dGVtcHQgdG8gc2V0IGFuIHVua25vd24gZW51bSB2YWx1ZSAoJWQpIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgW3NlbGYgY2xhc3NdLCB2YWx1ZV07Ci0gIH0KLSAgX3ZhbHVl
c1tpbmRleF0gPSB2YWx1ZTsKLX0KLS8vJVBERE0tRVhQQU5ELUVORCAoMiBleHBhbnNpb25zKQot
Ci0vLyVQRERNLURFRklORSBNVVRBVElPTl9IT09LX0VudW1WYWxpZGF0aW9uTGlzdCgpCi0vLyUg
IEdQQkVudW1WYWxpZGF0aW9uRnVuYyBmdW5jID0gX3ZhbGlkYXRpb25GdW5jOwotLy8lICBmb3Ig
KE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0vLyUgICAgaWYgKCFmdW5jKHZh
bHVlc1tpXSkpIHsKLS8vJSAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVu
dEV4Y2VwdGlvbgotLy8lICAgICAgICAgICAgICAgICAgZm9ybWF0OkAiJUA6IEF0dGVtcHQgdG8g
c2V0IGFuIHVua25vd24gZW51bSB2YWx1ZSAoJWQpIiwKLS8vJSAgICAgICAgICAgICAgICAgICAg
ICAgICBbc2VsZiBjbGFzc10sIHZhbHVlc1tpXV07Ci0vLyUgICAgfQotLy8lICB9Ci0vLyUKLS8v
JVBERE0tREVGSU5FIE1VVEFUSU9OX0hPT0tfRW51bVZhbGlkYXRpb25PbmUoKQotLy8lICBpZiAo
IV92YWxpZGF0aW9uRnVuYyh2YWx1ZSkpIHsKLS8vJSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJ
bnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLS8vJSAgICAgICAgICAgICAgICBmb3JtYXQ6QCIlQDog
QXR0ZW1wdCB0byBzZXQgYW4gdW5rbm93biBlbnVtIHZhbHVlICglZCkiLAotLy8lICAgICAgICAg
ICAgICAgICAgICAgICBbc2VsZiBjbGFzc10sIHZhbHVlXTsKLS8vJSAgfQotLy8lCi0KLUBlbmQK
LQotI3ByYWdtYSBtYXJrIC0gTlNBcnJheSBTdWJjbGFzcwotCi1AaW1wbGVtZW50YXRpb24gR1BC
QXV0b2NyZWF0ZWRBcnJheSB7Ci0gIE5TTXV0YWJsZUFycmF5ICpfYXJyYXk7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6
IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6
ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2FycmF5
IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLSNwcmFnbWEgbWFyayBSZXF1aXJl
ZCBOU0FycmF5IG92ZXJyaWRlcwotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIFtf
YXJyYXkgY291bnRdOwotfQotCi0tIChpZClvYmplY3RBdEluZGV4OihOU1VJbnRlZ2VyKWlkeCB7
Ci0gIHJldHVybiBbX2FycmF5IG9iamVjdEF0SW5kZXg6aWR4XTsKLX0KLQotI3ByYWdtYSBtYXJr
IFJlcXVpcmVkIE5TTXV0YWJsZUFycmF5IG92ZXJyaWRlcwotCi0vLyBPbmx5IG5lZWQgdG8gY2Fs
bCBHUEJBdXRvY3JlYXRlZEFycmF5TW9kaWZpZWQoKSB3aGVuIGFkZGluZyB0aGluZ3Mgc2luY2UK
LS8vIHdlIG9ubHkgYXV0b2NyZWF0ZSBlbXB0eSBhcnJheXMuCi0KLS0gKHZvaWQpaW5zZXJ0T2Jq
ZWN0OihpZClhbk9iamVjdCBhdEluZGV4OihOU1VJbnRlZ2VyKWlkeCB7Ci0gIGlmIChfYXJyYXkg
PT0gbmlsKSB7Ci0gICAgX2FycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0g
IH0KLSAgW19hcnJheSBpbnNlcnRPYmplY3Q6YW5PYmplY3QgYXRJbmRleDppZHhdOwotCi0gIGlm
IChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZEFycmF5TW9kaWZpZWQoX2F1dG9j
cmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZU9iamVjdDooaWQpYW5PYmpl
Y3QgewotICBbX2FycmF5IHJlbW92ZU9iamVjdDphbk9iamVjdF07Ci19Ci0KLS0gKHZvaWQpcmVt
b3ZlT2JqZWN0QXRJbmRleDooTlNVSW50ZWdlcilpZHggewotICBbX2FycmF5IHJlbW92ZU9iamVj
dEF0SW5kZXg6aWR4XTsKLX0KLQotLSAodm9pZClhZGRPYmplY3Q6KGlkKWFuT2JqZWN0IHsKLSAg
aWYgKF9hcnJheSA9PSBuaWwpIHsKLSAgICBfYXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKLSAgfQotICBbX2FycmF5IGFkZE9iamVjdDphbk9iamVjdF07Ci0KLSAgaWYgKF9h
dXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkQXJyYXlNb2RpZmllZChfYXV0b2NyZWF0
b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlTGFzdE9iamVjdCB7Ci0gIFtfYXJy
YXkgcmVtb3ZlTGFzdE9iamVjdF07Ci19Ci0KLS0gKHZvaWQpcmVwbGFjZU9iamVjdEF0SW5kZXg6
KE5TVUludGVnZXIpaWR4IHdpdGhPYmplY3Q6KGlkKWFuT2JqZWN0IHsKLSAgW19hcnJheSByZXBs
YWNlT2JqZWN0QXRJbmRleDppZHggd2l0aE9iamVjdDphbk9iamVjdF07Ci19Ci0KLSNwcmFnbWEg
bWFyayBFeHRyYSB0aGluZ3MgaG9va2VkCi0KLS0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICop
em9uZSB7Ci0gIGlmIChfYXJyYXkgPT0gbmlsKSB7Ci0gICAgX2FycmF5ID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07Ci0gIH0KLSAgcmV0dXJuIFtfYXJyYXkgY29weVdpdGhab25lOnpv
bmVdOwotfQotCi0tIChpZCltdXRhYmxlQ29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAg
aWYgKF9hcnJheSA9PSBuaWwpIHsKLSAgICBfYXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKLSAgfQotICByZXR1cm4gW19hcnJheSBtdXRhYmxlQ29weVdpdGhab25lOnpvbmVd
OwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50QnlFbnVtZXJhdGluZ1dpdGhTdGF0ZTooTlNGYXN0
RW51bWVyYXRpb25TdGF0ZSAqKXN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0czooaWQgX191bnNhZmVfdW5yZXRhaW5lZCBbXSlidWZmZXIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWxlbiB7Ci0gIHJldHVy
biBbX2FycmF5IGNvdW50QnlFbnVtZXJhdGluZ1dpdGhTdGF0ZTpzdGF0ZSBvYmplY3RzOmJ1ZmZl
ciBjb3VudDpsZW5dOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZU9iamVjdHNVc2luZ0Jsb2NrOih2
b2lkICheKShpZCBvYmosIE5TVUludGVnZXIgaWR4LCBCT09MICpzdG9wKSlibG9jayB7Ci0gIFtf
YXJyYXkgZW51bWVyYXRlT2JqZWN0c1VzaW5nQmxvY2s6YmxvY2tdOwotfQotCi0tICh2b2lkKWVu
dW1lcmF0ZU9iamVjdHNXaXRoT3B0aW9uczooTlNFbnVtZXJhdGlvbk9wdGlvbnMpb3B0cwotICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzaW5nQmxvY2s6KHZvaWQgKF4pKGlkIG9iaiwgTlNVSW50
ZWdlciBpZHgsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgW19hcnJheSBlbnVtZXJhdGVPYmplY3Rz
V2l0aE9wdGlvbnM6b3B0cyB1c2luZ0Jsb2NrOmJsb2NrXTsKLX0KLQotQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9vYmplY3RpdmVjL0dQQkFycmF5X1BhY2thZ2VQcml2YXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCQXJy
YXlfUGFja2FnZVByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVhNDUz
ODEzMTI5NmQwNzI0YzBlMDI1ZTE2ODBiNjQ3YzMzMjcyYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCQXJyYXlfUGFja2FnZVByaXZh
dGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2ltcG9ydCAiR1BCQXJyYXkuaCIKLQotQGNsYXNzIEdQQk1lc3Nh
Z2U7Ci0KLS8vJVBERE0tREVGSU5FIERFQ0xBUkVfQVJSQVlfRVhUUkFTKCkKLS8vJUFSUkFZX0lO
VEVSRkFDRV9FWFRSQVMoSW50MzIsIGludDMyX3QpCi0vLyVBUlJBWV9JTlRFUkZBQ0VfRVhUUkFT
KFVJbnQzMiwgdWludDMyX3QpCi0vLyVBUlJBWV9JTlRFUkZBQ0VfRVhUUkFTKEludDY0LCBpbnQ2
NF90KQotLy8lQVJSQVlfSU5URVJGQUNFX0VYVFJBUyhVSW50NjQsIHVpbnQ2NF90KQotLy8lQVJS
QVlfSU5URVJGQUNFX0VYVFJBUyhGbG9hdCwgZmxvYXQpCi0vLyVBUlJBWV9JTlRFUkZBQ0VfRVhU
UkFTKERvdWJsZSwgZG91YmxlKQotLy8lQVJSQVlfSU5URVJGQUNFX0VYVFJBUyhCb29sLCBCT09M
KQotLy8lQVJSQVlfSU5URVJGQUNFX0VYVFJBUyhFbnVtLCBpbnQzMl90KQotCi0vLyVQRERNLURF
RklORSBBUlJBWV9JTlRFUkZBQ0VfRVhUUkFTKE5BTUUsIFRZUEUpCi0vLyUjcHJhZ21hIG1hcmsg
LSBOQU1FCi0vLyUKLS8vJUBpbnRlcmZhY2UgR1BCIyNOQU1FIyNBcnJheSAoKSB7Ci0vLyUgQHBh
Y2thZ2UKLS8vJSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRv
cjsKLS8vJX0KLS8vJUBlbmQKLS8vJQotCi0vLyVQRERNLUVYUEFORCBERUNMQVJFX0FSUkFZX0VY
VFJBUygpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBp
dCBkaXJlY3RseS4KLQotI3ByYWdtYSBtYXJrIC0gSW50MzIKLQotQGludGVyZmFjZSBHUEJJbnQz
MkFycmF5ICgpIHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZFX1VOUkVUQUlORUQgR1BCTWVzc2Fn
ZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50MzIKLQotQGlu
dGVyZmFjZSBHUEJVSW50MzJBcnJheSAoKSB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJF
VEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotI3ByYWdtYSBtYXJr
IC0gSW50NjQKLQotQGludGVyZmFjZSBHUEJJbnQ2NEFycmF5ICgpIHsKLSBAcGFja2FnZQotICBH
UEJfVU5TQUZFX1VOUkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAot
Ci0jcHJhZ21hIG1hcmsgLSBVSW50NjQKLQotQGludGVyZmFjZSBHUEJVSW50NjRBcnJheSAoKSB7
Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3Jl
YXRvcjsKLX0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gRmxvYXQKLQotQGludGVyZmFjZSBHUEJG
bG9hdEFycmF5ICgpIHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZFX1VOUkVUQUlORUQgR1BCTWVz
c2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBEb3VibGUKLQot
QGludGVyZmFjZSBHUEJEb3VibGVBcnJheSAoKSB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9V
TlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotI3ByYWdtYSBt
YXJrIC0gQm9vbAotCi1AaW50ZXJmYWNlIEdQQkJvb2xBcnJheSAoKSB7Ci0gQHBhY2thZ2UKLSAg
R1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQK
LQotI3ByYWdtYSBtYXJrIC0gRW51bQotCi1AaW50ZXJmYWNlIEdQQkVudW1BcnJheSAoKSB7Ci0g
QHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRv
cjsKLX0KLUBlbmQKLQotLy8lUERETS1FWFBBTkQtRU5EIERFQ0xBUkVfQVJSQVlfRVhUUkFTKCkK
LQotI3ByYWdtYSBtYXJrIC0gTlNBcnJheSBTdWJjbGFzcwotCi1AaW50ZXJmYWNlIEdQQkF1dG9j
cmVhdGVkQXJyYXkgOiBOU011dGFibGVBcnJheSB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9V
TlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
b2JqZWN0aXZlYy9HUEJCb290c3RyYXAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJCb290c3RyYXAuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlZmE3NzA2Y2VmODhkYWFmNjA5OWNiMGE3NDE4
MTI0ZjE1YzJkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L29iamVjdGl2ZWMvR1BCQm9vdHN0cmFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVGhlIE9iamVjdGl2ZSBD
IHJ1bnRpbWUgaGFzIGNvbXBsZXRlIGVub3VnaCBpbmZvIHRoYXQgbW9zdCBwcm90b3MgZG9u4oCZ
dCBlbmQKLS8vIHVwIHVzaW5nIHRoaXMsIHNvIGxlYXZpbmcgaXQgb24gaXMgbm8gY29zdCBvciB2
ZXJ5IGxpdHRsZSBjb3N0LiAgSWYgeW91Ci0vLyBoYXBwZW4gdG8gc2VlIGl0IGNhdXNpbmcgYmxv
YXQsIHRoaXMgaXMgdGhlIHdheSB0byBkaXNhYmxlIGl0LiBJZiB5b3UgZG8KLS8vIG5lZWQgdG8g
ZGlzYWJsZSBpdCwgdHJ5IG9ubHkgZGlzYWJsaW5nIGl0IGZvciBSZWxlYXNlIGJ1aWxkcyBhcyBo
YXZpbmcKLS8vIGZ1bGwgVGV4dEZvcm1hdCBjYW4gYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCi0j
aWZuZGVmIEdQQk9CSkNfU0tJUF9NRVNTQUdFX1RFWFRGT1JNQVRfRVhUUkFTCi0jZGVmaW5lIEdQ
Qk9CSkNfU0tJUF9NRVNTQUdFX1RFWFRGT1JNQVRfRVhUUkFTIDAKLSNlbmRpZgotCi0vLyBVc2Vk
IGluIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBnaXZlIHNpemVzIHRvIGVudW1zLiBpbnQzMl90IHdh
cyBjaG9zZW4gYmFzZWQKLS8vIG9uIHRoZSBmYWN0IHRoYXQgUHJvdG9jb2wgQnVmZmVycyBlbnVt
cyBhcmUgbGltaXRlZCB0byB0aGlzIHJhbmdlLgotI2lmICFfX2hhc19mZWF0dXJlKG9iamNfZml4
ZWRfZW51bSkKLSAjZXJyb3IgQWxsIHN1cHBvcnRlZCBYY29kZSB2ZXJzaW9ucyBzaG91bGQgc3Vw
cG9ydCBvYmpjX2ZpeGVkX2VudW0uCi0jZW5kaWYKLS8vIElmIHRoZSBoZWFkZXJzIGFyZSBpbXBv
cnRlZCBpbnRvIE9iamVjdGl2ZS1DKyssIHdlIGNhbiBydW4gaW50byBhbiBpc3N1ZQotLy8gd2hl
cmUgdGhlIGRlZmludGlvbiBvZiBOU19FTlVNIChyZWFsbHkgQ0ZfRU5VTSkgY2hhbmdlcyBiYXNl
ZCBvbiB0aGUgQysrCi0vLyBzdGFuZGFyZCB0aGF0IGlzIGluIGVmZmVjdC4gIElmIGl0IGlzbid0
IEMrKzExIG9yIGhpZ2hlciwgdGhlIGRlZmluaXRpb24KLS8vIGRvZXNuJ3QgYWxsb3cgdXMgdG8g
Zm9yd2FyZCBkZWNsYXJlLiBXZSB3b3JrIGFyb3VuZCB0aGlzIG9uZSBjYXNlIGJ5Ci0vLyBwcm92
aWRpbmcgYSBsb2NhbCBkZWZpbml0aW9uLiBUaGUgZGVmYXVsdCBjYXNlIGhhcyB0byB1c2UgTlNf
RU5VTSBmb3IgdGhlCi0vLyBtYWdpYyB0aGF0IGlzIFN3aWZ0IGJyaWRnaW5nIG9mIGVudW1zLgot
I2lmIChfX2NwbHVzcGx1cyAmJiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wpCi0gI2RlZmluZSBHUEJf
RU5VTShYKSBlbnVtIFggOiBpbnQzMl90IFg7IGVudW0gWCA6IGludDMyX3QKLSNlbHNlCi0gI2Rl
ZmluZSBHUEJfRU5VTShYKSBOU19FTlVNKGludDMyX3QsIFgpCi0jZW5kaWYKLS8vIEdQQl9FTlVN
X0ZXRF9ERUNMQVJFIGlzIHVzZWQgZm9yIGZvcndhcmQgZGVjbGFyaW5nIGVudW1zLCBleDoKLS8v
ICAgR1BCX0VOVU1fRldEX0RFQ0xBUkUoRm9vX0VudW0pCi0vLyAgIEBwcm9wZXJ0eSAobm9uYXRv
bWljKSBGb29fRW51bSB2YWx1ZTsKLSNkZWZpbmUgR1BCX0VOVU1fRldEX0RFQ0xBUkUoWCkgZW51
bSBYIDogaW50MzJfdAotCi0vLyBCYXNlZCB1cG9uIENGX0lOTElORS4gRm9yY2VzIGlubGluaW5n
IGluIHJlbGVhc2UuCi0jaWYgIWRlZmluZWQoREVCVUcpCi0jZGVmaW5lIEdQQl9JTkxJTkUgc3Rh
dGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi0jZWxzZQotI2Rl
ZmluZSBHUEJfSU5MSU5FIHN0YXRpYyBfX2lubGluZV9fCi0jZW5kaWYKLQotLy8gRm9yIHVzZSBp
biBwdWJsaWMgaGVhZGVycyB0aGF0IG1pZ2h0IG5lZWQgdG8gZGVhbCB3aXRoIEFSQy4KLSNpZm5k
ZWYgR1BCX1VOU0FGRV9VTlJFVEFJTkVECi0jaWYgX19oYXNfZmVhdHVyZShvYmpjX2FyYykKLSNk
ZWZpbmUgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIF9fdW5zYWZlX3VucmV0YWluZWQKLSNlbHNlCi0j
ZGVmaW5lIEdQQl9VTlNBRkVfVU5SRVRBSU5FRAotI2VuZGlmCi0jZW5kaWYKLQotLy8gSWYgcHJv
cGVydHkgbmFtZSBzdGFydHMgd2l0aCBpbml0IHdlIG5lZWQgdG8gYW5ub3RhdGUgaXQgdG8gZ2V0
IHBhc3QgQVJDLgotLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODcyMzIy
Ni9ob3ctZG8taS1hbm5vdGF0ZS1hbi1vYmplY3RpdmUtYy1wcm9wZXJ0eS13aXRoLWFuLW9iamMt
bWV0aG9kLWZhbWlseS8xODcyMzIyNyMxODcyMzIyNwotI2RlZmluZSBHUEJfTUVUSE9EX0ZBTUlM
WV9OT05FIF9fYXR0cmlidXRlX18oKG9iamNfbWV0aG9kX2ZhbWlseShub25lKSkpCi0KLS8vIFRo
ZSBwcm90b2MtZ2VuLW9iamMgdmVyc2lvbiB3aGljaCB3b3JrcyB3aXRoIHRoZSBjdXJyZW50IHZl
cnNpb24gb2YgdGhlCi0vLyBnZW5lcmF0ZWQgT2JqZWN0aXZlIEMgc291cmNlcy4gIEluIGdlbmVy
YWwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlCi0vLyBydW50aW1lIGludGVyZmFjZXMgKG9y
IHRoaXMgdmVyc2lvbikgYXMgaXQgbWVhbnMgZXZlcnl0aGluZyBoYXMgdG8gYmUKLS8vIHJlZ2Vu
ZXJhdGVkLgotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfT0JKQ19HRU5fVkVSU0lPTiAzMDAwMQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkNvZGVkSW5wdXRTdHJlYW0uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9H
UEJDb2RlZElucHV0U3RyZWFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NGI2
NGUzZjNkNjU1YjcwYTc3OGRiNmQ2MGYwOGJmMmEyNGMwZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkNvZGVkSW5wdXRTdHJlYW0u
aAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFz
cyBHUEJNZXNzYWdlOwotQGNsYXNzIEdQQkV4dGVuc2lvblJlZ2lzdHJ5OwotCi1OU19BU1NVTUVf
Tk9OTlVMTF9CRUdJTgotCi0vLy8gUmVhZHMgYW5kIGRlY29kZXMgcHJvdG9jb2wgbWVzc2FnZSBm
aWVsZHMuCi0vLy8KLS8vLyBUaGUgY29tbW9uIHVzZXMgb2YgcHJvdG9jb2wgYnVmZmVycyBzaG91
bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBjbGFzcy4KLS8vLyBAYyBHUEJNZXNzYWdlJ3MgcHJvdmlk
ZSBhIEBjICtwYXJzZUZyb21EYXRhOmVycm9yOiBhbmQgQGMKLS8vLyArcGFyc2VGcm9tRGF0YTpl
eHRlbnNpb25SZWdpc3RyeTplcnJvcjogbWV0aG9kIHRoYXQgd2lsbCBkZWNvZGUgYQotLy8vIG1l
c3NhZ2UgZm9yIHlvdS4KLS8vLwotLy8vIEBub3RlIFN1YmNsYXNzaW5nIG9mIEdQQkNvZGVkSW5w
dXRTdHJlYW0gaXMgTk9UIHN1cHBvcnRlZC4KLUBpbnRlcmZhY2UgR1BCQ29kZWRJbnB1dFN0cmVh
bSA6IE5TT2JqZWN0Ci0KLS8vLyBDcmVhdGVzIGEgbmV3IHN0cmVhbSB3cmFwcGluZyBzb21lIGRh
dGEuCi0rIChpbnN0YW5jZXR5cGUpc3RyZWFtV2l0aERhdGE6KE5TRGF0YSAqKWRhdGE7Ci0KLS8v
LyBJbml0aWFsaXplcyBhIHN0cmVhbSB3cmFwcGluZyBzb21lIGRhdGEuCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhEYXRhOihOU0RhdGEgKilkYXRhOwotCi0vLy8gQXR0ZW1wdCB0byByZWFkIGEg
ZmllbGQgdGFnLCByZXR1cm5pbmcgemVybyBpZiB3ZSBoYXZlIHJlYWNoZWQgRU9GLgotLy8vIFBy
b3RvY29sIG1lc3NhZ2UgcGFyc2VycyB1c2UgdGhpcyB0byByZWFkIHRhZ3MsIHNpbmNlIGEgcHJv
dG9jb2wgbWVzc2FnZQotLy8vIG1heSBsZWdhbGx5IGVuZCB3aGVyZXZlciBhIHRhZyBvY2N1cnMs
IGFuZCB6ZXJvIGlzIG5vdCBhIHZhbGlkIHRhZyBudW1iZXIuCi0tIChpbnQzMl90KXJlYWRUYWc7
Ci0KLS8vLyBSZWFkIGFuZCByZXR1cm4gYSBkb3VibGUuCi0tIChkb3VibGUpcmVhZERvdWJsZTsK
LS8vLyBSZWFkIGFuZCByZXR1cm4gYSBmbG9hdC4KLS0gKGZsb2F0KXJlYWRGbG9hdDsKLS8vLyBS
ZWFkIGFuZCByZXR1cm4gYSB1aW50NjQuCi0tICh1aW50NjRfdClyZWFkVUludDY0OwotLy8vIFJl
YWQgYW5kIHJldHVybiBhIHVpbnQzMi4KLS0gKHVpbnQzMl90KXJlYWRVSW50MzI7Ci0vLy8gUmVh
ZCBhbmQgcmV0dXJuIGFuIGludDY0LgotLSAoaW50NjRfdClyZWFkSW50NjQ7Ci0vLy8gUmVhZCBh
bmQgcmV0dXJuIGFuIGludDMyLgotLSAoaW50MzJfdClyZWFkSW50MzI7Ci0vLy8gUmVhZCBhbmQg
cmV0dXJuIGEgZml4ZWQ2NC4KLS0gKHVpbnQ2NF90KXJlYWRGaXhlZDY0OwotLy8vIFJlYWQgYW5k
IHJldHVybiBhIGZpeGVkMzIuCi0tICh1aW50MzJfdClyZWFkRml4ZWQzMjsKLS8vLyBSZWFkIGFu
ZCByZXR1cm4gYW4gZW51bSAoaW50KS4KLS0gKGludDMyX3QpcmVhZEVudW07Ci0vLy8gUmVhZCBh
bmQgcmV0dXJuIGEgc2ZpeGVkMzIuCi0tIChpbnQzMl90KXJlYWRTRml4ZWQzMjsKLS8vLyBSZWFk
IGFuZCByZXR1cm4gYSBzZml4ZWQ2NC4KLS0gKGludDY0X3QpcmVhZFNGaXhlZDY0OwotLy8vIFJl
YWQgYW5kIHJldHVybiBhIHNpbnQzMi4KLS0gKGludDMyX3QpcmVhZFNJbnQzMjsKLS8vLyBSZWFk
IGFuZCByZXR1cm4gYSBzaW50NjQuCi0tIChpbnQ2NF90KXJlYWRTSW50NjQ7Ci0vLy8gUmVhZCBh
bmQgcmV0dXJuIGEgYm9vbGVhbi4KLS0gKEJPT0wpcmVhZEJvb2w7Ci0vLy8gUmVhZCBhbmQgcmV0
dXJuIGEgc3RyaW5nLgotLSAoTlNTdHJpbmcgKilyZWFkU3RyaW5nOwotLy8vIFJlYWQgYW5kIHJl
dHVybiBsZW5ndGggZGVsaW1pdGVkIGRhdGEuCi0tIChOU0RhdGEgKilyZWFkQnl0ZXM7Ci0KLS8v
LyBSZWFkIGFuIGVtYmVkZGVkIG1lc3NhZ2UgZmllbGQgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLgot
Ly8vCi0vLy8gQHBhcmFtIG1lc3NhZ2UgICAgICAgICAgIFRoZSBtZXNzYWdlIHRvIHNldCBmaWVs
ZHMgb24gYXMgdGhleSBhcmUgcmVhZC4KLS8vLyBAcGFyYW0gZXh0ZW5zaW9uUmVnaXN0cnkgQW4g
b3B0aW9uYWwgZXh0ZW5zaW9uIHJlZ2lzdHJ5IHRvIHVzZSB0byBsb29rdXAKLS8vLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucyBmb3IgQG1lc3NhZ2UuCi0tICh2b2lkKXJlYWRN
ZXNzYWdlOihHUEJNZXNzYWdlICopbWVzc2FnZQotICBleHRlbnNpb25SZWdpc3RyeToobnVsbGFi
bGUgR1BCRXh0ZW5zaW9uUmVnaXN0cnkgKilleHRlbnNpb25SZWdpc3RyeTsKLQotLy8vIFJlYWRz
IGFuZCBkaXNjYXJkcyBhIHNpbmdsZSBmaWVsZCwgZ2l2ZW4gaXRzIHRhZyB2YWx1ZS4KLS8vLwot
Ly8vIEBwYXJhbSB0YWcgVGhlIHRhZyBudW1iZXIgb2YgdGhlIGZpZWxkIHRvIHNraXAuCi0vLy8K
LS8vLyBAcmV0dXJuIE5PIGlmIHRoZSB0YWcgaXMgYW4gZW5kZ3JvdXAgdGFnIChpbiB3aGljaCBj
YXNlIG5vdGhpbmcgaXMgc2tpcHBlZCksCi0vLy8gICAgICAgICBZRVMgaW4gYWxsIG90aGVyIGNh
c2VzLgotLSAoQk9PTClza2lwRmllbGQ6KGludDMyX3QpdGFnOwotCi0vLy8gUmVhZHMgYW5kIGRp
c2NhcmRzIGFuIGVudGlyZSBtZXNzYWdlLiAgVGhpcyB3aWxsIHJlYWQgZWl0aGVyIHVudGlsIEVP
RgotLy8vIG9yIHVudGlsIGFuIGVuZGdyb3VwIHRhZywgd2hpY2hldmVyIGNvbWVzIGZpcnN0Lgot
LSAodm9pZClza2lwTWVzc2FnZTsKLQotLy8vIENoZWNrIHRvIHNlZSBpZiB0aGUgbG9naWNhbCBl
bmQgb2YgdGhlIHN0cmVhbSBoYXMgYmVlbiByZWFjaGVkLgotLy8vCi0vLy8gVGhpcyBjYW4gcmV0
dXJuIE5PIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBkYXRhLCBidXQgdGhlIGN1cnJlbnQgcGFyc2lu
ZwotLy8vIGV4cGVjdGVkIG1vcmUgZGF0YS4KLS0gKEJPT0wpaXNBdEVuZDsKLQotLy8vIFRoZSBv
ZmZzZXQgaW50byB0aGUgc3RyZWFtLgotLSAoc2l6ZV90KXBvc2l0aW9uOwotCi0vLy8gVmVyaWZp
ZXMgdGhhdCB0aGUgbGFzdCBjYWxsIHRvIEBjIC1yZWFkVGFnIHJldHVybmVkIHRoZSBnaXZlbiB0
YWcgdmFsdWUuCi0vLy8gVGhpcyBpcyB1c2VkIHRvIHZlcmlmeSB0aGF0IGEgbmVzdGVkIGdyb3Vw
IGVuZGVkIHdpdGggdGhlIGNvcnJlY3QgZW5kIHRhZy4KLS8vLyBUaHJvd3MgQGMgTlNQYXJzZUVy
cm9yRXhjZXB0aW9uIGlmIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSBsYXN0IHRhZy4KLS8vLwot
Ly8vIEBwYXJhbSBleHBlY3RlZCBUaGUgdGFnIHRoYXQgd2FzIGV4cGVjdGVkLgotLSAodm9pZClj
aGVja0xhc3RUYWdXYXM6KGludDMyX3QpZXhwZWN0ZWQ7Ci0KLUBlbmQKLQotTlNfQVNTVU1FX05P
Tk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCQ29kZWRJbnB1dFN0cmVhbS5tIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9v
YmplY3RpdmVjL0dQQkNvZGVkSW5wdXRTdHJlYW0ubQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzE5ZWMxNWJhN2M4MWRiYjc2MjdiNTAzMzllYTYwMzYxOWRiODUzZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCQ29kZWRJ
bnB1dFN0cmVhbS5tCisrKyAvZGV2L251bGwKQEAgLTEsNDk5ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW1wb3J0ICJHUEJDb2RlZElucHV0U3RyZWFtX1Bh
Y2thZ2VQcml2YXRlLmgiCi0KLSNpbXBvcnQgIkdQQkRpY3Rpb25hcnlfUGFja2FnZVByaXZhdGUu
aCIKLSNpbXBvcnQgIkdQQk1lc3NhZ2VfUGFja2FnZVByaXZhdGUuaCIKLSNpbXBvcnQgIkdQQlVu
a25vd25GaWVsZFNldF9QYWNrYWdlUHJpdmF0ZS5oIgotI2ltcG9ydCAiR1BCVXRpbGl0aWVzX1Bh
Y2thZ2VQcml2YXRlLmgiCi0jaW1wb3J0ICJHUEJXaXJlRm9ybWF0LmgiCi0KLXN0YXRpYyBjb25z
dCBOU1VJbnRlZ2VyIGtEZWZhdWx0UmVjdXJzaW9uTGltaXQgPSA2NDsKLQotc3RhdGljIHZvaWQg
Q2hlY2tTaXplKEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUsIHNpemVfdCBzaXplKSB7
Ci0gIHNpemVfdCBuZXdTaXplID0gc3RhdGUtPmJ1ZmZlclBvcyArIHNpemU7Ci0gIGlmIChuZXdT
aXplID4gc3RhdGUtPmJ1ZmZlclNpemUpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNQYXJz
ZUVycm9yRXhjZXB0aW9uIGZvcm1hdDpAIiJdOwotICB9Ci0gIGlmIChuZXdTaXplID4gc3RhdGUt
PmN1cnJlbnRMaW1pdCkgewotICAgIC8vIEZhc3QgZm9yd2FyZCB0byBlbmQgb2YgY3VycmVudExp
bWl0OwotICAgIHN0YXRlLT5idWZmZXJQb3MgPSBzdGF0ZS0+Y3VycmVudExpbWl0OwotICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU1BhcnNlRXJyb3JFeGNlcHRpb24gZm9ybWF0OkAiIl07Ci0gIH0K
LX0KLQotc3RhdGljIGludDhfdCBSZWFkUmF3Qnl0ZShHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUg
KnN0YXRlKSB7Ci0gIENoZWNrU2l6ZShzdGF0ZSwgc2l6ZW9mKGludDhfdCkpOwotICByZXR1cm4g
KChpbnQ4X3QgKilzdGF0ZS0+Ynl0ZXMpW3N0YXRlLT5idWZmZXJQb3MrK107Ci19Ci0KLXN0YXRp
YyBpbnQzMl90IFJlYWRSYXdMaXR0bGVFbmRpYW4zMihHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUg
KnN0YXRlKSB7Ci0gIENoZWNrU2l6ZShzdGF0ZSwgc2l6ZW9mKGludDMyX3QpKTsKLSAgaW50MzJf
dCB2YWx1ZSA9IE9TUmVhZExpdHRsZUludDMyKHN0YXRlLT5ieXRlcywgc3RhdGUtPmJ1ZmZlclBv
cyk7Ci0gIHN0YXRlLT5idWZmZXJQb3MgKz0gc2l6ZW9mKGludDMyX3QpOwotICByZXR1cm4gdmFs
dWU7Ci19Ci0KLXN0YXRpYyBpbnQ2NF90IFJlYWRSYXdMaXR0bGVFbmRpYW42NChHUEJDb2RlZElu
cHV0U3RyZWFtU3RhdGUgKnN0YXRlKSB7Ci0gIENoZWNrU2l6ZShzdGF0ZSwgc2l6ZW9mKGludDY0
X3QpKTsKLSAgaW50NjRfdCB2YWx1ZSA9IE9TUmVhZExpdHRsZUludDY0KHN0YXRlLT5ieXRlcywg
c3RhdGUtPmJ1ZmZlclBvcyk7Ci0gIHN0YXRlLT5idWZmZXJQb3MgKz0gc2l6ZW9mKGludDY0X3Qp
OwotICByZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IFJlYWRSYXdWYXJpbnQzMihH
UEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlKSB7Ci0gIGludDhfdCB0bXAgPSBSZWFkUmF3
Qnl0ZShzdGF0ZSk7Ci0gIGlmICh0bXAgPj0gMCkgewotICAgIHJldHVybiB0bXA7Ci0gIH0KLSAg
aW50MzJfdCByZXN1bHQgPSB0bXAgJiAweDdmOwotICBpZiAoKHRtcCA9IFJlYWRSYXdCeXRlKHN0
YXRlKSkgPj0gMCkgewotICAgIHJlc3VsdCB8PSB0bXAgPDwgNzsKLSAgfSBlbHNlIHsKLSAgICBy
ZXN1bHQgfD0gKHRtcCAmIDB4N2YpIDw8IDc7Ci0gICAgaWYgKCh0bXAgPSBSZWFkUmF3Qnl0ZShz
dGF0ZSkpID49IDApIHsKLSAgICAgIHJlc3VsdCB8PSB0bXAgPDwgMTQ7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHJlc3VsdCB8PSAodG1wICYgMHg3ZikgPDwgMTQ7Ci0gICAgICBpZiAoKHRtcCA9IFJl
YWRSYXdCeXRlKHN0YXRlKSkgPj0gMCkgewotICAgICAgICByZXN1bHQgfD0gdG1wIDw8IDIxOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0IHw9ICh0bXAgJiAweDdmKSA8PCAyMTsKLSAg
ICAgICAgcmVzdWx0IHw9ICh0bXAgPSBSZWFkUmF3Qnl0ZShzdGF0ZSkpIDw8IDI4OwotICAgICAg
ICBpZiAodG1wIDwgMCkgewotICAgICAgICAgIC8vIERpc2NhcmQgdXBwZXIgMzIgYml0cy4KLSAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgaWYgKFJl
YWRSYXdCeXRlKHN0YXRlKSA+PSAwKSB7Ci0gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpO
U1BhcnNlRXJyb3JFeGNlcHRpb24KLSAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6QCJVbmFi
bGUgdG8gcmVhZCB2YXJpbnQzMiJdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0g
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQ2NF90IFJlYWRSYXdWYXJpbnQ2NChHUEJD
b2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlKSB7Ci0gIGludDMyX3Qgc2hpZnQgPSAwOwotICBp
bnQ2NF90IHJlc3VsdCA9IDA7Ci0gIHdoaWxlIChzaGlmdCA8IDY0KSB7Ci0gICAgaW50OF90IGIg
PSBSZWFkUmF3Qnl0ZShzdGF0ZSk7Ci0gICAgcmVzdWx0IHw9IChpbnQ2NF90KShiICYgMHg3Rikg
PDwgc2hpZnQ7Ci0gICAgaWYgKChiICYgMHg4MCkgPT0gMCkgewotICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgc2hpZnQgKz0gNzsKLSAgfQotICBbTlNFeGNlcHRpb24gcmFpc2U6TlNQ
YXJzZUVycm9yRXhjZXB0aW9uIGZvcm1hdDpAIlVuYWJsZSB0byByZWFkIHZhcmludDY0Il07Ci0g
IHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBTa2lwUmF3RGF0YShHUEJDb2RlZElucHV0U3Ry
ZWFtU3RhdGUgKnN0YXRlLCBzaXplX3Qgc2l6ZSkgewotICBDaGVja1NpemUoc3RhdGUsIHNpemUp
OwotICBzdGF0ZS0+YnVmZmVyUG9zICs9IHNpemU7Ci19Ci0KLWRvdWJsZSBHUEJDb2RlZElucHV0
U3RyZWFtUmVhZERvdWJsZShHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlKSB7Ci0gIGlu
dDY0X3QgdmFsdWUgPSBSZWFkUmF3TGl0dGxlRW5kaWFuNjQoc3RhdGUpOwotICByZXR1cm4gR1BC
Q29udmVydEludDY0VG9Eb3VibGUodmFsdWUpOwotfQotCi1mbG9hdCBHUEJDb2RlZElucHV0U3Ry
ZWFtUmVhZEZsb2F0KEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpIHsKLSAgaW50MzJf
dCB2YWx1ZSA9IFJlYWRSYXdMaXR0bGVFbmRpYW4zMihzdGF0ZSk7Ci0gIHJldHVybiBHUEJDb252
ZXJ0SW50MzJUb0Zsb2F0KHZhbHVlKTsKLX0KLQotdWludDY0X3QgR1BCQ29kZWRJbnB1dFN0cmVh
bVJlYWRVSW50NjQoR1BCQ29kZWRJbnB1dFN0cmVhbVN0YXRlICpzdGF0ZSkgewotICB1aW50NjRf
dCB2YWx1ZSA9IFJlYWRSYXdWYXJpbnQ2NChzdGF0ZSk7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQot
dWludDMyX3QgR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRVSW50MzIoR1BCQ29kZWRJbnB1dFN0cmVh
bVN0YXRlICpzdGF0ZSkgewotICB1aW50MzJfdCB2YWx1ZSA9IFJlYWRSYXdWYXJpbnQzMihzdGF0
ZSk7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotaW50NjRfdCBHUEJDb2RlZElucHV0U3RyZWFtUmVh
ZEludDY0KEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpIHsKLSAgaW50NjRfdCB2YWx1
ZSA9IFJlYWRSYXdWYXJpbnQ2NChzdGF0ZSk7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotaW50MzJf
dCBHUEJDb2RlZElucHV0U3RyZWFtUmVhZEludDMyKEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAq
c3RhdGUpIHsKLSAgaW50MzJfdCB2YWx1ZSA9IFJlYWRSYXdWYXJpbnQzMihzdGF0ZSk7Ci0gIHJl
dHVybiB2YWx1ZTsKLX0KLQotdWludDY0X3QgR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRGaXhlZDY0
KEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpIHsKLSAgdWludDY0X3QgdmFsdWUgPSBS
ZWFkUmF3TGl0dGxlRW5kaWFuNjQoc3RhdGUpOwotICByZXR1cm4gdmFsdWU7Ci19Ci0KLXVpbnQz
Ml90IEdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkRml4ZWQzMihHUEJDb2RlZElucHV0U3RyZWFtU3Rh
dGUgKnN0YXRlKSB7Ci0gIHVpbnQzMl90IHZhbHVlID0gUmVhZFJhd0xpdHRsZUVuZGlhbjMyKHN0
YXRlKTsKLSAgcmV0dXJuIHZhbHVlOwotfQotCi1pbnQzMl90IEdQQkNvZGVkSW5wdXRTdHJlYW1S
ZWFkRW51bShHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlKSB7Ci0gIGludDMyX3QgdmFs
dWUgPSBSZWFkUmF3VmFyaW50MzIoc3RhdGUpOwotICByZXR1cm4gdmFsdWU7Ci19Ci0KLWludDMy
X3QgR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRTRml4ZWQzMihHUEJDb2RlZElucHV0U3RyZWFtU3Rh
dGUgKnN0YXRlKSB7Ci0gIGludDMyX3QgdmFsdWUgPSBSZWFkUmF3TGl0dGxlRW5kaWFuMzIoc3Rh
dGUpOwotICByZXR1cm4gdmFsdWU7Ci19Ci0KLWludDY0X3QgR1BCQ29kZWRJbnB1dFN0cmVhbVJl
YWRTRml4ZWQ2NChHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlKSB7Ci0gIGludDY0X3Qg
dmFsdWUgPSBSZWFkUmF3TGl0dGxlRW5kaWFuNjQoc3RhdGUpOwotICByZXR1cm4gdmFsdWU7Ci19
Ci0KLWludDMyX3QgR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRTSW50MzIoR1BCQ29kZWRJbnB1dFN0
cmVhbVN0YXRlICpzdGF0ZSkgewotICBpbnQzMl90IHZhbHVlID0gR1BCRGVjb2RlWmlnWmFnMzIo
UmVhZFJhd1ZhcmludDMyKHN0YXRlKSk7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotaW50NjRfdCBH
UEJDb2RlZElucHV0U3RyZWFtUmVhZFNJbnQ2NChHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0
YXRlKSB7Ci0gIGludDY0X3QgdmFsdWUgPSBHUEJEZWNvZGVaaWdaYWc2NChSZWFkUmF3VmFyaW50
NjQoc3RhdGUpKTsKLSAgcmV0dXJuIHZhbHVlOwotfQotCi1CT09MIEdQQkNvZGVkSW5wdXRTdHJl
YW1SZWFkQm9vbChHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlKSB7Ci0gIHJldHVybiBS
ZWFkUmF3VmFyaW50MzIoc3RhdGUpICE9IDA7Ci19Ci0KLWludDMyX3QgR1BCQ29kZWRJbnB1dFN0
cmVhbVJlYWRUYWcoR1BCQ29kZWRJbnB1dFN0cmVhbVN0YXRlICpzdGF0ZSkgewotICBpZiAoR1BC
Q29kZWRJbnB1dFN0cmVhbUlzQXRFbmQoc3RhdGUpKSB7Ci0gICAgc3RhdGUtPmxhc3RUYWcgPSAw
OwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgc3RhdGUtPmxhc3RUYWcgPSBSZWFkUmF3VmFyaW50
MzIoc3RhdGUpOwotICBpZiAoc3RhdGUtPmxhc3RUYWcgPT0gMCkgewotICAgIC8vIElmIHdlIGFj
dHVhbGx5IHJlYWQgemVybywgdGhhdCdzIG5vdCBhIHZhbGlkIHRhZy4KLSAgICBbTlNFeGNlcHRp
b24gcmFpc2U6TlNQYXJzZUVycm9yRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAi
SW52YWxpZCBsYXN0IHRhZyAlZCIsIHN0YXRlLT5sYXN0VGFnXTsKLSAgfQotICByZXR1cm4gc3Rh
dGUtPmxhc3RUYWc7Ci19Ci0KLU5TU3RyaW5nICpHUEJDb2RlZElucHV0U3RyZWFtUmVhZFJldGFp
bmVkU3RyaW5nKAotICAgIEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpIHsKLSAgaW50
MzJfdCBzaXplID0gUmVhZFJhd1ZhcmludDMyKHN0YXRlKTsKLSAgTlNTdHJpbmcgKnJlc3VsdDsK
LSAgaWYgKHNpemUgPT0gMCkgewotICAgIHJlc3VsdCA9IEAiIjsKLSAgfSBlbHNlIHsKLSAgICBD
aGVja1NpemUoc3RhdGUsIHNpemUpOwotICAgIHJlc3VsdCA9IFtbTlNTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoQnl0ZXM6JnN0YXRlLT5ieXRlc1tzdGF0ZS0+YnVmZmVyUG9zXQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6c2l6ZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIHN0
YXRlLT5idWZmZXJQb3MgKz0gc2l6ZTsKLSAgICBpZiAoIXJlc3VsdCkgewotI2lmZGVmIERFQlVH
Ci0gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
L2RvY3MvcHJvdG8jc2NhbGFyCi0gICAgICBOU0xvZyhAIlVURi04IGZhaWx1cmUsIGlzIHNvbWUg
ZmllbGQgdHlwZSAnc3RyaW5nJyB3aGVuIGl0IHNob3VsZCBiZSAiCi0gICAgICAgICAgICBAIidi
eXRlcyc/Iik7Ci0jZW5kaWYKLSAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1BhcnNlRXJyb3JF
eGNlcHRpb24KLSAgICAgICAgICAgICAgICAgIGZvcm1hdDpAIkludmFsaWQgVVRGLTggZm9yIGEg
J3N0cmluZyciXTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTlNEYXRhICpH
UEJDb2RlZElucHV0U3RyZWFtUmVhZFJldGFpbmVkQnl0ZXMoR1BCQ29kZWRJbnB1dFN0cmVhbVN0
YXRlICpzdGF0ZSkgewotICBpbnQzMl90IHNpemUgPSBSZWFkUmF3VmFyaW50MzIoc3RhdGUpOwot
ICBpZiAoc2l6ZSA8IDApIHJldHVybiBuaWw7Ci0gIENoZWNrU2l6ZShzdGF0ZSwgc2l6ZSk7Ci0g
IE5TRGF0YSAqcmVzdWx0ID0gW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6c3RhdGUtPmJ5
dGVzICsgc3RhdGUtPmJ1ZmZlclBvcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoOnNpemVdOwotICBzdGF0ZS0+YnVmZmVyUG9zICs9IHNpemU7Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLU5TRGF0YSAqR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRSZXRhaW5l
ZEJ5dGVzTm9Db3B5KAotICAgIEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpIHsKLSAg
aW50MzJfdCBzaXplID0gUmVhZFJhd1ZhcmludDMyKHN0YXRlKTsKLSAgaWYgKHNpemUgPCAwKSBy
ZXR1cm4gbmlsOwotICBDaGVja1NpemUoc3RhdGUsIHNpemUpOwotICAvLyBDYXN0IGlzIHNhZmUg
YmVjYXVzZSBmcmVlV2hlbkRvbmUgaXMgTk8uCi0gIE5TRGF0YSAqcmVzdWx0ID0gW1tOU0RhdGEg
YWxsb2NdCi0gICAgICBpbml0V2l0aEJ5dGVzTm9Db3B5Oih2b2lkICopKHN0YXRlLT5ieXRlcyAr
IHN0YXRlLT5idWZmZXJQb3MpCi0gICAgICAgICAgICAgICAgICAgbGVuZ3RoOnNpemUKLSAgICAg
ICAgICAgICBmcmVlV2hlbkRvbmU6Tk9dOwotICBzdGF0ZS0+YnVmZmVyUG9zICs9IHNpemU7Ci0g
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXNpemVfdCBHUEJDb2RlZElucHV0U3RyZWFtUHVzaExpbWl0
KEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgYnl0ZUxpbWl0KSB7Ci0gIGJ5dGVMaW1pdCArPSBzdGF0ZS0+
YnVmZmVyUG9zOwotICBzaXplX3Qgb2xkTGltaXQgPSBzdGF0ZS0+Y3VycmVudExpbWl0OwotICBp
ZiAoYnl0ZUxpbWl0ID4gb2xkTGltaXQpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZh
bGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJieXRlTGltaXQg
PiBvbGRMaW1pdDogJXR1ID4gJXR1IiwgYnl0ZUxpbWl0LCBvbGRMaW1pdF07Ci0gIH0KLSAgc3Rh
dGUtPmN1cnJlbnRMaW1pdCA9IGJ5dGVMaW1pdDsKLSAgcmV0dXJuIG9sZExpbWl0OwotfQotCi12
b2lkIEdQQkNvZGVkSW5wdXRTdHJlYW1Qb3BMaW1pdChHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUg
KnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZExpbWl0
KSB7Ci0gIHN0YXRlLT5jdXJyZW50TGltaXQgPSBvbGRMaW1pdDsKLX0KLQotc2l6ZV90IEdQQkNv
ZGVkSW5wdXRTdHJlYW1CeXRlc1VudGlsTGltaXQoR1BCQ29kZWRJbnB1dFN0cmVhbVN0YXRlICpz
dGF0ZSkgewotICByZXR1cm4gc3RhdGUtPmN1cnJlbnRMaW1pdCAtIHN0YXRlLT5idWZmZXJQb3M7
Ci19Ci0KLUJPT0wgR1BCQ29kZWRJbnB1dFN0cmVhbUlzQXRFbmQoR1BCQ29kZWRJbnB1dFN0cmVh
bVN0YXRlICpzdGF0ZSkgewotICByZXR1cm4gKHN0YXRlLT5idWZmZXJQb3MgPT0gc3RhdGUtPmJ1
ZmZlclNpemUpIHx8Ci0gICAgICAgICAoc3RhdGUtPmJ1ZmZlclBvcyA9PSBzdGF0ZS0+Y3VycmVu
dExpbWl0KTsKLX0KLQotdm9pZCBHUEJDb2RlZElucHV0U3RyZWFtQ2hlY2tMYXN0VGFnV2FzKEdQ
QkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50MzJfdCB2YWx1ZSkgewotICBpZiAoc3RhdGUtPmxhc3RUYWcgIT0g
dmFsdWUpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNQYXJzZUVycm9yRXhjZXB0aW9uCi0g
ICAgICAgICAgICAgICAgZm9ybWF0OkAiTGFzdCB0YWc6ICVkIHNob3VsZCBiZSAlZCIsIHN0YXRl
LT5sYXN0VGFnLCB2YWx1ZV07Ci0gIH0KLX0KLQotQGltcGxlbWVudGF0aW9uIEdQQkNvZGVkSW5w
dXRTdHJlYW0KLQotKyAoaW5zdGFuY2V0eXBlKXN0cmVhbVdpdGhEYXRhOihOU0RhdGEgKilkYXRh
IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhXSBhdXRvcmVsZWFz
ZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgewot
ICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0jaWZkZWYgREVCVUcKLSAgICBOU0NBc3Nl
cnQoW3NlbGYgY2xhc3NdID09IFtHUEJDb2RlZElucHV0U3RyZWFtIGNsYXNzXSwKLSAgICAgICAg
ICAgICAgQCJTdWJjbGFzc2luZyBvZiBHUEJDb2RlZElucHV0U3RyZWFtIGlzIG5vdCBhbGxvd2Vk
LiIpOwotI2VuZGlmCi0gICAgYnVmZmVyXyA9IFtkYXRhIHJldGFpbl07Ci0gICAgc3RhdGVfLmJ5
dGVzID0gKGNvbnN0IHVpbnQ4X3QgKilbZGF0YSBieXRlc107Ci0gICAgc3RhdGVfLmJ1ZmZlclNp
emUgPSBbZGF0YSBsZW5ndGhdOwotICAgIHN0YXRlXy5jdXJyZW50TGltaXQgPSBzdGF0ZV8uYnVm
ZmVyU2l6ZTsKLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAg
W2J1ZmZlcl8gcmVsZWFzZV07Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW50MzJfdCly
ZWFkVGFnIHsKLSAgcmV0dXJuIEdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkVGFnKCZzdGF0ZV8pOwot
fQotCi0tICh2b2lkKWNoZWNrTGFzdFRhZ1dhczooaW50MzJfdCl2YWx1ZSB7Ci0gIEdQQkNvZGVk
SW5wdXRTdHJlYW1DaGVja0xhc3RUYWdXYXMoJnN0YXRlXywgdmFsdWUpOwotfQotCi0tIChCT09M
KXNraXBGaWVsZDooaW50MzJfdCl0YWcgewotICBzd2l0Y2ggKEdQQldpcmVGb3JtYXRHZXRUYWdX
aXJlVHlwZSh0YWcpKSB7Ci0gICAgY2FzZSBHUEJXaXJlRm9ybWF0VmFyaW50OgotICAgICAgR1BC
Q29kZWRJbnB1dFN0cmVhbVJlYWRJbnQzMigmc3RhdGVfKTsKLSAgICAgIHJldHVybiBZRVM7Ci0g
ICAgY2FzZSBHUEJXaXJlRm9ybWF0Rml4ZWQ2NDoKLSAgICAgIFNraXBSYXdEYXRhKCZzdGF0ZV8s
IHNpemVvZihpbnQ2NF90KSk7Ci0gICAgICByZXR1cm4gWUVTOwotICAgIGNhc2UgR1BCV2lyZUZv
cm1hdExlbmd0aERlbGltaXRlZDoKLSAgICAgIFNraXBSYXdEYXRhKCZzdGF0ZV8sIFJlYWRSYXdW
YXJpbnQzMigmc3RhdGVfKSk7Ci0gICAgICByZXR1cm4gWUVTOwotICAgIGNhc2UgR1BCV2lyZUZv
cm1hdFN0YXJ0R3JvdXA6Ci0gICAgICBbc2VsZiBza2lwTWVzc2FnZV07Ci0gICAgICBHUEJDb2Rl
ZElucHV0U3RyZWFtQ2hlY2tMYXN0VGFnV2FzKAotICAgICAgICAgICZzdGF0ZV8sIEdQQldpcmVG
b3JtYXRNYWtlVGFnKEdQQldpcmVGb3JtYXRHZXRUYWdGaWVsZE51bWJlcih0YWcpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQldpcmVGb3JtYXRFbmRHcm91cCkp
OwotICAgICAgcmV0dXJuIFlFUzsKLSAgICBjYXNlIEdQQldpcmVGb3JtYXRFbmRHcm91cDoKLSAg
ICAgIHJldHVybiBOTzsKLSAgICBjYXNlIEdQQldpcmVGb3JtYXRGaXhlZDMyOgotICAgICAgU2tp
cFJhd0RhdGEoJnN0YXRlXywgc2l6ZW9mKGludDMyX3QpKTsKLSAgICAgIHJldHVybiBZRVM7Ci0g
IH0KLSAgW05TRXhjZXB0aW9uIHJhaXNlOk5TUGFyc2VFcnJvckV4Y2VwdGlvbiBmb3JtYXQ6QCJJ
bnZhbGlkIHRhZyAlZCIsIHRhZ107Ci0gIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClza2lwTWVz
c2FnZSB7Ci0gIHdoaWxlIChZRVMpIHsKLSAgICBpbnQzMl90IHRhZyA9IEdQQkNvZGVkSW5wdXRT
dHJlYW1SZWFkVGFnKCZzdGF0ZV8pOwotICAgIGlmICh0YWcgPT0gMCB8fCAhW3NlbGYgc2tpcEZp
ZWxkOnRhZ10pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLX0KLQotLSAoQk9PTClpc0F0
RW5kIHsKLSAgcmV0dXJuIEdQQkNvZGVkSW5wdXRTdHJlYW1Jc0F0RW5kKCZzdGF0ZV8pOwotfQot
Ci0tIChzaXplX3QpcG9zaXRpb24gewotICByZXR1cm4gc3RhdGVfLmJ1ZmZlclBvczsKLX0KLQot
LSAoZG91YmxlKXJlYWREb3VibGUgewotICByZXR1cm4gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRE
b3VibGUoJnN0YXRlXyk7Ci19Ci0KLS0gKGZsb2F0KXJlYWRGbG9hdCB7Ci0gIHJldHVybiBHUEJD
b2RlZElucHV0U3RyZWFtUmVhZEZsb2F0KCZzdGF0ZV8pOwotfQotCi0tICh1aW50NjRfdClyZWFk
VUludDY0IHsKLSAgcmV0dXJuIEdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkVUludDY0KCZzdGF0ZV8p
OwotfQotCi0tIChpbnQ2NF90KXJlYWRJbnQ2NCB7Ci0gIHJldHVybiBHUEJDb2RlZElucHV0U3Ry
ZWFtUmVhZEludDY0KCZzdGF0ZV8pOwotfQotCi0tIChpbnQzMl90KXJlYWRJbnQzMiB7Ci0gIHJl
dHVybiBHUEJDb2RlZElucHV0U3RyZWFtUmVhZEludDMyKCZzdGF0ZV8pOwotfQotCi0tICh1aW50
NjRfdClyZWFkRml4ZWQ2NCB7Ci0gIHJldHVybiBHUEJDb2RlZElucHV0U3RyZWFtUmVhZEZpeGVk
NjQoJnN0YXRlXyk7Ci19Ci0KLS0gKHVpbnQzMl90KXJlYWRGaXhlZDMyIHsKLSAgcmV0dXJuIEdQ
QkNvZGVkSW5wdXRTdHJlYW1SZWFkRml4ZWQzMigmc3RhdGVfKTsKLX0KLQotLSAoQk9PTClyZWFk
Qm9vbCB7Ci0gIHJldHVybiBHUEJDb2RlZElucHV0U3RyZWFtUmVhZEJvb2woJnN0YXRlXyk7Ci19
Ci0KLS0gKE5TU3RyaW5nICopcmVhZFN0cmluZyB7Ci0gIHJldHVybiBbR1BCQ29kZWRJbnB1dFN0
cmVhbVJlYWRSZXRhaW5lZFN0cmluZygmc3RhdGVfKSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKHZv
aWQpcmVhZEdyb3VwOihpbnQzMl90KWZpZWxkTnVtYmVyCi0gICAgICAgICAgICAgIG1lc3NhZ2U6
KEdQQk1lc3NhZ2UgKiltZXNzYWdlCi0gICAgZXh0ZW5zaW9uUmVnaXN0cnk6KEdQQkV4dGVuc2lv
blJlZ2lzdHJ5ICopZXh0ZW5zaW9uUmVnaXN0cnkgewotICBpZiAoc3RhdGVfLnJlY3Vyc2lvbkRl
cHRoID49IGtEZWZhdWx0UmVjdXJzaW9uTGltaXQpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6
TlNQYXJzZUVycm9yRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAicmVjdXJzaW9u
RGVwdGgoJXR1KSA+PSAldHUiLCBzdGF0ZV8ucmVjdXJzaW9uRGVwdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgIGtEZWZhdWx0UmVjdXJzaW9uTGltaXRdOwotICB9Ci0gICsrc3RhdGVfLnJlY3Vy
c2lvbkRlcHRoOwotICBbbWVzc2FnZSBtZXJnZUZyb21Db2RlZElucHV0U3RyZWFtOnNlbGYgZXh0
ZW5zaW9uUmVnaXN0cnk6ZXh0ZW5zaW9uUmVnaXN0cnldOwotICBHUEJDb2RlZElucHV0U3RyZWFt
Q2hlY2tMYXN0VGFnV2FzKAotICAgICAgJnN0YXRlXywgR1BCV2lyZUZvcm1hdE1ha2VUYWcoZmll
bGROdW1iZXIsIEdQQldpcmVGb3JtYXRFbmRHcm91cCkpOwotICAtLXN0YXRlXy5yZWN1cnNpb25E
ZXB0aDsKLX0KLQotLSAodm9pZClyZWFkVW5rbm93bkdyb3VwOihpbnQzMl90KWZpZWxkTnVtYmVy
Ci0gICAgICAgICAgICAgICAgIG1lc3NhZ2U6KEdQQlVua25vd25GaWVsZFNldCAqKW1lc3NhZ2Ug
ewotICBpZiAoc3RhdGVfLnJlY3Vyc2lvbkRlcHRoID49IGtEZWZhdWx0UmVjdXJzaW9uTGltaXQp
IHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNQYXJzZUVycm9yRXhjZXB0aW9uCi0gICAgICAg
ICAgICAgICAgZm9ybWF0OkAicmVjdXJzaW9uRGVwdGgoJXR1KSA+PSAldHUiLCBzdGF0ZV8ucmVj
dXJzaW9uRGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGtEZWZhdWx0UmVjdXJzaW9uTGlt
aXRdOwotICB9Ci0gICsrc3RhdGVfLnJlY3Vyc2lvbkRlcHRoOwotICBbbWVzc2FnZSBtZXJnZUZy
b21Db2RlZElucHV0U3RyZWFtOnNlbGZdOwotICBHUEJDb2RlZElucHV0U3RyZWFtQ2hlY2tMYXN0
VGFnV2FzKAotICAgICAgJnN0YXRlXywgR1BCV2lyZUZvcm1hdE1ha2VUYWcoZmllbGROdW1iZXIs
IEdQQldpcmVGb3JtYXRFbmRHcm91cCkpOwotICAtLXN0YXRlXy5yZWN1cnNpb25EZXB0aDsKLX0K
LQotLSAodm9pZClyZWFkTWVzc2FnZTooR1BCTWVzc2FnZSAqKW1lc3NhZ2UKLSAgICBleHRlbnNp
b25SZWdpc3RyeTooR1BCRXh0ZW5zaW9uUmVnaXN0cnkgKilleHRlbnNpb25SZWdpc3RyeSB7Ci0g
IGludDMyX3QgbGVuZ3RoID0gUmVhZFJhd1ZhcmludDMyKCZzdGF0ZV8pOwotICBpZiAoc3RhdGVf
LnJlY3Vyc2lvbkRlcHRoID49IGtEZWZhdWx0UmVjdXJzaW9uTGltaXQpIHsKLSAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNQYXJzZUVycm9yRXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0
OkAicmVjdXJzaW9uRGVwdGgoJXR1KSA+PSAldHUiLCBzdGF0ZV8ucmVjdXJzaW9uRGVwdGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgIGtEZWZhdWx0UmVjdXJzaW9uTGltaXRdOwotICB9Ci0gIHNp
emVfdCBvbGRMaW1pdCA9IEdQQkNvZGVkSW5wdXRTdHJlYW1QdXNoTGltaXQoJnN0YXRlXywgbGVu
Z3RoKTsKLSAgKytzdGF0ZV8ucmVjdXJzaW9uRGVwdGg7Ci0gIFttZXNzYWdlIG1lcmdlRnJvbUNv
ZGVkSW5wdXRTdHJlYW06c2VsZiBleHRlbnNpb25SZWdpc3RyeTpleHRlbnNpb25SZWdpc3RyeV07
Ci0gIEdQQkNvZGVkSW5wdXRTdHJlYW1DaGVja0xhc3RUYWdXYXMoJnN0YXRlXywgMCk7Ci0gIC0t
c3RhdGVfLnJlY3Vyc2lvbkRlcHRoOwotICBHUEJDb2RlZElucHV0U3RyZWFtUG9wTGltaXQoJnN0
YXRlXywgb2xkTGltaXQpOwotfQotCi0tICh2b2lkKXJlYWRNYXBFbnRyeTooaWQpbWFwRGljdGlv
bmFyeQotICAgIGV4dGVuc2lvblJlZ2lzdHJ5OihHUEJFeHRlbnNpb25SZWdpc3RyeSAqKWV4dGVu
c2lvblJlZ2lzdHJ5Ci0gICAgICAgICAgICAgICAgZmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAq
KWZpZWxkCi0gICAgICAgIHBhcmVudE1lc3NhZ2U6KEdQQk1lc3NhZ2UgKilwYXJlbnRNZXNzYWdl
IHsKLSAgaW50MzJfdCBsZW5ndGggPSBSZWFkUmF3VmFyaW50MzIoJnN0YXRlXyk7Ci0gIGlmIChz
dGF0ZV8ucmVjdXJzaW9uRGVwdGggPj0ga0RlZmF1bHRSZWN1cnNpb25MaW1pdCkgewotICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU1BhcnNlRXJyb3JFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBm
b3JtYXQ6QCJyZWN1cnNpb25EZXB0aCgldHUpID49ICV0dSIsIHN0YXRlXy5yZWN1cnNpb25EZXB0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAga0RlZmF1bHRSZWN1cnNpb25MaW1pdF07Ci0gIH0K
LSAgc2l6ZV90IG9sZExpbWl0ID0gR1BCQ29kZWRJbnB1dFN0cmVhbVB1c2hMaW1pdCgmc3RhdGVf
LCBsZW5ndGgpOwotICArK3N0YXRlXy5yZWN1cnNpb25EZXB0aDsKLSAgR1BCRGljdGlvbmFyeVJl
YWRFbnRyeShtYXBEaWN0aW9uYXJ5LCBzZWxmLCBleHRlbnNpb25SZWdpc3RyeSwgZmllbGQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TWVzc2FnZSk7Ci0gIEdQQkNvZGVkSW5wdXRT
dHJlYW1DaGVja0xhc3RUYWdXYXMoJnN0YXRlXywgMCk7Ci0gIC0tc3RhdGVfLnJlY3Vyc2lvbkRl
cHRoOwotICBHUEJDb2RlZElucHV0U3RyZWFtUG9wTGltaXQoJnN0YXRlXywgb2xkTGltaXQpOwot
fQotCi0tIChOU0RhdGEgKilyZWFkQnl0ZXMgewotICByZXR1cm4gW0dQQkNvZGVkSW5wdXRTdHJl
YW1SZWFkUmV0YWluZWRCeXRlcygmc3RhdGVfKSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKHVpbnQz
Ml90KXJlYWRVSW50MzIgewotICByZXR1cm4gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRVSW50MzIo
JnN0YXRlXyk7Ci19Ci0KLS0gKGludDMyX3QpcmVhZEVudW0gewotICByZXR1cm4gR1BCQ29kZWRJ
bnB1dFN0cmVhbVJlYWRFbnVtKCZzdGF0ZV8pOwotfQotCi0tIChpbnQzMl90KXJlYWRTRml4ZWQz
MiB7Ci0gIHJldHVybiBHUEJDb2RlZElucHV0U3RyZWFtUmVhZFNGaXhlZDMyKCZzdGF0ZV8pOwot
fQotCi0tIChpbnQ2NF90KXJlYWRTRml4ZWQ2NCB7Ci0gIHJldHVybiBHUEJDb2RlZElucHV0U3Ry
ZWFtUmVhZFNGaXhlZDY0KCZzdGF0ZV8pOwotfQotCi0tIChpbnQzMl90KXJlYWRTSW50MzIgewot
ICByZXR1cm4gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRTSW50MzIoJnN0YXRlXyk7Ci19Ci0KLS0g
KGludDY0X3QpcmVhZFNJbnQ2NCB7Ci0gIHJldHVybiBHUEJDb2RlZElucHV0U3RyZWFtUmVhZFNJ
bnQ2NCgmc3RhdGVfKTsKLX0KLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkNvZGVk
SW5wdXRTdHJlYW1fUGFja2FnZVByaXZhdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJDb2RlZElucHV0U3Ry
ZWFtX1BhY2thZ2VQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwYmQw
YzkyY2VjZThhMmMwYjk1NWIzODg3YTc2OWU0MzNkOGFhZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkNvZGVkSW5wdXRTdHJlYW1f
UGFja2FnZVByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVGhpcyBoZWFkZXIgaXMgcHJpdmF0ZSB0
byB0aGUgUHJvdG9ib2xCdWZmZXJzIGxpYnJhcnkgYW5kIG11c3QgTk9UIGJlCi0vLyBpbmNsdWRl
ZCBieSBhbnkgc291cmNlcyBvdXRzaWRlIHRoaXMgbGlicmFyeS4gVGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBhcmUKLS8vIHN1YmplY3QgdG8gY2hhbmdlIGF0IGFueSB0aW1lIHdpdGhvdXQgbm90
aWNlLgotCi0jaW1wb3J0ICJHUEJDb2RlZElucHV0U3RyZWFtLmgiCi0KLSNpbXBvcnQgPGxpYmtl
cm4vT1NBdG9taWMuaD4KLQotQGNsYXNzIEdQQlVua25vd25GaWVsZFNldDsKLUBjbGFzcyBHUEJG
aWVsZERlc2NyaXB0b3I7Ci0KLXR5cGVkZWYgc3RydWN0IEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0
ZSB7Ci0gIGNvbnN0IHVpbnQ4X3QgKmJ5dGVzOwotICBzaXplX3QgYnVmZmVyU2l6ZTsKLSAgc2l6
ZV90IGJ1ZmZlclBvczsKLQotICAvLyBGb3IgcGFyc2luZyBzdWJzZWN0aW9ucyBvZiBhbiBpbnB1
dCBzdHJlYW0geW91IGNhbiBwdXQgYSBoYXJkIGxpbWl0IG9uCi0gIC8vIGhvdyBtdWNoIHNob3Vs
ZCBiZSByZWFkLiBOb3JtYWxseSB0aGUgbGltaXQgaXMgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLAot
ICAvLyBidXQgeW91IGNhbiBhZGp1c3QgaXQgdG8gYW55d2hlcmUsIGFuZCBpZiB5b3UgaGl0IGl0
IHlvdSB3aWxsIGJlIGF0IHRoZQotICAvLyBlbmQgb2YgdGhlIHN0cmVhbSwgdW50aWwgeW91IGFk
anVzdCB0aGUgbGltaXQuCi0gIHNpemVfdCBjdXJyZW50TGltaXQ7Ci0gIGludDMyX3QgbGFzdFRh
ZzsKLSAgTlNVSW50ZWdlciByZWN1cnNpb25EZXB0aDsKLX0gR1BCQ29kZWRJbnB1dFN0cmVhbVN0
YXRlOwotCi1AaW50ZXJmYWNlIEdQQkNvZGVkSW5wdXRTdHJlYW0gKCkgewotIEBwYWNrYWdlCi0g
IHN0cnVjdCBHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgc3RhdGVfOwotICBOU0RhdGEgKmJ1ZmZl
cl87Ci19Ci0KLS8vIEdyb3VwIHN1cHBvcnQgaXMgZGVwcmVjYXRlZCwgc28gd2UgaGlkZSB0aGlz
IGludGVyZmFjZSBmcm9tIHVzZXJzLCBidXQKLS8vIHN1cHBvcnQgZm9yIG9sZGVyIGRhdGEuCi0t
ICh2b2lkKXJlYWRHcm91cDooaW50MzJfdClmaWVsZE51bWJlcgotICAgICAgICAgICAgICBtZXNz
YWdlOihHUEJNZXNzYWdlICopbWVzc2FnZQotICAgIGV4dGVuc2lvblJlZ2lzdHJ5OihHUEJFeHRl
bnNpb25SZWdpc3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5OwotCi0vLyBSZWFkcyBhIGdyb3VwIGZp
ZWxkIHZhbHVlIGZyb20gdGhlIHN0cmVhbSBhbmQgbWVyZ2VzIGl0IGludG8gdGhlIGdpdmVuCi0v
LyBVbmtub3duRmllbGRTZXQuCi0tICh2b2lkKXJlYWRVbmtub3duR3JvdXA6KGludDMyX3QpZmll
bGROdW1iZXIKLSAgICAgICAgICAgICAgICAgbWVzc2FnZTooR1BCVW5rbm93bkZpZWxkU2V0ICop
bWVzc2FnZTsKLQotLy8gUmVhZHMgYSBtYXAgZW50cnkuCi0tICh2b2lkKXJlYWRNYXBFbnRyeToo
aWQpbWFwRGljdGlvbmFyeQotICAgIGV4dGVuc2lvblJlZ2lzdHJ5OihHUEJFeHRlbnNpb25SZWdp
c3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5Ci0gICAgICAgICAgICAgICAgZmllbGQ6KEdQQkZpZWxk
RGVzY3JpcHRvciAqKWZpZWxkCi0gICAgICAgIHBhcmVudE1lc3NhZ2U6KEdQQk1lc3NhZ2UgKilw
YXJlbnRNZXNzYWdlOwotQGVuZAotCi1DRl9FWFRFUk5fQ19CRUdJTgotCi1pbnQzMl90IEdQQkNv
ZGVkSW5wdXRTdHJlYW1SZWFkVGFnKEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpOwot
Ci1kb3VibGUgR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWREb3VibGUoR1BCQ29kZWRJbnB1dFN0cmVh
bVN0YXRlICpzdGF0ZSk7Ci1mbG9hdCBHUEJDb2RlZElucHV0U3RyZWFtUmVhZEZsb2F0KEdQQkNv
ZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpOwotdWludDY0X3QgR1BCQ29kZWRJbnB1dFN0cmVh
bVJlYWRVSW50NjQoR1BCQ29kZWRJbnB1dFN0cmVhbVN0YXRlICpzdGF0ZSk7Ci11aW50MzJfdCBH
UEJDb2RlZElucHV0U3RyZWFtUmVhZFVJbnQzMihHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0
YXRlKTsKLWludDY0X3QgR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRJbnQ2NChHUEJDb2RlZElucHV0
U3RyZWFtU3RhdGUgKnN0YXRlKTsKLWludDMyX3QgR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRJbnQz
MihHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlKTsKLXVpbnQ2NF90IEdQQkNvZGVkSW5w
dXRTdHJlYW1SZWFkRml4ZWQ2NChHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlKTsKLXVp
bnQzMl90IEdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkRml4ZWQzMihHUEJDb2RlZElucHV0U3RyZWFt
U3RhdGUgKnN0YXRlKTsKLWludDMyX3QgR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRFbnVtKEdQQkNv
ZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpOwotaW50MzJfdCBHUEJDb2RlZElucHV0U3RyZWFt
UmVhZFNGaXhlZDMyKEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpOwotaW50NjRfdCBH
UEJDb2RlZElucHV0U3RyZWFtUmVhZFNGaXhlZDY0KEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAq
c3RhdGUpOwotaW50MzJfdCBHUEJDb2RlZElucHV0U3RyZWFtUmVhZFNJbnQzMihHUEJDb2RlZElu
cHV0U3RyZWFtU3RhdGUgKnN0YXRlKTsKLWludDY0X3QgR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRT
SW50NjQoR1BCQ29kZWRJbnB1dFN0cmVhbVN0YXRlICpzdGF0ZSk7Ci1CT09MIEdQQkNvZGVkSW5w
dXRTdHJlYW1SZWFkQm9vbChHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlKTsKLU5TU3Ry
aW5nICpHUEJDb2RlZElucHV0U3RyZWFtUmVhZFJldGFpbmVkU3RyaW5nKEdQQkNvZGVkSW5wdXRT
dHJlYW1TdGF0ZSAqc3RhdGUpCi0gICAgX19hdHRyaWJ1dGUoKG5zX3JldHVybnNfcmV0YWluZWQp
KTsKLU5TRGF0YSAqR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRSZXRhaW5lZEJ5dGVzKEdQQkNvZGVk
SW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpCi0gICAgX19hdHRyaWJ1dGUoKG5zX3JldHVybnNfcmV0
YWluZWQpKTsKLU5TRGF0YSAqR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRSZXRhaW5lZEJ5dGVzTm9D
b3B5KAotICAgIEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUpIF9fYXR0cmlidXRlKChu
c19yZXR1cm5zX3JldGFpbmVkKSk7Ci0KLXNpemVfdCBHUEJDb2RlZElucHV0U3RyZWFtUHVzaExp
bWl0KEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgYnl0ZUxpbWl0KTsKLXZvaWQgR1BCQ29kZWRJbnB1dFN0
cmVhbVBvcExpbWl0KEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkTGltaXQpOwotc2l6ZV90IEdQQkNvZGVk
SW5wdXRTdHJlYW1CeXRlc1VudGlsTGltaXQoR1BCQ29kZWRJbnB1dFN0cmVhbVN0YXRlICpzdGF0
ZSk7Ci1CT09MIEdQQkNvZGVkSW5wdXRTdHJlYW1Jc0F0RW5kKEdQQkNvZGVkSW5wdXRTdHJlYW1T
dGF0ZSAqc3RhdGUpOwotdm9pZCBHUEJDb2RlZElucHV0U3RyZWFtQ2hlY2tMYXN0VGFnV2FzKEdQ
QkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50MzJfdCB2YWx1ZSk7Ci0KLUNGX0VYVEVSTl9DX0VORApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9vYmplY3RpdmVjL0dQQkNvZGVkT3V0cHV0U3RyZWFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCQ29k
ZWRPdXRwdXRTdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI3Mjg4MGRm
Mjg4MmJjMGI3MjhjOGQ5NjQ5NWRkNzBmNDQzN2Q0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCQ29kZWRPdXRwdXRTdHJlYW0uaAor
KysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQg
IkdQQlJ1bnRpbWVUeXBlcy5oIgotI2ltcG9ydCAiR1BCV2lyZUZvcm1hdC5oIgotCi1AY2xhc3Mg
R1BCQm9vbEFycmF5OwotQGNsYXNzIEdQQkRvdWJsZUFycmF5OwotQGNsYXNzIEdQQkVudW1BcnJh
eTsKLUBjbGFzcyBHUEJGbG9hdEFycmF5OwotQGNsYXNzIEdQQk1lc3NhZ2U7Ci1AY2xhc3MgR1BC
SW50MzJBcnJheTsKLUBjbGFzcyBHUEJJbnQ2NEFycmF5OwotQGNsYXNzIEdQQlVJbnQzMkFycmF5
OwotQGNsYXNzIEdQQlVJbnQ2NEFycmF5OwotQGNsYXNzIEdQQlVua25vd25GaWVsZFNldDsKLQot
TlNfQVNTVU1FX05PTk5VTExfQkVHSU4KLQotLy8vIFdyaXRlcyBvdXQgcHJvdG9jb2wgbWVzc2Fn
ZSBmaWVsZHMuCi0vLy8KLS8vLyBUaGUgY29tbW9uIHVzZXMgb2YgcHJvdG9jb2wgYnVmZmVycyBz
aG91bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBjbGFzcy4KLS8vLyBAYyBHUEJNZXNzYWdlJ3MgcHJv
dmlkZSBhIEBjIC1kYXRhIG1ldGhvZCB0aGF0IHdpbGwgc2VyaWFsaXplIHRoZSBtZXNzYWdlCi0v
Ly8gZm9yIHlvdS4KLS8vLwotLy8vIEBub3RlIFN1YmNsYXNzaW5nIG9mIEdQQkNvZGVkT3V0cHV0
U3RyZWFtIGlzIE5PVCBzdXBwb3J0ZWQuCi1AaW50ZXJmYWNlIEdQQkNvZGVkT3V0cHV0U3RyZWFt
IDogTlNPYmplY3QKLQotLy8vIENyZWF0ZXMgYSBzdHJlYW0gdG8gZmlsbCBpbiB0aGUgZ2l2ZW4g
ZGF0YS4gRGF0YSBtdXN0IGJlIHNpemVkIHRvIGZpdCBvcgotLy8vIGFuIGVycm9yIHdpbGwgYmUg
cmFpc2VkIHdoZW4gb3V0IG9mIHNwYWNlLgotKyAoaW5zdGFuY2V0eXBlKXN0cmVhbVdpdGhEYXRh
OihOU011dGFibGVEYXRhICopZGF0YTsKLQotLy8vIENyZWF0ZXMgYSBzdHJlYW0gdG8gd3JpdGUg
aW50byB0aGUgZ2l2ZW4gQGMgTlNPdXRwdXRTdHJlYW0uCi0rIChpbnN0YW5jZXR5cGUpc3RyZWFt
V2l0aE91dHB1dFN0cmVhbTooTlNPdXRwdXRTdHJlYW0gKilvdXRwdXQ7Ci0KLS8vLyBJbml0aWFs
aXplcyBhIHN0cmVhbSB0byBmaWxsIGluIHRoZSBnaXZlbiBkYXRhLiBEYXRhIG11c3QgYmUgc2l6
ZWQgdG8gZml0Ci0vLy8gb3IgYW4gZXJyb3Igd2lsbCBiZSByYWlzZWQgd2hlbiBvdXQgb2Ygc3Bh
Y2UuCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRhOihOU011dGFibGVEYXRhICopZGF0YTsK
LQotLy8vIEluaXRpYWxpemVzIGEgc3RyZWFtIHRvIHdyaXRlIGludG8gdGhlIGdpdmVuIEBjIE5T
T3V0cHV0U3RyZWFtLgotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT3V0cHV0U3RyZWFtOihOU091
dHB1dFN0cmVhbSAqKW91dHB1dDsKLQotLy8vIEZsdXNoIGFueSBidWZmZXJlZCBkYXRhIG91dC4K
LS0gKHZvaWQpZmx1c2g7Ci0KLS8vLyBXcml0ZSB0aGUgcmF3IGJ5dGUgb3V0LgotLSAodm9pZCl3
cml0ZVJhd0J5dGU6KHVpbnQ4X3QpdmFsdWU7Ci0KLS8vLyBXcml0ZSB0aGUgdGFnIGZvciB0aGUg
Z2l2ZW4gZmllbGQgbnVtYmVyIGFuZCB3aXJlIGZvcm1hdC4KLS8vLwotLy8vIEBwYXJhbSBmaWVs
ZE51bWJlciBUaGUgZmllbGQgbnVtYmVyLgotLy8vIEBwYXJhbSBmb3JtYXQgICAgICBUaGUgd2ly
ZSBmb3JtYXQgdGhlIGRhdGEgZm9yIHRoZSBmaWVsZCB3aWxsIGJlIGluLgotLSAodm9pZCl3cml0
ZVRhZzoodWludDMyX3QpZmllbGROdW1iZXIgZm9ybWF0OihHUEJXaXJlRm9ybWF0KWZvcm1hdDsK
LQotLy8vIFdyaXRlIGEgMzJiaXQgdmFsdWUgb3V0IGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0Lgot
LSAodm9pZCl3cml0ZVJhd0xpdHRsZUVuZGlhbjMyOihpbnQzMl90KXZhbHVlOwotLy8vIFdyaXRl
IGEgNjRiaXQgdmFsdWUgb3V0IGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LgotLSAodm9pZCl3cml0
ZVJhd0xpdHRsZUVuZGlhbjY0OihpbnQ2NF90KXZhbHVlOwotCi0vLy8gV3JpdGUgYSAzMmJpdCB2
YWx1ZSBvdXQgaW4gdmFyaW50IGZvcm1hdC4KLS0gKHZvaWQpd3JpdGVSYXdWYXJpbnQzMjooaW50
MzJfdCl2YWx1ZTsKLS8vLyBXcml0ZSBhIDY0Yml0IHZhbHVlIG91dCBpbiB2YXJpbnQgZm9ybWF0
LgotLSAodm9pZCl3cml0ZVJhd1ZhcmludDY0OihpbnQ2NF90KXZhbHVlOwotCi0vLy8gV3JpdGUg
YSBzaXplX3Qgb3V0IGFzIGEgMzJiaXQgdmFyaW50IHZhbHVlLgotLy8vCi0vLy8gQG5vdGUgVGhp
cyB3aWxsIHRydW5jYXRlIDY0IGJpdCB2YWx1ZXMgdG8gMzIuCi0tICh2b2lkKXdyaXRlUmF3VmFy
aW50U2l6ZVRBczMyOihzaXplX3QpdmFsdWU7Ci0KLS8vLyBXcml0ZXMgdGhlIGNvbnRlbnRzIG9m
IGFuIEBjIE5TRGF0YSBvdXQuCi0tICh2b2lkKXdyaXRlUmF3RGF0YTooTlNEYXRhICopZGF0YTsK
LS8vLyBXcml0ZXMgb3V0IHRoZSBnaXZlbiBkYXRhLgotLy8vCi0vLy8gQHBhcmFtIGRhdGEgICBU
aGUgZGF0YSBibG9iIHRvIHdyaXRlIG91dC4KLS8vLyBAcGFyYW0gb2Zmc2V0IFRoZSBvZmZzZXQg
aW50byB0aGUgYmxvYiB0byBzdGFydCB3cml0aW5nIG91dC4KLS8vLyBAcGFyYW0gbGVuZ3RoIFRo
ZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgYmxvYiB0byB3cml0ZSBvdXQuCi0tICh2b2lkKXdy
aXRlUmF3UHRyOihjb25zdCB2b2lkICopZGF0YQotICAgICAgICAgICAgIG9mZnNldDooc2l6ZV90
KW9mZnNldAotICAgICAgICAgICAgIGxlbmd0aDooc2l6ZV90KWxlbmd0aDsKLQotLy8lUERETS1F
WFBBTkQgX1dSSVRFX0RFQ0xTKCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQs
IGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0vLy8gV3JpdGUgYSBkb3VibGUgZm9yIHRoZSBn
aXZlbiBmaWVsZCBudW1iZXIuCi0tICh2b2lkKXdyaXRlRG91YmxlOihpbnQzMl90KWZpZWxkTnVt
YmVyIHZhbHVlOihkb3VibGUpdmFsdWU7Ci0vLy8gV3JpdGUgYSBwYWNrZWQgYXJyYXkgb2YgZG91
YmxlIGZvciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZURvdWJsZUFycmF5
OihpbnQzMl90KWZpZWxkTnVtYmVyCi0gICAgICAgICAgICAgICAgICB2YWx1ZXM6KEdQQkRvdWJs
ZUFycmF5ICopdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICB0YWc6KHVpbnQzMl90KXRhZzsK
LS8vLyBXcml0ZSBhIGRvdWJsZSB3aXRob3V0IGFueSB0YWcuCi0tICh2b2lkKXdyaXRlRG91Ymxl
Tm9UYWc6KGRvdWJsZSl2YWx1ZTsKLQotLy8vIFdyaXRlIGEgZmxvYXQgZm9yIHRoZSBnaXZlbiBm
aWVsZCBudW1iZXIuCi0tICh2b2lkKXdyaXRlRmxvYXQ6KGludDMyX3QpZmllbGROdW1iZXIgdmFs
dWU6KGZsb2F0KXZhbHVlOwotLy8vIFdyaXRlIGEgcGFja2VkIGFycmF5IG9mIGZsb2F0IGZvciB0
aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZUZsb2F0QXJyYXk6KGludDMyX3Qp
ZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAgdmFsdWVzOihHUEJGbG9hdEFycmF5ICopdmFs
dWVzCi0gICAgICAgICAgICAgICAgICAgIHRhZzoodWludDMyX3QpdGFnOwotLy8vIFdyaXRlIGEg
ZmxvYXQgd2l0aG91dCBhbnkgdGFnLgotLSAodm9pZCl3cml0ZUZsb2F0Tm9UYWc6KGZsb2F0KXZh
bHVlOwotCi0vLy8gV3JpdGUgYSB1aW50NjRfdCBmb3IgdGhlIGdpdmVuIGZpZWxkIG51bWJlci4K
LS0gKHZvaWQpd3JpdGVVSW50NjQ6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KHVpbnQ2NF90
KXZhbHVlOwotLy8vIFdyaXRlIGEgcGFja2VkIGFycmF5IG9mIHVpbnQ2NF90IGZvciB0aGUgZ2l2
ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZVVJbnQ2NEFycmF5OihpbnQzMl90KWZpZWxk
TnVtYmVyCi0gICAgICAgICAgICAgICAgICB2YWx1ZXM6KEdQQlVJbnQ2NEFycmF5ICopdmFsdWVz
Ci0gICAgICAgICAgICAgICAgICAgICB0YWc6KHVpbnQzMl90KXRhZzsKLS8vLyBXcml0ZSBhIHVp
bnQ2NF90IHdpdGhvdXQgYW55IHRhZy4KLS0gKHZvaWQpd3JpdGVVSW50NjROb1RhZzoodWludDY0
X3QpdmFsdWU7Ci0KLS8vLyBXcml0ZSBhIGludDY0X3QgZm9yIHRoZSBnaXZlbiBmaWVsZCBudW1i
ZXIuCi0tICh2b2lkKXdyaXRlSW50NjQ6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KGludDY0
X3QpdmFsdWU7Ci0vLy8gV3JpdGUgYSBwYWNrZWQgYXJyYXkgb2YgaW50NjRfdCBmb3IgdGhlIGdp
dmVuIGZpZWxkIG51bWJlci4KLS0gKHZvaWQpd3JpdGVJbnQ2NEFycmF5OihpbnQzMl90KWZpZWxk
TnVtYmVyCi0gICAgICAgICAgICAgICAgIHZhbHVlczooR1BCSW50NjRBcnJheSAqKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICB0YWc6KHVpbnQzMl90KXRhZzsKLS8vLyBXcml0ZSBhIGludDY0
X3Qgd2l0aG91dCBhbnkgdGFnLgotLSAodm9pZCl3cml0ZUludDY0Tm9UYWc6KGludDY0X3QpdmFs
dWU7Ci0KLS8vLyBXcml0ZSBhIGludDMyX3QgZm9yIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIuCi0t
ICh2b2lkKXdyaXRlSW50MzI6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KGludDMyX3QpdmFs
dWU7Ci0vLy8gV3JpdGUgYSBwYWNrZWQgYXJyYXkgb2YgaW50MzJfdCBmb3IgdGhlIGdpdmVuIGZp
ZWxkIG51bWJlci4KLS0gKHZvaWQpd3JpdGVJbnQzMkFycmF5OihpbnQzMl90KWZpZWxkTnVtYmVy
Ci0gICAgICAgICAgICAgICAgIHZhbHVlczooR1BCSW50MzJBcnJheSAqKXZhbHVlcwotICAgICAg
ICAgICAgICAgICAgICB0YWc6KHVpbnQzMl90KXRhZzsKLS8vLyBXcml0ZSBhIGludDMyX3Qgd2l0
aG91dCBhbnkgdGFnLgotLSAodm9pZCl3cml0ZUludDMyTm9UYWc6KGludDMyX3QpdmFsdWU7Ci0K
LS8vLyBXcml0ZSBhIHVpbnQzMl90IGZvciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLSAodm9p
ZCl3cml0ZVVJbnQzMjooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZToodWludDMyX3QpdmFsdWU7
Ci0vLy8gV3JpdGUgYSBwYWNrZWQgYXJyYXkgb2YgdWludDMyX3QgZm9yIHRoZSBnaXZlbiBmaWVs
ZCBudW1iZXIuCi0tICh2b2lkKXdyaXRlVUludDMyQXJyYXk6KGludDMyX3QpZmllbGROdW1iZXIK
LSAgICAgICAgICAgICAgICAgIHZhbHVlczooR1BCVUludDMyQXJyYXkgKil2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgIHRhZzoodWludDMyX3QpdGFnOwotLy8vIFdyaXRlIGEgdWludDMyX3Qg
d2l0aG91dCBhbnkgdGFnLgotLSAodm9pZCl3cml0ZVVJbnQzMk5vVGFnOih1aW50MzJfdCl2YWx1
ZTsKLQotLy8vIFdyaXRlIGEgdWludDY0X3QgZm9yIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIuCi0t
ICh2b2lkKXdyaXRlRml4ZWQ2NDooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZToodWludDY0X3Qp
dmFsdWU7Ci0vLy8gV3JpdGUgYSBwYWNrZWQgYXJyYXkgb2YgdWludDY0X3QgZm9yIHRoZSBnaXZl
biBmaWVsZCBudW1iZXIuCi0tICh2b2lkKXdyaXRlRml4ZWQ2NEFycmF5OihpbnQzMl90KWZpZWxk
TnVtYmVyCi0gICAgICAgICAgICAgICAgICAgdmFsdWVzOihHUEJVSW50NjRBcnJheSAqKXZhbHVl
cwotICAgICAgICAgICAgICAgICAgICAgIHRhZzoodWludDMyX3QpdGFnOwotLy8vIFdyaXRlIGEg
dWludDY0X3Qgd2l0aG91dCBhbnkgdGFnLgotLSAodm9pZCl3cml0ZUZpeGVkNjROb1RhZzoodWlu
dDY0X3QpdmFsdWU7Ci0KLS8vLyBXcml0ZSBhIHVpbnQzMl90IGZvciB0aGUgZ2l2ZW4gZmllbGQg
bnVtYmVyLgotLSAodm9pZCl3cml0ZUZpeGVkMzI6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6
KHVpbnQzMl90KXZhbHVlOwotLy8vIFdyaXRlIGEgcGFja2VkIGFycmF5IG9mIHVpbnQzMl90IGZv
ciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZUZpeGVkMzJBcnJheTooaW50
MzJfdClmaWVsZE51bWJlcgotICAgICAgICAgICAgICAgICAgIHZhbHVlczooR1BCVUludDMyQXJy
YXkgKil2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICB0YWc6KHVpbnQzMl90KXRhZzsKLS8v
LyBXcml0ZSBhIHVpbnQzMl90IHdpdGhvdXQgYW55IHRhZy4KLS0gKHZvaWQpd3JpdGVGaXhlZDMy
Tm9UYWc6KHVpbnQzMl90KXZhbHVlOwotCi0vLy8gV3JpdGUgYSBpbnQzMl90IGZvciB0aGUgZ2l2
ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZVNJbnQzMjooaW50MzJfdClmaWVsZE51bWJl
ciB2YWx1ZTooaW50MzJfdCl2YWx1ZTsKLS8vLyBXcml0ZSBhIHBhY2tlZCBhcnJheSBvZiBpbnQz
Ml90IGZvciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZVNJbnQzMkFycmF5
OihpbnQzMl90KWZpZWxkTnVtYmVyCi0gICAgICAgICAgICAgICAgICB2YWx1ZXM6KEdQQkludDMy
QXJyYXkgKil2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgIHRhZzoodWludDMyX3QpdGFnOwot
Ly8vIFdyaXRlIGEgaW50MzJfdCB3aXRob3V0IGFueSB0YWcuCi0tICh2b2lkKXdyaXRlU0ludDMy
Tm9UYWc6KGludDMyX3QpdmFsdWU7Ci0KLS8vLyBXcml0ZSBhIGludDY0X3QgZm9yIHRoZSBnaXZl
biBmaWVsZCBudW1iZXIuCi0tICh2b2lkKXdyaXRlU0ludDY0OihpbnQzMl90KWZpZWxkTnVtYmVy
IHZhbHVlOihpbnQ2NF90KXZhbHVlOwotLy8vIFdyaXRlIGEgcGFja2VkIGFycmF5IG9mIGludDY0
X3QgZm9yIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIuCi0tICh2b2lkKXdyaXRlU0ludDY0QXJyYXk6
KGludDMyX3QpZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAgIHZhbHVlczooR1BCSW50NjRB
cnJheSAqKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgdGFnOih1aW50MzJfdCl0YWc7Ci0v
Ly8gV3JpdGUgYSBpbnQ2NF90IHdpdGhvdXQgYW55IHRhZy4KLS0gKHZvaWQpd3JpdGVTSW50NjRO
b1RhZzooaW50NjRfdCl2YWx1ZTsKLQotLy8vIFdyaXRlIGEgaW50NjRfdCBmb3IgdGhlIGdpdmVu
IGZpZWxkIG51bWJlci4KLS0gKHZvaWQpd3JpdGVTRml4ZWQ2NDooaW50MzJfdClmaWVsZE51bWJl
ciB2YWx1ZTooaW50NjRfdCl2YWx1ZTsKLS8vLyBXcml0ZSBhIHBhY2tlZCBhcnJheSBvZiBpbnQ2
NF90IGZvciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZVNGaXhlZDY0QXJy
YXk6KGludDMyX3QpZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzOihHUEJJ
bnQ2NEFycmF5ICopdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIHRhZzoodWludDMyX3Qp
dGFnOwotLy8vIFdyaXRlIGEgaW50NjRfdCB3aXRob3V0IGFueSB0YWcuCi0tICh2b2lkKXdyaXRl
U0ZpeGVkNjROb1RhZzooaW50NjRfdCl2YWx1ZTsKLQotLy8vIFdyaXRlIGEgaW50MzJfdCBmb3Ig
dGhlIGdpdmVuIGZpZWxkIG51bWJlci4KLS0gKHZvaWQpd3JpdGVTRml4ZWQzMjooaW50MzJfdClm
aWVsZE51bWJlciB2YWx1ZTooaW50MzJfdCl2YWx1ZTsKLS8vLyBXcml0ZSBhIHBhY2tlZCBhcnJh
eSBvZiBpbnQzMl90IGZvciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZVNG
aXhlZDMyQXJyYXk6KGludDMyX3QpZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgdmFs
dWVzOihHUEJJbnQzMkFycmF5ICopdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIHRhZzoo
dWludDMyX3QpdGFnOwotLy8vIFdyaXRlIGEgaW50MzJfdCB3aXRob3V0IGFueSB0YWcuCi0tICh2
b2lkKXdyaXRlU0ZpeGVkMzJOb1RhZzooaW50MzJfdCl2YWx1ZTsKLQotLy8vIFdyaXRlIGEgQk9P
TCBmb3IgdGhlIGdpdmVuIGZpZWxkIG51bWJlci4KLS0gKHZvaWQpd3JpdGVCb29sOihpbnQzMl90
KWZpZWxkTnVtYmVyIHZhbHVlOihCT09MKXZhbHVlOwotLy8vIFdyaXRlIGEgcGFja2VkIGFycmF5
IG9mIEJPT0wgZm9yIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIuCi0tICh2b2lkKXdyaXRlQm9vbEFy
cmF5OihpbnQzMl90KWZpZWxkTnVtYmVyCi0gICAgICAgICAgICAgICAgdmFsdWVzOihHUEJCb29s
QXJyYXkgKil2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICB0YWc6KHVpbnQzMl90KXRhZzsKLS8v
LyBXcml0ZSBhIEJPT0wgd2l0aG91dCBhbnkgdGFnLgotLSAodm9pZCl3cml0ZUJvb2xOb1RhZzoo
Qk9PTCl2YWx1ZTsKLQotLy8vIFdyaXRlIGEgaW50MzJfdCBmb3IgdGhlIGdpdmVuIGZpZWxkIG51
bWJlci4KLS0gKHZvaWQpd3JpdGVFbnVtOihpbnQzMl90KWZpZWxkTnVtYmVyIHZhbHVlOihpbnQz
Ml90KXZhbHVlOwotLy8vIFdyaXRlIGEgcGFja2VkIGFycmF5IG9mIGludDMyX3QgZm9yIHRoZSBn
aXZlbiBmaWVsZCBudW1iZXIuCi0tICh2b2lkKXdyaXRlRW51bUFycmF5OihpbnQzMl90KWZpZWxk
TnVtYmVyCi0gICAgICAgICAgICAgICAgdmFsdWVzOihHUEJFbnVtQXJyYXkgKil2YWx1ZXMKLSAg
ICAgICAgICAgICAgICAgICB0YWc6KHVpbnQzMl90KXRhZzsKLS8vLyBXcml0ZSBhIGludDMyX3Qg
d2l0aG91dCBhbnkgdGFnLgotLSAodm9pZCl3cml0ZUVudW1Ob1RhZzooaW50MzJfdCl2YWx1ZTsK
LQotLy8vIFdyaXRlIGEgTlNTdHJpbmcgZm9yIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIuCi0tICh2
b2lkKXdyaXRlU3RyaW5nOihpbnQzMl90KWZpZWxkTnVtYmVyIHZhbHVlOihOU1N0cmluZyAqKXZh
bHVlOwotLy8vIFdyaXRlIGFuIGFycmF5IG9mIE5TU3RyaW5nIGZvciB0aGUgZ2l2ZW4gZmllbGQg
bnVtYmVyLgotLSAodm9pZCl3cml0ZVN0cmluZ0FycmF5OihpbnQzMl90KWZpZWxkTnVtYmVyIHZh
bHVlczooTlNBcnJheTxOU1N0cmluZyo+ICopdmFsdWVzOwotLy8vIFdyaXRlIGEgTlNTdHJpbmcg
d2l0aG91dCBhbnkgdGFnLgotLSAodm9pZCl3cml0ZVN0cmluZ05vVGFnOihOU1N0cmluZyAqKXZh
bHVlOwotCi0vLy8gV3JpdGUgYSBHUEJNZXNzYWdlIGZvciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVy
LgotLSAodm9pZCl3cml0ZU1lc3NhZ2U6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KEdQQk1l
c3NhZ2UgKil2YWx1ZTsKLS8vLyBXcml0ZSBhbiBhcnJheSBvZiBHUEJNZXNzYWdlIGZvciB0aGUg
Z2l2ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZU1lc3NhZ2VBcnJheTooaW50MzJfdClm
aWVsZE51bWJlciB2YWx1ZXM6KE5TQXJyYXk8R1BCTWVzc2FnZSo+ICopdmFsdWVzOwotLy8vIFdy
aXRlIGEgR1BCTWVzc2FnZSB3aXRob3V0IGFueSB0YWcuCi0tICh2b2lkKXdyaXRlTWVzc2FnZU5v
VGFnOihHUEJNZXNzYWdlICopdmFsdWU7Ci0KLS8vLyBXcml0ZSBhIE5TRGF0YSBmb3IgdGhlIGdp
dmVuIGZpZWxkIG51bWJlci4KLS0gKHZvaWQpd3JpdGVCeXRlczooaW50MzJfdClmaWVsZE51bWJl
ciB2YWx1ZTooTlNEYXRhICopdmFsdWU7Ci0vLy8gV3JpdGUgYW4gYXJyYXkgb2YgTlNEYXRhIGZv
ciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZUJ5dGVzQXJyYXk6KGludDMy
X3QpZmllbGROdW1iZXIgdmFsdWVzOihOU0FycmF5PE5TRGF0YSo+ICopdmFsdWVzOwotLy8vIFdy
aXRlIGEgTlNEYXRhIHdpdGhvdXQgYW55IHRhZy4KLS0gKHZvaWQpd3JpdGVCeXRlc05vVGFnOihO
U0RhdGEgKil2YWx1ZTsKLQotLy8vIFdyaXRlIGEgR1BCTWVzc2FnZSBmb3IgdGhlIGdpdmVuIGZp
ZWxkIG51bWJlci4KLS0gKHZvaWQpd3JpdGVHcm91cDooaW50MzJfdClmaWVsZE51bWJlcgotICAg
ICAgICAgICAgIHZhbHVlOihHUEJNZXNzYWdlICopdmFsdWU7Ci0vLy8gV3JpdGUgYW4gYXJyYXkg
b2YgR1BCTWVzc2FnZSBmb3IgdGhlIGdpdmVuIGZpZWxkIG51bWJlci4KLS0gKHZvaWQpd3JpdGVH
cm91cEFycmF5OihpbnQzMl90KWZpZWxkTnVtYmVyIHZhbHVlczooTlNBcnJheTxHUEJNZXNzYWdl
Kj4gKil2YWx1ZXM7Ci0vLy8gV3JpdGUgYSBHUEJNZXNzYWdlIHdpdGhvdXQgYW55IHRhZyAoYnV0
IGRvZXMgd3JpdGUgdGhlIGVuZEdyb3VwIHRhZykuCi0tICh2b2lkKXdyaXRlR3JvdXBOb1RhZzoo
aW50MzJfdClmaWVsZE51bWJlcgotICAgICAgICAgICAgICAgICAgdmFsdWU6KEdQQk1lc3NhZ2Ug
Kil2YWx1ZTsKLQotLy8vIFdyaXRlIGEgR1BCVW5rbm93bkZpZWxkU2V0IGZvciB0aGUgZ2l2ZW4g
ZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZVVua25vd25Hcm91cDooaW50MzJfdClmaWVsZE51
bWJlcgotICAgICAgICAgICAgICAgICAgICB2YWx1ZTooR1BCVW5rbm93bkZpZWxkU2V0ICopdmFs
dWU7Ci0vLy8gV3JpdGUgYW4gYXJyYXkgb2YgR1BCVW5rbm93bkZpZWxkU2V0IGZvciB0aGUgZ2l2
ZW4gZmllbGQgbnVtYmVyLgotLSAodm9pZCl3cml0ZVVua25vd25Hcm91cEFycmF5OihpbnQzMl90
KWZpZWxkTnVtYmVyIHZhbHVlczooTlNBcnJheTxHUEJVbmtub3duRmllbGRTZXQqPiAqKXZhbHVl
czsKLS8vLyBXcml0ZSBhIEdQQlVua25vd25GaWVsZFNldCB3aXRob3V0IGFueSB0YWcgKGJ1dCBk
b2VzIHdyaXRlIHRoZSBlbmRHcm91cCB0YWcpLgotLSAodm9pZCl3cml0ZVVua25vd25Hcm91cE5v
VGFnOihpbnQzMl90KWZpZWxkTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6
KEdQQlVua25vd25GaWVsZFNldCAqKXZhbHVlOwotCi0vLyVQRERNLUVYUEFORC1FTkQgX1dSSVRF
X0RFQ0xTKCkKLQotLy8vIFdyaXRlIGEgTWVzc2FnZVNldCBleHRlbnNpb24gZmllbGQgdG8gdGhl
IHN0cmVhbS4gRm9yIGhpc3RvcmljYWwgcmVhc29ucywKLS8vLyB0aGUgd2lyZSBmb3JtYXQgZGlm
ZmVycyBmcm9tIG5vcm1hbCBmaWVsZHMuCi0tICh2b2lkKXdyaXRlTWVzc2FnZVNldEV4dGVuc2lv
bjooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZTooR1BCTWVzc2FnZSAqKXZhbHVlOwotCi0vLy8g
V3JpdGUgYW4gdW5wYXJzZWQgTWVzc2FnZVNldCBleHRlbnNpb24gZmllbGQgdG8gdGhlIHN0cmVh
bS4gRm9yCi0vLy8gaGlzdG9yaWNhbCByZWFzb25zLCB0aGUgd2lyZSBmb3JtYXQgZGlmZmVycyBm
cm9tIG5vcm1hbCBmaWVsZHMuCi0tICh2b2lkKXdyaXRlUmF3TWVzc2FnZVNldEV4dGVuc2lvbjoo
aW50MzJfdClmaWVsZE51bWJlciB2YWx1ZTooTlNEYXRhICopdmFsdWU7Ci0KLUBlbmQKLQotTlNf
QVNTVU1FX05PTk5VTExfRU5ECi0KLS8vIFdyaXRlIG1ldGhvZHMgZm9yIHR5cGVzIHRoYXQgY2Fu
IGJlIGluIHBhY2tlZCBhcnJheXMuCi0vLyVQRERNLURFRklORSBfV1JJVEVfUEFDS0FCTEVfREVD
TFMoTkFNRSwgQVJSQVlfVFlQRSwgVFlQRSkKLS8vJS8vLyBXcml0ZSBhIFRZUEUgZm9yIHRoZSBn
aXZlbiBmaWVsZCBudW1iZXIuCi0vLyUtICh2b2lkKXdyaXRlIyNOQU1FOihpbnQzMl90KWZpZWxk
TnVtYmVyIHZhbHVlOihUWVBFKXZhbHVlOwotLy8lLy8vIFdyaXRlIGEgcGFja2VkIGFycmF5IG9m
IFRZUEUgZm9yIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIuCi0vLyUtICh2b2lkKXdyaXRlIyNOQU1F
IyNBcnJheTooaW50MzJfdClmaWVsZE51bWJlcgotLy8lICAgICAgIE5BTUUkUyAgICAgdmFsdWVz
OihHUEIjI0FSUkFZX1RZUEUjI0FycmF5ICopdmFsdWVzCi0vLyUgICAgICAgTkFNRSRTICAgICAg
ICB0YWc6KHVpbnQzMl90KXRhZzsKLS8vJS8vLyBXcml0ZSBhIFRZUEUgd2l0aG91dCBhbnkgdGFn
LgotLy8lLSAodm9pZCl3cml0ZSMjTkFNRSMjTm9UYWc6KFRZUEUpdmFsdWU7Ci0vLyUKLS8vIFdy
aXRlIG1ldGhvZHMgZm9yIHR5cGVzIHRoYXQgYXJlbid0IGluIHBhY2tlZCBhcnJheXMuCi0vLyVQ
RERNLURFRklORSBfV1JJVEVfVU5QQUNLQUJMRV9ERUNMUyhOQU1FLCBUWVBFKQotLy8lLy8vIFdy
aXRlIGEgVFlQRSBmb3IgdGhlIGdpdmVuIGZpZWxkIG51bWJlci4KLS8vJS0gKHZvaWQpd3JpdGUj
I05BTUU6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KFRZUEUgKil2YWx1ZTsKLS8vJS8vLyBX
cml0ZSBhbiBhcnJheSBvZiBUWVBFIGZvciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLy8lLSAo
dm9pZCl3cml0ZSMjTkFNRSMjQXJyYXk6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWVzOihOU0Fy
cmF5PCMjVFlQRSMjKj4gKil2YWx1ZXM7Ci0vLyUvLy8gV3JpdGUgYSBUWVBFIHdpdGhvdXQgYW55
IHRhZy4KLS8vJS0gKHZvaWQpd3JpdGUjI05BTUUjI05vVGFnOihUWVBFICopdmFsdWU7Ci0vLyUK
LS8vIFNwZWNpYWwgd3JpdGUgbWV0aG9kcyBmb3IgR3JvdXBzLgotLy8lUERETS1ERUZJTkUgX1dS
SVRFX0dST1VQX0RFQ0xTKE5BTUUsIFRZUEUpCi0vLyUvLy8gV3JpdGUgYSBUWVBFIGZvciB0aGUg
Z2l2ZW4gZmllbGQgbnVtYmVyLgotLy8lLSAodm9pZCl3cml0ZSMjTkFNRTooaW50MzJfdClmaWVs
ZE51bWJlcgotLy8lICAgICAgIE5BTUUkUyB2YWx1ZTooVFlQRSAqKXZhbHVlOwotLy8lLy8vIFdy
aXRlIGFuIGFycmF5IG9mIFRZUEUgZm9yIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIuCi0vLyUtICh2
b2lkKXdyaXRlIyNOQU1FIyNBcnJheTooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZXM6KE5TQXJy
YXk8IyNUWVBFIyMqPiAqKXZhbHVlczsKLS8vJS8vLyBXcml0ZSBhIFRZUEUgd2l0aG91dCBhbnkg
dGFnIChidXQgZG9lcyB3cml0ZSB0aGUgZW5kR3JvdXAgdGFnKS4KLS8vJS0gKHZvaWQpd3JpdGUj
I05BTUUjI05vVGFnOihpbnQzMl90KWZpZWxkTnVtYmVyCi0vLyUgICAgICAgICAgICBOQU1FJFMg
dmFsdWU6KFRZUEUgKil2YWx1ZTsKLS8vJQotCi0vLyBPbmUgbWFjcm8gdG8gaGlkZSBpdCBhbGwg
dXAgYWJvdmUuCi0vLyVQRERNLURFRklORSBfV1JJVEVfREVDTFMoKQotLy8lX1dSSVRFX1BBQ0tB
QkxFX0RFQ0xTKERvdWJsZSwgRG91YmxlLCBkb3VibGUpCi0vLyVfV1JJVEVfUEFDS0FCTEVfREVD
TFMoRmxvYXQsIEZsb2F0LCBmbG9hdCkKLS8vJV9XUklURV9QQUNLQUJMRV9ERUNMUyhVSW50NjQs
IFVJbnQ2NCwgdWludDY0X3QpCi0vLyVfV1JJVEVfUEFDS0FCTEVfREVDTFMoSW50NjQsIEludDY0
LCBpbnQ2NF90KQotLy8lX1dSSVRFX1BBQ0tBQkxFX0RFQ0xTKEludDMyLCBJbnQzMiwgaW50MzJf
dCkKLS8vJV9XUklURV9QQUNLQUJMRV9ERUNMUyhVSW50MzIsIFVJbnQzMiwgdWludDMyX3QpCi0v
LyVfV1JJVEVfUEFDS0FCTEVfREVDTFMoRml4ZWQ2NCwgVUludDY0LCB1aW50NjRfdCkKLS8vJV9X
UklURV9QQUNLQUJMRV9ERUNMUyhGaXhlZDMyLCBVSW50MzIsIHVpbnQzMl90KQotLy8lX1dSSVRF
X1BBQ0tBQkxFX0RFQ0xTKFNJbnQzMiwgSW50MzIsIGludDMyX3QpCi0vLyVfV1JJVEVfUEFDS0FC
TEVfREVDTFMoU0ludDY0LCBJbnQ2NCwgaW50NjRfdCkKLS8vJV9XUklURV9QQUNLQUJMRV9ERUNM
UyhTRml4ZWQ2NCwgSW50NjQsIGludDY0X3QpCi0vLyVfV1JJVEVfUEFDS0FCTEVfREVDTFMoU0Zp
eGVkMzIsIEludDMyLCBpbnQzMl90KQotLy8lX1dSSVRFX1BBQ0tBQkxFX0RFQ0xTKEJvb2wsIEJv
b2wsIEJPT0wpCi0vLyVfV1JJVEVfUEFDS0FCTEVfREVDTFMoRW51bSwgRW51bSwgaW50MzJfdCkK
LS8vJV9XUklURV9VTlBBQ0tBQkxFX0RFQ0xTKFN0cmluZywgTlNTdHJpbmcpCi0vLyVfV1JJVEVf
VU5QQUNLQUJMRV9ERUNMUyhNZXNzYWdlLCBHUEJNZXNzYWdlKQotLy8lX1dSSVRFX1VOUEFDS0FC
TEVfREVDTFMoQnl0ZXMsIE5TRGF0YSkKLS8vJV9XUklURV9HUk9VUF9ERUNMUyhHcm91cCwgR1BC
TWVzc2FnZSkKLS8vJV9XUklURV9HUk9VUF9ERUNMUyhVbmtub3duR3JvdXAsIEdQQlVua25vd25G
aWVsZFNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJDb2RlZE91dHB1dFN0cmVhbS5tIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9v
YmplY3RpdmVjL0dQQkNvZGVkT3V0cHV0U3RyZWFtLm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGZkOWVkNjZjYTIzYjQ5NDYyMmM2NWQ2NDY3MGMyNjU3ZjFjYzBkNzYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkNvZGVk
T3V0cHV0U3RyZWFtLm0KKysrIC9kZXYvbnVsbApAQCAtMSwxMjIxICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW1wb3J0ICJHUEJDb2RlZE91dHB1dFN0cmVh
bV9QYWNrYWdlUHJpdmF0ZS5oIgotCi0jaW1wb3J0IDxtYWNoL3ZtX3BhcmFtLmg+Ci0KLSNpbXBv
cnQgIkdQQkFycmF5LmgiCi0jaW1wb3J0ICJHUEJVbmtub3duRmllbGRTZXRfUGFja2FnZVByaXZh
dGUuaCIKLSNpbXBvcnQgIkdQQlV0aWxpdGllc19QYWNrYWdlUHJpdmF0ZS5oIgotCi0vLyBTdHJ1
Y3R1cmUgZm9yIGNvbnRhaW5pbmcgc3RhdGUgb2YgYSBHUEJDb2RlZElucHV0U3RyZWFtLiBCcm91
Z2h0IG91dCBpbnRvCi0vLyBhIHN0cnVjdCBzbyB0aGF0IHdlIGNhbiBpbmxpbmUgc2V2ZXJhbCBj
b21tb24gZnVuY3Rpb25zIGluc3RlYWQgb2YgZGVhbGluZwotLy8gd2l0aCBvdmVyaGVhZCBvZiBP
YmpDIGRpc3BhdGNoLgotdHlwZWRlZiBzdHJ1Y3QgR1BCT3V0cHV0QnVmZmVyU3RhdGUgewotICB1
aW50OF90ICpieXRlczsKLSAgc2l6ZV90IHNpemU7Ci0gIHNpemVfdCBwb3NpdGlvbjsKLSAgTlNP
dXRwdXRTdHJlYW0gKm91dHB1dDsKLX0gR1BCT3V0cHV0QnVmZmVyU3RhdGU7Ci0KLUBpbXBsZW1l
bnRhdGlvbiBHUEJDb2RlZE91dHB1dFN0cmVhbSB7Ci0gIEdQQk91dHB1dEJ1ZmZlclN0YXRlIHN0
YXRlXzsKLSAgTlNNdXRhYmxlRGF0YSAqYnVmZmVyXzsKLX0KLQotc3RhdGljIGNvbnN0IGludDMy
X3QgTElUVExFX0VORElBTl8zMl9TSVpFID0gc2l6ZW9mKHVpbnQzMl90KTsKLXN0YXRpYyBjb25z
dCBpbnQzMl90IExJVFRMRV9FTkRJQU5fNjRfU0laRSA9IHNpemVvZih1aW50NjRfdCk7Ci0KLS8v
IEludGVybmFsIGhlbHBlciB0aGF0IHdyaXRlcyB0aGUgY3VycmVudCBidWZmZXIgdG8gdGhlIG91
dHB1dC4gVGhlCi0vLyBidWZmZXIgcG9zaXRpb24gaXMgcmVzZXQgdG8gaXRzIGluaXRpYWwgdmFs
dWUgd2hlbiB0aGlzIHJldHVybnMuCi1zdGF0aWMgdm9pZCBHUEJSZWZyZXNoQnVmZmVyKEdQQk91
dHB1dEJ1ZmZlclN0YXRlICpzdGF0ZSkgewotICBpZiAoc3RhdGUtPm91dHB1dCA9PSBuaWwpIHsK
LSAgICAvLyBXZSdyZSB3cml0aW5nIHRvIGEgc2luZ2xlIGJ1ZmZlci4KLSAgICBbTlNFeGNlcHRp
b24gcmFpc2U6QCJPdXRPZlNwYWNlIiBmb3JtYXQ6QCIiXTsKLSAgfQotICBpZiAoc3RhdGUtPnBv
c2l0aW9uICE9IDApIHsKLSAgICBOU0ludGVnZXIgd3JpdHRlbiA9Ci0gICAgICAgIFtzdGF0ZS0+
b3V0cHV0IHdyaXRlOnN0YXRlLT5ieXRlcyBtYXhMZW5ndGg6c3RhdGUtPnBvc2l0aW9uXTsKLSAg
ICBpZiAod3JpdHRlbiAhPSAoTlNJbnRlZ2VyKXN0YXRlLT5wb3NpdGlvbikgewotICAgICAgW05T
RXhjZXB0aW9uIHJhaXNlOkAiV3JpdGVGYWlsZWQiIGZvcm1hdDpAIiJdOwotICAgIH0KLSAgICBz
dGF0ZS0+cG9zaXRpb24gPSAwOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIEdQQldyaXRlUmF3Qnl0
ZShHUEJPdXRwdXRCdWZmZXJTdGF0ZSAqc3RhdGUsIHVpbnQ4X3QgdmFsdWUpIHsKLSAgaWYgKHN0
YXRlLT5wb3NpdGlvbiA9PSBzdGF0ZS0+c2l6ZSkgewotICAgIEdQQlJlZnJlc2hCdWZmZXIoc3Rh
dGUpOwotICB9Ci0gIHN0YXRlLT5ieXRlc1tzdGF0ZS0+cG9zaXRpb24rK10gPSB2YWx1ZTsKLX0K
LQotc3RhdGljIHZvaWQgR1BCV3JpdGVSYXdWYXJpbnQzMihHUEJPdXRwdXRCdWZmZXJTdGF0ZSAq
c3RhdGUsIGludDMyX3QgdmFsdWUpIHsKLSAgd2hpbGUgKFlFUykgewotICAgIGlmICgodmFsdWUg
JiB+MHg3RikgPT0gMCkgewotICAgICAgdWludDhfdCB2YWwgPSAodWludDhfdCl2YWx1ZTsKLSAg
ICAgIEdQQldyaXRlUmF3Qnl0ZShzdGF0ZSwgdmFsKTsKLSAgICAgIHJldHVybjsKLSAgICB9IGVs
c2UgewotICAgICAgR1BCV3JpdGVSYXdCeXRlKHN0YXRlLCAodmFsdWUgJiAweDdGKSB8IDB4ODAp
OwotICAgICAgdmFsdWUgPSBHUEJMb2dpY2FsUmlnaHRTaGlmdDMyKHZhbHVlLCA3KTsKLSAgICB9
Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgR1BCV3JpdGVSYXdWYXJpbnQ2NChHUEJPdXRwdXRCdWZm
ZXJTdGF0ZSAqc3RhdGUsIGludDY0X3QgdmFsdWUpIHsKLSAgd2hpbGUgKFlFUykgewotICAgIGlm
ICgodmFsdWUgJiB+MHg3RkwpID09IDApIHsKLSAgICAgIHVpbnQ4X3QgdmFsID0gKHVpbnQ4X3Qp
dmFsdWU7Ci0gICAgICBHUEJXcml0ZVJhd0J5dGUoc3RhdGUsIHZhbCk7Ci0gICAgICByZXR1cm47
Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdQQldyaXRlUmF3Qnl0ZShzdGF0ZSwgKChpbnQzMl90KXZh
bHVlICYgMHg3RikgfCAweDgwKTsKLSAgICAgIHZhbHVlID0gR1BCTG9naWNhbFJpZ2h0U2hpZnQ2
NCh2YWx1ZSwgNyk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIEdQQldyaXRlSW50MzJO
b1RhZyhHUEJPdXRwdXRCdWZmZXJTdGF0ZSAqc3RhdGUsIGludDMyX3QgdmFsdWUpIHsKLSAgaWYg
KHZhbHVlID49IDApIHsKLSAgICBHUEJXcml0ZVJhd1ZhcmludDMyKHN0YXRlLCB2YWx1ZSk7Ci0g
IH0gZWxzZSB7Ci0gICAgLy8gTXVzdCBzaWduLWV4dGVuZAotICAgIEdQQldyaXRlUmF3VmFyaW50
NjQoc3RhdGUsIHZhbHVlKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBHUEJXcml0ZVVJbnQzMihH
UEJPdXRwdXRCdWZmZXJTdGF0ZSAqc3RhdGUsIGludDMyX3QgZmllbGROdW1iZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSkgewotICBHUEJXcml0ZVRhZ1dpdGhG
b3JtYXQoc3RhdGUsIGZpZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0VmFyaW50KTsKLSAgR1BCV3Jp
dGVSYXdWYXJpbnQzMihzdGF0ZSwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBHUEJXcml0ZVRh
Z1dpdGhGb3JtYXQoR1BCT3V0cHV0QnVmZmVyU3RhdGUgKnN0YXRlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZpZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0IGZv
cm1hdCkgewotICBHUEJXcml0ZVJhd1ZhcmludDMyKHN0YXRlLCBHUEJXaXJlRm9ybWF0TWFrZVRh
ZyhmaWVsZE51bWJlciwgZm9ybWF0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIEdQQldyaXRlUmF3TGl0
dGxlRW5kaWFuMzIoR1BCT3V0cHV0QnVmZmVyU3RhdGUgKnN0YXRlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHZhbHVlKSB7Ci0gIEdQQldyaXRlUmF3Qnl0
ZShzdGF0ZSwgKHZhbHVlKSYweEZGKTsKLSAgR1BCV3JpdGVSYXdCeXRlKHN0YXRlLCAodmFsdWUg
Pj4gOCkgJiAweEZGKTsKLSAgR1BCV3JpdGVSYXdCeXRlKHN0YXRlLCAodmFsdWUgPj4gMTYpICYg
MHhGRik7Ci0gIEdQQldyaXRlUmF3Qnl0ZShzdGF0ZSwgKHZhbHVlID4+IDI0KSAmIDB4RkYpOwot
fQotCi1zdGF0aWMgdm9pZCBHUEJXcml0ZVJhd0xpdHRsZUVuZGlhbjY0KEdQQk91dHB1dEJ1ZmZl
clN0YXRlICpzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
NjRfdCB2YWx1ZSkgewotICBHUEJXcml0ZVJhd0J5dGUoc3RhdGUsIChpbnQzMl90KSh2YWx1ZSkm
MHhGRik7Ci0gIEdQQldyaXRlUmF3Qnl0ZShzdGF0ZSwgKGludDMyX3QpKHZhbHVlID4+IDgpICYg
MHhGRik7Ci0gIEdQQldyaXRlUmF3Qnl0ZShzdGF0ZSwgKGludDMyX3QpKHZhbHVlID4+IDE2KSAm
IDB4RkYpOwotICBHUEJXcml0ZVJhd0J5dGUoc3RhdGUsIChpbnQzMl90KSh2YWx1ZSA+PiAyNCkg
JiAweEZGKTsKLSAgR1BCV3JpdGVSYXdCeXRlKHN0YXRlLCAoaW50MzJfdCkodmFsdWUgPj4gMzIp
ICYgMHhGRik7Ci0gIEdQQldyaXRlUmF3Qnl0ZShzdGF0ZSwgKGludDMyX3QpKHZhbHVlID4+IDQw
KSAmIDB4RkYpOwotICBHUEJXcml0ZVJhd0J5dGUoc3RhdGUsIChpbnQzMl90KSh2YWx1ZSA+PiA0
OCkgJiAweEZGKTsKLSAgR1BCV3JpdGVSYXdCeXRlKHN0YXRlLCAoaW50MzJfdCkodmFsdWUgPj4g
NTYpICYgMHhGRik7Ci19Ci0KLSNpZiBERUJVRyAmJiAhZGVmaW5lZChOU19CTE9DS19BU1NFUlRJ
T05TKQotKyAodm9pZClsb2FkIHsKLSAgLy8gVGhpcyB0ZXN0IGV4aXN0cyB0byB2ZXJpZnkgdGhh
dCBDRlN0cmluZ3Mgd2l0aCBlbWJlZGRlZCBOVUxMcyB3aWxsIHdvcmsKLSAgLy8gZm9yIHVzLiBJ
ZiB0aGlzIEFzc2VydCBmYWlscywgYWxsIGNvZGUgYmVsb3cgdGhhdCBkZXBlbmRzIG9uCi0gIC8v
IENGU3RyaW5nR2V0Q1N0cmluZ1B0ciB3aWxsIE5PVCB3b3JrIHByb3Blcmx5IG9uIHN0cmluZ3Mg
dGhhdCBjb250YWluCi0gIC8vIGVtYmVkZGVkIE5VTExzLCBhbmQgd2UgZG8gZ2V0IHRoYXQgaW4g
c29tZSBwcm90b2J1ZnMuCi0gIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IGJlIGNvbXBpbGVk
IGluIHJlbGVhc2UuCi0gIC8vIFdlIGRpZG4ndCBmZWVsIHRoYXQganVzdCBrZWVwaW5nIGl0IGlu
IGEgdW5pdCB0ZXN0IHdhcyBzdWZmaWNpZW50IGJlY2F1c2UKLSAgLy8gdGhlIFByb3RvYnVmIHVu
aXQgdGVzdHMgYXJlIG9ubHkgcnVuIHdoZW4gc29tZWJvZHkgaXMgYWN0dWFsbHkgd29ya2luZwot
ICAvLyBvbiBwcm90b2J1ZnMuCi0gIENGU3RyaW5nUmVmIHplcm9UZXN0ID0gQ0ZTVFIoIlRlc3Rc
MFN0cmluZyIpOwotICBjb25zdCBjaGFyICpjU3RyaW5nID0gQ0ZTdHJpbmdHZXRDU3RyaW5nUHRy
KHplcm9UZXN0LCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOwotICBOU0Fzc2VydChjU3RyaW5nID09
IE5VTEwsIEAiU2VyaW91cyBFcnJvciIpOwotfQotI2VuZGlmICAvLyBERUJVRyAmJiAhZGVmaW5l
ZChOU19CTE9DS19BU1NFUlRJT05TKQotCi0tICh2b2lkKWRlYWxsb2MgewotICBbc2VsZiBmbHVz
aF07Ci0gIFtzdGF0ZV8ub3V0cHV0IGNsb3NlXTsKLSAgW3N0YXRlXy5vdXRwdXQgcmVsZWFzZV07
Ci0gIFtidWZmZXJfIHJlbGVhc2VdOwotCi0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoT3V0cHV0U3RyZWFtOihOU091dHB1dFN0cmVhbSAqKW91dHB1dCB7
Ci0gIE5TTXV0YWJsZURhdGEgKmRhdGEgPSBbTlNNdXRhYmxlRGF0YSBkYXRhV2l0aExlbmd0aDpQ
QUdFX1NJWkVdOwotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhPdXRwdXRTdHJlYW06b3V0cHV0IGRh
dGE6ZGF0YV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERhdGE6KE5TTXV0YWJsZURh
dGEgKilkYXRhIHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoT3V0cHV0U3RyZWFtOm5pbCBkYXRh
OmRhdGFdOwotfQotCi0vLyBUaGlzIGluaXRpYWxpemVyIGlzbid0IGV4cG9zZWQsIGJ1dCBpdCBp
cyB0aGUgZGVzaWduYXRlZCBpbml0aWFsaXplci4KLS8vIFNldHRpbmcgT3V0cHV0U3RyZWFtIGFu
ZCBOU0RhdGEgaXMgdG8gY29udHJvbCB0aGUgYnVmZmVyaW5nIGJlaGF2aW9yL3NpemUKLS8vIG9m
IHRoZSB3b3JrLCBidXQgdGhhdCBpcyBtb3JlIG9idmlvdXMgdmlhIHRoZSBidWZmZXJTaXplOiB2
ZXJzaW9uLgotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT3V0cHV0U3RyZWFtOihOU091dHB1dFN0
cmVhbSAqKW91dHB1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOihOU011
dGFibGVEYXRhICopZGF0YSB7Ci0gIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICBi
dWZmZXJfID0gW2RhdGEgcmV0YWluXTsKLSAgICBbb3V0cHV0IG9wZW5dOwotICAgIHN0YXRlXy5i
eXRlcyA9IFtkYXRhIG11dGFibGVCeXRlc107Ci0gICAgc3RhdGVfLnNpemUgPSBbZGF0YSBsZW5n
dGhdOwotICAgIHN0YXRlXy5vdXRwdXQgPSBbb3V0cHV0IHJldGFpbl07Ci0gIH0KLSAgcmV0dXJu
IHNlbGY7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlzdHJlYW1XaXRoT3V0cHV0U3RyZWFtOihOU091
dHB1dFN0cmVhbSAqKW91dHB1dCB7Ci0gIE5TTXV0YWJsZURhdGEgKmRhdGEgPSBbTlNNdXRhYmxl
RGF0YSBkYXRhV2l0aExlbmd0aDpQQUdFX1NJWkVdOwotICByZXR1cm4gW1tbc2VsZiBhbGxvY10g
aW5pdFdpdGhPdXRwdXRTdHJlYW06b3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YTpkYXRhXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlzdHJlYW1XaXRoRGF0YTooTlNNdXRhYmxlRGF0YSAqKWRhdGEgewotICByZXR1cm4gW1tbc2Vs
ZiBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAodm9pZCl3
cml0ZURvdWJsZU5vVGFnOihkb3VibGUpdmFsdWUgewotICBHUEJXcml0ZVJhd0xpdHRsZUVuZGlh
bjY0KCZzdGF0ZV8sIEdQQkNvbnZlcnREb3VibGVUb0ludDY0KHZhbHVlKSk7Ci19Ci0KLS0gKHZv
aWQpd3JpdGVEb3VibGU6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KGRvdWJsZSl2YWx1ZSB7
Ci0gIEdQQldyaXRlVGFnV2l0aEZvcm1hdCgmc3RhdGVfLCBmaWVsZE51bWJlciwgR1BCV2lyZUZv
cm1hdEZpeGVkNjQpOwotICBHUEJXcml0ZVJhd0xpdHRsZUVuZGlhbjY0KCZzdGF0ZV8sIEdQQkNv
bnZlcnREb3VibGVUb0ludDY0KHZhbHVlKSk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVGbG9hdE5vVGFn
OihmbG9hdCl2YWx1ZSB7Ci0gIEdQQldyaXRlUmF3TGl0dGxlRW5kaWFuMzIoJnN0YXRlXywgR1BC
Q29udmVydEZsb2F0VG9JbnQzMih2YWx1ZSkpOwotfQotCi0tICh2b2lkKXdyaXRlRmxvYXQ6KGlu
dDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KGZsb2F0KXZhbHVlIHsKLSAgR1BCV3JpdGVUYWdXaXRo
Rm9ybWF0KCZzdGF0ZV8sIGZpZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0Rml4ZWQzMik7Ci0gIEdQ
QldyaXRlUmF3TGl0dGxlRW5kaWFuMzIoJnN0YXRlXywgR1BCQ29udmVydEZsb2F0VG9JbnQzMih2
YWx1ZSkpOwotfQotCi0tICh2b2lkKXdyaXRlVUludDY0Tm9UYWc6KHVpbnQ2NF90KXZhbHVlIHsK
LSAgR1BCV3JpdGVSYXdWYXJpbnQ2NCgmc3RhdGVfLCB2YWx1ZSk7Ci19Ci0KLS0gKHZvaWQpd3Jp
dGVVSW50NjQ6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KHVpbnQ2NF90KXZhbHVlIHsKLSAg
R1BCV3JpdGVUYWdXaXRoRm9ybWF0KCZzdGF0ZV8sIGZpZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0
VmFyaW50KTsKLSAgR1BCV3JpdGVSYXdWYXJpbnQ2NCgmc3RhdGVfLCB2YWx1ZSk7Ci19Ci0KLS0g
KHZvaWQpd3JpdGVJbnQ2NE5vVGFnOihpbnQ2NF90KXZhbHVlIHsKLSAgR1BCV3JpdGVSYXdWYXJp
bnQ2NCgmc3RhdGVfLCB2YWx1ZSk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVJbnQ2NDooaW50MzJfdClm
aWVsZE51bWJlciB2YWx1ZTooaW50NjRfdCl2YWx1ZSB7Ci0gIEdQQldyaXRlVGFnV2l0aEZvcm1h
dCgmc3RhdGVfLCBmaWVsZE51bWJlciwgR1BCV2lyZUZvcm1hdFZhcmludCk7Ci0gIEdQQldyaXRl
UmF3VmFyaW50NjQoJnN0YXRlXywgdmFsdWUpOwotfQotCi0tICh2b2lkKXdyaXRlSW50MzJOb1Rh
ZzooaW50MzJfdCl2YWx1ZSB7Ci0gIEdQQldyaXRlSW50MzJOb1RhZygmc3RhdGVfLCB2YWx1ZSk7
Ci19Ci0KLS0gKHZvaWQpd3JpdGVJbnQzMjooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZTooaW50
MzJfdCl2YWx1ZSB7Ci0gIEdQQldyaXRlVGFnV2l0aEZvcm1hdCgmc3RhdGVfLCBmaWVsZE51bWJl
ciwgR1BCV2lyZUZvcm1hdFZhcmludCk7Ci0gIEdQQldyaXRlSW50MzJOb1RhZygmc3RhdGVfLCB2
YWx1ZSk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVGaXhlZDY0Tm9UYWc6KHVpbnQ2NF90KXZhbHVlIHsK
LSAgR1BCV3JpdGVSYXdMaXR0bGVFbmRpYW42NCgmc3RhdGVfLCB2YWx1ZSk7Ci19Ci0KLS0gKHZv
aWQpd3JpdGVGaXhlZDY0OihpbnQzMl90KWZpZWxkTnVtYmVyIHZhbHVlOih1aW50NjRfdCl2YWx1
ZSB7Ci0gIEdQQldyaXRlVGFnV2l0aEZvcm1hdCgmc3RhdGVfLCBmaWVsZE51bWJlciwgR1BCV2ly
ZUZvcm1hdEZpeGVkNjQpOwotICBHUEJXcml0ZVJhd0xpdHRsZUVuZGlhbjY0KCZzdGF0ZV8sIHZh
bHVlKTsKLX0KLQotLSAodm9pZCl3cml0ZUZpeGVkMzJOb1RhZzoodWludDMyX3QpdmFsdWUgewot
ICBHUEJXcml0ZVJhd0xpdHRsZUVuZGlhbjMyKCZzdGF0ZV8sIHZhbHVlKTsKLX0KLQotLSAodm9p
ZCl3cml0ZUZpeGVkMzI6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KHVpbnQzMl90KXZhbHVl
IHsKLSAgR1BCV3JpdGVUYWdXaXRoRm9ybWF0KCZzdGF0ZV8sIGZpZWxkTnVtYmVyLCBHUEJXaXJl
Rm9ybWF0Rml4ZWQzMik7Ci0gIEdQQldyaXRlUmF3TGl0dGxlRW5kaWFuMzIoJnN0YXRlXywgdmFs
dWUpOwotfQotCi0tICh2b2lkKXdyaXRlQm9vbE5vVGFnOihCT09MKXZhbHVlIHsKLSAgR1BCV3Jp
dGVSYXdCeXRlKCZzdGF0ZV8sICh2YWx1ZSA/IDEgOiAwKSk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVC
b29sOihpbnQzMl90KWZpZWxkTnVtYmVyIHZhbHVlOihCT09MKXZhbHVlIHsKLSAgR1BCV3JpdGVU
YWdXaXRoRm9ybWF0KCZzdGF0ZV8sIGZpZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0VmFyaW50KTsK
LSAgR1BCV3JpdGVSYXdCeXRlKCZzdGF0ZV8sICh2YWx1ZSA/IDEgOiAwKSk7Ci19Ci0KLS0gKHZv
aWQpd3JpdGVTdHJpbmdOb1RhZzooY29uc3QgTlNTdHJpbmcgKil2YWx1ZSB7Ci0gIC8vIElmIHlv
dSBhcmUgY29uY2VybmVkIGFib3V0IGVtYmVkZGVkIE5VTExzIHNlZSB0aGUgdGVzdCBpbgotICAv
LyArbG9hZCBhYm92ZS4KLSAgY29uc3QgY2hhciAqcXVpY2tTdHJpbmcgPQotICAgICAgQ0ZTdHJp
bmdHZXRDU3RyaW5nUHRyKChDRlN0cmluZ1JlZil2YWx1ZSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4
KTsKLSAgc2l6ZV90IGxlbmd0aCA9IChxdWlja1N0cmluZyAhPSBOVUxMKQotICAgICAgICAgICAg
ICAgICAgICAgID8gc3RybGVuKHF1aWNrU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICAgIDog
W3ZhbHVlIGxlbmd0aE9mQnl0ZXNVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsK
LSAgR1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCAoaW50MzJfdClsZW5ndGgpOwotCi0gIGlm
IChsZW5ndGggPT0gMCkgewotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIEZhc3QgcGF0aDogTW9z
dCBzdHJpbmdzIGFyZSBzaG9ydCwgaWYgdGhlIGJ1ZmZlciBhbHJlYWR5IGhhcyBzcGFjZSwKLSAg
Ly8gYWRkIHRvIGl0IGRpcmVjdGx5LgotICBOU1VJbnRlZ2VyIGJ1ZmZlckJ5dGVzTGVmdCA9IHN0
YXRlXy5zaXplIC0gc3RhdGVfLnBvc2l0aW9uOwotICBpZiAoYnVmZmVyQnl0ZXNMZWZ0ID49IGxl
bmd0aCkgewotICAgIE5TVUludGVnZXIgdXNlZEJ1ZmZlckxlbmd0aCA9IDA7Ci0gICAgQk9PTCBy
ZXN1bHQ7Ci0gICAgaWYgKHF1aWNrU3RyaW5nICE9IE5VTEwpIHsKLSAgICAgIG1lbWNweShzdGF0
ZV8uYnl0ZXMgKyBzdGF0ZV8ucG9zaXRpb24sIHF1aWNrU3RyaW5nLCBsZW5ndGgpOwotICAgICAg
dXNlZEJ1ZmZlckxlbmd0aCA9IGxlbmd0aDsKLSAgICAgIHJlc3VsdCA9IFlFUzsKLSAgICB9IGVs
c2UgewotICAgICAgcmVzdWx0ID0gW3ZhbHVlIGdldEJ5dGVzOnN0YXRlXy5ieXRlcyArIHN0YXRl
Xy5wb3NpdGlvbgotICAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoOmJ1ZmZlckJ5dGVzTGVm
dAotICAgICAgICAgICAgICAgICAgICB1c2VkTGVuZ3RoOiZ1c2VkQnVmZmVyTGVuZ3RoCi0gICAg
ICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcKLSAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uczowCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgW3ZhbHVlIGxlbmd0aF0pCi0gICAgICAgICAgICAgICAgcmVtYWluaW5n
UmFuZ2U6TlVMTF07Ci0gICAgfQotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgIE5TQXNzZXJ0Migo
dXNlZEJ1ZmZlckxlbmd0aCA9PSBsZW5ndGgpLAotICAgICAgICAgICAgICAgIEAiT3VyIFVURjgg
Y2FsYyB3YXMgd3Jvbmc/ICV0dSB2cyAlemQiLCB1c2VkQnVmZmVyTGVuZ3RoLAotICAgICAgICAg
ICAgICAgIGxlbmd0aCk7Ci0gICAgICBzdGF0ZV8ucG9zaXRpb24gKz0gdXNlZEJ1ZmZlckxlbmd0
aDsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0gZWxzZSBpZiAocXVpY2tTdHJpbmcgIT0gTlVM
TCkgewotICAgIFtzZWxmIHdyaXRlUmF3UHRyOnF1aWNrU3RyaW5nIG9mZnNldDowIGxlbmd0aDps
ZW5ndGhdOwotICB9IGVsc2UgewotICAgIC8vIFNsb3cgcGF0aDoganVzdCBnZXQgaXQgYXMgZGF0
YSBhbmQgd3JpdGUgaXQgb3V0LgotICAgIE5TRGF0YSAqdXRmOERhdGEgPSBbdmFsdWUgZGF0YVVz
aW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIE5TQXNzZXJ0MigoW3V0ZjhE
YXRhIGxlbmd0aF0gPT0gbGVuZ3RoKSwKLSAgICAgICAgICAgICAgQCJTdHJpbmdzIFVURjggbGVu
Z3RoIHdhcyB3cm9uZz8gJXR1IHZzICV6ZCIsIFt1dGY4RGF0YSBsZW5ndGhdLAotICAgICAgICAg
ICAgICBsZW5ndGgpOwotICAgIFtzZWxmIHdyaXRlUmF3RGF0YTp1dGY4RGF0YV07Ci0gIH0KLX0K
LQotLSAodm9pZCl3cml0ZVN0cmluZzooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZTooTlNTdHJp
bmcgKil2YWx1ZSB7Ci0gIEdQQldyaXRlVGFnV2l0aEZvcm1hdCgmc3RhdGVfLCBmaWVsZE51bWJl
ciwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtzZWxmIHdyaXRlU3RyaW5nTm9U
YWc6dmFsdWVdOwotfQotCi0tICh2b2lkKXdyaXRlR3JvdXBOb1RhZzooaW50MzJfdClmaWVsZE51
bWJlciB2YWx1ZTooR1BCTWVzc2FnZSAqKXZhbHVlIHsKLSAgW3ZhbHVlIHdyaXRlVG9Db2RlZE91
dHB1dFN0cmVhbTpzZWxmXTsKLSAgR1BCV3JpdGVUYWdXaXRoRm9ybWF0KCZzdGF0ZV8sIGZpZWxk
TnVtYmVyLCBHUEJXaXJlRm9ybWF0RW5kR3JvdXApOwotfQotCi0tICh2b2lkKXdyaXRlR3JvdXA6
KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWU6KEdQQk1lc3NhZ2UgKil2YWx1ZSB7Ci0gIEdQQldy
aXRlVGFnV2l0aEZvcm1hdCgmc3RhdGVfLCBmaWVsZE51bWJlciwgR1BCV2lyZUZvcm1hdFN0YXJ0
R3JvdXApOwotICBbc2VsZiB3cml0ZUdyb3VwTm9UYWc6ZmllbGROdW1iZXIgdmFsdWU6dmFsdWVd
OwotfQotCi0tICh2b2lkKXdyaXRlVW5rbm93bkdyb3VwTm9UYWc6KGludDMyX3QpZmllbGROdW1i
ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTooY29uc3QgR1BCVW5rbm93bkZpZWxk
U2V0ICopdmFsdWUgewotICBbdmFsdWUgd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOnNlbGZdOwot
ICBHUEJXcml0ZVRhZ1dpdGhGb3JtYXQoJnN0YXRlXywgZmllbGROdW1iZXIsIEdQQldpcmVGb3Jt
YXRFbmRHcm91cCk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVVbmtub3duR3JvdXA6KGludDMyX3QpZmll
bGROdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU6KEdQQlVua25vd25GaWVsZFNldCAq
KXZhbHVlIHsKLSAgR1BCV3JpdGVUYWdXaXRoRm9ybWF0KCZzdGF0ZV8sIGZpZWxkTnVtYmVyLCBH
UEJXaXJlRm9ybWF0U3RhcnRHcm91cCk7Ci0gIFtzZWxmIHdyaXRlVW5rbm93bkdyb3VwTm9UYWc6
ZmllbGROdW1iZXIgdmFsdWU6dmFsdWVdOwotfQotCi0tICh2b2lkKXdyaXRlTWVzc2FnZU5vVGFn
OihHUEJNZXNzYWdlICopdmFsdWUgewotICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIChp
bnQzMl90KVt2YWx1ZSBzZXJpYWxpemVkU2l6ZV0pOwotICBbdmFsdWUgd3JpdGVUb0NvZGVkT3V0
cHV0U3RyZWFtOnNlbGZdOwotfQotCi0tICh2b2lkKXdyaXRlTWVzc2FnZTooaW50MzJfdClmaWVs
ZE51bWJlciB2YWx1ZTooR1BCTWVzc2FnZSAqKXZhbHVlIHsKLSAgR1BCV3JpdGVUYWdXaXRoRm9y
bWF0KCZzdGF0ZV8sIGZpZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsK
LSAgW3NlbGYgd3JpdGVNZXNzYWdlTm9UYWc6dmFsdWVdOwotfQotCi0tICh2b2lkKXdyaXRlQnl0
ZXNOb1RhZzooTlNEYXRhICopdmFsdWUgewotICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8s
IChpbnQzMl90KVt2YWx1ZSBsZW5ndGhdKTsKLSAgW3NlbGYgd3JpdGVSYXdEYXRhOnZhbHVlXTsK
LX0KLQotLSAodm9pZCl3cml0ZUJ5dGVzOihpbnQzMl90KWZpZWxkTnVtYmVyIHZhbHVlOihOU0Rh
dGEgKil2YWx1ZSB7Ci0gIEdQQldyaXRlVGFnV2l0aEZvcm1hdCgmc3RhdGVfLCBmaWVsZE51bWJl
ciwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtzZWxmIHdyaXRlQnl0ZXNOb1Rh
Zzp2YWx1ZV07Ci19Ci0KLS0gKHZvaWQpd3JpdGVVSW50MzJOb1RhZzoodWludDMyX3QpdmFsdWUg
ewotICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIHZhbHVlKTsKLX0KLQotLSAodm9pZCl3
cml0ZVVJbnQzMjooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZToodWludDMyX3QpdmFsdWUgewot
ICBHUEJXcml0ZVVJbnQzMigmc3RhdGVfLCBmaWVsZE51bWJlciwgdmFsdWUpOwotfQotCi0tICh2
b2lkKXdyaXRlRW51bU5vVGFnOihpbnQzMl90KXZhbHVlIHsKLSAgR1BCV3JpdGVSYXdWYXJpbnQz
Migmc3RhdGVfLCB2YWx1ZSk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVFbnVtOihpbnQzMl90KWZpZWxk
TnVtYmVyIHZhbHVlOihpbnQzMl90KXZhbHVlIHsKLSAgR1BCV3JpdGVUYWdXaXRoRm9ybWF0KCZz
dGF0ZV8sIGZpZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0VmFyaW50KTsKLSAgR1BCV3JpdGVSYXdW
YXJpbnQzMigmc3RhdGVfLCB2YWx1ZSk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVTRml4ZWQzMk5vVGFn
OihpbnQzMl90KXZhbHVlIHsKLSAgR1BCV3JpdGVSYXdMaXR0bGVFbmRpYW4zMigmc3RhdGVfLCB2
YWx1ZSk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVTRml4ZWQzMjooaW50MzJfdClmaWVsZE51bWJlciB2
YWx1ZTooaW50MzJfdCl2YWx1ZSB7Ci0gIEdQQldyaXRlVGFnV2l0aEZvcm1hdCgmc3RhdGVfLCBm
aWVsZE51bWJlciwgR1BCV2lyZUZvcm1hdEZpeGVkMzIpOwotICBHUEJXcml0ZVJhd0xpdHRsZUVu
ZGlhbjMyKCZzdGF0ZV8sIHZhbHVlKTsKLX0KLQotLSAodm9pZCl3cml0ZVNGaXhlZDY0Tm9UYWc6
KGludDY0X3QpdmFsdWUgewotICBHUEJXcml0ZVJhd0xpdHRsZUVuZGlhbjY0KCZzdGF0ZV8sIHZh
bHVlKTsKLX0KLQotLSAodm9pZCl3cml0ZVNGaXhlZDY0OihpbnQzMl90KWZpZWxkTnVtYmVyIHZh
bHVlOihpbnQ2NF90KXZhbHVlIHsKLSAgR1BCV3JpdGVUYWdXaXRoRm9ybWF0KCZzdGF0ZV8sIGZp
ZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0Rml4ZWQ2NCk7Ci0gIEdQQldyaXRlUmF3TGl0dGxlRW5k
aWFuNjQoJnN0YXRlXywgdmFsdWUpOwotfQotCi0tICh2b2lkKXdyaXRlU0ludDMyTm9UYWc6KGlu
dDMyX3QpdmFsdWUgewotICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIEdQQkVuY29kZVpp
Z1phZzMyKHZhbHVlKSk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVTSW50MzI6KGludDMyX3QpZmllbGRO
dW1iZXIgdmFsdWU6KGludDMyX3QpdmFsdWUgewotICBHUEJXcml0ZVRhZ1dpdGhGb3JtYXQoJnN0
YXRlXywgZmllbGROdW1iZXIsIEdQQldpcmVGb3JtYXRWYXJpbnQpOwotICBHUEJXcml0ZVJhd1Zh
cmludDMyKCZzdGF0ZV8sIEdQQkVuY29kZVppZ1phZzMyKHZhbHVlKSk7Ci19Ci0KLS0gKHZvaWQp
d3JpdGVTSW50NjROb1RhZzooaW50NjRfdCl2YWx1ZSB7Ci0gIEdQQldyaXRlUmF3VmFyaW50NjQo
JnN0YXRlXywgR1BCRW5jb2RlWmlnWmFnNjQodmFsdWUpKTsKLX0KLQotLSAodm9pZCl3cml0ZVNJ
bnQ2NDooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZTooaW50NjRfdCl2YWx1ZSB7Ci0gIEdQQldy
aXRlVGFnV2l0aEZvcm1hdCgmc3RhdGVfLCBmaWVsZE51bWJlciwgR1BCV2lyZUZvcm1hdFZhcmlu
dCk7Ci0gIEdQQldyaXRlUmF3VmFyaW50NjQoJnN0YXRlXywgR1BCRW5jb2RlWmlnWmFnNjQodmFs
dWUpKTsKLX0KLQotLy8lUERETS1ERUZJTkUgV1JJVEVfUEFDS0FCTEVfREVGTlMoTkFNRSwgQVJS
QVlfVFlQRSwgVFlQRSwgQUNDRVNTT1JfTkFNRSkKLS8vJS0gKHZvaWQpd3JpdGUjI05BTUUjI0Fy
cmF5OihpbnQzMl90KWZpZWxkTnVtYmVyCi0vLyUgICAgICAgTkFNRSRTICAgICB2YWx1ZXM6KEdQ
QiMjQVJSQVlfVFlQRSMjQXJyYXkgKil2YWx1ZXMKLS8vJSAgICAgICBOQU1FJFMgICAgICAgIHRh
ZzoodWludDMyX3QpdGFnIHsKLS8vJSAgaWYgKHRhZyAhPSAwKSB7Ci0vLyUgICAgaWYgKHZhbHVl
cy5jb3VudCA9PSAwKSByZXR1cm47Ci0vLyUgICAgX19ibG9jayBzaXplX3QgZGF0YVNpemUgPSAw
OwotLy8lICAgIFt2YWx1ZXMgZW51bWVyYXRlIyNBQ0NFU1NPUl9OQU1FIyNWYWx1ZXNXaXRoQmxv
Y2s6XihUWVBFIHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotLy8lI3ByYWdt
YSB1bnVzZWQoaWR4LCBzdG9wKQotLy8lICAgICAgZGF0YVNpemUgKz0gR1BCQ29tcHV0ZSMjTkFN
RSMjU2l6ZU5vVGFnKHZhbHVlKTsKLS8vJSAgICB9XTsKLS8vJSAgICBHUEJXcml0ZVJhd1Zhcmlu
dDMyKCZzdGF0ZV8sIHRhZyk7Ci0vLyUgICAgR1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCAo
aW50MzJfdClkYXRhU2l6ZSk7Ci0vLyUgICAgW3ZhbHVlcyBlbnVtZXJhdGUjI0FDQ0VTU09SX05B
TUUjI1ZhbHVlc1dpdGhCbG9jazpeKFRZUEUgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBCT09MICpz
dG9wKSB7Ci0vLyUjcHJhZ21hIHVudXNlZChpZHgsIHN0b3ApCi0vLyUgICAgICBbc2VsZiB3cml0
ZSMjTkFNRSMjTm9UYWc6dmFsdWVdOwotLy8lICAgIH1dOwotLy8lICB9IGVsc2UgewotLy8lICAg
IFt2YWx1ZXMgZW51bWVyYXRlIyNBQ0NFU1NPUl9OQU1FIyNWYWx1ZXNXaXRoQmxvY2s6XihUWVBF
IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotLy8lI3ByYWdtYSB1bnVzZWQo
aWR4LCBzdG9wKQotLy8lICAgICAgW3NlbGYgd3JpdGUjI05BTUU6ZmllbGROdW1iZXIgdmFsdWU6
dmFsdWVdOwotLy8lICAgIH1dOwotLy8lICB9Ci0vLyV9Ci0vLyUKLS8vJVBERE0tREVGSU5FIFdS
SVRFX1VOUEFDS0FCTEVfREVGTlMoTkFNRSwgVFlQRSkKLS8vJS0gKHZvaWQpd3JpdGUjI05BTUUj
I0FycmF5OihpbnQzMl90KWZpZWxkTnVtYmVyIHZhbHVlczooTlNBcnJheSAqKXZhbHVlcyB7Ci0v
LyUgIGZvciAoVFlQRSAqdmFsdWUgaW4gdmFsdWVzKSB7Ci0vLyUgICAgW3NlbGYgd3JpdGUjI05B
TUU6ZmllbGROdW1iZXIgdmFsdWU6dmFsdWVdOwotLy8lICB9Ci0vLyV9Ci0vLyUKLS8vJVBERE0t
RVhQQU5EIFdSSVRFX1BBQ0tBQkxFX0RFRk5TKERvdWJsZSwgRG91YmxlLCBkb3VibGUsICkKLS8v
IFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5
LgotCi0tICh2b2lkKXdyaXRlRG91YmxlQXJyYXk6KGludDMyX3QpZmllbGROdW1iZXIKLSAgICAg
ICAgICAgICAgICAgIHZhbHVlczooR1BCRG91YmxlQXJyYXkgKil2YWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgIHRhZzoodWludDMyX3QpdGFnIHsKLSAgaWYgKHRhZyAhPSAwKSB7Ci0gICAgaWYg
KHZhbHVlcy5jb3VudCA9PSAwKSByZXR1cm47Ci0gICAgX19ibG9jayBzaXplX3QgZGF0YVNpemUg
PSAwOwotICAgIFt2YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4oZG91YmxlIHZhbHVl
LCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9w
KQotICAgICAgZGF0YVNpemUgKz0gR1BCQ29tcHV0ZURvdWJsZVNpemVOb1RhZyh2YWx1ZSk7Ci0g
ICAgfV07Ci0gICAgR1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCB0YWcpOwotICAgIEdQQldy
aXRlUmF3VmFyaW50MzIoJnN0YXRlXywgKGludDMyX3QpZGF0YVNpemUpOwotICAgIFt2YWx1ZXMg
ZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4oZG91YmxlIHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwg
Qk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3NlbGYgd3Jp
dGVEb3VibGVOb1RhZzp2YWx1ZV07Ci0gICAgfV07Ci0gIH0gZWxzZSB7Ci0gICAgW3ZhbHVlcyBl
bnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6Xihkb3VibGUgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBC
T09MICpzdG9wKSB7Ci0jcHJhZ21hIHVudXNlZChpZHgsIHN0b3ApCi0gICAgICBbc2VsZiB3cml0
ZURvdWJsZTpmaWVsZE51bWJlciB2YWx1ZTp2YWx1ZV07Ci0gICAgfV07Ci0gIH0KLX0KLQotLy8l
UERETS1FWFBBTkQgV1JJVEVfUEFDS0FCTEVfREVGTlMoRmxvYXQsIEZsb2F0LCBmbG9hdCwgKQot
Ly8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0
bHkuCi0KLS0gKHZvaWQpd3JpdGVGbG9hdEFycmF5OihpbnQzMl90KWZpZWxkTnVtYmVyCi0gICAg
ICAgICAgICAgICAgIHZhbHVlczooR1BCRmxvYXRBcnJheSAqKXZhbHVlcwotICAgICAgICAgICAg
ICAgICAgICB0YWc6KHVpbnQzMl90KXRhZyB7Ci0gIGlmICh0YWcgIT0gMCkgewotICAgIGlmICh2
YWx1ZXMuY291bnQgPT0gMCkgcmV0dXJuOwotICAgIF9fYmxvY2sgc2l6ZV90IGRhdGFTaXplID0g
MDsKLSAgICBbdmFsdWVzIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpeKGZsb2F0IHZhbHVlLCBO
U1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQot
ICAgICAgZGF0YVNpemUgKz0gR1BCQ29tcHV0ZUZsb2F0U2l6ZU5vVGFnKHZhbHVlKTsKLSAgICB9
XTsKLSAgICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIHRhZyk7Ci0gICAgR1BCV3JpdGVS
YXdWYXJpbnQzMigmc3RhdGVfLCAoaW50MzJfdClkYXRhU2l6ZSk7Ci0gICAgW3ZhbHVlcyBlbnVt
ZXJhdGVWYWx1ZXNXaXRoQmxvY2s6XihmbG9hdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wg
KnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtzZWxmIHdyaXRlRmxv
YXROb1RhZzp2YWx1ZV07Ci0gICAgfV07Ci0gIH0gZWxzZSB7Ci0gICAgW3ZhbHVlcyBlbnVtZXJh
dGVWYWx1ZXNXaXRoQmxvY2s6XihmbG9hdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0
b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtzZWxmIHdyaXRlRmxvYXQ6
ZmllbGROdW1iZXIgdmFsdWU6dmFsdWVdOwotICAgIH1dOwotICB9Ci19Ci0KLS8vJVBERE0tRVhQ
QU5EIFdSSVRFX1BBQ0tBQkxFX0RFRk5TKFVJbnQ2NCwgVUludDY0LCB1aW50NjRfdCwgKQotLy8g
VGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHku
Ci0KLS0gKHZvaWQpd3JpdGVVSW50NjRBcnJheTooaW50MzJfdClmaWVsZE51bWJlcgotICAgICAg
ICAgICAgICAgICAgdmFsdWVzOihHUEJVSW50NjRBcnJheSAqKXZhbHVlcwotICAgICAgICAgICAg
ICAgICAgICAgdGFnOih1aW50MzJfdCl0YWcgewotICBpZiAodGFnICE9IDApIHsKLSAgICBpZiAo
dmFsdWVzLmNvdW50ID09IDApIHJldHVybjsKLSAgICBfX2Jsb2NrIHNpemVfdCBkYXRhU2l6ZSA9
IDA7Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6Xih1aW50NjRfdCB2YWx1
ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3Rv
cCkKLSAgICAgIGRhdGFTaXplICs9IEdQQkNvbXB1dGVVSW50NjRTaXplTm9UYWcodmFsdWUpOwot
ICAgIH1dOwotICAgIEdQQldyaXRlUmF3VmFyaW50MzIoJnN0YXRlXywgdGFnKTsKLSAgICBHUEJX
cml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIChpbnQzMl90KWRhdGFTaXplKTsKLSAgICBbdmFsdWVz
IGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpeKHVpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2VyIGlk
eCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3NlbGYg
d3JpdGVVSW50NjROb1RhZzp2YWx1ZV07Ci0gICAgfV07Ci0gIH0gZWxzZSB7Ci0gICAgW3ZhbHVl
cyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6Xih1aW50NjRfdCB2YWx1ZSwgTlNVSW50ZWdlciBp
ZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtzZWxm
IHdyaXRlVUludDY0OmZpZWxkTnVtYmVyIHZhbHVlOnZhbHVlXTsKLSAgICB9XTsKLSAgfQotfQot
Ci0vLyVQRERNLUVYUEFORCBXUklURV9QQUNLQUJMRV9ERUZOUyhJbnQ2NCwgSW50NjQsIGludDY0
X3QsICkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0
IGRpcmVjdGx5LgotCi0tICh2b2lkKXdyaXRlSW50NjRBcnJheTooaW50MzJfdClmaWVsZE51bWJl
cgotICAgICAgICAgICAgICAgICB2YWx1ZXM6KEdQQkludDY0QXJyYXkgKil2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgdGFnOih1aW50MzJfdCl0YWcgewotICBpZiAodGFnICE9IDApIHsKLSAg
ICBpZiAodmFsdWVzLmNvdW50ID09IDApIHJldHVybjsKLSAgICBfX2Jsb2NrIHNpemVfdCBkYXRh
U2l6ZSA9IDA7Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6XihpbnQ2NF90
IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4
LCBzdG9wKQotICAgICAgZGF0YVNpemUgKz0gR1BCQ29tcHV0ZUludDY0U2l6ZU5vVGFnKHZhbHVl
KTsKLSAgICB9XTsKLSAgICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIHRhZyk7Ci0gICAg
R1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCAoaW50MzJfdClkYXRhU2l6ZSk7Ci0gICAgW3Zh
bHVlcyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6XihpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2Vy
IGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3Nl
bGYgd3JpdGVJbnQ2NE5vVGFnOnZhbHVlXTsKLSAgICB9XTsKLSAgfSBlbHNlIHsKLSAgICBbdmFs
dWVzIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpeKGludDY0X3QgdmFsdWUsIE5TVUludGVnZXIg
aWR4LCBCT09MICpzdG9wKSB7Ci0jcHJhZ21hIHVudXNlZChpZHgsIHN0b3ApCi0gICAgICBbc2Vs
ZiB3cml0ZUludDY0OmZpZWxkTnVtYmVyIHZhbHVlOnZhbHVlXTsKLSAgICB9XTsKLSAgfQotfQot
Ci0vLyVQRERNLUVYUEFORCBXUklURV9QQUNLQUJMRV9ERUZOUyhJbnQzMiwgSW50MzIsIGludDMy
X3QsICkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0
IGRpcmVjdGx5LgotCi0tICh2b2lkKXdyaXRlSW50MzJBcnJheTooaW50MzJfdClmaWVsZE51bWJl
cgotICAgICAgICAgICAgICAgICB2YWx1ZXM6KEdQQkludDMyQXJyYXkgKil2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgdGFnOih1aW50MzJfdCl0YWcgewotICBpZiAodGFnICE9IDApIHsKLSAg
ICBpZiAodmFsdWVzLmNvdW50ID09IDApIHJldHVybjsKLSAgICBfX2Jsb2NrIHNpemVfdCBkYXRh
U2l6ZSA9IDA7Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6XihpbnQzMl90
IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4
LCBzdG9wKQotICAgICAgZGF0YVNpemUgKz0gR1BCQ29tcHV0ZUludDMyU2l6ZU5vVGFnKHZhbHVl
KTsKLSAgICB9XTsKLSAgICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIHRhZyk7Ci0gICAg
R1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCAoaW50MzJfdClkYXRhU2l6ZSk7Ci0gICAgW3Zh
bHVlcyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6XihpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2Vy
IGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3Nl
bGYgd3JpdGVJbnQzMk5vVGFnOnZhbHVlXTsKLSAgICB9XTsKLSAgfSBlbHNlIHsKLSAgICBbdmFs
dWVzIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpeKGludDMyX3QgdmFsdWUsIE5TVUludGVnZXIg
aWR4LCBCT09MICpzdG9wKSB7Ci0jcHJhZ21hIHVudXNlZChpZHgsIHN0b3ApCi0gICAgICBbc2Vs
ZiB3cml0ZUludDMyOmZpZWxkTnVtYmVyIHZhbHVlOnZhbHVlXTsKLSAgICB9XTsKLSAgfQotfQot
Ci0vLyVQRERNLUVYUEFORCBXUklURV9QQUNLQUJMRV9ERUZOUyhVSW50MzIsIFVJbnQzMiwgdWlu
dDMyX3QsICkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0
IGl0IGRpcmVjdGx5LgotCi0tICh2b2lkKXdyaXRlVUludDMyQXJyYXk6KGludDMyX3QpZmllbGRO
dW1iZXIKLSAgICAgICAgICAgICAgICAgIHZhbHVlczooR1BCVUludDMyQXJyYXkgKil2YWx1ZXMK
LSAgICAgICAgICAgICAgICAgICAgIHRhZzoodWludDMyX3QpdGFnIHsKLSAgaWYgKHRhZyAhPSAw
KSB7Ci0gICAgaWYgKHZhbHVlcy5jb3VudCA9PSAwKSByZXR1cm47Ci0gICAgX19ibG9jayBzaXpl
X3QgZGF0YVNpemUgPSAwOwotICAgIFt2YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4o
dWludDMyX3QgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBCT09MICpzdG9wKSB7Ci0jcHJhZ21hIHVu
dXNlZChpZHgsIHN0b3ApCi0gICAgICBkYXRhU2l6ZSArPSBHUEJDb21wdXRlVUludDMyU2l6ZU5v
VGFnKHZhbHVlKTsKLSAgICB9XTsKLSAgICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIHRh
Zyk7Ci0gICAgR1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCAoaW50MzJfdClkYXRhU2l6ZSk7
Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6Xih1aW50MzJfdCB2YWx1ZSwg
TlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkK
LSAgICAgIFtzZWxmIHdyaXRlVUludDMyTm9UYWc6dmFsdWVdOwotICAgIH1dOwotICB9IGVsc2Ug
ewotICAgIFt2YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4odWludDMyX3QgdmFsdWUs
IE5TVUludGVnZXIgaWR4LCBCT09MICpzdG9wKSB7Ci0jcHJhZ21hIHVudXNlZChpZHgsIHN0b3Ap
Ci0gICAgICBbc2VsZiB3cml0ZVVJbnQzMjpmaWVsZE51bWJlciB2YWx1ZTp2YWx1ZV07Ci0gICAg
fV07Ci0gIH0KLX0KLQotLy8lUERETS1FWFBBTkQgV1JJVEVfUEFDS0FCTEVfREVGTlMoRml4ZWQ2
NCwgVUludDY0LCB1aW50NjRfdCwgKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRl
ZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLS0gKHZvaWQpd3JpdGVGaXhlZDY0QXJyYXk6
KGludDMyX3QpZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAgICB2YWx1ZXM6KEdQQlVJbnQ2
NEFycmF5ICopdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgdGFnOih1aW50MzJfdCl0YWcg
ewotICBpZiAodGFnICE9IDApIHsKLSAgICBpZiAodmFsdWVzLmNvdW50ID09IDApIHJldHVybjsK
LSAgICBfX2Jsb2NrIHNpemVfdCBkYXRhU2l6ZSA9IDA7Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVW
YWx1ZXNXaXRoQmxvY2s6Xih1aW50NjRfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0
b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIGRhdGFTaXplICs9IEdQQkNv
bXB1dGVGaXhlZDY0U2l6ZU5vVGFnKHZhbHVlKTsKLSAgICB9XTsKLSAgICBHUEJXcml0ZVJhd1Zh
cmludDMyKCZzdGF0ZV8sIHRhZyk7Ci0gICAgR1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCAo
aW50MzJfdClkYXRhU2l6ZSk7Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6
Xih1aW50NjRfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEg
dW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtzZWxmIHdyaXRlRml4ZWQ2NE5vVGFnOnZhbHVlXTsK
LSAgICB9XTsKLSAgfSBlbHNlIHsKLSAgICBbdmFsdWVzIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9j
azpeKHVpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdt
YSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3NlbGYgd3JpdGVGaXhlZDY0OmZpZWxkTnVtYmVy
IHZhbHVlOnZhbHVlXTsKLSAgICB9XTsKLSAgfQotfQotCi0vLyVQRERNLUVYUEFORCBXUklURV9Q
QUNLQUJMRV9ERUZOUyhGaXhlZDMyLCBVSW50MzIsIHVpbnQzMl90LCApCi0vLyBUaGlzIGJsb2Nr
IG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotLSAodm9p
ZCl3cml0ZUZpeGVkMzJBcnJheTooaW50MzJfdClmaWVsZE51bWJlcgotICAgICAgICAgICAgICAg
ICAgIHZhbHVlczooR1BCVUludDMyQXJyYXkgKil2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICB0YWc6KHVpbnQzMl90KXRhZyB7Ci0gIGlmICh0YWcgIT0gMCkgewotICAgIGlmICh2YWx1ZXMu
Y291bnQgPT0gMCkgcmV0dXJuOwotICAgIF9fYmxvY2sgc2l6ZV90IGRhdGFTaXplID0gMDsKLSAg
ICBbdmFsdWVzIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpeKHVpbnQzMl90IHZhbHVlLCBOU1VJ
bnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAg
ICAgZGF0YVNpemUgKz0gR1BCQ29tcHV0ZUZpeGVkMzJTaXplTm9UYWcodmFsdWUpOwotICAgIH1d
OwotICAgIEdQQldyaXRlUmF3VmFyaW50MzIoJnN0YXRlXywgdGFnKTsKLSAgICBHUEJXcml0ZVJh
d1ZhcmludDMyKCZzdGF0ZV8sIChpbnQzMl90KWRhdGFTaXplKTsKLSAgICBbdmFsdWVzIGVudW1l
cmF0ZVZhbHVlc1dpdGhCbG9jazpeKHVpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9P
TCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3NlbGYgd3JpdGVG
aXhlZDMyTm9UYWc6dmFsdWVdOwotICAgIH1dOwotICB9IGVsc2UgewotICAgIFt2YWx1ZXMgZW51
bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4odWludDMyX3QgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBC
T09MICpzdG9wKSB7Ci0jcHJhZ21hIHVudXNlZChpZHgsIHN0b3ApCi0gICAgICBbc2VsZiB3cml0
ZUZpeGVkMzI6ZmllbGROdW1iZXIgdmFsdWU6dmFsdWVdOwotICAgIH1dOwotICB9Ci19Ci0KLS8v
JVBERE0tRVhQQU5EIFdSSVRFX1BBQ0tBQkxFX0RFRk5TKFNJbnQzMiwgSW50MzIsIGludDMyX3Qs
ICkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRp
cmVjdGx5LgotCi0tICh2b2lkKXdyaXRlU0ludDMyQXJyYXk6KGludDMyX3QpZmllbGROdW1iZXIK
LSAgICAgICAgICAgICAgICAgIHZhbHVlczooR1BCSW50MzJBcnJheSAqKXZhbHVlcwotICAgICAg
ICAgICAgICAgICAgICAgdGFnOih1aW50MzJfdCl0YWcgewotICBpZiAodGFnICE9IDApIHsKLSAg
ICBpZiAodmFsdWVzLmNvdW50ID09IDApIHJldHVybjsKLSAgICBfX2Jsb2NrIHNpemVfdCBkYXRh
U2l6ZSA9IDA7Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6XihpbnQzMl90
IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4
LCBzdG9wKQotICAgICAgZGF0YVNpemUgKz0gR1BCQ29tcHV0ZVNJbnQzMlNpemVOb1RhZyh2YWx1
ZSk7Ci0gICAgfV07Ci0gICAgR1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCB0YWcpOwotICAg
IEdQQldyaXRlUmF3VmFyaW50MzIoJnN0YXRlXywgKGludDMyX3QpZGF0YVNpemUpOwotICAgIFt2
YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4oaW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdl
ciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtz
ZWxmIHdyaXRlU0ludDMyTm9UYWc6dmFsdWVdOwotICAgIH1dOwotICB9IGVsc2UgewotICAgIFt2
YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4oaW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdl
ciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtz
ZWxmIHdyaXRlU0ludDMyOmZpZWxkTnVtYmVyIHZhbHVlOnZhbHVlXTsKLSAgICB9XTsKLSAgfQot
fQotCi0vLyVQRERNLUVYUEFORCBXUklURV9QQUNLQUJMRV9ERUZOUyhTSW50NjQsIEludDY0LCBp
bnQ2NF90LCApCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRp
dCBpdCBkaXJlY3RseS4KLQotLSAodm9pZCl3cml0ZVNJbnQ2NEFycmF5OihpbnQzMl90KWZpZWxk
TnVtYmVyCi0gICAgICAgICAgICAgICAgICB2YWx1ZXM6KEdQQkludDY0QXJyYXkgKil2YWx1ZXMK
LSAgICAgICAgICAgICAgICAgICAgIHRhZzoodWludDMyX3QpdGFnIHsKLSAgaWYgKHRhZyAhPSAw
KSB7Ci0gICAgaWYgKHZhbHVlcy5jb3VudCA9PSAwKSByZXR1cm47Ci0gICAgX19ibG9jayBzaXpl
X3QgZGF0YVNpemUgPSAwOwotICAgIFt2YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4o
aW50NjRfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51
c2VkKGlkeCwgc3RvcCkKLSAgICAgIGRhdGFTaXplICs9IEdQQkNvbXB1dGVTSW50NjRTaXplTm9U
YWcodmFsdWUpOwotICAgIH1dOwotICAgIEdQQldyaXRlUmF3VmFyaW50MzIoJnN0YXRlXywgdGFn
KTsKLSAgICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIChpbnQzMl90KWRhdGFTaXplKTsK
LSAgICBbdmFsdWVzIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpeKGludDY0X3QgdmFsdWUsIE5T
VUludGVnZXIgaWR4LCBCT09MICpzdG9wKSB7Ci0jcHJhZ21hIHVudXNlZChpZHgsIHN0b3ApCi0g
ICAgICBbc2VsZiB3cml0ZVNJbnQ2NE5vVGFnOnZhbHVlXTsKLSAgICB9XTsKLSAgfSBlbHNlIHsK
LSAgICBbdmFsdWVzIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpeKGludDY0X3QgdmFsdWUsIE5T
VUludGVnZXIgaWR4LCBCT09MICpzdG9wKSB7Ci0jcHJhZ21hIHVudXNlZChpZHgsIHN0b3ApCi0g
ICAgICBbc2VsZiB3cml0ZVNJbnQ2NDpmaWVsZE51bWJlciB2YWx1ZTp2YWx1ZV07Ci0gICAgfV07
Ci0gIH0KLX0KLQotLy8lUERETS1FWFBBTkQgV1JJVEVfUEFDS0FCTEVfREVGTlMoU0ZpeGVkNjQs
IEludDY0LCBpbnQ2NF90LCApCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBk
byBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotLSAodm9pZCl3cml0ZVNGaXhlZDY0QXJyYXk6KGlu
dDMyX3QpZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzOihHUEJJbnQ2NEFy
cmF5ICopdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIHRhZzoodWludDMyX3QpdGFnIHsK
LSAgaWYgKHRhZyAhPSAwKSB7Ci0gICAgaWYgKHZhbHVlcy5jb3VudCA9PSAwKSByZXR1cm47Ci0g
ICAgX19ibG9jayBzaXplX3QgZGF0YVNpemUgPSAwOwotICAgIFt2YWx1ZXMgZW51bWVyYXRlVmFs
dWVzV2l0aEJsb2NrOl4oaW50NjRfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3Ap
IHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIGRhdGFTaXplICs9IEdQQkNvbXB1
dGVTRml4ZWQ2NFNpemVOb1RhZyh2YWx1ZSk7Ci0gICAgfV07Ci0gICAgR1BCV3JpdGVSYXdWYXJp
bnQzMigmc3RhdGVfLCB0YWcpOwotICAgIEdQQldyaXRlUmF3VmFyaW50MzIoJnN0YXRlXywgKGlu
dDMyX3QpZGF0YVNpemUpOwotICAgIFt2YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4o
aW50NjRfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51
c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtzZWxmIHdyaXRlU0ZpeGVkNjROb1RhZzp2YWx1ZV07Ci0g
ICAgfV07Ci0gIH0gZWxzZSB7Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6
XihpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1
bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3NlbGYgd3JpdGVTRml4ZWQ2NDpmaWVsZE51bWJlciB2
YWx1ZTp2YWx1ZV07Ci0gICAgfV07Ci0gIH0KLX0KLQotLy8lUERETS1FWFBBTkQgV1JJVEVfUEFD
S0FCTEVfREVGTlMoU0ZpeGVkMzIsIEludDMyLCBpbnQzMl90LCApCi0vLyBUaGlzIGJsb2NrIG9m
IGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotLSAodm9pZCl3
cml0ZVNGaXhlZDMyQXJyYXk6KGludDMyX3QpZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAg
ICAgdmFsdWVzOihHUEJJbnQzMkFycmF5ICopdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAg
IHRhZzoodWludDMyX3QpdGFnIHsKLSAgaWYgKHRhZyAhPSAwKSB7Ci0gICAgaWYgKHZhbHVlcy5j
b3VudCA9PSAwKSByZXR1cm47Ci0gICAgX19ibG9jayBzaXplX3QgZGF0YVNpemUgPSAwOwotICAg
IFt2YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4oaW50MzJfdCB2YWx1ZSwgTlNVSW50
ZWdlciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAg
IGRhdGFTaXplICs9IEdQQkNvbXB1dGVTRml4ZWQzMlNpemVOb1RhZyh2YWx1ZSk7Ci0gICAgfV07
Ci0gICAgR1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCB0YWcpOwotICAgIEdQQldyaXRlUmF3
VmFyaW50MzIoJnN0YXRlXywgKGludDMyX3QpZGF0YVNpemUpOwotICAgIFt2YWx1ZXMgZW51bWVy
YXRlVmFsdWVzV2l0aEJsb2NrOl4oaW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wg
KnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtzZWxmIHdyaXRlU0Zp
eGVkMzJOb1RhZzp2YWx1ZV07Ci0gICAgfV07Ci0gIH0gZWxzZSB7Ci0gICAgW3ZhbHVlcyBlbnVt
ZXJhdGVWYWx1ZXNXaXRoQmxvY2s6XihpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9P
TCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3NlbGYgd3JpdGVT
Rml4ZWQzMjpmaWVsZE51bWJlciB2YWx1ZTp2YWx1ZV07Ci0gICAgfV07Ci0gIH0KLX0KLQotLy8l
UERETS1FWFBBTkQgV1JJVEVfUEFDS0FCTEVfREVGTlMoQm9vbCwgQm9vbCwgQk9PTCwgKQotLy8g
VGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHku
Ci0KLS0gKHZvaWQpd3JpdGVCb29sQXJyYXk6KGludDMyX3QpZmllbGROdW1iZXIKLSAgICAgICAg
ICAgICAgICB2YWx1ZXM6KEdQQkJvb2xBcnJheSAqKXZhbHVlcwotICAgICAgICAgICAgICAgICAg
IHRhZzoodWludDMyX3QpdGFnIHsKLSAgaWYgKHRhZyAhPSAwKSB7Ci0gICAgaWYgKHZhbHVlcy5j
b3VudCA9PSAwKSByZXR1cm47Ci0gICAgX19ibG9jayBzaXplX3QgZGF0YVNpemUgPSAwOwotICAg
IFt2YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4oQk9PTCB2YWx1ZSwgTlNVSW50ZWdl
ciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIGRh
dGFTaXplICs9IEdQQkNvbXB1dGVCb29sU2l6ZU5vVGFnKHZhbHVlKTsKLSAgICB9XTsKLSAgICBH
UEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIHRhZyk7Ci0gICAgR1BCV3JpdGVSYXdWYXJpbnQz
Migmc3RhdGVfLCAoaW50MzJfdClkYXRhU2l6ZSk7Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVWYWx1
ZXNXaXRoQmxvY2s6XihCT09MIHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewot
I3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3NlbGYgd3JpdGVCb29sTm9UYWc6dmFs
dWVdOwotICAgIH1dOwotICB9IGVsc2UgewotICAgIFt2YWx1ZXMgZW51bWVyYXRlVmFsdWVzV2l0
aEJsb2NrOl4oQk9PTCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFn
bWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtzZWxmIHdyaXRlQm9vbDpmaWVsZE51bWJlciB2
YWx1ZTp2YWx1ZV07Ci0gICAgfV07Ci0gIH0KLX0KLQotLy8lUERETS1FWFBBTkQgV1JJVEVfUEFD
S0FCTEVfREVGTlMoRW51bSwgRW51bSwgaW50MzJfdCwgUmF3KQotLy8gVGhpcyBibG9jayBvZiBj
b2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLS0gKHZvaWQpd3Jp
dGVFbnVtQXJyYXk6KGludDMyX3QpZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICB2YWx1ZXM6
KEdQQkVudW1BcnJheSAqKXZhbHVlcwotICAgICAgICAgICAgICAgICAgIHRhZzoodWludDMyX3Qp
dGFnIHsKLSAgaWYgKHRhZyAhPSAwKSB7Ci0gICAgaWYgKHZhbHVlcy5jb3VudCA9PSAwKSByZXR1
cm47Ci0gICAgX19ibG9jayBzaXplX3QgZGF0YVNpemUgPSAwOwotICAgIFt2YWx1ZXMgZW51bWVy
YXRlUmF3VmFsdWVzV2l0aEJsb2NrOl4oaW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJP
T0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIGRhdGFTaXplICs9
IEdQQkNvbXB1dGVFbnVtU2l6ZU5vVGFnKHZhbHVlKTsKLSAgICB9XTsKLSAgICBHUEJXcml0ZVJh
d1ZhcmludDMyKCZzdGF0ZV8sIHRhZyk7Ci0gICAgR1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVf
LCAoaW50MzJfdClkYXRhU2l6ZSk7Ci0gICAgW3ZhbHVlcyBlbnVtZXJhdGVSYXdWYWx1ZXNXaXRo
QmxvY2s6XihpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3By
YWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgW3NlbGYgd3JpdGVFbnVtTm9UYWc6dmFsdWVd
OwotICAgIH1dOwotICB9IGVsc2UgewotICAgIFt2YWx1ZXMgZW51bWVyYXRlUmF3VmFsdWVzV2l0
aEJsb2NrOl4oaW50MzJfdCB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKnN0b3ApIHsKLSNw
cmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgIFtzZWxmIHdyaXRlRW51bTpmaWVsZE51bWJl
ciB2YWx1ZTp2YWx1ZV07Ci0gICAgfV07Ci0gIH0KLX0KLQotLy8lUERETS1FWFBBTkQgV1JJVEVf
VU5QQUNLQUJMRV9ERUZOUyhTdHJpbmcsIE5TU3RyaW5nKQotLy8gVGhpcyBibG9jayBvZiBjb2Rl
IGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLS0gKHZvaWQpd3JpdGVT
dHJpbmdBcnJheTooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZXM6KE5TQXJyYXkgKil2YWx1ZXMg
ewotICBmb3IgKE5TU3RyaW5nICp2YWx1ZSBpbiB2YWx1ZXMpIHsKLSAgICBbc2VsZiB3cml0ZVN0
cmluZzpmaWVsZE51bWJlciB2YWx1ZTp2YWx1ZV07Ci0gIH0KLX0KLQotLy8lUERETS1FWFBBTkQg
V1JJVEVfVU5QQUNLQUJMRV9ERUZOUyhNZXNzYWdlLCBHUEJNZXNzYWdlKQotLy8gVGhpcyBibG9j
ayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLS0gKHZv
aWQpd3JpdGVNZXNzYWdlQXJyYXk6KGludDMyX3QpZmllbGROdW1iZXIgdmFsdWVzOihOU0FycmF5
ICopdmFsdWVzIHsKLSAgZm9yIChHUEJNZXNzYWdlICp2YWx1ZSBpbiB2YWx1ZXMpIHsKLSAgICBb
c2VsZiB3cml0ZU1lc3NhZ2U6ZmllbGROdW1iZXIgdmFsdWU6dmFsdWVdOwotICB9Ci19Ci0KLS8v
JVBERE0tRVhQQU5EIFdSSVRFX1VOUEFDS0FCTEVfREVGTlMoQnl0ZXMsIE5TRGF0YSkKLS8vIFRo
aXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5Lgot
Ci0tICh2b2lkKXdyaXRlQnl0ZXNBcnJheTooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZXM6KE5T
QXJyYXkgKil2YWx1ZXMgewotICBmb3IgKE5TRGF0YSAqdmFsdWUgaW4gdmFsdWVzKSB7Ci0gICAg
W3NlbGYgd3JpdGVCeXRlczpmaWVsZE51bWJlciB2YWx1ZTp2YWx1ZV07Ci0gIH0KLX0KLQotLy8l
UERETS1FWFBBTkQgV1JJVEVfVU5QQUNLQUJMRV9ERUZOUyhHcm91cCwgR1BCTWVzc2FnZSkKLS8v
IFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5
LgotCi0tICh2b2lkKXdyaXRlR3JvdXBBcnJheTooaW50MzJfdClmaWVsZE51bWJlciB2YWx1ZXM6
KE5TQXJyYXkgKil2YWx1ZXMgewotICBmb3IgKEdQQk1lc3NhZ2UgKnZhbHVlIGluIHZhbHVlcykg
ewotICAgIFtzZWxmIHdyaXRlR3JvdXA6ZmllbGROdW1iZXIgdmFsdWU6dmFsdWVdOwotICB9Ci19
Ci0KLS8vJVBERE0tRVhQQU5EIFdSSVRFX1VOUEFDS0FCTEVfREVGTlMoVW5rbm93bkdyb3VwLCBH
UEJVbmtub3duRmllbGRTZXQpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBk
byBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotLSAodm9pZCl3cml0ZVVua25vd25Hcm91cEFycmF5
OihpbnQzMl90KWZpZWxkTnVtYmVyIHZhbHVlczooTlNBcnJheSAqKXZhbHVlcyB7Ci0gIGZvciAo
R1BCVW5rbm93bkZpZWxkU2V0ICp2YWx1ZSBpbiB2YWx1ZXMpIHsKLSAgICBbc2VsZiB3cml0ZVVu
a25vd25Hcm91cDpmaWVsZE51bWJlciB2YWx1ZTp2YWx1ZV07Ci0gIH0KLX0KLQotLy8lUERETS1F
WFBBTkQtRU5EICgxOSBleHBhbnNpb25zKQotCi0tICh2b2lkKXdyaXRlTWVzc2FnZVNldEV4dGVu
c2lvbjooaW50MzJfdClmaWVsZE51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWU6KEdQQk1lc3NhZ2UgKil2YWx1ZSB7Ci0gIEdQQldyaXRlVGFnV2l0aEZvcm1hdCgmc3RhdGVf
LCBHUEJXaXJlRm9ybWF0TWVzc2FnZVNldEl0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICBH
UEJXaXJlRm9ybWF0U3RhcnRHcm91cCk7Ci0gIEdQQldyaXRlVUludDMyKCZzdGF0ZV8sIEdQQldp
cmVGb3JtYXRNZXNzYWdlU2V0VHlwZUlkLCBmaWVsZE51bWJlcik7Ci0gIFtzZWxmIHdyaXRlTWVz
c2FnZTpHUEJXaXJlRm9ybWF0TWVzc2FnZVNldE1lc3NhZ2UgdmFsdWU6dmFsdWVdOwotICBHUEJX
cml0ZVRhZ1dpdGhGb3JtYXQoJnN0YXRlXywgR1BCV2lyZUZvcm1hdE1lc3NhZ2VTZXRJdGVtLAot
ICAgICAgICAgICAgICAgICAgICAgICAgR1BCV2lyZUZvcm1hdEVuZEdyb3VwKTsKLX0KLQotLSAo
dm9pZCl3cml0ZVJhd01lc3NhZ2VTZXRFeHRlbnNpb246KGludDMyX3QpZmllbGROdW1iZXIgdmFs
dWU6KE5TRGF0YSAqKXZhbHVlIHsKLSAgR1BCV3JpdGVUYWdXaXRoRm9ybWF0KCZzdGF0ZV8sIEdQ
QldpcmVGb3JtYXRNZXNzYWdlU2V0SXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdQQldp
cmVGb3JtYXRTdGFydEdyb3VwKTsKLSAgR1BCV3JpdGVVSW50MzIoJnN0YXRlXywgR1BCV2lyZUZv
cm1hdE1lc3NhZ2VTZXRUeXBlSWQsIGZpZWxkTnVtYmVyKTsKLSAgW3NlbGYgd3JpdGVCeXRlczpH
UEJXaXJlRm9ybWF0TWVzc2FnZVNldE1lc3NhZ2UgdmFsdWU6dmFsdWVdOwotICBHUEJXcml0ZVRh
Z1dpdGhGb3JtYXQoJnN0YXRlXywgR1BCV2lyZUZvcm1hdE1lc3NhZ2VTZXRJdGVtLAotICAgICAg
ICAgICAgICAgICAgICAgICAgR1BCV2lyZUZvcm1hdEVuZEdyb3VwKTsKLX0KLQotLSAodm9pZClm
bHVzaCB7Ci0gIGlmIChzdGF0ZV8ub3V0cHV0ICE9IG5pbCkgewotICAgIEdQQlJlZnJlc2hCdWZm
ZXIoJnN0YXRlXyk7Ci0gIH0KLX0KLQotLSAodm9pZCl3cml0ZVJhd0J5dGU6KHVpbnQ4X3QpdmFs
dWUgewotICBHUEJXcml0ZVJhd0J5dGUoJnN0YXRlXywgdmFsdWUpOwotfQotCi0tICh2b2lkKXdy
aXRlUmF3RGF0YTooY29uc3QgTlNEYXRhICopZGF0YSB7Ci0gIFtzZWxmIHdyaXRlUmF3UHRyOltk
YXRhIGJ5dGVzXSBvZmZzZXQ6MCBsZW5ndGg6W2RhdGEgbGVuZ3RoXV07Ci19Ci0KLS0gKHZvaWQp
d3JpdGVSYXdQdHI6KGNvbnN0IHZvaWQgKil2YWx1ZQotICAgICAgICAgICAgIG9mZnNldDooc2l6
ZV90KW9mZnNldAotICAgICAgICAgICAgIGxlbmd0aDooc2l6ZV90KWxlbmd0aCB7Ci0gIGlmICh2
YWx1ZSA9PSBuaWwgfHwgbGVuZ3RoID09IDApIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBOU1VJ
bnRlZ2VyIGJ1ZmZlckxlbmd0aCA9IHN0YXRlXy5zaXplOwotICBOU1VJbnRlZ2VyIGJ1ZmZlckJ5
dGVzTGVmdCA9IGJ1ZmZlckxlbmd0aCAtIHN0YXRlXy5wb3NpdGlvbjsKLSAgaWYgKGJ1ZmZlckJ5
dGVzTGVmdCA+PSBsZW5ndGgpIHsKLSAgICAvLyBXZSBoYXZlIHJvb20gaW4gdGhlIGN1cnJlbnQg
YnVmZmVyLgotICAgIG1lbWNweShzdGF0ZV8uYnl0ZXMgKyBzdGF0ZV8ucG9zaXRpb24sICgodWlu
dDhfdCAqKXZhbHVlKSArIG9mZnNldCwgbGVuZ3RoKTsKLSAgICBzdGF0ZV8ucG9zaXRpb24gKz0g
bGVuZ3RoOwotICB9IGVsc2UgewotICAgIC8vIFdyaXRlIGV4dGVuZHMgcGFzdCBjdXJyZW50IGJ1
ZmZlci4gIEZpbGwgdGhlIHJlc3Qgb2YgdGhpcyBidWZmZXIgYW5kCi0gICAgLy8gZmx1c2guCi0g
ICAgc2l6ZV90IGJ5dGVzV3JpdHRlbiA9IGJ1ZmZlckJ5dGVzTGVmdDsKLSAgICBtZW1jcHkoc3Rh
dGVfLmJ5dGVzICsgc3RhdGVfLnBvc2l0aW9uLCAoKHVpbnQ4X3QgKil2YWx1ZSkgKyBvZmZzZXQs
Ci0gICAgICAgICAgIGJ5dGVzV3JpdHRlbik7Ci0gICAgb2Zmc2V0ICs9IGJ5dGVzV3JpdHRlbjsK
LSAgICBsZW5ndGggLT0gYnl0ZXNXcml0dGVuOwotICAgIHN0YXRlXy5wb3NpdGlvbiA9IGJ1ZmZl
ckxlbmd0aDsKLSAgICBHUEJSZWZyZXNoQnVmZmVyKCZzdGF0ZV8pOwotICAgIGJ1ZmZlckxlbmd0
aCA9IHN0YXRlXy5zaXplOwotCi0gICAgLy8gTm93IGRlYWwgd2l0aCB0aGUgcmVzdC4KLSAgICAv
LyBTaW5jZSB3ZSBoYXZlIGFuIG91dHB1dCBzdHJlYW0sIHRoaXMgaXMgb3VyIGJ1ZmZlcgotICAg
IC8vIGFuZCBidWZmZXIgb2Zmc2V0ID09IDAKLSAgICBpZiAobGVuZ3RoIDw9IGJ1ZmZlckxlbmd0
aCkgewotICAgICAgLy8gRml0cyBpbiBuZXcgYnVmZmVyLgotICAgICAgbWVtY3B5KHN0YXRlXy5i
eXRlcywgKCh1aW50OF90ICopdmFsdWUpICsgb2Zmc2V0LCBsZW5ndGgpOwotICAgICAgc3RhdGVf
LnBvc2l0aW9uID0gbGVuZ3RoOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBXcml0ZSBpcyB2ZXJ5
IGJpZy4gIExldCdzIGRvIGl0IGFsbCBhdCBvbmNlLgotICAgICAgW3N0YXRlXy5vdXRwdXQgd3Jp
dGU6KCh1aW50OF90ICopdmFsdWUpICsgb2Zmc2V0IG1heExlbmd0aDpsZW5ndGhdOwotICAgIH0K
LSAgfQotfQotCi0tICh2b2lkKXdyaXRlVGFnOih1aW50MzJfdClmaWVsZE51bWJlciBmb3JtYXQ6
KEdQQldpcmVGb3JtYXQpZm9ybWF0IHsKLSAgR1BCV3JpdGVUYWdXaXRoRm9ybWF0KCZzdGF0ZV8s
IGZpZWxkTnVtYmVyLCBmb3JtYXQpOwotfQotCi0tICh2b2lkKXdyaXRlUmF3VmFyaW50MzI6KGlu
dDMyX3QpdmFsdWUgewotICBHUEJXcml0ZVJhd1ZhcmludDMyKCZzdGF0ZV8sIHZhbHVlKTsKLX0K
LQotLSAodm9pZCl3cml0ZVJhd1ZhcmludFNpemVUQXMzMjooc2l6ZV90KXZhbHVlIHsKLSAgLy8g
Tm90ZSB0aGUgdHJ1bmNhdGlvbi4KLSAgR1BCV3JpdGVSYXdWYXJpbnQzMigmc3RhdGVfLCAoaW50
MzJfdCl2YWx1ZSk7Ci19Ci0KLS0gKHZvaWQpd3JpdGVSYXdWYXJpbnQ2NDooaW50NjRfdCl2YWx1
ZSB7Ci0gIEdQQldyaXRlUmF3VmFyaW50NjQoJnN0YXRlXywgdmFsdWUpOwotfQotCi0tICh2b2lk
KXdyaXRlUmF3TGl0dGxlRW5kaWFuMzI6KGludDMyX3QpdmFsdWUgewotICBHUEJXcml0ZVJhd0xp
dHRsZUVuZGlhbjMyKCZzdGF0ZV8sIHZhbHVlKTsKLX0KLQotLSAodm9pZCl3cml0ZVJhd0xpdHRs
ZUVuZGlhbjY0OihpbnQ2NF90KXZhbHVlIHsKLSAgR1BCV3JpdGVSYXdMaXR0bGVFbmRpYW42NCgm
c3RhdGVfLCB2YWx1ZSk7Ci19Ci0KLUBlbmQKLQotc2l6ZV90IEdQQkNvbXB1dGVEb3VibGVTaXpl
Tm9UYWcoRmxvYXQ2NCB2YWx1ZSkgewotI3ByYWdtYSB1bnVzZWQodmFsdWUpCi0gIHJldHVybiBM
SVRUTEVfRU5ESUFOXzY0X1NJWkU7Ci19Ci0KLXNpemVfdCBHUEJDb21wdXRlRmxvYXRTaXplTm9U
YWcoRmxvYXQzMiB2YWx1ZSkgewotI3ByYWdtYSB1bnVzZWQodmFsdWUpCi0gIHJldHVybiBMSVRU
TEVfRU5ESUFOXzMyX1NJWkU7Ci19Ci0KLXNpemVfdCBHUEJDb21wdXRlVUludDY0U2l6ZU5vVGFn
KHVpbnQ2NF90IHZhbHVlKSB7Ci0gIHJldHVybiBHUEJDb21wdXRlUmF3VmFyaW50NjRTaXplKHZh
bHVlKTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVJbnQ2NFNpemVOb1RhZyhpbnQ2NF90IHZhbHVl
KSB7Ci0gIHJldHVybiBHUEJDb21wdXRlUmF3VmFyaW50NjRTaXplKHZhbHVlKTsKLX0KLQotc2l6
ZV90IEdQQkNvbXB1dGVJbnQzMlNpemVOb1RhZyhpbnQzMl90IHZhbHVlKSB7Ci0gIGlmICh2YWx1
ZSA+PSAwKSB7Ci0gICAgcmV0dXJuIEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemUodmFsdWUpOwot
ICB9IGVsc2UgewotICAgIC8vIE11c3Qgc2lnbi1leHRlbmQuCi0gICAgcmV0dXJuIDEwOwotICB9
Ci19Ci0KLXNpemVfdCBHUEJDb21wdXRlU2l6ZVRTaXplQXNJbnQzMk5vVGFnKHNpemVfdCB2YWx1
ZSkgewotICByZXR1cm4gR1BCQ29tcHV0ZUludDMyU2l6ZU5vVGFnKChpbnQzMl90KXZhbHVlKTsK
LX0KLQotc2l6ZV90IEdQQkNvbXB1dGVGaXhlZDY0U2l6ZU5vVGFnKHVpbnQ2NF90IHZhbHVlKSB7
Ci0jcHJhZ21hIHVudXNlZCh2YWx1ZSkKLSAgcmV0dXJuIExJVFRMRV9FTkRJQU5fNjRfU0laRTsK
LX0KLQotc2l6ZV90IEdQQkNvbXB1dGVGaXhlZDMyU2l6ZU5vVGFnKHVpbnQzMl90IHZhbHVlKSB7
Ci0jcHJhZ21hIHVudXNlZCh2YWx1ZSkKLSAgcmV0dXJuIExJVFRMRV9FTkRJQU5fMzJfU0laRTsK
LX0KLQotc2l6ZV90IEdQQkNvbXB1dGVCb29sU2l6ZU5vVGFnKEJPT0wgdmFsdWUpIHsKLSNwcmFn
bWEgdW51c2VkKHZhbHVlKQotICByZXR1cm4gMTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVTdHJp
bmdTaXplTm9UYWcoTlNTdHJpbmcgKnZhbHVlKSB7Ci0gIC8vIElmIHlvdSBhcmUgY29uY2VybmVk
IGFib3V0IGVtYmVkZGVkIE5VTExzIHNlZSB0aGUgdGVzdCBpbgotICAvLyArbG9hZCBhYm92ZS4K
LSAgY29uc3QgY2hhciAqcXVpY2tTdHJpbmcgPQotICAgICAgQ0ZTdHJpbmdHZXRDU3RyaW5nUHRy
KChDRlN0cmluZ1JlZil2YWx1ZSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKLSAgTlNVSW50ZWdl
ciBsZW5ndGggPQotICAgICAgKHF1aWNrU3RyaW5nICE9IE5VTEwpCi0gICAgICAgICAgPyBzdHJs
ZW4ocXVpY2tTdHJpbmcpCi0gICAgICAgICAgOiBbdmFsdWUgbGVuZ3RoT2ZCeXRlc1VzaW5nRW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICByZXR1cm4gR1BCQ29tcHV0ZVJhd1Zhcmlu
dDMyU2l6ZUZvckludGVnZXIobGVuZ3RoKSArIGxlbmd0aDsKLX0KLQotc2l6ZV90IEdQQkNvbXB1
dGVHcm91cFNpemVOb1RhZyhHUEJNZXNzYWdlICp2YWx1ZSkgewotICByZXR1cm4gW3ZhbHVlIHNl
cmlhbGl6ZWRTaXplXTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVVbmtub3duR3JvdXBTaXplTm9U
YWcoR1BCVW5rbm93bkZpZWxkU2V0ICp2YWx1ZSkgewotICByZXR1cm4gdmFsdWUuc2VyaWFsaXpl
ZFNpemU7Ci19Ci0KLXNpemVfdCBHUEJDb21wdXRlTWVzc2FnZVNpemVOb1RhZyhHUEJNZXNzYWdl
ICp2YWx1ZSkgewotICBzaXplX3Qgc2l6ZSA9IFt2YWx1ZSBzZXJpYWxpemVkU2l6ZV07Ci0gIHJl
dHVybiBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihzaXplKSArIHNpemU7Ci19
Ci0KLXNpemVfdCBHUEJDb21wdXRlQnl0ZXNTaXplTm9UYWcoTlNEYXRhICp2YWx1ZSkgewotICBO
U1VJbnRlZ2VyIHZhbHVlTGVuZ3RoID0gW3ZhbHVlIGxlbmd0aF07Ci0gIHJldHVybiBHUEJDb21w
dXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcih2YWx1ZUxlbmd0aCkgKyB2YWx1ZUxlbmd0aDsK
LX0KLQotc2l6ZV90IEdQQkNvbXB1dGVVSW50MzJTaXplTm9UYWcoaW50MzJfdCB2YWx1ZSkgewot
ICByZXR1cm4gR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZSh2YWx1ZSk7Ci19Ci0KLXNpemVfdCBH
UEJDb21wdXRlRW51bVNpemVOb1RhZyhpbnQzMl90IHZhbHVlKSB7Ci0gIHJldHVybiBHUEJDb21w
dXRlUmF3VmFyaW50MzJTaXplKHZhbHVlKTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVTRml4ZWQz
MlNpemVOb1RhZyhpbnQzMl90IHZhbHVlKSB7Ci0jcHJhZ21hIHVudXNlZCh2YWx1ZSkKLSAgcmV0
dXJuIExJVFRMRV9FTkRJQU5fMzJfU0laRTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVTRml4ZWQ2
NFNpemVOb1RhZyhpbnQ2NF90IHZhbHVlKSB7Ci0jcHJhZ21hIHVudXNlZCh2YWx1ZSkKLSAgcmV0
dXJuIExJVFRMRV9FTkRJQU5fNjRfU0laRTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVTSW50MzJT
aXplTm9UYWcoaW50MzJfdCB2YWx1ZSkgewotICByZXR1cm4gR1BCQ29tcHV0ZVJhd1ZhcmludDMy
U2l6ZShHUEJFbmNvZGVaaWdaYWczMih2YWx1ZSkpOwotfQotCi1zaXplX3QgR1BCQ29tcHV0ZVNJ
bnQ2NFNpemVOb1RhZyhpbnQ2NF90IHZhbHVlKSB7Ci0gIHJldHVybiBHUEJDb21wdXRlUmF3VmFy
aW50NjRTaXplKEdQQkVuY29kZVppZ1phZzY0KHZhbHVlKSk7Ci19Ci0KLXNpemVfdCBHUEJDb21w
dXRlRG91YmxlU2l6ZShpbnQzMl90IGZpZWxkTnVtYmVyLCBkb3VibGUgdmFsdWUpIHsKLSAgcmV0
dXJuIEdQQkNvbXB1dGVUYWdTaXplKGZpZWxkTnVtYmVyKSArIEdQQkNvbXB1dGVEb3VibGVTaXpl
Tm9UYWcodmFsdWUpOwotfQotCi1zaXplX3QgR1BCQ29tcHV0ZUZsb2F0U2l6ZShpbnQzMl90IGZp
ZWxkTnVtYmVyLCBmbG9hdCB2YWx1ZSkgewotICByZXR1cm4gR1BCQ29tcHV0ZVRhZ1NpemUoZmll
bGROdW1iZXIpICsgR1BCQ29tcHV0ZUZsb2F0U2l6ZU5vVGFnKHZhbHVlKTsKLX0KLQotc2l6ZV90
IEdQQkNvbXB1dGVVSW50NjRTaXplKGludDMyX3QgZmllbGROdW1iZXIsIHVpbnQ2NF90IHZhbHVl
KSB7Ci0gIHJldHVybiBHUEJDb21wdXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKyBHUEJDb21wdXRl
VUludDY0U2l6ZU5vVGFnKHZhbHVlKTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVJbnQ2NFNpemUo
aW50MzJfdCBmaWVsZE51bWJlciwgaW50NjRfdCB2YWx1ZSkgewotICByZXR1cm4gR1BCQ29tcHV0
ZVRhZ1NpemUoZmllbGROdW1iZXIpICsgR1BCQ29tcHV0ZUludDY0U2l6ZU5vVGFnKHZhbHVlKTsK
LX0KLQotc2l6ZV90IEdQQkNvbXB1dGVJbnQzMlNpemUoaW50MzJfdCBmaWVsZE51bWJlciwgaW50
MzJfdCB2YWx1ZSkgewotICByZXR1cm4gR1BCQ29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsg
R1BCQ29tcHV0ZUludDMyU2l6ZU5vVGFnKHZhbHVlKTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVG
aXhlZDY0U2l6ZShpbnQzMl90IGZpZWxkTnVtYmVyLCB1aW50NjRfdCB2YWx1ZSkgewotICByZXR1
cm4gR1BCQ29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsgR1BCQ29tcHV0ZUZpeGVkNjRTaXpl
Tm9UYWcodmFsdWUpOwotfQotCi1zaXplX3QgR1BCQ29tcHV0ZUZpeGVkMzJTaXplKGludDMyX3Qg
ZmllbGROdW1iZXIsIHVpbnQzMl90IHZhbHVlKSB7Ci0gIHJldHVybiBHUEJDb21wdXRlVGFnU2l6
ZShmaWVsZE51bWJlcikgKyBHUEJDb21wdXRlRml4ZWQzMlNpemVOb1RhZyh2YWx1ZSk7Ci19Ci0K
LXNpemVfdCBHUEJDb21wdXRlQm9vbFNpemUoaW50MzJfdCBmaWVsZE51bWJlciwgQk9PTCB2YWx1
ZSkgewotICByZXR1cm4gR1BCQ29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsgR1BCQ29tcHV0
ZUJvb2xTaXplTm9UYWcodmFsdWUpOwotfQotCi1zaXplX3QgR1BCQ29tcHV0ZVN0cmluZ1NpemUo
aW50MzJfdCBmaWVsZE51bWJlciwgTlNTdHJpbmcgKnZhbHVlKSB7Ci0gIHJldHVybiBHUEJDb21w
dXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKyBHUEJDb21wdXRlU3RyaW5nU2l6ZU5vVGFnKHZhbHVl
KTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVHcm91cFNpemUoaW50MzJfdCBmaWVsZE51bWJlciwg
R1BCTWVzc2FnZSAqdmFsdWUpIHsKLSAgcmV0dXJuIEdQQkNvbXB1dGVUYWdTaXplKGZpZWxkTnVt
YmVyKSAqIDIgKyBHUEJDb21wdXRlR3JvdXBTaXplTm9UYWcodmFsdWUpOwotfQotCi1zaXplX3Qg
R1BCQ29tcHV0ZVVua25vd25Hcm91cFNpemUoaW50MzJfdCBmaWVsZE51bWJlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJVbmtub3duRmllbGRTZXQgKnZhbHVlKSB7Ci0g
IHJldHVybiBHUEJDb21wdXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKiAyICsKLSAgICAgICAgIEdQ
QkNvbXB1dGVVbmtub3duR3JvdXBTaXplTm9UYWcodmFsdWUpOwotfQotCi1zaXplX3QgR1BCQ29t
cHV0ZU1lc3NhZ2VTaXplKGludDMyX3QgZmllbGROdW1iZXIsIEdQQk1lc3NhZ2UgKnZhbHVlKSB7
Ci0gIHJldHVybiBHUEJDb21wdXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKyBHUEJDb21wdXRlTWVz
c2FnZVNpemVOb1RhZyh2YWx1ZSk7Ci19Ci0KLXNpemVfdCBHUEJDb21wdXRlQnl0ZXNTaXplKGlu
dDMyX3QgZmllbGROdW1iZXIsIE5TRGF0YSAqdmFsdWUpIHsKLSAgcmV0dXJuIEdQQkNvbXB1dGVU
YWdTaXplKGZpZWxkTnVtYmVyKSArIEdQQkNvbXB1dGVCeXRlc1NpemVOb1RhZyh2YWx1ZSk7Ci19
Ci0KLXNpemVfdCBHUEJDb21wdXRlVUludDMyU2l6ZShpbnQzMl90IGZpZWxkTnVtYmVyLCB1aW50
MzJfdCB2YWx1ZSkgewotICByZXR1cm4gR1BCQ29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsg
R1BCQ29tcHV0ZVVJbnQzMlNpemVOb1RhZyh2YWx1ZSk7Ci19Ci0KLXNpemVfdCBHUEJDb21wdXRl
RW51bVNpemUoaW50MzJfdCBmaWVsZE51bWJlciwgaW50MzJfdCB2YWx1ZSkgewotICByZXR1cm4g
R1BCQ29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsgR1BCQ29tcHV0ZUVudW1TaXplTm9UYWco
dmFsdWUpOwotfQotCi1zaXplX3QgR1BCQ29tcHV0ZVNGaXhlZDMyU2l6ZShpbnQzMl90IGZpZWxk
TnVtYmVyLCBpbnQzMl90IHZhbHVlKSB7Ci0gIHJldHVybiBHUEJDb21wdXRlVGFnU2l6ZShmaWVs
ZE51bWJlcikgKyBHUEJDb21wdXRlU0ZpeGVkMzJTaXplTm9UYWcodmFsdWUpOwotfQotCi1zaXpl
X3QgR1BCQ29tcHV0ZVNGaXhlZDY0U2l6ZShpbnQzMl90IGZpZWxkTnVtYmVyLCBpbnQ2NF90IHZh
bHVlKSB7Ci0gIHJldHVybiBHUEJDb21wdXRlVGFnU2l6ZShmaWVsZE51bWJlcikgKyBHUEJDb21w
dXRlU0ZpeGVkNjRTaXplTm9UYWcodmFsdWUpOwotfQotCi1zaXplX3QgR1BCQ29tcHV0ZVNJbnQz
MlNpemUoaW50MzJfdCBmaWVsZE51bWJlciwgaW50MzJfdCB2YWx1ZSkgewotICByZXR1cm4gR1BC
Q29tcHV0ZVRhZ1NpemUoZmllbGROdW1iZXIpICsgR1BCQ29tcHV0ZVNJbnQzMlNpemVOb1RhZyh2
YWx1ZSk7Ci19Ci0KLXNpemVfdCBHUEJDb21wdXRlU0ludDY0U2l6ZShpbnQzMl90IGZpZWxkTnVt
YmVyLCBpbnQ2NF90IHZhbHVlKSB7Ci0gIHJldHVybiBHUEJDb21wdXRlVGFnU2l6ZShmaWVsZE51
bWJlcikgKwotICAgICAgICAgR1BCQ29tcHV0ZVJhd1ZhcmludDY0U2l6ZShHUEJFbmNvZGVaaWda
YWc2NCh2YWx1ZSkpOwotfQotCi1zaXplX3QgR1BCQ29tcHV0ZU1lc3NhZ2VTZXRFeHRlbnNpb25T
aXplKGludDMyX3QgZmllbGROdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdQQk1lc3NhZ2UgKnZhbHVlKSB7Ci0gIHJldHVybiBHUEJDb21wdXRlVGFnU2l6
ZShHUEJXaXJlRm9ybWF0TWVzc2FnZVNldEl0ZW0pICogMiArCi0gICAgICAgICBHUEJDb21wdXRl
VUludDMyU2l6ZShHUEJXaXJlRm9ybWF0TWVzc2FnZVNldFR5cGVJZCwgZmllbGROdW1iZXIpICsK
LSAgICAgICAgIEdQQkNvbXB1dGVNZXNzYWdlU2l6ZShHUEJXaXJlRm9ybWF0TWVzc2FnZVNldE1l
c3NhZ2UsIHZhbHVlKTsKLX0KLQotc2l6ZV90IEdQQkNvbXB1dGVSYXdNZXNzYWdlU2V0RXh0ZW5z
aW9uU2l6ZShpbnQzMl90IGZpZWxkTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOU0RhdGEgKnZhbHVlKSB7Ci0gIHJldHVybiBHUEJDb21wdXRlVGFn
U2l6ZShHUEJXaXJlRm9ybWF0TWVzc2FnZVNldEl0ZW0pICogMiArCi0gICAgICAgICBHUEJDb21w
dXRlVUludDMyU2l6ZShHUEJXaXJlRm9ybWF0TWVzc2FnZVNldFR5cGVJZCwgZmllbGROdW1iZXIp
ICsKLSAgICAgICAgIEdQQkNvbXB1dGVCeXRlc1NpemUoR1BCV2lyZUZvcm1hdE1lc3NhZ2VTZXRN
ZXNzYWdlLCB2YWx1ZSk7Ci19Ci0KLXNpemVfdCBHUEJDb21wdXRlVGFnU2l6ZShpbnQzMl90IGZp
ZWxkTnVtYmVyKSB7Ci0gIHJldHVybiBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplKAotICAgICAg
R1BCV2lyZUZvcm1hdE1ha2VUYWcoZmllbGROdW1iZXIsIEdQQldpcmVGb3JtYXRWYXJpbnQpKTsK
LX0KLQotc2l6ZV90IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShpbnQgZmllbGRfbnVtYmVy
LCBHUEJEYXRhVHlwZSBkYXRhVHlwZSkgewotICBzaXplX3QgcmVzdWx0ID0gR1BCQ29tcHV0ZVRh
Z1NpemUoZmllbGRfbnVtYmVyKTsKLSAgaWYgKGRhdGFUeXBlID09IEdQQkRhdGFUeXBlR3JvdXAp
IHsKLSAgICAvLyBHcm91cHMgaGF2ZSBib3RoIGEgc3RhcnQgYW5kIGFuIGVuZCB0YWcuCi0gICAg
cmV0dXJuIHJlc3VsdCAqIDI7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQot
fQotCi1zaXplX3QgR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZShpbnQzMl90IHZhbHVlKSB7Ci0g
IC8vIHZhbHVlIGlzIHRyZWF0ZWQgYXMgdW5zaWduZWQsIHNvIGl0IHdvbid0IGJlIHNpZ24tZXh0
ZW5kZWQgaWYgbmVnYXRpdmUuCi0gIGlmICgodmFsdWUgJiAoMHhmZmZmZmZmZiA8PCA3KSkgPT0g
MCkgcmV0dXJuIDE7Ci0gIGlmICgodmFsdWUgJiAoMHhmZmZmZmZmZiA8PCAxNCkpID09IDApIHJl
dHVybiAyOwotICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmYgPDwgMjEpKSA9PSAwKSByZXR1cm4g
MzsKLSAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmIDw8IDI4KSkgPT0gMCkgcmV0dXJuIDQ7Ci0g
IHJldHVybiA1OwotfQotCi1zaXplX3QgR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVn
ZXIoTlNJbnRlZ2VyIHZhbHVlKSB7Ci0gIC8vIE5vdGUgdGhlIHRydW5jYXRpb24uCi0gIHJldHVy
biBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplKChpbnQzMl90KXZhbHVlKTsKLX0KLQotc2l6ZV90
IEdQQkNvbXB1dGVSYXdWYXJpbnQ2NFNpemUoaW50NjRfdCB2YWx1ZSkgewotICBpZiAoKHZhbHVl
ICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwgNykpID09IDApIHJldHVybiAxOwotICBpZiAoKHZh
bHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwgMTQpKSA9PSAwKSByZXR1cm4gMjsKLSAgaWYg
KCh2YWx1ZSAmICgweGZmZmZmZmZmZmZmZmZmZmZMIDw8IDIxKSkgPT0gMCkgcmV0dXJuIDM7Ci0g
IGlmICgodmFsdWUgJiAoMHhmZmZmZmZmZmZmZmZmZmZmTCA8PCAyOCkpID09IDApIHJldHVybiA0
OwotICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwgMzUpKSA9PSAwKSByZXR1
cm4gNTsKLSAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmZmZmZmZmZmZMIDw8IDQyKSkgPT0gMCkg
cmV0dXJuIDY7Ci0gIGlmICgodmFsdWUgJiAoMHhmZmZmZmZmZmZmZmZmZmZmTCA8PCA0OSkpID09
IDApIHJldHVybiA3OwotICBpZiAoKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZkwgPDwgNTYp
KSA9PSAwKSByZXR1cm4gODsKLSAgaWYgKCh2YWx1ZSAmICgweGZmZmZmZmZmZmZmZmZmZmZMIDw8
IDYzKSkgPT0gMCkgcmV0dXJuIDk7Ci0gIHJldHVybiAxMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0
aXZlYy9HUEJDb2RlZE91dHB1dFN0cmVhbV9QYWNrYWdlUHJpdmF0ZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQ
QkNvZGVkT3V0cHV0U3RyZWFtX1BhY2thZ2VQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJlN2JiNGM0YTI3ZTI3MWFjOGExYmI5ODM3MWY2YjU0YzhiZmQzNGMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkNv
ZGVkT3V0cHV0U3RyZWFtX1BhY2thZ2VQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbXBvcnQgIkdQ
QkNvZGVkT3V0cHV0U3RyZWFtLmgiCi0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi0KLUNGX0VY
VEVSTl9DX0JFR0lOCi0KLXNpemVfdCBHUEJDb21wdXRlRG91YmxlU2l6ZShpbnQzMl90IGZpZWxk
TnVtYmVyLCBkb3VibGUgdmFsdWUpCi0gICAgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVf
dCBHUEJDb21wdXRlRmxvYXRTaXplKGludDMyX3QgZmllbGROdW1iZXIsIGZsb2F0IHZhbHVlKQot
ICAgIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7Ci1zaXplX3QgR1BCQ29tcHV0ZVVJbnQ2NFNpemUo
aW50MzJfdCBmaWVsZE51bWJlciwgdWludDY0X3QgdmFsdWUpCi0gICAgX19hdHRyaWJ1dGVfXygo
Y29uc3QpKTsKLXNpemVfdCBHUEJDb21wdXRlSW50NjRTaXplKGludDMyX3QgZmllbGROdW1iZXIs
IGludDY0X3QgdmFsdWUpCi0gICAgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJD
b21wdXRlSW50MzJTaXplKGludDMyX3QgZmllbGROdW1iZXIsIGludDMyX3QgdmFsdWUpCi0gICAg
X19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJDb21wdXRlRml4ZWQ2NFNpemUoaW50
MzJfdCBmaWVsZE51bWJlciwgdWludDY0X3QgdmFsdWUpCi0gICAgX19hdHRyaWJ1dGVfXygoY29u
c3QpKTsKLXNpemVfdCBHUEJDb21wdXRlRml4ZWQzMlNpemUoaW50MzJfdCBmaWVsZE51bWJlciwg
dWludDMyX3QgdmFsdWUpCi0gICAgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJD
b21wdXRlQm9vbFNpemUoaW50MzJfdCBmaWVsZE51bWJlciwgQk9PTCB2YWx1ZSkKLSAgICBfX2F0
dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNvbXB1dGVTdHJpbmdTaXplKGludDMyX3Qg
ZmllbGROdW1iZXIsIE5TU3RyaW5nICp2YWx1ZSkKLSAgICBfX2F0dHJpYnV0ZV9fKChjb25zdCkp
Owotc2l6ZV90IEdQQkNvbXB1dGVHcm91cFNpemUoaW50MzJfdCBmaWVsZE51bWJlciwgR1BCTWVz
c2FnZSAqdmFsdWUpCi0gICAgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJDb21w
dXRlVW5rbm93bkdyb3VwU2l6ZShpbnQzMl90IGZpZWxkTnVtYmVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdQQlVua25vd25GaWVsZFNldCAqdmFsdWUpCi0gICAgX19hdHRy
aWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJDb21wdXRlTWVzc2FnZVNpemUoaW50MzJfdCBm
aWVsZE51bWJlciwgR1BCTWVzc2FnZSAqdmFsdWUpCi0gICAgX19hdHRyaWJ1dGVfXygoY29uc3Qp
KTsKLXNpemVfdCBHUEJDb21wdXRlQnl0ZXNTaXplKGludDMyX3QgZmllbGROdW1iZXIsIE5TRGF0
YSAqdmFsdWUpCi0gICAgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJDb21wdXRl
VUludDMyU2l6ZShpbnQzMl90IGZpZWxkTnVtYmVyLCB1aW50MzJfdCB2YWx1ZSkKLSAgICBfX2F0
dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNvbXB1dGVTRml4ZWQzMlNpemUoaW50MzJf
dCBmaWVsZE51bWJlciwgaW50MzJfdCB2YWx1ZSkKLSAgICBfX2F0dHJpYnV0ZV9fKChjb25zdCkp
Owotc2l6ZV90IEdQQkNvbXB1dGVTRml4ZWQ2NFNpemUoaW50MzJfdCBmaWVsZE51bWJlciwgaW50
NjRfdCB2YWx1ZSkKLSAgICBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNvbXB1
dGVTSW50MzJTaXplKGludDMyX3QgZmllbGROdW1iZXIsIGludDMyX3QgdmFsdWUpCi0gICAgX19h
dHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJDb21wdXRlU0ludDY0U2l6ZShpbnQzMl90
IGZpZWxkTnVtYmVyLCBpbnQ2NF90IHZhbHVlKQotICAgIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7
Ci1zaXplX3QgR1BCQ29tcHV0ZVRhZ1NpemUoaW50MzJfdCBmaWVsZE51bWJlcikgX19hdHRyaWJ1
dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoaW50IGZp
ZWxkX251bWJlciwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpCi0gICAgX19hdHRyaWJ1dGVfXygoY29u
c3QpKTsKLQotc2l6ZV90IEdQQkNvbXB1dGVEb3VibGVTaXplTm9UYWcoZG91YmxlIHZhbHVlKSBf
X2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNvbXB1dGVGbG9hdFNpemVOb1RhZyhm
bG9hdCB2YWx1ZSkgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJDb21wdXRlVUlu
dDY0U2l6ZU5vVGFnKHVpbnQ2NF90IHZhbHVlKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6
ZV90IEdQQkNvbXB1dGVJbnQ2NFNpemVOb1RhZyhpbnQ2NF90IHZhbHVlKSBfX2F0dHJpYnV0ZV9f
KChjb25zdCkpOwotc2l6ZV90IEdQQkNvbXB1dGVJbnQzMlNpemVOb1RhZyhpbnQzMl90IHZhbHVl
KSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNvbXB1dGVGaXhlZDY0U2l6ZU5v
VGFnKHVpbnQ2NF90IHZhbHVlKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNv
bXB1dGVGaXhlZDMyU2l6ZU5vVGFnKHVpbnQzMl90IHZhbHVlKSBfX2F0dHJpYnV0ZV9fKChjb25z
dCkpOwotc2l6ZV90IEdQQkNvbXB1dGVCb29sU2l6ZU5vVGFnKEJPT0wgdmFsdWUpIF9fYXR0cmli
dXRlX18oKGNvbnN0KSk7Ci1zaXplX3QgR1BCQ29tcHV0ZVN0cmluZ1NpemVOb1RhZyhOU1N0cmlu
ZyAqdmFsdWUpIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7Ci1zaXplX3QgR1BCQ29tcHV0ZUdyb3Vw
U2l6ZU5vVGFnKEdQQk1lc3NhZ2UgKnZhbHVlKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6
ZV90IEdQQkNvbXB1dGVVbmtub3duR3JvdXBTaXplTm9UYWcoR1BCVW5rbm93bkZpZWxkU2V0ICp2
YWx1ZSkKLSAgICBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNvbXB1dGVNZXNz
YWdlU2l6ZU5vVGFnKEdQQk1lc3NhZ2UgKnZhbHVlKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwot
c2l6ZV90IEdQQkNvbXB1dGVCeXRlc1NpemVOb1RhZyhOU0RhdGEgKnZhbHVlKSBfX2F0dHJpYnV0
ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNvbXB1dGVVSW50MzJTaXplTm9UYWcoaW50MzJfdCB2
YWx1ZSkgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJDb21wdXRlRW51bVNpemVO
b1RhZyhpbnQzMl90IHZhbHVlKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNv
bXB1dGVTRml4ZWQzMlNpemVOb1RhZyhpbnQzMl90IHZhbHVlKSBfX2F0dHJpYnV0ZV9fKChjb25z
dCkpOwotc2l6ZV90IEdQQkNvbXB1dGVTRml4ZWQ2NFNpemVOb1RhZyhpbnQ2NF90IHZhbHVlKSBf
X2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc2l6ZV90IEdQQkNvbXB1dGVTSW50MzJTaXplTm9UYWco
aW50MzJfdCB2YWx1ZSkgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXNpemVfdCBHUEJDb21wdXRl
U0ludDY0U2l6ZU5vVGFnKGludDY0X3QgdmFsdWUpIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7Ci0K
LS8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgY2FsY3VsYXRlIHRoZSBzaXplIG9mIDY0IGJpdCB2YWx1
ZXMgdHJ1bmNhdGVkIHRvIDMyLgotc2l6ZV90IEdQQkNvbXB1dGVTaXplVFNpemVBc0ludDMyTm9U
YWcoc2l6ZV90IHZhbHVlKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotCi1zaXplX3QgR1BCQ29t
cHV0ZVJhd1ZhcmludDMyU2l6ZShpbnQzMl90IHZhbHVlKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkp
Owotc2l6ZV90IEdQQkNvbXB1dGVSYXdWYXJpbnQ2NFNpemUoaW50NjRfdCB2YWx1ZSkgX19hdHRy
aWJ1dGVfXygoY29uc3QpKTsKLQotLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBjYWxjdWxhdGUgdGhl
IHNpemUgb2YgNjQgYml0IHZhbHVlcyB0cnVuY2F0ZWQgdG8gMzIuCi1zaXplX3QgR1BCQ29tcHV0
ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIoTlNJbnRlZ2VyIHZhbHVlKQotICAgIF9fYXR0cmli
dXRlX18oKGNvbnN0KSk7Ci0KLS8vIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdv
dWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYQotLy8gTWVzc2FnZVNldCBleHRlbnNpb24gdG8gdGhl
IHN0cmVhbS4gIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsCi0vLyB0aGUgd2lyZSBmb3JtYXQgZGlm
ZmVycyBmcm9tIG5vcm1hbCBmaWVsZHMuCi1zaXplX3QgR1BCQ29tcHV0ZU1lc3NhZ2VTZXRFeHRl
bnNpb25TaXplKGludDMyX3QgZmllbGROdW1iZXIsIEdQQk1lc3NhZ2UgKnZhbHVlKQotICAgIF9f
YXR0cmlidXRlX18oKGNvbnN0KSk7Ci0KLS8vIENvbXB1dGUgdGhlIG51bWJlciBvZiBieXRlcyB0
aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBlbmNvZGUgYW4KLS8vIHVucGFyc2VkIE1lc3NhZ2VTZXQg
ZXh0ZW5zaW9uIGZpZWxkIHRvIHRoZSBzdHJlYW0uICBGb3IKLS8vIGhpc3RvcmljYWwgcmVhc29u
cywgdGhlIHdpcmUgZm9ybWF0IGRpZmZlcnMgZnJvbSBub3JtYWwgZmllbGRzLgotc2l6ZV90IEdQ
QkNvbXB1dGVSYXdNZXNzYWdlU2V0RXh0ZW5zaW9uU2l6ZShpbnQzMl90IGZpZWxkTnVtYmVyLCBO
U0RhdGEgKnZhbHVlKQotICAgIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7Ci0KLXNpemVfdCBHUEJD
b21wdXRlRW51bVNpemUoaW50MzJfdCBmaWVsZE51bWJlciwgaW50MzJfdCB2YWx1ZSkKLSAgICBf
X2F0dHJpYnV0ZV9fKChjb25zdCkpOwotCi1DRl9FWFRFUk5fQ19FTkQKLQotTlNfQVNTVU1FX05P
Tk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCRGVzY3JpcHRvci5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3Rp
dmVjL0dQQkRlc2NyaXB0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZlZmYw
ZmI3ZDE0Yjk3ZWNlYjM0NGY5N2QyNWQ2ZmFkYjM1MzE2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCRGVzY3JpcHRvci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCAiR1BC
UnVudGltZVR5cGVzLmgiCi0KLUBjbGFzcyBHUEJFbnVtRGVzY3JpcHRvcjsKLUBjbGFzcyBHUEJG
aWVsZERlc2NyaXB0b3I7Ci1AY2xhc3MgR1BCRmlsZURlc2NyaXB0b3I7Ci1AY2xhc3MgR1BCT25l
b2ZEZXNjcmlwdG9yOwotCi1OU19BU1NVTUVfTk9OTlVMTF9CRUdJTgotCi10eXBlZGVmIE5TX0VO
VU0odWludDhfdCwgR1BCRmlsZVN5bnRheCkgewotICBHUEJGaWxlU3ludGF4VW5rbm93biA9IDAs
Ci0gIEdQQkZpbGVTeW50YXhQcm90bzIgPSAyLAotICBHUEJGaWxlU3ludGF4UHJvdG8zID0gMywK
LX07Ci0KLXR5cGVkZWYgTlNfRU5VTSh1aW50OF90LCBHUEJGaWVsZFR5cGUpIHsKLSAgR1BCRmll
bGRUeXBlU2luZ2xlLCAgICAvLyBvcHRpb25hbC9yZXF1aXJlZAotICBHUEJGaWVsZFR5cGVSZXBl
YXRlZCwgIC8vIHJlcGVhdGVkCi0gIEdQQkZpZWxkVHlwZU1hcCwgICAgICAgLy8gbWFwPEssVj4K
LX07Ci0KLUBpbnRlcmZhY2UgR1BCRGVzY3JpcHRvciA6IE5TT2JqZWN0PE5TQ29weWluZz4KLQot
QHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpuYW1lOwotQHBy
b3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIHN0cm9uZywgbnVsbGFibGUpIE5TQXJyYXk8R1BC
RmllbGREZXNjcmlwdG9yKj4gKmZpZWxkczsKLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5
LCBzdHJvbmcsIG51bGxhYmxlKSBOU0FycmF5PEdQQk9uZW9mRGVzY3JpcHRvcio+ICpvbmVvZnM7
Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgbnVsbGFibGUpIGNvbnN0IEdQQkV4dGVu
c2lvblJhbmdlICpleHRlbnNpb25SYW5nZXM7Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25s
eSkgdWludDMyX3QgZXh0ZW5zaW9uUmFuZ2VzQ291bnQ7Ci1AcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkb25seSwgYXNzaWduKSBHUEJGaWxlRGVzY3JpcHRvciAqZmlsZTsKLQotQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc1dpcmVGb3JtYXQpIEJPT0wgd2lyZUZvcm1hdDsK
LUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBDbGFzcyBtZXNzYWdlQ2xhc3M7Ci0KLS0g
KG51bGxhYmxlIEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkV2l0aE51bWJlcjoodWludDMyX3Qp
ZmllbGROdW1iZXI7Ci0tIChudWxsYWJsZSBHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZFdpdGhO
YW1lOihOU1N0cmluZyAqKW5hbWU7Ci0tIChudWxsYWJsZSBHUEJPbmVvZkRlc2NyaXB0b3IgKilv
bmVvZldpdGhOYW1lOihOU1N0cmluZyAqKW5hbWU7Ci0KLUBlbmQKLQotQGludGVyZmFjZSBHUEJG
aWxlRGVzY3JpcHRvciA6IE5TT2JqZWN0Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5
LCBjb3B5KSBOU1N0cmluZyAqcGFja2FnZTsKLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5
KSBHUEJGaWxlU3ludGF4IHN5bnRheDsKLQotQGVuZAotCi1AaW50ZXJmYWNlIEdQQk9uZW9mRGVz
Y3JpcHRvciA6IE5TT2JqZWN0Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJp
bmcgKm5hbWU7Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxHUEJGaWVs
ZERlc2NyaXB0b3IqPiAqZmllbGRzOwotCi0tIChudWxsYWJsZSBHUEJGaWVsZERlc2NyaXB0b3Ig
KilmaWVsZFdpdGhOdW1iZXI6KHVpbnQzMl90KWZpZWxkTnVtYmVyOwotLSAobnVsbGFibGUgR1BC
RmllbGREZXNjcmlwdG9yICopZmllbGRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lOwotQGVuZAot
Ci1AaW50ZXJmYWNlIEdQQkZpZWxkRGVzY3JpcHRvciA6IE5TT2JqZWN0Ci0KLUBwcm9wZXJ0eShu
b25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqbmFtZTsKLUBwcm9wZXJ0eShub25h
dG9taWMsIHJlYWRvbmx5KSB1aW50MzJfdCBudW1iZXI7Ci1AcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkb25seSkgR1BCRGF0YVR5cGUgZGF0YVR5cGU7Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFk
b25seSkgQk9PTCBoYXNEZWZhdWx0VmFsdWU7Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25s
eSkgR1BCR2VuZXJpY1ZhbHVlIGRlZmF1bHRWYWx1ZTsKLUBwcm9wZXJ0eShub25hdG9taWMsIHJl
YWRvbmx5LCBnZXR0ZXI9aXNSZXF1aXJlZCkgQk9PTCByZXF1aXJlZDsKLUBwcm9wZXJ0eShub25h
dG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNPcHRpb25hbCkgQk9PTCBvcHRpb25hbDsKLUBwcm9w
ZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBHUEJGaWVsZFR5cGUgZmllbGRUeXBlOwotLy8gSWYg
aXQgaXMgYSBtYXAsIHRoZSB2YWx1ZSB0eXBlIGlzIGluIC10eXBlLgotQHByb3BlcnR5KG5vbmF0
b21pYywgcmVhZG9ubHkpIEdQQkRhdGFUeXBlIG1hcEtleURhdGFUeXBlOwotQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc1BhY2thYmxlKSBCT09MIHBhY2thYmxlOwotCi1A
cHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgYXNzaWduLCBudWxsYWJsZSkgR1BCT25lb2ZE
ZXNjcmlwdG9yICpjb250YWluaW5nT25lb2Y7Ci0KLS8vIE1lc3NhZ2UgcHJvcGVydGllcwotQHBy
b3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIGFzc2lnbiwgbnVsbGFibGUpIENsYXNzIG1zZ0Ns
YXNzOwotCi0vLyBFbnVtIHByb3BlcnRpZXMKLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5
LCBzdHJvbmcsIG51bGxhYmxlKSBHUEJFbnVtRGVzY3JpcHRvciAqZW51bURlc2NyaXB0b3I7Ci0K
LS0gKEJPT0wpaXNWYWxpZEVudW1WYWx1ZTooaW50MzJfdCl2YWx1ZTsKLQotLy8gRm9yIG5vdywg
dGhpcyB3aWxsIHJldHVybiBuaWwgaWYgaXQgZG9lc24ndCBrbm93IHRoZSBuYW1lIHRvIHVzZSBm
b3IKLS8vIFRleHRGb3JtYXQuCi0tIChudWxsYWJsZSBOU1N0cmluZyAqKXRleHRGb3JtYXROYW1l
OwotCi1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCRW51bURlc2NyaXB0b3IgOiBOU09iamVjdAotCi1A
cHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKm5hbWU7Ci1AcHJv
cGVydHkobm9uYXRvbWljLCByZWFkb25seSkgR1BCRW51bVZhbGlkYXRpb25GdW5jIGVudW1WZXJp
ZmllcjsKLQotLSAobnVsbGFibGUgTlNTdHJpbmcgKillbnVtTmFtZUZvclZhbHVlOihpbnQzMl90
KW51bWJlcjsKLS0gKEJPT0wpZ2V0VmFsdWU6KG51bGxhYmxlIGludDMyX3QgKilvdXRWYWx1ZSBm
b3JFbnVtTmFtZTooTlNTdHJpbmcgKiluYW1lOwotCi0tIChudWxsYWJsZSBOU1N0cmluZyAqKXRl
eHRGb3JtYXROYW1lRm9yVmFsdWU6KGludDMyX3QpbnVtYmVyOwotCi1AZW5kCi0KLUBpbnRlcmZh
Y2UgR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciA6IE5TT2JqZWN0PE5TQ29weWluZz4KLUBwcm9wZXJ0
eShub25hdG9taWMsIHJlYWRvbmx5KSB1aW50MzJfdCBmaWVsZE51bWJlcjsKLUBwcm9wZXJ0eShu
b25hdG9taWMsIHJlYWRvbmx5KSBDbGFzcyBjb250YWluaW5nTWVzc2FnZUNsYXNzOwotQHByb3Bl
cnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIEdQQkRhdGFUeXBlIGRhdGFUeXBlOwotQHByb3BlcnR5
KG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc1JlcGVhdGVkKSBCT09MIHJlcGVhdGVkOwot
QHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc1BhY2thYmxlKSBCT09MIHBh
Y2thYmxlOwotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIGFzc2lnbikgQ2xhc3MgbXNn
Q2xhc3M7Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKnNpbmdsZXRv
bk5hbWU7Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgc3Ryb25nLCBudWxsYWJsZSkg
R1BCRW51bURlc2NyaXB0b3IgKmVudW1EZXNjcmlwdG9yOwotQHByb3BlcnR5KG5vbmF0b21pYywg
cmVhZG9ubHkpIGlkIGRlZmF1bHRWYWx1ZTsKLUBlbmQKLQotTlNfQVNTVU1FX05PTk5VTExfRU5E
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCRGVzY3JpcHRvci5tIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkRl
c2NyaXB0b3IubQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcwOTczN2NhZDZhZDI2
ZWRhMTM5YWY4ZDlhNDI4ODBkMmE2M2UxNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCRGVzY3JpcHRvci5tCisrKyAvZGV2L251bGwK
QEAgLTEsOTYzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0j
aW1wb3J0ICJHUEJEZXNjcmlwdG9yX1BhY2thZ2VQcml2YXRlLmgiCi0KLSNpbXBvcnQgPG9iamMv
cnVudGltZS5oPgotCi0jaW1wb3J0ICJHUEJVdGlsaXRpZXNfUGFja2FnZVByaXZhdGUuaCIKLSNp
bXBvcnQgIkdQQldpcmVGb3JtYXQuaCIKLSNpbXBvcnQgIkdQQk1lc3NhZ2VfUGFja2FnZVByaXZh
dGUuaCIKLQotLy8gVGhlIGFkZHJlc3Mgb2YgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGFzIGEga2V5
IGZvciBvYmpfZ2V0QXNzb2NpYXRlZE9iamVjdC4KLXN0YXRpYyBjb25zdCBjaGFyIGtUZXh0Rm9y
bWF0RXh0cmFWYWx1ZUtleSA9IDA7Ci0KLS8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gZ2VuZXJhdGUg
c2VsZWN0b3JzIG9uIHRoZSBmbHkuCi1zdGF0aWMgU0VMIFNlbEZyb21TdHJpbmdzKGNvbnN0IGNo
YXIgKnByZWZpeCwgY29uc3QgY2hhciAqbWlkZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpzdWZmaXgsIEJPT0wgdGFrZXNBcmcpIHsKLSAgaWYgKHByZWZpeCA9PSBO
VUxMICYmIHN1ZmZpeCA9PSBOVUxMICYmICF0YWtlc0FyZykgewotICAgIHJldHVybiBzZWxfZ2V0
VWlkKG1pZGRsZSk7Ci0gIH0KLSAgY29uc3Qgc2l6ZV90IHByZWZpeExlbiA9IHByZWZpeCAhPSBO
VUxMID8gc3RybGVuKHByZWZpeCkgOiAwOwotICBjb25zdCBzaXplX3QgbWlkZGxlTGVuID0gc3Ry
bGVuKG1pZGRsZSk7Ci0gIGNvbnN0IHNpemVfdCBzdWZmaXhMZW4gPSBzdWZmaXggIT0gTlVMTCA/
IHN0cmxlbihzdWZmaXgpIDogMDsKLSAgc2l6ZV90IHRvdGFsTGVuID0KLSAgICAgIHByZWZpeExl
biArIG1pZGRsZUxlbiArIHN1ZmZpeExlbiArIDE7ICAvLyBpbmNsdWRlIHNwYWNlIGZvciBudWxs
IG9uIGVuZC4KLSAgaWYgKHRha2VzQXJnKSB7Ci0gICAgdG90YWxMZW4gKz0gMTsKLSAgfQotICBj
aGFyIGJ1ZmZlclt0b3RhbExlbl07Ci0gIGlmIChwcmVmaXggIT0gTlVMTCkgewotICAgIG1lbWNw
eShidWZmZXIsIHByZWZpeCwgcHJlZml4TGVuKTsKLSAgICBtZW1jcHkoYnVmZmVyICsgcHJlZml4
TGVuLCBtaWRkbGUsIG1pZGRsZUxlbik7Ci0gICAgYnVmZmVyW3ByZWZpeExlbl0gPSAoY2hhcil0
b3VwcGVyKGJ1ZmZlcltwcmVmaXhMZW5dKTsKLSAgfSBlbHNlIHsKLSAgICBtZW1jcHkoYnVmZmVy
LCBtaWRkbGUsIG1pZGRsZUxlbik7Ci0gIH0KLSAgaWYgKHN1ZmZpeCAhPSBOVUxMKSB7Ci0gICAg
bWVtY3B5KGJ1ZmZlciArIHByZWZpeExlbiArIG1pZGRsZUxlbiwgc3VmZml4LCBzdWZmaXhMZW4p
OwotICB9Ci0gIGlmICh0YWtlc0FyZykgewotICAgIGJ1ZmZlclt0b3RhbExlbiAtIDJdID0gJzon
OwotICB9Ci0gIC8vIEFsd2F5cyBudWxsIHRlcm1pbmF0ZSBpdC4KLSAgYnVmZmVyW3RvdGFsTGVu
IC0gMV0gPSAwOwotCi0gIFNFTCByZXN1bHQgPSBzZWxfZ2V0VWlkKGJ1ZmZlcik7Ci0gIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBOU0FycmF5ICpOZXdGaWVsZHNBcnJheUZvckhhc0luZGV4
KGludCBoYXNJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TQXJyYXkgKmFsbE1lc3NhZ2VGaWVsZHMpCi0gICAgX19hdHRyaWJ1dGVfXygobnNfcmV0dXJu
c19yZXRhaW5lZCkpOwotCi1zdGF0aWMgTlNBcnJheSAqTmV3RmllbGRzQXJyYXlGb3JIYXNJbmRl
eChpbnQgaGFzSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOU0FycmF5ICphbGxNZXNzYWdlRmllbGRzKSB7Ci0gIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgZm9yIChHUEJGaWVsZERlc2NyaXB0
b3IgKmZpZWxkRGVzYyBpbiBhbGxNZXNzYWdlRmllbGRzKSB7Ci0gICAgaWYgKGZpZWxkRGVzYy0+
ZGVzY3JpcHRpb25fLT5oYXNJbmRleCA9PSBoYXNJbmRleCkgewotICAgICAgW3Jlc3VsdCBhZGRP
YmplY3Q6ZmllbGREZXNjXTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQGlt
cGxlbWVudGF0aW9uIEdQQkRlc2NyaXB0b3IgewotICBDbGFzcyBtZXNzYWdlQ2xhc3NfOwotICBH
UEJGaWxlRGVzY3JpcHRvciAqZmlsZV87Ci0gIEJPT0wgd2lyZUZvcm1hdF87Ci19Ci0KLUBzeW50
aGVzaXplIG1lc3NhZ2VDbGFzcyA9IG1lc3NhZ2VDbGFzc187Ci1Ac3ludGhlc2l6ZSBmaWVsZHMg
PSBmaWVsZHNfOwotQHN5bnRoZXNpemUgb25lb2ZzID0gb25lb2ZzXzsKLUBzeW50aGVzaXplIGV4
dGVuc2lvblJhbmdlcyA9IGV4dGVuc2lvblJhbmdlc187Ci1Ac3ludGhlc2l6ZSBleHRlbnNpb25S
YW5nZXNDb3VudCA9IGV4dGVuc2lvblJhbmdlc0NvdW50XzsKLUBzeW50aGVzaXplIGZpbGUgPSBm
aWxlXzsKLUBzeW50aGVzaXplIHdpcmVGb3JtYXQgPSB3aXJlRm9ybWF0XzsKLQotKyAoaW5zdGFu
Y2V0eXBlKQotICAgIGFsbG9jRGVzY3JpcHRvckZvckNsYXNzOihDbGFzcyltZXNzYWdlQ2xhc3MK
LSAgICAgICAgICAgICAgICAgIHJvb3RDbGFzczooQ2xhc3Mpcm9vdENsYXNzCi0gICAgICAgICAg
ICAgICAgICAgICAgIGZpbGU6KEdQQkZpbGVEZXNjcmlwdG9yICopZmlsZQotICAgICAgICAgICAg
ICAgICAgICAgZmllbGRzOih2b2lkICopZmllbGREZXNjcmlwdGlvbnMKLSAgICAgICAgICAgICAg
ICAgZmllbGRDb3VudDoodWludDMyX3QpZmllbGRDb3VudAotICAgICAgICAgICAgICAgIHN0b3Jh
Z2VTaXplOih1aW50MzJfdClzdG9yYWdlU2l6ZQotICAgICAgICAgICAgICAgICAgICAgIGZsYWdz
OihHUEJEZXNjcmlwdG9ySW5pdGlhbGl6YXRpb25GbGFncylmbGFncyB7Ci0gIC8vIFRoZSByb290
Q2xhc3MgaXMgbm8gbG9uZ2VyIHVzZWQsIGJ1dCBpdCBpcyBwYXNzZWQgaW4gdG8gZW5zdXJlIGl0
Ci0gIC8vIHdhcyBzdGFydGVkIHVwIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbHNvLgotICAodm9p
ZClyb290Q2xhc3M7Ci0gIE5TTXV0YWJsZUFycmF5ICpmaWVsZHMgPSBuaWw7Ci0gIEdQQkZpbGVT
eW50YXggc3ludGF4ID0gZmlsZS5zeW50YXg7Ci0gIEJPT0wgZmllbGRzSW5jbHVkZURlZmF1bHQg
PQotICAgICAgKGZsYWdzICYgR1BCRGVzY3JpcHRvckluaXRpYWxpemF0aW9uRmxhZ19GaWVsZHNX
aXRoRGVmYXVsdCkgIT0gMDsKLQotICB2b2lkICpkZXNjOwotICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgZmllbGRDb3VudDsgKytpKSB7Ci0gICAgaWYgKGZpZWxkcyA9PSBuaWwpIHsKLSAgICAg
IGZpZWxkcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6ZmllbGRD
b3VudF07Ci0gICAgfQotICAgIC8vIE5lZWQgY29ycmVjdGx5IHR5cGVkIHBvaW50ZXIgZm9yIGFy
cmF5IGluZGV4aW5nIGJlbG93IHRvIHdvcmsuCi0gICAgaWYgKGZpZWxkc0luY2x1ZGVEZWZhdWx0
KSB7Ci0gICAgICBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbldpdGhEZWZhdWx0ICpmaWVsZERl
c2NXaXRoRGVmYXVsdCA9IGZpZWxkRGVzY3JpcHRpb25zOwotICAgICAgZGVzYyA9ICYoZmllbGRE
ZXNjV2l0aERlZmF1bHRbaV0pOwotICAgIH0gZWxzZSB7Ci0gICAgICBHUEJNZXNzYWdlRmllbGRE
ZXNjcmlwdGlvbiAqZmllbGREZXNjID0gZmllbGREZXNjcmlwdGlvbnM7Ci0gICAgICBkZXNjID0g
JihmaWVsZERlc2NbaV0pOwotICAgIH0KLSAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkRGVz
Y3JpcHRvciA9Ci0gICAgICAgIFtbR1BCRmllbGREZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aEZp
ZWxkRGVzY3JpcHRpb246ZGVzYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5jbHVkZXNEZWZhdWx0OmZpZWxkc0luY2x1ZGVEZWZhdWx0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXg6c3ludGF4
XTsKLSAgICBbZmllbGRzIGFkZE9iamVjdDpmaWVsZERlc2NyaXB0b3JdOwotICAgIFtmaWVsZERl
c2NyaXB0b3IgcmVsZWFzZV07Ci0gIH0KLQotICBCT09MIHdpcmVGb3JtYXQgPSAoZmxhZ3MgJiBH
UEJEZXNjcmlwdG9ySW5pdGlhbGl6YXRpb25GbGFnX1dpcmVGb3JtYXQpICE9IDA7Ci0gIEdQQkRl
c2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2xhc3M6bWVzc2Fn
ZUNsYXNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbGU6ZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmllbGRzOmZpZWxkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnN0b3JhZ2VTaXplCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVGb3JtYXQ6d2lyZUZvcm1hdF07Ci0gIFtm
aWVsZHMgcmVsZWFzZV07Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDbGFzczooQ2xhc3MpbWVzc2FnZUNsYXNzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsZTooR1BCRmlsZURlc2NyaXB0b3IgKilmaWxlCi0gICAgICAgICAgICAgICAgICAg
ICAgIGZpZWxkczooTlNBcnJheSAqKWZpZWxkcwotICAgICAgICAgICAgICAgICAgc3RvcmFnZVNp
emU6KHVpbnQzMl90KXN0b3JhZ2VTaXplCi0gICAgICAgICAgICAgICAgICAgd2lyZUZvcm1hdDoo
Qk9PTCl3aXJlRm9ybWF0IHsKLSAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAgIG1l
c3NhZ2VDbGFzc18gPSBtZXNzYWdlQ2xhc3M7Ci0gICAgZmlsZV8gPSBmaWxlOwotICAgIGZpZWxk
c18gPSBbZmllbGRzIHJldGFpbl07Ci0gICAgc3RvcmFnZVNpemVfID0gc3RvcmFnZVNpemU7Ci0g
ICAgd2lyZUZvcm1hdF8gPSB3aXJlRm9ybWF0OwotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MgewotICBbZmllbGRzXyByZWxlYXNlXTsKLSAgW29uZW9mc18gcmVsZWFz
ZV07Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXR1cE9uZW9mczooY29uc3Qg
Y2hhciAqKilvbmVvZk5hbWVzCi0gICAgICAgICAgICAgIGNvdW50Oih1aW50MzJfdCljb3VudAot
ICAgICAgZmlyc3RIYXNJbmRleDooaW50MzJfdClmaXJzdEhhc0luZGV4IHsKLSAgTlNDQXNzZXJ0
KGZpcnN0SGFzSW5kZXggPCAwLCBAIlNob3VsZCBhbHdheXMgYmUgPDAiKTsKLSAgTlNNdXRhYmxl
QXJyYXkgKm9uZW9mcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6
Y291bnRdOwotICBmb3IgKHVpbnQzMl90IGkgPSAwLCBoYXNJbmRleCA9IGZpcnN0SGFzSW5kZXg7
IGkgPCBjb3VudDsgKytpLCAtLWhhc0luZGV4KSB7Ci0gICAgY29uc3QgY2hhciAqbmFtZSA9IG9u
ZW9mTmFtZXNbaV07Ci0gICAgTlNBcnJheSAqZmllbGRzRm9yT25lb2YgPSBOZXdGaWVsZHNBcnJh
eUZvckhhc0luZGV4KGhhc0luZGV4LCBmaWVsZHNfKTsKLSAgICBOU0NBc3NlcnQoZmllbGRzRm9y
T25lb2YuY291bnQgPiAwLAotICAgICAgICAgICAgICBAIk5vIGZpZWxkcyBmb3IgdGhpcyBvbmVv
Zj8gKCVzOiVkKSIsIG5hbWUsIGhhc0luZGV4KTsKLSAgICBHUEJPbmVvZkRlc2NyaXB0b3IgKm9u
ZW9mRGVzY3JpcHRvciA9Ci0gICAgICAgIFtbR1BCT25lb2ZEZXNjcmlwdG9yIGFsbG9jXSBpbml0
V2l0aE5hbWU6bmFtZSBmaWVsZHM6ZmllbGRzRm9yT25lb2ZdOwotICAgIFtvbmVvZnMgYWRkT2Jq
ZWN0Om9uZW9mRGVzY3JpcHRvcl07Ci0gICAgW29uZW9mRGVzY3JpcHRvciByZWxlYXNlXTsKLSAg
ICBbZmllbGRzRm9yT25lb2YgcmVsZWFzZV07Ci0gIH0KLSAgb25lb2ZzXyA9IG9uZW9mczsKLX0K
LQotLSAodm9pZClzZXR1cEV4dHJhVGV4dEluZm86KGNvbnN0IGNoYXIgKilleHRyYVRleHRGb3Jt
YXRJbmZvIHsKLSAgLy8gRXh0cmEgaW5mbyBpcyBhIGNvbXBpbGUgdGltZSBvcHRpb24sIHNvIHNr
aXAgdGhlIHdvcmsgaWYgbm90IG5lZWRlZC4KLSAgaWYgKGV4dHJhVGV4dEZvcm1hdEluZm8pIHsK
LSAgICBOU1ZhbHVlICpleHRyYUluZm9WYWx1ZSA9IFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50ZXI6
ZXh0cmFUZXh0Rm9ybWF0SW5mb107Ci0gICAgZm9yIChHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxk
RGVzY3JpcHRvciBpbiBmaWVsZHNfKSB7Ci0gICAgICBpZiAoZmllbGREZXNjcmlwdG9yLT5kZXNj
cmlwdGlvbl8tPmZsYWdzICYgR1BCRmllbGRUZXh0Rm9ybWF0TmFtZUN1c3RvbSkgewotICAgICAg
ICBvYmpjX3NldEFzc29jaWF0ZWRPYmplY3QoZmllbGREZXNjcmlwdG9yLCAma1RleHRGb3JtYXRF
eHRyYVZhbHVlS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZv
VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQkpDX0FTU09DSUFUSU9O
X1JFVEFJTl9OT05BVE9NSUMpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNl
dHVwRXh0ZW5zaW9uUmFuZ2VzOihjb25zdCBHUEJFeHRlbnNpb25SYW5nZSAqKXJhbmdlcyBjb3Vu
dDooaW50MzJfdCljb3VudCB7Ci0gIGV4dGVuc2lvblJhbmdlc18gPSByYW5nZXM7Ci0gIGV4dGVu
c2lvblJhbmdlc0NvdW50XyA9IGNvdW50OwotfQotCi0tIChOU1N0cmluZyAqKW5hbWUgewotICBy
ZXR1cm4gTlNTdHJpbmdGcm9tQ2xhc3MobWVzc2FnZUNsYXNzXyk7Ci19Ci0KLS0gKGlkKWNvcHlX
aXRoWm9uZTooTlNab25lICopem9uZSB7Ci0jcHJhZ21hIHVudXNlZCh6b25lKQotICByZXR1cm4g
W3NlbGYgcmV0YWluXTsKLX0KLQotLSAoR1BCRmllbGREZXNjcmlwdG9yICopZmllbGRXaXRoTnVt
YmVyOih1aW50MzJfdClmaWVsZE51bWJlciB7Ci0gIGZvciAoR1BCRmllbGREZXNjcmlwdG9yICpk
ZXNjcmlwdG9yIGluIGZpZWxkc18pIHsKLSAgICBpZiAoR1BCRmllbGROdW1iZXIoZGVzY3JpcHRv
cikgPT0gZmllbGROdW1iZXIpIHsKLSAgICAgIHJldHVybiBkZXNjcmlwdG9yOwotICAgIH0KLSAg
fQotICByZXR1cm4gbmlsOwotfQotCi0tIChHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZFdpdGhO
YW1lOihOU1N0cmluZyAqKW5hbWUgewotICBmb3IgKEdQQkZpZWxkRGVzY3JpcHRvciAqZGVzY3Jp
cHRvciBpbiBmaWVsZHNfKSB7Ci0gICAgaWYgKFtkZXNjcmlwdG9yLm5hbWUgaXNFcXVhbDpuYW1l
XSkgewotICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gICAgfQotICB9Ci0gIHJldHVybiBuaWw7
Ci19Ci0KLS0gKEdQQk9uZW9mRGVzY3JpcHRvciAqKW9uZW9mV2l0aE5hbWU6KE5TU3RyaW5nICop
bmFtZSB7Ci0gIGZvciAoR1BCT25lb2ZEZXNjcmlwdG9yICpkZXNjcmlwdG9yIGluIG9uZW9mc18p
IHsKLSAgICBpZiAoW2Rlc2NyaXB0b3IubmFtZSBpc0VxdWFsOm5hbWVdKSB7Ci0gICAgICByZXR1
cm4gZGVzY3JpcHRvcjsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG5pbDsKLX0KLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gR1BCRmlsZURlc2NyaXB0b3IgewotICBOU1N0cmluZyAqcGFja2FnZV87
Ci0gIEdQQkZpbGVTeW50YXggc3ludGF4XzsKLX0KLQotQHN5bnRoZXNpemUgcGFja2FnZSA9IHBh
Y2thZ2VfOwotQHN5bnRoZXNpemUgc3ludGF4ID0gc3ludGF4XzsKLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGFja2FnZTooTlNTdHJpbmcgKilwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgc3ludGF4OihHUEJGaWxlU3ludGF4KXN5bnRheCB7Ci0gIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgcGFja2FnZV8gPSBbcGFja2FnZSBjb3B5XTsKLSAgICBz
eW50YXhfID0gc3ludGF4OwotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBHUEJPbmVvZkRlc2NyaXB0b3IKLQotQHN5bnRoZXNpemUgZmllbGRzID0gZmll
bGRzXzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooY29uc3QgY2hhciAqKW5hbWUg
ZmllbGRzOihOU0FycmF5ICopZmllbGRzIHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYg
KHNlbGYpIHsKLSAgICBuYW1lXyA9IG5hbWU7Ci0gICAgZmllbGRzXyA9IFtmaWVsZHMgcmV0YWlu
XTsKLSAgICBmb3IgKEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGREZXNjIGluIGZpZWxkcykgewot
ICAgICAgZmllbGREZXNjLT5jb250YWluaW5nT25lb2ZfID0gc2VsZjsKLSAgICB9Ci0KLSAgICBj
YXNlU2VsXyA9IFNlbEZyb21TdHJpbmdzKE5VTEwsIG5hbWUsICJPbmVPZkNhc2UiLCBOTyk7Ci0g
IH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIFtmaWVsZHNfIHJl
bGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKE5TU3RyaW5nICopbmFtZSB7Ci0g
IHJldHVybiBAKG5hbWVfKTsKLX0KLQotLSAoR1BCRmllbGREZXNjcmlwdG9yICopZmllbGRXaXRo
TnVtYmVyOih1aW50MzJfdClmaWVsZE51bWJlciB7Ci0gIGZvciAoR1BCRmllbGREZXNjcmlwdG9y
ICpkZXNjcmlwdG9yIGluIGZpZWxkc18pIHsKLSAgICBpZiAoR1BCRmllbGROdW1iZXIoZGVzY3Jp
cHRvcikgPT0gZmllbGROdW1iZXIpIHsKLSAgICAgIHJldHVybiBkZXNjcmlwdG9yOwotICAgIH0K
LSAgfQotICByZXR1cm4gbmlsOwotfQotCi0tIChHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZFdp
dGhOYW1lOihOU1N0cmluZyAqKW5hbWUgewotICBmb3IgKEdQQkZpZWxkRGVzY3JpcHRvciAqZGVz
Y3JpcHRvciBpbiBmaWVsZHNfKSB7Ci0gICAgaWYgKFtkZXNjcmlwdG9yLm5hbWUgaXNFcXVhbDpu
YW1lXSkgewotICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gICAgfQotICB9Ci0gIHJldHVybiBu
aWw7Ci19Ci0KLUBlbmQKLQotdWludDMyX3QgR1BCRmllbGRUYWcoR1BCRmllbGREZXNjcmlwdG9y
ICpzZWxmKSB7Ci0gIEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uICpkZXNjcmlwdGlvbiA9IHNl
bGYtPmRlc2NyaXB0aW9uXzsKLSAgR1BCV2lyZUZvcm1hdCBmb3JtYXQ7Ci0gIGlmICgoZGVzY3Jp
cHRpb24tPmZsYWdzICYgR1BCRmllbGRNYXBLZXlNYXNrKSAhPSAwKSB7Ci0gICAgLy8gTWFwcyBh
cmUgcmVwZWF0ZWQgbWVzc2FnZXMgb24gdGhlIHdpcmUuCi0gICAgZm9ybWF0ID0gR1BCV2lyZUZv
cm1hdEZvclR5cGUoR1BCRGF0YVR5cGVNZXNzYWdlLCBOTyk7Ci0gIH0gZWxzZSB7Ci0gICAgZm9y
bWF0ID0gR1BCV2lyZUZvcm1hdEZvclR5cGUoZGVzY3JpcHRpb24tPmRhdGFUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZGVzY3JpcHRpb24tPmZsYWdzICYgR1BCRmll
bGRQYWNrZWQpICE9IDApKTsKLSAgfQotICByZXR1cm4gR1BCV2lyZUZvcm1hdE1ha2VUYWcoZGVz
Y3JpcHRpb24tPm51bWJlciwgZm9ybWF0KTsKLX0KLQotdWludDMyX3QgR1BCRmllbGRBbHRlcm5h
dGVUYWcoR1BCRmllbGREZXNjcmlwdG9yICpzZWxmKSB7Ci0gIEdQQk1lc3NhZ2VGaWVsZERlc2Ny
aXB0aW9uICpkZXNjcmlwdGlvbiA9IHNlbGYtPmRlc2NyaXB0aW9uXzsKLSAgTlNDQXNzZXJ0KChk
ZXNjcmlwdGlvbi0+ZmxhZ3MgJiBHUEJGaWVsZFJlcGVhdGVkKSAhPSAwLAotICAgICAgICAgICAg
QCJPbmx5IHZhbGlkIG9uIHJlcGVhdGVkIGZpZWxkcyIpOwotICBHUEJXaXJlRm9ybWF0IGZvcm1h
dCA9Ci0gICAgICBHUEJXaXJlRm9ybWF0Rm9yVHlwZShkZXNjcmlwdGlvbi0+ZGF0YVR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRlc2NyaXB0aW9uLT5mbGFncyAmIEdQQkZpZWxk
UGFja2VkKSA9PSAwKSk7Ci0gIHJldHVybiBHUEJXaXJlRm9ybWF0TWFrZVRhZyhkZXNjcmlwdGlv
bi0+bnVtYmVyLCBmb3JtYXQpOwotfQotCi1AaW1wbGVtZW50YXRpb24gR1BCRmllbGREZXNjcmlw
dG9yIHsKLSAgR1BCR2VuZXJpY1ZhbHVlIGRlZmF1bHRWYWx1ZV87Ci0KLSAgLy8gTWVzc2FnZSBp
dmFycwotICBDbGFzcyBtc2dDbGFzc187Ci0KLSAgLy8gRW51bSBpdmFycy4KLSAgLy8gSWYgcHJv
dG9zIGFyZSBnZW5lcmF0ZWQgd2l0aCBHZW5lcmF0ZUVudW1EZXNjcmlwdG9ycyBvbiB0aGVuIGl0
IHdpbGwKLSAgLy8gYmUgYSBlbnVtRGVzY3JpcHRvciwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYSBl
bnVtVmVyaWZpZXIuCi0gIHVuaW9uIHsKLSAgICBHUEJFbnVtRGVzY3JpcHRvciAqZW51bURlc2Ny
aXB0b3JfOwotICAgIEdQQkVudW1WYWxpZGF0aW9uRnVuYyBlbnVtVmVyaWZpZXJfOwotICB9IGVu
dW1IYW5kbGluZ187Ci19Ci0KLUBzeW50aGVzaXplIG1zZ0NsYXNzID0gbXNnQ2xhc3NfOwotQHN5
bnRoZXNpemUgY29udGFpbmluZ09uZW9mID0gY29udGFpbmluZ09uZW9mXzsKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXQgewotICAvLyBUaHJvdyBhbiBleGNlcHRpb24gaWYgcGVvcGxlIGF0dGVtcHQg
dG8gbm90IHVzZSB0aGUgZGVzaWduYXRlZCBpbml0aWFsaXplci4KLSAgc2VsZiA9IFtzdXBlciBp
bml0XTsKLSAgaWYgKHNlbGYgIT0gbmlsKSB7Ci0gICAgW3NlbGYgZG9lc05vdFJlY29nbml6ZVNl
bGVjdG9yOl9jbWRdOwotICAgIHNlbGYgPSBuaWw7Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZpZWxkRGVzY3JpcHRpb246KHZvaWQgKilkZXNjcmlw
dGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzRGVmYXVsdDooQk9PTClpbmNs
dWRlc0RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXg6KEdQ
QkZpbGVTeW50YXgpc3ludGF4IHsKLSAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAg
IEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uICpjb3JlRGVzYzsKLSAgICBpZiAoaW5jbHVkZXNE
ZWZhdWx0KSB7Ci0gICAgICBjb3JlRGVzYyA9ICYoKChHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlv
bldpdGhEZWZhdWx0ICopZGVzY3JpcHRpb24pLT5jb3JlKTsKLSAgICB9IGVsc2UgewotICAgICAg
Y29yZURlc2MgPSBkZXNjcmlwdGlvbjsKLSAgICB9Ci0gICAgZGVzY3JpcHRpb25fID0gY29yZURl
c2M7Ci0gICAgZ2V0U2VsXyA9IHNlbF9nZXRVaWQoY29yZURlc2MtPm5hbWUpOwotICAgIHNldFNl
bF8gPSBTZWxGcm9tU3RyaW5ncygic2V0IiwgY29yZURlc2MtPm5hbWUsIE5VTEwsIFlFUyk7Ci0K
LSAgICBHUEJEYXRhVHlwZSBkYXRhVHlwZSA9IGNvcmVEZXNjLT5kYXRhVHlwZTsKLSAgICBCT09M
IGlzTWVzc2FnZSA9IEdQQkRhdGFUeXBlSXNNZXNzYWdlKGRhdGFUeXBlKTsKLSAgICBCT09MIGlz
TWFwT3JBcnJheSA9IEdQQkZpZWxkSXNNYXBPckFycmF5KHNlbGYpOwotCi0gICAgaWYgKGlzTWFw
T3JBcnJheSkgewotICAgICAgLy8gbWFwPD4vcmVwZWF0ZWQgZmllbGRzIGdldCBhICpDb3VudCBw
cm9wZXJ0eSAoaW5wbGFjZSBvZiBhIGhhcyopIHRvCi0gICAgICAvLyBzdXBwb3J0IGNoZWNraW5n
IGlmIHRoZXJlIGFyZSBhbnkgZW50cmllcyB3aXRob3V0IHRyaWdnZXJpbmcKLSAgICAgIC8vIGF1
dG9jcmVhdGlvbi4KLSAgICAgIGhhc09yQ291bnRTZWxfID0gU2VsRnJvbVN0cmluZ3MoTlVMTCwg
Y29yZURlc2MtPm5hbWUsICJfQ291bnQiLCBOTyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIElm
IHRoZXJlIGlzIGEgcG9zaXRpdmUgaGFzSW5kZXgsIHRoZW46Ci0gICAgICAvLyAgIC0gQWxsIGZp
ZWxkcyB0eXBlcyBmb3IgcHJvdG8yIG1lc3NhZ2VzIGdldCBoYXMqIHNlbGVjdG9ycy4KLSAgICAg
IC8vICAgLSBPbmx5IG1lc3NhZ2UgZmllbGRzIGZvciBwcm90bzMgbWVzc2FnZXMgZ2V0IGhhcyog
c2VsZWN0b3JzLgotICAgICAgLy8gTm90ZTogdGhlIHBvc2l0aXZlIGNoZWNrIGlzIHRvIGhhbmRs
ZSBvbmVPZnMsIHdlIGNhbid0IGNoZWNrCi0gICAgICAvLyBjb250YWluaW5nT25lb2ZfIGJlY2F1
c2UgaXQgaXNuJ3Qgc2V0IHVudGlsIGFmdGVyIGluaXRpYWxpemF0aW9uLgotICAgICAgaWYgKChj
b3JlRGVzYy0+aGFzSW5kZXggPj0gMCkgJiYKLSAgICAgICAgICAoY29yZURlc2MtPmhhc0luZGV4
ICE9IEdQQk5vSGFzQml0KSAmJgotICAgICAgICAgICgoc3ludGF4ICE9IEdQQkZpbGVTeW50YXhQ
cm90bzMpIHx8IGlzTWVzc2FnZSkpIHsKLSAgICAgICAgaGFzT3JDb3VudFNlbF8gPSBTZWxGcm9t
U3RyaW5ncygiaGFzIiwgY29yZURlc2MtPm5hbWUsIE5VTEwsIE5PKTsKLSAgICAgICAgc2V0SGFz
U2VsXyA9IFNlbEZyb21TdHJpbmdzKCJzZXRIYXMiLCBjb3JlRGVzYy0+bmFtZSwgTlVMTCwgWUVT
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBFeHRyYSB0eXBlIHNwZWNpZmljIGRhdGEuCi0g
ICAgaWYgKGlzTWVzc2FnZSkgewotICAgICAgY29uc3QgY2hhciAqY2xhc3NOYW1lID0gY29yZURl
c2MtPmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1lOwotICAgICAgbXNnQ2xhc3NfID0gb2JqY19n
ZXRDbGFzcyhjbGFzc05hbWUpOwotICAgICAgTlNBc3NlcnQobXNnQ2xhc3NfLCBAIkNsYXNzICVz
IG5vdCBkZWZpbmVkIiwgY2xhc3NOYW1lKTsKLSAgICB9IGVsc2UgaWYgKGRhdGFUeXBlID09IEdQ
QkRhdGFUeXBlRW51bSkgewotICAgICAgaWYgKChjb3JlRGVzYy0+ZmxhZ3MgJiBHUEJGaWVsZEhh
c0VudW1EZXNjcmlwdG9yKSAhPSAwKSB7Ci0gICAgICAgIGVudW1IYW5kbGluZ18uZW51bURlc2Ny
aXB0b3JfID0KLSAgICAgICAgICAgIGNvcmVEZXNjLT5kYXRhVHlwZVNwZWNpZmljLmVudW1EZXNj
RnVuYygpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZW51bUhhbmRsaW5nXy5lbnVtVmVyaWZp
ZXJfID0KLSAgICAgICAgICAgIGNvcmVEZXNjLT5kYXRhVHlwZVNwZWNpZmljLmVudW1WZXJpZmll
cjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb24gbWFwPD4vcmVwZWF0ZWQgZmllbGRzIGNh
biBoYXZlIGRlZmF1bHRzIGluIHByb3RvMiBzeW50YXguCi0gICAgaWYgKCFpc01hcE9yQXJyYXkg
JiYgaW5jbHVkZXNEZWZhdWx0KSB7Ci0gICAgICBkZWZhdWx0VmFsdWVfID0gKChHUEJNZXNzYWdl
RmllbGREZXNjcmlwdGlvbldpdGhEZWZhdWx0ICopZGVzY3JpcHRpb24pLT5kZWZhdWx0VmFsdWU7
Ci0gICAgICBpZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVCeXRlcykgewotICAgICAgICAvLyBE
YXRhIHN0b3JlZCBhcyBhIGxlbmd0aCBwcmVmaXhlZCAobmV0d29yayBieXRlIG9yZGVyKSBjLXN0
cmluZyBpbgotICAgICAgICAvLyBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KLSAgICAgICAgY29uc3Qg
dWludDhfdCAqYnl0ZXMgPSAoY29uc3QgdWludDhfdCAqKWRlZmF1bHRWYWx1ZV8udmFsdWVEYXRh
OwotICAgICAgICBpZiAoYnl0ZXMpIHsKLSAgICAgICAgICB1aW50MzJfdCBsZW5ndGggPSAqKCh1
aW50MzJfdCAqKWJ5dGVzKTsKLSAgICAgICAgICBsZW5ndGggPSBudG9obChsZW5ndGgpOwotICAg
ICAgICAgIGJ5dGVzICs9IHNpemVvZihsZW5ndGgpOwotICAgICAgICAgIGRlZmF1bHRWYWx1ZV8u
dmFsdWVEYXRhID0KLSAgICAgICAgICAgICAgW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6
Ynl0ZXMgbGVuZ3RoOmxlbmd0aF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIGlmIChkZXNjcmlwdGlvbl8t
PmRhdGFUeXBlID09IEdQQkRhdGFUeXBlQnl0ZXMgJiYKLSAgICAgICEoZGVzY3JpcHRpb25fLT5m
bGFncyAmIEdQQkZpZWxkUmVwZWF0ZWQpKSB7Ci0gICAgW2RlZmF1bHRWYWx1ZV8udmFsdWVEYXRh
IHJlbGVhc2VdOwotICB9Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoR1BCRGF0YVR5cGUp
ZGF0YVR5cGUgewotICByZXR1cm4gZGVzY3JpcHRpb25fLT5kYXRhVHlwZTsKLX0KLQotLSAoQk9P
TCloYXNEZWZhdWx0VmFsdWUgewotICByZXR1cm4gKGRlc2NyaXB0aW9uXy0+ZmxhZ3MgJiBHUEJG
aWVsZEhhc0RlZmF1bHRWYWx1ZSkgIT0gMDsKLX0KLQotLSAodWludDMyX3QpbnVtYmVyIHsKLSAg
cmV0dXJuIGRlc2NyaXB0aW9uXy0+bnVtYmVyOwotfQotCi0tIChOU1N0cmluZyAqKW5hbWUgewot
ICByZXR1cm4gQChkZXNjcmlwdGlvbl8tPm5hbWUpOwotfQotCi0tIChCT09MKWlzUmVxdWlyZWQg
ewotICByZXR1cm4gKGRlc2NyaXB0aW9uXy0+ZmxhZ3MgJiBHUEJGaWVsZFJlcXVpcmVkKSAhPSAw
OwotfQotCi0tIChCT09MKWlzT3B0aW9uYWwgewotICByZXR1cm4gKGRlc2NyaXB0aW9uXy0+Zmxh
Z3MgJiBHUEJGaWVsZE9wdGlvbmFsKSAhPSAwOwotfQotCi0tIChHUEJGaWVsZFR5cGUpZmllbGRU
eXBlIHsKLSAgR1BCRmllbGRGbGFncyBmbGFncyA9IGRlc2NyaXB0aW9uXy0+ZmxhZ3M7Ci0gIGlm
ICgoZmxhZ3MgJiBHUEJGaWVsZFJlcGVhdGVkKSAhPSAwKSB7Ci0gICAgcmV0dXJuIEdQQkZpZWxk
VHlwZVJlcGVhdGVkOwotICB9IGVsc2UgaWYgKChmbGFncyAmIEdQQkZpZWxkTWFwS2V5TWFzaykg
IT0gMCkgewotICAgIHJldHVybiBHUEJGaWVsZFR5cGVNYXA7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0
dXJuIEdQQkZpZWxkVHlwZVNpbmdsZTsKLSAgfQotfQotCi0tIChHUEJEYXRhVHlwZSltYXBLZXlE
YXRhVHlwZSB7Ci0gIHN3aXRjaCAoZGVzY3JpcHRpb25fLT5mbGFncyAmIEdQQkZpZWxkTWFwS2V5
TWFzaykgewotICAgIGNhc2UgR1BCRmllbGRNYXBLZXlJbnQzMjoKLSAgICAgIHJldHVybiBHUEJE
YXRhVHlwZUludDMyOwotICAgIGNhc2UgR1BCRmllbGRNYXBLZXlJbnQ2NDoKLSAgICAgIHJldHVy
biBHUEJEYXRhVHlwZUludDY0OwotICAgIGNhc2UgR1BCRmllbGRNYXBLZXlVSW50MzI6Ci0gICAg
ICByZXR1cm4gR1BCRGF0YVR5cGVVSW50MzI7Ci0gICAgY2FzZSBHUEJGaWVsZE1hcEtleVVJbnQ2
NDoKLSAgICAgIHJldHVybiBHUEJEYXRhVHlwZVVJbnQ2NDsKLSAgICBjYXNlIEdQQkZpZWxkTWFw
S2V5U0ludDMyOgotICAgICAgcmV0dXJuIEdQQkRhdGFUeXBlU0ludDMyOwotICAgIGNhc2UgR1BC
RmllbGRNYXBLZXlTSW50NjQ6Ci0gICAgICByZXR1cm4gR1BCRGF0YVR5cGVTSW50NjQ7Ci0gICAg
Y2FzZSBHUEJGaWVsZE1hcEtleUZpeGVkMzI6Ci0gICAgICByZXR1cm4gR1BCRGF0YVR5cGVGaXhl
ZDMyOwotICAgIGNhc2UgR1BCRmllbGRNYXBLZXlGaXhlZDY0OgotICAgICAgcmV0dXJuIEdQQkRh
dGFUeXBlRml4ZWQ2NDsKLSAgICBjYXNlIEdQQkZpZWxkTWFwS2V5U0ZpeGVkMzI6Ci0gICAgICBy
ZXR1cm4gR1BCRGF0YVR5cGVTRml4ZWQzMjsKLSAgICBjYXNlIEdQQkZpZWxkTWFwS2V5U0ZpeGVk
NjQ6Ci0gICAgICByZXR1cm4gR1BCRGF0YVR5cGVTRml4ZWQ2NDsKLSAgICBjYXNlIEdQQkZpZWxk
TWFwS2V5Qm9vbDoKLSAgICAgIHJldHVybiBHUEJEYXRhVHlwZUJvb2w7Ci0gICAgY2FzZSBHUEJG
aWVsZE1hcEtleVN0cmluZzoKLSAgICAgIHJldHVybiBHUEJEYXRhVHlwZVN0cmluZzsKLQotICAg
IGRlZmF1bHQ6Ci0gICAgICBOU0Fzc2VydCgwLCBAIk5vdCBhIG1hcCB0eXBlIik7Ci0gICAgICBy
ZXR1cm4gR1BCRGF0YVR5cGVJbnQzMjsgIC8vIEZvciBsYWNrIG9mIGFueXRoaW5nIGJldHRlci4K
LSAgfQotfQotCi0tIChCT09MKWlzUGFja2FibGUgewotICByZXR1cm4gKGRlc2NyaXB0aW9uXy0+
ZmxhZ3MgJiBHUEJGaWVsZFBhY2tlZCkgIT0gMDsKLX0KLQotLSAoQk9PTClpc1ZhbGlkRW51bVZh
bHVlOihpbnQzMl90KXZhbHVlIHsKLSAgTlNBc3NlcnQoZGVzY3JpcHRpb25fLT5kYXRhVHlwZSA9
PSBHUEJEYXRhVHlwZUVudW0sCi0gICAgICAgICAgIEAiRmllbGQgTXVzdCBiZSBvZiB0eXBlIEdQ
QkRhdGFUeXBlRW51bSIpOwotICBpZiAoZGVzY3JpcHRpb25fLT5mbGFncyAmIEdQQkZpZWxkSGFz
RW51bURlc2NyaXB0b3IpIHsKLSAgICByZXR1cm4gZW51bUhhbmRsaW5nXy5lbnVtRGVzY3JpcHRv
cl8uZW51bVZlcmlmaWVyKHZhbHVlKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZW51bUhhbmRs
aW5nXy5lbnVtVmVyaWZpZXJfKHZhbHVlKTsKLSAgfQotfQotCi0tIChHUEJFbnVtRGVzY3JpcHRv
ciAqKWVudW1EZXNjcmlwdG9yIHsKLSAgaWYgKGRlc2NyaXB0aW9uXy0+ZmxhZ3MgJiBHUEJGaWVs
ZEhhc0VudW1EZXNjcmlwdG9yKSB7Ci0gICAgcmV0dXJuIGVudW1IYW5kbGluZ18uZW51bURlc2Ny
aXB0b3JfOwotICB9IGVsc2UgewotICAgIHJldHVybiBuaWw7Ci0gIH0KLX0KLQotLSAoR1BCR2Vu
ZXJpY1ZhbHVlKWRlZmF1bHRWYWx1ZSB7Ci0gIC8vIERlcGVuZHMgb24gdGhlIGZhY3QgdGhhdCBk
ZWZhdWx0VmFsdWVfIGlzIGluaXRpYWxpemVkIGVpdGhlciB0byAiMC9uaWwiIG9yCi0gIC8vIHRv
IGFuIGFjdHVhbCBkZWZhdWx0VmFsdWUgaW4gb3VyIGluaXRpYWxpemVyLgotICBHUEJHZW5lcmlj
VmFsdWUgdmFsdWUgPSBkZWZhdWx0VmFsdWVfOwotCi0gIGlmICghKGRlc2NyaXB0aW9uXy0+Zmxh
Z3MgJiBHUEJGaWVsZFJlcGVhdGVkKSkgewotICAgIC8vIFdlIHNwZWNpYWwgaGFuZGxlIGRhdGEg
YW5kIHN0cmluZ3MuIElmIHRoZXkgYXJlIG5pbCwgd2UgcmVwbGFjZSB0aGVtCi0gICAgLy8gd2l0
aCBlbXB0eSBzdHJpbmcvZW1wdHkgZGF0YS4KLSAgICBHUEJEYXRhVHlwZSB0eXBlID0gZGVzY3Jp
cHRpb25fLT5kYXRhVHlwZTsKLSAgICBpZiAodHlwZSA9PSBHUEJEYXRhVHlwZUJ5dGVzICYmIHZh
bHVlLnZhbHVlRGF0YSA9PSBuaWwpIHsKLSAgICAgIHZhbHVlLnZhbHVlRGF0YSA9IEdQQkVtcHR5
TlNEYXRhKCk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdQQkRhdGFUeXBlU3RyaW5nICYmIHZh
bHVlLnZhbHVlU3RyaW5nID09IG5pbCkgewotICAgICAgdmFsdWUudmFsdWVTdHJpbmcgPSBAIiI7
Ci0gICAgfQotICB9Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotLSAoTlNTdHJpbmcgKil0ZXh0Rm9y
bWF0TmFtZSB7Ci0gIGlmICgoZGVzY3JpcHRpb25fLT5mbGFncyAmIEdQQkZpZWxkVGV4dEZvcm1h
dE5hbWVDdXN0b20pICE9IDApIHsKLSAgICBOU1ZhbHVlICpleHRyYUluZm9WYWx1ZSA9Ci0gICAg
ICAgIG9iamNfZ2V0QXNzb2NpYXRlZE9iamVjdChzZWxmLCAma1RleHRGb3JtYXRFeHRyYVZhbHVl
S2V5KTsKLSAgICAvLyBTdXBwb3J0IGNhbiBiZSBsZWZ0IG91dCBhdCBnZW5lcmF0aW9uIHRpbWUu
Ci0gICAgaWYgKCFleHRyYUluZm9WYWx1ZSkgewotICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0g
ICAgY29uc3QgdWludDhfdCAqZXh0cmFUZXh0Rm9ybWF0SW5mbyA9IFtleHRyYUluZm9WYWx1ZSBw
b2ludGVyVmFsdWVdOwotICAgIHJldHVybiBHUEJEZWNvZGVUZXh0Rm9ybWF0TmFtZShleHRyYVRl
eHRGb3JtYXRJbmZvLCBHUEJGaWVsZE51bWJlcihzZWxmKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5uYW1lKTsKLSAgfQotCi0gIC8vIFRoZSBsb2dpYyBoZXJlIGhh
cyB0byBtYXRjaCBTZXRDb21tb25GaWVsZFZhcmlhYmxlcygpIGZyb20KLSAgLy8gb2JqZWN0aXZl
Y19maWVsZC5jYyBpbiB0aGUgcHJvdG8gY29tcGlsZXIuCi0gIE5TU3RyaW5nICpuYW1lID0gc2Vs
Zi5uYW1lOwotICBOU1VJbnRlZ2VyIGxlbiA9IFtuYW1lIGxlbmd0aF07Ci0KLSAgLy8gUmVtb3Zl
IHRoZSAiX3AiIGFkZGVkIHRvIHJlc2VydmVkIG5hbWVzLgotICBpZiAoW25hbWUgaGFzU3VmZml4
OkAiX3AiXSkgewotICAgIG5hbWUgPSBbbmFtZSBzdWJzdHJpbmdUb0luZGV4OihsZW4gLSAyKV07
Ci0gICAgbGVuID0gW25hbWUgbGVuZ3RoXTsKLSAgfQotCi0gIC8vIFJlbW92ZSAiQXJyYXkiIGZy
b20gdGhlIGVuZCBmb3IgcmVwZWF0ZWQgZmllbGRzLgotICBpZiAoKChkZXNjcmlwdGlvbl8tPmZs
YWdzICYgR1BCRmllbGRSZXBlYXRlZCkgIT0gMCkgJiYKLSAgICAgIFtuYW1lIGhhc1N1ZmZpeDpA
IkFycmF5Il0pIHsKLSAgICBuYW1lID0gW25hbWUgc3Vic3RyaW5nVG9JbmRleDoobGVuIC0gNSld
OwotICAgIGxlbiA9IFtuYW1lIGxlbmd0aF07Ci0gIH0KLQotICAvLyBHcm91cHMgdnMuIG90aGVy
IGZpZWxkcy4KLSAgaWYgKGRlc2NyaXB0aW9uXy0+ZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVHcm91
cCkgewotICAgIC8vIEp1c3QgY2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyLgotICAgIHVuaWNo
YXIgZmlyc3RDaGFyID0gW25hbWUgY2hhcmFjdGVyQXRJbmRleDowXTsKLSAgICBpZiAoZmlyc3RD
aGFyID49ICdhJyAmJiBmaXJzdENoYXIgPD0gJ3onKSB7Ci0gICAgICBOU1N0cmluZyAqZmlyc3RD
aGFyU3RyaW5nID0KLSAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVDIiwg
KHVuaWNoYXIpKGZpcnN0Q2hhciAtICdhJyArICdBJyldOwotICAgICAgTlNTdHJpbmcgKnJlc3Vs
dCA9Ci0gICAgICAgICAgW25hbWUgc3RyaW5nQnlSZXBsYWNpbmdDaGFyYWN0ZXJzSW5SYW5nZTpO
U01ha2VSYW5nZSgwLCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdpdGhTdHJpbmc6Zmlyc3RDaGFyU3RyaW5nXTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIHJldHVybiBuYW1lOwotCi0gIH0gZWxzZSB7Ci0gICAgLy8gVW5kbyB0aGUgQ2FtZWxD
YXNlLgotICAgIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJp
bmdXaXRoQ2FwYWNpdHk6bGVuXTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbGVuOyBp
KyspIHsKLSAgICAgIHVuaWNoYXIgYyA9IFtuYW1lIGNoYXJhY3RlckF0SW5kZXg6aV07Ci0gICAg
ICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHsKLSAgICAgICAgaWYgKGkgPiAwKSB7Ci0gICAg
ICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCJfJUMiLCAodW5pY2hhcikoYyAtICdBJyArICdh
JyldOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAi
JUMiLCBjXTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgW3Jlc3VsdCBhcHBl
bmRGb3JtYXQ6QCIlQyIsIGNdOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
ICB9Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIEdQQkVudW1EZXNjcmlwdG9yIHsKLSAg
TlNTdHJpbmcgKm5hbWVfOwotICAvLyB2YWx1ZU5hbWVzXyBpcyBhIHNpbmdsZSBjIHN0cmluZyB3
aXRoIGFsbCBvZiB0aGUgdmFsdWUgbmFtZXMgYXBwZW5kZWQKLSAgLy8gdG9nZXRoZXIsIGVhY2gg
bnVsbCB0ZXJtaW5hdGVkLiAgLWNhbGNWYWx1ZU5hbWVPZmZzZXRzIGZpbGxzIGluCi0gIC8vIG5h
bWVPZmZzZXRzXyB3aXRoIHRoZSBvZmZzZXRzIHRvIGFsbG93IHF1aWNrZXIgYWNjZXNzIHRvIHRo
ZSBpbmRpdmlkdWFsCi0gIC8vIG5hbWVzLgotICBjb25zdCBjaGFyICp2YWx1ZU5hbWVzXzsKLSAg
Y29uc3QgaW50MzJfdCAqdmFsdWVzXzsKLSAgR1BCRW51bVZhbGlkYXRpb25GdW5jIGVudW1WZXJp
Zmllcl87Ci0gIGNvbnN0IHVpbnQ4X3QgKmV4dHJhVGV4dEZvcm1hdEluZm9fOwotICB1aW50MzJf
dCAqbmFtZU9mZnNldHNfOwotICB1aW50MzJfdCB2YWx1ZUNvdW50XzsKLX0KLQotQHN5bnRoZXNp
emUgbmFtZSA9IG5hbWVfOwotQHN5bnRoZXNpemUgZW51bVZlcmlmaWVyID0gZW51bVZlcmlmaWVy
XzsKLQotKyAoaW5zdGFuY2V0eXBlKQotICAgIGFsbG9jRGVzY3JpcHRvckZvck5hbWU6KE5TU3Ry
aW5nICopbmFtZQotICAgICAgICAgICAgICAgIHZhbHVlTmFtZXM6KGNvbnN0IGNoYXIgKil2YWx1
ZU5hbWVzCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlczooY29uc3QgaW50MzJfdCAqKXZhbHVl
cwotICAgICAgICAgICAgICAgICAgICAgY291bnQ6KHVpbnQzMl90KXZhbHVlQ291bnQKLSAgICAg
ICAgICAgICAgZW51bVZlcmlmaWVyOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZW51bVZlcmlmaWVy
IHsKLSAgR1BCRW51bURlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBbW3NlbGYgYWxsb2NdIGluaXRX
aXRoTmFtZTpuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlTmFtZXM6dmFsdWVOYW1lcwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOnZhbHVlcwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OnZhbHVlQ291bnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1WZXJp
ZmllcjplbnVtVmVyaWZpZXJdOwotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotKyAoaW5zdGFu
Y2V0eXBlKQotICAgIGFsbG9jRGVzY3JpcHRvckZvck5hbWU6KE5TU3RyaW5nICopbmFtZQotICAg
ICAgICAgICAgICAgIHZhbHVlTmFtZXM6KGNvbnN0IGNoYXIgKil2YWx1ZU5hbWVzCi0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlczooY29uc3QgaW50MzJfdCAqKXZhbHVlcwotICAgICAgICAgICAg
ICAgICAgICAgY291bnQ6KHVpbnQzMl90KXZhbHVlQ291bnQKLSAgICAgICAgICAgICAgZW51bVZl
cmlmaWVyOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZW51bVZlcmlmaWVyCi0gICAgICAgZXh0cmFU
ZXh0Rm9ybWF0SW5mbzooY29uc3QgY2hhciAqKWV4dHJhVGV4dEZvcm1hdEluZm8gewotICAvLyBD
YWxsIHRoZSBjb21tb24gY2FzZS4KLSAgR1BCRW51bURlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBb
c2VsZiBhbGxvY0Rlc2NyaXB0b3JGb3JOYW1lOm5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU5hbWVzOnZhbHVlTmFtZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVz
OnZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY291bnQ6dmFsdWVDb3VudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbnVtVmVyaWZpZXI6ZW51bVZlcmlmaWVyXTsKLSAgLy8gU2V0
IHRoZSBleHRyYSBpbmZvLgotICBkZXNjcmlwdG9yLT5leHRyYVRleHRGb3JtYXRJbmZvXyA9IChj
b25zdCB1aW50OF90ICopZXh0cmFUZXh0Rm9ybWF0SW5mbzsKLSAgcmV0dXJuIGRlc2NyaXB0b3I7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQotICAg
ICAgICAgICAgICAgICAgdmFsdWVOYW1lczooY29uc3QgY2hhciAqKXZhbHVlTmFtZXMKLSAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZXM6KGNvbnN0IGludDMyX3QgKil2YWx1ZXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgY291bnQ6KHVpbnQzMl90KXZhbHVlQ291bnQKLSAgICAgICAgICAgICAg
ICBlbnVtVmVyaWZpZXI6KEdQQkVudW1WYWxpZGF0aW9uRnVuYyllbnVtVmVyaWZpZXIgewotICBp
ZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgbmFtZV8gPSBbbmFtZSBjb3B5XTsKLSAg
ICB2YWx1ZU5hbWVzXyA9IHZhbHVlTmFtZXM7Ci0gICAgdmFsdWVzXyA9IHZhbHVlczsKLSAgICB2
YWx1ZUNvdW50XyA9IHZhbHVlQ291bnQ7Ci0gICAgZW51bVZlcmlmaWVyXyA9IGVudW1WZXJpZmll
cjsKLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgW25hbWVf
IHJlbGVhc2VdOwotICBpZiAobmFtZU9mZnNldHNfKSBmcmVlKG5hbWVPZmZzZXRzXyk7Ci0gIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZCljYWxjVmFsdWVOYW1lT2Zmc2V0cyB7Ci0gIEBz
eW5jaHJvbml6ZWQoc2VsZikgewotICAgIGlmIChuYW1lT2Zmc2V0c18gIT0gTlVMTCkgewotICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICB1aW50MzJfdCAqb2Zmc2V0cyA9IG1hbGxvYyh2YWx1ZUNv
dW50XyAqIHNpemVvZih1aW50MzJfdCkpOwotICAgIGNvbnN0IGNoYXIgKnNjYW4gPSB2YWx1ZU5h
bWVzXzsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdmFsdWVDb3VudF87ICsraSkgewot
ICAgICAgb2Zmc2V0c1tpXSA9ICh1aW50MzJfdCkoc2NhbiAtIHZhbHVlTmFtZXNfKTsKLSAgICAg
IHdoaWxlICgqc2NhbiAhPSAnXDAnKSArK3NjYW47Ci0gICAgICArK3NjYW47ICAvLyBTdGVwIG92
ZXIgdGhlIG51bGwuCi0gICAgfQotICAgIG5hbWVPZmZzZXRzXyA9IG9mZnNldHM7Ci0gIH0KLX0K
LQotLSAoTlNTdHJpbmcgKillbnVtTmFtZUZvclZhbHVlOihpbnQzMl90KW51bWJlciB7Ci0gIGlm
IChuYW1lT2Zmc2V0c18gPT0gTlVMTCkgW3NlbGYgY2FsY1ZhbHVlTmFtZU9mZnNldHNdOwotCi0g
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB2YWx1ZUNvdW50XzsgKytpKSB7Ci0gICAgaWYgKHZh
bHVlc19baV0gPT0gbnVtYmVyKSB7Ci0gICAgICBjb25zdCBjaGFyICp2YWx1ZU5hbWUgPSB2YWx1
ZU5hbWVzXyArIG5hbWVPZmZzZXRzX1tpXTsKLSAgICAgIE5TU3RyaW5nICpmdWxsTmFtZSA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUBfJXMiLCBuYW1lXywgdmFsdWVOYW1lXTsKLSAg
ICAgIHJldHVybiBmdWxsTmFtZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG5pbDsKLX0KLQotLSAo
Qk9PTClnZXRWYWx1ZTooaW50MzJfdCAqKW91dFZhbHVlIGZvckVudW1OYW1lOihOU1N0cmluZyAq
KW5hbWUgewotICAvLyBNdXN0IGhhdmUgdGhlIHByZWZpeC4KLSAgTlNVSW50ZWdlciBwcmVmaXhM
ZW4gPSBuYW1lXy5sZW5ndGggKyAxOwotICBpZiAoKG5hbWUubGVuZ3RoIDw9IHByZWZpeExlbikg
fHwgIVtuYW1lIGhhc1ByZWZpeDpuYW1lX10gfHwKLSAgICAgIChbbmFtZSBjaGFyYWN0ZXJBdElu
ZGV4OnByZWZpeExlbiAtIDFdICE9ICdfJykpIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLQotICAv
LyBTa2lwIG92ZXIgdGhlIHByZWZpeC4KLSAgY29uc3QgY2hhciAqbmFtZUFzQ1N0ciA9IFtuYW1l
IFVURjhTdHJpbmddOwotICBuYW1lQXNDU3RyICs9IHByZWZpeExlbjsKLQotICBpZiAobmFtZU9m
ZnNldHNfID09IE5VTEwpIFtzZWxmIGNhbGNWYWx1ZU5hbWVPZmZzZXRzXTsKLQotICAvLyBGaW5k
IGl0LgotICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdmFsdWVDb3VudF87ICsraSkgewotICAg
IGNvbnN0IGNoYXIgKnZhbHVlTmFtZSA9IHZhbHVlTmFtZXNfICsgbmFtZU9mZnNldHNfW2ldOwot
ICAgIGlmIChzdHJjbXAobmFtZUFzQ1N0ciwgdmFsdWVOYW1lKSA9PSAwKSB7Ci0gICAgICBpZiAo
b3V0VmFsdWUpIHsKLSAgICAgICAgKm91dFZhbHVlID0gdmFsdWVzX1tpXTsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiBZRVM7Ci0gICAgfQotICB9Ci0gIHJldHVybiBOTzsKLX0KLQotLSAoTlNTdHJp
bmcgKil0ZXh0Rm9ybWF0TmFtZUZvclZhbHVlOihpbnQzMl90KW51bWJlciB7Ci0gIGlmIChuYW1l
T2Zmc2V0c18gPT0gTlVMTCkgW3NlbGYgY2FsY1ZhbHVlTmFtZU9mZnNldHNdOwotCi0gIC8vIEZp
bmQgdGhlIEVudW1WYWx1ZSBkZXNjcmlwdG9yIGFuZCBpdHMgaW5kZXguCi0gIEJPT0wgZm91bmRJ
dCA9IE5POwotICB1aW50MzJfdCB2YWx1ZURlc2NyaXB0b3JJbmRleDsKLSAgZm9yICh2YWx1ZURl
c2NyaXB0b3JJbmRleCA9IDA7IHZhbHVlRGVzY3JpcHRvckluZGV4IDwgdmFsdWVDb3VudF87Ci0g
ICAgICAgKyt2YWx1ZURlc2NyaXB0b3JJbmRleCkgewotICAgIGlmICh2YWx1ZXNfW3ZhbHVlRGVz
Y3JpcHRvckluZGV4XSA9PSBudW1iZXIpIHsKLSAgICAgIGZvdW5kSXQgPSBZRVM7Ci0gICAgICBi
cmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAoIWZvdW5kSXQpIHsKLSAgICByZXR1cm4gbmlsOwot
ICB9Ci0KLSAgTlNTdHJpbmcgKnJlc3VsdCA9IG5pbDsKLSAgLy8gTmFtaW5nIGFkZHMgYW4gdW5k
ZXJzY29yZSBiZXR3ZWVuIGVudW0gbmFtZSBhbmQgdmFsdWUgbmFtZSwgc2tpcCB0aGF0IGFsc28u
Ci0gIGNvbnN0IGNoYXIgKnZhbHVlTmFtZSA9IHZhbHVlTmFtZXNfICsgbmFtZU9mZnNldHNfW3Zh
bHVlRGVzY3JpcHRvckluZGV4XTsKLSAgTlNTdHJpbmcgKnNob3J0TmFtZSA9IEAodmFsdWVOYW1l
KTsKLQotICAvLyBTZWUgaWYgaXQgaXMgaW4gdGhlIG1hcCBvZiBzcGVjaWFsIGZvcm1hdCBoYW5k
bGluZy4KLSAgaWYgKGV4dHJhVGV4dEZvcm1hdEluZm9fKSB7Ci0gICAgcmVzdWx0ID0gR1BCRGVj
b2RlVGV4dEZvcm1hdE5hbWUoZXh0cmFUZXh0Rm9ybWF0SW5mb18sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGludDMyX3QpdmFsdWVEZXNjcmlwdG9ySW5kZXgsIHNob3J0
TmFtZSk7Ci0gIH0KLSAgLy8gTG9naWMgaGVyZSBuZWVkcyB0byBtYXRjaCB3aGF0IG9iamVjdGl2
ZWNfZW51bS5jYyBkb2VzIGluIHRoZSBwcm90bwotICAvLyBjb21waWxlci4KLSAgaWYgKHJlc3Vs
dCA9PSBuaWwpIHsKLSAgICBOU1VJbnRlZ2VyIGxlbiA9IFtzaG9ydE5hbWUgbGVuZ3RoXTsKLSAg
ICBOU011dGFibGVTdHJpbmcgKndvcmtlciA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aENh
cGFjaXR5Omxlbl07Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK
LSAgICAgIHVuaWNoYXIgYyA9IFtzaG9ydE5hbWUgY2hhcmFjdGVyQXRJbmRleDppXTsKLSAgICAg
IGlmIChpID4gMCAmJiBjID49ICdBJyAmJiBjIDw9ICdaJykgewotICAgICAgICBbd29ya2VyIGFw
cGVuZFN0cmluZzpAIl8iXTsKLSAgICAgIH0KLSAgICAgIFt3b3JrZXIgYXBwZW5kRm9ybWF0OkAi
JWMiLCB0b3VwcGVyKChjaGFyKWMpXTsKLSAgICB9Ci0gICAgcmVzdWx0ID0gd29ya2VyOwotICB9
Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIEdQQkV4dGVu
c2lvbkRlc2NyaXB0b3IgewotICBHUEJHZW5lcmljVmFsdWUgZGVmYXVsdFZhbHVlXzsKLX0KLQot
QHN5bnRoZXNpemUgY29udGFpbmluZ01lc3NhZ2VDbGFzcyA9IGNvbnRhaW5pbmdNZXNzYWdlQ2xh
c3NfOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhFeHRlbnNpb25EZXNjcmlwdGlvbjoKLSAg
ICAgICAgKEdQQkV4dGVuc2lvbkRlc2NyaXB0aW9uICopZGVzY3JpcHRpb24gewotICBpZiAoKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgZGVzY3JpcHRpb25fID0gZGVzY3JpcHRpb247Ci0K
LSNpZiBERUJVRwotICAgIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSA9IGRlc2NyaXB0aW9uLT5tZXNz
YWdlT3JHcm91cENsYXNzTmFtZTsKLSAgICBpZiAoY2xhc3NOYW1lKSB7Ci0gICAgICBOU0Fzc2Vy
dChvYmpjX2xvb2tVcENsYXNzKGNsYXNzTmFtZSkgIT0gTmlsLAotICAgICAgICAgICAgICAgQCJD
bGFzcyAlcyBub3QgZGVmaW5lZCIsIGNsYXNzTmFtZSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBp
ZiAoZGVzY3JpcHRpb24tPmV4dGVuZGVkQ2xhc3MpIHsKLSAgICAgIENsYXNzIGNvbnRhaW5pbmdD
bGFzcyA9IG9iamNfbG9va1VwQ2xhc3MoZGVzY3JpcHRpb24tPmV4dGVuZGVkQ2xhc3MpOwotICAg
ICAgTlNBc3NlcnQoY29udGFpbmluZ0NsYXNzLCBAIkNsYXNzICVzIG5vdCBkZWZpbmVkIiwKLSAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uLT5leHRlbmRlZENsYXNzKTsKLSAgICAgIGNvbnRhaW5p
bmdNZXNzYWdlQ2xhc3NfID0gY29udGFpbmluZ0NsYXNzOwotICAgIH0KLQotICAgIEdQQkRhdGFU
eXBlIHR5cGUgPSBkZXNjcmlwdGlvbl8tPmRhdGFUeXBlOwotICAgIGlmICh0eXBlID09IEdQQkRh
dGFUeXBlQnl0ZXMpIHsKLSAgICAgIC8vIERhdGEgc3RvcmVkIGFzIGEgbGVuZ3RoIHByZWZpeGVk
IGMtc3RyaW5nIGluIGRlc2NyaXB0b3IgcmVjb3Jkcy4KLSAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ5
dGVzID0KLSAgICAgICAgICAoY29uc3QgdWludDhfdCAqKWRlc2NyaXB0aW9uLT5kZWZhdWx0VmFs
dWUudmFsdWVEYXRhOwotICAgICAgaWYgKGJ5dGVzKSB7Ci0gICAgICAgIHVpbnQzMl90IGxlbmd0
aCA9ICooKHVpbnQzMl90ICopYnl0ZXMpOwotICAgICAgICAvLyBUaGUgbGVuZ3RoIGlzIHN0b3Jl
ZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCi0gICAgICAgIGxlbmd0aCA9IG50b2hsKGxlbmd0aCk7
Ci0gICAgICAgIGJ5dGVzICs9IHNpemVvZihsZW5ndGgpOwotICAgICAgICBkZWZhdWx0VmFsdWVf
LnZhbHVlRGF0YSA9Ci0gICAgICAgICAgICBbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpi
eXRlcyBsZW5ndGg6bGVuZ3RoXTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR1BC
RGF0YVR5cGVNZXNzYWdlIHx8IHR5cGUgPT0gR1BCRGF0YVR5cGVHcm91cCkgewotICAgICAgLy8g
VGhlIGRlZmF1bHQgaXMgbG9va2VkIHVwIGluIC1kZWZhdWx0VmFsdWUgaW5zdGVhZCBzaW5jZSBl
eHRlbnNpb25zCi0gICAgICAvLyBhcmVuJ3QgY29tbW9uLCB3ZSBhdm9pZCB0aGUgaGl0IHN0YXJ0
dXAgaGl0IGFuZCBpdCBhdm9pZCBpbml0aWFsaXphdGlvbgotICAgICAgLy8gb3JkZXIgaXNzdWVz
LgotICAgIH0gZWxzZSB7Ci0gICAgICBkZWZhdWx0VmFsdWVfID0gZGVzY3JpcHRpb24tPmRlZmF1
bHRWYWx1ZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YyB7Ci0gIGlmICgoZGVzY3JpcHRpb25fLT5kYXRhVHlwZSA9PSBHUEJEYXRhVHlwZUJ5dGVzKSAm
JgotICAgICAgIUdQQkV4dGVuc2lvbklzUmVwZWF0ZWQoZGVzY3JpcHRpb25fKSkgewotICAgIFtk
ZWZhdWx0VmFsdWVfLnZhbHVlRGF0YSByZWxlYXNlXTsKLSAgfQotICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotI3By
YWdtYSB1bnVzZWQoem9uZSkKLSAgLy8gSW1tdXRhYmxlLgotICByZXR1cm4gW3NlbGYgcmV0YWlu
XTsKLX0KLQotLSAoTlNTdHJpbmcgKilzaW5nbGV0b25OYW1lIHsKLSAgcmV0dXJuIEAoZGVzY3Jp
cHRpb25fLT5zaW5nbGV0b25OYW1lKTsKLX0KLQotLSAoY29uc3QgY2hhciAqKXNpbmdsZXRvbk5h
bWVDIHsKLSAgcmV0dXJuIGRlc2NyaXB0aW9uXy0+c2luZ2xldG9uTmFtZTsKLX0KLQotLSAodWlu
dDMyX3QpZmllbGROdW1iZXIgewotICByZXR1cm4gZGVzY3JpcHRpb25fLT5maWVsZE51bWJlcjsK
LX0KLQotLSAoR1BCRGF0YVR5cGUpZGF0YVR5cGUgewotICByZXR1cm4gZGVzY3JpcHRpb25fLT5k
YXRhVHlwZTsKLX0KLQotLSAoR1BCV2lyZUZvcm1hdCl3aXJlVHlwZSB7Ci0gIHJldHVybiBHUEJX
aXJlRm9ybWF0Rm9yVHlwZShkZXNjcmlwdGlvbl8tPmRhdGFUeXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1BCRXh0ZW5zaW9uSXNQYWNrZWQoZGVzY3JpcHRpb25fKSk7Ci19Ci0K
LS0gKEdQQldpcmVGb3JtYXQpYWx0ZXJuYXRlV2lyZVR5cGUgewotICBOU0Fzc2VydChHUEJFeHRl
bnNpb25Jc1JlcGVhdGVkKGRlc2NyaXB0aW9uXyksCi0gICAgICAgICAgIEAiT25seSB2YWxpZCBv
biByZXBlYXRlZCBleHRlbnNpb25zIik7Ci0gIHJldHVybiBHUEJXaXJlRm9ybWF0Rm9yVHlwZShk
ZXNjcmlwdGlvbl8tPmRhdGFUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIUdQ
QkV4dGVuc2lvbklzUGFja2VkKGRlc2NyaXB0aW9uXykpOwotfQotCi0tIChCT09MKWlzUmVwZWF0
ZWQgewotICByZXR1cm4gR1BCRXh0ZW5zaW9uSXNSZXBlYXRlZChkZXNjcmlwdGlvbl8pOwotfQot
Ci0tIChCT09MKWlzTWFwIHsKLSAgcmV0dXJuIChkZXNjcmlwdGlvbl8tPm9wdGlvbnMgJiBHUEJG
aWVsZE1hcEtleU1hc2spICE9IDA7Ci19Ci0KLS0gKEJPT0wpaXNQYWNrYWJsZSB7Ci0gIHJldHVy
biBHUEJFeHRlbnNpb25Jc1BhY2tlZChkZXNjcmlwdGlvbl8pOwotfQotCi0tIChDbGFzcyltc2dD
bGFzcyB7Ci0gIHJldHVybiBvYmpjX2dldENsYXNzKGRlc2NyaXB0aW9uXy0+bWVzc2FnZU9yR3Jv
dXBDbGFzc05hbWUpOwotfQotCi0tIChHUEJFbnVtRGVzY3JpcHRvciAqKWVudW1EZXNjcmlwdG9y
IHsKLSAgaWYgKGRlc2NyaXB0aW9uXy0+ZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVFbnVtKSB7Ci0g
ICAgR1BCRW51bURlc2NyaXB0b3IgKmVudW1EZXNjcmlwdG9yID0gZGVzY3JpcHRpb25fLT5lbnVt
RGVzY3JpcHRvckZ1bmMoKTsKLSAgICByZXR1cm4gZW51bURlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0
dXJuIG5pbDsKLX0KLQotLSAoaWQpZGVmYXVsdFZhbHVlIHsKLSAgaWYgKEdQQkV4dGVuc2lvbklz
UmVwZWF0ZWQoZGVzY3JpcHRpb25fKSkgewotICAgIHJldHVybiBuaWw7Ci0gIH0KLQotICBzd2l0
Y2ggKGRlc2NyaXB0aW9uXy0+ZGF0YVR5cGUpIHsKLSAgICBjYXNlIEdQQkRhdGFUeXBlQm9vbDoK
LSAgICAgIHJldHVybiBAKGRlZmF1bHRWYWx1ZV8udmFsdWVCb29sKTsKLSAgICBjYXNlIEdQQkRh
dGFUeXBlRmxvYXQ6Ci0gICAgICByZXR1cm4gQChkZWZhdWx0VmFsdWVfLnZhbHVlRmxvYXQpOwot
ICAgIGNhc2UgR1BCRGF0YVR5cGVEb3VibGU6Ci0gICAgICByZXR1cm4gQChkZWZhdWx0VmFsdWVf
LnZhbHVlRG91YmxlKTsKLSAgICBjYXNlIEdQQkRhdGFUeXBlSW50MzI6Ci0gICAgY2FzZSBHUEJE
YXRhVHlwZVNJbnQzMjoKLSAgICBjYXNlIEdQQkRhdGFUeXBlRW51bToKLSAgICBjYXNlIEdQQkRh
dGFUeXBlU0ZpeGVkMzI6Ci0gICAgICByZXR1cm4gQChkZWZhdWx0VmFsdWVfLnZhbHVlSW50MzIp
OwotICAgIGNhc2UgR1BCRGF0YVR5cGVJbnQ2NDoKLSAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDY0
OgotICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4ZWQ2NDoKLSAgICAgIHJldHVybiBAKGRlZmF1bHRW
YWx1ZV8udmFsdWVJbnQ2NCk7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVVJbnQzMjoKLSAgICBjYXNl
IEdQQkRhdGFUeXBlRml4ZWQzMjoKLSAgICAgIHJldHVybiBAKGRlZmF1bHRWYWx1ZV8udmFsdWVV
SW50MzIpOwotICAgIGNhc2UgR1BCRGF0YVR5cGVVSW50NjQ6Ci0gICAgY2FzZSBHUEJEYXRhVHlw
ZUZpeGVkNjQ6Ci0gICAgICByZXR1cm4gQChkZWZhdWx0VmFsdWVfLnZhbHVlVUludDY0KTsKLSAg
ICBjYXNlIEdQQkRhdGFUeXBlQnl0ZXM6Ci0gICAgICAvLyBMaWtlIG1lc3NhZ2UgZmllbGRzLCB0
aGUgZGVmYXVsdCBpcyB6ZXJvIGxlbmd0aCBkYXRhLgotICAgICAgcmV0dXJuIChkZWZhdWx0VmFs
dWVfLnZhbHVlRGF0YSA/IGRlZmF1bHRWYWx1ZV8udmFsdWVEYXRhCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogR1BCRW1wdHlOU0RhdGEoKSk7Ci0gICAgY2FzZSBHUEJE
YXRhVHlwZVN0cmluZzoKLSAgICAgIC8vIExpa2UgbWVzc2FnZSBmaWVsZHMsIHRoZSBkZWZhdWx0
IGlzIHplcm8gbGVuZ3RoIHN0cmluZy4KLSAgICAgIHJldHVybiAoZGVmYXVsdFZhbHVlXy52YWx1
ZVN0cmluZyA/IGRlZmF1bHRWYWx1ZV8udmFsdWVTdHJpbmcgOiBAIiIpOwotICAgIGNhc2UgR1BC
RGF0YVR5cGVHcm91cDoKLSAgICBjYXNlIEdQQkRhdGFUeXBlTWVzc2FnZToKLSAgICAgIHJldHVy
biBuaWw7Ci0gIH0KLX0KLQotLSAoTlNDb21wYXJpc29uUmVzdWx0KWNvbXBhcmVCeUZpZWxkTnVt
YmVyOihHUEJFeHRlbnNpb25EZXNjcmlwdG9yICopb3RoZXIgewotICBpbnQzMl90IHNlbGZOdW1i
ZXIgPSBkZXNjcmlwdGlvbl8tPmZpZWxkTnVtYmVyOwotICBpbnQzMl90IG90aGVyTnVtYmVyID0g
b3RoZXItPmRlc2NyaXB0aW9uXy0+ZmllbGROdW1iZXI7Ci0gIGlmIChzZWxmTnVtYmVyIDwgb3Ro
ZXJOdW1iZXIpIHsKLSAgICByZXR1cm4gTlNPcmRlcmVkQXNjZW5kaW5nOwotICB9IGVsc2UgaWYg
KHNlbGZOdW1iZXIgPT0gb3RoZXJOdW1iZXIpIHsKLSAgICByZXR1cm4gTlNPcmRlcmVkU2FtZTsK
LSAgfSBlbHNlIHsKLSAgICByZXR1cm4gTlNPcmRlcmVkRGVzY2VuZGluZzsKLSAgfQotfQotCi1A
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCRGVzY3JpcHRvcl9QYWNrYWdlUHJpdmF0ZS5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9vYmplY3RpdmVjL0dQQkRlc2NyaXB0b3JfUGFja2FnZVByaXZhdGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTNkMGE4MGYwNTI1YmVhOWQzYjlkNDg2OWVjZTU4Y2Y3NTQ3ZDM2
Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2
ZWMvR1BCRGVzY3JpcHRvcl9QYWNrYWdlUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEz
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlzIGhl
YWRlciBpcyBwcml2YXRlIHRvIHRoZSBQcm90b2JvbEJ1ZmZlcnMgbGlicmFyeSBhbmQgbXVzdCBO
T1QgYmUKLS8vIGluY2x1ZGVkIGJ5IGFueSBzb3VyY2VzIG91dHNpZGUgdGhpcyBsaWJyYXJ5LiBU
aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZQotLy8gc3ViamVjdCB0byBjaGFuZ2UgYXQgYW55
IHRpbWUgd2l0aG91dCBub3RpY2UuCi0KLSNpbXBvcnQgIkdQQkRlc2NyaXB0b3IuaCIKLSNpbXBv
cnQgIkdQQldpcmVGb3JtYXQuaCIKLQotLy8gRGVzY3JpYmVzIGF0dHJpYnV0ZXMgb2YgdGhlIGZp
ZWxkLgotdHlwZWRlZiBOU19PUFRJT05TKHVpbnQxNl90LCBHUEJGaWVsZEZsYWdzKSB7Ci0gIC8v
IFRoZXNlIG1hcCB0byBzdGFuZGFyZCBwcm90b2J1ZiBjb25jZXB0cy4KLSAgR1BCRmllbGRSZXF1
aXJlZCAgICAgICAgPSAxIDw8IDAsCi0gIEdQQkZpZWxkUmVwZWF0ZWQgICAgICAgID0gMSA8PCAx
LAotICBHUEJGaWVsZFBhY2tlZCAgICAgICAgICA9IDEgPDwgMiwKLSAgR1BCRmllbGRPcHRpb25h
bCAgICAgICAgPSAxIDw8IDMsCi0gIEdQQkZpZWxkSGFzRGVmYXVsdFZhbHVlID0gMSA8PCA0LAot
Ci0gIC8vIEluZGljYXRlcyB0aGUgZmllbGQgbmVlZHMgY3VzdG9tIGhhbmRsaW5nIGZvciB0aGUg
VGV4dEZvcm1hdCBuYW1lLCBpZiBub3QKLSAgLy8gc2V0LCB0aGUgbmFtZSBjYW4gYmUgZGVyaXZl
ZCBmcm9tIHRoZSBPYmpDIG5hbWUuCi0gIEdQQkZpZWxkVGV4dEZvcm1hdE5hbWVDdXN0b20gPSAx
IDw8IDYsCi0gIC8vIEluZGljYXRlcyB0aGUgZmllbGQgaGFzIGFuIGVudW0gZGVzY3JpcHRvci4K
LSAgR1BCRmllbGRIYXNFbnVtRGVzY3JpcHRvciA9IDEgPDwgNywKLQotICAvLyBUaGVzZSBhcmUg
bm90IHN0YW5kYXJkIHByb3RvYnVmIGNvbmNlcHRzLCB0aGV5IGFyZSBzcGVjaWZpYyB0byB0aGUK
LSAgLy8gT2JqZWN0aXZlIEMgcnVudGltZS4KLQotICAvLyBUaGVzZSBiaXRzIGFyZSB1c2VkIHRv
IG1hcmsgdGhlIGZpZWxkIGFzIGEgbWFwIGFuZCB3aGF0IHRoZSBrZXkKLSAgLy8gdHlwZSBpcy4K
LSAgR1BCRmllbGRNYXBLZXlNYXNrICAgICA9IDB4RiA8PCA4LAotICBHUEJGaWVsZE1hcEtleUlu
dDMyICAgID0gIDEgPDwgOCwKLSAgR1BCRmllbGRNYXBLZXlJbnQ2NCAgICA9ICAyIDw8IDgsCi0g
IEdQQkZpZWxkTWFwS2V5VUludDMyICAgPSAgMyA8PCA4LAotICBHUEJGaWVsZE1hcEtleVVJbnQ2
NCAgID0gIDQgPDwgOCwKLSAgR1BCRmllbGRNYXBLZXlTSW50MzIgICA9ICA1IDw8IDgsCi0gIEdQ
QkZpZWxkTWFwS2V5U0ludDY0ICAgPSAgNiA8PCA4LAotICBHUEJGaWVsZE1hcEtleUZpeGVkMzIg
ID0gIDcgPDwgOCwKLSAgR1BCRmllbGRNYXBLZXlGaXhlZDY0ICA9ICA4IDw8IDgsCi0gIEdQQkZp
ZWxkTWFwS2V5U0ZpeGVkMzIgPSAgOSA8PCA4LAotICBHUEJGaWVsZE1hcEtleVNGaXhlZDY0ID0g
MTAgPDwgOCwKLSAgR1BCRmllbGRNYXBLZXlCb29sICAgICA9IDExIDw8IDgsCi0gIEdQQkZpZWxk
TWFwS2V5U3RyaW5nICAgPSAxMiA8PCA4LAotfTsKLQotLy8gTk9URTogVGhlIHN0cnVjdHVyZXMg
ZGVmaW5lZCBoZXJlIGhhdmUgdGhlaXIgbWVtYmVycyBvcmRlcmVkIHRvIG1pbmltaXplCi0vLyB0
aGVpciBzaXplLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdGhlIHNpemUgb2YgYXBwcyBzaW5jZSB0
aGVzZSBleGlzdCBwZXIKLS8vIGZpZWxkL2V4dGVuc2lvbi4KLQotLy8gRGVzY3JpYmVzIGEgc2lu
Z2xlIGZpZWxkIGluIGEgcHJvdG9idWYgYXMgaXQgaXMgcmVwcmVzZW50ZWQgYXMgYW4gaXZhci4K
LXR5cGVkZWYgc3RydWN0IEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uIHsKLSAgLy8gTmFtZSBv
ZiBpdmFyLgotICBjb25zdCBjaGFyICpuYW1lOwotICB1bmlvbiB7Ci0gICAgY29uc3QgY2hhciAq
Y2xhc3NOYW1lOyAgLy8gTmFtZSBmb3IgbWVzc2FnZSBjbGFzcy4KLSAgICAvLyBGb3IgZW51bXMg
b25seTogSWYgRW51bURlc2NyaXB0b3JzIGFyZSBjb21waWxlZCBpbiwgaXQgd2lsbCBiZSB0aGF0
LAotICAgIC8vIG90aGVyd2lzZSBpdCB3aWxsIGJlIHRoZSB2ZXJpZmllci4KLSAgICBHUEJFbnVt
RGVzY3JpcHRvckZ1bmMgZW51bURlc2NGdW5jOwotICAgIEdQQkVudW1WYWxpZGF0aW9uRnVuYyBl
bnVtVmVyaWZpZXI7Ci0gIH0gZGF0YVR5cGVTcGVjaWZpYzsKLSAgLy8gVGhlIGZpZWxkIG51bWJl
ciBmb3IgdGhlIGl2YXIuCi0gIHVpbnQzMl90IG51bWJlcjsKLSAgLy8gVGhlIGluZGV4IChpbiBi
aXRzKSBpbnRvIF9oYXNfc3RvcmFnZV8uCi0gIC8vICAgPj0gMDogdGhlIGJpdCB0byB1c2UgZm9y
IGEgdmFsdWUgYmVpbmcgc2V0LgotICAvLyAgID0gR1BCTm9IYXNCaXQoSU5UMzJfTUFYKTogbm8g
c3RvcmFnZSB1c2VkLgotICAvLyAgIDwgMDogaW4gYSBvbmVPZiwgdXNlIGEgZnVsbCBpbnQzMiB0
byByZWNvcmQgdGhlIGZpZWxkIGFjdGl2ZS4KLSAgaW50MzJfdCBoYXNJbmRleDsKLSAgLy8gT2Zm
c2V0IG9mIHRoZSB2YXJpYWJsZSBpbnRvIGl0J3Mgc3RydWN0dXJlIHN0cnVjdC4KLSAgdWludDMy
X3Qgb2Zmc2V0OwotICAvLyBGaWVsZCBmbGFncy4gVXNlIGFjY2Vzc29yIGZ1bmN0aW9ucyBiZWxv
dy4KLSAgR1BCRmllbGRGbGFncyBmbGFnczsKLSAgLy8gRGF0YSB0eXBlIG9mIHRoZSBpdmFyLgot
ICBHUEJEYXRhVHlwZSBkYXRhVHlwZTsKLX0gR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb247Ci0K
LS8vIEZpZWxkcyBpbiBtZXNzYWdlcyBkZWZpbmVkIGluIGEgJ3Byb3RvMicgc3ludGF4IGZpbGUg
Y2FuIHByb3ZpZGUgYSBkZWZhdWx0Ci0vLyB2YWx1ZS4gVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhl
IGRlZmF1bHQgYWxvbmcgd2l0aCB0aGUgZmllbGQgaW5mby4KLXR5cGVkZWYgc3RydWN0IEdQQk1l
c3NhZ2VGaWVsZERlc2NyaXB0aW9uV2l0aERlZmF1bHQgewotICAvLyBEZWZhdWx0IHZhbHVlIGZv
ciB0aGUgaXZhci4KLSAgR1BCR2VuZXJpY1ZhbHVlIGRlZmF1bHRWYWx1ZTsKLQotICBHUEJNZXNz
YWdlRmllbGREZXNjcmlwdGlvbiBjb3JlOwotfSBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbldp
dGhEZWZhdWx0OwotCi0vLyBEZXNjcmliZXMgYXR0cmlidXRlcyBvZiB0aGUgZXh0ZW5zaW9uLgot
dHlwZWRlZiBOU19PUFRJT05TKHVpbnQ4X3QsIEdQQkV4dGVuc2lvbk9wdGlvbnMpIHsKLSAgLy8g
VGhlc2UgbWFwIHRvIHN0YW5kYXJkIHByb3RvYnVmIGNvbmNlcHRzLgotICBHUEJFeHRlbnNpb25S
ZXBlYXRlZCAgICAgID0gMSA8PCAwLAotICBHUEJFeHRlbnNpb25QYWNrZWQgICAgICAgID0gMSA8
PCAxLAotICBHUEJFeHRlbnNpb25TZXRXaXJlRm9ybWF0ID0gMSA8PCAyLAotfTsKLQotLy8gQW4g
ZXh0ZW5zaW9uCi10eXBlZGVmIHN0cnVjdCBHUEJFeHRlbnNpb25EZXNjcmlwdGlvbiB7Ci0gIEdQ
QkdlbmVyaWNWYWx1ZSBkZWZhdWx0VmFsdWU7Ci0gIGNvbnN0IGNoYXIgKnNpbmdsZXRvbk5hbWU7
Ci0gIGNvbnN0IGNoYXIgKmV4dGVuZGVkQ2xhc3M7Ci0gIGNvbnN0IGNoYXIgKm1lc3NhZ2VPckdy
b3VwQ2xhc3NOYW1lOwotICBHUEJFbnVtRGVzY3JpcHRvckZ1bmMgZW51bURlc2NyaXB0b3JGdW5j
OwotICBpbnQzMl90IGZpZWxkTnVtYmVyOwotICBHUEJEYXRhVHlwZSBkYXRhVHlwZTsKLSAgR1BC
RXh0ZW5zaW9uT3B0aW9ucyBvcHRpb25zOwotfSBHUEJFeHRlbnNpb25EZXNjcmlwdGlvbjsKLQot
dHlwZWRlZiBOU19PUFRJT05TKHVpbnQzMl90LCBHUEJEZXNjcmlwdG9ySW5pdGlhbGl6YXRpb25G
bGFncykgewotICBHUEJEZXNjcmlwdG9ySW5pdGlhbGl6YXRpb25GbGFnX0ZpZWxkc1dpdGhEZWZh
dWx0ID0gMSA8PCAwLAotICBHUEJEZXNjcmlwdG9ySW5pdGlhbGl6YXRpb25GbGFnX1dpcmVGb3Jt
YXQgICAgICAgID0gMSA8PCAxLAotfTsKLQotQGludGVyZmFjZSBHUEJEZXNjcmlwdG9yICgpIHsK
LSBAcGFja2FnZQotICBOU0FycmF5ICpmaWVsZHNfOwotICBOU0FycmF5ICpvbmVvZnNfOwotICB1
aW50MzJfdCBzdG9yYWdlU2l6ZV87Ci19Ci0KLS8vIGZpZWxkRGVzY3JpcHRpb25zIGhhdmUgdG8g
YmUgbG9uZyBsaXZlZCwgdGhleSBhcmUgaGVsZCBhcyByYXcgcG9pbnRlcnMuCi0rIChpbnN0YW5j
ZXR5cGUpCi0gICAgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6KENsYXNzKW1lc3NhZ2VDbGFzcwot
ICAgICAgICAgICAgICAgICAgcm9vdENsYXNzOihDbGFzcylyb290Q2xhc3MKLSAgICAgICAgICAg
ICAgICAgICAgICAgZmlsZTooR1BCRmlsZURlc2NyaXB0b3IgKilmaWxlCi0gICAgICAgICAgICAg
ICAgICAgICBmaWVsZHM6KHZvaWQgKilmaWVsZERlc2NyaXB0aW9ucwotICAgICAgICAgICAgICAg
ICBmaWVsZENvdW50Oih1aW50MzJfdClmaWVsZENvdW50Ci0gICAgICAgICAgICAgICAgc3RvcmFn
ZVNpemU6KHVpbnQzMl90KXN0b3JhZ2VTaXplCi0gICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6
KEdQQkRlc2NyaXB0b3JJbml0aWFsaXphdGlvbkZsYWdzKWZsYWdzOwotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDbGFzczooQ2xhc3MpbWVzc2FnZUNsYXNzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsZTooR1BCRmlsZURlc2NyaXB0b3IgKilmaWxlCi0gICAgICAgICAgICAgICAgICAg
ICAgIGZpZWxkczooTlNBcnJheSAqKWZpZWxkcwotICAgICAgICAgICAgICAgICAgc3RvcmFnZVNp
emU6KHVpbnQzMl90KXN0b3JhZ2UKLSAgICAgICAgICAgICAgICAgICB3aXJlRm9ybWF0OihCT09M
KXdpcmVGb3JtYXQ7Ci0KLS8vIENhbGxlZCByaWdodCBhZnRlciBpbml0IHRvIHByb3ZpZGUgZXh0
cmEgaW5mb3JtYXRpb24gdG8gYXZvaWQgaW5pdCBoYXZpbmcKLS8vIGFuIGV4cGxvc2lvbiBvZiBh
cmdzLiBUaGVzZSBwb2ludGVycyBhcmUgcmVjb3JkZWQsIHNvIHRoZXkgYXJlIGV4cGVjdGVkCi0v
LyB0byBsaXZlIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGFwcC4KLS0gKHZvaWQpc2V0dXBPbmVv
ZnM6KGNvbnN0IGNoYXIgKiopb25lb2ZOYW1lcwotICAgICAgICAgICAgICBjb3VudDoodWludDMy
X3QpY291bnQKLSAgICAgIGZpcnN0SGFzSW5kZXg6KGludDMyX3QpZmlyc3RIYXNJbmRleDsKLS0g
KHZvaWQpc2V0dXBFeHRyYVRleHRJbmZvOihjb25zdCBjaGFyICopZXh0cmFUZXh0Rm9ybWF0SW5m
bzsKLS0gKHZvaWQpc2V0dXBFeHRlbnNpb25SYW5nZXM6KGNvbnN0IEdQQkV4dGVuc2lvblJhbmdl
ICopcmFuZ2VzIGNvdW50OihpbnQzMl90KWNvdW50OwotCi1AZW5kCi0KLUBpbnRlcmZhY2UgR1BC
RmlsZURlc2NyaXB0b3IgKCkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBhY2thZ2U6KE5TU3Ry
aW5nICopcGFja2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheDooR1BCRmlsZVN5
bnRheClzeW50YXg7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCT25lb2ZEZXNjcmlwdG9yICgpIHsK
LSBAcGFja2FnZQotICBjb25zdCBjaGFyICpuYW1lXzsKLSAgTlNBcnJheSAqZmllbGRzXzsKLSAg
U0VMIGNhc2VTZWxfOwotfQotLy8gbmFtZSBtdXN0IGJlIGxvbmcgbGl2ZWQuCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhOYW1lOihjb25zdCBjaGFyICopbmFtZSBmaWVsZHM6KE5TQXJyYXkgKilm
aWVsZHM7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCRmllbGREZXNjcmlwdG9yICgpIHsKLSBAcGFj
a2FnZQotICBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiAqZGVzY3JpcHRpb25fOwotICBHUEJf
VU5TQUZFX1VOUkVUQUlORUQgR1BCT25lb2ZEZXNjcmlwdG9yICpjb250YWluaW5nT25lb2ZfOwot
Ci0gIFNFTCBnZXRTZWxfOwotICBTRUwgc2V0U2VsXzsKLSAgU0VMIGhhc09yQ291bnRTZWxfOyAg
Ly8gKkNvdW50IGZvciBtYXA8Pi9yZXBlYXRlZCBmaWVsZHMsIGhhcyogb3RoZXJ3aXNlLgotICBT
RUwgc2V0SGFzU2VsXzsKLX0KLQotLy8gU2luZ2xlIGluaXRpYWxpemVyCi0vLyBkZXNjcmlwdGlv
biBoYXMgdG8gYmUgbG9uZyBsaXZlZCwgaXQgaXMgaGVsZCBhcyBhIHJhdyBwb2ludGVyLgotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRmllbGREZXNjcmlwdGlvbjoodm9pZCAqKWRlc2NyaXB0aW9u
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXNEZWZhdWx0OihCT09MKWluY2x1ZGVz
RGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheDooR1BCRmls
ZVN5bnRheClzeW50YXg7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCRW51bURlc2NyaXB0b3IgKCkK
LS8vIHZhbHVlTmFtZXMsIHZhbHVlcyBhbmQgZXh0cmFUZXh0Rm9ybWF0SW5mbyBoYXZlIHRvIGJl
IGxvbmcgbGl2ZWQsIHRoZXkgYXJlCi0vLyBoZWxkIGFzIHJhdyBwb2ludGVycy4KLSsgKGluc3Rh
bmNldHlwZSkKLSAgICBhbGxvY0Rlc2NyaXB0b3JGb3JOYW1lOihOU1N0cmluZyAqKW5hbWUKLSAg
ICAgICAgICAgICAgICB2YWx1ZU5hbWVzOihjb25zdCBjaGFyICopdmFsdWVOYW1lcwotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZXM6KGNvbnN0IGludDMyX3QgKil2YWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgIGNvdW50Oih1aW50MzJfdCl2YWx1ZUNvdW50Ci0gICAgICAgICAgICAgIGVudW1W
ZXJpZmllcjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWVudW1WZXJpZmllcjsKLSsgKGluc3RhbmNl
dHlwZSkKLSAgICBhbGxvY0Rlc2NyaXB0b3JGb3JOYW1lOihOU1N0cmluZyAqKW5hbWUKLSAgICAg
ICAgICAgICAgICB2YWx1ZU5hbWVzOihjb25zdCBjaGFyICopdmFsdWVOYW1lcwotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXM6KGNvbnN0IGludDMyX3QgKil2YWx1ZXMKLSAgICAgICAgICAgICAg
ICAgICAgIGNvdW50Oih1aW50MzJfdCl2YWx1ZUNvdW50Ci0gICAgICAgICAgICAgIGVudW1WZXJp
ZmllcjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWVudW1WZXJpZmllcgotICAgICAgIGV4dHJhVGV4
dEZvcm1hdEluZm86KGNvbnN0IGNoYXIgKilleHRyYVRleHRGb3JtYXRJbmZvOwotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKLSAgICAgICAgICAgICAgICAg
IHZhbHVlTmFtZXM6KGNvbnN0IGNoYXIgKil2YWx1ZU5hbWVzCi0gICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVzOihjb25zdCBpbnQzMl90ICopdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAg
IGNvdW50Oih1aW50MzJfdCl2YWx1ZUNvdW50Ci0gICAgICAgICAgICAgICAgZW51bVZlcmlmaWVy
OihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZW51bVZlcmlmaWVyOwotQGVuZAotCi1AaW50ZXJmYWNl
IEdQQkV4dGVuc2lvbkRlc2NyaXB0b3IgKCkgewotIEBwYWNrYWdlCi0gIEdQQkV4dGVuc2lvbkRl
c2NyaXB0aW9uICpkZXNjcmlwdGlvbl87Ci19Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25s
eSkgR1BCV2lyZUZvcm1hdCB3aXJlVHlwZTsKLQotLy8gRm9yIHJlcGVhdGVkIGV4dGVuc2lvbnMs
IGFsdGVybmF0ZVdpcmVUeXBlIGlzIHRoZSB3aXJlVHlwZSB3aXRoIHRoZSBvcHBvc2l0ZQotLy8g
dmFsdWUgZm9yIHRoZSBwYWNrYWJsZSBwcm9wZXJ0eS4gIGkuZS4gLSBpZiB0aGUgZXh0ZW5zaW9u
IHdhcyBtYXJrZWQgcGFja2VkCi0vLyBpdCB3b3VsZCBiZSB0aGUgd2lyZSB0eXBlIGZvciB1bnBh
Y2tlZDsgaWYgdGhlIGV4dGVuc2lvbiB3YXMgbWFya2VkIHVucGFja2VkLAotLy8gaXQgd291bGQg
YmUgdGhlIHdpcmUgdHlwZSBmb3IgcGFja2VkLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9u
bHkpIEdQQldpcmVGb3JtYXQgYWx0ZXJuYXRlV2lyZVR5cGU7Ci0KLS8vIGRlc2NyaXB0aW9uIGhh
cyB0byBiZSBsb25nIGxpdmVkLCBpdCBpcyBoZWxkIGFzIGEgcmF3IHBvaW50ZXIuCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhFeHRlbnNpb25EZXNjcmlwdGlvbjoKLSAgICAoR1BCRXh0ZW5zaW9u
RGVzY3JpcHRpb24gKilkZXNjcmlwdGlvbjsKLS0gKE5TQ29tcGFyaXNvblJlc3VsdCljb21wYXJl
QnlGaWVsZE51bWJlcjooR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciAqKW90aGVyOwotQGVuZAotCi1D
Rl9FWFRFUk5fQ19CRUdJTgotCi1HUEJfSU5MSU5FIEJPT0wgR1BCRmllbGRJc01hcE9yQXJyYXko
R1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICByZXR1cm4gKGZpZWxkLT5kZXNjcmlwdGlv
bl8tPmZsYWdzICYKLSAgICAgICAgICAoR1BCRmllbGRSZXBlYXRlZCB8IEdQQkZpZWxkTWFwS2V5
TWFzaykpICE9IDA7Ci19Ci0KLUdQQl9JTkxJTkUgR1BCRGF0YVR5cGUgR1BCR2V0RmllbGREYXRh
VHlwZShHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0gIHJldHVybiBmaWVsZC0+ZGVzY3Jp
cHRpb25fLT5kYXRhVHlwZTsKLX0KLQotR1BCX0lOTElORSBpbnQzMl90IEdQQkZpZWxkSGFzSW5k
ZXgoR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICByZXR1cm4gZmllbGQtPmRlc2NyaXB0
aW9uXy0+aGFzSW5kZXg7Ci19Ci0KLUdQQl9JTkxJTkUgdWludDMyX3QgR1BCRmllbGROdW1iZXIo
R1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICByZXR1cm4gZmllbGQtPmRlc2NyaXB0aW9u
Xy0+bnVtYmVyOwotfQotCi11aW50MzJfdCBHUEJGaWVsZFRhZyhHUEJGaWVsZERlc2NyaXB0b3Ig
KnNlbGYpOwotCi0vLyBGb3IgcmVwZWF0ZWQgZmllbGRzLCBhbHRlcm5hdGVXaXJlVHlwZSBpcyB0
aGUgd2lyZVR5cGUgd2l0aCB0aGUgb3Bwb3NpdGUKLS8vIHZhbHVlIGZvciB0aGUgcGFja2FibGUg
cHJvcGVydHkuICBpLmUuIC0gaWYgdGhlIGZpZWxkIHdhcyBtYXJrZWQgcGFja2VkIGl0Ci0vLyB3
b3VsZCBiZSB0aGUgd2lyZSB0eXBlIGZvciB1bnBhY2tlZDsgaWYgdGhlIGZpZWxkIHdhcyBtYXJr
ZWQgdW5wYWNrZWQsIGl0Ci0vLyB3b3VsZCBiZSB0aGUgd2lyZSB0eXBlIGZvciBwYWNrZWQuCi11
aW50MzJfdCBHUEJGaWVsZEFsdGVybmF0ZVRhZyhHUEJGaWVsZERlc2NyaXB0b3IgKnNlbGYpOwot
Ci1HUEJfSU5MSU5FIEJPT0wgR1BCUHJlc2VydmVVbmtub3duRmllbGRzKEdQQkZpbGVTeW50YXgg
c3ludGF4KSB7Ci0gIHJldHVybiBzeW50YXggIT0gR1BCRmlsZVN5bnRheFByb3RvMzsKLX0KLQot
R1BCX0lOTElORSBCT09MIEdQQkhhc1ByZXNlcnZpbmdVbmtub3duRW51bVNlbWFudGljcyhHUEJG
aWxlU3ludGF4IHN5bnRheCkgewotICByZXR1cm4gc3ludGF4ID09IEdQQkZpbGVTeW50YXhQcm90
bzM7Ci19Ci0KLUdQQl9JTkxJTkUgQk9PTCBHUEJFeHRlbnNpb25Jc1JlcGVhdGVkKEdQQkV4dGVu
c2lvbkRlc2NyaXB0aW9uICpkZXNjcmlwdGlvbikgewotICByZXR1cm4gKGRlc2NyaXB0aW9uLT5v
cHRpb25zICYgR1BCRXh0ZW5zaW9uUmVwZWF0ZWQpICE9IDA7Ci19Ci0KLUdQQl9JTkxJTkUgQk9P
TCBHUEJFeHRlbnNpb25Jc1BhY2tlZChHUEJFeHRlbnNpb25EZXNjcmlwdGlvbiAqZGVzY3JpcHRp
b24pIHsKLSAgcmV0dXJuIChkZXNjcmlwdGlvbi0+b3B0aW9ucyAmIEdQQkV4dGVuc2lvblBhY2tl
ZCkgIT0gMDsKLX0KLQotR1BCX0lOTElORSBCT09MIEdQQkV4dGVuc2lvbklzV2lyZUZvcm1hdChH
UEJFeHRlbnNpb25EZXNjcmlwdGlvbiAqZGVzY3JpcHRpb24pIHsKLSAgcmV0dXJuIChkZXNjcmlw
dGlvbi0+b3B0aW9ucyAmIEdQQkV4dGVuc2lvblNldFdpcmVGb3JtYXQpICE9IDA7Ci19Ci0KLS8v
IEhlbHBlciBmb3IgY29tcGlsZSB0aW1lIGFzc2V0cy4KLSNpZm5kZWYgX0dQQkNvbXBpbGVBc3Nl
cnQKLSAgI2lmIF9faGFzX2ZlYXR1cmUoY19zdGF0aWNfYXNzZXJ0KSB8fCBfX2hhc19leHRlbnNp
b24oY19zdGF0aWNfYXNzZXJ0KQotICAgICNkZWZpbmUgX0dQQkNvbXBpbGVBc3NlcnQodGVzdCwg
bXNnKSBfU3RhdGljX2Fzc2VydCgodGVzdCksICNtc2cpCi0gICNlbHNlCi0gICAgLy8gUHJlLVhj
b2RlIDcgc3VwcG9ydC4KLSAgICAjZGVmaW5lIF9HUEJDb21waWxlQXNzZXJ0U3ltYm9sSW5uZXIo
bGluZSwgbXNnKSBfR1BCQ29tcGlsZUFzc2VydCAjIyBsaW5lICMjIF9fICMjIG1zZwotICAgICNk
ZWZpbmUgX0dQQkNvbXBpbGVBc3NlcnRTeW1ib2wobGluZSwgbXNnKSBfR1BCQ29tcGlsZUFzc2Vy
dFN5bWJvbElubmVyKGxpbmUsIG1zZykKLSAgICAjZGVmaW5lIF9HUEJDb21waWxlQXNzZXJ0KHRl
c3QsIG1zZykgXAotICAgICAgICB0eXBlZGVmIGNoYXIgX0dQQkNvbXBpbGVBc3NlcnRTeW1ib2wo
X19MSU5FX18sIG1zZykgWyAoKHRlc3QpID8gMSA6IC0xKSBdCi0gICNlbmRpZiAgLy8gX19oYXNf
ZmVhdHVyZShjX3N0YXRpY19hc3NlcnQpIHx8IF9faGFzX2V4dGVuc2lvbihjX3N0YXRpY19hc3Nl
cnQpCi0jZW5kaWYgLy8gX0dQQkNvbXBpbGVBc3NlcnQKLQotLy8gU2FuaXR5IGNoZWNrIHRoYXQg
dGhlcmUgaXNuJ3QgcGFkZGluZyBiZXR3ZWVuIHRoZSBmaWVsZCBkZXNjcmlwdGlvbgotLy8gc3Ry
dWN0dXJlcyB3aXRoIGFuZCB3aXRob3V0IGEgZGVmYXVsdC4KLV9HUEJDb21waWxlQXNzZXJ0KHNp
emVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbldpdGhEZWZhdWx0KSA9PQotICAgICAgICAg
ICAgICAgICAgKHNpemVvZihHUEJHZW5lcmljVmFsdWUpICsKLSAgICAgICAgICAgICAgICAgICBz
aXplb2YoR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb24pKSwKLSAgICAgICAgICAgICAgICAgIERl
c2NyaXB0aW9uc1dpdGhEZWZhdWx0X2RpZmZlcmVudF9zaXplX3RoYW5fZXhwZWN0ZWQpOwotCi1D
Rl9FWFRFUk5fQ19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJEaWN0aW9uYXJ5LmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29i
amVjdGl2ZWMvR1BCRGljdGlvbmFyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
MTIwODE0YTYzM2E1OGZhODc5NThjNjllZmJiYjUzY2Y2MmNjOGEwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJEaWN0aW9uYXJ5LmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyMjQzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9y
dCAiR1BCUnVudGltZVR5cGVzLmgiCi0KLS8vIFRoZXNlIGNsYXNzZXMgYXJlIHVzZWQgZm9yIG1h
cCBmaWVsZHMgb2YgYmFzaWMgZGF0YSB0eXBlcy4gVGhleSBhcmUgdXNlZCBiZWNhdXNlCi0vLyB0
aGV5IHBlcmZvcm0gYmV0dGVyIHRoYW4gYm94aW5nIGludG8gTlNOdW1iZXJzIGluIE5TRGljdGlv
bmFyaWVzLgotCi0vLyBOb3RlOiBUaGVzZSBhcmUgbm90IG1lYW50IHRvIGJlIHN1YmNsYXNzZWQu
Ci0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi0KLS8vJVBERE0tRVhQQU5EIERFQ0xBUkVfRElD
VElPTkFSSUVTKCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBl
ZGl0IGl0IGRpcmVjdGx5LgotCi0jcHJhZ21hIG1hcmsgLSBVSW50MzIgLT4gVUludDMyCi0KLUBp
bnRlcmZhY2UgR1BCVUludDMyVUludDMyRGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+
Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0r
IChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aFZhbHVlOih1aW50MzJfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JL
ZXk6KHVpbnQzMl90KWtleTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczoo
Y29uc3QgdWludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5
V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQzMlVJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5Owot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRl
bXM7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgdWludDMyX3QgW10p
dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtd
KWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBO
U19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlv
bmFyeTooR1BCVUludDMyVUludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2
YWx1ZUZvcktleToodWludDMyX3Qpa2V5IHZhbHVlOihudWxsYWJsZSB1aW50MzJfdCAqKXZhbHVl
OwotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lk
ICheKSh1aW50MzJfdCBrZXksIHVpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQot
LSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQlVJbnQzMlVJbnQzMkRpY3Rpb25h
cnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KHVpbnQzMl90KXZhbHVl
IGZvcktleToodWludDMyX3Qpa2V5OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5Oih1aW50
MzJfdClhS2V5OwotLSAodm9pZClyZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0g
VUludDMyIC0+IEludDMyCi0KLUBpbnRlcmZhY2UgR1BCVUludDMySW50MzJEaWN0aW9uYXJ5IDog
TlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5T
VUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFu
Y2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KGludDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yS2V5Oih1aW50MzJfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQzMkludDMyRGljdGlvbmFy
eSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eToo
TlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihj
b25zdCBpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihj
b25zdCB1aW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5T
VUludGVnZXIpY291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQzMkludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25h
cnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVt
czsKLQotLSAoQk9PTCl2YWx1ZUZvcktleToodWludDMyX3Qpa2V5IHZhbHVlOihudWxsYWJsZSBp
bnQzMl90ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxv
Y2s6Ci0gICAgKHZvaWQgKF4pKHVpbnQzMl90IGtleSwgaW50MzJfdCB2YWx1ZSwgQk9PTCAqc3Rv
cCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50MzJJ
bnQzMkRpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGlu
dDMyX3QpdmFsdWUgZm9yS2V5Oih1aW50MzJfdClrZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVG
b3JLZXk6KHVpbnQzMl90KWFLZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJh
Z21hIG1hcmsgLSBVSW50MzIgLT4gVUludDY0Ci0KLUBpbnRlcmZhY2UgR1BCVUludDMyVUludDY0
RGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMs
IHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFy
eTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOih1aW50NjRfdCl2YWx1ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KHVpbnQzMl90KWtleTsKLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgdWludDY0X3QgW10pdmFsdWVz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtd
KWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlcilj
b3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQz
MlVJbnQ2NERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFZhbHVlczooY29uc3QgdWludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVS
OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDMyVUludDY0RGlj
dGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eToo
TlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleToodWludDMyX3Qpa2V5
IHZhbHVlOihudWxsYWJsZSB1aW50NjRfdCAqKXZhbHVlOwotCi0tICh2b2lkKWVudW1lcmF0ZUtl
eXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50MzJfdCBrZXksIHVpbnQ2
NF90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURp
Y3Rpb25hcnk6KEdQQlVJbnQzMlVJbnQ2NERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0K
LS0gKHZvaWQpc2V0VmFsdWU6KHVpbnQ2NF90KXZhbHVlIGZvcktleToodWludDMyX3Qpa2V5Owot
Ci0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5Oih1aW50MzJfdClhS2V5OwotLSAodm9pZClyZW1v
dmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gVUludDMyIC0+IEludDY0Ci0KLUBpbnRl
cmZhY2UgR1BCVUludDMySW50NjREaWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQot
QHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFs
dWU6KGludDY0X3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5Oih1
aW50MzJfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0
IGludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6
KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERp
Y3Rpb25hcnk6KEdQQlVJbnQzMkludDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0
YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBpbnQ2NF90IFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50MzJfdCBbXSlrZXlzCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdO
QVRFRF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQ
QlVJbnQzMkludDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktl
eToodWludDMyX3Qpa2V5IHZhbHVlOihudWxsYWJsZSBpbnQ2NF90ICopdmFsdWU7Ci0KLS0gKHZv
aWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKHVpbnQz
Ml90IGtleSwgaW50NjRfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRk
RW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50MzJJbnQ2NERpY3Rpb25hcnkgKilvdGhlckRp
Y3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGludDY0X3QpdmFsdWUgZm9yS2V5Oih1aW50
MzJfdClrZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KHVpbnQzMl90KWFLZXk7Ci0t
ICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50MzIgLT4gQm9v
bAotCi1AaW50ZXJmYWNlIEdQQlVJbnQzMkJvb2xEaWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29w
eWluZz4KLQotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7
Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoVmFsdWU6KEJPT0wpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
S2V5Oih1aW50MzJfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6
KGNvbnN0IEJPT0wgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aERpY3Rpb25hcnk6KEdQQlVJbnQzMkJvb2xEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IEJPT0wgW10pdmFsdWVzCi0g
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05B
VEVEX0lOSVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BC
VUludDMyQm9vbERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6
KHVpbnQzMl90KWtleSB2YWx1ZToobnVsbGFibGUgQk9PTCAqKXZhbHVlOwotCi0tICh2b2lkKWVu
dW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50MzJfdCBr
ZXksIEJPT0wgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNG
cm9tRGljdGlvbmFyeTooR1BCVUludDMyQm9vbERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7
Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KEJPT0wpdmFsdWUgZm9yS2V5Oih1aW50MzJfdClrZXk7Ci0K
LS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KHVpbnQzMl90KWFLZXk7Ci0tICh2b2lkKXJlbW92
ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50MzIgLT4gRmxvYXQKLQotQGludGVy
ZmFjZSBHUEJVSW50MzJGbG9hdERpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1A
cHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5z
dGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1
ZTooZmxvYXQpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5Oih1aW50
MzJfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGZs
b2F0IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25z
dCB1aW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6
KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9u
YXJ5OihHUEJVSW50MzJGbG9hdERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0
eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgZmxvYXQgW10pdmFsdWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lO
SVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDMy
RmxvYXREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENh
cGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZhbHVlRm9yS2V5Oih1aW50
MzJfdClrZXkgdmFsdWU6KG51bGxhYmxlIGZsb2F0ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVy
YXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKHVpbnQzMl90IGtleSwg
ZmxvYXQgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9t
RGljdGlvbmFyeTooR1BCVUludDMyRmxvYXREaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5Owot
Ci0tICh2b2lkKXNldFZhbHVlOihmbG9hdCl2YWx1ZSBmb3JLZXk6KHVpbnQzMl90KWtleTsKLQot
LSAodm9pZClyZW1vdmVWYWx1ZUZvcktleToodWludDMyX3QpYUtleTsKLS0gKHZvaWQpcmVtb3Zl
QWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJbnQzMiAtPiBEb3VibGUKLQotQGludGVy
ZmFjZSBHUEJVSW50MzJEb3VibGVEaWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQot
QHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFs
dWU6KGRvdWJsZSl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KHVp
bnQzMl90KWtleTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3Qg
ZG91YmxlIFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihj
b25zdCB1aW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0
aW9uYXJ5OihHUEJVSW50MzJEb3VibGVEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGRvdWJsZSBbXSl2YWx1ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDMyX3QgW10pa2V5cwotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFU
RURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJV
SW50MzJEb3VibGVEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZhbHVlRm9yS2V5
Oih1aW50MzJfdClrZXkgdmFsdWU6KG51bGxhYmxlIGRvdWJsZSAqKXZhbHVlOwotCi0tICh2b2lk
KWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50MzJf
dCBrZXksIGRvdWJsZSB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkRW50
cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50MzJEb3VibGVEaWN0aW9uYXJ5ICopb3RoZXJEaWN0
aW9uYXJ5OwotCi0tICh2b2lkKXNldFZhbHVlOihkb3VibGUpdmFsdWUgZm9yS2V5Oih1aW50MzJf
dClrZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KHVpbnQzMl90KWFLZXk7Ci0tICh2
b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50MzIgLT4gRW51bQot
Ci1AaW50ZXJmYWNlIEdQQlVJbnQzMkVudW1EaWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29weWlu
Zz4KLQotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci1A
cHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgR1BCRW51bVZhbGlkYXRpb25GdW5jIHZhbGlk
YXRpb25GdW5jOwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlk
YXRpb25GdW5jKWZ1bmM7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxpZGF0aW9u
RnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWU6KGludDMyX3QpcmF3VmFsdWUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleToodWludDMy
X3Qpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9u
OihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1
aW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhEaWN0aW9uYXJ5OihHUEJVSW50MzJFbnVtRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQ
QkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25G
dW5jKWZ1bmM7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51
bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByYXdWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlcilj
b3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
RGljdGlvbmFyeTooR1BCVUludDMyRW51bURpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFs
aWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFj
aXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0vLyBUaGVzZSB3aWxsIHJldHVybiBrR1BCVW5y
ZWNvZ25pemVkRW51bWVyYXRvclZhbHVlIGlmIHRoZSB2YWx1ZSBmb3IgdGhlIGtleQotLy8gaXMg
bm90IGEgdmFsaWQgZW51bWVyYXRvciBhcyBkZWZpbmVkIGJ5IHZhbGlkYXRpb25GdW5jLiBJZiB0
aGUgYWN0dWFsIHZhbHVlIGlzCi0vLyBkZXNpcmVkLCB1c2UgInJhdyIgdmVyc2lvbiBvZiB0aGUg
bWV0aG9kLgotCi0tIChCT09MKXZhbHVlRm9yS2V5Oih1aW50MzJfdClrZXkgdmFsdWU6KG51bGxh
YmxlIGludDMyX3QgKil2YWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNp
bmdCbG9jazoKLSAgICAodm9pZCAoXikodWludDMyX3Qga2V5LCBpbnQzMl90IHZhbHVlLCBCT09M
ICpzdG9wKSlibG9jazsKLQotLy8gVGhlc2UgbWV0aG9kcyBieXBhc3MgdGhlIHZhbGlkYXRpb25G
dW5jIHRvIHByb3ZpZGUgYWNjZXNzIHRvIHZhbHVlcyB0aGF0IHdlcmUgbm90Ci0vLyBrbm93biBh
dCB0aGUgdGltZSB0aGUgYmluYXJ5IHdhcyBjb21waWxlZC4KLQotLSAoQk9PTCl2YWx1ZUZvcktl
eToodWludDMyX3Qpa2V5IHJhd1ZhbHVlOihudWxsYWJsZSBpbnQzMl90ICopcmF3VmFsdWU7Ci0K
LS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFJhd1ZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQg
KF4pKHVpbnQzMl90IGtleSwgaW50MzJfdCByYXdWYWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0K
LS0gKHZvaWQpYWRkUmF3RW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50MzJFbnVtRGljdGlv
bmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQotLy8gSWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgZW51
bWVyYXRvciBhcyBkZWZpbmVkIGJ5IHZhbGlkYXRpb25GdW5jLCB0aGVzZQotLy8gbWV0aG9kcyB3
aWxsIGFzc2VydCBpbiBkZWJ1ZywgYW5kIHdpbGwgbG9nIGluIHJlbGVhc2UgYW5kIGFzc2lnbiB0
aGUgdmFsdWUKLS8vIHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBVc2UgdGhlIHJhd1ZhbHVlIG1ldGhv
ZHMgYmVsb3cgdG8gYXNzaWduIG5vbiBlbnVtZXJhdG9yCi0vLyB2YWx1ZXMuCi0KLS0gKHZvaWQp
c2V0VmFsdWU6KGludDMyX3QpdmFsdWUgZm9yS2V5Oih1aW50MzJfdClrZXk7Ci0KLS8vIFRoaXMg
bWV0aG9kIGJ5cGFzcyB0aGUgdmFsaWRhdGlvbkZ1bmMgdG8gcHJvdmlkZSBzZXR0aW5nIG9mIHZh
bHVlcyB0aGF0IHdlcmUgbm90Ci0vLyBrbm93biBhdCB0aGUgdGltZSB0aGUgYmluYXJ5IHdhcyBj
b21waWxlZC4KLS0gKHZvaWQpc2V0UmF3VmFsdWU6KGludDMyX3QpcmF3VmFsdWUgZm9yS2V5Oih1
aW50MzJfdClrZXk7Ci0KLS8vIE5vIHZhbGlkYXRpb24gYXBwbGllcyB0byB0aGVzZSBtZXRob2Rz
LgotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5Oih1aW50MzJfdClhS2V5OwotLSAodm9pZCly
ZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gVUludDMyIC0+IE9iamVjdAotCi1A
aW50ZXJmYWNlIEdQQlVJbnQzMk9iamVjdERpY3Rpb25hcnk8X19jb3ZhcmlhbnQgT2JqZWN0VHlw
ZT4gOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25s
eSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhPYmplY3Q6KE9iamVjdFR5cGUpb2JqZWN0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KHVpbnQzMl90KWtleTsKLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5V2l0aE9iamVjdHM6KGNvbnN0IE9iamVjdFR5cGUgR1BCX1VOU0FG
RV9VTlJFVEFJTkVEIFtdKW9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFy
eVdpdGhEaWN0aW9uYXJ5OihHUEJVSW50MzJPYmplY3REaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsK
LSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0
ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhPYmplY3RzOihjb25zdCBPYmplY3RUeXBl
IEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBbXSlvYmplY3RzCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXlzOihjb25zdCB1aW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJVSW50MzJPYmplY3REaWN0aW9u
YXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJ
bnRlZ2VyKW51bUl0ZW1zOwotCi0tIChPYmplY3RUeXBlKW9iamVjdEZvcktleToodWludDMyX3Qp
a2V5OwotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazoKLSAgICAo
dm9pZCAoXikodWludDMyX3Qga2V5LCBPYmplY3RUeXBlIG9iamVjdCwgQk9PTCAqc3RvcCkpYmxv
Y2s7Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50MzJPYmplY3RE
aWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5OwotCi0tICh2b2lkKXNldE9iamVjdDooT2JqZWN0
VHlwZSlvYmplY3QgZm9yS2V5Oih1aW50MzJfdClrZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlT2JqZWN0
Rm9yS2V5Oih1aW50MzJfdClhS2V5OwotLSAodm9pZClyZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3By
YWdtYSBtYXJrIC0gSW50MzIgLT4gVUludDMyCi0KLUBpbnRlcmZhY2UgR1BCSW50MzJVSW50MzJE
aWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5
OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVpbnQzMl90KXZhbHVlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooaW50MzJfdClrZXk7Ci0rIChpbnN0
YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQzMl90IFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQzMl90IFtdKWtl
eXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3Vu
dDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDMyVUlu
dDMyRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoVmFsdWVzOihjb25zdCB1aW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQkludDMyVUludDMyRGljdGlvbmFy
eSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50
ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50MzJfdClrZXkgdmFsdWU6
KG51bGxhYmxlIHVpbnQzMl90ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZh
bHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKGludDMyX3Qga2V5LCB1aW50MzJfdCB2YWx1
ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5
OihHUEJJbnQzMlVJbnQzMkRpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQp
c2V0VmFsdWU6KHVpbnQzMl90KXZhbHVlIGZvcktleTooaW50MzJfdClrZXk7Ci0KLS0gKHZvaWQp
cmVtb3ZlVmFsdWVGb3JLZXk6KGludDMyX3QpYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxsOwotCi1A
ZW5kCi0KLSNwcmFnbWEgbWFyayAtIEludDMyIC0+IEludDMyCi0KLUBpbnRlcmZhY2UgR1BCSW50
MzJJbnQzMkRpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9u
YXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooaW50MzJfdCl2
YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KGludDMyX3Qpa2V5Owot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZh
bHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQzMl90
IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdl
ciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQklu
dDMySW50MzJEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9u
YXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleXM6KGNvbnN0IGludDMyX3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJJbnQzMkludDMyRGljdGlv
bmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50MzJfdClrZXkgdmFs
dWU6KG51bGxhYmxlIGludDMyX3QgKil2YWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5k
VmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoaW50MzJfdCBrZXksIGludDMyX3QgdmFs
dWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFy
eTooR1BCSW50MzJJbnQzMkRpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQp
c2V0VmFsdWU6KGludDMyX3QpdmFsdWUgZm9yS2V5OihpbnQzMl90KWtleTsKLQotLSAodm9pZCly
ZW1vdmVWYWx1ZUZvcktleTooaW50MzJfdClhS2V5OwotLSAodm9pZClyZW1vdmVBbGw7Ci0KLUBl
bmQKLQotI3ByYWdtYSBtYXJrIC0gSW50MzIgLT4gVUludDY0Ci0KLUBpbnRlcmZhY2UgR1BCSW50
MzJVSW50NjREaWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlk
aWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVpbnQ2NF90
KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooaW50MzJfdClrZXk7
Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtd
KXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQz
Ml90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50
ZWdlciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQ
QkludDMyVUludDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCB1aW50NjRfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFM
SVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQkludDMyVUludDY0
RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0
eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50MzJfdClr
ZXkgdmFsdWU6KG51bGxhYmxlIHVpbnQ2NF90ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRl
S2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKGludDMyX3Qga2V5LCB1aW50
NjRfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21E
aWN0aW9uYXJ5OihHUEJJbnQzMlVJbnQ2NERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0K
LS0gKHZvaWQpc2V0VmFsdWU6KHVpbnQ2NF90KXZhbHVlIGZvcktleTooaW50MzJfdClrZXk7Ci0K
LS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KGludDMyX3QpYUtleTsKLS0gKHZvaWQpcmVtb3Zl
QWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEludDMyIC0+IEludDY0Ci0KLUBpbnRlcmZh
Y2UgR1BCSW50MzJJbnQ2NERpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJv
cGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFu
Y2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZToo
aW50NjRfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KGludDMy
X3Qpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBpbnQ2
NF90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25z
dCBpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoo
TlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25h
cnk6KEdQQkludDMySW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGludDY0X3QgW10pdmFsdWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IGludDMyX3QgW10pa2V5cwotICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5J
VElBTElaRVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJJbnQzMklu
dDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBh
Y2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50MzJf
dClrZXkgdmFsdWU6KG51bGxhYmxlIGludDY0X3QgKil2YWx1ZTsKLQotLSAodm9pZCllbnVtZXJh
dGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoaW50MzJfdCBrZXksIGlu
dDY0X3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9t
RGljdGlvbmFyeTooR1BCSW50MzJJbnQ2NERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0K
LS0gKHZvaWQpc2V0VmFsdWU6KGludDY0X3QpdmFsdWUgZm9yS2V5OihpbnQzMl90KWtleTsKLQot
LSAodm9pZClyZW1vdmVWYWx1ZUZvcktleTooaW50MzJfdClhS2V5OwotLSAodm9pZClyZW1vdmVB
bGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gSW50MzIgLT4gQm9vbAotCi1AaW50ZXJmYWNl
IEdQQkludDMyQm9vbERpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFuY2V0
eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooQk9P
TCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KGludDMyX3Qpa2V5
OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBCT09MIFtdKXZh
bHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQzMl90
IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdl
ciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQklu
dDMyQm9vbERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFZhbHVlczooY29uc3QgQk9PTCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQkludDMyQm9vbERpY3Rpb25hcnkg
KilkaWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVn
ZXIpbnVtSXRlbXM7Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KGludDMyX3Qpa2V5IHZhbHVlOihu
dWxsYWJsZSBCT09MICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1Vz
aW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKGludDMyX3Qga2V5LCBCT09MIHZhbHVlLCBCT09MICpz
dG9wKSlibG9jazsKLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkludDMy
Qm9vbERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KEJP
T0wpdmFsdWUgZm9yS2V5OihpbnQzMl90KWtleTsKLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktl
eTooaW50MzJfdClhS2V5OwotLSAodm9pZClyZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBt
YXJrIC0gSW50MzIgLT4gRmxvYXQKLQotQGludGVyZmFjZSBHUEJJbnQzMkZsb2F0RGljdGlvbmFy
eSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5
KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihmbG9hdCl2YWx1ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JLZXk6KGludDMyX3Qpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBmbG9hdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJJbnQzMkZsb2F0RGljdGlvbmFyeSAq
KWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25z
dCBmbG9hdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3Qg
aW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVn
ZXIpY291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aERpY3Rpb25hcnk6KEdQQkludDMyRmxvYXREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0t
IChCT09MKXZhbHVlRm9yS2V5OihpbnQzMl90KWtleSB2YWx1ZToobnVsbGFibGUgZmxvYXQgKil2
YWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAo
dm9pZCAoXikoaW50MzJfdCBrZXksIGZsb2F0IHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQot
LSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkludDMyRmxvYXREaWN0aW9uYXJ5
ICopb3RoZXJEaWN0aW9uYXJ5OwotCi0tICh2b2lkKXNldFZhbHVlOihmbG9hdCl2YWx1ZSBmb3JL
ZXk6KGludDMyX3Qpa2V5OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihpbnQzMl90KWFL
ZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBJbnQzMiAt
PiBEb3VibGUKLQotQGludGVyZmFjZSBHUEJJbnQzMkRvdWJsZURpY3Rpb25hcnkgOiBOU09iamVj
dCA8TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdl
ciBjb3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhWYWx1ZTooZG91YmxlKXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleTooaW50MzJfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhWYWx1ZXM6KGNvbnN0IGRvdWJsZSBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yS2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJJbnQzMkRvdWJsZURpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIp
bnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgZG91Ymxl
IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQzMl90
IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3Vu
dCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlj
dGlvbmFyeTooR1BCSW50MzJEb3VibGVEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09M
KXZhbHVlRm9yS2V5OihpbnQzMl90KWtleSB2YWx1ZToobnVsbGFibGUgZG91YmxlICopdmFsdWU7
Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQg
KF4pKGludDMyX3Qga2V5LCBkb3VibGUgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2
b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCSW50MzJEb3VibGVEaWN0aW9uYXJ5ICop
b3RoZXJEaWN0aW9uYXJ5OwotCi0tICh2b2lkKXNldFZhbHVlOihkb3VibGUpdmFsdWUgZm9yS2V5
OihpbnQzMl90KWtleTsKLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleTooaW50MzJfdClhS2V5
OwotLSAodm9pZClyZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gSW50MzIgLT4g
RW51bQotCi1AaW50ZXJmYWNlIEdQQkludDMyRW51bURpY3Rpb25hcnkgOiBOU09iamVjdCA8TlND
b3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3Vu
dDsKLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMg
dmFsaWRhdGlvbkZ1bmM7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFu
Y2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVt
VmFsaWRhdGlvbkZ1bmMpZnVuYzsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlk
YXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZTooaW50MzJfdClyYXdW
YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5Oihp
bnQzMl90KWtleTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5j
dGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1
ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29u
c3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFy
eVdpdGhEaWN0aW9uYXJ5OihHUEJJbnQzMkVudW1EaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsg
KGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUg
R1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlv
bkZ1bmMpZnVuYzsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoo
bnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJhd1ZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIp
Y291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aERpY3Rpb25hcnk6KEdQQkludDMyRW51bURpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFs
aWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFj
aXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0vLyBUaGVzZSB3aWxsIHJldHVybiBrR1BCVW5y
ZWNvZ25pemVkRW51bWVyYXRvclZhbHVlIGlmIHRoZSB2YWx1ZSBmb3IgdGhlIGtleQotLy8gaXMg
bm90IGEgdmFsaWQgZW51bWVyYXRvciBhcyBkZWZpbmVkIGJ5IHZhbGlkYXRpb25GdW5jLiBJZiB0
aGUgYWN0dWFsIHZhbHVlIGlzCi0vLyBkZXNpcmVkLCB1c2UgInJhdyIgdmVyc2lvbiBvZiB0aGUg
bWV0aG9kLgotCi0tIChCT09MKXZhbHVlRm9yS2V5OihpbnQzMl90KWtleSB2YWx1ZToobnVsbGFi
bGUgaW50MzJfdCAqKXZhbHVlOwotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2lu
Z0Jsb2NrOgotICAgICh2b2lkICheKShpbnQzMl90IGtleSwgaW50MzJfdCB2YWx1ZSwgQk9PTCAq
c3RvcCkpYmxvY2s7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgYnlwYXNzIHRoZSB2YWxpZGF0aW9uRnVu
YyB0byBwcm92aWRlIGFjY2VzcyB0byB2YWx1ZXMgdGhhdCB3ZXJlIG5vdAotLy8ga25vd24gYXQg
dGhlIHRpbWUgdGhlIGJpbmFyeSB3YXMgY29tcGlsZWQuCi0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6
KGludDMyX3Qpa2V5IHJhd1ZhbHVlOihudWxsYWJsZSBpbnQzMl90ICopcmF3VmFsdWU7Ci0KLS0g
KHZvaWQpZW51bWVyYXRlS2V5c0FuZFJhd1ZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4p
KGludDMyX3Qga2V5LCBpbnQzMl90IHJhd1ZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQotLSAo
dm9pZClhZGRSYXdFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkludDMyRW51bURpY3Rpb25hcnkg
KilvdGhlckRpY3Rpb25hcnk7Ci0KLS8vIElmIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGVudW1lcmF0
b3IgYXMgZGVmaW5lZCBieSB2YWxpZGF0aW9uRnVuYywgdGhlc2UKLS8vIG1ldGhvZHMgd2lsbCBh
c3NlcnQgaW4gZGVidWcsIGFuZCB3aWxsIGxvZyBpbiByZWxlYXNlIGFuZCBhc3NpZ24gdGhlIHZh
bHVlCi0vLyB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHRoZSByYXdWYWx1ZSBtZXRob2RzIGJl
bG93IHRvIGFzc2lnbiBub24gZW51bWVyYXRvcgotLy8gdmFsdWVzLgotCi0tICh2b2lkKXNldFZh
bHVlOihpbnQzMl90KXZhbHVlIGZvcktleTooaW50MzJfdClrZXk7Ci0KLS8vIFRoaXMgbWV0aG9k
IGJ5cGFzcyB0aGUgdmFsaWRhdGlvbkZ1bmMgdG8gcHJvdmlkZSBzZXR0aW5nIG9mIHZhbHVlcyB0
aGF0IHdlcmUgbm90Ci0vLyBrbm93biBhdCB0aGUgdGltZSB0aGUgYmluYXJ5IHdhcyBjb21waWxl
ZC4KLS0gKHZvaWQpc2V0UmF3VmFsdWU6KGludDMyX3QpcmF3VmFsdWUgZm9yS2V5OihpbnQzMl90
KWtleTsKLQotLy8gTm8gdmFsaWRhdGlvbiBhcHBsaWVzIHRvIHRoZXNlIG1ldGhvZHMuCi0KLS0g
KHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KGludDMyX3QpYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxs
OwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEludDMyIC0+IE9iamVjdAotCi1AaW50ZXJmYWNl
IEdQQkludDMyT2JqZWN0RGljdGlvbmFyeTxfX2NvdmFyaWFudCBPYmplY3RUeXBlPiA6IE5TT2Jq
ZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRl
Z2VyIGNvdW50OwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aE9iamVjdDooT2JqZWN0VHlwZSlvYmplY3QKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleTooaW50MzJfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhPYmplY3RzOihjb25zdCBPYmplY3RUeXBlIEdQQl9VTlNBRkVfVU5SRVRBSU5F
RCBbXSlvYmplY3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25z
dCBpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6
KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9u
YXJ5OihHUEJJbnQzMk9iamVjdERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0
eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE9iamVjdHM6KGNvbnN0IE9iamVjdFR5cGUgR1BCX1VOU0FGRV9V
TlJFVEFJTkVEIFtdKW9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNv
bnN0IGludDMyX3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNV
SW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRGljdGlvbmFyeTooR1BCSW50MzJPYmplY3REaWN0aW9uYXJ5ICopZGljdGlvbmFy
eTsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1z
OwotCi0tIChPYmplY3RUeXBlKW9iamVjdEZvcktleTooaW50MzJfdClrZXk7Ci0KLS0gKHZvaWQp
ZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShpbnQzMl90
IGtleSwgT2JqZWN0VHlwZSBvYmplY3QsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFk
ZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCSW50MzJPYmplY3REaWN0aW9uYXJ5ICopb3RoZXJE
aWN0aW9uYXJ5OwotCi0tICh2b2lkKXNldE9iamVjdDooT2JqZWN0VHlwZSlvYmplY3QgZm9yS2V5
OihpbnQzMl90KWtleTsKLQotLSAodm9pZClyZW1vdmVPYmplY3RGb3JLZXk6KGludDMyX3QpYUtl
eTsKLS0gKHZvaWQpcmVtb3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJbnQ2NCAt
PiBVSW50MzIKLQotQGludGVyZmFjZSBHUEJVSW50NjRVSW50MzJEaWN0aW9uYXJ5IDogTlNPYmpl
Y3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVn
ZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBl
KWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVpbnQzMl90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleToodWludDY0X3Qpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoVmFsdWVzOihjb25zdCB1aW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10pa2V5cwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0
eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCVUludDY0VUludDMyRGljdGlvbmFyeSAq
KWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25z
dCB1aW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29u
c3QgdWludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJ
bnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJVSW50NjRVSW50MzJEaWN0aW9uYXJ5ICopZGljdGlvbmFy
eTsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1z
OwotCi0tIChCT09MKXZhbHVlRm9yS2V5Oih1aW50NjRfdClrZXkgdmFsdWU6KG51bGxhYmxlIHVp
bnQzMl90ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxv
Y2s6Ci0gICAgKHZvaWQgKF4pKHVpbnQ2NF90IGtleSwgdWludDMyX3QgdmFsdWUsIEJPT0wgKnN0
b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCVUludDY0
VUludDMyRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQotLSAodm9pZClzZXRWYWx1ZToo
dWludDMyX3QpdmFsdWUgZm9yS2V5Oih1aW50NjRfdClrZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFs
dWVGb3JLZXk6KHVpbnQ2NF90KWFLZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0j
cHJhZ21hIG1hcmsgLSBVSW50NjQgLT4gSW50MzIKLQotQGludGVyZmFjZSBHUEJVSW50NjRJbnQz
MkRpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWlj
LCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooaW50MzJfdCl2YWx1ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KHVpbnQ2NF90KWtleTsKLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10p
a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNv
dW50OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCVUludDY0
SW50MzJEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5
V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAg
ICAgIGZvcktleXM6KGNvbnN0IHVpbnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDY0SW50MzJEaWN0aW9u
YXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJ
bnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZhbHVlRm9yS2V5Oih1aW50NjRfdClrZXkgdmFs
dWU6KG51bGxhYmxlIGludDMyX3QgKil2YWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5k
VmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikodWludDY0X3Qga2V5LCBpbnQzMl90IHZh
bHVlLCBCT09MICpzdG9wKSlibG9jazsKLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25h
cnk6KEdQQlVJbnQ2NEludDMyRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQotLSAodm9p
ZClzZXRWYWx1ZTooaW50MzJfdCl2YWx1ZSBmb3JLZXk6KHVpbnQ2NF90KWtleTsKLQotLSAodm9p
ZClyZW1vdmVWYWx1ZUZvcktleToodWludDY0X3QpYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxsOwot
Ci1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJbnQ2NCAtPiBVSW50NjQKLQotQGludGVyZmFjZSBH
UEJVSW50NjRVSW50NjREaWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3Bl
cnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVp
bnQ2NF90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleToodWludDY0
X3Qpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCB1aW50
NjRfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29u
c3QgdWludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlv
bmFyeTooR1BCVUludDY0VUludDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCB1aW50NjRfdCBbXSl2YWx1ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10pa2V5cwotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFU
RURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJV
SW50NjRVSW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZhbHVlRm9yS2V5
Oih1aW50NjRfdClrZXkgdmFsdWU6KG51bGxhYmxlIHVpbnQ2NF90ICopdmFsdWU7Ci0KLS0gKHZv
aWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKHVpbnQ2
NF90IGtleSwgdWludDY0X3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFk
ZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCVUludDY0VUludDY0RGljdGlvbmFyeSAqKW90aGVy
RGljdGlvbmFyeTsKLQotLSAodm9pZClzZXRWYWx1ZToodWludDY0X3QpdmFsdWUgZm9yS2V5Oih1
aW50NjRfdClrZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KHVpbnQ2NF90KWFLZXk7
Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50NjQgLT4g
SW50NjQKLQotQGludGVyZmFjZSBHUEJVSW50NjRJbnQ2NERpY3Rpb25hcnkgOiBOU09iamVjdCA8
TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBj
b3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhWYWx1ZTooaW50NjRfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JLZXk6KHVpbnQ2NF90KWtleTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aFZhbHVlczooY29uc3QgaW50NjRfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCVUludDY0SW50NjREaWN0aW9uYXJ5ICopZGljdGlv
bmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2Vy
KW51bUl0ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGludDY0
X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQ2
NF90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlcilj
b3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
RGljdGlvbmFyeTooR1BCVUludDY0SW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChC
T09MKXZhbHVlRm9yS2V5Oih1aW50NjRfdClrZXkgdmFsdWU6KG51bGxhYmxlIGludDY0X3QgKil2
YWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAo
dm9pZCAoXikodWludDY0X3Qga2V5LCBpbnQ2NF90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsK
LQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQlVJbnQ2NEludDY0RGljdGlv
bmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQotLSAodm9pZClzZXRWYWx1ZTooaW50NjRfdCl2YWx1
ZSBmb3JLZXk6KHVpbnQ2NF90KWtleTsKLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleToodWlu
dDY0X3QpYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAt
IFVJbnQ2NCAtPiBCb29sCi0KLUBpbnRlcmZhY2UgR1BCVUludDY0Qm9vbERpY3Rpb25hcnkgOiBO
U09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNV
SW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooQk9PTCl2YWx1ZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JLZXk6KHVpbnQ2NF90KWtleTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9u
YXJ5V2l0aFZhbHVlczooY29uc3QgQk9PTCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBl
KWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCVUludDY0Qm9vbERpY3Rpb25hcnkgKilkaWN0
aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVn
ZXIpbnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgQk9P
TCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0
X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNv
dW50IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhE
aWN0aW9uYXJ5OihHUEJVSW50NjRCb29sRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoQk9P
TCl2YWx1ZUZvcktleToodWludDY0X3Qpa2V5IHZhbHVlOihudWxsYWJsZSBCT09MICopdmFsdWU7
Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQg
KF4pKHVpbnQ2NF90IGtleSwgQk9PTCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZv
aWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50NjRCb29sRGljdGlvbmFyeSAqKW90
aGVyRGljdGlvbmFyeTsKLQotLSAodm9pZClzZXRWYWx1ZTooQk9PTCl2YWx1ZSBmb3JLZXk6KHVp
bnQ2NF90KWtleTsKLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleToodWludDY0X3QpYUtleTsK
LS0gKHZvaWQpcmVtb3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJbnQ2NCAtPiBG
bG9hdAotCi1AaW50ZXJmYWNlIEdQQlVJbnQ2NEZsb2F0RGljdGlvbmFyeSA6IE5TT2JqZWN0IDxO
U0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNv
dW50OwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0
aW9uYXJ5V2l0aFZhbHVlOihmbG9hdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXk6KHVpbnQ2NF90KWtleTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZh
bHVlczooY29uc3QgZmxvYXQgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcktleXM6KGNvbnN0IHVpbnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9u
YXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2NEZsb2F0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7
Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1J
dGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBmbG9hdCBbXSl2
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10p
a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IE5T
X0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9u
YXJ5OihHUEJVSW50NjRGbG9hdERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKEJPT0wpdmFs
dWVGb3JLZXk6KHVpbnQ2NF90KWtleSB2YWx1ZToobnVsbGFibGUgZmxvYXQgKil2YWx1ZTsKLQot
LSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXiko
dWludDY0X3Qga2V5LCBmbG9hdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQp
YWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50NjRGbG9hdERpY3Rpb25hcnkgKilvdGhl
ckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGZsb2F0KXZhbHVlIGZvcktleToodWlu
dDY0X3Qpa2V5OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5Oih1aW50NjRfdClhS2V5Owot
LSAodm9pZClyZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gVUludDY0IC0+IERv
dWJsZQotCi1AaW50ZXJmYWNlIEdQQlVJbnQ2NERvdWJsZURpY3Rpb25hcnkgOiBOU09iamVjdCA8
TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBj
b3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhWYWx1ZTooZG91YmxlKXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcktleToodWludDY0X3Qpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRo
VmFsdWVzOihjb25zdCBkb3VibGUgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcktleXM6KGNvbnN0IHVpbnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0
aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2NERvdWJsZURpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIp
bnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgZG91Ymxl
IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50NjRf
dCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291
bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERp
Y3Rpb25hcnk6KEdQQlVJbnQ2NERvdWJsZURpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKEJP
T0wpdmFsdWVGb3JLZXk6KHVpbnQ2NF90KWtleSB2YWx1ZToobnVsbGFibGUgZG91YmxlICopdmFs
dWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZv
aWQgKF4pKHVpbnQ2NF90IGtleSwgZG91YmxlIHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQot
LSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQlVJbnQ2NERvdWJsZURpY3Rpb25h
cnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGRvdWJsZSl2YWx1ZSBm
b3JLZXk6KHVpbnQ2NF90KWtleTsKLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleToodWludDY0
X3QpYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJ
bnQ2NCAtPiBFbnVtCi0KLUBpbnRlcmZhY2UgR1BCVUludDY0RW51bURpY3Rpb25hcnkgOiBOU09i
amVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50
ZWdlciBjb3VudDsKLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBHUEJFbnVtVmFsaWRh
dGlvbkZ1bmMgdmFsaWRhdGlvbkZ1bmM7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5Owot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJs
ZSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYzsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5
V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1
bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZTooaW50
MzJfdClyYXdWYWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yS2V5Oih1aW50NjRfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxp
ZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6KGNvbnN0IGludDMy
X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cktleXM6KGNvbnN0IHVpbnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2NEVudW1EaWN0aW9uYXJ5ICopZGlj
dGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlv
bjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJF
bnVtVmFsaWRhdGlvbkZ1bmMpZnVuYzsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbGlkYXRp
b25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1
ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWlu
dDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJVSW50NjRFbnVtRGljdGlvbmFyeSAqKWRpY3Rp
b25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxh
YmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS8vIFRoZXNlIHdpbGwg
cmV0dXJuIGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWUgaWYgdGhlIHZhbHVlIGZvciB0
aGUga2V5Ci0vLyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIGFzIGRlZmluZWQgYnkgdmFsaWRh
dGlvbkZ1bmMuIElmIHRoZSBhY3R1YWwgdmFsdWUgaXMKLS8vIGRlc2lyZWQsIHVzZSAicmF3IiB2
ZXJzaW9uIG9mIHRoZSBtZXRob2QuCi0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KHVpbnQ2NF90KWtl
eSB2YWx1ZToobnVsbGFibGUgaW50MzJfdCAqKXZhbHVlOwotCi0tICh2b2lkKWVudW1lcmF0ZUtl
eXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50NjRfdCBrZXksIGludDMy
X3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0vLyBUaGVzZSBtZXRob2RzIGJ5cGFzcyB0
aGUgdmFsaWRhdGlvbkZ1bmMgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdmFsdWVzIHRoYXQgd2VyZSBu
b3QKLS8vIGtub3duIGF0IHRoZSB0aW1lIHRoZSBiaW5hcnkgd2FzIGNvbXBpbGVkLgotCi0tIChC
T09MKXZhbHVlRm9yS2V5Oih1aW50NjRfdClrZXkgcmF3VmFsdWU6KG51bGxhYmxlIGludDMyX3Qg
KilyYXdWYWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kUmF3VmFsdWVzVXNpbmdCbG9j
azoKLSAgICAodm9pZCAoXikodWludDY0X3Qga2V5LCBpbnQzMl90IHJhd1ZhbHVlLCBCT09MICpz
dG9wKSlibG9jazsKLQotLSAodm9pZClhZGRSYXdFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQlVJ
bnQ2NEVudW1EaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5OwotCi0vLyBJZiB2YWx1ZSBpcyBu
b3QgYSB2YWxpZCBlbnVtZXJhdG9yIGFzIGRlZmluZWQgYnkgdmFsaWRhdGlvbkZ1bmMsIHRoZXNl
Ci0vLyBtZXRob2RzIHdpbGwgYXNzZXJ0IGluIGRlYnVnLCBhbmQgd2lsbCBsb2cgaW4gcmVsZWFz
ZSBhbmQgYXNzaWduIHRoZSB2YWx1ZQotLy8gdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB0aGUg
cmF3VmFsdWUgbWV0aG9kcyBiZWxvdyB0byBhc3NpZ24gbm9uIGVudW1lcmF0b3IKLS8vIHZhbHVl
cy4KLQotLSAodm9pZClzZXRWYWx1ZTooaW50MzJfdCl2YWx1ZSBmb3JLZXk6KHVpbnQ2NF90KWtl
eTsKLQotLy8gVGhpcyBtZXRob2QgYnlwYXNzIHRoZSB2YWxpZGF0aW9uRnVuYyB0byBwcm92aWRl
IHNldHRpbmcgb2YgdmFsdWVzIHRoYXQgd2VyZSBub3QKLS8vIGtub3duIGF0IHRoZSB0aW1lIHRo
ZSBiaW5hcnkgd2FzIGNvbXBpbGVkLgotLSAodm9pZClzZXRSYXdWYWx1ZTooaW50MzJfdClyYXdW
YWx1ZSBmb3JLZXk6KHVpbnQ2NF90KWtleTsKLQotLy8gTm8gdmFsaWRhdGlvbiBhcHBsaWVzIHRv
IHRoZXNlIG1ldGhvZHMuCi0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KHVpbnQ2NF90KWFL
ZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50NjQg
LT4gT2JqZWN0Ci0KLUBpbnRlcmZhY2UgR1BCVUludDY0T2JqZWN0RGljdGlvbmFyeTxfX2NvdmFy
aWFudCBPYmplY3RUeXBlPiA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25h
dG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aE9iamVjdDooT2JqZWN0VHlw
ZSlvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleToodWludDY0X3Qp
a2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoT2JqZWN0czooY29uc3QgT2JqZWN0
VHlwZSBHUEJfVU5TQUZFX1VOUkVUQUlORUQgW10pb2JqZWN0cwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10pa2V5cwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2NE9iamVjdERpY3Rpb25hcnkg
KilkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5T
VUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9iamVjdHM6KGNv
bnN0IE9iamVjdFR5cGUgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIFtdKW9iamVjdHMKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQ2NF90IFtdKWtleXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdOQVRFRF9J
TklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2
NE9iamVjdERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKE9iamVjdFR5cGUpb2JqZWN0Rm9y
S2V5Oih1aW50NjRfdClrZXk7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2lu
Z0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50NjRfdCBrZXksIE9iamVjdFR5cGUgb2JqZWN0LCBC
T09MICpzdG9wKSlibG9jazsKLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQ
QlVJbnQ2NE9iamVjdERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0
T2JqZWN0OihPYmplY3RUeXBlKW9iamVjdCBmb3JLZXk6KHVpbnQ2NF90KWtleTsKLQotLSAodm9p
ZClyZW1vdmVPYmplY3RGb3JLZXk6KHVpbnQ2NF90KWFLZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsK
LQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBJbnQ2NCAtPiBVSW50MzIKLQotQGludGVyZmFjZSBH
UEJJbnQ2NFVJbnQzMkRpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFuY2V0
eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZToodWlu
dDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihpbnQ2NF90
KWtleTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgdWludDMy
X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0
IGludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihO
U1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFy
eTooR1BCSW50NjRVSW50MzJEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQzMl90IFtdKXZhbHVlcwotICAgICAg
ICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtleXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lO
SVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCSW50NjRV
SW50MzJEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENh
cGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZhbHVlRm9yS2V5OihpbnQ2
NF90KWtleSB2YWx1ZToobnVsbGFibGUgdWludDMyX3QgKil2YWx1ZTsKLQotLSAodm9pZCllbnVt
ZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoaW50NjRfdCBrZXks
IHVpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQotLSAodm9pZClhZGRFbnRyaWVz
RnJvbURpY3Rpb25hcnk6KEdQQkludDY0VUludDMyRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFy
eTsKLQotLSAodm9pZClzZXRWYWx1ZToodWludDMyX3QpdmFsdWUgZm9yS2V5OihpbnQ2NF90KWtl
eTsKLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleTooaW50NjRfdClhS2V5OwotLSAodm9pZCly
ZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gSW50NjQgLT4gSW50MzIKLQotQGlu
dGVyZmFjZSBHUEJJbnQ2NEludDMyRGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0K
LUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZh
bHVlOihpbnQzMl90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleToo
aW50NjRfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0
IGludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6
KGNvbnN0IGludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGlj
dGlvbmFyeTooR1BCSW50NjRJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotKyAoaW5zdGFu
Y2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50NjRfdCBbXSlrZXlzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdOQVRF
RF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQklu
dDY0SW50MzJEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZhbHVlRm9yS2V5Oihp
bnQ2NF90KWtleSB2YWx1ZToobnVsbGFibGUgaW50MzJfdCAqKXZhbHVlOwotCi0tICh2b2lkKWVu
dW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShpbnQ2NF90IGtl
eSwgaW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkRW50cmll
c0Zyb21EaWN0aW9uYXJ5OihHUEJJbnQ2NEludDMyRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFy
eTsKLQotLSAodm9pZClzZXRWYWx1ZTooaW50MzJfdCl2YWx1ZSBmb3JLZXk6KGludDY0X3Qpa2V5
OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihpbnQ2NF90KWFLZXk7Ci0tICh2b2lkKXJl
bW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBJbnQ2NCAtPiBVSW50NjQKLQotQGlu
dGVyZmFjZSBHUEJJbnQ2NFVJbnQ2NERpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgot
Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAo
aW5zdGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhW
YWx1ZToodWludDY0X3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5
OihpbnQ2NF90KWtleTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29u
c3QgdWludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eXM6KGNvbnN0IGludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRo
RGljdGlvbmFyeTooR1BCSW50NjRVSW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtdKXZhbHVl
cwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtleXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJ
R05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeToo
R1BCSW50NjRVSW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZhbHVlRm9y
S2V5OihpbnQ2NF90KWtleSB2YWx1ZToobnVsbGFibGUgdWludDY0X3QgKil2YWx1ZTsKLQotLSAo
dm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoaW50
NjRfdCBrZXksIHVpbnQ2NF90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQotLSAodm9pZClh
ZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkludDY0VUludDY0RGljdGlvbmFyeSAqKW90aGVy
RGljdGlvbmFyeTsKLQotLSAodm9pZClzZXRWYWx1ZToodWludDY0X3QpdmFsdWUgZm9yS2V5Oihp
bnQ2NF90KWtleTsKLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleTooaW50NjRfdClhS2V5Owot
LSAodm9pZClyZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gSW50NjQgLT4gSW50
NjQKLQotQGludGVyZmFjZSBHUEJJbnQ2NEludDY0RGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0Nv
cHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50
OwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9u
YXJ5V2l0aFZhbHVlOihpbnQ2NF90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcktleTooaW50NjRfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1
ZXM6KGNvbnN0IGludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcktleXM6KGNvbnN0IGludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoRGljdGlvbmFyeTooR1BCSW50NjRJbnQ2NERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5Owot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRl
bXM7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgaW50NjRfdCBbXSl2
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50NjRfdCBbXSlr
ZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNf
REVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25h
cnk6KEdQQkludDY0SW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZhbHVl
Rm9yS2V5OihpbnQ2NF90KWtleSB2YWx1ZToobnVsbGFibGUgaW50NjRfdCAqKXZhbHVlOwotCi0t
ICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShp
bnQ2NF90IGtleSwgaW50NjRfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQp
YWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJJbnQ2NEludDY0RGljdGlvbmFyeSAqKW90aGVy
RGljdGlvbmFyeTsKLQotLSAodm9pZClzZXRWYWx1ZTooaW50NjRfdCl2YWx1ZSBmb3JLZXk6KGlu
dDY0X3Qpa2V5OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihpbnQ2NF90KWFLZXk7Ci0t
ICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBJbnQ2NCAtPiBCb29s
Ci0KLUBpbnRlcmZhY2UgR1BCSW50NjRCb29sRGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0NvcHlp
bmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50Owot
Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5
V2l0aFZhbHVlOihCT09MKXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eTooaW50NjRfdClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNv
bnN0IEJPT0wgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6
KGNvbnN0IGludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGlj
dGlvbmFyeTooR1BCSW50NjRCb29sRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBCT09MIFtdKXZhbHVlcwotICAgICAg
ICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtleXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lO
SVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCSW50NjRC
b29sRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBh
Y2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50NjRf
dClrZXkgdmFsdWU6KG51bGxhYmxlIEJPT0wgKil2YWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVL
ZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoaW50NjRfdCBrZXksIEJPT0wg
dmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlv
bmFyeTooR1BCSW50NjRCb29sRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQotLSAodm9p
ZClzZXRWYWx1ZTooQk9PTCl2YWx1ZSBmb3JLZXk6KGludDY0X3Qpa2V5OwotCi0tICh2b2lkKXJl
bW92ZVZhbHVlRm9yS2V5OihpbnQ2NF90KWFLZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVu
ZAotCi0jcHJhZ21hIG1hcmsgLSBJbnQ2NCAtPiBGbG9hdAotCi1AaW50ZXJmYWNlIEdQQkludDY0
RmxvYXREaWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5vbmF0
b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0
aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KGZsb2F0KXZhbHVl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooaW50NjRfdClrZXk7Ci0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGZsb2F0IFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtl
eXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3Vu
dDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDY0Rmxv
YXREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhWYWx1ZXM6KGNvbnN0IGZsb2F0IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBm
b3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCSW50NjRGbG9hdERpY3Rpb25hcnkgKilk
aWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIp
bnVtSXRlbXM7Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KGludDY0X3Qpa2V5IHZhbHVlOihudWxs
YWJsZSBmbG9hdCAqKXZhbHVlOwotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2lu
Z0Jsb2NrOgotICAgICh2b2lkICheKShpbnQ2NF90IGtleSwgZmxvYXQgdmFsdWUsIEJPT0wgKnN0
b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCSW50NjRG
bG9hdERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGZs
b2F0KXZhbHVlIGZvcktleTooaW50NjRfdClrZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JL
ZXk6KGludDY0X3QpYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEg
bWFyayAtIEludDY0IC0+IERvdWJsZQotCi1AaW50ZXJmYWNlIEdQQkludDY0RG91YmxlRGljdGlv
bmFyeSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRv
bmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsg
KGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihkb3VibGUpdmFsdWUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihpbnQ2NF90KWtleTsKLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgZG91YmxlIFtdKXZhbHVlcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtleXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDY0RG91YmxlRGljdGlv
bmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0
eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVz
Oihjb25zdCBkb3VibGUgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6
KGNvbnN0IGludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihO
U1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJJbnQ2NERvdWJsZURpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRl
bXM7Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KGludDY0X3Qpa2V5IHZhbHVlOihudWxsYWJsZSBk
b3VibGUgKil2YWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9j
azoKLSAgICAodm9pZCAoXikoaW50NjRfdCBrZXksIGRvdWJsZSB2YWx1ZSwgQk9PTCAqc3RvcCkp
YmxvY2s7Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJJbnQ2NERvdWJs
ZURpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGRvdWJs
ZSl2YWx1ZSBmb3JLZXk6KGludDY0X3Qpa2V5OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5
OihpbnQ2NF90KWFLZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1h
cmsgLSBJbnQ2NCAtPiBFbnVtCi0KLUBpbnRlcmZhY2UgR1BCSW50NjRFbnVtRGljdGlvbmFyeSA6
IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBO
U1VJbnRlZ2VyIGNvdW50OwotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIEdQQkVudW1W
YWxpZGF0aW9uRnVuYyB2YWxpZGF0aW9uRnVuYzsKLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51
bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jOwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rp
b25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1
bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVl
OihpbnQzMl90KXJhd1ZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JLZXk6KGludDY0X3Qpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRo
VmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBp
bnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDY0RW51bURpY3Rpb25hcnkgKilk
aWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0
aW9uOihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQ
QkVudW1WYWxpZGF0aW9uRnVuYylmdW5jOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRh
dGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZh
bHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBp
bnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vu
dDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCSW50NjRFbnVtRGljdGlvbmFyeSAqKWRpY3Rp
b25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxh
YmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS8vIFRoZXNlIHdpbGwg
cmV0dXJuIGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWUgaWYgdGhlIHZhbHVlIGZvciB0
aGUga2V5Ci0vLyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIGFzIGRlZmluZWQgYnkgdmFsaWRh
dGlvbkZ1bmMuIElmIHRoZSBhY3R1YWwgdmFsdWUgaXMKLS8vIGRlc2lyZWQsIHVzZSAicmF3IiB2
ZXJzaW9uIG9mIHRoZSBtZXRob2QuCi0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KGludDY0X3Qpa2V5
IHZhbHVlOihudWxsYWJsZSBpbnQzMl90ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5
c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKGludDY0X3Qga2V5LCBpbnQzMl90
IHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQotLy8gVGhlc2UgbWV0aG9kcyBieXBhc3MgdGhl
IHZhbGlkYXRpb25GdW5jIHRvIHByb3ZpZGUgYWNjZXNzIHRvIHZhbHVlcyB0aGF0IHdlcmUgbm90
Ci0vLyBrbm93biBhdCB0aGUgdGltZSB0aGUgYmluYXJ5IHdhcyBjb21waWxlZC4KLQotLSAoQk9P
TCl2YWx1ZUZvcktleTooaW50NjRfdClrZXkgcmF3VmFsdWU6KG51bGxhYmxlIGludDMyX3QgKily
YXdWYWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kUmF3VmFsdWVzVXNpbmdCbG9jazoK
LSAgICAodm9pZCAoXikoaW50NjRfdCBrZXksIGludDMyX3QgcmF3VmFsdWUsIEJPT0wgKnN0b3Ap
KWJsb2NrOwotCi0tICh2b2lkKWFkZFJhd0VudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCSW50NjRF
bnVtRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQotLy8gSWYgdmFsdWUgaXMgbm90IGEg
dmFsaWQgZW51bWVyYXRvciBhcyBkZWZpbmVkIGJ5IHZhbGlkYXRpb25GdW5jLCB0aGVzZQotLy8g
bWV0aG9kcyB3aWxsIGFzc2VydCBpbiBkZWJ1ZywgYW5kIHdpbGwgbG9nIGluIHJlbGVhc2UgYW5k
IGFzc2lnbiB0aGUgdmFsdWUKLS8vIHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBVc2UgdGhlIHJhd1Zh
bHVlIG1ldGhvZHMgYmVsb3cgdG8gYXNzaWduIG5vbiBlbnVtZXJhdG9yCi0vLyB2YWx1ZXMuCi0K
LS0gKHZvaWQpc2V0VmFsdWU6KGludDMyX3QpdmFsdWUgZm9yS2V5OihpbnQ2NF90KWtleTsKLQot
Ly8gVGhpcyBtZXRob2QgYnlwYXNzIHRoZSB2YWxpZGF0aW9uRnVuYyB0byBwcm92aWRlIHNldHRp
bmcgb2YgdmFsdWVzIHRoYXQgd2VyZSBub3QKLS8vIGtub3duIGF0IHRoZSB0aW1lIHRoZSBiaW5h
cnkgd2FzIGNvbXBpbGVkLgotLSAodm9pZClzZXRSYXdWYWx1ZTooaW50MzJfdClyYXdWYWx1ZSBm
b3JLZXk6KGludDY0X3Qpa2V5OwotCi0vLyBObyB2YWxpZGF0aW9uIGFwcGxpZXMgdG8gdGhlc2Ug
bWV0aG9kcy4KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleTooaW50NjRfdClhS2V5OwotLSAo
dm9pZClyZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gSW50NjQgLT4gT2JqZWN0
Ci0KLUBpbnRlcmZhY2UgR1BCSW50NjRPYmplY3REaWN0aW9uYXJ5PF9fY292YXJpYW50IE9iamVj
dFR5cGU+IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5vbmF0b21pYywgcmVh
ZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5Owot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoT2JqZWN0OihPYmplY3RUeXBlKW9iamVjdAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihpbnQ2NF90KWtleTsKLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aE9iamVjdHM6KGNvbnN0IE9iamVjdFR5cGUgR1BCX1VO
U0FGRV9VTlJFVEFJTkVEIFtdKW9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcktleXM6KGNvbnN0IGludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9u
YXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDY0T2JqZWN0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7
Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1J
dGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT2JqZWN0czooY29uc3QgT2JqZWN0VHlw
ZSBHUEJfVU5TQUZFX1VOUkVUQUlORUQgW10pb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czooY29uc3QgaW50NjRfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJJbnQ2NE9iamVjdERpY3Rpb25h
cnkgKilkaWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUlu
dGVnZXIpbnVtSXRlbXM7Ci0KLS0gKE9iamVjdFR5cGUpb2JqZWN0Rm9yS2V5OihpbnQ2NF90KWtl
eTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6Ci0gICAgKHZv
aWQgKF4pKGludDY0X3Qga2V5LCBPYmplY3RUeXBlIG9iamVjdCwgQk9PTCAqc3RvcCkpYmxvY2s7
Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJJbnQ2NE9iamVjdERpY3Rp
b25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0T2JqZWN0OihPYmplY3RUeXBl
KW9iamVjdCBmb3JLZXk6KGludDY0X3Qpa2V5OwotCi0tICh2b2lkKXJlbW92ZU9iamVjdEZvcktl
eTooaW50NjRfdClhS2V5OwotLSAodm9pZClyZW1vdmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBt
YXJrIC0gQm9vbCAtPiBVSW50MzIKLQotQGludGVyZmFjZSBHUEJCb29sVUludDMyRGljdGlvbmFy
eSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5
KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOih1aW50MzJfdCl2YWx1ZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KEJPT0wpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCB1aW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlrZXlzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJCb29sVUludDMyRGljdGlvbmFyeSAq
KWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25z
dCB1aW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29u
c3QgQk9PTCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVn
ZXIpY291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aERpY3Rpb25hcnk6KEdQQkJvb2xVSW50MzJEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0t
IChCT09MKXZhbHVlRm9yS2V5OihCT09MKWtleSB2YWx1ZToobnVsbGFibGUgdWludDMyX3QgKil2
YWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAo
dm9pZCAoXikoQk9PTCBrZXksIHVpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQot
LSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkJvb2xVSW50MzJEaWN0aW9uYXJ5
ICopb3RoZXJEaWN0aW9uYXJ5OwotCi0tICh2b2lkKXNldFZhbHVlOih1aW50MzJfdCl2YWx1ZSBm
b3JLZXk6KEJPT0wpa2V5OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihCT09MKWFLZXk7
Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBCb29sIC0+IElu
dDMyCi0KLUBpbnRlcmZhY2UgR1BCQm9vbEludDMyRGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0Nv
cHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50
OwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9u
YXJ5V2l0aFZhbHVlOihpbnQzMl90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcktleTooQk9PTClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6
KGNvbnN0IGludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRo
RGljdGlvbmFyeTooR1BCQm9vbEludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0
YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBCT09MIFtdKWtleXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVE
X0lOSVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCQm9v
bEludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
YXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleTooQk9P
TClrZXkgdmFsdWU6KG51bGxhYmxlIGludDMyX3QgKil2YWx1ZTsKLQotLSAodm9pZCllbnVtZXJh
dGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoQk9PTCBrZXksIGludDMy
X3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGlj
dGlvbmFyeTooR1BCQm9vbEludDMyRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQotLSAo
dm9pZClzZXRWYWx1ZTooaW50MzJfdCl2YWx1ZSBmb3JLZXk6KEJPT0wpa2V5OwotCi0tICh2b2lk
KXJlbW92ZVZhbHVlRm9yS2V5OihCT09MKWFLZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVu
ZAotCi0jcHJhZ21hIG1hcmsgLSBCb29sIC0+IFVJbnQ2NAotCi1AaW50ZXJmYWNlIEdQQkJvb2xV
SW50NjREaWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5vbmF0
b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0
aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVpbnQ2NF90KXZh
bHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooQk9PTClrZXk7Ci0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtdKXZhbHVl
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBCT09MIFtdKWtl
eXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3Vu
dDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkJvb2xVSW50
NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhWYWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXlzOihjb25zdCBCT09MIFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCQm9vbFVJbnQ2NERpY3Rpb25hcnkgKilk
aWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIp
bnVtSXRlbXM7Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KEJPT0wpa2V5IHZhbHVlOihudWxsYWJs
ZSB1aW50NjRfdCAqKXZhbHVlOwotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2lu
Z0Jsb2NrOgotICAgICh2b2lkICheKShCT09MIGtleSwgdWludDY0X3QgdmFsdWUsIEJPT0wgKnN0
b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCQm9vbFVJ
bnQ2NERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KHVp
bnQ2NF90KXZhbHVlIGZvcktleTooQk9PTClrZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JL
ZXk6KEJPT0wpYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFy
ayAtIEJvb2wgLT4gSW50NjQKLQotQGludGVyZmFjZSBHUEJCb29sSW50NjREaWN0aW9uYXJ5IDog
TlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5T
VUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFu
Y2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KGludDY0X3QpdmFsdWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yS2V5OihCT09MKWtleTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9u
YXJ5V2l0aFZhbHVlczooY29uc3QgaW50NjRfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlrZXlzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJCb29sSW50NjREaWN0aW9uYXJ5ICopZGljdGlv
bmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2Vy
KW51bUl0ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGludDY0
X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IEJPT0wg
W10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50
IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0
aW9uYXJ5OihHUEJCb29sSW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZh
bHVlRm9yS2V5OihCT09MKWtleSB2YWx1ZToobnVsbGFibGUgaW50NjRfdCAqKXZhbHVlOwotCi0t
ICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShC
T09MIGtleSwgaW50NjRfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRk
RW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJCb29sSW50NjREaWN0aW9uYXJ5ICopb3RoZXJEaWN0
aW9uYXJ5OwotCi0tICh2b2lkKXNldFZhbHVlOihpbnQ2NF90KXZhbHVlIGZvcktleTooQk9PTClr
ZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KEJPT0wpYUtleTsKLS0gKHZvaWQpcmVt
b3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEJvb2wgLT4gQm9vbAotCi1AaW50ZXJm
YWNlIEdQQkJvb2xCb29sRGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9w
ZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihC
T09MKXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooQk9PTClrZXk7
Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IEJPT0wgW10pdmFs
dWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IEJPT0wgW10p
a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNv
dW50OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCQm9vbEJv
b2xEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhWYWx1ZXM6KGNvbnN0IEJPT0wgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZv
cktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJCb29sQm9vbERpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRl
bXM7Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KEJPT0wpa2V5IHZhbHVlOihudWxsYWJsZSBCT09M
ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0g
ICAgKHZvaWQgKF4pKEJPT0wga2V5LCBCT09MIHZhbHVlLCBCT09MICpzdG9wKSlibG9jazsKLQot
LSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkJvb2xCb29sRGljdGlvbmFyeSAq
KW90aGVyRGljdGlvbmFyeTsKLQotLSAodm9pZClzZXRWYWx1ZTooQk9PTCl2YWx1ZSBmb3JLZXk6
KEJPT0wpa2V5OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihCT09MKWFLZXk7Ci0tICh2
b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBCb29sIC0+IEZsb2F0Ci0K
LUBpbnRlcmZhY2UgR1BCQm9vbEZsb2F0RGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+
Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0r
IChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aFZhbHVlOihmbG9hdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6
KEJPT0wpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBm
bG9hdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29u
c3QgQk9PTCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5T
VUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5
OihHUEJCb29sRmxvYXREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlk
aWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGZsb2F0IFtdKXZhbHVlcwotICAgICAgICAgICAg
ICAgICAgICAgICBmb3JLZXlzOihjb25zdCBCT09MIFtdKWtleXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVS
OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCQm9vbEZsb2F0RGljdGlv
bmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleTooQk9PTClrZXkgdmFsdWU6
KG51bGxhYmxlIGZsb2F0ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVl
c1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKEJPT0wga2V5LCBmbG9hdCB2YWx1ZSwgQk9PTCAq
c3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJCb29s
RmxvYXREaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5OwotCi0tICh2b2lkKXNldFZhbHVlOihm
bG9hdCl2YWx1ZSBmb3JLZXk6KEJPT0wpa2V5OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5
OihCT09MKWFLZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsg
LSBCb29sIC0+IERvdWJsZQotCi1AaW50ZXJmYWNlIEdQQkJvb2xEb3VibGVEaWN0aW9uYXJ5IDog
TlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5T
VUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFu
Y2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KGRvdWJsZSl2YWx1ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JLZXk6KEJPT0wpa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoVmFsdWVzOihjb25zdCBkb3VibGUgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCQm9vbERvdWJsZURpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIp
bnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgZG91Ymxl
IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBCT09MIFtd
KWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBO
U19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlv
bmFyeTooR1BCQm9vbERvdWJsZURpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKEJPT0wpdmFs
dWVGb3JLZXk6KEJPT0wpa2V5IHZhbHVlOihudWxsYWJsZSBkb3VibGUgKil2YWx1ZTsKLQotLSAo
dm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoQk9P
TCBrZXksIGRvdWJsZSB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkRW50
cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJCb29sRG91YmxlRGljdGlvbmFyeSAqKW90aGVyRGljdGlv
bmFyeTsKLQotLSAodm9pZClzZXRWYWx1ZTooZG91YmxlKXZhbHVlIGZvcktleTooQk9PTClrZXk7
Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KEJPT0wpYUtleTsKLS0gKHZvaWQpcmVtb3Zl
QWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEJvb2wgLT4gRW51bQotCi1AaW50ZXJmYWNl
IEdQQkJvb2xFbnVtRGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0
eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotQHByb3BlcnR5KG5vbmF0
b21pYywgcmVhZG9ubHkpIEdQQkVudW1WYWxpZGF0aW9uRnVuYyB2YWxpZGF0aW9uRnVuYzsKLQot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5j
OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxs
YWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJhd1ZhbHVlOihpbnQzMl90KXJhd1ZhbHVlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KEJPT0wpa2V5OwotKyAoaW5zdGFu
Y2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVt
VmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmF3VmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBCT09MIFtdKWtleXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlcilj
b3VudDsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkJvb2xF
bnVtRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5j
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUlu
dGVnZXIpbnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbGlkYXRpb25GdW5j
dGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmM7Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9u
RnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6KGNv
bnN0IGludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTEla
RVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJCb29sRW51bURpY3Rp
b25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1
bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0v
LyBUaGVzZSB3aWxsIHJldHVybiBrR1BCVW5yZWNvZ25pemVkRW51bWVyYXRvclZhbHVlIGlmIHRo
ZSB2YWx1ZSBmb3IgdGhlIGtleQotLy8gaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBhcyBkZWZp
bmVkIGJ5IHZhbGlkYXRpb25GdW5jLiBJZiB0aGUgYWN0dWFsIHZhbHVlIGlzCi0vLyBkZXNpcmVk
LCB1c2UgInJhdyIgdmVyc2lvbiBvZiB0aGUgbWV0aG9kLgotCi0tIChCT09MKXZhbHVlRm9yS2V5
OihCT09MKWtleSB2YWx1ZToobnVsbGFibGUgaW50MzJfdCAqKXZhbHVlOwotCi0tICh2b2lkKWVu
dW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShCT09MIGtleSwg
aW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgYnlw
YXNzIHRoZSB2YWxpZGF0aW9uRnVuYyB0byBwcm92aWRlIGFjY2VzcyB0byB2YWx1ZXMgdGhhdCB3
ZXJlIG5vdAotLy8ga25vd24gYXQgdGhlIHRpbWUgdGhlIGJpbmFyeSB3YXMgY29tcGlsZWQuCi0K
LS0gKEJPT0wpdmFsdWVGb3JLZXk6KEJPT0wpa2V5IHJhd1ZhbHVlOihudWxsYWJsZSBpbnQzMl90
ICopcmF3VmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFJhd1ZhbHVlc1VzaW5nQmxv
Y2s6Ci0gICAgKHZvaWQgKF4pKEJPT0wga2V5LCBpbnQzMl90IHJhd1ZhbHVlLCBCT09MICpzdG9w
KSlibG9jazsKLQotLSAodm9pZClhZGRSYXdFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkJvb2xF
bnVtRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQotLy8gSWYgdmFsdWUgaXMgbm90IGEg
dmFsaWQgZW51bWVyYXRvciBhcyBkZWZpbmVkIGJ5IHZhbGlkYXRpb25GdW5jLCB0aGVzZQotLy8g
bWV0aG9kcyB3aWxsIGFzc2VydCBpbiBkZWJ1ZywgYW5kIHdpbGwgbG9nIGluIHJlbGVhc2UgYW5k
IGFzc2lnbiB0aGUgdmFsdWUKLS8vIHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBVc2UgdGhlIHJhd1Zh
bHVlIG1ldGhvZHMgYmVsb3cgdG8gYXNzaWduIG5vbiBlbnVtZXJhdG9yCi0vLyB2YWx1ZXMuCi0K
LS0gKHZvaWQpc2V0VmFsdWU6KGludDMyX3QpdmFsdWUgZm9yS2V5OihCT09MKWtleTsKLQotLy8g
VGhpcyBtZXRob2QgYnlwYXNzIHRoZSB2YWxpZGF0aW9uRnVuYyB0byBwcm92aWRlIHNldHRpbmcg
b2YgdmFsdWVzIHRoYXQgd2VyZSBub3QKLS8vIGtub3duIGF0IHRoZSB0aW1lIHRoZSBiaW5hcnkg
d2FzIGNvbXBpbGVkLgotLSAodm9pZClzZXRSYXdWYWx1ZTooaW50MzJfdClyYXdWYWx1ZSBmb3JL
ZXk6KEJPT0wpa2V5OwotCi0vLyBObyB2YWxpZGF0aW9uIGFwcGxpZXMgdG8gdGhlc2UgbWV0aG9k
cy4KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleTooQk9PTClhS2V5OwotLSAodm9pZClyZW1v
dmVBbGw7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gQm9vbCAtPiBPYmplY3QKLQotQGludGVy
ZmFjZSBHUEJCb29sT2JqZWN0RGljdGlvbmFyeTxfX2NvdmFyaWFudCBPYmplY3RUeXBlPiA6IE5T
T2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJ
bnRlZ2VyIGNvdW50OwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5V2l0aE9iamVjdDooT2JqZWN0VHlwZSlvYmplY3QKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcktleTooQk9PTClrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhPYmplY3RzOihjb25zdCBPYmplY3RUeXBlIEdQQl9VTlNBRkVfVU5SRVRBSU5F
RCBbXSlvYmplY3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25z
dCBCT09MIFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5T
VUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5
OihHUEJCb29sT2JqZWN0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoT2JqZWN0czooY29uc3QgT2JqZWN0VHlwZSBHUEJfVU5TQUZFX1VOUkVU
QUlORUQgW10pb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3Qg
Qk9PTCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2Vy
KWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhEaWN0aW9uYXJ5OihHUEJCb29sT2JqZWN0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtczsKLQotLSAo
T2JqZWN0VHlwZSlvYmplY3RGb3JLZXk6KEJPT0wpa2V5OwotCi0tICh2b2lkKWVudW1lcmF0ZUtl
eXNBbmRPYmplY3RzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoQk9PTCBrZXksIE9iamVjdFR5
cGUgb2JqZWN0LCBCT09MICpzdG9wKSlibG9jazsKLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURp
Y3Rpb25hcnk6KEdQQkJvb2xPYmplY3REaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5OwotCi0t
ICh2b2lkKXNldE9iamVjdDooT2JqZWN0VHlwZSlvYmplY3QgZm9yS2V5OihCT09MKWtleTsKLQot
LSAodm9pZClyZW1vdmVPYmplY3RGb3JLZXk6KEJPT0wpYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxs
OwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFN0cmluZyAtPiBVSW50MzIKLQotQGludGVyZmFj
ZSBHUEJTdHJpbmdVSW50MzJEaWN0aW9uYXJ5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHBy
b3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6
KHVpbnQzMl90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooTlNT
dHJpbmcgKilrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0
IHVpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlz
Oihjb25zdCBOU1N0cmluZyAqIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBbXSlrZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0
YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJTdHJpbmdVSW50MzJEaWN0aW9u
YXJ5ICopZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5
OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6
KGNvbnN0IHVpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlz
Oihjb25zdCBOU1N0cmluZyAqIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBbXSlrZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdOQVRFRF9J
TklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlN0cmlu
Z1VJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KE5T
U3RyaW5nICopa2V5IHZhbHVlOihudWxsYWJsZSB1aW50MzJfdCAqKXZhbHVlOwotCi0tICh2b2lk
KWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShOU1N0cmlu
ZyAqa2V5LCB1aW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRk
RW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJTdHJpbmdVSW50MzJEaWN0aW9uYXJ5ICopb3RoZXJE
aWN0aW9uYXJ5OwotCi0tICh2b2lkKXNldFZhbHVlOih1aW50MzJfdCl2YWx1ZSBmb3JLZXk6KE5T
U3RyaW5nICopa2V5OwotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWFL
ZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBTdHJpbmcg
LT4gSW50MzIKLQotQGludGVyZmFjZSBHUEJTdHJpbmdJbnQzMkRpY3Rpb25hcnkgOiBOU09iamVj
dCA8TlNDb3B5aW5nPgotCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdl
ciBjb3VudDsKLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhWYWx1ZTooaW50MzJfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JLZXk6KE5TU3RyaW5nICopa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoVmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JLZXlzOihjb25zdCBOU1N0cmluZyAqIEdQQl9VTlNBRkVfVU5SRVRBSU5F
RCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVn
ZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJT
dHJpbmdJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rp
b25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5czooY29uc3QgTlNTdHJpbmcgKiBHUEJfVU5TQUZFX1VOUkVUQUlORUQg
W10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50
IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0
aW9uYXJ5OihHUEJTdHJpbmdJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKEJPT0wp
dmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5IHZhbHVlOihudWxsYWJsZSBpbnQzMl90ICopdmFs
dWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZv
aWQgKF4pKE5TU3RyaW5nICprZXksIGludDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwot
Ci0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCU3RyaW5nSW50MzJEaWN0aW9u
YXJ5ICopb3RoZXJEaWN0aW9uYXJ5OwotCi0tICh2b2lkKXNldFZhbHVlOihpbnQzMl90KXZhbHVl
IGZvcktleTooTlNTdHJpbmcgKilrZXk7Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KE5T
U3RyaW5nICopYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFy
ayAtIFN0cmluZyAtPiBVSW50NjQKLQotQGludGVyZmFjZSBHUEJTdHJpbmdVSW50NjREaWN0aW9u
YXJ5IDogTlNPYmplY3QgPE5TQ29weWluZz4KLQotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9u
bHkpIE5TVUludGVnZXIgY291bnQ7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAo
aW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVpbnQ2NF90KXZhbHVlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooTlNTdHJpbmcgKilrZXk7Ci0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtdKXZhbHVlcwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBOU1N0cmluZyAqIEdQQl9V
TlNBRkVfVU5SRVRBSU5FRCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhE
aWN0aW9uYXJ5OihHUEJTdHJpbmdVSW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zOwot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtdKXZhbHVl
cwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBOU1N0cmluZyAqIEdQQl9V
TlNBRkVfVU5SRVRBSU5FRCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6
KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlN0cmluZ1VJbnQ2NERpY3Rpb25hcnkgKilkaWN0
aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVt
SXRlbXM7Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5IHZhbHVlOihudWxs
YWJsZSB1aW50NjRfdCAqKXZhbHVlOwotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNV
c2luZ0Jsb2NrOgotICAgICh2b2lkICheKShOU1N0cmluZyAqa2V5LCB1aW50NjRfdCB2YWx1ZSwg
Qk9PTCAqc3RvcCkpYmxvY2s7Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihH
UEJTdHJpbmdVSW50NjREaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5OwotCi0tICh2b2lkKXNl
dFZhbHVlOih1aW50NjRfdCl2YWx1ZSBmb3JLZXk6KE5TU3RyaW5nICopa2V5OwotCi0tICh2b2lk
KXJlbW92ZVZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWFLZXk7Ci0tICh2b2lkKXJlbW92ZUFsbDsK
LQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBTdHJpbmcgLT4gSW50NjQKLQotQGludGVyZmFjZSBH
UEJTdHJpbmdJbnQ2NERpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFuY2V0
eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooaW50
NjRfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KE5TU3RyaW5n
ICopa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBpbnQ2
NF90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25z
dCBOU1N0cmluZyAqIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBbXSlrZXlzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5jZXR5
cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJTdHJpbmdJbnQ2NERpY3Rpb25hcnkgKilk
aWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUlu
dGVnZXIpbnVtSXRlbXM7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3Qg
aW50NjRfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3Qg
TlNTdHJpbmcgKiBHUEJfVU5TQUZFX1VOUkVUQUlORUQgW10pa2V5cwotICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IE5TX0RFU0lHTkFURURfSU5JVElBTEla
RVI7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJTdHJpbmdJbnQ2NERp
Y3Rpb25hcnkgKilkaWN0aW9uYXJ5OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6
KE5TVUludGVnZXIpbnVtSXRlbXM7Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICop
a2V5IHZhbHVlOihudWxsYWJsZSBpbnQ2NF90ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRl
S2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKE5TU3RyaW5nICprZXksIGlu
dDY0X3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9t
RGljdGlvbmFyeTooR1BCU3RyaW5nSW50NjREaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5Owot
Ci0tICh2b2lkKXNldFZhbHVlOihpbnQ2NF90KXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrZXk7
Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KE5TU3RyaW5nICopYUtleTsKLS0gKHZvaWQp
cmVtb3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFN0cmluZyAtPiBCb29sCi0KLUBp
bnRlcmZhY2UgR1BCU3RyaW5nQm9vbERpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgot
Ci1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAo
aW5zdGFuY2V0eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhW
YWx1ZTooQk9PTCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KE5T
U3RyaW5nICopa2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25z
dCBCT09MIFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihj
b25zdCBOU1N0cmluZyAqIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBbXSlrZXlzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQ7Ci0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJTdHJpbmdCb29sRGljdGlvbmFyeSAq
KWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25z
dCBCT09MIFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBO
U1N0cmluZyAqIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBbXSlrZXlzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpF
UjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlN0cmluZ0Jvb2xEaWN0
aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihO
U1VJbnRlZ2VyKW51bUl0ZW1zOwotCi0tIChCT09MKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtl
eSB2YWx1ZToobnVsbGFibGUgQk9PTCAqKXZhbHVlOwotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNB
bmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShOU1N0cmluZyAqa2V5LCBCT09MIHZh
bHVlLCBCT09MICpzdG9wKSlibG9jazsKLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25h
cnk6KEdQQlN0cmluZ0Jvb2xEaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5OwotCi0tICh2b2lk
KXNldFZhbHVlOihCT09MKXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrZXk7Ci0KLS0gKHZvaWQp
cmVtb3ZlVmFsdWVGb3JLZXk6KE5TU3RyaW5nICopYUtleTsKLS0gKHZvaWQpcmVtb3ZlQWxsOwot
Ci1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFN0cmluZyAtPiBGbG9hdAotCi1AaW50ZXJmYWNlIEdQ
QlN0cmluZ0Zsb2F0RGljdGlvbmFyeSA6IE5TT2JqZWN0IDxOU0NvcHlpbmc+Ci0KLUBwcm9wZXJ0
eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGNvdW50OwotCi0rIChpbnN0YW5jZXR5
cGUpZGljdGlvbmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihmbG9h
dCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KE5TU3RyaW5nICop
a2V5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBmbG9hdCBb
XSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgTlNT
dHJpbmcgKiBHUEJfVU5TQUZFX1VOUkVUQUlORUQgW10pa2V5cwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCU3RyaW5nRmxvYXREaWN0aW9uYXJ5ICopZGljdGlv
bmFyeTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2Vy
KW51bUl0ZW1zOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGZsb2F0
IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBOU1N0cmlu
ZyAqIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlN0cmluZ0Zsb2F0RGljdGlvbmFy
eSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50
ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkgdmFs
dWU6KG51bGxhYmxlIGZsb2F0ICopdmFsdWU7Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZh
bHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKE5TU3RyaW5nICprZXksIGZsb2F0IHZhbHVl
LCBCT09MICpzdG9wKSlibG9jazsKLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6
KEdQQlN0cmluZ0Zsb2F0RGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQotLSAodm9pZClz
ZXRWYWx1ZTooZmxvYXQpdmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKWtleTsKLQotLSAodm9pZCly
ZW1vdmVWYWx1ZUZvcktleTooTlNTdHJpbmcgKilhS2V5OwotLSAodm9pZClyZW1vdmVBbGw7Ci0K
LUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gU3RyaW5nIC0+IERvdWJsZQotCi1AaW50ZXJmYWNlIEdQ
QlN0cmluZ0RvdWJsZURpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1AcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLQotKyAoaW5zdGFuY2V0
eXBlKWRpY3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooZG91
YmxlKXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooTlNTdHJpbmcg
KilrZXk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGRvdWJs
ZSBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3Qg
TlNTdHJpbmcgKiBHUEJfVU5TQUZFX1VOUkVUQUlORUQgW10pa2V5cwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFuY2V0eXBl
KWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCU3RyaW5nRG91YmxlRGljdGlvbmFyeSAqKWRp
Y3Rpb25hcnk7Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50
ZWdlciludW1JdGVtczsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBk
b3VibGUgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IE5T
U3RyaW5nICogR1BCX1VOU0FGRV9VTlJFVEFJTkVEIFtdKWtleXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVS
OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCU3RyaW5nRG91YmxlRGlj
dGlvbmFyeSAqKWRpY3Rpb25hcnk7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eToo
TlNVSW50ZWdlciludW1JdGVtczsKLQotLSAoQk9PTCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilr
ZXkgdmFsdWU6KG51bGxhYmxlIGRvdWJsZSAqKXZhbHVlOwotCi0tICh2b2lkKWVudW1lcmF0ZUtl
eXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShOU1N0cmluZyAqa2V5LCBkb3Vi
bGUgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGlj
dGlvbmFyeTooR1BCU3RyaW5nRG91YmxlRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeTsKLQot
LSAodm9pZClzZXRWYWx1ZTooZG91YmxlKXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrZXk7Ci0K
LS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KE5TU3RyaW5nICopYUtleTsKLS0gKHZvaWQpcmVt
b3ZlQWxsOwotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFN0cmluZyAtPiBFbnVtCi0KLUBpbnRl
cmZhY2UgR1BCU3RyaW5nRW51bURpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotCi1A
cHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLUBwcm9wZXJ0
eShub25hdG9taWMsIHJlYWRvbmx5KSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMgdmFsaWRhdGlvbkZ1
bmM7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rp
b25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1
bmMpZnVuYzsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlv
bjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZTooaW50MzJfdClyYXdWYWx1ZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihOU1N0cmluZyAqKWtl
eTsKLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVs
bGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJhd1ZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgTlNTdHJp
bmcgKiBHUEJfVU5TQUZFX1VOUkVUQUlORUQgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotKyAoaW5zdGFu
Y2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCU3RyaW5nRW51bURpY3Rpb25hcnkg
KilkaWN0aW9uYXJ5OwotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1
bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1z
OwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxl
IEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFs
aWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBpbnQzMl90IFtd
KXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25z
dCBOU1N0cmluZyAqIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBbXSlrZXlzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgTlNfREVTSUdO
QVRFRF9JTklUSUFMSVpFUjsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQ
QlN0cmluZ0VudW1EaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1
bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhY2l0eTooTlNVSW50ZWdl
ciludW1JdGVtczsKLQotLy8gVGhlc2Ugd2lsbCByZXR1cm4ga0dQQlVucmVjb2duaXplZEVudW1l
cmF0b3JWYWx1ZSBpZiB0aGUgdmFsdWUgZm9yIHRoZSBrZXkKLS8vIGlzIG5vdCBhIHZhbGlkIGVu
dW1lcmF0b3IgYXMgZGVmaW5lZCBieSB2YWxpZGF0aW9uRnVuYy4gSWYgdGhlIGFjdHVhbCB2YWx1
ZSBpcwotLy8gZGVzaXJlZCwgdXNlICJyYXciIHZlcnNpb24gb2YgdGhlIG1ldGhvZC4KLQotLSAo
Qk9PTCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkgdmFsdWU6KG51bGxhYmxlIGludDMyX3Qg
Kil2YWx1ZTsKLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAg
ICAodm9pZCAoXikoTlNTdHJpbmcgKmtleSwgaW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxv
Y2s7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgYnlwYXNzIHRoZSB2YWxpZGF0aW9uRnVuYyB0byBwcm92
aWRlIGFjY2VzcyB0byB2YWx1ZXMgdGhhdCB3ZXJlIG5vdAotLy8ga25vd24gYXQgdGhlIHRpbWUg
dGhlIGJpbmFyeSB3YXMgY29tcGlsZWQuCi0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KE5TU3RyaW5n
ICopa2V5IHJhd1ZhbHVlOihudWxsYWJsZSBpbnQzMl90ICopcmF3VmFsdWU7Ci0KLS0gKHZvaWQp
ZW51bWVyYXRlS2V5c0FuZFJhd1ZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKE5TU3Ry
aW5nICprZXksIGludDMyX3QgcmF3VmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrOwotCi0tICh2b2lk
KWFkZFJhd0VudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCU3RyaW5nRW51bURpY3Rpb25hcnkgKilv
dGhlckRpY3Rpb25hcnk7Ci0KLS8vIElmIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGVudW1lcmF0b3Ig
YXMgZGVmaW5lZCBieSB2YWxpZGF0aW9uRnVuYywgdGhlc2UKLS8vIG1ldGhvZHMgd2lsbCBhc3Nl
cnQgaW4gZGVidWcsIGFuZCB3aWxsIGxvZyBpbiByZWxlYXNlIGFuZCBhc3NpZ24gdGhlIHZhbHVl
Ci0vLyB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHRoZSByYXdWYWx1ZSBtZXRob2RzIGJlbG93
IHRvIGFzc2lnbiBub24gZW51bWVyYXRvcgotLy8gdmFsdWVzLgotCi0tICh2b2lkKXNldFZhbHVl
OihpbnQzMl90KXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrZXk7Ci0KLS8vIFRoaXMgbWV0aG9k
IGJ5cGFzcyB0aGUgdmFsaWRhdGlvbkZ1bmMgdG8gcHJvdmlkZSBzZXR0aW5nIG9mIHZhbHVlcyB0
aGF0IHdlcmUgbm90Ci0vLyBrbm93biBhdCB0aGUgdGltZSB0aGUgYmluYXJ5IHdhcyBjb21waWxl
ZC4KLS0gKHZvaWQpc2V0UmF3VmFsdWU6KGludDMyX3QpcmF3VmFsdWUgZm9yS2V5OihOU1N0cmlu
ZyAqKWtleTsKLQotLy8gTm8gdmFsaWRhdGlvbiBhcHBsaWVzIHRvIHRoZXNlIG1ldGhvZHMuCi0K
LS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KE5TU3RyaW5nICopYUtleTsKLS0gKHZvaWQpcmVt
b3ZlQWxsOwotCi1AZW5kCi0KLS8vJVBERE0tRVhQQU5ELUVORCBERUNMQVJFX0RJQ1RJT05BUklF
UygpCi0KLU5TX0FTU1VNRV9OT05OVUxMX0VORAotCi0vLyVQRERNLURFRklORSBERUNMQVJFX0RJ
Q1RJT05BUklFUygpCi0vLyVESUNUSU9OQVJZX0lOVEVSRkFDRVNfRk9SX1BPRF9LRVkoVUludDMy
LCB1aW50MzJfdCkKLS8vJURJQ1RJT05BUllfSU5URVJGQUNFU19GT1JfUE9EX0tFWShJbnQzMiwg
aW50MzJfdCkKLS8vJURJQ1RJT05BUllfSU5URVJGQUNFU19GT1JfUE9EX0tFWShVSW50NjQsIHVp
bnQ2NF90KQotLy8lRElDVElPTkFSWV9JTlRFUkZBQ0VTX0ZPUl9QT0RfS0VZKEludDY0LCBpbnQ2
NF90KQotLy8lRElDVElPTkFSWV9JTlRFUkZBQ0VTX0ZPUl9QT0RfS0VZKEJvb2wsIEJPT0wpCi0v
LyVESUNUSU9OQVJZX1BPRF9JTlRFUkZBQ0VTX0ZPUl9LRVkoU3RyaW5nLCBOU1N0cmluZywgKiwg
T0JKRUNUKQotLy8lUERETS1ERUZJTkUgRElDVElPTkFSWV9JTlRFUkZBQ0VTX0ZPUl9QT0RfS0VZ
KEtFWV9OQU1FLCBLRVlfVFlQRSkKLS8vJURJQ1RJT05BUllfUE9EX0lOVEVSRkFDRVNfRk9SX0tF
WShLRVlfTkFNRSwgS0VZX1RZUEUsICwgUE9EKQotLy8lRElDVElPTkFSWV9QT0RfS0VZX1RPX09C
SkVDVF9JTlRFUkZBQ0UoS0VZX05BTUUsIEtFWV9UWVBFLCBPYmplY3QsIE9iamVjdFR5cGUpCi0v
LyVQRERNLURFRklORSBESUNUSU9OQVJZX1BPRF9JTlRFUkZBQ0VTX0ZPUl9LRVkoS0VZX05BTUUs
IEtFWV9UWVBFLCBLaXNQLCBLSEVMUEVSKQotLy8lRElDVElPTkFSWV9LRVlfVE9fUE9EX0lOVEVS
RkFDRShLRVlfTkFNRSwgS0VZX1RZUEUsIEtpc1AsIEtIRUxQRVIsIFVJbnQzMiwgdWludDMyX3Qp
Ci0vLyVESUNUSU9OQVJZX0tFWV9UT19QT0RfSU5URVJGQUNFKEtFWV9OQU1FLCBLRVlfVFlQRSwg
S2lzUCwgS0hFTFBFUiwgSW50MzIsIGludDMyX3QpCi0vLyVESUNUSU9OQVJZX0tFWV9UT19QT0Rf
SU5URVJGQUNFKEtFWV9OQU1FLCBLRVlfVFlQRSwgS2lzUCwgS0hFTFBFUiwgVUludDY0LCB1aW50
NjRfdCkKLS8vJURJQ1RJT05BUllfS0VZX1RPX1BPRF9JTlRFUkZBQ0UoS0VZX05BTUUsIEtFWV9U
WVBFLCBLaXNQLCBLSEVMUEVSLCBJbnQ2NCwgaW50NjRfdCkKLS8vJURJQ1RJT05BUllfS0VZX1RP
X1BPRF9JTlRFUkZBQ0UoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBLSEVMUEVSLCBCb29sLCBC
T09MKQotLy8lRElDVElPTkFSWV9LRVlfVE9fUE9EX0lOVEVSRkFDRShLRVlfTkFNRSwgS0VZX1RZ
UEUsIEtpc1AsIEtIRUxQRVIsIEZsb2F0LCBmbG9hdCkKLS8vJURJQ1RJT05BUllfS0VZX1RPX1BP
RF9JTlRFUkZBQ0UoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBLSEVMUEVSLCBEb3VibGUsIGRv
dWJsZSkKLS8vJURJQ1RJT05BUllfS0VZX1RPX0VOVU1fSU5URVJGQUNFKEtFWV9OQU1FLCBLRVlf
VFlQRSwgS2lzUCwgS0hFTFBFUiwgRW51bSwgaW50MzJfdCkKLS8vJVBERE0tREVGSU5FIERJQ1RJ
T05BUllfS0VZX1RPX1BPRF9JTlRFUkZBQ0UoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBLSEVM
UEVSLCBWQUxVRV9OQU1FLCBWQUxVRV9UWVBFKQotLy8lRElDVElPTkFSWV9DT01NT05fSU5URVJG
QUNFKEtFWV9OQU1FLCBLRVlfVFlQRSwgS2lzUCwgS0hFTFBFUiwgVkFMVUVfTkFNRSwgVkFMVUVf
VFlQRSwgUE9ELCB2YWx1ZSkKLS8vJVBERE0tREVGSU5FIERJQ1RJT05BUllfUE9EX0tFWV9UT19P
QkpFQ1RfSU5URVJGQUNFKEtFWV9OQU1FLCBLRVlfVFlQRSwgVkFMVUVfTkFNRSwgVkFMVUVfVFlQ
RSkKLS8vJURJQ1RJT05BUllfQ09NTU9OX0lOVEVSRkFDRShLRVlfTkFNRSwgS0VZX1RZUEUsICwg
UE9ELCBWQUxVRV9OQU1FLCBWQUxVRV9UWVBFLCBPQkpFQ1QsIG9iamVjdCkKLS8vJVBERE0tREVG
SU5FIFZBTFVFX0ZPUl9LRVlfUE9EKEtFWV9UWVBFLCBWQUxVRV9UWVBFKQotLy8lLSAoQk9PTCl2
YWx1ZUZvcktleTooS0VZX1RZUEUpa2V5IHZhbHVlOihudWxsYWJsZSBWQUxVRV9UWVBFICopdmFs
dWU7Ci0vLyVQRERNLURFRklORSBWQUxVRV9GT1JfS0VZX09CSkVDVChLRVlfVFlQRSwgVkFMVUVf
VFlQRSkKLS8vJS0gKFZBTFVFX1RZUEUpb2JqZWN0Rm9yS2V5OihLRVlfVFlQRSlrZXk7Ci0vLyVQ
RERNLURFRklORSBWQUxVRV9GT1JfS0VZX0VudW0oS0VZX1RZUEUsIFZBTFVFX1RZUEUpCi0vLyVW
QUxVRV9GT1JfS0VZX1BPRChLRVlfVFlQRSwgVkFMVUVfVFlQRSkKLS8vJVBERE0tREVGSU5FIEFS
UkFZX0FSR19NT0RJRklFUlBPRCgpCi0vLyBOb3RoaW5nCi0vLyVQRERNLURFRklORSBBUlJBWV9B
UkdfTU9ESUZJRVJFbnVtKCkKLS8vIE5vdGhpbmcKLS8vJVBERE0tREVGSU5FIEFSUkFZX0FSR19N
T0RJRklFUk9CSkVDVCgpCi0vLyVHUEJfVU5TQUZFX1VOUkVUQUlORUQgIyMKLS8vJVBERE0tREVG
SU5FIERJQ1RJT05BUllfQ0xBU1NfREVDTFBPRChLRVlfTkFNRSwgVkFMVUVfTkFNRSwgVkFMVUVf
VFlQRSkKLS8vJUdQQiMjS0VZX05BTUUjI1ZBTFVFX05BTUUjI0RpY3Rpb25hcnkKLS8vJVBERE0t
REVGSU5FIERJQ1RJT05BUllfQ0xBU1NfREVDTEVudW0oS0VZX05BTUUsIFZBTFVFX05BTUUsIFZB
TFVFX1RZUEUpCi0vLyVHUEIjI0tFWV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5Ci0vLyVQ
RERNLURFRklORSBESUNUSU9OQVJZX0NMQVNTX0RFQ0xPQkpFQ1QoS0VZX05BTUUsIFZBTFVFX05B
TUUsIFZBTFVFX1RZUEUpCi0vLyVHUEIjI0tFWV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5
PF9fY292YXJpYW50IFZBTFVFX1RZUEU+Ci0vLyVQRERNLURFRklORSBESUNUSU9OQVJZX0NPTU1P
Tl9JTlRFUkZBQ0UoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBLSEVMUEVSLCBWQUxVRV9OQU1F
LCBWQUxVRV9UWVBFLCBWSEVMUEVSLCBWTkFNRSkKLS8vJSNwcmFnbWEgbWFyayAtIEtFWV9OQU1F
IC0+IFZBTFVFX05BTUUKLS8vJQotLy8lQGludGVyZmFjZSBESUNUSU9OQVJZX0NMQVNTX0RFQ0wj
I1ZIRUxQRVIoS0VZX05BTUUsIFZBTFVFX05BTUUsIFZBTFVFX1RZUEUpIDogTlNPYmplY3QgPE5T
Q29weWluZz4KLS8vJQotLy8lQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVn
ZXIgY291bnQ7Ci0vLyUKLS8vJSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotLy8lKyAoaW5z
dGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoIyNWTkFNRSR1IyM6KFZBTFVFX1RZUEUpIyNWTkFNRQot
Ly8lICAgICAgICAgICAgICAgICAgICAgICAjI1ZOQU1FJFMjIyBmb3JLZXk6KEtFWV9UWVBFIyNL
aXNQJFMjI0tpc1Apa2V5OwotLy8lKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoIyNWTkFN
RSR1IyNzOihjb25zdCBWQUxVRV9UWVBFIEFSUkFZX0FSR19NT0RJRklFUiMjVkhFTFBFUigpW10p
IyNWTkFNRSMjcwotLy8lICAgICAgICAgICAgICAgICAgICAgICMjVk5BTUUkUyMjICBmb3JLZXlz
Oihjb25zdCBLRVlfVFlQRSMjS2lzUCRTIyNLaXNQIEFSUkFZX0FSR19NT0RJRklFUiMjS0hFTFBF
UigpW10pa2V5cwotLy8lICAgICAgICAgICAgICAgICAgICAgICMjVk5BTUUkUyMjICAgIGNvdW50
OihOU1VJbnRlZ2VyKWNvdW50OwotLy8lKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGlj
dGlvbmFyeTooR1BCIyNLRVlfTkFNRSMjVkFMVUVfTkFNRSMjRGljdGlvbmFyeSAqKWRpY3Rpb25h
cnk7Ci0vLyUrIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdl
ciludW1JdGVtczsKLS8vJQotLy8lLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoIyNWTkFNRSR1IyNz
Oihjb25zdCBWQUxVRV9UWVBFIEFSUkFZX0FSR19NT0RJRklFUiMjVkhFTFBFUigpW10pIyNWTkFN
RSMjcwotLy8lICAgICAgICAgICAgICAgICMjVk5BTUUkUyMjICBmb3JLZXlzOihjb25zdCBLRVlf
VFlQRSMjS2lzUCRTIyNLaXNQIEFSUkFZX0FSR19NT0RJRklFUiMjS0hFTFBFUigpW10pa2V5cwot
Ly8lICAgICAgICAgICAgICAgICMjVk5BTUUkUyMjICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50
IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7Ci0vLyUtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhE
aWN0aW9uYXJ5OihHUEIjI0tFWV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5ICopZGljdGlv
bmFyeTsKLS8vJS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51
bUl0ZW1zOwotLy8lCi0vLyVESUNUSU9OQVJZX0lNTVVUQUJMRV9JTlRFUkZBQ0UoS0VZX05BTUUs
IEtFWV9UWVBFLCBLaXNQLCBWQUxVRV9OQU1FLCBWQUxVRV9UWVBFLCBWSEVMUEVSLCBWTkFNRSkK
LS8vJQotLy8lLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQiMjS0VZX05BTUUj
I1ZBTFVFX05BTUUjI0RpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnk7Ci0vLyUKLS8vJURJQ1RJ
T05BUllfTVVUQUJMRV9JTlRFUkZBQ0UoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBWQUxVRV9O
QU1FLCBWQUxVRV9UWVBFLCBWSEVMUEVSLCBWTkFNRSkKLS8vJQotLy8lQGVuZAotLy8lCi0KLS8v
JVBERE0tREVGSU5FIERJQ1RJT05BUllfS0VZX1RPX0VOVU1fSU5URVJGQUNFKEtFWV9OQU1FLCBL
RVlfVFlQRSwgS2lzUCwgS0hFTFBFUiwgVkFMVUVfTkFNRSwgVkFMVUVfVFlQRSkKLS8vJURJQ1RJ
T05BUllfS0VZX1RPX0VOVU1fSU5URVJGQUNFMihLRVlfTkFNRSwgS0VZX1RZUEUsIEtpc1AsIEtI
RUxQRVIsIFZBTFVFX05BTUUsIFZBTFVFX1RZUEUsIEVudW0pCi0vLyVQRERNLURFRklORSBESUNU
SU9OQVJZX0tFWV9UT19FTlVNX0lOVEVSRkFDRTIoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBL
SEVMUEVSLCBWQUxVRV9OQU1FLCBWQUxVRV9UWVBFLCBWSEVMUEVSKQotLy8lI3ByYWdtYSBtYXJr
IC0gS0VZX05BTUUgLT4gVkFMVUVfTkFNRQotLy8lCi0vLyVAaW50ZXJmYWNlIEdQQiMjS0VZX05B
TUUjI1ZBTFVFX05BTUUjI0RpY3Rpb25hcnkgOiBOU09iamVjdCA8TlNDb3B5aW5nPgotLy8lCi0v
LyVAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBjb3VudDsKLS8vJUBw
cm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMgdmFsaWRh
dGlvbkZ1bmM7Ci0vLyUKLS8vJSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5OwotLy8lKyAoaW5z
dGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihudWxsYWJsZSBHUEJF
bnVtVmFsaWRhdGlvbkZ1bmMpZnVuYzsKLS8vJSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMK
LS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZTooVkFM
VUVfVFlQRSlyYXdWYWx1ZQotLy8lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yS2V5OihLRVlfVFlQRSMjS2lzUCRTIyNLaXNQKWtleTsKLS8vJSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZh
bGlkYXRpb25GdW5jKWZ1bmMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJhd1ZhbHVlczooY29uc3QgVkFMVUVfVFlQRSBBUlJBWV9BUkdfTU9ESUZJRVIjI1ZIRUxQ
RVIoKVtdKXZhbHVlcwotLy8lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXlzOihjb25zdCBLRVlfVFlQRSMjS2lzUCRTIyNLaXNQIEFSUkFZX0FSR19NT0RJRklF
UiMjS0hFTFBFUigpW10pa2V5cwotLy8lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50OwotLy8lKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCIyNLRVlfTkFNRSMjVkFMVUVfTkFNRSMjRGljdGlv
bmFyeSAqKWRpY3Rpb25hcnk7Ci0vLyUrIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxp
ZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0vLyUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVn
ZXIpbnVtSXRlbXM7Ci0vLyUKLS8vJS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbGlkYXRpb25G
dW5jdGlvbjoobnVsbGFibGUgR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmM7Ci0vLyUtIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxp
ZGF0aW9uRnVuYylmdW5jCi0vLyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdW
YWx1ZXM6KGNvbnN0IFZBTFVFX1RZUEUgQVJSQVlfQVJHX01PRElGSUVSIyNWSEVMUEVSKClbXSl2
YWx1ZXMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29u
c3QgS0VZX1RZUEUjI0tpc1AkUyMjS2lzUCBBUlJBWV9BUkdfTU9ESUZJRVIjI0tIRUxQRVIoKVtd
KWtleXMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNV
SW50ZWdlciljb3VudCBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOwotLy8lLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCIyNLRVlfTkFNRSMjVkFMVUVfTkFNRSMjRGljdGlv
bmFyeSAqKWRpY3Rpb25hcnk7Ci0vLyUtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9u
RnVuY3Rpb246KG51bGxhYmxlIEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0vLyUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXM7
Ci0vLyUKLS8vJS8vIFRoZXNlIHdpbGwgcmV0dXJuIGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9y
VmFsdWUgaWYgdGhlIHZhbHVlIGZvciB0aGUga2V5Ci0vLyUvLyBpcyBub3QgYSB2YWxpZCBlbnVt
ZXJhdG9yIGFzIGRlZmluZWQgYnkgdmFsaWRhdGlvbkZ1bmMuIElmIHRoZSBhY3R1YWwgdmFsdWUg
aXMKLS8vJS8vIGRlc2lyZWQsIHVzZSAicmF3IiB2ZXJzaW9uIG9mIHRoZSBtZXRob2QuCi0vLyUK
LS8vJURJQ1RJT05BUllfSU1NVVRBQkxFX0lOVEVSRkFDRShLRVlfTkFNRSwgS0VZX1RZUEUsIEtp
c1AsIFZBTFVFX05BTUUsIFZBTFVFX1RZUEUsIFZIRUxQRVIsIHZhbHVlKQotLy8lCi0vLyUvLyBU
aGVzZSBtZXRob2RzIGJ5cGFzcyB0aGUgdmFsaWRhdGlvbkZ1bmMgdG8gcHJvdmlkZSBhY2Nlc3Mg
dG8gdmFsdWVzIHRoYXQgd2VyZSBub3QKLS8vJS8vIGtub3duIGF0IHRoZSB0aW1lIHRoZSBiaW5h
cnkgd2FzIGNvbXBpbGVkLgotLy8lCi0vLyUtIChCT09MKXZhbHVlRm9yS2V5OihLRVlfVFlQRSMj
S2lzUCRTIyNLaXNQKWtleSByYXdWYWx1ZToobnVsbGFibGUgVkFMVUVfVFlQRSAqKXJhd1ZhbHVl
OwotLy8lCi0vLyUtICh2b2lkKWVudW1lcmF0ZUtleXNBbmRSYXdWYWx1ZXNVc2luZ0Jsb2NrOgot
Ly8lICAgICh2b2lkICheKShLRVlfVFlQRSBLaXNQIyNrZXksIFZBTFVFX1RZUEUgcmF3VmFsdWUs
IEJPT0wgKnN0b3ApKWJsb2NrOwotLy8lCi0vLyUtICh2b2lkKWFkZFJhd0VudHJpZXNGcm9tRGlj
dGlvbmFyeTooR1BCIyNLRVlfTkFNRSMjVkFMVUVfTkFNRSMjRGljdGlvbmFyeSAqKW90aGVyRGlj
dGlvbmFyeTsKLS8vJQotLy8lLy8gSWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBh
cyBkZWZpbmVkIGJ5IHZhbGlkYXRpb25GdW5jLCB0aGVzZQotLy8lLy8gbWV0aG9kcyB3aWxsIGFz
c2VydCBpbiBkZWJ1ZywgYW5kIHdpbGwgbG9nIGluIHJlbGVhc2UgYW5kIGFzc2lnbiB0aGUgdmFs
dWUKLS8vJS8vIHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBVc2UgdGhlIHJhd1ZhbHVlIG1ldGhvZHMg
YmVsb3cgdG8gYXNzaWduIG5vbiBlbnVtZXJhdG9yCi0vLyUvLyB2YWx1ZXMuCi0vLyUKLS8vJURJ
Q1RJT05BUllfTVVUQUJMRV9JTlRFUkZBQ0UoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBWQUxV
RV9OQU1FLCBWQUxVRV9UWVBFLCBWSEVMUEVSLCB2YWx1ZSkKLS8vJQotLy8lQGVuZAotLy8lCi0K
LS8vJVBERE0tREVGSU5FIERJQ1RJT05BUllfSU1NVVRBQkxFX0lOVEVSRkFDRShLRVlfTkFNRSwg
S0VZX1RZUEUsIEtpc1AsIFZBTFVFX05BTUUsIFZBTFVFX1RZUEUsIFZIRUxQRVIsIFZOQU1FKQot
Ly8lVkFMVUVfRk9SX0tFWV8jI1ZIRUxQRVIoS0VZX1RZUEUjI0tpc1AkUyMjS2lzUCwgVkFMVUVf
VFlQRSkKLS8vJQotLy8lLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kIyNWTkFNRSR1IyNzVXNpbmdC
bG9jazoKLS8vJSAgICAodm9pZCAoXikoS0VZX1RZUEUgS2lzUCMja2V5LCBWQUxVRV9UWVBFIFZO
QU1FLCBCT09MICpzdG9wKSlibG9jazsKLQotLy8lUERETS1ERUZJTkUgRElDVElPTkFSWV9NVVRB
QkxFX0lOVEVSRkFDRShLRVlfTkFNRSwgS0VZX1RZUEUsIEtpc1AsIFZBTFVFX05BTUUsIFZBTFVF
X1RZUEUsIFZIRUxQRVIsIFZOQU1FKQotLy8lLSAodm9pZClzZXQjI1ZOQU1FJHUjIzooVkFMVUVf
VFlQRSkjI1ZOQU1FIGZvcktleTooS0VZX1RZUEUjI0tpc1AkUyMjS2lzUClrZXk7Ci0vLyVESUNU
SU9OQVJZX0VYVFJBX01VVEFCTEVfTUVUSE9EU18jI1ZIRUxQRVIoS0VZX05BTUUsIEtFWV9UWVBF
LCBLaXNQLCBWQUxVRV9OQU1FLCBWQUxVRV9UWVBFKQotLy8lLSAodm9pZClyZW1vdmUjI1ZOQU1F
JHUjI0ZvcktleTooS0VZX1RZUEUjI0tpc1AkUyMjS2lzUClhS2V5OwotLy8lLSAodm9pZClyZW1v
dmVBbGw7Ci0KLS8vJVBERE0tREVGSU5FIERJQ1RJT05BUllfRVhUUkFfTVVUQUJMRV9NRVRIT0RT
X1BPRChLRVlfTkFNRSwgS0VZX1RZUEUsIEtpc1AsIFZBTFVFX05BTUUsIFZBTFVFX1RZUEUpCi0v
LyBFbXB0eQotLy8lUERETS1ERUZJTkUgRElDVElPTkFSWV9FWFRSQV9NVVRBQkxFX01FVEhPRFNf
T0JKRUNUKEtFWV9OQU1FLCBLRVlfVFlQRSwgS2lzUCwgVkFMVUVfTkFNRSwgVkFMVUVfVFlQRSkK
LS8vIEVtcHR5Ci0vLyVQRERNLURFRklORSBESUNUSU9OQVJZX0VYVFJBX01VVEFCTEVfTUVUSE9E
U19FbnVtKEtFWV9OQU1FLCBLRVlfVFlQRSwgS2lzUCwgVkFMVUVfTkFNRSwgVkFMVUVfVFlQRSkK
LS8vJQotLy8lLy8gVGhpcyBtZXRob2QgYnlwYXNzIHRoZSB2YWxpZGF0aW9uRnVuYyB0byBwcm92
aWRlIHNldHRpbmcgb2YgdmFsdWVzIHRoYXQgd2VyZSBub3QKLS8vJS8vIGtub3duIGF0IHRoZSB0
aW1lIHRoZSBiaW5hcnkgd2FzIGNvbXBpbGVkLgotLy8lLSAodm9pZClzZXRSYXdWYWx1ZTooVkFM
VUVfVFlQRSlyYXdWYWx1ZSBmb3JLZXk6KEtFWV9UWVBFIyNLaXNQJFMjI0tpc1Apa2V5OwotLy8l
Ci0vLyUvLyBObyB2YWxpZGF0aW9uIGFwcGxpZXMgdG8gdGhlc2UgbWV0aG9kcy4KLS8vJQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9vYmplY3RpdmVjL0dQQkRpY3Rpb25hcnkubSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJEaWN0aW9u
YXJ5Lm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZDE0NmUwZjllNTY4YWY4YzRm
OThjOWRhN2YxM2ZhODM5MTJkYzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkRpY3Rpb25hcnkubQorKysgL2Rldi9udWxsCkBAIC0x
LDEzNTU1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW1w
b3J0ICJHUEJEaWN0aW9uYXJ5X1BhY2thZ2VQcml2YXRlLmgiCi0KLSNpbXBvcnQgIkdQQkNvZGVk
SW5wdXRTdHJlYW1fUGFja2FnZVByaXZhdGUuaCIKLSNpbXBvcnQgIkdQQkNvZGVkT3V0cHV0U3Ry
ZWFtX1BhY2thZ2VQcml2YXRlLmgiCi0jaW1wb3J0ICJHUEJEZXNjcmlwdG9yX1BhY2thZ2VQcml2
YXRlLmgiCi0jaW1wb3J0ICJHUEJNZXNzYWdlX1BhY2thZ2VQcml2YXRlLmgiCi0jaW1wb3J0ICJH
UEJVdGlsaXRpZXNfUGFja2FnZVByaXZhdGUuaCIKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIE5PVEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBBdCB0aGUg
bW9tZW50LCB0aGlzIGlzIGFsbCB1c2luZyBOU051bWJlcnMgaW4gTlNEaWN0aW9uYXJpZXMgdW5k
ZXIKLS8vIHRoZSBob29kLCBidXQgaXQgaXMgYWxsIGhpZGRlbiBzbyB3ZSBjYW4gY29tZSBiYWNr
IGFuZCBvcHRpbWl6ZQotLy8gd2l0aCBkaXJlY3QgQ0ZEaWN0aW9uYXJ5IHVzYWdlIGxhdGVyLiAg
VGhlIHJlYXNvbiB0aGF0IHdhc24ndAotLy8gZG9uZSB5ZXQgaXMgbmVlZGluZyB0byBzdXBwb3J0
IDMyYml0IGlPUyBidWlsZHMuICBPdGhlcndpc2UKLS8vIGl0IHdvdWxkIGJlIHByZXR0eSBzaW1w
bGUgdG8gc3RvcmUgYWxsIHRoaXMgZGF0YSBpbiBDRkRpY3Rpb25hcmllcwotLy8gZGlyZWN0bHku
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotLy8gVXNlZCB0byBpbmNsdWRlIGNvZGUgb25seSB2aXNpYmxlIHRv
IHNwZWNpZmljIHZlcnNpb25zIG9mIHRoZSBzdGF0aWMKLS8vIGFuYWx5emVyLiBVc2VmdWwgZm9y
IHdyYXBwaW5nIGNvZGUgdGhhdCBvbmx5IGV4aXN0cyB0byBzaWxlbmNlIHRoZSBhbmFseXplci4K
LS8vIERldGVybWluZSB0aGUgdmFsdWVzIHlvdSB3YW50IHRvIHVzZSBmb3IgQkVHSU5fQVBQTEVf
QlVJTERfVkVSU0lPTiwKLS8vIEVORF9BUFBMRV9CVUlMRF9WRVJTSU9OIHVzaW5nOgotLy8gICB4
Y3J1biBjbGFuZyAtZE0gLUUgLXggYyAvZGV2L251bGwgfCBncmVwIF9fYXBwbGVfYnVpbGRfdmVy
c2lvbl9fCi0vLyBFeGFtcGxlIHVzYWdlOgotLy8gICNpZiBHUEJfU1RBVElDX0FOQUxZWkVSX09O
TFkoNTYyMSwgNTYyMykgLi4uICNlbmRpZgotI2RlZmluZSBHUEJfU1RBVElDX0FOQUxZWkVSX09O
TFkoQkVHSU5fQVBQTEVfQlVJTERfVkVSU0lPTiwgRU5EX0FQUExFX0JVSUxEX1ZFUlNJT04pIFwK
LSAgICAoZGVmaW5lZChfX2NsYW5nX2FuYWx5emVyX18pICYmIFwKLSAgICAgKF9fYXBwbGVfYnVp
bGRfdmVyc2lvbl9fID49IEJFR0lOX0FQUExFX0JVSUxEX1ZFUlNJT04gJiYgXAotICAgICAgX19h
cHBsZV9idWlsZF92ZXJzaW9uX18gPD0gRU5EX0FQUExFX0JVSUxEX1ZFUlNJT04pKQotCi1lbnVt
IHsKLSAga01hcEtleUZpZWxkTnVtYmVyID0gMSwKLSAga01hcFZhbHVlRmllbGROdW1iZXIgPSAy
LAotfTsKLQotc3RhdGljIEJPT0wgRGljdERlZmF1bHRfSXNWYWxpZFZhbHVlKGludDMyX3QgdmFs
dWUpIHsKLSAgLy8gQW55dGhpbmcgYnV0IHRoZSBiYWQgdmFsdWUgbWFya2VyIGlzIGFsbG93ZWQu
Ci0gIHJldHVybiAodmFsdWUgIT0ga0dQQlVucmVjb2duaXplZEVudW1lcmF0b3JWYWx1ZSk7Ci19
Ci0KLS8vJVBERE0tREVGSU5FIFNFUklBTElaRV9TVVBQT1JUXzJfVFlQRShWQUxVRV9OQU1FLCBW
QUxVRV9UWVBFLCBHUEJEQVRBVFlQRV9OQU1FMSwgR1BCREFUQVRZUEVfTkFNRTIpCi0vLyVzdGF0
aWMgc2l6ZV90IENvbXB1dGVEaWN0IyNWQUxVRV9OQU1FIyNGaWVsZFNpemUoVkFMVUVfVFlQRSB2
YWx1ZSwgdWludDMyX3QgZmllbGROdW0sIEdQQkRhdGFUeXBlIGRhdGFUeXBlKSB7Ci0vLyUgIGlm
IChkYXRhVHlwZSA9PSBHUEJEYXRhVHlwZSMjR1BCREFUQVRZUEVfTkFNRTEpIHsKLS8vJSAgICBy
ZXR1cm4gR1BCQ29tcHV0ZSMjR1BCREFUQVRZUEVfTkFNRTEjI1NpemUoZmllbGROdW0sIHZhbHVl
KTsKLS8vJSAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PSBHUEJEYXRhVHlwZSMjR1BCREFUQVRZUEVf
TkFNRTIpIHsKLS8vJSAgICByZXR1cm4gR1BCQ29tcHV0ZSMjR1BCREFUQVRZUEVfTkFNRTIjI1Np
emUoZmllbGROdW0sIHZhbHVlKTsKLS8vJSAgfSBlbHNlIHsKLS8vJSAgICBOU0NBc3NlcnQoTk8s
IEAiVW5leHBlY3RlZCB0eXBlICVkIiwgZGF0YVR5cGUpOwotLy8lICAgIHJldHVybiAwOwotLy8l
ICB9Ci0vLyV9Ci0vLyUKLS8vJXN0YXRpYyB2b2lkIFdyaXRlRGljdCMjVkFMVUVfTkFNRSMjRmll
bGQoR1BCQ29kZWRPdXRwdXRTdHJlYW0gKnN0cmVhbSwgVkFMVUVfVFlQRSB2YWx1ZSwgdWludDMy
X3QgZmllbGROdW0sIEdQQkRhdGFUeXBlIGRhdGFUeXBlKSB7Ci0vLyUgIGlmIChkYXRhVHlwZSA9
PSBHUEJEYXRhVHlwZSMjR1BCREFUQVRZUEVfTkFNRTEpIHsKLS8vJSAgICBbc3RyZWFtIHdyaXRl
IyNHUEJEQVRBVFlQRV9OQU1FMSMjOmZpZWxkTnVtIHZhbHVlOnZhbHVlXTsKLS8vJSAgfSBlbHNl
IGlmIChkYXRhVHlwZSA9PSBHUEJEYXRhVHlwZSMjR1BCREFUQVRZUEVfTkFNRTIpIHsKLS8vJSAg
ICBbc3RyZWFtIHdyaXRlIyNHUEJEQVRBVFlQRV9OQU1FMiMjOmZpZWxkTnVtIHZhbHVlOnZhbHVl
XTsKLS8vJSAgfSBlbHNlIHsKLS8vJSAgICBOU0NBc3NlcnQoTk8sIEAiVW5leHBlY3RlZCB0eXBl
ICVkIiwgZGF0YVR5cGUpOwotLy8lICB9Ci0vLyV9Ci0vLyUKLS8vJVBERE0tREVGSU5FIFNFUklB
TElaRV9TVVBQT1JUXzNfVFlQRShWQUxVRV9OQU1FLCBWQUxVRV9UWVBFLCBHUEJEQVRBVFlQRV9O
QU1FMSwgR1BCREFUQVRZUEVfTkFNRTIsIEdQQkRBVEFUWVBFX05BTUUzKQotLy8lc3RhdGljIHNp
emVfdCBDb21wdXRlRGljdCMjVkFMVUVfTkFNRSMjRmllbGRTaXplKFZBTFVFX1RZUEUgdmFsdWUs
IHVpbnQzMl90IGZpZWxkTnVtLCBHUEJEYXRhVHlwZSBkYXRhVHlwZSkgewotLy8lICBpZiAoZGF0
YVR5cGUgPT0gR1BCRGF0YVR5cGUjI0dQQkRBVEFUWVBFX05BTUUxKSB7Ci0vLyUgICAgcmV0dXJu
IEdQQkNvbXB1dGUjI0dQQkRBVEFUWVBFX05BTUUxIyNTaXplKGZpZWxkTnVtLCB2YWx1ZSk7Ci0v
LyUgIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGUjI0dQQkRBVEFUWVBFX05BTUUy
KSB7Ci0vLyUgICAgcmV0dXJuIEdQQkNvbXB1dGUjI0dQQkRBVEFUWVBFX05BTUUyIyNTaXplKGZp
ZWxkTnVtLCB2YWx1ZSk7Ci0vLyUgIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGUj
I0dQQkRBVEFUWVBFX05BTUUzKSB7Ci0vLyUgICAgcmV0dXJuIEdQQkNvbXB1dGUjI0dQQkRBVEFU
WVBFX05BTUUzIyNTaXplKGZpZWxkTnVtLCB2YWx1ZSk7Ci0vLyUgIH0gZWxzZSB7Ci0vLyUgICAg
TlNDQXNzZXJ0KE5PLCBAIlVuZXhwZWN0ZWQgdHlwZSAlZCIsIGRhdGFUeXBlKTsKLS8vJSAgICBy
ZXR1cm4gMDsKLS8vJSAgfQotLy8lfQotLy8lCi0vLyVzdGF0aWMgdm9pZCBXcml0ZURpY3QjI1ZB
TFVFX05BTUUjI0ZpZWxkKEdQQkNvZGVkT3V0cHV0U3RyZWFtICpzdHJlYW0sIFZBTFVFX1RZUEUg
dmFsdWUsIHVpbnQzMl90IGZpZWxkTnVtLCBHUEJEYXRhVHlwZSBkYXRhVHlwZSkgewotLy8lICBp
ZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGUjI0dQQkRBVEFUWVBFX05BTUUxKSB7Ci0vLyUgICAg
W3N0cmVhbSB3cml0ZSMjR1BCREFUQVRZUEVfTkFNRTEjIzpmaWVsZE51bSB2YWx1ZTp2YWx1ZV07
Ci0vLyUgIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGUjI0dQQkRBVEFUWVBFX05B
TUUyKSB7Ci0vLyUgICAgW3N0cmVhbSB3cml0ZSMjR1BCREFUQVRZUEVfTkFNRTIjIzpmaWVsZE51
bSB2YWx1ZTp2YWx1ZV07Ci0vLyUgIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGUj
I0dQQkRBVEFUWVBFX05BTUUzKSB7Ci0vLyUgICAgW3N0cmVhbSB3cml0ZSMjR1BCREFUQVRZUEVf
TkFNRTMjIzpmaWVsZE51bSB2YWx1ZTp2YWx1ZV07Ci0vLyUgIH0gZWxzZSB7Ci0vLyUgICAgTlND
QXNzZXJ0KE5PLCBAIlVuZXhwZWN0ZWQgdHlwZSAlZCIsIGRhdGFUeXBlKTsKLS8vJSAgfQotLy8l
fQotLy8lCi0vLyVQRERNLURFRklORSBTSU1QTEVfU0VSSUFMSVpFX1NVUFBPUlQoVkFMVUVfTkFN
RSwgVkFMVUVfVFlQRSwgVmlzUCkKLS8vJXN0YXRpYyBzaXplX3QgQ29tcHV0ZURpY3QjI1ZBTFVF
X05BTUUjI0ZpZWxkU2l6ZShWQUxVRV9UWVBFIFZpc1AjI3ZhbHVlLCB1aW50MzJfdCBmaWVsZE51
bSwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpIHsKLS8vJSAgTlNDQXNzZXJ0KGRhdGFUeXBlID09IEdQ
QkRhdGFUeXBlIyNWQUxVRV9OQU1FLCBAImJhZCB0eXBlOiAlZCIsIGRhdGFUeXBlKTsKLS8vJSAg
I3ByYWdtYSB1bnVzZWQoZGF0YVR5cGUpICAvLyBGb3Igd2hlbiBhc3NlcnRzIGFyZSBvZmYgaW4g
cmVsZWFzZS4KLS8vJSAgcmV0dXJuIEdQQkNvbXB1dGUjI1ZBTFVFX05BTUUjI1NpemUoZmllbGRO
dW0sIHZhbHVlKTsKLS8vJX0KLS8vJQotLy8lc3RhdGljIHZvaWQgV3JpdGVEaWN0IyNWQUxVRV9O
QU1FIyNGaWVsZChHUEJDb2RlZE91dHB1dFN0cmVhbSAqc3RyZWFtLCBWQUxVRV9UWVBFIFZpc1Aj
I3ZhbHVlLCB1aW50MzJfdCBmaWVsZE51bSwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpIHsKLS8vJSAg
TlNDQXNzZXJ0KGRhdGFUeXBlID09IEdQQkRhdGFUeXBlIyNWQUxVRV9OQU1FLCBAImJhZCB0eXBl
OiAlZCIsIGRhdGFUeXBlKTsKLS8vJSAgI3ByYWdtYSB1bnVzZWQoZGF0YVR5cGUpICAvLyBGb3Ig
d2hlbiBhc3NlcnRzIGFyZSBvZmYgaW4gcmVsZWFzZS4KLS8vJSAgW3N0cmVhbSB3cml0ZSMjVkFM
VUVfTkFNRSMjOmZpZWxkTnVtIHZhbHVlOnZhbHVlXTsKLS8vJX0KLS8vJQotLy8lUERETS1ERUZJ
TkUgU0VSSUFMSVpFX1NVUFBPUlRfSEVMUEVSUygpCi0vLyVTRVJJQUxJWkVfU1VQUE9SVF8zX1RZ
UEUoSW50MzIsIGludDMyX3QsIEludDMyLCBTSW50MzIsIFNGaXhlZDMyKQotLy8lU0VSSUFMSVpF
X1NVUFBPUlRfMl9UWVBFKFVJbnQzMiwgdWludDMyX3QsIFVJbnQzMiwgRml4ZWQzMikKLS8vJVNF
UklBTElaRV9TVVBQT1JUXzNfVFlQRShJbnQ2NCwgaW50NjRfdCwgSW50NjQsIFNJbnQ2NCwgU0Zp
eGVkNjQpCi0vLyVTRVJJQUxJWkVfU1VQUE9SVF8yX1RZUEUoVUludDY0LCB1aW50NjRfdCwgVUlu
dDY0LCBGaXhlZDY0KQotLy8lU0lNUExFX1NFUklBTElaRV9TVVBQT1JUKEJvb2wsIEJPT0wsICkK
LS8vJVNJTVBMRV9TRVJJQUxJWkVfU1VQUE9SVChFbnVtLCBpbnQzMl90LCApCi0vLyVTSU1QTEVf
U0VSSUFMSVpFX1NVUFBPUlQoRmxvYXQsIGZsb2F0LCApCi0vLyVTSU1QTEVfU0VSSUFMSVpFX1NV
UFBPUlQoRG91YmxlLCBkb3VibGUsICkKLS8vJVNJTVBMRV9TRVJJQUxJWkVfU1VQUE9SVChTdHJp
bmcsIE5TU3RyaW5nLCAqKQotLy8lU0VSSUFMSVpFX1NVUFBPUlRfM19UWVBFKE9iamVjdCwgaWQs
IE1lc3NhZ2UsIFN0cmluZywgQnl0ZXMpCi0vLyVQRERNLUVYUEFORCBTRVJJQUxJWkVfU1VQUE9S
VF9IRUxQRVJTKCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBl
ZGl0IGl0IGRpcmVjdGx5LgotCi1zdGF0aWMgc2l6ZV90IENvbXB1dGVEaWN0SW50MzJGaWVsZFNp
emUoaW50MzJfdCB2YWx1ZSwgdWludDMyX3QgZmllbGROdW0sIEdQQkRhdGFUeXBlIGRhdGFUeXBl
KSB7Ci0gIGlmIChkYXRhVHlwZSA9PSBHUEJEYXRhVHlwZUludDMyKSB7Ci0gICAgcmV0dXJuIEdQ
QkNvbXB1dGVJbnQzMlNpemUoZmllbGROdW0sIHZhbHVlKTsKLSAgfSBlbHNlIGlmIChkYXRhVHlw
ZSA9PSBHUEJEYXRhVHlwZVNJbnQzMikgewotICAgIHJldHVybiBHUEJDb21wdXRlU0ludDMyU2l6
ZShmaWVsZE51bSwgdmFsdWUpOwotICB9IGVsc2UgaWYgKGRhdGFUeXBlID09IEdQQkRhdGFUeXBl
U0ZpeGVkMzIpIHsKLSAgICByZXR1cm4gR1BCQ29tcHV0ZVNGaXhlZDMyU2l6ZShmaWVsZE51bSwg
dmFsdWUpOwotICB9IGVsc2UgewotICAgIE5TQ0Fzc2VydChOTywgQCJVbmV4cGVjdGVkIHR5cGUg
JWQiLCBkYXRhVHlwZSk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgV3Jp
dGVEaWN0SW50MzJGaWVsZChHUEJDb2RlZE91dHB1dFN0cmVhbSAqc3RyZWFtLCBpbnQzMl90IHZh
bHVlLCB1aW50MzJfdCBmaWVsZE51bSwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpIHsKLSAgaWYgKGRh
dGFUeXBlID09IEdQQkRhdGFUeXBlSW50MzIpIHsKLSAgICBbc3RyZWFtIHdyaXRlSW50MzI6Zmll
bGROdW0gdmFsdWU6dmFsdWVdOwotICB9IGVsc2UgaWYgKGRhdGFUeXBlID09IEdQQkRhdGFUeXBl
U0ludDMyKSB7Ci0gICAgW3N0cmVhbSB3cml0ZVNJbnQzMjpmaWVsZE51bSB2YWx1ZTp2YWx1ZV07
Ci0gIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVTRml4ZWQzMikgewotICAgIFtz
dHJlYW0gd3JpdGVTRml4ZWQzMjpmaWVsZE51bSB2YWx1ZTp2YWx1ZV07Ci0gIH0gZWxzZSB7Ci0g
ICAgTlNDQXNzZXJ0KE5PLCBAIlVuZXhwZWN0ZWQgdHlwZSAlZCIsIGRhdGFUeXBlKTsKLSAgfQot
fQotCi1zdGF0aWMgc2l6ZV90IENvbXB1dGVEaWN0VUludDMyRmllbGRTaXplKHVpbnQzMl90IHZh
bHVlLCB1aW50MzJfdCBmaWVsZE51bSwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpIHsKLSAgaWYgKGRh
dGFUeXBlID09IEdQQkRhdGFUeXBlVUludDMyKSB7Ci0gICAgcmV0dXJuIEdQQkNvbXB1dGVVSW50
MzJTaXplKGZpZWxkTnVtLCB2YWx1ZSk7Ci0gIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT0gR1BCRGF0
YVR5cGVGaXhlZDMyKSB7Ci0gICAgcmV0dXJuIEdQQkNvbXB1dGVGaXhlZDMyU2l6ZShmaWVsZE51
bSwgdmFsdWUpOwotICB9IGVsc2UgewotICAgIE5TQ0Fzc2VydChOTywgQCJVbmV4cGVjdGVkIHR5
cGUgJWQiLCBkYXRhVHlwZSk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQg
V3JpdGVEaWN0VUludDMyRmllbGQoR1BCQ29kZWRPdXRwdXRTdHJlYW0gKnN0cmVhbSwgdWludDMy
X3QgdmFsdWUsIHVpbnQzMl90IGZpZWxkTnVtLCBHUEJEYXRhVHlwZSBkYXRhVHlwZSkgewotICBp
ZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVVSW50MzIpIHsKLSAgICBbc3RyZWFtIHdyaXRlVUlu
dDMyOmZpZWxkTnVtIHZhbHVlOnZhbHVlXTsKLSAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PSBHUEJE
YXRhVHlwZUZpeGVkMzIpIHsKLSAgICBbc3RyZWFtIHdyaXRlRml4ZWQzMjpmaWVsZE51bSB2YWx1
ZTp2YWx1ZV07Ci0gIH0gZWxzZSB7Ci0gICAgTlNDQXNzZXJ0KE5PLCBAIlVuZXhwZWN0ZWQgdHlw
ZSAlZCIsIGRhdGFUeXBlKTsKLSAgfQotfQotCi1zdGF0aWMgc2l6ZV90IENvbXB1dGVEaWN0SW50
NjRGaWVsZFNpemUoaW50NjRfdCB2YWx1ZSwgdWludDMyX3QgZmllbGROdW0sIEdQQkRhdGFUeXBl
IGRhdGFUeXBlKSB7Ci0gIGlmIChkYXRhVHlwZSA9PSBHUEJEYXRhVHlwZUludDY0KSB7Ci0gICAg
cmV0dXJuIEdQQkNvbXB1dGVJbnQ2NFNpemUoZmllbGROdW0sIHZhbHVlKTsKLSAgfSBlbHNlIGlm
IChkYXRhVHlwZSA9PSBHUEJEYXRhVHlwZVNJbnQ2NCkgewotICAgIHJldHVybiBHUEJDb21wdXRl
U0ludDY0U2l6ZShmaWVsZE51bSwgdmFsdWUpOwotICB9IGVsc2UgaWYgKGRhdGFUeXBlID09IEdQ
QkRhdGFUeXBlU0ZpeGVkNjQpIHsKLSAgICByZXR1cm4gR1BCQ29tcHV0ZVNGaXhlZDY0U2l6ZShm
aWVsZE51bSwgdmFsdWUpOwotICB9IGVsc2UgewotICAgIE5TQ0Fzc2VydChOTywgQCJVbmV4cGVj
dGVkIHR5cGUgJWQiLCBkYXRhVHlwZSk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3RhdGlj
IHZvaWQgV3JpdGVEaWN0SW50NjRGaWVsZChHUEJDb2RlZE91dHB1dFN0cmVhbSAqc3RyZWFtLCBp
bnQ2NF90IHZhbHVlLCB1aW50MzJfdCBmaWVsZE51bSwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpIHsK
LSAgaWYgKGRhdGFUeXBlID09IEdQQkRhdGFUeXBlSW50NjQpIHsKLSAgICBbc3RyZWFtIHdyaXRl
SW50NjQ6ZmllbGROdW0gdmFsdWU6dmFsdWVdOwotICB9IGVsc2UgaWYgKGRhdGFUeXBlID09IEdQ
QkRhdGFUeXBlU0ludDY0KSB7Ci0gICAgW3N0cmVhbSB3cml0ZVNJbnQ2NDpmaWVsZE51bSB2YWx1
ZTp2YWx1ZV07Ci0gIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVTRml4ZWQ2NCkg
ewotICAgIFtzdHJlYW0gd3JpdGVTRml4ZWQ2NDpmaWVsZE51bSB2YWx1ZTp2YWx1ZV07Ci0gIH0g
ZWxzZSB7Ci0gICAgTlNDQXNzZXJ0KE5PLCBAIlVuZXhwZWN0ZWQgdHlwZSAlZCIsIGRhdGFUeXBl
KTsKLSAgfQotfQotCi1zdGF0aWMgc2l6ZV90IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKHVp
bnQ2NF90IHZhbHVlLCB1aW50MzJfdCBmaWVsZE51bSwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpIHsK
LSAgaWYgKGRhdGFUeXBlID09IEdQQkRhdGFUeXBlVUludDY0KSB7Ci0gICAgcmV0dXJuIEdQQkNv
bXB1dGVVSW50NjRTaXplKGZpZWxkTnVtLCB2YWx1ZSk7Ci0gIH0gZWxzZSBpZiAoZGF0YVR5cGUg
PT0gR1BCRGF0YVR5cGVGaXhlZDY0KSB7Ci0gICAgcmV0dXJuIEdQQkNvbXB1dGVGaXhlZDY0U2l6
ZShmaWVsZE51bSwgdmFsdWUpOwotICB9IGVsc2UgewotICAgIE5TQ0Fzc2VydChOTywgQCJVbmV4
cGVjdGVkIHR5cGUgJWQiLCBkYXRhVHlwZSk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3Rh
dGljIHZvaWQgV3JpdGVEaWN0VUludDY0RmllbGQoR1BCQ29kZWRPdXRwdXRTdHJlYW0gKnN0cmVh
bSwgdWludDY0X3QgdmFsdWUsIHVpbnQzMl90IGZpZWxkTnVtLCBHUEJEYXRhVHlwZSBkYXRhVHlw
ZSkgewotICBpZiAoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVVSW50NjQpIHsKLSAgICBbc3RyZWFt
IHdyaXRlVUludDY0OmZpZWxkTnVtIHZhbHVlOnZhbHVlXTsKLSAgfSBlbHNlIGlmIChkYXRhVHlw
ZSA9PSBHUEJEYXRhVHlwZUZpeGVkNjQpIHsKLSAgICBbc3RyZWFtIHdyaXRlRml4ZWQ2NDpmaWVs
ZE51bSB2YWx1ZTp2YWx1ZV07Ci0gIH0gZWxzZSB7Ci0gICAgTlNDQXNzZXJ0KE5PLCBAIlVuZXhw
ZWN0ZWQgdHlwZSAlZCIsIGRhdGFUeXBlKTsKLSAgfQotfQotCi1zdGF0aWMgc2l6ZV90IENvbXB1
dGVEaWN0Qm9vbEZpZWxkU2l6ZShCT09MIHZhbHVlLCB1aW50MzJfdCBmaWVsZE51bSwgR1BCRGF0
YVR5cGUgZGF0YVR5cGUpIHsKLSAgTlNDQXNzZXJ0KGRhdGFUeXBlID09IEdQQkRhdGFUeXBlQm9v
bCwgQCJiYWQgdHlwZTogJWQiLCBkYXRhVHlwZSk7Ci0gICNwcmFnbWEgdW51c2VkKGRhdGFUeXBl
KSAgLy8gRm9yIHdoZW4gYXNzZXJ0cyBhcmUgb2ZmIGluIHJlbGVhc2UuCi0gIHJldHVybiBHUEJD
b21wdXRlQm9vbFNpemUoZmllbGROdW0sIHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgV3JpdGVE
aWN0Qm9vbEZpZWxkKEdQQkNvZGVkT3V0cHV0U3RyZWFtICpzdHJlYW0sIEJPT0wgdmFsdWUsIHVp
bnQzMl90IGZpZWxkTnVtLCBHUEJEYXRhVHlwZSBkYXRhVHlwZSkgewotICBOU0NBc3NlcnQoZGF0
YVR5cGUgPT0gR1BCRGF0YVR5cGVCb29sLCBAImJhZCB0eXBlOiAlZCIsIGRhdGFUeXBlKTsKLSAg
I3ByYWdtYSB1bnVzZWQoZGF0YVR5cGUpICAvLyBGb3Igd2hlbiBhc3NlcnRzIGFyZSBvZmYgaW4g
cmVsZWFzZS4KLSAgW3N0cmVhbSB3cml0ZUJvb2w6ZmllbGROdW0gdmFsdWU6dmFsdWVdOwotfQot
Ci1zdGF0aWMgc2l6ZV90IENvbXB1dGVEaWN0RW51bUZpZWxkU2l6ZShpbnQzMl90IHZhbHVlLCB1
aW50MzJfdCBmaWVsZE51bSwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpIHsKLSAgTlNDQXNzZXJ0KGRh
dGFUeXBlID09IEdQQkRhdGFUeXBlRW51bSwgQCJiYWQgdHlwZTogJWQiLCBkYXRhVHlwZSk7Ci0g
ICNwcmFnbWEgdW51c2VkKGRhdGFUeXBlKSAgLy8gRm9yIHdoZW4gYXNzZXJ0cyBhcmUgb2ZmIGlu
IHJlbGVhc2UuCi0gIHJldHVybiBHUEJDb21wdXRlRW51bVNpemUoZmllbGROdW0sIHZhbHVlKTsK
LX0KLQotc3RhdGljIHZvaWQgV3JpdGVEaWN0RW51bUZpZWxkKEdQQkNvZGVkT3V0cHV0U3RyZWFt
ICpzdHJlYW0sIGludDMyX3QgdmFsdWUsIHVpbnQzMl90IGZpZWxkTnVtLCBHUEJEYXRhVHlwZSBk
YXRhVHlwZSkgewotICBOU0NBc3NlcnQoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVFbnVtLCBAImJh
ZCB0eXBlOiAlZCIsIGRhdGFUeXBlKTsKLSAgI3ByYWdtYSB1bnVzZWQoZGF0YVR5cGUpICAvLyBG
b3Igd2hlbiBhc3NlcnRzIGFyZSBvZmYgaW4gcmVsZWFzZS4KLSAgW3N0cmVhbSB3cml0ZUVudW06
ZmllbGROdW0gdmFsdWU6dmFsdWVdOwotfQotCi1zdGF0aWMgc2l6ZV90IENvbXB1dGVEaWN0Rmxv
YXRGaWVsZFNpemUoZmxvYXQgdmFsdWUsIHVpbnQzMl90IGZpZWxkTnVtLCBHUEJEYXRhVHlwZSBk
YXRhVHlwZSkgewotICBOU0NBc3NlcnQoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVGbG9hdCwgQCJi
YWQgdHlwZTogJWQiLCBkYXRhVHlwZSk7Ci0gICNwcmFnbWEgdW51c2VkKGRhdGFUeXBlKSAgLy8g
Rm9yIHdoZW4gYXNzZXJ0cyBhcmUgb2ZmIGluIHJlbGVhc2UuCi0gIHJldHVybiBHUEJDb21wdXRl
RmxvYXRTaXplKGZpZWxkTnVtLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFdyaXRlRGljdEZs
b2F0RmllbGQoR1BCQ29kZWRPdXRwdXRTdHJlYW0gKnN0cmVhbSwgZmxvYXQgdmFsdWUsIHVpbnQz
Ml90IGZpZWxkTnVtLCBHUEJEYXRhVHlwZSBkYXRhVHlwZSkgewotICBOU0NBc3NlcnQoZGF0YVR5
cGUgPT0gR1BCRGF0YVR5cGVGbG9hdCwgQCJiYWQgdHlwZTogJWQiLCBkYXRhVHlwZSk7Ci0gICNw
cmFnbWEgdW51c2VkKGRhdGFUeXBlKSAgLy8gRm9yIHdoZW4gYXNzZXJ0cyBhcmUgb2ZmIGluIHJl
bGVhc2UuCi0gIFtzdHJlYW0gd3JpdGVGbG9hdDpmaWVsZE51bSB2YWx1ZTp2YWx1ZV07Ci19Ci0K
LXN0YXRpYyBzaXplX3QgQ29tcHV0ZURpY3REb3VibGVGaWVsZFNpemUoZG91YmxlIHZhbHVlLCB1
aW50MzJfdCBmaWVsZE51bSwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpIHsKLSAgTlNDQXNzZXJ0KGRh
dGFUeXBlID09IEdQQkRhdGFUeXBlRG91YmxlLCBAImJhZCB0eXBlOiAlZCIsIGRhdGFUeXBlKTsK
LSAgI3ByYWdtYSB1bnVzZWQoZGF0YVR5cGUpICAvLyBGb3Igd2hlbiBhc3NlcnRzIGFyZSBvZmYg
aW4gcmVsZWFzZS4KLSAgcmV0dXJuIEdQQkNvbXB1dGVEb3VibGVTaXplKGZpZWxkTnVtLCB2YWx1
ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFdyaXRlRGljdERvdWJsZUZpZWxkKEdQQkNvZGVkT3V0cHV0
U3RyZWFtICpzdHJlYW0sIGRvdWJsZSB2YWx1ZSwgdWludDMyX3QgZmllbGROdW0sIEdQQkRhdGFU
eXBlIGRhdGFUeXBlKSB7Ci0gIE5TQ0Fzc2VydChkYXRhVHlwZSA9PSBHUEJEYXRhVHlwZURvdWJs
ZSwgQCJiYWQgdHlwZTogJWQiLCBkYXRhVHlwZSk7Ci0gICNwcmFnbWEgdW51c2VkKGRhdGFUeXBl
KSAgLy8gRm9yIHdoZW4gYXNzZXJ0cyBhcmUgb2ZmIGluIHJlbGVhc2UuCi0gIFtzdHJlYW0gd3Jp
dGVEb3VibGU6ZmllbGROdW0gdmFsdWU6dmFsdWVdOwotfQotCi1zdGF0aWMgc2l6ZV90IENvbXB1
dGVEaWN0U3RyaW5nRmllbGRTaXplKE5TU3RyaW5nICp2YWx1ZSwgdWludDMyX3QgZmllbGROdW0s
IEdQQkRhdGFUeXBlIGRhdGFUeXBlKSB7Ci0gIE5TQ0Fzc2VydChkYXRhVHlwZSA9PSBHUEJEYXRh
VHlwZVN0cmluZywgQCJiYWQgdHlwZTogJWQiLCBkYXRhVHlwZSk7Ci0gICNwcmFnbWEgdW51c2Vk
KGRhdGFUeXBlKSAgLy8gRm9yIHdoZW4gYXNzZXJ0cyBhcmUgb2ZmIGluIHJlbGVhc2UuCi0gIHJl
dHVybiBHUEJDb21wdXRlU3RyaW5nU2l6ZShmaWVsZE51bSwgdmFsdWUpOwotfQotCi1zdGF0aWMg
dm9pZCBXcml0ZURpY3RTdHJpbmdGaWVsZChHUEJDb2RlZE91dHB1dFN0cmVhbSAqc3RyZWFtLCBO
U1N0cmluZyAqdmFsdWUsIHVpbnQzMl90IGZpZWxkTnVtLCBHUEJEYXRhVHlwZSBkYXRhVHlwZSkg
ewotICBOU0NBc3NlcnQoZGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVTdHJpbmcsIEAiYmFkIHR5cGU6
ICVkIiwgZGF0YVR5cGUpOwotICAjcHJhZ21hIHVudXNlZChkYXRhVHlwZSkgIC8vIEZvciB3aGVu
IGFzc2VydHMgYXJlIG9mZiBpbiByZWxlYXNlLgotICBbc3RyZWFtIHdyaXRlU3RyaW5nOmZpZWxk
TnVtIHZhbHVlOnZhbHVlXTsKLX0KLQotc3RhdGljIHNpemVfdCBDb21wdXRlRGljdE9iamVjdEZp
ZWxkU2l6ZShpZCB2YWx1ZSwgdWludDMyX3QgZmllbGROdW0sIEdQQkRhdGFUeXBlIGRhdGFUeXBl
KSB7Ci0gIGlmIChkYXRhVHlwZSA9PSBHUEJEYXRhVHlwZU1lc3NhZ2UpIHsKLSAgICByZXR1cm4g
R1BCQ29tcHV0ZU1lc3NhZ2VTaXplKGZpZWxkTnVtLCB2YWx1ZSk7Ci0gIH0gZWxzZSBpZiAoZGF0
YVR5cGUgPT0gR1BCRGF0YVR5cGVTdHJpbmcpIHsKLSAgICByZXR1cm4gR1BCQ29tcHV0ZVN0cmlu
Z1NpemUoZmllbGROdW0sIHZhbHVlKTsKLSAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PSBHUEJEYXRh
VHlwZUJ5dGVzKSB7Ci0gICAgcmV0dXJuIEdQQkNvbXB1dGVCeXRlc1NpemUoZmllbGROdW0sIHZh
bHVlKTsKLSAgfSBlbHNlIHsKLSAgICBOU0NBc3NlcnQoTk8sIEAiVW5leHBlY3RlZCB0eXBlICVk
IiwgZGF0YVR5cGUpOwotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIFdyaXRl
RGljdE9iamVjdEZpZWxkKEdQQkNvZGVkT3V0cHV0U3RyZWFtICpzdHJlYW0sIGlkIHZhbHVlLCB1
aW50MzJfdCBmaWVsZE51bSwgR1BCRGF0YVR5cGUgZGF0YVR5cGUpIHsKLSAgaWYgKGRhdGFUeXBl
ID09IEdQQkRhdGFUeXBlTWVzc2FnZSkgewotICAgIFtzdHJlYW0gd3JpdGVNZXNzYWdlOmZpZWxk
TnVtIHZhbHVlOnZhbHVlXTsKLSAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PSBHUEJEYXRhVHlwZVN0
cmluZykgewotICAgIFtzdHJlYW0gd3JpdGVTdHJpbmc6ZmllbGROdW0gdmFsdWU6dmFsdWVdOwot
ICB9IGVsc2UgaWYgKGRhdGFUeXBlID09IEdQQkRhdGFUeXBlQnl0ZXMpIHsKLSAgICBbc3RyZWFt
IHdyaXRlQnl0ZXM6ZmllbGROdW0gdmFsdWU6dmFsdWVdOwotICB9IGVsc2UgewotICAgIE5TQ0Fz
c2VydChOTywgQCJVbmV4cGVjdGVkIHR5cGUgJWQiLCBkYXRhVHlwZSk7Ci0gIH0KLX0KLQotLy8l
UERETS1FWFBBTkQtRU5EIFNFUklBTElaRV9TVVBQT1JUX0hFTFBFUlMoKQotCi1zaXplX3QgR1BC
RGljdGlvbmFyeUNvbXB1dGVTaXplSW50ZXJuYWxIZWxwZXIoTlNEaWN0aW9uYXJ5ICpkaWN0LCBH
UEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0gIEdQQkRhdGFUeXBlIG1hcFZhbHVlVHlwZSA9
IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAw
OwotICBbZGljdCBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAq
a2V5LCBpZCBvYmosIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAg
IHNpemVfdCBtc2dTaXplID0gR1BCQ29tcHV0ZVN0cmluZ1NpemUoa01hcEtleUZpZWxkTnVtYmVy
LCBrZXkpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RPYmplY3RGaWVsZFNpemUob2JqLCBr
TWFwVmFsdWVGaWVsZE51bWJlciwgbWFwVmFsdWVUeXBlKTsKLSAgICByZXN1bHQgKz0gR1BCQ29t
cHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkgKyBtc2dTaXplOwotICB9XTsK
LSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGRO
dW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAq
IGRpY3QuY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgR1BCRGljdGlvbmFyeVdy
aXRlVG9TdHJlYW1JbnRlcm5hbEhlbHBlcihHUEJDb2RlZE91dHB1dFN0cmVhbSAqb3V0cHV0U3Ry
ZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TRGlj
dGlvbmFyeSAqZGljdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0gIE5TQ0Fzc2VydChmaWVsZC5tYXBL
ZXlEYXRhVHlwZSA9PSBHUEJEYXRhVHlwZVN0cmluZywgQCJVbmV4cGVjdGVkIGtleSB0eXBlIik7
Ci0gIEdQQkRhdGFUeXBlIG1hcFZhbHVlVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQp
OwotICB1aW50MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihm
aWVsZCksIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbZGljdCBlbnVtZXJhdGVL
ZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqa2V5LCBpZCBvYmosIEJPT0wgKnN0
b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8vIFdyaXRlIHRoZSB0YWcuCi0g
ICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAvLyBXcml0ZSB0aGUg
c2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6ZSA9IEdQQkNvbXB1dGVTdHJp
bmdTaXplKGtNYXBLZXlGaWVsZE51bWJlciwga2V5KTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVE
aWN0T2JqZWN0RmllbGRTaXplKG9iaiwga01hcFZhbHVlRmllbGROdW1iZXIsIG1hcFZhbHVlVHlw
ZSk7Ci0KLSAgICAvLyBXcml0ZSB0aGUgc2l6ZSBhbmQgZmllbGRzLgotICAgIFtvdXRwdXRTdHJl
YW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIFtvdXRwdXRTdHJlYW0g
d3JpdGVTdHJpbmc6a01hcEtleUZpZWxkTnVtYmVyIHZhbHVlOmtleV07Ci0gICAgV3JpdGVEaWN0
T2JqZWN0RmllbGQob3V0cHV0U3RyZWFtLCBvYmosIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCBtYXBW
YWx1ZVR5cGUpOwotICB9XTsKLX0KLQotQk9PTCBHUEJEaWN0aW9uYXJ5SXNJbml0aWFsaXplZElu
dGVybmFsSGVscGVyKE5TRGljdGlvbmFyeSAqZGljdCwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVs
ZCkgewotICBOU0NBc3NlcnQoZmllbGQubWFwS2V5RGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVTdHJp
bmcsIEAiVW5leHBlY3RlZCBrZXkgdHlwZSIpOwotICBOU0NBc3NlcnQoR1BCR2V0RmllbGREYXRh
VHlwZShmaWVsZCkgPT0gR1BCRGF0YVR5cGVNZXNzYWdlLCBAIlVuZXhwZWN0ZWQgdmFsdWUgdHlw
ZSIpOwotICAjcHJhZ21hIHVudXNlZChmaWVsZCkgIC8vIEZvciB3aGVuIGFzc2VydHMgYXJlIG9m
ZiBpbiByZWxlYXNlLgotICBmb3IgKEdQQk1lc3NhZ2UgKm1zZyBpbiBbZGljdCBvYmplY3RFbnVt
ZXJhdG9yXSkgewotICAgIGlmICghbXNnLmluaXRpYWxpemVkKSB7Ci0gICAgICByZXR1cm4gTk87
Ci0gICAgfQotICB9Ci0gIHJldHVybiBZRVM7Ci19Ci0KLS8vIE5vdGU6IGlmIHRoZSB0eXBlIGlz
IGFuIG9iamVjdCwgaXQgdGhlIHJldGFpbiBwYXNzIGJhY2sgdG8gdGhlIGNhbGxlci4KLXN0YXRp
YyB2b2lkIFJlYWRWYWx1ZShHUEJDb2RlZElucHV0U3RyZWFtICpzdHJlYW0sCi0gICAgICAgICAg
ICAgICAgICAgICAgR1BCR2VuZXJpY1ZhbHVlICp2YWx1ZVRvRmlsbCwKLSAgICAgICAgICAgICAg
ICAgICAgICBHUEJEYXRhVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgIEdQQkV4dGVu
c2lvblJlZ2lzdHJ5ICpyZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERl
c2NyaXB0b3IgKmZpZWxkKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR1BCRGF0YVR5
cGVCb29sOgotICAgICAgdmFsdWVUb0ZpbGwtPnZhbHVlQm9vbCA9IEdQQkNvZGVkSW5wdXRTdHJl
YW1SZWFkQm9vbCgmc3RyZWFtLT5zdGF0ZV8pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHUEJE
YXRhVHlwZUZpeGVkMzI6Ci0gICAgICB2YWx1ZVRvRmlsbC0+dmFsdWVVSW50MzIgPSBHUEJDb2Rl
ZElucHV0U3RyZWFtUmVhZEZpeGVkMzIoJnN0cmVhbS0+c3RhdGVfKTsKLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4ZWQzMjoKLSAgICAgIHZhbHVlVG9GaWxsLT52YWx1ZUlu
dDMyID0gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRTRml4ZWQzMigmc3RyZWFtLT5zdGF0ZV8pOwot
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZUZsb2F0OgotICAgICAgdmFsdWVUb0Zp
bGwtPnZhbHVlRmxvYXQgPSBHUEJDb2RlZElucHV0U3RyZWFtUmVhZEZsb2F0KCZzdHJlYW0tPnN0
YXRlXyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdQQkRhdGFUeXBlRml4ZWQ2NDoKLSAgICAg
IHZhbHVlVG9GaWxsLT52YWx1ZVVJbnQ2NCA9IEdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkRml4ZWQ2
NCgmc3RyZWFtLT5zdGF0ZV8pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVNG
aXhlZDY0OgotICAgICAgdmFsdWVUb0ZpbGwtPnZhbHVlSW50NjQgPSBHUEJDb2RlZElucHV0U3Ry
ZWFtUmVhZFNGaXhlZDY0KCZzdHJlYW0tPnN0YXRlXyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNl
IEdQQkRhdGFUeXBlRG91YmxlOgotICAgICAgdmFsdWVUb0ZpbGwtPnZhbHVlRG91YmxlID0gR1BC
Q29kZWRJbnB1dFN0cmVhbVJlYWREb3VibGUoJnN0cmVhbS0+c3RhdGVfKTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgR1BCRGF0YVR5cGVJbnQzMjoKLSAgICAgIHZhbHVlVG9GaWxsLT52YWx1ZUlu
dDMyID0gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRJbnQzMigmc3RyZWFtLT5zdGF0ZV8pOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZUludDY0OgotICAgICAgdmFsdWVUb0ZpbGwt
PnZhbHVlSW50NjQgPSBHUEJDb2RlZElucHV0U3RyZWFtUmVhZEludDMyKCZzdHJlYW0tPnN0YXRl
Xyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDMyOgotICAgICAgdmFs
dWVUb0ZpbGwtPnZhbHVlSW50MzIgPSBHUEJDb2RlZElucHV0U3RyZWFtUmVhZFNJbnQzMigmc3Ry
ZWFtLT5zdGF0ZV8pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVNJbnQ2NDoK
LSAgICAgIHZhbHVlVG9GaWxsLT52YWx1ZUludDY0ID0gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRT
SW50NjQoJnN0cmVhbS0+c3RhdGVfKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1BCRGF0YVR5
cGVVSW50MzI6Ci0gICAgICB2YWx1ZVRvRmlsbC0+dmFsdWVVSW50MzIgPSBHUEJDb2RlZElucHV0
U3RyZWFtUmVhZFVJbnQzMigmc3RyZWFtLT5zdGF0ZV8pOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHUEJEYXRhVHlwZVVJbnQ2NDoKLSAgICAgIHZhbHVlVG9GaWxsLT52YWx1ZVVJbnQ2NCA9IEdQ
QkNvZGVkSW5wdXRTdHJlYW1SZWFkVUludDY0KCZzdHJlYW0tPnN0YXRlXyk7Ci0gICAgICBicmVh
azsKLSAgICBjYXNlIEdQQkRhdGFUeXBlQnl0ZXM6Ci0gICAgICBbdmFsdWVUb0ZpbGwtPnZhbHVl
RGF0YSByZWxlYXNlXTsKLSAgICAgIHZhbHVlVG9GaWxsLT52YWx1ZURhdGEgPSBHUEJDb2RlZElu
cHV0U3RyZWFtUmVhZFJldGFpbmVkQnl0ZXMoJnN0cmVhbS0+c3RhdGVfKTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgR1BCRGF0YVR5cGVTdHJpbmc6Ci0gICAgICBbdmFsdWVUb0ZpbGwtPnZhbHVl
U3RyaW5nIHJlbGVhc2VdOwotICAgICAgdmFsdWVUb0ZpbGwtPnZhbHVlU3RyaW5nID0gR1BCQ29k
ZWRJbnB1dFN0cmVhbVJlYWRSZXRhaW5lZFN0cmluZygmc3RyZWFtLT5zdGF0ZV8pOwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZU1lc3NhZ2U6IHsKLSAgICAgIEdQQk1lc3NhZ2Ug
Km1lc3NhZ2UgPSBbW2ZpZWxkLm1zZ0NsYXNzIGFsbG9jXSBpbml0XTsKLSAgICAgIFtzdHJlYW0g
cmVhZE1lc3NhZ2U6bWVzc2FnZSBleHRlbnNpb25SZWdpc3RyeTpyZWdpc3RyeV07Ci0gICAgICBb
dmFsdWVUb0ZpbGwtPnZhbHVlTWVzc2FnZSByZWxlYXNlXTsKLSAgICAgIHZhbHVlVG9GaWxsLT52
YWx1ZU1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1BC
RGF0YVR5cGVHcm91cDoKLSAgICAgIE5TQ0Fzc2VydChOTywgQCJDYW4ndCBoYXBwZW4iKTsKLSAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR1BCRGF0YVR5cGVFbnVtOgotICAgICAgdmFsdWVUb0ZpbGwt
PnZhbHVlRW51bSA9IEdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkRW51bSgmc3RyZWFtLT5zdGF0ZV8p
OwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotdm9pZCBHUEJEaWN0aW9uYXJ5UmVhZEVudHJ5KGlk
IG1hcERpY3Rpb25hcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCQ29kZWRJbnB1
dFN0cmVhbSAqc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkV4dGVuc2lv
blJlZ2lzdHJ5ICpyZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVs
ZERlc2NyaXB0b3IgKmZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQk1lc3Nh
Z2UgKnBhcmVudE1lc3NhZ2UpIHsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5t
YXBLZXlEYXRhVHlwZTsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxk
RGF0YVR5cGUoZmllbGQpOwotCi0gIEdQQkdlbmVyaWNWYWx1ZSBrZXk7Ci0gIEdQQkdlbmVyaWNW
YWx1ZSB2YWx1ZTsKLSAgLy8gWmVybyB0aGVtIChidXQgcGljayB1cCBhbnkgZW51bSBkZWZhdWx0
IGZvciBwcm90bzIpLgotICBrZXkudmFsdWVTdHJpbmcgPSB2YWx1ZS52YWx1ZVN0cmluZyA9IG5p
bDsKLSAgaWYgKHZhbHVlRGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVFbnVtKSB7Ci0gICAgdmFsdWUg
PSBmaWVsZC5kZWZhdWx0VmFsdWU7Ci0gIH0KLQotICBHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUg
KnN0YXRlID0gJnN0cmVhbS0+c3RhdGVfOwotICB1aW50MzJfdCBrZXlUYWcgPQotICAgICAgR1BC
V2lyZUZvcm1hdE1ha2VUYWcoa01hcEtleUZpZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0Rm9yVHlw
ZShrZXlEYXRhVHlwZSwgTk8pKTsKLSAgdWludDMyX3QgdmFsdWVUYWcgPQotICAgICAgR1BCV2ly
ZUZvcm1hdE1ha2VUYWcoa01hcFZhbHVlRmllbGROdW1iZXIsIEdQQldpcmVGb3JtYXRGb3JUeXBl
KHZhbHVlRGF0YVR5cGUsIE5PKSk7Ci0KLSAgQk9PTCBoaXRFcnJvciA9IE5POwotICB3aGlsZSAo
WUVTKSB7Ci0gICAgdWludDMyX3QgdGFnID0gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRUYWcoc3Rh
dGUpOwotICAgIGlmICh0YWcgPT0ga2V5VGFnKSB7Ci0gICAgICBSZWFkVmFsdWUoc3RyZWFtLCAm
a2V5LCBrZXlEYXRhVHlwZSwgcmVnaXN0cnksIGZpZWxkKTsKLSAgICB9IGVsc2UgaWYgKHRhZyA9
PSB2YWx1ZVRhZykgewotICAgICAgUmVhZFZhbHVlKHN0cmVhbSwgJnZhbHVlLCB2YWx1ZURhdGFU
eXBlLCByZWdpc3RyeSwgZmllbGQpOwotICAgIH0gZWxzZSBpZiAodGFnID09IDApIHsKLSAgICAg
IC8vIHplcm8gc2lnbmFscyBFT0YgLyBsaW1pdCByZWFjaGVkCi0gICAgICBicmVhazsKLSAgICB9
IGVsc2UgeyAgLy8gVW5rbm93bgotICAgICAgaWYgKCFbc3RyZWFtIHNraXBGaWVsZDp0YWddKXsK
LSAgICAgICAgaGl0RXJyb3IgPSBZRVM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIGlmICghaGl0RXJyb3IpIHsKLSAgICAvLyBIYW5kbGUgdGhlIHNwZWNpYWwgZGVm
YXVsdHMgYW5kL29yIG1pc3Npbmcga2V5L3ZhbHVlLgotICAgIGlmICgoa2V5RGF0YVR5cGUgPT0g
R1BCRGF0YVR5cGVTdHJpbmcpICYmIChrZXkudmFsdWVTdHJpbmcgPT0gbmlsKSkgewotICAgICAg
a2V5LnZhbHVlU3RyaW5nID0gW0AiIiByZXRhaW5dOwotICAgIH0KLSAgICBpZiAoR1BCRGF0YVR5
cGVJc09iamVjdCh2YWx1ZURhdGFUeXBlKSAmJiB2YWx1ZS52YWx1ZVN0cmluZyA9PSBuaWwpIHsK
LSAgICAgIHN3aXRjaCAodmFsdWVEYXRhVHlwZSkgewotICAgICAgICBjYXNlIEdQQkRhdGFUeXBl
U3RyaW5nOgotICAgICAgICAgIHZhbHVlLnZhbHVlU3RyaW5nID0gW0AiIiByZXRhaW5dOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlQnl0ZXM6Ci0gICAgICAgICAg
dmFsdWUudmFsdWVEYXRhID0gW0dQQkVtcHR5TlNEYXRhKCkgcmV0YWluXTsKLSAgICAgICAgICBi
cmVhazsKLSNpZiBkZWZpbmVkKF9fY2xhbmdfYW5hbHl6ZXJfXykKLSAgICAgICAgY2FzZSBHUEJE
YXRhVHlwZUdyb3VwOgotICAgICAgICAgIC8vIE1hcHMgY2FuJ3QgcmVhbGx5IGhhdmUgR3JvdXBz
IGFzIHRoZSB2YWx1ZSB0eXBlLCBidXQgdGhpcyBjYXNlIGlzIG5lZWRlZAotICAgICAgICAgIC8v
IHNvIHRoZSBhbmFseXplciB3b24ndCByZXBvcnQgdGhlIHBvc2liaWxpdHkgb2Ygc2VuZCBuaWwg
aW4gZm9yIHRoZSB2YWx1ZQotICAgICAgICAgIC8vIGluIHRoZSBOU011dGFibGVEaWN0aW9uYXJ5
IGNhc2UgYmVsb3cuCi0jZW5kaWYKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZU1lc3NhZ2U6IHsK
LSAgICAgICAgICB2YWx1ZS52YWx1ZU1lc3NhZ2UgPSBbW2ZpZWxkLm1zZ0NsYXNzIGFsbG9jXSBp
bml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgIC8vIE5vdGhpbmcKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoKGtleURhdGFUeXBlID09IEdQQkRhdGFUeXBlU3RyaW5nKSAmJiBHUEJEYXRhVHlwZUlz
T2JqZWN0KHZhbHVlRGF0YVR5cGUpKSB7Ci0jaWYgR1BCX1NUQVRJQ19BTkFMWVpFUl9PTkxZKDYw
MjAwNTMsIDcwMDAxODEpCi0gICAgIC8vIExpbWl0ZWQgdG8gWGNvZGUgNi40IC0gNy4yLCBhcmUg
a25vd24gdG8gZmFpbCBoZXJlLiBUaGUgdXBwZXIgZW5kIGNhbgotICAgICAvLyBiZSByYWlzZWQg
YXMgbmVlZGVkIGZvciBuZXcgWGNvZGVzLgotICAgICAvLwotICAgICAvLyBUaGlzIGlzIG9ubHkg
bmVlZGVkIG9uIGEgInNoYWxsb3ciIGFuYWx5emU7IG9uIGEgImRlZXAiIGFuYWx5emUsIHRoZQot
ICAgICAvLyBleGlzdGluZyBjb2RlIHBhdGggZ2V0cyB0aGlzIGNvcnJlY3QuIEluIHNoYWxsb3cs
IHRoZSBhbmFseXplciBkZWNpZGVzCi0gICAgIC8vIEdQQkRhdGFUeXBlSXNPYmplY3QodmFsdWVE
YXRhVHlwZSkgaXMgYm90aCBmYWxzZSBhbmQgdHJ1ZSBvbiBhIHNpbmdsZQotICAgICAvLyBwYXRo
IHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgYWxsb3dpbmcgbmlsIHRvIGJlIHVzZWQgZm9yIHRoZQot
ICAgICAvLyBzZXRPYmplY3Q6Zm9yS2V5Oi4KLSAgICAgaWYgKHZhbHVlLnZhbHVlU3RyaW5nID09
IG5pbCkgewotICAgICAgIHZhbHVlLnZhbHVlU3RyaW5nID0gW0AiIiByZXRhaW5dOwotICAgICB9
Ci0jZW5kaWYKLSAgICAgIC8vIG1hcERpY3Rpb25hcnkgaXMgYW4gTlNNdXRhYmxlRGljdGlvbmFy
eQotICAgICAgWyhOU011dGFibGVEaWN0aW9uYXJ5ICopbWFwRGljdGlvbmFyeSBzZXRPYmplY3Q6
dmFsdWUudmFsdWVTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5OmtleS52YWx1ZVN0cmluZ107Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlm
ICh2YWx1ZURhdGFUeXBlID09IEdQQkRhdGFUeXBlRW51bSkgewotICAgICAgICBpZiAoR1BCSGFz
UHJlc2VydmluZ1Vua25vd25FbnVtU2VtYW50aWNzKFtwYXJlbnRNZXNzYWdlIGRlc2NyaXB0b3Jd
LmZpbGUuc3ludGF4KSB8fAotICAgICAgICAgICAgW2ZpZWxkIGlzVmFsaWRFbnVtVmFsdWU6dmFs
dWUudmFsdWVFbnVtXSkgewotICAgICAgICAgIFttYXBEaWN0aW9uYXJ5IHNldEdQQkdlbmVyaWNW
YWx1ZTomdmFsdWUgZm9yR1BCR2VuZXJpY1ZhbHVlS2V5OiZrZXldOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IFttYXBEaWN0aW9uYXJ5IHNlcmlhbGl6ZWREYXRh
Rm9yVW5rbm93blZhbHVlOnZhbHVlLnZhbHVlRW51bQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OiZrZXkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlE
YXRhVHlwZTprZXlEYXRhVHlwZV07Ci0gICAgICAgICAgW3BhcmVudE1lc3NhZ2UgYWRkVW5rbm93
bk1hcEVudHJ5OkdQQkZpZWxkTnVtYmVyKGZpZWxkKSB2YWx1ZTpkYXRhXTsKLSAgICAgICAgfQot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgW21hcERpY3Rpb25hcnkgc2V0R1BCR2VuZXJpY1ZhbHVl
OiZ2YWx1ZSBmb3JHUEJHZW5lcmljVmFsdWVLZXk6JmtleV07Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0KLSAgaWYgKEdQQkRhdGFUeXBlSXNPYmplY3Qoa2V5RGF0YVR5cGUpKSB7Ci0gICAgW2tleS52
YWx1ZVN0cmluZyByZWxlYXNlXTsKLSAgfQotICBpZiAoR1BCRGF0YVR5cGVJc09iamVjdCh2YWx1
ZURhdGFUeXBlKSkgewotICAgIFt2YWx1ZS52YWx1ZVN0cmluZyByZWxlYXNlXTsKLSAgfQotfQot
Ci0vLwotLy8gTWFjcm9zIGZvciB0aGUgY29tbW9uIGJhc2ljIGNhc2VzLgotLy8KLQotLy8lUERE
TS1ERUZJTkUgRElDVElPTkFSWV9JTVBMX0ZPUl9QT0RfS0VZKEtFWV9OQU1FLCBLRVlfVFlQRSkK
LS8vJURJQ1RJT05BUllfUE9EX0lNUExfRk9SX0tFWShLRVlfTkFNRSwgS0VZX1RZUEUsICwgUE9E
KQotLy8lRElDVElPTkFSWV9QT0RfS0VZX1RPX09CSkVDVF9JTVBMKEtFWV9OQU1FLCBLRVlfVFlQ
RSwgT2JqZWN0LCBpZCkKLQotLy8lUERETS1ERUZJTkUgRElDVElPTkFSWV9QT0RfSU1QTF9GT1Jf
S0VZKEtFWV9OQU1FLCBLRVlfVFlQRSwgS2lzUCwgS0hFTFBFUikKLS8vJURJQ1RJT05BUllfS0VZ
X1RPX1BPRF9JTVBMKEtFWV9OQU1FLCBLRVlfVFlQRSwgS2lzUCwgVUludDMyLCB1aW50MzJfdCwg
S0hFTFBFUikKLS8vJURJQ1RJT05BUllfS0VZX1RPX1BPRF9JTVBMKEtFWV9OQU1FLCBLRVlfVFlQ
RSwgS2lzUCwgSW50MzIsIGludDMyX3QsIEtIRUxQRVIpCi0vLyVESUNUSU9OQVJZX0tFWV9UT19Q
T0RfSU1QTChLRVlfTkFNRSwgS0VZX1RZUEUsIEtpc1AsIFVJbnQ2NCwgdWludDY0X3QsIEtIRUxQ
RVIpCi0vLyVESUNUSU9OQVJZX0tFWV9UT19QT0RfSU1QTChLRVlfTkFNRSwgS0VZX1RZUEUsIEtp
c1AsIEludDY0LCBpbnQ2NF90LCBLSEVMUEVSKQotLy8lRElDVElPTkFSWV9LRVlfVE9fUE9EX0lN
UEwoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBCb29sLCBCT09MLCBLSEVMUEVSKQotLy8lRElD
VElPTkFSWV9LRVlfVE9fUE9EX0lNUEwoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBGbG9hdCwg
ZmxvYXQsIEtIRUxQRVIpCi0vLyVESUNUSU9OQVJZX0tFWV9UT19QT0RfSU1QTChLRVlfTkFNRSwg
S0VZX1RZUEUsIEtpc1AsIERvdWJsZSwgZG91YmxlLCBLSEVMUEVSKQotLy8lRElDVElPTkFSWV9L
RVlfVE9fRU5VTV9JTVBMKEtFWV9OQU1FLCBLRVlfVFlQRSwgS2lzUCwgRW51bSwgaW50MzJfdCwg
S0hFTFBFUikKLQotLy8lUERETS1ERUZJTkUgRElDVElPTkFSWV9LRVlfVE9fUE9EX0lNUEwoS0VZ
X05BTUUsIEtFWV9UWVBFLCBLaXNQLCBWQUxVRV9OQU1FLCBWQUxVRV9UWVBFLCBLSEVMUEVSKQot
Ly8lRElDVElPTkFSWV9DT01NT05fSU1QTChLRVlfTkFNRSwgS0VZX1RZUEUsIEtpc1AsIFZBTFVF
X05BTUUsIFZBTFVFX1RZUEUsIEtIRUxQRVIsIFBPRCwgdmFsdWUpCi0KLS8vJVBERE0tREVGSU5F
IERJQ1RJT05BUllfUE9EX0tFWV9UT19PQkpFQ1RfSU1QTChLRVlfTkFNRSwgS0VZX1RZUEUsIFZB
TFVFX05BTUUsIFZBTFVFX1RZUEUpCi0vLyVESUNUSU9OQVJZX0NPTU1PTl9JTVBMKEtFWV9OQU1F
LCBLRVlfVFlQRSwgLCBWQUxVRV9OQU1FLCBWQUxVRV9UWVBFLCBQT0QsIE9CSkVDVCwgb2JqZWN0
KQotCi0vLyVQRERNLURFRklORSBESUNUSU9OQVJZX0NPTU1PTl9JTVBMKEtFWV9OQU1FLCBLRVlf
VFlQRSwgS2lzUCwgVkFMVUVfTkFNRSwgVkFMVUVfVFlQRSwgS0hFTFBFUiwgVkhFTFBFUiwgVk5B
TUUpCi0vLyUjcHJhZ21hIG1hcmsgLSBLRVlfTkFNRSAtPiBWQUxVRV9OQU1FCi0vLyUKLS8vJUBp
bXBsZW1lbnRhdGlvbiBHUEIjI0tFWV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5IHsKLS8v
JSBAcGFja2FnZQotLy8lICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLS8vJX0K
LS8vJQotLy8lKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewotLy8lICByZXR1cm4gW1tbc2Vs
ZiBhbGxvY10gaW5pdFdpdGgjI1ZOQU1FJHUjI3M6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF0g
YXV0b3JlbGVhc2VdOwotLy8lfQotLy8lCi0vLyUrIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGgjI1ZOQU1FJHUjIzooVkFMVUVfVFlQRSkjI1ZOQU1FCi0vLyUgICAgICAgICAgICAgICAgICAg
ICAgIyNWTkFNRSRTIyMgIGZvcktleTooS0VZX1RZUEUjI0tpc1AkUyMjS2lzUClrZXkgewotLy8l
ICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBh
cmUgaW52b2tpbmcgaW5pdFdpdGgjI1ZOQU1FJHUjI3M6Zm9yS2V5czpjb3VudDoKLS8vJSAgLy8g
b24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0vLyUgIHJldHVybiBbWyhHUEIjI0tFWV9OQU1F
IyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGgjI1ZOQU1FJHUj
I3M6JiMjVk5BTUUKLS8vJSAgICAgICAgICAgICAgIEtFWV9OQU1FJFMgVkFMVUVfTkFNRSRTICAg
ICAgICAgICAgICAgICAgICAgICAgIyNWTkFNRSRTIyMgIGZvcktleXM6JmtleQotLy8lICAgICAg
ICAgICAgICAgS0VZX05BTUUkUyBWQUxVRV9OQU1FJFMgICAgICAgICAgICAgICAgICAgICAgICAj
I1ZOQU1FJFMjIyAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci0vLyV9Ci0vLyUKLS8vJSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aCMjVk5BTUUkdSMjczooY29uc3QgVkFMVUVfVFlQRSBb
XSkjI1ZOQU1FIyNzCi0vLyUgICAgICAgICAgICAgICAgICAgICAgIyNWTkFNRSRTIyMgIGZvcktl
eXM6KGNvbnN0IEtFWV9UWVBFIyNLaXNQJFMjI0tpc1AgW10pa2V5cwotLy8lICAgICAgICAgICAg
ICAgICAgICAgICMjVk5BTUUkUyMjICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLS8vJSAg
Ly8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJl
IGludm9raW5nIGluaXRXaXRoIyNWTkFNRSR1IyNzOmZvcktleXM6Y291bnQ6Ci0vLyUgIC8vIG9u
IHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotLy8lICByZXR1cm4gW1soR1BCIyNLRVlfTkFNRSMj
VkFMVUVfTkFNRSMjRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoIyNWTkFNRSR1IyNz
OiMjVk5BTUUjI3MKLS8vJSAgICAgICAgICAgICAgIEtFWV9OQU1FJFMgVkFMVUVfTkFNRSRTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwotLy8lICAgICAgICAgICAg
ICAgS0VZX05BTUUkUyBWQUxVRV9OQU1FJFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotLy8lfQotLy8lCi0vLyUrIChpbnN0YW5jZXR5
cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEIjI0tFWV9OQU1FIyNWQUxVRV9OQU1FIyNE
aWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0vLyUgIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBj
b21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aERpY3Rpb25h
cnk6Ci0vLyUgIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotLy8lICByZXR1cm4gW1so
R1BCIyNLRVlfTkFNRSMjVkFMVUVfTkFNRSMjRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRX
aXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07Ci0vLyV9Ci0vLyUKLS8vJSsg
KGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1z
IHsKLS8vJSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVtSXRlbXNd
IGF1dG9yZWxlYXNlXTsKLS8vJX0KLS8vJQotLy8lLSAoaW5zdGFuY2V0eXBlKWluaXQgewotLy8l
ICByZXR1cm4gW3NlbGYgaW5pdFdpdGgjI1ZOQU1FJHUjI3M6TlVMTCBmb3JLZXlzOk5VTEwgY291
bnQ6MF07Ci0vLyV9Ci0vLyUKLS8vJS0gKGluc3RhbmNldHlwZSlpbml0V2l0aCMjVk5BTUUkdSMj
czooY29uc3QgVkFMVUVfVFlQRSBbXSkjI1ZOQU1FIyNzCi0vLyUgICAgICAgICAgICAgICAgIyNW
TkFNRSRTIyMgIGZvcktleXM6KGNvbnN0IEtFWV9UWVBFIyNLaXNQJFMjI0tpc1AgW10pa2V5cwot
Ly8lICAgICAgICAgICAgICAgICMjVk5BTUUkUyMjICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50
IHsKLS8vJSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLS8vJSAgaWYgKHNlbGYpIHsKLS8vJSAgICBf
ZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0vLyUgICAg
aWYgKGNvdW50ICYmIFZOQU1FIyNzICYmIGtleXMpIHsKLS8vJSAgICAgIGZvciAoTlNVSW50ZWdl
ciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLS8vJURJQ1RJT05BUllfVkFMSURBVEVfVkFMVUVf
IyNWSEVMUEVSKFZOQU1FIyNzW2ldLCBfX19fX18pIyNESUNUSU9OQVJZX1ZBTElEQVRFX0tFWV8j
I0tIRUxQRVIoa2V5c1tpXSwgX19fX19fKSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpX
UkFQUEVEIyNWSEVMUEVSKFZOQU1FIyNzW2ldKSBmb3JLZXk6V1JBUFBFRCMjS0hFTFBFUihrZXlz
W2ldKV07Ci0vLyUgICAgICB9Ci0vLyUgICAgfQotLy8lICB9Ci0vLyUgIHJldHVybiBzZWxmOwot
Ly8lfQotLy8lCi0vLyUtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEIjI0tF
WV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0vLyUgIHNlbGYg
PSBbc2VsZiBpbml0V2l0aCMjVk5BTUUkdSMjczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsK
LS8vJSAgaWYgKHNlbGYpIHsKLS8vJSAgICBpZiAoZGljdGlvbmFyeSkgewotLy8lICAgICAgW19k
aWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFy
eV07Ci0vLyUgICAgfQotLy8lICB9Ci0vLyUgIHJldHVybiBzZWxmOwotLy8lfQotLy8lCi0vLyUt
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0v
LyUgICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotLy8lICByZXR1cm4gW3NlbGYgaW5pdFdpdGgj
I1ZOQU1FJHUjI3M6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci0vLyV9Ci0vLyUKLS8vJURJ
Q1RJT05BUllfSU1NVVRBQkxFX0NPUkUoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBWQUxVRV9O
QU1FLCBWQUxVRV9UWVBFLCBLSEVMUEVSLCBWSEVMUEVSLCBWTkFNRSwgKQotLy8lCi0vLyVWQUxV
RV9GT1JfS0VZXyMjVkhFTFBFUihLRVlfVFlQRSMjS2lzUCRTIyNLaXNQLCBWQUxVRV9OQU1FLCBW
QUxVRV9UWVBFLCBLSEVMUEVSKQotLy8lCi0vLyVESUNUSU9OQVJZX01VVEFCTEVfQ09SRShLRVlf
TkFNRSwgS0VZX1RZUEUsIEtpc1AsIFZBTFVFX05BTUUsIFZBTFVFX1RZUEUsIEtIRUxQRVIsIFZI
RUxQRVIsIFZOQU1FLCApCi0vLyUKLS8vJUBlbmQKLS8vJQotCi0vLyVQRERNLURFRklORSBESUNU
SU9OQVJZX0tFWV9UT19FTlVNX0lNUEwoS0VZX05BTUUsIEtFWV9UWVBFLCBLaXNQLCBWQUxVRV9O
QU1FLCBWQUxVRV9UWVBFLCBLSEVMUEVSKQotLy8lRElDVElPTkFSWV9LRVlfVE9fRU5VTV9JTVBM
MihLRVlfTkFNRSwgS0VZX1RZUEUsIEtpc1AsIFZBTFVFX05BTUUsIFZBTFVFX1RZUEUsIEtIRUxQ
RVIsIFBPRCkKLS8vJVBERE0tREVGSU5FIERJQ1RJT05BUllfS0VZX1RPX0VOVU1fSU1QTDIoS0VZ
X05BTUUsIEtFWV9UWVBFLCBLaXNQLCBWQUxVRV9OQU1FLCBWQUxVRV9UWVBFLCBLSEVMUEVSLCBW
SEVMUEVSKQotLy8lI3ByYWdtYSBtYXJrIC0gS0VZX05BTUUgLT4gVkFMVUVfTkFNRQotLy8lCi0v
LyVAaW1wbGVtZW50YXRpb24gR1BCIyNLRVlfTkFNRSMjVkFMVUVfTkFNRSMjRGljdGlvbmFyeSB7
Ci0vLyUgQHBhY2thZ2UKLS8vJSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci0v
LyUgIEdQQkVudW1WYWxpZGF0aW9uRnVuYyBfdmFsaWRhdGlvbkZ1bmM7Ci0vLyV9Ci0vLyUKLS8v
JUBzeW50aGVzaXplIHZhbGlkYXRpb25GdW5jID0gX3ZhbGlkYXRpb25GdW5jOwotLy8lCi0vLyUr
IChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0vLyUgIHJldHVybiBbW1tzZWxmIGFsbG9jXSBp
bml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpOVUxMCi0vLyUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczpOVUxMCi0vLyUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czpOVUxMCi0vLyUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci0vLyV9
Ci0vLyUKLS8vJSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlv
bjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMgewotLy8lICByZXR1cm4gW1tbc2VsZiBhbGxv
Y10gaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZnVuYwotLy8lICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6TlVMTAotLy8lICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6TlVMTAotLy8lICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwot
Ly8lfQotLy8lCi0vLyUrIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxpZGF0aW9uRnVu
Y3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0vLyUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWU6KFZBTFVFX1RZUEUpcmF3VmFsdWUKLS8vJSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooS0VZX1RZUEUj
I0tpc1AkUyMjS2lzUClrZXkgewotLy8lICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGls
ZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5
czpjb3VudDoKLS8vJSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0vLyUgIHJldHVy
biBbWyhHUEIjI0tFWV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10g
aW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZnVuYwotLy8lICAgICAgICAgICAgICAgS0VZX05B
TUUkUyBWQUxVRV9OQU1FJFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJhd1ZhbHVlczomcmF3VmFsdWUKLS8vJSAgICAgICAgICAgICAgIEtFWV9OQU1FJFMgVkFMVUVf
TkFNRSRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6
JmtleQotLy8lICAgICAgICAgICAgICAgS0VZX05BTUUkUyBWQUxVRV9OQU1FJFMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07
Ci0vLyV9Ci0vLyUKLS8vJSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25G
dW5jdGlvbjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLS8vJSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczooY29uc3QgVkFMVUVfVFlQRSBbXSlyYXdW
YWx1ZXMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5
czooY29uc3QgS0VZX1RZUEUjI0tpc1AkUyMjS2lzUCBbXSlrZXlzCi0vLyUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewot
Ly8lICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3
ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLS8vJSAgLy8gb24g
dG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0vLyUgIHJldHVybiBbWyhHUEIjI0tFWV9OQU1FIyNW
QUxVRV9OQU1FIyNEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxpZGF0aW9uRnVu
Y3Rpb246ZnVuYwotLy8lICAgICAgICAgICAgICAgS0VZX05BTUUkUyBWQUxVRV9OQU1FJFMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczpyYXdWYWx1ZXMK
LS8vJSAgICAgICAgICAgICAgIEtFWV9OQU1FJFMgVkFMVUVfTkFNRSRTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwotLy8lICAgICAgICAgICAg
ICAgS0VZX05BTUUkUyBWQUxVRV9OQU1FJFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotLy8lfQotLy8lCi0vLyUr
IChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEIjI0tFWV9OQU1FIyNW
QUxVRV9OQU1FIyNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0vLyUgIC8vIENhc3QgaXMgbmVl
ZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0
V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotLy8lICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29y
cmVjdC4KLS8vJSAgcmV0dXJuIFtbKEdQQiMjS0VZX05BTUUjI1ZBTFVFX05BTUUjI0RpY3Rpb25h
cnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVh
c2VdOwotLy8lfQotLy8lCi0vLyUrIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxpZGF0
aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0vLyUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMg
ewotLy8lICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246
ZnVuYyBjYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwotLy8lfQotLy8lCi0vLyUtIChp
bnN0YW5jZXR5cGUpaW5pdCB7Ci0vLyUgIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25G
dW5jdGlvbjpOVUxMIHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLS8vJX0K
LS8vJQotLy8lLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJF
bnVtVmFsaWRhdGlvbkZ1bmMpZnVuYyB7Ci0vLyUgIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlk
YXRpb25GdW5jdGlvbjpmdW5jIHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsK
LS8vJX0KLS8vJQotLy8lLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9u
OihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotLy8lICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBWQUxVRV9UWVBFIFtdKXJhd1ZhbHVlcwotLy8lICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBLRVlfVFlQRSMj
S2lzUCRTIyNLaXNQIFtdKWtleXMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0vLyUgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0vLyUgIGlmIChzZWxmKSB7Ci0vLyUgICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwotLy8lICAgIF92YWxpZGF0aW9uRnVuYyA9IChmdW5jICE9IE5V
TEwgPyBmdW5jIDogRGljdERlZmF1bHRfSXNWYWxpZFZhbHVlKTsKLS8vJSAgICBpZiAoY291bnQg
JiYgcmF3VmFsdWVzICYmIGtleXMpIHsKLS8vJSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLS8vJURJQ1RJT05BUllfVkFMSURBVEVfS0VZXyMjS0hFTFBFUihr
ZXlzW2ldLCBfX19fX18pICAgICAgICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OldSQVBQRUQjI1ZI
RUxQRVIocmF3VmFsdWVzW2ldKSBmb3JLZXk6V1JBUFBFRCMjS0hFTFBFUihrZXlzW2ldKV07Ci0v
LyUgICAgICB9Ci0vLyUgICAgfQotLy8lICB9Ci0vLyUgIHJldHVybiBzZWxmOwotLy8lfQotLy8l
Ci0vLyUtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEIjI0tFWV9OQU1FIyNW
QUxVRV9OQU1FIyNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0vLyUgIHNlbGYgPSBbc2VsZiBp
bml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpkaWN0aW9uYXJ5LnZhbGlkYXRpb25GdW5jCi0vLyUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczpOVUxMCi0vLyUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czpOVUxMCi0vLyUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudDowXTsKLS8vJSAgaWYgKHNlbGYpIHsKLS8vJSAg
ICBpZiAoZGljdGlvbmFyeSkgewotLy8lICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9t
RGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0vLyUgICAgfQotLy8lICB9Ci0v
LyUgIHJldHVybiBzZWxmOwotLy8lfQotLy8lCi0vLyUtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhW
YWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0vLyUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMg
ewotLy8lICAjcHJhZ21hIHVudXNlZChudW1JdGVtcykKLS8vJSAgcmV0dXJuIFtzZWxmIGluaXRX
aXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmMgcmF3VmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNv
dW50OjBdOwotLy8lfQotLy8lCi0vLyVESUNUSU9OQVJZX0lNTVVUQUJMRV9DT1JFKEtFWV9OQU1F
LCBLRVlfVFlQRSwgS2lzUCwgVkFMVUVfTkFNRSwgVkFMVUVfVFlQRSwgS0hFTFBFUiwgVkhFTFBF
UiwgdmFsdWUsIFJhdykKLS8vJQotLy8lLSAoQk9PTCl2YWx1ZUZvcktleTooS0VZX1RZUEUjI0tp
c1AkUyMjS2lzUClrZXkgdmFsdWU6KFZBTFVFX1RZUEUgKil2YWx1ZSB7Ci0vLyUgIE5TTnVtYmVy
ICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXUkFQUEVEIyNLSEVMUEVSKGtl
eSldOwotLy8lICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkgewotLy8lICAgIFZBTFVFX1RZUEUgcmVz
dWx0ID0gVU5XUkFQIyNWQUxVRV9OQU1FKHdyYXBwZWQpOwotLy8lICAgIGlmICghX3ZhbGlkYXRp
b25GdW5jKHJlc3VsdCkpIHsKLS8vJSAgICAgIHJlc3VsdCA9IGtHUEJVbnJlY29nbml6ZWRFbnVt
ZXJhdG9yVmFsdWU7Ci0vLyUgICAgfQotLy8lICAgICp2YWx1ZSA9IHJlc3VsdDsKLS8vJSAgfQot
Ly8lICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci0vLyV9Ci0vLyUKLS8vJS0gKEJPT0wpdmFs
dWVGb3JLZXk6KEtFWV9UWVBFIyNLaXNQJFMjI0tpc1Apa2V5IHJhd1ZhbHVlOihWQUxVRV9UWVBF
ICopcmF3VmFsdWUgewotLy8lICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFyeSBvYmpl
Y3RGb3JLZXk6V1JBUFBFRCMjS0hFTFBFUihrZXkpXTsKLS8vJSAgaWYgKHdyYXBwZWQgJiYgcmF3
VmFsdWUpIHsKLS8vJSAgICAqcmF3VmFsdWUgPSBVTldSQVAjI1ZBTFVFX05BTUUod3JhcHBlZCk7
Ci0vLyUgIH0KLS8vJSAgcmV0dXJuICh3cmFwcGVkICE9IE5VTEwpOwotLy8lfQotLy8lCi0vLyUt
ICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotLy8lICAgICh2b2lkIChe
KShLRVlfVFlQRSBLaXNQIyNrZXksIFZBTFVFX1RZUEUgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2Nr
IHsKLS8vJSAgR1BCRW51bVZhbGlkYXRpb25GdW5jIGZ1bmMgPSBfdmFsaWRhdGlvbkZ1bmM7Ci0v
LyUgIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihFTlVN
X1RZUEUjI0tIRUxQRVIoS0VZX1RZUEUpIyNhS2V5LAotLy8lICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5VTV9UWVBFIyNWSEVMUEVSKFZBTFVFX1RZ
UEUpIyNhVmFsdWUsCi0vLyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0vLyUgICAgICBWQUxVRV9UWVBFIHVud3JhcHBlZCA9
IFVOV1JBUCMjVkFMVUVfTkFNRShhVmFsdWUpOwotLy8lICAgICAgaWYgKCFmdW5jKHVud3JhcHBl
ZCkpIHsKLS8vJSAgICAgICAgdW53cmFwcGVkID0ga0dQQlVucmVjb2duaXplZEVudW1lcmF0b3JW
YWx1ZTsKLS8vJSAgICAgIH0KLS8vJSAgICAgIGJsb2NrKFVOV1JBUCMjS0VZX05BTUUoYUtleSks
IHVud3JhcHBlZCwgc3RvcCk7Ci0vLyUgIH1dOwotLy8lfQotLy8lCi0vLyVESUNUSU9OQVJZX01V
VEFCTEVfQ09SRShLRVlfTkFNRSwgS0VZX1RZUEUsIEtpc1AsIFZBTFVFX05BTUUsIFZBTFVFX1RZ
UEUsIEtIRUxQRVIsIFZIRUxQRVIsIHZhbHVlLCBSYXcpCi0vLyUKLS8vJS0gKHZvaWQpc2V0VmFs
dWU6KFZBTFVFX1RZUEUpdmFsdWUgZm9yS2V5OihLRVlfVFlQRSMjS2lzUCRTIyNLaXNQKWtleSB7
Ci0vLyVESUNUSU9OQVJZX1ZBTElEQVRFX0tFWV8jI0tIRUxQRVIoa2V5LCApICBpZiAoIV92YWxp
ZGF0aW9uRnVuYyh2YWx1ZSkpIHsKLS8vJSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlk
QXJndW1lbnRFeGNlcHRpb24KLS8vJSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJHUEIjI0tFWV9O
QU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5OiBBdHRlbXB0IHRvIHNldCBhbiB1bmtub3duIGVu
dW0gdmFsdWUgKCVkKSIsCi0vLyUgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXTsKLS8vJSAg
fQotLy8lCi0vLyUgIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6V1JBUFBFRCMjVkhFTFBFUih2YWx1
ZSkgZm9yS2V5OldSQVBQRUQjI0tIRUxQRVIoa2V5KV07Ci0vLyUgIGlmIChfYXV0b2NyZWF0b3Ip
IHsKLS8vJSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3Is
IHNlbGYpOwotLy8lICB9Ci0vLyV9Ci0vLyUKLS8vJUBlbmQKLS8vJQotCi0vLyVQRERNLURFRklO
RSBESUNUSU9OQVJZX0lNTVVUQUJMRV9DT1JFKEtFWV9OQU1FLCBLRVlfVFlQRSwgS2lzUCwgVkFM
VUVfTkFNRSwgVkFMVUVfVFlQRSwgS0hFTFBFUiwgVkhFTFBFUiwgVk5BTUUsIEFDQ0VTU09SX05B
TUUpCi0vLyUtICh2b2lkKWRlYWxsb2MgewotLy8lICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAot
Ly8lICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJl
bGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0vLyUgICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1
dG9jcmVhdG9yKTsKLS8vJSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotLy8lICBbc3VwZXIgZGVh
bGxvY107Ci0vLyV9Ci0vLyUKLS8vJS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9u
ZSAqKXpvbmUgewotLy8lICByZXR1cm4gW1tHUEIjI0tFWV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0
aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotLy8l
fQotLy8lCi0vLyUtIChCT09MKWlzRXF1YWw6KEdQQiMjS0VZX05BTUUjI1ZBTFVFX05BTUUjI0Rp
Y3Rpb25hcnkgKilvdGhlciB7Ci0vLyUgIGlmIChzZWxmID09IG90aGVyKSB7Ci0vLyUgICAgcmV0
dXJuIFlFUzsKLS8vJSAgfQotLy8lICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEIjI0tF
WV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLS8vJSAgICByZXR1cm4g
Tk87Ci0vLyUgIH0KLS8vJSAgcmV0dXJuIFtfZGljdGlvbmFyeSBpc0VxdWFsOm90aGVyLT5fZGlj
dGlvbmFyeV07Ci0vLyV9Ci0vLyUKLS8vJS0gKE5TVUludGVnZXIpaGFzaCB7Ci0vLyUgIHJldHVy
biBfZGljdGlvbmFyeS5jb3VudDsKLS8vJX0KLS8vJQotLy8lLSAoTlNTdHJpbmcgKilkZXNjcmlw
dGlvbiB7Ci0vLyUgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4g
eyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci0vLyV9Ci0vLyUKLS8v
JS0gKE5TVUludGVnZXIpY291bnQgewotLy8lICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci0v
LyV9Ci0vLyUKLS8vJS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZCMjQUNDRVNTT1JfTkFNRSMjVk5B
TUUkdSMjc1VzaW5nQmxvY2s6Ci0vLyUgICAgKHZvaWQgKF4pKEtFWV9UWVBFIEtpc1AjI2tleSwg
VkFMVUVfVFlQRSBWTkFNRSwgQk9PTCAqc3RvcCkpYmxvY2sgewotLy8lICBbX2RpY3Rpb25hcnkg
ZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oRU5VTV9UWVBFIyNLSEVMUEVSKEtF
WV9UWVBFKSMjYUtleSwKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVOVU1fVFlQRSMjVkhFTFBFUihWQUxVRV9UWVBFKSMjYSMjVk5BTUUkdSwK
LS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJP
T0wgKnN0b3ApIHsKLS8vJSAgICAgIGJsb2NrKFVOV1JBUCMjS0VZX05BTUUoYUtleSksIFVOV1JB
UCMjVkFMVUVfTkFNRShhIyNWTkFNRSR1KSwgc3RvcCk7Ci0vLyUgIH1dOwotLy8lfQotLy8lCi0v
LyVFWFRSQV9NRVRIT0RTXyMjVkhFTFBFUihLRVlfTkFNRSwgVkFMVUVfTkFNRSktIChzaXplX3Qp
Y29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQg
ewotLy8lICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0vLyUgIGlmIChj
b3VudCA9PSAwKSB7Ci0vLyUgICAgcmV0dXJuIDA7Ci0vLyUgIH0KLS8vJQotLy8lICBHUEJEYXRh
VHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0vLyUgIEdQ
QkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0vLyUgIF9fYmxv
Y2sgc2l6ZV90IHJlc3VsdCA9IDA7Ci0vLyUgIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5k
T2JqZWN0c1VzaW5nQmxvY2s6XihFTlVNX1RZUEUjI0tIRUxQRVIoS0VZX1RZUEUpIyNhS2V5LAot
Ly8lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5V
TV9UWVBFIyNWSEVMUEVSKFZBTFVFX1RZUEUpIyNhIyNWTkFNRSR1IyMsCi0vLyUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0v
LyUgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLS8vJSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1
dGVEaWN0IyNLRVlfTkFNRSMjRmllbGRTaXplKFVOV1JBUCMjS0VZX05BTUUoYUtleSksIGtNYXBL
ZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotLy8lICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURp
Y3QjI1ZBTFVFX05BTUUjI0ZpZWxkU2l6ZShVTldSQVAjI1ZBTFVFX05BTUUoYSMjVk5BTUUkdSks
IGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLS8vJSAgICByZXN1bHQgKz0g
R1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkgKyBtc2dTaXplOwot
Ly8lICB9XTsKLS8vJSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1Np
emUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotLy8lICByZXN1
bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotLy8lICByZXR1cm4gcmVzdWx0OwotLy8lfQotLy8lCi0v
LyUtICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0g
KilvdXRwdXRTdHJlYW0KLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJG
aWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0vLyUgIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUg
PSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLS8vJSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5
cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLS8vJSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZv
cm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVs
aW1pdGVkKTsKLS8vJSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdC
bG9jazpeKEVOVU1fVFlQRSMjS0hFTFBFUihLRVlfVFlQRSkjI2FLZXksCi0vLyUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlVNX1RZUEUjI1ZIRUxQ
RVIoVkFMVUVfVFlQRSkjI2EjI1ZOQU1FJHUsCi0vLyUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0vLyUgICAgI3ByYWdtYSB1
bnVzZWQoc3RvcCkKLS8vJSAgICAvLyBXcml0ZSB0aGUgdGFnLgotLy8lICAgIFtvdXRwdXRTdHJl
YW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0vLyUgICAgLy8gV3JpdGUgdGhlIHNpemUgb2YgdGhl
IG1lc3NhZ2UuCi0vLyUgICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdCMjS0VZX05BTUUj
I0ZpZWxkU2l6ZShVTldSQVAjI0tFWV9OQU1FKGFLZXkpLCBrTWFwS2V5RmllbGROdW1iZXIsIGtl
eURhdGFUeXBlKTsKLS8vJSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0IyNWQUxVRV9OQU1FIyNG
aWVsZFNpemUoVU5XUkFQIyNWQUxVRV9OQU1FKGEjI1ZOQU1FJHUpLCBrTWFwVmFsdWVGaWVsZE51
bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0vLyUgICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9U
YWc6KGludDMyX3QpbXNnU2l6ZV07Ci0vLyUgICAgLy8gV3JpdGUgdGhlIGZpZWxkcy4KLS8vJSAg
ICBXcml0ZURpY3QjI0tFWV9OQU1FIyNGaWVsZChvdXRwdXRTdHJlYW0sIFVOV1JBUCMjS0VZX05B
TUUoYUtleSksIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotLy8lICAgIFdyaXRl
RGljdCMjVkFMVUVfTkFNRSMjRmllbGQob3V0cHV0U3RyZWFtLCBVTldSQVAjI1ZBTFVFX05BTUUo
YSMjVk5BTUUkdSksIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLS8vJSAg
fV07Ci0vLyV9Ci0vLyUKLS8vJVNFUklBTF9EQVRBX0ZPUl9FTlRSWV8jI1ZIRUxQRVIoS0VZX05B
TUUsIFZBTFVFX05BTUUpLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1
ZSAqKXZhbHVlCi0vLyUgICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVl
ICopa2V5IHsKLS8vJSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpXUkFQUEVEIyNWSEVMUEVSKHZh
bHVlLT4jI0dQQlZBTFVFXyMjVkhFTFBFUihWQUxVRV9OQU1FKSMjKSBmb3JLZXk6V1JBUFBFRCMj
S0hFTFBFUihrZXktPnZhbHVlIyNLRVlfTkFNRSldOwotLy8lfQotLy8lCi0vLyUtICh2b2lkKWVu
dW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJs
b2NrIHsKLS8vJSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZCMjQUNDRVNTT1JfTkFNRSMjVk5BTUUk
dSMjc1VzaW5nQmxvY2s6XihLRVlfVFlQRSBLaXNQIyNrZXksIFZBTFVFX1RZUEUgVk5BTUUsIEJP
T0wgKnN0b3ApIHsKLS8vJSAgICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0vLyUgICAgICBibG9j
ayhURVhUX0ZPUk1BVF9PQkojI0tFWV9OQU1FKGtleSksIFRFWFRfRk9STUFUX09CSiMjVkFMVUVf
TkFNRShWTkFNRSkpOwotLy8lICB9XTsKLS8vJX0KLS8vJVBERE0tREVGSU5FIERJQ1RJT05BUllf
TVVUQUJMRV9DT1JFKEtFWV9OQU1FLCBLRVlfVFlQRSwgS2lzUCwgVkFMVUVfTkFNRSwgVkFMVUVf
VFlQRSwgS0hFTFBFUiwgVkhFTFBFUiwgVk5BTUUsIEFDQ0VTU09SX05BTUUpCi0vLyUtICh2b2lk
KWFkZCMjQUNDRVNTT1JfTkFNRSMjRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEIjI0tFWV9OQU1F
IyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLS8vJSAgaWYgKG90
aGVyRGljdGlvbmFyeSkgewotLy8lICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rp
b25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0vLyUgICAgaWYgKF9hdXRvY3Jl
YXRvcikgewotLy8lICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9j
cmVhdG9yLCBzZWxmKTsKLS8vJSAgICB9Ci0vLyUgIH0KLS8vJX0KLS8vJQotLy8lLSAodm9pZClz
ZXQjI0FDQ0VTU09SX05BTUUjI1ZOQU1FJHUjIzooVkFMVUVfVFlQRSlWTkFNRSBmb3JLZXk6KEtF
WV9UWVBFIyNLaXNQJFMjI0tpc1Apa2V5IHsKLS8vJURJQ1RJT05BUllfVkFMSURBVEVfVkFMVUVf
IyNWSEVMUEVSKFZOQU1FLCApIyNESUNUSU9OQVJZX1ZBTElEQVRFX0tFWV8jI0tIRUxQRVIoa2V5
LCApICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OldSQVBQRUQjI1ZIRUxQRVIoVk5BTUUpIGZvcktl
eTpXUkFQUEVEIyNLSEVMUEVSKGtleSldOwotLy8lICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0vLyUg
ICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsK
LS8vJSAgfQotLy8lfQotLy8lCi0vLyUtICh2b2lkKXJlbW92ZSMjVk5BTUUkdSMjRm9yS2V5OihL
RVlfVFlQRSMjS2lzUCRTIyNLaXNQKWFLZXkgewotLy8lICBbX2RpY3Rpb25hcnkgcmVtb3ZlT2Jq
ZWN0Rm9yS2V5OldSQVBQRUQjI0tIRUxQRVIoYUtleSldOwotLy8lfQotLy8lCi0vLyUtICh2b2lk
KXJlbW92ZUFsbCB7Ci0vLyUgIFtfZGljdGlvbmFyeSByZW1vdmVBbGxPYmplY3RzXTsKLS8vJX0K
LQotLy8KLS8vIEN1c3RvbSBHZW5lcmF0aW9uIGZvciBCb29sIGtleXMKLS8vCi0KLS8vJVBERE0t
REVGSU5FIERJQ1RJT05BUllfQk9PTF9LRVlfVE9fUE9EX0lNUEwoVkFMVUVfTkFNRSwgVkFMVUVf
VFlQRSkKLS8vJURJQ1RJT05BUllfQk9PTF9LRVlfVE9fVkFMVUVfSU1QTChWQUxVRV9OQU1FLCBW
QUxVRV9UWVBFLCBQT0QsIHZhbHVlKQotLy8lUERETS1ERUZJTkUgRElDVElPTkFSWV9CT09MX0tF
WV9UT19PQkpFQ1RfSU1QTChWQUxVRV9OQU1FLCBWQUxVRV9UWVBFKQotLy8lRElDVElPTkFSWV9C
T09MX0tFWV9UT19WQUxVRV9JTVBMKFZBTFVFX05BTUUsIFZBTFVFX1RZUEUsIE9CSkVDVCwgb2Jq
ZWN0KQotCi0vLyVQRERNLURFRklORSBESUNUSU9OQVJZX0JPT0xfS0VZX1RPX1ZBTFVFX0lNUEwo
VkFMVUVfTkFNRSwgVkFMVUVfVFlQRSwgSEVMUEVSLCBWTkFNRSkKLS8vJSNwcmFnbWEgbWFyayAt
IEJvb2wgLT4gVkFMVUVfTkFNRQotLy8lCi0vLyVAaW1wbGVtZW50YXRpb24gR1BCQm9vbCMjVkFM
VUVfTkFNRSMjRGljdGlvbmFyeSB7Ci0vLyUgQHBhY2thZ2UKLS8vJSAgVkFMVUVfVFlQRSBfdmFs
dWVzWzJdOwotLy8lQk9PTF9ESUNUX0hBU19TVE9SQUdFXyMjSEVMUEVSKCl9Ci0vLyUKLS8vJSsg
KGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLS8vJSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGlu
aXRXaXRoIyNWTkFNRSR1IyNzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNl
XTsKLS8vJX0KLS8vJQotLy8lKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoIyNWTkFNRSR1
IyM6KFZBTFVFX1RZUEUpVk5BTUUKLS8vJSAgICAgICAgICAgICAgICAgICAgICAjI1ZOQU1FJFMj
IyAgZm9yS2V5OihCT09MKWtleSB7Ci0vLyUgIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21w
aWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aCMjVk5BTUUkdSMj
czpmb3JLZXlzOmNvdW50OgotLy8lICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLS8v
JSAgcmV0dXJuIFtbKEdQQkJvb2wjI1ZBTFVFX05BTUUjI0RpY3Rpb25hcnkqKVtzZWxmIGFsbG9j
XSBpbml0V2l0aCMjVk5BTUUkdSMjczomIyNWTkFNRQotLy8lICAgICAgICAgICAgICAgICAgICBW
QUxVRV9OQU1FJFMgICAgICAgICAgICAgICAgICAgICAgICAjI1ZOQU1FJFMjIyAgZm9yS2V5czom
a2V5Ci0vLyUgICAgICAgICAgICAgICAgICAgIFZBTFVFX05BTUUkUyAgICAgICAgICAgICAgICAg
ICAgICAgICMjVk5BTUUkUyMjICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLS8vJX0KLS8vJQot
Ly8lKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoIyNWTkFNRSR1IyNzOihjb25zdCBWQUxV
RV9UWVBFIFtdKSMjVk5BTUUjI3MKLS8vJSAgICAgICAgICAgICAgICAgICAgICAjI1ZOQU1FJFMj
IyAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlrZXlzCi0vLyUgICAgICAgICAgICAgICAgICAgICAg
IyNWTkFNRSRTIyMgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotLy8lICAvLyBDYXN0IGlz
IG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcg
aW5pdFdpdGgjI1ZOQU1FJHUjI3M6Zm9yS2V5czpjb3VudDoKLS8vJSAgLy8gb24gdG8gZ2V0IHRo
ZSB0eXBlIGNvcnJlY3QuCi0vLyUgIHJldHVybiBbWyhHUEJCb29sIyNWQUxVRV9OQU1FIyNEaWN0
aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGgjI1ZOQU1FJHUjI3M6IyNWTkFNRSMjcwotLy8l
ICAgICAgICAgICAgICAgICAgICBWQUxVRV9OQU1FJFMgICAgICAgICAgICAgICAgICAgICAgICAj
I1ZOQU1FJFMjIyAgZm9yS2V5czprZXlzCi0vLyUgICAgICAgICAgICAgICAgICAgIFZBTFVFX05B
TUUkUyAgICAgICAgICAgICAgICAgICAgICAgICMjVk5BTUUkUyMjICAgIGNvdW50OmNvdW50XSBh
dXRvcmVsZWFzZV07Ci0vLyV9Ci0vLyUKLS8vJSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aERpY3Rpb25hcnk6KEdQQkJvb2wjI1ZBTFVFX05BTUUjI0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5
IHsKLS8vJSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xh
c3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLS8vJSAgLy8gb24gdG8gZ2V0
IHRoZSB0eXBlIGNvcnJlY3QuCi0vLyUgIHJldHVybiBbWyhHUEJCb29sIyNWQUxVRV9OQU1FIyNE
aWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1
dG9yZWxlYXNlXTsKLS8vJX0KLS8vJQotLy8lKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRo
Q2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotLy8lICByZXR1cm4gW1tbc2VsZiBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwotLy8lfQotLy8lCi0v
LyUtIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0vLyUgIHJldHVybiBbc2VsZiBpbml0V2l0aCMjVk5B
TUUkdSMjczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLS8vJX0KLS8vJQotLy8lQk9PTF9E
SUNUX0lOSVRTXyMjSEVMUEVSKFZBTFVFX05BTUUsIFZBTFVFX1RZUEUpCi0vLyUKLS8vJS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLS8vJSAg
I3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0vLyUgIHJldHVybiBbc2VsZiBpbml0V2l0aCMjVk5B
TUUkdSMjczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLS8vJX0KLS8vJQotLy8lQk9PTF9E
SUNUX0RFQUxMT0MjI0hFTFBFUigpCi0vLyUKLS8vJS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpv
bmU6KE5TWm9uZSAqKXpvbmUgewotLy8lICByZXR1cm4gW1tHUEJCb29sIyNWQUxVRV9OQU1FIyNE
aWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwot
Ly8lfQotLy8lCi0vLyUtIChCT09MKWlzRXF1YWw6KEdQQkJvb2wjI1ZBTFVFX05BTUUjI0RpY3Rp
b25hcnkgKilvdGhlciB7Ci0vLyUgIGlmIChzZWxmID09IG90aGVyKSB7Ci0vLyUgICAgcmV0dXJu
IFlFUzsKLS8vJSAgfQotLy8lICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJCb29sIyNW
QUxVRV9OQU1FIyNEaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLS8vJSAgICByZXR1cm4gTk87Ci0vLyUg
IH0KLS8vJSAgaWYgKChCT09MX0RJQ1RfV19IQVMjI0hFTFBFUigwLCApICE9IEJPT0xfRElDVF9X
X0hBUyMjSEVMUEVSKDAsIG90aGVyLT4pKSB8fAotLy8lICAgICAgKEJPT0xfRElDVF9XX0hBUyMj
SEVMUEVSKDEsICkgIT0gQk9PTF9ESUNUX1dfSEFTIyNIRUxQRVIoMSwgb3RoZXItPikpKSB7Ci0v
LyUgICAgcmV0dXJuIE5POwotLy8lICB9Ci0vLyUgIGlmICgoQk9PTF9ESUNUX1dfSEFTIyNIRUxQ
RVIoMCwgKSAmJiAoTkVRXyMjSEVMUEVSKF92YWx1ZXNbMF0sIG90aGVyLT5fdmFsdWVzWzBdKSkp
IHx8Ci0vLyUgICAgICAoQk9PTF9ESUNUX1dfSEFTIyNIRUxQRVIoMSwgKSAmJiAoTkVRXyMjSEVM
UEVSKF92YWx1ZXNbMV0sIG90aGVyLT5fdmFsdWVzWzFdKSkpKSB7Ci0vLyUgICAgcmV0dXJuIE5P
OwotLy8lICB9Ci0vLyUgIHJldHVybiBZRVM7Ci0vLyV9Ci0vLyUKLS8vJS0gKE5TVUludGVnZXIp
aGFzaCB7Ci0vLyUgIHJldHVybiAoQk9PTF9ESUNUX1dfSEFTIyNIRUxQRVIoMCwgKSA/IDEgOiAw
KSArIChCT09MX0RJQ1RfV19IQVMjI0hFTFBFUigxLCApID8gMSA6IDApOwotLy8lfQotLy8lCi0v
LyUtIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLS8vJSAgTlNNdXRhYmxlU3RyaW5nICpyZXN1
bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsiLCBbc2Vs
ZiBjbGFzc10sIHNlbGZdOwotLy8lICBpZiAoQk9PTF9ESUNUX1dfSEFTIyNIRUxQRVIoMCwgKSkg
ewotLy8lICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiTk86IFNUUl9GT1JNQVRfIyNIRUxQRVIo
VkFMVUVfTkFNRSkiLCBfdmFsdWVzWzBdXTsKLS8vJSAgfQotLy8lICBpZiAoQk9PTF9ESUNUX1df
SEFTIyNIRUxQRVIoMSwgKSkgewotLy8lICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiWUVTOiBT
VFJfRk9STUFUXyMjSEVMUEVSKFZBTFVFX05BTUUpIiwgX3ZhbHVlc1sxXV07Ci0vLyUgIH0KLS8v
JSAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIgfSJdOwotLy8lICByZXR1cm4gcmVzdWx0OwotLy8l
fQotLy8lCi0vLyUtIChOU1VJbnRlZ2VyKWNvdW50IHsKLS8vJSAgcmV0dXJuIChCT09MX0RJQ1Rf
V19IQVMjI0hFTFBFUigwLCApID8gMSA6IDApICsgKEJPT0xfRElDVF9XX0hBUyMjSEVMUEVSKDEs
ICkgPyAxIDogMCk7Ci0vLyV9Ci0vLyUKLS8vJUJPT0xfVkFMVUVfRk9SX0tFWV8jI0hFTFBFUihW
QUxVRV9UWVBFKQotLy8lCi0vLyVCT09MX1NFVF9HUEJWQUxVRV9GT1JfS0VZXyMjSEVMUEVSKFZB
TFVFX05BTUUsIFZBTFVFX1RZUEUsIFZpc1ApCi0vLyUKLS8vJS0gKHZvaWQpZW51bWVyYXRlRm9y
VGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotLy8l
ICBpZiAoQk9PTF9ESUNUX0hBUyMjSEVMUEVSKDAsICkpIHsKLS8vJSAgICBibG9jayhAImZhbHNl
IiwgVEVYVF9GT1JNQVRfT0JKIyNWQUxVRV9OQU1FKF92YWx1ZXNbMF0pKTsKLS8vJSAgfQotLy8l
ICBpZiAoQk9PTF9ESUNUX1dfSEFTIyNIRUxQRVIoMSwgKSkgewotLy8lICAgIGJsb2NrKEAidHJ1
ZSIsIFRFWFRfRk9STUFUX09CSiMjVkFMVUVfTkFNRShfdmFsdWVzWzFdKSk7Ci0vLyUgIH0KLS8v
JX0KLS8vJQotLy8lLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kIyNWTkFNRSR1IyNzVXNpbmdCbG9j
azoKLS8vJSAgICAodm9pZCAoXikoQk9PTCBrZXksIFZBTFVFX1RZUEUgVk5BTUUsIEJPT0wgKnN0
b3ApKWJsb2NrIHsKLS8vJSAgQk9PTCBzdG9wID0gTk87Ci0vLyUgIGlmIChCT09MX0RJQ1RfSEFT
IyNIRUxQRVIoMCwgKSkgewotLy8lICAgIGJsb2NrKE5PLCBfdmFsdWVzWzBdLCAmc3RvcCk7Ci0v
LyUgIH0KLS8vJSAgaWYgKCFzdG9wICYmIEJPT0xfRElDVF9XX0hBUyMjSEVMUEVSKDEsICkpIHsK
LS8vJSAgICBibG9jayhZRVMsIF92YWx1ZXNbMV0sICZzdG9wKTsKLS8vJSAgfQotLy8lfQotLy8l
Ci0vLyVCT09MX0VYVFJBX01FVEhPRFNfIyNIRUxQRVIoQm9vbCwgVkFMVUVfTkFNRSktIChzaXpl
X3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmll
bGQgewotLy8lICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlw
ZShmaWVsZCk7Ci0vLyUgIE5TVUludGVnZXIgY291bnQgPSAwOwotLy8lICBzaXplX3QgcmVzdWx0
ID0gMDsKLS8vJSAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLS8vJSAgICBpZiAoQk9P
TF9ESUNUX0hBUyMjSEVMUEVSKGksICkpIHsKLS8vJSAgICAgICsrY291bnQ7Ci0vLyUgICAgICBz
aXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0Qm9vbEZpZWxkU2l6ZSgoaSA9PSAxKSwga01hcEtl
eUZpZWxkTnVtYmVyLCBHUEJEYXRhVHlwZUJvb2wpOwotLy8lICAgICAgbXNnU2l6ZSArPSBDb21w
dXRlRGljdCMjVkFMVUVfTkFNRSMjRmllbGRTaXplKF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxk
TnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLS8vJSAgICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3
VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0vLyUgICAgfQotLy8l
ICB9Ci0vLyUgIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQ
QkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLS8vJSAgcmVzdWx0ICs9
IHRhZ1NpemUgKiBjb3VudDsKLS8vJSAgcmV0dXJuIHJlc3VsdDsKLS8vJX0KLS8vJQotLy8lLSAo
dm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0
cHV0U3RyZWFtCi0vLyUgICAgICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGRE
ZXNjcmlwdG9yICopZmllbGQgewotLy8lICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BC
R2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0vLyUgIHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3Jt
YXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGlt
aXRlZCk7Ci0vLyUgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0vLyUgICAgaWYgKEJP
T0xfRElDVF9IQVMjI0hFTFBFUihpLCApKSB7Ci0vLyUgICAgICAvLyBXcml0ZSB0aGUgdGFnLgot
Ly8lICAgICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLS8vJSAgICAgIC8v
IFdyaXRlIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLgotLy8lICAgICAgc2l6ZV90IG1zZ1NpemUg
PSBDb21wdXRlRGljdEJvb2xGaWVsZFNpemUoKGkgPT0gMSksIGtNYXBLZXlGaWVsZE51bWJlciwg
R1BCRGF0YVR5cGVCb29sKTsKLS8vJSAgICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3QjI1ZBTFVF
X05BTUUjI0ZpZWxkU2l6ZShfdmFsdWVzW2ldLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVE
YXRhVHlwZSk7Ci0vLyUgICAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJf
dCltc2dTaXplXTsKLS8vJSAgICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0vLyUgICAgICBXcml0
ZURpY3RCb29sRmllbGQob3V0cHV0U3RyZWFtLCAoaSA9PSAxKSwga01hcEtleUZpZWxkTnVtYmVy
LCBHUEJEYXRhVHlwZUJvb2wpOwotLy8lICAgICAgV3JpdGVEaWN0IyNWQUxVRV9OQU1FIyNGaWVs
ZChvdXRwdXRTdHJlYW0sIF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURh
dGFUeXBlKTsKLS8vJSAgICB9Ci0vLyUgIH0KLS8vJX0KLS8vJQotLy8lQk9PTF9ESUNUX01VVEFU
SU9OU18jI0hFTFBFUihWQUxVRV9OQU1FLCBWQUxVRV9UWVBFKQotLy8lCi0vLyVAZW5kCi0vLyUK
LQotCi0vLwotLy8gSGVscGVycyBmb3IgUE9EcwotLy8KLQotLy8lUERETS1ERUZJTkUgVkFMVUVf
Rk9SX0tFWV9QT0QoS0VZX1RZUEUsIFZBTFVFX05BTUUsIFZBTFVFX1RZUEUsIEtIRUxQRVIpCi0v
LyUtIChCT09MKXZhbHVlRm9yS2V5OihLRVlfVFlQRSlrZXkgdmFsdWU6KFZBTFVFX1RZUEUgKil2
YWx1ZSB7Ci0vLyUgIE5TTnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTpXUkFQUEVEIyNLSEVMUEVSKGtleSldOwotLy8lICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkgewot
Ly8lICAgICp2YWx1ZSA9IFVOV1JBUCMjVkFMVUVfTkFNRSh3cmFwcGVkKTsKLS8vJSAgfQotLy8l
ICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci0vLyV9Ci0vLyVQRERNLURFRklORSBXUkFQUEVE
UE9EKFZBTFVFKQotLy8lQChWQUxVRSkKLS8vJVBERE0tREVGSU5FIFVOV1JBUFVJbnQzMihWQUxV
RSkKLS8vJVtWQUxVRSB1bnNpZ25lZEludFZhbHVlXQotLy8lUERETS1ERUZJTkUgVU5XUkFQSW50
MzIoVkFMVUUpCi0vLyVbVkFMVUUgaW50VmFsdWVdCi0vLyVQRERNLURFRklORSBVTldSQVBVSW50
NjQoVkFMVUUpCi0vLyVbVkFMVUUgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXQotLy8lUERETS1ERUZJ
TkUgVU5XUkFQSW50NjQoVkFMVUUpCi0vLyVbVkFMVUUgbG9uZ0xvbmdWYWx1ZV0KLS8vJVBERE0t
REVGSU5FIFVOV1JBUEJvb2woVkFMVUUpCi0vLyVbVkFMVUUgYm9vbFZhbHVlXQotLy8lUERETS1E
RUZJTkUgVU5XUkFQRmxvYXQoVkFMVUUpCi0vLyVbVkFMVUUgZmxvYXRWYWx1ZV0KLS8vJVBERE0t
REVGSU5FIFVOV1JBUERvdWJsZShWQUxVRSkKLS8vJVtWQUxVRSBkb3VibGVWYWx1ZV0KLS8vJVBE
RE0tREVGSU5FIFVOV1JBUEVudW0oVkFMVUUpCi0vLyVbVkFMVUUgaW50VmFsdWVdCi0vLyVQRERN
LURFRklORSBURVhUX0ZPUk1BVF9PQkpVSW50MzIoVkFMVUUpCi0vLyVbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiV1IiwgVkFMVUVdCi0vLyVQRERNLURFRklORSBURVhUX0ZPUk1BVF9PQkpJ
bnQzMihWQUxVRSkKLS8vJVtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCBWQUxVRV0K
LS8vJVBERE0tREVGSU5FIFRFWFRfRk9STUFUX09CSlVJbnQ2NChWQUxVRSkKLS8vJVtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWxsdSIsIFZBTFVFXQotLy8lUERETS1ERUZJTkUgVEVYVF9G
T1JNQVRfT0JKSW50NjQoVkFMVUUpCi0vLyVbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVs
bGQiLCBWQUxVRV0KLS8vJVBERE0tREVGSU5FIFRFWFRfRk9STUFUX09CSkJvb2woVkFMVUUpCi0v
LyUoVkFMVUUgPyBAInRydWUiIDogQCJmYWxzZSIpCi0vLyVQRERNLURFRklORSBURVhUX0ZPUk1B
VF9PQkpGbG9hdChWQUxVRSkKLS8vJVtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4qZyIs
IEZMVF9ESUcsIFZBTFVFXQotLy8lUERETS1ERUZJTkUgVEVYVF9GT1JNQVRfT0JKRG91YmxlKFZB
TFVFKQotLy8lW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlLipsZyIsIERCTF9ESUcsIFZB
TFVFXQotLy8lUERETS1ERUZJTkUgVEVYVF9GT1JNQVRfT0JKRW51bShWQUxVRSkKLS8vJUAoVkFM
VUUpCi0vLyVQRERNLURFRklORSBFTlVNX1RZUEVQT0QoVFlQRSkKLS8vJU5TTnVtYmVyICoKLS8v
JVBERE0tREVGSU5FIE5FUV9QT0QoVkFMMSwgVkFMMikKLS8vJVZBTDEgIT0gVkFMMgotLy8lUERE
TS1ERUZJTkUgRVhUUkFfTUVUSE9EU19QT0QoS0VZX05BTUUsIFZBTFVFX05BTUUpCi0vLyBFbXB0
eQotLy8lUERETS1ERUZJTkUgQk9PTF9FWFRSQV9NRVRIT0RTX1BPRChLRVlfTkFNRSwgVkFMVUVf
TkFNRSkKLS8vIEVtcHR5Ci0vLyVQRERNLURFRklORSBTRVJJQUxfREFUQV9GT1JfRU5UUllfUE9E
KEtFWV9OQU1FLCBWQUxVRV9OQU1FKQotLy8lU0VSSUFMX0RBVEFfRk9SX0VOVFJZX1BPRF8jI1ZB
TFVFX05BTUUoS0VZX05BTUUpCi0vLyVQRERNLURFRklORSBTRVJJQUxfREFUQV9GT1JfRU5UUllf
UE9EX1VJbnQzMihLRVlfTkFNRSkKLS8vIEVtcHR5Ci0vLyVQRERNLURFRklORSBTRVJJQUxfREFU
QV9GT1JfRU5UUllfUE9EX0ludDMyKEtFWV9OQU1FKQotLy8gRW1wdHkKLS8vJVBERE0tREVGSU5F
IFNFUklBTF9EQVRBX0ZPUl9FTlRSWV9QT0RfVUludDY0KEtFWV9OQU1FKQotLy8gRW1wdHkKLS8v
JVBERE0tREVGSU5FIFNFUklBTF9EQVRBX0ZPUl9FTlRSWV9QT0RfSW50NjQoS0VZX05BTUUpCi0v
LyBFbXB0eQotLy8lUERETS1ERUZJTkUgU0VSSUFMX0RBVEFfRk9SX0VOVFJZX1BPRF9Cb29sKEtF
WV9OQU1FKQotLy8gRW1wdHkKLS8vJVBERE0tREVGSU5FIFNFUklBTF9EQVRBX0ZPUl9FTlRSWV9Q
T0RfRmxvYXQoS0VZX05BTUUpCi0vLyBFbXB0eQotLy8lUERETS1ERUZJTkUgU0VSSUFMX0RBVEFf
Rk9SX0VOVFJZX1BPRF9Eb3VibGUoS0VZX05BTUUpCi0vLyBFbXB0eQotLy8lUERETS1ERUZJTkUg
U0VSSUFMX0RBVEFfRk9SX0VOVFJZX1BPRF9FbnVtKEtFWV9OQU1FKQotLy8lLSAoTlNEYXRhICop
c2VyaWFsaXplZERhdGFGb3JVbmtub3duVmFsdWU6KGludDMyX3QpdmFsdWUKLS8vJSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkK
LS8vJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleURhdGFUeXBlOihHUEJEYXRhVHlw
ZSlrZXlEYXRhVHlwZSB7Ci0vLyUgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3QjI0tFWV9O
QU1FIyNGaWVsZFNpemUoa2V5LT52YWx1ZSMjS0VZX05BTUUsIGtNYXBLZXlGaWVsZE51bWJlciwg
a2V5RGF0YVR5cGUpOwotLy8lICBtc2dTaXplICs9IENvbXB1dGVEaWN0RW51bUZpZWxkU2l6ZSh2
YWx1ZSwga01hcFZhbHVlRmllbGROdW1iZXIsIEdQQkRhdGFUeXBlRW51bSk7Ci0vLyUgIE5TTXV0
YWJsZURhdGEgKmRhdGEgPSBbTlNNdXRhYmxlRGF0YSBkYXRhV2l0aExlbmd0aDptc2dTaXplXTsK
LS8vJSAgR1BCQ29kZWRPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbSA9IFtbR1BCQ29kZWRPdXRw
dXRTdHJlYW0gYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhXTsKLS8vJSAgV3JpdGVEaWN0IyNLRVlf
TkFNRSMjRmllbGQob3V0cHV0U3RyZWFtLCBrZXktPnZhbHVlIyNLRVlfTkFNRSwga01hcEtleUZp
ZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0vLyUgIFdyaXRlRGljdEVudW1GaWVsZChvdXRwdXRT
dHJlYW0sIHZhbHVlLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVFbnVtKTsKLS8v
JSAgW291dHB1dFN0cmVhbSByZWxlYXNlXTsKLS8vJSAgcmV0dXJuIGRhdGE7Ci0vLyV9Ci0vLyUK
LS8vJVBERE0tREVGSU5FIEdQQlZBTFVFX1BPRChWQUxVRV9OQU1FKQotLy8ldmFsdWUjI1ZBTFVF
X05BTUUKLS8vJVBERE0tREVGSU5FIERJQ1RJT05BUllfVkFMSURBVEVfVkFMVUVfUE9EKFZBTFVF
X05BTUUsIEVYVFJBX0lOREVOVCkKLS8vIEVtcHR5Ci0vLyVQRERNLURFRklORSBESUNUSU9OQVJZ
X1ZBTElEQVRFX0tFWV9QT0QoS0VZX05BTUUsIEVYVFJBX0lOREVOVCkKLS8vIEVtcHR5Ci0KLS8v
JVBERE0tREVGSU5FIEJPT0xfRElDVF9IQVNfU1RPUkFHRV9QT0QoKQotLy8lICBCT09MIF92YWx1
ZVNldFsyXTsKLS8vJQotLy8lUERETS1ERUZJTkUgQk9PTF9ESUNUX0lOSVRTX1BPRChWQUxVRV9O
QU1FLCBWQUxVRV9UWVBFKQotLy8lLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25z
dCBWQUxVRV9UWVBFIFtdKXZhbHVlcwotLy8lICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlz
Oihjb25zdCBCT09MIFtdKWtleXMKLS8vJSAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoo
TlNVSW50ZWdlciljb3VudCB7Ci0vLyUgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0vLyUgIGlmIChz
ZWxmKSB7Ci0vLyUgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewot
Ly8lICAgICAgaW50IGlkeCA9IGtleXNbaV0gPyAxIDogMDsKLS8vJSAgICAgIF92YWx1ZXNbaWR4
XSA9IHZhbHVlc1tpXTsKLS8vJSAgICAgIF92YWx1ZVNldFtpZHhdID0gWUVTOwotLy8lICAgIH0K
LS8vJSAgfQotLy8lICByZXR1cm4gc2VsZjsKLS8vJX0KLS8vJQotLy8lLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRGljdGlvbmFyeTooR1BCQm9vbCMjVkFMVUVfTkFNRSMjRGljdGlvbmFyeSAqKWRp
Y3Rpb25hcnkgewotLy8lICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlz
Ok5VTEwgY291bnQ6MF07Ci0vLyUgIGlmIChzZWxmKSB7Ci0vLyUgICAgaWYgKGRpY3Rpb25hcnkp
IHsKLS8vJSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0vLyUgICAgICAgIGlm
IChkaWN0aW9uYXJ5LT5fdmFsdWVTZXRbaV0pIHsKLS8vJSAgICAgICAgICBfdmFsdWVzW2ldID0g
ZGljdGlvbmFyeS0+X3ZhbHVlc1tpXTsKLS8vJSAgICAgICAgICBfdmFsdWVTZXRbaV0gPSBZRVM7
Ci0vLyUgICAgICAgIH0KLS8vJSAgICAgIH0KLS8vJSAgICB9Ci0vLyUgIH0KLS8vJSAgcmV0dXJu
IHNlbGY7Ci0vLyV9Ci0vLyVQRERNLURFRklORSBCT09MX0RJQ1RfREVBTExPQ1BPRCgpCi0vLyUj
aWYgIWRlZmluZWQoTlNfQkxPQ0tfQVNTRVJUSU9OUykKLS8vJS0gKHZvaWQpZGVhbGxvYyB7Ci0v
LyUgIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0vLyUgICAgICAgICAgIEAiJUA6IEF1dG9jcmVh
dG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLS8v
JSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotLy8lICBbc3VwZXIgZGVh
bGxvY107Ci0vLyV9Ci0vLyUjZW5kaWYgIC8vICFkZWZpbmVkKE5TX0JMT0NLX0FTU0VSVElPTlMp
Ci0vLyVQRERNLURFRklORSBCT09MX0RJQ1RfV19IQVNQT0QoSURYLCBSRUYpCi0vLyVCT09MX0RJ
Q1RfSEFTUE9EKElEWCwgUkVGKQotLy8lUERETS1ERUZJTkUgQk9PTF9ESUNUX0hBU1BPRChJRFgs
IFJFRikKLS8vJVJFRiMjX3ZhbHVlU2V0W0lEWF0KLS8vJVBERE0tREVGSU5FIEJPT0xfVkFMVUVf
Rk9SX0tFWV9QT0QoVkFMVUVfVFlQRSkKLS8vJS0gKEJPT0wpdmFsdWVGb3JLZXk6KEJPT0wpa2V5
IHZhbHVlOihWQUxVRV9UWVBFICopdmFsdWUgewotLy8lICBpbnQgaWR4ID0gKGtleSA/IDEgOiAw
KTsKLS8vJSAgaWYgKF92YWx1ZVNldFtpZHhdKSB7Ci0vLyUgICAgaWYgKHZhbHVlKSB7Ci0vLyUg
ICAgICAqdmFsdWUgPSBfdmFsdWVzW2lkeF07Ci0vLyUgICAgfQotLy8lICAgIHJldHVybiBZRVM7
Ci0vLyUgIH0KLS8vJSAgcmV0dXJuIE5POwotLy8lfQotLy8lUERETS1ERUZJTkUgQk9PTF9TRVRf
R1BCVkFMVUVfRk9SX0tFWV9QT0QoVkFMVUVfTkFNRSwgVkFMVUVfVFlQRSwgVmlzUCkKLS8vJS0g
KHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotLy8lICAg
ICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0vLyUgIGlu
dCBpZHggPSAoa2V5LT52YWx1ZUJvb2wgPyAxIDogMCk7Ci0vLyUgIF92YWx1ZXNbaWR4XSA9IHZh
bHVlLT52YWx1ZSMjVkFMVUVfTkFNRTsKLS8vJSAgX3ZhbHVlU2V0W2lkeF0gPSBZRVM7Ci0vLyV9
Ci0vLyVQRERNLURFRklORSBCT09MX0RJQ1RfTVVUQVRJT05TX1BPRChWQUxVRV9OQU1FLCBWQUxV
RV9UWVBFKQotLy8lLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkJvb2wjI1ZB
TFVFX05BTUUjI0RpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotLy8lICBpZiAob3RoZXJE
aWN0aW9uYXJ5KSB7Ci0vLyUgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLS8vJSAg
ICAgIGlmIChvdGhlckRpY3Rpb25hcnktPl92YWx1ZVNldFtpXSkgewotLy8lICAgICAgICBfdmFs
dWVTZXRbaV0gPSBZRVM7Ci0vLyUgICAgICAgIF92YWx1ZXNbaV0gPSBvdGhlckRpY3Rpb25hcnkt
Pl92YWx1ZXNbaV07Ci0vLyUgICAgICB9Ci0vLyUgICAgfQotLy8lICAgIGlmIChfYXV0b2NyZWF0
b3IpIHsKLS8vJSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3Jl
YXRvciwgc2VsZik7Ci0vLyUgICAgfQotLy8lICB9Ci0vLyV9Ci0vLyUKLS8vJS0gKHZvaWQpc2V0
VmFsdWU6KFZBTFVFX1RZUEUpdmFsdWUgZm9yS2V5OihCT09MKWtleSB7Ci0vLyUgIGludCBpZHgg
PSAoa2V5ID8gMSA6IDApOwotLy8lICBfdmFsdWVzW2lkeF0gPSB2YWx1ZTsKLS8vJSAgX3ZhbHVl
U2V0W2lkeF0gPSBZRVM7Ci0vLyUgIGlmIChfYXV0b2NyZWF0b3IpIHsKLS8vJSAgICBHUEJBdXRv
Y3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotLy8lICB9Ci0v
LyV9Ci0vLyUKLS8vJS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KEJPT0wpYUtleSB7Ci0vLyUg
IF92YWx1ZVNldFthS2V5ID8gMSA6IDBdID0gTk87Ci0vLyV9Ci0vLyUKLS8vJS0gKHZvaWQpcmVt
b3ZlQWxsIHsKLS8vJSAgX3ZhbHVlU2V0WzBdID0gTk87Ci0vLyUgIF92YWx1ZVNldFsxXSA9IE5P
OwotLy8lfQotLy8lUERETS1ERUZJTkUgU1RSX0ZPUk1BVF9QT0QoVkFMVUVfTkFNRSkKLS8vJVNU
Ul9GT1JNQVRfIyNWQUxVRV9OQU1FKCkKLS8vJVBERE0tREVGSU5FIFNUUl9GT1JNQVRfVUludDMy
KCkKLS8vJSV1Ci0vLyVQRERNLURFRklORSBTVFJfRk9STUFUX0ludDMyKCkKLS8vJSVkCi0vLyVQ
RERNLURFRklORSBTVFJfRk9STUFUX1VJbnQ2NCgpCi0vLyUlbGx1Ci0vLyVQRERNLURFRklORSBT
VFJfRk9STUFUX0ludDY0KCkKLS8vJSVsbGQKLS8vJVBERE0tREVGSU5FIFNUUl9GT1JNQVRfQm9v
bCgpCi0vLyUlZAotLy8lUERETS1ERUZJTkUgU1RSX0ZPUk1BVF9GbG9hdCgpCi0vLyUlZgotLy8l
UERETS1ERUZJTkUgU1RSX0ZPUk1BVF9Eb3VibGUoKQotLy8lJWxmCi0KLS8vCi0vLyBIZWxwZXJz
IGZvciBPYmplY3RzCi0vLwotCi0vLyVQRERNLURFRklORSBWQUxVRV9GT1JfS0VZX09CSkVDVChL
RVlfVFlQRSwgVkFMVUVfTkFNRSwgVkFMVUVfVFlQRSwgS0hFTFBFUikKLS8vJS0gKFZBTFVFX1RZ
UEUpb2JqZWN0Rm9yS2V5OihLRVlfVFlQRSlrZXkgewotLy8lICBWQUxVRV9UWVBFIHJlc3VsdCA9
IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6V1JBUFBFRCMjS0hFTFBFUihrZXkpXTsKLS8vJSAg
cmV0dXJuIHJlc3VsdDsKLS8vJX0KLS8vJVBERE0tREVGSU5FIFdSQVBQRURPQkpFQ1QoVkFMVUUp
Ci0vLyVWQUxVRQotLy8lUERETS1ERUZJTkUgVU5XUkFQU3RyaW5nKFZBTFVFKQotLy8lVkFMVUUK
LS8vJVBERE0tREVGSU5FIFVOV1JBUE9iamVjdChWQUxVRSkKLS8vJVZBTFVFCi0vLyVQRERNLURF
RklORSBURVhUX0ZPUk1BVF9PQkpTdHJpbmcoVkFMVUUpCi0vLyVWQUxVRQotLy8lUERETS1ERUZJ
TkUgVEVYVF9GT1JNQVRfT0JKT2JqZWN0KFZBTFVFKQotLy8lVkFMVUUKLS8vJVBERE0tREVGSU5F
IEVOVU1fVFlQRU9CSkVDVChUWVBFKQotLy8lRU5VTV9UWVBFT0JKRUNUXyMjVFlQRSgpCi0vLyVQ
RERNLURFRklORSBFTlVNX1RZUEVPQkpFQ1RfTlNTdHJpbmcoKQotLy8lTlNTdHJpbmcgKgotLy8l
UERETS1ERUZJTkUgRU5VTV9UWVBFT0JKRUNUX2lkKCkKLS8vJWlkICMjCi0vLyVQRERNLURFRklO
RSBORVFfT0JKRUNUKFZBTDEsIFZBTDIpCi0vLyUhW1ZBTDEgaXNFcXVhbDpWQUwyXQotLy8lUERE
TS1ERUZJTkUgRVhUUkFfTUVUSE9EU19PQkpFQ1QoS0VZX05BTUUsIFZBTFVFX05BTUUpCi0vLyUt
IChCT09MKWlzSW5pdGlhbGl6ZWQgewotLy8lICBmb3IgKEdQQk1lc3NhZ2UgKm1zZyBpbiBbX2Rp
Y3Rpb25hcnkgb2JqZWN0RW51bWVyYXRvcl0pIHsKLS8vJSAgICBpZiAoIW1zZy5pbml0aWFsaXpl
ZCkgewotLy8lICAgICAgcmV0dXJuIE5POwotLy8lICAgIH0KLS8vJSAgfQotLy8lICByZXR1cm4g
WUVTOwotLy8lfQotLy8lCi0vLyUtIChpbnN0YW5jZXR5cGUpZGVlcENvcHlXaXRoWm9uZTooTlNa
b25lICopem9uZSB7Ci0vLyUgIEdQQiMjS0VZX05BTUUjI1ZBTFVFX05BTUUjI0RpY3Rpb25hcnkg
Km5ld0RpY3QgPQotLy8lICAgICAgW1tHUEIjI0tFWV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XTsKLS8vJSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmpl
Y3RzVXNpbmdCbG9jazpeKGlkIGFLZXksCi0vLyUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHUEJNZXNzYWdlICptc2csCi0vLyUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0vLyUg
ICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLS8vJSAgICBHUEJNZXNzYWdlICpjb3BpZWRNc2cgPSBb
bXNnIGNvcHlXaXRoWm9uZTp6b25lXTsKLS8vJSAgICBbbmV3RGljdC0+X2RpY3Rpb25hcnkgc2V0
T2JqZWN0OmNvcGllZE1zZyBmb3JLZXk6YUtleV07Ci0vLyUgICAgW2NvcGllZE1zZyByZWxlYXNl
XTsKLS8vJSAgfV07Ci0vLyUgIHJldHVybiBuZXdEaWN0OwotLy8lfQotLy8lCi0vLyUKLS8vJVBE
RE0tREVGSU5FIEJPT0xfRVhUUkFfTUVUSE9EU19PQkpFQ1QoS0VZX05BTUUsIFZBTFVFX05BTUUp
Ci0vLyUtIChCT09MKWlzSW5pdGlhbGl6ZWQgewotLy8lICBpZiAoX3ZhbHVlc1swXSAmJiAhW192
YWx1ZXNbMF0gaXNJbml0aWFsaXplZF0pIHsKLS8vJSAgICByZXR1cm4gTk87Ci0vLyUgIH0KLS8v
JSAgaWYgKF92YWx1ZXNbMV0gJiYgIVtfdmFsdWVzWzFdIGlzSW5pdGlhbGl6ZWRdKSB7Ci0vLyUg
ICAgcmV0dXJuIE5POwotLy8lICB9Ci0vLyUgIHJldHVybiBZRVM7Ci0vLyV9Ci0vLyUKLS8vJS0g
KGluc3RhbmNldHlwZSlkZWVwQ29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLS8vJSAgR1BC
IyNLRVlfTkFNRSMjVkFMVUVfTkFNRSMjRGljdGlvbmFyeSAqbmV3RGljdCA9Ci0vLyUgICAgICBb
W0dQQiMjS0VZX05BTUUjI1ZBTFVFX05BTUUjI0RpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotLy8l
ICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotLy8lICAgIGlmIChfdmFsdWVzW2ldICE9
IG5pbCkgewotLy8lICAgICAgbmV3RGljdC0+X3ZhbHVlc1tpXSA9IFtfdmFsdWVzW2ldIGNvcHlX
aXRoWm9uZTp6b25lXTsKLS8vJSAgICB9Ci0vLyUgIH0KLS8vJSAgcmV0dXJuIG5ld0RpY3Q7Ci0v
LyV9Ci0vLyUKLS8vJQotLy8lUERETS1ERUZJTkUgU0VSSUFMX0RBVEFfRk9SX0VOVFJZX09CSkVD
VChLRVlfTkFNRSwgVkFMVUVfTkFNRSkKLS8vIEVtcHR5Ci0vLyVQRERNLURFRklORSBHUEJWQUxV
RV9PQkpFQ1QoVkFMVUVfTkFNRSkKLS8vJXZhbHVlU3RyaW5nCi0vLyVQRERNLURFRklORSBESUNU
SU9OQVJZX1ZBTElEQVRFX1ZBTFVFX09CSkVDVChWQUxVRV9OQU1FLCBFWFRSQV9JTkRFTlQpCi0v
LyUjI0VYVFJBX0lOREVOVCRTIyMgIGlmICghIyNWQUxVRV9OQU1FKSB7Ci0vLyUjI0VYVFJBX0lO
REVOVCRTIyMgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9u
Ci0vLyUjI0VYVFJBX0lOREVOVCRTIyMgICAgICAgICAgICAgICAgZm9ybWF0OkAiQXR0ZW1wdGlu
ZyB0byBhZGQgbmlsIG9iamVjdCB0byBhIERpY3Rpb25hcnkiXTsKLS8vJSMjRVhUUkFfSU5ERU5U
JFMjIyAgfQotLy8lCi0vLyVQRERNLURFRklORSBESUNUSU9OQVJZX1ZBTElEQVRFX0tFWV9PQkpF
Q1QoS0VZX05BTUUsIEVYVFJBX0lOREVOVCkKLS8vJSMjRVhUUkFfSU5ERU5UJFMjIyAgaWYgKCEj
I0tFWV9OQU1FKSB7Ci0vLyUjI0VYVFJBX0lOREVOVCRTIyMgICAgW05TRXhjZXB0aW9uIHJhaXNl
Ok5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0vLyUjI0VYVFJBX0lOREVOVCRTIyMgICAgICAg
ICAgICAgICAgZm9ybWF0OkAiQXR0ZW1wdGluZyB0byBhZGQgbmlsIGtleSB0byBhIERpY3Rpb25h
cnkiXTsKLS8vJSMjRVhUUkFfSU5ERU5UJFMjIyAgfQotLy8lCi0KLS8vJVBERE0tREVGSU5FIEJP
T0xfRElDVF9IQVNfU1RPUkFHRV9PQkpFQ1QoKQotLy8gRW1wdHkKLS8vJVBERE0tREVGSU5FIEJP
T0xfRElDVF9JTklUU19PQkpFQ1QoVkFMVUVfTkFNRSwgVkFMVUVfVFlQRSkKLS8vJS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aE9iamVjdHM6KGNvbnN0IFZBTFVFX1RZUEUgW10pb2JqZWN0cwotLy8l
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlrZXlzCi0vLyUg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLS8vJSAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLS8vJSAgaWYgKHNlbGYpIHsKLS8vJSAgICBmb3IgKE5TVUlu
dGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0vLyUgICAgICBpZiAoIW9iamVjdHNbaV0p
IHsKLS8vJSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0
aW9uCi0vLyUgICAgICAgICAgICAgICAgICAgIGZvcm1hdDpAIkF0dGVtcHRpbmcgdG8gYWRkIG5p
bCBvYmplY3QgdG8gYSBEaWN0aW9uYXJ5Il07Ci0vLyUgICAgICB9Ci0vLyUgICAgICBpbnQgaWR4
ID0ga2V5c1tpXSA/IDEgOiAwOwotLy8lICAgICAgW192YWx1ZXNbaWR4XSByZWxlYXNlXTsKLS8v
JSAgICAgIF92YWx1ZXNbaWR4XSA9IChWQUxVRV9UWVBFKVtvYmplY3RzW2ldIHJldGFpbl07Ci0v
LyUgICAgfQotLy8lICB9Ci0vLyUgIHJldHVybiBzZWxmOwotLy8lfQotLy8lCi0vLyUtIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJCb29sIyNWQUxVRV9OQU1FIyNEaWN0aW9u
YXJ5ICopZGljdGlvbmFyeSB7Ci0vLyUgIHNlbGYgPSBbc2VsZiBpbml0V2l0aE9iamVjdHM6TlVM
TCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci0vLyUgIGlmIChzZWxmKSB7Ci0vLyUgICAgaWYgKGRp
Y3Rpb25hcnkpIHsKLS8vJSAgICAgIF92YWx1ZXNbMF0gPSBbZGljdGlvbmFyeS0+X3ZhbHVlc1sw
XSByZXRhaW5dOwotLy8lICAgICAgX3ZhbHVlc1sxXSA9IFtkaWN0aW9uYXJ5LT5fdmFsdWVzWzFd
IHJldGFpbl07Ci0vLyUgICAgfQotLy8lICB9Ci0vLyUgIHJldHVybiBzZWxmOwotLy8lfQotLy8l
UERETS1ERUZJTkUgQk9PTF9ESUNUX0RFQUxMT0NPQkpFQ1QoKQotLy8lLSAodm9pZClkZWFsbG9j
IHsKLS8vJSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLS8vJSAgICAgICAgICAgQCIlQDogQXV0
b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRvcjogJUAi
LAotLy8lICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0vLyUgIFtfdmFs
dWVzWzBdIHJlbGVhc2VdOwotLy8lICBbX3ZhbHVlc1sxXSByZWxlYXNlXTsKLS8vJSAgW3N1cGVy
IGRlYWxsb2NdOwotLy8lfQotLy8lUERETS1ERUZJTkUgQk9PTF9ESUNUX1dfSEFTT0JKRUNUKElE
WCwgUkVGKQotLy8lKEJPT0xfRElDVF9IQVNPQkpFQ1QoSURYLCBSRUYpKQotLy8lUERETS1ERUZJ
TkUgQk9PTF9ESUNUX0hBU09CSkVDVChJRFgsIFJFRikKLS8vJVJFRiMjX3ZhbHVlc1tJRFhdICE9
IG5pbAotLy8lUERETS1ERUZJTkUgQk9PTF9WQUxVRV9GT1JfS0VZX09CSkVDVChWQUxVRV9UWVBF
KQotLy8lLSAoVkFMVUVfVFlQRSlvYmplY3RGb3JLZXk6KEJPT0wpa2V5IHsKLS8vJSAgcmV0dXJu
IF92YWx1ZXNba2V5ID8gMSA6IDBdOwotLy8lfQotLy8lUERETS1ERUZJTkUgQk9PTF9TRVRfR1BC
VkFMVUVfRk9SX0tFWV9PQkpFQ1QoVkFMVUVfTkFNRSwgVkFMVUVfVFlQRSwgVmlzUCkKLS8vJS0g
KHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotLy8lICAg
ICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0vLyUgIGlu
dCBpZHggPSAoa2V5LT52YWx1ZUJvb2wgPyAxIDogMCk7Ci0vLyUgIFtfdmFsdWVzW2lkeF0gcmVs
ZWFzZV07Ci0vLyUgIF92YWx1ZXNbaWR4XSA9IFt2YWx1ZS0+dmFsdWVTdHJpbmcgcmV0YWluXTsK
LS8vJX0KLQotLy8lUERETS1ERUZJTkUgQk9PTF9ESUNUX01VVEFUSU9OU19PQkpFQ1QoVkFMVUVf
TkFNRSwgVkFMVUVfVFlQRSkKLS8vJS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihH
UEJCb29sIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLS8vJSAg
aWYgKG90aGVyRGljdGlvbmFyeSkgewotLy8lICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytp
KSB7Ci0vLyUgICAgICBpZiAob3RoZXJEaWN0aW9uYXJ5LT5fdmFsdWVzW2ldICE9IG5pbCkgewot
Ly8lICAgICAgICBbX3ZhbHVlc1tpXSByZWxlYXNlXTsKLS8vJSAgICAgICAgX3ZhbHVlc1tpXSA9
IFtvdGhlckRpY3Rpb25hcnktPl92YWx1ZXNbaV0gcmV0YWluXTsKLS8vJSAgICAgIH0KLS8vJSAg
ICB9Ci0vLyUgICAgaWYgKF9hdXRvY3JlYXRvcikgewotLy8lICAgICAgR1BCQXV0b2NyZWF0ZWRE
aWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLS8vJSAgICB9Ci0vLyUgIH0K
LS8vJX0KLS8vJQotLy8lLSAodm9pZClzZXRPYmplY3Q6KFZBTFVFX1RZUEUpb2JqZWN0IGZvcktl
eTooQk9PTClrZXkgewotLy8lICBpZiAoIW9iamVjdCkgewotLy8lICAgIFtOU0V4Y2VwdGlvbiBy
YWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgotLy8lICAgICAgICAgICAgICAgIGZvcm1h
dDpAIkF0dGVtcHRpbmcgdG8gYWRkIG5pbCBvYmplY3QgdG8gYSBEaWN0aW9uYXJ5Il07Ci0vLyUg
IH0KLS8vJSAgaW50IGlkeCA9IChrZXkgPyAxIDogMCk7Ci0vLyUgIFtfdmFsdWVzW2lkeF0gcmVs
ZWFzZV07Ci0vLyUgIF92YWx1ZXNbaWR4XSA9IFtvYmplY3QgcmV0YWluXTsKLS8vJSAgaWYgKF9h
dXRvY3JlYXRvcikgewotLy8lICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9h
dXRvY3JlYXRvciwgc2VsZik7Ci0vLyUgIH0KLS8vJX0KLS8vJQotLy8lLSAodm9pZClyZW1vdmVP
YmplY3RGb3JLZXk6KEJPT0wpYUtleSB7Ci0vLyUgIGludCBpZHggPSAoYUtleSA/IDEgOiAwKTsK
LS8vJSAgW192YWx1ZXNbaWR4XSByZWxlYXNlXTsKLS8vJSAgX3ZhbHVlc1tpZHhdID0gbmlsOwot
Ly8lfQotLy8lCi0vLyUtICh2b2lkKXJlbW92ZUFsbCB7Ci0vLyUgIGZvciAoaW50IGkgPSAwOyBp
IDwgMjsgKytpKSB7Ci0vLyUgICAgW192YWx1ZXNbaV0gcmVsZWFzZV07Ci0vLyUgICAgX3ZhbHVl
c1tpXSA9IG5pbDsKLS8vJSAgfQotLy8lfQotLy8lUERETS1ERUZJTkUgU1RSX0ZPUk1BVF9PQkpF
Q1QoVkFMVUVfTkFNRSkKLS8vJSVACi0KLQotLy8lUERETS1FWFBBTkQgRElDVElPTkFSWV9JTVBM
X0ZPUl9QT0RfS0VZKFVJbnQzMiwgdWludDMyX3QpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMg
Z2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotI3ByYWdtYSBtYXJrIC0gVUlu
dDMyIC0+IFVJbnQzMgotCi1AaW1wbGVtZW50YXRpb24gR1BCVUludDMyVUludDMyRGljdGlvbmFy
eSB7Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0K
LSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGlu
aXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0K
LQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVpbnQzMl90KXZhbHVlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleToodWludDMyX3Qpa2V5IHsKLSAgLy8g
Q2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGlu
dm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUg
dHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDMyVUludDMyRGljdGlvbmFyeSopW3Nl
bGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vu
dDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZh
bHVlczooY29uc3QgdWludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIC8vIENhc3QgaXMgbmVlZGVk
IHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0
aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4K
LSAgcmV0dXJuIFtbKEdQQlVJbnQzMlVJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0
V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6Y291bnRdIGF1dG9y
ZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeToo
R1BCVUludDMyVUludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5l
ZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5p
dFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0
dXJuIFtbKEdQQlVJbnQzMlVJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERp
Y3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBb
W1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVz
Ok5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhWYWx1ZXM6KGNvbnN0IHVpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXlzOihjb25zdCB1aW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBp
ZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZvciAo
TlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgW19kaWN0aW9uYXJ5
IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSldOwotICAgICAgfQotICAg
IH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlj
dGlvbmFyeTooR1BCVUludDMyVUludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICBzZWxm
ID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci0gIGlm
IChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtfZGljdGlvbmFyeSBhZGRF
bnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIH0KLSAg
fQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6
KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21hIHVudXNlZChudW1JdGVtcykKLSAgcmV0
dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAg
ICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9j
cmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAg
W19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tHUEJVSW50
MzJVSW50MzJEaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5
OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQlVJbnQzMlVJbnQzMkRpY3Rpb25hcnkg
KilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQot
ICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJVSW50MzJVSW50MzJEaWN0aW9uYXJ5IGNs
YXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBpc0Vx
dWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIHJl
dHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7
Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAlQCB9Iiwg
W3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpY291
bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRl
S2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKHVpbnQzMl90IGtleSwgdWlu
dDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0
ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wg
KnN0b3ApIHsKLSAgICAgIGJsb2NrKFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCBbYVZhbHVlIHVu
c2lnbmVkSW50VmFsdWVdLCBzdG9wKTsKLSAgfV07Ci19Ci0KLS0gKHNpemVfdCljb21wdXRlU2Vy
aWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIE5TVUlu
dGVnZXIgY291bnQgPSBfZGljdGlvbmFyeS5jb3VudDsKLSAgaWYgKGNvdW50ID09IDApIHsKLSAg
ICByZXR1cm4gMDsKLSAgfQotCi0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRG
aWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5t
YXBLZXlEYXRhVHlwZTsKLSAgX19ibG9jayBzaXplX3QgcmVzdWx0ID0gMDsKLSAgW19kaWN0aW9u
YXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1i
ZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIHNpemVf
dCBtc2dTaXplID0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoW2FLZXkgdW5zaWduZWRJbnRW
YWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0g
Q29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoW2FWYWx1ZSB1bnNpZ25lZEludFZhbHVlXSwga01h
cFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3VsdCArPSBHUEJDb21w
dXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0gIH1dOwot
ICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVsZE51
bWJlcihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXplICog
Y291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0
U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQotICAgICAgICAgICAg
ICAgICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BC
RGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBH
UEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICB1aW50MzJf
dCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQldp
cmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0Fu
ZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkg
ewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICBb
b3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdyaXRlIHRoZSBzaXpl
IG9mIHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RVSW50MzJG
aWVsZFNpemUoW2FLZXkgdW5zaWduZWRJbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5
RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoW2FW
YWx1ZSB1bnNpZ25lZEludFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5
cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVd
OwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0VUludDMyRmllbGQob3V0
cHV0U3RyZWFtLCBbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBr
ZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0VUludDMyRmllbGQob3V0cHV0U3RyZWFtLCBbYVZh
bHVlIHVuc2lnbmVkSW50VmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlw
ZSk7Ci0gIH1dOwotfQotCi0tICh2b2lkKXNldEdQQkdlbmVyaWNWYWx1ZTooR1BCR2VuZXJpY1Zh
bHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2VuZXJpY1ZhbHVlS2V5OihHUEJHZW5lcmljVmFsdWUg
KilrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUtPnZhbHVlVUludDMyKSBm
b3JLZXk6QChrZXktPnZhbHVlVUludDMyKV07Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4
dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBbc2Vs
ZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazpeKHVpbnQzMl90IGtleSwgdWludDMy
X3QgdmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAg
ICBibG9jayhbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiV1Iiwga2V5XSwgW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIldSIsIHZhbHVlXSk7Ci0gIH1dOwotfQotCi0tIChCT09MKXZh
bHVlRm9yS2V5Oih1aW50MzJfdClrZXkgdmFsdWU6KHVpbnQzMl90ICopdmFsdWUgewotICBOU051
bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAgaWYg
KHdyYXBwZWQgJiYgdmFsdWUpIHsKLSAgICAqdmFsdWUgPSBbd3JhcHBlZCB1bnNpZ25lZEludFZh
bHVlXTsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci19Ci0KLS0gKHZvaWQpYWRk
RW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50MzJVSW50MzJEaWN0aW9uYXJ5ICopb3RoZXJE
aWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAgIFtfZGljdGlvbmFyeSBh
ZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0g
ICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9k
aWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClzZXRW
YWx1ZToodWludDMyX3QpdmFsdWUgZm9yS2V5Oih1aW50MzJfdClrZXkgewotICBbX2RpY3Rpb25h
cnkgc2V0T2JqZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVhdG9y
KSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBz
ZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5Oih1aW50MzJfdClhS2V5
IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTpAKGFLZXkpXTsKLX0KLQotLSAo
dm9pZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxsT2JqZWN0c107Ci19Ci0K
LUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gVUludDMyIC0+IEludDMyCi0KLUBpbXBsZW1lbnRhdGlv
biBHUEJVSW50MzJJbnQzMkRpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIE5TTXV0YWJsZURpY3Rp
b25hcnkgKl9kaWN0aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0g
IHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBj
b3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aFZhbHVlOihpbnQzMl90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eToodWludDMyX3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtu
b3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291
bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUlu
dDMySW50MzJEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6JnZhbHVlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDMyX3QgW10pa2V5cwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsK
LSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2Ug
YXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdl
dCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDMySW50MzJEaWN0aW9uYXJ5
Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFy
eVdpdGhEaWN0aW9uYXJ5OihHUEJVSW50MzJJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsK
LSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2Ug
YXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBl
IGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50MzJJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFs
bG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0r
IChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVt
cyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBh
dXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxm
IGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFsdWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURp
Y3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIGlmIChjb3VudCAmJiB2YWx1ZXMgJiYga2V5cykg
ewotICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAg
ICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWVzW2ldKSBmb3JLZXk6QChrZXlzW2ldKV07
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJVSW50MzJJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNv
dW50OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2Rp
Y3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5
XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVt
SXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBj
b3VudDowXTsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRv
ciwKLSAgICAgICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSBy
ZWxlYXNlLCBhdXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRv
Y3JlYXRvcik7Ci0gIFtfZGljdGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0
dXJuIFtbR1BCVUludDMySW50MzJEaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdp
dGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQlVJbnQzMkludDMy
RGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAgICByZXR1cm4g
WUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQlVJbnQzMkludDMyRGlj
dGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rp
b25hcnkgaXNFcXVhbDpvdGhlci0+X2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhh
c2ggewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVz
Y3JpcHRpb24gewotICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+
IHsgJUAgfSIsIFtzZWxmIGNsYXNzXSwgc2VsZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJ
bnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lk
KWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50MzJf
dCBrZXksIGludDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgW19kaWN0aW9uYXJ5
IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIg
KmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJPT0wgKnN0b3ApIHsKLSAgICAgIGJsb2NrKFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCBb
YVZhbHVlIGludFZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0tIChzaXplX3QpY29tcHV0ZVNl
cmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBOU1VJ
bnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0g
ICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0
RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQu
bWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlv
bmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVt
YmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICBzaXpl
X3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0VUludDMyRmllbGRTaXplKFthS2V5IHVuc2lnbmVkSW50
VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9
IENvbXB1dGVEaWN0SW50MzJGaWVsZFNpemUoW2FWYWx1ZSBpbnRWYWx1ZV0sIGtNYXBWYWx1ZUZp
ZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICByZXN1bHQgKz0gR1BCQ29tcHV0ZVJhd1Zh
cmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkgKyBtc2dTaXplOwotICB9XTsKLSAgc2l6ZV90
IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmll
bGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50Owot
ICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbToo
R1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBl
IHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5
cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgdWludDMyX3QgdGFnID0g
R1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0
TGVuZ3RoRGVsaW1pdGVkKTsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3Rz
VXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAj
cHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8vIFdyaXRlIHRoZSB0YWcuCi0gICAgW291dHB1dFN0
cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAvLyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUg
bWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0VUludDMyRmllbGRTaXpl
KFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBl
KTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0SW50MzJGaWVsZFNpemUoW2FWYWx1ZSBpbnRW
YWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICBbb3V0cHV0
U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAvLyBXcml0ZSB0
aGUgZmllbGRzLgotICAgIFdyaXRlRGljdFVJbnQzMkZpZWxkKG91dHB1dFN0cmVhbSwgW2FLZXkg
dW5zaWduZWRJbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAg
IFdyaXRlRGljdEludDMyRmllbGQob3V0cHV0U3RyZWFtLCBbYVZhbHVlIGludFZhbHVlXSwga01h
cFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsKLX0KLQotLSAodm9pZClz
ZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdl
bmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNl
dE9iamVjdDpAKHZhbHVlLT52YWx1ZUludDMyKSBmb3JLZXk6QChrZXktPnZhbHVlVUludDMyKV07
Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2Jq
LCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNp
bmdCbG9jazpeKHVpbnQzMl90IGtleSwgaW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkgewotICAg
ICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiJXUiLCBrZXldLCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgdmFs
dWVdKTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KHVpbnQzMl90KWtleSB2YWx1
ZTooaW50MzJfdCAqKXZhbHVlIHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5OkAoa2V5KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgKnZh
bHVlID0gW3dyYXBwZWQgaW50VmFsdWVdOwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxM
KTsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQlVJbnQzMkludDMy
RGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsK
LSAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGljdGlvbmFy
eS0+X2RpY3Rpb25hcnldOwotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9j
cmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9
Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGludDMyX3QpdmFsdWUgZm9yS2V5Oih1aW50MzJfdClr
ZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwot
ICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZp
ZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9y
S2V5Oih1aW50MzJfdClhS2V5IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTpA
KGFLZXkpXTsKLX0KLQotLSAodm9pZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3Zl
QWxsT2JqZWN0c107Ci19Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gVUludDMyIC0+IFVJbnQ2
NAotCi1AaW1wbGVtZW50YXRpb24gR1BCVUludDMyVUludDY0RGljdGlvbmFyeSB7Ci0gQHBhY2th
Z2UKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVz
Ok5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFu
Y2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVpbnQ2NF90KXZhbHVlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleToodWludDMyX3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVk
ZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRX
aXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0
LgotICByZXR1cm4gW1soR1BCVUludDMyVUludDY0RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGlu
aXRXaXRoVmFsdWVzOiZ2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVs
ZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3Qg
dWludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6
KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21w
aWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JL
ZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtb
KEdQQlVJbnQzMlVJbnQ2NERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0K
LQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCVUludDMyVUlu
dDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUg
Y29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9u
YXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJ
bnQzMlVJbnQ2NERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGlj
dGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5
czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNv
bnN0IHVpbnQ2NF90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihj
b25zdCB1aW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5T
VUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewot
ICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAg
ICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpA
KHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSldOwotICAgICAgfQotICAgIH0KLSAgfQotICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BC
VUludDMyVUludDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICBzZWxmID0gW3NlbGYgaW5p
dFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci0gIGlmIChzZWxmKSB7Ci0g
ICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURp
Y3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIH0KLSAgfQotICByZXR1cm4g
c2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIp
bnVtSXRlbXMgewotICAjcHJhZ21hIHVudXNlZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGlu
aXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tICh2b2lkKWRl
YWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRv
Y3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIs
Ci0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAgW19kaWN0aW9uYXJ5
IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5
V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tHUEJVSW50MzJVSW50NjREaWN0
aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQot
Ci0tIChCT09MKWlzRXF1YWw6KEdQQlVJbnQzMlVJbnQ2NERpY3Rpb25hcnkgKilvdGhlciB7Ci0g
IGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhl
ciBpc0tpbmRPZkNsYXNzOltHUEJVSW50MzJVSW50NjREaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAg
ICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBpc0VxdWFsOm90aGVyLT5f
ZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIHJldHVybiBfZGljdGlv
bmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIHJldHVybiBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAlQCB9IiwgW3NlbGYgY2xhc3Nd
LCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICByZXR1
cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVl
c1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKHVpbnQzMl90IGtleSwgdWludDY0X3QgdmFsdWUs
IEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmpl
Y3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAg
ICAgIGJsb2NrKFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCBbYVZhbHVlIHVuc2lnbmVkTG9uZ0xv
bmdWYWx1ZV0sIHN0b3ApOwotICB9XTsKLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxpemVk
U2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgTlNVSW50ZWdlciBj
b3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQgPT0gMCkgewotICAgIHJldHVy
biAwOwotICB9Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0
YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURh
dGFUeXBlOwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwotICBbX2RpY3Rpb25hcnkgZW51
bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Qk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgc2l6ZV90IG1zZ1Np
emUgPSBDb21wdXRlRGljdFVJbnQzMkZpZWxkU2l6ZShbYUtleSB1bnNpZ25lZEludFZhbHVlXSwg
a01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRl
RGljdFVJbnQ2NEZpZWxkU2l6ZShbYVZhbHVlIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIGtNYXBW
YWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICByZXN1bHQgKz0gR1BCQ29tcHV0
ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkgKyBtc2dTaXplOwotICB9XTsKLSAg
c2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGROdW1i
ZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNv
dW50OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0
cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRh
dGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BC
RGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgdWludDMyX3Qg
dGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJl
Rm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRP
YmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsK
LSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8vIFdyaXRlIHRoZSB0YWcuCi0gICAgW291
dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAvLyBXcml0ZSB0aGUgc2l6ZSBv
ZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0VUludDMyRmll
bGRTaXplKFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURh
dGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKFthVmFs
dWUgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0
YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1Np
emVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0VUludDMyRmllbGQo
b3V0cHV0U3RyZWFtLCBbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVy
LCBrZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0VUludDY0RmllbGQob3V0cHV0U3RyZWFtLCBb
YVZhbHVlIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1
ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJH
ZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVy
aWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZS0+dmFsdWVV
SW50NjQpIGZvcktleTpAKGtleS0+dmFsdWVVSW50MzIpXTsKLX0KLQotLSAodm9pZCllbnVtZXJh
dGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7
Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOl4odWludDMyX3Qga2V5
LCB1aW50NjRfdCB2YWx1ZSwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3Rv
cCkKLSAgICAgIGJsb2NrKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXUiLCBrZXldLCBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVsbHUiLCB2YWx1ZV0pOwotICB9XTsKLX0KLQot
LSAoQk9PTCl2YWx1ZUZvcktleToodWludDMyX3Qpa2V5IHZhbHVlOih1aW50NjRfdCAqKXZhbHVl
IHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAoa2V5
KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgKnZhbHVlID0gW3dyYXBwZWQgdW5z
aWduZWRMb25nTG9uZ1ZhbHVlXTsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci19
Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50MzJVSW50NjREaWN0
aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAg
IFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5f
ZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2NyZWF0
ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0K
LQotLSAodm9pZClzZXRWYWx1ZToodWludDY0X3QpdmFsdWUgZm9yS2V5Oih1aW50MzJfdClrZXkg
ewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBp
ZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQo
X2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5
Oih1aW50MzJfdClhS2V5IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTpAKGFL
ZXkpXTsKLX0KLQotLSAodm9pZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxs
T2JqZWN0c107Ci19Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gVUludDMyIC0+IEludDY0Ci0K
LUBpbXBsZW1lbnRhdGlvbiBHUEJVSW50MzJJbnQ2NERpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0g
IE5TTXV0YWJsZURpY3Rpb25hcnkgKl9kaWN0aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeSB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxM
IGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihpbnQ2NF90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleToodWludDMyX3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28g
dGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFs
dWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICBy
ZXR1cm4gW1soR1BCVUludDMySW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhW
YWx1ZXM6JnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19
Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgaW50NjRfdCBb
XSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWlu
dDMyX3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJ
bnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6
Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDMy
SW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
S2V5czprZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJVSW50MzJJbnQ2NERpY3Rpb25hcnkg
KilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24g
dG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50MzJJbnQ2NERpY3Rp
b25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3Jl
bGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsK
LSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBd
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGludDY0X3QgW10p
dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtd
KWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7
Ci0gIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkg
PSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIGlmIChjb3VudCAmJiB2
YWx1ZXMgJiYga2V5cykgewotICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgewotICAgICAgICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWVzW2ldKSBmb3JL
ZXk6QChrZXlzW2ldKV07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJVSW50MzJJbnQ2NERpY3Rp
b25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwg
Zm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5
KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25h
cnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3By
YWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxM
IGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3Nl
cnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBj
bGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2Vs
ZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIFtfZGljdGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1
cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUg
Kil6b25lIHsKLSAgcmV0dXJuIFtbR1BCVUludDMySW50NjREaWN0aW9uYXJ5IGFsbG9jV2l0aFpv
bmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6
KEdQQlVJbnQzMkludDY0RGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIp
IHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQ
QlVJbnQzMkludDY0RGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0g
IHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpvdGhlci0+X2RpY3Rpb25hcnldOwotfQotCi0t
IChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0g
KE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxmIGNsYXNzXSwgc2VsZiwgX2RpY3Rpb25hcnld
OwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50
OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2
b2lkICheKSh1aW50MzJfdCBrZXksIGludDY0X3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrIHsK
LSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVt
YmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAgIGJsb2NrKFthS2V5IHVuc2ln
bmVkSW50VmFsdWVdLCBbYVZhbHVlIGxvbmdMb25nVmFsdWVdLCBzdG9wKTsKLSAgfV07Ci19Ci0K
LS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0
b3IgKilmaWVsZCB7Ci0gIE5TVUludGVnZXIgY291bnQgPSBfZGljdGlvbmFyeS5jb3VudDsKLSAg
aWYgKGNvdW50ID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIEdQQkRhdGFUeXBlIHZh
bHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUg
a2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgX19ibG9jayBzaXplX3QgcmVz
dWx0ID0gMDsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9j
azpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVu
dXNlZChzdG9wKQotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNp
emUoW2FLZXkgdW5zaWduZWRJbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5
cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RJbnQ2NEZpZWxkU2l6ZShbYVZhbHVlIGxv
bmdMb25nVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAg
cmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsg
bXNnU2l6ZTsKLSAgfV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRU
YWdTaXplKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVz
dWx0ICs9IHRhZ1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3
cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3Ry
ZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9y
ICopZmllbGQgewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRh
VHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0
YVR5cGU7Ci0gIHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVt
YmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFy
eSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVy
ICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0
ZSB0aGUgdGFnLgotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAg
Ly8gV3JpdGUgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBD
b21wdXRlRGljdFVJbnQzMkZpZWxkU2l6ZShbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01hcEtl
eUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdElu
dDY0RmllbGRTaXplKFthVmFsdWUgbG9uZ0xvbmdWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVy
LCB2YWx1ZURhdGFUeXBlKTsKLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50
MzJfdCltc2dTaXplXTsKLSAgICAvLyBXcml0ZSB0aGUgZmllbGRzLgotICAgIFdyaXRlRGljdFVJ
bnQzMkZpZWxkKG91dHB1dFN0cmVhbSwgW2FLZXkgdW5zaWduZWRJbnRWYWx1ZV0sIGtNYXBLZXlG
aWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIFdyaXRlRGljdEludDY0RmllbGQob3V0cHV0
U3RyZWFtLCBbYVZhbHVlIGxvbmdMb25nVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFs
dWVEYXRhVHlwZSk7Ci0gIH1dOwotfQotCi0tICh2b2lkKXNldEdQQkdlbmVyaWNWYWx1ZTooR1BC
R2VuZXJpY1ZhbHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2VuZXJpY1ZhbHVlS2V5OihHUEJHZW5l
cmljVmFsdWUgKilrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUtPnZhbHVl
SW50NjQpIGZvcktleTpAKGtleS0+dmFsdWVVSW50MzIpXTsKLX0KLQotLSAodm9pZCllbnVtZXJh
dGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7
Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOl4odWludDMyX3Qga2V5
LCBpbnQ2NF90IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJhZ21hIHVudXNlZChzdG9w
KQotICAgICAgYmxvY2soW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIldSIsIGtleV0sIFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWxsZCIsIHZhbHVlXSk7Ci0gIH1dOwotfQotCi0t
IChCT09MKXZhbHVlRm9yS2V5Oih1aW50MzJfdClrZXkgdmFsdWU6KGludDY0X3QgKil2YWx1ZSB7
Ci0gIE5TTnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAKGtleSld
OwotICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIGxvbmdM
b25nVmFsdWVdOwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQotLSAodm9p
ZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQlVJbnQzMkludDY0RGljdGlvbmFyeSAqKW90
aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsKLSAgICBbX2RpY3Rpb25h
cnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGljdGlvbmFyeS0+X2RpY3Rpb25hcnld
OwotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFy
eU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZvaWQp
c2V0VmFsdWU6KGludDY0X3QpdmFsdWUgZm9yS2V5Oih1aW50MzJfdClrZXkgewotICBbX2RpY3Rp
b25hcnkgc2V0T2JqZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVh
dG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9y
LCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5Oih1aW50MzJfdClh
S2V5IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTpAKGFLZXkpXTsKLX0KLQot
LSAodm9pZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxsT2JqZWN0c107Ci19
Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gVUludDMyIC0+IEJvb2wKLQotQGltcGxlbWVudGF0
aW9uIEdQQlVJbnQzMkJvb2xEaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBOU011dGFibGVEaWN0
aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewot
ICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwg
Y291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhWYWx1ZTooQk9PTCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6
KHVpbnQzMl90KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93
cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50
OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQz
MkJvb2xEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6JnZhbHVlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JL
ZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IEJPT0wgW10pdmFsdWVzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIC8vIENh
c3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZv
a2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5
cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQzMkJvb2xEaWN0aW9uYXJ5Kilbc2VsZiBh
bGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOmtleXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6Y291bnRd
IGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlv
bmFyeTooR1BCVUludDMyQm9vbERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBp
cyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5n
IGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0g
IHJldHVybiBbWyhHUEJVSW50MzJCb29sRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRo
RGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgcmV0dXJu
IFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVtSXRlbXNdIGF1dG9yZWxlYXNlXTsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1
ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFZhbHVlczooY29uc3QgQk9PTCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAg
Zm9yS2V5czooY29uc3QgdWludDMyX3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAg
IGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYg
KHNlbGYpIHsKLSAgICBfZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdF07Ci0gICAgaWYgKGNvdW50ICYmIHZhbHVlcyAmJiBrZXlzKSB7Ci0gICAgICBmb3IgKE5T
VUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFtfZGljdGlvbmFyeSBz
ZXRPYmplY3Q6QCh2YWx1ZXNbaV0pIGZvcktleTpAKGtleXNbaV0pXTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rp
b25hcnk6KEdQQlVJbnQzMkJvb2xEaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBb
c2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNl
bGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJp
ZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9Ci0g
IHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtcyB7Ci0gICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4g
W3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAi
JUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0
b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2Rp
Y3Rpb25hcnkgcmVsZWFzZV07Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQlVJbnQzMkJv
b2xEaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZd
OwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQlVJbnQzMkJvb2xEaWN0aW9uYXJ5ICopb3RoZXIg
ewotICBpZiAoc2VsZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFb
b3RoZXIgaXNLaW5kT2ZDbGFzczpbR1BCVUludDMyQm9vbERpY3Rpb25hcnkgY2xhc3NdXSkgewot
ICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXIt
Pl9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0
aW9uYXJ5LmNvdW50OwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJu
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFz
c10sIHNlbGYsIF9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJl
dHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFs
dWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikodWludDMyX3Qga2V5LCBCT09MIHZhbHVlLCBC
T09MICpzdG9wKSlibG9jayB7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0
c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAg
ICBibG9jayhbYUtleSB1bnNpZ25lZEludFZhbHVlXSwgW2FWYWx1ZSBib29sVmFsdWVdLCBzdG9w
KTsKLSAgfV07Ci19Ci0KLS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihH
UEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIE5TVUludGVnZXIgY291bnQgPSBfZGljdGlv
bmFyeS5jb3VudDsKLSAgaWYgKGNvdW50ID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0g
IEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsK
LSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgX19i
bG9jayBzaXplX3QgcmVzdWx0ID0gMDsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRP
YmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsK
LSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURp
Y3RVSW50MzJGaWVsZFNpemUoW2FLZXkgdW5zaWduZWRJbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51
bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RCb29sRmllbGRT
aXplKFthVmFsdWUgYm9vbFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5
cGUpOwotICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlciht
c2dTaXplKSArIG1zZ1NpemU7Ci0gIH1dOwotICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVX
aXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2Fn
ZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXplICogY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0K
LS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAq
KW91dHB1dFN0cmVhbQotICAgICAgICAgICAgICAgICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxk
RGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdl
dEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxk
Lm1hcEtleURhdGFUeXBlOwotICB1aW50MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhH
UEJGaWVsZE51bWJlcihmaWVsZCksIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBb
X2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIg
KmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0g
ICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0
YWddOwotICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBt
c2dTaXplID0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoW2FLZXkgdW5zaWduZWRJbnRWYWx1
ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29t
cHV0ZURpY3RCb29sRmllbGRTaXplKFthVmFsdWUgYm9vbFZhbHVlXSwga01hcFZhbHVlRmllbGRO
dW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFn
OihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVE
aWN0VUludDMyRmllbGQob3V0cHV0U3RyZWFtLCBbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01h
cEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0Qm9vbEZpZWxkKG91
dHB1dFN0cmVhbSwgW2FWYWx1ZSBib29sVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFs
dWVEYXRhVHlwZSk7Ci0gIH1dOwotfQotCi0tICh2b2lkKXNldEdQQkdlbmVyaWNWYWx1ZTooR1BC
R2VuZXJpY1ZhbHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2VuZXJpY1ZhbHVlS2V5OihHUEJHZW5l
cmljVmFsdWUgKilrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUtPnZhbHVl
Qm9vbCkgZm9yS2V5OkAoa2V5LT52YWx1ZVVJbnQzMildOwotfQotCi0tICh2b2lkKWVudW1lcmF0
ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsK
LSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Xih1aW50MzJfdCBrZXks
IEJPT0wgdmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0g
ICAgICBibG9jayhbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiV1Iiwga2V5XSwgKHZhbHVl
ID8gQCJ0cnVlIiA6IEAiZmFsc2UiKSk7Ci0gIH1dOwotfQotCi0tIChCT09MKXZhbHVlRm9yS2V5
Oih1aW50MzJfdClrZXkgdmFsdWU6KEJPT0wgKil2YWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFwcGVk
ID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAKGtleSldOwotICBpZiAod3JhcHBlZCAmJiB2
YWx1ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIGJvb2xWYWx1ZV07Ci0gIH0KLSAgcmV0dXJu
ICh3cmFwcGVkICE9IE5VTEwpOwotfQotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFy
eTooR1BCVUludDMyQm9vbERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotICBpZiAob3Ro
ZXJEaWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFy
eTpvdGhlckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7
Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNl
bGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldFZhbHVlOihCT09MKXZhbHVlIGZvcktl
eToodWludDMyX3Qpa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBmb3JL
ZXk6QChrZXkpXTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGlj
dGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZCly
ZW1vdmVWYWx1ZUZvcktleToodWludDMyX3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVP
YmplY3RGb3JLZXk6QChhS2V5KV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0
aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNdOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJ
bnQzMiAtPiBGbG9hdAotCi1AaW1wbGVtZW50YXRpb24gR1BCVUludDMyRmxvYXREaWN0aW9uYXJ5
IHsKLSBAcGFja2FnZQotICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5p
dFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQot
Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooZmxvYXQpdmFsdWUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5Oih1aW50MzJfdClrZXkgewotICAvLyBDYXN0
IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tp
bmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBl
IGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50MzJGbG9hdERpY3Rpb25hcnkqKVtzZWxmIGFs
bG9jXSBpbml0V2l0aFZhbHVlczomdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1
dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihj
b25zdCBmbG9hdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5
czooY29uc3QgdWludDMyX3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNv
bXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZv
cktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4g
W1soR1BCVUludDMyRmxvYXREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6
dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQot
Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJVSW50MzJGbG9h
dERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNv
bXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFy
eToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50
MzJGbG9hdERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlv
bmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhD
YXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpO
VUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0
IGZsb2F0IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1
aW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVn
ZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9k
aWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAo
Y291bnQgJiYgdmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVl
c1tpXSkgZm9yS2V5OkAoa2V5c1tpXSldOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4g
c2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDMy
RmxvYXREaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZh
bHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAo
ZGljdGlvbmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFy
eTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVt
cyB7Ci0gICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhW
YWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7
Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9y
IG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAg
ICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFz
ZV07Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9u
ZTooTlNab25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQlVJbnQzMkZsb2F0RGljdGlvbmFyeSBh
bGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9P
TClpc0VxdWFsOihHUEJVSW50MzJGbG9hdERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxm
ID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRP
ZkNsYXNzOltHUEJVSW50MzJGbG9hdERpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBO
TzsKLSAgfQotICByZXR1cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5
XTsKLX0KLQotLSAoTlNVSW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50
OwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9k
aWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlv
bmFyeS5jb3VudDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9j
azoKLSAgICAodm9pZCAoXikodWludDMyX3Qga2V5LCBmbG9hdCB2YWx1ZSwgQk9PTCAqc3RvcCkp
YmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2Nr
Ol4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soW2FL
ZXkgdW5zaWduZWRJbnRWYWx1ZV0sIFthVmFsdWUgZmxvYXRWYWx1ZV0sIHN0b3ApOwotICB9XTsK
LX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVz
Y3JpcHRvciAqKWZpZWxkIHsKLSAgTlNVSW50ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50
OwotICBpZiAoY291bnQgPT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgR1BCRGF0YVR5
cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRh
VHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICBfX2Jsb2NrIHNpemVf
dCByZXN1bHQgPSAwOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2lu
Z0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFn
bWEgdW51c2VkKHN0b3ApCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFVJbnQzMkZp
ZWxkU2l6ZShbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlE
YXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEZsb2F0RmllbGRTaXplKFthVmFs
dWUgZmxvYXRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAg
ICByZXN1bHQgKz0gR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkg
KyBtc2dTaXplOwotICB9XTsKLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1h
dFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICBy
ZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lk
KXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRT
dHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0
b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERh
dGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlE
YXRhVHlwZTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGRO
dW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgW19kaWN0aW9u
YXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1i
ZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8vIFdy
aXRlIHRoZSB0YWcuCi0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAg
ICAvLyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6ZSA9
IENvbXB1dGVEaWN0VUludDMyRmllbGRTaXplKFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCBrTWFw
S2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0
RmxvYXRGaWVsZFNpemUoW2FWYWx1ZSBmbG9hdFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIs
IHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQz
Ml90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0VUlu
dDMyRmllbGQob3V0cHV0U3RyZWFtLCBbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01hcEtleUZp
ZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0RmxvYXRGaWVsZChvdXRwdXRT
dHJlYW0sIFthVmFsdWUgZmxvYXRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURh
dGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJHZW5l
cmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVyaWNW
YWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZS0+dmFsdWVGbG9h
dCkgZm9yS2V5OkAoa2V5LT52YWx1ZVVJbnQzMildOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUZv
clRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsKLSAg
W3NlbGYgZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Xih1aW50MzJfdCBrZXksIGZs
b2F0IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAg
ICAgYmxvY2soW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIldSIsIGtleV0sIFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4qZyIsIEZMVF9ESUcsIHZhbHVlXSk7Ci0gIH1dOwotfQot
Ci0tIChCT09MKXZhbHVlRm9yS2V5Oih1aW50MzJfdClrZXkgdmFsdWU6KGZsb2F0ICopdmFsdWUg
ewotICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChrZXkp
XTsKLSAgaWYgKHdyYXBwZWQgJiYgdmFsdWUpIHsKLSAgICAqdmFsdWUgPSBbd3JhcHBlZCBmbG9h
dFZhbHVlXTsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci19Ci0KLS0gKHZvaWQp
YWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50MzJGbG9hdERpY3Rpb25hcnkgKilvdGhl
ckRpY3Rpb25hcnkgewotICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9uYXJ5
IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvdGhlckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsK
LSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlN
b2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNl
dFZhbHVlOihmbG9hdCl2YWx1ZSBmb3JLZXk6KHVpbnQzMl90KWtleSB7Ci0gIFtfZGljdGlvbmFy
eSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0gIGlmIChfYXV0b2NyZWF0b3Ip
IHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNl
bGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KHVpbnQzMl90KWFLZXkg
ewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAoYUtleSldOwotfQotCi0tICh2
b2lkKXJlbW92ZUFsbCB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVBbGxPYmplY3RzXTsKLX0KLQot
QGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50MzIgLT4gRG91YmxlCi0KLUBpbXBsZW1lbnRhdGlv
biBHUEJVSW50MzJEb3VibGVEaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBOU011dGFibGVEaWN0
aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewot
ICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwg
Y291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhWYWx1ZTooZG91YmxlKXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eToodWludDMyX3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtu
b3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291
bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUlu
dDMyRG91YmxlRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2YWx1ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgZG91YmxlIFtdKXZhbHVlcwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50MzJfdCBbXSlrZXlz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQg
ewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3
ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8g
Z2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50MzJEb3VibGVEaWN0aW9u
YXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0
aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQzMkRvdWJsZURpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xh
c3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRo
ZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50MzJEb3VibGVEaWN0aW9uYXJ5Kilb
c2VsZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsK
LX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIp
bnVtSXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1J
dGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVy
biBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBkb3VibGUgW10pdmFsdWVzCi0g
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90IFtdKWtleXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIGlmIChjb3VudCAmJiB2YWx1ZXMgJiYg
a2V5cykgewotICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewot
ICAgICAgICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWVzW2ldKSBmb3JLZXk6QChrZXlz
W2ldKV07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJVSW50MzJEb3VibGVEaWN0aW9uYXJ5ICop
ZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6
TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAg
ICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGlj
dGlvbmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gICNwcmFnbWEgdW51
c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlz
Ok5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0
b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBi
ZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3Nd
LCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07Ci0gIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7
Ci0gIHJldHVybiBbW0dQQlVJbnQzMkRvdWJsZURpY3Rpb25hcnkgYWxsb2NXaXRoWm9uZTp6b25l
XSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BCVUlu
dDMyRG91YmxlRGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAg
ICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQlVJbnQz
MkRvdWJsZURpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1
cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNV
SW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tIChOU1N0
cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0aW9uYXJ5XTsKLX0K
LQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0K
LQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAo
XikodWludDMyX3Qga2V5LCBkb3VibGUgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgW19k
aWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICph
S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAgIGJsb2NrKFthS2V5IHVuc2lnbmVkSW50
VmFsdWVdLCBbYVZhbHVlIGRvdWJsZVZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0tIChzaXpl
X3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmll
bGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlmIChjb3Vu
dCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFU
eXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFU
eXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3VsdCA9IDA7
Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051
bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3Rv
cCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0VUludDMyRmllbGRTaXplKFthS2V5
IHVuc2lnbmVkSW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAg
ICBtc2dTaXplICs9IENvbXB1dGVEaWN0RG91YmxlRmllbGRTaXplKFthVmFsdWUgZG91YmxlVmFs
dWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9
IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsK
LSAgfV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQ
QkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRh
Z1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29k
ZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQg
ewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVs
ZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0g
IHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxk
KSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJh
dGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09M
ICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFn
LgotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUg
dGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGlj
dFVJbnQzMkZpZWxkU2l6ZShbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01hcEtleUZpZWxkTnVt
YmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdERvdWJsZUZpZWxk
U2l6ZShbYVZhbHVlIGRvdWJsZVZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0
YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1Np
emVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0VUludDMyRmllbGQo
b3V0cHV0U3RyZWFtLCBbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVy
LCBrZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0RG91YmxlRmllbGQob3V0cHV0U3RyZWFtLCBb
YVZhbHVlIGRvdWJsZVZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUp
OwotICB9XTsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1
ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICop
a2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZURvdWJsZSkgZm9y
S2V5OkAoa2V5LT52YWx1ZVVJbnQzMildOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUZvclRleHRG
b3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsKLSAgW3NlbGYg
ZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Xih1aW50MzJfdCBrZXksIGRvdWJsZSB2
YWx1ZSwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgIGJs
b2NrKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXUiLCBrZXldLCBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiUuKmxnIiwgREJMX0RJRywgdmFsdWVdKTsKLSAgfV07Ci19Ci0KLS0g
KEJPT0wpdmFsdWVGb3JLZXk6KHVpbnQzMl90KWtleSB2YWx1ZTooZG91YmxlICopdmFsdWUgewot
ICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChrZXkpXTsK
LSAgaWYgKHdyYXBwZWQgJiYgdmFsdWUpIHsKLSAgICAqdmFsdWUgPSBbd3JhcHBlZCBkb3VibGVW
YWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5VTEwpOwotfQotCi0tICh2b2lkKWFk
ZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCVUludDMyRG91YmxlRGljdGlvbmFyeSAqKW90aGVy
RGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsKLSAgICBbX2RpY3Rpb25hcnkg
YWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwot
ICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1v
ZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZvaWQpc2V0
VmFsdWU6KGRvdWJsZSl2YWx1ZSBmb3JLZXk6KHVpbnQzMl90KWtleSB7Ci0gIFtfZGljdGlvbmFy
eSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0gIGlmIChfYXV0b2NyZWF0b3Ip
IHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNl
bGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KHVpbnQzMl90KWFLZXkg
ewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAoYUtleSldOwotfQotCi0tICh2
b2lkKXJlbW92ZUFsbCB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVBbGxPYmplY3RzXTsKLX0KLQot
QGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50MzIgLT4gRW51bQotCi1AaW1wbGVtZW50YXRpb24g
R1BCVUludDMyRW51bURpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIE5TTXV0YWJsZURpY3Rpb25h
cnkgKl9kaWN0aW9uYXJ5OwotICBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMgX3ZhbGlkYXRpb25GdW5j
OwotfQotCi1Ac3ludGhlc2l6ZSB2YWxpZGF0aW9uRnVuYyA9IF92YWxpZGF0aW9uRnVuYzsKLQot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5p
dFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByYXdWYWx1ZXM6TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleXM6TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9u
RnVuYylmdW5jIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsaWRhdGlvbkZ1
bmN0aW9uOmZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3
VmFsdWVzOk5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JLZXlzOk5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlX
aXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlOihpbnQzMl90KXJhd1Zh
bHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KHVp
bnQzMl90KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3
aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50Ogot
ICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQzMkVu
dW1EaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZnVu
YwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJhd1ZhbHVlczomcmF3VmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6Jmtl
eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjooR1BCRW51bVZhbGlkYXRpb25G
dW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVl
czooY29uc3QgaW50MzJfdCBbXSlyYXdWYWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDMyX3QgW10pa2V5cwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50
IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mg
d2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRv
IGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDMyRW51bURpY3Rpb25h
cnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpmdW5jCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmF3VmFsdWVzOnJhd1ZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlk
aWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQzMkVudW1EaWN0aW9uYXJ5ICopZGljdGlv
bmFyeSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBv
biB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQzMkVudW1EaWN0
aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9y
ZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1
bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgcmV0
dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmMgY2FwYWNp
dHk6bnVtSXRlbXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewot
ICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246TlVMTCByYXdWYWx1ZXM6
TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFZhbGlkYXRpb25GdW5jdGlvbjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMgewotICByZXR1
cm4gW3NlbGYgaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZnVuYyByYXdWYWx1ZXM6TlVMTCBm
b3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbGlk
YXRpb25GdW5jdGlvbjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczooY29uc3QgaW50MzJfdCBbXSlyYXdWYWx1ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDMy
X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihO
U1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYpIHsK
LSAgICBfZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0g
ICAgX3ZhbGlkYXRpb25GdW5jID0gKGZ1bmMgIT0gTlVMTCA/IGZ1bmMgOiBEaWN0RGVmYXVsdF9J
c1ZhbGlkVmFsdWUpOwotICAgIGlmIChjb3VudCAmJiByYXdWYWx1ZXMgJiYga2V5cykgewotICAg
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBbX2Rp
Y3Rpb25hcnkgc2V0T2JqZWN0OkAocmF3VmFsdWVzW2ldKSBmb3JLZXk6QChrZXlzW2ldKV07Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJVSW50MzJFbnVtRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkg
ewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZGljdGlvbmFyeS52
YWxpZGF0aW9uRnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6
TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6TlVMTAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MF07Ci0gIGlmIChzZWxmKSB7
Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJv
bURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIH0KLSAgfQotICByZXR1
cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9u
OihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQo
bnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpmdW5j
IHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAodm9pZClkZWFs
bG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAgQCIlQDogQXV0b2Ny
ZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRvcjogJUAiLAot
ICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIFtfZGljdGlvbmFyeSBy
ZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpY29weVdp
dGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCVUludDMyRW51bURpY3Rpb25h
cnkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0g
KEJPT0wpaXNFcXVhbDooR1BCVUludDMyRW51bURpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChz
ZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tp
bmRPZkNsYXNzOltHUEJVSW50MzJFbnVtRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0dXJu
IE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpvdGhlci0+X2RpY3Rpb25h
cnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291
bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICByZXR1cm4gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxmIGNsYXNzXSwgc2VsZiwg
X2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIF9kaWN0
aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRSYXdWYWx1ZXNVc2lu
Z0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50MzJfdCBrZXksIGludDMyX3QgdmFsdWUsIEJPT0wg
KnN0b3ApKWJsb2NrIHsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNp
bmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAgIGJs
b2NrKFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCBbYVZhbHVlIGludFZhbHVlXSwgc3RvcCk7Ci0g
IH1dOwotfQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmll
bGREZXNjcmlwdG9yICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnku
Y291bnQ7Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJE
YXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQ
QkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sg
c2l6ZV90IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0
c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAg
I3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0VUlu
dDMyRmllbGRTaXplKFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIs
IGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0RW51bUZpZWxkU2l6ZShb
YVZhbHVlIGludFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwot
ICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXpl
KSArIG1zZ1NpemU7Ci0gIH1dOwotICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9y
bWF0VGFnU2l6ZShHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0g
IHJlc3VsdCArPSB0YWdTaXplICogY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZv
aWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1
dFN0cmVhbQotICAgICAgICAgICAgICAgICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3Jp
cHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxk
RGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtl
eURhdGFUeXBlOwotICB1aW50MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVs
ZE51bWJlcihmaWVsZCksIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rp
b25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051
bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8g
V3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwot
ICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXpl
ID0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoW2FLZXkgdW5zaWduZWRJbnRWYWx1ZV0sIGtN
YXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURp
Y3RFbnVtRmllbGRTaXplKFthVmFsdWUgaW50VmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwg
dmFsdWVEYXRhVHlwZSk7Ci0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMy
X3QpbXNnU2l6ZV07Ci0gICAgLy8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RVSW50
MzJGaWVsZChvdXRwdXRTdHJlYW0sIFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCBrTWFwS2V5Rmll
bGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RFbnVtRmllbGQob3V0cHV0U3Ry
ZWFtLCBbYVZhbHVlIGludFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5
cGUpOwotICB9XTsKLX0KLQotLSAoTlNEYXRhICopc2VyaWFsaXplZERhdGFGb3JVbmtub3duVmFs
dWU6KGludDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
S2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtleURhdGFUeXBlOihHUEJEYXRhVHlwZSlrZXlEYXRhVHlwZSB7Ci0gIHNpemVfdCBtc2dTaXpl
ID0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoa2V5LT52YWx1ZVVJbnQzMiwga01hcEtleUZp
ZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RFbnVtRmll
bGRTaXplKHZhbHVlLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVFbnVtKTsKLSAg
TlNNdXRhYmxlRGF0YSAqZGF0YSA9IFtOU011dGFibGVEYXRhIGRhdGFXaXRoTGVuZ3RoOm1zZ1Np
emVdOwotICBHUEJDb2RlZE91dHB1dFN0cmVhbSAqb3V0cHV0U3RyZWFtID0gW1tHUEJDb2RlZE91
dHB1dFN0cmVhbSBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFdOwotICBXcml0ZURpY3RVSW50MzJG
aWVsZChvdXRwdXRTdHJlYW0sIGtleS0+dmFsdWVVSW50MzIsIGtNYXBLZXlGaWVsZE51bWJlciwg
a2V5RGF0YVR5cGUpOwotICBXcml0ZURpY3RFbnVtRmllbGQob3V0cHV0U3RyZWFtLCB2YWx1ZSwg
a01hcFZhbHVlRmllbGROdW1iZXIsIEdQQkRhdGFUeXBlRW51bSk7Ci0gIFtvdXRwdXRTdHJlYW0g
cmVsZWFzZV07Ci0gIHJldHVybiBkYXRhOwotfQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6
KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BC
R2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52
YWx1ZUVudW0pIGZvcktleTpAKGtleS0+dmFsdWVVSW50MzIpXTsKLX0KLQotLSAodm9pZCllbnVt
ZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9j
ayB7Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRSYXdWYWx1ZXNVc2luZ0Jsb2NrOl4odWludDMy
X3Qga2V5LCBpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJhZ21hIHVudXNl
ZChzdG9wKQotICAgICAgYmxvY2soW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIldSIsIGtl
eV0sIEAodmFsdWUpKTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KHVpbnQzMl90
KWtleSB2YWx1ZTooaW50MzJfdCAqKXZhbHVlIHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2Rp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAoa2V5KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7
Ci0gICAgaW50MzJfdCByZXN1bHQgPSBbd3JhcHBlZCBpbnRWYWx1ZV07Ci0gICAgaWYgKCFfdmFs
aWRhdGlvbkZ1bmMocmVzdWx0KSkgewotICAgICAgcmVzdWx0ID0ga0dQQlVucmVjb2duaXplZEVu
dW1lcmF0b3JWYWx1ZTsKLSAgICB9Ci0gICAgKnZhbHVlID0gcmVzdWx0OwotICB9Ci0gIHJldHVy
biAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleToodWludDMyX3Qp
a2V5IHJhd1ZhbHVlOihpbnQzMl90ICopcmF3VmFsdWUgewotICBOU051bWJlciAqd3JhcHBlZCA9
IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAgaWYgKHdyYXBwZWQgJiYgcmF3
VmFsdWUpIHsKLSAgICAqcmF3VmFsdWUgPSBbd3JhcHBlZCBpbnRWYWx1ZV07Ci0gIH0KLSAgcmV0
dXJuICh3cmFwcGVkICE9IE5VTEwpOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1
ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50MzJfdCBrZXksIGludDMyX3QgdmFsdWUs
IEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgR1BCRW51bVZhbGlkYXRpb25GdW5jIGZ1bmMgPSBfdmFs
aWRhdGlvbkZ1bmM7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5n
QmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgICBpbnQz
Ml90IHVud3JhcHBlZCA9IFthVmFsdWUgaW50VmFsdWVdOwotICAgICAgaWYgKCFmdW5jKHVud3Jh
cHBlZCkpIHsKLSAgICAgICAgdW53cmFwcGVkID0ga0dQQlVucmVjb2duaXplZEVudW1lcmF0b3JW
YWx1ZTsKLSAgICAgIH0KLSAgICAgIGJsb2NrKFthS2V5IHVuc2lnbmVkSW50VmFsdWVdLCB1bndy
YXBwZWQsIHN0b3ApOwotICB9XTsKLX0KLQotLSAodm9pZClhZGRSYXdFbnRyaWVzRnJvbURpY3Rp
b25hcnk6KEdQQlVJbnQzMkVudW1EaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYg
KG90aGVyRGljdGlvbmFyeSkgewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rp
b25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRv
cikgewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9y
LCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClzZXRSYXdWYWx1ZTooaW50MzJfdCl2
YWx1ZSBmb3JLZXk6KHVpbnQzMl90KWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2
YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRv
Y3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0K
LS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KHVpbnQzMl90KWFLZXkgewotICBbX2RpY3Rpb25h
cnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAoYUtleSldOwotfQotCi0tICh2b2lkKXJlbW92ZUFsbCB7
Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVBbGxPYmplY3RzXTsKLX0KLQotLSAodm9pZClzZXRWYWx1
ZTooaW50MzJfdCl2YWx1ZSBmb3JLZXk6KHVpbnQzMl90KWtleSB7Ci0gIGlmICghX3ZhbGlkYXRp
b25GdW5jKHZhbHVlKSkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVu
dEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkdQQlVJbnQzMkVudW1EaWN0aW9u
YXJ5OiBBdHRlbXB0IHRvIHNldCBhbiB1bmtub3duIGVudW0gdmFsdWUgKCVkKSIsCi0gICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlXTsKLSAgfQotCi0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6
QCh2YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJB
dXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19
Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gVUludDMyIC0+IE9iamVjdAotCi1AaW1wbGVtZW50
YXRpb24gR1BCVUludDMyT2JqZWN0RGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5
IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpOVUxMIGZvcktleXM6
TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9u
YXJ5V2l0aE9iamVjdDooaWQpb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JLZXk6KHVpbnQzMl90KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxl
ciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aE9iamVjdHM6Zm9yS2V5
czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhH
UEJVSW50MzJPYmplY3REaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiZv
YmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0K
LSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aE9iamVjdHM6KGNvbnN0IGlkIFtdKW9iamVj
dHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90
IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVn
ZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hh
dCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhPYmplY3RzOmZvcktleXM6Y291bnQ6Ci0g
IC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDMyT2Jq
ZWN0RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpvYmplY3RzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cktleXM6a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQzMk9iamVjdERpY3Rpb25h
cnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtu
b3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8g
b24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50MzJPYmplY3RE
aWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1
dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6
KE5TVUludGVnZXIpbnVtSXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aE9iamVjdHM6TlVMTCBmb3JLZXlzOk5VTEwgY291
bnQ6MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9iamVjdHM6KGNvbnN0IGlkIFtd
KW9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQzMl90
IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291
bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9u
YXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQg
JiYgb2JqZWN0cyAmJiBrZXlzKSB7Ci0gICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgIGlmICghb2JqZWN0c1tpXSkgewotICAgICAgICAgIFtOU0V4
Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgotICAgICAgICAgICAgICAg
ICAgICAgIGZvcm1hdDpAIkF0dGVtcHRpbmcgdG8gYWRkIG5pbCBvYmplY3QgdG8gYSBEaWN0aW9u
YXJ5Il07Ci0gICAgICAgIH0KLSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpvYmplY3Rz
W2ldIGZvcktleTpAKGtleXNbaV0pXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQzMk9i
amVjdERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoT2Jq
ZWN0czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAo
ZGljdGlvbmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFy
eTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVt
cyB7Ci0gICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhP
YmplY3RzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2Mg
ewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRv
ciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAg
ICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVh
c2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpv
bmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tHUEJVSW50MzJPYmplY3REaWN0aW9uYXJ5
IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChC
T09MKWlzRXF1YWw6KEdQQlVJbnQzMk9iamVjdERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChz
ZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tp
bmRPZkNsYXNzOltHUEJVSW50MzJPYmplY3REaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1
cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBpc0VxdWFsOm90aGVyLT5fZGljdGlv
bmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5j
b3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIHJldHVybiBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBzZWxm
LCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gX2Rp
Y3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2lu
Z0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50MzJfdCBrZXksIGlkIG9iamVjdCwgQk9PTCAqc3Rv
cCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Js
b2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZCBhT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soW2FLZXkg
dW5zaWduZWRJbnRWYWx1ZV0sIGFPYmplY3QsIHN0b3ApOwotICB9XTsKLX0KLQotLSAoQk9PTClp
c0luaXRpYWxpemVkIHsKLSAgZm9yIChHUEJNZXNzYWdlICptc2cgaW4gW19kaWN0aW9uYXJ5IG9i
amVjdEVudW1lcmF0b3JdKSB7Ci0gICAgaWYgKCFtc2cuaW5pdGlhbGl6ZWQpIHsKLSAgICAgIHJl
dHVybiBOTzsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFlFUzsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWRlZXBDb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICBHUEJVSW50MzJPYmplY3REaWN0
aW9uYXJ5ICpuZXdEaWN0ID0KLSAgICAgIFtbR1BCVUludDMyT2JqZWN0RGljdGlvbmFyeSBhbGxv
Y10gaW5pdF07Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxv
Y2s6XihpZCBhS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1BCTWVzc2FnZSAqbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0
b3ApCi0gICAgR1BCTWVzc2FnZSAqY29waWVkTXNnID0gW21zZyBjb3B5V2l0aFpvbmU6em9uZV07
Ci0gICAgW25ld0RpY3QtPl9kaWN0aW9uYXJ5IHNldE9iamVjdDpjb3BpZWRNc2cgZm9yS2V5OmFL
ZXldOwotICAgIFtjb3BpZWRNc2cgcmVsZWFzZV07Ci0gIH1dOwotICByZXR1cm4gbmV3RGljdDsK
LX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVz
Y3JpcHRvciAqKWZpZWxkIHsKLSAgTlNVSW50ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50
OwotICBpZiAoY291bnQgPT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgR1BCRGF0YVR5
cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRh
VHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICBfX2Jsb2NrIHNpemVf
dCByZXN1bHQgPSAwOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2lu
Z0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZCBhT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51
c2VkKHN0b3ApCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFVJbnQzMkZpZWxkU2l6
ZShbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlw
ZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdE9iamVjdEZpZWxkU2l6ZShhT2JqZWN0LCBr
TWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNv
bXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgfV07
Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxk
TnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUg
KiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRw
dXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBH
UEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0g
IEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQz
Ml90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BC
V2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlz
QW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkIGFPYmplY3QsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0g
ICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgIFtvdXRw
dXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNpemUgb2Yg
dGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFVJbnQzMkZpZWxk
U2l6ZShbYUtleSB1bnNpZ25lZEludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRh
VHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdE9iamVjdEZpZWxkU2l6ZShhT2JqZWN0
LCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgW291dHB1dFN0cmVh
bSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07Ci0gICAgLy8gV3JpdGUgdGhlIGZp
ZWxkcy4KLSAgICBXcml0ZURpY3RVSW50MzJGaWVsZChvdXRwdXRTdHJlYW0sIFthS2V5IHVuc2ln
bmVkSW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0
ZURpY3RPYmplY3RGaWVsZChvdXRwdXRTdHJlYW0sIGFPYmplY3QsIGtNYXBWYWx1ZUZpZWxkTnVt
YmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1Zh
bHVlOihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6
KEdQQkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6dmFsdWUt
PnZhbHVlU3RyaW5nIGZvcktleTpAKGtleS0+dmFsdWVVSW50MzIpXTsKLX0KLQotLSAodm9pZCll
bnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSli
bG9jayB7Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKHVpbnQz
Ml90IGtleSwgaWQgb2JqZWN0LCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJhZ21hIHVudXNlZChz
dG9wKQotICAgICAgYmxvY2soW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIldSIsIGtleV0s
IG9iamVjdCk7Ci0gIH1dOwotfQotCi0tIChpZClvYmplY3RGb3JLZXk6KHVpbnQzMl90KWtleSB7
Ci0gIGlkIHJlc3VsdCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQlVJ
bnQzMk9iamVjdERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotICBpZiAob3RoZXJEaWN0
aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvdGhl
ckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAg
ICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwot
ICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldE9iamVjdDooaWQpb2JqZWN0IGZvcktleToodWlu
dDMyX3Qpa2V5IHsKLSAgaWYgKCFvYmplY3QpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJ
bnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJBdHRlbXB0
aW5nIHRvIGFkZCBuaWwgb2JqZWN0IHRvIGEgRGljdGlvbmFyeSJdOwotICB9Ci0gIFtfZGljdGlv
bmFyeSBzZXRPYmplY3Q6b2JqZWN0IGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVhdG9y
KSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBz
ZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZU9iamVjdEZvcktleToodWludDMyX3QpYUtl
eSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6QChhS2V5KV07Ci19Ci0KLS0g
KHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNdOwotfQot
Ci1AZW5kCi0KLS8vJVBERE0tRVhQQU5EIERJQ1RJT05BUllfSU1QTF9GT1JfUE9EX0tFWShJbnQz
MiwgaW50MzJfdCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBl
ZGl0IGl0IGRpcmVjdGx5LgotCi0jcHJhZ21hIG1hcmsgLSBJbnQzMiAtPiBVSW50MzIKLQotQGlt
cGxlbWVudGF0aW9uIEdQQkludDMyVUludDMyRGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAgTlNN
dXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0
aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9y
S2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoVmFsdWU6KHVpbnQzMl90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleTooaW50MzJfdClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUg
Y29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6
Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVy
biBbWyhHUEJJbnQzMlVJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVl
czomdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCB1aW50MzJfdCBbXSl2
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50MzJf
dCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVn
ZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hh
dCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAg
Ly8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQzMlVJbnQz
MkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlz
OmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDMyVUludDMyRGljdGlvbmFyeSAqKWRp
Y3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hh
dCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBn
ZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDMyVUludDMyRGljdGlvbmFy
eSopW3NlbGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFz
ZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRl
Z2VyKW51bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6
bnVtSXRlbXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICBy
ZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgdWludDMyX3QgW10pdmFs
dWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IGludDMyX3QgW10pa2V5
cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBfZGljdGlvbmFyeSA9IFtb
TlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgaWYgKGNvdW50ICYmIHZhbHVl
cyAmJiBrZXlzKSB7Ci0gICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZXNbaV0pIGZvcktleTpA
KGtleXNbaV0pXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQkludDMyVUludDMyRGljdGlvbmFy
eSAqKWRpY3Rpb25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JL
ZXlzOk5VTEwgY291bnQ6MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsK
LSAgICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+
X2RpY3Rpb25hcnldOwotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21h
IHVudXNlZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9y
S2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCgh
X2F1dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFy
ZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNs
YXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIg
ZGVhbGxvY107Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpv
bmUgewotICByZXR1cm4gW1tHUEJJbnQzMlVJbnQzMkRpY3Rpb25hcnkgYWxsb2NXaXRoWm9uZTp6
b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BC
SW50MzJVSW50MzJEaWN0aW9uYXJ5ICopb3RoZXIgewotICBpZiAoc2VsZiA9PSBvdGhlcikgewot
ICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbR1BCSW50
MzJVSW50MzJEaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0
dXJuIFtfZGljdGlvbmFyeSBpc0VxdWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5T
VUludGVnZXIpaGFzaCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNT
dHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIjwlQCAlcD4geyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19
Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19
Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQg
KF4pKGludDMyX3Qga2V5LCB1aW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBb
X2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIg
KmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soW2FLZXkgaW50VmFsdWVd
LCBbYVZhbHVlIHVuc2lnbmVkSW50VmFsdWVdLCBzdG9wKTsKLSAgfV07Ci19Ci0KLS0gKHNpemVf
dCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVs
ZCB7Ci0gIE5TVUludGVnZXIgY291bnQgPSBfZGljdGlvbmFyeS5jb3VudDsKLSAgaWYgKGNvdW50
ID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5
cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5
cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgX19ibG9jayBzaXplX3QgcmVzdWx0ID0gMDsK
LSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVt
YmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9w
KQotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RJbnQzMkZpZWxkU2l6ZShbYUtleSBp
bnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUg
Kz0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoW2FWYWx1ZSB1bnNpZ25lZEludFZhbHVlXSwg
a01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3VsdCArPSBHUEJD
b21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0gIH1d
OwotICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVs
ZE51bWJlcihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXpl
ICogY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0
cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQotICAgICAgICAg
ICAgICAgICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAg
R1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwot
ICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICB1aW50
MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQ
QldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5
c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3Rv
cCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAg
ICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdyaXRlIHRoZSBz
aXplIG9mIHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RJbnQz
MkZpZWxkU2l6ZShbYUtleSBpbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5
cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoW2FWYWx1ZSB1
bnNpZ25lZEludFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwot
ICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAg
IC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0SW50MzJGaWVsZChvdXRwdXRTdHJl
YW0sIFthS2V5IGludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0g
ICAgV3JpdGVEaWN0VUludDMyRmllbGQob3V0cHV0U3RyZWFtLCBbYVZhbHVlIHVuc2lnbmVkSW50
VmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gIH1dOwotfQot
Ci0tICh2b2lkKXNldEdQQkdlbmVyaWNWYWx1ZTooR1BCR2VuZXJpY1ZhbHVlICopdmFsdWUKLSAg
ICAgZm9yR1BCR2VuZXJpY1ZhbHVlS2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkgewotICBbX2Rp
Y3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUtPnZhbHVlVUludDMyKSBmb3JLZXk6QChrZXktPnZh
bHVlSW50MzIpXTsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkIChe
KShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNB
bmRWYWx1ZXNVc2luZ0Jsb2NrOl4oaW50MzJfdCBrZXksIHVpbnQzMl90IHZhbHVlLCBCT09MICpz
dG9wKSB7Ci0gICAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgICAgYmxvY2soW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIGtleV0sIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJXUiLCB2YWx1ZV0pOwotICB9XTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50MzJf
dClrZXkgdmFsdWU6KHVpbnQzMl90ICopdmFsdWUgewotICBOU051bWJlciAqd3JhcHBlZCA9IFtf
ZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAgaWYgKHdyYXBwZWQgJiYgdmFsdWUp
IHsKLSAgICAqdmFsdWUgPSBbd3JhcHBlZCB1bnNpZ25lZEludFZhbHVlXTsKLSAgfQotICByZXR1
cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci19Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9u
YXJ5OihHUEJJbnQzMlVJbnQzMkRpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotICBpZiAo
b3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlv
bmFyeTpvdGhlckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1dG9jcmVhdG9y
KSB7Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3Is
IHNlbGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldFZhbHVlOih1aW50MzJfdCl2YWx1
ZSBmb3JLZXk6KGludDMyX3Qpa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVl
KSBmb3JLZXk6QChrZXkpXTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVh
dGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAo
dm9pZClyZW1vdmVWYWx1ZUZvcktleTooaW50MzJfdClhS2V5IHsKLSAgW19kaWN0aW9uYXJ5IHJl
bW92ZU9iamVjdEZvcktleTpAKGFLZXkpXTsKLX0KLQotLSAodm9pZClyZW1vdmVBbGwgewotICBb
X2RpY3Rpb25hcnkgcmVtb3ZlQWxsT2JqZWN0c107Ci19Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJr
IC0gSW50MzIgLT4gSW50MzIKLQotQGltcGxlbWVudGF0aW9uIEdQQkludDMySW50MzJEaWN0aW9u
YXJ5IHsKLSBAcGFja2FnZQotICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0K
LQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10g
aW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwot
fQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooaW50MzJfdCl2YWx1ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KGludDMyX3Qpa2V5IHsKLSAgLy8g
Q2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGlu
dm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUg
dHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50MzJJbnQzMkRpY3Rpb25hcnkqKVtzZWxm
IGFsbG9jXSBpbml0V2l0aFZhbHVlczomdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBh
dXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczoo
Y29uc3QgaW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
S2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUg
Y29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6
Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVy
biBbWyhHUEJJbnQzMkludDMyRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVz
OnZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0K
LSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDMySW50MzJE
aWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21w
aWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aERpY3Rpb25hcnk6
Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50MzJJ
bnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFy
eV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBh
Y2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxM
IGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGlu
dDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IGlu
dDMyX3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2Vy
KWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBfZGlj
dGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgaWYgKGNv
dW50ICYmIHZhbHVlcyAmJiBrZXlzKSB7Ci0gICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZXNb
aV0pIGZvcktleTpAKGtleXNbaV0pXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQkludDMySW50
MzJEaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVl
czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGlj
dGlvbmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpk
aWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7
Ci0gICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1
ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0g
IE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11
c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAg
ICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07
Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZToo
TlNab25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQkludDMySW50MzJEaWN0aW9uYXJ5IGFsbG9j
V2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlz
RXF1YWw6KEdQQkludDMySW50MzJEaWN0aW9uYXJ5ICopb3RoZXIgewotICBpZiAoc2VsZiA9PSBv
dGhlcikgewotICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIgaXNLaW5kT2ZDbGFz
czpbR1BCSW50MzJJbnQzMkRpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAg
fQotICByZXR1cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsKLX0K
LQotLSAoTlNVSW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQot
Ci0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0aW9u
YXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5j
b3VudDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAg
ICAodm9pZCAoXikoaW50MzJfdCBrZXksIGludDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2Nr
IHsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5T
TnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAgIGJsb2NrKFthS2V5IGlu
dFZhbHVlXSwgW2FWYWx1ZSBpbnRWYWx1ZV0sIHN0b3ApOwotICB9XTsKLX0KLQotLSAoc2l6ZV90
KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxk
IHsKLSAgTlNVSW50ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQg
PT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlw
ZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlw
ZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwot
ICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1i
ZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3Ap
Ci0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEludDMyRmllbGRTaXplKFthS2V5IGlu
dFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSAr
PSBDb21wdXRlRGljdEludDMyRmllbGRTaXplKFthVmFsdWUgaW50VmFsdWVdLCBrTWFwVmFsdWVG
aWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdW
YXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgfV07Ci0gIHNpemVf
dCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVtYmVyKGZp
ZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBjb3VudDsK
LSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06
KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJEYXRhVHlw
ZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFU
eXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQzMl90IHRhZyA9
IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1h
dExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0
c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAg
I3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgIFtvdXRwdXRT
dHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNpemUgb2YgdGhl
IG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEludDMyRmllbGRTaXpl
KFthS2V5IGludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAg
bXNnU2l6ZSArPSBDb21wdXRlRGljdEludDMyRmllbGRTaXplKFthVmFsdWUgaW50VmFsdWVdLCBr
TWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgW291dHB1dFN0cmVhbSB3
cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07Ci0gICAgLy8gV3JpdGUgdGhlIGZpZWxk
cy4KLSAgICBXcml0ZURpY3RJbnQzMkZpZWxkKG91dHB1dFN0cmVhbSwgW2FLZXkgaW50VmFsdWVd
LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RJbnQzMkZp
ZWxkKG91dHB1dFN0cmVhbSwgW2FWYWx1ZSBpbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVy
LCB2YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVl
OihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQ
QkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZS0+
dmFsdWVJbnQzMikgZm9yS2V5OkAoa2V5LT52YWx1ZUludDMyKV07Ci19Ci0KLS0gKHZvaWQpZW51
bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxv
Y2sgewotICBbc2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazpeKGludDMyX3Qg
a2V5LCBpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJhZ21hIHVudXNlZChz
dG9wKQotICAgICAgYmxvY2soW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIGtleV0s
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCB2YWx1ZV0pOwotICB9XTsKLX0KLQot
LSAoQk9PTCl2YWx1ZUZvcktleTooaW50MzJfdClrZXkgdmFsdWU6KGludDMyX3QgKil2YWx1ZSB7
Ci0gIE5TTnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAKGtleSld
OwotICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIGludFZh
bHVlXTsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci19Ci0KLS0gKHZvaWQpYWRk
RW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJJbnQzMkludDMyRGljdGlvbmFyeSAqKW90aGVyRGlj
dGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsKLSAgICBbX2RpY3Rpb25hcnkgYWRk
RW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAg
IGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlm
aWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZvaWQpc2V0VmFs
dWU6KGludDMyX3QpdmFsdWUgZm9yS2V5OihpbnQzMl90KWtleSB7Ci0gIFtfZGljdGlvbmFyeSBz
ZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsK
LSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYp
OwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KGludDMyX3QpYUtleSB7Ci0g
IFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6QChhS2V5KV07Ci19Ci0KLS0gKHZvaWQp
cmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNdOwotfQotCi1AZW5k
Ci0KLSNwcmFnbWEgbWFyayAtIEludDMyIC0+IFVJbnQ2NAotCi1AaW1wbGVtZW50YXRpb24gR1BC
SW50MzJVSW50NjREaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBOU011dGFibGVEaWN0aW9uYXJ5
ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewotICByZXR1
cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6
MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1
ZToodWludDY0X3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5Oihp
bnQzMl90KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3
aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50Ogot
ICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDMyVUlu
dDY0RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2YWx1ZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtdKXZhbHVlcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQzMl90IFtdKWtleXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIC8v
IENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBp
bnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhl
IHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDMyVUludDY0RGljdGlvbmFyeSopW3Nl
bGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOnZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6
Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRo
RGljdGlvbmFyeTooR1BCSW50MzJVSW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIC8v
IENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBp
bnZva2luZyBpbml0V2l0aERpY3Rpb25hcnk6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3Jy
ZWN0LgotICByZXR1cm4gW1soR1BCSW50MzJVSW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10g
aW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5z
dGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewot
ICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1JdGVtc10gYXV0b3Jl
bGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBbc2VsZiBpbml0
V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCB1aW50NjRfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMpIHsKLSAg
ICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgW19k
aWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSldOwotICAg
ICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoRGljdGlvbmFyeTooR1BCSW50MzJVSW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7
Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDow
XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAgICAgW19kaWN0aW9u
YXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0g
ICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
YXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gICNwcmFnbWEgdW51c2VkKG51bUl0ZW1z
KQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6
MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0g
ICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFz
ZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0
b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7Ci0gIHJldHVybiBb
W0dQQkludDMyVUludDY0RGljdGlvbmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGlj
dGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJJbnQzMlVJbnQ2NERpY3Rp
b25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsK
LSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJJbnQzMlVJbnQ2NERpY3Rpb25h
cnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4gW19kaWN0aW9uYXJ5
IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciloYXNoIHsK
LSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0
aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVAICVwPiB7ICVA
IH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdl
ciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAodm9pZCllbnVt
ZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoaW50MzJfdCBrZXks
IHVpbnQ2NF90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIFtfZGljdGlvbmFyeSBlbnVt
ZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
T09MICpzdG9wKSB7Ci0gICAgICBibG9jayhbYUtleSBpbnRWYWx1ZV0sIFthVmFsdWUgdW5zaWdu
ZWRMb25nTG9uZ1ZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0tIChzaXplX3QpY29tcHV0ZVNl
cmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBOU1VJ
bnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0g
ICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0
RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQu
bWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlv
bmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVt
YmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICBzaXpl
X3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0SW50MzJGaWVsZFNpemUoW2FLZXkgaW50VmFsdWVdLCBr
TWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVE
aWN0VUludDY0RmllbGRTaXplKFthVmFsdWUgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcFZh
bHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3VsdCArPSBHUEJDb21wdXRl
UmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0gIH1dOwotICBz
aXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVsZE51bWJl
cihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXplICogY291
bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0U3Ry
ZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQotICAgICAgICAgICAgICAg
ICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0
YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJE
YXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICB1aW50MzJfdCB0
YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQldpcmVG
b3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9i
amVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewot
ICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0
cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdyaXRlIHRoZSBzaXplIG9m
IHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RJbnQzMkZpZWxk
U2l6ZShbYUtleSBpbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwot
ICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RVSW50NjRGaWVsZFNpemUoW2FWYWx1ZSB1bnNpZ25l
ZExvbmdMb25nVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0g
ICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07Ci0gICAg
Ly8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RJbnQzMkZpZWxkKG91dHB1dFN0cmVh
bSwgW2FLZXkgaW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAg
ICBXcml0ZURpY3RVSW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIFthVmFsdWUgdW5zaWduZWRMb25n
TG9uZ1ZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsK
LX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVl
Ci0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAg
W19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZVVJbnQ2NCkgZm9yS2V5OkAoa2V5
LT52YWx1ZUludDMyKV07Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9p
ZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVL
ZXlzQW5kVmFsdWVzVXNpbmdCbG9jazpeKGludDMyX3Qga2V5LCB1aW50NjRfdCB2YWx1ZSwgQk9P
TCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCBrZXldLCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiVsbHUiLCB2YWx1ZV0pOwotICB9XTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleToo
aW50MzJfdClrZXkgdmFsdWU6KHVpbnQ2NF90ICopdmFsdWUgewotICBOU051bWJlciAqd3JhcHBl
ZCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAgaWYgKHdyYXBwZWQgJiYg
dmFsdWUpIHsKLSAgICAqdmFsdWUgPSBbd3JhcHBlZCB1bnNpZ25lZExvbmdMb25nVmFsdWVdOwot
ICB9Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVz
RnJvbURpY3Rpb25hcnk6KEdQQkludDMyVUludDY0RGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFy
eSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsKLSAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmll
c0Zyb21EaWN0aW9uYXJ5Om90aGVyRGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIGlmIChf
YXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9h
dXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KHVp
bnQ2NF90KXZhbHVlIGZvcktleTooaW50MzJfdClrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2Jq
ZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAg
R1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAg
fQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihpbnQzMl90KWFLZXkgewotICBbX2Rp
Y3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAoYUtleSldOwotfQotCi0tICh2b2lkKXJlbW92
ZUFsbCB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVBbGxPYmplY3RzXTsKLX0KLQotQGVuZAotCi0j
cHJhZ21hIG1hcmsgLSBJbnQzMiAtPiBJbnQ2NAotCi1AaW1wbGVtZW50YXRpb24gR1BCSW50MzJJ
bnQ2NERpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9kaWN0
aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0gIHJldHVybiBbW1tz
ZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRv
cmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihpbnQ2
NF90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooaW50MzJfdClr
ZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFz
cyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24g
dG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQzMkludDY0RGljdGlv
bmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2YWx1ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czoma2V5Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlX
aXRoVmFsdWVzOihjb25zdCBpbnQ2NF90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQzMl90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIC8vIENhc3QgaXMgbmVl
ZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0
V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVj
dC4KLSAgcmV0dXJuIFtbKEdQQkludDMySW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5p
dFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6Y291bnRdIGF1dG9yZWxl
YXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BC
SW50MzJJbnQ2NERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQg
c28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRo
RGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBb
WyhHUEJJbnQzMkludDY0RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFy
eTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9u
YXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVtSXRlbXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXQgewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBm
b3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVl
czooY29uc3QgaW50NjRfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5
czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6
KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikg
ewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsK
LSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdl
ciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVj
dDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSldOwotICAgICAgfQotICAgIH0KLSAgfQot
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeToo
R1BCSW50MzJJbnQ2NERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGlu
aXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAoc2VsZikgewot
ICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21E
aWN0aW9uYXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2Vy
KW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBp
bml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAodm9pZClk
ZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAgQCIlQDogQXV0
b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRvcjogJUAi
LAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIFtfZGljdGlvbmFy
eSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpY29w
eVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCSW50MzJJbnQ2NERpY3Rp
b25hcnkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0K
LS0gKEJPT0wpaXNFcXVhbDooR1BCSW50MzJJbnQ2NERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlm
IChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBp
c0tpbmRPZkNsYXNzOltHUEJJbnQzMkludDY0RGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0
dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpvdGhlci0+X2RpY3Rp
b25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gX2RpY3Rpb25hcnku
Y291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICByZXR1cm4gW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxmIGNsYXNzXSwgc2Vs
ZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIF9k
aWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2lu
Z0Jsb2NrOgotICAgICh2b2lkICheKShpbnQzMl90IGtleSwgaW50NjRfdCB2YWx1ZSwgQk9PTCAq
c3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2lu
Z0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxv
Y2soW2FLZXkgaW50VmFsdWVdLCBbYVZhbHVlIGxvbmdMb25nVmFsdWVdLCBzdG9wKTsKLSAgfV07
Ci19Ci0KLS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVsZERl
c2NyaXB0b3IgKilmaWVsZCB7Ci0gIE5TVUludGVnZXIgY291bnQgPSBfZGljdGlvbmFyeS5jb3Vu
dDsKLSAgaWYgKGNvdW50ID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIEdQQkRhdGFU
eXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0
YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgX19ibG9jayBzaXpl
X3QgcmVzdWx0ID0gMDsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNp
bmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJh
Z21hIHVudXNlZChzdG9wKQotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RJbnQzMkZp
ZWxkU2l6ZShbYUtleSBpbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUp
OwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RJbnQ2NEZpZWxkU2l6ZShbYVZhbHVlIGxvbmdM
b25nVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVz
dWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNn
U2l6ZTsKLSAgfV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdT
aXplKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0
ICs9IHRhZ1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0
ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFt
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICop
ZmllbGQgewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlw
ZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5
cGU7Ci0gIHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVy
KGZpZWxkKSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBl
bnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICph
VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0
aGUgdGFnLgotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8g
V3JpdGUgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21w
dXRlRGljdEludDMyRmllbGRTaXplKFthS2V5IGludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVy
LCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEludDY0RmllbGRTaXpl
KFthVmFsdWUgbG9uZ0xvbmdWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFU
eXBlKTsKLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXpl
XTsKLSAgICAvLyBXcml0ZSB0aGUgZmllbGRzLgotICAgIFdyaXRlRGljdEludDMyRmllbGQob3V0
cHV0U3RyZWFtLCBbYUtleSBpbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5
cGUpOwotICAgIFdyaXRlRGljdEludDY0RmllbGQob3V0cHV0U3RyZWFtLCBbYVZhbHVlIGxvbmdM
b25nVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gIH1dOwot
fQotCi0tICh2b2lkKXNldEdQQkdlbmVyaWNWYWx1ZTooR1BCR2VuZXJpY1ZhbHVlICopdmFsdWUK
LSAgICAgZm9yR1BCR2VuZXJpY1ZhbHVlS2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkgewotICBb
X2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUtPnZhbHVlSW50NjQpIGZvcktleTpAKGtleS0+
dmFsdWVJbnQzMildOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQg
KF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsKLSAgW3NlbGYgZW51bWVyYXRlS2V5
c0FuZFZhbHVlc1VzaW5nQmxvY2s6XihpbnQzMl90IGtleSwgaW50NjRfdCB2YWx1ZSwgQk9PTCAq
c3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCBrZXldLCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIiVsbGQiLCB2YWx1ZV0pOwotICB9XTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50
MzJfdClrZXkgdmFsdWU6KGludDY0X3QgKil2YWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFwcGVkID0g
W19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAKGtleSldOwotICBpZiAod3JhcHBlZCAmJiB2YWx1
ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIGxvbmdMb25nVmFsdWVdOwotICB9Ci0gIHJldHVy
biAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25h
cnk6KEdQQkludDMySW50NjREaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90
aGVyRGljdGlvbmFyeSkgewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25h
cnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikg
ewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBz
ZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClzZXRWYWx1ZTooaW50NjRfdCl2YWx1ZSBm
b3JLZXk6KGludDMyX3Qpa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBm
b3JLZXk6QChrZXkpXTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVk
RGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9p
ZClyZW1vdmVWYWx1ZUZvcktleTooaW50MzJfdClhS2V5IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92
ZU9iamVjdEZvcktleTpAKGFLZXkpXTsKLX0KLQotLSAodm9pZClyZW1vdmVBbGwgewotICBbX2Rp
Y3Rpb25hcnkgcmVtb3ZlQWxsT2JqZWN0c107Ci19Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0g
SW50MzIgLT4gQm9vbAotCi1AaW1wbGVtZW50YXRpb24gR1BCSW50MzJCb29sRGljdGlvbmFyeSB7
Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsg
KGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRX
aXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KEJPT0wpdmFsdWUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihpbnQzMl90KWtleSB7Ci0gIC8vIENhc3QgaXMg
bmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBp
bml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29y
cmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDMyQm9vbERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBp
bml0V2l0aFZhbHVlczomdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2Vd
OwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IEJPT0wg
W10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IGlu
dDMyX3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJ
bnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6
Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50MzJC
b29sRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOnZhbHVlcwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlz
OmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJJbnQzMkJvb2xEaWN0aW9uYXJ5ICopZGljdGlv
bmFyeSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aERpY3Rpb25hcnk6Ci0gIC8vIG9uIHRvIGdldCB0
aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50MzJCb29sRGljdGlvbmFyeSopW3Nl
bGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07Ci19
Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51
bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVtSXRl
bXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICByZXR1cm4g
W3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgQk9PTCBbXSl2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMp
IHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSld
OwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCSW50MzJCb29sRGljdGlvbmFyeSAqKWRpY3Rpb25h
cnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291
bnQ6MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtfZGlj
dGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25hcnld
OwotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21hIHVudXNlZChudW1J
dGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNv
dW50OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9y
LAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJl
bGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9j
cmVhdG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1
cm4gW1tHUEJJbnQzMkJvb2xEaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhE
aWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQkludDMyQm9vbERpY3Rp
b25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsK
LSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJJbnQzMkJvb2xEaWN0aW9uYXJ5
IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBp
c0VxdWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0g
IHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlv
biB7Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAlQCB9
IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIp
Y291bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVy
YXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKGludDMyX3Qga2V5LCBC
T09MIHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVL
ZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpz
dG9wKSB7Ci0gICAgICBibG9jayhbYUtleSBpbnRWYWx1ZV0sIFthVmFsdWUgYm9vbFZhbHVlXSwg
c3RvcCk7Ci0gIH1dOwotfQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVs
ZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2Rp
Y3Rpb25hcnkuY291bnQ7Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0K
LQotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVs
ZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0g
IF9fYmxvY2sgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlz
QW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9w
KSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1
dGVEaWN0SW50MzJGaWVsZFNpemUoW2FLZXkgaW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIs
IGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0Qm9vbEZpZWxkU2l6ZShb
YVZhbHVlIGJvb2xWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsK
LSAgICByZXN1bHQgKz0gR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6
ZSkgKyBtc2dTaXplOwotICB9XTsKLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZv
cm1hdFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwot
ICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2
b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRw
dXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2Ny
aXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVs
ZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBL
ZXlEYXRhVHlwZTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmll
bGROdW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgW19kaWN0
aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNO
dW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8v
IFdyaXRlIHRoZSB0YWcuCi0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsK
LSAgICAvLyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6
ZSA9IENvbXB1dGVEaWN0SW50MzJGaWVsZFNpemUoW2FLZXkgaW50VmFsdWVdLCBrTWFwS2V5Rmll
bGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0Qm9vbEZp
ZWxkU2l6ZShbYVZhbHVlIGJvb2xWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURh
dGFUeXBlKTsKLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dT
aXplXTsKLSAgICAvLyBXcml0ZSB0aGUgZmllbGRzLgotICAgIFdyaXRlRGljdEludDMyRmllbGQo
b3V0cHV0U3RyZWFtLCBbYUtleSBpbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0
YVR5cGUpOwotICAgIFdyaXRlRGljdEJvb2xGaWVsZChvdXRwdXRTdHJlYW0sIFthVmFsdWUgYm9v
bFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsKLX0K
LQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0g
ICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19k
aWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZUJvb2wpIGZvcktleTpAKGtleS0+dmFs
dWVJbnQzMildOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4p
KGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsKLSAgW3NlbGYgZW51bWVyYXRlS2V5c0Fu
ZFZhbHVlc1VzaW5nQmxvY2s6XihpbnQzMl90IGtleSwgQk9PTCB2YWx1ZSwgQk9PTCAqc3RvcCkg
ewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiJWQiLCBrZXldLCAodmFsdWUgPyBAInRydWUiIDogQCJmYWxzZSIpKTsK
LSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KGludDMyX3Qpa2V5IHZhbHVlOihCT09M
ICopdmFsdWUgewotICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JL
ZXk6QChrZXkpXTsKLSAgaWYgKHdyYXBwZWQgJiYgdmFsdWUpIHsKLSAgICAqdmFsdWUgPSBbd3Jh
cHBlZCBib29sVmFsdWVdOwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQot
LSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkludDMyQm9vbERpY3Rpb25hcnkg
KilvdGhlckRpY3Rpb25hcnkgewotICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0
aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvdGhlckRpY3Rpb25hcnktPl9kaWN0aW9u
YXJ5XTsKLSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rp
b25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2
b2lkKXNldFZhbHVlOihCT09MKXZhbHVlIGZvcktleTooaW50MzJfdClrZXkgewotICBbX2RpY3Rp
b25hcnkgc2V0T2JqZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVh
dG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9y
LCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihpbnQzMl90KWFL
ZXkgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAoYUtleSldOwotfQotCi0t
ICh2b2lkKXJlbW92ZUFsbCB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVBbGxPYmplY3RzXTsKLX0K
LQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBJbnQzMiAtPiBGbG9hdAotCi1AaW1wbGVtZW50YXRp
b24gR1BCSW50MzJGbG9hdERpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIE5TTXV0YWJsZURpY3Rp
b25hcnkgKl9kaWN0aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0g
IHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBj
b3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aFZhbHVlOihmbG9hdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6
KGludDMyX3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6
Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50MzJG
bG9hdERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczomdmFsdWUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlk
aWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgZmxvYXQgW10pdmFsdWVzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IGludDMyX3QgW10pa2V5cwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2Fz
dCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9r
aW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlw
ZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50MzJGbG9hdERpY3Rpb25hcnkqKVtzZWxmIGFs
bG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDpjb3VudF0g
YXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9u
YXJ5OihHUEJJbnQzMkZsb2F0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICAvLyBDYXN0IGlz
IG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcg
aW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAg
cmV0dXJuIFtbKEdQQkludDMyRmxvYXREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhE
aWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBl
KWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICByZXR1cm4g
W1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVl
czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoVmFsdWVzOihjb25zdCBmbG9hdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAg
Zm9yS2V5czooY29uc3QgaW50MzJfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAo
c2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZvciAoTlNV
SW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgW19kaWN0aW9uYXJ5IHNl
dE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSldOwotICAgICAgfQotICAgIH0K
LSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlv
bmFyeTooR1BCSW50MzJGbG9hdERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtz
ZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAoc2Vs
ZikgewotICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmll
c0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0gIH0KLSAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJ
bnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBb
c2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAo
dm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAgQCIl
QDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRv
cjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIFtfZGlj
dGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCSW50MzJGbG9h
dERpY3Rpb25hcnkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07
Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BCSW50MzJGbG9hdERpY3Rpb25hcnkgKilvdGhlciB7
Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtv
dGhlciBpc0tpbmRPZkNsYXNzOltHUEJJbnQzMkZsb2F0RGljdGlvbmFyeSBjbGFzc11dKSB7Ci0g
ICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpvdGhlci0+
X2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gX2RpY3Rp
b25hcnkuY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICByZXR1cm4g
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxmIGNsYXNz
XSwgc2VsZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0
dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1
ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShpbnQzMl90IGtleSwgZmxvYXQgdmFsdWUsIEJP
T0wgKnN0b3ApKWJsb2NrIHsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3Rz
VXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAg
IGJsb2NrKFthS2V5IGludFZhbHVlXSwgW2FWYWx1ZSBmbG9hdFZhbHVlXSwgc3RvcCk7Ci0gIH1d
OwotfQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGRE
ZXNjcmlwdG9yICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291
bnQ7Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRh
VHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRh
dGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6
ZV90IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1Vz
aW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3By
YWdtYSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0SW50MzJG
aWVsZFNpemUoW2FLZXkgaW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBl
KTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0RmxvYXRGaWVsZFNpemUoW2FWYWx1ZSBmbG9h
dFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3Vs
dCArPSBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1Np
emU7Ci0gIH1dOwotICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6
ZShHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCAr
PSB0YWdTaXplICogY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVU
b0NvZGVkT3V0cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQot
ICAgICAgICAgICAgICAgICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZp
ZWxkIHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUo
ZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBl
OwotICB1aW50MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihm
aWVsZCksIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51
bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Qk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhl
IHRhZy4KLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdy
aXRlIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0
ZURpY3RJbnQzMkZpZWxkU2l6ZShbYUtleSBpbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwg
a2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RGbG9hdEZpZWxkU2l6ZShb
YVZhbHVlIGZsb2F0VmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7
Ci0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07Ci0g
ICAgLy8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RJbnQzMkZpZWxkKG91dHB1dFN0
cmVhbSwgW2FLZXkgaW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsK
LSAgICBXcml0ZURpY3RGbG9hdEZpZWxkKG91dHB1dFN0cmVhbSwgW2FWYWx1ZSBmbG9hdFZhbHVl
XSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsKLX0KLQotLSAo
dm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZv
ckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9u
YXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZUZsb2F0KSBmb3JLZXk6QChrZXktPnZhbHVlSW50
MzIpXTsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBr
ZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRWYWx1
ZXNVc2luZ0Jsb2NrOl4oaW50MzJfdCBrZXksIGZsb2F0IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0g
ICAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgICAgYmxvY2soW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlZCIsIGtleV0sIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4qZyIs
IEZMVF9ESUcsIHZhbHVlXSk7Ci0gIH1dOwotfQotCi0tIChCT09MKXZhbHVlRm9yS2V5OihpbnQz
Ml90KWtleSB2YWx1ZTooZmxvYXQgKil2YWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFwcGVkID0gW19k
aWN0aW9uYXJ5IG9iamVjdEZvcktleTpAKGtleSldOwotICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkg
ewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIGZsb2F0VmFsdWVdOwotICB9Ci0gIHJldHVybiAod3Jh
cHBlZCAhPSBOVUxMKTsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQ
QkludDMyRmxvYXREaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGlj
dGlvbmFyeSkgewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3Ro
ZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAg
ICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsK
LSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClzZXRWYWx1ZTooZmxvYXQpdmFsdWUgZm9yS2V5Oihp
bnQzMl90KWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAo
a2V5KV07Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25h
cnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3Zl
VmFsdWVGb3JLZXk6KGludDMyX3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RG
b3JLZXk6QChhS2V5KV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5
IHJlbW92ZUFsbE9iamVjdHNdOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEludDMyIC0+
IERvdWJsZQotCi1AaW1wbGVtZW50YXRpb24gR1BCSW50MzJEb3VibGVEaWN0aW9uYXJ5IHsKLSBA
cGFja2FnZQotICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5z
dGFuY2V0eXBlKWRpY3Rpb25hcnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhW
YWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooZG91YmxlKXZhbHVlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcktleTooaW50MzJfdClrZXkgewotICAvLyBDYXN0IGlzIG5l
ZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5p
dFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJl
Y3QuCi0gIHJldHVybiBbWyhHUEJJbnQzMkRvdWJsZURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBp
bml0V2l0aFZhbHVlczomdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxl
YXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBk
b3VibGUgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNv
bnN0IGludDMyX3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVy
IGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6
Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BC
SW50MzJEb3VibGVEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czprZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJJbnQzMkRvdWJsZURpY3Rp
b25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVy
IGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAg
Ly8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQzMkRvdWJs
ZURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0g
YXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0
eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNv
dW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGRvdWJs
ZSBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50MzJf
dCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291
bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9u
YXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQg
JiYgdmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkg
Zm9yS2V5OkAoa2V5c1tpXSldOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCSW50MzJEb3VibGVE
aWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVlczpO
VUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGljdGlv
bmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0
aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0g
ICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6
TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5T
QXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3Qg
YmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAg
W3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07Ci0g
IFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNa
b25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQkludDMyRG91YmxlRGljdGlvbmFyeSBhbGxvY1dp
dGhab25lOnpvbmVdIGluaXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0Vx
dWFsOihHUEJJbnQzMkRvdWJsZURpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90
aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNz
OltHUEJJbnQzMkRvdWJsZURpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAg
fQotICByZXR1cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsKLX0K
LQotLSAoTlNVSW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQot
Ci0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0aW9u
YXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5j
b3VudDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAg
ICAodm9pZCAoXikoaW50MzJfdCBrZXksIGRvdWJsZSB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sg
ewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNO
dW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soW2FLZXkgaW50
VmFsdWVdLCBbYVZhbHVlIGRvdWJsZVZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0tIChzaXpl
X3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmll
bGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlmIChjb3Vu
dCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFU
eXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFU
eXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3VsdCA9IDA7
Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051
bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3Rv
cCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0SW50MzJGaWVsZFNpemUoW2FLZXkg
aW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXpl
ICs9IENvbXB1dGVEaWN0RG91YmxlRmllbGRTaXplKFthVmFsdWUgZG91YmxlVmFsdWVdLCBrTWFw
VmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNvbXB1
dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgfV07Ci0g
IHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVt
YmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBj
b3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRT
dHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJE
YXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQ
QkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQzMl90
IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2ly
ZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5k
T2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7
Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgIFtv
dXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNpemUg
b2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEludDMyRmll
bGRTaXplKFthS2V5IGludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7
Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdERvdWJsZUZpZWxkU2l6ZShbYVZhbHVlIGRvdWJs
ZVZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRw
dXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRl
IHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0SW50MzJGaWVsZChvdXRwdXRTdHJlYW0sIFthS2V5
IGludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVE
aWN0RG91YmxlRmllbGQob3V0cHV0U3RyZWFtLCBbYVZhbHVlIGRvdWJsZVZhbHVlXSwga01hcFZh
bHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsKLX0KLQotLSAodm9pZClzZXRH
UEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVy
aWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9i
amVjdDpAKHZhbHVlLT52YWx1ZURvdWJsZSkgZm9yS2V5OkAoa2V5LT52YWx1ZUludDMyKV07Ci19
Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBp
ZCB2YWx1ZU9iaikpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdC
bG9jazpeKGludDMyX3Qga2V5LCBkb3VibGUgdmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNw
cmFnbWEgdW51c2VkKHN0b3ApCi0gICAgICBibG9jayhbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIiVkIiwga2V5XSwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlLipsZyIsIERCTF9E
SUcsIHZhbHVlXSk7Ci0gIH1dOwotfQotCi0tIChCT09MKXZhbHVlRm9yS2V5OihpbnQzMl90KWtl
eSB2YWx1ZTooZG91YmxlICopdmFsdWUgewotICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlv
bmFyeSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAgaWYgKHdyYXBwZWQgJiYgdmFsdWUpIHsKLSAg
ICAqdmFsdWUgPSBbd3JhcHBlZCBkb3VibGVWYWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVk
ICE9IE5VTEwpOwotfQotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCSW50
MzJEb3VibGVEaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlv
bmFyeSkgewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJE
aWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAg
R1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAg
ICB9Ci0gIH0KLX0KLQotLSAodm9pZClzZXRWYWx1ZTooZG91YmxlKXZhbHVlIGZvcktleTooaW50
MzJfdClrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUpIGZvcktleTpAKGtl
eSldOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5
TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZVZh
bHVlRm9yS2V5OihpbnQzMl90KWFLZXkgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9y
S2V5OkAoYUtleSldOwotfQotCi0tICh2b2lkKXJlbW92ZUFsbCB7Ci0gIFtfZGljdGlvbmFyeSBy
ZW1vdmVBbGxPYmplY3RzXTsKLX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBJbnQzMiAtPiBF
bnVtCi0KLUBpbXBsZW1lbnRhdGlvbiBHUEJJbnQzMkVudW1EaWN0aW9uYXJ5IHsKLSBAcGFja2Fn
ZQotICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLSAgR1BCRW51bVZhbGlkYXRp
b25GdW5jIF92YWxpZGF0aW9uRnVuYzsKLX0KLQotQHN5bnRoZXNpemUgdmFsaWRhdGlvbkZ1bmMg
PSBfdmFsaWRhdGlvbkZ1bmM7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0
dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOk5VTEwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOk5VTEwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOk5VTEwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjBdIGF1dG9yZWxl
YXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0
aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9j
XSBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpmdW5jCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczpOVUxMCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czpOVUxMCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjooR1BCRW51bVZhbGlk
YXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
YXdWYWx1ZTooaW50MzJfdClyYXdWYWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yS2V5OihpbnQzMl90KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNv
IHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZh
bHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAg
cmV0dXJuIFtbKEdQQkludDMyRW51bURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZh
bGlkYXRpb25GdW5jdGlvbjpmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6JnJhd1ZhbHVlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsK
LX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihH
UEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXJhd1ZhbHVlcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQzMl90IFtd
KWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoo
TlNVSW50ZWdlciljb3VudCB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBr
bm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNv
dW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQklu
dDMyRW51bURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlv
bjpmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6cmF3VmFsdWVzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6
a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDMyRW51bURpY3Rpb25h
cnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtu
b3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291
bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50
MzJFbnVtRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9u
YXJ5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZh
bGlkYXRpb25GdW5jdGlvbjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVt
cyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpm
dW5jIGNhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOk5VTEwg
cmF3VmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5j
IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmMgcmF3VmFs
dWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10p
cmF3VmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNv
bnN0IGludDMyX3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYg
KHNlbGYpIHsKLSAgICBfZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdF07Ci0gICAgX3ZhbGlkYXRpb25GdW5jID0gKGZ1bmMgIT0gTlVMTCA/IGZ1bmMgOiBEaWN0
RGVmYXVsdF9Jc1ZhbGlkVmFsdWUpOwotICAgIGlmIChjb3VudCAmJiByYXdWYWx1ZXMgJiYga2V5
cykgewotICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAg
ICAgICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAocmF3VmFsdWVzW2ldKSBmb3JLZXk6QChrZXlz
W2ldKV07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJJbnQzMkVudW1EaWN0aW9uYXJ5ICopZGlj
dGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpkaWN0
aW9uYXJ5LnZhbGlkYXRpb25GdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh
d1ZhbHVlczpOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czpO
VUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDowXTsKLSAgaWYg
KHNlbGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVu
dHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9
Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0aW9u
RnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21h
IHVudXNlZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0
aW9uOmZ1bmMgcmF3VmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tICh2
b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVA
OiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9y
OiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAgW19kaWN0
aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tHUEJJbnQzMkVudW1E
aWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwot
fQotCi0tIChCT09MKWlzRXF1YWw6KEdQQkludDMyRW51bURpY3Rpb25hcnkgKilvdGhlciB7Ci0g
IGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhl
ciBpc0tpbmRPZkNsYXNzOltHUEJJbnQzMkVudW1EaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICBy
ZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBpc0VxdWFsOm90aGVyLT5fZGlj
dGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIHJldHVybiBfZGljdGlvbmFy
eS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIHJldHVybiBbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBz
ZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4g
X2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFJhd1ZhbHVl
c1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKGludDMyX3Qga2V5LCBpbnQzMl90IHZhbHVlLCBC
T09MICpzdG9wKSlibG9jayB7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0
c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAg
ICBibG9jayhbYUtleSBpbnRWYWx1ZV0sIFthVmFsdWUgaW50VmFsdWVdLCBzdG9wKTsKLSAgfV07
Ci19Ci0KLS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVsZERl
c2NyaXB0b3IgKilmaWVsZCB7Ci0gIE5TVUludGVnZXIgY291bnQgPSBfZGljdGlvbmFyeS5jb3Vu
dDsKLSAgaWYgKGNvdW50ID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIEdQQkRhdGFU
eXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0
YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgX19ibG9jayBzaXpl
X3QgcmVzdWx0ID0gMDsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNp
bmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJh
Z21hIHVudXNlZChzdG9wKQotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RJbnQzMkZp
ZWxkU2l6ZShbYUtleSBpbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUp
OwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RFbnVtRmllbGRTaXplKFthVmFsdWUgaW50VmFs
dWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9
IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsK
LSAgfV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQ
QkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRh
Z1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29k
ZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQg
ewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVs
ZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0g
IHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxk
KSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJh
dGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09M
ICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFn
LgotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUg
dGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGlj
dEludDMyRmllbGRTaXplKFthS2V5IGludFZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlE
YXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEVudW1GaWVsZFNpemUoW2FWYWx1
ZSBpbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICBb
b3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAvLyBX
cml0ZSB0aGUgZmllbGRzLgotICAgIFdyaXRlRGljdEludDMyRmllbGQob3V0cHV0U3RyZWFtLCBb
YUtleSBpbnRWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIFdy
aXRlRGljdEVudW1GaWVsZChvdXRwdXRTdHJlYW0sIFthVmFsdWUgaW50VmFsdWVdLCBrTWFwVmFs
dWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gIH1dOwotfQotCi0tIChOU0RhdGEgKilz
ZXJpYWxpemVkRGF0YUZvclVua25vd25WYWx1ZTooaW50MzJfdCl2YWx1ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5RGF0YVR5cGU6KEdQQkRhdGFUeXBlKWtleURh
dGFUeXBlIHsKLSAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEludDMyRmllbGRTaXplKGtl
eS0+dmFsdWVJbnQzMiwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gIG1zZ1Np
emUgKz0gQ29tcHV0ZURpY3RFbnVtRmllbGRTaXplKHZhbHVlLCBrTWFwVmFsdWVGaWVsZE51bWJl
ciwgR1BCRGF0YVR5cGVFbnVtKTsKLSAgTlNNdXRhYmxlRGF0YSAqZGF0YSA9IFtOU011dGFibGVE
YXRhIGRhdGFXaXRoTGVuZ3RoOm1zZ1NpemVdOwotICBHUEJDb2RlZE91dHB1dFN0cmVhbSAqb3V0
cHV0U3RyZWFtID0gW1tHUEJDb2RlZE91dHB1dFN0cmVhbSBhbGxvY10gaW5pdFdpdGhEYXRhOmRh
dGFdOwotICBXcml0ZURpY3RJbnQzMkZpZWxkKG91dHB1dFN0cmVhbSwga2V5LT52YWx1ZUludDMy
LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgV3JpdGVEaWN0RW51bUZpZWxk
KG91dHB1dFN0cmVhbSwgdmFsdWUsIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCBHUEJEYXRhVHlwZUVu
dW0pOwotICBbb3V0cHV0U3RyZWFtIHJlbGVhc2VdOwotICByZXR1cm4gZGF0YTsKLX0KLS0gKHZv
aWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JH
UEJHZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFy
eSBzZXRPYmplY3Q6QCh2YWx1ZS0+dmFsdWVFbnVtKSBmb3JLZXk6QChrZXktPnZhbHVlSW50MzIp
XTsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBrZXlP
YmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRSYXdWYWx1
ZXNVc2luZ0Jsb2NrOl4oaW50MzJfdCBrZXksIGludDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApIHsK
LSAgICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgICBibG9jayhbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiVkIiwga2V5XSwgQCh2YWx1ZSkpOwotICB9XTsKLX0KLQotLSAoQk9PTCl2
YWx1ZUZvcktleTooaW50MzJfdClrZXkgdmFsdWU6KGludDMyX3QgKil2YWx1ZSB7Ci0gIE5TTnVt
YmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAKGtleSldOwotICBpZiAo
d3JhcHBlZCAmJiB2YWx1ZSkgewotICAgIGludDMyX3QgcmVzdWx0ID0gW3dyYXBwZWQgaW50VmFs
dWVdOwotICAgIGlmICghX3ZhbGlkYXRpb25GdW5jKHJlc3VsdCkpIHsKLSAgICAgIHJlc3VsdCA9
IGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWU7Ci0gICAgfQotICAgICp2YWx1ZSA9IHJl
c3VsdDsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci19Ci0KLS0gKEJPT0wpdmFs
dWVGb3JLZXk6KGludDMyX3Qpa2V5IHJhd1ZhbHVlOihpbnQzMl90ICopcmF3VmFsdWUgewotICBO
U051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAg
aWYgKHdyYXBwZWQgJiYgcmF3VmFsdWUpIHsKLSAgICAqcmF3VmFsdWUgPSBbd3JhcHBlZCBpbnRW
YWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5VTEwpOwotfQotCi0tICh2b2lkKWVu
dW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShpbnQzMl90IGtl
eSwgaW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBHUEJFbnVtVmFsaWRhdGlv
bkZ1bmMgZnVuYyA9IF92YWxpZGF0aW9uRnVuYzsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtl
eXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0
b3ApIHsKLSAgICAgIGludDMyX3QgdW53cmFwcGVkID0gW2FWYWx1ZSBpbnRWYWx1ZV07Ci0gICAg
ICBpZiAoIWZ1bmModW53cmFwcGVkKSkgewotICAgICAgICB1bndyYXBwZWQgPSBrR1BCVW5yZWNv
Z25pemVkRW51bWVyYXRvclZhbHVlOwotICAgICAgfQotICAgICAgYmxvY2soW2FLZXkgaW50VmFs
dWVdLCB1bndyYXBwZWQsIHN0b3ApOwotICB9XTsKLX0KLQotLSAodm9pZClhZGRSYXdFbnRyaWVz
RnJvbURpY3Rpb25hcnk6KEdQQkludDMyRW51bURpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkg
ewotICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNG
cm9tRGljdGlvbmFyeTpvdGhlckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1
dG9jcmVhdG9yKSB7Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0
b2NyZWF0b3IsIHNlbGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldFJhd1ZhbHVlOihp
bnQzMl90KXZhbHVlIGZvcktleTooaW50MzJfdClrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2Jq
ZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAg
R1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAg
fQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihpbnQzMl90KWFLZXkgewotICBbX2Rp
Y3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAoYUtleSldOwotfQotCi0tICh2b2lkKXJlbW92
ZUFsbCB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVBbGxPYmplY3RzXTsKLX0KLQotLSAodm9pZClz
ZXRWYWx1ZTooaW50MzJfdCl2YWx1ZSBmb3JLZXk6KGludDMyX3Qpa2V5IHsKLSAgaWYgKCFfdmFs
aWRhdGlvbkZ1bmModmFsdWUpKSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFy
Z3VtZW50RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiR1BCSW50MzJFbnVtRGlj
dGlvbmFyeTogQXR0ZW1wdCB0byBzZXQgYW4gdW5rbm93biBlbnVtIHZhbHVlICglZCkiLAotICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZV07Ci0gIH0KLQotICBbX2RpY3Rpb25hcnkgc2V0T2Jq
ZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAg
R1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAg
fQotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEludDMyIC0+IE9iamVjdAotCi1AaW1wbGVt
ZW50YXRpb24gR1BCSW50MzJPYmplY3REaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBOU011dGFi
bGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhPYmplY3RzOk5VTEwgZm9yS2V5
czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rp
b25hcnlXaXRoT2JqZWN0OihpZClvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcktleTooaW50MzJfdClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGls
ZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhPYmplY3RzOmZvcktl
eXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1so
R1BCSW50MzJPYmplY3REaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhPYmplY3RzOiZv
YmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0r
IChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhPYmplY3RzOihjb25zdCBpZCBbXSlvYmplY3Rz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQzMl90IFtd
KWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIp
Y291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBj
bGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhPYmplY3RzOmZvcktleXM6Y291bnQ6Ci0gIC8v
IG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50MzJPYmplY3RE
aWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhPYmplY3RzOm9iamVjdHMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlz
OmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDMyT2JqZWN0RGljdGlvbmFyeSAqKWRp
Y3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hh
dCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBn
ZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDMyT2JqZWN0RGljdGlvbmFy
eSopW3NlbGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFz
ZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRl
Z2VyKW51bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6
bnVtSXRlbXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICBy
ZXR1cm4gW3NlbGYgaW5pdFdpdGhPYmplY3RzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhPYmplY3RzOihjb25zdCBpZCBbXSlvYmplY3Rz
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQzMl90IFtdKWtleXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgb2JqZWN0
cyAmJiBrZXlzKSB7Ci0gICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIGlmICghb2JqZWN0c1tpXSkgewotICAgICAgICAgIFtOU0V4Y2VwdGlvbiBy
YWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICAgIGZv
cm1hdDpAIkF0dGVtcHRpbmcgdG8gYWRkIG5pbCBvYmplY3QgdG8gYSBEaWN0aW9uYXJ5Il07Ci0g
ICAgICAgIH0KLSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpvYmplY3RzW2ldIGZvcktl
eTpAKGtleXNbaV0pXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQkludDMyT2JqZWN0RGljdGlv
bmFyeSAqKWRpY3Rpb25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhPYmplY3RzOk5VTEwg
Zm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5
KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25h
cnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3By
YWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aE9iamVjdHM6TlVM
TCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNz
ZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUg
Y2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3Nl
bGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07Ci0gIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNab25l
ICopem9uZSB7Ci0gIHJldHVybiBbW0dQQkludDMyT2JqZWN0RGljdGlvbmFyeSBhbGxvY1dpdGha
b25lOnpvbmVdIGluaXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFs
OihHUEJJbnQzMk9iamVjdERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVy
KSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltH
UEJJbnQzMk9iamVjdERpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQot
ICByZXR1cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsKLX0KLQot
LSAoTlNVSW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0t
IChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0aW9uYXJ5
XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3Vu
dDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6Ci0gICAg
KHZvaWQgKF4pKGludDMyX3Qga2V5LCBpZCBvYmplY3QsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAg
W19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVy
ICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWQgYU9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAgIGJsb2NrKFthS2V5IGludFZhbHVlXSwgYU9i
amVjdCwgc3RvcCk7Ci0gIH1dOwotfQotCi0tIChCT09MKWlzSW5pdGlhbGl6ZWQgewotICBmb3Ig
KEdQQk1lc3NhZ2UgKm1zZyBpbiBbX2RpY3Rpb25hcnkgb2JqZWN0RW51bWVyYXRvcl0pIHsKLSAg
ICBpZiAoIW1zZy5pbml0aWFsaXplZCkgewotICAgICAgcmV0dXJuIE5POwotICAgIH0KLSAgfQot
ICByZXR1cm4gWUVTOwotfQotCi0tIChpbnN0YW5jZXR5cGUpZGVlcENvcHlXaXRoWm9uZTooTlNa
b25lICopem9uZSB7Ci0gIEdQQkludDMyT2JqZWN0RGljdGlvbmFyeSAqbmV3RGljdCA9Ci0gICAg
ICBbW0dQQkludDMyT2JqZWN0RGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gIFtfZGljdGlvbmFy
eSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihpZCBhS2V5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCTWVzc2FnZSAqbXNn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9P
TCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgR1BCTWVzc2FnZSAqY29w
aWVkTXNnID0gW21zZyBjb3B5V2l0aFpvbmU6em9uZV07Ci0gICAgW25ld0RpY3QtPl9kaWN0aW9u
YXJ5IHNldE9iamVjdDpjb3BpZWRNc2cgZm9yS2V5OmFLZXldOwotICAgIFtjb3BpZWRNc2cgcmVs
ZWFzZV07Ci0gIH1dOwotICByZXR1cm4gbmV3RGljdDsKLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVT
ZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgTlNV
SW50ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQgPT0gMCkgewot
ICAgIHJldHVybiAwOwotICB9Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdl
dEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxk
Lm1hcEtleURhdGFUeXBlOwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwotICBbX2RpY3Rp
b25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCBh
T2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgc2l6ZV90IG1z
Z1NpemUgPSBDb21wdXRlRGljdEludDMyRmllbGRTaXplKFthS2V5IGludFZhbHVlXSwga01hcEtl
eUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdE9i
amVjdEZpZWxkU2l6ZShhT2JqZWN0LCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlw
ZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1z
Z1NpemUpICsgbXNnU2l6ZTsKLSAgfV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdp
cmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdl
KTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
LSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICop
b3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGRE
ZXNjcmlwdG9yICopZmllbGQgewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0
RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQu
bWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQ
QkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtf
ZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAq
YUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlkIGFPYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBX
cml0ZSB0aGUgdGFnLgotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0g
ICAgLy8gV3JpdGUgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUg
PSBDb21wdXRlRGljdEludDMyRmllbGRTaXplKFthS2V5IGludFZhbHVlXSwga01hcEtleUZpZWxk
TnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdE9iamVjdEZp
ZWxkU2l6ZShhT2JqZWN0LCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0g
ICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07Ci0gICAg
Ly8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RJbnQzMkZpZWxkKG91dHB1dFN0cmVh
bSwgW2FLZXkgaW50VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAg
ICBXcml0ZURpY3RPYmplY3RGaWVsZChvdXRwdXRTdHJlYW0sIGFPYmplY3QsIGtNYXBWYWx1ZUZp
ZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2Vu
ZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFs
dWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6
dmFsdWUtPnZhbHVlU3RyaW5nIGZvcktleTpAKGtleS0+dmFsdWVJbnQzMildOwotfQotCi0tICh2
b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVP
YmopKWJsb2NrIHsKLSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4o
aW50MzJfdCBrZXksIGlkIG9iamVjdCwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVz
ZWQoc3RvcCkKLSAgICAgIGJsb2NrKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCBr
ZXldLCBvYmplY3QpOwotICB9XTsKLX0KLQotLSAoaWQpb2JqZWN0Rm9yS2V5OihpbnQzMl90KWtl
eSB7Ci0gIGlkIHJlc3VsdCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQ
QkludDMyT2JqZWN0RGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRp
Y3Rpb25hcnkpIHsKLSAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om90
aGVyRGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAg
ICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7
Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5Oihp
bnQzMl90KWtleSB7Ci0gIGlmICghb2JqZWN0KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5T
SW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiQXR0ZW1w
dGluZyB0byBhZGQgbmlsIG9iamVjdCB0byBhIERpY3Rpb25hcnkiXTsKLSAgfQotICBbX2RpY3Rp
b25hcnkgc2V0T2JqZWN0Om9iamVjdCBmb3JLZXk6QChrZXkpXTsKLSAgaWYgKF9hdXRvY3JlYXRv
cikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwg
c2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVPYmplY3RGb3JLZXk6KGludDMyX3QpYUtl
eSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6QChhS2V5KV07Ci19Ci0KLS0g
KHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNdOwotfQot
Ci1AZW5kCi0KLS8vJVBERE0tRVhQQU5EIERJQ1RJT05BUllfSU1QTF9GT1JfUE9EX0tFWShVSW50
NjQsIHVpbnQ2NF90KQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90
IGVkaXQgaXQgZGlyZWN0bHkuCi0KLSNwcmFnbWEgbWFyayAtIFVJbnQ2NCAtPiBVSW50MzIKLQot
QGltcGxlbWVudGF0aW9uIEdQQlVJbnQ2NFVJbnQzMkRpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0g
IE5TTXV0YWJsZURpY3Rpb25hcnkgKl9kaWN0aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeSB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxM
IGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOih1aW50MzJfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JLZXk6KHVpbnQ2NF90KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNv
IHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZh
bHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAg
cmV0dXJuIFtbKEdQQlVJbnQ2NFVJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0
aFZhbHVlczomdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2Vd
OwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQz
Ml90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25z
dCB1aW50NjRfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6
KE5TVUludGVnZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIg
a25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpj
b3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJV
SW50NjRVSW50MzJEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcktleXM6a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsg
KGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2NFVJbnQzMkRp
Y3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBp
bGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToK
LSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50NjRV
SW50MzJEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25h
cnldIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2Fw
YWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVM
TCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCB1
aW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3Qg
dWludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRl
Z2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBf
ZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgaWYg
KGNvdW50ICYmIHZhbHVlcyAmJiBrZXlzKSB7Ci0gICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1
ZXNbaV0pIGZvcktleTpAKGtleXNbaV0pXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2
NFVJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRo
VmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAoc2VsZikgewotICAgIGlm
IChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9u
YXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0
ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0
aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAodm9pZClkZWFsbG9j
IHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAgQCIlQDogQXV0b2NyZWF0
b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRvcjogJUAiLAotICAg
ICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIFtfZGljdGlvbmFyeSByZWxl
YXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpY29weVdpdGha
b25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCVUludDY0VUludDMyRGljdGlvbmFy
eSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQotLSAo
Qk9PTClpc0VxdWFsOihHUEJVSW50NjRVSW50MzJEaWN0aW9uYXJ5ICopb3RoZXIgewotICBpZiAo
c2VsZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIgaXNL
aW5kT2ZDbGFzczpbR1BCVUludDY0VUludDMyRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0
dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpvdGhlci0+X2RpY3Rp
b25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gX2RpY3Rpb25hcnku
Y291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICByZXR1cm4gW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxmIGNsYXNzXSwgc2Vs
ZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIF9k
aWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2lu
Z0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50NjRfdCBrZXksIHVpbnQzMl90IHZhbHVlLCBCT09M
ICpzdG9wKSlibG9jayB7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1Vz
aW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgICBi
bG9jayhbYUtleSB1bnNpZ25lZExvbmdMb25nVmFsdWVdLCBbYVZhbHVlIHVuc2lnbmVkSW50VmFs
dWVdLCBzdG9wKTsKLSAgfV07Ci19Ci0KLS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVB
c0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIE5TVUludGVnZXIgY291bnQg
PSBfZGljdGlvbmFyeS5jb3VudDsKLSAgaWYgKGNvdW50ID09IDApIHsKLSAgICByZXR1cm4gMDsK
LSAgfQotCi0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBl
KGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlw
ZTsKLSAgX19ibG9jayBzaXplX3QgcmVzdWx0ID0gMDsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0
ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wg
KnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIHNpemVfdCBtc2dTaXplID0g
Q29tcHV0ZURpY3RVSW50NjRGaWVsZFNpemUoW2FLZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwg
a01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRl
RGljdFVJbnQzMkZpZWxkU2l6ZShbYVZhbHVlIHVuc2lnbmVkSW50VmFsdWVdLCBrTWFwVmFsdWVG
aWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdW
YXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgfV07Ci0gIHNpemVf
dCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVtYmVyKGZp
ZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBjb3VudDsK
LSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06
KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJEYXRhVHlw
ZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFU
eXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQzMl90IHRhZyA9
IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1h
dExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0
c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAg
I3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgIFtvdXRwdXRT
dHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNpemUgb2YgdGhl
IG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFVJbnQ2NEZpZWxkU2l6
ZShbYUtleSB1bnNpZ25lZExvbmdMb25nVmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURh
dGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0VUludDMyRmllbGRTaXplKFthVmFs
dWUgdW5zaWduZWRJbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBl
KTsKLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXplXTsK
LSAgICAvLyBXcml0ZSB0aGUgZmllbGRzLgotICAgIFdyaXRlRGljdFVJbnQ2NEZpZWxkKG91dHB1
dFN0cmVhbSwgW2FLZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVy
LCBrZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0VUludDMyRmllbGQob3V0cHV0U3RyZWFtLCBb
YVZhbHVlIHVuc2lnbmVkSW50VmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRh
VHlwZSk7Ci0gIH1dOwotfQotCi0tICh2b2lkKXNldEdQQkdlbmVyaWNWYWx1ZTooR1BCR2VuZXJp
Y1ZhbHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2VuZXJpY1ZhbHVlS2V5OihHUEJHZW5lcmljVmFs
dWUgKilrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUtPnZhbHVlVUludDMy
KSBmb3JLZXk6QChrZXktPnZhbHVlVUludDY0KV07Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9y
VGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBb
c2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazpeKHVpbnQ2NF90IGtleSwgdWlu
dDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0g
ICAgICBibG9jayhbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVsbHUiLCBrZXldLCBbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiV1IiwgdmFsdWVdKTsKLSAgfV07Ci19Ci0KLS0gKEJP
T0wpdmFsdWVGb3JLZXk6KHVpbnQ2NF90KWtleSB2YWx1ZToodWludDMyX3QgKil2YWx1ZSB7Ci0g
IE5TTnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAKGtleSldOwot
ICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIHVuc2lnbmVk
SW50VmFsdWVdOwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQotLSAodm9p
ZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQlVJbnQ2NFVJbnQzMkRpY3Rpb25hcnkgKilv
dGhlckRpY3Rpb25hcnkgewotICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9u
YXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvdGhlckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5
XTsKLSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25h
cnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lk
KXNldFZhbHVlOih1aW50MzJfdCl2YWx1ZSBmb3JLZXk6KHVpbnQ2NF90KWtleSB7Ci0gIFtfZGlj
dGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0gIGlmIChfYXV0b2Ny
ZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0
b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KHVpbnQ2NF90
KWFLZXkgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAoYUtleSldOwotfQot
Ci0tICh2b2lkKXJlbW92ZUFsbCB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVBbGxPYmplY3RzXTsK
LX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50NjQgLT4gSW50MzIKLQotQGltcGxlbWVu
dGF0aW9uIEdQQlVJbnQ2NEludDMyRGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5
IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpO
VUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoVmFsdWU6KGludDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yS2V5Oih1aW50NjRfdClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGls
ZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5
czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhH
UEJVSW50NjRJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczomdmFs
dWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5z
dGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50NjRfdCBbXSlr
ZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291
bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFz
cyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24g
dG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50NjRJbnQzMkRpY3Rp
b25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOmtleXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0
aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2NEludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25h
cnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFz
cyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhl
IHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQ2NEludDMyRGljdGlvbmFyeSopW3Nl
bGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07Ci19
Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51
bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVtSXRl
bXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICByZXR1cm4g
W3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10pa2V5cwotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9
IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBfZGljdGlvbmFyeSA9IFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgaWYgKGNvdW50ICYmIHZhbHVlcyAmJiBr
ZXlzKSB7Ci0gICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0g
ICAgICAgIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZXNbaV0pIGZvcktleTpAKGtleXNb
aV0pXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2NEludDMyRGljdGlvbmFyeSAqKWRp
Y3Rpb25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5V
TEwgY291bnQ6MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAg
IFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rp
b25hcnldOwotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21hIHVudXNl
ZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpO
VUxMIGNvdW50OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9j
cmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVm
b3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwg
X2F1dG9jcmVhdG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxv
Y107Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewot
ICByZXR1cm4gW1tHUEJVSW50NjRJbnQzMkRpY3Rpb25hcnkgYWxsb2NXaXRoWm9uZTp6b25lXSBp
bml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BCVUludDY0
SW50MzJEaWN0aW9uYXJ5ICopb3RoZXIgewotICBpZiAoc2VsZiA9PSBvdGhlcikgewotICAgIHJl
dHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbR1BCVUludDY0SW50
MzJEaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtf
ZGljdGlvbmFyeSBpc0VxdWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVn
ZXIpaGFzaCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcg
KilkZXNjcmlwdGlvbiB7Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwl
QCAlcD4geyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0g
KE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0g
KHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKHVp
bnQ2NF90IGtleSwgaW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rp
b25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051
bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soW2FLZXkgdW5zaWduZWRMb25nTG9u
Z1ZhbHVlXSwgW2FWYWx1ZSBpbnRWYWx1ZV0sIHN0b3ApOwotICB9XTsKLX0KLQotLSAoc2l6ZV90
KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxk
IHsKLSAgTlNVSW50ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQg
PT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlw
ZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlw
ZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwot
ICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1i
ZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3Ap
Ci0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFVJbnQ2NEZpZWxkU2l6ZShbYUtleSB1
bnNpZ25lZExvbmdMb25nVmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsK
LSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0SW50MzJGaWVsZFNpemUoW2FWYWx1ZSBpbnRWYWx1
ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICByZXN1bHQgKz0g
R1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkgKyBtc2dTaXplOwot
ICB9XTsKLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BC
RmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFn
U2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2Rl
ZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7
Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxk
KTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAg
dWludDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQp
LCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0
ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wg
KnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8vIFdyaXRlIHRoZSB0YWcu
Ci0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAvLyBXcml0ZSB0
aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0
VUludDY0RmllbGRTaXplKFthS2V5IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVs
ZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RJbnQzMkZp
ZWxkU2l6ZShbYVZhbHVlIGludFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0
YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1Np
emVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0VUludDY0RmllbGQo
b3V0cHV0U3RyZWFtLCBbYUtleSB1bnNpZ25lZExvbmdMb25nVmFsdWVdLCBrTWFwS2V5RmllbGRO
dW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RJbnQzMkZpZWxkKG91dHB1dFN0cmVh
bSwgW2FWYWx1ZSBpbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBl
KTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFs
dWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAq
KWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZS0+dmFsdWVJbnQzMikgZm9y
S2V5OkAoa2V5LT52YWx1ZVVJbnQ2NCldOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUZvclRleHRG
b3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsKLSAgW3NlbGYg
ZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Xih1aW50NjRfdCBrZXksIGludDMyX3Qg
dmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgICBi
bG9jayhbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVsbHUiLCBrZXldLCBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgdmFsdWVdKTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFs
dWVGb3JLZXk6KHVpbnQ2NF90KWtleSB2YWx1ZTooaW50MzJfdCAqKXZhbHVlIHsKLSAgTlNOdW1i
ZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAoa2V5KV07Ci0gIGlmICh3
cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgKnZhbHVlID0gW3dyYXBwZWQgaW50VmFsdWVdOwotICB9
Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJv
bURpY3Rpb25hcnk6KEdQQlVJbnQ2NEludDMyRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeSB7
Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsKLSAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zy
b21EaWN0aW9uYXJ5Om90aGVyRGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIGlmIChfYXV0
b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRv
Y3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGludDMy
X3QpdmFsdWUgZm9yS2V5Oih1aW50NjRfdClrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0
OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BC
QXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQot
fQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5Oih1aW50NjRfdClhS2V5IHsKLSAgW19kaWN0
aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTpAKGFLZXkpXTsKLX0KLQotLSAodm9pZClyZW1vdmVB
bGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxsT2JqZWN0c107Ci19Ci0KLUBlbmQKLQotI3By
YWdtYSBtYXJrIC0gVUludDY0IC0+IFVJbnQ2NAotCi1AaW1wbGVtZW50YXRpb24gR1BCVUludDY0
VUludDY0RGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2Rp
Y3Rpb25hcnk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtb
W3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdIGF1
dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVp
bnQ2NF90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleToodWludDY0
X3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQg
Y2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8v
IG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDY0VUludDY0
RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2YWx1ZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlz
OiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlk
aWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgdWludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQ2NF90IFtdKWtleXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIC8v
IENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBp
bnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhl
IHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQ2NFVJbnQ2NERpY3Rpb25hcnkqKVtz
ZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlX
aXRoRGljdGlvbmFyeTooR1BCVUludDY0VUludDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewot
ICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBh
cmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUg
Y29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQ2NFVJbnQ2NERpY3Rpb25hcnkqKVtzZWxmIGFs
bG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0r
IChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVt
cyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBh
dXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxm
IGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtdKXZhbHVlcwotICAgICAg
ICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50NjRfdCBbXSlrZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMp
IHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSld
OwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDY0VUludDY0RGljdGlvbmFyeSAqKWRpY3Rp
b25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwg
Y291bnQ6MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtf
ZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25h
cnldOwotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21hIHVudXNlZChu
dW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxM
IGNvdW50OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVh
dG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3Jl
IHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1
dG9jcmVhdG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICBy
ZXR1cm4gW1tHUEJVSW50NjRVSW50NjREaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5p
dFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQlVJbnQ2NFVJ
bnQ2NERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0
dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJVSW50NjRVSW50
NjREaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtf
ZGljdGlvbmFyeSBpc0VxdWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVn
ZXIpaGFzaCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcg
KilkZXNjcmlwdGlvbiB7Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwl
QCAlcD4geyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0g
KE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0g
KHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKHVp
bnQ2NF90IGtleSwgdWludDY0X3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgW19kaWN0
aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNO
dW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAgIGJsb2NrKFthS2V5IHVuc2lnbmVkTG9uZ0xv
bmdWYWx1ZV0sIFthVmFsdWUgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwgc3RvcCk7Ci0gIH1dOwot
fQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNj
cmlwdG9yICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7
Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlw
ZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFU
eXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90
IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5n
QmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdt
YSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0VUludDY0Rmll
bGRTaXplKFthS2V5IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwg
a2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RVSW50NjRGaWVsZFNpemUo
W2FWYWx1ZSB1bnNpZ25lZExvbmdMb25nVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFs
dWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJ
bnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgfV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BC
Q29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5
cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0
U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDoo
R1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBl
ID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBl
ID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRN
YWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRl
ZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihO
U051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQo
c3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQz
Mk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAg
c2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFVJbnQ2NEZpZWxkU2l6ZShbYUtleSB1bnNpZ25l
ZExvbmdMb25nVmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBt
c2dTaXplICs9IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKFthVmFsdWUgdW5zaWduZWRMb25n
TG9uZ1ZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtv
dXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdy
aXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0VUludDY0RmllbGQob3V0cHV0U3RyZWFtLCBb
YUtleSB1bnNpZ25lZExvbmdMb25nVmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFU
eXBlKTsKLSAgICBXcml0ZURpY3RVSW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIFthVmFsdWUgdW5z
aWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUp
OwotICB9XTsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1
ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICop
a2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZVVJbnQ2NCkgZm9y
S2V5OkAoa2V5LT52YWx1ZVVJbnQ2NCldOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUZvclRleHRG
b3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsKLSAgW3NlbGYg
ZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Xih1aW50NjRfdCBrZXksIHVpbnQ2NF90
IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgICAg
YmxvY2soW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbGx1Iiwga2V5XSwgW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlbGx1IiwgdmFsdWVdKTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wp
dmFsdWVGb3JLZXk6KHVpbnQ2NF90KWtleSB2YWx1ZToodWludDY0X3QgKil2YWx1ZSB7Ci0gIE5T
TnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAKGtleSldOwotICBp
ZiAod3JhcHBlZCAmJiB2YWx1ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIHVuc2lnbmVkTG9u
Z0xvbmdWYWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5VTEwpOwotfQotCi0tICh2
b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCVUludDY0VUludDY0RGljdGlvbmFyeSAq
KW90aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsKLSAgICBbX2RpY3Rp
b25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGljdGlvbmFyeS0+X2RpY3Rpb25h
cnldOwotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlv
bmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZv
aWQpc2V0VmFsdWU6KHVpbnQ2NF90KXZhbHVlIGZvcktleToodWludDY0X3Qpa2V5IHsKLSAgW19k
aWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBmb3JLZXk6QChrZXkpXTsKLSAgaWYgKF9hdXRv
Y3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3Jl
YXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleToodWludDY0
X3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6QChhS2V5KV07Ci19
Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNd
OwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJbnQ2NCAtPiBJbnQ2NAotCi1AaW1wbGVt
ZW50YXRpb24gR1BCVUludDY0SW50NjREaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBOU011dGFi
bGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlz
Ok5VTEwgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlv
bmFyeVdpdGhWYWx1ZTooaW50NjRfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXk6KHVpbnQ2NF90KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21w
aWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JL
ZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtb
KEdQQlVJbnQ2NEludDY0RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2
YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGludDY0X3QgW10pdmFsdWVz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IHVpbnQ2NF90IFtd
KWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlcilj
b3VudCB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBv
biB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQ2NEludDY0RGlj
dGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOnZhbHVlcwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY291bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCVUludDY0SW50NjREaWN0aW9uYXJ5ICopZGljdGlv
bmFyeSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aERpY3Rpb25hcnk6Ci0gIC8vIG9uIHRvIGdldCB0
aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDY0SW50NjREaWN0aW9uYXJ5Kilb
c2VsZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsK
LX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIp
bnVtSXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1J
dGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVy
biBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBpbnQ2NF90IFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50NjRfdCBbXSlrZXlzCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011
dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYm
IGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5
c1tpXSldOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDY0SW50NjREaWN0aW9uYXJ5ICop
ZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6
TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAg
ICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGlj
dGlvbmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gICNwcmFnbWEgdW51
c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlz
Ok5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0
b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBi
ZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3Nd
LCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07Ci0gIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7
Ci0gIHJldHVybiBbW0dQQlVJbnQ2NEludDY0RGljdGlvbmFyeSBhbGxvY1dpdGhab25lOnpvbmVd
IGluaXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJVSW50
NjRJbnQ2NERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAg
cmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJVSW50NjRJ
bnQ2NERpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4g
W19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50
ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tIChOU1N0cmlu
ZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
PCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0aW9uYXJ5XTsKLX0KLQot
LSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQot
LSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXiko
dWludDY0X3Qga2V5LCBpbnQ2NF90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIFtfZGlj
dGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtl
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5T
TnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgICBibG9jayhbYUtleSB1bnNpZ25lZExvbmdM
b25nVmFsdWVdLCBbYVZhbHVlIGxvbmdMb25nVmFsdWVdLCBzdG9wKTsKLSAgfV07Ci19Ci0KLS0g
KHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3Ig
KilmaWVsZCB7Ci0gIE5TVUludGVnZXIgY291bnQgPSBfZGljdGlvbmFyeS5jb3VudDsKLSAgaWYg
KGNvdW50ID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIEdQQkRhdGFUeXBlIHZhbHVl
RGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5
RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgX19ibG9jayBzaXplX3QgcmVzdWx0
ID0gMDsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpe
KE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNl
ZChzdG9wKQotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RVSW50NjRGaWVsZFNpemUo
W2FLZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRh
VHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEludDY0RmllbGRTaXplKFthVmFsdWUg
bG9uZ0xvbmdWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAg
ICByZXN1bHQgKz0gR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkg
KyBtc2dTaXplOwotICB9XTsKLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1h
dFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICBy
ZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lk
KXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRT
dHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0
b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERh
dGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlE
YXRhVHlwZTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGRO
dW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgW19kaWN0aW9u
YXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1i
ZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8vIFdy
aXRlIHRoZSB0YWcuCi0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAg
ICAvLyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6ZSA9
IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKFthS2V5IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0s
IGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0
ZURpY3RJbnQ2NEZpZWxkU2l6ZShbYVZhbHVlIGxvbmdMb25nVmFsdWVdLCBrTWFwVmFsdWVGaWVs
ZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9U
YWc6KGludDMyX3QpbXNnU2l6ZV07Ci0gICAgLy8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0
ZURpY3RVSW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIFthS2V5IHVuc2lnbmVkTG9uZ0xvbmdWYWx1
ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIFdyaXRlRGljdEludDY0
RmllbGQob3V0cHV0U3RyZWFtLCBbYVZhbHVlIGxvbmdMb25nVmFsdWVdLCBrTWFwVmFsdWVGaWVs
ZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gIH1dOwotfQotCi0tICh2b2lkKXNldEdQQkdlbmVy
aWNWYWx1ZTooR1BCR2VuZXJpY1ZhbHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2VuZXJpY1ZhbHVl
S2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAo
dmFsdWUtPnZhbHVlSW50NjQpIGZvcktleTpAKGtleS0+dmFsdWVVSW50NjQpXTsKLX0KLQotLSAo
dm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZhbHVl
T2JqKSlibG9jayB7Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOl4o
dWludDY0X3Qga2V5LCBpbnQ2NF90IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJhZ21h
IHVudXNlZChzdG9wKQotICAgICAgYmxvY2soW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
bGx1Iiwga2V5XSwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbGxkIiwgdmFsdWVdKTsK
LSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KHVpbnQ2NF90KWtleSB2YWx1ZTooaW50
NjRfdCAqKXZhbHVlIHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkgb2JqZWN0
Rm9yS2V5OkAoa2V5KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgKnZhbHVlID0g
W3dyYXBwZWQgbG9uZ0xvbmdWYWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5VTEwp
OwotfQotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCVUludDY0SW50NjRE
aWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewot
ICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5
LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2Ny
ZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0K
LX0KLQotLSAodm9pZClzZXRWYWx1ZTooaW50NjRfdCl2YWx1ZSBmb3JLZXk6KHVpbnQ2NF90KWtl
eSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0g
IGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmll
ZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JL
ZXk6KHVpbnQ2NF90KWFLZXkgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAo
YUtleSldOwotfQotCi0tICh2b2lkKXJlbW92ZUFsbCB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVB
bGxPYmplY3RzXTsKLX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50NjQgLT4gQm9vbAot
Ci1AaW1wbGVtZW50YXRpb24gR1BCVUludDY0Qm9vbERpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0g
IE5TTXV0YWJsZURpY3Rpb25hcnkgKl9kaWN0aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeSB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxM
IGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihCT09MKXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleToodWludDY0X3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhl
IGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVz
OmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1
cm4gW1soR1BCVUludDY0Qm9vbERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVl
czomdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsg
KGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgQk9PTCBbXSl2YWx1ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10p
a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNv
dW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xh
c3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9u
IHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDY0Qm9vbERpY3Rp
b25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlv
bmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJVSW50NjRCb29sRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkg
ewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3
ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5
cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQ2NEJvb2xEaWN0aW9uYXJ5Kilbc2VsZiBh
bGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsKLX0KLQot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRl
bXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1JdGVtc10g
YXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBbc2Vs
ZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBCT09MIFtdKXZhbHVlcwotICAgICAgICAg
ICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50NjRfdCBbXSlrZXlzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMpIHsK
LSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
W19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSldOwot
ICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDY0Qm9vbERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5
IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50
OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2RpY3Rp
b25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRl
bXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3Vu
dDowXTsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwK
LSAgICAgICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxl
YXNlLCBhdXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3Jl
YXRvcik7Ci0gIFtfZGljdGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJu
IFtbR1BCVUludDY0Qm9vbERpY3Rpb25hcnkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aERp
Y3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BCVUludDY0Qm9vbERpY3Rp
b25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsK
LSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJVSW50NjRCb29sRGljdGlvbmFy
eSBjbGFzc11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkg
aXNFcXVhbDpvdGhlci0+X2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewot
ICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRp
b24gewotICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAg
fSIsIFtzZWxmIGNsYXNzXSwgc2VsZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2Vy
KWNvdW50IHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1l
cmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKSh1aW50NjRfdCBrZXks
IEJPT0wgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0
ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wg
KnN0b3ApIHsKLSAgICAgIGJsb2NrKFthS2V5IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIFthVmFs
dWUgYm9vbFZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlh
bGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBOU1VJbnRl
Z2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAg
cmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0Rmll
bGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFw
S2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFy
eSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVy
ICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3Qg
bXNnU2l6ZSA9IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKFthS2V5IHVuc2lnbmVkTG9uZ0xv
bmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUg
Kz0gQ29tcHV0ZURpY3RCb29sRmllbGRTaXplKFthVmFsdWUgYm9vbFZhbHVlXSwga01hcFZhbHVl
RmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3
VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0gIH1dOwotICBzaXpl
X3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVsZE51bWJlcihm
aWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXplICogY291bnQ7
Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFt
OihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQotICAgICAgICAgICAgICAgICAg
ICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5
cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRh
VHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICB1aW50MzJfdCB0YWcg
PSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQldpcmVGb3Jt
YXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVj
dHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAg
ICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0cHV0
U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRo
ZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RVSW50NjRGaWVsZFNp
emUoW2FLZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlE
YXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEJvb2xGaWVsZFNpemUoW2FWYWx1
ZSBib29sVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAg
W291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07Ci0gICAgLy8g
V3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RVSW50NjRGaWVsZChvdXRwdXRTdHJlYW0s
IFthS2V5IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0
YVR5cGUpOwotICAgIFdyaXRlRGljdEJvb2xGaWVsZChvdXRwdXRTdHJlYW0sIFthVmFsdWUgYm9v
bFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsKLX0K
LQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0g
ICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19k
aWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZUJvb2wpIGZvcktleTpAKGtleS0+dmFs
dWVVSW50NjQpXTsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkIChe
KShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNB
bmRWYWx1ZXNVc2luZ0Jsb2NrOl4odWludDY0X3Qga2V5LCBCT09MIHZhbHVlLCBCT09MICpzdG9w
KSB7Ci0gICAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgICAgYmxvY2soW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlbGx1Iiwga2V5XSwgKHZhbHVlID8gQCJ0cnVlIiA6IEAiZmFsc2Ui
KSk7Ci0gIH1dOwotfQotCi0tIChCT09MKXZhbHVlRm9yS2V5Oih1aW50NjRfdClrZXkgdmFsdWU6
KEJPT0wgKil2YWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVj
dEZvcktleTpAKGtleSldOwotICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkgewotICAgICp2YWx1ZSA9
IFt3cmFwcGVkIGJvb2xWYWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5VTEwpOwot
fQotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCVUludDY0Qm9vbERpY3Rp
b25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAg
W19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvdGhlckRpY3Rpb25hcnktPl9k
aWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgICBHUEJBdXRvY3JlYXRl
ZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICAgIH0KLSAgfQotfQot
Ci0tICh2b2lkKXNldFZhbHVlOihCT09MKXZhbHVlIGZvcktleToodWludDY0X3Qpa2V5IHsKLSAg
W19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBmb3JLZXk6QChrZXkpXTsKLSAgaWYgKF9h
dXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRv
Y3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleToodWlu
dDY0X3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6QChhS2V5KV07
Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVj
dHNdOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJbnQ2NCAtPiBGbG9hdAotCi1AaW1w
bGVtZW50YXRpb24gR1BCVUludDY0RmxvYXREaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBOU011
dGFibGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rp
b25hcnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JL
ZXlzOk5VTEwgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhWYWx1ZTooZmxvYXQpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5Oih1aW50NjRfdClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29t
cGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9y
S2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBb
WyhHUEJVSW50NjRGbG9hdERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczom
dmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAo
aW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBmbG9hdCBbXSl2YWx1ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10p
a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNv
dW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xh
c3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9u
IHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDY0RmxvYXREaWN0
aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJVSW50NjRGbG9hdERpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xh
c3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRo
ZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50NjRGbG9hdERpY3Rpb25hcnkqKVtz
ZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwot
fQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlcilu
dW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0
ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJu
IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGZsb2F0IFtdKXZhbHVlcwotICAg
ICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50NjRfdCBbXSlrZXlzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0g
W3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtl
eXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tp
XSldOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDY0RmxvYXREaWN0aW9uYXJ5ICopZGlj
dGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVM
TCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAgICAg
W19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlv
bmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gICNwcmFnbWEgdW51c2Vk
KG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5V
TEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2Ny
ZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZv
cmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBf
YXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07Ci0gIFtzdXBlciBkZWFsbG9j
XTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7Ci0g
IHJldHVybiBbW0dQQlVJbnQ2NEZsb2F0RGljdGlvbmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGlu
aXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJVSW50NjRG
bG9hdERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0
dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJVSW50NjRGbG9h
dERpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4gW19k
aWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdl
ciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tIChOU1N0cmluZyAq
KWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVA
ICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0aW9uYXJ5XTsKLX0KLQotLSAo
TlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAo
dm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikodWlu
dDY0X3Qga2V5LCBmbG9hdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25h
cnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJl
ciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soW2FLZXkgdW5zaWduZWRMb25nTG9uZ1Zh
bHVlXSwgW2FWYWx1ZSBmbG9hdFZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0tIChzaXplX3Qp
Y29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQg
ewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlmIChjb3VudCA9
PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBl
ID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBl
ID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3VsdCA9IDA7Ci0g
IFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJl
ciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkK
LSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKFthS2V5IHVu
c2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwot
ICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RGbG9hdEZpZWxkU2l6ZShbYVZhbHVlIGZsb2F0VmFs
dWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9
IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsK
LSAgfV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQ
QkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRh
Z1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29k
ZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQg
ewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVs
ZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0g
IHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxk
KSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJh
dGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09M
ICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFn
LgotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUg
dGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGlj
dFVJbnQ2NEZpZWxkU2l6ZShbYUtleSB1bnNpZ25lZExvbmdMb25nVmFsdWVdLCBrTWFwS2V5Rmll
bGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0RmxvYXRG
aWVsZFNpemUoW2FWYWx1ZSBmbG9hdFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVl
RGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1z
Z1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0VUludDY0Rmll
bGQob3V0cHV0U3RyZWFtLCBbYUtleSB1bnNpZ25lZExvbmdMb25nVmFsdWVdLCBrTWFwS2V5Rmll
bGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RGbG9hdEZpZWxkKG91dHB1dFN0
cmVhbSwgW2FWYWx1ZSBmbG9hdFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0
YVR5cGUpOwotICB9XTsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVy
aWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1Zh
bHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZUZsb2F0
KSBmb3JLZXk6QChrZXktPnZhbHVlVUludDY0KV07Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9y
VGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBb
c2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazpeKHVpbnQ2NF90IGtleSwgZmxv
YXQgdmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAg
ICBibG9jayhbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVsbHUiLCBrZXldLCBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiUuKmciLCBGTFRfRElHLCB2YWx1ZV0pOwotICB9XTsKLX0K
LQotLSAoQk9PTCl2YWx1ZUZvcktleToodWludDY0X3Qpa2V5IHZhbHVlOihmbG9hdCAqKXZhbHVl
IHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAoa2V5
KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgKnZhbHVlID0gW3dyYXBwZWQgZmxv
YXRWYWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5VTEwpOwotfQotCi0tICh2b2lk
KWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCVUludDY0RmxvYXREaWN0aW9uYXJ5ICopb3Ro
ZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAgIFtfZGljdGlvbmFy
eSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07
Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5
TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClz
ZXRWYWx1ZTooZmxvYXQpdmFsdWUgZm9yS2V5Oih1aW50NjRfdClrZXkgewotICBbX2RpY3Rpb25h
cnkgc2V0T2JqZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVhdG9y
KSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBz
ZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5Oih1aW50NjRfdClhS2V5
IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTpAKGFLZXkpXTsKLX0KLQotLSAo
dm9pZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxsT2JqZWN0c107Ci19Ci0K
LUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gVUludDY0IC0+IERvdWJsZQotCi1AaW1wbGVtZW50YXRp
b24gR1BCVUludDY0RG91YmxlRGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxlRGlj
dGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsK
LSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxM
IGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlX
aXRoVmFsdWU6KGRvdWJsZSl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JL
ZXk6KHVpbnQ2NF90KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBr
bm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNv
dW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJ
bnQ2NERvdWJsZURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczomdmFsdWUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0
YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGRvdWJsZSBbXSl2YWx1ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10pa2V5
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50
IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mg
d2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRv
IGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDY0RG91YmxlRGljdGlv
bmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOnZhbHVlcwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOmtleXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJVSW50NjREb3VibGVEaWN0aW9uYXJ5ICopZGljdGlv
bmFyeSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aERpY3Rpb25hcnk6Ci0gIC8vIG9uIHRvIGdldCB0
aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCVUludDY0RG91YmxlRGljdGlvbmFyeSop
W3NlbGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07
Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2Vy
KW51bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVt
SXRlbXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICByZXR1
cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgZG91YmxlIFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50NjRfdCBbXSlrZXlzCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011
dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYm
IGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5
c1tpXSldOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDY0RG91YmxlRGljdGlvbmFyeSAq
KWRpY3Rpb25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlz
Ok5VTEwgY291bnQ6MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAg
ICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2Rp
Y3Rpb25hcnldOwotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21hIHVu
dXNlZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5
czpOVUxMIGNvdW50OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1
dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQg
YmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNz
XSwgX2F1dG9jcmVhdG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUg
ewotICByZXR1cm4gW1tHUEJVSW50NjREb3VibGVEaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9u
ZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQlVJ
bnQ2NERvdWJsZURpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0g
ICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJVSW50
NjREb3VibGVEaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0
dXJuIFtfZGljdGlvbmFyeSBpc0VxdWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5T
VUludGVnZXIpaGFzaCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNT
dHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIjwlQCAlcD4geyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19
Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19
Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQg
KF4pKHVpbnQ2NF90IGtleSwgZG91YmxlIHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIFtf
ZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAq
YUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgICBibG9jayhbYUtleSB1bnNpZ25lZExv
bmdMb25nVmFsdWVdLCBbYVZhbHVlIGRvdWJsZVZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0t
IChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9y
ICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlm
IChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1
ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtl
eURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3Vs
dCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6
XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVz
ZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXpl
KFthS2V5IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0
YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3REb3VibGVGaWVsZFNpemUoW2FWYWx1
ZSBkb3VibGVWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAg
ICByZXN1bHQgKz0gR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkg
KyBtc2dTaXplOwotICB9XTsKLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1h
dFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICBy
ZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lk
KXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRT
dHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0
b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERh
dGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlE
YXRhVHlwZTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGRO
dW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgW19kaWN0aW9u
YXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1i
ZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8vIFdy
aXRlIHRoZSB0YWcuCi0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAg
ICAvLyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6ZSA9
IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKFthS2V5IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0s
IGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0
ZURpY3REb3VibGVGaWVsZFNpemUoW2FWYWx1ZSBkb3VibGVWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxk
TnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1Rh
ZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAvLyBXcml0ZSB0aGUgZmllbGRzLgotICAgIFdyaXRl
RGljdFVJbnQ2NEZpZWxkKG91dHB1dFN0cmVhbSwgW2FLZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVl
XSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0RG91Ymxl
RmllbGQob3V0cHV0U3RyZWFtLCBbYVZhbHVlIGRvdWJsZVZhbHVlXSwga01hcFZhbHVlRmllbGRO
dW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmlj
VmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtl
eTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZh
bHVlLT52YWx1ZURvdWJsZSkgZm9yS2V5OkAoa2V5LT52YWx1ZVVJbnQ2NCldOwotfQotCi0tICh2
b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVP
YmopKWJsb2NrIHsKLSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Xih1
aW50NjRfdCBrZXksIGRvdWJsZSB2YWx1ZSwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1
bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWxs
dSIsIGtleV0sIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4qbGciLCBEQkxfRElHLCB2
YWx1ZV0pOwotICB9XTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleToodWludDY0X3Qpa2V5IHZh
bHVlOihkb3VibGUgKil2YWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5
IG9iamVjdEZvcktleTpAKGtleSldOwotICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkgewotICAgICp2
YWx1ZSA9IFt3cmFwcGVkIGRvdWJsZVZhbHVlXTsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0g
TlVMTCk7Ci19Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJVSW50NjRE
b3VibGVEaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFy
eSkgewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0
aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BC
QXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9
Ci0gIH0KLX0KLQotLSAodm9pZClzZXRWYWx1ZTooZG91YmxlKXZhbHVlIGZvcktleToodWludDY0
X3Qpa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBmb3JLZXk6QChrZXkp
XTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1v
ZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1
ZUZvcktleToodWludDY0X3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JL
ZXk6QChhS2V5KV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJl
bW92ZUFsbE9iamVjdHNdOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFVJbnQ2NCAtPiBF
bnVtCi0KLUBpbXBsZW1lbnRhdGlvbiBHUEJVSW50NjRFbnVtRGljdGlvbmFyeSB7Ci0gQHBhY2th
Z2UKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci0gIEdQQkVudW1WYWxpZGF0
aW9uRnVuYyBfdmFsaWRhdGlvbkZ1bmM7Ci19Ci0KLUBzeW50aGVzaXplIHZhbGlkYXRpb25GdW5j
ID0gX3ZhbGlkYXRpb25GdW5jOwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0gIHJl
dHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpOVUxMCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczpOVUxMCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czpOVUxMCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDowXSBhdXRvcmVs
ZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5j
dGlvbjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMgewotICByZXR1cm4gW1tbc2VsZiBhbGxv
Y10gaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZnVuYwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6TlVMTAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6TlVMTAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxp
ZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmF3VmFsdWU6KGludDMyX3QpcmF3VmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcktleToodWludDY0X3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQg
c28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRo
VmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0Lgot
ICByZXR1cm4gW1soR1BCVUludDY0RW51bURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0
aFZhbGlkYXRpb25GdW5jdGlvbjpmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOiZyYXdWYWx1ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxl
YXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0
aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXJhd1ZhbHVlcwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCB1aW50
NjRfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQ6KE5TVUludGVnZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29t
cGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9y
S2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBb
WyhHUEJVSW50NjRFbnVtRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsaWRhdGlv
bkZ1bmN0aW9uOmZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6cmF3VmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXlzOmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsK
LX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCVUludDY0
RW51bURpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhl
IGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVz
OmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1
cm4gW1soR1BCVUludDY0RW51bURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rp
b25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5j
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUlu
dGVnZXIpbnVtSXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxpZGF0
aW9uRnVuY3Rpb246ZnVuYyBjYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25G
dW5jdGlvbjpOVUxMIHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRh
dGlvbkZ1bmMpZnVuYyB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlv
bjpmdW5jIHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1
bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOihjb25z
dCBpbnQzMl90IFtdKXJhd1ZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JLZXlzOihjb25zdCB1aW50NjRfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBfdmFsaWRhdGlvbkZ1bmMgPSAoZnVuYyAhPSBOVUxM
ID8gZnVuYyA6IERpY3REZWZhdWx0X0lzVmFsaWRWYWx1ZSk7Ci0gICAgaWYgKGNvdW50ICYmIHJh
d1ZhbHVlcyAmJiBrZXlzKSB7Ci0gICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QChyYXdWYWx1ZXNbaV0p
IGZvcktleTpAKGtleXNbaV0pXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlVJbnQ2NEVudW1E
aWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbGlkYXRp
b25GdW5jdGlvbjpkaWN0aW9uYXJ5LnZhbGlkYXRpb25GdW5jCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJhd1ZhbHVlczpOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yS2V5czpOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAgICAgW19k
aWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFy
eV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRl
bXMgewotICAjcHJhZ21hIHVudXNlZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRo
VmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmMgcmF3VmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50
OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAot
ICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVh
c2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVh
dG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4g
W1tHUEJVSW50NjRFbnVtRGljdGlvbmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGlj
dGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJVSW50NjRFbnVtRGljdGlv
bmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAgICByZXR1cm4gWUVTOwot
ICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQlVJbnQ2NEVudW1EaWN0aW9uYXJ5
IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBp
c0VxdWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0g
IHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlv
biB7Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAlQCB9
IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIp
Y291bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVy
YXRlS2V5c0FuZFJhd1ZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKHVpbnQ2NF90IGtl
eSwgaW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51
bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Qk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soW2FLZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwg
W2FWYWx1ZSBpbnRWYWx1ZV0sIHN0b3ApOwotICB9XTsKLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVT
ZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgTlNV
SW50ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQgPT0gMCkgewot
ICAgIHJldHVybiAwOwotICB9Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdl
dEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxk
Lm1hcEtleURhdGFUeXBlOwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwotICBbX2RpY3Rp
b25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051
bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgc2l6
ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFVJbnQ2NEZpZWxkU2l6ZShbYUtleSB1bnNpZ25lZExv
bmdMb25nVmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dT
aXplICs9IENvbXB1dGVEaWN0RW51bUZpZWxkU2l6ZShbYVZhbHVlIGludFZhbHVlXSwga01hcFZh
bHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3VsdCArPSBHUEJDb21wdXRl
UmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0gIH1dOwotICBz
aXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVsZE51bWJl
cihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXplICogY291
bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0U3Ry
ZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQotICAgICAgICAgICAgICAg
ICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0
YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJE
YXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICB1aW50MzJfdCB0
YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQldpcmVG
b3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9i
amVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewot
ICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0
cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdyaXRlIHRoZSBzaXplIG9m
IHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RVSW50NjRGaWVs
ZFNpemUoW2FLZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBr
ZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEVudW1GaWVsZFNpemUoW2FW
YWx1ZSBpbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAg
ICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAv
LyBXcml0ZSB0aGUgZmllbGRzLgotICAgIFdyaXRlRGljdFVJbnQ2NEZpZWxkKG91dHB1dFN0cmVh
bSwgW2FLZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlE
YXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0RW51bUZpZWxkKG91dHB1dFN0cmVhbSwgW2FWYWx1ZSBp
bnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19
Ci0KLS0gKE5TRGF0YSAqKXNlcmlhbGl6ZWREYXRhRm9yVW5rbm93blZhbHVlOihpbnQzMl90KXZh
bHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooR1BCR2VuZXJp
Y1ZhbHVlICopa2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlEYXRhVHlwZToo
R1BCRGF0YVR5cGUpa2V5RGF0YVR5cGUgewotICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0
VUludDY0RmllbGRTaXplKGtleS0+dmFsdWVVSW50NjQsIGtNYXBLZXlGaWVsZE51bWJlciwga2V5
RGF0YVR5cGUpOwotICBtc2dTaXplICs9IENvbXB1dGVEaWN0RW51bUZpZWxkU2l6ZSh2YWx1ZSwg
a01hcFZhbHVlRmllbGROdW1iZXIsIEdQQkRhdGFUeXBlRW51bSk7Ci0gIE5TTXV0YWJsZURhdGEg
KmRhdGEgPSBbTlNNdXRhYmxlRGF0YSBkYXRhV2l0aExlbmd0aDptc2dTaXplXTsKLSAgR1BCQ29k
ZWRPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbSA9IFtbR1BCQ29kZWRPdXRwdXRTdHJlYW0gYWxs
b2NdIGluaXRXaXRoRGF0YTpkYXRhXTsKLSAgV3JpdGVEaWN0VUludDY0RmllbGQob3V0cHV0U3Ry
ZWFtLCBrZXktPnZhbHVlVUludDY0LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsK
LSAgV3JpdGVEaWN0RW51bUZpZWxkKG91dHB1dFN0cmVhbSwgdmFsdWUsIGtNYXBWYWx1ZUZpZWxk
TnVtYmVyLCBHUEJEYXRhVHlwZUVudW0pOwotICBbb3V0cHV0U3RyZWFtIHJlbGVhc2VdOwotICBy
ZXR1cm4gZGF0YTsKLX0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFs
dWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAq
KWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZS0+dmFsdWVFbnVtKSBmb3JL
ZXk6QChrZXktPnZhbHVlVUludDY0KV07Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4dEZv
cm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBbc2VsZiBl
bnVtZXJhdGVLZXlzQW5kUmF3VmFsdWVzVXNpbmdCbG9jazpeKHVpbnQ2NF90IGtleSwgaW50MzJf
dCB2YWx1ZSwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAg
IGJsb2NrKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWxsdSIsIGtleV0sIEAodmFsdWUp
KTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KHVpbnQ2NF90KWtleSB2YWx1ZToo
aW50MzJfdCAqKXZhbHVlIHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkgb2Jq
ZWN0Rm9yS2V5OkAoa2V5KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgaW50MzJf
dCByZXN1bHQgPSBbd3JhcHBlZCBpbnRWYWx1ZV07Ci0gICAgaWYgKCFfdmFsaWRhdGlvbkZ1bmMo
cmVzdWx0KSkgewotICAgICAgcmVzdWx0ID0ga0dQQlVucmVjb2duaXplZEVudW1lcmF0b3JWYWx1
ZTsKLSAgICB9Ci0gICAgKnZhbHVlID0gcmVzdWx0OwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAh
PSBOVUxMKTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleToodWludDY0X3Qpa2V5IHJhd1ZhbHVl
OihpbnQzMl90ICopcmF3VmFsdWUgewotICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAgaWYgKHdyYXBwZWQgJiYgcmF3VmFsdWUpIHsKLSAg
ICAqcmF3VmFsdWUgPSBbd3JhcHBlZCBpbnRWYWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVk
ICE9IE5VTEwpOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2Nr
OgotICAgICh2b2lkICheKSh1aW50NjRfdCBrZXksIGludDMyX3QgdmFsdWUsIEJPT0wgKnN0b3Ap
KWJsb2NrIHsKLSAgR1BCRW51bVZhbGlkYXRpb25GdW5jIGZ1bmMgPSBfdmFsaWRhdGlvbkZ1bmM7
Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051
bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgICBpbnQzMl90IHVud3JhcHBl
ZCA9IFthVmFsdWUgaW50VmFsdWVdOwotICAgICAgaWYgKCFmdW5jKHVud3JhcHBlZCkpIHsKLSAg
ICAgICAgdW53cmFwcGVkID0ga0dQQlVucmVjb2duaXplZEVudW1lcmF0b3JWYWx1ZTsKLSAgICAg
IH0KLSAgICAgIGJsb2NrKFthS2V5IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIHVud3JhcHBlZCwg
c3RvcCk7Ci0gIH1dOwotfQotCi0tICh2b2lkKWFkZFJhd0VudHJpZXNGcm9tRGljdGlvbmFyeToo
R1BCVUludDY0RW51bURpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotICBpZiAob3RoZXJE
aWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpv
dGhlckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0g
ICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYp
OwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldFJhd1ZhbHVlOihpbnQzMl90KXZhbHVlIGZv
cktleToodWludDY0X3Qpa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBm
b3JLZXk6QChrZXkpXTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVk
RGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9p
ZClyZW1vdmVWYWx1ZUZvcktleToodWludDY0X3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1v
dmVPYmplY3RGb3JLZXk6QChhS2V5KV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19k
aWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNdOwotfQotCi0tICh2b2lkKXNldFZhbHVlOihpbnQz
Ml90KXZhbHVlIGZvcktleToodWludDY0X3Qpa2V5IHsKLSAgaWYgKCFfdmFsaWRhdGlvbkZ1bmMo
dmFsdWUpKSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0
aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiR1BCVUludDY0RW51bURpY3Rpb25hcnk6IEF0
dGVtcHQgdG8gc2V0IGFuIHVua25vd24gZW51bSB2YWx1ZSAoJWQpIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWVdOwotICB9Ci0KLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVl
KSBmb3JLZXk6QChrZXkpXTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVh
dGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotQGVu
ZAotCi0jcHJhZ21hIG1hcmsgLSBVSW50NjQgLT4gT2JqZWN0Ci0KLUBpbXBsZW1lbnRhdGlvbiBH
UEJVSW50NjRPYmplY3REaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBOU011dGFibGVEaWN0aW9u
YXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewotICBy
ZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhPYmplY3RzOk5VTEwgZm9yS2V5czpOVUxMIGNv
dW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRo
T2JqZWN0OihpZClvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleToo
dWludDY0X3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoT2JqZWN0czpmb3JLZXlzOmNvdW50
OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQ2
NE9iamVjdERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aE9iamVjdHM6Jm9iamVjdAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5z
dGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoT2JqZWN0czooY29uc3QgaWQgW10pb2JqZWN0cwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10pa2V5
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3Vu
dCB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNz
IHdlIGFyZSBpbnZva2luZyBpbml0V2l0aE9iamVjdHM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24g
dG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJVSW50NjRPYmplY3REaWN0
aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhPYmplY3RzOm9iamVjdHMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czpr
ZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY291bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBl
KWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCVUludDY0T2JqZWN0RGljdGlvbmFyeSAqKWRp
Y3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hh
dCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBn
ZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlVJbnQ2NE9iamVjdERpY3Rpb25h
cnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVh
c2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50
ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5
Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAg
cmV0dXJuIFtzZWxmIGluaXRXaXRoT2JqZWN0czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT2JqZWN0czooY29uc3QgaWQgW10pb2JqZWN0
cwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgdWludDY0X3QgW10pa2V5
cwotICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0g
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIGlmIChjb3VudCAmJiBvYmpl
Y3RzICYmIGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKLSAgICAgICAgaWYgKCFvYmplY3RzW2ldKSB7Ci0gICAgICAgICAgW05TRXhjZXB0aW9u
IHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0OkAiQXR0ZW1wdGluZyB0byBhZGQgbmlsIG9iamVjdCB0byBhIERpY3Rpb25hcnkiXTsK
LSAgICAgICAgfQotICAgICAgICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0Om9iamVjdHNbaV0gZm9y
S2V5OkAoa2V5c1tpXSldOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCVUludDY0T2JqZWN0RGlj
dGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhPYmplY3RzOk5V
TEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9u
YXJ5KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rp
b25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAg
I3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aE9iamVjdHM6
TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5T
QXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3Qg
YmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAg
W3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07Ci0g
IFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNa
b25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQlVJbnQ2NE9iamVjdERpY3Rpb25hcnkgYWxsb2NX
aXRoWm9uZTp6b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNF
cXVhbDooR1BCVUludDY0T2JqZWN0RGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0g
b3RoZXIpIHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xh
c3M6W0dQQlVJbnQ2NE9iamVjdERpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsK
LSAgfQotICByZXR1cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsK
LX0KLQotLSAoTlNVSW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50Owot
fQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0
aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFy
eS5jb3VudDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6
Ci0gICAgKHZvaWQgKF4pKHVpbnQ2NF90IGtleSwgaWQgb2JqZWN0LCBCT09MICpzdG9wKSlibG9j
ayB7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihO
U051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlkIGFPYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgICBibG9jayhbYUtleSB1bnNpZ25l
ZExvbmdMb25nVmFsdWVdLCBhT2JqZWN0LCBzdG9wKTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wpaXNJ
bml0aWFsaXplZCB7Ci0gIGZvciAoR1BCTWVzc2FnZSAqbXNnIGluIFtfZGljdGlvbmFyeSBvYmpl
Y3RFbnVtZXJhdG9yXSkgewotICAgIGlmICghbXNnLmluaXRpYWxpemVkKSB7Ci0gICAgICByZXR1
cm4gTk87Ci0gICAgfQotICB9Ci0gIHJldHVybiBZRVM7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlk
ZWVwQ29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgR1BCVUludDY0T2JqZWN0RGljdGlv
bmFyeSAqbmV3RGljdCA9Ci0gICAgICBbW0dQQlVJbnQ2NE9iamVjdERpY3Rpb25hcnkgYWxsb2Nd
IGluaXRdOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2Nr
Ol4oaWQgYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdQQk1lc3NhZ2UgKm1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9w
KQotICAgIEdQQk1lc3NhZ2UgKmNvcGllZE1zZyA9IFttc2cgY29weVdpdGhab25lOnpvbmVdOwot
ICAgIFtuZXdEaWN0LT5fZGljdGlvbmFyeSBzZXRPYmplY3Q6Y29waWVkTXNnIGZvcktleTphS2V5
XTsKLSAgICBbY29waWVkTXNnIHJlbGVhc2VdOwotICB9XTsKLSAgcmV0dXJuIG5ld0RpY3Q7Ci19
Ci0KLS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVsZERlc2Ny
aXB0b3IgKilmaWVsZCB7Ci0gIE5TVUludGVnZXIgY291bnQgPSBfZGljdGlvbmFyeS5jb3VudDsK
LSAgaWYgKGNvdW50ID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIEdQQkRhdGFUeXBl
IHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5
cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgX19ibG9jayBzaXplX3Qg
cmVzdWx0ID0gMDsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdC
bG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWQgYU9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNl
ZChzdG9wKQotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RVSW50NjRGaWVsZFNpemUo
W2FLZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRh
VHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdE9iamVjdEZpZWxkU2l6ZShhT2JqZWN0
LCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQ
QkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAg
fV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZp
ZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1Np
emUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRP
dXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewot
ICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7
Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVp
bnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwg
R1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVL
ZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkIGFPYmplY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7
Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgIFtv
dXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNpemUg
b2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFVJbnQ2NEZp
ZWxkU2l6ZShbYUtleSB1bnNpZ25lZExvbmdMb25nVmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIs
IGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0T2JqZWN0RmllbGRTaXpl
KGFPYmplY3QsIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICBbb3V0
cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAvLyBXcml0
ZSB0aGUgZmllbGRzLgotICAgIFdyaXRlRGljdFVJbnQ2NEZpZWxkKG91dHB1dFN0cmVhbSwgW2FL
ZXkgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlw
ZSk7Ci0gICAgV3JpdGVEaWN0T2JqZWN0RmllbGQob3V0cHV0U3RyZWFtLCBhT2JqZWN0LCBrTWFw
VmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gIH1dOwotfQotCi0tICh2b2lkKXNl
dEdQQkdlbmVyaWNWYWx1ZTooR1BCR2VuZXJpY1ZhbHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2Vu
ZXJpY1ZhbHVlS2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0
T2JqZWN0OnZhbHVlLT52YWx1ZVN0cmluZyBmb3JLZXk6QChrZXktPnZhbHVlVUludDY0KV07Ci19
Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBp
ZCB2YWx1ZU9iaikpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5n
QmxvY2s6Xih1aW50NjRfdCBrZXksIGlkIG9iamVjdCwgQk9PTCAqc3RvcCkgewotICAgICAgI3By
YWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJWxsdSIsIGtleV0sIG9iamVjdCk7Ci0gIH1dOwotfQotCi0tIChpZClvYmplY3RGb3JLZXk6
KHVpbnQ2NF90KWtleSB7Ci0gIGlkIHJlc3VsdCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6
QChrZXkpXTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURp
Y3Rpb25hcnk6KEdQQlVJbnQ2NE9iamVjdERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewot
ICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9t
RGljdGlvbmFyeTpvdGhlckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1dG9j
cmVhdG9yKSB7Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2Ny
ZWF0b3IsIHNlbGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldE9iamVjdDooaWQpb2Jq
ZWN0IGZvcktleToodWludDY0X3Qpa2V5IHsKLSAgaWYgKCFvYmplY3QpIHsKLSAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBm
b3JtYXQ6QCJBdHRlbXB0aW5nIHRvIGFkZCBuaWwgb2JqZWN0IHRvIGEgRGljdGlvbmFyeSJdOwot
ICB9Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6b2JqZWN0IGZvcktleTpAKGtleSldOwotICBp
ZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQo
X2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZU9iamVjdEZvcktl
eToodWludDY0X3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6QChh
S2V5KV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFs
bE9iamVjdHNdOwotfQotCi1AZW5kCi0KLS8vJVBERE0tRVhQQU5EIERJQ1RJT05BUllfSU1QTF9G
T1JfUE9EX0tFWShJbnQ2NCwgaW50NjRfdCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5l
cmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0jcHJhZ21hIG1hcmsgLSBJbnQ2NCAt
PiBVSW50MzIKLQotQGltcGxlbWVudGF0aW9uIEdQQkludDY0VUludDMyRGljdGlvbmFyeSB7Ci0g
QHBhY2thZ2UKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRo
VmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAo
aW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KHVpbnQzMl90KXZhbHVlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooaW50NjRfdClrZXkgewotICAvLyBDYXN0IGlz
IG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcg
aW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNv
cnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQ2NFVJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9j
XSBpbml0V2l0aFZhbHVlczomdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9y
ZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25z
dCB1aW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5
czooY29uc3QgaW50NjRfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQ6KE5TVUludGVnZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29t
cGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9y
S2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBb
WyhHUEJJbnQ2NFVJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JLZXlzOmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0K
LSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkludDY0VUludDMy
RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29t
cGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5
OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDY0
VUludDMyRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9u
YXJ5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENh
cGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6bnVtSXRlbXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXQgewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5V
TEwgY291bnQ6MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3Qg
dWludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0
IGludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRl
Z2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBf
ZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgaWYg
KGNvdW50ICYmIHZhbHVlcyAmJiBrZXlzKSB7Ci0gICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1
ZXNbaV0pIGZvcktleTpAKGtleXNbaV0pXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQkludDY0
VUludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhW
YWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYg
KGRpY3Rpb25hcnkpIHsKLSAgICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25h
cnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRl
bXMgewotICAjcHJhZ21hIHVudXNlZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRo
VmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2Mg
ewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRv
ciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAg
ICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVh
c2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpv
bmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tHUEJJbnQ2NFVJbnQzMkRpY3Rpb25hcnkg
YWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJP
T0wpaXNFcXVhbDooR1BCSW50NjRVSW50MzJEaWN0aW9uYXJ5ICopb3RoZXIgewotICBpZiAoc2Vs
ZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIgaXNLaW5k
T2ZDbGFzczpbR1BCSW50NjRVSW50MzJEaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4g
Tk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBpc0VxdWFsOm90aGVyLT5fZGljdGlvbmFy
eV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3Vu
dDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIHJldHVybiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBf
ZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gX2RpY3Rp
b25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxv
Y2s6Ci0gICAgKHZvaWQgKF4pKGludDY0X3Qga2V5LCB1aW50MzJfdCB2YWx1ZSwgQk9PTCAqc3Rv
cCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Js
b2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxvY2so
W2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIFthVmFsdWUgdW5zaWduZWRJbnRWYWx1ZV0sIHN0b3ApOwot
ICB9XTsKLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZp
ZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgTlNVSW50ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5
LmNvdW50OwotICBpZiAoY291bnQgPT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgR1BC
RGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBH
UEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICBfX2Jsb2Nr
IHNpemVfdCByZXN1bHQgPSAwOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVj
dHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAg
ICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdElu
dDY0RmllbGRTaXplKFthS2V5IGxvbmdMb25nVmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtl
eURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0VUludDMyRmllbGRTaXplKFth
VmFsdWUgdW5zaWduZWRJbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFU
eXBlKTsKLSAgICByZXN1bHQgKz0gR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIo
bXNnU2l6ZSkgKyBtc2dTaXplOwotICB9XTsKLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRl
V2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3Nh
Z2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQot
Ci0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0g
KilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVs
ZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJH
ZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVs
ZC5tYXBLZXlEYXRhVHlwZTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWco
R1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAg
W19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVy
ICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQot
ICAgIC8vIFdyaXRlIHRoZSB0YWcuCi0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6
dGFnXTsKLSAgICAvLyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3Qg
bXNnU2l6ZSA9IENvbXB1dGVEaWN0SW50NjRGaWVsZFNpemUoW2FLZXkgbG9uZ0xvbmdWYWx1ZV0s
IGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0
ZURpY3RVSW50MzJGaWVsZFNpemUoW2FWYWx1ZSB1bnNpZ25lZEludFZhbHVlXSwga01hcFZhbHVl
RmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQz
Mk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAg
V3JpdGVEaWN0SW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIFthS2V5IGxvbmdMb25nVmFsdWVdLCBr
TWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RVSW50MzJGaWVs
ZChvdXRwdXRTdHJlYW0sIFthVmFsdWUgdW5zaWduZWRJbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxk
TnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJp
Y1ZhbHVlOihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVL
ZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2
YWx1ZS0+dmFsdWVVSW50MzIpIGZvcktleTpAKGtleS0+dmFsdWVJbnQ2NCldOwotfQotCi0tICh2
b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVP
YmopKWJsb2NrIHsKLSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Xihp
bnQ2NF90IGtleSwgdWludDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNwcmFnbWEg
dW51c2VkKHN0b3ApCi0gICAgICBibG9jayhbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVs
bGQiLCBrZXldLCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiV1IiwgdmFsdWVdKTsKLSAg
fV07Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KGludDY0X3Qpa2V5IHZhbHVlOih1aW50MzJf
dCAqKXZhbHVlIHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkgb2JqZWN0Rm9y
S2V5OkAoa2V5KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgKnZhbHVlID0gW3dy
YXBwZWQgdW5zaWduZWRJbnRWYWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5VTEwp
OwotfQotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCSW50NjRVSW50MzJE
aWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewot
ICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5
LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2Ny
ZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0K
LX0KLQotLSAodm9pZClzZXRWYWx1ZToodWludDMyX3QpdmFsdWUgZm9yS2V5OihpbnQ2NF90KWtl
eSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0g
IGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmll
ZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JL
ZXk6KGludDY0X3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6QChh
S2V5KV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFs
bE9iamVjdHNdOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEludDY0IC0+IEludDMyCi0K
LUBpbXBsZW1lbnRhdGlvbiBHUEJJbnQ2NEludDMyRGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAg
TlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlk
aWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOk5VTEwg
Zm9yS2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBl
KWRpY3Rpb25hcnlXaXRoVmFsdWU6KGludDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5OihpbnQ2NF90KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRo
ZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVl
czpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0
dXJuIFtbKEdQQkludDY0SW50MzJEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1
ZXM6JnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0r
IChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFs
dWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IGludDY0X3Qg
W10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2Vy
KWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQg
Y2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8v
IG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50NjRJbnQzMkRp
Y3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJJbnQ2NEludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25h
cnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFz
cyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhl
IHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDY0SW50MzJEaWN0aW9uYXJ5Kilbc2Vs
ZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsKLX0K
LQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVt
SXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1JdGVt
c10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBb
c2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcwotICAg
ICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtleXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIGlmIChjb3VudCAmJiB2YWx1ZXMgJiYga2V5
cykgewotICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAg
ICAgICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWVzW2ldKSBmb3JLZXk6QChrZXlzW2ld
KV07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJJbnQ2NEludDMyRGljdGlvbmFyeSAqKWRpY3Rp
b25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwg
Y291bnQ6MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtf
ZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25h
cnldOwotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21hIHVudXNlZChu
dW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxM
IGNvdW50OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVh
dG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3Jl
IHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1
dG9jcmVhdG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICBy
ZXR1cm4gW1tHUEJJbnQ2NEludDMyRGljdGlvbmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRX
aXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJJbnQ2NEludDMy
RGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAgICByZXR1cm4g
WUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQkludDY0SW50MzJEaWN0
aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlv
bmFyeSBpc0VxdWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFz
aCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNj
cmlwdGlvbiB7Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4g
eyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUlu
dGVnZXIpY291bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQp
ZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKGludDY0X3Qg
a2V5LCBpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIFtfZGljdGlvbmFyeSBl
bnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICph
VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCT09MICpzdG9wKSB7Ci0gICAgICBibG9jayhbYUtleSBsb25nTG9uZ1ZhbHVlXSwgW2FWYWx1
ZSBpbnRWYWx1ZV0sIHN0b3ApOwotICB9XTsKLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxp
emVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgTlNVSW50ZWdl
ciBjb3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQgPT0gMCkgewotICAgIHJl
dHVybiAwOwotICB9Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxk
RGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtl
eURhdGFUeXBlOwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwotICBbX2RpY3Rpb25hcnkg
ZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAq
YVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgc2l6ZV90IG1z
Z1NpemUgPSBDb21wdXRlRGljdEludDY0RmllbGRTaXplKFthS2V5IGxvbmdMb25nVmFsdWVdLCBr
TWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVE
aWN0SW50MzJGaWVsZFNpemUoW2FWYWx1ZSBpbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVy
LCB2YWx1ZURhdGFUeXBlKTsKLSAgICByZXN1bHQgKz0gR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6
ZUZvckludGVnZXIobXNnU2l6ZSkgKyBtc2dTaXplOwotICB9XTsKLSAgc2l6ZV90IHRhZ1NpemUg
PSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJE
YXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICByZXR1cm4g
cmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRP
dXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICBhc0Zp
ZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0
YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0
YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZv
cm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVs
aW1pdGVkKTsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9j
azpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVu
dXNlZChzdG9wKQotICAgIC8vIFdyaXRlIHRoZSB0YWcuCi0gICAgW291dHB1dFN0cmVhbSB3cml0
ZUludDMyTm9UYWc6dGFnXTsKLSAgICAvLyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4K
LSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0SW50NjRGaWVsZFNpemUoW2FLZXkgbG9u
Z0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1Np
emUgKz0gQ29tcHV0ZURpY3RJbnQzMkZpZWxkU2l6ZShbYVZhbHVlIGludFZhbHVlXSwga01hcFZh
bHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJ
bnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0g
ICAgV3JpdGVEaWN0SW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIFthS2V5IGxvbmdMb25nVmFsdWVd
LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RJbnQzMkZp
ZWxkKG91dHB1dFN0cmVhbSwgW2FWYWx1ZSBpbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVy
LCB2YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVl
OihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQ
QkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZS0+
dmFsdWVJbnQzMikgZm9yS2V5OkAoa2V5LT52YWx1ZUludDY0KV07Ci19Ci0KLS0gKHZvaWQpZW51
bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxv
Y2sgewotICBbc2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazpeKGludDY0X3Qg
a2V5LCBpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJhZ21hIHVudXNlZChz
dG9wKQotICAgICAgYmxvY2soW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbGxkIiwga2V5
XSwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIHZhbHVlXSk7Ci0gIH1dOwotfQot
Ci0tIChCT09MKXZhbHVlRm9yS2V5OihpbnQ2NF90KWtleSB2YWx1ZTooaW50MzJfdCAqKXZhbHVl
IHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OkAoa2V5
KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgKnZhbHVlID0gW3dyYXBwZWQgaW50
VmFsdWVdOwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQotLSAodm9pZClh
ZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkludDY0SW50MzJEaWN0aW9uYXJ5ICopb3RoZXJE
aWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAgIFtfZGljdGlvbmFyeSBh
ZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0g
ICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9k
aWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClzZXRW
YWx1ZTooaW50MzJfdCl2YWx1ZSBmb3JLZXk6KGludDY0X3Qpa2V5IHsKLSAgW19kaWN0aW9uYXJ5
IHNldE9iamVjdDpAKHZhbHVlKSBmb3JLZXk6QChrZXkpXTsKLSAgaWYgKF9hdXRvY3JlYXRvcikg
ewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2Vs
Zik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleTooaW50NjRfdClhS2V5IHsK
LSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTpAKGFLZXkpXTsKLX0KLQotLSAodm9p
ZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxsT2JqZWN0c107Ci19Ci0KLUBl
bmQKLQotI3ByYWdtYSBtYXJrIC0gSW50NjQgLT4gVUludDY0Ci0KLUBpbXBsZW1lbnRhdGlvbiBH
UEJJbnQ2NFVJbnQ2NERpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIE5TTXV0YWJsZURpY3Rpb25h
cnkgKl9kaWN0aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0gIHJl
dHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3Vu
dDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZh
bHVlOih1aW50NjRfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6
KGludDY0X3Qpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6
Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50NjRV
SW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6JnZhbHVlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
S2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgdWludDY0X3QgW10pdmFsdWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IGludDY0X3QgW10pa2V5cwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAg
Ly8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJl
IGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0
aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50NjRVSW50NjREaWN0aW9uYXJ5Kilb
c2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vu
dDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhEaWN0aW9uYXJ5OihHUEJJbnQ2NFVJbnQ2NERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAg
Ly8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJl
IGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNv
cnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQ2NFVJbnQ2NERpY3Rpb25hcnkqKVtzZWxmIGFsbG9j
XSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7
Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRv
cmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGlu
aXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQ2NF90IFtdKXZhbHVlcwotICAgICAgICAg
ICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwotICAgIGlmIChjb3VudCAmJiB2YWx1ZXMgJiYga2V5cykgewot
ICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBb
X2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWVzW2ldKSBmb3JLZXk6QChrZXlzW2ldKV07Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJJbnQ2NFVJbnQ2NERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5
IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50
OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2RpY3Rp
b25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRl
bXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3Vu
dDowXTsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwK
LSAgICAgICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxl
YXNlLCBhdXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3Jl
YXRvcik7Ci0gIFtfZGljdGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJu
IFtbR1BCSW50NjRVSW50NjREaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhE
aWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQkludDY0VUludDY0RGlj
dGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAgICByZXR1cm4gWUVT
OwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQkludDY0VUludDY0RGljdGlv
bmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25h
cnkgaXNFcXVhbDpvdGhlci0+X2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2gg
ewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3Jp
cHRpb24gewotICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsg
JUAgfSIsIFtzZWxmIGNsYXNzXSwgc2VsZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRl
Z2VyKWNvdW50IHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVu
dW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShpbnQ2NF90IGtl
eSwgdWludDY0X3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgW19kaWN0aW9uYXJ5IGVu
dW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFW
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJPT0wgKnN0b3ApIHsKLSAgICAgIGJsb2NrKFthS2V5IGxvbmdMb25nVmFsdWVdLCBbYVZhbHVl
IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIHN0b3ApOwotICB9XTsKLX0KLQotLSAoc2l6ZV90KWNv
bXB1dGVTZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsK
LSAgTlNVSW50ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQgPT0g
MCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9
IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9
IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwotICBb
X2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIg
KmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0g
ICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEludDY0RmllbGRTaXplKFthS2V5IGxvbmdM
b25nVmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXpl
ICs9IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKFthVmFsdWUgdW5zaWduZWRMb25nTG9uZ1Zh
bHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3VsdCAr
PSBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7
Ci0gIH1dOwotICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShH
UEJGaWVsZE51bWJlcihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0
YWdTaXplICogY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0Nv
ZGVkT3V0cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQotICAg
ICAgICAgICAgICAgICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxk
IHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmll
bGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwot
ICB1aW50MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihmaWVs
ZCksIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51bWVy
YXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9P
TCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRh
Zy4KLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdyaXRl
IHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURp
Y3RJbnQ2NEZpZWxkU2l6ZShbYUtleSBsb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVy
LCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdFVJbnQ2NEZpZWxkU2l6
ZShbYVZhbHVlIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2
YWx1ZURhdGFUeXBlKTsKLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJf
dCltc2dTaXplXTsKLSAgICAvLyBXcml0ZSB0aGUgZmllbGRzLgotICAgIFdyaXRlRGljdEludDY0
RmllbGQob3V0cHV0U3RyZWFtLCBbYUtleSBsb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVt
YmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0VUludDY0RmllbGQob3V0cHV0U3RyZWFt
LCBbYVZhbHVlIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2
YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihH
UEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdl
bmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZS0+dmFs
dWVVSW50NjQpIGZvcktleTpAKGtleS0+dmFsdWVJbnQ2NCldOwotfQotCi0tICh2b2lkKWVudW1l
cmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2Nr
IHsKLSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6XihpbnQ2NF90IGtl
eSwgdWludDY0X3QgdmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNwcmFnbWEgdW51c2VkKHN0
b3ApCi0gICAgICBibG9jayhbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVsbGQiLCBrZXld
LCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVsbHUiLCB2YWx1ZV0pOwotICB9XTsKLX0K
LQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50NjRfdClrZXkgdmFsdWU6KHVpbnQ2NF90ICopdmFs
dWUgewotICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6QChr
ZXkpXTsKLSAgaWYgKHdyYXBwZWQgJiYgdmFsdWUpIHsKLSAgICAqdmFsdWUgPSBbd3JhcHBlZCB1
bnNpZ25lZExvbmdMb25nVmFsdWVdOwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxMKTsK
LX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkludDY0VUludDY0RGlj
dGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsKLSAg
ICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGljdGlvbmFyeS0+
X2RpY3Rpb25hcnldOwotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9jcmVh
dGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9Ci19
Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KHVpbnQ2NF90KXZhbHVlIGZvcktleTooaW50NjRfdClrZXkg
ewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUpIGZvcktleTpAKGtleSldOwotICBp
ZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQo
X2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5
OihpbnQ2NF90KWFLZXkgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAoYUtl
eSldOwotfQotCi0tICh2b2lkKXJlbW92ZUFsbCB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVBbGxP
YmplY3RzXTsKLX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBJbnQ2NCAtPiBJbnQ2NAotCi1A
aW1wbGVtZW50YXRpb24gR1BCSW50NjRJbnQ2NERpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIE5T
TXV0YWJsZURpY3Rpb25hcnkgKl9kaWN0aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeSB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxMIGZv
cktleXM6TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlk
aWN0aW9uYXJ5V2l0aFZhbHVlOihpbnQ2NF90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleTooaW50NjRfdClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUg
Y29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6
Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVy
biBbWyhHUEJJbnQ2NEludDY0RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVz
OiZ2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAo
aW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBpbnQ2NF90IFtdKXZhbHVl
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtd
KWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlcilj
b3VudCB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBv
biB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDY0SW50NjREaWN0
aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOmtleXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rp
b25hcnlXaXRoRGljdGlvbmFyeTooR1BCSW50NjRJbnQ2NERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5
IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mg
d2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0
eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQ2NEludDY0RGljdGlvbmFyeSopW3NlbGYg
YWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07Ci19Ci0K
LSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0
ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVtSXRlbXNd
IGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICByZXR1cm4gW3Nl
bGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgaW50NjRfdCBbXSl2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50NjRfdCBbXSlrZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMp
IHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSld
OwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCSW50NjRJbnQ2NERpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNv
dW50OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2Rp
Y3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5
XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVt
SXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBj
b3VudDowXTsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRv
ciwKLSAgICAgICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSBy
ZWxlYXNlLCBhdXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRv
Y3JlYXRvcik7Ci0gIFtfZGljdGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0
dXJuIFtbR1BCSW50NjRJbnQ2NERpY3Rpb25hcnkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0
aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BCSW50NjRJbnQ2NERp
Y3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlF
UzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJJbnQ2NEludDY0RGljdGlv
bmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25h
cnkgaXNFcXVhbDpvdGhlci0+X2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2gg
ewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3Jp
cHRpb24gewotICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsg
JUAgfSIsIFtzZWxmIGNsYXNzXSwgc2VsZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRl
Z2VyKWNvdW50IHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVu
dW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShpbnQ2NF90IGtl
eSwgaW50NjRfdCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51
bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Qk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIFthVmFsdWUg
bG9uZ0xvbmdWYWx1ZV0sIHN0b3ApOwotICB9XTsKLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJp
YWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgTlNVSW50
ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQgPT0gMCkgewotICAg
IHJldHVybiAwOwotICB9Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZp
ZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1h
cEtleURhdGFUeXBlOwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwotICBbX2RpY3Rpb25h
cnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJl
ciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgc2l6ZV90
IG1zZ1NpemUgPSBDb21wdXRlRGljdEludDY0RmllbGRTaXplKFthS2V5IGxvbmdMb25nVmFsdWVd
LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1
dGVEaWN0SW50NjRGaWVsZFNpemUoW2FWYWx1ZSBsb25nTG9uZ1ZhbHVlXSwga01hcFZhbHVlRmll
bGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3VmFy
aW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0gIH1dOwotICBzaXplX3Qg
dGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVsZE51bWJlcihmaWVs
ZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXplICogY291bnQ7Ci0g
IHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOihH
UEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQotICAgICAgICAgICAgICAgICAgICAg
ICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5cGUg
dmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlw
ZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICB1aW50MzJfdCB0YWcgPSBH
UEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQldpcmVGb3JtYXRM
ZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNV
c2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNw
cmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0cHV0U3Ry
ZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRoZSBt
ZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RJbnQ2NEZpZWxkU2l6ZShb
YUtleSBsb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0g
ICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEludDY0RmllbGRTaXplKFthVmFsdWUgbG9uZ0xvbmdW
YWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICBbb3V0cHV0
U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAvLyBXcml0ZSB0
aGUgZmllbGRzLgotICAgIFdyaXRlRGljdEludDY0RmllbGQob3V0cHV0U3RyZWFtLCBbYUtleSBs
b25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgV3Jp
dGVEaWN0SW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIFthVmFsdWUgbG9uZ0xvbmdWYWx1ZV0sIGtN
YXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQp
c2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJH
ZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBz
ZXRPYmplY3Q6QCh2YWx1ZS0+dmFsdWVJbnQ2NCkgZm9yS2V5OkAoa2V5LT52YWx1ZUludDY0KV07
Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2Jq
LCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNp
bmdCbG9jazpeKGludDY0X3Qga2V5LCBpbnQ2NF90IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAg
ICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgICAgYmxvY2soW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIlbGxkIiwga2V5XSwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbGxkIiwg
dmFsdWVdKTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KGludDY0X3Qpa2V5IHZh
bHVlOihpbnQ2NF90ICopdmFsdWUgewotICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6QChrZXkpXTsKLSAgaWYgKHdyYXBwZWQgJiYgdmFsdWUpIHsKLSAgICAq
dmFsdWUgPSBbd3JhcHBlZCBsb25nTG9uZ1ZhbHVlXTsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQg
IT0gTlVMTCk7Ci19Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJJbnQ2
NEludDY0RGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25h
cnkpIHsKLSAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGlj
dGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQ
QkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAg
fQotICB9Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGludDY0X3QpdmFsdWUgZm9yS2V5OihpbnQ2
NF90KWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAoa2V5
KV07Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlN
b2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFs
dWVGb3JLZXk6KGludDY0X3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JL
ZXk6QChhS2V5KV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJl
bW92ZUFsbE9iamVjdHNdOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEludDY0IC0+IEJv
b2wKLQotQGltcGxlbWVudGF0aW9uIEdQQkludDY0Qm9vbERpY3Rpb25hcnkgewotIEBwYWNrYWdl
Ci0gIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9kaWN0aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5
cGUpZGljdGlvbmFyeSB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpO
VUxMIGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihCT09MKXZhbHVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleTooaW50NjRfdClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0
aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1
ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJl
dHVybiBbWyhHUEJJbnQ2NEJvb2xEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1
ZXM6JnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAo
aW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBCT09MIFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtl
eXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3Vu
dCB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNz
IHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0
byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDY0Qm9vbERpY3Rpb25h
cnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlX
aXRoRGljdGlvbmFyeTooR1BCSW50NjRCb29sRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICAv
LyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUg
aW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29y
cmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDY0Qm9vbERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBp
bml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0
YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0g
IHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVs
ZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRX
aXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IEJPT0wgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleXM6KGNvbnN0IGludDY0X3QgW10pa2V5cwotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgaWYgKHNlbGYpIHsKLSAgICBfZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBh
bGxvY10gaW5pdF07Ci0gICAgaWYgKGNvdW50ICYmIHZhbHVlcyAmJiBrZXlzKSB7Ci0gICAgICBm
b3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFtfZGljdGlv
bmFyeSBzZXRPYmplY3Q6QCh2YWx1ZXNbaV0pIGZvcktleTpAKGtleXNbaV0pXTsKLSAgICAgIH0K
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aERpY3Rpb25hcnk6KEdQQkludDY0Qm9vbERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2Vs
ZiA9IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBp
ZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRk
RW50cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0g
IH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5
OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJl
dHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0K
LQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAg
ICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRv
Y3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0g
IFtfZGljdGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCSW50
NjRCb29sRGljdGlvbmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGljdGlvbmFyeTpz
ZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJJbnQ2NEJvb2xEaWN0aW9uYXJ5ICopb3Ro
ZXIgewotICBpZiAoc2VsZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYg
KCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbR1BCSW50NjRCb29sRGljdGlvbmFyeSBjbGFzc11dKSB7
Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpvdGhl
ci0+X2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gX2Rp
Y3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICByZXR1
cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxmIGNs
YXNzXSwgc2VsZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAg
cmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRW
YWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShpbnQ2NF90IGtleSwgQk9PTCB2YWx1ZSwg
Qk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVj
dHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAg
ICAgYmxvY2soW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIFthVmFsdWUgYm9vbFZhbHVlXSwgc3RvcCk7
Ci0gIH1dOwotfQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BC
RmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25h
cnkuY291bnQ7Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBH
UEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0g
IEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxv
Y2sgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2Jq
ZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0g
ICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0
SW50NjRGaWVsZFNpemUoW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwg
a2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RCb29sRmllbGRTaXplKFth
VmFsdWUgYm9vbFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwot
ICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXpl
KSArIG1zZ1NpemU7Ci0gIH1dOwotICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9y
bWF0VGFnU2l6ZShHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0g
IHJlc3VsdCArPSB0YWdTaXplICogY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZv
aWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1
dFN0cmVhbQotICAgICAgICAgICAgICAgICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3Jp
cHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxk
RGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtl
eURhdGFUeXBlOwotICB1aW50MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVs
ZE51bWJlcihmaWVsZCksIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rp
b25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051
bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8g
V3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwot
ICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXpl
ID0gQ29tcHV0ZURpY3RJbnQ2NEZpZWxkU2l6ZShbYUtleSBsb25nTG9uZ1ZhbHVlXSwga01hcEtl
eUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEJv
b2xGaWVsZFNpemUoW2FWYWx1ZSBib29sVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFs
dWVEYXRhVHlwZSk7Ci0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3Qp
bXNnU2l6ZV07Ci0gICAgLy8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RJbnQ2NEZp
ZWxkKG91dHB1dFN0cmVhbSwgW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJl
ciwga2V5RGF0YVR5cGUpOwotICAgIFdyaXRlRGljdEJvb2xGaWVsZChvdXRwdXRTdHJlYW0sIFth
VmFsdWUgYm9vbFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwot
ICB9XTsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAq
KXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5
IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZUJvb2wpIGZvcktleTpA
KGtleS0+dmFsdWVJbnQ2NCldOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6
KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsKLSAgW3NlbGYgZW51bWVy
YXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6XihpbnQ2NF90IGtleSwgQk9PTCB2YWx1ZSwgQk9P
TCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWxsZCIsIGtleV0sICh2YWx1ZSA/IEAidHJ1ZSIgOiBA
ImZhbHNlIikpOwotICB9XTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50NjRfdClrZXkg
dmFsdWU6KEJPT0wgKil2YWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5
IG9iamVjdEZvcktleTpAKGtleSldOwotICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkgewotICAgICp2
YWx1ZSA9IFt3cmFwcGVkIGJvb2xWYWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5V
TEwpOwotfQotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCSW50NjRCb29s
RGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsK
LSAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGljdGlvbmFy
eS0+X2RpY3Rpb25hcnldOwotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9j
cmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9
Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KEJPT0wpdmFsdWUgZm9yS2V5OihpbnQ2NF90KWtleSB7
Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0gIGlm
IChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChf
YXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6
KGludDY0X3QpYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6QChhS2V5
KV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9i
amVjdHNdOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEludDY0IC0+IEZsb2F0Ci0KLUBp
bXBsZW1lbnRhdGlvbiBHUEJJbnQ2NEZsb2F0RGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAgTlNN
dXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0
aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9y
S2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoVmFsdWU6KGZsb2F0KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcktleTooaW50NjRfdClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29t
cGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9y
S2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBb
WyhHUEJJbnQ2NEZsb2F0RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2
YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5z
dGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBmbG9hdCBbXSl2YWx1ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50NjRfdCBbXSlrZXlz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQg
ewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3
ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8g
Z2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQ2NEZsb2F0RGljdGlvbmFy
eSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOnZhbHVlcwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5
V2l0aERpY3Rpb25hcnk6KEdQQkludDY0RmxvYXREaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0g
IC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFy
ZSBpbnZva2luZyBpbml0V2l0aERpY3Rpb25hcnk6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBj
b3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50NjRGbG9hdERpY3Rpb25hcnkqKVtzZWxmIGFsbG9j
XSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7
Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRv
cmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGlu
aXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGZsb2F0IFtdKXZhbHVlcwotICAgICAgICAgICAg
ICAgICAgICAgICBmb3JLZXlzOihjb25zdCBpbnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rpb25h
cnkgYWxsb2NdIGluaXRdOwotICAgIGlmIChjb3VudCAmJiB2YWx1ZXMgJiYga2V5cykgewotICAg
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBbX2Rp
Y3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWVzW2ldKSBmb3JLZXk6QChrZXlzW2ldKV07Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhEaWN0aW9uYXJ5OihHUEJJbnQ2NEZsb2F0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewot
ICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07
Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtfZGljdGlvbmFy
eSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAg
IH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2Fw
YWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21hIHVudXNlZChudW1JdGVtcykK
LSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBd
OwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAg
ICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2Us
IGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9y
KTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tH
UEJJbnQ2NEZsb2F0RGljdGlvbmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGljdGlv
bmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJJbnQ2NEZsb2F0RGljdGlvbmFy
eSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAgICByZXR1cm4gWUVTOwotICB9
Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQkludDY0RmxvYXREaWN0aW9uYXJ5IGNs
YXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBpc0Vx
dWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIHJl
dHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7
Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAlQCB9Iiwg
W3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpY291
bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRl
S2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKGludDY0X3Qga2V5LCBmbG9h
dCB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5
c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3Rv
cCkgewotICAgICAgYmxvY2soW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIFthVmFsdWUgZmxvYXRWYWx1
ZV0sIHN0b3ApOwotICB9XTsKLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFz
RmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgTlNVSW50ZWdlciBjb3VudCA9
IF9kaWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQgPT0gMCkgewotICAgIHJldHVybiAwOwot
ICB9Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUo
ZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBl
OwotICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRl
S2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAq
c3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBD
b21wdXRlRGljdEludDY0RmllbGRTaXplKFthS2V5IGxvbmdMb25nVmFsdWVdLCBrTWFwS2V5Rmll
bGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0RmxvYXRG
aWVsZFNpemUoW2FWYWx1ZSBmbG9hdFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVl
RGF0YVR5cGUpOwotICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50
ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0gIH1dOwotICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNv
bXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQkRhdGFUeXBl
TWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXplICogY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7
Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0
cmVhbSAqKW91dHB1dFN0cmVhbQotICAgICAgICAgICAgICAgICAgICAgICAgIGFzRmllbGQ6KEdQ
QkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9
IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9
IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICB1aW50MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFr
ZVRhZyhHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQp
OwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNO
dW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0
b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJO
b1RhZzp0YWddOwotICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLgotICAgIHNp
emVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RJbnQ2NEZpZWxkU2l6ZShbYUtleSBsb25nTG9uZ1Zh
bHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBD
b21wdXRlRGljdEZsb2F0RmllbGRTaXplKFthVmFsdWUgZmxvYXRWYWx1ZV0sIGtNYXBWYWx1ZUZp
ZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJO
b1RhZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAvLyBXcml0ZSB0aGUgZmllbGRzLgotICAgIFdy
aXRlRGljdEludDY0RmllbGQob3V0cHV0U3RyZWFtLCBbYUtleSBsb25nTG9uZ1ZhbHVlXSwga01h
cEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgV3JpdGVEaWN0RmxvYXRGaWVsZChv
dXRwdXRTdHJlYW0sIFthVmFsdWUgZmxvYXRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2
YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihH
UEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdl
bmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZS0+dmFs
dWVGbG9hdCkgZm9yS2V5OkAoa2V5LT52YWx1ZUludDY0KV07Ci19Ci0KLS0gKHZvaWQpZW51bWVy
YXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sg
ewotICBbc2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazpeKGludDY0X3Qga2V5
LCBmbG9hdCB2YWx1ZSwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkK
LSAgICAgIGJsb2NrKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWxsZCIsIGtleV0sIFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4qZyIsIEZMVF9ESUcsIHZhbHVlXSk7Ci0gIH1d
OwotfQotCi0tIChCT09MKXZhbHVlRm9yS2V5OihpbnQ2NF90KWtleSB2YWx1ZTooZmxvYXQgKil2
YWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpA
KGtleSldOwotICBpZiAod3JhcHBlZCAmJiB2YWx1ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVk
IGZsb2F0VmFsdWVdOwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQotLSAo
dm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkludDY0RmxvYXREaWN0aW9uYXJ5ICop
b3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAgIFtfZGljdGlv
bmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFy
eV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9u
YXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9p
ZClzZXRWYWx1ZTooZmxvYXQpdmFsdWUgZm9yS2V5OihpbnQ2NF90KWtleSB7Ci0gIFtfZGljdGlv
bmFyeSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OkAoa2V5KV07Ci0gIGlmIChfYXV0b2NyZWF0
b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3Is
IHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KGludDY0X3QpYUtl
eSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6QChhS2V5KV07Ci19Ci0KLS0g
KHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNdOwotfQot
Ci1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEludDY0IC0+IERvdWJsZQotCi1AaW1wbGVtZW50YXRp
b24gR1BCSW50NjREb3VibGVEaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBOU011dGFibGVEaWN0
aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewot
ICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwg
Y291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhWYWx1ZTooZG91YmxlKXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eTooaW50NjRfdClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25v
d3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3Vu
dDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQ2
NERvdWJsZURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczomdmFsdWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0
eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBkb3VibGUgW10pdmFsdWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IGludDY0X3QgW10pa2V5cwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAg
Ly8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJl
IGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0
aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCSW50NjREb3VibGVEaWN0aW9uYXJ5Kilb
c2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vu
dDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhEaWN0aW9uYXJ5OihHUEJJbnQ2NERvdWJsZURpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAg
Ly8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJl
IGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNv
cnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQ2NERvdWJsZURpY3Rpb25hcnkqKVtzZWxmIGFsbG9j
XSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChp
bnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7
Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRv
cmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGlu
aXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGRvdWJsZSBbXSl2YWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50NjRfdCBbXSlrZXlzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMpIHsKLSAg
ICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgW19k
aWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tpXSldOwotICAg
ICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoRGljdGlvbmFyeTooR1BCSW50NjREb3VibGVEaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7
Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDow
XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAgICAgW19kaWN0aW9u
YXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0g
ICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
YXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gICNwcmFnbWEgdW51c2VkKG51bUl0ZW1z
KQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6
MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0g
ICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFz
ZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0
b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7Ci0gIHJldHVybiBb
W0dQQkludDY0RG91YmxlRGljdGlvbmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGlj
dGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJJbnQ2NERvdWJsZURpY3Rp
b25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsK
LSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJJbnQ2NERvdWJsZURpY3Rpb25h
cnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4gW19kaWN0aW9uYXJ5
IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciloYXNoIHsK
LSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0
aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVAICVwPiB7ICVA
IH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdl
ciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAodm9pZCllbnVt
ZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoaW50NjRfdCBrZXks
IGRvdWJsZSB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVy
YXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9P
TCAqc3RvcCkgewotICAgICAgYmxvY2soW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIFthVmFsdWUgZG91
YmxlVmFsdWVdLCBzdG9wKTsKLSAgfV07Ci19Ci0KLS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXpl
ZFNpemVBc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIE5TVUludGVnZXIg
Y291bnQgPSBfZGljdGlvbmFyeS5jb3VudDsKLSAgaWYgKGNvdW50ID09IDApIHsKLSAgICByZXR1
cm4gMDsKLSAgfQotCi0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERh
dGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlE
YXRhVHlwZTsKLSAgX19ibG9jayBzaXplX3QgcmVzdWx0ID0gMDsKLSAgW19kaWN0aW9uYXJ5IGVu
dW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFW
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIHNpemVfdCBtc2dT
aXplID0gQ29tcHV0ZURpY3RJbnQ2NEZpZWxkU2l6ZShbYUtleSBsb25nTG9uZ1ZhbHVlXSwga01h
cEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGlj
dERvdWJsZUZpZWxkU2l6ZShbYVZhbHVlIGRvdWJsZVZhbHVlXSwga01hcFZhbHVlRmllbGROdW1i
ZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3VmFyaW50MzJT
aXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0gIH1dOwotICBzaXplX3QgdGFnU2l6
ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQ
QkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXplICogY291bnQ7Ci0gIHJldHVy
biByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOihHUEJDb2Rl
ZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQotICAgICAgICAgICAgICAgICAgICAgICAgIGFz
RmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVE
YXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlE
YXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICB1aW50MzJfdCB0YWcgPSBHUEJXaXJl
Rm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQldpcmVGb3JtYXRMZW5ndGhE
ZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Js
b2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEg
dW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0cHV0U3RyZWFtIHdy
aXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdl
LgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RJbnQ2NEZpZWxkU2l6ZShbYUtleSBs
b25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNn
U2l6ZSArPSBDb21wdXRlRGljdERvdWJsZUZpZWxkU2l6ZShbYVZhbHVlIGRvdWJsZVZhbHVlXSwg
a01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0g
d3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVs
ZHMuCi0gICAgV3JpdGVEaWN0SW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIFthS2V5IGxvbmdMb25n
VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RE
b3VibGVGaWVsZChvdXRwdXRTdHJlYW0sIFthVmFsdWUgZG91YmxlVmFsdWVdLCBrTWFwVmFsdWVG
aWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gIH1dOwotfQotCi0tICh2b2lkKXNldEdQQkdl
bmVyaWNWYWx1ZTooR1BCR2VuZXJpY1ZhbHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2VuZXJpY1Zh
bHVlS2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkgewotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0
OkAodmFsdWUtPnZhbHVlRG91YmxlKSBmb3JLZXk6QChrZXktPnZhbHVlSW50NjQpXTsKLX0KLQot
LSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZh
bHVlT2JqKSlibG9jayB7Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2Nr
Ol4oaW50NjRfdCBrZXksIGRvdWJsZSB2YWx1ZSwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdt
YSB1bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JWxsZCIsIGtleV0sIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4qbGciLCBEQkxfRElH
LCB2YWx1ZV0pOwotICB9XTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50NjRfdClrZXkg
dmFsdWU6KGRvdWJsZSAqKXZhbHVlIHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25h
cnkgb2JqZWN0Rm9yS2V5OkAoa2V5KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAg
KnZhbHVlID0gW3dyYXBwZWQgZG91YmxlVmFsdWVdOwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAh
PSBOVUxMKTsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkludDY0
RG91YmxlRGljdGlvbmFyeSAqKW90aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25h
cnkpIHsKLSAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGlj
dGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQ
QkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAg
fQotICB9Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGRvdWJsZSl2YWx1ZSBmb3JLZXk6KGludDY0
X3Qpa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBmb3JLZXk6QChrZXkp
XTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1v
ZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1
ZUZvcktleTooaW50NjRfdClhS2V5IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktl
eTpAKGFLZXkpXTsKLX0KLQotLSAodm9pZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVt
b3ZlQWxsT2JqZWN0c107Ci19Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gSW50NjQgLT4gRW51
bQotCi1AaW1wbGVtZW50YXRpb24gR1BCSW50NjRFbnVtRGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UK
LSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci0gIEdQQkVudW1WYWxpZGF0aW9u
RnVuYyBfdmFsaWRhdGlvbkZ1bmM7Ci19Ci0KLUBzeW50aGVzaXplIHZhbGlkYXRpb25GdW5jID0g
X3ZhbGlkYXRpb25GdW5jOwotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0gIHJldHVy
biBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpOVUxMCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczpOVUxMCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czpOVUxMCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDowXSBhdXRvcmVsZWFz
ZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlv
bjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10g
aW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcktleXM6TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0
YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0
aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3
VmFsdWU6KGludDMyX3QpcmF3VmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleTooaW50NjRfdClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0
aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1
ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJl
dHVybiBbWyhHUEJJbnQ2NEVudW1EaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxp
ZGF0aW9uRnVuY3Rpb246ZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOiZyYXdWYWx1ZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19
Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjooR1BC
RW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJhd1ZhbHVlczooY29uc3QgaW50MzJfdCBbXSlyYXdWYWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgaW50NjRfdCBbXSlr
ZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5T
VUludGVnZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25v
d3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3Vu
dDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJJbnQ2
NEVudW1EaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246
ZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmF3VmFsdWVzOnJhd1ZhbHVlcwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOmtl
eXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0
YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJJbnQ2NEVudW1EaWN0aW9uYXJ5
ICopZGljdGlvbmFyeSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93
cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50
OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDY0
RW51bURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFy
eV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxp
ZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMg
ewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZnVu
YyBjYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpOVUxMIHJh
d1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYyB7
Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpmdW5jIHJhd1ZhbHVl
czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXJh
d1ZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25z
dCBpbnQ2NF90IFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gIGlmIChz
ZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGlu
aXRdOwotICAgIF92YWxpZGF0aW9uRnVuYyA9IChmdW5jICE9IE5VTEwgPyBmdW5jIDogRGljdERl
ZmF1bHRfSXNWYWxpZFZhbHVlKTsKLSAgICBpZiAoY291bnQgJiYgcmF3VmFsdWVzICYmIGtleXMp
IHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHJhd1ZhbHVlc1tpXSkgZm9yS2V5OkAoa2V5c1tp
XSldOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCSW50NjRFbnVtRGljdGlvbmFyeSAqKWRpY3Rp
b25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZGljdGlv
bmFyeS52YWxpZGF0aW9uRnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdW
YWx1ZXM6TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6TlVM
TAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MF07Ci0gIGlmIChz
ZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtfZGljdGlvbmFyeSBhZGRFbnRy
aWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwotICAgIH0KLSAgfQot
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1
bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1
bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlv
bjpmdW5jIHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAodm9p
ZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAgQCIlQDog
QXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRvcjog
JUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIFtfZGljdGlv
bmFyeSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
Y29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCSW50NjRFbnVtRGlj
dGlvbmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0K
LQotLSAoQk9PTClpc0VxdWFsOihHUEJJbnQ2NEVudW1EaWN0aW9uYXJ5ICopb3RoZXIgewotICBp
ZiAoc2VsZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIg
aXNLaW5kT2ZDbGFzczpbR1BCSW50NjRFbnVtRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0
dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpvdGhlci0+X2RpY3Rp
b25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gX2RpY3Rpb25hcnku
Y291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICByZXR1cm4gW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxmIGNsYXNzXSwgc2Vs
ZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIF9k
aWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRSYXdWYWx1ZXNV
c2luZ0Jsb2NrOgotICAgICh2b2lkICheKShpbnQ2NF90IGtleSwgaW50MzJfdCB2YWx1ZSwgQk9P
TCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNV
c2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAg
YmxvY2soW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIFthVmFsdWUgaW50VmFsdWVdLCBzdG9wKTsKLSAg
fV07Ci19Ci0KLS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVs
ZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIE5TVUludGVnZXIgY291bnQgPSBfZGljdGlvbmFyeS5j
b3VudDsKLSAgaWYgKGNvdW50ID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIEdQQkRh
dGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BC
RGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgX19ibG9jayBz
aXplX3QgcmVzdWx0ID0gMDsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3Rz
VXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAj
cHJhZ21hIHVudXNlZChzdG9wKQotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RJbnQ2
NEZpZWxkU2l6ZShbYUtleSBsb25nTG9uZ1ZhbHVlXSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlE
YXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEVudW1GaWVsZFNpemUoW2FWYWx1
ZSBpbnRWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICBy
ZXN1bHQgKz0gR1BCQ29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkgKyBt
c2dTaXplOwotICB9XTsKLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRh
Z1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1
bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdy
aXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJl
YW0KLSAgICAgICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3Ig
KilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFU
eXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRh
VHlwZTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1i
ZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgW19kaWN0aW9uYXJ5
IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNOdW1iZXIg
KmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8vIFdyaXRl
IHRoZSB0YWcuCi0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAv
LyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6ZSA9IENv
bXB1dGVEaWN0SW50NjRGaWVsZFNpemUoW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVs
ZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RFbnVtRmll
bGRTaXplKFthVmFsdWUgaW50VmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRh
VHlwZSk7Ci0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6
ZV07Ci0gICAgLy8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RJbnQ2NEZpZWxkKG91
dHB1dFN0cmVhbSwgW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5
RGF0YVR5cGUpOwotICAgIFdyaXRlRGljdEVudW1GaWVsZChvdXRwdXRTdHJlYW0sIFthVmFsdWUg
aW50VmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gIH1dOwot
fQotCi0tIChOU0RhdGEgKilzZXJpYWxpemVkRGF0YUZvclVua25vd25WYWx1ZTooaW50MzJfdCl2
YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KEdQQkdlbmVy
aWNWYWx1ZSAqKWtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5RGF0YVR5cGU6
KEdQQkRhdGFUeXBlKWtleURhdGFUeXBlIHsKLSAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGlj
dEludDY0RmllbGRTaXplKGtleS0+dmFsdWVJbnQ2NCwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlE
YXRhVHlwZSk7Ci0gIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RFbnVtRmllbGRTaXplKHZhbHVlLCBr
TWFwVmFsdWVGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVFbnVtKTsKLSAgTlNNdXRhYmxlRGF0YSAq
ZGF0YSA9IFtOU011dGFibGVEYXRhIGRhdGFXaXRoTGVuZ3RoOm1zZ1NpemVdOwotICBHUEJDb2Rl
ZE91dHB1dFN0cmVhbSAqb3V0cHV0U3RyZWFtID0gW1tHUEJDb2RlZE91dHB1dFN0cmVhbSBhbGxv
Y10gaW5pdFdpdGhEYXRhOmRhdGFdOwotICBXcml0ZURpY3RJbnQ2NEZpZWxkKG91dHB1dFN0cmVh
bSwga2V5LT52YWx1ZUludDY0LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAg
V3JpdGVEaWN0RW51bUZpZWxkKG91dHB1dFN0cmVhbSwgdmFsdWUsIGtNYXBWYWx1ZUZpZWxkTnVt
YmVyLCBHUEJEYXRhVHlwZUVudW0pOwotICBbb3V0cHV0U3RyZWFtIHJlbGVhc2VdOwotICByZXR1
cm4gZGF0YTsKLX0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFsdWUg
Kil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtl
eSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZS0+dmFsdWVFbnVtKSBmb3JLZXk6
QChrZXktPnZhbHVlSW50NjQpXTsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0
Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIFtzZWxmIGVudW1l
cmF0ZUtleXNBbmRSYXdWYWx1ZXNVc2luZ0Jsb2NrOl4oaW50NjRfdCBrZXksIGludDMyX3QgdmFs
dWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgICBibG9j
ayhbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVsbGQiLCBrZXldLCBAKHZhbHVlKSk7Ci0g
IH1dOwotfQotCi0tIChCT09MKXZhbHVlRm9yS2V5OihpbnQ2NF90KWtleSB2YWx1ZTooaW50MzJf
dCAqKXZhbHVlIHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkgb2JqZWN0Rm9y
S2V5OkAoa2V5KV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgaW50MzJfdCByZXN1
bHQgPSBbd3JhcHBlZCBpbnRWYWx1ZV07Ci0gICAgaWYgKCFfdmFsaWRhdGlvbkZ1bmMocmVzdWx0
KSkgewotICAgICAgcmVzdWx0ID0ga0dQQlVucmVjb2duaXplZEVudW1lcmF0b3JWYWx1ZTsKLSAg
ICB9Ci0gICAgKnZhbHVlID0gcmVzdWx0OwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAhPSBOVUxM
KTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleTooaW50NjRfdClrZXkgcmF3VmFsdWU6KGludDMy
X3QgKilyYXdWYWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVj
dEZvcktleTpAKGtleSldOwotICBpZiAod3JhcHBlZCAmJiByYXdWYWx1ZSkgewotICAgICpyYXdW
YWx1ZSA9IFt3cmFwcGVkIGludFZhbHVlXTsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVM
TCk7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAg
KHZvaWQgKF4pKGludDY0X3Qga2V5LCBpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7
Ci0gIEdQQkVudW1WYWxpZGF0aW9uRnVuYyBmdW5jID0gX3ZhbGlkYXRpb25GdW5jOwotICBbX2Rp
Y3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFL
ZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
U051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgaW50MzJfdCB1bndyYXBwZWQgPSBbYVZh
bHVlIGludFZhbHVlXTsKLSAgICAgIGlmICghZnVuYyh1bndyYXBwZWQpKSB7Ci0gICAgICAgIHVu
d3JhcHBlZCA9IGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWU7Ci0gICAgICB9Ci0gICAg
ICBibG9jayhbYUtleSBsb25nTG9uZ1ZhbHVlXSwgdW53cmFwcGVkLCBzdG9wKTsKLSAgfV07Ci19
Ci0KLS0gKHZvaWQpYWRkUmF3RW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJJbnQ2NEVudW1EaWN0
aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAg
IFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5f
ZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2NyZWF0
ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0K
LQotLSAodm9pZClzZXRSYXdWYWx1ZTooaW50MzJfdCl2YWx1ZSBmb3JLZXk6KGludDY0X3Qpa2V5
IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBmb3JLZXk6QChrZXkpXTsKLSAg
aWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVk
KF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktl
eTooaW50NjRfdClhS2V5IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTpAKGFL
ZXkpXTsKLX0KLQotLSAodm9pZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxs
T2JqZWN0c107Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGludDMyX3QpdmFsdWUgZm9yS2V5Oihp
bnQ2NF90KWtleSB7Ci0gIGlmICghX3ZhbGlkYXRpb25GdW5jKHZhbHVlKSkgewotICAgIFtOU0V4
Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgotICAgICAgICAgICAgICAg
IGZvcm1hdDpAIkdQQkludDY0RW51bURpY3Rpb25hcnk6IEF0dGVtcHQgdG8gc2V0IGFuIHVua25v
d24gZW51bSB2YWx1ZSAoJWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVdOwotICB9
Ci0KLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBmb3JLZXk6QChrZXkpXTsKLSAg
aWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVk
KF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBJ
bnQ2NCAtPiBPYmplY3QKLQotQGltcGxlbWVudGF0aW9uIEdQQkludDY0T2JqZWN0RGljdGlvbmFy
eSB7Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0K
LSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGlu
aXRXaXRoT2JqZWN0czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19
Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aE9iamVjdDooaWQpb2JqZWN0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KGludDY0X3Qpa2V5IHsKLSAgLy8gQ2Fz
dCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9r
aW5nIGluaXRXaXRoT2JqZWN0czpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5
cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkludDY0T2JqZWN0RGljdGlvbmFyeSopW3NlbGYg
YWxsb2NdIGluaXRXaXRoT2JqZWN0czomb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoT2Jq
ZWN0czooY29uc3QgaWQgW10pb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yS2V5czooY29uc3QgaW50NjRfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28g
dGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoT2Jq
ZWN0czpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAg
cmV0dXJuIFtbKEdQQkludDY0T2JqZWN0RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRo
T2JqZWN0czpvYmplY3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVh
c2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJJ
bnQ2NE9iamVjdERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQg
c28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRo
RGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBb
WyhHUEJJbnQ2NE9iamVjdERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25h
cnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlv
bmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxm
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoT2JqZWN0czpOVUxM
IGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT2Jq
ZWN0czooY29uc3QgaWQgW10pb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5
czooY29uc3QgaW50NjRfdCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYp
IHsKLSAgICBfZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07
Ci0gICAgaWYgKGNvdW50ICYmIG9iamVjdHMgJiYga2V5cykgewotICAgICAgZm9yIChOU1VJbnRl
Z2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoIW9iamVjdHNbaV0pIHsK
LSAgICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24K
LSAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRvIGFkZCBuaWwgb2Jq
ZWN0IHRvIGEgRGljdGlvbmFyeSJdOwotICAgICAgICB9Ci0gICAgICAgIFtfZGljdGlvbmFyeSBz
ZXRPYmplY3Q6b2JqZWN0c1tpXSBmb3JLZXk6QChrZXlzW2ldKV07Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9u
YXJ5OihHUEJJbnQ2NE9iamVjdERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtz
ZWxmIGluaXRXaXRoT2JqZWN0czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNl
bGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJp
ZXNGcm9tRGljdGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9Ci0g
IHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtcyB7Ci0gICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4g
W3NlbGYgaW5pdFdpdGhPYmplY3RzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAgICBA
IiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVh
dG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAgW19k
aWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tHUEJJbnQ2NE9i
amVjdERpY3Rpb25hcnkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2Vs
Zl07Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BCSW50NjRPYmplY3REaWN0aW9uYXJ5ICopb3Ro
ZXIgewotICBpZiAoc2VsZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYg
KCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbR1BCSW50NjRPYmplY3REaWN0aW9uYXJ5IGNsYXNzXV0p
IHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBpc0VxdWFsOm90
aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIHJldHVybiBf
ZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyAlQCB9IiwgW3NlbGYg
Y2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewot
ICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0Fu
ZE9iamVjdHNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShpbnQ2NF90IGtleSwgaWQgb2JqZWN0
LCBCT09MICpzdG9wKSlibG9jayB7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2Jq
ZWN0c1VzaW5nQmxvY2s6XihOU051bWJlciAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkIGFPYmplY3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgICBi
bG9jayhbYUtleSBsb25nTG9uZ1ZhbHVlXSwgYU9iamVjdCwgc3RvcCk7Ci0gIH1dOwotfQotCi0t
IChCT09MKWlzSW5pdGlhbGl6ZWQgewotICBmb3IgKEdQQk1lc3NhZ2UgKm1zZyBpbiBbX2RpY3Rp
b25hcnkgb2JqZWN0RW51bWVyYXRvcl0pIHsKLSAgICBpZiAoIW1zZy5pbml0aWFsaXplZCkgewot
ICAgICAgcmV0dXJuIE5POwotICAgIH0KLSAgfQotICByZXR1cm4gWUVTOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpZGVlcENvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7Ci0gIEdQQkludDY0T2Jq
ZWN0RGljdGlvbmFyeSAqbmV3RGljdCA9Ci0gICAgICBbW0dQQkludDY0T2JqZWN0RGljdGlvbmFy
eSBhbGxvY10gaW5pdF07Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1Vz
aW5nQmxvY2s6XihpZCBhS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1BCTWVzc2FnZSAqbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51
c2VkKHN0b3ApCi0gICAgR1BCTWVzc2FnZSAqY29waWVkTXNnID0gW21zZyBjb3B5V2l0aFpvbmU6
em9uZV07Ci0gICAgW25ld0RpY3QtPl9kaWN0aW9uYXJ5IHNldE9iamVjdDpjb3BpZWRNc2cgZm9y
S2V5OmFLZXldOwotICAgIFtjb3BpZWRNc2cgcmVsZWFzZV07Ci0gIH1dOwotICByZXR1cm4gbmV3
RGljdDsKLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZp
ZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgTlNVSW50ZWdlciBjb3VudCA9IF9kaWN0aW9uYXJ5
LmNvdW50OwotICBpZiAoY291bnQgPT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgR1BC
RGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBH
UEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICBfX2Jsb2Nr
IHNpemVfdCByZXN1bHQgPSAwOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVj
dHNVc2luZ0Jsb2NrOl4oTlNOdW1iZXIgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZCBhT2JqZWN0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFn
bWEgdW51c2VkKHN0b3ApCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEludDY0Rmll
bGRTaXplKFthS2V5IGxvbmdMb25nVmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFU
eXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0T2JqZWN0RmllbGRTaXplKGFPYmplY3Qs
IGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICByZXN1bHQgKz0gR1BC
Q29tcHV0ZVJhd1ZhcmludDMyU2l6ZUZvckludGVnZXIobXNnU2l6ZSkgKyBtc2dTaXplOwotICB9
XTsKLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BCRmll
bGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFnU2l6
ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2RlZE91
dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0g
IEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsK
LSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgdWlu
dDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBH
UEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtl
eXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TTnVtYmVyICphS2V5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgYU9iamVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsK
LSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgIC8vIFdyaXRlIHRoZSB0YWcuCi0gICAgW291
dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAvLyBXcml0ZSB0aGUgc2l6ZSBv
ZiB0aGUgbWVzc2FnZS4KLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0SW50NjRGaWVs
ZFNpemUoW2FLZXkgbG9uZ0xvbmdWYWx1ZV0sIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5
cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RPYmplY3RGaWVsZFNpemUoYU9iamVjdCwg
a01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0g
d3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVs
ZHMuCi0gICAgV3JpdGVEaWN0SW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIFthS2V5IGxvbmdMb25n
VmFsdWVdLCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RP
YmplY3RGaWVsZChvdXRwdXRTdHJlYW0sIGFPYmplY3QsIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2
YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihH
UEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdl
bmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6dmFsdWUtPnZhbHVl
U3RyaW5nIGZvcktleTpAKGtleS0+dmFsdWVJbnQ2NCldOwotfQotCi0tICh2b2lkKWVudW1lcmF0
ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsK
LSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oaW50NjRfdCBrZXks
IGlkIG9iamVjdCwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAg
ICAgIGJsb2NrKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWxsZCIsIGtleV0sIG9iamVj
dCk7Ci0gIH1dOwotfQotCi0tIChpZClvYmplY3RGb3JLZXk6KGludDY0X3Qpa2V5IHsKLSAgaWQg
cmVzdWx0ID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTpAKGtleSldOwotICByZXR1cm4gcmVz
dWx0OwotfQotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCSW50NjRPYmpl
Y3REaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkg
ewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9u
YXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0
b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0g
IH0KLX0KLQotLSAodm9pZClzZXRPYmplY3Q6KGlkKW9iamVjdCBmb3JLZXk6KGludDY0X3Qpa2V5
IHsKLSAgaWYgKCFvYmplY3QpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJn
dW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRvIGFk
ZCBuaWwgb2JqZWN0IHRvIGEgRGljdGlvbmFyeSJdOwotICB9Ci0gIFtfZGljdGlvbmFyeSBzZXRP
YmplY3Q6b2JqZWN0IGZvcktleTpAKGtleSldOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAg
R1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAg
fQotfQotCi0tICh2b2lkKXJlbW92ZU9iamVjdEZvcktleTooaW50NjRfdClhS2V5IHsKLSAgW19k
aWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTpAKGFLZXkpXTsKLX0KLQotLSAodm9pZClyZW1v
dmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxsT2JqZWN0c107Ci19Ci0KLUBlbmQKLQot
Ly8lUERETS1FWFBBTkQgRElDVElPTkFSWV9QT0RfSU1QTF9GT1JfS0VZKFN0cmluZywgTlNTdHJp
bmcsICosIE9CSkVDVCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5v
dCBlZGl0IGl0IGRpcmVjdGx5LgotCi0jcHJhZ21hIG1hcmsgLSBTdHJpbmcgLT4gVUludDMyCi0K
LUBpbXBsZW1lbnRhdGlvbiBHUEJTdHJpbmdVSW50MzJEaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQot
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBl
KWRpY3Rpb25hcnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVM
TCBmb3JLZXlzOk5VTEwgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5
cGUpZGljdGlvbmFyeVdpdGhWYWx1ZToodWludDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yS2V5OihOU1N0cmluZyAqKWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVk
IHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0
aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4K
LSAgcmV0dXJuIFtbKEdQQlN0cmluZ1VJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0
V2l0aFZhbHVlczomdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVh
c2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IHVp
bnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihj
b25zdCBOU1N0cmluZyAqIFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21w
aWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JL
ZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtb
KEdQQlN0cmluZ1VJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0K
LQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCU3RyaW5nVUlu
dDMyRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUg
Y29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9u
YXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlN0
cmluZ1VJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGlj
dGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5
czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6KGNv
bnN0IHVpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihj
b25zdCBOU1N0cmluZyAqIFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoo
TlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gIGlmIChzZWxmKSB7
Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwot
ICAgIGlmIChjb3VudCAmJiB2YWx1ZXMgJiYga2V5cykgewotICAgICAgZm9yIChOU1VJbnRlZ2Vy
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoIWtleXNbaV0pIHsKLSAgICAg
ICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRvIGFkZCBuaWwga2V5IHRvIGEg
RGljdGlvbmFyeSJdOwotICAgICAgICB9Ci0gICAgICAgIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6
QCh2YWx1ZXNbaV0pIGZvcktleTprZXlzW2ldXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlN0
cmluZ1VJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRX
aXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAoc2VsZikgewotICAg
IGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0
aW9uYXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51
bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0
V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAodm9pZClkZWFs
bG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAgQCIlQDogQXV0b2Ny
ZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRvcjogJUAiLAot
ICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIFtfZGljdGlvbmFyeSBy
ZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpY29weVdp
dGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCU3RyaW5nVUludDMyRGljdGlv
bmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQot
LSAoQk9PTClpc0VxdWFsOihHUEJTdHJpbmdVSW50MzJEaWN0aW9uYXJ5ICopb3RoZXIgewotICBp
ZiAoc2VsZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIg
aXNLaW5kT2ZDbGFzczpbR1BCU3RyaW5nVUludDMyRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAg
cmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpvdGhlci0+X2Rp
Y3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gX2RpY3Rpb25h
cnkuY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxmIGNsYXNzXSwg
c2VsZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJu
IF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNV
c2luZ0Jsb2NrOgotICAgICh2b2lkICheKShOU1N0cmluZyAqa2V5LCB1aW50MzJfdCB2YWx1ZSwg
Qk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVj
dHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAg
ICAgYmxvY2soYUtleSwgW2FWYWx1ZSB1bnNpZ25lZEludFZhbHVlXSwgc3RvcCk7Ci0gIH1dOwot
fQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNj
cmlwdG9yICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7
Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlw
ZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFU
eXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90
IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5n
QmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdt
YSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0U3RyaW5nRmll
bGRTaXplKGFLZXksIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1Np
emUgKz0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoW2FWYWx1ZSB1bnNpZ25lZEludFZhbHVl
XSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIHJlc3VsdCArPSBH
UEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0g
IH1dOwotICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVXaXJlRm9ybWF0VGFnU2l6ZShHUEJG
aWVsZE51bWJlcihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2FnZSk7Ci0gIHJlc3VsdCArPSB0YWdT
aXplICogY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQpd3JpdGVUb0NvZGVk
T3V0cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dFN0cmVhbQotICAgICAg
ICAgICAgICAgICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsK
LSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQp
OwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICB1
aW50MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhHUEJGaWVsZE51bWJlcihmaWVsZCks
IEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRl
S2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmFLZXksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAq
c3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgLy8gV3JpdGUgdGhlIHRhZy4K
LSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwotICAgIC8vIFdyaXRlIHRo
ZSBzaXplIG9mIHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RT
dHJpbmdGaWVsZFNpemUoYUtleSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0g
ICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdFVJbnQzMkZpZWxkU2l6ZShbYVZhbHVlIHVuc2lnbmVk
SW50VmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgW291
dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07Ci0gICAgLy8gV3Jp
dGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RTdHJpbmdGaWVsZChvdXRwdXRTdHJlYW0sIGFL
ZXksIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIFdyaXRlRGljdFVJbnQz
MkZpZWxkKG91dHB1dFN0cmVhbSwgW2FWYWx1ZSB1bnNpZ25lZEludFZhbHVlXSwga01hcFZhbHVl
RmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsKLX0KLQotLSAodm9pZClzZXRHUEJH
ZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNW
YWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVj
dDpAKHZhbHVlLT52YWx1ZVVJbnQzMikgZm9yS2V5OmtleS0+dmFsdWVTdHJpbmddOwotfQotCi0t
ICh2b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFs
dWVPYmopKWJsb2NrIHsKLSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6
XihOU1N0cmluZyAqa2V5LCB1aW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkgewotICAgICAgI3By
YWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKGtleSwgW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIldSIsIHZhbHVlXSk7Ci0gIH1dOwotfQotCi0tIChCT09MKXZhbHVlRm9yS2V5OihO
U1N0cmluZyAqKWtleSB2YWx1ZToodWludDMyX3QgKil2YWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFw
cGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldOwotICBpZiAod3JhcHBlZCAmJiB2
YWx1ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIHVuc2lnbmVkSW50VmFsdWVdOwotICB9Ci0g
IHJldHVybiAod3JhcHBlZCAhPSBOVUxMKTsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURp
Y3Rpb25hcnk6KEdQQlN0cmluZ1VJbnQzMkRpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewot
ICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9t
RGljdGlvbmFyeTpvdGhlckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1dG9j
cmVhdG9yKSB7Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2Ny
ZWF0b3IsIHNlbGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldFZhbHVlOih1aW50MzJf
dCl2YWx1ZSBmb3JLZXk6KE5TU3RyaW5nICopa2V5IHsKLSAgaWYgKCFrZXkpIHsKLSAgICBbTlNF
eGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAg
ICBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRvIGFkZCBuaWwga2V5IHRvIGEgRGljdGlvbmFyeSJdOwot
ICB9Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OmtleV07Ci0gIGlm
IChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChf
YXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6
KE5TU3RyaW5nICopYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6YUtl
eV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9i
amVjdHNdOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIFN0cmluZyAtPiBJbnQzMgotCi1A
aW1wbGVtZW50YXRpb24gR1BCU3RyaW5nSW50MzJEaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBO
U011dGFibGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBm
b3JLZXlzOk5VTEwgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhWYWx1ZTooaW50MzJfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JLZXk6KE5TU3RyaW5nICopa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28g
dGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFs
dWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICBy
ZXR1cm4gW1soR1BCU3RyaW5nSW50MzJEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhW
YWx1ZXM6JnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19
Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgaW50MzJfdCBb
XSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgTlNT
dHJpbmcgKiBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5T
VUludGVnZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25v
d3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3Vu
dDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJTdHJp
bmdJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JLZXlzOmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlN0cmluZ0ludDMyRGljdGlvbmFy
eSAqKWRpY3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25v
d3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBv
biB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlN0cmluZ0ludDMyRGlj
dGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRv
cmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihO
U1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2Fw
YWNpdHk6bnVtSXRlbXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQg
ewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6
MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgaW50MzJfdCBb
XSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgTlNTdHJpbmcg
KiBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291
bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9u
YXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQg
JiYgdmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgaWYgKCFrZXlzW2ldKSB7Ci0gICAgICAgICAgW05TRXhjZXB0
aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAg
ICAgZm9ybWF0OkAiQXR0ZW1wdGluZyB0byBhZGQgbmlsIGtleSB0byBhIERpY3Rpb25hcnkiXTsK
LSAgICAgICAgfQotICAgICAgICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWVzW2ldKSBm
b3JLZXk6a2V5c1tpXV07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJTdHJpbmdJbnQzMkRpY3Rp
b25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwg
Zm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5
KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25h
cnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3By
YWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxM
IGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3Nl
cnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBj
bGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2Vs
ZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIFtfZGljdGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1
cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUg
Kil6b25lIHsKLSAgcmV0dXJuIFtbR1BCU3RyaW5nSW50MzJEaWN0aW9uYXJ5IGFsbG9jV2l0aFpv
bmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6
KEdQQlN0cmluZ0ludDMyRGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIp
IHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQ
QlN0cmluZ0ludDMyRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0g
IHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpvdGhlci0+X2RpY3Rpb25hcnldOwotfQotCi0t
IChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0g
KE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxmIGNsYXNzXSwgc2VsZiwgX2RpY3Rpb25hcnld
OwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50
OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2
b2lkICheKShOU1N0cmluZyAqa2V5LCBpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7
Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0
cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgICBibG9jayhhS2V5LCBbYVZh
bHVlIGludFZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlh
bGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBOU1VJbnRl
Z2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAg
cmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0Rmll
bGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFw
S2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFy
eSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVy
ICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3Qg
bXNnU2l6ZSA9IENvbXB1dGVEaWN0U3RyaW5nRmllbGRTaXplKGFLZXksIGtNYXBLZXlGaWVsZE51
bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RJbnQzMkZpZWxk
U2l6ZShbYVZhbHVlIGludFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5
cGUpOwotICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlciht
c2dTaXplKSArIG1zZ1NpemU7Ci0gIH1dOwotICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVX
aXJlRm9ybWF0VGFnU2l6ZShHUEJGaWVsZE51bWJlcihmaWVsZCksIEdQQkRhdGFUeXBlTWVzc2Fn
ZSk7Ci0gIHJlc3VsdCArPSB0YWdTaXplICogY291bnQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0K
LS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAq
KW91dHB1dFN0cmVhbQotICAgICAgICAgICAgICAgICAgICAgICAgIGFzRmllbGQ6KEdQQkZpZWxk
RGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdl
dEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxk
Lm1hcEtleURhdGFUeXBlOwotICB1aW50MzJfdCB0YWcgPSBHUEJXaXJlRm9ybWF0TWFrZVRhZyhH
UEJGaWVsZE51bWJlcihmaWVsZCksIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQpOwotICBb
X2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcg
KmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0g
ICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0
YWddOwotICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLgotICAgIHNpemVfdCBt
c2dTaXplID0gQ29tcHV0ZURpY3RTdHJpbmdGaWVsZFNpemUoYUtleSwga01hcEtleUZpZWxkTnVt
YmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEludDMyRmllbGRT
aXplKFthVmFsdWUgaW50VmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlw
ZSk7Ci0gICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07
Ci0gICAgLy8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RTdHJpbmdGaWVsZChvdXRw
dXRTdHJlYW0sIGFLZXksIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIFdy
aXRlRGljdEludDMyRmllbGQob3V0cHV0U3RyZWFtLCBbYVZhbHVlIGludFZhbHVlXSwga01hcFZh
bHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsKLX0KLQotLSAodm9pZClzZXRH
UEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVy
aWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9i
amVjdDpAKHZhbHVlLT52YWx1ZUludDMyKSBmb3JLZXk6a2V5LT52YWx1ZVN0cmluZ107Ci19Ci0K
LS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2
YWx1ZU9iaikpYmxvY2sgewotICBbc2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9j
azpeKE5TU3RyaW5nICprZXksIGludDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNw
cmFnbWEgdW51c2VkKHN0b3ApCi0gICAgICBibG9jayhrZXksIFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiJWQiLCB2YWx1ZV0pOwotICB9XTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleToo
TlNTdHJpbmcgKilrZXkgdmFsdWU6KGludDMyX3QgKil2YWx1ZSB7Ci0gIE5TTnVtYmVyICp3cmFw
cGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldOwotICBpZiAod3JhcHBlZCAmJiB2
YWx1ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIGludFZhbHVlXTsKLSAgfQotICByZXR1cm4g
KHdyYXBwZWQgIT0gTlVMTCk7Ci19Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5
OihHUEJTdHJpbmdJbnQzMkRpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotICBpZiAob3Ro
ZXJEaWN0aW9uYXJ5KSB7Ci0gICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFy
eTpvdGhlckRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7
Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNl
bGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldFZhbHVlOihpbnQzMl90KXZhbHVlIGZv
cktleTooTlNTdHJpbmcgKilrZXkgewotICBpZiAoIWtleSkgewotICAgIFtOU0V4Y2VwdGlvbiBy
YWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpA
IkF0dGVtcHRpbmcgdG8gYWRkIG5pbCBrZXkgdG8gYSBEaWN0aW9uYXJ5Il07Ci0gIH0KLSAgW19k
aWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBmb3JLZXk6a2V5XTsKLSAgaWYgKF9hdXRvY3Jl
YXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRv
ciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleTooTlNTdHJpbmcg
KilhS2V5IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTphS2V5XTsKLX0KLQot
LSAodm9pZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxsT2JqZWN0c107Ci19
Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gU3RyaW5nIC0+IFVJbnQ2NAotCi1AaW1wbGVtZW50
YXRpb24gR1BCU3RyaW5nVUludDY0RGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5
IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpO
VUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoVmFsdWU6KHVpbnQ2NF90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcktleTooTlNTdHJpbmcgKilrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29t
cGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9y
S2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBb
WyhHUEJTdHJpbmdVSW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6
JnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCB1aW50NjRfdCBbXSl2
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgTlNTdHJp
bmcgKiBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUlu
dGVnZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mg
d2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoK
LSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJTdHJpbmdV
SW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cktleXM6a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQlN0cmluZ1VJbnQ2NERpY3Rpb25h
cnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtu
b3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8g
b24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJTdHJpbmdVSW50NjRE
aWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1
dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6
KE5TVUludGVnZXIpbnVtSXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3Vu
dDowXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCB1aW50NjRf
dCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgTlNTdHJp
bmcgKiBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIp
Y291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF9kaWN0
aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBpZiAoY291
bnQgJiYgdmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKCFrZXlzW2ldKSB7Ci0gICAgICAgICAgW05TRXhj
ZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0OkAiQXR0ZW1wdGluZyB0byBhZGQgbmlsIGtleSB0byBhIERpY3Rpb25hcnki
XTsKLSAgICAgICAgfQotICAgICAgICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWVzW2ld
KSBmb3JLZXk6a2V5c1tpXV07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJTdHJpbmdVSW50NjRE
aWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZhbHVlczpO
VUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGljdGlv
bmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpkaWN0
aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0g
ICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6
TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5T
QXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3Qg
YmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAg
W3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVsZWFzZV07Ci0g
IFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNa
b25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQlN0cmluZ1VJbnQ2NERpY3Rpb25hcnkgYWxsb2NX
aXRoWm9uZTp6b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNF
cXVhbDooR1BCU3RyaW5nVUludDY0RGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0g
b3RoZXIpIHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xh
c3M6W0dQQlN0cmluZ1VJbnQ2NERpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsK
LSAgfQotICByZXR1cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5XTsK
LX0KLQotLSAoTlNVSW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50Owot
fQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9kaWN0
aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlvbmFy
eS5jb3VudDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoK
LSAgICAodm9pZCAoXikoTlNTdHJpbmcgKmtleSwgdWludDY0X3QgdmFsdWUsIEJPT0wgKnN0b3Ap
KWJsb2NrIHsKLSAgW19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9j
azpeKE5TU3RyaW5nICphS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAgIGJsb2NrKGFL
ZXksIFthVmFsdWUgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0t
IChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9y
ICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlm
IChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1
ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtl
eURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3Vs
dCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6
XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVz
ZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0U3RyaW5nRmllbGRTaXpl
KGFLZXksIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0g
Q29tcHV0ZURpY3RVSW50NjRGaWVsZFNpemUoW2FWYWx1ZSB1bnNpZ25lZExvbmdMb25nVmFsdWVd
LCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQ
QkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAg
fV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZp
ZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1Np
emUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRP
dXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewot
ICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7
Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVp
bnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwg
R1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVL
ZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpz
dG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgot
ICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhl
IHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFN0
cmluZ0ZpZWxkU2l6ZShhS2V5LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAg
ICBtc2dTaXplICs9IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKFthVmFsdWUgdW5zaWduZWRM
b25nTG9uZ1ZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAg
IFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8v
IFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgV3JpdGVEaWN0U3RyaW5nRmllbGQob3V0cHV0U3RyZWFt
LCBhS2V5LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RV
SW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIFthVmFsdWUgdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSwg
a01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICB9XTsKLX0KLQotLSAodm9p
ZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQ
QkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5
IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZVVJbnQ2NCkgZm9yS2V5OmtleS0+dmFsdWVTdHJpbmdd
OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9i
aiwgaWQgdmFsdWVPYmopKWJsb2NrIHsKLSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZFZhbHVlc1Vz
aW5nQmxvY2s6XihOU1N0cmluZyAqa2V5LCB1aW50NjRfdCB2YWx1ZSwgQk9PTCAqc3RvcCkgewot
ICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgIGJsb2NrKGtleSwgW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlbGx1IiwgdmFsdWVdKTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFs
dWVGb3JLZXk6KE5TU3RyaW5nICopa2V5IHZhbHVlOih1aW50NjRfdCAqKXZhbHVlIHsKLSAgTlNO
dW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV07Ci0gIGlmICh3
cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgKnZhbHVlID0gW3dyYXBwZWQgdW5zaWduZWRMb25nTG9u
Z1ZhbHVlXTsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci19Ci0KLS0gKHZvaWQp
YWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJTdHJpbmdVSW50NjREaWN0aW9uYXJ5ICopb3Ro
ZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAgIFtfZGljdGlvbmFy
eSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07
Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5
TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClz
ZXRWYWx1ZToodWludDY0X3QpdmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKWtleSB7Ci0gIGlmICgh
a2V5KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9u
Ci0gICAgICAgICAgICAgICAgZm9ybWF0OkAiQXR0ZW1wdGluZyB0byBhZGQgbmlsIGtleSB0byBh
IERpY3Rpb25hcnkiXTsKLSAgfQotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAodmFsdWUpIGZv
cktleTprZXldOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0
aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJl
bW92ZVZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWFLZXkgewotICBbX2RpY3Rpb25hcnkgcmVtb3Zl
T2JqZWN0Rm9yS2V5OmFLZXldOwotfQotCi0tICh2b2lkKXJlbW92ZUFsbCB7Ci0gIFtfZGljdGlv
bmFyeSByZW1vdmVBbGxPYmplY3RzXTsKLX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBTdHJp
bmcgLT4gSW50NjQKLQotQGltcGxlbWVudGF0aW9uIEdQQlN0cmluZ0ludDY0RGljdGlvbmFyeSB7
Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rpb25hcnk7Ci19Ci0KLSsg
KGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRX
aXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQot
KyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KGludDY0X3QpdmFsdWUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihOU1N0cmluZyAqKWtleSB7Ci0gIC8vIENh
c3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZv
a2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5
cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlN0cmluZ0ludDY0RGljdGlvbmFyeSopW3NlbGYg
YWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6MV0g
YXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6
KGNvbnN0IGludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cktleXM6KGNvbnN0IE5TU3RyaW5nICogW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28g
dGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFs
dWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICBy
ZXR1cm4gW1soR1BCU3RyaW5nSW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhW
YWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2Vd
OwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJTdHJp
bmdJbnQ2NERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28g
dGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoRGlj
dGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhH
UEJTdHJpbmdJbnQ2NERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6
ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFy
eVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9y
S2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZXM6
KGNvbnN0IGludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6
KGNvbnN0IE5TU3RyaW5nICogW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYp
IHsKLSAgICBfZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07
Ci0gICAgaWYgKGNvdW50ICYmIHZhbHVlcyAmJiBrZXlzKSB7Ci0gICAgICBmb3IgKE5TVUludGVn
ZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmICgha2V5c1tpXSkgewotICAg
ICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgotICAg
ICAgICAgICAgICAgICAgICAgIGZvcm1hdDpAIkF0dGVtcHRpbmcgdG8gYWRkIG5pbCBrZXkgdG8g
YSBEaWN0aW9uYXJ5Il07Ci0gICAgICAgIH0KLSAgICAgICAgW19kaWN0aW9uYXJ5IHNldE9iamVj
dDpAKHZhbHVlc1tpXSkgZm9yS2V5OmtleXNbaV1dOwotICAgICAgfQotICAgIH0KLSAgfQotICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BC
U3RyaW5nSW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0
V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAg
ICBpZiAoZGljdGlvbmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGlj
dGlvbmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBz
ZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlcilu
dW1JdGVtcyB7Ci0gICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5p
dFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9j
cmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwK
LSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkg
cmVsZWFzZV07Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlX
aXRoWm9uZTooTlNab25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQlN0cmluZ0ludDY0RGljdGlv
bmFyeSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQot
LSAoQk9PTClpc0VxdWFsOihHUEJTdHJpbmdJbnQ2NERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlm
IChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBp
c0tpbmRPZkNsYXNzOltHUEJTdHJpbmdJbnQ2NERpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJl
dHVybiBOTzsKLSAgfQotICByZXR1cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0
aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5
LmNvdW50OwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNl
bGYsIF9kaWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBf
ZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNp
bmdCbG9jazoKLSAgICAodm9pZCAoXikoTlNTdHJpbmcgKmtleSwgaW50NjRfdCB2YWx1ZSwgQk9P
TCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNV
c2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAg
YmxvY2soYUtleSwgW2FWYWx1ZSBsb25nTG9uZ1ZhbHVlXSwgc3RvcCk7Ci0gIH1dOwotfQotCi0t
IChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9y
ICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7Ci0gIGlm
IChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlwZSB2YWx1
ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtl
eURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90IHJlc3Vs
dCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6
XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVz
ZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0U3RyaW5nRmllbGRTaXpl
KGFLZXksIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1NpemUgKz0g
Q29tcHV0ZURpY3RJbnQ2NEZpZWxkU2l6ZShbYVZhbHVlIGxvbmdMb25nVmFsdWVdLCBrTWFwVmFs
dWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVS
YXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgfV07Ci0gIHNp
emVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVtYmVy
KGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBjb3Vu
dDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJl
YW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJEYXRh
VHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRh
dGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQzMl90IHRh
ZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2lyZUZv
cm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2Jq
ZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0g
ICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgIFtvdXRw
dXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNpemUgb2Yg
dGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFN0cmluZ0ZpZWxk
U2l6ZShhS2V5LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXpl
ICs9IENvbXB1dGVEaWN0SW50NjRGaWVsZFNpemUoW2FWYWx1ZSBsb25nTG9uZ1ZhbHVlXSwga01h
cFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3Jp
dGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMu
Ci0gICAgV3JpdGVEaWN0U3RyaW5nRmllbGQob3V0cHV0U3RyZWFtLCBhS2V5LCBrTWFwS2V5Rmll
bGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RJbnQ2NEZpZWxkKG91dHB1dFN0
cmVhbSwgW2FWYWx1ZSBsb25nTG9uZ1ZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVl
RGF0YVR5cGUpOwotICB9XTsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdl
bmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJp
Y1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZUlu
dDY0KSBmb3JLZXk6a2V5LT52YWx1ZVN0cmluZ107Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9y
VGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBb
c2VsZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazpeKE5TU3RyaW5nICprZXksIGlu
dDY0X3QgdmFsdWUsIEJPT0wgKnN0b3ApIHsKLSAgICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0g
ICAgICBibG9jayhrZXksIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWxsZCIsIHZhbHVl
XSk7Ci0gIH1dOwotfQotCi0tIChCT09MKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleSB2YWx1
ZTooaW50NjRfdCAqKXZhbHVlIHsKLSAgTlNOdW1iZXIgKndyYXBwZWQgPSBbX2RpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5OmtleV07Ci0gIGlmICh3cmFwcGVkICYmIHZhbHVlKSB7Ci0gICAgKnZhbHVl
ID0gW3dyYXBwZWQgbG9uZ0xvbmdWYWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5V
TEwpOwotfQotCi0tICh2b2lkKWFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTooR1BCU3RyaW5nSW50
NjREaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkg
ewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9u
YXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0
b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0g
IH0KLX0KLQotLSAodm9pZClzZXRWYWx1ZTooaW50NjRfdCl2YWx1ZSBmb3JLZXk6KE5TU3RyaW5n
ICopa2V5IHsKLSAgaWYgKCFrZXkpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlk
QXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRv
IGFkZCBuaWwga2V5IHRvIGEgRGljdGlvbmFyeSJdOwotICB9Ci0gIFtfZGljdGlvbmFyeSBzZXRP
YmplY3Q6QCh2YWx1ZSkgZm9yS2V5OmtleV07Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBH
UEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9
Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KE5TU3RyaW5nICopYUtleSB7Ci0gIFtf
ZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6YUtleV07Ci19Ci0KLS0gKHZvaWQpcmVtb3Zl
QWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNdOwotfQotCi1AZW5kCi0KLSNw
cmFnbWEgbWFyayAtIFN0cmluZyAtPiBCb29sCi0KLUBpbXBsZW1lbnRhdGlvbiBHUEJTdHJpbmdC
b29sRGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RpY3Rp
b25hcnk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3Nl
bGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdIGF1dG9y
ZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWU6KEJPT0wp
dmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihOU1N0cmluZyAqKWtl
eSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNz
IHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0
byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlN0cmluZ0Jvb2xEaWN0aW9u
YXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6JnZhbHVlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdp
dGhWYWx1ZXM6KGNvbnN0IEJPT0wgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcktleXM6KGNvbnN0IE5TU3RyaW5nICogW10pa2V5cwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVk
ZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRX
aXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0
LgotICByZXR1cm4gW1soR1BCU3RyaW5nQm9vbERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0
V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVh
c2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJT
dHJpbmdCb29sRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBz
byB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhE
aWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtb
KEdQQlN0cmluZ0Jvb2xEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5
OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZv
cktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVz
Oihjb25zdCBCT09MIFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihj
b25zdCBOU1N0cmluZyAqIFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoo
TlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gIGlmIChzZWxmKSB7
Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwot
ICAgIGlmIChjb3VudCAmJiB2YWx1ZXMgJiYga2V5cykgewotICAgICAgZm9yIChOU1VJbnRlZ2Vy
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoIWtleXNbaV0pIHsKLSAgICAg
ICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRvIGFkZCBuaWwga2V5IHRvIGEg
RGljdGlvbmFyeSJdOwotICAgICAgICB9Ci0gICAgICAgIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6
QCh2YWx1ZXNbaV0pIGZvcktleTprZXlzW2ldXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQlN0
cmluZ0Jvb2xEaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0
aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBp
ZiAoZGljdGlvbmFyeSkgewotICAgICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlv
bmFyeTpkaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxm
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1J
dGVtcyB7Ci0gICNwcmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdp
dGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVh
dG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAg
ICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwotICBbX2RpY3Rpb25hcnkgcmVs
ZWFzZV07Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRo
Wm9uZTooTlNab25lICopem9uZSB7Ci0gIHJldHVybiBbW0dQQlN0cmluZ0Jvb2xEaWN0aW9uYXJ5
IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChC
T09MKWlzRXF1YWw6KEdQQlN0cmluZ0Jvb2xEaWN0aW9uYXJ5ICopb3RoZXIgewotICBpZiAoc2Vs
ZiA9PSBvdGhlcikgewotICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIgaXNLaW5k
T2ZDbGFzczpbR1BCU3RyaW5nQm9vbERpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBO
TzsKLSAgfQotICByZXR1cm4gW19kaWN0aW9uYXJ5IGlzRXF1YWw6b3RoZXItPl9kaWN0aW9uYXJ5
XTsKLX0KLQotLSAoTlNVSW50ZWdlciloYXNoIHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50
OwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgcmV0dXJuIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiPCVAICVwPiB7ICVAIH0iLCBbc2VsZiBjbGFzc10sIHNlbGYsIF9k
aWN0aW9uYXJ5XTsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVybiBfZGljdGlv
bmFyeS5jb3VudDsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9j
azoKLSAgICAodm9pZCAoXikoTlNTdHJpbmcgKmtleSwgQk9PTCB2YWx1ZSwgQk9PTCAqc3RvcCkp
YmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2Nr
Ol4oTlNTdHJpbmcgKmFLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soYUtl
eSwgW2FWYWx1ZSBib29sVmFsdWVdLCBzdG9wKTsKLSAgfV07Ci19Ci0KLS0gKHNpemVfdCljb21w
dXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0g
IE5TVUludGVnZXIgY291bnQgPSBfZGljdGlvbmFyeS5jb3VudDsKLSAgaWYgKGNvdW50ID09IDAp
IHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBH
UEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBm
aWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgX19ibG9jayBzaXplX3QgcmVzdWx0ID0gMDsKLSAgW19k
aWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TU3RyaW5nICph
S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlNOdW1iZXIgKmFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJPT0wgKnN0b3ApIHsKLSAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAg
IHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RTdHJpbmdGaWVsZFNpemUoYUtleSwga01hcEtl
eUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEJv
b2xGaWVsZFNpemUoW2FWYWx1ZSBib29sVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFs
dWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJ
bnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgfV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BC
Q29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5
cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0
U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDoo
R1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBl
ID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBl
ID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRN
YWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRl
ZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihO
U1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQo
c3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQz
Mk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAg
c2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFN0cmluZ0ZpZWxkU2l6ZShhS2V5LCBrTWFwS2V5
RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0Qm9v
bEZpZWxkU2l6ZShbYVZhbHVlIGJvb2xWYWx1ZV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1
ZURhdGFUeXBlKTsKLSAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdClt
c2dTaXplXTsKLSAgICAvLyBXcml0ZSB0aGUgZmllbGRzLgotICAgIFdyaXRlRGljdFN0cmluZ0Zp
ZWxkKG91dHB1dFN0cmVhbSwgYUtleSwga01hcEtleUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7
Ci0gICAgV3JpdGVEaWN0Qm9vbEZpZWxkKG91dHB1dFN0cmVhbSwgW2FWYWx1ZSBib29sVmFsdWVd
LCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gIH1dOwotfQotCi0tICh2
b2lkKXNldEdQQkdlbmVyaWNWYWx1ZTooR1BCR2VuZXJpY1ZhbHVlICopdmFsdWUKLSAgICAgZm9y
R1BCR2VuZXJpY1ZhbHVlS2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkgewotICBbX2RpY3Rpb25h
cnkgc2V0T2JqZWN0OkAodmFsdWUtPnZhbHVlQm9vbCkgZm9yS2V5OmtleS0+dmFsdWVTdHJpbmdd
OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9i
aiwgaWQgdmFsdWVPYmopKWJsb2NrIHsKLSAgW3NlbGYgZW51bWVyYXRlS2V5c0FuZFZhbHVlc1Vz
aW5nQmxvY2s6XihOU1N0cmluZyAqa2V5LCBCT09MIHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAg
ICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgICAgYmxvY2soa2V5LCAodmFsdWUgPyBAInRydWUi
IDogQCJmYWxzZSIpKTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KE5TU3RyaW5n
ICopa2V5IHZhbHVlOihCT09MICopdmFsdWUgewotICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5XTsKLSAgaWYgKHdyYXBwZWQgJiYgdmFsdWUpIHsKLSAg
ICAqdmFsdWUgPSBbd3JhcHBlZCBib29sVmFsdWVdOwotICB9Ci0gIHJldHVybiAod3JhcHBlZCAh
PSBOVUxMKTsKLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQlN0cmlu
Z0Jvb2xEaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFy
eSkgewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0
aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgICAgR1BC
QXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9
Ci0gIH0KLX0KLQotLSAodm9pZClzZXRWYWx1ZTooQk9PTCl2YWx1ZSBmb3JLZXk6KE5TU3RyaW5n
ICopa2V5IHsKLSAgaWYgKCFrZXkpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlk
QXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRv
IGFkZCBuaWwga2V5IHRvIGEgRGljdGlvbmFyeSJdOwotICB9Ci0gIFtfZGljdGlvbmFyeSBzZXRP
YmplY3Q6QCh2YWx1ZSkgZm9yS2V5OmtleV07Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBH
UEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9
Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KE5TU3RyaW5nICopYUtleSB7Ci0gIFtf
ZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6YUtleV07Ci19Ci0KLS0gKHZvaWQpcmVtb3Zl
QWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNdOwotfQotCi1AZW5kCi0KLSNw
cmFnbWEgbWFyayAtIFN0cmluZyAtPiBGbG9hdAotCi1AaW1wbGVtZW50YXRpb24gR1BCU3RyaW5n
RmxvYXREaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZGlj
dGlvbmFyeTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewotICByZXR1cm4gW1tb
c2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF0gYXV0
b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooZmxv
YXQpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihOU1N0cmluZyAq
KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBv
biB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlN0cmluZ0Zsb2F0RGlj
dGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2YWx1ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6Jmtl
eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlv
bmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGZsb2F0IFtdKXZhbHVlcwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JLZXlzOihjb25zdCBOU1N0cmluZyAqIFtdKWtleXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIC8vIENhc3Qg
aXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2lu
ZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUg
Y29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlN0cmluZ0Zsb2F0RGljdGlvbmFyeSopW3NlbGYgYWxs
b2NdIGluaXRXaXRoVmFsdWVzOnZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6Y291bnRd
IGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlv
bmFyeTooR1BCU3RyaW5nRmxvYXREaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIC8vIENhc3Qg
aXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2lu
ZyBpbml0V2l0aERpY3Rpb25hcnk6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0Lgot
ICByZXR1cm4gW1soR1BCU3RyaW5nRmxvYXREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdp
dGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0
eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICByZXR1
cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2Vd
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZh
bHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoVmFsdWVzOihjb25zdCBmbG9hdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czooY29uc3QgTlNTdHJpbmcgKiBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICBpZiAoc2VsZikgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFs
bG9jXSBpbml0XTsKLSAgICBpZiAoY291bnQgJiYgdmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZv
ciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKCFrZXlz
W2ldKSB7Ci0gICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhj
ZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OkAiQXR0ZW1wdGluZyB0byBhZGQg
bmlsIGtleSB0byBhIERpY3Rpb25hcnkiXTsKLSAgICAgICAgfQotICAgICAgICBbX2RpY3Rpb25h
cnkgc2V0T2JqZWN0OkAodmFsdWVzW2ldKSBmb3JLZXk6a2V5c1tpXV07Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0
aW9uYXJ5OihHUEJTdHJpbmdGbG9hdERpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9
IFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAo
c2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICBbX2RpY3Rpb25hcnkgYWRkRW50
cmllc0Zyb21EaWN0aW9uYXJ5OmRpY3Rpb25hcnktPl9kaWN0aW9uYXJ5XTsKLSAgICB9Ci0gIH0K
LSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihO
U1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVy
biBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQot
LSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAgICAgICAg
QCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBhdXRvY3Jl
YXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7Ci0gIFtf
ZGljdGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCU3RyaW5n
RmxvYXREaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNl
bGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQlN0cmluZ0Zsb2F0RGljdGlvbmFyeSAqKW90
aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIGlm
ICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQlN0cmluZ0Zsb2F0RGljdGlvbmFyeSBjbGFzc11d
KSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVhbDpv
dGhlci0+X2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4g
X2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtzZWxm
IGNsYXNzXSwgc2VsZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsK
LSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNB
bmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShOU1N0cmluZyAqa2V5LCBmbG9hdCB2
YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0Fu
ZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmFLZXksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3RvcCkg
ewotICAgICAgYmxvY2soYUtleSwgW2FWYWx1ZSBmbG9hdFZhbHVlXSwgc3RvcCk7Ci0gIH1dOwot
fQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNj
cmlwdG9yICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnkuY291bnQ7
Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJEYXRhVHlw
ZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFU
eXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sgc2l6ZV90
IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5n
QmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdt
YSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0U3RyaW5nRmll
bGRTaXplKGFLZXksIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIG1zZ1Np
emUgKz0gQ29tcHV0ZURpY3RGbG9hdEZpZWxkU2l6ZShbYVZhbHVlIGZsb2F0VmFsdWVdLCBrTWFw
VmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNvbXB1
dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgfV07Ci0g
IHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVt
YmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBj
b3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRT
dHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJE
YXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQ
QkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQzMl90
IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2ly
ZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5k
T2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7
Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgIFtv
dXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNpemUg
b2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFN0cmluZ0Zp
ZWxkU2l6ZShhS2V5LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBtc2dT
aXplICs9IENvbXB1dGVEaWN0RmxvYXRGaWVsZFNpemUoW2FWYWx1ZSBmbG9hdFZhbHVlXSwga01h
cFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3Jp
dGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMu
Ci0gICAgV3JpdGVEaWN0U3RyaW5nRmllbGQob3V0cHV0U3RyZWFtLCBhS2V5LCBrTWFwS2V5Rmll
bGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RGbG9hdEZpZWxkKG91dHB1dFN0
cmVhbSwgW2FWYWx1ZSBmbG9hdFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0
YVR5cGUpOwotICB9XTsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVy
aWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1Zh
bHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52YWx1ZUZsb2F0
KSBmb3JLZXk6a2V5LT52YWx1ZVN0cmluZ107Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4
dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBbc2Vs
ZiBlbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazpeKE5TU3RyaW5nICprZXksIGZsb2F0
IHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJhZ21hIHVudXNlZChzdG9wKQotICAgICAg
YmxvY2soa2V5LCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiUuKmciLCBGTFRfRElHLCB2
YWx1ZV0pOwotICB9XTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkg
dmFsdWU6KGZsb2F0ICopdmFsdWUgewotICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6a2V5XTsKLSAgaWYgKHdyYXBwZWQgJiYgdmFsdWUpIHsKLSAgICAqdmFs
dWUgPSBbd3JhcHBlZCBmbG9hdFZhbHVlXTsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVM
TCk7Ci19Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJTdHJpbmdGbG9h
dERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7
Ci0gICAgW19kaWN0aW9uYXJ5IGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTpvdGhlckRpY3Rpb25h
cnktPl9kaWN0aW9uYXJ5XTsKLSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgICBHUEJBdXRv
Y3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICAgIH0KLSAg
fQotfQotCi0tICh2b2lkKXNldFZhbHVlOihmbG9hdCl2YWx1ZSBmb3JLZXk6KE5TU3RyaW5nICop
a2V5IHsKLSAgaWYgKCFrZXkpIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJn
dW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRvIGFk
ZCBuaWwga2V5IHRvIGEgRGljdGlvbmFyeSJdOwotICB9Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6QCh2YWx1ZSkgZm9yS2V5OmtleV07Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJB
dXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19
Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KE5TU3RyaW5nICopYUtleSB7Ci0gIFtfZGlj
dGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6YUtleV07Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxs
IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVjdHNdOwotfQotCi1AZW5kCi0KLSNwcmFn
bWEgbWFyayAtIFN0cmluZyAtPiBEb3VibGUKLQotQGltcGxlbWVudGF0aW9uIEdQQlN0cmluZ0Rv
dWJsZURpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9kaWN0
aW9uYXJ5OwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0gIHJldHVybiBbW1tz
ZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRv
cmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihkb3Vi
bGUpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5OihOU1N0cmluZyAq
KWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBv
biB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQlN0cmluZ0RvdWJsZURp
Y3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczomdmFsdWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czom
a2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGlj
dGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGRvdWJsZSBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgTlNTdHJpbmcgKiBbXSlrZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICAvLyBD
YXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52
b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0
eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhHUEJTdHJpbmdEb3VibGVEaWN0aW9uYXJ5Kilbc2Vs
ZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aERpY3Rpb25hcnk6KEdQQlN0cmluZ0RvdWJsZURpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAg
Ly8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJl
IGludm9raW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNv
cnJlY3QuCi0gIHJldHVybiBbWyhHUEJTdHJpbmdEb3VibGVEaWN0aW9uYXJ5Kilbc2VsZiBhbGxv
Y10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAo
aW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMg
ewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1JdGVtc10gYXV0
b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBbc2VsZiBp
bml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBkb3VibGUgW10pdmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IE5TU3RyaW5nICogW10pa2V5cwotICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBfZGljdGlvbmFyeSA9IFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgaWYgKGNvdW50ICYmIHZhbHVlcyAmJiBrZXlzKSB7
Ci0gICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IGlmICgha2V5c1tpXSkgewotICAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRB
cmd1bWVudEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDpAIkF0dGVtcHRp
bmcgdG8gYWRkIG5pbCBrZXkgdG8gYSBEaWN0aW9uYXJ5Il07Ci0gICAgICAgIH0KLSAgICAgICAg
W19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlc1tpXSkgZm9yS2V5OmtleXNbaV1dOwotICAg
ICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoRGljdGlvbmFyeTooR1BCU3RyaW5nRG91YmxlRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkg
ewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6
MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtfZGljdGlv
bmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwot
ICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAjcHJhZ21hIHVudXNlZChudW1JdGVt
cykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50
OjBdOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAot
ICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVh
c2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVh
dG9yKTsKLSAgW19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4g
W1tHUEJTdHJpbmdEb3VibGVEaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhE
aWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQlN0cmluZ0RvdWJsZURp
Y3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlF
UzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJTdHJpbmdEb3VibGVEaWN0
aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFtfZGljdGlv
bmFyeSBpc0VxdWFsOm90aGVyLT5fZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFz
aCB7Ci0gIHJldHVybiBfZGljdGlvbmFyeS5jb3VudDsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNj
cmlwdGlvbiB7Ci0gIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4g
eyAlQCB9IiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBfZGljdGlvbmFyeV07Ci19Ci0KLS0gKE5TVUlu
dGVnZXIpY291bnQgewotICByZXR1cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKHZvaWQp
ZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKE5TU3RyaW5n
ICprZXksIGRvdWJsZSB2YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBbX2RpY3Rpb25hcnkg
ZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmFLZXksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAq
YVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQk9PTCAqc3RvcCkgewotICAgICAgYmxvY2soYUtleSwgW2FWYWx1ZSBkb3VibGVWYWx1ZV0s
IHN0b3ApOwotICB9XTsKLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFzRmll
bGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgTlNVSW50ZWdlciBjb3VudCA9IF9k
aWN0aW9uYXJ5LmNvdW50OwotICBpZiAoY291bnQgPT0gMCkgewotICAgIHJldHVybiAwOwotICB9
Ci0KLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmll
bGQpOwotICBHUEJEYXRhVHlwZSBrZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwot
ICBfX2Jsb2NrIHNpemVfdCByZXN1bHQgPSAwOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5
c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmFLZXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqc3Rv
cCkgewotICAgICNwcmFnbWEgdW51c2VkKHN0b3ApCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21w
dXRlRGljdFN0cmluZ0ZpZWxkU2l6ZShhS2V5LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFU
eXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0RG91YmxlRmllbGRTaXplKFthVmFsdWUg
ZG91YmxlVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAg
cmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsg
bXNnU2l6ZTsKLSAgfV07Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRU
YWdTaXplKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVz
dWx0ICs9IHRhZ1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3
cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3Ry
ZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9y
ICopZmllbGQgewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRh
VHlwZShmaWVsZCk7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0
YVR5cGU7Ci0gIHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVt
YmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFy
eSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVy
ICphVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCT09MICpzdG9wKSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0
ZSB0aGUgdGFnLgotICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAg
Ly8gV3JpdGUgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBD
b21wdXRlRGljdFN0cmluZ0ZpZWxkU2l6ZShhS2V5LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURh
dGFUeXBlKTsKLSAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0RG91YmxlRmllbGRTaXplKFthVmFs
dWUgZG91YmxlVmFsdWVdLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0g
ICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07Ci0gICAg
Ly8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICBXcml0ZURpY3RTdHJpbmdGaWVsZChvdXRwdXRTdHJl
YW0sIGFLZXksIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAgIFdyaXRlRGlj
dERvdWJsZUZpZWxkKG91dHB1dFN0cmVhbSwgW2FWYWx1ZSBkb3VibGVWYWx1ZV0sIGtNYXBWYWx1
ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0R1BC
R2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmlj
VmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleSB7Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6QCh2YWx1ZS0+dmFsdWVEb3VibGUpIGZvcktleTprZXktPnZhbHVlU3RyaW5nXTsKLX0KLQot
LSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZh
bHVlT2JqKSlibG9jayB7Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2Nr
Ol4oTlNTdHJpbmcgKmtleSwgZG91YmxlIHZhbHVlLCBCT09MICpzdG9wKSB7Ci0gICAgICAjcHJh
Z21hIHVudXNlZChzdG9wKQotICAgICAgYmxvY2soa2V5LCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiUuKmxnIiwgREJMX0RJRywgdmFsdWVdKTsKLSAgfV07Ci19Ci0KLS0gKEJPT0wpdmFs
dWVGb3JLZXk6KE5TU3RyaW5nICopa2V5IHZhbHVlOihkb3VibGUgKil2YWx1ZSB7Ci0gIE5TTnVt
YmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldOwotICBpZiAod3Jh
cHBlZCAmJiB2YWx1ZSkgewotICAgICp2YWx1ZSA9IFt3cmFwcGVkIGRvdWJsZVZhbHVlXTsKLSAg
fQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci19Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zy
b21EaWN0aW9uYXJ5OihHUEJTdHJpbmdEb3VibGVEaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5
IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVz
RnJvbURpY3Rpb25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9h
dXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1
dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClzZXRWYWx1ZTooZG91
YmxlKXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrZXkgewotICBpZiAoIWtleSkgewotICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgotICAgICAgICAgICAg
ICAgIGZvcm1hdDpAIkF0dGVtcHRpbmcgdG8gYWRkIG5pbCBrZXkgdG8gYSBEaWN0aW9uYXJ5Il07
Ci0gIH0KLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlKSBmb3JLZXk6a2V5XTsKLSAg
aWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVk
KF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktl
eTooTlNTdHJpbmcgKilhS2V5IHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTph
S2V5XTsKLX0KLQotLSAodm9pZClyZW1vdmVBbGwgewotICBbX2RpY3Rpb25hcnkgcmVtb3ZlQWxs
T2JqZWN0c107Ci19Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gU3RyaW5nIC0+IEVudW0KLQot
QGltcGxlbWVudGF0aW9uIEdQQlN0cmluZ0VudW1EaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBO
U011dGFibGVEaWN0aW9uYXJ5ICpfZGljdGlvbmFyeTsKLSAgR1BCRW51bVZhbGlkYXRpb25GdW5j
IF92YWxpZGF0aW9uRnVuYzsKLX0KLQotQHN5bnRoZXNpemUgdmFsaWRhdGlvbkZ1bmMgPSBfdmFs
aWRhdGlvbkZ1bmM7Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtb
W3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOk5VTEwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOk5VTEwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOk5VTEwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsK
LX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihH
UEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0
V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJhd1ZhbHVlczpOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yS2V5czpOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjooR1BCRW51bVZhbGlkYXRpb25G
dW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1
ZTooaW50MzJfdClyYXdWYWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yS2V5OihOU1N0cmluZyAqKWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRo
ZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVl
czpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0
dXJuIFtbKEdQQlN0cmluZ0VudW1EaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxp
ZGF0aW9uRnVuY3Rpb246ZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczomcmF3VmFsdWUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07
Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5jdGlvbjoo
R1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJhd1ZhbHVlczooY29uc3QgaW50MzJfdCBbXSlyYXdWYWx1ZXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgTlNTdHJpbmcg
KiBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnQ6KE5TVUludGVnZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGls
ZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6Zm9yS2V5
czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVybiBbWyhH
UEJTdHJpbmdFbnVtRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsaWRhdGlvbkZ1
bmN0aW9uOmZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6cmF3VmFsdWVzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JLZXlzOmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0K
LQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCU3RyaW5nRW51
bURpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNv
bXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZv
cktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4g
W1soR1BCU3RyaW5nRW51bURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25h
cnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlv
bmFyeVdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVn
ZXIpbnVtSXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxpZGF0aW9u
RnVuY3Rpb246ZnVuYyBjYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25GdW5j
dGlvbjpOVUxMIHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlv
bkZ1bmMpZnVuYyB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpm
dW5jIHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMp
ZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBp
bnQzMl90IFtdKXJhd1ZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JLZXlzOihjb25zdCBOU1N0cmluZyAqIFtdKWtleXMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwotICAgIF92YWxpZGF0aW9uRnVuYyA9IChmdW5jICE9IE5VTEwg
PyBmdW5jIDogRGljdERlZmF1bHRfSXNWYWxpZFZhbHVlKTsKLSAgICBpZiAoY291bnQgJiYgcmF3
VmFsdWVzICYmIGtleXMpIHsKLSAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKLSAgICAgICAgaWYgKCFrZXlzW2ldKSB7Ci0gICAgICAgICAgW05TRXhjZXB0aW9u
IHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0OkAiQXR0ZW1wdGluZyB0byBhZGQgbmlsIGtleSB0byBhIERpY3Rpb25hcnkiXTsKLSAg
ICAgICAgfQotICAgICAgICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0OkAocmF3VmFsdWVzW2ldKSBm
b3JLZXk6a2V5c1tpXV07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJTdHJpbmdFbnVtRGljdGlv
bmFyeSAqKWRpY3Rpb25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWxpZGF0aW9uRnVu
Y3Rpb246ZGljdGlvbmFyeS52YWxpZGF0aW9uRnVuYwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByYXdWYWx1ZXM6TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcktleXM6TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6
MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIFtfZGljdGlv
bmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6ZGljdGlvbmFyeS0+X2RpY3Rpb25hcnldOwot
ICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
VmFsaWRhdGlvbkZ1bmN0aW9uOihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsK
LSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbGlk
YXRpb25GdW5jdGlvbjpmdW5jIHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsK
LX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAgICAg
ICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNlLCBh
dXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRvcik7
Ci0gIFtfZGljdGlvbmFyeSByZWxlYXNlXTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BC
U3RyaW5nRW51bURpY3Rpb25hcnkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aERpY3Rpb25h
cnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BCU3RyaW5nRW51bURpY3Rpb25hcnkg
KilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQot
ICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJTdHJpbmdFbnVtRGljdGlvbmFyeSBjbGFz
c11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgaXNFcXVh
bDpvdGhlci0+X2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1
cm4gX2RpY3Rpb25hcnkuY291bnQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewot
ICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsgJUAgfSIsIFtz
ZWxmIGNsYXNzXSwgc2VsZiwgX2RpY3Rpb25hcnldOwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50
IHsKLSAgcmV0dXJuIF9kaWN0aW9uYXJ5LmNvdW50OwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtl
eXNBbmRSYXdWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShOU1N0cmluZyAqa2V5LCBp
bnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJh
dGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09M
ICpzdG9wKSB7Ci0gICAgICBibG9jayhhS2V5LCBbYVZhbHVlIGludFZhbHVlXSwgc3RvcCk7Ci0g
IH1dOwotfQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmll
bGREZXNjcmlwdG9yICopZmllbGQgewotICBOU1VJbnRlZ2VyIGNvdW50ID0gX2RpY3Rpb25hcnku
Y291bnQ7Ci0gIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBHUEJE
YXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEdQ
QkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIF9fYmxvY2sg
c2l6ZV90IHJlc3VsdCA9IDA7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0
c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAg
I3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0U3Ry
aW5nRmllbGRTaXplKGFLZXksIGtNYXBLZXlGaWVsZE51bWJlciwga2V5RGF0YVR5cGUpOwotICAg
IG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RFbnVtRmllbGRTaXplKFthVmFsdWUgaW50VmFsdWVdLCBr
TWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgcmVzdWx0ICs9IEdQQkNv
bXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgfV07
Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxk
TnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUg
KiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRw
dXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBH
UEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0g
IEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gIHVpbnQz
Ml90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BC
V2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlz
QW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqYUtleSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTnVtYmVyICphVmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9w
KSB7Ci0gICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAg
IFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgLy8gV3JpdGUgdGhlIHNp
emUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdFN0cmlu
Z0ZpZWxkU2l6ZShhS2V5LCBrTWFwS2V5RmllbGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBt
c2dTaXplICs9IENvbXB1dGVEaWN0RW51bUZpZWxkU2l6ZShbYVZhbHVlIGludFZhbHVlXSwga01h
cFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIFtvdXRwdXRTdHJlYW0gd3Jp
dGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMu
Ci0gICAgV3JpdGVEaWN0U3RyaW5nRmllbGQob3V0cHV0U3RyZWFtLCBhS2V5LCBrTWFwS2V5Rmll
bGROdW1iZXIsIGtleURhdGFUeXBlKTsKLSAgICBXcml0ZURpY3RFbnVtRmllbGQob3V0cHV0U3Ry
ZWFtLCBbYVZhbHVlIGludFZhbHVlXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5
cGUpOwotICB9XTsKLX0KLQotLSAoTlNEYXRhICopc2VyaWFsaXplZERhdGFGb3JVbmtub3duVmFs
dWU6KGludDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
S2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtleURhdGFUeXBlOihHUEJEYXRhVHlwZSlrZXlEYXRhVHlwZSB7Ci0gIHNpemVfdCBtc2dTaXpl
ID0gQ29tcHV0ZURpY3RTdHJpbmdGaWVsZFNpemUoa2V5LT52YWx1ZVN0cmluZywga01hcEtleUZp
ZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RFbnVtRmll
bGRTaXplKHZhbHVlLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVFbnVtKTsKLSAg
TlNNdXRhYmxlRGF0YSAqZGF0YSA9IFtOU011dGFibGVEYXRhIGRhdGFXaXRoTGVuZ3RoOm1zZ1Np
emVdOwotICBHUEJDb2RlZE91dHB1dFN0cmVhbSAqb3V0cHV0U3RyZWFtID0gW1tHUEJDb2RlZE91
dHB1dFN0cmVhbSBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFdOwotICBXcml0ZURpY3RTdHJpbmdG
aWVsZChvdXRwdXRTdHJlYW0sIGtleS0+dmFsdWVTdHJpbmcsIGtNYXBLZXlGaWVsZE51bWJlciwg
a2V5RGF0YVR5cGUpOwotICBXcml0ZURpY3RFbnVtRmllbGQob3V0cHV0U3RyZWFtLCB2YWx1ZSwg
a01hcFZhbHVlRmllbGROdW1iZXIsIEdQQkRhdGFUeXBlRW51bSk7Ci0gIFtvdXRwdXRTdHJlYW0g
cmVsZWFzZV07Ci0gIHJldHVybiBkYXRhOwotfQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6
KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BC
R2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpAKHZhbHVlLT52
YWx1ZUVudW0pIGZvcktleTprZXktPnZhbHVlU3RyaW5nXTsKLX0KLQotLSAodm9pZCllbnVtZXJh
dGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7
Ci0gIFtzZWxmIGVudW1lcmF0ZUtleXNBbmRSYXdWYWx1ZXNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcg
KmtleSwgaW50MzJfdCB2YWx1ZSwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQo
c3RvcCkKLSAgICAgIGJsb2NrKGtleSwgQCh2YWx1ZSkpOwotICB9XTsKLX0KLQotLSAoQk9PTCl2
YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkgdmFsdWU6KGludDMyX3QgKil2YWx1ZSB7Ci0gIE5T
TnVtYmVyICp3cmFwcGVkID0gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldOwotICBpZiAo
d3JhcHBlZCAmJiB2YWx1ZSkgewotICAgIGludDMyX3QgcmVzdWx0ID0gW3dyYXBwZWQgaW50VmFs
dWVdOwotICAgIGlmICghX3ZhbGlkYXRpb25GdW5jKHJlc3VsdCkpIHsKLSAgICAgIHJlc3VsdCA9
IGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWU7Ci0gICAgfQotICAgICp2YWx1ZSA9IHJl
c3VsdDsKLSAgfQotICByZXR1cm4gKHdyYXBwZWQgIT0gTlVMTCk7Ci19Ci0KLS0gKEJPT0wpdmFs
dWVGb3JLZXk6KE5TU3RyaW5nICopa2V5IHJhd1ZhbHVlOihpbnQzMl90ICopcmF3VmFsdWUgewot
ICBOU051bWJlciAqd3JhcHBlZCA9IFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5XTsKLSAg
aWYgKHdyYXBwZWQgJiYgcmF3VmFsdWUpIHsKLSAgICAqcmF3VmFsdWUgPSBbd3JhcHBlZCBpbnRW
YWx1ZV07Ci0gIH0KLSAgcmV0dXJuICh3cmFwcGVkICE9IE5VTEwpOwotfQotCi0tICh2b2lkKWVu
dW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShOU1N0cmluZyAq
a2V5LCBpbnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIEdQQkVudW1WYWxpZGF0
aW9uRnVuYyBmdW5jID0gX3ZhbGlkYXRpb25GdW5jOwotICBbX2RpY3Rpb25hcnkgZW51bWVyYXRl
S2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmFLZXksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU051bWJlciAqYVZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAq
c3RvcCkgewotICAgICAgaW50MzJfdCB1bndyYXBwZWQgPSBbYVZhbHVlIGludFZhbHVlXTsKLSAg
ICAgIGlmICghZnVuYyh1bndyYXBwZWQpKSB7Ci0gICAgICAgIHVud3JhcHBlZCA9IGtHUEJVbnJl
Y29nbml6ZWRFbnVtZXJhdG9yVmFsdWU7Ci0gICAgICB9Ci0gICAgICBibG9jayhhS2V5LCB1bndy
YXBwZWQsIHN0b3ApOwotICB9XTsKLX0KLQotLSAodm9pZClhZGRSYXdFbnRyaWVzRnJvbURpY3Rp
b25hcnk6KEdQQlN0cmluZ0VudW1EaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYg
KG90aGVyRGljdGlvbmFyeSkgewotICAgIFtfZGljdGlvbmFyeSBhZGRFbnRyaWVzRnJvbURpY3Rp
b25hcnk6b3RoZXJEaWN0aW9uYXJ5LT5fZGljdGlvbmFyeV07Ci0gICAgaWYgKF9hdXRvY3JlYXRv
cikgewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9y
LCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClzZXRSYXdWYWx1ZTooaW50MzJfdCl2
YWx1ZSBmb3JLZXk6KE5TU3RyaW5nICopa2V5IHsKLSAgaWYgKCFrZXkpIHsKLSAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBm
b3JtYXQ6QCJBdHRlbXB0aW5nIHRvIGFkZCBuaWwga2V5IHRvIGEgRGljdGlvbmFyeSJdOwotICB9
Ci0gIFtfZGljdGlvbmFyeSBzZXRPYmplY3Q6QCh2YWx1ZSkgZm9yS2V5OmtleV07Ci0gIGlmIChf
YXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0
b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KE5T
U3RyaW5nICopYUtleSB7Ci0gIFtfZGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6YUtleV07
Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgW19kaWN0aW9uYXJ5IHJlbW92ZUFsbE9iamVj
dHNdOwotfQotCi0tICh2b2lkKXNldFZhbHVlOihpbnQzMl90KXZhbHVlIGZvcktleTooTlNTdHJp
bmcgKilrZXkgewotICBpZiAoIWtleSkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFs
aWRBcmd1bWVudEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIkF0dGVtcHRpbmcg
dG8gYWRkIG5pbCBrZXkgdG8gYSBEaWN0aW9uYXJ5Il07Ci0gIH0KLSAgaWYgKCFfdmFsaWRhdGlv
bkZ1bmModmFsdWUpKSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50
RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiR1BCU3RyaW5nRW51bURpY3Rpb25h
cnk6IEF0dGVtcHQgdG8gc2V0IGFuIHVua25vd24gZW51bSB2YWx1ZSAoJWQpIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVdOwotICB9Ci0KLSAgW19kaWN0aW9uYXJ5IHNldE9iamVjdDpA
KHZhbHVlKSBmb3JLZXk6a2V5XTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9j
cmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQot
QGVuZAotCi0vLyVQRERNLUVYUEFORC1FTkQgKDUgZXhwYW5zaW9ucykKLQotCi0vLyVQRERNLUVY
UEFORCBESUNUSU9OQVJZX0JPT0xfS0VZX1RPX1BPRF9JTVBMKFVJbnQzMiwgdWludDMyX3QpCi0v
LyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3Rs
eS4KLQotI3ByYWdtYSBtYXJrIC0gQm9vbCAtPiBVSW50MzIKLQotQGltcGxlbWVudGF0aW9uIEdQ
QkJvb2xVSW50MzJEaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICB1aW50MzJfdCBfdmFsdWVzWzJd
OwotICBCT09MIF92YWx1ZVNldFsyXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkg
ewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5V
TEwgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFy
eVdpdGhWYWx1ZToodWludDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yS2V5OihCT09MKWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBr
bm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNv
dW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkJv
b2xVSW50MzJEaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6JnZhbHVlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5
cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IHVpbnQzMl90IFtdKXZhbHVlcwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBCT09MIFtdKWtleXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIC8v
IENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBp
bnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhl
IHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkJvb2xVSW50MzJEaWN0aW9uYXJ5Kilbc2Vs
ZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOmtleXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6Y291
bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoRGlj
dGlvbmFyeTooR1BCQm9vbFVJbnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgLy8gQ2Fz
dCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9r
aW5nIGluaXRXaXRoRGljdGlvbmFyeToKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3Qu
Ci0gIHJldHVybiBbWyhHUEJCb29sVUludDMyRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRX
aXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNl
dHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgcmV0
dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVtSXRlbXNdIGF1dG9yZWxlYXNl
XTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhW
YWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFZhbHVlczooY29uc3QgdWludDMyX3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
aWYgKHNlbGYpIHsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
Ci0gICAgICBpbnQgaWR4ID0ga2V5c1tpXSA/IDEgOiAwOwotICAgICAgX3ZhbHVlc1tpZHhdID0g
dmFsdWVzW2ldOwotICAgICAgX3ZhbHVlU2V0W2lkeF0gPSBZRVM7Ci0gICAgfQotICB9Ci0gIHJl
dHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJC
b29sVUludDMyRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICBzZWxmID0gW3NlbGYgaW5pdFdp
dGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci0gIGlmIChzZWxmKSB7Ci0gICAg
aWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0g
ICAgICAgIGlmIChkaWN0aW9uYXJ5LT5fdmFsdWVTZXRbaV0pIHsKLSAgICAgICAgICBfdmFsdWVz
W2ldID0gZGljdGlvbmFyeS0+X3ZhbHVlc1tpXTsKLSAgICAgICAgICBfdmFsdWVTZXRbaV0gPSBZ
RVM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsK
LSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVl
czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotI2lmICFkZWZpbmVkKE5TX0JMT0NL
X0FTU0VSVElPTlMpCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9y
LAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJl
bGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9j
cmVhdG9yKTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotI2VuZGlmICAvLyAhZGVmaW5lZChOU19C
TE9DS19BU1NFUlRJT05TKQotCi0tIChpbnN0YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUg
Kil6b25lIHsKLSAgcmV0dXJuIFtbR1BCQm9vbFVJbnQzMkRpY3Rpb25hcnkgYWxsb2NXaXRoWm9u
ZTp6b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDoo
R1BCQm9vbFVJbnQzMkRpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7
Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJC
b29sVUludDMyRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIGlm
ICgoX3ZhbHVlU2V0WzBdICE9IG90aGVyLT5fdmFsdWVTZXRbMF0pIHx8Ci0gICAgICAoX3ZhbHVl
U2V0WzFdICE9IG90aGVyLT5fdmFsdWVTZXRbMV0pKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0g
IGlmICgoX3ZhbHVlU2V0WzBdICYmIChfdmFsdWVzWzBdICE9IG90aGVyLT5fdmFsdWVzWzBdKSkg
fHwKLSAgICAgIChfdmFsdWVTZXRbMV0gJiYgKF92YWx1ZXNbMV0gIT0gb3RoZXItPl92YWx1ZXNb
MV0pKSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4gWUVTOwotfQotCi0tIChOU1VJ
bnRlZ2VyKWhhc2ggewotICByZXR1cm4gKF92YWx1ZVNldFswXSA/IDEgOiAwKSArIChfdmFsdWVT
ZXRbMV0gPyAxIDogMCk7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24gewotICBOU011
dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IjwlQCAlcD4geyIsIFtzZWxmIGNsYXNzXSwgc2VsZl07Ci0gIGlmIChfdmFsdWVTZXRbMF0pIHsK
LSAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIk5POiAldSIsIF92YWx1ZXNbMF1dOwotICB9Ci0g
IGlmIChfdmFsdWVTZXRbMV0pIHsKLSAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIllFUzogJXUi
LCBfdmFsdWVzWzFdXTsKLSAgfQotICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIiB9Il07Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gKF92YWx1
ZVNldFswXSA/IDEgOiAwKSArIChfdmFsdWVTZXRbMV0gPyAxIDogMCk7Ci19Ci0KLS0gKEJPT0wp
dmFsdWVGb3JLZXk6KEJPT0wpa2V5IHZhbHVlOih1aW50MzJfdCAqKXZhbHVlIHsKLSAgaW50IGlk
eCA9IChrZXkgPyAxIDogMCk7Ci0gIGlmIChfdmFsdWVTZXRbaWR4XSkgewotICAgIGlmICh2YWx1
ZSkgewotICAgICAgKnZhbHVlID0gX3ZhbHVlc1tpZHhdOwotICAgIH0KLSAgICByZXR1cm4gWUVT
OwotICB9Ci0gIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQ
QkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2Vu
ZXJpY1ZhbHVlICopa2V5IHsKLSAgaW50IGlkeCA9IChrZXktPnZhbHVlQm9vbCA/IDEgOiAwKTsK
LSAgX3ZhbHVlc1tpZHhdID0gdmFsdWUtPnZhbHVlVUludDMyOwotICBfdmFsdWVTZXRbaWR4XSA9
IFlFUzsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBr
ZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIGlmIChfdmFsdWVTZXRbMF0pIHsKLSAgICBi
bG9jayhAImZhbHNlIiwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIldSIsIF92YWx1ZXNb
MF1dKTsKLSAgfQotICBpZiAoX3ZhbHVlU2V0WzFdKSB7Ci0gICAgYmxvY2soQCJ0cnVlIiwgW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIldSIsIF92YWx1ZXNbMV1dKTsKLSAgfQotfQotCi0t
ICh2b2lkKWVudW1lcmF0ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShC
T09MIGtleSwgdWludDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgQk9PTCBzdG9w
ID0gTk87Ci0gIGlmIChfdmFsdWVTZXRbMF0pIHsKLSAgICBibG9jayhOTywgX3ZhbHVlc1swXSwg
JnN0b3ApOwotICB9Ci0gIGlmICghc3RvcCAmJiBfdmFsdWVTZXRbMV0pIHsKLSAgICBibG9jayhZ
RVMsIF92YWx1ZXNbMV0sICZzdG9wKTsKLSAgfQotfQotCi0tIChzaXplX3QpY29tcHV0ZVNlcmlh
bGl6ZWRTaXplQXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJEYXRh
VHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIE5TVUlu
dGVnZXIgY291bnQgPSAwOwotICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCAyOyArK2kpIHsKLSAgICBpZiAoX3ZhbHVlU2V0W2ldKSB7Ci0gICAgICArK2NvdW50Owot
ICAgICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEJvb2xGaWVsZFNpemUoKGkgPT0gMSks
IGtNYXBLZXlGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVCb29sKTsKLSAgICAgIG1zZ1NpemUgKz0g
Q29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoX3ZhbHVlc1tpXSwga01hcFZhbHVlRmllbGROdW1i
ZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQz
MlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgICB9Ci0gIH0KLSAgc2l6ZV90
IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmll
bGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50Owot
ICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbToo
R1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBl
IHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgdWludDMyX3Qg
dGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJl
Rm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsK
LSAgICBpZiAoX3ZhbHVlU2V0W2ldKSB7Ci0gICAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgICAg
W291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAgIC8vIFdyaXRlIHRoZSBz
aXplIG9mIHRoZSBtZXNzYWdlLgotICAgICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEJv
b2xGaWVsZFNpemUoKGkgPT0gMSksIGtNYXBLZXlGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVCb29s
KTsKLSAgICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RVSW50MzJGaWVsZFNpemUoX3ZhbHVlc1tp
XSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgICAgW291dHB1dFN0
cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6ZV07Ci0gICAgICAvLyBXcml0ZSB0
aGUgZmllbGRzLgotICAgICAgV3JpdGVEaWN0Qm9vbEZpZWxkKG91dHB1dFN0cmVhbSwgKGkgPT0g
MSksIGtNYXBLZXlGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVCb29sKTsKLSAgICAgIFdyaXRlRGlj
dFVJbnQzMkZpZWxkKG91dHB1dFN0cmVhbSwgX3ZhbHVlc1tpXSwga01hcFZhbHVlRmllbGROdW1i
ZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKWFkZEVudHJpZXNG
cm9tRGljdGlvbmFyeTooR1BCQm9vbFVJbnQzMkRpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkg
ewotICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyAr
K2kpIHsKLSAgICAgIGlmIChvdGhlckRpY3Rpb25hcnktPl92YWx1ZVNldFtpXSkgewotICAgICAg
ICBfdmFsdWVTZXRbaV0gPSBZRVM7Ci0gICAgICAgIF92YWx1ZXNbaV0gPSBvdGhlckRpY3Rpb25h
cnktPl92YWx1ZXNbaV07Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsK
LSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2Vs
Zik7Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KHVpbnQzMl90KXZhbHVlIGZv
cktleTooQk9PTClrZXkgewotICBpbnQgaWR4ID0gKGtleSA/IDEgOiAwKTsKLSAgX3ZhbHVlc1tp
ZHhdID0gdmFsdWU7Ci0gIF92YWx1ZVNldFtpZHhdID0gWUVTOwotICBpZiAoX2F1dG9jcmVhdG9y
KSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBz
ZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihCT09MKWFLZXkgewot
ICBfdmFsdWVTZXRbYUtleSA/IDEgOiAwXSA9IE5POwotfQotCi0tICh2b2lkKXJlbW92ZUFsbCB7
Ci0gIF92YWx1ZVNldFswXSA9IE5POwotICBfdmFsdWVTZXRbMV0gPSBOTzsKLX0KLQotQGVuZAot
Ci0vLyVQRERNLUVYUEFORCBESUNUSU9OQVJZX0JPT0xfS0VZX1RPX1BPRF9JTVBMKEludDMyLCBp
bnQzMl90KQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQg
aXQgZGlyZWN0bHkuCi0KLSNwcmFnbWEgbWFyayAtIEJvb2wgLT4gSW50MzIKLQotQGltcGxlbWVu
dGF0aW9uIEdQQkJvb2xJbnQzMkRpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIGludDMyX3QgX3Zh
bHVlc1syXTsKLSAgQk9PTCBfdmFsdWVTZXRbMl07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0
aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOk5VTEwgZm9y
S2V5czpOVUxMIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRp
Y3Rpb25hcnlXaXRoVmFsdWU6KGludDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yS2V5OihCT09MKWtleSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21w
aWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JL
ZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtb
KEdQQkJvb2xJbnQzMkRpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczomdmFs
dWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQ6MV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZXM6KGNvbnN0IGludDMyX3QgW10pdmFsdWVzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAg
Ly8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJl
IGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0
aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCQm9vbEludDMyRGljdGlvbmFyeSopW3Nl
bGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOnZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOmtleXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDpjb3Vu
dF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0
aW9uYXJ5OihHUEJCb29sSW50MzJEaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIC8vIENhc3Qg
aXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2lu
ZyBpbml0V2l0aERpY3Rpb25hcnk6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0Lgot
ICByZXR1cm4gW1soR1BCQm9vbEludDMyRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRo
RGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgcmV0dXJu
IFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVtSXRlbXNdIGF1dG9yZWxlYXNlXTsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1
ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFZhbHVlczooY29uc3QgaW50MzJfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAo
c2VsZikgewotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgIGludCBpZHggPSBrZXlzW2ldID8gMSA6IDA7Ci0gICAgICBfdmFsdWVzW2lkeF0gPSB2YWx1
ZXNbaV07Ci0gICAgICBfdmFsdWVTZXRbaWR4XSA9IFlFUzsKLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQkJvb2xJ
bnQzMkRpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoVmFs
dWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChk
aWN0aW9uYXJ5KSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAg
ICBpZiAoZGljdGlvbmFyeS0+X3ZhbHVlU2V0W2ldKSB7Ci0gICAgICAgICAgX3ZhbHVlc1tpXSA9
IGRpY3Rpb25hcnktPl92YWx1ZXNbaV07Ci0gICAgICAgICAgX3ZhbHVlU2V0W2ldID0gWUVTOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gICNw
cmFnbWEgdW51c2VkKG51bUl0ZW1zKQotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVM
TCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLSNpZiAhZGVmaW5lZChOU19CTE9DS19BU1NF
UlRJT05TKQotLSAodm9pZClkZWFsbG9jIHsKLSAgTlNBc3NlcnQoIV9hdXRvY3JlYXRvciwKLSAg
ICAgICAgICAgQCIlQDogQXV0b2NyZWF0b3IgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZWxlYXNl
LCBhdXRvY3JlYXRvcjogJUAiLAotICAgICAgICAgICBbc2VsZiBjbGFzc10sIF9hdXRvY3JlYXRv
cik7Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLSNlbmRpZiAgLy8gIWRlZmluZWQoTlNfQkxPQ0tf
QVNTRVJUSU9OUykKLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICopem9u
ZSB7Ci0gIHJldHVybiBbW0dQQkJvb2xJbnQzMkRpY3Rpb25hcnkgYWxsb2NXaXRoWm9uZTp6b25l
XSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0KLS0gKEJPT0wpaXNFcXVhbDooR1BCQm9v
bEludDMyRGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAgICBy
ZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQkJvb2xJbnQz
MkRpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICBpZiAoKF92YWx1
ZVNldFswXSAhPSBvdGhlci0+X3ZhbHVlU2V0WzBdKSB8fAotICAgICAgKF92YWx1ZVNldFsxXSAh
PSBvdGhlci0+X3ZhbHVlU2V0WzFdKSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICBpZiAoKF92
YWx1ZVNldFswXSAmJiAoX3ZhbHVlc1swXSAhPSBvdGhlci0+X3ZhbHVlc1swXSkpIHx8Ci0gICAg
ICAoX3ZhbHVlU2V0WzFdICYmIChfdmFsdWVzWzFdICE9IG90aGVyLT5fdmFsdWVzWzFdKSkpIHsK
LSAgICByZXR1cm4gTk87Ci0gIH0KLSAgcmV0dXJuIFlFUzsKLX0KLQotLSAoTlNVSW50ZWdlcilo
YXNoIHsKLSAgcmV0dXJuIChfdmFsdWVTZXRbMF0gPyAxIDogMCkgKyAoX3ZhbHVlU2V0WzFdID8g
MSA6IDApOwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uIHsKLSAgTlNNdXRhYmxlU3Ry
aW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUAgJXA+
IHsiLCBbc2VsZiBjbGFzc10sIHNlbGZdOwotICBpZiAoX3ZhbHVlU2V0WzBdKSB7Ci0gICAgW3Jl
c3VsdCBhcHBlbmRGb3JtYXQ6QCJOTzogJWQiLCBfdmFsdWVzWzBdXTsKLSAgfQotICBpZiAoX3Zh
bHVlU2V0WzFdKSB7Ci0gICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCJZRVM6ICVkIiwgX3ZhbHVl
c1sxXV07Ci0gIH0KLSAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6QCIgfSJdOwotICByZXR1cm4gcmVz
dWx0OwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50IHsKLSAgcmV0dXJuIChfdmFsdWVTZXRbMF0g
PyAxIDogMCkgKyAoX3ZhbHVlU2V0WzFdID8gMSA6IDApOwotfQotCi0tIChCT09MKXZhbHVlRm9y
S2V5OihCT09MKWtleSB2YWx1ZTooaW50MzJfdCAqKXZhbHVlIHsKLSAgaW50IGlkeCA9IChrZXkg
PyAxIDogMCk7Ci0gIGlmIChfdmFsdWVTZXRbaWR4XSkgewotICAgIGlmICh2YWx1ZSkgewotICAg
ICAgKnZhbHVlID0gX3ZhbHVlc1tpZHhdOwotICAgIH0KLSAgICByZXR1cm4gWUVTOwotICB9Ci0g
IHJldHVybiBOTzsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNW
YWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVl
ICopa2V5IHsKLSAgaW50IGlkeCA9IChrZXktPnZhbHVlQm9vbCA/IDEgOiAwKTsKLSAgX3ZhbHVl
c1tpZHhdID0gdmFsdWUtPnZhbHVlSW50MzI7Ci0gIF92YWx1ZVNldFtpZHhdID0gWUVTOwotfQot
Ci0tICh2b2lkKWVudW1lcmF0ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQg
dmFsdWVPYmopKWJsb2NrIHsKLSAgaWYgKF92YWx1ZVNldFswXSkgewotICAgIGJsb2NrKEAiZmFs
c2UiLCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgX3ZhbHVlc1swXV0pOwotICB9
Ci0gIGlmIChfdmFsdWVTZXRbMV0pIHsKLSAgICBibG9jayhAInRydWUiLCBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVkIiwgX3ZhbHVlc1sxXV0pOwotICB9Ci19Ci0KLS0gKHZvaWQpZW51
bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKEJPT0wga2V5LCBp
bnQzMl90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIEJPT0wgc3RvcCA9IE5POwotICBp
ZiAoX3ZhbHVlU2V0WzBdKSB7Ci0gICAgYmxvY2soTk8sIF92YWx1ZXNbMF0sICZzdG9wKTsKLSAg
fQotICBpZiAoIXN0b3AgJiYgX3ZhbHVlU2V0WzFdKSB7Ci0gICAgYmxvY2soWUVTLCBfdmFsdWVz
WzFdLCAmc3RvcCk7Ci0gIH0KLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFz
RmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVE
YXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBOU1VJbnRlZ2VyIGNvdW50
ID0gMDsKLSAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytp
KSB7Ci0gICAgaWYgKF92YWx1ZVNldFtpXSkgewotICAgICAgKytjb3VudDsKLSAgICAgIHNpemVf
dCBtc2dTaXplID0gQ29tcHV0ZURpY3RCb29sRmllbGRTaXplKChpID09IDEpLCBrTWFwS2V5Rmll
bGROdW1iZXIsIEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0
SW50MzJGaWVsZFNpemUoX3ZhbHVlc1tpXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0
YVR5cGUpOwotICAgICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRl
Z2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgICB9Ci0gIH0KLSAgc2l6ZV90IHRhZ1NpemUgPSBH
UEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRh
VHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVz
dWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRw
dXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICBhc0ZpZWxk
OihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5
cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2ly
ZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3Ro
RGVsaW1pdGVkKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICBpZiAoX3Zh
bHVlU2V0W2ldKSB7Ci0gICAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgICAgW291dHB1dFN0cmVh
bSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRoZSBt
ZXNzYWdlLgotICAgICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEJvb2xGaWVsZFNpemUo
KGkgPT0gMSksIGtNYXBLZXlGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVCb29sKTsKLSAgICAgIG1z
Z1NpemUgKz0gQ29tcHV0ZURpY3RJbnQzMkZpZWxkU2l6ZShfdmFsdWVzW2ldLCBrTWFwVmFsdWVG
aWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50
MzJOb1RhZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0g
ICAgICBXcml0ZURpY3RCb29sRmllbGQob3V0cHV0U3RyZWFtLCAoaSA9PSAxKSwga01hcEtleUZp
ZWxkTnVtYmVyLCBHUEJEYXRhVHlwZUJvb2wpOwotICAgICAgV3JpdGVEaWN0SW50MzJGaWVsZChv
dXRwdXRTdHJlYW0sIF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFU
eXBlKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6
KEdQQkJvb2xJbnQzMkRpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotICBpZiAob3RoZXJE
aWN0aW9uYXJ5KSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgIGlm
IChvdGhlckRpY3Rpb25hcnktPl92YWx1ZVNldFtpXSkgewotICAgICAgICBfdmFsdWVTZXRbaV0g
PSBZRVM7Ci0gICAgICAgIF92YWx1ZXNbaV0gPSBvdGhlckRpY3Rpb25hcnktPl92YWx1ZXNbaV07
Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9j
cmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9
Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGludDMyX3QpdmFsdWUgZm9yS2V5OihCT09MKWtleSB7
Ci0gIGludCBpZHggPSAoa2V5ID8gMSA6IDApOwotICBfdmFsdWVzW2lkeF0gPSB2YWx1ZTsKLSAg
X3ZhbHVlU2V0W2lkeF0gPSBZRVM7Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRv
Y3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0K
LS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KEJPT0wpYUtleSB7Ci0gIF92YWx1ZVNldFthS2V5
ID8gMSA6IDBdID0gTk87Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgX3ZhbHVlU2V0WzBd
ID0gTk87Ci0gIF92YWx1ZVNldFsxXSA9IE5POwotfQotCi1AZW5kCi0KLS8vJVBERE0tRVhQQU5E
IERJQ1RJT05BUllfQk9PTF9LRVlfVE9fUE9EX0lNUEwoVUludDY0LCB1aW50NjRfdCkKLS8vIFRo
aXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5Lgot
Ci0jcHJhZ21hIG1hcmsgLSBCb29sIC0+IFVJbnQ2NAotCi1AaW1wbGVtZW50YXRpb24gR1BCQm9v
bFVJbnQ2NERpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIHVpbnQ2NF90IF92YWx1ZXNbMl07Ci0g
IEJPT0wgX3ZhbHVlU2V0WzJdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0g
IHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBj
b3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aFZhbHVlOih1aW50NjRfdCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JL
ZXk6KEJPT0wpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6
Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCQm9vbFVJ
bnQ2NERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczomdmFsdWUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlk
aWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgdWludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2Fz
dCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9r
aW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlw
ZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCQm9vbFVJbnQ2NERpY3Rpb25hcnkqKVtzZWxmIGFs
bG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDpjb3VudF0g
YXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9u
YXJ5OihHUEJCb29sVUludDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICAvLyBDYXN0IGlz
IG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcg
aW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAg
cmV0dXJuIFtbKEdQQkJvb2xVSW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhE
aWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBl
KWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICByZXR1cm4g
W1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpudW1JdGVtc10gYXV0b3JlbGVhc2VdOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZhbHVl
czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoVmFsdWVzOihjb25zdCB1aW50NjRfdCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAo
c2VsZikgewotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgIGludCBpZHggPSBrZXlzW2ldID8gMSA6IDA7Ci0gICAgICBfdmFsdWVzW2lkeF0gPSB2YWx1
ZXNbaV07Ci0gICAgICBfdmFsdWVTZXRbaWR4XSA9IFlFUzsKLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpY3Rpb25hcnk6KEdQQkJvb2xV
SW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0aFZh
bHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAo
ZGljdGlvbmFyeSkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAg
ICAgaWYgKGRpY3Rpb25hcnktPl92YWx1ZVNldFtpXSkgewotICAgICAgICAgIF92YWx1ZXNbaV0g
PSBkaWN0aW9uYXJ5LT5fdmFsdWVzW2ldOwotICAgICAgICAgIF92YWx1ZVNldFtpXSA9IFlFUzsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewotICAj
cHJhZ21hIHVudXNlZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVzOk5V
TEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0jaWYgIWRlZmluZWQoTlNfQkxPQ0tfQVNT
RVJUSU9OUykKLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0g
ICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFz
ZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0
b3IpOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0jZW5kaWYgIC8vICFkZWZpbmVkKE5TX0JMT0NL
X0FTU0VSVElPTlMpCi0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpv
bmUgewotICByZXR1cm4gW1tHUEJCb29sVUludDY0RGljdGlvbmFyeSBhbGxvY1dpdGhab25lOnpv
bmVdIGluaXRXaXRoRGljdGlvbmFyeTpzZWxmXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihHUEJC
b29sVUludDY0RGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAg
ICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQkJvb2xV
SW50NjREaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgaWYgKChf
dmFsdWVTZXRbMF0gIT0gb3RoZXItPl92YWx1ZVNldFswXSkgfHwKLSAgICAgIChfdmFsdWVTZXRb
MV0gIT0gb3RoZXItPl92YWx1ZVNldFsxXSkpIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgaWYg
KChfdmFsdWVTZXRbMF0gJiYgKF92YWx1ZXNbMF0gIT0gb3RoZXItPl92YWx1ZXNbMF0pKSB8fAot
ICAgICAgKF92YWx1ZVNldFsxXSAmJiAoX3ZhbHVlc1sxXSAhPSBvdGhlci0+X3ZhbHVlc1sxXSkp
KSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBZRVM7Ci19Ci0KLS0gKE5TVUludGVn
ZXIpaGFzaCB7Ci0gIHJldHVybiAoX3ZhbHVlU2V0WzBdID8gMSA6IDApICsgKF92YWx1ZVNldFsx
XSA/IDEgOiAwKTsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIE5TTXV0YWJs
ZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVA
ICVwPiB7IiwgW3NlbGYgY2xhc3NdLCBzZWxmXTsKLSAgaWYgKF92YWx1ZVNldFswXSkgewotICAg
IFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiTk86ICVsbHUiLCBfdmFsdWVzWzBdXTsKLSAgfQotICBp
ZiAoX3ZhbHVlU2V0WzFdKSB7Ci0gICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCJZRVM6ICVsbHUi
LCBfdmFsdWVzWzFdXTsKLSAgfQotICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIiB9Il07Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gKF92YWx1
ZVNldFswXSA/IDEgOiAwKSArIChfdmFsdWVTZXRbMV0gPyAxIDogMCk7Ci19Ci0KLS0gKEJPT0wp
dmFsdWVGb3JLZXk6KEJPT0wpa2V5IHZhbHVlOih1aW50NjRfdCAqKXZhbHVlIHsKLSAgaW50IGlk
eCA9IChrZXkgPyAxIDogMCk7Ci0gIGlmIChfdmFsdWVTZXRbaWR4XSkgewotICAgIGlmICh2YWx1
ZSkgewotICAgICAgKnZhbHVlID0gX3ZhbHVlc1tpZHhdOwotICAgIH0KLSAgICByZXR1cm4gWUVT
OwotICB9Ci0gIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClzZXRHUEJHZW5lcmljVmFsdWU6KEdQ
QkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVyaWNWYWx1ZUtleTooR1BCR2Vu
ZXJpY1ZhbHVlICopa2V5IHsKLSAgaW50IGlkeCA9IChrZXktPnZhbHVlQm9vbCA/IDEgOiAwKTsK
LSAgX3ZhbHVlc1tpZHhdID0gdmFsdWUtPnZhbHVlVUludDY0OwotICBfdmFsdWVTZXRbaWR4XSA9
IFlFUzsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lkICheKShpZCBr
ZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIGlmIChfdmFsdWVTZXRbMF0pIHsKLSAgICBi
bG9jayhAImZhbHNlIiwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbGx1IiwgX3ZhbHVl
c1swXV0pOwotICB9Ci0gIGlmIChfdmFsdWVTZXRbMV0pIHsKLSAgICBibG9jayhAInRydWUiLCBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVsbHUiLCBfdmFsdWVzWzFdXSk7Ci0gIH0KLX0K
LQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAo
XikoQk9PTCBrZXksIHVpbnQ2NF90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIEJPT0wg
c3RvcCA9IE5POwotICBpZiAoX3ZhbHVlU2V0WzBdKSB7Ci0gICAgYmxvY2soTk8sIF92YWx1ZXNb
MF0sICZzdG9wKTsKLSAgfQotICBpZiAoIXN0b3AgJiYgX3ZhbHVlU2V0WzFdKSB7Ci0gICAgYmxv
Y2soWUVTLCBfdmFsdWVzWzFdLCAmc3RvcCk7Ci0gIH0KLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVT
ZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BC
RGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBO
U1VJbnRlZ2VyIGNvdW50ID0gMDsKLSAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgaWYgKF92YWx1ZVNldFtpXSkgewotICAgICAgKytjb3Vu
dDsKLSAgICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RCb29sRmllbGRTaXplKChpID09
IDEpLCBrTWFwS2V5RmllbGROdW1iZXIsIEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBtc2dTaXpl
ICs9IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxk
TnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3VmFy
aW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7Ci0gICAgfQotICB9Ci0gIHNp
emVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVtYmVy
KGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBjb3Vu
dDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJl
YW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJEYXRh
VHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIHVpbnQz
Ml90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BC
V2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytp
KSB7Ci0gICAgaWYgKF92YWx1ZVNldFtpXSkgewotICAgICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAg
ICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgICAvLyBXcml0ZSB0
aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURp
Y3RCb29sRmllbGRTaXplKChpID09IDEpLCBrTWFwS2V5RmllbGROdW1iZXIsIEdQQkRhdGFUeXBl
Qm9vbCk7Ci0gICAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0VUludDY0RmllbGRTaXplKF92YWx1
ZXNbaV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICAgIFtvdXRw
dXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgICAgLy8gV3Jp
dGUgdGhlIGZpZWxkcy4KLSAgICAgIFdyaXRlRGljdEJvb2xGaWVsZChvdXRwdXRTdHJlYW0sIChp
ID09IDEpLCBrTWFwS2V5RmllbGROdW1iZXIsIEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBXcml0
ZURpY3RVSW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxk
TnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClhZGRFbnRy
aWVzRnJvbURpY3Rpb25hcnk6KEdQQkJvb2xVSW50NjREaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9u
YXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MjsgKytpKSB7Ci0gICAgICBpZiAob3RoZXJEaWN0aW9uYXJ5LT5fdmFsdWVTZXRbaV0pIHsKLSAg
ICAgICAgX3ZhbHVlU2V0W2ldID0gWUVTOwotICAgICAgICBfdmFsdWVzW2ldID0gb3RoZXJEaWN0
aW9uYXJ5LT5fdmFsdWVzW2ldOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoX2F1dG9jcmVhdG9y
KSB7Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3Is
IHNlbGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldFZhbHVlOih1aW50NjRfdCl2YWx1
ZSBmb3JLZXk6KEJPT0wpa2V5IHsKLSAgaW50IGlkeCA9IChrZXkgPyAxIDogMCk7Ci0gIF92YWx1
ZXNbaWR4XSA9IHZhbHVlOwotICBfdmFsdWVTZXRbaWR4XSA9IFlFUzsKLSAgaWYgKF9hdXRvY3Jl
YXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRv
ciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktleTooQk9PTClhS2V5
IHsKLSAgX3ZhbHVlU2V0W2FLZXkgPyAxIDogMF0gPSBOTzsKLX0KLQotLSAodm9pZClyZW1vdmVB
bGwgewotICBfdmFsdWVTZXRbMF0gPSBOTzsKLSAgX3ZhbHVlU2V0WzFdID0gTk87Ci19Ci0KLUBl
bmQKLQotLy8lUERETS1FWFBBTkQgRElDVElPTkFSWV9CT09MX0tFWV9UT19QT0RfSU1QTChJbnQ2
NCwgaW50NjRfdCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBl
ZGl0IGl0IGRpcmVjdGx5LgotCi0jcHJhZ21hIG1hcmsgLSBCb29sIC0+IEludDY0Ci0KLUBpbXBs
ZW1lbnRhdGlvbiBHUEJCb29sSW50NjREaWN0aW9uYXJ5IHsKLSBAcGFja2FnZQotICBpbnQ2NF90
IF92YWx1ZXNbMl07Ci0gIEJPT0wgX3ZhbHVlU2V0WzJdOwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeSB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczpOVUxM
IGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihpbnQ2NF90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcktleTooQk9PTClrZXkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUg
Y29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1ZXM6
Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJldHVy
biBbWyhHUEJCb29sSW50NjREaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6
JnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleXM6JmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5z
dGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBpbnQ2NF90IFtdKXZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBCT09MIFtdKWtleXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7
Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNsYXNzIHdl
IGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBn
ZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkJvb2xJbnQ2NERpY3Rpb25hcnkq
KVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6
Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRo
RGljdGlvbmFyeTooR1BCQm9vbEludDY0RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICAvLyBD
YXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52
b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVj
dC4KLSAgcmV0dXJuIFtbKEdQQkJvb2xJbnQ2NERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0
V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5j
ZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJl
dHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFz
ZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRo
VmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhWYWx1ZXM6KGNvbnN0IGludDY0X3QgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
aWYgKHNlbGYpIHsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
Ci0gICAgICBpbnQgaWR4ID0ga2V5c1tpXSA/IDEgOiAwOwotICAgICAgX3ZhbHVlc1tpZHhdID0g
dmFsdWVzW2ldOwotICAgICAgX3ZhbHVlU2V0W2lkeF0gPSBZRVM7Ci0gICAgfQotICB9Ci0gIHJl
dHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJC
b29sSW50NjREaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBbc2VsZiBpbml0V2l0
aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBp
ZiAoZGljdGlvbmFyeSkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAg
ICAgICAgaWYgKGRpY3Rpb25hcnktPl92YWx1ZVNldFtpXSkgewotICAgICAgICAgIF92YWx1ZXNb
aV0gPSBkaWN0aW9uYXJ5LT5fdmFsdWVzW2ldOwotICAgICAgICAgIF92YWx1ZVNldFtpXSA9IFlF
UzsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRlbXMgewot
ICAjcHJhZ21hIHVudXNlZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsdWVz
Ok5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0jaWYgIWRlZmluZWQoTlNfQkxPQ0tf
QVNTRVJUSU9OUykKLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3Is
Ci0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVs
ZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2Ny
ZWF0b3IpOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0jZW5kaWYgIC8vICFkZWZpbmVkKE5TX0JM
T0NLX0FTU0VSVElPTlMpCi0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpvbmU6KE5TWm9uZSAq
KXpvbmUgewotICByZXR1cm4gW1tHUEJCb29sSW50NjREaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6
em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQ
QkJvb2xJbnQ2NERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0g
ICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltHUEJCb29s
SW50NjREaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgaWYgKChf
dmFsdWVTZXRbMF0gIT0gb3RoZXItPl92YWx1ZVNldFswXSkgfHwKLSAgICAgIChfdmFsdWVTZXRb
MV0gIT0gb3RoZXItPl92YWx1ZVNldFsxXSkpIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgaWYg
KChfdmFsdWVTZXRbMF0gJiYgKF92YWx1ZXNbMF0gIT0gb3RoZXItPl92YWx1ZXNbMF0pKSB8fAot
ICAgICAgKF92YWx1ZVNldFsxXSAmJiAoX3ZhbHVlc1sxXSAhPSBvdGhlci0+X3ZhbHVlc1sxXSkp
KSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBZRVM7Ci19Ci0KLS0gKE5TVUludGVn
ZXIpaGFzaCB7Ci0gIHJldHVybiAoX3ZhbHVlU2V0WzBdID8gMSA6IDApICsgKF92YWx1ZVNldFsx
XSA/IDEgOiAwKTsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIE5TTXV0YWJs
ZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVA
ICVwPiB7IiwgW3NlbGYgY2xhc3NdLCBzZWxmXTsKLSAgaWYgKF92YWx1ZVNldFswXSkgewotICAg
IFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiTk86ICVsbGQiLCBfdmFsdWVzWzBdXTsKLSAgfQotICBp
ZiAoX3ZhbHVlU2V0WzFdKSB7Ci0gICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCJZRVM6ICVsbGQi
LCBfdmFsdWVzWzFdXTsKLSAgfQotICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIiB9Il07Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICByZXR1cm4gKF92YWx1
ZVNldFswXSA/IDEgOiAwKSArIChfdmFsdWVTZXRbMV0gPyAxIDogMCk7Ci19Ci0KLS0gKEJPT0wp
dmFsdWVGb3JLZXk6KEJPT0wpa2V5IHZhbHVlOihpbnQ2NF90ICopdmFsdWUgewotICBpbnQgaWR4
ID0gKGtleSA/IDEgOiAwKTsKLSAgaWYgKF92YWx1ZVNldFtpZHhdKSB7Ci0gICAgaWYgKHZhbHVl
KSB7Ci0gICAgICAqdmFsdWUgPSBfdmFsdWVzW2lkeF07Ci0gICAgfQotICAgIHJldHVybiBZRVM7
Ci0gIH0KLSAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKXNldEdQQkdlbmVyaWNWYWx1ZTooR1BC
R2VuZXJpY1ZhbHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2VuZXJpY1ZhbHVlS2V5OihHUEJHZW5l
cmljVmFsdWUgKilrZXkgewotICBpbnQgaWR4ID0gKGtleS0+dmFsdWVCb29sID8gMSA6IDApOwot
ICBfdmFsdWVzW2lkeF0gPSB2YWx1ZS0+dmFsdWVJbnQ2NDsKLSAgX3ZhbHVlU2V0W2lkeF0gPSBZ
RVM7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXikoaWQga2V5
T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBpZiAoX3ZhbHVlU2V0WzBdKSB7Ci0gICAgYmxv
Y2soQCJmYWxzZSIsIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWxsZCIsIF92YWx1ZXNb
MF1dKTsKLSAgfQotICBpZiAoX3ZhbHVlU2V0WzFdKSB7Ci0gICAgYmxvY2soQCJ0cnVlIiwgW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlbGxkIiwgX3ZhbHVlc1sxXV0pOwotICB9Ci19Ci0K
LS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4p
KEJPT0wga2V5LCBpbnQ2NF90IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIEJPT0wgc3Rv
cCA9IE5POwotICBpZiAoX3ZhbHVlU2V0WzBdKSB7Ci0gICAgYmxvY2soTk8sIF92YWx1ZXNbMF0s
ICZzdG9wKTsKLSAgfQotICBpZiAoIXN0b3AgJiYgX3ZhbHVlU2V0WzFdKSB7Ci0gICAgYmxvY2so
WUVTLCBfdmFsdWVzWzFdLCAmc3RvcCk7Ci0gIH0KLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJp
YWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0
YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBOU1VJ
bnRlZ2VyIGNvdW50ID0gMDsKLSAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgMjsgKytpKSB7Ci0gICAgaWYgKF92YWx1ZVNldFtpXSkgewotICAgICAgKytjb3VudDsK
LSAgICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RCb29sRmllbGRTaXplKChpID09IDEp
LCBrTWFwS2V5RmllbGROdW1iZXIsIEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBtc2dTaXplICs9
IENvbXB1dGVEaWN0SW50NjRGaWVsZFNpemUoX3ZhbHVlc1tpXSwga01hcFZhbHVlRmllbGROdW1i
ZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQz
MlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgICB9Ci0gIH0KLSAgc2l6ZV90
IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmll
bGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50Owot
ICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbToo
R1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBl
IHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgdWludDMyX3Qg
dGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJl
Rm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsK
LSAgICBpZiAoX3ZhbHVlU2V0W2ldKSB7Ci0gICAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgICAg
W291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAgIC8vIFdyaXRlIHRoZSBz
aXplIG9mIHRoZSBtZXNzYWdlLgotICAgICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEJv
b2xGaWVsZFNpemUoKGkgPT0gMSksIGtNYXBLZXlGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVCb29s
KTsKLSAgICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RJbnQ2NEZpZWxkU2l6ZShfdmFsdWVzW2ld
LCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgICBbb3V0cHV0U3Ry
ZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAgIC8vIFdyaXRlIHRo
ZSBmaWVsZHMuCi0gICAgICBXcml0ZURpY3RCb29sRmllbGQob3V0cHV0U3RyZWFtLCAoaSA9PSAx
KSwga01hcEtleUZpZWxkTnVtYmVyLCBHUEJEYXRhVHlwZUJvb2wpOwotICAgICAgV3JpdGVEaWN0
SW50NjRGaWVsZChvdXRwdXRTdHJlYW0sIF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVy
LCB2YWx1ZURhdGFUeXBlKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJv
bURpY3Rpb25hcnk6KEdQQkJvb2xJbnQ2NERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewot
ICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kp
IHsKLSAgICAgIGlmIChvdGhlckRpY3Rpb25hcnktPl92YWx1ZVNldFtpXSkgewotICAgICAgICBf
dmFsdWVTZXRbaV0gPSBZRVM7Ci0gICAgICAgIF92YWx1ZXNbaV0gPSBvdGhlckRpY3Rpb25hcnkt
Pl92YWx1ZXNbaV07Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAg
ICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7
Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KGludDY0X3QpdmFsdWUgZm9yS2V5
OihCT09MKWtleSB7Ci0gIGludCBpZHggPSAoa2V5ID8gMSA6IDApOwotICBfdmFsdWVzW2lkeF0g
PSB2YWx1ZTsKLSAgX3ZhbHVlU2V0W2lkeF0gPSBZRVM7Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsK
LSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYp
OwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KEJPT0wpYUtleSB7Ci0gIF92
YWx1ZVNldFthS2V5ID8gMSA6IDBdID0gTk87Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAg
X3ZhbHVlU2V0WzBdID0gTk87Ci0gIF92YWx1ZVNldFsxXSA9IE5POwotfQotCi1AZW5kCi0KLS8v
JVBERE0tRVhQQU5EIERJQ1RJT05BUllfQk9PTF9LRVlfVE9fUE9EX0lNUEwoQm9vbCwgQk9PTCkK
LS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVj
dGx5LgotCi0jcHJhZ21hIG1hcmsgLSBCb29sIC0+IEJvb2wKLQotQGltcGxlbWVudGF0aW9uIEdQ
QkJvb2xCb29sRGljdGlvbmFyeSB7Ci0gQHBhY2thZ2UKLSAgQk9PTCBfdmFsdWVzWzJdOwotICBC
T09MIF92YWx1ZVNldFsyXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewotICBy
ZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291
bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhW
YWx1ZTooQk9PTCl2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KEJP
T0wpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQg
Y2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8v
IG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCQm9vbEJvb2xEaWN0
aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6JnZhbHVlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czoma2V5Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudDoxXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0
aFZhbHVlczooY29uc3QgQk9PTCBbXSl2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0
aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhWYWx1
ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJlY3QuCi0gIHJl
dHVybiBbWyhHUEJCb29sQm9vbERpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVl
czp2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JLZXlzOmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsg
KGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkJvb2xCb29sRGljdGlv
bmFyeSAqKWRpY3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIg
a25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAv
LyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkJvb2xCb29sRGlj
dGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRv
cmVsZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihO
U1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2Fw
YWNpdHk6bnVtSXRlbXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQg
ewotICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6
MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgQk9PTCBbXSl2
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlrZXlz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVnZXIpY291bnQgewotICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIGZvciAoTlNVSW50ZWdlciBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgIGludCBpZHggPSBrZXlzW2ldID8gMSA6IDA7
Ci0gICAgICBfdmFsdWVzW2lkeF0gPSB2YWx1ZXNbaV07Ci0gICAgICBfdmFsdWVTZXRbaWR4XSA9
IFlFUzsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aERpY3Rpb25hcnk6KEdQQkJvb2xCb29sRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewot
ICBzZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07
Ci0gIGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICAgIGlmIChkaWN0aW9uYXJ5LT5fdmFsdWVTZXRbaV0p
IHsKLSAgICAgICAgICBfdmFsdWVzW2ldID0gZGljdGlvbmFyeS0+X3ZhbHVlc1tpXTsKLSAgICAg
ICAgICBfdmFsdWVTZXRbaV0gPSBZRVM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0K
LSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihO
U1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVy
biBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQot
I2lmICFkZWZpbmVkKE5TX0JMT0NLX0FTU0VSVElPTlMpCi0tICh2b2lkKWRlYWxsb2MgewotICBO
U0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0
IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAg
IFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotI2Vu
ZGlmICAvLyAhZGVmaW5lZChOU19CTE9DS19BU1NFUlRJT05TKQotCi0tIChpbnN0YW5jZXR5cGUp
Y29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCQm9vbEJvb2xEaWN0
aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQot
Ci0tIChCT09MKWlzRXF1YWw6KEdQQkJvb2xCb29sRGljdGlvbmFyeSAqKW90aGVyIHsKLSAgaWYg
KHNlbGYgPT0gb3RoZXIpIHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICghW290aGVyIGlz
S2luZE9mQ2xhc3M6W0dQQkJvb2xCb29sRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0dXJu
IE5POwotICB9Ci0gIGlmICgoX3ZhbHVlU2V0WzBdICE9IG90aGVyLT5fdmFsdWVTZXRbMF0pIHx8
Ci0gICAgICAoX3ZhbHVlU2V0WzFdICE9IG90aGVyLT5fdmFsdWVTZXRbMV0pKSB7Ci0gICAgcmV0
dXJuIE5POwotICB9Ci0gIGlmICgoX3ZhbHVlU2V0WzBdICYmIChfdmFsdWVzWzBdICE9IG90aGVy
LT5fdmFsdWVzWzBdKSkgfHwKLSAgICAgIChfdmFsdWVTZXRbMV0gJiYgKF92YWx1ZXNbMV0gIT0g
b3RoZXItPl92YWx1ZXNbMV0pKSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4gWUVT
OwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gKF92YWx1ZVNldFswXSA/IDEg
OiAwKSArIChfdmFsdWVTZXRbMV0gPyAxIDogMCk7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3Jp
cHRpb24gewotICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyIsIFtzZWxmIGNsYXNzXSwgc2VsZl07Ci0gIGlmIChf
dmFsdWVTZXRbMF0pIHsKLSAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIk5POiAlZCIsIF92YWx1
ZXNbMF1dOwotICB9Ci0gIGlmIChfdmFsdWVTZXRbMV0pIHsKLSAgICBbcmVzdWx0IGFwcGVuZEZv
cm1hdDpAIllFUzogJWQiLCBfdmFsdWVzWzFdXTsKLSAgfQotICBbcmVzdWx0IGFwcGVuZFN0cmlu
ZzpAIiB9Il07Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewot
ICByZXR1cm4gKF92YWx1ZVNldFswXSA/IDEgOiAwKSArIChfdmFsdWVTZXRbMV0gPyAxIDogMCk7
Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KEJPT0wpa2V5IHZhbHVlOihCT09MICopdmFsdWUg
ewotICBpbnQgaWR4ID0gKGtleSA/IDEgOiAwKTsKLSAgaWYgKF92YWx1ZVNldFtpZHhdKSB7Ci0g
ICAgaWYgKHZhbHVlKSB7Ci0gICAgICAqdmFsdWUgPSBfdmFsdWVzW2lkeF07Ci0gICAgfQotICAg
IHJldHVybiBZRVM7Ci0gIH0KLSAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKXNldEdQQkdlbmVy
aWNWYWx1ZTooR1BCR2VuZXJpY1ZhbHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2VuZXJpY1ZhbHVl
S2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkgewotICBpbnQgaWR4ID0gKGtleS0+dmFsdWVCb29s
ID8gMSA6IDApOwotICBfdmFsdWVzW2lkeF0gPSB2YWx1ZS0+dmFsdWVCb29sOwotICBfdmFsdWVT
ZXRbaWR4XSA9IFlFUzsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9ybWF0Oih2b2lk
ICheKShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIGlmIChfdmFsdWVTZXRbMF0p
IHsKLSAgICBibG9jayhAImZhbHNlIiwgKF92YWx1ZXNbMF0gPyBAInRydWUiIDogQCJmYWxzZSIp
KTsKLSAgfQotICBpZiAoX3ZhbHVlU2V0WzFdKSB7Ci0gICAgYmxvY2soQCJ0cnVlIiwgKF92YWx1
ZXNbMV0gPyBAInRydWUiIDogQCJmYWxzZSIpKTsKLSAgfQotfQotCi0tICh2b2lkKWVudW1lcmF0
ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShCT09MIGtleSwgQk9PTCB2
YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBCT09MIHN0b3AgPSBOTzsKLSAgaWYgKF92YWx1
ZVNldFswXSkgewotICAgIGJsb2NrKE5PLCBfdmFsdWVzWzBdLCAmc3RvcCk7Ci0gIH0KLSAgaWYg
KCFzdG9wICYmIF92YWx1ZVNldFsxXSkgewotICAgIGJsb2NrKFlFUywgX3ZhbHVlc1sxXSwgJnN0
b3ApOwotICB9Ci19Ci0KLS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihH
UEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUg
PSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgTlNVSW50ZWdlciBjb3VudCA9IDA7Ci0g
IHNpemVfdCByZXN1bHQgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAg
IGlmIChfdmFsdWVTZXRbaV0pIHsKLSAgICAgICsrY291bnQ7Ci0gICAgICBzaXplX3QgbXNnU2l6
ZSA9IENvbXB1dGVEaWN0Qm9vbEZpZWxkU2l6ZSgoaSA9PSAxKSwga01hcEtleUZpZWxkTnVtYmVy
LCBHUEJEYXRhVHlwZUJvb2wpOwotICAgICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEJvb2xGaWVs
ZFNpemUoX3ZhbHVlc1tpXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwot
ICAgICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1Np
emUpICsgbXNnU2l6ZTsKLSAgICB9Ci0gIH0KLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRl
V2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3Nh
Z2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQot
Ci0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0g
KilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVs
ZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJH
ZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1h
a2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVk
KTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICBpZiAoX3ZhbHVlU2V0W2ld
KSB7Ci0gICAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgICAgW291dHB1dFN0cmVhbSB3cml0ZUlu
dDMyTm9UYWc6dGFnXTsKLSAgICAgIC8vIFdyaXRlIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLgot
ICAgICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEJvb2xGaWVsZFNpemUoKGkgPT0gMSks
IGtNYXBLZXlGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVCb29sKTsKLSAgICAgIG1zZ1NpemUgKz0g
Q29tcHV0ZURpY3RCb29sRmllbGRTaXplKF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVy
LCB2YWx1ZURhdGFUeXBlKTsKLSAgICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOihp
bnQzMl90KW1zZ1NpemVdOwotICAgICAgLy8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICAgIFdyaXRl
RGljdEJvb2xGaWVsZChvdXRwdXRTdHJlYW0sIChpID09IDEpLCBrTWFwS2V5RmllbGROdW1iZXIs
IEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBXcml0ZURpY3RCb29sRmllbGQob3V0cHV0U3RyZWFt
LCBfdmFsdWVzW2ldLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAg
fQotICB9Ci19Ci0KLS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJCb29sQm9v
bERpY3Rpb25hcnkgKilvdGhlckRpY3Rpb25hcnkgewotICBpZiAob3RoZXJEaWN0aW9uYXJ5KSB7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgIGlmIChvdGhlckRpY3Rp
b25hcnktPl92YWx1ZVNldFtpXSkgewotICAgICAgICBfdmFsdWVTZXRbaV0gPSBZRVM7Ci0gICAg
ICAgIF92YWx1ZXNbaV0gPSBvdGhlckRpY3Rpb25hcnktPl92YWx1ZXNbaV07Ci0gICAgICB9Ci0g
ICAgfQotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlv
bmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9Ci19Ci0KLS0gKHZv
aWQpc2V0VmFsdWU6KEJPT0wpdmFsdWUgZm9yS2V5OihCT09MKWtleSB7Ci0gIGludCBpZHggPSAo
a2V5ID8gMSA6IDApOwotICBfdmFsdWVzW2lkeF0gPSB2YWx1ZTsKLSAgX3ZhbHVlU2V0W2lkeF0g
PSBZRVM7Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25h
cnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcmVtb3Zl
VmFsdWVGb3JLZXk6KEJPT0wpYUtleSB7Ci0gIF92YWx1ZVNldFthS2V5ID8gMSA6IDBdID0gTk87
Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgX3ZhbHVlU2V0WzBdID0gTk87Ci0gIF92YWx1
ZVNldFsxXSA9IE5POwotfQotCi1AZW5kCi0KLS8vJVBERE0tRVhQQU5EIERJQ1RJT05BUllfQk9P
TF9LRVlfVE9fUE9EX0lNUEwoRmxvYXQsIGZsb2F0KQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlz
IGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLSNwcmFnbWEgbWFyayAtIEJv
b2wgLT4gRmxvYXQKLQotQGltcGxlbWVudGF0aW9uIEdQQkJvb2xGbG9hdERpY3Rpb25hcnkgewot
IEBwYWNrYWdlCi0gIGZsb2F0IF92YWx1ZXNbMl07Ci0gIEJPT0wgX3ZhbHVlU2V0WzJdOwotfQot
Ci0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeSB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBp
bml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19
Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlOihmbG9hdCl2YWx1ZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KEJPT0wpa2V5IHsKLSAgLy8gQ2FzdCBp
cyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5n
IGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBj
b3JyZWN0LgotICByZXR1cm4gW1soR1BCQm9vbEZsb2F0RGljdGlvbmFyeSopW3NlbGYgYWxsb2Nd
IGluaXRXaXRoVmFsdWVzOiZ2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDoxXSBhdXRvcmVsZWFz
ZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbHVlczooY29uc3QgZmxv
YXQgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0
IEJPT0wgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJ
bnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6
Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCQm9vbEZs
b2F0RGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsdWVzOnZhbHVlcwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlz
OmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUp
ZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJCb29sRmxvYXREaWN0aW9uYXJ5ICopZGljdGlv
bmFyeSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aERpY3Rpb25hcnk6Ci0gIC8vIG9uIHRvIGdldCB0
aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCQm9vbEZsb2F0RGljdGlvbmFyeSopW3Nl
bGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVsZWFzZV07Ci19
Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aENhcGFjaXR5OihOU1VJbnRlZ2VyKW51
bUl0ZW1zIHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bnVtSXRl
bXNdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXQgewotICByZXR1cm4g
W3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFZhbHVlczooY29uc3QgZmxvYXQgW10pdmFsdWVzCi0gICAg
ICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICBpbnQgaWR4ID0ga2V5c1tpXSA/IDEgOiAwOwotICAgICAgX3Zh
bHVlc1tpZHhdID0gdmFsdWVzW2ldOwotICAgICAgX3ZhbHVlU2V0W2lkeF0gPSBZRVM7Ci0gICAg
fQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0
aW9uYXJ5OihHUEJCb29sRmxvYXREaWN0aW9uYXJ5ICopZGljdGlvbmFyeSB7Ci0gIHNlbGYgPSBb
c2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNl
bGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy
OyArK2kpIHsKLSAgICAgICAgaWYgKGRpY3Rpb25hcnktPl92YWx1ZVNldFtpXSkgewotICAgICAg
ICAgIF92YWx1ZXNbaV0gPSBkaWN0aW9uYXJ5LT5fdmFsdWVzW2ldOwotICAgICAgICAgIF92YWx1
ZVNldFtpXSA9IFlFUzsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4g
c2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ2FwYWNpdHk6KE5TVUludGVnZXIp
bnVtSXRlbXMgewotICAjcHJhZ21hIHVudXNlZChudW1JdGVtcykKLSAgcmV0dXJuIFtzZWxmIGlu
aXRXaXRoVmFsdWVzOk5VTEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0jaWYgIWRlZmlu
ZWQoTlNfQkxPQ0tfQVNTRVJUSU9OUykKLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFf
YXV0b2NyZWF0b3IsCi0gICAgICAgICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJl
ZCBiZWZvcmUgcmVsZWFzZSwgYXV0b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xh
c3NdLCBfYXV0b2NyZWF0b3IpOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0jZW5kaWYgIC8vICFk
ZWZpbmVkKE5TX0JMT0NLX0FTU0VSVElPTlMpCi0KLS0gKGluc3RhbmNldHlwZSljb3B5V2l0aFpv
bmU6KE5TWm9uZSAqKXpvbmUgewotICByZXR1cm4gW1tHUEJCb29sRmxvYXREaWN0aW9uYXJ5IGFs
bG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09M
KWlzRXF1YWw6KEdQQkJvb2xGbG9hdERpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlmIChzZWxmID09
IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRPZkNs
YXNzOltHUEJCb29sRmxvYXREaWN0aW9uYXJ5IGNsYXNzXV0pIHsKLSAgICByZXR1cm4gTk87Ci0g
IH0KLSAgaWYgKChfdmFsdWVTZXRbMF0gIT0gb3RoZXItPl92YWx1ZVNldFswXSkgfHwKLSAgICAg
IChfdmFsdWVTZXRbMV0gIT0gb3RoZXItPl92YWx1ZVNldFsxXSkpIHsKLSAgICByZXR1cm4gTk87
Ci0gIH0KLSAgaWYgKChfdmFsdWVTZXRbMF0gJiYgKF92YWx1ZXNbMF0gIT0gb3RoZXItPl92YWx1
ZXNbMF0pKSB8fAotICAgICAgKF92YWx1ZVNldFsxXSAmJiAoX3ZhbHVlc1sxXSAhPSBvdGhlci0+
X3ZhbHVlc1sxXSkpKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBZRVM7Ci19Ci0K
LS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIHJldHVybiAoX3ZhbHVlU2V0WzBdID8gMSA6IDApICsg
KF92YWx1ZVNldFsxXSA/IDEgOiAwKTsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7
Ci0gIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiPCVAICVwPiB7IiwgW3NlbGYgY2xhc3NdLCBzZWxmXTsKLSAgaWYgKF92YWx1ZVNl
dFswXSkgewotICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiTk86ICVmIiwgX3ZhbHVlc1swXV07
Ci0gIH0KLSAgaWYgKF92YWx1ZVNldFsxXSkgewotICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAi
WUVTOiAlZiIsIF92YWx1ZXNbMV1dOwotICB9Ci0gIFtyZXN1bHQgYXBwZW5kU3RyaW5nOkAiIH0i
XTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAoTlNVSW50ZWdlciljb3VudCB7Ci0gIHJldHVy
biAoX3ZhbHVlU2V0WzBdID8gMSA6IDApICsgKF92YWx1ZVNldFsxXSA/IDEgOiAwKTsKLX0KLQot
LSAoQk9PTCl2YWx1ZUZvcktleTooQk9PTClrZXkgdmFsdWU6KGZsb2F0ICopdmFsdWUgewotICBp
bnQgaWR4ID0gKGtleSA/IDEgOiAwKTsKLSAgaWYgKF92YWx1ZVNldFtpZHhdKSB7Ci0gICAgaWYg
KHZhbHVlKSB7Ci0gICAgICAqdmFsdWUgPSBfdmFsdWVzW2lkeF07Ci0gICAgfQotICAgIHJldHVy
biBZRVM7Ci0gIH0KLSAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKXNldEdQQkdlbmVyaWNWYWx1
ZTooR1BCR2VuZXJpY1ZhbHVlICopdmFsdWUKLSAgICAgZm9yR1BCR2VuZXJpY1ZhbHVlS2V5OihH
UEJHZW5lcmljVmFsdWUgKilrZXkgewotICBpbnQgaWR4ID0gKGtleS0+dmFsdWVCb29sID8gMSA6
IDApOwotICBfdmFsdWVzW2lkeF0gPSB2YWx1ZS0+dmFsdWVGbG9hdDsKLSAgX3ZhbHVlU2V0W2lk
eF0gPSBZRVM7Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4dEZvcm1hdDoodm9pZCAoXiko
aWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2sgewotICBpZiAoX3ZhbHVlU2V0WzBdKSB7Ci0g
ICAgYmxvY2soQCJmYWxzZSIsIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJS4qZyIsIEZM
VF9ESUcsIF92YWx1ZXNbMF1dKTsKLSAgfQotICBpZiAoX3ZhbHVlU2V0WzFdKSB7Ci0gICAgYmxv
Y2soQCJ0cnVlIiwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlLipnIiwgRkxUX0RJRywg
X3ZhbHVlc1sxXV0pOwotICB9Ci19Ci0KLS0gKHZvaWQpZW51bWVyYXRlS2V5c0FuZFZhbHVlc1Vz
aW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKEJPT0wga2V5LCBmbG9hdCB2YWx1ZSwgQk9PTCAqc3Rv
cCkpYmxvY2sgewotICBCT09MIHN0b3AgPSBOTzsKLSAgaWYgKF92YWx1ZVNldFswXSkgewotICAg
IGJsb2NrKE5PLCBfdmFsdWVzWzBdLCAmc3RvcCk7Ci0gIH0KLSAgaWYgKCFzdG9wICYmIF92YWx1
ZVNldFsxXSkgewotICAgIGJsb2NrKFlFUywgX3ZhbHVlc1sxXSwgJnN0b3ApOwotICB9Ci19Ci0K
LS0gKHNpemVfdCljb21wdXRlU2VyaWFsaXplZFNpemVBc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0
b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERh
dGFUeXBlKGZpZWxkKTsKLSAgTlNVSW50ZWdlciBjb3VudCA9IDA7Ci0gIHNpemVfdCByZXN1bHQg
PSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgIGlmIChfdmFsdWVTZXRb
aV0pIHsKLSAgICAgICsrY291bnQ7Ci0gICAgICBzaXplX3QgbXNnU2l6ZSA9IENvbXB1dGVEaWN0
Qm9vbEZpZWxkU2l6ZSgoaSA9PSAxKSwga01hcEtleUZpZWxkTnVtYmVyLCBHUEJEYXRhVHlwZUJv
b2wpOwotICAgICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdEZsb2F0RmllbGRTaXplKF92YWx1ZXNb
aV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICAgIHJlc3VsdCAr
PSBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihtc2dTaXplKSArIG1zZ1NpemU7
Ci0gICAgfQotICB9Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29tcHV0ZVdpcmVGb3JtYXRUYWdT
aXplKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVNZXNzYWdlKTsKLSAgcmVzdWx0
ICs9IHRhZ1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0
ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0U3RyZWFt
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BCRmllbGREZXNjcmlwdG9yICop
ZmllbGQgewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlw
ZShmaWVsZCk7Ci0gIHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQkZpZWxk
TnVtYmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZCk7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgaWYgKF92YWx1ZVNldFtpXSkgewotICAgICAgLy8g
V3JpdGUgdGhlIHRhZy4KLSAgICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5vVGFnOnRhZ107
Ci0gICAgICAvLyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4KLSAgICAgIHNpemVfdCBt
c2dTaXplID0gQ29tcHV0ZURpY3RCb29sRmllbGRTaXplKChpID09IDEpLCBrTWFwS2V5RmllbGRO
dW1iZXIsIEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0Rmxv
YXRGaWVsZFNpemUoX3ZhbHVlc1tpXSwga01hcFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5
cGUpOwotICAgICAgW291dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6KGludDMyX3QpbXNnU2l6
ZV07Ci0gICAgICAvLyBXcml0ZSB0aGUgZmllbGRzLgotICAgICAgV3JpdGVEaWN0Qm9vbEZpZWxk
KG91dHB1dFN0cmVhbSwgKGkgPT0gMSksIGtNYXBLZXlGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVC
b29sKTsKLSAgICAgIFdyaXRlRGljdEZsb2F0RmllbGQob3V0cHV0U3RyZWFtLCBfdmFsdWVzW2ld
LCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgfQotICB9Ci19Ci0K
LS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJCb29sRmxvYXREaWN0aW9uYXJ5
ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGljdGlvbmFyeSkgewotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICBpZiAob3RoZXJEaWN0aW9uYXJ5LT5fdmFs
dWVTZXRbaV0pIHsKLSAgICAgICAgX3ZhbHVlU2V0W2ldID0gWUVTOwotICAgICAgICBfdmFsdWVz
W2ldID0gb3RoZXJEaWN0aW9uYXJ5LT5fdmFsdWVzW2ldOwotICAgICAgfQotICAgIH0KLSAgICBp
ZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmll
ZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICAgIH0KLSAgfQotfQotCi0tICh2b2lkKXNldFZhbHVl
OihmbG9hdCl2YWx1ZSBmb3JLZXk6KEJPT0wpa2V5IHsKLSAgaW50IGlkeCA9IChrZXkgPyAxIDog
MCk7Ci0gIF92YWx1ZXNbaWR4XSA9IHZhbHVlOwotICBfdmFsdWVTZXRbaWR4XSA9IFlFUzsKLSAg
aWYgKF9hdXRvY3JlYXRvcikgewotICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVk
KF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVWYWx1ZUZvcktl
eTooQk9PTClhS2V5IHsKLSAgX3ZhbHVlU2V0W2FLZXkgPyAxIDogMF0gPSBOTzsKLX0KLQotLSAo
dm9pZClyZW1vdmVBbGwgewotICBfdmFsdWVTZXRbMF0gPSBOTzsKLSAgX3ZhbHVlU2V0WzFdID0g
Tk87Ci19Ci0KLUBlbmQKLQotLy8lUERETS1FWFBBTkQgRElDVElPTkFSWV9CT09MX0tFWV9UT19Q
T0RfSU1QTChEb3VibGUsIGRvdWJsZSkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0
ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0jcHJhZ21hIG1hcmsgLSBCb29sIC0+IERv
dWJsZQotCi1AaW1wbGVtZW50YXRpb24gR1BCQm9vbERvdWJsZURpY3Rpb25hcnkgewotIEBwYWNr
YWdlCi0gIGRvdWJsZSBfdmFsdWVzWzJdOwotICBCT09MIF92YWx1ZVNldFsyXTsKLX0KLQotKyAo
aW5zdGFuY2V0eXBlKWRpY3Rpb25hcnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdp
dGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF0gYXV0b3JlbGVhc2VdOwotfQotCi0r
IChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWx1ZTooZG91YmxlKXZhbHVlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooQk9PTClrZXkgewotICAvLyBDYXN0IGlzIG5l
ZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5p
dFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJl
Y3QuCi0gIHJldHVybiBbWyhHUEJCb29sRG91YmxlRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGlu
aXRXaXRoVmFsdWVzOiZ2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czoma2V5Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNl
XTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsdWVzOihjb25zdCBkb3Vi
bGUgW10pdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0
IEJPT0wgW10pa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJ
bnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoVmFsdWVzOmZvcktleXM6Y291bnQ6
Ci0gIC8vIG9uIHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCQm9vbERv
dWJsZURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aFZhbHVlczp2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktl
eXM6a2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudDpjb3VudF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5
cGUpZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OihHUEJCb29sRG91YmxlRGljdGlvbmFyeSAqKWRp
Y3Rpb25hcnkgewotICAvLyBDYXN0IGlzIG5lZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hh
dCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5pdFdpdGhEaWN0aW9uYXJ5OgotICAvLyBvbiB0byBn
ZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkJvb2xEb3VibGVEaWN0aW9uYXJ5
Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OmRpY3Rpb25hcnldIGF1dG9yZWxlYXNl
XTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6KE5TVUludGVn
ZXIpbnVtSXRlbXMgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpu
dW1JdGVtc10gYXV0b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIHJl
dHVybiBbc2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmFsdWVzOihjb25zdCBkb3VibGUgW10pdmFsdWVz
Ci0gICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6KGNvbnN0IEJPT0wgW10pa2V5cwotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAgc2VsZiA9
IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICBpbnQgaWR4ID0ga2V5c1tpXSA/IDEgOiAwOwotICAg
ICAgX3ZhbHVlc1tpZHhdID0gdmFsdWVzW2ldOwotICAgICAgX3ZhbHVlU2V0W2lkeF0gPSBZRVM7
Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhEaWN0aW9uYXJ5OihHUEJCb29sRG91YmxlRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkgewotICBz
ZWxmID0gW3NlbGYgaW5pdFdpdGhWYWx1ZXM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci0g
IGlmIChzZWxmKSB7Ci0gICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMjsgKytpKSB7Ci0gICAgICAgIGlmIChkaWN0aW9uYXJ5LT5fdmFsdWVTZXRbaV0pIHsK
LSAgICAgICAgICBfdmFsdWVzW2ldID0gZGljdGlvbmFyeS0+X3ZhbHVlc1tpXTsKLSAgICAgICAg
ICBfdmFsdWVTZXRbaV0gPSBZRVM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5OihOU1VJ
bnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBb
c2VsZiBpbml0V2l0aFZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXTsKLX0KLQotI2lm
ICFkZWZpbmVkKE5TX0JMT0NLX0FTU0VSVElPTlMpCi0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fz
c2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJl
IGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtz
ZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotI2VuZGlm
ICAvLyAhZGVmaW5lZChOU19CTE9DS19BU1NFUlRJT05TKQotCi0tIChpbnN0YW5jZXR5cGUpY29w
eVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCQm9vbERvdWJsZURpY3Rp
b25hcnkgYWxsb2NXaXRoWm9uZTp6b25lXSBpbml0V2l0aERpY3Rpb25hcnk6c2VsZl07Ci19Ci0K
LS0gKEJPT0wpaXNFcXVhbDooR1BCQm9vbERvdWJsZURpY3Rpb25hcnkgKilvdGhlciB7Ci0gIGlm
IChzZWxmID09IG90aGVyKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBp
c0tpbmRPZkNsYXNzOltHUEJCb29sRG91YmxlRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgcmV0
dXJuIE5POwotICB9Ci0gIGlmICgoX3ZhbHVlU2V0WzBdICE9IG90aGVyLT5fdmFsdWVTZXRbMF0p
IHx8Ci0gICAgICAoX3ZhbHVlU2V0WzFdICE9IG90aGVyLT5fdmFsdWVTZXRbMV0pKSB7Ci0gICAg
cmV0dXJuIE5POwotICB9Ci0gIGlmICgoX3ZhbHVlU2V0WzBdICYmIChfdmFsdWVzWzBdICE9IG90
aGVyLT5fdmFsdWVzWzBdKSkgfHwKLSAgICAgIChfdmFsdWVTZXRbMV0gJiYgKF92YWx1ZXNbMV0g
IT0gb3RoZXItPl92YWx1ZXNbMV0pKSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICByZXR1cm4g
WUVTOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gKF92YWx1ZVNldFswXSA/
IDEgOiAwKSArIChfdmFsdWVTZXRbMV0gPyAxIDogMCk7Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVz
Y3JpcHRpb24gewotICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyIsIFtzZWxmIGNsYXNzXSwgc2VsZl07Ci0gIGlm
IChfdmFsdWVTZXRbMF0pIHsKLSAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIk5POiAlbGYiLCBf
dmFsdWVzWzBdXTsKLSAgfQotICBpZiAoX3ZhbHVlU2V0WzFdKSB7Ci0gICAgW3Jlc3VsdCBhcHBl
bmRGb3JtYXQ6QCJZRVM6ICVsZiIsIF92YWx1ZXNbMV1dOwotICB9Ci0gIFtyZXN1bHQgYXBwZW5k
U3RyaW5nOkAiIH0iXTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAoTlNVSW50ZWdlciljb3Vu
dCB7Ci0gIHJldHVybiAoX3ZhbHVlU2V0WzBdID8gMSA6IDApICsgKF92YWx1ZVNldFsxXSA/IDEg
OiAwKTsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleTooQk9PTClrZXkgdmFsdWU6KGRvdWJsZSAq
KXZhbHVlIHsKLSAgaW50IGlkeCA9IChrZXkgPyAxIDogMCk7Ci0gIGlmIChfdmFsdWVTZXRbaWR4
XSkgewotICAgIGlmICh2YWx1ZSkgewotICAgICAgKnZhbHVlID0gX3ZhbHVlc1tpZHhdOwotICAg
IH0KLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClzZXRH
UEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVy
aWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgaW50IGlkeCA9IChrZXktPnZh
bHVlQm9vbCA/IDEgOiAwKTsKLSAgX3ZhbHVlc1tpZHhdID0gdmFsdWUtPnZhbHVlRG91YmxlOwot
ICBfdmFsdWVTZXRbaWR4XSA9IFlFUzsKLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0Rm9y
bWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIGlmIChfdmFs
dWVTZXRbMF0pIHsKLSAgICBibG9jayhAImZhbHNlIiwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlLipsZyIsIERCTF9ESUcsIF92YWx1ZXNbMF1dKTsKLSAgfQotICBpZiAoX3ZhbHVlU2V0
WzFdKSB7Ci0gICAgYmxvY2soQCJ0cnVlIiwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
LipsZyIsIERCTF9ESUcsIF92YWx1ZXNbMV1dKTsKLSAgfQotfQotCi0tICh2b2lkKWVudW1lcmF0
ZUtleXNBbmRWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShCT09MIGtleSwgZG91Ymxl
IHZhbHVlLCBCT09MICpzdG9wKSlibG9jayB7Ci0gIEJPT0wgc3RvcCA9IE5POwotICBpZiAoX3Zh
bHVlU2V0WzBdKSB7Ci0gICAgYmxvY2soTk8sIF92YWx1ZXNbMF0sICZzdG9wKTsKLSAgfQotICBp
ZiAoIXN0b3AgJiYgX3ZhbHVlU2V0WzFdKSB7Ci0gICAgYmxvY2soWUVTLCBfdmFsdWVzWzFdLCAm
c3RvcCk7Ci0gIH0KLX0KLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxpemVkU2l6ZUFzRmllbGQ6
KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlw
ZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBOU1VJbnRlZ2VyIGNvdW50ID0gMDsK
LSAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0g
ICAgaWYgKF92YWx1ZVNldFtpXSkgewotICAgICAgKytjb3VudDsKLSAgICAgIHNpemVfdCBtc2dT
aXplID0gQ29tcHV0ZURpY3RCb29sRmllbGRTaXplKChpID09IDEpLCBrTWFwS2V5RmllbGROdW1i
ZXIsIEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBtc2dTaXplICs9IENvbXB1dGVEaWN0RG91Ymxl
RmllbGRTaXplKF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBl
KTsKLSAgICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3VmFyaW50MzJTaXplRm9ySW50ZWdlciht
c2dTaXplKSArIG1zZ1NpemU7Ci0gICAgfQotICB9Ci0gIHNpemVfdCB0YWdTaXplID0gR1BCQ29t
cHV0ZVdpcmVGb3JtYXRUYWdTaXplKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCRGF0YVR5cGVN
ZXNzYWdlKTsKLSAgcmVzdWx0ICs9IHRhZ1NpemUgKiBjb3VudDsKLSAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotLSAodm9pZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3Ry
ZWFtICopb3V0cHV0U3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXNGaWVsZDooR1BC
RmllbGREZXNjcmlwdG9yICopZmllbGQgewotICBHUEJEYXRhVHlwZSB2YWx1ZURhdGFUeXBlID0g
R1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIHVpbnQzMl90IHRhZyA9IEdQQldpcmVGb3Jt
YXRNYWtlVGFnKEdQQkZpZWxkTnVtYmVyKGZpZWxkKSwgR1BCV2lyZUZvcm1hdExlbmd0aERlbGlt
aXRlZCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgaWYgKF92YWx1ZVNl
dFtpXSkgewotICAgICAgLy8gV3JpdGUgdGhlIHRhZy4KLSAgICAgIFtvdXRwdXRTdHJlYW0gd3Jp
dGVJbnQzMk5vVGFnOnRhZ107Ci0gICAgICAvLyBXcml0ZSB0aGUgc2l6ZSBvZiB0aGUgbWVzc2Fn
ZS4KLSAgICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RCb29sRmllbGRTaXplKChpID09
IDEpLCBrTWFwS2V5RmllbGROdW1iZXIsIEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBtc2dTaXpl
ICs9IENvbXB1dGVEaWN0RG91YmxlRmllbGRTaXplKF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxk
TnVtYmVyLCB2YWx1ZURhdGFUeXBlKTsKLSAgICAgIFtvdXRwdXRTdHJlYW0gd3JpdGVJbnQzMk5v
VGFnOihpbnQzMl90KW1zZ1NpemVdOwotICAgICAgLy8gV3JpdGUgdGhlIGZpZWxkcy4KLSAgICAg
IFdyaXRlRGljdEJvb2xGaWVsZChvdXRwdXRTdHJlYW0sIChpID09IDEpLCBrTWFwS2V5RmllbGRO
dW1iZXIsIEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBXcml0ZURpY3REb3VibGVGaWVsZChvdXRw
dXRTdHJlYW0sIF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2YWx1ZURhdGFUeXBl
KTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQ
QkJvb2xEb3VibGVEaWN0aW9uYXJ5ICopb3RoZXJEaWN0aW9uYXJ5IHsKLSAgaWYgKG90aGVyRGlj
dGlvbmFyeSkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICBpZiAo
b3RoZXJEaWN0aW9uYXJ5LT5fdmFsdWVTZXRbaV0pIHsKLSAgICAgICAgX3ZhbHVlU2V0W2ldID0g
WUVTOwotICAgICAgICBfdmFsdWVzW2ldID0gb3RoZXJEaWN0aW9uYXJ5LT5fdmFsdWVzW2ldOwot
ICAgICAgfQotICAgIH0KLSAgICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgICBHUEJBdXRvY3Jl
YXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICAgIH0KLSAgfQot
fQotCi0tICh2b2lkKXNldFZhbHVlOihkb3VibGUpdmFsdWUgZm9yS2V5OihCT09MKWtleSB7Ci0g
IGludCBpZHggPSAoa2V5ID8gMSA6IDApOwotICBfdmFsdWVzW2lkeF0gPSB2YWx1ZTsKLSAgX3Zh
bHVlU2V0W2lkeF0gPSBZRVM7Ci0gIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICBHUEJBdXRvY3Jl
YXRlZERpY3Rpb25hcnlNb2RpZmllZChfYXV0b2NyZWF0b3IsIHNlbGYpOwotICB9Ci19Ci0KLS0g
KHZvaWQpcmVtb3ZlVmFsdWVGb3JLZXk6KEJPT0wpYUtleSB7Ci0gIF92YWx1ZVNldFthS2V5ID8g
MSA6IDBdID0gTk87Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlQWxsIHsKLSAgX3ZhbHVlU2V0WzBdID0g
Tk87Ci0gIF92YWx1ZVNldFsxXSA9IE5POwotfQotCi1AZW5kCi0KLS8vJVBERE0tRVhQQU5EIERJ
Q1RJT05BUllfQk9PTF9LRVlfVE9fT0JKRUNUX0lNUEwoT2JqZWN0LCBpZCkKLS8vIFRoaXMgYmxv
Y2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0jcHJh
Z21hIG1hcmsgLSBCb29sIC0+IE9iamVjdAotCi1AaW1wbGVtZW50YXRpb24gR1BCQm9vbE9iamVj
dERpY3Rpb25hcnkgewotIEBwYWNrYWdlCi0gIGlkIF92YWx1ZXNbMl07Ci19Ci0KLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoT2Jq
ZWN0czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDowXSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGlu
c3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aE9iamVjdDooaWQpb2JqZWN0Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JLZXk6KEJPT0wpa2V5IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQg
c28gdGhlIGNvbXBpbGVyIGtub3dzIHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRo
T2JqZWN0czpmb3JLZXlzOmNvdW50OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4K
LSAgcmV0dXJuIFtbKEdQQkJvb2xPYmplY3REaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdp
dGhPYmplY3RzOiZvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNl
XTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoT2JqZWN0czooY29uc3QgaWQg
W10pb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3Qg
Qk9PTCBbXSlrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJ
bnRlZ2VyKWNvdW50IHsKLSAgLy8gQ2FzdCBpcyBuZWVkZWQgc28gdGhlIGNvbXBpbGVyIGtub3dz
IHdoYXQgY2xhc3Mgd2UgYXJlIGludm9raW5nIGluaXRXaXRoT2JqZWN0czpmb3JLZXlzOmNvdW50
OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkJvb2xP
YmplY3REaWN0aW9uYXJ5Kilbc2VsZiBhbGxvY10gaW5pdFdpdGhPYmplY3RzOm9iamVjdHMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JLZXlzOmtleXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XSBhdXRvcmVsZWFzZV07Ci19Ci0KLSsgKGluc3Rh
bmNldHlwZSlkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6KEdQQkJvb2xPYmplY3REaWN0aW9uYXJ5
ICopZGljdGlvbmFyeSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93
cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aERpY3Rpb25hcnk6Ci0gIC8vIG9u
IHRvIGdldCB0aGUgdHlwZSBjb3JyZWN0LgotICByZXR1cm4gW1soR1BCQm9vbE9iamVjdERpY3Rp
b25hcnkqKVtzZWxmIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0gYXV0b3Jl
bGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhDYXBhY2l0eTooTlNV
SW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsK
LSAgcmV0dXJuIFtzZWxmIGluaXRXaXRoT2JqZWN0czpOVUxMIGZvcktleXM6TlVMTCBjb3VudDow
XTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT2JqZWN0czooY29uc3QgaWQgW10pb2Jq
ZWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlrZXlz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50IHsKLSAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgaWYgKHNlbGYpIHsKLSAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICBpZiAoIW9iamVjdHNbaV0pIHsKLSAgICAg
ICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAgICAg
ICAgICAgICAgICAgIGZvcm1hdDpAIkF0dGVtcHRpbmcgdG8gYWRkIG5pbCBvYmplY3QgdG8gYSBE
aWN0aW9uYXJ5Il07Ci0gICAgICB9Ci0gICAgICBpbnQgaWR4ID0ga2V5c1tpXSA/IDEgOiAwOwot
ICAgICAgW192YWx1ZXNbaWR4XSByZWxlYXNlXTsKLSAgICAgIF92YWx1ZXNbaWR4XSA9IChpZClb
b2JqZWN0c1tpXSByZXRhaW5dOwotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRGljdGlvbmFyeTooR1BCQm9vbE9iamVjdERpY3Rpb25hcnkg
KilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRoT2JqZWN0czpOVUxMIGZvcktl
eXM6TlVMTCBjb3VudDowXTsKLSAgaWYgKHNlbGYpIHsKLSAgICBpZiAoZGljdGlvbmFyeSkgewot
ICAgICAgX3ZhbHVlc1swXSA9IFtkaWN0aW9uYXJ5LT5fdmFsdWVzWzBdIHJldGFpbl07Ci0gICAg
ICBfdmFsdWVzWzFdID0gW2RpY3Rpb25hcnktPl92YWx1ZXNbMV0gcmV0YWluXTsKLSAgICB9Ci0g
IH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENhcGFjaXR5
OihOU1VJbnRlZ2VyKW51bUl0ZW1zIHsKLSAgI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJl
dHVybiBbc2VsZiBpbml0V2l0aE9iamVjdHM6TlVMTCBmb3JLZXlzOk5VTEwgY291bnQ6MF07Ci19
Ci0KLS0gKHZvaWQpZGVhbGxvYyB7Ci0gIE5TQXNzZXJ0KCFfYXV0b2NyZWF0b3IsCi0gICAgICAg
ICAgIEAiJUA6IEF1dG9jcmVhdG9yIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcmVsZWFzZSwgYXV0
b2NyZWF0b3I6ICVAIiwKLSAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBfYXV0b2NyZWF0b3IpOwot
ICBbX3ZhbHVlc1swXSByZWxlYXNlXTsKLSAgW192YWx1ZXNbMV0gcmVsZWFzZV07Ci0gIFtzdXBl
ciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICop
em9uZSB7Ci0gIHJldHVybiBbW0dQQkJvb2xPYmplY3REaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6
em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNlbGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQ
QkJvb2xPYmplY3REaWN0aW9uYXJ5ICopb3RoZXIgewotICBpZiAoc2VsZiA9PSBvdGhlcikgewot
ICAgIHJldHVybiBZRVM7Ci0gIH0KLSAgaWYgKCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbR1BCQm9v
bE9iamVjdERpY3Rpb25hcnkgY2xhc3NdXSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICBpZiAo
KChfdmFsdWVzWzBdICE9IG5pbCkgIT0gKG90aGVyLT5fdmFsdWVzWzBdICE9IG5pbCkpIHx8Ci0g
ICAgICAoKF92YWx1ZXNbMV0gIT0gbmlsKSAhPSAob3RoZXItPl92YWx1ZXNbMV0gIT0gbmlsKSkp
IHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAgaWYgKCgoX3ZhbHVlc1swXSAhPSBuaWwpICYmICgh
W192YWx1ZXNbMF0gaXNFcXVhbDpvdGhlci0+X3ZhbHVlc1swXV0pKSB8fAotICAgICAgKChfdmFs
dWVzWzFdICE9IG5pbCkgJiYgKCFbX3ZhbHVlc1sxXSBpc0VxdWFsOm90aGVyLT5fdmFsdWVzWzFd
XSkpKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIHJldHVybiBZRVM7Ci19Ci0KLS0gKE5TVUlu
dGVnZXIpaGFzaCB7Ci0gIHJldHVybiAoKF92YWx1ZXNbMF0gIT0gbmlsKSA/IDEgOiAwKSArICgo
X3ZhbHVlc1sxXSAhPSBuaWwpID8gMSA6IDApOwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0
aW9uIHsKLSAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCI8JUAgJXA+IHsiLCBbc2VsZiBjbGFzc10sIHNlbGZdOwotICBpZiAoKF92
YWx1ZXNbMF0gIT0gbmlsKSkgewotICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiTk86ICVAIiwg
X3ZhbHVlc1swXV07Ci0gIH0KLSAgaWYgKChfdmFsdWVzWzFdICE9IG5pbCkpIHsKLSAgICBbcmVz
dWx0IGFwcGVuZEZvcm1hdDpAIllFUzogJUAiLCBfdmFsdWVzWzFdXTsKLSAgfQotICBbcmVzdWx0
IGFwcGVuZFN0cmluZzpAIiB9Il07Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TVUludGVn
ZXIpY291bnQgewotICByZXR1cm4gKChfdmFsdWVzWzBdICE9IG5pbCkgPyAxIDogMCkgKyAoKF92
YWx1ZXNbMV0gIT0gbmlsKSA/IDEgOiAwKTsKLX0KLQotLSAoaWQpb2JqZWN0Rm9yS2V5OihCT09M
KWtleSB7Ci0gIHJldHVybiBfdmFsdWVzW2tleSA/IDEgOiAwXTsKLX0KLQotLSAodm9pZClzZXRH
UEJHZW5lcmljVmFsdWU6KEdQQkdlbmVyaWNWYWx1ZSAqKXZhbHVlCi0gICAgIGZvckdQQkdlbmVy
aWNWYWx1ZUtleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5IHsKLSAgaW50IGlkeCA9IChrZXktPnZh
bHVlQm9vbCA/IDEgOiAwKTsKLSAgW192YWx1ZXNbaWR4XSByZWxlYXNlXTsKLSAgX3ZhbHVlc1tp
ZHhdID0gW3ZhbHVlLT52YWx1ZVN0cmluZyByZXRhaW5dOwotfQotCi0tICh2b2lkKWVudW1lcmF0
ZUZvclRleHRGb3JtYXQ6KHZvaWQgKF4pKGlkIGtleU9iaiwgaWQgdmFsdWVPYmopKWJsb2NrIHsK
LSAgaWYgKF92YWx1ZXNbMF0gIT0gbmlsKSB7Ci0gICAgYmxvY2soQCJmYWxzZSIsIF92YWx1ZXNb
MF0pOwotICB9Ci0gIGlmICgoX3ZhbHVlc1sxXSAhPSBuaWwpKSB7Ci0gICAgYmxvY2soQCJ0cnVl
IiwgX3ZhbHVlc1sxXSk7Ci0gIH0KLX0KLQotLSAodm9pZCllbnVtZXJhdGVLZXlzQW5kT2JqZWN0
c1VzaW5nQmxvY2s6Ci0gICAgKHZvaWQgKF4pKEJPT0wga2V5LCBpZCBvYmplY3QsIEJPT0wgKnN0
b3ApKWJsb2NrIHsKLSAgQk9PTCBzdG9wID0gTk87Ci0gIGlmIChfdmFsdWVzWzBdICE9IG5pbCkg
ewotICAgIGJsb2NrKE5PLCBfdmFsdWVzWzBdLCAmc3RvcCk7Ci0gIH0KLSAgaWYgKCFzdG9wICYm
IChfdmFsdWVzWzFdICE9IG5pbCkpIHsKLSAgICBibG9jayhZRVMsIF92YWx1ZXNbMV0sICZzdG9w
KTsKLSAgfQotfQotCi0tIChCT09MKWlzSW5pdGlhbGl6ZWQgewotICBpZiAoX3ZhbHVlc1swXSAm
JiAhW192YWx1ZXNbMF0gaXNJbml0aWFsaXplZF0pIHsKLSAgICByZXR1cm4gTk87Ci0gIH0KLSAg
aWYgKF92YWx1ZXNbMV0gJiYgIVtfdmFsdWVzWzFdIGlzSW5pdGlhbGl6ZWRdKSB7Ci0gICAgcmV0
dXJuIE5POwotICB9Ci0gIHJldHVybiBZRVM7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlkZWVwQ29w
eVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgR1BCQm9vbE9iamVjdERpY3Rpb25hcnkgKm5l
d0RpY3QgPQotICAgICAgW1tHUEJCb29sT2JqZWN0RGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgaWYgKF92YWx1ZXNbaV0gIT0gbmls
KSB7Ci0gICAgICBuZXdEaWN0LT5fdmFsdWVzW2ldID0gW192YWx1ZXNbaV0gY29weVdpdGhab25l
OnpvbmVdOwotICAgIH0KLSAgfQotICByZXR1cm4gbmV3RGljdDsKLX0KLQotLSAoc2l6ZV90KWNv
bXB1dGVTZXJpYWxpemVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsK
LSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQp
OwotICBOU1VJbnRlZ2VyIGNvdW50ID0gMDsKLSAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgaWYgKF92YWx1ZXNbaV0gIT0gbmlsKSB7Ci0g
ICAgICArK2NvdW50OwotICAgICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEJvb2xGaWVs
ZFNpemUoKGkgPT0gMSksIGtNYXBLZXlGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVCb29sKTsKLSAg
ICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RPYmplY3RGaWVsZFNpemUoX3ZhbHVlc1tpXSwga01h
cFZhbHVlRmllbGROdW1iZXIsIHZhbHVlRGF0YVR5cGUpOwotICAgICAgcmVzdWx0ICs9IEdQQkNv
bXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgICB9
Ci0gIH0KLSAgc2l6ZV90IHRhZ1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BC
RmllbGROdW1iZXIoZmllbGQpLCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFn
U2l6ZSAqIGNvdW50OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2Rl
ZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7
Ci0gIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxk
KTsKLSAgdWludDMyX3QgdGFnID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIo
ZmllbGQpLCBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCAyOyArK2kpIHsKLSAgICBpZiAoX3ZhbHVlc1tpXSAhPSBuaWwpIHsKLSAgICAgIC8vIFdy
aXRlIHRoZSB0YWcuCi0gICAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzp0YWddOwot
ICAgICAgLy8gV3JpdGUgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuCi0gICAgICBzaXplX3QgbXNn
U2l6ZSA9IENvbXB1dGVEaWN0Qm9vbEZpZWxkU2l6ZSgoaSA9PSAxKSwga01hcEtleUZpZWxkTnVt
YmVyLCBHUEJEYXRhVHlwZUJvb2wpOwotICAgICAgbXNnU2l6ZSArPSBDb21wdXRlRGljdE9iamVj
dEZpZWxkU2l6ZShfdmFsdWVzW2ldLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlw
ZSk7Ci0gICAgICBbb3V0cHV0U3RyZWFtIHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXpl
XTsKLSAgICAgIC8vIFdyaXRlIHRoZSBmaWVsZHMuCi0gICAgICBXcml0ZURpY3RCb29sRmllbGQo
b3V0cHV0U3RyZWFtLCAoaSA9PSAxKSwga01hcEtleUZpZWxkTnVtYmVyLCBHUEJEYXRhVHlwZUJv
b2wpOwotICAgICAgV3JpdGVEaWN0T2JqZWN0RmllbGQob3V0cHV0U3RyZWFtLCBfdmFsdWVzW2ld
LCBrTWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgfQotICB9Ci19Ci0K
LS0gKHZvaWQpYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OihHUEJCb29sT2JqZWN0RGljdGlvbmFy
eSAqKW90aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgaWYgKG90aGVyRGljdGlvbmFyeS0+X3Zh
bHVlc1tpXSAhPSBuaWwpIHsKLSAgICAgICAgW192YWx1ZXNbaV0gcmVsZWFzZV07Ci0gICAgICAg
IF92YWx1ZXNbaV0gPSBbb3RoZXJEaWN0aW9uYXJ5LT5fdmFsdWVzW2ldIHJldGFpbl07Ci0gICAg
ICB9Ci0gICAgfQotICAgIGlmIChfYXV0b2NyZWF0b3IpIHsKLSAgICAgIEdQQkF1dG9jcmVhdGVk
RGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7Ci0gICAgfQotICB9Ci19Ci0K
LS0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5OihCT09MKWtleSB7Ci0gIGlmICgh
b2JqZWN0KSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0
aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiQXR0ZW1wdGluZyB0byBhZGQgbmlsIG9iamVj
dCB0byBhIERpY3Rpb25hcnkiXTsKLSAgfQotICBpbnQgaWR4ID0gKGtleSA/IDEgOiAwKTsKLSAg
W192YWx1ZXNbaWR4XSByZWxlYXNlXTsKLSAgX3ZhbHVlc1tpZHhdID0gW29iamVjdCByZXRhaW5d
OwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9k
aWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKXJlbW92ZU9iamVj
dEZvcktleTooQk9PTClhS2V5IHsKLSAgaW50IGlkeCA9IChhS2V5ID8gMSA6IDApOwotICBbX3Zh
bHVlc1tpZHhdIHJlbGVhc2VdOwotICBfdmFsdWVzW2lkeF0gPSBuaWw7Ci19Ci0KLS0gKHZvaWQp
cmVtb3ZlQWxsIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICBbX3ZhbHVl
c1tpXSByZWxlYXNlXTsKLSAgICBfdmFsdWVzW2ldID0gbmlsOwotICB9Ci19Ci0KLUBlbmQKLQot
Ly8lUERETS1FWFBBTkQtRU5EICg4IGV4cGFuc2lvbnMpCi0KLSNwcmFnbWEgbWFyayAtIEJvb2wg
LT4gRW51bQotCi1AaW1wbGVtZW50YXRpb24gR1BCQm9vbEVudW1EaWN0aW9uYXJ5IHsKLSBAcGFj
a2FnZQotICBHUEJFbnVtVmFsaWRhdGlvbkZ1bmMgX3ZhbGlkYXRpb25GdW5jOwotICBpbnQzMl90
IF92YWx1ZXNbMl07Ci0gIEJPT0wgX3ZhbHVlU2V0WzJdOwotfQotCi1Ac3ludGhlc2l6ZSB2YWxp
ZGF0aW9uRnVuYyA9IF92YWxpZGF0aW9uRnVuYzsKLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25h
cnkgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246
TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZXM6
TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6
TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6
MF0gYXV0b3JlbGVhc2VdOwotfQotCi0rIChpbnN0YW5jZXR5cGUpZGljdGlvbmFyeVdpdGhWYWxp
ZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jIHsKLSAgcmV0dXJuIFtb
W3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOk5VTEwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOk5VTEwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjBdIGF1dG9yZWxlYXNlXTsK
LX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOihH
UEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmF3VmFsdWU6KGludDMyX3QpcmF3VmFsdWUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooQk9PTClrZXkgewotICAvLyBDYXN0IGlzIG5l
ZWRlZCBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCBjbGFzcyB3ZSBhcmUgaW52b2tpbmcgaW5p
dFdpdGhWYWx1ZXM6Zm9yS2V5czpjb3VudDoKLSAgLy8gb24gdG8gZ2V0IHRoZSB0eXBlIGNvcnJl
Y3QuCi0gIHJldHVybiBbWyhHUEJCb29sRW51bURpY3Rpb25hcnkqKVtzZWxmIGFsbG9jXSBpbml0
V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpmdW5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlczomcmF3VmFsdWUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JLZXlzOiZrZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjFdIGF1dG9yZWxlYXNl
XTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRpY3Rpb25hcnlXaXRoVmFsaWRhdGlvbkZ1bmN0aW9u
OihHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpZnVuYwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmF3VmFsdWVzOihjb25zdCBpbnQzMl90IFtdKXZhbHVlcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXlzOihjb25zdCBCT09MIFtdKWtl
eXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDooTlNV
SW50ZWdlciljb3VudCB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93
cyB3aGF0IGNsYXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50
OgotICAvLyBvbiB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkJvb2xF
bnVtRGljdGlvbmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZ1
bmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmF3VmFsdWVzOnZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleXM6a2V5cwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY291bnQ6Y291bnRdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBl
KWRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTooR1BCQm9vbEVudW1EaWN0aW9uYXJ5ICopZGljdGlv
bmFyeSB7Ci0gIC8vIENhc3QgaXMgbmVlZGVkIHNvIHRoZSBjb21waWxlciBrbm93cyB3aGF0IGNs
YXNzIHdlIGFyZSBpbnZva2luZyBpbml0V2l0aFZhbHVlczpmb3JLZXlzOmNvdW50OgotICAvLyBv
biB0byBnZXQgdGhlIHR5cGUgY29ycmVjdC4KLSAgcmV0dXJuIFtbKEdQQkJvb2xFbnVtRGljdGlv
bmFyeSopW3NlbGYgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpkaWN0aW9uYXJ5XSBhdXRvcmVs
ZWFzZV07Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlkaWN0aW9uYXJ5V2l0aFZhbGlkYXRpb25GdW5j
dGlvbjooR1BCRW51bVZhbGlkYXRpb25GdW5jKWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXBhY2l0eTooTlNVSW50ZWdlciludW1JdGVtcyB7Ci0gIHJldHVy
biBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpmdW5jIGNhcGFjaXR5
Om51bUl0ZW1zXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0IHsKLSAg
cmV0dXJuIFtzZWxmIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOk5VTEwgcmF3VmFsdWVzOk5V
TEwgZm9yS2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhW
YWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jIHsKLSAgcmV0dXJu
IFtzZWxmIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZ1bmMgcmF3VmFsdWVzOk5VTEwgZm9y
S2V5czpOVUxMIGNvdW50OjBdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWxpZGF0
aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJhd1ZhbHVlczooY29uc3QgaW50MzJfdCBbXSlyYXdWYWx1ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czooY29uc3QgQk9PTCBbXSlr
ZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KE5TVUludGVn
ZXIpY291bnQgewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBpZiAoc2VsZikgewotICAgIF92
YWxpZGF0aW9uRnVuYyA9IChmdW5jICE9IE5VTEwgPyBmdW5jIDogRGljdERlZmF1bHRfSXNWYWxp
ZFZhbHVlKTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0g
ICAgICBpbnQgaWR4ID0ga2V5c1tpXSA/IDEgOiAwOwotICAgICAgX3ZhbHVlc1tpZHhdID0gcmF3
VmFsdWVzW2ldOwotICAgICAgX3ZhbHVlU2V0W2lkeF0gPSBZRVM7Ci0gICAgfQotICB9Ci0gIHJl
dHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaWN0aW9uYXJ5OihHUEJC
b29sRW51bURpY3Rpb25hcnkgKilkaWN0aW9uYXJ5IHsKLSAgc2VsZiA9IFtzZWxmIGluaXRXaXRo
VmFsaWRhdGlvbkZ1bmN0aW9uOmRpY3Rpb25hcnkudmFsaWRhdGlvbkZ1bmMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWVzOk5VTEwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JLZXlzOk5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50OjBdOwotICBpZiAoc2VsZikgewotICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0g
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgICBpZiAoZGljdGlvbmFy
eS0+X3ZhbHVlU2V0W2ldKSB7Ci0gICAgICAgICAgX3ZhbHVlc1tpXSA9IGRpY3Rpb25hcnktPl92
YWx1ZXNbaV07Ci0gICAgICAgICAgX3ZhbHVlU2V0W2ldID0gWUVTOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246KEdQQkVudW1WYWxpZGF0aW9uRnVuYylmdW5jCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHk6KE5TVUludGVnZXIpbnVtSXRl
bXMgewotI3ByYWdtYSB1bnVzZWQobnVtSXRlbXMpCi0gIHJldHVybiBbc2VsZiBpbml0V2l0aFZh
bGlkYXRpb25GdW5jdGlvbjpmdW5jIHJhd1ZhbHVlczpOVUxMIGZvcktleXM6TlVMTCBjb3VudDow
XTsKLX0KLQotI2lmICFkZWZpbmVkKE5TX0JMT0NLX0FTU0VSVElPTlMpCi0tICh2b2lkKWRlYWxs
b2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAgICBAIiVAOiBBdXRvY3Jl
YXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9jcmVhdG9yOiAlQCIsCi0g
ICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotI2VuZGlmICAvLyAhZGVmaW5lZChOU19CTE9DS19BU1NFUlRJT05TKQotCi0tIChpbnN0
YW5jZXR5cGUpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgcmV0dXJuIFtbR1BCQm9v
bEVudW1EaWN0aW9uYXJ5IGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdFdpdGhEaWN0aW9uYXJ5OnNl
bGZdOwotfQotCi0tIChCT09MKWlzRXF1YWw6KEdQQkJvb2xFbnVtRGljdGlvbmFyeSAqKW90aGVy
IHsKLSAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIGlmICgh
W290aGVyIGlzS2luZE9mQ2xhc3M6W0dQQkJvb2xFbnVtRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0g
ICAgcmV0dXJuIE5POwotICB9Ci0gIGlmICgoX3ZhbHVlU2V0WzBdICE9IG90aGVyLT5fdmFsdWVT
ZXRbMF0pIHx8Ci0gICAgICAoX3ZhbHVlU2V0WzFdICE9IG90aGVyLT5fdmFsdWVTZXRbMV0pKSB7
Ci0gICAgcmV0dXJuIE5POwotICB9Ci0gIGlmICgoX3ZhbHVlU2V0WzBdICYmIChfdmFsdWVzWzBd
ICE9IG90aGVyLT5fdmFsdWVzWzBdKSkgfHwKLSAgICAgIChfdmFsdWVTZXRbMV0gJiYgKF92YWx1
ZXNbMV0gIT0gb3RoZXItPl92YWx1ZXNbMV0pKSkgewotICAgIHJldHVybiBOTzsKLSAgfQotICBy
ZXR1cm4gWUVTOwotfQotCi0tIChOU1VJbnRlZ2VyKWhhc2ggewotICByZXR1cm4gKF92YWx1ZVNl
dFswXSA/IDEgOiAwKSArIChfdmFsdWVTZXRbMV0gPyAxIDogMCk7Ci19Ci0KLS0gKE5TU3RyaW5n
ICopZGVzY3JpcHRpb24gewotICBOU011dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD4geyIsIFtzZWxmIGNsYXNzXSwgc2VsZl07
Ci0gIGlmIChfdmFsdWVTZXRbMF0pIHsKLSAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIk5POiAl
ZCIsIF92YWx1ZXNbMF1dOwotICB9Ci0gIGlmIChfdmFsdWVTZXRbMV0pIHsKLSAgICBbcmVzdWx0
IGFwcGVuZEZvcm1hdDpAIllFUzogJWQiLCBfdmFsdWVzWzFdXTsKLSAgfQotICBbcmVzdWx0IGFw
cGVuZFN0cmluZzpAIiB9Il07Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TVUludGVnZXIp
Y291bnQgewotICByZXR1cm4gKF92YWx1ZVNldFswXSA/IDEgOiAwKSArIChfdmFsdWVTZXRbMV0g
PyAxIDogMCk7Ci19Ci0KLS0gKEJPT0wpdmFsdWVGb3JLZXk6KEJPT0wpa2V5IHZhbHVlOihpbnQz
Ml90Kil2YWx1ZSB7Ci0gIGludCBpZHggPSAoa2V5ID8gMSA6IDApOwotICBpZiAoX3ZhbHVlU2V0
W2lkeF0pIHsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgIGludDMyX3QgcmVzdWx0ID0gX3ZhbHVl
c1tpZHhdOwotICAgICAgaWYgKCFfdmFsaWRhdGlvbkZ1bmMocmVzdWx0KSkgewotICAgICAgICBy
ZXN1bHQgPSBrR1BCVW5yZWNvZ25pemVkRW51bWVyYXRvclZhbHVlOwotICAgICAgfQotICAgICAg
KnZhbHVlID0gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIHJldHVybiBO
TzsKLX0KLQotLSAoQk9PTCl2YWx1ZUZvcktleTooQk9PTClrZXkgcmF3VmFsdWU6KGludDMyX3Qq
KXJhd1ZhbHVlIHsKLSAgaW50IGlkeCA9IChrZXkgPyAxIDogMCk7Ci0gIGlmIChfdmFsdWVTZXRb
aWR4XSkgewotICAgIGlmIChyYXdWYWx1ZSkgewotICAgICAgKnJhd1ZhbHVlID0gX3ZhbHVlc1tp
ZHhdOwotICAgIH0KLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIHJldHVybiBOTzsKLX0KLQotLSAo
dm9pZCllbnVtZXJhdGVLZXlzQW5kVmFsdWVzVXNpbmdCbG9jazoKLSAgICAodm9pZCAoXikoQk9P
TCBrZXksIGludDMyX3QgdmFsdWUsIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAgQk9PTCBzdG9wID0g
Tk87Ci0gIGlmIChfdmFsdWVTZXRbMF0pIHsKLSAgICBibG9jayhOTywgX3ZhbHVlc1swXSwgJnN0
b3ApOwotICB9Ci0gIGlmICghc3RvcCAmJiBfdmFsdWVTZXRbMV0pIHsKLSAgICBibG9jayhZRVMs
IF92YWx1ZXNbMV0sICZzdG9wKTsKLSAgfQotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRS
YXdWYWx1ZXNVc2luZ0Jsb2NrOgotICAgICh2b2lkICheKShCT09MIGtleSwgaW50MzJfdCByYXdW
YWx1ZSwgQk9PTCAqc3RvcCkpYmxvY2sgewotICBCT09MIHN0b3AgPSBOTzsKLSAgR1BCRW51bVZh
bGlkYXRpb25GdW5jIGZ1bmMgPSBfdmFsaWRhdGlvbkZ1bmM7Ci0gIGludDMyX3QgdmFsaWRhdGVk
VmFsdWU7Ci0gIGlmIChfdmFsdWVTZXRbMF0pIHsKLSAgICB2YWxpZGF0ZWRWYWx1ZSA9IF92YWx1
ZXNbMF07Ci0gICAgaWYgKCFmdW5jKHZhbGlkYXRlZFZhbHVlKSkgewotICAgICAgdmFsaWRhdGVk
VmFsdWUgPSBrR1BCVW5yZWNvZ25pemVkRW51bWVyYXRvclZhbHVlOwotICAgIH0KLSAgICBibG9j
ayhOTywgdmFsaWRhdGVkVmFsdWUsICZzdG9wKTsKLSAgfQotICBpZiAoIXN0b3AgJiYgX3ZhbHVl
U2V0WzFdKSB7Ci0gICAgdmFsaWRhdGVkVmFsdWUgPSBfdmFsdWVzWzFdOwotICAgIGlmICghZnVu
Yyh2YWxpZGF0ZWRWYWx1ZSkpIHsKLSAgICAgIHZhbGlkYXRlZFZhbHVlID0ga0dQQlVucmVjb2du
aXplZEVudW1lcmF0b3JWYWx1ZTsKLSAgICB9Ci0gICAgYmxvY2soWUVTLCB2YWxpZGF0ZWRWYWx1
ZSwgJnN0b3ApOwotICB9Ci19Ci0KLS8vJVBERE0tRVhQQU5EIFNFUklBTF9EQVRBX0ZPUl9FTlRS
WV9QT0RfRW51bShCb29sKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8g
bm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLS0gKE5TRGF0YSAqKXNlcmlhbGl6ZWREYXRhRm9yVW5r
bm93blZhbHVlOihpbnQzMl90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcktleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrZXlEYXRhVHlwZTooR1BCRGF0YVR5cGUpa2V5RGF0YVR5cGUgewotICBzaXplX3Qg
bXNnU2l6ZSA9IENvbXB1dGVEaWN0Qm9vbEZpZWxkU2l6ZShrZXktPnZhbHVlQm9vbCwga01hcEtl
eUZpZWxkTnVtYmVyLCBrZXlEYXRhVHlwZSk7Ci0gIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RFbnVt
RmllbGRTaXplKHZhbHVlLCBrTWFwVmFsdWVGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVFbnVtKTsK
LSAgTlNNdXRhYmxlRGF0YSAqZGF0YSA9IFtOU011dGFibGVEYXRhIGRhdGFXaXRoTGVuZ3RoOm1z
Z1NpemVdOwotICBHUEJDb2RlZE91dHB1dFN0cmVhbSAqb3V0cHV0U3RyZWFtID0gW1tHUEJDb2Rl
ZE91dHB1dFN0cmVhbSBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFdOwotICBXcml0ZURpY3RCb29s
RmllbGQob3V0cHV0U3RyZWFtLCBrZXktPnZhbHVlQm9vbCwga01hcEtleUZpZWxkTnVtYmVyLCBr
ZXlEYXRhVHlwZSk7Ci0gIFdyaXRlRGljdEVudW1GaWVsZChvdXRwdXRTdHJlYW0sIHZhbHVlLCBr
TWFwVmFsdWVGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVFbnVtKTsKLSAgW291dHB1dFN0cmVhbSBy
ZWxlYXNlXTsKLSAgcmV0dXJuIGRhdGE7Ci19Ci0KLS8vJVBERE0tRVhQQU5ELUVORCBTRVJJQUxf
REFUQV9GT1JfRU5UUllfUE9EX0VudW0oQm9vbCkKLQotLSAoc2l6ZV90KWNvbXB1dGVTZXJpYWxp
emVkU2l6ZUFzRmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkIHsKLSAgR1BCRGF0YVR5
cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBOU1VJbnRl
Z2VyIGNvdW50ID0gMDsKLSAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDwgMjsgKytpKSB7Ci0gICAgaWYgKF92YWx1ZVNldFtpXSkgewotICAgICAgKytjb3VudDsKLSAg
ICAgIHNpemVfdCBtc2dTaXplID0gQ29tcHV0ZURpY3RCb29sRmllbGRTaXplKChpID09IDEpLCBr
TWFwS2V5RmllbGROdW1iZXIsIEdQQkRhdGFUeXBlQm9vbCk7Ci0gICAgICBtc2dTaXplICs9IENv
bXB1dGVEaWN0SW50MzJGaWVsZFNpemUoX3ZhbHVlc1tpXSwga01hcFZhbHVlRmllbGROdW1iZXIs
IHZhbHVlRGF0YVR5cGUpOwotICAgICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNp
emVGb3JJbnRlZ2VyKG1zZ1NpemUpICsgbXNnU2l6ZTsKLSAgICB9Ci0gIH0KLSAgc2l6ZV90IHRh
Z1NpemUgPSBHUEJDb21wdXRlV2lyZUZvcm1hdFRhZ1NpemUoR1BCRmllbGROdW1iZXIoZmllbGQp
LCBHUEJEYXRhVHlwZU1lc3NhZ2UpOwotICByZXN1bHQgKz0gdGFnU2l6ZSAqIGNvdW50OwotICBy
ZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTooR1BC
Q29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZCB7Ci0gIEdQQkRhdGFUeXBlIHZh
bHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgdWludDMyX3QgdGFn
ID0gR1BCV2lyZUZvcm1hdE1ha2VUYWcoR1BCRmllbGROdW1iZXIoZmllbGQpLCBHUEJXaXJlRm9y
bWF0TGVuZ3RoRGVsaW1pdGVkKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAg
ICBpZiAoX3ZhbHVlU2V0W2ldKSB7Ci0gICAgICAvLyBXcml0ZSB0aGUgdGFnLgotICAgICAgW291
dHB1dFN0cmVhbSB3cml0ZUludDMyTm9UYWc6dGFnXTsKLSAgICAgIC8vIFdyaXRlIHRoZSBzaXpl
IG9mIHRoZSBtZXNzYWdlLgotICAgICAgc2l6ZV90IG1zZ1NpemUgPSBDb21wdXRlRGljdEJvb2xG
aWVsZFNpemUoKGkgPT0gMSksIGtNYXBLZXlGaWVsZE51bWJlciwgR1BCRGF0YVR5cGVCb29sKTsK
LSAgICAgIG1zZ1NpemUgKz0gQ29tcHV0ZURpY3RJbnQzMkZpZWxkU2l6ZShfdmFsdWVzW2ldLCBr
TWFwVmFsdWVGaWVsZE51bWJlciwgdmFsdWVEYXRhVHlwZSk7Ci0gICAgICBbb3V0cHV0U3RyZWFt
IHdyaXRlSW50MzJOb1RhZzooaW50MzJfdCltc2dTaXplXTsKLSAgICAgIC8vIFdyaXRlIHRoZSBm
aWVsZHMuCi0gICAgICBXcml0ZURpY3RCb29sRmllbGQob3V0cHV0U3RyZWFtLCAoaSA9PSAxKSwg
a01hcEtleUZpZWxkTnVtYmVyLCBHUEJEYXRhVHlwZUJvb2wpOwotICAgICAgV3JpdGVEaWN0SW50
MzJGaWVsZChvdXRwdXRTdHJlYW0sIF92YWx1ZXNbaV0sIGtNYXBWYWx1ZUZpZWxkTnVtYmVyLCB2
YWx1ZURhdGFUeXBlKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZCllbnVtZXJhdGVGb3JUZXh0
Rm9ybWF0Oih2b2lkICheKShpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSlibG9jayB7Ci0gIGlmIChf
dmFsdWVTZXRbMF0pIHsKLSAgICBibG9jayhAImZhbHNlIiwgQChfdmFsdWVzWzBdKSk7Ci0gIH0K
LSAgaWYgKF92YWx1ZVNldFsxXSkgewotICAgIGJsb2NrKEAidHJ1ZSIsIEAoX3ZhbHVlc1sxXSkp
OwotICB9Ci19Ci0KLS0gKHZvaWQpc2V0R1BCR2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFsdWUg
Kil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmljVmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtl
eSB7Ci0gIGludCBpZHggPSAoa2V5LT52YWx1ZUJvb2wgPyAxIDogMCk7Ci0gIF92YWx1ZXNbaWR4
XSA9IHZhbHVlLT52YWx1ZUludDMyOwotICBfdmFsdWVTZXRbaWR4XSA9IFlFUzsKLX0KLQotLSAo
dm9pZClhZGRSYXdFbnRyaWVzRnJvbURpY3Rpb25hcnk6KEdQQkJvb2xFbnVtRGljdGlvbmFyeSAq
KW90aGVyRGljdGlvbmFyeSB7Ci0gIGlmIChvdGhlckRpY3Rpb25hcnkpIHsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgaWYgKG90aGVyRGljdGlvbmFyeS0+X3ZhbHVl
U2V0W2ldKSB7Ci0gICAgICAgIF92YWx1ZVNldFtpXSA9IFlFUzsKLSAgICAgICAgX3ZhbHVlc1tp
XSA9IG90aGVyRGljdGlvbmFyeS0+X3ZhbHVlc1tpXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KF9hdXRvY3JlYXRvcikgewotICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQo
X2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClzZXRWYWx1ZToo
aW50MzJfdCl2YWx1ZSBmb3JLZXk6KEJPT0wpa2V5IHsKLSAgaWYgKCFfdmFsaWRhdGlvbkZ1bmMo
dmFsdWUpKSB7Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0
aW9uCi0gICAgICAgICAgICAgICAgZm9ybWF0OkAiR1BCQm9vbEVudW1EaWN0aW9uYXJ5OiBBdHRl
bXB0IHRvIHNldCBhbiB1bmtub3duIGVudW0gdmFsdWUgKCVkKSIsCi0gICAgIHZhbHVlXTsKLSAg
fQotICBpbnQgaWR4ID0gKGtleSA/IDEgOiAwKTsKLSAgX3ZhbHVlc1tpZHhdID0gdmFsdWU7Ci0g
IF92YWx1ZVNldFtpZHhdID0gWUVTOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0
b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQot
Ci0tICh2b2lkKXNldFJhd1ZhbHVlOihpbnQzMl90KXJhd1ZhbHVlIGZvcktleTooQk9PTClrZXkg
ewotICBpbnQgaWR4ID0gKGtleSA/IDEgOiAwKTsKLSAgX3ZhbHVlc1tpZHhdID0gcmF3VmFsdWU7
Ci0gIF92YWx1ZVNldFtpZHhdID0gWUVTOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BC
QXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQot
fQotCi0tICh2b2lkKXJlbW92ZVZhbHVlRm9yS2V5OihCT09MKWFLZXkgewotICBfdmFsdWVTZXRb
YUtleSA/IDEgOiAwXSA9IE5POwotfQotCi0tICh2b2lkKXJlbW92ZUFsbCB7Ci0gIF92YWx1ZVNl
dFswXSA9IE5POwotICBfdmFsdWVTZXRbMV0gPSBOTzsKLX0KLQotQGVuZAotCi0jcHJhZ21hIG1h
cmsgLSBOU0RpY3Rpb25hcnkgU3ViY2xhc3MKLQotQGltcGxlbWVudGF0aW9uIEdQQkF1dG9jcmVh
dGVkRGljdGlvbmFyeSB7Ci0gIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9kaWN0aW9uYXJ5OwotfQot
Ci0tICh2b2lkKWRlYWxsb2MgewotICBOU0Fzc2VydCghX2F1dG9jcmVhdG9yLAotICAgICAgICAg
ICBAIiVAOiBBdXRvY3JlYXRvciBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHJlbGVhc2UsIGF1dG9j
cmVhdG9yOiAlQCIsCi0gICAgICAgICAgIFtzZWxmIGNsYXNzXSwgX2F1dG9jcmVhdG9yKTsKLSAg
W19kaWN0aW9uYXJ5IHJlbGVhc2VdOwotICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLSNwcmFnbWEg
bWFyayBSZXF1aXJlZCBOU0RpY3Rpb25hcnkgb3ZlcnJpZGVzCi0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aE9iamVjdHM6KGNvbnN0IGlkIFtdKW9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcktleXM6KGNvbnN0IGlkPE5TQ29weWluZz4gW10pa2V5cwotICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudDooTlNVSW50ZWdlciljb3VudCB7Ci0gIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gIGlmIChzZWxmKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rpb25h
cnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpvYmplY3RzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5czprZXlzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDpjb3Vu
dF07Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TVUludGVnZXIpY291bnQgewotICBy
ZXR1cm4gW19kaWN0aW9uYXJ5IGNvdW50XTsKLX0KLQotLSAoaWQpb2JqZWN0Rm9yS2V5OihpZClh
S2V5IHsKLSAgcmV0dXJuIFtfZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6YUtleV07Ci19Ci0KLS0g
KE5TRW51bWVyYXRvciAqKWtleUVudW1lcmF0b3IgewotICBpZiAoX2RpY3Rpb25hcnkgPT0gbmls
KSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
OwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkga2V5RW51bWVyYXRvcl07Ci19Ci0KLSNwcmFn
bWEgbWFyayBSZXF1aXJlZCBOU011dGFibGVEaWN0aW9uYXJ5IG92ZXJyaWRlcwotCi0vLyBPbmx5
IG5lZWQgdG8gY2FsbCBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnlNb2RpZmllZCgpIHdoZW4gYWRk
aW5nIHRoaW5ncwotLy8gc2luY2Ugd2Ugb25seSBhdXRvY3JlYXRlIGVtcHR5IGRpY3Rpb25hcmll
cy4KLQotLSAodm9pZClzZXRPYmplY3Q6KGlkKWFuT2JqZWN0IGZvcktleTooaWQ8TlNDb3B5aW5n
PilhS2V5IHsKLSAgaWYgKF9kaWN0aW9uYXJ5ID09IG5pbCkgewotICAgIF9kaWN0aW9uYXJ5ID0g
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgfQotICBbX2RpY3Rpb25hcnkg
c2V0T2JqZWN0OmFuT2JqZWN0IGZvcktleTphS2V5XTsKLSAgaWYgKF9hdXRvY3JlYXRvcikgewot
ICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKF9hdXRvY3JlYXRvciwgc2VsZik7
Ci0gIH0KLX0KLQotLSAodm9pZClyZW1vdmVPYmplY3RGb3JLZXk6KGlkKWFLZXkgewotICBbX2Rp
Y3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5OmFLZXldOwotfQotCi0jcHJhZ21hIG1hcmsgRXh0
cmEgdGhpbmdzIGhvb2tlZAotCi0tIChpZCljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewot
ICBpZiAoX2RpY3Rpb25hcnkgPT0gbmlsKSB7Ci0gICAgX2RpY3Rpb25hcnkgPSBbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICB9Ci0gIHJldHVybiBbX2RpY3Rpb25hcnkgY29w
eVdpdGhab25lOnpvbmVdOwotfQotCi0tIChpZCltdXRhYmxlQ29weVdpdGhab25lOihOU1pvbmUg
Kil6b25lIHsKLSAgaWYgKF9kaWN0aW9uYXJ5ID09IG5pbCkgewotICAgIF9kaWN0aW9uYXJ5ID0g
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgfQotICByZXR1cm4gW19kaWN0
aW9uYXJ5IG11dGFibGVDb3B5V2l0aFpvbmU6em9uZV07Ci19Ci0KLS0gKGlkKW9iamVjdEZvcktl
eWVkU3Vic2NyaXB0OihpZClrZXkgewotICByZXR1cm4gW19kaWN0aW9uYXJ5IG9iamVjdEZvcktl
eWVkU3Vic2NyaXB0OmtleV07Ci19Ci0KLS0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmogZm9yS2V5
ZWRTdWJzY3JpcHQ6KGlkPE5TQ29weWluZz4pa2V5IHsKLSAgaWYgKF9kaWN0aW9uYXJ5ID09IG5p
bCkgewotICAgIF9kaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
XTsKLSAgfQotICBbX2RpY3Rpb25hcnkgc2V0T2JqZWN0Om9iaiBmb3JLZXllZFN1YnNjcmlwdDpr
ZXldOwotICBpZiAoX2F1dG9jcmVhdG9yKSB7Ci0gICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5
TW9kaWZpZWQoX2F1dG9jcmVhdG9yLCBzZWxmKTsKLSAgfQotfQotCi0tICh2b2lkKWVudW1lcmF0
ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazoodm9pZCAoXikoaWQga2V5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkIG9iaiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpzdG9wKSli
bG9jayB7Ci0gIFtfZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6
YmxvY2tdOwotfQotCi0tICh2b2lkKWVudW1lcmF0ZUtleXNBbmRPYmplY3RzV2l0aE9wdGlvbnM6
KE5TRW51bWVyYXRpb25PcHRpb25zKW9wdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNpbmdCbG9jazoodm9pZCAoXikoaWQga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCBvYmosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnN0b3ApKWJsb2NrIHsKLSAg
W19kaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzV2l0aE9wdGlvbnM6b3B0cyB1c2lu
Z0Jsb2NrOmJsb2NrXTsKLX0KLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkRpY3Rp
b25hcnlfUGFja2FnZVByaXZhdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJEaWN0aW9uYXJ5X1BhY2thZ2VQ
cml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOTIxZThlYzcwODhkNzA0
MmM0MWUzYjg3YTQyYzEwN2Y0YTkzNTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkRpY3Rpb25hcnlfUGFja2FnZVByaXZhdGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ4OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQg
IkdQQkRpY3Rpb25hcnkuaCIKLQotQGNsYXNzIEdQQkNvZGVkSW5wdXRTdHJlYW07Ci1AY2xhc3Mg
R1BCQ29kZWRPdXRwdXRTdHJlYW07Ci1AY2xhc3MgR1BCRXh0ZW5zaW9uUmVnaXN0cnk7Ci1AY2xh
c3MgR1BCRmllbGREZXNjcmlwdG9yOwotCi1AcHJvdG9jb2wgR1BCRGljdGlvbmFyeUludGVybmFs
c1Byb3RvY29sCi0tIChzaXplX3QpY29tcHV0ZVNlcmlhbGl6ZWRTaXplQXNGaWVsZDooR1BCRmll
bGREZXNjcmlwdG9yICopZmllbGQ7Ci0tICh2b2lkKXdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbToo
R1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXRTdHJlYW0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICBhc0ZpZWxkOihHUEJGaWVsZERlc2NyaXB0b3IgKilmaWVsZDsKLS0gKHZvaWQpc2V0R1BC
R2VuZXJpY1ZhbHVlOihHUEJHZW5lcmljVmFsdWUgKil2YWx1ZQotICAgICBmb3JHUEJHZW5lcmlj
VmFsdWVLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleTsKLS0gKHZvaWQpZW51bWVyYXRlRm9yVGV4
dEZvcm1hdDoodm9pZCAoXikoaWQga2V5T2JqLCBpZCB2YWx1ZU9iaikpYmxvY2s7Ci1AZW5kCi0K
LS8vJVBERE0tREVGSU5FIERJQ1RJT05BUllfUFJJVl9JTlRFUkZBQ0VTX0ZPUl9QT0RfS0VZKEtF
WV9OQU1FKQotLy8lRElDVElPTkFSWV9QT0RfUFJJVl9JTlRFUkZBQ0VTX0ZPUl9LRVkoS0VZX05B
TUUpCi0vLyVESUNUSU9OQVJZX1BSSVZBVEVfSU5URVJGQUNFUyhLRVlfTkFNRSwgT2JqZWN0LCBP
YmplY3QpCi0vLyVQRERNLURFRklORSBESUNUSU9OQVJZX1BPRF9QUklWX0lOVEVSRkFDRVNfRk9S
X0tFWShLRVlfTkFNRSkKLS8vJURJQ1RJT05BUllfUFJJVkFURV9JTlRFUkZBQ0VTKEtFWV9OQU1F
LCBVSW50MzIsIEJhc2ljKQotLy8lRElDVElPTkFSWV9QUklWQVRFX0lOVEVSRkFDRVMoS0VZX05B
TUUsIEludDMyLCBCYXNpYykKLS8vJURJQ1RJT05BUllfUFJJVkFURV9JTlRFUkZBQ0VTKEtFWV9O
QU1FLCBVSW50NjQsIEJhc2ljKQotLy8lRElDVElPTkFSWV9QUklWQVRFX0lOVEVSRkFDRVMoS0VZ
X05BTUUsIEludDY0LCBCYXNpYykKLS8vJURJQ1RJT05BUllfUFJJVkFURV9JTlRFUkZBQ0VTKEtF
WV9OQU1FLCBCb29sLCBCYXNpYykKLS8vJURJQ1RJT05BUllfUFJJVkFURV9JTlRFUkZBQ0VTKEtF
WV9OQU1FLCBGbG9hdCwgQmFzaWMpCi0vLyVESUNUSU9OQVJZX1BSSVZBVEVfSU5URVJGQUNFUyhL
RVlfTkFNRSwgRG91YmxlLCBCYXNpYykKLS8vJURJQ1RJT05BUllfUFJJVkFURV9JTlRFUkZBQ0VT
KEtFWV9OQU1FLCBFbnVtLCBFbnVtKQotCi0vLyVQRERNLURFRklORSBESUNUSU9OQVJZX1BSSVZB
VEVfSU5URVJGQUNFUyhLRVlfTkFNRSwgVkFMVUVfTkFNRSwgSEVMUEVSKQotLy8lQGludGVyZmFj
ZSBHUEIjI0tFWV9OQU1FIyNWQUxVRV9OQU1FIyNEaWN0aW9uYXJ5ICgpIDxHUEJEaWN0aW9uYXJ5
SW50ZXJuYWxzUHJvdG9jb2w+IHsKLS8vJSBAcGFja2FnZQotLy8lICBHUEJfVU5TQUZFX1VOUkVU
QUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotLy8lfQotLy8lRVhUUkFfRElDVElPTkFS
WV9QUklWQVRFX0lOVEVSRkFDRVNfIyNIRUxQRVIoKUBlbmQKLS8vJQotCi0vLyVQRERNLURFRklO
RSBFWFRSQV9ESUNUSU9OQVJZX1BSSVZBVEVfSU5URVJGQUNFU19CYXNpYygpCi0vLyBFbXB0eQot
Ly8lUERETS1ERUZJTkUgRVhUUkFfRElDVElPTkFSWV9QUklWQVRFX0lOVEVSRkFDRVNfT2JqZWN0
KCkKLS8vJS0gKEJPT0wpaXNJbml0aWFsaXplZDsKLS8vJS0gKGluc3RhbmNldHlwZSlkZWVwQ29w
eVdpdGhab25lOihOU1pvbmUgKil6b25lCi0vLyUgICAgX19hdHRyaWJ1dGVfXygobnNfcmV0dXJu
c19yZXRhaW5lZCkpOwotLy8lCi0vLyVQRERNLURFRklORSBFWFRSQV9ESUNUSU9OQVJZX1BSSVZB
VEVfSU5URVJGQUNFU19FbnVtKCkKLS8vJS0gKE5TRGF0YSAqKXNlcmlhbGl6ZWREYXRhRm9yVW5r
bm93blZhbHVlOihpbnQzMl90KXZhbHVlCi0vLyUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5Ci0vLyUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXlEYXRhVHlwZTooR1BCRGF0YVR5cGUpa2V5RGF0YVR5cGU7Ci0vLyUK
LQotLy8lUERETS1FWFBBTkQgRElDVElPTkFSWV9QUklWX0lOVEVSRkFDRVNfRk9SX1BPRF9LRVko
VUludDMyKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQg
aXQgZGlyZWN0bHkuCi0KLUBpbnRlcmZhY2UgR1BCVUludDMyVUludDMyRGljdGlvbmFyeSAoKSA8
R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FG
RV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotQGludGVy
ZmFjZSBHUEJVSW50MzJJbnQzMkRpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQ
cm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdl
ICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCVUludDMyVUludDY0RGlj
dGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UK
LSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBl
bmQKLQotQGludGVyZmFjZSBHUEJVSW50MzJJbnQ2NERpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25h
cnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5F
RCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCVUlu
dDMyQm9vbERpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewot
IEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0
b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCVUludDMyRmxvYXREaWN0aW9uYXJ5ICgpIDxH
UEJEaWN0aW9uYXJ5SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZF
X1VOUkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAotCi1AaW50ZXJm
YWNlIEdQQlVJbnQzMkRvdWJsZURpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQ
cm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdl
ICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCVUludDMyRW51bURpY3Rp
b25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0g
IEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci0tIChO
U0RhdGEgKilzZXJpYWxpemVkRGF0YUZvclVua25vd25WYWx1ZTooaW50MzJfdCl2YWx1ZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KEdQQkdlbmVyaWNWYWx1ZSAq
KWtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5RGF0YVR5cGU6KEdQQkRhdGFU
eXBlKWtleURhdGFUeXBlOwotQGVuZAotCi1AaW50ZXJmYWNlIEdQQlVJbnQzMk9iamVjdERpY3Rp
b25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0g
IEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci0tIChC
T09MKWlzSW5pdGlhbGl6ZWQ7Ci0tIChpbnN0YW5jZXR5cGUpZGVlcENvcHlXaXRoWm9uZTooTlNa
b25lICopem9uZQotICAgIF9fYXR0cmlidXRlX18oKG5zX3JldHVybnNfcmV0YWluZWQpKTsKLUBl
bmQKLQotLy8lUERETS1FWFBBTkQgRElDVElPTkFSWV9QUklWX0lOVEVSRkFDRVNfRk9SX1BPRF9L
RVkoSW50MzIpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRp
dCBpdCBkaXJlY3RseS4KLQotQGludGVyZmFjZSBHUEJJbnQzMlVJbnQzMkRpY3Rpb25hcnkgKCkg
PEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNB
RkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRl
cmZhY2UgR1BCSW50MzJJbnQzMkRpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQ
cm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdl
ICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCSW50MzJVSW50NjREaWN0
aW9uYXJ5ICgpIDxHUEJEaWN0aW9uYXJ5SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQot
ICBHUEJfVU5TQUZFX1VOUkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVu
ZAotCi1AaW50ZXJmYWNlIEdQQkludDMySW50NjREaWN0aW9uYXJ5ICgpIDxHUEJEaWN0aW9uYXJ5
SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZFX1VOUkVUQUlORUQg
R1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAotCi1AaW50ZXJmYWNlIEdQQkludDMy
Qm9vbERpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBw
YWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7
Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCSW50MzJGbG9hdERpY3Rpb25hcnkgKCkgPEdQQkRp
Y3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5S
RVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2Ug
R1BCSW50MzJEb3VibGVEaWN0aW9uYXJ5ICgpIDxHUEJEaWN0aW9uYXJ5SW50ZXJuYWxzUHJvdG9j
b2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZFX1VOUkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1
dG9jcmVhdG9yOwotfQotQGVuZAotCi1AaW50ZXJmYWNlIEdQQkludDMyRW51bURpY3Rpb25hcnkg
KCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9V
TlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci0tIChOU0RhdGEg
KilzZXJpYWxpemVkRGF0YUZvclVua25vd25WYWx1ZTooaW50MzJfdCl2YWx1ZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6KEdQQkdlbmVyaWNWYWx1ZSAqKWtleQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5RGF0YVR5cGU6KEdQQkRhdGFUeXBlKWtl
eURhdGFUeXBlOwotQGVuZAotCi1AaW50ZXJmYWNlIEdQQkludDMyT2JqZWN0RGljdGlvbmFyeSAo
KSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VO
U0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLS0gKEJPT0wpaXNJ
bml0aWFsaXplZDsKLS0gKGluc3RhbmNldHlwZSlkZWVwQ29weVdpdGhab25lOihOU1pvbmUgKil6
b25lCi0gICAgX19hdHRyaWJ1dGVfXygobnNfcmV0dXJuc19yZXRhaW5lZCkpOwotQGVuZAotCi0v
LyVQRERNLUVYUEFORCBESUNUSU9OQVJZX1BSSVZfSU5URVJGQUNFU19GT1JfUE9EX0tFWShVSW50
NjQpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBk
aXJlY3RseS4KLQotQGludGVyZmFjZSBHUEJVSW50NjRVSW50MzJEaWN0aW9uYXJ5ICgpIDxHUEJE
aWN0aW9uYXJ5SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZFX1VO
UkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAotCi1AaW50ZXJmYWNl
IEdQQlVJbnQ2NEludDMyRGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3Rv
Y29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9h
dXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotQGludGVyZmFjZSBHUEJVSW50NjRVSW50NjREaWN0aW9u
YXJ5ICgpIDxHUEJEaWN0aW9uYXJ5SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQotICBH
UEJfVU5TQUZFX1VOUkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAot
Ci1AaW50ZXJmYWNlIEdQQlVJbnQ2NEludDY0RGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUlu
dGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQ
Qk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotQGludGVyZmFjZSBHUEJVSW50NjRC
b29sRGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBh
Y2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsK
LX0KLUBlbmQKLQotQGludGVyZmFjZSBHUEJVSW50NjRGbG9hdERpY3Rpb25hcnkgKCkgPEdQQkRp
Y3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5S
RVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2Ug
R1BCVUludDY0RG91YmxlRGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3Rv
Y29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9h
dXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotQGludGVyZmFjZSBHUEJVSW50NjRFbnVtRGljdGlvbmFy
eSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BC
X1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLS0gKE5TRGF0
YSAqKXNlcmlhbGl6ZWREYXRhRm9yVW5rbm93blZhbHVlOihpbnQzMl90KXZhbHVlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlEYXRhVHlwZTooR1BCRGF0YVR5cGUp
a2V5RGF0YVR5cGU7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCVUludDY0T2JqZWN0RGljdGlvbmFy
eSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BC
X1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLS0gKEJPT0wp
aXNJbml0aWFsaXplZDsKLS0gKGluc3RhbmNldHlwZSlkZWVwQ29weVdpdGhab25lOihOU1pvbmUg
Kil6b25lCi0gICAgX19hdHRyaWJ1dGVfXygobnNfcmV0dXJuc19yZXRhaW5lZCkpOwotQGVuZAot
Ci0vLyVQRERNLUVYUEFORCBESUNUSU9OQVJZX1BSSVZfSU5URVJGQUNFU19GT1JfUE9EX0tFWShJ
bnQ2NCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0
IGRpcmVjdGx5LgotCi1AaW50ZXJmYWNlIEdQQkludDY0VUludDMyRGljdGlvbmFyeSAoKSA8R1BC
RGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9V
TlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotQGludGVyZmFj
ZSBHUEJJbnQ2NEludDMyRGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3Rv
Y29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9h
dXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotQGludGVyZmFjZSBHUEJJbnQ2NFVJbnQ2NERpY3Rpb25h
cnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQ
Ql9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0K
LUBpbnRlcmZhY2UgR1BCSW50NjRJbnQ2NERpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRl
cm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJN
ZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCSW50NjRCb29s
RGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2th
Z2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0K
LUBlbmQKLQotQGludGVyZmFjZSBHUEJJbnQ2NEZsb2F0RGljdGlvbmFyeSAoKSA8R1BCRGljdGlv
bmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJ
TkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotQGludGVyZmFjZSBHUEJJ
bnQ2NERvdWJsZURpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4g
ewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2Ny
ZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCSW50NjRFbnVtRGljdGlvbmFyeSAoKSA8
R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FG
RV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLS0gKE5TRGF0YSAqKXNl
cmlhbGl6ZWREYXRhRm9yVW5rbm93blZhbHVlOihpbnQzMl90KXZhbHVlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcktleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlEYXRhVHlwZTooR1BCRGF0YVR5cGUpa2V5RGF0
YVR5cGU7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCSW50NjRPYmplY3REaWN0aW9uYXJ5ICgpIDxH
UEJEaWN0aW9uYXJ5SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZF
X1VOUkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotLSAoQk9PTClpc0luaXRp
YWxpemVkOwotLSAoaW5zdGFuY2V0eXBlKWRlZXBDb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUK
LSAgICBfX2F0dHJpYnV0ZV9fKChuc19yZXR1cm5zX3JldGFpbmVkKSk7Ci1AZW5kCi0KLS8vJVBE
RE0tRVhQQU5EIERJQ1RJT05BUllfUFJJVl9JTlRFUkZBQ0VTX0ZPUl9QT0RfS0VZKEJvb2wpCi0v
LyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3Rs
eS4KLQotQGludGVyZmFjZSBHUEJCb29sVUludDMyRGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFy
eUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVE
IEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotQGludGVyZmFjZSBHUEJCb29s
SW50MzJEaWN0aW9uYXJ5ICgpIDxHUEJEaWN0aW9uYXJ5SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBA
cGFja2FnZQotICBHUEJfVU5TQUZFX1VOUkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9y
OwotfQotQGVuZAotCi1AaW50ZXJmYWNlIEdQQkJvb2xVSW50NjREaWN0aW9uYXJ5ICgpIDxHUEJE
aWN0aW9uYXJ5SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZFX1VO
UkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAotCi1AaW50ZXJmYWNl
IEdQQkJvb2xJbnQ2NERpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2Nv
bD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0
b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCQm9vbEJvb2xEaWN0aW9uYXJ5ICgp
IDxHUEJEaWN0aW9uYXJ5SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5T
QUZFX1VOUkVUQUlORUQgR1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAotCi1AaW50
ZXJmYWNlIEdQQkJvb2xGbG9hdERpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQ
cm90b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdl
ICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCQm9vbERvdWJsZURpY3Rp
b25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90b2NvbD4gewotIEBwYWNrYWdlCi0g
IEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpfYXV0b2NyZWF0b3I7Ci19Ci1AZW5k
Ci0KLUBpbnRlcmZhY2UgR1BCQm9vbEVudW1EaWN0aW9uYXJ5ICgpIDxHUEJEaWN0aW9uYXJ5SW50
ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZFX1VOUkVUQUlORUQgR1BC
TWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotLSAoTlNEYXRhICopc2VyaWFsaXplZERhdGFGb3JV
bmtub3duVmFsdWU6KGludDMyX3QpdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yS2V5OihHUEJHZW5lcmljVmFsdWUgKilrZXkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtleURhdGFUeXBlOihHUEJEYXRhVHlwZSlrZXlEYXRhVHlwZTsKLUBlbmQKLQot
QGludGVyZmFjZSBHUEJCb29sT2JqZWN0RGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVy
bmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1l
c3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLS0gKEJPT0wpaXNJbml0aWFsaXplZDsKLS0gKGluc3Rh
bmNldHlwZSlkZWVwQ29weVdpdGhab25lOihOU1pvbmUgKil6b25lCi0gICAgX19hdHRyaWJ1dGVf
XygobnNfcmV0dXJuc19yZXRhaW5lZCkpOwotQGVuZAotCi0vLyVQRERNLUVYUEFORCBESUNUSU9O
QVJZX1BPRF9QUklWX0lOVEVSRkFDRVNfRk9SX0tFWShTdHJpbmcpCi0vLyBUaGlzIGJsb2NrIG9m
IGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotQGludGVyZmFj
ZSBHUEJTdHJpbmdVSW50MzJEaWN0aW9uYXJ5ICgpIDxHUEJEaWN0aW9uYXJ5SW50ZXJuYWxzUHJv
dG9jb2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZFX1VOUkVUQUlORUQgR1BCTWVzc2FnZSAq
X2F1dG9jcmVhdG9yOwotfQotQGVuZAotCi1AaW50ZXJmYWNlIEdQQlN0cmluZ0ludDMyRGljdGlv
bmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAg
R1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQK
LQotQGludGVyZmFjZSBHUEJTdHJpbmdVSW50NjREaWN0aW9uYXJ5ICgpIDxHUEJEaWN0aW9uYXJ5
SW50ZXJuYWxzUHJvdG9jb2w+IHsKLSBAcGFja2FnZQotICBHUEJfVU5TQUZFX1VOUkVUQUlORUQg
R1BCTWVzc2FnZSAqX2F1dG9jcmVhdG9yOwotfQotQGVuZAotCi1AaW50ZXJmYWNlIEdQQlN0cmlu
Z0ludDY0RGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0g
QHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRv
cjsKLX0KLUBlbmQKLQotQGludGVyZmFjZSBHUEJTdHJpbmdCb29sRGljdGlvbmFyeSAoKSA8R1BC
RGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9V
TlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotQGludGVyZmFj
ZSBHUEJTdHJpbmdGbG9hdERpY3Rpb25hcnkgKCkgPEdQQkRpY3Rpb25hcnlJbnRlcm5hbHNQcm90
b2NvbD4gewotIEBwYWNrYWdlCi0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBHUEJNZXNzYWdlICpf
YXV0b2NyZWF0b3I7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR1BCU3RyaW5nRG91YmxlRGljdGlv
bmFyeSAoKSA8R1BCRGljdGlvbmFyeUludGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAg
R1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQK
LQotQGludGVyZmFjZSBHUEJTdHJpbmdFbnVtRGljdGlvbmFyeSAoKSA8R1BCRGljdGlvbmFyeUlu
dGVybmFsc1Byb3RvY29sPiB7Ci0gQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQ
Qk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLS0gKE5TRGF0YSAqKXNlcmlhbGl6ZWREYXRhRm9y
VW5rbm93blZhbHVlOihpbnQzMl90KXZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcktleTooR1BCR2VuZXJpY1ZhbHVlICopa2V5Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrZXlEYXRhVHlwZTooR1BCRGF0YVR5cGUpa2V5RGF0YVR5cGU7Ci1AZW5kCi0K
LS8vJVBERE0tRVhQQU5ELUVORCAoNiBleHBhbnNpb25zKQotCi0jcHJhZ21hIG1hcmsgLSBOU0Rp
Y3Rpb25hcnkgU3ViY2xhc3MKLQotQGludGVyZmFjZSBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnkg
OiBOU011dGFibGVEaWN0aW9uYXJ5IHsKLSAgQHBhY2thZ2UKLSAgR1BCX1VOU0FGRV9VTlJFVEFJ
TkVEIEdQQk1lc3NhZ2UgKl9hdXRvY3JlYXRvcjsKLX0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0g
SGVscGVycwotCi1DRl9FWFRFUk5fQ19CRUdJTgotCi0vLyBIZWxwZXIgdG8gY29tcHV0ZSBzaXpl
IHdoZW4gYW4gTlNEaWN0aW9uYXJ5IGlzIHVzZWQgZm9yIHRoZSBtYXAgaW5zdGVhZAotLy8gb2Yg
YSBjdXN0b20gdHlwZS4KLXNpemVfdCBHUEJEaWN0aW9uYXJ5Q29tcHV0ZVNpemVJbnRlcm5hbEhl
bHBlcihOU0RpY3Rpb25hcnkgKmRpY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCk7Ci0KLS8vIEhlbHBlciB0
byB3cml0ZSBvdXQgd2hlbiBhbiBOU0RpY3Rpb25hcnkgaXMgdXNlZCBmb3IgdGhlIG1hcCBpbnN0
ZWFkCi0vLyBvZiBhIGN1c3RvbSB0eXBlLgotdm9pZCBHUEJEaWN0aW9uYXJ5V3JpdGVUb1N0cmVh
bUludGVybmFsSGVscGVyKAotICAgIEdQQkNvZGVkT3V0cHV0U3RyZWFtICpvdXRwdXRTdHJlYW0s
IE5TRGljdGlvbmFyeSAqZGljdCwKLSAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKTsKLQot
Ly8gSGVscGVyIHRvIGNoZWNrIG1lc3NhZ2UgaW5pdGlhbGl6YXRpb24gd2hlbiBhbiBOU0RpY3Rp
b25hcnkgaXMgdXNlZCBmb3IKLS8vIHRoZSBtYXAgaW5zdGVhZCBvZiBhIGN1c3RvbSB0eXBlLgot
Qk9PTCBHUEJEaWN0aW9uYXJ5SXNJbml0aWFsaXplZEludGVybmFsSGVscGVyKE5TRGljdGlvbmFy
eSAqZGljdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
UEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKTsKLQotLy8gSGVscGVyIHRvIHJlYWQgYSBtYXAgaW5z
dGVhZC4KLXZvaWQgR1BCRGljdGlvbmFyeVJlYWRFbnRyeShpZCBtYXBEaWN0aW9uYXJ5LCBHUEJD
b2RlZElucHV0U3RyZWFtICpzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BC
RXh0ZW5zaW9uUmVnaXN0cnkgKnJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1BCTWVzc2FnZSAqcGFyZW50TWVzc2FnZSk7Ci0KLUNGX0VYVEVSTl9DX0VORApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9vYmplY3RpdmVjL0dQQkV4dGVuc2lvbkludGVybmFscy5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQkV4dGVu
c2lvbkludGVybmFscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjk4MGFlZmE0
YzQ1ZTUxZWMwNmFjMTI4N2UxOTdmNjI5MGE5NDg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJFeHRlbnNpb25JbnRlcm5hbHMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCAi
R1BCRGVzY3JpcHRvci5oIgotCi1AY2xhc3MgR1BCQ29kZWRJbnB1dFN0cmVhbTsKLUBjbGFzcyBH
UEJDb2RlZE91dHB1dFN0cmVhbTsKLUBjbGFzcyBHUEJFeHRlbnNpb25SZWdpc3RyeTsKLQotdm9p
ZCBHUEJFeHRlbnNpb25NZXJnZUZyb21JbnB1dFN0cmVhbShHUEJFeHRlbnNpb25EZXNjcmlwdG9y
ICpleHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wg
aXNQYWNrZWRPblN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1BCQ29kZWRJbnB1dFN0cmVhbSAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICpleHRlbnNpb25SZWdpc3RyeSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCTWVzc2FnZSAqbWVzc2FnZSk7Ci0K
LXNpemVfdCBHUEJDb21wdXRlRXh0ZW5zaW9uU2VyaWFsaXplZFNpemVJbmNsdWRpbmdUYWcoCi0g
ICAgR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciAqZXh0ZW5zaW9uLCBpZCB2YWx1ZSk7Ci0KLXZvaWQg
R1BCV3JpdGVFeHRlbnNpb25WYWx1ZVRvT3V0cHV0U3RyZWFtKEdQQkV4dGVuc2lvbkRlc2NyaXB0
b3IgKmV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlkIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BC
Q29kZWRPdXRwdXRTdHJlYW0gKm91dHB1dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCRXh0
ZW5zaW9uSW50ZXJuYWxzLm0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCRXh0ZW5zaW9uSW50ZXJuYWxzLm0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMGRjYjJlZTlmYjY3ZThiZDUyMTIyMzkyYWQ2
MzRmM2FlZWFiMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9vYmplY3RpdmVjL0dQQkV4dGVuc2lvbkludGVybmFscy5tCisrKyAvZGV2L251bGwKQEAgLTEs
MzgwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW1wb3J0
ICJHUEJFeHRlbnNpb25JbnRlcm5hbHMuaCIKLQotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0K
LSNpbXBvcnQgIkdQQkNvZGVkSW5wdXRTdHJlYW1fUGFja2FnZVByaXZhdGUuaCIKLSNpbXBvcnQg
IkdQQkNvZGVkT3V0cHV0U3RyZWFtX1BhY2thZ2VQcml2YXRlLmgiCi0jaW1wb3J0ICJHUEJEZXNj
cmlwdG9yX1BhY2thZ2VQcml2YXRlLmgiCi0jaW1wb3J0ICJHUEJNZXNzYWdlX1BhY2thZ2VQcml2
YXRlLmgiCi0jaW1wb3J0ICJHUEJVdGlsaXRpZXNfUGFja2FnZVByaXZhdGUuaCIKLQotc3RhdGlj
IGlkIE5ld1NpbmdsZVZhbHVlRnJvbUlucHV0U3RyZWFtKEdQQkV4dGVuc2lvbkRlc2NyaXB0b3Ig
KmV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJD
b2RlZElucHV0U3RyZWFtICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHUEJFeHRlbnNpb25SZWdpc3RyeSAqZXh0ZW5zaW9uUmVnaXN0cnksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCTWVzc2FnZSAqZXhpc3RpbmdWYWx1
ZSkKLSAgICBfX2F0dHJpYnV0ZV9fKChuc19yZXR1cm5zX3JldGFpbmVkKSk7Ci0KLUdQQl9JTkxJ
TkUgc2l6ZV90IERhdGFUeXBlU2l6ZShHUEJEYXRhVHlwZSBkYXRhVHlwZSkgewotICBzd2l0Y2gg
KGRhdGFUeXBlKSB7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZUJvb2w6Ci0gICAgICByZXR1cm4gMTsK
LSAgICBjYXNlIEdQQkRhdGFUeXBlRml4ZWQzMjoKLSAgICBjYXNlIEdQQkRhdGFUeXBlU0ZpeGVk
MzI6Ci0gICAgY2FzZSBHUEJEYXRhVHlwZUZsb2F0OgotICAgICAgcmV0dXJuIDQ7Ci0gICAgY2Fz
ZSBHUEJEYXRhVHlwZUZpeGVkNjQ6Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVNGaXhlZDY0OgotICAg
IGNhc2UgR1BCRGF0YVR5cGVEb3VibGU6Ci0gICAgICByZXR1cm4gODsKLSAgICBkZWZhdWx0Ogot
ICAgICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3RhdGljIHNpemVfdCBDb21wdXRlUEJTZXJpYWxp
emVkU2l6ZU5vVGFnT2ZPYmplY3QoR1BCRGF0YVR5cGUgZGF0YVR5cGUsIGlkIG9iamVjdCkgewot
I2RlZmluZSBGSUVMRF9DQVNFKFRZUEUsIEFDQ0VTU09SKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGNhc2UgR1BCRGF0YVR5cGUjI1RZUEU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gR1BCQ29tcHV0ZSMj
VFlQRSMjU2l6ZU5vVGFnKFsoTlNOdW1iZXIgKilvYmplY3QgQUNDRVNTT1JdKTsKLSNkZWZpbmUg
RklFTERfQ0FTRTIoVFlQRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBjYXNlIEdQQkRhdGFUeXBlIyNUWVBFOiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEdQQkNvbXB1dGUjI1RZUEUjI1Np
emVOb1RhZyhvYmplY3QpOwotICBzd2l0Y2ggKGRhdGFUeXBlKSB7Ci0gICAgRklFTERfQ0FTRShC
b29sLCBib29sVmFsdWUpCi0gICAgRklFTERfQ0FTRShGbG9hdCwgZmxvYXRWYWx1ZSkKLSAgICBG
SUVMRF9DQVNFKERvdWJsZSwgZG91YmxlVmFsdWUpCi0gICAgRklFTERfQ0FTRShJbnQzMiwgaW50
VmFsdWUpCi0gICAgRklFTERfQ0FTRShTRml4ZWQzMiwgaW50VmFsdWUpCi0gICAgRklFTERfQ0FT
RShTSW50MzIsIGludFZhbHVlKQotICAgIEZJRUxEX0NBU0UoRW51bSwgaW50VmFsdWUpCi0gICAg
RklFTERfQ0FTRShJbnQ2NCwgbG9uZ0xvbmdWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKFNJbnQ2NCwg
bG9uZ0xvbmdWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKFNGaXhlZDY0LCBsb25nTG9uZ1ZhbHVlKQot
ICAgIEZJRUxEX0NBU0UoVUludDMyLCB1bnNpZ25lZEludFZhbHVlKQotICAgIEZJRUxEX0NBU0Uo
Rml4ZWQzMiwgdW5zaWduZWRJbnRWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKFVJbnQ2NCwgdW5zaWdu
ZWRMb25nTG9uZ1ZhbHVlKQotICAgIEZJRUxEX0NBU0UoRml4ZWQ2NCwgdW5zaWduZWRMb25nTG9u
Z1ZhbHVlKQotICAgIEZJRUxEX0NBU0UyKEJ5dGVzKQotICAgIEZJRUxEX0NBU0UyKFN0cmluZykK
LSAgICBGSUVMRF9DQVNFMihNZXNzYWdlKQotICAgIEZJRUxEX0NBU0UyKEdyb3VwKQotICB9Ci0j
dW5kZWYgRklFTERfQ0FTRQotI3VuZGVmIEZJRUxEX0NBU0UyCi19Ci0KLXN0YXRpYyBzaXplX3Qg
Q29tcHV0ZVNlcmlhbGl6ZWRTaXplSW5jbHVkaW5nVGFnT2ZPYmplY3QoCi0gICAgR1BCRXh0ZW5z
aW9uRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uLCBpZCBvYmplY3QpIHsKLSNkZWZpbmUgRklFTERf
Q0FTRShUWVBFLCBBQ0NFU1NPUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgY2FzZSBHUEJEYXRhVHlwZSMjVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gR1BCQ29tcHV0ZSMjVFlQRSMjU2l6ZShkZXNjcmlw
dGlvbi0+ZmllbGROdW1iZXIsICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbKE5TTnVtYmVyICopb2JqZWN0IEFDQ0VTU09SXSk7Ci0jZGVmaW5lIEZJRUxEX0NB
U0UyKFRZUEUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGNhc2UgR1BCRGF0YVR5cGUjI1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgcmV0dXJuIEdQQkNvbXB1dGUjI1RZUEUjI1NpemUoZGVzY3JpcHRp
b24tPmZpZWxkTnVtYmVyLCBvYmplY3QpOwotICBzd2l0Y2ggKGRlc2NyaXB0aW9uLT5kYXRhVHlw
ZSkgewotICAgIEZJRUxEX0NBU0UoQm9vbCwgYm9vbFZhbHVlKQotICAgIEZJRUxEX0NBU0UoRmxv
YXQsIGZsb2F0VmFsdWUpCi0gICAgRklFTERfQ0FTRShEb3VibGUsIGRvdWJsZVZhbHVlKQotICAg
IEZJRUxEX0NBU0UoSW50MzIsIGludFZhbHVlKQotICAgIEZJRUxEX0NBU0UoU0ZpeGVkMzIsIGlu
dFZhbHVlKQotICAgIEZJRUxEX0NBU0UoU0ludDMyLCBpbnRWYWx1ZSkKLSAgICBGSUVMRF9DQVNF
KEVudW0sIGludFZhbHVlKQotICAgIEZJRUxEX0NBU0UoSW50NjQsIGxvbmdMb25nVmFsdWUpCi0g
ICAgRklFTERfQ0FTRShTSW50NjQsIGxvbmdMb25nVmFsdWUpCi0gICAgRklFTERfQ0FTRShTRml4
ZWQ2NCwgbG9uZ0xvbmdWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKFVJbnQzMiwgdW5zaWduZWRJbnRW
YWx1ZSkKLSAgICBGSUVMRF9DQVNFKEZpeGVkMzIsIHVuc2lnbmVkSW50VmFsdWUpCi0gICAgRklF
TERfQ0FTRShVSW50NjQsIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKEZp
eGVkNjQsIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZSkKLSAgICBGSUVMRF9DQVNFMihCeXRlcykKLSAg
ICBGSUVMRF9DQVNFMihTdHJpbmcpCi0gICAgRklFTERfQ0FTRTIoR3JvdXApCi0gICAgY2FzZSBH
UEJEYXRhVHlwZU1lc3NhZ2U6Ci0gICAgICBpZiAoR1BCRXh0ZW5zaW9uSXNXaXJlRm9ybWF0KGRl
c2NyaXB0aW9uKSkgewotICAgICAgICByZXR1cm4gR1BCQ29tcHV0ZU1lc3NhZ2VTZXRFeHRlbnNp
b25TaXplKGRlc2NyaXB0aW9uLT5maWVsZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QpOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgcmV0dXJuIEdQQkNvbXB1dGVNZXNzYWdlU2l6ZShkZXNjcmlwdGlvbi0+ZmllbGROdW1iZXIs
IG9iamVjdCk7Ci0gICAgICB9Ci0gIH0KLSN1bmRlZiBGSUVMRF9DQVNFCi0jdW5kZWYgRklFTERf
Q0FTRTIKLX0KLQotc3RhdGljIHNpemVfdCBDb21wdXRlU2VyaWFsaXplZFNpemVJbmNsdWRpbmdU
YWdPZkFycmF5KAotICAgIEdQQkV4dGVuc2lvbkRlc2NyaXB0aW9uICpkZXNjcmlwdGlvbiwgTlNB
cnJheSAqdmFsdWVzKSB7Ci0gIGlmIChHUEJFeHRlbnNpb25Jc1BhY2tlZChkZXNjcmlwdGlvbikp
IHsKLSAgICBzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgc2l6ZV90IHR5cGVTaXplID0gRGF0YVR5cGVT
aXplKGRlc2NyaXB0aW9uLT5kYXRhVHlwZSk7Ci0gICAgaWYgKHR5cGVTaXplICE9IDApIHsKLSAg
ICAgIHNpemUgPSB2YWx1ZXMuY291bnQgKiB0eXBlU2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAg
Zm9yIChpZCB2YWx1ZSBpbiB2YWx1ZXMpIHsKLSAgICAgICAgc2l6ZSArPQotICAgICAgICAgICAg
Q29tcHV0ZVBCU2VyaWFsaXplZFNpemVOb1RhZ09mT2JqZWN0KGRlc2NyaXB0aW9uLT5kYXRhVHlw
ZSwgdmFsdWUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc2l6ZSArIEdQQkNvbXB1dGVU
YWdTaXplKGRlc2NyaXB0aW9uLT5maWVsZE51bWJlcikgKwotICAgICAgICAgICBHUEJDb21wdXRl
UmF3VmFyaW50MzJTaXplRm9ySW50ZWdlcihzaXplKTsKLSAgfSBlbHNlIHsKLSAgICBzaXplX3Qg
c2l6ZSA9IDA7Ci0gICAgZm9yIChpZCB2YWx1ZSBpbiB2YWx1ZXMpIHsKLSAgICAgIHNpemUgKz0g
Q29tcHV0ZVNlcmlhbGl6ZWRTaXplSW5jbHVkaW5nVGFnT2ZPYmplY3QoZGVzY3JpcHRpb24sIHZh
bHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpemU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgV3Jp
dGVPYmplY3RJbmNsdWRpbmdUYWdUb0NvZGVkT3V0cHV0U3RyZWFtKAotICAgIGlkIG9iamVjdCwg
R1BCRXh0ZW5zaW9uRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uLAotICAgIEdQQkNvZGVkT3V0cHV0
U3RyZWFtICpvdXRwdXQpIHsKLSNkZWZpbmUgRklFTERfQ0FTRShUWVBFLCBBQ0NFU1NPUikgICAg
ICAgICAgICAgICAgICAgICAgXAotICBjYXNlIEdQQkRhdGFUeXBlIyNUWVBFOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgW291dHB1dCB3cml0ZSMjVFlQRTpkZXNjcmlwdGlv
bi0+ZmllbGROdW1iZXIgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIHZhbHVlOlsoTlNOdW1i
ZXIgKilvYmplY3QgQUNDRVNTT1JdXTsgXAotICAgIHJldHVybjsKLSNkZWZpbmUgRklFTERfQ0FT
RTIoVFlQRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNhc2Ug
R1BCRGF0YVR5cGUjI1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIFtvdXRwdXQgd3JpdGUjI1RZUEU6ZGVzY3JpcHRpb24tPmZpZWxkTnVtYmVyIHZhbHVl
Om9iamVjdF07IFwKLSAgICByZXR1cm47Ci0gIHN3aXRjaCAoZGVzY3JpcHRpb24tPmRhdGFUeXBl
KSB7Ci0gICAgRklFTERfQ0FTRShCb29sLCBib29sVmFsdWUpCi0gICAgRklFTERfQ0FTRShGbG9h
dCwgZmxvYXRWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKERvdWJsZSwgZG91YmxlVmFsdWUpCi0gICAg
RklFTERfQ0FTRShJbnQzMiwgaW50VmFsdWUpCi0gICAgRklFTERfQ0FTRShTRml4ZWQzMiwgaW50
VmFsdWUpCi0gICAgRklFTERfQ0FTRShTSW50MzIsIGludFZhbHVlKQotICAgIEZJRUxEX0NBU0Uo
RW51bSwgaW50VmFsdWUpCi0gICAgRklFTERfQ0FTRShJbnQ2NCwgbG9uZ0xvbmdWYWx1ZSkKLSAg
ICBGSUVMRF9DQVNFKFNJbnQ2NCwgbG9uZ0xvbmdWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKFNGaXhl
ZDY0LCBsb25nTG9uZ1ZhbHVlKQotICAgIEZJRUxEX0NBU0UoVUludDMyLCB1bnNpZ25lZEludFZh
bHVlKQotICAgIEZJRUxEX0NBU0UoRml4ZWQzMiwgdW5zaWduZWRJbnRWYWx1ZSkKLSAgICBGSUVM
RF9DQVNFKFVJbnQ2NCwgdW5zaWduZWRMb25nTG9uZ1ZhbHVlKQotICAgIEZJRUxEX0NBU0UoRml4
ZWQ2NCwgdW5zaWduZWRMb25nTG9uZ1ZhbHVlKQotICAgIEZJRUxEX0NBU0UyKEJ5dGVzKQotICAg
IEZJRUxEX0NBU0UyKFN0cmluZykKLSAgICBGSUVMRF9DQVNFMihHcm91cCkKLSAgICBjYXNlIEdQ
QkRhdGFUeXBlTWVzc2FnZToKLSAgICAgIGlmIChHUEJFeHRlbnNpb25Jc1dpcmVGb3JtYXQoZGVz
Y3JpcHRpb24pKSB7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVNZXNzYWdlU2V0RXh0ZW5zaW9uOmRl
c2NyaXB0aW9uLT5maWVsZE51bWJlciB2YWx1ZTpvYmplY3RdOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgW291dHB1dCB3cml0ZU1lc3NhZ2U6ZGVzY3JpcHRpb24tPmZpZWxkTnVtYmVyIHZhbHVl
Om9iamVjdF07Ci0gICAgICB9Ci0gICAgICByZXR1cm47Ci0gIH0KLSN1bmRlZiBGSUVMRF9DQVNF
Ci0jdW5kZWYgRklFTERfQ0FTRTIKLX0KLQotc3RhdGljIHZvaWQgV3JpdGVPYmplY3ROb1RhZ1Rv
Q29kZWRPdXRwdXRTdHJlYW0oCi0gICAgaWQgb2JqZWN0LCBHUEJFeHRlbnNpb25EZXNjcmlwdGlv
biAqZGVzY3JpcHRpb24sCi0gICAgR1BCQ29kZWRPdXRwdXRTdHJlYW0gKm91dHB1dCkgewotI2Rl
ZmluZSBGSUVMRF9DQVNFKFRZUEUsIEFDQ0VTU09SKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBjYXNlIEdQQkRhdGFUeXBlIyNUWVBFOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIFtvdXRwdXQgd3JpdGUjI1RZUEUjI05vVGFnOlsoTlNOdW1iZXIg
KilvYmplY3QgQUNDRVNTT1JdXTsgXAotICAgIHJldHVybjsKLSNkZWZpbmUgRklFTERfQ0FTRTIo
VFlQRSkgICAgICAgICAgICAgICBcCi0gIGNhc2UgR1BCRGF0YVR5cGUjI1RZUEU6ICAgICAgICAg
ICAgICAgXAotICAgIFtvdXRwdXQgd3JpdGUjI1RZUEUjI05vVGFnOm9iamVjdF07IFwKLSAgICBy
ZXR1cm47Ci0gIHN3aXRjaCAoZGVzY3JpcHRpb24tPmRhdGFUeXBlKSB7Ci0gICAgRklFTERfQ0FT
RShCb29sLCBib29sVmFsdWUpCi0gICAgRklFTERfQ0FTRShGbG9hdCwgZmxvYXRWYWx1ZSkKLSAg
ICBGSUVMRF9DQVNFKERvdWJsZSwgZG91YmxlVmFsdWUpCi0gICAgRklFTERfQ0FTRShJbnQzMiwg
aW50VmFsdWUpCi0gICAgRklFTERfQ0FTRShTRml4ZWQzMiwgaW50VmFsdWUpCi0gICAgRklFTERf
Q0FTRShTSW50MzIsIGludFZhbHVlKQotICAgIEZJRUxEX0NBU0UoRW51bSwgaW50VmFsdWUpCi0g
ICAgRklFTERfQ0FTRShJbnQ2NCwgbG9uZ0xvbmdWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKFNJbnQ2
NCwgbG9uZ0xvbmdWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKFNGaXhlZDY0LCBsb25nTG9uZ1ZhbHVl
KQotICAgIEZJRUxEX0NBU0UoVUludDMyLCB1bnNpZ25lZEludFZhbHVlKQotICAgIEZJRUxEX0NB
U0UoRml4ZWQzMiwgdW5zaWduZWRJbnRWYWx1ZSkKLSAgICBGSUVMRF9DQVNFKFVJbnQ2NCwgdW5z
aWduZWRMb25nTG9uZ1ZhbHVlKQotICAgIEZJRUxEX0NBU0UoRml4ZWQ2NCwgdW5zaWduZWRMb25n
TG9uZ1ZhbHVlKQotICAgIEZJRUxEX0NBU0UyKEJ5dGVzKQotICAgIEZJRUxEX0NBU0UyKFN0cmlu
ZykKLSAgICBGSUVMRF9DQVNFMihNZXNzYWdlKQotICAgIGNhc2UgR1BCRGF0YVR5cGVHcm91cDoK
LSAgICAgIFtvdXRwdXQgd3JpdGVHcm91cE5vVGFnOmRlc2NyaXB0aW9uLT5maWVsZE51bWJlciB2
YWx1ZTpvYmplY3RdOwotICAgICAgcmV0dXJuOwotICB9Ci0jdW5kZWYgRklFTERfQ0FTRQotI3Vu
ZGVmIEZJRUxEX0NBU0UyCi19Ci0KLXN0YXRpYyB2b2lkIFdyaXRlQXJyYXlJbmNsdWRpbmdUYWdz
VG9Db2RlZE91dHB1dFN0cmVhbSgKLSAgICBOU0FycmF5ICp2YWx1ZXMsIEdQQkV4dGVuc2lvbkRl
c2NyaXB0aW9uICpkZXNjcmlwdGlvbiwKLSAgICBHUEJDb2RlZE91dHB1dFN0cmVhbSAqb3V0cHV0
KSB7Ci0gIGlmIChHUEJFeHRlbnNpb25Jc1BhY2tlZChkZXNjcmlwdGlvbikpIHsKLSAgICBbb3V0
cHV0IHdyaXRlVGFnOmRlc2NyaXB0aW9uLT5maWVsZE51bWJlcgotICAgICAgICAgICAgICBmb3Jt
YXQ6R1BCV2lyZUZvcm1hdExlbmd0aERlbGltaXRlZF07Ci0gICAgc2l6ZV90IGRhdGFTaXplID0g
MDsKLSAgICBzaXplX3QgdHlwZVNpemUgPSBEYXRhVHlwZVNpemUoZGVzY3JpcHRpb24tPmRhdGFU
eXBlKTsKLSAgICBpZiAodHlwZVNpemUgIT0gMCkgewotICAgICAgZGF0YVNpemUgPSB2YWx1ZXMu
Y291bnQgKiB0eXBlU2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgZm9yIChpZCB2YWx1ZSBpbiB2
YWx1ZXMpIHsKLSAgICAgICAgZGF0YVNpemUgKz0KLSAgICAgICAgICAgIENvbXB1dGVQQlNlcmlh
bGl6ZWRTaXplTm9UYWdPZk9iamVjdChkZXNjcmlwdGlvbi0+ZGF0YVR5cGUsIHZhbHVlKTsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgW291dHB1dCB3cml0ZVJhd1ZhcmludFNpemVUQXMzMjpkYXRhU2l6
ZV07Ci0gICAgZm9yIChpZCB2YWx1ZSBpbiB2YWx1ZXMpIHsKLSAgICAgIFdyaXRlT2JqZWN0Tm9U
YWdUb0NvZGVkT3V0cHV0U3RyZWFtKHZhbHVlLCBkZXNjcmlwdGlvbiwgb3V0cHV0KTsKLSAgICB9
Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpZCB2YWx1ZSBpbiB2YWx1ZXMpIHsKLSAgICAgIFdyaXRl
T2JqZWN0SW5jbHVkaW5nVGFnVG9Db2RlZE91dHB1dFN0cmVhbSh2YWx1ZSwgZGVzY3JpcHRpb24s
IG91dHB1dCk7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgR1BCRXh0ZW5zaW9uTWVyZ2VGcm9tSW5w
dXRTdHJlYW0oR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciAqZXh0ZW5zaW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGlzUGFja2VkT25TdHJlYW0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkNvZGVkSW5wdXRTdHJlYW0gKmlucHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJFeHRlbnNpb25SZWdp
c3RyeSAqZXh0ZW5zaW9uUmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdQQk1lc3NhZ2UgKm1lc3NhZ2UpIHsKLSAgR1BCRXh0ZW5zaW9uRGVzY3JpcHRpb24g
KmRlc2NyaXB0aW9uID0gZXh0ZW5zaW9uLT5kZXNjcmlwdGlvbl87Ci0gIEdQQkNvZGVkSW5wdXRT
dHJlYW1TdGF0ZSAqc3RhdGUgPSAmaW5wdXQtPnN0YXRlXzsKLSAgaWYgKGlzUGFja2VkT25TdHJl
YW0pIHsKLSAgICBOU0NBc3NlcnQoR1BCRXh0ZW5zaW9uSXNSZXBlYXRlZChkZXNjcmlwdGlvbiks
Ci0gICAgICAgICAgICAgIEAiSG93IHdhcyBpdCBwYWNrZWQgaWYgaXQgaXNuJ3QgcmVwZWF0ZWQ/
Iik7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBHUEJDb2RlZElucHV0U3RyZWFtUmVhZEludDMyKHN0
YXRlKTsKLSAgICBzaXplX3QgbGltaXQgPSBHUEJDb2RlZElucHV0U3RyZWFtUHVzaExpbWl0KHN0
YXRlLCBsZW5ndGgpOwotICAgIHdoaWxlIChHUEJDb2RlZElucHV0U3RyZWFtQnl0ZXNVbnRpbExp
bWl0KHN0YXRlKSA+IDApIHsKLSAgICAgIGlkIHZhbHVlID0gTmV3U2luZ2xlVmFsdWVGcm9tSW5w
dXRTdHJlYW0oZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXh0ZW5zaW9uUmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5pbCk7Ci0gICAgICBbbWVzc2FnZSBhZGRFeHRlbnNpb246ZXh0
ZW5zaW9uIHZhbHVlOnZhbHVlXTsKLSAgICAgIFt2YWx1ZSByZWxlYXNlXTsKLSAgICB9Ci0gICAg
R1BCQ29kZWRJbnB1dFN0cmVhbVBvcExpbWl0KHN0YXRlLCBsaW1pdCk7Ci0gIH0gZWxzZSB7Ci0g
ICAgaWQgZXhpc3RpbmdWYWx1ZSA9IG5pbDsKLSAgICBCT09MIGlzUmVwZWF0ZWQgPSBHUEJFeHRl
bnNpb25Jc1JlcGVhdGVkKGRlc2NyaXB0aW9uKTsKLSAgICBpZiAoIWlzUmVwZWF0ZWQgJiYgR1BC
RGF0YVR5cGVJc01lc3NhZ2UoZGVzY3JpcHRpb24tPmRhdGFUeXBlKSkgewotICAgICAgZXhpc3Rp
bmdWYWx1ZSA9IFttZXNzYWdlIGdldEV4aXN0aW5nRXh0ZW5zaW9uOmV4dGVuc2lvbl07Ci0gICAg
fQotICAgIGlkIHZhbHVlID0gTmV3U2luZ2xlVmFsdWVGcm9tSW5wdXRTdHJlYW0oZXh0ZW5zaW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25SZWdp
c3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0
aW5nVmFsdWUpOwotICAgIGlmIChpc1JlcGVhdGVkKSB7Ci0gICAgICBbbWVzc2FnZSBhZGRFeHRl
bnNpb246ZXh0ZW5zaW9uIHZhbHVlOnZhbHVlXTsKLSAgICB9IGVsc2UgewotICAgICAgW21lc3Nh
Z2Ugc2V0RXh0ZW5zaW9uOmV4dGVuc2lvbiB2YWx1ZTp2YWx1ZV07Ci0gICAgfQotICAgIFt2YWx1
ZSByZWxlYXNlXTsKLSAgfQotfQotCi12b2lkIEdQQldyaXRlRXh0ZW5zaW9uVmFsdWVUb091dHB1
dFN0cmVhbShHUEJFeHRlbnNpb25EZXNjcmlwdG9yICpleHRlbnNpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkNvZGVkT3V0cHV0U3RyZWFtICpvdXRwdXQpIHsK
LSAgR1BCRXh0ZW5zaW9uRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uID0gZXh0ZW5zaW9uLT5kZXNj
cmlwdGlvbl87Ci0gIGlmIChHUEJFeHRlbnNpb25Jc1JlcGVhdGVkKGRlc2NyaXB0aW9uKSkgewot
ICAgIFdyaXRlQXJyYXlJbmNsdWRpbmdUYWdzVG9Db2RlZE91dHB1dFN0cmVhbSh2YWx1ZSwgZGVz
Y3JpcHRpb24sIG91dHB1dCk7Ci0gIH0gZWxzZSB7Ci0gICAgV3JpdGVPYmplY3RJbmNsdWRpbmdU
YWdUb0NvZGVkT3V0cHV0U3RyZWFtKHZhbHVlLCBkZXNjcmlwdGlvbiwgb3V0cHV0KTsKLSAgfQot
fQotCi1zaXplX3QgR1BCQ29tcHV0ZUV4dGVuc2lvblNlcmlhbGl6ZWRTaXplSW5jbHVkaW5nVGFn
KAotICAgIEdQQkV4dGVuc2lvbkRlc2NyaXB0b3IgKmV4dGVuc2lvbiwgaWQgdmFsdWUpIHsKLSAg
R1BCRXh0ZW5zaW9uRGVzY3JpcHRpb24gKmRlc2NyaXB0aW9uID0gZXh0ZW5zaW9uLT5kZXNjcmlw
dGlvbl87Ci0gIGlmIChHUEJFeHRlbnNpb25Jc1JlcGVhdGVkKGRlc2NyaXB0aW9uKSkgewotICAg
IHJldHVybiBDb21wdXRlU2VyaWFsaXplZFNpemVJbmNsdWRpbmdUYWdPZkFycmF5KGRlc2NyaXB0
aW9uLCB2YWx1ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIENvbXB1dGVTZXJpYWxpemVkU2l6
ZUluY2x1ZGluZ1RhZ09mT2JqZWN0KGRlc2NyaXB0aW9uLCB2YWx1ZSk7Ci0gIH0KLX0KLQotLy8g
Tm90ZSB0aGF0IHRoaXMgcmV0dXJucyBhIHJldGFpbmVkIHZhbHVlIGludGVudGlvbmFsbHkuCi1z
dGF0aWMgaWQgTmV3U2luZ2xlVmFsdWVGcm9tSW5wdXRTdHJlYW0oR1BCRXh0ZW5zaW9uRGVzY3Jp
cHRvciAqZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdQQkNvZGVkSW5wdXRTdHJlYW0gKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICpleHRlbnNpb25SZWdpc3RyeSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJNZXNzYWdlICpleGlzdGlu
Z1ZhbHVlKSB7Ci0gIEdQQkV4dGVuc2lvbkRlc2NyaXB0aW9uICpkZXNjcmlwdGlvbiA9IGV4dGVu
c2lvbi0+ZGVzY3JpcHRpb25fOwotICBHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlID0g
JmlucHV0LT5zdGF0ZV87Ci0gIHN3aXRjaCAoZGVzY3JpcHRpb24tPmRhdGFUeXBlKSB7Ci0gICAg
Y2FzZSBHUEJEYXRhVHlwZUJvb2w6ICAgICByZXR1cm4gW1tOU051bWJlciBhbGxvY10gaW5pdFdp
dGhCb29sOkdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkQm9vbChzdGF0ZSldOwotICAgIGNhc2UgR1BC
RGF0YVR5cGVGaXhlZDMyOiAgcmV0dXJuIFtbTlNOdW1iZXIgYWxsb2NdIGluaXRXaXRoVW5zaWdu
ZWRJbnQ6R1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRGaXhlZDMyKHN0YXRlKV07Ci0gICAgY2FzZSBH
UEJEYXRhVHlwZVNGaXhlZDMyOiByZXR1cm4gW1tOU051bWJlciBhbGxvY10gaW5pdFdpdGhJbnQ6
R1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRTRml4ZWQzMihzdGF0ZSldOwotICAgIGNhc2UgR1BCRGF0
YVR5cGVGbG9hdDogICAgcmV0dXJuIFtbTlNOdW1iZXIgYWxsb2NdIGluaXRXaXRoRmxvYXQ6R1BC
Q29kZWRJbnB1dFN0cmVhbVJlYWRGbG9hdChzdGF0ZSldOwotICAgIGNhc2UgR1BCRGF0YVR5cGVG
aXhlZDY0OiAgcmV0dXJuIFtbTlNOdW1iZXIgYWxsb2NdIGluaXRXaXRoVW5zaWduZWRMb25nTG9u
ZzpHUEJDb2RlZElucHV0U3RyZWFtUmVhZEZpeGVkNjQoc3RhdGUpXTsKLSAgICBjYXNlIEdQQkRh
dGFUeXBlU0ZpeGVkNjQ6IHJldHVybiBbW05TTnVtYmVyIGFsbG9jXSBpbml0V2l0aExvbmdMb25n
OkdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkU0ZpeGVkNjQoc3RhdGUpXTsKLSAgICBjYXNlIEdQQkRh
dGFUeXBlRG91YmxlOiAgIHJldHVybiBbW05TTnVtYmVyIGFsbG9jXSBpbml0V2l0aERvdWJsZTpH
UEJDb2RlZElucHV0U3RyZWFtUmVhZERvdWJsZShzdGF0ZSldOwotICAgIGNhc2UgR1BCRGF0YVR5
cGVJbnQzMjogICAgcmV0dXJuIFtbTlNOdW1iZXIgYWxsb2NdIGluaXRXaXRoSW50OkdQQkNvZGVk
SW5wdXRTdHJlYW1SZWFkSW50MzIoc3RhdGUpXTsKLSAgICBjYXNlIEdQQkRhdGFUeXBlSW50NjQ6
ICAgIHJldHVybiBbW05TTnVtYmVyIGFsbG9jXSBpbml0V2l0aExvbmdMb25nOkdQQkNvZGVkSW5w
dXRTdHJlYW1SZWFkSW50NjQoc3RhdGUpXTsKLSAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDMyOiAg
IHJldHVybiBbW05TTnVtYmVyIGFsbG9jXSBpbml0V2l0aEludDpHUEJDb2RlZElucHV0U3RyZWFt
UmVhZFNJbnQzMihzdGF0ZSldOwotICAgIGNhc2UgR1BCRGF0YVR5cGVTSW50NjQ6ICAgcmV0dXJu
IFtbTlNOdW1iZXIgYWxsb2NdIGluaXRXaXRoTG9uZ0xvbmc6R1BCQ29kZWRJbnB1dFN0cmVhbVJl
YWRTSW50NjQoc3RhdGUpXTsKLSAgICBjYXNlIEdQQkRhdGFUeXBlVUludDMyOiAgIHJldHVybiBb
W05TTnVtYmVyIGFsbG9jXSBpbml0V2l0aFVuc2lnbmVkSW50OkdQQkNvZGVkSW5wdXRTdHJlYW1S
ZWFkVUludDMyKHN0YXRlKV07Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVVJbnQ2NDogICByZXR1cm4g
W1tOU051bWJlciBhbGxvY10gaW5pdFdpdGhVbnNpZ25lZExvbmdMb25nOkdQQkNvZGVkSW5wdXRT
dHJlYW1SZWFkVUludDY0KHN0YXRlKV07Ci0gICAgY2FzZSBHUEJEYXRhVHlwZUJ5dGVzOiAgICBy
ZXR1cm4gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRSZXRhaW5lZEJ5dGVzKHN0YXRlKTsKLSAgICBj
YXNlIEdQQkRhdGFUeXBlU3RyaW5nOiAgIHJldHVybiBHUEJDb2RlZElucHV0U3RyZWFtUmVhZFJl
dGFpbmVkU3RyaW5nKHN0YXRlKTsKLSAgICBjYXNlIEdQQkRhdGFUeXBlRW51bTogICAgIHJldHVy
biBbW05TTnVtYmVyIGFsbG9jXSBpbml0V2l0aEludDpHUEJDb2RlZElucHV0U3RyZWFtUmVhZEVu
dW0oc3RhdGUpXTsKLSAgICBjYXNlIEdQQkRhdGFUeXBlR3JvdXA6Ci0gICAgY2FzZSBHUEJEYXRh
VHlwZU1lc3NhZ2U6IHsKLSAgICAgIEdQQk1lc3NhZ2UgKm1lc3NhZ2U7Ci0gICAgICBpZiAoZXhp
c3RpbmdWYWx1ZSkgewotICAgICAgICBtZXNzYWdlID0gW2V4aXN0aW5nVmFsdWUgcmV0YWluXTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdQQkRlc2NyaXB0b3IgKmRlY3JpcHRvciA9IFtleHRl
bnNpb24ubXNnQ2xhc3MgZGVzY3JpcHRvcl07Ci0gICAgICAgIG1lc3NhZ2UgPSBbW2RlY3JpcHRv
ci5tZXNzYWdlQ2xhc3MgYWxsb2NdIGluaXRdOwotICAgICAgfQotCi0gICAgICBpZiAoZGVzY3Jp
cHRpb24tPmRhdGFUeXBlID09IEdQQkRhdGFUeXBlR3JvdXApIHsKLSAgICAgICAgW2lucHV0IHJl
YWRHcm91cDpkZXNjcmlwdGlvbi0+ZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAgbWVzc2Fn
ZTptZXNzYWdlCi0gICAgICAgICAgICBleHRlbnNpb25SZWdpc3RyeTpleHRlbnNpb25SZWdpc3Ry
eV07Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBkZXNjcmlwdGlvbi0+ZGF0YVR5cGUgPT0g
R1BCRGF0YVR5cGVNZXNzYWdlCi0gICAgICAgIGlmIChHUEJFeHRlbnNpb25Jc1dpcmVGb3JtYXQo
ZGVzY3JpcHRpb24pKSB7Ci0gICAgICAgICAgLy8gRm9yIE1lc3NhZ2VTZXQgZmllbGRzIHRoZSBt
ZXNzYWdlIGxlbmd0aCB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuCi0gICAgICAgICAgLy8gcmVhZC4K
LSAgICAgICAgICBbbWVzc2FnZSBtZXJnZUZyb21Db2RlZElucHV0U3RyZWFtOmlucHV0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25SZWdpc3RyeTpleHRlbnNpb25SZWdpc3Ry
eV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgW2lucHV0IHJlYWRNZXNzYWdlOm1lc3Nh
Z2UgZXh0ZW5zaW9uUmVnaXN0cnk6ZXh0ZW5zaW9uUmVnaXN0cnldOwotICAgICAgICB9Ci0gICAg
ICB9Ci0KLSAgICAgIHJldHVybiBtZXNzYWdlOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBuaWw7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCRXh0ZW5zaW9uUmVnaXN0cnkuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0
aXZlYy9HUEJFeHRlbnNpb25SZWdpc3RyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwOGE2NDcyYWMwNzQ4YzNmOGEzMWE2N2E3Y2NjNzRjNGUwYjM2YTU4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJFeHRlbnNpb25S
ZWdpc3RyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgot
Ci1AY2xhc3MgR1BCRGVzY3JpcHRvcjsKLUBjbGFzcyBHUEJFeHRlbnNpb25EZXNjcmlwdG9yOwot
Ci1OU19BU1NVTUVfTk9OTlVMTF9CRUdJTgotCi0vLy8gQSB0YWJsZSBvZiBrbm93biBleHRlbnNp
b25zLCBzZWFyY2hhYmxlIGJ5IG5hbWUgb3IgZmllbGQgbnVtYmVyLiAgV2hlbgotLy8vIHBhcnNp
bmcgYSBwcm90b2NvbCBtZXNzYWdlIHRoYXQgbWlnaHQgaGF2ZSBleHRlbnNpb25zLCB5b3UgbXVz
dCBwcm92aWRlIGEKLS8vLyBAYyBHUEJFeHRlbnNpb25SZWdpc3RyeSBpbiB3aGljaCB5b3UgaGF2
ZSByZWdpc3RlcmVkIGFueSBleHRlbnNpb25zIHRoYXQgeW91Ci0vLy8gd2FudCB0byBiZSBhYmxl
IHRvIHBhcnNlLiBPdGhlcndpc2UsIHRob3NlIGV4dGVuc2lvbnMgd2lsbCBqdXN0IGJlIHRyZWF0
ZWQKLS8vLyBsaWtlIHVua25vd24gZmllbGRzLgotLy8vCi0vLy8gVGhlIEBjICpSb290IGNsYXNz
ZXMgcHJvdmlkZSBAYyArZXh0ZW5zaW9uUmVnaXN0cnkgZm9yIHRoZSBleHRlbnNpb25zIGRlZmlu
ZWQKLS8vLyBpbiBhIGdpdmVuIGZpbGUgKmFuZCogYWxsIGZpbGVzIGl0IGltcG9ydHMuIFlvdSBj
YW4gYWxzbyBjcmVhdGUgYQotLy8vIEBjIEdQQkV4dGVuc2lvblJlZ2lzdHJ5LCBhbmQgbWVyZ2Ug
dGhvc2UgcmVnaXN0cmllcyB0byBoYW5kbGUgcGFyc2luZwotLy8vIGV4dGVuc2lvbnMgZGVmaW5l
ZCBmcm9tIG5vbiBvdmVybGFwcGluZyBmaWxlcy4KLS8vLwotLy8vIEBjb2RlCi0vLy8gR1BCRXh0
ZW5zaW9uUmVnaXN0cnkgKnJlZ2lzdHJ5ID0KLS8vLyAgICAgW1tbTXlQcm90b0ZpbGVSb290IGV4
dGVuc2lvblJlZ2lzdHJ5XSBjb3B5XSBhdXRvcmVsZWFzZV07Ci0vLy8gW3JlZ2lzdHJ5IGFkZEV4
dGVuc2lvbjpbT3RoZXJNZXNzYWdlIG5lZWRlZEV4dGVuc2lvbl07ICAvLyBOb3QgaW4gTXlQcm90
b0ZpbGUKLS8vLyBOU0Vycm9yICpwYXJzZUVycm9yID0gbmlsOwotLy8vIE15TWVzc2FnZSAqbXNn
ID0gW015TWVzc2FnZSBwYXJzZURhdGE6ZGF0YQotLy8vICAgICAgICAgICAgICAgICAgICAgZXh0
ZW5zaW9uUmVnaXN0cnk6cmVnaXN0cnkKLS8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yOiZwYXJzZUVycm9yXTsKLS8vLyBAZW5kY29kZQotQGludGVyZmFjZSBHUEJFeHRl
bnNpb25SZWdpc3RyeSA6IE5TT2JqZWN0PE5TQ29weWluZz4KLQotLy8vIEFkZCB0aGUgZ2l2ZW4g
QGMgR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciB0byB0aGlzIHJlZ2lzdHJ5LgotLy8vCi0vLy8gQHBh
cmFtIGV4dGVuc2lvbiBUaGUgZXh0ZW5zaW9uIGRlc2NyaXB0aW9uIHRvIGFkZC4KLS0gKHZvaWQp
YWRkRXh0ZW5zaW9uOihHUEJFeHRlbnNpb25EZXNjcmlwdG9yICopZXh0ZW5zaW9uOwotCi0vLy8g
QWRkcyBhbGwgdGhlIGV4dGVuc2lvbnMgZnJvbSBhbm90aGVyIHJlZ2lzdHJ5IHRvIHRoaXMgcmVn
aXN0cnkuCi0vLy8KLS8vLyBAcGFyYW0gcmVnaXN0cnkgVGhlIHJlZ2lzdHJ5IHRvIG1lcmdlIGlu
dG8gdGhpcyByZWdpc3RyeS4KLS0gKHZvaWQpYWRkRXh0ZW5zaW9uczooR1BCRXh0ZW5zaW9uUmVn
aXN0cnkgKilyZWdpc3RyeTsKLQotLy8vIExvb2tzIGZvciB0aGUgZXh0ZW5zaW9uIHJlZ2lzdGVy
ZWQgZm9yIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIgb24gYSBnaXZlbgotLy8vIEBjIEdQQkRlc2Ny
aXB0b3IuCi0vLy8KLS8vLyBAcGFyYW0gZGVzY3JpcHRvciAgVGhlIGRlc2NyaXB0b3IgdG8gbG9v
ayBmb3IgYSByZWdpc3RlcmVkIGV4dGVuc2lvbiBvbi4KLS8vLyBAcGFyYW0gZmllbGROdW1iZXIg
VGhlIGZpZWxkIG51bWJlciBvZiBhbiBleHRlbnNpb24gdG8gbG9vayBmb3IuCi0vLy8KLS8vLyBA
cmV0dXJuIFRoZSByZWdpc3RlcmVkIEBjIEdQQkV4dGVuc2lvbkRlc2NyaXB0byBvciBuaWwgaWYg
bm9uZSB3YXMgZm91bmQuCi0tIChudWxsYWJsZSBHUEJFeHRlbnNpb25EZXNjcmlwdG9yICopZXh0
ZW5zaW9uRm9yRGVzY3JpcHRvcjooR1BCRGVzY3JpcHRvciAqKWRlc2NyaXB0b3IKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTnVtYmVyOihOU0lu
dGVnZXIpZmllbGROdW1iZXI7Ci0KLUBlbmQKLQotTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL29iamVjdGl2ZWMvR1BCRXh0ZW5zaW9uUmVnaXN0cnkubSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJF
eHRlbnNpb25SZWdpc3RyeS5tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjYxYTE3
YjE4N2FiMWQyMTg5NGUwZGE4ZTRiMzM5Mzk0OTFlOTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJFeHRlbnNpb25SZWdpc3RyeS5t
CisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0jaW1wb3J0ICJHUEJFeHRlbnNpb25SZWdpc3RyeS5oIgotCi0jaW1wb3J0
ICJHUEJCb290c3RyYXAuaCIKLSNpbXBvcnQgIkdQQkRlc2NyaXB0b3IuaCIKLQotQGltcGxlbWVu
dGF0aW9uIEdQQkV4dGVuc2lvblJlZ2lzdHJ5IHsKLSAgLy8gVE9ETyhkbWFjbGFjaCk6IFJlaW1w
bGVtZW50IHdpdGggQ0ZEaWN0aW9uYXJpZXMgdGhhdCBkb24ndCB1c2UKLSAgLy8gb2JqZWN0cyBh
cyBrZXlzLgotICBOU011dGFibGVEaWN0aW9uYXJ5ICptdXRhYmxlQ2xhc3NNYXBfOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAg
ICBtdXRhYmxlQ2xhc3NNYXBfID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsK
LSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jIHsKLSAgW211dGFibGVD
bGFzc01hcF8gcmVsZWFzZV07Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7Ci0gIEdQQkV4dGVuc2lvblJlZ2lzdHJ5
ICpyZXN1bHQgPSBbW1tzZWxmIGNsYXNzXSBhbGxvY1dpdGhab25lOnpvbmVdIGluaXRdOwotICBp
ZiAocmVzdWx0ICYmIG11dGFibGVDbGFzc01hcF8uY291bnQpIHsKLSAgICBbcmVzdWx0LT5tdXRh
YmxlQ2xhc3NNYXBfIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTptdXRhYmxlQ2xhc3NNYXBfXTsK
LSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChOU011dGFibGVEaWN0aW9uYXJ5ICopZXh0
ZW5zaW9uTWFwRm9yQ29udGFpbmluZ01lc3NhZ2VDbGFzczoKLSAgICAgICAgKENsYXNzKWNvbnRh
aW5pbmdNZXNzYWdlQ2xhc3MgewotICBOU011dGFibGVEaWN0aW9uYXJ5ICpleHRlbnNpb25NYXAg
PQotICAgICAgW211dGFibGVDbGFzc01hcF8gb2JqZWN0Rm9yS2V5OmNvbnRhaW5pbmdNZXNzYWdl
Q2xhc3NdOwotICBpZiAoZXh0ZW5zaW9uTWFwID09IG5pbCkgewotICAgIGV4dGVuc2lvbk1hcCA9
IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotICAgIFttdXRhYmxlQ2xhc3NNYXBf
IHNldE9iamVjdDpleHRlbnNpb25NYXAKLSAgICAgICAgICAgICAgICAgICAgICAgICBmb3JLZXk6
KGlkPE5TQ29weWluZz4pY29udGFpbmluZ01lc3NhZ2VDbGFzc107Ci0gIH0KLSAgcmV0dXJuIGV4
dGVuc2lvbk1hcDsKLX0KLQotLSAodm9pZClhZGRFeHRlbnNpb246KEdQQkV4dGVuc2lvbkRlc2Ny
aXB0b3IgKilleHRlbnNpb24gewotICBpZiAoZXh0ZW5zaW9uID09IG5pbCkgewotICAgIHJldHVy
bjsKLSAgfQotCi0gIENsYXNzIGNvbnRhaW5pbmdNZXNzYWdlQ2xhc3MgPSBleHRlbnNpb24uY29u
dGFpbmluZ01lc3NhZ2VDbGFzczsKLSAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZXh0ZW5zaW9uTWFw
ID0KLSAgICAgIFtzZWxmIGV4dGVuc2lvbk1hcEZvckNvbnRhaW5pbmdNZXNzYWdlQ2xhc3M6Y29u
dGFpbmluZ01lc3NhZ2VDbGFzc107Ci0gIFtleHRlbnNpb25NYXAgc2V0T2JqZWN0OmV4dGVuc2lv
biBmb3JLZXk6QChleHRlbnNpb24uZmllbGROdW1iZXIpXTsKLX0KLQotLSAoR1BCRXh0ZW5zaW9u
RGVzY3JpcHRvciAqKWV4dGVuc2lvbkZvckRlc2NyaXB0b3I6KEdQQkRlc2NyaXB0b3IgKilkZXNj
cmlwdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE51bWJl
cjooTlNJbnRlZ2VyKWZpZWxkTnVtYmVyIHsKLSAgQ2xhc3MgbWVzc2FnZUNsYXNzID0gZGVzY3Jp
cHRvci5tZXNzYWdlQ2xhc3M7Ci0gIE5TRGljdGlvbmFyeSAqZXh0ZW5zaW9uTWFwID0KLSAgICAg
IFttdXRhYmxlQ2xhc3NNYXBfIG9iamVjdEZvcktleTptZXNzYWdlQ2xhc3NdOwotICByZXR1cm4g
W2V4dGVuc2lvbk1hcCBvYmplY3RGb3JLZXk6QChmaWVsZE51bWJlcildOwotfQotCi0tICh2b2lk
KWFkZEV4dGVuc2lvbnM6KEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICopcmVnaXN0cnkgewotICBpZiAo
cmVnaXN0cnkgPT0gbmlsKSB7Ci0gICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG5v
IGV4dGVuc2lvbnMganVzdCBpZ25vcmUuCi0gICAgcmV0dXJuOwotICB9Ci0gIE5TTXV0YWJsZURp
Y3Rpb25hcnkgKm90aGVyQ2xhc3NNYXAgPSByZWdpc3RyeS0+bXV0YWJsZUNsYXNzTWFwXzsKLSAg
Zm9yIChDbGFzcyBjb250YWluaW5nTWVzc2FnZUNsYXNzIGluIG90aGVyQ2xhc3NNYXApIHsKLSAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpleHRlbnNpb25NYXAgPQotICAgICAgICBbc2VsZiBleHRl
bnNpb25NYXBGb3JDb250YWluaW5nTWVzc2FnZUNsYXNzOmNvbnRhaW5pbmdNZXNzYWdlQ2xhc3Nd
OwotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKm90aGVyRXh0ZW5zaW9uTWFwID0KLSAgICAgICAg
W3JlZ2lzdHJ5IGV4dGVuc2lvbk1hcEZvckNvbnRhaW5pbmdNZXNzYWdlQ2xhc3M6Y29udGFpbmlu
Z01lc3NhZ2VDbGFzc107Ci0gICAgW2V4dGVuc2lvbk1hcCBhZGRFbnRyaWVzRnJvbURpY3Rpb25h
cnk6b3RoZXJFeHRlbnNpb25NYXBdOwotICB9Ci19Ci0KLUBlbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0
aXZlYy9HUEJNZXNzYWdlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCTWVzc2FnZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1OGM0MmQwMmVlMWQ2Mzg3NWEzMGQyNjk4ZjE4OGE1YTUzOTQyNjll
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZl
Yy9HUEJNZXNzYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi0jaW1wb3J0ICJHUEJCb290c3RyYXAuaCIKLQotQGNsYXNzIEdQQkRlc2NyaXB0b3I7
Ci1AY2xhc3MgR1BCQ29kZWRJbnB1dFN0cmVhbTsKLUBjbGFzcyBHUEJDb2RlZE91dHB1dFN0cmVh
bTsKLUBjbGFzcyBHUEJFeHRlbnNpb25EZXNjcmlwdG9yOwotQGNsYXNzIEdQQkV4dGVuc2lvblJl
Z2lzdHJ5OwotQGNsYXNzIEdQQkZpZWxkRGVzY3JpcHRvcjsKLUBjbGFzcyBHUEJVbmtub3duRmll
bGRTZXQ7Ci0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi0KLUNGX0VYVEVSTl9DX0JFR0lOCi0K
LS8vLyBOU0Vycm9yIGRvbWFpbiB1c2VkIGZvciBlcnJvcnMuCi1leHRlcm4gTlNTdHJpbmcgKmNv
bnN0IEdQQk1lc3NhZ2VFcnJvckRvbWFpbjsKLQotLy8vIEVycm9yIGNvZGUgZm9yIE5TRXJyb3Ig
d2l0aCBHUEJNZXNzYWdlRXJyb3JEb21haW4uCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBH
UEJNZXNzYWdlRXJyb3JDb2RlKSB7Ci0gIC8vLyBUaGUgZGF0YSBiZWluZyBwYXJzZWQgaXMgYmFk
IGFuZCBhIG1lc3NhZ2UgY2FuIG5vdCBiZSBjcmVhdGVkIGZyb20gaXQuCi0gIEdQQk1lc3NhZ2VF
cnJvckNvZGVNYWxmb3JtZWREYXRhID0gLTEwMCwKLSAgLy8vIEEgbWVzc2FnZSBjYW4ndCBiZSBz
ZXJpYWxpemVkIGJlY2F1c2UgaXQgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuCi0gIEdQQk1l
c3NhZ2VFcnJvckNvZGVNaXNzaW5nUmVxdWlyZWRGaWVsZCA9IC0xMDEsCi19OwotCi0jaWZkZWYg
REVCVUcKLS8vLyBJbiBERUJVRyBPTkxZLCBhbiBOU0V4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBh
IHBhcnNlZCBtZXNzYWdlIGRvZXNuJ3QKLS8vLyBjb250YWluIHJlcXVpcmVkIGZpZWxkcy4gVGhp
cyBrZXkgYWxsb3dzIHlvdSB0byByZXRyaWV2ZSB0aGUgcGFyc2VkIG1lc3NhZ2UKLS8vLyBmcm9t
IHRoZSBleGNlcHRpb24ncyBAYyB1c2VySW5mbyBkaWN0aW9uYXJ5LgotZXh0ZXJuIE5TU3RyaW5n
ICpjb25zdCBHUEJFeGNlcHRpb25NZXNzYWdlS2V5OwotI2VuZGlmICAvLyBERUJVRwotCi1DRl9F
WFRFUk5fQ19FTkQKLQotLy8vIEJhc2UgY2xhc3MgZm9yIGFsbCBvZiB0aGUgZ2VuZXJhdGVkIG1l
c3NhZ2UgY2xhc3Nlcy4KLUBpbnRlcmZhY2UgR1BCTWVzc2FnZSA6IE5TT2JqZWN0PE5TU2VjdXJl
Q29kaW5nLCBOU0NvcHlpbmc+Ci0KLS8vIE5PVEU6IElmIHlvdSBhZGQgYSBpbnN0YW5jZSBtZXRo
b2QvcHJvcGVydHkgdG8gdGhpcyBjbGFzcyB0aGF0IG1heSBjb25mbGljdAotLy8gd2l0aCBtZXRo
b2RzIGRlY2xhcmVkIGluIHByb3RvcywgeW91IG5lZWQgdG8gdXBkYXRlIG9iamVjdGl2ZV9oZWxw
ZXJzLmNjLgotLy8gVGhlIG1haW4gY2FzZXMgYXJlIG1ldGhvZHMgdGhhdCB0YWtlIG5vIGFyZ3Vt
ZW50cywgb3Igc2V0Rm9vOi9oYXNGb286IHR5cGUKLS8vIG1ldGhvZHMuCi0KLS8vLyBUaGUgdW5r
bm93biBmaWVsZHMgZm9yIHRoaXMgbWVzc2FnZS4KLS8vLwotLy8vIE9ubHkgbWVzc2FnZXMgZnJv
bSBwcm90byBmaWxlcyBkZWNsYXJlZCB3aXRoICJwcm90bzIiIHN5bnRheCBzdXBwb3J0IHVua25v
d24KLS8vLyBmaWVsZHMuIEZvciAicHJvdG8zIiBzeW50YXgsIGFueSB1bmtub3duIGZpZWxkcyBm
b3VuZCB3aGlsZSBwYXJzaW5nIGFyZQotLy8vIGRyb3BwZWQuCi1AcHJvcGVydHkobm9uYXRvbWlj
LCBjb3B5LCBudWxsYWJsZSkgR1BCVW5rbm93bkZpZWxkU2V0ICp1bmtub3duRmllbGRzOwotCi0v
Ly8gQXJlIGFsbCByZXF1aXJlZCBmaWVsZHMgc2V0IGluIHRoZSBtZXNzYWdlIGFuZCBhbGwgZW1i
ZWRkZWQgbWVzc2FnZXMuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPWlz
SW5pdGlhbGl6ZWQpIEJPT0wgaW5pdGlhbGl6ZWQ7Ci0KLS8vLyBSZXR1cm5zIGFuIGF1dG9yZWxl
YXNlZCBpbnN0YW5jZS4KLSsgKGluc3RhbmNldHlwZSltZXNzYWdlOwotCi0vLy8gQ3JlYXRlcyBh
IG5ldyBpbnN0YW5jZSBieSBwYXJzaW5nIHRoZSBkYXRhLiBUaGlzIG1ldGhvZCBzaG91bGQgYmUg
c2VudCB0bwotLy8vIHRoZSBnZW5lcmF0ZWQgbWVzc2FnZSBjbGFzcyB0aGF0IHRoZSBkYXRhIHNo
b3VsZCBiZSBpbnRlcnByZXRlZCBhcy4gSWYKLS8vLyB0aGVyZSBpcyBhbiBlcnJvciB0aGUgbWV0
aG9kIHJldHVybnMgbmlsIGFuZCB0aGUgZXJyb3IgaXMgcmV0dXJuZWQgaW4KLS8vLyBlcnJvclB0
ciAod2hlbiBwcm92aWRlZCkuCi0vLy8KLS8vLyBAbm90ZSBJbiBERUJVRyBidWlsZHMsIHRoZSBw
YXJzZWQgbWVzc2FnZSBpcyBjaGVja2VkIHRvIGJlIHN1cmUgYWxsIHJlcXVpcmVkCi0vLy8gICAg
ICAgZmllbGRzIHdlcmUgcHJvdmlkZWQsIGFuZCB0aGUgcGFyc2Ugd2lsbCBmYWlsIGlmIHNvbWUg
YXJlIG1pc3NpbmcuCi0vLy8KLS8vLyBAcGFyYW0gZGF0YSAgICAgVGhlIGRhdGEgdG8gcGFyc2Uu
Ci0vLy8gQHBhcmFtIGVycm9yUHRyIEFuIG9wdGlvbmFsIGVycm9yIHBvaW50ZXIgdG8gZmlsbCBp
biB3aXRoIGEgZmFpbHVyZSByZWFzb24gaWYKLS8vLyAgICAgICAgICAgICAgICAgdGhlIGRhdGEg
Y2FuIG5vdCBiZSBwYXJzZWQuCi0vLy8KLS8vLyBAcmV0dXJuIEEgbmV3IGluc3RhbmNlIG9mIHRo
ZSBjbGFzcyBtZXNzYWdlZC4KLSsgKGluc3RhbmNldHlwZSlwYXJzZUZyb21EYXRhOihOU0RhdGEg
KilkYXRhIGVycm9yOihOU0Vycm9yICoqKWVycm9yUHRyOwotCi0vLy8gQ3JlYXRlcyBhIG5ldyBp
bnN0YW5jZSBieSBwYXJzaW5nIHRoZSBkYXRhLiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgc2VudCB0
bwotLy8vIHRoZSBnZW5lcmF0ZWQgbWVzc2FnZSBjbGFzcyB0aGF0IHRoZSBkYXRhIHNob3VsZCBi
ZSBpbnRlcnByZXRlZCBhcy4gSWYKLS8vLyB0aGVyZSBpcyBhbiBlcnJvciB0aGUgbWV0aG9kIHJl
dHVybnMgbmlsIGFuZCB0aGUgZXJyb3IgaXMgcmV0dXJuZWQgaW4KLS8vLyBlcnJvclB0ciAod2hl
biBwcm92aWRlZCkuCi0vLy8KLS8vLyBAbm90ZSBJbiBERUJVRyBidWlsZHMsIHRoZSBwYXJzZWQg
bWVzc2FnZSBpcyBjaGVja2VkIHRvIGJlIHN1cmUgYWxsIHJlcXVpcmVkCi0vLy8gICAgICAgZmll
bGRzIHdlcmUgcHJvdmlkZWQsIGFuZCB0aGUgcGFyc2Ugd2lsbCBmYWlsIGlmIHNvbWUgYXJlIG1p
c3NpbmcuCi0vLy8KLS8vLyBAcGFyYW0gZGF0YSAgICAgICAgICAgICAgVGhlIGRhdGEgdG8gcGFy
c2UuCi0vLy8gQHBhcmFtIGV4dGVuc2lvblJlZ2lzdHJ5IFRoZSBleHRlbnNpb24gcmVnaXN0cnkg
dG8gdXNlIHRvIGxvb2sgdXAgZXh0ZW5zaW9ucy4KLS8vLyBAcGFyYW0gZXJyb3JQdHIgICAgICAg
ICAgQW4gb3B0aW9uYWwgZXJyb3IgcG9pbnRlciB0byBmaWxsIGluIHdpdGggYSBmYWlsdXJlCi0v
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiBpZiB0aGUgZGF0YSBjYW4gbm90IGJl
IHBhcnNlZC4KLS8vLwotLy8vIEByZXR1cm4gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIG1l
c3NhZ2VkLgotKyAoaW5zdGFuY2V0eXBlKXBhcnNlRnJvbURhdGE6KE5TRGF0YSAqKWRhdGEKLSAg
ICAgICAgICAgIGV4dGVuc2lvblJlZ2lzdHJ5OihudWxsYWJsZSBHUEJFeHRlbnNpb25SZWdpc3Ry
eSAqKWV4dGVuc2lvblJlZ2lzdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjooTlNF
cnJvciAqKillcnJvclB0cjsKLQotLy8vIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgYnkgcGFyc2lu
ZyB0aGUgZGF0YSBmcm9tIHRoZSBnaXZlbiBpbnB1dCBzdHJlYW0uIFRoaXMKLS8vLyBtZXRob2Qg
c2hvdWxkIGJlIHNlbnQgdG8gdGhlIGdlbmVyYXRlZCBtZXNzYWdlIGNsYXNzIHRoYXQgdGhlIGRh
dGEgc2hvdWxkCi0vLy8gYmUgaW50ZXJwcmV0ZWQgYXMuIElmIHRoZXJlIGlzIGFuIGVycm9yIHRo
ZSBtZXRob2QgcmV0dXJucyBuaWwgYW5kIHRoZSBlcnJvcgotLy8vIGlzIHJldHVybmVkIGluIGVy
cm9yUHRyICh3aGVuIHByb3ZpZGVkKS4KLS8vLwotLy8vIEBub3RlIEluIERFQlVHIGJ1aWxkcywg
dGhlIHBhcnNlZCBtZXNzYWdlIGlzIGNoZWNrZWQgdG8gYmUgc3VyZSBhbGwgcmVxdWlyZWQKLS8v
LyAgICAgICBmaWVsZHMgd2VyZSBwcm92aWRlZCwgYW5kIHRoZSBwYXJzZSB3aWxsIGZhaWwgaWYg
c29tZSBhcmUgbWlzc2luZy4KLS8vLwotLy8vIEBwYXJhbSBpbnB1dCAgICAgICAgICAgICBUaGUg
c3RyZWFtIHRvIHJlYWQgZGF0YSBmcm9tLgotLy8vIEBwYXJhbSBleHRlbnNpb25SZWdpc3RyeSBU
aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IHRvIHVzZSB0byBsb29rIHVwIGV4dGVuc2lvbnMuCi0vLy8g
QHBhcmFtIGVycm9yUHRyICAgICAgICAgIEFuIG9wdGlvbmFsIGVycm9yIHBvaW50ZXIgdG8gZmls
bCBpbiB3aXRoIGEgZmFpbHVyZQotLy8vICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24g
aWYgdGhlIGRhdGEgY2FuIG5vdCBiZSBwYXJzZWQuCi0vLy8KLS8vLyBAcmV0dXJuIEEgbmV3IGlu
c3RhbmNlIG9mIHRoZSBjbGFzcyBtZXNzYWdlZC4KLSsgKGluc3RhbmNldHlwZSlwYXJzZUZyb21D
b2RlZElucHV0U3RyZWFtOihHUEJDb2RlZElucHV0U3RyZWFtICopaW5wdXQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dGVuc2lvblJlZ2lzdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChudWxsYWJsZSBHUEJFeHRlbnNpb25SZWdpc3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjooTlNFcnJvciAqKillcnJv
clB0cjsKLQotLy8vIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgYnkgcGFyc2luZyB0aGUgZGF0YSBm
cm9tIHRoZSBnaXZlbiBpbnB1dCBzdHJlYW0uIFRoaXMKLS8vLyBtZXRob2Qgc2hvdWxkIGJlIHNl
bnQgdG8gdGhlIGdlbmVyYXRlZCBtZXNzYWdlIGNsYXNzIHRoYXQgdGhlIGRhdGEgc2hvdWxkCi0v
Ly8gYmUgaW50ZXJwcmV0ZWQgYXMuIElmIHRoZXJlIGlzIGFuIGVycm9yIHRoZSBtZXRob2QgcmV0
dXJucyBuaWwgYW5kIHRoZSBlcnJvcgotLy8vIGlzIHJldHVybmVkIGluIGVycm9yUHRyICh3aGVu
IHByb3ZpZGVkKS4KLS8vLwotLy8vIEBub3RlIFVubGlrZSB0aGUgcGFyc2VGcm9tLi4uIG1ldGhv
ZHMsIHRoaXMgbmV2ZXIgY2hlY2tzIHRvIHNlZSBpZiBhbGwgb2YKLS8vLyAgICAgICB0aGUgcmVx
dWlyZWQgZmllbGRzIGFyZSBzZXQuIFNvIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHJlbG9h
ZAotLy8vICAgICAgIG1lc3NhZ2VzIHRoYXQgbWF5IG5vdCBiZSBjb21wbGV0ZS4KLS8vLwotLy8v
IEBwYXJhbSBpbnB1dCAgICAgICAgICAgICBUaGUgc3RyZWFtIHRvIHJlYWQgZGF0YSBmcm9tLgot
Ly8vIEBwYXJhbSBleHRlbnNpb25SZWdpc3RyeSBUaGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IHRvIHVz
ZSB0byBsb29rIHVwIGV4dGVuc2lvbnMuCi0vLy8gQHBhcmFtIGVycm9yUHRyICAgICAgICAgIEFu
IG9wdGlvbmFsIGVycm9yIHBvaW50ZXIgdG8gZmlsbCBpbiB3aXRoIGEgZmFpbHVyZQotLy8vICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gaWYgdGhlIGRhdGEgY2FuIG5vdCBiZSBwYXJz
ZWQuCi0vLy8KLS8vLyBAcmV0dXJuIEEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBtZXNzYWdl
ZC4KLSsgKGluc3RhbmNldHlwZSlwYXJzZURlbGltaXRlZEZyb21Db2RlZElucHV0U3RyZWFtOihH
UEJDb2RlZElucHV0U3RyZWFtICopaW5wdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4dGVuc2lvblJlZ2lzdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChudWxsYWJsZSBHUEJFeHRlbnNpb25SZWdpc3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjooTlNFcnJv
ciAqKillcnJvclB0cjsKLQotLy8vIEluaXRpYWxpemVzIGFuIGluc3RhbmNlIGJ5IHBhcnNpbmcg
dGhlIGRhdGEuIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBzZW50IHRvCi0vLy8gdGhlIGdlbmVyYXRl
ZCBtZXNzYWdlIGNsYXNzIHRoYXQgdGhlIGRhdGEgc2hvdWxkIGJlIGludGVycHJldGVkIGFzLiBJ
ZgotLy8vIHRoZXJlIGlzIGFuIGVycm9yIHRoZSBtZXRob2QgcmV0dXJucyBuaWwgYW5kIHRoZSBl
cnJvciBpcyByZXR1cm5lZCBpbgotLy8vIGVycm9yUHRyICh3aGVuIHByb3ZpZGVkKS4KLS8vLwot
Ly8vIEBub3RlIEluIERFQlVHIGJ1aWxkcywgdGhlIHBhcnNlZCBtZXNzYWdlIGlzIGNoZWNrZWQg
dG8gYmUgc3VyZSBhbGwgcmVxdWlyZWQKLS8vLyAgICAgICBmaWVsZHMgd2VyZSBwcm92aWRlZCwg
YW5kIHRoZSBwYXJzZSB3aWxsIGZhaWwgaWYgc29tZSBhcmUgbWlzc2luZy4KLS8vLwotLy8vIEBw
YXJhbSBkYXRhICAgICBUaGUgZGF0YSB0byBwYXJzZS4KLS8vLyBAcGFyYW0gZXJyb3JQdHIgQW4g
b3B0aW9uYWwgZXJyb3IgcG9pbnRlciB0byBmaWxsIGluIHdpdGggYSBmYWlsdXJlIHJlYXNvbiBp
ZgotLy8vICAgICAgICAgICAgICAgICB0aGUgZGF0YSBjYW4gbm90IGJlIHBhcnNlZC4KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgZXJyb3I6KE5TRXJyb3IgKiop
ZXJyb3JQdHI7Ci0KLS8vLyBJbml0aWFsaXplcyBhbiBpbnN0YW5jZSBieSBwYXJzaW5nIHRoZSBk
YXRhLiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgc2VudCB0bwotLy8vIHRoZSBnZW5lcmF0ZWQgbWVz
c2FnZSBjbGFzcyB0aGF0IHRoZSBkYXRhIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcy4gSWYKLS8v
LyB0aGVyZSBpcyBhbiBlcnJvciB0aGUgbWV0aG9kIHJldHVybnMgbmlsIGFuZCB0aGUgZXJyb3Ig
aXMgcmV0dXJuZWQgaW4KLS8vLyBlcnJvclB0ciAod2hlbiBwcm92aWRlZCkuCi0vLy8KLS8vLyBA
bm90ZSBJbiBERUJVRyBidWlsZHMsIHRoZSBwYXJzZWQgbWVzc2FnZSBpcyBjaGVja2VkIHRvIGJl
IHN1cmUgYWxsIHJlcXVpcmVkCi0vLy8gICAgICAgZmllbGRzIHdlcmUgcHJvdmlkZWQsIGFuZCB0
aGUgcGFyc2Ugd2lsbCBmYWlsIGlmIHNvbWUgYXJlIG1pc3NpbmcuCi0vLy8KLS8vLyBAcGFyYW0g
ZGF0YSAgICAgICAgICAgICAgVGhlIGRhdGEgdG8gcGFyc2UuCi0vLy8gQHBhcmFtIGV4dGVuc2lv
blJlZ2lzdHJ5IFRoZSBleHRlbnNpb24gcmVnaXN0cnkgdG8gdXNlIHRvIGxvb2sgdXAgZXh0ZW5z
aW9ucy4KLS8vLyBAcGFyYW0gZXJyb3JQdHIgICAgICAgICAgQW4gb3B0aW9uYWwgZXJyb3IgcG9p
bnRlciB0byBmaWxsIGluIHdpdGggYSBmYWlsdXJlCi0vLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlYXNvbiBpZiB0aGUgZGF0YSBjYW4gbm90IGJlIHBhcnNlZC4KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEKLSAgICAgICAgICAgZXh0ZW5zaW9uUmVnaXN0
cnk6KG51bGxhYmxlIEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICopZXh0ZW5zaW9uUmVnaXN0cnkKLSAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3JQdHI7Ci0KLS8vLyBJ
bml0aWFsaXplcyBhbiBpbnN0YW5jZSBieSBwYXJzaW5nIHRoZSBkYXRhIGZyb20gdGhlIGdpdmVu
IGlucHV0IHN0cmVhbS4gVGhpcwotLy8vIG1ldGhvZCBzaG91bGQgYmUgc2VudCB0byB0aGUgZ2Vu
ZXJhdGVkIG1lc3NhZ2UgY2xhc3MgdGhhdCB0aGUgZGF0YSBzaG91bGQKLS8vLyBiZSBpbnRlcnBy
ZXRlZCBhcy4gSWYgdGhlcmUgaXMgYW4gZXJyb3IgdGhlIG1ldGhvZCByZXR1cm5zIG5pbCBhbmQg
dGhlIGVycm9yCi0vLy8gaXMgcmV0dXJuZWQgaW4gZXJyb3JQdHIgKHdoZW4gcHJvdmlkZWQpLgot
Ly8vCi0vLy8gQG5vdGUgVW5saWtlIHRoZSBwYXJzZUZyb20uLi4gbWV0aG9kcywgdGhpcyBuZXZl
ciBjaGVja3MgdG8gc2VlIGlmIGFsbCBvZgotLy8vICAgICAgIHRoZSByZXF1aXJlZCBmaWVsZHMg
YXJlIHNldC4gU28gdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVsb2FkCi0vLy8gICAgICAg
bWVzc2FnZXMgdGhhdCBtYXkgbm90IGJlIGNvbXBsZXRlLgotLy8vCi0vLy8gQHBhcmFtIGlucHV0
ICAgICAgICAgICAgIFRoZSBzdHJlYW0gdG8gcmVhZCBkYXRhIGZyb20uCi0vLy8gQHBhcmFtIGV4
dGVuc2lvblJlZ2lzdHJ5IFRoZSBleHRlbnNpb24gcmVnaXN0cnkgdG8gdXNlIHRvIGxvb2sgdXAg
ZXh0ZW5zaW9ucy4KLS8vLyBAcGFyYW0gZXJyb3JQdHIgICAgICAgICAgQW4gb3B0aW9uYWwgZXJy
b3IgcG9pbnRlciB0byBmaWxsIGluIHdpdGggYSBmYWlsdXJlCi0vLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlYXNvbiBpZiB0aGUgZGF0YSBjYW4gbm90IGJlIHBhcnNlZC4KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvZGVkSW5wdXRTdHJlYW06KEdQQkNvZGVkSW5wdXRTdHJlYW0gKilp
bnB1dAotICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25SZWdpc3RyeToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChudWxsYWJsZSBHUEJFeHRlbnNpb25SZWdpc3RyeSAqKWV4dGVu
c2lvblJlZ2lzdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOihO
U0Vycm9yICoqKWVycm9yUHRyOwotCi0vLy8gV3JpdGVzIG91dCB0aGUgbWVzc2FnZSB0byB0aGUg
Z2l2ZW4gb3V0cHV0IHN0cmVhbS4KLS0gKHZvaWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOihH
UEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dDsKLS8vLyBXcml0ZXMgb3V0IHRoZSBtZXNzYWdl
IHRvIHRoZSBnaXZlbiBvdXRwdXQgc3RyZWFtLgotLSAodm9pZCl3cml0ZVRvT3V0cHV0U3RyZWFt
OihOU091dHB1dFN0cmVhbSAqKW91dHB1dDsKLQotLy8vIFdyaXRlcyBvdXQgYSB2YXJpbnQgZm9y
IHRoZSBtZXNzYWdlIHNpemUgZm9sbG93ZWQgYnkgdGhlIHRoZSBtZXNzYWdlIHRvCi0vLy8gdGhl
IGdpdmVuIG91dHB1dCBzdHJlYW0uCi0tICh2b2lkKXdyaXRlRGVsaW1pdGVkVG9Db2RlZE91dHB1
dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXQ7Ci0vLy8gV3JpdGVzIG91dCBh
IHZhcmludCBmb3IgdGhlIG1lc3NhZ2Ugc2l6ZSBmb2xsb3dlZCBieSB0aGUgdGhlIG1lc3NhZ2Ug
dG8KLS8vLyB0aGUgZ2l2ZW4gb3V0cHV0IHN0cmVhbS4KLS0gKHZvaWQpd3JpdGVEZWxpbWl0ZWRU
b091dHB1dFN0cmVhbTooTlNPdXRwdXRTdHJlYW0gKilvdXRwdXQ7Ci0KLS8vLyBTZXJpYWxpemVz
IHRoZSBtZXNzYWdlIHRvIGEgQGMgTlNEYXRhLgotLy8vCi0vLy8gSWYgdGhlcmUgaXMgYW4gZXJy
b3Igd2hpbGUgZ2VuZXJhdGluZyB0aGUgZGF0YSwgbmlsIGlzIHJldHVybmVkLgotLy8vCi0vLy8g
QG5vdGUgVGhpcyB2YWx1ZSBpcyBub3QgY2FjaGVkLCBzbyBpZiB5b3UgYXJlIHVzaW5nIGl0IHJl
cGVhdGVkbHksIGNhY2hlCi0vLy8gICAgICAgaXQgeW91cnNlbGYuCi0vLy8KLS8vLyBAbm90ZSBJ
biBERUJVRyBPTkxZLCB0aGUgbWVzc2FnZSBpcyBhbHNvIGNoZWNrZWQgZm9yIGFsbCByZXF1aXJl
ZCBmaWVsZCwKLS8vLyAgICAgICBpZiBvbmUgaXMgbWlzc2luZywgbmlsIHdpbGwgYmUgcmV0dXJu
ZWQuCi0tIChudWxsYWJsZSBOU0RhdGEgKilkYXRhOwotCi0vLy8gU2VyaWFsaXplcyBhIHZhcmlu
dCB3aXRoIHRoZSBtZXNzYWdlIHNpemUgZm9sbG93ZWQgYnkgdGhlIG1lc3NhZ2UgZGF0YSwKLS8v
LyByZXR1cm5pbmcgdGhhdCBhcyBhIEBjIE5TRGF0YS4KLS8vLwotLy8vIEBub3RlIFRoaXMgdmFs
dWUgaXMgbm90IGNhY2hlZCwgc28gaWYgeW91IGFyZSB1c2luZyBpdCByZXBlYXRlZGx5LCBjYWNo
ZQotLy8vICAgICAgIGl0IHlvdXJzZWxmLgotLSAoTlNEYXRhICopZGVsaW1pdGVkRGF0YTsKLQot
Ly8vIENhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIG9iamVjdCBpZiBpdCB3ZXJlIHNlcmlhbGl6
ZWQuCi0vLy8KLS8vLyBUaGlzIGlzIG5vdCBhIGNhY2hlZCB2YWx1ZS4gSWYgeW91IGFyZSBmb2xs
b3dpbmcgYSBwYXR0ZXJuIGxpa2UgdGhpczoKLS8vLyBAY29kZQotLy8vICAgc2l6ZV90IHNpemUg
PSBbYU1zZyBzZXJpYWxpemVkU2l6ZV07Ci0vLy8gICBOU011dGFibGVEYXRhICpmb28gPSBbTlNN
dXRhYmxlRGF0YSBkYXRhV2l0aENhcGFjaXR5OnNpemUgKyBzaXplb2Yoc2l6ZSldOwotLy8vICAg
W2ZvbyB3cml0ZVNpemU6c2l6ZV07Ci0vLy8gICBbZm9vIGFwcGVuZERhdGE6W2FNc2cgZGF0YV1d
OwotLy8vIEBlbmRjb2RlCi0vLy8geW91IHdvdWxkIGJlIGJldHRlciBkb2luZzoKLS8vLyBAY29k
ZQotLy8vICAgTlNEYXRhICpkYXRhID0gW2FNc2cgZGF0YV07Ci0vLy8gICBOU1VJbnRlZ2VyIHNp
emUgPSBbYU1zZyBsZW5ndGhdOwotLy8vICAgTlNNdXRhYmxlRGF0YSAqZm9vID0gW05TTXV0YWJs
ZURhdGEgZGF0YVdpdGhDYXBhY2l0eTpzaXplICsgc2l6ZW9mKHNpemUpXTsKLS8vLyAgIFtmb28g
d3JpdGVTaXplOnNpemVdOwotLy8vICAgW2ZvbyBhcHBlbmREYXRhOmRhdGFdOwotLy8vIEBlbmRj
b2RlCi0tIChzaXplX3Qpc2VyaWFsaXplZFNpemU7Ci0KLS8vLyBSZXR1cm4gdGhlIGRlc2NyaXB0
b3IgZm9yIHRoZSBtZXNzYWdlIGNsYXNzLgotKyAoR1BCRGVzY3JpcHRvciAqKWRlc2NyaXB0b3I7
Ci0vLy8gUmV0dXJuIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgbWVzc2FnZS4KLS0gKEdQQkRlc2Ny
aXB0b3IgKilkZXNjcmlwdG9yOwotCi0vLy8gVGVzdCB0byBzZWUgaWYgdGhlIGdpdmVuIGV4dGVu
c2lvbiBpcyBzZXQgb24gdGhlIG1lc3NhZ2UuCi0tIChCT09MKWhhc0V4dGVuc2lvbjooR1BCRXh0
ZW5zaW9uRGVzY3JpcHRvciAqKWV4dGVuc2lvbjsKLQotLy8vIEZldGNoZXMgdGhlIGdpdmVuIGV4
dGVuc2lvbidzIHZhbHVlIGZvciB0aGlzIG1lc3NhZ2UuCi0vLy8KLS8vLyBFeHRlbnNpb25zIHVz
ZSBib3hlZCB2YWx1ZXMgKE5TTnVtYmVycykgZm9yIFBPRHMgYW5kIE5TTXV0YWJsZUFycmF5cyBm
b3IKLS8vLyByZXBlYXRlZCBmaWVsZHMuIElmIHRoZSBleHRlbnNpb24gaXMgYSBNZXNzYWdlIG9u
ZSB3aWxsIGJlIGF1dG8gY3JlYXRlZCBmb3IgeW91Ci0vLy8gYW5kIHJldHVybmVkIHNpbWlsYXIg
dG8gZmllbGRzLgotLSAobnVsbGFibGUgaWQpZ2V0RXh0ZW5zaW9uOihHUEJFeHRlbnNpb25EZXNj
cmlwdG9yICopZXh0ZW5zaW9uOwotCi0vLy8gU2V0cyB0aGUgZ2l2ZW4gZXh0ZW5zaW9uJ3MgdmFs
dWUgZm9yIHRoaXMgbWVzc2FnZS4gVGhpcyBpcyBvbmx5IGZvciBzaW5nbGUKLS8vLyBmaWVsZCBl
eHRlbnNpb25zIChpLmUuIC0gbm90IHJlcGVhdGVkIGZpZWxkcykuCi0vLy8KLS8vLyBFeHRlbnNp
b25zIHVzZSBib3hlZCB2YWx1ZXMgKEBjIE5TTnVtYmVycykuCi0tICh2b2lkKXNldEV4dGVuc2lv
bjooR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciAqKWV4dGVuc2lvbiB2YWx1ZToobnVsbGFibGUgaWQp
dmFsdWU7Ci0KLS8vLyBBZGRzIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZXh0ZW5zaW9uIGZvciB0
aGlzIG1lc3NhZ2UuIFRoaXMgaXMgb25seSBmb3IKLS8vLyByZXBlYXRlZCBmaWVsZCBleHRlbnNp
b25zLiBJZiB0aGUgZmllbGQgaXMgYSByZXBlYXRlZCBQT0QgdHlwZSB0aGUgQGMgdmFsdWUKLS8v
LyBpcyBhIEBjIE5TTnVtYmVyLgotLSAodm9pZClhZGRFeHRlbnNpb246KEdQQkV4dGVuc2lvbkRl
c2NyaXB0b3IgKilleHRlbnNpb24gdmFsdWU6KGlkKXZhbHVlOwotCi0vLy8gUmVwbGFjZXMgdGhl
IGdpdmVuIHZhbHVlIGF0IGFuIGluZGV4IGZvciB0aGUgZXh0ZW5zaW9uIG9uIHRoaXMgbWVzc2Fn
ZS4gVGhpcwotLy8vIGlzIG9ubHkgZm9yIHJlcGVhdGVkIGZpZWxkIGV4dGVuc2lvbnMuIElmIHRo
ZSBmaWVsZCBpcyBhIHJlcGVhdGVkIFBPRCB0eXBlCi0vLy8gdGhlIEBjIHZhbHVlIGlzIGEgQGMg
TlNOdW1iZXIuCi0tICh2b2lkKXNldEV4dGVuc2lvbjooR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciAq
KWV4dGVuc2lvbgotICAgICAgICAgICAgICAgaW5kZXg6KE5TVUludGVnZXIpaW5kZXgKLSAgICAg
ICAgICAgICAgIHZhbHVlOihpZCl2YWx1ZTsKLQotLy8vIENsZWFycyB0aGUgZ2l2ZW4gZXh0ZW5z
aW9uIGZvciB0aGlzIG1lc3NhZ2UuCi0tICh2b2lkKWNsZWFyRXh0ZW5zaW9uOihHUEJFeHRlbnNp
b25EZXNjcmlwdG9yICopZXh0ZW5zaW9uOwotCi0vLy8gUmVzZXRzIGFsbCBvZiB0aGUgZmllbGRz
IG9mIHRoaXMgbWVzc2FnZSB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLS0gKHZvaWQpY2xlYXI7
Ci0KLS8vLyBQYXJzZXMgYSBtZXNzYWdlIG9mIHRoaXMgdHlwZSBmcm9tIHRoZSBpbnB1dCBhbmQg
bWVyZ2VzIGl0IHdpdGggdGhpcwotLy8vIG1lc3NhZ2UuCi0vLy8KLS8vLyBAbm90ZSBUaGlzIHdp
bGwgdGhyb3cgaWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgZGF0YS4KLS0gKHZvaWQp
bWVyZ2VGcm9tRGF0YTooTlNEYXRhICopZGF0YQotICAgIGV4dGVuc2lvblJlZ2lzdHJ5OihudWxs
YWJsZSBHUEJFeHRlbnNpb25SZWdpc3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5OwotCi0vLy8gTWVy
Z2VzIHRoZSBmaWVsZHMgZnJvbSBhbm90aGVyIG1lc3NhZ2UgKG9mIHRoZSBzYW1lIHR5cGUpIGlu
dG8gdGhpcwotLy8vIG1lc3NhZ2UuCi0tICh2b2lkKW1lcmdlRnJvbTooR1BCTWVzc2FnZSAqKW90
aGVyOwotCi1AZW5kCi0KLU5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3Rp
dmVjL0dQQk1lc3NhZ2UubSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJNZXNzYWdlLm0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDgxMzRlMjU5NjJkY2IyOGMzYjdiNTI1ODE0MmVjMjUxYzA3ODQ4OWYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVj
L0dQQk1lc3NhZ2UubQorKysgL2Rldi9udWxsCkBAIC0xLDMxODQgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbXBvcnQgIkdQQk1lc3NhZ2VfUGFja2FnZVBy
aXZhdGUuaCIKLQotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDxvYmpjL21lc3Nh
Z2UuaD4KLQotI2ltcG9ydCAiR1BCQXJyYXlfUGFja2FnZVByaXZhdGUuaCIKLSNpbXBvcnQgIkdQ
QkNvZGVkSW5wdXRTdHJlYW1fUGFja2FnZVByaXZhdGUuaCIKLSNpbXBvcnQgIkdQQkNvZGVkT3V0
cHV0U3RyZWFtX1BhY2thZ2VQcml2YXRlLmgiCi0jaW1wb3J0ICJHUEJEZXNjcmlwdG9yX1BhY2th
Z2VQcml2YXRlLmgiCi0jaW1wb3J0ICJHUEJEaWN0aW9uYXJ5X1BhY2thZ2VQcml2YXRlLmgiCi0j
aW1wb3J0ICJHUEJFeHRlbnNpb25JbnRlcm5hbHMuaCIKLSNpbXBvcnQgIkdQQkV4dGVuc2lvblJl
Z2lzdHJ5LmgiCi0jaW1wb3J0ICJHUEJSb290T2JqZWN0X1BhY2thZ2VQcml2YXRlLmgiCi0jaW1w
b3J0ICJHUEJVbmtub3duRmllbGRTZXRfUGFja2FnZVByaXZhdGUuaCIKLSNpbXBvcnQgIkdQQlV0
aWxpdGllc19QYWNrYWdlUHJpdmF0ZS5oIgotCi1OU1N0cmluZyAqY29uc3QgR1BCTWVzc2FnZUVy
cm9yRG9tYWluID0KLSAgICBHUEJOU1N0cmluZ2lmeVN5bWJvbChHUEJNZXNzYWdlRXJyb3JEb21h
aW4pOwotCi0jaWZkZWYgREVCVUcKLU5TU3RyaW5nICpjb25zdCBHUEJFeGNlcHRpb25NZXNzYWdl
S2V5ID0KLSAgICBHUEJOU1N0cmluZ2lmeVN5bWJvbChHUEJFeGNlcHRpb25NZXNzYWdlKTsKLSNl
bmRpZiAgLy8gREVCVUcKLQotc3RhdGljIE5TU3RyaW5nICpjb25zdCBrR1BCRGF0YUNvZGVyS2V5
ID0gQCJHUEJEYXRhIjsKLQotLy8KLS8vIFBMRUFTRSBSRU1FTUJFUjoKLS8vCi0vLyBUaGlzIGlz
IHRoZSBiYXNlIGNsYXNzIGZvciAqYWxsKiBtZXNzYWdlcyBnZW5lcmF0ZWQsIHNvIGFueSBzZWxl
Y3RvciBkZWZpbmVkLAotLy8gKnB1YmxpYyogb3IgKnByaXZhdGUqIGNvdWxkIGVuZCB1cCBjb2xs
aWRpbmcgd2l0aCBhIHByb3RvIG1lc3NhZ2UgZmllbGQuIFNvCi0vLyBhdm9pZCB1c2luZyBzZWxl
Y3RvcnMgdGhhdCBjb3VsZCBtYXRjaCBhIHByb3BlcnR5LCB1c2UgQyBmdW5jdGlvbnMgdG8gaGlk
ZQotLy8gdGhlbSwgZXRjLgotLy8KLQotQGludGVyZmFjZSBHUEJNZXNzYWdlICgpIHsKLSBAcGFj
a2FnZQotICBHUEJVbmtub3duRmllbGRTZXQgKnVua25vd25GaWVsZHNfOwotICBOU011dGFibGVE
aWN0aW9uYXJ5ICpleHRlbnNpb25NYXBfOwotICBOU011dGFibGVEaWN0aW9uYXJ5ICphdXRvY3Jl
YXRlZEV4dGVuc2lvbk1hcF87Ci0KLSAgLy8gSWYgdGhlIG9iamVjdCB3YXMgYXV0b2NyZWF0ZWQs
IHdlIHJlbWVtYmVyIHRoZSBjcmVhdG9yIHNvIHRoYXQgaWYgd2UgZ2V0Ci0gIC8vIG11dGF0ZWQs
IHdlIGNhbiBpbmZvcm0gdGhlIGNyZWF0b3IgdG8gbWFrZSBvdXIgZmllbGQgdmlzaWJsZS4KLSAg
R1BCTWVzc2FnZSAqYXV0b2NyZWF0b3JfOwotICBHUEJGaWVsZERlc2NyaXB0b3IgKmF1dG9jcmVh
dG9yRmllbGRfOwotICBHUEJFeHRlbnNpb25EZXNjcmlwdG9yICphdXRvY3JlYXRvckV4dGVuc2lv
bl87Ci19Ci1AZW5kCi0KLXN0YXRpYyBpZCBDcmVhdGVBcnJheUZvckZpZWxkKEdQQkZpZWxkRGVz
Y3JpcHRvciAqZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJNZXNzYWdl
ICphdXRvY3JlYXRvcikKLSAgICBfX2F0dHJpYnV0ZV9fKChuc19yZXR1cm5zX3JldGFpbmVkKSk7
Ci1zdGF0aWMgaWQgR2V0T3JDcmVhdGVBcnJheUl2YXJXaXRoRmllbGQoR1BCTWVzc2FnZSAqc2Vs
ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2Ny
aXB0b3IgKmZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQ
QkZpbGVTeW50YXggc3ludGF4KTsKLXN0YXRpYyBpZCBHZXRBcnJheUl2YXJXaXRoRmllbGQoR1BC
TWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCk7Ci1zdGF0aWMgaWQgQ3Jl
YXRlTWFwRm9yRmllbGQoR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHUEJNZXNzYWdlICphdXRvY3JlYXRvcikKLSAgICBfX2F0dHJpYnV0ZV9f
KChuc19yZXR1cm5zX3JldGFpbmVkKSk7Ci1zdGF0aWMgaWQgR2V0T3JDcmVhdGVNYXBJdmFyV2l0
aEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdQQkZpbGVTeW50YXggc3ludGF4KTsKLXN0YXRpYyBpZCBHZXRNYXBJ
dmFyV2l0aEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQp
Owotc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKkNsb25lRXh0ZW5zaW9uTWFwKE5TRGljdGlv
bmFyeSAqZXh0ZW5zaW9uTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5TWm9uZSAqem9uZSkKLSAgICBfX2F0dHJpYnV0ZV9fKChuc19yZXR1cm5zX3Jl
dGFpbmVkKSk7Ci0KLXN0YXRpYyBOU0Vycm9yICpNZXNzYWdlRXJyb3IoTlNJbnRlZ2VyIGNvZGUs
IE5TRGljdGlvbmFyeSAqdXNlckluZm8pIHsKLSAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERv
bWFpbjpHUEJNZXNzYWdlRXJyb3JEb21haW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZTpjb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86dXNlckluZm9dOwot
fQotCi1zdGF0aWMgTlNFcnJvciAqTWVzc2FnZUVycm9yV2l0aFJlYXNvbihOU0ludGVnZXIgY29k
ZSwgTlNTdHJpbmcgKnJlYXNvbikgewotICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gbmlsOwot
ICBpZiAoW3JlYXNvbiBsZW5ndGhdKSB7Ci0gICAgdXNlckluZm8gPSBAeyBAIlJlYXNvbiIgOiBy
ZWFzb24gfTsKLSAgfQotICByZXR1cm4gTWVzc2FnZUVycm9yKGNvZGUsIHVzZXJJbmZvKTsKLX0K
LQotCi1zdGF0aWMgdm9pZCBDaGVja0V4dGVuc2lvbihHUEJNZXNzYWdlICpzZWxmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciAqZXh0ZW5zaW9uKSB7
Ci0gIGlmIChbc2VsZiBjbGFzc10gIT0gZXh0ZW5zaW9uLmNvbnRhaW5pbmdNZXNzYWdlQ2xhc3Mp
IHsKLSAgICBbTlNFeGNlcHRpb24KLSAgICAgICAgIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhj
ZXB0aW9uCi0gICAgICAgIGZvcm1hdDpAIkV4dGVuc2lvbiAlQCB1c2VkIG9uIHdyb25nIGNsYXNz
ICglQCBpbnN0ZWFkIG9mICVAKSIsCi0gICAgICAgICAgICAgICBleHRlbnNpb24uc2luZ2xldG9u
TmFtZSwKLSAgICAgICAgICAgICAgIFtzZWxmIGNsYXNzXSwgZXh0ZW5zaW9uLmNvbnRhaW5pbmdN
ZXNzYWdlQ2xhc3NdOwotICB9Ci19Ci0KLXN0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpDbG9u
ZUV4dGVuc2lvbk1hcChOU0RpY3Rpb25hcnkgKmV4dGVuc2lvbk1hcCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1pvbmUgKnpvbmUpIHsKLSAgaWYgKGV4
dGVuc2lvbk1hcC5jb3VudCA9PSAwKSB7Ci0gICAgcmV0dXJuIG5pbDsKLSAgfQotICBOU011dGFi
bGVEaWN0aW9uYXJ5ICpyZXN1bHQgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NXaXRoWm9u
ZTp6b25lXQotICAgICAgaW5pdFdpdGhDYXBhY2l0eTpleHRlbnNpb25NYXAuY291bnRdOwotCi0g
IGZvciAoR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciAqZXh0ZW5zaW9uIGluIGV4dGVuc2lvbk1hcCkg
ewotICAgIGlkIHZhbHVlID0gW2V4dGVuc2lvbk1hcCBvYmplY3RGb3JLZXk6ZXh0ZW5zaW9uXTsK
LSAgICBCT09MIGlzTWVzc2FnZUV4dGVuc2lvbiA9IEdQQkV4dGVuc2lvbklzTWVzc2FnZShleHRl
bnNpb24pOwotCi0gICAgaWYgKGV4dGVuc2lvbi5yZXBlYXRlZCkgewotICAgICAgaWYgKGlzTWVz
c2FnZUV4dGVuc2lvbikgewotICAgICAgICBOU011dGFibGVBcnJheSAqbGlzdCA9Ci0gICAgICAg
ICAgICBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Olt2YWx1ZSBjb3Vu
dF1dOwotICAgICAgICBmb3IgKEdQQk1lc3NhZ2UgKmxpc3RWYWx1ZSBpbiB2YWx1ZSkgewotICAg
ICAgICAgIEdQQk1lc3NhZ2UgKmNvcGllZFZhbHVlID0gW2xpc3RWYWx1ZSBjb3B5V2l0aFpvbmU6
em9uZV07Ci0gICAgICAgICAgW2xpc3QgYWRkT2JqZWN0OmNvcGllZFZhbHVlXTsKLSAgICAgICAg
ICBbY29waWVkVmFsdWUgcmVsZWFzZV07Ci0gICAgICAgIH0KLSAgICAgICAgW3Jlc3VsdCBzZXRP
YmplY3Q6bGlzdCBmb3JLZXk6ZXh0ZW5zaW9uXTsKLSAgICAgICAgW2xpc3QgcmVsZWFzZV07Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICBOU011dGFibGVBcnJheSAqY29waWVkVmFsdWUgPSBbdmFs
dWUgbXV0YWJsZUNvcHlXaXRoWm9uZTp6b25lXTsKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6
Y29waWVkVmFsdWUgZm9yS2V5OmV4dGVuc2lvbl07Ci0gICAgICAgIFtjb3BpZWRWYWx1ZSByZWxl
YXNlXTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKGlzTWVzc2FnZUV4dGVuc2lv
bikgewotICAgICAgICBHUEJNZXNzYWdlICpjb3BpZWRWYWx1ZSA9IFt2YWx1ZSBjb3B5V2l0aFpv
bmU6em9uZV07Ci0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OmNvcGllZFZhbHVlIGZvcktleTpl
eHRlbnNpb25dOwotICAgICAgICBbY29waWVkVmFsdWUgcmVsZWFzZV07Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBbcmVzdWx0IHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6ZXh0ZW5zaW9uXTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaWQgQ3Jl
YXRlQXJyYXlGb3JGaWVsZChHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1BCTWVzc2FnZSAqYXV0b2NyZWF0b3IpIHsKLSAgaWQgcmVzdWx0
OwotICBHUEJEYXRhVHlwZSBmaWVsZERhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVs
ZCk7Ci0gIHN3aXRjaCAoZmllbGREYXRhVHlwZSkgewotICAgIGNhc2UgR1BCRGF0YVR5cGVCb29s
OgotICAgICAgcmVzdWx0ID0gW1tHUEJCb29sQXJyYXkgYWxsb2NdIGluaXRdOwotICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZUZpeGVkMzI6Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVVJ
bnQzMjoKLSAgICAgIHJlc3VsdCA9IFtbR1BCVUludDMyQXJyYXkgYWxsb2NdIGluaXRdOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZUludDMyOgotICAgIGNhc2UgR1BCRGF0YVR5
cGVTRml4ZWQzMjoKLSAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDMyOgotICAgICAgcmVzdWx0ID0g
W1tHUEJJbnQzMkFycmF5IGFsbG9jXSBpbml0XTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1BC
RGF0YVR5cGVGaXhlZDY0OgotICAgIGNhc2UgR1BCRGF0YVR5cGVVSW50NjQ6Ci0gICAgICByZXN1
bHQgPSBbW0dQQlVJbnQ2NEFycmF5IGFsbG9jXSBpbml0XTsKLSAgICAgIGJyZWFrOwotICAgIGNh
c2UgR1BCRGF0YVR5cGVJbnQ2NDoKLSAgICBjYXNlIEdQQkRhdGFUeXBlU0ZpeGVkNjQ6Ci0gICAg
Y2FzZSBHUEJEYXRhVHlwZVNJbnQ2NDoKLSAgICAgIHJlc3VsdCA9IFtbR1BCSW50NjRBcnJheSBh
bGxvY10gaW5pdF07Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdQQkRhdGFUeXBlRmxvYXQ6Ci0g
ICAgICByZXN1bHQgPSBbW0dQQkZsb2F0QXJyYXkgYWxsb2NdIGluaXRdOwotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHUEJEYXRhVHlwZURvdWJsZToKLSAgICAgIHJlc3VsdCA9IFtbR1BCRG91Ymxl
QXJyYXkgYWxsb2NdIGluaXRdOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdQQkRhdGFUeXBl
RW51bToKLSAgICAgIHJlc3VsdCA9IFtbR1BCRW51bUFycmF5IGFsbG9jXQotICAgICAgICAgICAg
ICAgICAgaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZmllbGQuZW51bURlc2NyaXB0b3IuZW51
bVZlcmlmaWVyXTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHUEJEYXRhVHlwZUJ5dGVzOgot
ICAgIGNhc2UgR1BCRGF0YVR5cGVHcm91cDoKLSAgICBjYXNlIEdQQkRhdGFUeXBlTWVzc2FnZToK
LSAgICBjYXNlIEdQQkRhdGFUeXBlU3RyaW5nOgotICAgICAgaWYgKGF1dG9jcmVhdG9yKSB7Ci0g
ICAgICAgIHJlc3VsdCA9IFtbR1BCQXV0b2NyZWF0ZWRBcnJheSBhbGxvY10gaW5pdF07Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKGF1dG9jcmVhdG9yKSB7Ci0g
ICAgaWYgKEdQQkRhdGFUeXBlSXNPYmplY3QoZmllbGREYXRhVHlwZSkpIHsKLSAgICAgIEdQQkF1
dG9jcmVhdGVkQXJyYXkgKmF1dG9BcnJheSA9IHJlc3VsdDsKLSAgICAgIGF1dG9BcnJheS0+X2F1
dG9jcmVhdG9yID0gIGF1dG9jcmVhdG9yOwotICAgIH0gZWxzZSB7Ci0gICAgICBHUEJJbnQzMkFy
cmF5ICpncGJBcnJheSA9IHJlc3VsdDsKLSAgICAgIGdwYkFycmF5LT5fYXV0b2NyZWF0b3IgPSBh
dXRvY3JlYXRvcjsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMg
aWQgQ3JlYXRlTWFwRm9yRmllbGQoR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHUEJNZXNzYWdlICphdXRvY3JlYXRvcikgewotICBpZCByZXN1
bHQ7Ci0gIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0g
IEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkKTsK
LSAgc3dpdGNoIChrZXlEYXRhVHlwZSkgewotICAgIGNhc2UgR1BCRGF0YVR5cGVCb29sOgotICAg
ICAgc3dpdGNoICh2YWx1ZURhdGFUeXBlKSB7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVCb29s
OgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCQm9vbEJvb2xEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUZpeGVkMzI6Ci0g
ICAgICAgIGNhc2UgR1BCRGF0YVR5cGVVSW50MzI6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJC
b29sVUludDMyRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR1BCRGF0YVR5cGVJbnQzMjoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVNGaXhl
ZDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDMyOgotICAgICAgICAgIHJlc3VsdCA9
IFtbR1BCQm9vbEludDMyRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVGaXhlZDY0OgotICAgICAgICBjYXNlIEdQQkRhdGFU
eXBlVUludDY0OgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCQm9vbFVJbnQ2NERpY3Rpb25hcnkg
YWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQQkRhdGFUeXBl
SW50NjQ6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4ZWQ2NDoKLSAgICAgICAgY2FzZSBH
UEJEYXRhVHlwZVNJbnQ2NDoKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQkJvb2xJbnQ2NERpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQQkRh
dGFUeXBlRmxvYXQ6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJCb29sRmxvYXREaWN0aW9uYXJ5
IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlw
ZURvdWJsZToKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQkJvb2xEb3VibGVEaWN0aW9uYXJ5IGFs
bG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUVu
dW06Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJCb29sRW51bURpY3Rpb25hcnkgYWxsb2NdCi0g
ICAgICAgICAgICAgIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZpZWxkLmVudW1EZXNjcmlw
dG9yLmVudW1WZXJpZmllcl07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0
YVR5cGVCeXRlczoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZU1lc3NhZ2U6Ci0gICAgICAgIGNh
c2UgR1BCRGF0YVR5cGVTdHJpbmc6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJCb29sT2JqZWN0
RGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R1BCRGF0YVR5cGVHcm91cDoKLSAgICAgICAgICBOU0NBc3NlcnQoTk8sIEAic2hvdWxkbid0IGhh
cHBlbiIpOwotICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAg
ICBjYXNlIEdQQkRhdGFUeXBlRml4ZWQzMjoKLSAgICBjYXNlIEdQQkRhdGFUeXBlVUludDMyOgot
ICAgICAgc3dpdGNoICh2YWx1ZURhdGFUeXBlKSB7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVC
b29sOgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCVUludDMyQm9vbERpY3Rpb25hcnkgYWxsb2Nd
IGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlRml4ZWQz
MjoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVVJbnQzMjoKLSAgICAgICAgICByZXN1bHQgPSBb
W0dQQlVJbnQzMlVJbnQzMkRpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlSW50MzI6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5
cGVTRml4ZWQzMjoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVNJbnQzMjoKLSAgICAgICAgICBy
ZXN1bHQgPSBbW0dQQlVJbnQzMkludDMyRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVGaXhlZDY0OgotICAgICAgICBjYXNl
IEdQQkRhdGFUeXBlVUludDY0OgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCVUludDMyVUludDY0
RGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R1BCRGF0YVR5cGVJbnQ2NDoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVNGaXhlZDY0OgotICAg
ICAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDY0OgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCVUlu
dDMySW50NjREaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHUEJEYXRhVHlwZUZsb2F0OgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCVUludDMy
RmxvYXREaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHUEJEYXRhVHlwZURvdWJsZToKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQlVJbnQzMkRv
dWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdQQkRhdGFUeXBlRW51bToKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQlVJbnQzMkVudW1E
aWN0aW9uYXJ5IGFsbG9jXQotICAgICAgICAgICAgICBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlv
bjpmaWVsZC5lbnVtRGVzY3JpcHRvci5lbnVtVmVyaWZpZXJdOwotICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdQQkRhdGFUeXBlQnl0ZXM6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVN
ZXNzYWdlOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlU3RyaW5nOgotICAgICAgICAgIHJlc3Vs
dCA9IFtbR1BCVUludDMyT2JqZWN0RGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVHcm91cDoKLSAgICAgICAgICBOU0NBc3Nl
cnQoTk8sIEAic2hvdWxkbid0IGhhcHBlbiIpOwotICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
ICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdQQkRhdGFUeXBlSW50MzI6Ci0gICAgY2FzZSBH
UEJEYXRhVHlwZVNGaXhlZDMyOgotICAgIGNhc2UgR1BCRGF0YVR5cGVTSW50MzI6Ci0gICAgICBz
d2l0Y2ggKHZhbHVlRGF0YVR5cGUpIHsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUJvb2w6Ci0g
ICAgICAgICAgcmVzdWx0ID0gW1tHUEJJbnQzMkJvb2xEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsK
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUZpeGVkMzI6Ci0gICAg
ICAgIGNhc2UgR1BCRGF0YVR5cGVVSW50MzI6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJJbnQz
MlVJbnQzMkRpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdQQkRhdGFUeXBlSW50MzI6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4ZWQz
MjoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVNJbnQzMjoKLSAgICAgICAgICByZXN1bHQgPSBb
W0dQQkludDMySW50MzJEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUZpeGVkNjQ6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5
cGVVSW50NjQ6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJJbnQzMlVJbnQ2NERpY3Rpb25hcnkg
YWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQQkRhdGFUeXBl
SW50NjQ6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4ZWQ2NDoKLSAgICAgICAgY2FzZSBH
UEJEYXRhVHlwZVNJbnQ2NDoKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQkludDMySW50NjREaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJE
YXRhVHlwZUZsb2F0OgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCSW50MzJGbG9hdERpY3Rpb25h
cnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQQkRhdGFU
eXBlRG91YmxlOgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCSW50MzJEb3VibGVEaWN0aW9uYXJ5
IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlw
ZUVudW06Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJJbnQzMkVudW1EaWN0aW9uYXJ5IGFsbG9j
XQotICAgICAgICAgICAgICBpbml0V2l0aFZhbGlkYXRpb25GdW5jdGlvbjpmaWVsZC5lbnVtRGVz
Y3JpcHRvci5lbnVtVmVyaWZpZXJdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQ
QkRhdGFUeXBlQnl0ZXM6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVNZXNzYWdlOgotICAgICAg
ICBjYXNlIEdQQkRhdGFUeXBlU3RyaW5nOgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCSW50MzJP
YmplY3REaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHUEJEYXRhVHlwZUdyb3VwOgotICAgICAgICAgIE5TQ0Fzc2VydChOTywgQCJzaG91bGRu
J3QgaGFwcGVuIik7Ci0gICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgIH0KLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgR1BCRGF0YVR5cGVGaXhlZDY0OgotICAgIGNhc2UgR1BCRGF0YVR5cGVVSW50
NjQ6Ci0gICAgICBzd2l0Y2ggKHZhbHVlRGF0YVR5cGUpIHsKLSAgICAgICAgY2FzZSBHUEJEYXRh
VHlwZUJvb2w6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJVSW50NjRCb29sRGljdGlvbmFyeSBh
bGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVG
aXhlZDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlVUludDMyOgotICAgICAgICAgIHJlc3Vs
dCA9IFtbR1BCVUludDY0VUludDMyRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVJbnQzMjoKLSAgICAgICAgY2FzZSBHUEJE
YXRhVHlwZVNGaXhlZDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDMyOgotICAgICAg
ICAgIHJlc3VsdCA9IFtbR1BCVUludDY0SW50MzJEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUZpeGVkNjQ6Ci0gICAgICAg
IGNhc2UgR1BCRGF0YVR5cGVVSW50NjQ6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJVSW50NjRV
SW50NjREaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHUEJEYXRhVHlwZUludDY0OgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlU0ZpeGVkNjQ6
Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTSW50NjQ6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tH
UEJVSW50NjRJbnQ2NERpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdQQkRhdGFUeXBlRmxvYXQ6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJV
SW50NjRGbG9hdERpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdQQkRhdGFUeXBlRG91YmxlOgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCVUlu
dDY0RG91YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR1BCRGF0YVR5cGVFbnVtOgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCVUludDY0
RW51bURpY3Rpb25hcnkgYWxsb2NdCi0gICAgICAgICAgICAgIGluaXRXaXRoVmFsaWRhdGlvbkZ1
bmN0aW9uOmZpZWxkLmVudW1EZXNjcmlwdG9yLmVudW1WZXJpZmllcl07Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVCeXRlczoKLSAgICAgICAgY2FzZSBHUEJEYXRh
VHlwZU1lc3NhZ2U6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTdHJpbmc6Ci0gICAgICAgICAg
cmVzdWx0ID0gW1tHUEJVSW50NjRPYmplY3REaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUdyb3VwOgotICAgICAgICAgIE5T
Q0Fzc2VydChOTywgQCJzaG91bGRuJ3QgaGFwcGVuIik7Ci0gICAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1BCRGF0YVR5cGVJbnQ2NDoKLSAgICBj
YXNlIEdQQkRhdGFUeXBlU0ZpeGVkNjQ6Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVNJbnQ2NDoKLSAg
ICAgIHN3aXRjaCAodmFsdWVEYXRhVHlwZSkgewotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlQm9v
bDoKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQkludDY0Qm9vbERpY3Rpb25hcnkgYWxsb2NdIGlu
aXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlRml4ZWQzMjoK
LSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVVJbnQzMjoKLSAgICAgICAgICByZXN1bHQgPSBbW0dQ
QkludDY0VUludDMyRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR1BCRGF0YVR5cGVJbnQzMjoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVNG
aXhlZDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDMyOgotICAgICAgICAgIHJlc3Vs
dCA9IFtbR1BCSW50NjRJbnQzMkRpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlRml4ZWQ2NDoKLSAgICAgICAgY2FzZSBHUEJE
YXRhVHlwZVVJbnQ2NDoKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQkludDY0VUludDY0RGljdGlv
bmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0
YVR5cGVJbnQ2NDoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVNGaXhlZDY0OgotICAgICAgICBj
YXNlIEdQQkRhdGFUeXBlU0ludDY0OgotICAgICAgICAgIHJlc3VsdCA9IFtbR1BCSW50NjRJbnQ2
NERpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdQQkRhdGFUeXBlRmxvYXQ6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJJbnQ2NEZsb2F0RGlj
dGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1BC
RGF0YVR5cGVEb3VibGU6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJJbnQ2NERvdWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQQkRh
dGFUeXBlRW51bToKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQkludDY0RW51bURpY3Rpb25hcnkg
YWxsb2NdCi0gICAgICAgICAgICAgIGluaXRXaXRoVmFsaWRhdGlvbkZ1bmN0aW9uOmZpZWxkLmVu
dW1EZXNjcmlwdG9yLmVudW1WZXJpZmllcl07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR1BCRGF0YVR5cGVCeXRlczoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZU1lc3NhZ2U6Ci0g
ICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTdHJpbmc6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJJ
bnQ2NE9iamVjdERpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdQQkRhdGFUeXBlR3JvdXA6Ci0gICAgICAgICAgTlNDQXNzZXJ0KE5PLCBAInNo
b3VsZG4ndCBoYXBwZW4iKTsKLSAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgfQotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVN0cmluZzoKLSAgICAgIHN3aXRjaCAodmFsdWVE
YXRhVHlwZSkgewotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlQm9vbDoKLSAgICAgICAgICByZXN1
bHQgPSBbW0dQQlN0cmluZ0Jvb2xEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUZpeGVkMzI6Ci0gICAgICAgIGNhc2UgR1BC
RGF0YVR5cGVVSW50MzI6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJTdHJpbmdVSW50MzJEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJE
YXRhVHlwZUludDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlU0ZpeGVkMzI6Ci0gICAgICAg
IGNhc2UgR1BCRGF0YVR5cGVTSW50MzI6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJTdHJpbmdJ
bnQzMkRpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdQQkRhdGFUeXBlRml4ZWQ2NDoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVVJbnQ2NDoK
LSAgICAgICAgICByZXN1bHQgPSBbW0dQQlN0cmluZ1VJbnQ2NERpY3Rpb25hcnkgYWxsb2NdIGlu
aXRdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlSW50NjQ6Ci0g
ICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4ZWQ2NDoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlw
ZVNJbnQ2NDoKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQlN0cmluZ0ludDY0RGljdGlvbmFyeSBh
bGxvY10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVG
bG9hdDoKLSAgICAgICAgICByZXN1bHQgPSBbW0dQQlN0cmluZ0Zsb2F0RGljdGlvbmFyeSBhbGxv
Y10gaW5pdF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVEb3Vi
bGU6Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJTdHJpbmdEb3VibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUVudW06
Ci0gICAgICAgICAgcmVzdWx0ID0gW1tHUEJTdHJpbmdFbnVtRGljdGlvbmFyeSBhbGxvY10KLSAg
ICAgICAgICAgICAgaW5pdFdpdGhWYWxpZGF0aW9uRnVuY3Rpb246ZmllbGQuZW51bURlc2NyaXB0
b3IuZW51bVZlcmlmaWVyXTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRh
VHlwZUJ5dGVzOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlTWVzc2FnZToKLSAgICAgICAgY2Fz
ZSBHUEJEYXRhVHlwZVN0cmluZzoKLSAgICAgICAgICBpZiAoYXV0b2NyZWF0b3IpIHsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IFtbR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsK
LSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR1BCRGF0YVR5cGVHcm91cDoKLSAgICAgICAgICBOU0NBc3NlcnQoTk8sIEAic2hv
dWxkbid0IGhhcHBlbiIpOwotICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICB9Ci0gICAgICBi
cmVhazsKLQotICAgIGNhc2UgR1BCRGF0YVR5cGVGbG9hdDoKLSAgICBjYXNlIEdQQkRhdGFUeXBl
RG91YmxlOgotICAgIGNhc2UgR1BCRGF0YVR5cGVFbnVtOgotICAgIGNhc2UgR1BCRGF0YVR5cGVC
eXRlczoKLSAgICBjYXNlIEdQQkRhdGFUeXBlR3JvdXA6Ci0gICAgY2FzZSBHUEJEYXRhVHlwZU1l
c3NhZ2U6Ci0gICAgICBOU0NBc3NlcnQoTk8sIEAic2hvdWxkbid0IGhhcHBlbiIpOwotICAgICAg
cmV0dXJuIG5pbDsKLSAgfQotCi0gIGlmIChhdXRvY3JlYXRvcikgewotICAgIGlmICgoa2V5RGF0
YVR5cGUgPT0gR1BCRGF0YVR5cGVTdHJpbmcpICYmCi0gICAgICAgIEdQQkRhdGFUeXBlSXNPYmpl
Y3QodmFsdWVEYXRhVHlwZSkpIHsKLSAgICAgIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeSAqYXV0
b0RpY3QgPSByZXN1bHQ7Ci0gICAgICBhdXRvRGljdC0+X2F1dG9jcmVhdG9yID0gIGF1dG9jcmVh
dG9yOwotICAgIH0gZWxzZSB7Ci0gICAgICBHUEJJbnQzMkludDMyRGljdGlvbmFyeSAqZ3BiRGlj
dCA9IHJlc3VsdDsKLSAgICAgIGdwYkRpY3QtPl9hdXRvY3JlYXRvciA9IGF1dG9jcmVhdG9yOwot
ICAgIH0KLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNpZiAhZGVmaW5lZChfX2NsYW5n
X2FuYWx5emVyX18pCi0vLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGJsb2NrZWQgZnJvbSB0aGUgYW5h
bHl6ZXIgYmVjYXVzZSB0aGUgYW5hbHl6ZXIgc2VlcyB0aGUKLS8vIEdQQlNldFJldGFpbmVkT2Jq
ZWN0SXZhcldpdGhGaWVsZEludGVybmFsKCkgY2FsbCBhcyBjb25zdW1pbmcgdGhlIGFycmF5L21h
cCwKLS8vIHNvIHVzZSBvZiB0aGUgYXJyYXkvbWFwIGFmdGVyIHRoZSBjYWxsIHJldHVybnMgaXMg
ZmxhZ2dlZCBhcyBhIHVzZSBhZnRlcgotLy8gZnJlZS4KLS8vIEJ1dCBHUEJTZXRSZXRhaW5lZE9i
amVjdEl2YXJXaXRoRmllbGRJbnRlcm5hbCgpIGlzICJjb25zdW1pbmciIHRoZSByZXRhaW4KLS8v
IGNvdW50IGJlIGhvbGRpbmcgb250byB0aGUgb2JqZWN0IChpdCBpcyB0cmFuc2ZlcmluZyBpdCks
IHRoZSBvYmplY3QgaXMKLS8vIHN0aWxsIHZhbGlkIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSBj
YWxsLiAgVGhlIG90aGVyIHdheSB0byBhdm9pZCB0aGlzCi0vLyB3b3VsZCBiZSB0byBhZGQgYSAt
cmV0YWluLy1hdXRvcmVsZWFzZSwgYnV0IHRoYXQgd291bGQgZm9yY2UgZXZlcnkKLS8vIHJlcGVh
dGVkL21hcCBmaWVsZCBwYXJzZWQgaW50byB0aGUgYXV0b3JlbGVhc2UgcG9vbCB3aGljaCBpcyBi
b3RoIGEgbWVtb3J5Ci0vLyBhbmQgcGVyZm9ybWFuY2UgaGl0LgotCi1zdGF0aWMgaWQgR2V0T3JD
cmVhdGVBcnJheUl2YXJXaXRoRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZpbGVTeW50YXggc3ludGF4
KSB7Ci0gIGlkIGFycmF5ID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShz
ZWxmLCBmaWVsZCk7Ci0gIGlmICghYXJyYXkpIHsKLSAgICAvLyBObyBsb2NrIG5lZWRlZCwgdGhp
cyBpcyBjYWxsZWQgZnJvbSBwbGFjZXMgZXhwZWN0aW5nIHRvIG11dGF0ZQotICAgIC8vIHNvIG5v
IHRocmVhZGluZyBwcm90ZWN0aW9uIGlzIG5lZWRlZC4KLSAgICBhcnJheSA9IENyZWF0ZUFycmF5
Rm9yRmllbGQoZmllbGQsIG5pbCk7Ci0gICAgR1BCU2V0UmV0YWluZWRPYmplY3RJdmFyV2l0aEZp
ZWxkSW50ZXJuYWwoc2VsZiwgZmllbGQsIGFycmF5LCBzeW50YXgpOwotICB9Ci0gIHJldHVybiBh
cnJheTsKLX0KLQotLy8gVGhpcyBpcyBsaWtlIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGQoKSwg
YnV0IGZvciBhcnJheXMsIGl0IHNob3VsZAotLy8gb25seSBiZSB1c2VkIHRvIHdpcmUgdGhlIG1l
dGhvZCBpbnRvIHRoZSBjbGFzcy4KLXN0YXRpYyBpZCBHZXRBcnJheUl2YXJXaXRoRmllbGQoR1BC
TWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICBpZCBhcnJheSA9
IEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICBp
ZiAoIWFycmF5KSB7Ci0gICAgLy8gQ2hlY2sgYWdhaW4gYWZ0ZXIgZ2V0dGluZyB0aGUgbG9jay4K
LSAgICBHUEJQcmVwYXJlUmVhZE9ubHlTZW1hcGhvcmUoc2VsZik7Ci0gICAgZGlzcGF0Y2hfc2Vt
YXBob3JlX3dhaXQoc2VsZi0+cmVhZE9ubHlTZW1hcGhvcmVfLCBESVNQQVRDSF9USU1FX0ZPUkVW
RVIpOwotICAgIGFycmF5ID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShz
ZWxmLCBmaWVsZCk7Ci0gICAgaWYgKCFhcnJheSkgewotICAgICAgYXJyYXkgPSBDcmVhdGVBcnJh
eUZvckZpZWxkKGZpZWxkLCBzZWxmKTsKLSAgICAgIEdQQlNldEF1dG9jcmVhdGVkUmV0YWluZWRP
YmplY3RJdmFyV2l0aEZpZWxkKHNlbGYsIGZpZWxkLCBhcnJheSk7Ci0gICAgfQotICAgIGRpc3Bh
dGNoX3NlbWFwaG9yZV9zaWduYWwoc2VsZi0+cmVhZE9ubHlTZW1hcGhvcmVfKTsKLSAgfQotICBy
ZXR1cm4gYXJyYXk7Ci19Ci0KLXN0YXRpYyBpZCBHZXRPckNyZWF0ZU1hcEl2YXJXaXRoRmllbGQo
R1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1BCRmlsZVN5bnRheCBzeW50YXgpIHsKLSAgaWQgZGljdCA9IEdQQkdldE9iamVj
dEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICBpZiAoIWRpY3QpIHsK
LSAgICAvLyBObyBsb2NrIG5lZWRlZCwgdGhpcyBpcyBjYWxsZWQgZnJvbSBwbGFjZXMgZXhwZWN0
aW5nIHRvIG11dGF0ZQotICAgIC8vIHNvIG5vIHRocmVhZGluZyBwcm90ZWN0aW9uIGlzIG5lZWRl
ZC4KLSAgICBkaWN0ID0gQ3JlYXRlTWFwRm9yRmllbGQoZmllbGQsIG5pbCk7Ci0gICAgR1BCU2V0
UmV0YWluZWRPYmplY3RJdmFyV2l0aEZpZWxkSW50ZXJuYWwoc2VsZiwgZmllbGQsIGRpY3QsIHN5
bnRheCk7Ci0gIH0KLSAgcmV0dXJuIGRpY3Q7Ci19Ci0KLS8vIFRoaXMgaXMgbGlrZSBHUEJHZXRP
YmplY3RJdmFyV2l0aEZpZWxkKCksIGJ1dCBmb3IgbWFwcywgaXQgc2hvdWxkCi0vLyBvbmx5IGJl
IHVzZWQgdG8gd2lyZSB0aGUgbWV0aG9kIGludG8gdGhlIGNsYXNzLgotc3RhdGljIGlkIEdldE1h
cEl2YXJXaXRoRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVs
ZCkgewotICBpZCBkaWN0ID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShz
ZWxmLCBmaWVsZCk7Ci0gIGlmICghZGljdCkgewotICAgIC8vIENoZWNrIGFnYWluIGFmdGVyIGdl
dHRpbmcgdGhlIGxvY2suCi0gICAgR1BCUHJlcGFyZVJlYWRPbmx5U2VtYXBob3JlKHNlbGYpOwot
ICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KHNlbGYtPnJlYWRPbmx5U2VtYXBob3JlXywgRElT
UEFUQ0hfVElNRV9GT1JFVkVSKTsKLSAgICBkaWN0ID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVs
ZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgaWYgKCFkaWN0KSB7Ci0gICAgICBkaWN0
ID0gQ3JlYXRlTWFwRm9yRmllbGQoZmllbGQsIHNlbGYpOwotICAgICAgR1BCU2V0QXV0b2NyZWF0
ZWRSZXRhaW5lZE9iamVjdEl2YXJXaXRoRmllbGQoc2VsZiwgZmllbGQsIGRpY3QpOwotICAgIH0K
LSAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKHNlbGYtPnJlYWRPbmx5U2VtYXBob3JlXyk7
Ci0gIH0KLSAgcmV0dXJuIGRpY3Q7Ci19Ci0KLSNlbmRpZiAgLy8gIWRlZmluZWQoX19jbGFuZ19h
bmFseXplcl9fKQotCi1HUEJNZXNzYWdlICpHUEJDcmVhdGVNZXNzYWdlV2l0aEF1dG9jcmVhdG9y
KENsYXNzIG1zZ0NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHUEJNZXNzYWdlICphdXRvY3JlYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICBHUEJNZXNz
YWdlICptZXNzYWdlID0gW1ttc2dDbGFzcyBhbGxvY10gaW5pdF07Ci0gIG1lc3NhZ2UtPmF1dG9j
cmVhdG9yXyA9IGF1dG9jcmVhdG9yOwotICBtZXNzYWdlLT5hdXRvY3JlYXRvckZpZWxkXyA9IFtm
aWVsZCByZXRhaW5dOwotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotc3RhdGljIEdQQk1lc3NhZ2Ug
KkNyZWF0ZU1lc3NhZ2VXaXRoQXV0b2NyZWF0b3JGb3JFeHRlbnNpb24oCi0gICAgQ2xhc3MgbXNn
Q2xhc3MsIEdQQk1lc3NhZ2UgKmF1dG9jcmVhdG9yLCBHUEJFeHRlbnNpb25EZXNjcmlwdG9yICpl
eHRlbnNpb24pCi0gICAgX19hdHRyaWJ1dGVfXygobnNfcmV0dXJuc19yZXRhaW5lZCkpOwotCi1z
dGF0aWMgR1BCTWVzc2FnZSAqQ3JlYXRlTWVzc2FnZVdpdGhBdXRvY3JlYXRvckZvckV4dGVuc2lv
bigKLSAgICBDbGFzcyBtc2dDbGFzcywgR1BCTWVzc2FnZSAqYXV0b2NyZWF0b3IsCi0gICAgR1BC
RXh0ZW5zaW9uRGVzY3JpcHRvciAqZXh0ZW5zaW9uKSB7Ci0gIEdQQk1lc3NhZ2UgKm1lc3NhZ2Ug
PSBbW21zZ0NsYXNzIGFsbG9jXSBpbml0XTsKLSAgbWVzc2FnZS0+YXV0b2NyZWF0b3JfID0gYXV0
b2NyZWF0b3I7Ci0gIG1lc3NhZ2UtPmF1dG9jcmVhdG9yRXh0ZW5zaW9uXyA9IFtleHRlbnNpb24g
cmV0YWluXTsKLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLUJPT0wgR1BCV2FzTWVzc2FnZUF1dG9j
cmVhdGVkQnkoR1BCTWVzc2FnZSAqbWVzc2FnZSwgR1BCTWVzc2FnZSAqcGFyZW50KSB7Ci0gIHJl
dHVybiAobWVzc2FnZS0+YXV0b2NyZWF0b3JfID09IHBhcmVudCk7Ci19Ci0KLXZvaWQgR1BCQmVj
b21lVmlzaWJsZVRvQXV0b2NyZWF0b3IoR1BCTWVzc2FnZSAqc2VsZikgewotICAvLyBNZXNzYWdl
IG9iamVjdHMgdGhhdCBhcmUgaW1wbGljaXRseSBjcmVhdGVkIGJ5IGFjY2Vzc2luZyBhIG1lc3Nh
Z2UgZmllbGQKLSAgLy8gYXJlIGluaXRpYWxseSBub3QgdmlzaWJsZSB2aWEgdGhlIGhhc1ggc2Vs
ZWN0b3IuIFRoaXMgbWV0aG9kIG1ha2VzIHRoZW0KLSAgLy8gdmlzaWJsZS4KLSAgaWYgKHNlbGYt
PmF1dG9jcmVhdG9yXykgewotICAgIC8vIFRoaXMgd2lsbCByZWN1cnNpdmVseSBtYWtlIGFsbCBw
YXJlbnQgbWVzc2FnZXMgdmlzaWJsZSB1bnRpbCBpdCByZWFjaGVzIGEKLSAgICAvLyBzdXBlci1j
cmVhdG9yIHRoYXQncyB2aXNpYmxlLgotICAgIGlmIChzZWxmLT5hdXRvY3JlYXRvckZpZWxkXykg
ewotICAgICAgR1BCRmlsZVN5bnRheCBzeW50YXggPSBbc2VsZi0+YXV0b2NyZWF0b3JfIGRlc2Ny
aXB0b3JdLmZpbGUuc3ludGF4OwotICAgICAgR1BCU2V0T2JqZWN0SXZhcldpdGhGaWVsZEludGVy
bmFsKHNlbGYtPmF1dG9jcmVhdG9yXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLT5hdXRvY3JlYXRvckZpZWxkXywgc2VsZiwgc3ludGF4KTsKLSAgICB9IGVs
c2UgewotICAgICAgW3NlbGYtPmF1dG9jcmVhdG9yXyBzZXRFeHRlbnNpb246c2VsZi0+YXV0b2Ny
ZWF0b3JFeHRlbnNpb25fIHZhbHVlOnNlbGZdOwotICAgIH0KLSAgfQotfQotCi12b2lkIEdQQkF1
dG9jcmVhdGVkQXJyYXlNb2RpZmllZChHUEJNZXNzYWdlICpzZWxmLCBpZCBhcnJheSkgewotICAv
LyBXaGVuIG9uZSBvZiBvdXIgYXV0b2NyZWF0ZWQgYXJyYXlzIGFkZHMgZWxlbWVudHMsIG1ha2Ug
aXQgdmlzaWJsZS4KLSAgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IFtbc2VsZiBjbGFzc10g
ZGVzY3JpcHRvcl07Ci0gIGZvciAoR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCBpbiBkZXNjcmlw
dG9yLT5maWVsZHNfKSB7Ci0gICAgaWYgKGZpZWxkLmZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVS
ZXBlYXRlZCkgewotICAgICAgaWQgY3VyQXJyYXkgPSBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxk
Tm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgIGlmIChjdXJBcnJheSA9PSBhcnJheSkg
ewotICAgICAgICBpZiAoR1BCRmllbGREYXRhVHlwZUlzT2JqZWN0KGZpZWxkKSkgewotICAgICAg
ICAgIEdQQkF1dG9jcmVhdGVkQXJyYXkgKmF1dG9BcnJheSA9IGFycmF5OwotICAgICAgICAgIGF1
dG9BcnJheS0+X2F1dG9jcmVhdG9yID0gbmlsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IEdQQkludDMyQXJyYXkgKmdwYkFycmF5ID0gYXJyYXk7Ci0gICAgICAgICAgZ3BiQXJyYXktPl9h
dXRvY3JlYXRvciA9IG5pbDsKLSAgICAgICAgfQotICAgICAgICBHUEJCZWNvbWVWaXNpYmxlVG9B
dXRvY3JlYXRvcihzZWxmKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgfQot
ICBOU0NBc3NlcnQoTk8sIEAiVW5rbm93biBhdXRvY3JlYXRlZCAlQCBmb3IgJUAuIiwgW2FycmF5
IGNsYXNzXSwgc2VsZik7Ci19Ci0KLXZvaWQgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5TW9kaWZp
ZWQoR1BCTWVzc2FnZSAqc2VsZiwgaWQgZGljdGlvbmFyeSkgewotICAvLyBXaGVuIG9uZSBvZiBv
dXIgYXV0b2NyZWF0ZWQgZGljdHMgYWRkcyBlbGVtZW50cywgbWFrZSBpdCB2aXNpYmxlLgotICBH
UEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gW1tzZWxmIGNsYXNzXSBkZXNjcmlwdG9yXTsKLSAg
Zm9yIChHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkIGluIGRlc2NyaXB0b3ItPmZpZWxkc18pIHsK
LSAgICBpZiAoZmllbGQuZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZU1hcCkgewotICAgICAgaWQg
Y3VyRGljdCA9IEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmll
bGQpOwotICAgICAgaWYgKGN1ckRpY3QgPT0gZGljdGlvbmFyeSkgewotICAgICAgICBpZiAoKGZp
ZWxkLm1hcEtleURhdGFUeXBlID09IEdQQkRhdGFUeXBlU3RyaW5nKSAmJgotICAgICAgICAgICAg
R1BCRmllbGREYXRhVHlwZUlzT2JqZWN0KGZpZWxkKSkgewotICAgICAgICAgIEdQQkF1dG9jcmVh
dGVkRGljdGlvbmFyeSAqYXV0b0RpY3QgPSBkaWN0aW9uYXJ5OwotICAgICAgICAgIGF1dG9EaWN0
LT5fYXV0b2NyZWF0b3IgPSBuaWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1BCSW50
MzJJbnQzMkRpY3Rpb25hcnkgKmdwYkRpY3QgPSBkaWN0aW9uYXJ5OwotICAgICAgICAgIGdwYkRp
Y3QtPl9hdXRvY3JlYXRvciA9IG5pbDsKLSAgICAgICAgfQotICAgICAgICBHUEJCZWNvbWVWaXNp
YmxlVG9BdXRvY3JlYXRvcihzZWxmKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0K
LSAgfQotICBOU0NBc3NlcnQoTk8sIEAiVW5rbm93biBhdXRvY3JlYXRlZCAlQCBmb3IgJUAuIiwg
W2RpY3Rpb25hcnkgY2xhc3NdLCBzZWxmKTsKLX0KLQotdm9pZCBHUEJDbGVhck1lc3NhZ2VBdXRv
Y3JlYXRvcihHUEJNZXNzYWdlICpzZWxmKSB7Ci0gIGlmICgoc2VsZiA9PSBuaWwpIHx8ICFzZWxm
LT5hdXRvY3JlYXRvcl8pIHsKLSAgICByZXR1cm47Ci0gIH0KLQotI2lmIERFQlVHICYmICFkZWZp
bmVkKE5TX0JMT0NLX0FTU0VSVElPTlMpCi0gIC8vIEVpdGhlciB0aGUgYXV0b2NyZWF0b3IgbXVz
dCBoYXZlIGl0cyAiaGFzIiBmbGFnIHNldCB0byBZRVMsIG9yIGl0IG11c3QgYmUKLSAgLy8gTk8g
YW5kIG5vdCBlcXVhbCB0byBvdXJzZWx2ZXMuCi0gIEJPT0wgYXV0b2NyZWF0b3JIYXMgPQotICAg
ICAgKHNlbGYtPmF1dG9jcmVhdG9yRmllbGRfCi0gICAgICAgICAgID8gR1BCR2V0SGFzSXZhckZp
ZWxkKHNlbGYtPmF1dG9jcmVhdG9yXywgc2VsZi0+YXV0b2NyZWF0b3JGaWVsZF8pCi0gICAgICAg
ICAgIDogW3NlbGYtPmF1dG9jcmVhdG9yXyBoYXNFeHRlbnNpb246c2VsZi0+YXV0b2NyZWF0b3JF
eHRlbnNpb25fXSk7Ci0gIEdQQk1lc3NhZ2UgKmF1dG9jcmVhdG9yRmllbGRWYWx1ZSA9Ci0gICAg
ICAoc2VsZi0+YXV0b2NyZWF0b3JGaWVsZF8KLSAgICAgICAgICAgPyBHUEJHZXRPYmplY3RJdmFy
V2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYtPmF1dG9jcmVhdG9yXywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmF1dG9jcmVhdG9yRmll
bGRfKQotICAgICAgICAgICA6IFtzZWxmLT5hdXRvY3JlYXRvcl8tPmF1dG9jcmVhdGVkRXh0ZW5z
aW9uTWFwXwotICAgICAgICAgICAgICAgICBvYmplY3RGb3JLZXk6c2VsZi0+YXV0b2NyZWF0b3JF
eHRlbnNpb25fXSk7Ci0gIE5TQ0Fzc2VydChhdXRvY3JlYXRvckhhcyB8fCBhdXRvY3JlYXRvckZp
ZWxkVmFsdWUgIT0gc2VsZiwKLSAgICAgICAgICAgIEAiQ2Fubm90IGNsZWFyIGF1dG9jcmVhdG9y
IGJlY2F1c2UgaXQgc3RpbGwgcmVmZXJzIHRvIHNlbGYsIHNlbGY6ICVALiIsCi0gICAgICAgICAg
ICBzZWxmKTsKLQotI2VuZGlmICAvLyBERUJVRyAmJiAhZGVmaW5lZChOU19CTE9DS19BU1NFUlRJ
T05TKQotCi0gIHNlbGYtPmF1dG9jcmVhdG9yXyA9IG5pbDsKLSAgW3NlbGYtPmF1dG9jcmVhdG9y
RmllbGRfIHJlbGVhc2VdOwotICBzZWxmLT5hdXRvY3JlYXRvckZpZWxkXyA9IG5pbDsKLSAgW3Nl
bGYtPmF1dG9jcmVhdG9yRXh0ZW5zaW9uXyByZWxlYXNlXTsKLSAgc2VsZi0+YXV0b2NyZWF0b3JF
eHRlbnNpb25fID0gbmlsOwotfQotCi1zdGF0aWMgR1BCVW5rbm93bkZpZWxkU2V0ICpHZXRPck1h
a2VVbmtub3duRmllbGRzKEdQQk1lc3NhZ2UgKnNlbGYpIHsKLSAgaWYgKCFzZWxmLT51bmtub3du
RmllbGRzXykgewotICAgIHNlbGYtPnVua25vd25GaWVsZHNfID0gW1tHUEJVbmtub3duRmllbGRT
ZXQgYWxsb2NdIGluaXRdOwotICAgIEdQQkJlY29tZVZpc2libGVUb0F1dG9jcmVhdG9yKHNlbGYp
OwotICB9Ci0gIHJldHVybiBzZWxmLT51bmtub3duRmllbGRzXzsKLX0KLQotQGltcGxlbWVudGF0
aW9uIEdQQk1lc3NhZ2UKLQotKyAodm9pZClpbml0aWFsaXplIHsKLSAgQ2xhc3MgcGJNZXNzYWdl
Q2xhc3MgPSBbR1BCTWVzc2FnZSBjbGFzc107Ci0gIGlmIChbc2VsZiBjbGFzc10gPT0gcGJNZXNz
YWdlQ2xhc3MpIHsKLSAgICAvLyBUaGlzIGlzIGhlcmUgdG8gc3RhcnQgdXAgdGhlICJiYXNlIiBj
bGFzcyBkZXNjcmlwdG9yLgotICAgIFtzZWxmIGRlc2NyaXB0b3JdOwotICAgIC8vIE1lc3NhZ2Ug
c2hhcmVzIGV4dGVuc2lvbiBtZXRob2QgcmVzb2x2aW5nIHdpdGggR1BCUm9vdE9iamVjdCBzbyBp
bnN1cmUKLSAgICAvLyBpdCBpcyBzdGFydGVkIHVwIGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgKHZv
aWQpW0dQQlJvb3RPYmplY3QgY2xhc3NdOwotICB9IGVsc2UgaWYgKFtzZWxmIHN1cGVyY2xhc3Nd
ID09IHBiTWVzc2FnZUNsYXNzKSB7Ci0gICAgLy8gVGhpcyBpcyBoZXJlIHRvIHN0YXJ0IHVwIGFs
bCB0aGUgIm1lc3NhZ2UiIHN1YmNsYXNzZXMuIEp1c3QgbmVlZHMgdG8gYmUKLSAgICAvLyBkb25l
IGZvciB0aGUgbWVzc2FnZXMsIG5vdCBhbnkgb2YgdGhlIHN1YmNsYXNzZXMuCi0gICAgLy8gVGhp
cyBtdXN0IGJlIGRvbmUgaW4gaW5pdGlhbGl6ZSB0byBlbmZvcmNlIHRocmVhZCBzYWZldHkgb2Yg
c3RhcnQgdXAgb2YKLSAgICAvLyB0aGUgcHJvdG9jb2wgYnVmZmVyIGxpYnJhcnkuCi0gICAgLy8g
Tm90ZTogVGhlIGdlbmVyYXRlZCBjb2RlIGZvciAtZGVzY3JpcHRvciBjYWxscwotICAgIC8vICtb
R1BCRGVzY3JpcHRvciBhbGxvY0Rlc2NyaXB0b3JGb3JDbGFzczouLi5dLCBwYXNzaW5nIHRoZSBH
UEJSb290T2JqZWN0Ci0gICAgLy8gc3ViY2xhc3MgZm9yIHRoZSBmaWxlLiAgVGhhdCBjYWxsIGNo
YWluIGlzIHdoYXQgZW5zdXJlcyB0aGF0ICpSb290IGNsYXNzCi0gICAgLy8gaXMgc3RhcnRlZCB1
cCB0byBzdXBwb3J0IGV4dGVuc2lvbiByZXNvbHV0aW9uIG9mZiB0aGUgbWVzc2FnZSBjbGFzcwot
ICAgIC8vICgrcmVzb2x2ZUNsYXNzTWV0aG9kOiBiZWxvdykgaW4gYSB0aHJlYWQgc2FmZSBtYW5u
ZXIuCi0gICAgW3NlbGYgZGVzY3JpcHRvcl07Ci0gIH0KLX0KLQotKyAoaW5zdGFuY2V0eXBlKWFs
bG9jV2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICAvLyBPdmVycmlkZSBhbGxvYyB0byBhbGxv
Y2F0ZSBvdXIgY2xhc3NlcyB3aXRoIHRoZSBhZGRpdGlvbmFsIHN0b3JhZ2UKLSAgLy8gcmVxdWly
ZWQgZm9yIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMuCi0gIEdQQkRlc2NyaXB0b3IgKmRlc2NyaXB0
b3IgPSBbc2VsZiBkZXNjcmlwdG9yXTsKLSAgcmV0dXJuIE5TQWxsb2NhdGVPYmplY3Qoc2VsZiwg
ZGVzY3JpcHRvci0+c3RvcmFnZVNpemVfLCB6b25lKTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWFs
bG9jIHsKLSAgcmV0dXJuIFtzZWxmIGFsbG9jV2l0aFpvbmU6bmlsXTsKLX0KLQotKyAoR1BCRGVz
Y3JpcHRvciAqKWRlc2NyaXB0b3IgewotICAvLyBUaGlzIGlzIHRocmVhZCBzYWZlIGJlY2F1c2Ug
aXQgaXMgY2FsbGVkIGZyb20gK2luaXRpYWxpemUuCi0gIHN0YXRpYyBHUEJEZXNjcmlwdG9yICpk
ZXNjcmlwdG9yID0gTlVMTDsKLSAgc3RhdGljIEdQQkZpbGVEZXNjcmlwdG9yICpmaWxlRGVzY3Jp
cHRvciA9IE5VTEw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIC8vIFVzZSBhIGR1bW15IGZp
bGUgdGhhdCBtYXJrcyBpdCBhcyBwcm90bzIgc3ludGF4IHNvIHdoZW4gdXNlZCBnZW5lcmljYWxs
eQotICAgIC8vIGl0IHN1cHBvcnRzIHVua25vd25zL2V0Yy4KLSAgICBmaWxlRGVzY3JpcHRvciA9
Ci0gICAgICAgIFtbR1BCRmlsZURlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoUGFja2FnZTpAImlu
dGVybmFsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50
YXg6R1BCRmlsZVN5bnRheFByb3RvMl07Ci0KLSAgICBkZXNjcmlwdG9yID0gW0dQQkRlc2NyaXB0
b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6W0dQQk1lc3NhZ2UgY2xhc3NdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdENsYXNzOk5pbAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTpmaWxlRGVz
Y3JpcHRvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpZWxkczpOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZENvdW50OjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RvcmFnZVNpemU6MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbGFnczowXTsKLSAgfQotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotKyAo
aW5zdGFuY2V0eXBlKW1lc3NhZ2UgewotICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdCB7Ci0gIGlmICgoc2VsZiA9IFtz
dXBlciBpbml0XSkpIHsKLSAgICBtZXNzYWdlU3RvcmFnZV8gPSAoR1BCTWVzc2FnZV9TdG9yYWdl
UHRyKSgKLSAgICAgICAgKCh1aW50OF90ICopc2VsZikgKyBjbGFzc19nZXRJbnN0YW5jZVNpemUo
W3NlbGYgY2xhc3NdKSk7Ci0gIH0KLQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoRGF0YTooTlNEYXRhICopZGF0YSBlcnJvcjooTlNFcnJvciAqKillcnJvclB0
ciB7Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aERhdGE6ZGF0YSBleHRlbnNpb25SZWdpc3RyeTpu
aWwgZXJyb3I6ZXJyb3JQdHJdOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRhOihO
U0RhdGEgKilkYXRhCi0gICAgICAgICAgIGV4dGVuc2lvblJlZ2lzdHJ5OihHUEJFeHRlbnNpb25S
ZWdpc3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgIGVycm9y
OihOU0Vycm9yICoqKWVycm9yUHRyIHsKLSAgaWYgKChzZWxmID0gW3NlbGYgaW5pdF0pKSB7Ci0g
ICAgQHRyeSB7Ci0gICAgICBbc2VsZiBtZXJnZUZyb21EYXRhOmRhdGEgZXh0ZW5zaW9uUmVnaXN0
cnk6ZXh0ZW5zaW9uUmVnaXN0cnldOwotICAgICAgaWYgKGVycm9yUHRyKSB7Ci0gICAgICAgICpl
cnJvclB0ciA9IG5pbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgQGNhdGNoIChOU0V4Y2VwdGlvbiAq
ZXhjZXB0aW9uKSB7Ci0gICAgICBbc2VsZiByZWxlYXNlXTsKLSAgICAgIHNlbGYgPSBuaWw7Ci0g
ICAgICBpZiAoZXJyb3JQdHIpIHsKLSAgICAgICAgKmVycm9yUHRyID0gTWVzc2FnZUVycm9yV2l0
aFJlYXNvbihHUEJNZXNzYWdlRXJyb3JDb2RlTWFsZm9ybWVkRGF0YSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24ucmVhc29uKTsKLSAgICAgIH0K
LSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoc2VsZiAmJiAhc2VsZi5pbml0aWFsaXplZCkg
ewotICAgICAgW3NlbGYgcmVsZWFzZV07Ci0gICAgICBzZWxmID0gbmlsOwotICAgICAgaWYgKGVy
cm9yUHRyKSB7Ci0gICAgICAgICplcnJvclB0ciA9IE1lc3NhZ2VFcnJvcihHUEJNZXNzYWdlRXJy
b3JDb2RlTWlzc2luZ1JlcXVpcmVkRmllbGQsIG5pbCk7Ci0gICAgICB9Ci0gICAgfQotI2VuZGlm
Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvZGVk
SW5wdXRTdHJlYW06KEdQQkNvZGVkSW5wdXRTdHJlYW0gKilpbnB1dAotICAgICAgICAgICAgICAg
ICAgICAgICBleHRlbnNpb25SZWdpc3RyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChH
UEJFeHRlbnNpb25SZWdpc3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yOihOU0Vycm9yICoqKWVycm9yUHRyIHsKLSAgaWYgKChz
ZWxmID0gW3NlbGYgaW5pdF0pKSB7Ci0gICAgQHRyeSB7Ci0gICAgICBbc2VsZiBtZXJnZUZyb21D
b2RlZElucHV0U3RyZWFtOmlucHV0IGV4dGVuc2lvblJlZ2lzdHJ5OmV4dGVuc2lvblJlZ2lzdHJ5
XTsKLSAgICAgIGlmIChlcnJvclB0cikgewotICAgICAgICAqZXJyb3JQdHIgPSBuaWw7Ci0gICAg
ICB9Ci0gICAgfQotICAgIEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAgICAg
W3NlbGYgcmVsZWFzZV07Ci0gICAgICBzZWxmID0gbmlsOwotICAgICAgaWYgKGVycm9yUHRyKSB7
Ci0gICAgICAgICplcnJvclB0ciA9IE1lc3NhZ2VFcnJvcldpdGhSZWFzb24oR1BCTWVzc2FnZUVy
cm9yQ29kZU1hbGZvcm1lZERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9uLnJlYXNvbik7Ci0gICAgICB9Ci0gICAgfQotI2lmZGVmIERFQlVH
Ci0gICAgaWYgKHNlbGYgJiYgIXNlbGYuaW5pdGlhbGl6ZWQpIHsKLSAgICAgIFtzZWxmIHJlbGVh
c2VdOwotICAgICAgc2VsZiA9IG5pbDsKLSAgICAgIGlmIChlcnJvclB0cikgewotICAgICAgICAq
ZXJyb3JQdHIgPSBNZXNzYWdlRXJyb3IoR1BCTWVzc2FnZUVycm9yQ29kZU1pc3NpbmdSZXF1aXJl
ZEZpZWxkLCBuaWwpOwotICAgICAgfQotICAgIH0KLSNlbmRpZgotICB9Ci0gIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBbc2VsZiBpbnRlcm5hbENsZWFyOk5PXTsKLSAg
TlNDQXNzZXJ0KCFhdXRvY3JlYXRvcl8sIEAiQXV0b2NyZWF0b3Igd2FzIG5vdCBjbGVhcmVkIGJl
Zm9yZSBkZWFsbG9jLiIpOwotICBpZiAocmVhZE9ubHlTZW1hcGhvcmVfKSB7Ci0gICAgZGlzcGF0
Y2hfcmVsZWFzZShyZWFkT25seVNlbWFwaG9yZV8pOwotICB9Ci0gIFtzdXBlciBkZWFsbG9jXTsK
LX0KLQotLSAodm9pZCljb3B5RmllbGRzSW50bzooR1BCTWVzc2FnZSAqKW1lc3NhZ2UKLSAgICAg
ICAgICAgICAgICAgIHpvbmU6KE5TWm9uZSAqKXpvbmUKLSAgICAgICAgICAgIGRlc2NyaXB0b3I6
KEdQQkRlc2NyaXB0b3IgKilkZXNjcmlwdG9yIHsKLSAgLy8gQ29weSBhbGwgdGhlIHN0b3JhZ2Uu
Li4KLSAgbWVtY3B5KG1lc3NhZ2UtPm1lc3NhZ2VTdG9yYWdlXywgbWVzc2FnZVN0b3JhZ2VfLCBk
ZXNjcmlwdG9yLT5zdG9yYWdlU2l6ZV8pOwotCi0gIEdQQkZpbGVTeW50YXggc3ludGF4ID0gZGVz
Y3JpcHRvci5maWxlLnN5bnRheDsKLQotICAvLyBMb29wIG92ZXIgdGhlIGZpZWxkcyBkb2luZyBm
aXh1cC4uLgotICBmb3IgKEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQgaW4gZGVzY3JpcHRvci0+
ZmllbGRzXykgewotICAgIGlmIChHUEJGaWVsZElzTWFwT3JBcnJheShmaWVsZCkpIHsKLSAgICAg
IGlkIHZhbHVlID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBm
aWVsZCk7Ci0gICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBjb3B5IHRo
ZSBhcnJheS9tYXAsIGJ1dCB0aGUgY2F0Y2ggaXMgZm9yIG1lc3NhZ2UgZmllbGRzLAotICAgICAg
ICAvLyB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIGFsbCB0aGUgbWVzc2FnZXMgYXMgdGhvc2UgbmVl
ZCBjb3B5aW5nIGFsc28uCi0gICAgICAgIGlkIG5ld1ZhbHVlOwotICAgICAgICBpZiAoR1BCRmll
bGREYXRhVHlwZUlzTWVzc2FnZShmaWVsZCkpIHsKLSAgICAgICAgICBpZiAoZmllbGQuZmllbGRU
eXBlID09IEdQQkZpZWxkVHlwZVJlcGVhdGVkKSB7Ci0gICAgICAgICAgICBOU0FycmF5ICpleGlz
dGluZ0FycmF5ID0gKE5TQXJyYXkgKil2YWx1ZTsKLSAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5
ICpuZXdBcnJheSA9Ci0gICAgICAgICAgICAgICAgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTpleGlzdGluZ0FycmF5LmNvdW50XTsKLSAgICAgICAgICAgIG5ld1ZhbHVl
ID0gbmV3QXJyYXk7Ci0gICAgICAgICAgICBmb3IgKEdQQk1lc3NhZ2UgKm1zZyBpbiBleGlzdGlu
Z0FycmF5KSB7Ci0gICAgICAgICAgICAgIEdQQk1lc3NhZ2UgKmNvcGllZE1zZyA9IFttc2cgY29w
eVdpdGhab25lOnpvbmVdOwotICAgICAgICAgICAgICBbbmV3QXJyYXkgYWRkT2JqZWN0OmNvcGll
ZE1zZ107Ci0gICAgICAgICAgICAgIFtjb3BpZWRNc2cgcmVsZWFzZV07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChmaWVsZC5tYXBLZXlEYXRhVHlw
ZSA9PSBHUEJEYXRhVHlwZVN0cmluZykgewotICAgICAgICAgICAgICAvLyBNYXAgaXMgYW4gTlNE
aWN0aW9uYXJ5LgotICAgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmV4aXN0aW5nRGljdCA9IHZh
bHVlOwotICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpuZXdEaWN0ID0gW1tOU011
dGFibGVEaWN0aW9uYXJ5IGFsbG9jXQotICAgICAgICAgICAgICAgICAgaW5pdFdpdGhDYXBhY2l0
eTpleGlzdGluZ0RpY3QuY291bnRdOwotICAgICAgICAgICAgICBuZXdWYWx1ZSA9IG5ld0RpY3Q7
Ci0gICAgICAgICAgICAgIFtleGlzdGluZ0RpY3QgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2lu
Z0Jsb2NrOl4oTlNTdHJpbmcgKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJNZXNzYWdlICptc2csCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Qk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAgICAgICAgICAgICBHUEJN
ZXNzYWdlICpjb3BpZWRNc2cgPSBbbXNnIGNvcHlXaXRoWm9uZTp6b25lXTsKLSAgICAgICAgICAg
ICAgICBbbmV3RGljdCBzZXRPYmplY3Q6Y29waWVkTXNnIGZvcktleTprZXldOwotICAgICAgICAg
ICAgICAgIFtjb3BpZWRNc2cgcmVsZWFzZV07Ci0gICAgICAgICAgICAgIH1dOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLy8gSXMgb25lIG9mIHRoZSBHUEIqT2JqZWN0RGlj
dGlvbmFyeSBjbGFzc2VzLiAgVHlwZSBkb2Vzbid0Ci0gICAgICAgICAgICAgIC8vIG1hdHRlciwg
anVzdCBuZWVkIG9uZSB0byBpbnZva2UgdGhlIHNlbGVjdG9yLgotICAgICAgICAgICAgICBHUEJJ
bnQzMk9iamVjdERpY3Rpb25hcnkgKmV4aXN0aW5nRGljdCA9IHZhbHVlOwotICAgICAgICAgICAg
ICBuZXdWYWx1ZSA9IFtleGlzdGluZ0RpY3QgZGVlcENvcHlXaXRoWm9uZTp6b25lXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gTm90
IG1lc3NhZ2VzIChidXQgaXMgYSBtYXAvYXJyYXkpLi4uCi0gICAgICAgICAgaWYgKGZpZWxkLmZp
ZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVSZXBlYXRlZCkgewotICAgICAgICAgICAgaWYgKEdQQkZp
ZWxkRGF0YVR5cGVJc09iamVjdChmaWVsZCkpIHsKLSAgICAgICAgICAgICAgLy8gTlNBcnJheQot
ICAgICAgICAgICAgICBuZXdWYWx1ZSA9IFt2YWx1ZSBtdXRhYmxlQ29weVdpdGhab25lOnpvbmVd
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLy8gR1BCKkFycmF5Ci0gICAg
ICAgICAgICAgIG5ld1ZhbHVlID0gW3ZhbHVlIGNvcHlXaXRoWm9uZTp6b25lXTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGZpZWxkLm1hcEtleURh
dGFUeXBlID09IEdQQkRhdGFUeXBlU3RyaW5nKSB7Ci0gICAgICAgICAgICAgIC8vIE5TRGljdGlv
bmFyeQotICAgICAgICAgICAgICBuZXdWYWx1ZSA9IFt2YWx1ZSBtdXRhYmxlQ29weVdpdGhab25l
OnpvbmVdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLy8gSXMgb25lIG9m
IHRoZSBHUEIqRGljdGlvbmFyeSBjbGFzc2VzLiAgVHlwZSBkb2Vzbid0IG1hdHRlciwKLSAgICAg
ICAgICAgICAgLy8ganVzdCBuZWVkIG9uZSB0byBpbnZva2UgdGhlIHNlbGVjdG9yLgotICAgICAg
ICAgICAgICBHUEJJbnQzMkludDMyRGljdGlvbmFyeSAqZXhpc3RpbmdEaWN0ID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgIG5ld1ZhbHVlID0gW2V4aXN0aW5nRGljdCBjb3B5V2l0aFpvbmU6em9uZV07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIHJl
dGFpbiBoZXJlIGJlY2F1c2UgdGhlIG1lbWNweSBwaWNrZWQgdXAgdGhlIHBvaW50ZXIgdmFsdWUg
YW5kCi0gICAgICAgIC8vIHRoZSBuZXh0IGNhbGwgdG8gU2V0UmV0YWluZWRPYmplY3QuLi4gd2ls
bCByZWxlYXNlIHRoZSBjdXJyZW50IHZhbHVlLgotICAgICAgICBbdmFsdWUgcmV0YWluXTsKLSAg
ICAgICAgR1BCU2V0UmV0YWluZWRPYmplY3RJdmFyV2l0aEZpZWxkSW50ZXJuYWwobWVzc2FnZSwg
ZmllbGQsIG5ld1ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzeW50YXgpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoR1BCRmllbGREYXRh
VHlwZUlzTWVzc2FnZShmaWVsZCkpIHsKLSAgICAgIC8vIEZvciBvYmplY3QgdHlwZXMsIGlmIHdl
IGhhdmUgYSB2YWx1ZSwgY29weSBpdC4gIElmIHdlIGRvbid0LAotICAgICAgLy8gemVybyBpdCB0
byByZW1vdmUgdGhlIHBvaW50ZXIgdG8gc29tZXRoaW5nIHRoYXQgd2FzIGF1dG9jcmVhdGVkCi0g
ICAgICAvLyAoYW5kIHRoZSBwdHIganVzdCBnb3QgbWVtY3B5ZWQpLgotICAgICAgaWYgKEdQQkdl
dEhhc0l2YXJGaWVsZChzZWxmLCBmaWVsZCkpIHsKLSAgICAgICAgR1BCTWVzc2FnZSAqdmFsdWUg
PSBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAg
ICAgICAgR1BCTWVzc2FnZSAqbmV3VmFsdWUgPSBbdmFsdWUgY29weVdpdGhab25lOnpvbmVdOwot
ICAgICAgICAvLyBXZSByZXRhaW4gaGVyZSBiZWNhdXNlIHRoZSBtZW1jcHkgcGlja2VkIHVwIHRo
ZSBwb2ludGVyIHZhbHVlIGFuZAotICAgICAgICAvLyB0aGUgbmV4dCBjYWxsIHRvIFNldFJldGFp
bmVkT2JqZWN0Li4uIHdpbGwgcmVsZWFzZSB0aGUgY3VycmVudCB2YWx1ZS4KLSAgICAgICAgW3Zh
bHVlIHJldGFpbl07Ci0gICAgICAgIEdQQlNldFJldGFpbmVkT2JqZWN0SXZhcldpdGhGaWVsZElu
dGVybmFsKG1lc3NhZ2UsIGZpZWxkLCBuZXdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHVpbnQ4X3QgKnN0b3JhZ2UgPSAodWludDhfdCAqKW1lc3NhZ2UtPm1lc3NhZ2VTdG9yYWdl
XzsKLSAgICAgICAgaWQgKnR5cGVQdHIgPSAoaWQgKikmc3RvcmFnZVtmaWVsZC0+ZGVzY3JpcHRp
b25fLT5vZmZzZXRdOwotICAgICAgICAqdHlwZVB0ciA9IE5VTEw7Ci0gICAgICB9Ci0gICAgfSBl
bHNlIGlmIChHUEJGaWVsZERhdGFUeXBlSXNPYmplY3QoZmllbGQpICYmCi0gICAgICAgICAgICAg
ICBHUEJHZXRIYXNJdmFyRmllbGQoc2VsZiwgZmllbGQpKSB7Ci0gICAgICAvLyBBIHNldCBzdHJp
bmcvZGF0YSB2YWx1ZSAobWVzc2FnZSBwaWNrZWQgb2ZmIGFib3ZlKSwgY29weSBpdC4KLSAgICAg
IGlkIHZhbHVlID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBm
aWVsZCk7Ci0gICAgICBpZCBuZXdWYWx1ZSA9IFt2YWx1ZSBjb3B5V2l0aFpvbmU6em9uZV07Ci0g
ICAgICAvLyBXZSByZXRhaW4gaGVyZSBiZWNhdXNlIHRoZSBtZW1jcHkgcGlja2VkIHVwIHRoZSBw
b2ludGVyIHZhbHVlIGFuZAotICAgICAgLy8gdGhlIG5leHQgY2FsbCB0byBTZXRSZXRhaW5lZE9i
amVjdC4uLiB3aWxsIHJlbGVhc2UgdGhlIGN1cnJlbnQgdmFsdWUuCi0gICAgICBbdmFsdWUgcmV0
YWluXTsKLSAgICAgIEdQQlNldFJldGFpbmVkT2JqZWN0SXZhcldpdGhGaWVsZEludGVybmFsKG1l
c3NhZ2UsIGZpZWxkLCBuZXdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN5bnRheCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIG1lbWNweSB0
b29rIGNhcmUgb2YgdGhlIHJlc3Qgb2YgdGhlIHByaW1pdGl2ZSBmaWVsZHMgaWYgdGhleSB3ZXJl
IHNldC4KLSAgICB9Ci0gIH0gIC8vIGZvciAoZmllbGQgaW4gZGVzY3JpcHRvci0+ZmllbGRzXykK
LX0KLQotLSAoaWQpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lIHsKLSAgR1BCRGVzY3JpcHRv
ciAqZGVzY3JpcHRvciA9IFtzZWxmIGRlc2NyaXB0b3JdOwotICBHUEJNZXNzYWdlICpyZXN1bHQg
PSBbW2Rlc2NyaXB0b3IubWVzc2FnZUNsYXNzIGFsbG9jV2l0aFpvbmU6em9uZV0gaW5pdF07Ci0K
LSAgW3NlbGYgY29weUZpZWxkc0ludG86cmVzdWx0IHpvbmU6em9uZSBkZXNjcmlwdG9yOmRlc2Ny
aXB0b3JdOwotICAvLyBNYWtlIGltbXV0YWJsZSBjb3BpZXMgb2YgdGhlIGV4dHJhIGJpdHMuCi0g
IHJlc3VsdC0+dW5rbm93bkZpZWxkc18gPSBbdW5rbm93bkZpZWxkc18gY29weVdpdGhab25lOnpv
bmVdOwotICByZXN1bHQtPmV4dGVuc2lvbk1hcF8gPSBDbG9uZUV4dGVuc2lvbk1hcChleHRlbnNp
b25NYXBfLCB6b25lKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCljbGVhciB7Ci0g
IFtzZWxmIGludGVybmFsQ2xlYXI6WUVTXTsKLX0KLQotLSAodm9pZClpbnRlcm5hbENsZWFyOihC
T09MKXplcm9TdG9yYWdlIHsKLSAgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IFtzZWxmIGRl
c2NyaXB0b3JdOwotICBmb3IgKEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQgaW4gZGVzY3JpcHRv
ci0+ZmllbGRzXykgewotICAgIGlmIChHUEJGaWVsZElzTWFwT3JBcnJheShmaWVsZCkpIHsKLSAg
ICAgIGlkIGFycmF5T3JNYXAgPSBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRl
KHNlbGYsIGZpZWxkKTsKLSAgICAgIGlmIChhcnJheU9yTWFwKSB7Ci0gICAgICAgIGlmIChmaWVs
ZC5maWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAgICAgICAgICBpZiAoR1BC
RmllbGREYXRhVHlwZUlzT2JqZWN0KGZpZWxkKSkgewotICAgICAgICAgICAgR1BCQXV0b2NyZWF0
ZWRBcnJheSAqYXV0b0FycmF5ID0gYXJyYXlPck1hcDsKLSAgICAgICAgICAgIGlmIChhdXRvQXJy
YXktPl9hdXRvY3JlYXRvciA9PSBzZWxmKSB7Ci0gICAgICAgICAgICAgIGF1dG9BcnJheS0+X2F1
dG9jcmVhdG9yID0gbmlsOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBUeXBlIGRvZXNuJ3QgbWF0dGVyLCBpdCBpcyBhIEdQQipBcnJheS4KLSAgICAg
ICAgICAgIEdQQkludDMyQXJyYXkgKmdwYkFycmF5ID0gYXJyYXlPck1hcDsKLSAgICAgICAgICAg
IGlmIChncGJBcnJheS0+X2F1dG9jcmVhdG9yID09IHNlbGYpIHsKLSAgICAgICAgICAgICAgZ3Bi
QXJyYXktPl9hdXRvY3JlYXRvciA9IG5pbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKChmaWVsZC5tYXBLZXlEYXRhVHlwZSA9PSBH
UEJEYXRhVHlwZVN0cmluZykgJiYKLSAgICAgICAgICAgICAgR1BCRmllbGREYXRhVHlwZUlzT2Jq
ZWN0KGZpZWxkKSkgewotICAgICAgICAgICAgR1BCQXV0b2NyZWF0ZWREaWN0aW9uYXJ5ICphdXRv
RGljdCA9IGFycmF5T3JNYXA7Ci0gICAgICAgICAgICBpZiAoYXV0b0RpY3QtPl9hdXRvY3JlYXRv
ciA9PSBzZWxmKSB7Ci0gICAgICAgICAgICAgIGF1dG9EaWN0LT5fYXV0b2NyZWF0b3IgPSBuaWw7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFR5cGUg
ZG9lc24ndCBtYXR0ZXIsIGl0IGlzIGEgR1BCKkRpY3Rpb25hcnkuCi0gICAgICAgICAgICBHUEJJ
bnQzMkludDMyRGljdGlvbmFyeSAqZ3BiRGljdCA9IGFycmF5T3JNYXA7Ci0gICAgICAgICAgICBp
ZiAoZ3BiRGljdC0+X2F1dG9jcmVhdG9yID09IHNlbGYpIHsKLSAgICAgICAgICAgICAgZ3BiRGlj
dC0+X2F1dG9jcmVhdG9yID0gbmlsOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBbYXJyYXlPck1hcCByZWxlYXNlXTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKEdQQkZpZWxkRGF0YVR5cGVJc01lc3NhZ2UoZmllbGQpKSB7Ci0gICAgICBHUEJDbGVhckF1
dG9jcmVhdGVkTWVzc2FnZUl2YXJXaXRoRmllbGQoc2VsZiwgZmllbGQpOwotICAgICAgR1BCTWVz
c2FnZSAqdmFsdWUgPSBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYs
IGZpZWxkKTsKLSAgICAgIFt2YWx1ZSByZWxlYXNlXTsKLSAgICB9IGVsc2UgaWYgKEdQQkZpZWxk
RGF0YVR5cGVJc09iamVjdChmaWVsZCkgJiYKLSAgICAgICAgICAgICAgIEdQQkdldEhhc0l2YXJG
aWVsZChzZWxmLCBmaWVsZCkpIHsKLSAgICAgIGlkIHZhbHVlID0gR1BCR2V0T2JqZWN0SXZhcldp
dGhGaWVsZChzZWxmLCBmaWVsZCk7Ci0gICAgICBbdmFsdWUgcmVsZWFzZV07Ci0gICAgfQotICB9
Ci0KLSAgLy8gR1BCQ2xlYXJNZXNzYWdlQXV0b2NyZWF0b3IoKSBleHBlY3RzIHRoYXQgaXRzIGNh
bGxlciBoYXMgYWxyZWFkeSBiZWVuCi0gIC8vIHJlbW92ZWQgZnJvbSBhdXRvY3JlYXRlZEV4dGVu
c2lvbk1hcF8gc28gd2Ugc2V0IHRvIG5pbCBmaXJzdC4KLSAgTlNBcnJheSAqYXV0b2NyZWF0ZWRW
YWx1ZXMgPSBbYXV0b2NyZWF0ZWRFeHRlbnNpb25NYXBfIGFsbFZhbHVlc107Ci0gIFthdXRvY3Jl
YXRlZEV4dGVuc2lvbk1hcF8gcmVsZWFzZV07Ci0gIGF1dG9jcmVhdGVkRXh0ZW5zaW9uTWFwXyA9
IG5pbDsKLQotICAvLyBTaW5jZSB3ZSdyZSBjbGVhcmluZyBhbGwgb2Ygb3VyIGV4dGVuc2lvbnMs
IG1ha2Ugc3VyZSB0aGF0IHdlIGNsZWFyIHRoZQotICAvLyBhdXRvY3JlYXRvciBvbiBhbnkgdGhh
dCB3ZSd2ZSBjcmVhdGVkIHNvIHRoZXkgbm8gbG9uZ2VyIHJlZmVyIHRvIHVzLgotICBmb3IgKEdQ
Qk1lc3NhZ2UgKnZhbHVlIGluIGF1dG9jcmVhdGVkVmFsdWVzKSB7Ci0gICAgTlNDQXNzZXJ0KEdQ
Qldhc01lc3NhZ2VBdXRvY3JlYXRlZEJ5KHZhbHVlLCBzZWxmKSwKLSAgICAgICAgICAgICAgQCJB
dXRvY3JlYXRlZCBleHRlbnNpb24gZG9lcyBub3QgcmVmZXIgYmFjayB0byBzZWxmLiIpOwotICAg
IEdQQkNsZWFyTWVzc2FnZUF1dG9jcmVhdG9yKHZhbHVlKTsKLSAgfQotCi0gIFtleHRlbnNpb25N
YXBfIHJlbGVhc2VdOwotICBleHRlbnNpb25NYXBfID0gbmlsOwotICBbdW5rbm93bkZpZWxkc18g
cmVsZWFzZV07Ci0gIHVua25vd25GaWVsZHNfID0gbmlsOwotCi0gIC8vIE5vdGUgdGhhdCBjbGVh
cmluZyBkb2VzIG5vdCBhZmZlY3QgYXV0b2NyZWF0b3JfLiBJZiB3ZSBhcmUgYmVpbmcgY2xlYXJl
ZAotICAvLyBiZWNhdXNlIG9mIGEgZGVhbGxvYywgdGhlbiBhdXRvY3JlYXRvcl8gc2hvdWxkIGJl
IG5pbCBhbnl3YXkuIElmIHdlIGFyZQotICAvLyBiZWluZyBjbGVhcmVkIGJlY2F1c2Ugc29tZW9u
ZSBleHBsaWNpdGx5IGNsZWFycyB1cywgd2UgZG9uJ3Qgd2FudCB0bwotICAvLyBzZXZlciBvdXIg
cmVsYXRpb25zaGlwIHdpdGggb3VyIGF1dG9jcmVhdG9yLgotCi0gIGlmICh6ZXJvU3RvcmFnZSkg
ewotICAgIG1lbXNldChtZXNzYWdlU3RvcmFnZV8sIDAsIGRlc2NyaXB0b3ItPnN0b3JhZ2VTaXpl
Xyk7Ci0gIH0KLX0KLQotLSAoQk9PTClpc0luaXRpYWxpemVkIHsKLSAgR1BCRGVzY3JpcHRvciAq
ZGVzY3JpcHRvciA9IFtzZWxmIGRlc2NyaXB0b3JdOwotICBmb3IgKEdQQkZpZWxkRGVzY3JpcHRv
ciAqZmllbGQgaW4gZGVzY3JpcHRvci0+ZmllbGRzXykgewotICAgIGlmIChmaWVsZC5pc1JlcXVp
cmVkKSB7Ci0gICAgICBpZiAoIUdQQkdldEhhc0l2YXJGaWVsZChzZWxmLCBmaWVsZCkpIHsKLSAg
ICAgICAgcmV0dXJuIE5POwotICAgICAgfQotICAgIH0KLSAgICBpZiAoR1BCRmllbGREYXRhVHlw
ZUlzTWVzc2FnZShmaWVsZCkpIHsKLSAgICAgIEdQQkZpZWxkVHlwZSBmaWVsZFR5cGUgPSBmaWVs
ZC5maWVsZFR5cGU7Ci0gICAgICBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVNpbmdsZSkg
ewotICAgICAgICBpZiAoZmllbGQuaXNSZXF1aXJlZCkgewotICAgICAgICAgIEdQQk1lc3NhZ2Ug
Km1lc3NhZ2UgPSBHUEJHZXRNZXNzYWdlTWVzc2FnZUZpZWxkKHNlbGYsIGZpZWxkKTsKLSAgICAg
ICAgICBpZiAoIW1lc3NhZ2UuaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIHJldHVybiBOTzsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgTlNBc3NlcnQoZmllbGQu
aXNPcHRpb25hbCwKLSAgICAgICAgICAgICAgICAgICBAIiVAOiBTaW5nbGUgbWVzc2FnZSBmaWVs
ZCAlQCBub3QgcmVxdWlyZWQgb3Igb3B0aW9uYWw/IiwKLSAgICAgICAgICAgICAgICAgICBbc2Vs
ZiBjbGFzc10sIGZpZWxkLm5hbWUpOwotICAgICAgICAgIGlmIChHUEJHZXRIYXNJdmFyRmllbGQo
c2VsZiwgZmllbGQpKSB7Ci0gICAgICAgICAgICBHUEJNZXNzYWdlICptZXNzYWdlID0gR1BCR2V0
TWVzc2FnZU1lc3NhZ2VGaWVsZChzZWxmLCBmaWVsZCk7Ci0gICAgICAgICAgICBpZiAoIW1lc3Nh
Z2UuaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUgPT0g
R1BCRmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAgICAgICAgTlNBcnJheSAqYXJyYXkgPSBHUEJHZXRP
YmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgICAgZm9y
IChHUEJNZXNzYWdlICptZXNzYWdlIGluIGFycmF5KSB7Ci0gICAgICAgICAgaWYgKCFtZXNzYWdl
LmluaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICB9IGVsc2UgeyAgLy8gZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZU1hcAot
ICAgICAgICBpZiAoZmllbGQubWFwS2V5RGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVTdHJpbmcpIHsK
LSAgICAgICAgICBOU0RpY3Rpb25hcnkgKm1hcCA9Ci0gICAgICAgICAgICAgIEdQQkdldE9iamVj
dEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICAgICAgICAgIGlmICht
YXAgJiYgIUdQQkRpY3Rpb25hcnlJc0luaXRpYWxpemVkSW50ZXJuYWxIZWxwZXIobWFwLCBmaWVs
ZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgLy8gUmVhbCB0eXBlIGlzIEdQQipPYmplY3REaWN0aW9uYXJ5LCBleGFj
dCB0eXBlIGRvZXNuJ3QgbWF0dGVyLgotICAgICAgICAgIEdQQkludDMyT2JqZWN0RGljdGlvbmFy
eSAqbWFwID0KLSAgICAgICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2Ny
ZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgICAgICAgaWYgKG1hcCAmJiAhW21hcCBpc0luaXRpYWxp
emVkXSkgewotICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIF9fYmxvY2sgQk9PTCByZXN1bHQgPSBZRVM7Ci0gIFtl
eHRlbnNpb25NYXBfCi0gICAgICBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihH
UEJFeHRlbnNpb25EZXNjcmlwdG9yICpleHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZCBvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCT09MICpzdG9wKSB7Ci0gICAgICAgIGlmIChHUEJFeHRlbnNpb25Jc01l
c3NhZ2UoZXh0ZW5zaW9uKSkgewotICAgICAgICAgIGlmIChleHRlbnNpb24uaXNSZXBlYXRlZCkg
ewotICAgICAgICAgICAgZm9yIChHUEJNZXNzYWdlICptc2cgaW4gb2JqKSB7Ci0gICAgICAgICAg
ICAgIGlmICghbXNnLmluaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gTk87
Ci0gICAgICAgICAgICAgICAgKnN0b3AgPSBZRVM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgR1BCTWVzc2FnZSAqYXNNc2cgPSBvYmo7Ci0gICAgICAgICAgICBpZiAoIWFzTXNnLmlu
aXRpYWxpemVkKSB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IE5POwotICAgICAgICAgICAgICAq
c3RvcCA9IFlFUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH1dOwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChHUEJEZXNjcmlwdG9yICopZGVzY3JpcHRv
ciB7Ci0gIHJldHVybiBbW3NlbGYgY2xhc3NdIGRlc2NyaXB0b3JdOwotfQotCi0tIChOU0RhdGEg
KilkYXRhIHsKLSNpZmRlZiBERUJVRwotICBpZiAoIXNlbGYuaW5pdGlhbGl6ZWQpIHsKLSAgICBy
ZXR1cm4gbmlsOwotICB9Ci0jZW5kaWYKLSAgTlNNdXRhYmxlRGF0YSAqZGF0YSA9IFtOU011dGFi
bGVEYXRhIGRhdGFXaXRoTGVuZ3RoOltzZWxmIHNlcmlhbGl6ZWRTaXplXV07Ci0gIEdQQkNvZGVk
T3V0cHV0U3RyZWFtICpzdHJlYW0gPQotICAgICAgW1tHUEJDb2RlZE91dHB1dFN0cmVhbSBhbGxv
Y10gaW5pdFdpdGhEYXRhOmRhdGFdOwotICBAdHJ5IHsKLSAgICBbc2VsZiB3cml0ZVRvQ29kZWRP
dXRwdXRTdHJlYW06c3RyZWFtXTsKLSAgfQotICBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRp
b24pIHsKLSAgICAvLyBUaGlzIHJlYWxseSBzaG91bGRuJ3QgaGFwcGVuLiBUaGUgb25seSB3YXkg
d3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOgotICAgIC8vIGNvdWxkIHRocm93IGlzIGlmIHNvbWV0
aGluZyBpbiB0aGUgbGlicmFyeSBoYXMgYSBidWcgYW5kIHRoZQotICAgIC8vIHNlcmlhbGl6ZWRT
aXplIHdhcyB3cm9uZy4KLSNpZmRlZiBERUJVRwotICAgIE5TTG9nKEAiJUA6IEludGVybmFsIGV4
Y2VwdGlvbiB3aGlsZSBidWlsZGluZyBtZXNzYWdlIGRhdGE6ICVAIiwKLSAgICAgICAgICBbc2Vs
ZiBjbGFzc10sIGV4Y2VwdGlvbik7Ci0jZW5kaWYKLSAgICBkYXRhID0gbmlsOwotICB9Ci0gIFtz
dHJlYW0gcmVsZWFzZV07Ci0gIHJldHVybiBkYXRhOwotfQotCi0tIChOU0RhdGEgKilkZWxpbWl0
ZWREYXRhIHsKLSAgc2l6ZV90IHNlcmlhbGl6ZWRTaXplID0gW3NlbGYgc2VyaWFsaXplZFNpemVd
OwotICBzaXplX3QgdmFyaW50U2l6ZSA9IEdQQkNvbXB1dGVSYXdWYXJpbnQzMlNpemVGb3JJbnRl
Z2VyKHNlcmlhbGl6ZWRTaXplKTsKLSAgTlNNdXRhYmxlRGF0YSAqZGF0YSA9Ci0gICAgICBbTlNN
dXRhYmxlRGF0YSBkYXRhV2l0aExlbmd0aDooc2VyaWFsaXplZFNpemUgKyB2YXJpbnRTaXplKV07
Ci0gIEdQQkNvZGVkT3V0cHV0U3RyZWFtICpzdHJlYW0gPQotICAgICAgW1tHUEJDb2RlZE91dHB1
dFN0cmVhbSBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFdOwotICBAdHJ5IHsKLSAgICBbc2VsZiB3
cml0ZURlbGltaXRlZFRvQ29kZWRPdXRwdXRTdHJlYW06c3RyZWFtXTsKLSAgfQotICBAY2F0Y2gg
KE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAvLyBUaGlzIHJlYWxseSBzaG91bGRuJ3Qg
aGFwcGVuLiAgVGhlIG9ubHkgd2F5IHdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbToKLSAgICAvLyBj
b3VsZCB0aHJvdyBpcyBpZiBzb21ldGhpbmcgaW4gdGhlIGxpYnJhcnkgaGFzIGEgYnVnIGFuZCB0
aGUKLSAgICAvLyBzZXJpYWxpemVkU2l6ZSB3YXMgd3JvbmcuCi0jaWZkZWYgREVCVUcKLSAgICBO
U0xvZyhAIiVAOiBJbnRlcm5hbCBleGNlcHRpb24gd2hpbGUgYnVpbGRpbmcgbWVzc2FnZSBkZWxp
bWl0ZWREYXRhOiAlQCIsCi0gICAgICAgICAgW3NlbGYgY2xhc3NdLCBleGNlcHRpb24pOwotI2Vu
ZGlmCi0gICAgLy8gSWYgaXQgaGFwcGVucywgdHJ1bmNhdGUuCi0gICAgZGF0YS5sZW5ndGggPSAw
OwotICB9Ci0gIFtzdHJlYW0gcmVsZWFzZV07Ci0gIHJldHVybiBkYXRhOwotfQotCi0tICh2b2lk
KXdyaXRlVG9PdXRwdXRTdHJlYW06KE5TT3V0cHV0U3RyZWFtICopb3V0cHV0IHsKLSAgR1BCQ29k
ZWRPdXRwdXRTdHJlYW0gKnN0cmVhbSA9Ci0gICAgICBbW0dQQkNvZGVkT3V0cHV0U3RyZWFtIGFs
bG9jXSBpbml0V2l0aE91dHB1dFN0cmVhbTpvdXRwdXRdOwotICBbc2VsZiB3cml0ZVRvQ29kZWRP
dXRwdXRTdHJlYW06c3RyZWFtXTsKLSAgW3N0cmVhbSByZWxlYXNlXTsKLX0KLQotLSAodm9pZCl3
cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0IHsK
LSAgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IFtzZWxmIGRlc2NyaXB0b3JdOwotICBOU0Fy
cmF5ICpmaWVsZHNBcnJheSA9IGRlc2NyaXB0b3ItPmZpZWxkc187Ci0gIE5TVUludGVnZXIgZmll
bGRDb3VudCA9IGZpZWxkc0FycmF5LmNvdW50OwotICBjb25zdCBHUEJFeHRlbnNpb25SYW5nZSAq
ZXh0ZW5zaW9uUmFuZ2VzID0gZGVzY3JpcHRvci5leHRlbnNpb25SYW5nZXM7Ci0gIE5TVUludGVn
ZXIgZXh0ZW5zaW9uUmFuZ2VzQ291bnQgPSBkZXNjcmlwdG9yLmV4dGVuc2lvblJhbmdlc0NvdW50
OwotICBmb3IgKE5TVUludGVnZXIgaSA9IDAsIGogPSAwOyBpIDwgZmllbGRDb3VudCB8fCBqIDwg
ZXh0ZW5zaW9uUmFuZ2VzQ291bnQ7KSB7Ci0gICAgaWYgKGkgPT0gZmllbGRDb3VudCkgewotICAg
ICAgW3NlbGYgd3JpdGVFeHRlbnNpb25zVG9Db2RlZE91dHB1dFN0cmVhbTpvdXRwdXQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6ZXh0ZW5zaW9uUmFuZ2Vz
W2orK11dOwotICAgIH0gZWxzZSBpZiAoaiA9PSBleHRlbnNpb25SYW5nZXNDb3VudCB8fAotICAg
ICAgICAgICAgICAgR1BCRmllbGROdW1iZXIoZmllbGRzQXJyYXlbaV0pIDwgZXh0ZW5zaW9uUmFu
Z2VzW2pdLnN0YXJ0KSB7Ci0gICAgICBbc2VsZiB3cml0ZUZpZWxkOmZpZWxkc0FycmF5W2krK10g
dG9Db2RlZE91dHB1dFN0cmVhbTpvdXRwdXRdOwotICAgIH0gZWxzZSB7Ci0gICAgICBbc2VsZiB3
cml0ZUV4dGVuc2lvbnNUb0NvZGVkT3V0cHV0U3RyZWFtOm91dHB1dAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTpleHRlbnNpb25SYW5nZXNbaisrXV07Ci0g
ICAgfQotICB9Ci0gIGlmIChkZXNjcmlwdG9yLmlzV2lyZUZvcm1hdCkgewotICAgIFt1bmtub3du
RmllbGRzXyB3cml0ZUFzTWVzc2FnZVNldFRvOm91dHB1dF07Ci0gIH0gZWxzZSB7Ci0gICAgW3Vu
a25vd25GaWVsZHNfIHdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTpvdXRwdXRdOwotICB9Ci19Ci0K
LS0gKHZvaWQpd3JpdGVEZWxpbWl0ZWRUb091dHB1dFN0cmVhbTooTlNPdXRwdXRTdHJlYW0gKilv
dXRwdXQgewotICBHUEJDb2RlZE91dHB1dFN0cmVhbSAqY29kZWRPdXRwdXQgPQotICAgICAgW1tH
UEJDb2RlZE91dHB1dFN0cmVhbSBhbGxvY10gaW5pdFdpdGhPdXRwdXRTdHJlYW06b3V0cHV0XTsK
LSAgW3NlbGYgd3JpdGVEZWxpbWl0ZWRUb0NvZGVkT3V0cHV0U3RyZWFtOmNvZGVkT3V0cHV0XTsK
LSAgW2NvZGVkT3V0cHV0IHJlbGVhc2VdOwotfQotCi0tICh2b2lkKXdyaXRlRGVsaW1pdGVkVG9D
b2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXQgewotICBbb3V0
cHV0IHdyaXRlUmF3VmFyaW50U2l6ZVRBczMyOltzZWxmIHNlcmlhbGl6ZWRTaXplXV07Ci0gIFtz
ZWxmIHdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTpvdXRwdXRdOwotfQotCi0tICh2b2lkKXdyaXRl
RmllbGQ6KEdQQkZpZWxkRGVzY3JpcHRvciAqKWZpZWxkCi0gICAgdG9Db2RlZE91dHB1dFN0cmVh
bTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXQgewotICBHUEJGaWVsZFR5cGUgZmllbGRU
eXBlID0gZmllbGQuZmllbGRUeXBlOwotICBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVNp
bmdsZSkgewotICAgIEJPT0wgaGFzID0gR1BCR2V0SGFzSXZhckZpZWxkKHNlbGYsIGZpZWxkKTsK
LSAgICBpZiAoIWhhcykgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotICB1aW50MzJfdCBm
aWVsZE51bWJlciA9IEdQQkZpZWxkTnVtYmVyKGZpZWxkKTsKLQotLy8lUERETS1ERUZJTkUgRklF
TERfQ0FTRShUWVBFLCBSRUFMX1RZUEUpCi0vLyVGSUVMRF9DQVNFX0ZVTEwoVFlQRSwgUkVBTF9U
WVBFLCBSRUFMX1RZUEUpCi0vLyVQRERNLURFRklORSBGSUVMRF9DQVNFX0ZVTEwoVFlQRSwgUkVB
TF9UWVBFLCBBUlJBWV9UWVBFKQotLy8lICAgIGNhc2UgR1BCRGF0YVR5cGUjI1RZUEU6Ci0vLyUg
ICAgICBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVJlcGVhdGVkKSB7Ci0vLyUgICAgICAg
IHVpbnQzMl90IHRhZyA9IGZpZWxkLmlzUGFja2FibGUgPyBHUEJGaWVsZFRhZyhmaWVsZCkgOiAw
OwotLy8lICAgICAgICBHUEIjI0FSUkFZX1RZUEUjI0FycmF5ICphcnJheSA9Ci0vLyUgICAgICAg
ICAgICBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsK
LS8vJSAgICAgICAgW291dHB1dCB3cml0ZSMjVFlQRSMjQXJyYXk6ZmllbGROdW1iZXIgdmFsdWVz
OmFycmF5IHRhZzp0YWddOwotLy8lICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUgPT0gR1BCRmll
bGRUeXBlU2luZ2xlKSB7Ci0vLyUgICAgICAgIFtvdXRwdXQgd3JpdGUjI1RZUEU6ZmllbGROdW1i
ZXIKLS8vJSAgICAgICAgICAgICAgVFlQRSRTICB2YWx1ZTpHUEJHZXRNZXNzYWdlIyNSRUFMX1RZ
UEUjI0ZpZWxkKHNlbGYsIGZpZWxkKV07Ci0vLyUgICAgICB9IGVsc2UgeyAgLy8gZmllbGRUeXBl
ID09IEdQQkZpZWxkVHlwZU1hcAotLy8lICAgICAgICAvLyBFeGFjdCB0eXBlIGhlcmUgZG9lc24n
dCBtYXR0ZXIuCi0vLyUgICAgICAgIEdQQkludDMyIyNBUlJBWV9UWVBFIyNEaWN0aW9uYXJ5ICpk
aWN0ID0KLS8vJSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVh
dGUoc2VsZiwgZmllbGQpOwotLy8lICAgICAgICBbZGljdCB3cml0ZVRvQ29kZWRPdXRwdXRTdHJl
YW06b3V0cHV0IGFzRmllbGQ6ZmllbGRdOwotLy8lICAgICAgfQotLy8lICAgICAgYnJlYWs7Ci0v
LyUKLS8vJVBERE0tREVGSU5FIEZJRUxEX0NBU0UyKFRZUEUpCi0vLyUgICAgY2FzZSBHUEJEYXRh
VHlwZSMjVFlQRToKLS8vJSAgICAgIGlmIChmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlUmVwZWF0
ZWQpIHsKLS8vJSAgICAgICAgTlNBcnJheSAqYXJyYXkgPSBHUEJHZXRPYmplY3RJdmFyV2l0aEZp
ZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLS8vJSAgICAgICAgW291dHB1dCB3cml0ZSMj
VFlQRSMjQXJyYXk6ZmllbGROdW1iZXIgdmFsdWVzOmFycmF5XTsKLS8vJSAgICAgIH0gZWxzZSBp
ZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVNpbmdsZSkgewotLy8lICAgICAgICAvLyBHUEJH
ZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKCkgYXZvaWRzIGRvaW5nIHRoZSBoYXMg
Y2hlY2sKLS8vJSAgICAgICAgLy8gYWdhaW4uCi0vLyUgICAgICAgIFtvdXRwdXQgd3JpdGUjI1RZ
UEU6ZmllbGROdW1iZXIKLS8vJSAgICAgICAgICAgICAgVFlQRSRTICB2YWx1ZTpHUEJHZXRPYmpl
Y3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKV07Ci0vLyUgICAgICB9IGVs
c2UgeyAgLy8gZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZU1hcAotLy8lICAgICAgICAvLyBFeGFj
dCB0eXBlIGhlcmUgZG9lc24ndCBtYXR0ZXIuCi0vLyUgICAgICAgIGlkIGRpY3QgPSBHUEJHZXRP
YmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLS8vJSAgICAgICAg
R1BCRGF0YVR5cGUgbWFwS2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLS8vJSAg
ICAgICAgaWYgKG1hcEtleURhdGFUeXBlID09IEdQQkRhdGFUeXBlU3RyaW5nKSB7Ci0vLyUgICAg
ICAgICAgR1BCRGljdGlvbmFyeVdyaXRlVG9TdHJlYW1JbnRlcm5hbEhlbHBlcihvdXRwdXQsIGRp
Y3QsIGZpZWxkKTsKLS8vJSAgICAgICAgfSBlbHNlIHsKLS8vJSAgICAgICAgICBbZGljdCB3cml0
ZVRvQ29kZWRPdXRwdXRTdHJlYW06b3V0cHV0IGFzRmllbGQ6ZmllbGRdOwotLy8lICAgICAgICB9
Ci0vLyUgICAgICB9Ci0vLyUgICAgICBicmVhazsKLS8vJQotCi0gIHN3aXRjaCAoR1BCR2V0Rmll
bGREYXRhVHlwZShmaWVsZCkpIHsKLQotLy8lUERETS1FWFBBTkQgRklFTERfQ0FTRShCb29sLCBC
b29sKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQg
ZGlyZWN0bHkuCi0KLSAgICBjYXNlIEdQQkRhdGFUeXBlQm9vbDoKLSAgICAgIGlmIChmaWVsZFR5
cGUgPT0gR1BCRmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAgICAgICAgdWludDMyX3QgdGFnID0gZmll
bGQuaXNQYWNrYWJsZSA/IEdQQkZpZWxkVGFnKGZpZWxkKSA6IDA7Ci0gICAgICAgIEdQQkJvb2xB
cnJheSAqYXJyYXkgPQotICAgICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0
b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVCb29sQXJyYXk6Zmll
bGROdW1iZXIgdmFsdWVzOmFycmF5IHRhZzp0YWddOwotICAgICAgfSBlbHNlIGlmIChmaWVsZFR5
cGUgPT0gR1BCRmllbGRUeXBlU2luZ2xlKSB7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVCb29sOmZp
ZWxkTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlOkdQQkdldE1lc3NhZ2VCb29sRmll
bGQoc2VsZiwgZmllbGQpXTsKLSAgICAgIH0gZWxzZSB7ICAvLyBmaWVsZFR5cGUgPT0gR1BCRmll
bGRUeXBlTWFwCi0gICAgICAgIC8vIEV4YWN0IHR5cGUgaGVyZSBkb2Vzbid0IG1hdHRlci4KLSAg
ICAgICAgR1BCSW50MzJCb29sRGljdGlvbmFyeSAqZGljdCA9Ci0gICAgICAgICAgICBHUEJHZXRP
YmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgICAgW2Rp
Y3Qgd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOm91dHB1dCBhc0ZpZWxkOmZpZWxkXTsKLSAgICAg
IH0KLSAgICAgIGJyZWFrOwotCi0vLyVQRERNLUVYUEFORCBGSUVMRF9DQVNFKEZpeGVkMzIsIFVJ
bnQzMikKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0
IGRpcmVjdGx5LgotCi0gICAgY2FzZSBHUEJEYXRhVHlwZUZpeGVkMzI6Ci0gICAgICBpZiAoZmll
bGRUeXBlID09IEdQQkZpZWxkVHlwZVJlcGVhdGVkKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhZyA9
IGZpZWxkLmlzUGFja2FibGUgPyBHUEJGaWVsZFRhZyhmaWVsZCkgOiAwOwotICAgICAgICBHUEJV
SW50MzJBcnJheSAqYXJyYXkgPQotICAgICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVs
ZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVGaXhlZDMy
QXJyYXk6ZmllbGROdW1iZXIgdmFsdWVzOmFycmF5IHRhZzp0YWddOwotICAgICAgfSBlbHNlIGlm
IChmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlU2luZ2xlKSB7Ci0gICAgICAgIFtvdXRwdXQgd3Jp
dGVGaXhlZDMyOmZpZWxkTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOkdQQkdl
dE1lc3NhZ2VVSW50MzJGaWVsZChzZWxmLCBmaWVsZCldOwotICAgICAgfSBlbHNlIHsgIC8vIGZp
ZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVNYXAKLSAgICAgICAgLy8gRXhhY3QgdHlwZSBoZXJlIGRv
ZXNuJ3QgbWF0dGVyLgotICAgICAgICBHUEJJbnQzMlVJbnQzMkRpY3Rpb25hcnkgKmRpY3QgPQot
ICAgICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBm
aWVsZCk7Ci0gICAgICAgIFtkaWN0IHdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTpvdXRwdXQgYXNG
aWVsZDpmaWVsZF07Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotLy8lUERETS1FWFBBTkQgRklF
TERfQ0FTRShTRml4ZWQzMiwgSW50MzIpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJh
dGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4
ZWQzMjoKLSAgICAgIGlmIChmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAg
ICAgICAgdWludDMyX3QgdGFnID0gZmllbGQuaXNQYWNrYWJsZSA/IEdQQkZpZWxkVGFnKGZpZWxk
KSA6IDA7Ci0gICAgICAgIEdQQkludDMyQXJyYXkgKmFycmF5ID0KLSAgICAgICAgICAgIEdQQkdl
dE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICAgICAgICBb
b3V0cHV0IHdyaXRlU0ZpeGVkMzJBcnJheTpmaWVsZE51bWJlciB2YWx1ZXM6YXJyYXkgdGFnOnRh
Z107Ci0gICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVTaW5nbGUpIHsK
LSAgICAgICAgW291dHB1dCB3cml0ZVNGaXhlZDMyOmZpZWxkTnVtYmVyCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTpHUEJHZXRNZXNzYWdlSW50MzJGaWVsZChzZWxmLCBmaWVsZCldOwot
ICAgICAgfSBlbHNlIHsgIC8vIGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVNYXAKLSAgICAgICAg
Ly8gRXhhY3QgdHlwZSBoZXJlIGRvZXNuJ3QgbWF0dGVyLgotICAgICAgICBHUEJJbnQzMkludDMy
RGljdGlvbmFyeSAqZGljdCA9Ci0gICAgICAgICAgICBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxk
Tm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgICAgW2RpY3Qgd3JpdGVUb0NvZGVkT3V0
cHV0U3RyZWFtOm91dHB1dCBhc0ZpZWxkOmZpZWxkXTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwot
Ci0vLyVQRERNLUVYUEFORCBGSUVMRF9DQVNFKEZsb2F0LCBGbG9hdCkKLS8vIFRoaXMgYmxvY2sg
b2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0gICAgY2Fz
ZSBHUEJEYXRhVHlwZUZsb2F0OgotICAgICAgaWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVS
ZXBlYXRlZCkgewotICAgICAgICB1aW50MzJfdCB0YWcgPSBmaWVsZC5pc1BhY2thYmxlID8gR1BC
RmllbGRUYWcoZmllbGQpIDogMDsKLSAgICAgICAgR1BCRmxvYXRBcnJheSAqYXJyYXkgPQotICAg
ICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVs
ZCk7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVGbG9hdEFycmF5OmZpZWxkTnVtYmVyIHZhbHVlczph
cnJheSB0YWc6dGFnXTsKLSAgICAgIH0gZWxzZSBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlw
ZVNpbmdsZSkgewotICAgICAgICBbb3V0cHV0IHdyaXRlRmxvYXQ6ZmllbGROdW1iZXIKLSAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlOkdQQkdldE1lc3NhZ2VGbG9hdEZpZWxkKHNlbGYsIGZpZWxk
KV07Ci0gICAgICB9IGVsc2UgeyAgLy8gZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZU1hcAotICAg
ICAgICAvLyBFeGFjdCB0eXBlIGhlcmUgZG9lc24ndCBtYXR0ZXIuCi0gICAgICAgIEdQQkludDMy
RmxvYXREaWN0aW9uYXJ5ICpkaWN0ID0KLSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRo
RmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICAgICAgICBbZGljdCB3cml0ZVRvQ29k
ZWRPdXRwdXRTdHJlYW06b3V0cHV0IGFzRmllbGQ6ZmllbGRdOwotICAgICAgfQotICAgICAgYnJl
YWs7Ci0KLS8vJVBERE0tRVhQQU5EIEZJRUxEX0NBU0UoRml4ZWQ2NCwgVUludDY0KQotLy8gVGhp
cyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0K
LSAgICBjYXNlIEdQQkRhdGFUeXBlRml4ZWQ2NDoKLSAgICAgIGlmIChmaWVsZFR5cGUgPT0gR1BC
RmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAgICAgICAgdWludDMyX3QgdGFnID0gZmllbGQuaXNQYWNr
YWJsZSA/IEdQQkZpZWxkVGFnKGZpZWxkKSA6IDA7Ci0gICAgICAgIEdQQlVJbnQ2NEFycmF5ICph
cnJheSA9Ci0gICAgICAgICAgICBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRl
KHNlbGYsIGZpZWxkKTsKLSAgICAgICAgW291dHB1dCB3cml0ZUZpeGVkNjRBcnJheTpmaWVsZE51
bWJlciB2YWx1ZXM6YXJyYXkgdGFnOnRhZ107Ci0gICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9
PSBHUEJGaWVsZFR5cGVTaW5nbGUpIHsKLSAgICAgICAgW291dHB1dCB3cml0ZUZpeGVkNjQ6Zmll
bGROdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6R1BCR2V0TWVzc2FnZVVJbnQ2
NEZpZWxkKHNlbGYsIGZpZWxkKV07Ci0gICAgICB9IGVsc2UgeyAgLy8gZmllbGRUeXBlID09IEdQ
QkZpZWxkVHlwZU1hcAotICAgICAgICAvLyBFeGFjdCB0eXBlIGhlcmUgZG9lc24ndCBtYXR0ZXIu
Ci0gICAgICAgIEdQQkludDMyVUludDY0RGljdGlvbmFyeSAqZGljdCA9Ci0gICAgICAgICAgICBH
UEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAg
ICAgW2RpY3Qgd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOm91dHB1dCBhc0ZpZWxkOmZpZWxkXTsK
LSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0vLyVQRERNLUVYUEFORCBGSUVMRF9DQVNFKFNGaXhl
ZDY0LCBJbnQ2NCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBl
ZGl0IGl0IGRpcmVjdGx5LgotCi0gICAgY2FzZSBHUEJEYXRhVHlwZVNGaXhlZDY0OgotICAgICAg
aWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVSZXBlYXRlZCkgewotICAgICAgICB1aW50MzJf
dCB0YWcgPSBmaWVsZC5pc1BhY2thYmxlID8gR1BCRmllbGRUYWcoZmllbGQpIDogMDsKLSAgICAg
ICAgR1BCSW50NjRBcnJheSAqYXJyYXkgPQotICAgICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldp
dGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVT
Rml4ZWQ2NEFycmF5OmZpZWxkTnVtYmVyIHZhbHVlczphcnJheSB0YWc6dGFnXTsKLSAgICAgIH0g
ZWxzZSBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVNpbmdsZSkgewotICAgICAgICBbb3V0
cHV0IHdyaXRlU0ZpeGVkNjQ6ZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlOkdQQkdldE1lc3NhZ2VJbnQ2NEZpZWxkKHNlbGYsIGZpZWxkKV07Ci0gICAgICB9IGVsc2Ug
eyAgLy8gZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZU1hcAotICAgICAgICAvLyBFeGFjdCB0eXBl
IGhlcmUgZG9lc24ndCBtYXR0ZXIuCi0gICAgICAgIEdQQkludDMySW50NjREaWN0aW9uYXJ5ICpk
aWN0ID0KLSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUo
c2VsZiwgZmllbGQpOwotICAgICAgICBbZGljdCB3cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06b3V0
cHV0IGFzRmllbGQ6ZmllbGRdOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLS8vJVBERE0tRVhQ
QU5EIEZJRUxEX0NBU0UoRG91YmxlLCBEb3VibGUpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMg
Z2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotICAgIGNhc2UgR1BCRGF0YVR5
cGVEb3VibGU6Ci0gICAgICBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVJlcGVhdGVkKSB7
Ci0gICAgICAgIHVpbnQzMl90IHRhZyA9IGZpZWxkLmlzUGFja2FibGUgPyBHUEJGaWVsZFRhZyhm
aWVsZCkgOiAwOwotICAgICAgICBHUEJEb3VibGVBcnJheSAqYXJyYXkgPQotICAgICAgICAgICAg
R1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAg
ICAgIFtvdXRwdXQgd3JpdGVEb3VibGVBcnJheTpmaWVsZE51bWJlciB2YWx1ZXM6YXJyYXkgdGFn
OnRhZ107Ci0gICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVTaW5nbGUp
IHsKLSAgICAgICAgW291dHB1dCB3cml0ZURvdWJsZTpmaWVsZE51bWJlcgotICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlOkdQQkdldE1lc3NhZ2VEb3VibGVGaWVsZChzZWxmLCBmaWVsZCldOwot
ICAgICAgfSBlbHNlIHsgIC8vIGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVNYXAKLSAgICAgICAg
Ly8gRXhhY3QgdHlwZSBoZXJlIGRvZXNuJ3QgbWF0dGVyLgotICAgICAgICBHUEJJbnQzMkRvdWJs
ZURpY3Rpb25hcnkgKmRpY3QgPQotICAgICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVs
ZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgICAgIFtkaWN0IHdyaXRlVG9Db2RlZE91
dHB1dFN0cmVhbTpvdXRwdXQgYXNGaWVsZDpmaWVsZF07Ci0gICAgICB9Ci0gICAgICBicmVhazsK
LQotLy8lUERETS1FWFBBTkQgRklFTERfQ0FTRShJbnQzMiwgSW50MzIpCi0vLyBUaGlzIGJsb2Nr
IG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotICAgIGNh
c2UgR1BCRGF0YVR5cGVJbnQzMjoKLSAgICAgIGlmIChmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBl
UmVwZWF0ZWQpIHsKLSAgICAgICAgdWludDMyX3QgdGFnID0gZmllbGQuaXNQYWNrYWJsZSA/IEdQ
QkZpZWxkVGFnKGZpZWxkKSA6IDA7Ci0gICAgICAgIEdQQkludDMyQXJyYXkgKmFycmF5ID0KLSAg
ICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmll
bGQpOwotICAgICAgICBbb3V0cHV0IHdyaXRlSW50MzJBcnJheTpmaWVsZE51bWJlciB2YWx1ZXM6
YXJyYXkgdGFnOnRhZ107Ci0gICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5
cGVTaW5nbGUpIHsKLSAgICAgICAgW291dHB1dCB3cml0ZUludDMyOmZpZWxkTnVtYmVyCi0gICAg
ICAgICAgICAgICAgICAgICB2YWx1ZTpHUEJHZXRNZXNzYWdlSW50MzJGaWVsZChzZWxmLCBmaWVs
ZCldOwotICAgICAgfSBlbHNlIHsgIC8vIGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVNYXAKLSAg
ICAgICAgLy8gRXhhY3QgdHlwZSBoZXJlIGRvZXNuJ3QgbWF0dGVyLgotICAgICAgICBHUEJJbnQz
MkludDMyRGljdGlvbmFyeSAqZGljdCA9Ci0gICAgICAgICAgICBHUEJHZXRPYmplY3RJdmFyV2l0
aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgICAgW2RpY3Qgd3JpdGVUb0Nv
ZGVkT3V0cHV0U3RyZWFtOm91dHB1dCBhc0ZpZWxkOmZpZWxkXTsKLSAgICAgIH0KLSAgICAgIGJy
ZWFrOwotCi0vLyVQRERNLUVYUEFORCBGSUVMRF9DQVNFKEludDY0LCBJbnQ2NCkKLS8vIFRoaXMg
YmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0g
ICAgY2FzZSBHUEJEYXRhVHlwZUludDY0OgotICAgICAgaWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVs
ZFR5cGVSZXBlYXRlZCkgewotICAgICAgICB1aW50MzJfdCB0YWcgPSBmaWVsZC5pc1BhY2thYmxl
ID8gR1BCRmllbGRUYWcoZmllbGQpIDogMDsKLSAgICAgICAgR1BCSW50NjRBcnJheSAqYXJyYXkg
PQotICAgICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxm
LCBmaWVsZCk7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVJbnQ2NEFycmF5OmZpZWxkTnVtYmVyIHZh
bHVlczphcnJheSB0YWc6dGFnXTsKLSAgICAgIH0gZWxzZSBpZiAoZmllbGRUeXBlID09IEdQQkZp
ZWxkVHlwZVNpbmdsZSkgewotICAgICAgICBbb3V0cHV0IHdyaXRlSW50NjQ6ZmllbGROdW1iZXIK
LSAgICAgICAgICAgICAgICAgICAgIHZhbHVlOkdQQkdldE1lc3NhZ2VJbnQ2NEZpZWxkKHNlbGYs
IGZpZWxkKV07Ci0gICAgICB9IGVsc2UgeyAgLy8gZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZU1h
cAotICAgICAgICAvLyBFeGFjdCB0eXBlIGhlcmUgZG9lc24ndCBtYXR0ZXIuCi0gICAgICAgIEdQ
QkludDMySW50NjREaWN0aW9uYXJ5ICpkaWN0ID0KLSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2
YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICAgICAgICBbZGljdCB3cml0
ZVRvQ29kZWRPdXRwdXRTdHJlYW06b3V0cHV0IGFzRmllbGQ6ZmllbGRdOwotICAgICAgfQotICAg
ICAgYnJlYWs7Ci0KLS8vJVBERE0tRVhQQU5EIEZJRUxEX0NBU0UoU0ludDMyLCBJbnQzMikKLS8v
IFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5
LgotCi0gICAgY2FzZSBHUEJEYXRhVHlwZVNJbnQzMjoKLSAgICAgIGlmIChmaWVsZFR5cGUgPT0g
R1BCRmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAgICAgICAgdWludDMyX3QgdGFnID0gZmllbGQuaXNQ
YWNrYWJsZSA/IEdQQkZpZWxkVGFnKGZpZWxkKSA6IDA7Ci0gICAgICAgIEdQQkludDMyQXJyYXkg
KmFycmF5ID0KLSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVh
dGUoc2VsZiwgZmllbGQpOwotICAgICAgICBbb3V0cHV0IHdyaXRlU0ludDMyQXJyYXk6ZmllbGRO
dW1iZXIgdmFsdWVzOmFycmF5IHRhZzp0YWddOwotICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUg
PT0gR1BCRmllbGRUeXBlU2luZ2xlKSB7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVTSW50MzI6Zmll
bGROdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpHUEJHZXRNZXNzYWdlSW50MzJG
aWVsZChzZWxmLCBmaWVsZCldOwotICAgICAgfSBlbHNlIHsgIC8vIGZpZWxkVHlwZSA9PSBHUEJG
aWVsZFR5cGVNYXAKLSAgICAgICAgLy8gRXhhY3QgdHlwZSBoZXJlIGRvZXNuJ3QgbWF0dGVyLgot
ICAgICAgICBHUEJJbnQzMkludDMyRGljdGlvbmFyeSAqZGljdCA9Ci0gICAgICAgICAgICBHUEJH
ZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgICAg
W2RpY3Qgd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOm91dHB1dCBhc0ZpZWxkOmZpZWxkXTsKLSAg
ICAgIH0KLSAgICAgIGJyZWFrOwotCi0vLyVQRERNLUVYUEFORCBGSUVMRF9DQVNFKFNJbnQ2NCwg
SW50NjQpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBp
dCBkaXJlY3RseS4KLQotICAgIGNhc2UgR1BCRGF0YVR5cGVTSW50NjQ6Ci0gICAgICBpZiAoZmll
bGRUeXBlID09IEdQQkZpZWxkVHlwZVJlcGVhdGVkKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhZyA9
IGZpZWxkLmlzUGFja2FibGUgPyBHUEJGaWVsZFRhZyhmaWVsZCkgOiAwOwotICAgICAgICBHUEJJ
bnQ2NEFycmF5ICphcnJheSA9Ci0gICAgICAgICAgICBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxk
Tm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgICAgW291dHB1dCB3cml0ZVNJbnQ2NEFy
cmF5OmZpZWxkTnVtYmVyIHZhbHVlczphcnJheSB0YWc6dGFnXTsKLSAgICAgIH0gZWxzZSBpZiAo
ZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVNpbmdsZSkgewotICAgICAgICBbb3V0cHV0IHdyaXRl
U0ludDY0OmZpZWxkTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6R1BCR2V0TWVz
c2FnZUludDY0RmllbGQoc2VsZiwgZmllbGQpXTsKLSAgICAgIH0gZWxzZSB7ICAvLyBmaWVsZFR5
cGUgPT0gR1BCRmllbGRUeXBlTWFwCi0gICAgICAgIC8vIEV4YWN0IHR5cGUgaGVyZSBkb2Vzbid0
IG1hdHRlci4KLSAgICAgICAgR1BCSW50MzJJbnQ2NERpY3Rpb25hcnkgKmRpY3QgPQotICAgICAg
ICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7
Ci0gICAgICAgIFtkaWN0IHdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTpvdXRwdXQgYXNGaWVsZDpm
aWVsZF07Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotLy8lUERETS1FWFBBTkQgRklFTERfQ0FT
RShVSW50MzIsIFVJbnQzMikKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRv
IG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0gICAgY2FzZSBHUEJEYXRhVHlwZVVJbnQzMjoKLSAg
ICAgIGlmIChmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAgICAgICAgdWlu
dDMyX3QgdGFnID0gZmllbGQuaXNQYWNrYWJsZSA/IEdQQkZpZWxkVGFnKGZpZWxkKSA6IDA7Ci0g
ICAgICAgIEdQQlVJbnQzMkFycmF5ICphcnJheSA9Ci0gICAgICAgICAgICBHUEJHZXRPYmplY3RJ
dmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgICAgW291dHB1dCB3
cml0ZVVJbnQzMkFycmF5OmZpZWxkTnVtYmVyIHZhbHVlczphcnJheSB0YWc6dGFnXTsKLSAgICAg
IH0gZWxzZSBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVNpbmdsZSkgewotICAgICAgICBb
b3V0cHV0IHdyaXRlVUludDMyOmZpZWxkTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgdmFs
dWU6R1BCR2V0TWVzc2FnZVVJbnQzMkZpZWxkKHNlbGYsIGZpZWxkKV07Ci0gICAgICB9IGVsc2Ug
eyAgLy8gZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZU1hcAotICAgICAgICAvLyBFeGFjdCB0eXBl
IGhlcmUgZG9lc24ndCBtYXR0ZXIuCi0gICAgICAgIEdQQkludDMyVUludDMyRGljdGlvbmFyeSAq
ZGljdCA9Ci0gICAgICAgICAgICBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRl
KHNlbGYsIGZpZWxkKTsKLSAgICAgICAgW2RpY3Qgd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOm91
dHB1dCBhc0ZpZWxkOmZpZWxkXTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0vLyVQRERNLUVY
UEFORCBGSUVMRF9DQVNFKFVJbnQ2NCwgVUludDY0KQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlz
IGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLSAgICBjYXNlIEdQQkRhdGFU
eXBlVUludDY0OgotICAgICAgaWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVSZXBlYXRlZCkg
ewotICAgICAgICB1aW50MzJfdCB0YWcgPSBmaWVsZC5pc1BhY2thYmxlID8gR1BCRmllbGRUYWco
ZmllbGQpIDogMDsKLSAgICAgICAgR1BCVUludDY0QXJyYXkgKmFycmF5ID0KLSAgICAgICAgICAg
IEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICAg
ICAgICBbb3V0cHV0IHdyaXRlVUludDY0QXJyYXk6ZmllbGROdW1iZXIgdmFsdWVzOmFycmF5IHRh
Zzp0YWddOwotICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlU2luZ2xl
KSB7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVVSW50NjQ6ZmllbGROdW1iZXIKLSAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTpHUEJHZXRNZXNzYWdlVUludDY0RmllbGQoc2VsZiwgZmllbGQpXTsK
LSAgICAgIH0gZWxzZSB7ICAvLyBmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlTWFwCi0gICAgICAg
IC8vIEV4YWN0IHR5cGUgaGVyZSBkb2Vzbid0IG1hdHRlci4KLSAgICAgICAgR1BCSW50MzJVSW50
NjREaWN0aW9uYXJ5ICpkaWN0ID0KLSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmll
bGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICAgICAgICBbZGljdCB3cml0ZVRvQ29kZWRP
dXRwdXRTdHJlYW06b3V0cHV0IGFzRmllbGQ6ZmllbGRdOwotICAgICAgfQotICAgICAgYnJlYWs7
Ci0KLS8vJVBERE0tRVhQQU5EIEZJRUxEX0NBU0VfRlVMTChFbnVtLCBJbnQzMiwgRW51bSkKLS8v
IFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5
LgotCi0gICAgY2FzZSBHUEJEYXRhVHlwZUVudW06Ci0gICAgICBpZiAoZmllbGRUeXBlID09IEdQ
QkZpZWxkVHlwZVJlcGVhdGVkKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhZyA9IGZpZWxkLmlzUGFj
a2FibGUgPyBHUEJGaWVsZFRhZyhmaWVsZCkgOiAwOwotICAgICAgICBHUEJFbnVtQXJyYXkgKmFy
cmF5ID0KLSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUo
c2VsZiwgZmllbGQpOwotICAgICAgICBbb3V0cHV0IHdyaXRlRW51bUFycmF5OmZpZWxkTnVtYmVy
IHZhbHVlczphcnJheSB0YWc6dGFnXTsKLSAgICAgIH0gZWxzZSBpZiAoZmllbGRUeXBlID09IEdQ
QkZpZWxkVHlwZVNpbmdsZSkgewotICAgICAgICBbb3V0cHV0IHdyaXRlRW51bTpmaWVsZE51bWJl
cgotICAgICAgICAgICAgICAgICAgICB2YWx1ZTpHUEJHZXRNZXNzYWdlSW50MzJGaWVsZChzZWxm
LCBmaWVsZCldOwotICAgICAgfSBlbHNlIHsgIC8vIGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVN
YXAKLSAgICAgICAgLy8gRXhhY3QgdHlwZSBoZXJlIGRvZXNuJ3QgbWF0dGVyLgotICAgICAgICBH
UEJJbnQzMkVudW1EaWN0aW9uYXJ5ICpkaWN0ID0KLSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2
YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICAgICAgICBbZGljdCB3cml0
ZVRvQ29kZWRPdXRwdXRTdHJlYW06b3V0cHV0IGFzRmllbGQ6ZmllbGRdOwotICAgICAgfQotICAg
ICAgYnJlYWs7Ci0KLS8vJVBERE0tRVhQQU5EIEZJRUxEX0NBU0UyKEJ5dGVzKQotLy8gVGhpcyBi
bG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLSAg
ICBjYXNlIEdQQkRhdGFUeXBlQnl0ZXM6Ci0gICAgICBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxk
VHlwZVJlcGVhdGVkKSB7Ci0gICAgICAgIE5TQXJyYXkgKmFycmF5ID0gR1BCR2V0T2JqZWN0SXZh
cldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgICAgIFtvdXRwdXQgd3Jp
dGVCeXRlc0FycmF5OmZpZWxkTnVtYmVyIHZhbHVlczphcnJheV07Ci0gICAgICB9IGVsc2UgaWYg
KGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVTaW5nbGUpIHsKLSAgICAgICAgLy8gR1BCR2V0T2Jq
ZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZSgpIGF2b2lkcyBkb2luZyB0aGUgaGFzIGNoZWNr
Ci0gICAgICAgIC8vIGFnYWluLgotICAgICAgICBbb3V0cHV0IHdyaXRlQnl0ZXM6ZmllbGROdW1i
ZXIKLSAgICAgICAgICAgICAgICAgICAgIHZhbHVlOkdQQkdldE9iamVjdEl2YXJXaXRoRmllbGRO
b0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpXTsKLSAgICAgIH0gZWxzZSB7ICAvLyBmaWVsZFR5cGUg
PT0gR1BCRmllbGRUeXBlTWFwCi0gICAgICAgIC8vIEV4YWN0IHR5cGUgaGVyZSBkb2Vzbid0IG1h
dHRlci4KLSAgICAgICAgaWQgZGljdCA9IEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9j
cmVhdGUoc2VsZiwgZmllbGQpOwotICAgICAgICBHUEJEYXRhVHlwZSBtYXBLZXlEYXRhVHlwZSA9
IGZpZWxkLm1hcEtleURhdGFUeXBlOwotICAgICAgICBpZiAobWFwS2V5RGF0YVR5cGUgPT0gR1BC
RGF0YVR5cGVTdHJpbmcpIHsKLSAgICAgICAgICBHUEJEaWN0aW9uYXJ5V3JpdGVUb1N0cmVhbUlu
dGVybmFsSGVscGVyKG91dHB1dCwgZGljdCwgZmllbGQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIFtkaWN0IHdyaXRlVG9Db2RlZE91dHB1dFN0cmVhbTpvdXRwdXQgYXNGaWVsZDpmaWVs
ZF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0vLyVQRERNLUVYUEFORCBG
SUVMRF9DQVNFMihTdHJpbmcpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBk
byBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotICAgIGNhc2UgR1BCRGF0YVR5cGVTdHJpbmc6Ci0g
ICAgICBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVJlcGVhdGVkKSB7Ci0gICAgICAgIE5T
QXJyYXkgKmFycmF5ID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxm
LCBmaWVsZCk7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVTdHJpbmdBcnJheTpmaWVsZE51bWJlciB2
YWx1ZXM6YXJyYXldOwotICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBl
U2luZ2xlKSB7Ci0gICAgICAgIC8vIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVh
dGUoKSBhdm9pZHMgZG9pbmcgdGhlIGhhcyBjaGVjawotICAgICAgICAvLyBhZ2Fpbi4KLSAgICAg
ICAgW291dHB1dCB3cml0ZVN0cmluZzpmaWVsZE51bWJlcgotICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlOkdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQp
XTsKLSAgICAgIH0gZWxzZSB7ICAvLyBmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlTWFwCi0gICAg
ICAgIC8vIEV4YWN0IHR5cGUgaGVyZSBkb2Vzbid0IG1hdHRlci4KLSAgICAgICAgaWQgZGljdCA9
IEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwotICAg
ICAgICBHUEJEYXRhVHlwZSBtYXBLZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURhdGFUeXBlOwot
ICAgICAgICBpZiAobWFwS2V5RGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVTdHJpbmcpIHsKLSAgICAg
ICAgICBHUEJEaWN0aW9uYXJ5V3JpdGVUb1N0cmVhbUludGVybmFsSGVscGVyKG91dHB1dCwgZGlj
dCwgZmllbGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFtkaWN0IHdyaXRlVG9Db2Rl
ZE91dHB1dFN0cmVhbTpvdXRwdXQgYXNGaWVsZDpmaWVsZF07Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICAgIGJyZWFrOwotCi0vLyVQRERNLUVYUEFORCBGSUVMRF9DQVNFMihNZXNzYWdlKQotLy8g
VGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHku
Ci0KLSAgICBjYXNlIEdQQkRhdGFUeXBlTWVzc2FnZToKLSAgICAgIGlmIChmaWVsZFR5cGUgPT0g
R1BCRmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAgICAgICAgTlNBcnJheSAqYXJyYXkgPSBHUEJHZXRP
YmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgICAgW291
dHB1dCB3cml0ZU1lc3NhZ2VBcnJheTpmaWVsZE51bWJlciB2YWx1ZXM6YXJyYXldOwotICAgICAg
fSBlbHNlIGlmIChmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlU2luZ2xlKSB7Ci0gICAgICAgIC8v
IEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoKSBhdm9pZHMgZG9pbmcgdGhl
IGhhcyBjaGVjawotICAgICAgICAvLyBhZ2Fpbi4KLSAgICAgICAgW291dHB1dCB3cml0ZU1lc3Nh
Z2U6ZmllbGROdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6R1BCR2V0T2JqZWN0
SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCldOwotICAgICAgfSBlbHNlIHsg
IC8vIGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVNYXAKLSAgICAgICAgLy8gRXhhY3QgdHlwZSBo
ZXJlIGRvZXNuJ3QgbWF0dGVyLgotICAgICAgICBpZCBkaWN0ID0gR1BCR2V0T2JqZWN0SXZhcldp
dGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgICAgIEdQQkRhdGFUeXBlIG1h
cEtleURhdGFUeXBlID0gZmllbGQubWFwS2V5RGF0YVR5cGU7Ci0gICAgICAgIGlmIChtYXBLZXlE
YXRhVHlwZSA9PSBHUEJEYXRhVHlwZVN0cmluZykgewotICAgICAgICAgIEdQQkRpY3Rpb25hcnlX
cml0ZVRvU3RyZWFtSW50ZXJuYWxIZWxwZXIob3V0cHV0LCBkaWN0LCBmaWVsZCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgW2RpY3Qgd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOm91dHB1
dCBhc0ZpZWxkOmZpZWxkXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLS8v
JVBERE0tRVhQQU5EIEZJRUxEX0NBU0UyKEdyb3VwKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlz
IGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLSAgICBjYXNlIEdQQkRhdGFU
eXBlR3JvdXA6Ci0gICAgICBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVJlcGVhdGVkKSB7
Ci0gICAgICAgIE5TQXJyYXkgKmFycmF5ID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0
b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgICAgIFtvdXRwdXQgd3JpdGVHcm91cEFycmF5OmZp
ZWxkTnVtYmVyIHZhbHVlczphcnJheV07Ci0gICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PSBH
UEJGaWVsZFR5cGVTaW5nbGUpIHsKLSAgICAgICAgLy8gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVs
ZE5vQXV0b2NyZWF0ZSgpIGF2b2lkcyBkb2luZyB0aGUgaGFzIGNoZWNrCi0gICAgICAgIC8vIGFn
YWluLgotICAgICAgICBbb3V0cHV0IHdyaXRlR3JvdXA6ZmllbGROdW1iZXIKLSAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlOkdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2Vs
ZiwgZmllbGQpXTsKLSAgICAgIH0gZWxzZSB7ICAvLyBmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBl
TWFwCi0gICAgICAgIC8vIEV4YWN0IHR5cGUgaGVyZSBkb2Vzbid0IG1hdHRlci4KLSAgICAgICAg
aWQgZGljdCA9IEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmll
bGQpOwotICAgICAgICBHUEJEYXRhVHlwZSBtYXBLZXlEYXRhVHlwZSA9IGZpZWxkLm1hcEtleURh
dGFUeXBlOwotICAgICAgICBpZiAobWFwS2V5RGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVTdHJpbmcp
IHsKLSAgICAgICAgICBHUEJEaWN0aW9uYXJ5V3JpdGVUb1N0cmVhbUludGVybmFsSGVscGVyKG91
dHB1dCwgZGljdCwgZmllbGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFtkaWN0IHdy
aXRlVG9Db2RlZE91dHB1dFN0cmVhbTpvdXRwdXQgYXNGaWVsZDpmaWVsZF07Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0vLyVQRERNLUVYUEFORC1FTkQgKDE4IGV4cGFuc2lv
bnMpCi0gIH0KLX0KLQotI3ByYWdtYSBtYXJrIC0gRXh0ZW5zaW9ucwotCi0tIChpZClnZXRFeHRl
bnNpb246KEdQQkV4dGVuc2lvbkRlc2NyaXB0b3IgKilleHRlbnNpb24gewotICBDaGVja0V4dGVu
c2lvbihzZWxmLCBleHRlbnNpb24pOwotICBpZCB2YWx1ZSA9IFtleHRlbnNpb25NYXBfIG9iamVj
dEZvcktleTpleHRlbnNpb25dOwotICBpZiAodmFsdWUgIT0gbmlsKSB7Ci0gICAgcmV0dXJuIHZh
bHVlOwotICB9Ci0KLSAgLy8gTm8gZGVmYXVsdCBmb3IgcmVwZWF0ZWQuCi0gIGlmIChleHRlbnNp
b24uaXNSZXBlYXRlZCkgewotICAgIHJldHVybiBuaWw7Ci0gIH0KLSAgLy8gTm9uIG1lc3NhZ2Vz
IGdldCB0aGVpciBkZWZhdWx0LgotICBpZiAoIUdQQkV4dGVuc2lvbklzTWVzc2FnZShleHRlbnNp
b24pKSB7Ci0gICAgcmV0dXJuIGV4dGVuc2lvbi5kZWZhdWx0VmFsdWU7Ci0gIH0KLQotICAvLyBD
aGVjayBmb3IgYW4gYXV0b2NyZWF0ZWQgdmFsdWUuCi0gIEdQQlByZXBhcmVSZWFkT25seVNlbWFw
aG9yZShzZWxmKTsKLSAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQocmVhZE9ubHlTZW1hcGhvcmVf
LCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOwotICB2YWx1ZSA9IFthdXRvY3JlYXRlZEV4dGVuc2lv
bk1hcF8gb2JqZWN0Rm9yS2V5OmV4dGVuc2lvbl07Ci0gIGlmICghdmFsdWUpIHsKLSAgICAvLyBB
dXRvIGNyZWF0ZSB0aGUgbWVzc2FnZSBleHRlbnNpb25zIHRvIG1hdGNoIG5vcm1hbCBmaWVsZHMu
Ci0gICAgdmFsdWUgPSBDcmVhdGVNZXNzYWdlV2l0aEF1dG9jcmVhdG9yRm9yRXh0ZW5zaW9uKGV4
dGVuc2lvbi5tc2dDbGFzcywgc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uKTsKLQotICAgIGlmIChhdXRvY3JlYXRlZEV4
dGVuc2lvbk1hcF8gPT0gbmlsKSB7Ci0gICAgICBhdXRvY3JlYXRlZEV4dGVuc2lvbk1hcF8gPSBb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIH0KLQotICAgIC8vIFdlIGNh
bid0IHNpbXBseSBjYWxsIHNldEV4dGVuc2lvbiBoZXJlIGJlY2F1c2UgdGhhdCB3b3VsZCBjbGVh
ciB0aGUgbmV3Ci0gICAgLy8gdmFsdWUncyBhdXRvY3JlYXRvci4KLSAgICBbYXV0b2NyZWF0ZWRF
eHRlbnNpb25NYXBfIHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6ZXh0ZW5zaW9uXTsKLSAgICBbdmFs
dWUgcmVsZWFzZV07Ci0gIH0KLQotICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKHJlYWRPbmx5
U2VtYXBob3JlXyk7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotLSAoaWQpZ2V0RXhpc3RpbmdFeHRl
bnNpb246KEdQQkV4dGVuc2lvbkRlc2NyaXB0b3IgKilleHRlbnNpb24gewotICAvLyBUaGlzIGlz
IGFuIGludGVybmFsIG1ldGhvZCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgQ2hlY2tFeHRlbnNp
b24oKS4KLSAgcmV0dXJuIFtleHRlbnNpb25NYXBfIG9iamVjdEZvcktleTpleHRlbnNpb25dOwot
fQotCi0tIChCT09MKWhhc0V4dGVuc2lvbjooR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciAqKWV4dGVu
c2lvbiB7Ci0jaWYgREVCVUcKLSAgQ2hlY2tFeHRlbnNpb24oc2VsZiwgZXh0ZW5zaW9uKTsKLSNl
bmRpZiAgLy8gREVCVUcKLSAgcmV0dXJuIG5pbCAhPSBbZXh0ZW5zaW9uTWFwXyBvYmplY3RGb3JL
ZXk6ZXh0ZW5zaW9uXTsKLX0KLQotLSAoTlNBcnJheSAqKWV4dGVuc2lvbnNDdXJyZW50bHlTZXQg
ewotICByZXR1cm4gW2V4dGVuc2lvbk1hcF8gYWxsS2V5c107Ci19Ci0KLS0gKHZvaWQpd3JpdGVF
eHRlbnNpb25zVG9Db2RlZE91dHB1dFN0cmVhbTooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRw
dXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTooR1BCRXh0ZW5z
aW9uUmFuZ2UpcmFuZ2UgewotICBOU0FycmF5ICpzb3J0ZWRFeHRlbnNpb25zID0gW1tleHRlbnNp
b25NYXBfIGFsbEtleXNdCi0gICAgICBzb3J0ZWRBcnJheVVzaW5nU2VsZWN0b3I6QHNlbGVjdG9y
KGNvbXBhcmVCeUZpZWxkTnVtYmVyOildOwotICB1aW50MzJfdCBzdGFydCA9IHJhbmdlLnN0YXJ0
OwotICB1aW50MzJfdCBlbmQgPSByYW5nZS5lbmQ7Ci0gIGZvciAoR1BCRXh0ZW5zaW9uRGVzY3Jp
cHRvciAqZXh0ZW5zaW9uIGluIHNvcnRlZEV4dGVuc2lvbnMpIHsKLSAgICB1aW50MzJfdCBmaWVs
ZE51bWJlciA9IGV4dGVuc2lvbi5maWVsZE51bWJlcjsKLSAgICBpZiAoZmllbGROdW1iZXIgPj0g
c3RhcnQgJiYgZmllbGROdW1iZXIgPCBlbmQpIHsKLSAgICAgIGlkIHZhbHVlID0gW2V4dGVuc2lv
bk1hcF8gb2JqZWN0Rm9yS2V5OmV4dGVuc2lvbl07Ci0gICAgICBHUEJXcml0ZUV4dGVuc2lvblZh
bHVlVG9PdXRwdXRTdHJlYW0oZXh0ZW5zaW9uLCB2YWx1ZSwgb3V0cHV0KTsKLSAgICB9Ci0gIH0K
LX0KLQotLSAoTlNBcnJheSAqKXNvcnRlZEV4dGVuc2lvbnNJblVzZSB7Ci0gIHJldHVybiBbW2V4
dGVuc2lvbk1hcF8gYWxsS2V5c10KLSAgICAgIHNvcnRlZEFycmF5VXNpbmdTZWxlY3RvcjpAc2Vs
ZWN0b3IoY29tcGFyZUJ5RmllbGROdW1iZXI6KV07Ci19Ci0KLS0gKHZvaWQpc2V0RXh0ZW5zaW9u
OihHUEJFeHRlbnNpb25EZXNjcmlwdG9yICopZXh0ZW5zaW9uIHZhbHVlOihpZCl2YWx1ZSB7Ci0g
IGlmICghdmFsdWUpIHsKLSAgICBbc2VsZiBjbGVhckV4dGVuc2lvbjpleHRlbnNpb25dOwotICAg
IHJldHVybjsKLSAgfQotCi0gIENoZWNrRXh0ZW5zaW9uKHNlbGYsIGV4dGVuc2lvbik7Ci0KLSAg
aWYgKGV4dGVuc2lvbi5yZXBlYXRlZCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFs
aWRBcmd1bWVudEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpAIk11c3QgY2FsbCBh
ZGRFeHRlbnNpb24oKSBmb3IgcmVwZWF0ZWQgdHlwZXMuIl07Ci0gIH0KLQotICBpZiAoZXh0ZW5z
aW9uTWFwXyA9PSBuaWwpIHsKLSAgICBleHRlbnNpb25NYXBfID0gW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XTsKLSAgfQotCi0gIC8vIFRoaXMgcG9pbnRsZXNzIGNhc3QgaXMgZm9y
IENMQU5HX1dBUk5fTlVMTEFCTEVfVE9fTk9OTlVMTF9DT05WRVJTSU9OLgotICAvLyBXaXRob3V0
IGl0LCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIHdlJ3JlIHBhc3NpbmcgYW4gaWQgbnVsbGFibGUg
d2hlbgotICAvLyBzZXRPYmplY3Q6Zm9yS2V5OiByZXF1aXJlcyBhIGlkIG5vbm51bGwgZm9yIHRo
ZSB2YWx1ZS4gVGhlIGNoZWNrIGZvcgotICAvLyAhdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBt
ZXRob2QgZW5zdXJlcyBpdCBpc24ndCBuaWwsIGJ1dCB0aGUgY2hlY2sKLSAgLy8gaXNuJ3Qgc21h
cnQgZW5vdWdoIHRvIHJlYWxpemUgdGhhdC4KLSAgW2V4dGVuc2lvbk1hcF8gc2V0T2JqZWN0Oihp
ZCl2YWx1ZSBmb3JLZXk6ZXh0ZW5zaW9uXTsKLQotICBHUEJFeHRlbnNpb25EZXNjcmlwdG9yICpk
ZXNjcmlwdG9yID0gZXh0ZW5zaW9uOwotCi0gIGlmIChHUEJFeHRlbnNpb25Jc01lc3NhZ2UoZGVz
Y3JpcHRvcikgJiYgIWRlc2NyaXB0b3IuaXNSZXBlYXRlZCkgewotICAgIEdQQk1lc3NhZ2UgKmF1
dG9jcmVhdGVkVmFsdWUgPQotICAgICAgICBbW2F1dG9jcmVhdGVkRXh0ZW5zaW9uTWFwXyBvYmpl
Y3RGb3JLZXk6ZXh0ZW5zaW9uXSByZXRhaW5dOwotICAgIC8vIE11c3QgcmVtb3ZlIGZyb20gdGhl
IG1hcCBiZWZvcmUgY2FsbGluZyBHUEJDbGVhck1lc3NhZ2VBdXRvY3JlYXRvcigpIHNvCi0gICAg
Ly8gdGhhdCBHUEJDbGVhck1lc3NhZ2VBdXRvY3JlYXRvcigpIGtub3dzIGl0cyBzYWZlIHRvIGNs
ZWFyLgotICAgIFthdXRvY3JlYXRlZEV4dGVuc2lvbk1hcF8gcmVtb3ZlT2JqZWN0Rm9yS2V5OmV4
dGVuc2lvbl07Ci0gICAgR1BCQ2xlYXJNZXNzYWdlQXV0b2NyZWF0b3IoYXV0b2NyZWF0ZWRWYWx1
ZSk7Ci0gICAgW2F1dG9jcmVhdGVkVmFsdWUgcmVsZWFzZV07Ci0gIH0KLQotICBHUEJCZWNvbWVW
aXNpYmxlVG9BdXRvY3JlYXRvcihzZWxmKTsKLX0KLQotLSAodm9pZClhZGRFeHRlbnNpb246KEdQ
QkV4dGVuc2lvbkRlc2NyaXB0b3IgKilleHRlbnNpb24gdmFsdWU6KGlkKXZhbHVlIHsKLSAgQ2hl
Y2tFeHRlbnNpb24oc2VsZiwgZXh0ZW5zaW9uKTsKLQotICBpZiAoIWV4dGVuc2lvbi5yZXBlYXRl
ZCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgot
ICAgICAgICAgICAgICAgIGZvcm1hdDpAIk11c3QgY2FsbCBzZXRFeHRlbnNpb24oKSBmb3Igc2lu
Z3VsYXIgdHlwZXMuIl07Ci0gIH0KLQotICBpZiAoZXh0ZW5zaW9uTWFwXyA9PSBuaWwpIHsKLSAg
ICBleHRlbnNpb25NYXBfID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAg
fQotICBOU011dGFibGVBcnJheSAqbGlzdCA9IFtleHRlbnNpb25NYXBfIG9iamVjdEZvcktleTpl
eHRlbnNpb25dOwotICBpZiAobGlzdCA9PSBuaWwpIHsKLSAgICBsaXN0ID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5XTsKLSAgICBbZXh0ZW5zaW9uTWFwXyBzZXRPYmplY3Q6bGlzdCBmb3JLZXk6ZXh0
ZW5zaW9uXTsKLSAgfQotCi0gIFtsaXN0IGFkZE9iamVjdDp2YWx1ZV07Ci0gIEdQQkJlY29tZVZp
c2libGVUb0F1dG9jcmVhdG9yKHNlbGYpOwotfQotCi0tICh2b2lkKXNldEV4dGVuc2lvbjooR1BC
RXh0ZW5zaW9uRGVzY3JpcHRvciAqKWV4dGVuc2lvbgotICAgICAgICAgICAgICAgaW5kZXg6KE5T
VUludGVnZXIpaWR4Ci0gICAgICAgICAgICAgICB2YWx1ZTooaWQpdmFsdWUgewotICBDaGVja0V4
dGVuc2lvbihzZWxmLCBleHRlbnNpb24pOwotCi0gIGlmICghZXh0ZW5zaW9uLnJlcGVhdGVkKSB7
Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAg
ICAgICAgICAgICAgZm9ybWF0OkAiTXVzdCBjYWxsIHNldEV4dGVuc2lvbigpIGZvciBzaW5ndWxh
ciB0eXBlcy4iXTsKLSAgfQotCi0gIGlmIChleHRlbnNpb25NYXBfID09IG5pbCkgewotICAgIGV4
dGVuc2lvbk1hcF8gPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICB9Ci0K
LSAgTlNNdXRhYmxlQXJyYXkgKmxpc3QgPSBbZXh0ZW5zaW9uTWFwXyBvYmplY3RGb3JLZXk6ZXh0
ZW5zaW9uXTsKLQotICBbbGlzdCByZXBsYWNlT2JqZWN0QXRJbmRleDppZHggd2l0aE9iamVjdDp2
YWx1ZV07Ci0gIEdQQkJlY29tZVZpc2libGVUb0F1dG9jcmVhdG9yKHNlbGYpOwotfQotCi0tICh2
b2lkKWNsZWFyRXh0ZW5zaW9uOihHUEJFeHRlbnNpb25EZXNjcmlwdG9yICopZXh0ZW5zaW9uIHsK
LSAgQ2hlY2tFeHRlbnNpb24oc2VsZiwgZXh0ZW5zaW9uKTsKLQotICAvLyBPbmx5IGJlY29tZSB2
aXNpYmxlIGlmIHRoZXJlIHdhcyBhY3R1YWxseSBhIHZhbHVlIHRvIGNsZWFyLgotICBpZiAoW2V4
dGVuc2lvbk1hcF8gb2JqZWN0Rm9yS2V5OmV4dGVuc2lvbl0pIHsKLSAgICBbZXh0ZW5zaW9uTWFw
XyByZW1vdmVPYmplY3RGb3JLZXk6ZXh0ZW5zaW9uXTsKLSAgICBHUEJCZWNvbWVWaXNpYmxlVG9B
dXRvY3JlYXRvcihzZWxmKTsKLSAgfQotfQotCi0jcHJhZ21hIG1hcmsgLSBtZXJnZUZyb20KLQot
LSAodm9pZCltZXJnZUZyb21EYXRhOihOU0RhdGEgKilkYXRhCi0gICAgZXh0ZW5zaW9uUmVnaXN0
cnk6KEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICopZXh0ZW5zaW9uUmVnaXN0cnkgewotICBHUEJDb2Rl
ZElucHV0U3RyZWFtICppbnB1dCA9IFtbR1BCQ29kZWRJbnB1dFN0cmVhbSBhbGxvY10gaW5pdFdp
dGhEYXRhOmRhdGFdOwotICBbc2VsZiBtZXJnZUZyb21Db2RlZElucHV0U3RyZWFtOmlucHV0IGV4
dGVuc2lvblJlZ2lzdHJ5OmV4dGVuc2lvblJlZ2lzdHJ5XTsKLSAgW2lucHV0IGNoZWNrTGFzdFRh
Z1dhczowXTsKLSAgW2lucHV0IHJlbGVhc2VdOwotfQotCi0jcHJhZ21hIG1hcmsgLSBtZXJnZURl
bGltaXRlZEZyb20KLQotLSAodm9pZCltZXJnZURlbGltaXRlZEZyb21Db2RlZElucHV0U3RyZWFt
OihHUEJDb2RlZElucHV0U3RyZWFtICopaW5wdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICBl
eHRlbnNpb25SZWdpc3RyeTooR1BCRXh0ZW5zaW9uUmVnaXN0cnkgKilleHRlbnNpb25SZWdpc3Ry
eSB7Ci0gIEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0ZSAqc3RhdGUgPSAmaW5wdXQtPnN0YXRlXzsK
LSAgaWYgKEdQQkNvZGVkSW5wdXRTdHJlYW1Jc0F0RW5kKHN0YXRlKSkgewotICAgIHJldHVybjsK
LSAgfQotICBOU0RhdGEgKmRhdGEgPSBHUEJDb2RlZElucHV0U3RyZWFtUmVhZFJldGFpbmVkQnl0
ZXNOb0NvcHkoc3RhdGUpOwotICBpZiAoZGF0YSA9PSBuaWwpIHsKLSAgICByZXR1cm47Ci0gIH0K
LSAgW3NlbGYgbWVyZ2VGcm9tRGF0YTpkYXRhIGV4dGVuc2lvblJlZ2lzdHJ5OmV4dGVuc2lvblJl
Z2lzdHJ5XTsKLSAgW2RhdGEgcmVsZWFzZV07Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFBhcnNlIEZy
b20gRGF0YSBTdXBwb3J0Ci0KLSsgKGluc3RhbmNldHlwZSlwYXJzZUZyb21EYXRhOihOU0RhdGEg
KilkYXRhIGVycm9yOihOU0Vycm9yICoqKWVycm9yUHRyIHsKLSAgcmV0dXJuIFtzZWxmIHBhcnNl
RnJvbURhdGE6ZGF0YSBleHRlbnNpb25SZWdpc3RyeTpuaWwgZXJyb3I6ZXJyb3JQdHJdOwotfQot
Ci0rIChpbnN0YW5jZXR5cGUpcGFyc2VGcm9tRGF0YTooTlNEYXRhICopZGF0YQotICAgICAgICAg
ICAgZXh0ZW5zaW9uUmVnaXN0cnk6KEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICopZXh0ZW5zaW9uUmVn
aXN0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOihOU0Vycm9yICoqKWVycm9yUHRy
IHsKLSAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhCi0gICAgICAgICAg
ICAgICAgICAgZXh0ZW5zaW9uUmVnaXN0cnk6ZXh0ZW5zaW9uUmVnaXN0cnkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcjplcnJvclB0cl0gYXV0b3JlbGVhc2VdOwotfQotCi0r
IChpbnN0YW5jZXR5cGUpcGFyc2VGcm9tQ29kZWRJbnB1dFN0cmVhbTooR1BCQ29kZWRJbnB1dFN0
cmVhbSAqKWlucHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25SZWdpc3RyeToo
R1BCRXh0ZW5zaW9uUmVnaXN0cnkgKilleHRlbnNpb25SZWdpc3RyeQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3JQdHIgewotICByZXR1
cm4KLSAgICAgIFtbW3NlbGYgYWxsb2NdIGluaXRXaXRoQ29kZWRJbnB1dFN0cmVhbTppbnB1dAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvblJlZ2lzdHJ5OmV4dGVuc2lvblJl
Z2lzdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ZXJy
b3JQdHJdIGF1dG9yZWxlYXNlXTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gUGFyc2UgRGVsaW1pdGVk
IEZyb20gRGF0YSBTdXBwb3J0Ci0KLSsgKGluc3RhbmNldHlwZSlwYXJzZURlbGltaXRlZEZyb21D
b2RlZElucHV0U3RyZWFtOihHUEJDb2RlZElucHV0U3RyZWFtICopaW5wdXQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvblJlZ2lzdHJ5OgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChHUEJFeHRlbnNpb25SZWdpc3RyeSAqKWV4dGVuc2lvblJl
Z2lzdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cjooTlNFcnJvciAqKillcnJvclB0ciB7Ci0gIEdQQk1lc3NhZ2UgKm1lc3NhZ2UgPSBbW1tzZWxm
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gIEB0cnkgewotICAgIFttZXNzYWdlIG1lcmdl
RGVsaW1pdGVkRnJvbUNvZGVkSW5wdXRTdHJlYW06aW5wdXQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dGVuc2lvblJlZ2lzdHJ5OmV4dGVuc2lvblJlZ2lzdHJ5XTsKLSAgICBpZiAo
ZXJyb3JQdHIpIHsKLSAgICAgICplcnJvclB0ciA9IG5pbDsKLSAgICB9Ci0gIH0KLSAgQGNhdGNo
IChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgbWVzc2FnZSA9IG5pbDsKLSAgICBpZiAo
ZXJyb3JQdHIpIHsKLSAgICAgICplcnJvclB0ciA9IE1lc3NhZ2VFcnJvcldpdGhSZWFzb24oR1BC
TWVzc2FnZUVycm9yQ29kZU1hbGZvcm1lZERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi5yZWFzb24pOwotICAgIH0KLSAgfQotI2lmZGVmIERF
QlVHCi0gIGlmIChtZXNzYWdlICYmICFtZXNzYWdlLmluaXRpYWxpemVkKSB7Ci0gICAgbWVzc2Fn
ZSA9IG5pbDsKLSAgICBpZiAoZXJyb3JQdHIpIHsKLSAgICAgICplcnJvclB0ciA9IE1lc3NhZ2VF
cnJvcihHUEJNZXNzYWdlRXJyb3JDb2RlTWlzc2luZ1JlcXVpcmVkRmllbGQsIG5pbCk7Ci0gICAg
fQotICB9Ci0jZW5kaWYKLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFVu
a25vd24gRmllbGQgU3VwcG9ydAotCi0tIChHUEJVbmtub3duRmllbGRTZXQgKil1bmtub3duRmll
bGRzIHsKLSAgcmV0dXJuIHVua25vd25GaWVsZHNfOwotfQotCi0tICh2b2lkKXNldFVua25vd25G
aWVsZHM6KEdQQlVua25vd25GaWVsZFNldCAqKXVua25vd25GaWVsZHMgewotICBpZiAodW5rbm93
bkZpZWxkcyAhPSB1bmtub3duRmllbGRzXykgewotICAgIFt1bmtub3duRmllbGRzXyByZWxlYXNl
XTsKLSAgICB1bmtub3duRmllbGRzXyA9IFt1bmtub3duRmllbGRzIGNvcHldOwotICAgIEdQQkJl
Y29tZVZpc2libGVUb0F1dG9jcmVhdG9yKHNlbGYpOwotICB9Ci19Ci0KLS0gKHZvaWQpcGFyc2VN
ZXNzYWdlU2V0OihHUEJDb2RlZElucHV0U3RyZWFtICopaW5wdXQKLSAgICAgIGV4dGVuc2lvblJl
Z2lzdHJ5OihHUEJFeHRlbnNpb25SZWdpc3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5IHsKLSAgdWlu
dDMyX3QgdHlwZUlkID0gMDsKLSAgTlNEYXRhICpyYXdCeXRlcyA9IG5pbDsKLSAgR1BCRXh0ZW5z
aW9uRGVzY3JpcHRvciAqZXh0ZW5zaW9uID0gbmlsOwotICBHUEJDb2RlZElucHV0U3RyZWFtU3Rh
dGUgKnN0YXRlID0gJmlucHV0LT5zdGF0ZV87Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgdWludDMy
X3QgdGFnID0gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRUYWcoc3RhdGUpOwotICAgIGlmICh0YWcg
PT0gMCkgewotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKHRhZyA9PSBHUEJXaXJlRm9y
bWF0TWVzc2FnZVNldFR5cGVJZFRhZykgewotICAgICAgdHlwZUlkID0gR1BCQ29kZWRJbnB1dFN0
cmVhbVJlYWRVSW50MzIoc3RhdGUpOwotICAgICAgaWYgKHR5cGVJZCAhPSAwKSB7Ci0gICAgICAg
IGV4dGVuc2lvbiA9IFtleHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25Gb3JEZXNjcmlwdG9yOltz
ZWxmIGRlc2NyaXB0b3JdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpZWxkTnVtYmVyOnR5cGVJZF07Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmICh0
YWcgPT0gR1BCV2lyZUZvcm1hdE1lc3NhZ2VTZXRNZXNzYWdlVGFnKSB7Ci0gICAgICByYXdCeXRl
cyA9Ci0gICAgICAgICAgW0dQQkNvZGVkSW5wdXRTdHJlYW1SZWFkUmV0YWluZWRCeXRlc05vQ29w
eShzdGF0ZSkgYXV0b3JlbGVhc2VdOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoIVtpbnB1dCBz
a2lwRmllbGQ6dGFnXSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBbaW5wdXQgY2hlY2tMYXN0VGFnV2FzOkdQQldpcmVGb3JtYXRNZXNzYWdlU2V0SXRlbUVuZFRh
Z107Ci0KLSAgaWYgKHJhd0J5dGVzICE9IG5pbCAmJiB0eXBlSWQgIT0gMCkgewotICAgIGlmIChl
eHRlbnNpb24gIT0gbmlsKSB7Ci0gICAgICBHUEJDb2RlZElucHV0U3RyZWFtICpuZXdJbnB1dCA9
Ci0gICAgICAgICAgW1tHUEJDb2RlZElucHV0U3RyZWFtIGFsbG9jXSBpbml0V2l0aERhdGE6cmF3
Qnl0ZXNdOwotICAgICAgR1BCRXh0ZW5zaW9uTWVyZ2VGcm9tSW5wdXRTdHJlYW0oZXh0ZW5zaW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLnBhY2th
YmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5wdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25SZWdpc3RyeSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpOwotICAgICAgW25l
d0lucHV0IHJlbGVhc2VdOwotICAgIH0gZWxzZSB7Ci0gICAgICBHUEJVbmtub3duRmllbGRTZXQg
KnVua25vd25GaWVsZHMgPSBHZXRPck1ha2VVbmtub3duRmllbGRzKHNlbGYpOwotICAgICAgW3Vu
a25vd25GaWVsZHMgbWVyZ2VNZXNzYWdlU2V0TWVzc2FnZTp0eXBlSWQgZGF0YTpyYXdCeXRlc107
Ci0gICAgfQotICB9Ci19Ci0KLS0gKEJPT0wpcGFyc2VVbmtub3duRmllbGQ6KEdQQkNvZGVkSW5w
dXRTdHJlYW0gKilpbnB1dAotICAgICAgICBleHRlbnNpb25SZWdpc3RyeTooR1BCRXh0ZW5zaW9u
UmVnaXN0cnkgKilleHRlbnNpb25SZWdpc3RyeQotICAgICAgICAgICAgICAgICAgICAgIHRhZzoo
dWludDMyX3QpdGFnIHsKLSAgR1BCV2lyZUZvcm1hdCB3aXJlVHlwZSA9IEdQQldpcmVGb3JtYXRH
ZXRUYWdXaXJlVHlwZSh0YWcpOwotICBpbnQzMl90IGZpZWxkTnVtYmVyID0gR1BCV2lyZUZvcm1h
dEdldFRhZ0ZpZWxkTnVtYmVyKHRhZyk7Ci0KLSAgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9
IFtzZWxmIGRlc2NyaXB0b3JdOwotICBHUEJFeHRlbnNpb25EZXNjcmlwdG9yICpleHRlbnNpb24g
PQotICAgICAgW2V4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvbkZvckRlc2NyaXB0b3I6ZGVzY3Jp
cHRvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROdW1iZXI6Zmll
bGROdW1iZXJdOwotICBpZiAoZXh0ZW5zaW9uID09IG5pbCkgewotICAgIGlmIChkZXNjcmlwdG9y
LndpcmVGb3JtYXQgJiYgR1BCV2lyZUZvcm1hdE1lc3NhZ2VTZXRJdGVtVGFnID09IHRhZykgewot
ICAgICAgW3NlbGYgcGFyc2VNZXNzYWdlU2V0OmlucHV0IGV4dGVuc2lvblJlZ2lzdHJ5OmV4dGVu
c2lvblJlZ2lzdHJ5XTsKLSAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICB9IGVsc2UgewotICAg
IGlmIChleHRlbnNpb24ud2lyZVR5cGUgPT0gd2lyZVR5cGUpIHsKLSAgICAgIEdQQkV4dGVuc2lv
bk1lcmdlRnJvbUlucHV0U3RyZWFtKGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dGVuc2lvbi5wYWNrYWJsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXh0ZW5zaW9uUmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmKTsKLSAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIC8vIFByaW1p
dGl2ZSwgcmVwZWF0ZWQgdHlwZXMgY2FuIGJlIHBhY2tlZCBvbiB1bnBhY2tlZCBvbiB0aGUgd2ly
ZSwgYW5kIGFyZQotICAgIC8vIHBhcnNlZCBlaXRoZXIgd2F5LgotICAgIGlmIChbZXh0ZW5zaW9u
IGlzUmVwZWF0ZWRdICYmCi0gICAgICAgICFHUEJEYXRhVHlwZUlzT2JqZWN0KGV4dGVuc2lvbi0+
ZGVzY3JpcHRpb25fLT5kYXRhVHlwZSkgJiYKLSAgICAgICAgKGV4dGVuc2lvbi5hbHRlcm5hdGVX
aXJlVHlwZSA9PSB3aXJlVHlwZSkpIHsKLSAgICAgIEdQQkV4dGVuc2lvbk1lcmdlRnJvbUlucHV0
U3RyZWFtKGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICFleHRlbnNpb24ucGFja2FibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVu
c2lvblJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zik7Ci0gICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgfQotICBpZiAoW0dQQlVua25vd25GaWVs
ZFNldCBpc0ZpZWxkVGFnOnRhZ10pIHsKLSAgICBHUEJVbmtub3duRmllbGRTZXQgKnVua25vd25G
aWVsZHMgPSBHZXRPck1ha2VVbmtub3duRmllbGRzKHNlbGYpOwotICAgIHJldHVybiBbdW5rbm93
bkZpZWxkcyBtZXJnZUZpZWxkRnJvbTp0YWcgaW5wdXQ6aW5wdXRdOwotICB9IGVsc2UgewotICAg
IHJldHVybiBOTzsKLSAgfQotfQotCi0tICh2b2lkKWFkZFVua25vd25NYXBFbnRyeTooaW50MzJf
dClmaWVsZE51bSB2YWx1ZTooTlNEYXRhICopZGF0YSB7Ci0gIEdQQlVua25vd25GaWVsZFNldCAq
dW5rbm93bkZpZWxkcyA9IEdldE9yTWFrZVVua25vd25GaWVsZHMoc2VsZik7Ci0gIFt1bmtub3du
RmllbGRzIGFkZFVua25vd25NYXBFbnRyeTpmaWVsZE51bSB2YWx1ZTpkYXRhXTsKLX0KLQotI3By
YWdtYSBtYXJrIC0gTWVyZ2VGcm9tQ29kZWRJbnB1dFN0cmVhbSBTdXBwb3J0Ci0KLXN0YXRpYyB2
b2lkIE1lcmdlU2luZ2xlRmllbGRGcm9tQ29kZWRJbnB1dFN0cmVhbSgKLSAgICBHUEJNZXNzYWdl
ICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLCBHUEJGaWxlU3ludGF4IHN5bnRheCwK
LSAgICBHUEJDb2RlZElucHV0U3RyZWFtICppbnB1dCwgR1BCRXh0ZW5zaW9uUmVnaXN0cnkgKmV4
dGVuc2lvblJlZ2lzdHJ5KSB7Ci0gIEdQQkRhdGFUeXBlIGZpZWxkRGF0YVR5cGUgPSBHUEJHZXRG
aWVsZERhdGFUeXBlKGZpZWxkKTsKLSAgc3dpdGNoIChmaWVsZERhdGFUeXBlKSB7Ci0jZGVmaW5l
IENBU0VfU0lOR0xFX1BPRChOQU1FLCBUWVBFLCBGVU5DX1RZUEUpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgY2FzZSBHUEJEYXRhVHlwZSMjTkFNRTogeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBUWVBFIHZhbCA9IEdQQkNv
ZGVkSW5wdXRTdHJlYW1SZWFkIyNOQU1FKCZpbnB1dC0+c3RhdGVfKTsgICAgICAgICAgICBcCi0g
ICAgICBHUEJTZXQjI0ZVTkNfVFlQRSMjSXZhcldpdGhGaWVsZEludGVybmFsKHNlbGYsIGZpZWxk
LCB2YWwsIHN5bnRheCk7ICBcCi0gICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9Ci0j
ZGVmaW5lIENBU0VfU0lOR0xFX09CSkVDVChOQU1FKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBHUEJEYXRhVHlwZSMjTkFNRTogeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZCB2YWwgPSBH
UEJDb2RlZElucHV0U3RyZWFtUmVhZFJldGFpbmVkIyNOQU1FKCZpbnB1dC0+c3RhdGVfKTsgICAg
ICBcCi0gICAgICBHUEJTZXRSZXRhaW5lZE9iamVjdEl2YXJXaXRoRmllbGRJbnRlcm5hbChzZWxm
LCBmaWVsZCwgdmFsLCBzeW50YXgpOyBcCi0gICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotICAg
ICAgQ0FTRV9TSU5HTEVfUE9EKEJvb2wsIEJPT0wsIEJvb2wpCi0gICAgICBDQVNFX1NJTkdMRV9Q
T0QoRml4ZWQzMiwgdWludDMyX3QsIFVJbnQzMikKLSAgICAgIENBU0VfU0lOR0xFX1BPRChTRml4
ZWQzMiwgaW50MzJfdCwgSW50MzIpCi0gICAgICBDQVNFX1NJTkdMRV9QT0QoRmxvYXQsIGZsb2F0
LCBGbG9hdCkKLSAgICAgIENBU0VfU0lOR0xFX1BPRChGaXhlZDY0LCB1aW50NjRfdCwgVUludDY0
KQotICAgICAgQ0FTRV9TSU5HTEVfUE9EKFNGaXhlZDY0LCBpbnQ2NF90LCBJbnQ2NCkKLSAgICAg
IENBU0VfU0lOR0xFX1BPRChEb3VibGUsIGRvdWJsZSwgRG91YmxlKQotICAgICAgQ0FTRV9TSU5H
TEVfUE9EKEludDMyLCBpbnQzMl90LCBJbnQzMikKLSAgICAgIENBU0VfU0lOR0xFX1BPRChJbnQ2
NCwgaW50NjRfdCwgSW50NjQpCi0gICAgICBDQVNFX1NJTkdMRV9QT0QoU0ludDMyLCBpbnQzMl90
LCBJbnQzMikKLSAgICAgIENBU0VfU0lOR0xFX1BPRChTSW50NjQsIGludDY0X3QsIEludDY0KQot
ICAgICAgQ0FTRV9TSU5HTEVfUE9EKFVJbnQzMiwgdWludDMyX3QsIFVJbnQzMikKLSAgICAgIENB
U0VfU0lOR0xFX1BPRChVSW50NjQsIHVpbnQ2NF90LCBVSW50NjQpCi0gICAgICBDQVNFX1NJTkdM
RV9PQkpFQ1QoQnl0ZXMpCi0gICAgICBDQVNFX1NJTkdMRV9PQkpFQ1QoU3RyaW5nKQotI3VuZGVm
IENBU0VfU0lOR0xFX1BPRAotI3VuZGVmIENBU0VfU0lOR0xFX09CSkVDVAotCi0gICAgY2FzZSBH
UEJEYXRhVHlwZU1lc3NhZ2U6IHsKLSAgICAgIGlmIChHUEJHZXRIYXNJdmFyRmllbGQoc2VsZiwg
ZmllbGQpKSB7Ci0gICAgICAgIC8vIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVh
dGUoKSBhdm9pZHMgZG9pbmcgdGhlIGhhcwotICAgICAgICAvLyBjaGVjayBhZ2Fpbi4KLSAgICAg
ICAgR1BCTWVzc2FnZSAqbWVzc2FnZSA9Ci0gICAgICAgICAgICBHUEJHZXRPYmplY3RJdmFyV2l0
aEZpZWxkTm9BdXRvY3JlYXRlKHNlbGYsIGZpZWxkKTsKLSAgICAgICAgW2lucHV0IHJlYWRNZXNz
YWdlOm1lc3NhZ2UgZXh0ZW5zaW9uUmVnaXN0cnk6ZXh0ZW5zaW9uUmVnaXN0cnldOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgR1BCTWVzc2FnZSAqbWVzc2FnZSA9IFtbZmllbGQubXNnQ2xhc3Mg
YWxsb2NdIGluaXRdOwotICAgICAgICBbaW5wdXQgcmVhZE1lc3NhZ2U6bWVzc2FnZSBleHRlbnNp
b25SZWdpc3RyeTpleHRlbnNpb25SZWdpc3RyeV07Ci0gICAgICAgIEdQQlNldFJldGFpbmVkT2Jq
ZWN0SXZhcldpdGhGaWVsZEludGVybmFsKHNlbGYsIGZpZWxkLCBtZXNzYWdlLCBzeW50YXgpOwot
ICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBHUEJEYXRhVHlwZUdyb3Vw
OiB7Ci0gICAgICBpZiAoR1BCR2V0SGFzSXZhckZpZWxkKHNlbGYsIGZpZWxkKSkgewotICAgICAg
ICAvLyBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKCkgYXZvaWRzIGRvaW5n
IHRoZSBoYXMKLSAgICAgICAgLy8gY2hlY2sgYWdhaW4uCi0gICAgICAgIEdQQk1lc3NhZ2UgKm1l
c3NhZ2UgPQotICAgICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0
ZShzZWxmLCBmaWVsZCk7Ci0gICAgICAgIFtpbnB1dCByZWFkR3JvdXA6R1BCRmllbGROdW1iZXIo
ZmllbGQpCi0gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTptZXNzYWdlCi0gICAgICAgICAg
ICBleHRlbnNpb25SZWdpc3RyeTpleHRlbnNpb25SZWdpc3RyeV07Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICBHUEJNZXNzYWdlICptZXNzYWdlID0gW1tmaWVsZC5tc2dDbGFzcyBhbGxvY10gaW5p
dF07Ci0gICAgICAgIFtpbnB1dCByZWFkR3JvdXA6R1BCRmllbGROdW1iZXIoZmllbGQpCi0gICAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZTptZXNzYWdlCi0gICAgICAgICAgICBleHRlbnNpb25S
ZWdpc3RyeTpleHRlbnNpb25SZWdpc3RyeV07Ci0gICAgICAgIEdQQlNldFJldGFpbmVkT2JqZWN0
SXZhcldpdGhGaWVsZEludGVybmFsKHNlbGYsIGZpZWxkLCBtZXNzYWdlLCBzeW50YXgpOwotICAg
ICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBHUEJEYXRhVHlwZUVudW06IHsK
LSAgICAgIGludDMyX3QgdmFsID0gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWRFbnVtKCZpbnB1dC0+
c3RhdGVfKTsKLSAgICAgIGlmIChHUEJIYXNQcmVzZXJ2aW5nVW5rbm93bkVudW1TZW1hbnRpY3Mo
c3ludGF4KSB8fAotICAgICAgICAgIFtmaWVsZCBpc1ZhbGlkRW51bVZhbHVlOnZhbF0pIHsKLSAg
ICAgICAgR1BCU2V0SW50MzJJdmFyV2l0aEZpZWxkSW50ZXJuYWwoc2VsZiwgZmllbGQsIHZhbCwg
c3ludGF4KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdQQlVua25vd25GaWVsZFNldCAqdW5r
bm93bkZpZWxkcyA9IEdldE9yTWFrZVVua25vd25GaWVsZHMoc2VsZik7Ci0gICAgICAgIFt1bmtu
b3duRmllbGRzIG1lcmdlVmFyaW50RmllbGQ6R1BCRmllbGROdW1iZXIoZmllbGQpIHZhbHVlOnZh
bF07Ci0gICAgICB9Ci0gICAgfQotICB9ICAvLyBzd2l0Y2gKLX0KLQotc3RhdGljIHZvaWQgTWVy
Z2VSZXBlYXRlZFBhY2tlZEZpZWxkRnJvbUNvZGVkSW5wdXRTdHJlYW0oCi0gICAgR1BCTWVzc2Fn
ZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwgR1BCRmlsZVN5bnRheCBzeW50YXgs
Ci0gICAgR1BCQ29kZWRJbnB1dFN0cmVhbSAqaW5wdXQpIHsKLSAgR1BCRGF0YVR5cGUgZmllbGRE
YXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBHUEJDb2RlZElucHV0U3Ry
ZWFtU3RhdGUgKnN0YXRlID0gJmlucHV0LT5zdGF0ZV87Ci0gIGlkIGdlbmVyaWNBcnJheSA9IEdl
dE9yQ3JlYXRlQXJyYXlJdmFyV2l0aEZpZWxkKHNlbGYsIGZpZWxkLCBzeW50YXgpOwotICBpbnQz
Ml90IGxlbmd0aCA9IEdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkSW50MzIoc3RhdGUpOwotICBzaXpl
X3QgbGltaXQgPSBHUEJDb2RlZElucHV0U3RyZWFtUHVzaExpbWl0KHN0YXRlLCBsZW5ndGgpOwot
ICB3aGlsZSAoR1BCQ29kZWRJbnB1dFN0cmVhbUJ5dGVzVW50aWxMaW1pdChzdGF0ZSkgPiAwKSB7
Ci0gICAgc3dpdGNoIChmaWVsZERhdGFUeXBlKSB7Ci0jZGVmaW5lIENBU0VfUkVQRUFURURfUEFD
S0VEX1BPRChOQU1FLCBUWVBFLCBBUlJBWV9UWVBFKSAgICAgIFwKLSAgICAgY2FzZSBHUEJEYXRh
VHlwZSMjTkFNRTogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIFRZ
UEUgdmFsID0gR1BCQ29kZWRJbnB1dFN0cmVhbVJlYWQjI05BTUUoc3RhdGUpOyAgICAgICBcCi0g
ICAgICAgWyhHUEIjI0FSUkFZX1RZUEUjI0FycmF5ICopZ2VuZXJpY0FycmF5IGFkZFZhbHVlOnZh
bF07IFwKLSAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICB9Ci0gICAgICAgIENBU0VfUkVQRUFURURfUEFDS0VEX1BPRChC
b29sLCBCT09MLCBCb29sKQotICAgICAgICBDQVNFX1JFUEVBVEVEX1BBQ0tFRF9QT0QoRml4ZWQz
MiwgdWludDMyX3QsIFVJbnQzMikKLSAgICAgICAgQ0FTRV9SRVBFQVRFRF9QQUNLRURfUE9EKFNG
aXhlZDMyLCBpbnQzMl90LCBJbnQzMikKLSAgICAgICAgQ0FTRV9SRVBFQVRFRF9QQUNLRURfUE9E
KEZsb2F0LCBmbG9hdCwgRmxvYXQpCi0gICAgICAgIENBU0VfUkVQRUFURURfUEFDS0VEX1BPRChG
aXhlZDY0LCB1aW50NjRfdCwgVUludDY0KQotICAgICAgICBDQVNFX1JFUEVBVEVEX1BBQ0tFRF9Q
T0QoU0ZpeGVkNjQsIGludDY0X3QsIEludDY0KQotICAgICAgICBDQVNFX1JFUEVBVEVEX1BBQ0tF
RF9QT0QoRG91YmxlLCBkb3VibGUsIERvdWJsZSkKLSAgICAgICAgQ0FTRV9SRVBFQVRFRF9QQUNL
RURfUE9EKEludDMyLCBpbnQzMl90LCBJbnQzMikKLSAgICAgICAgQ0FTRV9SRVBFQVRFRF9QQUNL
RURfUE9EKEludDY0LCBpbnQ2NF90LCBJbnQ2NCkKLSAgICAgICAgQ0FTRV9SRVBFQVRFRF9QQUNL
RURfUE9EKFNJbnQzMiwgaW50MzJfdCwgSW50MzIpCi0gICAgICAgIENBU0VfUkVQRUFURURfUEFD
S0VEX1BPRChTSW50NjQsIGludDY0X3QsIEludDY0KQotICAgICAgICBDQVNFX1JFUEVBVEVEX1BB
Q0tFRF9QT0QoVUludDMyLCB1aW50MzJfdCwgVUludDMyKQotICAgICAgICBDQVNFX1JFUEVBVEVE
X1BBQ0tFRF9QT0QoVUludDY0LCB1aW50NjRfdCwgVUludDY0KQotI3VuZGVmIENBU0VfUkVQRUFU
RURfUEFDS0VEX1BPRAotCi0gICAgICBjYXNlIEdQQkRhdGFUeXBlQnl0ZXM6Ci0gICAgICBjYXNl
IEdQQkRhdGFUeXBlU3RyaW5nOgotICAgICAgY2FzZSBHUEJEYXRhVHlwZU1lc3NhZ2U6Ci0gICAg
ICBjYXNlIEdQQkRhdGFUeXBlR3JvdXA6Ci0gICAgICAgIE5TQ0Fzc2VydChOTywgQCJOb24gcHJp
bWl0aXZlIHR5cGVzIGNhbid0IGJlIHBhY2tlZCIpOwotICAgICAgICBicmVhazsKLQotICAgICAg
Y2FzZSBHUEJEYXRhVHlwZUVudW06IHsKLSAgICAgICAgaW50MzJfdCB2YWwgPSBHUEJDb2RlZElu
cHV0U3RyZWFtUmVhZEVudW0oc3RhdGUpOwotICAgICAgICBpZiAoR1BCSGFzUHJlc2VydmluZ1Vu
a25vd25FbnVtU2VtYW50aWNzKHN5bnRheCkgfHwKLSAgICAgICAgICAgIFtmaWVsZCBpc1ZhbGlk
RW51bVZhbHVlOnZhbF0pIHsKLSAgICAgICAgICBbKEdQQkVudW1BcnJheSopZ2VuZXJpY0FycmF5
IGFkZFJhd1ZhbHVlOnZhbF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1BCVW5rbm93
bkZpZWxkU2V0ICp1bmtub3duRmllbGRzID0gR2V0T3JNYWtlVW5rbm93bkZpZWxkcyhzZWxmKTsK
LSAgICAgICAgICBbdW5rbm93bkZpZWxkcyBtZXJnZVZhcmludEZpZWxkOkdQQkZpZWxkTnVtYmVy
KGZpZWxkKSB2YWx1ZTp2YWxdOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
ICAgIH0gIC8vIHN3aXRjaAotICB9ICAvLyB3aGlsZShCeXRlc1VudGlsTGltaXQoKSA+IDApCi0g
IEdQQkNvZGVkSW5wdXRTdHJlYW1Qb3BMaW1pdChzdGF0ZSwgbGltaXQpOwotfQotCi1zdGF0aWMg
dm9pZCBNZXJnZVJlcGVhdGVkTm90UGFja2VkRmllbGRGcm9tQ29kZWRJbnB1dFN0cmVhbSgKLSAg
ICBHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLCBHUEJGaWxlU3lu
dGF4IHN5bnRheCwKLSAgICBHUEJDb2RlZElucHV0U3RyZWFtICppbnB1dCwgR1BCRXh0ZW5zaW9u
UmVnaXN0cnkgKmV4dGVuc2lvblJlZ2lzdHJ5KSB7Ci0gIEdQQkNvZGVkSW5wdXRTdHJlYW1TdGF0
ZSAqc3RhdGUgPSAmaW5wdXQtPnN0YXRlXzsKLSAgaWQgZ2VuZXJpY0FycmF5ID0gR2V0T3JDcmVh
dGVBcnJheUl2YXJXaXRoRmllbGQoc2VsZiwgZmllbGQsIHN5bnRheCk7Ci0gIHN3aXRjaCAoR1BC
R2V0RmllbGREYXRhVHlwZShmaWVsZCkpIHsKLSNkZWZpbmUgQ0FTRV9SRVBFQVRFRF9OT1RfUEFD
S0VEX1BPRChOQU1FLCBUWVBFLCBBUlJBWV9UWVBFKSBcCi0gICBjYXNlIEdQQkRhdGFUeXBlIyNO
QU1FOiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBUWVBFIHZhbCA9
IEdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkIyNOQU1FKHN0YXRlKTsgICAgICAgIFwKLSAgICAgWyhH
UEIjI0FSUkFZX1RZUEUjI0FycmF5ICopZ2VuZXJpY0FycmF5IGFkZFZhbHVlOnZhbF07ICBcCi0g
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgfQotI2RlZmluZSBDQVNFX1JFUEVBVEVEX05PVF9QQUNLRURfT0JKRUNUKE5BTUUp
ICAgICAgICAgICAgICAgIFwKLSAgIGNhc2UgR1BCRGF0YVR5cGUjI05BTUU6IHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGlkIHZhbCA9IEdQQkNvZGVkSW5wdXRTdHJl
YW1SZWFkUmV0YWluZWQjI05BTUUoc3RhdGUpOyAgXAotICAgICBbKE5TTXV0YWJsZUFycmF5Kiln
ZW5lcmljQXJyYXkgYWRkT2JqZWN0OnZhbF07ICAgICAgICAgIFwKLSAgICAgW3ZhbCByZWxlYXNl
XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
fQotICAgICAgQ0FTRV9SRVBFQVRFRF9OT1RfUEFDS0VEX1BPRChCb29sLCBCT09MLCBCb29sKQot
ICAgICAgQ0FTRV9SRVBFQVRFRF9OT1RfUEFDS0VEX1BPRChGaXhlZDMyLCB1aW50MzJfdCwgVUlu
dDMyKQotICAgICAgQ0FTRV9SRVBFQVRFRF9OT1RfUEFDS0VEX1BPRChTRml4ZWQzMiwgaW50MzJf
dCwgSW50MzIpCi0gICAgICBDQVNFX1JFUEVBVEVEX05PVF9QQUNLRURfUE9EKEZsb2F0LCBmbG9h
dCwgRmxvYXQpCi0gICAgICBDQVNFX1JFUEVBVEVEX05PVF9QQUNLRURfUE9EKEZpeGVkNjQsIHVp
bnQ2NF90LCBVSW50NjQpCi0gICAgICBDQVNFX1JFUEVBVEVEX05PVF9QQUNLRURfUE9EKFNGaXhl
ZDY0LCBpbnQ2NF90LCBJbnQ2NCkKLSAgICAgIENBU0VfUkVQRUFURURfTk9UX1BBQ0tFRF9QT0Qo
RG91YmxlLCBkb3VibGUsIERvdWJsZSkKLSAgICAgIENBU0VfUkVQRUFURURfTk9UX1BBQ0tFRF9Q
T0QoSW50MzIsIGludDMyX3QsIEludDMyKQotICAgICAgQ0FTRV9SRVBFQVRFRF9OT1RfUEFDS0VE
X1BPRChJbnQ2NCwgaW50NjRfdCwgSW50NjQpCi0gICAgICBDQVNFX1JFUEVBVEVEX05PVF9QQUNL
RURfUE9EKFNJbnQzMiwgaW50MzJfdCwgSW50MzIpCi0gICAgICBDQVNFX1JFUEVBVEVEX05PVF9Q
QUNLRURfUE9EKFNJbnQ2NCwgaW50NjRfdCwgSW50NjQpCi0gICAgICBDQVNFX1JFUEVBVEVEX05P
VF9QQUNLRURfUE9EKFVJbnQzMiwgdWludDMyX3QsIFVJbnQzMikKLSAgICAgIENBU0VfUkVQRUFU
RURfTk9UX1BBQ0tFRF9QT0QoVUludDY0LCB1aW50NjRfdCwgVUludDY0KQotICAgICAgQ0FTRV9S
RVBFQVRFRF9OT1RfUEFDS0VEX09CSkVDVChCeXRlcykKLSAgICAgIENBU0VfUkVQRUFURURfTk9U
X1BBQ0tFRF9PQkpFQ1QoU3RyaW5nKQotI3VuZGVmIENBU0VfUkVQRUFURURfTk9UX1BBQ0tFRF9Q
T0QKLSN1bmRlZiBDQVNFX05PVF9QQUNLRURfT0JKRUNUCi0gICAgY2FzZSBHUEJEYXRhVHlwZU1l
c3NhZ2U6IHsKLSAgICAgIEdQQk1lc3NhZ2UgKm1lc3NhZ2UgPSBbW2ZpZWxkLm1zZ0NsYXNzIGFs
bG9jXSBpbml0XTsKLSAgICAgIFtpbnB1dCByZWFkTWVzc2FnZTptZXNzYWdlIGV4dGVuc2lvblJl
Z2lzdHJ5OmV4dGVuc2lvblJlZ2lzdHJ5XTsKLSAgICAgIFsoTlNNdXRhYmxlQXJyYXkqKWdlbmVy
aWNBcnJheSBhZGRPYmplY3Q6bWVzc2FnZV07Ci0gICAgICBbbWVzc2FnZSByZWxlYXNlXTsKLSAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdQQkRhdGFUeXBlR3JvdXA6IHsKLSAgICAgIEdQ
Qk1lc3NhZ2UgKm1lc3NhZ2UgPSBbW2ZpZWxkLm1zZ0NsYXNzIGFsbG9jXSBpbml0XTsKLSAgICAg
IFtpbnB1dCByZWFkR3JvdXA6R1BCRmllbGROdW1iZXIoZmllbGQpCi0gICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2U6bWVzc2FnZQotICAgICAgICAgIGV4dGVuc2lvblJlZ2lzdHJ5OmV4dGVuc2lv
blJlZ2lzdHJ5XTsKLSAgICAgIFsoTlNNdXRhYmxlQXJyYXkqKWdlbmVyaWNBcnJheSBhZGRPYmpl
Y3Q6bWVzc2FnZV07Ci0gICAgICBbbWVzc2FnZSByZWxlYXNlXTsKLSAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIEdQQkRhdGFUeXBlRW51bTogewotICAgICAgaW50MzJfdCB2YWwgPSBHUEJD
b2RlZElucHV0U3RyZWFtUmVhZEVudW0oc3RhdGUpOwotICAgICAgaWYgKEdQQkhhc1ByZXNlcnZp
bmdVbmtub3duRW51bVNlbWFudGljcyhzeW50YXgpIHx8Ci0gICAgICAgICAgW2ZpZWxkIGlzVmFs
aWRFbnVtVmFsdWU6dmFsXSkgewotICAgICAgICBbKEdQQkVudW1BcnJheSopZ2VuZXJpY0FycmF5
IGFkZFJhd1ZhbHVlOnZhbF07Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHUEJVbmtub3duRmll
bGRTZXQgKnVua25vd25GaWVsZHMgPSBHZXRPck1ha2VVbmtub3duRmllbGRzKHNlbGYpOwotICAg
ICAgICBbdW5rbm93bkZpZWxkcyBtZXJnZVZhcmludEZpZWxkOkdQQkZpZWxkTnVtYmVyKGZpZWxk
KSB2YWx1ZTp2YWxdOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9ICAvLyBzd2l0
Y2gKLX0KLQotLSAodm9pZCltZXJnZUZyb21Db2RlZElucHV0U3RyZWFtOihHUEJDb2RlZElucHV0
U3RyZWFtICopaW5wdXQKLSAgICAgICAgICAgICAgICBleHRlbnNpb25SZWdpc3RyeTooR1BCRXh0
ZW5zaW9uUmVnaXN0cnkgKilleHRlbnNpb25SZWdpc3RyeSB7Ci0gIEdQQkRlc2NyaXB0b3IgKmRl
c2NyaXB0b3IgPSBbc2VsZiBkZXNjcmlwdG9yXTsKLSAgR1BCRmlsZVN5bnRheCBzeW50YXggPSBk
ZXNjcmlwdG9yLmZpbGUuc3ludGF4OwotICBHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRl
ID0gJmlucHV0LT5zdGF0ZV87Ci0gIHVpbnQzMl90IHRhZyA9IDA7Ci0gIE5TVUludGVnZXIgc3Rh
cnRpbmdJbmRleCA9IDA7Ci0gIE5TQXJyYXkgKmZpZWxkcyA9IGRlc2NyaXB0b3ItPmZpZWxkc187
Ci0gIE5TVUludGVnZXIgbnVtRmllbGRzID0gZmllbGRzLmNvdW50OwotICB3aGlsZSAoWUVTKSB7
Ci0gICAgQk9PTCBtZXJnZWQgPSBOTzsKLSAgICB0YWcgPSBHUEJDb2RlZElucHV0U3RyZWFtUmVh
ZFRhZyhzdGF0ZSk7Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgbnVtRmllbGRzOyAr
K2kpIHsKLSAgICAgIGlmIChzdGFydGluZ0luZGV4ID49IG51bUZpZWxkcykgc3RhcnRpbmdJbmRl
eCA9IDA7Ci0gICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkRGVzY3JpcHRvciA9IGZpZWxk
c1tzdGFydGluZ0luZGV4XTsKLSAgICAgIGlmIChHUEJGaWVsZFRhZyhmaWVsZERlc2NyaXB0b3Ip
ID09IHRhZykgewotICAgICAgICBHUEJGaWVsZFR5cGUgZmllbGRUeXBlID0gZmllbGREZXNjcmlw
dG9yLmZpZWxkVHlwZTsKLSAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVTaW5n
bGUpIHsKLSAgICAgICAgICBNZXJnZVNpbmdsZUZpZWxkRnJvbUNvZGVkSW5wdXRTdHJlYW0oc2Vs
ZiwgZmllbGREZXNjcmlwdG9yLCBzeW50YXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0LCBleHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgICAgICAg
Ly8gV2VsbCBmb3JtZWQgcHJvdG9zIHdpbGwgb25seSBoYXZlIGEgc2luZ2xlIGZpZWxkIG9uY2Us
IGFkdmFuY2UKLSAgICAgICAgICAvLyB0aGUgc3RhcnRpbmcgaW5kZXggdG8gdGhlIG5leHQgZmll
bGQuCi0gICAgICAgICAgc3RhcnRpbmdJbmRleCArPSAxOwotICAgICAgICB9IGVsc2UgaWYgKGZp
ZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVSZXBlYXRlZCkgewotICAgICAgICAgIGlmIChmaWVsZERl
c2NyaXB0b3IuaXNQYWNrYWJsZSkgewotICAgICAgICAgICAgTWVyZ2VSZXBlYXRlZFBhY2tlZEZp
ZWxkRnJvbUNvZGVkSW5wdXRTdHJlYW0oCi0gICAgICAgICAgICAgICAgc2VsZiwgZmllbGREZXNj
cmlwdG9yLCBzeW50YXgsIGlucHV0KTsKLSAgICAgICAgICAgIC8vIFdlbGwgZm9ybWVkIHByb3Rv
cyB3aWxsIG9ubHkgaGF2ZSBhIHJlcGVhdGVkIGZpZWxkIHRoYXQgaXMKLSAgICAgICAgICAgIC8v
IHBhY2tlZCBvbmNlLCBhZHZhbmNlIHRoZSBzdGFydGluZyBpbmRleCB0byB0aGUgbmV4dCBmaWVs
ZC4KLSAgICAgICAgICAgIHN0YXJ0aW5nSW5kZXggKz0gMTsKLSAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgTWVyZ2VSZXBlYXRlZE5vdFBhY2tlZEZpZWxkRnJvbUNvZGVkSW5wdXRTdHJl
YW0oCi0gICAgICAgICAgICAgICAgc2VsZiwgZmllbGREZXNjcmlwdG9yLCBzeW50YXgsIGlucHV0
LCBleHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAgLy8g
ZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZU1hcAotICAgICAgICAgIC8vIEdQQipEaWN0aW9uYXJ5
IG9yIE5TRGljdGlvbmFyeSwgZXhhY3QgdHlwZSBkb2Vzbid0IG1hdHRlciBhdCB0aGlzCi0gICAg
ICAgICAgLy8gcG9pbnQuCi0gICAgICAgICAgaWQgbWFwID0gR2V0T3JDcmVhdGVNYXBJdmFyV2l0
aEZpZWxkKHNlbGYsIGZpZWxkRGVzY3JpcHRvciwgc3ludGF4KTsKLSAgICAgICAgICBbaW5wdXQg
cmVhZE1hcEVudHJ5Om1hcAotICAgICAgICAgICAgZXh0ZW5zaW9uUmVnaXN0cnk6ZXh0ZW5zaW9u
UmVnaXN0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOmZpZWxkRGVzY3JpcHRvcgot
ICAgICAgICAgICAgICAgIHBhcmVudE1lc3NhZ2U6c2VsZl07Ci0gICAgICAgIH0KLSAgICAgICAg
bWVyZ2VkID0gWUVTOwotICAgICAgICBicmVhazsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0
YXJ0aW5nSW5kZXggKz0gMTsKLSAgICAgIH0KLSAgICB9ICAvLyBmb3IoaSA8IG51bUZpZWxkcykK
LQotICAgIGlmICghbWVyZ2VkKSB7Ci0gICAgICAvLyBQcmltaXRpdmUsIHJlcGVhdGVkIHR5cGVz
IGNhbiBiZSBwYWNrZWQgb24gdW5wYWNrZWQgb24gdGhlIHdpcmUsIGFuZAotICAgICAgLy8gYXJl
IHBhcnNlZCBlaXRoZXIgd2F5LiAgVGhlIGFib3ZlIGxvb3AgY292ZXJlZCB0YWcgaW4gdGhlIHBy
ZWZlcnJlZAotICAgICAgLy8gZm9yLCBzbyB0aGlzIG5lZWQgdG8gY2hlY2sgdGhlIGFsdGVybmF0
ZSBmb3JtLgotICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgbnVtRmllbGRzOyArK2kp
IHsKLSAgICAgICAgaWYgKHN0YXJ0aW5nSW5kZXggPj0gbnVtRmllbGRzKSBzdGFydGluZ0luZGV4
ID0gMDsKLSAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZERlc2NyaXB0b3IgPSBmaWVs
ZHNbc3RhcnRpbmdJbmRleF07Ci0gICAgICAgIGlmICgoZmllbGREZXNjcmlwdG9yLmZpZWxkVHlw
ZSA9PSBHUEJGaWVsZFR5cGVSZXBlYXRlZCkgJiYKLSAgICAgICAgICAgICFHUEJGaWVsZERhdGFU
eXBlSXNPYmplY3QoZmllbGREZXNjcmlwdG9yKSAmJgotICAgICAgICAgICAgKEdQQkZpZWxkQWx0
ZXJuYXRlVGFnKGZpZWxkRGVzY3JpcHRvcikgPT0gdGFnKSkgewotICAgICAgICAgIEJPT0wgYWx0
ZXJuYXRlSXNQYWNrZWQgPSAhZmllbGREZXNjcmlwdG9yLmlzUGFja2FibGU7Ci0gICAgICAgICAg
aWYgKGFsdGVybmF0ZUlzUGFja2VkKSB7Ci0gICAgICAgICAgICBNZXJnZVJlcGVhdGVkUGFja2Vk
RmllbGRGcm9tQ29kZWRJbnB1dFN0cmVhbSgKLSAgICAgICAgICAgICAgICBzZWxmLCBmaWVsZERl
c2NyaXB0b3IsIHN5bnRheCwgaW5wdXQpOwotICAgICAgICAgICAgLy8gV2VsbCBmb3JtZWQgcHJv
dG9zIHdpbGwgb25seSBoYXZlIGEgcmVwZWF0ZWQgZmllbGQgdGhhdCBpcwotICAgICAgICAgICAg
Ly8gcGFja2VkIG9uY2UsIGFkdmFuY2UgdGhlIHN0YXJ0aW5nIGluZGV4IHRvIHRoZSBuZXh0IGZp
ZWxkLgotICAgICAgICAgICAgc3RhcnRpbmdJbmRleCArPSAxOwotICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBNZXJnZVJlcGVhdGVkTm90UGFja2VkRmllbGRGcm9tQ29kZWRJbnB1dFN0
cmVhbSgKLSAgICAgICAgICAgICAgICBzZWxmLCBmaWVsZERlc2NyaXB0b3IsIHN5bnRheCwgaW5w
dXQsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbWVyZ2VkID0g
WUVTOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHN0YXJ0
aW5nSW5kZXggKz0gMTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGlmICghbWVy
Z2VkKSB7Ci0gICAgICBpZiAodGFnID09IDApIHsKLSAgICAgICAgLy8gemVybyBzaWduYWxzIEVP
RiAvIGxpbWl0IHJlYWNoZWQKLSAgICAgICAgcmV0dXJuOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKEdQQlByZXNlcnZlVW5rbm93bkZpZWxkcyhzeW50YXgpKSB7Ci0gICAgICAgICAgaWYg
KCFbc2VsZiBwYXJzZVVua25vd25GaWVsZDppbnB1dAotICAgICAgICAgICAgICAgICAgICAgZXh0
ZW5zaW9uUmVnaXN0cnk6ZXh0ZW5zaW9uUmVnaXN0cnkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFnOnRhZ10pIHsKLSAgICAgICAgICAgIC8vIGl0J3MgYW4gZW5kZ3JvdXAg
dGFnCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGlmICghW2lucHV0IHNraXBGaWVsZDp0YWddKSB7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgLy8gaWYoIW1lcmdl
ZCkKLQotICB9ICAvLyB3aGlsZShZRVMpCi19Ci0KLSNwcmFnbWEgbWFyayAtIE1lcmdlRnJvbSBT
dXBwb3J0Ci0KLS0gKHZvaWQpbWVyZ2VGcm9tOihHUEJNZXNzYWdlICopb3RoZXIgewotICBDbGFz
cyBzZWxmQ2xhc3MgPSBbc2VsZiBjbGFzc107Ci0gIENsYXNzIG90aGVyQ2xhc3MgPSBbb3RoZXIg
Y2xhc3NdOwotICBpZiAoIShbc2VsZkNsYXNzIGlzU3ViY2xhc3NPZkNsYXNzOm90aGVyQ2xhc3Nd
IHx8Ci0gICAgICAgIFtvdGhlckNsYXNzIGlzU3ViY2xhc3NPZkNsYXNzOnNlbGZDbGFzc10pKSB7
Ci0gICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAg
ICAgICAgICAgICAgZm9ybWF0OkAiQ2xhc3NlcyBtdXN0IG1hdGNoICVAICE9ICVAIiwgc2VsZkNs
YXNzLCBvdGhlckNsYXNzXTsKLSAgfQotCi0gIC8vIFdlIGFzc3VtZSBzb21ldGhpbmcgd2lsbCBi
ZSBkb25lIGFuZCBiZWNvbWUgdmlzaWJsZS4KLSAgR1BCQmVjb21lVmlzaWJsZVRvQXV0b2NyZWF0
b3Ioc2VsZik7Ci0KLSAgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IFtbc2VsZiBjbGFzc10g
ZGVzY3JpcHRvcl07Ci0gIEdQQkZpbGVTeW50YXggc3ludGF4ID0gZGVzY3JpcHRvci5maWxlLnN5
bnRheDsKLQotICBmb3IgKEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQgaW4gZGVzY3JpcHRvci0+
ZmllbGRzXykgewotICAgIEdQQkZpZWxkVHlwZSBmaWVsZFR5cGUgPSBmaWVsZC5maWVsZFR5cGU7
Ci0gICAgaWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVTaW5nbGUpIHsKLSAgICAgIGludDMy
X3QgaGFzSW5kZXggPSBHUEJGaWVsZEhhc0luZGV4KGZpZWxkKTsKLSAgICAgIHVpbnQzMl90IGZp
ZWxkTnVtYmVyID0gR1BCRmllbGROdW1iZXIoZmllbGQpOwotICAgICAgaWYgKCFHUEJHZXRIYXNJ
dmFyKG90aGVyLCBoYXNJbmRleCwgZmllbGROdW1iZXIpKSB7Ci0gICAgICAgIC8vIE90aGVyIGRv
ZXNuJ3QgaGF2ZSB0aGUgZmllbGQgc2V0LCBvbiB0byB0aGUgbmV4dC4KLSAgICAgICAgY29udGlu
dWU7Ci0gICAgICB9Ci0gICAgICBHUEJEYXRhVHlwZSBmaWVsZERhdGFUeXBlID0gR1BCR2V0Rmll
bGREYXRhVHlwZShmaWVsZCk7Ci0gICAgICBzd2l0Y2ggKGZpZWxkRGF0YVR5cGUpIHsKLSAgICAg
ICAgY2FzZSBHUEJEYXRhVHlwZUJvb2w6Ci0gICAgICAgICAgR1BCU2V0Qm9vbEl2YXJXaXRoRmll
bGRJbnRlcm5hbCgKLSAgICAgICAgICAgICAgc2VsZiwgZmllbGQsIEdQQkdldE1lc3NhZ2VCb29s
RmllbGQob3RoZXIsIGZpZWxkKSwgc3ludGF4KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHUEJEYXRhVHlwZVNGaXhlZDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlRW51bToK
LSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUludDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBl
U0ludDMyOgotICAgICAgICAgIEdQQlNldEludDMySXZhcldpdGhGaWVsZEludGVybmFsKAotICAg
ICAgICAgICAgICBzZWxmLCBmaWVsZCwgR1BCR2V0TWVzc2FnZUludDMyRmllbGQob3RoZXIsIGZp
ZWxkKSwgc3ludGF4KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlw
ZUZpeGVkMzI6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVVSW50MzI6Ci0gICAgICAgICAgR1BC
U2V0VUludDMySXZhcldpdGhGaWVsZEludGVybmFsKAotICAgICAgICAgICAgICBzZWxmLCBmaWVs
ZCwgR1BCR2V0TWVzc2FnZVVJbnQzMkZpZWxkKG90aGVyLCBmaWVsZCksIHN5bnRheCk7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4ZWQ2NDoKLSAgICAgICAg
Y2FzZSBHUEJEYXRhVHlwZUludDY0OgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDY0Ogot
ICAgICAgICAgIEdQQlNldEludDY0SXZhcldpdGhGaWVsZEludGVybmFsKAotICAgICAgICAgICAg
ICBzZWxmLCBmaWVsZCwgR1BCR2V0TWVzc2FnZUludDY0RmllbGQob3RoZXIsIGZpZWxkKSwgc3lu
dGF4KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUZpeGVkNjQ6
Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVVSW50NjQ6Ci0gICAgICAgICAgR1BCU2V0VUludDY0
SXZhcldpdGhGaWVsZEludGVybmFsKAotICAgICAgICAgICAgICBzZWxmLCBmaWVsZCwgR1BCR2V0
TWVzc2FnZVVJbnQ2NEZpZWxkKG90aGVyLCBmaWVsZCksIHN5bnRheCk7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVGbG9hdDoKLSAgICAgICAgICBHUEJTZXRGbG9h
dEl2YXJXaXRoRmllbGRJbnRlcm5hbCgKLSAgICAgICAgICAgICAgc2VsZiwgZmllbGQsIEdQQkdl
dE1lc3NhZ2VGbG9hdEZpZWxkKG90aGVyLCBmaWVsZCksIHN5bnRheCk7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVEb3VibGU6Ci0gICAgICAgICAgR1BCU2V0RG91
YmxlSXZhcldpdGhGaWVsZEludGVybmFsKAotICAgICAgICAgICAgICBzZWxmLCBmaWVsZCwgR1BC
R2V0TWVzc2FnZURvdWJsZUZpZWxkKG90aGVyLCBmaWVsZCksIHN5bnRheCk7Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVCeXRlczoKLSAgICAgICAgY2FzZSBHUEJE
YXRhVHlwZVN0cmluZzogewotICAgICAgICAgIGlkIG90aGVyVmFsID0gR1BCR2V0T2JqZWN0SXZh
cldpdGhGaWVsZE5vQXV0b2NyZWF0ZShvdGhlciwgZmllbGQpOwotICAgICAgICAgIEdQQlNldE9i
amVjdEl2YXJXaXRoRmllbGRJbnRlcm5hbChzZWxmLCBmaWVsZCwgb3RoZXJWYWwsIHN5bnRheCk7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZU1l
c3NhZ2U6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVHcm91cDogewotICAgICAgICAgIGlkIG90
aGVyVmFsID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShvdGhlciwgZmll
bGQpOwotICAgICAgICAgIGlmIChHUEJHZXRIYXNJdmFyKHNlbGYsIGhhc0luZGV4LCBmaWVsZE51
bWJlcikpIHsKLSAgICAgICAgICAgIEdQQk1lc3NhZ2UgKm1lc3NhZ2UgPQotICAgICAgICAgICAg
ICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGQpOwot
ICAgICAgICAgICAgW21lc3NhZ2UgbWVyZ2VGcm9tOm90aGVyVmFsXTsKLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgR1BCTWVzc2FnZSAqbWVzc2FnZSA9IFtvdGhlclZhbCBjb3B5XTsK
LSAgICAgICAgICAgIEdQQlNldFJldGFpbmVkT2JqZWN0SXZhcldpdGhGaWVsZEludGVybmFsKHNl
bGYsIGZpZWxkLCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ludGF4KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgIH0gLy8gc3dpdGNoKCkKLSAgICB9IGVsc2UgaWYgKGZpZWxkVHlw
ZSA9PSBHUEJGaWVsZFR5cGVSZXBlYXRlZCkgewotICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBs
aXN0LCB0aGV5IG5lZWQgdG8gYmUgYXBwZW5kZWQsIGFuZCB0aGVyZSBpcyBubwotICAgICAgLy8g
X2hhc0l2YXIgdG8gd29ycnkgYWJvdXQgc2V0dGluZy4KLSAgICAgIGlkIG90aGVyQXJyYXkgPQot
ICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUob3RoZXIsIGZp
ZWxkKTsKLSAgICAgIGlmIChvdGhlckFycmF5KSB7Ci0gICAgICAgIEdQQkRhdGFUeXBlIGZpZWxk
RGF0YVR5cGUgPSBmaWVsZC0+ZGVzY3JpcHRpb25fLT5kYXRhVHlwZTsKLSAgICAgICAgaWYgKEdQ
QkRhdGFUeXBlSXNPYmplY3QoZmllbGREYXRhVHlwZSkpIHsKLSAgICAgICAgICBOU011dGFibGVB
cnJheSAqcmVzdWx0QXJyYXkgPQotICAgICAgICAgICAgICBHZXRPckNyZWF0ZUFycmF5SXZhcldp
dGhGaWVsZChzZWxmLCBmaWVsZCwgc3ludGF4KTsKLSAgICAgICAgICBbcmVzdWx0QXJyYXkgYWRk
T2JqZWN0c0Zyb21BcnJheTpvdGhlckFycmF5XTsKLSAgICAgICAgfSBlbHNlIGlmIChmaWVsZERh
dGFUeXBlID09IEdQQkRhdGFUeXBlRW51bSkgewotICAgICAgICAgIEdQQkVudW1BcnJheSAqcmVz
dWx0QXJyYXkgPQotICAgICAgICAgICAgICBHZXRPckNyZWF0ZUFycmF5SXZhcldpdGhGaWVsZChz
ZWxmLCBmaWVsZCwgc3ludGF4KTsKLSAgICAgICAgICBbcmVzdWx0QXJyYXkgYWRkUmF3VmFsdWVz
RnJvbUFycmF5Om90aGVyQXJyYXldOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIFRo
ZSBhcnJheSB0eXBlIGRvZXNuJ3QgbWF0dGVyLCB0aGF0IGFsbCBpbXBsbWVudAotICAgICAgICAg
IC8vIC1hZGRWYWx1ZXNGcm9tQXJyYXk6LgotICAgICAgICAgIEdQQkludDMyQXJyYXkgKnJlc3Vs
dEFycmF5ID0KLSAgICAgICAgICAgICAgR2V0T3JDcmVhdGVBcnJheUl2YXJXaXRoRmllbGQoc2Vs
ZiwgZmllbGQsIHN5bnRheCk7Ci0gICAgICAgICAgW3Jlc3VsdEFycmF5IGFkZFZhbHVlc0Zyb21B
cnJheTpvdGhlckFycmF5XTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSB7ICAvLyBm
aWVsZFR5cGUgPSBHUEJGaWVsZFR5cGVNYXAKLSAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgbWFw
LCB0aGV5IG5lZWQgdG8gYmUgbWVyZ2VkLCBhbmQgdGhlcmUgaXMgbm8KLSAgICAgIC8vIF9oYXNJ
dmFyIHRvIHdvcnJ5IGFib3V0IHNldHRpbmcuCi0gICAgICBpZCBvdGhlckRpY3QgPSBHUEJHZXRP
YmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKG90aGVyLCBmaWVsZCk7Ci0gICAgICBpZiAo
b3RoZXJEaWN0KSB7Ci0gICAgICAgIEdQQkRhdGFUeXBlIGtleURhdGFUeXBlID0gZmllbGQubWFw
S2V5RGF0YVR5cGU7Ci0gICAgICAgIEdQQkRhdGFUeXBlIHZhbHVlRGF0YVR5cGUgPSBmaWVsZC0+
ZGVzY3JpcHRpb25fLT5kYXRhVHlwZTsKLSAgICAgICAgaWYgKEdQQkRhdGFUeXBlSXNPYmplY3Qo
a2V5RGF0YVR5cGUpICYmCi0gICAgICAgICAgICBHUEJEYXRhVHlwZUlzT2JqZWN0KHZhbHVlRGF0
YVR5cGUpKSB7Ci0gICAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcmVzdWx0RGljdCA9Ci0g
ICAgICAgICAgICAgIEdldE9yQ3JlYXRlTWFwSXZhcldpdGhGaWVsZChzZWxmLCBmaWVsZCwgc3lu
dGF4KTsKLSAgICAgICAgICBbcmVzdWx0RGljdCBhZGRFbnRyaWVzRnJvbURpY3Rpb25hcnk6b3Ro
ZXJEaWN0XTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZURhdGFUeXBlID09IEdQQkRhdGFUeXBl
RW51bSkgewotICAgICAgICAgIC8vIFRoZSBleGFjdCB0eXBlIGRvZXNuJ3QgbWF0dGVyLCBqdXN0
IG5lZWQgdG8ga25vdyBpdCBpcyBhCi0gICAgICAgICAgLy8gR1BCKkVudW1EaWN0aW9uYXJ5Lgot
ICAgICAgICAgIEdQQkludDMyRW51bURpY3Rpb25hcnkgKnJlc3VsdERpY3QgPQotICAgICAgICAg
ICAgICBHZXRPckNyZWF0ZU1hcEl2YXJXaXRoRmllbGQoc2VsZiwgZmllbGQsIHN5bnRheCk7Ci0g
ICAgICAgICAgW3Jlc3VsdERpY3QgYWRkUmF3RW50cmllc0Zyb21EaWN0aW9uYXJ5Om90aGVyRGlj
dF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gVGhlIGV4YWN0IHR5cGUgZG9lc24n
dCBtYXR0ZXIsIHRoZXkgYWxsIGltcGxlbWVudAotICAgICAgICAgIC8vIC1hZGRFbnRyaWVzRnJv
bURpY3Rpb25hcnk6LgotICAgICAgICAgIEdQQkludDMySW50MzJEaWN0aW9uYXJ5ICpyZXN1bHRE
aWN0ID0KLSAgICAgICAgICAgICAgR2V0T3JDcmVhdGVNYXBJdmFyV2l0aEZpZWxkKHNlbGYsIGZp
ZWxkLCBzeW50YXgpOwotICAgICAgICAgIFtyZXN1bHREaWN0IGFkZEVudHJpZXNGcm9tRGljdGlv
bmFyeTpvdGhlckRpY3RdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSAgLy8gaWYgKGZpZWxk
VHlwZSkuLmVsc2UgaWYuLi5lbHNlCi0gIH0gIC8vIGZvcihmaWVsZHMpCi0KLSAgLy8gVW5rbm93
biBmaWVsZHMuCi0gIGlmICghdW5rbm93bkZpZWxkc18pIHsKLSAgICBbc2VsZiBzZXRVbmtub3du
RmllbGRzOm90aGVyLnVua25vd25GaWVsZHNdOwotICB9IGVsc2UgewotICAgIFt1bmtub3duRmll
bGRzXyBtZXJnZVVua25vd25GaWVsZHM6b3RoZXIudW5rbm93bkZpZWxkc107Ci0gIH0KLQotICAv
LyBFeHRlbnNpb25zCi0KLSAgaWYgKG90aGVyLT5leHRlbnNpb25NYXBfLmNvdW50ID09IDApIHsK
LSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoZXh0ZW5zaW9uTWFwXyA9PSBuaWwpIHsKLSAgICBl
eHRlbnNpb25NYXBfID0KLSAgICAgICAgQ2xvbmVFeHRlbnNpb25NYXAob3RoZXItPmV4dGVuc2lv
bk1hcF8sIE5TWm9uZUZyb21Qb2ludGVyKHNlbGYpKTsKLSAgfSBlbHNlIHsKLSAgICBmb3IgKEdQ
QkV4dGVuc2lvbkRlc2NyaXB0b3IgKmV4dGVuc2lvbiBpbiBvdGhlci0+ZXh0ZW5zaW9uTWFwXykg
ewotICAgICAgaWQgb3RoZXJWYWx1ZSA9IFtvdGhlci0+ZXh0ZW5zaW9uTWFwXyBvYmplY3RGb3JL
ZXk6ZXh0ZW5zaW9uXTsKLSAgICAgIGlkIHZhbHVlID0gW2V4dGVuc2lvbk1hcF8gb2JqZWN0Rm9y
S2V5OmV4dGVuc2lvbl07Ci0gICAgICBCT09MIGlzTWVzc2FnZUV4dGVuc2lvbiA9IEdQQkV4dGVu
c2lvbklzTWVzc2FnZShleHRlbnNpb24pOwotCi0gICAgICBpZiAoZXh0ZW5zaW9uLnJlcGVhdGVk
KSB7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5ICpsaXN0ID0gdmFsdWU7Ci0gICAgICAgIGlmIChs
aXN0ID09IG5pbCkgewotICAgICAgICAgIGxpc3QgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XTsKLSAgICAgICAgICBbZXh0ZW5zaW9uTWFwXyBzZXRPYmplY3Q6bGlzdCBmb3JLZXk6ZXh0
ZW5zaW9uXTsKLSAgICAgICAgICBbbGlzdCByZWxlYXNlXTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoaXNNZXNzYWdlRXh0ZW5zaW9uKSB7Ci0gICAgICAgICAgZm9yIChHUEJNZXNzYWdlICpvdGhl
ckxpc3RWYWx1ZSBpbiBvdGhlclZhbHVlKSB7Ci0gICAgICAgICAgICBHUEJNZXNzYWdlICpjb3Bp
ZWRWYWx1ZSA9IFtvdGhlckxpc3RWYWx1ZSBjb3B5XTsKLSAgICAgICAgICAgIFtsaXN0IGFkZE9i
amVjdDpjb3BpZWRWYWx1ZV07Ci0gICAgICAgICAgICBbY29waWVkVmFsdWUgcmVsZWFzZV07Ci0g
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFtsaXN0IGFkZE9iamVjdHNG
cm9tQXJyYXk6b3RoZXJWYWx1ZV07Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChpc01lc3NhZ2VFeHRlbnNpb24pIHsKLSAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAg
ICAgICAgIFsoR1BCTWVzc2FnZSAqKXZhbHVlIG1lcmdlRnJvbTooR1BCTWVzc2FnZSAqKW90aGVy
VmFsdWVdOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHUEJNZXNzYWdlICpjb3Bp
ZWRWYWx1ZSA9IFtvdGhlclZhbHVlIGNvcHldOwotICAgICAgICAgICAgW2V4dGVuc2lvbk1hcF8g
c2V0T2JqZWN0OmNvcGllZFZhbHVlIGZvcktleTpleHRlbnNpb25dOwotICAgICAgICAgICAgW2Nv
cGllZFZhbHVlIHJlbGVhc2VdOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBbZXh0ZW5zaW9uTWFwXyBzZXRPYmplY3Q6b3RoZXJWYWx1ZSBmb3JLZXk6ZXh0ZW5zaW9u
XTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoaXNNZXNzYWdlRXh0ZW5zaW9uICYm
ICFleHRlbnNpb24uaXNSZXBlYXRlZCkgewotICAgICAgICBHUEJNZXNzYWdlICphdXRvY3JlYXRl
ZFZhbHVlID0KLSAgICAgICAgICAgIFtbYXV0b2NyZWF0ZWRFeHRlbnNpb25NYXBfIG9iamVjdEZv
cktleTpleHRlbnNpb25dIHJldGFpbl07Ci0gICAgICAgIC8vIE11c3QgcmVtb3ZlIGZyb20gdGhl
IG1hcCBiZWZvcmUgY2FsbGluZyBHUEJDbGVhck1lc3NhZ2VBdXRvY3JlYXRvcigpCi0gICAgICAg
IC8vIHNvIHRoYXQgR1BCQ2xlYXJNZXNzYWdlQXV0b2NyZWF0b3IoKSBrbm93cyBpdHMgc2FmZSB0
byBjbGVhci4KLSAgICAgICAgW2F1dG9jcmVhdGVkRXh0ZW5zaW9uTWFwXyByZW1vdmVPYmplY3RG
b3JLZXk6ZXh0ZW5zaW9uXTsKLSAgICAgICAgR1BCQ2xlYXJNZXNzYWdlQXV0b2NyZWF0b3IoYXV0
b2NyZWF0ZWRWYWx1ZSk7Ci0gICAgICAgIFthdXRvY3JlYXRlZFZhbHVlIHJlbGVhc2VdOwotICAg
ICAgfQotICAgIH0KLSAgfQotfQotCi0jcHJhZ21hIG1hcmsgLSBpc0VxdWFsOiAmIGhhc2ggU3Vw
cG9ydAotCi0tIChCT09MKWlzRXF1YWw6KEdQQk1lc3NhZ2UgKilvdGhlciB7Ci0gIGlmIChvdGhl
ciA9PSBzZWxmKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICBpZiAoIVtvdGhlciBpc0tpbmRP
ZkNsYXNzOltzZWxmIGNsYXNzXV0gJiYKLSAgICAgICFbc2VsZiBpc0tpbmRPZkNsYXNzOltvdGhl
ciBjbGFzc11dKSB7Ci0gICAgcmV0dXJuIE5POwotICB9Ci0KLSAgR1BCRGVzY3JpcHRvciAqZGVz
Y3JpcHRvciA9IFtbc2VsZiBjbGFzc10gZGVzY3JpcHRvcl07Ci0gIHVpbnQ4X3QgKnNlbGZTdG9y
YWdlID0gKHVpbnQ4X3QgKiltZXNzYWdlU3RvcmFnZV87Ci0gIHVpbnQ4X3QgKm90aGVyU3RvcmFn
ZSA9ICh1aW50OF90ICopb3RoZXItPm1lc3NhZ2VTdG9yYWdlXzsKLQotICBmb3IgKEdQQkZpZWxk
RGVzY3JpcHRvciAqZmllbGQgaW4gZGVzY3JpcHRvci0+ZmllbGRzXykgewotICAgIGlmIChHUEJG
aWVsZElzTWFwT3JBcnJheShmaWVsZCkpIHsKLSAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgbGlz
dCBvciBtYXAsIHRoZXJlIGlzIG5vIF9oYXNJdmFyIHRvIHdvcnJ5IGFib3V0LgotICAgICAgLy8g
Tk9URTogVGhlc2UgYXJlIE5TQXJyYXkvR1BCKkFycmF5IG9yIE5TRGljdGlvbmFyeS9HUEIqRGlj
dGlvbmFyeSwgYnV0Ci0gICAgICAvLyB0aGUgdHlwZSBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgYXMg
dGhlIG9iamVjdHMgYWxsIHN1cHBvcnQgLWNvdW50IGFuZAotICAgICAgLy8gLWlzRXF1YWw6Lgot
ICAgICAgTlNBcnJheSAqcmVzdWx0TWFwT3JBcnJheSA9Ci0gICAgICAgICAgR1BCR2V0T2JqZWN0
SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0gICAgICBOU0FycmF5ICpv
dGhlck1hcE9yQXJyYXkgPQotICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1
dG9jcmVhdGUob3RoZXIsIGZpZWxkKTsKLSAgICAgIC8vIG5pbCBhbmQgZW1wdHkgYXJlIGVxdWFs
Ci0gICAgICBpZiAocmVzdWx0TWFwT3JBcnJheS5jb3VudCAhPSAwIHx8IG90aGVyTWFwT3JBcnJh
eS5jb3VudCAhPSAwKSB7Ci0gICAgICAgIGlmICghW3Jlc3VsdE1hcE9yQXJyYXkgaXNFcXVhbDpv
dGhlck1hcE9yQXJyYXldKSB7Ci0gICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfSBlbHNlIHsgIC8vIFNpbmdsZSBmaWVsZAotICAgICAgaW50MzJfdCBoYXNJbmRl
eCA9IEdQQkZpZWxkSGFzSW5kZXgoZmllbGQpOwotICAgICAgdWludDMyX3QgZmllbGROdW0gPSBH
UEJGaWVsZE51bWJlcihmaWVsZCk7Ci0gICAgICBCT09MIHNlbGZIYXMgPSBHUEJHZXRIYXNJdmFy
KHNlbGYsIGhhc0luZGV4LCBmaWVsZE51bSk7Ci0gICAgICBCT09MIG90aGVySGFzID0gR1BCR2V0
SGFzSXZhcihvdGhlciwgaGFzSW5kZXgsIGZpZWxkTnVtKTsKLSAgICAgIGlmIChzZWxmSGFzICE9
IG90aGVySGFzKSB7Ci0gICAgICAgIHJldHVybiBOTzsgIC8vIERpZmZlcmluZyBoYXMgdmFsdWVz
LCBub3QgZXF1YWwuCi0gICAgICB9Ci0gICAgICBpZiAoIXNlbGZIYXMpIHsKLSAgICAgICAgLy8g
U2FtZSBoYXMgdmFsdWVzLCB3YXMgbm8sIG5vdGhpbmcgZWxzZSB0byBjaGVjayBmb3IgdGhpcyBm
aWVsZC4KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAvLyBOb3cgY29tcGFyZSB0
aGUgdmFsdWVzLgotICAgICAgR1BCRGF0YVR5cGUgZmllbGREYXRhVHlwZSA9IEdQQkdldEZpZWxk
RGF0YVR5cGUoZmllbGQpOwotICAgICAgc2l6ZV90IGZpZWxkT2Zmc2V0ID0gZmllbGQtPmRlc2Ny
aXB0aW9uXy0+b2Zmc2V0OwotICAgICAgc3dpdGNoIChmaWVsZERhdGFUeXBlKSB7Ci0gICAgICAg
IGNhc2UgR1BCRGF0YVR5cGVCb29sOiB7Ci0gICAgICAgICAgLy8gQm9vbHMgYXJlIHN0b3JlZCBp
biBoYXNfYml0cyB0byBhdm9pZCBuZWVkaW5nIGV4cGxpY2l0IHNwYWNlIGluCi0gICAgICAgICAg
Ly8gdGhlIHN0b3JhZ2Ugc3RydWN0dXJlLgotICAgICAgICAgIC8vICh0aGUgZmllbGQgbnVtYmVy
IHBhc3NlZCB0byB0aGUgSGFzSXZhciBoZWxwZXIgZG9lc24ndCByZWFsbHkKLSAgICAgICAgICAv
LyBtYXR0ZXIgc2luY2UgdGhlIG9mZnNldCBpcyBuZXZlciBuZWdhdGl2ZSkKLSAgICAgICAgICBC
T09MIHNlbGZWYWx1ZSA9IEdQQkdldEhhc0l2YXIoc2VsZiwgKGludDMyX3QpKGZpZWxkT2Zmc2V0
KSwgMCk7Ci0gICAgICAgICAgQk9PTCBvdGhlclZhbHVlID0gR1BCR2V0SGFzSXZhcihvdGhlciwg
KGludDMyX3QpKGZpZWxkT2Zmc2V0KSwgMCk7Ci0gICAgICAgICAgaWYgKHNlbGZWYWx1ZSAhPSBv
dGhlclZhbHVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4ZWQzMjoK
LSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUludDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBl
U0ludDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlRW51bToKLSAgICAgICAgY2FzZSBHUEJE
YXRhVHlwZUZpeGVkMzI6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVVSW50MzI6Ci0gICAgICAg
IGNhc2UgR1BCRGF0YVR5cGVGbG9hdDogewotICAgICAgICAgIF9HUEJDb21waWxlQXNzZXJ0KHNp
emVvZihmbG9hdCkgPT0gc2l6ZW9mKHVpbnQzMl90KSwgZmxvYXRfbm90XzMyX2JpdHMpOwotICAg
ICAgICAgIC8vIFRoZXNlIGFyZSBhbGwgMzJiaXQsIHNpZ25lZC91bnNpZ25lZCBkb2Vzbid0IG1h
dHRlciBmb3IgZXF1YWxpdHkuCi0gICAgICAgICAgdWludDMyX3QgKnNlbGZWYWxQdHIgPSAodWlu
dDMyX3QgKikmc2VsZlN0b3JhZ2VbZmllbGRPZmZzZXRdOwotICAgICAgICAgIHVpbnQzMl90ICpv
dGhlclZhbFB0ciA9ICh1aW50MzJfdCAqKSZvdGhlclN0b3JhZ2VbZmllbGRPZmZzZXRdOwotICAg
ICAgICAgIGlmICgqc2VsZlZhbFB0ciAhPSAqb3RoZXJWYWxQdHIpIHsKLSAgICAgICAgICAgIHJl
dHVybiBOTzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBHUEJEYXRhVHlwZVNGaXhlZDY0OgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlSW50
NjQ6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVTSW50NjQ6Ci0gICAgICAgIGNhc2UgR1BCRGF0
YVR5cGVGaXhlZDY0OgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlVUludDY0OgotICAgICAgICBj
YXNlIEdQQkRhdGFUeXBlRG91YmxlOiB7Ci0gICAgICAgICAgX0dQQkNvbXBpbGVBc3NlcnQoc2l6
ZW9mKGRvdWJsZSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgZG91YmxlX25vdF82NF9iaXRzKTsKLSAg
ICAgICAgICAvLyBUaGVzZSBhcmUgYWxsIDY0Yml0LCBzaWduZWQvdW5zaWduZWQgZG9lc24ndCBt
YXR0ZXIgZm9yIGVxdWFsaXR5LgotICAgICAgICAgIHVpbnQ2NF90ICpzZWxmVmFsUHRyID0gKHVp
bnQ2NF90ICopJnNlbGZTdG9yYWdlW2ZpZWxkT2Zmc2V0XTsKLSAgICAgICAgICB1aW50NjRfdCAq
b3RoZXJWYWxQdHIgPSAodWludDY0X3QgKikmb3RoZXJTdG9yYWdlW2ZpZWxkT2Zmc2V0XTsKLSAg
ICAgICAgICBpZiAoKnNlbGZWYWxQdHIgIT0gKm90aGVyVmFsUHRyKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gTk87Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgR1BCRGF0YVR5cGVCeXRlczoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVN0cmlu
ZzoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZU1lc3NhZ2U6Ci0gICAgICAgIGNhc2UgR1BCRGF0
YVR5cGVHcm91cDogewotICAgICAgICAgIC8vIFR5cGUgZG9lc24ndCBtYXR0ZXIgaGVyZSwgdGhl
eSBhbGwgaW1wbGVtZW50IC1pc0VxdWFsOi4KLSAgICAgICAgICBpZCAqc2VsZlZhbFB0ciA9IChp
ZCAqKSZzZWxmU3RvcmFnZVtmaWVsZE9mZnNldF07Ci0gICAgICAgICAgaWQgKm90aGVyVmFsUHRy
ID0gKGlkICopJm90aGVyU3RvcmFnZVtmaWVsZE9mZnNldF07Ci0gICAgICAgICAgaWYgKCFbKnNl
bGZWYWxQdHIgaXNFcXVhbDoqb3RoZXJWYWxQdHJdKSB7Ci0gICAgICAgICAgICByZXR1cm4gTk87
Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9IC8vIHN3
aXRjaCgpCi0gICAgfSAgIC8vIGlmKG1hcE9yQXJyYXkpLi4uZWxzZQotICB9ICAvLyBmb3IoZmll
bGRzKQotCi0gIC8vIG5pbCBhbmQgZW1wdHkgYXJlIGVxdWFsCi0gIGlmIChleHRlbnNpb25NYXBf
LmNvdW50ICE9IDAgfHwgb3RoZXItPmV4dGVuc2lvbk1hcF8uY291bnQgIT0gMCkgewotICAgIGlm
ICghW2V4dGVuc2lvbk1hcF8gaXNFcXVhbDpvdGhlci0+ZXh0ZW5zaW9uTWFwX10pIHsKLSAgICAg
IHJldHVybiBOTzsKLSAgICB9Ci0gIH0KLQotICAvLyBuaWwgYW5kIGVtcHR5IGFyZSBlcXVhbAot
ICBHUEJVbmtub3duRmllbGRTZXQgKm90aGVyVW5rbm93bnMgPSBvdGhlci0+dW5rbm93bkZpZWxk
c187Ci0gIGlmIChbdW5rbm93bkZpZWxkc18gY291bnRPZkZpZWxkc10gIT0gMCB8fAotICAgICAg
W290aGVyVW5rbm93bnMgY291bnRPZkZpZWxkc10gIT0gMCkgewotICAgIGlmICghW3Vua25vd25G
aWVsZHNfIGlzRXF1YWw6b3RoZXJVbmtub3duc10pIHsKLSAgICAgIHJldHVybiBOTzsKLSAgICB9
Ci0gIH0KLQotICByZXR1cm4gWUVTOwotfQotCi0vLyBJdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0byBp
bXBsZW1lbnQgYSBnZW5lcmljIGhhc2ggZm9yIFByb3RvQnVmIG1lc3NhZ2VzIHRoYXQKLS8vIHdp
bGwgcGVyZm9ybSB3ZWxsLiBJZiB5b3UgbmVlZCBoYXNoaW5nIG9uIHlvdXIgUHJvdG9CdWZzIChl
ZyB5b3UgYXJlIHVzaW5nCi0vLyB0aGVtIGFzIGRpY3Rpb25hcnkga2V5cykgeW91IHdpbGwgcHJv
YmFibHkgd2FudCB0byBpbXBsZW1lbnQgYSBQcm90b0J1ZgotLy8gbWVzc2FnZSBzcGVjaWZpYyBo
YXNoIGFzIGEgY2F0ZWdvcnkgb24geW91ciBwcm90b2J1ZiBjbGFzcy4gRG8gbm90IG1ha2UgaXQg
YQotLy8gY2F0ZWdvcnkgb24gR1BCTWVzc2FnZSBhcyB5b3Ugd2lsbCBjb25mbGljdCB3aXRoIHRo
aXMgaGFzaCwgYW5kIHdpbGwgcG9zc2libHkKLS8vIG92ZXJyaWRlIGhhc2ggZm9yIGFsbCBnZW5l
cmF0ZWQgcHJvdG9idWZzLiBBIGdvb2QgaW1wbGVtZW50YXRpb24gb2YgaGFzaCB3aWxsCi0vLyBi
ZSByZWFsbHkgZmFzdCwgc28gd2Ugd291bGQgcmVjb21tZW5kIG9ubHkgaGFzaGluZyBwcm90b2J1
ZnMgdGhhdCBoYXZlIGFuCi0vLyBpZGVudGlmaWVyIGZpZWxkIG9mIHNvbWUga2luZCB0aGF0IHlv
dSBjYW4gZWFzaWx5IGhhc2guIElmIHlvdSBpbXBsZW1lbnQKLS8vIGhhc2gsIHdlIHdvdWxkIHN0
cm9uZ2x5IHJlY29tbWVuZCBvdmVycmlkaW5nIGlzRXF1YWw6IGluIHlvdXIgY2F0ZWdvcnkgYXMK
LS8vIHdlbGwsIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGlzRXF1YWw6IGlzIGV4
dHJlbWVseSBzbG93LCBhbmQgbWF5Ci0vLyBkcmFzdGljYWxseSBhZmZlY3QgcGVyZm9ybWFuY2Ug
aW4gbGFyZ2Ugc2V0cy4KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIEdQQkRlc2NyaXB0b3IgKmRl
c2NyaXB0b3IgPSBbW3NlbGYgY2xhc3NdIGRlc2NyaXB0b3JdOwotICBjb25zdCBOU1VJbnRlZ2Vy
IHByaW1lID0gMTk7Ci0gIHVpbnQ4X3QgKnN0b3JhZ2UgPSAodWludDhfdCAqKW1lc3NhZ2VTdG9y
YWdlXzsKLQotICAvLyBTdGFydCB3aXRoIHRoZSBkZXNjcmlwdG9yIGFuZCB0aGVuIG1peCBpdCB3
aXRoIHNvbWUgaW5zdGFuY2UgaW5mby4KLSAgLy8gSG9wZWZ1bGx5IHRoYXQgd2lsbCBnaXZlIGEg
c3ByZWFkIGJhc2VkIG9uIGNsYXNzZXMgYW5kIHdoYXQgZmllbGRzIGFyZSBzZXQuCi0gIE5TVUlu
dGVnZXIgcmVzdWx0ID0gKE5TVUludGVnZXIpZGVzY3JpcHRvcjsKLQotICBmb3IgKEdQQkZpZWxk
RGVzY3JpcHRvciAqZmllbGQgaW4gZGVzY3JpcHRvci0+ZmllbGRzXykgewotICAgIGlmIChHUEJG
aWVsZElzTWFwT3JBcnJheShmaWVsZCkpIHsKLSAgICAgIC8vIEV4YWN0IHR5cGUgZG9lc24ndCBt
YXR0ZXIsIGp1c3QgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBlbGVtZW50cy4KLSAgICAgIE5TQXJy
YXkgKm1hcE9yQXJyYXkgPSBHUEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKHNl
bGYsIGZpZWxkKTsKLSAgICAgIE5TVUludGVnZXIgY291bnQgPSBtYXBPckFycmF5LmNvdW50Owot
ICAgICAgaWYgKGNvdW50KSB7Ci0gICAgICAgIC8vIE5TQXJyYXkvTlNEaWN0aW9uYXJ5IHVzZSBj
b3VudCwgdXNlIHRoZSBmaWVsZCBudW1iZXIgYW5kIHRoZSBjb3VudC4KLSAgICAgICAgcmVzdWx0
ID0gcHJpbWUgKiByZXN1bHQgKyBHUEJGaWVsZE51bWJlcihmaWVsZCk7Ci0gICAgICAgIHJlc3Vs
dCA9IHByaW1lICogcmVzdWx0ICsgY291bnQ7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChHUEJH
ZXRIYXNJdmFyRmllbGQoc2VsZiwgZmllbGQpKSB7Ci0gICAgICAvLyBKdXN0IHVzaW5nIHRoZSBm
aWVsZCBudW1iZXIgc2VlbWVkIHNpbXBsZS9mYXN0LCBidXQgdGhlbiBhIHNtYWxsCi0gICAgICAv
LyBtZXNzYWdlIGNsYXNzIHdoZXJlIGFsbCB0aGUgc2FtZSBmaWVsZHMgYXJlIGFsd2F5cyBzZXQg
KHRvIGRpZmZlcmVudAotICAgICAgLy8gdGhpbmdzIHdvdWxkIGVuZCB1cCBhbGwgd2l0aCB0aGUg
c2FtZSBoYXNoLCBzbyBwdWxsIGluIHNvbWUgZGF0YSkuCi0gICAgICBHUEJEYXRhVHlwZSBmaWVs
ZERhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gICAgICBzaXplX3QgZmll
bGRPZmZzZXQgPSBmaWVsZC0+ZGVzY3JpcHRpb25fLT5vZmZzZXQ7Ci0gICAgICBzd2l0Y2ggKGZp
ZWxkRGF0YVR5cGUpIHsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUJvb2w6IHsKLSAgICAgICAg
ICAvLyBCb29scyBhcmUgc3RvcmVkIGluIGhhc19iaXRzIHRvIGF2b2lkIG5lZWRpbmcgZXhwbGlj
aXQgc3BhY2UgaW4KLSAgICAgICAgICAvLyB0aGUgc3RvcmFnZSBzdHJ1Y3R1cmUuCi0gICAgICAg
ICAgLy8gKHRoZSBmaWVsZCBudW1iZXIgcGFzc2VkIHRvIHRoZSBIYXNJdmFyIGhlbHBlciBkb2Vz
bid0IHJlYWxseQotICAgICAgICAgIC8vIG1hdHRlciBzaW5jZSB0aGUgb2Zmc2V0IGlzIG5ldmVy
IG5lZ2F0aXZlKQotICAgICAgICAgIEJPT0wgdmFsdWUgPSBHUEJHZXRIYXNJdmFyKHNlbGYsIChp
bnQzMl90KShmaWVsZE9mZnNldCksIDApOwotICAgICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVz
dWx0ICsgdmFsdWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBH
UEJEYXRhVHlwZVNGaXhlZDMyOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlSW50MzI6Ci0gICAg
ICAgIGNhc2UgR1BCRGF0YVR5cGVTSW50MzI6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVFbnVt
OgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlRml4ZWQzMjoKLSAgICAgICAgY2FzZSBHUEJEYXRh
VHlwZVVJbnQzMjoKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUZsb2F0OiB7Ci0gICAgICAgICAg
X0dQQkNvbXBpbGVBc3NlcnQoc2l6ZW9mKGZsb2F0KSA9PSBzaXplb2YodWludDMyX3QpLCBmbG9h
dF9ub3RfMzJfYml0cyk7Ci0gICAgICAgICAgLy8gVGhlc2UgYXJlIGFsbCAzMmJpdCwganVzdCBt
aXggaXQgaW4uCi0gICAgICAgICAgdWludDMyX3QgKnZhbFB0ciA9ICh1aW50MzJfdCAqKSZzdG9y
YWdlW2ZpZWxkT2Zmc2V0XTsKLSAgICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArICp2
YWxQdHI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHUEJEYXRh
VHlwZVNGaXhlZDY0OgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlSW50NjQ6Ci0gICAgICAgIGNh
c2UgR1BCRGF0YVR5cGVTSW50NjQ6Ci0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVGaXhlZDY0Ogot
ICAgICAgICBjYXNlIEdQQkRhdGFUeXBlVUludDY0OgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBl
RG91YmxlOiB7Ci0gICAgICAgICAgX0dQQkNvbXBpbGVBc3NlcnQoc2l6ZW9mKGRvdWJsZSkgPT0g
c2l6ZW9mKHVpbnQ2NF90KSwgZG91YmxlX25vdF82NF9iaXRzKTsKLSAgICAgICAgICAvLyBUaGVz
ZSBhcmUgYWxsIDY0Yml0LCBqdXN0IG1peCB3aGF0IGZpdHMgaW50byBhbiBOU1VJbnRlZ2VyIGlu
LgotICAgICAgICAgIHVpbnQ2NF90ICp2YWxQdHIgPSAodWludDY0X3QgKikmc3RvcmFnZVtmaWVs
ZE9mZnNldF07Ci0gICAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyAoTlNVSW50ZWdl
cikoKnZhbFB0cik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBH
UEJEYXRhVHlwZUJ5dGVzOgotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlU3RyaW5nOiB7Ci0gICAg
ICAgICAgLy8gVHlwZSBkb2Vzbid0IG1hdHRlciBoZXJlLCB0aGV5IGJvdGggaW1wbGVtZW50IC1o
YXNoOi4KLSAgICAgICAgICBpZCAqdmFsUHRyID0gKGlkICopJnN0b3JhZ2VbZmllbGRPZmZzZXRd
OwotICAgICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgWyp2YWxQdHIgaGFzaF07Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdQQkRhdGFUeXBlTWVz
c2FnZToKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUdyb3VwOiB7Ci0gICAgICAgICAgR1BCTWVz
c2FnZSAqKnZhbFB0ciA9IChHUEJNZXNzYWdlICoqKSZzdG9yYWdlW2ZpZWxkT2Zmc2V0XTsKLSAg
ICAgICAgICAvLyBDb3VsZCBjYWxsIC1oYXNoIG9uIHRoZSBzdWIgbWVzc2FnZSwgYnV0IHRoYXQg
Y291bGQgcmVjdXJzZSBwcmV0dHkKLSAgICAgICAgICAvLyBkZWVwOyBmb2xsb3cgdGhlIGxlYWQg
b2YgTlNBcnJheS9OU0RpY3Rpb25hcnkgYW5kIGRvbid0IHJlYWxseQotICAgICAgICAgIC8vIHJl
Y3Vyc2UgZm9yIGhhc2gsIGluc3RlYWQgdXNlIHRoZSBmaWVsZCBudW1iZXIgYW5kIHRoZSBkZXNj
cmlwdG9yCi0gICAgICAgICAgLy8gb2YgdGhlIHN1YiBtZXNzYWdlLiAgWWVzLCB0aGlzIGNvdWxk
IHN1Y2sgZm9yIGEgYnVuY2ggb2YgbWVzc2FnZXMKLSAgICAgICAgICAvLyB3aGVyZSB0aGV5IGFs
bCBvbmx5IGRpZmZlciBpbiB0aGUgc3ViIG1lc3NhZ2VzLCBidXQgaWYgeW91IGFyZQotICAgICAg
ICAgIC8vIHVzaW5nIGEgbWVzc2FnZSB3aXRoIHN1YiBtZXNzYWdlcyBmb3Igc29tZXRoaW5nIHRo
YXQgbmVlZHMgLWhhc2gsCi0gICAgICAgICAgLy8gb2RkcyBhcmUgeW91IGFyZSBhbHNvIGNvcHlp
bmcgdGhlbSBhcyBrZXlzLCBhbmQgdGhhdCBkZWVwIGNvcHkKLSAgICAgICAgICAvLyB3aWxsIGFs
c28gc3Vjay4KLSAgICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIEdQQkZpZWxkTnVt
YmVyKGZpZWxkKTsKLSAgICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIChOU1VJbnRl
Z2VyKVtbKnZhbFB0ciBjbGFzc10gZGVzY3JpcHRvcl07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgIH0gLy8gc3dpdGNoKCkKLSAgICB9Ci0gIH0KLQotICAvLyBVbmtub3ducyBh
bmQgZXh0ZW5zaW9ucyBhcmUgbm90IGluY2x1ZGVkLgotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0K
LSNwcmFnbWEgbWFyayAtIERlc2NyaXB0aW9uIFN1cHBvcnQKLQotLSAoTlNTdHJpbmcgKilkZXNj
cmlwdGlvbiB7Ci0gIE5TU3RyaW5nICp0ZXh0Rm9ybWF0ID0gR1BCVGV4dEZvcm1hdEZvck1lc3Nh
Z2Uoc2VsZiwgQCIgICAgIik7Ci0gIE5TU3RyaW5nICpkZXNjcmlwdGlvbiA9IFtOU1N0cmluZwot
ICAgICAgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD46IHtcbiVAfSIsIFtzZWxmIGNsYXNzXSwg
c2VsZiwgdGV4dEZvcm1hdF07Ci0gIHJldHVybiBkZXNjcmlwdGlvbjsKLX0KLQotI2lmIERFQlVH
Ci0KLS8vIFhjb2RlIDUuMSBhZGRlZCBzdXBwb3J0IGZvciBjdXN0b20gcXVpY2sgbG9vayBpbmZv
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvaW9zL2RvY3VtZW50YXRp
b24vSURFcy9Db25jZXB0dWFsL0N1c3RvbUNsYXNzRGlzcGxheV9pbl9RdWlja0xvb2svQ0gwMS1x
dWlja19sb29rX2Zvcl9jdXN0b21fb2JqZWN0cy9DSDAxLXF1aWNrX2xvb2tfZm9yX2N1c3RvbV9v
YmplY3RzLmh0bWwjLy9hcHBsZV9yZWYvZG9jL3VpZC9UUDQwMDE0MDAxLUNIMi1TVzEKLS0gKGlk
KWRlYnVnUXVpY2tMb29rT2JqZWN0IHsKLSAgcmV0dXJuIEdQQlRleHRGb3JtYXRGb3JNZXNzYWdl
KHNlbGYsIG5pbCk7Ci19Ci0KLSNlbmRpZiAgLy8gREVCVUcKLQotI3ByYWdtYSBtYXJrIC0gU2Vy
aWFsaXplZFNpemUKLQotLSAoc2l6ZV90KXNlcmlhbGl6ZWRTaXplIHsKLSAgR1BCRGVzY3JpcHRv
ciAqZGVzY3JpcHRvciA9IFtbc2VsZiBjbGFzc10gZGVzY3JpcHRvcl07Ci0gIHNpemVfdCByZXN1
bHQgPSAwOwotCi0gIC8vIEhhcyBjaGVjayBpcyBkb25lIGV4cGxpY2l0bHksIHNvIEdQQkdldE9i
amVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoKQotICAvLyBhdm9pZHMgZG9pbmcgdGhlIGhh
cyBjaGVjayBhZ2Fpbi4KLQotICAvLyBGaWVsZHMuCi0gIGZvciAoR1BCRmllbGREZXNjcmlwdG9y
ICpmaWVsZERlc2NyaXB0b3IgaW4gZGVzY3JpcHRvci0+ZmllbGRzXykgewotICAgIEdQQkZpZWxk
VHlwZSBmaWVsZFR5cGUgPSBmaWVsZERlc2NyaXB0b3IuZmllbGRUeXBlOwotICAgIEdQQkRhdGFU
eXBlIGZpZWxkRGF0YVR5cGUgPSBHUEJHZXRGaWVsZERhdGFUeXBlKGZpZWxkRGVzY3JpcHRvcik7
Ci0KLSAgICAvLyBTaW5nbGUgRmllbGRzCi0gICAgaWYgKGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5
cGVTaW5nbGUpIHsKLSAgICAgIEJPT0wgc2VsZkhhcyA9IEdQQkdldEhhc0l2YXJGaWVsZChzZWxm
LCBmaWVsZERlc2NyaXB0b3IpOwotICAgICAgaWYgKCFzZWxmSGFzKSB7Ci0gICAgICAgIGNvbnRp
bnVlOyAgLy8gTm90aGluZyB0byBkby4KLSAgICAgIH0KLQotICAgICAgdWludDMyX3QgZmllbGRO
dW1iZXIgPSBHUEJGaWVsZE51bWJlcihmaWVsZERlc2NyaXB0b3IpOwotCi0gICAgICBzd2l0Y2gg
KGZpZWxkRGF0YVR5cGUpIHsKLSNkZWZpbmUgQ0FTRV9TSU5HTEVfUE9EKE5BTUUsIFRZUEUsIEZV
TkNfVFlQRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY2FzZSBH
UEJEYXRhVHlwZSMjTkFNRTogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICBUWVBFIGZpZWxkVmFsID0gR1BCR2V0TWVzc2FnZSMjRlVOQ19U
WVBFIyNGaWVsZChzZWxmLCBmaWVsZERlc2NyaXB0b3IpOyBcCi0gICAgICAgICAgcmVzdWx0ICs9
IEdQQkNvbXB1dGUjI05BTUUjI1NpemUoZmllbGROdW1iZXIsIGZpZWxkVmFsKTsgICAgICAgICAg
ICBcCi0gICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0KLSNkZWZpbmUgQ0FTRV9TSU5H
TEVfT0JKRUNUKE5BTUUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZSMjTkFNRTogeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpZCBmaWVsZFZhbCA9IEdQ
QkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGREZXNjcmlwdG9y
KTsgXAotICAgICAgICAgIHJlc3VsdCArPSBHUEJDb21wdXRlIyNOQU1FIyNTaXplKGZpZWxkTnVt
YmVyLCBmaWVsZFZhbCk7ICAgICAgICAgICAgXAotICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB9Ci0gICAgICAgICAgQ0FTRV9TSU5HTEVfUE9EKEJvb2wsIEJPT0wsIEJvb2wpCi0gICAg
ICAgICAgQ0FTRV9TSU5HTEVfUE9EKEZpeGVkMzIsIHVpbnQzMl90LCBVSW50MzIpCi0gICAgICAg
ICAgQ0FTRV9TSU5HTEVfUE9EKFNGaXhlZDMyLCBpbnQzMl90LCBJbnQzMikKLSAgICAgICAgICBD
QVNFX1NJTkdMRV9QT0QoRmxvYXQsIGZsb2F0LCBGbG9hdCkKLSAgICAgICAgICBDQVNFX1NJTkdM
RV9QT0QoRml4ZWQ2NCwgdWludDY0X3QsIFVJbnQ2NCkKLSAgICAgICAgICBDQVNFX1NJTkdMRV9Q
T0QoU0ZpeGVkNjQsIGludDY0X3QsIEludDY0KQotICAgICAgICAgIENBU0VfU0lOR0xFX1BPRChE
b3VibGUsIGRvdWJsZSwgRG91YmxlKQotICAgICAgICAgIENBU0VfU0lOR0xFX1BPRChJbnQzMiwg
aW50MzJfdCwgSW50MzIpCi0gICAgICAgICAgQ0FTRV9TSU5HTEVfUE9EKEludDY0LCBpbnQ2NF90
LCBJbnQ2NCkKLSAgICAgICAgICBDQVNFX1NJTkdMRV9QT0QoU0ludDMyLCBpbnQzMl90LCBJbnQz
MikKLSAgICAgICAgICBDQVNFX1NJTkdMRV9QT0QoU0ludDY0LCBpbnQ2NF90LCBJbnQ2NCkKLSAg
ICAgICAgICBDQVNFX1NJTkdMRV9QT0QoVUludDMyLCB1aW50MzJfdCwgVUludDMyKQotICAgICAg
ICAgIENBU0VfU0lOR0xFX1BPRChVSW50NjQsIHVpbnQ2NF90LCBVSW50NjQpCi0gICAgICAgICAg
Q0FTRV9TSU5HTEVfT0JKRUNUKEJ5dGVzKQotICAgICAgICAgIENBU0VfU0lOR0xFX09CSkVDVChT
dHJpbmcpCi0gICAgICAgICAgQ0FTRV9TSU5HTEVfT0JKRUNUKE1lc3NhZ2UpCi0gICAgICAgICAg
Q0FTRV9TSU5HTEVfT0JKRUNUKEdyb3VwKQotICAgICAgICAgIENBU0VfU0lOR0xFX1BPRChFbnVt
LCBpbnQzMl90LCBJbnQzMikKLSN1bmRlZiBDQVNFX1NJTkdMRV9QT0QKLSN1bmRlZiBDQVNFX1NJ
TkdMRV9PQkpFQ1QKLSAgICAgIH0KLQotICAgIC8vIFJlcGVhdGVkIEZpZWxkcwotICAgIH0gZWxz
ZSBpZiAoZmllbGRUeXBlID09IEdQQkZpZWxkVHlwZVJlcGVhdGVkKSB7Ci0gICAgICBpZCBnZW5l
cmljQXJyYXkgPQotICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVh
dGUoc2VsZiwgZmllbGREZXNjcmlwdG9yKTsKLSAgICAgIE5TVUludGVnZXIgY291bnQgPSBbZ2Vu
ZXJpY0FycmF5IGNvdW50XTsKLSAgICAgIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgICAgIGNvbnRp
bnVlOyAgLy8gTm90aGluZyB0byBhZGQuCi0gICAgICB9Ci0gICAgICBfX2Jsb2NrIHNpemVfdCBk
YXRhU2l6ZSA9IDA7Ci0KLSAgICAgIHN3aXRjaCAoZmllbGREYXRhVHlwZSkgewotI2RlZmluZSBD
QVNFX1JFUEVBVEVEX1BPRChOQU1FLCBUWVBFLCBBUlJBWV9UWVBFKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIENBU0VfUkVQRUFURURfUE9EX0VYVFJBKE5BTUUsIFRZUEUsIEFS
UkFZX1RZUEUsICkKLSNkZWZpbmUgQ0FTRV9SRVBFQVRFRF9QT0RfRVhUUkEoTkFNRSwgVFlQRSwg
QVJSQVlfVFlQRSwgQVJSQVlfQUNDRVNTT1JfTkFNRSkgIFwKLSAgICAgICAgY2FzZSBHUEJEYXRh
VHlwZSMjTkFNRTogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICBHUEIjI0FSUkFZX1RZUEUjI0FycmF5ICphcnJheSA9IGdlbmVyaWNBcnJh
eTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBbYXJyYXkgZW51bWVyYXRlIyNB
UlJBWV9BQ0NFU1NPUl9OQU1FIyNWYWx1ZXNXaXRoQmxvY2s6XihUWVBFIHZhbHVlLCBOU1VJbnRl
Z2VyIGlkeCwgQk9PTCAqc3RvcCkgeyBcCi0gICAgICAgICAgICBfUHJhZ21hKCJ1bnVzZWQoaWR4
LCBzdG9wKSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBkYXRhU2l6ZSArPSBHUEJDb21wdXRlIyNOQU1FIyNTaXplTm9UYWcodmFsdWUpOyAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgfV07ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIH0KLSNkZWZpbmUgQ0FTRV9SRVBFQVRFRF9PQkpFQ1QoTkFNRSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY2FzZSBH
UEJEYXRhVHlwZSMjTkFNRTogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICBmb3IgKGlkIHZhbHVlIGluIGdlbmVyaWNBcnJheSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGRhdGFTaXplICs9
IEdQQkNvbXB1dGUjI05BTUUjI1NpemVOb1RhZyh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
fQotICAgICAgICAgIENBU0VfUkVQRUFURURfUE9EKEJvb2wsIEJPT0wsIEJvb2wpCi0gICAgICAg
ICAgQ0FTRV9SRVBFQVRFRF9QT0QoRml4ZWQzMiwgdWludDMyX3QsIFVJbnQzMikKLSAgICAgICAg
ICBDQVNFX1JFUEVBVEVEX1BPRChTRml4ZWQzMiwgaW50MzJfdCwgSW50MzIpCi0gICAgICAgICAg
Q0FTRV9SRVBFQVRFRF9QT0QoRmxvYXQsIGZsb2F0LCBGbG9hdCkKLSAgICAgICAgICBDQVNFX1JF
UEVBVEVEX1BPRChGaXhlZDY0LCB1aW50NjRfdCwgVUludDY0KQotICAgICAgICAgIENBU0VfUkVQ
RUFURURfUE9EKFNGaXhlZDY0LCBpbnQ2NF90LCBJbnQ2NCkKLSAgICAgICAgICBDQVNFX1JFUEVB
VEVEX1BPRChEb3VibGUsIGRvdWJsZSwgRG91YmxlKQotICAgICAgICAgIENBU0VfUkVQRUFURURf
UE9EKEludDMyLCBpbnQzMl90LCBJbnQzMikKLSAgICAgICAgICBDQVNFX1JFUEVBVEVEX1BPRChJ
bnQ2NCwgaW50NjRfdCwgSW50NjQpCi0gICAgICAgICAgQ0FTRV9SRVBFQVRFRF9QT0QoU0ludDMy
LCBpbnQzMl90LCBJbnQzMikKLSAgICAgICAgICBDQVNFX1JFUEVBVEVEX1BPRChTSW50NjQsIGlu
dDY0X3QsIEludDY0KQotICAgICAgICAgIENBU0VfUkVQRUFURURfUE9EKFVJbnQzMiwgdWludDMy
X3QsIFVJbnQzMikKLSAgICAgICAgICBDQVNFX1JFUEVBVEVEX1BPRChVSW50NjQsIHVpbnQ2NF90
LCBVSW50NjQpCi0gICAgICAgICAgQ0FTRV9SRVBFQVRFRF9PQkpFQ1QoQnl0ZXMpCi0gICAgICAg
ICAgQ0FTRV9SRVBFQVRFRF9PQkpFQ1QoU3RyaW5nKQotICAgICAgICAgIENBU0VfUkVQRUFURURf
T0JKRUNUKE1lc3NhZ2UpCi0gICAgICAgICAgQ0FTRV9SRVBFQVRFRF9PQkpFQ1QoR3JvdXApCi0g
ICAgICAgICAgQ0FTRV9SRVBFQVRFRF9QT0RfRVhUUkEoRW51bSwgaW50MzJfdCwgRW51bSwgUmF3
KQotI3VuZGVmIENBU0VfUkVQRUFURURfUE9ECi0jdW5kZWYgQ0FTRV9SRVBFQVRFRF9QT0RfRVhU
UkEKLSN1bmRlZiBDQVNFX1JFUEVBVEVEX09CSkVDVAotICAgICAgfSAgLy8gc3dpdGNoCi0gICAg
ICByZXN1bHQgKz0gZGF0YVNpemU7Ci0gICAgICBzaXplX3QgdGFnU2l6ZSA9IEdQQkNvbXB1dGVU
YWdTaXplKEdQQkZpZWxkTnVtYmVyKGZpZWxkRGVzY3JpcHRvcikpOwotICAgICAgaWYgKGZpZWxk
RGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVHcm91cCkgewotICAgICAgICAvLyBHcm91cHMgaGF2ZSBi
b3RoIGEgc3RhcnQgYW5kIGFuIGVuZCB0YWcuCi0gICAgICAgIHRhZ1NpemUgKj0gMjsKLSAgICAg
IH0KLSAgICAgIGlmIChmaWVsZERlc2NyaXB0b3IuaXNQYWNrYWJsZSkgewotICAgICAgICByZXN1
bHQgKz0gdGFnU2l6ZTsKLSAgICAgICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVTaXplVFNpemVBc0lu
dDMyTm9UYWcoZGF0YVNpemUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ICs9IGNv
dW50ICogdGFnU2l6ZTsKLSAgICAgIH0KLQotICAgIC8vIE1hcDw+IEZpZWxkcwotICAgIH0gZWxz
ZSB7ICAvLyBmaWVsZFR5cGUgPT0gR1BCRmllbGRUeXBlTWFwCi0gICAgICBpZiAoR1BCRGF0YVR5
cGVJc09iamVjdChmaWVsZERhdGFUeXBlKSAmJgotICAgICAgICAgIChmaWVsZERlc2NyaXB0b3Iu
bWFwS2V5RGF0YVR5cGUgPT0gR1BCRGF0YVR5cGVTdHJpbmcpKSB7Ci0gICAgICAgIC8vIElmIGtl
eSB0eXBlIHdhcyBzdHJpbmcsIHRoZW4gdGhlIG1hcCBpcyBhbiBOU0RpY3Rpb25hcnkuCi0gICAg
ICAgIE5TRGljdGlvbmFyeSAqbWFwID0KLSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRo
RmllbGROb0F1dG9jcmVhdGUoc2VsZiwgZmllbGREZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKG1h
cCkgewotICAgICAgICAgIHJlc3VsdCArPSBHUEJEaWN0aW9uYXJ5Q29tcHV0ZVNpemVJbnRlcm5h
bEhlbHBlcihtYXAsIGZpZWxkRGVzY3JpcHRvcik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIFR5cGUgd2lsbCBiZSBHUEIqR3JvdXBEaWN0aW9uYXJ5LCBleGFjdCB0eXBl
IGRvZXNuJ3QgbWF0dGVyLgotICAgICAgICBHUEJJbnQzMkludDMyRGljdGlvbmFyeSAqbWFwID0K
LSAgICAgICAgICAgIEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwg
ZmllbGREZXNjcmlwdG9yKTsKLSAgICAgICAgcmVzdWx0ICs9IFttYXAgY29tcHV0ZVNlcmlhbGl6
ZWRTaXplQXNGaWVsZDpmaWVsZERlc2NyaXB0b3JdOwotICAgICAgfQotICAgIH0KLSAgfSAgLy8g
Zm9yKGZpZWxkcykKLQotICAvLyBBZGQgYW55IHVua25vd24gZmllbGRzLgotICBpZiAoZGVzY3Jp
cHRvci53aXJlRm9ybWF0KSB7Ci0gICAgcmVzdWx0ICs9IFt1bmtub3duRmllbGRzXyBzZXJpYWxp
emVkU2l6ZUFzTWVzc2FnZVNldF07Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0ICs9IFt1bmtub3du
RmllbGRzXyBzZXJpYWxpemVkU2l6ZV07Ci0gIH0KLQotICAvLyBBZGQgYW55IGV4dGVuc2lvbnMu
Ci0gIGZvciAoR1BCRXh0ZW5zaW9uRGVzY3JpcHRvciAqZXh0ZW5zaW9uIGluIGV4dGVuc2lvbk1h
cF8pIHsKLSAgICBpZCB2YWx1ZSA9IFtleHRlbnNpb25NYXBfIG9iamVjdEZvcktleTpleHRlbnNp
b25dOwotICAgIHJlc3VsdCArPSBHUEJDb21wdXRlRXh0ZW5zaW9uU2VyaWFsaXplZFNpemVJbmNs
dWRpbmdUYWcoZXh0ZW5zaW9uLCB2YWx1ZSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQot
Ci0jcHJhZ21hIG1hcmsgLSBSZXNvbHZlIE1ldGhvZHMgU3VwcG9ydAotCi10eXBlZGVmIHN0cnVj
dCBSZXNvbHZlSXZhckFjY2Vzc29yTWV0aG9kUmVzdWx0IHsKLSAgSU1QIGltcFRvQWRkOwotICBT
RUwgZW5jb2RpbmdTZWxlY3RvcjsKLX0gUmVzb2x2ZUl2YXJBY2Nlc3Nvck1ldGhvZFJlc3VsdDsK
LQotc3RhdGljIHZvaWQgUmVzb2x2ZUl2YXJHZXQoR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc29sdmVJdmFyQWNjZXNzb3JNZXRob2RSZXN1
bHQgKnJlc3VsdCkgewotICBHUEJEYXRhVHlwZSBmaWVsZERhdGFUeXBlID0gR1BCR2V0RmllbGRE
YXRhVHlwZShmaWVsZCk7Ci0gIHN3aXRjaCAoZmllbGREYXRhVHlwZSkgewotI2RlZmluZSBDQVNF
X0dFVChOQU1FLCBUWVBFLCBUUlVFX05BTUUpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgY2FzZSBHUEJEYXRhVHlwZSMjTkFNRTogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIHJlc3VsdC0+aW1wVG9BZGQgPSBpbXBfaW1wbGVtZW50YXRpb25XaXRo
QmxvY2soXihpZCBvYmopIHsgXAotICAgICAgICByZXR1cm4gR1BCR2V0TWVzc2FnZSMjVFJVRV9O
QU1FIyNGaWVsZChvYmosIGZpZWxkKTsgICAgICBcCi0gICAgICAgfSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlc3VsdC0+
ZW5jb2RpbmdTZWxlY3RvciA9IEBzZWxlY3RvcihnZXQjI05BTUUpOyAgICAgICAgICAgXAotICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgfQotI2RlZmluZSBDQVNFX0dFVF9PQkpFQ1QoTkFNRSwgVFlQRSwgVFJVRV9O
QU1FKSAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBHUEJEYXRhVHlwZSMjTkFNRTogeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlc3VsdC0+aW1wVG9B
ZGQgPSBpbXBfaW1wbGVtZW50YXRpb25XaXRoQmxvY2soXihpZCBvYmopIHsgXAotICAgICAgICBy
ZXR1cm4gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZChvYmosIGZpZWxkKTsgICAgICAgICAgICBc
Ci0gICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIHJlc3VsdC0+ZW5jb2RpbmdTZWxlY3RvciA9IEBzZWxlY3Rvcihn
ZXQjI05BTUUpOyAgICAgICAgICAgXAotICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotICAgICAgQ0FTRV9HRVQo
Qm9vbCwgQk9PTCwgQm9vbCkKLSAgICAgIENBU0VfR0VUKEZpeGVkMzIsIHVpbnQzMl90LCBVSW50
MzIpCi0gICAgICBDQVNFX0dFVChTRml4ZWQzMiwgaW50MzJfdCwgSW50MzIpCi0gICAgICBDQVNF
X0dFVChGbG9hdCwgZmxvYXQsIEZsb2F0KQotICAgICAgQ0FTRV9HRVQoRml4ZWQ2NCwgdWludDY0
X3QsIFVJbnQ2NCkKLSAgICAgIENBU0VfR0VUKFNGaXhlZDY0LCBpbnQ2NF90LCBJbnQ2NCkKLSAg
ICAgIENBU0VfR0VUKERvdWJsZSwgZG91YmxlLCBEb3VibGUpCi0gICAgICBDQVNFX0dFVChJbnQz
MiwgaW50MzJfdCwgSW50MzIpCi0gICAgICBDQVNFX0dFVChJbnQ2NCwgaW50NjRfdCwgSW50NjQp
Ci0gICAgICBDQVNFX0dFVChTSW50MzIsIGludDMyX3QsIEludDMyKQotICAgICAgQ0FTRV9HRVQo
U0ludDY0LCBpbnQ2NF90LCBJbnQ2NCkKLSAgICAgIENBU0VfR0VUKFVJbnQzMiwgdWludDMyX3Qs
IFVJbnQzMikKLSAgICAgIENBU0VfR0VUKFVJbnQ2NCwgdWludDY0X3QsIFVJbnQ2NCkKLSAgICAg
IENBU0VfR0VUX09CSkVDVChCeXRlcywgaWQsIE9iamVjdCkKLSAgICAgIENBU0VfR0VUX09CSkVD
VChTdHJpbmcsIGlkLCBPYmplY3QpCi0gICAgICBDQVNFX0dFVF9PQkpFQ1QoTWVzc2FnZSwgaWQs
IE9iamVjdCkKLSAgICAgIENBU0VfR0VUX09CSkVDVChHcm91cCwgaWQsIE9iamVjdCkKLSAgICAg
IENBU0VfR0VUKEVudW0sIGludDMyX3QsIEVudW0pCi0jdW5kZWYgQ0FTRV9HRVQKLSAgfQotfQot
Ci1zdGF0aWMgdm9pZCBSZXNvbHZlSXZhclNldChHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmlsZVN5bnRheCBzeW50YXgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZXNvbHZlSXZhckFjY2Vzc29yTWV0aG9kUmVzdWx0ICpyZXN1
bHQpIHsKLSAgR1BCRGF0YVR5cGUgZmllbGREYXRhVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUo
ZmllbGQpOwotICBzd2l0Y2ggKGZpZWxkRGF0YVR5cGUpIHsKLSNkZWZpbmUgQ0FTRV9TRVQoTkFN
RSwgVFlQRSwgVFJVRV9OQU1FKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBjYXNlIEdQQkRhdGFUeXBlIyNOQU1FOiB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlc3VsdC0+aW1wVG9BZGQgPSBpbXBf
aW1wbGVtZW50YXRpb25XaXRoQmxvY2soXihpZCBvYmosIFRZUEUgdmFsdWUpIHsgIFwKLSAgICAg
ICAgcmV0dXJuIEdQQlNldCMjVFJVRV9OQU1FIyNJdmFyV2l0aEZpZWxkSW50ZXJuYWwob2JqLCBm
aWVsZCwgdmFsdWUsIHN5bnRheCk7IFwKLSAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJl
c3VsdC0+ZW5jb2RpbmdTZWxlY3RvciA9IEBzZWxlY3RvcihzZXQjI05BTUU6KTsgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9Ci0gICAgICBDQVNF
X1NFVChCb29sLCBCT09MLCBCb29sKQotICAgICAgQ0FTRV9TRVQoRml4ZWQzMiwgdWludDMyX3Qs
IFVJbnQzMikKLSAgICAgIENBU0VfU0VUKFNGaXhlZDMyLCBpbnQzMl90LCBJbnQzMikKLSAgICAg
IENBU0VfU0VUKEZsb2F0LCBmbG9hdCwgRmxvYXQpCi0gICAgICBDQVNFX1NFVChGaXhlZDY0LCB1
aW50NjRfdCwgVUludDY0KQotICAgICAgQ0FTRV9TRVQoU0ZpeGVkNjQsIGludDY0X3QsIEludDY0
KQotICAgICAgQ0FTRV9TRVQoRG91YmxlLCBkb3VibGUsIERvdWJsZSkKLSAgICAgIENBU0VfU0VU
KEludDMyLCBpbnQzMl90LCBJbnQzMikKLSAgICAgIENBU0VfU0VUKEludDY0LCBpbnQ2NF90LCBJ
bnQ2NCkKLSAgICAgIENBU0VfU0VUKFNJbnQzMiwgaW50MzJfdCwgSW50MzIpCi0gICAgICBDQVNF
X1NFVChTSW50NjQsIGludDY0X3QsIEludDY0KQotICAgICAgQ0FTRV9TRVQoVUludDMyLCB1aW50
MzJfdCwgVUludDMyKQotICAgICAgQ0FTRV9TRVQoVUludDY0LCB1aW50NjRfdCwgVUludDY0KQot
ICAgICAgQ0FTRV9TRVQoQnl0ZXMsIGlkLCBPYmplY3QpCi0gICAgICBDQVNFX1NFVChTdHJpbmcs
IGlkLCBPYmplY3QpCi0gICAgICBDQVNFX1NFVChNZXNzYWdlLCBpZCwgT2JqZWN0KQotICAgICAg
Q0FTRV9TRVQoR3JvdXAsIGlkLCBPYmplY3QpCi0gICAgICBDQVNFX1NFVChFbnVtLCBpbnQzMl90
LCBFbnVtKQotI3VuZGVmIENBU0VfU0VUCi0gIH0KLX0KLQotKyAoQk9PTClyZXNvbHZlSW5zdGFu
Y2VNZXRob2Q6KFNFTClzZWwgewotICBjb25zdCBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0g
W3NlbGYgZGVzY3JpcHRvcl07Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIHJldHVybiBOTzsK
LSAgfQotCi0gIC8vIE5PVEU6IGhhc09yQ291bnRTZWxfL3NldEhhc1NlbF8gd2lsbCBiZSBOVUxM
IGlmIHRoZSBmaWVsZCBmb3IgdGhlIGdpdmVuCi0gIC8vIG1lc3NhZ2Ugc2hvdWxkIG5vdCBoYXZl
IGhhcyBzdXBwb3J0IChkb25lIGluIEdQQkRlc2NyaXB0b3IubSksIHNvIHRoZXJlIGlzCi0gIC8v
IG5vIG5lZWQgZm9yIGNoZWNrcyBoZXJlIHRvIHNlZSBpZiBoYXMqL3NldEhhcyogYXJlIGFsbG93
ZWQuCi0KLSAgUmVzb2x2ZUl2YXJBY2Nlc3Nvck1ldGhvZFJlc3VsdCByZXN1bHQgPSB7TlVMTCwg
TlVMTH07Ci0gIGZvciAoR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCBpbiBkZXNjcmlwdG9yLT5m
aWVsZHNfKSB7Ci0gICAgQk9PTCBpc01hcE9yQXJyYXkgPSBHUEJGaWVsZElzTWFwT3JBcnJheShm
aWVsZCk7Ci0gICAgaWYgKCFpc01hcE9yQXJyYXkpIHsKLSAgICAgIC8vIFNpbmdsZSBmaWVsZHMu
Ci0gICAgICBpZiAoc2VsID09IGZpZWxkLT5nZXRTZWxfKSB7Ci0gICAgICAgIFJlc29sdmVJdmFy
R2V0KGZpZWxkLCAmcmVzdWx0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9IGVsc2UgaWYgKHNl
bCA9PSBmaWVsZC0+c2V0U2VsXykgewotICAgICAgICBSZXNvbHZlSXZhclNldChmaWVsZCwgZGVz
Y3JpcHRvci5maWxlLnN5bnRheCwgJnJlc3VsdCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSBl
bHNlIGlmIChzZWwgPT0gZmllbGQtPmhhc09yQ291bnRTZWxfKSB7Ci0gICAgICAgIGludDMyX3Qg
aW5kZXggPSBHUEJGaWVsZEhhc0luZGV4KGZpZWxkKTsKLSAgICAgICAgdWludDMyX3QgZmllbGRO
dW0gPSBHUEJGaWVsZE51bWJlcihmaWVsZCk7Ci0gICAgICAgIHJlc3VsdC5pbXBUb0FkZCA9IGlt
cF9pbXBsZW1lbnRhdGlvbldpdGhCbG9jayheKGlkIG9iaikgewotICAgICAgICAgIHJldHVybiBH
UEJHZXRIYXNJdmFyKG9iaiwgaW5kZXgsIGZpZWxkTnVtKTsKLSAgICAgICAgfSk7Ci0gICAgICAg
IHJlc3VsdC5lbmNvZGluZ1NlbGVjdG9yID0gQHNlbGVjdG9yKGdldEJvb2wpOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0gZWxzZSBpZiAoc2VsID09IGZpZWxkLT5zZXRIYXNTZWxfKSB7Ci0gICAg
ICAgIHJlc3VsdC5pbXBUb0FkZCA9IGltcF9pbXBsZW1lbnRhdGlvbldpdGhCbG9jayheKGlkIG9i
aiwgQk9PTCB2YWx1ZSkgewotICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgW05T
RXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3JtYXQ6QCIlQDogJUAgY2FuIG9ubHkgYmUgc2V0IHRvIE5PICh0byBjbGVh
ciBmaWVsZCkuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb2JqIGNsYXNzXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1N0cmluZ0Zyb21TZWxlY3RvcihmaWVs
ZC0+c2V0SGFzU2VsXyldOwotICAgICAgICAgIH0KLSAgICAgICAgICBHUEJDbGVhck1lc3NhZ2VG
aWVsZChvYmosIGZpZWxkKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJlc3VsdC5lbmNvZGluZ1Nl
bGVjdG9yID0gQHNlbGVjdG9yKHNldEJvb2w6KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBHUEJPbmVvZkRlc2NyaXB0b3IgKm9uZW9mID0gZmllbGQtPmNvbnRhaW5p
bmdPbmVvZl87Ci0gICAgICAgIGlmIChvbmVvZiAmJiAoc2VsID09IG9uZW9mLT5jYXNlU2VsXykp
IHsKLSAgICAgICAgICBpbnQzMl90IGluZGV4ID0gR1BCRmllbGRIYXNJbmRleChmaWVsZCk7Ci0g
ICAgICAgICAgcmVzdWx0LmltcFRvQWRkID0gaW1wX2ltcGxlbWVudGF0aW9uV2l0aEJsb2NrKF4o
aWQgb2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gR1BCR2V0SGFzT25lb2Yob2JqLCBpbmRleCk7
Ci0gICAgICAgICAgfSk7Ci0gICAgICAgICAgcmVzdWx0LmVuY29kaW5nU2VsZWN0b3IgPSBAc2Vs
ZWN0b3IoZ2V0RW51bSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgLy8gbWFwPD4vcmVwZWF0ZWQgZmllbGRzLgotICAgICAgaWYgKHNl
bCA9PSBmaWVsZC0+Z2V0U2VsXykgewotICAgICAgICBpZiAoZmllbGQuZmllbGRUeXBlID09IEdQ
QkZpZWxkVHlwZVJlcGVhdGVkKSB7Ci0gICAgICAgICAgcmVzdWx0LmltcFRvQWRkID0gaW1wX2lt
cGxlbWVudGF0aW9uV2l0aEJsb2NrKF4oaWQgb2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gR2V0
QXJyYXlJdmFyV2l0aEZpZWxkKG9iaiwgZmllbGQpOwotICAgICAgICAgIH0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIHJlc3VsdC5pbXBUb0FkZCA9IGltcF9pbXBsZW1lbnRhdGlvbldp
dGhCbG9jayheKGlkIG9iaikgewotICAgICAgICAgICAgcmV0dXJuIEdldE1hcEl2YXJXaXRoRmll
bGQob2JqLCBmaWVsZCk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0
LmVuY29kaW5nU2VsZWN0b3IgPSBAc2VsZWN0b3IoZ2V0QXJyYXkpOwotICAgICAgICBicmVhazsK
LSAgICAgIH0gZWxzZSBpZiAoc2VsID09IGZpZWxkLT5zZXRTZWxfKSB7Ci0gICAgICAgIC8vIExv
Y2FsIGZvciBzeW50YXggc28gdGhlIGJsb2NrIGNhbiBkaXJlY3RseSBjYXB0dXJlIGl0IGFuZCBu
b3QgdGhlCi0gICAgICAgIC8vIGZ1bGwgbG9va3VwLgotICAgICAgICBjb25zdCBHUEJGaWxlU3lu
dGF4IHN5bnRheCA9IGRlc2NyaXB0b3IuZmlsZS5zeW50YXg7Ci0gICAgICAgIHJlc3VsdC5pbXBU
b0FkZCA9IGltcF9pbXBsZW1lbnRhdGlvbldpdGhCbG9jayheKGlkIG9iaiwgaWQgdmFsdWUpIHsK
LSAgICAgICAgICByZXR1cm4gR1BCU2V0T2JqZWN0SXZhcldpdGhGaWVsZEludGVybmFsKG9iaiwg
ZmllbGQsIHZhbHVlLCBzeW50YXgpOwotICAgICAgICB9KTsKLSAgICAgICAgcmVzdWx0LmVuY29k
aW5nU2VsZWN0b3IgPSBAc2VsZWN0b3Ioc2V0QXJyYXk6KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9IGVsc2UgaWYgKHNlbCA9PSBmaWVsZC0+aGFzT3JDb3VudFNlbF8pIHsKLSAgICAgICAgcmVz
dWx0LmltcFRvQWRkID0gaW1wX2ltcGxlbWVudGF0aW9uV2l0aEJsb2NrKF4oaWQgb2JqKSB7Ci0g
ICAgICAgICAgLy8gVHlwZSBkb2Vzbid0IG1hdHRlciwgYWxsICpBcnJheSBhbmQgKkRpY3Rpb25h
cnkgdHlwZXMgc3VwcG9ydAotICAgICAgICAgIC8vIC1jb3VudC4KLSAgICAgICAgICBOU0FycmF5
ICphcnJheU9yTWFwID0KLSAgICAgICAgICAgICAgR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5v
QXV0b2NyZWF0ZShvYmosIGZpZWxkKTsKLSAgICAgICAgICByZXR1cm4gW2FycmF5T3JNYXAgY291
bnRdOwotICAgICAgICB9KTsKLSAgICAgICAgcmVzdWx0LmVuY29kaW5nU2VsZWN0b3IgPSBAc2Vs
ZWN0b3IoZ2V0QXJyYXlDb3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAg
fQotICBpZiAocmVzdWx0LmltcFRvQWRkKSB7Ci0gICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPQot
ICAgICAgICBHUEJNZXNzYWdlRW5jb2RpbmdGb3JTZWxlY3RvcihyZXN1bHQuZW5jb2RpbmdTZWxl
Y3RvciwgWUVTKTsKLSAgICBCT09MIG1ldGhvZEFkZGVkID0gY2xhc3NfYWRkTWV0aG9kKGRlc2Ny
aXB0b3IubWVzc2FnZUNsYXNzLCBzZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuaW1wVG9BZGQsIGVuY29kaW5nKTsKLSAgICByZXR1cm4gbWV0aG9kQWRk
ZWQ7Ci0gIH0KLSAgcmV0dXJuIFtzdXBlciByZXNvbHZlSW5zdGFuY2VNZXRob2Q6c2VsXTsKLX0K
LQotKyAoQk9PTClyZXNvbHZlQ2xhc3NNZXRob2Q6KFNFTClzZWwgewotICAvLyBFeHRlbnNpb25z
IHNjb3BlZCB0byBhIE1lc3NhZ2UgYW5kIGxvb2tlZCB1cCB2aWEgY2xhc3MgbWV0aG9kcy4KLSAg
aWYgKEdQQlJlc29sdmVFeHRlbnNpb25DbGFzc01ldGhvZChzZWxmLCBzZWwpKSB7Ci0gICAgcmV0
dXJuIFlFUzsKLSAgfQotICByZXR1cm4gW3N1cGVyIHJlc29sdmVDbGFzc01ldGhvZDpzZWxdOwot
fQotCi0jcHJhZ21hIG1hcmsgLSBOU0NvZGluZyBTdXBwb3J0Ci0KLSsgKEJPT0wpc3VwcG9ydHNT
ZWN1cmVDb2RpbmcgewotICByZXR1cm4gWUVTOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb2RlcjooTlNDb2RlciAqKWFEZWNvZGVyIHsKLSAgc2VsZiA9IFtzZWxmIGluaXRdOwotICBp
ZiAoc2VsZikgewotICAgIE5TRGF0YSAqZGF0YSA9Ci0gICAgICAgIFthRGVjb2RlciBkZWNvZGVP
YmplY3RPZkNsYXNzOltOU0RhdGEgY2xhc3NdIGZvcktleTprR1BCRGF0YUNvZGVyS2V5XTsKLSAg
ICBpZiAoZGF0YS5sZW5ndGgpIHsKLSAgICAgIFtzZWxmIG1lcmdlRnJvbURhdGE6ZGF0YSBleHRl
bnNpb25SZWdpc3RyeTpuaWxdOwotICAgIH0KLSAgfQotICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKilhQ29kZXIgewotICBOU0RhdGEgKmRhdGEg
PSBbc2VsZiBkYXRhXTsKLSAgaWYgKGRhdGEubGVuZ3RoKSB7Ci0gICAgW2FDb2RlciBlbmNvZGVP
YmplY3Q6ZGF0YSBmb3JLZXk6a0dQQkRhdGFDb2RlcktleV07Ci0gIH0KLX0KLQotI3ByYWdtYSBt
YXJrIC0gS1ZDIFN1cHBvcnQKLQotKyAoQk9PTClhY2Nlc3NJbnN0YW5jZVZhcmlhYmxlc0RpcmVj
dGx5IHsKLSAgLy8gTWFrZSBzdXJlIEtWQyBkb2Vzbid0IHVzZSBpbnN0YW5jZSB2YXJpYWJsZXMu
Ci0gIHJldHVybiBOTzsKLX0KLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQk1lc3Nh
Z2VfUGFja2FnZVByaXZhdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJNZXNzYWdlX1BhY2thZ2VQcml2YXRl
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3OGRiMmNmMGY5NjM5NTkxNTYzN2Fi
ODYyYTBlYzJmMjlhMmJjMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9vYmplY3RpdmVjL0dQQk1lc3NhZ2VfUGFja2FnZVByaXZhdGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotLy8gVGhpcyBoZWFkZXIgaXMgcHJpdmF0ZSB0byB0aGUgUHJvdG9ib2xCdWZmZXJzIGxpYnJh
cnkgYW5kIG11c3QgTk9UIGJlCi0vLyBpbmNsdWRlZCBieSBhbnkgc291cmNlcyBvdXRzaWRlIHRo
aXMgbGlicmFyeS4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUKLS8vIHN1YmplY3QgdG8g
Y2hhbmdlIGF0IGFueSB0aW1lIHdpdGhvdXQgbm90aWNlLgotCi0jaW1wb3J0ICJHUEJNZXNzYWdl
LmgiCi0KLSNpbXBvcnQgPGxpYmtlcm4vT1NBdG9taWMuaD4KLQotI2ltcG9ydCAiR1BCQm9vdHN0
cmFwLmgiCi0KLXR5cGVkZWYgc3RydWN0IEdQQk1lc3NhZ2VfU3RvcmFnZSB7Ci0gIHVpbnQzMl90
IF9oYXNfc3RvcmFnZV9bMF07Ci19IEdQQk1lc3NhZ2VfU3RvcmFnZTsKLQotdHlwZWRlZiBzdHJ1
Y3QgR1BCTWVzc2FnZV9TdG9yYWdlICpHUEJNZXNzYWdlX1N0b3JhZ2VQdHI7Ci0KLUBpbnRlcmZh
Y2UgR1BCTWVzc2FnZSAoKSB7Ci0gQHBhY2thZ2UKLSAgLy8gTk9URTogQmVjYXVzZSBvZiB0aGUg
K2FsbG9jV2l0aFpvbmUgY29kZSB1c2luZyBOU0FsbG9jYXRlT2JqZWN0KCksCi0gIC8vIHRoaXMg
c3RydWN0dXJlIHNob3VsZCBpZGVhbGx5IGFsd2F5cyBiZSBrZXB0IHBvaW50ZXIgYWxpZ25lZCB3
aGVyZSB0aGUKLSAgLy8gcmVhbCBzdG9yYWdlIHN0YXJ0cyBpcyBhbHNvIHBvaW50ZXIgYWxpZ25l
ZC4gVGhlIGNvbXBpbGVyL3J1bnRpbWUgYWxyZWFkeQotICAvLyBkbyB0aGlzLCBidXQgaXQgbWF5
IG5vdCBiZSBkb2N1bWVudGVkLgotCi0gIC8vIEEgcG9pbnRlciB0byB0aGUgYWN0dWFsIGZpZWxk
cyBvZiB0aGUgc3ViY2xhc3Nlcy4gVGhlIGFjdHVhbCBzdHJ1Y3R1cmUKLSAgLy8gcG9pbnRlZCB0
byBieSB0aGlzIHBvaW50ZXIgd2lsbCBkZXBlbmQgb24gdGhlIHN1YmNsYXNzLgotICAvLyBBbGwg
b2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmVzIHdpbGwgc3RhcnQgdGhlIHNhbWUgYXMKLSAgLy8gR1BC
TWVzc2FnZV9TdG9yYWdlIHdpdGggX2hhc19zdG9yYWdlX18gYXMgdGhlIGZpcnN0IGZpZWxkLgot
ICAvLyBLZXB0IHB1YmxpYyBiZWNhdXNlIHN0YXRpYyBmdW5jdGlvbnMgbmVlZCB0byBhY2Nlc3Mg
aXQuCi0gIEdQQk1lc3NhZ2VfU3RvcmFnZVB0ciBtZXNzYWdlU3RvcmFnZV87Ci0KLSAgLy8gQSBs
b2NrIHRvIHByb3ZpZGUgbXV0dWFsIGV4Y2x1c2lvbiBmcm9tIGludGVybmFsIGRhdGEgdGhhdCBj
YW4gYmUgbW9kaWZpZWQKLSAgLy8gYnkgKnJlYWQqIG9wZXJhdGlvbnMgc3VjaCBhcyBnZXR0ZXJz
IChhdXRvY3JlYXRpb24gb2YgbWVzc2FnZSBmaWVsZHMgYW5kCi0gIC8vIG1lc3NhZ2UgZXh0ZW5z
aW9ucywgbm90IHNldHRpbmcgb2YgdmFsdWVzKS4gVXNlZCB0byBndWFyYW50ZWUgdGhyZWFkIHNh
ZmV0eQotICAvLyBmb3IgY29uY3VycmVudCByZWFkcyBvbiB0aGUgbWVzc2FnZS4KLSAgLy8gTk9U
RTogT1NTcGluTG9jayBtYXkgc2VlbSBsaWtlIGEgZ29vZCBmaXQgaGVyZSBidXQgQXBwbGUgZW5n
aW5lZXJzIGhhdmUKLSAgLy8gcG9pbnRlZCBvdXQgdGhhdCB0aGV5IGFyZSB2dWxuZXJhYmxlIHRv
IGxpdmUgbG9ja2luZyBvbiBpT1MgaW4gY2FzZXMgb2YKLSAgLy8gcHJpb3JpdHkgaW52ZXJzaW9u
OgotICAvLyAgIGh0dHA6Ly9tanRzYWkuY29tL2Jsb2cvMjAxNS8xMi8xNi9vc3NwaW5sb2NrLWlz
LXVuc2FmZS8KLSAgLy8gICBodHRwczovL2xpc3RzLnN3aWZ0Lm9yZy9waXBlcm1haWwvc3dpZnQt
ZGV2L1dlZWstb2YtTW9uLTIwMTUxMjE0LzAwMDM3Mi5odG1sCi0gIC8vIFVzZSBvZiByZWFkT25s
eVNlbWFwaG9yZV8gbXVzdCBiZSBwcmVmYWNlZCBieSBhIGNhbGwgdG8KLSAgLy8gR1BCUHJlcGFy
ZVJlYWRPbmx5U2VtYXBob3JlIHRvIGVuc3VyZSBpdCBoYXMgYmVlbiBjcmVhdGVkLiBUaGlzIGFs
bG93cwotICAvLyByZWFkT25seVNlbWFwaG9yZV8gdG8gYmUgb25seSBjcmVhdGVkIHdoZW4gYWN0
dWFsbHkgbmVlZGVkLgotICBkaXNwYXRjaF9vbmNlX3QgcmVhZE9ubHlTZW1hcGhvcmVDcmVhdGlv
bk9uY2VfOwotICBkaXNwYXRjaF9zZW1hcGhvcmVfdCByZWFkT25seVNlbWFwaG9yZV87Ci19Ci0K
LS8vIEdldHMgYW4gZXh0ZW5zaW9uIHZhbHVlIHdpdGhvdXQgYXV0b2NyZWF0aW5nIHRoZSByZXN1
bHQgaWYgbm90IGZvdW5kLiAoaS5lLgotLy8gcmV0dXJucyBuaWwgaWYgdGhlIGV4dGVuc2lvbiBp
cyBub3Qgc2V0KQotLSAoaWQpZ2V0RXhpc3RpbmdFeHRlbnNpb246KEdQQkV4dGVuc2lvbkRlc2Ny
aXB0b3IgKilleHRlbnNpb247Ci0KLS8vIFJldHVybnMgYW4gYXJyYXkgb2YgR1BCRXh0ZW5zaW9u
RGVzY3JpcHRvciogZm9yIGFsbCB0aGUgZXh0ZW5zaW9ucyBjdXJyZW50bHkKLS8vIGluIHVzZSBv
biB0aGUgbWVzc2FnZS4gIFRoZXkgYXJlIHNvcnRlZCBieSBmaWVsZCBudW1iZXIuCi0tIChOU0Fy
cmF5ICopc29ydGVkRXh0ZW5zaW9uc0luVXNlOwotCi0vLyBQYXJzZXMgYSBtZXNzYWdlIG9mIHRo
aXMgdHlwZSBmcm9tIHRoZSBpbnB1dCBhbmQgbWVyZ2VzIGl0IHdpdGggdGhpcwotLy8gbWVzc2Fn
ZS4KLS8vCi0vLyBXYXJuaW5nOiAgVGhpcyBkb2VzIG5vdCB2ZXJpZnkgdGhhdCBhbGwgcmVxdWly
ZWQgZmllbGRzIGFyZSBwcmVzZW50IGluCi0vLyB0aGUgaW5wdXQgbWVzc2FnZS4KLS8vIE5vdGU6
ICBUaGUgY2FsbGVyIHNob3VsZCBjYWxsCi0vLyAtW0NvZGVkSW5wdXRTdHJlYW0gY2hlY2tMYXN0
VGFnV2FzOl0gYWZ0ZXIgY2FsbGluZyB0aGlzIHRvCi0vLyB2ZXJpZnkgdGhhdCB0aGUgbGFzdCB0
YWcgc2VlbiB3YXMgdGhlIGFwcHJvcHJpYXRlIGVuZC1ncm91cCB0YWcsCi0vLyBvciB6ZXJvIGZv
ciBFT0YuCi0vLyBOT1RFOiBUaGlzIHdpbGwgdGhyb3cgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd2hp
bGUgcGFyc2luZy4KLS0gKHZvaWQpbWVyZ2VGcm9tQ29kZWRJbnB1dFN0cmVhbTooR1BCQ29kZWRJ
bnB1dFN0cmVhbSAqKWlucHV0Ci0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uUmVnaXN0cnk6KEdQ
QkV4dGVuc2lvblJlZ2lzdHJ5ICopZXh0ZW5zaW9uUmVnaXN0cnk7Ci0KLS8vIFBhcnNlcyB0aGUg
bmV4dCBkZWxpbWl0ZWQgbWVzc2FnZSBvZiB0aGlzIHR5cGUgZnJvbSB0aGUgaW5wdXQgYW5kIG1l
cmdlcyBpdAotLy8gd2l0aCB0aGlzIG1lc3NhZ2UuCi0tICh2b2lkKW1lcmdlRGVsaW1pdGVkRnJv
bUNvZGVkSW5wdXRTdHJlYW06KEdQQkNvZGVkSW5wdXRTdHJlYW0gKilpbnB1dAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dGVuc2lvblJlZ2lzdHJ5OgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoR1BCRXh0ZW5zaW9uUmVnaXN0cnkgKilleHRlbnNpb25SZWdpc3RyeTsKLQotLSAo
dm9pZClhZGRVbmtub3duTWFwRW50cnk6KGludDMyX3QpZmllbGROdW0gdmFsdWU6KE5TRGF0YSAq
KWRhdGE7Ci0KLUBlbmQKLQotQ0ZfRVhURVJOX0NfQkVHSU4KLQotCi0vLyBDYWxsIHRoaXMgYmVm
b3JlIHVzaW5nIHRoZSByZWFkT25seVNlbWFwaG9yZV8uIFRoaXMgZW5zdXJlcyBpdCBpcyBjcmVh
dGVkIG9ubHkgb25jZS4KLU5TX0lOTElORSB2b2lkIEdQQlByZXBhcmVSZWFkT25seVNlbWFwaG9y
ZShHUEJNZXNzYWdlICpzZWxmKSB7Ci0gIGRpc3BhdGNoX29uY2UoJnNlbGYtPnJlYWRPbmx5U2Vt
YXBob3JlQ3JlYXRpb25PbmNlXywgXnsKLSAgICBzZWxmLT5yZWFkT25seVNlbWFwaG9yZV8gPSBk
aXNwYXRjaF9zZW1hcGhvcmVfY3JlYXRlKDEpOwotICB9KTsKLX0KLQotLy8gUmV0dXJucyBhIG5l
dyBpbnN0YW5jZSB0aGF0IHdhcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgfGF1dG9jcmVhdG9y
fCBmb3IKLS8vIGl0cyBmaWVsZCB8ZmllbGR8LgotR1BCTWVzc2FnZSAqR1BCQ3JlYXRlTWVzc2Fn
ZVdpdGhBdXRvY3JlYXRvcihDbGFzcyBtc2dDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1BCTWVzc2FnZSAqYXV0b2NyZWF0b3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmll
bGQpCi0gICAgX19hdHRyaWJ1dGVfXygobnNfcmV0dXJuc19yZXRhaW5lZCkpOwotCi0vLyBSZXR1
cm5zIHdoZXRoZXIgfG1lc3NhZ2V8IGF1dG9jcmVhdGVkIHRoaXMgbWVzc2FnZS4gVGhpcyBpcyBO
TyBpZiB0aGUgbWVzc2FnZQotLy8gd2FzIG5vdCBhdXRvY3JlYXRlZCBieSB8bWVzc2FnZXwgb3Ig
aWYgaXQgaGFzIGJlZW4gbXV0YXRlZCBzaW5jZQotLy8gYXV0b2NyZWF0aW9uLgotQk9PTCBHUEJX
YXNNZXNzYWdlQXV0b2NyZWF0ZWRCeShHUEJNZXNzYWdlICptZXNzYWdlLCBHUEJNZXNzYWdlICpw
YXJlbnQpOwotCi0vLyBDYWxsIHRoaXMgd2hlbiB5b3UgbXV0YXRlIGEgbWVzc2FnZS4gSXQgd2ls
bCBjYXVzZSB0aGUgbWVzc2FnZSB0byBiZWNvbWUKLS8vIHZpc2libGUgdG8gaXRzIGF1dG9jcmVh
dG9yLgotdm9pZCBHUEJCZWNvbWVWaXNpYmxlVG9BdXRvY3JlYXRvcihHUEJNZXNzYWdlICpzZWxm
KTsKLQotLy8gQ2FsbCB0aGlzIHdoZW4gYW4gYXJyYXkvZGljdGlvbmFyeSBpcyBtdXRhdGVkIHNv
IHRoZSBwYXJlbnQgbWVzc2FnZSB0aGF0Ci0vLyBhdXRvY3JlYXRlZCBpdCBjYW4gcmVhY3QuCi12
b2lkIEdQQkF1dG9jcmVhdGVkQXJyYXlNb2RpZmllZChHUEJNZXNzYWdlICpzZWxmLCBpZCBhcnJh
eSk7Ci12b2lkIEdQQkF1dG9jcmVhdGVkRGljdGlvbmFyeU1vZGlmaWVkKEdQQk1lc3NhZ2UgKnNl
bGYsIGlkIGRpY3Rpb25hcnkpOwotCi0vLyBDbGVhciB0aGUgYXV0b2NyZWF0b3IsIGlmIGFueS4g
QXNzZXJ0cyBpZiB0aGUgYXV0b2NyZWF0b3Igc3RpbGwgaGFzIGFuCi0vLyBhdXRvY3JlYXRlZCBy
ZWZlcmVuY2UgdG8gdGhpcyBtZXNzYWdlLgotdm9pZCBHUEJDbGVhck1lc3NhZ2VBdXRvY3JlYXRv
cihHUEJNZXNzYWdlICpzZWxmKTsKLQotQ0ZfRVhURVJOX0NfRU5ECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVj
dGl2ZWMvR1BCUHJvdG9jb2xCdWZmZXJzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCUHJvdG9jb2xCdWZmZXJz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NzkwM2VkNzZiNjdhODA1YWEwZWM1
YzUwNTZmNjM5Mzk1YjYwZTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9vYmplY3RpdmVjL0dQQlByb3RvY29sQnVmZmVycy5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbXBv
cnQgIkdQQkJvb3RzdHJhcC5oIgotCi0jaW1wb3J0ICJHUEJBcnJheS5oIgotI2ltcG9ydCAiR1BC
Q29kZWRJbnB1dFN0cmVhbS5oIgotI2ltcG9ydCAiR1BCQ29kZWRPdXRwdXRTdHJlYW0uaCIKLSNp
bXBvcnQgIkdQQkRlc2NyaXB0b3IuaCIKLSNpbXBvcnQgIkdQQkRpY3Rpb25hcnkuaCIKLSNpbXBv
cnQgIkdQQkV4dGVuc2lvblJlZ2lzdHJ5LmgiCi0jaW1wb3J0ICJHUEJNZXNzYWdlLmgiCi0jaW1w
b3J0ICJHUEJSb290T2JqZWN0LmgiCi0jaW1wb3J0ICJHUEJVbmtub3duRmllbGQuaCIKLSNpbXBv
cnQgIkdQQlVua25vd25GaWVsZFNldC5oIgotI2ltcG9ydCAiR1BCVXRpbGl0aWVzLmgiCi0jaW1w
b3J0ICJHUEJXZWxsS25vd25UeXBlcy5oIgotI2ltcG9ydCAiR1BCV2lyZUZvcm1hdC5oIgotCi0v
LyBXZWxsLWtub3duIHByb3RvIHR5cGVzCi0jaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvQW55LnBi
b2JqYy5oIgotI2ltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL0FwaS5wYm9iamMuaCIKLSNpbXBvcnQg
Imdvb2dsZS9wcm90b2J1Zi9EdXJhdGlvbi5wYm9iamMuaCIKLSNpbXBvcnQgImdvb2dsZS9wcm90
b2J1Zi9FbXB0eS5wYm9iamMuaCIKLSNpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9GaWVsZE1hc2su
cGJvYmpjLmgiCi0jaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvU291cmNlQ29udGV4dC5wYm9iamMu
aCIKLSNpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9TdHJ1Y3QucGJvYmpjLmgiCi0jaW1wb3J0ICJn
b29nbGUvcHJvdG9idWYvVGltZXN0YW1wLnBib2JqYy5oIgotI2ltcG9ydCAiZ29vZ2xlL3Byb3Rv
YnVmL1R5cGUucGJvYmpjLmgiCi0jaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvV3JhcHBlcnMucGJv
YmpjLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCUHJvdG9jb2xCdWZmZXJzLm0gYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVj
dGl2ZWMvR1BCUHJvdG9jb2xCdWZmZXJzLm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg1MTJhZjdlNjA1ZWM1MGYzMmQzNTYxODgzNTljOTY3MzI3NmUyMDYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlByb3RvY29sQnVm
ZmVycy5tCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLS8vIElmIHlvdSB3YW50IHRvIGJ1aWxkIHByb3RvY29sIGJ1ZmZl
cnMgaW4geW91ciBvd24gcHJvamVjdCB3aXRob3V0IGFkZGluZyB0aGUKLS8vIHByb2plY3QgZGVw
ZW5kZW5jeSwgeW91IGNhbiBqdXN0IGFkZCB0aGlzIGZpbGUuCi0KLSNpbXBvcnQgIkdQQkFycmF5
Lm0iCi0jaW1wb3J0ICJHUEJDb2RlZElucHV0U3RyZWFtLm0iCi0jaW1wb3J0ICJHUEJDb2RlZE91
dHB1dFN0cmVhbS5tIgotI2ltcG9ydCAiR1BCRGVzY3JpcHRvci5tIgotI2ltcG9ydCAiR1BCRGlj
dGlvbmFyeS5tIgotI2ltcG9ydCAiR1BCRXh0ZW5zaW9uSW50ZXJuYWxzLm0iCi0jaW1wb3J0ICJH
UEJFeHRlbnNpb25SZWdpc3RyeS5tIgotI2ltcG9ydCAiR1BCTWVzc2FnZS5tIgotI2ltcG9ydCAi
R1BCUm9vdE9iamVjdC5tIgotI2ltcG9ydCAiR1BCVW5rbm93bkZpZWxkLm0iCi0jaW1wb3J0ICJH
UEJVbmtub3duRmllbGRTZXQubSIKLSNpbXBvcnQgIkdQQlV0aWxpdGllcy5tIgotI2ltcG9ydCAi
R1BCV2VsbEtub3duVHlwZXMubSIKLSNpbXBvcnQgIkdQQldpcmVGb3JtYXQubSIKLQotLy8gRHVy
YXRpb24gYW5kIFRpbWVzdGFtcCBhcmUgI2ltcG9ydGVkIGludG8gR1BCV2VsbEtub3duVHlwZXMu
bSB0byB0aGUKLS8vIE9iamVjdGl2ZSBDIGNhdGVnb3JpZXMgYWRkZWQgd2lsbCBhbHdheXMgYmUg
bGlua2VkIGluIHdpdGggdGhlIGNsYXNzZXMuCi0jaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvQW55
LnBib2JqYy5tIgotI2ltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL0FwaS5wYm9iamMubSIKLS8vICNp
bXBvcnQgImdvb2dsZS9wcm90b2J1Zi9EdXJhdGlvbi5wYm9iamMubSIKLSNpbXBvcnQgImdvb2ds
ZS9wcm90b2J1Zi9FbXB0eS5wYm9iamMubSIKLSNpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9GaWVs
ZE1hc2sucGJvYmpjLm0iCi0jaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvU291cmNlQ29udGV4dC5w
Ym9iamMubSIKLSNpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9TdHJ1Y3QucGJvYmpjLm0iCi0vLyAj
aW1wb3J0ICJnb29nbGUvcHJvdG9idWYvVGltZXN0YW1wLnBib2JqYy5tIgotI2ltcG9ydCAiZ29v
Z2xlL3Byb3RvYnVmL1R5cGUucGJvYmpjLm0iCi0jaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvV3Jh
cHBlcnMucGJvYmpjLm0iCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCUHJvdG9jb2xCdWZmZXJz
X1J1bnRpbWVTdXBwb3J0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCUHJvdG9jb2xCdWZmZXJzX1J1bnRpbWVT
dXBwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYTc1YjkzYmMyNTY4MzUz
NTY3ZWVmYWFmMzNkODJjNjUzZjQ4ZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlByb3RvY29sQnVmZmVyc19SdW50aW1lU3VwcG9y
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIFRoaXMgaGVhZGVyIGlzIG1lYW50IHRvIG9ubHkgYmUgdXNlZCBi
eSB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgaXQgc2hvdWxkIG5vdAotLy8gYmUgaW5jbHVkZWQgaW4g
Y29kZSB1c2luZyBwcm90b2NvbCBidWZmZXJzLgotCi0jaW1wb3J0ICJHUEJQcm90b2NvbEJ1ZmZl
cnMuaCIKLQotI2ltcG9ydCAiR1BCRGVzY3JpcHRvcl9QYWNrYWdlUHJpdmF0ZS5oIgotI2ltcG9y
dCAiR1BCRXh0ZW5zaW9uSW50ZXJuYWxzLmgiCi0jaW1wb3J0ICJHUEJNZXNzYWdlX1BhY2thZ2VQ
cml2YXRlLmgiCi0jaW1wb3J0ICJHUEJSb290T2JqZWN0X1BhY2thZ2VQcml2YXRlLmgiCi0jaW1w
b3J0ICJHUEJVdGlsaXRpZXNfUGFja2FnZVByaXZhdGUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZl
Yy9HUEJSb290T2JqZWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCUm9vdE9iamVjdC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjMDViNWM2MjBmMzdhNDVmYjc3NWMzZjE4N2ZjOWU1MjVkOWEy
YTQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0
aXZlYy9HUEJSb290T2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLUBjbGFzcyBHUEJFeHRlbnNpb25SZWdpc3RyeTsKLQotTlNfQVNTVU1FX05P
Tk5VTExfQkVHSU4KLQotLy8vIEV2ZXJ5IGdlbmVyYXRlZCBwcm90byBmaWxlIGRlZmluZXMgYSBs
b2NhbCAiUm9vdCIgY2xhc3MgdGhhdCBleHBvc2VzIGEKLS8vLyBAYyBHUEJFeHRlbnNpb25SZWdp
c3RyeSBmb3IgYWxsIHRoZSBleHRlbnNpb25zIGRlZmluZWQgYnkgdGhhdCBmaWxlIGFuZAotLy8v
IHRoZSBmaWxlcyBpdCBkZXBlbmRzIG9uLgotQGludGVyZmFjZSBHUEJSb290T2JqZWN0IDogTlNP
YmplY3QKLQotLy8vIEFuIGV4dGVuc2lvbiByZWdpc3RyeSBmb3IgdGhlIGdpdmVuIGZpbGUgYW5k
IGFsbCB0aGUgZmlsZXMgaXQgZGVwZW5kcyBvbi4KLSsgKEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICop
ZXh0ZW5zaW9uUmVnaXN0cnk7Ci0KLUBlbmQKLQotTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL29iamVjdGl2ZWMvR1BCUm9vdE9iamVjdC5tIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlJvb3RPYmpl
Y3QubQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU3MDcxNmY1MGRkMDNlMjVmMjc1
YzI3MzNhZTA1NDY4NWU3NWEzMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCUm9vdE9iamVjdC5tCisrKyAvZGV2L251bGwKQEAgLTEs
MjMwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW1wb3J0
ICJHUEJSb290T2JqZWN0X1BhY2thZ2VQcml2YXRlLmgiCi0KLSNpbXBvcnQgPG9iamMvcnVudGlt
ZS5oPgotCi0jaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotCi0jaW1w
b3J0ICJHUEJEZXNjcmlwdG9yLmgiCi0jaW1wb3J0ICJHUEJFeHRlbnNpb25SZWdpc3RyeS5oIgot
I2ltcG9ydCAiR1BCVXRpbGl0aWVzX1BhY2thZ2VQcml2YXRlLmgiCi0KLUBpbnRlcmZhY2UgR1BC
RXh0ZW5zaW9uRGVzY3JpcHRvciAoR1BCUm9vdE9iamVjdCkKLS8vIEdldCBzaW5nbGV0b25OYW1l
IGFzIGEgYyBzdHJpbmcuCi0tIChjb25zdCBjaGFyICopc2luZ2xldG9uTmFtZUM7Ci1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBHUEJSb290T2JqZWN0Ci0KLS8vIFRha2VuIGZyb20gaHR0cDovL3d3
dy5idXJ0bGVidXJ0bGUubmV0L2JvYi9oYXNoL2Rvb2JzLmh0bWwKLS8vIFB1YmxpYyBEb21haW4K
LXN0YXRpYyB1aW50MzJfdCBqZW5raW5zX29uZV9hdF9hX3RpbWVfaGFzaChjb25zdCBjaGFyICpr
ZXkpIHsKLSAgdWludDMyX3QgaGFzaCA9IDA7Ci0gIGZvciAodWludDMyX3QgaSA9IDA7IGtleVtp
XSAhPSAnXDAnOyArK2kpIHsKLSAgICBoYXNoICs9IGtleVtpXTsKLSAgICBoYXNoICs9IChoYXNo
IDw8IDEwKTsKLSAgICBoYXNoIF49IChoYXNoID4+IDYpOwotICB9Ci0gIGhhc2ggKz0gKGhhc2gg
PDwgMyk7Ci0gIGhhc2ggXj0gKGhhc2ggPj4gMTEpOwotICBoYXNoICs9IChoYXNoIDw8IDE1KTsK
LSAgcmV0dXJuIGhhc2g7Ci19Ci0KLS8vIEtleSBtZXRob2RzIGZvciBvdXIgY3VzdG9tIENGRGlj
dGlvbmFyeS4KLS8vIE5vdGUgdGhhdCB0aGUgZGljdGlvbmFyeSBsYXN0cyBmb3IgdGhlIGxpZmV0
aW1lIG9mIG91ciBhcHAsIHNvIG5vIG5lZWQKLS8vIHRvIHdvcnJ5IGFib3V0IGRlYWxsb2NhdGlv
bi4gQWxsIG9mIHRoZSBpdGVtcyBhcmUgYWRkZWQgdG8gaXQgYXQKLS8vIHN0YXJ0dXAsIGFuZCBz
byB0aGUga2V5cyBkb24ndCBuZWVkIHRvIGJlIHJldGFpbmVkL3JlbGVhc2VkLgotLy8gS2V5cyBh
cmUgTlVMTCB0ZXJtaW5hdGVkIGNoYXIgKi4KLXN0YXRpYyBjb25zdCB2b2lkICpHUEJSb290RXh0
ZW5zaW9uS2V5UmV0YWluKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlKSB7Ci0jcHJh
Z21hIHVudXNlZChhbGxvY2F0b3IpCi0gIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQg
R1BCUm9vdEV4dGVuc2lvbktleVJlbGVhc2UoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUpIHsK
LSNwcmFnbWEgdW51c2VkKGFsbG9jYXRvcikKLSNwcmFnbWEgdW51c2VkKHZhbHVlKQotfQotCi1z
dGF0aWMgQ0ZTdHJpbmdSZWYgR1BCUm9vdEV4dGVuc2lvbkNvcHlLZXlEZXNjcmlwdGlvbihjb25z
dCB2b2lkICp2YWx1ZSkgewotICBjb25zdCBjaGFyICprZXkgPSAoY29uc3QgY2hhciAqKXZhbHVl
OwotICByZXR1cm4gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDRlN0cmluZ0VuY29k
aW5nVVRGOCk7Ci19Ci0KLXN0YXRpYyBCb29sZWFuIEdQQlJvb3RFeHRlbnNpb25LZXlFcXVhbChj
b25zdCB2b2lkICp2YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgdm9pZCAqdmFsdWUyKSB7Ci0gIGNvbnN0IGNoYXIgKmtleTEgPSAoY29uc3QgY2hh
ciAqKXZhbHVlMTsKLSAgY29uc3QgY2hhciAqa2V5MiA9IChjb25zdCBjaGFyICopdmFsdWUyOwot
ICByZXR1cm4gc3RyY21wKGtleTEsIGtleTIpID09IDA7Ci19Ci0KLXN0YXRpYyBDRkhhc2hDb2Rl
IEdQQlJvb3RFeHRlbnNpb25LZXlIYXNoKGNvbnN0IHZvaWQgKnZhbHVlKSB7Ci0gIGNvbnN0IGNo
YXIgKmtleSA9IChjb25zdCBjaGFyICopdmFsdWU7Ci0gIHJldHVybiBqZW5raW5zX29uZV9hdF9h
X3RpbWVfaGFzaChrZXkpOwotfQotCi0vLyBOT1RFOiBPU1NwaW5Mb2NrIG1heSBzZWVtIGxpa2Ug
YSBnb29kIGZpdCBoZXJlIGJ1dCBBcHBsZSBlbmdpbmVlcnMgaGF2ZQotLy8gcG9pbnRlZCBvdXQg
dGhhdCB0aGV5IGFyZSB2dWxuZXJhYmxlIHRvIGxpdmUgbG9ja2luZyBvbiBpT1MgaW4gY2FzZXMg
b2YKLS8vIHByaW9yaXR5IGludmVyc2lvbjoKLS8vICAgaHR0cDovL21qdHNhaS5jb20vYmxvZy8y
MDE1LzEyLzE2L29zc3BpbmxvY2staXMtdW5zYWZlLwotLy8gICBodHRwczovL2xpc3RzLnN3aWZ0
Lm9yZy9waXBlcm1haWwvc3dpZnQtZGV2L1dlZWstb2YtTW9uLTIwMTUxMjE0LzAwMDM3Mi5odG1s
Ci1zdGF0aWMgZGlzcGF0Y2hfc2VtYXBob3JlX3QgZ0V4dGVuc2lvblNpbmdsZXRvbkRpY3Rpb25h
cnlTZW1hcGhvcmU7Ci1zdGF0aWMgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBnRXh0ZW5zaW9uU2lu
Z2xldG9uRGljdGlvbmFyeSA9IE5VTEw7Ci1zdGF0aWMgR1BCRXh0ZW5zaW9uUmVnaXN0cnkgKmdE
ZWZhdWx0RXh0ZW5zaW9uUmVnaXN0cnkgPSBOVUxMOwotCi0rICh2b2lkKWluaXRpYWxpemUgewot
ICAvLyBFbnN1cmUgdGhlIGdsb2JhbCBpcyBzdGFydGVkIHVwLgotICBpZiAoIWdFeHRlbnNpb25T
aW5nbGV0b25EaWN0aW9uYXJ5KSB7Ci0gICAgZ0V4dGVuc2lvblNpbmdsZXRvbkRpY3Rpb25hcnlT
ZW1hcGhvcmUgPSBkaXNwYXRjaF9zZW1hcGhvcmVfY3JlYXRlKDEpOwotICAgIENGRGljdGlvbmFy
eUtleUNhbGxCYWNrcyBrZXlDYWxsQmFja3MgPSB7Ci0gICAgICAvLyBTZWUgZGVzY3JpcHRpb24g
YWJvdmUgZm9yIHJlYXNvbiBmb3IgdXNpbmcgY3VzdG9tIGRpY3Rpb25hcnkuCi0gICAgICAwLAot
ICAgICAgR1BCUm9vdEV4dGVuc2lvbktleVJldGFpbiwKLSAgICAgIEdQQlJvb3RFeHRlbnNpb25L
ZXlSZWxlYXNlLAotICAgICAgR1BCUm9vdEV4dGVuc2lvbkNvcHlLZXlEZXNjcmlwdGlvbiwKLSAg
ICAgIEdQQlJvb3RFeHRlbnNpb25LZXlFcXVhbCwKLSAgICAgIEdQQlJvb3RFeHRlbnNpb25LZXlI
YXNoLAotICAgIH07Ci0gICAgZ0V4dGVuc2lvblNpbmdsZXRvbkRpY3Rpb25hcnkgPQotICAgICAg
ICBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrZXlD
YWxsQmFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwotICAgIGdEZWZhdWx0RXh0ZW5zaW9uUmVnaXN0cnkgPSBb
W0dQQkV4dGVuc2lvblJlZ2lzdHJ5IGFsbG9jXSBpbml0XTsKLSAgfQotCi0gIGlmIChbc2VsZiBz
dXBlcmNsYXNzXSA9PSBbR1BCUm9vdE9iamVjdCBjbGFzc10pIHsKLSAgICAvLyBUaGlzIGlzIGhl
cmUgdG8gc3RhcnQgdXAgYWxsIHRoZSBwZXIgZmlsZSAiUm9vdCIgc3ViY2xhc3Nlcy4KLSAgICAv
LyBUaGlzIG11c3QgYmUgZG9uZSBpbiBpbml0aWFsaXplIHRvIGVuZm9yY2UgdGhyZWFkIHNhZmV0
eSBvZiBzdGFydCB1cCBvZgotICAgIC8vIHRoZSBwcm90b2NvbCBidWZmZXIgbGlicmFyeS4KLSAg
ICBbc2VsZiBleHRlbnNpb25SZWdpc3RyeV07Ci0gIH0KLX0KLQotKyAoR1BCRXh0ZW5zaW9uUmVn
aXN0cnkgKilleHRlbnNpb25SZWdpc3RyeSB7Ci0gIC8vIElzIG92ZXJyaWRkZW4gaW4gYWxsIHRo
ZSBzdWJjbGFzc2VzIHRoYXQgcHJvdmlkZSBleHRlbnNpb25zIHRvIHByb3ZpZGUgdGhlCi0gIC8v
IHBlciBjbGFzcyBvbmUuCi0gIHJldHVybiBnRGVmYXVsdEV4dGVuc2lvblJlZ2lzdHJ5OwotfQot
Ci0rICh2b2lkKWdsb2JhbGx5UmVnaXN0ZXJFeHRlbnNpb246KEdQQkV4dGVuc2lvbkRlc2NyaXB0
b3IgKilmaWVsZCB7Ci0gIGNvbnN0IGNoYXIgKmtleSA9IFtmaWVsZCBzaW5nbGV0b25OYW1lQ107
Ci0gIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KGdFeHRlbnNpb25TaW5nbGV0b25EaWN0aW9uYXJ5
U2VtYXBob3JlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBESVNQQVRDSF9USU1FX0ZPUkVW
RVIpOwotICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShnRXh0ZW5zaW9uU2luZ2xldG9uRGljdGlvbmFy
eSwga2V5LCBmaWVsZCk7Ci0gIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwoZ0V4dGVuc2lvblNp
bmdsZXRvbkRpY3Rpb25hcnlTZW1hcGhvcmUpOwotfQotCi1zdGF0aWMgaWQgRXh0ZW5zaW9uRm9y
TmFtZShpZCBzZWxmLCBTRUwgX2NtZCkgewotICAvLyBSZWFsbHkgZmFzdCB3YXkgb2YgZG9pbmcg
ImNsYXNzbmFtZV9zZWxOYW1lIi4KLSAgLy8gVGhpcyBjYW1lIHVwIGFzIGEgaG90c3BvdCAoY3Jl
YXRpb24gb2YgTlNTdHJpbmcgKikgd2hlbiBhY2Nlc3NpbmcgYQotICAvLyBsb3Qgb2YgZXh0ZW5z
aW9ucy4KLSAgY29uc3QgY2hhciAqc2VsTmFtZSA9IHNlbF9nZXROYW1lKF9jbWQpOwotICBpZiAo
c2VsTmFtZVswXSA9PSAnXycpIHsKLSAgICByZXR1cm4gbmlsOyAgLy8gQXBwbGUgaW50ZXJuYWwg
c2VsZWN0b3IuCi0gIH0KLSAgc2l6ZV90IHNlbE5hbWVMZW4gPSAwOwotICB3aGlsZSAoMSkgewot
ICAgIGNoYXIgYyA9IHNlbE5hbWVbc2VsTmFtZUxlbl07Ci0gICAgaWYgKGMgPT0gJ1wwJykgeyAg
Ly8gU3RyaW5nIGVuZC4KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoYyA9PSAnOicpIHsK
LSAgICAgIHJldHVybiBuaWw7ICAvLyBTZWxlY3RvciB0b29rIGFuIGFyZywgbm90IG9uZSBvZiB0
aGUgcnVudGltZSBtZXRob2RzLgotICAgIH0KLSAgICArK3NlbE5hbWVMZW47Ci0gIH0KLQotICBj
b25zdCBjaGFyICpjbGFzc05hbWUgPSBjbGFzc19nZXROYW1lKHNlbGYpOwotICBzaXplX3QgY2xh
c3NOYW1lTGVuID0gc3RybGVuKGNsYXNzTmFtZSk7Ci0gIGNoYXIga2V5W2NsYXNzTmFtZUxlbiAr
IHNlbE5hbWVMZW4gKyAyXTsKLSAgbWVtY3B5KGtleSwgY2xhc3NOYW1lLCBjbGFzc05hbWVMZW4p
OwotICBrZXlbY2xhc3NOYW1lTGVuXSA9ICdfJzsKLSAgbWVtY3B5KCZrZXlbY2xhc3NOYW1lTGVu
ICsgMV0sIHNlbE5hbWUsIHNlbE5hbWVMZW4pOwotICBrZXlbY2xhc3NOYW1lTGVuICsgMSArIHNl
bE5hbWVMZW5dID0gJ1wwJzsKLQotICAvLyBOT1RFOiBFdmVuIHRob3VnaCB0aGlzIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSBhbm90aGVyIEMgZnVuY3Rpb24sCi0gIC8vIGdFeHRlbnNpb25TaW5nbGV0
b25EaWN0aW9uYXJ5U2VtYXBob3JlIGFuZCBnRXh0ZW5zaW9uU2luZ2xldG9uRGljdGlvbmFyeQot
ICAvLyB3aWxsIGFsd2F5cyBiZSBpbml0aWFsaXplZC4gVGhpcyBpcyBiZWNhdXNlIHRoaXMgY2Fs
bCBmbG93IGlzIGp1c3QgdG8KLSAgLy8gbG9va3VwIHRoZSBFeHRlbnNpb24sIG1lYW5pbmcgdGhl
IGNvZGUgaXMgY2FsbGluZyBhbiBFeHRlbnNpb24gY2xhc3MKLSAgLy8gbWVzc2FnZSBvbiBhIE1l
c3NhZ2Ugb3IgUm9vdCBjbGFzcy4gVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhlIGNsYXNzIHdhcwot
ICAvLyBpbml0aWFsaXplZCBhbmQgTWVzc2FnZSBjbGFzc2VzIGVuc3VyZSB0aGVpciBSb290IHdh
cyBhbHNvIGluaXRpYWxpemVkLgotICBOU0Fzc2VydChnRXh0ZW5zaW9uU2luZ2xldG9uRGljdGlv
bmFyeSwgQCJTdGFydHVwIG9yZGVyIGJyb2tlbiEiKTsKLQotICBkaXNwYXRjaF9zZW1hcGhvcmVf
d2FpdChnRXh0ZW5zaW9uU2luZ2xldG9uRGljdGlvbmFyeVNlbWFwaG9yZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKLSAgaWQgZXh0ZW5zaW9uID0g
KGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKGdFeHRlbnNpb25TaW5nbGV0b25EaWN0aW9uYXJ5LCBr
ZXkpOwotICBpZiAoZXh0ZW5zaW9uKSB7Ci0gICAgLy8gVGhlIG1ldGhvZCBpcyBnZXR0aW5nIHdp
cmVkIGluIHRvIHRoZSBjbGFzcywgc28gbm8gbmVlZCB0byBrZWVwIGl0IGluCi0gICAgLy8gdGhl
IGRpY3Rpb25hcnkuCi0gICAgQ0ZEaWN0aW9uYXJ5UmVtb3ZlVmFsdWUoZ0V4dGVuc2lvblNpbmds
ZXRvbkRpY3Rpb25hcnksIGtleSk7Ci0gIH0KLSAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChn
RXh0ZW5zaW9uU2luZ2xldG9uRGljdGlvbmFyeVNlbWFwaG9yZSk7Ci0gIHJldHVybiBleHRlbnNp
b247Ci19Ci0KLUJPT0wgR1BCUmVzb2x2ZUV4dGVuc2lvbkNsYXNzTWV0aG9kKENsYXNzIHNlbGYs
IFNFTCBzZWwpIHsKLSAgLy8gQW5vdGhlciBvcHRpb24gd291bGQgYmUgdG8gcmVnaXN0ZXIgdGhl
IGV4dGVuc2lvbnMgd2l0aCB0aGUgY2xhc3MgYXQKLSAgLy8gZ2xvYmFsbHlSZWdpc3RlckV4dGVu
c2lvbjoKLSAgLy8gVGltaW5nIHRoZSB0d28gc29sdXRpb25zLCB0aGlzIHNvbHV0aW9uIHR1cm5l
ZCBvdXQgdG8gYmUgbXVjaCBmYXN0ZXIKLSAgLy8gYW5kIHJlZHVjZWQgc3RhcnR1cCB0aW1lLCBh
bmQgcnVudGltZSBtZW1vcnkuCi0gIC8vIFRoZSBhZHZhbnRhZ2UgdG8gZ2xvYmFsbHlSZWdpc3Rl
ckV4dGVuc2lvbiBpcyB0aGF0IGl0IHdvdWxkIHJlZHVjZSB0aGUKLSAgLy8gc2l6ZSBvZiB0aGUg
cHJvdG9zIHNvbWV3aGF0IGJlY2F1c2UgdGhlIHNpbmdsZXRvbk5hbWVDIHdvdWxkbid0IG5lZWQK
LSAgLy8gdG8gaW5jbHVkZSB0aGUgY2xhc3MgbmFtZS4gRm9yIGEgY2xhc3Mgd2l0aCBhIGxvdCBv
ZiBleHRlbnNpb25zIGl0Ci0gIC8vIGNhbiBhZGQgdXAuIFlvdSBjb3VsZCBhbHNvIHNpZ25pZmlj
YW50bHkgcmVkdWNlIHRoZSBjb2RlIGNvbXBsZXhpdHkgb2YgdGhpcwotICAvLyBmaWxlLgotICBp
ZCBleHRlbnNpb24gPSBFeHRlbnNpb25Gb3JOYW1lKHNlbGYsIHNlbCk7Ci0gIGlmIChleHRlbnNp
b24gIT0gbmlsKSB7Ci0gICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPQotICAgICAgICBHUEJNZXNz
YWdlRW5jb2RpbmdGb3JTZWxlY3RvcihAc2VsZWN0b3IoZ2V0Q2xhc3NWYWx1ZSksIE5PKTsKLSAg
ICBDbGFzcyBtZXRhQ2xhc3MgPSBvYmpjX2dldE1ldGFDbGFzcyhjbGFzc19nZXROYW1lKHNlbGYp
KTsKLSAgICBJTVAgaW1wID0gaW1wX2ltcGxlbWVudGF0aW9uV2l0aEJsb2NrKF4oaWQgb2JqKSB7
Ci0jcHJhZ21hIHVudXNlZChvYmopCi0gICAgICByZXR1cm4gZXh0ZW5zaW9uOwotICAgIH0pOwot
ICAgIGlmIChjbGFzc19hZGRNZXRob2QobWV0YUNsYXNzLCBzZWwsIGltcCwgZW5jb2RpbmcpKSB7
Ci0gICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgfQotICByZXR1cm4gTk87Ci19Ci0KLQotKyAo
Qk9PTClyZXNvbHZlQ2xhc3NNZXRob2Q6KFNFTClzZWwgewotICBpZiAoR1BCUmVzb2x2ZUV4dGVu
c2lvbkNsYXNzTWV0aG9kKHNlbGYsIHNlbCkpIHsKLSAgICByZXR1cm4gWUVTOwotICB9Ci0gIHJl
dHVybiBbc3VwZXIgcmVzb2x2ZUNsYXNzTWV0aG9kOnNlbF07Ci19Ci0KLUBlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvb2JqZWN0aXZlYy9HUEJSb290T2JqZWN0X1BhY2thZ2VQcml2YXRlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMv
R1BCUm9vdE9iamVjdF9QYWNrYWdlUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzYzhmMDljODk2OTA3MjgyOGVlODM3YjY5M2YxNzk1MGUzMTA0YmM2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJSb290T2Jq
ZWN0X1BhY2thZ2VQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgIkdQQlJvb3RPYmplY3QuaCIKLQotQGNsYXNzIEdQQkV4dGVu
c2lvbkRlc2NyaXB0b3I7Ci0KLUBpbnRlcmZhY2UgR1BCUm9vdE9iamVjdCAoKQotCi0vLyBHbG9i
YWxseSByZWdpc3Rlci4KLSsgKHZvaWQpZ2xvYmFsbHlSZWdpc3RlckV4dGVuc2lvbjooR1BCRXh0
ZW5zaW9uRGVzY3JpcHRvciAqKWZpZWxkOwotCi1AZW5kCi0KLS8vIFJldHVybnMgWUVTIGlmIHRo
ZSBzZWxlY3RvciB3YXMgcmVzb2x2ZWQgYW5kIGFkZGVkIHRvIHRoZSBjbGFzcywKLS8vIE5PIG90
aGVyd2lzZS4KLUJPT0wgR1BCUmVzb2x2ZUV4dGVuc2lvbkNsYXNzTWV0aG9kKENsYXNzIHNlbGYs
IFNFTCBzZWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlJ1bnRpbWVUeXBlcy5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmpl
Y3RpdmVjL0dQQlJ1bnRpbWVUeXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
YTM4YjExMGM2NjY0YzFlYWU5Y2EzYTFmMjhiNWM5NTlhMGUzZmJlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJSdW50aW1lVHlwZXMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgIkdQQkJvb3RzdHJhcC5oIgotCi1AY2xhc3MgR1BCRW51bURlc2NyaXB0b3I7Ci1AY2xhc3Mg
R1BCTWVzc2FnZTsKLUBjbGFzcyBHUEJJbnQzMkFycmF5OwotCi0vLyBGdW5jdGlvbiB1c2VkIHRv
IHZlcmlmeSB0aGF0IGEgZ2l2ZW4gdmFsdWUgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGFuCi0vLyBl
bnVtIHR5cGUuCi10eXBlZGVmIEJPT0wgKCpHUEJFbnVtVmFsaWRhdGlvbkZ1bmMpKGludDMyX3Qp
OwotCi0vLyBGdW5jdGlvbiB1c2VkIHRvIGZldGNoIGFuIEVudW1EZXNjcmlwdG9yLgotdHlwZWRl
ZiBHUEJFbnVtRGVzY3JpcHRvciAqKCpHUEJFbnVtRGVzY3JpcHRvckZ1bmMpKHZvaWQpOwotCi0v
LyBNYWdpYyB2YWx1ZXMgdXNlZCBmb3Igd2hlbiBhbiB0aGUgYXQgcnVudGltZSB0byBpbmRpY2F0
ZSBhbiBlbnVtIHZhbHVlCi0vLyB0aGF0IHdhc24ndCBrbm93IGF0IGNvbXBpbGUgdGltZS4KLWVu
dW0gewotICBrR1BCVW5yZWNvZ25pemVkRW51bWVyYXRvclZhbHVlID0gKGludDMyX3QpMHhGQkFE
QkVFRiwKLX07Ci0KLS8vIEEgdW5pb24gZm9yIHN0b3JpbmcgYWxsIHBvc3NpYmxlIFByb3RvYnVm
IHZhbHVlcy4KLS8vIE5vdGUgdGhhdCBvd25lciBpcyByZXNwb25zaWJsZSBmb3IgbWVtb3J5IG1h
bmFnZW1lbnQgb2Ygb2JqZWN0IHR5cGVzLgotdHlwZWRlZiB1bmlvbiB7Ci0gIEJPT0wgdmFsdWVC
b29sOwotICBpbnQzMl90IHZhbHVlSW50MzI7Ci0gIGludDY0X3QgdmFsdWVJbnQ2NDsKLSAgdWlu
dDMyX3QgdmFsdWVVSW50MzI7Ci0gIHVpbnQ2NF90IHZhbHVlVUludDY0OwotICBmbG9hdCB2YWx1
ZUZsb2F0OwotICBkb3VibGUgdmFsdWVEb3VibGU7Ci0gIEdQQl9VTlNBRkVfVU5SRVRBSU5FRCBO
U0RhdGEgKnZhbHVlRGF0YTsKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIE5TU3RyaW5nICp2YWx1
ZVN0cmluZzsKLSAgR1BCX1VOU0FGRV9VTlJFVEFJTkVEIEdQQk1lc3NhZ2UgKnZhbHVlTWVzc2Fn
ZTsKLSAgaW50MzJfdCB2YWx1ZUVudW07Ci19IEdQQkdlbmVyaWNWYWx1ZTsKLQotLy8gRG8gbm90
IGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhpcyBlbnVtIChvciBhZGQgdGhpbmdzIHRvIGl0KSB3aXRo
b3V0IHRoaW5raW5nCi0vLyBhYm91dCBpdCB2ZXJ5IGNhcmVmdWxseS4gVGhlcmUgYXJlIHNldmVy
YWwgdGhpbmdzIHRoYXQgZGVwZW5kIG9uIHRoZSBvcmRlci4KLXR5cGVkZWYgTlNfRU5VTSh1aW50
OF90LCBHUEJEYXRhVHlwZSkgewotICBHUEJEYXRhVHlwZUJvb2wgPSAwLAotICBHUEJEYXRhVHlw
ZUZpeGVkMzIsCi0gIEdQQkRhdGFUeXBlU0ZpeGVkMzIsCi0gIEdQQkRhdGFUeXBlRmxvYXQsCi0g
IEdQQkRhdGFUeXBlRml4ZWQ2NCwKLSAgR1BCRGF0YVR5cGVTRml4ZWQ2NCwKLSAgR1BCRGF0YVR5
cGVEb3VibGUsCi0gIEdQQkRhdGFUeXBlSW50MzIsCi0gIEdQQkRhdGFUeXBlSW50NjQsCi0gIEdQ
QkRhdGFUeXBlU0ludDMyLAotICBHUEJEYXRhVHlwZVNJbnQ2NCwKLSAgR1BCRGF0YVR5cGVVSW50
MzIsCi0gIEdQQkRhdGFUeXBlVUludDY0LAotICBHUEJEYXRhVHlwZUJ5dGVzLAotICBHUEJEYXRh
VHlwZVN0cmluZywKLSAgR1BCRGF0YVR5cGVNZXNzYWdlLAotICBHUEJEYXRhVHlwZUdyb3VwLAot
ICBHUEJEYXRhVHlwZUVudW0sCi19OwotCi1lbnVtIHsKLSAgLy8gQSBjb3VudCBvZiB0aGUgbnVt
YmVyIG9mIHR5cGVzIGluIEdQQkRhdGFUeXBlLiBTZXBhcmF0ZWQgb3V0IGZyb20gdGhlCi0gIC8v
IEdQQkRhdGFUeXBlIGVudW0gdG8gYXZvaWQgd2FybmluZ3MgcmVnYXJkaW5nIG5vdCBoYW5kbGlu
ZwotICAvLyBHUEJEYXRhVHlwZV9Db3VudCBpbiBzd2l0Y2ggc3RhdGVtZW50cy4KLSAgR1BCRGF0
YVR5cGVfQ291bnQgPSBHUEJEYXRhVHlwZUVudW0gKyAxCi19OwotCi0vLyBBbiBleHRlbnNpb24g
cmFuZ2UuCi10eXBlZGVmIHN0cnVjdCBHUEJFeHRlbnNpb25SYW5nZSB7Ci0gIHVpbnQzMl90IHN0
YXJ0OyAgLy8gaW5jbHVzaXZlCi0gIHVpbnQzMl90IGVuZDsgICAgLy8gZXhjbHVzaXZlCi19IEdQ
QkV4dGVuc2lvblJhbmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlVua25vd25GaWVsZC5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9vYmplY3RpdmVjL0dQQlVua25vd25GaWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwZjMwMWU0NzgzOWVmNDg5MGM2ODE2YWM3MjJmNDBkZWQ5MWZkY2ZmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJVbmtub3du
RmllbGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
QGNsYXNzIEdQQkNvZGVkT3V0cHV0U3RyZWFtOwotQGNsYXNzIEdQQlVJbnQzMkFycmF5OwotQGNs
YXNzIEdQQlVJbnQ2NEFycmF5OwotQGNsYXNzIEdQQlVua25vd25GaWVsZFNldDsKLQotTlNfQVNT
VU1FX05PTk5VTExfQkVHSU4KLQotLy8vIFN0b3JlIGFuIHVua25vd24gZmllbGQuIFRoZXNlIGFy
ZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggQGMgR1BCVW5rbm93bkZpZWxkU2V0Ci1AaW50ZXJm
YWNlIEdQQlVua25vd25GaWVsZCA6IE5TT2JqZWN0PE5TQ29weWluZz4KLQotLy8vIFRoZSBmaWVs
ZCBudW1iZXIgdGhlIGRhdGEgaXMgc3RvcmVkIHVuZGVyLgotQHByb3BlcnR5KG5vbmF0b21pYywg
cmVhZG9ubHksIGFzc2lnbikgaW50MzJfdCBudW1iZXI7Ci0KLS8vLyBBbiBhcnJheSBvZiB2YXJp
bnQgdmFsdWVzIGZvciB0aGlzIGZpZWxkLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHks
IHN0cm9uZykgR1BCVUludDY0QXJyYXkgKnZhcmludExpc3Q7Ci0KLS8vLyBBbiBhcnJheSBvZiBm
aXhlZDMyIHZhbHVlcyBmb3IgdGhpcyBmaWVsZC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRv
bmx5LCBzdHJvbmcpIEdQQlVJbnQzMkFycmF5ICpmaXhlZDMyTGlzdDsKLQotLy8vIEFuIGFycmF5
IG9mIGZpeGVkNjQgdmFsdWVzIGZvciB0aGlzIGZpZWxkLgotQHByb3BlcnR5KG5vbmF0b21pYywg
cmVhZG9ubHksIHN0cm9uZykgR1BCVUludDY0QXJyYXkgKmZpeGVkNjRMaXN0OwotCi0vLy8gQW4g
YXJyYXkgb2YgZGF0YSB2YWx1ZXMgZm9yIHRoaXMgZmllbGQuCi1AcHJvcGVydHkobm9uYXRvbWlj
LCByZWFkb25seSwgc3Ryb25nKSBOU0FycmF5PE5TRGF0YSo+ICpsZW5ndGhEZWxpbWl0ZWRMaXN0
OwotCi0vLy8gQW4gYXJyYXkgb2YgZ3JvdXBzIG9mIHZhbHVlcyBmb3IgdGhpcyBmaWVsZC4KLUBw
cm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIE5TQXJyYXk8R1BCVW5rbm93bkZp
ZWxkU2V0Kj4gKmdyb3VwTGlzdDsKLQotCi0vLy8gQWRkIGEgdmFsdWUgdG8gdGhlIHZhcmludExp
c3QuCi0vLy8KLS8vLyBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZC4KLS0gKHZvaWQpYWRk
VmFyaW50Oih1aW50NjRfdCl2YWx1ZTsKLQotLy8vIEFkZCBhIHZhbHVlIHRvIHRoZSBmaXhlZDMy
TGlzdC4KLS8vLwotLy8vIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkLgotLSAodm9pZClh
ZGRGaXhlZDMyOih1aW50MzJfdCl2YWx1ZTsKLQotLy8vIEFkZCBhIHZhbHVlIHRvIHRoZSBmaXhl
ZDY0TGlzdC4KLS8vLwotLy8vIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkLgotLSAodm9p
ZClhZGRGaXhlZDY0Oih1aW50NjRfdCl2YWx1ZTsKLQotLy8vIEFkZCBhIHZhbHVlIHRvIHRoZSBs
ZW5ndGhEZWxpbWl0ZWRMaXN0LgotLy8vCi0vLy8gQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBh
ZGQuCi0tICh2b2lkKWFkZExlbmd0aERlbGltaXRlZDooTlNEYXRhICopdmFsdWU7Ci0KLS8vLyBB
ZGQgYSB2YWx1ZSB0byB0aGUgZ3JvdXBMaXN0LgotLy8vCi0vLy8gQHBhcmFtIHZhbHVlIFRoZSB2
YWx1ZSB0byBhZGQuCi0tICh2b2lkKWFkZEdyb3VwOihHUEJVbmtub3duRmllbGRTZXQgKil2YWx1
ZTsKLQotQGVuZAotCi1OU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZl
Yy9HUEJVbmtub3duRmllbGQubSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJVbmtub3duRmllbGQubQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyOWJkZTUwZjY2YjU4NjFkOTNhMTgwZmEzNmE1YjVl
MWI4NWMzNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29i
amVjdGl2ZWMvR1BCVW5rbm93bkZpZWxkLm0KKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbXBvcnQgIkdQQlVua25v
d25GaWVsZF9QYWNrYWdlUHJpdmF0ZS5oIgotCi0jaW1wb3J0ICJHUEJBcnJheS5oIgotI2ltcG9y
dCAiR1BCQ29kZWRPdXRwdXRTdHJlYW1fUGFja2FnZVByaXZhdGUuaCIKLQotQGltcGxlbWVudGF0
aW9uIEdQQlVua25vd25GaWVsZCB7Ci0gQHByb3RlY3RlZAotICBpbnQzMl90IG51bWJlcl87Ci0g
IEdQQlVJbnQ2NEFycmF5ICptdXRhYmxlVmFyaW50TGlzdF87Ci0gIEdQQlVJbnQzMkFycmF5ICpt
dXRhYmxlRml4ZWQzMkxpc3RfOwotICBHUEJVSW50NjRBcnJheSAqbXV0YWJsZUZpeGVkNjRMaXN0
XzsKLSAgTlNNdXRhYmxlQXJyYXk8TlNEYXRhKj4gKm11dGFibGVMZW5ndGhEZWxpbWl0ZWRMaXN0
XzsKLSAgTlNNdXRhYmxlQXJyYXk8R1BCVW5rbm93bkZpZWxkU2V0Kj4gKm11dGFibGVHcm91cExp
c3RfOwotfQotCi1Ac3ludGhlc2l6ZSBudW1iZXIgPSBudW1iZXJfOwotQHN5bnRoZXNpemUgdmFy
aW50TGlzdCA9IG11dGFibGVWYXJpbnRMaXN0XzsKLUBzeW50aGVzaXplIGZpeGVkMzJMaXN0ID0g
bXV0YWJsZUZpeGVkMzJMaXN0XzsKLUBzeW50aGVzaXplIGZpeGVkNjRMaXN0ID0gbXV0YWJsZUZp
eGVkNjRMaXN0XzsKLUBzeW50aGVzaXplIGxlbmd0aERlbGltaXRlZExpc3QgPSBtdXRhYmxlTGVu
Z3RoRGVsaW1pdGVkTGlzdF87Ci1Ac3ludGhlc2l6ZSBncm91cExpc3QgPSBtdXRhYmxlR3JvdXBM
aXN0XzsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTnVtYmVyOihpbnQzMl90KW51bWJlciB7
Ci0gIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICBudW1iZXJfID0gbnVtYmVyOwot
ICB9Ci0gIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MgewotICBbbXV0YWJsZVZh
cmludExpc3RfIHJlbGVhc2VdOwotICBbbXV0YWJsZUZpeGVkMzJMaXN0XyByZWxlYXNlXTsKLSAg
W211dGFibGVGaXhlZDY0TGlzdF8gcmVsZWFzZV07Ci0gIFttdXRhYmxlTGVuZ3RoRGVsaW1pdGVk
TGlzdF8gcmVsZWFzZV07Ci0gIFttdXRhYmxlR3JvdXBMaXN0XyByZWxlYXNlXTsKLQotICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KLS0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZSB7Ci0g
IEdQQlVua25vd25GaWVsZCAqcmVzdWx0ID0KLSAgICAgIFtbR1BCVW5rbm93bkZpZWxkIGFsbG9j
V2l0aFpvbmU6em9uZV0gaW5pdFdpdGhOdW1iZXI6bnVtYmVyX107Ci0gIHJlc3VsdC0+bXV0YWJs
ZUZpeGVkMzJMaXN0XyA9IFttdXRhYmxlRml4ZWQzMkxpc3RfIGNvcHlXaXRoWm9uZTp6b25lXTsK
LSAgcmVzdWx0LT5tdXRhYmxlRml4ZWQ2NExpc3RfID0gW211dGFibGVGaXhlZDY0TGlzdF8gY29w
eVdpdGhab25lOnpvbmVdOwotICByZXN1bHQtPm11dGFibGVMZW5ndGhEZWxpbWl0ZWRMaXN0XyA9
Ci0gICAgICBbbXV0YWJsZUxlbmd0aERlbGltaXRlZExpc3RfIGNvcHlXaXRoWm9uZTp6b25lXTsK
LSAgcmVzdWx0LT5tdXRhYmxlVmFyaW50TGlzdF8gPSBbbXV0YWJsZVZhcmludExpc3RfIGNvcHlX
aXRoWm9uZTp6b25lXTsKLSAgaWYgKG11dGFibGVHcm91cExpc3RfLmNvdW50KSB7Ci0gICAgcmVz
dWx0LT5tdXRhYmxlR3JvdXBMaXN0XyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NXaXRoWm9uZTp6
b25lXQotICAgICAgICBpbml0V2l0aENhcGFjaXR5Om11dGFibGVHcm91cExpc3RfLmNvdW50XTsK
LSAgICBmb3IgKEdQQlVua25vd25GaWVsZFNldCAqZ3JvdXAgaW4gbXV0YWJsZUdyb3VwTGlzdF8p
IHsKLSAgICAgIEdQQlVua25vd25GaWVsZFNldCAqY29waWVkID0gW2dyb3VwIGNvcHlXaXRoWm9u
ZTp6b25lXTsKLSAgICAgIFtyZXN1bHQtPm11dGFibGVHcm91cExpc3RfIGFkZE9iamVjdDpjb3Bp
ZWRdOwotICAgICAgW2NvcGllZCByZWxlYXNlXTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihpZClvYmplY3QgewotICBpZiAoc2VsZiA9PSBvYmpl
Y3QpIHJldHVybiBZRVM7Ci0gIGlmICghW29iamVjdCBpc0tpbmRPZkNsYXNzOltHUEJVbmtub3du
RmllbGQgY2xhc3NdXSkgcmV0dXJuIE5POwotICBHUEJVbmtub3duRmllbGQgKmZpZWxkID0gKEdQ
QlVua25vd25GaWVsZCAqKW9iamVjdDsKLSAgQk9PTCBlcXVhbFZhcmludCA9Ci0gICAgICAobXV0
YWJsZVZhcmludExpc3RfLmNvdW50ID09IDAgJiYgZmllbGQtPm11dGFibGVWYXJpbnRMaXN0Xy5j
b3VudCA9PSAwKSB8fAotICAgICAgW211dGFibGVWYXJpbnRMaXN0XyBpc0VxdWFsOmZpZWxkLT5t
dXRhYmxlVmFyaW50TGlzdF9dOwotICBpZiAoIWVxdWFsVmFyaW50KSByZXR1cm4gTk87Ci0gIEJP
T0wgZXF1YWxGaXhlZDMyID0gKG11dGFibGVGaXhlZDMyTGlzdF8uY291bnQgPT0gMCAmJgotICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZC0+bXV0YWJsZUZpeGVkMzJMaXN0Xy5jb3VudCA9PSAw
KSB8fAotICAgICAgICAgICAgICAgICAgICAgIFttdXRhYmxlRml4ZWQzMkxpc3RfIGlzRXF1YWw6
ZmllbGQtPm11dGFibGVGaXhlZDMyTGlzdF9dOwotICBpZiAoIWVxdWFsRml4ZWQzMikgcmV0dXJu
IE5POwotICBCT09MIGVxdWFsRml4ZWQ2NCA9IChtdXRhYmxlRml4ZWQ2NExpc3RfLmNvdW50ID09
IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPm11dGFibGVGaXhlZDY0TGlzdF8u
Y291bnQgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICBbbXV0YWJsZUZpeGVkNjRMaXN0
XyBpc0VxdWFsOmZpZWxkLT5tdXRhYmxlRml4ZWQ2NExpc3RfXTsKLSAgaWYgKCFlcXVhbEZpeGVk
NjQpIHJldHVybiBOTzsKLSAgQk9PTCBlcXVhbExETGlzdCA9Ci0gICAgICAobXV0YWJsZUxlbmd0
aERlbGltaXRlZExpc3RfLmNvdW50ID09IDAgJiYKLSAgICAgICBmaWVsZC0+bXV0YWJsZUxlbmd0
aERlbGltaXRlZExpc3RfLmNvdW50ID09IDApIHx8Ci0gICAgICBbbXV0YWJsZUxlbmd0aERlbGlt
aXRlZExpc3RfIGlzRXF1YWw6ZmllbGQtPm11dGFibGVMZW5ndGhEZWxpbWl0ZWRMaXN0X107Ci0g
IGlmICghZXF1YWxMRExpc3QpIHJldHVybiBOTzsKLSAgQk9PTCBlcXVhbEdyb3VwTGlzdCA9Ci0g
ICAgICAobXV0YWJsZUdyb3VwTGlzdF8uY291bnQgPT0gMCAmJiBmaWVsZC0+bXV0YWJsZUdyb3Vw
TGlzdF8uY291bnQgPT0gMCkgfHwKLSAgICAgIFttdXRhYmxlR3JvdXBMaXN0XyBpc0VxdWFsOmZp
ZWxkLT5tdXRhYmxlR3JvdXBMaXN0X107Ci0gIGlmICghZXF1YWxHcm91cExpc3QpIHJldHVybiBO
TzsKLSAgcmV0dXJuIFlFUzsKLX0KLQotLSAoTlNVSW50ZWdlciloYXNoIHsKLSAgLy8gSnVzdCBt
aXggdGhlIGhhc2hlcyBvZiB0aGUgcG9zc2libGUgc3ViIGFycmF5cy4KLSAgY29uc3QgaW50IHBy
aW1lID0gMzE7Ci0gIE5TVUludGVnZXIgcmVzdWx0ID0gcHJpbWUgKyBbbXV0YWJsZVZhcmludExp
c3RfIGhhc2hdOwotICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIFttdXRhYmxlRml4ZWQzMkxp
c3RfIGhhc2hdOwotICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIFttdXRhYmxlRml4ZWQ2NExp
c3RfIGhhc2hdOwotICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIFttdXRhYmxlTGVuZ3RoRGVs
aW1pdGVkTGlzdF8gaGFzaF07Ci0gIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgW211dGFibGVH
cm91cExpc3RfIGhhc2hdOwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXdyaXRlVG9P
dXRwdXQ6KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0IHsKLSAgTlNVSW50ZWdlciBjb3Vu
dCA9IG11dGFibGVWYXJpbnRMaXN0Xy5jb3VudDsKLSAgaWYgKGNvdW50ID4gMCkgewotICAgIFtv
dXRwdXQgd3JpdGVVSW50NjRBcnJheTpudW1iZXJfIHZhbHVlczptdXRhYmxlVmFyaW50TGlzdF8g
dGFnOjBdOwotICB9Ci0gIGNvdW50ID0gbXV0YWJsZUZpeGVkMzJMaXN0Xy5jb3VudDsKLSAgaWYg
KGNvdW50ID4gMCkgewotICAgIFtvdXRwdXQgd3JpdGVGaXhlZDMyQXJyYXk6bnVtYmVyXyB2YWx1
ZXM6bXV0YWJsZUZpeGVkMzJMaXN0XyB0YWc6MF07Ci0gIH0KLSAgY291bnQgPSBtdXRhYmxlRml4
ZWQ2NExpc3RfLmNvdW50OwotICBpZiAoY291bnQgPiAwKSB7Ci0gICAgW291dHB1dCB3cml0ZUZp
eGVkNjRBcnJheTpudW1iZXJfIHZhbHVlczptdXRhYmxlRml4ZWQ2NExpc3RfIHRhZzowXTsKLSAg
fQotICBjb3VudCA9IG11dGFibGVMZW5ndGhEZWxpbWl0ZWRMaXN0Xy5jb3VudDsKLSAgaWYgKGNv
dW50ID4gMCkgewotICAgIFtvdXRwdXQgd3JpdGVCeXRlc0FycmF5Om51bWJlcl8gdmFsdWVzOm11
dGFibGVMZW5ndGhEZWxpbWl0ZWRMaXN0X107Ci0gIH0KLSAgY291bnQgPSBtdXRhYmxlR3JvdXBM
aXN0Xy5jb3VudDsKLSAgaWYgKGNvdW50ID4gMCkgewotICAgIFtvdXRwdXQgd3JpdGVVbmtub3du
R3JvdXBBcnJheTpudW1iZXJfIHZhbHVlczptdXRhYmxlR3JvdXBMaXN0X107Ci0gIH0KLX0KLQot
LSAoc2l6ZV90KXNlcmlhbGl6ZWRTaXplIHsKLSAgX19ibG9jayBzaXplX3QgcmVzdWx0ID0gMDsK
LSAgaW50MzJfdCBudW1iZXIgPSBudW1iZXJfOwotICBbbXV0YWJsZVZhcmludExpc3RfCi0gICAg
ICBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxvY2s6Xih1aW50NjRfdCB2YWx1ZSwgTlNVSW50ZWdlciBp
ZHgsIEJPT0wgKnN0b3ApIHsKLSNwcmFnbWEgdW51c2VkKGlkeCwgc3RvcCkKLSAgICAgICAgcmVz
dWx0ICs9IEdQQkNvbXB1dGVVSW50NjRTaXplKG51bWJlciwgdmFsdWUpOwotICAgICAgfV07Ci0K
LSAgW211dGFibGVGaXhlZDMyTGlzdF8KLSAgICAgIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpe
KHVpbnQzMl90IHZhbHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1
bnVzZWQoaWR4LCBzdG9wKQotICAgICAgICByZXN1bHQgKz0gR1BCQ29tcHV0ZUZpeGVkMzJTaXpl
KG51bWJlciwgdmFsdWUpOwotICAgICAgfV07Ci0KLSAgW211dGFibGVGaXhlZDY0TGlzdF8KLSAg
ICAgIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpeKHVpbnQ2NF90IHZhbHVlLCBOU1VJbnRlZ2Vy
IGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBzdG9wKQotICAgICAgICBy
ZXN1bHQgKz0gR1BCQ29tcHV0ZUZpeGVkNjRTaXplKG51bWJlciwgdmFsdWUpOwotICAgICAgfV07
Ci0KLSAgZm9yIChOU0RhdGEgKmRhdGEgaW4gbXV0YWJsZUxlbmd0aERlbGltaXRlZExpc3RfKSB7
Ci0gICAgcmVzdWx0ICs9IEdQQkNvbXB1dGVCeXRlc1NpemUobnVtYmVyLCBkYXRhKTsKLSAgfQot
Ci0gIGZvciAoR1BCVW5rbm93bkZpZWxkU2V0ICpzZXQgaW4gbXV0YWJsZUdyb3VwTGlzdF8pIHsK
LSAgICByZXN1bHQgKz0gR1BCQ29tcHV0ZVVua25vd25Hcm91cFNpemUobnVtYmVyLCBzZXQpOwot
ICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl3cml0ZUFzTWVzc2FnZVNldEV4
dGVuc2lvblRvT3V0cHV0OihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1dCB7Ci0gIGZvciAo
TlNEYXRhICpkYXRhIGluIG11dGFibGVMZW5ndGhEZWxpbWl0ZWRMaXN0XykgewotICAgIFtvdXRw
dXQgd3JpdGVSYXdNZXNzYWdlU2V0RXh0ZW5zaW9uOm51bWJlcl8gdmFsdWU6ZGF0YV07Ci0gIH0K
LX0KLQotLSAoc2l6ZV90KXNlcmlhbGl6ZWRTaXplQXNNZXNzYWdlU2V0RXh0ZW5zaW9uIHsKLSAg
c2l6ZV90IHJlc3VsdCA9IDA7Ci0gIGZvciAoTlNEYXRhICpkYXRhIGluIG11dGFibGVMZW5ndGhE
ZWxpbWl0ZWRMaXN0XykgewotICAgIHJlc3VsdCArPSBHUEJDb21wdXRlUmF3TWVzc2FnZVNldEV4
dGVuc2lvblNpemUobnVtYmVyXywgZGF0YSk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
LSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbiB7Ci0gIE5TTXV0YWJsZVN0cmluZyAqZGVzY3JpcHRp
b24gPSBbTlNNdXRhYmxlU3RyaW5nCi0gICAgICBzdHJpbmdXaXRoRm9ybWF0OkAiPCVAICVwPjog
RmllbGQ6ICVkIHtcbiIsIFtzZWxmIGNsYXNzXSwgc2VsZiwgbnVtYmVyX107Ci0gIFttdXRhYmxl
VmFyaW50TGlzdF8KLSAgICAgIGVudW1lcmF0ZVZhbHVlc1dpdGhCbG9jazpeKHVpbnQ2NF90IHZh
bHVlLCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotI3ByYWdtYSB1bnVzZWQoaWR4LCBz
dG9wKQotICAgICAgICBbZGVzY3JpcHRpb24gYXBwZW5kRm9ybWF0OkAiXHQlbGx1XG4iLCB2YWx1
ZV07Ci0gICAgICB9XTsKLQotICBbbXV0YWJsZUZpeGVkMzJMaXN0XwotICAgICAgZW51bWVyYXRl
VmFsdWVzV2l0aEJsb2NrOl4odWludDMyX3QgdmFsdWUsIE5TVUludGVnZXIgaWR4LCBCT09MICpz
dG9wKSB7Ci0jcHJhZ21hIHVudXNlZChpZHgsIHN0b3ApCi0gICAgICAgIFtkZXNjcmlwdGlvbiBh
cHBlbmRGb3JtYXQ6QCJcdCV1XG4iLCB2YWx1ZV07Ci0gICAgICB9XTsKLQotICBbbXV0YWJsZUZp
eGVkNjRMaXN0XwotICAgICAgZW51bWVyYXRlVmFsdWVzV2l0aEJsb2NrOl4odWludDY0X3QgdmFs
dWUsIE5TVUludGVnZXIgaWR4LCBCT09MICpzdG9wKSB7Ci0jcHJhZ21hIHVudXNlZChpZHgsIHN0
b3ApCi0gICAgICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCJcdCVsbHVcbiIsIHZhbHVl
XTsKLSAgICAgIH1dOwotCi0gIGZvciAoTlNEYXRhICpkYXRhIGluIG11dGFibGVMZW5ndGhEZWxp
bWl0ZWRMaXN0XykgewotICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCJcdCVAXG4iLCBk
YXRhXTsKLSAgfQotCi0gIGZvciAoR1BCVW5rbm93bkZpZWxkU2V0ICpzZXQgaW4gbXV0YWJsZUdy
b3VwTGlzdF8pIHsKLSAgICBbZGVzY3JpcHRpb24gYXBwZW5kRm9ybWF0OkAiXHQlQFxuIiwgc2V0
XTsKLSAgfQotICBbZGVzY3JpcHRpb24gYXBwZW5kU3RyaW5nOkAifSJdOwotICByZXR1cm4gZGVz
Y3JpcHRpb247Ci19Ci0KLS0gKHZvaWQpbWVyZ2VGcm9tRmllbGQ6KEdQQlVua25vd25GaWVsZCAq
KW90aGVyIHsKLSAgR1BCVUludDY0QXJyYXkgKm90aGVyVmFyaW50TGlzdCA9IG90aGVyLnZhcmlu
dExpc3Q7Ci0gIGlmIChvdGhlclZhcmludExpc3QuY291bnQgPiAwKSB7Ci0gICAgaWYgKG11dGFi
bGVWYXJpbnRMaXN0XyA9PSBuaWwpIHsKLSAgICAgIG11dGFibGVWYXJpbnRMaXN0XyA9IFtvdGhl
clZhcmludExpc3QgY29weV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIFttdXRhYmxlVmFyaW50TGlz
dF8gYWRkVmFsdWVzRnJvbUFycmF5Om90aGVyVmFyaW50TGlzdF07Ci0gICAgfQotICB9Ci0KLSAg
R1BCVUludDMyQXJyYXkgKm90aGVyRml4ZWQzMkxpc3QgPSBvdGhlci5maXhlZDMyTGlzdDsKLSAg
aWYgKG90aGVyRml4ZWQzMkxpc3QuY291bnQgPiAwKSB7Ci0gICAgaWYgKG11dGFibGVGaXhlZDMy
TGlzdF8gPT0gbmlsKSB7Ci0gICAgICBtdXRhYmxlRml4ZWQzMkxpc3RfID0gW290aGVyRml4ZWQz
Mkxpc3QgY29weV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIFttdXRhYmxlRml4ZWQzMkxpc3RfIGFk
ZFZhbHVlc0Zyb21BcnJheTpvdGhlckZpeGVkMzJMaXN0XTsKLSAgICB9Ci0gIH0KLQotICBHUEJV
SW50NjRBcnJheSAqb3RoZXJGaXhlZDY0TGlzdCA9IG90aGVyLmZpeGVkNjRMaXN0OwotICBpZiAo
b3RoZXJGaXhlZDY0TGlzdC5jb3VudCA+IDApIHsKLSAgICBpZiAobXV0YWJsZUZpeGVkNjRMaXN0
XyA9PSBuaWwpIHsKLSAgICAgIG11dGFibGVGaXhlZDY0TGlzdF8gPSBbb3RoZXJGaXhlZDY0TGlz
dCBjb3B5XTsKLSAgICB9IGVsc2UgewotICAgICAgW211dGFibGVGaXhlZDY0TGlzdF8gYWRkVmFs
dWVzRnJvbUFycmF5Om90aGVyRml4ZWQ2NExpc3RdOwotICAgIH0KLSAgfQotCi0gIE5TQXJyYXkg
Km90aGVyTGVuZ3RoRGVsaW1pdGVkTGlzdCA9IG90aGVyLmxlbmd0aERlbGltaXRlZExpc3Q7Ci0g
IGlmIChvdGhlckxlbmd0aERlbGltaXRlZExpc3QuY291bnQgPiAwKSB7Ci0gICAgaWYgKG11dGFi
bGVMZW5ndGhEZWxpbWl0ZWRMaXN0XyA9PSBuaWwpIHsKLSAgICAgIG11dGFibGVMZW5ndGhEZWxp
bWl0ZWRMaXN0XyA9IFtvdGhlckxlbmd0aERlbGltaXRlZExpc3QgbXV0YWJsZUNvcHldOwotICAg
IH0gZWxzZSB7Ci0gICAgICBbbXV0YWJsZUxlbmd0aERlbGltaXRlZExpc3RfCi0gICAgICAgICAg
YWRkT2JqZWN0c0Zyb21BcnJheTpvdGhlckxlbmd0aERlbGltaXRlZExpc3RdOwotICAgIH0KLSAg
fQotCi0gIE5TQXJyYXkgKm90aGVyR3JvdXBMaXN0ID0gb3RoZXIuZ3JvdXBMaXN0OwotICBpZiAo
b3RoZXJHcm91cExpc3QuY291bnQgPiAwKSB7Ci0gICAgaWYgKG11dGFibGVHcm91cExpc3RfID09
IG5pbCkgewotICAgICAgbXV0YWJsZUdyb3VwTGlzdF8gPQotICAgICAgICAgIFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3RoZXJHcm91cExpc3QuY291bnRdOwotICAg
IH0KLSAgICAvLyBNYWtlIG91ciBvd24gbXV0YWJsZSBjb3BpZXMuCi0gICAgZm9yIChHUEJVbmtu
b3duRmllbGRTZXQgKmdyb3VwIGluIG90aGVyR3JvdXBMaXN0KSB7Ci0gICAgICBHUEJVbmtub3du
RmllbGRTZXQgKmNvcGllZCA9IFtncm91cCBjb3B5XTsKLSAgICAgIFttdXRhYmxlR3JvdXBMaXN0
XyBhZGRPYmplY3Q6Y29waWVkXTsKLSAgICAgIFtjb3BpZWQgcmVsZWFzZV07Ci0gICAgfQotICB9
Ci19Ci0KLS0gKHZvaWQpYWRkVmFyaW50Oih1aW50NjRfdCl2YWx1ZSB7Ci0gIGlmIChtdXRhYmxl
VmFyaW50TGlzdF8gPT0gbmlsKSB7Ci0gICAgbXV0YWJsZVZhcmludExpc3RfID0gW1tHUEJVSW50
NjRBcnJheSBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6JnZhbHVlIGNvdW50OjFdOwotICB9IGVsc2Ug
ewotICAgIFttdXRhYmxlVmFyaW50TGlzdF8gYWRkVmFsdWU6dmFsdWVdOwotICB9Ci19Ci0KLS0g
KHZvaWQpYWRkRml4ZWQzMjoodWludDMyX3QpdmFsdWUgewotICBpZiAobXV0YWJsZUZpeGVkMzJM
aXN0XyA9PSBuaWwpIHsKLSAgICBtdXRhYmxlRml4ZWQzMkxpc3RfID0KLSAgICAgICAgW1tHUEJV
SW50MzJBcnJheSBhbGxvY10gaW5pdFdpdGhWYWx1ZXM6JnZhbHVlIGNvdW50OjFdOwotICB9IGVs
c2UgewotICAgIFttdXRhYmxlRml4ZWQzMkxpc3RfIGFkZFZhbHVlOnZhbHVlXTsKLSAgfQotfQot
Ci0tICh2b2lkKWFkZEZpeGVkNjQ6KHVpbnQ2NF90KXZhbHVlIHsKLSAgaWYgKG11dGFibGVGaXhl
ZDY0TGlzdF8gPT0gbmlsKSB7Ci0gICAgbXV0YWJsZUZpeGVkNjRMaXN0XyA9Ci0gICAgICAgIFtb
R1BCVUludDY0QXJyYXkgYWxsb2NdIGluaXRXaXRoVmFsdWVzOiZ2YWx1ZSBjb3VudDoxXTsKLSAg
fSBlbHNlIHsKLSAgICBbbXV0YWJsZUZpeGVkNjRMaXN0XyBhZGRWYWx1ZTp2YWx1ZV07Ci0gIH0K
LX0KLQotLSAodm9pZClhZGRMZW5ndGhEZWxpbWl0ZWQ6KE5TRGF0YSAqKXZhbHVlIHsKLSAgaWYg
KG11dGFibGVMZW5ndGhEZWxpbWl0ZWRMaXN0XyA9PSBuaWwpIHsKLSAgICBtdXRhYmxlTGVuZ3Ro
RGVsaW1pdGVkTGlzdF8gPQotICAgICAgICBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHM6JnZhbHVlIGNvdW50OjFdOwotICB9IGVsc2UgewotICAgIFttdXRhYmxlTGVuZ3Ro
RGVsaW1pdGVkTGlzdF8gYWRkT2JqZWN0OnZhbHVlXTsKLSAgfQotfQotCi0tICh2b2lkKWFkZEdy
b3VwOihHUEJVbmtub3duRmllbGRTZXQgKil2YWx1ZSB7Ci0gIGlmIChtdXRhYmxlR3JvdXBMaXN0
XyA9PSBuaWwpIHsKLSAgICBtdXRhYmxlR3JvdXBMaXN0XyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRXaXRoT2JqZWN0czomdmFsdWUgY291bnQ6MV07Ci0gIH0gZWxzZSB7Ci0gICAgW211
dGFibGVHcm91cExpc3RfIGFkZE9iamVjdDp2YWx1ZV07Ci0gIH0KLX0KLQotQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9vYmplY3RpdmVjL0dQQlVua25vd25GaWVsZFNldC5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlVua25v
d25GaWVsZFNldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjYxMjk5M2Q0YmI2
MDkxZDJjZmUwNGUwZGU1MDM1ZjdmNDVlMjE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJVbmtub3duRmllbGRTZXQuaAorKysgL2Rl
di9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotQGNsYXNzIEdQQlVua25v
d25GaWVsZDsKLQotTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KLQotLy8vIEEgY29sbGVjdGlvbiBv
ZiB1bmtub3duIGZpZWxkcy4KLUBpbnRlcmZhY2UgR1BCVW5rbm93bkZpZWxkU2V0IDogTlNPYmpl
Y3Q8TlNDb3B5aW5nPgotCi0vLy8gVGVzdHMgdG8gc2VlIGlmIHRoZSBnaXZlbiBmaWVsZCBudW1i
ZXIgaGFzIGEgdmFsdWUuCi0vLy8KLS8vLyBAcGFyYW0gbnVtYmVyIFRoZSBmaWVsZCBudW1iZXIg
dG8gY2hlY2suCi0vLy8KLS8vLyBAcmV0dXJuIFlFUyBpZiB0aGVyZSBpcyBhbiB1bmtub3duIGZp
ZWxkIGZvciB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLgotLSAoQk9PTCloYXNGaWVsZDooaW50MzJf
dCludW1iZXI7Ci0KLS8vLyBGZXRjaGVzIHRoZSBAYyBHUEJVbmtub3duRmllbGQgZm9yIHRoZSBn
aXZlbiBmaWVsZCBudW1iZXIuCi0vLy8KLS8vLyBAcGFyYW0gbnVtYmVyIFRoZSBmaWVsZCBudW1i
ZXIgdG8gbG9vayB1cC4KLS8vLwotLy8vIEByZXR1cm4gVGhlIEBjIEdQQlVua25vd25GaWVsZCBv
ciBuaWwuCi0tIChudWxsYWJsZSBHUEJVbmtub3duRmllbGQgKilnZXRGaWVsZDooaW50MzJfdClu
dW1iZXI7Ci0KLS8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmllbGRzIGluIHRoaXMgc2V0Lgot
LSAoTlNVSW50ZWdlciljb3VudE9mRmllbGRzOwotCi0vLy8gQWRkcyB0aGUgZ2l2ZW4gZmllbGQg
dG8gdGhlIHNldC4KLS0gKHZvaWQpYWRkRmllbGQ6KEdQQlVua25vd25GaWVsZCAqKWZpZWxkOwot
Ci0vLy8gUmV0dXJucyBhbiBOU0FycmF5IG9mIHRoZSBAYyBHUEJVbmtub3duRmllbGRzIHNvcnRl
ZCBieSB0aGUgZmllbGQgbnVtYmVycy4KLS0gKE5TQXJyYXk8R1BCVW5rbm93bkZpZWxkKj4gKilz
b3J0ZWRGaWVsZHM7Ci0KLUBlbmQKLQotTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L29iamVjdGl2ZWMvR1BCVW5rbm93bkZpZWxkU2V0Lm0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCVW5rbm93bkZp
ZWxkU2V0Lm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZGMwZDJhNDg5MmZjNDNl
NTNiYmVjYmE2NjlkNDg4YjMwMWM4ZGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlVua25vd25GaWVsZFNldC5tCisrKyAvZGV2L251
bGwKQEAgLTEsNDIzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0jaW1wb3J0ICJHUEJVbmtub3duRmllbGRTZXRfUGFja2FnZVByaXZhdGUuaCIKLQotI2ltcG9y
dCAiR1BCQ29kZWRJbnB1dFN0cmVhbV9QYWNrYWdlUHJpdmF0ZS5oIgotI2ltcG9ydCAiR1BCQ29k
ZWRPdXRwdXRTdHJlYW0uaCIKLSNpbXBvcnQgIkdQQlVua25vd25GaWVsZF9QYWNrYWdlUHJpdmF0
ZS5oIgotI2ltcG9ydCAiR1BCVXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJHUEJXaXJlRm9ybWF0Lmgi
Ci0KLSNwcmFnbWEgbWFyayBDRkRpY3Rpb25hcnlLZXlDYWxsQmFja3MKLQotLy8gV2UgdXNlIGEg
Y3VzdG9tIGRpY3Rpb25hcnkgaGVyZSBiZWNhdXNlIG91ciBrZXlzIGFyZSBudW1iZXJzIGFuZAot
Ly8gY29udmVyc2lvbiBiYWNrIGFuZCBmb3J0aCBmcm9tIE5TTnVtYmVyIHdhcyBjb3N0aW5nIHVz
IHBlcmZvcm1hbmNlLgotLy8gSWYvd2hlbiB3ZSBtb3ZlIHRvIEMrKyB0aGlzIGNvdWxkIGJlIGRv
bmUgdXNpbmcgYSBzdGQ6Om1hcCBhbmQgc29tZQotLy8gY2FyZWZ1bCByZXRhaW4vcmVsZWFzZSBj
YWxscy4KLQotc3RhdGljIGNvbnN0IHZvaWQgKkdQQlVua25vd25GaWVsZFNldEtleVJldGFpbihD
RkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlKSB7Ci0jcHJhZ21hIHVudXNlZChhbGxv
Y2F0b3IpCi0gIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQgR1BCVW5rbm93bkZpZWxk
U2V0S2V5UmVsZWFzZShDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlKSB7Ci0jcHJhZ21hIHVu
dXNlZChhbGxvY2F0b3IpCi0jcHJhZ21hIHVudXNlZCh2YWx1ZSkKLX0KLQotc3RhdGljIENGU3Ry
aW5nUmVmIEdQQlVua25vd25GaWVsZFNldENvcHlLZXlEZXNjcmlwdGlvbihjb25zdCB2b2lkICp2
YWx1ZSkgewotICByZXR1cm4gQ0ZTdHJpbmdDcmVhdGVXaXRoRm9ybWF0KGtDRkFsbG9jYXRvckRl
ZmF1bHQsIE5VTEwsIENGU1RSKCIlZCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChpbnQpdmFsdWUpOwotfQotCi1zdGF0aWMgQm9vbGVhbiBHUEJVbmtub3duRmllbGRTZXRL
ZXlFcXVhbChjb25zdCB2b2lkICp2YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICp2YWx1ZTIpIHsKLSAgcmV0dXJuIHZhbHVlMSA9PSB2
YWx1ZTI7Ci19Ci0KLXN0YXRpYyBDRkhhc2hDb2RlIEdQQlVua25vd25GaWVsZFNldEtleUhhc2go
Y29uc3Qgdm9pZCAqdmFsdWUpIHsKLSAgcmV0dXJuIChDRkhhc2hDb2RlKXZhbHVlOwotfQotCi0j
cHJhZ21hIG1hcmsgSGVscGVycwotCi1zdGF0aWMgdm9pZCBjaGVja051bWJlcihpbnQzMl90IG51
bWJlcikgewotICBpZiAobnVtYmVyID09IDApIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJ
bnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCJaZXJvIGlz
IG5vdCBhIHZhbGlkIGZpZWxkIG51bWJlci4iXTsKLSAgfQotfQotCi1AaW1wbGVtZW50YXRpb24g
R1BCVW5rbm93bkZpZWxkU2V0IHsKLSBAcGFja2FnZQotICBDRk11dGFibGVEaWN0aW9uYXJ5UmVm
IGZpZWxkc187Ci19Ci0KLXN0YXRpYyB2b2lkIENvcHlXb3JrZXIoY29uc3Qgdm9pZCAqa2V5LCBj
b25zdCB2b2lkICp2YWx1ZSwgdm9pZCAqY29udGV4dCkgewotI3ByYWdtYSB1bnVzZWQoa2V5KQot
ICBHUEJVbmtub3duRmllbGQgKmZpZWxkID0gdmFsdWU7Ci0gIEdQQlVua25vd25GaWVsZFNldCAq
cmVzdWx0ID0gY29udGV4dDsKLQotICBHUEJVbmtub3duRmllbGQgKmNvcGllZCA9IFtmaWVsZCBj
b3B5XTsKLSAgW3Jlc3VsdCBhZGRGaWVsZDpjb3BpZWRdOwotICBbY29waWVkIHJlbGVhc2VdOwot
fQotCi0tIChpZCljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUgewotICBHUEJVbmtub3duRmll
bGRTZXQgKnJlc3VsdCA9IFtbR1BCVW5rbm93bkZpZWxkU2V0IGFsbG9jV2l0aFpvbmU6em9uZV0g
aW5pdF07Ci0gIGlmIChmaWVsZHNfKSB7Ci0gICAgQ0ZEaWN0aW9uYXJ5QXBwbHlGdW5jdGlvbihm
aWVsZHNfLCBDb3B5V29ya2VyLCByZXN1bHQpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYyB7Ci0gIGlmIChmaWVsZHNfKSB7Ci0gICAgQ0ZSZWxlYXNlKGZpZWxk
c18pOwotICB9Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoQk9PTClpc0VxdWFsOihpZClv
YmplY3QgewotICBCT09MIGVxdWFsID0gTk87Ci0gIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6
W0dQQlVua25vd25GaWVsZFNldCBjbGFzc11dKSB7Ci0gICAgR1BCVW5rbm93bkZpZWxkU2V0ICpz
ZXQgPSAoR1BCVW5rbm93bkZpZWxkU2V0ICopb2JqZWN0OwotICAgIGlmICgoZmllbGRzXyA9PSBO
VUxMKSAmJiAoc2V0LT5maWVsZHNfID09IE5VTEwpKSB7Ci0gICAgICBlcXVhbCA9IFlFUzsKLSAg
ICB9IGVsc2UgaWYgKChmaWVsZHNfICE9IE5VTEwpICYmIChzZXQtPmZpZWxkc18gIT0gTlVMTCkp
IHsKLSAgICAgIGVxdWFsID0gQ0ZFcXVhbChmaWVsZHNfLCBzZXQtPmZpZWxkc18pOwotICAgIH0K
LSAgfQotICByZXR1cm4gZXF1YWw7Ci19Ci0KLS0gKE5TVUludGVnZXIpaGFzaCB7Ci0gIC8vIFJl
dHVybiB0aGUgaGFzaCBvZiB0aGUgZmllbGRzIGRpY3Rpb25hcnkgKG9yIGp1c3Qgc29tZSB2YWx1
ZSkuCi0gIGlmIChmaWVsZHNfKSB7Ci0gICAgcmV0dXJuIENGSGFzaChmaWVsZHNfKTsKLSAgfQot
ICByZXR1cm4gKE5TVUludGVnZXIpW0dQQlVua25vd25GaWVsZFNldCBjbGFzc107Ci19Ci0KLSNw
cmFnbWEgbWFyayAtIFB1YmxpYyBNZXRob2RzCi0KLS0gKEJPT0wpaGFzRmllbGQ6KGludDMyX3Qp
bnVtYmVyIHsKLSAgc3NpemVfdCBrZXkgPSBudW1iZXI7Ci0gIHJldHVybiBmaWVsZHNfID8gKENG
RGljdGlvbmFyeUdldFZhbHVlKGZpZWxkc18sICh2b2lkICopa2V5KSAhPSBuaWwpIDogTk87Ci19
Ci0KLS0gKEdQQlVua25vd25GaWVsZCAqKWdldEZpZWxkOihpbnQzMl90KW51bWJlciB7Ci0gIHNz
aXplX3Qga2V5ID0gbnVtYmVyOwotICBHUEJVbmtub3duRmllbGQgKnJlc3VsdCA9Ci0gICAgICBm
aWVsZHNfID8gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmllbGRzXywgKHZvaWQgKilrZXkpIDogbmls
OwotICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChOU1VJbnRlZ2VyKWNvdW50T2ZGaWVsZHMgewot
ICByZXR1cm4gZmllbGRzXyA/IENGRGljdGlvbmFyeUdldENvdW50KGZpZWxkc18pIDogMDsKLX0K
LQotLSAoTlNBcnJheSAqKXNvcnRlZEZpZWxkcyB7Ci0gIGlmICghZmllbGRzXykgcmV0dXJuIG5p
bDsKLSAgc2l6ZV90IGNvdW50ID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQoZmllbGRzXyk7Ci0gIHNz
aXplX3Qga2V5c1tjb3VudF07Ci0gIEdQQlVua25vd25GaWVsZCAqdmFsdWVzW2NvdW50XTsKLSAg
Q0ZEaWN0aW9uYXJ5R2V0S2V5c0FuZFZhbHVlcyhmaWVsZHNfLCAoY29uc3Qgdm9pZCAqKilrZXlz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICoqKXZhbHVlcyk7
Ci0gIHN0cnVjdCBHUEJGaWVsZFBhaXIgewotICAgIHNzaXplX3Qga2V5OwotICAgIEdQQlVua25v
d25GaWVsZCAqdmFsdWU7Ci0gIH0gcGFpcnNbY291bnRdOwotICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICBwYWlyc1tpXS5rZXkgPSBrZXlzW2ldOwotICAgIHBhaXJz
W2ldLnZhbHVlID0gdmFsdWVzW2ldOwotICB9OwotICBxc29ydF9iKHBhaXJzLCBjb3VudCwgc2l6
ZW9mKHN0cnVjdCBHUEJGaWVsZFBhaXIpLAotICAgICAgICAgIF4oY29uc3Qgdm9pZCAqZmlyc3Qs
IGNvbnN0IHZvaWQgKnNlY29uZCkgewotICAgICAgICAgICAgY29uc3Qgc3RydWN0IEdQQkZpZWxk
UGFpciAqYSA9IGZpcnN0OwotICAgICAgICAgICAgY29uc3Qgc3RydWN0IEdQQkZpZWxkUGFpciAq
YiA9IHNlY29uZDsKLSAgICAgICAgICAgIHJldHVybiAoYS0+a2V5ID4gYi0+a2V5KSA/IDEgOiAo
KGEtPmtleSA9PSBiLT5rZXkpID8gMCA6IC0xKTsKLSAgICAgICAgICB9KTsKLSAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgdmFsdWVzW2ldID0gcGFpcnNbaV0udmFs
dWU7Ci0gIH07Ci0gIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOnZhbHVlcyBjb3Vu
dDpjb3VudF07Ci19Ci0KLSNwcmFnbWEgbWFyayAtIEludGVybmFsIE1ldGhvZHMKLQotLSAodm9p
ZCl3cml0ZVRvQ29kZWRPdXRwdXRTdHJlYW06KEdQQkNvZGVkT3V0cHV0U3RyZWFtICopb3V0cHV0
IHsKLSAgaWYgKCFmaWVsZHNfKSByZXR1cm47Ci0gIHNpemVfdCBjb3VudCA9IENGRGljdGlvbmFy
eUdldENvdW50KGZpZWxkc18pOwotICBzc2l6ZV90IGtleXNbY291bnRdOwotICBHUEJVbmtub3du
RmllbGQgKnZhbHVlc1tjb3VudF07Ci0gIENGRGljdGlvbmFyeUdldEtleXNBbmRWYWx1ZXMoZmll
bGRzXywgKGNvbnN0IHZvaWQgKiopa2V5cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY29uc3Qgdm9pZCAqKil2YWx1ZXMpOwotICBpZiAoY291bnQgPiAxKSB7Ci0gICAgc3RydWN0
IEdQQkZpZWxkUGFpciB7Ci0gICAgICBzc2l6ZV90IGtleTsKLSAgICAgIEdQQlVua25vd25GaWVs
ZCAqdmFsdWU7Ci0gICAgfSBwYWlyc1tjb3VudF07Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgIHBhaXJzW2ldLmtleSA9IGtleXNbaV07Ci0gICAgICBw
YWlyc1tpXS52YWx1ZSA9IHZhbHVlc1tpXTsKLSAgICB9OwotICAgIHFzb3J0X2IocGFpcnMsIGNv
dW50LCBzaXplb2Yoc3RydWN0IEdQQkZpZWxkUGFpciksCi0gICAgICAgICAgICBeKGNvbnN0IHZv
aWQgKmZpcnN0LCBjb25zdCB2b2lkICpzZWNvbmQpIHsKLSAgICAgICAgICAgICAgY29uc3Qgc3Ry
dWN0IEdQQkZpZWxkUGFpciAqYSA9IGZpcnN0OwotICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg
R1BCRmllbGRQYWlyICpiID0gc2Vjb25kOwotICAgICAgICAgICAgICByZXR1cm4gKGEtPmtleSA+
IGItPmtleSkgPyAxIDogKChhLT5rZXkgPT0gYi0+a2V5KSA/IDAgOiAtMSk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgIEdQ
QlVua25vd25GaWVsZCAqdmFsdWUgPSBwYWlyc1tpXS52YWx1ZTsKLSAgICAgIFt2YWx1ZSB3cml0
ZVRvT3V0cHV0Om91dHB1dF07Ci0gICAgfQotICB9IGVsc2UgewotICAgIFt2YWx1ZXNbMF0gd3Jp
dGVUb091dHB1dDpvdXRwdXRdOwotICB9Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24g
ewotICBOU011dGFibGVTdHJpbmcgKmRlc2NyaXB0aW9uID0gW05TTXV0YWJsZVN0cmluZwotICAg
ICAgc3RyaW5nV2l0aEZvcm1hdDpAIjwlQCAlcD46IFRleHRGb3JtYXQ6IHtcbiIsIFtzZWxmIGNs
YXNzXSwgc2VsZl07Ci0gIE5TU3RyaW5nICp0ZXh0Rm9ybWF0ID0gR1BCVGV4dEZvcm1hdEZvclVu
a25vd25GaWVsZFNldChzZWxmLCBAIiAgIik7Ci0gIFtkZXNjcmlwdGlvbiBhcHBlbmRTdHJpbmc6
dGV4dEZvcm1hdF07Ci0gIFtkZXNjcmlwdGlvbiBhcHBlbmRTdHJpbmc6QCJ9Il07Ci0gIHJldHVy
biBkZXNjcmlwdGlvbjsKLX0KLQotc3RhdGljIHZvaWQgR1BCVW5rbm93bkZpZWxkU2V0U2VyaWFs
aXplZFNpemUoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICp2YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbnRleHQpIHsKLSNwcmFn
bWEgdW51c2VkKGtleSkKLSAgR1BCVW5rbm93bkZpZWxkICpmaWVsZCA9IHZhbHVlOwotICBzaXpl
X3QgKnJlc3VsdCA9IGNvbnRleHQ7Ci0gICpyZXN1bHQgKz0gW2ZpZWxkIHNlcmlhbGl6ZWRTaXpl
XTsKLX0KLQotLSAoc2l6ZV90KXNlcmlhbGl6ZWRTaXplIHsKLSAgc2l6ZV90IHJlc3VsdCA9IDA7
Ci0gIGlmIChmaWVsZHNfKSB7Ci0gICAgQ0ZEaWN0aW9uYXJ5QXBwbHlGdW5jdGlvbihmaWVsZHNf
LCBHUEJVbmtub3duRmllbGRTZXRTZXJpYWxpemVkU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZyZXN1bHQpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2
b2lkIEdQQlVua25vd25GaWVsZFNldFdyaXRlQXNNZXNzYWdlU2V0VG8oY29uc3Qgdm9pZCAqa2V5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqY29udGV4dCkgewotI3ByYWdtYSB1bnVzZWQoa2V5KQotICBHUEJVbmtu
b3duRmllbGQgKmZpZWxkID0gdmFsdWU7Ci0gIEdQQkNvZGVkT3V0cHV0U3RyZWFtICpvdXRwdXQg
PSBjb250ZXh0OwotICBbZmllbGQgd3JpdGVBc01lc3NhZ2VTZXRFeHRlbnNpb25Ub091dHB1dDpv
dXRwdXRdOwotfQotCi0tICh2b2lkKXdyaXRlQXNNZXNzYWdlU2V0VG86KEdQQkNvZGVkT3V0cHV0
U3RyZWFtICopb3V0cHV0IHsKLSAgaWYgKGZpZWxkc18pIHsKLSAgICBDRkRpY3Rpb25hcnlBcHBs
eUZ1bmN0aW9uKGZpZWxkc18sIEdQQlVua25vd25GaWVsZFNldFdyaXRlQXNNZXNzYWdlU2V0VG8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOwotICB9Ci19Ci0KLXN0YXRp
YyB2b2lkIEdQQlVua25vd25GaWVsZFNldFNlcmlhbGl6ZWRTaXplQXNNZXNzYWdlU2V0KGNvbnN0
IHZvaWQgKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29udGV4dCkgewotI3ByYWdt
YSB1bnVzZWQoa2V5KQotICBHUEJVbmtub3duRmllbGQgKmZpZWxkID0gdmFsdWU7Ci0gIHNpemVf
dCAqcmVzdWx0ID0gY29udGV4dDsKLSAgKnJlc3VsdCArPSBbZmllbGQgc2VyaWFsaXplZFNpemVB
c01lc3NhZ2VTZXRFeHRlbnNpb25dOwotfQotCi0tIChzaXplX3Qpc2VyaWFsaXplZFNpemVBc01l
c3NhZ2VTZXQgewotICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgaWYgKGZpZWxkc18pIHsKLSAgICBD
RkRpY3Rpb25hcnlBcHBseUZ1bmN0aW9uKAotICAgICAgICBmaWVsZHNfLCBHUEJVbmtub3duRmll
bGRTZXRTZXJpYWxpemVkU2l6ZUFzTWVzc2FnZVNldCwgJnJlc3VsdCk7Ci0gIH0KLSAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotLSAoTlNEYXRhICopZGF0YSB7Ci0gIE5TTXV0YWJsZURhdGEgKmRhdGEg
PSBbTlNNdXRhYmxlRGF0YSBkYXRhV2l0aExlbmd0aDpzZWxmLnNlcmlhbGl6ZWRTaXplXTsKLSAg
R1BCQ29kZWRPdXRwdXRTdHJlYW0gKm91dHB1dCA9Ci0gICAgICBbW0dQQkNvZGVkT3V0cHV0U3Ry
ZWFtIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YV07Ci0gIFtzZWxmIHdyaXRlVG9Db2RlZE91dHB1
dFN0cmVhbTpvdXRwdXRdOwotICBbb3V0cHV0IHJlbGVhc2VdOwotICByZXR1cm4gZGF0YTsKLX0K
LQotKyAoQk9PTClpc0ZpZWxkVGFnOihpbnQzMl90KXRhZyB7Ci0gIHJldHVybiBHUEJXaXJlRm9y
bWF0R2V0VGFnV2lyZVR5cGUodGFnKSAhPSBHUEJXaXJlRm9ybWF0RW5kR3JvdXA7Ci19Ci0KLS0g
KHZvaWQpYWRkRmllbGQ6KEdQQlVua25vd25GaWVsZCAqKWZpZWxkIHsKLSAgaW50MzJfdCBudW1i
ZXIgPSBbZmllbGQgbnVtYmVyXTsKLSAgY2hlY2tOdW1iZXIobnVtYmVyKTsKLSAgaWYgKCFmaWVs
ZHNfKSB7Ci0gICAgQ0ZEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzIGtleUNhbGxCYWNrcyA9IHsKLSAg
ICAgICAgLy8gU2VlIGRlc2NyaXB0aW9uIGFib3ZlIGZvciByZWFzb24gZm9yIHVzaW5nIGN1c3Rv
bSBkaWN0aW9uYXJ5LgotICAgICAgICAwLCBHUEJVbmtub3duRmllbGRTZXRLZXlSZXRhaW4sIEdQ
QlVua25vd25GaWVsZFNldEtleVJlbGVhc2UsCi0gICAgICAgIEdQQlVua25vd25GaWVsZFNldENv
cHlLZXlEZXNjcmlwdGlvbiwgR1BCVW5rbm93bkZpZWxkU2V0S2V5RXF1YWwsCi0gICAgICAgIEdQ
QlVua25vd25GaWVsZFNldEtleUhhc2gsCi0gICAgfTsKLSAgICBmaWVsZHNfID0gQ0ZEaWN0aW9u
YXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma2V5Q2FsbEJhY2tzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKTsKLSAgfQotICBzc2l6ZV90IGtleSA9IG51bWJlcjsKLSAgQ0ZEaWN0
aW9uYXJ5U2V0VmFsdWUoZmllbGRzXywgKGNvbnN0IHZvaWQgKilrZXksIGZpZWxkKTsKLX0KLQot
LSAoR1BCVW5rbm93bkZpZWxkICopbXV0YWJsZUZpZWxkRm9yTnVtYmVyOihpbnQzMl90KW51bWJl
ciBjcmVhdGU6KEJPT0wpY3JlYXRlIHsKLSAgc3NpemVfdCBrZXkgPSBudW1iZXI7Ci0gIEdQQlVu
a25vd25GaWVsZCAqZXhpc3RpbmcgPQotICAgICAgZmllbGRzXyA/IENGRGljdGlvbmFyeUdldFZh
bHVlKGZpZWxkc18sIChjb25zdCB2b2lkICopa2V5KSA6IG5pbDsKLSAgaWYgKCFleGlzdGluZyAm
JiBjcmVhdGUpIHsKLSAgICBleGlzdGluZyA9IFtbR1BCVW5rbm93bkZpZWxkIGFsbG9jXSBpbml0
V2l0aE51bWJlcjpudW1iZXJdOwotICAgIC8vIFRoaXMgcmV0YWlucyBleGlzdGluZy4KLSAgICBb
c2VsZiBhZGRGaWVsZDpleGlzdGluZ107Ci0gICAgW2V4aXN0aW5nIHJlbGVhc2VdOwotICB9Ci0g
IHJldHVybiBleGlzdGluZzsKLX0KLQotc3RhdGljIHZvaWQgR1BCVW5rbm93bkZpZWxkU2V0TWVy
Z2VVbmtub3duRmllbGRzKGNvbnN0IHZvaWQgKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb250ZXh0KSB7Ci0j
cHJhZ21hIHVudXNlZChrZXkpCi0gIEdQQlVua25vd25GaWVsZCAqZmllbGQgPSB2YWx1ZTsKLSAg
R1BCVW5rbm93bkZpZWxkU2V0ICpzZWxmID0gY29udGV4dDsKLQotICBpbnQzMl90IG51bWJlciA9
IFtmaWVsZCBudW1iZXJdOwotICBjaGVja051bWJlcihudW1iZXIpOwotICBHUEJVbmtub3duRmll
bGQgKm9sZEZpZWxkID0gW3NlbGYgbXV0YWJsZUZpZWxkRm9yTnVtYmVyOm51bWJlciBjcmVhdGU6
Tk9dOwotICBpZiAob2xkRmllbGQpIHsKLSAgICBbb2xkRmllbGQgbWVyZ2VGcm9tRmllbGQ6Zmll
bGRdOwotICB9IGVsc2UgewotICAgIC8vIE1lcmdlIG9ubHkgY29tZXMgZnJvbSBHUEJNZXNzYWdl
J3MgbWVyZ2VGcm9tOiwgc28gaXQgbWVhbnMgd2UgYXJlIG9uCi0gICAgLy8gbXV0YWJsZSBtZXNz
YWdlIGFuZCBhcmUgYW4gbXV0YWJsZSBpbnN0YW5jZSwgc28gbWFrZSBzdXJlIHdlIG5lZWQKLSAg
ICAvLyBtdXRhYmxlIGZpZWxkcy4KLSAgICBHUEJVbmtub3duRmllbGQgKmZpZWxkQ29weSA9IFtm
aWVsZCBjb3B5XTsKLSAgICBbc2VsZiBhZGRGaWVsZDpmaWVsZENvcHldOwotICAgIFtmaWVsZENv
cHkgcmVsZWFzZV07Ci0gIH0KLX0KLQotLSAodm9pZCltZXJnZVVua25vd25GaWVsZHM6KEdQQlVu
a25vd25GaWVsZFNldCAqKW90aGVyIHsKLSAgaWYgKG90aGVyICYmIG90aGVyLT5maWVsZHNfKSB7
Ci0gICAgQ0ZEaWN0aW9uYXJ5QXBwbHlGdW5jdGlvbihvdGhlci0+ZmllbGRzXywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdQQlVua25vd25GaWVsZFNldE1lcmdlVW5rbm93bkZpZWxk
cywgc2VsZik7Ci0gIH0KLX0KLQotLSAodm9pZCltZXJnZUZyb21EYXRhOihOU0RhdGEgKilkYXRh
IHsKLSAgR1BCQ29kZWRJbnB1dFN0cmVhbSAqaW5wdXQgPSBbW0dQQkNvZGVkSW5wdXRTdHJlYW0g
YWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhXTsKLSAgW3NlbGYgbWVyZ2VGcm9tQ29kZWRJbnB1dFN0
cmVhbTppbnB1dF07Ci0gIFtpbnB1dCBjaGVja0xhc3RUYWdXYXM6MF07Ci0gIFtpbnB1dCByZWxl
YXNlXTsKLX0KLQotLSAodm9pZCltZXJnZVZhcmludEZpZWxkOihpbnQzMl90KW51bWJlciB2YWx1
ZTooaW50MzJfdCl2YWx1ZSB7Ci0gIGNoZWNrTnVtYmVyKG51bWJlcik7Ci0gIFtbc2VsZiBtdXRh
YmxlRmllbGRGb3JOdW1iZXI6bnVtYmVyIGNyZWF0ZTpZRVNdIGFkZFZhcmludDp2YWx1ZV07Ci19
Ci0KLS0gKEJPT0wpbWVyZ2VGaWVsZEZyb206KGludDMyX3QpdGFnIGlucHV0OihHUEJDb2RlZElu
cHV0U3RyZWFtICopaW5wdXQgewotICBpbnQzMl90IG51bWJlciA9IEdQQldpcmVGb3JtYXRHZXRU
YWdGaWVsZE51bWJlcih0YWcpOwotICBHUEJDb2RlZElucHV0U3RyZWFtU3RhdGUgKnN0YXRlID0g
JmlucHV0LT5zdGF0ZV87Ci0gIHN3aXRjaCAoR1BCV2lyZUZvcm1hdEdldFRhZ1dpcmVUeXBlKHRh
ZykpIHsKLSAgICBjYXNlIEdQQldpcmVGb3JtYXRWYXJpbnQ6IHsKLSAgICAgIEdQQlVua25vd25G
aWVsZCAqZmllbGQgPSBbc2VsZiBtdXRhYmxlRmllbGRGb3JOdW1iZXI6bnVtYmVyIGNyZWF0ZTpZ
RVNdOwotICAgICAgW2ZpZWxkIGFkZFZhcmludDpHUEJDb2RlZElucHV0U3RyZWFtUmVhZEludDY0
KHN0YXRlKV07Ci0gICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICBjYXNlIEdQQldpcmVGb3Jt
YXRGaXhlZDY0OiB7Ci0gICAgICBHUEJVbmtub3duRmllbGQgKmZpZWxkID0gW3NlbGYgbXV0YWJs
ZUZpZWxkRm9yTnVtYmVyOm51bWJlciBjcmVhdGU6WUVTXTsKLSAgICAgIFtmaWVsZCBhZGRGaXhl
ZDY0OkdQQkNvZGVkSW5wdXRTdHJlYW1SZWFkRml4ZWQ2NChzdGF0ZSldOwotICAgICAgcmV0dXJu
IFlFUzsKLSAgICB9Ci0gICAgY2FzZSBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkOiB7Ci0g
ICAgICBOU0RhdGEgKmRhdGEgPSBHUEJDb2RlZElucHV0U3RyZWFtUmVhZFJldGFpbmVkQnl0ZXMo
c3RhdGUpOwotICAgICAgR1BCVW5rbm93bkZpZWxkICpmaWVsZCA9IFtzZWxmIG11dGFibGVGaWVs
ZEZvck51bWJlcjpudW1iZXIgY3JlYXRlOllFU107Ci0gICAgICBbZmllbGQgYWRkTGVuZ3RoRGVs
aW1pdGVkOmRhdGFdOwotICAgICAgW2RhdGEgcmVsZWFzZV07Ci0gICAgICByZXR1cm4gWUVTOwot
ICAgIH0KLSAgICBjYXNlIEdQQldpcmVGb3JtYXRTdGFydEdyb3VwOiB7Ci0gICAgICBHUEJVbmtu
b3duRmllbGRTZXQgKnVua25vd25GaWVsZFNldCA9IFtbR1BCVW5rbm93bkZpZWxkU2V0IGFsbG9j
XSBpbml0XTsKLSAgICAgIFtpbnB1dCByZWFkVW5rbm93bkdyb3VwOm51bWJlciBtZXNzYWdlOnVu
a25vd25GaWVsZFNldF07Ci0gICAgICBHUEJVbmtub3duRmllbGQgKmZpZWxkID0gW3NlbGYgbXV0
YWJsZUZpZWxkRm9yTnVtYmVyOm51bWJlciBjcmVhdGU6WUVTXTsKLSAgICAgIFtmaWVsZCBhZGRH
cm91cDp1bmtub3duRmllbGRTZXRdOwotICAgICAgW3Vua25vd25GaWVsZFNldCByZWxlYXNlXTsK
LSAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIGNhc2UgR1BCV2lyZUZvcm1hdEVuZEdyb3Vw
OgotICAgICAgcmV0dXJuIE5POwotICAgIGNhc2UgR1BCV2lyZUZvcm1hdEZpeGVkMzI6IHsKLSAg
ICAgIEdQQlVua25vd25GaWVsZCAqZmllbGQgPSBbc2VsZiBtdXRhYmxlRmllbGRGb3JOdW1iZXI6
bnVtYmVyIGNyZWF0ZTpZRVNdOwotICAgICAgW2ZpZWxkIGFkZEZpeGVkMzI6R1BCQ29kZWRJbnB1
dFN0cmVhbVJlYWRGaXhlZDMyKHN0YXRlKV07Ci0gICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAg
fQotfQotCi0tICh2b2lkKW1lcmdlTWVzc2FnZVNldE1lc3NhZ2U6KGludDMyX3QpbnVtYmVyIGRh
dGE6KE5TRGF0YSAqKW1lc3NhZ2VEYXRhIHsKLSAgW1tzZWxmIG11dGFibGVGaWVsZEZvck51bWJl
cjpudW1iZXIgY3JlYXRlOllFU10KLSAgICAgIGFkZExlbmd0aERlbGltaXRlZDptZXNzYWdlRGF0
YV07Ci19Ci0KLS0gKHZvaWQpYWRkVW5rbm93bk1hcEVudHJ5OihpbnQzMl90KWZpZWxkTnVtIHZh
bHVlOihOU0RhdGEgKilkYXRhIHsKLSAgR1BCVW5rbm93bkZpZWxkICpmaWVsZCA9IFtzZWxmIG11
dGFibGVGaWVsZEZvck51bWJlcjpmaWVsZE51bSBjcmVhdGU6WUVTXTsKLSAgW2ZpZWxkIGFkZExl
bmd0aERlbGltaXRlZDpkYXRhXTsKLX0KLQotLSAodm9pZCltZXJnZUZyb21Db2RlZElucHV0U3Ry
ZWFtOihHUEJDb2RlZElucHV0U3RyZWFtICopaW5wdXQgewotICB3aGlsZSAoWUVTKSB7Ci0gICAg
aW50MzJfdCB0YWcgPSBHUEJDb2RlZElucHV0U3RyZWFtUmVhZFRhZygmaW5wdXQtPnN0YXRlXyk7
Ci0gICAgaWYgKHRhZyA9PSAwIHx8ICFbc2VsZiBtZXJnZUZpZWxkRnJvbTp0YWcgaW5wdXQ6aW5w
dXRdKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotLSAodm9pZClnZXRUYWdzOihp
bnQzMl90ICopdGFncyB7Ci0gIGlmICghZmllbGRzXykgcmV0dXJuOwotICBzaXplX3QgY291bnQg
PSBDRkRpY3Rpb25hcnlHZXRDb3VudChmaWVsZHNfKTsKLSAgc3NpemVfdCBrZXlzW2NvdW50XTsK
LSAgQ0ZEaWN0aW9uYXJ5R2V0S2V5c0FuZFZhbHVlcyhmaWVsZHNfLCAoY29uc3Qgdm9pZCAqKilr
ZXlzLCBOVUxMKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
dGFnc1tpXSA9IChpbnQzMl90KWtleXNbaV07Ci0gIH0KLX0KLQotQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9v
YmplY3RpdmVjL0dQQlVua25vd25GaWVsZFNldF9QYWNrYWdlUHJpdmF0ZS5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVj
L0dQQlVua25vd25GaWVsZFNldF9QYWNrYWdlUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlMjcxMjdhZDFkMWU0MGM4YmJjOWE2OTJmNDM0ZDgwN2M5YjNmMmU3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJV
bmtub3duRmllbGRTZXRfUGFja2FnZVByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCAiR1BCVW5rbm93bkZpZWxkU2V0LmgiCi0K
LUBjbGFzcyBHUEJDb2RlZE91dHB1dFN0cmVhbTsKLUBjbGFzcyBHUEJDb2RlZElucHV0U3RyZWFt
OwotCi1AaW50ZXJmYWNlIEdQQlVua25vd25GaWVsZFNldCAoKQotCi0rIChCT09MKWlzRmllbGRU
YWc6KGludDMyX3QpdGFnOwotCi0tIChOU0RhdGEgKilkYXRhOwotCi0tIChzaXplX3Qpc2VyaWFs
aXplZFNpemU7Ci0tIChzaXplX3Qpc2VyaWFsaXplZFNpemVBc01lc3NhZ2VTZXQ7Ci0KLS0gKHZv
aWQpd3JpdGVUb0NvZGVkT3V0cHV0U3RyZWFtOihHUEJDb2RlZE91dHB1dFN0cmVhbSAqKW91dHB1
dDsKLS0gKHZvaWQpd3JpdGVBc01lc3NhZ2VTZXRUbzooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilv
dXRwdXQ7Ci0KLS0gKHZvaWQpbWVyZ2VVbmtub3duRmllbGRzOihHUEJVbmtub3duRmllbGRTZXQg
KilvdGhlcjsKLQotLSAodm9pZCltZXJnZUZyb21Db2RlZElucHV0U3RyZWFtOihHUEJDb2RlZElu
cHV0U3RyZWFtICopaW5wdXQ7Ci0tICh2b2lkKW1lcmdlRnJvbURhdGE6KE5TRGF0YSAqKWRhdGE7
Ci0KLS0gKHZvaWQpbWVyZ2VWYXJpbnRGaWVsZDooaW50MzJfdCludW1iZXIgdmFsdWU6KGludDMy
X3QpdmFsdWU7Ci0tIChCT09MKW1lcmdlRmllbGRGcm9tOihpbnQzMl90KXRhZyBpbnB1dDooR1BC
Q29kZWRJbnB1dFN0cmVhbSAqKWlucHV0OwotLSAodm9pZCltZXJnZU1lc3NhZ2VTZXRNZXNzYWdl
OihpbnQzMl90KW51bWJlciBkYXRhOihOU0RhdGEgKiltZXNzYWdlRGF0YTsKLQotLSAodm9pZClh
ZGRVbmtub3duTWFwRW50cnk6KGludDMyX3QpZmllbGROdW0gdmFsdWU6KE5TRGF0YSAqKWRhdGE7
Ci0KLUBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJVbmtub3duRmllbGRfUGFja2FnZVBy
aXZhdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvb2JqZWN0aXZlYy9HUEJVbmtub3duRmllbGRfUGFja2FnZVByaXZhdGUuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiY2UwZjk1NDlkYzIxOWMwZjEzNGZjMWFiNGQ2
NjJiY2FiOGY3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L29iamVjdGl2ZWMvR1BCVW5rbm93bkZpZWxkX1BhY2thZ2VQcml2YXRlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wt
YnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgIkdQQlVua25vd25G
aWVsZC5oIgotCi1AY2xhc3MgR1BCQ29kZWRPdXRwdXRTdHJlYW07Ci0KLUBpbnRlcmZhY2UgR1BC
VW5rbm93bkZpZWxkICgpCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE51bWJlcjooaW50MzJf
dCludW1iZXI7Ci0KLS0gKHZvaWQpd3JpdGVUb091dHB1dDooR1BCQ29kZWRPdXRwdXRTdHJlYW0g
KilvdXRwdXQ7Ci0tIChzaXplX3Qpc2VyaWFsaXplZFNpemU7Ci0KLS0gKHZvaWQpd3JpdGVBc01l
c3NhZ2VTZXRFeHRlbnNpb25Ub091dHB1dDooR1BCQ29kZWRPdXRwdXRTdHJlYW0gKilvdXRwdXQ7
Ci0tIChzaXplX3Qpc2VyaWFsaXplZFNpemVBc01lc3NhZ2VTZXRFeHRlbnNpb247Ci0KLS0gKHZv
aWQpbWVyZ2VGcm9tRmllbGQ6KEdQQlVua25vd25GaWVsZCAqKW90aGVyOwotCi1AZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL29iamVjdGl2ZWMvR1BCVXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCVXRpbGl0aWVz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MjA5MzI0M2FiOTc0NzZkMzA0NWU0
Y2JjMWM1NjA3MTUzZDBlMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9vYmplY3RpdmVjL0dQQlV0aWxpdGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU3
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCAiR1BCQXJyYXkuaCIKLSNpbXBvcnQg
IkdQQk1lc3NhZ2UuaCIKLSNpbXBvcnQgIkdQQlJ1bnRpbWVUeXBlcy5oIgotCi1DRl9FWFRFUk5f
Q19CRUdJTgotCi1OU19BU1NVTUVfTk9OTlVMTF9CRUdJTgotCi0vLy8gR2VuZXJhdGVzIGEgc3Ry
aW5nIHRoYXQgc2hvdWxkIGJlIGEgdmFsaWQgIlRleHQgRm9ybWF0IiBmb3IgdGhlIEMrKyB2ZXJz
aW9uCi0vLy8gb2YgUHJvdG9jb2wgQnVmZmVycy4KLS8vLwotLy8vICBAcGFyYW0gbWVzc2FnZSAg
ICBUaGUgbWVzc2FnZSB0byBnZW5lcmF0ZSBmcm9tLgotLy8vICBAcGFyYW0gbGluZUluZGVudCBB
IHN0cmluZyB0byB1c2UgYXMgdGhlIHByZWZpeCBmb3IgYWxsIGxpbmVzIGdlbmVyYXRlZC4gQ2Fu
Ci0vLy8gICAgICAgICAgICAgICAgICAgIGJlIG5pbCBpZiBubyBleHRyYSBpbmRlbnQgaXMgbmVl
ZGVkLgotLy8vCi0vLy8gQHJldHVybiBBIEBjIE5TU3RyaW5nIHdpdGggdGhlIFRleHQgRm9ybWF0
IG9mIHRoZSBtZXNzYWdlLgotTlNTdHJpbmcgKkdQQlRleHRGb3JtYXRGb3JNZXNzYWdlKEdQQk1l
c3NhZ2UgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTdHJp
bmcgKiBfX251bGxhYmxlIGxpbmVJbmRlbnQpOwotCi0vLy8gR2VuZXJhdGVzIGEgc3RyaW5nIHRo
YXQgc2hvdWxkIGJlIGEgdmFsaWQgIlRleHQgRm9ybWF0IiBmb3IgdGhlIEMrKyB2ZXJzaW9uCi0v
Ly8gb2YgUHJvdG9jb2wgQnVmZmVycy4KLS8vLwotLy8vICBAcGFyYW0gdW5rbm93blNldCBUaGUg
dW5rbm93biBmaWVsZCBzZXQgdG8gZ2VuZXJhdGUgZnJvbS4KLS8vLyAgQHBhcmFtIGxpbmVJbmRl
bnQgQSBzdHJpbmcgdG8gdXNlIGFzIHRoZSBwcmVmaXggZm9yIGFsbCBsaW5lcyBnZW5lcmF0ZWQu
IENhbgotLy8vICAgICAgICAgICAgICAgICAgICBiZSBuaWwgaWYgbm8gZXh0cmEgaW5kZW50IGlz
IG5lZWRlZC4KLS8vLwotLy8vIEByZXR1cm4gQSBAYyBOU1N0cmluZyB3aXRoIHRoZSBUZXh0IEZv
cm1hdCBvZiB0aGUgdW5rbm93biBmaWVsZCBzZXQuCi1OU1N0cmluZyAqR1BCVGV4dEZvcm1hdEZv
clVua25vd25GaWVsZFNldChHUEJVbmtub3duRmllbGRTZXQgKiBfX251bGxhYmxlIHVua25vd25T
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAq
IF9fbnVsbGFibGUgbGluZUluZGVudCk7Ci0KLS8vLyBUZXN0IGlmIHRoZSBnaXZlbiBmaWVsZCBp
cyBzZXQgb24gYSBtZXNzYWdlLgotQk9PTCBHUEJNZXNzYWdlSGFzRmllbGROdW1iZXJTZXQoR1BC
TWVzc2FnZSAqc2VsZiwgdWludDMyX3QgZmllbGROdW1iZXIpOwotLy8vIFRlc3QgaWYgdGhlIGdp
dmVuIGZpZWxkIGlzIHNldCBvbiBhIG1lc3NhZ2UuCi1CT09MIEdQQk1lc3NhZ2VIYXNGaWVsZFNl
dChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKTsKLQotLy8vIENs
ZWFyIHRoZSBnaXZlbiBmaWVsZCBvZiBhIG1lc3NhZ2UuCi12b2lkIEdQQkNsZWFyTWVzc2FnZUZp
ZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQpOwotCi0vLyVQ
RERNLUVYUEFORCBHUEJfQUNDRVNTT1JTKCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5l
cmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0KLS8vCi0vLyBHZXQvU2V0IHRoZSBn
aXZlbiBmaWVsZCBvZiBhIG1lc3NhZ2UuCi0vLwotCi0vLyBTaW5nbGUgRmllbGRzCi0KLS8vLyBH
ZXRzIHRoZSB2YWx1ZSBvZiBhIGJ5dGVzIGZpZWxkLgotTlNEYXRhICpHUEJHZXRNZXNzYWdlQnl0
ZXNGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKTsKLS8v
LyBTZXRzIHRoZSB2YWx1ZSBvZiBhIGJ5dGVzIGZpZWxkLgotdm9pZCBHUEJTZXRNZXNzYWdlQnl0
ZXNGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLCBOU0Rh
dGEgKnZhbHVlKTsKLQotLy8vIEdldHMgdGhlIHZhbHVlIG9mIGEgc3RyaW5nIGZpZWxkLgotTlNT
dHJpbmcgKkdQQkdldE1lc3NhZ2VTdHJpbmdGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVs
ZERlc2NyaXB0b3IgKmZpZWxkKTsKLS8vLyBTZXRzIHRoZSB2YWx1ZSBvZiBhIHN0cmluZyBmaWVs
ZC4KLXZvaWQgR1BCU2V0TWVzc2FnZVN0cmluZ0ZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZp
ZWxkRGVzY3JpcHRvciAqZmllbGQsIE5TU3RyaW5nICp2YWx1ZSk7Ci0KLS8vLyBHZXRzIHRoZSB2
YWx1ZSBvZiBhIG1lc3NhZ2UgZmllbGQuCi1HUEJNZXNzYWdlICpHUEJHZXRNZXNzYWdlTWVzc2Fn
ZUZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQpOwotLy8v
IFNldHMgdGhlIHZhbHVlIG9mIGEgbWVzc2FnZSBmaWVsZC4KLXZvaWQgR1BCU2V0TWVzc2FnZU1l
c3NhZ2VGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLCBH
UEJNZXNzYWdlICp2YWx1ZSk7Ci0KLS8vLyBHZXRzIHRoZSB2YWx1ZSBvZiBhIGdyb3VwIGZpZWxk
LgotR1BCTWVzc2FnZSAqR1BCR2V0TWVzc2FnZUdyb3VwRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwg
R1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCk7Ci0vLy8gU2V0cyB0aGUgdmFsdWUgb2YgYSBncm91
cCBmaWVsZC4KLXZvaWQgR1BCU2V0TWVzc2FnZUdyb3VwRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwg
R1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwgR1BCTWVzc2FnZSAqdmFsdWUpOwotCi0vLy8gR2V0
cyB0aGUgdmFsdWUgb2YgYSBib29sIGZpZWxkLgotQk9PTCBHUEJHZXRNZXNzYWdlQm9vbEZpZWxk
KEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQpOwotLy8vIFNldHMg
dGhlIHZhbHVlIG9mIGEgYm9vbCBmaWVsZC4KLXZvaWQgR1BCU2V0TWVzc2FnZUJvb2xGaWVsZChH
UEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLCBCT09MIHZhbHVlKTsK
LQotLy8vIEdldHMgdGhlIHZhbHVlIG9mIGFuIGludDMyIGZpZWxkLgotaW50MzJfdCBHUEJHZXRN
ZXNzYWdlSW50MzJGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZp
ZWxkKTsKLS8vLyBTZXRzIHRoZSB2YWx1ZSBvZiBhbiBpbnQzMiBmaWVsZC4KLXZvaWQgR1BCU2V0
TWVzc2FnZUludDMyRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpm
aWVsZCwgaW50MzJfdCB2YWx1ZSk7Ci0KLS8vLyBHZXRzIHRoZSB2YWx1ZSBvZiBhbiB1aW50MzIg
ZmllbGQuCi11aW50MzJfdCBHUEJHZXRNZXNzYWdlVUludDMyRmllbGQoR1BCTWVzc2FnZSAqc2Vs
ZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCk7Ci0vLy8gU2V0cyB0aGUgdmFsdWUgb2YgYW4g
dWludDMyIGZpZWxkLgotdm9pZCBHUEJTZXRNZXNzYWdlVUludDMyRmllbGQoR1BCTWVzc2FnZSAq
c2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwgdWludDMyX3QgdmFsdWUpOwotCi0vLy8g
R2V0cyB0aGUgdmFsdWUgb2YgYW4gaW50NjQgZmllbGQuCi1pbnQ2NF90IEdQQkdldE1lc3NhZ2VJ
bnQ2NEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQpOwot
Ly8vIFNldHMgdGhlIHZhbHVlIG9mIGFuIGludDY0IGZpZWxkLgotdm9pZCBHUEJTZXRNZXNzYWdl
SW50NjRGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLCBp
bnQ2NF90IHZhbHVlKTsKLQotLy8vIEdldHMgdGhlIHZhbHVlIG9mIGFuIHVpbnQ2NCBmaWVsZC4K
LXVpbnQ2NF90IEdQQkdldE1lc3NhZ2VVSW50NjRGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJG
aWVsZERlc2NyaXB0b3IgKmZpZWxkKTsKLS8vLyBTZXRzIHRoZSB2YWx1ZSBvZiBhbiB1aW50NjQg
ZmllbGQuCi12b2lkIEdQQlNldE1lc3NhZ2VVSW50NjRGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBH
UEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLCB1aW50NjRfdCB2YWx1ZSk7Ci0KLS8vLyBHZXRzIHRo
ZSB2YWx1ZSBvZiBhIGZsb2F0IGZpZWxkLgotZmxvYXQgR1BCR2V0TWVzc2FnZUZsb2F0RmllbGQo
R1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCk7Ci0vLy8gU2V0cyB0
aGUgdmFsdWUgb2YgYSBmbG9hdCBmaWVsZC4KLXZvaWQgR1BCU2V0TWVzc2FnZUZsb2F0RmllbGQo
R1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwgZmxvYXQgdmFsdWUp
OwotCi0vLy8gR2V0cyB0aGUgdmFsdWUgb2YgYSBkb3VibGUgZmllbGQuCi1kb3VibGUgR1BCR2V0
TWVzc2FnZURvdWJsZUZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAq
ZmllbGQpOwotLy8vIFNldHMgdGhlIHZhbHVlIG9mIGEgZG91YmxlIGZpZWxkLgotdm9pZCBHUEJT
ZXRNZXNzYWdlRG91YmxlRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9y
ICpmaWVsZCwgZG91YmxlIHZhbHVlKTsKLQotLy8vIEdldCB0aGUgZ2l2ZW4gZW51bSBmaWVsZCBv
ZiBhIG1lc3NhZ2UuIEZvciBwcm90bzMsIGlmIHRoZSB2YWx1ZSBpc24ndCBhCi0vLy8gbWVtYmVy
IG9mIHRoZSBlbnVtLCBAYyBrR1BCVW5yZWNvZ25pemVkRW51bWVyYXRvclZhbHVlIHdpbGwgYmUg
cmV0dXJuZWQuCi0vLy8gR1BCR2V0TWVzc2FnZVJhd0VudW1GaWVsZCB3aWxsIGJ5cGFzcyB0aGUg
Y2hlY2sgYW5kIHJldHVybiB3aGF0ZXZlciB2YWx1ZQotLy8vIHdhcyBzZXQuCi1pbnQzMl90IEdQ
QkdldE1lc3NhZ2VFbnVtRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9y
ICpmaWVsZCk7Ci0vLy8gU2V0IHRoZSBnaXZlbiBlbnVtIGZpZWxkIG9mIGEgbWVzc2FnZS4gWW91
IGNhbiBvbmx5IHNldCB2YWx1ZXMgdGhhdCBhcmUKLS8vLyBtZW1iZXJzIG9mIHRoZSBlbnVtLgot
dm9pZCBHUEJTZXRNZXNzYWdlRW51bUZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVz
Y3JpcHRvciAqZmllbGQsIGludDMyX3QgdmFsdWUpOwotLy8vIEdldCB0aGUgZ2l2ZW4gZW51bSBm
aWVsZCBvZiBhIG1lc3NhZ2UuIE5vIGNoZWNrIGlzIGRvbmUgdG8gZW5zdXJlIHRoZSB2YWx1ZQot
Ly8vIHdhcyBkZWZpbmVkIGluIHRoZSBlbnVtLgotaW50MzJfdCBHUEJHZXRNZXNzYWdlUmF3RW51
bUZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQpOwotLy8v
IFNldCB0aGUgZ2l2ZW4gZW51bSBmaWVsZCBvZiBhIG1lc3NhZ2UuIFlvdSBjYW4gc2V0IHRoZSB2
YWx1ZSB0byBhbnl0aGluZywKLS8vLyBldmVuIGEgdmFsdWUgdGhhdCBpcyBub3QgYSBtZW1iZXIg
b2YgdGhlIGVudW0uCi12b2lkIEdQQlNldE1lc3NhZ2VSYXdFbnVtRmllbGQoR1BCTWVzc2FnZSAq
c2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwgaW50MzJfdCB2YWx1ZSk7Ci0KLS8vIFJl
cGVhdGVkIEZpZWxkcwotCi0vLy8gR2V0cyB0aGUgdmFsdWUgb2YgYSByZXBlYXRlZCBmaWVsZC4K
LS8vLwotLy8vIFRoZSByZXN1bHQgd2lsbCBiZSBAYyBHUEIqQXJyYXkgb3IgQGMgTlNNdXRhYmxl
QXJyYXkgYmFzZWQgb24gdGhlCi0vLy8gZmllbGQncyB0eXBlLgotaWQgR1BCR2V0TWVzc2FnZVJl
cGVhdGVkRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCk7
Ci0vLy8gU2V0cyB0aGUgdmFsdWUgb2YgYSByZXBlYXRlZCBmaWVsZC4KLS8vLwotLy8vIFRoZSB2
YWx1ZSBzaG91bGQgYmUgQGMgR1BCKkFycmF5IG9yIEBjIE5TTXV0YWJsZUFycmF5IGJhc2VkIG9u
IHRoZQotLy8vIGZpZWxkJ3MgdHlwZS4KLXZvaWQgR1BCU2V0TWVzc2FnZVJlcGVhdGVkRmllbGQo
R1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwgaWQgYXJyYXkpOwot
Ci0vLyBNYXAgRmllbGRzCi0KLS8vLyBHZXRzIHRoZSB2YWx1ZSBvZiBhIG1hcDw+IGZpZWxkLgot
Ly8vCi0vLy8gVGhlIHJlc3VsdCB3aWxsIGJlIEBjIEdQQipEaWN0aW9uYXJ5IG9yIEBjIE5TTXV0
YWJsZURpY3Rpb25hcnkgYmFzZWQgb24KLS8vLyB0aGUgZmllbGQncyB0eXBlLgotaWQgR1BCR2V0
TWVzc2FnZU1hcEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAqZmll
bGQpOwotLy8vIFNldHMgdGhlIHZhbHVlIG9mIGEgbWFwPD4gZmllbGQuCi0vLy8KLS8vLyBUaGUg
b2JqZWN0IHNob3VsZCBiZSBAYyBHUEIqRGljdGlvbmFyeSBvciBAYyBOU011dGFibGVEaWN0aW9u
YXJ5IGJhc2VkCi0vLy8gb24gdGhlIGZpZWxkJ3MgdHlwZS4KLXZvaWQgR1BCU2V0TWVzc2FnZU1h
cEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsIGlkIGRp
Y3Rpb25hcnkpOwotCi0vLyVQRERNLUVYUEFORC1FTkQgR1BCX0FDQ0VTU09SUygpCi0KLS8vIFJl
dHVybnMgYW4gZW1wdHkgTlNEYXRhIHRvIGFzc2lnbiB0byBieXRlIGZpZWxkcyB3aGVuIHlvdSB3
aXNoCi0vLyB0byBhc3NpZ24gdGhlbSB0byBlbXB0eS4gUHJldmVudHMgYWxsb2NhdGluZyBhIGxv
dCBvZiBsaXR0bGUgW05TRGF0YSBkYXRhXQotLy8gb2JqZWN0cy4KLU5TRGF0YSAqR1BCRW1wdHlO
U0RhdGEodm9pZCkgX19hdHRyaWJ1dGVfXygocHVyZSkpOwotCi1OU19BU1NVTUVfTk9OTlVMTF9F
TkQKLQotQ0ZfRVhURVJOX0NfRU5ECi0KLQotLy8lUERETS1ERUZJTkUgR1BCX0FDQ0VTU09SUygp
Ci0vLyUKLS8vJS8vCi0vLyUvLyBHZXQvU2V0IHRoZSBnaXZlbiBmaWVsZCBvZiBhIG1lc3NhZ2Uu
Ci0vLyUvLwotLy8lCi0vLyUvLyBTaW5nbGUgRmllbGRzCi0vLyUKLS8vJUdQQl9BQ0NFU1NPUl9T
SU5HTEVfRlVMTChCeXRlcywgTlNEYXRhLCAsICopCi0vLyVHUEJfQUNDRVNTT1JfU0lOR0xFX0ZV
TEwoU3RyaW5nLCBOU1N0cmluZywgLCAqKQotLy8lR1BCX0FDQ0VTU09SX1NJTkdMRV9GVUxMKE1l
c3NhZ2UsIEdQQk1lc3NhZ2UsICwgKikKLS8vJUdQQl9BQ0NFU1NPUl9TSU5HTEVfRlVMTChHcm91
cCwgR1BCTWVzc2FnZSwgLCAqKQotLy8lR1BCX0FDQ0VTU09SX1NJTkdMRShCb29sLCBCT09MLCAp
Ci0vLyVHUEJfQUNDRVNTT1JfU0lOR0xFKEludDMyLCBpbnQzMl90LCBuKQotLy8lR1BCX0FDQ0VT
U09SX1NJTkdMRShVSW50MzIsIHVpbnQzMl90LCBuKQotLy8lR1BCX0FDQ0VTU09SX1NJTkdMRShJ
bnQ2NCwgaW50NjRfdCwgbikKLS8vJUdQQl9BQ0NFU1NPUl9TSU5HTEUoVUludDY0LCB1aW50NjRf
dCwgbikKLS8vJUdQQl9BQ0NFU1NPUl9TSU5HTEUoRmxvYXQsIGZsb2F0LCApCi0vLyVHUEJfQUND
RVNTT1JfU0lOR0xFKERvdWJsZSwgZG91YmxlLCApCi0vLyUvLy8gR2V0IHRoZSBnaXZlbiBlbnVt
IGZpZWxkIG9mIGEgbWVzc2FnZS4gRm9yIHByb3RvMywgaWYgdGhlIHZhbHVlIGlzbid0IGEKLS8v
JS8vLyBtZW1iZXIgb2YgdGhlIGVudW0sIEBjIGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFs
dWUgd2lsbCBiZSByZXR1cm5lZC4KLS8vJS8vLyBHUEJHZXRNZXNzYWdlUmF3RW51bUZpZWxkIHdp
bGwgYnlwYXNzIHRoZSBjaGVjayBhbmQgcmV0dXJuIHdoYXRldmVyIHZhbHVlCi0vLyUvLy8gd2Fz
IHNldC4KLS8vJWludDMyX3QgR1BCR2V0TWVzc2FnZUVudW1GaWVsZChHUEJNZXNzYWdlICpzZWxm
LCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKTsKLS8vJS8vLyBTZXQgdGhlIGdpdmVuIGVudW0g
ZmllbGQgb2YgYSBtZXNzYWdlLiBZb3UgY2FuIG9ubHkgc2V0IHZhbHVlcyB0aGF0IGFyZQotLy8l
Ly8vIG1lbWJlcnMgb2YgdGhlIGVudW0uCi0vLyV2b2lkIEdQQlNldE1lc3NhZ2VFbnVtRmllbGQo
R1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwgaW50MzJfdCB2YWx1
ZSk7Ci0vLyUvLy8gR2V0IHRoZSBnaXZlbiBlbnVtIGZpZWxkIG9mIGEgbWVzc2FnZS4gTm8gY2hl
Y2sgaXMgZG9uZSB0byBlbnN1cmUgdGhlIHZhbHVlCi0vLyUvLy8gd2FzIGRlZmluZWQgaW4gdGhl
IGVudW0uCi0vLyVpbnQzMl90IEdQQkdldE1lc3NhZ2VSYXdFbnVtRmllbGQoR1BCTWVzc2FnZSAq
c2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCk7Ci0vLyUvLy8gU2V0IHRoZSBnaXZlbiBl
bnVtIGZpZWxkIG9mIGEgbWVzc2FnZS4gWW91IGNhbiBzZXQgdGhlIHZhbHVlIHRvIGFueXRoaW5n
LAotLy8lLy8vIGV2ZW4gYSB2YWx1ZSB0aGF0IGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgZW51bS4K
LS8vJXZvaWQgR1BCU2V0TWVzc2FnZVJhd0VudW1GaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJG
aWVsZERlc2NyaXB0b3IgKmZpZWxkLCBpbnQzMl90IHZhbHVlKTsKLS8vJQotLy8lLy8gUmVwZWF0
ZWQgRmllbGRzCi0vLyUKLS8vJS8vLyBHZXRzIHRoZSB2YWx1ZSBvZiBhIHJlcGVhdGVkIGZpZWxk
LgotLy8lLy8vCi0vLyUvLy8gVGhlIHJlc3VsdCB3aWxsIGJlIEBjIEdQQipBcnJheSBvciBAYyBO
U011dGFibGVBcnJheSBiYXNlZCBvbiB0aGUKLS8vJS8vLyBmaWVsZCdzIHR5cGUuCi0vLyVpZCBH
UEJHZXRNZXNzYWdlUmVwZWF0ZWRGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2Ny
aXB0b3IgKmZpZWxkKTsKLS8vJS8vLyBTZXRzIHRoZSB2YWx1ZSBvZiBhIHJlcGVhdGVkIGZpZWxk
LgotLy8lLy8vCi0vLyUvLy8gVGhlIHZhbHVlIHNob3VsZCBiZSBAYyBHUEIqQXJyYXkgb3IgQGMg
TlNNdXRhYmxlQXJyYXkgYmFzZWQgb24gdGhlCi0vLyUvLy8gZmllbGQncyB0eXBlLgotLy8ldm9p
ZCBHUEJTZXRNZXNzYWdlUmVwZWF0ZWRGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERl
c2NyaXB0b3IgKmZpZWxkLCBpZCBhcnJheSk7Ci0vLyUKLS8vJS8vIE1hcCBGaWVsZHMKLS8vJQot
Ly8lLy8vIEdldHMgdGhlIHZhbHVlIG9mIGEgbWFwPD4gZmllbGQuCi0vLyUvLy8KLS8vJS8vLyBU
aGUgcmVzdWx0IHdpbGwgYmUgQGMgR1BCKkRpY3Rpb25hcnkgb3IgQGMgTlNNdXRhYmxlRGljdGlv
bmFyeSBiYXNlZCBvbgotLy8lLy8vIHRoZSBmaWVsZCdzIHR5cGUuCi0vLyVpZCBHUEJHZXRNZXNz
YWdlTWFwRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCk7
Ci0vLyUvLy8gU2V0cyB0aGUgdmFsdWUgb2YgYSBtYXA8PiBmaWVsZC4KLS8vJS8vLwotLy8lLy8v
IFRoZSBvYmplY3Qgc2hvdWxkIGJlIEBjIEdQQipEaWN0aW9uYXJ5IG9yIEBjIE5TTXV0YWJsZURp
Y3Rpb25hcnkgYmFzZWQKLS8vJS8vLyBvbiB0aGUgZmllbGQncyB0eXBlLgotLy8ldm9pZCBHUEJT
ZXRNZXNzYWdlTWFwRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpm
aWVsZCwgaWQgZGljdGlvbmFyeSk7Ci0vLyUKLQotLy8lUERETS1ERUZJTkUgR1BCX0FDQ0VTU09S
X1NJTkdMRShOQU1FLCBUWVBFLCBBTikKLS8vJUdQQl9BQ0NFU1NPUl9TSU5HTEVfRlVMTChOQU1F
LCBUWVBFLCBBTiwgKQotLy8lUERETS1ERUZJTkUgR1BCX0FDQ0VTU09SX1NJTkdMRV9GVUxMKE5B
TUUsIFRZUEUsIEFOLCBUaXNQKQotLy8lLy8vIEdldHMgdGhlIHZhbHVlIG9mIGEjI0FOIE5BTUUk
TCBmaWVsZC4KLS8vJVRZUEUgVGlzUCMjR1BCR2V0TWVzc2FnZSMjTkFNRSMjRmllbGQoR1BCTWVz
c2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCk7Ci0vLyUvLy8gU2V0cyB0aGUg
dmFsdWUgb2YgYSMjQU4gTkFNRSRMIGZpZWxkLgotLy8ldm9pZCBHUEJTZXRNZXNzYWdlIyNOQU1F
IyNGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLCBUWVBF
IFRpc1AjI3ZhbHVlKTsKLS8vJQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlV0aWxpdGllcy5t
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9vYmplY3RpdmVjL0dQQlV0aWxpdGllcy5tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0NDdjNzQ5YWE3Njc3OTg3N2U2Zjc1NGE2OWYyNDhiYTQxNGNmMWRiLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJVdGlsaXRpZXMu
bQorKysgL2Rldi9udWxsCkBAIC0xLDE3MTcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSNpbXBvcnQgIkdQQlV0aWxpdGllc19QYWNrYWdlUHJpdmF0ZS5oIgot
Ci0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLQotI2ltcG9ydCAiR1BCQXJyYXlfUGFja2FnZVBy
aXZhdGUuaCIKLSNpbXBvcnQgIkdQQkRlc2NyaXB0b3JfUGFja2FnZVByaXZhdGUuaCIKLSNpbXBv
cnQgIkdQQkRpY3Rpb25hcnlfUGFja2FnZVByaXZhdGUuaCIKLSNpbXBvcnQgIkdQQk1lc3NhZ2Vf
UGFja2FnZVByaXZhdGUuaCIKLSNpbXBvcnQgIkdQQlVua25vd25GaWVsZC5oIgotI2ltcG9ydCAi
R1BCVW5rbm93bkZpZWxkU2V0LmgiCi0KLXN0YXRpYyB2b2lkIEFwcGVuZFRleHRGb3JtYXRGb3JN
ZXNzYWdlKEdQQk1lc3NhZ2UgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOU011dGFibGVTdHJpbmcgKnRvU3RyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmxpbmVJbmRlbnQpOwotCi1OU0RhdGEgKkdQQkVt
cHR5TlNEYXRhKHZvaWQpIHsKLSAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47Ci0g
IHN0YXRpYyBOU0RhdGEgKmRlZmF1bHROU0RhdGEgPSBuaWw7Ci0gIGRpc3BhdGNoX29uY2UoJm9u
Y2VUb2tlbiwgXnsKLSAgICBkZWZhdWx0TlNEYXRhID0gW1tOU0RhdGEgYWxsb2NdIGluaXRdOwot
ICB9KTsKLSAgcmV0dXJuIGRlZmF1bHROU0RhdGE7Ci19Ci0KLXZvaWQgR1BCQ2hlY2tSdW50aW1l
VmVyc2lvbkludGVybmFsKGludDMyX3QgdmVyc2lvbikgewotICBpZiAodmVyc2lvbiAhPSBHT09H
TEVfUFJPVE9CVUZfT0JKQ19HRU5fVkVSU0lPTikgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpO
U0ludGVybmFsSW5jb25zaXN0ZW5jeUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIGZvcm1hdDpA
IkxpbmtlZCB0byBQcm90b2NvbEJ1ZmZlciBydW50aW1lIHZlcnNpb24gJWQsIgotICAgICAgICAg
ICAgICAgICAgICAgICBAIiBidXQgY29kZSBjb21waWxlZCB3aXRoIHZlcnNpb24gJWQhIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgR09PR0xFX1BST1RPQlVGX09CSkNfR0VOX1ZFUlNJT04sIHZl
cnNpb25dOwotICB9Ci19Ci0KLUJPT0wgR1BCTWVzc2FnZUhhc0ZpZWxkTnVtYmVyU2V0KEdQQk1l
c3NhZ2UgKnNlbGYsIHVpbnQzMl90IGZpZWxkTnVtYmVyKSB7Ci0gIEdQQkRlc2NyaXB0b3IgKmRl
c2NyaXB0b3IgPSBbc2VsZiBkZXNjcmlwdG9yXTsKLSAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVs
ZCA9IFtkZXNjcmlwdG9yIGZpZWxkV2l0aE51bWJlcjpmaWVsZE51bWJlcl07Ci0gIHJldHVybiBH
UEJNZXNzYWdlSGFzRmllbGRTZXQoc2VsZiwgZmllbGQpOwotfQotCi1CT09MIEdQQk1lc3NhZ2VI
YXNGaWVsZFNldChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7
Ci0gIGlmIChzZWxmID09IG5pbCB8fCBmaWVsZCA9PSBuaWwpIHJldHVybiBOTzsKLQotICAvLyBS
ZXBlYXRlZC9NYXAgZG9uJ3QgdXNlIHRoZSBiaXQsIHRoZXkgY2hlY2sgdGhlIGNvdW50LgotICBp
ZiAoR1BCRmllbGRJc01hcE9yQXJyYXkoZmllbGQpKSB7Ci0gICAgLy8gQXJyYXkvbWFwIHR5cGUg
ZG9lc24ndCBtYXR0ZXIsIHNpbmNlIEdQQipBcnJheS9OU0FycmF5IGFuZAotICAgIC8vIEdQQipE
aWN0aW9uYXJ5L05TRGljdGlvbmFyeSBhbGwgc3VwcG9ydCAtY291bnQ7Ci0gICAgTlNBcnJheSAq
YXJyYXlPck1hcCA9IEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGROb0F1dG9jcmVhdGUoc2VsZiwg
ZmllbGQpOwotICAgIHJldHVybiAoYXJyYXlPck1hcC5jb3VudCA+IDApOwotICB9IGVsc2Ugewot
ICAgIHJldHVybiBHUEJHZXRIYXNJdmFyRmllbGQoc2VsZiwgZmllbGQpOwotICB9Ci19Ci0KLXZv
aWQgR1BCQ2xlYXJNZXNzYWdlRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlw
dG9yICpmaWVsZCkgewotICAvLyBJZiBub3Qgc2V0LCBub3RoaW5nIHRvIGRvLgotICBpZiAoIUdQ
QkdldEhhc0l2YXJGaWVsZChzZWxmLCBmaWVsZCkpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBp
ZiAoR1BCRmllbGRTdG9yZXNPYmplY3QoZmllbGQpKSB7Ci0gICAgLy8gT2JqZWN0IHR5cGVzIGFy
ZSBoYW5kbGVkIHNsaWdodGx5IGRpZmZlcmVudGx5LCB0aGV5IG5lZWQgdG8gYmUgcmVsZWFzZWQu
Ci0gICAgdWludDhfdCAqc3RvcmFnZSA9ICh1aW50OF90ICopc2VsZi0+bWVzc2FnZVN0b3JhZ2Vf
OwotICAgIGlkICp0eXBlUHRyID0gKGlkICopJnN0b3JhZ2VbZmllbGQtPmRlc2NyaXB0aW9uXy0+
b2Zmc2V0XTsKLSAgICBbKnR5cGVQdHIgcmVsZWFzZV07Ci0gICAgKnR5cGVQdHIgPSBuaWw7Ci0g
IH0gZWxzZSB7Ci0gICAgLy8gUE9EIHR5cGVzIGp1c3QgbmVlZCB0byBjbGVhciB0aGUgaGFzIGJp
dCBhcyB0aGUgR2V0KiBtZXRob2Qgd2lsbAotICAgIC8vIGZldGNoIHRoZSBkZWZhdWx0IHdoZW4g
bmVlZGVkLgotICB9Ci0gIEdQQlNldEhhc0l2YXJGaWVsZChzZWxmLCBmaWVsZCwgTk8pOwotfQot
Ci1CT09MIEdQQkdldEhhc0l2YXIoR1BCTWVzc2FnZSAqc2VsZiwgaW50MzJfdCBpZHgsIHVpbnQz
Ml90IGZpZWxkTnVtYmVyKSB7Ci0gIE5TQ0Fzc2VydChzZWxmLT5tZXNzYWdlU3RvcmFnZV8gIT0g
TlVMTCwKLSAgICAgICAgICAgIEAiJUA6IEFsbCBtZXNzYWdlcyBzaG91bGQgaGF2ZSBzdG9yYWdl
IChmcm9tIGluaXQpIiwKLSAgICAgICAgICAgIFtzZWxmIGNsYXNzXSk7Ci0gIGlmIChpZHggPCAw
KSB7Ci0gICAgTlNDQXNzZXJ0KGZpZWxkTnVtYmVyICE9IDAsIEAiSW52YWxpZCBmaWVsZCBudW1i
ZXIuIik7Ci0gICAgQk9PTCBoYXNJdmFyID0gKHNlbGYtPm1lc3NhZ2VTdG9yYWdlXy0+X2hhc19z
dG9yYWdlX1staWR4XSA9PSBmaWVsZE51bWJlcik7Ci0gICAgcmV0dXJuIGhhc0l2YXI7Ci0gIH0g
ZWxzZSB7Ci0gICAgTlNDQXNzZXJ0KGlkeCAhPSBHUEJOb0hhc0JpdCwgQCJJbnZhbGlkIGhhcyBi
aXQuIik7Ci0gICAgdWludDMyX3QgYnl0ZUluZGV4ID0gaWR4IC8gMzI7Ci0gICAgdWludDMyX3Qg
Yml0TWFzayA9ICgxIDw8IChpZHggJSAzMikpOwotICAgIEJPT0wgaGFzSXZhciA9Ci0gICAgICAg
IChzZWxmLT5tZXNzYWdlU3RvcmFnZV8tPl9oYXNfc3RvcmFnZV9bYnl0ZUluZGV4XSAmIGJpdE1h
c2spID8gWUVTIDogTk87Ci0gICAgcmV0dXJuIGhhc0l2YXI7Ci0gIH0KLX0KLQotdWludDMyX3Qg
R1BCR2V0SGFzT25lb2YoR1BCTWVzc2FnZSAqc2VsZiwgaW50MzJfdCBpZHgpIHsKLSAgTlNDQXNz
ZXJ0KGlkeCA8IDAsIEAiJUA6IGludmFsaWQgaW5kZXggKCVkKSBmb3Igb25lb2YuIiwKLSAgICAg
ICAgICAgIFtzZWxmIGNsYXNzXSwgaWR4KTsKLSAgdWludDMyX3QgcmVzdWx0ID0gc2VsZi0+bWVz
c2FnZVN0b3JhZ2VfLT5faGFzX3N0b3JhZ2VfWy1pZHhdOwotICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIEdQQlNldEhhc0l2YXIoR1BCTWVzc2FnZSAqc2VsZiwgaW50MzJfdCBpZHgsIHVpbnQz
Ml90IGZpZWxkTnVtYmVyLAotICAgICAgICAgICAgICAgICAgIEJPT0wgdmFsdWUpIHsKLSAgaWYg
KGlkeCA8IDApIHsKLSAgICBOU0NBc3NlcnQoZmllbGROdW1iZXIgIT0gMCwgQCJJbnZhbGlkIGZp
ZWxkIG51bWJlci4iKTsKLSAgICB1aW50MzJfdCAqaGFzX3N0b3JhZ2UgPSBzZWxmLT5tZXNzYWdl
U3RvcmFnZV8tPl9oYXNfc3RvcmFnZV87Ci0gICAgaGFzX3N0b3JhZ2VbLWlkeF0gPSAodmFsdWUg
PyBmaWVsZE51bWJlciA6IDApOwotICB9IGVsc2UgewotICAgIE5TQ0Fzc2VydChpZHggIT0gR1BC
Tm9IYXNCaXQsIEAiSW52YWxpZCBoYXMgYml0LiIpOwotICAgIHVpbnQzMl90ICpoYXNfc3RvcmFn
ZSA9IHNlbGYtPm1lc3NhZ2VTdG9yYWdlXy0+X2hhc19zdG9yYWdlXzsKLSAgICB1aW50MzJfdCBi
eXRlID0gaWR4IC8gMzI7Ci0gICAgdWludDMyX3QgYml0TWFzayA9ICgxIDw8IChpZHggJSAzMikp
OwotICAgIGlmICh2YWx1ZSkgewotICAgICAgaGFzX3N0b3JhZ2VbYnl0ZV0gfD0gYml0TWFzazsK
LSAgICB9IGVsc2UgewotICAgICAgaGFzX3N0b3JhZ2VbYnl0ZV0gJj0gfmJpdE1hc2s7Ci0gICAg
fQotICB9Ci19Ci0KLXZvaWQgR1BCTWF5YmVDbGVhck9uZW9mKEdQQk1lc3NhZ2UgKnNlbGYsIEdQ
Qk9uZW9mRGVzY3JpcHRvciAqb25lb2YsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
IG9uZW9mSGFzSW5kZXgsIHVpbnQzMl90IGZpZWxkTnVtYmVyTm90VG9DbGVhcikgewotICB1aW50
MzJfdCBmaWVsZE51bWJlclNldCA9IEdQQkdldEhhc09uZW9mKHNlbGYsIG9uZW9mSGFzSW5kZXgp
OwotICBpZiAoKGZpZWxkTnVtYmVyU2V0ID09IGZpZWxkTnVtYmVyTm90VG9DbGVhcikgfHwgKGZp
ZWxkTnVtYmVyU2V0ID09IDApKSB7Ci0gICAgLy8gRG8gbm90aGluZy9ub3RoaW5nIHNldCBpbiB0
aGUgb25lb2YuCi0gICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gTGlrZSBHUEJDbGVhck1lc3NhZ2VG
aWVsZCgpLCBmcmVlIHRoZSBtZW1vcnkgaWYgYW4gb2JqZWN0dHlwZSBpcyBzZXQsCi0gIC8vIHBv
ZCB0eXBlcyBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICBHUEJGaWVsZERlc2NyaXB0b3Ig
KmZpZWxkU2V0ID0gW29uZW9mIGZpZWxkV2l0aE51bWJlcjpmaWVsZE51bWJlclNldF07Ci0gIE5T
Q0Fzc2VydChmaWVsZFNldCwKLSAgICAgICAgICAgIEAiJUA6IG9uZW9mIHNldCB0byBzb21ldGhp
bmcgKCV1KSBub3QgaW4gdGhlIG9uZW9mPyIsCi0gICAgICAgICAgICBbc2VsZiBjbGFzc10sIGZp
ZWxkTnVtYmVyU2V0KTsKLSAgaWYgKGZpZWxkU2V0ICYmIEdQQkZpZWxkU3RvcmVzT2JqZWN0KGZp
ZWxkU2V0KSkgewotICAgIHVpbnQ4X3QgKnN0b3JhZ2UgPSAodWludDhfdCAqKXNlbGYtPm1lc3Nh
Z2VTdG9yYWdlXzsKLSAgICBpZCAqdHlwZVB0ciA9IChpZCAqKSZzdG9yYWdlW2ZpZWxkU2V0LT5k
ZXNjcmlwdGlvbl8tPm9mZnNldF07Ci0gICAgWyp0eXBlUHRyIHJlbGVhc2VdOwotICAgICp0eXBl
UHRyID0gbmlsOwotICB9Ci0KLSAgLy8gU2V0IHRvIG5vdGhpbmcgc3RvcmVkIGluIHRoZSBvbmVv
Zi4KLSAgLy8gKGZpZWxkIG51bWJlciBkb2Vzbid0IG1hdHRlciBzaW5jZSBzZXR0aW5nIHRvIG5v
dGhpbmcpLgotICBHUEJTZXRIYXNJdmFyKHNlbGYsIG9uZW9mSGFzSW5kZXgsIDEsIE5PKTsKLX0K
LQotI3ByYWdtYSBtYXJrIC0gSVZhciBhY2Nlc3NvcnMKLQotLy8lUERETS1ERUZJTkUgSVZBUl9Q
T0RfQUNDRVNTT1JTX0RFRk4oTkFNRSwgVFlQRSkKLS8vJVRZUEUgR1BCR2V0TWVzc2FnZSMjTkFN
RSMjRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwKLS8vJSBUWVBFJFMgICAgICAgICAgICBOQU1FJFMg
ICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotLy8lICBpZiAoR1BCR2V0SGFzSXZh
ckZpZWxkKHNlbGYsIGZpZWxkKSkgewotLy8lICAgIHVpbnQ4X3QgKnN0b3JhZ2UgPSAodWludDhf
dCAqKXNlbGYtPm1lc3NhZ2VTdG9yYWdlXzsKLS8vJSAgICBUWVBFICp0eXBlUHRyID0gKFRZUEUg
Kikmc3RvcmFnZVtmaWVsZC0+ZGVzY3JpcHRpb25fLT5vZmZzZXRdOwotLy8lICAgIHJldHVybiAq
dHlwZVB0cjsKLS8vJSAgfSBlbHNlIHsKLS8vJSAgICByZXR1cm4gZmllbGQuZGVmYXVsdFZhbHVl
LnZhbHVlIyNOQU1FOwotLy8lICB9Ci0vLyV9Ci0vLyUKLS8vJS8vIE9ubHkgZXhpc3RzIGZvciBw
dWJsaWMgYXBpLCBubyBjb3JlIGNvZGUgc2hvdWxkIHVzZSB0aGlzLgotLy8ldm9pZCBHUEJTZXRN
ZXNzYWdlIyNOQU1FIyNGaWVsZChHUEJNZXNzYWdlICpzZWxmLAotLy8lICAgICAgICAgICAgICAg
ICAgIE5BTUUkUyAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwKLS8vJSAgICAgICAgICAg
ICAgICAgICBOQU1FJFMgICAgIFRZUEUgdmFsdWUpIHsKLS8vJSAgaWYgKHNlbGYgPT0gbmlsIHx8
IGZpZWxkID09IG5pbCkgcmV0dXJuOwotLy8lICBHUEJGaWxlU3ludGF4IHN5bnRheCA9IFtzZWxm
IGRlc2NyaXB0b3JdLmZpbGUuc3ludGF4OwotLy8lICBHUEJTZXQjI05BTUUjI0l2YXJXaXRoRmll
bGRJbnRlcm5hbChzZWxmLCBmaWVsZCwgdmFsdWUsIHN5bnRheCk7Ci0vLyV9Ci0vLyUKLS8vJXZv
aWQgR1BCU2V0IyNOQU1FIyNJdmFyV2l0aEZpZWxkSW50ZXJuYWwoR1BCTWVzc2FnZSAqc2VsZiwK
LS8vJSAgICAgICAgICAgIE5BTUUkUyAgICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3Jp
cHRvciAqZmllbGQsCi0vLyUgICAgICAgICAgICBOQU1FJFMgICAgICAgICAgICAgICAgICAgICBU
WVBFIHZhbHVlLAotLy8lICAgICAgICAgICAgTkFNRSRTICAgICAgICAgICAgICAgICAgICAgR1BC
RmlsZVN5bnRheCBzeW50YXgpIHsKLS8vJSAgR1BCT25lb2ZEZXNjcmlwdG9yICpvbmVvZiA9IGZp
ZWxkLT5jb250YWluaW5nT25lb2ZfOwotLy8lICBpZiAob25lb2YpIHsKLS8vJSAgICBHUEJNZXNz
YWdlRmllbGREZXNjcmlwdGlvbiAqZmllbGREZXNjID0gZmllbGQtPmRlc2NyaXB0aW9uXzsKLS8v
JSAgICBHUEJNYXliZUNsZWFyT25lb2Yoc2VsZiwgb25lb2YsIGZpZWxkRGVzYy0+aGFzSW5kZXgs
IGZpZWxkRGVzYy0+bnVtYmVyKTsKLS8vJSAgfQotLy8lICBOU0NBc3NlcnQoc2VsZi0+bWVzc2Fn
ZVN0b3JhZ2VfICE9IE5VTEwsCi0vLyUgICAgICAgICAgICBAIiVAOiBBbGwgbWVzc2FnZXMgc2hv
dWxkIGhhdmUgc3RvcmFnZSAoZnJvbSBpbml0KSIsCi0vLyUgICAgICAgICAgICBbc2VsZiBjbGFz
c10pOwotLy8lI2lmIGRlZmluZWQoX19jbGFuZ19hbmFseXplcl9fKQotLy8lICBpZiAoc2VsZi0+
bWVzc2FnZVN0b3JhZ2VfID09IE5VTEwpIHJldHVybjsKLS8vJSNlbmRpZgotLy8lICB1aW50OF90
ICpzdG9yYWdlID0gKHVpbnQ4X3QgKilzZWxmLT5tZXNzYWdlU3RvcmFnZV87Ci0vLyUgIFRZUEUg
KnR5cGVQdHIgPSAoVFlQRSAqKSZzdG9yYWdlW2ZpZWxkLT5kZXNjcmlwdGlvbl8tPm9mZnNldF07
Ci0vLyUgICp0eXBlUHRyID0gdmFsdWU7Ci0vLyUgIC8vIHByb3RvMjogYW55IHZhbHVlIGNvdW50
cyBhcyBoYXZpbmcgYmVlbiBzZXQ7IHByb3RvMywgaXQKLS8vJSAgLy8gaGFzIHRvIGJlIGEgbm9u
IHplcm8gdmFsdWUuCi0vLyUgIEJPT0wgaGFzVmFsdWUgPQotLy8lICAgIChzeW50YXggPT0gR1BC
RmlsZVN5bnRheFByb3RvMikgfHwgKHZhbHVlICE9IChUWVBFKTApOwotLy8lICBHUEJTZXRIYXNJ
dmFyRmllbGQoc2VsZiwgZmllbGQsIGhhc1ZhbHVlKTsKLS8vJSAgR1BCQmVjb21lVmlzaWJsZVRv
QXV0b2NyZWF0b3Ioc2VsZik7Ci0vLyV9Ci0vLyUKLS8vJVBERE0tREVGSU5FIElWQVJfQUxJQVNf
REVGTl9PQkpFQ1QoTkFNRSwgVFlQRSkKLS8vJS8vIE9ubHkgZXhpc3RzIGZvciBwdWJsaWMgYXBp
LCBubyBjb3JlIGNvZGUgc2hvdWxkIHVzZSB0aGlzLgotLy8lVFlQRSAqR1BCR2V0TWVzc2FnZSMj
TkFNRSMjRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwKLS8vJSBUWVBFJFMgICAgICAgICAgICAgTkFN
RSRTICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQpIHsKLS8vJSAgcmV0dXJuIChUWVBF
ICopR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZChzZWxmLCBmaWVsZCk7Ci0vLyV9Ci0vLyUKLS8v
JS8vIE9ubHkgZXhpc3RzIGZvciBwdWJsaWMgYXBpLCBubyBjb3JlIGNvZGUgc2hvdWxkIHVzZSB0
aGlzLgotLy8ldm9pZCBHUEJTZXRNZXNzYWdlIyNOQU1FIyNGaWVsZChHUEJNZXNzYWdlICpzZWxm
LAotLy8lICAgICAgICAgICAgICAgICAgIE5BTUUkUyAgICAgR1BCRmllbGREZXNjcmlwdG9yICpm
aWVsZCwKLS8vJSAgICAgICAgICAgICAgICAgICBOQU1FJFMgICAgIFRZUEUgKnZhbHVlKSB7Ci0v
LyUgIEdQQlNldE9iamVjdEl2YXJXaXRoRmllbGQoc2VsZiwgZmllbGQsIChpZCl2YWx1ZSk7Ci0v
LyV9Ci0vLyUKLQotLy8gT2JqZWN0IHR5cGVzIGFyZSBoYW5kbGVkIHNsaWdodGx5IGRpZmZlcmVu
dGx5LCB0aGV5IG5lZWQgdG8gYmUgcmVsZWFzZWQKLS8vIGFuZCByZXRhaW5lZC4KLQotdm9pZCBH
UEJTZXRBdXRvY3JlYXRlZFJldGFpbmVkT2JqZWN0SXZhcldpdGhGaWVsZCgKLSAgICBHUEJNZXNz
YWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAotICAgIGlkIF9fYXR0cmlidXRl
X18oKG5zX2NvbnN1bWVkKSkgdmFsdWUpIHsKLSAgdWludDhfdCAqc3RvcmFnZSA9ICh1aW50OF90
ICopc2VsZi0+bWVzc2FnZVN0b3JhZ2VfOwotICBpZCAqdHlwZVB0ciA9IChpZCAqKSZzdG9yYWdl
W2ZpZWxkLT5kZXNjcmlwdGlvbl8tPm9mZnNldF07Ci0gIE5TQ0Fzc2VydCgqdHlwZVB0ciA9PSBO
VUxMLCBAIkNhbid0IHNldCBhdXRvY3JlYXRlZCBvYmplY3QgbW9yZSB0aGFuIG9uY2UuIik7Ci0g
ICp0eXBlUHRyID0gdmFsdWU7Ci19Ci0KLXZvaWQgR1BCQ2xlYXJBdXRvY3JlYXRlZE1lc3NhZ2VJ
dmFyV2l0aEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0gIGlmIChH
UEJHZXRIYXNJdmFyRmllbGQoc2VsZiwgZmllbGQpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIHVp
bnQ4X3QgKnN0b3JhZ2UgPSAodWludDhfdCAqKXNlbGYtPm1lc3NhZ2VTdG9yYWdlXzsKLSAgaWQg
KnR5cGVQdHIgPSAoaWQgKikmc3RvcmFnZVtmaWVsZC0+ZGVzY3JpcHRpb25fLT5vZmZzZXRdOwot
ICBHUEJNZXNzYWdlICpvbGRWYWx1ZSA9ICp0eXBlUHRyOwotICAqdHlwZVB0ciA9IE5VTEw7Ci0g
IEdQQkNsZWFyTWVzc2FnZUF1dG9jcmVhdG9yKG9sZFZhbHVlKTsKLSAgW29sZFZhbHVlIHJlbGVh
c2VdOwotfQotCi0vLyBUaGlzIGV4aXN0cyBvbmx5IGZvciBicmlnaW5nIHNvbWUgYWxpYXNlZCB0
eXBlcywgbm90aGluZyBlbHNlIHNob3VsZCB1c2UgaXQuCi1zdGF0aWMgdm9pZCBHUEJTZXRPYmpl
Y3RJdmFyV2l0aEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsIGlkIHZhbHVlKSB7Ci0g
IGlmIChzZWxmID09IG5pbCB8fCBmaWVsZCA9PSBuaWwpIHJldHVybjsKLSAgR1BCRmlsZVN5bnRh
eCBzeW50YXggPSBbc2VsZiBkZXNjcmlwdG9yXS5maWxlLnN5bnRheDsKLSAgR1BCU2V0UmV0YWlu
ZWRPYmplY3RJdmFyV2l0aEZpZWxkSW50ZXJuYWwoc2VsZiwgZmllbGQsIFt2YWx1ZSByZXRhaW5d
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXgpOwot
fQotCi12b2lkIEdQQlNldE9iamVjdEl2YXJXaXRoRmllbGRJbnRlcm5hbChHUEJNZXNzYWdlICpz
ZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNj
cmlwdG9yICpmaWVsZCwgaWQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHUEJGaWxlU3ludGF4IHN5bnRheCkgewotICBHUEJTZXRSZXRhaW5lZE9iamVjdEl2
YXJXaXRoRmllbGRJbnRlcm5hbChzZWxmLCBmaWVsZCwgW3ZhbHVlIHJldGFpbl0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCk7Ci19Ci0KLXZvaWQg
R1BCU2V0UmV0YWluZWRPYmplY3RJdmFyV2l0aEZpZWxkSW50ZXJuYWwoR1BCTWVzc2FnZSAqc2Vs
ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmll
bGREZXNjcmlwdG9yICpmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWQgdmFsdWUsIEdQQkZpbGVTeW50YXggc3ludGF4KSB7Ci0gIE5TQ0Fzc2Vy
dChzZWxmLT5tZXNzYWdlU3RvcmFnZV8gIT0gTlVMTCwKLSAgICAgICAgICAgIEAiJUA6IEFsbCBt
ZXNzYWdlcyBzaG91bGQgaGF2ZSBzdG9yYWdlIChmcm9tIGluaXQpIiwKLSAgICAgICAgICAgIFtz
ZWxmIGNsYXNzXSk7Ci0jaWYgZGVmaW5lZChfX2NsYW5nX2FuYWx5emVyX18pCi0gIGlmIChzZWxm
LT5tZXNzYWdlU3RvcmFnZV8gPT0gTlVMTCkgcmV0dXJuOwotI2VuZGlmCi0gIEdQQkRhdGFUeXBl
IGZpZWxkVHlwZSA9IEdQQkdldEZpZWxkRGF0YVR5cGUoZmllbGQpOwotICBCT09MIGlzTWFwT3JB
cnJheSA9IEdQQkZpZWxkSXNNYXBPckFycmF5KGZpZWxkKTsKLSAgQk9PTCBmaWVsZElzTWVzc2Fn
ZSA9IEdQQkRhdGFUeXBlSXNNZXNzYWdlKGZpZWxkVHlwZSk7Ci0jaWZkZWYgREVCVUcKLSAgaWYg
KHZhbHVlID09IG5pbCAmJiAhaXNNYXBPckFycmF5ICYmICFmaWVsZElzTWVzc2FnZSAmJgotICAg
ICAgZmllbGQuaGFzRGVmYXVsdFZhbHVlKSB7Ci0gICAgLy8gU2V0dGluZyBhIG1lc3NhZ2UgdG8g
bmlsIGlzIGFuIG9idmlvdXMgd2F5IHRvICJjbGVhciIgdGhlIHZhbHVlCi0gICAgLy8gYXMgdGhl
cmUgaXMgbm8gd2F5IHRvIHNldCBhIG5vbi1lbXB0eSBkZWZhdWx0IHZhbHVlIGZvciBtZXNzYWdl
cy4KLSAgICAvLwotICAgIC8vIEZvciBTdHJpbmdzIGFuZCBCeXRlcyB0aGF0IGhhdmUgZGVmYXVs
dCB2YWx1ZXMgc2V0IGl0IGlzIG5vdCBjbGVhciB3aGF0Ci0gICAgLy8gc2hvdWxkIGJlIGRvbmUg
d2hlbiB0aGVpciB2YWx1ZSBpcyBzZXQgdG8gbmlsLiBJcyB0aGUgaW50ZW50aW9uIGp1c3QgdG8K
LSAgICAvLyBjbGVhciB0aGUgc2V0IHZhbHVlIGFuZCByZXNldCB0byBkZWZhdWx0LCBvciBpcyB0
aGUgaW50ZW50aW9uIHRvIHNldCB0aGUKLSAgICAvLyB2YWx1ZSB0byB0aGUgZW1wdHkgc3RyaW5n
L2RhdGE/IEFyZ3VtZW50cyBjYW4gYmUgbWFkZSBmb3IgYm90aCBjYXNlcy4KLSAgICAvLyAnbmls
JyBoYXMgYmVlbiBhYnVzZWQgYXMgYSByZXBsYWNlbWVudCBmb3IgYW4gZW1wdHkgc3RyaW5nL2Rh
dGEgaW4gT2JqQy4KLSAgICAvLyBXZSBkZWNpZGVkIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBhbGwg
Im9iamVjdCIgdHlwZXMgYW5kIGNsZWFyIHRoZSBoYXMKLSAgICAvLyBmaWVsZCwgYW5kIGZhbGwg
YmFjayBvbiB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlIHdhcm5pbmcgYmVsb3cgd2lsbCBvbmx5Ci0g
ICAgLy8gYXBwZWFyIGluIGRlYnVnLCBidXQgdGhlIGNvdWxkIHNob3VsZCBiZSBjaGFuZ2VkIHNv
IHRoZSBpbnRlbnRpb24gaXMKLSAgICAvLyBjbGVhci4KLSAgICBOU1N0cmluZyAqaGFzU2VsID0g
TlNTdHJpbmdGcm9tU2VsZWN0b3IoZmllbGQtPmhhc09yQ291bnRTZWxfKTsKLSAgICBOU1N0cmlu
ZyAqcHJvcE5hbWUgPSBmaWVsZC5uYW1lOwotICAgIE5TU3RyaW5nICpjbGFzc05hbWUgPSBzZWxm
LmRlc2NyaXB0b3IubmFtZTsKLSAgICBOU0xvZyhAIndhcm5pbmc6ICclQC4lQCA9IG5pbDsnIGlz
IG5vdCBjbGVhcmx5IGRlZmluZWQgZm9yIGZpZWxkcyB3aXRoICIKLSAgICAgICAgICBAImRlZmF1
bHQgdmFsdWVzLiBQbGVhc2UgdXNlICclQC4lQCA9ICVAJyBpZiB5b3Ugd2FudCB0byBzZXQgaXQg
dG8gIgotICAgICAgICAgIEAiZW1wdHksIG9yIGNhbGwgJyVALiVAID0gTk8nIHRvIHJlc2V0IGl0
IHRvIGl0J3MgZGVmYXVsdCB2YWx1ZSBvZiAiCi0gICAgICAgICAgQCInJUAnLiBEZWZhdWx0aW5n
IHRvIHJlc2V0dGluZyBkZWZhdWx0IHZhbHVlLiIsCi0gICAgICAgICAgY2xhc3NOYW1lLCBwcm9w
TmFtZSwgY2xhc3NOYW1lLCBwcm9wTmFtZSwKLSAgICAgICAgICAoZmllbGRUeXBlID09IEdQQkRh
dGFUeXBlU3RyaW5nKSA/IEAiQFwiXCIiIDogQCJHUEJFbXB0eU5TRGF0YSgpIiwKLSAgICAgICAg
ICBjbGFzc05hbWUsIGhhc1NlbCwgZmllbGQuZGVmYXVsdFZhbHVlLnZhbHVlU3RyaW5nKTsKLSAg
ICAvLyBOb3RlOiB2YWx1ZVN0cmluZywgZGVwZW5kaW5nIG9uIHRoZSB0eXBlLCBpdCBjb3VsZCBl
YXNpbHkgYmUKLSAgICAvLyB2YWx1ZURhdGEvdmFsdWVNZXNzYWdlLgotICB9Ci0jZW5kaWYgIC8v
IERFQlVHCi0gIGlmICghaXNNYXBPckFycmF5KSB7Ci0gICAgLy8gTm9uIHJlcGVhdGVkL21hcCBj
YW4gYmUgaW4gYW4gb25lb2YsIGNsZWFyIGFueSBleGlzdGluZyB2YWx1ZSBmcm9tIHRoZQotICAg
IC8vIG9uZW9mLgotICAgIEdQQk9uZW9mRGVzY3JpcHRvciAqb25lb2YgPSBmaWVsZC0+Y29udGFp
bmluZ09uZW9mXzsKLSAgICBpZiAob25lb2YpIHsKLSAgICAgIEdQQk1lc3NhZ2VGaWVsZERlc2Ny
aXB0aW9uICpmaWVsZERlc2MgPSBmaWVsZC0+ZGVzY3JpcHRpb25fOwotICAgICAgR1BCTWF5YmVD
bGVhck9uZW9mKHNlbGYsIG9uZW9mLCBmaWVsZERlc2MtPmhhc0luZGV4LCBmaWVsZERlc2MtPm51
bWJlcik7Ci0gICAgfQotICAgIC8vIENsZWFyICJoYXMiIGlmIHRoZXkgYXJlIGJlaW5nIHNldCB0
byBuaWwuCi0gICAgQk9PTCBzZXRIYXNWYWx1ZSA9ICh2YWx1ZSAhPSBuaWwpOwotICAgIC8vIFVu
ZGVyIHByb3RvMywgQnl0ZXMgJiBTdHJpbmcgZmllbGRzIGdldCBjbGVhcmVkIGJ5IHJlc2V0dGlu
ZyB0aGVtIHRvCi0gICAgLy8gdGhlaXIgZGVmYXVsdCAoZW1wdHkpIHZhbHVlcywgc28gaWYgdGhl
eSBhcmUgc2V0IHRvIHNvbWV0aGluZyBvZiBsZW5ndGgKLSAgICAvLyB6ZXJvLCB0aGV5IGFyZSBi
ZWluZyBjbGVhcmVkLgotICAgIGlmICgoc3ludGF4ID09IEdQQkZpbGVTeW50YXhQcm90bzMpICYm
ICFmaWVsZElzTWVzc2FnZSAmJgotICAgICAgICAoW3ZhbHVlIGxlbmd0aF0gPT0gMCkpIHsKLSAg
ICAgIHNldEhhc1ZhbHVlID0gTk87Ci0gICAgICB2YWx1ZSA9IG5pbDsKLSAgICB9Ci0gICAgR1BC
U2V0SGFzSXZhckZpZWxkKHNlbGYsIGZpZWxkLCBzZXRIYXNWYWx1ZSk7Ci0gIH0KLSAgdWludDhf
dCAqc3RvcmFnZSA9ICh1aW50OF90ICopc2VsZi0+bWVzc2FnZVN0b3JhZ2VfOwotICBpZCAqdHlw
ZVB0ciA9IChpZCAqKSZzdG9yYWdlW2ZpZWxkLT5kZXNjcmlwdGlvbl8tPm9mZnNldF07Ci0KLSAg
aWQgb2xkVmFsdWUgPSAqdHlwZVB0cjsKLQotICAqdHlwZVB0ciA9IHZhbHVlOwotCi0gIGlmIChv
bGRWYWx1ZSkgewotICAgIGlmIChpc01hcE9yQXJyYXkpIHsKLSAgICAgIGlmIChmaWVsZC5maWVs
ZFR5cGUgPT0gR1BCRmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAgICAgICAgLy8gSWYgdGhlIG9sZCBh
cnJheSB3YXMgYXV0b2NyZWF0ZWQgYnkgdXMsIHRoZW4gY2xlYXIgaXQuCi0gICAgICAgIGlmIChH
UEJEYXRhVHlwZUlzT2JqZWN0KGZpZWxkVHlwZSkpIHsKLSAgICAgICAgICBHUEJBdXRvY3JlYXRl
ZEFycmF5ICphdXRvQXJyYXkgPSBvbGRWYWx1ZTsKLSAgICAgICAgICBpZiAoYXV0b0FycmF5LT5f
YXV0b2NyZWF0b3IgPT0gc2VsZikgewotICAgICAgICAgICAgYXV0b0FycmF5LT5fYXV0b2NyZWF0
b3IgPSBuaWw7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIFR5
cGUgZG9lc24ndCBtYXR0ZXIsIGl0IGlzIGEgR1BCKkFycmF5LgotICAgICAgICAgIEdQQkludDMy
QXJyYXkgKmdwYkFycmF5ID0gb2xkVmFsdWU7Ci0gICAgICAgICAgaWYgKGdwYkFycmF5LT5fYXV0
b2NyZWF0b3IgPT0gc2VsZikgewotICAgICAgICAgICAgZ3BiQXJyYXktPl9hdXRvY3JlYXRvciA9
IG5pbDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7IC8vIEdQQkZpZWxk
VHlwZU1hcAotICAgICAgICAvLyBJZiB0aGUgb2xkIG1hcCB3YXMgYXV0b2NyZWF0ZWQgYnkgdXMs
IHRoZW4gY2xlYXIgaXQuCi0gICAgICAgIGlmICgoZmllbGQubWFwS2V5RGF0YVR5cGUgPT0gR1BC
RGF0YVR5cGVTdHJpbmcpICYmCi0gICAgICAgICAgICBHUEJEYXRhVHlwZUlzT2JqZWN0KGZpZWxk
VHlwZSkpIHsKLSAgICAgICAgICBHUEJBdXRvY3JlYXRlZERpY3Rpb25hcnkgKmF1dG9EaWN0ID0g
b2xkVmFsdWU7Ci0gICAgICAgICAgaWYgKGF1dG9EaWN0LT5fYXV0b2NyZWF0b3IgPT0gc2VsZikg
ewotICAgICAgICAgICAgYXV0b0RpY3QtPl9hdXRvY3JlYXRvciA9IG5pbDsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gVHlwZSBkb2Vzbid0IG1hdHRlciwgaXQg
aXMgYSBHUEIqRGljdGlvbmFyeS4KLSAgICAgICAgICBHUEJJbnQzMkludDMyRGljdGlvbmFyeSAq
Z3BiRGljdCA9IG9sZFZhbHVlOwotICAgICAgICAgIGlmIChncGJEaWN0LT5fYXV0b2NyZWF0b3Ig
PT0gc2VsZikgewotICAgICAgICAgICAgZ3BiRGljdC0+X2F1dG9jcmVhdG9yID0gbmlsOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZmllbGRJc01lc3Nh
Z2UpIHsKLSAgICAgIC8vIElmIHRoZSBvbGQgbWVzc2FnZSB2YWx1ZSB3YXMgYXV0b2NyZWF0ZWQg
YnkgdXMsIHRoZW4gY2xlYXIgaXQuCi0gICAgICBHUEJNZXNzYWdlICpvbGRNZXNzYWdlVmFsdWUg
PSBvbGRWYWx1ZTsKLSAgICAgIGlmIChHUEJXYXNNZXNzYWdlQXV0b2NyZWF0ZWRCeShvbGRNZXNz
YWdlVmFsdWUsIHNlbGYpKSB7Ci0gICAgICAgIEdQQkNsZWFyTWVzc2FnZUF1dG9jcmVhdG9yKG9s
ZE1lc3NhZ2VWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIFtvbGRWYWx1ZSByZWxlYXNlXTsK
LSAgfQotCi0gIEdQQkJlY29tZVZpc2libGVUb0F1dG9jcmVhdG9yKHNlbGYpOwotfQotCi1pZCBH
UEJHZXRPYmplY3RJdmFyV2l0aEZpZWxkTm9BdXRvY3JlYXRlKEdQQk1lc3NhZ2UgKnNlbGYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRv
ciAqZmllbGQpIHsKLSAgaWYgKHNlbGYtPm1lc3NhZ2VTdG9yYWdlXyA9PSBuaWwpIHsKLSAgICBy
ZXR1cm4gbmlsOwotICB9Ci0gIHVpbnQ4X3QgKnN0b3JhZ2UgPSAodWludDhfdCAqKXNlbGYtPm1l
c3NhZ2VTdG9yYWdlXzsKLSAgaWQgKnR5cGVQdHIgPSAoaWQgKikmc3RvcmFnZVtmaWVsZC0+ZGVz
Y3JpcHRpb25fLT5vZmZzZXRdOwotICByZXR1cm4gKnR5cGVQdHI7Ci19Ci0KLWlkIEdQQkdldE9i
amVjdEl2YXJXaXRoRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpm
aWVsZCkgewotICBOU0NBc3NlcnQoIUdQQkZpZWxkSXNNYXBPckFycmF5KGZpZWxkKSwgQCJTaG91
bGRuJ3QgZ2V0IGhlcmUiKTsKLSAgaWYgKEdQQkdldEhhc0l2YXJGaWVsZChzZWxmLCBmaWVsZCkp
IHsKLSAgICB1aW50OF90ICpzdG9yYWdlID0gKHVpbnQ4X3QgKilzZWxmLT5tZXNzYWdlU3RvcmFn
ZV87Ci0gICAgaWQgKnR5cGVQdHIgPSAoaWQgKikmc3RvcmFnZVtmaWVsZC0+ZGVzY3JpcHRpb25f
LT5vZmZzZXRdOwotICAgIHJldHVybiAqdHlwZVB0cjsKLSAgfQotICAvLyBOb3Qgc2V0Li4uCi0K
LSAgLy8gTm9uIG1lc3NhZ2VzIChzdHJpbmcvZGF0YSksIGdldCB0aGVpciBkZWZhdWx0LgotICBp
ZiAoIUdQQkZpZWxkRGF0YVR5cGVJc01lc3NhZ2UoZmllbGQpKSB7Ci0gICAgcmV0dXJuIGZpZWxk
LmRlZmF1bHRWYWx1ZS52YWx1ZU1lc3NhZ2U7Ci0gIH0KLQotICBHUEJQcmVwYXJlUmVhZE9ubHlT
ZW1hcGhvcmUoc2VsZik7Ci0gIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KHNlbGYtPnJlYWRPbmx5
U2VtYXBob3JlXywgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKLSAgR1BCTWVzc2FnZSAqcmVzdWx0
ID0gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZE5vQXV0b2NyZWF0ZShzZWxmLCBmaWVsZCk7Ci0g
IGlmICghcmVzdWx0KSB7Ci0gICAgLy8gRm9yIG5vbiByZXBlYXRlZCBtZXNzYWdlcywgY3JlYXRl
IHRoZSBvYmplY3QsIHNldCBpdCBhbmQgcmV0dXJuIGl0LgotICAgIC8vIFRoaXMgb2JqZWN0IHdp
bGwgbm90IGluaXRpYWxseSBiZSB2aXNpYmxlIHZpYSBHUEJHZXRIYXNJdmFyLCBzbwotICAgIC8v
IHdlIHNhdmUgaXRzIGNyZWF0b3Igc28gaXQgY2FuIGJlY29tZSB2aXNpYmxlIGlmIGl0J3MgbXV0
YXRlZCBsYXRlci4KLSAgICByZXN1bHQgPSBHUEJDcmVhdGVNZXNzYWdlV2l0aEF1dG9jcmVhdG9y
KGZpZWxkLm1zZ0NsYXNzLCBzZWxmLCBmaWVsZCk7Ci0gICAgR1BCU2V0QXV0b2NyZWF0ZWRSZXRh
aW5lZE9iamVjdEl2YXJXaXRoRmllbGQoc2VsZiwgZmllbGQsIHJlc3VsdCk7Ci0gIH0KLSAgZGlz
cGF0Y2hfc2VtYXBob3JlX3NpZ25hbChzZWxmLT5yZWFkT25seVNlbWFwaG9yZV8pOwotICByZXR1
cm4gcmVzdWx0OwotfQotCi0vLyBPbmx5IGV4aXN0cyBmb3IgcHVibGljIGFwaSwgbm8gY29yZSBj
b2RlIHNob3VsZCB1c2UgdGhpcy4KLWludDMyX3QgR1BCR2V0TWVzc2FnZUVudW1GaWVsZChHUEJN
ZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0gIEdQQkZpbGVTeW50
YXggc3ludGF4ID0gW3NlbGYgZGVzY3JpcHRvcl0uZmlsZS5zeW50YXg7Ci0gIHJldHVybiBHUEJH
ZXRFbnVtSXZhcldpdGhGaWVsZEludGVybmFsKHNlbGYsIGZpZWxkLCBzeW50YXgpOwotfQotCi1p
bnQzMl90IEdQQkdldEVudW1JdmFyV2l0aEZpZWxkSW50ZXJuYWwoR1BCTWVzc2FnZSAqc2VsZiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0
b3IgKmZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZp
bGVTeW50YXggc3ludGF4KSB7Ci0gIGludDMyX3QgcmVzdWx0ID0gR1BCR2V0TWVzc2FnZUludDMy
RmllbGQoc2VsZiwgZmllbGQpOwotICAvLyBJZiB0aGlzIGlzIHByZXNldmVyaW5nIHVua25vd24g
ZW51bXMsIG1ha2Ugc3VyZSB0aGUgdmFsdWUgaXMgdmFsaWQgYmVmb3JlCi0gIC8vIHJldHVybmlu
ZyBpdC4KLSAgaWYgKEdQQkhhc1ByZXNlcnZpbmdVbmtub3duRW51bVNlbWFudGljcyhzeW50YXgp
ICYmCi0gICAgICAhW2ZpZWxkIGlzVmFsaWRFbnVtVmFsdWU6cmVzdWx0XSkgewotICAgIHJlc3Vs
dCA9IGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWU7Ci0gIH0KLSAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotLy8gT25seSBleGlzdHMgZm9yIHB1YmxpYyBhcGksIG5vIGNvcmUgY29kZSBzaG91
bGQgdXNlIHRoaXMuCi12b2lkIEdQQlNldE1lc3NhZ2VFbnVtRmllbGQoR1BCTWVzc2FnZSAqc2Vs
ZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90IHZhbHVlKSB7Ci0gIEdQQkZpbGVTeW50YXggc3ludGF4ID0gW3NlbGYgZGVzY3Jp
cHRvcl0uZmlsZS5zeW50YXg7Ci0gIEdQQlNldEludDMySXZhcldpdGhGaWVsZEludGVybmFsKHNl
bGYsIGZpZWxkLCB2YWx1ZSwgc3ludGF4KTsKLX0KLQotdm9pZCBHUEJTZXRFbnVtSXZhcldpdGhG
aWVsZEludGVybmFsKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwgaW50MzJfdCB2YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWxlU3ludGF4IHN5bnRheCkg
ewotICAvLyBEb24ndCBhbGxvdyBpbiB1bmtub3duIHZhbHVlcy4gIFByb3RvMyBjYW4gdXNlIHRo
ZSBSYXcgbWV0aG9kLgotICBpZiAoIVtmaWVsZCBpc1ZhbGlkRW51bVZhbHVlOnZhbHVlXSkgewot
ICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgotICAgICAg
ICAgICAgICAgIGZvcm1hdDpAIiVALiVAOiBBdHRlbXB0IHRvIHNldCBhbiB1bmtub3duIGVudW0g
dmFsdWUgKCVkKSIsCi0gICAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGNsYXNzXSwgZmllbGQu
bmFtZSwgdmFsdWVdOwotICB9Ci0gIEdQQlNldEludDMySXZhcldpdGhGaWVsZEludGVybmFsKHNl
bGYsIGZpZWxkLCB2YWx1ZSwgc3ludGF4KTsKLX0KLQotLy8gT25seSBleGlzdHMgZm9yIHB1Ymxp
YyBhcGksIG5vIGNvcmUgY29kZSBzaG91bGQgdXNlIHRoaXMuCi1pbnQzMl90IEdQQkdldE1lc3Nh
Z2VSYXdFbnVtRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0gIGludDMyX3QgcmVzdWx0
ID0gR1BCR2V0TWVzc2FnZUludDMyRmllbGQoc2VsZiwgZmllbGQpOwotICByZXR1cm4gcmVzdWx0
OwotfQotCi0vLyBPbmx5IGV4aXN0cyBmb3IgcHVibGljIGFwaSwgbm8gY29yZSBjb2RlIHNob3Vs
ZCB1c2UgdGhpcy4KLXZvaWQgR1BCU2V0TWVzc2FnZVJhd0VudW1GaWVsZChHUEJNZXNzYWdlICpz
ZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgdmFsdWUpIHsKLSAgR1BCRmlsZVN5bnRheCBzeW50YXggPSBbc2VsZiBk
ZXNjcmlwdG9yXS5maWxlLnN5bnRheDsKLSAgR1BCU2V0SW50MzJJdmFyV2l0aEZpZWxkSW50ZXJu
YWwoc2VsZiwgZmllbGQsIHZhbHVlLCBzeW50YXgpOwotfQotCi1CT09MIEdQQkdldE1lc3NhZ2VC
b29sRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
UEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0gIGlmIChHUEJHZXRIYXNJdmFyRmllbGQoc2Vs
ZiwgZmllbGQpKSB7Ci0gICAgLy8gQm9vbHMgYXJlIHN0b3JlZCBpbiB0aGUgaGFzIGJpdHMgdG8g
YXZvaWQgbmVlZGluZyBleHBsaWNpdCBzcGFjZSBpbiB0aGUKLSAgICAvLyBzdG9yYWdlIHN0cnVj
dHVyZS4KLSAgICAvLyAodGhlIGZpZWxkIG51bWJlciBwYXNzZWQgdG8gdGhlIEhhc0l2YXIgaGVs
cGVyIGRvZXNuJ3QgcmVhbGx5IG1hdHRlcgotICAgIC8vIHNpbmNlIHRoZSBvZmZzZXQgaXMgbmV2
ZXIgbmVnYXRpdmUpCi0gICAgR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb24gKmZpZWxkRGVzYyA9
IGZpZWxkLT5kZXNjcmlwdGlvbl87Ci0gICAgcmV0dXJuIEdQQkdldEhhc0l2YXIoc2VsZiwgKGlu
dDMyX3QpKGZpZWxkRGVzYy0+b2Zmc2V0KSwgZmllbGREZXNjLT5udW1iZXIpOwotICB9IGVsc2Ug
ewotICAgIHJldHVybiBmaWVsZC5kZWZhdWx0VmFsdWUudmFsdWVCb29sOwotICB9Ci19Ci0KLS8v
IE9ubHkgZXhpc3RzIGZvciBwdWJsaWMgYXBpLCBubyBjb3JlIGNvZGUgc2hvdWxkIHVzZSB0aGlz
Lgotdm9pZCBHUEJTZXRNZXNzYWdlQm9vbEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCT09MIHZhbHVlKSB7Ci0gIGlmIChzZWxmID09IG5pbCB8fCBm
aWVsZCA9PSBuaWwpIHJldHVybjsKLSAgR1BCRmlsZVN5bnRheCBzeW50YXggPSBbc2VsZiBkZXNj
cmlwdG9yXS5maWxlLnN5bnRheDsKLSAgR1BCU2V0Qm9vbEl2YXJXaXRoRmllbGRJbnRlcm5hbChz
ZWxmLCBmaWVsZCwgdmFsdWUsIHN5bnRheCk7Ci19Ci0KLXZvaWQgR1BCU2V0Qm9vbEl2YXJXaXRo
RmllbGRJbnRlcm5hbChHUEJNZXNzYWdlICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQk9PTCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHUEJGaWxlU3ludGF4IHN5bnRheCkgewotICBHUEJNZXNzYWdlRmllbGRE
ZXNjcmlwdGlvbiAqZmllbGREZXNjID0gZmllbGQtPmRlc2NyaXB0aW9uXzsKLSAgR1BCT25lb2ZE
ZXNjcmlwdG9yICpvbmVvZiA9IGZpZWxkLT5jb250YWluaW5nT25lb2ZfOwotICBpZiAob25lb2Yp
IHsKLSAgICBHUEJNYXliZUNsZWFyT25lb2Yoc2VsZiwgb25lb2YsIGZpZWxkRGVzYy0+aGFzSW5k
ZXgsIGZpZWxkRGVzYy0+bnVtYmVyKTsKLSAgfQotCi0gIC8vIEJvb2xzIGFyZSBzdG9yZWQgaW4g
dGhlIGhhcyBiaXRzIHRvIGF2b2lkIG5lZWRpbmcgZXhwbGljaXQgc3BhY2UgaW4gdGhlCi0gIC8v
IHN0b3JhZ2Ugc3RydWN0dXJlLgotICAvLyAodGhlIGZpZWxkIG51bWJlciBwYXNzZWQgdG8gdGhl
IEhhc0l2YXIgaGVscGVyIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBzaW5jZQotICAvLyB0aGUgb2Zm
c2V0IGlzIG5ldmVyIG5lZ2F0aXZlKQotICBHUEJTZXRIYXNJdmFyKHNlbGYsIChpbnQzMl90KShm
aWVsZERlc2MtPm9mZnNldCksIGZpZWxkRGVzYy0+bnVtYmVyLCB2YWx1ZSk7Ci0KLSAgLy8gcHJv
dG8yOiBhbnkgdmFsdWUgY291bnRzIGFzIGhhdmluZyBiZWVuIHNldDsgcHJvdG8zLCBpdAotICAv
LyBoYXMgdG8gYmUgYSBub24gemVybyB2YWx1ZS4KLSAgQk9PTCBoYXNWYWx1ZSA9Ci0gICAgKHN5
bnRheCA9PSBHUEJGaWxlU3ludGF4UHJvdG8yKSB8fCAodmFsdWUgIT0gKEJPT0wpMCk7Ci0gIEdQ
QlNldEhhc0l2YXJGaWVsZChzZWxmLCBmaWVsZCwgaGFzVmFsdWUpOwotICBHUEJCZWNvbWVWaXNp
YmxlVG9BdXRvY3JlYXRvcihzZWxmKTsKLX0KLQotLy8lUERETS1FWFBBTkQgSVZBUl9QT0RfQUND
RVNTT1JTX0RFRk4oSW50MzIsIGludDMyX3QpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2Vu
ZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotaW50MzJfdCBHUEJHZXRNZXNzYWdl
SW50MzJGaWVsZChHUEJNZXNzYWdlICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0gIGlmIChHUEJHZXRIYXNJdmFyRmll
bGQoc2VsZiwgZmllbGQpKSB7Ci0gICAgdWludDhfdCAqc3RvcmFnZSA9ICh1aW50OF90ICopc2Vs
Zi0+bWVzc2FnZVN0b3JhZ2VfOwotICAgIGludDMyX3QgKnR5cGVQdHIgPSAoaW50MzJfdCAqKSZz
dG9yYWdlW2ZpZWxkLT5kZXNjcmlwdGlvbl8tPm9mZnNldF07Ci0gICAgcmV0dXJuICp0eXBlUHRy
OwotICB9IGVsc2UgewotICAgIHJldHVybiBmaWVsZC5kZWZhdWx0VmFsdWUudmFsdWVJbnQzMjsK
LSAgfQotfQotCi0vLyBPbmx5IGV4aXN0cyBmb3IgcHVibGljIGFwaSwgbm8gY29yZSBjb2RlIHNo
b3VsZCB1c2UgdGhpcy4KLXZvaWQgR1BCU2V0TWVzc2FnZUludDMyRmllbGQoR1BCTWVzc2FnZSAq
c2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpm
aWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB2YWx1ZSkgewotICBp
ZiAoc2VsZiA9PSBuaWwgfHwgZmllbGQgPT0gbmlsKSByZXR1cm47Ci0gIEdQQkZpbGVTeW50YXgg
c3ludGF4ID0gW3NlbGYgZGVzY3JpcHRvcl0uZmlsZS5zeW50YXg7Ci0gIEdQQlNldEludDMySXZh
cldpdGhGaWVsZEludGVybmFsKHNlbGYsIGZpZWxkLCB2YWx1ZSwgc3ludGF4KTsKLX0KLQotdm9p
ZCBHUEJTZXRJbnQzMkl2YXJXaXRoRmllbGRJbnRlcm5hbChHUEJNZXNzYWdlICpzZWxmLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZp
ZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHZhbHVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWxlU3ludGF4IHN5
bnRheCkgewotICBHUEJPbmVvZkRlc2NyaXB0b3IgKm9uZW9mID0gZmllbGQtPmNvbnRhaW5pbmdP
bmVvZl87Ci0gIGlmIChvbmVvZikgewotICAgIEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uICpm
aWVsZERlc2MgPSBmaWVsZC0+ZGVzY3JpcHRpb25fOwotICAgIEdQQk1heWJlQ2xlYXJPbmVvZihz
ZWxmLCBvbmVvZiwgZmllbGREZXNjLT5oYXNJbmRleCwgZmllbGREZXNjLT5udW1iZXIpOwotICB9
Ci0gIE5TQ0Fzc2VydChzZWxmLT5tZXNzYWdlU3RvcmFnZV8gIT0gTlVMTCwKLSAgICAgICAgICAg
IEAiJUA6IEFsbCBtZXNzYWdlcyBzaG91bGQgaGF2ZSBzdG9yYWdlIChmcm9tIGluaXQpIiwKLSAg
ICAgICAgICAgIFtzZWxmIGNsYXNzXSk7Ci0jaWYgZGVmaW5lZChfX2NsYW5nX2FuYWx5emVyX18p
Ci0gIGlmIChzZWxmLT5tZXNzYWdlU3RvcmFnZV8gPT0gTlVMTCkgcmV0dXJuOwotI2VuZGlmCi0g
IHVpbnQ4X3QgKnN0b3JhZ2UgPSAodWludDhfdCAqKXNlbGYtPm1lc3NhZ2VTdG9yYWdlXzsKLSAg
aW50MzJfdCAqdHlwZVB0ciA9IChpbnQzMl90ICopJnN0b3JhZ2VbZmllbGQtPmRlc2NyaXB0aW9u
Xy0+b2Zmc2V0XTsKLSAgKnR5cGVQdHIgPSB2YWx1ZTsKLSAgLy8gcHJvdG8yOiBhbnkgdmFsdWUg
Y291bnRzIGFzIGhhdmluZyBiZWVuIHNldDsgcHJvdG8zLCBpdAotICAvLyBoYXMgdG8gYmUgYSBu
b24gemVybyB2YWx1ZS4KLSAgQk9PTCBoYXNWYWx1ZSA9Ci0gICAgKHN5bnRheCA9PSBHUEJGaWxl
U3ludGF4UHJvdG8yKSB8fCAodmFsdWUgIT0gKGludDMyX3QpMCk7Ci0gIEdQQlNldEhhc0l2YXJG
aWVsZChzZWxmLCBmaWVsZCwgaGFzVmFsdWUpOwotICBHUEJCZWNvbWVWaXNpYmxlVG9BdXRvY3Jl
YXRvcihzZWxmKTsKLX0KLQotLy8lUERETS1FWFBBTkQgSVZBUl9QT0RfQUNDRVNTT1JTX0RFRk4o
VUludDMyLCB1aW50MzJfdCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRv
IG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi11aW50MzJfdCBHUEJHZXRNZXNzYWdlVUludDMyRmll
bGQoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
UEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0gIGlmIChHUEJHZXRIYXNJdmFyRmllbGQoc2Vs
ZiwgZmllbGQpKSB7Ci0gICAgdWludDhfdCAqc3RvcmFnZSA9ICh1aW50OF90ICopc2VsZi0+bWVz
c2FnZVN0b3JhZ2VfOwotICAgIHVpbnQzMl90ICp0eXBlUHRyID0gKHVpbnQzMl90ICopJnN0b3Jh
Z2VbZmllbGQtPmRlc2NyaXB0aW9uXy0+b2Zmc2V0XTsKLSAgICByZXR1cm4gKnR5cGVQdHI7Ci0g
IH0gZWxzZSB7Ci0gICAgcmV0dXJuIGZpZWxkLmRlZmF1bHRWYWx1ZS52YWx1ZVVJbnQzMjsKLSAg
fQotfQotCi0vLyBPbmx5IGV4aXN0cyBmb3IgcHVibGljIGFwaSwgbm8gY29yZSBjb2RlIHNob3Vs
ZCB1c2UgdGhpcy4KLXZvaWQgR1BCU2V0TWVzc2FnZVVJbnQzMkZpZWxkKEdQQk1lc3NhZ2UgKnNl
bGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZp
ZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUpIHsKLSAg
aWYgKHNlbGYgPT0gbmlsIHx8IGZpZWxkID09IG5pbCkgcmV0dXJuOwotICBHUEJGaWxlU3ludGF4
IHN5bnRheCA9IFtzZWxmIGRlc2NyaXB0b3JdLmZpbGUuc3ludGF4OwotICBHUEJTZXRVSW50MzJJ
dmFyV2l0aEZpZWxkSW50ZXJuYWwoc2VsZiwgZmllbGQsIHZhbHVlLCBzeW50YXgpOwotfQotCi12
b2lkIEdQQlNldFVJbnQzMkl2YXJXaXRoRmllbGRJbnRlcm5hbChHUEJNZXNzYWdlICpzZWxmLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9y
ICpmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmlsZVN5
bnRheCBzeW50YXgpIHsKLSAgR1BCT25lb2ZEZXNjcmlwdG9yICpvbmVvZiA9IGZpZWxkLT5jb250
YWluaW5nT25lb2ZfOwotICBpZiAob25lb2YpIHsKLSAgICBHUEJNZXNzYWdlRmllbGREZXNjcmlw
dGlvbiAqZmllbGREZXNjID0gZmllbGQtPmRlc2NyaXB0aW9uXzsKLSAgICBHUEJNYXliZUNsZWFy
T25lb2Yoc2VsZiwgb25lb2YsIGZpZWxkRGVzYy0+aGFzSW5kZXgsIGZpZWxkRGVzYy0+bnVtYmVy
KTsKLSAgfQotICBOU0NBc3NlcnQoc2VsZi0+bWVzc2FnZVN0b3JhZ2VfICE9IE5VTEwsCi0gICAg
ICAgICAgICBAIiVAOiBBbGwgbWVzc2FnZXMgc2hvdWxkIGhhdmUgc3RvcmFnZSAoZnJvbSBpbml0
KSIsCi0gICAgICAgICAgICBbc2VsZiBjbGFzc10pOwotI2lmIGRlZmluZWQoX19jbGFuZ19hbmFs
eXplcl9fKQotICBpZiAoc2VsZi0+bWVzc2FnZVN0b3JhZ2VfID09IE5VTEwpIHJldHVybjsKLSNl
bmRpZgotICB1aW50OF90ICpzdG9yYWdlID0gKHVpbnQ4X3QgKilzZWxmLT5tZXNzYWdlU3RvcmFn
ZV87Ci0gIHVpbnQzMl90ICp0eXBlUHRyID0gKHVpbnQzMl90ICopJnN0b3JhZ2VbZmllbGQtPmRl
c2NyaXB0aW9uXy0+b2Zmc2V0XTsKLSAgKnR5cGVQdHIgPSB2YWx1ZTsKLSAgLy8gcHJvdG8yOiBh
bnkgdmFsdWUgY291bnRzIGFzIGhhdmluZyBiZWVuIHNldDsgcHJvdG8zLCBpdAotICAvLyBoYXMg
dG8gYmUgYSBub24gemVybyB2YWx1ZS4KLSAgQk9PTCBoYXNWYWx1ZSA9Ci0gICAgKHN5bnRheCA9
PSBHUEJGaWxlU3ludGF4UHJvdG8yKSB8fCAodmFsdWUgIT0gKHVpbnQzMl90KTApOwotICBHUEJT
ZXRIYXNJdmFyRmllbGQoc2VsZiwgZmllbGQsIGhhc1ZhbHVlKTsKLSAgR1BCQmVjb21lVmlzaWJs
ZVRvQXV0b2NyZWF0b3Ioc2VsZik7Ci19Ci0KLS8vJVBERE0tRVhQQU5EIElWQVJfUE9EX0FDQ0VT
U09SU19ERUZOKEludDY0LCBpbnQ2NF90KQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVy
YXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLWludDY0X3QgR1BCR2V0TWVzc2FnZUlu
dDY0RmllbGQoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICBpZiAoR1BCR2V0SGFzSXZhckZpZWxk
KHNlbGYsIGZpZWxkKSkgewotICAgIHVpbnQ4X3QgKnN0b3JhZ2UgPSAodWludDhfdCAqKXNlbGYt
Pm1lc3NhZ2VTdG9yYWdlXzsKLSAgICBpbnQ2NF90ICp0eXBlUHRyID0gKGludDY0X3QgKikmc3Rv
cmFnZVtmaWVsZC0+ZGVzY3JpcHRpb25fLT5vZmZzZXRdOwotICAgIHJldHVybiAqdHlwZVB0cjsK
LSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZmllbGQuZGVmYXVsdFZhbHVlLnZhbHVlSW50NjQ7Ci0g
IH0KLX0KLQotLy8gT25seSBleGlzdHMgZm9yIHB1YmxpYyBhcGksIG5vIGNvcmUgY29kZSBzaG91
bGQgdXNlIHRoaXMuCi12b2lkIEdQQlNldE1lc3NhZ2VJbnQ2NEZpZWxkKEdQQk1lc3NhZ2UgKnNl
bGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmll
bGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdmFsdWUpIHsKLSAgaWYg
KHNlbGYgPT0gbmlsIHx8IGZpZWxkID09IG5pbCkgcmV0dXJuOwotICBHUEJGaWxlU3ludGF4IHN5
bnRheCA9IFtzZWxmIGRlc2NyaXB0b3JdLmZpbGUuc3ludGF4OwotICBHUEJTZXRJbnQ2NEl2YXJX
aXRoRmllbGRJbnRlcm5hbChzZWxmLCBmaWVsZCwgdmFsdWUsIHN5bnRheCk7Ci19Ci0KLXZvaWQg
R1BCU2V0SW50NjRJdmFyV2l0aEZpZWxkSW50ZXJuYWwoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVs
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmlsZVN5bnRheCBzeW50
YXgpIHsKLSAgR1BCT25lb2ZEZXNjcmlwdG9yICpvbmVvZiA9IGZpZWxkLT5jb250YWluaW5nT25l
b2ZfOwotICBpZiAob25lb2YpIHsKLSAgICBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiAqZmll
bGREZXNjID0gZmllbGQtPmRlc2NyaXB0aW9uXzsKLSAgICBHUEJNYXliZUNsZWFyT25lb2Yoc2Vs
Ziwgb25lb2YsIGZpZWxkRGVzYy0+aGFzSW5kZXgsIGZpZWxkRGVzYy0+bnVtYmVyKTsKLSAgfQot
ICBOU0NBc3NlcnQoc2VsZi0+bWVzc2FnZVN0b3JhZ2VfICE9IE5VTEwsCi0gICAgICAgICAgICBA
IiVAOiBBbGwgbWVzc2FnZXMgc2hvdWxkIGhhdmUgc3RvcmFnZSAoZnJvbSBpbml0KSIsCi0gICAg
ICAgICAgICBbc2VsZiBjbGFzc10pOwotI2lmIGRlZmluZWQoX19jbGFuZ19hbmFseXplcl9fKQot
ICBpZiAoc2VsZi0+bWVzc2FnZVN0b3JhZ2VfID09IE5VTEwpIHJldHVybjsKLSNlbmRpZgotICB1
aW50OF90ICpzdG9yYWdlID0gKHVpbnQ4X3QgKilzZWxmLT5tZXNzYWdlU3RvcmFnZV87Ci0gIGlu
dDY0X3QgKnR5cGVQdHIgPSAoaW50NjRfdCAqKSZzdG9yYWdlW2ZpZWxkLT5kZXNjcmlwdGlvbl8t
Pm9mZnNldF07Ci0gICp0eXBlUHRyID0gdmFsdWU7Ci0gIC8vIHByb3RvMjogYW55IHZhbHVlIGNv
dW50cyBhcyBoYXZpbmcgYmVlbiBzZXQ7IHByb3RvMywgaXQKLSAgLy8gaGFzIHRvIGJlIGEgbm9u
IHplcm8gdmFsdWUuCi0gIEJPT0wgaGFzVmFsdWUgPQotICAgIChzeW50YXggPT0gR1BCRmlsZVN5
bnRheFByb3RvMikgfHwgKHZhbHVlICE9IChpbnQ2NF90KTApOwotICBHUEJTZXRIYXNJdmFyRmll
bGQoc2VsZiwgZmllbGQsIGhhc1ZhbHVlKTsKLSAgR1BCQmVjb21lVmlzaWJsZVRvQXV0b2NyZWF0
b3Ioc2VsZik7Ci19Ci0KLS8vJVBERE0tRVhQQU5EIElWQVJfUE9EX0FDQ0VTU09SU19ERUZOKFVJ
bnQ2NCwgdWludDY0X3QpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBu
b3QgZWRpdCBpdCBkaXJlY3RseS4KLQotdWludDY0X3QgR1BCR2V0TWVzc2FnZVVJbnQ2NEZpZWxk
KEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BC
RmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICBpZiAoR1BCR2V0SGFzSXZhckZpZWxkKHNlbGYs
IGZpZWxkKSkgewotICAgIHVpbnQ4X3QgKnN0b3JhZ2UgPSAodWludDhfdCAqKXNlbGYtPm1lc3Nh
Z2VTdG9yYWdlXzsKLSAgICB1aW50NjRfdCAqdHlwZVB0ciA9ICh1aW50NjRfdCAqKSZzdG9yYWdl
W2ZpZWxkLT5kZXNjcmlwdGlvbl8tPm9mZnNldF07Ci0gICAgcmV0dXJuICp0eXBlUHRyOwotICB9
IGVsc2UgewotICAgIHJldHVybiBmaWVsZC5kZWZhdWx0VmFsdWUudmFsdWVVSW50NjQ7Ci0gIH0K
LX0KLQotLy8gT25seSBleGlzdHMgZm9yIHB1YmxpYyBhcGksIG5vIGNvcmUgY29kZSBzaG91bGQg
dXNlIHRoaXMuCi12b2lkIEdQQlNldE1lc3NhZ2VVSW50NjRGaWVsZChHUEJNZXNzYWdlICpzZWxm
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVs
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZhbHVlKSB7Ci0gIGlm
IChzZWxmID09IG5pbCB8fCBmaWVsZCA9PSBuaWwpIHJldHVybjsKLSAgR1BCRmlsZVN5bnRheCBz
eW50YXggPSBbc2VsZiBkZXNjcmlwdG9yXS5maWxlLnN5bnRheDsKLSAgR1BCU2V0VUludDY0SXZh
cldpdGhGaWVsZEludGVybmFsKHNlbGYsIGZpZWxkLCB2YWx1ZSwgc3ludGF4KTsKLX0KLQotdm9p
ZCBHUEJTZXRVSW50NjRJdmFyV2l0aEZpZWxkSW50ZXJuYWwoR1BCTWVzc2FnZSAqc2VsZiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAq
ZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB2
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZpbGVTeW50
YXggc3ludGF4KSB7Ci0gIEdQQk9uZW9mRGVzY3JpcHRvciAqb25lb2YgPSBmaWVsZC0+Y29udGFp
bmluZ09uZW9mXzsKLSAgaWYgKG9uZW9mKSB7Ci0gICAgR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRp
b24gKmZpZWxkRGVzYyA9IGZpZWxkLT5kZXNjcmlwdGlvbl87Ci0gICAgR1BCTWF5YmVDbGVhck9u
ZW9mKHNlbGYsIG9uZW9mLCBmaWVsZERlc2MtPmhhc0luZGV4LCBmaWVsZERlc2MtPm51bWJlcik7
Ci0gIH0KLSAgTlNDQXNzZXJ0KHNlbGYtPm1lc3NhZ2VTdG9yYWdlXyAhPSBOVUxMLAotICAgICAg
ICAgICAgQCIlQDogQWxsIG1lc3NhZ2VzIHNob3VsZCBoYXZlIHN0b3JhZ2UgKGZyb20gaW5pdCki
LAotICAgICAgICAgICAgW3NlbGYgY2xhc3NdKTsKLSNpZiBkZWZpbmVkKF9fY2xhbmdfYW5hbHl6
ZXJfXykKLSAgaWYgKHNlbGYtPm1lc3NhZ2VTdG9yYWdlXyA9PSBOVUxMKSByZXR1cm47Ci0jZW5k
aWYKLSAgdWludDhfdCAqc3RvcmFnZSA9ICh1aW50OF90ICopc2VsZi0+bWVzc2FnZVN0b3JhZ2Vf
OwotICB1aW50NjRfdCAqdHlwZVB0ciA9ICh1aW50NjRfdCAqKSZzdG9yYWdlW2ZpZWxkLT5kZXNj
cmlwdGlvbl8tPm9mZnNldF07Ci0gICp0eXBlUHRyID0gdmFsdWU7Ci0gIC8vIHByb3RvMjogYW55
IHZhbHVlIGNvdW50cyBhcyBoYXZpbmcgYmVlbiBzZXQ7IHByb3RvMywgaXQKLSAgLy8gaGFzIHRv
IGJlIGEgbm9uIHplcm8gdmFsdWUuCi0gIEJPT0wgaGFzVmFsdWUgPQotICAgIChzeW50YXggPT0g
R1BCRmlsZVN5bnRheFByb3RvMikgfHwgKHZhbHVlICE9ICh1aW50NjRfdCkwKTsKLSAgR1BCU2V0
SGFzSXZhckZpZWxkKHNlbGYsIGZpZWxkLCBoYXNWYWx1ZSk7Ci0gIEdQQkJlY29tZVZpc2libGVU
b0F1dG9jcmVhdG9yKHNlbGYpOwotfQotCi0vLyVQRERNLUVYUEFORCBJVkFSX1BPRF9BQ0NFU1NP
UlNfREVGTihGbG9hdCwgZmxvYXQpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVk
LCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotZmxvYXQgR1BCR2V0TWVzc2FnZUZsb2F0Rmll
bGQoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZp
ZWxkRGVzY3JpcHRvciAqZmllbGQpIHsKLSAgaWYgKEdQQkdldEhhc0l2YXJGaWVsZChzZWxmLCBm
aWVsZCkpIHsKLSAgICB1aW50OF90ICpzdG9yYWdlID0gKHVpbnQ4X3QgKilzZWxmLT5tZXNzYWdl
U3RvcmFnZV87Ci0gICAgZmxvYXQgKnR5cGVQdHIgPSAoZmxvYXQgKikmc3RvcmFnZVtmaWVsZC0+
ZGVzY3JpcHRpb25fLT5vZmZzZXRdOwotICAgIHJldHVybiAqdHlwZVB0cjsKLSAgfSBlbHNlIHsK
LSAgICByZXR1cm4gZmllbGQuZGVmYXVsdFZhbHVlLnZhbHVlRmxvYXQ7Ci0gIH0KLX0KLQotLy8g
T25seSBleGlzdHMgZm9yIHB1YmxpYyBhcGksIG5vIGNvcmUgY29kZSBzaG91bGQgdXNlIHRoaXMu
Ci12b2lkIEdQQlNldE1lc3NhZ2VGbG9hdEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlKSB7Ci0gIGlmIChzZWxmID09IG5pbCB8
fCBmaWVsZCA9PSBuaWwpIHJldHVybjsKLSAgR1BCRmlsZVN5bnRheCBzeW50YXggPSBbc2VsZiBk
ZXNjcmlwdG9yXS5maWxlLnN5bnRheDsKLSAgR1BCU2V0RmxvYXRJdmFyV2l0aEZpZWxkSW50ZXJu
YWwoc2VsZiwgZmllbGQsIHZhbHVlLCBzeW50YXgpOwotfQotCi12b2lkIEdQQlNldEZsb2F0SXZh
cldpdGhGaWVsZEludGVybmFsKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWxlU3ludGF4IHN5bnRheCkgewotICBHUEJPbmVv
ZkRlc2NyaXB0b3IgKm9uZW9mID0gZmllbGQtPmNvbnRhaW5pbmdPbmVvZl87Ci0gIGlmIChvbmVv
ZikgewotICAgIEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uICpmaWVsZERlc2MgPSBmaWVsZC0+
ZGVzY3JpcHRpb25fOwotICAgIEdQQk1heWJlQ2xlYXJPbmVvZihzZWxmLCBvbmVvZiwgZmllbGRE
ZXNjLT5oYXNJbmRleCwgZmllbGREZXNjLT5udW1iZXIpOwotICB9Ci0gIE5TQ0Fzc2VydChzZWxm
LT5tZXNzYWdlU3RvcmFnZV8gIT0gTlVMTCwKLSAgICAgICAgICAgIEAiJUA6IEFsbCBtZXNzYWdl
cyBzaG91bGQgaGF2ZSBzdG9yYWdlIChmcm9tIGluaXQpIiwKLSAgICAgICAgICAgIFtzZWxmIGNs
YXNzXSk7Ci0jaWYgZGVmaW5lZChfX2NsYW5nX2FuYWx5emVyX18pCi0gIGlmIChzZWxmLT5tZXNz
YWdlU3RvcmFnZV8gPT0gTlVMTCkgcmV0dXJuOwotI2VuZGlmCi0gIHVpbnQ4X3QgKnN0b3JhZ2Ug
PSAodWludDhfdCAqKXNlbGYtPm1lc3NhZ2VTdG9yYWdlXzsKLSAgZmxvYXQgKnR5cGVQdHIgPSAo
ZmxvYXQgKikmc3RvcmFnZVtmaWVsZC0+ZGVzY3JpcHRpb25fLT5vZmZzZXRdOwotICAqdHlwZVB0
ciA9IHZhbHVlOwotICAvLyBwcm90bzI6IGFueSB2YWx1ZSBjb3VudHMgYXMgaGF2aW5nIGJlZW4g
c2V0OyBwcm90bzMsIGl0Ci0gIC8vIGhhcyB0byBiZSBhIG5vbiB6ZXJvIHZhbHVlLgotICBCT09M
IGhhc1ZhbHVlID0KLSAgICAoc3ludGF4ID09IEdQQkZpbGVTeW50YXhQcm90bzIpIHx8ICh2YWx1
ZSAhPSAoZmxvYXQpMCk7Ci0gIEdQQlNldEhhc0l2YXJGaWVsZChzZWxmLCBmaWVsZCwgaGFzVmFs
dWUpOwotICBHUEJCZWNvbWVWaXNpYmxlVG9BdXRvY3JlYXRvcihzZWxmKTsKLX0KLQotLy8lUERE
TS1FWFBBTkQgSVZBUl9QT0RfQUNDRVNTT1JTX0RFRk4oRG91YmxlLCBkb3VibGUpCi0vLyBUaGlz
IGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQot
ZG91YmxlIEdQQkdldE1lc3NhZ2VEb3VibGVGaWVsZChHUEJNZXNzYWdlICpzZWxmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0g
IGlmIChHUEJHZXRIYXNJdmFyRmllbGQoc2VsZiwgZmllbGQpKSB7Ci0gICAgdWludDhfdCAqc3Rv
cmFnZSA9ICh1aW50OF90ICopc2VsZi0+bWVzc2FnZVN0b3JhZ2VfOwotICAgIGRvdWJsZSAqdHlw
ZVB0ciA9IChkb3VibGUgKikmc3RvcmFnZVtmaWVsZC0+ZGVzY3JpcHRpb25fLT5vZmZzZXRdOwot
ICAgIHJldHVybiAqdHlwZVB0cjsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZmllbGQuZGVmYXVs
dFZhbHVlLnZhbHVlRG91YmxlOwotICB9Ci19Ci0KLS8vIE9ubHkgZXhpc3RzIGZvciBwdWJsaWMg
YXBpLCBubyBjb3JlIGNvZGUgc2hvdWxkIHVzZSB0aGlzLgotdm9pZCBHUEJTZXRNZXNzYWdlRG91
YmxlRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgdmFsdWUpIHsKLSAgaWYgKHNlbGYgPT0gbmlsIHx8IGZpZWxkID09IG5pbCkgcmV0
dXJuOwotICBHUEJGaWxlU3ludGF4IHN5bnRheCA9IFtzZWxmIGRlc2NyaXB0b3JdLmZpbGUuc3lu
dGF4OwotICBHUEJTZXREb3VibGVJdmFyV2l0aEZpZWxkSW50ZXJuYWwoc2VsZiwgZmllbGQsIHZh
bHVlLCBzeW50YXgpOwotfQotCi12b2lkIEdQQlNldERvdWJsZUl2YXJXaXRoRmllbGRJbnRlcm5h
bChHUEJNZXNzYWdlICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdQQkZpbGVTeW50YXggc3ludGF4KSB7Ci0gIEdQQk9uZW9mRGVzY3JpcHRvciAq
b25lb2YgPSBmaWVsZC0+Y29udGFpbmluZ09uZW9mXzsKLSAgaWYgKG9uZW9mKSB7Ci0gICAgR1BC
TWVzc2FnZUZpZWxkRGVzY3JpcHRpb24gKmZpZWxkRGVzYyA9IGZpZWxkLT5kZXNjcmlwdGlvbl87
Ci0gICAgR1BCTWF5YmVDbGVhck9uZW9mKHNlbGYsIG9uZW9mLCBmaWVsZERlc2MtPmhhc0luZGV4
LCBmaWVsZERlc2MtPm51bWJlcik7Ci0gIH0KLSAgTlNDQXNzZXJ0KHNlbGYtPm1lc3NhZ2VTdG9y
YWdlXyAhPSBOVUxMLAotICAgICAgICAgICAgQCIlQDogQWxsIG1lc3NhZ2VzIHNob3VsZCBoYXZl
IHN0b3JhZ2UgKGZyb20gaW5pdCkiLAotICAgICAgICAgICAgW3NlbGYgY2xhc3NdKTsKLSNpZiBk
ZWZpbmVkKF9fY2xhbmdfYW5hbHl6ZXJfXykKLSAgaWYgKHNlbGYtPm1lc3NhZ2VTdG9yYWdlXyA9
PSBOVUxMKSByZXR1cm47Ci0jZW5kaWYKLSAgdWludDhfdCAqc3RvcmFnZSA9ICh1aW50OF90ICop
c2VsZi0+bWVzc2FnZVN0b3JhZ2VfOwotICBkb3VibGUgKnR5cGVQdHIgPSAoZG91YmxlICopJnN0
b3JhZ2VbZmllbGQtPmRlc2NyaXB0aW9uXy0+b2Zmc2V0XTsKLSAgKnR5cGVQdHIgPSB2YWx1ZTsK
LSAgLy8gcHJvdG8yOiBhbnkgdmFsdWUgY291bnRzIGFzIGhhdmluZyBiZWVuIHNldDsgcHJvdG8z
LCBpdAotICAvLyBoYXMgdG8gYmUgYSBub24gemVybyB2YWx1ZS4KLSAgQk9PTCBoYXNWYWx1ZSA9
Ci0gICAgKHN5bnRheCA9PSBHUEJGaWxlU3ludGF4UHJvdG8yKSB8fCAodmFsdWUgIT0gKGRvdWJs
ZSkwKTsKLSAgR1BCU2V0SGFzSXZhckZpZWxkKHNlbGYsIGZpZWxkLCBoYXNWYWx1ZSk7Ci0gIEdQ
QkJlY29tZVZpc2libGVUb0F1dG9jcmVhdG9yKHNlbGYpOwotfQotCi0vLyVQRERNLUVYUEFORC1F
TkQgKDYgZXhwYW5zaW9ucykKLQotLy8gQWxpYXNlcyBhcmUgZnVuY3Rpb24gY2FsbHMgdGhhdCBh
cmUgdmlydHVhbGx5IHRoZSBzYW1lLgotCi0vLyVQRERNLUVYUEFORCBJVkFSX0FMSUFTX0RFRk5f
T0JKRUNUKFN0cmluZywgTlNTdHJpbmcpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJh
dGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotLy8gT25seSBleGlzdHMgZm9yIHB1Ymxp
YyBhcGksIG5vIGNvcmUgY29kZSBzaG91bGQgdXNlIHRoaXMuCi1OU1N0cmluZyAqR1BCR2V0TWVz
c2FnZVN0cmluZ0ZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQpIHsKLSAgcmV0dXJuIChOU1N0
cmluZyAqKUdQQkdldE9iamVjdEl2YXJXaXRoRmllbGQoc2VsZiwgZmllbGQpOwotfQotCi0vLyBP
bmx5IGV4aXN0cyBmb3IgcHVibGljIGFwaSwgbm8gY29yZSBjb2RlIHNob3VsZCB1c2UgdGhpcy4K
LXZvaWQgR1BCU2V0TWVzc2FnZVN0cmluZ0ZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKnZhbHVlKSB7Ci0gIEdQQlNldE9iamVj
dEl2YXJXaXRoRmllbGQoc2VsZiwgZmllbGQsIChpZCl2YWx1ZSk7Ci19Ci0KLS8vJVBERE0tRVhQ
QU5EIElWQVJfQUxJQVNfREVGTl9PQkpFQ1QoQnl0ZXMsIE5TRGF0YSkKLS8vIFRoaXMgYmxvY2sg
b2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi0vLyBPbmx5
IGV4aXN0cyBmb3IgcHVibGljIGFwaSwgbm8gY29yZSBjb2RlIHNob3VsZCB1c2UgdGhpcy4KLU5T
RGF0YSAqR1BCR2V0TWVzc2FnZUJ5dGVzRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICBy
ZXR1cm4gKE5TRGF0YSAqKUdQQkdldE9iamVjdEl2YXJXaXRoRmllbGQoc2VsZiwgZmllbGQpOwot
fQotCi0vLyBPbmx5IGV4aXN0cyBmb3IgcHVibGljIGFwaSwgbm8gY29yZSBjb2RlIHNob3VsZCB1
c2UgdGhpcy4KLXZvaWQgR1BCU2V0TWVzc2FnZUJ5dGVzRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNEYXRhICp2YWx1ZSkgewotICBHUEJTZXRP
YmplY3RJdmFyV2l0aEZpZWxkKHNlbGYsIGZpZWxkLCAoaWQpdmFsdWUpOwotfQotCi0vLyVQRERN
LUVYUEFORCBJVkFSX0FMSUFTX0RFRk5fT0JKRUNUKE1lc3NhZ2UsIEdQQk1lc3NhZ2UpCi0vLyBU
aGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4K
LQotLy8gT25seSBleGlzdHMgZm9yIHB1YmxpYyBhcGksIG5vIGNvcmUgY29kZSBzaG91bGQgdXNl
IHRoaXMuCi1HUEJNZXNzYWdlICpHUEJHZXRNZXNzYWdlTWVzc2FnZUZpZWxkKEdQQk1lc3NhZ2Ug
KnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVz
Y3JpcHRvciAqZmllbGQpIHsKLSAgcmV0dXJuIChHUEJNZXNzYWdlICopR1BCR2V0T2JqZWN0SXZh
cldpdGhGaWVsZChzZWxmLCBmaWVsZCk7Ci19Ci0KLS8vIE9ubHkgZXhpc3RzIGZvciBwdWJsaWMg
YXBpLCBubyBjb3JlIGNvZGUgc2hvdWxkIHVzZSB0aGlzLgotdm9pZCBHUEJTZXRNZXNzYWdlTWVz
c2FnZUZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHUEJNZXNzYWdlICp2YWx1ZSkgewotICBHUEJTZXRPYmplY3RJdmFyV2l0aEZpZWxkKHNl
bGYsIGZpZWxkLCAoaWQpdmFsdWUpOwotfQotCi0vLyVQRERNLUVYUEFORCBJVkFSX0FMSUFTX0RF
Rk5fT0JKRUNUKEdyb3VwLCBHUEJNZXNzYWdlKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdl
bmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLS8vIE9ubHkgZXhpc3RzIGZvciBw
dWJsaWMgYXBpLCBubyBjb3JlIGNvZGUgc2hvdWxkIHVzZSB0aGlzLgotR1BCTWVzc2FnZSAqR1BC
R2V0TWVzc2FnZUdyb3VwRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQpIHsKLSAgcmV0dXJu
IChHUEJNZXNzYWdlICopR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZChzZWxmLCBmaWVsZCk7Ci19
Ci0KLS8vIE9ubHkgZXhpc3RzIGZvciBwdWJsaWMgYXBpLCBubyBjb3JlIGNvZGUgc2hvdWxkIHVz
ZSB0aGlzLgotdm9pZCBHUEJTZXRNZXNzYWdlR3JvdXBGaWVsZChHUEJNZXNzYWdlICpzZWxmLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJNZXNzYWdlICp2YWx1ZSkgewotICBHUEJT
ZXRPYmplY3RJdmFyV2l0aEZpZWxkKHNlbGYsIGZpZWxkLCAoaWQpdmFsdWUpOwotfQotCi0vLyVQ
RERNLUVYUEFORC1FTkQgKDQgZXhwYW5zaW9ucykKLQotLy8gT25seSBleGlzdHMgZm9yIHB1Ymxp
YyBhcGksIG5vIGNvcmUgY29kZSBzaG91bGQgdXNlIHRoaXMuCi1pZCBHUEJHZXRNZXNzYWdlUmVw
ZWF0ZWRGaWVsZChHUEJNZXNzYWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7
Ci0jaWYgREVCVUcKLSAgaWYgKGZpZWxkLmZpZWxkVHlwZSAhPSBHUEJGaWVsZFR5cGVSZXBlYXRl
ZCkgewotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgot
ICAgICAgICAgICAgICAgIGZvcm1hdDpAIiVALiVAIGlzIG5vdCBhIHJlcGVhdGVkIGZpZWxkLiIs
Ci0gICAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGNsYXNzXSwgZmllbGQubmFtZV07Ci0gIH0K
LSNlbmRpZgotICByZXR1cm4gR1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZChzZWxmLCBmaWVsZCk7
Ci19Ci0KLS8vIE9ubHkgZXhpc3RzIGZvciBwdWJsaWMgYXBpLCBubyBjb3JlIGNvZGUgc2hvdWxk
IHVzZSB0aGlzLgotdm9pZCBHUEJTZXRNZXNzYWdlUmVwZWF0ZWRGaWVsZChHUEJNZXNzYWdlICpz
ZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLCBpZCBhcnJheSkgewotI2lmIERFQlVHCi0g
IGlmIChmaWVsZC5maWVsZFR5cGUgIT0gR1BCRmllbGRUeXBlUmVwZWF0ZWQpIHsKLSAgICBbTlNF
eGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAg
ICBmb3JtYXQ6QCIlQC4lQCBpcyBub3QgYSByZXBlYXRlZCBmaWVsZC4iLAotICAgICAgICAgICAg
ICAgICAgICAgICBbc2VsZiBjbGFzc10sIGZpZWxkLm5hbWVdOwotICB9Ci0gIENsYXNzIGV4cGVj
dGVkQ2xhc3MgPSBOaWw7Ci0gIHN3aXRjaCAoR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCkpIHsK
LSAgICBjYXNlIEdQQkRhdGFUeXBlQm9vbDoKLSAgICAgIGV4cGVjdGVkQ2xhc3MgPSBbR1BCQm9v
bEFycmF5IGNsYXNzXTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1BCRGF0YVR5cGVTRml4ZWQz
MjoKLSAgICBjYXNlIEdQQkRhdGFUeXBlSW50MzI6Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVNJbnQz
MjoKLSAgICAgIGV4cGVjdGVkQ2xhc3MgPSBbR1BCSW50MzJBcnJheSBjbGFzc107Ci0gICAgICBi
cmVhazsKLSAgICBjYXNlIEdQQkRhdGFUeXBlRml4ZWQzMjoKLSAgICBjYXNlIEdQQkRhdGFUeXBl
VUludDMyOgotICAgICAgZXhwZWN0ZWRDbGFzcyA9IFtHUEJVSW50MzJBcnJheSBjbGFzc107Ci0g
ICAgICBicmVhazsKLSAgICBjYXNlIEdQQkRhdGFUeXBlU0ZpeGVkNjQ6Ci0gICAgY2FzZSBHUEJE
YXRhVHlwZUludDY0OgotICAgIGNhc2UgR1BCRGF0YVR5cGVTSW50NjQ6Ci0gICAgICBleHBlY3Rl
ZENsYXNzID0gW0dQQkludDY0QXJyYXkgY2xhc3NdOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
UEJEYXRhVHlwZUZpeGVkNjQ6Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVVJbnQ2NDoKLSAgICAgIGV4
cGVjdGVkQ2xhc3MgPSBbR1BCVUludDY0QXJyYXkgY2xhc3NdOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHUEJEYXRhVHlwZUZsb2F0OgotICAgICAgZXhwZWN0ZWRDbGFzcyA9IFtHUEJGbG9hdEFy
cmF5IGNsYXNzXTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1BCRGF0YVR5cGVEb3VibGU6Ci0g
ICAgICBleHBlY3RlZENsYXNzID0gW0dQQkRvdWJsZUFycmF5IGNsYXNzXTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgR1BCRGF0YVR5cGVCeXRlczoKLSAgICBjYXNlIEdQQkRhdGFUeXBlU3RyaW5n
OgotICAgIGNhc2UgR1BCRGF0YVR5cGVNZXNzYWdlOgotICAgIGNhc2UgR1BCRGF0YVR5cGVHcm91
cDoKLSAgICAgIGV4cGVjdGVkQ2xhc3MgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBjbGFzc107Ci0g
ICAgICBicmVhazsKLSAgICBjYXNlIEdQQkRhdGFUeXBlRW51bToKLSAgICAgIGV4cGVjdGVkQ2xh
c3MgPSBbR1BCQm9vbEFycmF5IGNsYXNzXTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIGlmIChhcnJh
eSAmJiAhW2FycmF5IGlzS2luZE9mQ2xhc3M6ZXhwZWN0ZWRDbGFzc10pIHsKLSAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBm
b3JtYXQ6QCIlQC4lQDogRXhwZWN0ZWQgJUAgb2JqZWN0LCBnb3QgJUAuIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgW3NlbGYgY2xhc3NdLCBmaWVsZC5uYW1lLCBleHBlY3RlZENsYXNzLCBbYXJy
YXkgY2xhc3NdXTsKLSAgfQotI2VuZGlmCi0gIEdQQlNldE9iamVjdEl2YXJXaXRoRmllbGQoc2Vs
ZiwgZmllbGQsIGFycmF5KTsKLX0KLQotI2lmIERFQlVHCi1zdGF0aWMgTlNTdHJpbmcgKlR5cGVU
b1N0cihHUEJEYXRhVHlwZSBkYXRhVHlwZSkgewotICBzd2l0Y2ggKGRhdGFUeXBlKSB7Ci0gICAg
Y2FzZSBHUEJEYXRhVHlwZUJvb2w6Ci0gICAgICByZXR1cm4gQCJCb29sIjsKLSAgICBjYXNlIEdQ
QkRhdGFUeXBlU0ZpeGVkMzI6Ci0gICAgY2FzZSBHUEJEYXRhVHlwZUludDMyOgotICAgIGNhc2Ug
R1BCRGF0YVR5cGVTSW50MzI6Ci0gICAgICByZXR1cm4gQCJJbnQzMiI7Ci0gICAgY2FzZSBHUEJE
YXRhVHlwZUZpeGVkMzI6Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVVJbnQzMjoKLSAgICAgIHJldHVy
biBAIlVJbnQzMiI7Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVNGaXhlZDY0OgotICAgIGNhc2UgR1BC
RGF0YVR5cGVJbnQ2NDoKLSAgICBjYXNlIEdQQkRhdGFUeXBlU0ludDY0OgotICAgICAgcmV0dXJu
IEAiSW50NjQiOwotICAgIGNhc2UgR1BCRGF0YVR5cGVGaXhlZDY0OgotICAgIGNhc2UgR1BCRGF0
YVR5cGVVSW50NjQ6Ci0gICAgICByZXR1cm4gQCJVSW50NjQiOwotICAgIGNhc2UgR1BCRGF0YVR5
cGVGbG9hdDoKLSAgICAgIHJldHVybiBAIkZsb2F0IjsKLSAgICBjYXNlIEdQQkRhdGFUeXBlRG91
YmxlOgotICAgICAgcmV0dXJuIEAiRG91YmxlIjsKLSAgICBjYXNlIEdQQkRhdGFUeXBlQnl0ZXM6
Ci0gICAgY2FzZSBHUEJEYXRhVHlwZVN0cmluZzoKLSAgICBjYXNlIEdQQkRhdGFUeXBlTWVzc2Fn
ZToKLSAgICBjYXNlIEdQQkRhdGFUeXBlR3JvdXA6Ci0gICAgICByZXR1cm4gQCJPYmplY3QiOwot
ICAgIGNhc2UgR1BCRGF0YVR5cGVFbnVtOgotICAgICAgcmV0dXJuIEAiQm9vbCI7Ci0gIH0KLX0K
LSNlbmRpZgotCi0vLyBPbmx5IGV4aXN0cyBmb3IgcHVibGljIGFwaSwgbm8gY29yZSBjb2RlIHNo
b3VsZCB1c2UgdGhpcy4KLWlkIEdQQkdldE1lc3NhZ2VNYXBGaWVsZChHUEJNZXNzYWdlICpzZWxm
LCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKSB7Ci0jaWYgREVCVUcKLSAgaWYgKGZpZWxkLmZp
ZWxkVHlwZSAhPSBHUEJGaWVsZFR5cGVNYXApIHsKLSAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJ
bnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCIlQC4lQCBp
cyBub3QgYSBtYXA8PiBmaWVsZC4iLAotICAgICAgICAgICAgICAgICAgICAgICBbc2VsZiBjbGFz
c10sIGZpZWxkLm5hbWVdOwotICB9Ci0jZW5kaWYKLSAgcmV0dXJuIEdQQkdldE9iamVjdEl2YXJX
aXRoRmllbGQoc2VsZiwgZmllbGQpOwotfQotCi0vLyBPbmx5IGV4aXN0cyBmb3IgcHVibGljIGFw
aSwgbm8gY29yZSBjb2RlIHNob3VsZCB1c2UgdGhpcy4KLXZvaWQgR1BCU2V0TWVzc2FnZU1hcEZp
ZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZCBkaWN0aW9uYXJ5KSB7Ci0jaWYgREVCVUcKLSAgaWYgKGZp
ZWxkLmZpZWxkVHlwZSAhPSBHUEJGaWVsZFR5cGVNYXApIHsKLSAgICBbTlNFeGNlcHRpb24gcmFp
c2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KLSAgICAgICAgICAgICAgICBmb3JtYXQ6QCIl
QC4lQCBpcyBub3QgYSBtYXA8PiBmaWVsZC4iLAotICAgICAgICAgICAgICAgICAgICAgICBbc2Vs
ZiBjbGFzc10sIGZpZWxkLm5hbWVdOwotICB9Ci0gIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgR1BC
RGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5tYXBLZXlEYXRhVHlwZTsKLSAgICBHUEJEYXRh
VHlwZSB2YWx1ZURhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gICAgTlNT
dHJpbmcgKmtleVN0ciA9IFR5cGVUb1N0cihrZXlEYXRhVHlwZSk7Ci0gICAgTlNTdHJpbmcgKnZh
bHVlU3RyID0gVHlwZVRvU3RyKHZhbHVlRGF0YVR5cGUpOwotICAgIGlmIChrZXlEYXRhVHlwZSA9
PSBHUEJEYXRhVHlwZVN0cmluZykgewotICAgICAga2V5U3RyID0gQCJTdHJpbmciOwotICAgIH0K
LSAgICBDbGFzcyBleHBlY3RlZENsYXNzID0gTmlsOwotICAgIGlmICgoa2V5RGF0YVR5cGUgPT0g
R1BCRGF0YVR5cGVTdHJpbmcpICYmCi0gICAgICAgIEdQQkRhdGFUeXBlSXNPYmplY3QodmFsdWVE
YXRhVHlwZSkpIHsKLSAgICAgIGV4cGVjdGVkQ2xhc3MgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBj
bGFzc107Ci0gICAgfSBlbHNlIHsKLSAgICAgIE5TU3RyaW5nICpjbGFzc05hbWUgPQotICAgICAg
ICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiR1BCJUAlQERpY3Rpb25hcnkiLCBrZXlT
dHIsIHZhbHVlU3RyXTsKLSAgICAgIGV4cGVjdGVkQ2xhc3MgPSBOU0NsYXNzRnJvbVN0cmluZyhj
bGFzc05hbWUpOwotICAgICAgTlNDQXNzZXJ0KGV4cGVjdGVkQ2xhc3MsIEAiTWlzc2luZyBhIGNs
YXNzICglQCk/IiwgZXhwZWN0ZWRDbGFzcyk7Ci0gICAgfQotICAgIGlmICghW2RpY3Rpb25hcnkg
aXNLaW5kT2ZDbGFzczpleHBlY3RlZENsYXNzXSkgewotICAgICAgW05TRXhjZXB0aW9uIHJhaXNl
Ok5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICBmb3JtYXQ6QCIl
QC4lQDogRXhwZWN0ZWQgJUAgb2JqZWN0LCBnb3QgJUAuIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBbc2VsZiBjbGFzc10sIGZpZWxkLm5hbWUsIGV4cGVjdGVkQ2xhc3MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgY2xhc3NdXTsKLSAgICB9Ci0gIH0KLSNlbmRpZgot
ICBHUEJTZXRPYmplY3RJdmFyV2l0aEZpZWxkKHNlbGYsIGZpZWxkLCBkaWN0aW9uYXJ5KTsKLX0K
LQotI3ByYWdtYSBtYXJrIC0gTWlzYyBEeW5hbWljIFJ1bnRpbWUgVXRpbHMKLQotY29uc3QgY2hh
ciAqR1BCTWVzc2FnZUVuY29kaW5nRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yLCBCT09MIGluc3Rh
bmNlU2VsKSB7Ci0gIFByb3RvY29sICpwcm90b2NvbCA9Ci0gICAgICBvYmpjX2dldFByb3RvY29s
KEdQQlN0cmluZ2lmeVN5bWJvbChHUEJNZXNzYWdlU2lnbmF0dXJlUHJvdG9jb2wpKTsKLSAgc3Ry
dWN0IG9iamNfbWV0aG9kX2Rlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0KLSAgICAgIHByb3RvY29s
X2dldE1ldGhvZERlc2NyaXB0aW9uKHByb3RvY29sLCBzZWxlY3RvciwgTk8sIGluc3RhbmNlU2Vs
KTsKLSAgcmV0dXJuIGRlc2NyaXB0aW9uLnR5cGVzOwotfQotCi0jcHJhZ21hIG1hcmsgLSBUZXh0
IEZvcm1hdCBTdXBwb3J0Ci0KLXN0YXRpYyB2b2lkIEFwcGVuZFN0cmluZ0VzY2FwZWQoTlNTdHJp
bmcgKnRvUHJpbnQsIE5TTXV0YWJsZVN0cmluZyAqZGVzdFN0cikgewotICBbZGVzdFN0ciBhcHBl
bmRTdHJpbmc6QCJcIiJdOwotICBOU1VJbnRlZ2VyIGxlbiA9IFt0b1ByaW50IGxlbmd0aF07Ci0g
IGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgdW5pY2hhciBhQ2hh
ciA9IFt0b1ByaW50IGNoYXJhY3RlckF0SW5kZXg6aV07Ci0gICAgc3dpdGNoIChhQ2hhcikgewot
ICAgICAgY2FzZSAnXG4nOiBbZGVzdFN0ciBhcHBlbmRTdHJpbmc6QCJcXG4iXTsgIGJyZWFrOwot
ICAgICAgY2FzZSAnXHInOiBbZGVzdFN0ciBhcHBlbmRTdHJpbmc6QCJcXHIiXTsgIGJyZWFrOwot
ICAgICAgY2FzZSAnXHQnOiBbZGVzdFN0ciBhcHBlbmRTdHJpbmc6QCJcXHQiXTsgIGJyZWFrOwot
ICAgICAgY2FzZSAnXCInOiBbZGVzdFN0ciBhcHBlbmRTdHJpbmc6QCJcXFwiIl07IGJyZWFrOwot
ICAgICAgY2FzZSAnXCcnOiBbZGVzdFN0ciBhcHBlbmRTdHJpbmc6QCJcXFwnIl07IGJyZWFrOwot
ICAgICAgY2FzZSAnXFwnOiBbZGVzdFN0ciBhcHBlbmRTdHJpbmc6QCJcXFxcIl07IGJyZWFrOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgW2Rlc3RTdHIgYXBwZW5kRm9ybWF0OkAiJUMiLCBhQ2hh
cl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBbZGVzdFN0ciBhcHBlbmRTdHJpbmc6
QCJcIiJdOwotfQotCi1zdGF0aWMgdm9pZCBBcHBlbmRCdWZmZXJBc1N0cmluZyhOU0RhdGEgKmJ1
ZmZlciwgTlNNdXRhYmxlU3RyaW5nICpkZXN0U3RyKSB7Ci0gIGNvbnN0IGNoYXIgKnNyYyA9IChj
b25zdCBjaGFyICopW2J1ZmZlciBieXRlc107Ci0gIHNpemVfdCBzcmNMZW4gPSBbYnVmZmVyIGxl
bmd0aF07Ci0gIFtkZXN0U3RyIGFwcGVuZFN0cmluZzpAIlwiIl07Ci0gIGZvciAoY29uc3QgY2hh
ciAqc3JjRW5kID0gc3JjICsgc3JjTGVuOyBzcmMgPCBzcmNFbmQ7IHNyYysrKSB7Ci0gICAgc3dp
dGNoICgqc3JjKSB7Ci0gICAgICBjYXNlICdcbic6IFtkZXN0U3RyIGFwcGVuZFN0cmluZzpAIlxc
biJdOyAgYnJlYWs7Ci0gICAgICBjYXNlICdccic6IFtkZXN0U3RyIGFwcGVuZFN0cmluZzpAIlxc
ciJdOyAgYnJlYWs7Ci0gICAgICBjYXNlICdcdCc6IFtkZXN0U3RyIGFwcGVuZFN0cmluZzpAIlxc
dCJdOyAgYnJlYWs7Ci0gICAgICBjYXNlICdcIic6IFtkZXN0U3RyIGFwcGVuZFN0cmluZzpAIlxc
XCIiXTsgYnJlYWs7Ci0gICAgICBjYXNlICdcJyc6IFtkZXN0U3RyIGFwcGVuZFN0cmluZzpAIlxc
XCciXTsgYnJlYWs7Ci0gICAgICBjYXNlICdcXCc6IFtkZXN0U3RyIGFwcGVuZFN0cmluZzpAIlxc
XFwiXTsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoaXNwcmludCgqc3JjKSkg
ewotICAgICAgICAgIFtkZXN0U3RyIGFwcGVuZEZvcm1hdDpAIiVjIiwgKnNyY107Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgLy8gTk9URTogZG9pbmcgaGV4IG1lYW5zIHlvdSBoYXZlIHRv
IHdvcnJ5IGFib3V0IHRoZSBsZXR0ZXIgYWZ0ZXIKLSAgICAgICAgICAvLyB0aGUgaGV4IGJlaW5n
IGFub3RoZXIgaGV4IGNoYXIgYW5kIGZvcmNpbmcgdGhhdCB0byBiZSBlc2NhcGVkLCBzbwotICAg
ICAgICAgIC8vIHVzZSBvY3RhbCB0byBrZWVwIGl0IHNpbXBsZS4KLSAgICAgICAgICBbZGVzdFN0
ciBhcHBlbmRGb3JtYXQ6QCJcXCUwM28iLCAodWludDhfdCkoKnNyYyldOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBbZGVzdFN0ciBhcHBlbmRTdHJpbmc6QCJcIiJd
OwotfQotCi1zdGF0aWMgdm9pZCBBcHBlbmRUZXh0Rm9ybWF0Rm9yTWFwTWVzc2FnZUZpZWxkKAot
ICAgIGlkIG1hcCwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwgTlNNdXRhYmxlU3RyaW5nICp0
b1N0ciwKLSAgICBOU1N0cmluZyAqbGluZUluZGVudCwgTlNTdHJpbmcgKmZpZWxkTmFtZSwgTlNT
dHJpbmcgKmxpbmVFbmRpbmcpIHsKLSAgR1BCRGF0YVR5cGUga2V5RGF0YVR5cGUgPSBmaWVsZC5t
YXBLZXlEYXRhVHlwZTsKLSAgR1BCRGF0YVR5cGUgdmFsdWVEYXRhVHlwZSA9IEdQQkdldEZpZWxk
RGF0YVR5cGUoZmllbGQpOwotICBCT09MIGlzTWVzc2FnZVZhbHVlID0gR1BCRGF0YVR5cGVJc01l
c3NhZ2UodmFsdWVEYXRhVHlwZSk7Ci0KLSAgTlNTdHJpbmcgKm1zZ1N0YXJ0Rmlyc3QgPQotICAg
ICAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAIHslQFxuIiwgbGluZUluZGVudCwg
ZmllbGROYW1lLCBsaW5lRW5kaW5nXTsKLSAgTlNTdHJpbmcgKm1zZ1N0YXJ0ID0KLSAgICAgIFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCB7XG4iLCBsaW5lSW5kZW50LCBmaWVsZE5h
bWVdOwotICBOU1N0cmluZyAqbXNnRW5kID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
QH1cbiIsIGxpbmVJbmRlbnRdOwotCi0gIE5TU3RyaW5nICprZXlMaW5lID0gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlQCAga2V5OiAiLCBsaW5lSW5kZW50XTsKLSAgTlNTdHJpbmcgKnZh
bHVlTGluZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgIHZhbHVlJXMgIiwgbGlu
ZUluZGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChpc01lc3NhZ2VWYWx1ZSA/ICIiIDogIjoiKV07Ci0KLSAgX19ibG9jayBCT09MIGlzRmly
c3QgPSBZRVM7Ci0KLSAgaWYgKChrZXlEYXRhVHlwZSA9PSBHUEJEYXRhVHlwZVN0cmluZykgJiYK
LSAgICAgIEdQQkRhdGFUeXBlSXNPYmplY3QodmFsdWVEYXRhVHlwZSkpIHsKLSAgICAvLyBtYXAg
aXMgYW4gTlNEaWN0aW9uYXJ5LgotICAgIE5TRGljdGlvbmFyeSAqZGljdCA9IG1hcDsKLSAgICBb
ZGljdCBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqa2V5LCBp
ZCB2YWx1ZSwgQk9PTCAqc3RvcCkgewotICAgICAgI3ByYWdtYSB1bnVzZWQoc3RvcCkKLSAgICAg
IFt0b1N0ciBhcHBlbmRTdHJpbmc6KGlzRmlyc3QgPyBtc2dTdGFydEZpcnN0IDogbXNnU3RhcnQp
XTsKLSAgICAgIGlzRmlyc3QgPSBOTzsKLQotICAgICAgW3RvU3RyIGFwcGVuZFN0cmluZzprZXlM
aW5lXTsKLSAgICAgIEFwcGVuZFN0cmluZ0VzY2FwZWQoa2V5LCB0b1N0cik7Ci0gICAgICBbdG9T
dHIgYXBwZW5kU3RyaW5nOkAiXG4iXTsKLQotICAgICAgW3RvU3RyIGFwcGVuZFN0cmluZzp2YWx1
ZUxpbmVdOwotICAgICAgc3dpdGNoICh2YWx1ZURhdGFUeXBlKSB7Ci0gICAgICAgIGNhc2UgR1BC
RGF0YVR5cGVTdHJpbmc6Ci0gICAgICAgICAgQXBwZW5kU3RyaW5nRXNjYXBlZCh2YWx1ZSwgdG9T
dHIpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVCeXRlczoK
LSAgICAgICAgICBBcHBlbmRCdWZmZXJBc1N0cmluZyh2YWx1ZSwgdG9TdHIpOwotICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVNZXNzYWdlOgotICAgICAgICAgIFt0
b1N0ciBhcHBlbmRTdHJpbmc6QCJ7XG4iXTsKLSAgICAgICAgICBOU1N0cmluZyAqc3ViSW5kZW50
ID0gW2xpbmVJbmRlbnQgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIgICAgIl07Ci0gICAgICAg
ICAgQXBwZW5kVGV4dEZvcm1hdEZvck1lc3NhZ2UodmFsdWUsIHRvU3RyLCBzdWJJbmRlbnQpOwot
ICAgICAgICAgIFt0b1N0ciBhcHBlbmRGb3JtYXQ6QCIlQCAgfSIsIGxpbmVJbmRlbnRdOwotICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgTlNDQXNzZXJ0KE5P
LCBAIkNhbid0IGhhcHBlbiIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgW3Rv
U3RyIGFwcGVuZFN0cmluZzpAIlxuIl07Ci0KLSAgICAgIFt0b1N0ciBhcHBlbmRTdHJpbmc6bXNn
RW5kXTsKLSAgICB9XTsKLSAgfSBlbHNlIHsKLSAgICAvLyBtYXAgaXMgb25lIG9mIHRoZSBHUEIq
RGljdGlvbmFyeSBjbGFzc2VzLCB0eXBlIGRvZXNuJ3QgbWF0dGVyLgotICAgIEdQQkludDMySW50
MzJEaWN0aW9uYXJ5ICpkaWN0ID0gbWFwOwotICAgIFtkaWN0IGVudW1lcmF0ZUZvclRleHRGb3Jt
YXQ6XihpZCBrZXlPYmosIGlkIHZhbHVlT2JqKSB7Ci0gICAgICBbdG9TdHIgYXBwZW5kU3RyaW5n
Oihpc0ZpcnN0ID8gbXNnU3RhcnRGaXJzdCA6IG1zZ1N0YXJ0KV07Ci0gICAgICBpc0ZpcnN0ID0g
Tk87Ci0KLSAgICAgIC8vIEtleSBhbHdheXMgaXMgYSBOU1N0cmluZy4KLSAgICAgIGlmIChrZXlE
YXRhVHlwZSA9PSBHUEJEYXRhVHlwZVN0cmluZykgewotICAgICAgICBbdG9TdHIgYXBwZW5kU3Ry
aW5nOmtleUxpbmVdOwotICAgICAgICBBcHBlbmRTdHJpbmdFc2NhcGVkKGtleU9iaiwgdG9TdHIp
OwotICAgICAgICBbdG9TdHIgYXBwZW5kU3RyaW5nOkAiXG4iXTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFt0b1N0ciBhcHBlbmRGb3JtYXQ6QCIlQCVAXG4iLCBrZXlMaW5lLCBrZXlPYmpdOwot
ICAgICAgfQotCi0gICAgICBbdG9TdHIgYXBwZW5kU3RyaW5nOnZhbHVlTGluZV07Ci0gICAgICBz
d2l0Y2ggKHZhbHVlRGF0YVR5cGUpIHsKLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVN0cmluZzoK
LSAgICAgICAgICBBcHBlbmRTdHJpbmdFc2NhcGVkKHZhbHVlT2JqLCB0b1N0cik7Ci0gICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUJ5dGVzOgotICAgICAgICAgIEFw
cGVuZEJ1ZmZlckFzU3RyaW5nKHZhbHVlT2JqLCB0b1N0cik7Ci0gICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZU1lc3NhZ2U6Ci0gICAgICAgICAgW3RvU3RyIGFwcGVu
ZFN0cmluZzpAIntcbiJdOwotICAgICAgICAgIE5TU3RyaW5nICpzdWJJbmRlbnQgPSBbbGluZUlu
ZGVudCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIiAgICAiXTsKLSAgICAgICAgICBBcHBlbmRU
ZXh0Rm9ybWF0Rm9yTWVzc2FnZSh2YWx1ZU9iaiwgdG9TdHIsIHN1YkluZGVudCk7Ci0gICAgICAg
ICAgW3RvU3RyIGFwcGVuZEZvcm1hdDpAIiVAICB9IiwgbGluZUluZGVudF07Ci0gICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUVudW06IHsKLSAgICAgICAgICBpbnQz
Ml90IGVudW1WYWx1ZSA9IFt2YWx1ZU9iaiBpbnRWYWx1ZV07Ci0gICAgICAgICAgTlNTdHJpbmcg
KnZhbHVlU3RyID0gbmlsOwotICAgICAgICAgIEdQQkVudW1EZXNjcmlwdG9yICpkZXNjcmlwdG9y
ID0gZmllbGQuZW51bURlc2NyaXB0b3I7Ci0gICAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHsKLSAg
ICAgICAgICAgIHZhbHVlU3RyID0gW2Rlc2NyaXB0b3IgdGV4dEZvcm1hdE5hbWVGb3JWYWx1ZTpl
bnVtVmFsdWVdOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAodmFsdWVTdHIpIHsKLSAgICAg
ICAgICAgIFt0b1N0ciBhcHBlbmRTdHJpbmc6dmFsdWVTdHJdOwotICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBbdG9TdHIgYXBwZW5kRm9ybWF0OkAiJWQiLCBlbnVtVmFsdWVdOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgTlNDQXNzZXJ0KHZhbHVlRGF0YVR5cGUgIT0gR1BCRGF0YVR5cGVHcm91cCwg
QCJDYW4ndCBoYXBwZW4iKTsKLSAgICAgICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgYSBOU1N0
cmluZy4KLSAgICAgICAgICBbdG9TdHIgYXBwZW5kU3RyaW5nOnZhbHVlT2JqXTsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICAgIFt0b1N0ciBhcHBlbmRTdHJpbmc6QCJcbiJdOwotCi0g
ICAgICBbdG9TdHIgYXBwZW5kU3RyaW5nOm1zZ0VuZF07Ci0gICAgfV07Ci0gIH0KLX0KLQotc3Rh
dGljIHZvaWQgQXBwZW5kVGV4dEZvcm1hdEZvck1lc3NhZ2VGaWVsZChHUEJNZXNzYWdlICptZXNz
YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVs
ZERlc2NyaXB0b3IgKmZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOU011dGFibGVTdHJpbmcgKnRvU3RyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAqbGluZUluZGVudCkgewotICBpZCBhcnJheU9y
TWFwOwotICBOU1VJbnRlZ2VyIGNvdW50OwotICBHUEJGaWVsZFR5cGUgZmllbGRUeXBlID0gZmll
bGQuZmllbGRUeXBlOwotICBzd2l0Y2ggKGZpZWxkVHlwZSkgewotICAgIGNhc2UgR1BCRmllbGRU
eXBlU2luZ2xlOgotICAgICAgYXJyYXlPck1hcCA9IG5pbDsKLSAgICAgIGNvdW50ID0gKEdQQkdl
dEhhc0l2YXJGaWVsZChtZXNzYWdlLCBmaWVsZCkgPyAxIDogMCk7Ci0gICAgICBicmVhazsKLQot
ICAgIGNhc2UgR1BCRmllbGRUeXBlUmVwZWF0ZWQ6Ci0gICAgICAvLyBXaWxsIGJlIE5TQXJyYXkg
b3IgR1BCKkFycmF5LCB0eXBlIGRvZXNuJ3QgbWF0dGVyLCB0aGV5IGJvdGgKLSAgICAgIC8vIGlt
cGxlbWVudCBjb3VudC4KLSAgICAgIGFycmF5T3JNYXAgPSBHUEJHZXRPYmplY3RJdmFyV2l0aEZp
ZWxkTm9BdXRvY3JlYXRlKG1lc3NhZ2UsIGZpZWxkKTsKLSAgICAgIGNvdW50ID0gWyhOU0FycmF5
ICopYXJyYXlPck1hcCBjb3VudF07Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1BCRmllbGRU
eXBlTWFwOiB7Ci0gICAgICAvLyBXaWxsIGJlIEdQQipEaWN0aW9uYXJ5IG9yIE5TTXV0YWJsZURp
Y3Rpb25hcnksIHR5cGUgZG9lc24ndCBtYXR0ZXIsCi0gICAgICAvLyB0aGV5IGJvdGggaW1wbGVt
ZW50IGNvdW50LgotICAgICAgYXJyYXlPck1hcCA9IEdQQkdldE9iamVjdEl2YXJXaXRoRmllbGRO
b0F1dG9jcmVhdGUobWVzc2FnZSwgZmllbGQpOwotICAgICAgY291bnQgPSBbKE5TRGljdGlvbmFy
eSAqKWFycmF5T3JNYXAgY291bnRdOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYg
KGNvdW50ID09IDApIHsKLSAgICAvLyBOb3RoaW5nIHRvIHByaW50LCBvdXQgb2YgaGVyZS4KLSAg
ICByZXR1cm47Ci0gIH0KLQotICBOU1N0cmluZyAqbGluZUVuZGluZyA9IEAiIjsKLQotICAvLyBJ
ZiB0aGUgbmFtZSBjYW4ndCBiZSByZXZlcnNlZCBvciBzdXBwb3J0IGZvciBleHRyYSBpbmZvIHdh
cyB0dXJuZWQgb2ZmLAotICAvLyB0aGlzIGNhbiByZXR1cm4gbmlsLgotICBOU1N0cmluZyAqZmll
bGROYW1lID0gW2ZpZWxkIHRleHRGb3JtYXROYW1lXTsKLSAgaWYgKFtmaWVsZE5hbWUgbGVuZ3Ro
XSA9PSAwKSB7Ci0gICAgZmllbGROYW1lID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
dSIsIEdQQkZpZWxkTnVtYmVyKGZpZWxkKV07Ci0gICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUg
ZW50cnksIHB1dCB0aGUgb2JqYyBuYW1lIGFzIGEgY29tbWVudCwgb3RoZXIgd2lzZQotICAgIC8v
IGFkZCBpdCBiZWZvcmUgdGhlIHJlcGVhdGVkIHZhbHVlcy4KLSAgICBpZiAoY291bnQgPiAxKSB7
Ci0gICAgICBbdG9TdHIgYXBwZW5kRm9ybWF0OkAiJUAjICVAXG4iLCBsaW5lSW5kZW50LCBmaWVs
ZC5uYW1lXTsKLSAgICB9IGVsc2UgewotICAgICAgbGluZUVuZGluZyA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiICAjICVAIiwgZmllbGQubmFtZV07Ci0gICAgfQotICB9Ci0KLSAgaWYg
KGZpZWxkVHlwZSA9PSBHUEJGaWVsZFR5cGVNYXApIHsKLSAgICBBcHBlbmRUZXh0Rm9ybWF0Rm9y
TWFwTWVzc2FnZUZpZWxkKGFycmF5T3JNYXAsIGZpZWxkLCB0b1N0ciwgbGluZUluZGVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSwgbGluZUVuZGlu
Zyk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWQgYXJyYXkgPSBhcnJheU9yTWFwOwotICBjb25z
dCBCT09MIGlzUmVwZWF0ZWQgPSAoYXJyYXkgIT0gbmlsKTsKLQotICBHUEJEYXRhVHlwZSBmaWVs
ZERhdGFUeXBlID0gR1BCR2V0RmllbGREYXRhVHlwZShmaWVsZCk7Ci0gIEJPT0wgaXNNZXNzYWdl
RmllbGQgPSBHUEJEYXRhVHlwZUlzTWVzc2FnZShmaWVsZERhdGFUeXBlKTsKLSAgZm9yIChOU1VJ
bnRlZ2VyIGogPSAwOyBqIDwgY291bnQ7ICsraikgewotICAgIC8vIFN0YXJ0IHRoZSBsaW5lLgot
ICAgIFt0b1N0ciBhcHBlbmRGb3JtYXQ6QCIlQCVAJXMgIiwgbGluZUluZGVudCwgZmllbGROYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgKGlzTWVzc2FnZUZpZWxkID8gIiIgOiAiOiIpXTsK
LQotICAgIC8vIFRoZSB2YWx1ZS4KLSAgICBzd2l0Y2ggKGZpZWxkRGF0YVR5cGUpIHsKLSNkZWZp
bmUgRklFTERfQ0FTRShHUEJEQVRBVFlQRSwgQ1RZUEUsIFJFQUxfVFlQRSwgLi4uKSAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgY2FzZSBHUEJEYXRhVHlwZSMjR1BCREFUQVRZUEU6IHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVFlQRSB2ID0g
KGlzUmVwZWF0ZWQgPyBbKEdQQiMjUkVBTF9UWVBFIyNBcnJheSAqKWFycmF5IHZhbHVlQXRJbmRl
eDpqXSAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHUEJHZXRNZXNzYWdlIyNSRUFM
X1RZUEUjI0ZpZWxkKG1lc3NhZ2UsIGZpZWxkKSk7IFwKLSAgICBbdG9TdHIgYXBwZW5kRm9ybWF0
Ol9fVkFfQVJHU19fLCB2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0gICAgICBGSUVMRF9DQVNFKEludDMyLCBp
bnQzMl90LCBJbnQzMiwgQCIlZCIpCi0gICAgICBGSUVMRF9DQVNFKFNJbnQzMiwgaW50MzJfdCwg
SW50MzIsIEAiJWQiKQotICAgICAgRklFTERfQ0FTRShTRml4ZWQzMiwgaW50MzJfdCwgSW50MzIs
IEAiJWQiKQotICAgICAgRklFTERfQ0FTRShVSW50MzIsIHVpbnQzMl90LCBVSW50MzIsIEAiJXUi
KQotICAgICAgRklFTERfQ0FTRShGaXhlZDMyLCB1aW50MzJfdCwgVUludDMyLCBAIiV1IikKLSAg
ICAgIEZJRUxEX0NBU0UoSW50NjQsIGludDY0X3QsIEludDY0LCBAIiVsbGQiKQotICAgICAgRklF
TERfQ0FTRShTSW50NjQsIGludDY0X3QsIEludDY0LCBAIiVsbGQiKQotICAgICAgRklFTERfQ0FT
RShTRml4ZWQ2NCwgaW50NjRfdCwgSW50NjQsIEAiJWxsZCIpCi0gICAgICBGSUVMRF9DQVNFKFVJ
bnQ2NCwgdWludDY0X3QsIFVJbnQ2NCwgQCIlbGx1IikKLSAgICAgIEZJRUxEX0NBU0UoRml4ZWQ2
NCwgdWludDY0X3QsIFVJbnQ2NCwgQCIlbGx1IikKLSAgICAgIEZJRUxEX0NBU0UoRmxvYXQsIGZs
b2F0LCBGbG9hdCwgQCIlLipnIiwgRkxUX0RJRykKLSAgICAgIEZJRUxEX0NBU0UoRG91YmxlLCBk
b3VibGUsIERvdWJsZSwgQCIlLipsZyIsIERCTF9ESUcpCi0KLSN1bmRlZiBGSUVMRF9DQVNFCi0K
LSAgICAgIGNhc2UgR1BCRGF0YVR5cGVFbnVtOiB7Ci0gICAgICAgIGludDMyX3QgdiA9IChpc1Jl
cGVhdGVkID8gWyhHUEJFbnVtQXJyYXkgKilhcnJheSByYXdWYWx1ZUF0SW5kZXg6al0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHUEJHZXRNZXNzYWdlSW50MzJGaWVsZChtZXNz
YWdlLCBmaWVsZCkpOwotICAgICAgICBOU1N0cmluZyAqdmFsdWVTdHIgPSBuaWw7Ci0gICAgICAg
IEdQQkVudW1EZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gZmllbGQuZW51bURlc2NyaXB0b3I7Ci0g
ICAgICAgIGlmIChkZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgdmFsdWVTdHIgPSBbZGVzY3JpcHRv
ciB0ZXh0Rm9ybWF0TmFtZUZvclZhbHVlOnZdOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1
ZVN0cikgewotICAgICAgICAgIFt0b1N0ciBhcHBlbmRTdHJpbmc6dmFsdWVTdHJdOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIFt0b1N0ciBhcHBlbmRGb3JtYXQ6QCIlZCIsIHZdOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIEdQQkRhdGFUeXBl
Qm9vbDogewotICAgICAgICBCT09MIHYgPSAoaXNSZXBlYXRlZCA/IFsoR1BCQm9vbEFycmF5ICop
YXJyYXkgdmFsdWVBdEluZGV4OmpdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR1BC
R2V0TWVzc2FnZUJvb2xGaWVsZChtZXNzYWdlLCBmaWVsZCkpOwotICAgICAgICBbdG9TdHIgYXBw
ZW5kU3RyaW5nOih2ID8gQCJ0cnVlIiA6IEAiZmFsc2UiKV07Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgfQotCi0gICAgICBjYXNlIEdQQkRhdGFUeXBlU3RyaW5nOiB7Ci0gICAgICAgIE5TU3RyaW5n
ICp2ID0gKGlzUmVwZWF0ZWQgPyBbKE5TQXJyYXkgKilhcnJheSBvYmplY3RBdEluZGV4OmpdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHUEJHZXRNZXNzYWdlU3RyaW5nRmll
bGQobWVzc2FnZSwgZmllbGQpKTsKLSAgICAgICAgQXBwZW5kU3RyaW5nRXNjYXBlZCh2LCB0b1N0
cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIEdQQkRhdGFUeXBlQnl0
ZXM6IHsKLSAgICAgICAgTlNEYXRhICp2ID0gKGlzUmVwZWF0ZWQgPyBbKE5TQXJyYXkgKilhcnJh
eSBvYmplY3RBdEluZGV4OmpdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR1BC
R2V0TWVzc2FnZUJ5dGVzRmllbGQobWVzc2FnZSwgZmllbGQpKTsKLSAgICAgICAgQXBwZW5kQnVm
ZmVyQXNTdHJpbmcodiwgdG9TdHIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAg
Y2FzZSBHUEJEYXRhVHlwZUdyb3VwOgotICAgICAgY2FzZSBHUEJEYXRhVHlwZU1lc3NhZ2U6IHsK
LSAgICAgICAgR1BCTWVzc2FnZSAqdiA9Ci0gICAgICAgICAgICAoaXNSZXBlYXRlZCA/IFsoTlNB
cnJheSAqKWFycmF5IG9iamVjdEF0SW5kZXg6al0KLSAgICAgICAgICAgICAgICAgICAgICAgIDog
R1BCR2V0T2JqZWN0SXZhcldpdGhGaWVsZChtZXNzYWdlLCBmaWVsZCkpOwotICAgICAgICBbdG9T
dHIgYXBwZW5kRm9ybWF0OkAieyVAXG4iLCBsaW5lRW5kaW5nXTsKLSAgICAgICAgTlNTdHJpbmcg
KnN1YkluZGVudCA9IFtsaW5lSW5kZW50IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiICAiXTsK
LSAgICAgICAgQXBwZW5kVGV4dEZvcm1hdEZvck1lc3NhZ2UodiwgdG9TdHIsIHN1YkluZGVudCk7
Ci0gICAgICAgIFt0b1N0ciBhcHBlbmRGb3JtYXQ6QCIlQH0iLCBsaW5lSW5kZW50XTsKLSAgICAg
ICAgbGluZUVuZGluZyA9IEAiIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICB9ICAv
LyBzd2l0Y2goZmllbGREYXRhVHlwZSkKLQotICAgIC8vIEVuZCB0aGUgbGluZS4KLSAgICBbdG9T
dHIgYXBwZW5kRm9ybWF0OkAiJUBcbiIsIGxpbmVFbmRpbmddOwotCi0gIH0gIC8vIGZvcihjb3Vu
dCkKLX0KLQotc3RhdGljIHZvaWQgQXBwZW5kVGV4dEZvcm1hdEZvck1lc3NhZ2VFeHRlbnNpb25S
YW5nZShHUEJNZXNzYWdlICptZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOU0FycmF5ICphY3RpdmVFeHRlbnNpb25zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJFeHRlbnNp
b25SYW5nZSByYW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlNNdXRhYmxlU3RyaW5nICp0b1N0ciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmxpbmVJbmRlbnQpIHsK
LSAgdWludDMyX3Qgc3RhcnQgPSByYW5nZS5zdGFydDsKLSAgdWludDMyX3QgZW5kID0gcmFuZ2Uu
ZW5kOwotICBmb3IgKEdQQkV4dGVuc2lvbkRlc2NyaXB0b3IgKmV4dGVuc2lvbiBpbiBhY3RpdmVF
eHRlbnNpb25zKSB7Ci0gICAgdWludDMyX3QgZmllbGROdW1iZXIgPSBleHRlbnNpb24uZmllbGRO
dW1iZXI7Ci0gICAgaWYgKGZpZWxkTnVtYmVyIDwgc3RhcnQpIHsKLSAgICAgIC8vIE5vdCB0aGVy
ZSB5ZXQuCi0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYgKGZpZWxkTnVtYmVyID4gZW5k
KSB7Ci0gICAgICAvLyBEb25lLgotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWQgcmF3RXh0
VmFsdWUgPSBbbWVzc2FnZSBnZXRFeHRlbnNpb246ZXh0ZW5zaW9uXTsKLSAgICBCT09MIGlzUmVw
ZWF0ZWQgPSBleHRlbnNpb24uaXNSZXBlYXRlZDsKLQotICAgIE5TVUludGVnZXIgbnVtVmFsdWVz
ID0gMTsKLSAgICBOU1N0cmluZyAqbGluZUVuZGluZyA9IEAiIjsKLSAgICBpZiAoaXNSZXBlYXRl
ZCkgewotICAgICAgbnVtVmFsdWVzID0gWyhOU0FycmF5ICopcmF3RXh0VmFsdWUgY291bnRdOwot
ICAgIH0KLQotICAgIE5TU3RyaW5nICpzaW5nbGV0b25OYW1lID0gZXh0ZW5zaW9uLnNpbmdsZXRv
bk5hbWU7Ci0gICAgaWYgKG51bVZhbHVlcyA9PSAxKSB7Ci0gICAgICBsaW5lRW5kaW5nID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIgICMgWyVAXSIsIHNpbmdsZXRvbk5hbWVdOwotICAg
IH0gZWxzZSB7Ci0gICAgICBbdG9TdHIgYXBwZW5kRm9ybWF0OkAiJUAjIFslQF1cbiIsIGxpbmVJ
bmRlbnQsIHNpbmdsZXRvbk5hbWVdOwotICAgIH0KLQotICAgIEdQQkRhdGFUeXBlIGV4dERhdGFU
eXBlID0gZXh0ZW5zaW9uLmRhdGFUeXBlOwotICAgIGZvciAoTlNVSW50ZWdlciBqID0gMDsgaiA8
IG51bVZhbHVlczsgKytqKSB7Ci0gICAgICBpZCBjdXJWYWx1ZSA9IChpc1JlcGVhdGVkID8gW3Jh
d0V4dFZhbHVlIG9iamVjdEF0SW5kZXg6al0gOiByYXdFeHRWYWx1ZSk7Ci0KLSAgICAgIC8vIFN0
YXJ0IHRoZSBsaW5lLgotICAgICAgW3RvU3RyIGFwcGVuZEZvcm1hdDpAIiVAJXUlcyAiLCBsaW5l
SW5kZW50LCBmaWVsZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKEdQQkRhdGFU
eXBlSXNNZXNzYWdlKGV4dERhdGFUeXBlKSA/ICIiIDogIjoiKV07Ci0KLSAgICAgIC8vIFRoZSB2
YWx1ZS4KLSAgICAgIHN3aXRjaCAoZXh0RGF0YVR5cGUpIHsKLSNkZWZpbmUgRklFTERfQ0FTRShH
UEJEQVRBVFlQRSwgQ1RZUEUsIE5VTVNFTEVDVE9SLCAuLi4pIFwKLSAgY2FzZSBHUEJEYXRhVHlw
ZSMjR1BCREFUQVRZUEU6IHsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVFlQRSB2ID0g
WyhOU051bWJlciAqKWN1clZhbHVlIE5VTVNFTEVDVE9SXTsgICAgICAgIFwKLSAgICBbdG9TdHIg
YXBwZW5kRm9ybWF0Ol9fVkFfQVJHU19fLCB2XTsgICAgICAgICAgICAgICAgIFwKLSAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQot
Ci0gICAgICAgIEZJRUxEX0NBU0UoSW50MzIsIGludDMyX3QsIGludFZhbHVlLCBAIiVkIikKLSAg
ICAgICAgRklFTERfQ0FTRShTSW50MzIsIGludDMyX3QsIGludFZhbHVlLCBAIiVkIikKLSAgICAg
ICAgRklFTERfQ0FTRShTRml4ZWQzMiwgaW50MzJfdCwgdW5zaWduZWRJbnRWYWx1ZSwgQCIlZCIp
Ci0gICAgICAgIEZJRUxEX0NBU0UoVUludDMyLCB1aW50MzJfdCwgdW5zaWduZWRJbnRWYWx1ZSwg
QCIldSIpCi0gICAgICAgIEZJRUxEX0NBU0UoRml4ZWQzMiwgdWludDMyX3QsIHVuc2lnbmVkSW50
VmFsdWUsIEAiJXUiKQotICAgICAgICBGSUVMRF9DQVNFKEludDY0LCBpbnQ2NF90LCBsb25nTG9u
Z1ZhbHVlLCBAIiVsbGQiKQotICAgICAgICBGSUVMRF9DQVNFKFNJbnQ2NCwgaW50NjRfdCwgbG9u
Z0xvbmdWYWx1ZSwgQCIlbGxkIikKLSAgICAgICAgRklFTERfQ0FTRShTRml4ZWQ2NCwgaW50NjRf
dCwgbG9uZ0xvbmdWYWx1ZSwgQCIlbGxkIikKLSAgICAgICAgRklFTERfQ0FTRShVSW50NjQsIHVp
bnQ2NF90LCB1bnNpZ25lZExvbmdMb25nVmFsdWUsIEAiJWxsdSIpCi0gICAgICAgIEZJRUxEX0NB
U0UoRml4ZWQ2NCwgdWludDY0X3QsIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZSwgQCIlbGx1IikKLSAg
ICAgICAgRklFTERfQ0FTRShGbG9hdCwgZmxvYXQsIGZsb2F0VmFsdWUsIEAiJS4qZyIsIEZMVF9E
SUcpCi0gICAgICAgIEZJRUxEX0NBU0UoRG91YmxlLCBkb3VibGUsIGRvdWJsZVZhbHVlLCBAIiUu
KmxnIiwgREJMX0RJRykKLSAgICAgICAgLy8gVE9ETzogQWRkIGEgY29tbWVudCB3aXRoIHRoZSBl
bnVtIG5hbWUgZnJvbSBlbnVtIGRlc2NyaXB0b3JzCi0gICAgICAgIC8vIChtaWdodCBub3QgYmUg
cmVhbCB2YWx1ZSwgc28gbGVhdmUgaXQgYXMgYSBjb21tZW50LCBPYmpDIGNvbXBpbGVyCi0gICAg
ICAgIC8vIG5hbWUgbWFuZ2xlcyBkaWZmZXJlbnRseSkuICBEb2Vzbid0IGxvb2sgbGlrZSB3ZSBh
Y3R1YWxseSBnZW5lcmF0ZQotICAgICAgICAvLyBhbiBlbnVtIGRlc2NyaXB0b3IgcmVmZXJlbmNl
IGxpa2Ugd2UgZG8gZm9yIG5vcm1hbCBmaWVsZHMsIHNvIHRoaXMKLSAgICAgICAgLy8gd2lsbCB0
YWtlIGEgY29tcGlsZXIgY2hhbmdlLgotICAgICAgICBGSUVMRF9DQVNFKEVudW0sIGludDMyX3Qs
IGludFZhbHVlLCBAIiVkIikKLQotI3VuZGVmIEZJRUxEX0NBU0UKLQotICAgICAgICBjYXNlIEdQ
QkRhdGFUeXBlQm9vbDoKLSAgICAgICAgICBbdG9TdHIgYXBwZW5kU3RyaW5nOihbKE5TTnVtYmVy
ICopY3VyVmFsdWUgYm9vbFZhbHVlXSA/IEAidHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEAiZmFsc2UiKV07Ci0g
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZVN0cmluZzoKLSAgICAg
ICAgICBBcHBlbmRTdHJpbmdFc2NhcGVkKGN1clZhbHVlLCB0b1N0cik7Ci0gICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBHUEJEYXRhVHlwZUJ5dGVzOgotICAgICAgICAgIEFwcGVuZEJ1
ZmZlckFzU3RyaW5nKChOU0RhdGEgKiljdXJWYWx1ZSwgdG9TdHIpOwotICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgR1BCRGF0YVR5cGVHcm91cDoKLSAgICAgICAgY2FzZSBHUEJEYXRh
VHlwZU1lc3NhZ2U6IHsKLSAgICAgICAgICBbdG9TdHIgYXBwZW5kRm9ybWF0OkAieyVAXG4iLCBs
aW5lRW5kaW5nXTsKLSAgICAgICAgICBOU1N0cmluZyAqc3ViSW5kZW50ID0gW2xpbmVJbmRlbnQg
c3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIgICJdOwotICAgICAgICAgIEFwcGVuZFRleHRGb3Jt
YXRGb3JNZXNzYWdlKGN1clZhbHVlLCB0b1N0ciwgc3ViSW5kZW50KTsKLSAgICAgICAgICBbdG9T
dHIgYXBwZW5kRm9ybWF0OkAiJUB9IiwgbGluZUluZGVudF07Ci0gICAgICAgICAgbGluZUVuZGlu
ZyA9IEAiIjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICB9ICAvLyBzd2l0
Y2goZXh0RGF0YVR5cGUpCi0KLSAgICB9ICAvLyAgZm9yKG51bVZhbHVlcykKLQotICAgIC8vIEVu
ZCB0aGUgbGluZS4KLSAgICBbdG9TdHIgYXBwZW5kRm9ybWF0OkAiJUBcbiIsIGxpbmVFbmRpbmdd
OwotCi0gIH0gIC8vIGZvci4uaW4oYWN0aXZlRXh0ZW5zaW9ucykKLX0KLQotc3RhdGljIHZvaWQg
QXBwZW5kVGV4dEZvcm1hdEZvck1lc3NhZ2UoR1BCTWVzc2FnZSAqbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTXV0YWJsZVN0cmluZyAqdG9TdHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAqbGluZUluZGVu
dCkgewotICBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gW21lc3NhZ2UgZGVzY3JpcHRvcl07
Ci0gIE5TQXJyYXkgKmZpZWxkc0FycmF5ID0gZGVzY3JpcHRvci0+ZmllbGRzXzsKLSAgTlNVSW50
ZWdlciBmaWVsZENvdW50ID0gZmllbGRzQXJyYXkuY291bnQ7Ci0gIGNvbnN0IEdQQkV4dGVuc2lv
blJhbmdlICpleHRlbnNpb25SYW5nZXMgPSBkZXNjcmlwdG9yLmV4dGVuc2lvblJhbmdlczsKLSAg
TlNVSW50ZWdlciBleHRlbnNpb25SYW5nZXNDb3VudCA9IGRlc2NyaXB0b3IuZXh0ZW5zaW9uUmFu
Z2VzQ291bnQ7Ci0gIE5TQXJyYXkgKmFjdGl2ZUV4dGVuc2lvbnMgPSBbbWVzc2FnZSBzb3J0ZWRF
eHRlbnNpb25zSW5Vc2VdOwotICBmb3IgKE5TVUludGVnZXIgaSA9IDAsIGogPSAwOyBpIDwgZmll
bGRDb3VudCB8fCBqIDwgZXh0ZW5zaW9uUmFuZ2VzQ291bnQ7KSB7Ci0gICAgaWYgKGkgPT0gZmll
bGRDb3VudCkgewotICAgICAgQXBwZW5kVGV4dEZvcm1hdEZvck1lc3NhZ2VFeHRlbnNpb25SYW5n
ZSgKLSAgICAgICAgICBtZXNzYWdlLCBhY3RpdmVFeHRlbnNpb25zLCBleHRlbnNpb25SYW5nZXNb
aisrXSwgdG9TdHIsIGxpbmVJbmRlbnQpOwotICAgIH0gZWxzZSBpZiAoaiA9PSBleHRlbnNpb25S
YW5nZXNDb3VudCB8fAotICAgICAgICAgICAgICAgR1BCRmllbGROdW1iZXIoZmllbGRzQXJyYXlb
aV0pIDwgZXh0ZW5zaW9uUmFuZ2VzW2pdLnN0YXJ0KSB7Ci0gICAgICBBcHBlbmRUZXh0Rm9ybWF0
Rm9yTWVzc2FnZUZpZWxkKG1lc3NhZ2UsIGZpZWxkc0FycmF5W2krK10sIHRvU3RyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSW5kZW50KTsKLSAgICB9IGVsc2Ug
ewotICAgICAgQXBwZW5kVGV4dEZvcm1hdEZvck1lc3NhZ2VFeHRlbnNpb25SYW5nZSgKLSAgICAg
ICAgICBtZXNzYWdlLCBhY3RpdmVFeHRlbnNpb25zLCBleHRlbnNpb25SYW5nZXNbaisrXSwgdG9T
dHIsIGxpbmVJbmRlbnQpOwotICAgIH0KLSAgfQotCi0gIE5TU3RyaW5nICp1bmtub3duRmllbGRz
U3RyID0KLSAgICAgIEdQQlRleHRGb3JtYXRGb3JVbmtub3duRmllbGRTZXQobWVzc2FnZS51bmtu
b3duRmllbGRzLCBsaW5lSW5kZW50KTsKLSAgaWYgKFt1bmtub3duRmllbGRzU3RyIGxlbmd0aF0g
PiAwKSB7Ci0gICAgW3RvU3RyIGFwcGVuZEZvcm1hdDpAIiVAIyAtLS0gVW5rbm93biBmaWVsZHMg
LS0tXG4iLCBsaW5lSW5kZW50XTsKLSAgICBbdG9TdHIgYXBwZW5kU3RyaW5nOnVua25vd25GaWVs
ZHNTdHJdOwotICB9Ci19Ci0KLU5TU3RyaW5nICpHUEJUZXh0Rm9ybWF0Rm9yTWVzc2FnZShHUEJN
ZXNzYWdlICptZXNzYWdlLCBOU1N0cmluZyAqbGluZUluZGVudCkgewotICBpZiAobWVzc2FnZSA9
PSBuaWwpIHJldHVybiBAIiI7Ci0gIGlmIChsaW5lSW5kZW50ID09IG5pbCkgbGluZUluZGVudCA9
IEAiIjsKLQotICBOU011dGFibGVTdHJpbmcgKmJ1aWxkU3RyaW5nID0gW05TTXV0YWJsZVN0cmlu
ZyBzdHJpbmddOwotICBBcHBlbmRUZXh0Rm9ybWF0Rm9yTWVzc2FnZShtZXNzYWdlLCBidWlsZFN0
cmluZywgbGluZUluZGVudCk7Ci0gIHJldHVybiBidWlsZFN0cmluZzsKLX0KLQotTlNTdHJpbmcg
KkdQQlRleHRGb3JtYXRGb3JVbmtub3duRmllbGRTZXQoR1BCVW5rbm93bkZpZWxkU2V0ICp1bmtu
b3duU2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTdHJp
bmcgKmxpbmVJbmRlbnQpIHsKLSAgaWYgKHVua25vd25TZXQgPT0gbmlsKSByZXR1cm4gQCIiOwot
ICBpZiAobGluZUluZGVudCA9PSBuaWwpIGxpbmVJbmRlbnQgPSBAIiI7Ci0KLSAgTlNNdXRhYmxl
U3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107Ci0gIGZvciAoR1BCVW5r
bm93bkZpZWxkICpmaWVsZCBpbiBbdW5rbm93blNldCBzb3J0ZWRGaWVsZHNdKSB7Ci0gICAgaW50
MzJfdCBmaWVsZE51bWJlciA9IFtmaWVsZCBudW1iZXJdOwotCi0jZGVmaW5lIFBSSU5UX0xPT1Ao
UFJPUE5BTUUsIENUWVBFLCBGT1JNQVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIFtmaWVsZC5QUk9QTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbnVtZXJhdGVWYWx1ZXNXaXRoQmxv
Y2s6XihDVFlQRSB2YWx1ZSwgTlNVSW50ZWdlciBpZHgsIEJPT0wgKiBzdG9wKSB7ICBcCi0gICAg
X1ByYWdtYSgidW51c2VkKGlkeCwgc3RvcCkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgW3Jlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGFwcGVu
ZEZvcm1hdDpAIiVAJWQ6ICIgI0ZPUk1BVCAiXG4iLCBsaW5lSW5kZW50LCBmaWVsZE51bWJlciwg
dmFsdWVdOyBcCi0gICAgICB9XTsKLQotICAgIFBSSU5UX0xPT1AodmFyaW50TGlzdCwgdWludDY0
X3QsICVsbHUpOwotICAgIFBSSU5UX0xPT1AoZml4ZWQzMkxpc3QsIHVpbnQzMl90LCAweCVYKTsK
LSAgICBQUklOVF9MT09QKGZpeGVkNjRMaXN0LCB1aW50NjRfdCwgMHglbGxYKTsKLQotI3VuZGVm
IFBSSU5UX0xPT1AKLQotICAgIC8vIE5PVEU6IEMrKyB2ZXJzaW9uIG9mIFRleHRGb3JtYXQgdHJp
ZXMgdG8gcGFyc2UgdGhpcyBhcyBhIG1lc3NhZ2UKLSAgICAvLyBhbmQgcHJpbnQgdGhhdCBpZiBp
dCBzdWNjZWVkcy4KLSAgICBmb3IgKE5TRGF0YSAqZGF0YSBpbiBmaWVsZC5sZW5ndGhEZWxpbWl0
ZWRMaXN0KSB7Ci0gICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVAJWQ6ICIsIGxpbmVJbmRl
bnQsIGZpZWxkTnVtYmVyXTsKLSAgICAgIEFwcGVuZEJ1ZmZlckFzU3RyaW5nKGRhdGEsIHJlc3Vs
dCk7Ci0gICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIlxuIl07Ci0gICAgfQotCi0gICAgZm9y
IChHUEJVbmtub3duRmllbGRTZXQgKnN1YlVua25vd25TZXQgaW4gZmllbGQuZ3JvdXBMaXN0KSB7
Ci0gICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVAJWQ6IHtcbiIsIGxpbmVJbmRlbnQsIGZp
ZWxkTnVtYmVyXTsKLSAgICAgIE5TU3RyaW5nICpzdWJJbmRlbnQgPSBbbGluZUluZGVudCBzdHJp
bmdCeUFwcGVuZGluZ1N0cmluZzpAIiAgIl07Ci0gICAgICBOU1N0cmluZyAqc3ViVW5rbndvblNl
dFN0ciA9Ci0gICAgICAgICAgR1BCVGV4dEZvcm1hdEZvclVua25vd25GaWVsZFNldChzdWJVbmtu
b3duU2V0LCBzdWJJbmRlbnQpOwotICAgICAgW3Jlc3VsdCBhcHBlbmRTdHJpbmc6c3ViVW5rbndv
blNldFN0cl07Ci0gICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVAfVxuIiwgbGluZUluZGVu
dF07Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEhlbHBlcnMgdG8gZGVj
b2RlIGEgdmFyaW50LiBOb3QgdXNpbmcgR1BCQ29kZWRJbnB1dFN0cmVhbSB2ZXJzaW9uIGJlY2F1
c2UKLS8vIHRoYXQgbmVlZHMgYSBzdGF0ZSBvYmplY3QsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGNy
ZWF0ZSBhbiBpbnB1dCBzdHJlYW0gb3V0Ci0vLyBvZiB0aGUgZGF0YS4KLUdQQl9JTkxJTkUgaW50
OF90IFJlYWRSYXdCeXRlRnJvbURhdGEoY29uc3QgdWludDhfdCAqKmRhdGEpIHsKLSAgaW50OF90
IHJlc3VsdCA9ICooKGludDhfdCAqKSgqZGF0YSkpOwotICArKygqZGF0YSk7Ci0gIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IFJlYWRSYXdWYXJpbnQzMkZyb21EYXRhKGNvbnN0
IHVpbnQ4X3QgKipkYXRhKSB7Ci0gIGludDhfdCB0bXAgPSBSZWFkUmF3Qnl0ZUZyb21EYXRhKGRh
dGEpOwotICBpZiAodG1wID49IDApIHsKLSAgICByZXR1cm4gdG1wOwotICB9Ci0gIGludDMyX3Qg
cmVzdWx0ID0gdG1wICYgMHg3ZjsKLSAgaWYgKCh0bXAgPSBSZWFkUmF3Qnl0ZUZyb21EYXRhKGRh
dGEpKSA+PSAwKSB7Ci0gICAgcmVzdWx0IHw9IHRtcCA8PCA3OwotICB9IGVsc2UgewotICAgIHJl
c3VsdCB8PSAodG1wICYgMHg3ZikgPDwgNzsKLSAgICBpZiAoKHRtcCA9IFJlYWRSYXdCeXRlRnJv
bURhdGEoZGF0YSkpID49IDApIHsKLSAgICAgIHJlc3VsdCB8PSB0bXAgPDwgMTQ7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHJlc3VsdCB8PSAodG1wICYgMHg3ZikgPDwgMTQ7Ci0gICAgICBpZiAoKHRt
cCA9IFJlYWRSYXdCeXRlRnJvbURhdGEoZGF0YSkpID49IDApIHsKLSAgICAgICAgcmVzdWx0IHw9
IHRtcCA8PCAyMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCB8PSAodG1wICYgMHg3
ZikgPDwgMjE7Ci0gICAgICAgIHJlc3VsdCB8PSAodG1wID0gUmVhZFJhd0J5dGVGcm9tRGF0YShk
YXRhKSkgPDwgMjg7Ci0gICAgICAgIGlmICh0bXAgPCAwKSB7Ci0gICAgICAgICAgLy8gRGlzY2Fy
ZCB1cHBlciAzMiBiaXRzLgotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7
Ci0gICAgICAgICAgICBpZiAoUmVhZFJhd0J5dGVGcm9tRGF0YShkYXRhKSA+PSAwKSB7Ci0gICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAg
ICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU1BhcnNlRXJyb3JFeGNlcHRpb24KLSAgICAgICAg
ICAgICAgICAgICAgICBmb3JtYXQ6QCJVbmFibGUgdG8gcmVhZCB2YXJpbnQzMiJdOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5TU3RyaW5n
ICpHUEJEZWNvZGVUZXh0Rm9ybWF0TmFtZShjb25zdCB1aW50OF90ICpkZWNvZGVEYXRhLCBpbnQz
Ml90IGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAqaW5w
dXRTdHIpIHsKLSAgLy8gZGVjb2REYXRhIGZvcm06Ci0gIC8vICB2YXJpbnQzMjogbnVtIGVudHJp
ZXMKLSAgLy8gIGZvciBlYWNoIGVudHJ5OgotICAvLyAgICB2YXJpbnQzMjoga2V5Ci0gIC8vICAg
IGJ5dGVzKjogZGVjb2RlIGRhdGEKLSAgLy8KLSAgLy8gZGVjb2RlIGRhdGEgb25lIG9mIHR3byBm
b3JtczoKLSAgLy8gIDE6IGEgXDAgZm9sbG93ZWQgYnkgdGhlIHN0cmluZyBmb2xsb3dlZCBieSBh
biBcMAotICAvLyAgMjogYnl0ZWNvZGVzIHRvIHRyYW5zZm9ybSBhbiBpbnB1dCBpbnRvIHRoZSBy
aWdodCB0aGluZywgZW5kaW5nIHdpdGggXDAKLSAgLy8KLSAgLy8gdGhlIGJ5dGVzIGNvZGVzIGFy
ZSBvZiB0aGUgZm9ybToKLSAgLy8gIDB4YWJiY2NjY2MKLSAgLy8gIDB4MCAoYWxsIHplcm9zKSwg
ZW5kLgotICAvLyAgYSAtIGlmIHNldCwgYWRkIGFuIHVuZGVyc2NvcmUKLSAgLy8gIGJiIC0gMDAg
Y2NjY2MgYnl0ZXMgYXMgaXMKLSAgLy8gIGJiIC0gMTAgY2NjY2MgdXBwZXIgZmlyc3QsIGFzIGlz
IG9uIHJlc3QsIGNjY2NjIGJ5dGUgdG90YWwKLSAgLy8gIGJiIC0gMDEgY2NjY2MgbG93ZXIgZmly
c3QsIGFzIGlzIG9uIHJlc3QsIGNjY2NjIGJ5dGUgdG90YWwKLSAgLy8gIGJiIC0gMTEgY2NjY2Mg
YWxsIHVwcGVyLCBjY2NjYyBieXRlIHRvdGFsCi0KLSAgaWYgKCFkZWNvZGVEYXRhIHx8ICFpbnB1
dFN0cikgewotICAgIHJldHVybiBuaWw7Ci0gIH0KLQotICAvLyBGaW5kIGtleQotICBjb25zdCB1
aW50OF90ICpzY2FuID0gZGVjb2RlRGF0YTsKLSAgaW50MzJfdCBudW1FbnRyaWVzID0gUmVhZFJh
d1ZhcmludDMyRnJvbURhdGEoJnNjYW4pOwotICBCT09MIGZvdW5kS2V5ID0gTk87Ci0gIHdoaWxl
ICghZm91bmRLZXkgJiYgKG51bUVudHJpZXMgPiAwKSkgewotICAgIC0tbnVtRW50cmllczsKLSAg
ICBpbnQzMl90IGRhdGFLZXkgPSBSZWFkUmF3VmFyaW50MzJGcm9tRGF0YSgmc2Nhbik7Ci0gICAg
aWYgKGRhdGFLZXkgPT0ga2V5KSB7Ci0gICAgICBmb3VuZEtleSA9IFlFUzsKLSAgICB9IGVsc2Ug
ewotICAgICAgLy8gSWYgaXQgaXMgYSBpbmxpbmVkIHN0cmluZywgaXQgd2lsbCBzdGFydCB3aXRo
IFwwOyBpZiBpdCBpcyBieXRlY29kZSBpdAotICAgICAgLy8gd2lsbCBzdGFydCB3aXRoIGEgY29k
ZS4gU28gYWR2YW5jZSBvbmUgKHNraXBwaW5nIHRoZSBpbmxpbmUgc3RyaW5nCi0gICAgICAvLyBt
YXJrZXIpLCBhbmQgdGhlbiBsb29wIHVudGlsIHJlYWNoaW5nIHRoZSBlbmQgbWFya2VyIChcMCku
Ci0gICAgICArK3NjYW47Ci0gICAgICB3aGlsZSAoKnNjYW4gIT0gMCkgKytzY2FuOwotICAgICAg
Ly8gTm93IG1vdmUgcGFzdCB0aGUgZW5kIG1hcmtlci4KLSAgICAgICsrc2NhbjsKLSAgICB9Ci0g
IH0KLQotICBpZiAoIWZvdW5kS2V5KSB7Ci0gICAgcmV0dXJuIG5pbDsKLSAgfQotCi0gIC8vIERl
Y29kZQotCi0gIGlmICgqc2NhbiA9PSAwKSB7Ci0gICAgLy8gSW5saW5lIHN0cmluZy4gTW92ZSBv
dmVyIHRoZSBtYXJrZXIsIGFuZCBOU1N0cmluZyBjYW4gdGFrZSBpdCBhcwotICAgIC8vIFVURjgu
Ci0gICAgKytzY2FuOwotICAgIE5TU3RyaW5nICpyZXN1bHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6KGNvbnN0IGNoYXIgKilzY2FuXTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9
Ci0KLSAgTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQgPQotICAgICAgW05TTXV0YWJsZVN0cmluZyBz
dHJpbmdXaXRoQ2FwYWNpdHk6W2lucHV0U3RyIGxlbmd0aF1dOwotCi0gIGNvbnN0IHVpbnQ4X3Qg
a0FkZFVuZGVyc2NvcmUgID0gMGIxMDAwMDAwMDsKLSAgY29uc3QgdWludDhfdCBrT3BNYXNrICAg
ICAgICAgPSAwYjAxMTAwMDAwOwotICAvLyBjb25zdCB1aW50OF90IGtPcEFzSXMgICAgICAgID0g
MGIwMDAwMDAwMDsKLSAgY29uc3QgdWludDhfdCBrT3BGaXJzdFVwcGVyICAgICA9IDBiMDEwMDAw
MDA7Ci0gIGNvbnN0IHVpbnQ4X3Qga09wRmlyc3RMb3dlciAgICAgPSAwYjAwMTAwMDAwOwotICBj
b25zdCB1aW50OF90IGtPcEFsbFVwcGVyICAgICAgID0gMGIwMTEwMDAwMDsKLSAgY29uc3QgdWlu
dDhfdCBrU2VnbWVudExlbk1hc2sgPSAwYjAwMDExMTExOwotCi0gIE5TSW50ZWdlciBpID0gMDsK
LSAgZm9yICg7ICpzY2FuICE9IDA7ICsrc2NhbikgewotICAgIGlmICgqc2NhbiAmIGtBZGRVbmRl
cnNjb3JlKSB7Ci0gICAgICBbcmVzdWx0IGFwcGVuZFN0cmluZzpAIl8iXTsKLSAgICB9Ci0gICAg
aW50IHNlZ21lbnRMZW4gPSAqc2NhbiAmIGtTZWdtZW50TGVuTWFzazsKLSAgICB1aW50OF90IGRl
Y29kZU9wID0gKnNjYW4gJiBrT3BNYXNrOwotCi0gICAgLy8gRG8gb3Agc3BlY2lmaWMgaGFuZGxp
bmcgb2YgdGhlIGZpcnN0IGNoYXJhY3Rlci4KLSAgICBpZiAoZGVjb2RlT3AgPT0ga09wRmlyc3RV
cHBlcikgewotICAgICAgdW5pY2hhciBjID0gW2lucHV0U3RyIGNoYXJhY3RlckF0SW5kZXg6aV07
Ci0gICAgICBbcmVzdWx0IGFwcGVuZEZvcm1hdDpAIiVjIiwgdG91cHBlcigoY2hhciljKV07Ci0g
ICAgICArK2k7Ci0gICAgICAtLXNlZ21lbnRMZW47Ci0gICAgfSBlbHNlIGlmIChkZWNvZGVPcCA9
PSBrT3BGaXJzdExvd2VyKSB7Ci0gICAgICB1bmljaGFyIGMgPSBbaW5wdXRTdHIgY2hhcmFjdGVy
QXRJbmRleDppXTsKLSAgICAgIFtyZXN1bHQgYXBwZW5kRm9ybWF0OkAiJWMiLCB0b2xvd2VyKChj
aGFyKWMpXTsKLSAgICAgICsraTsKLSAgICAgIC0tc2VnbWVudExlbjsKLSAgICB9Ci0gICAgLy8g
ZWxzZSBvcCA9PSBrT3BBc0lzIHx8IG9wID09IGtPcEFsbFVwcGVyCi0KLSAgICAvLyBOb3cgcHVs
bCBvdmVyIHRoZSByZXN0IG9mIHRoZSBsZW5ndGggZm9yIHRoaXMgc2VnbWVudC4KLSAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHNlZ21lbnRMZW47ICsreCkgewotICAgICAgdW5pY2hhciBjID0gW2lu
cHV0U3RyIGNoYXJhY3RlckF0SW5kZXg6KGkgKyB4KV07Ci0gICAgICBpZiAoZGVjb2RlT3AgPT0g
a09wQWxsVXBwZXIpIHsKLSAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlYyIsIHRvdXBw
ZXIoKGNoYXIpYyldOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgW3Jlc3VsdCBhcHBlbmRGb3Jt
YXQ6QCIlQyIsIGNdOwotICAgICAgfQotICAgIH0KLSAgICBpICs9IHNlZ21lbnRMZW47Ci0gIH0K
LQotICByZXR1cm4gcmVzdWx0OwotfQotCi0jcHJhZ21hIG1hcmsgLSBHUEJNZXNzYWdlU2lnbmF0
dXJlUHJvdG9jb2wKLQotLy8gQSBzZXJpZXMgb2Ygc2VsZWN0b3JzIHRoYXQgYXJlIHVzZWQgc29s
ZWx5IHRvIGdldCBAZW5jb2RpbmcgdmFsdWVzCi0vLyBmb3IgdGhlbSBieSB0aGUgZHluYW1pYyBw
cm90b2J1ZiBydW50aW1lIGNvZGUuIEFuIG9iamVjdCB1c2luZyB0aGUgcHJvdG9jb2wKLS8vIG5l
ZWRzIHRvIGJlIGRlY2xhcmVkIGZvciB0aGUgcHJvdG9jb2wgdG8gYmUgdmFsaWQgYXQgcnVudGlt
ZS4KLUBpbnRlcmZhY2UgR1BCTWVzc2FnZVNpZ25hdHVyZVByb3RvY29sIDogTlNPYmplY3Q8R1BC
TWVzc2FnZVNpZ25hdHVyZVByb3RvY29sPgotQGVuZAotQGltcGxlbWVudGF0aW9uIEdQQk1lc3Nh
Z2VTaWduYXR1cmVQcm90b2NvbAotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlV0aWxp
dGllc19QYWNrYWdlUHJpdmF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQlV0aWxpdGllc19QYWNrYWdlUHJp
dmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmI2Yzg0ZDk4ODA2NGM1ZThm
MWQ5MGFiNzI0MGE3NWMxZGY2M2RmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJVdGlsaXRpZXNfUGFja2FnZVByaXZhdGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgIkdQ
QlV0aWxpdGllcy5oIgotCi0jaW1wb3J0ICJHUEJEZXNjcmlwdG9yX1BhY2thZ2VQcml2YXRlLmgi
Ci0KLS8vIE1hY3JvcyBmb3Igc3RyaW5naWZ5aW5nIGxpYnJhcnkgc3ltYm9scy4gVGhlc2UgYXJl
IHVzZWQgaW4gdGhlIGdlbmVyYXRlZAotLy8gUEIgZGVzY3JpcHRvciBjbGFzc2VzIHdoZXJldmVy
IGEgbGlicmFyeSBzeW1ib2wgbmFtZSBpcyByZXByZXNlbnRlZCBhcyBhCi0vLyBzdHJpbmcuIFNl
ZSBSRUFETUUuZ29vZ2xlIGZvciBtb3JlIGluZm9ybWF0aW9uLgotI2RlZmluZSBHUEJTdHJpbmdp
ZnkoUykgI1MKLSNkZWZpbmUgR1BCU3RyaW5naWZ5U3ltYm9sKFMpIEdQQlN0cmluZ2lmeShTKQot
Ci0jZGVmaW5lIEdQQk5TU3RyaW5naWZ5KFMpIEAjUwotI2RlZmluZSBHUEJOU1N0cmluZ2lmeVN5
bWJvbChTKSBHUEJOU1N0cmluZ2lmeShTKQotCi0vLyBDb25zdGFudCB0byBpbnRlcm5hbGx5IG1h
cmsgd2hlbiB0aGVyZSBpcyBubyBoYXMgYml0LgotI2RlZmluZSBHUEJOb0hhc0JpdCBJTlQzMl9N
QVgKLQotQ0ZfRVhURVJOX0NfQkVHSU4KLQotLy8gVGhlc2UgdHdvIGFyZSB1c2VkIHRvIGluamVj
dCBhIHJ1bnRpbWUgY2hlY2sgZm9yIHZlcnNpb24gbWlzbWF0Y2ggaW50byB0aGUKLS8vIGdlbmVy
YXRlZCBzb3VyY2VzIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBsaW5rZWQgd2l0aCBhIHN1cHBvcnRp
bmcgcnVudGltZS4KLXZvaWQgR1BCQ2hlY2tSdW50aW1lVmVyc2lvbkludGVybmFsKGludDMyX3Qg
dmVyc2lvbik7Ci1HUEJfSU5MSU5FIHZvaWQgR1BCRGVidWdDaGVja1J1bnRpbWVWZXJzaW9uKCkg
ewotI2lmIERFQlVHCi0gIEdQQkNoZWNrUnVudGltZVZlcnNpb25JbnRlcm5hbChHT09HTEVfUFJP
VE9CVUZfT0JKQ19HRU5fVkVSU0lPTik7Ci0jZW5kaWYKLX0KLQotLy8gQ29udmVyc2lvbiBmdW5j
dGlvbnMgZm9yIGRlL3NlcmlhbGl6aW5nIGZsb2F0aW5nIHBvaW50IHR5cGVzLgotCi1HUEJfSU5M
SU5FIGludDY0X3QgR1BCQ29udmVydERvdWJsZVRvSW50NjQoZG91YmxlIHYpIHsKLSAgdW5pb24g
eyBkb3VibGUgZjsgaW50NjRfdCBpOyB9IHU7Ci0gIHUuZiA9IHY7Ci0gIHJldHVybiB1Lmk7Ci19
Ci0KLUdQQl9JTkxJTkUgaW50MzJfdCBHUEJDb252ZXJ0RmxvYXRUb0ludDMyKGZsb2F0IHYpIHsK
LSAgdW5pb24geyBmbG9hdCBmOyBpbnQzMl90IGk7IH0gdTsKLSAgdS5mID0gdjsKLSAgcmV0dXJu
IHUuaTsKLX0KLQotR1BCX0lOTElORSBkb3VibGUgR1BCQ29udmVydEludDY0VG9Eb3VibGUoaW50
NjRfdCB2KSB7Ci0gIHVuaW9uIHsgZG91YmxlIGY7IGludDY0X3QgaTsgfSB1OwotICB1LmkgPSB2
OwotICByZXR1cm4gdS5mOwotfQotCi1HUEJfSU5MSU5FIGZsb2F0IEdQQkNvbnZlcnRJbnQzMlRv
RmxvYXQoaW50MzJfdCB2KSB7Ci0gIHVuaW9uIHsgZmxvYXQgZjsgaW50MzJfdCBpOyB9IHU7Ci0g
IHUuaSA9IHY7Ci0gIHJldHVybiB1LmY7Ci19Ci0KLUdQQl9JTkxJTkUgaW50MzJfdCBHUEJMb2dp
Y2FsUmlnaHRTaGlmdDMyKGludDMyX3QgdmFsdWUsIGludDMyX3Qgc3BhY2VzKSB7Ci0gIHJldHVy
biAoaW50MzJfdCkoKHVpbnQzMl90KSh2YWx1ZSkgPj4gc3BhY2VzKTsKLX0KLQotR1BCX0lOTElO
RSBpbnQ2NF90IEdQQkxvZ2ljYWxSaWdodFNoaWZ0NjQoaW50NjRfdCB2YWx1ZSwgaW50MzJfdCBz
cGFjZXMpIHsKLSAgcmV0dXJuIChpbnQ2NF90KSgodWludDY0X3QpKHZhbHVlKSA+PiBzcGFjZXMp
OwotfQotCi0vLyBEZWNvZGUgYSBaaWdaYWctZW5jb2RlZCAzMi1iaXQgdmFsdWUuICBaaWdaYWcg
ZW5jb2RlcyBzaWduZWQgaW50ZWdlcnMKLS8vIGludG8gdmFsdWVzIHRoYXQgY2FuIGJlIGVmZmlj
aWVudGx5IGVuY29kZWQgd2l0aCB2YXJpbnQuICAoT3RoZXJ3aXNlLAotLy8gbmVnYXRpdmUgdmFs
dWVzIG11c3QgYmUgc2lnbi1leHRlbmRlZCB0byA2NCBiaXRzIHRvIGJlIHZhcmludCBlbmNvZGVk
LAotLy8gdGh1cyBhbHdheXMgdGFraW5nIDEwIGJ5dGVzIG9uIHRoZSB3aXJlLikKLUdQQl9JTkxJ
TkUgaW50MzJfdCBHUEJEZWNvZGVaaWdaYWczMih1aW50MzJfdCBuKSB7Ci0gIHJldHVybiBHUEJM
b2dpY2FsUmlnaHRTaGlmdDMyKG4sIDEpIF4gLShuICYgMSk7Ci19Ci0KLS8vIERlY29kZSBhIFpp
Z1phZy1lbmNvZGVkIDY0LWJpdCB2YWx1ZS4gIFppZ1phZyBlbmNvZGVzIHNpZ25lZCBpbnRlZ2Vy
cwotLy8gaW50byB2YWx1ZXMgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgZW5jb2RlZCB3aXRoIHZh
cmludC4gIChPdGhlcndpc2UsCi0vLyBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSBzaWduLWV4dGVu
ZGVkIHRvIDY0IGJpdHMgdG8gYmUgdmFyaW50IGVuY29kZWQsCi0vLyB0aHVzIGFsd2F5cyB0YWtp
bmcgMTAgYnl0ZXMgb24gdGhlIHdpcmUuKQotR1BCX0lOTElORSBpbnQ2NF90IEdQQkRlY29kZVpp
Z1phZzY0KHVpbnQ2NF90IG4pIHsKLSAgcmV0dXJuIEdQQkxvZ2ljYWxSaWdodFNoaWZ0NjQobiwg
MSkgXiAtKG4gJiAxKTsKLX0KLQotLy8gRW5jb2RlIGEgWmlnWmFnLWVuY29kZWQgMzItYml0IHZh
bHVlLiAgWmlnWmFnIGVuY29kZXMgc2lnbmVkIGludGVnZXJzCi0vLyBpbnRvIHZhbHVlcyB0aGF0
IGNhbiBiZSBlZmZpY2llbnRseSBlbmNvZGVkIHdpdGggdmFyaW50LiAgKE90aGVyd2lzZSwKLS8v
IG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyB0byBiZSB2
YXJpbnQgZW5jb2RlZCwKLS8vIHRodXMgYWx3YXlzIHRha2luZyAxMCBieXRlcyBvbiB0aGUgd2ly
ZS4pCi1HUEJfSU5MSU5FIHVpbnQzMl90IEdQQkVuY29kZVppZ1phZzMyKGludDMyX3Qgbikgewot
ICAvLyBOb3RlOiAgdGhlIHJpZ2h0LXNoaWZ0IG11c3QgYmUgYXJpdGhtZXRpYwotICByZXR1cm4g
KG4gPDwgMSkgXiAobiA+PiAzMSk7Ci19Ci0KLS8vIEVuY29kZSBhIFppZ1phZy1lbmNvZGVkIDY0
LWJpdCB2YWx1ZS4gIFppZ1phZyBlbmNvZGVzIHNpZ25lZCBpbnRlZ2VycwotLy8gaW50byB2YWx1
ZXMgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgZW5jb2RlZCB3aXRoIHZhcmludC4gIChPdGhlcndp
c2UsCi0vLyBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSBzaWduLWV4dGVuZGVkIHRvIDY0IGJpdHMg
dG8gYmUgdmFyaW50IGVuY29kZWQsCi0vLyB0aHVzIGFsd2F5cyB0YWtpbmcgMTAgYnl0ZXMgb24g
dGhlIHdpcmUuKQotR1BCX0lOTElORSB1aW50NjRfdCBHUEJFbmNvZGVaaWdaYWc2NChpbnQ2NF90
IG4pIHsKLSAgLy8gTm90ZTogIHRoZSByaWdodC1zaGlmdCBtdXN0IGJlIGFyaXRobWV0aWMKLSAg
cmV0dXJuIChuIDw8IDEpIF4gKG4gPj4gNjMpOwotfQotCi1HUEJfSU5MSU5FIEJPT0wgR1BCRGF0
YVR5cGVJc09iamVjdChHUEJEYXRhVHlwZSB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAg
IGNhc2UgR1BCRGF0YVR5cGVCeXRlczoKLSAgICBjYXNlIEdQQkRhdGFUeXBlU3RyaW5nOgotICAg
IGNhc2UgR1BCRGF0YVR5cGVNZXNzYWdlOgotICAgIGNhc2UgR1BCRGF0YVR5cGVHcm91cDoKLSAg
ICAgIHJldHVybiBZRVM7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBOTzsKLSAgfQotfQot
Ci1HUEJfSU5MSU5FIEJPT0wgR1BCRGF0YVR5cGVJc01lc3NhZ2UoR1BCRGF0YVR5cGUgdHlwZSkg
ewotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdQQkRhdGFUeXBlTWVzc2FnZToKLSAgICBj
YXNlIEdQQkRhdGFUeXBlR3JvdXA6Ci0gICAgICByZXR1cm4gWUVTOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICByZXR1cm4gTk87Ci0gIH0KLX0KLQotR1BCX0lOTElORSBCT09MIEdQQkZpZWxkRGF0YVR5
cGVJc01lc3NhZ2UoR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICByZXR1cm4gR1BCRGF0
YVR5cGVJc01lc3NhZ2UoZmllbGQtPmRlc2NyaXB0aW9uXy0+ZGF0YVR5cGUpOwotfQotCi1HUEJf
SU5MSU5FIEJPT0wgR1BCRmllbGREYXRhVHlwZUlzT2JqZWN0KEdQQkZpZWxkRGVzY3JpcHRvciAq
ZmllbGQpIHsKLSAgcmV0dXJuIEdQQkRhdGFUeXBlSXNPYmplY3QoZmllbGQtPmRlc2NyaXB0aW9u
Xy0+ZGF0YVR5cGUpOwotfQotCi1HUEJfSU5MSU5FIEJPT0wgR1BCRXh0ZW5zaW9uSXNNZXNzYWdl
KEdQQkV4dGVuc2lvbkRlc2NyaXB0b3IgKmV4dCkgewotICByZXR1cm4gR1BCRGF0YVR5cGVJc01l
c3NhZ2UoZXh0LT5kZXNjcmlwdGlvbl8tPmRhdGFUeXBlKTsKLX0KLQotLy8gVGhlIGZpZWxkIGlz
IGFuIGFycmF5L21hcCBvciBpdCBoYXMgYW4gb2JqZWN0IHZhbHVlLgotR1BCX0lOTElORSBCT09M
IEdQQkZpZWxkU3RvcmVzT2JqZWN0KEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQpIHsKLSAgR1BC
TWVzc2FnZUZpZWxkRGVzY3JpcHRpb24gKmRlc2MgPSBmaWVsZC0+ZGVzY3JpcHRpb25fOwotICBp
ZiAoKGRlc2MtPmZsYWdzICYgKEdQQkZpZWxkUmVwZWF0ZWQgfCBHUEJGaWVsZE1hcEtleU1hc2sp
KSAhPSAwKSB7Ci0gICAgcmV0dXJuIFlFUzsKLSAgfQotICByZXR1cm4gR1BCRGF0YVR5cGVJc09i
amVjdChkZXNjLT5kYXRhVHlwZSk7Ci19Ci0KLUJPT0wgR1BCR2V0SGFzSXZhcihHUEJNZXNzYWdl
ICpzZWxmLCBpbnQzMl90IGluZGV4LCB1aW50MzJfdCBmaWVsZE51bWJlcik7Ci12b2lkIEdQQlNl
dEhhc0l2YXIoR1BCTWVzc2FnZSAqc2VsZiwgaW50MzJfdCBpZHgsIHVpbnQzMl90IGZpZWxkTnVt
YmVyLAotICAgICAgICAgICAgICAgICAgIEJPT0wgdmFsdWUpOwotdWludDMyX3QgR1BCR2V0SGFz
T25lb2YoR1BCTWVzc2FnZSAqc2VsZiwgaW50MzJfdCBpbmRleCk7Ci0KLUdQQl9JTkxJTkUgQk9P
TAotR1BCR2V0SGFzSXZhckZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRv
ciAqZmllbGQpIHsKLSAgR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb24gKmZpZWxkRGVzYyA9IGZp
ZWxkLT5kZXNjcmlwdGlvbl87Ci0gIHJldHVybiBHUEJHZXRIYXNJdmFyKHNlbGYsIGZpZWxkRGVz
Yy0+aGFzSW5kZXgsIGZpZWxkRGVzYy0+bnVtYmVyKTsKLX0KLUdQQl9JTkxJTkUgdm9pZCBHUEJT
ZXRIYXNJdmFyRmllbGQoR1BCTWVzc2FnZSAqc2VsZiwgR1BCRmllbGREZXNjcmlwdG9yICpmaWVs
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCB2YWx1ZSkgewotICBH
UEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiAqZmllbGREZXNjID0gZmllbGQtPmRlc2NyaXB0aW9u
XzsKLSAgR1BCU2V0SGFzSXZhcihzZWxmLCBmaWVsZERlc2MtPmhhc0luZGV4LCBmaWVsZERlc2Mt
Pm51bWJlciwgdmFsdWUpOwotfQotCi12b2lkIEdQQk1heWJlQ2xlYXJPbmVvZihHUEJNZXNzYWdl
ICpzZWxmLCBHUEJPbmVvZkRlc2NyaXB0b3IgKm9uZW9mLAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzJfdCBvbmVvZkhhc0luZGV4LCB1aW50MzJfdCBmaWVsZE51bWJlck5vdFRvQ2xlYXIp
OwotCi0vLyVQRERNLURFRklORSBHUEJfSVZBUl9TRVRfREVDTChOQU1FLCBUWVBFKQotLy8ldm9p
ZCBHUEJTZXQjI05BTUUjI0l2YXJXaXRoRmllbGRJbnRlcm5hbChHUEJNZXNzYWdlICpzZWxmLAot
Ly8lICAgICAgICAgICAgTkFNRSRTICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlw
dG9yICpmaWVsZCwKLS8vJSAgICAgICAgICAgIE5BTUUkUyAgICAgICAgICAgICAgICAgICAgIFRZ
UEUgdmFsdWUsCi0vLyUgICAgICAgICAgICBOQU1FJFMgICAgICAgICAgICAgICAgICAgICBHUEJG
aWxlU3ludGF4IHN5bnRheCk7Ci0vLyVQRERNLUVYUEFORCBHUEJfSVZBUl9TRVRfREVDTChCb29s
LCBCT09MKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQg
aXQgZGlyZWN0bHkuCi0KLXZvaWQgR1BCU2V0Qm9vbEl2YXJXaXRoRmllbGRJbnRlcm5hbChHUEJN
ZXNzYWdlICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZp
ZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQk9PTCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJG
aWxlU3ludGF4IHN5bnRheCk7Ci0vLyVQRERNLUVYUEFORCBHUEJfSVZBUl9TRVRfREVDTChJbnQz
MiwgaW50MzJfdCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBl
ZGl0IGl0IGRpcmVjdGx5LgotCi12b2lkIEdQQlNldEludDMySXZhcldpdGhGaWVsZEludGVybmFs
KEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdQQkZpbGVTeW50YXggc3ludGF4KTsKLS8vJVBERE0tRVhQQU5EIEdQQl9JVkFSX1NF
VF9ERUNMKFVJbnQzMiwgdWludDMyX3QpCi0vLyBUaGlzIGJsb2NrIG9mIGNvZGUgaXMgZ2VuZXJh
dGVkLCBkbyBub3QgZWRpdCBpdCBkaXJlY3RseS4KLQotdm9pZCBHUEJTZXRVSW50MzJJdmFyV2l0
aEZpZWxkSW50ZXJuYWwoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZpbGVTeW50YXggc3ludGF4KTsKLS8vJVBERE0t
RVhQQU5EIEdQQl9JVkFSX1NFVF9ERUNMKEludDY0LCBpbnQ2NF90KQotLy8gVGhpcyBibG9jayBv
ZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLXZvaWQgR1BC
U2V0SW50NjRJdmFyV2l0aEZpZWxkSW50ZXJuYWwoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmlsZVN5bnRheCBzeW50YXgp
OwotLy8lUERETS1FWFBBTkQgR1BCX0lWQVJfU0VUX0RFQ0woVUludDY0LCB1aW50NjRfdCkKLS8v
IFRoaXMgYmxvY2sgb2YgY29kZSBpcyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5
LgotCi12b2lkIEdQQlNldFVJbnQ2NEl2YXJXaXRoRmllbGRJbnRlcm5hbChHUEJNZXNzYWdlICpz
ZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmllbGREZXNj
cmlwdG9yICpmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQ2NF90IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BC
RmlsZVN5bnRheCBzeW50YXgpOwotLy8lUERETS1FWFBBTkQgR1BCX0lWQVJfU0VUX0RFQ0woRmxv
YXQsIGZsb2F0KQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwgZG8gbm90IGVk
aXQgaXQgZGlyZWN0bHkuCi0KLXZvaWQgR1BCU2V0RmxvYXRJdmFyV2l0aEZpZWxkSW50ZXJuYWwo
R1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdQQkZpbGVTeW50YXggc3ludGF4KTsKLS8vJVBERE0tRVhQQU5EIEdQQl9JVkFSX1NFVF9E
RUNMKERvdWJsZSwgZG91YmxlKQotLy8gVGhpcyBibG9jayBvZiBjb2RlIGlzIGdlbmVyYXRlZCwg
ZG8gbm90IGVkaXQgaXQgZGlyZWN0bHkuCi0KLXZvaWQgR1BCU2V0RG91YmxlSXZhcldpdGhGaWVs
ZEludGVybmFsKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1BCRmlsZVN5bnRheCBzeW50YXgpOwotLy8lUERETS1FWFBBTkQg
R1BCX0lWQVJfU0VUX0RFQ0woRW51bSwgaW50MzJfdCkKLS8vIFRoaXMgYmxvY2sgb2YgY29kZSBp
cyBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5LgotCi12b2lkIEdQQlNldEVudW1J
dmFyV2l0aEZpZWxkSW50ZXJuYWwoR1BCTWVzc2FnZSAqc2VsZiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgdmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmlsZVN5bnRheCBzeW50YXgpOwotLy8lUERETS1F
WFBBTkQtRU5EICg4IGV4cGFuc2lvbnMpCi0KLWludDMyX3QgR1BCR2V0RW51bUl2YXJXaXRoRmll
bGRJbnRlcm5hbChHUEJNZXNzYWdlICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1BCRmlsZVN5bnRheCBzeW50YXgpOwotCi1pZCBHUEJH
ZXRPYmplY3RJdmFyV2l0aEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYsIEdQQkZpZWxkRGVzY3JpcHRv
ciAqZmllbGQpOwotCi12b2lkIEdQQlNldE9iamVjdEl2YXJXaXRoRmllbGRJbnRlcm5hbChHUEJN
ZXNzYWdlICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BC
RmllbGREZXNjcmlwdG9yICpmaWVsZCwgaWQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHUEJGaWxlU3ludGF4IHN5bnRheCk7Ci12b2lkIEdQQlNldFJldGFp
bmVkT2JqZWN0SXZhcldpdGhGaWVsZEludGVybmFsKEdQQk1lc3NhZ2UgKnNlbGYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQkZpZWxkRGVzY3JpcHRv
ciAqZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlkIF9fYXR0cmlidXRlX18oKG5zX2NvbnN1bWVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdQQkZpbGVTeW50YXggc3ludGF4KTsKLQotLy8gR1BCR2V0
T2JqZWN0SXZhcldpdGhGaWVsZCB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIHRoZSBmaWVsZCAo
bWVzc2FnZSkgaWYKLS8vIGl0IGRvZXNuJ3QgZXhpc3QuIEdQQkdldE9iamVjdEl2YXJXaXRoRmll
bGROb0F1dG9jcmVhdGUgd2lsbCByZXR1cm4gbmlsLgotaWQgR1BCR2V0T2JqZWN0SXZhcldpdGhG
aWVsZE5vQXV0b2NyZWF0ZShHUEJNZXNzYWdlICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkKTsKLQotdm9pZCBH
UEJTZXRBdXRvY3JlYXRlZFJldGFpbmVkT2JqZWN0SXZhcldpdGhGaWVsZCgKLSAgICBHUEJNZXNz
YWdlICpzZWxmLCBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkLAotICAgIGlkIF9fYXR0cmlidXRl
X18oKG5zX2NvbnN1bWVkKSkgdmFsdWUpOwotCi0vLyBDbGVhcnMgYW5kIHJlbGVhc2VzIHRoZSBh
dXRvY3JlYXRlZCBtZXNzYWdlIGl2YXIsIGlmIGl0J3MgYXV0b2NyZWF0ZWQuIElmCi0vLyBpdCdz
IG5vdCBzZXQgYXMgYXV0b2NyZWF0ZWQsIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy4KLXZvaWQg
R1BCQ2xlYXJBdXRvY3JlYXRlZE1lc3NhZ2VJdmFyV2l0aEZpZWxkKEdQQk1lc3NhZ2UgKnNlbGYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUEJGaWVsZERl
c2NyaXB0b3IgKmZpZWxkKTsKLQotLy8gUmV0dXJucyBhbiBPYmplY3RpdmUgQyBlbmNvZGluZyBm
b3IgfHNlbGVjdG9yfC4gfGluc3RhbmNlU2VsfCBzaG91bGQgYmUKLS8vIFlFUyBpZiBpdCdzIGFu
IGluc3RhbmNlIHNlbGVjdG9yIChhcyBvcHBvc2VkIHRvIGEgY2xhc3Mgc2VsZWN0b3IpLgotLy8g
fHNlbGVjdG9yfCBtdXN0IGJlIGEgc2VsZWN0b3IgZnJvbSBNZXNzYWdlU2lnbmF0dXJlUHJvdG9j
b2wuCi1jb25zdCBjaGFyICpHUEJNZXNzYWdlRW5jb2RpbmdGb3JTZWxlY3RvcihTRUwgc2VsZWN0
b3IsIEJPT0wgaW5zdGFuY2VTZWwpOwotCi0vLyBIZWxwZXIgZm9yIHRleHQgZm9ybWF0IG5hbWUg
ZW5jb2RpbmcuCi0vLyBkZWNvZGVEYXRhIGlzIHRoZSBkYXRhIGRlc2NyaWJpbmcgdGhlIHNlcGVj
aWFsIGRlY29kZXMuCi0vLyBrZXkgYW5kIGlucHV0U3RyaW5nIGFyZSB0aGUgaW5wdXQgdGhhdCBu
ZWVkcyBkZWNvZGluZy4KLU5TU3RyaW5nICpHUEJEZWNvZGVUZXh0Rm9ybWF0TmFtZShjb25zdCB1
aW50OF90ICpkZWNvZGVEYXRhLCBpbnQzMl90IGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOU1N0cmluZyAqaW5wdXRTdHJpbmcpOwotCi0vLyBBIHNlcmllcyBvZiBzZWxl
Y3RvcnMgdGhhdCBhcmUgdXNlZCBzb2xlbHkgdG8gZ2V0IEBlbmNvZGluZyB2YWx1ZXMKLS8vIGZv
ciB0aGVtIGJ5IHRoZSBkeW5hbWljIHByb3RvYnVmIHJ1bnRpbWUgY29kZS4gU2VlCi0vLyBHUEJN
ZXNzYWdlRW5jb2RpbmdGb3JTZWxlY3RvciBmb3IgZGV0YWlscy4KLUBwcm90b2NvbCBHUEJNZXNz
YWdlU2lnbmF0dXJlUHJvdG9jb2wKLUBvcHRpb25hbAotCi0jZGVmaW5lIEdQQl9NRVNTQUdFX1NJ
R05BVFVSRV9FTlRSWShUWVBFLCBOQU1FKSBcCi0gIC0oVFlQRSlnZXQjI05BTUU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIC0odm9pZClzZXQjI05BTUUgOiAoVFlQRSl2YWx1ZTsg
ICAgICAgICAgICAgICBcCi0gIC0oVFlQRSlnZXQjI05BTUUjI0F0SW5kZXggOiAoTlNVSW50ZWdl
cilpbmRleDsKLQotR1BCX01FU1NBR0VfU0lHTkFUVVJFX0VOVFJZKEJPT0wsIEJvb2wpCi1HUEJf
TUVTU0FHRV9TSUdOQVRVUkVfRU5UUlkodWludDMyX3QsIEZpeGVkMzIpCi1HUEJfTUVTU0FHRV9T
SUdOQVRVUkVfRU5UUlkoaW50MzJfdCwgU0ZpeGVkMzIpCi1HUEJfTUVTU0FHRV9TSUdOQVRVUkVf
RU5UUlkoZmxvYXQsIEZsb2F0KQotR1BCX01FU1NBR0VfU0lHTkFUVVJFX0VOVFJZKHVpbnQ2NF90
LCBGaXhlZDY0KQotR1BCX01FU1NBR0VfU0lHTkFUVVJFX0VOVFJZKGludDY0X3QsIFNGaXhlZDY0
KQotR1BCX01FU1NBR0VfU0lHTkFUVVJFX0VOVFJZKGRvdWJsZSwgRG91YmxlKQotR1BCX01FU1NB
R0VfU0lHTkFUVVJFX0VOVFJZKGludDMyX3QsIEludDMyKQotR1BCX01FU1NBR0VfU0lHTkFUVVJF
X0VOVFJZKGludDY0X3QsIEludDY0KQotR1BCX01FU1NBR0VfU0lHTkFUVVJFX0VOVFJZKGludDMy
X3QsIFNJbnQzMikKLUdQQl9NRVNTQUdFX1NJR05BVFVSRV9FTlRSWShpbnQ2NF90LCBTSW50NjQp
Ci1HUEJfTUVTU0FHRV9TSUdOQVRVUkVfRU5UUlkodWludDMyX3QsIFVJbnQzMikKLUdQQl9NRVNT
QUdFX1NJR05BVFVSRV9FTlRSWSh1aW50NjRfdCwgVUludDY0KQotR1BCX01FU1NBR0VfU0lHTkFU
VVJFX0VOVFJZKE5TRGF0YSAqLCBCeXRlcykKLUdQQl9NRVNTQUdFX1NJR05BVFVSRV9FTlRSWShO
U1N0cmluZyAqLCBTdHJpbmcpCi1HUEJfTUVTU0FHRV9TSUdOQVRVUkVfRU5UUlkoR1BCTWVzc2Fn
ZSAqLCBNZXNzYWdlKQotR1BCX01FU1NBR0VfU0lHTkFUVVJFX0VOVFJZKEdQQk1lc3NhZ2UgKiwg
R3JvdXApCi1HUEJfTUVTU0FHRV9TSUdOQVRVUkVfRU5UUlkoaW50MzJfdCwgRW51bSkKLQotI3Vu
ZGVmIEdQQl9NRVNTQUdFX1NJR05BVFVSRV9FTlRSWQotCi0tIChpZClnZXRBcnJheTsKLS0gKE5T
VUludGVnZXIpZ2V0QXJyYXlDb3VudDsKLS0gKHZvaWQpc2V0QXJyYXk6KE5TQXJyYXkgKilhcnJh
eTsKLSsgKGlkKWdldENsYXNzVmFsdWU7Ci1AZW5kCi0KLUNGX0VYVEVSTl9DX0VORApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9vYmplY3RpdmVjL0dQQldlbGxLbm93blR5cGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCV2VsbEtu
b3duVHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg0NDJmYmUxN2NmM2M2
ODhhMGI3MjM0NjY0YzEzN2E5Y2Q4NmU4Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCV2VsbEtub3duVHlwZXMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDUyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCAiZ29vZ2xlL3By
b3RvYnVmL0R1cmF0aW9uLnBib2JqYy5oIgotI2ltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL1RpbWVz
dGFtcC5wYm9iamMuaCIKLQotTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KLQotLy8gRXh0ZW5zaW9u
IHRvIEdQQlRpbWVzdGFtcCB0byB3b3JrIHdpdGggc3RhbmRhcmQgRm91bmRhdGlvbiB0aW1lL2Rh
dGUgdHlwZXMuCi1AaW50ZXJmYWNlIEdQQlRpbWVzdGFtcCAoR0JQV2VsbEtub3duVHlwZXMpCi1A
cHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUsIHN0cm9uZykgTlNEYXRlICpkYXRlOwotQHBy
b3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlKSBOU1RpbWVJbnRlcnZhbCB0aW1lSW50ZXJ2YWxT
aW5jZTE5NzA7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRlOihOU0RhdGUgKilkYXRlOwot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGltZUludGVydmFsU2luY2UxOTcwOihOU1RpbWVJbnRl
cnZhbCl0aW1lSW50ZXJ2YWxTaW5jZTE5NzA7Ci1AZW5kCi0KLS8vIEV4dGVuc2lvbiB0byBHUEJE
dXJhdGlvbiB0byB3b3JrIHdpdGggc3RhbmRhcmQgRm91bmRhdGlvbiB0aW1lIHR5cGUuCi1AaW50
ZXJmYWNlIEdQQkR1cmF0aW9uIChHQlBXZWxsS25vd25UeXBlcykKLUBwcm9wZXJ0eShub25hdG9t
aWMsIHJlYWR3cml0ZSkgTlNUaW1lSW50ZXJ2YWwgdGltZUludGVydmFsU2luY2UxOTcwOwotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoVGltZUludGVydmFsU2luY2UxOTcwOihOU1RpbWVJbnRlcnZh
bCl0aW1lSW50ZXJ2YWxTaW5jZTE5NzA7Ci1AZW5kCi0KLU5TX0FTU1VNRV9OT05OVUxMX0VORApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQldlbGxLbm93blR5cGVzLm0gYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BC
V2VsbEtub3duVHlwZXMubQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUwMmY1ZGUx
MWUyNGQwNGQzMDllMTllODY1OTU0MTczMGYzYzVlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCV2VsbEtub3duVHlwZXMubQorKysg
L2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotLy8gSW1wb3J0aW5nIHNvdXJjZXMgaGVyZSB0byBmb3JjZSB0aGUgbGlua2VyIHRv
IGluY2x1ZGUgb3VyIGNhdGVnb3J5IG1ldGhvZHMgaW4KLS8vIHRoZSBzdGF0aWMgbGlicmFyeS4g
SWYgdGhlc2Ugd2VyZSBjb21waWxlZCBzZXBhcmF0ZWx5LCB0aGUgY2F0ZWdvcnkgbWV0aG9kcwot
Ly8gYmVsb3cgd291bGQgYmUgc3RyaXBwZWQgYnkgdGhlIGxpbmtlci4KLQotI2ltcG9ydCAiZ29v
Z2xlL3Byb3RvYnVmL1RpbWVzdGFtcC5wYm9iamMubSIKLSNpbXBvcnQgImdvb2dsZS9wcm90b2J1
Zi9EdXJhdGlvbi5wYm9iamMubSIKLSNpbXBvcnQgIkdQQldlbGxLbm93blR5cGVzLmgiCi0KLXN0
YXRpYyBOU1RpbWVJbnRlcnZhbCBUaW1lSW50ZXJ2YWxTaW5jZTE5NzBGcm9tU2Vjb25kc0FuZE5h
bm9zKGludDY0X3Qgc2Vjb25kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbmFub3MpIHsKLSAgcmV0dXJuIHNl
Y29uZHMgKyAoTlNUaW1lSW50ZXJ2YWwpbmFub3MgLyAxZTk7Ci19Ci0KLXN0YXRpYyBpbnQzMl90
IFNlY29uZHNBbmROYW5vc0Zyb21UaW1lSW50ZXJ2YWxTaW5jZTE5NzAoTlNUaW1lSW50ZXJ2YWwg
dGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50NjRfdCAqb3V0U2Vjb25kcykgewotICBOU1RpbWVJbnRlcnZhbCBzZWNvbmRzOwot
ICBOU1RpbWVJbnRlcnZhbCBuYW5vcyA9IG1vZGYodGltZSwgJnNlY29uZHMpOwotICBuYW5vcyAq
PSAxZTk7Ci0gICpvdXRTZWNvbmRzID0gKGludDY0X3Qpc2Vjb25kczsKLSAgcmV0dXJuIChpbnQz
Ml90KW5hbm9zOwotfQotCi1AaW1wbGVtZW50YXRpb24gR1BCVGltZXN0YW1wIChHQlBXZWxsS25v
d25UeXBlcykKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGF0ZTooTlNEYXRlICopZGF0ZSB7
Ci0gIHJldHVybiBbc2VsZiBpbml0V2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpkYXRlLnRpbWVJ
bnRlcnZhbFNpbmNlMTk3MF07Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRpbWVJbnRl
cnZhbFNpbmNlMTk3MDooTlNUaW1lSW50ZXJ2YWwpdGltZUludGVydmFsU2luY2UxOTcwIHsKLSAg
aWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAgIGludDY0X3Qgc2Vjb25kczsKLSAgICBp
bnQzMl90IG5hbm9zID0gU2Vjb25kc0FuZE5hbm9zRnJvbVRpbWVJbnRlcnZhbFNpbmNlMTk3MCgK
LSAgICAgICAgdGltZUludGVydmFsU2luY2UxOTcwLCAmc2Vjb25kcyk7Ci0gICAgc2VsZi5zZWNv
bmRzID0gc2Vjb25kczsKLSAgICBzZWxmLm5hbm9zID0gbmFub3M7Ci0gIH0KLSAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKE5TRGF0ZSAqKWRhdGUgewotICByZXR1cm4gW05TRGF0ZSBkYXRlV2l0aFRp
bWVJbnRlcnZhbFNpbmNlMTk3MDpzZWxmLnRpbWVJbnRlcnZhbFNpbmNlMTk3MF07Ci19Ci0KLS0g
KHZvaWQpc2V0RGF0ZTooTlNEYXRlICopZGF0ZSB7Ci0gIHNlbGYudGltZUludGVydmFsU2luY2Ux
OTcwID0gZGF0ZS50aW1lSW50ZXJ2YWxTaW5jZTE5NzA7Ci19Ci0KLS0gKE5TVGltZUludGVydmFs
KXRpbWVJbnRlcnZhbFNpbmNlMTk3MCB7Ci0gIHJldHVybiBUaW1lSW50ZXJ2YWxTaW5jZTE5NzBG
cm9tU2Vjb25kc0FuZE5hbm9zKHNlbGYuc2Vjb25kcywgc2VsZi5uYW5vcyk7Ci19Ci0KLS0gKHZv
aWQpc2V0VGltZUludGVydmFsU2luY2UxOTcwOihOU1RpbWVJbnRlcnZhbCl0aW1lSW50ZXJ2YWxT
aW5jZTE5NzAgewotICBpbnQ2NF90IHNlY29uZHM7Ci0gIGludDMyX3QgbmFub3MgPQotICAgICAg
U2Vjb25kc0FuZE5hbm9zRnJvbVRpbWVJbnRlcnZhbFNpbmNlMTk3MCh0aW1lSW50ZXJ2YWxTaW5j
ZTE5NzAsICZzZWNvbmRzKTsKLSAgc2VsZi5zZWNvbmRzID0gc2Vjb25kczsKLSAgc2VsZi5uYW5v
cyA9IG5hbm9zOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBHUEJEdXJhdGlvbiAoR0JQ
V2VsbEtub3duVHlwZXMpCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRpbWVJbnRlcnZhbFNp
bmNlMTk3MDooTlNUaW1lSW50ZXJ2YWwpdGltZUludGVydmFsU2luY2UxOTcwIHsKLSAgaWYgKChz
ZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAgIGludDY0X3Qgc2Vjb25kczsKLSAgICBpbnQzMl90
IG5hbm9zID0gU2Vjb25kc0FuZE5hbm9zRnJvbVRpbWVJbnRlcnZhbFNpbmNlMTk3MCgKLSAgICAg
ICAgdGltZUludGVydmFsU2luY2UxOTcwLCAmc2Vjb25kcyk7Ci0gICAgc2VsZi5zZWNvbmRzID0g
c2Vjb25kczsKLSAgICBzZWxmLm5hbm9zID0gbmFub3M7Ci0gIH0KLSAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKE5TVGltZUludGVydmFsKXRpbWVJbnRlcnZhbFNpbmNlMTk3MCB7Ci0gIHJldHVybiBU
aW1lSW50ZXJ2YWxTaW5jZTE5NzBGcm9tU2Vjb25kc0FuZE5hbm9zKHNlbGYuc2Vjb25kcywgc2Vs
Zi5uYW5vcyk7Ci19Ci0KLS0gKHZvaWQpc2V0VGltZUludGVydmFsU2luY2UxOTcwOihOU1RpbWVJ
bnRlcnZhbCl0aW1lSW50ZXJ2YWxTaW5jZTE5NzAgewotICBpbnQ2NF90IHNlY29uZHM7Ci0gIGlu
dDMyX3QgbmFub3MgPQotICAgICAgU2Vjb25kc0FuZE5hbm9zRnJvbVRpbWVJbnRlcnZhbFNpbmNl
MTk3MCh0aW1lSW50ZXJ2YWxTaW5jZTE5NzAsICZzZWNvbmRzKTsKLSAgc2VsZi5zZWNvbmRzID0g
c2Vjb25kczsKLSAgc2VsZi5uYW5vcyA9IG5hbm9zOwotfQotCi1AZW5kCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29i
amVjdGl2ZWMvR1BCV2lyZUZvcm1hdC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL0dQQldpcmVGb3JtYXQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjljZjJmMGI4ZDAzNjhhOTlkNjNjZmZmZWJmN2Qw
MzdiNGVkMDZmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L29iamVjdGl2ZWMvR1BCV2lyZUZvcm1hdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbXBvcnQgIkdQQlJ1bnRp
bWVUeXBlcy5oIgotCi1DRl9FWFRFUk5fQ19CRUdJTgotCi1OU19BU1NVTUVfTk9OTlVMTF9CRUdJ
TgotCi10eXBlZGVmIGVudW0gewotICBHUEJXaXJlRm9ybWF0VmFyaW50ID0gMCwKLSAgR1BCV2ly
ZUZvcm1hdEZpeGVkNjQgPSAxLAotICBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkID0gMiwK
LSAgR1BCV2lyZUZvcm1hdFN0YXJ0R3JvdXAgPSAzLAotICBHUEJXaXJlRm9ybWF0RW5kR3JvdXAg
PSA0LAotICBHUEJXaXJlRm9ybWF0Rml4ZWQzMiA9IDUsCi19IEdQQldpcmVGb3JtYXQ7Ci0KLWVu
dW0gewotICBHUEJXaXJlRm9ybWF0TWVzc2FnZVNldEl0ZW0gPSAxLAotICBHUEJXaXJlRm9ybWF0
TWVzc2FnZVNldFR5cGVJZCA9IDIsCi0gIEdQQldpcmVGb3JtYXRNZXNzYWdlU2V0TWVzc2FnZSA9
IDMKLX07Ci0KLXVpbnQzMl90IEdQQldpcmVGb3JtYXRNYWtlVGFnKHVpbnQzMl90IGZpZWxkTnVt
YmVyLCBHUEJXaXJlRm9ybWF0IHdpcmVUeXBlKQotICAgIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7
Ci1HUEJXaXJlRm9ybWF0IEdQQldpcmVGb3JtYXRHZXRUYWdXaXJlVHlwZSh1aW50MzJfdCB0YWcp
IF9fYXR0cmlidXRlX18oKGNvbnN0KSk7Ci11aW50MzJfdCBHUEJXaXJlRm9ybWF0R2V0VGFnRmll
bGROdW1iZXIodWludDMyX3QgdGFnKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotCi1HUEJXaXJl
Rm9ybWF0IEdQQldpcmVGb3JtYXRGb3JUeXBlKEdQQkRhdGFUeXBlIGRhdGFUeXBlLCBCT09MIGlz
UGFja2VkKQotICAgIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7Ci0KLSNkZWZpbmUgR1BCV2lyZUZv
cm1hdE1lc3NhZ2VTZXRJdGVtVGFnIFwKLSAgKEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQldpcmVG
b3JtYXRNZXNzYWdlU2V0SXRlbSwgR1BCV2lyZUZvcm1hdFN0YXJ0R3JvdXApKQotI2RlZmluZSBH
UEJXaXJlRm9ybWF0TWVzc2FnZVNldEl0ZW1FbmRUYWcgXAotICAoR1BCV2lyZUZvcm1hdE1ha2VU
YWcoR1BCV2lyZUZvcm1hdE1lc3NhZ2VTZXRJdGVtLCBHUEJXaXJlRm9ybWF0RW5kR3JvdXApKQot
I2RlZmluZSBHUEJXaXJlRm9ybWF0TWVzc2FnZVNldFR5cGVJZFRhZyBcCi0gIChHUEJXaXJlRm9y
bWF0TWFrZVRhZyhHUEJXaXJlRm9ybWF0TWVzc2FnZVNldFR5cGVJZCwgR1BCV2lyZUZvcm1hdFZh
cmludCkpCi0jZGVmaW5lIEdQQldpcmVGb3JtYXRNZXNzYWdlU2V0TWVzc2FnZVRhZyAgICAgICAg
ICAgICAgIFwKLSAgKEdQQldpcmVGb3JtYXRNYWtlVGFnKEdQQldpcmVGb3JtYXRNZXNzYWdlU2V0
TWVzc2FnZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgR1BCV2lyZUZvcm1hdExlbmd0aERl
bGltaXRlZCkpCi0KLU5TX0FTU1VNRV9OT05OVUxMX0VORAotCi1DRl9FWFRFUk5fQ19FTkQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvb2JqZWN0aXZlYy9HUEJXaXJlRm9ybWF0Lm0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvR1BCV2lyZUZv
cm1hdC5tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTMyMzVkNmNlNDFlNTAyZTI5
M2ViMzZlNGM2ZTg1ZjBjMzYzNjBkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvb2JqZWN0aXZlYy9HUEJXaXJlRm9ybWF0Lm0KKysrIC9kZXYvbnVsbApAQCAt
MSw3OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2ltcG9y
dCAiR1BCV2lyZUZvcm1hdC5oIgotCi0jaW1wb3J0ICJHUEJVdGlsaXRpZXNfUGFja2FnZVByaXZh
dGUuaCIKLQotZW51bSB7Ci0gIEdQQldpcmVGb3JtYXRUYWdUeXBlQml0cyA9IDMsCi0gIEdQQldp
cmVGb3JtYXRUYWdUeXBlTWFzayA9IDcgLyogPSAoMSA8PCBHUEJXaXJlRm9ybWF0VGFnVHlwZUJp
dHMpIC0gMSAqLywKLX07Ci0KLXVpbnQzMl90IEdQQldpcmVGb3JtYXRNYWtlVGFnKHVpbnQzMl90
IGZpZWxkTnVtYmVyLCBHUEJXaXJlRm9ybWF0IHdpcmVUeXBlKSB7Ci0gIHJldHVybiAoZmllbGRO
dW1iZXIgPDwgR1BCV2lyZUZvcm1hdFRhZ1R5cGVCaXRzKSB8IHdpcmVUeXBlOwotfQotCi1HUEJX
aXJlRm9ybWF0IEdQQldpcmVGb3JtYXRHZXRUYWdXaXJlVHlwZSh1aW50MzJfdCB0YWcpIHsKLSAg
cmV0dXJuIChHUEJXaXJlRm9ybWF0KSh0YWcgJiBHUEJXaXJlRm9ybWF0VGFnVHlwZU1hc2spOwot
fQotCi11aW50MzJfdCBHUEJXaXJlRm9ybWF0R2V0VGFnRmllbGROdW1iZXIodWludDMyX3QgdGFn
KSB7Ci0gIHJldHVybiBHUEJMb2dpY2FsUmlnaHRTaGlmdDMyKHRhZywgR1BCV2lyZUZvcm1hdFRh
Z1R5cGVCaXRzKTsKLX0KLQotR1BCV2lyZUZvcm1hdCBHUEJXaXJlRm9ybWF0Rm9yVHlwZShHUEJE
YXRhVHlwZSB0eXBlLCBCT09MIGlzUGFja2VkKSB7Ci0gIGlmIChpc1BhY2tlZCkgewotICAgIHJl
dHVybiBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0
IEdQQldpcmVGb3JtYXQgZm9ybWF0W0dQQkRhdGFUeXBlX0NvdW50XSA9IHsKLSAgICAgIEdQQldp
cmVGb3JtYXRWYXJpbnQsICAgICAgICAgICAvLyBHUEJEYXRhVHlwZUJvb2wKLSAgICAgIEdQQldp
cmVGb3JtYXRGaXhlZDMyLCAgICAgICAgICAvLyBHUEJEYXRhVHlwZUZpeGVkMzIKLSAgICAgIEdQ
QldpcmVGb3JtYXRGaXhlZDMyLCAgICAgICAgICAvLyBHUEJEYXRhVHlwZVNGaXhlZDMyCi0gICAg
ICBHUEJXaXJlRm9ybWF0Rml4ZWQzMiwgICAgICAgICAgLy8gR1BCRGF0YVR5cGVGbG9hdAotICAg
ICAgR1BCV2lyZUZvcm1hdEZpeGVkNjQsICAgICAgICAgIC8vIEdQQkRhdGFUeXBlRml4ZWQ2NAot
ICAgICAgR1BCV2lyZUZvcm1hdEZpeGVkNjQsICAgICAgICAgIC8vIEdQQkRhdGFUeXBlU0ZpeGVk
NjQKLSAgICAgIEdQQldpcmVGb3JtYXRGaXhlZDY0LCAgICAgICAgICAvLyBHUEJEYXRhVHlwZURv
dWJsZQotICAgICAgR1BCV2lyZUZvcm1hdFZhcmludCwgICAgICAgICAgIC8vIEdQQkRhdGFUeXBl
SW50MzIKLSAgICAgIEdQQldpcmVGb3JtYXRWYXJpbnQsICAgICAgICAgICAvLyBHUEJEYXRhVHlw
ZUludDY0Ci0gICAgICBHUEJXaXJlRm9ybWF0VmFyaW50LCAgICAgICAgICAgLy8gR1BCRGF0YVR5
cGVTSW50MzIKLSAgICAgIEdQQldpcmVGb3JtYXRWYXJpbnQsICAgICAgICAgICAvLyBHUEJEYXRh
VHlwZVNJbnQ2NAotICAgICAgR1BCV2lyZUZvcm1hdFZhcmludCwgICAgICAgICAgIC8vIEdQQkRh
dGFUeXBlVUludDMyCi0gICAgICBHUEJXaXJlRm9ybWF0VmFyaW50LCAgICAgICAgICAgLy8gR1BC
RGF0YVR5cGVVSW50NjQKLSAgICAgIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQsICAvLyBH
UEJEYXRhVHlwZUJ5dGVzCi0gICAgICBHUEJXaXJlRm9ybWF0TGVuZ3RoRGVsaW1pdGVkLCAgLy8g
R1BCRGF0YVR5cGVTdHJpbmcKLSAgICAgIEdQQldpcmVGb3JtYXRMZW5ndGhEZWxpbWl0ZWQsICAv
LyBHUEJEYXRhVHlwZU1lc3NhZ2UKLSAgICAgIEdQQldpcmVGb3JtYXRTdGFydEdyb3VwLCAgICAg
ICAvLyBHUEJEYXRhVHlwZUdyb3VwCi0gICAgICBHUEJXaXJlRm9ybWF0VmFyaW50ICAgICAgICAg
ICAgLy8gR1BCRGF0YVR5cGVFbnVtCi0gIH07Ci0gIHJldHVybiBmb3JtYXRbdHlwZV07Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL29iamVjdGl2ZWMvUkVBRE1FLm1kIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL1JFQURNRS5tZApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzczMTNlNGZlOWQ3NzljMzg2YjUzYTEzZTRiZWFl
YzkzYzUwMzNkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L29iamVjdGl2ZWMvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLVBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVshW0J1aWxk
IFN0YXR1c10oaHR0cHM6Ly90cmF2aXMtY2kub3JnL2dvb2dsZS9wcm90b2J1Zi5zdmc/YnJhbmNo
PW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9nb29nbGUvcHJvdG9idWYpCi0KLUNvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuCi0KLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBPYmpl
Y3RpdmUgQyBQcm90b2NvbCBCdWZmZXJzIHJ1bnRpbWUgbGlicmFyeS4KLQotUmVxdWlyZW1lbnRz
Ci0tLS0tLS0tLS0tLS0KLQotVGhlIE9iamVjdGl2ZSBDIGltcGxlbWVudGF0aW9uIHJlcXVpcmVz
OgotCi0tIE9iamVjdGl2ZSBDIDIuMCBSdW50aW1lICgzMmJpdCAmIDY0Yml0IGlPUywgNjRiaXQg
T1MgWCkuCi0tIFhjb2RlIDcuMCAob3IgbGF0ZXIpLgotLSBUaGUgbGlicmFyeSBjb2RlIGRvZXMg
Km5vdCogdXNlIEFSQyAoZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMpLCBidXQgaXQgYWxsIGNhbgot
ICBiZSBjYWxsZWQgZnJvbSBBUkMgY29kZS4KLQotSW5zdGFsbGF0aW9uCi0tLS0tLS0tLS0tLS0K
LQotVGhlIGZ1bGwgZGlzdHJpYnV0aW9uIHB1bGxlZCBmcm9tIGdpdGh1YiBpbmNsdWRlcyB0aGUg
c291cmNlcyBmb3IgYm90aCB0aGUKLWNvbXBpbGVyIChwcm90b2MpIGFuZCB0aGUgcnVudGltZSAo
dGhpcyBkaXJlY3RvcnkpLiBUbyBidWlsZCB0aGUgY29tcGlsZXIKLWFuZCBydW4gdGhlIHJ1bnRp
bWUgdGVzdHMsIHlvdSBjYW4gdXNlOgotCi0gICAgICQgb2JqZWN0aXZlYy9EZXZUb29scy9mdWxs
X21hY19idWlsZC5zaAotCi1UaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGBzcmMvcHJvdG9jYCBiaW5h
cnkuCi0KLUJ1aWxkaW5nCi0tLS0tLS0tLQotCi1UaGVyZSBhcmUgdHdvIHdheXMgdG8gaW5jbHVk
ZSB0aGUgUnVudGltZSBzb3VyY2VzIGluIHlvdXIgcHJvamVjdDoKLQotQWRkIGBvYmplY3RpdmVj
L1wqLmhgICYgYG9iamVjdGl2ZWMvR1BCUHJvdG9jb2xCdWZmZXJzLm1gIHRvIHlvdXIgcHJvamVj
dC4KLQotKm9yKgotCi1BZGQgYG9iamVjdGl2ZWMvXCouaGAgJiBgb2JqZWN0aXZlYy9cKi5tYCBl
eGNlcHQgZm9yCi1gb2JqZWN0aXZlYy9HUEJQcm90b2NvbEJ1ZmZlcnMubWAgdG8geW91ciBwcm9q
ZWN0LgotCi0KLUlmIHRoZSB0YXJnZXQgaXMgdXNpbmcgQVJDLCByZW1lbWJlciB0byB0dXJuIG9m
ZiBBUkMgKGAtZm5vLW9iamMtYXJjYCkgZm9yIHRoZQotYC5tYCBmaWxlcy4KLQotVGhlIGZpbGVz
IGdlbmVyYXRlZCBieSBgcHJvdG9jYCBmb3IgdGhlIGAqLnByb3RvYCBmaWxlcyAoYFwqLnBib2Jq
Yy5oJyBhbmQKLWBcKi5wYm9iamMubWApIGFyZSB0aGVuIGFsc28gYWRkZWQgdG8gdGhlIHRhcmdl
dC4KLQotVXNhZ2UKLS0tLS0tCi0KLVRoZSBvYmplY3RzIGdlbmVyYXRlZCBmb3IgbWVzc2FnZXMg
c2hvdWxkIHdvcmsgbGlrZSBhbnkgb3RoZXIgT2JqZWN0aXZlIEMKLW9iamVjdC4gVGhleSBhcmUg
bXV0YWJsZSBvYmplY3RzLCBidXQgaWYgeW91IGRvbid0IGNoYW5nZSB0aGVtLCB0aGV5IGFyZSBz
YWZlCi10byBzaGFyZSBiZXR3ZWVuIHRocmVhZHMgKHNpbWlsYXIgdG8gcGFzc2luZyBhbiBOU011
dGFibGVEaWN0aW9uYXJ5IGJldHdlZW4KLXRocmVhZHMvcXVldWVzOyBhcyBsb25nIGFzIG5vIG9u
ZSBtdXRhdGVzIGl0LCB0aGluZ3MgYXJlIGZpbmUpLgotCi1UaGVyZSBhcmUgYSBmZXcgYmVoYXZp
b3JzIHdvcnRoIGNhbGxpbmcgb3V0OgotCi1BIHByb3BlcnR5IHRoYXQgaXMgdHlwZSBOU1N0cmlu
Z1wqIHdpbGwgbmV2ZXIgcmV0dXJuIG5pbC4gSWYgdGhlIHZhbHVlIGlzCi11bnNldCwgaXQgd2ls
bCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIChAIiIpLiBUaGlzIGlzIGlucGFydCB0byBhbGlnbiB0
aGluZ3MKLXdpdGggdGhlIFByb3RvY29sIEJ1ZmZlcnMgc3BlYyB3aGljaCBzYXlzIHRoZSBkZWZh
dWx0IGZvciBzdHJpbmdzIGlzIGFuIGVtcHR5Ci1zdHJpbmcsIGJ1dCBhbHNvIHNvIHlvdSBjYW4g
YWx3YXlzIHNhZmVseSBwYXNzIHRoZW0gdG8gaXNFcXVhbDovY29tcGFyZTosIGV0Yy4KLWFuZCBo
YXZlIGRldGVybWluaXN0aWMgcmVzdWx0cy4KLQotQSBwcm9wZXJ0eSB0aGF0IGlzIHR5cGUgTlNE
YXRhXCogYWxzbyB3b24ndCByZXR1cm4gbmlsLCBpdCB3aWxsIHJldHVybiBhbiBlbXB0eQotZGF0
YSAoW05TRGF0YSBkYXRhXSkuIFRoZSByZWFzb25pbmcgaXMgdGhlIHNhbWUgYXMgZm9yIE5TU3Ry
aW5nIG5vdCByZXR1cm5pbmcKLW5pbC4KLQotQSBwcm9wZXJ0eSB0aGF0IGlzIGFub3RoZXIgR1BC
TWVzc2FnZSBjbGFzcyBhbHNvIHdpbGwgbm90IHJldHVybiBuaWwuIElmIHRoZQotZmllbGQgd2Fz
bid0IGFscmVhZHkgc2V0LCB5b3Ugd2lsbCBnZXQgYSBpbnN0YW5jZSBvZiB0aGUgY29ycmVjdCBj
bGFzcy4gVGhpcwotaW5zdGFuY2Ugd2lsbCBiZSBhIHRlbXBvcmFyeSBpbnN0YW5jZSB1bmxlc3Mg
eW91IG11dGF0ZSBpdCwgYXQgd2hpY2ggcG9pbnQgaXQKLXdpbGwgYmUgYXR0YWNoZWQgdG8gaXRz
IHBhcmVudCBvYmplY3QuIFdlIGNhbGwgdGhpcyBwYXR0ZXJuICphdXRvY3JlYXRvcnMqLgotU2lt
aWxhciB0byBOU1N0cmluZyBhbmQgTlNEYXRhIHByb3BlcnRpZXMgaXQgbWFrZXMgdGhpbmdzIGEg
bGl0dGxlIHNhZmVyIHdoZW4KLXVzaW5nIHRoZW0gd2l0aCBpc0VxdWFsOi9ldGMuOyBidXQgbW9y
ZSBpbXBvcnRhbnRseSwgdGhpcyBhbGxvd3MgeW91IHRvIHdyaXRlCi1jb2RlIHRoYXQgdXNlcyBP
YmplY3RpdmUgQydzIHByb3BlcnR5IGRvdCBub3RhdGlvbiB0byB3YWxrIGludG8gbmVzdGVkIG9i
amVjdHMKLWFuZCBhY2Nlc3MgYW5kL29yIGFzc2lnbiB0aGluZ3Mgd2l0aG91dCBoYXZpbmcgdG8g
Y2hlY2sgdGhhdCB0aGV5IGFyZSBub3QgbmlsCi1hbmQgY3JlYXRlIHRoZW0gZWFjaCBzdGVwIGFs
b25nIHRoZSB3YXkuIFlvdSBjYW4gd3JpdGUgdGhpczoKLQotYGBgCi0tICh2b2lkKXVwZGF0ZVJl
Y29yZDooTXlNZXNzYWdlICopbXNnIHsKLSAgLi4uCi0gIC8vIE5vdGU6IFlvdSBkb24ndCBoYXZl
IHRvIGNoZWNrIHN1Yk1lc3NhZ2UgYW5kIG90aGVyTWVzc2FnZSBmb3IgbmlsIGFuZAotICAvLyBh
bGxvYy9pbml0L2Fzc2lnbiB0aGVtIGJhY2sgYWxvbmcgdGhlIHdheS4KLSAgbXNnLnN1Yk1lc3Nh
Z2Uub3RoZXJNZXNzYWdlLmxhc3ROYW1lID0gQCJTbWl0aCI7Ci0gIC4uLgotfQotYGBgCi0KLUlm
IHlvdSB3YW50IHRvIGNoZWNrIGlmIGEgR1BCTWVzc2FnZSBwcm9wZXJ0eSBpcyBwcmVzZW50LCB0
aGVyZSBpcyBhbHdheXMgYXMKLWBoYXNcW05BTUVcXWAgcHJvcGVydHkgdG8gZ28gd2l0aCB0aGUg
bWFpbiBwcm9wZXJ0eSB0byBjaGVjayBpZiBpdCBpcyBzZXQuCi0KLUEgcHJvcGVydHkgdGhhdCBp
cyBvZiBhbiBBcnJheSBvciBEaWN0aW9uYXJ5IHR5cGUgYWxzbyBwcm92aWRlcyAqYXV0b2NyZWF0
b3IqCi1iZWhhdmlvciBhbmQgd2lsbCBuZXZlciByZXR1cm4gbmlsLiBUaGlzIHByb3ZpZGVzIGFs
bCB0aGUgc2FtZSBiZW5lZml0cyB5b3UKLXNlZSBmb3IgdGhlIG1lc3NhZ2UgcHJvcGVydGllcy4g
QWdhaW4sIHlvdSBjYW4gd3JpdGU6Ci0KLWBgYAotLSAodm9pZCl1cGRhdGVSZWNvcmQ6KE15TWVz
c2FnZSAqKW1zZyB7Ci0gIC4uLgotICAvLyBOb3RlOiBKdXN0IGxpa2UgYWJvdmUsIHlvdSBkb24n
dCBoYXZlIHRvIGNoZWNrIHN1Yk1lc3NhZ2UgYW5kIG90aGVyTWVzc2FnZQotICAvLyBmb3Igbmls
IGFuZCBhbGxvYy9pbml0L2Fzc2lnbiB0aGVtIGJhY2sgYWxvbmcgdGhlIHdheS4gWW91IGFsc28g
ZG9uJ3QgaGF2ZQotICAvLyB0byBjcmVhdGUgdGhlIHNpYmxpbmdzQXJyYXksIHlvdSBjYW4gc2Fm
ZWx5IGp1c3QgYXBwZW5kIHRvIGl0LgotICBbbXNnLnN1Yk1lc3NhZ2Uub3RoZXJNZXNzYWdlLnNp
YmxpbmdzQXJyYXkgYWRkT2JqZWN0OkAiUGF0Il07Ci0gIC4uLgotfQotYGBgCi0KLUlmIHlvdSBh
cmUgaW5zcGVjdGluZyBhIG1lc3NhZ2UgeW91IGdvdCBmcm9tIHNvbWUgb3RoZXIgcGxhY2UgKHNl
cnZlciwgZGlzaywKLWV0YyksIHlvdSBtYXkgd2FudCB0byBjaGVjayBpZiB0aGUgQXJyYXkgb3Ig
RGljdGlvbmFyeSBoYXMgZW50cmllcyB3aXRob3V0Ci1jYXVzaW5nIGl0IHRvIGJlIGNyZWF0ZWQg
Zm9yIHlvdS4gRm9yIHRoaXMsIHRoZXJlIGlzIGFsd2F5cyBhIGBcW05BTUVcXV9Db3VudGAKLXBy
b3BlcnR5IGFsc28gcHJvdmlkZWQgdGhhdCBjYW4gcmV0dXJuIHplcm8gb3IgdGhlIHJlYWwgY291
bnQsIGJ1dCB3b24ndCB0cmlnZ2VyCi10aGUgY3JlYXRpb24uCi0KLUZvciBwcmltaXRpdmUgdHlw
ZSBmaWVsZHMgKGludHMsIGZsb2F0cywgYm9vbHMsIGVudW0pIGluIG1lc3NhZ2VzIGRlZmluZWQg
aW4gYQotYC5wcm90b2AgZmlsZSB0aGF0IHVzZSAqcHJvdG8yKiBzeW50YXggdGhlcmUgYXJlIGNv
bmNlcHR1YWwgZGlmZmVyZW5jZXMgYmV0d2VlbgotaGF2aW5nIGFuICpleHBsaWNpdCogYW5kICpk
ZWZhdWx0KiB2YWx1ZS4gWW91IGNhbiBhbHdheXMgZ2V0IHRoZSB2YWx1ZSBvZiB0aGUKLXByb3Bl
cnR5LiBJbiB0aGUgY2FzZSB0aGF0IGl0IGhhc24ndCBiZWVuIHNldCB5b3Ugd2lsbCBnZXQgdGhl
IGRlZmF1bHQuIEluCi1jYXNlcyB3aGVyZSB5b3UgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgd2Fz
IHNldCBleHBsaWNpdGx5IG9yIHlvdSBhcmUganVzdAotZ2V0dGluZyB0aGUgZGVmYXVsdCwgeW91
IGNhbiB1c2UgdGhlIGBoYXNcW05BTUVcXWAgcHJvcGVydHkuIElmIHRoZSB2YWx1ZSBoYXMKLWJl
ZW4gc2V0LCBhbmQgeW91IHdhbnQgdG8gY2xlYXIgaXQsIHlvdSBjYW4gc2V0IHRoZSBgaGFzXFtO
QU1FXF1gIHRvIGBOT2AuCi0qcHJvdG8zKiBzeW50YXggbWVzc2FnZXMgZG8gYXdheSB3aXRoIHRo
aXMgY29uY2VwdCwgdGh1cyB0aGUgZGVmYXVsdCB2YWx1ZXMgYXJlCi1uZXZlciBpbmNsdWRlZCB3
aGVuIHRoZSBtZXNzYWdlIGlzIGVuY29kZWQuCi0KLVRoZSBPYmplY3RpdmUgQyBjbGFzc2VzL2Vu
dW1zIGNhbiBiZSB1c2VkIGZyb20gU3dpZnQgY29kZS4KLQotT2JqZWN0aXZlIEMgR2VuZXJhdG9y
IE9wdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSoqb2JqY19jbGFzc19w
cmVmaXg9XDxwcmVmaXhcPioqIChubyBkZWZhdWx0KQotCi1TaW5jZSBPYmplY3RpdmUgQyB1c2Vz
IGEgZ2xvYmFsIG5hbWVzcGFjZSBmb3IgYWxsIG9mIGl0cyBjbGFzc2VzLCB0aGVyZSBjYW4KLWJl
IGNvbGxpc2lvbnMuIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGEgcHJlZml4IHRoYXQgd2lsbCBiZSBh
ZGRlZCB0byB0aGUgRW51bXMKLWFuZCBPYmplY3RzIChmb3IgbWVzc2FnZXMpIGdlbmVyYXRlZCBm
cm9tIHRoZSBwcm90by4gQ29udmVudGlvbiBpcyB0byBiYXNlCi10aGUgcHJlZml4IG9uIHRoZSBw
YWNrYWdlIHRoZSBwcm90byBpcyBpbi4KLQotQ29udHJpYnV0aW5nCi0tLS0tLS0tLS0tLS0KLQot
UGxlYXNlIG1ha2UgdXBkYXRlcyB0byB0aGUgdGVzdHMgYWxvbmcgd2l0aCBjaGFuZ2VzLiBJZiBq
dXN0IGNoYW5naW5nIHRoZQotcnVudGltZSwgdGhlIFhjb2RlIHByb2plY3RzIGNhbiBiZSB1c2Vk
IHRvIGJ1aWxkIGFuZCBydW4gdGVzdHMuIElmIHlvdXIgY2hhbmdlCi1hbHNvIHJlcXVpcmVzIGNo
YW5nZXMgdG8gdGhlIGdlbmVyYXRlZCBjb2RlLAotYG9iamVjdGl2ZWMvRGV2VG9vbHMvZnVsbF9t
YWNfYnVpbGQuc2hgIGNhbiBiZSB1c2VkIHRvIGVhc2lseSByZWJ1aWxkIGFuZCB0ZXN0Ci1jaGFu
Z2VzLiBQYXNzaW5nIGAtaGAgdG8gdGhlIHNjcmlwdCB3aWxsIHNob3cgdGhlIGFkZGl0aW9uIG9w
dGlvbnMgdGhhdCBjb3VsZAotYmUgdXNlZnVsLgotCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0t
LS0tCi0KLVRoZSBjb21wbGV0ZSBkb2N1bWVudGF0aW9uIGZvciBQcm90b2NvbCBCdWZmZXJzIGlz
IGF2YWlsYWJsZSB2aWEgdGhlCi13ZWIgYXQ6Ci0KLSAgICBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dlbmVyYXRl
X3dlbGxfa25vd25fdHlwZXMuc2ggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvZ2VuZXJhdGVfd2VsbF9rbm93bl90eXBl
cy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzZjMzQ2MDMxYzg1ZDBkZWVmOTY5
OTczYjk4OTYxY2Y1ZGVlNDZhOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL29iamVjdGl2ZWMvZ2VuZXJhdGVfd2VsbF9rbm93bl90eXBlcy5zaAorKysgL2Rl
di9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0KLSMgUnVuIHRoaXMgc2NyaXB0
IHRvIHJlZ2VuZXJhdGUgKi5wYm9iamMue2gsbX0gZm9yIHRoZSB3ZWxsIGtub3duIHR5cGVzIGFm
dGVyCi0jIHRoZSBwcm90b2NvbCBjb21waWxlciBjaGFuZ2VzLgotCi0jIEhJTlQ6ICBGbGFncyBw
YXNzZWQgdG8gZ2VuZXJhdGVfd2VsbF9rbm93bl90eXBlcy5zaCB3aWxsIGJlIHBhc3NlZCBkaXJl
Y3RseQotIyAgIHRvIG1ha2Ugd2hlbiBidWlsZGluZyBwcm90b2MuICBUaGlzIGlzIHBhcnRpY3Vs
YXJseSB1c2VmdWwgZm9yIHBhc3NpbmcKLSMgICAtajQgdG8gcnVuIDQgam9icyBzaW11bHRhbmVv
dXNseS4KLQotc2V0IC1ldQotCi1yZWFkb25seSBTY3JpcHREaXI9JChkaXJuYW1lICIkKGVjaG8g
JDAgfCBzZWQgLWUgInMsXlwoW14vXVwpLCQocHdkKS9cMSwiKSIpCi1yZWFkb25seSBQcm90b1Jv
b3REaXI9IiR7U2NyaXB0RGlyfS8uLiIKLQotIyBGbGFnIGZvciBjb250aW51b3VzIGludGVncmF0
aW9uIHRvIGNoZWNrIHRoYXQgZXZlcnl0aGluZyBpcyBjdXJyZW50LgotQ0hFQ0tfT05MWT0wCi1p
ZiBbWyAkIyAtZ2UgMSAmJiAoICIkMSIgPT0gIi0tY2hlY2stb25seSIgKSBdXSA7IHRoZW4KLSAg
Q0hFQ0tfT05MWT0xCi0gIHNoaWZ0Ci1maQotCi1wdXNoZCAiJHtQcm90b1Jvb3REaXJ9IiA+IC9k
ZXYvbnVsbAotCi1pZiB0ZXN0ICEgLWUgc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24u
aDsgdGhlbgotICBjYXQgPiYyIDw8IF9fRU9GX18KLUNvdWxkIG5vdCBmaW5kIHNvdXJjZSBjb2Rl
LiAgTWFrZSBzdXJlIHlvdSBhcmUgcnVubmluZyB0aGlzIHNjcmlwdCBmcm9tIHRoZQotcm9vdCBv
ZiB0aGUgZGlzdHJpYnV0aW9uIHRyZWUuCi1fX0VPRl9fCi0gIGV4aXQgMQotZmkKLQotaWYgdGVz
dCAhIC1lIHNyYy9NYWtlZmlsZTsgdGhlbgotICBjYXQgPiYyIDw8IF9fRU9GX18KLUNvdWxkIG5v
dCBmaW5kIHNyYy9NYWtlZmlsZS4gIFlvdSBtdXN0IHJ1biAuL2NvbmZpZ3VyZSAoYW5kIHBlcmhh
cHMKLS4vYXV0b2dlbi5zaCkgZmlyc3QuCi1fX0VPRl9fCi0gIGV4aXQgMQotZmkKLQotIyBNYWtl
IHN1cmUgdGhlIGNvbXBpbGVyIGlzIGN1cnJlbnQuCi1jZCBzcmMKLW1ha2UgJEAgcHJvdG9jCi0K
LWRlY2xhcmUgLWEgUlVOVElNRV9QUk9UT19GSUxFUz0oIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2Fu
eS5wcm90byBcCi0gIGdvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8gXAotICBnb29nbGUvcHJvdG9i
dWYvZHVyYXRpb24ucHJvdG8gXAotICBnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG8gXAotICBn
b29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90byBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zb3Vy
Y2VfY29udGV4dC5wcm90byBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8gXAotICBn
b29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3R5cGUu
cHJvdG8gXAotICBnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8pCi0KLSMgR2VuZXJhdGUg
dG8gYSB0ZW1wIGRpcmVjdG9yeSB0byBzZWUgaWYgdGhleSBtYXRjaC4KLVRNUF9ESVI9JChta3Rl
bXAgLWQpCi10cmFwICJybSAtcmYgJHtUTVBfRElSfSIgRVhJVAotLi9wcm90b2MgLS1vYmpjX291
dD0iJHtUTVBfRElSfSIgJHtSVU5USU1FX1BST1RPX0ZJTEVTW0BdfQotc2V0ICtlCi1kaWZmIC1y
ICIke1RNUF9ESVJ9L2dvb2dsZSIgIiR7UHJvdG9Sb290RGlyfS9vYmplY3RpdmVjL2dvb2dsZSIg
PiAvZGV2L251bGwKLWlmIFtbICQ/IC1lcSAwIF1dIDsgdGhlbgotICBlY2hvICJHZW5lcmF0ZWQg
c291cmNlIGZvciBXZWxsS25vd25UeXBlcyBpcyBjdXJyZW50LiIKLSAgZXhpdCAwCi1maQotc2V0
IC1lCi0KLSMgSWYgY2hlY2sgb25seSBtb2RlLCBlcnJvciBvdXQuCi1pZiBbWyAiJHtDSEVDS19P
TkxZfSIgPT0gMSBdXSA7IHRoZW4KLSAgZWNobyAiRVJST1I6IFRoZSBXS1RzIG5lZWQgdG8gYmUg
cmVnZW5lcmF0ZWQhIFJ1biAkMCIKLSAgZXhpdCAxCi1maQotCi0jIENvcHkgdGhlbSBvdmVyLgot
ZWNobyAiQ29weWluZyBvdmVyIHVwZGF0ZWQgV2VsbEtub3duVHlwZSBzb3VyY2VzLiIKLWNwIC1y
ICIke1RNUF9ESVJ9L2dvb2dsZS8uIiAiJHtQcm90b1Jvb3REaXJ9L29iamVjdGl2ZWMvZ29vZ2xl
LyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvQW55LnBib2JqYy5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9v
YmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9BbnkucGJvYmpjLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQwMDJhOTg5MWZlYTM0ZTdhYjM0ZWMxN2U5MjFjNjJkZDRjNmM2YjYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dv
b2dsZS9wcm90b2J1Zi9BbnkucGJvYmpjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBA
QAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1Qg
RURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90bwotCi0jaW1wb3J0ICJH
UEJQcm90b2NvbEJ1ZmZlcnMuaCIKLQotI2lmIEdPT0dMRV9QUk9UT0JVRl9PQkpDX0dFTl9WRVJT
SU9OICE9IDMwMDAxCi0jZXJyb3IgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgYSBkaWZmZXJl
bnQgdmVyc2lvbiBvZiBwcm90b2Mgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggeW91ciBQcm90
b2NvbCBCdWZmZXIgbGlicmFyeSBzb3VyY2VzLgotI2VuZGlmCi0KLS8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChpbXBvcnRzKQotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMi
Ci0KLUNGX0VYVEVSTl9DX0JFR0lOCi0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi0KLSNwcmFn
bWEgbWFyayAtIEdQQkFueVJvb3QKLQotLy8vIEV4cG9zZXMgdGhlIGV4dGVuc2lvbiByZWdpc3Ry
eSBmb3IgdGhpcyBmaWxlLgotLy8vCi0vLy8gVGhlIGJhc2UgY2xhc3MgcHJvdmlkZXM6Ci0vLy8g
QGNvZGUKLS8vLyAgICsgKEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICopZXh0ZW5zaW9uUmVnaXN0cnk7
Ci0vLy8gQGVuZGNvZGUKLS8vLyB3aGljaCBpcyBhIEBjIEdQQkV4dGVuc2lvblJlZ2lzdHJ5IHRo
YXQgaW5jbHVkZXMgYWxsIHRoZSBleHRlbnNpb25zIGRlZmluZWQgYnkKLS8vLyB0aGlzIGZpbGUg
YW5kIGFsbCBmaWxlcyB0aGF0IGl0IGRlcGVuZHMgb24uCi1AaW50ZXJmYWNlIEdQQkFueVJvb3Qg
OiBHUEJSb290T2JqZWN0Ci1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEdQQkFueQotCi10eXBlZGVm
IEdQQl9FTlVNKEdQQkFueV9GaWVsZE51bWJlcikgewotICBHUEJBbnlfRmllbGROdW1iZXJfVHlw
ZVVSTCA9IDEsCi0gIEdQQkFueV9GaWVsZE51bWJlcl9WYWx1ZSA9IDIsCi19OwotCi0vLy8gYEFu
eWAgY29udGFpbnMgYW4gYXJiaXRyYXJ5IHNlcmlhbGl6ZWQgcHJvdG9jb2wgYnVmZmVyIG1lc3Nh
Z2UgYWxvbmcgd2l0aCBhCi0vLy8gVVJMIHRoYXQgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBz
ZXJpYWxpemVkIG1lc3NhZ2UuCi0vLy8KLS8vLyBQcm90b2J1ZiBsaWJyYXJ5IHByb3ZpZGVzIHN1
cHBvcnQgdG8gcGFjay91bnBhY2sgQW55IHZhbHVlcyBpbiB0aGUgZm9ybQotLy8vIG9mIHV0aWxp
dHkgZnVuY3Rpb25zIG9yIGFkZGl0aW9uYWwgZ2VuZXJhdGVkIG1ldGhvZHMgb2YgdGhlIEFueSB0
eXBlLgotLy8vCi0vLy8gRXhhbXBsZSAxOiBQYWNrIGFuZCB1bnBhY2sgYSBtZXNzYWdlIGluIEMr
Ky4KLS8vLwotLy8vICAgICBGb28gZm9vID0gLi4uOwotLy8vICAgICBBbnkgYW55OwotLy8vICAg
ICBhbnkuUGFja0Zyb20oZm9vKTsKLS8vLyAgICAgLi4uCi0vLy8gICAgIGlmIChhbnkuVW5wYWNr
VG8oJmZvbykpIHsKLS8vLyAgICAgICAuLi4KLS8vLyAgICAgfQotLy8vCi0vLy8gRXhhbXBsZSAy
OiBQYWNrIGFuZCB1bnBhY2sgYSBtZXNzYWdlIGluIEphdmEuCi0vLy8KLS8vLyAgICAgRm9vIGZv
byA9IC4uLjsKLS8vLyAgICAgQW55IGFueSA9IEFueS5wYWNrKGZvbyk7Ci0vLy8gICAgIC4uLgot
Ly8vICAgICBpZiAoYW55LmlzKEZvby5jbGFzcykpIHsKLS8vLyAgICAgICBmb28gPSBhbnkudW5w
YWNrKEZvby5jbGFzcyk7Ci0vLy8gICAgIH0KLS8vLwotLy8vIFRoZSBwYWNrIG1ldGhvZHMgcHJv
dmlkZWQgYnkgcHJvdG9idWYgbGlicmFyeSB3aWxsIGJ5IGRlZmF1bHQgdXNlCi0vLy8gJ3R5cGUu
Z29vZ2xlYXBpcy5jb20vZnVsbC50eXBlLm5hbWUnIGFzIHRoZSB0eXBlIFVSTCBhbmQgdGhlIHVu
cGFjawotLy8vIG1ldGhvZHMgb25seSB1c2UgdGhlIGZ1bGx5IHF1YWxpZmllZCB0eXBlIG5hbWUg
YWZ0ZXIgdGhlIGxhc3QgJy8nCi0vLy8gaW4gdGhlIHR5cGUgVVJMLCBmb3IgZXhhbXBsZSAiZm9v
LmJhci5jb20veC95LnoiIHdpbGwgeWllbGQgdHlwZQotLy8vIG5hbWUgInkueiIuCi0vLy8KLS8v
LwotLy8vIEpTT04KLS8vLyA9PT09Ci0vLy8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYW4g
YEFueWAgdmFsdWUgdXNlcyB0aGUgcmVndWxhcgotLy8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBk
ZXNlcmlhbGl6ZWQsIGVtYmVkZGVkIG1lc3NhZ2UsIHdpdGggYW4KLS8vLyBhZGRpdGlvbmFsIGZp
ZWxkIGBcQHR5cGVgIHdoaWNoIGNvbnRhaW5zIHRoZSB0eXBlIFVSTC4gRXhhbXBsZToKLS8vLwot
Ly8vICAgICBwYWNrYWdlIGdvb2dsZS5wcm9maWxlOwotLy8vICAgICBtZXNzYWdlIFBlcnNvbiB7
Ci0vLy8gICAgICAgc3RyaW5nIGZpcnN0X25hbWUgPSAxOwotLy8vICAgICAgIHN0cmluZyBsYXN0
X25hbWUgPSAyOwotLy8vICAgICB9Ci0vLy8KLS8vLyAgICAgewotLy8vICAgICAgICJcQHR5cGUi
OiAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvZmlsZS5QZXJzb24iLAotLy8vICAgICAg
ICJmaXJzdE5hbWUiOiA8c3RyaW5nPiwKLS8vLyAgICAgICAibGFzdE5hbWUiOiA8c3RyaW5nPgot
Ly8vICAgICB9Ci0vLy8KLS8vLyBJZiB0aGUgZW1iZWRkZWQgbWVzc2FnZSB0eXBlIGlzIHdlbGwt
a25vd24gYW5kIGhhcyBhIGN1c3RvbSBKU09OCi0vLy8gcmVwcmVzZW50YXRpb24sIHRoYXQgcmVw
cmVzZW50YXRpb24gd2lsbCBiZSBlbWJlZGRlZCBhZGRpbmcgYSBmaWVsZAotLy8vIGB2YWx1ZWAg
d2hpY2ggaG9sZHMgdGhlIGN1c3RvbSBKU09OIGluIGFkZGl0aW9uIHRvIHRoZSBgXEB0eXBlYAot
Ly8vIGZpZWxkLiBFeGFtcGxlIChmb3IgbWVzc2FnZSBbZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9u
XVtdKToKLS8vLwotLy8vICAgICB7Ci0vLy8gICAgICAgIlxAdHlwZSI6ICJ0eXBlLmdvb2dsZWFw
aXMuY29tL2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiIsCi0vLy8gICAgICAgInZhbHVlIjogIjEu
MjEycyIKLS8vLyAgICAgfQotQGludGVyZmFjZSBHUEJBbnkgOiBHUEJNZXNzYWdlCi0KLS8vLyBB
IFVSTC9yZXNvdXJjZSBuYW1lIHdob3NlIGNvbnRlbnQgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRo
ZQotLy8vIHNlcmlhbGl6ZWQgcHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2UuCi0vLy8KLS8vLyBGb3Ig
VVJMcyB3aGljaCB1c2UgdGhlIHNjaGVtYSBgaHR0cGAsIGBodHRwc2AsIG9yIG5vIHNjaGVtYSwg
dGhlCi0vLy8gZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhbmQgaW50ZXJwcmV0YXRpb25zIGFwcGx5
OgotLy8vCi0vLy8gKiBJZiBubyBzY2hlbWEgaXMgcHJvdmlkZWQsIGBodHRwc2AgaXMgYXNzdW1l
ZC4KLS8vLyAqIFRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIFVSTCdzIHBhdGggbXVzdCByZXByZXNl
bnQgdGhlIGZ1bGx5Ci0vLy8gICBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdHlwZSAoYXMgaW4gYHBh
dGgvZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uYCkuCi0vLy8gICBUaGUgbmFtZSBzaG91bGQgYmUg
aW4gYSBjYW5vbmljYWwgZm9ybSAoZS5nLiwgbGVhZGluZyAiLiIgaXMKLS8vLyAgIG5vdCBhY2Nl
cHRlZCkuCi0vLy8gKiBBbiBIVFRQIEdFVCBvbiB0aGUgVVJMIG11c3QgeWllbGQgYSBbZ29vZ2xl
LnByb3RvYnVmLlR5cGVdW10KLS8vLyAgIHZhbHVlIGluIGJpbmFyeSBmb3JtYXQsIG9yIHByb2R1
Y2UgYW4gZXJyb3IuCi0vLy8gKiBBcHBsaWNhdGlvbnMgYXJlIGFsbG93ZWQgdG8gY2FjaGUgbG9v
a3VwIHJlc3VsdHMgYmFzZWQgb24gdGhlCi0vLy8gICBVUkwsIG9yIGhhdmUgdGhlbSBwcmVjb21w
aWxlZCBpbnRvIGEgYmluYXJ5IHRvIGF2b2lkIGFueQotLy8vICAgbG9va3VwLiBUaGVyZWZvcmUs
IGJpbmFyeSBjb21wYXRpYmlsaXR5IG5lZWRzIHRvIGJlIHByZXNlcnZlZAotLy8vICAgb24gY2hh
bmdlcyB0byB0eXBlcy4gKFVzZSB2ZXJzaW9uZWQgdHlwZSBuYW1lcyB0byBtYW5hZ2UKLS8vLyAg
IGJyZWFraW5nIGNoYW5nZXMuKQotLy8vCi0vLy8gU2NoZW1hcyBvdGhlciB0aGFuIGBodHRwYCwg
YGh0dHBzYCAob3IgdGhlIGVtcHR5IHNjaGVtYSkgbWlnaHQgYmUKLS8vLyB1c2VkIHdpdGggaW1w
bGVtZW50YXRpb24gc3BlY2lmaWMgc2VtYW50aWNzLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVh
ZHdyaXRlLCBjb3B5LCBudWxsX3Jlc2V0dGFibGUpIE5TU3RyaW5nICp0eXBlVVJMOwotCi0vLy8g
TXVzdCBiZSBhIHZhbGlkIHNlcmlhbGl6ZWQgcHJvdG9jb2wgYnVmZmVyIG9mIHRoZSBhYm92ZSBz
cGVjaWZpZWQgdHlwZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgY29weSwgbnVs
bF9yZXNldHRhYmxlKSBOU0RhdGEgKnZhbHVlOwotCi1AZW5kCi0KLU5TX0FTU1VNRV9OT05OVUxM
X0VORAotCi1DRl9FWFRFUk5fQ19FTkQKLQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAot
Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2xvYmFsX3Njb3BlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9v
YmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9BbnkucGJvYmpjLm0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvZ29vZ2xl
L3Byb3RvYnVmL0FueS5wYm9iamMubQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEx
YmY4OTRmZjhhZjkwNTMyMzQ5YmY2ZWMzZjdlMjBhY2YwOWE0Ni4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL0Fu
eS5wYm9iamMubQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8vIEdlbmVyYXRlZCBi
eSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6
IGdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8KLQotI2ltcG9ydCAiR1BCUHJvdG9jb2xCdWZmZXJz
X1J1bnRpbWVTdXBwb3J0LmgiCi0jaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvQW55LnBib2JqYy5o
IgotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGltcG9ydHMpCi0KLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXBy
ZWNhdGVkLWRlY2xhcmF0aW9ucyIKLQotI3ByYWdtYSBtYXJrIC0gR1BCQW55Um9vdAotCi1AaW1w
bGVtZW50YXRpb24gR1BCQW55Um9vdAotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEdQQkFueVJv
b3RfRmlsZURlc2NyaXB0b3IKLQotc3RhdGljIEdQQkZpbGVEZXNjcmlwdG9yICpHUEJBbnlSb290
X0ZpbGVEZXNjcmlwdG9yKHZvaWQpIHsKLSAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgK2luaXRpYWxp
emUgc28gdGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeQotICAvLyBhYm91dCB0aHJlYWQgc2FmZXR5
IG9mIHRoZSBzaW5nbGV0b24uCi0gIHN0YXRpYyBHUEJGaWxlRGVzY3JpcHRvciAqZGVzY3JpcHRv
ciA9IE5VTEw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIEdQQkRlYnVnQ2hlY2tSdW50aW1l
VmVyc2lvbigpOwotICAgIGRlc2NyaXB0b3IgPSBbW0dQQkZpbGVEZXNjcmlwdG9yIGFsbG9jXSBp
bml0V2l0aFBhY2thZ2U6QCJnb29nbGUucHJvdG9idWYiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheDpHUEJGaWxlU3ludGF4UHJvdG8z
XTsKLSAgfQotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotI3ByYWdtYSBtYXJrIC0gR1BCQW55
Ci0KLUBpbXBsZW1lbnRhdGlvbiBHUEJBbnkKLQotQGR5bmFtaWMgdHlwZVVSTDsKLUBkeW5hbWlj
IHZhbHVlOwotCi10eXBlZGVmIHN0cnVjdCBHUEJBbnlfX3N0b3JhZ2VfIHsKLSAgdWludDMyX3Qg
X2hhc19zdG9yYWdlX1sxXTsKLSAgTlNTdHJpbmcgKnR5cGVVUkw7Ci0gIE5TRGF0YSAqdmFsdWU7
Ci19IEdQQkFueV9fc3RvcmFnZV87Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIHRocmVhZHNhZmUgYmVj
YXVzZSBpdCBpcyBpbml0aWFsbHkgY2FsbGVkCi0vLyBpbiAraW5pdGlhbGl6ZSBmb3IgZWFjaCBz
dWJjbGFzcy4KLSsgKEdQQkRlc2NyaXB0b3IgKilkZXNjcmlwdG9yIHsKLSAgc3RhdGljIEdQQkRl
c2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBuaWw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIHN0
YXRpYyBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiBmaWVsZHNbXSA9IHsKLSAgICAgIHsKLSAg
ICAgICAgLm5hbWUgPSAidHlwZVVSTCIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNz
TmFtZSA9IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBHUEJBbnlfRmllbGROdW1iZXJfVHlwZVVS
TCwKLSAgICAgICAgLmhhc0luZGV4ID0gMCwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClv
ZmZzZXRvZihHUEJBbnlfX3N0b3JhZ2VfLCB0eXBlVVJMKSwKLSAgICAgICAgLmZsYWdzID0gR1BC
RmllbGRPcHRpb25hbCB8IEdQQkZpZWxkVGV4dEZvcm1hdE5hbWVDdXN0b20sCi0gICAgICAgIC5k
YXRhVHlwZSA9IEdQQkRhdGFUeXBlU3RyaW5nLAotICAgICAgfSwKLSAgICAgIHsKLSAgICAgICAg
Lm5hbWUgPSAidmFsdWUiLAotICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBO
VUxMLAotICAgICAgICAubnVtYmVyID0gR1BCQW55X0ZpZWxkTnVtYmVyX1ZhbHVlLAotICAgICAg
ICAuaGFzSW5kZXggPSAxLAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQ
QkFueV9fc3RvcmFnZV8sIHZhbHVlKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25h
bCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVCeXRlcywKLSAgICAgIH0sCi0gICAg
fTsKLSAgICBHUEJEZXNjcmlwdG9yICpsb2NhbERlc2NyaXB0b3IgPQotICAgICAgICBbR1BCRGVz
Y3JpcHRvciBhbGxvY0Rlc2NyaXB0b3JGb3JDbGFzczpbR1BCQW55IGNsYXNzXQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RDbGFzczpbR1BCQW55Um9vdCBjbGFzc10K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6R1BCQW55Um9v
dF9GaWxlRGVzY3JpcHRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmllbGRzOmZpZWxkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmll
bGRDb3VudDoodWludDMyX3QpKHNpemVvZihmaWVsZHMpIC8gc2l6ZW9mKEdQQk1lc3NhZ2VGaWVs
ZERlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZVNpemU6c2l6ZW9mKEdQQkFueV9fc3RvcmFnZV8pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsYWdzOjBdOwotI2lmICFHUEJPQkpDX1NLSVBfTUVTU0FHRV9URVhU
Rk9STUFUX0VYVFJBUwotICAgIHN0YXRpYyBjb25zdCBjaGFyICpleHRyYVRleHRGb3JtYXRJbmZv
ID0KLSAgICAgICAgIlwwMDFcMDAxXDAwNFwyNDEhIVwwMDAiOwotICAgIFtsb2NhbERlc2NyaXB0
b3Igc2V0dXBFeHRyYVRleHRJbmZvOmV4dHJhVGV4dEZvcm1hdEluZm9dOwotI2VuZGlmICAvLyAh
R1BCT0JKQ19TS0lQX01FU1NBR0VfVEVYVEZPUk1BVF9FWFRSQVMKLSAgICBOU0Fzc2VydChkZXNj
cmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJlY3Vyc2VkISIpOwotICAgIGRlc2NyaXB0b3IgPSBs
b2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJuIGRlc2NyaXB0b3I7Ci19Ci0KLUBlbmQKLQot
Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChnbG9iYWxfc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVm
L0FwaS5wYm9iamMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvQXBpLnBib2JqYy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjZkZjYyOTNkYTBhMjlhNjdjNDFmNWVhZDA1
ZjU1OGRjYWY0ODhlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvQXBpLnBib2JqYy5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjYyICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNv
bXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9hcGkucHJv
dG8KLQotI2ltcG9ydCAiR1BCUHJvdG9jb2xCdWZmZXJzLmgiCi0KLSNpZiBHT09HTEVfUFJPVE9C
VUZfT0JKQ19HRU5fVkVSU0lPTiAhPSAzMDAwMQotI2Vycm9yIFRoaXMgZmlsZSB3YXMgZ2VuZXJh
dGVkIGJ5IGEgZGlmZmVyZW50IHZlcnNpb24gb2YgcHJvdG9jIHdoaWNoIGlzIGluY29tcGF0aWJs
ZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGxpYnJhcnkgc291cmNlcy4KLSNlbmRpZgotCi0v
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoaW1wb3J0cykKLQotI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0
ZWQtZGVjbGFyYXRpb25zIgotCi1DRl9FWFRFUk5fQ19CRUdJTgotCi1AY2xhc3MgR1BCTWV0aG9k
OwotQGNsYXNzIEdQQk1peGluOwotQGNsYXNzIEdQQk9wdGlvbjsKLUBjbGFzcyBHUEJTb3VyY2VD
b250ZXh0OwotR1BCX0VOVU1fRldEX0RFQ0xBUkUoR1BCU3ludGF4KTsKLQotTlNfQVNTVU1FX05P
Tk5VTExfQkVHSU4KLQotI3ByYWdtYSBtYXJrIC0gR1BCQXBpUm9vdAotCi0vLy8gRXhwb3NlcyB0
aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IGZvciB0aGlzIGZpbGUuCi0vLy8KLS8vLyBUaGUgYmFzZSBj
bGFzcyBwcm92aWRlczoKLS8vLyBAY29kZQotLy8vICAgKyAoR1BCRXh0ZW5zaW9uUmVnaXN0cnkg
KilleHRlbnNpb25SZWdpc3RyeTsKLS8vLyBAZW5kY29kZQotLy8vIHdoaWNoIGlzIGEgQGMgR1BC
RXh0ZW5zaW9uUmVnaXN0cnkgdGhhdCBpbmNsdWRlcyBhbGwgdGhlIGV4dGVuc2lvbnMgZGVmaW5l
ZCBieQotLy8vIHRoaXMgZmlsZSBhbmQgYWxsIGZpbGVzIHRoYXQgaXQgZGVwZW5kcyBvbi4KLUBp
bnRlcmZhY2UgR1BCQXBpUm9vdCA6IEdQQlJvb3RPYmplY3QKLUBlbmQKLQotI3ByYWdtYSBtYXJr
IC0gR1BCQXBpCi0KLXR5cGVkZWYgR1BCX0VOVU0oR1BCQXBpX0ZpZWxkTnVtYmVyKSB7Ci0gIEdQ
QkFwaV9GaWVsZE51bWJlcl9OYW1lID0gMSwKLSAgR1BCQXBpX0ZpZWxkTnVtYmVyX01ldGhvZHNB
cnJheSA9IDIsCi0gIEdQQkFwaV9GaWVsZE51bWJlcl9PcHRpb25zQXJyYXkgPSAzLAotICBHUEJB
cGlfRmllbGROdW1iZXJfVmVyc2lvbiA9IDQsCi0gIEdQQkFwaV9GaWVsZE51bWJlcl9Tb3VyY2VD
b250ZXh0ID0gNSwKLSAgR1BCQXBpX0ZpZWxkTnVtYmVyX01peGluc0FycmF5ID0gNiwKLSAgR1BC
QXBpX0ZpZWxkTnVtYmVyX1N5bnRheCA9IDcsCi19OwotCi0vLy8gQXBpIGlzIGEgbGlnaHQtd2Vp
Z2h0IGRlc2NyaXB0b3IgZm9yIGEgcHJvdG9jb2wgYnVmZmVyIHNlcnZpY2UuCi1AaW50ZXJmYWNl
IEdQQkFwaSA6IEdQQk1lc3NhZ2UKLQotLy8vIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0
aGlzIGFwaSwgaW5jbHVkaW5nIHBhY2thZ2UgbmFtZQotLy8vIGZvbGxvd2VkIGJ5IHRoZSBhcGkn
cyBzaW1wbGUgbmFtZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgY29weSwgbnVs
bF9yZXNldHRhYmxlKSBOU1N0cmluZyAqbmFtZTsKLQotLy8vIFRoZSBtZXRob2RzIG9mIHRoaXMg
YXBpLCBpbiB1bnNwZWNpZmllZCBvcmRlci4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0
ZSwgc3Ryb25nLCBudWxsX3Jlc2V0dGFibGUpIE5TTXV0YWJsZUFycmF5PEdQQk1ldGhvZCo+ICpt
ZXRob2RzQXJyYXk7Ci0vLy8gVGhlIG51bWJlciBvZiBpdGVtcyBpbiBAYyBtZXRob2RzQXJyYXkg
d2l0aG91dCBjYXVzaW5nIHRoZSBhcnJheSB0byBiZSBjcmVhdGVkLgotQHByb3BlcnR5KG5vbmF0
b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgbWV0aG9kc0FycmF5X0NvdW50OwotCi0vLy8gQW55
IG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoZSBBUEkuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFk
d3JpdGUsIHN0cm9uZywgbnVsbF9yZXNldHRhYmxlKSBOU011dGFibGVBcnJheTxHUEJPcHRpb24q
PiAqb3B0aW9uc0FycmF5OwotLy8vIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gQGMgb3B0aW9uc0Fy
cmF5IHdpdGhvdXQgY2F1c2luZyB0aGUgYXJyYXkgdG8gYmUgY3JlYXRlZC4KLUBwcm9wZXJ0eShu
b25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIG9wdGlvbnNBcnJheV9Db3VudDsKLQotLy8v
IEEgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgYXBpLiBJZiBzcGVjaWZpZWQsIG11c3QgaGF2ZSB0
aGUgZm9ybQotLy8vIGBtYWpvci12ZXJzaW9uLm1pbm9yLXZlcnNpb25gLCBhcyBpbiBgMS4xMGAu
IElmIHRoZSBtaW5vciB2ZXJzaW9uCi0vLy8gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gemVy
by4gSWYgdGhlIGVudGlyZSB2ZXJzaW9uIGZpZWxkIGlzCi0vLy8gZW1wdHksIHRoZSBtYWpvciB2
ZXJzaW9uIGlzIGRlcml2ZWQgZnJvbSB0aGUgcGFja2FnZSBuYW1lLCBhcwotLy8vIG91dGxpbmVk
IGJlbG93LiBJZiB0aGUgZmllbGQgaXMgbm90IGVtcHR5LCB0aGUgdmVyc2lvbiBpbiB0aGUKLS8v
LyBwYWNrYWdlIG5hbWUgd2lsbCBiZSB2ZXJpZmllZCB0byBiZSBjb25zaXN0ZW50IHdpdGggd2hh
dCBpcwotLy8vIHByb3ZpZGVkIGhlcmUuCi0vLy8KLS8vLyBUaGUgdmVyc2lvbmluZyBzY2hlbWEg
dXNlcyBbc2VtYW50aWMKLS8vLyB2ZXJzaW9uaW5nXShodHRwOi8vc2VtdmVyLm9yZykgd2hlcmUg
dGhlIG1ham9yIHZlcnNpb24gbnVtYmVyCi0vLy8gaW5kaWNhdGVzIGEgYnJlYWtpbmcgY2hhbmdl
IGFuZCB0aGUgbWlub3IgdmVyc2lvbiBhbiBhZGRpdGl2ZSwKLS8vLyBub24tYnJlYWtpbmcgY2hh
bmdlLiBCb3RoIHZlcnNpb24gbnVtYmVycyBhcmUgc2lnbmFscyB0byB1c2VycwotLy8vIHdoYXQg
dG8gZXhwZWN0IGZyb20gZGlmZmVyZW50IHZlcnNpb25zLCBhbmQgc2hvdWxkIGJlIGNhcmVmdWxs
eQotLy8vIGNob3NlbiBiYXNlZCBvbiB0aGUgcHJvZHVjdCBwbGFuLgotLy8vCi0vLy8gVGhlIG1h
am9yIHZlcnNpb24gaXMgYWxzbyByZWZsZWN0ZWQgaW4gdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUK
LS8vLyBBUEksIHdoaWNoIG11c3QgZW5kIGluIGB2PG1ham9yLXZlcnNpb24+YCwgYXMgaW4KLS8v
LyBgZ29vZ2xlLmZlYXR1cmUudjFgLiBGb3IgbWFqb3IgdmVyc2lvbnMgMCBhbmQgMSwgdGhlIHN1
ZmZpeCBjYW4KLS8vLyBiZSBvbWl0dGVkLiBaZXJvIG1ham9yIHZlcnNpb25zIG11c3Qgb25seSBi
ZSB1c2VkIGZvcgotLy8vIGV4cGVyaW1lbnRhbCwgbm9uZS1HQSBhcGlzLgotQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZHdyaXRlLCBjb3B5LCBudWxsX3Jlc2V0dGFibGUpIE5TU3RyaW5nICp2ZXJz
aW9uOwotCi0vLy8gU291cmNlIGNvbnRleHQgZm9yIHRoZSBwcm90b2NvbCBidWZmZXIgc2Vydmlj
ZSByZXByZXNlbnRlZCBieSB0aGlzCi0vLy8gbWVzc2FnZS4KLUBwcm9wZXJ0eShub25hdG9taWMs
IHJlYWR3cml0ZSwgc3Ryb25nLCBudWxsX3Jlc2V0dGFibGUpIEdQQlNvdXJjZUNvbnRleHQgKnNv
dXJjZUNvbnRleHQ7Ci0vLy8gVGVzdCB0byBzZWUgaWYgQGMgc291cmNlQ29udGV4dCBoYXMgYmVl
biBzZXQuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUpIEJPT0wgaGFzU291cmNlQ29u
dGV4dDsKLQotLy8vIEluY2x1ZGVkIEFQSXMuIFNlZSBbTWl4aW5dW10uCi1AcHJvcGVydHkobm9u
YXRvbWljLCByZWFkd3JpdGUsIHN0cm9uZywgbnVsbF9yZXNldHRhYmxlKSBOU011dGFibGVBcnJh
eTxHUEJNaXhpbio+ICptaXhpbnNBcnJheTsKLS8vLyBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIEBj
IG1peGluc0FycmF5IHdpdGhvdXQgY2F1c2luZyB0aGUgYXJyYXkgdG8gYmUgY3JlYXRlZC4KLUBw
cm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIG1peGluc0FycmF5X0NvdW50
OwotCi0vLy8gVGhlIHNvdXJjZSBzeW50YXggb2YgdGhlIHNlcnZpY2UuCi1AcHJvcGVydHkobm9u
YXRvbWljLCByZWFkd3JpdGUpIGVudW0gR1BCU3ludGF4IHN5bnRheDsKLQotQGVuZAotCi0vLy8g
RmV0Y2hlcyB0aGUgcmF3IHZhbHVlIG9mIGEgQGMgR1BCQXBpJ3MgQGMgc3ludGF4IHByb3BlcnR5
LCBldmVuCi0vLy8gaWYgdGhlIHZhbHVlIHdhcyBub3QgZGVmaW5lZCBieSB0aGUgZW51bSBhdCB0
aGUgdGltZSB0aGUgY29kZSB3YXMgZ2VuZXJhdGVkLgotaW50MzJfdCBHUEJBcGlfU3ludGF4X1Jh
d1ZhbHVlKEdQQkFwaSAqbWVzc2FnZSk7Ci0vLy8gU2V0cyB0aGUgcmF3IHZhbHVlIG9mIGFuIEBj
IEdQQkFwaSdzIEBjIHN5bnRheCBwcm9wZXJ0eSwgYWxsb3dpbmcKLS8vLyBpdCB0byBiZSBzZXQg
dG8gYSB2YWx1ZSB0aGF0IHdhcyBub3QgZGVmaW5lZCBieSB0aGUgZW51bSBhdCB0aGUgdGltZSB0
aGUgY29kZQotLy8vIHdhcyBnZW5lcmF0ZWQuCi12b2lkIFNldEdQQkFwaV9TeW50YXhfUmF3VmFs
dWUoR1BCQXBpICptZXNzYWdlLCBpbnQzMl90IHZhbHVlKTsKLQotI3ByYWdtYSBtYXJrIC0gR1BC
TWV0aG9kCi0KLXR5cGVkZWYgR1BCX0VOVU0oR1BCTWV0aG9kX0ZpZWxkTnVtYmVyKSB7Ci0gIEdQ
Qk1ldGhvZF9GaWVsZE51bWJlcl9OYW1lID0gMSwKLSAgR1BCTWV0aG9kX0ZpZWxkTnVtYmVyX1Jl
cXVlc3RUeXBlVVJMID0gMiwKLSAgR1BCTWV0aG9kX0ZpZWxkTnVtYmVyX1JlcXVlc3RTdHJlYW1p
bmcgPSAzLAotICBHUEJNZXRob2RfRmllbGROdW1iZXJfUmVzcG9uc2VUeXBlVVJMID0gNCwKLSAg
R1BCTWV0aG9kX0ZpZWxkTnVtYmVyX1Jlc3BvbnNlU3RyZWFtaW5nID0gNSwKLSAgR1BCTWV0aG9k
X0ZpZWxkTnVtYmVyX09wdGlvbnNBcnJheSA9IDYsCi0gIEdQQk1ldGhvZF9GaWVsZE51bWJlcl9T
eW50YXggPSA3LAotfTsKLQotLy8vIE1ldGhvZCByZXByZXNlbnRzIGEgbWV0aG9kIG9mIGFuIGFw
aS4KLUBpbnRlcmZhY2UgR1BCTWV0aG9kIDogR1BCTWVzc2FnZQotCi0vLy8gVGhlIHNpbXBsZSBu
YW1lIG9mIHRoaXMgbWV0aG9kLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlLCBjb3B5
LCBudWxsX3Jlc2V0dGFibGUpIE5TU3RyaW5nICpuYW1lOwotCi0vLy8gQSBVUkwgb2YgdGhlIGlu
cHV0IG1lc3NhZ2UgdHlwZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgY29weSwg
bnVsbF9yZXNldHRhYmxlKSBOU1N0cmluZyAqcmVxdWVzdFR5cGVVUkw7Ci0KLS8vLyBJZiB0cnVl
LCB0aGUgcmVxdWVzdCBpcyBzdHJlYW1lZC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0
ZSkgQk9PTCByZXF1ZXN0U3RyZWFtaW5nOwotCi0vLy8gVGhlIFVSTCBvZiB0aGUgb3V0cHV0IG1l
c3NhZ2UgdHlwZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgY29weSwgbnVsbF9y
ZXNldHRhYmxlKSBOU1N0cmluZyAqcmVzcG9uc2VUeXBlVVJMOwotCi0vLy8gSWYgdHJ1ZSwgdGhl
IHJlc3BvbnNlIGlzIHN0cmVhbWVkLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlKSBC
T09MIHJlc3BvbnNlU3RyZWFtaW5nOwotCi0vLy8gQW55IG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRo
ZSBtZXRob2QuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUsIHN0cm9uZywgbnVsbF9y
ZXNldHRhYmxlKSBOU011dGFibGVBcnJheTxHUEJPcHRpb24qPiAqb3B0aW9uc0FycmF5OwotLy8v
IFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gQGMgb3B0aW9uc0FycmF5IHdpdGhvdXQgY2F1c2luZyB0
aGUgYXJyYXkgdG8gYmUgY3JlYXRlZC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBO
U1VJbnRlZ2VyIG9wdGlvbnNBcnJheV9Db3VudDsKLQotLy8vIFRoZSBzb3VyY2Ugc3ludGF4IG9m
IHRoaXMgbWV0aG9kLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlKSBlbnVtIEdQQlN5
bnRheCBzeW50YXg7Ci0KLUBlbmQKLQotLy8vIEZldGNoZXMgdGhlIHJhdyB2YWx1ZSBvZiBhIEBj
IEdQQk1ldGhvZCdzIEBjIHN5bnRheCBwcm9wZXJ0eSwgZXZlbgotLy8vIGlmIHRoZSB2YWx1ZSB3
YXMgbm90IGRlZmluZWQgYnkgdGhlIGVudW0gYXQgdGhlIHRpbWUgdGhlIGNvZGUgd2FzIGdlbmVy
YXRlZC4KLWludDMyX3QgR1BCTWV0aG9kX1N5bnRheF9SYXdWYWx1ZShHUEJNZXRob2QgKm1lc3Nh
Z2UpOwotLy8vIFNldHMgdGhlIHJhdyB2YWx1ZSBvZiBhbiBAYyBHUEJNZXRob2QncyBAYyBzeW50
YXggcHJvcGVydHksIGFsbG93aW5nCi0vLy8gaXQgdG8gYmUgc2V0IHRvIGEgdmFsdWUgdGhhdCB3
YXMgbm90IGRlZmluZWQgYnkgdGhlIGVudW0gYXQgdGhlIHRpbWUgdGhlIGNvZGUKLS8vLyB3YXMg
Z2VuZXJhdGVkLgotdm9pZCBTZXRHUEJNZXRob2RfU3ludGF4X1Jhd1ZhbHVlKEdQQk1ldGhvZCAq
bWVzc2FnZSwgaW50MzJfdCB2YWx1ZSk7Ci0KLSNwcmFnbWEgbWFyayAtIEdQQk1peGluCi0KLXR5
cGVkZWYgR1BCX0VOVU0oR1BCTWl4aW5fRmllbGROdW1iZXIpIHsKLSAgR1BCTWl4aW5fRmllbGRO
dW1iZXJfTmFtZSA9IDEsCi0gIEdQQk1peGluX0ZpZWxkTnVtYmVyX1Jvb3QgPSAyLAotfTsKLQot
Ly8vIERlY2xhcmVzIGFuIEFQSSB0byBiZSBpbmNsdWRlZCBpbiB0aGlzIEFQSS4gVGhlIGluY2x1
ZGluZyBBUEkgbXVzdAotLy8vIHJlZGVjbGFyZSBhbGwgdGhlIG1ldGhvZHMgZnJvbSB0aGUgaW5j
bHVkZWQgQVBJLCBidXQgZG9jdW1lbnRhdGlvbgotLy8vIGFuZCBvcHRpb25zIGFyZSBpbmhlcml0
ZWQgYXMgZm9sbG93czoKLS8vLwotLy8vIC0gSWYgYWZ0ZXIgY29tbWVudCBhbmQgd2hpdGVzcGFj
ZSBzdHJpcHBpbmcsIHRoZSBkb2N1bWVudGF0aW9uCi0vLy8gICBzdHJpbmcgb2YgdGhlIHJlZGVj
bGFyZWQgbWV0aG9kIGlzIGVtcHR5LCBpdCB3aWxsIGJlIGluaGVyaXRlZAotLy8vICAgZnJvbSB0
aGUgb3JpZ2luYWwgbWV0aG9kLgotLy8vCi0vLy8gLSBFYWNoIGFubm90YXRpb24gYmVsb25naW5n
IHRvIHRoZSBzZXJ2aWNlIGNvbmZpZyAoaHR0cCwKLS8vLyAgIHZpc2liaWxpdHkpIHdoaWNoIGlz
IG5vdCBzZXQgaW4gdGhlIHJlZGVjbGFyZWQgbWV0aG9kIHdpbGwgYmUKLS8vLyAgIGluaGVyaXRl
ZC4KLS8vLwotLy8vIC0gSWYgYW4gaHR0cCBhbm5vdGF0aW9uIGlzIGluaGVyaXRlZCwgdGhlIHBh
dGggcGF0dGVybiB3aWxsIGJlCi0vLy8gICBtb2RpZmllZCBhcyBmb2xsb3dzLiBBbnkgdmVyc2lv
biBwcmVmaXggd2lsbCBiZSByZXBsYWNlZCBieSB0aGUKLS8vLyAgIHZlcnNpb24gb2YgdGhlIGlu
Y2x1ZGluZyBBUEkgcGx1cyB0aGUgW3Jvb3RdW10gcGF0aCBpZiBzcGVjaWZpZWQuCi0vLy8KLS8v
LyBFeGFtcGxlIG9mIGEgc2ltcGxlIG1peGluOgotLy8vCi0vLy8gICAgIHBhY2thZ2UgZ29vZ2xl
LmFjbC52MTsKLS8vLyAgICAgc2VydmljZSBBY2Nlc3NDb250cm9sIHsKLS8vLyAgICAgICAvLyBH
ZXQgdGhlIHVuZGVybHlpbmcgQUNMIG9iamVjdC4KLS8vLyAgICAgICBycGMgR2V0QWNsKEdldEFj
bFJlcXVlc3QpIHJldHVybnMgKEFjbCkgewotLy8vICAgICAgICAgb3B0aW9uIChnb29nbGUuYXBp
Lmh0dHApLmdldCA9ICIvdjEve3Jlc291cmNlPSoqfTpnZXRBY2wiOwotLy8vICAgICAgIH0KLS8v
LyAgICAgfQotLy8vCi0vLy8gICAgIHBhY2thZ2UgZ29vZ2xlLnN0b3JhZ2UudjI7Ci0vLy8gICAg
IHNlcnZpY2UgU3RvcmFnZSB7Ci0vLy8gICAgICAgcnBjIEdldEFjbChHZXRBY2xSZXF1ZXN0KSBy
ZXR1cm5zIChBY2wpOwotLy8vCi0vLy8gICAgICAgLy8gR2V0IGEgZGF0YSByZWNvcmQuCi0vLy8g
ICAgICAgcnBjIEdldERhdGEoR2V0RGF0YVJlcXVlc3QpIHJldHVybnMgKERhdGEpIHsKLS8vLyAg
ICAgICAgIG9wdGlvbiAoZ29vZ2xlLmFwaS5odHRwKS5nZXQgPSAiL3YyL3tyZXNvdXJjZT0qKn0i
OwotLy8vICAgICAgIH0KLS8vLyAgICAgfQotLy8vCi0vLy8gRXhhbXBsZSBvZiBhIG1peGluIGNv
bmZpZ3VyYXRpb246Ci0vLy8KLS8vLyAgICAgYXBpczoKLS8vLyAgICAgLSBuYW1lOiBnb29nbGUu
c3RvcmFnZS52Mi5TdG9yYWdlCi0vLy8gICAgICAgbWl4aW5zOgotLy8vICAgICAgIC0gbmFtZTog
Z29vZ2xlLmFjbC52MS5BY2Nlc3NDb250cm9sCi0vLy8KLS8vLyBUaGUgbWl4aW4gY29uc3RydWN0
IGltcGxpZXMgdGhhdCBhbGwgbWV0aG9kcyBpbiBgQWNjZXNzQ29udHJvbGAgYXJlCi0vLy8gYWxz
byBkZWNsYXJlZCB3aXRoIHNhbWUgbmFtZSBhbmQgcmVxdWVzdC9yZXNwb25zZSB0eXBlcyBpbgot
Ly8vIGBTdG9yYWdlYC4gQSBkb2N1bWVudGF0aW9uIGdlbmVyYXRvciBvciBhbm5vdGF0aW9uIHBy
b2Nlc3NvciB3aWxsCi0vLy8gc2VlIHRoZSBlZmZlY3RpdmUgYFN0b3JhZ2UuR2V0QWNsYCBtZXRo
b2QgYWZ0ZXIgaW5oZXJ0aW5nCi0vLy8gZG9jdW1lbnRhdGlvbiBhbmQgYW5ub3RhdGlvbnMgYXMg
Zm9sbG93czoKLS8vLwotLy8vICAgICBzZXJ2aWNlIFN0b3JhZ2UgewotLy8vICAgICAgIC8vIEdl
dCB0aGUgdW5kZXJseWluZyBBQ0wgb2JqZWN0LgotLy8vICAgICAgIHJwYyBHZXRBY2woR2V0QWNs
UmVxdWVzdCkgcmV0dXJucyAoQWNsKSB7Ci0vLy8gICAgICAgICBvcHRpb24gKGdvb2dsZS5hcGku
aHR0cCkuZ2V0ID0gIi92Mi97cmVzb3VyY2U9Kip9OmdldEFjbCI7Ci0vLy8gICAgICAgfQotLy8v
ICAgICAgIC4uLgotLy8vICAgICB9Ci0vLy8KLS8vLyBOb3RlIGhvdyB0aGUgdmVyc2lvbiBpbiB0
aGUgcGF0aCBwYXR0ZXJuIGNoYW5nZWQgZnJvbSBgdjFgIHRvIGB2MmAuCi0vLy8KLS8vLyBJZiB0
aGUgYHJvb3RgIGZpZWxkIGluIHRoZSBtaXhpbiBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBiZSBh
Ci0vLy8gcmVsYXRpdmUgcGF0aCB1bmRlciB3aGljaCBpbmhlcml0ZWQgSFRUUCBwYXRocyBhcmUg
cGxhY2VkLiBFeGFtcGxlOgotLy8vCi0vLy8gICAgIGFwaXM6Ci0vLy8gICAgIC0gbmFtZTogZ29v
Z2xlLnN0b3JhZ2UudjIuU3RvcmFnZQotLy8vICAgICAgIG1peGluczoKLS8vLyAgICAgICAtIG5h
bWU6IGdvb2dsZS5hY2wudjEuQWNjZXNzQ29udHJvbAotLy8vICAgICAgICAgcm9vdDogYWNscwot
Ly8vCi0vLy8gVGhpcyBpbXBsaWVzIHRoZSBmb2xsb3dpbmcgaW5oZXJpdGVkIEhUVFAgYW5ub3Rh
dGlvbjoKLS8vLwotLy8vICAgICBzZXJ2aWNlIFN0b3JhZ2UgewotLy8vICAgICAgIC8vIEdldCB0
aGUgdW5kZXJseWluZyBBQ0wgb2JqZWN0LgotLy8vICAgICAgIHJwYyBHZXRBY2woR2V0QWNsUmVx
dWVzdCkgcmV0dXJucyAoQWNsKSB7Ci0vLy8gICAgICAgICBvcHRpb24gKGdvb2dsZS5hcGkuaHR0
cCkuZ2V0ID0gIi92Mi9hY2xzL3tyZXNvdXJjZT0qKn06Z2V0QWNsIjsKLS8vLyAgICAgICB9Ci0v
Ly8gICAgICAgLi4uCi0vLy8gICAgIH0KLUBpbnRlcmZhY2UgR1BCTWl4aW4gOiBHUEJNZXNzYWdl
Ci0KLS8vLyBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIEFQSSB3aGljaCBpcyBpbmNs
dWRlZC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgY29weSwgbnVsbF9yZXNldHRh
YmxlKSBOU1N0cmluZyAqbmFtZTsKLQotLy8vIElmIG5vbi1lbXB0eSBzcGVjaWZpZXMgYSBwYXRo
IHVuZGVyIHdoaWNoIGluaGVyaXRlZCBIVFRQIHBhdGhzCi0vLy8gYXJlIHJvb3RlZC4KLUBwcm9w
ZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgY29weSwgbnVsbF9yZXNldHRhYmxlKSBOU1N0cmlu
ZyAqcm9vdDsKLQotQGVuZAotCi1OU19BU1NVTUVfTk9OTlVMTF9FTkQKLQotQ0ZfRVhURVJOX0Nf
RU5ECi0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLQotLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGdsb2JhbF9zY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9nb29nbGUvcHJv
dG9idWYvQXBpLnBib2JqYy5tIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9BcGkucGJvYmpj
Lm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YTA2ZTYwMDljMTEwNDM1NjVmM2Nm
NDgwMWM4ODc2NDU5Y2JmMGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9BcGkucGJvYmpjLm0KKysrIC9kZXYv
bnVsbApAQCAtMSwzNDggKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZm
ZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL2Fw
aS5wcm90bwotCi0jaW1wb3J0ICJHUEJQcm90b2NvbEJ1ZmZlcnNfUnVudGltZVN1cHBvcnQuaCIK
LSNpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9BcGkucGJvYmpjLmgiCi0jaW1wb3J0ICJnb29nbGUv
cHJvdG9idWYvU291cmNlQ29udGV4dC5wYm9iamMuaCIKLSNpbXBvcnQgImdvb2dsZS9wcm90b2J1
Zi9UeXBlLnBib2JqYy5oIgotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGltcG9ydHMpCi0K
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLQotI3ByYWdtYSBtYXJrIC0gR1BC
QXBpUm9vdAotCi1AaW1wbGVtZW50YXRpb24gR1BCQXBpUm9vdAotCi0rIChHUEJFeHRlbnNpb25S
ZWdpc3RyeSopZXh0ZW5zaW9uUmVnaXN0cnkgewotICAvLyBUaGlzIGlzIGNhbGxlZCBieSAraW5p
dGlhbGl6ZSBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5Ci0gIC8vIGFib3V0IHRocmVhZCBz
YWZldHkgYW5kIGluaXRpYWxpemF0aW9uIG9mIHJlZ2lzdHJ5LgotICBzdGF0aWMgR1BCRXh0ZW5z
aW9uUmVnaXN0cnkqIHJlZ2lzdHJ5ID0gbmlsOwotICBpZiAoIXJlZ2lzdHJ5KSB7Ci0gICAgR1BC
RGVidWdDaGVja1J1bnRpbWVWZXJzaW9uKCk7Ci0gICAgcmVnaXN0cnkgPSBbW0dQQkV4dGVuc2lv
blJlZ2lzdHJ5IGFsbG9jXSBpbml0XTsKLSAgICBbcmVnaXN0cnkgYWRkRXh0ZW5zaW9uczpbR1BC
U291cmNlQ29udGV4dFJvb3QgZXh0ZW5zaW9uUmVnaXN0cnldXTsKLSAgICBbcmVnaXN0cnkgYWRk
RXh0ZW5zaW9uczpbR1BCVHlwZVJvb3QgZXh0ZW5zaW9uUmVnaXN0cnldXTsKLSAgfQotICByZXR1
cm4gcmVnaXN0cnk7Ci19Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCQXBpUm9vdF9GaWxl
RGVzY3JpcHRvcgotCi1zdGF0aWMgR1BCRmlsZURlc2NyaXB0b3IgKkdQQkFwaVJvb3RfRmlsZURl
c2NyaXB0b3Iodm9pZCkgewotICAvLyBUaGlzIGlzIGNhbGxlZCBieSAraW5pdGlhbGl6ZSBzbyB0
aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5Ci0gIC8vIGFib3V0IHRocmVhZCBzYWZldHkgb2YgdGhl
IHNpbmdsZXRvbi4KLSAgc3RhdGljIEdQQkZpbGVEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gTlVM
TDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgR1BCRGVidWdDaGVja1J1bnRpbWVWZXJzaW9u
KCk7Ci0gICAgZGVzY3JpcHRvciA9IFtbR1BCRmlsZURlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRo
UGFja2FnZTpAImdvb2dsZS5wcm90b2J1ZiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4OkdQQkZpbGVTeW50YXhQcm90bzNdOwotICB9
Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi0jcHJhZ21hIG1hcmsgLSBHUEJBcGkKLQotQGlt
cGxlbWVudGF0aW9uIEdQQkFwaQotCi1AZHluYW1pYyBuYW1lOwotQGR5bmFtaWMgbWV0aG9kc0Fy
cmF5LCBtZXRob2RzQXJyYXlfQ291bnQ7Ci1AZHluYW1pYyBvcHRpb25zQXJyYXksIG9wdGlvbnNB
cnJheV9Db3VudDsKLUBkeW5hbWljIHZlcnNpb247Ci1AZHluYW1pYyBoYXNTb3VyY2VDb250ZXh0
LCBzb3VyY2VDb250ZXh0OwotQGR5bmFtaWMgbWl4aW5zQXJyYXksIG1peGluc0FycmF5X0NvdW50
OwotQGR5bmFtaWMgc3ludGF4OwotCi10eXBlZGVmIHN0cnVjdCBHUEJBcGlfX3N0b3JhZ2VfIHsK
LSAgdWludDMyX3QgX2hhc19zdG9yYWdlX1sxXTsKLSAgR1BCU3ludGF4IHN5bnRheDsKLSAgTlNT
dHJpbmcgKm5hbWU7Ci0gIE5TTXV0YWJsZUFycmF5ICptZXRob2RzQXJyYXk7Ci0gIE5TTXV0YWJs
ZUFycmF5ICpvcHRpb25zQXJyYXk7Ci0gIE5TU3RyaW5nICp2ZXJzaW9uOwotICBHUEJTb3VyY2VD
b250ZXh0ICpzb3VyY2VDb250ZXh0OwotICBOU011dGFibGVBcnJheSAqbWl4aW5zQXJyYXk7Ci19
IEdQQkFwaV9fc3RvcmFnZV87Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIHRocmVhZHNhZmUgYmVjYXVz
ZSBpdCBpcyBpbml0aWFsbHkgY2FsbGVkCi0vLyBpbiAraW5pdGlhbGl6ZSBmb3IgZWFjaCBzdWJj
bGFzcy4KLSsgKEdQQkRlc2NyaXB0b3IgKilkZXNjcmlwdG9yIHsKLSAgc3RhdGljIEdQQkRlc2Ny
aXB0b3IgKmRlc2NyaXB0b3IgPSBuaWw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIHN0YXRp
YyBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiBmaWVsZHNbXSA9IHsKLSAgICAgIHsKLSAgICAg
ICAgLm5hbWUgPSAibmFtZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9
IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBHUEJBcGlfRmllbGROdW1iZXJfTmFtZSwKLSAgICAg
ICAgLmhhc0luZGV4ID0gMCwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihH
UEJBcGlfX3N0b3JhZ2VfLCBuYW1lKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25h
bCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVTdHJpbmcsCi0gICAgICB9LAotICAg
ICAgewotICAgICAgICAubmFtZSA9ICJtZXRob2RzQXJyYXkiLAotICAgICAgICAuZGF0YVR5cGVT
cGVjaWZpYy5jbGFzc05hbWUgPSBHUEJTdHJpbmdpZnlTeW1ib2woR1BCTWV0aG9kKSwKLSAgICAg
ICAgLm51bWJlciA9IEdQQkFwaV9GaWVsZE51bWJlcl9NZXRob2RzQXJyYXksCi0gICAgICAgIC5o
YXNJbmRleCA9IEdQQk5vSGFzQml0LAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNl
dG9mKEdQQkFwaV9fc3RvcmFnZV8sIG1ldGhvZHNBcnJheSksCi0gICAgICAgIC5mbGFncyA9IEdQ
QkZpZWxkUmVwZWF0ZWQsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlTWVzc2FnZSwK
LSAgICAgIH0sCi0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gIm9wdGlvbnNBcnJheSIsCi0gICAg
ICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IEdQQlN0cmluZ2lmeVN5bWJvbChHUEJP
cHRpb24pLAotICAgICAgICAubnVtYmVyID0gR1BCQXBpX0ZpZWxkTnVtYmVyX09wdGlvbnNBcnJh
eSwKLSAgICAgICAgLmhhc0luZGV4ID0gR1BCTm9IYXNCaXQsCi0gICAgICAgIC5vZmZzZXQgPSAo
dWludDMyX3Qpb2Zmc2V0b2YoR1BCQXBpX19zdG9yYWdlXywgb3B0aW9uc0FycmF5KSwKLSAgICAg
ICAgLmZsYWdzID0gR1BCRmllbGRSZXBlYXRlZCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0
YVR5cGVNZXNzYWdlLAotICAgICAgfSwKLSAgICAgIHsKLSAgICAgICAgLm5hbWUgPSAidmVyc2lv
biIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAg
IC5udW1iZXIgPSBHUEJBcGlfRmllbGROdW1iZXJfVmVyc2lvbiwKLSAgICAgICAgLmhhc0luZGV4
ID0gMSwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihHUEJBcGlfX3N0b3Jh
Z2VfLCB2ZXJzaW9uKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAg
ICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVTdHJpbmcsCi0gICAgICB9LAotICAgICAgewotICAg
ICAgICAubmFtZSA9ICJzb3VyY2VDb250ZXh0IiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMu
Y2xhc3NOYW1lID0gR1BCU3RyaW5naWZ5U3ltYm9sKEdQQlNvdXJjZUNvbnRleHQpLAotICAgICAg
ICAubnVtYmVyID0gR1BCQXBpX0ZpZWxkTnVtYmVyX1NvdXJjZUNvbnRleHQsCi0gICAgICAgIC5o
YXNJbmRleCA9IDIsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCQXBp
X19zdG9yYWdlXywgc291cmNlQ29udGV4dCksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkT3B0
aW9uYWwsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlTWVzc2FnZSwKLSAgICAgIH0s
Ci0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gIm1peGluc0FycmF5IiwKLSAgICAgICAgLmRhdGFU
eXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gR1BCU3RyaW5naWZ5U3ltYm9sKEdQQk1peGluKSwKLSAg
ICAgICAgLm51bWJlciA9IEdQQkFwaV9GaWVsZE51bWJlcl9NaXhpbnNBcnJheSwKLSAgICAgICAg
Lmhhc0luZGV4ID0gR1BCTm9IYXNCaXQsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zm
c2V0b2YoR1BCQXBpX19zdG9yYWdlXywgbWl4aW5zQXJyYXkpLAotICAgICAgICAuZmxhZ3MgPSBH
UEJGaWVsZFJlcGVhdGVkLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZU1lc3NhZ2Us
Ci0gICAgICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9ICJzeW50YXgiLAotICAgICAgICAu
ZGF0YVR5cGVTcGVjaWZpYy5lbnVtRGVzY0Z1bmMgPSBHUEJTeW50YXhfRW51bURlc2NyaXB0b3Is
Ci0gICAgICAgIC5udW1iZXIgPSBHUEJBcGlfRmllbGROdW1iZXJfU3ludGF4LAotICAgICAgICAu
aGFzSW5kZXggPSAzLAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkFw
aV9fc3RvcmFnZV8sIHN5bnRheCksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkT3B0aW9uYWwg
fCBHUEJGaWVsZEhhc0VudW1EZXNjcmlwdG9yLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRh
VHlwZUVudW0sCi0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9jYWxEZXNj
cmlwdG9yID0KLSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6
W0dQQkFwaSBjbGFzc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290
Q2xhc3M6W0dQQkFwaVJvb3QgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWxlOkdQQkFwaVJvb3RfRmlsZURlc2NyaXB0b3IoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczpmaWVsZHMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6KHVpbnQzMl90KShzaXplb2YoZmllbGRz
KSAvIHNpemVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbikpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZihHUEJBcGlfX3N0b3JhZ2VfKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczowXTsKLSAgICBO
U0Fzc2VydChkZXNjcmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJlY3Vyc2VkISIpOwotICAgIGRl
c2NyaXB0b3IgPSBsb2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJuIGRlc2NyaXB0b3I7Ci19
Ci0KLUBlbmQKLQotaW50MzJfdCBHUEJBcGlfU3ludGF4X1Jhd1ZhbHVlKEdQQkFwaSAqbWVzc2Fn
ZSkgewotICBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gW0dQQkFwaSBkZXNjcmlwdG9yXTsK
LSAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCA9IFtkZXNjcmlwdG9yIGZpZWxkV2l0aE51bWJl
cjpHUEJBcGlfRmllbGROdW1iZXJfU3ludGF4XTsKLSAgcmV0dXJuIEdQQkdldE1lc3NhZ2VJbnQz
MkZpZWxkKG1lc3NhZ2UsIGZpZWxkKTsKLX0KLQotdm9pZCBTZXRHUEJBcGlfU3ludGF4X1Jhd1Zh
bHVlKEdQQkFwaSAqbWVzc2FnZSwgaW50MzJfdCB2YWx1ZSkgewotICBHUEJEZXNjcmlwdG9yICpk
ZXNjcmlwdG9yID0gW0dQQkFwaSBkZXNjcmlwdG9yXTsKLSAgR1BCRmllbGREZXNjcmlwdG9yICpm
aWVsZCA9IFtkZXNjcmlwdG9yIGZpZWxkV2l0aE51bWJlcjpHUEJBcGlfRmllbGROdW1iZXJfU3lu
dGF4XTsKLSAgR1BCU2V0SW50MzJJdmFyV2l0aEZpZWxkSW50ZXJuYWwobWVzc2FnZSwgZmllbGQs
IHZhbHVlLCBkZXNjcmlwdG9yLmZpbGUuc3ludGF4KTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gR1BC
TWV0aG9kCi0KLUBpbXBsZW1lbnRhdGlvbiBHUEJNZXRob2QKLQotQGR5bmFtaWMgbmFtZTsKLUBk
eW5hbWljIHJlcXVlc3RUeXBlVVJMOwotQGR5bmFtaWMgcmVxdWVzdFN0cmVhbWluZzsKLUBkeW5h
bWljIHJlc3BvbnNlVHlwZVVSTDsKLUBkeW5hbWljIHJlc3BvbnNlU3RyZWFtaW5nOwotQGR5bmFt
aWMgb3B0aW9uc0FycmF5LCBvcHRpb25zQXJyYXlfQ291bnQ7Ci1AZHluYW1pYyBzeW50YXg7Ci0K
LXR5cGVkZWYgc3RydWN0IEdQQk1ldGhvZF9fc3RvcmFnZV8gewotICB1aW50MzJfdCBfaGFzX3N0
b3JhZ2VfWzFdOwotICBHUEJTeW50YXggc3ludGF4OwotICBOU1N0cmluZyAqbmFtZTsKLSAgTlNT
dHJpbmcgKnJlcXVlc3RUeXBlVVJMOwotICBOU1N0cmluZyAqcmVzcG9uc2VUeXBlVVJMOwotICBO
U011dGFibGVBcnJheSAqb3B0aW9uc0FycmF5OwotfSBHUEJNZXRob2RfX3N0b3JhZ2VfOwotCi0v
LyBUaGlzIG1ldGhvZCBpcyB0aHJlYWRzYWZlIGJlY2F1c2UgaXQgaXMgaW5pdGlhbGx5IGNhbGxl
ZAotLy8gaW4gK2luaXRpYWxpemUgZm9yIGVhY2ggc3ViY2xhc3MuCi0rIChHUEJEZXNjcmlwdG9y
ICopZGVzY3JpcHRvciB7Ci0gIHN0YXRpYyBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gbmls
OwotICBpZiAoIWRlc2NyaXB0b3IpIHsKLSAgICBzdGF0aWMgR1BCTWVzc2FnZUZpZWxkRGVzY3Jp
cHRpb24gZmllbGRzW10gPSB7Ci0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gIm5hbWUiLAotICAg
ICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBOVUxMLAotICAgICAgICAubnVtYmVy
ID0gR1BCTWV0aG9kX0ZpZWxkTnVtYmVyX05hbWUsCi0gICAgICAgIC5oYXNJbmRleCA9IDAsCi0g
ICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCTWV0aG9kX19zdG9yYWdlXywg
bmFtZSksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkT3B0aW9uYWwsCi0gICAgICAgIC5kYXRh
VHlwZSA9IEdQQkRhdGFUeXBlU3RyaW5nLAotICAgICAgfSwKLSAgICAgIHsKLSAgICAgICAgLm5h
bWUgPSAicmVxdWVzdFR5cGVVUkwiLAotICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05h
bWUgPSBOVUxMLAotICAgICAgICAubnVtYmVyID0gR1BCTWV0aG9kX0ZpZWxkTnVtYmVyX1JlcXVl
c3RUeXBlVVJMLAotICAgICAgICAuaGFzSW5kZXggPSAxLAotICAgICAgICAub2Zmc2V0ID0gKHVp
bnQzMl90KW9mZnNldG9mKEdQQk1ldGhvZF9fc3RvcmFnZV8sIHJlcXVlc3RUeXBlVVJMKSwKLSAg
ICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCB8IEdQQkZpZWxkVGV4dEZvcm1hdE5hbWVD
dXN0b20sCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlU3RyaW5nLAotICAgICAgfSwK
LSAgICAgIHsKLSAgICAgICAgLm5hbWUgPSAicmVxdWVzdFN0cmVhbWluZyIsCi0gICAgICAgIC5k
YXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBHUEJN
ZXRob2RfRmllbGROdW1iZXJfUmVxdWVzdFN0cmVhbWluZywKLSAgICAgICAgLmhhc0luZGV4ID0g
MiwKLSAgICAgICAgLm9mZnNldCA9IDMsICAvLyBTdG9yZWQgaW4gX2hhc19zdG9yYWdlXyB0byBz
YXZlIHNwYWNlLgotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAotICAgICAgICAu
ZGF0YVR5cGUgPSBHUEJEYXRhVHlwZUJvb2wsCi0gICAgICB9LAotICAgICAgewotICAgICAgICAu
bmFtZSA9ICJyZXNwb25zZVR5cGVVUkwiLAotICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFz
c05hbWUgPSBOVUxMLAotICAgICAgICAubnVtYmVyID0gR1BCTWV0aG9kX0ZpZWxkTnVtYmVyX1Jl
c3BvbnNlVHlwZVVSTCwKLSAgICAgICAgLmhhc0luZGV4ID0gNCwKLSAgICAgICAgLm9mZnNldCA9
ICh1aW50MzJfdClvZmZzZXRvZihHUEJNZXRob2RfX3N0b3JhZ2VfLCByZXNwb25zZVR5cGVVUkwp
LAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsIHwgR1BCRmllbGRUZXh0Rm9ybWF0
TmFtZUN1c3RvbSwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVTdHJpbmcsCi0gICAg
ICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9ICJyZXNwb25zZVN0cmVhbWluZyIsCi0gICAg
ICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAgIC5udW1iZXIg
PSBHUEJNZXRob2RfRmllbGROdW1iZXJfUmVzcG9uc2VTdHJlYW1pbmcsCi0gICAgICAgIC5oYXNJ
bmRleCA9IDUsCi0gICAgICAgIC5vZmZzZXQgPSA2LCAgLy8gU3RvcmVkIGluIF9oYXNfc3RvcmFn
ZV8gdG8gc2F2ZSBzcGFjZS4KLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAg
ICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVCb29sLAotICAgICAgfSwKLSAgICAgIHsKLSAg
ICAgICAgLm5hbWUgPSAib3B0aW9uc0FycmF5IiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMu
Y2xhc3NOYW1lID0gR1BCU3RyaW5naWZ5U3ltYm9sKEdQQk9wdGlvbiksCi0gICAgICAgIC5udW1i
ZXIgPSBHUEJNZXRob2RfRmllbGROdW1iZXJfT3B0aW9uc0FycmF5LAotICAgICAgICAuaGFzSW5k
ZXggPSBHUEJOb0hhc0JpdCwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihH
UEJNZXRob2RfX3N0b3JhZ2VfLCBvcHRpb25zQXJyYXkpLAotICAgICAgICAuZmxhZ3MgPSBHUEJG
aWVsZFJlcGVhdGVkLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZU1lc3NhZ2UsCi0g
ICAgICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9ICJzeW50YXgiLAotICAgICAgICAuZGF0
YVR5cGVTcGVjaWZpYy5lbnVtRGVzY0Z1bmMgPSBHUEJTeW50YXhfRW51bURlc2NyaXB0b3IsCi0g
ICAgICAgIC5udW1iZXIgPSBHUEJNZXRob2RfRmllbGROdW1iZXJfU3ludGF4LAotICAgICAgICAu
aGFzSW5kZXggPSA3LAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQk1l
dGhvZF9fc3RvcmFnZV8sIHN5bnRheCksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkT3B0aW9u
YWwgfCBHUEJGaWVsZEhhc0VudW1EZXNjcmlwdG9yLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJE
YXRhVHlwZUVudW0sCi0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9jYWxE
ZXNjcmlwdG9yID0KLSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xh
c3M6W0dQQk1ldGhvZCBjbGFzc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByb290Q2xhc3M6W0dQQkFwaVJvb3QgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaWxlOkdQQkFwaVJvb3RfRmlsZURlc2NyaXB0b3IoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczpmaWVsZHMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6KHVpbnQzMl90KShzaXplb2Yo
ZmllbGRzKSAvIHNpemVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbikpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZihHUEJNZXRob2RfX3N0
b3JhZ2VfKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczow
XTsKLSNpZiAhR1BCT0JKQ19TS0lQX01FU1NBR0VfVEVYVEZPUk1BVF9FWFRSQVMKLSAgICBzdGF0
aWMgY29uc3QgY2hhciAqZXh0cmFUZXh0Rm9ybWF0SW5mbyA9Ci0gICAgICAgICJcMDAyXDAwMlww
MDdcMjQ0XDI0MSEhXDAwMFwwMDRcMDEwXDI0NFwyNDEhIVwwMDAiOwotICAgIFtsb2NhbERlc2Ny
aXB0b3Igc2V0dXBFeHRyYVRleHRJbmZvOmV4dHJhVGV4dEZvcm1hdEluZm9dOwotI2VuZGlmICAv
LyAhR1BCT0JKQ19TS0lQX01FU1NBR0VfVEVYVEZPUk1BVF9FWFRSQVMKLSAgICBOU0Fzc2VydChk
ZXNjcmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJlY3Vyc2VkISIpOwotICAgIGRlc2NyaXB0b3Ig
PSBsb2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJuIGRlc2NyaXB0b3I7Ci19Ci0KLUBlbmQK
LQotaW50MzJfdCBHUEJNZXRob2RfU3ludGF4X1Jhd1ZhbHVlKEdQQk1ldGhvZCAqbWVzc2FnZSkg
ewotICBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gW0dQQk1ldGhvZCBkZXNjcmlwdG9yXTsK
LSAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCA9IFtkZXNjcmlwdG9yIGZpZWxkV2l0aE51bWJl
cjpHUEJNZXRob2RfRmllbGROdW1iZXJfU3ludGF4XTsKLSAgcmV0dXJuIEdQQkdldE1lc3NhZ2VJ
bnQzMkZpZWxkKG1lc3NhZ2UsIGZpZWxkKTsKLX0KLQotdm9pZCBTZXRHUEJNZXRob2RfU3ludGF4
X1Jhd1ZhbHVlKEdQQk1ldGhvZCAqbWVzc2FnZSwgaW50MzJfdCB2YWx1ZSkgewotICBHUEJEZXNj
cmlwdG9yICpkZXNjcmlwdG9yID0gW0dQQk1ldGhvZCBkZXNjcmlwdG9yXTsKLSAgR1BCRmllbGRE
ZXNjcmlwdG9yICpmaWVsZCA9IFtkZXNjcmlwdG9yIGZpZWxkV2l0aE51bWJlcjpHUEJNZXRob2Rf
RmllbGROdW1iZXJfU3ludGF4XTsKLSAgR1BCU2V0SW50MzJJdmFyV2l0aEZpZWxkSW50ZXJuYWwo
bWVzc2FnZSwgZmllbGQsIHZhbHVlLCBkZXNjcmlwdG9yLmZpbGUuc3ludGF4KTsKLX0KLQotI3By
YWdtYSBtYXJrIC0gR1BCTWl4aW4KLQotQGltcGxlbWVudGF0aW9uIEdQQk1peGluCi0KLUBkeW5h
bWljIG5hbWU7Ci1AZHluYW1pYyByb290OwotCi10eXBlZGVmIHN0cnVjdCBHUEJNaXhpbl9fc3Rv
cmFnZV8gewotICB1aW50MzJfdCBfaGFzX3N0b3JhZ2VfWzFdOwotICBOU1N0cmluZyAqbmFtZTsK
LSAgTlNTdHJpbmcgKnJvb3Q7Ci19IEdQQk1peGluX19zdG9yYWdlXzsKLQotLy8gVGhpcyBtZXRo
b2QgaXMgdGhyZWFkc2FmZSBiZWNhdXNlIGl0IGlzIGluaXRpYWxseSBjYWxsZWQKLS8vIGluICtp
bml0aWFsaXplIGZvciBlYWNoIHN1YmNsYXNzLgotKyAoR1BCRGVzY3JpcHRvciAqKWRlc2NyaXB0
b3IgewotICBzdGF0aWMgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IG5pbDsKLSAgaWYgKCFk
ZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGljIEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uIGZpZWxk
c1tdID0gewotICAgICAgewotICAgICAgICAubmFtZSA9ICJuYW1lIiwKLSAgICAgICAgLmRhdGFU
eXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gTlVMTCwKLSAgICAgICAgLm51bWJlciA9IEdQQk1peGlu
X0ZpZWxkTnVtYmVyX05hbWUsCi0gICAgICAgIC5oYXNJbmRleCA9IDAsCi0gICAgICAgIC5vZmZz
ZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCTWl4aW5fX3N0b3JhZ2VfLCBuYW1lKSwKLSAgICAg
ICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0
YVR5cGVTdHJpbmcsCi0gICAgICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9ICJyb290IiwK
LSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gTlVMTCwKLSAgICAgICAgLm51
bWJlciA9IEdQQk1peGluX0ZpZWxkTnVtYmVyX1Jvb3QsCi0gICAgICAgIC5oYXNJbmRleCA9IDEs
Ci0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCTWl4aW5fX3N0b3JhZ2Vf
LCByb290KSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAgICAgLmRh
dGFUeXBlID0gR1BCRGF0YVR5cGVTdHJpbmcsCi0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVz
Y3JpcHRvciAqbG9jYWxEZXNjcmlwdG9yID0KLSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NE
ZXNjcmlwdG9yRm9yQ2xhc3M6W0dQQk1peGluIGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJvb3RDbGFzczpbR1BCQXBpUm9vdCBjbGFzc10KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6R1BCQXBpUm9vdF9GaWxlRGVzY3Jp
cHRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzOmZp
ZWxkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDb3VudDoodWlu
dDMyX3QpKHNpemVvZihmaWVsZHMpIC8gc2l6ZW9mKEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9u
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVNpemU6c2l6ZW9m
KEdQQk1peGluX19zdG9yYWdlXykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxhZ3M6MF07Ci0gICAgTlNBc3NlcnQoZGVzY3JpcHRvciA9PSBuaWwsIEAiU3RhcnR1
cCByZWN1cnNlZCEiKTsKLSAgICBkZXNjcmlwdG9yID0gbG9jYWxEZXNjcmlwdG9yOwotICB9Ci0g
IHJldHVybiBkZXNjcmlwdG9yOwotfQotCi1AZW5kCi0KLQotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAotCi0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2xvYmFsX3Njb3BlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9EdXJhdGlvbi5wYm9iamMuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2Jq
ZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvRHVyYXRpb24ucGJvYmpjLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI5ODg4ZDZjZjE4MDNkMDAzZTBhY2FmODAzYWU1ZDA3MTZhMWMzMzEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVj
L2dvb2dsZS9wcm90b2J1Zi9EdXJhdGlvbi5wYm9iamMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
MSArMCwwIEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4g
IERPIE5PVCBFRElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8K
LQotI2ltcG9ydCAiR1BCUHJvdG9jb2xCdWZmZXJzLmgiCi0KLSNpZiBHT09HTEVfUFJPVE9CVUZf
T0JKQ19HRU5fVkVSU0lPTiAhPSAzMDAwMQotI2Vycm9yIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVk
IGJ5IGEgZGlmZmVyZW50IHZlcnNpb24gb2YgcHJvdG9jIHdoaWNoIGlzIGluY29tcGF0aWJsZSB3
aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGxpYnJhcnkgc291cmNlcy4KLSNlbmRpZgotCi0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoaW1wb3J0cykKLQotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQt
ZGVjbGFyYXRpb25zIgotCi1DRl9FWFRFUk5fQ19CRUdJTgotCi1OU19BU1NVTUVfTk9OTlVMTF9C
RUdJTgotCi0jcHJhZ21hIG1hcmsgLSBHUEJEdXJhdGlvblJvb3QKLQotLy8vIEV4cG9zZXMgdGhl
IGV4dGVuc2lvbiByZWdpc3RyeSBmb3IgdGhpcyBmaWxlLgotLy8vCi0vLy8gVGhlIGJhc2UgY2xh
c3MgcHJvdmlkZXM6Ci0vLy8gQGNvZGUKLS8vLyAgICsgKEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICop
ZXh0ZW5zaW9uUmVnaXN0cnk7Ci0vLy8gQGVuZGNvZGUKLS8vLyB3aGljaCBpcyBhIEBjIEdQQkV4
dGVuc2lvblJlZ2lzdHJ5IHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBleHRlbnNpb25zIGRlZmluZWQg
YnkKLS8vLyB0aGlzIGZpbGUgYW5kIGFsbCBmaWxlcyB0aGF0IGl0IGRlcGVuZHMgb24uCi1AaW50
ZXJmYWNlIEdQQkR1cmF0aW9uUm9vdCA6IEdQQlJvb3RPYmplY3QKLUBlbmQKLQotI3ByYWdtYSBt
YXJrIC0gR1BCRHVyYXRpb24KLQotdHlwZWRlZiBHUEJfRU5VTShHUEJEdXJhdGlvbl9GaWVsZE51
bWJlcikgewotICBHUEJEdXJhdGlvbl9GaWVsZE51bWJlcl9TZWNvbmRzID0gMSwKLSAgR1BCRHVy
YXRpb25fRmllbGROdW1iZXJfTmFub3MgPSAyLAotfTsKLQotLy8vIEEgRHVyYXRpb24gcmVwcmVz
ZW50cyBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIHNwYW4gb2YgdGltZSByZXByZXNlbnRlZAotLy8v
IGFzIGEgY291bnQgb2Ygc2Vjb25kcyBhbmQgZnJhY3Rpb25zIG9mIHNlY29uZHMgYXQgbmFub3Nl
Y29uZAotLy8vIHJlc29sdXRpb24uIEl0IGlzIGluZGVwZW5kZW50IG9mIGFueSBjYWxlbmRhciBh
bmQgY29uY2VwdHMgbGlrZSAiZGF5IgotLy8vIG9yICJtb250aCIuIEl0IGlzIHJlbGF0ZWQgdG8g
VGltZXN0YW1wIGluIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotLy8vIHR3byBUaW1lc3Rh
bXAgdmFsdWVzIGlzIGEgRHVyYXRpb24gYW5kIGl0IGNhbiBiZSBhZGRlZCBvciBzdWJ0cmFjdGVk
Ci0vLy8gZnJvbSBhIFRpbWVzdGFtcC4gUmFuZ2UgaXMgYXBwcm94aW1hdGVseSArLTEwLDAwMCB5
ZWFycy4KLS8vLwotLy8vIEV4YW1wbGUgMTogQ29tcHV0ZSBEdXJhdGlvbiBmcm9tIHR3byBUaW1l
c3RhbXBzIGluIHBzZXVkbyBjb2RlLgotLy8vCi0vLy8gICAgIFRpbWVzdGFtcCBzdGFydCA9IC4u
LjsKLS8vLyAgICAgVGltZXN0YW1wIGVuZCA9IC4uLjsKLS8vLyAgICAgRHVyYXRpb24gZHVyYXRp
b24gPSAuLi47Ci0vLy8KLS8vLyAgICAgZHVyYXRpb24uc2Vjb25kcyA9IGVuZC5zZWNvbmRzIC0g
c3RhcnQuc2Vjb25kczsKLS8vLyAgICAgZHVyYXRpb24ubmFub3MgPSBlbmQubmFub3MgLSBzdGFy
dC5uYW5vczsKLS8vLwotLy8vICAgICBpZiAoZHVyYXRpb24uc2Vjb25kcyA8IDAgJiYgZHVyYXRp
b24ubmFub3MgPiAwKSB7Ci0vLy8gICAgICAgZHVyYXRpb24uc2Vjb25kcyArPSAxOwotLy8vICAg
ICAgIGR1cmF0aW9uLm5hbm9zIC09IDEwMDAwMDAwMDA7Ci0vLy8gICAgIH0gZWxzZSBpZiAoZHVy
YXRpb25zLnNlY29uZHMgPiAwICYmIGR1cmF0aW9uLm5hbm9zIDwgMCkgewotLy8vICAgICAgIGR1
cmF0aW9uLnNlY29uZHMgLT0gMTsKLS8vLyAgICAgICBkdXJhdGlvbi5uYW5vcyArPSAxMDAwMDAw
MDAwOwotLy8vICAgICB9Ci0vLy8KLS8vLyBFeGFtcGxlIDI6IENvbXB1dGUgVGltZXN0YW1wIGZy
b20gVGltZXN0YW1wICsgRHVyYXRpb24gaW4gcHNldWRvIGNvZGUuCi0vLy8KLS8vLyAgICAgVGlt
ZXN0YW1wIHN0YXJ0ID0gLi4uOwotLy8vICAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IC4uLjsKLS8v
LyAgICAgVGltZXN0YW1wIGVuZCA9IC4uLjsKLS8vLwotLy8vICAgICBlbmQuc2Vjb25kcyA9IHN0
YXJ0LnNlY29uZHMgKyBkdXJhdGlvbi5zZWNvbmRzOwotLy8vICAgICBlbmQubmFub3MgPSBzdGFy
dC5uYW5vcyArIGR1cmF0aW9uLm5hbm9zOwotLy8vCi0vLy8gICAgIGlmIChlbmQubmFub3MgPCAw
KSB7Ci0vLy8gICAgICAgZW5kLnNlY29uZHMgLT0gMTsKLS8vLyAgICAgICBlbmQubmFub3MgKz0g
MTAwMDAwMDAwMDsKLS8vLyAgICAgfSBlbHNlIGlmIChlbmQubmFub3MgPj0gMTAwMDAwMDAwMCkg
ewotLy8vICAgICAgIGVuZC5zZWNvbmRzICs9IDE7Ci0vLy8gICAgICAgZW5kLm5hbm9zIC09IDEw
MDAwMDAwMDA7Ci0vLy8gICAgIH0KLUBpbnRlcmZhY2UgR1BCRHVyYXRpb24gOiBHUEJNZXNzYWdl
Ci0KLS8vLyBTaWduZWQgc2Vjb25kcyBvZiB0aGUgc3BhbiBvZiB0aW1lLiBNdXN0IGJlIGZyb20g
LTMxNSw1NzYsMDAwLDAwMAotLy8vIHRvICszMTUsNTc2LDAwMCwwMDAgaW5jbHVzaXZlLgotQHBy
b3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlKSBpbnQ2NF90IHNlY29uZHM7Ci0KLS8vLyBTaWdu
ZWQgZnJhY3Rpb25zIG9mIGEgc2Vjb25kIGF0IG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBvZiB0aGUg
c3BhbgotLy8vIG9mIHRpbWUuIER1cmF0aW9ucyBsZXNzIHRoYW4gb25lIHNlY29uZCBhcmUgcmVw
cmVzZW50ZWQgd2l0aCBhIDAKLS8vLyBgc2Vjb25kc2AgZmllbGQgYW5kIGEgcG9zaXRpdmUgb3Ig
bmVnYXRpdmUgYG5hbm9zYCBmaWVsZC4gRm9yIGR1cmF0aW9ucwotLy8vIG9mIG9uZSBzZWNvbmQg
b3IgbW9yZSwgYSBub24temVybyB2YWx1ZSBmb3IgdGhlIGBuYW5vc2AgZmllbGQgbXVzdCBiZQot
Ly8vIG9mIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGBzZWNvbmRzYCBmaWVsZC4gTXVzdCBiZSBmcm9t
IC05OTksOTk5LDk5OQotLy8vIHRvICs5OTksOTk5LDk5OSBpbmNsdXNpdmUuCi1AcHJvcGVydHko
bm9uYXRvbWljLCByZWFkd3JpdGUpIGludDMyX3QgbmFub3M7Ci0KLUBlbmQKLQotTlNfQVNTVU1F
X05PTk5VTExfRU5ECi0KLUNGX0VYVEVSTl9DX0VORAotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL0R1cmF0aW9uLnBib2JqYy5tIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmpl
Y3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9EdXJhdGlvbi5wYm9iamMubQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggN2RkNmI2NGE3YjE1MGMwYzI2MzQzMTQ5YzBmODQ0NDhiN2UzYTFmNS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMv
Z29vZ2xlL3Byb3RvYnVmL0R1cmF0aW9uLnBib2JqYy5tCisrKyAvZGV2L251bGwKQEAgLTEsODgg
KzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBE
TyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvCi0K
LSNpbXBvcnQgIkdQQlByb3RvY29sQnVmZmVyc19SdW50aW1lU3VwcG9ydC5oIgotI2ltcG9ydCAi
Z29vZ2xlL3Byb3RvYnVmL0R1cmF0aW9uLnBib2JqYy5oIgotLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGltcG9ydHMpCi0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLQot
I3ByYWdtYSBtYXJrIC0gR1BCRHVyYXRpb25Sb290Ci0KLUBpbXBsZW1lbnRhdGlvbiBHUEJEdXJh
dGlvblJvb3QKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBHUEJEdXJhdGlvblJvb3RfRmlsZURl
c2NyaXB0b3IKLQotc3RhdGljIEdQQkZpbGVEZXNjcmlwdG9yICpHUEJEdXJhdGlvblJvb3RfRmls
ZURlc2NyaXB0b3Iodm9pZCkgewotICAvLyBUaGlzIGlzIGNhbGxlZCBieSAraW5pdGlhbGl6ZSBz
byB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5Ci0gIC8vIGFib3V0IHRocmVhZCBzYWZldHkgb2Yg
dGhlIHNpbmdsZXRvbi4KLSAgc3RhdGljIEdQQkZpbGVEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0g
TlVMTDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgR1BCRGVidWdDaGVja1J1bnRpbWVWZXJz
aW9uKCk7Ci0gICAgZGVzY3JpcHRvciA9IFtbR1BCRmlsZURlc2NyaXB0b3IgYWxsb2NdIGluaXRX
aXRoUGFja2FnZTpAImdvb2dsZS5wcm90b2J1ZiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4OkdQQkZpbGVTeW50YXhQcm90bzNdOwot
ICB9Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi0jcHJhZ21hIG1hcmsgLSBHUEJEdXJhdGlv
bgotCi1AaW1wbGVtZW50YXRpb24gR1BCRHVyYXRpb24KLQotQGR5bmFtaWMgc2Vjb25kczsKLUBk
eW5hbWljIG5hbm9zOwotCi10eXBlZGVmIHN0cnVjdCBHUEJEdXJhdGlvbl9fc3RvcmFnZV8gewot
ICB1aW50MzJfdCBfaGFzX3N0b3JhZ2VfWzFdOwotICBpbnQzMl90IG5hbm9zOwotICBpbnQ2NF90
IHNlY29uZHM7Ci19IEdQQkR1cmF0aW9uX19zdG9yYWdlXzsKLQotLy8gVGhpcyBtZXRob2QgaXMg
dGhyZWFkc2FmZSBiZWNhdXNlIGl0IGlzIGluaXRpYWxseSBjYWxsZWQKLS8vIGluICtpbml0aWFs
aXplIGZvciBlYWNoIHN1YmNsYXNzLgotKyAoR1BCRGVzY3JpcHRvciAqKWRlc2NyaXB0b3Igewot
ICBzdGF0aWMgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IG5pbDsKLSAgaWYgKCFkZXNjcmlw
dG9yKSB7Ci0gICAgc3RhdGljIEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uIGZpZWxkc1tdID0g
ewotICAgICAgewotICAgICAgICAubmFtZSA9ICJzZWNvbmRzIiwKLSAgICAgICAgLmRhdGFUeXBl
U3BlY2lmaWMuY2xhc3NOYW1lID0gTlVMTCwKLSAgICAgICAgLm51bWJlciA9IEdQQkR1cmF0aW9u
X0ZpZWxkTnVtYmVyX1NlY29uZHMsCi0gICAgICAgIC5oYXNJbmRleCA9IDAsCi0gICAgICAgIC5v
ZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCRHVyYXRpb25fX3N0b3JhZ2VfLCBzZWNvbmRz
KSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAgICAgLmRhdGFUeXBl
ID0gR1BCRGF0YVR5cGVJbnQ2NCwKLSAgICAgIH0sCi0gICAgICB7Ci0gICAgICAgIC5uYW1lID0g
Im5hbm9zIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gTlVMTCwKLSAg
ICAgICAgLm51bWJlciA9IEdQQkR1cmF0aW9uX0ZpZWxkTnVtYmVyX05hbm9zLAotICAgICAgICAu
aGFzSW5kZXggPSAxLAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkR1
cmF0aW9uX19zdG9yYWdlXywgbmFub3MpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlv
bmFsLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZUludDMyLAotICAgICAgfSwKLSAg
ICB9OwotICAgIEdQQkRlc2NyaXB0b3IgKmxvY2FsRGVzY3JpcHRvciA9Ci0gICAgICAgIFtHUEJE
ZXNjcmlwdG9yIGFsbG9jRGVzY3JpcHRvckZvckNsYXNzOltHUEJEdXJhdGlvbiBjbGFzc10KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290Q2xhc3M6W0dQQkR1cmF0aW9u
Um9vdCBjbGFzc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bGU6R1BCRHVyYXRpb25Sb290X0ZpbGVEZXNjcmlwdG9yKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZHM6ZmllbGRzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaWVsZENvdW50Oih1aW50MzJfdCkoc2l6ZW9mKGZpZWxkcykgLyBzaXpl
b2YoR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb24pKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlU2l6ZTpzaXplb2YoR1BCRHVyYXRpb25fX3N0b3JhZ2VfKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczowXTsKLSAgICBOU0Fz
c2VydChkZXNjcmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJlY3Vyc2VkISIpOwotICAgIGRlc2Ny
aXB0b3IgPSBsb2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJuIGRlc2NyaXB0b3I7Ci19Ci0K
LUBlbmQKLQotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0KLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvZ29vZ2xl
L3Byb3RvYnVmL0VtcHR5LnBib2JqYy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9FbXB0
eS5wYm9iamMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMzZGIwMTc1ZjYyYmNl
OWExZDNiY2I2NzdjNGVkN2MxZGRlYzU5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL0VtcHR5LnBib2JqYy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90
b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3By
b3RvYnVmL2VtcHR5LnByb3RvCi0KLSNpbXBvcnQgIkdQQlByb3RvY29sQnVmZmVycy5oIgotCi0j
aWYgR09PR0xFX1BST1RPQlVGX09CSkNfR0VOX1ZFUlNJT04gIT0gMzAwMDEKLSNlcnJvciBUaGlz
IGZpbGUgd2FzIGdlbmVyYXRlZCBieSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHByb3RvYyB3aGlj
aCBpcyBpbmNvbXBhdGlibGUgd2l0aCB5b3VyIFByb3RvY29sIEJ1ZmZlciBsaWJyYXJ5IHNvdXJj
ZXMuCi0jZW5kaWYKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGltcG9ydHMpCi0KLSNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLQotQ0ZfRVhURVJOX0NfQkVHSU4KLQot
TlNfQVNTVU1FX05PTk5VTExfQkVHSU4KLQotI3ByYWdtYSBtYXJrIC0gR1BCRW1wdHlSb290Ci0K
LS8vLyBFeHBvc2VzIHRoZSBleHRlbnNpb24gcmVnaXN0cnkgZm9yIHRoaXMgZmlsZS4KLS8vLwot
Ly8vIFRoZSBiYXNlIGNsYXNzIHByb3ZpZGVzOgotLy8vIEBjb2RlCi0vLy8gICArIChHUEJFeHRl
bnNpb25SZWdpc3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5OwotLy8vIEBlbmRjb2RlCi0vLy8gd2hp
Y2ggaXMgYSBAYyBHUEJFeHRlbnNpb25SZWdpc3RyeSB0aGF0IGluY2x1ZGVzIGFsbCB0aGUgZXh0
ZW5zaW9ucyBkZWZpbmVkIGJ5Ci0vLy8gdGhpcyBmaWxlIGFuZCBhbGwgZmlsZXMgdGhhdCBpdCBk
ZXBlbmRzIG9uLgotQGludGVyZmFjZSBHUEJFbXB0eVJvb3QgOiBHUEJSb290T2JqZWN0Ci1AZW5k
Ci0KLSNwcmFnbWEgbWFyayAtIEdQQkVtcHR5Ci0KLS8vLyBBIGdlbmVyaWMgZW1wdHkgbWVzc2Fn
ZSB0aGF0IHlvdSBjYW4gcmUtdXNlIHRvIGF2b2lkIGRlZmluaW5nIGR1cGxpY2F0ZWQKLS8vLyBl
bXB0eSBtZXNzYWdlcyBpbiB5b3VyIEFQSXMuIEEgdHlwaWNhbCBleGFtcGxlIGlzIHRvIHVzZSBp
dCBhcyB0aGUgcmVxdWVzdAotLy8vIG9yIHRoZSByZXNwb25zZSB0eXBlIG9mIGFuIEFQSSBtZXRo
b2QuIEZvciBpbnN0YW5jZToKLS8vLwotLy8vICAgICBzZXJ2aWNlIEZvbyB7Ci0vLy8gICAgICAg
cnBjIEJhcihnb29nbGUucHJvdG9idWYuRW1wdHkpIHJldHVybnMgKGdvb2dsZS5wcm90b2J1Zi5F
bXB0eSk7Ci0vLy8gICAgIH0KLS8vLwotLy8vIFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBg
RW1wdHlgIGlzIGVtcHR5IEpTT04gb2JqZWN0IGB7fWAuCi1AaW50ZXJmYWNlIEdQQkVtcHR5IDog
R1BCTWVzc2FnZQotCi1AZW5kCi0KLU5TX0FTU1VNRV9OT05OVUxMX0VORAotCi1DRl9FWFRFUk5f
Q19FTkQKLQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotCi0vLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZ2xvYmFsX3Njb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9w
cm90b2J1Zi9FbXB0eS5wYm9iamMubSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvRW1wdHku
cGJvYmpjLm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NzUzYWFmNDQ2M2Y2ZWQ4
MWE0Njg1YzRjN2ZmNzYyYTQxOTI0ZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9FbXB0eS5wYm9iamMubQor
KysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9j
b2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90
b2J1Zi9lbXB0eS5wcm90bwotCi0jaW1wb3J0ICJHUEJQcm90b2NvbEJ1ZmZlcnNfUnVudGltZVN1
cHBvcnQuaCIKLSNpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9FbXB0eS5wYm9iamMuaCIKLS8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChpbXBvcnRzKQotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1k
ZWNsYXJhdGlvbnMiCi0KLSNwcmFnbWEgbWFyayAtIEdQQkVtcHR5Um9vdAotCi1AaW1wbGVtZW50
YXRpb24gR1BCRW1wdHlSb290Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCRW1wdHlSb290
X0ZpbGVEZXNjcmlwdG9yCi0KLXN0YXRpYyBHUEJGaWxlRGVzY3JpcHRvciAqR1BCRW1wdHlSb290
X0ZpbGVEZXNjcmlwdG9yKHZvaWQpIHsKLSAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgK2luaXRpYWxp
emUgc28gdGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeQotICAvLyBhYm91dCB0aHJlYWQgc2FmZXR5
IG9mIHRoZSBzaW5nbGV0b24uCi0gIHN0YXRpYyBHUEJGaWxlRGVzY3JpcHRvciAqZGVzY3JpcHRv
ciA9IE5VTEw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIEdQQkRlYnVnQ2hlY2tSdW50aW1l
VmVyc2lvbigpOwotICAgIGRlc2NyaXB0b3IgPSBbW0dQQkZpbGVEZXNjcmlwdG9yIGFsbG9jXSBp
bml0V2l0aFBhY2thZ2U6QCJnb29nbGUucHJvdG9idWYiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheDpHUEJGaWxlU3ludGF4UHJvdG8z
XTsKLSAgfQotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotI3ByYWdtYSBtYXJrIC0gR1BCRW1w
dHkKLQotQGltcGxlbWVudGF0aW9uIEdQQkVtcHR5Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgR1BCRW1w
dHlfX3N0b3JhZ2VfIHsKLSAgdWludDMyX3QgX2hhc19zdG9yYWdlX1sxXTsKLX0gR1BCRW1wdHlf
X3N0b3JhZ2VfOwotCi0vLyBUaGlzIG1ldGhvZCBpcyB0aHJlYWRzYWZlIGJlY2F1c2UgaXQgaXMg
aW5pdGlhbGx5IGNhbGxlZAotLy8gaW4gK2luaXRpYWxpemUgZm9yIGVhY2ggc3ViY2xhc3MuCi0r
IChHUEJEZXNjcmlwdG9yICopZGVzY3JpcHRvciB7Ci0gIHN0YXRpYyBHUEJEZXNjcmlwdG9yICpk
ZXNjcmlwdG9yID0gbmlsOwotICBpZiAoIWRlc2NyaXB0b3IpIHsKLSAgICBHUEJEZXNjcmlwdG9y
ICpsb2NhbERlc2NyaXB0b3IgPQotICAgICAgICBbR1BCRGVzY3JpcHRvciBhbGxvY0Rlc2NyaXB0
b3JGb3JDbGFzczpbR1BCRW1wdHkgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcm9vdENsYXNzOltHUEJFbXB0eVJvb3QgY2xhc3NdCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOkdQQkVtcHR5Um9vdF9GaWxlRGVzY3JpcHRv
cigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzOk5VTEwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6MAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlU2l6ZTpzaXplb2YoR1BCRW1wdHlf
X3N0b3JhZ2VfKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFn
czowXTsKLSAgICBOU0Fzc2VydChkZXNjcmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJlY3Vyc2Vk
ISIpOwotICAgIGRlc2NyaXB0b3IgPSBsb2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJuIGRl
c2NyaXB0b3I7Ci19Ci0KLUBlbmQKLQotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0K
LS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29i
amVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL0ZpZWxkTWFzay5wYm9iamMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9n
b29nbGUvcHJvdG9idWYvRmllbGRNYXNrLnBib2JqYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3M2NiZDhhNTg1MDhmNzI1NDU1OGM2NTVhOGYwZTc1YWE2MTAxZmM2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9nb29nbGUv
cHJvdG9idWYvRmllbGRNYXNrLnBib2JqYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAg
QEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9U
IEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNrLnByb3RvCi0KLSNp
bXBvcnQgIkdQQlByb3RvY29sQnVmZmVycy5oIgotCi0jaWYgR09PR0xFX1BST1RPQlVGX09CSkNf
R0VOX1ZFUlNJT04gIT0gMzAwMDEKLSNlcnJvciBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBh
IGRpZmZlcmVudCB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCB5
b3VyIFByb3RvY29sIEJ1ZmZlciBsaWJyYXJ5IHNvdXJjZXMuCi0jZW5kaWYKLQotLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGltcG9ydHMpCi0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLQotQ0ZfRVhURVJOX0NfQkVHSU4KLQotTlNfQVNTVU1FX05PTk5VTExfQkVHSU4K
LQotI3ByYWdtYSBtYXJrIC0gR1BCRmllbGRNYXNrUm9vdAotCi0vLy8gRXhwb3NlcyB0aGUgZXh0
ZW5zaW9uIHJlZ2lzdHJ5IGZvciB0aGlzIGZpbGUuCi0vLy8KLS8vLyBUaGUgYmFzZSBjbGFzcyBw
cm92aWRlczoKLS8vLyBAY29kZQotLy8vICAgKyAoR1BCRXh0ZW5zaW9uUmVnaXN0cnkgKilleHRl
bnNpb25SZWdpc3RyeTsKLS8vLyBAZW5kY29kZQotLy8vIHdoaWNoIGlzIGEgQGMgR1BCRXh0ZW5z
aW9uUmVnaXN0cnkgdGhhdCBpbmNsdWRlcyBhbGwgdGhlIGV4dGVuc2lvbnMgZGVmaW5lZCBieQot
Ly8vIHRoaXMgZmlsZSBhbmQgYWxsIGZpbGVzIHRoYXQgaXQgZGVwZW5kcyBvbi4KLUBpbnRlcmZh
Y2UgR1BCRmllbGRNYXNrUm9vdCA6IEdQQlJvb3RPYmplY3QKLUBlbmQKLQotI3ByYWdtYSBtYXJr
IC0gR1BCRmllbGRNYXNrCi0KLXR5cGVkZWYgR1BCX0VOVU0oR1BCRmllbGRNYXNrX0ZpZWxkTnVt
YmVyKSB7Ci0gIEdQQkZpZWxkTWFza19GaWVsZE51bWJlcl9QYXRoc0FycmF5ID0gMSwKLX07Ci0K
LS8vLyBgRmllbGRNYXNrYCByZXByZXNlbnRzIGEgc2V0IG9mIHN5bWJvbGljIGZpZWxkIHBhdGhz
LCBmb3IgZXhhbXBsZToKLS8vLwotLy8vICAgICBwYXRoczogImYuYSIKLS8vLyAgICAgcGF0aHM6
ICJmLmIuZCIKLS8vLwotLy8vIEhlcmUgYGZgIHJlcHJlc2VudHMgYSBmaWVsZCBpbiBzb21lIHJv
b3QgbWVzc2FnZSwgYGFgIGFuZCBgYmAKLS8vLyBmaWVsZHMgaW4gdGhlIG1lc3NhZ2UgZm91bmQg
aW4gYGZgLCBhbmQgYGRgIGEgZmllbGQgZm91bmQgaW4gdGhlCi0vLy8gbWVzc2FnZSBpbiBgZi5i
YC4KLS8vLwotLy8vIEZpZWxkIG1hc2tzIGFyZSB1c2VkIHRvIHNwZWNpZnkgYSBzdWJzZXQgb2Yg
ZmllbGRzIHRoYXQgc2hvdWxkIGJlCi0vLy8gcmV0dXJuZWQgYnkgYSBnZXQgb3BlcmF0aW9uIG9y
IG1vZGlmaWVkIGJ5IGFuIHVwZGF0ZSBvcGVyYXRpb24uCi0vLy8gRmllbGQgbWFza3MgYWxzbyBo
YXZlIGEgY3VzdG9tIEpTT04gZW5jb2RpbmcgKHNlZSBiZWxvdykuCi0vLy8KLS8vLyAjIEZpZWxk
IE1hc2tzIGluIFByb2plY3Rpb25zCi0vLy8KLS8vLyBXaGVuIHVzZWQgaW4gdGhlIGNvbnRleHQg
b2YgYSBwcm9qZWN0aW9uLCBhIHJlc3BvbnNlIG1lc3NhZ2Ugb3IKLS8vLyBzdWItbWVzc2FnZSBp
cyBmaWx0ZXJlZCBieSB0aGUgQVBJIHRvIG9ubHkgY29udGFpbiB0aG9zZSBmaWVsZHMgYXMKLS8v
LyBzcGVjaWZpZWQgaW4gdGhlIG1hc2suIEZvciBleGFtcGxlLCBpZiB0aGUgbWFzayBpbiB0aGUg
cHJldmlvdXMKLS8vLyBleGFtcGxlIGlzIGFwcGxpZWQgdG8gYSByZXNwb25zZSBtZXNzYWdlIGFz
IGZvbGxvd3M6Ci0vLy8KLS8vLyAgICAgZiB7Ci0vLy8gICAgICAgYSA6IDIyCi0vLy8gICAgICAg
YiB7Ci0vLy8gICAgICAgICBkIDogMQotLy8vICAgICAgICAgeCA6IDIKLS8vLyAgICAgICB9Ci0v
Ly8gICAgICAgeSA6IDEzCi0vLy8gICAgIH0KLS8vLyAgICAgejogOAotLy8vCi0vLy8gVGhlIHJl
c3VsdCB3aWxsIG5vdCBjb250YWluIHNwZWNpZmljIHZhbHVlcyBmb3IgZmllbGRzIHgseSBhbmQg
egotLy8vICh0aGVpciB2YWx1ZSB3aWxsIGJlIHNldCB0byB0aGUgZGVmYXVsdCwgYW5kIG9taXR0
ZWQgaW4gcHJvdG8gdGV4dAotLy8vIG91dHB1dCk6Ci0vLy8KLS8vLwotLy8vICAgICBmIHsKLS8v
LyAgICAgICBhIDogMjIKLS8vLyAgICAgICBiIHsKLS8vLyAgICAgICAgIGQgOiAxCi0vLy8gICAg
ICAgfQotLy8vICAgICB9Ci0vLy8KLS8vLyBBIHJlcGVhdGVkIGZpZWxkIGlzIG5vdCBhbGxvd2Vk
IGV4Y2VwdCBhdCB0aGUgbGFzdCBwb3NpdGlvbiBvZiBhCi0vLy8gZmllbGQgbWFzay4KLS8vLwot
Ly8vIElmIGEgRmllbGRNYXNrIG9iamVjdCBpcyBub3QgcHJlc2VudCBpbiBhIGdldCBvcGVyYXRp
b24sIHRoZQotLy8vIG9wZXJhdGlvbiBhcHBsaWVzIHRvIGFsbCBmaWVsZHMgKGFzIGlmIGEgRmll
bGRNYXNrIG9mIGFsbCBmaWVsZHMKLS8vLyBoYWQgYmVlbiBzcGVjaWZpZWQpLgotLy8vCi0vLy8g
Tm90ZSB0aGF0IGEgZmllbGQgbWFzayBkb2VzIG5vdCBuZWNlc3NhcmlseSBhcHBseSB0byB0aGUK
LS8vLyB0b3AtbGV2ZWwgcmVzcG9uc2UgbWVzc2FnZS4gSW4gY2FzZSBvZiBhIFJFU1QgZ2V0IG9w
ZXJhdGlvbiwgdGhlCi0vLy8gZmllbGQgbWFzayBhcHBsaWVzIGRpcmVjdGx5IHRvIHRoZSByZXNw
b25zZSwgYnV0IGluIGNhc2Ugb2YgYSBSRVNUCi0vLy8gbGlzdCBvcGVyYXRpb24sIHRoZSBtYXNr
IGluc3RlYWQgYXBwbGllcyB0byBlYWNoIGluZGl2aWR1YWwgbWVzc2FnZQotLy8vIGluIHRoZSBy
ZXR1cm5lZCByZXNvdXJjZSBsaXN0LiBJbiBjYXNlIG9mIGEgUkVTVCBjdXN0b20gbWV0aG9kLAot
Ly8vIG90aGVyIGRlZmluaXRpb25zIG1heSBiZSB1c2VkLiBXaGVyZSB0aGUgbWFzayBhcHBsaWVz
IHdpbGwgYmUKLS8vLyBjbGVhcmx5IGRvY3VtZW50ZWQgdG9nZXRoZXIgd2l0aCBpdHMgZGVjbGFy
YXRpb24gaW4gdGhlIEFQSS4gIEluCi0vLy8gYW55IGNhc2UsIHRoZSBlZmZlY3Qgb24gdGhlIHJl
dHVybmVkIHJlc291cmNlL3Jlc291cmNlcyBpcyByZXF1aXJlZAotLy8vIGJlaGF2aW9yIGZvciBB
UElzLgotLy8vCi0vLy8gIyBGaWVsZCBNYXNrcyBpbiBVcGRhdGUgT3BlcmF0aW9ucwotLy8vCi0v
Ly8gQSBmaWVsZCBtYXNrIGluIHVwZGF0ZSBvcGVyYXRpb25zIHNwZWNpZmllcyB3aGljaCBmaWVs
ZHMgb2YgdGhlCi0vLy8gdGFyZ2V0ZWQgcmVzb3VyY2UgYXJlIGdvaW5nIHRvIGJlIHVwZGF0ZWQu
IFRoZSBBUEkgaXMgcmVxdWlyZWQKLS8vLyB0byBvbmx5IGNoYW5nZSB0aGUgdmFsdWVzIG9mIHRo
ZSBmaWVsZHMgYXMgc3BlY2lmaWVkIGluIHRoZSBtYXNrCi0vLy8gYW5kIGxlYXZlIHRoZSBvdGhl
cnMgdW50b3VjaGVkLiBJZiBhIHJlc291cmNlIGlzIHBhc3NlZCBpbiB0bwotLy8vIGRlc2NyaWJl
IHRoZSB1cGRhdGVkIHZhbHVlcywgdGhlIEFQSSBpZ25vcmVzIHRoZSB2YWx1ZXMgb2YgYWxsCi0v
Ly8gZmllbGRzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBtYXNrLgotLy8vCi0vLy8gSW4gb3JkZXIgdG8g
cmVzZXQgYSBmaWVsZCdzIHZhbHVlIHRvIHRoZSBkZWZhdWx0LCB0aGUgZmllbGQgbXVzdAotLy8v
IGJlIGluIHRoZSBtYXNrIGFuZCBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIHByb3Zp
ZGVkIHJlc291cmNlLgotLy8vIEhlbmNlLCBpbiBvcmRlciB0byByZXNldCBhbGwgZmllbGRzIG9m
IGEgcmVzb3VyY2UsIHByb3ZpZGUgYSBkZWZhdWx0Ci0vLy8gaW5zdGFuY2Ugb2YgdGhlIHJlc291
cmNlIGFuZCBzZXQgYWxsIGZpZWxkcyBpbiB0aGUgbWFzaywgb3IgZG8KLS8vLyBub3QgcHJvdmlk
ZSBhIG1hc2sgYXMgZGVzY3JpYmVkIGJlbG93LgotLy8vCi0vLy8gSWYgYSBmaWVsZCBtYXNrIGlz
IG5vdCBwcmVzZW50IG9uIHVwZGF0ZSwgdGhlIG9wZXJhdGlvbiBhcHBsaWVzIHRvCi0vLy8gYWxs
IGZpZWxkcyAoYXMgaWYgYSBmaWVsZCBtYXNrIG9mIGFsbCBmaWVsZHMgaGFzIGJlZW4gc3BlY2lm
aWVkKS4KLS8vLyBOb3RlIHRoYXQgaW4gdGhlIHByZXNlbmNlIG9mIHNjaGVtYSBldm9sdXRpb24s
IHRoaXMgbWF5IG1lYW4gdGhhdAotLy8vIGZpZWxkcyB0aGUgY2xpZW50IGRvZXMgbm90IGtub3cg
YW5kIGhhcyB0aGVyZWZvcmUgbm90IGZpbGxlZCBpbnRvCi0vLy8gdGhlIHJlcXVlc3Qgd2lsbCBi
ZSByZXNldCB0byB0aGVpciBkZWZhdWx0LiBJZiB0aGlzIGlzIHVud2FudGVkCi0vLy8gYmVoYXZp
b3IsIGEgc3BlY2lmaWMgc2VydmljZSBtYXkgcmVxdWlyZSBhIGNsaWVudCB0byBhbHdheXMgc3Bl
Y2lmeQotLy8vIGEgZmllbGQgbWFzaywgcHJvZHVjaW5nIGFuIGVycm9yIGlmIG5vdC4KLS8vLwot
Ly8vIEFzIHdpdGggZ2V0IG9wZXJhdGlvbnMsIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVzb3VyY2Ug
d2hpY2gKLS8vLyBkZXNjcmliZXMgdGhlIHVwZGF0ZWQgdmFsdWVzIGluIHRoZSByZXF1ZXN0IG1l
c3NhZ2UgZGVwZW5kcyBvbiB0aGUKLS8vLyBvcGVyYXRpb24ga2luZC4gSW4gYW55IGNhc2UsIHRo
ZSBlZmZlY3Qgb2YgdGhlIGZpZWxkIG1hc2sgaXMKLS8vLyByZXF1aXJlZCB0byBiZSBob25vcmVk
IGJ5IHRoZSBBUEkuCi0vLy8KLS8vLyAjIyBDb25zaWRlcmF0aW9ucyBmb3IgSFRUUCBSRVNUCi0v
Ly8KLS8vLyBUaGUgSFRUUCBraW5kIG9mIGFuIHVwZGF0ZSBvcGVyYXRpb24gd2hpY2ggdXNlcyBh
IGZpZWxkIG1hc2sgbXVzdAotLy8vIGJlIHNldCB0byBQQVRDSCBpbnN0ZWFkIG9mIFBVVCBpbiBv
cmRlciB0byBzYXRpc2Z5IEhUVFAgc2VtYW50aWNzCi0vLy8gKFBVVCBtdXN0IG9ubHkgYmUgdXNl
ZCBmb3IgZnVsbCB1cGRhdGVzKS4KLS8vLwotLy8vICMgSlNPTiBFbmNvZGluZyBvZiBGaWVsZCBN
YXNrcwotLy8vCi0vLy8gSW4gSlNPTiwgYSBmaWVsZCBtYXNrIGlzIGVuY29kZWQgYXMgYSBzaW5n
bGUgc3RyaW5nIHdoZXJlIHBhdGhzIGFyZQotLy8vIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBGaWVs
ZHMgbmFtZSBpbiBlYWNoIHBhdGggYXJlIGNvbnZlcnRlZAotLy8vIHRvL2Zyb20gbG93ZXItY2Ft
ZWwgbmFtaW5nIGNvbnZlbnRpb25zLgotLy8vCi0vLy8gQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIg
dGhlIGZvbGxvd2luZyBtZXNzYWdlIGRlY2xhcmF0aW9uczoKLS8vLwotLy8vICAgICBtZXNzYWdl
IFByb2ZpbGUgewotLy8vICAgICAgIFVzZXIgdXNlciA9IDE7Ci0vLy8gICAgICAgUGhvdG8gcGhv
dG8gPSAyOwotLy8vICAgICB9Ci0vLy8gICAgIG1lc3NhZ2UgVXNlciB7Ci0vLy8gICAgICAgc3Ry
aW5nIGRpc3BsYXlfbmFtZSA9IDE7Ci0vLy8gICAgICAgc3RyaW5nIGFkZHJlc3MgPSAyOwotLy8v
ICAgICB9Ci0vLy8KLS8vLyBJbiBwcm90byBhIGZpZWxkIG1hc2sgZm9yIGBQcm9maWxlYCBtYXkg
bG9vayBhcyBzdWNoOgotLy8vCi0vLy8gICAgIG1hc2sgewotLy8vICAgICAgIHBhdGhzOiAidXNl
ci5kaXNwbGF5X25hbWUiCi0vLy8gICAgICAgcGF0aHM6ICJwaG90byIKLS8vLyAgICAgfQotLy8v
Ci0vLy8gSW4gSlNPTiwgdGhlIHNhbWUgbWFzayBpcyByZXByZXNlbnRlZCBhcyBiZWxvdzoKLS8v
LwotLy8vICAgICB7Ci0vLy8gICAgICAgbWFzazogInVzZXIuZGlzcGxheU5hbWUscGhvdG8iCi0v
Ly8gICAgIH0KLS8vLwotLy8vICMgRmllbGQgTWFza3MgYW5kIE9uZW9mIEZpZWxkcwotLy8vCi0v
Ly8gRmllbGQgbWFza3MgdHJlYXQgZmllbGRzIGluIG9uZW9mcyBqdXN0IGFzIHJlZ3VsYXIgZmll
bGRzLiBDb25zaWRlciB0aGUKLS8vLyBmb2xsb3dpbmcgbWVzc2FnZToKLS8vLwotLy8vICAgICBt
ZXNzYWdlIFNhbXBsZU1lc3NhZ2UgewotLy8vICAgICAgIG9uZW9mIHRlc3Rfb25lb2YgewotLy8v
ICAgICAgICAgc3RyaW5nIG5hbWUgPSA0OwotLy8vICAgICAgICAgU3ViTWVzc2FnZSBzdWJfbWVz
c2FnZSA9IDk7Ci0vLy8gICAgICAgfQotLy8vICAgICB9Ci0vLy8KLS8vLyBUaGUgZmllbGQgbWFz
ayBjYW4gYmU6Ci0vLy8KLS8vLyAgICAgbWFzayB7Ci0vLy8gICAgICAgcGF0aHM6ICJuYW1lIgot
Ly8vICAgICB9Ci0vLy8KLS8vLyBPcjoKLS8vLwotLy8vICAgICBtYXNrIHsKLS8vLyAgICAgICBw
YXRoczogInN1Yl9tZXNzYWdlIgotLy8vICAgICB9Ci0vLy8KLS8vLyBOb3RlIHRoYXQgb25lb2Yg
dHlwZSBuYW1lcyAoInRlc3Rfb25lb2YiIGluIHRoaXMgY2FzZSkgY2Fubm90IGJlIHVzZWQgaW4K
LS8vLyBwYXRocy4KLUBpbnRlcmZhY2UgR1BCRmllbGRNYXNrIDogR1BCTWVzc2FnZQotCi0vLy8g
VGhlIHNldCBvZiBmaWVsZCBtYXNrIHBhdGhzLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdy
aXRlLCBzdHJvbmcsIG51bGxfcmVzZXR0YWJsZSkgTlNNdXRhYmxlQXJyYXk8TlNTdHJpbmcqPiAq
cGF0aHNBcnJheTsKLS8vLyBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIEBjIHBhdGhzQXJyYXkgd2l0
aG91dCBjYXVzaW5nIHRoZSBhcnJheSB0byBiZSBjcmVhdGVkLgotQHByb3BlcnR5KG5vbmF0b21p
YywgcmVhZG9ubHkpIE5TVUludGVnZXIgcGF0aHNBcnJheV9Db3VudDsKLQotQGVuZAotCi1OU19B
U1NVTUVfTk9OTlVMTF9FTkQKLQotQ0ZfRVhURVJOX0NfRU5ECi0KLSNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwb3AKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2JhbF9zY29wZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvRmllbGRNYXNrLnBib2JqYy5t
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9GaWVsZE1hc2sucGJvYmpjLm0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjQxYWZjMzA3MmQ3YTEyNTVhZmE3NDFiOTM3MTRkNGFh
MzI1NmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmpl
Y3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9GaWVsZE1hc2sucGJvYmpjLm0KKysrIC9kZXYvbnVsbApA
QCAtMSw3NyArMCwwIEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21w
aWxlci4gIERPIE5PVCBFRElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFz
ay5wcm90bwotCi0jaW1wb3J0ICJHUEJQcm90b2NvbEJ1ZmZlcnNfUnVudGltZVN1cHBvcnQuaCIK
LSNpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9GaWVsZE1hc2sucGJvYmpjLmgiCi0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoaW1wb3J0cykKLQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFy
YXRpb25zIgotCi0jcHJhZ21hIG1hcmsgLSBHUEJGaWVsZE1hc2tSb290Ci0KLUBpbXBsZW1lbnRh
dGlvbiBHUEJGaWVsZE1hc2tSb290Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCRmllbGRN
YXNrUm9vdF9GaWxlRGVzY3JpcHRvcgotCi1zdGF0aWMgR1BCRmlsZURlc2NyaXB0b3IgKkdQQkZp
ZWxkTWFza1Jvb3RfRmlsZURlc2NyaXB0b3Iodm9pZCkgewotICAvLyBUaGlzIGlzIGNhbGxlZCBi
eSAraW5pdGlhbGl6ZSBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5Ci0gIC8vIGFib3V0IHRo
cmVhZCBzYWZldHkgb2YgdGhlIHNpbmdsZXRvbi4KLSAgc3RhdGljIEdQQkZpbGVEZXNjcmlwdG9y
ICpkZXNjcmlwdG9yID0gTlVMTDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgR1BCRGVidWdD
aGVja1J1bnRpbWVWZXJzaW9uKCk7Ci0gICAgZGVzY3JpcHRvciA9IFtbR1BCRmlsZURlc2NyaXB0
b3IgYWxsb2NdIGluaXRXaXRoUGFja2FnZTpAImdvb2dsZS5wcm90b2J1ZiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4OkdQQkZpbGVT
eW50YXhQcm90bzNdOwotICB9Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi0jcHJhZ21hIG1h
cmsgLSBHUEJGaWVsZE1hc2sKLQotQGltcGxlbWVudGF0aW9uIEdQQkZpZWxkTWFzawotCi1AZHlu
YW1pYyBwYXRoc0FycmF5LCBwYXRoc0FycmF5X0NvdW50OwotCi10eXBlZGVmIHN0cnVjdCBHUEJG
aWVsZE1hc2tfX3N0b3JhZ2VfIHsKLSAgdWludDMyX3QgX2hhc19zdG9yYWdlX1sxXTsKLSAgTlNN
dXRhYmxlQXJyYXkgKnBhdGhzQXJyYXk7Ci19IEdQQkZpZWxkTWFza19fc3RvcmFnZV87Ci0KLS8v
IFRoaXMgbWV0aG9kIGlzIHRocmVhZHNhZmUgYmVjYXVzZSBpdCBpcyBpbml0aWFsbHkgY2FsbGVk
Ci0vLyBpbiAraW5pdGlhbGl6ZSBmb3IgZWFjaCBzdWJjbGFzcy4KLSsgKEdQQkRlc2NyaXB0b3Ig
KilkZXNjcmlwdG9yIHsKLSAgc3RhdGljIEdQQkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBuaWw7
Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIHN0YXRpYyBHUEJNZXNzYWdlRmllbGREZXNjcmlw
dGlvbiBmaWVsZHNbXSA9IHsKLSAgICAgIHsKLSAgICAgICAgLm5hbWUgPSAicGF0aHNBcnJheSIs
Ci0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAgIC5u
dW1iZXIgPSBHUEJGaWVsZE1hc2tfRmllbGROdW1iZXJfUGF0aHNBcnJheSwKLSAgICAgICAgLmhh
c0luZGV4ID0gR1BCTm9IYXNCaXQsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0
b2YoR1BCRmllbGRNYXNrX19zdG9yYWdlXywgcGF0aHNBcnJheSksCi0gICAgICAgIC5mbGFncyA9
IEdQQkZpZWxkUmVwZWF0ZWQsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlU3RyaW5n
LAotICAgICAgfSwKLSAgICB9OwotICAgIEdQQkRlc2NyaXB0b3IgKmxvY2FsRGVzY3JpcHRvciA9
Ci0gICAgICAgIFtHUEJEZXNjcmlwdG9yIGFsbG9jRGVzY3JpcHRvckZvckNsYXNzOltHUEJGaWVs
ZE1hc2sgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdENs
YXNzOltHUEJGaWVsZE1hc2tSb290IGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZTpHUEJGaWVsZE1hc2tSb290X0ZpbGVEZXNjcmlwdG9yKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHM6ZmllbGRzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZENvdW50Oih1aW50MzJfdCkoc2l6
ZW9mKGZpZWxkcykgLyBzaXplb2YoR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb24pKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlU2l6ZTpzaXplb2YoR1BCRmllbGRN
YXNrX19zdG9yYWdlXykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxhZ3M6MF07Ci0gICAgTlNBc3NlcnQoZGVzY3JpcHRvciA9PSBuaWwsIEAiU3RhcnR1cCByZWN1
cnNlZCEiKTsKLSAgICBkZXNjcmlwdG9yID0gbG9jYWxEZXNjcmlwdG9yOwotICB9Ci0gIHJldHVy
biBkZXNjcmlwdG9yOwotfQotCi1AZW5kCi0KLQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAotCi0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2xvYmFsX3Njb3BlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9Tb3VyY2VDb250ZXh0LnBib2JqYy5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmpl
Y3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9Tb3VyY2VDb250ZXh0LnBib2JqYy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4Nzc1MzQ4ZTk1M2UzZTYyYjExNmEwMjdmMTgyYzNkZmY4NWJk
YTI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0
aXZlYy9nb29nbGUvcHJvdG9idWYvU291cmNlQ29udGV4dC5wYm9iamMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDU0ICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNv
bXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9zb3VyY2Vf
Y29udGV4dC5wcm90bwotCi0jaW1wb3J0ICJHUEJQcm90b2NvbEJ1ZmZlcnMuaCIKLQotI2lmIEdP
T0dMRV9QUk9UT0JVRl9PQkpDX0dFTl9WRVJTSU9OICE9IDMwMDAxCi0jZXJyb3IgVGhpcyBmaWxl
IHdhcyBnZW5lcmF0ZWQgYnkgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBwcm90b2Mgd2hpY2ggaXMg
aW5jb21wYXRpYmxlIHdpdGggeW91ciBQcm90b2NvbCBCdWZmZXIgbGlicmFyeSBzb3VyY2VzLgot
I2VuZGlmCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbXBvcnRzKQotCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0KLUNGX0VYVEVSTl9DX0JFR0lOCi0KLU5TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCi0KLSNwcmFnbWEgbWFyayAtIEdQQlNvdXJjZUNvbnRleHRSb290
Ci0KLS8vLyBFeHBvc2VzIHRoZSBleHRlbnNpb24gcmVnaXN0cnkgZm9yIHRoaXMgZmlsZS4KLS8v
LwotLy8vIFRoZSBiYXNlIGNsYXNzIHByb3ZpZGVzOgotLy8vIEBjb2RlCi0vLy8gICArIChHUEJF
eHRlbnNpb25SZWdpc3RyeSAqKWV4dGVuc2lvblJlZ2lzdHJ5OwotLy8vIEBlbmRjb2RlCi0vLy8g
d2hpY2ggaXMgYSBAYyBHUEJFeHRlbnNpb25SZWdpc3RyeSB0aGF0IGluY2x1ZGVzIGFsbCB0aGUg
ZXh0ZW5zaW9ucyBkZWZpbmVkIGJ5Ci0vLy8gdGhpcyBmaWxlIGFuZCBhbGwgZmlsZXMgdGhhdCBp
dCBkZXBlbmRzIG9uLgotQGludGVyZmFjZSBHUEJTb3VyY2VDb250ZXh0Um9vdCA6IEdQQlJvb3RP
YmplY3QKLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCU291cmNlQ29udGV4dAotCi10eXBlZGVm
IEdQQl9FTlVNKEdQQlNvdXJjZUNvbnRleHRfRmllbGROdW1iZXIpIHsKLSAgR1BCU291cmNlQ29u
dGV4dF9GaWVsZE51bWJlcl9GaWxlTmFtZSA9IDEsCi19OwotCi0vLy8gYFNvdXJjZUNvbnRleHRg
IHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZSBvZiBhCi0vLy8gcHJvdG9i
dWYgZWxlbWVudCwgbGlrZSB0aGUgZmlsZSBpbiB3aGljaCBpdCBpcyBkZWZpbmVkLgotQGludGVy
ZmFjZSBHUEJTb3VyY2VDb250ZXh0IDogR1BCTWVzc2FnZQotCi0vLy8gVGhlIHBhdGgtcXVhbGlm
aWVkIG5hbWUgb2YgdGhlIC5wcm90byBmaWxlIHRoYXQgY29udGFpbmVkIHRoZSBhc3NvY2lhdGVk
Ci0vLy8gcHJvdG9idWYgZWxlbWVudC4gIEZvciBleGFtcGxlOiBgImdvb2dsZS9wcm90b2J1Zi9z
b3VyY2UucHJvdG8iYC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgY29weSwgbnVs
bF9yZXNldHRhYmxlKSBOU1N0cmluZyAqZmlsZU5hbWU7Ci0KLUBlbmQKLQotTlNfQVNTVU1FX05P
Tk5VTExfRU5ECi0KLUNGX0VYVEVSTl9DX0VORAotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1NvdXJjZUNvbnRleHQucGJvYmpjLm0gYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29i
amVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1NvdXJjZUNvbnRleHQucGJvYmpjLm0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDA3MTI2NDY1NzE5MmFiMjFjOTA1MzBhOTY3NmU1YTUz
NWY1NjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmpl
Y3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9Tb3VyY2VDb250ZXh0LnBib2JqYy5tCisrKyAvZGV2L251
bGwKQEAgLTEsNzcgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIg
Y29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL3NvdXJj
ZV9jb250ZXh0LnByb3RvCi0KLSNpbXBvcnQgIkdQQlByb3RvY29sQnVmZmVyc19SdW50aW1lU3Vw
cG9ydC5oIgotI2ltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL1NvdXJjZUNvbnRleHQucGJvYmpjLmgi
Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoaW1wb3J0cykKLQotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJl
Y2F0ZWQtZGVjbGFyYXRpb25zIgotCi0jcHJhZ21hIG1hcmsgLSBHUEJTb3VyY2VDb250ZXh0Um9v
dAotCi1AaW1wbGVtZW50YXRpb24gR1BCU291cmNlQ29udGV4dFJvb3QKLQotQGVuZAotCi0jcHJh
Z21hIG1hcmsgLSBHUEJTb3VyY2VDb250ZXh0Um9vdF9GaWxlRGVzY3JpcHRvcgotCi1zdGF0aWMg
R1BCRmlsZURlc2NyaXB0b3IgKkdQQlNvdXJjZUNvbnRleHRSb290X0ZpbGVEZXNjcmlwdG9yKHZv
aWQpIHsKLSAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgK2luaXRpYWxpemUgc28gdGhlcmUgaXMgbm8g
bmVlZCB0byB3b3JyeQotICAvLyBhYm91dCB0aHJlYWQgc2FmZXR5IG9mIHRoZSBzaW5nbGV0b24u
Ci0gIHN0YXRpYyBHUEJGaWxlRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IE5VTEw7Ci0gIGlmICgh
ZGVzY3JpcHRvcikgewotICAgIEdQQkRlYnVnQ2hlY2tSdW50aW1lVmVyc2lvbigpOwotICAgIGRl
c2NyaXB0b3IgPSBbW0dQQkZpbGVEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aFBhY2thZ2U6QCJn
b29nbGUucHJvdG9idWYiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN5bnRheDpHUEJGaWxlU3ludGF4UHJvdG8zXTsKLSAgfQotICByZXR1cm4g
ZGVzY3JpcHRvcjsKLX0KLQotI3ByYWdtYSBtYXJrIC0gR1BCU291cmNlQ29udGV4dAotCi1AaW1w
bGVtZW50YXRpb24gR1BCU291cmNlQ29udGV4dAotCi1AZHluYW1pYyBmaWxlTmFtZTsKLQotdHlw
ZWRlZiBzdHJ1Y3QgR1BCU291cmNlQ29udGV4dF9fc3RvcmFnZV8gewotICB1aW50MzJfdCBfaGFz
X3N0b3JhZ2VfWzFdOwotICBOU1N0cmluZyAqZmlsZU5hbWU7Ci19IEdQQlNvdXJjZUNvbnRleHRf
X3N0b3JhZ2VfOwotCi0vLyBUaGlzIG1ldGhvZCBpcyB0aHJlYWRzYWZlIGJlY2F1c2UgaXQgaXMg
aW5pdGlhbGx5IGNhbGxlZAotLy8gaW4gK2luaXRpYWxpemUgZm9yIGVhY2ggc3ViY2xhc3MuCi0r
IChHUEJEZXNjcmlwdG9yICopZGVzY3JpcHRvciB7Ci0gIHN0YXRpYyBHUEJEZXNjcmlwdG9yICpk
ZXNjcmlwdG9yID0gbmlsOwotICBpZiAoIWRlc2NyaXB0b3IpIHsKLSAgICBzdGF0aWMgR1BCTWVz
c2FnZUZpZWxkRGVzY3JpcHRpb24gZmllbGRzW10gPSB7Ci0gICAgICB7Ci0gICAgICAgIC5uYW1l
ID0gImZpbGVOYW1lIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gTlVM
TCwKLSAgICAgICAgLm51bWJlciA9IEdQQlNvdXJjZUNvbnRleHRfRmllbGROdW1iZXJfRmlsZU5h
bWUsCi0gICAgICAgIC5oYXNJbmRleCA9IDAsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qp
b2Zmc2V0b2YoR1BCU291cmNlQ29udGV4dF9fc3RvcmFnZV8sIGZpbGVOYW1lKSwKLSAgICAgICAg
LmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5
cGVTdHJpbmcsCi0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9jYWxEZXNj
cmlwdG9yID0KLSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6
W0dQQlNvdXJjZUNvbnRleHQgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcm9vdENsYXNzOltHUEJTb3VyY2VDb250ZXh0Um9vdCBjbGFzc10KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6R1BCU291cmNlQ29udGV4dFJvb3Rf
RmlsZURlc2NyaXB0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpZWxkczpmaWVsZHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxk
Q291bnQ6KHVpbnQzMl90KShzaXplb2YoZmllbGRzKSAvIHNpemVvZihHUEJNZXNzYWdlRmllbGRE
ZXNjcmlwdGlvbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VT
aXplOnNpemVvZihHUEJTb3VyY2VDb250ZXh0X19zdG9yYWdlXykKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6MF07Ci0gICAgTlNBc3NlcnQoZGVzY3JpcHRv
ciA9PSBuaWwsIEAiU3RhcnR1cCByZWN1cnNlZCEiKTsKLSAgICBkZXNjcmlwdG9yID0gbG9jYWxE
ZXNjcmlwdG9yOwotICB9Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi1AZW5kCi0KLQotI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotCi0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Z2xvYmFsX3Njb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9TdHJ1
Y3QucGJvYmpjLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1N0cnVjdC5wYm9iamMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkyNGI0Yjc1ODU5ZDIzZTllNjgxN2UxM2Q2
NGY0ODE2OWRiODViMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1N0cnVjdC5wYm9iamMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE2NyArMCwwIEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZl
ciBjb21waWxlci4gIERPIE5PVCBFRElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvc3Ry
dWN0LnByb3RvCi0KLSNpbXBvcnQgIkdQQlByb3RvY29sQnVmZmVycy5oIgotCi0jaWYgR09PR0xF
X1BST1RPQlVGX09CSkNfR0VOX1ZFUlNJT04gIT0gMzAwMDEKLSNlcnJvciBUaGlzIGZpbGUgd2Fz
IGdlbmVyYXRlZCBieSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcyBpbmNv
bXBhdGlibGUgd2l0aCB5b3VyIFByb3RvY29sIEJ1ZmZlciBsaWJyYXJ5IHNvdXJjZXMuCi0jZW5k
aWYKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGltcG9ydHMpCi0KLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdk
ZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLQotQ0ZfRVhURVJOX0NfQkVHSU4KLQotQGNsYXNzIEdQ
Qkxpc3RWYWx1ZTsKLUBjbGFzcyBHUEJTdHJ1Y3Q7Ci1AY2xhc3MgR1BCVmFsdWU7Ci0KLU5TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCi0KLSNwcmFnbWEgbWFyayAtIEVudW0gR1BCTnVsbFZhbHVlCi0K
LS8vLyBgTnVsbFZhbHVlYCBpcyBhIHNpbmdsZXRvbiBlbnVtZXJhdGlvbiB0byByZXByZXNlbnQg
dGhlIG51bGwgdmFsdWUgZm9yIHRoZQotLy8vIGBWYWx1ZWAgdHlwZSB1bmlvbi4KLS8vLwotLy8v
ICBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgYE51bGxWYWx1ZWAgaXMgSlNPTiBgbnVsbGAu
Ci10eXBlZGVmIEdQQl9FTlVNKEdQQk51bGxWYWx1ZSkgewotICAvLy8gVmFsdWUgdXNlZCBpZiBh
bnkgbWVzc2FnZSdzIGZpZWxkIGVuY291bnRlcnMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBkZWZpbmVk
Ci0gIC8vLyBieSB0aGlzIGVudW0uIFRoZSBtZXNzYWdlIHdpbGwgYWxzbyBoYXZlIEMgZnVuY3Rp
b25zIHRvIGdldC9zZXQgdGhlIHJhd1ZhbHVlCi0gIC8vLyBvZiB0aGUgZmllbGQuCi0gIEdQQk51
bGxWYWx1ZV9HUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWUgPSBrR1BCVW5yZWNvZ25pemVk
RW51bWVyYXRvclZhbHVlLAotICAvLy8gTnVsbCB2YWx1ZS4KLSAgR1BCTnVsbFZhbHVlX051bGxW
YWx1ZSA9IDAsCi19OwotCi1HUEJFbnVtRGVzY3JpcHRvciAqR1BCTnVsbFZhbHVlX0VudW1EZXNj
cmlwdG9yKHZvaWQpOwotCi0vLy8gQ2hlY2tzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMg
ZGVmaW5lZCBieSB0aGUgZW51bSBvciB3YXMgbm90IGtub3duIGF0Ci0vLy8gdGhlIHRpbWUgdGhp
cyBzb3VyY2Ugd2FzIGdlbmVyYXRlZC4KLUJPT0wgR1BCTnVsbFZhbHVlX0lzVmFsaWRWYWx1ZShp
bnQzMl90IHZhbHVlKTsKLQotI3ByYWdtYSBtYXJrIC0gR1BCU3RydWN0Um9vdAotCi0vLy8gRXhw
b3NlcyB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IGZvciB0aGlzIGZpbGUuCi0vLy8KLS8vLyBUaGUg
YmFzZSBjbGFzcyBwcm92aWRlczoKLS8vLyBAY29kZQotLy8vICAgKyAoR1BCRXh0ZW5zaW9uUmVn
aXN0cnkgKilleHRlbnNpb25SZWdpc3RyeTsKLS8vLyBAZW5kY29kZQotLy8vIHdoaWNoIGlzIGEg
QGMgR1BCRXh0ZW5zaW9uUmVnaXN0cnkgdGhhdCBpbmNsdWRlcyBhbGwgdGhlIGV4dGVuc2lvbnMg
ZGVmaW5lZCBieQotLy8vIHRoaXMgZmlsZSBhbmQgYWxsIGZpbGVzIHRoYXQgaXQgZGVwZW5kcyBv
bi4KLUBpbnRlcmZhY2UgR1BCU3RydWN0Um9vdCA6IEdQQlJvb3RPYmplY3QKLUBlbmQKLQotI3By
YWdtYSBtYXJrIC0gR1BCU3RydWN0Ci0KLXR5cGVkZWYgR1BCX0VOVU0oR1BCU3RydWN0X0ZpZWxk
TnVtYmVyKSB7Ci0gIEdQQlN0cnVjdF9GaWVsZE51bWJlcl9GaWVsZHMgPSAxLAotfTsKLQotLy8v
IGBTdHJ1Y3RgIHJlcHJlc2VudHMgYSBzdHJ1Y3R1cmVkIGRhdGEgdmFsdWUsIGNvbnNpc3Rpbmcg
b2YgZmllbGRzCi0vLy8gd2hpY2ggbWFwIHRvIGR5bmFtaWNhbGx5IHR5cGVkIHZhbHVlcy4gSW4g
c29tZSBsYW5ndWFnZXMsIGBTdHJ1Y3RgCi0vLy8gbWlnaHQgYmUgc3VwcG9ydGVkIGJ5IGEgbmF0
aXZlIHJlcHJlc2VudGF0aW9uLiBGb3IgZXhhbXBsZSwgaW4KLS8vLyBzY3JpcHRpbmcgbGFuZ3Vh
Z2VzIGxpa2UgSlMgYSBzdHJ1Y3QgaXMgcmVwcmVzZW50ZWQgYXMgYW4KLS8vLyBvYmplY3QuIFRo
ZSBkZXRhaWxzIG9mIHRoYXQgcmVwcmVzZW50YXRpb24gYXJlIGRlc2NyaWJlZCB0b2dldGhlcgot
Ly8vIHdpdGggdGhlIHByb3RvIHN1cHBvcnQgZm9yIHRoZSBsYW5ndWFnZS4KLS8vLwotLy8vIFRo
ZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgU3RydWN0YCBpcyBKU09OIG9iamVjdC4KLUBpbnRl
cmZhY2UgR1BCU3RydWN0IDogR1BCTWVzc2FnZQotCi0vLy8gVW5vcmRlcmVkIG1hcCBvZiBkeW5h
bWljYWxseSB0eXBlZCB2YWx1ZXMuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUsIHN0
cm9uZywgbnVsbF9yZXNldHRhYmxlKSBOU011dGFibGVEaWN0aW9uYXJ5PE5TU3RyaW5nKiwgR1BC
VmFsdWUqPiAqZmllbGRzOwotLy8vIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gQGMgZmllbGRzIHdp
dGhvdXQgY2F1c2luZyB0aGUgYXJyYXkgdG8gYmUgY3JlYXRlZC4KLUBwcm9wZXJ0eShub25hdG9t
aWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGZpZWxkc19Db3VudDsKLQotQGVuZAotCi0jcHJhZ21h
IG1hcmsgLSBHUEJWYWx1ZQotCi10eXBlZGVmIEdQQl9FTlVNKEdQQlZhbHVlX0ZpZWxkTnVtYmVy
KSB7Ci0gIEdQQlZhbHVlX0ZpZWxkTnVtYmVyX051bGxWYWx1ZSA9IDEsCi0gIEdQQlZhbHVlX0Zp
ZWxkTnVtYmVyX051bWJlclZhbHVlID0gMiwKLSAgR1BCVmFsdWVfRmllbGROdW1iZXJfU3RyaW5n
VmFsdWUgPSAzLAotICBHUEJWYWx1ZV9GaWVsZE51bWJlcl9Cb29sVmFsdWUgPSA0LAotICBHUEJW
YWx1ZV9GaWVsZE51bWJlcl9TdHJ1Y3RWYWx1ZSA9IDUsCi0gIEdQQlZhbHVlX0ZpZWxkTnVtYmVy
X0xpc3RWYWx1ZSA9IDYsCi19OwotCi10eXBlZGVmIEdQQl9FTlVNKEdQQlZhbHVlX0tpbmRfT25l
T2ZDYXNlKSB7Ci0gIEdQQlZhbHVlX0tpbmRfT25lT2ZDYXNlX0dQQlVuc2V0T25lT2ZDYXNlID0g
MCwKLSAgR1BCVmFsdWVfS2luZF9PbmVPZkNhc2VfTnVsbFZhbHVlID0gMSwKLSAgR1BCVmFsdWVf
S2luZF9PbmVPZkNhc2VfTnVtYmVyVmFsdWUgPSAyLAotICBHUEJWYWx1ZV9LaW5kX09uZU9mQ2Fz
ZV9TdHJpbmdWYWx1ZSA9IDMsCi0gIEdQQlZhbHVlX0tpbmRfT25lT2ZDYXNlX0Jvb2xWYWx1ZSA9
IDQsCi0gIEdQQlZhbHVlX0tpbmRfT25lT2ZDYXNlX1N0cnVjdFZhbHVlID0gNSwKLSAgR1BCVmFs
dWVfS2luZF9PbmVPZkNhc2VfTGlzdFZhbHVlID0gNiwKLX07Ci0KLS8vLyBgVmFsdWVgIHJlcHJl
c2VudHMgYSBkeW5hbWljYWxseSB0eXBlZCB2YWx1ZSB3aGljaCBjYW4gYmUgZWl0aGVyCi0vLy8g
bnVsbCwgYSBudW1iZXIsIGEgc3RyaW5nLCBhIGJvb2xlYW4sIGEgcmVjdXJzaXZlIHN0cnVjdCB2
YWx1ZSwgb3IgYQotLy8vIGxpc3Qgb2YgdmFsdWVzLiBBIHByb2R1Y2VyIG9mIHZhbHVlIGlzIGV4
cGVjdGVkIHRvIHNldCBvbmUgb2YgdGhhdAotLy8vIHZhcmlhbnRzLCBhYnNlbmNlIG9mIGFueSB2
YXJpYW50IGluZGljYXRlcyBhbiBlcnJvci4KLS8vLwotLy8vIFRoZSBKU09OIHJlcHJlc2VudGF0
aW9uIGZvciBgVmFsdWVgIGlzIEpTT04gdmFsdWUuCi1AaW50ZXJmYWNlIEdQQlZhbHVlIDogR1BC
TWVzc2FnZQotCi0vLy8gVGhlIGtpbmQgb2YgdmFsdWUuCi1AcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkb25seSkgR1BCVmFsdWVfS2luZF9PbmVPZkNhc2Uga2luZE9uZU9mQ2FzZTsKLQotLy8vIFJl
cHJlc2VudHMgYSBudWxsIHZhbHVlLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlKSBH
UEJOdWxsVmFsdWUgbnVsbFZhbHVlOwotCi0vLy8gUmVwcmVzZW50cyBhIGRvdWJsZSB2YWx1ZS4K
LUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSkgZG91YmxlIG51bWJlclZhbHVlOwotCi0v
Ly8gUmVwcmVzZW50cyBhIHN0cmluZyB2YWx1ZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3
cml0ZSwgY29weSwgbnVsbF9yZXNldHRhYmxlKSBOU1N0cmluZyAqc3RyaW5nVmFsdWU7Ci0KLS8v
LyBSZXByZXNlbnRzIGEgYm9vbGVhbiB2YWx1ZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3
cml0ZSkgQk9PTCBib29sVmFsdWU7Ci0KLS8vLyBSZXByZXNlbnRzIGEgc3RydWN0dXJlZCB2YWx1
ZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgc3Ryb25nLCBudWxsX3Jlc2V0dGFi
bGUpIEdQQlN0cnVjdCAqc3RydWN0VmFsdWU7Ci0KLS8vLyBSZXByZXNlbnRzIGEgcmVwZWF0ZWQg
YFZhbHVlYC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgc3Ryb25nLCBudWxsX3Jl
c2V0dGFibGUpIEdQQkxpc3RWYWx1ZSAqbGlzdFZhbHVlOwotCi1AZW5kCi0KLS8vLyBGZXRjaGVz
IHRoZSByYXcgdmFsdWUgb2YgYSBAYyBHUEJWYWx1ZSdzIEBjIG51bGxWYWx1ZSBwcm9wZXJ0eSwg
ZXZlbgotLy8vIGlmIHRoZSB2YWx1ZSB3YXMgbm90IGRlZmluZWQgYnkgdGhlIGVudW0gYXQgdGhl
IHRpbWUgdGhlIGNvZGUgd2FzIGdlbmVyYXRlZC4KLWludDMyX3QgR1BCVmFsdWVfTnVsbFZhbHVl
X1Jhd1ZhbHVlKEdQQlZhbHVlICptZXNzYWdlKTsKLS8vLyBTZXRzIHRoZSByYXcgdmFsdWUgb2Yg
YW4gQGMgR1BCVmFsdWUncyBAYyBudWxsVmFsdWUgcHJvcGVydHksIGFsbG93aW5nCi0vLy8gaXQg
dG8gYmUgc2V0IHRvIGEgdmFsdWUgdGhhdCB3YXMgbm90IGRlZmluZWQgYnkgdGhlIGVudW0gYXQg
dGhlIHRpbWUgdGhlIGNvZGUKLS8vLyB3YXMgZ2VuZXJhdGVkLgotdm9pZCBTZXRHUEJWYWx1ZV9O
dWxsVmFsdWVfUmF3VmFsdWUoR1BCVmFsdWUgKm1lc3NhZ2UsIGludDMyX3QgdmFsdWUpOwotCi0v
Ly8gQ2xlYXJzIHdoYXRldmVyIHZhbHVlIHdhcyBzZXQgZm9yIHRoZSBvbmVvZiAna2luZCcuCi12
b2lkIEdQQlZhbHVlX0NsZWFyS2luZE9uZU9mQ2FzZShHUEJWYWx1ZSAqbWVzc2FnZSk7Ci0KLSNw
cmFnbWEgbWFyayAtIEdQQkxpc3RWYWx1ZQotCi10eXBlZGVmIEdQQl9FTlVNKEdQQkxpc3RWYWx1
ZV9GaWVsZE51bWJlcikgewotICBHUEJMaXN0VmFsdWVfRmllbGROdW1iZXJfVmFsdWVzQXJyYXkg
PSAxLAotfTsKLQotLy8vIGBMaXN0VmFsdWVgIGlzIGEgd3JhcHBlciBhcm91bmQgYSByZXBlYXRl
ZCBmaWVsZCBvZiB2YWx1ZXMuCi0vLy8KLS8vLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3Ig
YExpc3RWYWx1ZWAgaXMgSlNPTiBhcnJheS4KLUBpbnRlcmZhY2UgR1BCTGlzdFZhbHVlIDogR1BC
TWVzc2FnZQotCi0vLy8gUmVwZWF0ZWQgZmllbGQgb2YgZHluYW1pY2FsbHkgdHlwZWQgdmFsdWVz
LgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlLCBzdHJvbmcsIG51bGxfcmVzZXR0YWJs
ZSkgTlNNdXRhYmxlQXJyYXk8R1BCVmFsdWUqPiAqdmFsdWVzQXJyYXk7Ci0vLy8gVGhlIG51bWJl
ciBvZiBpdGVtcyBpbiBAYyB2YWx1ZXNBcnJheSB3aXRob3V0IGNhdXNpbmcgdGhlIGFycmF5IHRv
IGJlIGNyZWF0ZWQuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciB2
YWx1ZXNBcnJheV9Db3VudDsKLQotQGVuZAotCi1OU19BU1NVTUVfTk9OTlVMTF9FTkQKLQotQ0Zf
RVhURVJOX0NfRU5ECi0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLQotLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2JhbF9zY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9n
b29nbGUvcHJvdG9idWYvU3RydWN0LnBib2JqYy5tIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1
Zi9TdHJ1Y3QucGJvYmpjLm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOTQwMDI3
NGFlNDk5MzhjNmVkZWE1ZDg4MzA4ZmNjNTBkMDU4ZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9TdHJ1Y3Qu
cGJvYmpjLm0KKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5
IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTog
Z29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bwotCi0jaW1wb3J0ICJHUEJQcm90b2NvbEJ1ZmZl
cnNfUnVudGltZVN1cHBvcnQuaCIKLSNpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9TdHJ1Y3QucGJv
YmpjLmgiCi0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoaW1wb3J0cykKLQotI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotCi0jcHJhZ21hIG1hcmsgLSBHUEJTdHJ1Y3RSb290
Ci0KLUBpbXBsZW1lbnRhdGlvbiBHUEJTdHJ1Y3RSb290Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJr
IC0gR1BCU3RydWN0Um9vdF9GaWxlRGVzY3JpcHRvcgotCi1zdGF0aWMgR1BCRmlsZURlc2NyaXB0
b3IgKkdQQlN0cnVjdFJvb3RfRmlsZURlc2NyaXB0b3Iodm9pZCkgewotICAvLyBUaGlzIGlzIGNh
bGxlZCBieSAraW5pdGlhbGl6ZSBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5Ci0gIC8vIGFi
b3V0IHRocmVhZCBzYWZldHkgb2YgdGhlIHNpbmdsZXRvbi4KLSAgc3RhdGljIEdQQkZpbGVEZXNj
cmlwdG9yICpkZXNjcmlwdG9yID0gTlVMTDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgR1BC
RGVidWdDaGVja1J1bnRpbWVWZXJzaW9uKCk7Ci0gICAgZGVzY3JpcHRvciA9IFtbR1BCRmlsZURl
c2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoUGFja2FnZTpAImdvb2dsZS5wcm90b2J1ZiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4OkdQ
QkZpbGVTeW50YXhQcm90bzNdOwotICB9Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi0jcHJh
Z21hIG1hcmsgLSBFbnVtIEdQQk51bGxWYWx1ZQotCi1HUEJFbnVtRGVzY3JpcHRvciAqR1BCTnVs
bFZhbHVlX0VudW1EZXNjcmlwdG9yKHZvaWQpIHsKLSAgc3RhdGljIEdQQkVudW1EZXNjcmlwdG9y
ICpkZXNjcmlwdG9yID0gTlVMTDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGljIGNv
bnN0IGNoYXIgKnZhbHVlTmFtZXMgPQotICAgICAgICAiTnVsbFZhbHVlXDAwMCI7Ci0gICAgc3Rh
dGljIGNvbnN0IGludDMyX3QgdmFsdWVzW10gPSB7Ci0gICAgICAgIEdQQk51bGxWYWx1ZV9OdWxs
VmFsdWUsCi0gICAgfTsKLSAgICBHUEJFbnVtRGVzY3JpcHRvciAqd29ya2VyID0KLSAgICAgICAg
W0dQQkVudW1EZXNjcmlwdG9yIGFsbG9jRGVzY3JpcHRvckZvck5hbWU6R1BCTlNTdHJpbmdpZnlT
eW1ib2woR1BCTnVsbFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVOYW1lczp2YWx1ZU5hbWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVzOnZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudDoodWludDMyX3QpKHNpemVvZih2YWx1ZXMpIC8gc2l6ZW9mKGlu
dDMyX3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1WZXJpZmll
cjpHUEJOdWxsVmFsdWVfSXNWYWxpZFZhbHVlXTsKLSAgICBpZiAoIU9TQXRvbWljQ29tcGFyZUFu
ZFN3YXBQdHJCYXJyaWVyKG5pbCwgd29ya2VyLCAodm9pZCAqIHZvbGF0aWxlICopJmRlc2NyaXB0
b3IpKSB7Ci0gICAgICBbd29ya2VyIHJlbGVhc2VdOwotICAgIH0KLSAgfQotICByZXR1cm4gZGVz
Y3JpcHRvcjsKLX0KLQotQk9PTCBHUEJOdWxsVmFsdWVfSXNWYWxpZFZhbHVlKGludDMyX3QgdmFs
dWVfXykgewotICBzd2l0Y2ggKHZhbHVlX18pIHsKLSAgICBjYXNlIEdQQk51bGxWYWx1ZV9OdWxs
VmFsdWU6Ci0gICAgICByZXR1cm4gWUVTOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gTk87
Ci0gIH0KLX0KLQotI3ByYWdtYSBtYXJrIC0gR1BCU3RydWN0Ci0KLUBpbXBsZW1lbnRhdGlvbiBH
UEJTdHJ1Y3QKLQotQGR5bmFtaWMgZmllbGRzLCBmaWVsZHNfQ291bnQ7Ci0KLXR5cGVkZWYgc3Ry
dWN0IEdQQlN0cnVjdF9fc3RvcmFnZV8gewotICB1aW50MzJfdCBfaGFzX3N0b3JhZ2VfWzFdOwot
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpmaWVsZHM7Ci19IEdQQlN0cnVjdF9fc3RvcmFnZV87Ci0K
LS8vIFRoaXMgbWV0aG9kIGlzIHRocmVhZHNhZmUgYmVjYXVzZSBpdCBpcyBpbml0aWFsbHkgY2Fs
bGVkCi0vLyBpbiAraW5pdGlhbGl6ZSBmb3IgZWFjaCBzdWJjbGFzcy4KLSsgKEdQQkRlc2NyaXB0
b3IgKilkZXNjcmlwdG9yIHsKLSAgc3RhdGljIEdQQkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBu
aWw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIHN0YXRpYyBHUEJNZXNzYWdlRmllbGREZXNj
cmlwdGlvbiBmaWVsZHNbXSA9IHsKLSAgICAgIHsKLSAgICAgICAgLm5hbWUgPSAiZmllbGRzIiwK
LSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gR1BCU3RyaW5naWZ5U3ltYm9s
KEdQQlZhbHVlKSwKLSAgICAgICAgLm51bWJlciA9IEdQQlN0cnVjdF9GaWVsZE51bWJlcl9GaWVs
ZHMsCi0gICAgICAgIC5oYXNJbmRleCA9IEdQQk5vSGFzQml0LAotICAgICAgICAub2Zmc2V0ID0g
KHVpbnQzMl90KW9mZnNldG9mKEdQQlN0cnVjdF9fc3RvcmFnZV8sIGZpZWxkcyksCi0gICAgICAg
IC5mbGFncyA9IEdQQkZpZWxkTWFwS2V5U3RyaW5nLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJE
YXRhVHlwZU1lc3NhZ2UsCi0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9j
YWxEZXNjcmlwdG9yID0KLSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9y
Q2xhc3M6W0dQQlN0cnVjdCBjbGFzc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByb290Q2xhc3M6W0dQQlN0cnVjdFJvb3QgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWxlOkdQQlN0cnVjdFJvb3RfRmlsZURlc2NyaXB0b3Io
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczpmaWVsZHMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6KHVpbnQzMl90
KShzaXplb2YoZmllbGRzKSAvIHNpemVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZihHUEJT
dHJ1Y3RfX3N0b3JhZ2VfKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbGFnczowXTsKLSAgICBOU0Fzc2VydChkZXNjcmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJl
Y3Vyc2VkISIpOwotICAgIGRlc2NyaXB0b3IgPSBsb2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0
dXJuIGRlc2NyaXB0b3I7Ci19Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCVmFsdWUKLQot
QGltcGxlbWVudGF0aW9uIEdQQlZhbHVlCi0KLUBkeW5hbWljIGtpbmRPbmVPZkNhc2U7Ci1AZHlu
YW1pYyBudWxsVmFsdWU7Ci1AZHluYW1pYyBudW1iZXJWYWx1ZTsKLUBkeW5hbWljIHN0cmluZ1Zh
bHVlOwotQGR5bmFtaWMgYm9vbFZhbHVlOwotQGR5bmFtaWMgc3RydWN0VmFsdWU7Ci1AZHluYW1p
YyBsaXN0VmFsdWU7Ci0KLXR5cGVkZWYgc3RydWN0IEdQQlZhbHVlX19zdG9yYWdlXyB7Ci0gIHVp
bnQzMl90IF9oYXNfc3RvcmFnZV9bMl07Ci0gIEdQQk51bGxWYWx1ZSBudWxsVmFsdWU7Ci0gIE5T
U3RyaW5nICpzdHJpbmdWYWx1ZTsKLSAgR1BCU3RydWN0ICpzdHJ1Y3RWYWx1ZTsKLSAgR1BCTGlz
dFZhbHVlICpsaXN0VmFsdWU7Ci0gIGRvdWJsZSBudW1iZXJWYWx1ZTsKLX0gR1BCVmFsdWVfX3N0
b3JhZ2VfOwotCi0vLyBUaGlzIG1ldGhvZCBpcyB0aHJlYWRzYWZlIGJlY2F1c2UgaXQgaXMgaW5p
dGlhbGx5IGNhbGxlZAotLy8gaW4gK2luaXRpYWxpemUgZm9yIGVhY2ggc3ViY2xhc3MuCi0rIChH
UEJEZXNjcmlwdG9yICopZGVzY3JpcHRvciB7Ci0gIHN0YXRpYyBHUEJEZXNjcmlwdG9yICpkZXNj
cmlwdG9yID0gbmlsOwotICBpZiAoIWRlc2NyaXB0b3IpIHsKLSAgICBzdGF0aWMgR1BCTWVzc2Fn
ZUZpZWxkRGVzY3JpcHRpb24gZmllbGRzW10gPSB7Ci0gICAgICB7Ci0gICAgICAgIC5uYW1lID0g
Im51bGxWYWx1ZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmVudW1EZXNjRnVuYyA9IEdQ
Qk51bGxWYWx1ZV9FbnVtRGVzY3JpcHRvciwKLSAgICAgICAgLm51bWJlciA9IEdQQlZhbHVlX0Zp
ZWxkTnVtYmVyX051bGxWYWx1ZSwKLSAgICAgICAgLmhhc0luZGV4ID0gLTEsCi0gICAgICAgIC5v
ZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCVmFsdWVfX3N0b3JhZ2VfLCBudWxsVmFsdWUp
LAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsIHwgR1BCRmllbGRIYXNFbnVtRGVz
Y3JpcHRvciwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVFbnVtLAotICAgICAgfSwK
LSAgICAgIHsKLSAgICAgICAgLm5hbWUgPSAibnVtYmVyVmFsdWUiLAotICAgICAgICAuZGF0YVR5
cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBOVUxMLAotICAgICAgICAubnVtYmVyID0gR1BCVmFsdWVf
RmllbGROdW1iZXJfTnVtYmVyVmFsdWUsCi0gICAgICAgIC5oYXNJbmRleCA9IC0xLAotICAgICAg
ICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQlZhbHVlX19zdG9yYWdlXywgbnVtYmVy
VmFsdWUpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAotICAgICAgICAuZGF0
YVR5cGUgPSBHUEJEYXRhVHlwZURvdWJsZSwKLSAgICAgIH0sCi0gICAgICB7Ci0gICAgICAgIC5u
YW1lID0gInN0cmluZ1ZhbHVlIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1l
ID0gTlVMTCwKLSAgICAgICAgLm51bWJlciA9IEdQQlZhbHVlX0ZpZWxkTnVtYmVyX1N0cmluZ1Zh
bHVlLAotICAgICAgICAuaGFzSW5kZXggPSAtMSwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJf
dClvZmZzZXRvZihHUEJWYWx1ZV9fc3RvcmFnZV8sIHN0cmluZ1ZhbHVlKSwKLSAgICAgICAgLmZs
YWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVT
dHJpbmcsCi0gICAgICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9ICJib29sVmFsdWUiLAot
ICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBOVUxMLAotICAgICAgICAubnVt
YmVyID0gR1BCVmFsdWVfRmllbGROdW1iZXJfQm9vbFZhbHVlLAotICAgICAgICAuaGFzSW5kZXgg
PSAtMSwKLSAgICAgICAgLm9mZnNldCA9IDAsICAvLyBTdG9yZWQgaW4gX2hhc19zdG9yYWdlXyB0
byBzYXZlIHNwYWNlLgotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAotICAgICAg
ICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZUJvb2wsCi0gICAgICB9LAotICAgICAgewotICAgICAg
ICAubmFtZSA9ICJzdHJ1Y3RWYWx1ZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNz
TmFtZSA9IEdQQlN0cmluZ2lmeVN5bWJvbChHUEJTdHJ1Y3QpLAotICAgICAgICAubnVtYmVyID0g
R1BCVmFsdWVfRmllbGROdW1iZXJfU3RydWN0VmFsdWUsCi0gICAgICAgIC5oYXNJbmRleCA9IC0x
LAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQlZhbHVlX19zdG9yYWdl
Xywgc3RydWN0VmFsdWUpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAotICAg
ICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZU1lc3NhZ2UsCi0gICAgICB9LAotICAgICAgewot
ICAgICAgICAubmFtZSA9ICJsaXN0VmFsdWUiLAotICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5j
bGFzc05hbWUgPSBHUEJTdHJpbmdpZnlTeW1ib2woR1BCTGlzdFZhbHVlKSwKLSAgICAgICAgLm51
bWJlciA9IEdQQlZhbHVlX0ZpZWxkTnVtYmVyX0xpc3RWYWx1ZSwKLSAgICAgICAgLmhhc0luZGV4
ID0gLTEsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCVmFsdWVfX3N0
b3JhZ2VfLCBsaXN0VmFsdWUpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAot
ICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZU1lc3NhZ2UsCi0gICAgICB9LAotICAgIH07
Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9jYWxEZXNjcmlwdG9yID0KLSAgICAgICAgW0dQQkRlc2Ny
aXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6W0dQQlZhbHVlIGNsYXNzXQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RDbGFzczpbR1BCU3RydWN0Um9vdCBjbGFz
c10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6R1BCU3Ry
dWN0Um9vdF9GaWxlRGVzY3JpcHRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmllbGRzOmZpZWxkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmllbGRDb3VudDoodWludDMyX3QpKHNpemVvZihmaWVsZHMpIC8gc2l6ZW9mKEdQQk1lc3Nh
Z2VGaWVsZERlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZVNpemU6c2l6ZW9mKEdQQlZhbHVlX19zdG9yYWdlXykKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6MF07Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIg
Km9uZW9mc1tdID0gewotICAgICAgImtpbmQiLAotICAgIH07Ci0gICAgW2xvY2FsRGVzY3JpcHRv
ciBzZXR1cE9uZW9mczpvbmVvZnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Oih1
aW50MzJfdCkoc2l6ZW9mKG9uZW9mcykgLyBzaXplb2YoY2hhciopKQotICAgICAgICAgICAgICAg
ICAgIGZpcnN0SGFzSW5kZXg6LTFdOwotICAgIE5TQXNzZXJ0KGRlc2NyaXB0b3IgPT0gbmlsLCBA
IlN0YXJ0dXAgcmVjdXJzZWQhIik7Ci0gICAgZGVzY3JpcHRvciA9IGxvY2FsRGVzY3JpcHRvcjsK
LSAgfQotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotQGVuZAotCi1pbnQzMl90IEdQQlZhbHVl
X051bGxWYWx1ZV9SYXdWYWx1ZShHUEJWYWx1ZSAqbWVzc2FnZSkgewotICBHUEJEZXNjcmlwdG9y
ICpkZXNjcmlwdG9yID0gW0dQQlZhbHVlIGRlc2NyaXB0b3JdOwotICBHUEJGaWVsZERlc2NyaXB0
b3IgKmZpZWxkID0gW2Rlc2NyaXB0b3IgZmllbGRXaXRoTnVtYmVyOkdQQlZhbHVlX0ZpZWxkTnVt
YmVyX051bGxWYWx1ZV07Ci0gIHJldHVybiBHUEJHZXRNZXNzYWdlSW50MzJGaWVsZChtZXNzYWdl
LCBmaWVsZCk7Ci19Ci0KLXZvaWQgU2V0R1BCVmFsdWVfTnVsbFZhbHVlX1Jhd1ZhbHVlKEdQQlZh
bHVlICptZXNzYWdlLCBpbnQzMl90IHZhbHVlKSB7Ci0gIEdQQkRlc2NyaXB0b3IgKmRlc2NyaXB0
b3IgPSBbR1BCVmFsdWUgZGVzY3JpcHRvcl07Ci0gIEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQg
PSBbZGVzY3JpcHRvciBmaWVsZFdpdGhOdW1iZXI6R1BCVmFsdWVfRmllbGROdW1iZXJfTnVsbFZh
bHVlXTsKLSAgR1BCU2V0SW50MzJJdmFyV2l0aEZpZWxkSW50ZXJuYWwobWVzc2FnZSwgZmllbGQs
IHZhbHVlLCBkZXNjcmlwdG9yLmZpbGUuc3ludGF4KTsKLX0KLQotdm9pZCBHUEJWYWx1ZV9DbGVh
cktpbmRPbmVPZkNhc2UoR1BCVmFsdWUgKm1lc3NhZ2UpIHsKLSAgR1BCRGVzY3JpcHRvciAqZGVz
Y3JpcHRvciA9IFttZXNzYWdlIGRlc2NyaXB0b3JdOwotICBHUEJPbmVvZkRlc2NyaXB0b3IgKm9u
ZW9mID0gZGVzY3JpcHRvci0+b25lb2ZzX1swXTsKLSAgR1BCTWF5YmVDbGVhck9uZW9mKG1lc3Nh
Z2UsIG9uZW9mLCAtMSwgMCk7Ci19Ci0jcHJhZ21hIG1hcmsgLSBHUEJMaXN0VmFsdWUKLQotQGlt
cGxlbWVudGF0aW9uIEdQQkxpc3RWYWx1ZQotCi1AZHluYW1pYyB2YWx1ZXNBcnJheSwgdmFsdWVz
QXJyYXlfQ291bnQ7Ci0KLXR5cGVkZWYgc3RydWN0IEdQQkxpc3RWYWx1ZV9fc3RvcmFnZV8gewot
ICB1aW50MzJfdCBfaGFzX3N0b3JhZ2VfWzFdOwotICBOU011dGFibGVBcnJheSAqdmFsdWVzQXJy
YXk7Ci19IEdQQkxpc3RWYWx1ZV9fc3RvcmFnZV87Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIHRocmVh
ZHNhZmUgYmVjYXVzZSBpdCBpcyBpbml0aWFsbHkgY2FsbGVkCi0vLyBpbiAraW5pdGlhbGl6ZSBm
b3IgZWFjaCBzdWJjbGFzcy4KLSsgKEdQQkRlc2NyaXB0b3IgKilkZXNjcmlwdG9yIHsKLSAgc3Rh
dGljIEdQQkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBuaWw7Ci0gIGlmICghZGVzY3JpcHRvcikg
ewotICAgIHN0YXRpYyBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiBmaWVsZHNbXSA9IHsKLSAg
ICAgIHsKLSAgICAgICAgLm5hbWUgPSAidmFsdWVzQXJyYXkiLAotICAgICAgICAuZGF0YVR5cGVT
cGVjaWZpYy5jbGFzc05hbWUgPSBHUEJTdHJpbmdpZnlTeW1ib2woR1BCVmFsdWUpLAotICAgICAg
ICAubnVtYmVyID0gR1BCTGlzdFZhbHVlX0ZpZWxkTnVtYmVyX1ZhbHVlc0FycmF5LAotICAgICAg
ICAuaGFzSW5kZXggPSBHUEJOb0hhc0JpdCwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClv
ZmZzZXRvZihHUEJMaXN0VmFsdWVfX3N0b3JhZ2VfLCB2YWx1ZXNBcnJheSksCi0gICAgICAgIC5m
bGFncyA9IEdQQkZpZWxkUmVwZWF0ZWQsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBl
TWVzc2FnZSwKLSAgICAgIH0sCi0gICAgfTsKLSAgICBHUEJEZXNjcmlwdG9yICpsb2NhbERlc2Ny
aXB0b3IgPQotICAgICAgICBbR1BCRGVzY3JpcHRvciBhbGxvY0Rlc2NyaXB0b3JGb3JDbGFzczpb
R1BCTGlzdFZhbHVlIGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJvb3RDbGFzczpbR1BCU3RydWN0Um9vdCBjbGFzc10KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbGU6R1BCU3RydWN0Um9vdF9GaWxlRGVzY3JpcHRvcigpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzOmZpZWxkcwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDb3VudDoodWludDMyX3QpKHNp
emVvZihmaWVsZHMpIC8gc2l6ZW9mKEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVNpemU6c2l6ZW9mKEdQQkxpc3RW
YWx1ZV9fc3RvcmFnZV8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsYWdzOjBdOwotICAgIE5TQXNzZXJ0KGRlc2NyaXB0b3IgPT0gbmlsLCBAIlN0YXJ0dXAgcmVj
dXJzZWQhIik7Ci0gICAgZGVzY3JpcHRvciA9IGxvY2FsRGVzY3JpcHRvcjsKLSAgfQotICByZXR1
cm4gZGVzY3JpcHRvcjsKLX0KLQotQGVuZAotCi0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2JhbF9zY29wZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvVGltZXN0YW1wLnBib2JqYy5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3Rp
dmVjL2dvb2dsZS9wcm90b2J1Zi9UaW1lc3RhbXAucGJvYmpjLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDkyNWRjYTg0MGI1ODdmZjEzNzk4ZDk4ZGU0ZmI1ZWUwZmZiYjJlOGEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dv
b2dsZS9wcm90b2J1Zi9UaW1lc3RhbXAucGJvYmpjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMg
KzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBE
TyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90bwot
Ci0jaW1wb3J0ICJHUEJQcm90b2NvbEJ1ZmZlcnMuaCIKLQotI2lmIEdPT0dMRV9QUk9UT0JVRl9P
QkpDX0dFTl9WRVJTSU9OICE9IDMwMDAxCi0jZXJyb3IgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQg
YnkgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBwcm90b2Mgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdp
dGggeW91ciBQcm90b2NvbCBCdWZmZXIgbGlicmFyeSBzb3VyY2VzLgotI2VuZGlmCi0KLS8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChpbXBvcnRzKQotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1k
ZWNsYXJhdGlvbnMiCi0KLUNGX0VYVEVSTl9DX0JFR0lOCi0KLU5TX0FTU1VNRV9OT05OVUxMX0JF
R0lOCi0KLSNwcmFnbWEgbWFyayAtIEdQQlRpbWVzdGFtcFJvb3QKLQotLy8vIEV4cG9zZXMgdGhl
IGV4dGVuc2lvbiByZWdpc3RyeSBmb3IgdGhpcyBmaWxlLgotLy8vCi0vLy8gVGhlIGJhc2UgY2xh
c3MgcHJvdmlkZXM6Ci0vLy8gQGNvZGUKLS8vLyAgICsgKEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICop
ZXh0ZW5zaW9uUmVnaXN0cnk7Ci0vLy8gQGVuZGNvZGUKLS8vLyB3aGljaCBpcyBhIEBjIEdQQkV4
dGVuc2lvblJlZ2lzdHJ5IHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBleHRlbnNpb25zIGRlZmluZWQg
YnkKLS8vLyB0aGlzIGZpbGUgYW5kIGFsbCBmaWxlcyB0aGF0IGl0IGRlcGVuZHMgb24uCi1AaW50
ZXJmYWNlIEdQQlRpbWVzdGFtcFJvb3QgOiBHUEJSb290T2JqZWN0Ci1AZW5kCi0KLSNwcmFnbWEg
bWFyayAtIEdQQlRpbWVzdGFtcAotCi10eXBlZGVmIEdQQl9FTlVNKEdQQlRpbWVzdGFtcF9GaWVs
ZE51bWJlcikgewotICBHUEJUaW1lc3RhbXBfRmllbGROdW1iZXJfU2Vjb25kcyA9IDEsCi0gIEdQ
QlRpbWVzdGFtcF9GaWVsZE51bWJlcl9OYW5vcyA9IDIsCi19OwotCi0vLy8gQSBUaW1lc3RhbXAg
cmVwcmVzZW50cyBhIHBvaW50IGluIHRpbWUgaW5kZXBlbmRlbnQgb2YgYW55IHRpbWUgem9uZQot
Ly8vIG9yIGNhbGVuZGFyLCByZXByZXNlbnRlZCBhcyBzZWNvbmRzIGFuZCBmcmFjdGlvbnMgb2Yg
c2Vjb25kcyBhdAotLy8vIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBpbiBVVEMgRXBvY2ggdGltZS4g
SXQgaXMgZW5jb2RlZCB1c2luZyB0aGUKLS8vLyBQcm9sZXB0aWMgR3JlZ29yaWFuIENhbGVuZGFy
IHdoaWNoIGV4dGVuZHMgdGhlIEdyZWdvcmlhbiBjYWxlbmRhcgotLy8vIGJhY2t3YXJkcyB0byB5
ZWFyIG9uZS4gSXQgaXMgZW5jb2RlZCBhc3N1bWluZyBhbGwgbWludXRlcyBhcmUgNjAKLS8vLyBz
ZWNvbmRzIGxvbmcsIGkuZS4gbGVhcCBzZWNvbmRzIGFyZSAic21lYXJlZCIgc28gdGhhdCBubyBs
ZWFwIHNlY29uZAotLy8vIHRhYmxlIGlzIG5lZWRlZCBmb3IgaW50ZXJwcmV0YXRpb24uIFJhbmdl
IGlzIGZyb20KLS8vLyAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIzOjU5OjU5
Ljk5OTk5OTk5OVouCi0vLy8gQnkgcmVzdHJpY3RpbmcgdG8gdGhhdCByYW5nZSwgd2UgZW5zdXJl
IHRoYXQgd2UgY2FuIGNvbnZlcnQgdG8KLS8vLyBhbmQgZnJvbSAgUkZDIDMzMzkgZGF0ZSBzdHJp
bmdzLgotLy8vIFNlZSBbaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzMzMzkudHh0XShodHRw
czovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzMzOS50eHQpLgotLy8vCi0vLy8gRXhhbXBsZSAxOiBD
b21wdXRlIFRpbWVzdGFtcCBmcm9tIFBPU0lYIGB0aW1lKClgLgotLy8vCi0vLy8gICAgIFRpbWVz
dGFtcCB0aW1lc3RhbXA7Ci0vLy8gICAgIHRpbWVzdGFtcC5zZXRfc2Vjb25kcyh0aW1lKE5VTEwp
KTsKLS8vLyAgICAgdGltZXN0YW1wLnNldF9uYW5vcygwKTsKLS8vLwotLy8vIEV4YW1wbGUgMjog
Q29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBQT1NJWCBgZ2V0dGltZW9mZGF5KClgLgotLy8vCi0vLy8g
ICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotLy8vICAgICBnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsK
LS8vLwotLy8vICAgICBUaW1lc3RhbXAgdGltZXN0YW1wOwotLy8vICAgICB0aW1lc3RhbXAuc2V0
X3NlY29uZHModHYudHZfc2VjKTsKLS8vLyAgICAgdGltZXN0YW1wLnNldF9uYW5vcyh0di50dl91
c2VjICogMTAwMCk7Ci0vLy8KLS8vLyBFeGFtcGxlIDM6IENvbXB1dGUgVGltZXN0YW1wIGZyb20g
V2luMzIgYEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKClgLgotLy8vCi0vLy8gICAgIEZJTEVUSU1F
IGZ0OwotLy8vICAgICBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOwotLy8vICAgICBVSU5U
NjQgdGlja3MgPSAoKChVSU5UNjQpZnQuZHdIaWdoRGF0ZVRpbWUpIDw8IDMyKSB8IGZ0LmR3TG93
RGF0ZVRpbWU7Ci0vLy8KLS8vLyAgICAgLy8gQSBXaW5kb3dzIHRpY2sgaXMgMTAwIG5hbm9zZWNv
bmRzLiBXaW5kb3dzIGVwb2NoIDE2MDEtMDEtMDFUMDA6MDA6MDBaCi0vLy8gICAgIC8vIGlzIDEx
NjQ0NDczNjAwIHNlY29uZHMgYmVmb3JlIFVuaXggZXBvY2ggMTk3MC0wMS0wMVQwMDowMDowMFou
Ci0vLy8gICAgIFRpbWVzdGFtcCB0aW1lc3RhbXA7Ci0vLy8gICAgIHRpbWVzdGFtcC5zZXRfc2Vj
b25kcygoSU5UNjQpICgodGlja3MgLyAxMDAwMDAwMCkgLSAxMTY0NDQ3MzYwMExMKSk7Ci0vLy8g
ICAgIHRpbWVzdGFtcC5zZXRfbmFub3MoKElOVDMyKSAoKHRpY2tzICUgMTAwMDAwMDApICogMTAw
KSk7Ci0vLy8KLS8vLyBFeGFtcGxlIDQ6IENvbXB1dGUgVGltZXN0YW1wIGZyb20gSmF2YSBgU3lz
dGVtLmN1cnJlbnRUaW1lTWlsbGlzKClgLgotLy8vCi0vLy8gICAgIGxvbmcgbWlsbGlzID0gU3lz
dGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0vLy8KLS8vLyAgICAgVGltZXN0YW1wIHRpbWVzdGFt
cCA9IFRpbWVzdGFtcC5uZXdCdWlsZGVyKCkuc2V0U2Vjb25kcyhtaWxsaXMgLyAxMDAwKQotLy8v
ICAgICAgICAgLnNldE5hbm9zKChpbnQpICgobWlsbGlzICUgMTAwMCkgKiAxMDAwMDAwKSkuYnVp
bGQoKTsKLS8vLwotLy8vCi0vLy8gRXhhbXBsZSA1OiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIGN1
cnJlbnQgdGltZSBpbiBQeXRob24uCi0vLy8KLS8vLyAgICAgbm93ID0gdGltZS50aW1lKCkKLS8v
LyAgICAgc2Vjb25kcyA9IGludChub3cpCi0vLy8gICAgIG5hbm9zID0gaW50KChub3cgLSBzZWNv
bmRzKSAqIDEwKio5KQotLy8vICAgICB0aW1lc3RhbXAgPSBUaW1lc3RhbXAoc2Vjb25kcz1zZWNv
bmRzLCBuYW5vcz1uYW5vcykKLUBpbnRlcmZhY2UgR1BCVGltZXN0YW1wIDogR1BCTWVzc2FnZQot
Ci0vLy8gUmVwcmVzZW50cyBzZWNvbmRzIG9mIFVUQyB0aW1lIHNpbmNlIFVuaXggZXBvY2gKLS8v
LyAxOTcwLTAxLTAxVDAwOjAwOjAwWi4gTXVzdCBiZSBmcm9tIGZyb20gMDAwMS0wMS0wMVQwMDow
MDowMFogdG8KLS8vLyA5OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuCi1AcHJvcGVydHko
bm9uYXRvbWljLCByZWFkd3JpdGUpIGludDY0X3Qgc2Vjb25kczsKLQotLy8vIE5vbi1uZWdhdGl2
ZSBmcmFjdGlvbnMgb2YgYSBzZWNvbmQgYXQgbmFub3NlY29uZCByZXNvbHV0aW9uLiBOZWdhdGl2
ZQotLy8vIHNlY29uZCB2YWx1ZXMgd2l0aCBmcmFjdGlvbnMgbXVzdCBzdGlsbCBoYXZlIG5vbi1u
ZWdhdGl2ZSBuYW5vcyB2YWx1ZXMKLS8vLyB0aGF0IGNvdW50IGZvcndhcmQgaW4gdGltZS4gTXVz
dCBiZSBmcm9tIDAgdG8gOTk5LDk5OSw5OTkKLS8vLyBpbmNsdXNpdmUuCi1AcHJvcGVydHkobm9u
YXRvbWljLCByZWFkd3JpdGUpIGludDMyX3QgbmFub3M7Ci0KLUBlbmQKLQotTlNfQVNTVU1FX05P
Tk5VTExfRU5ECi0KLUNGX0VYVEVSTl9DX0VORAotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1RpbWVzdGFtcC5wYm9iamMubSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0
aXZlYy9nb29nbGUvcHJvdG9idWYvVGltZXN0YW1wLnBib2JqYy5tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmMzVlNDM1ZGZiYTVhYmNlYmY5Yjg2MGIxOTQzZjA0YzQ2NDMwYWRkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9n
b29nbGUvcHJvdG9idWYvVGltZXN0YW1wLnBib2JqYy5tCisrKyAvZGV2L251bGwKQEAgLTEsODgg
KzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBE
TyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90bwot
Ci0jaW1wb3J0ICJHUEJQcm90b2NvbEJ1ZmZlcnNfUnVudGltZVN1cHBvcnQuaCIKLSNpbXBvcnQg
Imdvb2dsZS9wcm90b2J1Zi9UaW1lc3RhbXAucGJvYmpjLmgiCi0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoaW1wb3J0cykKLQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgot
Ci0jcHJhZ21hIG1hcmsgLSBHUEJUaW1lc3RhbXBSb290Ci0KLUBpbXBsZW1lbnRhdGlvbiBHUEJU
aW1lc3RhbXBSb290Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCVGltZXN0YW1wUm9vdF9G
aWxlRGVzY3JpcHRvcgotCi1zdGF0aWMgR1BCRmlsZURlc2NyaXB0b3IgKkdQQlRpbWVzdGFtcFJv
b3RfRmlsZURlc2NyaXB0b3Iodm9pZCkgewotICAvLyBUaGlzIGlzIGNhbGxlZCBieSAraW5pdGlh
bGl6ZSBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5Ci0gIC8vIGFib3V0IHRocmVhZCBzYWZl
dHkgb2YgdGhlIHNpbmdsZXRvbi4KLSAgc3RhdGljIEdQQkZpbGVEZXNjcmlwdG9yICpkZXNjcmlw
dG9yID0gTlVMTDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgR1BCRGVidWdDaGVja1J1bnRp
bWVWZXJzaW9uKCk7Ci0gICAgZGVzY3JpcHRvciA9IFtbR1BCRmlsZURlc2NyaXB0b3IgYWxsb2Nd
IGluaXRXaXRoUGFja2FnZTpAImdvb2dsZS5wcm90b2J1ZiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4OkdQQkZpbGVTeW50YXhQcm90
bzNdOwotICB9Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi0jcHJhZ21hIG1hcmsgLSBHUEJU
aW1lc3RhbXAKLQotQGltcGxlbWVudGF0aW9uIEdQQlRpbWVzdGFtcAotCi1AZHluYW1pYyBzZWNv
bmRzOwotQGR5bmFtaWMgbmFub3M7Ci0KLXR5cGVkZWYgc3RydWN0IEdQQlRpbWVzdGFtcF9fc3Rv
cmFnZV8gewotICB1aW50MzJfdCBfaGFzX3N0b3JhZ2VfWzFdOwotICBpbnQzMl90IG5hbm9zOwot
ICBpbnQ2NF90IHNlY29uZHM7Ci19IEdQQlRpbWVzdGFtcF9fc3RvcmFnZV87Ci0KLS8vIFRoaXMg
bWV0aG9kIGlzIHRocmVhZHNhZmUgYmVjYXVzZSBpdCBpcyBpbml0aWFsbHkgY2FsbGVkCi0vLyBp
biAraW5pdGlhbGl6ZSBmb3IgZWFjaCBzdWJjbGFzcy4KLSsgKEdQQkRlc2NyaXB0b3IgKilkZXNj
cmlwdG9yIHsKLSAgc3RhdGljIEdQQkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBuaWw7Ci0gIGlm
ICghZGVzY3JpcHRvcikgewotICAgIHN0YXRpYyBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiBm
aWVsZHNbXSA9IHsKLSAgICAgIHsKLSAgICAgICAgLm5hbWUgPSAic2Vjb25kcyIsCi0gICAgICAg
IC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBH
UEJUaW1lc3RhbXBfRmllbGROdW1iZXJfU2Vjb25kcywKLSAgICAgICAgLmhhc0luZGV4ID0gMCwK
LSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihHUEJUaW1lc3RhbXBfX3N0b3Jh
Z2VfLCBzZWNvbmRzKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAg
ICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVJbnQ2NCwKLSAgICAgIH0sCi0gICAgICB7Ci0gICAg
ICAgIC5uYW1lID0gIm5hbm9zIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1l
ID0gTlVMTCwKLSAgICAgICAgLm51bWJlciA9IEdQQlRpbWVzdGFtcF9GaWVsZE51bWJlcl9OYW5v
cywKLSAgICAgICAgLmhhc0luZGV4ID0gMSwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClv
ZmZzZXRvZihHUEJUaW1lc3RhbXBfX3N0b3JhZ2VfLCBuYW5vcyksCi0gICAgICAgIC5mbGFncyA9
IEdQQkZpZWxkT3B0aW9uYWwsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlSW50MzIs
Ci0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9jYWxEZXNjcmlwdG9yID0K
LSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6W0dQQlRpbWVz
dGFtcCBjbGFzc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290Q2xh
c3M6W0dQQlRpbWVzdGFtcFJvb3QgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaWxlOkdQQlRpbWVzdGFtcFJvb3RfRmlsZURlc2NyaXB0b3IoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczpmaWVsZHMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6KHVpbnQzMl90KShzaXpl
b2YoZmllbGRzKSAvIHNpemVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbikpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZihHUEJUaW1lc3Rh
bXBfX3N0b3JhZ2VfKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bGFnczowXTsKLSAgICBOU0Fzc2VydChkZXNjcmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJlY3Vy
c2VkISIpOwotICAgIGRlc2NyaXB0b3IgPSBsb2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJu
IGRlc2NyaXB0b3I7Ci19Ci0KLUBlbmQKLQotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
Ci0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1R5cGUucGJvYmpjLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvZ29v
Z2xlL3Byb3RvYnVmL1R5cGUucGJvYmpjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU5MGQ5NzBiZmQ0MDExNWI4ZTMzYTU1NWY1ZGJlNzM4ZjNhZTdiNDEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1
Zi9UeXBlLnBib2JqYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzczICswLDAgQEAKLS8vIEdlbmVy
YXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBz
b3VyY2U6IGdvb2dsZS9wcm90b2J1Zi90eXBlLnByb3RvCi0KLSNpbXBvcnQgIkdQQlByb3RvY29s
QnVmZmVycy5oIgotCi0jaWYgR09PR0xFX1BST1RPQlVGX09CSkNfR0VOX1ZFUlNJT04gIT0gMzAw
MDEKLSNlcnJvciBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBhIGRpZmZlcmVudCB2ZXJzaW9u
IG9mIHByb3RvYyB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCB5b3VyIFByb3RvY29sIEJ1ZmZl
ciBsaWJyYXJ5IHNvdXJjZXMuCi0jZW5kaWYKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGltcG9ydHMpCi0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLQotQ0ZfRVhU
RVJOX0NfQkVHSU4KLQotQGNsYXNzIEdQQkFueTsKLUBjbGFzcyBHUEJFbnVtVmFsdWU7Ci1AY2xh
c3MgR1BCRmllbGQ7Ci1AY2xhc3MgR1BCT3B0aW9uOwotQGNsYXNzIEdQQlNvdXJjZUNvbnRleHQ7
Ci0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi0KLSNwcmFnbWEgbWFyayAtIEVudW0gR1BCU3lu
dGF4Ci0KLS8vLyBUaGUgc3ludGF4IGluIHdoaWNoIGEgcHJvdG9jb2wgYnVmZmVyIGVsZW1lbnQg
aXMgZGVmaW5lZC4KLXR5cGVkZWYgR1BCX0VOVU0oR1BCU3ludGF4KSB7Ci0gIC8vLyBWYWx1ZSB1
c2VkIGlmIGFueSBtZXNzYWdlJ3MgZmllbGQgZW5jb3VudGVycyBhIHZhbHVlIHRoYXQgaXMgbm90
IGRlZmluZWQKLSAgLy8vIGJ5IHRoaXMgZW51bS4gVGhlIG1lc3NhZ2Ugd2lsbCBhbHNvIGhhdmUg
QyBmdW5jdGlvbnMgdG8gZ2V0L3NldCB0aGUgcmF3VmFsdWUKLSAgLy8vIG9mIHRoZSBmaWVsZC4K
LSAgR1BCU3ludGF4X0dQQlVucmVjb2duaXplZEVudW1lcmF0b3JWYWx1ZSA9IGtHUEJVbnJlY29n
bml6ZWRFbnVtZXJhdG9yVmFsdWUsCi0gIC8vLyBTeW50YXggYHByb3RvMmAuCi0gIEdQQlN5bnRh
eF9TeW50YXhQcm90bzIgPSAwLAotCi0gIC8vLyBTeW50YXggYHByb3RvM2AuCi0gIEdQQlN5bnRh
eF9TeW50YXhQcm90bzMgPSAxLAotfTsKLQotR1BCRW51bURlc2NyaXB0b3IgKkdQQlN5bnRheF9F
bnVtRGVzY3JpcHRvcih2b2lkKTsKLQotLy8vIENoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIHZh
bHVlIGlzIGRlZmluZWQgYnkgdGhlIGVudW0gb3Igd2FzIG5vdCBrbm93biBhdAotLy8vIHRoZSB0
aW1lIHRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQuCi1CT09MIEdQQlN5bnRheF9Jc1ZhbGlkVmFs
dWUoaW50MzJfdCB2YWx1ZSk7Ci0KLSNwcmFnbWEgbWFyayAtIEVudW0gR1BCRmllbGRfS2luZAot
Ci0vLy8gQmFzaWMgZmllbGQgdHlwZXMuCi10eXBlZGVmIEdQQl9FTlVNKEdQQkZpZWxkX0tpbmQp
IHsKLSAgLy8vIFZhbHVlIHVzZWQgaWYgYW55IG1lc3NhZ2UncyBmaWVsZCBlbmNvdW50ZXJzIGEg
dmFsdWUgdGhhdCBpcyBub3QgZGVmaW5lZAotICAvLy8gYnkgdGhpcyBlbnVtLiBUaGUgbWVzc2Fn
ZSB3aWxsIGFsc28gaGF2ZSBDIGZ1bmN0aW9ucyB0byBnZXQvc2V0IHRoZSByYXdWYWx1ZQotICAv
Ly8gb2YgdGhlIGZpZWxkLgotICBHUEJGaWVsZF9LaW5kX0dQQlVucmVjb2duaXplZEVudW1lcmF0
b3JWYWx1ZSA9IGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWUsCi0gIC8vLyBGaWVsZCB0
eXBlIHVua25vd24uCi0gIEdQQkZpZWxkX0tpbmRfVHlwZVVua25vd24gPSAwLAotCi0gIC8vLyBG
aWVsZCB0eXBlIGRvdWJsZS4KLSAgR1BCRmllbGRfS2luZF9UeXBlRG91YmxlID0gMSwKLQotICAv
Ly8gRmllbGQgdHlwZSBmbG9hdC4KLSAgR1BCRmllbGRfS2luZF9UeXBlRmxvYXQgPSAyLAotCi0g
IC8vLyBGaWVsZCB0eXBlIGludDY0LgotICBHUEJGaWVsZF9LaW5kX1R5cGVJbnQ2NCA9IDMsCi0K
LSAgLy8vIEZpZWxkIHR5cGUgdWludDY0LgotICBHUEJGaWVsZF9LaW5kX1R5cGVVaW50NjQgPSA0
LAotCi0gIC8vLyBGaWVsZCB0eXBlIGludDMyLgotICBHUEJGaWVsZF9LaW5kX1R5cGVJbnQzMiA9
IDUsCi0KLSAgLy8vIEZpZWxkIHR5cGUgZml4ZWQ2NC4KLSAgR1BCRmllbGRfS2luZF9UeXBlRml4
ZWQ2NCA9IDYsCi0KLSAgLy8vIEZpZWxkIHR5cGUgZml4ZWQzMi4KLSAgR1BCRmllbGRfS2luZF9U
eXBlRml4ZWQzMiA9IDcsCi0KLSAgLy8vIEZpZWxkIHR5cGUgYm9vbC4KLSAgR1BCRmllbGRfS2lu
ZF9UeXBlQm9vbCA9IDgsCi0KLSAgLy8vIEZpZWxkIHR5cGUgc3RyaW5nLgotICBHUEJGaWVsZF9L
aW5kX1R5cGVTdHJpbmcgPSA5LAotCi0gIC8vLyBGaWVsZCB0eXBlIGdyb3VwLiBQcm90bzIgc3lu
dGF4IG9ubHksIGFuZCBkZXByZWNhdGVkLgotICBHUEJGaWVsZF9LaW5kX1R5cGVHcm91cCA9IDEw
LAotCi0gIC8vLyBGaWVsZCB0eXBlIG1lc3NhZ2UuCi0gIEdQQkZpZWxkX0tpbmRfVHlwZU1lc3Nh
Z2UgPSAxMSwKLQotICAvLy8gRmllbGQgdHlwZSBieXRlcy4KLSAgR1BCRmllbGRfS2luZF9UeXBl
Qnl0ZXMgPSAxMiwKLQotICAvLy8gRmllbGQgdHlwZSB1aW50MzIuCi0gIEdQQkZpZWxkX0tpbmRf
VHlwZVVpbnQzMiA9IDEzLAotCi0gIC8vLyBGaWVsZCB0eXBlIGVudW0uCi0gIEdQQkZpZWxkX0tp
bmRfVHlwZUVudW0gPSAxNCwKLQotICAvLy8gRmllbGQgdHlwZSBzZml4ZWQzMi4KLSAgR1BCRmll
bGRfS2luZF9UeXBlU2ZpeGVkMzIgPSAxNSwKLQotICAvLy8gRmllbGQgdHlwZSBzZml4ZWQ2NC4K
LSAgR1BCRmllbGRfS2luZF9UeXBlU2ZpeGVkNjQgPSAxNiwKLQotICAvLy8gRmllbGQgdHlwZSBz
aW50MzIuCi0gIEdQQkZpZWxkX0tpbmRfVHlwZVNpbnQzMiA9IDE3LAotCi0gIC8vLyBGaWVsZCB0
eXBlIHNpbnQ2NC4KLSAgR1BCRmllbGRfS2luZF9UeXBlU2ludDY0ID0gMTgsCi19OwotCi1HUEJF
bnVtRGVzY3JpcHRvciAqR1BCRmllbGRfS2luZF9FbnVtRGVzY3JpcHRvcih2b2lkKTsKLQotLy8v
IENoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGRlZmluZWQgYnkgdGhlIGVudW0g
b3Igd2FzIG5vdCBrbm93biBhdAotLy8vIHRoZSB0aW1lIHRoaXMgc291cmNlIHdhcyBnZW5lcmF0
ZWQuCi1CT09MIEdQQkZpZWxkX0tpbmRfSXNWYWxpZFZhbHVlKGludDMyX3QgdmFsdWUpOwotCi0j
cHJhZ21hIG1hcmsgLSBFbnVtIEdQQkZpZWxkX0NhcmRpbmFsaXR5Ci0KLS8vLyBXaGV0aGVyIGEg
ZmllbGQgaXMgb3B0aW9uYWwsIHJlcXVpcmVkLCBvciByZXBlYXRlZC4KLXR5cGVkZWYgR1BCX0VO
VU0oR1BCRmllbGRfQ2FyZGluYWxpdHkpIHsKLSAgLy8vIFZhbHVlIHVzZWQgaWYgYW55IG1lc3Nh
Z2UncyBmaWVsZCBlbmNvdW50ZXJzIGEgdmFsdWUgdGhhdCBpcyBub3QgZGVmaW5lZAotICAvLy8g
YnkgdGhpcyBlbnVtLiBUaGUgbWVzc2FnZSB3aWxsIGFsc28gaGF2ZSBDIGZ1bmN0aW9ucyB0byBn
ZXQvc2V0IHRoZSByYXdWYWx1ZQotICAvLy8gb2YgdGhlIGZpZWxkLgotICBHUEJGaWVsZF9DYXJk
aW5hbGl0eV9HUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWUgPSBrR1BCVW5yZWNvZ25pemVk
RW51bWVyYXRvclZhbHVlLAotICAvLy8gRm9yIGZpZWxkcyB3aXRoIHVua25vd24gY2FyZGluYWxp
dHkuCi0gIEdQQkZpZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5VW5rbm93biA9IDAsCi0KLSAg
Ly8vIEZvciBvcHRpb25hbCBmaWVsZHMuCi0gIEdQQkZpZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFs
aXR5T3B0aW9uYWwgPSAxLAotCi0gIC8vLyBGb3IgcmVxdWlyZWQgZmllbGRzLiBQcm90bzIgc3lu
dGF4IG9ubHkuCi0gIEdQQkZpZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5UmVxdWlyZWQgPSAy
LAotCi0gIC8vLyBGb3IgcmVwZWF0ZWQgZmllbGRzLgotICBHUEJGaWVsZF9DYXJkaW5hbGl0eV9D
YXJkaW5hbGl0eVJlcGVhdGVkID0gMywKLX07Ci0KLUdQQkVudW1EZXNjcmlwdG9yICpHUEJGaWVs
ZF9DYXJkaW5hbGl0eV9FbnVtRGVzY3JpcHRvcih2b2lkKTsKLQotLy8vIENoZWNrcyB0byBzZWUg
aWYgdGhlIGdpdmVuIHZhbHVlIGlzIGRlZmluZWQgYnkgdGhlIGVudW0gb3Igd2FzIG5vdCBrbm93
biBhdAotLy8vIHRoZSB0aW1lIHRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQuCi1CT09MIEdQQkZp
ZWxkX0NhcmRpbmFsaXR5X0lzVmFsaWRWYWx1ZShpbnQzMl90IHZhbHVlKTsKLQotI3ByYWdtYSBt
YXJrIC0gR1BCVHlwZVJvb3QKLQotLy8vIEV4cG9zZXMgdGhlIGV4dGVuc2lvbiByZWdpc3RyeSBm
b3IgdGhpcyBmaWxlLgotLy8vCi0vLy8gVGhlIGJhc2UgY2xhc3MgcHJvdmlkZXM6Ci0vLy8gQGNv
ZGUKLS8vLyAgICsgKEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICopZXh0ZW5zaW9uUmVnaXN0cnk7Ci0v
Ly8gQGVuZGNvZGUKLS8vLyB3aGljaCBpcyBhIEBjIEdQQkV4dGVuc2lvblJlZ2lzdHJ5IHRoYXQg
aW5jbHVkZXMgYWxsIHRoZSBleHRlbnNpb25zIGRlZmluZWQgYnkKLS8vLyB0aGlzIGZpbGUgYW5k
IGFsbCBmaWxlcyB0aGF0IGl0IGRlcGVuZHMgb24uCi1AaW50ZXJmYWNlIEdQQlR5cGVSb290IDog
R1BCUm9vdE9iamVjdAotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBHUEJUeXBlCi0KLXR5cGVkZWYg
R1BCX0VOVU0oR1BCVHlwZV9GaWVsZE51bWJlcikgewotICBHUEJUeXBlX0ZpZWxkTnVtYmVyX05h
bWUgPSAxLAotICBHUEJUeXBlX0ZpZWxkTnVtYmVyX0ZpZWxkc0FycmF5ID0gMiwKLSAgR1BCVHlw
ZV9GaWVsZE51bWJlcl9PbmVvZnNBcnJheSA9IDMsCi0gIEdQQlR5cGVfRmllbGROdW1iZXJfT3B0
aW9uc0FycmF5ID0gNCwKLSAgR1BCVHlwZV9GaWVsZE51bWJlcl9Tb3VyY2VDb250ZXh0ID0gNSwK
LSAgR1BCVHlwZV9GaWVsZE51bWJlcl9TeW50YXggPSA2LAotfTsKLQotLy8vIEEgcHJvdG9jb2wg
YnVmZmVyIG1lc3NhZ2UgdHlwZS4KLUBpbnRlcmZhY2UgR1BCVHlwZSA6IEdQQk1lc3NhZ2UKLQot
Ly8vIFRoZSBmdWxseSBxdWFsaWZpZWQgbWVzc2FnZSBuYW1lLgotQHByb3BlcnR5KG5vbmF0b21p
YywgcmVhZHdyaXRlLCBjb3B5LCBudWxsX3Jlc2V0dGFibGUpIE5TU3RyaW5nICpuYW1lOwotCi0v
Ly8gVGhlIGxpc3Qgb2YgZmllbGRzLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlLCBz
dHJvbmcsIG51bGxfcmVzZXR0YWJsZSkgTlNNdXRhYmxlQXJyYXk8R1BCRmllbGQqPiAqZmllbGRz
QXJyYXk7Ci0vLy8gVGhlIG51bWJlciBvZiBpdGVtcyBpbiBAYyBmaWVsZHNBcnJheSB3aXRob3V0
IGNhdXNpbmcgdGhlIGFycmF5IHRvIGJlIGNyZWF0ZWQuCi1AcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkb25seSkgTlNVSW50ZWdlciBmaWVsZHNBcnJheV9Db3VudDsKLQotLy8vIFRoZSBsaXN0IG9m
IHR5cGVzIGFwcGVhcmluZyBpbiBgb25lb2ZgIGRlZmluaXRpb25zIGluIHRoaXMgdHlwZS4KLUBw
cm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgc3Ryb25nLCBudWxsX3Jlc2V0dGFibGUpIE5T
TXV0YWJsZUFycmF5PE5TU3RyaW5nKj4gKm9uZW9mc0FycmF5OwotLy8vIFRoZSBudW1iZXIgb2Yg
aXRlbXMgaW4gQGMgb25lb2ZzQXJyYXkgd2l0aG91dCBjYXVzaW5nIHRoZSBhcnJheSB0byBiZSBj
cmVhdGVkLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIgb25lb2Zz
QXJyYXlfQ291bnQ7Ci0KLS8vLyBUaGUgcHJvdG9jb2wgYnVmZmVyIG9wdGlvbnMuCi1AcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkd3JpdGUsIHN0cm9uZywgbnVsbF9yZXNldHRhYmxlKSBOU011dGFi
bGVBcnJheTxHUEJPcHRpb24qPiAqb3B0aW9uc0FycmF5OwotLy8vIFRoZSBudW1iZXIgb2YgaXRl
bXMgaW4gQGMgb3B0aW9uc0FycmF5IHdpdGhvdXQgY2F1c2luZyB0aGUgYXJyYXkgdG8gYmUgY3Jl
YXRlZC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIG9wdGlvbnNB
cnJheV9Db3VudDsKLQotLy8vIFRoZSBzb3VyY2UgY29udGV4dC4KLUBwcm9wZXJ0eShub25hdG9t
aWMsIHJlYWR3cml0ZSwgc3Ryb25nLCBudWxsX3Jlc2V0dGFibGUpIEdQQlNvdXJjZUNvbnRleHQg
KnNvdXJjZUNvbnRleHQ7Ci0vLy8gVGVzdCB0byBzZWUgaWYgQGMgc291cmNlQ29udGV4dCBoYXMg
YmVlbiBzZXQuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUpIEJPT0wgaGFzU291cmNl
Q29udGV4dDsKLQotLy8vIFRoZSBzb3VyY2Ugc3ludGF4LgotQHByb3BlcnR5KG5vbmF0b21pYywg
cmVhZHdyaXRlKSBHUEJTeW50YXggc3ludGF4OwotCi1AZW5kCi0KLS8vLyBGZXRjaGVzIHRoZSBy
YXcgdmFsdWUgb2YgYSBAYyBHUEJUeXBlJ3MgQGMgc3ludGF4IHByb3BlcnR5LCBldmVuCi0vLy8g
aWYgdGhlIHZhbHVlIHdhcyBub3QgZGVmaW5lZCBieSB0aGUgZW51bSBhdCB0aGUgdGltZSB0aGUg
Y29kZSB3YXMgZ2VuZXJhdGVkLgotaW50MzJfdCBHUEJUeXBlX1N5bnRheF9SYXdWYWx1ZShHUEJU
eXBlICptZXNzYWdlKTsKLS8vLyBTZXRzIHRoZSByYXcgdmFsdWUgb2YgYW4gQGMgR1BCVHlwZSdz
IEBjIHN5bnRheCBwcm9wZXJ0eSwgYWxsb3dpbmcKLS8vLyBpdCB0byBiZSBzZXQgdG8gYSB2YWx1
ZSB0aGF0IHdhcyBub3QgZGVmaW5lZCBieSB0aGUgZW51bSBhdCB0aGUgdGltZSB0aGUgY29kZQot
Ly8vIHdhcyBnZW5lcmF0ZWQuCi12b2lkIFNldEdQQlR5cGVfU3ludGF4X1Jhd1ZhbHVlKEdQQlR5
cGUgKm1lc3NhZ2UsIGludDMyX3QgdmFsdWUpOwotCi0jcHJhZ21hIG1hcmsgLSBHUEJGaWVsZAot
Ci10eXBlZGVmIEdQQl9FTlVNKEdQQkZpZWxkX0ZpZWxkTnVtYmVyKSB7Ci0gIEdQQkZpZWxkX0Zp
ZWxkTnVtYmVyX0tpbmQgPSAxLAotICBHUEJGaWVsZF9GaWVsZE51bWJlcl9DYXJkaW5hbGl0eSA9
IDIsCi0gIEdQQkZpZWxkX0ZpZWxkTnVtYmVyX051bWJlciA9IDMsCi0gIEdQQkZpZWxkX0ZpZWxk
TnVtYmVyX05hbWUgPSA0LAotICBHUEJGaWVsZF9GaWVsZE51bWJlcl9UeXBlVVJMID0gNiwKLSAg
R1BCRmllbGRfRmllbGROdW1iZXJfT25lb2ZJbmRleCA9IDcsCi0gIEdQQkZpZWxkX0ZpZWxkTnVt
YmVyX1BhY2tlZCA9IDgsCi0gIEdQQkZpZWxkX0ZpZWxkTnVtYmVyX09wdGlvbnNBcnJheSA9IDks
Ci0gIEdQQkZpZWxkX0ZpZWxkTnVtYmVyX0pzb25OYW1lID0gMTAsCi0gIEdQQkZpZWxkX0ZpZWxk
TnVtYmVyX0RlZmF1bHRWYWx1ZSA9IDExLAotfTsKLQotLy8vIEEgc2luZ2xlIGZpZWxkIG9mIGEg
bWVzc2FnZSB0eXBlLgotQGludGVyZmFjZSBHUEJGaWVsZCA6IEdQQk1lc3NhZ2UKLQotLy8vIFRo
ZSBmaWVsZCB0eXBlLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlKSBHUEJGaWVsZF9L
aW5kIGtpbmQ7Ci0KLS8vLyBUaGUgZmllbGQgY2FyZGluYWxpdHkuCi1AcHJvcGVydHkobm9uYXRv
bWljLCByZWFkd3JpdGUpIEdQQkZpZWxkX0NhcmRpbmFsaXR5IGNhcmRpbmFsaXR5OwotCi0vLy8g
VGhlIGZpZWxkIG51bWJlci4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSkgaW50MzJf
dCBudW1iZXI7Ci0KLS8vLyBUaGUgZmllbGQgbmFtZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJl
YWR3cml0ZSwgY29weSwgbnVsbF9yZXNldHRhYmxlKSBOU1N0cmluZyAqbmFtZTsKLQotLy8vIFRo
ZSBmaWVsZCB0eXBlIFVSTCwgd2l0aG91dCB0aGUgc2NoZW1lLCBmb3IgbWVzc2FnZSBvciBlbnVt
ZXJhdGlvbgotLy8vIHR5cGVzLiBFeGFtcGxlOiBgInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xl
LnByb3RvYnVmLlRpbWVzdGFtcCJgLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlLCBj
b3B5LCBudWxsX3Jlc2V0dGFibGUpIE5TU3RyaW5nICp0eXBlVVJMOwotCi0vLy8gVGhlIGluZGV4
IG9mIHRoZSBmaWVsZCB0eXBlIGluIGBUeXBlLm9uZW9mc2AsIGZvciBtZXNzYWdlIG9yIGVudW1l
cmF0aW9uCi0vLy8gdHlwZXMuIFRoZSBmaXJzdCB0eXBlIGhhcyBpbmRleCAxOyB6ZXJvIG1lYW5z
IHRoZSB0eXBlIGlzIG5vdCBpbiB0aGUgbGlzdC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3
cml0ZSkgaW50MzJfdCBvbmVvZkluZGV4OwotCi0vLy8gV2hldGhlciB0byB1c2UgYWx0ZXJuYXRp
dmUgcGFja2VkIHdpcmUgcmVwcmVzZW50YXRpb24uCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFk
d3JpdGUpIEJPT0wgcGFja2VkOwotCi0vLy8gVGhlIHByb3RvY29sIGJ1ZmZlciBvcHRpb25zLgot
QHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlLCBzdHJvbmcsIG51bGxfcmVzZXR0YWJsZSkg
TlNNdXRhYmxlQXJyYXk8R1BCT3B0aW9uKj4gKm9wdGlvbnNBcnJheTsKLS8vLyBUaGUgbnVtYmVy
IG9mIGl0ZW1zIGluIEBjIG9wdGlvbnNBcnJheSB3aXRob3V0IGNhdXNpbmcgdGhlIGFycmF5IHRv
IGJlIGNyZWF0ZWQuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBv
cHRpb25zQXJyYXlfQ291bnQ7Ci0KLS8vLyBUaGUgZmllbGQgSlNPTiBuYW1lLgotQHByb3BlcnR5
KG5vbmF0b21pYywgcmVhZHdyaXRlLCBjb3B5LCBudWxsX3Jlc2V0dGFibGUpIE5TU3RyaW5nICpq
c29uTmFtZTsKLQotLy8vIFRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGRlZmF1bHQgdmFsdWUgb2Yg
dGhpcyBmaWVsZC4gUHJvdG8yIHN5bnRheCBvbmx5LgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVh
ZHdyaXRlLCBjb3B5LCBudWxsX3Jlc2V0dGFibGUpIE5TU3RyaW5nICpkZWZhdWx0VmFsdWU7Ci0K
LUBlbmQKLQotLy8vIEZldGNoZXMgdGhlIHJhdyB2YWx1ZSBvZiBhIEBjIEdQQkZpZWxkJ3MgQGMg
a2luZCBwcm9wZXJ0eSwgZXZlbgotLy8vIGlmIHRoZSB2YWx1ZSB3YXMgbm90IGRlZmluZWQgYnkg
dGhlIGVudW0gYXQgdGhlIHRpbWUgdGhlIGNvZGUgd2FzIGdlbmVyYXRlZC4KLWludDMyX3QgR1BC
RmllbGRfS2luZF9SYXdWYWx1ZShHUEJGaWVsZCAqbWVzc2FnZSk7Ci0vLy8gU2V0cyB0aGUgcmF3
IHZhbHVlIG9mIGFuIEBjIEdQQkZpZWxkJ3MgQGMga2luZCBwcm9wZXJ0eSwgYWxsb3dpbmcKLS8v
LyBpdCB0byBiZSBzZXQgdG8gYSB2YWx1ZSB0aGF0IHdhcyBub3QgZGVmaW5lZCBieSB0aGUgZW51
bSBhdCB0aGUgdGltZSB0aGUgY29kZQotLy8vIHdhcyBnZW5lcmF0ZWQuCi12b2lkIFNldEdQQkZp
ZWxkX0tpbmRfUmF3VmFsdWUoR1BCRmllbGQgKm1lc3NhZ2UsIGludDMyX3QgdmFsdWUpOwotCi0v
Ly8gRmV0Y2hlcyB0aGUgcmF3IHZhbHVlIG9mIGEgQGMgR1BCRmllbGQncyBAYyBjYXJkaW5hbGl0
eSBwcm9wZXJ0eSwgZXZlbgotLy8vIGlmIHRoZSB2YWx1ZSB3YXMgbm90IGRlZmluZWQgYnkgdGhl
IGVudW0gYXQgdGhlIHRpbWUgdGhlIGNvZGUgd2FzIGdlbmVyYXRlZC4KLWludDMyX3QgR1BCRmll
bGRfQ2FyZGluYWxpdHlfUmF3VmFsdWUoR1BCRmllbGQgKm1lc3NhZ2UpOwotLy8vIFNldHMgdGhl
IHJhdyB2YWx1ZSBvZiBhbiBAYyBHUEJGaWVsZCdzIEBjIGNhcmRpbmFsaXR5IHByb3BlcnR5LCBh
bGxvd2luZwotLy8vIGl0IHRvIGJlIHNldCB0byBhIHZhbHVlIHRoYXQgd2FzIG5vdCBkZWZpbmVk
IGJ5IHRoZSBlbnVtIGF0IHRoZSB0aW1lIHRoZSBjb2RlCi0vLy8gd2FzIGdlbmVyYXRlZC4KLXZv
aWQgU2V0R1BCRmllbGRfQ2FyZGluYWxpdHlfUmF3VmFsdWUoR1BCRmllbGQgKm1lc3NhZ2UsIGlu
dDMyX3QgdmFsdWUpOwotCi0jcHJhZ21hIG1hcmsgLSBHUEJFbnVtCi0KLXR5cGVkZWYgR1BCX0VO
VU0oR1BCRW51bV9GaWVsZE51bWJlcikgewotICBHUEJFbnVtX0ZpZWxkTnVtYmVyX05hbWUgPSAx
LAotICBHUEJFbnVtX0ZpZWxkTnVtYmVyX0VudW12YWx1ZUFycmF5ID0gMiwKLSAgR1BCRW51bV9G
aWVsZE51bWJlcl9PcHRpb25zQXJyYXkgPSAzLAotICBHUEJFbnVtX0ZpZWxkTnVtYmVyX1NvdXJj
ZUNvbnRleHQgPSA0LAotICBHUEJFbnVtX0ZpZWxkTnVtYmVyX1N5bnRheCA9IDUsCi19OwotCi0v
Ly8gRW51bSB0eXBlIGRlZmluaXRpb24uCi1AaW50ZXJmYWNlIEdQQkVudW0gOiBHUEJNZXNzYWdl
Ci0KLS8vLyBFbnVtIHR5cGUgbmFtZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwg
Y29weSwgbnVsbF9yZXNldHRhYmxlKSBOU1N0cmluZyAqbmFtZTsKLQotLy8vIEVudW0gdmFsdWUg
ZGVmaW5pdGlvbnMuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUsIHN0cm9uZywgbnVs
bF9yZXNldHRhYmxlKSBOU011dGFibGVBcnJheTxHUEJFbnVtVmFsdWUqPiAqZW51bXZhbHVlQXJy
YXk7Ci0vLy8gVGhlIG51bWJlciBvZiBpdGVtcyBpbiBAYyBlbnVtdmFsdWVBcnJheSB3aXRob3V0
IGNhdXNpbmcgdGhlIGFycmF5IHRvIGJlIGNyZWF0ZWQuCi1AcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkb25seSkgTlNVSW50ZWdlciBlbnVtdmFsdWVBcnJheV9Db3VudDsKLQotLy8vIFByb3RvY29s
IGJ1ZmZlciBvcHRpb25zLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlLCBzdHJvbmcs
IG51bGxfcmVzZXR0YWJsZSkgTlNNdXRhYmxlQXJyYXk8R1BCT3B0aW9uKj4gKm9wdGlvbnNBcnJh
eTsKLS8vLyBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIEBjIG9wdGlvbnNBcnJheSB3aXRob3V0IGNh
dXNpbmcgdGhlIGFycmF5IHRvIGJlIGNyZWF0ZWQuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFk
b25seSkgTlNVSW50ZWdlciBvcHRpb25zQXJyYXlfQ291bnQ7Ci0KLS8vLyBUaGUgc291cmNlIGNv
bnRleHQuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUsIHN0cm9uZywgbnVsbF9yZXNl
dHRhYmxlKSBHUEJTb3VyY2VDb250ZXh0ICpzb3VyY2VDb250ZXh0OwotLy8vIFRlc3QgdG8gc2Vl
IGlmIEBjIHNvdXJjZUNvbnRleHQgaGFzIGJlZW4gc2V0LgotQHByb3BlcnR5KG5vbmF0b21pYywg
cmVhZHdyaXRlKSBCT09MIGhhc1NvdXJjZUNvbnRleHQ7Ci0KLS8vLyBUaGUgc291cmNlIHN5bnRh
eC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSkgR1BCU3ludGF4IHN5bnRheDsKLQot
QGVuZAotCi0vLy8gRmV0Y2hlcyB0aGUgcmF3IHZhbHVlIG9mIGEgQGMgR1BCRW51bSdzIEBjIHN5
bnRheCBwcm9wZXJ0eSwgZXZlbgotLy8vIGlmIHRoZSB2YWx1ZSB3YXMgbm90IGRlZmluZWQgYnkg
dGhlIGVudW0gYXQgdGhlIHRpbWUgdGhlIGNvZGUgd2FzIGdlbmVyYXRlZC4KLWludDMyX3QgR1BC
RW51bV9TeW50YXhfUmF3VmFsdWUoR1BCRW51bSAqbWVzc2FnZSk7Ci0vLy8gU2V0cyB0aGUgcmF3
IHZhbHVlIG9mIGFuIEBjIEdQQkVudW0ncyBAYyBzeW50YXggcHJvcGVydHksIGFsbG93aW5nCi0v
Ly8gaXQgdG8gYmUgc2V0IHRvIGEgdmFsdWUgdGhhdCB3YXMgbm90IGRlZmluZWQgYnkgdGhlIGVu
dW0gYXQgdGhlIHRpbWUgdGhlIGNvZGUKLS8vLyB3YXMgZ2VuZXJhdGVkLgotdm9pZCBTZXRHUEJF
bnVtX1N5bnRheF9SYXdWYWx1ZShHUEJFbnVtICptZXNzYWdlLCBpbnQzMl90IHZhbHVlKTsKLQot
I3ByYWdtYSBtYXJrIC0gR1BCRW51bVZhbHVlCi0KLXR5cGVkZWYgR1BCX0VOVU0oR1BCRW51bVZh
bHVlX0ZpZWxkTnVtYmVyKSB7Ci0gIEdQQkVudW1WYWx1ZV9GaWVsZE51bWJlcl9OYW1lID0gMSwK
LSAgR1BCRW51bVZhbHVlX0ZpZWxkTnVtYmVyX051bWJlciA9IDIsCi0gIEdQQkVudW1WYWx1ZV9G
aWVsZE51bWJlcl9PcHRpb25zQXJyYXkgPSAzLAotfTsKLQotLy8vIEVudW0gdmFsdWUgZGVmaW5p
dGlvbi4KLUBpbnRlcmZhY2UgR1BCRW51bVZhbHVlIDogR1BCTWVzc2FnZQotCi0vLy8gRW51bSB2
YWx1ZSBuYW1lLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlLCBjb3B5LCBudWxsX3Jl
c2V0dGFibGUpIE5TU3RyaW5nICpuYW1lOwotCi0vLy8gRW51bSB2YWx1ZSBudW1iZXIuCi1AcHJv
cGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUpIGludDMyX3QgbnVtYmVyOwotCi0vLy8gUHJvdG9j
b2wgYnVmZmVyIG9wdGlvbnMuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUsIHN0cm9u
ZywgbnVsbF9yZXNldHRhYmxlKSBOU011dGFibGVBcnJheTxHUEJPcHRpb24qPiAqb3B0aW9uc0Fy
cmF5OwotLy8vIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gQGMgb3B0aW9uc0FycmF5IHdpdGhvdXQg
Y2F1c2luZyB0aGUgYXJyYXkgdG8gYmUgY3JlYXRlZC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJl
YWRvbmx5KSBOU1VJbnRlZ2VyIG9wdGlvbnNBcnJheV9Db3VudDsKLQotQGVuZAotCi0jcHJhZ21h
IG1hcmsgLSBHUEJPcHRpb24KLQotdHlwZWRlZiBHUEJfRU5VTShHUEJPcHRpb25fRmllbGROdW1i
ZXIpIHsKLSAgR1BCT3B0aW9uX0ZpZWxkTnVtYmVyX05hbWUgPSAxLAotICBHUEJPcHRpb25fRmll
bGROdW1iZXJfVmFsdWUgPSAyLAotfTsKLQotLy8vIEEgcHJvdG9jb2wgYnVmZmVyIG9wdGlvbiwg
d2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGEgbWVzc2FnZSwgZmllbGQsCi0vLy8gZW51bWVyYXRp
b24sIGV0Yy4KLUBpbnRlcmZhY2UgR1BCT3B0aW9uIDogR1BCTWVzc2FnZQotCi0vLy8gVGhlIG9w
dGlvbidzIG5hbWUuIEZvciBleGFtcGxlLCBgImphdmFfcGFja2FnZSJgLgotQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZHdyaXRlLCBjb3B5LCBudWxsX3Jlc2V0dGFibGUpIE5TU3RyaW5nICpuYW1l
OwotCi0vLy8gVGhlIG9wdGlvbidzIHZhbHVlLiBGb3IgZXhhbXBsZSwgYCJjb20uZ29vZ2xlLnBy
b3RvYnVmImAuCi1AcHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUsIHN0cm9uZywgbnVsbF9y
ZXNldHRhYmxlKSBHUEJBbnkgKnZhbHVlOwotLy8vIFRlc3QgdG8gc2VlIGlmIEBjIHZhbHVlIGhh
cyBiZWVuIHNldC4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSkgQk9PTCBoYXNWYWx1
ZTsKLQotQGVuZAotCi1OU19BU1NVTUVfTk9OTlVMTF9FTkQKLQotQ0ZfRVhURVJOX0NfRU5ECi0K
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGdsb2JhbF9zY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYv
VHlwZS5wYm9iamMubSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvVHlwZS5wYm9iamMubQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1NGEyMjJiNWZiYTM0MTczMzY2MjI0MzY4
YmQ4MmM5MWQyMWNlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1R5cGUucGJvYmpjLm0KKysrIC9kZXYvbnVs
bApAQCAtMSw2OTMgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIg
Y29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL3R5cGUu
cHJvdG8KLQotI2ltcG9ydCAiR1BCUHJvdG9jb2xCdWZmZXJzX1J1bnRpbWVTdXBwb3J0LmgiCi0j
aW1wb3J0ICJnb29nbGUvcHJvdG9idWYvVHlwZS5wYm9iamMuaCIKLSNpbXBvcnQgImdvb2dsZS9w
cm90b2J1Zi9BbnkucGJvYmpjLmgiCi0jaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvU291cmNlQ29u
dGV4dC5wYm9iamMuaCIKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbXBvcnRzKQotCi0j
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0KLSNwcmFnbWEgbWFyayAtIEdQQlR5
cGVSb290Ci0KLUBpbXBsZW1lbnRhdGlvbiBHUEJUeXBlUm9vdAotCi0rIChHUEJFeHRlbnNpb25S
ZWdpc3RyeSopZXh0ZW5zaW9uUmVnaXN0cnkgewotICAvLyBUaGlzIGlzIGNhbGxlZCBieSAraW5p
dGlhbGl6ZSBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5Ci0gIC8vIGFib3V0IHRocmVhZCBz
YWZldHkgYW5kIGluaXRpYWxpemF0aW9uIG9mIHJlZ2lzdHJ5LgotICBzdGF0aWMgR1BCRXh0ZW5z
aW9uUmVnaXN0cnkqIHJlZ2lzdHJ5ID0gbmlsOwotICBpZiAoIXJlZ2lzdHJ5KSB7Ci0gICAgR1BC
RGVidWdDaGVja1J1bnRpbWVWZXJzaW9uKCk7Ci0gICAgcmVnaXN0cnkgPSBbW0dQQkV4dGVuc2lv
blJlZ2lzdHJ5IGFsbG9jXSBpbml0XTsKLSAgICBbcmVnaXN0cnkgYWRkRXh0ZW5zaW9uczpbR1BC
QW55Um9vdCBleHRlbnNpb25SZWdpc3RyeV1dOwotICAgIFtyZWdpc3RyeSBhZGRFeHRlbnNpb25z
OltHUEJTb3VyY2VDb250ZXh0Um9vdCBleHRlbnNpb25SZWdpc3RyeV1dOwotICB9Ci0gIHJldHVy
biByZWdpc3RyeTsKLX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBHUEJUeXBlUm9vdF9GaWxl
RGVzY3JpcHRvcgotCi1zdGF0aWMgR1BCRmlsZURlc2NyaXB0b3IgKkdQQlR5cGVSb290X0ZpbGVE
ZXNjcmlwdG9yKHZvaWQpIHsKLSAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgK2luaXRpYWxpemUgc28g
dGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeQotICAvLyBhYm91dCB0aHJlYWQgc2FmZXR5IG9mIHRo
ZSBzaW5nbGV0b24uCi0gIHN0YXRpYyBHUEJGaWxlRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IE5V
TEw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIEdQQkRlYnVnQ2hlY2tSdW50aW1lVmVyc2lv
bigpOwotICAgIGRlc2NyaXB0b3IgPSBbW0dQQkZpbGVEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0
aFBhY2thZ2U6QCJnb29nbGUucHJvdG9idWYiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheDpHUEJGaWxlU3ludGF4UHJvdG8zXTsKLSAg
fQotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotI3ByYWdtYSBtYXJrIC0gRW51bSBHUEJTeW50
YXgKLQotR1BCRW51bURlc2NyaXB0b3IgKkdQQlN5bnRheF9FbnVtRGVzY3JpcHRvcih2b2lkKSB7
Ci0gIHN0YXRpYyBHUEJFbnVtRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IE5VTEw7Ci0gIGlmICgh
ZGVzY3JpcHRvcikgewotICAgIHN0YXRpYyBjb25zdCBjaGFyICp2YWx1ZU5hbWVzID0KLSAgICAg
ICAgIlN5bnRheFByb3RvMlwwMDBTeW50YXhQcm90bzNcMDAwIjsKLSAgICBzdGF0aWMgY29uc3Qg
aW50MzJfdCB2YWx1ZXNbXSA9IHsKLSAgICAgICAgR1BCU3ludGF4X1N5bnRheFByb3RvMiwKLSAg
ICAgICAgR1BCU3ludGF4X1N5bnRheFByb3RvMywKLSAgICB9OwotICAgIEdQQkVudW1EZXNjcmlw
dG9yICp3b3JrZXIgPQotICAgICAgICBbR1BCRW51bURlc2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9y
Rm9yTmFtZTpHUEJOU1N0cmluZ2lmeVN5bWJvbChHUEJTeW50YXgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU5hbWVzOnZhbHVlTmFtZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6dmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Oih1aW50MzJfdCkoc2l6ZW9m
KHZhbHVlcykgLyBzaXplb2YoaW50MzJfdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW51bVZlcmlmaWVyOkdQQlN5bnRheF9Jc1ZhbGlkVmFsdWVdOwotICAgIGlmICgh
T1NBdG9taWNDb21wYXJlQW5kU3dhcFB0ckJhcnJpZXIobmlsLCB3b3JrZXIsICh2b2lkICogdm9s
YXRpbGUgKikmZGVzY3JpcHRvcikpIHsKLSAgICAgIFt3b3JrZXIgcmVsZWFzZV07Ci0gICAgfQot
ICB9Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi1CT09MIEdQQlN5bnRheF9Jc1ZhbGlkVmFs
dWUoaW50MzJfdCB2YWx1ZV9fKSB7Ci0gIHN3aXRjaCAodmFsdWVfXykgewotICAgIGNhc2UgR1BC
U3ludGF4X1N5bnRheFByb3RvMjoKLSAgICBjYXNlIEdQQlN5bnRheF9TeW50YXhQcm90bzM6Ci0g
ICAgICByZXR1cm4gWUVTOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gTk87Ci0gIH0KLX0K
LQotI3ByYWdtYSBtYXJrIC0gR1BCVHlwZQotCi1AaW1wbGVtZW50YXRpb24gR1BCVHlwZQotCi1A
ZHluYW1pYyBuYW1lOwotQGR5bmFtaWMgZmllbGRzQXJyYXksIGZpZWxkc0FycmF5X0NvdW50Owot
QGR5bmFtaWMgb25lb2ZzQXJyYXksIG9uZW9mc0FycmF5X0NvdW50OwotQGR5bmFtaWMgb3B0aW9u
c0FycmF5LCBvcHRpb25zQXJyYXlfQ291bnQ7Ci1AZHluYW1pYyBoYXNTb3VyY2VDb250ZXh0LCBz
b3VyY2VDb250ZXh0OwotQGR5bmFtaWMgc3ludGF4OwotCi10eXBlZGVmIHN0cnVjdCBHUEJUeXBl
X19zdG9yYWdlXyB7Ci0gIHVpbnQzMl90IF9oYXNfc3RvcmFnZV9bMV07Ci0gIEdQQlN5bnRheCBz
eW50YXg7Ci0gIE5TU3RyaW5nICpuYW1lOwotICBOU011dGFibGVBcnJheSAqZmllbGRzQXJyYXk7
Ci0gIE5TTXV0YWJsZUFycmF5ICpvbmVvZnNBcnJheTsKLSAgTlNNdXRhYmxlQXJyYXkgKm9wdGlv
bnNBcnJheTsKLSAgR1BCU291cmNlQ29udGV4dCAqc291cmNlQ29udGV4dDsKLX0gR1BCVHlwZV9f
c3RvcmFnZV87Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIHRocmVhZHNhZmUgYmVjYXVzZSBpdCBpcyBp
bml0aWFsbHkgY2FsbGVkCi0vLyBpbiAraW5pdGlhbGl6ZSBmb3IgZWFjaCBzdWJjbGFzcy4KLSsg
KEdQQkRlc2NyaXB0b3IgKilkZXNjcmlwdG9yIHsKLSAgc3RhdGljIEdQQkRlc2NyaXB0b3IgKmRl
c2NyaXB0b3IgPSBuaWw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIHN0YXRpYyBHUEJNZXNz
YWdlRmllbGREZXNjcmlwdGlvbiBmaWVsZHNbXSA9IHsKLSAgICAgIHsKLSAgICAgICAgLm5hbWUg
PSAibmFtZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0g
ICAgICAgIC5udW1iZXIgPSBHUEJUeXBlX0ZpZWxkTnVtYmVyX05hbWUsCi0gICAgICAgIC5oYXNJ
bmRleCA9IDAsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCVHlwZV9f
c3RvcmFnZV8sIG5hbWUpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAotICAg
ICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZVN0cmluZywKLSAgICAgIH0sCi0gICAgICB7Ci0g
ICAgICAgIC5uYW1lID0gImZpZWxkc0FycmF5IiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMu
Y2xhc3NOYW1lID0gR1BCU3RyaW5naWZ5U3ltYm9sKEdQQkZpZWxkKSwKLSAgICAgICAgLm51bWJl
ciA9IEdQQlR5cGVfRmllbGROdW1iZXJfRmllbGRzQXJyYXksCi0gICAgICAgIC5oYXNJbmRleCA9
IEdQQk5vSGFzQml0LAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQlR5
cGVfX3N0b3JhZ2VfLCBmaWVsZHNBcnJheSksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkUmVw
ZWF0ZWQsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlTWVzc2FnZSwKLSAgICAgIH0s
Ci0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gIm9uZW9mc0FycmF5IiwKLSAgICAgICAgLmRhdGFU
eXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gTlVMTCwKLSAgICAgICAgLm51bWJlciA9IEdQQlR5cGVf
RmllbGROdW1iZXJfT25lb2ZzQXJyYXksCi0gICAgICAgIC5oYXNJbmRleCA9IEdQQk5vSGFzQml0
LAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQlR5cGVfX3N0b3JhZ2Vf
LCBvbmVvZnNBcnJheSksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkUmVwZWF0ZWQsCi0gICAg
ICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlU3RyaW5nLAotICAgICAgfSwKLSAgICAgIHsKLSAg
ICAgICAgLm5hbWUgPSAib3B0aW9uc0FycmF5IiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMu
Y2xhc3NOYW1lID0gR1BCU3RyaW5naWZ5U3ltYm9sKEdQQk9wdGlvbiksCi0gICAgICAgIC5udW1i
ZXIgPSBHUEJUeXBlX0ZpZWxkTnVtYmVyX09wdGlvbnNBcnJheSwKLSAgICAgICAgLmhhc0luZGV4
ID0gR1BCTm9IYXNCaXQsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BC
VHlwZV9fc3RvcmFnZV8sIG9wdGlvbnNBcnJheSksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxk
UmVwZWF0ZWQsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlTWVzc2FnZSwKLSAgICAg
IH0sCi0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gInNvdXJjZUNvbnRleHQiLAotICAgICAgICAu
ZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBHUEJTdHJpbmdpZnlTeW1ib2woR1BCU291cmNl
Q29udGV4dCksCi0gICAgICAgIC5udW1iZXIgPSBHUEJUeXBlX0ZpZWxkTnVtYmVyX1NvdXJjZUNv
bnRleHQsCi0gICAgICAgIC5oYXNJbmRleCA9IDEsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMy
X3Qpb2Zmc2V0b2YoR1BCVHlwZV9fc3RvcmFnZV8sIHNvdXJjZUNvbnRleHQpLAotICAgICAgICAu
ZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlw
ZU1lc3NhZ2UsCi0gICAgICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9ICJzeW50YXgiLAot
ICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5lbnVtRGVzY0Z1bmMgPSBHUEJTeW50YXhfRW51bURl
c2NyaXB0b3IsCi0gICAgICAgIC5udW1iZXIgPSBHUEJUeXBlX0ZpZWxkTnVtYmVyX1N5bnRheCwK
LSAgICAgICAgLmhhc0luZGV4ID0gMiwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZz
ZXRvZihHUEJUeXBlX19zdG9yYWdlXywgc3ludGF4KSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmll
bGRPcHRpb25hbCB8IEdQQkZpZWxkSGFzRW51bURlc2NyaXB0b3IsCi0gICAgICAgIC5kYXRhVHlw
ZSA9IEdQQkRhdGFUeXBlRW51bSwKLSAgICAgIH0sCi0gICAgfTsKLSAgICBHUEJEZXNjcmlwdG9y
ICpsb2NhbERlc2NyaXB0b3IgPQotICAgICAgICBbR1BCRGVzY3JpcHRvciBhbGxvY0Rlc2NyaXB0
b3JGb3JDbGFzczpbR1BCVHlwZSBjbGFzc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByb290Q2xhc3M6W0dQQlR5cGVSb290IGNsYXNzXQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTpHUEJUeXBlUm9vdF9GaWxlRGVzY3JpcHRvcigp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzOmZpZWxkcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDb3VudDoodWludDMyX3Qp
KHNpemVvZihmaWVsZHMpIC8gc2l6ZW9mKEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVNpemU6c2l6ZW9mKEdQQlR5
cGVfX3N0b3JhZ2VfKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bGFnczowXTsKLSAgICBOU0Fzc2VydChkZXNjcmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJlY3Vy
c2VkISIpOwotICAgIGRlc2NyaXB0b3IgPSBsb2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJu
IGRlc2NyaXB0b3I7Ci19Ci0KLUBlbmQKLQotaW50MzJfdCBHUEJUeXBlX1N5bnRheF9SYXdWYWx1
ZShHUEJUeXBlICptZXNzYWdlKSB7Ci0gIEdQQkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBbR1BC
VHlwZSBkZXNjcmlwdG9yXTsKLSAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCA9IFtkZXNjcmlw
dG9yIGZpZWxkV2l0aE51bWJlcjpHUEJUeXBlX0ZpZWxkTnVtYmVyX1N5bnRheF07Ci0gIHJldHVy
biBHUEJHZXRNZXNzYWdlSW50MzJGaWVsZChtZXNzYWdlLCBmaWVsZCk7Ci19Ci0KLXZvaWQgU2V0
R1BCVHlwZV9TeW50YXhfUmF3VmFsdWUoR1BCVHlwZSAqbWVzc2FnZSwgaW50MzJfdCB2YWx1ZSkg
ewotICBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gW0dQQlR5cGUgZGVzY3JpcHRvcl07Ci0g
IEdQQkZpZWxkRGVzY3JpcHRvciAqZmllbGQgPSBbZGVzY3JpcHRvciBmaWVsZFdpdGhOdW1iZXI6
R1BCVHlwZV9GaWVsZE51bWJlcl9TeW50YXhdOwotICBHUEJTZXRJbnQzMkl2YXJXaXRoRmllbGRJ
bnRlcm5hbChtZXNzYWdlLCBmaWVsZCwgdmFsdWUsIGRlc2NyaXB0b3IuZmlsZS5zeW50YXgpOwot
fQotCi0jcHJhZ21hIG1hcmsgLSBHUEJGaWVsZAotCi1AaW1wbGVtZW50YXRpb24gR1BCRmllbGQK
LQotQGR5bmFtaWMga2luZDsKLUBkeW5hbWljIGNhcmRpbmFsaXR5OwotQGR5bmFtaWMgbnVtYmVy
OwotQGR5bmFtaWMgbmFtZTsKLUBkeW5hbWljIHR5cGVVUkw7Ci1AZHluYW1pYyBvbmVvZkluZGV4
OwotQGR5bmFtaWMgcGFja2VkOwotQGR5bmFtaWMgb3B0aW9uc0FycmF5LCBvcHRpb25zQXJyYXlf
Q291bnQ7Ci1AZHluYW1pYyBqc29uTmFtZTsKLUBkeW5hbWljIGRlZmF1bHRWYWx1ZTsKLQotdHlw
ZWRlZiBzdHJ1Y3QgR1BCRmllbGRfX3N0b3JhZ2VfIHsKLSAgdWludDMyX3QgX2hhc19zdG9yYWdl
X1sxXTsKLSAgR1BCRmllbGRfS2luZCBraW5kOwotICBHUEJGaWVsZF9DYXJkaW5hbGl0eSBjYXJk
aW5hbGl0eTsKLSAgaW50MzJfdCBudW1iZXI7Ci0gIGludDMyX3Qgb25lb2ZJbmRleDsKLSAgTlNT
dHJpbmcgKm5hbWU7Ci0gIE5TU3RyaW5nICp0eXBlVVJMOwotICBOU011dGFibGVBcnJheSAqb3B0
aW9uc0FycmF5OwotICBOU1N0cmluZyAqanNvbk5hbWU7Ci0gIE5TU3RyaW5nICpkZWZhdWx0VmFs
dWU7Ci19IEdQQkZpZWxkX19zdG9yYWdlXzsKLQotLy8gVGhpcyBtZXRob2QgaXMgdGhyZWFkc2Fm
ZSBiZWNhdXNlIGl0IGlzIGluaXRpYWxseSBjYWxsZWQKLS8vIGluICtpbml0aWFsaXplIGZvciBl
YWNoIHN1YmNsYXNzLgotKyAoR1BCRGVzY3JpcHRvciAqKWRlc2NyaXB0b3IgewotICBzdGF0aWMg
R1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IG5pbDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0g
ICAgc3RhdGljIEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uIGZpZWxkc1tdID0gewotICAgICAg
ewotICAgICAgICAubmFtZSA9ICJraW5kIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuZW51
bURlc2NGdW5jID0gR1BCRmllbGRfS2luZF9FbnVtRGVzY3JpcHRvciwKLSAgICAgICAgLm51bWJl
ciA9IEdQQkZpZWxkX0ZpZWxkTnVtYmVyX0tpbmQsCi0gICAgICAgIC5oYXNJbmRleCA9IDAsCi0g
ICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCRmllbGRfX3N0b3JhZ2VfLCBr
aW5kKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCB8IEdQQkZpZWxkSGFzRW51
bURlc2NyaXB0b3IsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlRW51bSwKLSAgICAg
IH0sCi0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gImNhcmRpbmFsaXR5IiwKLSAgICAgICAgLmRh
dGFUeXBlU3BlY2lmaWMuZW51bURlc2NGdW5jID0gR1BCRmllbGRfQ2FyZGluYWxpdHlfRW51bURl
c2NyaXB0b3IsCi0gICAgICAgIC5udW1iZXIgPSBHUEJGaWVsZF9GaWVsZE51bWJlcl9DYXJkaW5h
bGl0eSwKLSAgICAgICAgLmhhc0luZGV4ID0gMSwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJf
dClvZmZzZXRvZihHUEJGaWVsZF9fc3RvcmFnZV8sIGNhcmRpbmFsaXR5KSwKLSAgICAgICAgLmZs
YWdzID0gR1BCRmllbGRPcHRpb25hbCB8IEdQQkZpZWxkSGFzRW51bURlc2NyaXB0b3IsCi0gICAg
ICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlRW51bSwKLSAgICAgIH0sCi0gICAgICB7Ci0gICAg
ICAgIC5uYW1lID0gIm51bWJlciIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFt
ZSA9IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBHUEJGaWVsZF9GaWVsZE51bWJlcl9OdW1iZXIs
Ci0gICAgICAgIC5oYXNJbmRleCA9IDIsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zm
c2V0b2YoR1BCRmllbGRfX3N0b3JhZ2VfLCBudW1iZXIpLAotICAgICAgICAuZmxhZ3MgPSBHUEJG
aWVsZE9wdGlvbmFsLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZUludDMyLAotICAg
ICAgfSwKLSAgICAgIHsKLSAgICAgICAgLm5hbWUgPSAibmFtZSIsCi0gICAgICAgIC5kYXRhVHlw
ZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBHUEJGaWVsZF9G
aWVsZE51bWJlcl9OYW1lLAotICAgICAgICAuaGFzSW5kZXggPSAzLAotICAgICAgICAub2Zmc2V0
ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkZpZWxkX19zdG9yYWdlXywgbmFtZSksCi0gICAgICAg
IC5mbGFncyA9IEdQQkZpZWxkT3B0aW9uYWwsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFU
eXBlU3RyaW5nLAotICAgICAgfSwKLSAgICAgIHsKLSAgICAgICAgLm5hbWUgPSAidHlwZVVSTCIs
Ci0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAgIC5u
dW1iZXIgPSBHUEJGaWVsZF9GaWVsZE51bWJlcl9UeXBlVVJMLAotICAgICAgICAuaGFzSW5kZXgg
PSA0LAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkZpZWxkX19zdG9y
YWdlXywgdHlwZVVSTCksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkT3B0aW9uYWwgfCBHUEJG
aWVsZFRleHRGb3JtYXROYW1lQ3VzdG9tLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlw
ZVN0cmluZywKLSAgICAgIH0sCi0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gIm9uZW9mSW5kZXgi
LAotICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBOVUxMLAotICAgICAgICAu
bnVtYmVyID0gR1BCRmllbGRfRmllbGROdW1iZXJfT25lb2ZJbmRleCwKLSAgICAgICAgLmhhc0lu
ZGV4ID0gNSwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihHUEJGaWVsZF9f
c3RvcmFnZV8sIG9uZW9mSW5kZXgpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFs
LAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZUludDMyLAotICAgICAgfSwKLSAgICAg
IHsKLSAgICAgICAgLm5hbWUgPSAicGFja2VkIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMu
Y2xhc3NOYW1lID0gTlVMTCwKLSAgICAgICAgLm51bWJlciA9IEdQQkZpZWxkX0ZpZWxkTnVtYmVy
X1BhY2tlZCwKLSAgICAgICAgLmhhc0luZGV4ID0gNiwKLSAgICAgICAgLm9mZnNldCA9IDcsICAv
LyBTdG9yZWQgaW4gX2hhc19zdG9yYWdlXyB0byBzYXZlIHNwYWNlLgotICAgICAgICAuZmxhZ3Mg
PSBHUEJGaWVsZE9wdGlvbmFsLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZUJvb2ws
Ci0gICAgICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9ICJvcHRpb25zQXJyYXkiLAotICAg
ICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBHUEJTdHJpbmdpZnlTeW1ib2woR1BC
T3B0aW9uKSwKLSAgICAgICAgLm51bWJlciA9IEdQQkZpZWxkX0ZpZWxkTnVtYmVyX09wdGlvbnNB
cnJheSwKLSAgICAgICAgLmhhc0luZGV4ID0gR1BCTm9IYXNCaXQsCi0gICAgICAgIC5vZmZzZXQg
PSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCRmllbGRfX3N0b3JhZ2VfLCBvcHRpb25zQXJyYXkpLAot
ICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZFJlcGVhdGVkLAotICAgICAgICAuZGF0YVR5cGUgPSBH
UEJEYXRhVHlwZU1lc3NhZ2UsCi0gICAgICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9ICJq
c29uTmFtZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0g
ICAgICAgIC5udW1iZXIgPSBHUEJGaWVsZF9GaWVsZE51bWJlcl9Kc29uTmFtZSwKLSAgICAgICAg
Lmhhc0luZGV4ID0gOCwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihHUEJG
aWVsZF9fc3RvcmFnZV8sIGpzb25OYW1lKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRp
b25hbCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVTdHJpbmcsCi0gICAgICB9LAot
ICAgICAgewotICAgICAgICAubmFtZSA9ICJkZWZhdWx0VmFsdWUiLAotICAgICAgICAuZGF0YVR5
cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBOVUxMLAotICAgICAgICAubnVtYmVyID0gR1BCRmllbGRf
RmllbGROdW1iZXJfRGVmYXVsdFZhbHVlLAotICAgICAgICAuaGFzSW5kZXggPSA5LAotICAgICAg
ICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkZpZWxkX19zdG9yYWdlXywgZGVmYXVs
dFZhbHVlKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAgICAgLmRh
dGFUeXBlID0gR1BCRGF0YVR5cGVTdHJpbmcsCi0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVz
Y3JpcHRvciAqbG9jYWxEZXNjcmlwdG9yID0KLSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NE
ZXNjcmlwdG9yRm9yQ2xhc3M6W0dQQkZpZWxkIGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJvb3RDbGFzczpbR1BCVHlwZVJvb3QgY2xhc3NdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOkdQQlR5cGVSb290X0ZpbGVEZXNj
cmlwdG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHM6
ZmllbGRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZENvdW50Oih1
aW50MzJfdCkoc2l6ZW9mKGZpZWxkcykgLyBzaXplb2YoR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRp
b24pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlU2l6ZTpzaXpl
b2YoR1BCRmllbGRfX3N0b3JhZ2VfKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbGFnczowXTsKLSNpZiAhR1BCT0JKQ19TS0lQX01FU1NBR0VfVEVYVEZPUk1BVF9F
WFRSQVMKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqZXh0cmFUZXh0Rm9ybWF0SW5mbyA9Ci0gICAg
ICAgICJcMDAxXDAwNlwwMDRcMjQxISFcMDAwIjsKLSAgICBbbG9jYWxEZXNjcmlwdG9yIHNldHVw
RXh0cmFUZXh0SW5mbzpleHRyYVRleHRGb3JtYXRJbmZvXTsKLSNlbmRpZiAgLy8gIUdQQk9CSkNf
U0tJUF9NRVNTQUdFX1RFWFRGT1JNQVRfRVhUUkFTCi0gICAgTlNBc3NlcnQoZGVzY3JpcHRvciA9
PSBuaWwsIEAiU3RhcnR1cCByZWN1cnNlZCEiKTsKLSAgICBkZXNjcmlwdG9yID0gbG9jYWxEZXNj
cmlwdG9yOwotICB9Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi1AZW5kCi0KLWludDMyX3Qg
R1BCRmllbGRfS2luZF9SYXdWYWx1ZShHUEJGaWVsZCAqbWVzc2FnZSkgewotICBHUEJEZXNjcmlw
dG9yICpkZXNjcmlwdG9yID0gW0dQQkZpZWxkIGRlc2NyaXB0b3JdOwotICBHUEJGaWVsZERlc2Ny
aXB0b3IgKmZpZWxkID0gW2Rlc2NyaXB0b3IgZmllbGRXaXRoTnVtYmVyOkdQQkZpZWxkX0ZpZWxk
TnVtYmVyX0tpbmRdOwotICByZXR1cm4gR1BCR2V0TWVzc2FnZUludDMyRmllbGQobWVzc2FnZSwg
ZmllbGQpOwotfQotCi12b2lkIFNldEdQQkZpZWxkX0tpbmRfUmF3VmFsdWUoR1BCRmllbGQgKm1l
c3NhZ2UsIGludDMyX3QgdmFsdWUpIHsKLSAgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IFtH
UEJGaWVsZCBkZXNjcmlwdG9yXTsKLSAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCA9IFtkZXNj
cmlwdG9yIGZpZWxkV2l0aE51bWJlcjpHUEJGaWVsZF9GaWVsZE51bWJlcl9LaW5kXTsKLSAgR1BC
U2V0SW50MzJJdmFyV2l0aEZpZWxkSW50ZXJuYWwobWVzc2FnZSwgZmllbGQsIHZhbHVlLCBkZXNj
cmlwdG9yLmZpbGUuc3ludGF4KTsKLX0KLQotaW50MzJfdCBHUEJGaWVsZF9DYXJkaW5hbGl0eV9S
YXdWYWx1ZShHUEJGaWVsZCAqbWVzc2FnZSkgewotICBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9y
ID0gW0dQQkZpZWxkIGRlc2NyaXB0b3JdOwotICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkID0g
W2Rlc2NyaXB0b3IgZmllbGRXaXRoTnVtYmVyOkdQQkZpZWxkX0ZpZWxkTnVtYmVyX0NhcmRpbmFs
aXR5XTsKLSAgcmV0dXJuIEdQQkdldE1lc3NhZ2VJbnQzMkZpZWxkKG1lc3NhZ2UsIGZpZWxkKTsK
LX0KLQotdm9pZCBTZXRHUEJGaWVsZF9DYXJkaW5hbGl0eV9SYXdWYWx1ZShHUEJGaWVsZCAqbWVz
c2FnZSwgaW50MzJfdCB2YWx1ZSkgewotICBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gW0dQ
QkZpZWxkIGRlc2NyaXB0b3JdOwotICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkID0gW2Rlc2Ny
aXB0b3IgZmllbGRXaXRoTnVtYmVyOkdQQkZpZWxkX0ZpZWxkTnVtYmVyX0NhcmRpbmFsaXR5XTsK
LSAgR1BCU2V0SW50MzJJdmFyV2l0aEZpZWxkSW50ZXJuYWwobWVzc2FnZSwgZmllbGQsIHZhbHVl
LCBkZXNjcmlwdG9yLmZpbGUuc3ludGF4KTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gRW51bSBHUEJG
aWVsZF9LaW5kCi0KLUdQQkVudW1EZXNjcmlwdG9yICpHUEJGaWVsZF9LaW5kX0VudW1EZXNjcmlw
dG9yKHZvaWQpIHsKLSAgc3RhdGljIEdQQkVudW1EZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gTlVM
TDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKnZhbHVlTmFt
ZXMgPQotICAgICAgICAiVHlwZVVua25vd25cMDAwVHlwZURvdWJsZVwwMDBUeXBlRmxvYXRcMDAw
VHlwZUludCIKLSAgICAgICAgIjY0XDAwMFR5cGVVaW50NjRcMDAwVHlwZUludDMyXDAwMFR5cGVG
aXhlZDY0XDAwMFR5cGUiCi0gICAgICAgICJGaXhlZDMyXDAwMFR5cGVCb29sXDAwMFR5cGVTdHJp
bmdcMDAwVHlwZUdyb3VwXDAwMFR5IgotICAgICAgICAicGVNZXNzYWdlXDAwMFR5cGVCeXRlc1ww
MDBUeXBlVWludDMyXDAwMFR5cGVFbnVtXDAwMCIKLSAgICAgICAgIlR5cGVTZml4ZWQzMlwwMDBU
eXBlU2ZpeGVkNjRcMDAwVHlwZVNpbnQzMlwwMDBUeXAiCi0gICAgICAgICJlU2ludDY0XDAwMCI7
Ci0gICAgc3RhdGljIGNvbnN0IGludDMyX3QgdmFsdWVzW10gPSB7Ci0gICAgICAgIEdQQkZpZWxk
X0tpbmRfVHlwZVVua25vd24sCi0gICAgICAgIEdQQkZpZWxkX0tpbmRfVHlwZURvdWJsZSwKLSAg
ICAgICAgR1BCRmllbGRfS2luZF9UeXBlRmxvYXQsCi0gICAgICAgIEdQQkZpZWxkX0tpbmRfVHlw
ZUludDY0LAotICAgICAgICBHUEJGaWVsZF9LaW5kX1R5cGVVaW50NjQsCi0gICAgICAgIEdQQkZp
ZWxkX0tpbmRfVHlwZUludDMyLAotICAgICAgICBHUEJGaWVsZF9LaW5kX1R5cGVGaXhlZDY0LAot
ICAgICAgICBHUEJGaWVsZF9LaW5kX1R5cGVGaXhlZDMyLAotICAgICAgICBHUEJGaWVsZF9LaW5k
X1R5cGVCb29sLAotICAgICAgICBHUEJGaWVsZF9LaW5kX1R5cGVTdHJpbmcsCi0gICAgICAgIEdQ
QkZpZWxkX0tpbmRfVHlwZUdyb3VwLAotICAgICAgICBHUEJGaWVsZF9LaW5kX1R5cGVNZXNzYWdl
LAotICAgICAgICBHUEJGaWVsZF9LaW5kX1R5cGVCeXRlcywKLSAgICAgICAgR1BCRmllbGRfS2lu
ZF9UeXBlVWludDMyLAotICAgICAgICBHUEJGaWVsZF9LaW5kX1R5cGVFbnVtLAotICAgICAgICBH
UEJGaWVsZF9LaW5kX1R5cGVTZml4ZWQzMiwKLSAgICAgICAgR1BCRmllbGRfS2luZF9UeXBlU2Zp
eGVkNjQsCi0gICAgICAgIEdQQkZpZWxkX0tpbmRfVHlwZVNpbnQzMiwKLSAgICAgICAgR1BCRmll
bGRfS2luZF9UeXBlU2ludDY0LAotICAgIH07Ci0gICAgR1BCRW51bURlc2NyaXB0b3IgKndvcmtl
ciA9Ci0gICAgICAgIFtHUEJFbnVtRGVzY3JpcHRvciBhbGxvY0Rlc2NyaXB0b3JGb3JOYW1lOkdQ
Qk5TU3RyaW5naWZ5U3ltYm9sKEdQQkZpZWxkX0tpbmQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZU5hbWVzOnZhbHVlTmFtZXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Oih1aW50MzJfdCkoc2l6ZW9mKHZhbHVl
cykgLyBzaXplb2YoaW50MzJfdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW51bVZlcmlmaWVyOkdQQkZpZWxkX0tpbmRfSXNWYWxpZFZhbHVlXTsKLSAgICBpZiAoIU9T
QXRvbWljQ29tcGFyZUFuZFN3YXBQdHJCYXJyaWVyKG5pbCwgd29ya2VyLCAodm9pZCAqIHZvbGF0
aWxlICopJmRlc2NyaXB0b3IpKSB7Ci0gICAgICBbd29ya2VyIHJlbGVhc2VdOwotICAgIH0KLSAg
fQotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotQk9PTCBHUEJGaWVsZF9LaW5kX0lzVmFsaWRW
YWx1ZShpbnQzMl90IHZhbHVlX18pIHsKLSAgc3dpdGNoICh2YWx1ZV9fKSB7Ci0gICAgY2FzZSBH
UEJGaWVsZF9LaW5kX1R5cGVVbmtub3duOgotICAgIGNhc2UgR1BCRmllbGRfS2luZF9UeXBlRG91
YmxlOgotICAgIGNhc2UgR1BCRmllbGRfS2luZF9UeXBlRmxvYXQ6Ci0gICAgY2FzZSBHUEJGaWVs
ZF9LaW5kX1R5cGVJbnQ2NDoKLSAgICBjYXNlIEdQQkZpZWxkX0tpbmRfVHlwZVVpbnQ2NDoKLSAg
ICBjYXNlIEdQQkZpZWxkX0tpbmRfVHlwZUludDMyOgotICAgIGNhc2UgR1BCRmllbGRfS2luZF9U
eXBlRml4ZWQ2NDoKLSAgICBjYXNlIEdQQkZpZWxkX0tpbmRfVHlwZUZpeGVkMzI6Ci0gICAgY2Fz
ZSBHUEJGaWVsZF9LaW5kX1R5cGVCb29sOgotICAgIGNhc2UgR1BCRmllbGRfS2luZF9UeXBlU3Ry
aW5nOgotICAgIGNhc2UgR1BCRmllbGRfS2luZF9UeXBlR3JvdXA6Ci0gICAgY2FzZSBHUEJGaWVs
ZF9LaW5kX1R5cGVNZXNzYWdlOgotICAgIGNhc2UgR1BCRmllbGRfS2luZF9UeXBlQnl0ZXM6Ci0g
ICAgY2FzZSBHUEJGaWVsZF9LaW5kX1R5cGVVaW50MzI6Ci0gICAgY2FzZSBHUEJGaWVsZF9LaW5k
X1R5cGVFbnVtOgotICAgIGNhc2UgR1BCRmllbGRfS2luZF9UeXBlU2ZpeGVkMzI6Ci0gICAgY2Fz
ZSBHUEJGaWVsZF9LaW5kX1R5cGVTZml4ZWQ2NDoKLSAgICBjYXNlIEdQQkZpZWxkX0tpbmRfVHlw
ZVNpbnQzMjoKLSAgICBjYXNlIEdQQkZpZWxkX0tpbmRfVHlwZVNpbnQ2NDoKLSAgICAgIHJldHVy
biBZRVM7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBOTzsKLSAgfQotfQotCi0jcHJhZ21h
IG1hcmsgLSBFbnVtIEdQQkZpZWxkX0NhcmRpbmFsaXR5Ci0KLUdQQkVudW1EZXNjcmlwdG9yICpH
UEJGaWVsZF9DYXJkaW5hbGl0eV9FbnVtRGVzY3JpcHRvcih2b2lkKSB7Ci0gIHN0YXRpYyBHUEJF
bnVtRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IE5VTEw7Ci0gIGlmICghZGVzY3JpcHRvcikgewot
ICAgIHN0YXRpYyBjb25zdCBjaGFyICp2YWx1ZU5hbWVzID0KLSAgICAgICAgIkNhcmRpbmFsaXR5
VW5rbm93blwwMDBDYXJkaW5hbGl0eU9wdGlvbmFsXDAwMEMiCi0gICAgICAgICJhcmRpbmFsaXR5
UmVxdWlyZWRcMDAwQ2FyZGluYWxpdHlSZXBlYXRlZFwwMDAiOwotICAgIHN0YXRpYyBjb25zdCBp
bnQzMl90IHZhbHVlc1tdID0gewotICAgICAgICBHUEJGaWVsZF9DYXJkaW5hbGl0eV9DYXJkaW5h
bGl0eVVua25vd24sCi0gICAgICAgIEdQQkZpZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5T3B0
aW9uYWwsCi0gICAgICAgIEdQQkZpZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5UmVxdWlyZWQs
Ci0gICAgICAgIEdQQkZpZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5UmVwZWF0ZWQsCi0gICAg
fTsKLSAgICBHUEJFbnVtRGVzY3JpcHRvciAqd29ya2VyID0KLSAgICAgICAgW0dQQkVudW1EZXNj
cmlwdG9yIGFsbG9jRGVzY3JpcHRvckZvck5hbWU6R1BCTlNTdHJpbmdpZnlTeW1ib2woR1BCRmll
bGRfQ2FyZGluYWxpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZU5hbWVzOnZhbHVlTmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdW50Oih1aW50MzJfdCkoc2l6ZW9mKHZhbHVlcykgLyBzaXplb2YoaW50MzJf
dCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bVZlcmlmaWVyOkdQ
QkZpZWxkX0NhcmRpbmFsaXR5X0lzVmFsaWRWYWx1ZV07Ci0gICAgaWYgKCFPU0F0b21pY0NvbXBh
cmVBbmRTd2FwUHRyQmFycmllcihuaWwsIHdvcmtlciwgKHZvaWQgKiB2b2xhdGlsZSAqKSZkZXNj
cmlwdG9yKSkgewotICAgICAgW3dvcmtlciByZWxlYXNlXTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IGRlc2NyaXB0b3I7Ci19Ci0KLUJPT0wgR1BCRmllbGRfQ2FyZGluYWxpdHlfSXNWYWxpZFZhbHVl
KGludDMyX3QgdmFsdWVfXykgewotICBzd2l0Y2ggKHZhbHVlX18pIHsKLSAgICBjYXNlIEdQQkZp
ZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5VW5rbm93bjoKLSAgICBjYXNlIEdQQkZpZWxkX0Nh
cmRpbmFsaXR5X0NhcmRpbmFsaXR5T3B0aW9uYWw6Ci0gICAgY2FzZSBHUEJGaWVsZF9DYXJkaW5h
bGl0eV9DYXJkaW5hbGl0eVJlcXVpcmVkOgotICAgIGNhc2UgR1BCRmllbGRfQ2FyZGluYWxpdHlf
Q2FyZGluYWxpdHlSZXBlYXRlZDoKLSAgICAgIHJldHVybiBZRVM7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgIHJldHVybiBOTzsKLSAgfQotfQotCi0jcHJhZ21hIG1hcmsgLSBHUEJFbnVtCi0KLUBpbXBs
ZW1lbnRhdGlvbiBHUEJFbnVtCi0KLUBkeW5hbWljIG5hbWU7Ci1AZHluYW1pYyBlbnVtdmFsdWVB
cnJheSwgZW51bXZhbHVlQXJyYXlfQ291bnQ7Ci1AZHluYW1pYyBvcHRpb25zQXJyYXksIG9wdGlv
bnNBcnJheV9Db3VudDsKLUBkeW5hbWljIGhhc1NvdXJjZUNvbnRleHQsIHNvdXJjZUNvbnRleHQ7
Ci1AZHluYW1pYyBzeW50YXg7Ci0KLXR5cGVkZWYgc3RydWN0IEdQQkVudW1fX3N0b3JhZ2VfIHsK
LSAgdWludDMyX3QgX2hhc19zdG9yYWdlX1sxXTsKLSAgR1BCU3ludGF4IHN5bnRheDsKLSAgTlNT
dHJpbmcgKm5hbWU7Ci0gIE5TTXV0YWJsZUFycmF5ICplbnVtdmFsdWVBcnJheTsKLSAgTlNNdXRh
YmxlQXJyYXkgKm9wdGlvbnNBcnJheTsKLSAgR1BCU291cmNlQ29udGV4dCAqc291cmNlQ29udGV4
dDsKLX0gR1BCRW51bV9fc3RvcmFnZV87Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIHRocmVhZHNhZmUg
YmVjYXVzZSBpdCBpcyBpbml0aWFsbHkgY2FsbGVkCi0vLyBpbiAraW5pdGlhbGl6ZSBmb3IgZWFj
aCBzdWJjbGFzcy4KLSsgKEdQQkRlc2NyaXB0b3IgKilkZXNjcmlwdG9yIHsKLSAgc3RhdGljIEdQ
QkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBuaWw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAg
IHN0YXRpYyBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiBmaWVsZHNbXSA9IHsKLSAgICAgIHsK
LSAgICAgICAgLm5hbWUgPSAibmFtZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNz
TmFtZSA9IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBHUEJFbnVtX0ZpZWxkTnVtYmVyX05hbWUs
Ci0gICAgICAgIC5oYXNJbmRleCA9IDAsCi0gICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zm
c2V0b2YoR1BCRW51bV9fc3RvcmFnZV8sIG5hbWUpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVs
ZE9wdGlvbmFsLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZVN0cmluZywKLSAgICAg
IH0sCi0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gImVudW12YWx1ZUFycmF5IiwKLSAgICAgICAg
LmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gR1BCU3RyaW5naWZ5U3ltYm9sKEdQQkVudW1W
YWx1ZSksCi0gICAgICAgIC5udW1iZXIgPSBHUEJFbnVtX0ZpZWxkTnVtYmVyX0VudW12YWx1ZUFy
cmF5LAotICAgICAgICAuaGFzSW5kZXggPSBHUEJOb0hhc0JpdCwKLSAgICAgICAgLm9mZnNldCA9
ICh1aW50MzJfdClvZmZzZXRvZihHUEJFbnVtX19zdG9yYWdlXywgZW51bXZhbHVlQXJyYXkpLAot
ICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZFJlcGVhdGVkLAotICAgICAgICAuZGF0YVR5cGUgPSBH
UEJEYXRhVHlwZU1lc3NhZ2UsCi0gICAgICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9ICJv
cHRpb25zQXJyYXkiLAotICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBHUEJT
dHJpbmdpZnlTeW1ib2woR1BCT3B0aW9uKSwKLSAgICAgICAgLm51bWJlciA9IEdQQkVudW1fRmll
bGROdW1iZXJfT3B0aW9uc0FycmF5LAotICAgICAgICAuaGFzSW5kZXggPSBHUEJOb0hhc0JpdCwK
LSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihHUEJFbnVtX19zdG9yYWdlXywg
b3B0aW9uc0FycmF5KSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRSZXBlYXRlZCwKLSAgICAg
ICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVNZXNzYWdlLAotICAgICAgfSwKLSAgICAgIHsKLSAg
ICAgICAgLm5hbWUgPSAic291cmNlQ29udGV4dCIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmlj
LmNsYXNzTmFtZSA9IEdQQlN0cmluZ2lmeVN5bWJvbChHUEJTb3VyY2VDb250ZXh0KSwKLSAgICAg
ICAgLm51bWJlciA9IEdQQkVudW1fRmllbGROdW1iZXJfU291cmNlQ29udGV4dCwKLSAgICAgICAg
Lmhhc0luZGV4ID0gMSwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihHUEJF
bnVtX19zdG9yYWdlXywgc291cmNlQ29udGV4dCksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxk
T3B0aW9uYWwsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlTWVzc2FnZSwKLSAgICAg
IH0sCi0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gInN5bnRheCIsCi0gICAgICAgIC5kYXRhVHlw
ZVNwZWNpZmljLmVudW1EZXNjRnVuYyA9IEdQQlN5bnRheF9FbnVtRGVzY3JpcHRvciwKLSAgICAg
ICAgLm51bWJlciA9IEdQQkVudW1fRmllbGROdW1iZXJfU3ludGF4LAotICAgICAgICAuaGFzSW5k
ZXggPSAyLAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkVudW1fX3N0
b3JhZ2VfLCBzeW50YXgpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsIHwgR1BC
RmllbGRIYXNFbnVtRGVzY3JpcHRvciwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVF
bnVtLAotICAgICAgfSwKLSAgICB9OwotICAgIEdQQkRlc2NyaXB0b3IgKmxvY2FsRGVzY3JpcHRv
ciA9Ci0gICAgICAgIFtHUEJEZXNjcmlwdG9yIGFsbG9jRGVzY3JpcHRvckZvckNsYXNzOltHUEJF
bnVtIGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RDbGFz
czpbR1BCVHlwZVJvb3QgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWxlOkdQQlR5cGVSb290X0ZpbGVEZXNjcmlwdG9yKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHM6ZmllbGRzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZENvdW50Oih1aW50MzJfdCkoc2l6ZW9mKGZpZWxkcykg
LyBzaXplb2YoR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb24pKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlU2l6ZTpzaXplb2YoR1BCRW51bV9fc3RvcmFnZV8pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOjBdOwotICAgIE5T
QXNzZXJ0KGRlc2NyaXB0b3IgPT0gbmlsLCBAIlN0YXJ0dXAgcmVjdXJzZWQhIik7Ci0gICAgZGVz
Y3JpcHRvciA9IGxvY2FsRGVzY3JpcHRvcjsKLSAgfQotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0K
LQotQGVuZAotCi1pbnQzMl90IEdQQkVudW1fU3ludGF4X1Jhd1ZhbHVlKEdQQkVudW0gKm1lc3Nh
Z2UpIHsKLSAgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IFtHUEJFbnVtIGRlc2NyaXB0b3Jd
OwotICBHUEJGaWVsZERlc2NyaXB0b3IgKmZpZWxkID0gW2Rlc2NyaXB0b3IgZmllbGRXaXRoTnVt
YmVyOkdQQkVudW1fRmllbGROdW1iZXJfU3ludGF4XTsKLSAgcmV0dXJuIEdQQkdldE1lc3NhZ2VJ
bnQzMkZpZWxkKG1lc3NhZ2UsIGZpZWxkKTsKLX0KLQotdm9pZCBTZXRHUEJFbnVtX1N5bnRheF9S
YXdWYWx1ZShHUEJFbnVtICptZXNzYWdlLCBpbnQzMl90IHZhbHVlKSB7Ci0gIEdQQkRlc2NyaXB0
b3IgKmRlc2NyaXB0b3IgPSBbR1BCRW51bSBkZXNjcmlwdG9yXTsKLSAgR1BCRmllbGREZXNjcmlw
dG9yICpmaWVsZCA9IFtkZXNjcmlwdG9yIGZpZWxkV2l0aE51bWJlcjpHUEJFbnVtX0ZpZWxkTnVt
YmVyX1N5bnRheF07Ci0gIEdQQlNldEludDMySXZhcldpdGhGaWVsZEludGVybmFsKG1lc3NhZ2Us
IGZpZWxkLCB2YWx1ZSwgZGVzY3JpcHRvci5maWxlLnN5bnRheCk7Ci19Ci0KLSNwcmFnbWEgbWFy
ayAtIEdQQkVudW1WYWx1ZQotCi1AaW1wbGVtZW50YXRpb24gR1BCRW51bVZhbHVlCi0KLUBkeW5h
bWljIG5hbWU7Ci1AZHluYW1pYyBudW1iZXI7Ci1AZHluYW1pYyBvcHRpb25zQXJyYXksIG9wdGlv
bnNBcnJheV9Db3VudDsKLQotdHlwZWRlZiBzdHJ1Y3QgR1BCRW51bVZhbHVlX19zdG9yYWdlXyB7
Ci0gIHVpbnQzMl90IF9oYXNfc3RvcmFnZV9bMV07Ci0gIGludDMyX3QgbnVtYmVyOwotICBOU1N0
cmluZyAqbmFtZTsKLSAgTlNNdXRhYmxlQXJyYXkgKm9wdGlvbnNBcnJheTsKLX0gR1BCRW51bVZh
bHVlX19zdG9yYWdlXzsKLQotLy8gVGhpcyBtZXRob2QgaXMgdGhyZWFkc2FmZSBiZWNhdXNlIGl0
IGlzIGluaXRpYWxseSBjYWxsZWQKLS8vIGluICtpbml0aWFsaXplIGZvciBlYWNoIHN1YmNsYXNz
LgotKyAoR1BCRGVzY3JpcHRvciAqKWRlc2NyaXB0b3IgewotICBzdGF0aWMgR1BCRGVzY3JpcHRv
ciAqZGVzY3JpcHRvciA9IG5pbDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGljIEdQ
Qk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uIGZpZWxkc1tdID0gewotICAgICAgewotICAgICAgICAu
bmFtZSA9ICJuYW1lIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gTlVM
TCwKLSAgICAgICAgLm51bWJlciA9IEdQQkVudW1WYWx1ZV9GaWVsZE51bWJlcl9OYW1lLAotICAg
ICAgICAuaGFzSW5kZXggPSAwLAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9m
KEdQQkVudW1WYWx1ZV9fc3RvcmFnZV8sIG5hbWUpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVs
ZE9wdGlvbmFsLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZVN0cmluZywKLSAgICAg
IH0sCi0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gIm51bWJlciIsCi0gICAgICAgIC5kYXRhVHlw
ZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBHUEJFbnVtVmFs
dWVfRmllbGROdW1iZXJfTnVtYmVyLAotICAgICAgICAuaGFzSW5kZXggPSAxLAotICAgICAgICAu
b2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkVudW1WYWx1ZV9fc3RvcmFnZV8sIG51bWJl
ciksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkT3B0aW9uYWwsCi0gICAgICAgIC5kYXRhVHlw
ZSA9IEdQQkRhdGFUeXBlSW50MzIsCi0gICAgICB9LAotICAgICAgewotICAgICAgICAubmFtZSA9
ICJvcHRpb25zQXJyYXkiLAotICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBH
UEJTdHJpbmdpZnlTeW1ib2woR1BCT3B0aW9uKSwKLSAgICAgICAgLm51bWJlciA9IEdQQkVudW1W
YWx1ZV9GaWVsZE51bWJlcl9PcHRpb25zQXJyYXksCi0gICAgICAgIC5oYXNJbmRleCA9IEdQQk5v
SGFzQml0LAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkVudW1WYWx1
ZV9fc3RvcmFnZV8sIG9wdGlvbnNBcnJheSksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkUmVw
ZWF0ZWQsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlTWVzc2FnZSwKLSAgICAgIH0s
Ci0gICAgfTsKLSAgICBHUEJEZXNjcmlwdG9yICpsb2NhbERlc2NyaXB0b3IgPQotICAgICAgICBb
R1BCRGVzY3JpcHRvciBhbGxvY0Rlc2NyaXB0b3JGb3JDbGFzczpbR1BCRW51bVZhbHVlIGNsYXNz
XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RDbGFzczpbR1BCVHlw
ZVJvb3QgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWxlOkdQQlR5cGVSb290X0ZpbGVEZXNjcmlwdG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaWVsZHM6ZmllbGRzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWVsZENvdW50Oih1aW50MzJfdCkoc2l6ZW9mKGZpZWxkcykgLyBzaXplb2Yo
R1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb24pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdG9yYWdlU2l6ZTpzaXplb2YoR1BCRW51bVZhbHVlX19zdG9yYWdlXykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6MF07Ci0gICAgTlNBc3Nl
cnQoZGVzY3JpcHRvciA9PSBuaWwsIEAiU3RhcnR1cCByZWN1cnNlZCEiKTsKLSAgICBkZXNjcmlw
dG9yID0gbG9jYWxEZXNjcmlwdG9yOwotICB9Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi1A
ZW5kCi0KLSNwcmFnbWEgbWFyayAtIEdQQk9wdGlvbgotCi1AaW1wbGVtZW50YXRpb24gR1BCT3B0
aW9uCi0KLUBkeW5hbWljIG5hbWU7Ci1AZHluYW1pYyBoYXNWYWx1ZSwgdmFsdWU7Ci0KLXR5cGVk
ZWYgc3RydWN0IEdQQk9wdGlvbl9fc3RvcmFnZV8gewotICB1aW50MzJfdCBfaGFzX3N0b3JhZ2Vf
WzFdOwotICBOU1N0cmluZyAqbmFtZTsKLSAgR1BCQW55ICp2YWx1ZTsKLX0gR1BCT3B0aW9uX19z
dG9yYWdlXzsKLQotLy8gVGhpcyBtZXRob2QgaXMgdGhyZWFkc2FmZSBiZWNhdXNlIGl0IGlzIGlu
aXRpYWxseSBjYWxsZWQKLS8vIGluICtpbml0aWFsaXplIGZvciBlYWNoIHN1YmNsYXNzLgotKyAo
R1BCRGVzY3JpcHRvciAqKWRlc2NyaXB0b3IgewotICBzdGF0aWMgR1BCRGVzY3JpcHRvciAqZGVz
Y3JpcHRvciA9IG5pbDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGljIEdQQk1lc3Nh
Z2VGaWVsZERlc2NyaXB0aW9uIGZpZWxkc1tdID0gewotICAgICAgewotICAgICAgICAubmFtZSA9
ICJuYW1lIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gTlVMTCwKLSAg
ICAgICAgLm51bWJlciA9IEdQQk9wdGlvbl9GaWVsZE51bWJlcl9OYW1lLAotICAgICAgICAuaGFz
SW5kZXggPSAwLAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQk9wdGlv
bl9fc3RvcmFnZV8sIG5hbWUpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAot
ICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZVN0cmluZywKLSAgICAgIH0sCi0gICAgICB7
Ci0gICAgICAgIC5uYW1lID0gInZhbHVlIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMuY2xh
c3NOYW1lID0gR1BCU3RyaW5naWZ5U3ltYm9sKEdQQkFueSksCi0gICAgICAgIC5udW1iZXIgPSBH
UEJPcHRpb25fRmllbGROdW1iZXJfVmFsdWUsCi0gICAgICAgIC5oYXNJbmRleCA9IDEsCi0gICAg
ICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCT3B0aW9uX19zdG9yYWdlXywgdmFs
dWUpLAotICAgICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAotICAgICAgICAuZGF0YVR5
cGUgPSBHUEJEYXRhVHlwZU1lc3NhZ2UsCi0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVzY3Jp
cHRvciAqbG9jYWxEZXNjcmlwdG9yID0KLSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NEZXNj
cmlwdG9yRm9yQ2xhc3M6W0dQQk9wdGlvbiBjbGFzc10KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByb290Q2xhc3M6W0dQQlR5cGVSb290IGNsYXNzXQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTpHUEJUeXBlUm9vdF9GaWxlRGVzY3Jp
cHRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzOmZp
ZWxkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDb3VudDoodWlu
dDMyX3QpKHNpemVvZihmaWVsZHMpIC8gc2l6ZW9mKEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9u
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVNpemU6c2l6ZW9m
KEdQQk9wdGlvbl9fc3RvcmFnZV8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsYWdzOjBdOwotICAgIE5TQXNzZXJ0KGRlc2NyaXB0b3IgPT0gbmlsLCBAIlN0YXJ0
dXAgcmVjdXJzZWQhIik7Ci0gICAgZGVzY3JpcHRvciA9IGxvY2FsRGVzY3JpcHRvcjsKLSAgfQot
ICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotQGVuZAotCi0KLSNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwb3AKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2JhbF9zY29wZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvb2JqZWN0aXZlYy9nb29nbGUvcHJvdG9idWYvV3JhcHBlcnMucGJvYmpjLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29i
amVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1dyYXBwZXJzLnBib2JqYy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0NjUxMDUwMDVhNmNkMTM0MWQ3MDcwMjU2ZTA1ZDZlMTNmMjQ0ZTNi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvb2JqZWN0aXZl
Yy9nb29nbGUvcHJvdG9idWYvV3JhcHBlcnMucGJvYmpjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
ODIgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIu
ICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3Rv
Ci0KLSNpbXBvcnQgIkdQQlByb3RvY29sQnVmZmVycy5oIgotCi0jaWYgR09PR0xFX1BST1RPQlVG
X09CSkNfR0VOX1ZFUlNJT04gIT0gMzAwMDEKLSNlcnJvciBUaGlzIGZpbGUgd2FzIGdlbmVyYXRl
ZCBieSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcyBpbmNvbXBhdGlibGUg
d2l0aCB5b3VyIFByb3RvY29sIEJ1ZmZlciBsaWJyYXJ5IHNvdXJjZXMuCi0jZW5kaWYKLQotLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGltcG9ydHMpCi0KLSNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVk
LWRlY2xhcmF0aW9ucyIKLQotQ0ZfRVhURVJOX0NfQkVHSU4KLQotTlNfQVNTVU1FX05PTk5VTExf
QkVHSU4KLQotI3ByYWdtYSBtYXJrIC0gR1BCV3JhcHBlcnNSb290Ci0KLS8vLyBFeHBvc2VzIHRo
ZSBleHRlbnNpb24gcmVnaXN0cnkgZm9yIHRoaXMgZmlsZS4KLS8vLwotLy8vIFRoZSBiYXNlIGNs
YXNzIHByb3ZpZGVzOgotLy8vIEBjb2RlCi0vLy8gICArIChHUEJFeHRlbnNpb25SZWdpc3RyeSAq
KWV4dGVuc2lvblJlZ2lzdHJ5OwotLy8vIEBlbmRjb2RlCi0vLy8gd2hpY2ggaXMgYSBAYyBHUEJF
eHRlbnNpb25SZWdpc3RyeSB0aGF0IGluY2x1ZGVzIGFsbCB0aGUgZXh0ZW5zaW9ucyBkZWZpbmVk
IGJ5Ci0vLy8gdGhpcyBmaWxlIGFuZCBhbGwgZmlsZXMgdGhhdCBpdCBkZXBlbmRzIG9uLgotQGlu
dGVyZmFjZSBHUEJXcmFwcGVyc1Jvb3QgOiBHUEJSb290T2JqZWN0Ci1AZW5kCi0KLSNwcmFnbWEg
bWFyayAtIEdQQkRvdWJsZVZhbHVlCi0KLXR5cGVkZWYgR1BCX0VOVU0oR1BCRG91YmxlVmFsdWVf
RmllbGROdW1iZXIpIHsKLSAgR1BCRG91YmxlVmFsdWVfRmllbGROdW1iZXJfVmFsdWUgPSAxLAot
fTsKLQotLy8vIFdyYXBwZXIgbWVzc2FnZSBmb3IgYGRvdWJsZWAuCi0vLy8KLS8vLyBUaGUgSlNP
TiByZXByZXNlbnRhdGlvbiBmb3IgYERvdWJsZVZhbHVlYCBpcyBKU09OIG51bWJlci4KLUBpbnRl
cmZhY2UgR1BCRG91YmxlVmFsdWUgOiBHUEJNZXNzYWdlCi0KLS8vLyBUaGUgZG91YmxlIHZhbHVl
LgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlKSBkb3VibGUgdmFsdWU7Ci0KLUBlbmQK
LQotI3ByYWdtYSBtYXJrIC0gR1BCRmxvYXRWYWx1ZQotCi10eXBlZGVmIEdQQl9FTlVNKEdQQkZs
b2F0VmFsdWVfRmllbGROdW1iZXIpIHsKLSAgR1BCRmxvYXRWYWx1ZV9GaWVsZE51bWJlcl9WYWx1
ZSA9IDEsCi19OwotCi0vLy8gV3JhcHBlciBtZXNzYWdlIGZvciBgZmxvYXRgLgotLy8vCi0vLy8g
VGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBGbG9hdFZhbHVlYCBpcyBKU09OIG51bWJlci4K
LUBpbnRlcmZhY2UgR1BCRmxvYXRWYWx1ZSA6IEdQQk1lc3NhZ2UKLQotLy8vIFRoZSBmbG9hdCB2
YWx1ZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSkgZmxvYXQgdmFsdWU7Ci0KLUBl
bmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCSW50NjRWYWx1ZQotCi10eXBlZGVmIEdQQl9FTlVNKEdQ
QkludDY0VmFsdWVfRmllbGROdW1iZXIpIHsKLSAgR1BCSW50NjRWYWx1ZV9GaWVsZE51bWJlcl9W
YWx1ZSA9IDEsCi19OwotCi0vLy8gV3JhcHBlciBtZXNzYWdlIGZvciBgaW50NjRgLgotLy8vCi0v
Ly8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBJbnQ2NFZhbHVlYCBpcyBKU09OIHN0cmlu
Zy4KLUBpbnRlcmZhY2UgR1BCSW50NjRWYWx1ZSA6IEdQQk1lc3NhZ2UKLQotLy8vIFRoZSBpbnQ2
NCB2YWx1ZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSkgaW50NjRfdCB2YWx1ZTsK
LQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBHUEJVSW50NjRWYWx1ZQotCi10eXBlZGVmIEdQQl9F
TlVNKEdQQlVJbnQ2NFZhbHVlX0ZpZWxkTnVtYmVyKSB7Ci0gIEdQQlVJbnQ2NFZhbHVlX0ZpZWxk
TnVtYmVyX1ZhbHVlID0gMSwKLX07Ci0KLS8vLyBXcmFwcGVyIG1lc3NhZ2UgZm9yIGB1aW50NjRg
LgotLy8vCi0vLy8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBVSW50NjRWYWx1ZWAgaXMg
SlNPTiBzdHJpbmcuCi1AaW50ZXJmYWNlIEdQQlVJbnQ2NFZhbHVlIDogR1BCTWVzc2FnZQotCi0v
Ly8gVGhlIHVpbnQ2NCB2YWx1ZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSkgdWlu
dDY0X3QgdmFsdWU7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCSW50MzJWYWx1ZQotCi10
eXBlZGVmIEdQQl9FTlVNKEdQQkludDMyVmFsdWVfRmllbGROdW1iZXIpIHsKLSAgR1BCSW50MzJW
YWx1ZV9GaWVsZE51bWJlcl9WYWx1ZSA9IDEsCi19OwotCi0vLy8gV3JhcHBlciBtZXNzYWdlIGZv
ciBgaW50MzJgLgotLy8vCi0vLy8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBJbnQzMlZh
bHVlYCBpcyBKU09OIG51bWJlci4KLUBpbnRlcmZhY2UgR1BCSW50MzJWYWx1ZSA6IEdQQk1lc3Nh
Z2UKLQotLy8vIFRoZSBpbnQzMiB2YWx1ZS4KLUBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0
ZSkgaW50MzJfdCB2YWx1ZTsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBHUEJVSW50MzJWYWx1
ZQotCi10eXBlZGVmIEdQQl9FTlVNKEdQQlVJbnQzMlZhbHVlX0ZpZWxkTnVtYmVyKSB7Ci0gIEdQ
QlVJbnQzMlZhbHVlX0ZpZWxkTnVtYmVyX1ZhbHVlID0gMSwKLX07Ci0KLS8vLyBXcmFwcGVyIG1l
c3NhZ2UgZm9yIGB1aW50MzJgLgotLy8vCi0vLy8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9y
IGBVSW50MzJWYWx1ZWAgaXMgSlNPTiBudW1iZXIuCi1AaW50ZXJmYWNlIEdQQlVJbnQzMlZhbHVl
IDogR1BCTWVzc2FnZQotCi0vLy8gVGhlIHVpbnQzMiB2YWx1ZS4KLUBwcm9wZXJ0eShub25hdG9t
aWMsIHJlYWR3cml0ZSkgdWludDMyX3QgdmFsdWU7Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0g
R1BCQm9vbFZhbHVlCi0KLXR5cGVkZWYgR1BCX0VOVU0oR1BCQm9vbFZhbHVlX0ZpZWxkTnVtYmVy
KSB7Ci0gIEdQQkJvb2xWYWx1ZV9GaWVsZE51bWJlcl9WYWx1ZSA9IDEsCi19OwotCi0vLy8gV3Jh
cHBlciBtZXNzYWdlIGZvciBgYm9vbGAuCi0vLy8KLS8vLyBUaGUgSlNPTiByZXByZXNlbnRhdGlv
biBmb3IgYEJvb2xWYWx1ZWAgaXMgSlNPTiBgdHJ1ZWAgYW5kIGBmYWxzZWAuCi1AaW50ZXJmYWNl
IEdQQkJvb2xWYWx1ZSA6IEdQQk1lc3NhZ2UKLQotLy8vIFRoZSBib29sIHZhbHVlLgotQHByb3Bl
cnR5KG5vbmF0b21pYywgcmVhZHdyaXRlKSBCT09MIHZhbHVlOwotCi1AZW5kCi0KLSNwcmFnbWEg
bWFyayAtIEdQQlN0cmluZ1ZhbHVlCi0KLXR5cGVkZWYgR1BCX0VOVU0oR1BCU3RyaW5nVmFsdWVf
RmllbGROdW1iZXIpIHsKLSAgR1BCU3RyaW5nVmFsdWVfRmllbGROdW1iZXJfVmFsdWUgPSAxLAot
fTsKLQotLy8vIFdyYXBwZXIgbWVzc2FnZSBmb3IgYHN0cmluZ2AuCi0vLy8KLS8vLyBUaGUgSlNP
TiByZXByZXNlbnRhdGlvbiBmb3IgYFN0cmluZ1ZhbHVlYCBpcyBKU09OIHN0cmluZy4KLUBpbnRl
cmZhY2UgR1BCU3RyaW5nVmFsdWUgOiBHUEJNZXNzYWdlCi0KLS8vLyBUaGUgc3RyaW5nIHZhbHVl
LgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdyaXRlLCBjb3B5LCBudWxsX3Jlc2V0dGFibGUp
IE5TU3RyaW5nICp2YWx1ZTsKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBHUEJCeXRlc1ZhbHVl
Ci0KLXR5cGVkZWYgR1BCX0VOVU0oR1BCQnl0ZXNWYWx1ZV9GaWVsZE51bWJlcikgewotICBHUEJC
eXRlc1ZhbHVlX0ZpZWxkTnVtYmVyX1ZhbHVlID0gMSwKLX07Ci0KLS8vLyBXcmFwcGVyIG1lc3Nh
Z2UgZm9yIGBieXRlc2AuCi0vLy8KLS8vLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgYEJ5
dGVzVmFsdWVgIGlzIEpTT04gc3RyaW5nLgotQGludGVyZmFjZSBHUEJCeXRlc1ZhbHVlIDogR1BC
TWVzc2FnZQotCi0vLy8gVGhlIGJ5dGVzIHZhbHVlLgotQHByb3BlcnR5KG5vbmF0b21pYywgcmVh
ZHdyaXRlLCBjb3B5LCBudWxsX3Jlc2V0dGFibGUpIE5TRGF0YSAqdmFsdWU7Ci0KLUBlbmQKLQot
TlNfQVNTVU1FX05PTk5VTExfRU5ECi0KLUNGX0VYVEVSTl9DX0VORAotCi0jcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcG9wCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2Nv
cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL29iamVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1dyYXBwZXJzLnBib2Jq
Yy5tIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9vYmplY3RpdmVjL2dvb2dsZS9wcm90b2J1Zi9XcmFwcGVycy5wYm9iamMubQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNjNmMyZTQwOTIwOGNkMzM1MTAyNjBhNWQ4NTM5YTg2
NDk1ZWRhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL29i
amVjdGl2ZWMvZ29vZ2xlL3Byb3RvYnVmL1dyYXBwZXJzLnBib2JqYy5tCisrKyAvZGV2L251bGwK
QEAgLTEsNDIwICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNv
bXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi93cmFwcGVy
cy5wcm90bwotCi0jaW1wb3J0ICJHUEJQcm90b2NvbEJ1ZmZlcnNfUnVudGltZVN1cHBvcnQuaCIK
LSNpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9XcmFwcGVycy5wYm9iamMuaCIKLS8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChpbXBvcnRzKQotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVz
aAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJh
dGlvbnMiCi0KLSNwcmFnbWEgbWFyayAtIEdQQldyYXBwZXJzUm9vdAotCi1AaW1wbGVtZW50YXRp
b24gR1BCV3JhcHBlcnNSb290Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCV3JhcHBlcnNS
b290X0ZpbGVEZXNjcmlwdG9yCi0KLXN0YXRpYyBHUEJGaWxlRGVzY3JpcHRvciAqR1BCV3JhcHBl
cnNSb290X0ZpbGVEZXNjcmlwdG9yKHZvaWQpIHsKLSAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgK2lu
aXRpYWxpemUgc28gdGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeQotICAvLyBhYm91dCB0aHJlYWQg
c2FmZXR5IG9mIHRoZSBzaW5nbGV0b24uCi0gIHN0YXRpYyBHUEJGaWxlRGVzY3JpcHRvciAqZGVz
Y3JpcHRvciA9IE5VTEw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIEdQQkRlYnVnQ2hlY2tS
dW50aW1lVmVyc2lvbigpOwotICAgIGRlc2NyaXB0b3IgPSBbW0dQQkZpbGVEZXNjcmlwdG9yIGFs
bG9jXSBpbml0V2l0aFBhY2thZ2U6QCJnb29nbGUucHJvdG9idWYiCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheDpHUEJGaWxlU3ludGF4
UHJvdG8zXTsKLSAgfQotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotI3ByYWdtYSBtYXJrIC0g
R1BCRG91YmxlVmFsdWUKLQotQGltcGxlbWVudGF0aW9uIEdQQkRvdWJsZVZhbHVlCi0KLUBkeW5h
bWljIHZhbHVlOwotCi10eXBlZGVmIHN0cnVjdCBHUEJEb3VibGVWYWx1ZV9fc3RvcmFnZV8gewot
ICB1aW50MzJfdCBfaGFzX3N0b3JhZ2VfWzFdOwotICBkb3VibGUgdmFsdWU7Ci19IEdQQkRvdWJs
ZVZhbHVlX19zdG9yYWdlXzsKLQotLy8gVGhpcyBtZXRob2QgaXMgdGhyZWFkc2FmZSBiZWNhdXNl
IGl0IGlzIGluaXRpYWxseSBjYWxsZWQKLS8vIGluICtpbml0aWFsaXplIGZvciBlYWNoIHN1YmNs
YXNzLgotKyAoR1BCRGVzY3JpcHRvciAqKWRlc2NyaXB0b3IgewotICBzdGF0aWMgR1BCRGVzY3Jp
cHRvciAqZGVzY3JpcHRvciA9IG5pbDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGlj
IEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uIGZpZWxkc1tdID0gewotICAgICAgewotICAgICAg
ICAubmFtZSA9ICJ2YWx1ZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9
IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBHUEJEb3VibGVWYWx1ZV9GaWVsZE51bWJlcl9WYWx1
ZSwKLSAgICAgICAgLmhhc0luZGV4ID0gMCwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClv
ZmZzZXRvZihHUEJEb3VibGVWYWx1ZV9fc3RvcmFnZV8sIHZhbHVlKSwKLSAgICAgICAgLmZsYWdz
ID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVEb3Vi
bGUsCi0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9jYWxEZXNjcmlwdG9y
ID0KLSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6W0dQQkRv
dWJsZVZhbHVlIGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJv
b3RDbGFzczpbR1BCV3JhcHBlcnNSb290IGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmlsZTpHUEJXcmFwcGVyc1Jvb3RfRmlsZURlc2NyaXB0b3IoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczpmaWVsZHMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6KHVpbnQzMl90KShz
aXplb2YoZmllbGRzKSAvIHNpemVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbikpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZihHUEJEb3Vi
bGVWYWx1ZV9fc3RvcmFnZV8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsYWdzOjBdOwotICAgIE5TQXNzZXJ0KGRlc2NyaXB0b3IgPT0gbmlsLCBAIlN0YXJ0dXAg
cmVjdXJzZWQhIik7Ci0gICAgZGVzY3JpcHRvciA9IGxvY2FsRGVzY3JpcHRvcjsKLSAgfQotICBy
ZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBHUEJGbG9hdFZh
bHVlCi0KLUBpbXBsZW1lbnRhdGlvbiBHUEJGbG9hdFZhbHVlCi0KLUBkeW5hbWljIHZhbHVlOwot
Ci10eXBlZGVmIHN0cnVjdCBHUEJGbG9hdFZhbHVlX19zdG9yYWdlXyB7Ci0gIHVpbnQzMl90IF9o
YXNfc3RvcmFnZV9bMV07Ci0gIGZsb2F0IHZhbHVlOwotfSBHUEJGbG9hdFZhbHVlX19zdG9yYWdl
XzsKLQotLy8gVGhpcyBtZXRob2QgaXMgdGhyZWFkc2FmZSBiZWNhdXNlIGl0IGlzIGluaXRpYWxs
eSBjYWxsZWQKLS8vIGluICtpbml0aWFsaXplIGZvciBlYWNoIHN1YmNsYXNzLgotKyAoR1BCRGVz
Y3JpcHRvciAqKWRlc2NyaXB0b3IgewotICBzdGF0aWMgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRv
ciA9IG5pbDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGljIEdQQk1lc3NhZ2VGaWVs
ZERlc2NyaXB0aW9uIGZpZWxkc1tdID0gewotICAgICAgewotICAgICAgICAubmFtZSA9ICJ2YWx1
ZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAg
IC5udW1iZXIgPSBHUEJGbG9hdFZhbHVlX0ZpZWxkTnVtYmVyX1ZhbHVlLAotICAgICAgICAuaGFz
SW5kZXggPSAwLAotICAgICAgICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkZsb2F0
VmFsdWVfX3N0b3JhZ2VfLCB2YWx1ZSksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkT3B0aW9u
YWwsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlRmxvYXQsCi0gICAgICB9LAotICAg
IH07Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9jYWxEZXNjcmlwdG9yID0KLSAgICAgICAgW0dQQkRl
c2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6W0dQQkZsb2F0VmFsdWUgY2xhc3NdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdENsYXNzOltHUEJXcmFwcGVy
c1Jvb3QgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWxlOkdQQldyYXBwZXJzUm9vdF9GaWxlRGVzY3JpcHRvcigpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmllbGRzOmZpZWxkcwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmllbGRDb3VudDoodWludDMyX3QpKHNpemVvZihmaWVsZHMpIC8gc2l6
ZW9mKEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZVNpemU6c2l6ZW9mKEdQQkZsb2F0VmFsdWVfX3N0b3JhZ2VfKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczowXTsKLSAgICBO
U0Fzc2VydChkZXNjcmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJlY3Vyc2VkISIpOwotICAgIGRl
c2NyaXB0b3IgPSBsb2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJuIGRlc2NyaXB0b3I7Ci19
Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCSW50NjRWYWx1ZQotCi1AaW1wbGVtZW50YXRp
b24gR1BCSW50NjRWYWx1ZQotCi1AZHluYW1pYyB2YWx1ZTsKLQotdHlwZWRlZiBzdHJ1Y3QgR1BC
SW50NjRWYWx1ZV9fc3RvcmFnZV8gewotICB1aW50MzJfdCBfaGFzX3N0b3JhZ2VfWzFdOwotICBp
bnQ2NF90IHZhbHVlOwotfSBHUEJJbnQ2NFZhbHVlX19zdG9yYWdlXzsKLQotLy8gVGhpcyBtZXRo
b2QgaXMgdGhyZWFkc2FmZSBiZWNhdXNlIGl0IGlzIGluaXRpYWxseSBjYWxsZWQKLS8vIGluICtp
bml0aWFsaXplIGZvciBlYWNoIHN1YmNsYXNzLgotKyAoR1BCRGVzY3JpcHRvciAqKWRlc2NyaXB0
b3IgewotICBzdGF0aWMgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IG5pbDsKLSAgaWYgKCFk
ZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGljIEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uIGZpZWxk
c1tdID0gewotICAgICAgewotICAgICAgICAubmFtZSA9ICJ2YWx1ZSIsCi0gICAgICAgIC5kYXRh
VHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAgIC5udW1iZXIgPSBHUEJJbnQ2
NFZhbHVlX0ZpZWxkTnVtYmVyX1ZhbHVlLAotICAgICAgICAuaGFzSW5kZXggPSAwLAotICAgICAg
ICAub2Zmc2V0ID0gKHVpbnQzMl90KW9mZnNldG9mKEdQQkludDY0VmFsdWVfX3N0b3JhZ2VfLCB2
YWx1ZSksCi0gICAgICAgIC5mbGFncyA9IEdQQkZpZWxkT3B0aW9uYWwsCi0gICAgICAgIC5kYXRh
VHlwZSA9IEdQQkRhdGFUeXBlSW50NjQsCi0gICAgICB9LAotICAgIH07Ci0gICAgR1BCRGVzY3Jp
cHRvciAqbG9jYWxEZXNjcmlwdG9yID0KLSAgICAgICAgW0dQQkRlc2NyaXB0b3IgYWxsb2NEZXNj
cmlwdG9yRm9yQ2xhc3M6W0dQQkludDY0VmFsdWUgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcm9vdENsYXNzOltHUEJXcmFwcGVyc1Jvb3QgY2xhc3NdCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOkdQQldyYXBwZXJzUm9v
dF9GaWxlRGVzY3JpcHRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmllbGRzOmZpZWxkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmll
bGRDb3VudDoodWludDMyX3QpKHNpemVvZihmaWVsZHMpIC8gc2l6ZW9mKEdQQk1lc3NhZ2VGaWVs
ZERlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZVNpemU6c2l6ZW9mKEdQQkludDY0VmFsdWVfX3N0b3JhZ2VfKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbGFnczowXTsKLSAgICBOU0Fzc2VydChkZXNjcmlwdG9y
ID09IG5pbCwgQCJTdGFydHVwIHJlY3Vyc2VkISIpOwotICAgIGRlc2NyaXB0b3IgPSBsb2NhbERl
c2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJuIGRlc2NyaXB0b3I7Ci19Ci0KLUBlbmQKLQotI3ByYWdt
YSBtYXJrIC0gR1BCVUludDY0VmFsdWUKLQotQGltcGxlbWVudGF0aW9uIEdQQlVJbnQ2NFZhbHVl
Ci0KLUBkeW5hbWljIHZhbHVlOwotCi10eXBlZGVmIHN0cnVjdCBHUEJVSW50NjRWYWx1ZV9fc3Rv
cmFnZV8gewotICB1aW50MzJfdCBfaGFzX3N0b3JhZ2VfWzFdOwotICB1aW50NjRfdCB2YWx1ZTsK
LX0gR1BCVUludDY0VmFsdWVfX3N0b3JhZ2VfOwotCi0vLyBUaGlzIG1ldGhvZCBpcyB0aHJlYWRz
YWZlIGJlY2F1c2UgaXQgaXMgaW5pdGlhbGx5IGNhbGxlZAotLy8gaW4gK2luaXRpYWxpemUgZm9y
IGVhY2ggc3ViY2xhc3MuCi0rIChHUEJEZXNjcmlwdG9yICopZGVzY3JpcHRvciB7Ci0gIHN0YXRp
YyBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gbmlsOwotICBpZiAoIWRlc2NyaXB0b3IpIHsK
LSAgICBzdGF0aWMgR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb24gZmllbGRzW10gPSB7Ci0gICAg
ICB7Ci0gICAgICAgIC5uYW1lID0gInZhbHVlIiwKLSAgICAgICAgLmRhdGFUeXBlU3BlY2lmaWMu
Y2xhc3NOYW1lID0gTlVMTCwKLSAgICAgICAgLm51bWJlciA9IEdQQlVJbnQ2NFZhbHVlX0ZpZWxk
TnVtYmVyX1ZhbHVlLAotICAgICAgICAuaGFzSW5kZXggPSAwLAotICAgICAgICAub2Zmc2V0ID0g
KHVpbnQzMl90KW9mZnNldG9mKEdQQlVJbnQ2NFZhbHVlX19zdG9yYWdlXywgdmFsdWUpLAotICAg
ICAgICAuZmxhZ3MgPSBHUEJGaWVsZE9wdGlvbmFsLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJE
YXRhVHlwZVVJbnQ2NCwKLSAgICAgIH0sCi0gICAgfTsKLSAgICBHUEJEZXNjcmlwdG9yICpsb2Nh
bERlc2NyaXB0b3IgPQotICAgICAgICBbR1BCRGVzY3JpcHRvciBhbGxvY0Rlc2NyaXB0b3JGb3JD
bGFzczpbR1BCVUludDY0VmFsdWUgY2xhc3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcm9vdENsYXNzOltHUEJXcmFwcGVyc1Jvb3QgY2xhc3NdCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOkdQQldyYXBwZXJzUm9vdF9GaWxlRGVz
Y3JpcHRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRz
OmZpZWxkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDb3VudDoo
dWludDMyX3QpKHNpemVvZihmaWVsZHMpIC8gc2l6ZW9mKEdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0
aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVNpemU6c2l6
ZW9mKEdQQlVJbnQ2NFZhbHVlX19zdG9yYWdlXykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxhZ3M6MF07Ci0gICAgTlNBc3NlcnQoZGVzY3JpcHRvciA9PSBuaWws
IEAiU3RhcnR1cCByZWN1cnNlZCEiKTsKLSAgICBkZXNjcmlwdG9yID0gbG9jYWxEZXNjcmlwdG9y
OwotICB9Ci0gIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAt
IEdQQkludDMyVmFsdWUKLQotQGltcGxlbWVudGF0aW9uIEdQQkludDMyVmFsdWUKLQotQGR5bmFt
aWMgdmFsdWU7Ci0KLXR5cGVkZWYgc3RydWN0IEdQQkludDMyVmFsdWVfX3N0b3JhZ2VfIHsKLSAg
dWludDMyX3QgX2hhc19zdG9yYWdlX1sxXTsKLSAgaW50MzJfdCB2YWx1ZTsKLX0gR1BCSW50MzJW
YWx1ZV9fc3RvcmFnZV87Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIHRocmVhZHNhZmUgYmVjYXVzZSBp
dCBpcyBpbml0aWFsbHkgY2FsbGVkCi0vLyBpbiAraW5pdGlhbGl6ZSBmb3IgZWFjaCBzdWJjbGFz
cy4KLSsgKEdQQkRlc2NyaXB0b3IgKilkZXNjcmlwdG9yIHsKLSAgc3RhdGljIEdQQkRlc2NyaXB0
b3IgKmRlc2NyaXB0b3IgPSBuaWw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAgIHN0YXRpYyBH
UEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiBmaWVsZHNbXSA9IHsKLSAgICAgIHsKLSAgICAgICAg
Lm5hbWUgPSAidmFsdWUiLAotICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFzc05hbWUgPSBO
VUxMLAotICAgICAgICAubnVtYmVyID0gR1BCSW50MzJWYWx1ZV9GaWVsZE51bWJlcl9WYWx1ZSwK
LSAgICAgICAgLmhhc0luZGV4ID0gMCwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZz
ZXRvZihHUEJJbnQzMlZhbHVlX19zdG9yYWdlXywgdmFsdWUpLAotICAgICAgICAuZmxhZ3MgPSBH
UEJGaWVsZE9wdGlvbmFsLAotICAgICAgICAuZGF0YVR5cGUgPSBHUEJEYXRhVHlwZUludDMyLAot
ICAgICAgfSwKLSAgICB9OwotICAgIEdQQkRlc2NyaXB0b3IgKmxvY2FsRGVzY3JpcHRvciA9Ci0g
ICAgICAgIFtHUEJEZXNjcmlwdG9yIGFsbG9jRGVzY3JpcHRvckZvckNsYXNzOltHUEJJbnQzMlZh
bHVlIGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RDbGFz
czpbR1BCV3JhcHBlcnNSb290IGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmlsZTpHUEJXcmFwcGVyc1Jvb3RfRmlsZURlc2NyaXB0b3IoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczpmaWVsZHMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6KHVpbnQzMl90KShzaXplb2Yo
ZmllbGRzKSAvIHNpemVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbikpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZihHUEJJbnQzMlZhbHVl
X19zdG9yYWdlXykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxh
Z3M6MF07Ci0gICAgTlNBc3NlcnQoZGVzY3JpcHRvciA9PSBuaWwsIEAiU3RhcnR1cCByZWN1cnNl
ZCEiKTsKLSAgICBkZXNjcmlwdG9yID0gbG9jYWxEZXNjcmlwdG9yOwotICB9Ci0gIHJldHVybiBk
ZXNjcmlwdG9yOwotfQotCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtIEdQQlVJbnQzMlZhbHVlCi0K
LUBpbXBsZW1lbnRhdGlvbiBHUEJVSW50MzJWYWx1ZQotCi1AZHluYW1pYyB2YWx1ZTsKLQotdHlw
ZWRlZiBzdHJ1Y3QgR1BCVUludDMyVmFsdWVfX3N0b3JhZ2VfIHsKLSAgdWludDMyX3QgX2hhc19z
dG9yYWdlX1sxXTsKLSAgdWludDMyX3QgdmFsdWU7Ci19IEdQQlVJbnQzMlZhbHVlX19zdG9yYWdl
XzsKLQotLy8gVGhpcyBtZXRob2QgaXMgdGhyZWFkc2FmZSBiZWNhdXNlIGl0IGlzIGluaXRpYWxs
eSBjYWxsZWQKLS8vIGluICtpbml0aWFsaXplIGZvciBlYWNoIHN1YmNsYXNzLgotKyAoR1BCRGVz
Y3JpcHRvciAqKWRlc2NyaXB0b3IgewotICBzdGF0aWMgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRv
ciA9IG5pbDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGljIEdQQk1lc3NhZ2VGaWVs
ZERlc2NyaXB0aW9uIGZpZWxkc1tdID0gewotICAgICAgewotICAgICAgICAubmFtZSA9ICJ2YWx1
ZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAg
IC5udW1iZXIgPSBHUEJVSW50MzJWYWx1ZV9GaWVsZE51bWJlcl9WYWx1ZSwKLSAgICAgICAgLmhh
c0luZGV4ID0gMCwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihHUEJVSW50
MzJWYWx1ZV9fc3RvcmFnZV8sIHZhbHVlKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRp
b25hbCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVVSW50MzIsCi0gICAgICB9LAot
ICAgIH07Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9jYWxEZXNjcmlwdG9yID0KLSAgICAgICAgW0dQ
QkRlc2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6W0dQQlVJbnQzMlZhbHVlIGNsYXNz
XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RDbGFzczpbR1BCV3Jh
cHBlcnNSb290IGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmlsZTpHUEJXcmFwcGVyc1Jvb3RfRmlsZURlc2NyaXB0b3IoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczpmaWVsZHMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6KHVpbnQzMl90KShzaXplb2YoZmllbGRzKSAv
IHNpemVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbikpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZihHUEJVSW50MzJWYWx1ZV9fc3RvcmFn
ZV8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOjBdOwot
ICAgIE5TQXNzZXJ0KGRlc2NyaXB0b3IgPT0gbmlsLCBAIlN0YXJ0dXAgcmVjdXJzZWQhIik7Ci0g
ICAgZGVzY3JpcHRvciA9IGxvY2FsRGVzY3JpcHRvcjsKLSAgfQotICByZXR1cm4gZGVzY3JpcHRv
cjsKLX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBHUEJCb29sVmFsdWUKLQotQGltcGxlbWVu
dGF0aW9uIEdQQkJvb2xWYWx1ZQotCi1AZHluYW1pYyB2YWx1ZTsKLQotdHlwZWRlZiBzdHJ1Y3Qg
R1BCQm9vbFZhbHVlX19zdG9yYWdlXyB7Ci0gIHVpbnQzMl90IF9oYXNfc3RvcmFnZV9bMV07Ci19
IEdQQkJvb2xWYWx1ZV9fc3RvcmFnZV87Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIHRocmVhZHNhZmUg
YmVjYXVzZSBpdCBpcyBpbml0aWFsbHkgY2FsbGVkCi0vLyBpbiAraW5pdGlhbGl6ZSBmb3IgZWFj
aCBzdWJjbGFzcy4KLSsgKEdQQkRlc2NyaXB0b3IgKilkZXNjcmlwdG9yIHsKLSAgc3RhdGljIEdQ
QkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBuaWw7Ci0gIGlmICghZGVzY3JpcHRvcikgewotICAg
IHN0YXRpYyBHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbiBmaWVsZHNbXSA9IHsKLSAgICAgIHsK
LSAgICAgICAgLm5hbWUgPSAidmFsdWUiLAotICAgICAgICAuZGF0YVR5cGVTcGVjaWZpYy5jbGFz
c05hbWUgPSBOVUxMLAotICAgICAgICAubnVtYmVyID0gR1BCQm9vbFZhbHVlX0ZpZWxkTnVtYmVy
X1ZhbHVlLAotICAgICAgICAuaGFzSW5kZXggPSAwLAotICAgICAgICAub2Zmc2V0ID0gMSwgIC8v
IFN0b3JlZCBpbiBfaGFzX3N0b3JhZ2VfIHRvIHNhdmUgc3BhY2UuCi0gICAgICAgIC5mbGFncyA9
IEdQQkZpZWxkT3B0aW9uYWwsCi0gICAgICAgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlQm9vbCwK
LSAgICAgIH0sCi0gICAgfTsKLSAgICBHUEJEZXNjcmlwdG9yICpsb2NhbERlc2NyaXB0b3IgPQot
ICAgICAgICBbR1BCRGVzY3JpcHRvciBhbGxvY0Rlc2NyaXB0b3JGb3JDbGFzczpbR1BCQm9vbFZh
bHVlIGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RDbGFz
czpbR1BCV3JhcHBlcnNSb290IGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmlsZTpHUEJXcmFwcGVyc1Jvb3RfRmlsZURlc2NyaXB0b3IoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczpmaWVsZHMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6KHVpbnQzMl90KShzaXplb2Yo
ZmllbGRzKSAvIHNpemVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbikpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZihHUEJCb29sVmFsdWVf
X3N0b3JhZ2VfKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFn
czowXTsKLSAgICBOU0Fzc2VydChkZXNjcmlwdG9yID09IG5pbCwgQCJTdGFydHVwIHJlY3Vyc2Vk
ISIpOwotICAgIGRlc2NyaXB0b3IgPSBsb2NhbERlc2NyaXB0b3I7Ci0gIH0KLSAgcmV0dXJuIGRl
c2NyaXB0b3I7Ci19Ci0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gR1BCU3RyaW5nVmFsdWUKLQot
QGltcGxlbWVudGF0aW9uIEdQQlN0cmluZ1ZhbHVlCi0KLUBkeW5hbWljIHZhbHVlOwotCi10eXBl
ZGVmIHN0cnVjdCBHUEJTdHJpbmdWYWx1ZV9fc3RvcmFnZV8gewotICB1aW50MzJfdCBfaGFzX3N0
b3JhZ2VfWzFdOwotICBOU1N0cmluZyAqdmFsdWU7Ci19IEdQQlN0cmluZ1ZhbHVlX19zdG9yYWdl
XzsKLQotLy8gVGhpcyBtZXRob2QgaXMgdGhyZWFkc2FmZSBiZWNhdXNlIGl0IGlzIGluaXRpYWxs
eSBjYWxsZWQKLS8vIGluICtpbml0aWFsaXplIGZvciBlYWNoIHN1YmNsYXNzLgotKyAoR1BCRGVz
Y3JpcHRvciAqKWRlc2NyaXB0b3IgewotICBzdGF0aWMgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRv
ciA9IG5pbDsKLSAgaWYgKCFkZXNjcmlwdG9yKSB7Ci0gICAgc3RhdGljIEdQQk1lc3NhZ2VGaWVs
ZERlc2NyaXB0aW9uIGZpZWxkc1tdID0gewotICAgICAgewotICAgICAgICAubmFtZSA9ICJ2YWx1
ZSIsCi0gICAgICAgIC5kYXRhVHlwZVNwZWNpZmljLmNsYXNzTmFtZSA9IE5VTEwsCi0gICAgICAg
IC5udW1iZXIgPSBHUEJTdHJpbmdWYWx1ZV9GaWVsZE51bWJlcl9WYWx1ZSwKLSAgICAgICAgLmhh
c0luZGV4ID0gMCwKLSAgICAgICAgLm9mZnNldCA9ICh1aW50MzJfdClvZmZzZXRvZihHUEJTdHJp
bmdWYWx1ZV9fc3RvcmFnZV8sIHZhbHVlKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRp
b25hbCwKLSAgICAgICAgLmRhdGFUeXBlID0gR1BCRGF0YVR5cGVTdHJpbmcsCi0gICAgICB9LAot
ICAgIH07Ci0gICAgR1BCRGVzY3JpcHRvciAqbG9jYWxEZXNjcmlwdG9yID0KLSAgICAgICAgW0dQ
QkRlc2NyaXB0b3IgYWxsb2NEZXNjcmlwdG9yRm9yQ2xhc3M6W0dQQlN0cmluZ1ZhbHVlIGNsYXNz
XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RDbGFzczpbR1BCV3Jh
cHBlcnNSb290IGNsYXNzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmlsZTpHUEJXcmFwcGVyc1Jvb3RfRmlsZURlc2NyaXB0b3IoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczpmaWVsZHMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpZWxkQ291bnQ6KHVpbnQzMl90KShzaXplb2YoZmllbGRzKSAv
IHNpemVvZihHUEJNZXNzYWdlRmllbGREZXNjcmlwdGlvbikpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZihHUEJTdHJpbmdWYWx1ZV9fc3RvcmFn
ZV8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOjBdOwot
ICAgIE5TQXNzZXJ0KGRlc2NyaXB0b3IgPT0gbmlsLCBAIlN0YXJ0dXAgcmVjdXJzZWQhIik7Ci0g
ICAgZGVzY3JpcHRvciA9IGxvY2FsRGVzY3JpcHRvcjsKLSAgfQotICByZXR1cm4gZGVzY3JpcHRv
cjsKLX0KLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBHUEJCeXRlc1ZhbHVlCi0KLUBpbXBsZW1l
bnRhdGlvbiBHUEJCeXRlc1ZhbHVlCi0KLUBkeW5hbWljIHZhbHVlOwotCi10eXBlZGVmIHN0cnVj
dCBHUEJCeXRlc1ZhbHVlX19zdG9yYWdlXyB7Ci0gIHVpbnQzMl90IF9oYXNfc3RvcmFnZV9bMV07
Ci0gIE5TRGF0YSAqdmFsdWU7Ci19IEdQQkJ5dGVzVmFsdWVfX3N0b3JhZ2VfOwotCi0vLyBUaGlz
IG1ldGhvZCBpcyB0aHJlYWRzYWZlIGJlY2F1c2UgaXQgaXMgaW5pdGlhbGx5IGNhbGxlZAotLy8g
aW4gK2luaXRpYWxpemUgZm9yIGVhY2ggc3ViY2xhc3MuCi0rIChHUEJEZXNjcmlwdG9yICopZGVz
Y3JpcHRvciB7Ci0gIHN0YXRpYyBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gbmlsOwotICBp
ZiAoIWRlc2NyaXB0b3IpIHsKLSAgICBzdGF0aWMgR1BCTWVzc2FnZUZpZWxkRGVzY3JpcHRpb24g
ZmllbGRzW10gPSB7Ci0gICAgICB7Ci0gICAgICAgIC5uYW1lID0gInZhbHVlIiwKLSAgICAgICAg
LmRhdGFUeXBlU3BlY2lmaWMuY2xhc3NOYW1lID0gTlVMTCwKLSAgICAgICAgLm51bWJlciA9IEdQ
QkJ5dGVzVmFsdWVfRmllbGROdW1iZXJfVmFsdWUsCi0gICAgICAgIC5oYXNJbmRleCA9IDAsCi0g
ICAgICAgIC5vZmZzZXQgPSAodWludDMyX3Qpb2Zmc2V0b2YoR1BCQnl0ZXNWYWx1ZV9fc3RvcmFn
ZV8sIHZhbHVlKSwKLSAgICAgICAgLmZsYWdzID0gR1BCRmllbGRPcHRpb25hbCwKLSAgICAgICAg
LmRhdGFUeXBlID0gR1BCRGF0YVR5cGVCeXRlcywKLSAgICAgIH0sCi0gICAgfTsKLSAgICBHUEJE
ZXNjcmlwdG9yICpsb2NhbERlc2NyaXB0b3IgPQotICAgICAgICBbR1BCRGVzY3JpcHRvciBhbGxv
Y0Rlc2NyaXB0b3JGb3JDbGFzczpbR1BCQnl0ZXNWYWx1ZSBjbGFzc10KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByb290Q2xhc3M6W0dQQldyYXBwZXJzUm9vdCBjbGFzc10K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6R1BCV3JhcHBl
cnNSb290X0ZpbGVEZXNjcmlwdG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWVsZHM6ZmllbGRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZENvdW50Oih1aW50MzJfdCkoc2l6ZW9mKGZpZWxkcykgLyBzaXplb2YoR1BCTWVzc2Fn
ZUZpZWxkRGVzY3JpcHRpb24pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlU2l6ZTpzaXplb2YoR1BCQnl0ZXNWYWx1ZV9fc3RvcmFnZV8pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOjBdOwotICAgIE5TQXNzZXJ0KGRlc2Ny
aXB0b3IgPT0gbmlsLCBAIlN0YXJ0dXAgcmVjdXJzZWQhIik7Ci0gICAgZGVzY3JpcHRvciA9IGxv
Y2FsRGVzY3JpcHRvcjsKLSAgfQotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotQGVuZAotCi0K
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGdsb2JhbF9zY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGF0Y2hlcy8wMDAzLXJlbW92ZS1zdGF0aWMt
aW5pdGlhbGl6ZXJzLnBhdGNoIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9wYXRjaGVzLzAwMDMtcmVtb3ZlLXN0YXRpYy1pbml0aWFsaXpl
cnMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YjZiYWVkZDM2ZTM4ODI2
Yzk4ODViNjk1ZjNmNGY2YzcyNDg2NWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9wYXRjaGVzLzAwMDMtcmVtb3ZlLXN0YXRpYy1pbml0aWFsaXplcnMucGF0
Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi11bmNoYW5nZWQ6Ci0tLS0gcHJvdG9i
dWYtY2xlYW5lZC9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1cy5jYwkyMDE1LTEyLTMw
IDEzOjIxOjQ2LjAwMDAwMDAwMCAtMDgwMAotKysrIHByb3RvYnVmLXBhdGNoZWQvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9zdGF0dXMuY2MJMjAxNi0wMy0zMSAxMzoyNTo0MC44ODgwMDY0ODUg
LTA3MDAKLUBAIC04Miw5ICs4Miw5IEBACi0gfQotIH0gIC8vIG5hbWVzcGFjZSBlcnJvci4KLSAK
LS1jb25zdCBTdGF0dXMgU3RhdHVzOjpPSyA9IFN0YXR1cygpOwotLWNvbnN0IFN0YXR1cyBTdGF0
dXM6OkNBTkNFTExFRCA9IFN0YXR1cyhlcnJvcjo6Q0FOQ0VMTEVELCAiIik7Ci0tY29uc3QgU3Rh
dHVzIFN0YXR1czo6VU5LTk9XTiA9IFN0YXR1cyhlcnJvcjo6VU5LTk9XTiwgIiIpOwotK2NvbnN0
IFN0YXR1c1BvZCBTdGF0dXM6Ok9LID0geyBlcnJvcjo6T0sgfTsKLStjb25zdCBTdGF0dXNQb2Qg
U3RhdHVzOjpDQU5DRUxMRUQgPSB7IGVycm9yOjpDQU5DRUxMRUQgfTsKLStjb25zdCBTdGF0dXNQ
b2QgU3RhdHVzOjpVTktOT1dOID0geyBlcnJvcjo6VU5LTk9XTiB9OwotIAotIFN0YXR1czo6U3Rh
dHVzKCkgOiBlcnJvcl9jb2RlXyhlcnJvcjo6T0spIHsKLSB9Ci1AQCAtMTAwLDYgKzEwMCw5IEBA
Ci0gICAgIDogZXJyb3JfY29kZV8ob3RoZXIuZXJyb3JfY29kZV8pLCBlcnJvcl9tZXNzYWdlXyhv
dGhlci5lcnJvcl9tZXNzYWdlXykgewotIH0KLSAKLStTdGF0dXM6OlN0YXR1cyhjb25zdCBTdGF0
dXNQb2QmIHN0YXR1c19wb2QpIDogZXJyb3JfY29kZV8oc3RhdHVzX3BvZC5jb2RlKSB7Ci0rfQot
KwotIFN0YXR1cyYgU3RhdHVzOjpvcGVyYXRvcj0oY29uc3QgU3RhdHVzJiBvdGhlcikgewotICAg
ZXJyb3JfY29kZV8gPSBvdGhlci5lcnJvcl9jb2RlXzsKLSAgIGVycm9yX21lc3NhZ2VfID0gb3Ro
ZXIuZXJyb3JfbWVzc2FnZV87Ci11bmNoYW5nZWQ6Ci0tLS0gcHJvdG9idWYtY2xlYW5lZC9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1cy5oCTIwMTUtMTItMzAgMTM6MjE6NDYuMDAwMDAw
MDAwIC0wODAwCi0rKysgcHJvdG9idWYtcGF0Y2hlZC9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJz
L3N0YXR1cy5oCTIwMTYtMDMtMzEgMTM6MjU6NDAuODg4MDA2NDg1IC0wNzAwCi1AQCAtNjIsNiAr
NjIsMTAgQEAKLSB9OwotIH0gIC8vIG5hbWVzcGFjZSBlcnJvcgotIAotK3N0cnVjdCBTdGF0dXNQ
b2QgewotKyAgZXJyb3I6OkNvZGUgY29kZTsKLSt9OwotKwotIGNsYXNzIExJQlBST1RPQlVGX0VY
UE9SVCBTdGF0dXMgewotICBwdWJsaWM6Ci0gICAvLyBDcmVhdGVzIGEgInN1Y2Nlc3NmdWwiIHN0
YXR1cy4KLUBAIC03MywxMyArNzcsMTQgQEAKLSAgIC8vIGNvbnN0cnVjdGVkLgotICAgU3RhdHVz
KGVycm9yOjpDb2RlIGVycm9yX2NvZGUsIFN0cmluZ1BpZWNlIGVycm9yX21lc3NhZ2UpOwotICAg
U3RhdHVzKGNvbnN0IFN0YXR1cyYpOwotKyAgU3RhdHVzKGNvbnN0IFN0YXR1c1BvZCYpOwotICAg
U3RhdHVzJiBvcGVyYXRvcj0oY29uc3QgU3RhdHVzJiB4KTsKLSAgIH5TdGF0dXMoKSB7fQotIAot
ICAgLy8gU29tZSBwcmUtZGVmaW5lZCBTdGF0dXMgb2JqZWN0cwotLSAgc3RhdGljIGNvbnN0IFN0
YXR1cyBPSzsgICAgICAgICAgICAgLy8gSWRlbnRpY2FsIHRvIDAtYXJnIGNvbnN0cnVjdG9yCi0t
ICBzdGF0aWMgY29uc3QgU3RhdHVzIENBTkNFTExFRDsKLS0gIHN0YXRpYyBjb25zdCBTdGF0dXMg
VU5LTk9XTjsKLSsgIHN0YXRpYyBjb25zdCBTdGF0dXNQb2QgT0s7Ci0rICBzdGF0aWMgY29uc3Qg
U3RhdHVzUG9kIENBTkNFTExFRDsKLSsgIHN0YXRpYyBjb25zdCBTdGF0dXNQb2QgVU5LTk9XTjsK
LSAKLSAgIC8vIEFjY2Vzc29yCi0gICBib29sIG9rKCkgY29uc3Qgewotb25seSBpbiBwYXRjaDI6
Ci11bmNoYW5nZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3BhdGNoZXMvMDAwNC1maXgtaW50ZWdlci10eXBlcy1h
bmQtc2hhcmVkLWxpYnJhcnktZXhwb3J0cy5wYXRjaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGF0Y2hlcy8wMDA0LWZpeC1pbnRlZ2Vy
LXR5cGVzLWFuZC1zaGFyZWQtbGlicmFyeS1leHBvcnRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwODQ1NTUzMzJmM2Q2MGI3NTIwODEzYmUwNGVmOThmNWFlNDQ2YWMxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGF0Y2hlcy8wMDA0
LWZpeC1pbnRlZ2VyLXR5cGVzLWFuZC1zaGFyZWQtbGlicmFyeS1leHBvcnRzLnBhdGNoCisrKyAv
ZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLS0tIHByb3RvYnVmLWNsZWFuZWQvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9wb3J0LmgJMjAxNS0xMi0zMCAxMzoyMTo0Ni4wMDAwMDAwMDAgLTA4
MDAKLSsrKyBwcm90b2J1Zi1wYXRjaGVkL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvcG9ydC5o
CTIwMTYtMDMtMzEgMTM6MjU6MjYuODQwMDI0ODExIC0wNzAwCi1AQCAtNjYsMTggKzY2LDM0IEBA
Ci0gICAgICNkZWZpbmUgUFJPVE9CVUZfTElUVExFX0VORElBTiAxCi0gICAjZW5kaWYKLSAjZW5k
aWYKLS0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChQUk9UT0JVRl9VU0VfRExMUykK
LS0gICNpZmRlZiBMSUJQUk9UT0JVRl9FWFBPUlRTCi0tICAgICNkZWZpbmUgTElCUFJPVE9CVUZf
RVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotLSAgI2Vsc2UKLS0gICAgI2RlZmluZSBMSUJQ
Uk9UT0JVRl9FWFBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0tICAjZW5kaWYKLS0gICNpZmRl
ZiBMSUJQUk9UT0NfRVhQT1JUUwotLSAgICAjZGVmaW5lIExJQlBST1RPQ19FWFBPUlQgICBfX2Rl
Y2xzcGVjKGRsbGV4cG9ydCkKLS0gICNlbHNlCi0tICAgICNkZWZpbmUgTElCUFJPVE9DX0VYUE9S
VCAgIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotKwotKy8vIFRoZSBtYWNyb3MgZGVmaW5lZCBiZWxv
dyBhcmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gbWFrZSBwcm90b2J1Zl9saXRlIGEKLSsvLyBjb21w
b25lbnQgb24gYWxsIHBsYXRmb3Jtcy4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMTcyODAwLgotKyNp
ZiBkZWZpbmVkKENPTVBPTkVOVF9CVUlMRCkgJiYgZGVmaW5lZChQUk9UT0JVRl9VU0VfRExMUykK
LSsgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQotKyAgICAjaWZkZWYgTElCUFJPVE9CVUZfRVhQT1JU
UwotKyAgICAgICNkZWZpbmUgTElCUFJPVE9CVUZfRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0
KQotKyAgICAjZWxzZQotKyAgICAgICNkZWZpbmUgTElCUFJPVE9CVUZfRVhQT1JUIF9fZGVjbHNw
ZWMoZGxsaW1wb3J0KQotKyAgICAjZW5kaWYKLSsgICAgI2lmZGVmIExJQlBST1RPQ19FWFBPUlRT
Ci0rICAgICAgI2RlZmluZSBMSUJQUk9UT0NfRVhQT1JUICAgX19kZWNsc3BlYyhkbGxleHBvcnQp
Ci0rICAgICNlbHNlCi0rICAgICAgI2RlZmluZSBMSUJQUk9UT0NfRVhQT1JUICAgX19kZWNsc3Bl
YyhkbGxpbXBvcnQpCi0rICAgICNlbmRpZgotKyAgI2Vsc2UgIC8vIGRlZmluZWQoX01TQ19WRVIp
Ci0rICAgICNpZmRlZiBMSUJQUk9UT0JVRl9FWFBPUlRTCi0rICAgICAgI2RlZmluZSBMSUJQUk9U
T0JVRl9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLSsgICAg
I2Vsc2UKLSsgICAgICAjZGVmaW5lIExJQlBST1RPQlVGX0VYUE9SVAotKyAgICAjZW5kaWYKLSsg
ICAgI2lmZGVmIExJQlBST1RPQ19FWFBPUlRTCi0rICAgICAgI2RlZmluZSBMSUJQUk9UT0NfRVhQ
T1JUICAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLSsgICAgI2Vsc2UK
LSsgICAgICAjZGVmaW5lIExJQlBST1RPQ19FWFBPUlQKLSsgICAgI2VuZGlmCi0gICAjZW5kaWYK
LS0jZWxzZQotKyNlbHNlICAvLyBkZWZpbmVkKENPTVBPTkVOVF9CVUlMRCkgJiYgZGVmaW5lZChQ
Uk9UT0JVRl9VU0VfRExMUykKLSAgICNkZWZpbmUgTElCUFJPVE9CVUZfRVhQT1JUCi0gICAjZGVm
aW5lIExJQlBST1RPQ19FWFBPUlQKLSAjZW5kaWYKLUBAIC0xMDksMTUgKzEyNSwxNSBAQAotIHR5
cGVkZWYgdW5zaWduZWQgX19pbnQzMiB1aW50MzI7Ci0gdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0
IHVpbnQ2NDsKLSAjZWxzZQotLXR5cGVkZWYgc2lnbmVkIGNoYXIgIGludDg7Ci0tdHlwZWRlZiBz
aG9ydCBpbnQxNjsKLS10eXBlZGVmIGludCBpbnQzMjsKLS10eXBlZGVmIGxvbmcgbG9uZyBpbnQ2
NDsKLS0KLS10eXBlZGVmIHVuc2lnbmVkIGNoYXIgIHVpbnQ4OwotLXR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgdWludDE2OwotLXR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMjsKLS10eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyB1aW50NjQ7Ci0rdHlwZWRlZiBpbnQ4X3QgIGludDg7Ci0rdHlwZWRl
ZiBpbnQxNl90IGludDE2OwotK3R5cGVkZWYgaW50MzJfdCBpbnQzMjsKLSt0eXBlZGVmIGludDY0
X3QgaW50NjQ7Ci0rCi0rdHlwZWRlZiB1aW50OF90ICB1aW50ODsKLSt0eXBlZGVmIHVpbnQxNl90
IHVpbnQxNjsKLSt0eXBlZGVmIHVpbnQzMl90IHVpbnQzMjsKLSt0eXBlZGVmIHVpbnQ2NF90IHVp
bnQ2NDsKLSAjZW5kaWYKLSAKLSAvLyBsb25nIGxvbmcgbWFjcm9zIHRvIGJlIHVzZWQgYmVjYXVz
ZSBnY2MgYW5kIHZjKysgdXNlIGRpZmZlcmVudCBzdWZmaXhlcywKLUBAIC0xMzEsOCArMTQ3LDgg
QEAKLSAjZGVmaW5lIEdPT0dMRV9VTE9OR0xPTkcoeCkgeCMjVUk2NAotICNkZWZpbmUgR09PR0xF
X0xMX0ZPUk1BVCAiSTY0IiAgLy8gQXMgaW4gcHJpbnRmKCIlSTY0ZCIsIC4uLikKLSAjZWxzZQot
LSNkZWZpbmUgR09PR0xFX0xPTkdMT05HKHgpIHgjI0xMCi0tI2RlZmluZSBHT09HTEVfVUxPTkdM
T05HKHgpIHgjI1VMTAotKyNkZWZpbmUgR09PR0xFX0xPTkdMT05HKHgpIElOVDY0X0MoeCkKLSsj
ZGVmaW5lIEdPT0dMRV9VTE9OR0xPTkcoeCkgVUlOVDY0X0MoeCkKLSAjZGVmaW5lIEdPT0dMRV9M
TF9GT1JNQVQgImxsIiAgLy8gQXMgaW4gIiVsbGQiLiBOb3RlIHRoYXQgInEiIGlzIHBvb3IgZm9y
bSBhbHNvLgotICNlbmRpZgotIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wYXRjaGVzLzAwMDUtZml4LWluY2x1ZGUt
anMtZ2VuZXJhdG9yLnBhdGNoIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9wYXRjaGVzLzAwMDUtZml4LWluY2x1ZGUtanMtZ2VuZXJhdG9y
LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmI2NjcyNGIyYzdhMGRmZGFj
M2U3ZjA0MjJhNTJiYWJlMjMwNTcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcGF0Y2hlcy8wMDA1LWZpeC1pbmNsdWRlLWpzLWdlbmVyYXRvci5wYXRjaAor
KysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS0tLSBwcm90b2J1Zi0zLjAuMC1iZXRhLTMv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qcy9qc19nZW5lcmF0b3IuY2MgICAgICAgMjAx
Ni0wNS0xNiAxMTozNDowNC4wMDAwMDAwMDAgLTA3MDAKLSsrKyAvdXNyL2xvY2FsL2dvb2dsZS9o
b21lL3h5enp5ei9jaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qcy9qc19nZW5lcmF0b3IuY2MgICAyMDE2LTA1LTE3IDEyOjQ2OjA4
Ljc0NjA3ODk4MiAtMDcwMAotQEAgLTI4LDcgKzI4LDcgQEAKLSAvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAv
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotIAotLSNpbmNsdWRlICJnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvanMv
anNfZ2VuZXJhdG9yLmgiCi0rI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qcy9q
c19nZW5lcmF0b3IuaD4KLSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGFsZ29y
aXRobT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvcGF0Y2hlcy8wMDA3LXVuaW5saW5lX2dvb2dsZW9uY2UucGF0Y2gg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3BhdGNoZXMvMDAwNy11bmlubGluZV9nb29nbGVvbmNlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NTM2MmU4NTVlNjc2MDkyNTM0YzlhODA0MjVkNzgwYTI1OWJiMWQ0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGF0Y2hlcy8wMDA3
LXVuaW5saW5lX2dvb2dsZW9uY2UucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBA
Ci11bmNoYW5nZWQ6Ci0tLS0gcHJvdG9idWYtY2xlYW5lZC9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL29uY2UuY2MJMjAxNS0xMi0zMCAxMzoyMTo0Ni4wMDAwMDAwMDAgLTA4MDAKLSsrKyBwcm90
b2J1Zi1wYXRjaGVkL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5jYwkyMDE2LTAzLTMx
IDEzOjI1OjMyLjE4MDAxNzg0OCAtMDcwMAotQEAgLTYyLDYgKzYyLDEzIEBACi0gCi0gfSAgLy8g
bmFtZXNwYWNlCi0gCi0rdm9pZCBHb29nbGVPbmNlSW5pdChQcm90b2J1Zk9uY2VUeXBlKiBvbmNl
LCB2b2lkICgqaW5pdF9mdW5jKSgpKSB7Ci0rICBpZiAoaW50ZXJuYWw6OkFjcXVpcmVfTG9hZChv
bmNlKSAhPSBPTkNFX1NUQVRFX0RPTkUpIHsKLSsgICAgaW50ZXJuYWw6OkZ1bmN0aW9uQ2xvc3Vy
ZTAgZnVuYyhpbml0X2Z1bmMsIGZhbHNlKTsKLSsgICAgR29vZ2xlT25jZUluaXRJbXBsKG9uY2Us
ICZmdW5jKTsKLSsgIH0KLSt9Ci0rCi0gdm9pZCBHb29nbGVPbmNlSW5pdEltcGwoUHJvdG9idWZP
bmNlVHlwZSogb25jZSwgQ2xvc3VyZSogY2xvc3VyZSkgewotICAgaW50ZXJuYWw6OkF0b21pY1dv
cmQgc3RhdGUgPSBpbnRlcm5hbDo6QWNxdWlyZV9Mb2FkKG9uY2UpOwotICAgLy8gRmFzdCBwYXRo
LiBUaGUgcHJvdmlkZWQgY2xvc3VyZSB3YXMgYWxyZWFkeSBleGVjdXRlZC4KLW9ubHkgaW4gcGF0
Y2gyOgotdW5jaGFuZ2VkOgotLS0tIHByb3RvYnVmLWNsZWFuZWQvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9vbmNlLmgJMjAxNS0xMi0zMCAxMzoyMTo0Ni4wMDAwMDAwMDAgLTA4MDAKLSsrKyBw
cm90b2J1Zi1wYXRjaGVkL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oCTIwMTYtMDMt
MzEgMTM6MjU6MzUuNTIwMDEzNDkwIC0wNzAwCi1AQCAtMTIyLDEyICsxMjIsOCBAQAotIExJQlBS
T1RPQlVGX0VYUE9SVAotIHZvaWQgR29vZ2xlT25jZUluaXRJbXBsKFByb3RvYnVmT25jZVR5cGUq
IG9uY2UsIENsb3N1cmUqIGNsb3N1cmUpOwotIAotLWlubGluZSB2b2lkIEdvb2dsZU9uY2VJbml0
KFByb3RvYnVmT25jZVR5cGUqIG9uY2UsIHZvaWQgKCppbml0X2Z1bmMpKCkpIHsKLS0gIGlmIChp
bnRlcm5hbDo6QWNxdWlyZV9Mb2FkKG9uY2UpICE9IE9OQ0VfU1RBVEVfRE9ORSkgewotLSAgICBp
bnRlcm5hbDo6RnVuY3Rpb25DbG9zdXJlMCBmdW5jKGluaXRfZnVuYywgZmFsc2UpOwotLSAgICBH
b29nbGVPbmNlSW5pdEltcGwob25jZSwgJmZ1bmMpOwotLSAgfQotLX0KLStMSUJQUk9UT0JVRl9F
WFBPUlQKLSt2b2lkIEdvb2dsZU9uY2VJbml0KFByb3RvYnVmT25jZVR5cGUqIG9uY2UsIHZvaWQg
KCppbml0X2Z1bmMpKCkpOwotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmc+Ci0gaW5saW5lIHZv
aWQgR29vZ2xlT25jZUluaXQoUHJvdG9idWZPbmNlVHlwZSogb25jZSwgdm9pZCAoKmluaXRfZnVu
YykoQXJnKiksCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3BhdGNoZXMvMDAwOC11bmlubGluZV9nZXRfZW1wdHlfc3Ry
aW5nLnBhdGNoIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9wYXRjaGVzLzAwMDgtdW5pbmxpbmVfZ2V0X2VtcHR5X3N0cmluZy5wYXRjaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhZjUxODYyNTFiZDg3NjdiNDI4MjUwNDFm
OWUxZjdhNWQzNTg5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3BhdGNoZXMvMDAwOC11bmlubGluZV9nZXRfZW1wdHlfc3RyaW5nLnBhdGNoCisrKyAvZGV2
L251bGwKQEAgLTEsMzMgKzAsMCBAQAotdW5jaGFuZ2VkOgotLS0tIHByb3RvYnVmLWNsZWFuZWQv
c3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmNjCTIwMTUtMTItMzAg
MTM6MjE6NDYuMDAwMDAwMDAwIC0wODAwCi0rKysgcHJvdG9idWYtcGF0Y2hlZC9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3V0aWwuY2MJMjAxNi0wMy0zMSAxMzoyNTozMi4x
ODAwMTc4NDggLTA3MDAKLUBAIC02MCw2ICs2MCwxMiBAQAotICAgT25TaHV0ZG93bigmRGVsZXRl
RW1wdHlTdHJpbmcpOwotIH0KLSAKLStjb25zdCA6OnN0ZDo6c3RyaW5nJiBHZXRFbXB0eVN0cmlu
ZygpIHsKLSsgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xlT25jZUluaXQoJmVtcHR5X3N0cmlu
Z19vbmNlX2luaXRfLCAmSW5pdEVtcHR5U3RyaW5nKTsKLSsgIHJldHVybiBHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKTsKLSt9Ci0rCi0rCi0gaW50IFN0cmluZ1NwYWNlVXNlZEV4Y2x1ZGlu
Z1NlbGYoY29uc3Qgc3RyaW5nJiBzdHIpIHsKLSAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0gJnN0cjsK
LSAgIGNvbnN0IHZvaWQqIGVuZCA9ICZzdHIgKyAxOwotb25seSBpbiBwYXRjaDI6Ci11bmNoYW5n
ZWQ6Ci0tLS0gcHJvdG9idWYtY2xlYW5lZC9zcmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9t
ZXNzYWdlX3V0aWwuaAkyMDE1LTEyLTMwIDEzOjIxOjQ2LjAwMDAwMDAwMCAtMDgwMAotKysrIHBy
b3RvYnVmLXBhdGNoZWQvc3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGls
LmgJMjAxNi0wMy0zMSAxMzoyNTo0MC4yNTIwMDczMTYgLTA3MDAKLUBAIC04NCwxMCArODQsOCBA
QAotICAgYXNzZXJ0KGVtcHR5X3N0cmluZ18gIT0gTlVMTCk7Ci0gICByZXR1cm4gKmVtcHR5X3N0
cmluZ187Ci0gfQotLUxJQlBST1RPQlVGX0VYUE9SVCBpbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmlu
ZyYgR2V0RW1wdHlTdHJpbmcoKSB7Ci0tICA6Omdvb2dsZTo6cHJvdG9idWY6Okdvb2dsZU9uY2VJ
bml0KCZlbXB0eV9zdHJpbmdfb25jZV9pbml0XywgJkluaXRFbXB0eVN0cmluZyk7Ci0tICByZXR1
cm4gR2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCk7Ci0tfQotKwotK0xJQlBST1RPQlVGX0VY
UE9SVCBjb25zdCA6OnN0ZDo6c3RyaW5nJiBHZXRFbXB0eVN0cmluZygpOwotIAotIExJQlBST1RP
QlVGX0VYUE9SVCBpbnQgU3RyaW5nU3BhY2VVc2VkRXhjbHVkaW5nU2VsZihjb25zdCBzdHJpbmcm
IHN0cik7Ci0gCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3BhdGNoZXMvMDAwOS11bmlubGluZS1hcmVuYXN0cmluZy5w
YXRjaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvcGF0Y2hlcy8wMDA5LXVuaW5saW5lLWFyZW5hc3RyaW5nLnBhdGNoCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2YmE2MzYwYjM1YzAzNGRmMDgzYjJhNTYxYjhkMTllYWI2MTc5
OGU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGF0Y2hl
cy8wMDA5LXVuaW5saW5lLWFyZW5hc3RyaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTkg
KzAsMCBAQAotdW5jaGFuZ2VkOgotLS0tIHByb3RvYnVmLWNsZWFuZWQvc3JjL2dvb2dsZS9wcm90
b2J1Zi9hcmVuYXN0cmluZy5jYwkyMDE1LTEyLTMwIDEzOjIxOjQ2LjAwMDAwMDAwMCAtMDgwMAot
KysrIHByb3RvYnVmLXBhdGNoZWQvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5jYwky
MDE2LTAzLTMxIDEzOjI1OjQwLjg4ODAwNjQ4NSAtMDcwMAotQEAgLTQ4LDYgKzQ4LDIzIEBACi0g
ICB9Ci0gfQotIAotKzo6c3RkOjpzdHJpbmcqIEFyZW5hU3RyaW5nUHRyOjpNdXRhYmxlTm9BcmVu
YSgKLSsgICAgIGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUpIHsKLSsgIGlmIChw
dHJfID09IGRlZmF1bHRfdmFsdWUpIHsKLSsgICAgQ3JlYXRlSW5zdGFuY2VOb0FyZW5hKGRlZmF1
bHRfdmFsdWUpOwotKyAgfQotKyAgcmV0dXJuIHB0cl87Ci0rfQotKwotKwotK3ZvaWQgQXJlbmFT
dHJpbmdQdHI6OkRlc3Ryb3lOb0FyZW5hKGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFs
dWUpIHsKLSsgIGlmIChwdHJfICE9IGRlZmF1bHRfdmFsdWUpIHsKLSsgICAgZGVsZXRlIHB0cl87
Ci0rICB9Ci0rICBwdHJfID0gTlVMTDsKLSt9Ci0rCi0rCi0gfSAgLy8gbmFtZXNwYWNlIGludGVy
bmFsCi0gfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0gfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQot
b25seSBpbiBwYXRjaDI6Ci11bmNoYW5nZWQ6Ci0tLS0gcHJvdG9idWYtY2xlYW5lZC9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2FyZW5hc3RyaW5nLmgJMjAxNS0xMi0zMCAxMzoyMTo0Ni4wMDAwMDAwMDAg
LTA4MDAKLSsrKyBwcm90b2J1Zi1wYXRjaGVkL3NyYy9nb29nbGUvcHJvdG9idWYvYXJlbmFzdHJp
bmcuaAkyMDE2LTAzLTMxIDEzOjI1OjQwLjg4ODAwNjQ4NSAtMDcwMAotQEAgLTIxOSwxMiArMjE5
LDcgQEAKLSAgICAgcmV0dXJuICpwdHJfOwotICAgfQotIAotLSAgaW5saW5lIDo6c3RkOjpzdHJp
bmcqIE11dGFibGVOb0FyZW5hKGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUpIHsK
LS0gICAgaWYgKHB0cl8gPT0gZGVmYXVsdF92YWx1ZSkgewotLSAgICAgIENyZWF0ZUluc3RhbmNl
Tm9BcmVuYShkZWZhdWx0X3ZhbHVlKTsKLS0gICAgfQotLSAgICByZXR1cm4gcHRyXzsKLS0gIH0K
LSsgIDo6c3RkOjpzdHJpbmcqIE11dGFibGVOb0FyZW5hKGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRl
ZmF1bHRfdmFsdWUpOwotIAotICAgaW5saW5lIDo6c3RkOjpzdHJpbmcqIFJlbGVhc2VOb0FyZW5h
KGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUpIHsKLSAgICAgaWYgKHB0cl8gPT0g
ZGVmYXVsdF92YWx1ZSkgewotQEAgLTI0OCwxMiArMjQzLDcgQEAKLSAgICAgfQotICAgfQotIAot
LSAgaW5saW5lIHZvaWQgRGVzdHJveU5vQXJlbmEoY29uc3QgOjpzdGQ6OnN0cmluZyogZGVmYXVs
dF92YWx1ZSkgewotLSAgICBpZiAocHRyXyAhPSBkZWZhdWx0X3ZhbHVlKSB7Ci0tICAgICAgZGVs
ZXRlIHB0cl87Ci0tICAgIH0KLS0gICAgcHRyXyA9IE5VTEw7Ci0tICB9Ci0rICB2b2lkIERlc3Ry
b3lOb0FyZW5hKGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUpOwotIAotICAgaW5s
aW5lIHZvaWQgQ2xlYXJUb0VtcHR5Tm9BcmVuYShjb25zdCA6OnN0ZDo6c3RyaW5nKiBkZWZhdWx0
X3ZhbHVlKSB7Ci0gICAgIGlmIChwdHJfID09IGRlZmF1bHRfdmFsdWUpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
cGF0Y2hlcy8wMDEwLXVuaW5saW5lLWdlbmVyYXRlZC1jb2RlLnBhdGNoIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wYXRjaGVzLzAwMTAt
dW5pbmxpbmUtZ2VuZXJhdGVkLWNvZGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg1Mjc0ZGVlOGRjY2ViMjc5ZjViOTE2NDY2NGI0M2ViZWFmYWQ3YTAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wYXRjaGVzLzAwMTAtdW5pbmxpbmUt
Z2VuZXJhdGVkLWNvZGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi11bmNo
YW5nZWQ6Ci0tLS0gcHJvdG9idWYtY2xlYW5lZC9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfZmlsZS5jYwkyMDE1LTEyLTMwIDEzOjIxOjQ2LjAwMDAwMDAwMCAtMDgwMAotKysr
IHByb3RvYnVmLXBhdGNoZWQvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2Zp
bGUuY2MJMjAxNi0wMy0zMSAxMzoyNTo0MC4yNTIwMDczMTYgLTA3MDAKLUBAIC0zMzcsNyArMzM3
LDcgQEAKLSAgICAgICAgICAgIm5hbWVzcGFjZSB7XG4iCi0gICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgInN0YXRpYyB2b2lkIE1lcmdlRnJvbUZhaWwoaW50IGxpbmUpIEdPT0dMRV9BVFRSSUJV
VEVfQ09MRDtcbiIKLS0gICAgICAgICAgInN0YXRpYyB2b2lkIE1lcmdlRnJvbUZhaWwoaW50IGxp
bmUpIHtcbiIKLSsgICAgICAgICAgIkdPT0dMRV9BVFRSSUJVVEVfTk9JTkxJTkUgc3RhdGljIHZv
aWQgTWVyZ2VGcm9tRmFpbChpbnQgbGluZSkge1xuIgotICAgICAgICAgICAiICBHT09HTEVfQ0hF
Q0soZmFsc2UpIDw8IF9fRklMRV9fIDw8IFwiOlwiIDw8IGxpbmU7XG4iCi0gICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICJcbiIKLW9ubHkgaW4gcGF0Y2gyOgotdW5jaGFuZ2VkOgotLS0tIHBy
b3RvYnVmLWNsZWFuZWQvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3Nh
Z2UuY2MJMjAxNS0xMi0zMCAxMzoyMTo0Ni4wMDAwMDAwMDAgLTA4MDAKLSsrKyBwcm90b2J1Zi1w
YXRjaGVkL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tZXNzYWdlLmNjCTIw
MTYtMDMtMzEgMTM6MjU6NDAuODg4MDA2NDg1IC0wNzAwCi1AQCAtMTAzNSw3ICsxMDM1LDcgQEAK
LSAgIH0KLSAKLSAgIHByaW50ZXItPlByaW50KHZhcnMsCi0tICAgICJ2b2lkIFN3YXAoJGNsYXNz
bmFtZSQqIG90aGVyKTtcbiIKLSsgICAgIkdPT0dMRV9BVFRSSUJVVEVfTk9JTkxJTkUgdm9pZCBT
d2FwKCRjbGFzc25hbWUkKiBvdGhlcik7XG4iCi0gICAgICJcbiIKLSAgICAgIi8vIGltcGxlbWVu
dHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
XG4iCi0gICAgICJcbiIKLUBAIC0yNTg2LDcgKzI1ODYsNyBAQAotICAgICAvLyBvd25lcnNoaXAg
c2l0dWF0aW9uOiBzd2FwcGluZyBhY3Jvc3MgYXJlbmFzIG9yIGJldHdlZW4gYW4gYXJlbmEgYW5k
IGEKLSAgICAgLy8gaGVhcCByZXF1aXJlcyBjb3B5aW5nLgotICAgICBwcmludGVyLT5QcmludCgK
LS0gICAgICAgICJ2b2lkICRjbGFzc25hbWUkOjpTd2FwKCRjbGFzc25hbWUkKiBvdGhlcikge1xu
IgotKyAgICAgICAgIkdPT0dMRV9BVFRSSUJVVEVfTk9JTkxJTkUgdm9pZCAkY2xhc3NuYW1lJDo6
U3dhcCgkY2xhc3NuYW1lJCogb3RoZXIpIHtcbiIKLSAgICAgICAgICIgIGlmIChvdGhlciA9PSB0
aGlzKSByZXR1cm47XG4iCi0gICAgICAgICAiICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBv
dGhlci0+R2V0QXJlbmFOb1ZpcnR1YWwoKSkge1xuIgotICAgICAgICAgIiAgICBJbnRlcm5hbFN3
YXAob3RoZXIpO1xuIgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wYXRjaGVzLzAwMTEtbGlicHJvdG9idWZfZXhwb3J0
LnBhdGNoIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9wYXRjaGVzLzAwMTEtbGlicHJvdG9idWZfZXhwb3J0LnBhdGNoCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyOTE5ZmY1YmU4ZTU3NDA0ZmEwZTg4NDNhMzBkMzRhMDg3MjQw
MmFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGF0Y2hl
cy8wMDExLWxpYnByb3RvYnVmX2V4cG9ydC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExICsw
LDAgQEAKLS0tLSBwcm90b2J1Zi0zLjAuMC1iZXRhLTMvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVu
YS5oICAgMjAxNi0wNS0xNiAxMTozNDowNC4wMDAwMDAwMDAgLTA3MDAKLSsrKyAvdXNyL2xvY2Fs
L2dvb2dsZS9ob21lL3h5enp5ei9jaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9hcmVuYS5oIDIwMTYtMDUtMTcgMTQ6Mzg6NTAuMTA5NjAzOTk4IC0w
NzAwCi1AQCAtMjEzLDcgKzIxMyw3IEBACi0gLy8gd2VsbCBhcyBSZXBlYXRlZFB0ckZpZWxkLgot
IAotICNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCi0tY2xhc3MgQXJlbmEgZmluYWwgewotK2Ns
YXNzIExJQlBST1RPQlVGX0VYUE9SVCBBcmVuYSBmaW5hbCB7Ci0gI2Vsc2UKLSBjbGFzcyBMSUJQ
Uk9UT0JVRl9FWFBPUlQgQXJlbmEgewotICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9waHAvZXh0L2dvb2ds
ZS9wcm90b2J1Zi9jb25maWcubTQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3BocC9leHQvZ29vZ2xlL3Byb3RvYnVmL2NvbmZpZy5tNApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU5NDZmNzRlMWNhOGIwZjljNmQwZmVmMDQ4
MWJjNTA3N2M3YTEyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3BocC9leHQvZ29vZ2xlL3Byb3RvYnVmL2NvbmZpZy5tNAorKysgL2Rldi9udWxsCkBAIC0x
LDEwICswLDAgQEAKLWRubCBsaW5lcyBzdGFydGluZyB3aXRoICJkbmwiIGFyZSBjb21tZW50cwot
Ci1QSFBfQVJHX0VOQUJMRShwcm90b2J1Ziwgd2hldGhlciB0byBlbmFibGUgUHJvdG9idWYgZXh0
ZW5zaW9uLCBbICAtLWVuYWJsZS1wcm90b2J1ZiAgIEVuYWJsZSBQcm90b2J1ZiBleHRlbnNpb25d
KQotCi1pZiB0ZXN0ICIkUEhQX1BST1RPQlVGIiAhPSAibm8iOyB0aGVuCi0KLSAgZG5sIHRoaXMg
ZGVmaW5lcyB0aGUgZXh0ZW5zaW9uCi0gIFBIUF9ORVdfRVhURU5TSU9OKHByb3RvYnVmLCB1cGIu
YyBwcm90b2J1Zi5jIGRlZi5jIG1lc3NhZ2UuYyBzdG9yYWdlLmMsICRleHRfc2hhcmVkKQotCi1m
aQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9waHAvZXh0L2dvb2dsZS9wcm90b2J1Zi9kZWYuYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGhwL2V4dC9nb29n
bGUvcHJvdG9idWYvZGVmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMTg4MDY5
NWQ3MmFmZTQ4NWQ0OGRlNTdlZWNlNmUwOTBlYjAyMmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9waHAvZXh0L2dvb2dsZS9wcm90b2J1Zi9kZWYuYworKysg
L2Rldi9udWxsCkBAIC0xLDM4MSArMCwwIEBACi0jaW5jbHVkZSAicHJvdG9idWYuaCIKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbW1vbiBVdGlsaXRpZXMKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLXZvaWQgY2hlY2tfdXBiX3N0YXR1cyhjb25zdCB1cGJfc3RhdHVzKiBzdGF0
dXMsIGNvbnN0IGNoYXIqIG1zZykgewotICBpZiAoIXVwYl9vayhzdGF0dXMpKSB7Ci0gICAgemVu
ZF9lcnJvcigiJXM6ICVzXG4iLCBtc2csIHVwYl9zdGF0dXNfZXJybXNnKHN0YXR1cykpOwotICB9
Ci19Ci0KLQotc3RhdGljIHVwYl9kZWYgKmNoZWNrX25vdGZyb3plbihjb25zdCB1cGJfZGVmICpk
ZWYpIHsKLSAgaWYgKHVwYl9kZWZfaXNmcm96ZW4oZGVmKSkgewotICAgIHplbmRfZXJyb3IoRV9F
UlJPUiwKLSAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIG1vZGlmeSBhIGZyb3plbiBkZXNjcmlw
dG9yLiBPbmNlIGRlc2NyaXB0b3JzIGFyZSAiCi0gICAgICAgICAgICAgICAiYWRkZWQgdG8gdGhl
IGRlc2NyaXB0b3IgcG9vbCwgdGhleSBtYXkgbm90IGJlIG1vZGlmaWVkLiIpOwotICB9Ci0gIHJl
dHVybiAodXBiX2RlZiAqKWRlZjsKLX0KLQotc3RhdGljIHVwYl9tc2dkZWYgKmNoZWNrX21zZ2Rl
Zl9ub3Rmcm96ZW4oY29uc3QgdXBiX21zZ2RlZiAqZGVmKSB7Ci0gIHJldHVybiB1cGJfZG93bmNh
c3RfbXNnZGVmX211dGFibGUoY2hlY2tfbm90ZnJvemVuKChjb25zdCB1cGJfZGVmICopZGVmKSk7
Ci19Ci0KLXN0YXRpYyB1cGJfZmllbGRkZWYgKmNoZWNrX2ZpZWxkZGVmX25vdGZyb3plbihjb25z
dCB1cGJfZmllbGRkZWYgKmRlZikgewotICByZXR1cm4gdXBiX2Rvd25jYXN0X2ZpZWxkZGVmX211
dGFibGUoY2hlY2tfbm90ZnJvemVuKChjb25zdCB1cGJfZGVmICopZGVmKSk7Ci19Ci0KLSNkZWZp
bmUgUFJPVE9CVUZfV1JBUF9JTlRFUk4od3JhcHBlciwgaW50ZXJuLCBpbnRlcm5fZHRvcikgICAg
ICAgICAgICBcCi0gIFpfVFlQRV9QKHdyYXBwZXIpID0gSVNfT0JKRUNUOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBaX09CSlZBTF9QKHdyYXBwZXIpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIC5oYW5kbGUg
PSB6ZW5kX29iamVjdHNfc3RvcmVfcHV0KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICBpbnRlcm4sICh6ZW5kX29iamVjdHNfc3RvcmVfZHRvcl90KXplbmRfb2JqZWN0c19k
ZXN0cm95X29iamVjdCwgXAotICAgICAgaW50ZXJuX2R0b3IsIE5VTEwgVFNSTUxTX0NDKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgWl9PQkpWQUxfUCh3cmFwcGVyKS5o
YW5kbGVycyA9IHplbmRfZ2V0X3N0ZF9vYmplY3RfaGFuZGxlcnMoKTsKLQotI2RlZmluZSBQUk9U
T0JVRl9TRVRVUF9aRU5EX1dSQVBQRVIoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZV9sb3dlciwgd3Jh
cHBlciwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBaX1RZUEVfUCh3cmFwcGVyKSA9
IElTX09CSkVDVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBjbGFzc19uYW1lICppbnRlcm4gPSBBTExPQyhjbGFzc19uYW1lKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBtZW1zZXQoaW50ZXJuLCAwLCBzaXplb2YoY2xh
c3NfbmFtZSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjbGFz
c19uYW1lX2xvd2VyIyNfaW5pdF9jX2luc3RhbmNlKGludGVybiBUU1JNTFNfQ0MpOyAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBaX09CSlZBTF9QKHdyYXBwZXIpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgLmhhbmRsZSA9
IHplbmRfb2JqZWN0c19zdG9yZV9wdXQoaW50ZXJuLCBOVUxMLCBjbGFzc19uYW1lX2xvd2VyIyNf
ZnJlZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCBUU1JN
TFNfQ0MpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICBaX09CSlZBTF9QKHdyYXBwZXIpLmhh
bmRsZXJzID0gemVuZF9nZXRfc3RkX29iamVjdF9oYW5kbGVycygpOwotCi0jZGVmaW5lIFBST1RP
QlVGX0NSRUFURV9aRU5EX1dSQVBQRVIoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZV9sb3dlciwgd3Jh
cHBlciwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgTUFLRV9TVERfWlZBTCh3cmFwcGVyKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFBS
T1RPQlVGX1NFVFVQX1pFTkRfV1JBUFBFUihjbGFzc19uYW1lLCBjbGFzc19uYW1lX2xvd2VyLCB3
cmFwcGVyLCBpbnRlcm4pOwotCi0jZGVmaW5lIERFRklORV9DTEFTUyhuYW1lLCBuYW1lX2xvd2Vy
LCBzdHJpbmdfbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgemVuZF9jbGFzc19l
bnRyeSAqbmFtZV9sb3dlciMjX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB2b2lkIG5hbWVfbG93ZXIjI19pbml0KFRTUk1MU19EKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgemVuZF9jbGFzc19lbnRyeSBjbGFz
c190eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBJTklUX0NMQVNTX0VOVFJZKGNsYXNzX3R5cGUsIHN0cmluZ19uYW1lLCBuYW1lX2xvd2VyIyNf
bWV0aG9kcyk7ICAgICAgICAgXAotICAgIG5hbWVfbG93ZXIjI190eXBlID0gemVuZF9yZWdpc3Rl
cl9pbnRlcm5hbF9jbGFzcygmY2xhc3NfdHlwZSBUU1JNTFNfQ0MpOyBcCi0gICAgbmFtZV9sb3dl
ciMjX3R5cGUtPmNyZWF0ZV9vYmplY3QgPSBuYW1lX2xvd2VyIyNfY3JlYXRlOyAgICAgICAgICAg
ICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBuYW1lICpwaHBfdG9fIyNuYW1lX2xv
d2VyKHp2YWwgKnZhbCBUU1JNTFNfREMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgcmV0dXJuIChuYW1lICopemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdCh2YWwgVFNSTUxT
X0NDKTsgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB2b2lkIG5hbWVf
bG93ZXIjI19mcmVlKHZvaWQgKm9iamVjdCBUU1JNTFNfREMpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgbmFtZSAqaW50ZXJuID0gKG5hbWUgKilvYmplY3Q7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBuYW1lX2xvd2VyIyNfZnJlZV9j
KGludGVybiBUU1JNTFNfQ0MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGVmcmVlKG9iamVjdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgemVuZF9vYmpl
Y3RfdmFsdWUgbmFtZV9sb3dlciMjX2NyZWF0ZSh6ZW5kX2NsYXNzX2VudHJ5ICpjZSBUU1JNTFNf
REMpIHsgICAgXAotICAgIHplbmRfb2JqZWN0X3ZhbHVlIHJldHVybl92YWx1ZTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbmFtZSAqaW50ZXJuID0gKG5h
bWUgKillbWFsbG9jKHNpemVvZihuYW1lKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBtZW1zZXQoaW50ZXJuLCAwLCBzaXplb2YobmFtZSkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG5hbWVfbG93ZXIjI19pbml0X2NfaW5zdGFuY2Uo
aW50ZXJuIFRTUk1MU19DQyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJu
X3ZhbHVlLmhhbmRsZSA9IHplbmRfb2JqZWN0c19zdG9yZV9wdXQoICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgaW50ZXJuLCAoemVuZF9vYmplY3RzX3N0b3JlX2R0b3JfdCl6
ZW5kX29iamVjdHNfZGVzdHJveV9vYmplY3QsICAgICAgXAotICAgICAgICBuYW1lX2xvd2VyIyNf
ZnJlZSwgTlVMTCBUU1JNTFNfQ0MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgcmV0dXJuX3ZhbHVlLmhhbmRsZXJzID0gemVuZF9nZXRfc3RkX29iamVjdF9oYW5kbGVy
cygpOyAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEZXNjcmlwdG9yUG9vbAotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotc3RhdGljIHplbmRfZnVuY3Rpb25fZW50cnkgZGVzY3JpcHRvcl9wb29sX21l
dGhvZHNbXSA9IHsKLSAgUEhQX01FKERlc2NyaXB0b3JQb29sLCBhZGRNZXNzYWdlLCBOVUxMLCBa
RU5EX0FDQ19QVUJMSUMpCi0gIFBIUF9NRShEZXNjcmlwdG9yUG9vbCwgZmluYWxpemUsIE5VTEws
IFpFTkRfQUNDX1BVQkxJQykKLSAgWkVORF9GRV9FTkQKLX07Ci0KLURFRklORV9DTEFTUyhEZXNj
cmlwdG9yUG9vbCwgZGVzY3JpcHRvcl9wb29sLAotICAgICAgICAgICAgICJHb29nbGVcXFByb3Rv
YnVmXFxEZXNjcmlwdG9yUG9vbCIpOwotCi1EZXNjcmlwdG9yUG9vbCAqZ2VuZXJhdGVkX3Bvb2w7
ICAvLyBUaGUgYWN0dWFsIGdlbmVyYXRlZCBwb29sCi0KLVpFTkRfRlVOQ1RJT04oZ2V0X2dlbmVy
YXRlZF9wb29sKSB7Ci0gIGlmIChQUk9UT0JVRl9HKGdlbmVyYXRlZF9wb29sKSA9PSBOVUxMKSB7
Ci0gICAgTUFLRV9TVERfWlZBTChQUk9UT0JVRl9HKGdlbmVyYXRlZF9wb29sKSk7Ci0gICAgWl9U
WVBFX1AoUFJPVE9CVUZfRyhnZW5lcmF0ZWRfcG9vbCkpID0gSVNfT0JKRUNUOwotICAgIGdlbmVy
YXRlZF9wb29sID0gQUxMT0MoRGVzY3JpcHRvclBvb2wpOwotICAgIGRlc2NyaXB0b3JfcG9vbF9p
bml0X2NfaW5zdGFuY2UoZ2VuZXJhdGVkX3Bvb2wgVFNSTUxTX0NDKTsKLSAgICBaX09CSl9IQU5E
TEVfUChQUk9UT0JVRl9HKGdlbmVyYXRlZF9wb29sKSkgPSB6ZW5kX29iamVjdHNfc3RvcmVfcHV0
KAotICAgICAgICBnZW5lcmF0ZWRfcG9vbCwgTlVMTCwKLSAgICAgICAgKHplbmRfb2JqZWN0c19m
cmVlX29iamVjdF9zdG9yYWdlX3QpZGVzY3JpcHRvcl9wb29sX2ZyZWUsIE5VTEwgVFNSTUxTX0ND
KTsKLSAgICBaX09CSl9IVF9QKFBST1RPQlVGX0coZ2VuZXJhdGVkX3Bvb2wpKSA9IHplbmRfZ2V0
X3N0ZF9vYmplY3RfaGFuZGxlcnMoKTsKLSAgfQotICBSRVRVUk5fWlZBTChQUk9UT0JVRl9HKGdl
bmVyYXRlZF9wb29sKSwgMSwgMCk7Ci19Ci0KLXZvaWQgZGVzY3JpcHRvcl9wb29sX2luaXRfY19p
bnN0YW5jZShEZXNjcmlwdG9yUG9vbCogcG9vbCBUU1JNTFNfREMpIHsKLSAgemVuZF9vYmplY3Rf
c3RkX2luaXQoJnBvb2wtPnN0ZCwgZGVzY3JpcHRvcl9wb29sX3R5cGUgVFNSTUxTX0NDKTsKLSAg
cG9vbC0+c3ltdGFiID0gdXBiX3N5bXRhYl9uZXcoJnBvb2wtPnN5bXRhYik7Ci0KLSAgQUxMT0Nf
SEFTSFRBQkxFKHBvb2wtPnBlbmRpbmdfbGlzdCk7Ci0gIHplbmRfaGFzaF9pbml0KHBvb2wtPnBl
bmRpbmdfbGlzdCwgMSwgTlVMTCwgWlZBTF9QVFJfRFRPUiwgMCk7Ci19Ci0KLXZvaWQgZGVzY3Jp
cHRvcl9wb29sX2ZyZWVfYyhEZXNjcmlwdG9yUG9vbCAqcG9vbCBUU1JNTFNfREMpIHsKLSAgdXBi
X3N5bXRhYl91bnJlZihwb29sLT5zeW10YWIsICZwb29sLT5zeW10YWIpOwotICB6ZW5kX2hhc2hf
ZGVzdHJveShwb29sLT5wZW5kaW5nX2xpc3QpOwotICBGUkVFX0hBU0hUQUJMRShwb29sLT5wZW5k
aW5nX2xpc3QpOwotfQotCi1QSFBfTUVUSE9EKERlc2NyaXB0b3JQb29sLCBhZGRNZXNzYWdlKSB7
Ci0gIGNoYXIgKm5hbWUgPSBOVUxMOwotICBpbnQgc3RyX2xlbjsKLSAgaWYgKHplbmRfcGFyc2Vf
cGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAicyIsICZuYW1lLCAmc3RyX2xl
bikgPT0KLSAgICAgIEZBSUxVUkUpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICB6dmFsKiByZXR2
YWwgPSBOVUxMOwotICBQUk9UT0JVRl9DUkVBVEVfWkVORF9XUkFQUEVSKE1lc3NhZ2VCdWlsZGVy
Q29udGV4dCwgbWVzc2FnZV9idWlsZGVyX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dmFsLCBjb250ZXh0KTsKLQotICBNQUtFX1NURF9aVkFMKGNvbnRleHQtPnBv
b2wpOwotICBaVkFMX1pWQUwoY29udGV4dC0+cG9vbCwgZ2V0VGhpcygpLCAxLCAwKTsKLQotICBE
ZXNjcmlwdG9yICpkZXNjID0gcGhwX3RvX2Rlc2NyaXB0b3IoY29udGV4dC0+ZGVzY3JpcHRvciBU
U1JNTFNfQ0MpOwotICBEZXNjcmlwdG9yX25hbWVfc2V0KGRlc2MsIG5hbWUpOwotCi0gIFJFVFVS
Tl9aVkFMKHJldHZhbCwgMCwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGlkYXRlX21zZ2RlZihj
b25zdCB1cGJfbXNnZGVmKiBtc2dkZWYpIHsKLSAgLy8gVmVyaWZ5IHRoYXQgbm8gcmVxdWlyZWQg
ZmllbGRzIGV4aXN0LiBwcm90bzMgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZS4KLSAgdXBiX21zZ19m
aWVsZF9pdGVyIGl0OwotICBmb3IgKHVwYl9tc2dfZmllbGRfYmVnaW4oJml0LCBtc2dkZWYpOwot
ICAgICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJml0KTsKLSAgICAgICB1cGJfbXNnX2ZpZWxkX25l
eHQoJml0KSkgewotICAgIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQgPSB1cGJfbXNnX2l0ZXJf
ZmllbGQoJml0KTsKLSAgICBpZiAodXBiX2ZpZWxkZGVmX2xhYmVsKGZpZWxkKSA9PSBVUEJfTEFC
RUxfUkVRVUlSRUQpIHsKLSAgICAgIHplbmRfZXJyb3IoRV9FUlJPUiwgIlJlcXVpcmVkIGZpZWxk
cyBhcmUgdW5zdXBwb3J0ZWQgaW4gcHJvdG8zLiIpOwotICAgIH0KLSAgfQotfQotCi1QSFBfTUVU
SE9EKERlc2NyaXB0b3JQb29sLCBmaW5hbGl6ZSkgewotICBEZXNjcmlwdG9yUG9vbCAqc2VsZiA9
IHBocF90b19kZXNjcmlwdG9yX3Bvb2woZ2V0VGhpcygpIFRTUk1MU19DQyk7Ci0gIEJ1Y2tldCAq
dGVtcDsKLSAgaW50IGksIG51bTsKLQotICBudW0gPSB6ZW5kX2hhc2hfbnVtX2VsZW1lbnRzKHNl
bGYtPnBlbmRpbmdfbGlzdCk7Ci0gIHVwYl9kZWYgKipkZWZzID0gZW1hbGxvYyhzaXplb2YodXBi
X2RlZiAqKSAqIG51bSk7Ci0KLSAgZm9yIChpID0gMCwgdGVtcCA9IHNlbGYtPnBlbmRpbmdfbGlz
dC0+cExpc3RIZWFkOyB0ZW1wICE9IE5VTEw7Ci0gICAgICAgdGVtcCA9IHRlbXAtPnBMaXN0TmV4
dCkgewotICAgIHp2YWwgKmRlZl9waHAgPSAqKHp2YWwgKiopdGVtcC0+cERhdGE7Ci0gICAgRGVz
Y3JpcHRvciogZGVzYyA9IHBocF90b19kZXNjcmlwdG9yKGRlZl9waHAgVFNSTUxTX0NDKTsKLSAg
ICBkZWZzW2ldID0gKHVwYl9kZWYgKilkZXNjLT5tc2dkZWY7Ci0gICAgdmFsaWRhdGVfbXNnZGVm
KChjb25zdCB1cGJfbXNnZGVmICopZGVmc1tpKytdKTsKLSAgfQotCi0gIENIRUNLX1VQQih1cGJf
c3ltdGFiX2FkZChzZWxmLT5zeW10YWIsICh1cGJfZGVmICoqKWRlZnMsIG51bSwgTlVMTCwgJnN0
YXR1cyksCi0gICAgICAgICAgICAiVW5hYmxlIHRvIGFkZCBkZWZzIHRvIERlc2NyaXB0b3JQb29s
Iik7Ci0KLSAgZm9yICh0ZW1wID0gc2VsZi0+cGVuZGluZ19saXN0LT5wTGlzdEhlYWQ7IHRlbXAg
IT0gTlVMTDsKLSAgICAgICB0ZW1wID0gdGVtcC0+cExpc3ROZXh0KSB7Ci0gICAgLy8genZhbCAq
ZGVmX3BocCA9ICooenZhbCAqKil0ZW1wLT5wRGF0YTsKLSAgICAvLyBEZXNjcmlwdG9yKiBkZXNj
ID0gcGhwX3RvX2Rlc2NyaXB0b3IoZGVmX3BocCBUU1JNTFNfQ0MpOwotICAgIGJ1aWxkX2NsYXNz
X2Zyb21fZGVzY3JpcHRvcigoenZhbCAqKXRlbXAtPnBEYXRhUHRyIFRTUk1MU19DQyk7Ci0gIH0K
LQotICBGUkVFKGRlZnMpOwotICB6ZW5kX2hhc2hfZGVzdHJveShzZWxmLT5wZW5kaW5nX2xpc3Qp
OwotICB6ZW5kX2hhc2hfaW5pdChzZWxmLT5wZW5kaW5nX2xpc3QsIDEsIE5VTEwsIFpWQUxfUFRS
X0RUT1IsIDApOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVzY3JpcHRvcgot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIHplbmRfZnVuY3Rpb25fZW50cnkgZGVz
Y3JpcHRvcl9tZXRob2RzW10gPSB7Ci0gIFpFTkRfRkVfRU5ECi19OwotCi1ERUZJTkVfQ0xBU1Mo
RGVzY3JpcHRvciwgZGVzY3JpcHRvciwgIkdvb2dsZVxcUHJvdG9idWZcXERlc2NyaXB0b3IiKTsK
LQotdm9pZCBkZXNjcmlwdG9yX2ZyZWVfYyhEZXNjcmlwdG9yICpzZWxmIFRTUk1MU19EQykgewot
ICB1cGJfbXNnX2ZpZWxkX2l0ZXIgaXRlcjsKLSAgdXBiX21zZ19maWVsZF9iZWdpbigmaXRlciwg
c2VsZi0+bXNnZGVmKTsKLSAgd2hpbGUgKCF1cGJfbXNnX2ZpZWxkX2RvbmUoJml0ZXIpKSB7Ci0g
ICAgdXBiX2ZpZWxkZGVmICpmaWVsZGRlZiA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaXRlcik7Ci0g
ICAgdXBiX2ZpZWxkZGVmX3VucmVmKGZpZWxkZGVmLCAmZmllbGRkZWYpOwotICAgIHVwYl9tc2df
ZmllbGRfbmV4dCgmaXRlcik7Ci0gIH0KLSAgdXBiX21zZ2RlZl91bnJlZihzZWxmLT5tc2dkZWYs
ICZzZWxmLT5tc2dkZWYpOwotICBpZiAoc2VsZi0+bGF5b3V0KSB7Ci0gICAgZnJlZV9sYXlvdXQo
c2VsZi0+bGF5b3V0KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBkZXNjcmlwdG9yX2FkZF9maWVs
ZChEZXNjcmlwdG9yICpkZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdXBiX2ZpZWxkZGVmICpmaWVsZGRlZikgewotICB1cGJfbXNnZGVmICptdXRfZGVmID0gY2hl
Y2tfbXNnZGVmX25vdGZyb3plbihkZXNjLT5tc2dkZWYpOwotICB1cGJfZmllbGRkZWYgKm11dF9m
aWVsZF9kZWYgPSBjaGVja19maWVsZGRlZl9ub3Rmcm96ZW4oZmllbGRkZWYpOwotICBDSEVDS19V
UEIodXBiX21zZ2RlZl9hZGRmaWVsZChtdXRfZGVmLCBtdXRfZmllbGRfZGVmLCBOVUxMLCAmc3Rh
dHVzKSwKLSAgICAgICAgICAgICJBZGRpbmcgZmllbGQgdG8gRGVzY3JpcHRvciBmYWlsZWQiKTsK
LSAgLy8gYWRkX2RlZl9vYmooZmllbGRkZWYsIG9iaik7Ci19Ci0KLXZvaWQgZGVzY3JpcHRvcl9p
bml0X2NfaW5zdGFuY2UoRGVzY3JpcHRvciogZGVzYyBUU1JNTFNfREMpIHsKLSAgemVuZF9vYmpl
Y3Rfc3RkX2luaXQoJmRlc2MtPnN0ZCwgZGVzY3JpcHRvcl90eXBlIFRTUk1MU19DQyk7Ci0gIGRl
c2MtPm1zZ2RlZiA9IHVwYl9tc2dkZWZfbmV3KCZkZXNjLT5tc2dkZWYpOwotICBkZXNjLT5sYXlv
dXQgPSBOVUxMOwotICAvLyBNQUtFX1NURF9aVkFMKGludGVybi0+a2xhc3MpOwotICAvLyBaVkFM
X05VTEwoaW50ZXJuLT5rbGFzcyk7Ci0gIGRlc2MtPnBiX3NlcmlhbGl6ZV9oYW5kbGVycyA9IE5V
TEw7Ci19Ci0KLXZvaWQgRGVzY3JpcHRvcl9uYW1lX3NldChEZXNjcmlwdG9yICpkZXNjLCBjb25z
dCBjaGFyICpuYW1lKSB7Ci0gIHVwYl9tc2dkZWYgKm11dF9kZWYgPSBjaGVja19tc2dkZWZfbm90
ZnJvemVuKGRlc2MtPm1zZ2RlZik7Ci0gIENIRUNLX1VQQih1cGJfbXNnZGVmX3NldGZ1bGxuYW1l
KG11dF9kZWYsIG5hbWUsICZzdGF0dXMpLAotICAgICAgICAgICAgIkVycm9yIHNldHRpbmcgRGVz
Y3JpcHRvciBuYW1lIik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBGaWVsZERl
c2NyaXB0b3IKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyB2b2lkIGZpZWxkX2Rl
c2NyaXB0b3JfbmFtZV9zZXQoY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZGRlZiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkgewotICB1cGJf
ZmllbGRkZWYgKm11dF9kZWYgPSBjaGVja19maWVsZGRlZl9ub3Rmcm96ZW4oZmllbGRkZWYpOwot
ICBDSEVDS19VUEIodXBiX2ZpZWxkZGVmX3NldG5hbWUobXV0X2RlZiwgbmFtZSwgJnN0YXR1cyks
Ci0gICAgICAgICAgICAiRXJyb3Igc2V0dGluZyBGaWVsZERlc2NyaXB0b3IgbmFtZSIpOwotfQot
Ci1zdGF0aWMgdm9pZCBmaWVsZF9kZXNjcmlwdG9yX2xhYmVsX3NldChjb25zdCB1cGJfZmllbGRk
ZWYqIGZpZWxkZGVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBi
X2xhYmVsX3QgdXBiX2xhYmVsKSB7Ci0gIHVwYl9maWVsZGRlZiAqbXV0X2RlZiA9IGNoZWNrX2Zp
ZWxkZGVmX25vdGZyb3plbihmaWVsZGRlZik7Ci0gIHVwYl9maWVsZGRlZl9zZXRsYWJlbChtdXRf
ZGVmLCB1cGJfbGFiZWwpOwotfQotCi11cGJfZmllbGR0eXBlX3Qgc3RyaW5nX3RvX2Rlc2NyaXB0
b3J0eXBlKGNvbnN0IGNoYXIgKnR5cGUpIHsKLSNkZWZpbmUgQ09OVkVSVCh1cGIsIHN0cikgICBc
Ci0gIGlmICghc3RyY21wKHR5cGUsIHN0cikpIHsgXAotICAgIHJldHVybiBVUEJfREVTQ1JJUFRP
Ul9UWVBFXyMjdXBiOyAgXAotICB9Ci0KLSAgQ09OVkVSVChGTE9BVCwgImZsb2F0Iik7Ci0gIENP
TlZFUlQoRE9VQkxFLCAiZG91YmxlIik7Ci0gIENPTlZFUlQoQk9PTCwgImJvb2wiKTsKLSAgQ09O
VkVSVChTVFJJTkcsICJzdHJpbmciKTsKLSAgQ09OVkVSVChCWVRFUywgImJ5dGVzIik7Ci0gIENP
TlZFUlQoTUVTU0FHRSwgIm1lc3NhZ2UiKTsKLSAgQ09OVkVSVChHUk9VUCwgImdyb3VwIik7Ci0g
IENPTlZFUlQoRU5VTSwgImVudW0iKTsKLSAgQ09OVkVSVChJTlQzMiwgImludDMyIik7Ci0gIENP
TlZFUlQoSU5UNjQsICJpbnQ2NCIpOwotICBDT05WRVJUKFVJTlQzMiwgInVpbnQzMiIpOwotICBD
T05WRVJUKFVJTlQ2NCwgInVpbnQ2NCIpOwotICBDT05WRVJUKFNJTlQzMiwgInNpbnQzMiIpOwot
ICBDT05WRVJUKFNJTlQ2NCwgInNpbnQ2NCIpOwotICBDT05WRVJUKEZJWEVEMzIsICJmaXhlZDMy
Iik7Ci0gIENPTlZFUlQoRklYRUQ2NCwgImZpeGVkNjQiKTsKLSAgQ09OVkVSVChTRklYRUQzMiwg
InNmaXhlZDMyIik7Ci0gIENPTlZFUlQoU0ZJWEVENjQsICJzZml4ZWQ2NCIpOwotCi0jdW5kZWYg
Q09OVkVSVAotCi0gIHplbmRfZXJyb3IoRV9FUlJPUiwgIlVua25vd24gZmllbGQgdHlwZS4iKTsK
LSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpZWxkX2Rlc2NyaXB0b3JfdHlwZV9zZXQo
Y29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZGRlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqdHlwZSkgewotICB1cGJfZmllbGRkZWYgKm11dF9kZWYg
PSBjaGVja19maWVsZGRlZl9ub3Rmcm96ZW4oZmllbGRkZWYpOwotICB1cGJfZmllbGRkZWZfc2V0
ZGVzY3JpcHRvcnR5cGUobXV0X2RlZiwgc3RyaW5nX3RvX2Rlc2NyaXB0b3J0eXBlKHR5cGUpKTsK
LX0KLQotc3RhdGljIHZvaWQgZmllbGRfZGVzY3JpcHRvcl9udW1iZXJfc2V0KGNvbnN0IHVwYl9m
aWVsZGRlZiogZmllbGRkZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG51bWJlcikgewotICB1cGJfZmllbGRkZWYgKm11dF9kZWYgPSBjaGVja19maWVsZGRl
Zl9ub3Rmcm96ZW4oZmllbGRkZWYpOwotICBDSEVDS19VUEIodXBiX2ZpZWxkZGVmX3NldG51bWJl
cihtdXRfZGVmLCBudW1iZXIsICZzdGF0dXMpLAotICAgICAgICAgICAgIkVycm9yIHNldHRpbmcg
ZmllbGQgbnVtYmVyIik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNZXNzYWdl
QnVpbGRlckNvbnRleHQKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyB6ZW5kX2Z1
bmN0aW9uX2VudHJ5IG1lc3NhZ2VfYnVpbGRlcl9jb250ZXh0X21ldGhvZHNbXSA9IHsKLSAgICBQ
SFBfTUUoTWVzc2FnZUJ1aWxkZXJDb250ZXh0LCBmaW5hbGl6ZVRvUG9vbCwgTlVMTCwgWkVORF9B
Q0NfUFVCTElDKQotICAgIFBIUF9NRShNZXNzYWdlQnVpbGRlckNvbnRleHQsIG9wdGlvbmFsLCBO
VUxMLCBaRU5EX0FDQ19QVUJMSUMpCi0gICAge05VTEwsIE5VTEwsIE5VTEx9Ci19OwotCi1ERUZJ
TkVfQ0xBU1MoTWVzc2FnZUJ1aWxkZXJDb250ZXh0LCBtZXNzYWdlX2J1aWxkZXJfY29udGV4dCwK
LSAgICAgICAgICAgICAiR29vZ2xlXFxQcm90b2J1ZlxcSW50ZXJuYWxcXE1lc3NhZ2VCdWlsZGVy
Q29udGV4dCIpOwotCi12b2lkIG1lc3NhZ2VfYnVpbGRlcl9jb250ZXh0X2ZyZWVfYyhNZXNzYWdl
QnVpbGRlckNvbnRleHQgKmNvbnRleHQgVFNSTUxTX0RDKSB7Ci0gIHp2YWxfcHRyX2R0b3IoJmNv
bnRleHQtPmRlc2NyaXB0b3IpOwotICB6dmFsX3B0cl9kdG9yKCZjb250ZXh0LT5wb29sKTsKLX0K
LQotdm9pZCBtZXNzYWdlX2J1aWxkZXJfY29udGV4dF9pbml0X2NfaW5zdGFuY2UoCi0gICAgTWVz
c2FnZUJ1aWxkZXJDb250ZXh0ICpjb250ZXh0IFRTUk1MU19EQykgewotICB6ZW5kX29iamVjdF9z
dGRfaW5pdCgmY29udGV4dC0+c3RkLCBtZXNzYWdlX2J1aWxkZXJfY29udGV4dF90eXBlIFRTUk1M
U19DQyk7Ci0gIFBST1RPQlVGX0NSRUFURV9aRU5EX1dSQVBQRVIoRGVzY3JpcHRvciwgZGVzY3Jp
cHRvciwgY29udGV4dC0+ZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXNjKTsKLX0KLQotc3RhdGljIHZvaWQgbXNnZGVmX2FkZF9maWVsZChEZXNjcmlwdG9yICpk
ZXNjLCB1cGJfbGFiZWxfdCB1cGJfbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsIGludCBudW1iZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGVfY2xhc3MpIHsKLSAgdXBiX2Zp
ZWxkZGVmICpmaWVsZGRlZiA9IHVwYl9maWVsZGRlZl9uZXcoJmZpZWxkZGVmKTsKLSAgdXBiX2Zp
ZWxkZGVmX3NldHBhY2tlZChmaWVsZGRlZiwgZmFsc2UpOwotCi0gIGZpZWxkX2Rlc2NyaXB0b3Jf
bGFiZWxfc2V0KGZpZWxkZGVmLCB1cGJfbGFiZWwpOwotICBmaWVsZF9kZXNjcmlwdG9yX25hbWVf
c2V0KGZpZWxkZGVmLCBuYW1lKTsKLSAgZmllbGRfZGVzY3JpcHRvcl90eXBlX3NldChmaWVsZGRl
ZiwgdHlwZSk7Ci0gIGZpZWxkX2Rlc2NyaXB0b3JfbnVtYmVyX3NldChmaWVsZGRlZiwgbnVtYmVy
KTsKLQotLy8gLy8gICBpZiAodHlwZV9jbGFzcyAhPSBRbmlsKSB7Ci0vLyAvLyAgICAgaWYgKFRZ
UEUodHlwZV9jbGFzcykgIT0gVF9TVFJJTkcpIHsKLS8vIC8vICAgICAgIHJiX3JhaXNlKHJiX2VB
cmdFcnJvciwgIkV4cGVjdGVkIHN0cmluZyBmb3IgdHlwZSBjbGFzcyIpOwotLy8gLy8gICAgIH0K
LS8vIC8vICAgICAvLyBNYWtlIGl0IGFuIGFic29sdXRlIHR5cGUgbmFtZSBieSBwcmVwZW5kaW5n
IGEgZG90LgotLy8gLy8gICAgIHR5cGVfY2xhc3MgPSByYl9zdHJfYXBwZW5kKHJiX3N0cl9uZXcy
KCIuIiksIHR5cGVfY2xhc3MpOwotLy8gLy8gICAgIHJiX2Z1bmNhbGwoZmllbGRkZWYsIHJiX2lu
dGVybigic3VibXNnX25hbWU9IiksIDEsIHR5cGVfY2xhc3MpOwotLy8gLy8gICB9Ci0gIGRlc2Ny
aXB0b3JfYWRkX2ZpZWxkKGRlc2MsIGZpZWxkZGVmKTsKLX0KLQotUEhQX01FVEhPRChNZXNzYWdl
QnVpbGRlckNvbnRleHQsIG9wdGlvbmFsKSB7Ci0gIE1lc3NhZ2VCdWlsZGVyQ29udGV4dCAqc2Vs
ZiA9IHBocF90b19tZXNzYWdlX2J1aWxkZXJfY29udGV4dChnZXRUaGlzKCkgVFNSTUxTX0NDKTsK
LSAgRGVzY3JpcHRvciAqZGVzYyA9IHBocF90b19kZXNjcmlwdG9yKHNlbGYtPmRlc2NyaXB0b3Ig
VFNSTUxTX0NDKTsKLSAgLy8gVkFMVUUgbmFtZSwgdHlwZSwgbnVtYmVyLCB0eXBlX2NsYXNzOwot
ICBjb25zdCBjaGFyICpuYW1lLCAqdHlwZSwgKnR5cGVfY2xhc3M7Ci0gIGludCBudW1iZXIsIG5h
bWVfc3RyX2xlbiwgdHlwZV9zdHJfbGVuLCB0eXBlX2NsYXNzX3N0cl9sZW47Ci0gIGlmIChaRU5E
X05VTV9BUkdTKCkgPT0gMykgewotICAgIGlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoMyBUU1JN
TFNfQ0MsICJzc2wiLCAmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1l
X3N0cl9sZW4sICZ0eXBlLCAmdHlwZV9zdHJfbGVuLCAmbnVtYmVyKSA9PSBGQUlMVVJFKSB7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmICh6ZW5kX3BhcnNlX3BhcmFt
ZXRlcnMoNCBUU1JNTFNfQ0MsICJzc2xzIiwgJm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmbmFtZV9zdHJfbGVuLCAmdHlwZSwgJnR5cGVfc3RyX2xlbiwgJm51bWJlciwgJnR5
cGVfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHlwZV9jbGFzc19zdHJf
bGVuKSA9PSBGQUlMVVJFKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0KLSAgbXNnZGVm
X2FkZF9maWVsZChkZXNjLCBVUEJfTEFCRUxfT1BUSU9OQUwsIG5hbWUsIHR5cGUsIG51bWJlciwg
dHlwZV9jbGFzcyk7Ci0KLSAgenZhbF9jb3B5X2N0b3IoZ2V0VGhpcygpKTsKLSAgUkVUVVJOX1pW
QUwoZ2V0VGhpcygpLCAxLCAwKTsKLX0KLQotUEhQX01FVEhPRChNZXNzYWdlQnVpbGRlckNvbnRl
eHQsIGZpbmFsaXplVG9Qb29sKSB7Ci0gIE1lc3NhZ2VCdWlsZGVyQ29udGV4dCAqc2VsZiA9IHBo
cF90b19tZXNzYWdlX2J1aWxkZXJfY29udGV4dChnZXRUaGlzKCkgVFNSTUxTX0NDKTsKLSAgRGVz
Y3JpcHRvclBvb2wgKnBvb2wgPSBwaHBfdG9fZGVzY3JpcHRvcl9wb29sKHNlbGYtPnBvb2wgVFNS
TUxTX0NDKTsKLSAgRGVzY3JpcHRvciogZGVzYyA9IHBocF90b19kZXNjcmlwdG9yKHNlbGYtPmRl
c2NyaXB0b3IgVFNSTUxTX0NDKTsKLQotICBaX0FERFJFRl9QKHNlbGYtPmRlc2NyaXB0b3IpOwot
ICB6ZW5kX2hhc2hfbmV4dF9pbmRleF9pbnNlcnQocG9vbC0+cGVuZGluZ19saXN0LCAmc2VsZi0+
ZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih6dmFsICop
LCBOVUxMKTsKLSAgUkVUVVJOX1pWQUwoc2VsZi0+cG9vbCwgMSwgMCk7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3BocC9leHQvZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGhwL2V4dC9nb29nbGUvcHJvdG9i
dWYvbWVzc2FnZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDYyZDY2NWFiMzI2
NzA1MzRkN2IwZDVhM2M1ZmFhYTNlYTkyMjY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvcGhwL2V4dC9nb29nbGUvcHJvdG9idWYvbWVzc2FnZS5jCisrKyAv
ZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jaW5jbHVkZSA8cGhwLmg+Ci0KLSNpbmNsdWRlICJwcm90b2J1Zi5oIgotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ2xhc3MvbW9kdWxlIGNyZWF0aW9uIGZyb20gbXNnZGVm
cyBhbmQgZW51bWRlZnMsIHJlc3BlY3RpdmVseS4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LXZvaWQqIG1lc3NhZ2VfZGF0YSh2b2lkKiBtc2cpIHsKLSAgcmV0dXJuICgodWludDhfdCAqKW1z
ZykgKyBzaXplb2YoTWVzc2FnZUhlYWRlcik7Ci19Ci0KLXZvaWQgbWVzc2FnZV9zZXRfcHJvcGVy
dHkoenZhbCogb2JqZWN0LCB6dmFsKiBmaWVsZF9uYW1lLCB6dmFsKiB2YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgemVuZF9saXRlcmFsKiBrZXkgVFNSTUxTX0RDKSB7Ci0g
IGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQ7Ci0KLSAgTWVzc2FnZUhlYWRlciogc2VsZiA9IHpl
bmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3Qob2JqZWN0IFRTUk1MU19DQyk7Ci0KLSAgQ0hFQ0tf
VFlQRShmaWVsZF9uYW1lLCBJU19TVFJJTkcpOwotICBmaWVsZCA9IHVwYl9tc2dkZWZfbnRvZnoo
c2VsZi0+ZGVzY3JpcHRvci0+bXNnZGVmLCBaX1NUUlZBTF9QKGZpZWxkX25hbWUpKTsKLSAgaWYg
KGZpZWxkID09IE5VTEwpIHsKLSAgICB6ZW5kX2Vycm9yKEVfRVJST1IsICJVbmtub3duIGZpZWxk
OiAlcyIsIFpfU1RSVkFMX1AoZmllbGRfbmFtZSkpOwotICB9Ci0gIGxheW91dF9zZXQoc2VsZi0+
ZGVzY3JpcHRvci0+bGF5b3V0LCBtZXNzYWdlX2RhdGEoc2VsZiksIGZpZWxkLCB2YWx1ZSk7Ci19
Ci0KLXp2YWwqIG1lc3NhZ2VfZ2V0X3Byb3BlcnR5KHp2YWwqIG9iamVjdCwgenZhbCogbWVtYmVy
LCBpbnQgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgemVuZF9saXRl
cmFsKiBrZXkgVFNSTUxTX0RDKSB7Ci0gIE1lc3NhZ2VIZWFkZXIqIHNlbGYgPQotICAgICAgKE1l
c3NhZ2VIZWFkZXIqKXplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3Qob2JqZWN0IFRTUk1MU19D
Qyk7Ci0gIENIRUNLX1RZUEUobWVtYmVyLCBJU19TVFJJTkcpOwotCi0gIGNvbnN0IHVwYl9maWVs
ZGRlZiogZmllbGQ7Ci0gIGZpZWxkID0gdXBiX21zZ2RlZl9udG9meihzZWxmLT5kZXNjcmlwdG9y
LT5tc2dkZWYsIFpfU1RSVkFMX1AobWVtYmVyKSk7Ci0gIGlmIChmaWVsZCA9PSBOVUxMKSB7Ci0g
ICAgcmV0dXJuIEVHKHVuaW5pdGlhbGl6ZWRfenZhbF9wdHIpOwotICB9Ci0gIHp2YWwqIHJldHZh
bCA9IGxheW91dF9nZXQoc2VsZi0+ZGVzY3JpcHRvci0+bGF5b3V0LCBtZXNzYWdlX2RhdGEoc2Vs
ZiksIGZpZWxkIFRTUk1MU19DQyk7Ci0gIHJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyAgemVu
ZF9mdW5jdGlvbl9lbnRyeSBtZXNzYWdlX21ldGhvZHNbXSA9IHsKLSAgUEhQX01FKE1lc3NhZ2Us
IGVuY29kZSwgTlVMTCwgWkVORF9BQ0NfUFVCTElDKQotICB7TlVMTCwgTlVMTCwgTlVMTH0KLX07
Ci0KLS8qIHN0cmluZ3NpbmsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8vIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJl
IGZhY3RvcmVkIGludG8gYSBjb21tb24gdXBiIGNvbXBvbmVudC4KLQotdHlwZWRlZiBzdHJ1Y3Qg
ewotICB1cGJfYnl0ZXNoYW5kbGVyIGhhbmRsZXI7Ci0gIHVwYl9ieXRlc3Npbmsgc2luazsKLSAg
Y2hhciAqcHRyOwotICBzaXplX3QgbGVuLCBzaXplOwotfSBzdHJpbmdzaW5rOwotCi1zdGF0aWMg
dm9pZCAqc3RyaW5nc2lua19zdGFydCh2b2lkICpfc2luaywgY29uc3Qgdm9pZCAqaGQsIHNpemVf
dCBzaXplX2hpbnQpIHsKLSAgc3RyaW5nc2luayAqc2luayA9IF9zaW5rOwotICBzaW5rLT5sZW4g
PSAwOwotICByZXR1cm4gc2luazsKLX0KLQotc3RhdGljIHNpemVfdCBzdHJpbmdzaW5rX3N0cmlu
Zyh2b2lkICpfc2luaywgY29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgY29uc3QgdXBiX2J1ZmhhbmRsZSAq
aGFuZGxlKSB7Ci0gIHN0cmluZ3NpbmsgKnNpbmsgPSBfc2luazsKLSAgc2l6ZV90IG5ld19zaXpl
ID0gc2luay0+c2l6ZTsKLQotICBVUEJfVU5VU0VEKGhkKTsKLSAgVVBCX1VOVVNFRChoYW5kbGUp
OwotCi0gIHdoaWxlIChzaW5rLT5sZW4gKyBsZW4gPiBuZXdfc2l6ZSkgewotICAgIG5ld19zaXpl
ICo9IDI7Ci0gIH0KLQotICBpZiAobmV3X3NpemUgIT0gc2luay0+c2l6ZSkgewotICAgIHNpbmst
PnB0ciA9IHJlYWxsb2Moc2luay0+cHRyLCBuZXdfc2l6ZSk7Ci0gICAgc2luay0+c2l6ZSA9IG5l
d19zaXplOwotICB9Ci0KLSAgbWVtY3B5KHNpbmstPnB0ciArIHNpbmstPmxlbiwgcHRyLCBsZW4p
OwotICBzaW5rLT5sZW4gKz0gbGVuOwotCi0gIHJldHVybiBsZW47Ci19Ci0KLXZvaWQgc3RyaW5n
c2lua19pbml0KHN0cmluZ3NpbmsgKnNpbmspIHsKLSAgdXBiX2J5dGVzaGFuZGxlcl9pbml0KCZz
aW5rLT5oYW5kbGVyKTsKLSAgdXBiX2J5dGVzaGFuZGxlcl9zZXRzdGFydHN0cigmc2luay0+aGFu
ZGxlciwgc3RyaW5nc2lua19zdGFydCwgTlVMTCk7Ci0gIHVwYl9ieXRlc2hhbmRsZXJfc2V0c3Ry
aW5nKCZzaW5rLT5oYW5kbGVyLCBzdHJpbmdzaW5rX3N0cmluZywgTlVMTCk7Ci0KLSAgdXBiX2J5
dGVzc2lua19yZXNldCgmc2luay0+c2luaywgJnNpbmstPmhhbmRsZXIsIHNpbmspOwotCi0gIHNp
bmstPnNpemUgPSAzMjsKLSAgc2luay0+cHRyID0gbWFsbG9jKHNpbmstPnNpemUpOwotICBzaW5r
LT5sZW4gPSAwOwotfQotCi12b2lkIHN0cmluZ3NpbmtfdW5pbml0KHN0cmluZ3NpbmsgKnNpbmsp
IHsgZnJlZShzaW5rLT5wdHIpOyB9Ci0KLS8vIFN0YWNrLWFsbG9jYXRlZCBjb250ZXh0IGR1cmlu
ZyBhbiBlbmNvZGUvZGVjb2RlIG9wZXJhdGlvbi4gQ29udGFpbnMgdGhlIHVwYgotLy8gZW52aXJv
bm1lbnQgYW5kIGl0cyBzdGFjay1iYXNlZCBhbGxvY2F0b3IsIGFuIGluaXRpYWwgYnVmZmVyIGZv
ciBhbGxvY2F0aW9ucwotLy8gdG8gYXZvaWQgbWFsbG9jKCkgd2hlbiBwb3NzaWJsZSwgYW5kIGEg
dGVtcGxhdGUgZm9yIFBIUCBleGNlcHRpb24gbWVzc2FnZXMKLS8vIGlmIGFueSBlcnJvciBvY2N1
cnMuCi0jZGVmaW5lIFNUQUNLX0VOVl9TVEFDS0JZVEVTIDQwOTYKLXR5cGVkZWYgc3RydWN0IHsK
LSAgdXBiX2VudiBlbnY7Ci0gIHVwYl9zZWVkZWRhbGxvYyBhbGxvYzsKLSAgY29uc3QgY2hhciAq
cGhwX2Vycm9yX3RlbXBsYXRlOwotICBjaGFyIGFsbG9jYnVmW1NUQUNLX0VOVl9TVEFDS0JZVEVT
XTsKLX0gc3RhY2tlbnY7Ci0KLXN0YXRpYyB2b2lkIHN0YWNrZW52X2luaXQoc3RhY2tlbnYqIHNl
LCBjb25zdCBjaGFyKiBlcnJtc2cpOwotc3RhdGljIHZvaWQgc3RhY2tlbnZfdW5pbml0KHN0YWNr
ZW52KiBzZSk7Ci0KLS8vIENhbGxiYWNrIGludm9rZWQgYnkgdXBiIGlmIGFueSBlcnJvciBvY2N1
cnMgZHVyaW5nIHBhcnNpbmcgb3Igc2VyaWFsaXphdGlvbi4KLXN0YXRpYyBib29sIGVudl9lcnJv
cl9mdW5jKHZvaWQqIHVkLCBjb25zdCB1cGJfc3RhdHVzKiBzdGF0dXMpIHsKLSAgICBzdGFja2Vu
diogc2UgPSB1ZDsKLSAgICAvLyBGcmVlIHRoZSBlbnYgLS0gcmJfcmFpc2Ugd2lsbCBsb25nam1w
IHVwIHRoZSBzdGFjayBwYXN0IHRoZSBlbmNvZGUvZGVjb2RlCi0gICAgLy8gZnVuY3Rpb24gc28g
aXQgd291bGQgbm90IG90aGVyd2lzZSBoYXZlIGJlZW4gZnJlZWQuCi0gICAgc3RhY2tlbnZfdW5p
bml0KHNlKTsKLQotICAgIC8vIFRPRE8odGVib3JpbmcpOiBoYXZlIGEgd2F5IHRvIHZlcmlmeSB0
aGF0IHRoaXMgaXMgYWN0dWFsbHkgYSBwYXJzZSBlcnJvciwKLSAgICAvLyBpbnN0ZWFkIG9mIGp1
c3QgdGhyb3dpbmcgInBhcnNlIGVycm9yIiB1bmNvbmRpdGlvbmFsbHkuCi0gICAgemVuZF9lcnJv
cihFX0VSUk9SLCBzZS0+cGhwX2Vycm9yX3RlbXBsYXRlKTsKLSAgICAvLyBOZXZlciByZWFjaGVk
LgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgc3RhY2tlbnZfaW5pdChzdGFj
a2Vudiogc2UsIGNvbnN0IGNoYXIqIGVycm1zZykgewotICBzZS0+cGhwX2Vycm9yX3RlbXBsYXRl
ID0gZXJybXNnOwotICB1cGJfZW52X2luaXQoJnNlLT5lbnYpOwotICB1cGJfc2VlZGVkYWxsb2Nf
aW5pdCgmc2UtPmFsbG9jLCAmc2UtPmFsbG9jYnVmLCBTVEFDS19FTlZfU1RBQ0tCWVRFUyk7Ci0g
IHVwYl9lbnZfc2V0YWxsb2NmdW5jKCZzZS0+ZW52LCB1cGJfc2VlZGVkYWxsb2NfZ2V0YWxsb2Nm
dW5jKCZzZS0+YWxsb2MpLAotICAgICAgICAgICAgICAgICAgICAgICAmc2UtPmFsbG9jKTsKLSAg
dXBiX2Vudl9zZXRlcnJvcmZ1bmMoJnNlLT5lbnYsIGVudl9lcnJvcl9mdW5jLCBzZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHN0YWNrZW52X3VuaW5pdChzdGFja2Vudiogc2UpIHsKLSAgdXBiX2Vudl91
bmluaXQoJnNlLT5lbnYpOwotICB1cGJfc2VlZGVkYWxsb2NfdW5pbml0KCZzZS0+YWxsb2MpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVzc2FnZQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotc3RhdGljIGNvbnN0IHVwYl9oYW5kbGVycyogbXNnZGVmX3BiX3NlcmlhbGl6
ZV9oYW5kbGVycyhEZXNjcmlwdG9yKiBkZXNjKSB7Ci0gIGlmIChkZXNjLT5wYl9zZXJpYWxpemVf
aGFuZGxlcnMgPT0gTlVMTCkgewotICAgIGRlc2MtPnBiX3NlcmlhbGl6ZV9oYW5kbGVycyA9Ci0g
ICAgICAgIHVwYl9wYl9lbmNvZGVyX25ld2hhbmRsZXJzKGRlc2MtPm1zZ2RlZiwgJmRlc2MtPnBi
X3NlcmlhbGl6ZV9oYW5kbGVycyk7Ci0gIH0KLSAgcmV0dXJuIGRlc2MtPnBiX3NlcmlhbGl6ZV9o
YW5kbGVyczsKLX0KLQotUEhQX01FVEhPRChNZXNzYWdlLCBlbmNvZGUpIHsKLSAgRGVzY3JpcHRv
ciogZGVzYyA9IChEZXNjcmlwdG9yKil6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KAotICAg
ICAgQ0VfU1RBVElDX01FTUJFUlMoWl9PQkpDRV9QKGdldFRoaXMoKSkpWzBdIFRTUk1MU19DQyk7
Ci0KLSAgc3RyaW5nc2luayBzaW5rOwotICBzdHJpbmdzaW5rX2luaXQoJnNpbmspOwotCi0gIHsK
LSAgICBjb25zdCB1cGJfaGFuZGxlcnMqIHNlcmlhbGl6ZV9oYW5kbGVycyA9IG1zZ2RlZl9wYl9z
ZXJpYWxpemVfaGFuZGxlcnMoZGVzYyk7Ci0KLSAgICBzdGFja2VudiBzZTsKLSAgICB1cGJfcGJf
ZW5jb2RlciogZW5jb2RlcjsKLQotICAgIHN0YWNrZW52X2luaXQoJnNlLCAiRXJyb3Igb2NjdXJy
ZWQgZHVyaW5nIGVuY29kaW5nOiAlcyIpOwotICAgIGVuY29kZXIgPSB1cGJfcGJfZW5jb2Rlcl9j
cmVhdGUoJnNlLmVudiwgc2VyaWFsaXplX2hhbmRsZXJzLCAmc2luay5zaW5rKTsKLQotICAgIHB1
dG1zZyhnZXRUaGlzKCksIGRlc2MsIHVwYl9wYl9lbmNvZGVyX2lucHV0KGVuY29kZXIpLCAwKTsK
LQotICAgIFJFVFZBTF9TVFJJTkdMKHNpbmsucHRyLCBzaW5rLmxlbiwgMSk7Ci0KLSAgICBzdGFj
a2Vudl91bmluaXQoJnNlKTsKLSAgICBzdHJpbmdzaW5rX3VuaW5pdCgmc2luayk7Ci0gIH0KLX0K
LQotdm9pZCBtZXNzYWdlX2ZyZWUodm9pZCAqIG9iamVjdCBUU1JNTFNfREMpIHsKLSAgRlJFRShv
YmplY3QpOwotfQotCi16ZW5kX29iamVjdF92YWx1ZSBtZXNzYWdlX2NyZWF0ZSh6ZW5kX2NsYXNz
X2VudHJ5KiBjZSBUU1JNTFNfREMpIHsKLSAgemVuZF9vYmplY3RfdmFsdWUgcmV0dXJuX3ZhbHVl
OwotCi0gIHp2YWwqIHBocF9kZXNjcmlwdG9yID0gZ2V0X2RlZl9vYmooY2UpOwotCi0gIERlc2Ny
aXB0b3IqIGRlc2MgPSB6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KHBocF9kZXNjcmlwdG9y
IFRTUk1MU19DQyk7Ci0gIE1lc3NhZ2VIZWFkZXIqIG1zZyA9IChNZXNzYWdlSGVhZGVyKilBTExP
Q19OKAotICAgICAgdWludDhfdCwgc2l6ZW9mKE1lc3NhZ2VIZWFkZXIpICsgZGVzYy0+bGF5b3V0
LT5zaXplKTsKLSAgbWVtc2V0KG1lc3NhZ2VfZGF0YShtc2cpLCAwLCBkZXNjLT5sYXlvdXQtPnNp
emUpOwotCi0gIC8vIFdlIHdyYXAgZmlyc3Qgc28gdGhhdCBldmVyeXRoaW5nIGluIHRoZSBtZXNz
YWdlIG9iamVjdCBpcyBHQy1yb290ZWQgaW4gY2FzZQotICAvLyBhIGNvbGxlY3Rpb24gaGFwcGVu
cyBkdXJpbmcgb2JqZWN0IGNyZWF0aW9uIGluIGxheW91dF9pbml0KCkuCi0gIG1zZy0+ZGVzY3Jp
cHRvciA9IGRlc2M7Ci0KLSAgbGF5b3V0X2luaXQoZGVzYy0+bGF5b3V0LCBtZXNzYWdlX2RhdGEo
bXNnKSk7Ci0gIHplbmRfb2JqZWN0X3N0ZF9pbml0KCZtc2ctPnN0ZCwgY2UgVFNSTUxTX0NDKTsK
LQotICByZXR1cm5fdmFsdWUuaGFuZGxlID0gemVuZF9vYmplY3RzX3N0b3JlX3B1dCgKLSAgICAg
IG1zZywgKHplbmRfb2JqZWN0c19zdG9yZV9kdG9yX3QpemVuZF9vYmplY3RzX2Rlc3Ryb3lfb2Jq
ZWN0LAotICAgICAgbWVzc2FnZV9mcmVlLCBOVUxMIFRTUk1MU19DQyk7Ci0KLSAgcmV0dXJuX3Zh
bHVlLmhhbmRsZXJzID0gUFJPVE9CVUZfRyhtZXNzYWdlX2hhbmRsZXJzKTsKLSAgcmV0dXJuIHJl
dHVybl92YWx1ZTsKLX0KLQotY29uc3QgemVuZF9jbGFzc19lbnRyeSogYnVpbGRfY2xhc3NfZnJv
bV9kZXNjcmlwdG9yKAotICAgIHp2YWwqIHBocF9kZXNjcmlwdG9yIFRTUk1MU19EQykgewotICBE
ZXNjcmlwdG9yKiBkZXNjID0gcGhwX3RvX2Rlc2NyaXB0b3IocGhwX2Rlc2NyaXB0b3IpOwotICBp
ZiAoZGVzYy0+bGF5b3V0ID09IE5VTEwpIHsKLSAgICBNZXNzYWdlTGF5b3V0KiBsYXlvdXQgPSBj
cmVhdGVfbGF5b3V0KGRlc2MtPm1zZ2RlZik7Ci0gICAgZGVzYy0+bGF5b3V0ID0gbGF5b3V0Owot
ICB9Ci0gIC8vIFRPRE8odGVib3JpbmcpOiBBZGQgaXQgYmFjay4KLSAgLy8gaWYgKGRlc2MtPmZp
bGxfbWV0aG9kID09IE5VTEwpIHsKLSAgLy8gICBkZXNjLT5maWxsX21ldGhvZCA9IG5ld19maWxs
bXNnX2RlY29kZXJtZXRob2QoZGVzYywgJmRlc2MtPmZpbGxfbWV0aG9kKTsKLSAgLy8gfQotCi0g
IGNvbnN0IGNoYXIqIG5hbWUgPSB1cGJfbXNnZGVmX2Z1bGxuYW1lKGRlc2MtPm1zZ2RlZik7Ci0g
IGlmIChuYW1lID09IE5VTEwpIHsKLSAgICB6ZW5kX2Vycm9yKEVfRVJST1IsICJEZXNjcmlwdG9y
IGRvZXMgbm90IGhhdmUgYXNzaWduZWQgbmFtZS4iKTsKLSAgfQotCi0gIHplbmRfY2xhc3NfZW50
cnkgY2xhc3NfZW50cnk7Ci0gIElOSVRfQ0xBU1NfRU5UUllfRVgoY2xhc3NfZW50cnksIG5hbWUs
IHN0cmxlbihuYW1lKSwgbWVzc2FnZV9tZXRob2RzKTsKLSAgemVuZF9jbGFzc19lbnRyeSogcmVn
aXN0ZXJlZF9jZSA9Ci0gICAgICB6ZW5kX3JlZ2lzdGVyX2ludGVybmFsX2NsYXNzKCZjbGFzc19l
bnRyeSBUU1JNTFNfQ0MpOwotCi0gIGFkZF9kZWZfb2JqKHJlZ2lzdGVyZWRfY2UsIHBocF9kZXNj
cmlwdG9yKTsKLQotICBpZiAoUFJPVE9CVUZfRyhtZXNzYWdlX2hhbmRsZXJzKSA9PSBOVUxMKSB7
Ci0gICAgUFJPVE9CVUZfRyhtZXNzYWdlX2hhbmRsZXJzKSA9IEFMTE9DKHplbmRfb2JqZWN0X2hh
bmRsZXJzKTsKLSAgICBtZW1jcHkoUFJPVE9CVUZfRyhtZXNzYWdlX2hhbmRsZXJzKSwgemVuZF9n
ZXRfc3RkX29iamVjdF9oYW5kbGVycygpLAotICAgICAgICAgICBzaXplb2YoemVuZF9vYmplY3Rf
aGFuZGxlcnMpKTsKLSAgICBQUk9UT0JVRl9HKG1lc3NhZ2VfaGFuZGxlcnMpLT53cml0ZV9wcm9w
ZXJ0eSA9IG1lc3NhZ2Vfc2V0X3Byb3BlcnR5OwotICAgIFBST1RPQlVGX0cobWVzc2FnZV9oYW5k
bGVycyktPnJlYWRfcHJvcGVydHkgPSBtZXNzYWdlX2dldF9wcm9wZXJ0eTsKLSAgfQotCi0gIHJl
Z2lzdGVyZWRfY2UtPmNyZWF0ZV9vYmplY3QgPSBtZXNzYWdlX2NyZWF0ZTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvcGhwL2V4dC9nb29nbGUvcHJvdG9idWYvcHJvdG9idWYuYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGhwL2V4dC9nb29nbGUvcHJv
dG9idWYvcHJvdG9idWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFhY2U4YjA2
YzU2Y2U2MDA5ZjY4ZmMzNWEyMjJlNjYzOTVkMTRjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3BocC9leHQvZ29vZ2xlL3Byb3RvYnVmL3Byb3RvYnVmLmMK
KysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0jaW5jbHVkZSAicHJvdG9idWYuaCIKLQot
I2luY2x1ZGUgPHplbmRfaGFzaC5oPgotCi1aRU5EX0RFQ0xBUkVfTU9EVUxFX0dMT0JBTFMocHJv
dG9idWYpCi1zdGF0aWMgUEhQX0dJTklUX0ZVTkNUSU9OKHByb3RvYnVmKTsKLXN0YXRpYyBQSFBf
R1NIVVRET1dOX0ZVTkNUSU9OKHByb3RvYnVmKTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIEdsb2JhbCBtYXAgZnJvbSB1cGIge21zZyxlbnVtfWRlZnMgdG8gd3JhcHBlciBEZXNjcmlw
dG9yL0VudW1EZXNjcmlwdG9yCi0vLyBpbnN0YW5jZXMuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi12b2lkIGFkZF9kZWZfb2JqKGNvbnN0IHZvaWQqIGRlZiwgenZhbCogdmFsdWUpIHsKLSAg
dWludCBuSW5kZXggPSAodWxvbmcpZGVmICYgUFJPVE9CVUZfRyh1cGJfZGVmX3RvX3BocF9vYmpf
bWFwKS5uVGFibGVNYXNrOwotCi0gIHp2YWwqIHBEZXN0ID0gTlVMTDsKLSAgWl9BRERSRUZfUCh2
YWx1ZSk7Ci0gIHplbmRfaGFzaF9pbmRleF91cGRhdGUoJlBST1RPQlVGX0codXBiX2RlZl90b19w
aHBfb2JqX21hcCksICh6ZW5kX3Vsb25nKWRlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAm
dmFsdWUsIHNpemVvZih6dmFsKiksICZwRGVzdCk7Ci19Ci0KLXp2YWwqIGdldF9kZWZfb2JqKGNv
bnN0IHZvaWQqIGRlZikgewotICB6dmFsKiogdmFsdWU7Ci0gIGlmICh6ZW5kX2hhc2hfaW5kZXhf
ZmluZCgmUFJPVE9CVUZfRyh1cGJfZGVmX3RvX3BocF9vYmpfbWFwKSwgKHplbmRfdWxvbmcpZGVm
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlKSA9PSBGQUlMVVJFKSB7Ci0gICAg
emVuZF9lcnJvcihFX0VSUk9SLCAiUEhQIG9iamVjdCBub3QgZm91bmQgZm9yIGdpdmVuIGRlZmlu
aXRpb24uXG4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICByZXR1cm4gKnZhbHVlOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVXRpbGl0aWVzLgotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLy8gZGVmaW5lIHRoZSBmdW5jdGlvbihzKSB3ZSB3YW50IHRvIGFkZAotemVu
ZF9mdW5jdGlvbl9lbnRyeSBwcm90b2J1Zl9mdW5jdGlvbnNbXSA9IHsKLSAgWkVORF9GRShnZXRf
Z2VuZXJhdGVkX3Bvb2wsIE5VTEwpCi0gIFpFTkRfRkVfRU5ECi19OwotCi0vLyAicHJvdG9idWZf
ZnVuY3Rpb25zIiByZWZlcnMgdG8gdGhlIHN0cnVjdCBkZWZpbmVkIGFib3ZlCi0vLyB3ZSdsbCBi
ZSBmaWxsaW5nIGluIG1vcmUgb2YgdGhpcyBsYXRlcjogeW91IGNhbiB1c2UgdGhpcyB0byBzcGVj
aWZ5Ci0vLyBnbG9iYWxzLCBwaHAuaW5pIGluZm8sIHN0YXJ0dXAgYW5kIHRlYXJkb3duIGZ1bmN0
aW9ucywgZXRjLgotemVuZF9tb2R1bGVfZW50cnkgcHJvdG9idWZfbW9kdWxlX2VudHJ5ID0gewot
ICBTVEFOREFSRF9NT0RVTEVfSEVBREVSLAotICBQSFBfUFJPVE9CVUZfRVhUTkFNRSwgLy8gZXh0
ZW5zaW9uIG5hbWUKLSAgcHJvdG9idWZfZnVuY3Rpb25zLCAgIC8vIGZ1bmN0aW9uIGxpc3QKLSAg
UEhQX01JTklUKHByb3RvYnVmKSwgIC8vIHByb2Nlc3Mgc3RhcnR1cAotICBOVUxMLCAgLy8gcHJv
Y2VzcyBzaHV0ZG93bgotICBOVUxMLCAgLy8gcmVxdWVzdCBzdGFydHVwCi0gIE5VTEwsICAvLyBy
ZXF1ZXN0IHNodXRkb3duCi0gIE5VTEwsICAvLyBleHRlbnNpb24gaW5mbwotICBQSFBfUFJPVE9C
VUZfVkVSU0lPTiwgLy8gZXh0ZW5zaW9uIHZlcnNpb24KLSAgUEhQX01PRFVMRV9HTE9CQUxTKHBy
b3RvYnVmKSwgIC8vIGdsb2JhbHMgZGVzY3JpcHRvcgotICBQSFBfR0lOSVQocHJvdG9idWYpLCAv
LyBnbG9iYWxzIGN0b3IKLSAgUEhQX0dTSFVURE9XTihwcm90b2J1ZiksICAvLyBnbG9iYWxzIGR0
b3IKLSAgTlVMTCwgIC8vIHBvc3QgZGVhY3RpdmF0ZQotICBTVEFOREFSRF9NT0RVTEVfUFJPUEVS
VElFU19FWAotfTsKLQotLy8gaW5zdGFsbCBtb2R1bGUKLVpFTkRfR0VUX01PRFVMRShwcm90b2J1
ZikKLQotLy8gZ2xvYmFsIHZhcmlhYmxlcwotc3RhdGljIFBIUF9HSU5JVF9GVU5DVElPTihwcm90
b2J1ZikgewotICBwcm90b2J1Zl9nbG9iYWxzLT5nZW5lcmF0ZWRfcG9vbCA9IE5VTEw7Ci0gIGdl
bmVyYXRlZF9wb29sID0gTlVMTDsKLSAgcHJvdG9idWZfZ2xvYmFscy0+bWVzc2FnZV9oYW5kbGVy
cyA9IE5VTEw7Ci0gIHplbmRfaGFzaF9pbml0KCZwcm90b2J1Zl9nbG9iYWxzLT51cGJfZGVmX3Rv
X3BocF9vYmpfbWFwLCAxNiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgWlZBTF9QVFJfRFRPUiwg
MCk7Ci19Ci0KLXN0YXRpYyBQSFBfR1NIVVRET1dOX0ZVTkNUSU9OKHByb3RvYnVmKSB7Ci0gIGlm
IChwcm90b2J1Zl9nbG9iYWxzLT5nZW5lcmF0ZWRfcG9vbCAhPSBOVUxMKSB7Ci0gICAgRlJFRV9a
VkFMKHByb3RvYnVmX2dsb2JhbHMtPmdlbmVyYXRlZF9wb29sKTsKLSAgfQotICBpZiAocHJvdG9i
dWZfZ2xvYmFscy0+bWVzc2FnZV9oYW5kbGVycyAhPSBOVUxMKSB7Ci0gICAgRlJFRShwcm90b2J1
Zl9nbG9iYWxzLT5tZXNzYWdlX2hhbmRsZXJzKTsKLSAgfQotICB6ZW5kX2hhc2hfZGVzdHJveSgm
cHJvdG9idWZfZ2xvYmFscy0+dXBiX2RlZl90b19waHBfb2JqX21hcCk7Ci19Ci0KLVBIUF9NSU5J
VF9GVU5DVElPTihwcm90b2J1ZikgewotICBkZXNjcmlwdG9yX3Bvb2xfaW5pdChUU1JNTFNfQyk7
Ci0gIGRlc2NyaXB0b3JfaW5pdChUU1JNTFNfQyk7Ci0gIG1lc3NhZ2VfYnVpbGRlcl9jb250ZXh0
X2luaXQoVFNSTUxTX0MpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9waHAvZXh0L2dvb2dsZS9wcm90b2J1Zi9w
cm90b2J1Zi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9waHAvZXh0L2dvb2dsZS9wcm90b2J1Zi9wcm90b2J1Zi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmOTAzODU1MGE3NmRlNjRkYjgxYWUyMmE1MzA3ODQzYjY4NjM4
Y2ZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGhwL2V4
dC9nb29nbGUvcHJvdG9idWYvcHJvdG9idWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCww
IEBACi0jaWZuZGVmIF9fR09PR0xFX1BST1RPQlVGX1BIUF9QUk9UT0JVRl9IX18KLSNkZWZpbmUg
X19HT09HTEVfUFJPVE9CVUZfUEhQX1BST1RPQlVGX0hfXwotCi0jaW5jbHVkZSA8cGhwLmg+Ci0K
LSNpbmNsdWRlICJ1cGIuaCIKLQotI2RlZmluZSBQSFBfUFJPVE9CVUZfRVhUTkFNRSAicHJvdG9i
dWYiCi0jZGVmaW5lIFBIUF9QUk9UT0JVRl9WRVJTSU9OICIwLjAxIgotCi0vLyBGb3J3YXJkIGRl
Y2xzLgotc3RydWN0IERlc2NyaXB0b3JQb29sOwotc3RydWN0IERlc2NyaXB0b3I7Ci1zdHJ1Y3Qg
RmllbGREZXNjcmlwdG9yOwotc3RydWN0IEVudW1EZXNjcmlwdG9yOwotc3RydWN0IE1lc3NhZ2VM
YXlvdXQ7Ci1zdHJ1Y3QgTWVzc2FnZUZpZWxkOwotc3RydWN0IE1lc3NhZ2VIZWFkZXI7Ci1zdHJ1
Y3QgTWVzc2FnZUJ1aWxkZXJDb250ZXh0Owotc3RydWN0IEVudW1CdWlsZGVyQ29udGV4dDsKLQot
dHlwZWRlZiBzdHJ1Y3QgRGVzY3JpcHRvclBvb2wgRGVzY3JpcHRvclBvb2w7Ci10eXBlZGVmIHN0
cnVjdCBEZXNjcmlwdG9yIERlc2NyaXB0b3I7Ci10eXBlZGVmIHN0cnVjdCBGaWVsZERlc2NyaXB0
b3IgRmllbGREZXNjcmlwdG9yOwotdHlwZWRlZiBzdHJ1Y3QgT25lb2ZEZXNjcmlwdG9yIE9uZW9m
RGVzY3JpcHRvcjsKLXR5cGVkZWYgc3RydWN0IEVudW1EZXNjcmlwdG9yIEVudW1EZXNjcmlwdG9y
OwotdHlwZWRlZiBzdHJ1Y3QgTWVzc2FnZUxheW91dCBNZXNzYWdlTGF5b3V0OwotdHlwZWRlZiBz
dHJ1Y3QgTWVzc2FnZUZpZWxkIE1lc3NhZ2VGaWVsZDsKLXR5cGVkZWYgc3RydWN0IE1lc3NhZ2VI
ZWFkZXIgTWVzc2FnZUhlYWRlcjsKLXR5cGVkZWYgc3RydWN0IE1lc3NhZ2VCdWlsZGVyQ29udGV4
dCBNZXNzYWdlQnVpbGRlckNvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCBPbmVvZkJ1aWxkZXJDb250
ZXh0IE9uZW9mQnVpbGRlckNvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCBFbnVtQnVpbGRlckNvbnRl
eHQgRW51bUJ1aWxkZXJDb250ZXh0OwotCi1leHRlcm4gemVuZF9jbGFzc19lbnRyeSogYnVpbGRl
cl90eXBlOwotZXh0ZXJuIHplbmRfY2xhc3NfZW50cnkqIGRlc2NyaXB0b3JfdHlwZTsKLWV4dGVy
biB6ZW5kX2NsYXNzX2VudHJ5KiBtZXNzYWdlX2J1aWxkZXJfY29udGV4dF90eXBlOwotCi1leHRl
cm4gRGVzY3JpcHRvclBvb2wqIGdlbmVyYXRlZF9wb29sOyAgLy8gVGhlIGFjdHVhbCBnZW5lcmF0
ZWQgcG9vbAotCi1aRU5EX0JFR0lOX01PRFVMRV9HTE9CQUxTKHByb3RvYnVmKQotICB6dmFsKiBn
ZW5lcmF0ZWRfcG9vbDsKLSAgemVuZF9vYmplY3RfaGFuZGxlcnMqIG1lc3NhZ2VfaGFuZGxlcnM7
Ci0gIEhhc2hUYWJsZSB1cGJfZGVmX3RvX3BocF9vYmpfbWFwOwotWkVORF9FTkRfTU9EVUxFX0dM
T0JBTFMocHJvdG9idWYpCi0KLVpFTkRfREVDTEFSRV9NT0RVTEVfR0xPQkFMUyhwcm90b2J1ZikK
LQotI2lmZGVmIFpUUwotI2RlZmluZSBQUk9UT0JVRl9HKHYpIFRTUk1HKHByb3RvYnVmX2dsb2Jh
bHNfaWQsIHplbmRfcHJvdG9idWZfZ2xvYmFscyosIHYpCi0jZWxzZQotI2RlZmluZSBQUk9UT0JV
Rl9HKHYpIChwcm90b2J1Zl9nbG9iYWxzLnYpCi0jZW5kaWYKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIFBIUCBmdW5jdGlvbnMgYW5kIGdsb2JhbCB2YXJpYWJsZXMuCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1QSFBfTUlOSVRfRlVOQ1RJT04ocHJvdG9idWYpOwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUEhQIGNsYXNzIHN0cnVjdHVyZS4KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLXN0cnVjdCBEZXNjcmlwdG9yUG9vbCB7Ci0gIHplbmRfb2JqZWN0IHN0ZDsK
LSAgdXBiX3N5bXRhYiogc3ltdGFiOwotICBIYXNoVGFibGUqIHBlbmRpbmdfbGlzdDsKLX07Ci0K
LXN0cnVjdCBEZXNjcmlwdG9yIHsKLSAgemVuZF9vYmplY3Qgc3RkOwotICBjb25zdCB1cGJfbXNn
ZGVmKiBtc2dkZWY7Ci0gIE1lc3NhZ2VMYXlvdXQqIGxheW91dDsKLSAgLy8genZhbCoga2xhc3M7
ICAvLyBiZWdpbnMgYXMgTlVMTAotICAvLyBjb25zdCB1cGJfaGFuZGxlcnMqIGZpbGxfaGFuZGxl
cnM7Ci0gIC8vIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QqIGZpbGxfbWV0aG9kOwotICBjb25z
dCB1cGJfaGFuZGxlcnMqIHBiX3NlcmlhbGl6ZV9oYW5kbGVyczsKLSAgLy8gY29uc3QgdXBiX2hh
bmRsZXJzKiBqc29uX3NlcmlhbGl6ZV9oYW5kbGVyczsKLSAgLy8gSGFuZGxlcnMgaG9sZCB0eXBl
IGNsYXNzIHJlZmVyZW5jZXMgZm9yIHN1Yi1tZXNzYWdlIGZpZWxkcyBkaXJlY3RseSBpbiBzb21l
Ci0gIC8vIGNhc2VzLiBXZSBuZWVkIHRvIGtlZXAgdGhlc2Ugcm9vdGVkIGJlY2F1c2UgdGhleSBt
aWdodCBvdGhlcndpc2UgYmUKLSAgLy8gY29sbGVjdGVkLgotICAvLyB6dmFsX2FycmF5IHR5cGVj
bGFzc19yZWZlcmVuY2VzOwotfTsKLQotc3RydWN0IEZpZWxkRGVzY3JpcHRvciB7Ci0gIHplbmRf
b2JqZWN0IHN0ZDsKLSAgY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZGRlZjsKLX07Ci0KLXN0cnVj
dCBPbmVvZkRlc2NyaXB0b3IgewotICB6ZW5kX29iamVjdCBzdGQ7Ci0gIGNvbnN0IHVwYl9vbmVv
ZmRlZiogb25lb2ZkZWY7Ci19OwotCi1zdHJ1Y3QgRW51bURlc2NyaXB0b3IgewotICB6ZW5kX29i
amVjdCBzdGQ7Ci0gIGNvbnN0IHVwYl9lbnVtZGVmKiBlbnVtZGVmOwotICAvLyB6dmFsKiBtb2R1
bGU7ICAvLyBiZWdpbnMgYXMgTlVMTAotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IE5hdGl2ZSBzbG90IHN0b3JhZ2UgYWJzdHJhY3Rpb24uCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0jZGVmaW5lIE5BVElWRV9TTE9UX01BWF9TSVpFIHNpemVvZih1aW50NjRfdCkKLQotc2l6
ZV90IG5hdGl2ZV9zbG90X3NpemUodXBiX2ZpZWxkdHlwZV90IHR5cGUpOwotCi0jZGVmaW5lIE1B
UF9LRVlfRklFTEQgMQotI2RlZmluZSBNQVBfVkFMVUVfRklFTEQgMgotCi0vLyBPbmVvZiBjYXNl
IHNsb3QgdmFsdWUgdG8gaW5kaWNhdGUgdGhhdCBubyBvbmVvZiBjYXNlIGlzIHNldC4gVGhlIHZh
bHVlIGAwYCBpcwotLy8gc2FmZSBiZWNhdXNlIGZpZWxkIG51bWJlcnMgYXJlIHVzZWQgYXMgY2Fz
ZSBpZGVudGlmaWVycywgYW5kIG5vIGZpZWxkIGNhbgotLy8gaGF2ZSBhIG51bWJlciBvZiAwLgot
I2RlZmluZSBPTkVPRl9DQVNFX05PTkUgMAotCi0vLyBUaGVzZSBvcGVyYXRlIG9uIGEgbWFwIGZp
ZWxkIChpLmUuLCBhIHJlcGVhdGVkIGZpZWxkIG9mIHN1Ym1lc3NhZ2VzIHdob3NlCi0vLyBzdWJt
ZXNzYWdlIHR5cGUgaXMgYSBtYXAtZW50cnkgbXNnZGVmKS4KLWJvb2wgaXNfbWFwX2ZpZWxkKGNv
bnN0IHVwYl9maWVsZGRlZiogZmllbGQpOwotY29uc3QgdXBiX2ZpZWxkZGVmKiBtYXBfZmllbGRf
a2V5KGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQpOwotY29uc3QgdXBiX2ZpZWxkZGVmKiBtYXBf
ZmllbGRfdmFsdWUoY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZCk7Ci0KLS8vIFRoZXNlIG9wZXJh
dGUgb24gYSBtYXAtZW50cnkgbXNnZGVmLgotY29uc3QgdXBiX2ZpZWxkZGVmKiBtYXBfZW50cnlf
a2V5KGNvbnN0IHVwYl9tc2dkZWYqIG1zZ2RlZik7Ci1jb25zdCB1cGJfZmllbGRkZWYqIG1hcF9l
bnRyeV92YWx1ZShjb25zdCB1cGJfbXNnZGVmKiBtc2dkZWYpOwotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gTWVzc2FnZSBsYXlvdXQgLyBzdG9yYWdlLgotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotI2RlZmluZSBNRVNTQUdFX0ZJRUxEX05PX0NBU0UgKChzaXplX3QpLTEpCi0KLXN0
cnVjdCBNZXNzYWdlRmllbGQgewotICBzaXplX3Qgb2Zmc2V0OwotICBzaXplX3QgY2FzZV9vZmZz
ZXQ7ICAvLyBmb3Igb25lb2ZzLCBhIHVpbnQzMi4gRWxzZSwgTUVTU0FHRV9GSUVMRF9OT19DQVNF
LgotfTsKLQotc3RydWN0IE1lc3NhZ2VMYXlvdXQgewotICBjb25zdCB1cGJfbXNnZGVmKiBtc2dk
ZWY7Ci0gIE1lc3NhZ2VGaWVsZCogZmllbGRzOwotICBzaXplX3Qgc2l6ZTsKLX07Ci0KLXZvaWQg
bGF5b3V0X2luaXQoTWVzc2FnZUxheW91dCogbGF5b3V0LCB2b2lkKiBzdG9yYWdlKTsKLXp2YWwq
IGxheW91dF9nZXQoTWVzc2FnZUxheW91dCogbGF5b3V0LCBjb25zdCB2b2lkKiBzdG9yYWdlLAot
ICAgICAgICAgICAgICAgICBjb25zdCB1cGJfZmllbGRkZWYqIGZpZWxkIFRTUk1MU19EQyk7Ci1N
ZXNzYWdlTGF5b3V0KiBjcmVhdGVfbGF5b3V0KGNvbnN0IHVwYl9tc2dkZWYqIG1zZ2RlZik7Ci12
b2lkIGZyZWVfbGF5b3V0KE1lc3NhZ2VMYXlvdXQqIGxheW91dCk7Ci16dmFsKiBuYXRpdmVfc2xv
dF9nZXQodXBiX2ZpZWxkdHlwZV90IHR5cGUsIC8qVkFMVUUgdHlwZV9jbGFzcywqLwotICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIG1lbW9yeSBUU1JNTFNfREMpOwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gTWVzc2FnZSBjbGFzcyBjcmVhdGlvbi4KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLXN0cnVjdCBNZXNzYWdlSGVhZGVyIHsKLSAgemVuZF9vYmplY3Qgc3Rk
OwotICBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yOyAgLy8ga2VwdCBhbGl2ZSBieSBzZWxmLmNsYXNz
LmRlc2NyaXB0b3IgcmVmZXJlbmNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0
YSBjb21lcyBhZnRlciB0aGlzLgotfTsKLQotc3RydWN0IE1lc3NhZ2VCdWlsZGVyQ29udGV4dCB7
Ci0gIHplbmRfb2JqZWN0IHN0ZDsKLSAgenZhbCogZGVzY3JpcHRvcjsKLSAgenZhbCogcG9vbDsK
LX07Ci0KLXN0cnVjdCBPbmVvZkJ1aWxkZXJDb250ZXh0IHsKLSAgemVuZF9vYmplY3Qgc3RkOwot
ICAvLyBWQUxVRSBkZXNjcmlwdG9yOwotICAvLyBWQUxVRSBidWlsZGVyOwotfTsKLQotc3RydWN0
IEVudW1CdWlsZGVyQ29udGV4dCB7Ci0gIHplbmRfb2JqZWN0IHN0ZDsKLSAgLy8gVkFMVUUgZW51
bWRlc2M7Ci19OwotCi0vLyBGb3J3YXJkLWRlY2xhcmUgYWxsIG9mIHRoZSBQSFAgbWV0aG9kIGlt
cGxlbWVudGF0aW9ucy4KLQotRGVzY3JpcHRvclBvb2wqIHBocF90b19kZXNjcmlwdG9yX3Bvb2wo
enZhbCogdmFsdWUgVFNSTUxTX0RDKTsKLXplbmRfb2JqZWN0X3ZhbHVlIGRlc2NyaXB0b3JfcG9v
bF9jcmVhdGUoemVuZF9jbGFzc19lbnRyeSAqY2UgVFNSTUxTX0RDKTsKLXZvaWQgZGVzY3JpcHRv
cl9wb29sX2ZyZWVfYyhEZXNjcmlwdG9yUG9vbCogb2JqZWN0IFRTUk1MU19EQyk7Ci12b2lkIGRl
c2NyaXB0b3JfcG9vbF9mcmVlKHZvaWQqIG9iamVjdCBUU1JNTFNfREMpOwotdm9pZCBkZXNjcmlw
dG9yX3Bvb2xfaW5pdF9jX2luc3RhbmNlKERlc2NyaXB0b3JQb29sKiBwb29sIFRTUk1MU19EQyk7
Ci1QSFBfTUVUSE9EKERlc2NyaXB0b3JQb29sLCBhZGRNZXNzYWdlKTsKLVBIUF9NRVRIT0QoRGVz
Y3JpcHRvclBvb2wsIGZpbmFsaXplKTsKLQotRGVzY3JpcHRvciogcGhwX3RvX2Rlc2NyaXB0b3Io
enZhbCogdmFsdWUgVFNSTUxTX0RDKTsKLXplbmRfb2JqZWN0X3ZhbHVlIGRlc2NyaXB0b3JfY3Jl
YXRlKHplbmRfY2xhc3NfZW50cnkgKmNlIFRTUk1MU19EQyk7Ci12b2lkIGRlc2NyaXB0b3JfaW5p
dF9jX2luc3RhbmNlKERlc2NyaXB0b3IqIGludGVybiBUU1JNTFNfREMpOwotdm9pZCBkZXNjcmlw
dG9yX2ZyZWVfYyhEZXNjcmlwdG9yKiBvYmplY3QgVFNSTUxTX0RDKTsKLXZvaWQgZGVzY3JpcHRv
cl9mcmVlKHZvaWQqIG9iamVjdCBUU1JNTFNfREMpOwotdm9pZCBkZXNjcmlwdG9yX25hbWVfc2V0
KERlc2NyaXB0b3IgKmRlc2MsIGNvbnN0IGNoYXIgKm5hbWUpOwotCi1NZXNzYWdlQnVpbGRlckNv
bnRleHQqIHBocF90b19tZXNzYWdlX2J1aWxkZXJfY29udGV4dCh6dmFsKiB2YWx1ZSBUU1JNTFNf
REMpOwotemVuZF9vYmplY3RfdmFsdWUgbWVzc2FnZV9idWlsZGVyX2NvbnRleHRfY3JlYXRlKAot
ICAgIHplbmRfY2xhc3NfZW50cnkqIGNlIFRTUk1MU19EQyk7Ci12b2lkIG1lc3NhZ2VfYnVpbGRl
cl9jb250ZXh0X2luaXRfY19pbnN0YW5jZSgKLSAgICBNZXNzYWdlQnVpbGRlckNvbnRleHQqIGlu
dGVybiBUU1JNTFNfREMpOwotdm9pZCBtZXNzYWdlX2J1aWxkZXJfY29udGV4dF9mcmVlX2MoTWVz
c2FnZUJ1aWxkZXJDb250ZXh0KiBvYmplY3QgVFNSTUxTX0RDKTsKLXZvaWQgbWVzc2FnZV9idWls
ZGVyX2NvbnRleHRfZnJlZSh2b2lkKiBvYmplY3QgVFNSTUxTX0RDKTsKLVBIUF9NRVRIT0QoTWVz
c2FnZUJ1aWxkZXJDb250ZXh0LCBvcHRpb25hbCk7Ci1QSFBfTUVUSE9EKE1lc3NhZ2VCdWlsZGVy
Q29udGV4dCwgZmluYWxpemVUb1Bvb2wpOwotCi1QSFBfTUVUSE9EKE1lc3NhZ2UsIGVuY29kZSk7
Ci1jb25zdCB6ZW5kX2NsYXNzX2VudHJ5KiBidWlsZF9jbGFzc19mcm9tX2Rlc2NyaXB0b3IoCi0g
ICAgenZhbCogcGhwX2Rlc2NyaXB0b3IgVFNSTUxTX0RDKTsKLQotUEhQX0ZVTkNUSU9OKGdldF9n
ZW5lcmF0ZWRfcG9vbCk7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBHbG9iYWwgbWFw
IGZyb20gdXBiIHttc2csZW51bX1kZWZzIHRvIHdyYXBwZXIgRGVzY3JpcHRvci9FbnVtRGVzY3Jp
cHRvcgotLy8gaW5zdGFuY2VzLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIGFkZF9k
ZWZfb2JqKGNvbnN0IHZvaWQqIGRlZiwgenZhbCogdmFsdWUpOwotenZhbCogZ2V0X2RlZl9vYmoo
Y29uc3Qgdm9pZCogZGVmKTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFV0aWxpdGll
cy4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFBIUCBBcnJheSB1dGlscy4KLSNkZWZp
bmUgWl9BUlJWQUxfU0laRV9QKHp2YWxfcCkgemVuZF9oYXNoX251bV9lbGVtZW50cyhaX0FSUlZB
TF9QKHp2YWxfcCkpCi0jZGVmaW5lIFpfQVJSVkFMX0JFR0lOX1AoenZhbF9wKSBaX0FSUlZBTF9Q
KHp2YWxfcCktPnBMaXN0SGVhZAotI2RlZmluZSBaX0JVQ0tFVF9ORVhUX1BQKGJ1Y2tldF9wcCkg
KmJ1Y2tldF9wcCA9ICgqYnVja2V0X3BwKS0+cExpc3ROZXh0Ci0KLSNkZWZpbmUgREVGSU5FX1BI
UF9PQkpFQ1QoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZV9sb3dlciwgbmFtZSkgXAotICBkbyB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgenZhbCogbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBNQUtFX1NURF9aVkFMKG5hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIG9iamVjdF9pbml0X2V4KG5hbWUsIGNsYXNzX25hbWVfbG93ZXIj
I190eXBlKTsgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREVGSU5FX1BI
UF9XUkFQUEVSKGNsYXNzX25hbWUsIGNsYXNzX25hbWVfbG93ZXIsIG5hbWUsIGludGVybikgXAot
ICB6dmFsKiBuYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIE1BS0VfU1REX1pWQUwobmFtZSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgb2JqZWN0X2luaXRfZXgobmFtZSwg
Y2xhc3NfbmFtZV9sb3dlciMjX3R5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICBaX09C
SlZBTF9QKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAuaGFuZGxlID0gemVuZF9vYmplY3RzX3N0b3JlX3B1dCggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGludGVybiwgKHplbmRfb2JqZWN0c19z
dG9yZV9kdG9yX3QpemVuZF9vYmplY3RzX2Rlc3Ryb3lfb2JqZWN0LCAgXAotICAgICAgY2xhc3Nf
bmFtZV9sb3dlciMjX2ZyZWUsIE5VTEwgVFNSTUxTX0NDKTsKLQotI2RlZmluZSBERUZJTkVfUEhQ
X1pWQUwobmFtZSkgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHp2YWwq
IG5hbWU7ICAgICAgICAgICAgICAgXAotICAgIE1BS0VfU1REX1pWQUwobmFtZSk7ICAgICAgXAot
ICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIERFRklORV9QSFBfU1RSSU5HKG5hbWUsIHZhbHVlKSBc
Ci0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgenZhbCogbmFt
ZTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFLRV9TVERfWlZBTChuYW1lKTsgICAg
ICAgICAgICAgICBcCi0gICAgWlZBTF9TVFJJTkcobmFtZSwgdmFsdWUsIDEpOyAgICAgICBcCi0g
IH0gd2hpbGUgKDApCi0KLS8vIFVwYiBVdGlsaXRpZXMKLQotdm9pZCBjaGVja191cGJfc3RhdHVz
KGNvbnN0IHVwYl9zdGF0dXMqIHN0YXR1cywgY29uc3QgY2hhciogbXNnKTsKLQotI2RlZmluZSBD
SEVDS19VUEIoY29kZSwgbXNnKSAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICB1cGJfc3RhdHVzIHN0YXR1cyA9IFVQQl9TVEFUVVNf
SU5JVDsgXAotICAgIGNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Y2hlY2tfdXBiX3N0YXR1cygmc3RhdHVzLCBtc2cpOyAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQot
Ly8gTWVtb3J5IG1hbmFnZW1lbnQKLQotI2RlZmluZSBBTExPQyhjbGFzc19uYW1lKSAoY2xhc3Nf
bmFtZSopIGVtYWxsb2Moc2l6ZW9mKGNsYXNzX25hbWUpKQotI2RlZmluZSBBTExPQ19OKGNsYXNz
X25hbWUsIG4pIChjbGFzc19uYW1lKikgZW1hbGxvYyhzaXplb2YoY2xhc3NfbmFtZSkgKiBuKQot
I2RlZmluZSBGUkVFKG9iamVjdCkgZWZyZWUob2JqZWN0KQotCi0vLyBUeXBlIENoZWNraW5nCi0j
ZGVmaW5lIENIRUNLX1RZUEUoZmllbGQsIHR5cGUpICAgICAgICAgICAgIFwKLSAgaWYgKFpfVFlQ
RV9QKGZpZWxkKSAhPSB0eXBlKSB7ICAgICAgICAgICAgXAotICAgIHplbmRfZXJyb3IoRV9FUlJP
UiwgIlVuZXhwZWN0ZWQgdHlwZSIpOyBcCi0gIH0KLQotI2VuZGlmICAvLyBfX0dPT0dMRV9QUk9U
T0JVRl9QSFBfUFJPVE9CVUZfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3BocC9leHQvZ29vZ2xlL3Byb3RvYnVm
L3N0b3JhZ2UuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcGhwL2V4dC9nb29nbGUvcHJvdG9idWYvc3RvcmFnZS5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlNWEwOWMxN2Y3ODQ0ZDQyY2FlMmIzOTVmMzMwNzk5NjhmZGU4
ZjRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGhwL2V4
dC9nb29nbGUvcHJvdG9idWYvc3RvcmFnZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTM5ICswLDAg
QEAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxwcm90b2J1Zi5oPgotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUEhQIDwtPiBuYXRpdmUgc2xvdCBtYW5hZ2VtZW50LgotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIHp2YWwqIGludDMyX3RvX3p2YWwoaW50MzJf
dCB2YWx1ZSkgewotICB6dmFsKiB0bXA7Ci0gIE1BS0VfU1REX1pWQUwodG1wKTsKLSAgWlZBTF9M
T05HKHRtcCwgdmFsdWUpOwotICBwaHBfcHJpbnRmKCJpbnQzMiB0byB6dmFsXG4iKTsKLSAgLy8g
WlZBTF9MT05HKHRtcCwgMSk7Ci0gIHJldHVybiB0bXA7Ci19Ci0KLSNkZWZpbmUgREVSRUYobWVt
b3J5LCB0eXBlKSAqKHR5cGUqKShtZW1vcnkpCi0KLXNpemVfdCBuYXRpdmVfc2xvdF9zaXplKHVw
Yl9maWVsZHR5cGVfdCB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVVBCX1RZ
UEVfRkxPQVQ6IHJldHVybiA0OwotICAgIGNhc2UgVVBCX1RZUEVfRE9VQkxFOiByZXR1cm4gODsK
LSAgICBjYXNlIFVQQl9UWVBFX0JPT0w6IHJldHVybiAxOwotICAgIGNhc2UgVVBCX1RZUEVfU1RS
SU5HOiByZXR1cm4gc2l6ZW9mKHp2YWwqKTsKLSAgICBjYXNlIFVQQl9UWVBFX0JZVEVTOiByZXR1
cm4gc2l6ZW9mKHp2YWwqKTsKLSAgICBjYXNlIFVQQl9UWVBFX01FU1NBR0U6IHJldHVybiBzaXpl
b2YoenZhbCopOwotICAgIGNhc2UgVVBCX1RZUEVfRU5VTTogcmV0dXJuIDQ7Ci0gICAgY2FzZSBV
UEJfVFlQRV9JTlQzMjogcmV0dXJuIDQ7Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQ2NDogcmV0dXJu
IDg7Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5UMzI6IHJldHVybiA0OwotICAgIGNhc2UgVVBCX1RZ
UEVfVUlOVDY0OiByZXR1cm4gODsKLSAgICBkZWZhdWx0OiByZXR1cm4gMDsKLSAgfQotfQotCi1z
dGF0aWMgYm9vbCBpc19waHBfbnVtKHp2YWwqIHZhbHVlKSB7Ci0gIC8vIElzIG51bWVyaWFsIHN0
cmluZyBhbHNvIHZhbGlkPwotICByZXR1cm4gKFpfVFlQRV9QKHZhbHVlKSA9PSBJU19MT05HIHx8
Ci0gICAgICAgICAgWl9UWVBFX1AodmFsdWUpID09IElTX0RPVUJMRSk7Ci19Ci0KLXZvaWQgbmF0
aXZlX3Nsb3RfY2hlY2tfaW50X3JhbmdlX3ByZWNpc2lvbih1cGJfZmllbGR0eXBlX3QgdHlwZSwg
enZhbCogdmFsKSB7Ci0gIC8vIFRPRE8odGVib3JpbmcpOiBBZGQgaXQgYmFjay4KLSAgLy8gaWYg
KCFpc19waHBfbnVtKHZhbCkpIHsKLSAgLy8gICB6ZW5kX2Vycm9yKEVfRVJST1IsICJFeHBlY3Rl
ZCBudW1iZXIgdHlwZSBmb3IgaW50ZWdyYWwgZmllbGQuIik7Ci0gIC8vIH0KLQotICAvLyBpZiAo
Wl9UWVBFX1AodmFsKSA9PSBJU19ET1VCTEUpIHsKLSAgLy8gICBkb3VibGUgZGJsX3ZhbCA9IE5V
TTJEQkwodmFsKTsKLSAgLy8gICBpZiAoZmxvb3IoZGJsX3ZhbCkgIT0gZGJsX3ZhbCkgewotICAv
LyAgICAgemVuZF9lcnJvcihFX0VSUk9SLAotICAvLyAgICAgICAgICAgICAgIk5vbi1pbnRlZ3Jh
bCBmbG9hdGluZyBwb2ludCB2YWx1ZSBhc3NpZ25lZCB0byBpbnRlZ2VyIGZpZWxkLiIpOwotICAv
LyAgIH0KLSAgLy8gfQotICAvLyBpZiAodHlwZSA9PSBVUEJfVFlQRV9VSU5UMzIgfHwgdHlwZSA9
PSBVUEJfVFlQRV9VSU5UNjQpIHsKLSAgLy8gICBpZiAoTlVNMkRCTCh2YWwpIDwgMCkgewotICAv
LyAgICAgemVuZF9lcnJvcihFX0VSUk9SLAotICAvLyAgICAgICAgICAgICAgIkFzc2lnbmluZyBu
ZWdhdGl2ZSB2YWx1ZSB0byB1bnNpZ25lZCBpbnRlZ2VyIGZpZWxkLiIpOwotICAvLyAgIH0KLSAg
Ly8gfQotfQotCi16dmFsKiBuYXRpdmVfc2xvdF9nZXQodXBiX2ZpZWxkdHlwZV90IHR5cGUsIC8q
VkFMVUUgdHlwZV9jbGFzcywqLwotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIG1l
bW9yeSBUU1JNTFNfREMpIHsKLSAgenZhbCogcmV0dmFsID0gTlVMTDsKLSAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgLy8gVE9ETyh0ZWJvcmluZyk6IEFkZCBpdCBiYWNrLgotICAgIC8vIGNhc2UgVVBC
X1RZUEVfRkxPQVQ6Ci0gICAgLy8gICByZXR1cm4gREJMMk5VTShERVJFRihtZW1vcnksIGZsb2F0
KSk7Ci0gICAgLy8gY2FzZSBVUEJfVFlQRV9ET1VCTEU6Ci0gICAgLy8gICByZXR1cm4gREJMMk5V
TShERVJFRihtZW1vcnksIGRvdWJsZSkpOwotICAgIC8vIGNhc2UgVVBCX1RZUEVfQk9PTDoKLSAg
ICAvLyAgIHJldHVybiBERVJFRihtZW1vcnksIGludDhfdCkgPyBRdHJ1ZSA6IFFmYWxzZTsKLSAg
ICAvLyBjYXNlIFVQQl9UWVBFX1NUUklORzoKLSAgICAvLyBjYXNlIFVQQl9UWVBFX0JZVEVTOgot
ICAgIC8vIGNhc2UgVVBCX1RZUEVfTUVTU0FHRToKLSAgICAvLyAgIHJldHVybiBERVJFRihtZW1v
cnksIFZBTFVFKTsKLSAgICAvLyBjYXNlIFVQQl9UWVBFX0VOVU06IHsKLSAgICAvLyAgIGludDMy
X3QgdmFsID0gREVSRUYobWVtb3J5LCBpbnQzMl90KTsKLSAgICAvLyAgIFZBTFVFIHN5bWJvbCA9
IGVudW1fbG9va3VwKHR5cGVfY2xhc3MsIElOVDJOVU0odmFsKSk7Ci0gICAgLy8gICBpZiAoc3lt
Ym9sID09IFFuaWwpIHsKLSAgICAvLyAgICAgcmV0dXJuIElOVDJOVU0odmFsKTsKLSAgICAvLyAg
IH0gZWxzZSB7Ci0gICAgLy8gICAgIHJldHVybiBzeW1ib2w7Ci0gICAgLy8gICB9Ci0gICAgLy8g
fQotICAgIGNhc2UgVVBCX1RZUEVfSU5UMzI6Ci0gICAgICByZXR1cm4gaW50MzJfdG9fenZhbChE
RVJFRihtZW1vcnksIGludDMyX3QpKTsKLSAgICAvLyBUT0RPKHRlYm9yaW5nKTogQWRkIGl0IGJh
Y2suCi0gICAgLy8gY2FzZSBVUEJfVFlQRV9JTlQ2NDoKLSAgICAvLyAgIHJldHVybiBMTDJOVU0o
REVSRUYobWVtb3J5LCBpbnQ2NF90KSk7Ci0gICAgLy8gY2FzZSBVUEJfVFlQRV9VSU5UMzI6Ci0g
ICAgLy8gICByZXR1cm4gVUlOVDJOVU0oREVSRUYobWVtb3J5LCB1aW50MzJfdCkpOwotICAgIC8v
IGNhc2UgVVBCX1RZUEVfVUlOVDY0OgotICAgIC8vICAgcmV0dXJuIFVMTDJOVU0oREVSRUYobWVt
b3J5LCB1aW50NjRfdCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gRUcodW5pbml0aWFs
aXplZF96dmFsX3B0cik7Ci0gIH0KLX0KLQotdm9pZCBuYXRpdmVfc2xvdF9pbml0KHVwYl9maWVs
ZHR5cGVfdCB0eXBlLCB2b2lkKiBtZW1vcnkpIHsKLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2Fz
ZSBVUEJfVFlQRV9GTE9BVDoKLSAgICAgIERFUkVGKG1lbW9yeSwgZmxvYXQpID0gMC4wOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9ET1VCTEU6Ci0gICAgICBERVJFRihtZW1vcnks
IGRvdWJsZSkgPSAwLjA7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX0JPT0w6Ci0g
ICAgICBERVJFRihtZW1vcnksIGludDhfdCkgPSAwOwotICAgICAgYnJlYWs7Ci0gICAgLy8gVE9E
Tyh0ZWJvcmluZyk6IEFkZCBpdCBiYWNrLgotICAgIC8vIGNhc2UgVVBCX1RZUEVfU1RSSU5HOgot
ICAgIC8vIGNhc2UgVVBCX1RZUEVfQllURVM6Ci0gICAgLy8gICBERVJFRihtZW1vcnksIFZBTFVF
KSA9IHBocF9zdHJfbmV3MigiIik7Ci0gICAgLy8gICBwaHBfZW5jX2Fzc29jaWF0ZShERVJFRiht
ZW1vcnksIFZBTFVFKSwgKHR5cGUgPT0gVVBCX1RZUEVfQllURVMpCi0gICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBrUnVieVN0cmluZzhiaXRFbmNv
ZGluZwotICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDoga1J1YnlTdHJpbmdVdGY4RW5jb2RpbmcpOwotICAgIC8vICAgYnJlYWs7Ci0gICAgLy8gY2Fz
ZSBVUEJfVFlQRV9NRVNTQUdFOgotICAgIC8vICAgREVSRUYobWVtb3J5LCBWQUxVRSkgPSBRbmls
OwotICAgIC8vICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9FTlVNOgotICAgIGNhc2UgVVBC
X1RZUEVfSU5UMzI6Ci0gICAgICBERVJFRihtZW1vcnksIGludDMyX3QpID0gMDsKLSAgICAgIGJy
ZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfSU5UNjQ6Ci0gICAgICBERVJFRihtZW1vcnksIGludDY0
X3QpID0gMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDMyOgotICAgICAg
REVSRUYobWVtb3J5LCB1aW50MzJfdCkgPSAwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJf
VFlQRV9VSU5UNjQ6Ci0gICAgICBERVJFRihtZW1vcnksIHVpbnQ2NF90KSA9IDA7Ci0gICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotdm9pZCBuYXRpdmVf
c2xvdF9zZXQodXBiX2ZpZWxkdHlwZV90IHR5cGUsIC8qVkFMVUUgdHlwZV9jbGFzcywqLyB2b2lk
KiBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICB6dmFsKiB2YWx1ZSkgewotICBuYXRpdmVf
c2xvdF9zZXRfdmFsdWVfYW5kX2Nhc2UodHlwZSwgLyp0eXBlX2NsYXNzLCovIG1lbW9yeSwgdmFs
dWUsIE5VTEwsIDApOwotfQotCi12b2lkIG5hdGl2ZV9zbG90X3NldF92YWx1ZV9hbmRfY2FzZSh1
cGJfZmllbGR0eXBlX3QgdHlwZSwgLypWQUxVRSB0eXBlX2NsYXNzLCovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBtZW1vcnksIHp2YWwqIHZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGNhc2VfbWVtb3J5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY2FzZV9udW1iZXIpIHsK
LSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9GTE9BVDoKLSAgICAgIGlmICgh
Wl9UWVBFX1AodmFsdWUpID09IElTX0xPTkcpIHsKLSAgICAgICAgemVuZF9lcnJvcihFX0VSUk9S
LCAiRXhwZWN0ZWQgbnVtYmVyIHR5cGUgZm9yIGZsb2F0IGZpZWxkLiIpOwotICAgICAgfQotICAg
ICAgREVSRUYobWVtb3J5LCBmbG9hdCkgPSBaX0RWQUxfUCh2YWx1ZSk7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIFVQQl9UWVBFX0RPVUJMRToKLSAgICAgIC8vIFRPRE8odGVib3JpbmcpOiBBZGQg
aXQgYmFjay4KLSAgICAgIC8vIGlmICghaXNfcGhwX251bSh2YWx1ZSkpIHsKLSAgICAgIC8vICAg
emVuZF9lcnJvcihFX0VSUk9SLCAiRXhwZWN0ZWQgbnVtYmVyIHR5cGUgZm9yIGRvdWJsZSBmaWVs
ZC4iKTsKLSAgICAgIC8vIH0KLSAgICAgIC8vIERFUkVGKG1lbW9yeSwgZG91YmxlKSA9IFpfRFZB
TF9QKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfQk9PTDogewotICAg
ICAgaW50OF90IHZhbCA9IC0xOwotICAgICAgaWYgKHp2YWxfaXNfdHJ1ZSh2YWx1ZSkpIHsKLSAg
ICAgICAgdmFsID0gMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhbCA9IDA7Ci0gICAgICB9
Ci0gICAgICAvLyBUT0RPKHRlYm9yaW5nKTogQWRkIGl0IGJhY2suCi0gICAgICAvLyBlbHNlIGlm
ICh2YWx1ZSA9PSBRZmFsc2UpIHsKLSAgICAgIC8vICAgdmFsID0gMDsKLSAgICAgIC8vIH0KLSAg
ICAgIC8vIGVsc2UgewotICAgICAgLy8gICBwaHBfcmFpc2UocGhwX2VUeXBlRXJyb3IsICJJbnZh
bGlkIGFyZ3VtZW50IGZvciBib29sZWFuIGZpZWxkLiIpOwotICAgICAgLy8gfQotICAgICAgREVS
RUYobWVtb3J5LCBpbnQ4X3QpID0gdmFsOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
VVBCX1RZUEVfU1RSSU5HOgotICAgIGNhc2UgVVBCX1RZUEVfQllURVM6IHsKLSAgICAgIC8vIFRP
RE8odGVib3JpbmcpOiBBZGQgaXQgYmFjay4KLSAgICAgIC8vIGlmIChaX1RZUEVfUCh2YWx1ZSkg
IT0gSVNfU1RSSU5HKSB7Ci0gICAgICAvLyAgIHplbmRfZXJyb3IoRV9FUlJPUiwgIkludmFsaWQg
YXJndW1lbnQgZm9yIHN0cmluZyBmaWVsZC4iKTsKLSAgICAgIC8vIH0KLSAgICAgIC8vIG5hdGl2
ZV9zbG90X3ZhbGlkYXRlX3N0cmluZ19lbmNvZGluZyh0eXBlLCB2YWx1ZSk7Ci0gICAgICAvLyBE
RVJFRihtZW1vcnksIHp2YWwqKSA9IHZhbHVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgVVBCX1RZUEVfTUVTU0FHRTogewotICAgICAgLy8gVE9ETyh0ZWJvcmluZyk6IEFkZCBpdCBi
YWNrLgotICAgICAgLy8gaWYgKENMQVNTX09GKHZhbHVlKSA9PSBDTEFTU19PRihRbmlsKSkgewot
ICAgICAgLy8gICB2YWx1ZSA9IFFuaWw7Ci0gICAgICAvLyB9IGVsc2UgaWYgKENMQVNTX09GKHZh
bHVlKSAhPSB0eXBlX2NsYXNzKSB7Ci0gICAgICAvLyAgIHBocF9yYWlzZShwaHBfZVR5cGVFcnJv
ciwKLSAgICAgIC8vICAgICAgICAgICAgIkludmFsaWQgdHlwZSAlcyB0byBhc3NpZ24gdG8gc3Vi
bWVzc2FnZSBmaWVsZC4iLAotICAgICAgLy8gICAgICAgICAgICBwaHBfY2xhc3MybmFtZShDTEFT
U19PRih2YWx1ZSkpKTsKLSAgICAgIC8vIH0KLSAgICAgIC8vIERFUkVGKG1lbW9yeSwgVkFMVUUp
ID0gdmFsdWU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVUEJfVFlQRV9FTlVNOiB7
Ci0gICAgICAvLyBUT0RPKHRlYm9yaW5nKTogQWRkIGl0IGJhY2suCi0gICAgICAvLyBpbnQzMl90
IGludF92YWwgPSAwOwotICAgICAgLy8gaWYgKCFpc19waHBfbnVtKHZhbHVlKSAmJiBUWVBFKHZh
bHVlKSAhPSBUX1NZTUJPTCkgewotICAgICAgLy8gICBwaHBfcmFpc2UocGhwX2VUeXBlRXJyb3Is
Ci0gICAgICAvLyAgICAgICAgICAgICJFeHBlY3RlZCBudW1iZXIgb3Igc3ltYm9sIHR5cGUgZm9y
IGVudW0gZmllbGQuIik7Ci0gICAgICAvLyB9Ci0gICAgICAvLyBpZiAoVFlQRSh2YWx1ZSkgPT0g
VF9TWU1CT0wpIHsKLSAgICAgIC8vICAgLy8gRW5zdXJlIHRoYXQgdGhlIGdpdmVuIHN5bWJvbCBl
eGlzdHMgaW4gdGhlIGVudW0gbW9kdWxlLgotICAgICAgLy8gICBWQUxVRSBsb29rdXAgPSBwaHBf
ZnVuY2FsbCh0eXBlX2NsYXNzLCBwaHBfaW50ZXJuKCJyZXNvbHZlIiksIDEsIHZhbHVlKTsKLSAg
ICAgIC8vICAgaWYgKGxvb2t1cCA9PSBRbmlsKSB7Ci0gICAgICAvLyAgICAgcGhwX3JhaXNlKHBo
cF9lUmFuZ2VFcnJvciwgIlVua25vd24gc3ltYm9sIHZhbHVlIGZvciBlbnVtIGZpZWxkLiIpOwot
ICAgICAgLy8gICB9IGVsc2UgewotICAgICAgLy8gICAgIGludF92YWwgPSBOVU0ySU5UKGxvb2t1
cCk7Ci0gICAgICAvLyAgIH0KLSAgICAgIC8vIH0gZWxzZSB7Ci0gICAgICAvLyAgIG5hdGl2ZV9z
bG90X2NoZWNrX2ludF9yYW5nZV9wcmVjaXNpb24oVVBCX1RZUEVfSU5UMzIsIHZhbHVlKTsKLSAg
ICAgIC8vICAgaW50X3ZhbCA9IE5VTTJJTlQodmFsdWUpOwotICAgICAgLy8gfQotICAgICAgLy8g
REVSRUYobWVtb3J5LCBpbnQzMl90KSA9IGludF92YWw7Ci0gICAgICAvLyBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQzMjoKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDY0OgotICAg
IGNhc2UgVVBCX1RZUEVfVUlOVDMyOgotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDY0OgotICAgICAg
bmF0aXZlX3Nsb3RfY2hlY2tfaW50X3JhbmdlX3ByZWNpc2lvbih0eXBlLCB2YWx1ZSk7Ci0gICAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBVUEJfVFlQRV9JTlQzMjoKLSAgICAgICAg
ICBwaHBfcHJpbnRmKCJTZXR0aW5nIElOVDMyIGZpZWxkXG4iKTsKLSAgICAgICAgICBERVJFRiht
ZW1vcnksIGludDMyX3QpID0gWl9MVkFMX1AodmFsdWUpOwotICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFVQQl9UWVBFX0lOVDY0OgotICAgICAgICAgIC8vIFRPRE8odGVib3JpbmcpOiBB
ZGQgaXQgYmFjay4KLSAgICAgICAgICAvLyBERVJFRihtZW1vcnksIGludDY0X3QpID0gTlVNMkxM
KHZhbHVlKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVUEJfVFlQRV9VSU5UMzI6
Ci0gICAgICAgICAgLy8gVE9ETyh0ZWJvcmluZyk6IEFkZCBpdCBiYWNrLgotICAgICAgICAgIC8v
IERFUkVGKG1lbW9yeSwgdWludDMyX3QpID0gTlVNMlVJTlQodmFsdWUpOwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFVQQl9UWVBFX1VJTlQ2NDoKLSAgICAgICAgICAvLyBUT0RPKHRl
Ym9yaW5nKTogQWRkIGl0IGJhY2suCi0gICAgICAgICAgLy8gREVSRUYobWVtb3J5LCB1aW50NjRf
dCkgPSBOVU0yVUxMKHZhbHVlKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICBicmVhazsKLSAgfQotCi0gIGlmIChjYXNlX21lbW9yeSAhPSBOVUxMKSB7Ci0gICAgKmNh
c2VfbWVtb3J5ID0gY2FzZV9udW1iZXI7Ci0gIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vIE1hcCBmaWVsZCB1dGlsaXRpZXMuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNv
bnN0IHVwYl9tc2dkZWYqIHRyeWdldF9tYXBfZW50cnlfbXNnZGVmKGNvbnN0IHVwYl9maWVsZGRl
ZiogZmllbGQpIHsKLSAgY29uc3QgdXBiX21zZ2RlZiogc3ViZGVmOwotICBpZiAodXBiX2ZpZWxk
ZGVmX2xhYmVsKGZpZWxkKSAhPSBVUEJfTEFCRUxfUkVQRUFURUQgfHwKLSAgICAgIHVwYl9maWVs
ZGRlZl90eXBlKGZpZWxkKSAhPSBVUEJfVFlQRV9NRVNTQUdFKSB7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLSAgc3ViZGVmID0gdXBiX2ZpZWxkZGVmX21zZ3N1YmRlZihmaWVsZCk7Ci0gIHJldHVy
biB1cGJfbXNnZGVmX21hcGVudHJ5KHN1YmRlZikgPyBzdWJkZWYgOiBOVUxMOwotfQotCi1jb25z
dCB1cGJfbXNnZGVmKiBtYXBfZW50cnlfbXNnZGVmKGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQp
IHsKLSAgY29uc3QgdXBiX21zZ2RlZiogc3ViZGVmID0gdHJ5Z2V0X21hcF9lbnRyeV9tc2dkZWYo
ZmllbGQpOwotICBhc3NlcnQoc3ViZGVmKTsKLSAgcmV0dXJuIHN1YmRlZjsKLX0KLQotYm9vbCBp
c19tYXBfZmllbGQoY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZCkgewotICByZXR1cm4gdHJ5Z2V0
X21hcF9lbnRyeV9tc2dkZWYoZmllbGQpICE9IE5VTEw7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBNZW1vcnkgbGF5b3V0IG1hbmFnZW1lbnQuCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1zdGF0aWMgc2l6ZV90IGFsaWduX3VwX3RvKHNpemVfdCBvZmZzZXQsIHNpemVfdCBn
cmFudWxhcml0eSkgewotICAvLyBHcmFudWxhcml0eSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgot
ICByZXR1cm4gKG9mZnNldCArIGdyYW51bGFyaXR5IC0gMSkgJiB+KGdyYW51bGFyaXR5IC0gMSk7
Ci19Ci0KLU1lc3NhZ2VMYXlvdXQqIGNyZWF0ZV9sYXlvdXQoY29uc3QgdXBiX21zZ2RlZiogbXNn
ZGVmKSB7Ci0gIE1lc3NhZ2VMYXlvdXQqIGxheW91dCA9IEFMTE9DKE1lc3NhZ2VMYXlvdXQpOwot
ICBpbnQgbmZpZWxkcyA9IHVwYl9tc2dkZWZfbnVtZmllbGRzKG1zZ2RlZik7Ci0gIHVwYl9tc2df
ZmllbGRfaXRlciBpdDsKLSAgdXBiX21zZ19vbmVvZl9pdGVyIG9pdDsKLSAgc2l6ZV90IG9mZiA9
IDA7Ci0KLSAgbGF5b3V0LT5maWVsZHMgPSBBTExPQ19OKE1lc3NhZ2VGaWVsZCwgbmZpZWxkcyk7
Ci0KLSAgZm9yICh1cGJfbXNnX2ZpZWxkX2JlZ2luKCZpdCwgbXNnZGVmKTsgIXVwYl9tc2dfZmll
bGRfZG9uZSgmaXQpOwotICAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaXQpKSB7Ci0gICAgY29u
c3QgdXBiX2ZpZWxkZGVmKiBmaWVsZCA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaXQpOwotICAgIHNp
emVfdCBmaWVsZF9zaXplOwotCi0gICAgaWYgKHVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2Yo
ZmllbGQpKSB7Ci0gICAgICAvLyBPbmVvZnMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBiZWxvdy4K
LSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIHxmaWVsZF9zaXplfCBi
eXRlcyBmb3IgdGhpcyBmaWVsZCBpbiB0aGUgbGF5b3V0LgotICAgIGZpZWxkX3NpemUgPSAwOwot
ICAgIGlmICh1cGJfZmllbGRkZWZfbGFiZWwoZmllbGQpID09IFVQQl9MQUJFTF9SRVBFQVRFRCkg
ewotICAgICAgZmllbGRfc2l6ZSA9IHNpemVvZih6dmFsKik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGZpZWxkX3NpemUgPSBuYXRpdmVfc2xvdF9zaXplKHVwYl9maWVsZGRlZl90eXBlKGZpZWxkKSk7
Ci0gICAgfQotCi0gICAgLy8gQWxpZ24gY3VycmVudCBvZmZzZXQgdXAgdG8gfCBzaXplIHwgZ3Jh
bnVsYXJpdHkuCi0gICAgb2ZmID0gYWxpZ25fdXBfdG8ob2ZmLCBmaWVsZF9zaXplKTsKLSAgICBs
YXlvdXQtPmZpZWxkc1t1cGJfZmllbGRkZWZfaW5kZXgoZmllbGQpXS5vZmZzZXQgPSBvZmY7Ci0g
ICAgbGF5b3V0LT5maWVsZHNbdXBiX2ZpZWxkZGVmX2luZGV4KGZpZWxkKV0uY2FzZV9vZmZzZXQg
PQotICAgICAgICBNRVNTQUdFX0ZJRUxEX05PX0NBU0U7Ci0gICAgb2ZmICs9IGZpZWxkX3NpemU7
Ci0gIH0KLQotICAvLyBIYW5kbGUgb25lb2ZzIG5vdyAtLSB3ZSBpdGVyYXRlIG92ZXIgb25lb2Zz
IHNwZWNpZmljYWxseSBhbmQgYWxsb2NhdGUgb25seQotICAvLyBvbmUgc2xvdCBwZXIgb25lb2Yu
Ci0gIC8vCi0gIC8vIFdlIGFzc2lnbiBhbGwgdmFsdWUgc2xvdHMgZmlyc3QsIHRoZW4gcGFjayB0
aGUgJ2Nhc2UnIGZpZWxkcyBhdCB0aGUgZW5kLAotICAvLyBzaW5jZSBpbiB0aGUgY29tbW9uIGNh
c2UgKG1vZGVybiA2NC1iaXQgcGxhdGZvcm0pIHRoZXNlIGFyZSA4IGJ5dGVzIGFuZCA0Ci0gIC8v
IGJ5dGVzIHJlc3BlY3RpdmVseSBhbmQgd2Ugd2FudCB0byBhdm9pZCBhbGlnbm1lbnQgb3Zlcmhl
YWQuCi0gIC8vCi0gIC8vIE5vdGUgdGhhdCB3ZSByZXNlcnZlIDQgYnl0ZXMgKGEgdWludDMyKSBw
ZXIgJ2Nhc2UnIHNsb3QgYmVjYXVzZSB0aGUgdmFsdWUKLSAgLy8gc3BhY2UgZm9yIG9uZW9mIGNh
c2VzIGlzIGNvbmNlcHR1YWxseSBhcyB3aWRlIGFzIGZpZWxkIHRhZyBudW1iZXJzLiAgSW4KLSAg
Ly8gcHJhY3RpY2UsIGl0J3MgdW5saWtlbHkgdGhhdCBhIG9uZW9mIHdvdWxkIGhhdmUgbW9yZSB0
aGFuIGUuZy4gIDI1NiBvciA2NEsKLSAgLy8gbWVtYmVycyAoOCBvciAxNiBiaXRzIHJlc3BlY3Rp
dmVseSksIHNvIGNvbmNlaXZhYmx5IHdlIGNvdWxkIGFzc2lnbgotICAvLyBjb25zZWN1dGl2ZSBj
YXNlIG51bWJlcnMgYW5kIHRoZW4gcGljayBhIHNtYWxsZXIgb25lb2YgY2FzZSBzbG90IHNpemUs
IGJ1dAotICAvLyB0aGUgY29tcGxleGl0eSB0byBpbXBsZW1lbnQgdGhpcyBpbmRpcmVjdGlvbiBp
cyBwcm9iYWJseSBub3Qgd29ydGh3aGlsZS4KLSAgZm9yICh1cGJfbXNnX29uZW9mX2JlZ2luKCZv
aXQsIG1zZ2RlZik7ICF1cGJfbXNnX29uZW9mX2RvbmUoJm9pdCk7Ci0gICAgICAgdXBiX21zZ19v
bmVvZl9uZXh0KCZvaXQpKSB7Ci0gICAgY29uc3QgdXBiX29uZW9mZGVmKiBvbmVvZiA9IHVwYl9t
c2dfaXRlcl9vbmVvZigmb2l0KTsKLSAgICB1cGJfb25lb2ZfaXRlciBmaXQ7Ci0KLSAgICAvLyBB
bHdheXMgYWxsb2NhdGUgTkFUSVZFX1NMT1RfTUFYX1NJWkUgYnl0ZXMsIGJ1dCBzaGFyZSB0aGUg
c2xvdCBiZXR3ZWVuCi0gICAgLy8gYWxsIGZpZWxkcy4KLSAgICBzaXplX3QgZmllbGRfc2l6ZSA9
IE5BVElWRV9TTE9UX01BWF9TSVpFOwotICAgIC8vIEFsaWduIHRoZSBvZmZzZXQgLgotICAgIG9m
ZiA9IGFsaWduX3VwX3RvKCBvZmYsIGZpZWxkX3NpemUpOwotICAgIC8vIEFzc2lnbiBhbGwgZmll
bGRzIGluIHRoZSBvbmVvZiB0aGlzIHNhbWUgb2Zmc2V0LgotICAgIGZvciAodXBiX29uZW9mX2Jl
Z2luKCZmaXQsIG9uZW9mKTsgIXVwYl9vbmVvZl9kb25lKCZmaXQpOwotICAgICAgICAgdXBiX29u
ZW9mX25leHQoJmZpdCkpIHsKLSAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQgPSB1cGJf
b25lb2ZfaXRlcl9maWVsZCgmZml0KTsKLSAgICAgIGxheW91dC0+ZmllbGRzW3VwYl9maWVsZGRl
Zl9pbmRleChmaWVsZCldLm9mZnNldCA9IG9mZjsKLSAgICB9Ci0gICAgb2ZmICs9IGZpZWxkX3Np
emU7Ci0gIH0KLQotICAvLyBOb3cgdGhlIGNhc2UgZmllbGRzLgotICBmb3IgKHVwYl9tc2dfb25l
b2ZfYmVnaW4oJm9pdCwgbXNnZGVmKTsgIXVwYl9tc2dfb25lb2ZfZG9uZSgmb2l0KTsKLSAgICAg
ICB1cGJfbXNnX29uZW9mX25leHQoJm9pdCkpIHsKLSAgICBjb25zdCB1cGJfb25lb2ZkZWYqIG9u
ZW9mID0gdXBiX21zZ19pdGVyX29uZW9mKCZvaXQpOwotICAgIHVwYl9vbmVvZl9pdGVyIGZpdDsK
LQotICAgIHNpemVfdCBmaWVsZF9zaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAvLyBBbGln
biB0aGUgb2Zmc2V0IC4KLSAgICBvZmYgPSAob2ZmICsgZmllbGRfc2l6ZSAtIDEpICYgfihmaWVs
ZF9zaXplIC0gMSk7Ci0gICAgLy8gQXNzaWduIGFsbCBmaWVsZHMgaW4gdGhlIG9uZW9mIHRoaXMg
c2FtZSBvZmZzZXQuCi0gICAgZm9yICh1cGJfb25lb2ZfYmVnaW4oJmZpdCwgb25lb2YpOyAhdXBi
X29uZW9mX2RvbmUoJmZpdCk7Ci0gICAgICAgICB1cGJfb25lb2ZfbmV4dCgmZml0KSkgewotICAg
ICAgY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZCA9IHVwYl9vbmVvZl9pdGVyX2ZpZWxkKCZmaXQp
OwotICAgICAgbGF5b3V0LT5maWVsZHNbdXBiX2ZpZWxkZGVmX2luZGV4KGZpZWxkKV0uY2FzZV9v
ZmZzZXQgPSBvZmY7Ci0gICAgfQotICAgIG9mZiArPSBmaWVsZF9zaXplOwotICB9Ci0KLSAgbGF5
b3V0LT5zaXplID0gb2ZmOwotCi0gIGxheW91dC0+bXNnZGVmID0gbXNnZGVmOwotICB1cGJfbXNn
ZGVmX3JlZihsYXlvdXQtPm1zZ2RlZiwgJmxheW91dC0+bXNnZGVmKTsKLQotICByZXR1cm4gbGF5
b3V0OwotfQotCi12b2lkIGZyZWVfbGF5b3V0KE1lc3NhZ2VMYXlvdXQqIGxheW91dCkgewotICBG
UkVFKGxheW91dC0+ZmllbGRzKTsKLSAgdXBiX21zZ2RlZl91bnJlZihsYXlvdXQtPm1zZ2RlZiwg
JmxheW91dC0+bXNnZGVmKTsKLSAgRlJFRShsYXlvdXQpOwotfQotCi0vLyBUT0RPKHRlYm9yaW5n
KTogQWRkIGl0IGJhY2suCi0vLyBWQUxVRSBmaWVsZF90eXBlX2NsYXNzKGNvbnN0IHVwYl9maWVs
ZGRlZiogZmllbGQpIHsKLS8vICAgVkFMVUUgdHlwZV9jbGFzcyA9IFFuaWw7Ci0vLyAgIGlmICh1
cGJfZmllbGRkZWZfdHlwZShmaWVsZCkgPT0gVVBCX1RZUEVfTUVTU0FHRSkgewotLy8gICAgIFZB
TFVFIHN1Ym1zZ2Rlc2MgPSBnZXRfZGVmX29iaih1cGJfZmllbGRkZWZfc3ViZGVmKGZpZWxkKSk7
Ci0vLyAgICAgdHlwZV9jbGFzcyA9IERlc2NyaXB0b3JfbXNnY2xhc3Moc3VibXNnZGVzYyk7Ci0v
LyAgIH0gZWxzZSBpZiAodXBiX2ZpZWxkZGVmX3R5cGUoZmllbGQpID09IFVQQl9UWVBFX0VOVU0p
IHsKLS8vICAgICBWQUxVRSBzdWJlbnVtZGVzYyA9IGdldF9kZWZfb2JqKHVwYl9maWVsZGRlZl9z
dWJkZWYoZmllbGQpKTsKLS8vICAgICB0eXBlX2NsYXNzID0gRW51bURlc2NyaXB0b3JfZW51bW1v
ZHVsZShzdWJlbnVtZGVzYyk7Ci0vLyAgIH0KLS8vICAgcmV0dXJuIHR5cGVfY2xhc3M7Ci0vLyB9
Ci0KLXN0YXRpYyB2b2lkKiBzbG90X21lbW9yeShNZXNzYWdlTGF5b3V0KiBsYXlvdXQsIGNvbnN0
IHZvaWQqIHN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX2ZpZWxk
ZGVmKiBmaWVsZCkgewotICByZXR1cm4gKCh1aW50OF90KilzdG9yYWdlKSArIGxheW91dC0+Zmll
bGRzW3VwYl9maWVsZGRlZl9pbmRleChmaWVsZCldLm9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQz
Ml90KiBzbG90X29uZW9mX2Nhc2UoTWVzc2FnZUxheW91dCogbGF5b3V0LCBjb25zdCB2b2lkKiBz
dG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX2ZpZWxk
ZGVmKiBmaWVsZCkgewotICByZXR1cm4gKHVpbnQzMl90KikoKCh1aW50OF90KilzdG9yYWdlKSAr
Ci0gICAgICAgICAgICAgICAgICAgICBsYXlvdXQtPmZpZWxkc1t1cGJfZmllbGRkZWZfaW5kZXgo
ZmllbGQpXS5jYXNlX29mZnNldCk7Ci19Ci0KLXZvaWQgbGF5b3V0X3NldChNZXNzYWdlTGF5b3V0
KiBsYXlvdXQsIHZvaWQqIHN0b3JhZ2UsIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQsCi0gICAg
ICAgICAgICAgICAgenZhbCogdmFsKSB7Ci0gIHZvaWQqIG1lbW9yeSA9IHNsb3RfbWVtb3J5KGxh
eW91dCwgc3RvcmFnZSwgZmllbGQpOwotICB1aW50MzJfdCogb25lb2ZfY2FzZSA9IHNsb3Rfb25l
b2ZfY2FzZShsYXlvdXQsIHN0b3JhZ2UsIGZpZWxkKTsKLQotICBpZiAodXBiX2ZpZWxkZGVmX2Nv
bnRhaW5pbmdvbmVvZihmaWVsZCkpIHsKLSAgICBpZiAoWl9UWVBFX1AodmFsKSA9PSBJU19OVUxM
KSB7Ci0gICAgICAvLyBBc3NpZ25pbmcgbmlsIHRvIGEgb25lb2YgZmllbGQgY2xlYXJzIHRoZSBv
bmVvZiBjb21wbGV0ZWx5LgotICAgICAgKm9uZW9mX2Nhc2UgPSBPTkVPRl9DQVNFX05PTkU7Ci0g
ICAgICBtZW1zZXQobWVtb3J5LCAwLCBOQVRJVkVfU0xPVF9NQVhfU0laRSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIC8vIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gZmllbGQgdHlwZXMgZm9yIGEgc2lu
Z2xlIG9uZW9mICh1bmlvbikgc2xvdCBpcwotICAgICAgLy8gc29tZXdoYXQgY29tcGxleCBiZWNh
dXNlIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYSBHQyB0cmlnZ2VyZWQgYXQgYW55Ci0gICAgICAv
LyBwb2ludCBieSBhIGNhbGwgaW50byB0aGUgUnVieSBWTSBzZWVzIGEgdmFsaWQgc3RhdGUgZm9y
IHRoaXMgZmllbGQgYW5kCi0gICAgICAvLyBkb2VzIG5vdCBlaXRoZXIgZ28gb2ZmIGludG8gdGhl
IHdlZWRzIChmb2xsb3dpbmcgd2hhdCBpdCB0aGlua3MgaXMgYQotICAgICAgLy8gVkFMVUUgYnV0
IGlzIGFjdHVhbGx5IGEgZGlmZmVyZW50IGZpZWxkIHR5cGUpIG9yIG1pc3MgYW4gb2JqZWN0IChz
ZWVpbmcKLSAgICAgIC8vIHdoYXQgaXQgdGhpbmtzIGlzIGEgcHJpbWl0aXZlIGZpZWxkIGJ1dCBp
cyBhY3R1YWxseSBhIFZBTFVFIGZvciB0aGUgbmV3Ci0gICAgICAvLyBmaWVsZCB0eXBlKS4KLSAg
ICAgIC8vCi0gICAgICAvLyBJbiBvcmRlciBmb3IgdGhlIHRyYW5zaXRpb24gdG8gYmUgc2FmZSwg
dGhlIG9uZW9mIGNhc2Ugc2xvdCBtdXN0IGJlIGluCi0gICAgICAvLyBzeW5jIHdpdGggdGhlIHZh
bHVlIHNsb3Qgd2hlbmV2ZXIgdGhlIFJ1YnkgVk0gaGFzIGJlZW4gY2FsbGVkLiBUaHVzLCB3ZQot
ICAgICAgLy8gdXNlIG5hdGl2ZV9zbG90X3NldF92YWx1ZV9hbmRfY2FzZSgpLCB3aGljaCBlbnN1
cmVzIHRoYXQgYm90aCB0aGUgdmFsdWUKLSAgICAgIC8vIGFuZCBjYXNlIG51bWJlciBhcmUgYWx0
ZXJlZCBhdG9taWNhbGx5ICh3LnIudC4gdGhlIFJ1YnkgVk0pLgotICAgICAgbmF0aXZlX3Nsb3Rf
c2V0X3ZhbHVlX2FuZF9jYXNlKHVwYl9maWVsZGRlZl90eXBlKGZpZWxkKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKmZpZWxkX3R5cGVfY2xhc3MoZmllbGQpLCovIG1l
bW9yeSwgdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZW9mX2Nh
c2UsIHVwYl9maWVsZGRlZl9udW1iZXIoZmllbGQpKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoaXNf
bWFwX2ZpZWxkKGZpZWxkKSkgewotICAgIC8vIFRPRE8odGVib3JpbmcpOiBBZGQgaXQgYmFjay4K
LSAgICAvLyBjaGVja19tYXBfZmllbGRfdHlwZSh2YWwsIGZpZWxkKTsKLSAgICAvLyBERVJFRiht
ZW1vcnksIHp2YWwqKSA9IHZhbDsKLSAgfSBlbHNlIGlmICh1cGJfZmllbGRkZWZfbGFiZWwoZmll
bGQpID09IFVQQl9MQUJFTF9SRVBFQVRFRCkgewotICAgIC8vIFRPRE8odGVib3JpbmcpOiBBZGQg
aXQgYmFjay4KLSAgICAvLyBjaGVja19yZXBlYXRlZF9maWVsZF90eXBlKHZhbCwgZmllbGQpOwot
ICAgIC8vIERFUkVGKG1lbW9yeSwgenZhbCopID0gdmFsOwotICB9IGVsc2UgewotICAgIG5hdGl2
ZV9zbG90X3NldCh1cGJfZmllbGRkZWZfdHlwZShmaWVsZCksIC8qZmllbGRfdHlwZV9jbGFzcyhm
aWVsZCksKi8gbWVtb3J5LAotICAgICAgICAgICAgICAgICAgICB2YWwpOwotICB9Ci19Ci0KLXZv
aWQgbGF5b3V0X2luaXQoTWVzc2FnZUxheW91dCogbGF5b3V0LCB2b2lkKiBzdG9yYWdlKSB7Ci0g
IHVwYl9tc2dfZmllbGRfaXRlciBpdDsKLSAgZm9yICh1cGJfbXNnX2ZpZWxkX2JlZ2luKCZpdCwg
bGF5b3V0LT5tc2dkZWYpOyAhdXBiX21zZ19maWVsZF9kb25lKCZpdCk7Ci0gICAgICAgdXBiX21z
Z19maWVsZF9uZXh0KCZpdCkpIHsKLSAgICBjb25zdCB1cGJfZmllbGRkZWYqIGZpZWxkID0gdXBi
X21zZ19pdGVyX2ZpZWxkKCZpdCk7Ci0gICAgdm9pZCogbWVtb3J5ID0gc2xvdF9tZW1vcnkobGF5
b3V0LCBzdG9yYWdlLCBmaWVsZCk7Ci0gICAgdWludDMyX3QqIG9uZW9mX2Nhc2UgPSBzbG90X29u
ZW9mX2Nhc2UobGF5b3V0LCBzdG9yYWdlLCBmaWVsZCk7Ci0KLSAgICBpZiAodXBiX2ZpZWxkZGVm
X2NvbnRhaW5pbmdvbmVvZihmaWVsZCkpIHsKLSAgICAgIC8vIFRPRE8odGVib3JpbmcpOiBBZGQg
aXQgYmFjay4KLSAgICAgIC8vIG1lbXNldChtZW1vcnksIDAsIE5BVElWRV9TTE9UX01BWF9TSVpF
KTsKLSAgICAgIC8vICpvbmVvZl9jYXNlID0gT05FT0ZfQ0FTRV9OT05FOwotICAgIH0gZWxzZSBp
ZiAoaXNfbWFwX2ZpZWxkKGZpZWxkKSkgewotICAgICAgLy8gVE9ETyh0ZWJvcmluZyk6IEFkZCBp
dCBiYWNrLgotICAgICAgLy8gVkFMVUUgbWFwID0gUW5pbDsKLQotICAgICAgLy8gY29uc3QgdXBi
X2ZpZWxkZGVmKiBrZXlfZmllbGQgPSBtYXBfZmllbGRfa2V5KGZpZWxkKTsKLSAgICAgIC8vIGNv
bnN0IHVwYl9maWVsZGRlZiogdmFsdWVfZmllbGQgPSBtYXBfZmllbGRfdmFsdWUoZmllbGQpOwot
ICAgICAgLy8gVkFMVUUgdHlwZV9jbGFzcyA9IGZpZWxkX3R5cGVfY2xhc3ModmFsdWVfZmllbGQp
OwotCi0gICAgICAvLyBpZiAodHlwZV9jbGFzcyAhPSBRbmlsKSB7Ci0gICAgICAvLyAgIFZBTFVF
IGFyZ3NbM10gPSB7Ci0gICAgICAvLyAgICAgICBmaWVsZHR5cGVfdG9fcGhwKHVwYl9maWVsZGRl
Zl90eXBlKGtleV9maWVsZCkpLAotICAgICAgLy8gICAgICAgZmllbGR0eXBlX3RvX3BocCh1cGJf
ZmllbGRkZWZfdHlwZSh2YWx1ZV9maWVsZCkpLCB0eXBlX2NsYXNzLAotICAgICAgLy8gICB9Owot
ICAgICAgLy8gICBtYXAgPSBwaHBfY2xhc3NfbmV3X2luc3RhbmNlKDMsIGFyZ3MsIGNNYXApOwot
ICAgICAgLy8gfSBlbHNlIHsKLSAgICAgIC8vICAgVkFMVUUgYXJnc1syXSA9IHsKLSAgICAgIC8v
ICAgICAgIGZpZWxkdHlwZV90b19waHAodXBiX2ZpZWxkZGVmX3R5cGUoa2V5X2ZpZWxkKSksCi0g
ICAgICAvLyAgICAgICBmaWVsZHR5cGVfdG9fcGhwKHVwYl9maWVsZGRlZl90eXBlKHZhbHVlX2Zp
ZWxkKSksCi0gICAgICAvLyAgIH07Ci0gICAgICAvLyAgIG1hcCA9IHBocF9jbGFzc19uZXdfaW5z
dGFuY2UoMiwgYXJncywgY01hcCk7Ci0gICAgICAvLyB9Ci0KLSAgICAgIC8vIERFUkVGKG1lbW9y
eSwgVkFMVUUpID0gbWFwOwotICAgIH0gZWxzZSBpZiAodXBiX2ZpZWxkZGVmX2xhYmVsKGZpZWxk
KSA9PSBVUEJfTEFCRUxfUkVQRUFURUQpIHsKLSAgICAgIC8vIFRPRE8odGVib3JpbmcpOiBBZGQg
aXQgYmFjay4KLSAgICAgIC8vIFZBTFVFIGFyeSA9IFFuaWw7Ci0KLSAgICAgIC8vIFZBTFVFIHR5
cGVfY2xhc3MgPSBmaWVsZF90eXBlX2NsYXNzKGZpZWxkKTsKLQotICAgICAgLy8gaWYgKHR5cGVf
Y2xhc3MgIT0gUW5pbCkgewotICAgICAgLy8gICBWQUxVRSBhcmdzWzJdID0gewotICAgICAgLy8g
ICAgICAgZmllbGR0eXBlX3RvX3BocCh1cGJfZmllbGRkZWZfdHlwZShmaWVsZCkpLCB0eXBlX2Ns
YXNzLAotICAgICAgLy8gICB9OwotICAgICAgLy8gICBhcnkgPSBwaHBfY2xhc3NfbmV3X2luc3Rh
bmNlKDIsIGFyZ3MsIGNSZXBlYXRlZEZpZWxkKTsKLSAgICAgIC8vIH0gZWxzZSB7Ci0gICAgICAv
LyAgIFZBTFVFIGFyZ3NbMV0gPSB7ZmllbGR0eXBlX3RvX3BocCh1cGJfZmllbGRkZWZfdHlwZShm
aWVsZCkpfTsKLSAgICAgIC8vICAgYXJ5ID0gcGhwX2NsYXNzX25ld19pbnN0YW5jZSgxLCBhcmdz
LCBjUmVwZWF0ZWRGaWVsZCk7Ci0gICAgICAvLyB9Ci0KLSAgICAgIC8vIERFUkVGKG1lbW9yeSwg
VkFMVUUpID0gYXJ5OwotICAgIH0gZWxzZSB7Ci0gICAgICBuYXRpdmVfc2xvdF9pbml0KHVwYl9m
aWVsZGRlZl90eXBlKGZpZWxkKSwgbWVtb3J5KTsKLSAgICB9Ci0gIH0KLX0KLQotenZhbCogbGF5
b3V0X2dldChNZXNzYWdlTGF5b3V0KiBsYXlvdXQsIGNvbnN0IHZvaWQqIHN0b3JhZ2UsCi0gICAg
ICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQgVFNSTUxTX0RDKSB7Ci0gIHZv
aWQqIG1lbW9yeSA9IHNsb3RfbWVtb3J5KGxheW91dCwgc3RvcmFnZSwgZmllbGQpOwotICB1aW50
MzJfdCogb25lb2ZfY2FzZSA9IHNsb3Rfb25lb2ZfY2FzZShsYXlvdXQsIHN0b3JhZ2UsIGZpZWxk
KTsKLQotICBpZiAodXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmdvbmVvZihmaWVsZCkpIHsKLSAgICBp
ZiAoKm9uZW9mX2Nhc2UgIT0gdXBiX2ZpZWxkZGVmX251bWJlcihmaWVsZCkpIHsKLSAgICAgIHJl
dHVybiBOVUxMOwotICAgICAgLy8gVE9ETyh0ZWJvcmluZyk6IEFkZCBpdCBiYWNrLgotICAgICAg
Ly8gcmV0dXJuIFFuaWw7Ci0gICAgfQotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgLy8gVE9ETyh0
ZWJvcmluZyk6IEFkZCBpdCBiYWNrLgotICAgIC8vIHJldHVybiBuYXRpdmVfc2xvdF9nZXQodXBi
X2ZpZWxkZGVmX3R5cGUoZmllbGQpLCBmaWVsZF90eXBlX2NsYXNzKGZpZWxkKSwKLSAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSk7Ci0gIH0gZWxzZSBpZiAodXBiX2ZpZWxkZGVm
X2xhYmVsKGZpZWxkKSA9PSBVUEJfTEFCRUxfUkVQRUFURUQpIHsKLSAgICAgIHJldHVybiBOVUxM
OwotICAgIC8vIFRPRE8odGVib3JpbmcpOiBBZGQgaXQgYmFjay4KLSAgICAvLyByZXR1cm4gKigo
VkFMVUUqKW1lbW9yeSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG5hdGl2ZV9zbG90X2dldCgK
LSAgICAgICAgdXBiX2ZpZWxkZGVmX3R5cGUoZmllbGQpLCAvKmZpZWxkX3R5cGVfY2xhc3MoZmll
bGQpLCAqLwotICAgICAgICBtZW1vcnkgVFNSTUxTX0NDKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9w
aHAvZXh0L2dvb2dsZS9wcm90b2J1Zi90ZXN0LnBocCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGhwL2V4dC9nb29nbGUvcHJvdG9idWYv
dGVzdC5waHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYmFkZDQ4YjE4ZWFmMGVh
NTE5NGFiMjJkNmZhYTQxYWJlN2JjZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9waHAvZXh0L2dvb2dsZS9wcm90b2J1Zi90ZXN0LnBocAorKysgL2Rldi9u
dWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/cGhwCi0KLQotbmFtZXNwYWNlIEdvb2dsZVxQcm90b2J1
ZjsKLQotJHBvb2wgPSBnZXRfZ2VuZXJhdGVkX3Bvb2woKTsKLSRwb29sLT5hZGRNZXNzYWdlKCJU
ZXN0TWVzc2FnZSIpCi0gICAgLT5vcHRpb25hbCgib3B0aW9uYWxfaW50MzJfYSIsICJpbnQzMiIs
IDEpCi0gICAgLT5vcHRpb25hbCgib3B0aW9uYWxfaW50MzJfYiIsICJpbnQzMiIsIDIpCi0gICAg
LT5maW5hbGl6ZVRvUG9vbCgpCi0gICAgLT5maW5hbGl6ZSgpOwotCi0kdGVzdF9tZXNzYWdlID0g
bmV3IFxUZXN0TWVzc2FnZSgpOwotCi0/PgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9waHAvZXh0L2dvb2dsZS9wcm90
b2J1Zi91cGIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcGhwL2V4dC9nb29nbGUvcHJvdG9idWYvdXBiLmMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDA0OGExNjNhOTIwYTBhMDhkZjI3M2JkYTVhZGRkNWYyZDQ4MGEyMTcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9waHAvZXh0L2dv
b2dsZS9wcm90b2J1Zi91cGIuYworKysgL2Rldi9udWxsCkBAIC0xLDExOTkwICswLDAgQEAKLS8v
IEFtYWxnYW1hdGVkIHNvdXJjZSBmaWxlCi0jaW5jbHVkZSAidXBiLmgiCi0KLQotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHNp
emVfdCBsZW47Ci0gIGNoYXIgc3RyWzFdOyAgLyogTnVsbC10ZXJtaW5hdGVkIHN0cmluZyBkYXRh
IGZvbGxvd3MuICovCi19IHN0cl90OwotCi1zdGF0aWMgc3RyX3QgKm5ld3N0cihjb25zdCBjaGFy
ICpkYXRhLCBzaXplX3QgbGVuKSB7Ci0gIHN0cl90ICpyZXQgPSBtYWxsb2Moc2l6ZW9mKCpyZXQp
ICsgbGVuKTsKLSAgaWYgKCFyZXQpIHJldHVybiBOVUxMOwotICByZXQtPmxlbiA9IGxlbjsKLSAg
bWVtY3B5KHJldC0+c3RyLCBkYXRhLCBsZW4pOwotICByZXQtPnN0cltsZW5dID0gJ1wwJzsKLSAg
cmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgZnJlZXN0cihzdHJfdCAqcykgeyBmcmVlKHMp
OyB9Ci0KLS8qIGlzYWxwaGEoKSBldGMuIGZyb20gPGN0eXBlLmg+IGFyZSBsb2NhbGUtZGVwZW5k
ZW50LCB3aGljaCB3ZSBkb24ndCB3YW50LiAqLwotc3RhdGljIGJvb2wgdXBiX2lzYmV0d2Vlbihj
aGFyIGMsIGNoYXIgbG93LCBjaGFyIGhpZ2gpIHsKLSAgcmV0dXJuIGMgPj0gbG93ICYmIGMgPD0g
aGlnaDsKLX0KLQotc3RhdGljIGJvb2wgdXBiX2lzbGV0dGVyKGNoYXIgYykgewotICByZXR1cm4g
dXBiX2lzYmV0d2VlbihjLCAnQScsICdaJykgfHwgdXBiX2lzYmV0d2VlbihjLCAnYScsICd6Jykg
fHwgYyA9PSAnXyc7Ci19Ci0KLXN0YXRpYyBib29sIHVwYl9pc2FscGhhbnVtKGNoYXIgYykgewot
ICByZXR1cm4gdXBiX2lzbGV0dGVyKGMpIHx8IHVwYl9pc2JldHdlZW4oYywgJzAnLCAnOScpOwot
fQotCi1zdGF0aWMgYm9vbCB1cGJfaXNpZGVudChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4s
IGJvb2wgZnVsbCwgdXBiX3N0YXR1cyAqcykgewotICBib29sIHN0YXJ0ID0gdHJ1ZTsKLSAgc2l6
ZV90IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGNoYXIgYyA9IHN0cltp
XTsKLSAgICBpZiAoYyA9PSAnLicpIHsKLSAgICAgIGlmIChzdGFydCB8fCAhZnVsbCkgewotICAg
ICAgICB1cGJfc3RhdHVzX3NldGVycmYocywgImludmFsaWQgbmFtZTogdW5leHBlY3RlZCAnLicg
KCVzKSIsIHN0cik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHN0YXJ0
ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7Ci0gICAgICBpZiAoIXVwYl9pc2xldHRl
cihjKSkgewotICAgICAgICB1cGJfc3RhdHVzX3NldGVycmYoCi0gICAgICAgICAgICBzLCAiaW52
YWxpZCBuYW1lOiBwYXRoIGNvbXBvbmVudHMgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyICglcyki
LAotICAgICAgICAgICAgc3RyKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAg
ICAgc3RhcnQgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKCF1cGJfaXNhbHBoYW51
bShjKSkgewotICAgICAgICB1cGJfc3RhdHVzX3NldGVycmYocywgImludmFsaWQgbmFtZTogbm9u
LWFscGhhbnVtZXJpYyBjaGFyYWN0ZXIgKCVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJl
dHVybiAhc3RhcnQ7Ci19Ci0KLQotLyogdXBiX2RlZiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdXBiX2RlZnR5
cGVfdCB1cGJfZGVmX3R5cGUoY29uc3QgdXBiX2RlZiAqZCkgeyByZXR1cm4gZC0+dHlwZTsgfQot
Ci1jb25zdCBjaGFyICp1cGJfZGVmX2Z1bGxuYW1lKGNvbnN0IHVwYl9kZWYgKmQpIHsgcmV0dXJu
IGQtPmZ1bGxuYW1lOyB9Ci0KLWJvb2wgdXBiX2RlZl9zZXRmdWxsbmFtZSh1cGJfZGVmICpkZWYs
IGNvbnN0IGNoYXIgKmZ1bGxuYW1lLCB1cGJfc3RhdHVzICpzKSB7Ci0gIGFzc2VydCghdXBiX2Rl
Zl9pc2Zyb3plbihkZWYpKTsKLSAgaWYgKCF1cGJfaXNpZGVudChmdWxsbmFtZSwgc3RybGVuKGZ1
bGxuYW1lKSwgdHJ1ZSwgcykpIHJldHVybiBmYWxzZTsKLSAgZnJlZSgodm9pZCopZGVmLT5mdWxs
bmFtZSk7Ci0gIGRlZi0+ZnVsbG5hbWUgPSB1cGJfc3RyZHVwKGZ1bGxuYW1lKTsKLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLXVwYl9kZWYgKnVwYl9kZWZfZHVwKGNvbnN0IHVwYl9kZWYgKmRlZiwgY29u
c3Qgdm9pZCAqbykgewotICBzd2l0Y2ggKGRlZi0+dHlwZSkgewotICAgIGNhc2UgVVBCX0RFRl9N
U0c6Ci0gICAgICByZXR1cm4gdXBiX21zZ2RlZl91cGNhc3RfbXV0YWJsZSgKLSAgICAgICAgICB1
cGJfbXNnZGVmX2R1cCh1cGJfZG93bmNhc3RfbXNnZGVmKGRlZiksIG8pKTsKLSAgICBjYXNlIFVQ
Ql9ERUZfRklFTEQ6Ci0gICAgICByZXR1cm4gdXBiX2ZpZWxkZGVmX3VwY2FzdF9tdXRhYmxlKAot
ICAgICAgICAgIHVwYl9maWVsZGRlZl9kdXAodXBiX2Rvd25jYXN0X2ZpZWxkZGVmKGRlZiksIG8p
KTsKLSAgICBjYXNlIFVQQl9ERUZfRU5VTToKLSAgICAgIHJldHVybiB1cGJfZW51bWRlZl91cGNh
c3RfbXV0YWJsZSgKLSAgICAgICAgICB1cGJfZW51bWRlZl9kdXAodXBiX2Rvd25jYXN0X2VudW1k
ZWYoZGVmKSwgbykpOwotICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSk7IHJldHVybiBOVUxMOwot
ICB9Ci19Ci0KLXN0YXRpYyBib29sIHVwYl9kZWZfaW5pdCh1cGJfZGVmICpkZWYsIHVwYl9kZWZ0
eXBlX3QgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdXBiX3Jl
ZmNvdW50ZWRfdnRibCAqdnRibCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lk
ICpvd25lcikgewotICBpZiAoIXVwYl9yZWZjb3VudGVkX2luaXQodXBiX2RlZl91cGNhc3RfbXV0
YWJsZShkZWYpLCB2dGJsLCBvd25lcikpIHJldHVybiBmYWxzZTsKLSAgZGVmLT50eXBlID0gdHlw
ZTsKLSAgZGVmLT5mdWxsbmFtZSA9IE5VTEw7Ci0gIGRlZi0+Y2FtZV9mcm9tX3VzZXIgPSBmYWxz
ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwYl9kZWZfdW5pbml0KHVwYl9k
ZWYgKmRlZikgewotICBmcmVlKCh2b2lkKilkZWYtPmZ1bGxuYW1lKTsKLX0KLQotc3RhdGljIGNv
bnN0IGNoYXIgKm1zZ2RlZl9uYW1lKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgY29uc3QgY2hh
ciAqbmFtZSA9IHVwYl9kZWZfZnVsbG5hbWUodXBiX21zZ2RlZl91cGNhc3QobSkpOwotICByZXR1
cm4gbmFtZSA/IG5hbWUgOiAiKGFub255bW91cykiOwotfQotCi1zdGF0aWMgYm9vbCB1cGJfdmFs
aWRhdGVfZmllbGQodXBiX2ZpZWxkZGVmICpmLCB1cGJfc3RhdHVzICpzKSB7Ci0gIGlmICh1cGJf
ZmllbGRkZWZfbmFtZShmKSA9PSBOVUxMIHx8IHVwYl9maWVsZGRlZl9udW1iZXIoZikgPT0gMCkg
ewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHMsICJmaWVsZGRlZiBtdXN0IGhhdmUgbmFtZSBh
bmQgbnVtYmVyIHNldCIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICghZi0+dHlw
ZV9pc19zZXRfKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgImZpZWxkZGVmIHR5cGUg
d2FzIG5vdCBpbml0aWFsaXplZCIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICh1
cGJfZmllbGRkZWZfbGF6eShmKSAmJgotICAgICAgdXBiX2ZpZWxkZGVmX2Rlc2NyaXB0b3J0eXBl
KGYpICE9IFVQQl9ERVNDUklQVE9SX1RZUEVfTUVTU0FHRSkgewotICAgIHVwYl9zdGF0dXNfc2V0
ZXJybXNnKHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkgbGVuZ3RoLWRlbGltaXRl
ZCBzdWJtZXNzYWdlIGZpZWxkcyBtYXkgYmUgbGF6eSIpOwotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIGlmICh1cGJfZmllbGRkZWZfaGFzc3ViZGVmKGYpKSB7Ci0gICAgY29uc3QgdXBiX2Rl
ZiAqc3ViZGVmOwotCi0gICAgaWYgKGYtPnN1YmRlZl9pc19zeW1ib2xpYykgewotICAgICAgdXBi
X3N0YXR1c19zZXRlcnJmKHMsICJmaWVsZCAnJXMuJXMnIGhhcyBub3QgYmVlbiByZXNvbHZlZCIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgbXNnZGVmX25hbWUoZi0+bXNnLmRlZiksIHVwYl9m
aWVsZGRlZl9uYW1lKGYpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdWJk
ZWYgPSB1cGJfZmllbGRkZWZfc3ViZGVmKGYpOwotICAgIGlmIChzdWJkZWYgPT0gTlVMTCkgewot
ICAgICAgdXBiX3N0YXR1c19zZXRlcnJmKHMsICJmaWVsZCAlcy4lcyBpcyBtaXNzaW5nIHJlcXVp
cmVkIHN1YmRlZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbXNnZGVmX25hbWUoZi0+bXNn
LmRlZiksIHVwYl9maWVsZGRlZl9uYW1lKGYpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAoIXVwYl9kZWZfaXNmcm96ZW4oc3ViZGVmKSAmJiAhc3ViZGVmLT5jYW1lX2Zy
b21fdXNlcikgewotICAgICAgdXBiX3N0YXR1c19zZXRlcnJmKHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgInN1YmRlZiBvZiBmaWVsZCAlcy4lcyBpcyBub3QgZnJvemVuIG9yIGJlaW5nIGZy
b3plbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbXNnZGVmX25hbWUoZi0+bXNnLmRlZiks
IHVwYl9maWVsZGRlZl9uYW1lKGYpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0K
LQotICBpZiAodXBiX2ZpZWxkZGVmX3R5cGUoZikgPT0gVVBCX1RZUEVfRU5VTSkgewotICAgIGJv
b2wgaGFzX2RlZmF1bHRfbmFtZSA9IHVwYl9maWVsZGRlZl9lbnVtaGFzZGVmYXVsdHN0cihmKTsK
LSAgICBib29sIGhhc19kZWZhdWx0X251bWJlciA9IHVwYl9maWVsZGRlZl9lbnVtaGFzZGVmYXVs
dGludDMyKGYpOwotCi0gICAgLyogUHJldmlvdXNseSB2ZXJpZmllZCBieSB1cGJfdmFsaWRhdGVf
ZW51bWRlZigpLiAqLwotICAgIGFzc2VydCh1cGJfZW51bWRlZl9udW12YWxzKHVwYl9maWVsZGRl
Zl9lbnVtc3ViZGVmKGYpKSA+IDApOwotCi0gICAgLyogV2UndmUgYWxyZWFkeSB2YWxpZGF0ZWQg
dGhhdCB3ZSBoYXZlIGFuIGFzc29jaWF0ZWQgZW51bWRlZiBhbmQgdGhhdCBpdAotICAgICAqIGhh
cyBhdCBsZWFzdCBvbmUgbWVtYmVyLCBzbyBhdCBsZWFzdCBvbmUgb2YgdGhlc2Ugc2hvdWxkIGJl
IHRydWUuCi0gICAgICogQmVjYXVzZSBpZiB0aGUgdXNlciBkaWRuJ3Qgc2V0IGFueXRoaW5nLCB3
ZSdsbCBwaWNrIHVwIHRoZSBlbnVtJ3MKLSAgICAgKiBkZWZhdWx0LCBidXQgaWYgdGhlIHVzZXIg
KmRpZCogc2V0IHNvbWV0aGluZyB3ZSBzaG91bGQgYXQgbGVhc3QgcGljayB1cAotICAgICAqIHRo
ZSBvbmUgdGhleSBzZXQgKGludDMyIG9yIHN0cmluZykuICovCi0gICAgYXNzZXJ0KGhhc19kZWZh
dWx0X25hbWUgfHwgaGFzX2RlZmF1bHRfbnVtYmVyKTsKLQotICAgIGlmICghaGFzX2RlZmF1bHRf
bmFtZSkgewotICAgICAgdXBiX3N0YXR1c19zZXRlcnJmKHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgImVudW0gZGVmYXVsdCBmb3IgZmllbGQgJXMuJXMgKCVkKSBpcyBub3QgaW4gdGhlIGVu
dW0iLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2RlZl9uYW1lKGYtPm1zZy5kZWYpLCB1
cGJfZmllbGRkZWZfbmFtZShmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfZmllbGRk
ZWZfZGVmYXVsdGludDMyKGYpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWhhc19kZWZhdWx0X251bWJlcikgewotICAgICAgdXBiX3N0YXR1c19zZXRlcnJmKHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgImVudW0gZGVmYXVsdCBmb3IgZmllbGQgJXMuJXMgKCVz
KSBpcyBub3QgaW4gdGhlIGVudW0iLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2RlZl9u
YW1lKGYtPm1zZy5kZWYpLCB1cGJfZmllbGRkZWZfbmFtZShmKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGJfZmllbGRkZWZfZGVmYXVsdHN0cihmLCBOVUxMKSk7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLyogTGlmdCB0aGUgZWZmZWN0aXZlIG51bWVyaWMgZGVmYXVs
dCBpbnRvIHRoZSBmaWVsZCdzIGRlZmF1bHQgc2xvdCwgaW4gY2FzZQotICAgICAqIHdlIHdlcmUg
b25seSBnZXR0aW5nIGl0ICJieSByZWZlcmVuY2UiIGZyb20gdGhlIGVudW1kZWYuICovCi0gICAg
dXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRpbnQzMihmLCB1cGJfZmllbGRkZWZfZGVmYXVsdGludDMy
KGYpKTsKLSAgfQotCi0gIC8qIEVuc3VyZSB0aGF0IE1hcEVudHJ5IHN1Ym1lc3NhZ2VzIG9ubHkg
YXBwZWFyIGFzIHJlcGVhdGVkIGZpZWxkcywgbm90Ci0gICAqIG9wdGlvbmFsL3JlcXVpcmVkIChz
aW5ndWxhcikgZmllbGRzLiAqLwotICBpZiAodXBiX2ZpZWxkZGVmX3R5cGUoZikgPT0gVVBCX1RZ
UEVfTUVTU0FHRSAmJgotICAgICAgdXBiX2ZpZWxkZGVmX21zZ3N1YmRlZihmKSAhPSBOVUxMKSB7
Ci0gICAgY29uc3QgdXBiX21zZ2RlZiAqc3ViZGVmID0gdXBiX2ZpZWxkZGVmX21zZ3N1YmRlZihm
KTsKLSAgICBpZiAodXBiX21zZ2RlZl9tYXBlbnRyeShzdWJkZWYpICYmICF1cGJfZmllbGRkZWZf
aXNzZXEoZikpIHsKLSAgICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICJGaWVsZCAlcyByZWZlcnMgdG8gbWFwZW50cnkgbWVzc2FnZSBidXQgaXMgbm90
ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiYSByZXBlYXRlZCBmaWVsZCIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgdXBiX2ZpZWxkZGVmX25hbWUoZikgPyB1cGJfZmllbGRkZWZfbmFt
ZShmKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIih1bm5hbWVkKSIpOwotICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9v
bCB1cGJfdmFsaWRhdGVfZW51bWRlZihjb25zdCB1cGJfZW51bWRlZiAqZSwgdXBiX3N0YXR1cyAq
cykgewotICBpZiAodXBiX2VudW1kZWZfbnVtdmFscyhlKSA9PSAwKSB7Ci0gICAgdXBiX3N0YXR1
c19zZXRlcnJmKHMsICJlbnVtICVzIGhhcyBubyBtZW1iZXJzIChtdXN0IGhhdmUgYXQgbGVhc3Qg
b25lKSIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVwYl9lbnVtZGVmX2Z1bGxuYW1lKGUpKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLyogQWxsIHN1
Ym1lc3NhZ2UgZmllbGRzIGFyZSBsb3dlciB0aGFuIGFsbCBvdGhlciBmaWVsZHMuCi0gKiBTZWNv
bmRseSwgZmllbGRzIGFyZSBpbmNyZWFzaW5nIGluIG9yZGVyLiAqLwotdWludDMyX3QgZmllbGRf
cmFuayhjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgdWludDMyX3QgcmV0ID0gdXBiX2ZpZWxk
ZGVmX251bWJlcihmKTsKLSAgY29uc3QgdWludDMyX3QgaGlnaF9iaXQgPSAxIDw8IDMwOwotICBh
c3NlcnQocmV0IDwgaGlnaF9iaXQpOwotICBpZiAoIXVwYl9maWVsZGRlZl9pc3N1Ym1zZyhmKSkK
LSAgICByZXQgfD0gaGlnaF9iaXQ7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWludCBjbXBfZmllbGRz
KGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikgewotICBjb25zdCB1cGJfZmllbGRkZWYg
KmYxID0gKih1cGJfZmllbGRkZWYqY29uc3QqKXAxOwotICBjb25zdCB1cGJfZmllbGRkZWYgKmYy
ID0gKih1cGJfZmllbGRkZWYqY29uc3QqKXAyOwotICByZXR1cm4gZmllbGRfcmFuayhmMSkgLSBm
aWVsZF9yYW5rKGYyKTsKLX0KLQotc3RhdGljIGJvb2wgYXNzaWduX21zZ19pbmRpY2VzKHVwYl9t
c2dkZWYgKm0sIHVwYl9zdGF0dXMgKnMpIHsKLSAgLyogU29ydCBmaWVsZHMuICB1cGIgaW50ZXJu
YWxseSByZWxpZXMgb24gVVBCX1RZUEVfTUVTU0FHRSBmaWVsZHMgaGF2aW5nIHRoZQotICAgKiBs
b3dlc3QgaW5kZXhlcywgYnV0IHdlIGRvIG5vdCBwdWJsaWNseSBndWFyYW50ZWUgdGhpcy4gKi8K
LSAgdXBiX21zZ19maWVsZF9pdGVyIGo7Ci0gIGludCBpOwotICB1aW50MzJfdCBzZWxlY3RvcjsK
LSAgaW50IG4gPSB1cGJfbXNnZGVmX251bWZpZWxkcyhtKTsKLSAgdXBiX2ZpZWxkZGVmICoqZmll
bGRzID0gbWFsbG9jKG4gKiBzaXplb2YoKmZpZWxkcykpOwotICBpZiAoIWZpZWxkcykgcmV0dXJu
IGZhbHNlOwotCi0gIG0tPnN1Ym1zZ19maWVsZF9jb3VudCA9IDA7Ci0gIGZvcihpID0gMCwgdXBi
X21zZ19maWVsZF9iZWdpbigmaiwgbSk7Ci0gICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZqKTsK
LSAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaiksIGkrKykgewotICAgIHVwYl9maWVsZGRlZiAq
ZiA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaik7Ci0gICAgYXNzZXJ0KGYtPm1zZy5kZWYgPT0gbSk7
Ci0gICAgaWYgKCF1cGJfdmFsaWRhdGVfZmllbGQoZiwgcykpIHsKLSAgICAgIGZyZWUoZmllbGRz
KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHVwYl9maWVsZGRlZl9pc3N1
Ym1zZyhmKSkgewotICAgICAgbS0+c3VibXNnX2ZpZWxkX2NvdW50Kys7Ci0gICAgfQotICAgIGZp
ZWxkc1tpXSA9IGY7Ci0gIH0KLQotICBxc29ydChmaWVsZHMsIG4sIHNpemVvZigqZmllbGRzKSwg
Y21wX2ZpZWxkcyk7Ci0KLSAgc2VsZWN0b3IgPSBVUEJfU1RBVElDX1NFTEVDVE9SX0NPVU5UICsg
bS0+c3VibXNnX2ZpZWxkX2NvdW50OwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAg
dXBiX2ZpZWxkZGVmICpmID0gZmllbGRzW2ldOwotICAgIGYtPmluZGV4XyA9IGk7Ci0gICAgZi0+
c2VsZWN0b3JfYmFzZSA9IHNlbGVjdG9yICsgdXBiX2hhbmRsZXJzX3NlbGVjdG9yYmFzZW9mZnNl
dChmKTsKLSAgICBzZWxlY3RvciArPSB1cGJfaGFuZGxlcnNfc2VsZWN0b3Jjb3VudChmKTsKLSAg
fQotICBtLT5zZWxlY3Rvcl9jb3VudCA9IHNlbGVjdG9yOwotCi0jaWZuZGVmIE5ERUJVRwotICB7
Ci0gICAgLyogVmVyaWZ5IHRoYXQgYWxsIHNlbGVjdG9ycyBmb3IgdGhlIG1lc3NhZ2UgYXJlIGRp
c3RpbmN0LiAqLwotI2RlZmluZSBUUlkodHlwZSkgXAotICAgIGlmICh1cGJfaGFuZGxlcnNfZ2V0
c2VsZWN0b3IoZiwgdHlwZSwgJnNlbCkpIHVwYl9pbnR0YWJsZV9pbnNlcnQoJnQsIHNlbCwgdik7
Ci0KLSAgICB1cGJfaW50dGFibGUgdDsKLSAgICB1cGJfdmFsdWUgdjsKLSAgICB1cGJfc2VsZWN0
b3JfdCBzZWw7Ci0KLSAgICB1cGJfaW50dGFibGVfaW5pdCgmdCwgVVBCX0NUWVBFX0JPT0wpOwot
ICAgIHYgPSB1cGJfdmFsdWVfYm9vbCh0cnVlKTsKLSAgICB1cGJfaW50dGFibGVfaW5zZXJ0KCZ0
LCBVUEJfU1RBUlRNU0dfU0VMRUNUT1IsIHYpOwotICAgIHVwYl9pbnR0YWJsZV9pbnNlcnQoJnQs
IFVQQl9FTkRNU0dfU0VMRUNUT1IsIHYpOwotICAgIGZvcih1cGJfbXNnX2ZpZWxkX2JlZ2luKCZq
LCBtKTsKLSAgICAgICAgIXVwYl9tc2dfZmllbGRfZG9uZSgmaik7Ci0gICAgICAgIHVwYl9tc2df
ZmllbGRfbmV4dCgmaikpIHsKLSAgICAgIHVwYl9maWVsZGRlZiAqZiA9IHVwYl9tc2dfaXRlcl9m
aWVsZCgmaik7Ci0gICAgICAvKiBUaGVzZSBjYWxscyB3aWxsIGFzc2VydC1mYWlsIGluIHVwYl90
YWJsZSBpZiB0aGUgdmFsdWUgYWxyZWFkeQotICAgICAgICogZXhpc3RzLiAqLwotICAgICAgVFJZ
KFVQQl9IQU5ETEVSX0lOVDMyKTsKLSAgICAgIFRSWShVUEJfSEFORExFUl9JTlQ2NCkKLSAgICAg
IFRSWShVUEJfSEFORExFUl9VSU5UMzIpCi0gICAgICBUUlkoVVBCX0hBTkRMRVJfVUlOVDY0KQot
ICAgICAgVFJZKFVQQl9IQU5ETEVSX0ZMT0FUKQotICAgICAgVFJZKFVQQl9IQU5ETEVSX0RPVUJM
RSkKLSAgICAgIFRSWShVUEJfSEFORExFUl9CT09MKQotICAgICAgVFJZKFVQQl9IQU5ETEVSX1NU
QVJUU1RSKQotICAgICAgVFJZKFVQQl9IQU5ETEVSX1NUUklORykKLSAgICAgIFRSWShVUEJfSEFO
RExFUl9FTkRTVFIpCi0gICAgICBUUlkoVVBCX0hBTkRMRVJfU1RBUlRTVUJNU0cpCi0gICAgICBU
UlkoVVBCX0hBTkRMRVJfRU5EU1VCTVNHKQotICAgICAgVFJZKFVQQl9IQU5ETEVSX1NUQVJUU0VR
KQotICAgICAgVFJZKFVQQl9IQU5ETEVSX0VORFNFUSkKLSAgICB9Ci0gICAgdXBiX2ludHRhYmxl
X3VuaW5pdCgmdCk7Ci0gIH0KLSN1bmRlZiBUUlkKLSNlbmRpZgotCi0gIGZyZWUoZmllbGRzKTsK
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdXBiX2RlZl9mcmVlemUodXBiX2RlZiAqY29uc3Qq
IGRlZnMsIGludCBuLCB1cGJfc3RhdHVzICpzKSB7Ci0gIGludCBpOwotICBpbnQgbWF4ZGVwdGg7
Ci0gIGJvb2wgcmV0OwotICB1cGJfc3RhdHVzX2NsZWFyKHMpOwotCi0gIC8qIEZpcnN0IHBlcmZv
cm0gdmFsaWRhdGlvbiwgaW4gdHdvIHBhc3NlcyBzbyB3ZSBjYW4gY2hlY2sgdGhhdCB3ZSBoYXZl
IGEKLSAgICogdHJhbnNpdGl2ZSBjbG9zdXJlIHdpdGhvdXQgbmVlZGluZyB0byBzZWFyY2guICov
Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICB1cGJfZGVmICpkZWYgPSBkZWZzW2ld
OwotICAgIGlmICh1cGJfZGVmX2lzZnJvemVuKGRlZikpIHsKLSAgICAgIC8qIENvdWxkIHJlbGF4
IHRoaXMgcmVxdWlyZW1lbnQgaWYgaXQncyBhbm5veWluZy4gKi8KLSAgICAgIHVwYl9zdGF0dXNf
c2V0ZXJybXNnKHMsICJkZWYgaXMgYWxyZWFkeSBmcm96ZW4iKTsKLSAgICAgIGdvdG8gZXJyOwot
ICAgIH0gZWxzZSBpZiAoZGVmLT50eXBlID09IFVQQl9ERUZfRklFTEQpIHsKLSAgICAgIHVwYl9z
dGF0dXNfc2V0ZXJybXNnKHMsICJzdGFuZGFsb25lIGZpZWxkZGVmcyBjYW4gbm90IGJlIGZyb3pl
biIpOwotICAgICAgZ290byBlcnI7Ci0gICAgfSBlbHNlIGlmIChkZWYtPnR5cGUgPT0gVVBCX0RF
Rl9FTlVNKSB7Ci0gICAgICBpZiAoIXVwYl92YWxpZGF0ZV9lbnVtZGVmKHVwYl9keW5jYXN0X2Vu
dW1kZWYoZGVmKSwgcykpIHsKLSAgICAgICAgZ290byBlcnI7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIC8qIFNldCBub3cgdG8gZGV0ZWN0IHRyYW5zaXRpdmUgY2xvc3VyZSBpbiB0aGUg
c2Vjb25kIHBhc3MuICovCi0gICAgICBkZWYtPmNhbWVfZnJvbV91c2VyID0gdHJ1ZTsKLSAgICB9
Ci0gIH0KLQotICAvKiBTZWNvbmQgcGFzcyBvZiB2YWxpZGF0aW9uLiAgQWxzbyBhc3NpZ24gc2Vs
ZWN0b3IgYmFzZXMgYW5kIGluZGV4ZXMsIGFuZAotICAgKiBjb21wYWN0IHRhYmxlcy4gKi8KLSAg
Zm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIHVwYl9tc2dkZWYgKm0gPSB1cGJfZHluY2Fz
dF9tc2dkZWZfbXV0YWJsZShkZWZzW2ldKTsKLSAgICB1cGJfZW51bWRlZiAqZSA9IHVwYl9keW5j
YXN0X2VudW1kZWZfbXV0YWJsZShkZWZzW2ldKTsKLSAgICBpZiAobSkgewotICAgICAgdXBiX2lu
dHRhYmxlX2NvbXBhY3QoJm0tPml0b2YpOwotICAgICAgaWYgKCFhc3NpZ25fbXNnX2luZGljZXMo
bSwgcykpIHsKLSAgICAgICAgZ290byBlcnI7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChlKSB7
Ci0gICAgICB1cGJfaW50dGFibGVfY29tcGFjdCgmZS0+aXRvbik7Ci0gICAgfQotICB9Ci0KLSAg
LyogRGVmIGdyYXBoIGNvbnRhaW5zIEZpZWxkRGVmcyBiZXR3ZWVuIGVhY2ggTWVzc2FnZURlZiwg
c28gZG91YmxlIHRoZQotICAgKiBsaW1pdC4gKi8KLSAgbWF4ZGVwdGggPSBVUEJfTUFYX01FU1NB
R0VfREVQVEggKiAyOwotCi0gIC8qIFZhbGlkYXRpb24gYWxsIHBhc3NlZDsgZnJlZXplIHRoZSBk
ZWZzLiAqLwotICByZXQgPSB1cGJfcmVmY291bnRlZF9mcmVlemUoKHVwYl9yZWZjb3VudGVkICog
Y29uc3QgKilkZWZzLCBuLCBzLCBtYXhkZXB0aCk7Ci0gIGFzc2VydCghKHMgJiYgcmV0ICE9IHVw
Yl9vayhzKSkpOwotICByZXR1cm4gcmV0OwotCi1lcnI6Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBp
KyspIHsKLSAgICBkZWZzW2ldLT5jYW1lX2Zyb21fdXNlciA9IGZhbHNlOwotICB9Ci0gIGFzc2Vy
dCghKHMgJiYgdXBiX29rKHMpKSk7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotCi0vKiB1cGJfZW51
bWRlZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCB1cGJfZW51bWRlZl9mcmVlKHVwYl9yZWZjb3Vu
dGVkICpyKSB7Ci0gIHVwYl9lbnVtZGVmICplID0gKHVwYl9lbnVtZGVmKilyOwotICB1cGJfaW50
dGFibGVfaXRlciBpOwotICB1cGJfaW50dGFibGVfYmVnaW4oJmksICZlLT5pdG9uKTsKLSAgZm9y
KCA7ICF1cGJfaW50dGFibGVfZG9uZSgmaSk7IHVwYl9pbnR0YWJsZV9uZXh0KCZpKSkgewotICAg
IC8qIFRvIGNsZWFuIHVwIHRoZSB1cGJfc3RyZHVwKCkgZnJvbSB1cGJfZW51bWRlZl9hZGR2YWwo
KS4gKi8KLSAgICBmcmVlKHVwYl92YWx1ZV9nZXRjc3RyKHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVl
KCZpKSkpOwotICB9Ci0gIHVwYl9zdHJ0YWJsZV91bmluaXQoJmUtPm50b2kpOwotICB1cGJfaW50
dGFibGVfdW5pbml0KCZlLT5pdG9uKTsKLSAgdXBiX2RlZl91bmluaXQodXBiX2VudW1kZWZfdXBj
YXN0X211dGFibGUoZSkpOwotICBmcmVlKGUpOwotfQotCi11cGJfZW51bWRlZiAqdXBiX2VudW1k
ZWZfbmV3KGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXBiX3Jl
ZmNvdW50ZWRfdnRibCB2dGJsID0ge05VTEwsICZ1cGJfZW51bWRlZl9mcmVlfTsKLSAgdXBiX2Vu
dW1kZWYgKmUgPSBtYWxsb2Moc2l6ZW9mKCplKSk7Ci0gIGlmICghZSkgcmV0dXJuIE5VTEw7Ci0g
IGlmICghdXBiX2RlZl9pbml0KHVwYl9lbnVtZGVmX3VwY2FzdF9tdXRhYmxlKGUpLCBVUEJfREVG
X0VOVU0sICZ2dGJsLCBvd25lcikpCi0gICAgZ290byBlcnIyOwotICBpZiAoIXVwYl9zdHJ0YWJs
ZV9pbml0KCZlLT5udG9pLCBVUEJfQ1RZUEVfSU5UMzIpKSBnb3RvIGVycjI7Ci0gIGlmICghdXBi
X2ludHRhYmxlX2luaXQoJmUtPml0b24sIFVQQl9DVFlQRV9DU1RSKSkgZ290byBlcnIxOwotICBy
ZXR1cm4gZTsKLQotZXJyMToKLSAgdXBiX3N0cnRhYmxlX3VuaW5pdCgmZS0+bnRvaSk7Ci1lcnIy
OgotICBmcmVlKGUpOwotICByZXR1cm4gTlVMTDsKLX0KLQotdXBiX2VudW1kZWYgKnVwYl9lbnVt
ZGVmX2R1cChjb25zdCB1cGJfZW51bWRlZiAqZSwgY29uc3Qgdm9pZCAqb3duZXIpIHsKLSAgdXBi
X2VudW1faXRlciBpOwotICB1cGJfZW51bWRlZiAqbmV3X2UgPSB1cGJfZW51bWRlZl9uZXcob3du
ZXIpOwotICBpZiAoIW5ld19lKSByZXR1cm4gTlVMTDsKLSAgZm9yKHVwYl9lbnVtX2JlZ2luKCZp
LCBlKTsgIXVwYl9lbnVtX2RvbmUoJmkpOyB1cGJfZW51bV9uZXh0KCZpKSkgewotICAgIGJvb2wg
c3VjY2VzcyA9IHVwYl9lbnVtZGVmX2FkZHZhbCgKLSAgICAgICAgbmV3X2UsIHVwYl9lbnVtX2l0
ZXJfbmFtZSgmaSksdXBiX2VudW1faXRlcl9udW1iZXIoJmkpLCBOVUxMKTsKLSAgICBpZiAoIXN1
Y2Nlc3MpIHsKLSAgICAgIHVwYl9lbnVtZGVmX3VucmVmKG5ld19lLCBvd25lcik7Ci0gICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG5ld19lOwotfQotCi1ib29sIHVwYl9l
bnVtZGVmX2ZyZWV6ZSh1cGJfZW51bWRlZiAqZSwgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0gIHVw
Yl9kZWYgKmQgPSB1cGJfZW51bWRlZl91cGNhc3RfbXV0YWJsZShlKTsKLSAgcmV0dXJuIHVwYl9k
ZWZfZnJlZXplKCZkLCAxLCBzdGF0dXMpOwotfQotCi1jb25zdCBjaGFyICp1cGJfZW51bWRlZl9m
dWxsbmFtZShjb25zdCB1cGJfZW51bWRlZiAqZSkgewotICByZXR1cm4gdXBiX2RlZl9mdWxsbmFt
ZSh1cGJfZW51bWRlZl91cGNhc3QoZSkpOwotfQotCi1ib29sIHVwYl9lbnVtZGVmX3NldGZ1bGxu
YW1lKHVwYl9lbnVtZGVmICplLCBjb25zdCBjaGFyICpmdWxsbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcykgewotICByZXR1cm4gdXBiX2RlZl9zZXRmdWxs
bmFtZSh1cGJfZW51bWRlZl91cGNhc3RfbXV0YWJsZShlKSwgZnVsbG5hbWUsIHMpOwotfQotCi1i
b29sIHVwYl9lbnVtZGVmX2FkZHZhbCh1cGJfZW51bWRlZiAqZSwgY29uc3QgY2hhciAqbmFtZSwg
aW50MzJfdCBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3RhdHVzICpzdGF0dXMp
IHsKLSAgaWYgKCF1cGJfaXNpZGVudChuYW1lLCBzdHJsZW4obmFtZSksIGZhbHNlLCBzdGF0dXMp
KSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmICh1cGJfZW51bWRlZl9udG9peihlLCBu
YW1lLCBOVUxMKSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzdGF0dXMsICJuYW1lICclcycg
aXMgYWxyZWFkeSBkZWZpbmVkIiwgbmFtZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlm
ICghdXBiX3N0cnRhYmxlX2luc2VydCgmZS0+bnRvaSwgbmFtZSwgdXBiX3ZhbHVlX2ludDMyKG51
bSkpKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2coc3RhdHVzLCAib3V0IG9mIG1lbW9yeSIp
OwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoIXVwYl9pbnR0YWJsZV9sb29rdXAoJmUt
Pml0b24sIG51bSwgTlVMTCkgJiYKLSAgICAgICF1cGJfaW50dGFibGVfaW5zZXJ0KCZlLT5pdG9u
LCBudW0sIHVwYl92YWx1ZV9jc3RyKHVwYl9zdHJkdXAobmFtZSkpKSkgewotICAgIHVwYl9zdGF0
dXNfc2V0ZXJybXNnKHN0YXR1cywgIm91dCBvZiBtZW1vcnkiKTsKLSAgICB1cGJfc3RydGFibGVf
cmVtb3ZlKCZlLT5udG9pLCBuYW1lLCBOVUxMKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAg
aWYgKHVwYl9lbnVtZGVmX251bXZhbHMoZSkgPT0gMSkgewotICAgIGJvb2wgb2sgPSB1cGJfZW51
bWRlZl9zZXRkZWZhdWx0KGUsIG51bSwgTlVMTCk7Ci0gICAgVVBCX0FTU0VSVF9WQVIob2ssIG9r
KTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50MzJfdCB1cGJfZW51bWRlZl9kZWZhdWx0
KGNvbnN0IHVwYl9lbnVtZGVmICplKSB7Ci0gIGFzc2VydCh1cGJfZW51bWRlZl9pdG9uKGUsIGUt
PmRlZmF1bHR2YWwpKTsKLSAgcmV0dXJuIGUtPmRlZmF1bHR2YWw7Ci19Ci0KLWJvb2wgdXBiX2Vu
dW1kZWZfc2V0ZGVmYXVsdCh1cGJfZW51bWRlZiAqZSwgaW50MzJfdCB2YWwsIHVwYl9zdGF0dXMg
KnMpIHsKLSAgYXNzZXJ0KCF1cGJfZW51bWRlZl9pc2Zyb3plbihlKSk7Ci0gIGlmICghdXBiX2Vu
dW1kZWZfaXRvbihlLCB2YWwpKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJmKHMsICJudW1iZXIg
JyVkJyBpcyBub3QgaW4gdGhlIGVudW0uIiwgdmFsKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LSAgZS0+ZGVmYXVsdHZhbCA9IHZhbDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCB1cGJfZW51
bWRlZl9udW12YWxzKGNvbnN0IHVwYl9lbnVtZGVmICplKSB7Ci0gIHJldHVybiB1cGJfc3RydGFi
bGVfY291bnQoJmUtPm50b2kpOwotfQotCi12b2lkIHVwYl9lbnVtX2JlZ2luKHVwYl9lbnVtX2l0
ZXIgKmksIGNvbnN0IHVwYl9lbnVtZGVmICplKSB7Ci0gIC8qIFdlIGl0ZXJhdGUgb3ZlciB0aGUg
bnRvaSB0YWJsZSwgdG8gYWNjb3VudCBmb3IgZHVwbGljYXRlIG51bWJlcnMuICovCi0gIHVwYl9z
dHJ0YWJsZV9iZWdpbihpLCAmZS0+bnRvaSk7Ci19Ci0KLXZvaWQgdXBiX2VudW1fbmV4dCh1cGJf
ZW51bV9pdGVyICppdGVyKSB7IHVwYl9zdHJ0YWJsZV9uZXh0KGl0ZXIpOyB9Ci1ib29sIHVwYl9l
bnVtX2RvbmUodXBiX2VudW1faXRlciAqaXRlcikgeyByZXR1cm4gdXBiX3N0cnRhYmxlX2RvbmUo
aXRlcik7IH0KLQotYm9vbCB1cGJfZW51bWRlZl9udG9pKGNvbnN0IHVwYl9lbnVtZGVmICpkZWYs
IGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgaW50
MzJfdCAqbnVtKSB7Ci0gIHVwYl92YWx1ZSB2OwotICBpZiAoIXVwYl9zdHJ0YWJsZV9sb29rdXAy
KCZkZWYtPm50b2ksIG5hbWUsIGxlbiwgJnYpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0g
IGlmIChudW0pICpudW0gPSB1cGJfdmFsdWVfZ2V0aW50MzIodik7Ci0gIHJldHVybiB0cnVlOwot
fQotCi1jb25zdCBjaGFyICp1cGJfZW51bWRlZl9pdG9uKGNvbnN0IHVwYl9lbnVtZGVmICpkZWYs
IGludDMyX3QgbnVtKSB7Ci0gIHVwYl92YWx1ZSB2OwotICByZXR1cm4gdXBiX2ludHRhYmxlX2xv
b2t1cDMyKCZkZWYtPml0b24sIG51bSwgJnYpID8KLSAgICAgIHVwYl92YWx1ZV9nZXRjc3RyKHYp
IDogTlVMTDsKLX0KLQotY29uc3QgY2hhciAqdXBiX2VudW1faXRlcl9uYW1lKHVwYl9lbnVtX2l0
ZXIgKml0ZXIpIHsKLSAgcmV0dXJuIHVwYl9zdHJ0YWJsZV9pdGVyX2tleShpdGVyKTsKLX0KLQot
aW50MzJfdCB1cGJfZW51bV9pdGVyX251bWJlcih1cGJfZW51bV9pdGVyICppdGVyKSB7Ci0gIHJl
dHVybiB1cGJfdmFsdWVfZ2V0aW50MzIodXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoaXRlcikpOwot
fQotCi0KLS8qIHVwYl9maWVsZGRlZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIHVwYl9maWVsZGRl
Zl9pbml0X2RlZmF1bHQodXBiX2ZpZWxkZGVmICpmKTsKLQotc3RhdGljIHZvaWQgdXBiX2ZpZWxk
ZGVmX3VuaW5pdF9kZWZhdWx0KHVwYl9maWVsZGRlZiAqZikgewotICBpZiAoZi0+dHlwZV9pc19z
ZXRfICYmIGYtPmRlZmF1bHRfaXNfc3RyaW5nICYmIGYtPmRlZmF1bHR2YWwuYnl0ZXMpCi0gICAg
ZnJlZXN0cihmLT5kZWZhdWx0dmFsLmJ5dGVzKTsKLX0KLQotc3RhdGljIHZvaWQgdmlzaXRmaWVs
ZChjb25zdCB1cGJfcmVmY291bnRlZCAqciwgdXBiX3JlZmNvdW50ZWRfdmlzaXQgKnZpc2l0LAot
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIGNvbnN0IHVwYl9maWVs
ZGRlZiAqZiA9IChjb25zdCB1cGJfZmllbGRkZWYqKXI7Ci0gIGlmICh1cGJfZmllbGRkZWZfY29u
dGFpbmluZ3R5cGUoZikpIHsKLSAgICB2aXNpdChyLCB1cGJfbXNnZGVmX3VwY2FzdDIodXBiX2Zp
ZWxkZGVmX2NvbnRhaW5pbmd0eXBlKGYpKSwgY2xvc3VyZSk7Ci0gIH0KLSAgaWYgKHVwYl9maWVs
ZGRlZl9jb250YWluaW5nb25lb2YoZikpIHsKLSAgICB2aXNpdChyLCB1cGJfb25lb2ZkZWZfdXBj
YXN0Mih1cGJfZmllbGRkZWZfY29udGFpbmluZ29uZW9mKGYpKSwgY2xvc3VyZSk7Ci0gIH0KLSAg
aWYgKHVwYl9maWVsZGRlZl9zdWJkZWYoZikpIHsKLSAgICB2aXNpdChyLCB1cGJfZGVmX3VwY2Fz
dCh1cGJfZmllbGRkZWZfc3ViZGVmKGYpKSwgY2xvc3VyZSk7Ci0gIH0KLX0KLQotc3RhdGljIHZv
aWQgZnJlZWZpZWxkKHVwYl9yZWZjb3VudGVkICpyKSB7Ci0gIHVwYl9maWVsZGRlZiAqZiA9ICh1
cGJfZmllbGRkZWYqKXI7Ci0gIHVwYl9maWVsZGRlZl91bmluaXRfZGVmYXVsdChmKTsKLSAgaWYg
KGYtPnN1YmRlZl9pc19zeW1ib2xpYykKLSAgICBmcmVlKGYtPnN1Yi5uYW1lKTsKLSAgdXBiX2Rl
Zl91bmluaXQodXBiX2ZpZWxkZGVmX3VwY2FzdF9tdXRhYmxlKGYpKTsKLSAgZnJlZShmKTsKLX0K
LQotc3RhdGljIGNvbnN0IGNoYXIgKmVudW1kZWZhdWx0c3RyKGNvbnN0IHVwYl9maWVsZGRlZiAq
ZikgewotICBjb25zdCB1cGJfZW51bWRlZiAqZTsKLSAgYXNzZXJ0KGYtPnR5cGVfaXNfc2V0XyAm
JiBmLT50eXBlXyA9PSBVUEJfVFlQRV9FTlVNKTsKLSAgZSA9IHVwYl9maWVsZGRlZl9lbnVtc3Vi
ZGVmKGYpOwotICBpZiAoZi0+ZGVmYXVsdF9pc19zdHJpbmcgJiYgZi0+ZGVmYXVsdHZhbC5ieXRl
cykgewotICAgIC8qIERlZmF1bHQgd2FzIGV4cGxpY2l0bHkgc2V0IGFzIGEgc3RyaW5nLiAqLwot
ICAgIHN0cl90ICpzID0gZi0+ZGVmYXVsdHZhbC5ieXRlczsKLSAgICByZXR1cm4gcy0+c3RyOwot
ICB9IGVsc2UgaWYgKGUpIHsKLSAgICBpZiAoIWYtPmRlZmF1bHRfaXNfc3RyaW5nKSB7Ci0gICAg
ICAvKiBEZWZhdWx0IHdhcyBleHBsaWNpdGx5IHNldCBhcyBhbiBpbnRlZ2VyOyBsb29rIGl0IHVw
IGluIGVudW1kZWYuICovCi0gICAgICBjb25zdCBjaGFyICpuYW1lID0gdXBiX2VudW1kZWZfaXRv
bihlLCBmLT5kZWZhdWx0dmFsLnNpbnQpOwotICAgICAgaWYgKG5hbWUpIHsKLSAgICAgICAgcmV0
dXJuIG5hbWU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIERlZmF1bHQgaXMgY29t
cGxldGVseSB1bnNldDsgcHVsbCBlbnVtZGVmIGRlZmF1bHQuICovCi0gICAgICBpZiAodXBiX2Vu
dW1kZWZfbnVtdmFscyhlKSA+IDApIHsKLSAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHVwYl9l
bnVtZGVmX2l0b24oZSwgdXBiX2VudW1kZWZfZGVmYXVsdChlKSk7Ci0gICAgICAgIGFzc2VydChu
YW1lKTsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVy
biBOVUxMOwotfQotCi1zdGF0aWMgYm9vbCBlbnVtZGVmYXVsdGludDMyKGNvbnN0IHVwYl9maWVs
ZGRlZiAqZiwgaW50MzJfdCAqdmFsKSB7Ci0gIGNvbnN0IHVwYl9lbnVtZGVmICplOwotICBhc3Nl
cnQoZi0+dHlwZV9pc19zZXRfICYmIGYtPnR5cGVfID09IFVQQl9UWVBFX0VOVU0pOwotICBlID0g
dXBiX2ZpZWxkZGVmX2VudW1zdWJkZWYoZik7Ci0gIGlmICghZi0+ZGVmYXVsdF9pc19zdHJpbmcp
IHsKLSAgICAvKiBEZWZhdWx0IHdhcyBleHBsaWNpdGx5IHNldCBhcyBhbiBpbnRlZ2VyLiAqLwot
ICAgICp2YWwgPSBmLT5kZWZhdWx0dmFsLnNpbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxz
ZSBpZiAoZSkgewotICAgIGlmIChmLT5kZWZhdWx0dmFsLmJ5dGVzKSB7Ci0gICAgICAvKiBEZWZh
dWx0IHdhcyBleHBsaWNpdGx5IHNldCBhcyBhIHN0cjsgdHJ5IHRvIGxvb2t1cCBjb3JyZXNwb25k
aW5nIGludC4gKi8KLSAgICAgIHN0cl90ICpzID0gZi0+ZGVmYXVsdHZhbC5ieXRlczsKLSAgICAg
IGlmICh1cGJfZW51bWRlZl9udG9peihlLCBzLT5zdHIsIHZhbCkpIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIERlZmF1bHQgaXMgdW5zZXQ7
IHRyeSB0byBwdWxsIGluIGVudW1kZWYgZGVmYXVsdC4gKi8KLSAgICAgIGlmICh1cGJfZW51bWRl
Zl9udW12YWxzKGUpID4gMCkgewotICAgICAgICAqdmFsID0gdXBiX2VudW1kZWZfZGVmYXVsdChl
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotdXBiX2ZpZWxkZGVmICp1cGJfZmllbGRkZWZfbmV3KGNvbnN0IHZvaWQgKm8p
IHsKLSAgc3RhdGljIGNvbnN0IHN0cnVjdCB1cGJfcmVmY291bnRlZF92dGJsIHZ0YmwgPSB7dmlz
aXRmaWVsZCwgZnJlZWZpZWxkfTsKLSAgdXBiX2ZpZWxkZGVmICpmID0gbWFsbG9jKHNpemVvZigq
ZikpOwotICBpZiAoIWYpIHJldHVybiBOVUxMOwotICBpZiAoIXVwYl9kZWZfaW5pdCh1cGJfZmll
bGRkZWZfdXBjYXN0X211dGFibGUoZiksIFVQQl9ERUZfRklFTEQsICZ2dGJsLCBvKSkgewotICAg
IGZyZWUoZik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgZi0+bXNnLmRlZiA9IE5VTEw7Ci0g
IGYtPnN1Yi5kZWYgPSBOVUxMOwotICBmLT5vbmVvZiA9IE5VTEw7Ci0gIGYtPnN1YmRlZl9pc19z
eW1ib2xpYyA9IGZhbHNlOwotICBmLT5tc2dfaXNfc3ltYm9saWMgPSBmYWxzZTsKLSAgZi0+bGFi
ZWxfID0gVVBCX0xBQkVMX09QVElPTkFMOwotICBmLT50eXBlXyA9IFVQQl9UWVBFX0lOVDMyOwot
ICBmLT5udW1iZXJfID0gMDsKLSAgZi0+dHlwZV9pc19zZXRfID0gZmFsc2U7Ci0gIGYtPnRhZ2Rl
bGltID0gZmFsc2U7Ci0gIGYtPmlzX2V4dGVuc2lvbl8gPSBmYWxzZTsKLSAgZi0+bGF6eV8gPSBm
YWxzZTsKLSAgZi0+cGFja2VkXyA9IHRydWU7Ci0KLSAgLyogRm9yIHRoZSBtb21lbnQgd2UgZGVm
YXVsdCB0aGlzIHRvIFVQQl9JTlRGTVRfVkFSSUFCTEUsIHNpbmNlIGl0IHdpbGwgd29yawotICAg
KiB3aXRoIGFsbCBpbnRlZ2VyIHR5cGVzIGFuZCBpcyBpbiBzb21lIHNpbmNlIG1vcmUgImRlZmF1
bHQiIHNpbmNlIHRoZSBtb3N0Ci0gICAqIG5vcm1hbC1sb29raW5nIHByb3RvMiB0eXBlcyBpbnQz
Mi9pbnQ2NC91aW50MzIvdWludDY0IHVzZSB2YXJpYWJsZS4KLSAgICoKLSAgICogT3RoZXIgb3B0
aW9ucyB0byBjb25zaWRlcjoKLSAgICogLSB0aGVyZSBpcyBubyBkZWZhdWx0OyB1c2VycyBtdXN0
IHNldCB0aGlzIG1hbnVhbGx5IChsaWtlIHR5cGUpLgotICAgKiAtIGRlZmF1bHQgc2lnbmVkIGlu
dGVnZXJzIHRvIFVQQl9JTlRGTVRfWklHWkFHLCBzaW5jZSBpdCdzIG1vcmUgbGlrZWx5IHRvCi0g
ICAqICAgYmUgYW4gb3B0aW1hbCBkZWZhdWx0IGZvciBzaWduZWQgaW50ZWdlcnMuICovCi0gIGYt
PmludGZtdCA9IFVQQl9JTlRGTVRfVkFSSUFCTEU7Ci0gIHJldHVybiBmOwotfQotCi11cGJfZmll
bGRkZWYgKnVwYl9maWVsZGRlZl9kdXAoY29uc3QgdXBiX2ZpZWxkZGVmICpmLCBjb25zdCB2b2lk
ICpvd25lcikgewotICBjb25zdCBjaGFyICpzcmNuYW1lOwotICB1cGJfZmllbGRkZWYgKm5ld2Yg
PSB1cGJfZmllbGRkZWZfbmV3KG93bmVyKTsKLSAgaWYgKCFuZXdmKSByZXR1cm4gTlVMTDsKLSAg
dXBiX2ZpZWxkZGVmX3NldHR5cGUobmV3ZiwgdXBiX2ZpZWxkZGVmX3R5cGUoZikpOwotICB1cGJf
ZmllbGRkZWZfc2V0bGFiZWwobmV3ZiwgdXBiX2ZpZWxkZGVmX2xhYmVsKGYpKTsKLSAgdXBiX2Zp
ZWxkZGVmX3NldG51bWJlcihuZXdmLCB1cGJfZmllbGRkZWZfbnVtYmVyKGYpLCBOVUxMKTsKLSAg
dXBiX2ZpZWxkZGVmX3NldG5hbWUobmV3ZiwgdXBiX2ZpZWxkZGVmX25hbWUoZiksIE5VTEwpOwot
ICBpZiAoZi0+ZGVmYXVsdF9pc19zdHJpbmcgJiYgZi0+ZGVmYXVsdHZhbC5ieXRlcykgewotICAg
IHN0cl90ICpzID0gZi0+ZGVmYXVsdHZhbC5ieXRlczsKLSAgICB1cGJfZmllbGRkZWZfc2V0ZGVm
YXVsdHN0cihuZXdmLCBzLT5zdHIsIHMtPmxlbiwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgbmV3
Zi0+ZGVmYXVsdF9pc19zdHJpbmcgPSBmLT5kZWZhdWx0X2lzX3N0cmluZzsKLSAgICBuZXdmLT5k
ZWZhdWx0dmFsID0gZi0+ZGVmYXVsdHZhbDsKLSAgfQotCi0gIGlmIChmLT5zdWJkZWZfaXNfc3lt
Ym9saWMpIHsKLSAgICBzcmNuYW1lID0gZi0+c3ViLm5hbWU7ICAvKiBNaWdodCBiZSBOVUxMLiAq
LwotICB9IGVsc2UgewotICAgIHNyY25hbWUgPSBmLT5zdWIuZGVmID8gdXBiX2RlZl9mdWxsbmFt
ZShmLT5zdWIuZGVmKSA6IE5VTEw7Ci0gIH0KLSAgaWYgKHNyY25hbWUpIHsKLSAgICBjaGFyICpu
ZXduYW1lID0gbWFsbG9jKHN0cmxlbihmLT5zdWIuZGVmLT5mdWxsbmFtZSkgKyAyKTsKLSAgICBp
ZiAoIW5ld25hbWUpIHsKLSAgICAgIHVwYl9maWVsZGRlZl91bnJlZihuZXdmLCBvd25lcik7Ci0g
ICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgc3RyY3B5KG5ld25hbWUsICIuIik7Ci0gICAg
c3RyY2F0KG5ld25hbWUsIGYtPnN1Yi5kZWYtPmZ1bGxuYW1lKTsKLSAgICB1cGJfZmllbGRkZWZf
c2V0c3ViZGVmbmFtZShuZXdmLCBuZXduYW1lLCBOVUxMKTsKLSAgICBmcmVlKG5ld25hbWUpOwot
ICB9Ci0KLSAgcmV0dXJuIG5ld2Y7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX3R5cGVpc3NldChj
b25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPnR5cGVfaXNfc2V0XzsKLX0KLQot
dXBiX2ZpZWxkdHlwZV90IHVwYl9maWVsZGRlZl90eXBlKGNvbnN0IHVwYl9maWVsZGRlZiAqZikg
ewotICBhc3NlcnQoZi0+dHlwZV9pc19zZXRfKTsKLSAgcmV0dXJuIGYtPnR5cGVfOwotfQotCi11
aW50MzJfdCB1cGJfZmllbGRkZWZfaW5kZXgoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJl
dHVybiBmLT5pbmRleF87Ci19Ci0KLXVwYl9sYWJlbF90IHVwYl9maWVsZGRlZl9sYWJlbChjb25z
dCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPmxhYmVsXzsKLX0KLQotdXBiX2ludGZt
dF90IHVwYl9maWVsZGRlZl9pbnRmbXQoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVy
biBmLT5pbnRmbXQ7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX2lzdGFnZGVsaW0oY29uc3QgdXBi
X2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVybiBmLT50YWdkZWxpbTsKLX0KLQotdWludDMyX3QgdXBi
X2ZpZWxkZGVmX251bWJlcihjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPm51
bWJlcl87Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX2lzZXh0ZW5zaW9uKGNvbnN0IHVwYl9maWVs
ZGRlZiAqZikgewotICByZXR1cm4gZi0+aXNfZXh0ZW5zaW9uXzsKLX0KLQotYm9vbCB1cGJfZmll
bGRkZWZfbGF6eShjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPmxhenlfOwot
fQotCi1ib29sIHVwYl9maWVsZGRlZl9wYWNrZWQoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0g
IHJldHVybiBmLT5wYWNrZWRfOwotfQotCi1jb25zdCBjaGFyICp1cGJfZmllbGRkZWZfbmFtZShj
b25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIHVwYl9kZWZfZnVsbG5hbWUodXBiX2Zp
ZWxkZGVmX3VwY2FzdChmKSk7Ci19Ci0KLWNvbnN0IHVwYl9tc2dkZWYgKnVwYl9maWVsZGRlZl9j
b250YWluaW5ndHlwZShjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPm1zZ19p
c19zeW1ib2xpYyA/IE5VTEwgOiBmLT5tc2cuZGVmOwotfQotCi1jb25zdCB1cGJfb25lb2ZkZWYg
KnVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0g
IHJldHVybiBmLT5vbmVvZjsKLX0KLQotdXBiX21zZ2RlZiAqdXBiX2ZpZWxkZGVmX2NvbnRhaW5p
bmd0eXBlX211dGFibGUodXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVybiAodXBiX21zZ2RlZiop
dXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlKGYpOwotfQotCi1jb25zdCBjaGFyICp1cGJfZmll
bGRkZWZfY29udGFpbmluZ3R5cGVuYW1lKHVwYl9maWVsZGRlZiAqZikgewotICByZXR1cm4gZi0+
bXNnX2lzX3N5bWJvbGljID8gZi0+bXNnLm5hbWUgOiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBy
ZWxlYXNlX2NvbnRhaW5pbmd0eXBlKHVwYl9maWVsZGRlZiAqZikgewotICBpZiAoZi0+bXNnX2lz
X3N5bWJvbGljKSBmcmVlKGYtPm1zZy5uYW1lKTsKLX0KLQotYm9vbCB1cGJfZmllbGRkZWZfc2V0
Y29udGFpbmluZ3R5cGVuYW1lKHVwYl9maWVsZGRlZiAqZiwgY29uc3QgY2hhciAqbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3RhdHVzICpzKSB7Ci0g
IGFzc2VydCghdXBiX2ZpZWxkZGVmX2lzZnJvemVuKGYpKTsKLSAgaWYgKHVwYl9maWVsZGRlZl9j
b250YWluaW5ndHlwZShmKSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHMsICJmaWVsZCBo
YXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIGEgbWVzc2FnZS4iKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLSAgLyogVE9ETzogdmFsaWRhdGUgbmFtZSAodXBiX2lzaWRlbnQoKSBkb2Vzbid0IHF1
aXRlIHdvcmsgYXRtIGJlY2F1c2UgdGhpcyBuYW1lCi0gICAqIG1heSBoYXZlIGEgbGVhZGluZyAi
LiIpLiAqLwotICByZWxlYXNlX2NvbnRhaW5pbmd0eXBlKGYpOwotICBmLT5tc2cubmFtZSA9IHVw
Yl9zdHJkdXAobmFtZSk7Ci0gIGYtPm1zZ19pc19zeW1ib2xpYyA9IHRydWU7Ci0gIHJldHVybiB0
cnVlOwotfQotCi1ib29sIHVwYl9maWVsZGRlZl9zZXRuYW1lKHVwYl9maWVsZGRlZiAqZiwgY29u
c3QgY2hhciAqbmFtZSwgdXBiX3N0YXR1cyAqcykgewotICBpZiAodXBiX2ZpZWxkZGVmX2NvbnRh
aW5pbmd0eXBlKGYpIHx8IHVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YoZikpIHsKLSAgICB1
cGJfc3RhdHVzX3NldGVycm1zZyhzLCAiQWxyZWFkeSBhZGRlZCB0byBtZXNzYWdlIG9yIG9uZW9m
Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB1cGJfZGVmX3NldGZ1bGxuYW1l
KHVwYl9maWVsZGRlZl91cGNhc3RfbXV0YWJsZShmKSwgbmFtZSwgcyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGNoa2RlZmF1bHR0eXBlKGNvbnN0IHVwYl9maWVsZGRlZiAqZiwgdXBiX2ZpZWxkdHlwZV90
IHR5cGUpIHsKLSAgVVBCX1VOVVNFRChmKTsKLSAgVVBCX1VOVVNFRCh0eXBlKTsKLSAgYXNzZXJ0
KGYtPnR5cGVfaXNfc2V0XyAmJiB1cGJfZmllbGRkZWZfdHlwZShmKSA9PSB0eXBlKTsKLX0KLQot
aW50NjRfdCB1cGJfZmllbGRkZWZfZGVmYXVsdGludDY0KGNvbnN0IHVwYl9maWVsZGRlZiAqZikg
ewotICBjaGtkZWZhdWx0dHlwZShmLCBVUEJfVFlQRV9JTlQ2NCk7Ci0gIHJldHVybiBmLT5kZWZh
dWx0dmFsLnNpbnQ7Ci19Ci0KLWludDMyX3QgdXBiX2ZpZWxkZGVmX2RlZmF1bHRpbnQzMihjb25z
dCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgaWYgKGYtPnR5cGVfaXNfc2V0XyAmJiB1cGJfZmllbGRk
ZWZfdHlwZShmKSA9PSBVUEJfVFlQRV9FTlVNKSB7Ci0gICAgaW50MzJfdCB2YWw7Ci0gICAgYm9v
bCBvayA9IGVudW1kZWZhdWx0aW50MzIoZiwgJnZhbCk7Ci0gICAgVVBCX0FTU0VSVF9WQVIob2ss
IG9rKTsKLSAgICByZXR1cm4gdmFsOwotICB9IGVsc2UgewotICAgIGNoa2RlZmF1bHR0eXBlKGYs
IFVQQl9UWVBFX0lOVDMyKTsKLSAgICByZXR1cm4gZi0+ZGVmYXVsdHZhbC5zaW50OwotICB9Ci19
Ci0KLXVpbnQ2NF90IHVwYl9maWVsZGRlZl9kZWZhdWx0dWludDY0KGNvbnN0IHVwYl9maWVsZGRl
ZiAqZikgewotICBjaGtkZWZhdWx0dHlwZShmLCBVUEJfVFlQRV9VSU5UNjQpOwotICByZXR1cm4g
Zi0+ZGVmYXVsdHZhbC51aW50OwotfQotCi11aW50MzJfdCB1cGJfZmllbGRkZWZfZGVmYXVsdHVp
bnQzMihjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgY2hrZGVmYXVsdHR5cGUoZiwgVVBCX1RZ
UEVfVUlOVDMyKTsKLSAgcmV0dXJuIGYtPmRlZmF1bHR2YWwudWludDsKLX0KLQotYm9vbCB1cGJf
ZmllbGRkZWZfZGVmYXVsdGJvb2woY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIGNoa2RlZmF1
bHR0eXBlKGYsIFVQQl9UWVBFX0JPT0wpOwotICByZXR1cm4gZi0+ZGVmYXVsdHZhbC51aW50Owot
fQotCi1mbG9hdCB1cGJfZmllbGRkZWZfZGVmYXVsdGZsb2F0KGNvbnN0IHVwYl9maWVsZGRlZiAq
ZikgewotICBjaGtkZWZhdWx0dHlwZShmLCBVUEJfVFlQRV9GTE9BVCk7Ci0gIHJldHVybiBmLT5k
ZWZhdWx0dmFsLmZsdDsKLX0KLQotZG91YmxlIHVwYl9maWVsZGRlZl9kZWZhdWx0ZG91YmxlKGNv
bnN0IHVwYl9maWVsZGRlZiAqZikgewotICBjaGtkZWZhdWx0dHlwZShmLCBVUEJfVFlQRV9ET1VC
TEUpOwotICByZXR1cm4gZi0+ZGVmYXVsdHZhbC5kYmw7Ci19Ci0KLWNvbnN0IGNoYXIgKnVwYl9m
aWVsZGRlZl9kZWZhdWx0c3RyKGNvbnN0IHVwYl9maWVsZGRlZiAqZiwgc2l6ZV90ICpsZW4pIHsK
LSAgYXNzZXJ0KGYtPnR5cGVfaXNfc2V0Xyk7Ci0gIGFzc2VydCh1cGJfZmllbGRkZWZfdHlwZShm
KSA9PSBVUEJfVFlQRV9TVFJJTkcgfHwKLSAgICAgICAgIHVwYl9maWVsZGRlZl90eXBlKGYpID09
IFVQQl9UWVBFX0JZVEVTIHx8Ci0gICAgICAgICB1cGJfZmllbGRkZWZfdHlwZShmKSA9PSBVUEJf
VFlQRV9FTlVNKTsKLQotICBpZiAodXBiX2ZpZWxkZGVmX3R5cGUoZikgPT0gVVBCX1RZUEVfRU5V
TSkgewotICAgIGNvbnN0IGNoYXIgKnJldCA9IGVudW1kZWZhdWx0c3RyKGYpOwotICAgIGFzc2Vy
dChyZXQpOwotICAgIC8qIEVudW0gZGVmYXVsdHMgY2FuJ3QgaGF2ZSBlbWJlZGRlZCBOVUxMcy4g
Ki8KLSAgICBpZiAobGVuKSAqbGVuID0gc3RybGVuKHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAg
fQotCi0gIGlmIChmLT5kZWZhdWx0X2lzX3N0cmluZykgewotICAgIHN0cl90ICpzdHIgPSBmLT5k
ZWZhdWx0dmFsLmJ5dGVzOwotICAgIGlmIChsZW4pICpsZW4gPSBzdHItPmxlbjsKLSAgICByZXR1
cm4gc3RyLT5zdHI7Ci0gIH0KLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgdXBi
X2ZpZWxkZGVmX2luaXRfZGVmYXVsdCh1cGJfZmllbGRkZWYgKmYpIHsKLSAgZi0+ZGVmYXVsdF9p
c19zdHJpbmcgPSBmYWxzZTsKLSAgc3dpdGNoICh1cGJfZmllbGRkZWZfdHlwZShmKSkgewotICAg
IGNhc2UgVVBCX1RZUEVfRE9VQkxFOiBmLT5kZWZhdWx0dmFsLmRibCA9IDA7IGJyZWFrOwotICAg
IGNhc2UgVVBCX1RZUEVfRkxPQVQ6IGYtPmRlZmF1bHR2YWwuZmx0ID0gMDsgYnJlYWs7Ci0gICAg
Y2FzZSBVUEJfVFlQRV9JTlQzMjoKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDY0OiBmLT5kZWZhdWx0
dmFsLnNpbnQgPSAwOyBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX1VJTlQ2NDoKLSAgICBjYXNl
IFVQQl9UWVBFX1VJTlQzMjoKLSAgICBjYXNlIFVQQl9UWVBFX0JPT0w6IGYtPmRlZmF1bHR2YWwu
dWludCA9IDA7IGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfU1RSSU5HOgotICAgIGNhc2UgVVBC
X1RZUEVfQllURVM6Ci0gICAgICBmLT5kZWZhdWx0dmFsLmJ5dGVzID0gbmV3c3RyKCIiLCAwKTsK
LSAgICAgIGYtPmRlZmF1bHRfaXNfc3RyaW5nID0gdHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIGNh
c2UgVVBCX1RZUEVfTUVTU0FHRTogYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9FTlVNOgotICAg
ICAgLyogVGhpcyBpcyBvdXIgc3BlY2lhbCBzZW50aW5lbCB0aGF0IGluZGljYXRlcyAibm90IHNl
dCIgZm9yIGFuIGVudW0uICovCi0gICAgICBmLT5kZWZhdWx0X2lzX3N0cmluZyA9IHRydWU7Ci0g
ICAgICBmLT5kZWZhdWx0dmFsLmJ5dGVzID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0K
LWNvbnN0IHVwYl9kZWYgKnVwYl9maWVsZGRlZl9zdWJkZWYoY29uc3QgdXBiX2ZpZWxkZGVmICpm
KSB7Ci0gIHJldHVybiBmLT5zdWJkZWZfaXNfc3ltYm9saWMgPyBOVUxMIDogZi0+c3ViLmRlZjsK
LX0KLQotY29uc3QgdXBiX21zZ2RlZiAqdXBiX2ZpZWxkZGVmX21zZ3N1YmRlZihjb25zdCB1cGJf
ZmllbGRkZWYgKmYpIHsKLSAgY29uc3QgdXBiX2RlZiAqZGVmID0gdXBiX2ZpZWxkZGVmX3N1YmRl
ZihmKTsKLSAgcmV0dXJuIGRlZiA/IHVwYl9keW5jYXN0X21zZ2RlZihkZWYpIDogTlVMTDsKLX0K
LQotY29uc3QgdXBiX2VudW1kZWYgKnVwYl9maWVsZGRlZl9lbnVtc3ViZGVmKGNvbnN0IHVwYl9m
aWVsZGRlZiAqZikgewotICBjb25zdCB1cGJfZGVmICpkZWYgPSB1cGJfZmllbGRkZWZfc3ViZGVm
KGYpOwotICByZXR1cm4gZGVmID8gdXBiX2R5bmNhc3RfZW51bWRlZihkZWYpIDogTlVMTDsKLX0K
LQotdXBiX2RlZiAqdXBiX2ZpZWxkZGVmX3N1YmRlZl9tdXRhYmxlKHVwYl9maWVsZGRlZiAqZikg
ewotICByZXR1cm4gKHVwYl9kZWYqKXVwYl9maWVsZGRlZl9zdWJkZWYoZik7Ci19Ci0KLWNvbnN0
IGNoYXIgKnVwYl9maWVsZGRlZl9zdWJkZWZuYW1lKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewot
ICBpZiAoZi0+c3ViZGVmX2lzX3N5bWJvbGljKSB7Ci0gICAgcmV0dXJuIGYtPnN1Yi5uYW1lOwot
ICB9IGVsc2UgaWYgKGYtPnN1Yi5kZWYpIHsKLSAgICByZXR1cm4gdXBiX2RlZl9mdWxsbmFtZShm
LT5zdWIuZGVmKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1ib29s
IHVwYl9maWVsZGRlZl9zZXRudW1iZXIodXBiX2ZpZWxkZGVmICpmLCB1aW50MzJfdCBudW1iZXIs
IHVwYl9zdGF0dXMgKnMpIHsKLSAgaWYgKHVwYl9maWVsZGRlZl9jb250YWluaW5ndHlwZShmKSkg
ewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKAotICAgICAgICBzLCAiY2Fubm90IGNoYW5nZSBm
aWVsZCBudW1iZXIgYWZ0ZXIgYWRkaW5nIHRvIGEgbWVzc2FnZSIpOwotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICBpZiAobnVtYmVyID09IDAgfHwgbnVtYmVyID4gVVBCX01BWF9GSUVMRE5VTUJF
UikgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzLCAiaW52YWxpZCBmaWVsZCBudW1iZXIgKCV1
KSIsIG51bWJlcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGYtPm51bWJlcl8gPSBudW1i
ZXI7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIHVwYl9maWVsZGRlZl9zZXR0eXBlKHVwYl9m
aWVsZGRlZiAqZiwgdXBiX2ZpZWxkdHlwZV90IHR5cGUpIHsKLSAgYXNzZXJ0KCF1cGJfZmllbGRk
ZWZfaXNmcm96ZW4oZikpOwotICBhc3NlcnQodXBiX2ZpZWxkZGVmX2NoZWNrdHlwZSh0eXBlKSk7
Ci0gIHVwYl9maWVsZGRlZl91bmluaXRfZGVmYXVsdChmKTsKLSAgZi0+dHlwZV8gPSB0eXBlOwot
ICBmLT50eXBlX2lzX3NldF8gPSB0cnVlOwotICB1cGJfZmllbGRkZWZfaW5pdF9kZWZhdWx0KGYp
OwotfQotCi12b2lkIHVwYl9maWVsZGRlZl9zZXRkZXNjcmlwdG9ydHlwZSh1cGJfZmllbGRkZWYg
KmYsIGludCB0eXBlKSB7Ci0gIGFzc2VydCghdXBiX2ZpZWxkZGVmX2lzZnJvemVuKGYpKTsKLSAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFX0RPVUJMRToKLSAg
ICAgIHVwYl9maWVsZGRlZl9zZXR0eXBlKGYsIFVQQl9UWVBFX0RPVUJMRSk7Ci0gICAgICBicmVh
azsKLSAgICBjYXNlIFVQQl9ERVNDUklQVE9SX1RZUEVfRkxPQVQ6Ci0gICAgICB1cGJfZmllbGRk
ZWZfc2V0dHlwZShmLCBVUEJfVFlQRV9GTE9BVCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQ
Ql9ERVNDUklQVE9SX1RZUEVfSU5UNjQ6Ci0gICAgY2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFX1NG
SVhFRDY0OgotICAgIGNhc2UgVVBCX0RFU0NSSVBUT1JfVFlQRV9TSU5UNjQ6Ci0gICAgICB1cGJf
ZmllbGRkZWZfc2V0dHlwZShmLCBVUEJfVFlQRV9JTlQ2NCk7Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIFVQQl9ERVNDUklQVE9SX1RZUEVfVUlOVDY0OgotICAgIGNhc2UgVVBCX0RFU0NSSVBUT1Jf
VFlQRV9GSVhFRDY0OgotICAgICAgdXBiX2ZpZWxkZGVmX3NldHR5cGUoZiwgVVBCX1RZUEVfVUlO
VDY0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX0RFU0NSSVBUT1JfVFlQRV9JTlQzMjoK
LSAgICBjYXNlIFVQQl9ERVNDUklQVE9SX1RZUEVfU0ZJWEVEMzI6Ci0gICAgY2FzZSBVUEJfREVT
Q1JJUFRPUl9UWVBFX1NJTlQzMjoKLSAgICAgIHVwYl9maWVsZGRlZl9zZXR0eXBlKGYsIFVQQl9U
WVBFX0lOVDMyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX0RFU0NSSVBUT1JfVFlQRV9V
SU5UMzI6Ci0gICAgY2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFX0ZJWEVEMzI6Ci0gICAgICB1cGJf
ZmllbGRkZWZfc2V0dHlwZShmLCBVUEJfVFlQRV9VSU5UMzIpOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFX0JPT0w6Ci0gICAgICB1cGJfZmllbGRkZWZfc2V0dHlw
ZShmLCBVUEJfVFlQRV9CT09MKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX0RFU0NSSVBU
T1JfVFlQRV9TVFJJTkc6Ci0gICAgICB1cGJfZmllbGRkZWZfc2V0dHlwZShmLCBVUEJfVFlQRV9T
VFJJTkcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFX0JZVEVT
OgotICAgICAgdXBiX2ZpZWxkZGVmX3NldHR5cGUoZiwgVVBCX1RZUEVfQllURVMpOwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFX0dST1VQOgotICAgIGNhc2UgVVBC
X0RFU0NSSVBUT1JfVFlQRV9NRVNTQUdFOgotICAgICAgdXBiX2ZpZWxkZGVmX3NldHR5cGUoZiwg
VVBCX1RZUEVfTUVTU0FHRSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9ERVNDUklQVE9S
X1RZUEVfRU5VTToKLSAgICAgIHVwYl9maWVsZGRlZl9zZXR0eXBlKGYsIFVQQl9UWVBFX0VOVU0p
OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlKTsKLSAgfQotCi0gIGlm
ICh0eXBlID09IFVQQl9ERVNDUklQVE9SX1RZUEVfRklYRUQ2NCB8fAotICAgICAgdHlwZSA9PSBV
UEJfREVTQ1JJUFRPUl9UWVBFX0ZJWEVEMzIgfHwKLSAgICAgIHR5cGUgPT0gVVBCX0RFU0NSSVBU
T1JfVFlQRV9TRklYRUQ2NCB8fAotICAgICAgdHlwZSA9PSBVUEJfREVTQ1JJUFRPUl9UWVBFX1NG
SVhFRDMyKSB7Ci0gICAgdXBiX2ZpZWxkZGVmX3NldGludGZtdChmLCBVUEJfSU5URk1UX0ZJWEVE
KTsKLSAgfSBlbHNlIGlmICh0eXBlID09IFVQQl9ERVNDUklQVE9SX1RZUEVfU0lOVDY0IHx8Ci0g
ICAgICAgICAgICAgdHlwZSA9PSBVUEJfREVTQ1JJUFRPUl9UWVBFX1NJTlQzMikgewotICAgIHVw
Yl9maWVsZGRlZl9zZXRpbnRmbXQoZiwgVVBCX0lOVEZNVF9aSUdaQUcpOwotICB9IGVsc2Ugewot
ICAgIHVwYl9maWVsZGRlZl9zZXRpbnRmbXQoZiwgVVBCX0lOVEZNVF9WQVJJQUJMRSk7Ci0gIH0K
LQotICB1cGJfZmllbGRkZWZfc2V0dGFnZGVsaW0oZiwgdHlwZSA9PSBVUEJfREVTQ1JJUFRPUl9U
WVBFX0dST1VQKTsKLX0KLQotdXBiX2Rlc2NyaXB0b3J0eXBlX3QgdXBiX2ZpZWxkZGVmX2Rlc2Ny
aXB0b3J0eXBlKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICBzd2l0Y2ggKHVwYl9maWVsZGRl
Zl90eXBlKGYpKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9GTE9BVDogIHJldHVybiBVUEJfREVTQ1JJ
UFRPUl9UWVBFX0ZMT0FUOwotICAgIGNhc2UgVVBCX1RZUEVfRE9VQkxFOiByZXR1cm4gVVBCX0RF
U0NSSVBUT1JfVFlQRV9ET1VCTEU7Ci0gICAgY2FzZSBVUEJfVFlQRV9CT09MOiAgIHJldHVybiBV
UEJfREVTQ1JJUFRPUl9UWVBFX0JPT0w7Ci0gICAgY2FzZSBVUEJfVFlQRV9TVFJJTkc6IHJldHVy
biBVUEJfREVTQ1JJUFRPUl9UWVBFX1NUUklORzsKLSAgICBjYXNlIFVQQl9UWVBFX0JZVEVTOiAg
cmV0dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfQllURVM7Ci0gICAgY2FzZSBVUEJfVFlQRV9FTlVN
OiAgIHJldHVybiBVUEJfREVTQ1JJUFRPUl9UWVBFX0VOVU07Ci0gICAgY2FzZSBVUEJfVFlQRV9J
TlQzMjoKLSAgICAgIHN3aXRjaCAodXBiX2ZpZWxkZGVmX2ludGZtdChmKSkgewotICAgICAgICBj
YXNlIFVQQl9JTlRGTVRfVkFSSUFCTEU6IHJldHVybiBVUEJfREVTQ1JJUFRPUl9UWVBFX0lOVDMy
OwotICAgICAgICBjYXNlIFVQQl9JTlRGTVRfRklYRUQ6ICAgIHJldHVybiBVUEJfREVTQ1JJUFRP
Ul9UWVBFX1NGSVhFRDMyOwotICAgICAgICBjYXNlIFVQQl9JTlRGTVRfWklHWkFHOiAgIHJldHVy
biBVUEJfREVTQ1JJUFRPUl9UWVBFX1NJTlQzMjsKLSAgICAgIH0KLSAgICBjYXNlIFVQQl9UWVBF
X0lOVDY0OgotICAgICAgc3dpdGNoICh1cGJfZmllbGRkZWZfaW50Zm10KGYpKSB7Ci0gICAgICAg
IGNhc2UgVVBCX0lOVEZNVF9WQVJJQUJMRTogcmV0dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfSU5U
NjQ7Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9GSVhFRDogICAgcmV0dXJuIFVQQl9ERVNDUklQ
VE9SX1RZUEVfU0ZJWEVENjQ7Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9aSUdaQUc6ICAgcmV0
dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfU0lOVDY0OwotICAgICAgfQotICAgIGNhc2UgVVBCX1RZ
UEVfVUlOVDMyOgotICAgICAgc3dpdGNoICh1cGJfZmllbGRkZWZfaW50Zm10KGYpKSB7Ci0gICAg
ICAgIGNhc2UgVVBCX0lOVEZNVF9WQVJJQUJMRTogcmV0dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVf
VUlOVDMyOwotICAgICAgICBjYXNlIFVQQl9JTlRGTVRfRklYRUQ6ICAgIHJldHVybiBVUEJfREVT
Q1JJUFRPUl9UWVBFX0ZJWEVEMzI7Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9aSUdaQUc6ICAg
cmV0dXJuIC0xOwotICAgICAgfQotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDY0OgotICAgICAgc3dp
dGNoICh1cGJfZmllbGRkZWZfaW50Zm10KGYpKSB7Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9W
QVJJQUJMRTogcmV0dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfVUlOVDY0OwotICAgICAgICBjYXNl
IFVQQl9JTlRGTVRfRklYRUQ6ICAgIHJldHVybiBVUEJfREVTQ1JJUFRPUl9UWVBFX0ZJWEVENjQ7
Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9aSUdaQUc6ICAgcmV0dXJuIC0xOwotICAgICAgfQot
ICAgIGNhc2UgVVBCX1RZUEVfTUVTU0FHRToKLSAgICAgIHJldHVybiB1cGJfZmllbGRkZWZfaXN0
YWdkZWxpbShmKSA/Ci0gICAgICAgICAgVVBCX0RFU0NSSVBUT1JfVFlQRV9HUk9VUCA6IFVQQl9E
RVNDUklQVE9SX1RZUEVfTUVTU0FHRTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotdm9pZCB1cGJf
ZmllbGRkZWZfc2V0aXNleHRlbnNpb24odXBiX2ZpZWxkZGVmICpmLCBib29sIGlzX2V4dGVuc2lv
bikgewotICBhc3NlcnQoIXVwYl9maWVsZGRlZl9pc2Zyb3plbihmKSk7Ci0gIGYtPmlzX2V4dGVu
c2lvbl8gPSBpc19leHRlbnNpb247Ci19Ci0KLXZvaWQgdXBiX2ZpZWxkZGVmX3NldGxhenkodXBi
X2ZpZWxkZGVmICpmLCBib29sIGxhenkpIHsKLSAgYXNzZXJ0KCF1cGJfZmllbGRkZWZfaXNmcm96
ZW4oZikpOwotICBmLT5sYXp5XyA9IGxhenk7Ci19Ci0KLXZvaWQgdXBiX2ZpZWxkZGVmX3NldHBh
Y2tlZCh1cGJfZmllbGRkZWYgKmYsIGJvb2wgcGFja2VkKSB7Ci0gIGFzc2VydCghdXBiX2ZpZWxk
ZGVmX2lzZnJvemVuKGYpKTsKLSAgZi0+cGFja2VkXyA9IHBhY2tlZDsKLX0KLQotdm9pZCB1cGJf
ZmllbGRkZWZfc2V0bGFiZWwodXBiX2ZpZWxkZGVmICpmLCB1cGJfbGFiZWxfdCBsYWJlbCkgewot
ICBhc3NlcnQoIXVwYl9maWVsZGRlZl9pc2Zyb3plbihmKSk7Ci0gIGFzc2VydCh1cGJfZmllbGRk
ZWZfY2hlY2tsYWJlbChsYWJlbCkpOwotICBmLT5sYWJlbF8gPSBsYWJlbDsKLX0KLQotdm9pZCB1
cGJfZmllbGRkZWZfc2V0aW50Zm10KHVwYl9maWVsZGRlZiAqZiwgdXBiX2ludGZtdF90IGZtdCkg
ewotICBhc3NlcnQoIXVwYl9maWVsZGRlZl9pc2Zyb3plbihmKSk7Ci0gIGFzc2VydCh1cGJfZmll
bGRkZWZfY2hlY2tpbnRmbXQoZm10KSk7Ci0gIGYtPmludGZtdCA9IGZtdDsKLX0KLQotdm9pZCB1
cGJfZmllbGRkZWZfc2V0dGFnZGVsaW0odXBiX2ZpZWxkZGVmICpmLCBib29sIHRhZ19kZWxpbSkg
ewotICBhc3NlcnQoIXVwYl9maWVsZGRlZl9pc2Zyb3plbihmKSk7Ci0gIGYtPnRhZ2RlbGltID0g
dGFnX2RlbGltOwotICBmLT50YWdkZWxpbSA9IHRhZ19kZWxpbTsKLX0KLQotc3RhdGljIGJvb2wg
Y2hlY2tzZXRkZWZhdWx0KHVwYl9maWVsZGRlZiAqZiwgdXBiX2ZpZWxkdHlwZV90IHR5cGUpIHsK
LSAgaWYgKCFmLT50eXBlX2lzX3NldF8gfHwgdXBiX2ZpZWxkZGVmX2lzZnJvemVuKGYpIHx8Ci0g
ICAgICB1cGJfZmllbGRkZWZfdHlwZShmKSAhPSB0eXBlKSB7Ci0gICAgYXNzZXJ0KGZhbHNlKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKGYtPmRlZmF1bHRfaXNfc3RyaW5nKSB7Ci0g
ICAgc3RyX3QgKnMgPSBmLT5kZWZhdWx0dmFsLmJ5dGVzOwotICAgIGFzc2VydChzIHx8IHR5cGUg
PT0gVVBCX1RZUEVfRU5VTSk7Ci0gICAgaWYgKHMpIGZyZWVzdHIocyk7Ci0gIH0KLSAgZi0+ZGVm
YXVsdF9pc19zdHJpbmcgPSBmYWxzZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgdXBiX2Zp
ZWxkZGVmX3NldGRlZmF1bHRpbnQ2NCh1cGJfZmllbGRkZWYgKmYsIGludDY0X3QgdmFsdWUpIHsK
LSAgaWYgKGNoZWNrc2V0ZGVmYXVsdChmLCBVUEJfVFlQRV9JTlQ2NCkpCi0gICAgZi0+ZGVmYXVs
dHZhbC5zaW50ID0gdmFsdWU7Ci19Ci0KLXZvaWQgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRpbnQz
Mih1cGJfZmllbGRkZWYgKmYsIGludDMyX3QgdmFsdWUpIHsKLSAgaWYgKCh1cGJfZmllbGRkZWZf
dHlwZShmKSA9PSBVUEJfVFlQRV9FTlVNICYmCi0gICAgICAgY2hlY2tzZXRkZWZhdWx0KGYsIFVQ
Ql9UWVBFX0VOVU0pKSB8fAotICAgICAgY2hlY2tzZXRkZWZhdWx0KGYsIFVQQl9UWVBFX0lOVDMy
KSkgewotICAgIGYtPmRlZmF1bHR2YWwuc2ludCA9IHZhbHVlOwotICB9Ci19Ci0KLXZvaWQgdXBi
X2ZpZWxkZGVmX3NldGRlZmF1bHR1aW50NjQodXBiX2ZpZWxkZGVmICpmLCB1aW50NjRfdCB2YWx1
ZSkgewotICBpZiAoY2hlY2tzZXRkZWZhdWx0KGYsIFVQQl9UWVBFX1VJTlQ2NCkpCi0gICAgZi0+
ZGVmYXVsdHZhbC51aW50ID0gdmFsdWU7Ci19Ci0KLXZvaWQgdXBiX2ZpZWxkZGVmX3NldGRlZmF1
bHR1aW50MzIodXBiX2ZpZWxkZGVmICpmLCB1aW50MzJfdCB2YWx1ZSkgewotICBpZiAoY2hlY2tz
ZXRkZWZhdWx0KGYsIFVQQl9UWVBFX1VJTlQzMikpCi0gICAgZi0+ZGVmYXVsdHZhbC51aW50ID0g
dmFsdWU7Ci19Ci0KLXZvaWQgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRib29sKHVwYl9maWVsZGRl
ZiAqZiwgYm9vbCB2YWx1ZSkgewotICBpZiAoY2hlY2tzZXRkZWZhdWx0KGYsIFVQQl9UWVBFX0JP
T0wpKQotICAgIGYtPmRlZmF1bHR2YWwudWludCA9IHZhbHVlOwotfQotCi12b2lkIHVwYl9maWVs
ZGRlZl9zZXRkZWZhdWx0ZmxvYXQodXBiX2ZpZWxkZGVmICpmLCBmbG9hdCB2YWx1ZSkgewotICBp
ZiAoY2hlY2tzZXRkZWZhdWx0KGYsIFVQQl9UWVBFX0ZMT0FUKSkKLSAgICBmLT5kZWZhdWx0dmFs
LmZsdCA9IHZhbHVlOwotfQotCi12b2lkIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0ZG91YmxlKHVw
Yl9maWVsZGRlZiAqZiwgZG91YmxlIHZhbHVlKSB7Ci0gIGlmIChjaGVja3NldGRlZmF1bHQoZiwg
VVBCX1RZUEVfRE9VQkxFKSkKLSAgICBmLT5kZWZhdWx0dmFsLmRibCA9IHZhbHVlOwotfQotCi1i
b29sIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0c3RyKHVwYl9maWVsZGRlZiAqZiwgY29uc3Qgdm9p
ZCAqc3RyLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJf
c3RhdHVzICpzKSB7Ci0gIHN0cl90ICpzdHIyOwotICBhc3NlcnQodXBiX2ZpZWxkZGVmX2lzc3Ry
aW5nKGYpIHx8IGYtPnR5cGVfID09IFVQQl9UWVBFX0VOVU0pOwotICBpZiAoZi0+dHlwZV8gPT0g
VVBCX1RZUEVfRU5VTSAmJiAhdXBiX2lzaWRlbnQoc3RyLCBsZW4sIGZhbHNlLCBzKSkKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgaWYgKGYtPmRlZmF1bHRfaXNfc3RyaW5nKSB7Ci0gICAgc3RyX3Qg
KnMgPSBmLT5kZWZhdWx0dmFsLmJ5dGVzOwotICAgIGFzc2VydChzIHx8IGYtPnR5cGVfID09IFVQ
Ql9UWVBFX0VOVU0pOwotICAgIGlmIChzKSBmcmVlc3RyKHMpOwotICB9IGVsc2UgewotICAgIGFz
c2VydChmLT50eXBlXyA9PSBVUEJfVFlQRV9FTlVNKTsKLSAgfQotCi0gIHN0cjIgPSBuZXdzdHIo
c3RyLCBsZW4pOwotICBmLT5kZWZhdWx0dmFsLmJ5dGVzID0gc3RyMjsKLSAgZi0+ZGVmYXVsdF9p
c19zdHJpbmcgPSB0cnVlOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCB1cGJfZmllbGRkZWZf
c2V0ZGVmYXVsdGNzdHIodXBiX2ZpZWxkZGVmICpmLCBjb25zdCBjaGFyICpzdHIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3RhdHVzICpzKSB7Ci0gIGFzc2VydChmLT50
eXBlX2lzX3NldF8pOwotICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdHN0cihmLCBzdHIsIHN0ciA/
IHN0cmxlbihzdHIpIDogMCwgcyk7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX2VudW1oYXNkZWZh
dWx0aW50MzIoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIGludDMyX3QgdmFsOwotICBhc3Nl
cnQoZi0+dHlwZV9pc19zZXRfICYmIGYtPnR5cGVfID09IFVQQl9UWVBFX0VOVU0pOwotICByZXR1
cm4gZW51bWRlZmF1bHRpbnQzMihmLCAmdmFsKTsKLX0KLQotYm9vbCB1cGJfZmllbGRkZWZfZW51
bWhhc2RlZmF1bHRzdHIoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIGFzc2VydChmLT50eXBl
X2lzX3NldF8gJiYgZi0+dHlwZV8gPT0gVVBCX1RZUEVfRU5VTSk7Ci0gIHJldHVybiBlbnVtZGVm
YXVsdHN0cihmKSAhPSBOVUxMOwotfQotCi1zdGF0aWMgYm9vbCB1cGJfc3ViZGVmX3R5cGVjaGVj
ayh1cGJfZmllbGRkZWYgKmYsIGNvbnN0IHVwYl9kZWYgKnN1YmRlZiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgaWYgKGYtPnR5cGVfID09IFVQ
Ql9UWVBFX01FU1NBR0UpIHsKLSAgICBpZiAodXBiX2R5bmNhc3RfbXNnZGVmKHN1YmRlZikpIHJl
dHVybiB0cnVlOwotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHMsICJpbnZhbGlkIHN1YmRlZiB0
eXBlIGZvciB0aGlzIHN1Ym1lc3NhZ2UgZmllbGQiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0g
ZWxzZSBpZiAoZi0+dHlwZV8gPT0gVVBCX1RZUEVfRU5VTSkgewotICAgIGlmICh1cGJfZHluY2Fz
dF9lbnVtZGVmKHN1YmRlZikpIHJldHVybiB0cnVlOwotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNn
KHMsICJpbnZhbGlkIHN1YmRlZiB0eXBlIGZvciB0aGlzIGVudW0gZmllbGQiKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0gZWxzZSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgIm9ubHkg
bWVzc2FnZSBhbmQgZW51bSBmaWVsZHMgY2FuIGhhdmUgYSBzdWJkZWYiKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgcmVsZWFzZV9zdWJkZWYodXBiX2ZpZWxkZGVm
ICpmKSB7Ci0gIGlmIChmLT5zdWJkZWZfaXNfc3ltYm9saWMpIHsKLSAgICBmcmVlKGYtPnN1Yi5u
YW1lKTsKLSAgfSBlbHNlIGlmIChmLT5zdWIuZGVmKSB7Ci0gICAgdXBiX3VucmVmMihmLT5zdWIu
ZGVmLCBmKTsKLSAgfQotfQotCi1ib29sIHVwYl9maWVsZGRlZl9zZXRzdWJkZWYodXBiX2ZpZWxk
ZGVmICpmLCBjb25zdCB1cGJfZGVmICpzdWJkZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXBiX3N0YXR1cyAqcykgewotICBhc3NlcnQoIXVwYl9maWVsZGRlZl9pc2Zyb3plbihmKSk7
Ci0gIGFzc2VydCh1cGJfZmllbGRkZWZfaGFzc3ViZGVmKGYpKTsKLSAgaWYgKHN1YmRlZiAmJiAh
dXBiX3N1YmRlZl90eXBlY2hlY2soZiwgc3ViZGVmLCBzKSkgcmV0dXJuIGZhbHNlOwotICByZWxl
YXNlX3N1YmRlZihmKTsKLSAgZi0+c3ViLmRlZiA9IHN1YmRlZjsKLSAgZi0+c3ViZGVmX2lzX3N5
bWJvbGljID0gZmFsc2U7Ci0gIGlmIChmLT5zdWIuZGVmKSB1cGJfcmVmMihmLT5zdWIuZGVmLCBm
KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX3NldG1zZ3N1YmRlZih1
cGJfZmllbGRkZWYgKmYsIGNvbnN0IHVwYl9tc2dkZWYgKnN1YmRlZiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cGJfc3RhdHVzICpzKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZf
c2V0c3ViZGVmKGYsIHVwYl9tc2dkZWZfdXBjYXN0KHN1YmRlZiksIHMpOwotfQotCi1ib29sIHVw
Yl9maWVsZGRlZl9zZXRlbnVtc3ViZGVmKHVwYl9maWVsZGRlZiAqZiwgY29uc3QgdXBiX2VudW1k
ZWYgKnN1YmRlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAq
cykgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX3NldHN1YmRlZihmLCB1cGJfZW51bWRlZl91cGNh
c3Qoc3ViZGVmKSwgcyk7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX3NldHN1YmRlZm5hbWUodXBi
X2ZpZWxkZGVmICpmLCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGJfc3RhdHVzICpzKSB7Ci0gIGFzc2VydCghdXBiX2ZpZWxkZGVmX2lzZnJvemVu
KGYpKTsKLSAgaWYgKCF1cGJfZmllbGRkZWZfaGFzc3ViZGVmKGYpKSB7Ci0gICAgdXBiX3N0YXR1
c19zZXRlcnJtc2cocywgImZpZWxkIHR5cGUgZG9lcyBub3QgYWNjZXB0IGEgc3ViZGVmIik7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIC8qIFRPRE86IHZhbGlkYXRlIG5hbWUgKHVwYl9pc2lk
ZW50KCkgZG9lc24ndCBxdWl0ZSB3b3JrIGF0bSBiZWNhdXNlIHRoaXMgbmFtZQotICAgKiBtYXkg
aGF2ZSBhIGxlYWRpbmcgIi4iKS4gKi8KLSAgcmVsZWFzZV9zdWJkZWYoZik7Ci0gIGYtPnN1Yi5u
YW1lID0gdXBiX3N0cmR1cChuYW1lKTsKLSAgZi0+c3ViZGVmX2lzX3N5bWJvbGljID0gdHJ1ZTsK
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX2lzc3VibXNnKGNvbnN0IHVw
Yl9maWVsZGRlZiAqZikgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX3R5cGUoZikgPT0gVVBCX1RZ
UEVfTUVTU0FHRTsKLX0KLQotYm9vbCB1cGJfZmllbGRkZWZfaXNzdHJpbmcoY29uc3QgdXBiX2Zp
ZWxkZGVmICpmKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfdHlwZShmKSA9PSBVUEJfVFlQRV9T
VFJJTkcgfHwKLSAgICAgICAgIHVwYl9maWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX0JZVEVT
OwotfQotCi1ib29sIHVwYl9maWVsZGRlZl9pc3NlcShjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsK
LSAgcmV0dXJuIHVwYl9maWVsZGRlZl9sYWJlbChmKSA9PSBVUEJfTEFCRUxfUkVQRUFURUQ7Ci19
Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX2lzcHJpbWl0aXZlKGNvbnN0IHVwYl9maWVsZGRlZiAqZikg
ewotICByZXR1cm4gIXVwYl9maWVsZGRlZl9pc3N0cmluZyhmKSAmJiAhdXBiX2ZpZWxkZGVmX2lz
c3VibXNnKGYpOwotfQotCi1ib29sIHVwYl9maWVsZGRlZl9pc21hcChjb25zdCB1cGJfZmllbGRk
ZWYgKmYpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9pc3NlcShmKSAmJiB1cGJfZmllbGRkZWZf
aXNzdWJtc2coZikgJiYKLSAgICAgICAgIHVwYl9tc2dkZWZfbWFwZW50cnkodXBiX2ZpZWxkZGVm
X21zZ3N1YmRlZihmKSk7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX2hhc3N1YmRlZihjb25zdCB1
cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9pc3N1Ym1zZyhmKSB8fCB1
cGJfZmllbGRkZWZfdHlwZShmKSA9PSBVUEJfVFlQRV9FTlVNOwotfQotCi1zdGF0aWMgYm9vbCBi
ZXR3ZWVuKGludDMyX3QgeCwgaW50MzJfdCBsb3csIGludDMyX3QgaGlnaCkgewotICByZXR1cm4g
eCA+PSBsb3cgJiYgeCA8PSBoaWdoOwotfQotCi1ib29sIHVwYl9maWVsZGRlZl9jaGVja2xhYmVs
KGludDMyX3QgbGFiZWwpIHsgcmV0dXJuIGJldHdlZW4obGFiZWwsIDEsIDMpOyB9Ci1ib29sIHVw
Yl9maWVsZGRlZl9jaGVja3R5cGUoaW50MzJfdCB0eXBlKSB7IHJldHVybiBiZXR3ZWVuKHR5cGUs
IDEsIDExKTsgfQotYm9vbCB1cGJfZmllbGRkZWZfY2hlY2tpbnRmbXQoaW50MzJfdCBmbXQpIHsg
cmV0dXJuIGJldHdlZW4oZm10LCAxLCAzKTsgfQotCi1ib29sIHVwYl9maWVsZGRlZl9jaGVja2Rl
c2NyaXB0b3J0eXBlKGludDMyX3QgdHlwZSkgewotICByZXR1cm4gYmV0d2Vlbih0eXBlLCAxLCAx
OCk7Ci19Ci0KLS8qIHVwYl9tc2dkZWYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIHZpc2l0bXNn
KGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLCB1cGJfcmVmY291bnRlZF92aXNpdCAqdmlzaXQsCi0g
ICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIHVwYl9tc2dfb25lb2ZfaXRl
ciBvOwotICBjb25zdCB1cGJfbXNnZGVmICptID0gKGNvbnN0IHVwYl9tc2dkZWYqKXI7Ci0gIHVw
Yl9tc2dfZmllbGRfaXRlciBpOwotICBmb3IodXBiX21zZ19maWVsZF9iZWdpbigmaSwgbSk7Ci0g
ICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgm
aSkpIHsKLSAgICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmllbGQoJmkpOwotICAg
IHZpc2l0KHIsIHVwYl9maWVsZGRlZl91cGNhc3QyKGYpLCBjbG9zdXJlKTsKLSAgfQotICBmb3Io
dXBiX21zZ19vbmVvZl9iZWdpbigmbywgbSk7Ci0gICAgICAhdXBiX21zZ19vbmVvZl9kb25lKCZv
KTsKLSAgICAgIHVwYl9tc2dfb25lb2ZfbmV4dCgmbykpIHsKLSAgICB1cGJfb25lb2ZkZWYgKmYg
PSB1cGJfbXNnX2l0ZXJfb25lb2YoJm8pOwotICAgIHZpc2l0KHIsIHVwYl9vbmVvZmRlZl91cGNh
c3QyKGYpLCBjbG9zdXJlKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBmcmVlbXNnKHVwYl9yZWZj
b3VudGVkICpyKSB7Ci0gIHVwYl9tc2dkZWYgKm0gPSAodXBiX21zZ2RlZiopcjsKLSAgdXBiX3N0
cnRhYmxlX3VuaW5pdCgmbS0+bnRvbyk7Ci0gIHVwYl9zdHJ0YWJsZV91bmluaXQoJm0tPm50b2Yp
OwotICB1cGJfaW50dGFibGVfdW5pbml0KCZtLT5pdG9mKTsKLSAgdXBiX2RlZl91bmluaXQodXBi
X21zZ2RlZl91cGNhc3RfbXV0YWJsZShtKSk7Ci0gIGZyZWUobSk7Ci19Ci0KLXVwYl9tc2dkZWYg
KnVwYl9tc2dkZWZfbmV3KGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIHN0YXRpYyBjb25zdCBzdHJ1
Y3QgdXBiX3JlZmNvdW50ZWRfdnRibCB2dGJsID0ge3Zpc2l0bXNnLCBmcmVlbXNnfTsKLSAgdXBi
X21zZ2RlZiAqbSA9IG1hbGxvYyhzaXplb2YoKm0pKTsKLSAgaWYgKCFtKSByZXR1cm4gTlVMTDsK
LSAgaWYgKCF1cGJfZGVmX2luaXQodXBiX21zZ2RlZl91cGNhc3RfbXV0YWJsZShtKSwgVVBCX0RF
Rl9NU0csICZ2dGJsLCBvd25lcikpCi0gICAgZ290byBlcnIyOwotICBpZiAoIXVwYl9pbnR0YWJs
ZV9pbml0KCZtLT5pdG9mLCBVUEJfQ1RZUEVfUFRSKSkgZ290byBlcnIzOwotICBpZiAoIXVwYl9z
dHJ0YWJsZV9pbml0KCZtLT5udG9mLCBVUEJfQ1RZUEVfUFRSKSkgZ290byBlcnIyOwotICBpZiAo
IXVwYl9zdHJ0YWJsZV9pbml0KCZtLT5udG9vLCBVUEJfQ1RZUEVfUFRSKSkgZ290byBlcnIxOwot
ICBtLT5tYXBfZW50cnkgPSBmYWxzZTsKLSAgcmV0dXJuIG07Ci0KLWVycjE6Ci0gIHVwYl9zdHJ0
YWJsZV91bmluaXQoJm0tPm50b2YpOwotZXJyMjoKLSAgdXBiX2ludHRhYmxlX3VuaW5pdCgmbS0+
aXRvZik7Ci1lcnIzOgotICBmcmVlKG0pOwotICByZXR1cm4gTlVMTDsKLX0KLQotdXBiX21zZ2Rl
ZiAqdXBiX21zZ2RlZl9kdXAoY29uc3QgdXBiX21zZ2RlZiAqbSwgY29uc3Qgdm9pZCAqb3duZXIp
IHsKLSAgYm9vbCBvazsKLSAgdXBiX21zZ19maWVsZF9pdGVyIGk7Ci0gIHVwYl9tc2dfb25lb2Zf
aXRlciBvOwotCi0gIHVwYl9tc2dkZWYgKm5ld20gPSB1cGJfbXNnZGVmX25ldyhvd25lcik7Ci0g
IGlmICghbmV3bSkgcmV0dXJuIE5VTEw7Ci0gIG9rID0gdXBiX2RlZl9zZXRmdWxsbmFtZSh1cGJf
bXNnZGVmX3VwY2FzdF9tdXRhYmxlKG5ld20pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXBiX2RlZl9mdWxsbmFtZSh1cGJfbXNnZGVmX3VwY2FzdChtKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKLSAgbmV3bS0+bWFwX2VudHJ5ID0gbS0+bWFwX2VudHJ5OwotICBV
UEJfQVNTRVJUX1ZBUihvaywgb2spOwotICBmb3IodXBiX21zZ19maWVsZF9iZWdpbigmaSwgbSk7
Ci0gICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVwYl9tc2dfZmllbGRfbmV4
dCgmaSkpIHsKLSAgICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfZmllbGRkZWZfZHVwKHVwYl9tc2df
aXRlcl9maWVsZCgmaSksICZmKTsKLSAgICAvKiBGaWVsZHMgaW4gb25lb2ZzIGFyZSBkdXAnZCBi
ZWxvdy4gKi8KLSAgICBpZiAodXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmdvbmVvZihmKSkgY29udGlu
dWU7Ci0gICAgaWYgKCFmIHx8ICF1cGJfbXNnZGVmX2FkZGZpZWxkKG5ld20sIGYsICZmLCBOVUxM
KSkgewotICAgICAgdXBiX21zZ2RlZl91bnJlZihuZXdtLCBvd25lcik7Ci0gICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0gIH0KLSAgZm9yKHVwYl9tc2dfb25lb2ZfYmVnaW4oJm8sIG0pOwotICAg
ICAgIXVwYl9tc2dfb25lb2ZfZG9uZSgmbyk7Ci0gICAgICB1cGJfbXNnX29uZW9mX25leHQoJm8p
KSB7Ci0gICAgdXBiX29uZW9mZGVmICpmID0gdXBiX29uZW9mZGVmX2R1cCh1cGJfbXNnX2l0ZXJf
b25lb2YoJm8pLCAmZik7Ci0gICAgaWYgKCFmIHx8ICF1cGJfbXNnZGVmX2FkZG9uZW9mKG5ld20s
IGYsICZmLCBOVUxMKSkgewotICAgICAgdXBiX21zZ2RlZl91bnJlZihuZXdtLCBvd25lcik7Ci0g
ICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG5ld207Ci19Ci0KLWJvb2wg
dXBiX21zZ2RlZl9mcmVlemUodXBiX21zZ2RlZiAqbSwgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0g
IHVwYl9kZWYgKmQgPSB1cGJfbXNnZGVmX3VwY2FzdF9tdXRhYmxlKG0pOwotICByZXR1cm4gdXBi
X2RlZl9mcmVlemUoJmQsIDEsIHN0YXR1cyk7Ci19Ci0KLWNvbnN0IGNoYXIgKnVwYl9tc2dkZWZf
ZnVsbG5hbWUoY29uc3QgdXBiX21zZ2RlZiAqbSkgewotICByZXR1cm4gdXBiX2RlZl9mdWxsbmFt
ZSh1cGJfbXNnZGVmX3VwY2FzdChtKSk7Ci19Ci0KLWJvb2wgdXBiX21zZ2RlZl9zZXRmdWxsbmFt
ZSh1cGJfbXNnZGVmICptLCBjb25zdCBjaGFyICpmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cGJfc3RhdHVzICpzKSB7Ci0gIHJldHVybiB1cGJfZGVmX3NldGZ1bGxuYW1l
KHVwYl9tc2dkZWZfdXBjYXN0X211dGFibGUobSksIGZ1bGxuYW1lLCBzKTsKLX0KLQotLyogSGVs
cGVyOiBjaGVjayB0aGF0IHRoZSBmaWVsZCB8ZnwgaXMgc2FmZSB0byBhZGQgdG8gbXNnZGVmIHxt
fC4gU2V0IGFuIGVycm9yCi0gKiBvbiBzdGF0dXMgfHN8IGFuZCByZXR1cm4gZmFsc2UgaWYgbm90
LiAqLwotc3RhdGljIGJvb2wgY2hlY2tfZmllbGRfYWRkKGNvbnN0IHVwYl9tc2dkZWYgKm0sIGNv
bnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3Rh
dHVzICpzKSB7Ci0gIGlmICh1cGJfZmllbGRkZWZfY29udGFpbmluZ3R5cGUoZikgIT0gTlVMTCkg
ewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHMsICJmaWVsZGRlZiBhbHJlYWR5IGJlbG9uZ3Mg
dG8gYSBtZXNzYWdlIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgaWYgKHVwYl9maWVs
ZGRlZl9uYW1lKGYpID09IE5VTEwgfHwgdXBiX2ZpZWxkZGVmX251bWJlcihmKSA9PSAwKSB7Ci0g
ICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgImZpZWxkIG5hbWUgb3IgbnVtYmVyIHdlcmUgbm90
IHNldCIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlmICh1cGJfbXNnZGVmX250b2Z6
KG0sIHVwYl9maWVsZGRlZl9uYW1lKGYpKSB8fAotICAgICAgICAgICAgIHVwYl9tc2dkZWZfaXRv
ZihtLCB1cGJfZmllbGRkZWZfbnVtYmVyKGYpKSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNn
KHMsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBvciBudW1iZXIgZm9yIGZpZWxkIik7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBhZGRfZmll
bGQodXBiX21zZ2RlZiAqbSwgdXBiX2ZpZWxkZGVmICpmLCBjb25zdCB2b2lkICpyZWZfZG9ub3Ip
IHsKLSAgcmVsZWFzZV9jb250YWluaW5ndHlwZShmKTsKLSAgZi0+bXNnLmRlZiA9IG07Ci0gIGYt
Pm1zZ19pc19zeW1ib2xpYyA9IGZhbHNlOwotICB1cGJfaW50dGFibGVfaW5zZXJ0KCZtLT5pdG9m
LCB1cGJfZmllbGRkZWZfbnVtYmVyKGYpLCB1cGJfdmFsdWVfcHRyKGYpKTsKLSAgdXBiX3N0cnRh
YmxlX2luc2VydCgmbS0+bnRvZiwgdXBiX2ZpZWxkZGVmX25hbWUoZiksIHVwYl92YWx1ZV9wdHIo
ZikpOwotICB1cGJfcmVmMihmLCBtKTsKLSAgdXBiX3JlZjIobSwgZik7Ci0gIGlmIChyZWZfZG9u
b3IpIHVwYl9maWVsZGRlZl91bnJlZihmLCByZWZfZG9ub3IpOwotfQotCi1ib29sIHVwYl9tc2dk
ZWZfYWRkZmllbGQodXBiX21zZ2RlZiAqbSwgdXBiX2ZpZWxkZGVmICpmLCBjb25zdCB2b2lkICpy
ZWZfZG9ub3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcykgewotICAv
KiBUT0RPOiBleHRlbnNpb25zIG5lZWQgdG8gaGF2ZSBhIHNlcGFyYXRlIG5hbWVzcGFjZSwgYmVj
YXVzZSBwcm90bzIgYWxsb3dzIGEKLSAgICogdG9wLWxldmVsIGV4dGVuc2lvbiAoaWUuIG9uZSBu
b3QgaW4gYW55IHBhY2thZ2UpIHRvIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhCi0gICAqIGZpZWxk
IGZyb20gdGhlIG1lc3NhZ2UuCi0gICAqCi0gICAqIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXQgdGhl
cmUgbmVlZHMgdG8gYmUgYSBzZXBhcmF0ZSBsb29rdXAtYnktbmFtZSBtZXRob2QKLSAgICogZm9y
IGV4dGVuc2lvbnMuICBJdCBzZWVtcyBkZXNpcmFibGUgZm9yIGl0ZXJhdGlvbiB0byByZXR1cm4g
Ym90aCBleHRlbnNpb25zCi0gICAqIGFuZCBub24tZXh0ZW5zaW9ucyB0aG91Z2guCi0gICAqCi0g
ICAqIFdlIGFsc28gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWVsZCBudW1iZXIgaXMgaW4g
YW4gZXh0ZW5zaW9uIHJhbmdlIGlmZgotICAgKiBpdCBpcyBhbiBleHRlbnNpb24uCi0gICAqCi0g
ICAqIFRoaXMgbWV0aG9kIGlzIGlkZW1wb3RlbnQuIENoZWNrIGlmIHxmfCBpcyBhbHJlYWR5IHBh
cnQgb2YgdGhpcyBtc2dkZWYgYW5kCi0gICAqIHJldHVybiBpbW1lZGlhdGVseSBpZiBzby4gKi8K
LSAgaWYgKHVwYl9maWVsZGRlZl9jb250YWluaW5ndHlwZShmKSA9PSBtKSB7Ci0gICAgcmV0dXJu
IHRydWU7Ci0gIH0KLQotICAvKiBDaGVjayBjb25zdHJhaW50cyBmb3IgYWxsIGZpZWxkcyBiZWZv
cmUgcGVyZm9ybWluZyBhbnkgYWN0aW9uLiAqLwotICBpZiAoIWNoZWNrX2ZpZWxkX2FkZChtLCBm
LCBzKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlmICh1cGJfZmllbGRkZWZfY29u
dGFpbmluZ29uZW9mKGYpICE9IE5VTEwpIHsKLSAgICAvKiBGaWVsZHMgaW4gYSBvbmVvZiBjYW4g
b25seSBiZSBhZGRlZCBieSBhZGRpbmcgdGhlIG9uZW9mIHRvIHRoZSBtc2dkZWYuICovCi0gICAg
dXBiX3N0YXR1c19zZXRlcnJtc2cocywgImZpZWxkZGVmIGlzIHBhcnQgb2YgYSBvbmVvZiIpOwot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qIENvbnN0cmFpbnQgY2hlY2tzIG9rLCBwZXJm
b3JtIHRoZSBhY3Rpb24uICovCi0gIGFkZF9maWVsZChtLCBmLCByZWZfZG9ub3IpOwotICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCB1cGJfbXNnZGVmX2FkZG9uZW9mKHVwYl9tc2dkZWYgKm0sIHVw
Yl9vbmVvZmRlZiAqbywgY29uc3Qgdm9pZCAqcmVmX2Rvbm9yLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgdXBiX29uZW9mX2l0ZXIgaXQ7Ci0KLSAgLyogQ2hl
Y2sgdmFyaW91cyBjb25kaXRpb25zIHRoYXQgd291bGQgcHJldmVudCB0aGlzIG9uZW9mIGZyb20g
YmVpbmcgYWRkZWQuICovCi0gIGlmICh1cGJfb25lb2ZkZWZfY29udGFpbmluZ3R5cGUobykpIHsK
LSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzLCAib25lb2ZkZWYgYWxyZWFkeSBiZWxvbmdzIHRv
IGEgbWVzc2FnZSIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlmICh1cGJfb25lb2Zk
ZWZfbmFtZShvKSA9PSBOVUxMKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgIm9uZW9m
ZGVmIG5hbWUgd2FzIG5vdCBzZXQiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0gZWxzZSBpZiAo
dXBiX21zZ2RlZl9udG9veihtLCB1cGJfb25lb2ZkZWZfbmFtZShvKSkpIHsKLSAgICB1cGJfc3Rh
dHVzX3NldGVycm1zZyhzLCAiZHVwbGljYXRlIG9uZW9mIG5hbWUiKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLQotICAvKiBDaGVjayB0aGF0IGFsbCBvZiB0aGUgb25lb2YncyBmaWVsZHMgZG8g
bm90IGNvbmZsaWN0IHdpdGggbmFtZXMgb3IgbnVtYmVycwotICAgKiBvZiBmaWVsZHMgYWxyZWFk
eSBpbiB0aGUgbWVzc2FnZS4gKi8KLSAgZm9yICh1cGJfb25lb2ZfYmVnaW4oJml0LCBvKTsgIXVw
Yl9vbmVvZl9kb25lKCZpdCk7IHVwYl9vbmVvZl9uZXh0KCZpdCkpIHsKLSAgICBjb25zdCB1cGJf
ZmllbGRkZWYgKmYgPSB1cGJfb25lb2ZfaXRlcl9maWVsZCgmaXQpOwotICAgIGlmICghY2hlY2tf
ZmllbGRfYWRkKG0sIGYsIHMpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0K
LSAgLyogRXZlcnl0aGluZyBjaGVja3Mgb3V0IC0tIGNvbW1pdCBub3cuICovCi0KLSAgLyogQWRk
IG9uZW9mIGl0c2VsZiBmaXJzdC4gKi8KLSAgby0+cGFyZW50ID0gbTsKLSAgdXBiX3N0cnRhYmxl
X2luc2VydCgmbS0+bnRvbywgdXBiX29uZW9mZGVmX25hbWUobyksIHVwYl92YWx1ZV9wdHIobykp
OwotICB1cGJfcmVmMihvLCBtKTsKLSAgdXBiX3JlZjIobSwgbyk7Ci0KLSAgLyogQWRkIGVhY2gg
ZmllbGQgb2YgdGhlIG9uZW9mIGRpcmVjdGx5IHRvIHRoZSBtc2dkZWYuICovCi0gIGZvciAodXBi
X29uZW9mX2JlZ2luKCZpdCwgbyk7ICF1cGJfb25lb2ZfZG9uZSgmaXQpOyB1cGJfb25lb2ZfbmV4
dCgmaXQpKSB7Ci0gICAgdXBiX2ZpZWxkZGVmICpmID0gdXBiX29uZW9mX2l0ZXJfZmllbGQoJml0
KTsKLSAgICBhZGRfZmllbGQobSwgZiwgTlVMTCk7Ci0gIH0KLQotICBpZiAocmVmX2Rvbm9yKSB1
cGJfb25lb2ZkZWZfdW5yZWYobywgcmVmX2Rvbm9yKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQot
Y29uc3QgdXBiX2ZpZWxkZGVmICp1cGJfbXNnZGVmX2l0b2YoY29uc3QgdXBiX21zZ2RlZiAqbSwg
dWludDMyX3QgaSkgewotICB1cGJfdmFsdWUgdmFsOwotICByZXR1cm4gdXBiX2ludHRhYmxlX2xv
b2t1cDMyKCZtLT5pdG9mLCBpLCAmdmFsKSA/Ci0gICAgICB1cGJfdmFsdWVfZ2V0cHRyKHZhbCkg
OiBOVUxMOwotfQotCi1jb25zdCB1cGJfZmllbGRkZWYgKnVwYl9tc2dkZWZfbnRvZihjb25zdCB1
cGJfbXNnZGVmICptLCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGxlbikgewotICB1cGJfdmFsdWUgdmFsOwotICByZXR1cm4gdXBi
X3N0cnRhYmxlX2xvb2t1cDIoJm0tPm50b2YsIG5hbWUsIGxlbiwgJnZhbCkgPwotICAgICAgdXBi
X3ZhbHVlX2dldHB0cih2YWwpIDogTlVMTDsKLX0KLQotY29uc3QgdXBiX29uZW9mZGVmICp1cGJf
bXNnZGVmX250b28oY29uc3QgdXBiX21zZ2RlZiAqbSwgY29uc3QgY2hhciAqbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pIHsKLSAgdXBiX3ZhbHVl
IHZhbDsKLSAgcmV0dXJuIHVwYl9zdHJ0YWJsZV9sb29rdXAyKCZtLT5udG9vLCBuYW1lLCBsZW4s
ICZ2YWwpID8KLSAgICAgIHVwYl92YWx1ZV9nZXRwdHIodmFsKSA6IE5VTEw7Ci19Ci0KLWludCB1
cGJfbXNnZGVmX251bWZpZWxkcyhjb25zdCB1cGJfbXNnZGVmICptKSB7Ci0gIHJldHVybiB1cGJf
c3RydGFibGVfY291bnQoJm0tPm50b2YpOwotfQotCi1pbnQgdXBiX21zZ2RlZl9udW1vbmVvZnMo
Y29uc3QgdXBiX21zZ2RlZiAqbSkgewotICByZXR1cm4gdXBiX3N0cnRhYmxlX2NvdW50KCZtLT5u
dG9vKTsKLX0KLQotdm9pZCB1cGJfbXNnZGVmX3NldG1hcGVudHJ5KHVwYl9tc2dkZWYgKm0sIGJv
b2wgbWFwX2VudHJ5KSB7Ci0gIGFzc2VydCghdXBiX21zZ2RlZl9pc2Zyb3plbihtKSk7Ci0gIG0t
Pm1hcF9lbnRyeSA9IG1hcF9lbnRyeTsKLX0KLQotYm9vbCB1cGJfbXNnZGVmX21hcGVudHJ5KGNv
bnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIG0tPm1hcF9lbnRyeTsKLX0KLQotdm9pZCB1
cGJfbXNnX2ZpZWxkX2JlZ2luKHVwYl9tc2dfZmllbGRfaXRlciAqaXRlciwgY29uc3QgdXBiX21z
Z2RlZiAqbSkgewotICB1cGJfaW50dGFibGVfYmVnaW4oaXRlciwgJm0tPml0b2YpOwotfQotCi12
b2lkIHVwYl9tc2dfZmllbGRfbmV4dCh1cGJfbXNnX2ZpZWxkX2l0ZXIgKml0ZXIpIHsgdXBiX2lu
dHRhYmxlX25leHQoaXRlcik7IH0KLQotYm9vbCB1cGJfbXNnX2ZpZWxkX2RvbmUoY29uc3QgdXBi
X21zZ19maWVsZF9pdGVyICppdGVyKSB7Ci0gIHJldHVybiB1cGJfaW50dGFibGVfZG9uZShpdGVy
KTsKLX0KLQotdXBiX2ZpZWxkZGVmICp1cGJfbXNnX2l0ZXJfZmllbGQoY29uc3QgdXBiX21zZ19m
aWVsZF9pdGVyICppdGVyKSB7Ci0gIHJldHVybiAodXBiX2ZpZWxkZGVmKil1cGJfdmFsdWVfZ2V0
cHRyKHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVlKGl0ZXIpKTsKLX0KLQotdm9pZCB1cGJfbXNnX2Zp
ZWxkX2l0ZXJfc2V0ZG9uZSh1cGJfbXNnX2ZpZWxkX2l0ZXIgKml0ZXIpIHsKLSAgdXBiX2ludHRh
YmxlX2l0ZXJfc2V0ZG9uZShpdGVyKTsKLX0KLQotdm9pZCB1cGJfbXNnX29uZW9mX2JlZ2luKHVw
Yl9tc2dfb25lb2ZfaXRlciAqaXRlciwgY29uc3QgdXBiX21zZ2RlZiAqbSkgewotICB1cGJfc3Ry
dGFibGVfYmVnaW4oaXRlciwgJm0tPm50b28pOwotfQotCi12b2lkIHVwYl9tc2dfb25lb2ZfbmV4
dCh1cGJfbXNnX29uZW9mX2l0ZXIgKml0ZXIpIHsgdXBiX3N0cnRhYmxlX25leHQoaXRlcik7IH0K
LQotYm9vbCB1cGJfbXNnX29uZW9mX2RvbmUoY29uc3QgdXBiX21zZ19vbmVvZl9pdGVyICppdGVy
KSB7Ci0gIHJldHVybiB1cGJfc3RydGFibGVfZG9uZShpdGVyKTsKLX0KLQotdXBiX29uZW9mZGVm
ICp1cGJfbXNnX2l0ZXJfb25lb2YoY29uc3QgdXBiX21zZ19vbmVvZl9pdGVyICppdGVyKSB7Ci0g
IHJldHVybiAodXBiX29uZW9mZGVmKil1cGJfdmFsdWVfZ2V0cHRyKHVwYl9zdHJ0YWJsZV9pdGVy
X3ZhbHVlKGl0ZXIpKTsKLX0KLQotdm9pZCB1cGJfbXNnX29uZW9mX2l0ZXJfc2V0ZG9uZSh1cGJf
bXNnX29uZW9mX2l0ZXIgKml0ZXIpIHsKLSAgdXBiX3N0cnRhYmxlX2l0ZXJfc2V0ZG9uZShpdGVy
KTsKLX0KLQotLyogdXBiX29uZW9mZGVmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgdmlzaXRvbmVv
Zihjb25zdCB1cGJfcmVmY291bnRlZCAqciwgdXBiX3JlZmNvdW50ZWRfdmlzaXQgKnZpc2l0LAot
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIGNvbnN0IHVwYl9vbmVv
ZmRlZiAqbyA9IChjb25zdCB1cGJfb25lb2ZkZWYqKXI7Ci0gIHVwYl9vbmVvZl9pdGVyIGk7Ci0g
IGZvciAodXBiX29uZW9mX2JlZ2luKCZpLCBvKTsgIXVwYl9vbmVvZl9kb25lKCZpKTsgdXBiX29u
ZW9mX25leHQoJmkpKSB7Ci0gICAgY29uc3QgdXBiX2ZpZWxkZGVmICpmID0gdXBiX29uZW9mX2l0
ZXJfZmllbGQoJmkpOwotICAgIHZpc2l0KHIsIHVwYl9maWVsZGRlZl91cGNhc3QyKGYpLCBjbG9z
dXJlKTsKLSAgfQotICBpZiAoby0+cGFyZW50KSB7Ci0gICAgdmlzaXQociwgdXBiX21zZ2RlZl91
cGNhc3QyKG8tPnBhcmVudCksIGNsb3N1cmUpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVv
bmVvZih1cGJfcmVmY291bnRlZCAqcikgewotICB1cGJfb25lb2ZkZWYgKm8gPSAodXBiX29uZW9m
ZGVmKilyOwotICB1cGJfc3RydGFibGVfdW5pbml0KCZvLT5udG9mKTsKLSAgdXBiX2ludHRhYmxl
X3VuaW5pdCgmby0+aXRvZik7Ci0gIHVwYl9kZWZfdW5pbml0KHVwYl9vbmVvZmRlZl91cGNhc3Rf
bXV0YWJsZShvKSk7Ci0gIGZyZWUobyk7Ci19Ci0KLXVwYl9vbmVvZmRlZiAqdXBiX29uZW9mZGVm
X25ldyhjb25zdCB2b2lkICpvd25lcikgewotICBzdGF0aWMgY29uc3Qgc3RydWN0IHVwYl9yZWZj
b3VudGVkX3Z0YmwgdnRibCA9IHt2aXNpdG9uZW9mLCBmcmVlb25lb2Z9OwotICB1cGJfb25lb2Zk
ZWYgKm8gPSBtYWxsb2Moc2l6ZW9mKCpvKSk7Ci0gIG8tPnBhcmVudCA9IE5VTEw7Ci0gIGlmICgh
bykgcmV0dXJuIE5VTEw7Ci0gIGlmICghdXBiX2RlZl9pbml0KHVwYl9vbmVvZmRlZl91cGNhc3Rf
bXV0YWJsZShvKSwgVVBCX0RFRl9PTkVPRiwgJnZ0YmwsCi0gICAgICAgICAgICAgICAgICAgIG93
bmVyKSkKLSAgICBnb3RvIGVycjI7Ci0gIGlmICghdXBiX2ludHRhYmxlX2luaXQoJm8tPml0b2Ys
IFVQQl9DVFlQRV9QVFIpKSBnb3RvIGVycjI7Ci0gIGlmICghdXBiX3N0cnRhYmxlX2luaXQoJm8t
Pm50b2YsIFVQQl9DVFlQRV9QVFIpKSBnb3RvIGVycjE7Ci0gIHJldHVybiBvOwotCi1lcnIxOgot
ICB1cGJfaW50dGFibGVfdW5pbml0KCZvLT5pdG9mKTsKLWVycjI6Ci0gIGZyZWUobyk7Ci0gIHJl
dHVybiBOVUxMOwotfQotCi11cGJfb25lb2ZkZWYgKnVwYl9vbmVvZmRlZl9kdXAoY29uc3QgdXBi
X29uZW9mZGVmICpvLCBjb25zdCB2b2lkICpvd25lcikgewotICBib29sIG9rOwotICB1cGJfb25l
b2ZfaXRlciBpOwotICB1cGJfb25lb2ZkZWYgKm5ld28gPSB1cGJfb25lb2ZkZWZfbmV3KG93bmVy
KTsKLSAgaWYgKCFuZXdvKSByZXR1cm4gTlVMTDsKLSAgb2sgPSB1cGJfZGVmX3NldGZ1bGxuYW1l
KHVwYl9vbmVvZmRlZl91cGNhc3RfbXV0YWJsZShuZXdvKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwYl9kZWZfZnVsbG5hbWUodXBiX29uZW9mZGVmX3VwY2FzdChvKSksIE5VTEwpOwot
ICBVUEJfQVNTRVJUX1ZBUihvaywgb2spOwotICBmb3IgKHVwYl9vbmVvZl9iZWdpbigmaSwgbyk7
ICF1cGJfb25lb2ZfZG9uZSgmaSk7IHVwYl9vbmVvZl9uZXh0KCZpKSkgewotICAgIHVwYl9maWVs
ZGRlZiAqZiA9IHVwYl9maWVsZGRlZl9kdXAodXBiX29uZW9mX2l0ZXJfZmllbGQoJmkpLCAmZik7
Ci0gICAgaWYgKCFmIHx8ICF1cGJfb25lb2ZkZWZfYWRkZmllbGQobmV3bywgZiwgJmYsIE5VTEwp
KSB7Ci0gICAgICB1cGJfb25lb2ZkZWZfdW5yZWYobmV3bywgb3duZXIpOwotICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgfQotICB9Ci0gIHJldHVybiBuZXdvOwotfQotCi1jb25zdCBjaGFyICp1cGJf
b25lb2ZkZWZfbmFtZShjb25zdCB1cGJfb25lb2ZkZWYgKm8pIHsKLSAgcmV0dXJuIHVwYl9kZWZf
ZnVsbG5hbWUodXBiX29uZW9mZGVmX3VwY2FzdChvKSk7Ci19Ci0KLWJvb2wgdXBiX29uZW9mZGVm
X3NldG5hbWUodXBiX29uZW9mZGVmICpvLCBjb25zdCBjaGFyICpmdWxsbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcykgewotICBpZiAodXBiX29uZW9mZGVm
X2NvbnRhaW5pbmd0eXBlKG8pKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgIm9uZW9m
IGFscmVhZHkgYWRkZWQgdG8gYSBtZXNzYWdlIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0g
IHJldHVybiB1cGJfZGVmX3NldGZ1bGxuYW1lKHVwYl9vbmVvZmRlZl91cGNhc3RfbXV0YWJsZShv
KSwgZnVsbG5hbWUsIHMpOwotfQotCi1jb25zdCB1cGJfbXNnZGVmICp1cGJfb25lb2ZkZWZfY29u
dGFpbmluZ3R5cGUoY29uc3QgdXBiX29uZW9mZGVmICpvKSB7Ci0gIHJldHVybiBvLT5wYXJlbnQ7
Ci19Ci0KLWludCB1cGJfb25lb2ZkZWZfbnVtZmllbGRzKGNvbnN0IHVwYl9vbmVvZmRlZiAqbykg
ewotICByZXR1cm4gdXBiX3N0cnRhYmxlX2NvdW50KCZvLT5udG9mKTsKLX0KLQotYm9vbCB1cGJf
b25lb2ZkZWZfYWRkZmllbGQodXBiX29uZW9mZGVmICpvLCB1cGJfZmllbGRkZWYgKmYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpyZWZfZG9ub3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cGJfc3RhdHVzICpzKSB7Ci0gIGFzc2VydCghdXBiX29uZW9mZGVm
X2lzZnJvemVuKG8pKTsKLSAgYXNzZXJ0KCFvLT5wYXJlbnQgfHwgIXVwYl9tc2dkZWZfaXNmcm96
ZW4oby0+cGFyZW50KSk7Ci0KLSAgLyogVGhpcyBtZXRob2QgaXMgaWRlbXBvdGVudC4gQ2hlY2sg
aWYgfGZ8IGlzIGFscmVhZHkgcGFydCBvZiB0aGlzIG9uZW9mZGVmCi0gICAqIGFuZCByZXR1cm4g
aW1tZWRpYXRlbHkgaWYgc28uICovCi0gIGlmICh1cGJfZmllbGRkZWZfY29udGFpbmluZ29uZW9m
KGYpID09IG8pIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qIFRoZSBmaWVsZCBtdXN0
IGhhdmUgYW4gT1BUSU9OQUwgbGFiZWwuICovCi0gIGlmICh1cGJfZmllbGRkZWZfbGFiZWwoZikg
IT0gVVBCX0xBQkVMX09QVElPTkFMKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgImZp
ZWxkcyBpbiBvbmVvZiBtdXN0IGhhdmUgT1BUSU9OQUwgbGFiZWwiKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLQotICAvKiBDaGVjayB0aGF0IG5vIGZpZWxkIHdpdGggdGhpcyBuYW1lIG9yIG51
bWJlciBleGlzdHMgYWxyZWFkeSBpbiB0aGUgb25lb2YuCi0gICAqIEFsc28gY2hlY2sgdGhhdCB0
aGUgZmllbGQgaXMgbm90IGFscmVhZHkgcGFydCBvZiBhIG9uZW9mLiAqLwotICBpZiAodXBiX2Zp
ZWxkZGVmX25hbWUoZikgPT0gTlVMTCB8fCB1cGJfZmllbGRkZWZfbnVtYmVyKGYpID09IDApIHsK
LSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzLCAiZmllbGQgbmFtZSBvciBudW1iZXIgd2VyZSBu
b3Qgc2V0Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgaWYgKHVwYl9vbmVvZmRlZl9p
dG9mKG8sIHVwYl9maWVsZGRlZl9udW1iZXIoZikpIHx8Ci0gICAgICAgICAgICAgdXBiX29uZW9m
ZGVmX250b2Z6KG8sIHVwYl9maWVsZGRlZl9uYW1lKGYpKSkgewotICAgIHVwYl9zdGF0dXNfc2V0
ZXJybXNnKHMsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBvciBudW1iZXIiKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0gZWxzZSBpZiAodXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmdvbmVvZihmKSAhPSBO
VUxMKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgImZpZWxkZGVmIGFscmVhZHkgYmVs
b25ncyB0byBhIG9uZW9mIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyogV2UgYWxs
b3cgYWRkaW5nIGEgZmllbGQgdG8gdGhlIG9uZW9mIGVpdGhlciBpZiB0aGUgZmllbGQgaXMgbm90
IHBhcnQgb2YgYQotICAgKiBtc2dkZWYsIG9yIGlmIGl0IGlzIGFuZCB3ZSBhcmUgYWxzbyBwYXJ0
IG9mIHRoZSBzYW1lIG1zZ2RlZi4gKi8KLSAgaWYgKG8tPnBhcmVudCA9PSBOVUxMKSB7Ci0gICAg
LyogSWYgd2UncmUgbm90IGluIGEgbXNnZGVmLCB0aGUgZmllbGQgY2Fubm90IGJlIGVpdGhlci4g
T3RoZXJ3aXNlIHdlIHdvdWxkCi0gICAgICogbmVlZCB0byBtYWdpY2FsbHkgYWRkIHRoaXMgb25l
b2YgdG8gYSBtc2dkZWYgdG8gcmVtYWluIGNvbnNpc3RlbnQsIHdoaWNoCi0gICAgICogaXMgc3Vy
cHJpc2luZyBiZWhhdmlvci4gKi8KLSAgICBpZiAodXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBl
KGYpICE9IE5VTEwpIHsKLSAgICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHMsICJmaWVsZGRlZiBh
bHJlYWR5IGJlbG9uZ3MgdG8gYSBtZXNzYWdlLCBidXQgIgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIm9uZW9mIGRvZXMgbm90Iik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICB9IGVsc2UgewotICAgIC8qIElmIHdlJ3JlIGluIGEgbXNnZGVmLCB0aGUgdXNlciBjYW4gYWRk
IGZpZWxkcyB0aGF0IGVpdGhlciBhcmVuJ3QgaW4gYW55Ci0gICAgICogbXNnZGVmIChpbiB3aGlj
aCBjYXNlIHRoZXkncmUgYWRkZWQgdG8gb3VyIG1zZ2RlZikgb3IgYWxyZWFkeSBhIHBhcnQgb2YK
LSAgICAgKiBvdXIgbXNnZGVmLiAqLwotICAgIGlmICh1cGJfZmllbGRkZWZfY29udGFpbmluZ3R5
cGUoZikgIT0gTlVMTCAmJgotICAgICAgICB1cGJfZmllbGRkZWZfY29udGFpbmluZ3R5cGUoZikg
IT0gby0+cGFyZW50KSB7Ci0gICAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzLCAiZmllbGRkZWYg
YmVsb25ncyB0byBhIGRpZmZlcmVudCBtZXNzYWdlICIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0aGFuIG9uZW9mIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0K
LSAgLyogQ29tbWl0IHBoYXNlLiBGaXJzdCBhZGQgdGhlIGZpZWxkIHRvIG91ciBwYXJlbnQgbXNn
ZGVmLCBpZiBhbnksIGJlY2F1c2UKLSAgICogdGhhdCBtYXkgZmFpbDsgdGhlbiBhZGQgdGhlIGZp
ZWxkIHRvIG91ciBvd24gdGFibGVzLiAqLwotCi0gIGlmIChvLT5wYXJlbnQgIT0gTlVMTCAmJiB1
cGJfZmllbGRkZWZfY29udGFpbmluZ3R5cGUoZikgPT0gTlVMTCkgewotICAgIGlmICghdXBiX21z
Z2RlZl9hZGRmaWVsZCgodXBiX21zZ2RlZiopby0+cGFyZW50LCBmLCBOVUxMLCBzKSkgewotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHJlbGVhc2VfY29udGFpbmluZ3R5cGUo
Zik7Ci0gIGYtPm9uZW9mID0gbzsKLSAgdXBiX2ludHRhYmxlX2luc2VydCgmby0+aXRvZiwgdXBi
X2ZpZWxkZGVmX251bWJlcihmKSwgdXBiX3ZhbHVlX3B0cihmKSk7Ci0gIHVwYl9zdHJ0YWJsZV9p
bnNlcnQoJm8tPm50b2YsIHVwYl9maWVsZGRlZl9uYW1lKGYpLCB1cGJfdmFsdWVfcHRyKGYpKTsK
LSAgdXBiX3JlZjIoZiwgbyk7Ci0gIHVwYl9yZWYyKG8sIGYpOwotICBpZiAocmVmX2Rvbm9yKSB1
cGJfZmllbGRkZWZfdW5yZWYoZiwgcmVmX2Rvbm9yKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQot
Y29uc3QgdXBiX2ZpZWxkZGVmICp1cGJfb25lb2ZkZWZfbnRvZihjb25zdCB1cGJfb25lb2ZkZWYg
Km8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5h
bWUsIHNpemVfdCBsZW5ndGgpIHsKLSAgdXBiX3ZhbHVlIHZhbDsKLSAgcmV0dXJuIHVwYl9zdHJ0
YWJsZV9sb29rdXAyKCZvLT5udG9mLCBuYW1lLCBsZW5ndGgsICZ2YWwpID8KLSAgICAgIHVwYl92
YWx1ZV9nZXRwdHIodmFsKSA6IE5VTEw7Ci19Ci0KLWNvbnN0IHVwYl9maWVsZGRlZiAqdXBiX29u
ZW9mZGVmX2l0b2YoY29uc3QgdXBiX29uZW9mZGVmICpvLCB1aW50MzJfdCBudW0pIHsKLSAgdXBi
X3ZhbHVlIHZhbDsKLSAgcmV0dXJuIHVwYl9pbnR0YWJsZV9sb29rdXAzMigmby0+aXRvZiwgbnVt
LCAmdmFsKSA/Ci0gICAgICB1cGJfdmFsdWVfZ2V0cHRyKHZhbCkgOiBOVUxMOwotfQotCi12b2lk
IHVwYl9vbmVvZl9iZWdpbih1cGJfb25lb2ZfaXRlciAqaXRlciwgY29uc3QgdXBiX29uZW9mZGVm
ICpvKSB7Ci0gIHVwYl9pbnR0YWJsZV9iZWdpbihpdGVyLCAmby0+aXRvZik7Ci19Ci0KLXZvaWQg
dXBiX29uZW9mX25leHQodXBiX29uZW9mX2l0ZXIgKml0ZXIpIHsKLSAgdXBiX2ludHRhYmxlX25l
eHQoaXRlcik7Ci19Ci0KLWJvb2wgdXBiX29uZW9mX2RvbmUodXBiX29uZW9mX2l0ZXIgKml0ZXIp
IHsKLSAgcmV0dXJuIHVwYl9pbnR0YWJsZV9kb25lKGl0ZXIpOwotfQotCi11cGJfZmllbGRkZWYg
KnVwYl9vbmVvZl9pdGVyX2ZpZWxkKGNvbnN0IHVwYl9vbmVvZl9pdGVyICppdGVyKSB7Ci0gIHJl
dHVybiAodXBiX2ZpZWxkZGVmKil1cGJfdmFsdWVfZ2V0cHRyKHVwYl9pbnR0YWJsZV9pdGVyX3Zh
bHVlKGl0ZXIpKTsKLX0KLQotdm9pZCB1cGJfb25lb2ZfaXRlcl9zZXRkb25lKHVwYl9vbmVvZl9p
dGVyICppdGVyKSB7Ci0gIHVwYl9pbnR0YWJsZV9pdGVyX3NldGRvbmUoaXRlcik7Ci19Ci0KLQot
I2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5n
Lmg+Ci0KLXR5cGVkZWYgc3RydWN0IGNsZWFudXBfZW50IHsKLSAgdXBiX2NsZWFudXBfZnVuYyAq
Y2xlYW51cDsKLSAgdm9pZCAqdWQ7Ci0gIHN0cnVjdCBjbGVhbnVwX2VudCAqbmV4dDsKLX0gY2xl
YW51cF9lbnQ7Ci0KLXN0YXRpYyB2b2lkICpzZWVkZWRfYWxsb2Modm9pZCAqdWQsIHZvaWQgKnB0
ciwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBzaXplKTsKLQotLyogRGVmYXVsdCBhbGxvY2F0b3Ig
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLQotLyogSnVzdCB1c2UgcmVhbGxvYywga2VlcGluZyBhbGwgYWxsb2NhdGVkIGJsb2NrcyBp
biBhIGxpbmtlZCBsaXN0IHRvIGRlc3Ryb3kgYXQKLSAqIHRoZSBlbmQuICovCi0KLXR5cGVkZWYg
c3RydWN0IG1lbV9ibG9jayB7Ci0gIC8qIExpc3QgaXMgZG91Ymx5LWxpbmtlZCwgYmVjYXVzZSBp
biBjYXNlcyB3aGVyZSByZWFsbG9jKCkgbW92ZXMgYW4gZXhpc3RpbmcKLSAgICogYmxvY2ssIHdl
IG5lZWQgdG8gYmUgYWJsZSB0byByZW1vdmUgdGhlIG9sZCBwb2ludGVyIGZyb20gdGhlIGxpc3QK
LSAgICogZWZmaWNpZW50bHkuICovCi0gIHN0cnVjdCBtZW1fYmxvY2sgKnByZXYsICpuZXh0Owot
I2lmbmRlZiBOREVCVUcKLSAgc2l6ZV90IHNpemU7ICAvKiBEb2Vzbid0IGluY2x1ZGUgbWVtX2Js
b2NrIHN0cnVjdHVyZS4gKi8KLSNlbmRpZgotfSBtZW1fYmxvY2s7Ci0KLXR5cGVkZWYgc3RydWN0
IHsKLSAgbWVtX2Jsb2NrICpoZWFkOwotfSBkZWZhdWx0X2FsbG9jX3VkOwotCi1zdGF0aWMgdm9p
ZCAqZGVmYXVsdF9hbGxvYyh2b2lkICpfdWQsIHZvaWQgKnB0ciwgc2l6ZV90IG9sZHNpemUsIHNp
emVfdCBzaXplKSB7Ci0gIGRlZmF1bHRfYWxsb2NfdWQgKnVkID0gX3VkOwotICBtZW1fYmxvY2sg
KmZyb20sICpibG9jazsKLSAgdm9pZCAqcmV0OwotICBVUEJfVU5VU0VEKG9sZHNpemUpOwotCi0g
IGZyb20gPSBwdHIgPyAodm9pZCopKChjaGFyKilwdHIgLSBzaXplb2YobWVtX2Jsb2NrKSkgOiBO
VUxMOwotCi0jaWZuZGVmIE5ERUJVRwotICBpZiAoZnJvbSkgewotICAgIGFzc2VydChvbGRzaXpl
IDw9IGZyb20tPnNpemUpOwotICB9Ci0jZW5kaWYKLQotICAvKiBUT0RPKGhhYmVybWFuKTogd2Ug
cHJvYmFibHkgbmVlZCB0byBwcm92aWRlIGV2ZW4gYmV0dGVyIGFsaWdubWVudCBoZXJlLAotICAg
KiBsaWtlIDE2LWJ5dGUgYWxpZ25tZW50IG9mIHRoZSByZXR1cm5lZCBkYXRhIHBvaW50ZXIuICov
Ci0gIGJsb2NrID0gcmVhbGxvYyhmcm9tLCBzaXplICsgc2l6ZW9mKG1lbV9ibG9jaykpOwotICBp
ZiAoIWJsb2NrKSByZXR1cm4gTlVMTDsKLSAgcmV0ID0gKGNoYXIqKWJsb2NrICsgc2l6ZW9mKCpi
bG9jayk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gIGJsb2NrLT5zaXplID0gc2l6ZTsKLSNlbmRpZgot
Ci0gIGlmIChmcm9tKSB7Ci0gICAgaWYgKGJsb2NrICE9IGZyb20pIHsKLSAgICAgIC8qIFRoZSBi
bG9jayB3YXMgbW92ZWQsIHNvIHBvaW50ZXJzIGluIG5leHQgYW5kIHByZXYgYmxvY2tzIG11c3Qg
YmUKLSAgICAgICAqIHVwZGF0ZWQgdG8gaXRzIG5ldyBsb2NhdGlvbi4gKi8KLSAgICAgIGlmIChi
bG9jay0+bmV4dCkgYmxvY2stPm5leHQtPnByZXYgPSBibG9jazsKLSAgICAgIGlmIChibG9jay0+
cHJldikgYmxvY2stPnByZXYtPm5leHQgPSBibG9jazsKLSAgICAgIGlmICh1ZC0+aGVhZCA9PSBm
cm9tKSB1ZC0+aGVhZCA9IGJsb2NrOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBJbnNlcnQg
YXQgaGVhZCBvZiBsaW5rZWQgbGlzdC4gKi8KLSAgICBibG9jay0+cHJldiA9IE5VTEw7Ci0gICAg
YmxvY2stPm5leHQgPSB1ZC0+aGVhZDsKLSAgICBpZiAoYmxvY2stPm5leHQpIGJsb2NrLT5uZXh0
LT5wcmV2ID0gYmxvY2s7Ci0gICAgdWQtPmhlYWQgPSBibG9jazsKLSAgfQotCi0gIHJldHVybiBy
ZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlZmF1bHRfYWxsb2NfY2xlYW51cCh2b2lkICpfdWQpIHsK
LSAgZGVmYXVsdF9hbGxvY191ZCAqdWQgPSBfdWQ7Ci0gIG1lbV9ibG9jayAqYmxvY2sgPSB1ZC0+
aGVhZDsKLQotICB3aGlsZSAoYmxvY2spIHsKLSAgICB2b2lkICp0b19mcmVlID0gYmxvY2s7Ci0g
ICAgYmxvY2sgPSBibG9jay0+bmV4dDsKLSAgICBmcmVlKHRvX2ZyZWUpOwotICB9Ci19Ci0KLQot
LyogU3RhbmRhcmQgZXJyb3IgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGJvb2wgZGVmYXVsdF9lcnIodm9pZCAq
dWQsIGNvbnN0IHVwYl9zdGF0dXMgKnN0YXR1cykgewotICBVUEJfVU5VU0VEKHVkKTsKLSAgVVBC
X1VOVVNFRChzdGF0dXMpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIHdyaXRl
X2Vycl90byh2b2lkICp1ZCwgY29uc3QgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0gIHVwYl9zdGF0
dXMgKmNvcHlfdG8gPSB1ZDsKLSAgdXBiX3N0YXR1c19jb3B5KGNvcHlfdG8sIHN0YXR1cyk7Ci0g
IHJldHVybiBmYWxzZTsKLX0KLQotCi0vKiB1cGJfZW52ICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIHVw
Yl9lbnZfaW5pdCh1cGJfZW52ICplKSB7Ci0gIGRlZmF1bHRfYWxsb2NfdWQgKnVkID0gKGRlZmF1
bHRfYWxsb2NfdWQqKSZlLT5kZWZhdWx0X2FsbG9jX3VkOwotICBlLT5va18gPSB0cnVlOwotICBl
LT5ieXRlc19hbGxvY2F0ZWQgPSAwOwotICBlLT5jbGVhbnVwX2hlYWQgPSBOVUxMOwotCi0gIHVk
LT5oZWFkID0gTlVMTDsKLQotICAvKiBTZXQgZGVmYXVsdCBmdW5jdGlvbnMuICovCi0gIHVwYl9l
bnZfc2V0YWxsb2NmdW5jKGUsIGRlZmF1bHRfYWxsb2MsIHVkKTsKLSAgdXBiX2Vudl9zZXRlcnJv
cmZ1bmMoZSwgZGVmYXVsdF9lcnIsIE5VTEwpOwotfQotCi12b2lkIHVwYl9lbnZfdW5pbml0KHVw
Yl9lbnYgKmUpIHsKLSAgY2xlYW51cF9lbnQgKmVudCA9IGUtPmNsZWFudXBfaGVhZDsKLQotICB3
aGlsZSAoZW50KSB7Ci0gICAgZW50LT5jbGVhbnVwKGVudC0+dWQpOwotICAgIGVudCA9IGVudC0+
bmV4dDsKLSAgfQotCi0gIC8qIE11c3QgZG8gdGhpcyBhZnRlciBydW5uaW5nIGNsZWFudXAgZnVu
Y3Rpb25zLCBiZWNhdXNlIHRoaXMgd2lsbCBkZWxldGUKLSAgICAgdGhlIG1lbW9yeSB3ZSBzdG9y
ZSBvdXIgY2xlYW51cCBlbnRyaWVzIGluISAqLwotICBpZiAoZS0+YWxsb2MgPT0gZGVmYXVsdF9h
bGxvYykgewotICAgIGRlZmF1bHRfYWxsb2NfY2xlYW51cChlLT5hbGxvY191ZCk7Ci0gIH0KLX0K
LQotVVBCX0ZPUkNFSU5MSU5FIHZvaWQgdXBiX2Vudl9zZXRhbGxvY2Z1bmModXBiX2VudiAqZSwg
dXBiX2FsbG9jX2Z1bmMgKmFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqdWQpIHsKLSAgZS0+YWxsb2MgPSBhbGxvYzsKLSAgZS0+YWxsb2NfdWQg
PSB1ZDsKLX0KLQotVVBCX0ZPUkNFSU5MSU5FIHZvaWQgdXBiX2Vudl9zZXRlcnJvcmZ1bmModXBi
X2VudiAqZSwgdXBiX2Vycm9yX2Z1bmMgKmZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICp1ZCkgewotICBlLT5lcnIgPSBmdW5jOwotICBlLT5lcnJf
dWQgPSB1ZDsKLX0KLQotdm9pZCB1cGJfZW52X3JlcG9ydGVycm9yc3RvKHVwYl9lbnYgKmUsIHVw
Yl9zdGF0dXMgKnN0YXR1cykgewotICBlLT5lcnIgPSB3cml0ZV9lcnJfdG87Ci0gIGUtPmVycl91
ZCA9IHN0YXR1czsKLX0KLQotYm9vbCB1cGJfZW52X29rKGNvbnN0IHVwYl9lbnYgKmUpIHsKLSAg
cmV0dXJuIGUtPm9rXzsKLX0KLQotYm9vbCB1cGJfZW52X3JlcG9ydGVycm9yKHVwYl9lbnYgKmUs
IGNvbnN0IHVwYl9zdGF0dXMgKnN0YXR1cykgewotICBlLT5va18gPSBmYWxzZTsKLSAgcmV0dXJu
IGUtPmVycihlLT5lcnJfdWQsIHN0YXR1cyk7Ci19Ci0KLWJvb2wgdXBiX2Vudl9hZGRjbGVhbnVw
KHVwYl9lbnYgKmUsIHVwYl9jbGVhbnVwX2Z1bmMgKmZ1bmMsIHZvaWQgKnVkKSB7Ci0gIGNsZWFu
dXBfZW50ICplbnQgPSB1cGJfZW52X21hbGxvYyhlLCBzaXplb2YoY2xlYW51cF9lbnQpKTsKLSAg
aWYgKCFlbnQpIHJldHVybiBmYWxzZTsKLQotICBlbnQtPmNsZWFudXAgPSBmdW5jOwotICBlbnQt
PnVkID0gdWQ7Ci0gIGVudC0+bmV4dCA9IGUtPmNsZWFudXBfaGVhZDsKLSAgZS0+Y2xlYW51cF9o
ZWFkID0gZW50OwotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkICp1cGJfZW52X21hbGxvYyh1
cGJfZW52ICplLCBzaXplX3Qgc2l6ZSkgewotICBlLT5ieXRlc19hbGxvY2F0ZWQgKz0gc2l6ZTsK
LSAgaWYgKGUtPmFsbG9jID09IHNlZWRlZF9hbGxvYykgewotICAgIC8qIFRoaXMgaXMgZXF1aXZh
bGVudCB0byB0aGUgbmV4dCBicmFuY2gsIGJ1dCBhbGxvd3MgaW5saW5pbmcgZm9yIGEKLSAgICAg
KiBtZWFzdXJhYmxlIHBlcmYgYmVuZWZpdC4gKi8KLSAgICByZXR1cm4gc2VlZGVkX2FsbG9jKGUt
PmFsbG9jX3VkLCBOVUxMLCAwLCBzaXplKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZS0+YWxs
b2MoZS0+YWxsb2NfdWQsIE5VTEwsIDAsIHNpemUpOwotICB9Ci19Ci0KLXZvaWQgKnVwYl9lbnZf
cmVhbGxvYyh1cGJfZW52ICplLCB2b2lkICpwdHIsIHNpemVfdCBvbGRzaXplLCBzaXplX3Qgc2l6
ZSkgewotICBjaGFyICpyZXQ7Ci0gIGFzc2VydChvbGRzaXplIDw9IHNpemUpOwotICByZXQgPSBl
LT5hbGxvYyhlLT5hbGxvY191ZCwgcHRyLCBvbGRzaXplLCBzaXplKTsKLQotI2lmbmRlZiBOREVC
VUcKLSAgLyogT3ZlcndyaXRlIG5vbi1wcmVzZXJ2ZWQgbWVtb3J5IHRvIGVuc3VyZSBjYWxsZXJz
IGFyZSBwYXNzaW5nIHRoZSBvbGRzaXplCi0gICAqIHRoYXQgdGhleSB0cnVseSByZXF1aXJlLiAq
LwotICBtZW1zZXQocmV0ICsgb2xkc2l6ZSwgMHhmZiwgc2l6ZSAtIG9sZHNpemUpOwotI2VuZGlm
Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc2l6ZV90IHVwYl9lbnZfYnl0ZXNhbGxvY2F0ZWQoY29u
c3QgdXBiX2VudiAqZSkgewotICByZXR1cm4gZS0+Ynl0ZXNfYWxsb2NhdGVkOwotfQotCi0KLS8q
IHVwYl9zZWVkZWRhbGxvYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEJlIGNvbnNlcnZhdGl2ZSBhbmQgY2hvb3NlIDE2
IGluIGNhc2UgYW55b25lIGlzIHVzaW5nIFNTRS4gKi8KLXN0YXRpYyBjb25zdCBzaXplX3QgbWF4
YWxpZ24gPSAxNjsKLQotc3RhdGljIHNpemVfdCBhbGlnbl91cChzaXplX3Qgc2l6ZSkgewotICBy
ZXR1cm4gKChzaXplICsgbWF4YWxpZ24gLSAxKSAvIG1heGFsaWduKSAqIG1heGFsaWduOwotfQot
Ci1VUEJfRk9SQ0VJTkxJTkUgc3RhdGljIHZvaWQgKnNlZWRlZF9hbGxvYyh2b2lkICp1ZCwgdm9p
ZCAqcHRyLCBzaXplX3Qgb2xkc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBzaXplKSB7Ci0gIHVwYl9zZWVkZWRhbGxvYyAqYSA9IHVkOwotCi0g
IHNpemUgPSBhbGlnbl91cChzaXplKTsKLQotICBhc3NlcnQoYS0+bWVtX2xpbWl0ID49IGEtPm1l
bV9wdHIpOwotCi0gIGlmIChvbGRzaXplID09IDAgJiYgc2l6ZSA8PSAoc2l6ZV90KShhLT5tZW1f
bGltaXQgLSBhLT5tZW1fcHRyKSkgewotICAgIC8qIEZhc3QgcGF0aDogd2UgY2FuIHNhdGlzZnkg
ZnJvbSB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uLiAqLwotICAgIHZvaWQgKnJldCA9IGEtPm1lbV9w
dHI7Ci0gICAgYS0+bWVtX3B0ciArPSBzaXplOwotICAgIHJldHVybiByZXQ7Ci0gIH0gZWxzZSB7
Ci0gICAgY2hhciAqY2hwdHIgPSBwdHI7Ci0gICAgLyogU2xvdyBwYXRoOiBmYWxsYmFjayB0byBv
dGhlciBhbGxvY2F0b3IuICovCi0gICAgYS0+bmVlZF9jbGVhbnVwID0gdHJ1ZTsKLSAgICAvKiBJ
cyBgcHRyYCBwYXJ0IG9mIHRoZSB1c2VyLXByb3ZpZGVkIGluaXRpYWwgYmxvY2s/IERvbid0IHBh
c3MgaXQgdG8gdGhlCi0gICAgICogZGVmYXVsdCBhbGxvY2F0b3IgaWYgc287IG90aGVyd2lzZSwg
aXQgbWF5IHRyeSB0byByZWFsbG9jKCkgdGhlIGJsb2NrLiAqLwotICAgIGlmIChjaHB0ciA+PSBh
LT5tZW1fYmFzZSAmJiBjaHB0ciA8IGEtPm1lbV9saW1pdCkgewotICAgICAgdm9pZCAqcmV0Owot
ICAgICAgYXNzZXJ0KGNocHRyICsgb2xkc2l6ZSA8PSBhLT5tZW1fbGltaXQpOwotICAgICAgcmV0
ID0gYS0+YWxsb2MoYS0+YWxsb2NfdWQsIE5VTEwsIDAsIHNpemUpOwotICAgICAgaWYgKHJldCkg
bWVtY3B5KHJldCwgcHRyLCBvbGRzaXplKTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHJldHVybiBhLT5hbGxvYyhhLT5hbGxvY191ZCwgcHRyLCBvbGRzaXplLCBzaXpl
KTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCB1cGJfc2VlZGVkYWxsb2NfaW5pdCh1cGJfc2VlZGVk
YWxsb2MgKmEsIHZvaWQgKm1lbSwgc2l6ZV90IGxlbikgewotICBkZWZhdWx0X2FsbG9jX3VkICp1
ZCA9IChkZWZhdWx0X2FsbG9jX3VkKikmYS0+ZGVmYXVsdF9hbGxvY191ZDsKLSAgYS0+bWVtX2Jh
c2UgPSBtZW07Ci0gIGEtPm1lbV9wdHIgPSBtZW07Ci0gIGEtPm1lbV9saW1pdCA9IChjaGFyKilt
ZW0gKyBsZW47Ci0gIGEtPm5lZWRfY2xlYW51cCA9IGZhbHNlOwotICBhLT5yZXR1cm5lZF9hbGxv
Y2Z1bmMgPSBmYWxzZTsKLQotICB1ZC0+aGVhZCA9IE5VTEw7Ci0KLSAgdXBiX3NlZWRlZGFsbG9j
X3NldGZhbGxiYWNrYWxsb2MoYSwgZGVmYXVsdF9hbGxvYywgdWQpOwotfQotCi12b2lkIHVwYl9z
ZWVkZWRhbGxvY191bmluaXQodXBiX3NlZWRlZGFsbG9jICphKSB7Ci0gIGlmIChhLT5hbGxvYyA9
PSBkZWZhdWx0X2FsbG9jICYmIGEtPm5lZWRfY2xlYW51cCkgewotICAgIGRlZmF1bHRfYWxsb2Nf
Y2xlYW51cChhLT5hbGxvY191ZCk7Ci0gIH0KLX0KLQotVVBCX0ZPUkNFSU5MSU5FIHZvaWQgdXBi
X3NlZWRlZGFsbG9jX3NldGZhbGxiYWNrYWxsb2ModXBiX3NlZWRlZGFsbG9jICphLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2FsbG9j
X2Z1bmMgKmFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqdWQpIHsKLSAgYXNzZXJ0KCFhLT5yZXR1cm5lZF9hbGxvY2Z1bmMp
OwotICBhLT5hbGxvYyA9IGFsbG9jOwotICBhLT5hbGxvY191ZCA9IHVkOwotfQotCi11cGJfYWxs
b2NfZnVuYyAqdXBiX3NlZWRlZGFsbG9jX2dldGFsbG9jZnVuYyh1cGJfc2VlZGVkYWxsb2MgKmEp
IHsKLSAgYS0+cmV0dXJuZWRfYWxsb2NmdW5jID0gdHJ1ZTsKLSAgcmV0dXJuIHNlZWRlZF9hbGxv
YzsKLX0KLS8qCi0qKiBUT0RPKGhhYmVybWFuKTogaXQncyB1bmNsZWFyIHdoZXRoZXIgYSBsb3Qg
b2YgdGhlIGNvbnNpc3RlbmN5IGNoZWNrcyBzaG91bGQKLSoqIGFzc2VydCgpIG9yIHJldHVybiBm
YWxzZS4KLSovCi0KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgot
Ci0KLQotLyogRGVmaW5lZCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBoYXZpbmcgYSB1bmlxdWUg
cG9pbnRlciB2YWx1ZSBmb3IKLSAqIFVQQl9OT19DTE9TVVJFLiAqLwotY2hhciBfdXBiX25vY2xv
c3VyZTsKLQotc3RhdGljIHZvaWQgZnJlZWhhbmRsZXJzKHVwYl9yZWZjb3VudGVkICpyKSB7Ci0g
IHVwYl9oYW5kbGVycyAqaCA9ICh1cGJfaGFuZGxlcnMqKXI7Ci0KLSAgdXBiX2ludHRhYmxlX2l0
ZXIgaTsKLSAgdXBiX2ludHRhYmxlX2JlZ2luKCZpLCAmaC0+Y2xlYW51cF8pOwotICBmb3IoOyAh
dXBiX2ludHRhYmxlX2RvbmUoJmkpOyB1cGJfaW50dGFibGVfbmV4dCgmaSkpIHsKLSAgICB2b2lk
ICp2YWwgPSAodm9pZCopdXBiX2ludHRhYmxlX2l0ZXJfa2V5KCZpKTsKLSAgICB1cGJfdmFsdWUg
ZnVuY192YWwgPSB1cGJfaW50dGFibGVfaXRlcl92YWx1ZSgmaSk7Ci0gICAgdXBiX2hhbmRsZXJm
cmVlICpmdW5jID0gdXBiX3ZhbHVlX2dldGZwdHIoZnVuY192YWwpOwotICAgIGZ1bmModmFsKTsK
LSAgfQotCi0gIHVwYl9pbnR0YWJsZV91bmluaXQoJmgtPmNsZWFudXBfKTsKLSAgdXBiX21zZ2Rl
Zl91bnJlZihoLT5tc2csIGgpOwotICBmcmVlKGgtPnN1Yik7Ci0gIGZyZWUoaCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHZpc2l0aGFuZGxlcnMoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIHVwYl9yZWZj
b3VudGVkX3Zpc2l0ICp2aXNpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xv
c3VyZSkgewotICBjb25zdCB1cGJfaGFuZGxlcnMgKmggPSAoY29uc3QgdXBiX2hhbmRsZXJzKily
OwotICB1cGJfbXNnX2ZpZWxkX2l0ZXIgaTsKLSAgZm9yKHVwYl9tc2dfZmllbGRfYmVnaW4oJmks
IGgtPm1zZyk7Ci0gICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVwYl9tc2df
ZmllbGRfbmV4dCgmaSkpIHsKLSAgICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmll
bGQoJmkpOwotICAgIGNvbnN0IHVwYl9oYW5kbGVycyAqc3ViOwotICAgIGlmICghdXBiX2ZpZWxk
ZGVmX2lzc3VibXNnKGYpKSBjb250aW51ZTsKLSAgICBzdWIgPSB1cGJfaGFuZGxlcnNfZ2V0c3Vi
aGFuZGxlcnMoaCwgZik7Ci0gICAgaWYgKHN1YikgdmlzaXQociwgdXBiX2hhbmRsZXJzX3VwY2Fz
dChzdWIpLCBjbG9zdXJlKTsKLSAgfQotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVwYl9yZWZj
b3VudGVkX3Z0YmwgdnRibCA9IHt2aXNpdGhhbmRsZXJzLCBmcmVlaGFuZGxlcnN9OwotCi10eXBl
ZGVmIHN0cnVjdCB7Ci0gIHVwYl9pbnR0YWJsZSB0YWI7ICAvKiBtYXBzIHVwYl9tc2dkZWYqIC0+
IHVwYl9oYW5kbGVycyouICovCi0gIHVwYl9oYW5kbGVyc19jYWxsYmFjayAqY2FsbGJhY2s7Ci0g
IGNvbnN0IHZvaWQgKmNsb3N1cmU7Ci19IGRmc19zdGF0ZTsKLQotLyogVE9ETyhoYWJlcm1hbik6
IGRpc2NhcmQgdXBiX2hhbmRsZXJzKiBvYmplY3RzIHRoYXQgZG8gbm90IGFjdHVhbGx5IGhhdmUg
YW55Ci0gKiBoYW5kbGVycyBzZXQgYW5kIGNhbm5vdCByZWFjaCBhbnkgdXBiX2hhbmRsZXJzKiBv
YmplY3QgdGhhdCBkb2VzLiAgVGhpcyBpcwotICogc2xpZ2h0bHkgdHJpY2t5IHRvIGRvIGNvcnJl
Y3RseS4gKi8KLXN0YXRpYyB1cGJfaGFuZGxlcnMgKm5ld2Zvcm1zZyhjb25zdCB1cGJfbXNnZGVm
ICptLCBjb25zdCB2b2lkICpvd25lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZnNfc3RhdGUgKnMpIHsKLSAgdXBiX21zZ19maWVsZF9pdGVyIGk7Ci0gIHVwYl9oYW5kbGVycyAq
aCA9IHVwYl9oYW5kbGVyc19uZXcobSwgb3duZXIpOwotICBpZiAoIWgpIHJldHVybiBOVUxMOwot
ICBpZiAoIXVwYl9pbnR0YWJsZV9pbnNlcnRwdHIoJnMtPnRhYiwgbSwgdXBiX3ZhbHVlX3B0ciho
KSkpIGdvdG8gb29tOwotCi0gIHMtPmNhbGxiYWNrKHMtPmNsb3N1cmUsIGgpOwotCi0gIC8qIEZv
ciBlYWNoIHN1Ym1lc3NhZ2UgZmllbGQsIGdldCBvciBjcmVhdGUgYSBoYW5kbGVycyBvYmplY3Qg
YW5kIHNldCBpdCBhcwotICAgKiB0aGUgc3ViaGFuZGxlcnMuICovCi0gIGZvcih1cGJfbXNnX2Zp
ZWxkX2JlZ2luKCZpLCBtKTsKLSAgICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJmkpOwotICAgICAg
dXBiX21zZ19maWVsZF9uZXh0KCZpKSkgewotICAgIHVwYl9maWVsZGRlZiAqZiA9IHVwYl9tc2df
aXRlcl9maWVsZCgmaSk7Ci0gICAgY29uc3QgdXBiX21zZ2RlZiAqc3ViZGVmOwotICAgIHVwYl92
YWx1ZSBzdWJtX2VudDsKLQotICAgIGlmICghdXBiX2ZpZWxkZGVmX2lzc3VibXNnKGYpKSBjb250
aW51ZTsKLQotICAgIHN1YmRlZiA9IHVwYl9kb3duY2FzdF9tc2dkZWYodXBiX2ZpZWxkZGVmX3N1
YmRlZihmKSk7Ci0gICAgaWYgKHVwYl9pbnR0YWJsZV9sb29rdXBwdHIoJnMtPnRhYiwgc3ViZGVm
LCAmc3VibV9lbnQpKSB7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0c3ViaGFuZGxlcnMoaCwgZiwg
dXBiX3ZhbHVlX2dldHB0cihzdWJtX2VudCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICB1cGJfaGFu
ZGxlcnMgKnN1Yl9taCA9IG5ld2Zvcm1zZyhzdWJkZWYsICZzdWJfbWgsIHMpOwotICAgICAgaWYg
KCFzdWJfbWgpIGdvdG8gb29tOwotICAgICAgdXBiX2hhbmRsZXJzX3NldHN1YmhhbmRsZXJzKGgs
IGYsIHN1Yl9taCk7Ci0gICAgICB1cGJfaGFuZGxlcnNfdW5yZWYoc3ViX21oLCAmc3ViX21oKTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIGg7Ci0KLW9vbToKLSAgdXBiX2hhbmRsZXJzX3VucmVmKGgs
IG93bmVyKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIEdpdmVuIGEgc2VsZWN0b3IgZm9yIGEg
U1RBUlRTVUJNU0cgaGFuZGxlciwgcmVzb2x2ZXMgdG8gYSBwb2ludGVyIHRvIHRoZQotICogc3Vi
aGFuZGxlcnMgZm9yIHRoaXMgc3VibWVzc2FnZSBmaWVsZC4gKi8KLSNkZWZpbmUgU1VCSChoLCBz
ZWxlY3RvcikgKGgtPnN1YltzZWxlY3Rvcl0pCi0KLS8qIFRoZSBzZWxlY3RvciBmb3IgYSBzdWJt
ZXNzYWdlIGZpZWxkIGlzIHRoZSBmaWVsZCBpbmRleC4gKi8KLSNkZWZpbmUgU1VCSF9GKGgsIGYp
IFNVQkgoaCwgZi0+aW5kZXhfKQotCi1zdGF0aWMgaW50MzJfdCB0cnlnZXRzZWwodXBiX2hhbmRs
ZXJzICpoLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
dXBiX2hhbmRsZXJ0eXBlX3QgdHlwZSkgewotICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0gIGFzc2Vy
dCghdXBiX2hhbmRsZXJzX2lzZnJvemVuKGgpKTsKLSAgaWYgKHVwYl9oYW5kbGVyc19tc2dkZWYo
aCkgIT0gdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlKGYpKSB7Ci0gICAgdXBiX3N0YXR1c19z
ZXRlcnJmKAotICAgICAgICAmaC0+c3RhdHVzXywgInR5cGUgbWlzbWF0Y2g6IGZpZWxkICVzIGRv
ZXMgbm90IGJlbG9uZyB0byBtZXNzYWdlICVzIiwKLSAgICAgICAgdXBiX2ZpZWxkZGVmX25hbWUo
ZiksIHVwYl9tc2dkZWZfZnVsbG5hbWUodXBiX2hhbmRsZXJzX21zZ2RlZihoKSkpOwotICAgIHJl
dHVybiAtMTsKLSAgfQotICBpZiAoIXVwYl9oYW5kbGVyc19nZXRzZWxlY3RvcihmLCB0eXBlLCAm
c2VsKSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZigKLSAgICAgICAgJmgtPnN0YXR1c18sCi0g
ICAgICAgICJ0eXBlIG1pc21hdGNoOiBjYW5ub3QgcmVnaXN0ZXIgaGFuZGxlciB0eXBlICVkIGZv
ciBmaWVsZCAlcyIsCi0gICAgICAgIHR5cGUsIHVwYl9maWVsZGRlZl9uYW1lKGYpKTsKLSAgICBy
ZXR1cm4gLTE7Ci0gIH0KLSAgcmV0dXJuIHNlbDsKLX0KLQotc3RhdGljIHVwYl9zZWxlY3Rvcl90
IGhhbmRsZXJzX2dldHNlbCh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJ0eXBlX3QgdHlwZSkgewot
ICBpbnQzMl90IHNlbCA9IHRyeWdldHNlbChoLCBmLCB0eXBlKTsKLSAgYXNzZXJ0KHNlbCA+PSAw
KTsKLSAgcmV0dXJuIHNlbDsKLX0KLQotc3RhdGljIGNvbnN0IHZvaWQgKipyZXR1cm50eXBlKHVw
Yl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVwYl9oYW5kbGVydHlwZV90IHR5cGUpIHsKLSAgcmV0dXJuICZoLT50YWJs
ZVtoYW5kbGVyc19nZXRzZWwoaCwgZiwgdHlwZSldLmF0dHIucmV0dXJuX2Nsb3N1cmVfdHlwZV87
Ci19Ci0KLXN0YXRpYyBib29sIGRvc2V0KHVwYl9oYW5kbGVycyAqaCwgaW50MzJfdCBzZWwsIGNv
bnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVydHlwZV90
IHR5cGUsIHVwYl9mdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJhdHRy
ICphdHRyKSB7Ci0gIHVwYl9oYW5kbGVyYXR0ciBzZXRfYXR0ciA9IFVQQl9IQU5ETEVSQVRUUl9J
TklUSUFMSVpFUjsKLSAgY29uc3Qgdm9pZCAqY2xvc3VyZV90eXBlOwotICBjb25zdCB2b2lkICoq
Y29udGV4dF9jbG9zdXJlX3R5cGU7Ci0KLSAgYXNzZXJ0KCF1cGJfaGFuZGxlcnNfaXNmcm96ZW4o
aCkpOwotCi0gIGlmIChzZWwgPCAwKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2coJmgtPnN0
YXR1c18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgImluY29ycmVjdCBoYW5kbGVyIHR5cGUg
Zm9yIHRoaXMgZmllbGQuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKGgtPnRh
YmxlW3NlbF0uZnVuYykgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKCZoLT5zdGF0dXNfLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY2hhbmdlIGhhbmRsZXIgb25jZSBpdCBo
YXMgYmVlbiBzZXQuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKGF0dHIpIHsK
LSAgICBzZXRfYXR0ciA9ICphdHRyOwotICB9Ci0KLSAgLyogQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4g
Y2xvc3VyZSB0eXBlIG1hdGNoZXMgdGhlIGNsb3N1cmUgdHlwZSB0aGF0IGhhcyBiZWVuCi0gICAq
IGVzdGFibGlzaGVkIGZvciB0aGlzIGNvbnRleHQgKGlmIGFueSkuICovCi0gIGNsb3N1cmVfdHlw
ZSA9IHVwYl9oYW5kbGVyYXR0cl9jbG9zdXJldHlwZSgmc2V0X2F0dHIpOwotCi0gIGlmICh0eXBl
ID09IFVQQl9IQU5ETEVSX1NUUklORykgewotICAgIGNvbnRleHRfY2xvc3VyZV90eXBlID0gcmV0
dXJudHlwZShoLCBmLCBVUEJfSEFORExFUl9TVEFSVFNUUik7Ci0gIH0gZWxzZSBpZiAoZiAmJiB1
cGJfZmllbGRkZWZfaXNzZXEoZikgJiYKLSAgICAgICAgICAgICB0eXBlICE9IFVQQl9IQU5ETEVS
X1NUQVJUU0VRICYmCi0gICAgICAgICAgICAgdHlwZSAhPSBVUEJfSEFORExFUl9FTkRTRVEpIHsK
LSAgICBjb250ZXh0X2Nsb3N1cmVfdHlwZSA9IHJldHVybnR5cGUoaCwgZiwgVVBCX0hBTkRMRVJf
U1RBUlRTRVEpOwotICB9IGVsc2UgewotICAgIGNvbnRleHRfY2xvc3VyZV90eXBlID0gJmgtPnRv
cF9jbG9zdXJlX3R5cGU7Ci0gIH0KLQotICBpZiAoY2xvc3VyZV90eXBlICYmICpjb250ZXh0X2Ns
b3N1cmVfdHlwZSAmJgotICAgICAgY2xvc3VyZV90eXBlICE9ICpjb250ZXh0X2Nsb3N1cmVfdHlw
ZSkgewotICAgIC8qIFRPRE8oaGFiZXJtYW4pOiBiZXR0ZXIgbWVzc2FnZSBmb3IgZGVidWdnaW5n
LiAqLwotICAgIGlmIChmKSB7Ci0gICAgICB1cGJfc3RhdHVzX3NldGVycmYoJmgtPnN0YXR1c18s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgImNsb3N1cmUgdHlwZSBkb2VzIG5vdCBtYXRjaCBm
b3IgZmllbGQgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9maWVsZGRlZl9uYW1l
KGYpKTsKLSAgICB9IGVsc2UgewotICAgICAgdXBiX3N0YXR1c19zZXRlcnJtc2coCi0gICAgICAg
ICAgJmgtPnN0YXR1c18sICJjbG9zdXJlIHR5cGUgZG9lcyBub3QgbWF0Y2ggZm9yIG1lc3NhZ2Ut
bGV2ZWwgaGFuZGxlciIpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAo
Y2xvc3VyZV90eXBlKQotICAgICpjb250ZXh0X2Nsb3N1cmVfdHlwZSA9IGNsb3N1cmVfdHlwZTsK
LQotICAvKiBJZiB0aGlzIGlzIGEgU1RBUlRTRVEgb3IgU1RBUlRTVFIgaGFuZGxlciwgY2hlY2sg
dGhhdCB0aGUgcmV0dXJuZWQgcG9pbnRlcgotICAgKiBtYXRjaGVzIGFueSBwcmUtZXhpc3Rpbmcg
ZXhwZWN0YXRpb25zIGFib3V0IHdoYXQgdHlwZSBpcyBleHBlY3RlZC4gKi8KLSAgaWYgKHR5cGUg
PT0gVVBCX0hBTkRMRVJfU1RBUlRTRVEgfHwgdHlwZSA9PSBVUEJfSEFORExFUl9TVEFSVFNUUikg
ewotICAgIGNvbnN0IHZvaWQgKnJldHVybl90eXBlID0gdXBiX2hhbmRsZXJhdHRyX3JldHVybmNs
b3N1cmV0eXBlKCZzZXRfYXR0cik7Ci0gICAgY29uc3Qgdm9pZCAqdGFibGVfcmV0dXJuX3R5cGUg
PQotICAgICAgICB1cGJfaGFuZGxlcmF0dHJfcmV0dXJuY2xvc3VyZXR5cGUoJmgtPnRhYmxlW3Nl
bF0uYXR0cik7Ci0gICAgaWYgKHJldHVybl90eXBlICYmIHRhYmxlX3JldHVybl90eXBlICYmIHJl
dHVybl90eXBlICE9IHRhYmxlX3JldHVybl90eXBlKSB7Ci0gICAgICB1cGJfc3RhdHVzX3NldGVy
cm1zZygmaC0+c3RhdHVzXywgImNsb3N1cmUgcmV0dXJuIHR5cGUgZG9lcyBub3QgbWF0Y2giKTsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodGFibGVfcmV0dXJuX3R5cGUg
JiYgIXJldHVybl90eXBlKQotICAgICAgdXBiX2hhbmRsZXJhdHRyX3NldHJldHVybmNsb3N1cmV0
eXBlKCZzZXRfYXR0ciwgdGFibGVfcmV0dXJuX3R5cGUpOwotICB9Ci0KLSAgaC0+dGFibGVbc2Vs
XS5mdW5jID0gKHVwYl9mdW5jKilmdW5jOwotICBoLT50YWJsZVtzZWxdLmF0dHIgPSBzZXRfYXR0
cjsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qIFJldHVybnMgdGhlIGVmZmVjdGl2ZSBjbG9zdXJl
IHR5cGUgZm9yIHRoaXMgaGFuZGxlciAod2hpY2ggd2lsbCBwcm9wYWdhdGUKLSAqIGZyb20gb3V0
ZXIgZnJhbWVzIGlmIHRoaXMgZnJhbWUgaGFzIG5vIFNUQVJUKiBoYW5kbGVyKS4gIE5vdCBpbXBs
ZW1lbnRlZCBmb3IKLSAqIFVQQl9IQU5ETEVSX1NUUklORyBhdCB0aGUgbW9tZW50IHNpbmNlIHRo
aXMgaXMgbm90IG5lZWRlZC4gIFJldHVybnMgTlVMTCBpcwotICogdGhlIGVmZmVjdGl2ZSBjbG9z
dXJlIHR5cGUgaXMgdW5zcGVjaWZpZWQgKGVpdGhlciBubyBoYW5kbGVyIHdhcyByZWdpc3RlcmVk
Ci0gKiB0byBzcGVjaWZ5IGl0IG9yIHRoZSBoYW5kbGVyIHRoYXQgd2FzIHJlZ2lzdGVyZWQgZGlk
IG5vdCBzcGVjaWZ5IHRoZSBjbG9zdXJlCi0gKiB0eXBlKS4gKi8KLWNvbnN0IHZvaWQgKmVmZmVj
dGl2ZV9jbG9zdXJlX3R5cGUodXBiX2hhbmRsZXJzICpoLCBjb25zdCB1cGJfZmllbGRkZWYgKmYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVydHlwZV90IHR5
cGUpIHsKLSAgY29uc3Qgdm9pZCAqcmV0OwotICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0KLSAgYXNz
ZXJ0KHR5cGUgIT0gVVBCX0hBTkRMRVJfU1RSSU5HKTsKLSAgcmV0ID0gaC0+dG9wX2Nsb3N1cmVf
dHlwZTsKLQotICBpZiAodXBiX2ZpZWxkZGVmX2lzc2VxKGYpICYmCi0gICAgICB0eXBlICE9IFVQ
Ql9IQU5ETEVSX1NUQVJUU0VRICYmCi0gICAgICB0eXBlICE9IFVQQl9IQU5ETEVSX0VORFNFUSAm
JgotICAgICAgaC0+dGFibGVbc2VsID0gaGFuZGxlcnNfZ2V0c2VsKGgsIGYsIFVQQl9IQU5ETEVS
X1NUQVJUU0VRKV0uZnVuYykgewotICAgIHJldCA9IHVwYl9oYW5kbGVyYXR0cl9yZXR1cm5jbG9z
dXJldHlwZSgmaC0+dGFibGVbc2VsXS5hdHRyKTsKLSAgfQotCi0gIGlmICh0eXBlID09IFVQQl9I
QU5ETEVSX1NUUklORyAmJgotICAgICAgaC0+dGFibGVbc2VsID0gaGFuZGxlcnNfZ2V0c2VsKGgs
IGYsIFVQQl9IQU5ETEVSX1NUQVJUU1RSKV0uZnVuYykgewotICAgIHJldCA9IHVwYl9oYW5kbGVy
YXR0cl9yZXR1cm5jbG9zdXJldHlwZSgmaC0+dGFibGVbc2VsXS5hdHRyKTsKLSAgfQotCi0gIC8q
IFRoZSBlZmZlY3RpdmUgdHlwZSBvZiB0aGUgc3VibWVzc2FnZTsgbm90IHVzZWQgeWV0LgotICAg
KiBpZiAodHlwZSA9PSBTVUJNRVNTQUdFICYmCi0gICAqICAgICBoLT50YWJsZVtzZWwgPSBoYW5k
bGVyc19nZXRzZWwoaCwgZiwgVVBCX0hBTkRMRVJfU1RBUlRTVUJNU0cpXS5mdW5jKSB7Ci0gICAq
ICAgcmV0ID0gdXBiX2hhbmRsZXJhdHRyX3JldHVybmNsb3N1cmV0eXBlKCZoLT50YWJsZVtzZWxd
LmF0dHIpOwotICAgKiB9ICovCi0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogQ2hlY2tzIHdoZXRo
ZXIgdGhlIFNUQVJUKiBoYW5kbGVyIHNwZWNpZmllZCBieSBmICYgdHlwZSBpcyBtaXNzaW5nIGV2
ZW4KLSAqIHRob3VnaCBpdCBpcyByZXF1aXJlZCB0byBjb252ZXJ0IHRoZSBlc3RhYmxpc2hlZCB0
eXBlIG9mIGFuIG91dGVyIGZyYW1lCi0gKiAoImNsb3N1cmVfdHlwZSIpIGludG8gdGhlIGVzdGFi
bGlzaGVkIHR5cGUgb2YgYW4gaW5uZXIgZnJhbWUgKHJlcHJlc2VudGVkIGluCi0gKiB0aGUgcmV0
dXJuIGNsb3N1cmUgdHlwZSBvZiB0aGlzIGhhbmRsZXIncyBhdHRyLiAqLwotYm9vbCBjaGVja3N0
YXJ0KHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLCB1cGJfaGFuZGxlcnR5
cGVfdCB0eXBlLAotICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnN0YXR1cykgewotICBjb25z
dCB2b2lkICpjbG9zdXJlX3R5cGU7Ci0gIGNvbnN0IHVwYl9oYW5kbGVyYXR0ciAqYXR0cjsKLSAg
Y29uc3Qgdm9pZCAqcmV0dXJuX2Nsb3N1cmVfdHlwZTsKLQotICB1cGJfc2VsZWN0b3JfdCBzZWwg
PSBoYW5kbGVyc19nZXRzZWwoaCwgZiwgdHlwZSk7Ci0gIGlmIChoLT50YWJsZVtzZWxdLmZ1bmMp
IHJldHVybiB0cnVlOwotICBjbG9zdXJlX3R5cGUgPSBlZmZlY3RpdmVfY2xvc3VyZV90eXBlKGgs
IGYsIHR5cGUpOwotICBhdHRyID0gJmgtPnRhYmxlW3NlbF0uYXR0cjsKLSAgcmV0dXJuX2Nsb3N1
cmVfdHlwZSA9IHVwYl9oYW5kbGVyYXR0cl9yZXR1cm5jbG9zdXJldHlwZShhdHRyKTsKLSAgaWYg
KGNsb3N1cmVfdHlwZSAmJiByZXR1cm5fY2xvc3VyZV90eXBlICYmCi0gICAgICBjbG9zdXJlX3R5
cGUgIT0gcmV0dXJuX2Nsb3N1cmVfdHlwZSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzdGF0
dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBzdGFydCBoYW5kbGVyIHRvIHJl
dHVybiBzdWIgdHlwZSBmb3IgZmllbGQgJWYiLAotICAgICAgICAgICAgICAgICAgICAgICB1cGJf
ZmllbGRkZWZfbmFtZShmKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVl
OwotfQotCi0vKiBQdWJsaWMgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi11cGJfaGFuZGxlcnMgKnVwYl9oYW5k
bGVyc19uZXcoY29uc3QgdXBiX21zZ2RlZiAqbWQsIGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIGlu
dCBleHRyYTsKLSAgdXBiX2hhbmRsZXJzICpoOwotCi0gIGFzc2VydCh1cGJfbXNnZGVmX2lzZnJv
emVuKG1kKSk7Ci0KLSAgZXh0cmEgPSBzaXplb2YodXBiX2hhbmRsZXJzX3RhYmVudCkgKiAobWQt
PnNlbGVjdG9yX2NvdW50IC0gMSk7Ci0gIGggPSBjYWxsb2Moc2l6ZW9mKCpoKSArIGV4dHJhLCAx
KTsKLSAgaWYgKCFoKSByZXR1cm4gTlVMTDsKLQotICBoLT5tc2cgPSBtZDsKLSAgdXBiX21zZ2Rl
Zl9yZWYoaC0+bXNnLCBoKTsKLSAgdXBiX3N0YXR1c19jbGVhcigmaC0+c3RhdHVzXyk7Ci0gIGgt
PnN1YiA9IGNhbGxvYyhtZC0+c3VibXNnX2ZpZWxkX2NvdW50LCBzaXplb2YoKmgtPnN1YikpOwot
ICBpZiAoIWgtPnN1YikgZ290byBvb207Ci0gIGlmICghdXBiX3JlZmNvdW50ZWRfaW5pdCh1cGJf
aGFuZGxlcnNfdXBjYXN0X211dGFibGUoaCksICZ2dGJsLCBvd25lcikpCi0gICAgZ290byBvb207
Ci0gIGlmICghdXBiX2ludHRhYmxlX2luaXQoJmgtPmNsZWFudXBfLCBVUEJfQ1RZUEVfRlBUUikp
IGdvdG8gb29tOwotCi0gIC8qIGNhbGxvYygpIGFib3ZlIGluaXRpYWxpemVkIGFsbCBoYW5kbGVy
cyB0byBOVUxMLiAqLwotICByZXR1cm4gaDsKLQotb29tOgotICBmcmVlaGFuZGxlcnModXBiX2hh
bmRsZXJzX3VwY2FzdF9tdXRhYmxlKGgpKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWNvbnN0IHVw
Yl9oYW5kbGVycyAqdXBiX2hhbmRsZXJzX25ld2Zyb3plbihjb25zdCB1cGJfbXNnZGVmICptLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm93
bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5k
bGVyc19jYWxsYmFjayAqY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqY2xvc3VyZSkgewotICBkZnNfc3RhdGUgc3RhdGU7Ci0g
IHVwYl9oYW5kbGVycyAqcmV0OwotICBib29sIG9rOwotICB1cGJfcmVmY291bnRlZCAqcjsKLQot
ICBzdGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrOwotICBzdGF0ZS5jbG9zdXJlID0gY2xvc3VyZTsK
LSAgaWYgKCF1cGJfaW50dGFibGVfaW5pdCgmc3RhdGUudGFiLCBVUEJfQ1RZUEVfUFRSKSkgcmV0
dXJuIE5VTEw7Ci0KLSAgcmV0ID0gbmV3Zm9ybXNnKG0sIG93bmVyLCAmc3RhdGUpOwotCi0gIHVw
Yl9pbnR0YWJsZV91bmluaXQoJnN0YXRlLnRhYik7Ci0gIGlmICghcmV0KSByZXR1cm4gTlVMTDsK
LQotICByID0gdXBiX2hhbmRsZXJzX3VwY2FzdF9tdXRhYmxlKHJldCk7Ci0gIG9rID0gdXBiX3Jl
ZmNvdW50ZWRfZnJlZXplKCZyLCAxLCBOVUxMLCBVUEJfTUFYX0hBTkRMRVJfREVQVEgpOwotICBV
UEJfQVNTRVJUX1ZBUihvaywgb2spOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWNvbnN0IHVwYl9z
dGF0dXMgKnVwYl9oYW5kbGVyc19zdGF0dXModXBiX2hhbmRsZXJzICpoKSB7Ci0gIGFzc2VydCgh
dXBiX2hhbmRsZXJzX2lzZnJvemVuKGgpKTsKLSAgcmV0dXJuICZoLT5zdGF0dXNfOwotfQotCi12
b2lkIHVwYl9oYW5kbGVyc19jbGVhcmVycih1cGJfaGFuZGxlcnMgKmgpIHsKLSAgYXNzZXJ0KCF1
cGJfaGFuZGxlcnNfaXNmcm96ZW4oaCkpOwotICB1cGJfc3RhdHVzX2NsZWFyKCZoLT5zdGF0dXNf
KTsKLX0KLQotI2RlZmluZSBTRVRURVIobmFtZSwgaGFuZGxlcmN0eXBlLCBoYW5kbGVydHlwZSkg
XAotICBib29sIHVwYl9oYW5kbGVyc19zZXQgIyMgbmFtZSh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0
IHVwYl9maWVsZGRlZiAqZiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVyY3R5cGUgZnVuYywgdXBiX2hhbmRsZXJhdHRyICphdHRyKSB7IFwKLSAgICBpbnQzMl90IHNl
bCA9IHRyeWdldHNlbChoLCBmLCBoYW5kbGVydHlwZSk7IFwKLSAgICByZXR1cm4gZG9zZXQoaCwg
c2VsLCBmLCBoYW5kbGVydHlwZSwgKHVwYl9mdW5jKilmdW5jLCBhdHRyKTsgXAotICB9Ci0KLVNF
VFRFUihpbnQzMiwgICAgICAgdXBiX2ludDMyX2hhbmRsZXJmdW5jKiwgICAgICAgVVBCX0hBTkRM
RVJfSU5UMzIpCi1TRVRURVIoaW50NjQsICAgICAgIHVwYl9pbnQ2NF9oYW5kbGVyZnVuYyosICAg
ICAgIFVQQl9IQU5ETEVSX0lOVDY0KQotU0VUVEVSKHVpbnQzMiwgICAgICB1cGJfdWludDMyX2hh
bmRsZXJmdW5jKiwgICAgICBVUEJfSEFORExFUl9VSU5UMzIpCi1TRVRURVIodWludDY0LCAgICAg
IHVwYl91aW50NjRfaGFuZGxlcmZ1bmMqLCAgICAgIFVQQl9IQU5ETEVSX1VJTlQ2NCkKLVNFVFRF
UihmbG9hdCwgICAgICAgdXBiX2Zsb2F0X2hhbmRsZXJmdW5jKiwgICAgICAgVVBCX0hBTkRMRVJf
RkxPQVQpCi1TRVRURVIoZG91YmxlLCAgICAgIHVwYl9kb3VibGVfaGFuZGxlcmZ1bmMqLCAgICAg
IFVQQl9IQU5ETEVSX0RPVUJMRSkKLVNFVFRFUihib29sLCAgICAgICAgdXBiX2Jvb2xfaGFuZGxl
cmZ1bmMqLCAgICAgICAgVVBCX0hBTkRMRVJfQk9PTCkKLVNFVFRFUihzdGFydHN0ciwgICAgdXBi
X3N0YXJ0c3RyX2hhbmRsZXJmdW5jKiwgICAgVVBCX0hBTkRMRVJfU1RBUlRTVFIpCi1TRVRURVIo
c3RyaW5nLCAgICAgIHVwYl9zdHJpbmdfaGFuZGxlcmZ1bmMqLCAgICAgIFVQQl9IQU5ETEVSX1NU
UklORykKLVNFVFRFUihlbmRzdHIsICAgICAgdXBiX2VuZGZpZWxkX2hhbmRsZXJmdW5jKiwgICAg
VVBCX0hBTkRMRVJfRU5EU1RSKQotU0VUVEVSKHN0YXJ0c2VxLCAgICB1cGJfc3RhcnRmaWVsZF9o
YW5kbGVyZnVuYyosICBVUEJfSEFORExFUl9TVEFSVFNFUSkKLVNFVFRFUihzdGFydHN1Ym1zZywg
dXBiX3N0YXJ0ZmllbGRfaGFuZGxlcmZ1bmMqLCAgVVBCX0hBTkRMRVJfU1RBUlRTVUJNU0cpCi1T
RVRURVIoZW5kc3VibXNnLCAgIHVwYl9lbmRmaWVsZF9oYW5kbGVyZnVuYyosICAgIFVQQl9IQU5E
TEVSX0VORFNVQk1TRykKLVNFVFRFUihlbmRzZXEsICAgICAgdXBiX2VuZGZpZWxkX2hhbmRsZXJm
dW5jKiwgICAgVVBCX0hBTkRMRVJfRU5EU0VRKQotCi0jdW5kZWYgU0VUVEVSCi0KLWJvb2wgdXBi
X2hhbmRsZXJzX3NldHN0YXJ0bXNnKHVwYl9oYW5kbGVycyAqaCwgdXBiX3N0YXJ0bXNnX2hhbmRs
ZXJmdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJh
dHRyICphdHRyKSB7Ci0gIHJldHVybiBkb3NldChoLCBVUEJfU1RBUlRNU0dfU0VMRUNUT1IsIE5V
TEwsIFVQQl9IQU5ETEVSX0lOVDMyLAotICAgICAgICAgICAgICAgKHVwYl9mdW5jICopZnVuYywg
YXR0cik7Ci19Ci0KLWJvb2wgdXBiX2hhbmRsZXJzX3NldGVuZG1zZyh1cGJfaGFuZGxlcnMgKmgs
IHVwYl9lbmRtc2dfaGFuZGxlcmZ1bmMgKmZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXBiX2hhbmRsZXJhdHRyICphdHRyKSB7Ci0gIGFzc2VydCghdXBiX2hhbmRsZXJzX2lzZnJv
emVuKGgpKTsKLSAgcmV0dXJuIGRvc2V0KGgsIFVQQl9FTkRNU0dfU0VMRUNUT1IsIE5VTEwsIFVQ
Ql9IQU5ETEVSX0lOVDMyLAotICAgICAgICAgICAgICAgKHVwYl9mdW5jICopZnVuYywgYXR0cik7
Ci19Ci0KLWJvb2wgdXBiX2hhbmRsZXJzX3NldHN1YmhhbmRsZXJzKHVwYl9oYW5kbGVycyAqaCwg
Y29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdXBiX2hhbmRsZXJzICpzdWIpIHsKLSAgYXNzZXJ0KHN1Yik7Ci0gIGFzc2VydCghdXBi
X2hhbmRsZXJzX2lzZnJvemVuKGgpKTsKLSAgYXNzZXJ0KHVwYl9maWVsZGRlZl9pc3N1Ym1zZyhm
KSk7Ci0gIGlmIChTVUJIX0YoaCwgZikpIHJldHVybiBmYWxzZTsgIC8qIENhbid0IHJlc2V0LiAq
LwotICBpZiAodXBiX21zZ2RlZl91cGNhc3QodXBiX2hhbmRsZXJzX21zZ2RlZihzdWIpKSAhPSB1
cGJfZmllbGRkZWZfc3ViZGVmKGYpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIFNVQkhf
RihoLCBmKSA9IHN1YjsKLSAgdXBiX3JlZjIoc3ViLCBoKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LWNvbnN0IHVwYl9oYW5kbGVycyAqdXBiX2hhbmRsZXJzX2dldHN1YmhhbmRsZXJzKGNvbnN0IHVw
Yl9oYW5kbGVycyAqaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICBhc3NlcnQodXBiX2ZpZWxkZGVmX2lz
c3VibXNnKGYpKTsKLSAgcmV0dXJuIFNVQkhfRihoLCBmKTsKLX0KLQotYm9vbCB1cGJfaGFuZGxl
cnNfZ2V0YXR0cihjb25zdCB1cGJfaGFuZGxlcnMgKmgsIHVwYl9zZWxlY3Rvcl90IHNlbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJhdHRyICphdHRyKSB7Ci0gIGlmICgh
dXBiX2hhbmRsZXJzX2dldGhhbmRsZXIoaCwgc2VsKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0gICph
dHRyID0gaC0+dGFibGVbc2VsXS5hdHRyOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3QgdXBi
X2hhbmRsZXJzICp1cGJfaGFuZGxlcnNfZ2V0c3ViaGFuZGxlcnNfc2VsKGNvbnN0IHVwYl9oYW5k
bGVycyAqaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cGJfc2VsZWN0b3JfdCBzZWwpIHsKLSAgLyogU1RBUlRTVUJNU0cgc2VsZWN0b3IgaW4g
c2VsIGlzIHRoZSBmaWVsZCdzIHNlbGVjdG9yIGJhc2UuICovCi0gIHJldHVybiBTVUJIKGgsIHNl
bCAtIFVQQl9TVEFUSUNfU0VMRUNUT1JfQ09VTlQpOwotfQotCi1jb25zdCB1cGJfbXNnZGVmICp1
cGJfaGFuZGxlcnNfbXNnZGVmKGNvbnN0IHVwYl9oYW5kbGVycyAqaCkgeyByZXR1cm4gaC0+bXNn
OyB9Ci0KLWJvb2wgdXBiX2hhbmRsZXJzX2FkZGNsZWFudXAodXBiX2hhbmRsZXJzICpoLCB2b2lk
ICpwLCB1cGJfaGFuZGxlcmZyZWUgKmZ1bmMpIHsKLSAgYm9vbCBvazsKLSAgaWYgKHVwYl9pbnR0
YWJsZV9sb29rdXBwdHIoJmgtPmNsZWFudXBfLCBwLCBOVUxMKSkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICBvayA9IHVwYl9pbnR0YWJsZV9pbnNlcnRwdHIoJmgtPmNsZWFudXBfLCBwLCB1
cGJfdmFsdWVfZnB0cihmdW5jKSk7Ci0gIFVQQl9BU1NFUlRfVkFSKG9rLCBvayk7Ci0gIHJldHVy
biB0cnVlOwotfQotCi0KLS8qICJTdGF0aWMiIG1ldGhvZHMgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWJvb2wgdXBiX2hhbmRs
ZXJzX2ZyZWV6ZSh1cGJfaGFuZGxlcnMgKmNvbnN0KmhhbmRsZXJzLCBpbnQgbiwgdXBiX3N0YXR1
cyAqcykgewotICAvKiBUT0RPOiB2ZXJpZnkgd2UgaGF2ZSBhIHRyYW5zaXRpdmUgY2xvc3VyZS4g
Ki8KLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICB1cGJfbXNnX2Zp
ZWxkX2l0ZXIgajsKLSAgICB1cGJfaGFuZGxlcnMgKmggPSBoYW5kbGVyc1tpXTsKLQotICAgIGlm
ICghdXBiX29rKCZoLT5zdGF0dXNfKSkgewotICAgICAgdXBiX3N0YXR1c19zZXRlcnJmKHMsICJo
YW5kbGVycyBmb3IgbWVzc2FnZSAlcyBoYWQgZXJyb3Igc3RhdHVzOiAlcyIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgdXBiX21zZ2RlZl9mdWxsbmFtZSh1cGJfaGFuZGxlcnNfbXNnZGVmKGgp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3RhdHVzX2Vycm1zZygmaC0+c3RhdHVz
XykpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qIENoZWNrIHRoYXQgdGhl
cmUgYXJlIG5vIGNsb3N1cmUgbWlzbWF0Y2hlcyBkdWUgdG8gbWlzc2luZyBTdGFydCogaGFuZGxl
cnMKLSAgICAgKiBvciBzdWJoYW5kbGVycyB3aXRoIGRpZmZlcmVudCB0eXBlLWxldmVsIHR5cGVz
LiAqLwotICAgIGZvcih1cGJfbXNnX2ZpZWxkX2JlZ2luKCZqLCBoLT5tc2cpOwotICAgICAgICAh
dXBiX21zZ19maWVsZF9kb25lKCZqKTsKLSAgICAgICAgdXBiX21zZ19maWVsZF9uZXh0KCZqKSkg
ewotCi0gICAgICBjb25zdCB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmllbGQoJmop
OwotICAgICAgaWYgKHVwYl9maWVsZGRlZl9pc3NlcShmKSkgewotICAgICAgICBpZiAoIWNoZWNr
c3RhcnQoaCwgZiwgVVBCX0hBTkRMRVJfU1RBUlRTRVEsIHMpKQotICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVwYl9maWVsZGRlZl9pc3N0cmluZyhmKSkgewot
ICAgICAgICBpZiAoIWNoZWNrc3RhcnQoaCwgZiwgVVBCX0hBTkRMRVJfU1RBUlRTVFIsIHMpKQot
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgaWYgKHVwYl9maWVsZGRl
Zl9pc3N1Ym1zZyhmKSkgewotICAgICAgICBib29sIGhhc2hhbmRsZXIgPSBmYWxzZTsKLSAgICAg
ICAgaWYgKHVwYl9oYW5kbGVyc19nZXRoYW5kbGVyKAotICAgICAgICAgICAgICAgIGgsIGhhbmRs
ZXJzX2dldHNlbChoLCBmLCBVUEJfSEFORExFUl9TVEFSVFNVQk1TRykpIHx8Ci0gICAgICAgICAg
ICB1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcigKLSAgICAgICAgICAgICAgICBoLCBoYW5kbGVyc19n
ZXRzZWwoaCwgZiwgVVBCX0hBTkRMRVJfRU5EU1VCTVNHKSkpIHsKLSAgICAgICAgICBoYXNoYW5k
bGVyID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1cGJfZmllbGRkZWZfaXNzZXEo
ZikgJiYKLSAgICAgICAgICAgICh1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcigKLSAgICAgICAgICAg
ICAgICAgaCwgaGFuZGxlcnNfZ2V0c2VsKGgsIGYsIFVQQl9IQU5ETEVSX1NUQVJUU0VRKSkgfHwK
LSAgICAgICAgICAgICB1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcigKLSAgICAgICAgICAgICAgICAg
aCwgaGFuZGxlcnNfZ2V0c2VsKGgsIGYsIFVQQl9IQU5ETEVSX0VORFNFUSkpKSkgewotICAgICAg
ICAgIGhhc2hhbmRsZXIgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhhc2hhbmRs
ZXIgJiYgIXVwYl9oYW5kbGVyc19nZXRzdWJoYW5kbGVycyhoLCBmKSkgewotICAgICAgICAgIC8q
IEZvciBub3cgd2UgYWRkIGFuIGVtcHR5IHN1YmhhbmRsZXJzIGluIHRoaXMgY2FzZS4gIEl0IG1h
a2VzIHRoZQotICAgICAgICAgICAqIGRlY29kZXIgY29kZSBnZW5lcmF0b3Igc2ltcGxlciwgYmVj
YXVzZSBpdCBvbmx5IGhhcyB0byBoYW5kbGUgdHdvCi0gICAgICAgICAgICogY2FzZXMgKHN1Ym1l
c3NhZ2UgaGFzIGhhbmRsZXJzIG9yIG5vdCkgYXMgb3Bwb3NlZCB0byB0aHJlZQotICAgICAgICAg
ICAqIChzdWJtZXNzYWdlIGhhcyBoYW5kbGVycyBpbiBlbmNsb3NpbmcgbWVzc2FnZSBidXQgbm8g
c3ViaGFuZGxlcnMpLgotICAgICAgICAgICAqCi0gICAgICAgICAgICogVGhpcyBtYWtlcyBwYXJz
aW5nIGxlc3MgZWZmaWNpZW50IGluIHRoZSBjYXNlIHRoYXQgd2Ugd2FudCB0bwotICAgICAgICAg
ICAqIG5vdGljZSBhIHN1Ym1lc3NhZ2UgYnV0IHNraXAgaXRzIGNvbnRlbnRzIChsaWtlIGlmIHdl
J3JlIHRlc3RpbmcKLSAgICAgICAgICAgKiBmb3Igc3VibWVzc2FnZSBwcmVzZW5jZSBvciBjb3Vu
dGluZyB0aGUgbnVtYmVyIG9mIHJlcGVhdGVkCi0gICAgICAgICAgICogc3VibWVzc2FnZXMpLiAg
SW4gdGhpcyBjYXNlIHdlIHdpbGwgZW5kIHVwIHBhcnNpbmcgdGhlIHN1Ym1lc3NhZ2UKLSAgICAg
ICAgICAgKiBmaWVsZCBieSBmaWVsZCBhbmQgdGhyb3dpbmcgYXdheSB0aGUgcmVzdWx0cyBmb3Ig
ZWFjaCwgaW5zdGVhZCBvZgotICAgICAgICAgICAqIHNraXBwaW5nIHRoZSB3aG9sZSBkZWxpbWl0
ZWQgdGhpbmcgYXQgb25jZS4gIElmIHRoaXMgaXMgYW4gaXNzdWUgd2UKLSAgICAgICAgICAgKiBj
YW4gcmV2aXNpdCBpdCwgYnV0IGRvIHJlbWVtYmVyIHRoYXQgdGhpcyBvbmx5IGFyaXNlcyB3aGVu
IHlvdSBoYXZlCi0gICAgICAgICAgICogaGFuZGxlcnMgKHN0YXJ0c2VxL3N0YXJ0c3VibXNnL2Vu
ZHN1Ym1zZy9lbmRzZXEpIHNldCBmb3IgdGhlCi0gICAgICAgICAgICogc3VibWVzc2FnZSBidXQg
bm8gc3ViaGFuZGxlcnMuICBUaGUgdXNlcyBjYXNlcyBmb3IgdGhpcyBhcmUKLSAgICAgICAgICAg
KiBsaW1pdGVkLiAqLwotICAgICAgICAgIHVwYl9oYW5kbGVycyAqc3ViID0gdXBiX2hhbmRsZXJz
X25ldyh1cGJfZmllbGRkZWZfbXNnc3ViZGVmKGYpLCAmc3ViKTsKLSAgICAgICAgICB1cGJfaGFu
ZGxlcnNfc2V0c3ViaGFuZGxlcnMoaCwgZiwgc3ViKTsKLSAgICAgICAgICB1cGJfaGFuZGxlcnNf
dW5yZWYoc3ViLCAmc3ViKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFRPRE8oaGFiZXJtYW4p
OiBjaGVjayB0eXBlIG9mIHN1Ym1lc3NhZ2UuCi0gICAgICAgICAqIFRoaXMgaXMgc2xpZ2h0bHkg
dHJpY2t5OyBhbHNvIGNvbnNpZGVyIHdoZXRoZXIgd2Ugc2hvdWxkIGNoZWNrIHRoYXQKLSAgICAg
ICAgICogdGhleSBtYXRjaCBhdCBzZXRzdWJoYW5kbGVycyB0aW1lLiAqLwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIGlmICghdXBiX3JlZmNvdW50ZWRfZnJlZXplKCh1cGJfcmVmY291bnRlZCpj
b25zdCopaGFuZGxlcnMsIG4sIHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQQl9N
QVhfSEFORExFUl9ERVBUSCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotdXBiX2hhbmRsZXJ0eXBlX3QgdXBiX2hhbmRsZXJzX2dldHByaW1pdGl2ZWhh
bmRsZXJ0eXBlKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICBzd2l0Y2ggKHVwYl9maWVsZGRl
Zl90eXBlKGYpKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQzMjoKLSAgICBjYXNlIFVQQl9UWVBF
X0VOVU06IHJldHVybiBVUEJfSEFORExFUl9JTlQzMjsKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDY0
OiByZXR1cm4gVVBCX0hBTkRMRVJfSU5UNjQ7Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5UMzI6IHJl
dHVybiBVUEJfSEFORExFUl9VSU5UMzI7Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5UNjQ6IHJldHVy
biBVUEJfSEFORExFUl9VSU5UNjQ7Ci0gICAgY2FzZSBVUEJfVFlQRV9GTE9BVDogcmV0dXJuIFVQ
Ql9IQU5ETEVSX0ZMT0FUOwotICAgIGNhc2UgVVBCX1RZUEVfRE9VQkxFOiByZXR1cm4gVVBCX0hB
TkRMRVJfRE9VQkxFOwotICAgIGNhc2UgVVBCX1RZUEVfQk9PTDogcmV0dXJuIFVQQl9IQU5ETEVS
X0JPT0w7Ci0gICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIC0xOyAgLyogSW52YWxp
ZCBpbnB1dC4gKi8KLSAgfQotfQotCi1ib29sIHVwYl9oYW5kbGVyc19nZXRzZWxlY3Rvcihjb25z
dCB1cGJfZmllbGRkZWYgKmYsIHVwYl9oYW5kbGVydHlwZV90IHR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cGJfc2VsZWN0b3JfdCAqcykgewotICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICBjYXNlIFVQQl9IQU5ETEVSX0lOVDMyOgotICAgIGNhc2UgVVBCX0hBTkRMRVJfSU5UNjQ6
Ci0gICAgY2FzZSBVUEJfSEFORExFUl9VSU5UMzI6Ci0gICAgY2FzZSBVUEJfSEFORExFUl9VSU5U
NjQ6Ci0gICAgY2FzZSBVUEJfSEFORExFUl9GTE9BVDoKLSAgICBjYXNlIFVQQl9IQU5ETEVSX0RP
VUJMRToKLSAgICBjYXNlIFVQQl9IQU5ETEVSX0JPT0w6Ci0gICAgICBpZiAoIXVwYl9maWVsZGRl
Zl9pc3ByaW1pdGl2ZShmKSB8fAotICAgICAgICAgIHVwYl9oYW5kbGVyc19nZXRwcmltaXRpdmVo
YW5kbGVydHlwZShmKSAhPSB0eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAqcyA9
IGYtPnNlbGVjdG9yX2Jhc2U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9IQU5ETEVSX1NU
UklORzoKLSAgICAgIGlmICh1cGJfZmllbGRkZWZfaXNzdHJpbmcoZikpIHsKLSAgICAgICAgKnMg
PSBmLT5zZWxlY3Rvcl9iYXNlOwotICAgICAgfSBlbHNlIGlmICh1cGJfZmllbGRkZWZfbGF6eShm
KSkgewotICAgICAgICAqcyA9IGYtPnNlbGVjdG9yX2Jhc2UgKyAzOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBV
UEJfSEFORExFUl9TVEFSVFNUUjoKLSAgICAgIGlmICh1cGJfZmllbGRkZWZfaXNzdHJpbmcoZikg
fHwgdXBiX2ZpZWxkZGVmX2xhenkoZikpIHsKLSAgICAgICAgKnMgPSBmLT5zZWxlY3Rvcl9iYXNl
ICsgMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX0hBTkRMRVJfRU5EU1RSOgotICAgICAgaWYgKHVwYl9m
aWVsZGRlZl9pc3N0cmluZyhmKSB8fCB1cGJfZmllbGRkZWZfbGF6eShmKSkgewotICAgICAgICAq
cyA9IGYtPnNlbGVjdG9yX2Jhc2UgKyAyOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfSEFORExFUl9TVEFS
VFNFUToKLSAgICAgIGlmICghdXBiX2ZpZWxkZGVmX2lzc2VxKGYpKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICAqcyA9IGYtPnNlbGVjdG9yX2Jhc2UgLSAyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBV
UEJfSEFORExFUl9FTkRTRVE6Ci0gICAgICBpZiAoIXVwYl9maWVsZGRlZl9pc3NlcShmKSkgcmV0
dXJuIGZhbHNlOwotICAgICAgKnMgPSBmLT5zZWxlY3Rvcl9iYXNlIC0gMTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgVVBCX0hBTkRMRVJfU1RBUlRTVUJNU0c6Ci0gICAgICBpZiAoIXVwYl9maWVs
ZGRlZl9pc3N1Ym1zZyhmKSkgcmV0dXJuIGZhbHNlOwotICAgICAgLyogU2VsZWN0b3JzIGZvciBT
VEFSVFNVQk1TRyBhcmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFibGUgc28gdGhhdCB0aGUK
LSAgICAgICAqIHNlbGVjdG9yIGNhbiBhbHNvIGJlIHVzZWQgYXMgYW4gaW5kZXggaW50byB0aGUg
InN1YiIgYXJyYXkgb2YKLSAgICAgICAqIHN1YmhhbmRsZXJzLiAgVGhlIGluZGV4ZXMgZm9yIHRo
ZSB0d28gaW50byB0aGVzZSB0d28gdGFibGVzIGFyZSB0aGUKLSAgICAgICAqIHNhbWUsIGV4Y2Vw
dCB0aGF0IGluIHRoZSBoYW5kbGVyIHRhYmxlIHRoZSBzdGF0aWMgc2VsZWN0b3JzIGNvbWUgZmly
c3QuICovCi0gICAgICAqcyA9IGYtPmluZGV4XyArIFVQQl9TVEFUSUNfU0VMRUNUT1JfQ09VTlQ7
Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9IQU5ETEVSX0VORFNVQk1TRzoKLSAgICAgIGlm
ICghdXBiX2ZpZWxkZGVmX2lzc3VibXNnKGYpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAqcyA9IGYt
PnNlbGVjdG9yX2Jhc2U7Ci0gICAgICBicmVhazsKLSAgfQotICBhc3NlcnQoKHNpemVfdCkqcyA8
IHVwYl9maWVsZGRlZl9jb250YWluaW5ndHlwZShmKS0+c2VsZWN0b3JfY291bnQpOwotICByZXR1
cm4gdHJ1ZTsKLX0KLQotdWludDMyX3QgdXBiX2hhbmRsZXJzX3NlbGVjdG9yYmFzZW9mZnNldChj
b25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9pc3NlcShmKSA/
IDIgOiAwOwotfQotCi11aW50MzJfdCB1cGJfaGFuZGxlcnNfc2VsZWN0b3Jjb3VudChjb25zdCB1
cGJfZmllbGRkZWYgKmYpIHsKLSAgdWludDMyX3QgcmV0ID0gMTsKLSAgaWYgKHVwYl9maWVsZGRl
Zl9pc3NlcShmKSkgcmV0ICs9IDI7ICAgIC8qIFNUQVJUU0VRL0VORFNFUSAqLwotICBpZiAodXBi
X2ZpZWxkZGVmX2lzc3RyaW5nKGYpKSByZXQgKz0gMjsgLyogW1NUUklOR10vU1RBUlRTVFIvRU5E
U1RSICovCi0gIGlmICh1cGJfZmllbGRkZWZfaXNzdWJtc2coZikpIHsKLSAgICAvKiBFTkRTVUJN
U0cgKFNUQVJUU1VCTVNHIGlzIGF0IHRhYmxlIGJlZ2lubmluZykgKi8KLSAgICByZXQgKz0gMDsK
LSAgICBpZiAodXBiX2ZpZWxkZGVmX2xhenkoZikpIHsKLSAgICAgIC8qIFNUQVJUU1RSL0VORFNU
Ui9TVFJJTkcgKGZvciBsYXp5KSAqLwotICAgICAgcmV0ICs9IDM7Ci0gICAgfQotICB9Ci0gIHJl
dHVybiByZXQ7Ci19Ci0KLQotLyogdXBiX2hhbmRsZXJhdHRyICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCB1cGJfaGFu
ZGxlcmF0dHJfaW5pdCh1cGJfaGFuZGxlcmF0dHIgKmF0dHIpIHsKLSAgdXBiX2hhbmRsZXJhdHRy
IGZyb20gPSBVUEJfSEFORExFUkFUVFJfSU5JVElBTElaRVI7Ci0gIG1lbWNweShhdHRyLCAmZnJv
bSwgc2l6ZW9mKCphdHRyKSk7Ci19Ci0KLXZvaWQgdXBiX2hhbmRsZXJhdHRyX3VuaW5pdCh1cGJf
aGFuZGxlcmF0dHIgKmF0dHIpIHsKLSAgVVBCX1VOVVNFRChhdHRyKTsKLX0KLQotYm9vbCB1cGJf
aGFuZGxlcmF0dHJfc2V0aGFuZGxlcmRhdGEodXBiX2hhbmRsZXJhdHRyICphdHRyLCBjb25zdCB2
b2lkICpoZCkgewotICBhdHRyLT5oYW5kbGVyX2RhdGFfID0gaGQ7Ci0gIHJldHVybiB0cnVlOwot
fQotCi1ib29sIHVwYl9oYW5kbGVyYXR0cl9zZXRjbG9zdXJldHlwZSh1cGJfaGFuZGxlcmF0dHIg
KmF0dHIsIGNvbnN0IHZvaWQgKnR5cGUpIHsKLSAgYXR0ci0+Y2xvc3VyZV90eXBlXyA9IHR5cGU7
Ci0gIHJldHVybiB0cnVlOwotfQotCi1jb25zdCB2b2lkICp1cGJfaGFuZGxlcmF0dHJfY2xvc3Vy
ZXR5cGUoY29uc3QgdXBiX2hhbmRsZXJhdHRyICphdHRyKSB7Ci0gIHJldHVybiBhdHRyLT5jbG9z
dXJlX3R5cGVfOwotfQotCi1ib29sIHVwYl9oYW5kbGVyYXR0cl9zZXRyZXR1cm5jbG9zdXJldHlw
ZSh1cGJfaGFuZGxlcmF0dHIgKmF0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2b2lkICp0eXBlKSB7Ci0gIGF0dHItPnJldHVybl9jbG9zdXJlX3R5
cGVfID0gdHlwZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWNvbnN0IHZvaWQgKnVwYl9oYW5kbGVy
YXR0cl9yZXR1cm5jbG9zdXJldHlwZShjb25zdCB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpIHsKLSAg
cmV0dXJuIGF0dHItPnJldHVybl9jbG9zdXJlX3R5cGVfOwotfQotCi1ib29sIHVwYl9oYW5kbGVy
YXR0cl9zZXRhbHdheXNvayh1cGJfaGFuZGxlcmF0dHIgKmF0dHIsIGJvb2wgYWx3YXlzb2spIHsK
LSAgYXR0ci0+YWx3YXlzb2tfID0gYWx3YXlzb2s7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29s
IHVwYl9oYW5kbGVyYXR0cl9hbHdheXNvayhjb25zdCB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpIHsK
LSAgcmV0dXJuIGF0dHItPmFsd2F5c29rXzsKLX0KLQotLyogdXBiX2J1ZmhhbmRsZSAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
LQotc2l6ZV90IHVwYl9idWZoYW5kbGVfb2Jqb2ZzKGNvbnN0IHVwYl9idWZoYW5kbGUgKmgpIHsK
LSAgcmV0dXJuIGgtPm9iam9mc187Ci19Ci0KLS8qIHVwYl9ieXRlc2hhbmRsZXIgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZv
aWQgdXBiX2J5dGVzaGFuZGxlcl9pbml0KHVwYl9ieXRlc2hhbmRsZXIqIGgpIHsKLSAgbWVtc2V0
KGgsIDAsIHNpemVvZigqaCkpOwotfQotCi0vKiBGb3Igd2hlbiB3ZSBzdXBwb3J0IGhhbmRsZXJm
cmVlIGNhbGxiYWNrcy4gKi8KLXZvaWQgdXBiX2J5dGVzaGFuZGxlcl91bmluaXQodXBiX2J5dGVz
aGFuZGxlciogaCkgewotICBVUEJfVU5VU0VEKGgpOwotfQotCi1ib29sIHVwYl9ieXRlc2hhbmRs
ZXJfc2V0c3RhcnRzdHIodXBiX2J5dGVzaGFuZGxlciAqaCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cGJfc3RhcnRzdHJfaGFuZGxlcmZ1bmMgKmZ1bmMsIHZvaWQgKmQpIHsK
LSAgaC0+dGFibGVbVVBCX1NUQVJUU1RSX1NFTEVDVE9SXS5mdW5jID0gKHVwYl9mdW5jKilmdW5j
OwotICBoLT50YWJsZVtVUEJfU1RBUlRTVFJfU0VMRUNUT1JdLmF0dHIuaGFuZGxlcl9kYXRhXyA9
IGQ7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIHVwYl9ieXRlc2hhbmRsZXJfc2V0c3RyaW5n
KHVwYl9ieXRlc2hhbmRsZXIgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVw
Yl9zdHJpbmdfaGFuZGxlcmZ1bmMgKmZ1bmMsIHZvaWQgKmQpIHsKLSAgaC0+dGFibGVbVVBCX1NU
UklOR19TRUxFQ1RPUl0uZnVuYyA9ICh1cGJfZnVuYyopZnVuYzsKLSAgaC0+dGFibGVbVVBCX1NU
UklOR19TRUxFQ1RPUl0uYXR0ci5oYW5kbGVyX2RhdGFfID0gZDsKLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgdXBiX2J5dGVzaGFuZGxlcl9zZXRlbmRzdHIodXBiX2J5dGVzaGFuZGxlciAqaCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2VuZGZpZWxkX2hhbmRsZXJmdW5j
ICpmdW5jLCB2b2lkICpkKSB7Ci0gIGgtPnRhYmxlW1VQQl9FTkRTVFJfU0VMRUNUT1JdLmZ1bmMg
PSAodXBiX2Z1bmMqKWZ1bmM7Ci0gIGgtPnRhYmxlW1VQQl9FTkRTVFJfU0VMRUNUT1JdLmF0dHIu
aGFuZGxlcl9kYXRhXyA9IGQ7Ci0gIHJldHVybiB0cnVlOwotfQotLyoKLSoqIHVwYjo6UmVmQ291
bnRlZCBJbXBsZW1lbnRhdGlvbgotKioKLSoqIE91ciBrZXkgaW52YXJpYW50cyBhcmU6Ci0qKiAx
LiByZWZlcmVuY2UgY3ljbGVzIG5ldmVyIHNwYW4gZ3JvdXBzCi0qKiAyLiBmb3IgcmVmMih0bywg
ZnJvbSksIHdlIGluY3JlbWVudCB0bydzIGNvdW50IGlmZiBncm91cChmcm9tKSAhPSBncm91cCh0
bykKLSoqCi0qKiBUaGUgcHJldmlvdXMgdHdvIGFyZSBob3cgd2UgYXZvaWQgbGVha2luZyBjeWNs
ZXMuICBPdGhlciBpbXBvcnRhbnQKLSoqIGludmFyaWFudHMgYXJlOgotKiogMy4gZm9yIG11dGFi
bGUgb2JqZWN0cyAiZnJvbSIgYW5kICJ0byIsIGlmIHRoZXJlIGV4aXN0cyBhIHJlZjIodG8sIGZy
b20pCi0qKiAgICB0aGlzIGltcGxpZXMgZ3JvdXAoZnJvbSkgPT0gZ3JvdXAodG8pLiAgKEluIHBy
YWN0aWNlLCB3aGF0IHdlIGltcGxlbWVudAotKiogICAgaXMgZXZlbiBzdHJvbmdlcjsgImZyb20i
IGFuZCAidG8iIHdpbGwgc2hhcmUgYSBncm91cCBpZiB0aGVyZSBoYXMgKmV2ZXIqCi0qKiAgICBi
ZWVuIGEgcmVmMih0bywgZnJvbSksIGJ1dCBhbGwgdGhhdCBpcyBuZWNlc3NhcnkgZm9yIGNvcnJl
Y3RuZXNzIGlzIHRoZQotKiogICAgd2Vha2VyIG9uZSkuCi0qKiA0LiBtdXRhYmxlIGFuZCBpbW11
dGFibGUgb2JqZWN0cyBhcmUgbmV2ZXIgaW4gdGhlIHNhbWUgZ3JvdXAuCi0qLwotCi0KLSNpbmNs
dWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotc3RhdGljIHZvaWQgZnJlZW9i
aih1cGJfcmVmY291bnRlZCAqbyk7Ci0KLWNvbnN0IGNoYXIgdW50cmFja2VkX3ZhbDsKLWNvbnN0
IHZvaWQgKlVQQl9VTlRSQUNLRURfUkVGID0gJnVudHJhY2tlZF92YWw7Ci0KLS8qIGFyY2gtc3Bl
Y2lmaWMgYXRvbWljIHByaW1pdGl2ZXMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCi0KLSNpZmRlZiBVUEJfVEhSRUFEX1VOU0FGRSAvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB2b2lkIGF0
b21pY19pbmModWludDMyX3QgKmEpIHsgKCphKSsrOyB9Ci1zdGF0aWMgYm9vbCBhdG9taWNfZGVj
KHVpbnQzMl90ICphKSB7IHJldHVybiAtLSgqYSkgPT0gMDsgfQotCi0jZWxpZiBkZWZpbmVkKF9f
R05VQ19fKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwotCi1zdGF0aWMgdm9pZCBhdG9taWNfaW5jKHVpbnQzMl90ICphKSB7IF9fc3luY19m
ZXRjaF9hbmRfYWRkKGEsIDEpOyB9Ci1zdGF0aWMgYm9vbCBhdG9taWNfZGVjKHVpbnQzMl90ICph
KSB7IHJldHVybiBfX3N5bmNfc3ViX2FuZF9mZXRjaChhLCAxKSA9PSAwOyB9Ci0KLSNlbGlmIGRl
ZmluZWQoV0lOMzIpIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCi0KLSNpbmNsdWRlIDxXaW5kb3dzLmg+Ci0KLXN0YXRpYyB2b2lkIGF0
b21pY19pbmModXBiX2F0b21pY190ICphKSB7IEludGVybG9ja2VkSW5jcmVtZW50KCZhLT52YWwp
OyB9Ci1zdGF0aWMgYm9vbCBhdG9taWNfZGVjKHVwYl9hdG9taWNfdCAqYSkgewotICByZXR1cm4g
SW50ZXJsb2NrZWREZWNyZW1lbnQoJmEtPnZhbCkgPT0gMDsKLX0KLQotI2Vsc2UKLSNlcnJvciBB
dG9taWMgcHJpbWl0aXZlcyBub3QgZGVmaW5lZCBmb3IgeW91ciBwbGF0Zm9ybS9DUFUuICBcCi0g
ICAgICAgSW1wbGVtZW50IHRoZW0gb3IgY29tcGlsZSB3aXRoIFVQQl9USFJFQURfVU5TQUZFLgot
I2VuZGlmCi0KLS8qIEFsbCBzdGF0aWMgb2JqZWN0cyBwb2ludCB0byB0aGlzIHJlZmNvdW50Lgot
ICogSXQgaXMgc3BlY2lhbC1jYXNlZCBpbiByZWYvdW5yZWYgYmVsb3cuICAqLwotdWludDMyX3Qg
c3RhdGljX3JlZmNvdW50ID0gLTE7Ci0KLS8qIFdlIGNhbiBhdm9pZCBhdG9taWMgb3BzIGZvciBz
dGF0aWNhbGx5LWRlY2xhcmVkIG9iamVjdHMuCi0gKiBUaGlzIGlzIGEgbWlub3Igb3B0aW1pemF0
aW9uIGJ1dCBuaWNlIHNpbmNlIHdlIGNhbiBhdm9pZCBkZWdyYWRpbmcgdW5kZXIKLSAqIGNvbnRl
bnRpb24gaW4gdGhpcyBjYXNlLiAqLwotCi1zdGF0aWMgdm9pZCByZWZncm91cCh1aW50MzJfdCAq
Z3JvdXApIHsKLSAgaWYgKGdyb3VwICE9ICZzdGF0aWNfcmVmY291bnQpCi0gICAgYXRvbWljX2lu
Yyhncm91cCk7Ci19Ci0KLXN0YXRpYyBib29sIHVucmVmZ3JvdXAodWludDMyX3QgKmdyb3VwKSB7
Ci0gIGlmIChncm91cCA9PSAmc3RhdGljX3JlZmNvdW50KSB7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9IGVsc2UgewotICAgIHJldHVybiBhdG9taWNfZGVjKGdyb3VwKTsKLSAgfQotfQotCi0KLS8q
IFJlZmVyZW5jZSB0cmFja2luZyAoZGVidWcgb25seSkgKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBVUEJfREVCVUdfUkVGUwotCi0jaWZkZWYg
VVBCX1RIUkVBRF9VTlNBRkUKLQotc3RhdGljIHZvaWQgdXBiX2xvY2soKSB7fQotc3RhdGljIHZv
aWQgdXBiX3VubG9jaygpIHt9Ci0KLSNlbHNlCi0KLS8qIFVzZXIgbXVzdCBkZWZpbmUgZnVuY3Rp
b25zIHRoYXQgbG9jay91bmxvY2sgYSBnbG9iYWwgbXV0ZXggYW5kIGxpbmsgdGhpcwotICogZmls
ZSBhZ2FpbnN0IHRoZW0uICovCi12b2lkIHVwYl9sb2NrKCk7Ci12b2lkIHVwYl91bmxvY2soKTsK
LQotI2VuZGlmCi0KLS8qIFVQQl9ERUJVR19SRUZTIG1vZGUgY291bnRzIG9uIGJlaW5nIGFibGUg
dG8gbWFsbG9jKCkgbWVtb3J5IGluIHNvbWUKLSAqIGNvZGUtcGF0aHMgdGhhdCBjYW4gbm9ybWFs
bHkgbmV2ZXIgZmFpbCwgbGlrZSB1cGJfcmVmY291bnRlZF9yZWYoKS4gIFNpbmNlCi0gKiB3ZSBo
YXZlIG5vIHdheSB0byBwcm9wYWdhZ2Ugb3V0LW9mLW1lbW9yeSBlcnJvcnMgYmFjayB0byB0aGUg
dXNlciwgYW5kIHNpbmNlCi0gKiB0aGVzZSBlcnJvcnMgY2FuIG9ubHkgb2NjdXIgaW4gVVBCX0RF
QlVHX1JFRlMgbW9kZSwgd2UgaW1tZWRpYXRlbHkgZmFpbC4gKi8KLSNkZWZpbmUgQ0hFQ0tfT09N
KHByZWRpY2F0ZSkgaWYgKCEocHJlZGljYXRlKSkgeyBhc3NlcnQocHJlZGljYXRlKTsgZXhpdCgx
KTsgfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGludCBjb3VudDsgIC8qIEhvdyBtYW55IHJlZnMg
dGhlcmUgYXJlIChkdXBsaWNhdGVzIG9ubHkgYWxsb3dlZCBmb3IgcmVmMikuICovCi0gIGJvb2wg
aXNfcmVmMjsKLX0gdHJhY2tlZHJlZjsKLQotc3RhdGljIHRyYWNrZWRyZWYgKnRyYWNrZWRyZWZf
bmV3KGJvb2wgaXNfcmVmMikgewotICB0cmFja2VkcmVmICpyZXQgPSBtYWxsb2Moc2l6ZW9mKCpy
ZXQpKTsKLSAgQ0hFQ0tfT09NKHJldCk7Ci0gIHJldC0+Y291bnQgPSAxOwotICByZXQtPmlzX3Jl
ZjIgPSBpc19yZWYyOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB0cmFjayhjb25z
dCB1cGJfcmVmY291bnRlZCAqciwgY29uc3Qgdm9pZCAqb3duZXIsIGJvb2wgcmVmMikgewotICB1
cGJfdmFsdWUgdjsKLQotICBhc3NlcnQob3duZXIpOwotICBpZiAob3duZXIgPT0gVVBCX1VOVFJB
Q0tFRF9SRUYpIHJldHVybjsKLQotICB1cGJfbG9jaygpOwotICBpZiAodXBiX2ludHRhYmxlX2xv
b2t1cHB0cihyLT5yZWZzLCBvd25lciwgJnYpKSB7Ci0gICAgdHJhY2tlZHJlZiAqcmVmID0gdXBi
X3ZhbHVlX2dldHB0cih2KTsKLSAgICAvKiBTaW5jZSB3ZSBhbGxvdyBtdWx0aXBsZSByZWYyJ3Mg
Zm9yIHRoZSBzYW1lIHRvL2Zyb20gcGFpciB3aXRob3V0Ci0gICAgICogYWxsb2NhdGluZyBzZXBh
cmF0ZSBtZW1vcnkgZm9yIGVhY2ggb25lLCB3ZSBsb3NlIHRoZSBmaW5lLWdyYWluZWQKLSAgICAg
KiB0cmFja2luZyBiZWhhdmlvciB3ZSBnZXQgd2l0aCByZWd1bGFyIHJlZnMuICBTaW5jZSByZWYy
cyBvbmx5IGhhcHBlbgotICAgICAqIGluc2lkZSB1cGIsIHdlJ2xsIGFjY2VwdCB0aGlzIGxpbWl0
YXRpb24gdW50aWwvdW5sZXNzIHRoZXJlIGlzIGEgcmVhbGx5Ci0gICAgICogZGlmZmljdWx0IHVw
Yi1pbnRlcm5hbCBidWcgdGhhdCBjYW4ndCBiZSBmaWd1cmVkIG91dCB3aXRob3V0IGl0LiAqLwot
ICAgIGFzc2VydChyZWYyKTsKLSAgICBhc3NlcnQocmVmLT5pc19yZWYyKTsKLSAgICByZWYtPmNv
dW50Kys7Ci0gIH0gZWxzZSB7Ci0gICAgdHJhY2tlZHJlZiAqcmVmID0gdHJhY2tlZHJlZl9uZXco
cmVmMik7Ci0gICAgYm9vbCBvayA9IHVwYl9pbnR0YWJsZV9pbnNlcnRwdHIoci0+cmVmcywgb3du
ZXIsIHVwYl92YWx1ZV9wdHIocmVmKSk7Ci0gICAgQ0hFQ0tfT09NKG9rKTsKLSAgICBpZiAocmVm
MikgewotICAgICAgLyogV2Uga25vdyB0aGlzIGNhc3QgaXMgc2FmZSB3aGVuIGl0IGlzIGEgcmVm
MiwgYmVjYXVzZSBpdCdzIGNvbWluZyBmcm9tCi0gICAgICAgKiBhbm90aGVyIHJlZmNvdW50ZWQg
b2JqZWN0LiAqLwotICAgICAgY29uc3QgdXBiX3JlZmNvdW50ZWQgKmZyb20gPSBvd25lcjsKLSAg
ICAgIGFzc2VydCghdXBiX2ludHRhYmxlX2xvb2t1cHB0cihmcm9tLT5yZWYycywgciwgTlVMTCkp
OwotICAgICAgb2sgPSB1cGJfaW50dGFibGVfaW5zZXJ0cHRyKGZyb20tPnJlZjJzLCByLCB1cGJf
dmFsdWVfcHRyKE5VTEwpKTsKLSAgICAgIENIRUNLX09PTShvayk7Ci0gICAgfQotICB9Ci0gIHVw
Yl91bmxvY2soKTsKLX0KLQotc3RhdGljIHZvaWQgdW50cmFjayhjb25zdCB1cGJfcmVmY291bnRl
ZCAqciwgY29uc3Qgdm9pZCAqb3duZXIsIGJvb2wgcmVmMikgewotICB1cGJfdmFsdWUgdjsKLSAg
Ym9vbCBmb3VuZDsKLSAgdHJhY2tlZHJlZiAqcmVmOwotCi0gIGFzc2VydChvd25lcik7Ci0gIGlm
IChvd25lciA9PSBVUEJfVU5UUkFDS0VEX1JFRikgcmV0dXJuOwotCi0gIHVwYl9sb2NrKCk7Ci0g
IGZvdW5kID0gdXBiX2ludHRhYmxlX2xvb2t1cHB0cihyLT5yZWZzLCBvd25lciwgJnYpOwotICAv
KiBUaGlzIGFzc2VydCB3aWxsIGZhaWwgaWYgYW4gb3duZXIgYXR0ZW1wdHMgdG8gcmVsZWFzZSBh
IHJlZiBpdCBkaWRuJ3QgaGF2ZS4gKi8KLSAgVVBCX0FTU0VSVF9WQVIoZm91bmQsIGZvdW5kKTsK
LSAgcmVmID0gdXBiX3ZhbHVlX2dldHB0cih2KTsKLSAgYXNzZXJ0KHJlZi0+aXNfcmVmMiA9PSBy
ZWYyKTsKLSAgaWYgKC0tcmVmLT5jb3VudCA9PSAwKSB7Ci0gICAgZnJlZShyZWYpOwotICAgIHVw
Yl9pbnR0YWJsZV9yZW1vdmVwdHIoci0+cmVmcywgb3duZXIsIE5VTEwpOwotICAgIGlmIChyZWYy
KSB7Ci0gICAgICAvKiBXZSBrbm93IHRoaXMgY2FzdCBpcyBzYWZlIHdoZW4gaXQgaXMgYSByZWYy
LCBiZWNhdXNlIGl0J3MgY29taW5nIGZyb20KLSAgICAgICAqIGFub3RoZXIgcmVmY291bnRlZCBv
YmplY3QuICovCi0gICAgICBjb25zdCB1cGJfcmVmY291bnRlZCAqZnJvbSA9IG93bmVyOwotICAg
ICAgYm9vbCByZW1vdmVkID0gdXBiX2ludHRhYmxlX3JlbW92ZXB0cihmcm9tLT5yZWYycywgciwg
TlVMTCk7Ci0gICAgICBhc3NlcnQocmVtb3ZlZCk7Ci0gICAgfQotICB9Ci0gIHVwYl91bmxvY2so
KTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tyZWYoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIGNv
bnN0IHZvaWQgKm93bmVyLCBib29sIHJlZjIpIHsKLSAgdXBiX3ZhbHVlIHY7Ci0gIGJvb2wgZm91
bmQ7Ci0gIHRyYWNrZWRyZWYgKnJlZjsKLQotICB1cGJfbG9jaygpOwotICBmb3VuZCA9IHVwYl9p
bnR0YWJsZV9sb29rdXBwdHIoci0+cmVmcywgb3duZXIsICZ2KTsKLSAgVVBCX0FTU0VSVF9WQVIo
Zm91bmQsIGZvdW5kKTsKLSAgcmVmID0gdXBiX3ZhbHVlX2dldHB0cih2KTsKLSAgYXNzZXJ0KHJl
Zi0+aXNfcmVmMiA9PSByZWYyKTsKLSAgdXBiX3VubG9jaygpOwotfQotCi0vKiBQb3B1bGF0ZXMg
dGhlIGdpdmVuIFVQQl9DVFlQRV9JTlQzMiBpbnR0YWJsZSB3aXRoIGNvdW50cyBvZiByZWYyJ3Mg
dGhhdAotICogb3JpZ2luYXRlIGZyb20gdGhlIGdpdmVuIG93bmVyLiAqLwotc3RhdGljIHZvaWQg
Z2V0cmVmMnMoY29uc3QgdXBiX3JlZmNvdW50ZWQgKm93bmVyLCB1cGJfaW50dGFibGUgKnRhYikg
ewotICB1cGJfaW50dGFibGVfaXRlciBpOwotCi0gIHVwYl9sb2NrKCk7Ci0gIHVwYl9pbnR0YWJs
ZV9iZWdpbigmaSwgb3duZXItPnJlZjJzKTsKLSAgZm9yKDsgIXVwYl9pbnR0YWJsZV9kb25lKCZp
KTsgdXBiX2ludHRhYmxlX25leHQoJmkpKSB7Ci0gICAgdXBiX3ZhbHVlIHY7Ci0gICAgdXBiX3Zh
bHVlIGNvdW50OwotICAgIHRyYWNrZWRyZWYgKnJlZjsKLSAgICBib29sIG9rOwotICAgIGJvb2wg
Zm91bmQ7Ci0KLSAgICB1cGJfcmVmY291bnRlZCAqdG8gPSAodXBiX3JlZmNvdW50ZWQqKXVwYl9p
bnR0YWJsZV9pdGVyX2tleSgmaSk7Ci0KLSAgICAvKiBUbyBnZXQgdGhlIGNvdW50IHdlIG5lZWQg
dG8gbG9vayBpbiB0aGUgdGFyZ2V0J3MgdGFibGUuICovCi0gICAgZm91bmQgPSB1cGJfaW50dGFi
bGVfbG9va3VwcHRyKHRvLT5yZWZzLCBvd25lciwgJnYpOwotICAgIGFzc2VydChmb3VuZCk7Ci0g
ICAgcmVmID0gdXBiX3ZhbHVlX2dldHB0cih2KTsKLSAgICBjb3VudCA9IHVwYl92YWx1ZV9pbnQz
MihyZWYtPmNvdW50KTsKLQotICAgIG9rID0gdXBiX2ludHRhYmxlX2luc2VydHB0cih0YWIsIHRv
LCBjb3VudCk7Ci0gICAgQ0hFQ0tfT09NKG9rKTsKLSAgfQotICB1cGJfdW5sb2NrKCk7Ci19Ci0K
LXR5cGVkZWYgc3RydWN0IHsKLSAgdXBiX2ludHRhYmxlIHJlZjI7Ci0gIGNvbnN0IHVwYl9yZWZj
b3VudGVkICpvYmo7Ci19IGNoZWNrX3N0YXRlOwotCi1zdGF0aWMgdm9pZCB2aXNpdF9jaGVjayhj
b25zdCB1cGJfcmVmY291bnRlZCAqb2JqLCBjb25zdCB1cGJfcmVmY291bnRlZCAqc3Vib2JqLAot
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgewotICBjaGVja19zdGF0ZSAq
cyA9IGNsb3N1cmU7Ci0gIHVwYl9pbnR0YWJsZSAqcmVmMiA9ICZzLT5yZWYyOwotICB1cGJfdmFs
dWUgdjsKLSAgYm9vbCByZW1vdmVkOwotICBpbnQzMl90IG5ld2NvdW50OwotCi0gIGFzc2VydChv
YmogPT0gcy0+b2JqKTsKLSAgYXNzZXJ0KHN1Ym9iaik7Ci0gIHJlbW92ZWQgPSB1cGJfaW50dGFi
bGVfcmVtb3ZlcHRyKHJlZjIsIHN1Ym9iaiwgJnYpOwotICAvKiBUaGUgZm9sbG93aW5nIGFzc2Vy
dGlvbiB3aWxsIGZhaWwgaWYgdGhlIHZpc2l0KCkgZnVuY3Rpb24gdmlzaXRzIGEgc3Vib2JqCi0g
ICAqIHRoYXQgaXQgZGlkIG5vdCBoYXZlIGEgcmVmMiBvbiwgb3IgdmlzaXRzIHRoZSBzYW1lIHN1
Ym9iaiB0b28gbWFueSB0aW1lcy4gKi8KLSAgYXNzZXJ0KHJlbW92ZWQpOwotICBuZXdjb3VudCA9
IHVwYl92YWx1ZV9nZXRpbnQzMih2KSAtIDE7Ci0gIGlmIChuZXdjb3VudCA+IDApIHsKLSAgICB1
cGJfaW50dGFibGVfaW5zZXJ0KHJlZjIsICh1aW50cHRyX3Qpc3Vib2JqLCB1cGJfdmFsdWVfaW50
MzIobmV3Y291bnQpKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCB2aXNpdChjb25zdCB1cGJfcmVm
Y291bnRlZCAqciwgdXBiX3JlZmNvdW50ZWRfdmlzaXQgKnYsCi0gICAgICAgICAgICAgICAgICB2
b2lkICpjbG9zdXJlKSB7Ci0gIGJvb2wgb2s7Ci0KLSAgLyogSW4gREVCVUdfUkVGUyBtb2RlIHdl
IGtub3cgd2hhdCBleGlzdGluZyByZWYyIHJlZnMgdGhlcmUgYXJlLCBzbyB3ZSBrbm93Ci0gICAq
IGV4YWN0bHkgdGhlIHNldCBvZiBub2RlcyB0aGF0IHZpc2l0KCkgc2hvdWxkIHZpc2l0LiAgU28g
d2UgdmVyaWZ5IHZpc2l0KCkncwotICAgKiBjb3JyZWN0bmVzcyBoZXJlLiAqLwotICBjaGVja19z
dGF0ZSBzdGF0ZTsKLSAgc3RhdGUub2JqID0gcjsKLSAgb2sgPSB1cGJfaW50dGFibGVfaW5pdCgm
c3RhdGUucmVmMiwgVVBCX0NUWVBFX0lOVDMyKTsKLSAgQ0hFQ0tfT09NKG9rKTsKLSAgZ2V0cmVm
MnMociwgJnN0YXRlLnJlZjIpOwotCi0gIC8qIFRoaXMgc2hvdWxkIHZpc2l0IGFueSBjaGlsZHJl
biBpbiB0aGUgcmVmMiB0YWJsZS4gKi8KLSAgaWYgKHItPnZ0YmwtPnZpc2l0KSByLT52dGJsLT52
aXNpdChyLCB2aXNpdF9jaGVjaywgJnN0YXRlKTsKLQotICAvKiBUaGlzIGFzc2VydGlvbiB3aWxs
IGZhaWwgaWYgdGhlIHZpc2l0KCkgZnVuY3Rpb24gbWlzc2VkIGFueSBjaGlsZHJlbi4gKi8KLSAg
YXNzZXJ0KHVwYl9pbnR0YWJsZV9jb3VudCgmc3RhdGUucmVmMikgPT0gMCk7Ci0gIHVwYl9pbnR0
YWJsZV91bmluaXQoJnN0YXRlLnJlZjIpOwotICBpZiAoci0+dnRibC0+dmlzaXQpIHItPnZ0Ymwt
PnZpc2l0KHIsIHYsIGNsb3N1cmUpOwotfQotCi1zdGF0aWMgYm9vbCB0cmFja2luaXQodXBiX3Jl
ZmNvdW50ZWQgKnIpIHsKLSAgci0+cmVmcyA9IG1hbGxvYyhzaXplb2YoKnItPnJlZnMpKTsKLSAg
ci0+cmVmMnMgPSBtYWxsb2Moc2l6ZW9mKCpyLT5yZWYycykpOwotICBpZiAoIXItPnJlZnMgfHwg
IXItPnJlZjJzKSBnb3RvIGVycjE7Ci0KLSAgaWYgKCF1cGJfaW50dGFibGVfaW5pdChyLT5yZWZz
LCBVUEJfQ1RZUEVfUFRSKSkgZ290byBlcnIxOwotICBpZiAoIXVwYl9pbnR0YWJsZV9pbml0KHIt
PnJlZjJzLCBVUEJfQ1RZUEVfUFRSKSkgZ290byBlcnIyOwotICByZXR1cm4gdHJ1ZTsKLQotZXJy
MjoKLSAgdXBiX2ludHRhYmxlX3VuaW5pdChyLT5yZWZzKTsKLWVycjE6Ci0gIGZyZWUoci0+cmVm
cyk7Ci0gIGZyZWUoci0+cmVmMnMpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRyYWNrZnJlZShjb25zdCB1cGJfcmVmY291bnRlZCAqcikgewotICB1cGJfaW50dGFibGVfdW5p
bml0KHItPnJlZnMpOwotICB1cGJfaW50dGFibGVfdW5pbml0KHItPnJlZjJzKTsKLSAgZnJlZShy
LT5yZWZzKTsKLSAgZnJlZShyLT5yZWYycyk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyB2b2lkIHRy
YWNrKGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLCBjb25zdCB2b2lkICpvd25lciwgYm9vbCByZWYy
KSB7Ci0gIFVQQl9VTlVTRUQocik7Ci0gIFVQQl9VTlVTRUQob3duZXIpOwotICBVUEJfVU5VU0VE
KHJlZjIpOwotfQotCi1zdGF0aWMgdm9pZCB1bnRyYWNrKGNvbnN0IHVwYl9yZWZjb3VudGVkICpy
LCBjb25zdCB2b2lkICpvd25lciwgYm9vbCByZWYyKSB7Ci0gIFVQQl9VTlVTRUQocik7Ci0gIFVQ
Ql9VTlVTRUQob3duZXIpOwotICBVUEJfVU5VU0VEKHJlZjIpOwotfQotCi1zdGF0aWMgdm9pZCBj
aGVja3JlZihjb25zdCB1cGJfcmVmY291bnRlZCAqciwgY29uc3Qgdm9pZCAqb3duZXIsIGJvb2wg
cmVmMikgewotICBVUEJfVU5VU0VEKHIpOwotICBVUEJfVU5VU0VEKG93bmVyKTsKLSAgVVBCX1VO
VVNFRChyZWYyKTsKLX0KLQotc3RhdGljIGJvb2wgdHJhY2tpbml0KHVwYl9yZWZjb3VudGVkICpy
KSB7Ci0gIFVQQl9VTlVTRUQocik7Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCB0
cmFja2ZyZWUoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIpIHsKLSAgVVBCX1VOVVNFRChyKTsKLX0K
LQotc3RhdGljIHZvaWQgdmlzaXQoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIHVwYl9yZWZjb3Vu
dGVkX3Zpc2l0ICp2LAotICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgewotICBpZiAo
ci0+dnRibC0+dmlzaXQpIHItPnZ0YmwtPnZpc2l0KHIsIHYsIGNsb3N1cmUpOwotfQotCi0jZW5k
aWYgIC8qIFVQQl9ERUJVR19SRUZTICovCi0KLQotLyogZnJlZXplKCkgKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
LyogVGhlIGZyZWV6ZSgpIG9wZXJhdGlvbiBpcyBieSBmYXIgdGhlIG1vc3QgY29tcGxpY2F0ZWQg
cGFydCBvZiB0aGlzIHNjaGVtZS4KLSAqIFdlIGNvbXB1dGUgc3Ryb25nbHktY29ubmVjdGVkIGNv
bXBvbmVudHMgYW5kIHRoZW4gbXV0YXRlIHRoZSBncmFwaCBzdWNoIHRoYXQKLSAqIHdlIHByZXNl
cnZlIHRoZSBpbnZhcmlhbnRzIGRvY3VtZW50ZWQgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuICBB
bmQgd2UgbXVzdAotICogaGFuZGxlIG91dC1vZi1tZW1vcnkgZXJyb3JzIGdyYWNlZnVsbHkgKHdp
dGhvdXQgbGVhdmluZyB0aGUgZ3JhcGgKLSAqIGluY29uc2lzdGVudCksIHdoaWNoIGFkZHMgdG8g
dGhlIGZ1bi4gKi8KLQotLyogVGhlIHN0YXRlIHVzZWQgYnkgdGhlIGZyZWV6ZSBvcGVyYXRpb24g
KHNoYXJlZCBhY3Jvc3MgbWFueSBmdW5jdGlvbnMpLiAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBp
bnQgZGVwdGg7Ci0gIGludCBtYXhkZXB0aDsKLSAgdWludDY0X3QgaW5kZXg7Ci0gIC8qIE1hcHMg
dXBiX3JlZmNvdW50ZWQqIC0+IGF0dHJpYnV0ZXMgKGNvbG9yLCBldGMpLiAgYXR0ciBsYXlvdXQg
dmFyaWVzIGJ5Ci0gICAqIGNvbG9yLiAqLwotICB1cGJfaW50dGFibGUgb2JqYXR0cjsKLSAgdXBi
X2ludHRhYmxlIHN0YWNrOyAgIC8qIHN0YWNrIG9mIHVwYl9yZWZjb3VudGVkKiBmb3IgVGFyamFu
J3MgYWxnb3JpdGhtLiAqLwotICB1cGJfaW50dGFibGUgZ3JvdXBzOyAgLyogYXJyYXkgb2YgdWlu
dDMyX3QqLCBtYWxsb2MnZCByZWZjb3VudHMgZm9yIG5ldyBncm91cHMgKi8KLSAgdXBiX3N0YXR1
cyAqc3RhdHVzOwotICBqbXBfYnVmIGVycjsKLX0gdGFyamFuOwotCi1zdGF0aWMgdm9pZCByZWxl
YXNlX3JlZjIoY29uc3QgdXBiX3JlZmNvdW50ZWQgKm9iaiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1cGJfcmVmY291bnRlZCAqc3Vib2JqLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKmNsb3N1cmUpOwotCi0vKiBOb2RlIGF0dHJpYnV0ZXMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBBZnRl
ciBvdXIgYW5hbHlzaXMgcGhhc2UgYWxsIG5vZGVzIHdpbGwgYmUgZWl0aGVyIEdSQVkgb3IgV0hJ
VEUuICovCi0KLXR5cGVkZWYgZW51bSB7Ci0gIEJMQUNLID0gMCwgIC8qIE9iamVjdCBoYXMgbm90
IGJlZW4gc2Vlbi4gKi8KLSAgR1JBWSwgICAvKiBPYmplY3QgaGFzIGJlZW4gZm91bmQgdmlhIGEg
cmVmZ3JvdXAgYnV0IG1heSBub3QgYmUgcmVhY2hhYmxlLiAqLwotICBHUkVFTiwgIC8qIE9iamVj
dCBpcyByZWFjaGFibGUgYW5kIGlzIGN1cnJlbnRseSBvbiB0aGUgVGFyamFuIHN0YWNrLiAqLwot
ICBXSElURSAgIC8qIE9iamVjdCBpcyByZWFjaGFibGUgYW5kIGhhcyBiZWVuIGFzc2lnbmVkIGEg
Z3JvdXAgKFNDQykuICovCi19IGNvbG9yX3Q7Ci0KLVVQQl9OT1JFVFVSTiBzdGF0aWMgdm9pZCBl
cnIodGFyamFuICp0KSB7IGxvbmdqbXAodC0+ZXJyLCAxKTsgfQotVVBCX05PUkVUVVJOIHN0YXRp
YyB2b2lkIG9vbSh0YXJqYW4gKnQpIHsKLSAgdXBiX3N0YXR1c19zZXRlcnJtc2codC0+c3RhdHVz
LCAib3V0IG9mIG1lbW9yeSIpOwotICBlcnIodCk7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdCB0cnln
ZXRhdHRyKGNvbnN0IHRhcmphbiAqdCwgY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIpIHsKLSAgdXBi
X3ZhbHVlIHY7Ci0gIHJldHVybiB1cGJfaW50dGFibGVfbG9va3VwcHRyKCZ0LT5vYmphdHRyLCBy
LCAmdikgPwotICAgICAgdXBiX3ZhbHVlX2dldHVpbnQ2NCh2KSA6IDA7Ci19Ci0KLXN0YXRpYyB1
aW50NjRfdCBnZXRhdHRyKGNvbnN0IHRhcmphbiAqdCwgY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIp
IHsKLSAgdXBiX3ZhbHVlIHY7Ci0gIGJvb2wgZm91bmQgPSB1cGJfaW50dGFibGVfbG9va3VwcHRy
KCZ0LT5vYmphdHRyLCByLCAmdik7Ci0gIFVQQl9BU1NFUlRfVkFSKGZvdW5kLCBmb3VuZCk7Ci0g
IHJldHVybiB1cGJfdmFsdWVfZ2V0dWludDY0KHYpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRhdHRy
KHRhcmphbiAqdCwgY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIHVpbnQ2NF90IGF0dHIpIHsKLSAg
dXBiX2ludHRhYmxlX3JlbW92ZXB0cigmdC0+b2JqYXR0ciwgciwgTlVMTCk7Ci0gIHVwYl9pbnR0
YWJsZV9pbnNlcnRwdHIoJnQtPm9iamF0dHIsIHIsIHVwYl92YWx1ZV91aW50NjQoYXR0cikpOwot
fQotCi1zdGF0aWMgY29sb3JfdCBjb2xvcih0YXJqYW4gKnQsIGNvbnN0IHVwYl9yZWZjb3VudGVk
ICpyKSB7Ci0gIHJldHVybiB0cnlnZXRhdHRyKHQsIHIpICYgMHgzOyAgLyogQ29sb3IgaXMgYWx3
YXlzIHN0b3JlZCBpbiB0aGUgbG93IDIgYml0cy4gKi8KLX0KLQotc3RhdGljIHZvaWQgc2V0X2dy
YXkodGFyamFuICp0LCBjb25zdCB1cGJfcmVmY291bnRlZCAqcikgewotICBhc3NlcnQoY29sb3Io
dCwgcikgPT0gQkxBQ0spOwotICBzZXRhdHRyKHQsIHIsIEdSQVkpOwotfQotCi0vKiBQdXNoZXMg
YW4gb2JqIG9udG8gdGhlIFRhcmphbiBzdGFjayBhbmQgc2V0cyBpdCB0byBHUkVFTi4gKi8KLXN0
YXRpYyB2b2lkIHB1c2godGFyamFuICp0LCBjb25zdCB1cGJfcmVmY291bnRlZCAqcikgewotICBh
c3NlcnQoY29sb3IodCwgcikgPT0gQkxBQ0sgfHwgY29sb3IodCwgcikgPT0gR1JBWSk7Ci0gIC8q
IFRoaXMgZGVmaW5lcyB0aGUgYXR0ciBsYXlvdXQgZm9yIHRoZSBHUkVFTiBzdGF0ZS4gICJpbmRl
eCIgYW5kICJsb3dsaW5rIgotICAgKiBnZXQgMzEgYml0cywgd2hpY2ggaXMgcGxlbnR5IChsaW1p
dCBvZiAyQiBvYmplY3RzIGZyb3plbiBhdCBhIHRpbWUpLiAqLwotICBzZXRhdHRyKHQsIHIsIEdS
RUVOIHwgKHQtPmluZGV4IDw8IDIpIHwgKHQtPmluZGV4IDw8IDMzKSk7Ci0gIGlmICgrK3QtPmlu
ZGV4ID09IDB4ODAwMDAwMDApIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyh0LT5zdGF0dXMs
ICJ0b28gbWFueSBvYmplY3RzIHRvIGZyZWV6ZSIpOwotICAgIGVycih0KTsKLSAgfQotICB1cGJf
aW50dGFibGVfcHVzaCgmdC0+c3RhY2ssIHVwYl92YWx1ZV9wdHIoKHZvaWQqKXIpKTsKLX0KLQot
LyogUG9wcyBhbiBvYmogZnJvbSB0aGUgVGFyamFuIHN0YWNrIGFuZCBzZXRzIGl0IHRvIFdISVRF
LCB3aXRoIGEgcHRyIHRvIGl0cwotICogU0NDIGdyb3VwLiAqLwotc3RhdGljIHVwYl9yZWZjb3Vu
dGVkICpwb3AodGFyamFuICp0KSB7Ci0gIHVwYl9yZWZjb3VudGVkICpyID0gdXBiX3ZhbHVlX2dl
dHB0cih1cGJfaW50dGFibGVfcG9wKCZ0LT5zdGFjaykpOwotICBhc3NlcnQoY29sb3IodCwgcikg
PT0gR1JFRU4pOwotICAvKiBUaGlzIGRlZmluZXMgdGhlIGF0dHIgbGF5b3V0IGZvciBub2RlcyBp
biB0aGUgV0hJVEUgc3RhdGUuCi0gICAqIFRvcCBvZiBncm91cCBzdGFjayBpcyBbZ3JvdXAsIE5V
TExdOyB3ZSBwb2ludCBhdCBncm91cC4gKi8KLSAgc2V0YXR0cih0LCByLCBXSElURSB8ICh1cGJf
aW50dGFibGVfY291bnQoJnQtPmdyb3VwcykgLSAyKSA8PCA4KTsKLSAgcmV0dXJuIHI7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRhcmphbl9uZXdncm91cCh0YXJqYW4gKnQpIHsKLSAgdWludDMyX3QgKmdy
b3VwID0gbWFsbG9jKHNpemVvZigqZ3JvdXApKTsKLSAgaWYgKCFncm91cCkgb29tKHQpOwotICAv
KiBQdXNoIGdyb3VwIGFuZCBlbXB0eSBncm91cCBsZWFkZXIgKHdlJ2xsIGZpbGwgaW4gbGVhZGVy
IGxhdGVyKS4gKi8KLSAgaWYgKCF1cGJfaW50dGFibGVfcHVzaCgmdC0+Z3JvdXBzLCB1cGJfdmFs
dWVfcHRyKGdyb3VwKSkgfHwKLSAgICAgICF1cGJfaW50dGFibGVfcHVzaCgmdC0+Z3JvdXBzLCB1
cGJfdmFsdWVfcHRyKE5VTEwpKSkgewotICAgIGZyZWUoZ3JvdXApOwotICAgIG9vbSh0KTsKLSAg
fQotICAqZ3JvdXAgPSAwOwotfQotCi1zdGF0aWMgdWludDMyX3QgaWR4KHRhcmphbiAqdCwgY29u
c3QgdXBiX3JlZmNvdW50ZWQgKnIpIHsKLSAgYXNzZXJ0KGNvbG9yKHQsIHIpID09IEdSRUVOKTsK
LSAgcmV0dXJuIChnZXRhdHRyKHQsIHIpID4+IDIpICYgMHg3RkZGRkZGRjsKLX0KLQotc3RhdGlj
IHVpbnQzMl90IGxvd2xpbmsodGFyamFuICp0LCBjb25zdCB1cGJfcmVmY291bnRlZCAqcikgewot
ICBpZiAoY29sb3IodCwgcikgPT0gR1JFRU4pIHsKLSAgICByZXR1cm4gZ2V0YXR0cih0LCByKSA+
PiAzMzsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gVUlOVDMyX01BWDsKLSAgfQotfQotCi1zdGF0
aWMgdm9pZCBzZXRfbG93bGluayh0YXJqYW4gKnQsIGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLCB1
aW50MzJfdCBsb3dsaW5rKSB7Ci0gIGFzc2VydChjb2xvcih0LCByKSA9PSBHUkVFTik7Ci0gIHNl
dGF0dHIodCwgciwgKCh1aW50NjRfdClsb3dsaW5rIDw8IDMzKSB8IChnZXRhdHRyKHQsIHIpICYg
MHgxRkZGRkZGRkYpKTsKLX0KLQotc3RhdGljIHVpbnQzMl90ICpncm91cCh0YXJqYW4gKnQsIHVw
Yl9yZWZjb3VudGVkICpyKSB7Ci0gIHVpbnQ2NF90IGdyb3VwbnVtOwotICB1cGJfdmFsdWUgdjsK
LSAgYm9vbCBmb3VuZDsKLQotICBhc3NlcnQoY29sb3IodCwgcikgPT0gV0hJVEUpOwotICBncm91
cG51bSA9IGdldGF0dHIodCwgcikgPj4gODsKLSAgZm91bmQgPSB1cGJfaW50dGFibGVfbG9va3Vw
KCZ0LT5ncm91cHMsIGdyb3VwbnVtLCAmdik7Ci0gIFVQQl9BU1NFUlRfVkFSKGZvdW5kLCBmb3Vu
ZCk7Ci0gIHJldHVybiB1cGJfdmFsdWVfZ2V0cHRyKHYpOwotfQotCi0vKiBJZiB0aGUgZ3JvdXAg
bGVhZGVyIGZvciB0aGlzIG9iamVjdCdzIGdyb3VwIGhhcyBub3QgcHJldmlvdXNseSBiZWVuIHNl
dCwKLSAqIHRoZSBnaXZlbiBvYmplY3QgaXMgYXNzaWduZWQgdG8gYmUgaXRzIGxlYWRlci4gKi8K
LXN0YXRpYyB1cGJfcmVmY291bnRlZCAqZ3JvdXBsZWFkZXIodGFyamFuICp0LCB1cGJfcmVmY291
bnRlZCAqcikgewotICB1aW50NjRfdCBsZWFkZXJfc2xvdDsKLSAgdXBiX3ZhbHVlIHY7Ci0gIGJv
b2wgZm91bmQ7Ci0KLSAgYXNzZXJ0KGNvbG9yKHQsIHIpID09IFdISVRFKTsKLSAgbGVhZGVyX3Ns
b3QgPSAoZ2V0YXR0cih0LCByKSA+PiA4KSArIDE7Ci0gIGZvdW5kID0gdXBiX2ludHRhYmxlX2xv
b2t1cCgmdC0+Z3JvdXBzLCBsZWFkZXJfc2xvdCwgJnYpOwotICBVUEJfQVNTRVJUX1ZBUihmb3Vu
ZCwgZm91bmQpOwotICBpZiAodXBiX3ZhbHVlX2dldHB0cih2KSkgewotICAgIHJldHVybiB1cGJf
dmFsdWVfZ2V0cHRyKHYpOwotICB9IGVsc2UgewotICAgIHVwYl9pbnR0YWJsZV9yZW1vdmUoJnQt
Pmdyb3VwcywgbGVhZGVyX3Nsb3QsIE5VTEwpOwotICAgIHVwYl9pbnR0YWJsZV9pbnNlcnQoJnQt
Pmdyb3VwcywgbGVhZGVyX3Nsb3QsIHVwYl92YWx1ZV9wdHIocikpOwotICAgIHJldHVybiByOwot
ICB9Ci19Ci0KLQotLyogVGFyamFuJ3MgYWxnb3JpdGhtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogU2VlOgotICogICBodHRw
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RhcmphbiUyN3Nfc3Ryb25nbHlfY29ubmVjdGVkX2Nv
bXBvbmVudHNfYWxnb3JpdGhtICovCi1zdGF0aWMgdm9pZCBkb190YXJqYW4oY29uc3QgdXBiX3Jl
ZmNvdW50ZWQgKm9iaiwgdGFyamFuICp0KTsKLQotc3RhdGljIHZvaWQgdGFyamFuX3Zpc2l0KGNv
bnN0IHVwYl9yZWZjb3VudGVkICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dXBiX3JlZmNvdW50ZWQgKnN1Ym9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpj
bG9zdXJlKSB7Ci0gIHRhcmphbiAqdCA9IGNsb3N1cmU7Ci0gIGlmICgrK3QtPmRlcHRoID4gdC0+
bWF4ZGVwdGgpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycmYodC0+c3RhdHVzLCAiZ3JhcGggdG9v
IGRlZXAgdG8gZnJlZXplICglZCkiLCB0LT5tYXhkZXB0aCk7Ci0gICAgZXJyKHQpOwotICB9IGVs
c2UgaWYgKHN1Ym9iai0+aXNfZnJvemVuIHx8IGNvbG9yKHQsIHN1Ym9iaikgPT0gV0hJVEUpIHsK
LSAgICAvKiBEbyBub3RoaW5nOiB3ZSBkb24ndCB3YW50IHRvIHZpc2l0IG9yIGNvbG9yIGFscmVh
ZHktZnJvemVuIG5vZGVzLAotICAgICAqIGFuZCBXSElURSBub2RlcyBoYXZlIGFscmVhZHkgYmVl
biBhc3NpZ25lZCBhIFNDQy4gKi8KLSAgfSBlbHNlIGlmIChjb2xvcih0LCBzdWJvYmopIDwgR1JF
RU4pIHsKLSAgICAvKiBTdWJkZWYgaGFzIG5vdCB5ZXQgYmVlbiB2aXNpdGVkOyByZWN1cnNlIG9u
IGl0LiAqLwotICAgIGRvX3RhcmphbihzdWJvYmosIHQpOwotICAgIHNldF9sb3dsaW5rKHQsIG9i
aiwgVVBCX01JTihsb3dsaW5rKHQsIG9iaiksIGxvd2xpbmsodCwgc3Vib2JqKSkpOwotICB9IGVs
c2UgaWYgKGNvbG9yKHQsIHN1Ym9iaikgPT0gR1JFRU4pIHsKLSAgICAvKiBTdWJkZWYgaXMgaW4g
dGhlIHN0YWNrIGFuZCBoZW5jZSBpbiB0aGUgY3VycmVudCBTQ0MuICovCi0gICAgc2V0X2xvd2xp
bmsodCwgb2JqLCBVUEJfTUlOKGxvd2xpbmsodCwgb2JqKSwgaWR4KHQsIHN1Ym9iaikpKTsKLSAg
fQotICAtLXQtPmRlcHRoOwotfQotCi1zdGF0aWMgdm9pZCBkb190YXJqYW4oY29uc3QgdXBiX3Jl
ZmNvdW50ZWQgKm9iaiwgdGFyamFuICp0KSB7Ci0gIGlmIChjb2xvcih0LCBvYmopID09IEJMQUNL
KSB7Ci0gICAgLyogV2UgaGF2ZW4ndCBzZWVuIHRoaXMgb2JqZWN0J3MgZ3JvdXA7IG1hcmsgdGhl
IHdob2xlIGdyb3VwIEdSQVkuICovCi0gICAgY29uc3QgdXBiX3JlZmNvdW50ZWQgKm8gPSBvYmo7
Ci0gICAgZG8geyBzZXRfZ3JheSh0LCBvKTsgfSB3aGlsZSAoKG8gPSBvLT5uZXh0KSAhPSBvYmop
OwotICB9Ci0KLSAgcHVzaCh0LCBvYmopOwotICB2aXNpdChvYmosIHRhcmphbl92aXNpdCwgdCk7
Ci0gIGlmIChsb3dsaW5rKHQsIG9iaikgPT0gaWR4KHQsIG9iaikpIHsKLSAgICB0YXJqYW5fbmV3
Z3JvdXAodCk7Ci0gICAgd2hpbGUgKHBvcCh0KSAhPSBvYmopCi0gICAgICA7Ci0gIH0KLX0KLQot
Ci0vKiBmcmVlemUoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZCBjcm9zc3JlZihjb25zdCB1
cGJfcmVmY291bnRlZCAqciwgY29uc3QgdXBiX3JlZmNvdW50ZWQgKnN1Ym9iaiwKLSAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKl90KSB7Ci0gIHRhcmphbiAqdCA9IF90OwotICBhc3NlcnQoY29s
b3IodCwgcikgPiBCTEFDSyk7Ci0gIGlmIChjb2xvcih0LCBzdWJvYmopID4gQkxBQ0sgJiYgci0+
Z3JvdXAgIT0gc3Vib2JqLT5ncm91cCkgewotICAgIC8qIFByZXZpb3VzbHkgdGhpcyByZWYgd2Fz
IG5vdCByZWZsZWN0ZWQgaW4gc3Vib2JqLT5ncm91cCBiZWNhdXNlIHRoZXkKLSAgICAgKiB3ZXJl
IGluIHRoZSBzYW1lIGdyb3VwOyBub3cgdGhhdCB0aGV5IGFyZSBzcGxpdCBhIHJlZiBtdXN0IGJl
IHRha2VuLiAqLwotICAgIHJlZmdyb3VwKHN1Ym9iai0+Z3JvdXApOwotICB9Ci19Ci0KLXN0YXRp
YyBib29sIGZyZWV6ZSh1cGJfcmVmY291bnRlZCAqY29uc3Qqcm9vdHMsIGludCBuLCB1cGJfc3Rh
dHVzICpzLAotICAgICAgICAgICAgICAgICAgIGludCBtYXhkZXB0aCkgewotICB2b2xhdGlsZSBi
b29sIHJldCA9IGZhbHNlOwotICBpbnQgaTsKLSAgdXBiX2ludHRhYmxlX2l0ZXIgaXRlcjsKLQot
ICAvKiBXZSBydW4gaW4gdHdvIHBhc3NlcyBzbyB0aGF0IHdlIGNhbiBhbGxvY2F0ZSBhbGwgbWVt
b3J5IGJlZm9yZSBwZXJmb3JtaW5nCi0gICAqIGFueSBtdXRhdGlvbiBvZiB0aGUgaW5wdXQgLS0g
dGhpcyBhbGxvd3MgdXMgdG8gbGVhdmUgdGhlIGlucHV0IHVuY2hhbmdlZAotICAgKiBpbiB0aGUg
Y2FzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiAqLwotICB0YXJqYW4gdDsKLSAgdC5p
bmRleCA9IDA7Ci0gIHQuZGVwdGggPSAwOwotICB0Lm1heGRlcHRoID0gbWF4ZGVwdGg7Ci0gIHQu
c3RhdHVzID0gczsKLSAgaWYgKCF1cGJfaW50dGFibGVfaW5pdCgmdC5vYmphdHRyLCBVUEJfQ1RZ
UEVfVUlOVDY0KSkgZ290byBlcnIxOwotICBpZiAoIXVwYl9pbnR0YWJsZV9pbml0KCZ0LnN0YWNr
LCBVUEJfQ1RZUEVfUFRSKSkgZ290byBlcnIyOwotICBpZiAoIXVwYl9pbnR0YWJsZV9pbml0KCZ0
Lmdyb3VwcywgVVBCX0NUWVBFX1BUUikpIGdvdG8gZXJyMzsKLSAgaWYgKHNldGptcCh0LmVycikg
IT0gMCkgZ290byBlcnI0OwotCi0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIGlm
IChjb2xvcigmdCwgcm9vdHNbaV0pIDwgR1JFRU4pIHsKLSAgICAgIGRvX3Rhcmphbihyb290c1tp
XSwgJnQpOwotICAgIH0KLSAgfQotCi0gIC8qIElmIHdlJ3ZlIG1hZGUgaXQgdGhpcyBmYXIsIG5v
IGZ1cnRoZXIgZXJyb3JzIGFyZSBwb3NzaWJsZSBzbyBpdCdzIHNhZmUgdG8KLSAgICogbXV0YXRl
IHRoZSBvYmplY3RzIHdpdGhvdXQgcmlzayBvZiBsZWF2aW5nIHRoZW0gaW4gYW4gaW5jb25zaXN0
ZW50IHN0YXRlLiAqLwotICByZXQgPSB0cnVlOwotCi0gIC8qIFRoZSB0cmFuc2Zvcm1hdGlvbiB0
aGF0IGZvbGxvd3MgcmVxdWlyZXMgY2FyZS4gIFRoZSBwcmVjb25kaXRpb25zIGFyZToKLSAgICog
LSBhbGwgb2JqZWN0cyBpbiBhdHRyIG1hcCBhcmUgV0hJVEUgb3IgR1JBWSwgYW5kIGFyZSBpbiBt
dXRhYmxlIGdyb3VwcwotICAgKiAgIChncm91cHMgb2YgYWxsIG11dGFibGUgb2JqcykKLSAgICog
LSBubyByZWYyKHRvLCBmcm9tKSByZWZzIGhhdmUgaW5jcmVtZW50ZWQgY291bnQodG8pIGlmIGJv
dGggInRvIiBhbmQKLSAgICogICAiZnJvbSIgYXJlIGluIG91ciBhdHRyIG1hcCAodGhpcyBmb2xs
b3dzIGZyb20gaW52YXJpYW50cyAoMikgYW5kICgzKSkgKi8KLQotICAvKiBQYXNzIDE6IHdlIHJl
bW92ZSBXSElURSBvYmplY3RzIGZyb20gdGhlaXIgbXV0YWJsZSBncm91cHMsIGFuZCBhZGQgdGhl
bSB0bwotICAgKiBuZXcgZ3JvdXBzICBhY2NvcmRpbmcgdG8gdGhlIFNDQydzIHdlIGNvbXB1dGVk
LiAgVGhlc2UgbmV3IGdyb3VwcyB3aWxsCi0gICAqIGNvbnNpc3Qgb2Ygb25seSBmcm96ZW4gb2Jq
ZWN0cy4gIE5vbmUgd2lsbCBiZSBpbW1lZGlhdGVseSBjb2xsZWN0aWJsZSwKLSAgICogYmVjYXVz
ZSBXSElURSBvYmplY3RzIGFyZSBieSBkZWZpbml0aW9uIHJlYWNoYWJsZSBmcm9tIG9uZSBvZiAi
cm9vdHMiLAotICAgKiB3aGljaCB0aGUgY2FsbGVyIG11c3Qgb3duIHJlZnMgb24uICovCi0gIHVw
Yl9pbnR0YWJsZV9iZWdpbigmaXRlciwgJnQub2JqYXR0cik7Ci0gIGZvcig7ICF1cGJfaW50dGFi
bGVfZG9uZSgmaXRlcik7IHVwYl9pbnR0YWJsZV9uZXh0KCZpdGVyKSkgewotICAgIHVwYl9yZWZj
b3VudGVkICpvYmogPSAodXBiX3JlZmNvdW50ZWQqKXVwYl9pbnR0YWJsZV9pdGVyX2tleSgmaXRl
cik7Ci0gICAgLyogU2luY2UgcmVtb3ZhbCBmcm9tIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHJlcXVp
cmVzIGFjY2VzcyB0byB0aGUgb2JqZWN0J3MKLSAgICAgKiBwcmVkZWNlc3Nvciwgd2UgY29uc2lk
ZXIgb2JqLT5uZXh0IGluc3RlYWQgb2Ygb2JqIGZvciBtb3ZpbmcuICBXaXRoIHRoZQotICAgICAq
IHdoaWxlKCkgbG9vcCB3ZSBndWFyYW50ZWUgdGhhdCB3ZSB3aWxsIHZpc2l0IGV2ZXJ5IG5vZGUn
cyBwcmVkZWNlc3Nvci4KLSAgICAgKiBQcm9vZjoKLSAgICAgKiAgMS4gZXZlcnkgbm9kZSdzIHBy
ZWRlY2Vzc29yIGlzIGluIG91ciBhdHRyIG1hcC4KLSAgICAgKiAgMi4gdGhvdWdoIHRoZSBsb29w
IGJvZHkgbWF5IGNoYW5nZSBhIG5vZGUncyBwcmVkZWNlc3NvciwgaXQgd2lsbCBvbmx5Ci0gICAg
ICogICAgIGNoYW5nZSBpdCB0byBiZSB0aGUgbm9kZSB3ZSBhcmUgY3VycmVudGx5IG9wZXJhdGlu
ZyBvbiwgc28gd2l0aCBhCi0gICAgICogICAgIHdoaWxlKCkgbG9vcCB3ZSBndWFyYW50ZWUgb3Vy
c2VsdmVzIHRoZSBjaGFuY2UgdG8gcmVtb3ZlIGVhY2ggbm9kZS4gKi8KLSAgICB3aGlsZSAoY29s
b3IoJnQsIG9iai0+bmV4dCkgPT0gV0hJVEUgJiYKLSAgICAgICAgICAgZ3JvdXAoJnQsIG9iai0+
bmV4dCkgIT0gb2JqLT5uZXh0LT5ncm91cCkgewotICAgICAgdXBiX3JlZmNvdW50ZWQgKmxlYWRl
cjsKLQotICAgICAgLyogUmVtb3ZlIGZyb20gb2xkIGdyb3VwLiAqLwotICAgICAgdXBiX3JlZmNv
dW50ZWQgKm1vdmUgPSBvYmotPm5leHQ7Ci0gICAgICBpZiAob2JqID09IG1vdmUpIHsKLSAgICAg
ICAgLyogUmVtb3ZpbmcgdGhlIGxhc3Qgb2JqZWN0IGZyb20gYSBncm91cC4gKi8KLSAgICAgICAg
YXNzZXJ0KCpvYmotPmdyb3VwID09IG9iai0+aW5kaXZpZHVhbF9jb3VudCk7Ci0gICAgICAgIGZy
ZWUob2JqLT5ncm91cCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBvYmotPm5leHQgPSBtb3Zl
LT5uZXh0OwotICAgICAgICAvKiBUaGlzIG1heSBkZWNyZWFzZSB0byB6ZXJvOyB3ZSdsbCBjb2xs
ZWN0IEdSQVkgb2JqZWN0cyAoaWYgYW55KSB0aGF0Ci0gICAgICAgICAqIHJlbWFpbiBpbiB0aGUg
Z3JvdXAgaW4gdGhlIHRoaXJkIHBhc3MuICovCi0gICAgICAgIGFzc2VydCgqbW92ZS0+Z3JvdXAg
Pj0gbW92ZS0+aW5kaXZpZHVhbF9jb3VudCk7Ci0gICAgICAgICptb3ZlLT5ncm91cCAtPSBtb3Zl
LT5pbmRpdmlkdWFsX2NvdW50OwotICAgICAgfQotCi0gICAgICAvKiBBZGQgdG8gbmV3IGdyb3Vw
LiAqLwotICAgICAgbGVhZGVyID0gZ3JvdXBsZWFkZXIoJnQsIG1vdmUpOwotICAgICAgaWYgKG1v
dmUgPT0gbGVhZGVyKSB7Ci0gICAgICAgIC8qIEZpcnN0IG9iamVjdCBhZGRlZCB0byBuZXcgZ3Jv
dXAgaXMgaXRzIGxlYWRlci4gKi8KLSAgICAgICAgbW92ZS0+Z3JvdXAgPSBncm91cCgmdCwgbW92
ZSk7Ci0gICAgICAgIG1vdmUtPm5leHQgPSBtb3ZlOwotICAgICAgICAqbW92ZS0+Z3JvdXAgPSBt
b3ZlLT5pbmRpdmlkdWFsX2NvdW50OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogR3JvdXAg
YWxyZWFkeSBoYXMgYXQgbGVhc3Qgb25lIG9iamVjdCBpbiBpdC4gKi8KLSAgICAgICAgYXNzZXJ0
KGxlYWRlci0+Z3JvdXAgPT0gZ3JvdXAoJnQsIG1vdmUpKTsKLSAgICAgICAgbW92ZS0+Z3JvdXAg
PSBncm91cCgmdCwgbW92ZSk7Ci0gICAgICAgIG1vdmUtPm5leHQgPSBsZWFkZXItPm5leHQ7Ci0g
ICAgICAgIGxlYWRlci0+bmV4dCA9IG1vdmU7Ci0gICAgICAgICptb3ZlLT5ncm91cCArPSBtb3Zl
LT5pbmRpdmlkdWFsX2NvdW50OwotICAgICAgfQotCi0gICAgICBtb3ZlLT5pc19mcm96ZW4gPSB0
cnVlOwotICAgIH0KLSAgfQotCi0gIC8qIFBhc3MgMjogR1JBWSBhbmQgV0hJVEUgb2JqZWN0cyAi
b2JqIiB3aXRoIHJlZjIodG8sIG9iaikgcmVmZXJlbmNlcyBtdXN0Ci0gICAqIGluY3JlbWVudCBj
b3VudCh0bykgaWYgZ3JvdXAob2JqKSAhPSBncm91cCh0bykgKHdoaWNoIGNvdWxkIG5vdyBiZSB0
aGUKLSAgICogY2FzZSBpZiAidG8iIHdhcyBqdXN0IGZyb3plbikuICovCi0gIHVwYl9pbnR0YWJs
ZV9iZWdpbigmaXRlciwgJnQub2JqYXR0cik7Ci0gIGZvcig7ICF1cGJfaW50dGFibGVfZG9uZSgm
aXRlcik7IHVwYl9pbnR0YWJsZV9uZXh0KCZpdGVyKSkgewotICAgIHVwYl9yZWZjb3VudGVkICpv
YmogPSAodXBiX3JlZmNvdW50ZWQqKXVwYl9pbnR0YWJsZV9pdGVyX2tleSgmaXRlcik7Ci0gICAg
dmlzaXQob2JqLCBjcm9zc3JlZiwgJnQpOwotICB9Ci0KLSAgLyogUGFzcyAzOiBHUkFZIG9iamVj
dHMgYXJlIGNvbGxlY3RlZCBpZiB0aGVpciBncm91cCdzIHJlZmNvdW50IGRyb3BwZWQgdG8KLSAg
ICogemVybyB3aGVuIHdlIHJlbW92ZWQgaXRzIHdoaXRlIG5vZGVzLiAgVGhpcyBjYW4gaGFwcGVu
IGlmIHRoZXkgaGFkIG9ubHkKLSAgICogYmVlbiBrZXB0IGFsaXZlIGJ5IHZpcnR1ZSBvZiBzaGFy
aW5nIGEgZ3JvdXAgd2l0aCBhbiBvYmplY3QgdGhhdCB3YXMganVzdAotICAgKiBmcm96ZW4uCi0g
ICAqCi0gICAqIEl0IGlzIGltcG9ydGFudCB0aGF0IHdlIGRvIHRoaXMgbGFzdCwgc2luY2UgdGhl
IEdSQVkgb2JqZWN0J3MgZnJlZSgpCi0gICAqIGZ1bmN0aW9uIGNvdWxkIGNhbGwgdW5yZWYyKCkg
b24ganVzdC1mcm96ZW4gb2JqZWN0cywgd2hpY2ggd2lsbCBkZWNyZW1lbnQKLSAgICogcmVmcyB0
aGF0IHdlcmUgYWRkZWQgaW4gcGFzcyAyLiAqLwotICB1cGJfaW50dGFibGVfYmVnaW4oJml0ZXIs
ICZ0Lm9iamF0dHIpOwotICBmb3IoOyAhdXBiX2ludHRhYmxlX2RvbmUoJml0ZXIpOyB1cGJfaW50
dGFibGVfbmV4dCgmaXRlcikpIHsKLSAgICB1cGJfcmVmY291bnRlZCAqb2JqID0gKHVwYl9yZWZj
b3VudGVkKil1cGJfaW50dGFibGVfaXRlcl9rZXkoJml0ZXIpOwotICAgIGlmIChvYmotPmdyb3Vw
ID09IE5VTEwgfHwgKm9iai0+Z3JvdXAgPT0gMCkgewotICAgICAgaWYgKG9iai0+Z3JvdXApIHsK
LSAgICAgICAgdXBiX3JlZmNvdW50ZWQgKm87Ci0KLSAgICAgICAgLyogV2UgZWFnZXJseSBmcmVl
KCkgdGhlIGdyb3VwJ3MgY291bnQgKHNpbmNlIHdlIGNhbid0IGVhc2lseSBkZXRlcm1pbmUKLSAg
ICAgICAgICogdGhlIGdyb3VwJ3MgcmVtYWluaW5nIHNpemUgaXQncyB0aGUgZWFzaWVzdCB3YXkg
dG8gZW5zdXJlIGl0IGdldHMKLSAgICAgICAgICogZG9uZSkuICovCi0gICAgICAgIGZyZWUob2Jq
LT5ncm91cCk7Ci0KLSAgICAgICAgLyogVmlzaXQgdG8gcmVsZWFzZSByZWYyJ3MgKGRvbmUgaW4g
YSBzZXBhcmF0ZSBwYXNzIHNpbmNlIHJlbGVhc2VfcmVmMgotICAgICAgICAgKiBkZXBlbmRzIG9u
IG8tPmdyb3VwIGJlaW5nIHVubW9kaWZpZWQgc28gaXQgY2FuIHRlc3QgbWVyZ2VkKCkpLiAqLwot
ICAgICAgICBvID0gb2JqOwotICAgICAgICBkbyB7IHZpc2l0KG8sIHJlbGVhc2VfcmVmMiwgTlVM
TCk7IH0gd2hpbGUgKChvID0gby0+bmV4dCkgIT0gb2JqKTsKLQotICAgICAgICAvKiBNYXJrICJn
cm91cCIgZmllbGRzIGFzIE5VTEwgc28gd2Uga25vdyB0byBmcmVlIHRoZSBvYmplY3RzIGxhdGVy
IGluCi0gICAgICAgICAqIHRoaXMgbG9vcCwgYnV0IGFsc28gZG9uJ3QgdHJ5IHRvIGRlbGV0ZSB0
aGUgZ3JvdXAgdHdpY2UuICovCi0gICAgICAgIG8gPSBvYmo7Ci0gICAgICAgIGRvIHsgby0+Z3Jv
dXAgPSBOVUxMOyB9IHdoaWxlICgobyA9IG8tPm5leHQpICE9IG9iaik7Ci0gICAgICB9Ci0gICAg
ICBmcmVlb2JqKG9iaik7Ci0gICAgfQotICB9Ci0KLWVycjQ6Ci0gIGlmICghcmV0KSB7Ci0gICAg
dXBiX2ludHRhYmxlX2JlZ2luKCZpdGVyLCAmdC5ncm91cHMpOwotICAgIGZvcig7ICF1cGJfaW50
dGFibGVfZG9uZSgmaXRlcik7IHVwYl9pbnR0YWJsZV9uZXh0KCZpdGVyKSkKLSAgICAgIGZyZWUo
dXBiX3ZhbHVlX2dldHB0cih1cGJfaW50dGFibGVfaXRlcl92YWx1ZSgmaXRlcikpKTsKLSAgfQot
ICB1cGJfaW50dGFibGVfdW5pbml0KCZ0Lmdyb3Vwcyk7Ci1lcnIzOgotICB1cGJfaW50dGFibGVf
dW5pbml0KCZ0LnN0YWNrKTsKLWVycjI6Ci0gIHVwYl9pbnR0YWJsZV91bmluaXQoJnQub2JqYXR0
cik7Ci1lcnIxOgotICByZXR1cm4gcmV0OwotfQotCi0KLS8qIE1pc2MgaW50ZXJuYWwgZnVuY3Rp
b25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0KLXN0YXRpYyBib29sIG1lcmdlZChjb25zdCB1cGJfcmVmY291bnRlZCAqciwgY29uc3QgdXBi
X3JlZmNvdW50ZWQgKnIyKSB7Ci0gIHJldHVybiByLT5ncm91cCA9PSByMi0+Z3JvdXA7Ci19Ci0K
LXN0YXRpYyB2b2lkIG1lcmdlKHVwYl9yZWZjb3VudGVkICpyLCB1cGJfcmVmY291bnRlZCAqZnJv
bSkgewotICB1cGJfcmVmY291bnRlZCAqYmFzZTsKLSAgdXBiX3JlZmNvdW50ZWQgKnRtcDsKLQot
ICBpZiAobWVyZ2VkKHIsIGZyb20pKSByZXR1cm47Ci0gICpyLT5ncm91cCArPSAqZnJvbS0+Z3Jv
dXA7Ci0gIGZyZWUoZnJvbS0+Z3JvdXApOwotICBiYXNlID0gZnJvbTsKLQotICAvKiBTZXQgYWxs
IHJlZmNvdW50IHBvaW50ZXJzIGluIHRoZSAiZnJvbSIgY2hhaW4gdG8gdGhlIG1lcmdlZCByZWZj
b3VudC4KLSAgICoKLSAgICogVE9ETyhoYWJlcm1hbik6IHRoaXMgbGluZWFyIGFsZ29yaXRobSBj
YW4gcmVzdWx0IGluIGFuIG92ZXJhbGwgTyhuXjIpIGJvdW5kCi0gICAqIGlmIHRoZSB1c2VyIGNv
bnRpbnVvdXNseSBleHRlbmRzIGEgZ3JvdXAgYnkgb25lIG9iamVjdC4gIFByZXZlbnQgdGhpcyBi
eQotICAgKiB1c2luZyBvbmUgb2YgdGhlIHRlY2huaXF1ZXMgaW4gdGhpcyBwYXBlcjoKLSAgICog
ICAgIGZ0cDovL3d3dy5uY2VkYy5vcmcvb3V0Z29pbmcvZ2VvbW9ycGgvZGluby9vcmFscy9wMjQ1
LXRhcmphbi5wZGYgKi8KLSAgZG8geyBmcm9tLT5ncm91cCA9IHItPmdyb3VwOyB9IHdoaWxlICgo
ZnJvbSA9IGZyb20tPm5leHQpICE9IGJhc2UpOwotCi0gIC8qIE1lcmdlIHRoZSB0d28gY2lyY3Vs
YXJseSBsaW5rZWQgbGlzdHMgYnkgc3dhcHBpbmcgdGhlaXIgbmV4dCBwb2ludGVycy4gKi8KLSAg
dG1wID0gci0+bmV4dDsKLSAgci0+bmV4dCA9IGJhc2UtPm5leHQ7Ci0gIGJhc2UtPm5leHQgPSB0
bXA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVucmVmKGNvbnN0IHVwYl9yZWZjb3VudGVkICpyKTsKLQot
c3RhdGljIHZvaWQgcmVsZWFzZV9yZWYyKGNvbnN0IHVwYl9yZWZjb3VudGVkICpvYmosCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX3JlZmNvdW50ZWQgKnN1Ym9iaiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIFVQQl9VTlVTRUQoY2xvc3Vy
ZSk7Ci0gIHVudHJhY2soc3Vib2JqLCBvYmosIHRydWUpOwotICBpZiAoIW1lcmdlZChvYmosIHN1
Ym9iaikpIHsKLSAgICBhc3NlcnQoc3Vib2JqLT5pc19mcm96ZW4pOwotICAgIHVucmVmKHN1Ym9i
aik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgdW5yZWYoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIp
IHsKLSAgaWYgKHVucmVmZ3JvdXAoci0+Z3JvdXApKSB7Ci0gICAgY29uc3QgdXBiX3JlZmNvdW50
ZWQgKm87Ci0KLSAgICBmcmVlKHItPmdyb3VwKTsKLQotICAgIC8qIEluIHR3byBwYXNzZXMsIHNp
bmNlIHJlbGVhc2VfcmVmMiBuZWVkcyBhIGd1YXJhbnRlZSB0aGF0IGFueSBzdWJvYmpzCi0gICAg
ICogYXJlIGFsaXZlLiAqLwotICAgIG8gPSByOwotICAgIGRvIHsgdmlzaXQobywgcmVsZWFzZV9y
ZWYyLCBOVUxMKTsgfSB3aGlsZSgobyA9IG8tPm5leHQpICE9IHIpOwotCi0gICAgbyA9IHI7Ci0g
ICAgZG8gewotICAgICAgY29uc3QgdXBiX3JlZmNvdW50ZWQgKm5leHQgPSBvLT5uZXh0OwotICAg
ICAgYXNzZXJ0KG8tPmlzX2Zyb3plbiB8fCBvLT5pbmRpdmlkdWFsX2NvdW50ID09IDApOwotICAg
ICAgZnJlZW9iaigodXBiX3JlZmNvdW50ZWQqKW8pOwotICAgICAgbyA9IG5leHQ7Ci0gICAgfSB3
aGlsZShvICE9IHIpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVvYmoodXBiX3JlZmNvdW50
ZWQgKm8pIHsKLSAgdHJhY2tmcmVlKG8pOwotICBvLT52dGJsLT5mcmVlKCh1cGJfcmVmY291bnRl
ZCopbyk7Ci19Ci0KLQotLyogUHVibGljIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYm9vbCB1cGJfcmVmY291
bnRlZF9pbml0KHVwYl9yZWZjb3VudGVkICpyLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cnVjdCB1cGJfcmVmY291bnRlZF92dGJsICp2dGJsLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAvKiBFbmRpYW5u
ZXNzIGNoZWNrLiAgVGhpcyBpcyB1bnJlbGF0ZWQgdG8gdXBiX3JlZmNvdW50ZWQsIGl0J3MganVz
dCBhCi0gICAqIGNvbnZlbmllbnQgcGxhY2UgdG8gcHV0IHRoZSBjaGVjayB0aGF0IHdlIGNhbiBi
ZSBhc3N1cmVkIHdpbGwgcnVuIGZvcgotICAgKiBiYXNpY2FsbHkgZXZlcnkgcHJvZ3JhbSB1c2lu
ZyB1cGIuICovCi0gIGNvbnN0IGludCB4ID0gMTsKLSNpZmRlZiBVUEJfQklHX0VORElBTgotICBh
c3NlcnQoKihjaGFyKikmeCAhPSAxKTsKLSNlbHNlCi0gIGFzc2VydCgqKGNoYXIqKSZ4ID09IDEp
OwotI2VuZGlmCi0jZW5kaWYKLQotICByLT5uZXh0ID0gcjsKLSAgci0+dnRibCA9IHZ0Ymw7Ci0g
IHItPmluZGl2aWR1YWxfY291bnQgPSAwOwotICByLT5pc19mcm96ZW4gPSBmYWxzZTsKLSAgci0+
Z3JvdXAgPSBtYWxsb2Moc2l6ZW9mKCpyLT5ncm91cCkpOwotICBpZiAoIXItPmdyb3VwKSByZXR1
cm4gZmFsc2U7Ci0gICpyLT5ncm91cCA9IDA7Ci0gIGlmICghdHJhY2tpbml0KHIpKSB7Ci0gICAg
ZnJlZShyLT5ncm91cCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHVwYl9yZWZjb3VudGVk
X3JlZihyLCBvd25lcik7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIHVwYl9yZWZjb3VudGVk
X2lzZnJvemVuKGNvbnN0IHVwYl9yZWZjb3VudGVkICpyKSB7Ci0gIHJldHVybiByLT5pc19mcm96
ZW47Ci19Ci0KLXZvaWQgdXBiX3JlZmNvdW50ZWRfcmVmKGNvbnN0IHVwYl9yZWZjb3VudGVkICpy
LCBjb25zdCB2b2lkICpvd25lcikgewotICB0cmFjayhyLCBvd25lciwgZmFsc2UpOwotICBpZiAo
IXItPmlzX2Zyb3plbikKLSAgICAoKHVwYl9yZWZjb3VudGVkKilyKS0+aW5kaXZpZHVhbF9jb3Vu
dCsrOwotICByZWZncm91cChyLT5ncm91cCk7Ci19Ci0KLXZvaWQgdXBiX3JlZmNvdW50ZWRfdW5y
ZWYoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIHVudHJh
Y2sociwgb3duZXIsIGZhbHNlKTsKLSAgaWYgKCFyLT5pc19mcm96ZW4pCi0gICAgKCh1cGJfcmVm
Y291bnRlZCopciktPmluZGl2aWR1YWxfY291bnQtLTsKLSAgdW5yZWYocik7Ci19Ci0KLXZvaWQg
dXBiX3JlZmNvdW50ZWRfcmVmMihjb25zdCB1cGJfcmVmY291bnRlZCAqciwgdXBiX3JlZmNvdW50
ZWQgKmZyb20pIHsKLSAgYXNzZXJ0KCFmcm9tLT5pc19mcm96ZW4pOyAgLyogTm9uLWNvbnN0IHBv
aW50ZXIgaW1wbGllcyB0aGlzLiAqLwotICB0cmFjayhyLCBmcm9tLCB0cnVlKTsKLSAgaWYgKHIt
PmlzX2Zyb3plbikgewotICAgIHJlZmdyb3VwKHItPmdyb3VwKTsKLSAgfSBlbHNlIHsKLSAgICBt
ZXJnZSgodXBiX3JlZmNvdW50ZWQqKXIsIGZyb20pOwotICB9Ci19Ci0KLXZvaWQgdXBiX3JlZmNv
dW50ZWRfdW5yZWYyKGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLCB1cGJfcmVmY291bnRlZCAqZnJv
bSkgewotICBhc3NlcnQoIWZyb20tPmlzX2Zyb3plbik7ICAvKiBOb24tY29uc3QgcG9pbnRlciBp
bXBsaWVzIHRoaXMuICovCi0gIHVudHJhY2sociwgZnJvbSwgdHJ1ZSk7Ci0gIGlmIChyLT5pc19m
cm96ZW4pIHsKLSAgICB1bnJlZihyKTsKLSAgfSBlbHNlIHsKLSAgICBhc3NlcnQobWVyZ2VkKHIs
IGZyb20pKTsKLSAgfQotfQotCi12b2lkIHVwYl9yZWZjb3VudGVkX2RvbmF0ZXJlZigKLSAgICBj
b25zdCB1cGJfcmVmY291bnRlZCAqciwgY29uc3Qgdm9pZCAqZnJvbSwgY29uc3Qgdm9pZCAqdG8p
IHsKLSAgYXNzZXJ0KGZyb20gIT0gdG8pOwotICBpZiAodG8gIT0gTlVMTCkKLSAgICB1cGJfcmVm
Y291bnRlZF9yZWYociwgdG8pOwotICBpZiAoZnJvbSAhPSBOVUxMKQotICAgIHVwYl9yZWZjb3Vu
dGVkX3VucmVmKHIsIGZyb20pOwotfQotCi12b2lkIHVwYl9yZWZjb3VudGVkX2NoZWNrcmVmKGNv
bnN0IHVwYl9yZWZjb3VudGVkICpyLCBjb25zdCB2b2lkICpvd25lcikgewotICBjaGVja3JlZihy
LCBvd25lciwgZmFsc2UpOwotfQotCi1ib29sIHVwYl9yZWZjb3VudGVkX2ZyZWV6ZSh1cGJfcmVm
Y291bnRlZCAqY29uc3Qqcm9vdHMsIGludCBuLCB1cGJfc3RhdHVzICpzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG1heGRlcHRoKSB7Ci0gIGludCBpOwotICBmb3IgKGkgPSAwOyBp
IDwgbjsgaSsrKSB7Ci0gICAgYXNzZXJ0KCFyb290c1tpXS0+aXNfZnJvemVuKTsKLSAgfQotICBy
ZXR1cm4gZnJlZXplKHJvb3RzLCBuLCBzLCBtYXhkZXB0aCk7Ci19Ci0KLQotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotCi0vKiBGYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpZiB0aGUgc2hpbSBpcyBub3Qg
c3BlY2lhbGl6ZWQgYnkgdGhlIEpJVC4gKi8KLSNkZWZpbmUgU0hJTV9XUklURVIodHlwZSwgY3R5
cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgYm9v
bCB1cGJfc2hpbV9zZXQgIyMgdHlwZSAodm9pZCAqYywgY29uc3Qgdm9pZCAqaGQsIGN0eXBlIHZh
bCkgeyAgICAgICAgICAgIFwKLSAgICB1aW50OF90ICptID0gYzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjb25zdCB1cGJf
c2hpbV9kYXRhICpkID0gaGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBpZiAoZC0+aGFzYml0ID4gMCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICoodWludDhfdCopJm1bZC0+
aGFzYml0IC8gOF0gfD0gMSA8PCAoZC0+aGFzYml0ICUgOCk7ICAgICAgICAgICAgICAgICAgIFwK
LSAgICAqKGN0eXBlKikmbVtkLT5vZmZzZXRdID0gdmFsOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLQotU0hJTV9XUklURVIoZG91YmxlLCBkb3VibGUpCi1TSElNX1dSSVRF
UihmbG9hdCwgIGZsb2F0KQotU0hJTV9XUklURVIoaW50MzIsICBpbnQzMl90KQotU0hJTV9XUklU
RVIoaW50NjQsICBpbnQ2NF90KQotU0hJTV9XUklURVIodWludDMyLCB1aW50MzJfdCkKLVNISU1f
V1JJVEVSKHVpbnQ2NCwgdWludDY0X3QpCi1TSElNX1dSSVRFUihib29sLCAgIGJvb2wpCi0jdW5k
ZWYgU0hJTV9XUklURVIKLQotYm9vbCB1cGJfc2hpbV9zZXQodXBiX2hhbmRsZXJzICpoLCBjb25z
dCB1cGJfZmllbGRkZWYgKmYsIHNpemVfdCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICBpbnQz
Ml90IGhhc2JpdCkgewotICB1cGJfaGFuZGxlcmF0dHIgYXR0ciA9IFVQQl9IQU5ETEVSQVRUUl9J
TklUSUFMSVpFUjsKLSAgYm9vbCBvazsKLQotICB1cGJfc2hpbV9kYXRhICpkID0gbWFsbG9jKHNp
emVvZigqZCkpOwotICBpZiAoIWQpIHJldHVybiBmYWxzZTsKLSAgZC0+b2Zmc2V0ID0gb2Zmc2V0
OwotICBkLT5oYXNiaXQgPSBoYXNiaXQ7Ci0KLSAgdXBiX2hhbmRsZXJhdHRyX3NldGhhbmRsZXJk
YXRhKCZhdHRyLCBkKTsKLSAgdXBiX2hhbmRsZXJhdHRyX3NldGFsd2F5c29rKCZhdHRyLCB0cnVl
KTsKLSAgdXBiX2hhbmRsZXJzX2FkZGNsZWFudXAoaCwgZCwgZnJlZSk7Ci0KLSNkZWZpbmUgVFlQ
RSh1LCBsKSBcCi0gIGNhc2UgVVBCX1RZUEVfIyN1OiBcCi0gICAgb2sgPSB1cGJfaGFuZGxlcnNf
c2V0IyNsKGgsIGYsIHVwYl9zaGltX3NldCMjbCwgJmF0dHIpOyBicmVhazsKLQotICBvayA9IGZh
bHNlOwotCi0gIHN3aXRjaCAodXBiX2ZpZWxkZGVmX3R5cGUoZikpIHsKLSAgICBUWVBFKElOVDY0
LCAgaW50NjQpOwotICAgIFRZUEUoSU5UMzIsICBpbnQzMik7Ci0gICAgVFlQRShFTlVNLCAgIGlu
dDMyKTsKLSAgICBUWVBFKFVJTlQ2NCwgdWludDY0KTsKLSAgICBUWVBFKFVJTlQzMiwgdWludDMy
KTsKLSAgICBUWVBFKERPVUJMRSwgZG91YmxlKTsKLSAgICBUWVBFKEZMT0FULCAgZmxvYXQpOwot
ICAgIFRZUEUoQk9PTCwgICBib29sKTsKLSAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UpOyBicmVh
azsKLSAgfQotI3VuZGVmIFRZUEUKLQotICB1cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZhdHRyKTsK
LSAgcmV0dXJuIG9rOwotfQotCi1jb25zdCB1cGJfc2hpbV9kYXRhICp1cGJfc2hpbV9nZXRkYXRh
KGNvbnN0IHVwYl9oYW5kbGVycyAqaCwgdXBiX3NlbGVjdG9yX3QgcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2ZpZWxkdHlwZV90ICp0eXBlKSB7Ci0gIHVwYl9m
dW5jICpmID0gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXIoaCwgcyk7Ci0KLSAgaWYgKCh1cGJfaW50
NjRfaGFuZGxlcmZ1bmMqKWYgPT0gdXBiX3NoaW1fc2V0aW50NjQpIHsKLSAgICAqdHlwZSA9IFVQ
Ql9UWVBFX0lOVDY0OwotICB9IGVsc2UgaWYgKCh1cGJfaW50MzJfaGFuZGxlcmZ1bmMqKWYgPT0g
dXBiX3NoaW1fc2V0aW50MzIpIHsKLSAgICAqdHlwZSA9IFVQQl9UWVBFX0lOVDMyOwotICB9IGVs
c2UgaWYgKCh1cGJfdWludDY0X2hhbmRsZXJmdW5jKilmID09IHVwYl9zaGltX3NldHVpbnQ2NCkg
ewotICAgICp0eXBlID0gVVBCX1RZUEVfVUlOVDY0OwotICB9IGVsc2UgaWYgKCh1cGJfdWludDMy
X2hhbmRsZXJmdW5jKilmID09IHVwYl9zaGltX3NldHVpbnQzMikgewotICAgICp0eXBlID0gVVBC
X1RZUEVfVUlOVDMyOwotICB9IGVsc2UgaWYgKCh1cGJfZG91YmxlX2hhbmRsZXJmdW5jKilmID09
IHVwYl9zaGltX3NldGRvdWJsZSkgewotICAgICp0eXBlID0gVVBCX1RZUEVfRE9VQkxFOwotICB9
IGVsc2UgaWYgKCh1cGJfZmxvYXRfaGFuZGxlcmZ1bmMqKWYgPT0gdXBiX3NoaW1fc2V0ZmxvYXQp
IHsKLSAgICAqdHlwZSA9IFVQQl9UWVBFX0ZMT0FUOwotICB9IGVsc2UgaWYgKCh1cGJfYm9vbF9o
YW5kbGVyZnVuYyopZiA9PSB1cGJfc2hpbV9zZXRib29sKSB7Ci0gICAgKnR5cGUgPSBVUEJfVFlQ
RV9CT09MOwotICB9IGVsc2UgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIChj
b25zdCB1cGJfc2hpbV9kYXRhKil1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcmRhdGEoaCwgcyk7Ci19
Ci0KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1zdGF0aWMg
dm9pZCB1cGJfc3ltdGFiX2ZyZWUodXBiX3JlZmNvdW50ZWQgKnIpIHsKLSAgdXBiX3N5bXRhYiAq
cyA9ICh1cGJfc3ltdGFiKilyOwotICB1cGJfc3RydGFibGVfaXRlciBpOwotICB1cGJfc3RydGFi
bGVfYmVnaW4oJmksICZzLT5zeW10YWIpOwotICBmb3IgKDsgIXVwYl9zdHJ0YWJsZV9kb25lKCZp
KTsgdXBiX3N0cnRhYmxlX25leHQoJmkpKSB7Ci0gICAgY29uc3QgdXBiX2RlZiAqZGVmID0gdXBi
X3ZhbHVlX2dldHB0cih1cGJfc3RydGFibGVfaXRlcl92YWx1ZSgmaSkpOwotICAgIHVwYl9kZWZf
dW5yZWYoZGVmLCBzKTsKLSAgfQotICB1cGJfc3RydGFibGVfdW5pbml0KCZzLT5zeW10YWIpOwot
ICBmcmVlKHMpOwotfQotCi0KLXVwYl9zeW10YWIgKnVwYl9zeW10YWJfbmV3KGNvbnN0IHZvaWQg
Km93bmVyKSB7Ci0gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXBiX3JlZmNvdW50ZWRfdnRibCB2dGJs
ID0ge05VTEwsICZ1cGJfc3ltdGFiX2ZyZWV9OwotICB1cGJfc3ltdGFiICpzID0gbWFsbG9jKHNp
emVvZigqcykpOwotICB1cGJfcmVmY291bnRlZF9pbml0KHVwYl9zeW10YWJfdXBjYXN0X211dGFi
bGUocyksICZ2dGJsLCBvd25lcik7Ci0gIHVwYl9zdHJ0YWJsZV9pbml0KCZzLT5zeW10YWIsIFVQ
Ql9DVFlQRV9QVFIpOwotICByZXR1cm4gczsKLX0KLQotdm9pZCB1cGJfc3ltdGFiX2ZyZWV6ZSh1
cGJfc3ltdGFiICpzKSB7Ci0gIHVwYl9yZWZjb3VudGVkICpyOwotICBib29sIG9rOwotCi0gIGFz
c2VydCghdXBiX3N5bXRhYl9pc2Zyb3plbihzKSk7Ci0gIHIgPSB1cGJfc3ltdGFiX3VwY2FzdF9t
dXRhYmxlKHMpOwotICAvKiBUaGUgc3ltdGFiIGRvZXMgbm90IHRha2UgcmVmMidzIChzZWUgcmVm
Y291bnRlZC5oKSBvbiB0aGUgZGVmcywgYmVjYXVzZQotICAgKiBkZWZzIGNhbm5vdCByZWZlciBi
YWNrIHRvIHRoZSB0YWJsZSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjcmVhdGUgY3ljbGVzLiAgU28K
LSAgICogMCB3aWxsIHN1ZmZpY2UgZm9yIG1heGRlcHRoIGhlcmUuICovCi0gIG9rID0gdXBiX3Jl
ZmNvdW50ZWRfZnJlZXplKCZyLCAxLCBOVUxMLCAwKTsKLSAgVVBCX0FTU0VSVF9WQVIob2ssIG9r
KTsKLX0KLQotY29uc3QgdXBiX2RlZiAqdXBiX3N5bXRhYl9sb29rdXAoY29uc3QgdXBiX3N5bXRh
YiAqcywgY29uc3QgY2hhciAqc3ltKSB7Ci0gIHVwYl92YWx1ZSB2OwotICB1cGJfZGVmICpyZXQg
PSB1cGJfc3RydGFibGVfbG9va3VwKCZzLT5zeW10YWIsIHN5bSwgJnYpID8KLSAgICAgIHVwYl92
YWx1ZV9nZXRwdHIodikgOiBOVUxMOwotICByZXR1cm4gcmV0OwotfQotCi1jb25zdCB1cGJfbXNn
ZGVmICp1cGJfc3ltdGFiX2xvb2t1cG1zZyhjb25zdCB1cGJfc3ltdGFiICpzLCBjb25zdCBjaGFy
ICpzeW0pIHsKLSAgdXBiX3ZhbHVlIHY7Ci0gIHVwYl9kZWYgKmRlZiA9IHVwYl9zdHJ0YWJsZV9s
b29rdXAoJnMtPnN5bXRhYiwgc3ltLCAmdikgPwotICAgICAgdXBiX3ZhbHVlX2dldHB0cih2KSA6
IE5VTEw7Ci0gIHJldHVybiBkZWYgPyB1cGJfZHluY2FzdF9tc2dkZWYoZGVmKSA6IE5VTEw7Ci19
Ci0KLWNvbnN0IHVwYl9lbnVtZGVmICp1cGJfc3ltdGFiX2xvb2t1cGVudW0oY29uc3QgdXBiX3N5
bXRhYiAqcywgY29uc3QgY2hhciAqc3ltKSB7Ci0gIHVwYl92YWx1ZSB2OwotICB1cGJfZGVmICpk
ZWYgPSB1cGJfc3RydGFibGVfbG9va3VwKCZzLT5zeW10YWIsIHN5bSwgJnYpID8KLSAgICAgIHVw
Yl92YWx1ZV9nZXRwdHIodikgOiBOVUxMOwotICByZXR1cm4gZGVmID8gdXBiX2R5bmNhc3RfZW51
bWRlZihkZWYpIDogTlVMTDsKLX0KLQotLyogR2l2ZW4gYSBzeW1ib2wgYW5kIHRoZSBiYXNlIHN5
bWJvbCBpbnNpZGUgd2hpY2ggaXQgaXMgZGVmaW5lZCwgZmluZCB0aGUKLSAqIHN5bWJvbCdzIGRl
ZmluaXRpb24gaW4gdC4gKi8KLXN0YXRpYyB1cGJfZGVmICp1cGJfcmVzb2x2ZW5hbWUoY29uc3Qg
dXBiX3N0cnRhYmxlICp0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpiYXNlLCBjb25zdCBjaGFyICpzeW0pIHsKLSAgaWYoc3RybGVuKHN5bSkgPT0gMCkgcmV0
dXJuIE5VTEw7Ci0gIGlmKHN5bVswXSA9PSAnLicpIHsKLSAgICAvKiBTeW1ib2xzIHN0YXJ0aW5n
IHdpdGggJy4nIGFyZSBhYnNvbHV0ZSwgc28gd2UgZG8gYSBzaW5nbGUgbG9va3VwLgotICAgICAq
IFNsaWNlIHRvIG9taXQgdGhlIGxlYWRpbmcgJy4nICovCi0gICAgdXBiX3ZhbHVlIHY7Ci0gICAg
cmV0dXJuIHVwYl9zdHJ0YWJsZV9sb29rdXAodCwgc3ltICsgMSwgJnYpID8gdXBiX3ZhbHVlX2dl
dHB0cih2KSA6IE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgLyogUmVtb3ZlIGNvbXBvbmVudHMgZnJv
bSBiYXNlIHVudGlsIHdlIGZpbmQgYW4gZW50cnkgb3IgcnVuIG91dC4KLSAgICAgKiBUT0RPOiBU
aGlzIGJyYW5jaCBpcyB0b3RhbGx5IGJyb2tlbiwgYnV0IGN1cnJlbnRseSBub3QgdXNlZC4gKi8K
LSAgICAodm9pZCliYXNlOwotICAgIGFzc2VydChmYWxzZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLX0KLQotY29uc3QgdXBiX2RlZiAqdXBiX3N5bXRhYl9yZXNvbHZlKGNvbnN0IHVwYl9zeW10
YWIgKnMsIGNvbnN0IGNoYXIgKmJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqc3ltKSB7Ci0gIHVwYl9kZWYgKnJldCA9IHVwYl9yZXNvbHZlbmFtZSgm
cy0+c3ltdGFiLCBiYXNlLCBzeW0pOwotICByZXR1cm4gcmV0OwotfQotCi0vKiBTdGFydHMgYSBk
ZXB0aC1maXJzdCB0cmF2ZXJzYWwgYXQgImRlZiIsIHJlY3Vyc2luZyBpbnRvIGFueSBzdWJkZWZz
Ci0gKiAoaWUuIHN1Ym1lc3NhZ2UgdHlwZXMpLiAgQWRkcyBkdXBsaWNhdGVzIG9mIGV4aXN0aW5n
IGRlZnMgdG8gYWRkdGFiCi0gKiB3aGVyZXZlciBuZWNlc3NhcnksIHNvIHRoYXQgdGhlIHJlc3Vs
dGluZyBzeW10YWIgd2lsbCBiZSBjb25zaXN0ZW50IG9uY2UKLSAqIGFkZHRhYiBpcyBhZGRlZC4K
LSAqCi0gKiBNb3JlIHNwZWNpZmljYWxseSwgaWYgYW55IGRlZiBEIGlzIGZvdW5kIGluIHRoZSBE
RlMgdGhhdDoKLSAqCi0gKiAgIDEuIGNhbiByZWFjaCBhIGRlZiB0aGF0IGlzIGJlaW5nIHJlcGxh
Y2VkIGJ5IHNvbWV0aGluZyBpbiBhZGR0YWIsIEFORAotICoKLSAqICAgMi4gaXMgbm90IGl0c2Vs
ZiBiZWluZyByZXBsYWNlZCBhbHJlYWR5IChpZS4gdGhpcyBuYW1lIGRvZXNuJ3QgYWxyZWFkeQot
ICogICAgICBleGlzdCBpbiBhZGR0YWIpCi0gKgotICogLi4udGhlbiBhIGR1cGxpY2F0ZSAobmV3
IGNvcHkpIG9mIEQgd2lsbCBiZSBhZGRlZCB0byBhZGR0YWIuCi0gKgotICogUmV0dXJucyB0cnVl
IGlmIHRoaXMgaGFwcGVuZWQgZm9yIGFueSBkZWYgcmVhY2hhYmxlIGZyb20gImRlZi4iCi0gKgot
ICogSXQgaXMgc2xpZ2h0bHkgdHJpY2t5IHRvIGRvIHRoaXMgY29ycmVjdGx5IGluIHRoZSBwcmVz
ZW5jZSBvZiBjeWNsZXMuICBJZiB3ZQotICogZGV0ZWN0IHRoYXQgb3VyIERGUyBoYXMgaGl0IGEg
Y3ljbGUsIHdlIG1pZ2h0IG5vdCB5ZXQga25vdyBpZiBhbnkgU0NDcyBvbgotICogb3VyIHN0YWNr
IGNhbiByZWFjaCBhIGRlZiBpbiBhZGR0YWIgb3Igbm90LiAgT25jZSB3ZSBmaWd1cmUgdGhpcyBv
dXQsIHRoYXQKLSAqIGFuc3dlciBuZWVkcyB0byBhcHBseSB0byAqYWxsKiBkZWZzIGluIHRoZXNl
IFNDQ3MsIGV2ZW4gaWYgd2UgdmlzaXRlZCB0aGVtCi0gKiBhbHJlYWR5LiAgU28gYSBzdHJhaWdo
dCB1cCBvbmUtcGFzcyBjeWNsZS1kZXRlY3RpbmcgREZTIHdvbid0IHdvcmsuCi0gKgotICogVG8g
d29yayBhcm91bmQgdGhpcyBwcm9ibGVtLCB3ZSB0cmF2ZXJzZSBlYWNoIFNDQyAod2hpY2ggd2Ug
YWxyZWFkeQotICogY29tcHV0ZWQsIHNpbmNlIHRoZXNlIGRlZnMgYXJlIGZyb3plbikgYXMgYSBz
aW5nbGUgbm9kZS4gIFdlIGZpcnN0IGNvbXB1dGUKLSAqIHdoZXRoZXIgdGhlIFNDQyBhcyBhIHdo
b2xlIGNhbiByZWFjaCBhbnkgZGVmIGluIGFkZHRhYiwgdGhlbiB3ZSBkdXAgKG9yIG5vdCkKLSAq
IHRoZSBlbnRpcmUgU0NDLiAgVGhpcyByZXF1aXJlcyBicmVha2luZyB0aGUgZW5jYXBzdWxhdGlv
biBvZiB1cGJfcmVmY291bnRlZCwKLSAqIHNpbmNlIHRoYXQgaXMgd2hlcmUgd2UgZ2V0IHRoZSBk
YXRhIGFib3V0IHdoYXQgU0NDIHdlIGFyZSBpbi4gKi8KLXN0YXRpYyBib29sIHVwYl9yZXNvbHZl
X2Rmcyhjb25zdCB1cGJfZGVmICpkZWYsIHVwYl9zdHJ0YWJsZSAqYWRkdGFiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm5ld19vd25lciwgdXBiX2ludHRhYmxlICpz
ZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgdXBi
X3ZhbHVlIHY7Ci0gIGJvb2wgbmVlZF9kdXA7Ci0gIGNvbnN0IHVwYl9kZWYgKmJhc2U7Ci0gIGNv
bnN0IHZvaWQqIG1lbW9pemVfa2V5OwotCi0gIC8qIE1lbW9pemUgcmVzdWx0cyBvZiB0aGlzIGZ1
bmN0aW9uIGZvciBlZmZpY2llbmN5IChzaW5jZSB3ZSdyZSB0cmF2ZXJzaW5nIGEKLSAgICogREFH
IHRoaXMgaXMgbm90IG5lZWRlZCB0byBsaW1pdCB0aGUgZGVwdGggb2YgdGhlIHNlYXJjaCkuCi0g
ICAqCi0gICAqIFdlIG1lbW9pemUgYnkgU0NDIGluc3RlYWQgb2YgYnkgaW5kaXZpZHVhbCBkZWYu
ICovCi0gIG1lbW9pemVfa2V5ID0gZGVmLT5iYXNlLmdyb3VwOwotCi0gIGlmICh1cGJfaW50dGFi
bGVfbG9va3VwcHRyKHNlZW4sIG1lbW9pemVfa2V5LCAmdikpCi0gICAgcmV0dXJuIHVwYl92YWx1
ZV9nZXRib29sKHYpOwotCi0gIC8qIFZpc2l0IHN1Ym1lc3NhZ2VzIGZvciBhbGwgbWVzc2FnZXMg
aW4gdGhlIFNDQy4gKi8KLSAgbmVlZF9kdXAgPSBmYWxzZTsKLSAgYmFzZSA9IGRlZjsKLSAgZG8g
ewotICAgIHVwYl92YWx1ZSB2OwotICAgIGNvbnN0IHVwYl9tc2dkZWYgKm07Ci0KLSAgICBhc3Nl
cnQodXBiX2RlZl9pc2Zyb3plbihkZWYpKTsKLSAgICBpZiAoZGVmLT50eXBlID09IFVQQl9ERUZf
RklFTEQpIGNvbnRpbnVlOwotICAgIGlmICh1cGJfc3RydGFibGVfbG9va3VwKGFkZHRhYiwgdXBi
X2RlZl9mdWxsbmFtZShkZWYpLCAmdikpIHsKLSAgICAgIG5lZWRfZHVwID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvKiBGb3IgbWVzc2FnZXMsIGNvbnRpbnVlIHRoZSByZWN1cnNpb24gYnkgdmlzaXRp
bmcgYWxsIHN1YmRlZnMsIGJ1dCBvbmx5Ci0gICAgICogb25lcyBpbiBkaWZmZXJlbnQgU0NDcy4g
Ki8KLSAgICBtID0gdXBiX2R5bmNhc3RfbXNnZGVmKGRlZik7Ci0gICAgaWYgKG0pIHsKLSAgICAg
IHVwYl9tc2dfZmllbGRfaXRlciBpOwotICAgICAgZm9yKHVwYl9tc2dfZmllbGRfYmVnaW4oJmks
IG0pOwotICAgICAgICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJmkpOwotICAgICAgICAgIHVwYl9t
c2dfZmllbGRfbmV4dCgmaSkpIHsKLSAgICAgICAgdXBiX2ZpZWxkZGVmICpmID0gdXBiX21zZ19p
dGVyX2ZpZWxkKCZpKTsKLSAgICAgICAgY29uc3QgdXBiX2RlZiAqc3ViZGVmOwotCi0gICAgICAg
IGlmICghdXBiX2ZpZWxkZGVmX2hhc3N1YmRlZihmKSkgY29udGludWU7Ci0gICAgICAgIHN1YmRl
ZiA9IHVwYl9maWVsZGRlZl9zdWJkZWYoZik7Ci0KLSAgICAgICAgLyogU2tpcCBzdWJkZWZzIGlu
IHRoaXMgU0NDLiAqLwotICAgICAgICBpZiAoZGVmLT5iYXNlLmdyb3VwID09IHN1YmRlZi0+YmFz
ZS5ncm91cCkgY29udGludWU7Ci0KLSAgICAgICAgLyogfD0gdG8gYXZvaWQgc2hvcnQtY2lyY3Vp
dDsgd2UgbmVlZCBpdHMgc2lkZS1lZmZlY3RzLiAqLwotICAgICAgICBuZWVkX2R1cCB8PSB1cGJf
cmVzb2x2ZV9kZnMoc3ViZGVmLCBhZGR0YWIsIG5ld19vd25lciwgc2Vlbiwgcyk7Ci0gICAgICAg
IGlmICghdXBiX29rKHMpKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxl
ICgoZGVmID0gKHVwYl9kZWYqKWRlZi0+YmFzZS5uZXh0KSAhPSBiYXNlKTsKLQotICBpZiAobmVl
ZF9kdXApIHsKLSAgICAvKiBEdXAgYWxsIGRlZnMgaW4gdGhpcyBTQ0MgdGhhdCBkb24ndCBhbHJl
YWR5IGhhdmUgZW50cmllcyBpbiBhZGR0YWIuICovCi0gICAgZGVmID0gYmFzZTsKLSAgICBkbyB7
Ci0gICAgICBjb25zdCBjaGFyICpuYW1lOwotCi0gICAgICBpZiAoZGVmLT50eXBlID09IFVQQl9E
RUZfRklFTEQpIGNvbnRpbnVlOwotICAgICAgbmFtZSA9IHVwYl9kZWZfZnVsbG5hbWUoZGVmKTsK
LSAgICAgIGlmICghdXBiX3N0cnRhYmxlX2xvb2t1cChhZGR0YWIsIG5hbWUsIE5VTEwpKSB7Ci0g
ICAgICAgIHVwYl9kZWYgKm5ld2RlZiA9IHVwYl9kZWZfZHVwKGRlZiwgbmV3X293bmVyKTsKLSAg
ICAgICAgaWYgKCFuZXdkZWYpIGdvdG8gb29tOwotICAgICAgICBuZXdkZWYtPmNhbWVfZnJvbV91
c2VyID0gZmFsc2U7Ci0gICAgICAgIGlmICghdXBiX3N0cnRhYmxlX2luc2VydChhZGR0YWIsIG5h
bWUsIHVwYl92YWx1ZV9wdHIobmV3ZGVmKSkpCi0gICAgICAgICAgZ290byBvb207Ci0gICAgICB9
Ci0gICAgfSB3aGlsZSAoKGRlZiA9ICh1cGJfZGVmKilkZWYtPmJhc2UubmV4dCkgIT0gYmFzZSk7
Ci0gIH0KLQotICB1cGJfaW50dGFibGVfaW5zZXJ0cHRyKHNlZW4sIG1lbW9pemVfa2V5LCB1cGJf
dmFsdWVfYm9vbChuZWVkX2R1cCkpOwotICByZXR1cm4gbmVlZF9kdXA7Ci0KLW9vbToKLSAgdXBi
X3N0YXR1c19zZXRlcnJtc2cocywgIm91dCBvZiBtZW1vcnkiKTsKLSAgcmV0dXJuIGZhbHNlOwot
fQotCi0vKiBUT0RPKGhhYmVybWFuKTogd2UgbmVlZCBhIGxvdCBtb3JlIHRlc3Rpbmcgb2YgZXJy
b3IgY29uZGl0aW9ucy4KLSAqIFRoZSBjYW1lX2Zyb21fdXNlciBzdHVmZiBpbiBwYXJ0aWN1bGFy
IGlzIG5vdCB0ZXN0ZWQuICovCi1ib29sIHVwYl9zeW10YWJfYWRkKHVwYl9zeW10YWIgKnMsIHVw
Yl9kZWYgKmNvbnN0KmRlZnMsIGludCBuLCB2b2lkICpyZWZfZG9ub3IsCi0gICAgICAgICAgICAg
ICAgICAgIHVwYl9zdGF0dXMgKnN0YXR1cykgewotICBpbnQgaTsKLSAgdXBiX3N0cnRhYmxlX2l0
ZXIgaXRlcjsKLSAgdXBiX2RlZiAqKmFkZF9kZWZzID0gTlVMTDsKLSAgdXBiX3N0cnRhYmxlIGFk
ZHRhYjsKLSAgdXBiX2ludHRhYmxlIHNlZW47Ci0KLSAgYXNzZXJ0KCF1cGJfc3ltdGFiX2lzZnJv
emVuKHMpKTsKLSAgaWYgKCF1cGJfc3RydGFibGVfaW5pdCgmYWRkdGFiLCBVUEJfQ1RZUEVfUFRS
KSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHN0YXR1cywgIm91dCBvZiBtZW1vcnkiKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKiBBZGQgbmV3IGRlZnMgdG8gb3VyICJhZGQi
IHNldC4gKi8KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIHVwYl9kZWYgKmRlZiA9
IGRlZnNbaV07Ci0gICAgY29uc3QgY2hhciAqZnVsbG5hbWU7Ci0gICAgdXBiX2ZpZWxkZGVmICpm
OwotCi0gICAgaWYgKHVwYl9kZWZfaXNmcm96ZW4oZGVmKSkgewotICAgICAgdXBiX3N0YXR1c19z
ZXRlcnJtc2coc3RhdHVzLCAiYWRkZWQgZGVmcyBtdXN0IGJlIG11dGFibGUiKTsKLSAgICAgIGdv
dG8gZXJyOwotICAgIH0KLSAgICBhc3NlcnQoIXVwYl9kZWZfaXNmcm96ZW4oZGVmKSk7Ci0gICAg
ZnVsbG5hbWUgPSB1cGJfZGVmX2Z1bGxuYW1lKGRlZik7Ci0gICAgaWYgKCFmdWxsbmFtZSkgewot
ICAgICAgdXBiX3N0YXR1c19zZXRlcnJtc2coCi0gICAgICAgICAgc3RhdHVzLCAiQW5vbnltb3Vz
IGRlZnMgY2Fubm90IGJlIGFkZGVkIHRvIGEgc3ltdGFiIik7Ci0gICAgICBnb3RvIGVycjsKLSAg
ICB9Ci0KLSAgICBmID0gdXBiX2R5bmNhc3RfZmllbGRkZWZfbXV0YWJsZShkZWYpOwotCi0gICAg
aWYgKGYpIHsKLSAgICAgIGlmICghdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlbmFtZShmKSkg
ewotICAgICAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzdGF0dXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJTdGFuZGFsb25lIGZpZWxkZGVmcyBtdXN0IGhhdmUgYSBjb250YWluaW5n
IHR5cGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGV4dGVuZGVlKSBuYW1lIHNl
dCIpOwotICAgICAgICBnb3RvIGVycjsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYg
KHVwYl9zdHJ0YWJsZV9sb29rdXAoJmFkZHRhYiwgZnVsbG5hbWUsIE5VTEwpKSB7Ci0gICAgICAg
IHVwYl9zdGF0dXNfc2V0ZXJyZihzdGF0dXMsICJDb25mbGljdGluZyBkZWZzIG5hbWVkICclcyci
LCBmdWxsbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgICAgfQotICAgICAgLyogV2UgbmVl
ZCB0aGlzIHRvIGJhY2sgb3V0IHByb3Blcmx5LCBiZWNhdXNlIGlmIHRoZXJlIGlzIGEgZmFpbHVy
ZSB3ZQotICAgICAgICogbmVlZCB0byBkb25hdGUgdGhlIHJlZiBiYWNrIHRvIHRoZSBjYWxsZXIu
ICovCi0gICAgICBkZWYtPmNhbWVfZnJvbV91c2VyID0gdHJ1ZTsKLSAgICAgIHVwYl9kZWZfZG9u
YXRlcmVmKGRlZiwgcmVmX2Rvbm9yLCBzKTsKLSAgICAgIGlmICghdXBiX3N0cnRhYmxlX2luc2Vy
dCgmYWRkdGFiLCBmdWxsbmFtZSwgdXBiX3ZhbHVlX3B0cihkZWYpKSkKLSAgICAgICAgZ290byBv
b21fZXJyOwotICAgIH0KLSAgfQotCi0gIC8qIEFkZCBzdGFuZGFsb25lIGZpZWxkZGVmcyAoaWUu
IGV4dGVuc2lvbnMpIHRvIHRoZSBhcHByb3ByaWF0ZSBtZXNzYWdlcy4KLSAgICogSWYgdGhlIGFw
cHJvcHJpYXRlIG1lc3NhZ2Ugb25seSBleGlzdHMgaW4gdGhlIGV4aXN0aW5nIHN5bXRhYiwgZHVw
bGljYXRlCi0gICAqIGl0IHNvIHdlIGhhdmUgYSBtdXRhYmxlIGNvcHkgd2UgY2FuIGFkZCB0aGUg
ZmllbGRzIHRvLiAqLwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgdXBiX2RlZiAq
ZGVmID0gZGVmc1tpXTsKLSAgICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfZHluY2FzdF9maWVsZGRl
Zl9tdXRhYmxlKGRlZik7Ci0gICAgY29uc3QgY2hhciAqbXNnbmFtZTsKLSAgICB1cGJfdmFsdWUg
djsKLSAgICB1cGJfbXNnZGVmICptOwotCi0gICAgaWYgKCFmKSBjb250aW51ZTsKLSAgICBtc2du
YW1lID0gdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlbmFtZShmKTsKLSAgICAvKiBXZSB2YWxp
ZGF0ZWQgdGhpcyBlYXJsaWVyIGluIHRoaXMgZnVuY3Rpb24uICovCi0gICAgYXNzZXJ0KG1zZ25h
bWUpOwotCi0gICAgLyogSWYgdGhlIGV4dGVuZGVlIG5hbWUgaXMgYWJzb2x1dGVseSBxdWFsaWZp
ZWQsIG1vdmUgcGFzdCB0aGUgaW5pdGlhbCAiLiIuCi0gICAgICogVE9ETyhoYWJlcm1hbik6IGl0
IGlzIG5vdCBvYnZpb3VzIHdoYXQgaXQgd291bGQgbWVhbiBpZiB0aGlzIHdhcyBub3QKLSAgICAg
KiBhYnNvbHV0ZWx5IHF1YWxpZmllZC4gKi8KLSAgICBpZiAobXNnbmFtZVswXSA9PSAnLicpIHsK
LSAgICAgIG1zZ25hbWUrKzsKLSAgICB9Ci0KLSAgICBpZiAodXBiX3N0cnRhYmxlX2xvb2t1cCgm
YWRkdGFiLCBtc2duYW1lLCAmdikpIHsKLSAgICAgIC8qIEV4dGVuZGVlIGlzIGluIHRoZSBzZXQg
b2YgZGVmcyB0aGUgdXNlciBhc2tlZCB1cyB0byBhZGQuICovCi0gICAgICBtID0gdXBiX3ZhbHVl
X2dldHB0cih2KTsKLSAgICB9IGVsc2UgewotICAgICAgLyogTmVlZCB0byBmaW5kIGFuZCBkdXAg
dGhlIGV4dGVuZGVlIGZyb20gdGhlIGV4aXN0aW5nIHN5bXRhYi4gKi8KLSAgICAgIGNvbnN0IHVw
Yl9tc2dkZWYgKmZyb3plbl9tID0gdXBiX3N5bXRhYl9sb29rdXBtc2cocywgbXNnbmFtZSk7Ci0g
ICAgICBpZiAoIWZyb3plbl9tKSB7Ci0gICAgICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzdGF0dXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJpZWQgdG8gZXh0ZW5kIG1lc3NhZ2UgJXMg
dGhhdCBkb2VzIG5vdCBleGlzdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gdGhp
cyBTeW1ib2xUYWJsZS4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnbmFtZSk7Ci0g
ICAgICAgIGdvdG8gZXJyOwotICAgICAgfQotICAgICAgbSA9IHVwYl9tc2dkZWZfZHVwKGZyb3pl
bl9tLCBzKTsKLSAgICAgIGlmICghbSkgZ290byBvb21fZXJyOwotICAgICAgaWYgKCF1cGJfc3Ry
dGFibGVfaW5zZXJ0KCZhZGR0YWIsIG1zZ25hbWUsIHVwYl92YWx1ZV9wdHIobSkpKSB7Ci0gICAg
ICAgIHVwYl9tc2dkZWZfdW5yZWYobSwgcyk7Ci0gICAgICAgIGdvdG8gb29tX2VycjsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoIXVwYl9tc2dkZWZfYWRkZmllbGQobSwgZiwgcmVmX2Rvbm9y
LCBzdGF0dXMpKSB7Ci0gICAgICBnb3RvIGVycjsKLSAgICB9Ci0gIH0KLQotICAvKiBBZGQgZHVw
cyBvZiBhbnkgZXhpc3RpbmcgZGVmIHRoYXQgY2FuIHJlYWNoIGEgZGVmIHdpdGggdGhlIHNhbWUg
bmFtZSBhcwotICAgKiBhbnl0aGluZyBpbiBvdXIgImFkZCIgc2V0LiAqLwotICBpZiAoIXVwYl9p
bnR0YWJsZV9pbml0KCZzZWVuLCBVUEJfQ1RZUEVfQk9PTCkpIGdvdG8gb29tX2VycjsKLSAgdXBi
X3N0cnRhYmxlX2JlZ2luKCZpdGVyLCAmcy0+c3ltdGFiKTsKLSAgZm9yICg7ICF1cGJfc3RydGFi
bGVfZG9uZSgmaXRlcik7IHVwYl9zdHJ0YWJsZV9uZXh0KCZpdGVyKSkgewotICAgIHVwYl9kZWYg
KmRlZiA9IHVwYl92YWx1ZV9nZXRwdHIodXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoJml0ZXIpKTsK
LSAgICB1cGJfcmVzb2x2ZV9kZnMoZGVmLCAmYWRkdGFiLCBzLCAmc2Vlbiwgc3RhdHVzKTsKLSAg
ICBpZiAoIXVwYl9vayhzdGF0dXMpKSBnb3RvIGVycjsKLSAgfQotICB1cGJfaW50dGFibGVfdW5p
bml0KCZzZWVuKTsKLQotICAvKiBOb3cgdXNpbmcgdGhlIHRhYmxlLCByZXNvbHZlIHN5bWJvbGlj
IHJlZmVyZW5jZXMgZm9yIHN1YmRlZnMuICovCi0gIHVwYl9zdHJ0YWJsZV9iZWdpbigmaXRlciwg
JmFkZHRhYik7Ci0gIGZvciAoOyAhdXBiX3N0cnRhYmxlX2RvbmUoJml0ZXIpOyB1cGJfc3RydGFi
bGVfbmV4dCgmaXRlcikpIHsKLSAgICBjb25zdCBjaGFyICpiYXNlOwotICAgIHVwYl9kZWYgKmRl
ZiA9IHVwYl92YWx1ZV9nZXRwdHIodXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoJml0ZXIpKTsKLSAg
ICB1cGJfbXNnZGVmICptID0gdXBiX2R5bmNhc3RfbXNnZGVmX211dGFibGUoZGVmKTsKLSAgICB1
cGJfbXNnX2ZpZWxkX2l0ZXIgajsKLQotICAgIGlmICghbSkgY29udGludWU7Ci0gICAgLyogVHlw
ZSBuYW1lcyBhcmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8gdGhlIG1lc3NhZ2UgaW4gd2hpY2ggdGhl
eSBhcHBlYXIuICovCi0gICAgYmFzZSA9IHVwYl9tc2dkZWZfZnVsbG5hbWUobSk7Ci0KLSAgICBm
b3IodXBiX21zZ19maWVsZF9iZWdpbigmaiwgbSk7Ci0gICAgICAgICF1cGJfbXNnX2ZpZWxkX2Rv
bmUoJmopOwotICAgICAgICB1cGJfbXNnX2ZpZWxkX25leHQoJmopKSB7Ci0gICAgICB1cGJfZmll
bGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmllbGQoJmopOwotICAgICAgY29uc3QgY2hhciAqbmFt
ZSA9IHVwYl9maWVsZGRlZl9zdWJkZWZuYW1lKGYpOwotICAgICAgaWYgKG5hbWUgJiYgIXVwYl9m
aWVsZGRlZl9zdWJkZWYoZikpIHsKLSAgICAgICAgLyogVHJ5IHRoZSBsb29rdXAgaW4gdGhlIGN1
cnJlbnQgc2V0IG9mIHRvLWJlLWFkZGVkIGRlZnMgZmlyc3QuIElmIG5vdAotICAgICAgICAgKiB0
aGVyZSwgdHJ5IGV4aXN0aW5nIGRlZnMuICovCi0gICAgICAgIHVwYl9kZWYgKnN1YmRlZiA9IHVw
Yl9yZXNvbHZlbmFtZSgmYWRkdGFiLCBiYXNlLCBuYW1lKTsKLSAgICAgICAgaWYgKHN1YmRlZiA9
PSBOVUxMKSB7Ci0gICAgICAgICAgc3ViZGVmID0gdXBiX3Jlc29sdmVuYW1lKCZzLT5zeW10YWIs
IGJhc2UsIG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdWJkZWYgPT0gTlVMTCkgewot
ICAgICAgICAgIHVwYl9zdGF0dXNfc2V0ZXJyZigKLSAgICAgICAgICAgICAgc3RhdHVzLCAiY291
bGRuJ3QgcmVzb2x2ZSBuYW1lICclcycgaW4gbWVzc2FnZSAnJXMnIiwgbmFtZSwgYmFzZSk7Ci0g
ICAgICAgICAgZ290byBlcnI7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXVwYl9maWVsZGRlZl9zZXRz
dWJkZWYoZiwgc3ViZGVmLCBzdGF0dXMpKSB7Ci0gICAgICAgICAgZ290byBlcnI7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBXZSBuZWVkIGFuIGFycmF5IG9mIHRoZSBk
ZWZzIGluIGFkZHRhYiwgZm9yIHBhc3NpbmcgdG8gdXBiX2RlZl9mcmVlemUuICovCi0gIGFkZF9k
ZWZzID0gbWFsbG9jKHNpemVvZih2b2lkKikgKiB1cGJfc3RydGFibGVfY291bnQoJmFkZHRhYikp
OwotICBpZiAoYWRkX2RlZnMgPT0gTlVMTCkgZ290byBvb21fZXJyOwotICB1cGJfc3RydGFibGVf
YmVnaW4oJml0ZXIsICZhZGR0YWIpOwotICBmb3IgKG4gPSAwOyAhdXBiX3N0cnRhYmxlX2RvbmUo
Jml0ZXIpOyB1cGJfc3RydGFibGVfbmV4dCgmaXRlcikpIHsKLSAgICBhZGRfZGVmc1tuKytdID0g
dXBiX3ZhbHVlX2dldHB0cih1cGJfc3RydGFibGVfaXRlcl92YWx1ZSgmaXRlcikpOwotICB9Ci0K
LSAgaWYgKCF1cGJfZGVmX2ZyZWV6ZShhZGRfZGVmcywgbiwgc3RhdHVzKSkgZ290byBlcnI7Ci0K
LSAgLyogVGhpcyBtdXN0IGJlIGRlbGF5ZWQgdW50aWwgYWxsIGVycm9ycyBoYXZlIGJlZW4gZGV0
ZWN0ZWQsIHNpbmNlIGVycm9yCi0gICAqIHJlY292ZXJ5IGNvZGUgdXNlcyB0aGlzIHRhYmxlIHRv
IGNsZWFudXAgZGVmcy4gKi8KLSAgdXBiX3N0cnRhYmxlX3VuaW5pdCgmYWRkdGFiKTsKLQotICAv
KiBUT0RPKGhhYmVybWFuKSB3ZSBkb24ndCBwcm9wZXJseSBoYW5kbGUgZXJyb3JzIGFmdGVyIHRo
aXMgcG9pbnQgKGxpa2UKLSAgICogT09NIGluIHVwYl9zdHJ0YWJsZV9pbnNlcnQoKSBiZWxvdyku
ICovCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICB1cGJfZGVmICpkZWYgPSBhZGRf
ZGVmc1tpXTsKLSAgICBjb25zdCBjaGFyICpuYW1lID0gdXBiX2RlZl9mdWxsbmFtZShkZWYpOwot
ICAgIHVwYl92YWx1ZSB2OwotICAgIGJvb2wgc3VjY2VzczsKLQotICAgIGlmICh1cGJfc3RydGFi
bGVfcmVtb3ZlKCZzLT5zeW10YWIsIG5hbWUsICZ2KSkgewotICAgICAgY29uc3QgdXBiX2RlZiAq
ZGVmID0gdXBiX3ZhbHVlX2dldHB0cih2KTsKLSAgICAgIHVwYl9kZWZfdW5yZWYoZGVmLCBzKTsK
LSAgICB9Ci0gICAgc3VjY2VzcyA9IHVwYl9zdHJ0YWJsZV9pbnNlcnQoJnMtPnN5bXRhYiwgbmFt
ZSwgdXBiX3ZhbHVlX3B0cihkZWYpKTsKLSAgICBVUEJfQVNTRVJUX1ZBUihzdWNjZXNzLCBzdWNj
ZXNzID09IHRydWUpOwotICB9Ci0gIGZyZWUoYWRkX2RlZnMpOwotICByZXR1cm4gdHJ1ZTsKLQot
b29tX2VycjoKLSAgdXBiX3N0YXR1c19zZXRlcnJtc2coc3RhdHVzLCAib3V0IG9mIG1lbW9yeSIp
OwotZXJyOiB7Ci0gICAgLyogRm9yIGRlZnMgdGhlIHVzZXIgcGFzc2VkIGluLCB3ZSBuZWVkIHRv
IGRvbmF0ZSB0aGUgcmVmcyBiYWNrLiAgRm9yIGRlZnMKLSAgICAgKiB3ZSBkdXAnZCwgd2UgbmVl
ZCB0byBqdXN0IHVucmVmIHRoZW0uICovCi0gICAgdXBiX3N0cnRhYmxlX2JlZ2luKCZpdGVyLCAm
YWRkdGFiKTsKLSAgICBmb3IgKDsgIXVwYl9zdHJ0YWJsZV9kb25lKCZpdGVyKTsgdXBiX3N0cnRh
YmxlX25leHQoJml0ZXIpKSB7Ci0gICAgICB1cGJfZGVmICpkZWYgPSB1cGJfdmFsdWVfZ2V0cHRy
KHVwYl9zdHJ0YWJsZV9pdGVyX3ZhbHVlKCZpdGVyKSk7Ci0gICAgICBib29sIGNhbWVfZnJvbV91
c2VyID0gZGVmLT5jYW1lX2Zyb21fdXNlcjsKLSAgICAgIGRlZi0+Y2FtZV9mcm9tX3VzZXIgPSBm
YWxzZTsKLSAgICAgIGlmIChjYW1lX2Zyb21fdXNlcikgewotICAgICAgICB1cGJfZGVmX2RvbmF0
ZXJlZihkZWYsIHMsIHJlZl9kb25vcik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB1cGJfZGVm
X3VucmVmKGRlZiwgcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHVwYl9zdHJ0YWJsZV91bmlu
aXQoJmFkZHRhYik7Ci0gIGZyZWUoYWRkX2RlZnMpOwotICBhc3NlcnQoIXVwYl9vayhzdGF0dXMp
KTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi0vKiBJdGVyYXRpb24uICovCi0KLXN0YXRpYyB2b2lk
IGFkdmFuY2VfdG9fbWF0Y2hpbmcodXBiX3N5bXRhYl9pdGVyICppdGVyKSB7Ci0gIGlmIChpdGVy
LT50eXBlID09IFVQQl9ERUZfQU5ZKQotICAgIHJldHVybjsKLQotICB3aGlsZSAoIXVwYl9zdHJ0
YWJsZV9kb25lKCZpdGVyLT5pdGVyKSAmJgotICAgICAgICAgaXRlci0+dHlwZSAhPSB1cGJfc3lt
dGFiX2l0ZXJfZGVmKGl0ZXIpLT50eXBlKSB7Ci0gICAgdXBiX3N0cnRhYmxlX25leHQoJml0ZXIt
Pml0ZXIpOwotICB9Ci19Ci0KLXZvaWQgdXBiX3N5bXRhYl9iZWdpbih1cGJfc3ltdGFiX2l0ZXIg
Kml0ZXIsIGNvbnN0IHVwYl9zeW10YWIgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgdXBiX2Rl
ZnR5cGVfdCB0eXBlKSB7Ci0gIHVwYl9zdHJ0YWJsZV9iZWdpbigmaXRlci0+aXRlciwgJnMtPnN5
bXRhYik7Ci0gIGl0ZXItPnR5cGUgPSB0eXBlOwotICBhZHZhbmNlX3RvX21hdGNoaW5nKGl0ZXIp
OwotfQotCi12b2lkIHVwYl9zeW10YWJfbmV4dCh1cGJfc3ltdGFiX2l0ZXIgKml0ZXIpIHsKLSAg
dXBiX3N0cnRhYmxlX25leHQoJml0ZXItPml0ZXIpOwotICBhZHZhbmNlX3RvX21hdGNoaW5nKGl0
ZXIpOwotfQotCi1ib29sIHVwYl9zeW10YWJfZG9uZShjb25zdCB1cGJfc3ltdGFiX2l0ZXIgKml0
ZXIpIHsKLSAgcmV0dXJuIHVwYl9zdHJ0YWJsZV9kb25lKCZpdGVyLT5pdGVyKTsKLX0KLQotY29u
c3QgdXBiX2RlZiAqdXBiX3N5bXRhYl9pdGVyX2RlZihjb25zdCB1cGJfc3ltdGFiX2l0ZXIgKml0
ZXIpIHsKLSAgcmV0dXJuIHVwYl92YWx1ZV9nZXRwdHIodXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUo
Jml0ZXItPml0ZXIpKTsKLX0KLS8qCi0qKiB1cGJfdGFibGUgSW1wbGVtZW50YXRpb24KLSoqCi0q
KiBJbXBsZW1lbnRhdGlvbiBpcyBoZWF2aWx5IGluc3BpcmVkIGJ5IEx1YSdzIGx0YWJsZS5jLgot
Ki8KLQotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNkZWZp
bmUgVVBCX01BWEFSUlNJWkUgMTYgIC8qIDY0ay4gKi8KLQotLyogRnJvbSBDaHJvbWl1bS4gKi8K
LSNkZWZpbmUgQVJSQVlfU0laRSh4KSBcCi0gICAgKChzaXplb2YoeCkvc2l6ZW9mKDBbeF0pKSAv
ICgoc2l6ZV90KSghKHNpemVvZih4KSAlIHNpemVvZigwW3hdKSkpKSkKLQotc3RhdGljIGNvbnN0
IGRvdWJsZSBNQVhfTE9BRCA9IDAuODU7Ci0KLS8qIFRoZSBtaW5pbXVtIHV0aWxpemF0aW9uIG9m
IHRoZSBhcnJheSBwYXJ0IG9mIGEgbWl4ZWQgaGFzaC9hcnJheSB0YWJsZS4gIFRoaXMKLSAqIGlz
IGEgc3BlZWQvbWVtb3J5LXVzYWdlIHRyYWRlb2ZmICh0aG91Z2ggaXQncyBub3Qgc3RyYWlnaHRm
b3J3YXJkIGJlY2F1c2Ugb2YKLSAqIGNhY2hlIGVmZmVjdHMpLiAgVGhlIGxvd2VyIHRoaXMgaXMs
IHRoZSBtb3JlIG1lbW9yeSB3ZSdsbCB1c2UuICovCi1zdGF0aWMgY29uc3QgZG91YmxlIE1JTl9E
RU5TSVRZID0gMC4xOwotCi1ib29sIGlzX3BvdzIodWludDY0X3QgdikgeyByZXR1cm4gdiA9PSAw
IHx8ICh2ICYgKHYgLSAxKSkgPT0gMDsgfQotCi1pbnQgbG9nMmNlaWwodWludDY0X3Qgdikgewot
ICBpbnQgcmV0ID0gMDsKLSAgYm9vbCBwb3cyID0gaXNfcG93Mih2KTsKLSAgd2hpbGUgKHYgPj49
IDEpIHJldCsrOwotICByZXQgPSBwb3cyID8gcmV0IDogcmV0ICsgMTsgIC8qIENlaWxpbmcuICov
Ci0gIHJldHVybiBVUEJfTUlOKFVQQl9NQVhBUlJTSVpFLCByZXQpOwotfQotCi1jaGFyICp1cGJf
c3RyZHVwKGNvbnN0IGNoYXIgKnMpIHsKLSAgcmV0dXJuIHVwYl9zdHJkdXAyKHMsIHN0cmxlbihz
KSk7Ci19Ci0KLWNoYXIgKnVwYl9zdHJkdXAyKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4pIHsK
LSAgc2l6ZV90IG47Ci0gIGNoYXIgKnA7Ci0KLSAgLyogUHJldmVudCBvdmVyZmxvdyBlcnJvcnMu
ICovCi0gIGlmIChsZW4gPT0gU0laRV9NQVgpIHJldHVybiBOVUxMOwotICAvKiBBbHdheXMgbnVs
bC10ZXJtaW5hdGUsIGV2ZW4gaWYgYmluYXJ5IGRhdGE7IGJ1dCBkb24ndCByZWx5IG9uIHRoZSBp
bnB1dCB0bwotICAgKiBoYXZlIGEgbnVsbC10ZXJtaW5hdGluZyBieXRlIHNpbmNlIGl0IG1heSBi
ZSBhIHJhdyBiaW5hcnkgYnVmZmVyLiAqLwotICBuID0gbGVuICsgMTsKLSAgcCA9IG1hbGxvYyhu
KTsKLSAgaWYgKHApIHsKLSAgICBtZW1jcHkocCwgcywgbGVuKTsKLSAgICBwW2xlbl0gPSAwOwot
ICB9Ci0gIHJldHVybiBwOwotfQotCi0vKiBBIHR5cGUgdG8gcmVwcmVzZW50IHRoZSBsb29rdXAg
a2V5IG9mIGVpdGhlciBhIHN0cnRhYmxlIG9yIGFuIGludHRhYmxlLiAqLwotdHlwZWRlZiB1bmlv
biB7Ci0gIHVpbnRwdHJfdCBudW07Ci0gIHN0cnVjdCB7Ci0gICAgY29uc3QgY2hhciAqc3RyOwot
ICAgIHNpemVfdCBsZW47Ci0gIH0gc3RyOwotfSBsb29rdXBrZXlfdDsKLQotc3RhdGljIGxvb2t1
cGtleV90IHN0cmtleTIoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKSB7Ci0gIGxvb2t1cGtl
eV90IGs7Ci0gIGsuc3RyLnN0ciA9IHN0cjsKLSAgay5zdHIubGVuID0gbGVuOwotICByZXR1cm4g
azsKLX0KLQotc3RhdGljIGxvb2t1cGtleV90IGludGtleSh1aW50cHRyX3Qga2V5KSB7Ci0gIGxv
b2t1cGtleV90IGs7Ci0gIGsubnVtID0ga2V5OwotICByZXR1cm4gazsKLX0KLQotdHlwZWRlZiB1
aW50MzJfdCBoYXNoZnVuY190KHVwYl90YWJrZXkga2V5KTsKLXR5cGVkZWYgYm9vbCBlcWxmdW5j
X3QodXBiX3RhYmtleSBrMSwgbG9va3Vwa2V5X3QgazIpOwotCi0vKiBCYXNlIHRhYmxlIChzaGFy
ZWQgY29kZSkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwotCi0vKiBGb3Igd2hlbiB3ZSBuZWVkIHRvIGNhc3QgYXdheSBjb25zdC4gKi8KLXN0YXRp
YyB1cGJfdGFiZW50ICptdXRhYmxlX2VudHJpZXModXBiX3RhYmxlICp0KSB7Ci0gIHJldHVybiAo
dXBiX3RhYmVudCopdC0+ZW50cmllczsKLX0KLQotc3RhdGljIGJvb2wgaXNmdWxsKHVwYl90YWJs
ZSAqdCkgewotICByZXR1cm4gKGRvdWJsZSkodC0+Y291bnQgKyAxKSAvIHVwYl90YWJsZV9zaXpl
KHQpID4gTUFYX0xPQUQ7Ci19Ci0KLXN0YXRpYyBib29sIGluaXQodXBiX3RhYmxlICp0LCB1cGJf
Y3R5cGVfdCBjdHlwZSwgdWludDhfdCBzaXplX2xnMikgewotICBzaXplX3QgYnl0ZXM7Ci0KLSAg
dC0+Y291bnQgPSAwOwotICB0LT5jdHlwZSA9IGN0eXBlOwotICB0LT5zaXplX2xnMiA9IHNpemVf
bGcyOwotICB0LT5tYXNrID0gdXBiX3RhYmxlX3NpemUodCkgPyB1cGJfdGFibGVfc2l6ZSh0KSAt
IDEgOiAwOwotICBieXRlcyA9IHVwYl90YWJsZV9zaXplKHQpICogc2l6ZW9mKHVwYl90YWJlbnQp
OwotICBpZiAoYnl0ZXMgPiAwKSB7Ci0gICAgdC0+ZW50cmllcyA9IG1hbGxvYyhieXRlcyk7Ci0g
ICAgaWYgKCF0LT5lbnRyaWVzKSByZXR1cm4gZmFsc2U7Ci0gICAgbWVtc2V0KG11dGFibGVfZW50
cmllcyh0KSwgMCwgYnl0ZXMpOwotICB9IGVsc2UgewotICAgIHQtPmVudHJpZXMgPSBOVUxMOwot
ICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCB1bmluaXQodXBiX3RhYmxlICp0
KSB7IGZyZWUobXV0YWJsZV9lbnRyaWVzKHQpKTsgfQotCi1zdGF0aWMgdXBiX3RhYmVudCAqZW1w
dHllbnQodXBiX3RhYmxlICp0KSB7Ci0gIHVwYl90YWJlbnQgKmUgPSBtdXRhYmxlX2VudHJpZXMo
dCkgKyB1cGJfdGFibGVfc2l6ZSh0KTsKLSAgd2hpbGUgKDEpIHsgaWYgKHVwYl90YWJlbnRfaXNl
bXB0eSgtLWUpKSByZXR1cm4gZTsgYXNzZXJ0KGUgPiB0LT5lbnRyaWVzKTsgfQotfQotCi1zdGF0
aWMgdXBiX3RhYmVudCAqZ2V0ZW50cnlfbXV0YWJsZSh1cGJfdGFibGUgKnQsIHVpbnQzMl90IGhh
c2gpIHsKLSAgcmV0dXJuICh1cGJfdGFiZW50Kil1cGJfZ2V0ZW50cnkodCwgaGFzaCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCB1cGJfdGFiZW50ICpmaW5kZW50cnkoY29uc3QgdXBiX3RhYmxlICp0LCBs
b29rdXBrZXlfdCBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGhhc2gsIGVxbGZ1bmNfdCAqZXFsKSB7Ci0gIGNvbnN0IHVwYl90YWJlbnQgKmU7Ci0KLSAg
aWYgKHQtPnNpemVfbGcyID09IDApIHJldHVybiBOVUxMOwotICBlID0gdXBiX2dldGVudHJ5KHQs
IGhhc2gpOwotICBpZiAodXBiX3RhYmVudF9pc2VtcHR5KGUpKSByZXR1cm4gTlVMTDsKLSAgd2hp
bGUgKDEpIHsKLSAgICBpZiAoZXFsKGUtPmtleSwga2V5KSkgcmV0dXJuIGU7Ci0gICAgaWYgKChl
ID0gZS0+bmV4dCkgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHVwYl90
YWJlbnQgKmZpbmRlbnRyeV9tdXRhYmxlKHVwYl90YWJsZSAqdCwgbG9va3Vwa2V5X3Qga2V5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhhc2gsIGVxbGZ1
bmNfdCAqZXFsKSB7Ci0gIHJldHVybiAodXBiX3RhYmVudCopZmluZGVudHJ5KHQsIGtleSwgaGFz
aCwgZXFsKTsKLX0KLQotc3RhdGljIGJvb2wgbG9va3VwKGNvbnN0IHVwYl90YWJsZSAqdCwgbG9v
a3Vwa2V5X3Qga2V5LCB1cGJfdmFsdWUgKnYsCi0gICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
aGFzaCwgZXFsZnVuY190ICplcWwpIHsKLSAgY29uc3QgdXBiX3RhYmVudCAqZSA9IGZpbmRlbnRy
eSh0LCBrZXksIGhhc2gsIGVxbCk7Ci0gIGlmIChlKSB7Ci0gICAgaWYgKHYpIHsKLSAgICAgIF91
cGJfdmFsdWVfc2V0dmFsKHYsIGUtPnZhbC52YWwsIHQtPmN0eXBlKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLS8qIFRo
ZSBnaXZlbiBrZXkgbXVzdCBub3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdGFibGUuICovCi1zdGF0
aWMgdm9pZCBpbnNlcnQodXBiX3RhYmxlICp0LCBsb29rdXBrZXlfdCBrZXksIHVwYl90YWJrZXkg
dGFia2V5LAotICAgICAgICAgICAgICAgICAgIHVwYl92YWx1ZSB2YWwsIHVpbnQzMl90IGhhc2gs
Ci0gICAgICAgICAgICAgICAgICAgaGFzaGZ1bmNfdCAqaGFzaGZ1bmMsIGVxbGZ1bmNfdCAqZXFs
KSB7Ci0gIHVwYl90YWJlbnQgKm1haW5wb3NfZTsKLSAgdXBiX3RhYmVudCAqb3VyX2U7Ci0KLSAg
VVBCX1VOVVNFRChlcWwpOwotICBVUEJfVU5VU0VEKGtleSk7Ci0gIGFzc2VydChmaW5kZW50cnko
dCwga2V5LCBoYXNoLCBlcWwpID09IE5VTEwpOwotICBhc3NlcnQodmFsLmN0eXBlID09IHQtPmN0
eXBlKTsKLQotICB0LT5jb3VudCsrOwotICBtYWlucG9zX2UgPSBnZXRlbnRyeV9tdXRhYmxlKHQs
IGhhc2gpOwotICBvdXJfZSA9IG1haW5wb3NfZTsKLQotICBpZiAodXBiX3RhYmVudF9pc2VtcHR5
KG1haW5wb3NfZSkpIHsKLSAgICAvKiBPdXIgbWFpbiBwb3NpdGlvbiBpcyBlbXB0eTsgdXNlIGl0
LiAqLwotICAgIG91cl9lLT5uZXh0ID0gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICAvKiBDb2xsaXNp
b24uICovCi0gICAgdXBiX3RhYmVudCAqbmV3X2UgPSBlbXB0eWVudCh0KTsKLSAgICAvKiBIZWFk
IG9mIGNvbGxpZGVyJ3MgY2hhaW4uICovCi0gICAgdXBiX3RhYmVudCAqY2hhaW4gPSBnZXRlbnRy
eV9tdXRhYmxlKHQsIGhhc2hmdW5jKG1haW5wb3NfZS0+a2V5KSk7Ci0gICAgaWYgKGNoYWluID09
IG1haW5wb3NfZSkgewotICAgICAgLyogRXhpc3RpbmcgZW50IGlzIGluIGl0cyBtYWluIHBvc2lz
aXRvbiAoaXQgaGFzIHRoZSBzYW1lIGhhc2ggYXMgdXMsIGFuZAotICAgICAgICogaXMgdGhlIGhl
YWQgb2Ygb3VyIGNoYWluKS4gIEluc2VydCB0byBuZXcgZW50IGFuZCBhcHBlbmQgdG8gdGhpcyBj
aGFpbi4gKi8KLSAgICAgIG5ld19lLT5uZXh0ID0gbWFpbnBvc19lLT5uZXh0OwotICAgICAgbWFp
bnBvc19lLT5uZXh0ID0gbmV3X2U7Ci0gICAgICBvdXJfZSA9IG5ld19lOwotICAgIH0gZWxzZSB7
Ci0gICAgICAvKiBFeGlzdGluZyBlbnQgaXMgbm90IGluIGl0cyBtYWluIHBvc2l0aW9uIChpdCBp
cyBhIG5vZGUgaW4gc29tZSBvdGhlcgotICAgICAgICogY2hhaW4pLiAgVGhpcyBpbXBsaWVzIHRo
YXQgbm8gZXhpc3RpbmcgZW50IGluIHRoZSB0YWJsZSBoYXMgb3VyIGhhc2guCi0gICAgICAgKiBF
dmljdCBpdCAodXBkYXRpbmcgaXRzIGNoYWluKSBhbmQgdXNlIGl0cyBlbnQgZm9yIGhlYWQgb2Yg
b3VyIGNoYWluLiAqLwotICAgICAgKm5ld19lID0gKm1haW5wb3NfZTsgIC8qIGNvcGllcyBuZXh0
LiAqLwotICAgICAgd2hpbGUgKGNoYWluLT5uZXh0ICE9IG1haW5wb3NfZSkgewotICAgICAgICBj
aGFpbiA9ICh1cGJfdGFiZW50KiljaGFpbi0+bmV4dDsKLSAgICAgICAgYXNzZXJ0KGNoYWluKTsK
LSAgICAgIH0KLSAgICAgIGNoYWluLT5uZXh0ID0gbmV3X2U7Ci0gICAgICBvdXJfZSA9IG1haW5w
b3NfZTsKLSAgICAgIG91cl9lLT5uZXh0ID0gTlVMTDsKLSAgICB9Ci0gIH0KLSAgb3VyX2UtPmtl
eSA9IHRhYmtleTsKLSAgb3VyX2UtPnZhbC52YWwgPSB2YWwudmFsOwotICBhc3NlcnQoZmluZGVu
dHJ5KHQsIGtleSwgaGFzaCwgZXFsKSA9PSBvdXJfZSk7Ci19Ci0KLXN0YXRpYyBib29sIHJtKHVw
Yl90YWJsZSAqdCwgbG9va3Vwa2V5X3Qga2V5LCB1cGJfdmFsdWUgKnZhbCwKLSAgICAgICAgICAg
ICAgIHVwYl90YWJrZXkgKnJlbW92ZWQsIHVpbnQzMl90IGhhc2gsIGVxbGZ1bmNfdCAqZXFsKSB7
Ci0gIHVwYl90YWJlbnQgKmNoYWluID0gZ2V0ZW50cnlfbXV0YWJsZSh0LCBoYXNoKTsKLSAgaWYg
KHVwYl90YWJlbnRfaXNlbXB0eShjaGFpbikpIHJldHVybiBmYWxzZTsKLSAgaWYgKGVxbChjaGFp
bi0+a2V5LCBrZXkpKSB7Ci0gICAgLyogRWxlbWVudCB0byByZW1vdmUgaXMgYXQgdGhlIGhlYWQg
b2YgaXRzIGNoYWluLiAqLwotICAgIHQtPmNvdW50LS07Ci0gICAgaWYgKHZhbCkgewotICAgICAg
X3VwYl92YWx1ZV9zZXR2YWwodmFsLCBjaGFpbi0+dmFsLnZhbCwgdC0+Y3R5cGUpOwotICAgIH0K
LSAgICBpZiAoY2hhaW4tPm5leHQpIHsKLSAgICAgIHVwYl90YWJlbnQgKm1vdmUgPSAodXBiX3Rh
YmVudCopY2hhaW4tPm5leHQ7Ci0gICAgICAqY2hhaW4gPSAqbW92ZTsKLSAgICAgIGlmIChyZW1v
dmVkKSAqcmVtb3ZlZCA9IG1vdmUtPmtleTsKLSAgICAgIG1vdmUtPmtleSA9IDA7ICAvKiBNYWtl
IHRoZSBzbG90IGVtcHR5LiAqLwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAocmVtb3ZlZCkgKnJl
bW92ZWQgPSBjaGFpbi0+a2V5OwotICAgICAgY2hhaW4tPmtleSA9IDA7ICAvKiBNYWtlIHRoZSBz
bG90IGVtcHR5LiAqLwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICAv
KiBFbGVtZW50IHRvIHJlbW92ZSBpcyBlaXRoZXIgaW4gYSBub24taGVhZCBwb3NpdGlvbiBvciBu
b3QgaW4gdGhlCi0gICAgICogdGFibGUuICovCi0gICAgd2hpbGUgKGNoYWluLT5uZXh0ICYmICFl
cWwoY2hhaW4tPm5leHQtPmtleSwga2V5KSkKLSAgICAgIGNoYWluID0gKHVwYl90YWJlbnQqKWNo
YWluLT5uZXh0OwotICAgIGlmIChjaGFpbi0+bmV4dCkgewotICAgICAgLyogRm91bmQgZWxlbWVu
dCB0byByZW1vdmUuICovCi0gICAgICB1cGJfdGFiZW50ICpybTsKLQotICAgICAgaWYgKHZhbCkg
ewotICAgICAgICBfdXBiX3ZhbHVlX3NldHZhbCh2YWwsIGNoYWluLT5uZXh0LT52YWwudmFsLCB0
LT5jdHlwZSk7Ci0gICAgICB9Ci0gICAgICBybSA9ICh1cGJfdGFiZW50KiljaGFpbi0+bmV4dDsK
LSAgICAgIGlmIChyZW1vdmVkKSAqcmVtb3ZlZCA9IHJtLT5rZXk7Ci0gICAgICBybS0+a2V5ID0g
MDsKLSAgICAgIGNoYWluLT5uZXh0ID0gcm0tPm5leHQ7Ci0gICAgICB0LT5jb3VudC0tOwotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gIH0KLX0KLQotc3RhdGljIHNpemVfdCBuZXh0KGNvbnN0IHVwYl90YWJsZSAqdCwgc2l6ZV90
IGkpIHsKLSAgZG8gewotICAgIGlmICgrK2kgPj0gdXBiX3RhYmxlX3NpemUodCkpCi0gICAgICBy
ZXR1cm4gU0laRV9NQVg7Ci0gIH0gd2hpbGUodXBiX3RhYmVudF9pc2VtcHR5KCZ0LT5lbnRyaWVz
W2ldKSk7Ci0KLSAgcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyBzaXplX3QgYmVnaW4oY29uc3QgdXBi
X3RhYmxlICp0KSB7Ci0gIHJldHVybiBuZXh0KHQsIC0xKTsKLX0KLQotCi0vKiB1cGJfc3RydGFi
bGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwotCi0vKiBBIHNpbXBsZSAic3ViY2xhc3MiIG9mIHVwYl90YWJsZSB0aGF0IG9u
bHkgYWRkcyBhIGhhc2ggZnVuY3Rpb24gZm9yIHN0cmluZ3MuICovCi0KLXN0YXRpYyB1cGJfdGFi
a2V5IHN0cmNvcHkobG9va3Vwa2V5X3QgazIpIHsKLSAgY2hhciAqc3RyID0gbWFsbG9jKGsyLnN0
ci5sZW4gKyBzaXplb2YodWludDMyX3QpICsgMSk7Ci0gIGlmIChzdHIgPT0gTlVMTCkgcmV0dXJu
IDA7Ci0gIG1lbWNweShzdHIsICZrMi5zdHIubGVuLCBzaXplb2YodWludDMyX3QpKTsKLSAgbWVt
Y3B5KHN0ciArIHNpemVvZih1aW50MzJfdCksIGsyLnN0ci5zdHIsIGsyLnN0ci5sZW4gKyAxKTsK
LSAgcmV0dXJuICh1aW50cHRyX3Qpc3RyOwotfQotCi1zdGF0aWMgdWludDMyX3Qgc3RyaGFzaCh1
cGJfdGFia2V5IGtleSkgewotICB1aW50MzJfdCBsZW47Ci0gIGNoYXIgKnN0ciA9IHVwYl90YWJz
dHIoa2V5LCAmbGVuKTsKLSAgcmV0dXJuIE11cm11ckhhc2gyKHN0ciwgbGVuLCAwKTsKLX0KLQot
c3RhdGljIGJvb2wgc3RyZXFsKHVwYl90YWJrZXkgazEsIGxvb2t1cGtleV90IGsyKSB7Ci0gIHVp
bnQzMl90IGxlbjsKLSAgY2hhciAqc3RyID0gdXBiX3RhYnN0cihrMSwgJmxlbik7Ci0gIHJldHVy
biBsZW4gPT0gazIuc3RyLmxlbiAmJiBtZW1jbXAoc3RyLCBrMi5zdHIuc3RyLCBsZW4pID09IDA7
Ci19Ci0KLWJvb2wgdXBiX3N0cnRhYmxlX2luaXQodXBiX3N0cnRhYmxlICp0LCB1cGJfY3R5cGVf
dCBjdHlwZSkgewotICByZXR1cm4gaW5pdCgmdC0+dCwgY3R5cGUsIDIpOwotfQotCi12b2lkIHVw
Yl9zdHJ0YWJsZV91bmluaXQodXBiX3N0cnRhYmxlICp0KSB7Ci0gIHNpemVfdCBpOwotICBmb3Ig
KGkgPSAwOyBpIDwgdXBiX3RhYmxlX3NpemUoJnQtPnQpOyBpKyspCi0gICAgZnJlZSgodm9pZCop
dC0+dC5lbnRyaWVzW2ldLmtleSk7Ci0gIHVuaW5pdCgmdC0+dCk7Ci19Ci0KLWJvb2wgdXBiX3N0
cnRhYmxlX3Jlc2l6ZSh1cGJfc3RydGFibGUgKnQsIHNpemVfdCBzaXplX2xnMikgewotICB1cGJf
c3RydGFibGUgbmV3X3RhYmxlOwotICB1cGJfc3RydGFibGVfaXRlciBpOwotCi0gIGlmICghaW5p
dCgmbmV3X3RhYmxlLnQsIHQtPnQuY3R5cGUsIHNpemVfbGcyKSkKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIHVwYl9zdHJ0YWJsZV9iZWdpbigmaSwgdCk7Ci0gIGZvciAoIDsgIXVwYl9zdHJ0YWJsZV9k
b25lKCZpKTsgdXBiX3N0cnRhYmxlX25leHQoJmkpKSB7Ci0gICAgdXBiX3N0cnRhYmxlX2luc2Vy
dDIoCi0gICAgICAgICZuZXdfdGFibGUsCi0gICAgICAgIHVwYl9zdHJ0YWJsZV9pdGVyX2tleSgm
aSksCi0gICAgICAgIHVwYl9zdHJ0YWJsZV9pdGVyX2tleWxlbmd0aCgmaSksCi0gICAgICAgIHVw
Yl9zdHJ0YWJsZV9pdGVyX3ZhbHVlKCZpKSk7Ci0gIH0KLSAgdXBiX3N0cnRhYmxlX3VuaW5pdCh0
KTsKLSAgKnQgPSBuZXdfdGFibGU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIHVwYl9zdHJ0
YWJsZV9pbnNlcnQyKHVwYl9zdHJ0YWJsZSAqdCwgY29uc3QgY2hhciAqaywgc2l6ZV90IGxlbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3ZhbHVlIHYpIHsKLSAgbG9va3Vwa2V5X3Qg
a2V5OwotICB1cGJfdGFia2V5IHRhYmtleTsKLSAgdWludDMyX3QgaGFzaDsKLQotICBpZiAoaXNm
dWxsKCZ0LT50KSkgewotICAgIC8qIE5lZWQgdG8gcmVzaXplLiAgTmV3IHRhYmxlIG9mIGRvdWJs
ZSB0aGUgc2l6ZSwgYWRkIG9sZCBlbGVtZW50cyB0byBpdC4gKi8KLSAgICBpZiAoIXVwYl9zdHJ0
YWJsZV9yZXNpemUodCwgdC0+dC5zaXplX2xnMiArIDEpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICB9Ci0KLSAga2V5ID0gc3Rya2V5MihrLCBsZW4pOwotICB0YWJrZXkgPSBzdHJj
b3B5KGtleSk7Ci0gIGlmICh0YWJrZXkgPT0gMCkgcmV0dXJuIGZhbHNlOwotCi0gIGhhc2ggPSBN
dXJtdXJIYXNoMihrZXkuc3RyLnN0ciwga2V5LnN0ci5sZW4sIDApOwotICBpbnNlcnQoJnQtPnQs
IGtleSwgdGFia2V5LCB2LCBoYXNoLCAmc3RyaGFzaCwgJnN0cmVxbCk7Ci0gIHJldHVybiB0cnVl
OwotfQotCi1ib29sIHVwYl9zdHJ0YWJsZV9sb29rdXAyKGNvbnN0IHVwYl9zdHJ0YWJsZSAqdCwg
Y29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1
cGJfdmFsdWUgKnYpIHsKLSAgdWludDMyX3QgaGFzaCA9IE11cm11ckhhc2gyKGtleSwgbGVuLCAw
KTsKLSAgcmV0dXJuIGxvb2t1cCgmdC0+dCwgc3Rya2V5MihrZXksIGxlbiksIHYsIGhhc2gsICZz
dHJlcWwpOwotfQotCi1ib29sIHVwYl9zdHJ0YWJsZV9yZW1vdmUyKHVwYl9zdHJ0YWJsZSAqdCwg
Y29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVw
Yl92YWx1ZSAqdmFsKSB7Ci0gIHVpbnQzMl90IGhhc2ggPSBNdXJtdXJIYXNoMihrZXksIHN0cmxl
bihrZXkpLCAwKTsKLSAgdXBiX3RhYmtleSB0YWJrZXk7Ci0gIGlmIChybSgmdC0+dCwgc3Rya2V5
MihrZXksIGxlbiksIHZhbCwgJnRhYmtleSwgaGFzaCwgJnN0cmVxbCkpIHsKLSAgICBmcmVlKCh2
b2lkKil0YWJrZXkpOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotfQotCi0vKiBJdGVyYXRpb24gKi8KLQotc3RhdGljIGNvbnN0IHVwYl90YWJl
bnQgKnN0cl90YWJlbnQoY29uc3QgdXBiX3N0cnRhYmxlX2l0ZXIgKmkpIHsKLSAgcmV0dXJuICZp
LT50LT50LmVudHJpZXNbaS0+aW5kZXhdOwotfQotCi12b2lkIHVwYl9zdHJ0YWJsZV9iZWdpbih1
cGJfc3RydGFibGVfaXRlciAqaSwgY29uc3QgdXBiX3N0cnRhYmxlICp0KSB7Ci0gIGktPnQgPSB0
OwotICBpLT5pbmRleCA9IGJlZ2luKCZ0LT50KTsKLX0KLQotdm9pZCB1cGJfc3RydGFibGVfbmV4
dCh1cGJfc3RydGFibGVfaXRlciAqaSkgewotICBpLT5pbmRleCA9IG5leHQoJmktPnQtPnQsIGkt
PmluZGV4KTsKLX0KLQotYm9vbCB1cGJfc3RydGFibGVfZG9uZShjb25zdCB1cGJfc3RydGFibGVf
aXRlciAqaSkgewotICByZXR1cm4gaS0+aW5kZXggPj0gdXBiX3RhYmxlX3NpemUoJmktPnQtPnQp
IHx8Ci0gICAgICAgICB1cGJfdGFiZW50X2lzZW1wdHkoc3RyX3RhYmVudChpKSk7Ci19Ci0KLWNv
bnN0IGNoYXIgKnVwYl9zdHJ0YWJsZV9pdGVyX2tleSh1cGJfc3RydGFibGVfaXRlciAqaSkgewot
ICBhc3NlcnQoIXVwYl9zdHJ0YWJsZV9kb25lKGkpKTsKLSAgcmV0dXJuIHVwYl90YWJzdHIoc3Ry
X3RhYmVudChpKS0+a2V5LCBOVUxMKTsKLX0KLQotc2l6ZV90IHVwYl9zdHJ0YWJsZV9pdGVyX2tl
eWxlbmd0aCh1cGJfc3RydGFibGVfaXRlciAqaSkgewotICB1aW50MzJfdCBsZW47Ci0gIGFzc2Vy
dCghdXBiX3N0cnRhYmxlX2RvbmUoaSkpOwotICB1cGJfdGFic3RyKHN0cl90YWJlbnQoaSktPmtl
eSwgJmxlbik7Ci0gIHJldHVybiBsZW47Ci19Ci0KLXVwYl92YWx1ZSB1cGJfc3RydGFibGVfaXRl
cl92YWx1ZShjb25zdCB1cGJfc3RydGFibGVfaXRlciAqaSkgewotICBhc3NlcnQoIXVwYl9zdHJ0
YWJsZV9kb25lKGkpKTsKLSAgcmV0dXJuIF91cGJfdmFsdWVfdmFsKHN0cl90YWJlbnQoaSktPnZh
bC52YWwsIGktPnQtPnQuY3R5cGUpOwotfQotCi12b2lkIHVwYl9zdHJ0YWJsZV9pdGVyX3NldGRv
bmUodXBiX3N0cnRhYmxlX2l0ZXIgKmkpIHsKLSAgaS0+aW5kZXggPSBTSVpFX01BWDsKLX0KLQot
Ym9vbCB1cGJfc3RydGFibGVfaXRlcl9pc2VxdWFsKGNvbnN0IHVwYl9zdHJ0YWJsZV9pdGVyICpp
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfc3RydGFibGVfaXRl
ciAqaTIpIHsKLSAgaWYgKHVwYl9zdHJ0YWJsZV9kb25lKGkxKSAmJiB1cGJfc3RydGFibGVfZG9u
ZShpMikpCi0gICAgcmV0dXJuIHRydWU7Ci0gIHJldHVybiBpMS0+dCA9PSBpMi0+dCAmJiBpMS0+
aW5kZXggPT0gaTItPmluZGV4OwotfQotCi0KLS8qIHVwYl9pbnR0YWJsZSAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8q
IEZvciBpbnR0YWJsZXMgd2UgdXNlIGEgaHlicmlkIHN0cnVjdHVyZSB3aGVyZSBzbWFsbCBrZXlz
IGFyZSBrZXB0IGluIGFuCi0gKiBhcnJheSBhbmQgbGFyZ2Uga2V5cyBhcmUgcHV0IGluIHRoZSBo
YXNoIHRhYmxlLiAqLwotCi1zdGF0aWMgdWludDMyX3QgaW50aGFzaCh1cGJfdGFia2V5IGtleSkg
eyByZXR1cm4gdXBiX2ludGhhc2goa2V5KTsgfQotCi1zdGF0aWMgYm9vbCBpbnRlcWwodXBiX3Rh
YmtleSBrMSwgbG9va3Vwa2V5X3QgazIpIHsKLSAgcmV0dXJuIGsxID09IGsyLm51bTsKLX0KLQot
c3RhdGljIHVwYl90YWJ2YWwgKm11dGFibGVfYXJyYXkodXBiX2ludHRhYmxlICp0KSB7Ci0gIHJl
dHVybiAodXBiX3RhYnZhbCopdC0+YXJyYXk7Ci19Ci0KLXN0YXRpYyB1cGJfdGFidmFsICppbnR0
YWJsZV92YWwodXBiX2ludHRhYmxlICp0LCB1aW50cHRyX3Qga2V5KSB7Ci0gIGlmIChrZXkgPCB0
LT5hcnJheV9zaXplKSB7Ci0gICAgcmV0dXJuIHVwYl9hcnJoYXModC0+YXJyYXlba2V5XSkgPyAm
KG11dGFibGVfYXJyYXkodClba2V5XSkgOiBOVUxMOwotICB9IGVsc2UgewotICAgIHVwYl90YWJl
bnQgKmUgPQotICAgICAgICBmaW5kZW50cnlfbXV0YWJsZSgmdC0+dCwgaW50a2V5KGtleSksIHVw
Yl9pbnRoYXNoKGtleSksICZpbnRlcWwpOwotICAgIHJldHVybiBlID8gJmUtPnZhbCA6IE5VTEw7
Ci0gIH0KLX0KLQotc3RhdGljIGNvbnN0IHVwYl90YWJ2YWwgKmludHRhYmxlX3ZhbF9jb25zdChj
b25zdCB1cGJfaW50dGFibGUgKnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnRwdHJfdCBrZXkpIHsKLSAgcmV0dXJuIGludHRhYmxlX3ZhbCgodXBiX2lu
dHRhYmxlKil0LCBrZXkpOwotfQotCi1zaXplX3QgdXBiX2ludHRhYmxlX2NvdW50KGNvbnN0IHVw
Yl9pbnR0YWJsZSAqdCkgewotICByZXR1cm4gdC0+dC5jb3VudCArIHQtPmFycmF5X2NvdW50Owot
fQotCi1zdGF0aWMgdm9pZCBjaGVjayh1cGJfaW50dGFibGUgKnQpIHsKLSAgVVBCX1VOVVNFRCh0
KTsKLSNpZiBkZWZpbmVkKFVQQl9ERUJVR19UQUJMRSkgJiYgIWRlZmluZWQoTkRFQlVHKQotICB7
Ci0gICAgLyogVGhpcyBjaGVjayBpcyB2ZXJ5IGV4cGVuc2l2ZSAobWFrZXMgaW5zZXJ0cy9kZWxl
dGVzIE8oTikpLiAqLwotICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgdXBiX2ludHRhYmxlX2l0
ZXIgaTsKLSAgICB1cGJfaW50dGFibGVfYmVnaW4oJmksIHQpOwotICAgIGZvcig7ICF1cGJfaW50
dGFibGVfZG9uZSgmaSk7IHVwYl9pbnR0YWJsZV9uZXh0KCZpKSwgY291bnQrKykgewotICAgICAg
YXNzZXJ0KHVwYl9pbnR0YWJsZV9sb29rdXAodCwgdXBiX2ludHRhYmxlX2l0ZXJfa2V5KCZpKSwg
TlVMTCkpOwotICAgIH0KLSAgICBhc3NlcnQoY291bnQgPT0gdXBiX2ludHRhYmxlX2NvdW50KHQp
KTsKLSAgfQotI2VuZGlmCi19Ci0KLWJvb2wgdXBiX2ludHRhYmxlX3NpemVkaW5pdCh1cGJfaW50
dGFibGUgKnQsIHVwYl9jdHlwZV90IGN0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBhc2l6ZSwgaW50IGhzaXplX2xnMikgewotICBzaXplX3QgYXJyYXlfYnl0ZXM7Ci0K
LSAgaWYgKCFpbml0KCZ0LT50LCBjdHlwZSwgaHNpemVfbGcyKSkgcmV0dXJuIGZhbHNlOwotICAv
KiBBbHdheXMgbWFrZSB0aGUgYXJyYXkgcGFydCBhdCBsZWFzdCAxIGxvbmcsIHNvIHRoYXQgd2Ug
a25vdyBrZXkgMAotICAgKiB3b24ndCBiZSBpbiB0aGUgaGFzaCBwYXJ0LCB3aGljaCBzaW1wbGlm
aWVzIHRoaW5ncy4gKi8KLSAgdC0+YXJyYXlfc2l6ZSA9IFVQQl9NQVgoMSwgYXNpemUpOwotICB0
LT5hcnJheV9jb3VudCA9IDA7Ci0gIGFycmF5X2J5dGVzID0gdC0+YXJyYXlfc2l6ZSAqIHNpemVv
Zih1cGJfdmFsdWUpOwotICB0LT5hcnJheSA9IG1hbGxvYyhhcnJheV9ieXRlcyk7Ci0gIGlmICgh
dC0+YXJyYXkpIHsKLSAgICB1bmluaXQoJnQtPnQpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICBtZW1zZXQobXV0YWJsZV9hcnJheSh0KSwgMHhmZiwgYXJyYXlfYnl0ZXMpOwotICBjaGVjayh0
KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdXBiX2ludHRhYmxlX2luaXQodXBiX2ludHRh
YmxlICp0LCB1cGJfY3R5cGVfdCBjdHlwZSkgewotICByZXR1cm4gdXBiX2ludHRhYmxlX3NpemVk
aW5pdCh0LCBjdHlwZSwgMCwgNCk7Ci19Ci0KLXZvaWQgdXBiX2ludHRhYmxlX3VuaW5pdCh1cGJf
aW50dGFibGUgKnQpIHsKLSAgdW5pbml0KCZ0LT50KTsKLSAgZnJlZShtdXRhYmxlX2FycmF5KHQp
KTsKLX0KLQotYm9vbCB1cGJfaW50dGFibGVfaW5zZXJ0KHVwYl9pbnR0YWJsZSAqdCwgdWludHB0
cl90IGtleSwgdXBiX3ZhbHVlIHZhbCkgewotICAvKiBYWFg6IFRhYmxlIGNhbid0IHN0b3JlIHZh
bHVlICh1aW50NjRfdCktMS4gIE5lZWQgdG8gc29tZWhvdyBzdGF0aWNhbGx5Ci0gICAqIGd1YXJh
bnRlZSB0aGF0IHRoaXMgaXMgbm90IG5lY2Vzc2FyeSwgb3IgZml4IHRoZSBsaW1pdGF0aW9uLiAq
LwotICB1cGJfdGFidmFsIHRhYnZhbDsKLSAgdGFidmFsLnZhbCA9IHZhbC52YWw7Ci0gIFVQQl9V
TlVTRUQodGFidmFsKTsKLSAgYXNzZXJ0KHVwYl9hcnJoYXModGFidmFsKSk7Ci0KLSAgaWYgKGtl
eSA8IHQtPmFycmF5X3NpemUpIHsKLSAgICBhc3NlcnQoIXVwYl9hcnJoYXModC0+YXJyYXlba2V5
XSkpOwotICAgIHQtPmFycmF5X2NvdW50Kys7Ci0gICAgbXV0YWJsZV9hcnJheSh0KVtrZXldLnZh
bCA9IHZhbC52YWw7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGlzZnVsbCgmdC0+dCkpIHsKLSAgICAg
IC8qIE5lZWQgdG8gcmVzaXplIHRoZSBoYXNoIHBhcnQsIGJ1dCB3ZSByZS11c2UgdGhlIGFycmF5
IHBhcnQuICovCi0gICAgICBzaXplX3QgaTsKLSAgICAgIHVwYl90YWJsZSBuZXdfdGFibGU7Ci0g
ICAgICBpZiAoIWluaXQoJm5ld190YWJsZSwgdC0+dC5jdHlwZSwgdC0+dC5zaXplX2xnMiArIDEp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBmb3IgKGkgPSBiZWdpbigmdC0+dCk7IGkg
PCB1cGJfdGFibGVfc2l6ZSgmdC0+dCk7IGkgPSBuZXh0KCZ0LT50LCBpKSkgewotICAgICAgICBj
b25zdCB1cGJfdGFiZW50ICplID0gJnQtPnQuZW50cmllc1tpXTsKLSAgICAgICAgdWludDMyX3Qg
aGFzaDsKLSAgICAgICAgdXBiX3ZhbHVlIHY7Ci0KLSAgICAgICAgX3VwYl92YWx1ZV9zZXR2YWwo
JnYsIGUtPnZhbC52YWwsIHQtPnQuY3R5cGUpOwotICAgICAgICBoYXNoID0gdXBiX2ludGhhc2go
ZS0+a2V5KTsKLSAgICAgICAgaW5zZXJ0KCZuZXdfdGFibGUsIGludGtleShlLT5rZXkpLCBlLT5r
ZXksIHYsIGhhc2gsICZpbnRoYXNoLCAmaW50ZXFsKTsKLSAgICAgIH0KLQotICAgICAgYXNzZXJ0
KHQtPnQuY291bnQgPT0gbmV3X3RhYmxlLmNvdW50KTsKLQotICAgICAgdW5pbml0KCZ0LT50KTsK
LSAgICAgIHQtPnQgPSBuZXdfdGFibGU7Ci0gICAgfQotICAgIGluc2VydCgmdC0+dCwgaW50a2V5
KGtleSksIGtleSwgdmFsLCB1cGJfaW50aGFzaChrZXkpLCAmaW50aGFzaCwgJmludGVxbCk7Ci0g
IH0KLSAgY2hlY2sodCk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIHVwYl9pbnR0YWJsZV9s
b29rdXAoY29uc3QgdXBiX2ludHRhYmxlICp0LCB1aW50cHRyX3Qga2V5LCB1cGJfdmFsdWUgKnYp
IHsKLSAgY29uc3QgdXBiX3RhYnZhbCAqdGFibGVfdiA9IGludHRhYmxlX3ZhbF9jb25zdCh0LCBr
ZXkpOwotICBpZiAoIXRhYmxlX3YpIHJldHVybiBmYWxzZTsKLSAgaWYgKHYpIF91cGJfdmFsdWVf
c2V0dmFsKHYsIHRhYmxlX3YtPnZhbCwgdC0+dC5jdHlwZSk7Ci0gIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIHVwYl9pbnR0YWJsZV9yZXBsYWNlKHVwYl9pbnR0YWJsZSAqdCwgdWludHB0cl90IGtl
eSwgdXBiX3ZhbHVlIHZhbCkgewotICB1cGJfdGFidmFsICp0YWJsZV92ID0gaW50dGFibGVfdmFs
KHQsIGtleSk7Ci0gIGlmICghdGFibGVfdikgcmV0dXJuIGZhbHNlOwotICB0YWJsZV92LT52YWwg
PSB2YWwudmFsOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB1cGJfaW50dGFibGVfcmVtb3Zl
KHVwYl9pbnR0YWJsZSAqdCwgdWludHB0cl90IGtleSwgdXBiX3ZhbHVlICp2YWwpIHsKLSAgYm9v
bCBzdWNjZXNzOwotICBpZiAoa2V5IDwgdC0+YXJyYXlfc2l6ZSkgewotICAgIGlmICh1cGJfYXJy
aGFzKHQtPmFycmF5W2tleV0pKSB7Ci0gICAgICB1cGJfdGFidmFsIGVtcHR5ID0gVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQ7Ci0gICAgICB0LT5hcnJheV9jb3VudC0tOwotICAgICAgaWYgKHZhbCkg
ewotICAgICAgICBfdXBiX3ZhbHVlX3NldHZhbCh2YWwsIHQtPmFycmF5W2tleV0udmFsLCB0LT50
LmN0eXBlKTsKLSAgICAgIH0KLSAgICAgIG11dGFibGVfYXJyYXkodClba2V5XSA9IGVtcHR5Owot
ICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgdXBiX3RhYmtleSByZW1vdmVkOwotICAgIHVpbnQz
Ml90IGhhc2ggPSB1cGJfaW50aGFzaChrZXkpOwotICAgIHN1Y2Nlc3MgPSBybSgmdC0+dCwgaW50
a2V5KGtleSksIHZhbCwgJnJlbW92ZWQsIGhhc2gsICZpbnRlcWwpOwotICB9Ci0gIGNoZWNrKHQp
OwotICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCB1cGJfaW50dGFibGVfcHVzaCh1cGJfaW50
dGFibGUgKnQsIHVwYl92YWx1ZSB2YWwpIHsKLSAgcmV0dXJuIHVwYl9pbnR0YWJsZV9pbnNlcnQo
dCwgdXBiX2ludHRhYmxlX2NvdW50KHQpLCB2YWwpOwotfQotCi11cGJfdmFsdWUgdXBiX2ludHRh
YmxlX3BvcCh1cGJfaW50dGFibGUgKnQpIHsKLSAgdXBiX3ZhbHVlIHZhbDsKLSAgYm9vbCBvayA9
IHVwYl9pbnR0YWJsZV9yZW1vdmUodCwgdXBiX2ludHRhYmxlX2NvdW50KHQpIC0gMSwgJnZhbCk7
Ci0gIFVQQl9BU1NFUlRfVkFSKG9rLCBvayk7Ci0gIHJldHVybiB2YWw7Ci19Ci0KLWJvb2wgdXBi
X2ludHRhYmxlX2luc2VydHB0cih1cGJfaW50dGFibGUgKnQsIGNvbnN0IHZvaWQgKmtleSwgdXBi
X3ZhbHVlIHZhbCkgewotICByZXR1cm4gdXBiX2ludHRhYmxlX2luc2VydCh0LCAodWludHB0cl90
KWtleSwgdmFsKTsKLX0KLQotYm9vbCB1cGJfaW50dGFibGVfbG9va3VwcHRyKGNvbnN0IHVwYl9p
bnR0YWJsZSAqdCwgY29uc3Qgdm9pZCAqa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVwYl92YWx1ZSAqdikgewotICByZXR1cm4gdXBiX2ludHRhYmxlX2xvb2t1cCh0LCAodWludHB0
cl90KWtleSwgdik7Ci19Ci0KLWJvb2wgdXBiX2ludHRhYmxlX3JlbW92ZXB0cih1cGJfaW50dGFi
bGUgKnQsIGNvbnN0IHZvaWQgKmtleSwgdXBiX3ZhbHVlICp2YWwpIHsKLSAgcmV0dXJuIHVwYl9p
bnR0YWJsZV9yZW1vdmUodCwgKHVpbnRwdHJfdClrZXksIHZhbCk7Ci19Ci0KLXZvaWQgdXBiX2lu
dHRhYmxlX2NvbXBhY3QodXBiX2ludHRhYmxlICp0KSB7Ci0gIC8qIENyZWF0ZSBhIHBvd2VyLW9m
LXR3byBoaXN0b2dyYW0gb2YgdGhlIHRhYmxlIGtleXMuICovCi0gIGludCBjb3VudHNbVVBCX01B
WEFSUlNJWkUgKyAxXSA9IHswfTsKLSAgdWludHB0cl90IG1heF9rZXkgPSAwOwotICB1cGJfaW50
dGFibGVfaXRlciBpOwotICBzaXplX3QgYXJyX3NpemU7Ci0gIGludCBhcnJfY291bnQ7Ci0gIHVw
Yl9pbnR0YWJsZSBuZXdfdDsKLQotICB1cGJfaW50dGFibGVfYmVnaW4oJmksIHQpOwotICBmb3Ig
KDsgIXVwYl9pbnR0YWJsZV9kb25lKCZpKTsgdXBiX2ludHRhYmxlX25leHQoJmkpKSB7Ci0gICAg
dWludHB0cl90IGtleSA9IHVwYl9pbnR0YWJsZV9pdGVyX2tleSgmaSk7Ci0gICAgaWYgKGtleSA+
IG1heF9rZXkpIHsKLSAgICAgIG1heF9rZXkgPSBrZXk7Ci0gICAgfQotICAgIGNvdW50c1tsb2cy
Y2VpbChrZXkpXSsrOwotICB9Ci0KLSAgYXJyX3NpemUgPSAxOwotICBhcnJfY291bnQgPSB1cGJf
aW50dGFibGVfY291bnQodCk7Ci0KLSAgaWYgKHVwYl9pbnR0YWJsZV9jb3VudCh0KSA+PSBtYXhf
a2V5ICogTUlOX0RFTlNJVFkpIHsKLSAgICAvKiBXZSBjYW4gcHV0IDEwMCUgb2YgdGhlIGVudHJp
ZXMgaW4gdGhlIGFycmF5IHBhcnQuICovCi0gICAgYXJyX3NpemUgPSBtYXhfa2V5ICsgMTsKLSAg
fSBlbHNlIHsKLSAgICAvKiBGaW5kIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byB0aGF0IHNhdGlz
ZmllcyB0aGUgTUlOX0RFTlNJVFkKLSAgICAgKiBkZWZpbml0aW9uLiAqLwotICAgIGludCBzaXpl
X2xnMjsKLSAgICBmb3IgKHNpemVfbGcyID0gQVJSQVlfU0laRShjb3VudHMpIC0gMTsgc2l6ZV9s
ZzIgPiAxOyBzaXplX2xnMi0tKSB7Ci0gICAgICBhcnJfc2l6ZSA9IDEgPDwgc2l6ZV9sZzI7Ci0g
ICAgICBhcnJfY291bnQgLT0gY291bnRzW3NpemVfbGcyXTsKLSAgICAgIGlmIChhcnJfY291bnQg
Pj0gYXJyX3NpemUgKiBNSU5fREVOU0lUWSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICAvKiBBcnJheSBwYXJ0IG11c3QgYWx3YXlzIGJlIGF0IGxlYXN0IDEgZW50
cnkgbGFyZ2UgdG8gY2F0Y2ggbG9va3VwcyBvZiBrZXkKLSAgICogMC4gIEtleSAwIG11c3QgYWx3
YXlzIGJlIGluIHRoZSBhcnJheSBwYXJ0IGJlY2F1c2UgIjAiIGluIHRoZSBoYXNoIHBhcnQKLSAg
ICogZGVub3RlcyBhbiBlbXB0eSBlbnRyeS4gKi8KLSAgYXJyX3NpemUgPSBVUEJfTUFYKGFycl9z
aXplLCAxKTsKLQotICB7Ci0gICAgLyogSW5zZXJ0IGFsbCBlbGVtZW50cyBpbnRvIG5ldywgcGVy
ZmVjdGx5LXNpemVkIHRhYmxlLiAqLwotICAgIGludCBoYXNoX2NvdW50ID0gdXBiX2ludHRhYmxl
X2NvdW50KHQpIC0gYXJyX2NvdW50OwotICAgIGludCBoYXNoX3NpemUgPSBoYXNoX2NvdW50ID8g
KGhhc2hfY291bnQgLyBNQVhfTE9BRCkgKyAxIDogMDsKLSAgICBpbnQgaGFzaHNpemVfbGcyID0g
bG9nMmNlaWwoaGFzaF9zaXplKTsKLQotICAgIGFzc2VydChoYXNoX2NvdW50ID49IDApOwotICAg
IHVwYl9pbnR0YWJsZV9zaXplZGluaXQoJm5ld190LCB0LT50LmN0eXBlLCBhcnJfc2l6ZSwgaGFz
aHNpemVfbGcyKTsKLSAgICB1cGJfaW50dGFibGVfYmVnaW4oJmksIHQpOwotICAgIGZvciAoOyAh
dXBiX2ludHRhYmxlX2RvbmUoJmkpOyB1cGJfaW50dGFibGVfbmV4dCgmaSkpIHsKLSAgICAgIHVp
bnRwdHJfdCBrID0gdXBiX2ludHRhYmxlX2l0ZXJfa2V5KCZpKTsKLSAgICAgIHVwYl9pbnR0YWJs
ZV9pbnNlcnQoJm5ld190LCBrLCB1cGJfaW50dGFibGVfaXRlcl92YWx1ZSgmaSkpOwotICAgIH0K
LSAgICBhc3NlcnQobmV3X3QuYXJyYXlfc2l6ZSA9PSBhcnJfc2l6ZSk7Ci0gICAgYXNzZXJ0KG5l
d190LnQuc2l6ZV9sZzIgPT0gaGFzaHNpemVfbGcyKTsKLSAgfQotICB1cGJfaW50dGFibGVfdW5p
bml0KHQpOwotICAqdCA9IG5ld190OwotfQotCi0vKiBJdGVyYXRpb24uICovCi0KLXN0YXRpYyBj
b25zdCB1cGJfdGFiZW50ICppbnRfdGFiZW50KGNvbnN0IHVwYl9pbnR0YWJsZV9pdGVyICppKSB7
Ci0gIGFzc2VydCghaS0+YXJyYXlfcGFydCk7Ci0gIHJldHVybiAmaS0+dC0+dC5lbnRyaWVzW2kt
PmluZGV4XTsKLX0KLQotc3RhdGljIHVwYl90YWJ2YWwgaW50X2FycmVudChjb25zdCB1cGJfaW50
dGFibGVfaXRlciAqaSkgewotICBhc3NlcnQoaS0+YXJyYXlfcGFydCk7Ci0gIHJldHVybiBpLT50
LT5hcnJheVtpLT5pbmRleF07Ci19Ci0KLXZvaWQgdXBiX2ludHRhYmxlX2JlZ2luKHVwYl9pbnR0
YWJsZV9pdGVyICppLCBjb25zdCB1cGJfaW50dGFibGUgKnQpIHsKLSAgaS0+dCA9IHQ7Ci0gIGkt
PmluZGV4ID0gLTE7Ci0gIGktPmFycmF5X3BhcnQgPSB0cnVlOwotICB1cGJfaW50dGFibGVfbmV4
dChpKTsKLX0KLQotdm9pZCB1cGJfaW50dGFibGVfbmV4dCh1cGJfaW50dGFibGVfaXRlciAqaXRl
cikgewotICBjb25zdCB1cGJfaW50dGFibGUgKnQgPSBpdGVyLT50OwotICBpZiAoaXRlci0+YXJy
YXlfcGFydCkgewotICAgIHdoaWxlICgrK2l0ZXItPmluZGV4IDwgdC0+YXJyYXlfc2l6ZSkgewot
ICAgICAgaWYgKHVwYl9hcnJoYXMoaW50X2FycmVudChpdGVyKSkpIHsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgfQotICAgIH0KLSAgICBpdGVyLT5hcnJheV9wYXJ0ID0gZmFsc2U7Ci0gICAgaXRl
ci0+aW5kZXggPSBiZWdpbigmdC0+dCk7Ci0gIH0gZWxzZSB7Ci0gICAgaXRlci0+aW5kZXggPSBu
ZXh0KCZ0LT50LCBpdGVyLT5pbmRleCk7Ci0gIH0KLX0KLQotYm9vbCB1cGJfaW50dGFibGVfZG9u
ZShjb25zdCB1cGJfaW50dGFibGVfaXRlciAqaSkgewotICBpZiAoaS0+YXJyYXlfcGFydCkgewot
ICAgIHJldHVybiBpLT5pbmRleCA+PSBpLT50LT5hcnJheV9zaXplIHx8Ci0gICAgICAgICAgICF1
cGJfYXJyaGFzKGludF9hcnJlbnQoaSkpOwotICB9IGVsc2UgewotICAgIHJldHVybiBpLT5pbmRl
eCA+PSB1cGJfdGFibGVfc2l6ZSgmaS0+dC0+dCkgfHwKLSAgICAgICAgICAgdXBiX3RhYmVudF9p
c2VtcHR5KGludF90YWJlbnQoaSkpOwotICB9Ci19Ci0KLXVpbnRwdHJfdCB1cGJfaW50dGFibGVf
aXRlcl9rZXkoY29uc3QgdXBiX2ludHRhYmxlX2l0ZXIgKmkpIHsKLSAgYXNzZXJ0KCF1cGJfaW50
dGFibGVfZG9uZShpKSk7Ci0gIHJldHVybiBpLT5hcnJheV9wYXJ0ID8gaS0+aW5kZXggOiBpbnRf
dGFiZW50KGkpLT5rZXk7Ci19Ci0KLXVwYl92YWx1ZSB1cGJfaW50dGFibGVfaXRlcl92YWx1ZShj
b25zdCB1cGJfaW50dGFibGVfaXRlciAqaSkgewotICBhc3NlcnQoIXVwYl9pbnR0YWJsZV9kb25l
KGkpKTsKLSAgcmV0dXJuIF91cGJfdmFsdWVfdmFsKAotICAgICAgaS0+YXJyYXlfcGFydCA/IGkt
PnQtPmFycmF5W2ktPmluZGV4XS52YWwgOiBpbnRfdGFiZW50KGkpLT52YWwudmFsLAotICAgICAg
aS0+dC0+dC5jdHlwZSk7Ci19Ci0KLXZvaWQgdXBiX2ludHRhYmxlX2l0ZXJfc2V0ZG9uZSh1cGJf
aW50dGFibGVfaXRlciAqaSkgewotICBpLT5pbmRleCA9IFNJWkVfTUFYOwotICBpLT5hcnJheV9w
YXJ0ID0gZmFsc2U7Ci19Ci0KLWJvb2wgdXBiX2ludHRhYmxlX2l0ZXJfaXNlcXVhbChjb25zdCB1
cGJfaW50dGFibGVfaXRlciAqaTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1cGJfaW50dGFibGVfaXRlciAqaTIpIHsKLSAgaWYgKHVwYl9pbnR0YWJs
ZV9kb25lKGkxKSAmJiB1cGJfaW50dGFibGVfZG9uZShpMikpCi0gICAgcmV0dXJuIHRydWU7Ci0g
IHJldHVybiBpMS0+dCA9PSBpMi0+dCAmJiBpMS0+aW5kZXggPT0gaTItPmluZGV4ICYmCi0gICAg
ICAgICBpMS0+YXJyYXlfcGFydCA9PSBpMi0+YXJyYXlfcGFydDsKLX0KLQotI2lmZGVmIFVQQl9V
TkFMSUdORURfUkVBRFNfT0sKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBNdXJtdXJIYXNo
MiwgYnkgQXVzdGluIEFwcGxlYnkgKHJlbGVhc2VkIGFzIHB1YmxpYyBkb21haW4pLgotICogUmVm
b3JtYXR0ZWQgYW5kIEM5OS1pZmllZCBieSBKb3NodWEgSGFiZXJtYW4uCi0gKiBOb3RlIC0gVGhp
cyBjb2RlIG1ha2VzIGEgZmV3IGFzc3VtcHRpb25zIGFib3V0IGhvdyB5b3VyIG1hY2hpbmUgYmVo
YXZlcyAtCi0gKiAgIDEuIFdlIGNhbiByZWFkIGEgNC1ieXRlIHZhbHVlIGZyb20gYW55IGFkZHJl
c3Mgd2l0aG91dCBjcmFzaGluZwotICogICAyLiBzaXplb2YoaW50KSA9PSA0IChpbiB1cGIgdGhp
cyBsaW1pdGF0aW9uIGlzIHJlbW92ZWQgYnkgdXNpbmcgdWludDMyX3QKLSAqIEFuZCBpdCBoYXMg
YSBmZXcgbGltaXRhdGlvbnMgLQotICogICAxLiBJdCB3aWxsIG5vdCB3b3JrIGluY3JlbWVudGFs
bHkuCi0gKiAgIDIuIEl0IHdpbGwgbm90IHByb2R1Y2UgdGhlIHNhbWUgcmVzdWx0cyBvbiBsaXR0
bGUtZW5kaWFuIGFuZCBiaWctZW5kaWFuCi0gKiAgICAgIG1hY2hpbmVzLiAqLwotdWludDMyX3Qg
TXVybXVySGFzaDIoY29uc3Qgdm9pZCAqa2V5LCBzaXplX3QgbGVuLCB1aW50MzJfdCBzZWVkKSB7
Ci0gIC8qICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5l
LgotICAgKiBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3
b3JrIHdlbGwuICovCi0gIGNvbnN0IHVpbnQzMl90IG0gPSAweDViZDFlOTk1OwotICBjb25zdCBp
bnQzMl90IHIgPSAyNDsKLQotICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHRvIGEgJ3JhbmRvbScg
dmFsdWUgKi8KLSAgdWludDMyX3QgaCA9IHNlZWQgXiBsZW47Ci0KLSAgLyogTWl4IDQgYnl0ZXMg
YXQgYSB0aW1lIGludG8gdGhlIGhhc2ggKi8KLSAgY29uc3QgdWludDhfdCAqIGRhdGEgPSAoY29u
c3QgdWludDhfdCAqKWtleTsKLSAgd2hpbGUobGVuID49IDQpIHsKLSAgICB1aW50MzJfdCBrID0g
Kih1aW50MzJfdCAqKWRhdGE7Ci0KLSAgICBrICo9IG07Ci0gICAgayBePSBrID4+IHI7Ci0gICAg
ayAqPSBtOwotCi0gICAgaCAqPSBtOwotICAgIGggXj0gazsKLQotICAgIGRhdGEgKz0gNDsKLSAg
ICBsZW4gLT0gNDsKLSAgfQotCi0gIC8qIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhl
IGlucHV0IGFycmF5ICovCi0gIHN3aXRjaChsZW4pIHsKLSAgICBjYXNlIDM6IGggXj0gZGF0YVsy
XSA8PCAxNjsKLSAgICBjYXNlIDI6IGggXj0gZGF0YVsxXSA8PCA4OwotICAgIGNhc2UgMTogaCBe
PSBkYXRhWzBdOyBoICo9IG07Ci0gIH07Ci0KLSAgLyogRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2Yg
dGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZldwotICAgKiBieXRlcyBhcmUgd2VsbC1pbmNv
cnBvcmF0ZWQuICovCi0gIGggXj0gaCA+PiAxMzsKLSAgaCAqPSBtOwotICBoIF49IGggPj4gMTU7
Ci0KLSAgcmV0dXJuIGg7Ci19Ci0KLSNlbHNlIC8qICFVUEJfVU5BTElHTkVEX1JFQURTX09LICov
Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBNdXJtdXJIYXNoQWxpZ25lZDIsIGJ5IEF1
c3RpbiBBcHBsZWJ5Ci0gKiBTYW1lIGFsZ29yaXRobSBhcyBNdXJtdXJIYXNoMiwgYnV0IG9ubHkg
ZG9lcyBhbGlnbmVkIHJlYWRzIC0gc2hvdWxkIGJlIHNhZmVyCi0gKiBvbiBjZXJ0YWluIHBsYXRm
b3Jtcy4KLSAqIFBlcmZvcm1hbmNlIHdpbGwgYmUgbG93ZXIgdGhhbiBNdXJtdXJIYXNoMiAqLwot
Ci0jZGVmaW5lIE1JWChoLGssbSkgeyBrICo9IG07IGsgXj0gayA+PiByOyBrICo9IG07IGggKj0g
bTsgaCBePSBrOyB9Ci0KLXVpbnQzMl90IE11cm11ckhhc2gyKGNvbnN0IHZvaWQgKiBrZXksIHNp
emVfdCBsZW4sIHVpbnQzMl90IHNlZWQpIHsKLSAgY29uc3QgdWludDMyX3QgbSA9IDB4NWJkMWU5
OTU7Ci0gIGNvbnN0IGludDMyX3QgciA9IDI0OwotICBjb25zdCB1aW50OF90ICogZGF0YSA9IChj
b25zdCB1aW50OF90ICopa2V5OwotICB1aW50MzJfdCBoID0gc2VlZCBeIGxlbjsKLSAgdWludDhf
dCBhbGlnbiA9ICh1aW50cHRyX3QpZGF0YSAmIDM7Ci0KLSAgaWYoYWxpZ24gJiYgKGxlbiA+PSA0
KSkgewotICAgIC8qIFByZS1sb2FkIHRoZSB0ZW1wIHJlZ2lzdGVycyAqLwotICAgIHVpbnQzMl90
IHQgPSAwLCBkID0gMDsKLSAgICBpbnQzMl90IHNsOwotICAgIGludDMyX3Qgc3I7Ci0KLSAgICBz
d2l0Y2goYWxpZ24pIHsKLSAgICAgIGNhc2UgMTogdCB8PSBkYXRhWzJdIDw8IDE2OwotICAgICAg
Y2FzZSAyOiB0IHw9IGRhdGFbMV0gPDwgODsKLSAgICAgIGNhc2UgMzogdCB8PSBkYXRhWzBdOwot
ICAgIH0KLQotICAgIHQgPDw9ICg4ICogYWxpZ24pOwotCi0gICAgZGF0YSArPSA0LWFsaWduOwot
ICAgIGxlbiAtPSA0LWFsaWduOwotCi0gICAgc2wgPSA4ICogKDQtYWxpZ24pOwotICAgIHNyID0g
OCAqIGFsaWduOwotCi0gICAgLyogTWl4ICovCi0KLSAgICB3aGlsZShsZW4gPj0gNCkgewotICAg
ICAgdWludDMyX3QgazsKLQotICAgICAgZCA9ICoodWludDMyX3QgKilkYXRhOwotICAgICAgdCA9
ICh0ID4+IHNyKSB8IChkIDw8IHNsKTsKLQotICAgICAgayA9IHQ7Ci0KLSAgICAgIE1JWChoLGss
bSk7Ci0KLSAgICAgIHQgPSBkOwotCi0gICAgICBkYXRhICs9IDQ7Ci0gICAgICBsZW4gLT0gNDsK
LSAgICB9Ci0KLSAgICAvKiBIYW5kbGUgbGVmdG92ZXIgZGF0YSBpbiB0ZW1wIHJlZ2lzdGVycyAq
LwotCi0gICAgZCA9IDA7Ci0KLSAgICBpZihsZW4gPj0gYWxpZ24pIHsKLSAgICAgIHVpbnQzMl90
IGs7Ci0KLSAgICAgIHN3aXRjaChhbGlnbikgewotICAgICAgICBjYXNlIDM6IGQgfD0gZGF0YVsy
XSA8PCAxNjsKLSAgICAgICAgY2FzZSAyOiBkIHw9IGRhdGFbMV0gPDwgODsKLSAgICAgICAgY2Fz
ZSAxOiBkIHw9IGRhdGFbMF07Ci0gICAgICB9Ci0KLSAgICAgIGsgPSAodCA+PiBzcikgfCAoZCA8
PCBzbCk7Ci0gICAgICBNSVgoaCxrLG0pOwotCi0gICAgICBkYXRhICs9IGFsaWduOwotICAgICAg
bGVuIC09IGFsaWduOwotCi0gICAgICAvKiAtLS0tLS0tLS0tCi0gICAgICAgKiBIYW5kbGUgdGFp
bCBieXRlcyAqLwotCi0gICAgICBzd2l0Y2gobGVuKSB7Ci0gICAgICAgIGNhc2UgMzogaCBePSBk
YXRhWzJdIDw8IDE2OwotICAgICAgICBjYXNlIDI6IGggXj0gZGF0YVsxXSA8PCA4OwotICAgICAg
ICBjYXNlIDE6IGggXj0gZGF0YVswXTsgaCAqPSBtOwotICAgICAgfTsKLSAgICB9IGVsc2Ugewot
ICAgICAgc3dpdGNoKGxlbikgewotICAgICAgICBjYXNlIDM6IGQgfD0gZGF0YVsyXSA8PCAxNjsK
LSAgICAgICAgY2FzZSAyOiBkIHw9IGRhdGFbMV0gPDwgODsKLSAgICAgICAgY2FzZSAxOiBkIHw9
IGRhdGFbMF07Ci0gICAgICAgIGNhc2UgMDogaCBePSAodCA+PiBzcikgfCAoZCA8PCBzbCk7IGgg
Kj0gbTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBoIF49IGggPj4gMTM7Ci0gICAgaCAqPSBtOwot
ICAgIGggXj0gaCA+PiAxNTsKLQotICAgIHJldHVybiBoOwotICB9IGVsc2UgewotICAgIHdoaWxl
KGxlbiA+PSA0KSB7Ci0gICAgICB1aW50MzJfdCBrID0gKih1aW50MzJfdCAqKWRhdGE7Ci0KLSAg
ICAgIE1JWChoLGssbSk7Ci0KLSAgICAgIGRhdGEgKz0gNDsKLSAgICAgIGxlbiAtPSA0OwotICAg
IH0KLQotICAgIC8qIC0tLS0tLS0tLS0KLSAgICAgKiBIYW5kbGUgdGFpbCBieXRlcyAqLwotCi0g
ICAgc3dpdGNoKGxlbikgewotICAgICAgY2FzZSAzOiBoIF49IGRhdGFbMl0gPDwgMTY7Ci0gICAg
ICBjYXNlIDI6IGggXj0gZGF0YVsxXSA8PCA4OwotICAgICAgY2FzZSAxOiBoIF49IGRhdGFbMF07
IGggKj0gbTsKLSAgICB9OwotCi0gICAgaCBePSBoID4+IDEzOwotICAgIGggKj0gbTsKLSAgICBo
IF49IGggPj4gMTU7Ci0KLSAgICByZXR1cm4gaDsKLSAgfQotfQotI3VuZGVmIE1JWAotCi0jZW5k
aWYgLyogVVBCX1VOQUxJR05FRF9SRUFEU19PSyAqLwotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpbnQu
aD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0
cmluZy5oPgotCi1ib29sIHVwYl9kdW1wdG9zdGRlcnIodm9pZCAqY2xvc3VyZSwgY29uc3QgdXBi
X3N0YXR1cyogc3RhdHVzKSB7Ci0gIFVQQl9VTlVTRUQoY2xvc3VyZSk7Ci0gIGZwcmludGYoc3Rk
ZXJyLCAiJXNcbiIsIHVwYl9zdGF0dXNfZXJybXNnKHN0YXR1cykpOwotICByZXR1cm4gZmFsc2U7
Ci19Ci0KLS8qIEd1YXJhbnRlZSBudWxsLXRlcm1pbmF0aW9uIGFuZCBwcm92aWRlIGVsbGlwc2lz
IHRydW5jYXRpb24uCi0gKiBJdCBtYXkgYmUgdGVtcHRpbmcgdG8gIm9wdGltaXplIiB0aGlzIGJ5
IGluaXRpYWxpemluZyB0aGVzZSBmaW5hbAotICogZm91ciBieXRlcyB1cC1mcm9udCBhbmQgdGhl
biBiZWluZyBjYXJlZnVsIG5ldmVyIHRvIG92ZXJ3cml0ZSB0aGVtLAotICogdGhpcyBpcyBzYWZl
ciBhbmQgc2ltcGxlci4gKi8KLXN0YXRpYyB2b2lkIG51bGx6KHVwYl9zdGF0dXMgKnN0YXR1cykg
ewotICBjb25zdCBjaGFyICplbGxpcHNpcyA9ICIuLi4iOwotICBzaXplX3QgbGVuID0gc3RybGVu
KGVsbGlwc2lzKTsKLSAgYXNzZXJ0KHNpemVvZihzdGF0dXMtPm1zZykgPiBsZW4pOwotICBtZW1j
cHkoc3RhdHVzLT5tc2cgKyBzaXplb2Yoc3RhdHVzLT5tc2cpIC0gbGVuLCBlbGxpcHNpcywgbGVu
KTsKLX0KLQotdm9pZCB1cGJfc3RhdHVzX2NsZWFyKHVwYl9zdGF0dXMgKnN0YXR1cykgewotICBp
ZiAoIXN0YXR1cykgcmV0dXJuOwotICBzdGF0dXMtPm9rXyA9IHRydWU7Ci0gIHN0YXR1cy0+Y29k
ZV8gPSAwOwotICBzdGF0dXMtPm1zZ1swXSA9ICdcMCc7Ci19Ci0KLWJvb2wgdXBiX29rKGNvbnN0
IHVwYl9zdGF0dXMgKnN0YXR1cykgeyByZXR1cm4gc3RhdHVzLT5va187IH0KLQotdXBiX2Vycm9y
c3BhY2UgKnVwYl9zdGF0dXNfZXJyc3BhY2UoY29uc3QgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0g
IHJldHVybiBzdGF0dXMtPmVycm9yX3NwYWNlXzsKLX0KLQotaW50IHVwYl9zdGF0dXNfZXJyY29k
ZShjb25zdCB1cGJfc3RhdHVzICpzdGF0dXMpIHsgcmV0dXJuIHN0YXR1cy0+Y29kZV87IH0KLQot
Y29uc3QgY2hhciAqdXBiX3N0YXR1c19lcnJtc2coY29uc3QgdXBiX3N0YXR1cyAqc3RhdHVzKSB7
IHJldHVybiBzdGF0dXMtPm1zZzsgfQotCi12b2lkIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHVwYl9z
dGF0dXMgKnN0YXR1cywgY29uc3QgY2hhciAqbXNnKSB7Ci0gIGlmICghc3RhdHVzKSByZXR1cm47
Ci0gIHN0YXR1cy0+b2tfID0gZmFsc2U7Ci0gIHN0cm5jcHkoc3RhdHVzLT5tc2csIG1zZywgc2l6
ZW9mKHN0YXR1cy0+bXNnKSk7Ci0gIG51bGx6KHN0YXR1cyk7Ci19Ci0KLXZvaWQgdXBiX3N0YXR1
c19zZXRlcnJmKHVwYl9zdGF0dXMgKnN0YXR1cywgY29uc3QgY2hhciAqZm10LCAuLi4pIHsKLSAg
dmFfbGlzdCBhcmdzOwotICB2YV9zdGFydChhcmdzLCBmbXQpOwotICB1cGJfc3RhdHVzX3ZzZXRl
cnJmKHN0YXR1cywgZm10LCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotfQotCi12b2lkIHVwYl9z
dGF0dXNfdnNldGVycmYodXBiX3N0YXR1cyAqc3RhdHVzLCBjb25zdCBjaGFyICpmbXQsIHZhX2xp
c3QgYXJncykgewotICBpZiAoIXN0YXR1cykgcmV0dXJuOwotICBzdGF0dXMtPm9rXyA9IGZhbHNl
OwotICBfdXBiX3ZzbnByaW50ZihzdGF0dXMtPm1zZywgc2l6ZW9mKHN0YXR1cy0+bXNnKSwgZm10
LCBhcmdzKTsKLSAgbnVsbHooc3RhdHVzKTsKLX0KLQotdm9pZCB1cGJfc3RhdHVzX3NldGVycmNv
ZGUodXBiX3N0YXR1cyAqc3RhdHVzLCB1cGJfZXJyb3JzcGFjZSAqc3BhY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgY29kZSkgewotICBpZiAoIXN0YXR1cykgcmV0dXJuOwotICBz
dGF0dXMtPm9rXyA9IGZhbHNlOwotICBzdGF0dXMtPmVycm9yX3NwYWNlXyA9IHNwYWNlOwotICBz
dGF0dXMtPmNvZGVfID0gY29kZTsKLSAgc3BhY2UtPnNldF9tZXNzYWdlKHN0YXR1cywgY29kZSk7
Ci19Ci0KLXZvaWQgdXBiX3N0YXR1c19jb3B5KHVwYl9zdGF0dXMgKnRvLCBjb25zdCB1cGJfc3Rh
dHVzICpmcm9tKSB7Ci0gIGlmICghdG8pIHJldHVybjsKLSAgKnRvID0gKmZyb207Ci19Ci0vKiBU
aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB1cGJjICh0aGUgdXBiIGNvbXBpbGVyKS4KLSAqIERv
IG5vdCBlZGl0IC0tIHlvdXIgY2hhbmdlcyB3aWxsIGJlIGRpc2NhcmRlZCB3aGVuIHRoZSBmaWxl
IGlzCi0gKiByZWdlbmVyYXRlZC4gKi8KLQotCi1zdGF0aWMgY29uc3QgdXBiX21zZ2RlZiBtc2dz
WzIwXTsKLXN0YXRpYyBjb25zdCB1cGJfZmllbGRkZWYgZmllbGRzWzgxXTsKLXN0YXRpYyBjb25z
dCB1cGJfZW51bWRlZiBlbnVtc1s0XTsKLXN0YXRpYyBjb25zdCB1cGJfdGFiZW50IHN0cmVudHJp
ZXNbMjM2XTsKLXN0YXRpYyBjb25zdCB1cGJfdGFiZW50IGludGVudHJpZXNbMTRdOwotc3RhdGlj
IGNvbnN0IHVwYl90YWJ2YWwgYXJyYXlzWzIzMl07Ci0KLSNpZmRlZiBVUEJfREVCVUdfUkVGUwot
c3RhdGljIHVwYl9pbnR0YWJsZSByZWZ0YWJsZXNbMjEyXTsKLSNlbmRpZgotCi1zdGF0aWMgY29u
c3QgdXBiX21zZ2RlZiBtc2dzWzIwXSA9IHsKLSAgVVBCX01TR0RFRl9JTklUKCJnb29nbGUucHJv
dG9idWYuRGVzY3JpcHRvclByb3RvIiwgMjcsIDYsIFVQQl9JTlRUQUJMRV9JTklUKDAsIDAsIFVQ
Ql9DVFlQRV9QVFIsIDAsIE5VTEwsICZhcnJheXNbMF0sIDgsIDcpLCBVUEJfU1RSVEFCTEVfSU5J
VCg3LCAxNSwgVVBCX0NUWVBFX1BUUiwgNCwgJnN0cmVudHJpZXNbMF0pLCZyZWZ0YWJsZXNbMF0s
ICZyZWZ0YWJsZXNbMV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5EZXNj
cmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UiLCA0LCAwLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAw
LCBVUEJfQ1RZUEVfUFRSLCAwLCBOVUxMLCAmYXJyYXlzWzhdLCAzLCAyKSwgVVBCX1NUUlRBQkxF
X0lOSVQoMiwgMywgVVBCX0NUWVBFX1BUUiwgMiwgJnN0cmVudHJpZXNbMTZdKSwmcmVmdGFibGVz
WzJdLCAmcmVmdGFibGVzWzNdKSwKLSAgVVBCX01TR0RFRl9JTklUKCJnb29nbGUucHJvdG9idWYu
RW51bURlc2NyaXB0b3JQcm90byIsIDExLCAyLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJf
Q1RZUEVfUFRSLCAwLCBOVUxMLCAmYXJyYXlzWzExXSwgNCwgMyksIFVQQl9TVFJUQUJMRV9JTklU
KDMsIDMsIFVQQl9DVFlQRV9QVFIsIDIsICZzdHJlbnRyaWVzWzIwXSksJnJlZnRhYmxlc1s0XSwg
JnJlZnRhYmxlc1s1XSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVmLkVudW1P
cHRpb25zIiwgNywgMSwgVVBCX0lOVFRBQkxFX0lOSVQoMSwgMSwgVVBCX0NUWVBFX1BUUiwgMSwg
JmludGVudHJpZXNbMF0sICZhcnJheXNbMTVdLCA4LCAxKSwgVVBCX1NUUlRBQkxFX0lOSVQoMiwg
MywgVVBCX0NUWVBFX1BUUiwgMiwgJnN0cmVudHJpZXNbMjRdKSwmcmVmdGFibGVzWzZdLCAmcmVm
dGFibGVzWzddKSwKLSAgVVBCX01TR0RFRl9JTklUKCJnb29nbGUucHJvdG9idWYuRW51bVZhbHVl
RGVzY3JpcHRvclByb3RvIiwgOCwgMSwgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgVVBCX0NUWVBF
X1BUUiwgMCwgTlVMTCwgJmFycmF5c1syM10sIDQsIDMpLCBVUEJfU1RSVEFCTEVfSU5JVCgzLCAz
LCBVUEJfQ1RZUEVfUFRSLCAyLCAmc3RyZW50cmllc1syOF0pLCZyZWZ0YWJsZXNbOF0sICZyZWZ0
YWJsZXNbOV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVP
cHRpb25zIiwgNiwgMSwgVVBCX0lOVFRBQkxFX0lOSVQoMSwgMSwgVVBCX0NUWVBFX1BUUiwgMSwg
JmludGVudHJpZXNbMl0sICZhcnJheXNbMjddLCA0LCAwKSwgVVBCX1NUUlRBQkxFX0lOSVQoMSwg
MywgVVBCX0NUWVBFX1BUUiwgMiwgJnN0cmVudHJpZXNbMzJdKSwmcmVmdGFibGVzWzEwXSwgJnJl
ZnRhYmxlc1sxMV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5GaWVsZERl
c2NyaXB0b3JQcm90byIsIDE5LCAxLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZUEVf
UFRSLCAwLCBOVUxMLCAmYXJyYXlzWzMxXSwgOSwgOCksIFVQQl9TVFJUQUJMRV9JTklUKDgsIDE1
LCBVUEJfQ1RZUEVfUFRSLCA0LCAmc3RyZW50cmllc1szNl0pLCZyZWZ0YWJsZXNbMTJdLCAmcmVm
dGFibGVzWzEzXSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0
aW9ucyIsIDE0LCAxLCBVUEJfSU5UVEFCTEVfSU5JVCgxLCAxLCBVUEJfQ1RZUEVfUFRSLCAxLCAm
aW50ZW50cmllc1s0XSwgJmFycmF5c1s0MF0sIDMyLCA2KSwgVVBCX1NUUlRBQkxFX0lOSVQoNywg
MTUsIFVQQl9DVFlQRV9QVFIsIDQsICZzdHJlbnRyaWVzWzUyXSksJnJlZnRhYmxlc1sxNF0sICZy
ZWZ0YWJsZXNbMTVdKSwKLSAgVVBCX01TR0RFRl9JTklUKCJnb29nbGUucHJvdG9idWYuRmlsZURl
c2NyaXB0b3JQcm90byIsIDM5LCA2LCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZUEVf
UFRSLCAwLCBOVUxMLCAmYXJyYXlzWzcyXSwgMTIsIDExKSwgVVBCX1NUUlRBQkxFX0lOSVQoMTEs
IDE1LCBVUEJfQ1RZUEVfUFRSLCA0LCAmc3RyZW50cmllc1s2OF0pLCZyZWZ0YWJsZXNbMTZdLCAm
cmVmdGFibGVzWzE3XSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVmLkZpbGVE
ZXNjcmlwdG9yU2V0IiwgNiwgMSwgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgVVBCX0NUWVBFX1BU
UiwgMCwgTlVMTCwgJmFycmF5c1s4NF0sIDIsIDEpLCBVUEJfU1RSVEFCTEVfSU5JVCgxLCAzLCBV
UEJfQ1RZUEVfUFRSLCAyLCAmc3RyZW50cmllc1s4NF0pLCZyZWZ0YWJsZXNbMThdLCAmcmVmdGFi
bGVzWzE5XSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25z
IiwgMjEsIDEsIFVQQl9JTlRUQUJMRV9JTklUKDEsIDEsIFVQQl9DVFlQRV9QVFIsIDEsICZpbnRl
bnRyaWVzWzZdLCAmYXJyYXlzWzg2XSwgNjQsIDkpLCBVUEJfU1RSVEFCTEVfSU5JVCgxMCwgMTUs
IFVQQl9DVFlQRV9QVFIsIDQsICZzdHJlbnRyaWVzWzg4XSksJnJlZnRhYmxlc1syMF0sICZyZWZ0
YWJsZXNbMjFdKSwKLSAgVVBCX01TR0RFRl9JTklUKCJnb29nbGUucHJvdG9idWYuTWVzc2FnZU9w
dGlvbnMiLCA4LCAxLCBVUEJfSU5UVEFCTEVfSU5JVCgxLCAxLCBVUEJfQ1RZUEVfUFRSLCAxLCAm
aW50ZW50cmllc1s4XSwgJmFycmF5c1sxNTBdLCAxNiwgMiksIFVQQl9TVFJUQUJMRV9JTklUKDMs
IDMsIFVQQl9DVFlQRV9QVFIsIDIsICZzdHJlbnRyaWVzWzEwNF0pLCZyZWZ0YWJsZXNbMjJdLCAm
cmVmdGFibGVzWzIzXSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVmLk1ldGhv
ZERlc2NyaXB0b3JQcm90byIsIDEzLCAxLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZ
UEVfUFRSLCAwLCBOVUxMLCAmYXJyYXlzWzE2Nl0sIDUsIDQpLCBVUEJfU1RSVEFCTEVfSU5JVCg0
LCA3LCBVUEJfQ1RZUEVfUFRSLCAzLCAmc3RyZW50cmllc1sxMDhdKSwmcmVmdGFibGVzWzI0XSwg
JnJlZnRhYmxlc1syNV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5NZXRo
b2RPcHRpb25zIiwgNiwgMSwgVVBCX0lOVFRBQkxFX0lOSVQoMSwgMSwgVVBCX0NUWVBFX1BUUiwg
MSwgJmludGVudHJpZXNbMTBdLCAmYXJyYXlzWzE3MV0sIDQsIDApLCBVUEJfU1RSVEFCTEVfSU5J
VCgxLCAzLCBVUEJfQ1RZUEVfUFRSLCAyLCAmc3RyZW50cmllc1sxMTZdKSwmcmVmdGFibGVzWzI2
XSwgJnJlZnRhYmxlc1syN10pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5T
ZXJ2aWNlRGVzY3JpcHRvclByb3RvIiwgMTEsIDIsIFVQQl9JTlRUQUJMRV9JTklUKDAsIDAsIFVQ
Ql9DVFlQRV9QVFIsIDAsIE5VTEwsICZhcnJheXNbMTc1XSwgNCwgMyksIFVQQl9TVFJUQUJMRV9J
TklUKDMsIDMsIFVQQl9DVFlQRV9QVFIsIDIsICZzdHJlbnRyaWVzWzEyMF0pLCZyZWZ0YWJsZXNb
MjhdLCAmcmVmdGFibGVzWzI5XSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVm
LlNlcnZpY2VPcHRpb25zIiwgNiwgMSwgVVBCX0lOVFRBQkxFX0lOSVQoMSwgMSwgVVBCX0NUWVBF
X1BUUiwgMSwgJmludGVudHJpZXNbMTJdLCAmYXJyYXlzWzE3OV0sIDQsIDApLCBVUEJfU1RSVEFC
TEVfSU5JVCgxLCAzLCBVUEJfQ1RZUEVfUFRSLCAyLCAmc3RyZW50cmllc1sxMjRdKSwmcmVmdGFi
bGVzWzMwXSwgJnJlZnRhYmxlc1szMV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90
b2J1Zi5Tb3VyY2VDb2RlSW5mbyIsIDYsIDEsIFVQQl9JTlRUQUJMRV9JTklUKDAsIDAsIFVQQl9D
VFlQRV9QVFIsIDAsIE5VTEwsICZhcnJheXNbMTgzXSwgMiwgMSksIFVQQl9TVFJUQUJMRV9JTklU
KDEsIDMsIFVQQl9DVFlQRV9QVFIsIDIsICZzdHJlbnRyaWVzWzEyOF0pLCZyZWZ0YWJsZXNbMzJd
LCAmcmVmdGFibGVzWzMzXSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVmLlNv
dXJjZUNvZGVJbmZvLkxvY2F0aW9uIiwgMTQsIDAsIFVQQl9JTlRUQUJMRV9JTklUKDAsIDAsIFVQ
Ql9DVFlQRV9QVFIsIDAsIE5VTEwsICZhcnJheXNbMTg1XSwgNSwgNCksIFVQQl9TVFJUQUJMRV9J
TklUKDQsIDcsIFVQQl9DVFlQRV9QVFIsIDMsICZzdHJlbnRyaWVzWzEzMl0pLCZyZWZ0YWJsZXNb
MzRdLCAmcmVmdGFibGVzWzM1XSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVm
LlVuaW50ZXJwcmV0ZWRPcHRpb24iLCAxOCwgMSwgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgVVBC
X0NUWVBFX1BUUiwgMCwgTlVMTCwgJmFycmF5c1sxOTBdLCA5LCA3KSwgVVBCX1NUUlRBQkxFX0lO
SVQoNywgMTUsIFVQQl9DVFlQRV9QVFIsIDQsICZzdHJlbnRyaWVzWzE0MF0pLCZyZWZ0YWJsZXNb
MzZdLCAmcmVmdGFibGVzWzM3XSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVm
LlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQiLCA2LCAwLCBVUEJfSU5UVEFCTEVfSU5JVCgw
LCAwLCBVUEJfQ1RZUEVfUFRSLCAwLCBOVUxMLCAmYXJyYXlzWzE5OV0sIDMsIDIpLCBVUEJfU1RS
VEFCTEVfSU5JVCgyLCAzLCBVUEJfQ1RZUEVfUFRSLCAyLCAmc3RyZW50cmllc1sxNTZdKSwmcmVm
dGFibGVzWzM4XSwgJnJlZnRhYmxlc1szOV0pLAotfTsKLQotc3RhdGljIGNvbnN0IHVwYl9maWVs
ZGRlZiBmaWVsZHNbODFdID0gewotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9O
QUwsIFVQQl9UWVBFX1NUUklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJhZ2dy
ZWdhdGVfdmFsdWUiLCA4LCAmbXNnc1sxOF0sIE5VTEwsIDE1LCA2LCB7MH0sJnJlZnRhYmxlc1s0
MF0sICZyZWZ0YWJsZXNbNDFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElP
TkFMLCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImFsbG93
X2FsaWFzIiwgMiwgJm1zZ3NbM10sIE5VTEwsIDYsIDEsIHswfSwmcmVmdGFibGVzWzQyXSwgJnJl
ZnRhYmxlc1s0M10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQ
Ql9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiY2NfZ2VuZXJpY19z
ZXJ2aWNlcyIsIDE2LCAmbXNnc1sxMF0sIE5VTEwsIDE3LCA2LCB7MH0sJnJlZnRhYmxlc1s0NF0s
ICZyZWZ0YWJsZXNbNDVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFM
LCBVUEJfVFlQRV9FTlVNLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImN0eXBlIiwg
MSwgJm1zZ3NbN10sIChjb25zdCB1cGJfZGVmKikoJmVudW1zWzJdKSwgNiwgMSwgezB9LCZyZWZ0
YWJsZXNbNDZdLCAmcmVmdGFibGVzWzQ3XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJF
TF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgImRlZmF1bHRfdmFsdWUiLCA3LCAmbXNnc1s2XSwgTlVMTCwgMTYsIDcsIHswfSwmcmVmdGFi
bGVzWzQ4XSwgJnJlZnRhYmxlc1s0OV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxf
UkVQRUFURUQsIFVQQl9UWVBFX1NUUklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
ICJkZXBlbmRlbmN5IiwgMywgJm1zZ3NbOF0sIE5VTEwsIDMwLCA4LCB7MH0sJnJlZnRhYmxlc1s1
MF0sICZyZWZ0YWJsZXNbNTFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElP
TkFMLCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImRlcHJl
Y2F0ZWQiLCAzLCAmbXNnc1s3XSwgTlVMTCwgOCwgMywgezB9LCZyZWZ0YWJsZXNbNTJdLCAmcmVm
dGFibGVzWzUzXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBC
X1RZUEVfRE9VQkxFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImRvdWJsZV92YWx1
ZSIsIDYsICZtc2dzWzE4XSwgTlVMTCwgMTEsIDQsIHswfSwmcmVmdGFibGVzWzU0XSwgJnJlZnRh
Ymxlc1s1NV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9U
WVBFX0lOVDMyLCBVUEJfSU5URk1UX1ZBUklBQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgImVuZCIsIDIsICZtc2dzWzFdLCBOVUxMLCAzLCAxLCB7MH0sJnJlZnRhYmxlc1s1Nl0sICZy
ZWZ0YWJsZXNbNTddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBV
UEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImVudW1fdHlw
ZSIsIDQsICZtc2dzWzBdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzJdKSwgMTYsIDIsIHswfSwm
cmVmdGFibGVzWzU4XSwgJnJlZnRhYmxlc1s1OV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJf
TEFCRUxfUkVQRUFURUQsIFVQQl9UWVBFX01FU1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCAiZW51bV90eXBlIiwgNSwgJm1zZ3NbOF0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3Nb
Ml0pLCAxMywgMSwgezB9LCZyZWZ0YWJsZXNbNjBdLCAmcmVmdGFibGVzWzYxXSksCi0gIFVQQl9G
SUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImV4cGVyaW1lbnRhbF9tYXBfa2V5IiwgOSwgJm1zZ3Nb
N10sIE5VTEwsIDEwLCA1LCB7MH0sJnJlZnRhYmxlc1s2Ml0sICZyZWZ0YWJsZXNbNjNdKSwKLSAg
VVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAs
IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZXh0ZW5kZWUiLCAyLCAmbXNnc1s2XSwgTlVM
TCwgNywgMiwgezB9LCZyZWZ0YWJsZXNbNjRdLCAmcmVmdGFibGVzWzY1XSksCi0gIFVQQl9GSUVM
RERFRl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgZmFsc2UsICJleHRlbnNpb24iLCA3LCAmbXNnc1s4XSwgKGNvbnN0IHVw
Yl9kZWYqKSgmbXNnc1s2XSksIDE5LCAzLCB7MH0sJnJlZnRhYmxlc1s2Nl0sICZyZWZ0YWJsZXNb
NjddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9N
RVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImV4dGVuc2lvbiIsIDYsICZt
c2dzWzBdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzZdKSwgMjIsIDQsIHswfSwmcmVmdGFibGVz
WzY4XSwgJnJlZnRhYmxlc1s2OV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQ
RUFURUQsIFVQQl9UWVBFX01FU1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAi
ZXh0ZW5zaW9uX3JhbmdlIiwgNSwgJm1zZ3NbMF0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbMV0p
LCAxOSwgMywgezB9LCZyZWZ0YWJsZXNbNzBdLCAmcmVmdGFibGVzWzcxXSksCi0gIFVQQl9GSUVM
RERFRl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgZmFsc2UsICJmaWVsZCIsIDIsICZtc2dzWzBdLCAoY29uc3QgdXBiX2Rl
ZiopKCZtc2dzWzZdKSwgMTAsIDAsIHswfSwmcmVmdGFibGVzWzcyXSwgJnJlZnRhYmxlc1s3M10p
LAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBFX01FU1NB
R0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZmlsZSIsIDEsICZtc2dzWzldLCAo
Y29uc3QgdXBiX2RlZiopKCZtc2dzWzhdKSwgNSwgMCwgezB9LCZyZWZ0YWJsZXNbNzRdLCAmcmVm
dGFibGVzWzc1XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBC
X1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImdvX3BhY2thZ2Ui
LCAxMSwgJm1zZ3NbMTBdLCBOVUxMLCAxNCwgNSwgezB9LCZyZWZ0YWJsZXNbNzZdLCAmcmVmdGFi
bGVzWzc3XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZ
UEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImlkZW50aWZpZXJfdmFs
dWUiLCAzLCAmbXNnc1sxOF0sIE5VTEwsIDYsIDEsIHswfSwmcmVmdGFibGVzWzc4XSwgJnJlZnRh
Ymxlc1s3OV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9U
WVBFX1NUUklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJpbnB1dF90eXBlIiwg
MiwgJm1zZ3NbMTJdLCBOVUxMLCA3LCAyLCB7MH0sJnJlZnRhYmxlc1s4MF0sICZyZWZ0YWJsZXNb
ODFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUVVJUkVELCBVUEJfVFlQRV9C
T09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImlzX2V4dGVuc2lvbiIsIDIsICZt
c2dzWzE5XSwgTlVMTCwgNSwgMSwgezB9LCZyZWZ0YWJsZXNbODJdLCAmcmVmdGFibGVzWzgzXSks
Ci0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfQk9PTCwg
MCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRf
aGFzaCIsIDIwLCAmbXNnc1sxMF0sIE5VTEwsIDIwLCA5LCB7MH0sJnJlZnRhYmxlc1s4NF0sICZy
ZWZ0YWJsZXNbODVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBV
UEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImphdmFfZ2VuZXJp
Y19zZXJ2aWNlcyIsIDE3LCAmbXNnc1sxMF0sIE5VTEwsIDE4LCA3LCB7MH0sJnJlZnRhYmxlc1s4
Nl0sICZyZWZ0YWJsZXNbODddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElP
TkFMLCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImphdmFf
bXVsdGlwbGVfZmlsZXMiLCAxMCwgJm1zZ3NbMTBdLCBOVUxMLCAxMywgNCwgezB9LCZyZWZ0YWJs
ZXNbODhdLCAmcmVmdGFibGVzWzg5XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9P
UFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
ImphdmFfb3V0ZXJfY2xhc3NuYW1lIiwgOCwgJm1zZ3NbMTBdLCBOVUxMLCA5LCAyLCB7MH0sJnJl
ZnRhYmxlc1s5MF0sICZyZWZ0YWJsZXNbOTFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xB
QkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCAiamF2YV9wYWNrYWdlIiwgMSwgJm1zZ3NbMTBdLCBOVUxMLCA2LCAxLCB7MH0sJnJlZnRh
Ymxlc1s5Ml0sICZyZWZ0YWJsZXNbOTNdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVM
X09QVElPTkFMLCBVUEJfVFlQRV9FTlVNLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
ImxhYmVsIiwgNCwgJm1zZ3NbNl0sIChjb25zdCB1cGJfZGVmKikoJmVudW1zWzBdKSwgMTEsIDQs
IHswfSwmcmVmdGFibGVzWzk0XSwgJnJlZnRhYmxlc1s5NV0pLAotICBVUEJfRklFTERERUZfSU5J
VChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCAibGF6eSIsIDUsICZtc2dzWzddLCBOVUxMLCA5LCA0LCB7MH0sJnJlZnRhYmxl
c1s5Nl0sICZyZWZ0YWJsZXNbOTddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09Q
VElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAi
bGVhZGluZ19jb21tZW50cyIsIDMsICZtc2dzWzE3XSwgTlVMTCwgOCwgMiwgezB9LCZyZWZ0YWJs
ZXNbOThdLCAmcmVmdGFibGVzWzk5XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9S
RVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
ICJsb2NhdGlvbiIsIDEsICZtc2dzWzE2XSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1sxN10pLCA1
LCAwLCB7MH0sJnJlZnRhYmxlc1sxMDBdLCAmcmVmdGFibGVzWzEwMV0pLAotICBVUEJfRklFTERE
RUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCAibWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQiLCAxLCAmbXNnc1sxMV0s
IE5VTEwsIDYsIDEsIHswfSwmcmVmdGFibGVzWzEwMl0sICZyZWZ0YWJsZXNbMTAzXSksCi0gIFVQ
Ql9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJtZXNzYWdlX3R5cGUiLCA0LCAmbXNnc1s4XSwg
KGNvbnN0IHVwYl9kZWYqKSgmbXNnc1swXSksIDEwLCAwLCB7MH0sJnJlZnRhYmxlc1sxMDRdLCAm
cmVmdGFibGVzWzEwNV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQs
IFVQQl9UWVBFX01FU1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibWV0aG9k
IiwgMiwgJm1zZ3NbMTRdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzEyXSksIDYsIDAsIHswfSwm
cmVmdGFibGVzWzEwNl0sICZyZWZ0YWJsZXNbMTA3XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQ
Ql9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgIm5hbWUiLCAxLCAmbXNnc1s4XSwgTlVMTCwgMjIsIDYsIHswfSwmcmVmdGFibGVz
WzEwOF0sICZyZWZ0YWJsZXNbMTA5XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9P
UFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
Im5hbWUiLCAxLCAmbXNnc1sxNF0sIE5VTEwsIDgsIDIsIHswfSwmcmVmdGFibGVzWzExMF0sICZy
ZWZ0YWJsZXNbMTExXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwg
VVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJuYW1lIiwg
MiwgJm1zZ3NbMThdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzE5XSksIDUsIDAsIHswfSwmcmVm
dGFibGVzWzExMl0sICZyZWZ0YWJsZXNbMTEzXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgIm5hbWUiLCAxLCAmbXNnc1s0XSwgTlVMTCwgNCwgMSwgezB9LCZyZWZ0YWJsZXNbMTE0
XSwgJnJlZnRhYmxlc1sxMTVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElP
TkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibmFt
ZSIsIDEsICZtc2dzWzBdLCBOVUxMLCAyNCwgNiwgezB9LCZyZWZ0YWJsZXNbMTE2XSwgJnJlZnRh
Ymxlc1sxMTddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJf
VFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibmFtZSIsIDEsICZt
c2dzWzEyXSwgTlVMTCwgNCwgMSwgezB9LCZyZWZ0YWJsZXNbMTE4XSwgJnJlZnRhYmxlc1sxMTld
KSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJ
TkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibmFtZSIsIDEsICZtc2dzWzJdLCBO
VUxMLCA4LCAyLCB7MH0sJnJlZnRhYmxlc1sxMjBdLCAmcmVmdGFibGVzWzEyMV0pLAotICBVUEJf
RklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX1NUUklORywgMCwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJuYW1lIiwgMSwgJm1zZ3NbNl0sIE5VTEwsIDQsIDEs
IHswfSwmcmVmdGFibGVzWzEyMl0sICZyZWZ0YWJsZXNbMTIzXSksCi0gIFVQQl9GSUVMRERFRl9J
TklUKFVQQl9MQUJFTF9SRVFVSVJFRCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgIm5hbWVfcGFydCIsIDEsICZtc2dzWzE5XSwgTlVMTCwgMiwgMCwgezB9
LCZyZWZ0YWJsZXNbMTI0XSwgJnJlZnRhYmxlc1sxMjVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQo
VVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9JTlQ2NCwgVVBCX0lOVEZNVF9WQVJJQUJMRSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJuZWdhdGl2ZV9pbnRfdmFsdWUiLCA1LCAmbXNn
c1sxOF0sIE5VTEwsIDEwLCAzLCB7MH0sJnJlZnRhYmxlc1sxMjZdLCAmcmVmdGFibGVzWzEyN10p
LAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBFX01FU1NB
R0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibmVzdGVkX3R5cGUiLCAzLCAmbXNn
c1swXSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1swXSksIDEzLCAxLCB7MH0sJnJlZnRhYmxlc1sx
MjhdLCAmcmVmdGFibGVzWzEyOV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BU
SU9OQUwsIFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibm9f
c3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvciIsIDIsICZtc2dzWzExXSwgTlVMTCwgNywgMiwg
ezB9LCZyZWZ0YWJsZXNbMTMwXSwgJnJlZnRhYmxlc1sxMzFdKSwKLSAgVVBCX0ZJRUxEREVGX0lO
SVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9JTlQzMiwgVVBCX0lOVEZNVF9WQVJJQUJM
RSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJudW1iZXIiLCAzLCAmbXNnc1s2XSwgTlVM
TCwgMTAsIDMsIHswfSwmcmVmdGFibGVzWzEzMl0sICZyZWZ0YWJsZXNbMTMzXSksCi0gIFVQQl9G
SUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfSU5UMzIsIFVQQl9JTlRG
TVRfVkFSSUFCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibnVtYmVyIiwgMiwgJm1z
Z3NbNF0sIE5VTEwsIDcsIDIsIHswfSwmcmVmdGFibGVzWzEzNF0sICZyZWZ0YWJsZXNbMTM1XSks
Ci0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfRU5VTSwg
MCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJvcHRpbWl6ZV9mb3IiLCA5LCAmbXNnc1sx
MF0sIChjb25zdCB1cGJfZGVmKikoJmVudW1zWzNdKSwgMTIsIDMsIHswfSwmcmVmdGFibGVzWzEz
Nl0sICZyZWZ0YWJsZXNbMTM3XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJ
T05BTCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJv
cHRpb25zIiwgNywgJm1zZ3NbMF0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbMTFdKSwgMjMsIDUs
IHswfSwmcmVmdGFibGVzWzEzOF0sICZyZWZ0YWJsZXNbMTM5XSksCi0gIFVQQl9GSUVMRERFRl9J
TklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsICJvcHRpb25zIiwgMywgJm1zZ3NbMl0sIChjb25zdCB1cGJfZGVmKiko
Jm1zZ3NbM10pLCA3LCAxLCB7MH0sJnJlZnRhYmxlc1sxNDBdLCAmcmVmdGFibGVzWzE0MV0pLAot
ICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX01FU1NBR0Us
IDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAib3B0aW9ucyIsIDgsICZtc2dzWzZdLCAo
Y29uc3QgdXBiX2RlZiopKCZtc2dzWzddKSwgMywgMCwgezB9LCZyZWZ0YWJsZXNbMTQyXSwgJnJl
ZnRhYmxlc1sxNDNdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBV
UEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIm9wdGlvbnMi
LCAzLCAmbXNnc1s0XSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1s1XSksIDMsIDAsIHswfSwmcmVm
dGFibGVzWzE0NF0sICZyZWZ0YWJsZXNbMTQ1XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsICJvcHRpb25zIiwgOCwgJm1zZ3NbOF0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbMTBd
KSwgMjAsIDQsIHswfSwmcmVmdGFibGVzWzE0Nl0sICZyZWZ0YWJsZXNbMTQ3XSksCi0gIFVQQl9G
SUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJvcHRpb25zIiwgMywgJm1zZ3NbMTRdLCAoY29uc3Qg
dXBiX2RlZiopKCZtc2dzWzE1XSksIDcsIDEsIHswfSwmcmVmdGFibGVzWzE0OF0sICZyZWZ0YWJs
ZXNbMTQ5XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZ
UEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJvcHRpb25zIiwgNCwg
Jm1zZ3NbMTJdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzEzXSksIDMsIDAsIHswfSwmcmVmdGFi
bGVzWzE1MF0sICZyZWZ0YWJsZXNbMTUxXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJF
TF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgIm91dHB1dF90eXBlIiwgMywgJm1zZ3NbMTJdLCBOVUxMLCAxMCwgMywgezB9LCZyZWZ0YWJs
ZXNbMTUyXSwgJnJlZnRhYmxlc1sxNTNdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVM
X09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCAicGFja2FnZSIsIDIsICZtc2dzWzhdLCBOVUxMLCAyNSwgNywgezB9LCZyZWZ0YWJsZXNbMTU0
XSwgJnJlZnRhYmxlc1sxNTVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElP
TkFMLCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInBhY2tl
ZCIsIDIsICZtc2dzWzddLCBOVUxMLCA3LCAyLCB7MH0sJnJlZnRhYmxlc1sxNTZdLCAmcmVmdGFi
bGVzWzE1N10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQQl9U
WVBFX0lOVDMyLCBVUEJfSU5URk1UX1ZBUklBQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVl
LCAicGF0aCIsIDEsICZtc2dzWzE3XSwgTlVMTCwgNCwgMCwgezB9LCZyZWZ0YWJsZXNbMTU4XSwg
JnJlZnRhYmxlc1sxNTldKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFM
LCBVUEJfVFlQRV9VSU5UNjQsIFVQQl9JTlRGTVRfVkFSSUFCTEUsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCAicG9zaXRpdmVfaW50X3ZhbHVlIiwgNCwgJm1zZ3NbMThdLCBOVUxMLCA5LCAy
LCB7MH0sJnJlZnRhYmxlc1sxNjBdLCAmcmVmdGFibGVzWzE2MV0pLAotICBVUEJfRklFTERERUZf
SU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBFX0lOVDMyLCBVUEJfSU5URk1UX1ZBUklB
QkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInB1YmxpY19kZXBlbmRlbmN5IiwgMTAs
ICZtc2dzWzhdLCBOVUxMLCAzNSwgOSwgezB9LCZyZWZ0YWJsZXNbMTYyXSwgJnJlZnRhYmxlc1sx
NjNdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9C
T09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInB5X2dlbmVyaWNfc2VydmljZXMi
LCAxOCwgJm1zZ3NbMTBdLCBOVUxMLCAxOSwgOCwgezB9LCZyZWZ0YWJsZXNbMTY0XSwgJnJlZnRh
Ymxlc1sxNjVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJf
VFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInNlcnZpY2UiLCA2
LCAmbXNnc1s4XSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1sxNF0pLCAxNiwgMiwgezB9LCZyZWZ0
YWJsZXNbMTY2XSwgJnJlZnRhYmxlc1sxNjddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xB
QkVMX09QVElPTkFMLCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgInNvdXJjZV9jb2RlX2luZm8iLCA5LCAmbXNnc1s4XSwgKGNvbnN0IHVwYl9kZWYqKSgm
bXNnc1sxNl0pLCAyMSwgNSwgezB9LCZyZWZ0YWJsZXNbMTY4XSwgJnJlZnRhYmxlc1sxNjldKSwK
LSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9JTlQzMiwg
VVBCX0lOVEZNVF9WQVJJQUJMRSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgInNwYW4iLCAy
LCAmbXNnc1sxN10sIE5VTEwsIDcsIDEsIHswfSwmcmVmdGFibGVzWzE3MF0sICZyZWZ0YWJsZXNb
MTcxXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVf
SU5UMzIsIFVQQl9JTlRGTVRfVkFSSUFCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAi
c3RhcnQiLCAxLCAmbXNnc1sxXSwgTlVMTCwgMiwgMCwgezB9LCZyZWZ0YWJsZXNbMTcyXSwgJnJl
ZnRhYmxlc1sxNzNdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBV
UEJfVFlQRV9CWVRFUywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJzdHJpbmdfdmFs
dWUiLCA3LCAmbXNnc1sxOF0sIE5VTEwsIDEyLCA1LCB7MH0sJnJlZnRhYmxlc1sxNzRdLCAmcmVm
dGFibGVzWzE3NV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQ
Ql9UWVBFX1NUUklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJ0cmFpbGluZ19j
b21tZW50cyIsIDQsICZtc2dzWzE3XSwgTlVMTCwgMTEsIDMsIHswfSwmcmVmdGFibGVzWzE3Nl0s
ICZyZWZ0YWJsZXNbMTc3XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05B
TCwgVVBCX1RZUEVfRU5VTSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJ0eXBlIiwg
NSwgJm1zZ3NbNl0sIChjb25zdCB1cGJfZGVmKikoJmVudW1zWzFdKSwgMTIsIDUsIHswfSwmcmVm
dGFibGVzWzE3OF0sICZyZWZ0YWJsZXNbMTc5XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgInR5cGVfbmFtZSIsIDYsICZtc2dzWzZdLCBOVUxMLCAxMywgNiwgezB9LCZyZWZ0YWJs
ZXNbMTgwXSwgJnJlZnRhYmxlc1sxODFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVM
X1JFUEVBVEVELCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiwgOTk5LCAmbXNnc1s1XSwgKGNvbnN0IHVwYl9kZWYq
KSgmbXNnc1sxOF0pLCA1LCAwLCB7MH0sJnJlZnRhYmxlc1sxODJdLCAmcmVmdGFibGVzWzE4M10p
LAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBFX01FU1NB
R0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAidW5pbnRlcnByZXRlZF9vcHRpb24i
LCA5OTksICZtc2dzWzE1XSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1sxOF0pLCA1LCAwLCB7MH0s
JnJlZnRhYmxlc1sxODRdLCAmcmVmdGFibGVzWzE4NV0pLAotICBVUEJfRklFTERERUZfSU5JVChV
UEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBFX01FU1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCAidW5pbnRlcnByZXRlZF9vcHRpb24iLCA5OTksICZtc2dzWzNdLCAoY29uc3Qg
dXBiX2RlZiopKCZtc2dzWzE4XSksIDUsIDAsIHswfSwmcmVmdGFibGVzWzE4Nl0sICZyZWZ0YWJs
ZXNbMTg3XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZ
UEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJ1bmludGVycHJldGVk
X29wdGlvbiIsIDk5OSwgJm1zZ3NbMTNdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzE4XSksIDUs
IDAsIHswfSwmcmVmdGFibGVzWzE4OF0sICZyZWZ0YWJsZXNbMTg5XSksCi0gIFVQQl9GSUVMRERF
Rl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsICJ1bmludGVycHJldGVkX29wdGlvbiIsIDk5OSwgJm1zZ3NbMTBd
LCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzE4XSksIDUsIDAsIHswfSwmcmVmdGFibGVzWzE5MF0s
ICZyZWZ0YWJsZXNbMTkxXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9SRVBFQVRF
RCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJ1bmlu
dGVycHJldGVkX29wdGlvbiIsIDk5OSwgJm1zZ3NbMTFdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dz
WzE4XSksIDUsIDAsIHswfSwmcmVmdGFibGVzWzE5Ml0sICZyZWZ0YWJsZXNbMTkzXSksCi0gIFVQ
Ql9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJ1bmludGVycHJldGVkX29wdGlvbiIsIDk5OSwg
Jm1zZ3NbN10sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbMThdKSwgNSwgMCwgezB9LCZyZWZ0YWJs
ZXNbMTk0XSwgJnJlZnRhYmxlc1sxOTVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVM
X1JFUEVBVEVELCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgInZhbHVlIiwgMiwgJm1zZ3NbMl0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbNF0pLCA2LCAw
LCB7MH0sJnJlZnRhYmxlc1sxOTZdLCAmcmVmdGFibGVzWzE5N10pLAotICBVUEJfRklFTERERUZf
SU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCAid2VhayIsIDEwLCAmbXNnc1s3XSwgTlVMTCwgMTMsIDYsIHswfSwmcmVm
dGFibGVzWzE5OF0sICZyZWZ0YWJsZXNbMTk5XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfSU5UMzIsIFVQQl9JTlRGTVRfVkFSSUFCTEUsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAid2Vha19kZXBlbmRlbmN5IiwgMTEsICZtc2dzWzhdLCBO
VUxMLCAzOCwgMTAsIHswfSwmcmVmdGFibGVzWzIwMF0sICZyZWZ0YWJsZXNbMjAxXSksCi19Owot
Ci1zdGF0aWMgY29uc3QgdXBiX2VudW1kZWYgZW51bXNbNF0gPSB7Ci0gIFVQQl9FTlVNREVGX0lO
SVQoImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbCIsIFVQQl9TVFJU
QUJMRV9JTklUKDMsIDMsIFVQQl9DVFlQRV9JTlQzMiwgMiwgJnN0cmVudHJpZXNbMTYwXSksIFVQ
Ql9JTlRUQUJMRV9JTklUKDAsIDAsIFVQQl9DVFlQRV9DU1RSLCAwLCBOVUxMLCAmYXJyYXlzWzIw
Ml0sIDQsIDMpLCAwLCAmcmVmdGFibGVzWzIwMl0sICZyZWZ0YWJsZXNbMjAzXSksCi0gIFVQQl9F
TlVNREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlIiwg
VVBCX1NUUlRBQkxFX0lOSVQoMTgsIDMxLCBVUEJfQ1RZUEVfSU5UMzIsIDUsICZzdHJlbnRyaWVz
WzE2NF0pLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZUEVfQ1NUUiwgMCwgTlVMTCwg
JmFycmF5c1syMDZdLCAxOSwgMTgpLCAwLCAmcmVmdGFibGVzWzIwNF0sICZyZWZ0YWJsZXNbMjA1
XSksCi0gIFVQQl9FTlVNREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5
cGUiLCBVUEJfU1RSVEFCTEVfSU5JVCgzLCAzLCBVUEJfQ1RZUEVfSU5UMzIsIDIsICZzdHJlbnRy
aWVzWzE5Nl0pLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZUEVfQ1NUUiwgMCwgTlVM
TCwgJmFycmF5c1syMjVdLCAzLCAzKSwgMCwgJnJlZnRhYmxlc1syMDZdLCAmcmVmdGFibGVzWzIw
N10pLAotICBVUEJfRU5VTURFRl9JTklUKCJnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0
aW1pemVNb2RlIiwgVVBCX1NUUlRBQkxFX0lOSVQoMywgMywgVVBCX0NUWVBFX0lOVDMyLCAyLCAm
c3RyZW50cmllc1syMDBdKSwgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgVVBCX0NUWVBFX0NTVFIs
IDAsIE5VTEwsICZhcnJheXNbMjI4XSwgNCwgMyksIDAsICZyZWZ0YWJsZXNbMjA4XSwgJnJlZnRh
Ymxlc1syMDldKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1cGJfdGFiZW50IHN0cmVudHJpZXNbMjM2
XSA9IHsKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDExIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwg
ImV4dGVuc2lvbiIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sxNF0pLCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7
VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX1NUUigiXDAwNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJuYW1lIiksIFVQQl9U
QUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzM4XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05F
LCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQ
Ql9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RB
QlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDUiLCAiXDAw
MCIsICJcMDAwIiwgIlwwMDAiLCAiZmllbGQiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVs
ZHNbMTZdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNyIsICJcMDAwIiwgIlwwMDAi
LCAiXDAwMCIsICJleHRlbnNpb25fcmFuZ2UiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVs
ZHNbMTVdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9J
TklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEzIiwgIlwwMDAiLCAiXDAwMCIsICJc
MDAwIiwgIm5lc3RlZF90eXBlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzQ0XSks
IE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7
VVBCX1RBQktFWV9TVFIoIlwwMDciLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAib3B0aW9ucyIp
LCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s0OV0pLCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfU1RSKCJcMDExIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImVudW1fdHlwZSIpLCBVUEJf
VEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s5XSksICZzdHJlbnRyaWVzWzE0XX0sCi0gIHtVUEJf
VEFCS0VZX1NUUigiXDAwNSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJzdGFydCIpLCBVUEJf
VEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2Nl0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RS
KCJcMDAzIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImVuZCIpLCBVUEJfVEFCVkFMVUVfUFRS
X0lOSVQoJmZpZWxkc1s4XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFM
VUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9F
TVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZ
X0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDUiLCAiXDAwMCIsICJcMDAwIiwg
IlwwMDAiLCAidmFsdWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzhdKSwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJv
cHRpb25zIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzUwXSksIE5VTEx9LAotICB7
VVBCX1RBQktFWV9TVFIoIlwwMDQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibmFtZSIpLCBV
UEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s0MF0pLCAmc3RyZW50cmllc1syMl19LAotICB7
VVBCX1RBQktFWV9TVFIoIlwwMjQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAidW5pbnRlcnBy
ZXRlZF9vcHRpb24iKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzNdKSwgTlVMTH0s
Ci0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAg
e1VQQl9UQUJLRVlfU1RSKCJcMDEzIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImFsbG93X2Fs
aWFzIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzFdKSwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfU1RSKCJcMDA2IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm51bWJlciIpLCBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s0N10pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwg
VVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDci
LCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAib3B0aW9ucyIpLCBVUEJfVEFCVkFMVUVfUFRSX0lO
SVQoJmZpZWxkc1s1Ml0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAi
LCAiXDAwMCIsICJcMDAwIiwgIm5hbWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNb
MzddKSwgJnN0cmVudHJpZXNbMzBdfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDI0IiwgIlwwMDAi
LCAiXDAwMCIsICJcMDAwIiwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiksIFVQQl9UQUJWQUxVRV9Q
VFJfSU5JVCgmZmllbGRzWzcxXSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VN
UFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlf
SU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNSIsICJcMDAwIiwgIlwwMDAiLCAi
XDAwMCIsICJsYWJlbCIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syN10pLCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9TVFIoIlwwMDQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibmFtZSIp
LCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s0MV0pLCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9O
T05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUs
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBC
X1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDYiLCAi
XDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibnVtYmVyIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgm
ZmllbGRzWzQ2XSksICZzdHJlbnRyaWVzWzQ5XX0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTEiLCAiXDAwMCIs
ICJcMDAwIiwgIlwwMDAiLCAidHlwZV9uYW1lIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmll
bGRzWzcwXSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTAiLCAiXDAwMCIsICJcMDAw
IiwgIlwwMDAiLCAiZXh0ZW5kZWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTJd
KSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAw
MCIsICJ0eXBlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzY5XSksICZzdHJlbnRy
aWVzWzQ4XX0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNSIsICJcMDAwIiwgIlwwMDAiLCAiXDAw
MCIsICJkZWZhdWx0X3ZhbHVlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzRdKSwg
TlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIs
ICJvcHRpb25zIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzUxXSksIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9TVFIoIlwwMjQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZXhwZXJp
bWVudGFsX21hcF9rZXkiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTFdKSwgJnN0
cmVudHJpZXNbNjddfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lO
SVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDQiLCAiXDAwMCIsICJcMDAwIiwgIlww
MDAiLCAid2VhayIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3OV0pLCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7
VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9T
VFIoIlwwMDYiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAicGFja2VkIiksIFVQQl9UQUJWQUxV
RV9QVFJfSU5JVCgmZmllbGRzWzU4XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDQi
LCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibGF6eSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1syOF0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VN
UFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDUiLCAiXDAwMCIsICJcMDAw
IiwgIlwwMDAiLCAiY3R5cGUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbM10pLCBO
VUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9
LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0g
IHtVUEJfVEFCS0VZX1NUUigiXDAxMiIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJkZXByZWNh
dGVkIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzZdKSwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfU1RSKCJcMDI0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInVuaW50ZXJwcmV0ZWRfb3B0
aW9uIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzc3XSksIE5VTEx9LAotICB7VVBC
X1RBQktFWV9TVFIoIlwwMTEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZXh0ZW5zaW9uIiks
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzEzXSksIE5VTEx9LAotICB7VVBCX1RBQktF
WV9TVFIoIlwwMTciLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAid2Vha19kZXBlbmRlbmN5Iiks
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzgwXSksIE5VTEx9LAotICB7VVBCX1RBQktF
WV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NU
UigiXDAwNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJuYW1lIiksIFVQQl9UQUJWQUxVRV9Q
VFJfSU5JVCgmZmllbGRzWzM0XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDciLCAi
XDAwMCIsICJcMDAwIiwgIlwwMDAiLCAic2VydmljZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1s2M10pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VN
UFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMjAiLCAiXDAwMCIsICJcMDAw
IiwgIlwwMDAiLCAic291cmNlX2NvZGVfaW5mbyIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZp
ZWxkc1s2NF0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZ
X0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5J
VCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBO
VUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwg
ImRlcGVuZGVuY3kiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNV0pLCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfU1RSKCJcMDE0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm1lc3Nh
Z2VfdHlwZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1szMl0pLCBOVUxMfSwKLSAg
e1VQQl9UQUJLRVlfU1RSKCJcMDA3IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInBhY2thZ2Ui
KSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTddKSwgTlVMTH0sCi0gIHtVUEJfVEFC
S0VZX1NUUigiXDAwNyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJvcHRpb25zIiksIFVQQl9U
QUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzUzXSksICZzdHJlbnRyaWVzWzgyXX0sCi0gIHtVUEJf
VEFCS0VZX1NUUigiXDAxMSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJlbnVtX3R5cGUiKSwg
VVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTBdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZ
X1NUUigiXDAyMSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJwdWJsaWNfZGVwZW5kZW5jeSIp
LCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2MV0pLCAmc3RyZW50cmllc1s4MV19LAot
ICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX1NUUigiXDAwNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJmaWxlIiksIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzE3XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9O
T05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUs
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDI0
IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiksIFVQQl9U
QUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzc1XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05F
LCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAy
MyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJjY19nZW5lcmljX3NlcnZpY2VzIiksIFVQQl9U
QUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzJdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUs
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDIz
IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImphdmFfbXVsdGlwbGVfZmlsZXMiKSwgVVBCX1RB
QlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMjRdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUs
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDI1
IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImphdmFfZ2VuZXJpY19zZXJ2aWNlcyIpLCBVUEJf
VEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syM10pLCAmc3RyZW50cmllc1sxMDJdfSwKLSAge1VQ
Ql9UQUJLRVlfU1RSKCJcMDM1IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImphdmFfZ2VuZXJh
dGVfZXF1YWxzX2FuZF9oYXNoIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzIyXSks
IE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7
VVBCX1RBQktFWV9TVFIoIlwwMTIiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZ29fcGFja2Fn
ZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sxOF0pLCBOVUxMfSwKLSAge1VQQl9U
QUJLRVlfU1RSKCJcMDE0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImphdmFfcGFja2FnZSIp
LCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syNl0pLCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfU1RSKCJcMDE0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm9wdGltaXplX2ZvciIpLCBV
UEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s0OF0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlf
U1RSKCJcMDIzIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInB5X2dlbmVyaWNfc2VydmljZXMi
KSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNjJdKSwgTlVMTH0sCi0gIHtVUEJfVEFC
S0VZX1NUUigiXDAyNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJqYXZhX291dGVyX2NsYXNz
bmFtZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syNV0pLCBOVUxMfSwKLSAge1VQ
Ql9UQUJLRVlfU1RSKCJcMDI3IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm1lc3NhZ2Vfc2V0
X3dpcmVfZm9ybWF0IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzMxXSksICZzdHJl
bnRyaWVzWzEwNl19LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5J
VCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAyNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAw
MCIsICJ1bmludGVycHJldGVkX29wdGlvbiIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxk
c1s3Nl0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDM3IiwgIlwwMDAiLCAiXDAwMCIs
ICJcMDAwIiwgIm5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IiKSwgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCZmaWVsZHNbNDVdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVf
RU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNCIsICJcMDAwIiwgIlww
MDAiLCAiXDAwMCIsICJuYW1lIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzM5XSks
IE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTIiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAi
LCAiaW5wdXRfdHlwZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syMF0pLCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9TVFIoIlwwMTMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAib3V0cHV0
X3R5cGUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTZdKSwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX1NUUigiXDAwNyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJvcHRpb25zIiks
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzU1XSksIE5VTEx9LAotICB7VVBCX1RBQktF
WV9TVFIoIlwwMjQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAidW5pbnRlcnByZXRlZF9vcHRp
b24iKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzRdKSwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9O
T05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUs
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA3
IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm9wdGlvbnMiKSwgVVBCX1RBQlZBTFVFX1BUUl9J
TklUKCZmaWVsZHNbNTRdKSwgJnN0cmVudHJpZXNbMTIyXX0sCi0gIHtVUEJfVEFCS0VZX1NUUigi
XDAwNiIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJtZXRob2QiKSwgVVBCX1RBQlZBTFVFX1BU
Ul9JTklUKCZmaWVsZHNbMzNdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNCIsICJc
MDAwIiwgIlwwMDAiLCAiXDAwMCIsICJuYW1lIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmll
bGRzWzM1XSksICZzdHJlbnRyaWVzWzEyMV19LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMjQiLCAi
XDAwMCIsICJcMDAwIiwgIlwwMDAiLCAidW5pbnRlcnByZXRlZF9vcHRpb24iKSwgVVBCX1RBQlZB
TFVFX1BUUl9JTklUKCZmaWVsZHNbNzJdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQ
Ql9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RB
QlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFM
VUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9F
TVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZ
X0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTAiLCAiXDAwMCIsICJcMDAwIiwg
IlwwMDAiLCAibG9jYXRpb24iKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMzBdKSwg
TlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9U
QUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInNwYW4iKSwgVVBCX1RB
QlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNjVdKSwgJnN0cmVudHJpZXNbMTM5XX0sCi0gIHtVUEJf
VEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfU1RSKCJcMDIxIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInRyYWlsaW5nX2NvbW1lbnRz
IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzY4XSksIE5VTEx9LAotICB7VVBCX1RB
QktFWV9TVFIoIlwwMjAiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibGVhZGluZ19jb21tZW50
cyIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syOV0pLCAmc3RyZW50cmllc1sxMzdd
fSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInBh
dGgiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTldKSwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX1NUUigiXDAxNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJkb3VibGVfdmFsdWUi
KSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbN10pLCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9O
T05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigi
XDAwNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJuYW1lIiksIFVQQl9UQUJWQUxVRV9QVFJf
SU5JVCgmZmllbGRzWzM2XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFM
VUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9F
TVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZ
X0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMjIiLCAiXDAwMCIsICJcMDAwIiwg
IlwwMDAiLCAibmVnYXRpdmVfaW50X3ZhbHVlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmll
bGRzWzQzXSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTciLCAiXDAwMCIsICJcMDAw
IiwgIlwwMDAiLCAiYWdncmVnYXRlX3ZhbHVlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmll
bGRzWzBdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9J
TklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQs
IE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfU1RSKCJcMDIyIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInBvc2l0
aXZlX2ludF92YWx1ZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2MF0pLCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDIwIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImlk
ZW50aWZpZXJfdmFsdWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTldKSwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJz
dHJpbmdfdmFsdWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNjddKSwgJnN0cmVu
dHJpZXNbMTU0XX0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklU
LCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5V
TEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAi
aXNfZXh0ZW5zaW9uIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzIxXSksIE5VTEx9
LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibmFt
ZV9wYXJ0IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzQyXSksIE5VTEx9LAotICB7
VVBCX1RBQktFWV9TVFIoIlwwMTYiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiTEFCRUxfUkVR
VUlSRUQiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDIpLCAmc3RyZW50cmllc1sxNjJdfSwKLSAg
e1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBC
X1RBQktFWV9TVFIoIlwwMTYiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiTEFCRUxfUkVQRUFU
RUQiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDMpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RS
KCJcMDE2IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIkxBQkVMX09QVElPTkFMIiksIFVQQl9U
QUJWQUxVRV9JTlRfSU5JVCgxKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNCIsICJc
MDAwIiwgIlwwMDAiLCAiXDAwMCIsICJUWVBFX0ZJWEVENjQiKSwgVVBCX1RBQlZBTFVFX0lOVF9J
TklUKDYpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lO
SVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwg
TlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9TVFIoIlwwMTMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiVFlQRV9T
VFJJTkciKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDkpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlf
U1RSKCJcMDEyIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIlRZUEVfRkxPQVQiKSwgVVBCX1RB
QlZBTFVFX0lOVF9JTklUKDIpLCAmc3RyZW50cmllc1sxOTNdfSwKLSAge1VQQl9UQUJLRVlfU1RS
KCJcMDEzIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIlRZUEVfRE9VQkxFIiksIFVQQl9UQUJW
QUxVRV9JTlRfSU5JVCgxKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwgIlwwMDAiLCAi
XDAwMCIsICJcMDAwIiwgIlRZUEVfSU5UMzIiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDUpLCBO
VUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDE1IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwg
IlRZUEVfU0ZJWEVEMzIiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDE1KSwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX1NUUigiXDAxNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJUWVBFX0ZJWEVE
MzIiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDcpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9O
RSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlww
MTQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiVFlQRV9NRVNTQUdFIiksIFVQQl9UQUJWQUxV
RV9JTlRfSU5JVCgxMSksICZzdHJlbnRyaWVzWzE5NF19LAotICB7VVBCX1RBQktFWV9OT05FLCBV
UEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwgIlww
MDAiLCAiXDAwMCIsICJcMDAwIiwgIlRZUEVfSU5UNjQiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklU
KDMpLCAmc3RyZW50cmllc1sxOTFdfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVF
X0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1Q
VFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9J
TklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQs
IE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAi
LCAiVFlQRV9FTlVNIiksIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCgxNCksIE5VTEx9LAotICB7VVBC
X1RBQktFWV9TVFIoIlwwMTMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiVFlQRV9VSU5UMzIi
KSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDEzKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUs
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEz
IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIlRZUEVfVUlOVDY0IiksIFVQQl9UQUJWQUxVRV9J
TlRfSU5JVCg0KSwgJnN0cmVudHJpZXNbMTkwXX0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDE1IiwgIlww
MDAiLCAiXDAwMCIsICJcMDAwIiwgIlRZUEVfU0ZJWEVENjQiKSwgVVBCX1RBQlZBTFVFX0lOVF9J
TklUKDE2KSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxMiIsICJcMDAwIiwgIlwwMDAi
LCAiXDAwMCIsICJUWVBFX0JZVEVTIiksIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCgxMiksIE5VTEx9
LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiVFlQ
RV9TSU5UNjQiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDE4KSwgTlVMTH0sCi0gIHtVUEJfVEFC
S0VZX1NUUigiXDAxMSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJUWVBFX0JPT0wiKSwgVVBC
X1RBQlZBTFVFX0lOVF9JTklUKDgpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwg
IlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIlRZUEVfR1JPVVAiKSwgVVBCX1RBQlZBTFVFX0lOVF9J
TklUKDEwKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxMyIsICJcMDAwIiwgIlwwMDAi
LCAiXDAwMCIsICJUWVBFX1NJTlQzMiIpLCBVUEJfVEFCVkFMVUVfSU5UX0lOSVQoMTcpLCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9TVFIoIlwwMDQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiQ09SRCIp
LCBVUEJfVEFCVkFMVUVfSU5UX0lOSVQoMSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlww
MDYiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiU1RSSU5HIiksIFVQQl9UQUJWQUxVRV9JTlRf
SU5JVCgwKSwgJnN0cmVudHJpZXNbMTk3XX0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNCIsICJc
MDAwIiwgIlwwMDAiLCAiXDAwMCIsICJTVFJJTkdfUElFQ0UiKSwgVVBCX1RBQlZBTFVFX0lOVF9J
TklUKDIpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDExIiwgIlwwMDAiLCAiXDAwMCIs
ICJcMDAwIiwgIkNPREVfU0laRSIpLCBVUEJfVEFCVkFMVUVfSU5UX0lOSVQoMiksIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9TVFIoIlwwMDUiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiU1BFRUQi
KSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDEpLCAmc3RyZW50cmllc1syMDNdfSwKLSAge1VQQl9U
QUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktF
WV9TVFIoIlwwMTQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiTElURV9SVU5USU1FIiksIFVQ
Ql9UQUJWQUxVRV9JTlRfSU5JVCgzKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwNDciLCAiXDAwMCIs
ICJcMDAwIiwgIlwwMDAiLCAiZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9u
IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1sxN10pLCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfU1RSKCJcMDQzIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImdvb2dsZS5wcm90b2J1Zi5V
bmludGVycHJldGVkT3B0aW9uIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1sxOF0pLCBO
VUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDQzIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwg
Imdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvIiksIFVQQl9UQUJWQUxVRV9QVFJf
SU5JVCgmbXNnc1s4XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwNDUiLCAiXDAwMCIs
ICJcMDAwIiwgIlwwMDAiLCAiZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90byIp
LCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJm1zZ3NbMTJdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZ
X05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RS
KCJcMDQwIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImdvb2dsZS5wcm90b2J1Zi5FbnVtVmFs
dWVPcHRpb25zIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1s1XSksIE5VTEx9LAotICB7
VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9T
VFIoIlwwMzciLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZ29vZ2xlLnByb3RvYnVmLkRlc2Ny
aXB0b3JQcm90byIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJm1zZ3NbMF0pLCAmc3RyZW50cmll
c1syMjhdfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5V
TEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMzYiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAi
Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgm
bXNnc1sxNl0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDUxIiwgIlwwMDAiLCAiXDAw
MCIsICJcMDAwIiwgImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlIiks
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZW51bXNbMV0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlf
U1RSKCJcMDU2IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImdvb2dsZS5wcm90b2J1Zi5EZXNj
cmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZtc2dz
WzFdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklU
LCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDUwIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAw
IiwgImdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8iKSwgVVBCX1RBQlZB
TFVFX1BUUl9JTklUKCZtc2dzWzRdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAzNCIs
ICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zIiks
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1s3XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9T
VFIoIlwwMzMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZ29vZ2xlLnByb3RvYnVmLkZpbGVP
cHRpb25zIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1sxMF0pLCBOVUxMfSwKLSAge1VQ
Ql9UQUJLRVlfU1RSKCJcMDQzIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImdvb2dsZS5wcm90
b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1sy
XSksICZzdHJlbnRyaWVzWzIzM119LAotICB7VVBCX1RBQktFWV9TVFIoIlwwNTIiLCAiXDAwMCIs
ICJcMDAwIiwgIlwwMDAiLCAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxh
YmVsIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZW51bXNbMF0pLCBOVUxMfSwKLSAge1VQQl9U
QUJLRVlfU1RSKCJcMDQ2IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImdvb2dsZS5wcm90b2J1
Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1sx
NF0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDQyIiwgIlwwMDAiLCAiXDAwMCIsICJc
MDAwIiwgImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGUiKSwgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCZlbnVtc1syXSksICZzdHJlbnRyaWVzWzIyOV19LAotICB7VVBCX1RBQktFWV9T
VFIoIlwwNDEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZ29vZ2xlLnByb3RvYnVmLkZpbGVE
ZXNjcmlwdG9yU2V0IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1s5XSksICZzdHJlbnRy
aWVzWzIzNV19LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMzMiLCAiXDAwMCIsICJcMDAwIiwgIlww
MDAiLCAiZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5J
VCgmbXNnc1szXSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwNDQiLCAiXDAwMCIsICJc
MDAwIiwgIlwwMDAiLCAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvIiksIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1s2XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIo
IlwwNTAiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRp
b25zLk9wdGltaXplTW9kZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmVudW1zWzNdKSwgJnN0
cmVudHJpZXNbMjIxXX0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAzNiIsICJcMDAwIiwgIlwwMDAi
LCAiXDAwMCIsICJnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMiKSwgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCZtc2dzWzE1XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMzYiLCAi
XDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zIiks
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1sxMV0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlf
U1RSKCJcMDM1IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImdvb2dsZS5wcm90b2J1Zi5NZXRo
b2RPcHRpb25zIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmbXNnc1sxM10pLCAmc3RyZW50cmll
c1syMjZdfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDU0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAw
IiwgImdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0IiksIFVQQl9U
QUJWQUxVRV9QVFJfSU5JVCgmbXNnc1sxOV0pLCBOVUxMfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1
cGJfdGFiZW50IGludGVudHJpZXNbMTRdID0gewotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05VTSg5OTkpLCBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3M10pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwg
VVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OVU0oOTk5KSwg
VVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzFdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZ
X05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTlVN
KDk5OSksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzc3XSksIE5VTEx9LAotICB7VVBC
X1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFC
S0VZX05VTSg5OTkpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3NV0pLCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7
VVBCX1RBQktFWV9OVU0oOTk5KSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzZdKSwg
TlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfTlVNKDk5OSksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRz
Wzc0XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5J
VCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05VTSg5OTkpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1s3Ml0pLCBOVUxMfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1cGJfdGFidmFsIGFycmF5
c1syMzJdID0gewotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX1BU
Ul9JTklUKCZmaWVsZHNbMzhdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTZd
KSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNDRdKSwKLSAgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCZmaWVsZHNbOV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sx
NV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sxNF0pLAotICBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1s0OV0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAg
VVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNjZdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9J
TklUKCZmaWVsZHNbOF0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZB
TFVFX1BUUl9JTklUKCZmaWVsZHNbNDBdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVs
ZHNbNzhdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTBdKSwKLSAgVVBCX1RB
QlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sxXSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAot
ICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0g
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAg
VVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRz
WzM3XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzQ3XSksCi0gIFVQQl9UQUJW
QUxVRV9QVFJfSU5JVCgmZmllbGRzWzUyXSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAot
ICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0g
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAg
VVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNDFdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9J
TklUKCZmaWVsZHNbMTJdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNDZdKSwK
LSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMjddKSwKLSAgVVBCX1RBQlZBTFVFX1BU
Ul9JTklUKCZmaWVsZHNbNjldKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzBd
KSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNF0pLAotICBVUEJfVEFCVkFMVUVf
UFRSX0lOSVQoJmZpZWxkc1s1MV0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBC
X1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbM10pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1s1OF0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2XSksCi0gIFVQ
Ql9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sy
OF0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lO
SVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1sxMV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3OV0pLAotICBV
UEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQ
Ql9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBC
X1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJf
VEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RB
QlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJW
QUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFM
VUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCZmaWVsZHNbMzRdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNb
NTddKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNV0pLAotICBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1szMl0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxk
c1sxMF0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2M10pLAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sxM10pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZp
ZWxkc1s1M10pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2NF0pLAotICBVUEJf
VEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2MV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1s4MF0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCZmaWVsZHNbMTddKSwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzI2XSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9J
TklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lO
SVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5J
VCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgm
ZmllbGRzWzI1XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzQ4XSksCi0gIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzI0XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5J
VCgmZmllbGRzWzE4XSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFM
VUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syXSksCi0gIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzIzXSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5J
VCgmZmllbGRzWzYyXSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1syMl0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAg
VVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBV
UEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQ
Ql9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBC
X1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJf
VEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RB
QlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJW
QUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFM
VUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVF
X0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVf
RU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9F
TVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VN
UFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1Q
VFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBU
WV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZ
X0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlf
SU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9J
TklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lO
SVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzMxXSksCi0gIFVQQl9UQUJWQUxV
RV9QVFJfSU5JVCgmZmllbGRzWzQ1XSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBV
UEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQ
Ql9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBC
X1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJf
VEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RB
QlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMzldKSwK
LSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMjBdKSwKLSAgVVBCX1RBQlZBTFVFX1BU
Ul9JTklUKCZmaWVsZHNbNTZdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTVd
KSwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklU
LAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQs
Ci0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZp
ZWxkc1szNV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1szM10pLAotICBVUEJf
VEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s1NF0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5J
VCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklU
LAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQs
Ci0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzMwXSksCi0gIFVQQl9UQUJWQUxVRV9F
TVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s1OV0pLAotICBVUEJf
VEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2NV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1syOV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2OF0pLAotICBV
UEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzM2XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5J
VCgmZmllbGRzWzE5XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzYwXSksCi0g
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzQzXSksCi0gIFVQQl9UQUJWQUxVRV9QVFJf
SU5JVCgmZmllbGRzWzddKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNjddKSwK
LSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMF0pLAotICBVUEJfVEFCVkFMVUVfRU1Q
VFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNDJdKSwKLSAgVVBCX1RB
QlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMjFdKSwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQs
Ci0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiTEFCRUxfT1BUSU9OQUwiKSwKLSAgVVBCX1RBQlZB
TFVFX1BUUl9JTklUKCJMQUJFTF9SRVFVSVJFRCIpLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
IkxBQkVMX1JFUEVBVEVEIiksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoIlRZUEVfRE9VQkxFIiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgi
VFlQRV9GTE9BVCIpLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIlRZUEVfSU5UNjQiKSwKLSAg
VVBCX1RBQlZBTFVFX1BUUl9JTklUKCJUWVBFX1VJTlQ2NCIpLAotICBVUEJfVEFCVkFMVUVfUFRS
X0lOSVQoIlRZUEVfSU5UMzIiKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCJUWVBFX0ZJWEVE
NjQiKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCJUWVBFX0ZJWEVEMzIiKSwKLSAgVVBCX1RB
QlZBTFVFX1BUUl9JTklUKCJUWVBFX0JPT0wiKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCJU
WVBFX1NUUklORyIpLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIlRZUEVfR1JPVVAiKSwKLSAg
VVBCX1RBQlZBTFVFX1BUUl9JTklUKCJUWVBFX01FU1NBR0UiKSwKLSAgVVBCX1RBQlZBTFVFX1BU
Ul9JTklUKCJUWVBFX0JZVEVTIiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiVFlQRV9VSU5U
MzIiKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCJUWVBFX0VOVU0iKSwKLSAgVVBCX1RBQlZB
TFVFX1BUUl9JTklUKCJUWVBFX1NGSVhFRDMyIiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgi
VFlQRV9TRklYRUQ2NCIpLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIlRZUEVfU0lOVDMyIiks
Ci0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiVFlQRV9TSU5UNjQiKSwKLSAgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCJTVFJJTkciKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCJDT1JEIiksCi0g
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiU1RSSU5HX1BJRUNFIiksCi0gIFVQQl9UQUJWQUxVRV9F
TVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIlNQRUVEIiksCi0gIFVQQl9UQUJW
QUxVRV9QVFJfSU5JVCgiQ09ERV9TSVpFIiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiTElU
RV9SVU5USU1FIiksCi19OwotCi1zdGF0aWMgY29uc3QgdXBiX3N5bXRhYiBzeW10YWIgPSBVUEJf
U1lNVEFCX0lOSVQoVVBCX1NUUlRBQkxFX0lOSVQoMjQsIDMxLCBVUEJfQ1RZUEVfUFRSLCA1LCAm
c3RyZW50cmllc1syMDRdKSwgJnJlZnRhYmxlc1syMTBdLCAmcmVmdGFibGVzWzIxMV0pOwotCi1j
b25zdCB1cGJfc3ltdGFiICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9kZXNjcmlwdG9yKGNvbnN0
IHZvaWQgKm93bmVyKSB7Ci0gIHVwYl9zeW10YWJfcmVmKCZzeW10YWIsIG93bmVyKTsKLSAgcmV0
dXJuICZzeW10YWI7Ci19Ci0KLSNpZmRlZiBVUEJfREVCVUdfUkVGUwotc3RhdGljIHVwYl9pbnR0
YWJsZSByZWZ0YWJsZXNbMjEyXSA9IHsKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NU
WVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBV
UEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRB
QkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9D
VFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAg
VVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRU
QUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJf
Q1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0g
IFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5U
VEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBC
X0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAot
ICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lO
VFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQ
Ql9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwK
LSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9J
TlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChV
UEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiks
Ci0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlf
SU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQo
VVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIp
LAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklU
KFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRS
KSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBU
WV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5J
VChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BU
UiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1Q
VFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lO
SVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9Q
VFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VN
UFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9J
TklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVf
UFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9F
TVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVf
SU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBF
X1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJf
RU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxF
X0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQ
RV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBC
X0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJM
RV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZ
UEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQ
Ql9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFC
TEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NU
WVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBV
UEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRB
QkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9D
VFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAg
VVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRU
QUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJf
Q1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0g
IFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5U
VEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBC
X0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAot
ICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lO
VFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQ
Ql9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwK
LSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9J
TlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChV
UEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiks
Ci0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlf
SU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQo
VVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIp
LAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklU
KFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRS
KSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBU
WV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5J
VChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BU
UiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1Q
VFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lO
SVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9Q
VFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VN
UFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9J
TklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVf
UFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9F
TVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVf
SU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBF
X1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJf
RU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxF
X0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQ
RV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBC
X0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJM
RV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZ
UEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQ
Ql9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFC
TEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NU
WVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBV
UEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRB
QkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9D
VFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAg
VVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRU
QUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJf
Q1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0g
IFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5U
VEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBC
X0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAot
ICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lO
VFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQ
Ql9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwK
LSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9J
TlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChV
UEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiks
Ci0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlf
SU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQo
VVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIp
LAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklU
KFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRS
KSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBU
WV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5J
VChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BU
UiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1Q
VFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lO
SVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9Q
VFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VN
UFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9J
TklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVf
UFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9F
TVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVf
SU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBF
X1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJf
RU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxF
X0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQ
RV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBC
X0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJM
RV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZ
UEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQ
Ql9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFC
TEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NU
WVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBV
UEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRB
QkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9D
VFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAg
VVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRU
QUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJf
Q1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0g
IFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5U
VEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBC
X0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAot
ICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lO
VFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQ
Ql9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwK
LSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9J
TlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChV
UEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiks
Ci0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlf
SU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQo
VVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIp
LAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklU
KFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRS
KSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBU
WV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5J
VChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BU
UiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1Q
VFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lO
SVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9Q
VFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VN
UFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9J
TklUKFVQQl9DVFlQRV9QVFIpLAotfTsKLSNlbmRpZgotCi0vKgotKiogWFhYOiBUaGUgcm91dGlu
ZXMgaW4gdGhpcyBmaWxlIHRoYXQgY29uc3VtZSBhIHN0cmluZyBkbyBub3QgY3VycmVudGx5Ci0q
KiBzdXBwb3J0IGhhdmluZyB0aGUgc3RyaW5nIHNwYW4gYnVmZmVycy4gIEluIHRoZSBmdXR1cmUs
IGFzIHVwYl9zaW5rIGFuZAotKiogaXRzIGJ1ZmZlcmluZy9zaGFyaW5nIGZ1bmN0aW9uYWxpdHkg
ZXZvbHZlIHRoZXJlIHNob3VsZCBiZSBhbiBlYXN5IGFuZAotKiogaWRpb21hdGljIHdheSBvZiBj
b3JyZWN0bHkgaGFuZGxpbmcgdGhpcyBjYXNlLiAgRm9yIG5vdywgd2UgYWNjZXB0IHRoaXMKLSoq
IGxpbWl0YXRpb24gc2luY2Ugd2UgY3VycmVudGx5IG9ubHkgcGFyc2UgZGVzY3JpcHRvcnMgZnJv
bSBzaW5nbGUgc3RyaW5ncy4KLSovCi0KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8
c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIHVwYl9kZWZsaXN0IGlzIGFuIGlu
dGVybmFsLW9ubHkgZHluYW1pYyBhcnJheSBmb3Igc3RvcmluZyBhIGdyb3dpbmcgbGlzdCBvZgot
ICogdXBiX2RlZnMuICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHVwYl9kZWYgKipkZWZzOwotICBz
aXplX3QgbGVuOwotICBzaXplX3Qgc2l6ZTsKLSAgYm9vbCBvd25lZDsKLX0gdXBiX2RlZmxpc3Q7
Ci0KLS8qIFdlIGtlZXAgYSBzdGFjayBvZiBhbGwgdGhlIG1lc3NhZ2VzIHNjb3BlcyB3ZSBhcmUg
Y3VycmVudGx5IGluLCBhcyB3ZWxsIGFzCi0gKiB0aGUgdG9wLWxldmVsIGZpbGUgc2NvcGUuICBU
aGlzIGlzIG5lY2Vzc2FyeSB0byBjb3JyZWN0bHkgcXVhbGlmeSB0aGUKLSAqIGRlZmluaXRpb25z
IHRoYXQgYXJlIGNvbnRhaW5lZCBpbnNpZGUuICAibmFtZSIgdHJhY2tzIHRoZSBuYW1lIG9mIHRo
ZQotICogbWVzc2FnZSBvciBwYWNrYWdlIChhIGJhcmUgbmFtZSAtLSBub3QgcXVhbGlmaWVkIGJ5
IGFueSBlbmNsb3Npbmcgc2NvcGVzKS4gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgY2hhciAqbmFt
ZTsKLSAgLyogSW5kZXggb2YgdGhlIGZpcnN0IGRlZiB0aGF0IGlzIHVuZGVyIHRoaXMgc2NvcGUu
ICBGb3IgbXNnZGVmcywgdGhlCi0gICAqIG1zZ2RlZiBpdHNlbGYgaXMgYXQgc3RhcnQtMS4gKi8K
LSAgaW50IHN0YXJ0OwotfSB1cGJfZGVzY3JlYWRlcl9mcmFtZTsKLQotLyogVGhlIG1heGltdW0g
bnVtYmVyIG9mIG5lc3RlZCBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgYWxsb3dlZCwgaWUuCi0gKiBt
ZXNzYWdlIEZvbyB7Ci0gKiAgIG1lc3NhZ2UgQmFyIHsKLSAqICAgICBtZXNzYWdlIEJheiB7Ci0g
KiAgICAgfQotICogICB9Ci0gKiB9Ci0gKgotICogVGhpcyBpcyBhIHJlc291cmNlIGxpbWl0IHRo
YXQgYWZmZWN0cyBob3cgYmlnIG91ciBydW50aW1lIHN0YWNrIGNhbiBncm93LgotICogVE9ETzog
bWFrZSB0aGlzIGEgcnVudGltZS1zZXR0YWJsZSBwcm9wZXJ0eSBvZiB0aGUgUmVhZGVyIGluc3Rh
bmNlLiAqLwotI2RlZmluZSBVUEJfTUFYX01FU1NBR0VfTkVTVElORyA2NAotCi1zdHJ1Y3QgdXBi
X2Rlc2NyZWFkZXIgewotICB1cGJfc2luayBzaW5rOwotICB1cGJfZGVmbGlzdCBkZWZzOwotICB1
cGJfZGVzY3JlYWRlcl9mcmFtZSBzdGFja1tVUEJfTUFYX01FU1NBR0VfTkVTVElOR107Ci0gIGlu
dCBzdGFja19sZW47Ci0KLSAgdWludDMyX3QgbnVtYmVyOwotICBjaGFyICpuYW1lOwotICBib29s
IHNhd19udW1iZXI7Ci0gIGJvb2wgc2F3X25hbWU7Ci0KLSAgY2hhciAqZGVmYXVsdF9zdHJpbmc7
Ci0KLSAgdXBiX2ZpZWxkZGVmICpmOwotfTsKLQotc3RhdGljIGNoYXIgKnVwYl9zdHJuZHVwKGNv
bnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pIHsKLSAgY2hhciAqcmV0ID0gbWFsbG9jKG4gKyAxKTsK
LSAgaWYgKCFyZXQpIHJldHVybiBOVUxMOwotICBtZW1jcHkocmV0LCBidWYsIG4pOwotICByZXRb
bl0gPSAnXDAnOwotICByZXR1cm4gcmV0OwotfQotCi0vKiBSZXR1cm5zIGEgbmV3bHkgYWxsb2Nh
dGVkIHN0cmluZyB0aGF0IGpvaW5zIGlucHV0IHN0cmluZ3MgdG9nZXRoZXIsIGZvcgotICogZXhh
bXBsZToKLSAqICAgam9pbigiRm9vLkJhciIsICJCYXoiKSAtPiAiRm9vLkJhci5CYXoiCi0gKiAg
IGpvaW4oIiIsICJCYXoiKSAtPiAiQmF6IgotICogQ2FsbGVyIG93bnMgYSByZWYgb24gdGhlIHJl
dHVybmVkIHN0cmluZy4gKi8KLXN0YXRpYyBjaGFyICp1cGJfam9pbihjb25zdCBjaGFyICpiYXNl
LCBjb25zdCBjaGFyICpuYW1lKSB7Ci0gIGlmICghYmFzZSB8fCBzdHJsZW4oYmFzZSkgPT0gMCkg
ewotICAgIHJldHVybiB1cGJfc3RyZHVwKG5hbWUpOwotICB9IGVsc2UgewotICAgIGNoYXIgKnJl
dCA9IG1hbGxvYyhzdHJsZW4oYmFzZSkgKyBzdHJsZW4obmFtZSkgKyAyKTsKLSAgICByZXRbMF0g
PSAnXDAnOwotICAgIHN0cmNhdChyZXQsIGJhc2UpOwotICAgIHN0cmNhdChyZXQsICIuIik7Ci0g
ICAgc3RyY2F0KHJldCwgbmFtZSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi0KLS8qIHVw
Yl9kZWZsaXN0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLXZvaWQgdXBiX2RlZmxpc3RfaW5pdCh1cGJfZGVmbGlzdCAq
bCkgewotICBsLT5zaXplID0gMDsKLSAgbC0+ZGVmcyA9IE5VTEw7Ci0gIGwtPmxlbiA9IDA7Ci0g
IGwtPm93bmVkID0gdHJ1ZTsKLX0KLQotdm9pZCB1cGJfZGVmbGlzdF91bmluaXQodXBiX2RlZmxp
c3QgKmwpIHsKLSAgc2l6ZV90IGk7Ci0gIGlmIChsLT5vd25lZCkKLSAgICBmb3IoaSA9IDA7IGkg
PCBsLT5sZW47IGkrKykKLSAgICAgIHVwYl9kZWZfdW5yZWYobC0+ZGVmc1tpXSwgbCk7Ci0gIGZy
ZWUobC0+ZGVmcyk7Ci19Ci0KLWJvb2wgdXBiX2RlZmxpc3RfcHVzaCh1cGJfZGVmbGlzdCAqbCwg
dXBiX2RlZiAqZCkgewotICBpZigrK2wtPmxlbiA+PSBsLT5zaXplKSB7Ci0gICAgc2l6ZV90IG5l
d19zaXplID0gVVBCX01BWChsLT5zaXplLCA0KTsKLSAgICBuZXdfc2l6ZSAqPSAyOwotICAgIGwt
PmRlZnMgPSByZWFsbG9jKGwtPmRlZnMsIG5ld19zaXplICogc2l6ZW9mKHZvaWQgKikpOwotICAg
IGlmICghbC0+ZGVmcykgcmV0dXJuIGZhbHNlOwotICAgIGwtPnNpemUgPSBuZXdfc2l6ZTsKLSAg
fQotICBsLT5kZWZzW2wtPmxlbiAtIDFdID0gZDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
dXBiX2RlZmxpc3RfZG9uYXRlcmVmcyh1cGJfZGVmbGlzdCAqbCwgdm9pZCAqb3duZXIpIHsKLSAg
c2l6ZV90IGk7Ci0gIGFzc2VydChsLT5vd25lZCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBsLT5sZW47
IGkrKykKLSAgICB1cGJfZGVmX2RvbmF0ZXJlZihsLT5kZWZzW2ldLCBsLCBvd25lcik7Ci0gIGwt
Pm93bmVkID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyB1cGJfZGVmICp1cGJfZGVmbGlzdF9sYXN0KHVw
Yl9kZWZsaXN0ICpsKSB7Ci0gIHJldHVybiBsLT5kZWZzW2wtPmxlbi0xXTsKLX0KLQotLyogUXVh
bGlmeSB0aGUgZGVmbmFtZSBmb3IgYWxsIGRlZnMgc3RhcnRpbmcgd2l0aCBvZmZzZXQgInN0YXJ0
IiB3aXRoICJzdHIiLiAqLwotc3RhdGljIHZvaWQgdXBiX2RlZmxpc3RfcXVhbGlmeSh1cGJfZGVm
bGlzdCAqbCwgY2hhciAqc3RyLCBpbnQzMl90IHN0YXJ0KSB7Ci0gIHVpbnQzMl90IGk7Ci0gIGZv
ciAoaSA9IHN0YXJ0OyBpIDwgbC0+bGVuOyBpKyspIHsKLSAgICB1cGJfZGVmICpkZWYgPSBsLT5k
ZWZzW2ldOwotICAgIGNoYXIgKm5hbWUgPSB1cGJfam9pbihzdHIsIHVwYl9kZWZfZnVsbG5hbWUo
ZGVmKSk7Ci0gICAgdXBiX2RlZl9zZXRmdWxsbmFtZShkZWYsIG5hbWUsIE5VTEwpOwotICAgIGZy
ZWUobmFtZSk7Ci0gIH0KLX0KLQotCi0vKiB1cGJfZGVzY3JlYWRlciAgKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMg
dXBiX21zZ2RlZiAqdXBiX2Rlc2NyZWFkZXJfdG9wKHVwYl9kZXNjcmVhZGVyICpyKSB7Ci0gIGlu
dCBpbmRleDsKLSAgYXNzZXJ0KHItPnN0YWNrX2xlbiA+IDEpOwotICBpbmRleCA9IHItPnN0YWNr
W3ItPnN0YWNrX2xlbi0xXS5zdGFydCAtIDE7Ci0gIGFzc2VydChpbmRleCA+PSAwKTsKLSAgcmV0
dXJuIHVwYl9kb3duY2FzdF9tc2dkZWZfbXV0YWJsZShyLT5kZWZzLmRlZnNbaW5kZXhdKTsKLX0K
LQotc3RhdGljIHVwYl9kZWYgKnVwYl9kZXNjcmVhZGVyX2xhc3QodXBiX2Rlc2NyZWFkZXIgKnIp
IHsKLSAgcmV0dXJuIHVwYl9kZWZsaXN0X2xhc3QoJnItPmRlZnMpOwotfQotCi0vKiBTdGFydC9l
bmQgaGFuZGxlcnMgZm9yIEZpbGVEZXNjcmlwdG9yUHJvdG8gYW5kIERlc2NyaXB0b3JQcm90byAo
dGhlIHR3bwotICogZW50aXRpZXMgdGhhdCBoYXZlIG5hbWVzIGFuZCBjYW4gY29udGFpbiBzdWIt
ZGVmaW5pdGlvbnMuICovCi12b2lkIHVwYl9kZXNjcmVhZGVyX3N0YXJ0Y29udGFpbmVyKHVwYl9k
ZXNjcmVhZGVyICpyKSB7Ci0gIHVwYl9kZXNjcmVhZGVyX2ZyYW1lICpmID0gJnItPnN0YWNrW3It
PnN0YWNrX2xlbisrXTsKLSAgZi0+c3RhcnQgPSByLT5kZWZzLmxlbjsKLSAgZi0+bmFtZSA9IE5V
TEw7Ci19Ci0KLXZvaWQgdXBiX2Rlc2NyZWFkZXJfZW5kY29udGFpbmVyKHVwYl9kZXNjcmVhZGVy
ICpyKSB7Ci0gIHVwYl9kZXNjcmVhZGVyX2ZyYW1lICpmID0gJnItPnN0YWNrWy0tci0+c3RhY2tf
bGVuXTsKLSAgdXBiX2RlZmxpc3RfcXVhbGlmeSgmci0+ZGVmcywgZi0+bmFtZSwgZi0+c3RhcnQp
OwotICBmcmVlKGYtPm5hbWUpOwotICBmLT5uYW1lID0gTlVMTDsKLX0KLQotdm9pZCB1cGJfZGVz
Y3JlYWRlcl9zZXRzY29wZW5hbWUodXBiX2Rlc2NyZWFkZXIgKnIsIGNoYXIgKnN0cikgewotICB1
cGJfZGVzY3JlYWRlcl9mcmFtZSAqZiA9ICZyLT5zdGFja1tyLT5zdGFja19sZW4tMV07Ci0gIGZy
ZWUoZi0+bmFtZSk7Ci0gIGYtPm5hbWUgPSBzdHI7Ci19Ci0KLS8qIEhhbmRsZXJzIGZvciBnb29n
bGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by4gKi8KLXN0YXRpYyBib29sIGZpbGVfc3Rh
cnRtc2codm9pZCAqciwgY29uc3Qgdm9pZCAqaGQpIHsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIHVw
Yl9kZXNjcmVhZGVyX3N0YXJ0Y29udGFpbmVyKHIpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh
dGljIGJvb2wgZmlsZV9lbmRtc2codm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIHVwYl9z
dGF0dXMgKnN0YXR1cykgewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1cmU7Ci0gIFVQQl9V
TlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKHN0YXR1cyk7Ci0gIHVwYl9kZXNjcmVhZGVyX2VuZGNv
bnRhaW5lcihyKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBzaXplX3QgZmlsZV9vbnBh
Y2thZ2Uodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4sIGNvbnN0IHVwYl9idWZoYW5kbGUg
KmhhbmRsZSkgewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQo
aGQpOwotICBVUEJfVU5VU0VEKGhhbmRsZSk7Ci0gIC8qIFhYWDogc2VlIGNvbW1lbnQgYXQgdGhl
IHRvcCBvZiB0aGUgZmlsZS4gKi8KLSAgdXBiX2Rlc2NyZWFkZXJfc2V0c2NvcGVuYW1lKHIsIHVw
Yl9zdHJuZHVwKGJ1ZiwgbikpOwotICByZXR1cm4gbjsKLX0KLQotLyogSGFuZGxlcnMgZm9yIGdv
b2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uICovCi1zdGF0aWMgYm9vbCBl
bnVtdmFsX3N0YXJ0bXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkKSB7Ci0gIHVwYl9k
ZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIHItPnNhd19udW1i
ZXIgPSBmYWxzZTsKLSAgci0+c2F3X25hbWUgPSBmYWxzZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBzaXplX3QgZW51bXZhbF9vbm5hbWUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAq
aGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IG4sIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICB1cGJfZGVzY3JlYWRlciAqciA9
IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKGhhbmRsZSk7Ci0gIC8q
IFhYWDogc2VlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4gKi8KLSAgZnJlZShyLT5u
YW1lKTsKLSAgci0+bmFtZSA9IHVwYl9zdHJuZHVwKGJ1Ziwgbik7Ci0gIHItPnNhd19uYW1lID0g
dHJ1ZTsKLSAgcmV0dXJuIG47Ci19Ci0KLXN0YXRpYyBib29sIGVudW12YWxfb25udW1iZXIodm9p
ZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIGludDMyX3QgdmFsKSB7Ci0gIHVwYl9kZXNjcmVh
ZGVyICpyID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIHItPm51bWJlciA9IHZhbDsK
LSAgci0+c2F3X251bWJlciA9IHRydWU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9v
bCBlbnVtdmFsX2VuZG1zZyh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgdXBiX3N0YXR1
cyAqc3RhdHVzKSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgdXBiX2VudW1k
ZWYgKmU7Ci0gIFVQQl9VTlVTRUQoaGQpOwotCi0gIGlmKCFyLT5zYXdfbnVtYmVyIHx8ICFyLT5z
YXdfbmFtZSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHN0YXR1cywgIkVudW0gdmFsdWUg
bWlzc2luZyBuYW1lIG9yIG51bWJlci4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgZSA9
IHVwYl9kb3duY2FzdF9lbnVtZGVmX211dGFibGUodXBiX2Rlc2NyZWFkZXJfbGFzdChyKSk7Ci0g
IHVwYl9lbnVtZGVmX2FkZHZhbChlLCByLT5uYW1lLCByLT5udW1iZXIsIHN0YXR1cyk7Ci0gIGZy
ZWUoci0+bmFtZSk7Ci0gIHItPm5hbWUgPSBOVUxMOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0v
KiBIYW5kbGVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uICovCi1z
dGF0aWMgYm9vbCBlbnVtX3N0YXJ0bXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkKSB7
Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIHVw
Yl9kZWZsaXN0X3B1c2goJnItPmRlZnMsCi0gICAgICAgICAgICAgICAgICAgdXBiX2VudW1kZWZf
dXBjYXN0X211dGFibGUodXBiX2VudW1kZWZfbmV3KCZyLT5kZWZzKSkpOwotICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGJvb2wgZW51bV9lbmRtc2codm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9p
ZCAqaGQsIHVwYl9zdGF0dXMgKnN0YXR1cykgewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1
cmU7Ci0gIHVwYl9lbnVtZGVmICplOwotICBVUEJfVU5VU0VEKGhkKTsKLQotICBlID0gdXBiX2Rv
d25jYXN0X2VudW1kZWZfbXV0YWJsZSh1cGJfZGVzY3JlYWRlcl9sYXN0KHIpKTsKLSAgaWYgKHVw
Yl9kZWZfZnVsbG5hbWUodXBiX2Rlc2NyZWFkZXJfbGFzdChyKSkgPT0gTlVMTCkgewotICAgIHVw
Yl9zdGF0dXNfc2V0ZXJybXNnKHN0YXR1cywgIkVudW0gaGFkIG5vIG5hbWUuIik7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0gIGlmICh1cGJfZW51bWRlZl9udW12YWxzKGUpID09IDApIHsKLSAg
ICB1cGJfc3RhdHVzX3NldGVycm1zZyhzdGF0dXMsICJFbnVtIGhhZCBubyB2YWx1ZXMuIik7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgc2l6ZV90
IGVudW1fb25uYW1lKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkLCBjb25zdCBjaGFyICpi
dWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuLCBjb25zdCB1cGJfYnVmaGFu
ZGxlICpoYW5kbGUpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBjaGFyICpm
dWxsbmFtZSA9IHVwYl9zdHJuZHVwKGJ1Ziwgbik7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJf
VU5VU0VEKGhhbmRsZSk7Ci0gIC8qIFhYWDogc2VlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUg
ZmlsZS4gKi8KLSAgdXBiX2RlZl9zZXRmdWxsbmFtZSh1cGJfZGVzY3JlYWRlcl9sYXN0KHIpLCBm
dWxsbmFtZSwgTlVMTCk7Ci0gIGZyZWUoZnVsbG5hbWUpOwotICByZXR1cm4gbjsKLX0KLQotLyog
SGFuZGxlcnMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byAqLwotc3Rh
dGljIGJvb2wgZmllbGRfc3RhcnRtc2codm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQpIHsK
LSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgci0+
ZiA9IHVwYl9maWVsZGRlZl9uZXcoJnItPmRlZnMpOwotICBmcmVlKHItPmRlZmF1bHRfc3RyaW5n
KTsKLSAgci0+ZGVmYXVsdF9zdHJpbmcgPSBOVUxMOwotCi0gIC8qIGZpZWxkZGVmcyBkZWZhdWx0
IHRvIHBhY2tlZCwgYnV0IGRlc2NyaXB0b3JzIGRlZmF1bHQgdG8gbm9uLXBhY2tlZC4gKi8KLSAg
dXBiX2ZpZWxkZGVmX3NldHBhY2tlZChyLT5mLCBmYWxzZSk7Ci0gIHJldHVybiB0cnVlOwotfQot
Ci0vKiBDb252ZXJ0cyB0aGUgZGVmYXVsdCB2YWx1ZSBpbiBzdHJpbmcgInN0ciIgaW50byAiZCIu
ICBQYXNzZXMgYSByZWYgb24gc3RyLgotICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuICovCi1z
dGF0aWMgYm9vbCBwYXJzZV9kZWZhdWx0KGNoYXIgKnN0ciwgdXBiX2ZpZWxkZGVmICpmKSB7Ci0g
IGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gIGNoYXIgKmVuZDsKLSAgc3dpdGNoICh1cGJfZmllbGRk
ZWZfdHlwZShmKSkgewotICAgIGNhc2UgVVBCX1RZUEVfSU5UMzI6IHsKLSAgICAgIGxvbmcgdmFs
ID0gc3RydG9sKHN0ciwgJmVuZCwgMCk7Ci0gICAgICBpZiAodmFsID4gSU5UMzJfTUFYIHx8IHZh
bCA8IElOVDMyX01JTiB8fCBlcnJubyA9PSBFUkFOR0UgfHwgKmVuZCkKLSAgICAgICAgc3VjY2Vz
cyA9IGZhbHNlOwotICAgICAgZWxzZQotICAgICAgICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGlu
dDMyKGYsIHZhbCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQ2
NDogewotICAgICAgLyogWFhYOiBOZWVkIHRvIHdyaXRlIG91ciBvd24gc3RydG9sbCwgc2luY2Ug
aXQncyBub3QgYXZhaWxhYmxlIGluIGM4OS4gKi8KLSAgICAgIGxvbmcgbG9uZyB2YWwgPSBzdHJ0
b2woc3RyLCAmZW5kLCAwKTsKLSAgICAgIGlmICh2YWwgPiBJTlQ2NF9NQVggfHwgdmFsIDwgSU5U
NjRfTUlOIHx8IGVycm5vID09IEVSQU5HRSB8fCAqZW5kKQotICAgICAgICBzdWNjZXNzID0gZmFs
c2U7Ci0gICAgICBlbHNlCi0gICAgICAgIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0aW50NjQoZiwg
dmFsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVQQl9UWVBFX1VJTlQzMjogewot
ICAgICAgdW5zaWduZWQgbG9uZyB2YWwgPSBzdHJ0b3VsKHN0ciwgJmVuZCwgMCk7Ci0gICAgICBp
ZiAodmFsID4gVUlOVDMyX01BWCB8fCBlcnJubyA9PSBFUkFOR0UgfHwgKmVuZCkKLSAgICAgICAg
c3VjY2VzcyA9IGZhbHNlOwotICAgICAgZWxzZQotICAgICAgICB1cGJfZmllbGRkZWZfc2V0ZGVm
YXVsdHVpbnQzMihmLCB2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVVBCX1RZ
UEVfVUlOVDY0OiB7Ci0gICAgICAvKiBYWFg6IE5lZWQgdG8gd3JpdGUgb3VyIG93biBzdHJ0b3Vs
bCwgc2luY2UgaXQncyBub3QgYXZhaWxhYmxlIGluIGM4OS4gKi8KLSAgICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyB2YWwgPSBzdHJ0b3VsKHN0ciwgJmVuZCwgMCk7Ci0gICAgICBpZiAodmFsID4gVUlO
VDY0X01BWCB8fCBlcnJubyA9PSBFUkFOR0UgfHwgKmVuZCkKLSAgICAgICAgc3VjY2VzcyA9IGZh
bHNlOwotICAgICAgZWxzZQotICAgICAgICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdHVpbnQ2NChm
LCB2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVVBCX1RZUEVfRE9VQkxFOiB7
Ci0gICAgICBkb3VibGUgdmFsID0gc3RydG9kKHN0ciwgJmVuZCk7Ci0gICAgICBpZiAoZXJybm8g
PT0gRVJBTkdFIHx8ICplbmQpCi0gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgIGVsc2UK
LSAgICAgICAgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRkb3VibGUoZiwgdmFsKTsKLSAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFVQQl9UWVBFX0ZMT0FUOiB7Ci0gICAgICAvKiBYWFg6IE5l
ZWQgdG8gd3JpdGUgb3VyIG93biBzdHJ0b2YsIHNpbmNlIGl0J3Mgbm90IGF2YWlsYWJsZSBpbiBj
ODkuICovCi0gICAgICBmbG9hdCB2YWwgPSBzdHJ0b2Qoc3RyLCAmZW5kKTsKLSAgICAgIGlmIChl
cnJubyA9PSBFUkFOR0UgfHwgKmVuZCkKLSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAg
ZWxzZQotICAgICAgICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGZsb2F0KGYsIHZhbCk7Ci0gICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVUEJfVFlQRV9CT09MOiB7Ci0gICAgICBpZiAoc3Ry
Y21wKHN0ciwgImZhbHNlIikgPT0gMCkKLSAgICAgICAgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRi
b29sKGYsIGZhbHNlKTsKLSAgICAgIGVsc2UgaWYgKHN0cmNtcChzdHIsICJ0cnVlIikgPT0gMCkK
LSAgICAgICAgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRib29sKGYsIHRydWUpOwotICAgICAgZWxz
ZQotICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVm
YXVsdDogYWJvcnQoKTsKLSAgfQotICByZXR1cm4gc3VjY2VzczsKLX0KLQotc3RhdGljIGJvb2wg
ZmllbGRfZW5kbXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkLCB1cGJfc3RhdHVzICpz
dGF0dXMpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICB1cGJfZmllbGRkZWYg
KmYgPSByLT5mOwotICBVUEJfVU5VU0VEKGhkKTsKLQotICAvKiBUT0RPOiB2ZXJpZnkgdGhhdCBh
bGwgcmVxdWlyZWQgZmllbGRzIHdlcmUgcHJlc2VudC4gKi8KLSAgYXNzZXJ0KHVwYl9maWVsZGRl
Zl9udW1iZXIoZikgIT0gMCk7Ci0gIGFzc2VydCh1cGJfZmllbGRkZWZfbmFtZShmKSAhPSBOVUxM
KTsKLSAgYXNzZXJ0KCh1cGJfZmllbGRkZWZfc3ViZGVmbmFtZShmKSAhPSBOVUxMKSA9PSB1cGJf
ZmllbGRkZWZfaGFzc3ViZGVmKGYpKTsKLQotICBpZiAoci0+ZGVmYXVsdF9zdHJpbmcpIHsKLSAg
ICBpZiAodXBiX2ZpZWxkZGVmX2lzc3VibXNnKGYpKSB7Ci0gICAgICB1cGJfc3RhdHVzX3NldGVy
cm1zZyhzdGF0dXMsICJTdWJtZXNzYWdlcyBjYW5ub3QgaGF2ZSBkZWZhdWx0cy4iKTsKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHVwYl9maWVsZGRlZl9pc3N0cmluZyhmKSB8
fCB1cGJfZmllbGRkZWZfdHlwZShmKSA9PSBVUEJfVFlQRV9FTlVNKSB7Ci0gICAgICB1cGJfZmll
bGRkZWZfc2V0ZGVmYXVsdGNzdHIoZiwgci0+ZGVmYXVsdF9zdHJpbmcsIE5VTEwpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBpZiAoci0+ZGVmYXVsdF9zdHJpbmcgJiYgIXBhcnNlX2RlZmF1bHQoci0+
ZGVmYXVsdF9zdHJpbmcsIGYpKSB7Ci0gICAgICAgIC8qIFdlIGRvbid0IHdvcnJ5IHRvbyBtdWNo
IGFib3V0IGdpdmluZyBhIGdyZWF0IGVycm9yIG1lc3NhZ2Ugc2luY2UgdGhlCi0gICAgICAgICAq
IGNvbXBpbGVyIHNob3VsZCBoYXZlIGVuc3VyZWQgdGhpcyB3YXMgY29ycmVjdC4gKi8KLSAgICAg
ICAgdXBiX3N0YXR1c19zZXRlcnJtc2coc3RhdHVzLCAiRXJyb3IgY29udmVydGluZyBkZWZhdWx0
IHZhbHVlLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0g
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBmaWVsZF9vbmxhenkodm9pZCAqY2xvc3Vy
ZSwgY29uc3Qgdm9pZCAqaGQsIGJvb2wgdmFsKSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xv
c3VyZTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0KLSAgdXBiX2ZpZWxkZGVmX3NldGxhenkoci0+Ziwg
dmFsKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGZpZWxkX29ucGFja2VkKHZv
aWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkLCBib29sIHZhbCkgewotICB1cGJfZGVzY3JlYWRl
ciAqciA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGQpOwotCi0gIHVwYl9maWVsZGRlZl9zZXRw
YWNrZWQoci0+ZiwgdmFsKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGZpZWxk
X29udHlwZSh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgaW50MzJfdCB2YWwpIHsKLSAg
dXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhkKTsKLQotICB1cGJf
ZmllbGRkZWZfc2V0ZGVzY3JpcHRvcnR5cGUoci0+ZiwgdmFsKTsKLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBib29sIGZpZWxkX29ubGFiZWwodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAq
aGQsIGludDMyX3QgdmFsKSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgVVBC
X1VOVVNFRChoZCk7Ci0KLSAgdXBiX2ZpZWxkZGVmX3NldGxhYmVsKHItPmYsIHZhbCk7Ci0gIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBmaWVsZF9vbm51bWJlcih2b2lkICpjbG9zdXJl
LCBjb25zdCB2b2lkICpoZCwgaW50MzJfdCB2YWwpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBj
bG9zdXJlOwotICBib29sIG9rID0gdXBiX2ZpZWxkZGVmX3NldG51bWJlcihyLT5mLCB2YWwsIE5V
TEwpOwotICBVUEJfVU5VU0VEKGhkKTsKLQotICBVUEJfQVNTRVJUX1ZBUihvaywgb2spOwotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHNpemVfdCBmaWVsZF9vbm5hbWUodm9pZCAqY2xvc3Vy
ZSwgY29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBuLCBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgdXBiX2Rl
c2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBjaGFyICpuYW1lID0gdXBiX3N0cm5kdXAoYnVmLCBu
KTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlKTsKLQotICAvKiBYWFg6
IHNlZSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuICovCi0gIHVwYl9maWVsZGRlZl9z
ZXRuYW1lKHItPmYsIG5hbWUsIE5VTEwpOwotICBmcmVlKG5hbWUpOwotICByZXR1cm4gbjsKLX0K
LQotc3RhdGljIHNpemVfdCBmaWVsZF9vbnR5cGVuYW1lKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZv
aWQgKmhkLCBjb25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IG4sIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICB1cGJfZGVzY3JlYWRl
ciAqciA9IGNsb3N1cmU7Ci0gIGNoYXIgKm5hbWUgPSB1cGJfc3RybmR1cChidWYsIG4pOwotICBV
UEJfVU5VU0VEKGhkKTsKLSAgVVBCX1VOVVNFRChoYW5kbGUpOwotCi0gIC8qIFhYWDogc2VlIGNv
bW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4gKi8KLSAgdXBiX2ZpZWxkZGVmX3NldHN1YmRl
Zm5hbWUoci0+ZiwgbmFtZSwgTlVMTCk7Ci0gIGZyZWUobmFtZSk7Ci0gIHJldHVybiBuOwotfQot
Ci1zdGF0aWMgc2l6ZV90IGZpZWxkX29uZXh0ZW5kZWUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9p
ZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgbiwgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIHVwYl9kZXNjcmVhZGVy
ICpyID0gY2xvc3VyZTsKLSAgY2hhciAqbmFtZSA9IHVwYl9zdHJuZHVwKGJ1Ziwgbik7Ci0gIFVQ
Ql9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKGhhbmRsZSk7Ci0KLSAgLyogWFhYOiBzZWUgY29t
bWVudCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLiAqLwotICB1cGJfZmllbGRkZWZfc2V0Y29udGFp
bmluZ3R5cGVuYW1lKHItPmYsIG5hbWUsIE5VTEwpOwotICBmcmVlKG5hbWUpOwotICByZXR1cm4g
bjsKLX0KLQotc3RhdGljIHNpemVfdCBmaWVsZF9vbmRlZmF1bHR2YWwodm9pZCAqY2xvc3VyZSwg
Y29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBuLCBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgdXBi
X2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgVVBCX1VOVVNF
RChoYW5kbGUpOwotCi0gIC8qIEhhdmUgdG8gY29udmVydCBmcm9tIHN0cmluZyB0byB0aGUgY29y
cmVjdCB0eXBlLCBidXQgd2UgbWlnaHQgbm90IGtub3cgdGhlCi0gICAqIHR5cGUgeWV0LCBzbyB3
ZSBzYXZlIGl0IGFzIGEgc3RyaW5nIHVudGlsIHRoZSBlbmQgb2YgdGhlIGZpZWxkLgotICAgKiBY
WFg6IHNlZSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuICovCi0gIGZyZWUoci0+ZGVm
YXVsdF9zdHJpbmcpOwotICByLT5kZWZhdWx0X3N0cmluZyA9IHVwYl9zdHJuZHVwKGJ1Ziwgbik7
Ci0gIHJldHVybiBuOwotfQotCi0vKiBIYW5kbGVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLkRlc2Ny
aXB0b3JQcm90byAocmVwcmVzZW50aW5nIGEgbWVzc2FnZSkuICovCi1zdGF0aWMgYm9vbCBtc2df
c3RhcnRtc2codm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQpIHsKLSAgdXBiX2Rlc2NyZWFk
ZXIgKnIgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhkKTsKLQotICB1cGJfZGVmbGlzdF9wdXNo
KCZyLT5kZWZzLAotICAgICAgICAgICAgICAgICAgIHVwYl9tc2dkZWZfdXBjYXN0X211dGFibGUo
dXBiX21zZ2RlZl9uZXcoJnItPmRlZnMpKSk7Ci0gIHVwYl9kZXNjcmVhZGVyX3N0YXJ0Y29udGFp
bmVyKHIpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgbXNnX2VuZG1zZyh2b2lk
ICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0gIHVwYl9k
ZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgdXBiX21zZ2RlZiAqbSA9IHVwYl9kZXNjcmVhZGVy
X3RvcChyKTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0KLSAgaWYoIXVwYl9kZWZfZnVsbG5hbWUodXBi
X21zZ2RlZl91cGNhc3RfbXV0YWJsZShtKSkpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhz
dGF0dXMsICJFbmNvdW50ZXJlZCBtZXNzYWdlIHdpdGggbm8gbmFtZS4iKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLSAgdXBiX2Rlc2NyZWFkZXJfZW5kY29udGFpbmVyKHIpOwotICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIHNpemVfdCBtc2dfb25uYW1lKHZvaWQgKmNsb3N1cmUsIGNvbnN0
IHZvaWQgKmhkLCBjb25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IG4sIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICB1cGJfZGVzY3JlYWRlciAq
ciA9IGNsb3N1cmU7Ci0gIHVwYl9tc2dkZWYgKm0gPSB1cGJfZGVzY3JlYWRlcl90b3Aocik7Ci0g
IC8qIFhYWDogc2VlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4gKi8KLSAgY2hhciAq
bmFtZSA9IHVwYl9zdHJuZHVwKGJ1Ziwgbik7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5V
U0VEKGhhbmRsZSk7Ci0KLSAgdXBiX2RlZl9zZXRmdWxsbmFtZSh1cGJfbXNnZGVmX3VwY2FzdF9t
dXRhYmxlKG0pLCBuYW1lLCBOVUxMKTsKLSAgdXBiX2Rlc2NyZWFkZXJfc2V0c2NvcGVuYW1lKHIs
IG5hbWUpOyAgLyogUGFzc2VzIG93bmVyc2hpcCBvZiBuYW1lLiAqLwotICByZXR1cm4gbjsKLX0K
LQotc3RhdGljIGJvb2wgbXNnX29uZW5kZmllbGQodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAq
aGQpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICB1cGJfbXNnZGVmICptID0g
dXBiX2Rlc2NyZWFkZXJfdG9wKHIpOwotICBVUEJfVU5VU0VEKGhkKTsKLQotICB1cGJfbXNnZGVm
X2FkZGZpZWxkKG0sIHItPmYsICZyLT5kZWZzLCBOVUxMKTsKLSAgci0+ZiA9IE5VTEw7Ci0gIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBwdXNoZXh0ZW5zaW9uKHZvaWQgKmNsb3N1cmUs
IGNvbnN0IHZvaWQgKmhkKSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgVVBC
X1VOVVNFRChoZCk7Ci0KLSAgYXNzZXJ0KHVwYl9maWVsZGRlZl9jb250YWluaW5ndHlwZW5hbWUo
ci0+ZikpOwotICB1cGJfZmllbGRkZWZfc2V0aXNleHRlbnNpb24oci0+ZiwgdHJ1ZSk7Ci0gIHVw
Yl9kZWZsaXN0X3B1c2goJnItPmRlZnMsIHVwYl9maWVsZGRlZl91cGNhc3RfbXV0YWJsZShyLT5m
KSk7Ci0gIHItPmYgPSBOVUxMOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotI2RlZmluZSBEKG5hbWUp
IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmXyAjIyBuYW1lKHMpCi0KLXN0YXRpYyB2b2lkIHJlZ2hh
bmRsZXJzKGNvbnN0IHZvaWQgKmNsb3N1cmUsIHVwYl9oYW5kbGVycyAqaCkgewotICBjb25zdCB1
cGJfc3ltdGFiICpzID0gY2xvc3VyZTsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9oYW5k
bGVyc19tc2dkZWYoaCk7Ci0KLSAgaWYgKG0gPT0gRChEZXNjcmlwdG9yUHJvdG8pKSB7Ci0gICAg
dXBiX2hhbmRsZXJzX3NldHN0YXJ0bXNnKGgsICZtc2dfc3RhcnRtc2csIE5VTEwpOwotICAgIHVw
Yl9oYW5kbGVyc19zZXRlbmRtc2coaCwgJm1zZ19lbmRtc2csIE5VTEwpOwotICAgIHVwYl9oYW5k
bGVyc19zZXRzdHJpbmcoaCwgRChEZXNjcmlwdG9yUHJvdG9fbmFtZSksICZtc2dfb25uYW1lLCBO
VUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0ZW5kc3VibXNnKGgsIEQoRGVzY3JpcHRvclByb3Rv
X2ZpZWxkKSwgJm1zZ19vbmVuZGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7Ci0gICAgdXBiX2hhbmRsZXJzX3NldGVuZHN1Ym1zZyhoLCBEKERlc2NyaXB0b3JQcm90
b19leHRlbnNpb24pLCAmcHVzaGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotICB9IGVsc2UgaWYgKG0gPT0gRChGaWxlRGVzY3JpcHRvclByb3RvKSkgewot
ICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydG1zZyhoLCAmZmlsZV9zdGFydG1zZywgTlVMTCk7Ci0g
ICAgdXBiX2hhbmRsZXJzX3NldGVuZG1zZyhoLCAmZmlsZV9lbmRtc2csIE5VTEwpOwotICAgIHVw
Yl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgRChGaWxlRGVzY3JpcHRvclByb3RvX3BhY2thZ2UpLCAm
ZmlsZV9vbnBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICB1
cGJfaGFuZGxlcnNfc2V0ZW5kc3VibXNnKGgsIEQoRmlsZURlc2NyaXB0b3JQcm90b19leHRlbnNp
b24pLCAmcHVzaGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwp
OwotICB9IGVsc2UgaWYgKG0gPT0gRChFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8pKSB7Ci0gICAg
dXBiX2hhbmRsZXJzX3NldHN0YXJ0bXNnKGgsICZlbnVtdmFsX3N0YXJ0bXNnLCBOVUxMKTsKLSAg
ICB1cGJfaGFuZGxlcnNfc2V0ZW5kbXNnKGgsICZlbnVtdmFsX2VuZG1zZywgTlVMTCk7Ci0gICAg
dXBiX2hhbmRsZXJzX3NldHN0cmluZyhoLCBEKEVudW1WYWx1ZURlc2NyaXB0b3JQcm90b19uYW1l
KSwgJmVudW12YWxfb25uYW1lLCBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0aW50MzIoaCwg
RChFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9fbnVtYmVyKSwgJmVudW12YWxfb25udW1iZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICB9IGVsc2UgaWYgKG0gPT0gRChFbnVt
RGVzY3JpcHRvclByb3RvKSkgewotICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydG1zZyhoLCAmZW51
bV9zdGFydG1zZywgTlVMTCk7Ci0gICAgdXBiX2hhbmRsZXJzX3NldGVuZG1zZyhoLCAmZW51bV9l
bmRtc2csIE5VTEwpOwotICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgRChFbnVtRGVzY3Jp
cHRvclByb3RvX25hbWUpLCAmZW51bV9vbm5hbWUsIE5VTEwpOwotICB9IGVsc2UgaWYgKG0gPT0g
RChGaWVsZERlc2NyaXB0b3JQcm90bykpIHsKLSAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRtc2co
aCwgJmZpZWxkX3N0YXJ0bXNnLCBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0ZW5kbXNnKGgs
ICZmaWVsZF9lbmRtc2csIE5VTEwpOwotICAgIHVwYl9oYW5kbGVyc19zZXRpbnQzMihoLCBEKEZp
ZWxkRGVzY3JpcHRvclByb3RvX3R5cGUpLCAmZmllbGRfb250eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0aW50MzIoaCwgRChGaWVsZERl
c2NyaXB0b3JQcm90b19sYWJlbCksICZmaWVsZF9vbmxhYmVsLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0aW50MzIoaCwgRChGaWVsZERlc2Ny
aXB0b3JQcm90b19udW1iZXIpLCAmZmllbGRfb25udW1iZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOwotICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgRChGaWVsZERlc2Ny
aXB0b3JQcm90b19uYW1lKSwgJmZpZWxkX29ubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgRChGaWVsZERlc2NyaXB0
b3JQcm90b190eXBlX25hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpZWxkX29u
dHlwZW5hbWUsIE5VTEwpOwotICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgRChGaWVsZERl
c2NyaXB0b3JQcm90b19leHRlbmRlZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmZmll
bGRfb25leHRlbmRlZSwgTlVMTCk7Ci0gICAgdXBiX2hhbmRsZXJzX3NldHN0cmluZyhoLCBEKEZp
ZWxkRGVzY3JpcHRvclByb3RvX2RlZmF1bHRfdmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmZpZWxkX29uZGVmYXVsdHZhbCwgTlVMTCk7Ci0gIH0gZWxzZSBpZiAobSA9PSBEKEZp
ZWxkT3B0aW9ucykpIHsKLSAgICB1cGJfaGFuZGxlcnNfc2V0Ym9vbChoLCBEKEZpZWxkT3B0aW9u
c19sYXp5KSwgJmZpZWxkX29ubGF6eSwgTlVMTCk7Ci0gICAgdXBiX2hhbmRsZXJzX3NldGJvb2wo
aCwgRChGaWVsZE9wdGlvbnNfcGFja2VkKSwgJmZpZWxkX29ucGFja2VkLCBOVUxMKTsKLSAgfQot
fQotCi0jdW5kZWYgRAotCi12b2lkIGRlc2NyZWFkZXJfY2xlYW51cCh2b2lkICpfcikgewotICB1
cGJfZGVzY3JlYWRlciAqciA9IF9yOwotICBmcmVlKHItPm5hbWUpOwotICB1cGJfZGVmbGlzdF91
bmluaXQoJnItPmRlZnMpOwotICBmcmVlKHItPmRlZmF1bHRfc3RyaW5nKTsKLSAgd2hpbGUgKHIt
PnN0YWNrX2xlbiA+IDApIHsKLSAgICB1cGJfZGVzY3JlYWRlcl9mcmFtZSAqZiA9ICZyLT5zdGFj
a1stLXItPnN0YWNrX2xlbl07Ci0gICAgZnJlZShmLT5uYW1lKTsKLSAgfQotfQotCi0KLS8qIFB1
YmxpYyBBUEkgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLXVwYl9kZXNjcmVhZGVyICp1cGJfZGVzY3JlYWRlcl9jcmVh
dGUodXBiX2VudiAqZSwgY29uc3QgdXBiX2hhbmRsZXJzICpoKSB7Ci0gIHVwYl9kZXNjcmVhZGVy
ICpyID0gdXBiX2Vudl9tYWxsb2MoZSwgc2l6ZW9mKHVwYl9kZXNjcmVhZGVyKSk7Ci0gIGlmICgh
ciB8fCAhdXBiX2Vudl9hZGRjbGVhbnVwKGUsIGRlc2NyZWFkZXJfY2xlYW51cCwgcikpIHsKLSAg
ICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHVwYl9kZWZsaXN0X2luaXQoJnItPmRlZnMpOwotICB1
cGJfc2lua19yZXNldCh1cGJfZGVzY3JlYWRlcl9pbnB1dChyKSwgaCwgcik7Ci0gIHItPnN0YWNr
X2xlbiA9IDA7Ci0gIHItPm5hbWUgPSBOVUxMOwotICByLT5kZWZhdWx0X3N0cmluZyA9IE5VTEw7
Ci0KLSAgcmV0dXJuIHI7Ci19Ci0KLXVwYl9kZWYgKip1cGJfZGVzY3JlYWRlcl9nZXRkZWZzKHVw
Yl9kZXNjcmVhZGVyICpyLCB2b2lkICpvd25lciwgaW50ICpuKSB7Ci0gICpuID0gci0+ZGVmcy5s
ZW47Ci0gIHVwYl9kZWZsaXN0X2RvbmF0ZXJlZnMoJnItPmRlZnMsIG93bmVyKTsKLSAgcmV0dXJu
IHItPmRlZnMuZGVmczsKLX0KLQotdXBiX3NpbmsgKnVwYl9kZXNjcmVhZGVyX2lucHV0KHVwYl9k
ZXNjcmVhZGVyICpyKSB7Ci0gIHJldHVybiAmci0+c2luazsKLX0KLQotY29uc3QgdXBiX2hhbmRs
ZXJzICp1cGJfZGVzY3JlYWRlcl9uZXdoYW5kbGVycyhjb25zdCB2b2lkICpvd25lcikgewotICBj
b25zdCB1cGJfc3ltdGFiICpzID0gdXBiZGVmc19nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcigm
cyk7Ci0gIGNvbnN0IHVwYl9oYW5kbGVycyAqaCA9IHVwYl9oYW5kbGVyc19uZXdmcm96ZW4oCi0g
ICAgICB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclNldChzKSwgb3duZXIs
IHJlZ2hhbmRsZXJzLCBzKTsKLSAgdXBiX3N5bXRhYl91bnJlZihzLCAmcyk7Ci0gIHJldHVybiBo
OwotfQotLyoKLSoqIHByb3RvYnVmIGRlY29kZXIgYnl0ZWNvZGUgY29tcGlsZXIKLSoqCi0qKiBD
b2RlIHRvIGNvbXBpbGUgYSB1cGI6OkhhbmRsZXJzIGludG8gYnl0ZWNvZGUgZm9yIGRlY29kaW5n
IGEgcHJvdG9idWYKLSoqIGFjY29yZGluZyB0byB0aGF0IHNwZWNpZmljIHNjaGVtYSBhbmQgZGVz
dGluYXRpb24gaGFuZGxlcnMuCi0qKgotKiogQ29tcGlsaW5nIHRvIGJ5dGVjb2RlIGlzIGFsd2F5
cyB0aGUgZmlyc3Qgc3RlcC4gIElmIHdlIGFyZSB1c2luZyB0aGUKLSoqIGludGVycHJldGVkIGRl
Y29kZXIgd2UgbGVhdmUgaXQgYXMgYnl0ZWNvZGUgYW5kIGludGVycHJldCB0aGF0LiAgSWYgd2Ug
YXJlCi0qKiB1c2luZyBhIEpJVCBkZWNvZGVyIHdlIHVzZSBhIGNvZGUgZ2VuZXJhdG9yIHRvIHR1
cm4gdGhlIGJ5dGVjb2RlIGludG8gbmF0aXZlCi0qKiBjb2RlLCBMTFZNIElSLCBldGMuCi0qKgot
KiogQnl0ZWNvZGUgZGVmaW5pdGlvbiBpcyBpbiBkZWNvZGVyLmludC5oLgotKi8KLQotI2luY2x1
ZGUgPHN0ZGFyZy5oPgotCi0jaWZkZWYgVVBCX0RVTVBfQllURUNPREUKLSNpbmNsdWRlIDxzdGRp
by5oPgotI2VuZGlmCi0KLSNkZWZpbmUgTUFYTEFCRUwgNQotI2RlZmluZSBFTVBUWUxBQkVMIC0x
Ci0KLS8qIG1ncm91cCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGZyZWVncm91cCh1cGJf
cmVmY291bnRlZCAqcikgewotICBtZ3JvdXAgKmcgPSAobWdyb3VwKilyOwotICB1cGJfaW50dGFi
bGVfdW5pbml0KCZnLT5tZXRob2RzKTsKLSNpZmRlZiBVUEJfVVNFX0pJVF9YNjQKLSAgdXBiX3Bi
ZGVjb2Rlcl9mcmVlaml0KGcpOwotI2VuZGlmCi0gIGZyZWUoZy0+Ynl0ZWNvZGUpOwotICBmcmVl
KGcpOwotfQotCi1zdGF0aWMgdm9pZCB2aXNpdGdyb3VwKGNvbnN0IHVwYl9yZWZjb3VudGVkICpy
LCB1cGJfcmVmY291bnRlZF92aXNpdCAqdmlzaXQsCi0gICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKmNsb3N1cmUpIHsKLSAgY29uc3QgbWdyb3VwICpnID0gKGNvbnN0IG1ncm91cCopcjsKLSAg
dXBiX2ludHRhYmxlX2l0ZXIgaTsKLSAgdXBiX2ludHRhYmxlX2JlZ2luKCZpLCAmZy0+bWV0aG9k
cyk7Ci0gIGZvcig7ICF1cGJfaW50dGFibGVfZG9uZSgmaSk7IHVwYl9pbnR0YWJsZV9uZXh0KCZp
KSkgewotICAgIHVwYl9wYmRlY29kZXJtZXRob2QgKm1ldGhvZCA9IHVwYl92YWx1ZV9nZXRwdHIo
dXBiX2ludHRhYmxlX2l0ZXJfdmFsdWUoJmkpKTsKLSAgICB2aXNpdChyLCB1cGJfcGJkZWNvZGVy
bWV0aG9kX3VwY2FzdChtZXRob2QpLCBjbG9zdXJlKTsKLSAgfQotfQotCi1tZ3JvdXAgKm5ld2dy
b3VwKGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIG1ncm91cCAqZyA9IG1hbGxvYyhzaXplb2YoKmcp
KTsKLSAgc3RhdGljIGNvbnN0IHN0cnVjdCB1cGJfcmVmY291bnRlZF92dGJsIHZ0YmwgPSB7dmlz
aXRncm91cCwgZnJlZWdyb3VwfTsKLSAgdXBiX3JlZmNvdW50ZWRfaW5pdChtZ3JvdXBfdXBjYXN0
X211dGFibGUoZyksICZ2dGJsLCBvd25lcik7Ci0gIHVwYl9pbnR0YWJsZV9pbml0KCZnLT5tZXRo
b2RzLCBVUEJfQ1RZUEVfUFRSKTsKLSAgZy0+Ynl0ZWNvZGUgPSBOVUxMOwotICBnLT5ieXRlY29k
ZV9lbmQgPSBOVUxMOwotICByZXR1cm4gZzsKLX0KLQotCi0vKiB1cGJfcGJkZWNvZGVybWV0aG9k
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LwotCi1zdGF0aWMgdm9pZCBmcmVlbWV0aG9kKHVwYl9yZWZjb3VudGVkICpyKSB7Ci0gIHVwYl9w
YmRlY29kZXJtZXRob2QgKm1ldGhvZCA9ICh1cGJfcGJkZWNvZGVybWV0aG9kKilyOwotCi0gIGlm
IChtZXRob2QtPmRlc3RfaGFuZGxlcnNfKSB7Ci0gICAgdXBiX2hhbmRsZXJzX3VucmVmKG1ldGhv
ZC0+ZGVzdF9oYW5kbGVyc18sIG1ldGhvZCk7Ci0gIH0KLQotICB1cGJfaW50dGFibGVfdW5pbml0
KCZtZXRob2QtPmRpc3BhdGNoKTsKLSAgZnJlZShtZXRob2QpOwotfQotCi1zdGF0aWMgdm9pZCB2
aXNpdG1ldGhvZChjb25zdCB1cGJfcmVmY291bnRlZCAqciwgdXBiX3JlZmNvdW50ZWRfdmlzaXQg
KnZpc2l0LAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgewotICBjb25z
dCB1cGJfcGJkZWNvZGVybWV0aG9kICptID0gKGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QqKXI7
Ci0gIHZpc2l0KHIsIG0tPmdyb3VwLCBjbG9zdXJlKTsKLX0KLQotc3RhdGljIHVwYl9wYmRlY29k
ZXJtZXRob2QgKm5ld21ldGhvZChjb25zdCB1cGJfaGFuZGxlcnMgKmRlc3RfaGFuZGxlcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ncm91cCAqZ3JvdXApIHsKLSAg
c3RhdGljIGNvbnN0IHN0cnVjdCB1cGJfcmVmY291bnRlZF92dGJsIHZ0YmwgPSB7dmlzaXRtZXRo
b2QsIGZyZWVtZXRob2R9OwotICB1cGJfcGJkZWNvZGVybWV0aG9kICpyZXQgPSBtYWxsb2Moc2l6
ZW9mKCpyZXQpKTsKLSAgdXBiX3JlZmNvdW50ZWRfaW5pdCh1cGJfcGJkZWNvZGVybWV0aG9kX3Vw
Y2FzdF9tdXRhYmxlKHJldCksICZ2dGJsLCAmcmV0KTsKLSAgdXBiX2J5dGVzaGFuZGxlcl9pbml0
KCZyZXQtPmlucHV0X2hhbmRsZXJfKTsKLQotICAvKiBUaGUgbWV0aG9kIHJlZmVyZW5jZXMgdGhl
IGdyb3VwIGFuZCB2aWNlLXZlcnNhLCBpbiBhIGNpcmN1bGFyIHJlZmVyZW5jZS4gKi8KLSAgdXBi
X3JlZjIocmV0LCBncm91cCk7Ci0gIHVwYl9yZWYyKGdyb3VwLCByZXQpOwotICB1cGJfaW50dGFi
bGVfaW5zZXJ0cHRyKCZncm91cC0+bWV0aG9kcywgZGVzdF9oYW5kbGVycywgdXBiX3ZhbHVlX3B0
cihyZXQpKTsKLSAgdXBiX3BiZGVjb2Rlcm1ldGhvZF91bnJlZihyZXQsICZyZXQpOwotCi0gIHJl
dC0+Z3JvdXAgPSBtZ3JvdXBfdXBjYXN0X211dGFibGUoZ3JvdXApOwotICByZXQtPmRlc3RfaGFu
ZGxlcnNfID0gZGVzdF9oYW5kbGVyczsKLSAgcmV0LT5pc19uYXRpdmVfID0gZmFsc2U7ICAvKiBJ
ZiB3ZSBKSVQsIGl0IHdpbGwgdXBkYXRlIHRoaXMgbGF0ZXIuICovCi0gIHVwYl9pbnR0YWJsZV9p
bml0KCZyZXQtPmRpc3BhdGNoLCBVUEJfQ1RZUEVfVUlOVDY0KTsKLQotICBpZiAocmV0LT5kZXN0
X2hhbmRsZXJzXykgewotICAgIHVwYl9oYW5kbGVyc19yZWYocmV0LT5kZXN0X2hhbmRsZXJzXywg
cmV0KTsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1jb25zdCB1cGJfaGFuZGxlcnMgKnVwYl9w
YmRlY29kZXJtZXRob2RfZGVzdGhhbmRsZXJzKAotICAgIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRo
b2QgKm0pIHsKLSAgcmV0dXJuIG0tPmRlc3RfaGFuZGxlcnNfOwotfQotCi1jb25zdCB1cGJfYnl0
ZXNoYW5kbGVyICp1cGJfcGJkZWNvZGVybWV0aG9kX2lucHV0aGFuZGxlcigKLSAgICBjb25zdCB1
cGJfcGJkZWNvZGVybWV0aG9kICptKSB7Ci0gIHJldHVybiAmbS0+aW5wdXRfaGFuZGxlcl87Ci19
Ci0KLWJvb2wgdXBiX3BiZGVjb2Rlcm1ldGhvZF9pc25hdGl2ZShjb25zdCB1cGJfcGJkZWNvZGVy
bWV0aG9kICptKSB7Ci0gIHJldHVybiBtLT5pc19uYXRpdmVfOwotfQotCi1jb25zdCB1cGJfcGJk
ZWNvZGVybWV0aG9kICp1cGJfcGJkZWNvZGVybWV0aG9kX25ldygKLSAgICBjb25zdCB1cGJfcGJk
ZWNvZGVybWV0aG9kb3B0cyAqb3B0cywgY29uc3Qgdm9pZCAqb3duZXIpIHsKLSAgY29uc3QgdXBi
X3BiZGVjb2Rlcm1ldGhvZCAqcmV0OwotICB1cGJfcGJjb2RlY2FjaGUgY2FjaGU7Ci0KLSAgdXBi
X3BiY29kZWNhY2hlX2luaXQoJmNhY2hlKTsKLSAgcmV0ID0gdXBiX3BiY29kZWNhY2hlX2dldGRl
Y29kZXJtZXRob2QoJmNhY2hlLCBvcHRzKTsKLSAgdXBiX3BiZGVjb2Rlcm1ldGhvZF9yZWYocmV0
LCBvd25lcik7Ci0gIHVwYl9wYmNvZGVjYWNoZV91bmluaXQoJmNhY2hlKTsKLSAgcmV0dXJuIHJl
dDsKLX0KLQotCi0vKiBieXRlY29kZSBjb21waWxlciAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBEYXRhIHVzZWQgb25seSBh
dCBjb21waWxhdGlvbiB0aW1lLiAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBtZ3JvdXAgKmdyb3Vw
OwotCi0gIHVpbnQzMl90ICpwYzsKLSAgaW50IGZ3ZF9sYWJlbHNbTUFYTEFCRUxdOwotICBpbnQg
YmFja19sYWJlbHNbTUFYTEFCRUxdOwotCi0gIC8qIEZvciBmaWVsZHMgbWFya2VkICJsYXp5Iiwg
cGFyc2UgdGhlbSBsYXppbHkgb3IgZWFnZXJseT8gKi8KLSAgYm9vbCBsYXp5OwotfSBjb21waWxl
cjsKLQotc3RhdGljIGNvbXBpbGVyICpuZXdjb21waWxlcihtZ3JvdXAgKmdyb3VwLCBib29sIGxh
enkpIHsKLSAgY29tcGlsZXIgKnJldCA9IG1hbGxvYyhzaXplb2YoKnJldCkpOwotICBpbnQgaTsK
LQotICByZXQtPmdyb3VwID0gZ3JvdXA7Ci0gIHJldC0+bGF6eSA9IGxhenk7Ci0gIGZvciAoaSA9
IDA7IGkgPCBNQVhMQUJFTDsgaSsrKSB7Ci0gICAgcmV0LT5md2RfbGFiZWxzW2ldID0gRU1QVFlM
QUJFTDsKLSAgICByZXQtPmJhY2tfbGFiZWxzW2ldID0gRU1QVFlMQUJFTDsKLSAgfQotICByZXR1
cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBmcmVlY29tcGlsZXIoY29tcGlsZXIgKmMpIHsKLSAg
ZnJlZShjKTsKLX0KLQotY29uc3Qgc2l6ZV90IHB0cl93b3JkcyA9IHNpemVvZih2b2lkKikgLyBz
aXplb2YodWludDMyX3QpOwotCi0vKiBIb3cgbWFueSB3b3JkcyBhbiBpbnN0cnVjdGlvbiBpcy4g
Ki8KLXN0YXRpYyBpbnQgaW5zdHJ1Y3Rpb25fbGVuKHVpbnQzMl90IGluc3RyKSB7Ci0gIHN3aXRj
aCAoZ2V0b3AoaW5zdHIpKSB7Ci0gICAgY2FzZSBPUF9TRVRESVNQQVRDSDogcmV0dXJuIDEgKyBw
dHJfd29yZHM7Ci0gICAgY2FzZSBPUF9UQUdOOiByZXR1cm4gMzsKLSAgICBjYXNlIE9QX1NFVEJJ
R0dST1VQTlVNOiByZXR1cm4gMjsKLSAgICBkZWZhdWx0OiByZXR1cm4gMTsKLSAgfQotfQotCi1i
b29sIG9wX2hhc19sb25nb2ZzKGludDMyX3QgaW5zdHJ1Y3Rpb24pIHsKLSAgc3dpdGNoIChnZXRv
cChpbnN0cnVjdGlvbikpIHsKLSAgICBjYXNlIE9QX0NBTEw6Ci0gICAgY2FzZSBPUF9CUkFOQ0g6
Ci0gICAgY2FzZSBPUF9DSEVDS0RFTElNOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLyogVGhl
ICJ0YWciIGluc3RydWN0aW9ucyBvbmx5IGhhdmUgOCBieXRlcyBhdmFpbGFibGUgZm9yIHRoZSBq
dW1wIHRhcmdldCwKLSAgICAgKiBidXQgdGhhdCBpcyBvayBiZWNhdXNlIHRoZXNlIG9wY29kZXMg
b25seSByZXF1aXJlIHNob3J0IGp1bXBzLiAqLwotICAgIGNhc2UgT1BfVEFHMToKLSAgICBjYXNl
IE9QX1RBRzI6Ci0gICAgY2FzZSBPUF9UQUdOOgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19
Ci0KLXN0YXRpYyBpbnQzMl90IGdldG9mcyh1aW50MzJfdCBpbnN0cnVjdGlvbikgewotICBpZiAo
b3BfaGFzX2xvbmdvZnMoaW5zdHJ1Y3Rpb24pKSB7Ci0gICAgcmV0dXJuIChpbnQzMl90KWluc3Ry
dWN0aW9uID4+IDg7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIChpbnQ4X3QpKGluc3RydWN0aW9u
ID4+IDgpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldG9mcyh1aW50MzJfdCAqaW5zdHJ1Y3Rp
b24sIGludDMyX3Qgb2ZzKSB7Ci0gIGlmIChvcF9oYXNfbG9uZ29mcygqaW5zdHJ1Y3Rpb24pKSB7
Ci0gICAgKmluc3RydWN0aW9uID0gZ2V0b3AoKmluc3RydWN0aW9uKSB8IG9mcyA8PCA4OwotICB9
IGVsc2UgewotICAgICppbnN0cnVjdGlvbiA9ICgqaW5zdHJ1Y3Rpb24gJiB+MHhmZjAwKSB8ICgo
b2ZzICYgMHhmZikgPDwgOCk7Ci0gIH0KLSAgYXNzZXJ0KGdldG9mcygqaW5zdHJ1Y3Rpb24pID09
IG9mcyk7ICAvKiBXb3VsZCBmYWlsIGluIGNhc2VzIG9mIG92ZXJmbG93LiAqLwotfQotCi1zdGF0
aWMgdWludDMyX3QgcGNvZnMoY29tcGlsZXIgKmMpIHsgcmV0dXJuIGMtPnBjIC0gYy0+Z3JvdXAt
PmJ5dGVjb2RlOyB9Ci0KLS8qIERlZmluZXMgYSBsb2NhbCBsYWJlbCBhdCB0aGUgY3VycmVudCBQ
QyBsb2NhdGlvbi4gIEFsbCBwcmV2aW91cyBmb3J3YXJkCi0gKiByZWZlcmVuY2VzIGFyZSB1cGRh
dGVkIHRvIHBvaW50IHRvIHRoaXMgbG9jYXRpb24uICBUaGUgbG9jYXRpb24gaXMgbm90ZWQKLSAq
IGZvciBhbnkgZnV0dXJlIGJhY2t3YXJkIHJlZmVyZW5jZXMuICovCi1zdGF0aWMgdm9pZCBsYWJl
bChjb21waWxlciAqYywgdW5zaWduZWQgaW50IGxhYmVsKSB7Ci0gIGludCB2YWw7Ci0gIHVpbnQz
Ml90ICpjb2RlcDsKLQotICBhc3NlcnQobGFiZWwgPCBNQVhMQUJFTCk7Ci0gIHZhbCA9IGMtPmZ3
ZF9sYWJlbHNbbGFiZWxdOwotICBjb2RlcCA9ICh2YWwgPT0gRU1QVFlMQUJFTCkgPyBOVUxMIDog
Yy0+Z3JvdXAtPmJ5dGVjb2RlICsgdmFsOwotICB3aGlsZSAoY29kZXApIHsKLSAgICBpbnQgb2Zz
ID0gZ2V0b2ZzKCpjb2RlcCk7Ci0gICAgc2V0b2ZzKGNvZGVwLCBjLT5wYyAtIGNvZGVwIC0gaW5z
dHJ1Y3Rpb25fbGVuKCpjb2RlcCkpOwotICAgIGNvZGVwID0gb2ZzID8gY29kZXAgKyBvZnMgOiBO
VUxMOwotICB9Ci0gIGMtPmZ3ZF9sYWJlbHNbbGFiZWxdID0gRU1QVFlMQUJFTDsKLSAgYy0+YmFj
a19sYWJlbHNbbGFiZWxdID0gcGNvZnMoYyk7Ci19Ci0KLS8qIENyZWF0ZXMgYSByZWZlcmVuY2Ug
dG8gYSBudW1iZXJlZCBsYWJlbDsgZWl0aGVyIGEgZm9yd2FyZCByZWZlcmVuY2UKLSAqIChwb3Np
dGl2ZSBhcmcpIG9yIGJhY2t3YXJkIHJlZmVyZW5jZSAobmVnYXRpdmUgYXJnKS4gIEZvciBmb3J3
YXJkIHJlZmVyZW5jZXMKLSAqIHRoZSB2YWx1ZSByZXR1cm5lZCBub3cgaXMgYWN0dWFsbHkgYSAi
bmV4dCIgcG9pbnRlciBpbnRvIGEgbGlua2VkIGxpc3Qgb2YgYWxsCi0gKiBpbnN0cnVjdGlvbnMg
dGhhdCB1c2UgdGhpcyBsYWJlbCBhbmQgd2lsbCBiZSBwYXRjaGVkIGxhdGVyIHdoZW4gdGhlIGxh
YmVsIGlzCi0gKiBkZWZpbmVkIHdpdGggbGFiZWwoKS4KLSAqCi0gKiBUaGUgcmV0dXJuZWQgdmFs
dWUgaXMgdGhlIG9mZnNldCB0aGF0IHNob3VsZCBiZSB3cml0dGVuIGludG8gdGhlIGluc3RydWN0
aW9uLgotICovCi1zdGF0aWMgaW50MzJfdCBsYWJlbHJlZihjb21waWxlciAqYywgaW50IGxhYmVs
KSB7Ci0gIGFzc2VydChsYWJlbCA8IE1BWExBQkVMKTsKLSAgaWYgKGxhYmVsID09IExBQkVMX0RJ
U1BBVENIKSB7Ci0gICAgLyogTm8gcmVzb2x2aW5nIHJlcXVpcmVkLiAqLwotICAgIHJldHVybiAw
OwotICB9IGVsc2UgaWYgKGxhYmVsIDwgMCkgewotICAgIC8qIEJhY2t3YXJkIGxvY2FsIGxhYmVs
LiAgUmVsYXRpdmUgdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24uICovCi0gICAgdWludDMyX3QgZnJv
bSA9IChjLT5wYyArIDEpIC0gYy0+Z3JvdXAtPmJ5dGVjb2RlOwotICAgIHJldHVybiBjLT5iYWNr
X2xhYmVsc1stbGFiZWxdIC0gZnJvbTsKLSAgfSBlbHNlIHsKLSAgICAvKiBGb3J3YXJkIGxvY2Fs
IGxhYmVsOiBwcmVwZW5kIHRvIChwb3NzaWJseS1lbXB0eSkgbGlua2VkIGxpc3QuICovCi0gICAg
aW50ICpscHRyID0gJmMtPmZ3ZF9sYWJlbHNbbGFiZWxdOwotICAgIGludDMyX3QgcmV0ID0gKCps
cHRyID09IEVNUFRZTEFCRUwpID8gMCA6ICpscHRyIC0gcGNvZnMoYyk7Ci0gICAgKmxwdHIgPSBw
Y29mcyhjKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dDMyKGNv
bXBpbGVyICpjLCB1aW50MzJfdCB2KSB7Ci0gIG1ncm91cCAqZyA9IGMtPmdyb3VwOwotICBpZiAo
Yy0+cGMgPT0gZy0+Ynl0ZWNvZGVfZW5kKSB7Ci0gICAgaW50IG9mcyA9IHBjb2ZzKGMpOwotICAg
IHNpemVfdCBvbGRzaXplID0gZy0+Ynl0ZWNvZGVfZW5kIC0gZy0+Ynl0ZWNvZGU7Ci0gICAgc2l6
ZV90IG5ld3NpemUgPSBVUEJfTUFYKG9sZHNpemUgKiAyLCA2NCk7Ci0gICAgLyogVE9ETyhoYWJl
cm1hbik6IGhhbmRsZSBPT00uICovCi0gICAgZy0+Ynl0ZWNvZGUgPSByZWFsbG9jKGctPmJ5dGVj
b2RlLCBuZXdzaXplICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0gICAgZy0+Ynl0ZWNvZGVfZW5kID0g
Zy0+Ynl0ZWNvZGUgKyBuZXdzaXplOwotICAgIGMtPnBjID0gZy0+Ynl0ZWNvZGUgKyBvZnM7Ci0g
IH0KLSAgKmMtPnBjKysgPSB2OwotfQotCi1zdGF0aWMgdm9pZCBwdXRvcChjb21waWxlciAqYywg
b3Bjb2RlIG9wLCAuLi4pIHsKLSAgdmFfbGlzdCBhcDsKLSAgdmFfc3RhcnQoYXAsIG9wKTsKLQot
ICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBPUF9TRVRESVNQQVRDSDogewotICAgICAgdWludHB0
cl90IHB0ciA9ICh1aW50cHRyX3QpdmFfYXJnKGFwLCB2b2lkKik7Ci0gICAgICBwdXQzMihjLCBP
UF9TRVRESVNQQVRDSCk7Ci0gICAgICBwdXQzMihjLCBwdHIpOwotICAgICAgaWYgKHNpemVvZih1
aW50cHRyX3QpID4gc2l6ZW9mKHVpbnQzMl90KSkKLSAgICAgICAgcHV0MzIoYywgKHVpbnQ2NF90
KXB0ciA+PiAzMik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBPUF9TVEFSVE1TRzoK
LSAgICBjYXNlIE9QX0VORE1TRzoKLSAgICBjYXNlIE9QX1BVU0hMRU5ERUxJTToKLSAgICBjYXNl
IE9QX1BPUDoKLSAgICBjYXNlIE9QX1NFVERFTElNOgotICAgIGNhc2UgT1BfSEFMVDoKLSAgICBj
YXNlIE9QX1JFVDoKLSAgICBjYXNlIE9QX0RJU1BBVENIOgotICAgICAgcHV0MzIoYywgb3ApOwot
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPUF9QQVJTRV9ET1VCTEU6Ci0gICAgY2FzZSBPUF9QQVJT
RV9GTE9BVDoKLSAgICBjYXNlIE9QX1BBUlNFX0lOVDY0OgotICAgIGNhc2UgT1BfUEFSU0VfVUlO
VDY0OgotICAgIGNhc2UgT1BfUEFSU0VfSU5UMzI6Ci0gICAgY2FzZSBPUF9QQVJTRV9GSVhFRDY0
OgotICAgIGNhc2UgT1BfUEFSU0VfRklYRUQzMjoKLSAgICBjYXNlIE9QX1BBUlNFX0JPT0w6Ci0g
ICAgY2FzZSBPUF9QQVJTRV9VSU5UMzI6Ci0gICAgY2FzZSBPUF9QQVJTRV9TRklYRUQzMjoKLSAg
ICBjYXNlIE9QX1BBUlNFX1NGSVhFRDY0OgotICAgIGNhc2UgT1BfUEFSU0VfU0lOVDMyOgotICAg
IGNhc2UgT1BfUEFSU0VfU0lOVDY0OgotICAgIGNhc2UgT1BfU1RBUlRTRVE6Ci0gICAgY2FzZSBP
UF9FTkRTRVE6Ci0gICAgY2FzZSBPUF9TVEFSVFNVQk1TRzoKLSAgICBjYXNlIE9QX0VORFNVQk1T
RzoKLSAgICBjYXNlIE9QX1NUQVJUU1RSOgotICAgIGNhc2UgT1BfU1RSSU5HOgotICAgIGNhc2Ug
T1BfRU5EU1RSOgotICAgIGNhc2UgT1BfUFVTSFRBR0RFTElNOgotICAgICAgcHV0MzIoYywgb3Ag
fCB2YV9hcmcoYXAsIHVwYl9zZWxlY3Rvcl90KSA8PCA4KTsKLSAgICAgIGJyZWFrOwotICAgIGNh
c2UgT1BfU0VUQklHR1JPVVBOVU06Ci0gICAgICBwdXQzMihjLCBvcCk7Ci0gICAgICBwdXQzMihj
LCB2YV9hcmcoYXAsIGludCkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPUF9DQUxMOiB7Ci0g
ICAgICBjb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICptZXRob2QgPSB2YV9hcmcoYXAsIHVwYl9w
YmRlY29kZXJtZXRob2QgKik7Ci0gICAgICBwdXQzMihjLCBvcCB8IChtZXRob2QtPmNvZGVfYmFz
ZS5vZnMgLSAocGNvZnMoYykgKyAxKSkgPDwgOCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBPUF9DSEVDS0RFTElNOgotICAgIGNhc2UgT1BfQlJBTkNIOiB7Ci0gICAgICB1aW50MzJf
dCBpbnN0cnVjdGlvbiA9IG9wOwotICAgICAgaW50IGxhYmVsID0gdmFfYXJnKGFwLCBpbnQpOwot
ICAgICAgc2V0b2ZzKCZpbnN0cnVjdGlvbiwgbGFiZWxyZWYoYywgbGFiZWwpKTsKLSAgICAgIHB1
dDMyKGMsIGluc3RydWN0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE9QX1RB
RzE6Ci0gICAgY2FzZSBPUF9UQUcyOiB7Ci0gICAgICBpbnQgbGFiZWwgPSB2YV9hcmcoYXAsIGlu
dCk7Ci0gICAgICB1aW50NjRfdCB0YWcgPSB2YV9hcmcoYXAsIHVpbnQ2NF90KTsKLSAgICAgIHVp
bnQzMl90IGluc3RydWN0aW9uID0gb3AgfCAodGFnIDw8IDE2KTsKLSAgICAgIGFzc2VydCh0YWcg
PD0gMHhmZmZmKTsKLSAgICAgIHNldG9mcygmaW5zdHJ1Y3Rpb24sIGxhYmVscmVmKGMsIGxhYmVs
KSk7Ci0gICAgICBwdXQzMihjLCBpbnN0cnVjdGlvbik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBPUF9UQUdOOiB7Ci0gICAgICBpbnQgbGFiZWwgPSB2YV9hcmcoYXAsIGludCk7Ci0g
ICAgICB1aW50NjRfdCB0YWcgPSB2YV9hcmcoYXAsIHVpbnQ2NF90KTsKLSAgICAgIHVpbnQzMl90
IGluc3RydWN0aW9uID0gb3AgfCAodXBiX3ZhbHVlX3NpemUodGFnKSA8PCAxNik7Ci0gICAgICBz
ZXRvZnMoJmluc3RydWN0aW9uLCBsYWJlbHJlZihjLCBsYWJlbCkpOwotICAgICAgcHV0MzIoYywg
aW5zdHJ1Y3Rpb24pOwotICAgICAgcHV0MzIoYywgdGFnKTsKLSAgICAgIHB1dDMyKGMsIHRhZyA+
PiAzMik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICB2YV9lbmQoYXApOwotfQotCi0j
aWYgZGVmaW5lZChVUEJfVVNFX0pJVF9YNjQpIHx8IGRlZmluZWQoVVBCX0RVTVBfQllURUNPREUp
Ci0KLWNvbnN0IGNoYXIgKnVwYl9wYmRlY29kZXJfZ2V0b3BuYW1lKHVuc2lnbmVkIGludCBvcCkg
ewotI2RlZmluZSBRVU9URSh4KSAjeAotI2RlZmluZSBFWFBBTkRfQU5EX1FVT1RFKHgpIFFVT1RF
KHgpCi0jZGVmaW5lIE9QTkFNRSh4KSBPUF8jI3gKLSNkZWZpbmUgT1AoeCkgY2FzZSBPUE5BTUUo
eCk6IHJldHVybiBFWFBBTkRfQU5EX1FVT1RFKE9QTkFNRSh4KSk7Ci0jZGVmaW5lIFQoeCkgT1Ao
UEFSU0VfIyN4KQotICAvKiBLZWVwIGluIHN5bmMgd2l0aCBsaXN0IGluIGRlY29kZXIuaW50Lmgu
ICovCi0gIHN3aXRjaCAoKG9wY29kZSlvcCkgewotICAgIFQoRE9VQkxFKSBUKEZMT0FUKSBUKElO
VDY0KSBUKFVJTlQ2NCkgVChJTlQzMikgVChGSVhFRDY0KSBUKEZJWEVEMzIpCi0gICAgVChCT09M
KSBUKFVJTlQzMikgVChTRklYRUQzMikgVChTRklYRUQ2NCkgVChTSU5UMzIpIFQoU0lOVDY0KQot
ICAgIE9QKFNUQVJUTVNHKSBPUChFTkRNU0cpIE9QKFNUQVJUU0VRKSBPUChFTkRTRVEpIE9QKFNU
QVJUU1VCTVNHKQotICAgIE9QKEVORFNVQk1TRykgT1AoU1RBUlRTVFIpIE9QKFNUUklORykgT1Ao
RU5EU1RSKSBPUChDQUxMKSBPUChSRVQpCi0gICAgT1AoUFVTSExFTkRFTElNKSBPUChQVVNIVEFH
REVMSU0pIE9QKFNFVERFTElNKSBPUChDSEVDS0RFTElNKQotICAgIE9QKEJSQU5DSCkgT1AoVEFH
MSkgT1AoVEFHMikgT1AoVEFHTikgT1AoU0VURElTUEFUQ0gpIE9QKFBPUCkKLSAgICBPUChTRVRC
SUdHUk9VUE5VTSkgT1AoRElTUEFUQ0gpIE9QKEhBTFQpCi0gIH0KLSAgcmV0dXJuICI8dW5rbm93
biBvcD4iOwotI3VuZGVmIE9QCi0jdW5kZWYgVAotfQotCi0jZW5kaWYKLQotI2lmZGVmIFVQQl9E
VU1QX0JZVEVDT0RFCi0KLXN0YXRpYyB2b2lkIGR1bXBiYyh1aW50MzJfdCAqcCwgdWludDMyX3Qg
KmVuZCwgRklMRSAqZikgewotCi0gIHVpbnQzMl90ICpiZWdpbiA9IHA7Ci0KLSAgd2hpbGUgKHAg
PCBlbmQpIHsKLSAgICBmcHJpbnRmKGYsICIlcCAgJTh0eCIsIHAsIHAgLSBiZWdpbik7Ci0gICAg
dWludDMyX3QgaW5zdHIgPSAqcCsrOwotICAgIHVpbnQ4X3Qgb3AgPSBnZXRvcChpbnN0cik7Ci0g
ICAgZnByaW50ZihmLCAiICVzIiwgdXBiX3BiZGVjb2Rlcl9nZXRvcG5hbWUob3ApKTsKLSAgICBz
d2l0Y2ggKChvcGNvZGUpb3ApIHsKLSAgICAgIGNhc2UgT1BfU0VURElTUEFUQ0g6IHsKLSAgICAg
ICAgY29uc3QgdXBiX2ludHRhYmxlICpkaXNwYXRjaDsKLSAgICAgICAgbWVtY3B5KCZkaXNwYXRj
aCwgcCwgc2l6ZW9mKHZvaWQqKSk7Ci0gICAgICAgIHAgKz0gcHRyX3dvcmRzOwotICAgICAgICBj
b25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICptZXRob2QgPQotICAgICAgICAgICAgKHZvaWQgKiko
KGNoYXIgKilkaXNwYXRjaCAtCi0gICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZih1cGJfcGJk
ZWNvZGVybWV0aG9kLCBkaXNwYXRjaCkpOwotICAgICAgICBmcHJpbnRmKGYsICIgJXMiLCB1cGJf
bXNnZGVmX2Z1bGxuYW1lKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRs
ZXJzX21zZ2RlZihtZXRob2QtPmRlc3RfaGFuZGxlcnNfKSkpOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLSAgICAgIGNhc2UgT1BfRElTUEFUQ0g6Ci0gICAgICBjYXNlIE9QX1NUQVJUTVNHOgot
ICAgICAgY2FzZSBPUF9FTkRNU0c6Ci0gICAgICBjYXNlIE9QX1BVU0hMRU5ERUxJTToKLSAgICAg
IGNhc2UgT1BfUE9QOgotICAgICAgY2FzZSBPUF9TRVRERUxJTToKLSAgICAgIGNhc2UgT1BfSEFM
VDoKLSAgICAgIGNhc2UgT1BfUkVUOgotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgT1BfUEFS
U0VfRE9VQkxFOgotICAgICAgY2FzZSBPUF9QQVJTRV9GTE9BVDoKLSAgICAgIGNhc2UgT1BfUEFS
U0VfSU5UNjQ6Ci0gICAgICBjYXNlIE9QX1BBUlNFX1VJTlQ2NDoKLSAgICAgIGNhc2UgT1BfUEFS
U0VfSU5UMzI6Ci0gICAgICBjYXNlIE9QX1BBUlNFX0ZJWEVENjQ6Ci0gICAgICBjYXNlIE9QX1BB
UlNFX0ZJWEVEMzI6Ci0gICAgICBjYXNlIE9QX1BBUlNFX0JPT0w6Ci0gICAgICBjYXNlIE9QX1BB
UlNFX1VJTlQzMjoKLSAgICAgIGNhc2UgT1BfUEFSU0VfU0ZJWEVEMzI6Ci0gICAgICBjYXNlIE9Q
X1BBUlNFX1NGSVhFRDY0OgotICAgICAgY2FzZSBPUF9QQVJTRV9TSU5UMzI6Ci0gICAgICBjYXNl
IE9QX1BBUlNFX1NJTlQ2NDoKLSAgICAgIGNhc2UgT1BfU1RBUlRTRVE6Ci0gICAgICBjYXNlIE9Q
X0VORFNFUToKLSAgICAgIGNhc2UgT1BfU1RBUlRTVUJNU0c6Ci0gICAgICBjYXNlIE9QX0VORFNV
Qk1TRzoKLSAgICAgIGNhc2UgT1BfU1RBUlRTVFI6Ci0gICAgICBjYXNlIE9QX1NUUklORzoKLSAg
ICAgIGNhc2UgT1BfRU5EU1RSOgotICAgICAgY2FzZSBPUF9QVVNIVEFHREVMSU06Ci0gICAgICAg
IGZwcmludGYoZiwgIiAlZCIsIGluc3RyID4+IDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgT1BfU0VUQklHR1JPVVBOVU06Ci0gICAgICAgIGZwcmludGYoZiwgIiAlZCIsICpwKyspOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgT1BfQ0hFQ0tERUxJTToKLSAgICAgIGNhc2UgT1Bf
Q0FMTDoKLSAgICAgIGNhc2UgT1BfQlJBTkNIOgotICAgICAgICBmcHJpbnRmKGYsICIgPT4weCV0
eCIsIHAgKyBnZXRvZnMoaW5zdHIpIC0gYmVnaW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgT1BfVEFHMToKLSAgICAgIGNhc2UgT1BfVEFHMjogewotICAgICAgICBmcHJpbnRmKGYsICIg
dGFnOjB4JXgiLCBpbnN0ciA+PiAxNik7Ci0gICAgICAgIGlmIChnZXRvZnMoaW5zdHIpKSB7Ci0g
ICAgICAgICAgZnByaW50ZihmLCAiID0+MHgldHgiLCBwICsgZ2V0b2ZzKGluc3RyKSAtIGJlZ2lu
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgT1BfVEFH
TjogewotICAgICAgICB1aW50NjRfdCB0YWcgPSAqcCsrOwotICAgICAgICB0YWcgfD0gKHVpbnQ2
NF90KSpwKysgPDwgMzI7Ci0gICAgICAgIGZwcmludGYoZiwgIiB0YWc6MHglbGx4IiwgKGxvbmcg
bG9uZyl0YWcpOwotICAgICAgICBmcHJpbnRmKGYsICIgbjolZCIsIGluc3RyID4+IDE2KTsKLSAg
ICAgICAgaWYgKGdldG9mcyhpbnN0cikpIHsKLSAgICAgICAgICBmcHJpbnRmKGYsICIgPT4weCV0
eCIsIHAgKyBnZXRvZnMoaW5zdHIpIC0gYmVnaW4pOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgfQotICAgIH0KLSAgICBmcHV0cygiXG4iLCBmKTsKLSAgfQotfQotCi0jZW5kaWYK
LQotc3RhdGljIHVpbnQ2NF90IGdldF9lbmNvZGVkX3RhZyhjb25zdCB1cGJfZmllbGRkZWYgKmYs
IGludCB3aXJlX3R5cGUpIHsKLSAgdWludDMyX3QgdGFnID0gKHVwYl9maWVsZGRlZl9udW1iZXIo
ZikgPDwgMykgfCB3aXJlX3R5cGU7Ci0gIHVpbnQ2NF90IGVuY29kZWRfdGFnID0gdXBiX3ZlbmNv
ZGUzMih0YWcpOwotICAvKiBObyB0YWcgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiA1IGJ5dGVzLiAq
LwotICBhc3NlcnQoZW5jb2RlZF90YWcgPD0gMHhmZmZmZmZmZmZmKTsKLSAgcmV0dXJuIGVuY29k
ZWRfdGFnOwotfQotCi1zdGF0aWMgdm9pZCBwdXRjaGVja3RhZyhjb21waWxlciAqYywgY29uc3Qg
dXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpcmVfdHlwZSwg
aW50IGRlc3QpIHsKLSAgdWludDY0X3QgdGFnID0gZ2V0X2VuY29kZWRfdGFnKGYsIHdpcmVfdHlw
ZSk7Ci0gIHN3aXRjaCAodXBiX3ZhbHVlX3NpemUodGFnKSkgewotICAgIGNhc2UgMToKLSAgICAg
IHB1dG9wKGMsIE9QX1RBRzEsIGRlc3QsIHRhZyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI6
Ci0gICAgICBwdXRvcChjLCBPUF9UQUcyLCBkZXN0LCB0YWcpOwotICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgIHB1dG9wKGMsIE9QX1RBR04sIGRlc3QsIHRhZyk7Ci0gICAgICBicmVh
azsKLSAgfQotfQotCi1zdGF0aWMgdXBiX3NlbGVjdG9yX3QgZ2V0c2VsKGNvbnN0IHVwYl9maWVs
ZGRlZiAqZiwgdXBiX2hhbmRsZXJ0eXBlX3QgdHlwZSkgewotICB1cGJfc2VsZWN0b3JfdCBzZWxl
Y3RvcjsKLSAgYm9vbCBvayA9IHVwYl9oYW5kbGVyc19nZXRzZWxlY3RvcihmLCB0eXBlLCAmc2Vs
ZWN0b3IpOwotICBVUEJfQVNTRVJUX1ZBUihvaywgb2spOwotICByZXR1cm4gc2VsZWN0b3I7Ci19
Ci0KLS8qIFRha2VzIGFuIGV4aXN0aW5nLCBwcmltYXJ5IGRpc3BhdGNoIHRhYmxlIGVudHJ5IGFu
ZCByZXBhY2tzIGl0IHdpdGggYQotICogZGlmZmVyZW50IGFsdGVybmF0ZSB3aXJlIHR5cGUuICBD
YWxsZWQgd2hlbiB3ZSBhcmUgaW5zZXJ0aW5nIGEgc2Vjb25kYXJ5Ci0gKiBkaXNwYXRjaCB0YWJs
ZSBlbnRyeSBmb3IgYW4gYWx0ZXJuYXRlIHdpcmUgdHlwZS4gKi8KLXN0YXRpYyB1aW50NjRfdCBy
ZXBhY2sodWludDY0X3QgZGlzcGF0Y2gsIGludCBuZXdfd3QyKSB7Ci0gIHVpbnQ2NF90IG9mczsK
LSAgdWludDhfdCB3dDE7Ci0gIHVpbnQ4X3Qgb2xkX3d0MjsKLSAgdXBiX3BiZGVjb2Rlcl91bnBh
Y2tkaXNwYXRjaChkaXNwYXRjaCwgJm9mcywgJnd0MSwgJm9sZF93dDIpOwotICBhc3NlcnQob2xk
X3d0MiA9PSBOT19XSVJFX1RZUEUpOyAgLyogd3QyIHNob3VsZCBub3QgYmUgc2V0IHlldC4gKi8K
LSAgcmV0dXJuIHVwYl9wYmRlY29kZXJfcGFja2Rpc3BhdGNoKG9mcywgd3QxLCBuZXdfd3QyKTsK
LX0KLQotLyogTWFya3MgdGhlIGN1cnJlbnQgYnl0ZWNvZGUgcG9zaXRpb24gYXMgdGhlIGRpc3Bh
dGNoIHRhcmdldCBmb3IgdGhpcyBtZXNzYWdlLAotICogZmllbGQsIGFuZCB3aXJlIHR5cGUuICov
Ci1zdGF0aWMgdm9pZCBkaXNwYXRjaHRhcmdldChjb21waWxlciAqYywgdXBiX3BiZGVjb2Rlcm1l
dGhvZCAqbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX2ZpZWxk
ZGVmICpmLCBpbnQgd2lyZV90eXBlKSB7Ci0gIC8qIE9mZnNldCBpcyByZWxhdGl2ZSB0byBtc2cg
YmFzZS4gKi8KLSAgdWludDY0X3Qgb2ZzID0gcGNvZnMoYykgLSBtZXRob2QtPmNvZGVfYmFzZS5v
ZnM7Ci0gIHVpbnQzMl90IGZuID0gdXBiX2ZpZWxkZGVmX251bWJlcihmKTsKLSAgdXBiX2ludHRh
YmxlICpkID0gJm1ldGhvZC0+ZGlzcGF0Y2g7Ci0gIHVwYl92YWx1ZSB2OwotICBpZiAodXBiX2lu
dHRhYmxlX3JlbW92ZShkLCBmbiwgJnYpKSB7Ci0gICAgLyogVE9ETzogcHJpb3JpdGl6ZSBiYXNl
ZCBvbiBwYWNrZWQgc2V0dGluZyBpbiAucHJvdG8gZmlsZS4gKi8KLSAgICB1aW50NjRfdCByZXBh
Y2tlZCA9IHJlcGFjayh1cGJfdmFsdWVfZ2V0dWludDY0KHYpLCB3aXJlX3R5cGUpOwotICAgIHVw
Yl9pbnR0YWJsZV9pbnNlcnQoZCwgZm4sIHVwYl92YWx1ZV91aW50NjQocmVwYWNrZWQpKTsKLSAg
ICB1cGJfaW50dGFibGVfaW5zZXJ0KGQsIGZuICsgVVBCX01BWF9GSUVMRE5VTUJFUiwgdXBiX3Zh
bHVlX3VpbnQ2NChvZnMpKTsKLSAgfSBlbHNlIHsKLSAgICB1aW50NjRfdCB2YWwgPSB1cGJfcGJk
ZWNvZGVyX3BhY2tkaXNwYXRjaChvZnMsIHdpcmVfdHlwZSwgTk9fV0lSRV9UWVBFKTsKLSAgICB1
cGJfaW50dGFibGVfaW5zZXJ0KGQsIGZuLCB1cGJfdmFsdWVfdWludDY0KHZhbCkpOwotICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIHB1dHB1c2goY29tcGlsZXIgKmMsIGNvbnN0IHVwYl9maWVsZGRlZiAq
ZikgewotICBpZiAodXBiX2ZpZWxkZGVmX2Rlc2NyaXB0b3J0eXBlKGYpID09IFVQQl9ERVNDUklQ
VE9SX1RZUEVfTUVTU0FHRSkgewotICAgIHB1dG9wKGMsIE9QX1BVU0hMRU5ERUxJTSk7Ci0gIH0g
ZWxzZSB7Ci0gICAgdWludDMyX3QgZm4gPSB1cGJfZmllbGRkZWZfbnVtYmVyKGYpOwotICAgIGlm
IChmbiA+PSAxIDw8IDI0KSB7Ci0gICAgICBwdXRvcChjLCBPUF9QVVNIVEFHREVMSU0sIDApOwot
ICAgICAgcHV0b3AoYywgT1BfU0VUQklHR1JPVVBOVU0sIGZuKTsKLSAgICB9IGVsc2UgewotICAg
ICAgcHV0b3AoYywgT1BfUFVTSFRBR0RFTElNLCBmbik7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRp
YyB1cGJfcGJkZWNvZGVybWV0aG9kICpmaW5kX3N1Ym1ldGhvZChjb25zdCBjb21waWxlciAqYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfcGJk
ZWNvZGVybWV0aG9kICptZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIGNvbnN0IHVwYl9oYW5kbGVycyAq
c3ViID0KLSAgICAgIHVwYl9oYW5kbGVyc19nZXRzdWJoYW5kbGVycyhtZXRob2QtPmRlc3RfaGFu
ZGxlcnNfLCBmKTsKLSAgdXBiX3ZhbHVlIHY7Ci0gIHJldHVybiB1cGJfaW50dGFibGVfbG9va3Vw
cHRyKCZjLT5ncm91cC0+bWV0aG9kcywgc3ViLCAmdikKLSAgICAgICAgICAgICA/IHVwYl92YWx1
ZV9nZXRwdHIodikKLSAgICAgICAgICAgICA6IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dHNl
bChjb21waWxlciAqYywgb3Bjb2RlIG9wLCB1cGJfc2VsZWN0b3JfdCBzZWwsCi0gICAgICAgICAg
ICAgICAgICAgY29uc3QgdXBiX2hhbmRsZXJzICpoKSB7Ci0gIGlmICh1cGJfaGFuZGxlcnNfZ2V0
aGFuZGxlcihoLCBzZWwpKSB7Ci0gICAgcHV0b3AoYywgb3AsIHNlbCk7Ci0gIH0KLX0KLQotLyog
UHV0cyBhbiBvcGNvZGUgdG8gY2FsbCBhIGNhbGxiYWNrLCBidXQgb25seSBpZiBhIGNhbGxiYWNr
IGFjdHVhbGx5IGV4aXN0cyBmb3IKLSAqIHRoaXMgZmllbGQgYW5kIGhhbmRsZXIgdHlwZS4gKi8K
LXN0YXRpYyB2b2lkIG1heWJlcHV0KGNvbXBpbGVyICpjLCBvcGNvZGUgb3AsIGNvbnN0IHVwYl9o
YW5kbGVycyAqaCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwg
dXBiX2hhbmRsZXJ0eXBlX3QgdHlwZSkgewotICBwdXRzZWwoYywgb3AsIGdldHNlbChmLCB0eXBl
KSwgaCk7Ci19Ci0KLXN0YXRpYyBib29sIGhhc2xhenloYW5kbGVycyhjb25zdCB1cGJfaGFuZGxl
cnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICBpZiAoIXVwYl9maWVsZGRlZl9sYXp5
KGYpKQotICAgIHJldHVybiBmYWxzZTsKLQotICByZXR1cm4gdXBiX2hhbmRsZXJzX2dldGhhbmRs
ZXIoaCwgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX1NUQVJUU1RSKSkgfHwKLSAgICAgICAgIHVwYl9o
YW5kbGVyc19nZXRoYW5kbGVyKGgsIGdldHNlbChmLCBVUEJfSEFORExFUl9TVFJJTkcpKSB8fAot
ICAgICAgICAgdXBiX2hhbmRsZXJzX2dldGhhbmRsZXIoaCwgZ2V0c2VsKGYsIFVQQl9IQU5ETEVS
X0VORFNUUikpOwotfQotCi0KLS8qIGJ5dGVjb2RlIGNvbXBpbGVyIGNvZGUgZ2VuZXJhdGlvbiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFN5bWJvbGlj
IG5hbWVzIGZvciBvdXIgbG9jYWwgbGFiZWxzLiAqLwotI2RlZmluZSBMQUJFTF9MT09QU1RBUlQg
MSAgLyogVG9wIG9mIGEgcmVwZWF0ZWQgZmllbGQgbG9vcC4gKi8KLSNkZWZpbmUgTEFCRUxfTE9P
UEJSRUFLIDIgIC8qIFRvIGp1bXAgb3V0IG9mIGEgcmVwZWF0ZWQgbG9vcCAqLwotI2RlZmluZSBM
QUJFTF9GSUVMRCAgICAgMyAgLyogSnVtcCBiYWNrd2FyZCB0byBmaW5kIHRoZSBtb3N0IHJlY2Vu
dCBmaWVsZC4gKi8KLSNkZWZpbmUgTEFCRUxfRU5ETVNHICAgIDQgIC8qIFRvIHJlYWNoIHRoZSBP
UF9FTkRNU0cgaW5zdHIgZm9yIHRoaXMgbXNnLiAqLwotCi0vKiBHZW5lcmF0ZXMgYnl0ZWNvZGUg
dG8gcGFyc2UgYSBzaW5nbGUgbm9uLWxhenkgbWVzc2FnZSBmaWVsZC4gKi8KLXN0YXRpYyB2b2lk
IGdlbmVyYXRlX21zZ2ZpZWxkKGNvbXBpbGVyICpjLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfcGJkZWNvZGVybWV0aG9kICptZXRob2Qp
IHsKLSAgY29uc3QgdXBiX2hhbmRsZXJzICpoID0gdXBiX3BiZGVjb2Rlcm1ldGhvZF9kZXN0aGFu
ZGxlcnMobWV0aG9kKTsKLSAgY29uc3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqc3ViX20gPSBmaW5k
X3N1Ym1ldGhvZChjLCBtZXRob2QsIGYpOwotICBpbnQgd2lyZV90eXBlOwotCi0gIGlmICghc3Vi
X20pIHsKLSAgICAvKiBEb24ndCBlbWl0IGFueSBjb2RlIGZvciB0aGlzIGZpZWxkIGF0IGFsbDsg
aXQgd2lsbCBiZSBwYXJzZWQgYXMgYW4KLSAgICAgKiB1bmtub3duIGZpZWxkLiAqLwotICAgIHJl
dHVybjsKLSAgfQotCi0gIGxhYmVsKGMsIExBQkVMX0ZJRUxEKTsKLQotICB3aXJlX3R5cGUgPQot
ICAgICAgKHVwYl9maWVsZGRlZl9kZXNjcmlwdG9ydHlwZShmKSA9PSBVUEJfREVTQ1JJUFRPUl9U
WVBFX01FU1NBR0UpCi0gICAgICAgICAgPyBVUEJfV0lSRV9UWVBFX0RFTElNSVRFRAotICAgICAg
ICAgIDogVVBCX1dJUkVfVFlQRV9TVEFSVF9HUk9VUDsKLQotICBpZiAodXBiX2ZpZWxkZGVmX2lz
c2VxKGYpKSB7Ci0gICAgcHV0b3AoYywgT1BfQ0hFQ0tERUxJTSwgTEFCRUxfRU5ETVNHKTsKLSAg
ICBwdXRjaGVja3RhZyhjLCBmLCB3aXJlX3R5cGUsIExBQkVMX0RJU1BBVENIKTsKLSAgIGRpc3Bh
dGNodGFyZ2V0KGMsIG1ldGhvZCwgZiwgd2lyZV90eXBlKTsKLSAgICBwdXRvcChjLCBPUF9QVVNI
VEFHREVMSU0sIDApOwotICAgIHB1dG9wKGMsIE9QX1NUQVJUU0VRLCBnZXRzZWwoZiwgVVBCX0hB
TkRMRVJfU1RBUlRTRVEpKTsKLSAgIGxhYmVsKGMsIExBQkVMX0xPT1BTVEFSVCk7Ci0gICAgcHV0
cHVzaChjLCBmKTsKLSAgICBwdXRvcChjLCBPUF9TVEFSVFNVQk1TRywgZ2V0c2VsKGYsIFVQQl9I
QU5ETEVSX1NUQVJUU1VCTVNHKSk7Ci0gICAgcHV0b3AoYywgT1BfQ0FMTCwgc3ViX20pOwotICAg
IHB1dG9wKGMsIE9QX1BPUCk7Ci0gICAgbWF5YmVwdXQoYywgT1BfRU5EU1VCTVNHLCBoLCBmLCBV
UEJfSEFORExFUl9FTkRTVUJNU0cpOwotICAgIGlmICh3aXJlX3R5cGUgPT0gVVBCX1dJUkVfVFlQ
RV9ERUxJTUlURUQpIHsKLSAgICAgIHB1dG9wKGMsIE9QX1NFVERFTElNKTsKLSAgICB9Ci0gICAg
cHV0b3AoYywgT1BfQ0hFQ0tERUxJTSwgTEFCRUxfTE9PUEJSRUFLKTsKLSAgICBwdXRjaGVja3Rh
ZyhjLCBmLCB3aXJlX3R5cGUsIExBQkVMX0xPT1BCUkVBSyk7Ci0gICAgcHV0b3AoYywgT1BfQlJB
TkNILCAtTEFCRUxfTE9PUFNUQVJUKTsKLSAgIGxhYmVsKGMsIExBQkVMX0xPT1BCUkVBSyk7Ci0g
ICAgcHV0b3AoYywgT1BfUE9QKTsKLSAgICBtYXliZXB1dChjLCBPUF9FTkRTRVEsIGgsIGYsIFVQ
Ql9IQU5ETEVSX0VORFNFUSk7Ci0gIH0gZWxzZSB7Ci0gICAgcHV0b3AoYywgT1BfQ0hFQ0tERUxJ
TSwgTEFCRUxfRU5ETVNHKTsKLSAgICBwdXRjaGVja3RhZyhjLCBmLCB3aXJlX3R5cGUsIExBQkVM
X0RJU1BBVENIKTsKLSAgIGRpc3BhdGNodGFyZ2V0KGMsIG1ldGhvZCwgZiwgd2lyZV90eXBlKTsK
LSAgICBwdXRwdXNoKGMsIGYpOwotICAgIHB1dG9wKGMsIE9QX1NUQVJUU1VCTVNHLCBnZXRzZWwo
ZiwgVVBCX0hBTkRMRVJfU1RBUlRTVUJNU0cpKTsKLSAgICBwdXRvcChjLCBPUF9DQUxMLCBzdWJf
bSk7Ci0gICAgcHV0b3AoYywgT1BfUE9QKTsKLSAgICBtYXliZXB1dChjLCBPUF9FTkRTVUJNU0cs
IGgsIGYsIFVQQl9IQU5ETEVSX0VORFNVQk1TRyk7Ci0gICAgaWYgKHdpcmVfdHlwZSA9PSBVUEJf
V0lSRV9UWVBFX0RFTElNSVRFRCkgewotICAgICAgcHV0b3AoYywgT1BfU0VUREVMSU0pOwotICAg
IH0KLSAgfQotfQotCi0vKiBHZW5lcmF0ZXMgYnl0ZWNvZGUgdG8gcGFyc2UgYSBzaW5nbGUgc3Ry
aW5nIG9yIGxhenkgc3VibWVzc2FnZSBmaWVsZC4gKi8KLXN0YXRpYyB2b2lkIGdlbmVyYXRlX2Rl
bGltZmllbGQoY29tcGlsZXIgKmMsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqbWV0aG9kKSB7Ci0gIGNv
bnN0IHVwYl9oYW5kbGVycyAqaCA9IHVwYl9wYmRlY29kZXJtZXRob2RfZGVzdGhhbmRsZXJzKG1l
dGhvZCk7Ci0KLSAgbGFiZWwoYywgTEFCRUxfRklFTEQpOwotICBpZiAodXBiX2ZpZWxkZGVmX2lz
c2VxKGYpKSB7Ci0gICAgcHV0b3AoYywgT1BfQ0hFQ0tERUxJTSwgTEFCRUxfRU5ETVNHKTsKLSAg
ICBwdXRjaGVja3RhZyhjLCBmLCBVUEJfV0lSRV9UWVBFX0RFTElNSVRFRCwgTEFCRUxfRElTUEFU
Q0gpOwotICAgZGlzcGF0Y2h0YXJnZXQoYywgbWV0aG9kLCBmLCBVUEJfV0lSRV9UWVBFX0RFTElN
SVRFRCk7Ci0gICAgcHV0b3AoYywgT1BfUFVTSFRBR0RFTElNLCAwKTsKLSAgICBwdXRvcChjLCBP
UF9TVEFSVFNFUSwgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX1NUQVJUU0VRKSk7Ci0gICBsYWJlbChj
LCBMQUJFTF9MT09QU1RBUlQpOwotICAgIHB1dG9wKGMsIE9QX1BVU0hMRU5ERUxJTSk7Ci0gICAg
cHV0b3AoYywgT1BfU1RBUlRTVFIsIGdldHNlbChmLCBVUEJfSEFORExFUl9TVEFSVFNUUikpOwot
ICAgIC8qIE5lZWQgdG8gZW1pdCBldmVuIGlmIG5vIGhhbmRsZXIgdG8gc2tpcCBwYXN0IHRoZSBz
dHJpbmcuICovCi0gICAgcHV0b3AoYywgT1BfU1RSSU5HLCBnZXRzZWwoZiwgVVBCX0hBTkRMRVJf
U1RSSU5HKSk7Ci0gICAgcHV0b3AoYywgT1BfUE9QKTsKLSAgICBtYXliZXB1dChjLCBPUF9FTkRT
VFIsIGgsIGYsIFVQQl9IQU5ETEVSX0VORFNUUik7Ci0gICAgcHV0b3AoYywgT1BfU0VUREVMSU0p
OwotICAgIHB1dG9wKGMsIE9QX0NIRUNLREVMSU0sIExBQkVMX0xPT1BCUkVBSyk7Ci0gICAgcHV0
Y2hlY2t0YWcoYywgZiwgVVBCX1dJUkVfVFlQRV9ERUxJTUlURUQsIExBQkVMX0xPT1BCUkVBSyk7
Ci0gICAgcHV0b3AoYywgT1BfQlJBTkNILCAtTEFCRUxfTE9PUFNUQVJUKTsKLSAgIGxhYmVsKGMs
IExBQkVMX0xPT1BCUkVBSyk7Ci0gICAgcHV0b3AoYywgT1BfUE9QKTsKLSAgICBtYXliZXB1dChj
LCBPUF9FTkRTRVEsIGgsIGYsIFVQQl9IQU5ETEVSX0VORFNFUSk7Ci0gIH0gZWxzZSB7Ci0gICAg
cHV0b3AoYywgT1BfQ0hFQ0tERUxJTSwgTEFCRUxfRU5ETVNHKTsKLSAgICBwdXRjaGVja3RhZyhj
LCBmLCBVUEJfV0lSRV9UWVBFX0RFTElNSVRFRCwgTEFCRUxfRElTUEFUQ0gpOwotICAgZGlzcGF0
Y2h0YXJnZXQoYywgbWV0aG9kLCBmLCBVUEJfV0lSRV9UWVBFX0RFTElNSVRFRCk7Ci0gICAgcHV0
b3AoYywgT1BfUFVTSExFTkRFTElNKTsKLSAgICBwdXRvcChjLCBPUF9TVEFSVFNUUiwgZ2V0c2Vs
KGYsIFVQQl9IQU5ETEVSX1NUQVJUU1RSKSk7Ci0gICAgcHV0b3AoYywgT1BfU1RSSU5HLCBnZXRz
ZWwoZiwgVVBCX0hBTkRMRVJfU1RSSU5HKSk7Ci0gICAgcHV0b3AoYywgT1BfUE9QKTsKLSAgICBt
YXliZXB1dChjLCBPUF9FTkRTVFIsIGgsIGYsIFVQQl9IQU5ETEVSX0VORFNUUik7Ci0gICAgcHV0
b3AoYywgT1BfU0VUREVMSU0pOwotICB9Ci19Ci0KLS8qIEdlbmVyYXRlcyBieXRlY29kZSB0byBw
YXJzZSBhIHNpbmdsZSBwcmltaXRpdmUgZmllbGQuICovCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZV9w
cmltaXRpdmVmaWVsZChjb21waWxlciAqYywgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqbWV0aG9k
KSB7Ci0gIGNvbnN0IHVwYl9oYW5kbGVycyAqaCA9IHVwYl9wYmRlY29kZXJtZXRob2RfZGVzdGhh
bmRsZXJzKG1ldGhvZCk7Ci0gIHVwYl9kZXNjcmlwdG9ydHlwZV90IGRlc2NyaXB0b3JfdHlwZSA9
IHVwYl9maWVsZGRlZl9kZXNjcmlwdG9ydHlwZShmKTsKLSAgb3Bjb2RlIHBhcnNlX3R5cGU7Ci0g
IHVwYl9zZWxlY3Rvcl90IHNlbDsKLSAgaW50IHdpcmVfdHlwZTsKLQotICBsYWJlbChjLCBMQUJF
TF9GSUVMRCk7Ci0KLSAgLyogRnJvbSBhIGRlY29kaW5nIHBlcnNwZWN0aXZlLCBFTlVNIGlzIHRo
ZSBzYW1lIGFzIElOVDMyLiAqLwotICBpZiAoZGVzY3JpcHRvcl90eXBlID09IFVQQl9ERVNDUklQ
VE9SX1RZUEVfRU5VTSkKLSAgICBkZXNjcmlwdG9yX3R5cGUgPSBVUEJfREVTQ1JJUFRPUl9UWVBF
X0lOVDMyOwotCi0gIHBhcnNlX3R5cGUgPSAob3Bjb2RlKWRlc2NyaXB0b3JfdHlwZTsKLQotICAv
KiBUT0RPKGhhYmVybWFuKTogZ2VuZXJhdGUgcGFja2VkIG9yIG5vbi1wYWNrZWQgZmlyc3QgZGVw
ZW5kaW5nIG9uICJwYWNrZWQiCi0gICAqIHNldHRpbmcgaW4gdGhlIGZpZWxkZGVmLiAgVGhpcyB3
aWxsIGZhdm9yIChpbiBzcGVlZCkgd2hpY2hldmVyIHdhcwotICAgKiBzcGVjaWZpZWQuICovCi0K
LSAgYXNzZXJ0KChpbnQpcGFyc2VfdHlwZSA+PSAwICYmIHBhcnNlX3R5cGUgPD0gT1BfTUFYKTsK
LSAgc2VsID0gZ2V0c2VsKGYsIHVwYl9oYW5kbGVyc19nZXRwcmltaXRpdmVoYW5kbGVydHlwZShm
KSk7Ci0gIHdpcmVfdHlwZSA9IHVwYl9wYl9uYXRpdmVfd2lyZV90eXBlc1t1cGJfZmllbGRkZWZf
ZGVzY3JpcHRvcnR5cGUoZildOwotICBpZiAodXBiX2ZpZWxkZGVmX2lzc2VxKGYpKSB7Ci0gICAg
cHV0b3AoYywgT1BfQ0hFQ0tERUxJTSwgTEFCRUxfRU5ETVNHKTsKLSAgICBwdXRjaGVja3RhZyhj
LCBmLCBVUEJfV0lSRV9UWVBFX0RFTElNSVRFRCwgTEFCRUxfRElTUEFUQ0gpOwotICAgZGlzcGF0
Y2h0YXJnZXQoYywgbWV0aG9kLCBmLCBVUEJfV0lSRV9UWVBFX0RFTElNSVRFRCk7Ci0gICAgcHV0
b3AoYywgT1BfUFVTSExFTkRFTElNKTsKLSAgICBwdXRvcChjLCBPUF9TVEFSVFNFUSwgZ2V0c2Vs
KGYsIFVQQl9IQU5ETEVSX1NUQVJUU0VRKSk7ICAvKiBQYWNrZWQgKi8KLSAgIGxhYmVsKGMsIExB
QkVMX0xPT1BTVEFSVCk7Ci0gICAgcHV0b3AoYywgcGFyc2VfdHlwZSwgc2VsKTsKLSAgICBwdXRv
cChjLCBPUF9DSEVDS0RFTElNLCBMQUJFTF9MT09QQlJFQUspOwotICAgIHB1dG9wKGMsIE9QX0JS
QU5DSCwgLUxBQkVMX0xPT1BTVEFSVCk7Ci0gICBkaXNwYXRjaHRhcmdldChjLCBtZXRob2QsIGYs
IHdpcmVfdHlwZSk7Ci0gICAgcHV0b3AoYywgT1BfUFVTSFRBR0RFTElNLCAwKTsKLSAgICBwdXRv
cChjLCBPUF9TVEFSVFNFUSwgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX1NUQVJUU0VRKSk7ICAvKiBO
b24tcGFja2VkICovCi0gICBsYWJlbChjLCBMQUJFTF9MT09QU1RBUlQpOwotICAgIHB1dG9wKGMs
IHBhcnNlX3R5cGUsIHNlbCk7Ci0gICAgcHV0b3AoYywgT1BfQ0hFQ0tERUxJTSwgTEFCRUxfTE9P
UEJSRUFLKTsKLSAgICBwdXRjaGVja3RhZyhjLCBmLCB3aXJlX3R5cGUsIExBQkVMX0xPT1BCUkVB
Syk7Ci0gICAgcHV0b3AoYywgT1BfQlJBTkNILCAtTEFCRUxfTE9PUFNUQVJUKTsKLSAgIGxhYmVs
KGMsIExBQkVMX0xPT1BCUkVBSyk7Ci0gICAgcHV0b3AoYywgT1BfUE9QKTsgIC8qIFBhY2tlZCBh
bmQgbm9uLXBhY2tlZCBqb2luLiAqLwotICAgIG1heWJlcHV0KGMsIE9QX0VORFNFUSwgaCwgZiwg
VVBCX0hBTkRMRVJfRU5EU0VRKTsKLSAgICBwdXRvcChjLCBPUF9TRVRERUxJTSk7ICAvKiBDb3Vs
ZCByZW1vdmUgZm9yIG5vbi1wYWNrZWQgYnkgZHVwIEVORFNFUS4gKi8KLSAgfSBlbHNlIHsKLSAg
ICBwdXRvcChjLCBPUF9DSEVDS0RFTElNLCBMQUJFTF9FTkRNU0cpOwotICAgIHB1dGNoZWNrdGFn
KGMsIGYsIHdpcmVfdHlwZSwgTEFCRUxfRElTUEFUQ0gpOwotICAgZGlzcGF0Y2h0YXJnZXQoYywg
bWV0aG9kLCBmLCB3aXJlX3R5cGUpOwotICAgIHB1dG9wKGMsIHBhcnNlX3R5cGUsIHNlbCk7Ci0g
IH0KLX0KLQotLyogQWRkcyBieXRlY29kZSBmb3IgcGFyc2luZyB0aGUgZ2l2ZW4gbWVzc2FnZSB0
byB0aGUgZ2l2ZW4gZGVjb2RlcnBsYW4sCi0gKiB3aGlsZSBhZGRpbmcgYWxsIGRpc3BhdGNoIHRh
cmdldHMgdG8gdGhpcyBtZXNzYWdlJ3MgZGlzcGF0Y2ggdGFibGUuICovCi1zdGF0aWMgdm9pZCBj
b21waWxlX21ldGhvZChjb21waWxlciAqYywgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqbWV0aG9kKSB7
Ci0gIGNvbnN0IHVwYl9oYW5kbGVycyAqaDsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbWQ7Ci0gIHVp
bnQzMl90KiBzdGFydF9wYzsKLSAgdXBiX21zZ19maWVsZF9pdGVyIGk7Ci0gIHVwYl92YWx1ZSB2
YWw7Ci0KLSAgYXNzZXJ0KG1ldGhvZCk7Ci0KLSAgLyogQ2xlYXIgYWxsIGVudHJpZXMgaW4gdGhl
IGRpc3BhdGNoIHRhYmxlLiAqLwotICB1cGJfaW50dGFibGVfdW5pbml0KCZtZXRob2QtPmRpc3Bh
dGNoKTsKLSAgdXBiX2ludHRhYmxlX2luaXQoJm1ldGhvZC0+ZGlzcGF0Y2gsIFVQQl9DVFlQRV9V
SU5UNjQpOwotCi0gIGggPSB1cGJfcGJkZWNvZGVybWV0aG9kX2Rlc3RoYW5kbGVycyhtZXRob2Qp
OwotICBtZCA9IHVwYl9oYW5kbGVyc19tc2dkZWYoaCk7Ci0KLSBtZXRob2QtPmNvZGVfYmFzZS5v
ZnMgPSBwY29mcyhjKTsKLSAgcHV0b3AoYywgT1BfU0VURElTUEFUQ0gsICZtZXRob2QtPmRpc3Bh
dGNoKTsKLSAgcHV0c2VsKGMsIE9QX1NUQVJUTVNHLCBVUEJfU1RBUlRNU0dfU0VMRUNUT1IsIGgp
OwotIGxhYmVsKGMsIExBQkVMX0ZJRUxEKTsKLSAgc3RhcnRfcGMgPSBjLT5wYzsKLSAgZm9yKHVw
Yl9tc2dfZmllbGRfYmVnaW4oJmksIG1kKTsKLSAgICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJmkp
OwotICAgICAgdXBiX21zZ19maWVsZF9uZXh0KCZpKSkgewotICAgIGNvbnN0IHVwYl9maWVsZGRl
ZiAqZiA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaSk7Ci0gICAgdXBiX2ZpZWxkdHlwZV90IHR5cGUg
PSB1cGJfZmllbGRkZWZfdHlwZShmKTsKLQotICAgIGlmICh0eXBlID09IFVQQl9UWVBFX01FU1NB
R0UgJiYgIShoYXNsYXp5aGFuZGxlcnMoaCwgZikgJiYgYy0+bGF6eSkpIHsKLSAgICAgIGdlbmVy
YXRlX21zZ2ZpZWxkKGMsIGYsIG1ldGhvZCk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFVQQl9U
WVBFX1NUUklORyB8fCB0eXBlID09IFVQQl9UWVBFX0JZVEVTIHx8Ci0gICAgICAgICAgICAgICB0
eXBlID09IFVQQl9UWVBFX01FU1NBR0UpIHsKLSAgICAgIGdlbmVyYXRlX2RlbGltZmllbGQoYywg
ZiwgbWV0aG9kKTsKLSAgICB9IGVsc2UgewotICAgICAgZ2VuZXJhdGVfcHJpbWl0aXZlZmllbGQo
YywgZiwgbWV0aG9kKTsKLSAgICB9Ci0gIH0KLQotICAvKiBJZiB0aGVyZSB3ZXJlIG5vIGZpZWxk
cywgb3IgaWYgbm8gaGFuZGxlcnMgd2VyZSBkZWZpbmVkLCB3ZSBuZWVkIHRvCi0gICAqIGdlbmVy
YXRlIGEgbm9uLWVtcHR5IGxvb3AgYm9keSBzbyB0aGF0IHdlIGNhbiBhdCBsZWFzdCBkaXNwYXRj
aCBmb3IgdW5rbm93bgotICAgKiBmaWVsZHMgYW5kIGNoZWNrIGZvciB0aGUgZW5kIG9mIHRoZSBt
ZXNzYWdlLiAqLwotICBpZiAoYy0+cGMgPT0gc3RhcnRfcGMpIHsKLSAgICAvKiBDaGVjayBmb3Ig
ZW5kLW9mLW1lc3NhZ2UuICovCi0gICAgcHV0b3AoYywgT1BfQ0hFQ0tERUxJTSwgTEFCRUxfRU5E
TVNHKTsKLSAgICAvKiBVbmNvbmRpdGlvbmFsbHkgZGlzcGF0Y2guICovCi0gICAgcHV0b3AoYywg
T1BfRElTUEFUQ0gsIDApOwotICB9Ci0KLSAgLyogRm9yIG5vdyB3ZSBqdXN0IGxvb3AgYmFjayB0
byB0aGUgbGFzdCBmaWVsZCBvZiB0aGUgbWVzc2FnZSAob3IgaWYgbm9uZSwKLSAgICogdGhlIERJ
U1BBVENIIG9wY29kZSBmb3IgdGhlIG1lc3NhZ2UpLiAqLwotICBwdXRvcChjLCBPUF9CUkFOQ0gs
IC1MQUJFTF9GSUVMRCk7Ci0KLSAgLyogSW5zZXJ0IGJvdGggYSBsYWJlbCBhbmQgYSBkaXNwYXRj
aCB0YWJsZSBlbnRyeSBmb3IgdGhpcyBlbmQtb2YtbXNnLiAqLwotIGxhYmVsKGMsIExBQkVMX0VO
RE1TRyk7Ci0gIHZhbCA9IHVwYl92YWx1ZV91aW50NjQocGNvZnMoYykgLSBtZXRob2QtPmNvZGVf
YmFzZS5vZnMpOwotICB1cGJfaW50dGFibGVfaW5zZXJ0KCZtZXRob2QtPmRpc3BhdGNoLCBESVNQ
QVRDSF9FTkRNU0csIHZhbCk7Ci0KLSAgcHV0c2VsKGMsIE9QX0VORE1TRywgVVBCX0VORE1TR19T
RUxFQ1RPUiwgaCk7Ci0gIHB1dG9wKGMsIE9QX1JFVCk7Ci0KLSAgdXBiX2ludHRhYmxlX2NvbXBh
Y3QoJm1ldGhvZC0+ZGlzcGF0Y2gpOwotfQotCi0vKiBQb3B1bGF0ZSAibWV0aG9kcyIgd2l0aCBu
ZXcgdXBiX3BiZGVjb2Rlcm1ldGhvZCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tICJoIi4KLSAqIFJl
dHVybnMgdGhlIG1ldGhvZCBmb3IgdGhlc2UgaGFuZGxlcnMuCi0gKgotICogR2VuZXJhdGVzIGEg
bmV3IG1ldGhvZCBmb3IgZXZlcnkgZGVzdGluYXRpb24gaGFuZGxlcnMgcmVhY2hhYmxlIGZyb20g
ImgiLiAqLwotc3RhdGljIHZvaWQgZmluZF9tZXRob2RzKGNvbXBpbGVyICpjLCBjb25zdCB1cGJf
aGFuZGxlcnMgKmgpIHsKLSAgdXBiX3ZhbHVlIHY7Ci0gIHVwYl9tc2dfZmllbGRfaXRlciBpOwot
ICBjb25zdCB1cGJfbXNnZGVmICptZDsKLQotICBpZiAodXBiX2ludHRhYmxlX2xvb2t1cHB0cigm
Yy0+Z3JvdXAtPm1ldGhvZHMsIGgsICZ2KSkKLSAgICByZXR1cm47Ci0gIG5ld21ldGhvZChoLCBj
LT5ncm91cCk7Ci0KLSAgLyogRmluZCBzdWJtZXRob2RzLiAqLwotICBtZCA9IHVwYl9oYW5kbGVy
c19tc2dkZWYoaCk7Ci0gIGZvcih1cGJfbXNnX2ZpZWxkX2JlZ2luKCZpLCBtZCk7Ci0gICAgICAh
dXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaSkpIHsK
LSAgICBjb25zdCB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmllbGQoJmkpOwotICAg
IGNvbnN0IHVwYl9oYW5kbGVycyAqc3ViX2g7Ci0gICAgaWYgKHVwYl9maWVsZGRlZl90eXBlKGYp
ID09IFVQQl9UWVBFX01FU1NBR0UgJiYKLSAgICAgICAgKHN1Yl9oID0gdXBiX2hhbmRsZXJzX2dl
dHN1YmhhbmRsZXJzKGgsIGYpKSAhPSBOVUxMKSB7Ci0gICAgICAvKiBXZSBvbmx5IGdlbmVyYXRl
IGEgZGVjb2RlciBtZXRob2QgZm9yIHN1Ym1lc3NhZ2VzIHdpdGggaGFuZGxlcnMuCi0gICAgICAg
KiBPdGhlcnMgd2lsbCBiZSBwYXJzZWQgYXMgdW5rbm93biBmaWVsZHMuICovCi0gICAgICBmaW5k
X21ldGhvZHMoYywgc3ViX2gpOwotICAgIH0KLSAgfQotfQotCi0vKiAoUmUtKWNvbXBpbGUgYnl0
ZWNvZGUgZm9yIGFsbCBtZXNzYWdlcyBpbiAibXNncy4iCi0gKiBPdmVyd3JpdGVzIGFueSBleGlz
dGluZyBieXRlY29kZSBpbiAiYyIuICovCi1zdGF0aWMgdm9pZCBjb21waWxlX21ldGhvZHMoY29t
cGlsZXIgKmMpIHsKLSAgdXBiX2ludHRhYmxlX2l0ZXIgaTsKLQotICAvKiBTdGFydCBvdmVyIGF0
IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ5dGVjb2RlLiAqLwotICBjLT5wYyA9IGMtPmdyb3VwLT5i
eXRlY29kZTsKLQotICB1cGJfaW50dGFibGVfYmVnaW4oJmksICZjLT5ncm91cC0+bWV0aG9kcyk7
Ci0gIGZvcig7ICF1cGJfaW50dGFibGVfZG9uZSgmaSk7IHVwYl9pbnR0YWJsZV9uZXh0KCZpKSkg
ewotICAgIHVwYl9wYmRlY29kZXJtZXRob2QgKm1ldGhvZCA9IHVwYl92YWx1ZV9nZXRwdHIodXBi
X2ludHRhYmxlX2l0ZXJfdmFsdWUoJmkpKTsKLSAgICBjb21waWxlX21ldGhvZChjLCBtZXRob2Qp
OwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9ieXRlY29kZV9oYW5kbGVycyhtZ3JvdXAgKmcp
IHsKLSAgdXBiX2ludHRhYmxlX2l0ZXIgaTsKLSAgdXBiX2ludHRhYmxlX2JlZ2luKCZpLCAmZy0+
bWV0aG9kcyk7Ci0gIGZvcig7ICF1cGJfaW50dGFibGVfZG9uZSgmaSk7IHVwYl9pbnR0YWJsZV9u
ZXh0KCZpKSkgewotICAgIHVwYl9wYmRlY29kZXJtZXRob2QgKm0gPSB1cGJfdmFsdWVfZ2V0cHRy
KHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVlKCZpKSk7Ci0gICAgdXBiX2J5dGVzaGFuZGxlciAqaCA9
ICZtLT5pbnB1dF9oYW5kbGVyXzsKLQotICAgIG0tPmNvZGVfYmFzZS5wdHIgPSBnLT5ieXRlY29k
ZSArIG0tPmNvZGVfYmFzZS5vZnM7Ci0KLSAgICB1cGJfYnl0ZXNoYW5kbGVyX3NldHN0YXJ0c3Ry
KGgsIHVwYl9wYmRlY29kZXJfc3RhcnRiYywgbS0+Y29kZV9iYXNlLnB0cik7Ci0gICAgdXBiX2J5
dGVzaGFuZGxlcl9zZXRzdHJpbmcoaCwgdXBiX3BiZGVjb2Rlcl9kZWNvZGUsIGcpOwotICAgIHVw
Yl9ieXRlc2hhbmRsZXJfc2V0ZW5kc3RyKGgsIHVwYl9wYmRlY29kZXJfZW5kLCBtKTsKLSAgfQot
fQotCi0KLS8qIEpJVCBzZXR1cC4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBVUEJfVVNFX0pJVF9YNjQK
LQotc3RhdGljIHZvaWQgc2V0aGFuZGxlcnMobWdyb3VwICpnLCBib29sIGFsbG93aml0KSB7Ci0g
IGctPmppdF9jb2RlID0gTlVMTDsKLSAgaWYgKGFsbG93aml0KSB7Ci0gICAgLyogQ29tcGlsZSBi
eXRlLWNvZGUgaW50byBtYWNoaW5lIGNvZGUsIGNyZWF0ZSBoYW5kbGVycy4gKi8KLSAgICB1cGJf
cGJkZWNvZGVyX2ppdChnKTsKLSAgfSBlbHNlIHsKLSAgICBzZXRfYnl0ZWNvZGVfaGFuZGxlcnMo
Zyk7Ci0gIH0KLX0KLQotI2Vsc2UgIC8qIFVQQl9VU0VfSklUX1g2NCAqLwotCi1zdGF0aWMgdm9p
ZCBzZXRoYW5kbGVycyhtZ3JvdXAgKmcsIGJvb2wgYWxsb3dqaXQpIHsKLSAgLyogTm8gSklUIGNv
bXBpbGVkIGluOyB1c2UgYnl0ZWNvZGUgaGFuZGxlcnMgdW5jb25kaXRpb25hbGx5LiAqLwotICBV
UEJfVU5VU0VEKGFsbG93aml0KTsKLSAgc2V0X2J5dGVjb2RlX2hhbmRsZXJzKGcpOwotfQotCi0j
ZW5kaWYgIC8qIFVQQl9VU0VfSklUX1g2NCAqLwotCi0KLS8qIFRPRE8oaGFiZXJtYW4pOiBhbGxv
dyB0aGlzIHRvIGJlIGNvbnN0cnVjdGVkIGZvciBhbiBhcmJpdHJhcnkgc2V0IG9mIGRlc3QKLSAq
IGhhbmRsZXJzIGFuZCBvdGhlciBtZ3JvdXBzIChidXQgdmVyaWZ5IHdlIGhhdmUgYSB0cmFuc2l0
aXZlIGNsb3N1cmUpLiAqLwotY29uc3QgbWdyb3VwICptZ3JvdXBfbmV3KGNvbnN0IHVwYl9oYW5k
bGVycyAqZGVzdCwgYm9vbCBhbGxvd2ppdCwgYm9vbCBsYXp5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIG1ncm91cCAqZzsKLSAgY29tcGlsZXIgKmM7
Ci0KLSAgVVBCX1VOVVNFRChhbGxvd2ppdCk7Ci0gIGFzc2VydCh1cGJfaGFuZGxlcnNfaXNmcm96
ZW4oZGVzdCkpOwotCi0gIGcgPSBuZXdncm91cChvd25lcik7Ci0gIGMgPSBuZXdjb21waWxlcihn
LCBsYXp5KTsKLSAgZmluZF9tZXRob2RzKGMsIGRlc3QpOwotCi0gIC8qIFdlIGNvbXBpbGUgaW4g
dHdvIHBhc3NlczoKLSAgICogMS4gYWxsIG1lc3NhZ2VzIGFyZSBhc3NpZ25lZCByZWxhdGl2ZSBv
ZmZzZXRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgICogICAgYnl0ZWNvZGUgKHNhdmVk
IGluIG1ldGhvZC0+Y29kZV9iYXNlKS4KLSAgICogMi4gZm9yd2FyZHMgT1BfQ0FMTCBpbnN0cnVj
dGlvbnMgY2FuIGJlIGNvcnJlY3RseSBsaW5rZWQgc2luY2UgbWVzc2FnZQotICAgKiAgICBvZmZz
ZXRzIGhhdmUgYmVlbiBwcmV2aW91c2x5IGFzc2lnbmVkLgotICAgKgotICAgKiBDb3VsZCBhdm9p
ZCB0aGUgc2Vjb25kIHBhc3MgYnkgbGlua2luZyBPUF9DQUxMIGluc3RydWN0aW9ucyBzb21laG93
LiAqLwotICBjb21waWxlX21ldGhvZHMoYyk7Ci0gIGNvbXBpbGVfbWV0aG9kcyhjKTsKLSAgZy0+
Ynl0ZWNvZGVfZW5kID0gYy0+cGM7Ci0gIGZyZWVjb21waWxlcihjKTsKLQotI2lmZGVmIFVQQl9E
VU1QX0JZVEVDT0RFCi0gIHsKLSAgICBGSUxFICpmID0gZm9wZW4oIi90bXAvdXBiLWJ5dGVjb2Rl
IiwgIndiIik7Ci0gICAgYXNzZXJ0KGYpOwotICAgIGR1bXBiYyhnLT5ieXRlY29kZSwgZy0+Ynl0
ZWNvZGVfZW5kLCBzdGRlcnIpOwotICAgIGR1bXBiYyhnLT5ieXRlY29kZSwgZy0+Ynl0ZWNvZGVf
ZW5kLCBmKTsKLSAgICBmY2xvc2UoZik7Ci0gIH0KLSNlbmRpZgotCi0gIHNldGhhbmRsZXJzKGcs
IGFsbG93aml0KTsKLSAgcmV0dXJuIGc7Ci19Ci0KLQotLyogdXBiX3BiY29kZWNhY2hlICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
LQotdm9pZCB1cGJfcGJjb2RlY2FjaGVfaW5pdCh1cGJfcGJjb2RlY2FjaGUgKmMpIHsKLSAgdXBi
X2ludHRhYmxlX2luaXQoJmMtPmdyb3VwcywgVVBCX0NUWVBFX0NPTlNUUFRSKTsKLSAgYy0+YWxs
b3dfaml0XyA9IHRydWU7Ci19Ci0KLXZvaWQgdXBiX3BiY29kZWNhY2hlX3VuaW5pdCh1cGJfcGJj
b2RlY2FjaGUgKmMpIHsKLSAgdXBiX2ludHRhYmxlX2l0ZXIgaTsKLSAgdXBiX2ludHRhYmxlX2Jl
Z2luKCZpLCAmYy0+Z3JvdXBzKTsKLSAgZm9yKDsgIXVwYl9pbnR0YWJsZV9kb25lKCZpKTsgdXBi
X2ludHRhYmxlX25leHQoJmkpKSB7Ci0gICAgY29uc3QgbWdyb3VwICpncm91cCA9IHVwYl92YWx1
ZV9nZXRjb25zdHB0cih1cGJfaW50dGFibGVfaXRlcl92YWx1ZSgmaSkpOwotICAgIG1ncm91cF91
bnJlZihncm91cCwgYyk7Ci0gIH0KLSAgdXBiX2ludHRhYmxlX3VuaW5pdCgmYy0+Z3JvdXBzKTsK
LX0KLQotYm9vbCB1cGJfcGJjb2RlY2FjaGVfYWxsb3dqaXQoY29uc3QgdXBiX3BiY29kZWNhY2hl
ICpjKSB7Ci0gIHJldHVybiBjLT5hbGxvd19qaXRfOwotfQotCi1ib29sIHVwYl9wYmNvZGVjYWNo
ZV9zZXRhbGxvd2ppdCh1cGJfcGJjb2RlY2FjaGUgKmMsIGJvb2wgYWxsb3cpIHsKLSAgaWYgKHVw
Yl9pbnR0YWJsZV9jb3VudCgmYy0+Z3JvdXBzKSA+IDApCi0gICAgcmV0dXJuIGZhbHNlOwotICBj
LT5hbGxvd19qaXRfID0gYWxsb3c7Ci0gIHJldHVybiB0cnVlOwotfQotCi1jb25zdCB1cGJfcGJk
ZWNvZGVybWV0aG9kICp1cGJfcGJjb2RlY2FjaGVfZ2V0ZGVjb2Rlcm1ldGhvZCgKLSAgICB1cGJf
cGJjb2RlY2FjaGUgKmMsIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2RvcHRzICpvcHRzKSB7Ci0g
IHVwYl92YWx1ZSB2OwotICBib29sIG9rOwotCi0gIC8qIFJpZ2h0IG5vdyB3ZSBidWlsZCBhIG5l
dyBEZWNvZGVyTWV0aG9kIGV2ZXJ5IHRpbWUuCi0gICAqIFRPRE8oaGFiZXJtYW4pOiBwcm9wZXJs
eSBjYWNoZSBtZXRob2RzIGJ5IHRoZWlyIHRydWUga2V5LiAqLwotICBjb25zdCBtZ3JvdXAgKmcg
PSBtZ3JvdXBfbmV3KG9wdHMtPmhhbmRsZXJzLCBjLT5hbGxvd19qaXRfLCBvcHRzLT5sYXp5LCBj
KTsKLSAgdXBiX2ludHRhYmxlX3B1c2goJmMtPmdyb3VwcywgdXBiX3ZhbHVlX2NvbnN0cHRyKGcp
KTsKLQotICBvayA9IHVwYl9pbnR0YWJsZV9sb29rdXBwdHIoJmctPm1ldGhvZHMsIG9wdHMtPmhh
bmRsZXJzLCAmdik7Ci0gIFVQQl9BU1NFUlRfVkFSKG9rLCBvayk7Ci0gIHJldHVybiB1cGJfdmFs
dWVfZ2V0cHRyKHYpOwotfQotCi0KLS8qIHVwYl9wYmRlY29kZXJtZXRob2RvcHRzICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgdXBi
X3BiZGVjb2Rlcm1ldGhvZG9wdHNfaW5pdCh1cGJfcGJkZWNvZGVybWV0aG9kb3B0cyAqb3B0cywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfaGFuZGxlcnMgKmgp
IHsKLSAgb3B0cy0+aGFuZGxlcnMgPSBoOwotICBvcHRzLT5sYXp5ID0gZmFsc2U7Ci19Ci0KLXZv
aWQgdXBiX3BiZGVjb2Rlcm1ldGhvZG9wdHNfc2V0bGF6eSh1cGJfcGJkZWNvZGVybWV0aG9kb3B0
cyAqb3B0cywgYm9vbCBsYXp5KSB7Ci0gIG9wdHMtPmxhenkgPSBsYXp5OwotfQotLyoKLSoqIHVw
Yjo6RGVjb2RlciAoQnl0ZWNvZGUgRGVjb2RlciBWTSkKLSoqCi0qKiBCeXRlY29kZSBtdXN0IHBy
ZXZpb3VzbHkgaGF2ZSBiZWVuIGdlbmVyYXRlZCB1c2luZyB0aGUgYnl0ZWNvZGUgY29tcGlsZXIg
aW4KLSoqIGNvbXBpbGVfZGVjb2Rlci5jLiAgVGhpcyBkZWNvZGVyIHRoZW4gd2Fsa3MgdGhyb3Vn
aCB0aGUgYnl0ZWNvZGUgb3AtYnktb3AgdG8KLSoqIHBhcnNlIHRoZSBpbnB1dC4KLSoqCi0qKiBE
ZWNvZGluZyBpcyBmdWxseSByZXN1bWFibGU7IHdlIGp1c3Qga2VlcCBhIHBvaW50ZXIgdG8gdGhl
IGN1cnJlbnQgYnl0ZWNvZGUKLSoqIGluc3RydWN0aW9uIGFuZCByZXN1bWUgZnJvbSB0aGVyZS4g
IEEgZmFpciBhbW91bnQgb2YgdGhlIGxvZ2ljIGhlcmUgaXMgdG8KLSoqIGhhbmRsZSB0aGUgZmFj
dCB0aGF0IHZhbHVlcyBjYW4gc3BhbiBidWZmZXIgc2VhbXMgYW5kIHdlIGhhdmUgdG8gYmUgYWJs
ZSB0bwotKiogYmUgY2FwYWJsZSBvZiBzdXNwZW5kaW5nL3Jlc3VtaW5nIGZyb20gYW55IGJ5dGUg
aW4gdGhlIHN0cmVhbS4gIFRoaXMKLSoqIHNvbWV0aW1lcyByZXF1aXJlcyBrZWVwaW5nIGEgZmV3
IHRyYWlsaW5nIGJ5dGVzIGZyb20gdGhlIGxhc3QgYnVmZmVyIGFyb3VuZAotKiogaW4gdGhlICJy
ZXNpZHVhbCIgYnVmZmVyLgotKi8KLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8
c3RkZGVmLmg+Ci0KLSNpZmRlZiBVUEJfRFVNUF9CWVRFQ09ERQotI2luY2x1ZGUgPHN0ZGlvLmg+
Ci0jZW5kaWYKLQotI2RlZmluZSBDSEVDS19TVVNQRU5EKHgpIGlmICghKHgpKSByZXR1cm4gdXBi
X3BiZGVjb2Rlcl9zdXNwZW5kKGQpOwotCi0vKiBFcnJvciBtZXNzYWdlcyB0aGF0IGFyZSBzaGFy
ZWQgYmV0d2VlbiB0aGUgYnl0ZWNvZGUgYW5kIEpJVCBkZWNvZGVycy4gKi8KLWNvbnN0IGNoYXIg
KmtQYkRlY29kZXJTdGFja092ZXJmbG93ID0gIk5lc3RpbmcgdG9vIGRlZXAuIjsKLWNvbnN0IGNo
YXIgKmtQYkRlY29kZXJTdWJtZXNzYWdlVG9vTG9uZyA9Ci0gICAgIlN1Ym1lc3NhZ2UgZW5kIGV4
dGVuZHMgcGFzdCBlbmNsb3Npbmcgc3VibWVzc2FnZS4iOwotCi0vKiBFcnJvciBtZXNzYWdlcyBz
aGFyZWQgd2l0aGluIHRoaXMgZmlsZS4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICprVW50ZXJtaW5h
dGVkVmFyaW50ID0gIlVudGVybWluYXRlZCB2YXJpbnQuIjsKLQotLyogdXBiX3BiZGVjb2RlciAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLQotc3RhdGljIG9wY29kZSBoYWx0ID0gT1BfSEFMVDsKLQotLyogV2hldGhlciBhbiBv
cCBjb25zdW1lcyBhbnkgb2YgdGhlIGlucHV0IGJ1ZmZlci4gKi8KLXN0YXRpYyBib29sIGNvbnN1
bWVzX2lucHV0KG9wY29kZSBvcCkgewotICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBPUF9TRVRE
SVNQQVRDSDoKLSAgICBjYXNlIE9QX1NUQVJUTVNHOgotICAgIGNhc2UgT1BfRU5ETVNHOgotICAg
IGNhc2UgT1BfU1RBUlRTRVE6Ci0gICAgY2FzZSBPUF9FTkRTRVE6Ci0gICAgY2FzZSBPUF9TVEFS
VFNVQk1TRzoKLSAgICBjYXNlIE9QX0VORFNVQk1TRzoKLSAgICBjYXNlIE9QX1NUQVJUU1RSOgot
ICAgIGNhc2UgT1BfRU5EU1RSOgotICAgIGNhc2UgT1BfUFVTSFRBR0RFTElNOgotICAgIGNhc2Ug
T1BfUE9QOgotICAgIGNhc2UgT1BfU0VUREVMSU06Ci0gICAgY2FzZSBPUF9TRVRCSUdHUk9VUE5V
TToKLSAgICBjYXNlIE9QX0NIRUNLREVMSU06Ci0gICAgY2FzZSBPUF9DQUxMOgotICAgIGNhc2Ug
T1BfUkVUOgotICAgIGNhc2UgT1BfQlJBTkNIOgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQotCi1zdGF0aWMgc2l6ZV90IHN0YWNr
c2l6ZSh1cGJfcGJkZWNvZGVyICpkLCBzaXplX3QgZW50cmllcykgewotICBVUEJfVU5VU0VEKGQp
OwotICByZXR1cm4gZW50cmllcyAqIHNpemVvZih1cGJfcGJkZWNvZGVyX2ZyYW1lKTsKLX0KLQot
c3RhdGljIHNpemVfdCBjYWxsc3RhY2tzaXplKHVwYl9wYmRlY29kZXIgKmQsIHNpemVfdCBlbnRy
aWVzKSB7Ci0gIFVQQl9VTlVTRUQoZCk7Ci0KLSNpZmRlZiBVUEJfVVNFX0pJVF9YNjQKLSAgaWYg
KGQtPm1ldGhvZF8tPmlzX25hdGl2ZV8pIHsKLSAgICAvKiBFYWNoIG5hdGl2ZSBzdGFjayBmcmFt
ZSBuZWVkcyB0d28gcG9pbnRlcnMsIHBsdXMgd2UgbmVlZCBhIGZldyBmcmFtZXMgZm9yCi0gICAg
ICogdGhlIGVudGVyL2V4aXQgdHJhbXBvbGluZXMuICovCi0gICAgc2l6ZV90IHJldCA9IGVudHJp
ZXMgKiBzaXplb2Yodm9pZCopICogMjsKLSAgICByZXQgKz0gc2l6ZW9mKHZvaWQqKSAqIDEwOwot
ICAgIHJldHVybiByZXQ7Ci0gIH0KLSNlbmRpZgotCi0gIHJldHVybiBlbnRyaWVzICogc2l6ZW9m
KHVpbnQzMl90Kik7Ci19Ci0KLQotc3RhdGljIGJvb2wgaW5fcmVzaWR1YWxfYnVmKGNvbnN0IHVw
Yl9wYmRlY29kZXIgKmQsIGNvbnN0IGNoYXIgKnApOwotCi0vKiBJdCdzIHVuZm9ydHVuYXRlIHRo
YXQgd2UgaGF2ZSB0byBtaWNyby1tYW5hZ2UgdGhlIGNvbXBpbGVyIHdpdGgKLSAqIFVQQl9GT1JD
RUlOTElORSBhbmQgVVBCX05PSU5MSU5FLCBlc3BlY2lhbGx5IHNpbmNlIHRoaXMgdHVuaW5nIGlz
IG5lY2Vzc2FyaWx5Ci0gKiBzcGVjaWZpYyB0byBvbmUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4g
IEJ1dCBlbXBpcmljYWxseSBvbiBhIENvcmUgaTcsCi0gKiBwZXJmb3JtYW5jZSBpbmNyZWFzZXMg
MzAtNTAlIHdpdGggdGhlc2UgYW5ub3RhdGlvbnMuICBFdmVyeSBpbnN0YW5jZSB3aGVyZQotICog
dGhlc2UgYXBwZWFyLCBnY2MgNC4yLjEgbWFkZSB0aGUgd3JvbmcgZGVjaXNpb24gYW5kIGRlZ3Jh
ZGVkIHBlcmZvcm1hbmNlIGluCi0gKiBiZW5jaG1hcmtzLiAqLwotCi1zdGF0aWMgdm9pZCBzZXRl
cnIodXBiX3BiZGVjb2RlciAqZCwgY29uc3QgY2hhciAqbXNnKSB7Ci0gIHVwYl9zdGF0dXMgc3Rh
dHVzID0gVVBCX1NUQVRVU19JTklUOwotICB1cGJfc3RhdHVzX3NldGVycm1zZygmc3RhdHVzLCBt
c2cpOwotICB1cGJfZW52X3JlcG9ydGVycm9yKGQtPmVudiwgJnN0YXR1cyk7Ci19Ci0KLXZvaWQg
dXBiX3BiZGVjb2Rlcl9zZXRlcnIodXBiX3BiZGVjb2RlciAqZCwgY29uc3QgY2hhciAqbXNnKSB7
Ci0gIHNldGVycihkLCBtc2cpOwotfQotCi0KLS8qIEJ1ZmZlcmluZyAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8q
IFdlIG9wZXJhdGUgb24gb25lIGJ1ZmZlciBhdCBhIHRpbWUsIHdoaWNoIGlzIGVpdGhlciB0aGUg
dXNlcidzIGJ1ZmZlciBwYXNzZWQKLSAqIHRvIG91ciAiZGVjb2RlIiBjYWxsYmFjayBvciBzb21l
IHJlc2lkdWFsIGJ5dGVzIGZyb20gdGhlIHByZXZpb3VzIGJ1ZmZlci4gKi8KLQotLyogSG93IG1h
bnkgYnl0ZXMgY2FuIGJlIHNhZmVseSByZWFkIGZyb20gZC0+cHRyIHdpdGhvdXQgcmVhZGluZyBw
YXN0IGVuZC1vZi1idWYKLSAqIG9yIHBhc3QgdGhlIGN1cnJlbnQgZGVsaW1pdGVkIGVuZC4gKi8K
LXN0YXRpYyBzaXplX3QgY3VyYnVmbGVmdChjb25zdCB1cGJfcGJkZWNvZGVyICpkKSB7Ci0gIGFz
c2VydChkLT5kYXRhX2VuZCA+PSBkLT5wdHIpOwotICByZXR1cm4gZC0+ZGF0YV9lbmQgLSBkLT5w
dHI7Ci19Ci0KLS8qIEhvdyBtYW55IGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVmb3JlIGVuZC1vZi1i
dWZmZXIuICovCi1zdGF0aWMgc2l6ZV90IGJ1ZmxlZnQoY29uc3QgdXBiX3BiZGVjb2RlciAqZCkg
ewotICByZXR1cm4gZC0+ZW5kIC0gZC0+cHRyOwotfQotCi0vKiBPdmVyYWxsIHN0cmVhbSBvZmZz
ZXQgb2YgZC0+cHRyLiAqLwotdWludDY0X3Qgb2Zmc2V0KGNvbnN0IHVwYl9wYmRlY29kZXIgKmQp
IHsKLSAgcmV0dXJuIGQtPmJ1ZnN0YXJ0X29mcyArIChkLT5wdHIgLSBkLT5idWYpOwotfQotCi0v
KiBIb3cgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9yZSB0aGUgZW5kIG9mIHRoaXMgZGVs
aW1pdGVkIHJlZ2lvbi4gKi8KLXNpemVfdCBkZWxpbV9yZW1haW5pbmcoY29uc3QgdXBiX3BiZGVj
b2RlciAqZCkgewotICByZXR1cm4gZC0+dG9wLT5lbmRfb2ZzIC0gb2Zmc2V0KGQpOwotfQotCi0v
KiBBZHZhbmNlcyBkLT5wdHIuICovCi1zdGF0aWMgdm9pZCBhZHZhbmNlKHVwYl9wYmRlY29kZXIg
KmQsIHNpemVfdCBsZW4pIHsKLSAgYXNzZXJ0KGN1cmJ1ZmxlZnQoZCkgPj0gbGVuKTsKLSAgZC0+
cHRyICs9IGxlbjsKLX0KLQotc3RhdGljIGJvb2wgaW5fYnVmKGNvbnN0IGNoYXIgKnAsIGNvbnN0
IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZW5kKSB7Ci0gIHJldHVybiBwID49IGJ1ZiAmJiBwIDw9
IGVuZDsKLX0KLQotc3RhdGljIGJvb2wgaW5fcmVzaWR1YWxfYnVmKGNvbnN0IHVwYl9wYmRlY29k
ZXIgKmQsIGNvbnN0IGNoYXIgKnApIHsKLSAgcmV0dXJuIGluX2J1ZihwLCBkLT5yZXNpZHVhbCwg
ZC0+cmVzaWR1YWxfZW5kKTsKLX0KLQotLyogQ2FsY3VsYXRlcyB0aGUgZGVsaW1fZW5kIHZhbHVl
LCB3aGljaCBpcyBhZmZlY3RlZCBieSBib3RoIHRoZSBjdXJyZW50IGJ1ZmZlcgotICogYW5kIHRo
ZSBwYXJzaW5nIHN0YWNrLCBzbyBtdXN0IGJlIGNhbGxlZCB3aGVuZXZlciBlaXRoZXIgaXMgdXBk
YXRlZC4gKi8KLXN0YXRpYyB2b2lkIHNldF9kZWxpbV9lbmQodXBiX3BiZGVjb2RlciAqZCkgewot
ICBzaXplX3QgZGVsaW1fb2ZzID0gZC0+dG9wLT5lbmRfb2ZzIC0gZC0+YnVmc3RhcnRfb2ZzOwot
ICBpZiAoZGVsaW1fb2ZzIDw9IChzaXplX3QpKGQtPmVuZCAtIGQtPmJ1ZikpIHsKLSAgICBkLT5k
ZWxpbV9lbmQgPSBkLT5idWYgKyBkZWxpbV9vZnM7Ci0gICAgZC0+ZGF0YV9lbmQgPSBkLT5kZWxp
bV9lbmQ7Ci0gIH0gZWxzZSB7Ci0gICAgZC0+ZGF0YV9lbmQgPSBkLT5lbmQ7Ci0gICAgZC0+ZGVs
aW1fZW5kID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBzd2l0Y2h0b2J1Zih1cGJfcGJk
ZWNvZGVyICpkLCBjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmVuZCkgewotICBkLT5wdHIg
PSBidWY7Ci0gIGQtPmJ1ZiA9IGJ1ZjsKLSAgZC0+ZW5kID0gZW5kOwotICBzZXRfZGVsaW1fZW5k
KGQpOwotfQotCi1zdGF0aWMgdm9pZCBhZHZhbmNldG9idWYodXBiX3BiZGVjb2RlciAqZCwgY29u
c3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKSB7Ci0gIGFzc2VydChjdXJidWZsZWZ0KGQpID09IDAp
OwotICBkLT5idWZzdGFydF9vZnMgKz0gKGQtPmVuZCAtIGQtPmJ1Zik7Ci0gIHN3aXRjaHRvYnVm
KGQsIGJ1ZiwgYnVmICsgbGVuKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2twb2ludCh1cGJfcGJk
ZWNvZGVyICpkKSB7Ci0gIC8qIFRoZSBhc3NlcnRpb24gaGVyZSBpcyBpbiB0aGUgaW50ZXJlc3Rz
IG9mIGVmZmljaWVuY3ksIG5vdCBjb3JyZWN0bmVzcy4KLSAgICogV2UgYXJlIHRyeWluZyB0byBl
bnN1cmUgdGhhdCB3ZSBkb24ndCBjaGVja3BvaW50KCkgbW9yZSBvZnRlbiB0aGFuCi0gICAqIG5l
Y2Vzc2FyeS4gKi8KLSAgYXNzZXJ0KGQtPmNoZWNrcG9pbnQgIT0gZC0+cHRyKTsKLSAgZC0+Y2hl
Y2twb2ludCA9IGQtPnB0cjsKLX0KLQotLyogU2tpcHMgImJ5dGVzIiBieXRlcyBpbiB0aGUgc3Ry
ZWFtLCB3aGljaCBtYXkgYmUgbW9yZSB0aGFuIGF2YWlsYWJsZS4gIElmIHdlCi0gKiBza2lwIG1v
cmUgYnl0ZXMgdGhhbiBhcmUgYXZhaWxhYmxlLCB3ZSByZXR1cm4gYSBsb25nIHJlYWQgY291bnQg
dG8gdGhlIGNhbGxlcgotICogaW5kaWNhdGluZyBob3cgbWFueSBieXRlcyBjYW4gYmUgc2tpcHBl
ZCBvdmVyIGJlZm9yZSBwYXNzaW5nIGFjdHVhbCBkYXRhCi0gKiBhZ2Fpbi4gIFNraXBwZWQgYnl0
ZXMgY2FuIHBhc3MgYSBOVUxMIGJ1ZmZlciBhbmQgdGhlIGRlY29kZXIgZ3VhcmFudGVlcyB0aGV5
Ci0gKiB3b24ndCBhY3R1YWxseSBiZSByZWFkLgotICovCi1zdGF0aWMgaW50MzJfdCBza2lwKHVw
Yl9wYmRlY29kZXIgKmQsIHNpemVfdCBieXRlcykgewotICBhc3NlcnQoIWluX3Jlc2lkdWFsX2J1
ZihkLCBkLT5wdHIpIHx8IGQtPnNpemVfcGFyYW0gPT0gMCk7Ci0gIGFzc2VydChkLT5za2lwID09
IDApOwotICBpZiAoYnl0ZXMgPiBkZWxpbV9yZW1haW5pbmcoZCkpIHsKLSAgICBzZXRlcnIoZCwg
IlNraXBwZWQgdmFsdWUgZXh0ZW5kZWQgYmV5b25kIGVuY2xvc2luZyBzdWJtZXNzYWdlLiIpOwot
ICAgIHJldHVybiB1cGJfcGJkZWNvZGVyX3N1c3BlbmQoZCk7Ci0gIH0gZWxzZSBpZiAoYnVmbGVm
dChkKSA+IGJ5dGVzKSB7Ci0gICAgLyogU2tpcHBlZCBkYXRhIGlzIGFsbCBpbiBjdXJyZW50IGJ1
ZmZlciwgYW5kIG1vcmUgaXMgc3RpbGwgYXZhaWxhYmxlLiAqLwotICAgIGFkdmFuY2UoZCwgYnl0
ZXMpOwotICAgIGQtPnNraXAgPSAwOwotICAgIHJldHVybiBERUNPREVfT0s7Ci0gIH0gZWxzZSB7
Ci0gICAgLyogU2tpcHBlZCBkYXRhIGV4dGVuZHMgYmV5b25kIGN1cnJlbnRseSBhdmFpbGFibGUg
YnVmZmVycy4gKi8KLSAgICBkLT5wYyA9IGQtPmxhc3Q7Ci0gICAgZC0+c2tpcCA9IGJ5dGVzIC0g
Y3VyYnVmbGVmdChkKTsKLSAgICBkLT5idWZzdGFydF9vZnMgKz0gKGQtPmVuZCAtIGQtPmJ1Zik7
Ci0gICAgZC0+cmVzaWR1YWxfZW5kID0gZC0+cmVzaWR1YWw7Ci0gICAgc3dpdGNodG9idWYoZCwg
ZC0+cmVzaWR1YWwsIGQtPnJlc2lkdWFsX2VuZCk7Ci0gICAgcmV0dXJuIGQtPnNpemVfcGFyYW0g
KyBkLT5za2lwOwotICB9Ci19Ci0KLQotLyogUmVzdW1lcyB0aGUgZGVjb2RlciBmcm9tIGFuIGlu
aXRpYWwgc3RhdGUgb3IgZnJvbSBhIHByZXZpb3VzIHN1c3BlbmQuICovCi1pbnQzMl90IHVwYl9w
YmRlY29kZXJfcmVzdW1lKHVwYl9wYmRlY29kZXIgKmQsIHZvaWQgKnAsIGNvbnN0IGNoYXIgKmJ1
ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGNvbnN0IHVwYl9i
dWZoYW5kbGUgKmhhbmRsZSkgewotICBVUEJfVU5VU0VEKHApOyAgLyogVXNlbGVzczsganVzdCBm
b3IgdGhlIGJlbmVmaXQgb2YgdGhlIEpJVC4gKi8KLQotICBkLT5idWZfcGFyYW0gPSBidWY7Ci0g
IGQtPnNpemVfcGFyYW0gPSBzaXplOwotICBkLT5oYW5kbGUgPSBoYW5kbGU7Ci0KLSAgaWYgKGQt
PnJlc2lkdWFsX2VuZCA+IGQtPnJlc2lkdWFsKSB7Ci0gICAgLyogV2UgaGF2ZSByZXNpZHVhbCBi
eXRlcyBmcm9tIHRoZSBsYXN0IGJ1ZmZlci4gKi8KLSAgICBhc3NlcnQoZC0+cHRyID09IGQtPnJl
c2lkdWFsKTsKLSAgfSBlbHNlIHsKLSAgICBzd2l0Y2h0b2J1ZihkLCBidWYsIGJ1ZiArIHNpemUp
OwotICB9Ci0KLSAgZC0+Y2hlY2twb2ludCA9IGQtPnB0cjsKLQotICBpZiAoZC0+c2tpcCkgewot
ICAgIHNpemVfdCBza2lwX2J5dGVzID0gZC0+c2tpcDsKLSAgICBkLT5za2lwID0gMDsKLSAgICBD
SEVDS19SRVRVUk4oc2tpcChkLCBza2lwX2J5dGVzKSk7Ci0gICAgZC0+Y2hlY2twb2ludCA9IGQt
PnB0cjsKLSAgfQotCi0gIGlmICghYnVmKSB7Ci0gICAgLyogTlVMTCBidWYgaXMgb2sgaWYgaXRz
IGVudGlyZSBzcGFuIGlzIGNvdmVyZWQgYnkgdGhlICJza2lwIiBhYm92ZSwgYnV0Ci0gICAgICog
YnkgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgInNraXAiIGRvZXNuJ3QgY292ZXIgdGhlIGJ1ZmZl
ci4gKi8KLSAgICBzZXRlcnIoZCwgIlBhc3NlZCBOVUxMIGJ1ZmZlciBvdmVyIG5vbi1za2lwcGFi
bGUgcmVnaW9uLiIpOwotICAgIHJldHVybiB1cGJfcGJkZWNvZGVyX3N1c3BlbmQoZCk7Ci0gIH0K
LQotICBpZiAoZC0+dG9wLT5ncm91cG51bSA8IDApIHsKLSAgICBDSEVDS19SRVRVUk4odXBiX3Bi
ZGVjb2Rlcl9za2lwdW5rbm93bihkLCAtMSwgMCkpOwotICAgIGQtPmNoZWNrcG9pbnQgPSBkLT5w
dHI7Ci0gIH0KLQotICByZXR1cm4gREVDT0RFX09LOwotfQotCi0vKiBTdXNwZW5kcyB0aGUgZGVj
b2RlciBhdCB0aGUgbGFzdCBjaGVja3BvaW50LCB3aXRob3V0IHNhdmluZyBhbnkgcmVzaWR1YWwK
LSAqIGJ5dGVzLiAgSWYgdGhlcmUgYXJlIGFueSB1bmNvbnN1bWVkIGJ5dGVzLCByZXR1cm5zIGEg
c2hvcnQgYnl0ZSBjb3VudC4gKi8KLXNpemVfdCB1cGJfcGJkZWNvZGVyX3N1c3BlbmQodXBiX3Bi
ZGVjb2RlciAqZCkgewotICBkLT5wYyA9IGQtPmxhc3Q7Ci0gIGlmIChkLT5jaGVja3BvaW50ID09
IGQtPnJlc2lkdWFsKSB7Ci0gICAgLyogQ2hlY2twb2ludCB3YXMgaW4gcmVzaWR1YWwgYnVmOyBu
byB1c2VyIGJ5dGVzIHdlcmUgY29uc3VtZWQuICovCi0gICAgZC0+cHRyID0gZC0+cmVzaWR1YWw7
Ci0gICAgcmV0dXJuIDA7Ci0gIH0gZWxzZSB7Ci0gICAgc2l6ZV90IGNvbnN1bWVkOwotICAgIGFz
c2VydCghaW5fcmVzaWR1YWxfYnVmKGQsIGQtPmNoZWNrcG9pbnQpKTsKLSAgICBhc3NlcnQoZC0+
YnVmID09IGQtPmJ1Zl9wYXJhbSk7Ci0KLSAgICBjb25zdW1lZCA9IGQtPmNoZWNrcG9pbnQgLSBk
LT5idWY7Ci0gICAgZC0+YnVmc3RhcnRfb2ZzICs9IGNvbnN1bWVkOwotICAgIGQtPnJlc2lkdWFs
X2VuZCA9IGQtPnJlc2lkdWFsOwotICAgIHN3aXRjaHRvYnVmKGQsIGQtPnJlc2lkdWFsLCBkLT5y
ZXNpZHVhbF9lbmQpOwotICAgIHJldHVybiBjb25zdW1lZDsKLSAgfQotfQotCi0vKiBTdXNwZW5k
cyB0aGUgZGVjb2RlciBhdCB0aGUgbGFzdCBjaGVja3BvaW50LCBhbmQgc2F2ZXMgYW55IHVuY29u
c3VtZWQKLSAqIGJ5dGVzIGluIG91ciByZXNpZHVhbCBidWZmZXIuICBUaGlzIGlzIG5lY2Vzc2Fy
eSBpZiB3ZSBuZWVkIG1vcmUgdXNlcgotICogYnl0ZXMgdG8gZm9ybSBhIGNvbXBsZXRlIHZhbHVl
LCB3aGljaCBtaWdodCBub3QgYmUgY29udGlndW91cyBpbiB0aGUKLSAqIHVzZXIncyBidWZmZXJz
LiAgQWx3YXlzIGNvbnN1bWVzIGFsbCB1c2VyIGJ5dGVzLiAqLwotc3RhdGljIHNpemVfdCBzdXNw
ZW5kX3NhdmUodXBiX3BiZGVjb2RlciAqZCkgewotICAvKiBXZSBoaXQgZW5kLW9mLWJ1ZmZlciBi
ZWZvcmUgd2UgY291bGQgcGFyc2UgYSBmdWxsIHZhbHVlLgotICAgKiBTYXZlIGFueSB1bmNvbnN1
bWVkIGJ5dGVzIChpZiBhbnkpIHRvIHRoZSByZXNpZHVhbCBidWZmZXIuICovCi0gIGQtPnBjID0g
ZC0+bGFzdDsKLQotICBpZiAoZC0+Y2hlY2twb2ludCA9PSBkLT5yZXNpZHVhbCkgewotICAgIC8q
IENoZWNrcG9pbnQgd2FzIGluIHJlc2lkdWFsIGJ1ZjsgYXBwZW5kIHVzZXIgYnl0ZShzKSB0byBy
ZXNpZHVhbCBidWYuICovCi0gICAgYXNzZXJ0KChkLT5yZXNpZHVhbF9lbmQgLSBkLT5yZXNpZHVh
bCkgKyBkLT5zaXplX3BhcmFtIDw9Ci0gICAgICAgICAgIHNpemVvZihkLT5yZXNpZHVhbCkpOwot
ICAgIGlmICghaW5fcmVzaWR1YWxfYnVmKGQsIGQtPnB0cikpIHsKLSAgICAgIGQtPmJ1ZnN0YXJ0
X29mcyAtPSAoZC0+cmVzaWR1YWxfZW5kIC0gZC0+cmVzaWR1YWwpOwotICAgIH0KLSAgICBtZW1j
cHkoZC0+cmVzaWR1YWxfZW5kLCBkLT5idWZfcGFyYW0sIGQtPnNpemVfcGFyYW0pOwotICAgIGQt
PnJlc2lkdWFsX2VuZCArPSBkLT5zaXplX3BhcmFtOwotICB9IGVsc2UgewotICAgIC8qIENoZWNr
cG9pbnQgd2FzIGluIHVzZXIgYnVmOyBvbGQgcmVzaWR1YWwgYnl0ZXMgbm90IG5lZWRlZC4gKi8K
LSAgICBzaXplX3Qgc2F2ZTsKLSAgICBhc3NlcnQoIWluX3Jlc2lkdWFsX2J1ZihkLCBkLT5jaGVj
a3BvaW50KSk7Ci0KLSAgICBkLT5wdHIgPSBkLT5jaGVja3BvaW50OwotICAgIHNhdmUgPSBjdXJi
dWZsZWZ0KGQpOwotICAgIGFzc2VydChzYXZlIDw9IHNpemVvZihkLT5yZXNpZHVhbCkpOwotICAg
IG1lbWNweShkLT5yZXNpZHVhbCwgZC0+cHRyLCBzYXZlKTsKLSAgICBkLT5yZXNpZHVhbF9lbmQg
PSBkLT5yZXNpZHVhbCArIHNhdmU7Ci0gICAgZC0+YnVmc3RhcnRfb2ZzID0gb2Zmc2V0KGQpOwot
ICB9Ci0KLSAgc3dpdGNodG9idWYoZCwgZC0+cmVzaWR1YWwsIGQtPnJlc2lkdWFsX2VuZCk7Ci0g
IHJldHVybiBkLT5zaXplX3BhcmFtOwotfQotCi0vKiBDb3BpZXMgdGhlIG5leHQgImJ5dGVzIiBi
eXRlcyBpbnRvICJidWYiIGFuZCBhZHZhbmNlcyB0aGUgc3RyZWFtLgotICogUmVxdWlyZXMgdGhh
dCB0aGlzIG1hbnkgYnl0ZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBidWZmZXIuICov
Ci1VUEJfRk9SQ0VJTkxJTkUgc3RhdGljIHZvaWQgY29uc3VtZWJ5dGVzKHVwYl9wYmRlY29kZXIg
KmQsIHZvaWQgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGJ5dGVzKSB7Ci0gIGFzc2VydChieXRlcyA8PSBjdXJidWZsZWZ0KGQpKTsKLSAgbWVt
Y3B5KGJ1ZiwgZC0+cHRyLCBieXRlcyk7Ci0gIGFkdmFuY2UoZCwgYnl0ZXMpOwotfQotCi0vKiBT
bG93IHBhdGggZm9yIGdldHRpbmcgdGhlIG5leHQgImJ5dGVzIiBieXRlcywgcmVnYXJkbGVzcyBv
ZiB3aGV0aGVyIHRoZXkgYXJlCi0gKiBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyIG9y
IG5vdC4gIFJldHVybnMgYSBzdGF0dXMgY29kZSBhcyBkZXNjcmliZWQKLSAqIGluIGRlY29kZXIu
aW50LmguICovCi1VUEJfTk9JTkxJTkUgc3RhdGljIGludDMyX3QgZ2V0Ynl0ZXNfc2xvdyh1cGJf
cGJkZWNvZGVyICpkLCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgYnl0ZXMpIHsKLSAgY29uc3Qgc2l6ZV90IGF2YWlsID0gY3VyYnVm
bGVmdChkKTsKLSAgY29uc3VtZWJ5dGVzKGQsIGJ1ZiwgYXZhaWwpOwotICBieXRlcyAtPSBhdmFp
bDsKLSAgYXNzZXJ0KGJ5dGVzID4gMCk7Ci0gIGlmIChpbl9yZXNpZHVhbF9idWYoZCwgZC0+cHRy
KSkgewotICAgIGFkdmFuY2V0b2J1ZihkLCBkLT5idWZfcGFyYW0sIGQtPnNpemVfcGFyYW0pOwot
ICB9Ci0gIGlmIChjdXJidWZsZWZ0KGQpID49IGJ5dGVzKSB7Ci0gICAgY29uc3VtZWJ5dGVzKGQs
IChjaGFyICopYnVmICsgYXZhaWwsIGJ5dGVzKTsKLSAgICByZXR1cm4gREVDT0RFX09LOwotICB9
IGVsc2UgaWYgKGQtPmRhdGFfZW5kID09IGQtPmRlbGltX2VuZCkgewotICAgIHNldGVycihkLCAi
U3VibWVzc2FnZSBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgdmFsdWUgb3IgZ3JvdXAiKTsKLSAg
ICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9zdXNwZW5kKGQpOwotICB9IGVsc2UgewotICAgIHJldHVy
biBzdXNwZW5kX3NhdmUoZCk7Ci0gIH0KLX0KLQotLyogR2V0cyB0aGUgbmV4dCAiYnl0ZXMiIGJ5
dGVzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcmUgYXZhaWxhYmxlIGluIHRoZQotICog
Y3VycmVudCBidWZmZXIgb3Igbm90LiAgUmV0dXJucyBhIHN0YXR1cyBjb2RlIGFzIGRlc2NyaWJl
ZCBpbiBkZWNvZGVyLmludC5oLgotICovCi1VUEJfRk9SQ0VJTkxJTkUgc3RhdGljIGludDMyX3Qg
Z2V0Ynl0ZXModXBiX3BiZGVjb2RlciAqZCwgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBieXRlcykgewotICBpZiAoY3VyYnVmbGVmdChk
KSA+PSBieXRlcykgewotICAgIC8qIEJ1ZmZlciBoYXMgZW5vdWdoIGRhdGEgdG8gc2F0aXNmeS4g
Ki8KLSAgICBjb25zdW1lYnl0ZXMoZCwgYnVmLCBieXRlcyk7Ci0gICAgcmV0dXJuIERFQ09ERV9P
SzsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZ2V0Ynl0ZXNfc2xvdyhkLCBidWYsIGJ5dGVzKTsK
LSAgfQotfQotCi1VUEJfTk9JTkxJTkUgc3RhdGljIHNpemVfdCBwZWVrYnl0ZXNfc2xvdyh1cGJf
cGJkZWNvZGVyICpkLCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgYnl0ZXMpIHsKLSAgc2l6ZV90IHJldCA9IGN1cmJ1ZmxlZnQoZCk7
Ci0gIG1lbWNweShidWYsIGQtPnB0ciwgcmV0KTsKLSAgaWYgKGluX3Jlc2lkdWFsX2J1ZihkLCBk
LT5wdHIpKSB7Ci0gICAgc2l6ZV90IGNvcHkgPSBVUEJfTUlOKGJ5dGVzIC0gcmV0LCBkLT5zaXpl
X3BhcmFtKTsKLSAgICBtZW1jcHkoKGNoYXIgKilidWYgKyByZXQsIGQtPmJ1Zl9wYXJhbSwgY29w
eSk7Ci0gICAgcmV0ICs9IGNvcHk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotVVBCX0ZPUkNF
SU5MSU5FIHN0YXRpYyBzaXplX3QgcGVla2J5dGVzKHVwYl9wYmRlY29kZXIgKmQsIHZvaWQgKmJ1
ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnl0ZXMp
IHsKLSAgaWYgKGN1cmJ1ZmxlZnQoZCkgPj0gYnl0ZXMpIHsKLSAgICBtZW1jcHkoYnVmLCBkLT5w
dHIsIGJ5dGVzKTsKLSAgICByZXR1cm4gYnl0ZXM7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHBl
ZWtieXRlc19zbG93KGQsIGJ1ZiwgYnl0ZXMpOwotICB9Ci19Ci0KLQotLyogRGVjb2Rpbmcgb2Yg
d2lyZSB0eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KLQotLyogU2xvdyBwYXRoIGZvciBkZWNvZGluZyBhIHZhcmludCBmcm9tIHRoZSBj
dXJyZW50IGJ1ZmZlciBwb3NpdGlvbi4KLSAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBhcyBkZXNj
cmliZWQgaW4gZGVjb2Rlci5pbnQuaC4gKi8KLVVQQl9OT0lOTElORSBpbnQzMl90IHVwYl9wYmRl
Y29kZXJfZGVjb2RlX3ZhcmludF9zbG93KHVwYl9wYmRlY29kZXIgKmQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAqdTY0KSB7
Ci0gIHVpbnQ4X3QgYnl0ZSA9IDB4ODA7Ci0gIGludCBiaXRwb3M7Ci0gICp1NjQgPSAwOwotICBm
b3IoYml0cG9zID0gMDsgYml0cG9zIDwgNzAgJiYgKGJ5dGUgJiAweDgwKTsgYml0cG9zICs9IDcp
IHsKLSAgICBpbnQzMl90IHJldCA9IGdldGJ5dGVzKGQsICZieXRlLCAxKTsKLSAgICBpZiAocmV0
ID49IDApIHJldHVybiByZXQ7Ci0gICAgKnU2NCB8PSAodWludDY0X3QpKGJ5dGUgJiAweDdGKSA8
PCBiaXRwb3M7Ci0gIH0KLSAgaWYoYml0cG9zID09IDcwICYmIChieXRlICYgMHg4MCkpIHsKLSAg
ICBzZXRlcnIoZCwga1VudGVybWluYXRlZFZhcmludCk7Ci0gICAgcmV0dXJuIHVwYl9wYmRlY29k
ZXJfc3VzcGVuZChkKTsKLSAgfQotICByZXR1cm4gREVDT0RFX09LOwotfQotCi0vKiBEZWNvZGVz
IGEgdmFyaW50IGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyIHBvc2l0aW9uLgotICogUmV0dXJucyBh
IHN0YXR1cyBjb2RlIGFzIGRlc2NyaWJlZCBpbiBkZWNvZGVyLmludC5oLiAqLwotVVBCX0ZPUkNF
SU5MSU5FIHN0YXRpYyBpbnQzMl90IGRlY29kZV92YXJpbnQodXBiX3BiZGVjb2RlciAqZCwgdWlu
dDY0X3QgKnU2NCkgewotICBpZiAoY3VyYnVmbGVmdChkKSA+IDAgJiYgISgqZC0+cHRyICYgMHg4
MCkpIHsKLSAgICAqdTY0ID0gKmQtPnB0cjsKLSAgICBhZHZhbmNlKGQsIDEpOwotICAgIHJldHVy
biBERUNPREVfT0s7Ci0gIH0gZWxzZSBpZiAoY3VyYnVmbGVmdChkKSA+PSAxMCkgewotICAgIC8q
IEZhc3QgY2FzZS4gKi8KLSAgICB1cGJfZGVjb2RlcmV0IHIgPSB1cGJfdmRlY29kZV9mYXN0KGQt
PnB0cik7Ci0gICAgaWYgKHIucCA9PSBOVUxMKSB7Ci0gICAgICBzZXRlcnIoZCwga1VudGVybWlu
YXRlZFZhcmludCk7Ci0gICAgICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9zdXNwZW5kKGQpOwotICAg
IH0KLSAgICBhZHZhbmNlKGQsIHIucCAtIGQtPnB0cik7Ci0gICAgKnU2NCA9IHIudmFsOwotICAg
IHJldHVybiBERUNPREVfT0s7Ci0gIH0gZWxzZSB7Ci0gICAgLyogU2xvdyBjYXNlIC0tIHZhcmlu
dCBzcGFucyBidWZmZXIgc2VhbS4gKi8KLSAgICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9kZWNvZGVf
dmFyaW50X3Nsb3coZCwgdTY0KTsKLSAgfQotfQotCi0vKiBEZWNvZGVzIGEgMzItYml0IHZhcmlu
dCBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlciBwb3NpdGlvbi4KLSAqIFJldHVybnMgYSBzdGF0dXMg
Y29kZSBhcyBkZXNjcmliZWQgaW4gZGVjb2Rlci5pbnQuaC4gKi8KLVVQQl9GT1JDRUlOTElORSBz
dGF0aWMgaW50MzJfdCBkZWNvZGVfdjMyKHVwYl9wYmRlY29kZXIgKmQsIHVpbnQzMl90ICp1MzIp
IHsKLSAgdWludDY0X3QgdTY0OwotICBpbnQzMl90IHJldCA9IGRlY29kZV92YXJpbnQoZCwgJnU2
NCk7Ci0gIGlmIChyZXQgPj0gMCkgcmV0dXJuIHJldDsKLSAgaWYgKHU2NCA+IFVJTlQzMl9NQVgp
IHsKLSAgICBzZXRlcnIoZCwgIlVudGVybWluYXRlZCAzMi1iaXQgdmFyaW50Iik7Ci0gICAgLyog
VE9ETyhoYWJlcm1hbikgZ3VhcmFudGVlIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm4gaXMgPj0g
MCBzb21laG93LAotICAgICAqIHNvIHdlIGtub3cgdGhpcyBwYXRoIHdpbGwgYWx3YXlzIGJlIHRy
ZWF0ZWQgYXMgZXJyb3IgYnkgb3VyIGNhbGxlci4KLSAgICAgKiBSaWdodCBub3cgdGhlIHNpemVf
dCAtPiBpbnQzMl90IGNhbiBvdmVyZmxvdyBhbmQgcHJvZHVjZSBuZWdhdGl2ZSB2YWx1ZXMuCi0g
ICAgICovCi0gICAgKnUzMiA9IDA7Ci0gICAgcmV0dXJuIHVwYl9wYmRlY29kZXJfc3VzcGVuZChk
KTsKLSAgfQotICAqdTMyID0gdTY0OwotICByZXR1cm4gREVDT0RFX09LOwotfQotCi0vKiBEZWNv
ZGVzIGEgZml4ZWQzMiBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlciBwb3NpdGlvbi4KLSAqIFJldHVy
bnMgYSBzdGF0dXMgY29kZSBhcyBkZXNjcmliZWQgaW4gZGVjb2Rlci5pbnQuaC4KLSAqIFRPRE86
IHByb3BlciBieXRlIHN3YXBwaW5nIGZvciBiaWctZW5kaWFuIG1hY2hpbmVzLiAqLwotVVBCX0ZP
UkNFSU5MSU5FIHN0YXRpYyBpbnQzMl90IGRlY29kZV9maXhlZDMyKHVwYl9wYmRlY29kZXIgKmQs
IHVpbnQzMl90ICp1MzIpIHsKLSAgcmV0dXJuIGdldGJ5dGVzKGQsIHUzMiwgNCk7Ci19Ci0KLS8q
IERlY29kZXMgYSBmaXhlZDY0IGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyIHBvc2l0aW9uLgotICog
UmV0dXJucyBhIHN0YXR1cyBjb2RlIGFzIGRlc2NyaWJlZCBpbiBkZWNvZGVyLmludC5oLgotICog
VE9ETzogcHJvcGVyIGJ5dGUgc3dhcHBpbmcgZm9yIGJpZy1lbmRpYW4gbWFjaGluZXMuICovCi1V
UEJfRk9SQ0VJTkxJTkUgc3RhdGljIGludDMyX3QgZGVjb2RlX2ZpeGVkNjQodXBiX3BiZGVjb2Rl
ciAqZCwgdWludDY0X3QgKnU2NCkgewotICByZXR1cm4gZ2V0Ynl0ZXMoZCwgdTY0LCA4KTsKLX0K
LQotLyogTm9uLXN0YXRpYyB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zLgotICogVGhl
c2UgYXJlIGNhbGxlZCBieSB0aGUgSklUIGZvciBmYWxsYmFjayBwYXRocy4gKi8KLWludDMyX3Qg
dXBiX3BiZGVjb2Rlcl9kZWNvZGVfZjMyKHVwYl9wYmRlY29kZXIgKmQsIHVpbnQzMl90ICp1MzIp
IHsKLSAgcmV0dXJuIGRlY29kZV9maXhlZDMyKGQsIHUzMik7Ci19Ci0KLWludDMyX3QgdXBiX3Bi
ZGVjb2Rlcl9kZWNvZGVfZjY0KHVwYl9wYmRlY29kZXIgKmQsIHVpbnQ2NF90ICp1NjQpIHsKLSAg
cmV0dXJuIGRlY29kZV9maXhlZDY0KGQsIHU2NCk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgYXNfZG91
YmxlKHVpbnQ2NF90IG4pIHsgZG91YmxlIGQ7IG1lbWNweSgmZCwgJm4sIDgpOyByZXR1cm4gZDsg
fQotc3RhdGljIGZsb2F0ICBhc19mbG9hdCh1aW50MzJfdCBuKSAgeyBmbG9hdCAgZjsgbWVtY3B5
KCZmLCAmbiwgNCk7IHJldHVybiBmOyB9Ci0KLS8qIFB1c2hlcyBhIGZyYW1lIG9udG8gdGhlIGRl
Y29kZXIgc3RhY2suICovCi1zdGF0aWMgYm9vbCBkZWNvZGVyX3B1c2godXBiX3BiZGVjb2RlciAq
ZCwgdWludDY0X3QgZW5kKSB7Ci0gIHVwYl9wYmRlY29kZXJfZnJhbWUgKmZyID0gZC0+dG9wOwot
Ci0gIGlmIChlbmQgPiBmci0+ZW5kX29mcykgewotICAgIHNldGVycihkLCBrUGJEZWNvZGVyU3Vi
bWVzc2FnZVRvb0xvbmcpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlmIChmciA9PSBk
LT5saW1pdCkgewotICAgIHNldGVycihkLCBrUGJEZWNvZGVyU3RhY2tPdmVyZmxvdyk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnIrKzsKLSAgZnItPmVuZF9vZnMgPSBlbmQ7Ci0gIGZy
LT5kaXNwYXRjaCA9IE5VTEw7Ci0gIGZyLT5ncm91cG51bSA9IDA7Ci0gIGQtPnRvcCA9IGZyOwot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgcHVzaHRhZ2RlbGltKHVwYl9wYmRlY29k
ZXIgKmQsIHVpbnQzMl90IGFyZykgewotICAvKiBXaGlsZSB3ZSBleHBlY3QgdG8gc2VlIGFuICJl
bmQiIHRhZyAoZWl0aGVyIEVOREdST1VQIG9yIGEgbm9uLXNlcXVlbmNlCi0gICAqIGZpZWxkIG51
bWJlcikgcHJpb3IgdG8gaGl0dGluZyBhbnkgZW5jbG9zaW5nIHN1Ym1lc3NhZ2UgZW5kLCBwdXNo
aW5nIG91cgotICAgKiBleGlzdGluZyBkZWxpbSBlbmQgcHJldmVudHMgdXMgZnJvbSBjb250aW51
aW5nIHRvIHBhcnNlIHZhbHVlcyBmcm9tIGEKLSAgICogY29ycnVwdCBwcm90byB0aGF0IGRvZXNu
J3QgZ2l2ZSB1cyBhbiBFTkQgdGFnIGluIHRpbWUuICovCi0gIGlmICghZGVjb2Rlcl9wdXNoKGQs
IGQtPnRvcC0+ZW5kX29mcykpCi0gICAgcmV0dXJuIGZhbHNlOwotICBkLT50b3AtPmdyb3VwbnVt
ID0gYXJnOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotLyogUG9wcyBhIGZyYW1lIGZyb20gdGhlIGRl
Y29kZXIgc3RhY2suICovCi1zdGF0aWMgdm9pZCBkZWNvZGVyX3BvcCh1cGJfcGJkZWNvZGVyICpk
KSB7IGQtPnRvcC0tOyB9Ci0KLVVQQl9OT0lOTElORSBpbnQzMl90IHVwYl9wYmRlY29kZXJfY2hl
Y2t0YWdfc2xvdyh1cGJfcGJkZWNvZGVyICpkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGV4cGVjdGVkKSB7Ci0gIHVpbnQ2NF90IGRh
dGEgPSAwOwotICBzaXplX3QgYnl0ZXMgPSB1cGJfdmFsdWVfc2l6ZShleHBlY3RlZCk7Ci0gIHNp
emVfdCByZWFkID0gcGVla2J5dGVzKGQsICZkYXRhLCBieXRlcyk7Ci0gIGlmIChyZWFkID09IGJ5
dGVzICYmIGRhdGEgPT0gZXhwZWN0ZWQpIHsKLSAgICAvKiBBZHZhbmNlIHBhc3QgbWF0Y2hlZCBi
eXRlcy4gKi8KLSAgICBpbnQzMl90IG9rID0gZ2V0Ynl0ZXMoZCwgJmRhdGEsIHJlYWQpOwotICAg
IFVQQl9BU1NFUlRfVkFSKG9rLCBvayA8IDApOwotICAgIHJldHVybiBERUNPREVfT0s7Ci0gIH0g
ZWxzZSBpZiAocmVhZCA8IGJ5dGVzICYmIG1lbWNtcCgmZGF0YSwgJmV4cGVjdGVkLCByZWFkKSA9
PSAwKSB7Ci0gICAgcmV0dXJuIHN1c3BlbmRfc2F2ZShkKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gREVDT0RFX01JU01BVENIOwotICB9Ci19Ci0KLWludDMyX3QgdXBiX3BiZGVjb2Rlcl9za2lw
dW5rbm93bih1cGJfcGJkZWNvZGVyICpkLCBpbnQzMl90IGZpZWxkbnVtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgd2lyZV90eXBlKSB7Ci0gIGlmIChmaWVsZG51
bSA+PSAwKQotICAgIGdvdG8gaGF2ZV90YWc7Ci0KLSAgd2hpbGUgKHRydWUpIHsKLSAgICB1aW50
MzJfdCB0YWc7Ci0gICAgQ0hFQ0tfUkVUVVJOKGRlY29kZV92MzIoZCwgJnRhZykpOwotICAgIHdp
cmVfdHlwZSA9IHRhZyAmIDB4NzsKLSAgICBmaWVsZG51bSA9IHRhZyA+PiAzOwotCi1oYXZlX3Rh
ZzoKLSAgICBpZiAoZmllbGRudW0gPT0gMCkgewotICAgICAgc2V0ZXJyKGQsICJTYXcgaW52YWxp
ZCBmaWVsZCBudW1iZXIgKDApIik7Ci0gICAgICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9zdXNwZW5k
KGQpOwotICAgIH0KLQotICAgIC8qIFRPRE86IGRlbGl2ZXIgdG8gdW5rbm93biBmaWVsZCBjYWxs
YmFjay4gKi8KLSAgICBzd2l0Y2ggKHdpcmVfdHlwZSkgewotICAgICAgY2FzZSBVUEJfV0lSRV9U
WVBFXzMyQklUOgotICAgICAgICBDSEVDS19SRVRVUk4oc2tpcChkLCA0KSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBVUEJfV0lSRV9UWVBFXzY0QklUOgotICAgICAgICBDSEVDS19SRVRV
Uk4oc2tpcChkLCA4KSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfV0lSRV9UWVBF
X1ZBUklOVDogewotICAgICAgICB1aW50NjRfdCB1NjQ7Ci0gICAgICAgIENIRUNLX1JFVFVSTihk
ZWNvZGVfdmFyaW50KGQsICZ1NjQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBj
YXNlIFVQQl9XSVJFX1RZUEVfREVMSU1JVEVEOiB7Ci0gICAgICAgIHVpbnQzMl90IGxlbjsKLSAg
ICAgICAgQ0hFQ0tfUkVUVVJOKGRlY29kZV92MzIoZCwgJmxlbikpOwotICAgICAgICBDSEVDS19S
RVRVUk4oc2tpcChkLCBsZW4pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNl
IFVQQl9XSVJFX1RZUEVfU1RBUlRfR1JPVVA6Ci0gICAgICAgIENIRUNLX1NVU1BFTkQocHVzaHRh
Z2RlbGltKGQsIC1maWVsZG51bSkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVVBCX1dJ
UkVfVFlQRV9FTkRfR1JPVVA6Ci0gICAgICAgIGlmIChmaWVsZG51bSA9PSAtZC0+dG9wLT5ncm91
cG51bSkgewotICAgICAgICAgIGRlY29kZXJfcG9wKGQpOwotICAgICAgICB9IGVsc2UgaWYgKGZp
ZWxkbnVtID09IGQtPnRvcC0+Z3JvdXBudW0pIHsKLSAgICAgICAgICByZXR1cm4gREVDT0RFX0VO
REdST1VQOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHNldGVycihkLCAiVW5tYXRjaGVk
IEVOREdST1VQIHRhZy4iKTsKLSAgICAgICAgICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9zdXNwZW5k
KGQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
c2V0ZXJyKGQsICJJbnZhbGlkIHdpcmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gdXBiX3BiZGVj
b2Rlcl9zdXNwZW5kKGQpOwotICAgIH0KLQotICAgIGlmIChkLT50b3AtPmdyb3VwbnVtID49IDAp
IHsKLSAgICAgIHJldHVybiBERUNPREVfT0s7Ci0gICAgfQotCi0gICAgLyogVW5rbm93biBncm91
cCAtLSBjb250aW51ZSBsb29waW5nIG92ZXIgdW5rbm93biBmaWVsZHMuICovCi0gICAgY2hlY2tw
b2ludChkKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBnb3RvX2VuZG1zZyh1cGJfcGJkZWNvZGVy
ICpkKSB7Ci0gIHVwYl92YWx1ZSB2OwotICBib29sIGZvdW5kID0gdXBiX2ludHRhYmxlX2xvb2t1
cDMyKGQtPnRvcC0+ZGlzcGF0Y2gsIERJU1BBVENIX0VORE1TRywgJnYpOwotICBVUEJfQVNTRVJU
X1ZBUihmb3VuZCwgZm91bmQpOwotICBkLT5wYyA9IGQtPnRvcC0+YmFzZSArIHVwYl92YWx1ZV9n
ZXR1aW50NjQodik7Ci19Ci0KLS8qIFBhcnNlcyBhIHRhZyBhbmQganVtcHMgdG8gdGhlIGNvcnJl
c3BvbmRpbmcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gZm9yIHRoaXMKLSAqIGZpZWxkLgotICoKLSAq
IElmIHRoZSB0YWcgaXMgdW5rbm93biAob3IgdGhlIHdpcmUgdHlwZSBkb2Vzbid0IG1hdGNoKSwg
cGFyc2VzIHRoZSBmaWVsZCBhcwotICogdW5rbm93bi4gIElmIHRoZSB0YWcgaXMgYSB2YWxpZCBF
TkRHUk9VUCB0YWcsIGp1bXBzIHRvIHRoZSBieXRlY29kZQotICogaW5zdHJ1Y3Rpb24gZm9yIHRo
ZSBlbmQgb2YgbWVzc2FnZS4gKi8KLXN0YXRpYyBpbnQzMl90IGRpc3BhdGNoKHVwYl9wYmRlY29k
ZXIgKmQpIHsKLSAgdXBiX2ludHRhYmxlICpkaXNwYXRjaCA9IGQtPnRvcC0+ZGlzcGF0Y2g7Ci0g
IHVpbnQzMl90IHRhZzsKLSAgdWludDhfdCB3aXJlX3R5cGU7Ci0gIHVpbnQzMl90IGZpZWxkbnVt
OwotICB1cGJfdmFsdWUgdmFsOwotICBpbnQzMl90IHJldHZhbDsKLQotICAvKiBEZWNvZGUgdGFn
LiAqLwotICBDSEVDS19SRVRVUk4oZGVjb2RlX3YzMihkLCAmdGFnKSk7Ci0gIHdpcmVfdHlwZSA9
IHRhZyAmIDB4NzsKLSAgZmllbGRudW0gPSB0YWcgPj4gMzsKLQotICAvKiBMb29rdXAgdGFnLiAg
QmVjYXVzZSBvZiBwYWNrZWQvbm9uLXBhY2tlZCBjb21wYXRpYmlsaXR5LCB3ZSBoYXZlIHRvCi0g
ICAqIGNoZWNrIHRoZSB3aXJlIHR5cGUgYWdhaW5zdCB0d28gcG9zc2liaWxpdGllcy4gKi8KLSAg
aWYgKGZpZWxkbnVtICE9IERJU1BBVENIX0VORE1TRyAmJgotICAgICAgdXBiX2ludHRhYmxlX2xv
b2t1cDMyKGRpc3BhdGNoLCBmaWVsZG51bSwgJnZhbCkpIHsKLSAgICB1aW50NjRfdCB2ID0gdXBi
X3ZhbHVlX2dldHVpbnQ2NCh2YWwpOwotICAgIGlmICh3aXJlX3R5cGUgPT0gKHYgJiAweGZmKSkg
ewotICAgICAgZC0+cGMgPSBkLT50b3AtPmJhc2UgKyAodiA+PiAxNik7Ci0gICAgICByZXR1cm4g
REVDT0RFX09LOwotICAgIH0gZWxzZSBpZiAod2lyZV90eXBlID09ICgodiA+PiA4KSAmIDB4ZmYp
KSB7Ci0gICAgICBib29sIGZvdW5kID0KLSAgICAgICAgICB1cGJfaW50dGFibGVfbG9va3VwKGRp
c3BhdGNoLCBmaWVsZG51bSArIFVQQl9NQVhfRklFTEROVU1CRVIsICZ2YWwpOwotICAgICAgVVBC
X0FTU0VSVF9WQVIoZm91bmQsIGZvdW5kKTsKLSAgICAgIGQtPnBjID0gZC0+dG9wLT5iYXNlICsg
dXBiX3ZhbHVlX2dldHVpbnQ2NCh2YWwpOwotICAgICAgcmV0dXJuIERFQ09ERV9PSzsKLSAgICB9
Ci0gIH0KLQotICAvKiBXZSBoYXZlIHNvbWUgdW5rbm93biBmaWVsZHMgKG9yIEVOREdST1VQKSB0
byBwYXJzZS4gIFRoZSBESVNQQVRDSCBvciBUQUcKLSAgICogYnl0ZWNvZGUgdGhhdCB0cmlnZ2Vy
ZWQgdGhpcyBpcyBwcmVjZWRlZCBieSBhIENIRUNLREVMSU0gYnl0ZWNvZGUgd2hpY2gKLSAgICog
d2UgbmVlZCB0byBiYWNrIHVwIHRvLCBzbyB0aGF0IHdoZW4gd2UncmUgZG9uZSBza2lwcGluZyB1
bmtub3duIGRhdGEgd2UKLSAgICogY2FuIHJlLWNoZWNrIHRoZSBkZWxpbWl0ZWQgZW5kLiAqLwot
ICBkLT5sYXN0LS07ICAvKiBOZWNlc3NhcnkgaWYgd2UgZ2V0IHN1c3BlbmRlZCAqLwotICBkLT5w
YyA9IGQtPmxhc3Q7Ci0gIGFzc2VydChnZXRvcCgqZC0+bGFzdCkgPT0gT1BfQ0hFQ0tERUxJTSk7
Ci0KLSAgLyogVW5rbm93biBmaWVsZCBvciBFTkRHUk9VUC4gKi8KLSAgcmV0dmFsID0gdXBiX3Bi
ZGVjb2Rlcl9za2lwdW5rbm93bihkLCBmaWVsZG51bSwgd2lyZV90eXBlKTsKLQotICBDSEVDS19S
RVRVUk4ocmV0dmFsKTsKLQotICBpZiAocmV0dmFsID09IERFQ09ERV9FTkRHUk9VUCkgewotICAg
IGdvdG9fZW5kbXNnKGQpOwotICAgIHJldHVybiBERUNPREVfT0s7Ci0gIH0KLQotICByZXR1cm4g
REVDT0RFX09LOwotfQotCi0vKiBDYWxsZXJzIGtub3cgdGhhdCB0aGUgc3RhY2sgaXMgbW9yZSB0
aGFuIG9uZSBkZWVwIGJlY2F1c2UgdGhlIG9wY29kZXMgdGhhdAotICogY2FsbCB0aGlzIG9ubHkg
b2NjdXIgYWZ0ZXIgUFVTSCBvcGVyYXRpb25zLiAqLwotdXBiX3BiZGVjb2Rlcl9mcmFtZSAqb3V0
ZXJfZnJhbWUodXBiX3BiZGVjb2RlciAqZCkgewotICBhc3NlcnQoZC0+dG9wICE9IGQtPnN0YWNr
KTsKLSAgcmV0dXJuIGQtPnRvcCAtIDE7Ci19Ci0KLQotLyogVGhlIG1haW4gZGVjb2RpbmcgbG9v
cCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
LQotLyogVGhlIG1haW4gZGVjb2RlciBWTSBmdW5jdGlvbi4gIFVzZXMgdHJhZGl0aW9uYWwgYnl0
ZWNvZGUgZGlzcGF0Y2ggbG9vcCB3aXRoIGEKLSAqIHN3aXRjaCgpIHN0YXRlbWVudC4gKi8KLXNp
emVfdCBydW5fZGVjb2Rlcl92bSh1cGJfcGJkZWNvZGVyICpkLCBjb25zdCBtZ3JvdXAgKmdyb3Vw
LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9idWZoYW5kbGUqIGhhbmRsZSkgewot
Ci0jZGVmaW5lIFZNQ0FTRShvcCwgY29kZSkgXAotICBjYXNlIG9wOiB7IGNvZGU7IGlmIChjb25z
dW1lc19pbnB1dChvcCkpIGNoZWNrcG9pbnQoZCk7IGJyZWFrOyB9Ci0jZGVmaW5lIFBSSU1JVElW
RV9PUCh0eXBlLCB3dCwgbmFtZSwgY29udmZ1bmMsIGN0eXBlKSBcCi0gIFZNQ0FTRShPUF9QQVJT
RV8gIyMgdHlwZSwgeyBcCi0gICAgY3R5cGUgdmFsOyBcCi0gICAgQ0hFQ0tfUkVUVVJOKGRlY29k
ZV8gIyMgd3QoZCwgJnZhbCkpOyBcCi0gICAgdXBiX3NpbmtfcHV0ICMjIG5hbWUoJmQtPnRvcC0+
c2luaywgYXJnLCAoY29udmZ1bmMpKHZhbCkpOyBcCi0gIH0pCi0KLSAgd2hpbGUoMSkgewotICAg
IGludDMyX3QgaW5zdHJ1Y3Rpb247Ci0gICAgb3Bjb2RlIG9wOwotICAgIHVpbnQzMl90IGFyZzsK
LSAgICBpbnQzMl90IGxvbmdvZnM7Ci0KLSAgICBkLT5sYXN0ID0gZC0+cGM7Ci0gICAgaW5zdHJ1
Y3Rpb24gPSAqZC0+cGMrKzsKLSAgICBvcCA9IGdldG9wKGluc3RydWN0aW9uKTsKLSAgICBhcmcg
PSBpbnN0cnVjdGlvbiA+PiA4OwotICAgIGxvbmdvZnMgPSBhcmc7Ci0gICAgYXNzZXJ0KGQtPnB0
ciAhPSBkLT5yZXNpZHVhbF9lbmQpOwotICAgIFVQQl9VTlVTRUQoZ3JvdXApOwotI2lmZGVmIFVQ
Ql9EVU1QX0JZVEVDT0RFCi0gICAgZnByaW50ZihzdGRlcnIsICJzX29mcz0lZCBidWZfb2ZzPSVk
IGRhdGFfcmVtPSVkIGJ1Zl9yZW09JWQgZGVsaW1fcmVtPSVkICIKLSAgICAgICAgICAgICAgICAg
ICAgIiV4ICVzICglZClcbiIsCi0gICAgICAgICAgICAoaW50KW9mZnNldChkKSwKLSAgICAgICAg
ICAgIChpbnQpKGQtPnB0ciAtIGQtPmJ1ZiksCi0gICAgICAgICAgICAoaW50KShkLT5kYXRhX2Vu
ZCAtIGQtPnB0ciksCi0gICAgICAgICAgICAoaW50KShkLT5lbmQgLSBkLT5wdHIpLAotICAgICAg
ICAgICAgKGludCkoKGQtPnRvcC0+ZW5kX29mcyAtIGQtPmJ1ZnN0YXJ0X29mcykgLSAoZC0+cHRy
IC0gZC0+YnVmKSksCi0gICAgICAgICAgICAoaW50KShkLT5wYyAtIDEgLSBncm91cC0+Ynl0ZWNv
ZGUpLAotICAgICAgICAgICAgdXBiX3BiZGVjb2Rlcl9nZXRvcG5hbWUob3ApLAotICAgICAgICAg
ICAgYXJnKTsKLSNlbmRpZgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgIC8qIFRlY2huaWNhbGx5
LCB3ZSBhcmUgbG9zaW5nIGRhdGEgaWYgd2Ugc2VlIGEgMzItYml0IHZhcmludCB0aGF0IGlzIG5v
dAotICAgICAgICogcHJvcGVybHkgc2lnbi1leHRlbmRlZC4gIFdlIGNvdWxkIGRldGVjdCB0aGlz
IGFuZCBlcnJvciBhYm91dCB0aGUgZGF0YQotICAgICAgICogbG9zcywgYnV0IHByb3RvMiBkb2Vz
IG5vdCBkbyB0aGlzLCBzbyB3ZSBwYXNzLiAqLwotICAgICAgUFJJTUlUSVZFX09QKElOVDMyLCAg
ICB2YXJpbnQsICBpbnQzMiwgIGludDMyX3QsICAgICAgdWludDY0X3QpCi0gICAgICBQUklNSVRJ
VkVfT1AoSU5UNjQsICAgIHZhcmludCwgIGludDY0LCAgaW50NjRfdCwgICAgICB1aW50NjRfdCkK
LSAgICAgIFBSSU1JVElWRV9PUChVSU5UMzIsICAgdmFyaW50LCAgdWludDMyLCB1aW50MzJfdCwg
ICAgIHVpbnQ2NF90KQotICAgICAgUFJJTUlUSVZFX09QKFVJTlQ2NCwgICB2YXJpbnQsICB1aW50
NjQsIHVpbnQ2NF90LCAgICAgdWludDY0X3QpCi0gICAgICBQUklNSVRJVkVfT1AoRklYRUQzMiwg
IGZpeGVkMzIsIHVpbnQzMiwgdWludDMyX3QsICAgICB1aW50MzJfdCkKLSAgICAgIFBSSU1JVElW
RV9PUChGSVhFRDY0LCAgZml4ZWQ2NCwgdWludDY0LCB1aW50NjRfdCwgICAgIHVpbnQ2NF90KQot
ICAgICAgUFJJTUlUSVZFX09QKFNGSVhFRDMyLCBmaXhlZDMyLCBpbnQzMiwgIGludDMyX3QsICAg
ICAgdWludDMyX3QpCi0gICAgICBQUklNSVRJVkVfT1AoU0ZJWEVENjQsIGZpeGVkNjQsIGludDY0
LCAgaW50NjRfdCwgICAgICB1aW50NjRfdCkKLSAgICAgIFBSSU1JVElWRV9PUChCT09MLCAgICAg
dmFyaW50LCAgYm9vbCwgICBib29sLCAgICAgICAgIHVpbnQ2NF90KQotICAgICAgUFJJTUlUSVZF
X09QKERPVUJMRSwgICBmaXhlZDY0LCBkb3VibGUsIGFzX2RvdWJsZSwgICAgdWludDY0X3QpCi0g
ICAgICBQUklNSVRJVkVfT1AoRkxPQVQsICAgIGZpeGVkMzIsIGZsb2F0LCAgYXNfZmxvYXQsICAg
ICB1aW50MzJfdCkKLSAgICAgIFBSSU1JVElWRV9PUChTSU5UMzIsICAgdmFyaW50LCAgaW50MzIs
ICB1cGJfenpkZWNfMzIsIHVpbnQ2NF90KQotICAgICAgUFJJTUlUSVZFX09QKFNJTlQ2NCwgICB2
YXJpbnQsICBpbnQ2NCwgIHVwYl96emRlY182NCwgdWludDY0X3QpCi0KLSAgICAgIFZNQ0FTRShP
UF9TRVRESVNQQVRDSCwKLSAgICAgICAgZC0+dG9wLT5iYXNlID0gZC0+cGMgLSAxOwotICAgICAg
ICBtZW1jcHkoJmQtPnRvcC0+ZGlzcGF0Y2gsIGQtPnBjLCBzaXplb2Yodm9pZCopKTsKLSAgICAg
ICAgZC0+cGMgKz0gc2l6ZW9mKHZvaWQqKSAvIHNpemVvZih1aW50MzJfdCk7Ci0gICAgICApCi0g
ICAgICBWTUNBU0UoT1BfU1RBUlRNU0csCi0gICAgICAgIENIRUNLX1NVU1BFTkQodXBiX3Npbmtf
c3RhcnRtc2coJmQtPnRvcC0+c2luaykpOwotICAgICAgKQotICAgICAgVk1DQVNFKE9QX0VORE1T
RywKLSAgICAgICAgQ0hFQ0tfU1VTUEVORCh1cGJfc2lua19lbmRtc2coJmQtPnRvcC0+c2luaywg
ZC0+c3RhdHVzKSk7Ci0gICAgICApCi0gICAgICBWTUNBU0UoT1BfU1RBUlRTRVEsCi0gICAgICAg
IHVwYl9wYmRlY29kZXJfZnJhbWUgKm91dGVyID0gb3V0ZXJfZnJhbWUoZCk7Ci0gICAgICAgIENI
RUNLX1NVU1BFTkQodXBiX3Npbmtfc3RhcnRzZXEoJm91dGVyLT5zaW5rLCBhcmcsICZkLT50b3At
PnNpbmspKTsKLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9FTkRTRVEsCi0gICAgICAgIENIRUNL
X1NVU1BFTkQodXBiX3NpbmtfZW5kc2VxKCZkLT50b3AtPnNpbmssIGFyZykpOwotICAgICAgKQot
ICAgICAgVk1DQVNFKE9QX1NUQVJUU1VCTVNHLAotICAgICAgICB1cGJfcGJkZWNvZGVyX2ZyYW1l
ICpvdXRlciA9IG91dGVyX2ZyYW1lKGQpOwotICAgICAgICBDSEVDS19TVVNQRU5EKHVwYl9zaW5r
X3N0YXJ0c3VibXNnKCZvdXRlci0+c2luaywgYXJnLCAmZC0+dG9wLT5zaW5rKSk7Ci0gICAgICAp
Ci0gICAgICBWTUNBU0UoT1BfRU5EU1VCTVNHLAotICAgICAgICBDSEVDS19TVVNQRU5EKHVwYl9z
aW5rX2VuZHN1Ym1zZygmZC0+dG9wLT5zaW5rLCBhcmcpKTsKLSAgICAgICkKLSAgICAgIFZNQ0FT
RShPUF9TVEFSVFNUUiwKLSAgICAgICAgdWludDMyX3QgbGVuID0gZGVsaW1fcmVtYWluaW5nKGQp
OwotICAgICAgICB1cGJfcGJkZWNvZGVyX2ZyYW1lICpvdXRlciA9IG91dGVyX2ZyYW1lKGQpOwot
ICAgICAgICBDSEVDS19TVVNQRU5EKHVwYl9zaW5rX3N0YXJ0c3RyKCZvdXRlci0+c2luaywgYXJn
LCBsZW4sICZkLT50b3AtPnNpbmspKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwKSB7Ci0gICAgICAg
ICAgZC0+cGMrKzsgIC8qIFNraXAgT1BfU1RSSU5HLiAqLwotICAgICAgICB9Ci0gICAgICApCi0g
ICAgICBWTUNBU0UoT1BfU1RSSU5HLAotICAgICAgICB1aW50MzJfdCBsZW4gPSBjdXJidWZsZWZ0
KGQpOwotICAgICAgICBzaXplX3QgbiA9IHVwYl9zaW5rX3B1dHN0cmluZygmZC0+dG9wLT5zaW5r
LCBhcmcsIGQtPnB0ciwgbGVuLCBoYW5kbGUpOwotICAgICAgICBpZiAobiA+IGxlbikgewotICAg
ICAgICAgIGlmIChuID4gZGVsaW1fcmVtYWluaW5nKGQpKSB7Ci0gICAgICAgICAgICBzZXRlcnIo
ZCwgIlRyaWVkIHRvIHNraXAgcGFzdCBlbmQgb2Ygc3RyaW5nLiIpOwotICAgICAgICAgICAgcmV0
dXJuIHVwYl9wYmRlY29kZXJfc3VzcGVuZChkKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaW50MzJfdCByZXQgPSBza2lwKGQsIG4pOwotICAgICAgICAgICAgLyogVGhpcyBzaG91
bGRuJ3QgcmV0dXJuIERFQ09ERV9PSywgYmVjYXVzZSBuID4gbGVuLiAqLwotICAgICAgICAgICAg
YXNzZXJ0KHJldCA+PSAwKTsKLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGFkdmFuY2UoZCwgbik7Ci0gICAgICAgIGlmIChuIDwgbGVuIHx8
IGQtPmRlbGltX2VuZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgLyogV2UgYXJlbid0IGZpbmlzaGVk
IHdpdGggdGhpcyBzdHJpbmcgeWV0LiAqLwotICAgICAgICAgIGQtPnBjLS07ICAvKiBSZXBlYXQg
T1BfU1RSSU5HLiAqLwotICAgICAgICAgIGlmIChuID4gMCkgY2hlY2twb2ludChkKTsKLSAgICAg
ICAgICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9zdXNwZW5kKGQpOwotICAgICAgICB9Ci0gICAgICAp
Ci0gICAgICBWTUNBU0UoT1BfRU5EU1RSLAotICAgICAgICBDSEVDS19TVVNQRU5EKHVwYl9zaW5r
X2VuZHN0cigmZC0+dG9wLT5zaW5rLCBhcmcpKTsKLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9Q
VVNIVEFHREVMSU0sCi0gICAgICAgIENIRUNLX1NVU1BFTkQocHVzaHRhZ2RlbGltKGQsIGFyZykp
OwotICAgICAgKQotICAgICAgVk1DQVNFKE9QX1NFVEJJR0dST1VQTlVNLAotICAgICAgICBkLT50
b3AtPmdyb3VwbnVtID0gKmQtPnBjKys7Ci0gICAgICApCi0gICAgICBWTUNBU0UoT1BfUE9QLAot
ICAgICAgICBhc3NlcnQoZC0+dG9wID4gZC0+c3RhY2spOwotICAgICAgICBkZWNvZGVyX3BvcChk
KTsKLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9QVVNITEVOREVMSU0sCi0gICAgICAgIHVpbnQz
Ml90IGxlbjsKLSAgICAgICAgQ0hFQ0tfUkVUVVJOKGRlY29kZV92MzIoZCwgJmxlbikpOwotICAg
ICAgICBDSEVDS19TVVNQRU5EKGRlY29kZXJfcHVzaChkLCBvZmZzZXQoZCkgKyBsZW4pKTsKLSAg
ICAgICAgc2V0X2RlbGltX2VuZChkKTsKLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9TRVRERUxJ
TSwKLSAgICAgICAgc2V0X2RlbGltX2VuZChkKTsKLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9D
SEVDS0RFTElNLAotICAgICAgICAvKiBXZSBhcmUgZ3VhcmFudGVlZCBvZiB0aGlzIGFzc2VydCBi
ZWNhdXNlIHdlIG5ldmVyIGFsbG93IG91cnNlbHZlcyB0bwotICAgICAgICAgKiBjb25zdW1lIGJ5
dGVzIGJleW9uZCBkYXRhX2VuZCwgd2hpY2ggY292ZXJzIGRlbGltX2VuZCB3aGVuIG5vbi1OVUxM
LgotICAgICAgICAgKi8KLSAgICAgICAgYXNzZXJ0KCEoZC0+ZGVsaW1fZW5kICYmIGQtPnB0ciA+
IGQtPmRlbGltX2VuZCkpOwotICAgICAgICBpZiAoZC0+cHRyID09IGQtPmRlbGltX2VuZCkKLSAg
ICAgICAgICBkLT5wYyArPSBsb25nb2ZzOwotICAgICAgKQotICAgICAgVk1DQVNFKE9QX0NBTEws
Ci0gICAgICAgIGQtPmNhbGxzdGFja1tkLT5jYWxsX2xlbisrXSA9IGQtPnBjOwotICAgICAgICBk
LT5wYyArPSBsb25nb2ZzOwotICAgICAgKQotICAgICAgVk1DQVNFKE9QX1JFVCwKLSAgICAgICAg
YXNzZXJ0KGQtPmNhbGxfbGVuID4gMCk7Ci0gICAgICAgIGQtPnBjID0gZC0+Y2FsbHN0YWNrWy0t
ZC0+Y2FsbF9sZW5dOwotICAgICAgKQotICAgICAgVk1DQVNFKE9QX0JSQU5DSCwKLSAgICAgICAg
ZC0+cGMgKz0gbG9uZ29mczsKLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9UQUcxLAotICAgICAg
ICB1aW50OF90IGV4cGVjdGVkOwotICAgICAgICBDSEVDS19TVVNQRU5EKGN1cmJ1ZmxlZnQoZCkg
PiAwKTsKLSAgICAgICAgZXhwZWN0ZWQgPSAoYXJnID4+IDgpICYgMHhmZjsKLSAgICAgICAgaWYg
KCpkLT5wdHIgPT0gZXhwZWN0ZWQpIHsKLSAgICAgICAgICBhZHZhbmNlKGQsIDEpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGludDhfdCBzaG9ydG9mczsKLSAgICAgICAgIGJhZHRhZzoK
LSAgICAgICAgICBzaG9ydG9mcyA9IGFyZzsKLSAgICAgICAgICBpZiAoc2hvcnRvZnMgPT0gTEFC
RUxfRElTUEFUQ0gpIHsKLSAgICAgICAgICAgIENIRUNLX1JFVFVSTihkaXNwYXRjaChkKSk7Ci0g
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGQtPnBjICs9IHNob3J0b2ZzOwotICAgICAg
ICAgICAgYnJlYWs7IC8qIEF2b2lkIGNoZWNrcG9pbnQoKS4gKi8KLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9UQUcyLAotICAgICAgICB1aW50MTZfdCBl
eHBlY3RlZDsKLSAgICAgICAgQ0hFQ0tfU1VTUEVORChjdXJidWZsZWZ0KGQpID4gMCk7Ci0gICAg
ICAgIGV4cGVjdGVkID0gKGFyZyA+PiA4KSAmIDB4ZmZmZjsKLSAgICAgICAgaWYgKGN1cmJ1Zmxl
ZnQoZCkgPj0gMikgewotICAgICAgICAgIHVpbnQxNl90IGFjdHVhbDsKLSAgICAgICAgICBtZW1j
cHkoJmFjdHVhbCwgZC0+cHRyLCAyKTsKLSAgICAgICAgICBpZiAoZXhwZWN0ZWQgPT0gYWN0dWFs
KSB7Ci0gICAgICAgICAgICBhZHZhbmNlKGQsIDIpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBnb3RvIGJhZHRhZzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgaW50MzJfdCByZXN1bHQgPSB1cGJfcGJkZWNvZGVyX2NoZWNrdGFnX3Nsb3coZCwgZXhw
ZWN0ZWQpOwotICAgICAgICAgIGlmIChyZXN1bHQgPT0gREVDT0RFX01JU01BVENIKSBnb3RvIGJh
ZHRhZzsKLSAgICAgICAgICBpZiAocmVzdWx0ID49IDApIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
IH0KLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9UQUdOLCB7Ci0gICAgICAgIHVpbnQ2NF90IGV4
cGVjdGVkOwotICAgICAgICBpbnQzMl90IHJlc3VsdDsKLSAgICAgICAgbWVtY3B5KCZleHBlY3Rl
ZCwgZC0+cGMsIDgpOwotICAgICAgICBkLT5wYyArPSAyOwotICAgICAgICByZXN1bHQgPSB1cGJf
cGJkZWNvZGVyX2NoZWNrdGFnX3Nsb3coZCwgZXhwZWN0ZWQpOwotICAgICAgICBpZiAocmVzdWx0
ID09IERFQ09ERV9NSVNNQVRDSCkgZ290byBiYWR0YWc7Ci0gICAgICAgIGlmIChyZXN1bHQgPj0g
MCkgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0pCi0gICAgICBWTUNBU0UoT1BfRElTUEFUQ0gsIHsK
LSAgICAgICAgQ0hFQ0tfUkVUVVJOKGRpc3BhdGNoKGQpKTsKLSAgICAgIH0pCi0gICAgICBWTUNB
U0UoT1BfSEFMVCwgewotICAgICAgICByZXR1cm4gZC0+c2l6ZV9wYXJhbTsKLSAgICAgIH0pCi0g
ICAgfQotICB9Ci19Ci0KLQotLyogQnl0ZXNIYW5kbGVyIGhhbmRsZXJzICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCAqdXBiX3Bi
ZGVjb2Rlcl9zdGFydGJjKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKnBjLCBzaXplX3Qgc2l6
ZV9oaW50KSB7Ci0gIHVwYl9wYmRlY29kZXIgKmQgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKHNp
emVfaGludCk7Ci0gIGQtPnRvcC0+ZW5kX29mcyA9IFVJTlQ2NF9NQVg7Ci0gIGQtPmJ1ZnN0YXJ0
X29mcyA9IDA7Ci0gIGQtPmNhbGxfbGVuID0gMTsKLSAgZC0+Y2FsbHN0YWNrWzBdID0gJmhhbHQ7
Ci0gIGQtPnBjID0gcGM7Ci0gIGQtPnNraXAgPSAwOwotICByZXR1cm4gZDsKLX0KLQotdm9pZCAq
dXBiX3BiZGVjb2Rlcl9zdGFydGppdCh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgc2l6
ZV90IHNpemVfaGludCkgewotICB1cGJfcGJkZWNvZGVyICpkID0gY2xvc3VyZTsKLSAgVVBCX1VO
VVNFRChoZCk7Ci0gIFVQQl9VTlVTRUQoc2l6ZV9oaW50KTsKLSAgZC0+dG9wLT5lbmRfb2ZzID0g
VUlOVDY0X01BWDsKLSAgZC0+YnVmc3RhcnRfb2ZzID0gMDsKLSAgZC0+Y2FsbF9sZW4gPSAwOwot
ICBkLT5za2lwID0gMDsKLSAgcmV0dXJuIGQ7Ci19Ci0KLWJvb2wgdXBiX3BiZGVjb2Rlcl9lbmQo
dm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhKSB7Ci0gIHVwYl9wYmRlY29k
ZXIgKmQgPSBjbG9zdXJlOwotICBjb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICptZXRob2QgPSBo
YW5kbGVyX2RhdGE7Ci0gIHVpbnQ2NF90IGVuZDsKLSAgY2hhciBkdW1teTsKLQotICBpZiAoZC0+
cmVzaWR1YWxfZW5kID4gZC0+cmVzaWR1YWwpIHsKLSAgICBzZXRlcnIoZCwgIlVuZXhwZWN0ZWQg
RU9GOiBkZWNvZGVyIHN0aWxsIGhhcyBidWZmZXJlZCB1bnBhcnNlZCBkYXRhIik7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKGQtPnNraXApIHsKLSAgICBzZXRlcnIoZCwgIlVuZXhw
ZWN0ZWQgRU9GIGluc2lkZSBza2lwcGVkIGRhdGEiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LQotICBpZiAoZC0+dG9wLT5lbmRfb2ZzICE9IFVJTlQ2NF9NQVgpIHsKLSAgICBzZXRlcnIoZCwg
IlVuZXhwZWN0ZWQgRU9GIGluc2lkZSBkZWxpbWl0ZWQgc3RyaW5nIik7Ci0gICAgcmV0dXJuIGZh
bHNlOwotICB9Ci0KLSAgLyogVGhlIHVzZXIncyBlbmQoKSBjYWxsIGluZGljYXRlcyB0aGF0IHRo
ZSBtZXNzYWdlIGVuZHMgaGVyZS4gKi8KLSAgZW5kID0gb2Zmc2V0KGQpOwotICBkLT50b3AtPmVu
ZF9vZnMgPSBlbmQ7Ci0KLSNpZmRlZiBVUEJfVVNFX0pJVF9YNjQKLSAgaWYgKG1ldGhvZC0+aXNf
bmF0aXZlXykgewotICAgIGNvbnN0IG1ncm91cCAqZ3JvdXAgPSAoY29uc3QgbWdyb3VwKiltZXRo
b2QtPmdyb3VwOwotICAgIGlmIChkLT50b3AgIT0gZC0+c3RhY2spCi0gICAgICBkLT5zdGFjay0+
ZW5kX29mcyA9IDA7Ci0gICAgZ3JvdXAtPmppdF9jb2RlKGNsb3N1cmUsIG1ldGhvZC0+Y29kZV9i
YXNlLnB0ciwgJmR1bW15LCAwLCBOVUxMKTsKLSAgfSBlbHNlCi0jZW5kaWYKLSAgewotICAgIGNv
bnN0IHVpbnQzMl90ICpwID0gZC0+cGM7Ci0gICAgZC0+c3RhY2stPmVuZF9vZnMgPSBlbmQ7Ci0g
ICAgLyogQ2hlY2sgdGhlIHByZXZpb3VzIGJ5dGVjb2RlLCBidXQgZ3VhcmQgYWdhaW5zdCBiZWdp
bm5pbmcuICovCi0gICAgaWYgKHAgIT0gbWV0aG9kLT5jb2RlX2Jhc2UucHRyKSBwLS07Ci0gICAg
aWYgKGdldG9wKCpwKSA9PSBPUF9DSEVDS0RFTElNKSB7Ci0gICAgICAvKiBSZXdpbmQgZnJvbSBP
UF9UQUcqIHRvIE9QX0NIRUNLREVMSU0uICovCi0gICAgICBhc3NlcnQoZ2V0b3AoKmQtPnBjKSA9
PSBPUF9UQUcxIHx8Ci0gICAgICAgICAgICAgZ2V0b3AoKmQtPnBjKSA9PSBPUF9UQUcyIHx8Ci0g
ICAgICAgICAgICAgZ2V0b3AoKmQtPnBjKSA9PSBPUF9UQUdOIHx8Ci0gICAgICAgICAgICAgZ2V0
b3AoKmQtPnBjKSA9PSBPUF9ESVNQQVRDSCk7Ci0gICAgICBkLT5wYyA9IHA7Ci0gICAgfQotICAg
IHVwYl9wYmRlY29kZXJfZGVjb2RlKGNsb3N1cmUsIGhhbmRsZXJfZGF0YSwgJmR1bW15LCAwLCBO
VUxMKTsKLSAgfQotCi0gIGlmIChkLT5jYWxsX2xlbiAhPSAwKSB7Ci0gICAgc2V0ZXJyKGQsICJV
bmV4cGVjdGVkIEVPRiBpbnNpZGUgc3VibWVzc2FnZSBvciBncm91cCIpOwotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1zaXplX3QgdXBiX3BiZGVjb2Rlcl9k
ZWNvZGUodm9pZCAqZGVjb2RlciwgY29uc3Qgdm9pZCAqZ3JvdXAsIGNvbnN0IGNoYXIgKmJ1ZiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgY29uc3QgdXBiX2J1Zmhh
bmRsZSAqaGFuZGxlKSB7Ci0gIGludDMyX3QgcmVzdWx0ID0gdXBiX3BiZGVjb2Rlcl9yZXN1bWUo
ZGVjb2RlciwgTlVMTCwgYnVmLCBzaXplLCBoYW5kbGUpOwotCi0gIGlmIChyZXN1bHQgPT0gREVD
T0RFX0VOREdST1VQKSBnb3RvX2VuZG1zZyhkZWNvZGVyKTsKLSAgQ0hFQ0tfUkVUVVJOKHJlc3Vs
dCk7Ci0KLSAgcmV0dXJuIHJ1bl9kZWNvZGVyX3ZtKGRlY29kZXIsIGdyb3VwLCBoYW5kbGUpOwot
fQotCi0KLS8qIFB1YmxpYyBBUEkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgdXBiX3BiZGVjb2Rlcl9yZXNl
dCh1cGJfcGJkZWNvZGVyICpkKSB7Ci0gIGQtPnRvcCA9IGQtPnN0YWNrOwotICBkLT50b3AtPmdy
b3VwbnVtID0gMDsKLSAgZC0+cHRyID0gZC0+cmVzaWR1YWw7Ci0gIGQtPmJ1ZiA9IGQtPnJlc2lk
dWFsOwotICBkLT5lbmQgPSBkLT5yZXNpZHVhbDsKLSAgZC0+cmVzaWR1YWxfZW5kID0gZC0+cmVz
aWR1YWw7Ci19Ci0KLXVwYl9wYmRlY29kZXIgKnVwYl9wYmRlY29kZXJfY3JlYXRlKHVwYl9lbnYg
KmUsIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKm0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cGJfc2luayAqc2luaykgewotICBjb25zdCBzaXplX3QgZGVmYXVsdF9t
YXhfbmVzdGluZyA9IDY0OwotI2lmbmRlZiBOREVCVUcKLSAgc2l6ZV90IHNpemVfYmVmb3JlID0g
dXBiX2Vudl9ieXRlc2FsbG9jYXRlZChlKTsKLSNlbmRpZgotCi0gIHVwYl9wYmRlY29kZXIgKmQg
PSB1cGJfZW52X21hbGxvYyhlLCBzaXplb2YodXBiX3BiZGVjb2RlcikpOwotICBpZiAoIWQpIHJl
dHVybiBOVUxMOwotCi0gIGQtPm1ldGhvZF8gPSBtOwotICBkLT5jYWxsc3RhY2sgPSB1cGJfZW52
X21hbGxvYyhlLCBjYWxsc3RhY2tzaXplKGQsIGRlZmF1bHRfbWF4X25lc3RpbmcpKTsKLSAgZC0+
c3RhY2sgPSB1cGJfZW52X21hbGxvYyhlLCBzdGFja3NpemUoZCwgZGVmYXVsdF9tYXhfbmVzdGlu
ZykpOwotICBpZiAoIWQtPnN0YWNrIHx8ICFkLT5jYWxsc3RhY2spIHsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQotCi0gIGQtPmVudiA9IGU7Ci0gIGQtPmxpbWl0ID0gZC0+c3RhY2sgKyBkZWZhdWx0
X21heF9uZXN0aW5nIC0gMTsKLSAgZC0+c3RhY2tfc2l6ZSA9IGRlZmF1bHRfbWF4X25lc3Rpbmc7
Ci0KLSAgdXBiX3BiZGVjb2Rlcl9yZXNldChkKTsKLSAgdXBiX2J5dGVzc2lua19yZXNldCgmZC0+
aW5wdXRfLCAmbS0+aW5wdXRfaGFuZGxlcl8sIGQpOwotCi0gIGFzc2VydChzaW5rKTsKLSAgaWYg
KGQtPm1ldGhvZF8tPmRlc3RfaGFuZGxlcnNfKSB7Ci0gICAgaWYgKHNpbmstPmhhbmRsZXJzICE9
IGQtPm1ldGhvZF8tPmRlc3RfaGFuZGxlcnNfKQotICAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAg
dXBiX3NpbmtfcmVzZXQoJmQtPnRvcC0+c2luaywgc2luay0+aGFuZGxlcnMsIHNpbmstPmNsb3N1
cmUpOwotCi0gIC8qIElmIHRoaXMgZmFpbHMsIGluY3JlYXNlIHRoZSB2YWx1ZSBpbiBkZWNvZGVy
LmguICovCi0gIGFzc2VydCh1cGJfZW52X2J5dGVzYWxsb2NhdGVkKGUpIC0gc2l6ZV9iZWZvcmUg
PD0gVVBCX1BCX0RFQ09ERVJfU0laRSk7Ci0gIHJldHVybiBkOwotfQotCi11aW50NjRfdCB1cGJf
cGJkZWNvZGVyX2J5dGVzcGFyc2VkKGNvbnN0IHVwYl9wYmRlY29kZXIgKmQpIHsKLSAgcmV0dXJu
IG9mZnNldChkKTsKLX0KLQotY29uc3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqdXBiX3BiZGVjb2Rl
cl9tZXRob2QoY29uc3QgdXBiX3BiZGVjb2RlciAqZCkgewotICByZXR1cm4gZC0+bWV0aG9kXzsK
LX0KLQotdXBiX2J5dGVzc2luayAqdXBiX3BiZGVjb2Rlcl9pbnB1dCh1cGJfcGJkZWNvZGVyICpk
KSB7Ci0gIHJldHVybiAmZC0+aW5wdXRfOwotfQotCi1zaXplX3QgdXBiX3BiZGVjb2Rlcl9tYXhu
ZXN0aW5nKGNvbnN0IHVwYl9wYmRlY29kZXIgKmQpIHsKLSAgcmV0dXJuIGQtPnN0YWNrX3NpemU7
Ci19Ci0KLWJvb2wgdXBiX3BiZGVjb2Rlcl9zZXRtYXhuZXN0aW5nKHVwYl9wYmRlY29kZXIgKmQs
IHNpemVfdCBtYXgpIHsKLSAgYXNzZXJ0KGQtPnRvcCA+PSBkLT5zdGFjayk7Ci0KLSAgaWYgKG1h
eCA8IChzaXplX3QpKGQtPnRvcCAtIGQtPnN0YWNrKSkgewotICAgIC8qIENhbid0IHNldCBhIGxp
bWl0IHNtYWxsZXIgdGhhbiB3aGF0IHdlIGFyZSBjdXJyZW50bHkgYXQuICovCi0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0KLSAgaWYgKG1heCA+IGQtPnN0YWNrX3NpemUpIHsKLSAgICAvKiBOZWVk
IHRvIHJlYWxsb2NhdGUgc3RhY2sgYW5kIGNhbGxzdGFjayB0byBhY2NvbW1vZGF0ZS4gKi8KLSAg
ICBzaXplX3Qgb2xkX3NpemUgPSBzdGFja3NpemUoZCwgZC0+c3RhY2tfc2l6ZSk7Ci0gICAgc2l6
ZV90IG5ld19zaXplID0gc3RhY2tzaXplKGQsIG1heCk7Ci0gICAgdm9pZCAqcCA9IHVwYl9lbnZf
cmVhbGxvYyhkLT5lbnYsIGQtPnN0YWNrLCBvbGRfc2l6ZSwgbmV3X3NpemUpOwotICAgIGlmICgh
cCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBkLT5zdGFjayA9IHA7Ci0KLSAg
ICBvbGRfc2l6ZSA9IGNhbGxzdGFja3NpemUoZCwgZC0+c3RhY2tfc2l6ZSk7Ci0gICAgbmV3X3Np
emUgPSBjYWxsc3RhY2tzaXplKGQsIG1heCk7Ci0gICAgcCA9IHVwYl9lbnZfcmVhbGxvYyhkLT5l
bnYsIGQtPmNhbGxzdGFjaywgb2xkX3NpemUsIG5ld19zaXplKTsKLSAgICBpZiAoIXApIHsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZC0+Y2FsbHN0YWNrID0gcDsKLQotICAgIGQt
PnN0YWNrX3NpemUgPSBtYXg7Ci0gIH0KLQotICBkLT5saW1pdCA9IGQtPnN0YWNrICsgbWF4IC0g
MTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0vKgotKiogdXBiOjpFbmNvZGVyCi0qKgotKiogU2luY2Ug
d2UgYXJlIGltcGxlbWVudGluZyBwdXJlIGhhbmRsZXJzIChpZS4gd2l0aG91dCBhbnkgb3V0LW9m
LWJhbmQgYWNjZXNzCi0qKiB0byBwcmUtY29tcHV0ZWQgbGVuZ3RocyksIHdlIGhhdmUgdG8gYnVm
ZmVyIGFsbCBzdWJtZXNzYWdlcyBiZWZvcmUgd2UgY2FuCi0qKiBlbWl0IGV2ZW4gdGhlaXIgZmly
c3QgYnl0ZS4KLSoqCi0qKiBOb3Qga25vd2luZyB0aGUgc2l6ZSBvZiBzdWJtZXNzYWdlcyBhbHNv
IG1lYW5zIHdlIGNhbid0IHdyaXRlIGEgcGVyZmVjdAotKiogemVyby1jb3B5IGltcGxlbWVudGF0
aW9uLCBldmVuIHdpdGggYnVmZmVyaW5nLiAgTGVuZ3RocyBhcmUgc3RvcmVkIGFzCi0qKiB2YXJp
bnRzLCB3aGljaCBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cgaG93IG1hbnkgYnl0ZXMgdG8gcmVz
ZXJ2ZSBmb3IgdGhlCi0qKiBsZW5ndGggdW50aWwgd2Uga25vdyB3aGF0IHRoZSBsZW5ndGggaXMu
Ci0qKgotKiogVGhpcyBsZWF2ZXMgdXMgd2l0aCB0aHJlZSBtYWluIGNob2ljZXM6Ci0qKgotKiog
MS4gYnVmZmVyIGFsbCBzdWJtZXNzYWdlIGRhdGEgaW4gYSB0ZW1wb3JhcnkgYnVmZmVyLCB0aGVu
IGNvcHkgaXQgZXhhY3RseQotKiogICAgb25jZSBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLgotKioK
LSoqIDIuIGF0dGVtcHQgdG8gYnVmZmVyIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgb3V0cHV0IGJ1
ZmZlciwgZXN0aW1hdGluZyBob3cKLSoqICAgIG1hbnkgYnl0ZXMgZWFjaCBsZW5ndGggd2lsbCB0
YWtlLiAgV2hlbiBvdXIgZ3Vlc3NlcyBhcmUgd3JvbmcsIHVzZQotKiogICAgbWVtbW92ZSgpIHRv
IGdyb3cgb3Igc2hyaW5rIHRoZSBhbGxvdHRlZCBzcGFjZS4KLSoqCi0qKiAzLiBidWZmZXIgZGly
ZWN0bHkgaW50byB0aGUgb3V0cHV0IGJ1ZmZlciwgYWxsb2NhdGluZyBhIG1heCBsZW5ndGgKLSoq
ICAgIGFoZWFkLW9mLXRpbWUgZm9yIGVhY2ggc3VibWVzc2FnZSBsZW5ndGguICBJZiB3ZSBvdmVy
YWxsb2NhdGVkLCB3ZSB3YXN0ZQotKiogICAgc3BhY2UsIGJ1dCBubyBtZW1jcHkoKSBvciBtZW1t
b3ZlKCkgaXMgcmVxdWlyZWQuICBUaGlzIGFwcHJvYWNoIHJlcXVpcmVzCi0qKiAgICBkZWZpbmlu
ZyBhIG1heGltdW0gc2l6ZSBmb3Igc3VibWVzc2FnZXMgYW5kIHJlamVjdGluZyBzdWJtZXNzYWdl
cyB0aGF0Ci0qKiAgICBleGNlZWQgdGhhdCBzaXplLgotKioKLSoqICgyKSBhbmQgKDMpIGhhdmUg
dGhlIHBvdGVudGlhbCB0byBoYXZlIGJldHRlciBwZXJmb3JtYW5jZSwgYnV0IHRoZXkgYXJlIG1v
cmUKLSoqIGNvbXBsaWNhdGVkIGFuZCBzdWJ0bGUgdG8gaW1wbGVtZW50OgotKioKLSoqICAgKDMp
IHJlcXVpcmVzIG1ha2luZyBhbiBhcmJpdHJhcnkgY2hvaWNlIG9mIHRoZSBtYXhpbXVtIG1lc3Nh
Z2Ugc2l6ZTsgaXQKLSoqICAgICAgIHdhc3RlcyBzcGFjZSB3aGVuIHN1Ym1lc3NhZ2VzIGFyZSBz
aG9ydGVyIHRoYW4gdGhpcyBhbmQgZmFpbHMKLSoqICAgICAgIGNvbXBsZXRlbHkgd2hlbiB0aGV5
IGFyZSBsb25nZXIuICBUaGlzIG1ha2VzIGl0IG1vcmUgZmluaWNreSBhbmQKLSoqICAgICAgIHJl
cXVpcmVzIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdGhlIGlucHV0LiAgSXQgYWxzbyBtYWtlcyBp
dCBpbXBvc3NpYmxlCi0qKiAgICAgICB0byBwZXJmZWN0bHkgbWF0Y2ggdGhlIG91dHB1dCBvZiBy
ZWZlcmVuY2UgZW5jb2RlcnMgdGhhdCBhbHdheXMgdXNlIHRoZQotKiogICAgICAgb3B0aW1hbCBh
bW91bnQgb2Ygc3BhY2UgZm9yIGVhY2ggbGVuZ3RoLgotKioKLSoqICAgKDIpIHJlcXVpcmVzIGd1
ZXNzaW5nIHRoZSB0aGUgc2l6ZSB1cGZyb250LCBhbmQgaWYgbXVsdGlwbGUgbGVuZ3RocyBhcmUK
LSoqICAgICAgIGd1ZXNzZWQgd3JvbmcgdGhlIG1pbmltdW0gcmVxdWlyZWQgbnVtYmVyIG9mIG1l
bW1vdmUoKSBvcGVyYXRpb25zIG1heQotKiogICAgICAgYmUgY29tcGxpY2F0ZWQgdG8gY29tcHV0
ZSBjb3JyZWN0bHkuICBJbXBsZW1lbnRlZCBwcm9wZXJseSwgaXQgbWF5IGhhdmUKLSoqICAgICAg
IGEgdXNlZnVsIGFtb3J0aXplZCBvciBhdmVyYWdlIGNvc3QsIGJ1dCBtb3JlIGludmVzdGlnYXRp
b24gaXMgcmVxdWlyZWQKLSoqICAgICAgIHRvIGRldGVybWluZSB0aGlzIGFuZCB3aGF0IHRoZSBv
cHRpbWFsIGFsZ29yaXRobSBpcyB0byBhY2hpZXZlIGl0LgotKioKLSoqICAgKDEpIG1ha2VzIHlv
dSBhbHdheXMgcGF5IGZvciBleGFjdGx5IG9uZSBjb3B5LCBidXQgaXRzIGltcGxlbWVudGF0aW9u
IGlzCi0qKiAgICAgICB0aGUgc2ltcGxlc3QgYW5kIGl0cyBwZXJmb3JtYW5jZSBpcyBwcmVkaWN0
YWJsZS4KLSoqCi0qKiBTbyBmb3Igbm93LCB3ZSBpbXBsZW1lbnQgKDEpIG9ubHkuICBJZiB3ZSB3
aXNoIHRvIG9wdGltaXplIGxhdGVyLCB3ZSBzaG91bGQKLSoqIGJlIGFibGUgdG8gZG8gaXQgd2l0
aG91dCBhZmZlY3RpbmcgdXNlcnMuCi0qKgotKiogVGhlIHN0cmF0ZWd5IGlzIHRvIGJ1ZmZlciB0
aGUgc2VnbWVudHMgb2YgZGF0YSB0aGF0IGRvICpub3QqIGRlcGVuZCBvbgotKiogdW5rbm93biBs
ZW5ndGhzIGluIG9uZSBidWZmZXIsIGFuZCBrZWVwIGEgc2VwYXJhdGUgYnVmZmVyIG9mIHNlZ21l
bnQgcG9pbnRlcnMKLSoqIGFuZCBsZW5ndGhzLiAgV2hlbiB0aGUgdG9wLWxldmVsIHN1Ym1lc3Nh
Z2UgZW5kcywgd2UgY2FuIGdvIGJlZ2lubmluZyB0byBlbmQsCi0qKiBhbHRlcm5hdGluZyB0aGUg
d3JpdGluZyBvZiBsZW5ndGhzIHdpdGggbWVtY3B5KCkgb2YgdGhlIHJlc3Qgb2YgdGhlIGRhdGEu
Ci0qKiBBdCB0aGUgdG9wIGxldmVsIHRob3VnaCwgbm8gYnVmZmVyaW5nIGlzIHJlcXVpcmVkLgot
Ki8KLQotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qIFRoZSBvdXRwdXQgYnVmZmVyIGlzIGRp
dmlkZWQgaW50byBzZWdtZW50czsgYSBzZWdtZW50IGlzIGEgc3RyaW5nIG9mIGRhdGEKLSAqIHRo
YXQgaXMgInJlYWR5IHRvIGdvIiAtLSBpdCBkb2VzIG5vdCBuZWVkIGFueSB2YXJpbnQgbGVuZ3Ro
cyBpbnNlcnRlZCBpbnRvCi0gKiB0aGUgbWlkZGxlLiAgVGhlIHNlYW1zIGJldHdlZW4gc2VnbWVu
dHMgYXJlIHdoZXJlIHZhcmludHMgd2lsbCBiZSBpbnNlcnRlZAotICogb25jZSB0aGV5IGFyZSBr
bm93bi4KLSAqCi0gKiBXZSBhbHNvIHVzZSB0aGUgY29uY2VwdCBvZiBhICJydW4iLCB3aGljaCBp
cyBhIHJhbmdlIG9mIGVuY29kZWQgYnl0ZXMgdGhhdAotICogb2NjdXIgYXQgYSBzaW5nbGUgc3Vi
bWVzc2FnZSBsZXZlbC4gIEV2ZXJ5IHNlZ21lbnQgY29udGFpbnMgb25lIG9yIG1vcmUgcnVucy4K
LSAqCi0gKiBBIHNlZ21lbnQgY2FuIHNwYW4gbWVzc2FnZXMuICBDb25zaWRlcjoKLSAqCi0gKiAg
ICAgICAgICAgICAgICAgIC4tLVN1Ym1lc3NhZ2UgbGVuZ3Rocy0tLS0tLS0tLS4KLSAqICAgICAg
ICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAotICogICAgICAgICAg
ICAgICAgICB8ICAgICAgIFYgICAgICAgICAgICAgICAgICAgICBWCi0gKiAgICAgICAgICAgICAg
ICAgIFYgICAgICB8IHwtLS0tLS0tLS0tLS0tLS0gICAgfCB8LS0tLS0tLS0tLS0tLS0tLS0KLSAq
IFN1Ym1lc3NhZ2VzOiAgICB8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICogVG9wLWxldmVsIG1zZzogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogU2VnbWVudHM6ICAgICAg
ICAgIC0tLS0tICAgLS0tLS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLS0tCi0gKiBS
dW5zOiAgICAgICAgICAgICAgKi0tLS0gICAqLS0tLS0tLS0tLS0tLS0qLS0tICAgKi0tLS0tLS0t
LS0tLS0tLS0KLSAqICgqIG1hcmtzIHRoZSBzdGFydCkKLSAqCi0gKiBOb3RlIHRoYXQgdGhlIHRv
cC1sZXZlbCBtZW5zc2FnZSBpcyBub3QgaW4gYW55IHNlZ21lbnQgYmVjYXVzZSBpdCBkb2VzIG5v
dAotICogaGF2ZSBhbnkgbGVuZ3RoIHByZWNlZGluZyBpdC4KLSAqCi0gKiBBIHNlZ21lbnQgaXMg
b25seSBpbnRlcnJ1cHRlZCB3aGVuIGFub3RoZXIgbGVuZ3RoIG5lZWRzIHRvIGJlIGluc2VydGVk
LiAgU28KLSAqIG9ic2VydmUgaG93IHRoZSBzZWNvbmQgc2VnbWVudCBzcGFucyBib3RoIHRoZSBp
bm5lciBzdWJtZXNzYWdlIGFuZCBwYXJ0IG9mCi0gKiB0aGUgbmV4dCBlbmNsb3NpbmcgbWVzc2Fn
ZS4gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgdWludDMyX3QgbXNnbGVuOyAgLyogVGhlIGxlbmd0
aCB0byB2YXJpbnQtZW5jb2RlIGJlZm9yZSB0aGlzIHNlZ21lbnQuICovCi0gIHVpbnQzMl90IHNl
Z2xlbjsgIC8qIExlbmd0aCBvZiB0aGUgc2VnbWVudC4gKi8KLX0gdXBiX3BiX2VuY29kZXJfc2Vn
bWVudDsKLQotc3RydWN0IHVwYl9wYl9lbmNvZGVyIHsKLSAgdXBiX2VudiAqZW52OwotCi0gIC8q
IE91ciBpbnB1dCBhbmQgb3V0cHV0LiAqLwotICB1cGJfc2luayBpbnB1dF87Ci0gIHVwYl9ieXRl
c3NpbmsgKm91dHB1dF87Ci0KLSAgLyogVGhlICJzdWJjbG9zdXJlIiAtLSB1c2VkIGFzIHRoZSBp
bm5lciBjbG9zdXJlIGFzIHBhcnQgb2YgdGhlIGJ5dGVzc2luawotICAgKiBwcm90b2NvbC4gKi8K
LSAgdm9pZCAqc3ViYzsKLQotICAvKiBUaGUgb3V0cHV0IGJ1ZmZlciBhbmQgbGltaXQsIGFuZCBv
dXIgY3VycmVudCB3cml0ZSBwb3NpdGlvbi4gICJidWYiCi0gICAqIGluaXRpYWxseSBwb2ludHMg
dG8gImluaXRidWYiLCBidXQgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGlmIHdlIG5lZWQgdG8K
LSAgICogZ3JvdyBiZXlvbmQgdGhlIGluaXRpYWwgc2l6ZS4gKi8KLSAgY2hhciAqYnVmLCAqcHRy
LCAqbGltaXQ7Ci0KLSAgLyogVGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBydW4sIG9yIHVu
ZGVmaW5lZCBpZiB3ZSBhcmUgYXQgdGhlIHRvcAotICAgKiBsZXZlbC4gKi8KLSAgY2hhciAqcnVu
YmVnaW47Ci0KLSAgLyogVGhlIGxpc3Qgb2Ygc2VnbWVudHMgd2UgYXJlIGFjY3VtdWxhdGluZy4g
Ki8KLSAgdXBiX3BiX2VuY29kZXJfc2VnbWVudCAqc2VnYnVmLCAqc2VncHRyLCAqc2VnbGltaXQ7
Ci0KLSAgLyogVGhlIHN0YWNrIG9mIGVuY2xvc2luZyBzdWJtZXNzYWdlcy4gIEVhY2ggZW50cnkg
aW4gdGhlIHN0YWNrIHBvaW50cyB0byB0aGUKLSAgICogc2VnbWVudCB3aGVyZSB0aGlzIHN1Ym1l
c3NhZ2UncyBsZW5ndGggaXMgYmVpbmcgYWNjdW11bGF0ZWQuICovCi0gIGludCAqc3RhY2ssICp0
b3AsICpzdGFja2xpbWl0OwotCi0gIC8qIERlcHRoIG9mIHN0YXJ0bXNnL2VuZG1zZyBjYWxscy4g
Ki8KLSAgaW50IGRlcHRoOwotfTsKLQotLyogbG93LWxldmVsIGJ1ZmZlcmluZyAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTG93
LWxldmVsIGZ1bmN0aW9ucyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3V0cHV0IGJ1ZmZlci4g
Ki8KLQotLyogVE9ETyhoYWJlcm1hbik6IGhhbmRsZSBwdXNoYmFjayAqLwotc3RhdGljIHZvaWQg
cHV0YnVmKHVwYl9wYl9lbmNvZGVyICplLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pIHsK
LSAgc2l6ZV90IG4gPSB1cGJfYnl0ZXNzaW5rX3B1dGJ1ZihlLT5vdXRwdXRfLCBlLT5zdWJjLCBi
dWYsIGxlbiwgTlVMTCk7Ci0gIFVQQl9BU1NFUlRfVkFSKG4sIG4gPT0gbGVuKTsKLX0KLQotc3Rh
dGljIHVwYl9wYl9lbmNvZGVyX3NlZ21lbnQgKnRvcCh1cGJfcGJfZW5jb2RlciAqZSkgewotICBy
ZXR1cm4gJmUtPnNlZ2J1ZlsqZS0+dG9wXTsKLX0KLQotLyogQ2FsbCB0byBlbnN1cmUgdGhhdCBh
dCBsZWFzdCAiYnl0ZXMiIGJ5dGVzIGFyZSBhdmFpbGFibGUgZm9yIHdyaXRpbmcgYXQKLSAqIGUt
PnB0ci4gIFJldHVybnMgZmFsc2UgaWYgdGhlIGJ5dGVzIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQu
ICovCi1zdGF0aWMgYm9vbCByZXNlcnZlKHVwYl9wYl9lbmNvZGVyICplLCBzaXplX3QgYnl0ZXMp
IHsKLSAgaWYgKChzaXplX3QpKGUtPmxpbWl0IC0gZS0+cHRyKSA8IGJ5dGVzKSB7Ci0gICAgLyog
R3JvdyBidWZmZXIuICovCi0gICAgY2hhciAqbmV3X2J1ZjsKLSAgICBzaXplX3QgbmVlZGVkID0g
Ynl0ZXMgKyAoZS0+cHRyIC0gZS0+YnVmKTsKLSAgICBzaXplX3Qgb2xkX3NpemUgPSBlLT5saW1p
dCAtIGUtPmJ1ZjsKLQotICAgIHNpemVfdCBuZXdfc2l6ZSA9IG9sZF9zaXplOwotCi0gICAgd2hp
bGUgKG5ld19zaXplIDwgbmVlZGVkKSB7Ci0gICAgICBuZXdfc2l6ZSAqPSAyOwotICAgIH0KLQot
ICAgIG5ld19idWYgPSB1cGJfZW52X3JlYWxsb2MoZS0+ZW52LCBlLT5idWYsIG9sZF9zaXplLCBu
ZXdfc2l6ZSk7Ci0KLSAgICBpZiAobmV3X2J1ZiA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgZS0+cHRyID0gbmV3X2J1ZiArIChlLT5wdHIgLSBlLT5idWYpOwot
ICAgIGUtPnJ1bmJlZ2luID0gbmV3X2J1ZiArIChlLT5ydW5iZWdpbiAtIGUtPmJ1Zik7Ci0gICAg
ZS0+bGltaXQgPSBuZXdfYnVmICsgbmV3X3NpemU7Ci0gICAgZS0+YnVmID0gbmV3X2J1ZjsKLSAg
fQotCi0gIHJldHVybiB0cnVlOwotfQotCi0vKiBDYWxsIHdoZW4gImJ5dGVzIiBieXRlcyBoYXZl
IGJlZW4gd3JpdHRlIGF0IGUtPnB0ci4gIFRoZSBjYWxsZXIgKm11c3QqIGhhdmUKLSAqIHByZXZp
b3VzbHkgY2FsbGVkIHJlc2VydmUoKSB3aXRoIGF0IGxlYXN0IHRoaXMgbWFueSBieXRlcy4gKi8K
LXN0YXRpYyB2b2lkIGVuY29kZXJfYWR2YW5jZSh1cGJfcGJfZW5jb2RlciAqZSwgc2l6ZV90IGJ5
dGVzKSB7Ci0gIGFzc2VydCgoc2l6ZV90KShlLT5saW1pdCAtIGUtPnB0cikgPj0gYnl0ZXMpOwot
ICBlLT5wdHIgKz0gYnl0ZXM7Ci19Ci0KLS8qIENhbGwgd2hlbiBhbGwgb2YgdGhlIGJ5dGVzIGZv
ciBhIGhhbmRsZXIgaGF2ZSBiZWVuIHdyaXR0ZW4uICBGbHVzaGVzIHRoZQotICogYnl0ZXMgaWYg
cG9zc2libGUgYW5kIG5lY2Vzc2FyeSwgcmV0dXJuaW5nIGZhbHNlIGlmIHRoaXMgZmFpbGVkLiAq
Lwotc3RhdGljIGJvb2wgY29tbWl0KHVwYl9wYl9lbmNvZGVyICplKSB7Ci0gIGlmICghZS0+dG9w
KSB7Ci0gICAgLyogV2UgYXJlbid0IGluc2lkZSBhIGRlbGltaXRlZCByZWdpb24uICBGbHVzaCBv
dXIgYWNjdW11bGF0ZWQgYnl0ZXMgdG8KLSAgICAgKiB0aGUgb3V0cHV0LgotICAgICAqCi0gICAg
ICogVE9ETyhoYWJlcm1hbik6IGluIHRoZSBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gZGVsYXkgZmx1
c2hpbmcgZm9yCi0gICAgICogZWZmaWNpZW5jeSByZWFzb25zLiAqLwotICAgIHB1dGJ1ZihlLCBl
LT5idWYsIGUtPnB0ciAtIGUtPmJ1Zik7Ci0gICAgZS0+cHRyID0gZS0+YnVmOwotICB9Ci0KLSAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8qIFdyaXRlcyB0aGUgZ2l2ZW4gYnl0ZXMgdG8gdGhlIGJ1ZmZl
ciwgaGFuZGxpbmcgcmVzZXJ2ZS9hZHZhbmNlLiAqLwotc3RhdGljIGJvb2wgZW5jb2RlX2J5dGVz
KHVwYl9wYl9lbmNvZGVyICplLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKSB7Ci0gIGlm
ICghcmVzZXJ2ZShlLCBsZW4pKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgbWVtY3B5
KGUtPnB0ciwgZGF0YSwgbGVuKTsKLSAgZW5jb2Rlcl9hZHZhbmNlKGUsIGxlbik7Ci0gIHJldHVy
biB0cnVlOwotfQotCi0vKiBGaW5pc2ggdGhlIGN1cnJlbnQgcnVuIGJ5IGFkZGluZyB0aGUgcnVu
IHRvdGFscyB0byB0aGUgc2VnbWVudCBhbmQgbWVzc2FnZQotICogbGVuZ3RoLiAqLwotc3RhdGlj
IHZvaWQgYWNjdW11bGF0ZSh1cGJfcGJfZW5jb2RlciAqZSkgewotICBzaXplX3QgcnVuX2xlbjsK
LSAgYXNzZXJ0KGUtPnB0ciA+PSBlLT5ydW5iZWdpbik7Ci0gIHJ1bl9sZW4gPSBlLT5wdHIgLSBl
LT5ydW5iZWdpbjsKLSAgZS0+c2VncHRyLT5zZWdsZW4gKz0gcnVuX2xlbjsKLSAgdG9wKGUpLT5t
c2dsZW4gKz0gcnVuX2xlbjsKLSAgZS0+cnVuYmVnaW4gPSBlLT5wdHI7Ci19Ci0KLS8qIENhbGwg
dG8gaW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGRlbGltaXRlZCByZWdpb24gZm9yIHdoaWNoIHRoZSBm
dWxsIGxlbmd0aCBpcwotICogbm90IHlldCBrbm93bi4gIEFsbCBkYXRhIHdpbGwgYmUgYnVmZmVy
ZWQgdW50aWwgdGhlIGxlbmd0aCBpcyBrbm93bi4KLSAqIERlbGltaXRlZCByZWdpb25zIG1heSBi
ZSBuZXN0ZWQ7IHRoZWlyIGxlbmd0aHMgd2lsbCBhbGwgYmUgdHJhY2tlZCBwcm9wZXJseS4gKi8K
LXN0YXRpYyBib29sIHN0YXJ0X2RlbGltKHVwYl9wYl9lbmNvZGVyICplKSB7Ci0gIGlmIChlLT50
b3ApIHsKLSAgICAvKiBXZSBhcmUgYWxyZWFkeSBidWZmZXJpbmcsIGFkdmFuY2UgdG8gdGhlIG5l
eHQgc2VnbWVudCBhbmQgcHVzaCBpdCBvbiB0aGUKLSAgICAgKiBzdGFjay4gKi8KLSAgICBhY2N1
bXVsYXRlKGUpOwotCi0gICAgaWYgKCsrZS0+dG9wID09IGUtPnN0YWNrbGltaXQpIHsKLSAgICAg
IC8qIFRPRE8oaGFiZXJtYW4pOiBncm93IHN0YWNrPyAqLwotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICgrK2UtPnNlZ3B0ciA9PSBlLT5zZWdsaW1pdCkgewotICAgICAgLyog
R3JvdyBzZWdtZW50IGJ1ZmZlci4gKi8KLSAgICAgIHNpemVfdCBvbGRfc2l6ZSA9Ci0gICAgICAg
ICAgKGUtPnNlZ2xpbWl0IC0gZS0+c2VnYnVmKSAqIHNpemVvZih1cGJfcGJfZW5jb2Rlcl9zZWdt
ZW50KTsKLSAgICAgIHNpemVfdCBuZXdfc2l6ZSA9IG9sZF9zaXplICogMjsKLSAgICAgIHVwYl9w
Yl9lbmNvZGVyX3NlZ21lbnQgKm5ld19idWYgPQotICAgICAgICAgIHVwYl9lbnZfcmVhbGxvYyhl
LT5lbnYsIGUtPnNlZ2J1Ziwgb2xkX3NpemUsIG5ld19zaXplKTsKLQotICAgICAgaWYgKG5ld19i
dWYgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGUt
PnNlZ3B0ciA9IG5ld19idWYgKyAoZS0+c2VncHRyIC0gZS0+c2VnYnVmKTsKLSAgICAgIGUtPnNl
Z2xpbWl0ID0gbmV3X2J1ZiArIChuZXdfc2l6ZSAvIHNpemVvZih1cGJfcGJfZW5jb2Rlcl9zZWdt
ZW50KSk7Ci0gICAgICBlLT5zZWdidWYgPSBuZXdfYnVmOwotICAgIH0KLSAgfSBlbHNlIHsKLSAg
ICAvKiBXZSB3ZXJlIHByZXZpb3VzbHkgYXQgdGhlIHRvcCBsZXZlbCwgc3RhcnQgYnVmZmVyaW5n
LiAqLwotICAgIGUtPnNlZ3B0ciA9IGUtPnNlZ2J1ZjsKLSAgICBlLT50b3AgPSBlLT5zdGFjazsK
LSAgICBlLT5ydW5iZWdpbiA9IGUtPnB0cjsKLSAgfQotCi0gICplLT50b3AgPSBlLT5zZWdwdHIg
LSBlLT5zZWdidWY7Ci0gIGUtPnNlZ3B0ci0+c2VnbGVuID0gMDsKLSAgZS0+c2VncHRyLT5tc2ds
ZW4gPSAwOwotCi0gIHJldHVybiB0cnVlOwotfQotCi0vKiBDYWxsIHRvIGluZGljYXRlIHRoZSBl
bmQgb2YgYSBkZWxpbWl0ZWQgcmVnaW9uLiAgV2Ugbm93IGtub3cgdGhlIGxlbmd0aCBvZgotICog
dGhlIGRlbGltaXRlZCByZWdpb24uICBJZiB3ZSBhcmUgbm90IG5lc3RlZCBpbnNpZGUgYW55IG90
aGVyIGRlbGltaXRlZAotICogcmVnaW9ucywgd2UgY2FuIG5vdyBlbWl0IGFsbCBvZiB0aGUgYnVm
ZmVyZWQgZGF0YSB3ZSBhY2N1bXVsYXRlZC4gKi8KLXN0YXRpYyBib29sIGVuZF9kZWxpbSh1cGJf
cGJfZW5jb2RlciAqZSkgewotICBzaXplX3QgbXNnbGVuOwotICBhY2N1bXVsYXRlKGUpOwotICBt
c2dsZW4gPSB0b3AoZSktPm1zZ2xlbjsKLQotICBpZiAoZS0+dG9wID09IGUtPnN0YWNrKSB7Ci0g
ICAgLyogQWxsIGxlbmd0aHMgYXJlIG5vdyBhdmFpbGFibGUsIGVtaXQgYWxsIGJ1ZmZlcmVkIGRh
dGEuICovCi0gICAgY2hhciBidWZbVVBCX1BCX1ZBUklOVF9NQVhfTEVOXTsKLSAgICB1cGJfcGJf
ZW5jb2Rlcl9zZWdtZW50ICpzOwotICAgIGNvbnN0IGNoYXIgKnB0ciA9IGUtPmJ1ZjsKLSAgICBm
b3IgKHMgPSBlLT5zZWdidWY7IHMgPD0gZS0+c2VncHRyOyBzKyspIHsKLSAgICAgIHNpemVfdCBs
ZW5ieXRlcyA9IHVwYl92ZW5jb2RlNjQocy0+bXNnbGVuLCBidWYpOwotICAgICAgcHV0YnVmKGUs
IGJ1ZiwgbGVuYnl0ZXMpOwotICAgICAgcHV0YnVmKGUsIHB0ciwgcy0+c2VnbGVuKTsKLSAgICAg
IHB0ciArPSBzLT5zZWdsZW47Ci0gICAgfQotCi0gICAgZS0+cHRyID0gZS0+YnVmOwotICAgIGUt
PnRvcCA9IE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgLyogTmVlZCB0byBrZWVwIGJ1ZmZlcmluZzsg
cHJvcGFnYXRlIGxlbmd0aCBpbmZvIGludG8gZW5jbG9zaW5nCi0gICAgICogc3VibWVzc2FnZXMu
ICovCi0gICAgLS1lLT50b3A7Ci0gICAgdG9wKGUpLT5tc2dsZW4gKz0gbXNnbGVuICsgdXBiX3Zh
cmludF9zaXplKG1zZ2xlbik7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0vKiB0YWdf
dCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi0vKiBBIHByZWNvbXB1dGVkIChwcmUtZW5jb2RlZCkgdGFnIGFu
ZCBsZW5ndGguICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdWludDhfdCBieXRlczsKLSAgY2hh
ciB0YWdbN107Ci19IHRhZ190OwotCi0vKiBBbGxvY2F0ZXMgYSBuZXcgdGFnIGZvciB0aGlzIGZp
ZWxkLCBhbmQgc2V0cyBpdCBpbiB0aGVzZSBoYW5kbGVyYXR0ci4gKi8KLXN0YXRpYyB2b2lkIG5l
d190YWcodXBiX2hhbmRsZXJzICpoLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsIHVwYl93aXJldHlw
ZV90IHd0LAotICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpIHsKLSAg
dWludDMyX3QgbiA9IHVwYl9maWVsZGRlZl9udW1iZXIoZik7Ci0KLSAgdGFnX3QgKnRhZyA9IG1h
bGxvYyhzaXplb2YodGFnX3QpKTsKLSAgdGFnLT5ieXRlcyA9IHVwYl92ZW5jb2RlNjQoKG4gPDwg
MykgfCB3dCwgdGFnLT50YWcpOwotCi0gIHVwYl9oYW5kbGVyYXR0cl9pbml0KGF0dHIpOwotICB1
cGJfaGFuZGxlcmF0dHJfc2V0aGFuZGxlcmRhdGEoYXR0ciwgdGFnKTsKLSAgdXBiX2hhbmRsZXJz
X2FkZGNsZWFudXAoaCwgdGFnLCBmcmVlKTsKLX0KLQotc3RhdGljIGJvb2wgZW5jb2RlX3RhZyh1
cGJfcGJfZW5jb2RlciAqZSwgY29uc3QgdGFnX3QgKnRhZykgewotICByZXR1cm4gZW5jb2RlX2J5
dGVzKGUsIHRhZy0+dGFnLCB0YWctPmJ5dGVzKTsKLX0KLQotCi0vKiBlbmNvZGluZyBvZiB3aXJl
IHR5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwotCi1zdGF0aWMgYm9vbCBlbmNvZGVfZml4ZWQ2NCh1cGJfcGJfZW5jb2RlciAqZSwgdWlu
dDY0X3QgdmFsKSB7Ci0gIC8qIFRPRE8oaGFiZXJtYW4pOiBieXRlLXN3YXAgZm9yIGJpZyBlbmRp
YW4uICovCi0gIHJldHVybiBlbmNvZGVfYnl0ZXMoZSwgJnZhbCwgc2l6ZW9mKHVpbnQ2NF90KSk7
Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZV9maXhlZDMyKHVwYl9wYl9lbmNvZGVyICplLCB1aW50
MzJfdCB2YWwpIHsKLSAgLyogVE9ETyhoYWJlcm1hbik6IGJ5dGUtc3dhcCBmb3IgYmlnIGVuZGlh
bi4gKi8KLSAgcmV0dXJuIGVuY29kZV9ieXRlcyhlLCAmdmFsLCBzaXplb2YodWludDMyX3QpKTsK
LX0KLQotc3RhdGljIGJvb2wgZW5jb2RlX3ZhcmludCh1cGJfcGJfZW5jb2RlciAqZSwgdWludDY0
X3QgdmFsKSB7Ci0gIGlmICghcmVzZXJ2ZShlLCBVUEJfUEJfVkFSSU5UX01BWF9MRU4pKSB7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZW5jb2Rlcl9hZHZhbmNlKGUsIHVwYl92ZW5jb2Rl
NjQodmFsLCBlLT5wdHIpKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdCBk
YmwydWludDY0KGRvdWJsZSBkKSB7Ci0gIHVpbnQ2NF90IHJldDsKLSAgbWVtY3B5KCZyZXQsICZk
LCBzaXplb2YodWludDY0X3QpKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHVpbnQzMl90
IGZsdDJ1aW50MzIoZmxvYXQgZCkgewotICB1aW50MzJfdCByZXQ7Ci0gIG1lbWNweSgmcmV0LCAm
ZCwgc2l6ZW9mKHVpbnQzMl90KSk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLQotLyogZW5jb2Rpbmcg
b2YgcHJvdG8gdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KLQotc3RhdGljIGJvb2wgc3RhcnRtc2codm9pZCAqYywgY29uc3Qgdm9pZCAq
aGQpIHsKLSAgdXBiX3BiX2VuY29kZXIgKmUgPSBjOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgaWYg
KGUtPmRlcHRoKysgPT0gMCkgewotICAgIHVwYl9ieXRlc3Npbmtfc3RhcnQoZS0+b3V0cHV0Xywg
MCwgJmUtPnN1YmMpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBlbmRt
c2codm9pZCAqYywgY29uc3Qgdm9pZCAqaGQsIHVwYl9zdGF0dXMgKnN0YXR1cykgewotICB1cGJf
cGJfZW5jb2RlciAqZSA9IGM7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKHN0YXR1
cyk7Ci0gIGlmICgtLWUtPmRlcHRoID09IDApIHsKLSAgICB1cGJfYnl0ZXNzaW5rX2VuZChlLT5v
dXRwdXRfKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgKmVuY29kZV9z
dGFydGRlbGltZmllbGQodm9pZCAqYywgY29uc3Qgdm9pZCAqaGQpIHsKLSAgYm9vbCBvayA9IGVu
Y29kZV90YWcoYywgaGQpICYmIGNvbW1pdChjKSAmJiBzdGFydF9kZWxpbShjKTsKLSAgcmV0dXJu
IG9rID8gYyA6IFVQQl9CUkVBSzsKLX0KLQotc3RhdGljIGJvb2wgZW5jb2RlX2VuZGRlbGltZmll
bGQodm9pZCAqYywgY29uc3Qgdm9pZCAqaGQpIHsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIHJldHVy
biBlbmRfZGVsaW0oYyk7Ci19Ci0KLXN0YXRpYyB2b2lkICplbmNvZGVfc3RhcnRncm91cCh2b2lk
ICpjLCBjb25zdCB2b2lkICpoZCkgewotICByZXR1cm4gKGVuY29kZV90YWcoYywgaGQpICYmIGNv
bW1pdChjKSkgPyBjIDogVVBCX0JSRUFLOwotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVfZW5kZ3Jv
dXAodm9pZCAqYywgY29uc3Qgdm9pZCAqaGQpIHsKLSAgcmV0dXJuIGVuY29kZV90YWcoYywgaGQp
ICYmIGNvbW1pdChjKTsKLX0KLQotc3RhdGljIHZvaWQgKmVuY29kZV9zdGFydHN0cih2b2lkICpj
LCBjb25zdCB2b2lkICpoZCwgc2l6ZV90IHNpemVfaGludCkgewotICBVUEJfVU5VU0VEKHNpemVf
aGludCk7Ci0gIHJldHVybiBlbmNvZGVfc3RhcnRkZWxpbWZpZWxkKGMsIGhkKTsKLX0KLQotc3Rh
dGljIHNpemVfdCBlbmNvZGVfc3RyYnVmKHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhkLCBjb25zdCBj
aGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgY29uc3Qg
dXBiX2J1ZmhhbmRsZSAqaCkgewotICBVUEJfVU5VU0VEKGhkKTsKLSAgVVBCX1VOVVNFRChoKTsK
LSAgcmV0dXJuIGVuY29kZV9ieXRlcyhjLCBidWYsIGxlbikgPyBsZW4gOiAwOwotfQotCi0jZGVm
aW5lIFQodHlwZSwgY3R5cGUsIGNvbnZlcnQsIGVuY29kZSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBzdGF0aWMgYm9vbCBlbmNvZGVfc2NhbGFyXyMjdHlwZSh2b2lkICpl
LCBjb25zdCB2b2lkICpoZCwgY3R5cGUgdmFsKSB7IFwKLSAgICByZXR1cm4gZW5jb2RlX3RhZyhl
LCBoZCkgJiYgZW5jb2RlKGUsIChjb252ZXJ0KSh2YWwpKSAmJiBjb21taXQoZSk7ICBcCi0gIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBzdGF0aWMgYm9vbCBlbmNvZGVfcGFja2VkXyMjdHlwZSh2b2lkICpl
LCBjb25zdCB2b2lkICpoZCwgY3R5cGUgdmFsKSB7IFwKLSAgICBVUEJfVU5VU0VEKGhkKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
cmV0dXJuIGVuY29kZShlLCAoY29udmVydCkodmFsKSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICB9Ci0KLVQoZG91YmxlLCAgIGRvdWJsZSwgICBkYmwydWludDY0LCAg
IGVuY29kZV9maXhlZDY0KQotVChmbG9hdCwgICAgZmxvYXQsICAgIGZsdDJ1aW50MzIsICAgZW5j
b2RlX2ZpeGVkMzIpCi1UKGludDY0LCAgICBpbnQ2NF90LCAgdWludDY0X3QsICAgICBlbmNvZGVf
dmFyaW50KQotVChpbnQzMiwgICAgaW50MzJfdCwgIHVpbnQzMl90LCAgICAgZW5jb2RlX3Zhcmlu
dCkKLVQoZml4ZWQ2NCwgIHVpbnQ2NF90LCB1aW50NjRfdCwgICAgIGVuY29kZV9maXhlZDY0KQot
VChmaXhlZDMyLCAgdWludDMyX3QsIHVpbnQzMl90LCAgICAgZW5jb2RlX2ZpeGVkMzIpCi1UKGJv
b2wsICAgICBib29sLCAgICAgYm9vbCwgICAgICAgICBlbmNvZGVfdmFyaW50KQotVCh1aW50MzIs
ICAgdWludDMyX3QsIHVpbnQzMl90LCAgICAgZW5jb2RlX3ZhcmludCkKLVQodWludDY0LCAgIHVp
bnQ2NF90LCB1aW50NjRfdCwgICAgIGVuY29kZV92YXJpbnQpCi1UKGVudW0sICAgICBpbnQzMl90
LCAgdWludDMyX3QsICAgICBlbmNvZGVfdmFyaW50KQotVChzZml4ZWQzMiwgaW50MzJfdCwgIHVp
bnQzMl90LCAgICAgZW5jb2RlX2ZpeGVkMzIpCi1UKHNmaXhlZDY0LCBpbnQ2NF90LCAgdWludDY0
X3QsICAgICBlbmNvZGVfZml4ZWQ2NCkKLVQoc2ludDMyLCAgIGludDMyX3QsICB1cGJfenplbmNf
MzIsIGVuY29kZV92YXJpbnQpCi1UKHNpbnQ2NCwgICBpbnQ2NF90LCAgdXBiX3p6ZW5jXzY0LCBl
bmNvZGVfdmFyaW50KQotCi0jdW5kZWYgVAotCi0KLS8qIGNvZGUgdG8gYnVpbGQgdGhlIGhhbmRs
ZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0K
LXN0YXRpYyB2b2lkIG5ld2hhbmRsZXJzX2NhbGxiYWNrKGNvbnN0IHZvaWQgKmNsb3N1cmUsIHVw
Yl9oYW5kbGVycyAqaCkgewotICBjb25zdCB1cGJfbXNnZGVmICptOwotICB1cGJfbXNnX2ZpZWxk
X2l0ZXIgaTsKLQotICBVUEJfVU5VU0VEKGNsb3N1cmUpOwotCi0gIHVwYl9oYW5kbGVyc19zZXRz
dGFydG1zZyhoLCBzdGFydG1zZywgTlVMTCk7Ci0gIHVwYl9oYW5kbGVyc19zZXRlbmRtc2coaCwg
ZW5kbXNnLCBOVUxMKTsKLQotICBtID0gdXBiX2hhbmRsZXJzX21zZ2RlZihoKTsKLSAgZm9yKHVw
Yl9tc2dfZmllbGRfYmVnaW4oJmksIG0pOwotICAgICAgIXVwYl9tc2dfZmllbGRfZG9uZSgmaSk7
Ci0gICAgICB1cGJfbXNnX2ZpZWxkX25leHQoJmkpKSB7Ci0gICAgY29uc3QgdXBiX2ZpZWxkZGVm
ICpmID0gdXBiX21zZ19pdGVyX2ZpZWxkKCZpKTsKLSAgICBib29sIHBhY2tlZCA9IHVwYl9maWVs
ZGRlZl9pc3NlcShmKSAmJiB1cGJfZmllbGRkZWZfaXNwcmltaXRpdmUoZikgJiYKLSAgICAgICAg
ICAgICAgICAgIHVwYl9maWVsZGRlZl9wYWNrZWQoZik7Ci0gICAgdXBiX2hhbmRsZXJhdHRyIGF0
dHI7Ci0gICAgdXBiX3dpcmV0eXBlX3Qgd3QgPQotICAgICAgICBwYWNrZWQgPyBVUEJfV0lSRV9U
WVBFX0RFTElNSVRFRAotICAgICAgICAgICAgICAgOiB1cGJfcGJfbmF0aXZlX3dpcmVfdHlwZXNb
dXBiX2ZpZWxkZGVmX2Rlc2NyaXB0b3J0eXBlKGYpXTsKLQotICAgIC8qIFByZS1lbmNvZGUgdGhl
IHRhZyBmb3IgdGhpcyBmaWVsZC4gKi8KLSAgICBuZXdfdGFnKGgsIGYsIHd0LCAmYXR0cik7Ci0K
LSAgICBpZiAocGFja2VkKSB7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzZXEoaCwgZiwg
ZW5jb2RlX3N0YXJ0ZGVsaW1maWVsZCwgJmF0dHIpOwotICAgICAgdXBiX2hhbmRsZXJzX3NldGVu
ZHNlcShoLCBmLCBlbmNvZGVfZW5kZGVsaW1maWVsZCwgJmF0dHIpOwotICAgIH0KLQotI2RlZmlu
ZSBUKHVwcGVyLCBsb3dlciwgdXBidHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBjYXNlIFVQQl9ERVNDUklQVE9SX1RZUEVfIyN1cHBlcjogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwYWNrZWQpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdXBiX2hhbmRsZXJz
X3NldCMjdXBidHlwZShoLCBmLCBlbmNvZGVfcGFja2VkXyMjbG93ZXIsICZhdHRyKTsgXAotICAg
IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgdXBiX2hhbmRsZXJzX3NldCMjdXBidHlwZShoLCBmLCBlbmNvZGVf
c2NhbGFyXyMjbG93ZXIsICZhdHRyKTsgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGJyZWFrOwotCi0g
ICAgc3dpdGNoICh1cGJfZmllbGRkZWZfZGVzY3JpcHRvcnR5cGUoZikpIHsKLSAgICAgIFQoRE9V
QkxFLCAgIGRvdWJsZSwgICBkb3VibGUpOwotICAgICAgVChGTE9BVCwgICAgZmxvYXQsICAgIGZs
b2F0KTsKLSAgICAgIFQoSU5UNjQsICAgIGludDY0LCAgICBpbnQ2NCk7Ci0gICAgICBUKElOVDMy
LCAgICBpbnQzMiwgICAgaW50MzIpOwotICAgICAgVChGSVhFRDY0LCAgZml4ZWQ2NCwgIHVpbnQ2
NCk7Ci0gICAgICBUKEZJWEVEMzIsICBmaXhlZDMyLCAgdWludDMyKTsKLSAgICAgIFQoQk9PTCwg
ICAgIGJvb2wsICAgICBib29sKTsKLSAgICAgIFQoVUlOVDMyLCAgIHVpbnQzMiwgICB1aW50MzIp
OwotICAgICAgVChVSU5UNjQsICAgdWludDY0LCAgIHVpbnQ2NCk7Ci0gICAgICBUKEVOVU0sICAg
ICBlbnVtLCAgICAgaW50MzIpOwotICAgICAgVChTRklYRUQzMiwgc2ZpeGVkMzIsIGludDMyKTsK
LSAgICAgIFQoU0ZJWEVENjQsIHNmaXhlZDY0LCBpbnQ2NCk7Ci0gICAgICBUKFNJTlQzMiwgICBz
aW50MzIsICAgaW50MzIpOwotICAgICAgVChTSU5UNjQsICAgc2ludDY0LCAgIGludDY0KTsKLSAg
ICAgIGNhc2UgVVBCX0RFU0NSSVBUT1JfVFlQRV9TVFJJTkc6Ci0gICAgICBjYXNlIFVQQl9ERVND
UklQVE9SX1RZUEVfQllURVM6Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHN0cihoLCBm
LCBlbmNvZGVfc3RhcnRzdHIsICZhdHRyKTsKLSAgICAgICAgdXBiX2hhbmRsZXJzX3NldGVuZHN0
cihoLCBmLCBlbmNvZGVfZW5kZGVsaW1maWVsZCwgJmF0dHIpOwotICAgICAgICB1cGJfaGFuZGxl
cnNfc2V0c3RyaW5nKGgsIGYsIGVuY29kZV9zdHJidWYsICZhdHRyKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIFVQQl9ERVNDUklQVE9SX1RZUEVfTUVTU0FHRToKLSAgICAgICAgdXBiX2hh
bmRsZXJzX3NldHN0YXJ0c3VibXNnKGgsIGYsIGVuY29kZV9zdGFydGRlbGltZmllbGQsICZhdHRy
KTsKLSAgICAgICAgdXBiX2hhbmRsZXJzX3NldGVuZHN1Ym1zZyhoLCBmLCBlbmNvZGVfZW5kZGVs
aW1maWVsZCwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVVBCX0RFU0NSSVBU
T1JfVFlQRV9HUk9VUDogewotICAgICAgICAvKiBFbmRncm91cCB0YWtlcyBhIGRpZmZlcmVudCB0
YWcgKHdpcmVfdHlwZSA9IEVORF9HUk9VUCkuICovCi0gICAgICAgIHVwYl9oYW5kbGVyYXR0ciBh
dHRyMjsKLSAgICAgICAgbmV3X3RhZyhoLCBmLCBVUEJfV0lSRV9UWVBFX0VORF9HUk9VUCwgJmF0
dHIyKTsKLQotICAgICAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzdWJtc2coaCwgZiwgZW5jb2Rl
X3N0YXJ0Z3JvdXAsICZhdHRyKTsKLSAgICAgICAgdXBiX2hhbmRsZXJzX3NldGVuZHN1Ym1zZyho
LCBmLCBlbmNvZGVfZW5kZ3JvdXAsICZhdHRyMik7Ci0KLSAgICAgICAgdXBiX2hhbmRsZXJhdHRy
X3VuaW5pdCgmYXR0cjIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSN1bmRl
ZiBUCi0KLSAgICB1cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZhdHRyKTsKLSAgfQotfQotCi12b2lk
IHVwYl9wYl9lbmNvZGVyX3Jlc2V0KHVwYl9wYl9lbmNvZGVyICplKSB7Ci0gIGUtPnNlZ3B0ciA9
IE5VTEw7Ci0gIGUtPnRvcCA9IE5VTEw7Ci0gIGUtPmRlcHRoID0gMDsKLX0KLQotCi0vKiBwdWJs
aWMgQVBJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi1jb25zdCB1cGJfaGFuZGxlcnMgKnVwYl9wYl9lbmNvZGVyX25l
d2hhbmRsZXJzKGNvbnN0IHVwYl9tc2dkZWYgKm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIHJldHVybiB1cGJf
aGFuZGxlcnNfbmV3ZnJvemVuKG0sIG93bmVyLCBuZXdoYW5kbGVyc19jYWxsYmFjaywgTlVMTCk7
Ci19Ci0KLXVwYl9wYl9lbmNvZGVyICp1cGJfcGJfZW5jb2Rlcl9jcmVhdGUodXBiX2VudiAqZW52
LCBjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwYl9ieXRlc3NpbmsgKm91dHB1dCkgewotICBjb25zdCBzaXplX3QgaW5pdGlhbF9i
dWZzaXplID0gMjU2OwotICBjb25zdCBzaXplX3QgaW5pdGlhbF9zZWdidWZzaXplID0gMTY7Ci0g
IC8qIFRPRE8oaGFiZXJtYW4pOiBtYWtlIHRoaXMgY29uZmlndXJhYmxlLiAqLwotICBjb25zdCBz
aXplX3Qgc3RhY2tfc2l6ZSA9IDY0OwotI2lmbmRlZiBOREVCVUcKLSAgY29uc3Qgc2l6ZV90IHNp
emVfYmVmb3JlID0gdXBiX2Vudl9ieXRlc2FsbG9jYXRlZChlbnYpOwotI2VuZGlmCi0KLSAgdXBi
X3BiX2VuY29kZXIgKmUgPSB1cGJfZW52X21hbGxvYyhlbnYsIHNpemVvZih1cGJfcGJfZW5jb2Rl
cikpOwotICBpZiAoIWUpIHJldHVybiBOVUxMOwotCi0gIGUtPmJ1ZiA9IHVwYl9lbnZfbWFsbG9j
KGVudiwgaW5pdGlhbF9idWZzaXplKTsKLSAgZS0+c2VnYnVmID0gdXBiX2Vudl9tYWxsb2MoZW52
LCBpbml0aWFsX3NlZ2J1ZnNpemUgKiBzaXplb2YoKmUtPnNlZ2J1ZikpOwotICBlLT5zdGFjayA9
IHVwYl9lbnZfbWFsbG9jKGVudiwgc3RhY2tfc2l6ZSAqIHNpemVvZigqZS0+c3RhY2spKTsKLQot
ICBpZiAoIWUtPmJ1ZiB8fCAhZS0+c2VnYnVmIHx8ICFlLT5zdGFjaykgewotICAgIHJldHVybiBO
VUxMOwotICB9Ci0KLSAgZS0+bGltaXQgPSBlLT5idWYgKyBpbml0aWFsX2J1ZnNpemU7Ci0gIGUt
PnNlZ2xpbWl0ID0gZS0+c2VnYnVmICsgaW5pdGlhbF9zZWdidWZzaXplOwotICBlLT5zdGFja2xp
bWl0ID0gZS0+c3RhY2sgKyBzdGFja19zaXplOwotCi0gIHVwYl9wYl9lbmNvZGVyX3Jlc2V0KGUp
OwotICB1cGJfc2lua19yZXNldCgmZS0+aW5wdXRfLCBoLCBlKTsKLQotICBlLT5lbnYgPSBlbnY7
Ci0gIGUtPm91dHB1dF8gPSBvdXRwdXQ7Ci0gIGUtPnN1YmMgPSBvdXRwdXQtPmNsb3N1cmU7Ci0g
IGUtPnB0ciA9IGUtPmJ1ZjsKLQotICAvKiBJZiB0aGlzIGZhaWxzLCBpbmNyZWFzZSB0aGUgdmFs
dWUgaW4gZW5jb2Rlci5oLiAqLwotICBhc3NlcnQodXBiX2Vudl9ieXRlc2FsbG9jYXRlZChlbnYp
IC0gc2l6ZV9iZWZvcmUgPD0gVVBCX1BCX0VOQ09ERVJfU0laRSk7Ci0gIHJldHVybiBlOwotfQot
Ci11cGJfc2luayAqdXBiX3BiX2VuY29kZXJfaW5wdXQodXBiX3BiX2VuY29kZXIgKmUpIHsgcmV0
dXJuICZlLT5pbnB1dF87IH0KLQotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotdXBiX2RlZiAqKnVwYl9sb2FkX2RlZnNfZnJv
bV9kZXNjcmlwdG9yKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgaW50ICpuLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm93bmVyLCB1cGJfc3RhdHVz
ICpzdGF0dXMpIHsKLSAgLyogQ3JlYXRlIGhhbmRsZXJzLiAqLwotICBjb25zdCB1cGJfcGJkZWNv
ZGVybWV0aG9kICpkZWNvZGVyX207Ci0gIGNvbnN0IHVwYl9oYW5kbGVycyAqcmVhZGVyX2ggPSB1
cGJfZGVzY3JlYWRlcl9uZXdoYW5kbGVycygmcmVhZGVyX2gpOwotICB1cGJfZW52IGVudjsKLSAg
dXBiX3BiZGVjb2Rlcm1ldGhvZG9wdHMgb3B0czsKLSAgdXBiX3BiZGVjb2RlciAqZGVjb2RlcjsK
LSAgdXBiX2Rlc2NyZWFkZXIgKnJlYWRlcjsKLSAgYm9vbCBvazsKLSAgdXBiX2RlZiAqKnJldCA9
IE5VTEw7Ci0gIHVwYl9kZWYgKipkZWZzOwotCi0gIHVwYl9wYmRlY29kZXJtZXRob2RvcHRzX2lu
aXQoJm9wdHMsIHJlYWRlcl9oKTsKLSAgZGVjb2Rlcl9tID0gdXBiX3BiZGVjb2Rlcm1ldGhvZF9u
ZXcoJm9wdHMsICZkZWNvZGVyX20pOwotCi0gIHVwYl9lbnZfaW5pdCgmZW52KTsKLSAgdXBiX2Vu
dl9yZXBvcnRlcnJvcnN0bygmZW52LCBzdGF0dXMpOwotCi0gIHJlYWRlciA9IHVwYl9kZXNjcmVh
ZGVyX2NyZWF0ZSgmZW52LCByZWFkZXJfaCk7Ci0gIGRlY29kZXIgPSB1cGJfcGJkZWNvZGVyX2Ny
ZWF0ZSgmZW52LCBkZWNvZGVyX20sIHVwYl9kZXNjcmVhZGVyX2lucHV0KHJlYWRlcikpOwotCi0g
IC8qIFB1c2ggaW5wdXQgZGF0YS4gKi8KLSAgb2sgPSB1cGJfYnVmc3JjX3B1dGJ1ZihzdHIsIGxl
biwgdXBiX3BiZGVjb2Rlcl9pbnB1dChkZWNvZGVyKSk7Ci0KLSAgaWYgKCFvaykgZ290byBjbGVh
bnVwOwotICBkZWZzID0gdXBiX2Rlc2NyZWFkZXJfZ2V0ZGVmcyhyZWFkZXIsIG93bmVyLCBuKTsK
LSAgcmV0ID0gbWFsbG9jKHNpemVvZih1cGJfZGVmKikgKiAoKm4pKTsKLSAgbWVtY3B5KHJldCwg
ZGVmcywgc2l6ZW9mKHVwYl9kZWYqKSAqICgqbikpOwotCi1jbGVhbnVwOgotICB1cGJfZW52X3Vu
aW5pdCgmZW52KTsKLSAgdXBiX2hhbmRsZXJzX3VucmVmKHJlYWRlcl9oLCAmcmVhZGVyX2gpOwot
ICB1cGJfcGJkZWNvZGVybWV0aG9kX3VucmVmKGRlY29kZXJfbSwgJmRlY29kZXJfbSk7Ci0gIHJl
dHVybiByZXQ7Ci19Ci0KLWJvb2wgdXBiX2xvYWRfZGVzY3JpcHRvcl9pbnRvX3N5bXRhYih1cGJf
c3ltdGFiICpzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0gIGludCBuOwotICBi
b29sIHN1Y2Nlc3M7Ci0gIHVwYl9kZWYgKipkZWZzID0gdXBiX2xvYWRfZGVmc19mcm9tX2Rlc2Ny
aXB0b3Ioc3RyLCBsZW4sICZuLCAmZGVmcywgc3RhdHVzKTsKLSAgaWYgKCFkZWZzKSByZXR1cm4g
ZmFsc2U7Ci0gIHN1Y2Nlc3MgPSB1cGJfc3ltdGFiX2FkZChzLCBkZWZzLCBuLCAmZGVmcywgc3Rh
dHVzKTsKLSAgZnJlZShkZWZzKTsKLSAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWNoYXIgKnVwYl9y
ZWFkZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgc2l6ZV90ICpsZW4pIHsKLSAgbG9uZyBzaXpl
OwotICBjaGFyICpidWY7Ci0gIEZJTEUgKmYgPSBmb3BlbihmaWxlbmFtZSwgInJiIik7Ci0gIGlm
KCFmKSByZXR1cm4gTlVMTDsKLSAgaWYoZnNlZWsoZiwgMCwgU0VFS19FTkQpICE9IDApIGdvdG8g
ZXJyb3I7Ci0gIHNpemUgPSBmdGVsbChmKTsKLSAgaWYoc2l6ZSA8IDApIGdvdG8gZXJyb3I7Ci0g
IGlmKGZzZWVrKGYsIDAsIFNFRUtfU0VUKSAhPSAwKSBnb3RvIGVycm9yOwotICBidWYgPSBtYWxs
b2Moc2l6ZSArIDEpOwotICBpZihzaXplICYmIGZyZWFkKGJ1Ziwgc2l6ZSwgMSwgZikgIT0gMSkg
Z290byBlcnJvcjsKLSAgZmNsb3NlKGYpOwotICBpZiAobGVuKSAqbGVuID0gc2l6ZTsKLSAgcmV0
dXJuIGJ1ZjsKLQotZXJyb3I6Ci0gIGZjbG9zZShmKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWJv
b2wgdXBiX2xvYWRfZGVzY3JpcHRvcl9maWxlX2ludG9fc3ltdGFiKHVwYl9zeW10YWIgKnN5bXRh
YiwgY29uc3QgY2hhciAqZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGJfc3RhdHVzICpzdGF0dXMpIHsKLSAgc2l6ZV90IGxlbjsKLSAgYm9vbCBzdWNj
ZXNzOwotICBjaGFyICpkYXRhID0gdXBiX3JlYWRmaWxlKGZuYW1lLCAmbGVuKTsKLSAgaWYgKCFk
YXRhKSB7Ci0gICAgaWYgKHN0YXR1cykgdXBiX3N0YXR1c19zZXRlcnJmKHN0YXR1cywgIkNvdWxk
bid0IHJlYWQgZmlsZTogJXMiLCBmbmFtZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHN1
Y2Nlc3MgPSB1cGJfbG9hZF9kZXNjcmlwdG9yX2ludG9fc3ltdGFiKHN5bXRhYiwgZGF0YSwgbGVu
LCBzdGF0dXMpOwotICBmcmVlKGRhdGEpOwotICByZXR1cm4gc3VjY2VzczsKLX0KLS8qCi0gKiB1
cGI6OnBiOjpUZXh0UHJpbnRlcgotICoKLSAqIE9QVDogVGhpcyBpcyBub3Qgb3B0aW1pemVkIGF0
IGFsbC4gIEl0IHVzZXMgcHJpbnRmKCkgd2hpY2ggcGFyc2VzIHRoZSBmb3JtYXQKLSAqIHN0cmlu
ZyBldmVyeSB0aW1lLCBhbmQgaXQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgZXZlcnkgcHV0LgotICov
Ci0KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZmxvYXQuaD4KLSNpbmNsdWRlIDxp
bnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLQotc3RydWN0IHVwYl90ZXh0
cHJpbnRlciB7Ci0gIHVwYl9zaW5rIGlucHV0XzsKLSAgdXBiX2J5dGVzc2luayAqb3V0cHV0XzsK
LSAgaW50IGluZGVudF9kZXB0aF87Ci0gIGJvb2wgc2luZ2xlX2xpbmVfOwotICB2b2lkICpzdWJj
OwotfTsKLQotI2RlZmluZSBDSEVDSyh4KSBpZiAoKHgpIDwgMCkgZ290byBlcnI7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyICpzaG9ydG5hbWUoY29uc3QgY2hhciAqbG9uZ25hbWUpIHsKLSAgY29uc3Qg
Y2hhciAqbGFzdCA9IHN0cnJjaHIobG9uZ25hbWUsICcuJyk7Ci0gIHJldHVybiBsYXN0ID8gbGFz
dCArIDEgOiBsb25nbmFtZTsKLX0KLQotc3RhdGljIGludCBpbmRlbnQodXBiX3RleHRwcmludGVy
ICpwKSB7Ci0gIGludCBpOwotICBpZiAoIXAtPnNpbmdsZV9saW5lXykKLSAgICBmb3IgKGkgPSAw
OyBpIDwgcC0+aW5kZW50X2RlcHRoXzsgaSsrKQotICAgICAgdXBiX2J5dGVzc2lua19wdXRidWYo
cC0+b3V0cHV0XywgcC0+c3ViYywgIiAgIiwgMiwgTlVMTCk7Ci0gIHJldHVybiAwOwotfQotCi1z
dGF0aWMgaW50IGVuZGZpZWxkKHVwYl90ZXh0cHJpbnRlciAqcCkgewotICBjb25zdCBjaGFyIGNo
ID0gKHAtPnNpbmdsZV9saW5lXyA/ICcgJyA6ICdcbicpOwotICB1cGJfYnl0ZXNzaW5rX3B1dGJ1
ZihwLT5vdXRwdXRfLCBwLT5zdWJjLCAmY2gsIDEsIE5VTEwpOwotICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIGludCBwdXRlc2NhcGVkKHVwYl90ZXh0cHJpbnRlciAqcCwgY29uc3QgY2hhciAqYnVm
LCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVfdXRmOCkg
ewotICAvKiBCYXNlZCBvbiBDRXNjYXBlSW50ZXJuYWwoKSBmcm9tIEdvb2dsZSdzIHByb3RvYnVm
IHJlbGVhc2UuICovCi0gIGNoYXIgZHN0YnVmWzQwOTZdLCAqZHN0ID0gZHN0YnVmLCAqZHN0ZW5k
ID0gZHN0YnVmICsgc2l6ZW9mKGRzdGJ1Zik7Ci0gIGNvbnN0IGNoYXIgKmVuZCA9IGJ1ZiArIGxl
bjsKLQotICAvKiBJIHRoaW5rIGhleCBpcyBwcmV0dGllciBhbmQgbW9yZSB1c2VmdWwsIGJ1dCBw
cm90bzIgdXNlcyBvY3RhbDsgc2hvdWxkCi0gICAqIGludmVzdGlnYXRlIHdoZXRoZXIgaXQgY2Fu
IHBhcnNlIGhleCBhbHNvLiAqLwotICBjb25zdCBib29sIHVzZV9oZXggPSBmYWxzZTsKLSAgYm9v
bCBsYXN0X2hleF9lc2NhcGUgPSBmYWxzZTsgLyogdHJ1ZSBpZiBsYXN0IG91dHB1dCBjaGFyIHdh
cyBceE5OICovCi0KLSAgZm9yICg7IGJ1ZiA8IGVuZDsgYnVmKyspIHsKLSAgICBib29sIGlzX2hl
eF9lc2NhcGU7Ci0KLSAgICBpZiAoZHN0ZW5kIC0gZHN0IDwgNCkgewotICAgICAgdXBiX2J5dGVz
c2lua19wdXRidWYocC0+b3V0cHV0XywgcC0+c3ViYywgZHN0YnVmLCBkc3QgLSBkc3RidWYsIE5V
TEwpOwotICAgICAgZHN0ID0gZHN0YnVmOwotICAgIH0KLQotICAgIGlzX2hleF9lc2NhcGUgPSBm
YWxzZTsKLSAgICBzd2l0Y2ggKCpidWYpIHsKLSAgICAgIGNhc2UgJ1xuJzogKihkc3QrKykgPSAn
XFwnOyAqKGRzdCsrKSA9ICduJzsgIGJyZWFrOwotICAgICAgY2FzZSAnXHInOiAqKGRzdCsrKSA9
ICdcXCc7ICooZHN0KyspID0gJ3InOyAgYnJlYWs7Ci0gICAgICBjYXNlICdcdCc6ICooZHN0Kysp
ID0gJ1xcJzsgKihkc3QrKykgPSAndCc7ICBicmVhazsKLSAgICAgIGNhc2UgJ1wiJzogKihkc3Qr
KykgPSAnXFwnOyAqKGRzdCsrKSA9ICdcIic7IGJyZWFrOwotICAgICAgY2FzZSAnXCcnOiAqKGRz
dCsrKSA9ICdcXCc7ICooZHN0KyspID0gJ1wnJzsgYnJlYWs7Ci0gICAgICBjYXNlICdcXCc6ICoo
ZHN0KyspID0gJ1xcJzsgKihkc3QrKykgPSAnXFwnOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIC8qIE5vdGUgdGhhdCBpZiB3ZSBlbWl0IFx4Tk4gYW5kIHRoZSBidWYgY2hhcmFjdGVy
IGFmdGVyIHRoYXQgaXMgYSBoZXgKLSAgICAgICAgICogZGlnaXQgdGhlbiB0aGF0IGRpZ2l0IG11
c3QgYmUgZXNjYXBlZCB0b28gdG8gcHJldmVudCBpdCBiZWluZwotICAgICAgICAgKiBpbnRlcnBy
ZXRlZCBhcyBwYXJ0IG9mIHRoZSBjaGFyYWN0ZXIgY29kZSBieSBDLiAqLwotICAgICAgICBpZiAo
KCFwcmVzZXJ2ZV91dGY4IHx8ICh1aW50OF90KSpidWYgPCAweDgwKSAmJgotICAgICAgICAgICAg
KCFpc3ByaW50KCpidWYpIHx8IChsYXN0X2hleF9lc2NhcGUgJiYgaXN4ZGlnaXQoKmJ1ZikpKSkg
ewotICAgICAgICAgIHNwcmludGYoZHN0LCAodXNlX2hleCA/ICJcXHglMDJ4IiA6ICJcXCUwM28i
KSwgKHVpbnQ4X3QpKmJ1Zik7Ci0gICAgICAgICAgaXNfaGV4X2VzY2FwZSA9IHVzZV9oZXg7Ci0g
ICAgICAgICAgZHN0ICs9IDQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgKihkc3QrKykg
PSAqYnVmOyBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBsYXN0X2hleF9lc2NhcGUgPSBp
c19oZXhfZXNjYXBlOwotICB9Ci0gIC8qIEZsdXNoIHJlbWFpbmluZyBkYXRhLiAqLwotICB1cGJf
Ynl0ZXNzaW5rX3B1dGJ1ZihwLT5vdXRwdXRfLCBwLT5zdWJjLCBkc3RidWYsIGRzdCAtIGRzdGJ1
ZiwgTlVMTCk7Ci0gIHJldHVybiAwOwotfQotCi1ib29sIHB1dGYodXBiX3RleHRwcmludGVyICpw
LCBjb25zdCBjaGFyICpmbXQsIC4uLikgewotICB2YV9saXN0IGFyZ3M7Ci0gIHZhX2xpc3QgYXJn
c19jb3B5OwotICBjaGFyICpzdHI7Ci0gIGludCB3cml0dGVuOwotICBpbnQgbGVuOwotICBib29s
IG9rOwotCi0gIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0KLSAgLyogUnVuIG9uY2UgdG8gZ2V0IHRo
ZSBsZW5ndGggb2YgdGhlIHN0cmluZy4gKi8KLSAgX3VwYl92YV9jb3B5KGFyZ3NfY29weSwgYXJn
cyk7Ci0gIGxlbiA9IF91cGJfdnNucHJpbnRmKE5VTEwsIDAsIGZtdCwgYXJnc19jb3B5KTsKLSAg
dmFfZW5kKGFyZ3NfY29weSk7Ci0KLSAgLyogKyAxIGZvciBOVUxMIHRlcm1pbmF0b3IgKHZzcHJp
bnRmKCkgcmVxdWlyZXMgaXQgZXZlbiBpZiB3ZSBkb24ndCkuICovCi0gIHN0ciA9IG1hbGxvYyhs
ZW4gKyAxKTsKLSAgaWYgKCFzdHIpIHJldHVybiBmYWxzZTsKLSAgd3JpdHRlbiA9IHZzcHJpbnRm
KHN0ciwgZm10LCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotICBVUEJfQVNTRVJUX1ZBUih3cml0
dGVuLCB3cml0dGVuID09IGxlbik7Ci0KLSAgb2sgPSB1cGJfYnl0ZXNzaW5rX3B1dGJ1ZihwLT5v
dXRwdXRfLCBwLT5zdWJjLCBzdHIsIGxlbiwgTlVMTCk7Ci0gIGZyZWUoc3RyKTsKLSAgcmV0dXJu
IG9rOwotfQotCi0KLS8qIGhhbmRsZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBib29sIHRleHRw
cmludGVyX3N0YXJ0bXNnKHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhkKSB7Ci0gIHVwYl90ZXh0cHJp
bnRlciAqcCA9IGM7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBpZiAocC0+aW5kZW50X2RlcHRoXyA9
PSAwKSB7Ci0gICAgdXBiX2J5dGVzc2lua19zdGFydChwLT5vdXRwdXRfLCAwLCAmcC0+c3ViYyk7
Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHRleHRwcmludGVyX2VuZG1z
Zyh2b2lkICpjLCBjb25zdCB2b2lkICpoZCwgdXBiX3N0YXR1cyAqcykgewotICB1cGJfdGV4dHBy
aW50ZXIgKnAgPSBjOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgVVBCX1VOVVNFRChzKTsKLSAgaWYg
KHAtPmluZGVudF9kZXB0aF8gPT0gMCkgewotICAgIHVwYl9ieXRlc3NpbmtfZW5kKHAtPm91dHB1
dF8pOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0jZGVmaW5lIFRZUEUobmFtZSwgY3R5cGUs
IGZtdCkgXAotICBzdGF0aWMgYm9vbCB0ZXh0cHJpbnRlcl9wdXQgIyMgbmFtZSh2b2lkICpjbG9z
dXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEsIFwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3R5cGUgdmFsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgdXBiX3RleHRwcmludGVyICpwID0gY2xvc3VyZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNvbnN0IHVwYl9maWVsZGRlZiAqZiA9IGhh
bmRsZXJfZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBD
SEVDSyhpbmRlbnQocCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgcHV0ZihwLCAiJXM6ICIgZm10LCB1cGJfZmllbGRkZWZf
bmFtZShmKSwgdmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENIRUNLKGVu
ZGZpZWxkKHApKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVycjogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotc3RhdGljIGJvb2wgdGV4dHByaW50
ZXJfcHV0Ym9vbCh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmFsKSB7Ci0gIHVwYl90ZXh0cHJpbnRl
ciAqcCA9IGNsb3N1cmU7Ci0gIGNvbnN0IHVwYl9maWVsZGRlZiAqZiA9IGhhbmRsZXJfZGF0YTsK
LSAgQ0hFQ0soaW5kZW50KHApKTsKLSAgcHV0ZihwLCAiJXM6ICVzIiwgdXBiX2ZpZWxkZGVmX25h
bWUoZiksIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICBDSEVDSyhlbmRmaWVsZChwKSk7Ci0g
IHJldHVybiB0cnVlOwotZXJyOgotICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNkZWZpbmUgU1RSSU5H
SUZZX0hFTFBFUih4KSAjeAotI2RlZmluZSBTVFJJTkdJRllfTUFDUk9WQUwoeCkgU1RSSU5HSUZZ
X0hFTFBFUih4KQotCi1UWVBFKGludDMyLCAgaW50MzJfdCwgICIlIiBQUklkMzIpCi1UWVBFKGlu
dDY0LCAgaW50NjRfdCwgICIlIiBQUklkNjQpCi1UWVBFKHVpbnQzMiwgdWludDMyX3QsICIlIiBQ
Ukl1MzIpCi1UWVBFKHVpbnQ2NCwgdWludDY0X3QsICIlIiBQUkl1NjQpCi1UWVBFKGZsb2F0LCAg
ZmxvYXQsICAgICIlLiIgU1RSSU5HSUZZX01BQ1JPVkFMKEZMVF9ESUcpICJnIikKLVRZUEUoZG91
YmxlLCBkb3VibGUsICAgIiUuIiBTVFJJTkdJRllfTUFDUk9WQUwoREJMX0RJRykgImciKQotCi0j
dW5kZWYgVFlQRQotCi0vKiBPdXRwdXQgYSBzeW1ib2xpYyB2YWx1ZSBmcm9tIHRoZSBlbnVtIGlm
IGZvdW5kLCBlbHNlIGp1c3QgcHJpbnQgYXMgaW50MzIuICovCi1zdGF0aWMgYm9vbCB0ZXh0cHJp
bnRlcl9wdXRlbnVtKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB2YWwpIHsKLSAgdXBiX3RleHRw
cmludGVyICpwID0gY2xvc3VyZTsKLSAgY29uc3QgdXBiX2ZpZWxkZGVmICpmID0gaGFuZGxlcl9k
YXRhOwotICBjb25zdCB1cGJfZW51bWRlZiAqZW51bV9kZWYgPSB1cGJfZG93bmNhc3RfZW51bWRl
Zih1cGJfZmllbGRkZWZfc3ViZGVmKGYpKTsKLSAgY29uc3QgY2hhciAqbGFiZWwgPSB1cGJfZW51
bWRlZl9pdG9uKGVudW1fZGVmLCB2YWwpOwotICBpZiAobGFiZWwpIHsKLSAgICBpbmRlbnQocCk7
Ci0gICAgcHV0ZihwLCAiJXM6ICVzIiwgdXBiX2ZpZWxkZGVmX25hbWUoZiksIGxhYmVsKTsKLSAg
ICBlbmRmaWVsZChwKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoIXRleHRwcmludGVyX3B1dGludDMy
KGNsb3N1cmUsIGhhbmRsZXJfZGF0YSwgdmFsKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgKnRleHRwcmludGVyX3N0YXJ0c3RyKHZv
aWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgc2l6ZV9oaW50KSB7Ci0gIHVwYl90ZXh0cHJpbnRlciAqcCA9IGNsb3N1cmU7
Ci0gIGNvbnN0IHVwYl9maWVsZGRlZiAqZiA9IGhhbmRsZXJfZGF0YTsKLSAgVVBCX1VOVVNFRChz
aXplX2hpbnQpOwotICBpbmRlbnQocCk7Ci0gIHB1dGYocCwgIiVzOiBcIiIsIHVwYl9maWVsZGRl
Zl9uYW1lKGYpKTsKLSAgcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyBib29sIHRleHRwcmludGVyX2Vu
ZHN0cih2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEpIHsKLSAgdXBiX3Rl
eHRwcmludGVyICpwID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoYW5kbGVyX2RhdGEpOwotICBw
dXRmKHAsICJcIiIpOwotICBlbmRmaWVsZChwKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBzaXplX3QgdGV4dHByaW50ZXJfcHV0c3RyKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhk
LCBjb25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgbGVuLCBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgdXBiX3RleHRwcmludGVy
ICpwID0gY2xvc3VyZTsKLSAgY29uc3QgdXBiX2ZpZWxkZGVmICpmID0gaGQ7Ci0gIFVQQl9VTlVT
RUQoaGFuZGxlKTsKLSAgQ0hFQ0socHV0ZXNjYXBlZChwLCBidWYsIGxlbiwgdXBiX2ZpZWxkZGVm
X3R5cGUoZikgPT0gVVBCX1RZUEVfU1RSSU5HKSk7Ci0gIHJldHVybiBsZW47Ci1lcnI6Ci0gIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCAqdGV4dHByaW50ZXJfc3RhcnRzdWJtc2codm9pZCAq
Y2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhKSB7Ci0gIHVwYl90ZXh0cHJpbnRlciAq
cCA9IGNsb3N1cmU7Ci0gIGNvbnN0IGNoYXIgKm5hbWUgPSBoYW5kbGVyX2RhdGE7Ci0gIENIRUNL
KGluZGVudChwKSk7Ci0gIHB1dGYocCwgIiVzIHslYyIsIG5hbWUsIHAtPnNpbmdsZV9saW5lXyA/
ICcgJyA6ICdcbicpOwotICBwLT5pbmRlbnRfZGVwdGhfKys7Ci0gIHJldHVybiBwOwotZXJyOgot
ICByZXR1cm4gVVBCX0JSRUFLOwotfQotCi1zdGF0aWMgYm9vbCB0ZXh0cHJpbnRlcl9lbmRzdWJt
c2codm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhKSB7Ci0gIHVwYl90ZXh0
cHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlcl9kYXRhKTsKLSAgcC0+
aW5kZW50X2RlcHRoXy0tOwotICBDSEVDSyhpbmRlbnQocCkpOwotICB1cGJfYnl0ZXNzaW5rX3B1
dGJ1ZihwLT5vdXRwdXRfLCBwLT5zdWJjLCAifSIsIDEsIE5VTEwpOwotICBDSEVDSyhlbmRmaWVs
ZChwKSk7Ci0gIHJldHVybiB0cnVlOwotZXJyOgotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRp
YyB2b2lkIG9ubXJlZyhjb25zdCB2b2lkICpjLCB1cGJfaGFuZGxlcnMgKmgpIHsKLSAgY29uc3Qg
dXBiX21zZ2RlZiAqbSA9IHVwYl9oYW5kbGVyc19tc2dkZWYoaCk7Ci0gIHVwYl9tc2dfZmllbGRf
aXRlciBpOwotICBVUEJfVU5VU0VEKGMpOwotCi0gIHVwYl9oYW5kbGVyc19zZXRzdGFydG1zZyho
LCB0ZXh0cHJpbnRlcl9zdGFydG1zZywgTlVMTCk7Ci0gIHVwYl9oYW5kbGVyc19zZXRlbmRtc2co
aCwgdGV4dHByaW50ZXJfZW5kbXNnLCBOVUxMKTsKLQotICBmb3IodXBiX21zZ19maWVsZF9iZWdp
bigmaSwgbSk7Ci0gICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVwYl9tc2df
ZmllbGRfbmV4dCgmaSkpIHsKLSAgICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmll
bGQoJmkpOwotICAgIHVwYl9oYW5kbGVyYXR0ciBhdHRyID0gVVBCX0hBTkRMRVJBVFRSX0lOSVRJ
QUxJWkVSOwotICAgIHVwYl9oYW5kbGVyYXR0cl9zZXRoYW5kbGVyZGF0YSgmYXR0ciwgZik7Ci0g
ICAgc3dpdGNoICh1cGJfZmllbGRkZWZfdHlwZShmKSkgewotICAgICAgY2FzZSBVUEJfVFlQRV9J
TlQzMjoKLSAgICAgICAgdXBiX2hhbmRsZXJzX3NldGludDMyKGgsIGYsIHRleHRwcmludGVyX3B1
dGludDMyLCAmYXR0cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9JTlQ2
NDoKLSAgICAgICAgdXBiX2hhbmRsZXJzX3NldGludDY0KGgsIGYsIHRleHRwcmludGVyX3B1dGlu
dDY0LCAmYXR0cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9VSU5UMzI6
Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXR1aW50MzIoaCwgZiwgdGV4dHByaW50ZXJfcHV0dWlu
dDMyLCAmYXR0cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9VSU5UNjQ6
Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXR1aW50NjQoaCwgZiwgdGV4dHByaW50ZXJfcHV0dWlu
dDY0LCAmYXR0cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9GTE9BVDoK
LSAgICAgICAgdXBiX2hhbmRsZXJzX3NldGZsb2F0KGgsIGYsIHRleHRwcmludGVyX3B1dGZsb2F0
LCAmYXR0cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9ET1VCTEU6Ci0g
ICAgICAgIHVwYl9oYW5kbGVyc19zZXRkb3VibGUoaCwgZiwgdGV4dHByaW50ZXJfcHV0ZG91Ymxl
LCAmYXR0cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9CT09MOgotICAg
ICAgICB1cGJfaGFuZGxlcnNfc2V0Ym9vbChoLCBmLCB0ZXh0cHJpbnRlcl9wdXRib29sLCAmYXR0
cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9TVFJJTkc6Ci0gICAgICBj
YXNlIFVQQl9UWVBFX0JZVEVTOgotICAgICAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzdHIoaCwg
ZiwgdGV4dHByaW50ZXJfc3RhcnRzdHIsICZhdHRyKTsKLSAgICAgICAgdXBiX2hhbmRsZXJzX3Nl
dHN0cmluZyhoLCBmLCB0ZXh0cHJpbnRlcl9wdXRzdHIsICZhdHRyKTsKLSAgICAgICAgdXBiX2hh
bmRsZXJzX3NldGVuZHN0cihoLCBmLCB0ZXh0cHJpbnRlcl9lbmRzdHIsICZhdHRyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIFVQQl9UWVBFX01FU1NBR0U6IHsKLSAgICAgICAgY29uc3Qg
Y2hhciAqbmFtZSA9Ci0gICAgICAgICAgICB1cGJfZmllbGRkZWZfaXN0YWdkZWxpbShmKQotICAg
ICAgICAgICAgICAgID8gc2hvcnRuYW1lKHVwYl9tc2dkZWZfZnVsbG5hbWUodXBiX2ZpZWxkZGVm
X21zZ3N1YmRlZihmKSkpCi0gICAgICAgICAgICAgICAgOiB1cGJfZmllbGRkZWZfbmFtZShmKTsK
LSAgICAgICAgdXBiX2hhbmRsZXJhdHRyX3NldGhhbmRsZXJkYXRhKCZhdHRyLCBuYW1lKTsKLSAg
ICAgICAgdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3VibXNnKGgsIGYsIHRleHRwcmludGVyX3N0YXJ0
c3VibXNnLCAmYXR0cik7Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXRlbmRzdWJtc2coaCwgZiwg
dGV4dHByaW50ZXJfZW5kc3VibXNnLCAmYXR0cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
ICAgICAgY2FzZSBVUEJfVFlQRV9FTlVNOgotICAgICAgICB1cGJfaGFuZGxlcnNfc2V0aW50MzIo
aCwgZiwgdGV4dHByaW50ZXJfcHV0ZW51bSwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgdGV4dHByaW50ZXJfcmVzZXQodXBiX3RleHRwcmludGVy
ICpwLCBib29sIHNpbmdsZV9saW5lKSB7Ci0gIHAtPnNpbmdsZV9saW5lXyA9IHNpbmdsZV9saW5l
OwotICBwLT5pbmRlbnRfZGVwdGhfID0gMDsKLX0KLQotCi0vKiBQdWJsaWMgQVBJICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LwotCi11cGJfdGV4dHByaW50ZXIgKnVwYl90ZXh0cHJpbnRlcl9jcmVhdGUodXBiX2VudiAqZW52
LCBjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXBiX2J5dGVzc2luayAqb3V0cHV0KSB7Ci0gIHVwYl90ZXh0cHJpbnRlciAqcCA9
IHVwYl9lbnZfbWFsbG9jKGVudiwgc2l6ZW9mKHVwYl90ZXh0cHJpbnRlcikpOwotICBpZiAoIXAp
IHJldHVybiBOVUxMOwotCi0gIHAtPm91dHB1dF8gPSBvdXRwdXQ7Ci0gIHVwYl9zaW5rX3Jlc2V0
KCZwLT5pbnB1dF8sIGgsIHApOwotICB0ZXh0cHJpbnRlcl9yZXNldChwLCBmYWxzZSk7Ci0KLSAg
cmV0dXJuIHA7Ci19Ci0KLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBiX3RleHRwcmludGVyX25ld2hh
bmRsZXJzKGNvbnN0IHVwYl9tc2dkZWYgKm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpvd25lcikgewotICByZXR1cm4gdXBiX2hh
bmRsZXJzX25ld2Zyb3plbihtLCBvd25lciwgJm9ubXJlZywgTlVMTCk7Ci19Ci0KLXVwYl9zaW5r
ICp1cGJfdGV4dHByaW50ZXJfaW5wdXQodXBiX3RleHRwcmludGVyICpwKSB7IHJldHVybiAmcC0+
aW5wdXRfOyB9Ci0KLXZvaWQgdXBiX3RleHRwcmludGVyX3NldHNpbmdsZWxpbmUodXBiX3RleHRw
cmludGVyICpwLCBib29sIHNpbmdsZV9saW5lKSB7Ci0gIHAtPnNpbmdsZV9saW5lXyA9IHNpbmds
ZV9saW5lOwotfQotCi0KLS8qIEluZGV4IGlzIGRlc2NyaXB0b3IgdHlwZS4gKi8KLWNvbnN0IHVp
bnQ4X3QgdXBiX3BiX25hdGl2ZV93aXJlX3R5cGVzW10gPSB7Ci0gIFVQQl9XSVJFX1RZUEVfRU5E
X0dST1VQLCAgICAgLyogRU5ER1JPVVAgKi8KLSAgVVBCX1dJUkVfVFlQRV82NEJJVCwgICAgICAg
ICAvKiBET1VCTEUgKi8KLSAgVVBCX1dJUkVfVFlQRV8zMkJJVCwgICAgICAgICAvKiBGTE9BVCAq
LwotICBVUEJfV0lSRV9UWVBFX1ZBUklOVCwgICAgICAgIC8qIElOVDY0ICovCi0gIFVQQl9XSVJF
X1RZUEVfVkFSSU5ULCAgICAgICAgLyogVUlOVDY0ICovCi0gIFVQQl9XSVJFX1RZUEVfVkFSSU5U
LCAgICAgICAgLyogSU5UMzIgKi8KLSAgVVBCX1dJUkVfVFlQRV82NEJJVCwgICAgICAgICAvKiBG
SVhFRDY0ICovCi0gIFVQQl9XSVJFX1RZUEVfMzJCSVQsICAgICAgICAgLyogRklYRUQzMiAqLwot
ICBVUEJfV0lSRV9UWVBFX1ZBUklOVCwgICAgICAgIC8qIEJPT0wgKi8KLSAgVVBCX1dJUkVfVFlQ
RV9ERUxJTUlURUQsICAgICAvKiBTVFJJTkcgKi8KLSAgVVBCX1dJUkVfVFlQRV9TVEFSVF9HUk9V
UCwgICAvKiBHUk9VUCAqLwotICBVUEJfV0lSRV9UWVBFX0RFTElNSVRFRCwgICAgIC8qIE1FU1NB
R0UgKi8KLSAgVVBCX1dJUkVfVFlQRV9ERUxJTUlURUQsICAgICAvKiBCWVRFUyAqLwotICBVUEJf
V0lSRV9UWVBFX1ZBUklOVCwgICAgICAgIC8qIFVJTlQzMiAqLwotICBVUEJfV0lSRV9UWVBFX1ZB
UklOVCwgICAgICAgIC8qIEVOVU0gKi8KLSAgVVBCX1dJUkVfVFlQRV8zMkJJVCwgICAgICAgICAv
KiBTRklYRUQzMiAqLwotICBVUEJfV0lSRV9UWVBFXzY0QklULCAgICAgICAgIC8qIFNGSVhFRDY0
ICovCi0gIFVQQl9XSVJFX1RZUEVfVkFSSU5ULCAgICAgICAgLyogU0lOVDMyICovCi0gIFVQQl9X
SVJFX1RZUEVfVkFSSU5ULCAgICAgICAgLyogU0lOVDY0ICovCi19OwotCi0vKiBBIGJhc2ljIGJy
YW5jaC1iYXNlZCBkZWNvZGVyLCB1c2VzIDMyLWJpdCB2YWx1ZXMgdG8gZ2V0IGdvb2QgcGVyZm9y
bWFuY2UKLSAqIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzIChidXQgcGVyZm9ybXMgd2VsbCBvbiA2
NC1iaXRzIGFsc28pLgotICogVGhpcyBzY2hlbWUgY29tZXMgZnJvbSB0aGUgb3JpZ2luYWwgR29v
Z2xlIFByb3RvYnVmIGltcGxlbWVudGF0aW9uCi0gKiAocHJvdG8yKS4gKi8KLXVwYl9kZWNvZGVy
ZXQgdXBiX3ZkZWNvZGVfbWF4OF9icmFuY2gzMih1cGJfZGVjb2RlcmV0IHIpIHsKLSAgdXBiX2Rl
Y29kZXJldCBlcnIgPSB7TlVMTCwgMH07Ci0gIGNvbnN0IGNoYXIgKnAgPSByLnA7Ci0gIHVpbnQz
Ml90IGxvdyA9ICh1aW50MzJfdClyLnZhbDsKLSAgdWludDMyX3QgaGlnaCA9IDA7Ci0gIHVpbnQz
Ml90IGI7Ci0gIGIgPSAqKHArKyk7IGxvdyAgfD0gKGIgJiAweDdmVSkgPDwgMTQ7IGlmICghKGIg
JiAweDgwKSkgZ290byBkb25lOwotICBiID0gKihwKyspOyBsb3cgIHw9IChiICYgMHg3ZlUpIDw8
IDIxOyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgYiA9ICoocCsrKTsgbG93ICB8PSAo
YiAmIDB4N2ZVKSA8PCAyODsKLSAgICAgICAgICAgICAgaGlnaCAgPSAoYiAmIDB4N2ZVKSA+PiAg
NDsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gIGIgPSAqKHArKyk7IGhpZ2ggfD0gKGIg
JiAweDdmVSkgPDwgIDM7IGlmICghKGIgJiAweDgwKSkgZ290byBkb25lOwotICBiID0gKihwKysp
OyBoaWdoIHw9IChiICYgMHg3ZlUpIDw8IDEwOyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsK
LSAgYiA9ICoocCsrKTsgaGlnaCB8PSAoYiAmIDB4N2ZVKSA8PCAxNzsgaWYgKCEoYiAmIDB4ODAp
KSBnb3RvIGRvbmU7Ci0gIGIgPSAqKHArKyk7IGhpZ2ggfD0gKGIgJiAweDdmVSkgPDwgMjQ7IGlm
ICghKGIgJiAweDgwKSkgZ290byBkb25lOwotICBiID0gKihwKyspOyBoaWdoIHw9IChiICYgMHg3
ZlUpIDw8IDMxOyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgcmV0dXJuIGVycjsKLQot
ZG9uZToKLSAgci52YWwgPSAoKHVpbnQ2NF90KWhpZ2ggPDwgMzIpIHwgbG93OwotICByLnAgPSBw
OwotICByZXR1cm4gcjsKLX0KLQotLyogTGlrZSB0aGUgcHJldmlvdXMsIGJ1dCB1c2VzIDY0LWJp
dCB2YWx1ZXMuICovCi11cGJfZGVjb2RlcmV0IHVwYl92ZGVjb2RlX21heDhfYnJhbmNoNjQodXBi
X2RlY29kZXJldCByKSB7Ci0gIGNvbnN0IGNoYXIgKnAgPSByLnA7Ci0gIHVpbnQ2NF90IHZhbCA9
IHIudmFsOwotICB1aW50NjRfdCBiOwotICB1cGJfZGVjb2RlcmV0IGVyciA9IHtOVUxMLCAwfTsK
LSAgYiA9ICoocCsrKTsgdmFsIHw9IChiICYgMHg3ZlUpIDw8IDE0OyBpZiAoIShiICYgMHg4MCkp
IGdvdG8gZG9uZTsKLSAgYiA9ICoocCsrKTsgdmFsIHw9IChiICYgMHg3ZlUpIDw8IDIxOyBpZiAo
IShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgYiA9ICoocCsrKTsgdmFsIHw9IChiICYgMHg3ZlUp
IDw8IDI4OyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgYiA9ICoocCsrKTsgdmFsIHw9
IChiICYgMHg3ZlUpIDw8IDM1OyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgYiA9ICoo
cCsrKTsgdmFsIHw9IChiICYgMHg3ZlUpIDw8IDQyOyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9u
ZTsKLSAgYiA9ICoocCsrKTsgdmFsIHw9IChiICYgMHg3ZlUpIDw8IDQ5OyBpZiAoIShiICYgMHg4
MCkpIGdvdG8gZG9uZTsKLSAgYiA9ICoocCsrKTsgdmFsIHw9IChiICYgMHg3ZlUpIDw8IDU2OyBp
ZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgYiA9ICoocCsrKTsgdmFsIHw9IChiICYgMHg3
ZlUpIDw8IDYzOyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgcmV0dXJuIGVycjsKLQot
ZG9uZToKLSAgci52YWwgPSB2YWw7Ci0gIHIucCA9IHA7Ci0gIHJldHVybiByOwotfQotCi0vKiBH
aXZlbiBhbiBlbmNvZGVkIHZhcmludCB2LCByZXR1cm5zIGFuIGludGVnZXIgd2l0aCBhIHNpbmds
ZSBiaXQgc2V0IHRoYXQKLSAqIGluZGljYXRlcyB0aGUgZW5kIG9mIHRoZSB2YXJpbnQuICBTdWJ0
cmFjdGluZyBvbmUgZnJvbSB0aGlzIHZhbHVlIHdpbGwKLSAqIHlpZWxkIGEgbWFzayB0aGF0IGxl
YXZlcyBvbmx5IGJpdHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgdmFyaW50LiAgUmV0dXJucwotICog
MCBpZiB0aGUgdmFyaW50IGlzIHVudGVybWluYXRlZC4gKi8KLXN0YXRpYyB1aW50NjRfdCB1cGJf
Z2V0X3ZzdG9wYml0KHVpbnQ2NF90IHYpIHsKLSAgdWludDY0X3QgY2JpdHMgPSB2IHwgMHg3Zjdm
N2Y3ZjdmN2Y3ZjdmVUxMOwotICByZXR1cm4gfmNiaXRzICYgKGNiaXRzKzEpOwotfQotCi0vKiBB
IGJyYW5jaGxlc3MgZGVjb2Rlci4gIENyZWRpdCB0byBQYXNjYWwgTWFzc2ltaW5vIGZvciB0aGUg
Yml0LXR3aWRkbGluZy4gKi8KLXVwYl9kZWNvZGVyZXQgdXBiX3ZkZWNvZGVfbWF4OF9tYXNzaW1p
bm8odXBiX2RlY29kZXJldCByKSB7Ci0gIHVpbnQ2NF90IGI7Ci0gIHVpbnQ2NF90IHN0b3BfYml0
OwotICB1cGJfZGVjb2RlcmV0IG15X3I7Ci0gIG1lbWNweSgmYiwgci5wLCBzaXplb2YoYikpOwot
ICBzdG9wX2JpdCA9IHVwYl9nZXRfdnN0b3BiaXQoYik7Ci0gIGIgPSAgKGIgJiAweDdmN2Y3Zjdm
N2Y3ZjdmN2ZVTEwpICYgKHN0b3BfYml0IC0gMSk7Ci0gIGIgKz0gICAgICAgYiAmIDB4MDA3ZjAw
N2YwMDdmMDA3ZlVMTDsKLSAgYiArPSAgMyAqIChiICYgMHgwMDAwZmZmZjAwMDBmZmZmVUxMKTsK
LSAgYiArPSAxNSAqIChiICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKTsKLSAgaWYgKHN0b3BfYml0
ID09IDApIHsKLSAgICAvKiBFcnJvcjogdW50ZXJtaW5hdGVkIHZhcmludC4gKi8KLSAgICB1cGJf
ZGVjb2RlcmV0IGVycl9yID0geyh2b2lkKikwLCAwfTsKLSAgICByZXR1cm4gZXJyX3I7Ci0gIH0K
LSAgbXlfciA9IHVwYl9kZWNvZGVyZXRfbWFrZShyLnAgKyAoKF9fYnVpbHRpbl9jdHpsbChzdG9w
X2JpdCkgKyAxKSAvIDgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIudmFsIHwgKGIg
PDwgNykpOwotICByZXR1cm4gbXlfcjsKLX0KLQotLyogQSBicmFuY2hsZXNzIGRlY29kZXIuICBD
cmVkaXQgdG8gRGFuaWVsIFdyaWdodCBmb3IgdGhlIGJpdC10d2lkZGxpbmcuICovCi11cGJfZGVj
b2RlcmV0IHVwYl92ZGVjb2RlX21heDhfd3JpZ2h0KHVwYl9kZWNvZGVyZXQgcikgewotICB1aW50
NjRfdCBiOwotICB1aW50NjRfdCBzdG9wX2JpdDsKLSAgdXBiX2RlY29kZXJldCBteV9yOwotICBt
ZW1jcHkoJmIsIHIucCwgc2l6ZW9mKGIpKTsKLSAgc3RvcF9iaXQgPSB1cGJfZ2V0X3ZzdG9wYml0
KGIpOwotICBiICY9IChzdG9wX2JpdCAtIDEpOwotICBiID0gKChiICYgMHg3ZjAwN2YwMDdmMDA3
ZjAwVUxMKSA+PiAxKSB8IChiICYgMHgwMDdmMDA3ZjAwN2YwMDdmVUxMKTsKLSAgYiA9ICgoYiAm
IDB4ZmZmZjAwMDBmZmZmMDAwMFVMTCkgPj4gMikgfCAoYiAmIDB4MDAwMGZmZmYwMDAwZmZmZlVM
TCk7Ci0gIGIgPSAoKGIgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpID4+IDQpIHwgKGIgJiAweDAw
MDAwMDAwZmZmZmZmZmZVTEwpOwotICBpZiAoc3RvcF9iaXQgPT0gMCkgewotICAgIC8qIEVycm9y
OiB1bnRlcm1pbmF0ZWQgdmFyaW50LiAqLwotICAgIHVwYl9kZWNvZGVyZXQgZXJyX3IgPSB7KHZv
aWQqKTAsIDB9OwotICAgIHJldHVybiBlcnJfcjsKLSAgfQotICBteV9yID0gdXBiX2RlY29kZXJl
dF9tYWtlKHIucCArICgoX19idWlsdGluX2N0emxsKHN0b3BfYml0KSArIDEpIC8gOCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgci52YWwgfCAoYiA8PCAxNCkpOwotICByZXR1cm4gbXlf
cjsKLX0KLQotI2xpbmUgMSAidXBiL2pzb24vcGFyc2VyLnJsIgotLyoKLSoqIHVwYjo6anNvbjo6
UGFyc2VyICh1cGJfanNvbl9wYXJzZXIpCi0qKgotKiogQSBwYXJzZXIgdGhhdCB1c2VzIHRoZSBS
YWdlbCBTdGF0ZSBNYWNoaW5lIENvbXBpbGVyIHRvIGdlbmVyYXRlCi0qKiB0aGUgZmluaXRlIGF1
dG9tYXRhLgotKioKLSoqIFJhZ2VsIG9ubHkgbmF0aXZlbHkgaGFuZGxlcyByZWd1bGFyIGxhbmd1
YWdlcywgYnV0IHdlIGNhbiBtYW51YWxseQotKiogcHJvZ3JhbSBpdCBhIGJpdCB0byBoYW5kbGUg
Y29udGV4dC1mcmVlIGxhbmd1YWdlcyBsaWtlIEpTT04sIGJ5IHVzaW5nCi0qKiB0aGUgImZjYWxs
IiBhbmQgImZyZXQiIGNvbnN0cnVjdHMuCi0qKgotKiogVGhpcyBwYXJzZXIgY2FuIGhhbmRsZSB0
aGUgYmFzaWNzLCBidXQgbmVlZHMgc2V2ZXJhbCB0aGluZ3MgdG8gYmUgZmxlc2hlZAotKiogb3V0
OgotKioKLSoqIC0gaGFuZGxpbmcgb2YgdW5pY29kZSBlc2NhcGUgc2VxdWVuY2VzIChpbmNsdWRp
bmcgaGlnaCBzdXJyb2dhdGUgcGFpcnMpLgotKiogLSBwcm9wZXJseSBjaGVjayBhbmQgcmVwb3J0
IGVycm9ycyBmb3IgdW5rbm93biBmaWVsZHMsIHN0YWNrIG92ZXJmbG93LAotKiogICBpbXByb3Bl
ciBhcnJheSBuZXN0aW5nIChvciBsYWNrIG9mIG5lc3RpbmcpLgotKiogLSBoYW5kbGluZyBvZiBi
YXNlNjQgc2VxdWVuY2VzIHdpdGggcGFkZGluZyBjaGFyYWN0ZXJzLgotKiogLSBoYW5kbGluZyBv
ZiBwdXNoLWJhY2sgKG5vbi1zdWNjZXNzIHJldHVybnMgZnJvbSBzaW5rIGZ1bmN0aW9ucykuCi0q
KiAtIGhhbmRsaW5nIG9mIGtleXMvZXNjYXBlLXNlcXVlbmNlcy9ldGMgdGhhdCBzcGFuIGlucHV0
IGJ1ZmZlcnMuCi0qLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4K
LSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0KLSNkZWZpbmUgVVBCX0pTT05fTUFYX0RFUFRI
IDY0Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdXBiX3Npbmsgc2luazsKLQotICAvKiBUaGUgY3Vy
cmVudCBtZXNzYWdlIGluIHdoaWNoIHdlJ3JlIHBhcnNpbmcsIGFuZCB0aGUgZmllbGQgd2hvc2Ug
dmFsdWUgd2UncmUKLSAgICogZXhwZWN0aW5nIG5leHQuICovCi0gIGNvbnN0IHVwYl9tc2dkZWYg
Km07Ci0gIGNvbnN0IHVwYl9maWVsZGRlZiAqZjsKLQotICAvKiBXZSBhcmUgaW4gYSByZXBlYXRl
ZC1maWVsZCBjb250ZXh0LCByZWFkeSB0byBlbWl0IG1hcGVudHJpZXMgYXMKLSAgICogc3VibWVz
c2FnZXMuIFRoaXMgZmxhZyBhbHRlcnMgdGhlIHN0YXJ0LW9mLW9iamVjdCAob3Blbi1icmFjZSkg
YmVoYXZpb3IgdG8KLSAgICogYmVnaW4gYSBzZXF1ZW5jZSBvZiBtYXBlbnRyeSBtZXNzYWdlcyBy
YXRoZXIgdGhhbiBhIHNpbmdsZSBzdWJtZXNzYWdlLiAqLwotICBib29sIGlzX21hcDsKLQotICAv
KiBXZSBhcmUgaW4gYSBtYXAtZW50cnkgbWVzc2FnZSBjb250ZXh0LiBUaGlzIGZsYWcgaXMgc2V0
IHdoZW4gcGFyc2luZyB0aGUKLSAgICogdmFsdWUgZmllbGQgb2YgYSBzaW5nbGUgbWFwIGVudHJ5
IGFuZCBpbmRpY2F0ZXMgdG8gYWxsIHZhbHVlLWZpZWxkIHBhcnNlcnMKLSAgICogKHN1Ym9iamVj
dHMsIHN0cmluZ3MsIG51bWJlcnMsIGFuZCBib29scykgdGhhdCB0aGUgbWFwLWVudHJ5IHN1Ym1l
c3NhZ2UKLSAgICogc2hvdWxkIGVuZCBhcyBzb29uIGFzIHRoZSB2YWx1ZSBpcyBwYXJzZWQuICov
Ci0gIGJvb2wgaXNfbWFwZW50cnk7Ci0KLSAgLyogSWYgfGlzX21hcHwgb3IgfGlzX21hcGVudHJ5
fCBpcyB0cnVlLCB8bWFwZmllbGR8IHJlZmVycyB0byB0aGUgcGFyZW50Ci0gICAqIG1lc3NhZ2Un
cyBtYXAgZmllbGQgdGhhdCB3ZSdyZSBjdXJyZW50bHkgcGFyc2luZy4gVGhpcyBkaWZmZXJzIGZy
b20gfGZ8Ci0gICAqIGJlY2F1c2UgfGZ8IGlzIHRoZSBmaWVsZCBpbiB0aGUgKmN1cnJlbnQqIG1l
c3NhZ2UgKGkuZS4sIHRoZSBtYXAtZW50cnkKLSAgICogbWVzc2FnZSBpdHNlbGYpLCBub3QgdGhl
IHBhcmVudCdzIGZpZWxkIHRoYXQgbGVhZHMgdG8gdGhpcyBtYXAuICovCi0gIGNvbnN0IHVwYl9m
aWVsZGRlZiAqbWFwZmllbGQ7Ci19IHVwYl9qc29ucGFyc2VyX2ZyYW1lOwotCi1zdHJ1Y3QgdXBi
X2pzb25fcGFyc2VyIHsKLSAgdXBiX2VudiAqZW52OwotICB1cGJfYnl0ZXNoYW5kbGVyIGlucHV0
X2hhbmRsZXJfOwotICB1cGJfYnl0ZXNzaW5rIGlucHV0XzsKLQotICAvKiBTdGFjayB0byB0cmFj
ayB0aGUgSlNPTiBzY29wZXMgd2UgYXJlIGluLiAqLwotICB1cGJfanNvbnBhcnNlcl9mcmFtZSBz
dGFja1tVUEJfSlNPTl9NQVhfREVQVEhdOwotICB1cGJfanNvbnBhcnNlcl9mcmFtZSAqdG9wOwot
ICB1cGJfanNvbnBhcnNlcl9mcmFtZSAqbGltaXQ7Ci0KLSAgdXBiX3N0YXR1cyBzdGF0dXM7Ci0K
LSAgLyogUmFnZWwncyBpbnRlcm5hbCBwYXJzaW5nIHN0YWNrIGZvciB0aGUgcGFyc2luZyBzdGF0
ZSBtYWNoaW5lLiAqLwotICBpbnQgY3VycmVudF9zdGF0ZTsKLSAgaW50IHBhcnNlcl9zdGFja1tV
UEJfSlNPTl9NQVhfREVQVEhdOwotICBpbnQgcGFyc2VyX3RvcDsKLQotICAvKiBUaGUgaGFuZGxl
IGZvciB0aGUgY3VycmVudCBidWZmZXIuICovCi0gIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhhbmRs
ZTsKLQotICAvKiBBY2N1bXVsYXRlIGJ1ZmZlci4gIFNlZSBkZXRhaWxzIGluIHBhcnNlci5ybC4g
Ki8KLSAgY29uc3QgY2hhciAqYWNjdW11bGF0ZWQ7Ci0gIHNpemVfdCBhY2N1bXVsYXRlZF9sZW47
Ci0gIGNoYXIgKmFjY3VtdWxhdGVfYnVmOwotICBzaXplX3QgYWNjdW11bGF0ZV9idWZfc2l6ZTsK
LQotICAvKiBNdWx0aS1wYXJ0IHRleHQgZGF0YS4gIFNlZSBkZXRhaWxzIGluIHBhcnNlci5ybC4g
Ki8KLSAgaW50IG11bHRpcGFydF9zdGF0ZTsKLSAgdXBiX3NlbGVjdG9yX3Qgc3RyaW5nX3NlbGVj
dG9yOwotCi0gIC8qIElucHV0IGNhcHR1cmUuICBTZWUgZGV0YWlscyBpbiBwYXJzZXIucmwuICov
Ci0gIGNvbnN0IGNoYXIgKmNhcHR1cmU7Ci0KLSAgLyogSW50ZXJtZWRpYXRlIHJlc3VsdCBvZiBw
YXJzaW5nIGEgdW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuICovCi0gIHVpbnQzMl90IGRpZ2l0Owot
fTsKLQotI2RlZmluZSBQQVJTRVJfQ0hFQ0tfUkVUVVJOKHgpIGlmICghKHgpKSByZXR1cm4gZmFs
c2UKLQotLyogVXNlZCB0byBzaWduYWwgdGhhdCBhIGNhcHR1cmUgaGFzIGJlZW4gc3VzcGVuZGVk
LiAqLwotc3RhdGljIGNoYXIgc3VzcGVuZF9jYXB0dXJlOwotCi1zdGF0aWMgdXBiX3NlbGVjdG9y
X3QgZ2V0c2VsX2Zvcl9oYW5kbGVydHlwZSh1cGJfanNvbl9wYXJzZXIgKnAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxlcnR5cGVfdCB0eXBl
KSB7Ci0gIHVwYl9zZWxlY3Rvcl90IHNlbDsKLSAgYm9vbCBvayA9IHVwYl9oYW5kbGVyc19nZXRz
ZWxlY3RvcihwLT50b3AtPmYsIHR5cGUsICZzZWwpOwotICBVUEJfQVNTRVJUX1ZBUihvaywgb2sp
OwotICByZXR1cm4gc2VsOwotfQotCi1zdGF0aWMgdXBiX3NlbGVjdG9yX3QgcGFyc2VyX2dldHNl
bCh1cGJfanNvbl9wYXJzZXIgKnApIHsKLSAgcmV0dXJuIGdldHNlbF9mb3JfaGFuZGxlcnR5cGUo
Ci0gICAgICBwLCB1cGJfaGFuZGxlcnNfZ2V0cHJpbWl0aXZlaGFuZGxlcnR5cGUocC0+dG9wLT5m
KSk7Ci19Ci0KLXN0YXRpYyBib29sIGNoZWNrX3N0YWNrKHVwYl9qc29uX3BhcnNlciAqcCkgewot
ICBpZiAoKHAtPnRvcCArIDEpID09IHAtPmxpbWl0KSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJt
c2coJnAtPnN0YXR1cywgIk5lc3RpbmcgdG9vIGRlZXAiKTsKLSAgICB1cGJfZW52X3JlcG9ydGVy
cm9yKHAtPmVudiwgJnAtPnN0YXR1cyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8qIFRoZXJlIGFyZSBHQ0MvQ2xhbmcgYnVpbHQtaW5zIGZvciBvdmVy
ZmxvdyBjaGVja2luZyB3aGljaCB3ZSBjb3VsZCBzdGFydAotICogdXNpbmcgaWYgdGhlcmUgd2Fz
IGFueSBwZXJmb3JtYW5jZSBiZW5lZml0IHRvIGl0LiAqLwotCi1zdGF0aWMgYm9vbCBjaGVja2Vk
X2FkZChzaXplX3QgYSwgc2l6ZV90IGIsIHNpemVfdCAqYykgewotICBpZiAoU0laRV9NQVggLSBh
IDwgYikgcmV0dXJuIGZhbHNlOwotICAqYyA9IGEgKyBiOwotICByZXR1cm4gdHJ1ZTsKLX0KLQot
c3RhdGljIHNpemVfdCBzYXR1cmF0aW5nX211bHRpcGx5KHNpemVfdCBhLCBzaXplX3QgYikgewot
ICAvKiBzaXplX3QgaXMgdW5zaWduZWQsIHNvIHRoaXMgaXMgZGVmaW5lZCBiZWhhdmlvciBldmVu
IG9uIG92ZXJmbG93LiAqLwotICBzaXplX3QgcmV0ID0gYSAqIGI7Ci0gIGlmIChiICE9IDAgJiYg
cmV0IC8gYiAhPSBhKSB7Ci0gICAgcmV0ID0gU0laRV9NQVg7Ci0gIH0KLSAgcmV0dXJuIHJldDsK
LX0KLQotCi0vKiBCYXNlNjQgZGVjb2RpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUT0RPKGhhYmVybWFuKTogbWFr
ZSB0aGlzIHN0cmVhbWluZy4gKi8KLQotc3RhdGljIGNvbnN0IHNpZ25lZCBjaGFyIGI2NHRhYmxl
W10gPSB7Ci0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEs
ICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAg
IC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0x
LAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgNjIvKisqLywgLTEs
ICAgICAgLTEsICAgICAgLTEsICAgICAgNjMvKi8gKi8sCi0gIDUyLyowKi8sIDUzLyoxKi8sIDU0
LyoyKi8sIDU1LyozKi8sIDU2Lyo0Ki8sIDU3Lyo1Ki8sIDU4Lyo2Ki8sIDU5Lyo3Ki8sCi0gIDYw
Lyo4Ki8sIDYxLyo5Ki8sIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIC0xLAotICAtMSwgICAgICAgMC8qQSovLCAgMS8qQiovLCAgMi8qQyovLCAgMy8qRCovLCAg
NC8qRSovLCAgNS8qRiovLCAgNi8qRyovLAotICAwNy8qSCovLCAgOC8qSSovLCAgOS8qSiovLCAx
MC8qSyovLCAxMS8qTCovLCAxMi8qTSovLCAxMy8qTiovLCAxNC8qTyovLAotICAxNS8qUCovLCAx
Ni8qUSovLCAxNy8qUiovLCAxOC8qUyovLCAxOS8qVCovLCAyMC8qVSovLCAyMS8qViovLCAyMi8q
VyovLAotICAyMy8qWCovLCAyNC8qWSovLCAyNS8qWiovLCAtMSwgICAgICAtMSwgICAgICAtMSwg
ICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgMjYvKmEqLywgMjcvKmIqLywgMjgvKmMqLywg
MjkvKmQqLywgMzAvKmUqLywgMzEvKmYqLywgMzIvKmcqLywKLSAgMzMvKmgqLywgMzQvKmkqLywg
MzUvKmoqLywgMzYvKmsqLywgMzcvKmwqLywgMzgvKm0qLywgMzkvKm4qLywgNDAvKm8qLywKLSAg
NDEvKnAqLywgNDIvKnEqLywgNDMvKnIqLywgNDQvKnMqLywgNDUvKnQqLywgNDYvKnUqLywgNDcv
KnYqLywgNDgvKncqLywKLSAgNDkvKngqLywgNTAvKnkqLywgNTEvKnoqLywgLTEsICAgICAgLTEs
ICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAg
IC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwg
ICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAg
LTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEs
ICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAg
IC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwg
ICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAg
LTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAg
ICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAg
IC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwg
ICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAg
LTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAt
MSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwK
LSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAg
LTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAt
MSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAg
ICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0x
LCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIC0xCi19OwotCi0vKiBSZXR1cm5zIHRoZSB0YWJsZSB2YWx1ZSBzaWduLWV4dGVuZGVkIHRv
IDMyIGJpdHMuICBLbm93aW5nIHRoYXQgdGhlIHVwcGVyCi0gKiBiaXRzIHdpbGwgYmUgMSBmb3Ig
dW5yZWNvZ25pemVkIGNoYXJhY3RlcnMgbWFrZXMgaXQgZWFzaWVyIHRvIGNoZWNrIGZvcgotICog
dGhpcyBlcnJvciBjb25kaXRpb24gbGF0ZXIgKHNlZSBiZWxvdykuICovCi1pbnQzMl90IGI2NGxv
b2t1cCh1bnNpZ25lZCBjaGFyIGNoKSB7IHJldHVybiBiNjR0YWJsZVtjaF07IH0KLQotLyogUmV0
dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgbm90IGEgdmFsaWQgYmFzZTY0IGNo
YXJhY3RlciBvcgotICogcGFkZGluZy4gKi8KLWJvb2wgbm9uYmFzZTY0KHVuc2lnbmVkIGNoYXIg
Y2gpIHsgcmV0dXJuIGI2NGxvb2t1cChjaCkgPT0gLTEgJiYgY2ggIT0gJz0nOyB9Ci0KLXN0YXRp
YyBib29sIGJhc2U2NF9wdXNoKHVwYl9qc29uX3BhcnNlciAqcCwgdXBiX3NlbGVjdG9yX3Qgc2Vs
LCBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKSB7
Ci0gIGNvbnN0IGNoYXIgKmxpbWl0ID0gcHRyICsgbGVuOwotICBmb3IgKDsgcHRyIDwgbGltaXQ7
IHB0ciArPSA0KSB7Ci0gICAgdWludDMyX3QgdmFsOwotICAgIGNoYXIgb3V0cHV0WzNdOwotCi0g
ICAgaWYgKGxpbWl0IC0gcHRyIDwgNCkgewotICAgICAgdXBiX3N0YXR1c19zZXRlcnJmKCZwLT5z
dGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkJhc2U2NCBpbnB1dCBmb3IgYnl0ZXMg
ZmllbGQgbm90IGEgbXVsdGlwbGUgb2YgNDogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHVwYl9maWVsZGRlZl9uYW1lKHAtPnRvcC0+ZikpOwotICAgICAgdXBiX2Vudl9yZXBvcnRlcnJv
cihwLT5lbnYsICZwLT5zdGF0dXMpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHZhbCA9IGI2NGxvb2t1cChwdHJbMF0pIDw8IDE4IHwKLSAgICAgICAgICBiNjRsb29rdXAocHRy
WzFdKSA8PCAxMiB8Ci0gICAgICAgICAgYjY0bG9va3VwKHB0clsyXSkgPDwgNiAgfAotICAgICAg
ICAgIGI2NGxvb2t1cChwdHJbM10pOwotCi0gICAgLyogVGVzdCB0aGUgdXBwZXIgYml0OyByZXR1
cm5zIHRydWUgaWYgYW55IG9mIHRoZSBjaGFyYWN0ZXJzIHJldHVybmVkIC0xLiAqLwotICAgIGlm
ICh2YWwgJiAweDgwMDAwMDAwKSB7Ci0gICAgICBnb3RvIG90aGVyY2hhcjsKLSAgICB9Ci0KLSAg
ICBvdXRwdXRbMF0gPSB2YWwgPj4gMTY7Ci0gICAgb3V0cHV0WzFdID0gKHZhbCA+PiA4KSAmIDB4
ZmY7Ci0gICAgb3V0cHV0WzJdID0gdmFsICYgMHhmZjsKLSAgICB1cGJfc2lua19wdXRzdHJpbmco
JnAtPnRvcC0+c2luaywgc2VsLCBvdXRwdXQsIDMsIE5VTEwpOwotICB9Ci0gIHJldHVybiB0cnVl
OwotCi1vdGhlcmNoYXI6Ci0gIGlmIChub25iYXNlNjQocHRyWzBdKSB8fCBub25iYXNlNjQocHRy
WzFdKSB8fCBub25iYXNlNjQocHRyWzJdKSB8fAotICAgICAgbm9uYmFzZTY0KHB0clszXSkgKSB7
Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJmKCZwLT5zdGF0dXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICJOb24tYmFzZTY0IGNoYXJhY3RlcnMgaW4gYnl0ZXMgZmllbGQ6ICVzIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgdXBiX2ZpZWxkZGVmX25hbWUocC0+dG9wLT5mKSk7Ci0gICAgdXBiX2Vu
dl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0dXMpOwotICAgIHJldHVybiBmYWxzZTsKLSAg
fSBpZiAocHRyWzJdID09ICc9JykgewotICAgIHVpbnQzMl90IHZhbDsKLSAgICBjaGFyIG91dHB1
dDsKLQotICAgIC8qIExhc3QgZ3JvdXAgY29udGFpbnMgb25seSB0d28gaW5wdXQgYnl0ZXMsIG9u
ZSBvdXRwdXQgYnl0ZS4gKi8KLSAgICBpZiAocHRyWzBdID09ICc9JyB8fCBwdHJbMV0gPT0gJz0n
IHx8IHB0clszXSAhPSAnPScpIHsKLSAgICAgIGdvdG8gYmFkcGFkZGluZzsKLSAgICB9Ci0KLSAg
ICB2YWwgPSBiNjRsb29rdXAocHRyWzBdKSA8PCAxOCB8Ci0gICAgICAgICAgYjY0bG9va3VwKHB0
clsxXSkgPDwgMTI7Ci0KLSAgICBhc3NlcnQoISh2YWwgJiAweDgwMDAwMDAwKSk7Ci0gICAgb3V0
cHV0ID0gdmFsID4+IDE2OwotICAgIHVwYl9zaW5rX3B1dHN0cmluZygmcC0+dG9wLT5zaW5rLCBz
ZWwsICZvdXRwdXQsIDEsIE5VTEwpOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAg
IHVpbnQzMl90IHZhbDsKLSAgICBjaGFyIG91dHB1dFsyXTsKLQotICAgIC8qIExhc3QgZ3JvdXAg
Y29udGFpbnMgb25seSB0aHJlZSBpbnB1dCBieXRlcywgdHdvIG91dHB1dCBieXRlcy4gKi8KLSAg
ICBpZiAocHRyWzBdID09ICc9JyB8fCBwdHJbMV0gPT0gJz0nIHx8IHB0clsyXSA9PSAnPScpIHsK
LSAgICAgIGdvdG8gYmFkcGFkZGluZzsKLSAgICB9Ci0KLSAgICB2YWwgPSBiNjRsb29rdXAocHRy
WzBdKSA8PCAxOCB8Ci0gICAgICAgICAgYjY0bG9va3VwKHB0clsxXSkgPDwgMTIgfAotICAgICAg
ICAgIGI2NGxvb2t1cChwdHJbMl0pIDw8IDY7Ci0KLSAgICBvdXRwdXRbMF0gPSB2YWwgPj4gMTY7
Ci0gICAgb3V0cHV0WzFdID0gKHZhbCA+PiA4KSAmIDB4ZmY7Ci0gICAgdXBiX3NpbmtfcHV0c3Ry
aW5nKCZwLT50b3AtPnNpbmssIHNlbCwgb3V0cHV0LCAyLCBOVUxMKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotCi1iYWRwYWRkaW5nOgotICB1cGJfc3RhdHVzX3NldGVycmYoJnAtPnN0YXR1cywK
LSAgICAgICAgICAgICAgICAgICAgICJJbmNvcnJlY3QgYmFzZTY0IHBhZGRpbmcgZm9yIGZpZWxk
OiAlcyAoJS4qcykiLAotICAgICAgICAgICAgICAgICAgICAgdXBiX2ZpZWxkZGVmX25hbWUocC0+
dG9wLT5mKSwKLSAgICAgICAgICAgICAgICAgICAgIDQsIHB0cik7Ci0gIHVwYl9lbnZfcmVwb3J0
ZXJyb3IocC0+ZW52LCAmcC0+c3RhdHVzKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi0KLS8qIEFj
Y3VtdWxhdGUgYnVmZmVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLS8qIEZ1bmN0aW9uYWxpdHkgZm9yIGFjY3VtdWxhdGluZyBh
IGJ1ZmZlci4KLSAqCi0gKiBTb21lIHBhcnRzIG9mIHRoZSBwYXJzZXIgbmVlZCBhbiBlbnRpcmUg
dmFsdWUgYXMgYSBjb250aWd1b3VzIHN0cmluZy4gIEZvcgotICogZXhhbXBsZSwgdG8gbG9vayB1
cCBhIG1lbWJlciBuYW1lIGluIGEgaGFzaCB0YWJsZSwgb3IgdG8gdHVybiBhIHN0cmluZyBpbnRv
Ci0gKiBhIG51bWJlciwgdGhlIHJlbGV2YW50IGxpYnJhcnkgcm91dGluZXMgbmVlZCB0aGUgaW5w
dXQgc3RyaW5nIHRvIGJlIGluCi0gKiBjb250aWd1b3VzIG1lbW9yeSwgZXZlbiBpZiB0aGUgdmFs
dWUgc3Bhbm5lZCB0d28gb3IgbW9yZSBidWZmZXJzIGluIHRoZQotICogaW5wdXQuICBUaGVzZSBy
b3V0aW5lcyBoYW5kbGUgdGhhdC4KLSAqCi0gKiBJbiB0aGUgY29tbW9uIGNhc2Ugd2UgY2FuIGp1
c3QgcG9pbnQgdG8gdGhlIGlucHV0IGJ1ZmZlciB0byBnZXQgdGhpcwotICogY29udGlndW91cyBz
dHJpbmcgYW5kIGF2b2lkIGFueSBhY3R1YWwgY29weS4gIFNvIHdlIG9wdGltaXN0aWNhbGx5IGJl
Z2luCi0gKiB0aGlzIHdheS4gIEJ1dCB0aGVyZSBhcmUgYSBmZXcgY2FzZXMgd2hlcmUgd2UgbXVz
dCBpbnN0ZWFkIGNvcHkgaW50byBhCi0gKiBzZXBhcmF0ZSBidWZmZXI6Ci0gKgotICogICAxLiBU
aGUgc3RyaW5nIHdhcyBub3QgY29udGlndW91cyBpbiB0aGUgaW5wdXQgKGl0IHNwYW5uZWQgYnVm
ZmVycykuCi0gKgotICogICAyLiBUaGUgc3RyaW5nIGluY2x1ZGVkIGVzY2FwZSBzZXF1ZW5jZXMg
dGhhdCBuZWVkIHRvIGJlIGludGVycHJldGVkIHRvIGdldAotICogICAgICB0aGUgdHJ1ZSB2YWx1
ZSBpbiBhIGNvbnRpZ3VvdXMgYnVmZmVyLiAqLwotCi1zdGF0aWMgdm9pZCBhc3NlcnRfYWNjdW11
bGF0ZV9lbXB0eSh1cGJfanNvbl9wYXJzZXIgKnApIHsKLSAgVVBCX1VOVVNFRChwKTsKLSAgYXNz
ZXJ0KHAtPmFjY3VtdWxhdGVkID09IE5VTEwpOwotICBhc3NlcnQocC0+YWNjdW11bGF0ZWRfbGVu
ID09IDApOwotfQotCi1zdGF0aWMgdm9pZCBhY2N1bXVsYXRlX2NsZWFyKHVwYl9qc29uX3BhcnNl
ciAqcCkgewotICBwLT5hY2N1bXVsYXRlZCA9IE5VTEw7Ci0gIHAtPmFjY3VtdWxhdGVkX2xlbiA9
IDA7Ci19Ci0KLS8qIFVzZWQgaW50ZXJuYWxseSBieSBhY2N1bXVsYXRlX2FwcGVuZCgpLiAqLwot
c3RhdGljIGJvb2wgYWNjdW11bGF0ZV9yZWFsbG9jKHVwYl9qc29uX3BhcnNlciAqcCwgc2l6ZV90
IG5lZWQpIHsKLSAgdm9pZCAqbWVtOwotICBzaXplX3Qgb2xkX3NpemUgPSBwLT5hY2N1bXVsYXRl
X2J1Zl9zaXplOwotICBzaXplX3QgbmV3X3NpemUgPSBVUEJfTUFYKG9sZF9zaXplLCAxMjgpOwot
ICB3aGlsZSAobmV3X3NpemUgPCBuZWVkKSB7Ci0gICAgbmV3X3NpemUgPSBzYXR1cmF0aW5nX211
bHRpcGx5KG5ld19zaXplLCAyKTsKLSAgfQotCi0gIG1lbSA9IHVwYl9lbnZfcmVhbGxvYyhwLT5l
bnYsIHAtPmFjY3VtdWxhdGVfYnVmLCBvbGRfc2l6ZSwgbmV3X3NpemUpOwotICBpZiAoIW1lbSkg
ewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKCZwLT5zdGF0dXMsICJPdXQgb2YgbWVtb3J5IGFs
bG9jYXRpbmcgYnVmZmVyLiIpOwotICAgIHVwYl9lbnZfcmVwb3J0ZXJyb3IocC0+ZW52LCAmcC0+
c3RhdHVzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwLT5hY2N1bXVsYXRlX2J1ZiA9
IG1lbTsKLSAgcC0+YWNjdW11bGF0ZV9idWZfc2l6ZSA9IG5ld19zaXplOwotICByZXR1cm4gdHJ1
ZTsKLX0KLQotLyogTG9naWNhbGx5IGFwcGVuZHMgdGhlIGdpdmVuIGRhdGEgdG8gdGhlIGFwcGVu
ZCBidWZmZXIuCi0gKiBJZiAiY2FuX2FsaWFzIiBpcyB0cnVlLCB3ZSB3aWxsIHRyeSB0byBhdm9p
ZCBhY3R1YWxseSBjb3B5aW5nLCBidXQgdGhlIGJ1ZmZlcgotICogbXVzdCBiZSB2YWxpZCB1bnRp
bCB0aGUgbmV4dCBhY2N1bXVsYXRlX2FwcGVuZCgpIGNhbGwgKGlmIGFueSkuICovCi1zdGF0aWMg
Ym9vbCBhY2N1bXVsYXRlX2FwcGVuZCh1cGJfanNvbl9wYXJzZXIgKnAsIGNvbnN0IGNoYXIgKmJ1
Ziwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuX2Fs
aWFzKSB7Ci0gIHNpemVfdCBuZWVkOwotCi0gIGlmICghcC0+YWNjdW11bGF0ZWQgJiYgY2FuX2Fs
aWFzKSB7Ci0gICAgcC0+YWNjdW11bGF0ZWQgPSBidWY7Ci0gICAgcC0+YWNjdW11bGF0ZWRfbGVu
ID0gbGVuOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKCFjaGVja2VkX2FkZChwLT5h
Y2N1bXVsYXRlZF9sZW4sIGxlbiwgJm5lZWQpKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2co
JnAtPnN0YXR1cywgIkludGVnZXIgb3ZlcmZsb3cuIik7Ci0gICAgdXBiX2Vudl9yZXBvcnRlcnJv
cihwLT5lbnYsICZwLT5zdGF0dXMpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmIChu
ZWVkID4gcC0+YWNjdW11bGF0ZV9idWZfc2l6ZSAmJiAhYWNjdW11bGF0ZV9yZWFsbG9jKHAsIG5l
ZWQpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKHAtPmFjY3VtdWxhdGVkICE9
IHAtPmFjY3VtdWxhdGVfYnVmKSB7Ci0gICAgbWVtY3B5KHAtPmFjY3VtdWxhdGVfYnVmLCBwLT5h
Y2N1bXVsYXRlZCwgcC0+YWNjdW11bGF0ZWRfbGVuKTsKLSAgICBwLT5hY2N1bXVsYXRlZCA9IHAt
PmFjY3VtdWxhdGVfYnVmOwotICB9Ci0KLSAgbWVtY3B5KHAtPmFjY3VtdWxhdGVfYnVmICsgcC0+
YWNjdW11bGF0ZWRfbGVuLCBidWYsIGxlbik7Ci0gIHAtPmFjY3VtdWxhdGVkX2xlbiArPSBsZW47
Ci0gIHJldHVybiB0cnVlOwotfQotCi0vKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZGF0YSBh
Y2N1bXVsYXRlZCBzaW5jZSB0aGUgbGFzdCBhY2N1bXVsYXRlX2NsZWFyKCkKLSAqIGNhbGwsIGFu
ZCB3cml0ZXMgdGhlIGxlbmd0aCB0byAqbGVuLiAgVGhpcyB3aXRoIHBvaW50IGVpdGhlciB0byB0
aGUgaW5wdXQKLSAqIGJ1ZmZlciBvciBhIHRlbXBvcmFyeSBhY2N1bXVsYXRlIGJ1ZmZlci4gKi8K
LXN0YXRpYyBjb25zdCBjaGFyICphY2N1bXVsYXRlX2dldHB0cih1cGJfanNvbl9wYXJzZXIgKnAs
IHNpemVfdCAqbGVuKSB7Ci0gIGFzc2VydChwLT5hY2N1bXVsYXRlZCk7Ci0gICpsZW4gPSBwLT5h
Y2N1bXVsYXRlZF9sZW47Ci0gIHJldHVybiBwLT5hY2N1bXVsYXRlZDsKLX0KLQotCi0vKiBNdWx0
LXBhcnQgdGV4dCBkYXRhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi0vKiBXaGVuIHdlIGhhdmUgdGV4dCBkYXRhIGluIHRoZSBpbnB1
dCwgaXQgY2FuIG9mdGVuIGNvbWUgaW4gbXVsdGlwbGUgc2VnbWVudHMuCi0gKiBGb3IgZXhhbXBs
ZSwgdGhlcmUgbWF5IGJlIHNvbWUgcmF3IHN0cmluZyBkYXRhIGZvbGxvd2VkIGJ5IGFuIGVzY2Fw
ZQotICogc2VxdWVuY2UuICBUaGUgdHdvIHNlZ21lbnRzIGFyZSBwcm9jZXNzZWQgd2l0aCBkaWZm
ZXJlbnQgbG9naWMuICBBbHNvIGJ1ZmZlcgotICogc2VhbXMgaW4gdGhlIGlucHV0IGNhbiBjYXVz
ZSBtdWx0aXBsZSBzZWdtZW50cy4KLSAqCi0gKiBBcyB3ZSBzZWUgc2VnbWVudHMsIHRoZXJlIGFy
ZSB0d28gbWFpbiBjYXNlcyBmb3IgaG93IHdlIHdhbnQgdG8gcHJvY2VzcyB0aGVtOgotICoKLSAq
ICAxLiB3ZSB3YW50IHRvIHB1c2ggdGhlIGNhcHR1cmVkIGlucHV0IGRpcmVjdGx5IHRvIHN0cmlu
ZyBoYW5kbGVycy4KLSAqCi0gKiAgMi4gd2UgbmVlZCB0byBhY2N1bXVsYXRlIGFsbCB0aGUgcGFy
dHMgaW50byBhIGNvbnRpZ3VvdXMgYnVmZmVyIGZvciBmdXJ0aGVyCi0gKiAgICAgcHJvY2Vzc2lu
ZyAoZmllbGQgbmFtZSBsb29rdXAsIHN0cmluZy0+bnVtYmVyIGNvbnZlcnNpb24sIGV0YykuICov
Ci0KLS8qIFRoaXMgaXMgdGhlIHNldCBvZiBzdGF0ZXMgZm9yIHAtPm11bHRpcGFydF9zdGF0ZS4g
Ki8KLWVudW0gewotICAvKiBXZSBhcmUgbm90IGN1cnJlbnRseSBwcm9jZXNzaW5nIG11bHRpcGFy
dCBkYXRhLiAqLwotICBNVUxUSVBBUlRfSU5BQ1RJVkUgPSAwLAotCi0gIC8qIFdlIGFyZSBwcm9j
ZXNzaW5nIG11bHRpcGFydCBkYXRhIGJ5IGFjY3VtdWxhdGluZyBpdCBpbnRvIGEgY29udGlndW91
cwotICAgKiBidWZmZXIuICovCi0gIE1VTFRJUEFSVF9BQ0NVTVVMQVRFID0gMSwKLQotICAvKiBX
ZSBhcmUgcHJvY2Vzc2luZyBtdWx0aXBhcnQgZGF0YSBieSBwdXNoaW5nIGVhY2ggcGFydCBkaXJl
Y3RseSB0byB0aGUKLSAgICogY3VycmVudCBzdHJpbmcgaGFuZGxlcnMuICovCi0gIE1VTFRJUEFS
VF9QVVNIRUFHRVJMWSA9IDIKLX07Ci0KLS8qIFN0YXJ0IGEgbXVsdGktcGFydCB0ZXh0IHZhbHVl
IHdoZXJlIHdlIGFjY3VtdWxhdGUgdGhlIGRhdGEgZm9yIHByb2Nlc3NpbmcgYXQKLSAqIHRoZSBl
bmQuICovCi1zdGF0aWMgdm9pZCBtdWx0aXBhcnRfc3RhcnRhY2N1bSh1cGJfanNvbl9wYXJzZXIg
KnApIHsKLSAgYXNzZXJ0X2FjY3VtdWxhdGVfZW1wdHkocCk7Ci0gIGFzc2VydChwLT5tdWx0aXBh
cnRfc3RhdGUgPT0gTVVMVElQQVJUX0lOQUNUSVZFKTsKLSAgcC0+bXVsdGlwYXJ0X3N0YXRlID0g
TVVMVElQQVJUX0FDQ1VNVUxBVEU7Ci19Ci0KLS8qIFN0YXJ0IGEgbXVsdGktcGFydCB0ZXh0IHZh
bHVlIHdoZXJlIHdlIGltbWVkaWF0ZWx5IHB1c2ggdGV4dCBkYXRhIHRvIGEgc3RyaW5nCi0gKiB2
YWx1ZSB3aXRoIHRoZSBnaXZlbiBzZWxlY3Rvci4gKi8KLXN0YXRpYyB2b2lkIG11bHRpcGFydF9z
dGFydCh1cGJfanNvbl9wYXJzZXIgKnAsIHVwYl9zZWxlY3Rvcl90IHNlbCkgewotICBhc3NlcnRf
YWNjdW11bGF0ZV9lbXB0eShwKTsKLSAgYXNzZXJ0KHAtPm11bHRpcGFydF9zdGF0ZSA9PSBNVUxU
SVBBUlRfSU5BQ1RJVkUpOwotICBwLT5tdWx0aXBhcnRfc3RhdGUgPSBNVUxUSVBBUlRfUFVTSEVB
R0VSTFk7Ci0gIHAtPnN0cmluZ19zZWxlY3RvciA9IHNlbDsKLX0KLQotc3RhdGljIGJvb2wgbXVs
dGlwYXJ0X3RleHQodXBiX2pzb25fcGFyc2VyICpwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBs
ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbl9hbGlhcykgewotICBzd2l0
Y2ggKHAtPm11bHRpcGFydF9zdGF0ZSkgewotICAgIGNhc2UgTVVMVElQQVJUX0lOQUNUSVZFOgot
ICAgICAgdXBiX3N0YXR1c19zZXRlcnJtc2coCi0gICAgICAgICAgJnAtPnN0YXR1cywgIkludGVy
bmFsIGVycm9yOiB1bmV4cGVjdGVkIHN0YXRlIE1VTFRJUEFSVF9JTkFDVElWRSIpOwotICAgICAg
dXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0dXMpOwotICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY2FzZSBNVUxUSVBBUlRfQUNDVU1VTEFURToKLSAgICAgIGlmICghYWNjdW11
bGF0ZV9hcHBlbmQocCwgYnVmLCBsZW4sIGNhbl9hbGlhcykpIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1VTFRJUEFSVF9QVVNIRUFH
RVJMWTogewotICAgICAgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlID0gY2FuX2FsaWFzID8g
cC0+aGFuZGxlIDogTlVMTDsKLSAgICAgIHVwYl9zaW5rX3B1dHN0cmluZygmcC0+dG9wLT5zaW5r
LCBwLT5zdHJpbmdfc2VsZWN0b3IsIGJ1ZiwgbGVuLCBoYW5kbGUpOwotICAgICAgYnJlYWs7Ci0g
ICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qIE5vdGU6IHRoaXMgaW52YWxpZGF0
ZXMgdGhlIGFjY3VtdWxhdGUgYnVmZmVyISAgQ2FsbCBvbmx5IGFmdGVyIHJlYWRpbmcgaXRzCi0g
KiBjb250ZW50cy4gKi8KLXN0YXRpYyB2b2lkIG11bHRpcGFydF9lbmQodXBiX2pzb25fcGFyc2Vy
ICpwKSB7Ci0gIGFzc2VydChwLT5tdWx0aXBhcnRfc3RhdGUgIT0gTVVMVElQQVJUX0lOQUNUSVZF
KTsKLSAgcC0+bXVsdGlwYXJ0X3N0YXRlID0gTVVMVElQQVJUX0lOQUNUSVZFOwotICBhY2N1bXVs
YXRlX2NsZWFyKHApOwotfQotCi0KLS8qIElucHV0IGNhcHR1cmUgKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEZ1bmN0
aW9uYWxpdHkgZm9yIGNhcHR1cmluZyBhIHJlZ2lvbiBvZiB0aGUgaW5wdXQgYXMgdGV4dC4gIEdy
YWNlZnVsbHkKLSAqIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYSBidWZmZXIgc2VhbSBvY2N1cnMg
aW4gdGhlIG1pZGRsZSBvZiB0aGUgY2FwdHVyZWQKLSAqIHJlZ2lvbi4gKi8KLQotc3RhdGljIHZv
aWQgY2FwdHVyZV9iZWdpbih1cGJfanNvbl9wYXJzZXIgKnAsIGNvbnN0IGNoYXIgKnB0cikgewot
ICBhc3NlcnQocC0+bXVsdGlwYXJ0X3N0YXRlICE9IE1VTFRJUEFSVF9JTkFDVElWRSk7Ci0gIGFz
c2VydChwLT5jYXB0dXJlID09IE5VTEwpOwotICBwLT5jYXB0dXJlID0gcHRyOwotfQotCi1zdGF0
aWMgYm9vbCBjYXB0dXJlX2VuZCh1cGJfanNvbl9wYXJzZXIgKnAsIGNvbnN0IGNoYXIgKnB0cikg
ewotICBhc3NlcnQocC0+Y2FwdHVyZSk7Ci0gIGlmIChtdWx0aXBhcnRfdGV4dChwLCBwLT5jYXB0
dXJlLCBwdHIgLSBwLT5jYXB0dXJlLCB0cnVlKSkgewotICAgIHAtPmNhcHR1cmUgPSBOVUxMOwot
ICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQot
Ci0vKiBUaGlzIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggaW5wdXQgYnVmZmVyIChpZS4g
d2hlbiB3ZSBoYXZlIGhpdCBhCi0gKiBidWZmZXIgc2VhbSkuICBJZiB3ZSBhcmUgaW4gdGhlIG1p
ZGRsZSBvZiBjYXB0dXJpbmcgdGhlIGlucHV0LCB0aGlzCi0gKiBwcm9jZXNzZXMgdGhlIHVucHJv
Y2Vzc2VkIGNhcHR1cmUgcmVnaW9uLiAqLwotc3RhdGljIHZvaWQgY2FwdHVyZV9zdXNwZW5kKHVw
Yl9qc29uX3BhcnNlciAqcCwgY29uc3QgY2hhciAqKnB0cikgewotICBpZiAoIXAtPmNhcHR1cmUp
IHJldHVybjsKLQotICBpZiAobXVsdGlwYXJ0X3RleHQocCwgcC0+Y2FwdHVyZSwgKnB0ciAtIHAt
PmNhcHR1cmUsIGZhbHNlKSkgewotICAgIC8qIFdlIHVzZSB0aGlzIGFzIGEgc2lnbmFsIHRoYXQg
d2Ugd2VyZSBpbiB0aGUgbWlkZGxlIG9mIGNhcHR1cmluZywgYW5kCi0gICAgICogdGhhdCBjYXB0
dXJpbmcgc2hvdWxkIHJlc3VtZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGJ1ZmZlci4K
LSAgICAgKiAKLSAgICAgKiBXZSBjYW4ndCB1c2UgKnB0ciBoZXJlLCBiZWNhdXNlIHdlIGhhdmUg
bm8gZ3VhcmFudGVlIHRoYXQgdGhpcyBwb2ludGVyCi0gICAgICogd2lsbCBiZSB2YWxpZCB3aGVu
IHdlIHJlc3VtZSAoaWYgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGlzIGZyZWVkLCB0aGVuCi0gICAg
ICogdXNpbmcgdGhlIHBvaW50ZXIgYXQgYWxsLCBldmVuIHRvIGNvbXBhcmUgdG8gTlVMTCwgaXMg
bGlrZWx5IHVuZGVmaW5lZAotICAgICAqIGJlaGF2aW9yKS4gKi8KLSAgICBwLT5jYXB0dXJlID0g
JnN1c3BlbmRfY2FwdHVyZTsKLSAgfSBlbHNlIHsKLSAgICAvKiBOZWVkIHRvIGJhY2sgdXAgdGhl
IHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY2FwdHVyZSwgc2luY2UKLSAgICAgKiB3
ZSB3ZXJlIG5vdCBhYmxlIHRvIGFjdHVhbGx5IHByZXNlcnZlIGl0LiAqLwotICAgICpwdHIgPSBw
LT5jYXB0dXJlOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNhcHR1cmVfcmVzdW1lKHVwYl9qc29u
X3BhcnNlciAqcCwgY29uc3QgY2hhciAqcHRyKSB7Ci0gIGlmIChwLT5jYXB0dXJlKSB7Ci0gICAg
YXNzZXJ0KHAtPmNhcHR1cmUgPT0gJnN1c3BlbmRfY2FwdHVyZSk7Ci0gICAgcC0+Y2FwdHVyZSA9
IHB0cjsKLSAgfQotfQotCi0KLS8qIENhbGxiYWNrcyBmcm9tIHRoZSBwYXJzZXIgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoZXNlIGFy
ZSB0aGUgZnVuY3Rpb25zIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBwYXJzZXIgaXRzZWxmLgot
ICogV2UgZGVmaW5lIHRoZXNlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZWlyIGRlY2xhcmF0aW9u
cyBpbiB0aGUgcGFyc2VyLiAqLwotCi1zdGF0aWMgY2hhciBlc2NhcGVfY2hhcihjaGFyIGluKSB7
Ci0gIHN3aXRjaCAoaW4pIHsKLSAgICBjYXNlICdyJzogcmV0dXJuICdccic7Ci0gICAgY2FzZSAn
dCc6IHJldHVybiAnXHQnOwotICAgIGNhc2UgJ24nOiByZXR1cm4gJ1xuJzsKLSAgICBjYXNlICdm
JzogcmV0dXJuICdcZic7Ci0gICAgY2FzZSAnYic6IHJldHVybiAnXGInOwotICAgIGNhc2UgJy8n
OiByZXR1cm4gJy8nOwotICAgIGNhc2UgJyInOiByZXR1cm4gJyInOwotICAgIGNhc2UgJ1xcJzog
cmV0dXJuICdcXCc7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGFzc2VydCgwKTsKLSAgICAgIHJldHVy
biAneCc7Ci0gIH0KLX0KLQotc3RhdGljIGJvb2wgZXNjYXBlKHVwYl9qc29uX3BhcnNlciAqcCwg
Y29uc3QgY2hhciAqcHRyKSB7Ci0gIGNoYXIgY2ggPSBlc2NhcGVfY2hhcigqcHRyKTsKLSAgcmV0
dXJuIG11bHRpcGFydF90ZXh0KHAsICZjaCwgMSwgZmFsc2UpOwotfQotCi1zdGF0aWMgdm9pZCBz
dGFydF9oZXgodXBiX2pzb25fcGFyc2VyICpwKSB7Ci0gIHAtPmRpZ2l0ID0gMDsKLX0KLQotc3Rh
dGljIHZvaWQgaGV4ZGlnaXQodXBiX2pzb25fcGFyc2VyICpwLCBjb25zdCBjaGFyICpwdHIpIHsK
LSAgY2hhciBjaCA9ICpwdHI7Ci0KLSAgcC0+ZGlnaXQgPDw9IDQ7Ci0KLSAgaWYgKGNoID49ICcw
JyAmJiBjaCA8PSAnOScpIHsKLSAgICBwLT5kaWdpdCArPSAoY2ggLSAnMCcpOwotICB9IGVsc2Ug
aWYgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpIHsKLSAgICBwLT5kaWdpdCArPSAoKGNoIC0gJ2En
KSArIDEwKTsKLSAgfSBlbHNlIHsKLSAgICBhc3NlcnQoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJyk7
Ci0gICAgcC0+ZGlnaXQgKz0gKChjaCAtICdBJykgKyAxMCk7Ci0gIH0KLX0KLQotc3RhdGljIGJv
b2wgZW5kX2hleCh1cGJfanNvbl9wYXJzZXIgKnApIHsKLSAgdWludDMyX3QgY29kZXBvaW50ID0g
cC0+ZGlnaXQ7Ci0KLSAgLyogZW1pdCB0aGUgY29kZXBvaW50IGFzIFVURi04LiAqLwotICBjaGFy
IHV0ZjhbM107IC8qIHN1cHBvcnQgXHUwMDAwIC0tIFx1RkZGRiAtLSBuZWVkIG9ubHkgdGhyZWUg
Ynl0ZXMuICovCi0gIGludCBsZW5ndGggPSAwOwotICBpZiAoY29kZXBvaW50IDw9IDB4N0YpIHsK
LSAgICB1dGY4WzBdID0gY29kZXBvaW50OwotICAgIGxlbmd0aCA9IDE7Ci0gIH0gZWxzZSBpZiAo
Y29kZXBvaW50IDw9IDB4MDdGRikgewotICAgIHV0ZjhbMV0gPSAoY29kZXBvaW50ICYgMHgzRikg
fCAweDgwOwotICAgIGNvZGVwb2ludCA+Pj0gNjsKLSAgICB1dGY4WzBdID0gKGNvZGVwb2ludCAm
IDB4MUYpIHwgMHhDMDsKLSAgICBsZW5ndGggPSAyOwotICB9IGVsc2UgLyogY29kZXBvaW50IDw9
IDB4RkZGRiAqLyB7Ci0gICAgdXRmOFsyXSA9IChjb2RlcG9pbnQgJiAweDNGKSB8IDB4ODA7Ci0g
ICAgY29kZXBvaW50ID4+PSA2OwotICAgIHV0ZjhbMV0gPSAoY29kZXBvaW50ICYgMHgzRikgfCAw
eDgwOwotICAgIGNvZGVwb2ludCA+Pj0gNjsKLSAgICB1dGY4WzBdID0gKGNvZGVwb2ludCAmIDB4
MEYpIHwgMHhFMDsKLSAgICBsZW5ndGggPSAzOwotICB9Ci0gIC8qIFRPRE8oaGFiZXJtYW4pOiBI
YW5kbGUgaGlnaCBzdXJyb2dhdGVzOiBpZiBjb2RlcG9pbnQgaXMgYSBoaWdoIHN1cnJvZ2F0ZQot
ICAgKiB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGVzY2FwZSB0byBnZXQgdGhlIGZ1bGwg
Y29kZSBwb2ludCkuICovCi0KLSAgcmV0dXJuIG11bHRpcGFydF90ZXh0KHAsIHV0ZjgsIGxlbmd0
aCwgZmFsc2UpOwotfQotCi1zdGF0aWMgdm9pZCBzdGFydF90ZXh0KHVwYl9qc29uX3BhcnNlciAq
cCwgY29uc3QgY2hhciAqcHRyKSB7Ci0gIGNhcHR1cmVfYmVnaW4ocCwgcHRyKTsKLX0KLQotc3Rh
dGljIGJvb2wgZW5kX3RleHQodXBiX2pzb25fcGFyc2VyICpwLCBjb25zdCBjaGFyICpwdHIpIHsK
LSAgcmV0dXJuIGNhcHR1cmVfZW5kKHAsIHB0cik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0X251
bWJlcih1cGJfanNvbl9wYXJzZXIgKnAsIGNvbnN0IGNoYXIgKnB0cikgewotICBtdWx0aXBhcnRf
c3RhcnRhY2N1bShwKTsKLSAgY2FwdHVyZV9iZWdpbihwLCBwdHIpOwotfQotCi1zdGF0aWMgYm9v
bCBwYXJzZV9udW1iZXIodXBiX2pzb25fcGFyc2VyICpwKTsKLQotc3RhdGljIGJvb2wgZW5kX251
bWJlcih1cGJfanNvbl9wYXJzZXIgKnAsIGNvbnN0IGNoYXIgKnB0cikgewotICBpZiAoIWNhcHR1
cmVfZW5kKHAsIHB0cikpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gcGFy
c2VfbnVtYmVyKHApOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZV9udW1iZXIodXBiX2pzb25fcGFy
c2VyICpwKSB7Ci0gIHNpemVfdCBsZW47Ci0gIGNvbnN0IGNoYXIgKmJ1ZjsKLSAgY29uc3QgY2hh
ciAqbXllbmQ7Ci0gIGNoYXIgKmVuZDsKLQotICAvKiBzdHJ0b2woKSBhbmQgZnJpZW5kcyB1bmZv
cnR1bmF0ZWx5IGRvIG5vdCBzdXBwb3J0IHNwZWNpZnlpbmcgdGhlIGxlbmd0aCBvZgotICAgKiB0
aGUgaW5wdXQgc3RyaW5nLCBzbyB3ZSBuZWVkIHRvIGZvcmNlIGEgY29weSBpbnRvIGEgTlVMTC10
ZXJtaW5hdGVkIGJ1ZmZlci4gKi8KLSAgaWYgKCFtdWx0aXBhcnRfdGV4dChwLCAiXDAiLCAxLCBm
YWxzZSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBidWYgPSBhY2N1bXVsYXRlX2dl
dHB0cihwLCAmbGVuKTsKLSAgbXllbmQgPSBidWYgKyBsZW4gLSAxOyAgLyogT25lIGZvciBOVUxM
LiAqLwotCi0gIC8qIFhYWDogV2UgYXJlIHVzaW5nIHN0cnRvbCB0byBwYXJzZSBpbnRlZ2Vycywg
YnV0IHRoaXMgaXMgd3JvbmcgYXMgZXZlbgotICAgKiBpbnRlZ2VycyBjYW4gYmUgcmVwcmVzZW50
ZWQgYXMgMWU2IChmb3IgZXhhbXBsZSksIHdoaWNoIHN0cnRvbCBjYW4ndAotICAgKiBoYW5kbGUg
Y29ycmVjdGx5LgotICAgKgotICAgKiBYWFg6IEFsc28sIHdlIGNhbid0IGhhbmRsZSBsYXJnZSBp
bnRlZ2VycyBwcm9wZXJseSBiZWNhdXNlIHN0cnRvW3VdbGwKLSAgICogaXNuJ3QgaW4gQzg5Lgot
ICAgKgotICAgKiBYWFg6IEFsc28sIHdlIGRvbid0IHByb3Blcmx5IGNoZWNrIGZsb2F0cyBmb3Ig
b3ZlcmZsb3csIHNpbmNlIHN0cnRvZgotICAgKiBpc24ndCBpbiBDODkuICovCi0gIHN3aXRjaCAo
dXBiX2ZpZWxkZGVmX3R5cGUocC0+dG9wLT5mKSkgewotICAgIGNhc2UgVVBCX1RZUEVfRU5VTToK
LSAgICBjYXNlIFVQQl9UWVBFX0lOVDMyOiB7Ci0gICAgICBsb25nIHZhbCA9IHN0cnRvbChwLT5h
Y2N1bXVsYXRlZCwgJmVuZCwgMCk7Ci0gICAgICBpZiAodmFsID4gSU5UMzJfTUFYIHx8IHZhbCA8
IElOVDMyX01JTiB8fCBlcnJubyA9PSBFUkFOR0UgfHwgZW5kICE9IG15ZW5kKQotICAgICAgICBn
b3RvIGVycjsKLSAgICAgIGVsc2UKLSAgICAgICAgdXBiX3NpbmtfcHV0aW50MzIoJnAtPnRvcC0+
c2luaywgcGFyc2VyX2dldHNlbChwKSwgdmFsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFVQQl9UWVBFX0lOVDY0OiB7Ci0gICAgICBsb25nIGxvbmcgdmFsID0gc3RydG9sKHAtPmFj
Y3VtdWxhdGVkLCAmZW5kLCAwKTsKLSAgICAgIGlmICh2YWwgPiBJTlQ2NF9NQVggfHwgdmFsIDwg
SU5UNjRfTUlOIHx8IGVycm5vID09IEVSQU5HRSB8fCBlbmQgIT0gbXllbmQpCi0gICAgICAgIGdv
dG8gZXJyOwotICAgICAgZWxzZQotICAgICAgICB1cGJfc2lua19wdXRpbnQ2NCgmcC0+dG9wLT5z
aW5rLCBwYXJzZXJfZ2V0c2VsKHApLCB2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgVVBCX1RZUEVfVUlOVDMyOiB7Ci0gICAgICB1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvdWwo
cC0+YWNjdW11bGF0ZWQsICZlbmQsIDApOwotICAgICAgaWYgKHZhbCA+IFVJTlQzMl9NQVggfHwg
ZXJybm8gPT0gRVJBTkdFIHx8IGVuZCAhPSBteWVuZCkKLSAgICAgICAgZ290byBlcnI7Ci0gICAg
ICBlbHNlCi0gICAgICAgIHVwYl9zaW5rX3B1dHVpbnQzMigmcC0+dG9wLT5zaW5rLCBwYXJzZXJf
Z2V0c2VsKHApLCB2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVVBCX1RZUEVf
VUlOVDY0OiB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsID0gc3RydG91bChwLT5hY2N1
bXVsYXRlZCwgJmVuZCwgMCk7Ci0gICAgICBpZiAodmFsID4gVUlOVDY0X01BWCB8fCBlcnJubyA9
PSBFUkFOR0UgfHwgZW5kICE9IG15ZW5kKQotICAgICAgICBnb3RvIGVycjsKLSAgICAgIGVsc2UK
LSAgICAgICAgdXBiX3NpbmtfcHV0dWludDY0KCZwLT50b3AtPnNpbmssIHBhcnNlcl9nZXRzZWwo
cCksIHZhbCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVUEJfVFlQRV9ET1VCTEU6
IHsKLSAgICAgIGRvdWJsZSB2YWwgPSBzdHJ0b2QocC0+YWNjdW11bGF0ZWQsICZlbmQpOwotICAg
ICAgaWYgKGVycm5vID09IEVSQU5HRSB8fCBlbmQgIT0gbXllbmQpCi0gICAgICAgIGdvdG8gZXJy
OwotICAgICAgZWxzZQotICAgICAgICB1cGJfc2lua19wdXRkb3VibGUoJnAtPnRvcC0+c2luaywg
cGFyc2VyX2dldHNlbChwKSwgdmFsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVQ
Ql9UWVBFX0ZMT0FUOiB7Ci0gICAgICBmbG9hdCB2YWwgPSBzdHJ0b2QocC0+YWNjdW11bGF0ZWQs
ICZlbmQpOwotICAgICAgaWYgKGVycm5vID09IEVSQU5HRSB8fCBlbmQgIT0gbXllbmQpCi0gICAg
ICAgIGdvdG8gZXJyOwotICAgICAgZWxzZQotICAgICAgICB1cGJfc2lua19wdXRmbG9hdCgmcC0+
dG9wLT5zaW5rLCBwYXJzZXJfZ2V0c2VsKHApLCB2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICBhc3NlcnQoZmFsc2UpOwotICB9Ci0KLSAgbXVsdGlwYXJ0X2Vu
ZChwKTsKLQotICByZXR1cm4gdHJ1ZTsKLQotZXJyOgotICB1cGJfc3RhdHVzX3NldGVycmYoJnAt
PnN0YXR1cywgImVycm9yIHBhcnNpbmcgbnVtYmVyOiAlcyIsIGJ1Zik7Ci0gIHVwYl9lbnZfcmVw
b3J0ZXJyb3IocC0+ZW52LCAmcC0+c3RhdHVzKTsKLSAgbXVsdGlwYXJ0X2VuZChwKTsKLSAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZXJfcHV0Ym9vbCh1cGJfanNvbl9wYXJz
ZXIgKnAsIGJvb2wgdmFsKSB7Ci0gIGJvb2wgb2s7Ci0KLSAgaWYgKHVwYl9maWVsZGRlZl90eXBl
KHAtPnRvcC0+ZikgIT0gVVBCX1RZUEVfQk9PTCkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZigm
cC0+c3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAiQm9vbGVhbiB2YWx1ZSBzcGVjaWZp
ZWQgZm9yIG5vbi1ib29sIGZpZWxkOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVwYl9m
aWVsZGRlZl9uYW1lKHAtPnRvcC0+ZikpOwotICAgIHVwYl9lbnZfcmVwb3J0ZXJyb3IocC0+ZW52
LCAmcC0+c3RhdHVzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBvayA9IHVwYl9zaW5r
X3B1dGJvb2woJnAtPnRvcC0+c2luaywgcGFyc2VyX2dldHNlbChwKSwgdmFsKTsKLSAgVVBCX0FT
U0VSVF9WQVIob2ssIG9rKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgc3Rh
cnRfc3RyaW5ndmFsKHVwYl9qc29uX3BhcnNlciAqcCkgewotICBhc3NlcnQocC0+dG9wLT5mKTsK
LQotICBpZiAodXBiX2ZpZWxkZGVmX2lzc3RyaW5nKHAtPnRvcC0+ZikpIHsKLSAgICB1cGJfanNv
bnBhcnNlcl9mcmFtZSAqaW5uZXI7Ci0gICAgdXBiX3NlbGVjdG9yX3Qgc2VsOwotCi0gICAgaWYg
KCFjaGVja19zdGFjayhwKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgLyogU3RhcnQgYSBuZXcgcGFy
c2VyIGZyYW1lOiBwYXJzZXIgZnJhbWVzIGNvcnJlc3BvbmQgb25lLXRvLW9uZSB3aXRoCi0gICAg
ICogaGFuZGxlciBmcmFtZXMsIGFuZCBzdHJpbmcgZXZlbnRzIG9jY3VyIGluIGEgc3ViLWZyYW1l
LiAqLwotICAgIGlubmVyID0gcC0+dG9wICsgMTsKLSAgICBzZWwgPSBnZXRzZWxfZm9yX2hhbmRs
ZXJ0eXBlKHAsIFVQQl9IQU5ETEVSX1NUQVJUU1RSKTsKLSAgICB1cGJfc2lua19zdGFydHN0cigm
cC0+dG9wLT5zaW5rLCBzZWwsIDAsICZpbm5lci0+c2luayk7Ci0gICAgaW5uZXItPm0gPSBwLT50
b3AtPm07Ci0gICAgaW5uZXItPmYgPSBwLT50b3AtPmY7Ci0gICAgaW5uZXItPmlzX21hcCA9IGZh
bHNlOwotICAgIGlubmVyLT5pc19tYXBlbnRyeSA9IGZhbHNlOwotICAgIHAtPnRvcCA9IGlubmVy
OwotCi0gICAgaWYgKHVwYl9maWVsZGRlZl90eXBlKHAtPnRvcC0+ZikgPT0gVVBCX1RZUEVfU1RS
SU5HKSB7Ci0gICAgICAvKiBGb3IgU1RSSU5HIGZpZWxkcyB3ZSBwdXNoIGRhdGEgZGlyZWN0bHkg
dG8gdGhlIGhhbmRsZXJzIGFzIGl0IGlzCi0gICAgICAgKiBwYXJzZWQuICBXZSBkb24ndCBkbyB0
aGlzIHlldCBmb3IgQllURVMgZmllbGRzLCBiZWNhdXNlIG91ciBiYXNlNjQKLSAgICAgICAqIGRl
Y29kZXIgaXMgbm90IHN0cmVhbWluZy4KLSAgICAgICAqCi0gICAgICAgKiBUT0RPKGhhYmVybWFu
KTogbWFrZSBiYXNlNjQgZGVjb2Rpbmcgc3RyZWFtaW5nIGFsc28uICovCi0gICAgICBtdWx0aXBh
cnRfc3RhcnQocCwgZ2V0c2VsX2Zvcl9oYW5kbGVydHlwZShwLCBVUEJfSEFORExFUl9TVFJJTkcp
KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBtdWx0aXBhcnRfc3Rh
cnRhY2N1bShwKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfSBlbHNlIGlmICh1cGJf
ZmllbGRkZWZfdHlwZShwLT50b3AtPmYpID09IFVQQl9UWVBFX0VOVU0pIHsKLSAgICAvKiBObyBu
ZWVkIHRvIHB1c2ggYSBmcmFtZSAtLSBzeW1ib2xpYyBlbnVtIG5hbWVzIGluIHF1b3RlcyByZW1h
aW4gaW4gdGhlCi0gICAgICogY3VycmVudCBwYXJzZXIgZnJhbWUuCi0gICAgICoKLSAgICAgKiBF
bnVtIHN0cmluZyB2YWx1ZXMgbXVzdCBhY2N1bXVsYXRlIHNvIHdlIGNhbiBsb29rIHVwIHRoZSB2
YWx1ZSBpbiBhIHRhYmxlCi0gICAgICogb25jZSBpdCBpcyBjb21wbGV0ZS4gKi8KLSAgICBtdWx0
aXBhcnRfc3RhcnRhY2N1bShwKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICB1
cGJfc3RhdHVzX3NldGVycmYoJnAtPnN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgIlN0
cmluZyBzcGVjaWZpZWQgZm9yIG5vbi1zdHJpbmcvbm9uLWVudW0gZmllbGQ6ICVzIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgdXBiX2ZpZWxkZGVmX25hbWUocC0+dG9wLT5mKSk7Ci0gICAgdXBi
X2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0dXMpOwotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotfQotCi1zdGF0aWMgYm9vbCBlbmRfc3RyaW5ndmFsKHVwYl9qc29uX3BhcnNlciAqcCkg
ewotICBib29sIG9rID0gdHJ1ZTsKLQotICBzd2l0Y2ggKHVwYl9maWVsZGRlZl90eXBlKHAtPnRv
cC0+ZikpIHsKLSAgICBjYXNlIFVQQl9UWVBFX0JZVEVTOgotICAgICAgaWYgKCFiYXNlNjRfcHVz
aChwLCBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQQl9IQU5ETEVSX1NUUklORyksCi0gICAg
ICAgICAgICAgICAgICAgICAgIHAtPmFjY3VtdWxhdGVkLCBwLT5hY2N1bXVsYXRlZF9sZW4pKSB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIC8qIEZhbGwgdGhyb3VnaC4g
Ki8KLQotICAgIGNhc2UgVVBCX1RZUEVfU1RSSU5HOiB7Ci0gICAgICB1cGJfc2VsZWN0b3JfdCBz
ZWwgPSBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQQl9IQU5ETEVSX0VORFNUUik7Ci0gICAg
ICB1cGJfc2lua19lbmRzdHIoJnAtPnRvcC0+c2luaywgc2VsKTsKLSAgICAgIHAtPnRvcC0tOwot
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBVUEJfVFlQRV9FTlVNOiB7Ci0gICAgICAv
KiBSZXNvbHZlIGVudW0gc3ltYm9saWMgbmFtZSB0byBpbnRlZ2VyIHZhbHVlLiAqLwotICAgICAg
Y29uc3QgdXBiX2VudW1kZWYgKmVudW1kZWYgPQotICAgICAgICAgIChjb25zdCB1cGJfZW51bWRl
ZiopdXBiX2ZpZWxkZGVmX3N1YmRlZihwLT50b3AtPmYpOwotCi0gICAgICBzaXplX3QgbGVuOwot
ICAgICAgY29uc3QgY2hhciAqYnVmID0gYWNjdW11bGF0ZV9nZXRwdHIocCwgJmxlbik7Ci0KLSAg
ICAgIGludDMyX3QgaW50X3ZhbCA9IDA7Ci0gICAgICBvayA9IHVwYl9lbnVtZGVmX250b2koZW51
bWRlZiwgYnVmLCBsZW4sICZpbnRfdmFsKTsKLQotICAgICAgaWYgKG9rKSB7Ci0gICAgICAgIHVw
Yl9zZWxlY3Rvcl90IHNlbCA9IHBhcnNlcl9nZXRzZWwocCk7Ci0gICAgICAgIHVwYl9zaW5rX3B1
dGludDMyKCZwLT50b3AtPnNpbmssIHNlbCwgaW50X3ZhbCk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICB1cGJfc3RhdHVzX3NldGVycmYoJnAtPnN0YXR1cywgIkVudW0gdmFsdWUgdW5rbm93bjog
JyUuKnMnIiwgbGVuLCBidWYpOwotICAgICAgICB1cGJfZW52X3JlcG9ydGVycm9yKHAtPmVudiwg
JnAtPnN0YXR1cyk7Ci0gICAgICB9Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1
bHQ6Ci0gICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgdXBiX3N0YXR1c19zZXRlcnJtc2coJnAt
PnN0YXR1cywgIkludGVybmFsIGVycm9yIGluIEpTT04gZGVjb2RlciIpOwotICAgICAgdXBiX2Vu
dl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0dXMpOwotICAgICAgb2sgPSBmYWxzZTsKLSAg
ICAgIGJyZWFrOwotICB9Ci0KLSAgbXVsdGlwYXJ0X2VuZChwKTsKLQotICByZXR1cm4gb2s7Ci19
Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0X21lbWJlcih1cGJfanNvbl9wYXJzZXIgKnApIHsKLSAgYXNz
ZXJ0KCFwLT50b3AtPmYpOwotICBtdWx0aXBhcnRfc3RhcnRhY2N1bShwKTsKLX0KLQotLyogSGVs
cGVyOiBpbnZva2VkIGR1cmluZyBwYXJzZV9tYXBlbnRyeSgpIHRvIGVtaXQgdGhlIG1hcGVudHJ5
IG1lc3NhZ2UncyBrZXkKLSAqIGZpZWxkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9m
IHRoZSBhY2N1bXVsYXRlIGJ1ZmZlci4gKi8KLXN0YXRpYyBib29sIHBhcnNlX21hcGVudHJ5X2tl
eSh1cGJfanNvbl9wYXJzZXIgKnApIHsKLQotICBzaXplX3QgbGVuOwotICBjb25zdCBjaGFyICpi
dWYgPSBhY2N1bXVsYXRlX2dldHB0cihwLCAmbGVuKTsKLQotICAvKiBFbWl0IHRoZSBrZXkgZmll
bGQuIFdlIGRvIGEgYml0IG9mIGFkLWhvYyBwYXJzaW5nIGhlcmUgYmVjYXVzZSB0aGUKLSAgICog
cGFyc2VyIHN0YXRlIG1hY2hpbmUgaGFzIGFscmVhZHkgZGVjaWRlZCB0aGF0IHRoaXMgaXMgYSBz
dHJpbmcgZmllbGQKLSAgICogbmFtZSwgYW5kIHdlIGFyZSByZWludGVycHJldGluZyBpdCBhcyBz
b21lIGFyYml0cmFyeSBrZXkgdHlwZS4gSW4KLSAgICogcGFydGljdWxhciwgaW50ZWdlciBhbmQg
Ym9vbCBrZXlzIGFyZSBxdW90ZWQsIHNvIHdlIG5lZWQgdG8gcGFyc2UgdGhlCi0gICAqIHF1b3Rl
ZCBzdHJpbmcgY29udGVudHMgaGVyZS4gKi8KLQotICBwLT50b3AtPmYgPSB1cGJfbXNnZGVmX2l0
b2YocC0+dG9wLT5tLCBVUEJfTUFQRU5UUllfS0VZKTsKLSAgaWYgKHAtPnRvcC0+ZiA9PSBOVUxM
KSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2coJnAtPnN0YXR1cywgIm1hcGVudHJ5IG1lc3Nh
Z2UgaGFzIG5vIGtleSIpOwotICAgIHVwYl9lbnZfcmVwb3J0ZXJyb3IocC0+ZW52LCAmcC0+c3Rh
dHVzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgc3dpdGNoICh1cGJfZmllbGRkZWZfdHlw
ZShwLT50b3AtPmYpKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQzMjoKLSAgICBjYXNlIFVQQl9U
WVBFX0lOVDY0OgotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDMyOgotICAgIGNhc2UgVVBCX1RZUEVf
VUlOVDY0OgotICAgICAgLyogSW52b2tlIGVuZF9udW1iZXIuIFRoZSBhY2N1bSBidWZmZXIgaGFz
IHRoZSBudW1iZXIncyB0ZXh0IGFscmVhZHkuICovCi0gICAgICBpZiAoIXBhcnNlX251bWJlcihw
KSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIFVQQl9UWVBFX0JPT0w6Ci0gICAgICBpZiAobGVuID09IDQgJiYgIXN0cm5jbXAoYnVmLCAi
dHJ1ZSIsIDQpKSB7Ci0gICAgICAgIGlmICghcGFyc2VyX3B1dGJvb2wocCwgdHJ1ZSkpIHsKLSAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAobGVuID09
IDUgJiYgIXN0cm5jbXAoYnVmLCAiZmFsc2UiLCA1KSkgewotICAgICAgICBpZiAoIXBhcnNlcl9w
dXRib29sKHAsIGZhbHNlKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgdXBiX3N0YXR1c19zZXRlcnJtc2coJnAtPnN0YXR1cywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hcCBib29sIGtleSBub3QgJ3RydWUnIG9y
ICdmYWxzZSciKTsKLSAgICAgICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0
dXMpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBtdWx0aXBhcnRfZW5k
KHApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9TVFJJTkc6Ci0gICAgY2FzZSBV
UEJfVFlQRV9CWVRFUzogewotICAgICAgdXBiX3Npbmsgc3Vic2luazsKLSAgICAgIHVwYl9zZWxl
Y3Rvcl90IHNlbCA9IGdldHNlbF9mb3JfaGFuZGxlcnR5cGUocCwgVVBCX0hBTkRMRVJfU1RBUlRT
VFIpOwotICAgICAgdXBiX3Npbmtfc3RhcnRzdHIoJnAtPnRvcC0+c2luaywgc2VsLCBsZW4sICZz
dWJzaW5rKTsKLSAgICAgIHNlbCA9IGdldHNlbF9mb3JfaGFuZGxlcnR5cGUocCwgVVBCX0hBTkRM
RVJfU1RSSU5HKTsKLSAgICAgIHVwYl9zaW5rX3B1dHN0cmluZygmc3Vic2luaywgc2VsLCBidWYs
IGxlbiwgTlVMTCk7Ci0gICAgICBzZWwgPSBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQQl9I
QU5ETEVSX0VORFNUUik7Ci0gICAgICB1cGJfc2lua19lbmRzdHIoJnN1YnNpbmssIHNlbCk7Ci0g
ICAgICBtdWx0aXBhcnRfZW5kKHApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6
Ci0gICAgICB1cGJfc3RhdHVzX3NldGVycm1zZygmcC0+c3RhdHVzLCAiSW52YWxpZCBmaWVsZCB0
eXBlIGZvciBtYXAga2V5Iik7Ci0gICAgICB1cGJfZW52X3JlcG9ydGVycm9yKHAtPmVudiwgJnAt
PnN0YXR1cyk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0K
LQotLyogSGVscGVyOiBlbWl0IG9uZSBtYXAgZW50cnkgKGFzIGEgc3VibWVzc2FnZSBpbiB0aGUg
bWFwIGZpZWxkIHNlcXVlbmNlKS4gVGhpcwotICogaXMgaW52b2tlZCBmcm9tIGVuZF9tZW1iZXJu
YW1lKCksIGF0IHRoZSBlbmQgb2YgdGhlIG1hcCBlbnRyeSdzIGtleSBzdHJpbmcsCi0gKiB3aXRo
IHRoZSBtYXAga2V5IGluIHRoZSBhY2N1bXVsYXRlIGJ1ZmZlci4gSXQgcGFyc2VzIHRoZSBrZXkg
ZnJvbSB0aGF0Ci0gKiBidWZmZXIsIGVtaXRzIHRoZSBoYW5kbGVyIGNhbGxzIHRvIHN0YXJ0IHRo
ZSBtYXBlbnRyeSBzdWJtZXNzYWdlIChzZXR0aW5nIHVwCi0gKiBpdHMgc3ViZnJhbWUgaW4gdGhl
IHByb2Nlc3MpLCBhbmQgc2V0cyB1cCBzdGF0ZSBpbiB0aGUgc3ViZnJhbWUgc28gdGhhdCB0aGUK
LSAqIHZhbHVlIHBhcnNlciAoaW52b2tlZCBuZXh0KSB3aWxsIGVtaXQgdGhlIG1hcGVudHJ5J3Mg
dmFsdWUgZmllbGQgYW5kIHRoZW4KLSAqIGVuZCB0aGUgbWFwZW50cnkgbWVzc2FnZS4gKi8KLQot
c3RhdGljIGJvb2wgaGFuZGxlX21hcGVudHJ5KHVwYl9qc29uX3BhcnNlciAqcCkgewotICBjb25z
dCB1cGJfZmllbGRkZWYgKm1hcGZpZWxkOwotICBjb25zdCB1cGJfbXNnZGVmICptYXBlbnRyeW1z
ZzsKLSAgdXBiX2pzb25wYXJzZXJfZnJhbWUgKmlubmVyOwotICB1cGJfc2VsZWN0b3JfdCBzZWw7
Ci0KLSAgLyogTWFwIGVudHJ5OiBwLT50b3AtPnNpbmsgaXMgdGhlIHNlcSBmcmFtZSwgc28gd2Ug
bmVlZCB0byBzdGFydCBhIGZyYW1lCi0gICAqIGZvciB0aGUgbWFwZW50cnkgaXRzZWxmLCBhbmQg
dGhlbiBzZXQgfGZ8IGluIHRoYXQgZnJhbWUgc28gdGhhdCB0aGUgbWFwCi0gICAqIHZhbHVlIGZp
ZWxkIGlzIHBhcnNlZCwgYW5kIGFsc28gc2V0IGEgZmxhZyB0byBlbmQgdGhlIGZyYW1lIGFmdGVy
IHRoZQotICAgKiBtYXAtZW50cnkgdmFsdWUgaXMgcGFyc2VkLiAqLwotICBpZiAoIWNoZWNrX3N0
YWNrKHApKSByZXR1cm4gZmFsc2U7Ci0KLSAgbWFwZmllbGQgPSBwLT50b3AtPm1hcGZpZWxkOwot
ICBtYXBlbnRyeW1zZyA9IHVwYl9maWVsZGRlZl9tc2dzdWJkZWYobWFwZmllbGQpOwotCi0gIGlu
bmVyID0gcC0+dG9wICsgMTsKLSAgcC0+dG9wLT5mID0gbWFwZmllbGQ7Ci0gIHNlbCA9IGdldHNl
bF9mb3JfaGFuZGxlcnR5cGUocCwgVVBCX0hBTkRMRVJfU1RBUlRTVUJNU0cpOwotICB1cGJfc2lu
a19zdGFydHN1Ym1zZygmcC0+dG9wLT5zaW5rLCBzZWwsICZpbm5lci0+c2luayk7Ci0gIGlubmVy
LT5tID0gbWFwZW50cnltc2c7Ci0gIGlubmVyLT5tYXBmaWVsZCA9IG1hcGZpZWxkOwotICBpbm5l
ci0+aXNfbWFwID0gZmFsc2U7Ci0KLSAgLyogRG9uJ3Qgc2V0IHRoaXMgdG8gdHJ1ZSAqeWV0KiAt
LSB3ZSByZXVzZSBwYXJzaW5nIGhhbmRsZXJzIGJlbG93IHRvIHB1c2gKLSAgICogdGhlIGtleSBm
aWVsZCB2YWx1ZSB0byB0aGUgc2luaywgYW5kIHRoZXNlIGhhbmRsZXJzIHdpbGwgcG9wIHRoZSBm
cmFtZQotICAgKiBpZiB0aGV5IHNlZSBpc19tYXBlbnRyeSAod2hlbiBpbnZva2VkIGJ5IHRoZSBw
YXJzZXIgc3RhdGUgbWFjaGluZSwgdGhleQotICAgKiB3b3VsZCBoYXZlIGp1c3Qgc2VlbiB0aGUg
bWFwLWVudHJ5IHZhbHVlLCBub3Qga2V5KS4gKi8KLSAgaW5uZXItPmlzX21hcGVudHJ5ID0gZmFs
c2U7Ci0gIHAtPnRvcCA9IGlubmVyOwotCi0gIC8qIHNlbmQgU1RBUlRNU0cgaW4gc3VibXNnIGZy
YW1lLiAqLwotICB1cGJfc2lua19zdGFydG1zZygmcC0+dG9wLT5zaW5rKTsKLQotICBwYXJzZV9t
YXBlbnRyeV9rZXkocCk7Ci0KLSAgLyogU2V0IHVwIHRoZSB2YWx1ZSBmaWVsZCB0byByZWNlaXZl
IHRoZSBtYXAtZW50cnkgdmFsdWUuICovCi0gIHAtPnRvcC0+ZiA9IHVwYl9tc2dkZWZfaXRvZihw
LT50b3AtPm0sIFVQQl9NQVBFTlRSWV9WQUxVRSk7Ci0gIHAtPnRvcC0+aXNfbWFwZW50cnkgPSB0
cnVlOyAgLyogc2V0IHVwIHRvIHBvcCBmcmFtZSBhZnRlciB2YWx1ZSBpcyBwYXJzZWQuICovCi0g
IHAtPnRvcC0+bWFwZmllbGQgPSBtYXBmaWVsZDsKLSAgaWYgKHAtPnRvcC0+ZiA9PSBOVUxMKSB7
Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2coJnAtPnN0YXR1cywgIm1hcGVudHJ5IG1lc3NhZ2Ug
aGFzIG5vIHZhbHVlIik7Ci0gICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0
dXMpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgYm9vbCBlbmRfbWVtYmVybmFtZSh1cGJfanNvbl9wYXJzZXIgKnApIHsKLSAgYXNzZXJ0KCFw
LT50b3AtPmYpOwotCi0gIGlmIChwLT50b3AtPmlzX21hcCkgewotICAgIHJldHVybiBoYW5kbGVf
bWFwZW50cnkocCk7Ci0gIH0gZWxzZSB7Ci0gICAgc2l6ZV90IGxlbjsKLSAgICBjb25zdCBjaGFy
ICpidWYgPSBhY2N1bXVsYXRlX2dldHB0cihwLCAmbGVuKTsKLSAgICBjb25zdCB1cGJfZmllbGRk
ZWYgKmYgPSB1cGJfbXNnZGVmX250b2YocC0+dG9wLT5tLCBidWYsIGxlbik7Ci0KLSAgICBpZiAo
IWYpIHsKLSAgICAgIC8qIFRPRE8oaGFiZXJtYW4pOiBJZ25vcmUgdW5rbm93biBmaWVsZHMgaWYg
cmVxdWVzdGVkL2NvbmZpZ3VyZWQgdG8gZG8KLSAgICAgICAqIHNvLiAqLwotICAgICAgdXBiX3N0
YXR1c19zZXRlcnJmKCZwLT5zdGF0dXMsICJObyBzdWNoIGZpZWxkOiAlLipzXG4iLCAoaW50KWxl
biwgYnVmKTsKLSAgICAgIHVwYl9lbnZfcmVwb3J0ZXJyb3IocC0+ZW52LCAmcC0+c3RhdHVzKTsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwLT50b3AtPmYgPSBmOwotICAgIG11
bHRpcGFydF9lbmQocCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQotCi1zdGF0aWMgdm9p
ZCBlbmRfbWVtYmVyKHVwYl9qc29uX3BhcnNlciAqcCkgewotICAvKiBJZiB3ZSBqdXN0IHBhcnNl
ZCBhIG1hcC1lbnRyeSB2YWx1ZSwgZW5kIHRoYXQgZnJhbWUgdG9vLiAqLwotICBpZiAocC0+dG9w
LT5pc19tYXBlbnRyeSkgewotICAgIHVwYl9zdGF0dXMgcyA9IFVQQl9TVEFUVVNfSU5JVDsKLSAg
ICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0gICAgYm9vbCBvazsKLSAgICBjb25zdCB1cGJfZmllbGRk
ZWYgKm1hcGZpZWxkOwotCi0gICAgYXNzZXJ0KHAtPnRvcCA+IHAtPnN0YWNrKTsKLSAgICAvKiBz
ZW5kIEVORE1TRyBvbiBzdWJtc2cuICovCi0gICAgdXBiX3NpbmtfZW5kbXNnKCZwLT50b3AtPnNp
bmssICZzKTsKLSAgICBtYXBmaWVsZCA9IHAtPnRvcC0+bWFwZmllbGQ7Ci0KLSAgICAvKiBzZW5k
IEVORFNVQk1TRyBpbiByZXBlYXRlZC1maWVsZC1vZi1tYXBlbnRyaWVzIGZyYW1lLiAqLwotICAg
IHAtPnRvcC0tOwotICAgIG9rID0gdXBiX2hhbmRsZXJzX2dldHNlbGVjdG9yKG1hcGZpZWxkLCBV
UEJfSEFORExFUl9FTkRTVUJNU0csICZzZWwpOwotICAgIFVQQl9BU1NFUlRfVkFSKG9rLCBvayk7
Ci0gICAgdXBiX3NpbmtfZW5kc3VibXNnKCZwLT50b3AtPnNpbmssIHNlbCk7Ci0gIH0KLQotICBw
LT50b3AtPmYgPSBOVUxMOwotfQotCi1zdGF0aWMgYm9vbCBzdGFydF9zdWJvYmplY3QodXBiX2pz
b25fcGFyc2VyICpwKSB7Ci0gIGFzc2VydChwLT50b3AtPmYpOwotCi0gIGlmICh1cGJfZmllbGRk
ZWZfaXNtYXAocC0+dG9wLT5mKSkgewotICAgIHVwYl9qc29ucGFyc2VyX2ZyYW1lICppbm5lcjsK
LSAgICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0KLSAgICAvKiBCZWdpbm5pbmcgb2YgYSBtYXAuIFN0
YXJ0IGEgbmV3IHBhcnNlciBmcmFtZSBpbiBhIHJlcGVhdGVkLWZpZWxkCi0gICAgICogY29udGV4
dC4gKi8KLSAgICBpZiAoIWNoZWNrX3N0YWNrKHApKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbm5l
ciA9IHAtPnRvcCArIDE7Ci0gICAgc2VsID0gZ2V0c2VsX2Zvcl9oYW5kbGVydHlwZShwLCBVUEJf
SEFORExFUl9TVEFSVFNFUSk7Ci0gICAgdXBiX3Npbmtfc3RhcnRzZXEoJnAtPnRvcC0+c2luaywg
c2VsLCAmaW5uZXItPnNpbmspOwotICAgIGlubmVyLT5tID0gdXBiX2ZpZWxkZGVmX21zZ3N1YmRl
ZihwLT50b3AtPmYpOwotICAgIGlubmVyLT5tYXBmaWVsZCA9IHAtPnRvcC0+ZjsKLSAgICBpbm5l
ci0+ZiA9IE5VTEw7Ci0gICAgaW5uZXItPmlzX21hcCA9IHRydWU7Ci0gICAgaW5uZXItPmlzX21h
cGVudHJ5ID0gZmFsc2U7Ci0gICAgcC0+dG9wID0gaW5uZXI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfSBlbHNlIGlmICh1cGJfZmllbGRkZWZfaXNzdWJtc2cocC0+dG9wLT5mKSkgewotICAgIHVw
Yl9qc29ucGFyc2VyX2ZyYW1lICppbm5lcjsKLSAgICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0KLSAg
ICAvKiBCZWdpbm5pbmcgb2YgYSBzdWJvYmplY3QuIFN0YXJ0IGEgbmV3IHBhcnNlciBmcmFtZSBp
biB0aGUgc3VibXNnCi0gICAgICogY29udGV4dC4gKi8KLSAgICBpZiAoIWNoZWNrX3N0YWNrKHAp
KSByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbm5lciA9IHAtPnRvcCArIDE7Ci0KLSAgICBzZWwgPSBn
ZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQQl9IQU5ETEVSX1NUQVJUU1VCTVNHKTsKLSAgICB1
cGJfc2lua19zdGFydHN1Ym1zZygmcC0+dG9wLT5zaW5rLCBzZWwsICZpbm5lci0+c2luayk7Ci0g
ICAgaW5uZXItPm0gPSB1cGJfZmllbGRkZWZfbXNnc3ViZGVmKHAtPnRvcC0+Zik7Ci0gICAgaW5u
ZXItPmYgPSBOVUxMOwotICAgIGlubmVyLT5pc19tYXAgPSBmYWxzZTsKLSAgICBpbm5lci0+aXNf
bWFwZW50cnkgPSBmYWxzZTsKLSAgICBwLT50b3AgPSBpbm5lcjsKLQotICAgIHJldHVybiB0cnVl
OwotICB9IGVsc2UgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZigmcC0+c3RhdHVzLAotICAgICAg
ICAgICAgICAgICAgICAgICAiT2JqZWN0IHNwZWNpZmllZCBmb3Igbm9uLW1lc3NhZ2UvZ3JvdXAg
ZmllbGQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdXBiX2ZpZWxkZGVmX25hbWUocC0+
dG9wLT5mKSk7Ci0gICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0dXMpOwot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBlbmRfc3Vib2JqZWN0KHVw
Yl9qc29uX3BhcnNlciAqcCkgewotICBpZiAocC0+dG9wLT5pc19tYXApIHsKLSAgICB1cGJfc2Vs
ZWN0b3JfdCBzZWw7Ci0gICAgcC0+dG9wLS07Ci0gICAgc2VsID0gZ2V0c2VsX2Zvcl9oYW5kbGVy
dHlwZShwLCBVUEJfSEFORExFUl9FTkRTRVEpOwotICAgIHVwYl9zaW5rX2VuZHNlcSgmcC0+dG9w
LT5zaW5rLCBzZWwpOwotICB9IGVsc2UgewotICAgIHVwYl9zZWxlY3Rvcl90IHNlbDsKLSAgICBw
LT50b3AtLTsKLSAgICBzZWwgPSBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQQl9IQU5ETEVS
X0VORFNVQk1TRyk7Ci0gICAgdXBiX3NpbmtfZW5kc3VibXNnKCZwLT50b3AtPnNpbmssIHNlbCk7
Ci0gIH0KLX0KLQotc3RhdGljIGJvb2wgc3RhcnRfYXJyYXkodXBiX2pzb25fcGFyc2VyICpwKSB7
Ci0gIHVwYl9qc29ucGFyc2VyX2ZyYW1lICppbm5lcjsKLSAgdXBiX3NlbGVjdG9yX3Qgc2VsOwot
Ci0gIGFzc2VydChwLT50b3AtPmYpOwotCi0gIGlmICghdXBiX2ZpZWxkZGVmX2lzc2VxKHAtPnRv
cC0+ZikpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycmYoJnAtPnN0YXR1cywKLSAgICAgICAgICAg
ICAgICAgICAgICAgIkFycmF5IHNwZWNpZmllZCBmb3Igbm9uLXJlcGVhdGVkIGZpZWxkOiAlcyIs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHVwYl9maWVsZGRlZl9uYW1lKHAtPnRvcC0+ZikpOwot
ICAgIHVwYl9lbnZfcmVwb3J0ZXJyb3IocC0+ZW52LCAmcC0+c3RhdHVzKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICBpZiAoIWNoZWNrX3N0YWNrKHApKSByZXR1cm4gZmFsc2U7Ci0KLSAg
aW5uZXIgPSBwLT50b3AgKyAxOwotICBzZWwgPSBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQ
Ql9IQU5ETEVSX1NUQVJUU0VRKTsKLSAgdXBiX3Npbmtfc3RhcnRzZXEoJnAtPnRvcC0+c2luaywg
c2VsLCAmaW5uZXItPnNpbmspOwotICBpbm5lci0+bSA9IHAtPnRvcC0+bTsKLSAgaW5uZXItPmYg
PSBwLT50b3AtPmY7Ci0gIGlubmVyLT5pc19tYXAgPSBmYWxzZTsKLSAgaW5uZXItPmlzX21hcGVu
dHJ5ID0gZmFsc2U7Ci0gIHAtPnRvcCA9IGlubmVyOwotCi0gIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgdm9pZCBlbmRfYXJyYXkodXBiX2pzb25fcGFyc2VyICpwKSB7Ci0gIHVwYl9zZWxlY3Rv
cl90IHNlbDsKLQotICBhc3NlcnQocC0+dG9wID4gcC0+c3RhY2spOwotCi0gIHAtPnRvcC0tOwot
ICBzZWwgPSBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQQl9IQU5ETEVSX0VORFNFUSk7Ci0g
IHVwYl9zaW5rX2VuZHNlcSgmcC0+dG9wLT5zaW5rLCBzZWwpOwotfQotCi1zdGF0aWMgdm9pZCBz
dGFydF9vYmplY3QodXBiX2pzb25fcGFyc2VyICpwKSB7Ci0gIGlmICghcC0+dG9wLT5pc19tYXAp
IHsKLSAgICB1cGJfc2lua19zdGFydG1zZygmcC0+dG9wLT5zaW5rKTsKLSAgfQotfQotCi1zdGF0
aWMgdm9pZCBlbmRfb2JqZWN0KHVwYl9qc29uX3BhcnNlciAqcCkgewotICBpZiAoIXAtPnRvcC0+
aXNfbWFwKSB7Ci0gICAgdXBiX3N0YXR1cyBzdGF0dXM7Ci0gICAgdXBiX3N0YXR1c19jbGVhcigm
c3RhdHVzKTsKLSAgICB1cGJfc2lua19lbmRtc2coJnAtPnRvcC0+c2luaywgJnN0YXR1cyk7Ci0g
ICAgaWYgKCF1cGJfb2soJnN0YXR1cykpIHsKLSAgICAgIHVwYl9lbnZfcmVwb3J0ZXJyb3IocC0+
ZW52LCAmc3RhdHVzKTsKLSAgICB9Ci0gIH0KLX0KLQotCi0jZGVmaW5lIENIRUNLX1JFVFVSTl9U
T1AoeCkgaWYgKCEoeCkpIGdvdG8gZXJyb3IKLQotCi0vKiBUaGUgYWN0dWFsIHBhcnNlciAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ci0vKiBXaGF0IGZvbGxvd3MgaXMgdGhlIFJhZ2VsIHBhcnNlciBpdHNlbGYuICBUaGUgbGFuZ3Vh
Z2UgaXMgc3BlY2lmaWVkIGluIFJhZ2VsCi0gKiBhbmQgdGhlIGFjdGlvbnMgY2FsbCBvdXIgQyBm
dW5jdGlvbnMgYWJvdmUuCi0gKgotICogUmFnZWwgaGFzIGFuIGV4dGVuc2l2ZSBzZXQgb2YgZnVu
Y3Rpb25hbGl0eSwgYW5kIHdlIHVzZSBvbmx5IGEgc21hbGwgcGFydCBvZgotICogaXQuICBUaGVy
ZSBhcmUgbWFueSBhY3Rpb24gdHlwZXMgYnV0IHdlIG9ubHkgdXNlIGEgZmV3OgotICoKLSAqICAg
Ij4iIC0tIHRyYW5zaXRpb24gaW50byBhIG1hY2hpbmUKLSAqICAgIiUiIC0tIHRyYW5zaXRpb24g
b3V0IG9mIGEgbWFjaGluZQotICogICAiQCIgLS0gdHJhbnNpdGlvbiBpbnRvIGEgZmluYWwgc3Rh
dGUgb2YgYSBtYWNoaW5lLgotICoKLSAqICJAIiB0cmFuc2l0aW9ucyBhcmUgdHJpY2t5IGJlY2F1
c2UgYSBtYWNoaW5lIGNhbiB0cmFuc2l0aW9uIGludG8gYSBmaW5hbAotICogc3RhdGUgcmVwZWF0
ZWRseS4gIEJ1dCBpbiBzb21lIGNhc2VzIHdlIGtub3cgdGhpcyBjYW4ndCBoYXBwZW4sIGZvciBl
eGFtcGxlCi0gKiBhIHN0cmluZyB3aGljaCBpcyBkZWxpbWl0ZWQgYnkgYSBmaW5hbCAnIicgY2Fu
IG9ubHkgdHJhbnNpdGlvbiBpbnRvIGl0cwotICogZmluYWwgc3RhdGUgb25jZSwgd2hlbiB0aGUg
Y2xvc2luZyAnIicgaXMgc2Vlbi4gKi8KLQotCi0jbGluZSAxMjE4ICJ1cGIvanNvbi9wYXJzZXIu
cmwiCi0KLQotCi0jbGluZSAxMTMwICJ1cGIvanNvbi9wYXJzZXIuYyIKLXN0YXRpYyBjb25zdCBj
aGFyIF9qc29uX2FjdGlvbnNbXSA9IHsKLQkwLCAxLCAwLCAxLCAyLCAxLCAzLCAxLCAKLQk1LCAx
LCA2LCAxLCA3LCAxLCA4LCAxLCAKLQkxMCwgMSwgMTIsIDEsIDEzLCAxLCAxNCwgMSwgCi0JMTUs
IDEsIDE2LCAxLCAxNywgMSwgMjEsIDEsIAotCTI1LCAxLCAyNywgMiwgMywgOCwgMiwgNCwgCi0J
NSwgMiwgNiwgMiwgMiwgNiwgOCwgMiwgCi0JMTEsIDksIDIsIDEzLCAxNSwgMiwgMTQsIDE1LCAK
LQkyLCAxOCwgMSwgMiwgMTksIDI3LCAyLCAyMCwgCi0JOSwgMiwgMjIsIDI3LCAyLCAyMywgMjcs
IDIsIAotCTI0LCAyNywgMiwgMjYsIDI3LCAzLCAxNCwgMTEsIAotCTkKLX07Ci0KLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIF9qc29uX2tleV9vZmZzZXRzW10gPSB7Ci0JMCwgMCwgNCwgOSwg
MTQsIDE1LCAxOSwgMjQsIAotCTI5LCAzNCwgMzgsIDQyLCA0NSwgNDgsIDUwLCA1NCwgCi0JNTgs
IDYwLCA2MiwgNjcsIDY5LCA3MSwgODAsIDg2LCAKLQk5MiwgOTgsIDEwNCwgMTA2LCAxMTUsIDEx
NiwgMTE2LCAxMTYsIAotCTEyMSwgMTI2LCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM1LCAK
LQkxMzYsIDEzNywgMTM4LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MSwgCi0JMTQ2LCAxNTEsIDE1
MiwgMTU2LCAxNjEsIDE2NiwgMTcxLCAxNzUsIAotCTE3NSwgMTc4LCAxNzgsIDE3OAotfTsKLQot
c3RhdGljIGNvbnN0IGNoYXIgX2pzb25fdHJhbnNfa2V5c1tdID0gewotCTMyLCAxMjMsIDksIDEz
LCAzMiwgMzQsIDEyNSwgOSwgCi0JMTMsIDMyLCAzNCwgMTI1LCA5LCAxMywgMzQsIDMyLCAKLQk1
OCwgOSwgMTMsIDMyLCA5MywgMTI1LCA5LCAxMywgCi0JMzIsIDQ0LCAxMjUsIDksIDEzLCAzMiwg
NDQsIDEyNSwgCi0JOSwgMTMsIDMyLCAzNCwgOSwgMTMsIDQ1LCA0OCwgCi0JNDksIDU3LCA0OCwg
NDksIDU3LCA0NiwgNjksIDEwMSwgCi0JNDgsIDU3LCA2OSwgMTAxLCA0OCwgNTcsIDQzLCA0NSwg
Ci0JNDgsIDU3LCA0OCwgNTcsIDQ4LCA1NywgNDYsIDY5LCAKLQkxMDEsIDQ4LCA1NywgMzQsIDky
LCAzNCwgOTIsIDM0LCAKLQk0NywgOTIsIDk4LCAxMDIsIDExMCwgMTE0LCAxMTYsIDExNywgCi0J
NDgsIDU3LCA2NSwgNzAsIDk3LCAxMDIsIDQ4LCA1NywgCi0JNjUsIDcwLCA5NywgMTAyLCA0OCwg
NTcsIDY1LCA3MCwgCi0JOTcsIDEwMiwgNDgsIDU3LCA2NSwgNzAsIDk3LCAxMDIsIAotCTM0LCA5
MiwgMzQsIDQ1LCA5MSwgMTAyLCAxMTAsIDExNiwgCi0JMTIzLCA0OCwgNTcsIDM0LCAzMiwgOTMs
IDEyNSwgOSwgCi0JMTMsIDMyLCA0NCwgOTMsIDksIDEzLCAzMiwgOTMsIAotCTEyNSwgOSwgMTMs
IDk3LCAxMDgsIDExNSwgMTAxLCAxMTcsIAotCTEwOCwgMTA4LCAxMTQsIDExNywgMTAxLCAzMiwg
MzQsIDEyNSwgCi0JOSwgMTMsIDMyLCAzNCwgMTI1LCA5LCAxMywgMzQsIAotCTMyLCA1OCwgOSwg
MTMsIDMyLCA5MywgMTI1LCA5LCAKLQkxMywgMzIsIDQ0LCAxMjUsIDksIDEzLCAzMiwgNDQsIAot
CTEyNSwgOSwgMTMsIDMyLCAzNCwgOSwgMTMsIDMyLCAKLQk5LCAxMywgMAotfTsKLQotc3RhdGlj
IGNvbnN0IGNoYXIgX2pzb25fc2luZ2xlX2xlbmd0aHNbXSA9IHsKLQkwLCAyLCAzLCAzLCAxLCAy
LCAzLCAzLCAKLQkzLCAyLCAyLCAxLCAzLCAwLCAyLCAyLCAKLQkwLCAwLCAzLCAyLCAyLCA5LCAw
LCAwLCAKLQkwLCAwLCAyLCA3LCAxLCAwLCAwLCAzLCAKLQkzLCAzLCAxLCAxLCAxLCAxLCAwLCAx
LCAKLQkxLCAxLCAwLCAxLCAxLCAxLCAwLCAzLCAKLQkzLCAxLCAyLCAzLCAzLCAzLCAyLCAwLCAK
LQkxLCAwLCAwLCAwCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciBfanNvbl9yYW5nZV9sZW5ndGhz
W10gPSB7Ci0JMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgCi0JMSwgMSwgMSwgMSwgMCwgMSwgMSwg
MSwgCi0JMSwgMSwgMSwgMCwgMCwgMCwgMywgMywgCi0JMywgMywgMCwgMSwgMCwgMCwgMCwgMSwg
Ci0JMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgCi0J
MSwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgCi0JMSwgMCwgMCwgMAotfTsKLQotc3RhdGljIGNvbnN0
IHNob3J0IF9qc29uX2luZGV4X29mZnNldHNbXSA9IHsKLQkwLCAwLCA0LCA5LCAxNCwgMTYsIDIw
LCAyNSwgCi0JMzAsIDM1LCAzOSwgNDMsIDQ2LCA1MCwgNTIsIDU2LCAKLQk2MCwgNjIsIDY0LCA2
OSwgNzIsIDc1LCA4NSwgODksIAotCTkzLCA5NywgMTAxLCAxMDQsIDExMywgMTE1LCAxMTYsIDEx
NywgCi0JMTIyLCAxMjcsIDEzMiwgMTM0LCAxMzYsIDEzOCwgMTQwLCAxNDEsIAotCTE0MywgMTQ1
LCAxNDcsIDE0OCwgMTUwLCAxNTIsIDE1NCwgMTU1LCAKLQkxNjAsIDE2NSwgMTY3LCAxNzEsIDE3
NiwgMTgxLCAxODYsIDE5MCwgCi0JMTkxLCAxOTQsIDE5NSwgMTk2Ci19OwotCi1zdGF0aWMgY29u
c3QgY2hhciBfanNvbl9pbmRpY2llc1tdID0gewotCTAsIDIsIDAsIDEsIDMsIDQsIDUsIDMsIAot
CTEsIDYsIDcsIDgsIDYsIDEsIDksIDEsIAotCTEwLCAxMSwgMTAsIDEsIDExLCAxLCAxLCAxMSwg
Ci0JMTIsIDEzLCAxNCwgMTUsIDEzLCAxLCAxNiwgMTcsIAotCTgsIDE2LCAxLCAxNywgNywgMTcs
IDEsIDE4LCAKLQkxOSwgMjAsIDEsIDE5LCAyMCwgMSwgMjIsIDIzLCAKLQkyMywgMjEsIDI0LCAx
LCAyMywgMjMsIDI0LCAyMSwgCi0JMjUsIDI1LCAyNiwgMSwgMjYsIDEsIDI2LCAyMSwgCi0JMjIs
IDIzLCAyMywgMjAsIDIxLCAyOCwgMjksIDI3LCAKLQkzMSwgMzIsIDMwLCAzMywgMzMsIDMzLCAz
MywgMzMsIAotCTMzLCAzMywgMzMsIDM0LCAxLCAzNSwgMzUsIDM1LCAKLQkxLCAzNiwgMzYsIDM2
LCAxLCAzNywgMzcsIDM3LCAKLQkxLCAzOCwgMzgsIDM4LCAxLCA0MCwgNDEsIDM5LCAKLQk0Miwg
NDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDMsIAotCTEsIDQ5LCAxLCA1MCwgNTEsIDUzLCA1NCwg
MSwgCi0JNTMsIDUyLCA1NSwgNTYsIDU0LCA1NSwgMSwgNTYsIAotCTEsIDEsIDU2LCA1MiwgNTcs
IDEsIDU4LCAxLCAKLQk1OSwgMSwgNjAsIDEsIDYxLCA2MiwgMSwgNjMsIAotCTEsIDY0LCAxLCA2
NSwgNjYsIDEsIDY3LCAxLCAKLQk2OCwgMSwgNjksIDcwLCA3MSwgNzIsIDcwLCAxLCAKLQk3Mywg
NzQsIDc1LCA3MywgMSwgNzYsIDEsIDc3LCAKLQk3OCwgNzcsIDEsIDc4LCAxLCAxLCA3OCwgNzks
IAotCTgwLCA4MSwgODIsIDgwLCAxLCA4MywgODQsIDc1LCAKLQk4MywgMSwgODQsIDc0LCA4NCwg
MSwgODUsIDg2LCAKLQk4NiwgMSwgMSwgMSwgMSwgMAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIg
X2pzb25fdHJhbnNfdGFyZ3NbXSA9IHsKLQkxLCAwLCAyLCAzLCA0LCA1NiwgMywgNCwgCi0JNTYs
IDUsIDUsIDYsIDcsIDgsIDksIDU2LCAKLQk4LCA5LCAxMSwgMTIsIDE4LCA1NywgMTMsIDE1LCAK
LQkxNCwgMTYsIDE3LCAyMCwgNTgsIDIxLCAyMCwgNTgsIAotCTIxLCAxOSwgMjIsIDIzLCAyNCwg
MjUsIDI2LCAyMCwgCi0JNTgsIDIxLCAyOCwgMzAsIDMxLCAzNCwgMzksIDQzLCAKLQk0NywgMjks
IDU5LCA1OSwgMzIsIDMxLCAyOSwgMzIsIAotCTMzLCAzNSwgMzYsIDM3LCAzOCwgNTksIDQwLCA0
MSwgCi0JNDIsIDU5LCA0NCwgNDUsIDQ2LCA1OSwgNDgsIDQ5LCAKLQk1NSwgNDgsIDQ5LCA1NSwg
NTAsIDUwLCA1MSwgNTIsIAotCTUzLCA1NCwgNTUsIDUzLCA1NCwgNTksIDU2Ci19OwotCi1zdGF0
aWMgY29uc3QgY2hhciBfanNvbl90cmFuc19hY3Rpb25zW10gPSB7Ci0JMCwgMCwgMCwgMjEsIDc3
LCA1MywgMCwgNDcsIAotCTIzLCAxNywgMCwgMCwgMTUsIDE5LCAxOSwgNTAsIAotCTAsIDAsIDAs
IDAsIDAsIDEsIDAsIDAsIAotCTAsIDAsIDAsIDMsIDEzLCAwLCAwLCAzNSwgCi0JNSwgMTEsIDAs
IDM4LCA3LCA3LCA3LCA0MSwgCi0JNDQsIDksIDYyLCA1NiwgMjUsIDAsIDAsIDAsIAotCTMxLCAy
OSwgMzMsIDU5LCAxNSwgMCwgMjcsIDAsIAotCTAsIDAsIDAsIDAsIDAsIDY4LCAwLCAwLCAKLQkw
LCA3MSwgMCwgMCwgMCwgNjUsIDIxLCA3NywgCi0JNTMsIDAsIDQ3LCAyMywgMTcsIDAsIDAsIDE1
LCAKLQkxOSwgMTksIDUwLCAwLCAwLCA3NCwgMAotfTsKLQotc3RhdGljIGNvbnN0IGludCBqc29u
X3N0YXJ0ID0gMTsKLQotc3RhdGljIGNvbnN0IGludCBqc29uX2VuX251bWJlcl9tYWNoaW5lID0g
MTA7Ci1zdGF0aWMgY29uc3QgaW50IGpzb25fZW5fc3RyaW5nX21hY2hpbmUgPSAxOTsKLXN0YXRp
YyBjb25zdCBpbnQganNvbl9lbl92YWx1ZV9tYWNoaW5lID0gMjc7Ci1zdGF0aWMgY29uc3QgaW50
IGpzb25fZW5fbWFpbiA9IDE7Ci0KLQotI2xpbmUgMTIyMSAidXBiL2pzb24vcGFyc2VyLnJsIgot
Ci1zaXplX3QgcGFyc2Uodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIg
KmJ1Ziwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFu
ZGxlKSB7Ci0gIHVwYl9qc29uX3BhcnNlciAqcGFyc2VyID0gY2xvc3VyZTsKLQotICAvKiBWYXJp
YWJsZXMgdXNlZCBieSBSYWdlbCdzIGdlbmVyYXRlZCBjb2RlLiAqLwotICBpbnQgY3MgPSBwYXJz
ZXItPmN1cnJlbnRfc3RhdGU7Ci0gIGludCAqc3RhY2sgPSBwYXJzZXItPnBhcnNlcl9zdGFjazsK
LSAgaW50IHRvcCA9IHBhcnNlci0+cGFyc2VyX3RvcDsKLQotICBjb25zdCBjaGFyICpwID0gYnVm
OwotICBjb25zdCBjaGFyICpwZSA9IGJ1ZiArIHNpemU7Ci0KLSAgcGFyc2VyLT5oYW5kbGUgPSBo
YW5kbGU7Ci0KLSAgVVBCX1VOVVNFRChoZCk7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlKTsKLQotICBj
YXB0dXJlX3Jlc3VtZShwYXJzZXIsIGJ1Zik7Ci0KLSAgCi0jbGluZSAxMzAxICJ1cGIvanNvbi9w
YXJzZXIuYyIKLQl7Ci0JaW50IF9rbGVuOwotCXVuc2lnbmVkIGludCBfdHJhbnM7Ci0JY29uc3Qg
Y2hhciAqX2FjdHM7Ci0JdW5zaWduZWQgaW50IF9uYWN0czsKLQljb25zdCBjaGFyICpfa2V5czsK
LQotCWlmICggcCA9PSBwZSApCi0JCWdvdG8gX3Rlc3RfZW9mOwotCWlmICggY3MgPT0gMCApCi0J
CWdvdG8gX291dDsKLV9yZXN1bWU6Ci0JX2tleXMgPSBfanNvbl90cmFuc19rZXlzICsgX2pzb25f
a2V5X29mZnNldHNbY3NdOwotCV90cmFucyA9IF9qc29uX2luZGV4X29mZnNldHNbY3NdOwotCi0J
X2tsZW4gPSBfanNvbl9zaW5nbGVfbGVuZ3Roc1tjc107Ci0JaWYgKCBfa2xlbiA+IDAgKSB7Ci0J
CWNvbnN0IGNoYXIgKl9sb3dlciA9IF9rZXlzOwotCQljb25zdCBjaGFyICpfbWlkOwotCQljb25z
dCBjaGFyICpfdXBwZXIgPSBfa2V5cyArIF9rbGVuIC0gMTsKLQkJd2hpbGUgKDEpIHsKLQkJCWlm
ICggX3VwcGVyIDwgX2xvd2VyICkKLQkJCQlicmVhazsKLQotCQkJX21pZCA9IF9sb3dlciArICgo
X3VwcGVyLV9sb3dlcikgPj4gMSk7Ci0JCQlpZiAoICgqcCkgPCAqX21pZCApCi0JCQkJX3VwcGVy
ID0gX21pZCAtIDE7Ci0JCQllbHNlIGlmICggKCpwKSA+ICpfbWlkICkKLQkJCQlfbG93ZXIgPSBf
bWlkICsgMTsKLQkJCWVsc2UgewotCQkJCV90cmFucyArPSAodW5zaWduZWQgaW50KShfbWlkIC0g
X2tleXMpOwotCQkJCWdvdG8gX21hdGNoOwotCQkJfQotCQl9Ci0JCV9rZXlzICs9IF9rbGVuOwot
CQlfdHJhbnMgKz0gX2tsZW47Ci0JfQotCi0JX2tsZW4gPSBfanNvbl9yYW5nZV9sZW5ndGhzW2Nz
XTsKLQlpZiAoIF9rbGVuID4gMCApIHsKLQkJY29uc3QgY2hhciAqX2xvd2VyID0gX2tleXM7Ci0J
CWNvbnN0IGNoYXIgKl9taWQ7Ci0JCWNvbnN0IGNoYXIgKl91cHBlciA9IF9rZXlzICsgKF9rbGVu
PDwxKSAtIDI7Ci0JCXdoaWxlICgxKSB7Ci0JCQlpZiAoIF91cHBlciA8IF9sb3dlciApCi0JCQkJ
YnJlYWs7Ci0KLQkJCV9taWQgPSBfbG93ZXIgKyAoKChfdXBwZXItX2xvd2VyKSA+PiAxKSAmIH4x
KTsKLQkJCWlmICggKCpwKSA8IF9taWRbMF0gKQotCQkJCV91cHBlciA9IF9taWQgLSAyOwotCQkJ
ZWxzZSBpZiAoICgqcCkgPiBfbWlkWzFdICkKLQkJCQlfbG93ZXIgPSBfbWlkICsgMjsKLQkJCWVs
c2UgewotCQkJCV90cmFucyArPSAodW5zaWduZWQgaW50KSgoX21pZCAtIF9rZXlzKT4+MSk7Ci0J
CQkJZ290byBfbWF0Y2g7Ci0JCQl9Ci0JCX0KLQkJX3RyYW5zICs9IF9rbGVuOwotCX0KLQotX21h
dGNoOgotCV90cmFucyA9IF9qc29uX2luZGljaWVzW190cmFuc107Ci0JY3MgPSBfanNvbl90cmFu
c190YXJnc1tfdHJhbnNdOwotCi0JaWYgKCBfanNvbl90cmFuc19hY3Rpb25zW190cmFuc10gPT0g
MCApCi0JCWdvdG8gX2FnYWluOwotCi0JX2FjdHMgPSBfanNvbl9hY3Rpb25zICsgX2pzb25fdHJh
bnNfYWN0aW9uc1tfdHJhbnNdOwotCV9uYWN0cyA9ICh1bnNpZ25lZCBpbnQpICpfYWN0cysrOwot
CXdoaWxlICggX25hY3RzLS0gPiAwICkKLQl7Ci0JCXN3aXRjaCAoICpfYWN0cysrICkKLQkJewot
CWNhc2UgMDoKLSNsaW5lIDExMzMgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IHAtLTsge2NzID0g
c3RhY2tbLS10b3BdOyBnb3RvIF9hZ2Fpbjt9IH0KLQlicmVhazsKLQljYXNlIDE6Ci0jbGluZSAx
MTM0ICJ1cGIvanNvbi9wYXJzZXIucmwiCi0JeyBwLS07IHtzdGFja1t0b3ArK10gPSBjczsgY3Mg
PSAxMDsgZ290byBfYWdhaW47fSB9Ci0JYnJlYWs7Ci0JY2FzZSAyOgotI2xpbmUgMTEzOCAidXBi
L2pzb24vcGFyc2VyLnJsIgotCXsgc3RhcnRfdGV4dChwYXJzZXIsIHApOyB9Ci0JYnJlYWs7Ci0J
Y2FzZSAzOgotI2xpbmUgMTEzOSAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgQ0hFQ0tfUkVUVVJO
X1RPUChlbmRfdGV4dChwYXJzZXIsIHApKTsgfQotCWJyZWFrOwotCWNhc2UgNDoKLSNsaW5lIDEx
NDUgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IHN0YXJ0X2hleChwYXJzZXIpOyB9Ci0JYnJlYWs7
Ci0JY2FzZSA1OgotI2xpbmUgMTE0NiAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgaGV4ZGlnaXQo
cGFyc2VyLCBwKTsgfQotCWJyZWFrOwotCWNhc2UgNjoKLSNsaW5lIDExNDcgInVwYi9qc29uL3Bh
cnNlci5ybCIKLQl7IENIRUNLX1JFVFVSTl9UT1AoZW5kX2hleChwYXJzZXIpKTsgfQotCWJyZWFr
OwotCWNhc2UgNzoKLSNsaW5lIDExNTMgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IENIRUNLX1JF
VFVSTl9UT1AoZXNjYXBlKHBhcnNlciwgcCkpOyB9Ci0JYnJlYWs7Ci0JY2FzZSA4OgotI2xpbmUg
MTE1OSAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgcC0tOyB7Y3MgPSBzdGFja1stLXRvcF07IGdv
dG8gX2FnYWluO30gfQotCWJyZWFrOwotCWNhc2UgOToKLSNsaW5lIDExNjIgInVwYi9qc29uL3Bh
cnNlci5ybCIKLQl7IHtzdGFja1t0b3ArK10gPSBjczsgY3MgPSAxOTsgZ290byBfYWdhaW47fSB9
Ci0JYnJlYWs7Ci0JY2FzZSAxMDoKLSNsaW5lIDExNjQgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7
IHAtLTsge3N0YWNrW3RvcCsrXSA9IGNzOyBjcyA9IDI3OyBnb3RvIF9hZ2Fpbjt9IH0KLQlicmVh
azsKLQljYXNlIDExOgotI2xpbmUgMTE2OSAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgc3RhcnRf
bWVtYmVyKHBhcnNlcik7IH0KLQlicmVhazsKLQljYXNlIDEyOgotI2xpbmUgMTE3MCAidXBiL2pz
b24vcGFyc2VyLnJsIgotCXsgQ0hFQ0tfUkVUVVJOX1RPUChlbmRfbWVtYmVybmFtZShwYXJzZXIp
KTsgfQotCWJyZWFrOwotCWNhc2UgMTM6Ci0jbGluZSAxMTczICJ1cGIvanNvbi9wYXJzZXIucmwi
Ci0JeyBlbmRfbWVtYmVyKHBhcnNlcik7IH0KLQlicmVhazsKLQljYXNlIDE0OgotI2xpbmUgMTE3
OSAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgc3RhcnRfb2JqZWN0KHBhcnNlcik7IH0KLQlicmVh
azsKLQljYXNlIDE1OgotI2xpbmUgMTE4MiAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgZW5kX29i
amVjdChwYXJzZXIpOyB9Ci0JYnJlYWs7Ci0JY2FzZSAxNjoKLSNsaW5lIDExODggInVwYi9qc29u
L3BhcnNlci5ybCIKLQl7IENIRUNLX1JFVFVSTl9UT1Aoc3RhcnRfYXJyYXkocGFyc2VyKSk7IH0K
LQlicmVhazsKLQljYXNlIDE3OgotI2xpbmUgMTE5MiAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsg
ZW5kX2FycmF5KHBhcnNlcik7IH0KLQlicmVhazsKLQljYXNlIDE4OgotI2xpbmUgMTE5NyAidXBi
L2pzb24vcGFyc2VyLnJsIgotCXsgc3RhcnRfbnVtYmVyKHBhcnNlciwgcCk7IH0KLQlicmVhazsK
LQljYXNlIDE5OgotI2xpbmUgMTE5OCAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgQ0hFQ0tfUkVU
VVJOX1RPUChlbmRfbnVtYmVyKHBhcnNlciwgcCkpOyB9Ci0JYnJlYWs7Ci0JY2FzZSAyMDoKLSNs
aW5lIDEyMDAgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IENIRUNLX1JFVFVSTl9UT1Aoc3RhcnRf
c3RyaW5ndmFsKHBhcnNlcikpOyB9Ci0JYnJlYWs7Ci0JY2FzZSAyMToKLSNsaW5lIDEyMDEgInVw
Yi9qc29uL3BhcnNlci5ybCIKLQl7IENIRUNLX1JFVFVSTl9UT1AoZW5kX3N0cmluZ3ZhbChwYXJz
ZXIpKTsgfQotCWJyZWFrOwotCWNhc2UgMjI6Ci0jbGluZSAxMjAzICJ1cGIvanNvbi9wYXJzZXIu
cmwiCi0JeyBDSEVDS19SRVRVUk5fVE9QKHBhcnNlcl9wdXRib29sKHBhcnNlciwgdHJ1ZSkpOyB9
Ci0JYnJlYWs7Ci0JY2FzZSAyMzoKLSNsaW5lIDEyMDUgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7
IENIRUNLX1JFVFVSTl9UT1AocGFyc2VyX3B1dGJvb2wocGFyc2VyLCBmYWxzZSkpOyB9Ci0JYnJl
YWs7Ci0JY2FzZSAyNDoKLSNsaW5lIDEyMDcgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IC8qIG51
bGwgdmFsdWUgKi8gfQotCWJyZWFrOwotCWNhc2UgMjU6Ci0jbGluZSAxMjA5ICJ1cGIvanNvbi9w
YXJzZXIucmwiCi0JeyBDSEVDS19SRVRVUk5fVE9QKHN0YXJ0X3N1Ym9iamVjdChwYXJzZXIpKTsg
fQotCWJyZWFrOwotCWNhc2UgMjY6Ci0jbGluZSAxMjEwICJ1cGIvanNvbi9wYXJzZXIucmwiCi0J
eyBlbmRfc3Vib2JqZWN0KHBhcnNlcik7IH0KLQlicmVhazsKLQljYXNlIDI3OgotI2xpbmUgMTIx
NSAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgcC0tOyB7Y3MgPSBzdGFja1stLXRvcF07IGdvdG8g
X2FnYWluO30gfQotCWJyZWFrOwotI2xpbmUgMTQ4NyAidXBiL2pzb24vcGFyc2VyLmMiCi0JCX0K
LQl9Ci0KLV9hZ2FpbjoKLQlpZiAoIGNzID09IDAgKQotCQlnb3RvIF9vdXQ7Ci0JaWYgKCArK3Ag
IT0gcGUgKQotCQlnb3RvIF9yZXN1bWU7Ci0JX3Rlc3RfZW9mOiB7fQotCV9vdXQ6IHt9Ci0JfQot
Ci0jbGluZSAxMjQyICJ1cGIvanNvbi9wYXJzZXIucmwiCi0KLSAgaWYgKHAgIT0gcGUpIHsKLSAg
ICB1cGJfc3RhdHVzX3NldGVycmYoJnBhcnNlci0+c3RhdHVzLCAiUGFyc2UgZXJyb3IgYXQgJXNc
biIsIHApOwotICAgIHVwYl9lbnZfcmVwb3J0ZXJyb3IocGFyc2VyLT5lbnYsICZwYXJzZXItPnN0
YXR1cyk7Ci0gIH0gZWxzZSB7Ci0gICAgY2FwdHVyZV9zdXNwZW5kKHBhcnNlciwgJnApOwotICB9
Ci0KLWVycm9yOgotICAvKiBTYXZlIHBhcnNpbmcgc3RhdGUgYmFjayB0byBwYXJzZXIuICovCi0g
IHBhcnNlci0+Y3VycmVudF9zdGF0ZSA9IGNzOwotICBwYXJzZXItPnBhcnNlcl90b3AgPSB0b3A7
Ci0KLSAgcmV0dXJuIHAgLSBidWY7Ci19Ci0KLWJvb2wgZW5kKHZvaWQgKmNsb3N1cmUsIGNvbnN0
IHZvaWQgKmhkKSB7Ci0gIFVQQl9VTlVTRUQoY2xvc3VyZSk7Ci0gIFVQQl9VTlVTRUQoaGQpOwot
Ci0gIC8qIFByZXZlbnQgY29tcGlsZSB3YXJuaW5nIG9uIHVudXNlZCBzdGF0aWMgY29uc3RhbnRz
LiAqLwotICBVUEJfVU5VU0VEKGpzb25fc3RhcnQpOwotICBVUEJfVU5VU0VEKGpzb25fZW5fbnVt
YmVyX21hY2hpbmUpOwotICBVUEJfVU5VU0VEKGpzb25fZW5fc3RyaW5nX21hY2hpbmUpOwotICBV
UEJfVU5VU0VEKGpzb25fZW5fdmFsdWVfbWFjaGluZSk7Ci0gIFVQQl9VTlVTRUQoanNvbl9lbl9t
YWluKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGpzb25fcGFyc2VyX3Jlc2V0
KHVwYl9qc29uX3BhcnNlciAqcCkgewotICBpbnQgY3M7Ci0gIGludCB0b3A7Ci0KLSAgcC0+dG9w
ID0gcC0+c3RhY2s7Ci0gIHAtPnRvcC0+ZiA9IE5VTEw7Ci0gIHAtPnRvcC0+aXNfbWFwID0gZmFs
c2U7Ci0gIHAtPnRvcC0+aXNfbWFwZW50cnkgPSBmYWxzZTsKLQotICAvKiBFbWl0IFJhZ2VsIGlu
aXRpYWxpemF0aW9uIG9mIHRoZSBwYXJzZXIuICovCi0gIAotI2xpbmUgMTU0MSAidXBiL2pzb24v
cGFyc2VyLmMiCi0JewotCWNzID0ganNvbl9zdGFydDsKLQl0b3AgPSAwOwotCX0KLQotI2xpbmUg
MTI4MiAidXBiL2pzb24vcGFyc2VyLnJsIgotICBwLT5jdXJyZW50X3N0YXRlID0gY3M7Ci0gIHAt
PnBhcnNlcl90b3AgPSB0b3A7Ci0gIGFjY3VtdWxhdGVfY2xlYXIocCk7Ci0gIHAtPm11bHRpcGFy
dF9zdGF0ZSA9IE1VTFRJUEFSVF9JTkFDVElWRTsKLSAgcC0+Y2FwdHVyZSA9IE5VTEw7Ci0gIHAt
PmFjY3VtdWxhdGVkID0gTlVMTDsKLSAgdXBiX3N0YXR1c19jbGVhcigmcC0+c3RhdHVzKTsKLX0K
LQotCi0vKiBQdWJsaWMgQVBJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi11cGJfanNvbl9wYXJzZXIgKnVwYl9qc29u
X3BhcnNlcl9jcmVhdGUodXBiX2VudiAqZW52LCB1cGJfc2luayAqb3V0cHV0KSB7Ci0jaWZuZGVm
IE5ERUJVRwotICBjb25zdCBzaXplX3Qgc2l6ZV9iZWZvcmUgPSB1cGJfZW52X2J5dGVzYWxsb2Nh
dGVkKGVudik7Ci0jZW5kaWYKLSAgdXBiX2pzb25fcGFyc2VyICpwID0gdXBiX2Vudl9tYWxsb2Mo
ZW52LCBzaXplb2YodXBiX2pzb25fcGFyc2VyKSk7Ci0gIGlmICghcCkgcmV0dXJuIGZhbHNlOwot
Ci0gIHAtPmVudiA9IGVudjsKLSAgcC0+bGltaXQgPSBwLT5zdGFjayArIFVQQl9KU09OX01BWF9E
RVBUSDsKLSAgcC0+YWNjdW11bGF0ZV9idWYgPSBOVUxMOwotICBwLT5hY2N1bXVsYXRlX2J1Zl9z
aXplID0gMDsKLSAgdXBiX2J5dGVzaGFuZGxlcl9pbml0KCZwLT5pbnB1dF9oYW5kbGVyXyk7Ci0g
IHVwYl9ieXRlc2hhbmRsZXJfc2V0c3RyaW5nKCZwLT5pbnB1dF9oYW5kbGVyXywgcGFyc2UsIE5V
TEwpOwotICB1cGJfYnl0ZXNoYW5kbGVyX3NldGVuZHN0cigmcC0+aW5wdXRfaGFuZGxlcl8sIGVu
ZCwgTlVMTCk7Ci0gIHVwYl9ieXRlc3NpbmtfcmVzZXQoJnAtPmlucHV0XywgJnAtPmlucHV0X2hh
bmRsZXJfLCBwKTsKLQotICBqc29uX3BhcnNlcl9yZXNldChwKTsKLSAgdXBiX3NpbmtfcmVzZXQo
JnAtPnRvcC0+c2luaywgb3V0cHV0LT5oYW5kbGVycywgb3V0cHV0LT5jbG9zdXJlKTsKLSAgcC0+
dG9wLT5tID0gdXBiX2hhbmRsZXJzX21zZ2RlZihvdXRwdXQtPmhhbmRsZXJzKTsKLQotICAvKiBJ
ZiB0aGlzIGZhaWxzLCB1bmNvbW1lbnQgYW5kIGluY3JlYXNlIHRoZSB2YWx1ZSBpbiBwYXJzZXIu
aC4gKi8KLSAgLyogZnByaW50ZihzdGRlcnIsICIlemRcbiIsIHVwYl9lbnZfYnl0ZXNhbGxvY2F0
ZWQoZW52KSAtIHNpemVfYmVmb3JlKTsgKi8KLSAgYXNzZXJ0KHVwYl9lbnZfYnl0ZXNhbGxvY2F0
ZWQoZW52KSAtIHNpemVfYmVmb3JlIDw9IFVQQl9KU09OX1BBUlNFUl9TSVpFKTsKLSAgcmV0dXJu
IHA7Ci19Ci0KLXVwYl9ieXRlc3NpbmsgKnVwYl9qc29uX3BhcnNlcl9pbnB1dCh1cGJfanNvbl9w
YXJzZXIgKnApIHsKLSAgcmV0dXJuICZwLT5pbnB1dF87Ci19Ci0vKgotKiogVGhpcyBjdXJyZW50
bHkgdXNlcyBzbnByaW50ZigpIHRvIGZvcm1hdCBwcmltaXRpdmVzLCBhbmQgY291bGQgYmUgb3B0
aW1pemVkCi0qKiBmdXJ0aGVyLgotKi8KLQotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQot
c3RydWN0IHVwYl9qc29uX3ByaW50ZXIgewotICB1cGJfc2luayBpbnB1dF87Ci0gIC8qIEJ5dGVz
U2luayBjbG9zdXJlLiAqLwotICB2b2lkICpzdWJjXzsKLSAgdXBiX2J5dGVzc2luayAqb3V0cHV0
XzsKLQotICAvKiBXZSB0cmFjayB0aGUgZGVwdGggc28gdGhhdCB3ZSBrbm93IHdoZW4gdG8gZW1p
dCBzdGFydHN0ci9lbmRzdHIgb24gdGhlCi0gICAqIG91dHB1dC4gKi8KLSAgaW50IGRlcHRoXzsK
LQotICAvKiBIYXZlIHdlIGVtaXR0ZWQgdGhlIGZpcnN0IGVsZW1lbnQ/IFRoaXMgc3RhdGUgaXMg
bmVjZXNzYXJ5IHRvIGVtaXQgY29tbWFzCi0gICAqIHdpdGhvdXQgbGVhdmluZyBhIHRyYWlsaW5n
IGNvbW1hIGluIGFycmF5cy9tYXBzLiBXZSBrZWVwIHRoaXMgc3RhdGUgcGVyCi0gICAqIGZyYW1l
IGRlcHRoLgotICAgKgotICAgKiBXaHkgbWF4X2RlcHRoICogMj8gVVBCX01BWF9IQU5ETEVSX0RF
UFRIIGNvdW50cyBkZXB0aCBhcyBuZXN0ZWQgbWVzc2FnZXMuCi0gICAqIFdlIGNvdW50IGZyYW1l
cyAoY29udGV4dHMgaW4gd2hpY2ggd2Ugc2VwYXJhdGUgZWxlbWVudHMgYnkgY29tbWFzKSBhcyBi
b3RoCi0gICAqIHJlcGVhdGVkIGZpZWxkcyBhbmQgbWVzc2FnZXMgKG1hcHMpLCBhbmQgdGhlIHdv
cnN0IGNhc2UgaXMgYQotICAgKiBtZXNzYWdlLT5yZXBlYXRlZCBmaWVsZC0+c3VibWVzc2FnZS0+
cmVwZWF0ZWQgZmllbGQtPi4uLiBuZXN0aW5nLiAqLwotICBib29sIGZpcnN0X2VsZW1fW1VQQl9N
QVhfSEFORExFUl9ERVBUSCAqIDJdOwotfTsKLQotLyogU3RyaW5nUGllY2U7IGEgcG9pbnRlciBw
bHVzIGEgbGVuZ3RoLiAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBjaGFyICpwdHI7Ci0g
IHNpemVfdCBsZW47Ci19IHN0cnBjOwotCi1zdHJwYyAqbmV3c3RycGModXBiX2hhbmRsZXJzICpo
LCBjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgc3RycGMgKnJldCA9IG1hbGxvYyhzaXplb2Yo
KnJldCkpOwotICByZXQtPnB0ciA9IHVwYl9maWVsZGRlZl9uYW1lKGYpOwotICByZXQtPmxlbiA9
IHN0cmxlbihyZXQtPnB0cik7Ci0gIHVwYl9oYW5kbGVyc19hZGRjbGVhbnVwKGgsIHJldCwgZnJl
ZSk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLSBKU09OIHN0cmluZyBwcmlu
dGluZzogdmFsdWVzLCBtYXBzLCBhcnJheXMgLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRp
YyB2b2lkIHByaW50X2RhdGEoCi0gICAgdXBiX2pzb25fcHJpbnRlciAqcCwgY29uc3QgY2hhciAq
YnVmLCB1bnNpZ25lZCBpbnQgbGVuKSB7Ci0gIC8qIFRPRE86IFdpbGwgbmVlZCB0byBjaGFuZ2Ug
aWYgd2Ugc3VwcG9ydCBwdXNoYmFjayBmcm9tIHRoZSBzaW5rLiAqLwotICBzaXplX3QgbiA9IHVw
Yl9ieXRlc3NpbmtfcHV0YnVmKHAtPm91dHB1dF8sIHAtPnN1YmNfLCBidWYsIGxlbiwgTlVMTCk7
Ci0gIFVQQl9BU1NFUlRfVkFSKG4sIG4gPT0gbGVuKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRf
Y29tbWEodXBiX2pzb25fcHJpbnRlciAqcCkgewotICBpZiAoIXAtPmZpcnN0X2VsZW1fW3AtPmRl
cHRoX10pIHsKLSAgICBwcmludF9kYXRhKHAsICIsIiwgMSk7Ci0gIH0KLSAgcC0+Zmlyc3RfZWxl
bV9bcC0+ZGVwdGhfXSA9IGZhbHNlOwotfQotCi0vKiBIZWxwZXJzIHRoYXQgcHJpbnQgcHJvcGVy
bHkgZm9ybWF0dGVkIGVsZW1lbnRzIHRvIHRoZSBKU09OIG91dHB1dCBzdHJlYW0uICovCi0KLS8q
IFVzZWQgZm9yIGVzY2FwaW5nIGNvbnRyb2wgY2hhcnMgaW4gc3RyaW5ncy4gKi8KLXN0YXRpYyBj
b25zdCBjaGFyIGtDb250cm9sQ2hhckxpbWl0ID0gMHgyMDsKLQotVVBCX0lOTElORSBib29sIGlz
X2pzb25fZXNjYXBlZChjaGFyIGMpIHsKLSAgLyogU2VlIFJGQyA0NjI3LiAqLwotICB1bnNpZ25l
ZCBjaGFyIHVjID0gKHVuc2lnbmVkIGNoYXIpYzsKLSAgcmV0dXJuIHVjIDwga0NvbnRyb2xDaGFy
TGltaXQgfHwgdWMgPT0gJyInIHx8IHVjID09ICdcXCc7Ci19Ci0KLVVQQl9JTkxJTkUgY2hhciog
anNvbl9uaWNlX2VzY2FwZShjaGFyIGMpIHsKLSAgc3dpdGNoIChjKSB7Ci0gICAgY2FzZSAnIic6
ICByZXR1cm4gIlxcXCIiOwotICAgIGNhc2UgJ1xcJzogcmV0dXJuICJcXFxcIjsKLSAgICBjYXNl
ICdcYic6IHJldHVybiAiXFxiIjsKLSAgICBjYXNlICdcZic6IHJldHVybiAiXFxmIjsKLSAgICBj
YXNlICdcbic6IHJldHVybiAiXFxuIjsKLSAgICBjYXNlICdccic6IHJldHVybiAiXFxyIjsKLSAg
ICBjYXNlICdcdCc6IHJldHVybiAiXFx0IjsKLSAgICBkZWZhdWx0OiAgIHJldHVybiBOVUxMOwot
ICB9Ci19Ci0KLS8qIFdyaXRlIGEgcHJvcGVybHkgZXNjYXBlZCBzdHJpbmcgY2h1bmsuIFRoZSBz
dXJyb3VuZGluZyBxdW90ZXMgYXJlICpub3QqCi0gKiBwcmludGVkOyB0aGlzIGlzIHNvIHRoYXQg
dGhlIGNhbGxlciBoYXMgdGhlIG9wdGlvbiBvZiBlbWl0dGluZyB0aGUgc3RyaW5nCi0gKiBjb250
ZW50IGluIGNodW5rcy4gKi8KLXN0YXRpYyB2b2lkIHB1dHN0cmluZyh1cGJfanNvbl9wcmludGVy
ICpwLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pIHsKLSAgY29uc3QgY2hhciog
dW5lc2NhcGVkX3J1biA9IE5VTEw7Ci0gIHVuc2lnbmVkIGludCBpOwotICBmb3IgKGkgPSAwOyBp
IDwgbGVuOyBpKyspIHsKLSAgICBjaGFyIGMgPSBidWZbaV07Ci0gICAgLyogSGFuZGxlIGVzY2Fw
aW5nLiAqLwotICAgIGlmIChpc19qc29uX2VzY2FwZWQoYykpIHsKLSAgICAgIC8qIFVzZSBhICJu
aWNlIiBlc2NhcGUsIGxpa2UgXG4sIGlmIG9uZSBleGlzdHMgZm9yIHRoaXMgY2hhcmFjdGVyLiAq
LwotICAgICAgY29uc3QgY2hhciogZXNjYXBlID0ganNvbl9uaWNlX2VzY2FwZShjKTsKLSAgICAg
IC8qIElmIHdlIGRvbid0IGhhdmUgYSBzcGVjaWZpYyAnbmljZScgZXNjYXBlIGNvZGUsIHVzZSBh
IFx1WFhYWC1zdHlsZQotICAgICAgICogZXNjYXBlLiAqLwotICAgICAgY2hhciBlc2NhcGVfYnVm
WzhdOwotICAgICAgaWYgKCFlc2NhcGUpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBieXRlID0g
KHVuc2lnbmVkIGNoYXIpYzsKLSAgICAgICAgX3VwYl9zbnByaW50Zihlc2NhcGVfYnVmLCBzaXpl
b2YoZXNjYXBlX2J1ZiksICJcXHUlMDR4IiwgKGludClieXRlKTsKLSAgICAgICAgZXNjYXBlID0g
ZXNjYXBlX2J1ZjsKLSAgICAgIH0KLQotICAgICAgLyogTi5CLiB0aGF0IHdlIGFzc3VtZSB0aGF0
IHRoZSBpbnB1dCBlbmNvZGluZyBpcyBlcXVhbCB0byB0aGUgb3V0cHV0Ci0gICAgICAgKiBlbmNv
ZGluZyAoYm90aCBVVEYtOCBmb3IgIG5vdyksIHNvIGZvciBjaGFycyA+PSAweDIwIGFuZCAhPSBc
LCAiLCB3ZQotICAgICAgICogY2FuIHNpbXBseSBwYXNzIHRoZSBieXRlcyB0aHJvdWdoLiAqLwot
Ci0gICAgICAvKiBJZiB0aGVyZSdzIGEgY3VycmVudCBydW4gb2YgdW5lc2NhcGVkIGNoYXJzLCBw
cmludCB0aGF0IHJ1biBmaXJzdC4gKi8KLSAgICAgIGlmICh1bmVzY2FwZWRfcnVuKSB7Ci0gICAg
ICAgIHByaW50X2RhdGEocCwgdW5lc2NhcGVkX3J1biwgJmJ1ZltpXSAtIHVuZXNjYXBlZF9ydW4p
OwotICAgICAgICB1bmVzY2FwZWRfcnVuID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIC8qIFRoZW4g
cHJpbnQgdGhlIGVzY2FwZSBjb2RlLiAqLwotICAgICAgcHJpbnRfZGF0YShwLCBlc2NhcGUsIHN0
cmxlbihlc2NhcGUpKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogQWRkIHRvIHRoZSBjdXJyZW50
IHVuZXNjYXBlZCBydW4gb2YgY2hhcmFjdGVycy4gKi8KLSAgICAgIGlmICh1bmVzY2FwZWRfcnVu
ID09IE5VTEwpIHsKLSAgICAgICAgdW5lc2NhcGVkX3J1biA9ICZidWZbaV07Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgLyogSWYgdGhlIHN0cmluZyBlbmRlZCBpbiBhIHJ1biBvZiB1bmVzY2Fw
ZWQgY2hhcmFjdGVycywgcHJpbnQgdGhhdCBsYXN0IHJ1bi4gKi8KLSAgaWYgKHVuZXNjYXBlZF9y
dW4pIHsKLSAgICBwcmludF9kYXRhKHAsIHVuZXNjYXBlZF9ydW4sICZidWZbbGVuXSAtIHVuZXNj
YXBlZF9ydW4pOwotICB9Ci19Ci0KLSNkZWZpbmUgQ0hLTEVOR1RIKHgpIGlmICghKHgpKSByZXR1
cm4gLTE7Ci0KLS8qIEhlbHBlcnMgdGhhdCBmb3JtYXQgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGFj
Y29yZGluZyB0byBvdXIgY3VzdG9tIGZvcm1hdHMuCi0gKiBSaWdodCBub3cgd2UgdXNlICUuOGcg
YW5kICUuMTdnIGZvciBmbG9hdC9kb3VibGUsIHJlc3BlY3RpdmVseSwgdG8gbWF0Y2gKLSAqIHBy
b3RvMjo6dXRpbDo6SnNvbkZvcm1hdCdzIGRlZmF1bHRzLiAgTWF5IHdhbnQgdG8gY2hhbmdlIHRo
aXMgbGF0ZXIuICovCi0KLXN0YXRpYyBzaXplX3QgZm10X2RvdWJsZShkb3VibGUgdmFsLCBjaGFy
KiBidWYsIHNpemVfdCBsZW5ndGgpIHsKLSAgc2l6ZV90IG4gPSBfdXBiX3NucHJpbnRmKGJ1Ziwg
bGVuZ3RoLCAiJS4xN2ciLCB2YWwpOwotICBDSEtMRU5HVEgobiA+IDAgJiYgbiA8IGxlbmd0aCk7
Ci0gIHJldHVybiBuOwotfQotCi1zdGF0aWMgc2l6ZV90IGZtdF9mbG9hdChmbG9hdCB2YWwsIGNo
YXIqIGJ1Ziwgc2l6ZV90IGxlbmd0aCkgewotICBzaXplX3QgbiA9IF91cGJfc25wcmludGYoYnVm
LCBsZW5ndGgsICIlLjhnIiwgdmFsKTsKLSAgQ0hLTEVOR1RIKG4gPiAwICYmIG4gPCBsZW5ndGgp
OwotICByZXR1cm4gbjsKLX0KLQotc3RhdGljIHNpemVfdCBmbXRfYm9vbChib29sIHZhbCwgY2hh
ciogYnVmLCBzaXplX3QgbGVuZ3RoKSB7Ci0gIHNpemVfdCBuID0gX3VwYl9zbnByaW50ZihidWYs
IGxlbmd0aCwgIiVzIiwgKHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKLSAgQ0hLTEVOR1RIKG4g
PiAwICYmIG4gPCBsZW5ndGgpOwotICByZXR1cm4gbjsKLX0KLQotc3RhdGljIHNpemVfdCBmbXRf
aW50NjQobG9uZyB2YWwsIGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbmd0aCkgewotICBzaXplX3QgbiA9
IF91cGJfc25wcmludGYoYnVmLCBsZW5ndGgsICIlbGQiLCB2YWwpOwotICBDSEtMRU5HVEgobiA+
IDAgJiYgbiA8IGxlbmd0aCk7Ci0gIHJldHVybiBuOwotfQotCi1zdGF0aWMgc2l6ZV90IGZtdF91
aW50NjQodW5zaWduZWQgbG9uZyBsb25nIHZhbCwgY2hhciogYnVmLCBzaXplX3QgbGVuZ3RoKSB7
Ci0gIHNpemVfdCBuID0gX3VwYl9zbnByaW50ZihidWYsIGxlbmd0aCwgIiVsbHUiLCB2YWwpOwot
ICBDSEtMRU5HVEgobiA+IDAgJiYgbiA8IGxlbmd0aCk7Ci0gIHJldHVybiBuOwotfQotCi0vKiBQ
cmludCBhIG1hcCBrZXkgZ2l2ZW4gYSBmaWVsZCBuYW1lLiBDYWxsZWQgYnkgc2NhbGFyIGZpZWxk
IGhhbmRsZXJzIGFuZCBieQotICogc3RhcnRzZXEgZm9yIHJlcGVhdGVkIGZpZWxkcy4gKi8KLXN0
YXRpYyBib29sIHB1dGtleSh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEp
IHsKLSAgdXBiX2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIGNvbnN0IHN0cnBjICprZXkg
PSBoYW5kbGVyX2RhdGE7Ci0gIHByaW50X2NvbW1hKHApOwotICBwcmludF9kYXRhKHAsICJcIiIs
IDEpOwotICBwdXRzdHJpbmcocCwga2V5LT5wdHIsIGtleS0+bGVuKTsKLSAgcHJpbnRfZGF0YShw
LCAiXCI6IiwgMik7Ci0gIHJldHVybiB0cnVlOwotfQotCi0jZGVmaW5lIENIS0ZNVCh2YWwpIGlm
ICgodmFsKSA9PSAoc2l6ZV90KS0xKSByZXR1cm4gZmFsc2U7Ci0jZGVmaW5lIENISyh2YWwpICAg
IGlmICghKHZhbCkpIHJldHVybiBmYWxzZTsKLQotI2RlZmluZSBUWVBFX0hBTkRMRVJTKHR5cGUs
IGZtdF9mdW5jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0
YXRpYyBib29sIHB1dCMjdHlwZSh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2Rh
dGEsIHR5cGUgdmFsKSB7IFwKLSAgICB1cGJfanNvbl9wcmludGVyICpwID0gY2xvc3VyZTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNoYXIgZGF0YVs2
NF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgc2l6ZV90IGxlbmd0aCA9IGZtdF9mdW5jKHZhbCwgZGF0YSwgc2l6ZW9mKGRh
dGEpKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBVUEJfVU5VU0VEKGhhbmRsZXJfZGF0
YSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IENIS0ZNVChsZW5ndGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgcHJpbnRfZGF0YShwLCBkYXRhLCBsZW5ndGgpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gdHJ1
ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0YXRpYyBib29sIHNjYWxhcl8jI3R5
cGUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhLCAgICAgICAgIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIHZhbCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIENISyhwdXRrZXkoY2xvc3VyZSwgaGFuZGxlcl9kYXRh
KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ0hLKHB1dCMj
dHlwZShjbG9zdXJlLCBoYW5kbGVyX2RhdGEsIHZhbCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IHN0YXRpYyBib29sIHJlcGVhdGVkXyMjdHlwZSh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpo
YW5kbGVyX2RhdGEsICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
dmFsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHVwYl9qc29u
X3ByaW50ZXIgKnAgPSBjbG9zdXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgcHJpbnRfY29tbWEocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDSEsocHV0IyN0eXBlKGNsb3N1
cmUsIGhhbmRsZXJfZGF0YSwgdmFsKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBUWVBFX0hBTkRMRVJTX01BUEtF
WSh0eXBlLCBmbXRfZnVuYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0
YXRpYyBib29sIHB1dG1hcGtleV8jI3R5cGUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFu
ZGxlcl9kYXRhLCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIHZhbCkg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHVwYl9qc29uX3By
aW50ZXIgKnAgPSBjbG9zdXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgcHJpbnRfZGF0YShwLCAiXCIiLCAxKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDSEsocHV0IyN0eXBlKGNsb3N1cmUs
IGhhbmRsZXJfZGF0YSwgdmFsKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHByaW50X2RhdGEocCwgIlwiOiIsIDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi1UWVBFX0hB
TkRMRVJTKGRvdWJsZSwgICBmbXRfZG91YmxlKQotVFlQRV9IQU5ETEVSUyhmbG9hdCwgICAgZm10
X2Zsb2F0KQotVFlQRV9IQU5ETEVSUyhib29sLCAgICAgZm10X2Jvb2wpCi1UWVBFX0hBTkRMRVJT
KGludDMyX3QsICBmbXRfaW50NjQpCi1UWVBFX0hBTkRMRVJTKHVpbnQzMl90LCBmbXRfaW50NjQp
Ci1UWVBFX0hBTkRMRVJTKGludDY0X3QsICBmbXRfaW50NjQpCi1UWVBFX0hBTkRMRVJTKHVpbnQ2
NF90LCBmbXRfdWludDY0KQotCi0vKiBkb3VibGUgYW5kIGZsb2F0IGFyZSBub3QgYWxsb3dlZCB0
byBiZSBtYXAga2V5cy4gKi8KLVRZUEVfSEFORExFUlNfTUFQS0VZKGJvb2wsICAgICBmbXRfYm9v
bCkKLVRZUEVfSEFORExFUlNfTUFQS0VZKGludDMyX3QsICBmbXRfaW50NjQpCi1UWVBFX0hBTkRM
RVJTX01BUEtFWSh1aW50MzJfdCwgZm10X2ludDY0KQotVFlQRV9IQU5ETEVSU19NQVBLRVkoaW50
NjRfdCwgIGZtdF9pbnQ2NCkKLVRZUEVfSEFORExFUlNfTUFQS0VZKHVpbnQ2NF90LCBmbXRfdWlu
dDY0KQotCi0jdW5kZWYgVFlQRV9IQU5ETEVSUwotI3VuZGVmIFRZUEVfSEFORExFUlNfTUFQS0VZ
Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdm9pZCAqa2V5bmFtZTsKLSAgY29uc3QgdXBiX2VudW1k
ZWYgKmVudW1kZWY7Ci19IEVudW1IYW5kbGVyRGF0YTsKLQotc3RhdGljIGJvb2wgc2NhbGFyX2Vu
dW0odm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCB2YWwpIHsKLSAgY29uc3QgRW51bUhhbmRsZXJEYXRhICpoZCA9
IGhhbmRsZXJfZGF0YTsKLSAgdXBiX2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIGNvbnN0
IGNoYXIgKnN5bWJvbGljX25hbWU7Ci0KLSAgQ0hLKHB1dGtleShjbG9zdXJlLCBoZC0+a2V5bmFt
ZSkpOwotCi0gIHN5bWJvbGljX25hbWUgPSB1cGJfZW51bWRlZl9pdG9uKGhkLT5lbnVtZGVmLCB2
YWwpOwotICBpZiAoc3ltYm9saWNfbmFtZSkgewotICAgIHByaW50X2RhdGEocCwgIlwiIiwgMSk7
Ci0gICAgcHV0c3RyaW5nKHAsIHN5bWJvbGljX25hbWUsIHN0cmxlbihzeW1ib2xpY19uYW1lKSk7
Ci0gICAgcHJpbnRfZGF0YShwLCAiXCIiLCAxKTsKLSAgfSBlbHNlIHsKLSAgICBwdXRpbnQzMl90
KGNsb3N1cmUsIE5VTEwsIHZhbCk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IHZvaWQgcHJpbnRfZW51bV9zeW1ib2xpY19uYW1lKHVwYl9qc29uX3ByaW50ZXIgKnAsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX2VudW1kZWYgKmRlZiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHZhbCkgewotICBj
b25zdCBjaGFyICpzeW1ib2xpY19uYW1lID0gdXBiX2VudW1kZWZfaXRvbihkZWYsIHZhbCk7Ci0g
IGlmIChzeW1ib2xpY19uYW1lKSB7Ci0gICAgcHJpbnRfZGF0YShwLCAiXCIiLCAxKTsKLSAgICBw
dXRzdHJpbmcocCwgc3ltYm9saWNfbmFtZSwgc3RybGVuKHN5bWJvbGljX25hbWUpKTsKLSAgICBw
cmludF9kYXRhKHAsICJcIiIsIDEpOwotICB9IGVsc2UgewotICAgIHB1dGludDMyX3QocCwgTlVM
TCwgdmFsKTsKLSAgfQotfQotCi1zdGF0aWMgYm9vbCByZXBlYXRlZF9lbnVtKHZvaWQgKmNsb3N1
cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCB2YWwpIHsKLSAgY29uc3QgRW51bUhhbmRsZXJEYXRhICpoZCA9IGhhbmRsZXJfZGF0
YTsKLSAgdXBiX2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIHByaW50X2NvbW1hKHApOwot
Ci0gIHByaW50X2VudW1fc3ltYm9saWNfbmFtZShwLCBoZC0+ZW51bWRlZiwgdmFsKTsKLQotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgbWFwdmFsdWVfZW51bSh2b2lkICpjbG9zdXJl
LCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgdmFsKSB7Ci0gIGNvbnN0IEVudW1IYW5kbGVyRGF0YSAqaGQgPSBoYW5kbGVyX2RhdGE7
Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotCi0gIHByaW50X2VudW1fc3ltYm9s
aWNfbmFtZShwLCBoZC0+ZW51bWRlZiwgdmFsKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh
dGljIHZvaWQgKnNjYWxhcl9zdGFydHN1Ym1zZyh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpo
YW5kbGVyX2RhdGEpIHsKLSAgcmV0dXJuIHB1dGtleShjbG9zdXJlLCBoYW5kbGVyX2RhdGEpID8g
Y2xvc3VyZSA6IFVQQl9CUkVBSzsKLX0KLQotc3RhdGljIHZvaWQgKnJlcGVhdGVkX3N0YXJ0c3Vi
bXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSkgewotICB1cGJfanNv
bl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoYW5kbGVyX2RhdGEpOwotICBw
cmludF9jb21tYShwKTsKLSAgcmV0dXJuIGNsb3N1cmU7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0
X2ZyYW1lKHVwYl9qc29uX3ByaW50ZXIgKnApIHsKLSAgcC0+ZGVwdGhfKys7Ci0gIHAtPmZpcnN0
X2VsZW1fW3AtPmRlcHRoX10gPSB0cnVlOwotICBwcmludF9kYXRhKHAsICJ7IiwgMSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGVuZF9mcmFtZSh1cGJfanNvbl9wcmludGVyICpwKSB7Ci0gIHByaW50X2Rh
dGEocCwgIn0iLCAxKTsKLSAgcC0+ZGVwdGhfLS07Ci19Ci0KLXN0YXRpYyBib29sIHByaW50ZXJf
c3RhcnRtc2codm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhKSB7Ci0gIHVw
Yl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhhbmRsZXJfZGF0YSk7
Ci0gIGlmIChwLT5kZXB0aF8gPT0gMCkgewotICAgIHVwYl9ieXRlc3Npbmtfc3RhcnQocC0+b3V0
cHV0XywgMCwgJnAtPnN1YmNfKTsKLSAgfQotICBzdGFydF9mcmFtZShwKTsKLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBib29sIHByaW50ZXJfZW5kbXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0
IHZvaWQgKmhhbmRsZXJfZGF0YSwgdXBiX3N0YXR1cyAqcykgewotICB1cGJfanNvbl9wcmludGVy
ICpwID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoYW5kbGVyX2RhdGEpOwotICBVUEJfVU5VU0VE
KHMpOwotICBlbmRfZnJhbWUocCk7Ci0gIGlmIChwLT5kZXB0aF8gPT0gMCkgewotICAgIHVwYl9i
eXRlc3NpbmtfZW5kKHAtPm91dHB1dF8pOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgdm9pZCAqc3RhcnRzZXEodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRh
KSB7Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBDSEsocHV0a2V5KGNsb3N1
cmUsIGhhbmRsZXJfZGF0YSkpOwotICBwLT5kZXB0aF8rKzsKLSAgcC0+Zmlyc3RfZWxlbV9bcC0+
ZGVwdGhfXSA9IHRydWU7Ci0gIHByaW50X2RhdGEocCwgIlsiLCAxKTsKLSAgcmV0dXJuIGNsb3N1
cmU7Ci19Ci0KLXN0YXRpYyBib29sIGVuZHNlcSh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpo
YW5kbGVyX2RhdGEpIHsKLSAgdXBiX2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9V
TlVTRUQoaGFuZGxlcl9kYXRhKTsKLSAgcHJpbnRfZGF0YShwLCAiXSIsIDEpOwotICBwLT5kZXB0
aF8tLTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkICpzdGFydG1hcCh2b2lkICpj
bG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEpIHsKLSAgdXBiX2pzb25fcHJpbnRlciAq
cCA9IGNsb3N1cmU7Ci0gIENISyhwdXRrZXkoY2xvc3VyZSwgaGFuZGxlcl9kYXRhKSk7Ci0gIHAt
PmRlcHRoXysrOwotICBwLT5maXJzdF9lbGVtX1twLT5kZXB0aF9dID0gdHJ1ZTsKLSAgcHJpbnRf
ZGF0YShwLCAieyIsIDEpOwotICByZXR1cm4gY2xvc3VyZTsKLX0KLQotc3RhdGljIGJvb2wgZW5k
bWFwKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSkgewotICB1cGJfanNv
bl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoYW5kbGVyX2RhdGEpOwotICBw
cmludF9kYXRhKHAsICJ9IiwgMSk7Ci0gIHAtPmRlcHRoXy0tOwotICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIHNpemVfdCBwdXRzdHIodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxl
cl9kYXRhLCBjb25zdCBjaGFyICpzdHIsCi0gICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVu
LCBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgdXBiX2pzb25fcHJpbnRlciAqcCA9
IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlcl9kYXRhKTsKLSAgVVBCX1VOVVNFRChoYW5k
bGUpOwotICBwdXRzdHJpbmcocCwgc3RyLCBsZW4pOwotICByZXR1cm4gbGVuOwotfQotCi0vKiBU
aGlzIGhhcyB0byBCYXNlNjQgZW5jb2RlIHRoZSBieXRlcywgYmVjYXVzZSBKU09OIGhhcyBubyAi
Ynl0ZXMiIHR5cGUuICovCi1zdGF0aWMgc2l6ZV90IHB1dGJ5dGVzKHZvaWQgKmNsb3N1cmUsIGNv
bnN0IHZvaWQgKmhhbmRsZXJfZGF0YSwgY29uc3QgY2hhciAqc3RyLAotICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgbGVuLCBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgdXBi
X2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0KLSAgLyogVGhpcyBpcyB0aGUgcmVndWxhciBi
YXNlNjQsIG5vdCB0aGUgIndlYi1zYWZlIiB2ZXJzaW9uLiAqLwotICBzdGF0aWMgY29uc3QgY2hh
ciBiYXNlNjRbXSA9Ci0gICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlq
a2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7Ci0KLSAgLyogQmFzZTY0LWVuY29kZS4gKi8K
LSAgY2hhciBkYXRhWzE2MDAwXTsKLSAgY29uc3QgY2hhciAqbGltaXQgPSBkYXRhICsgc2l6ZW9m
KGRhdGEpOwotICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tID0gKGNvbnN0IHVuc2lnbmVkIGNo
YXIqKXN0cjsKLSAgY2hhciAqdG8gPSBkYXRhOwotICBzaXplX3QgcmVtYWluaW5nID0gbGVuOwot
ICBzaXplX3QgYnl0ZXM7Ci0KLSAgVVBCX1VOVVNFRChoYW5kbGVyX2RhdGEpOwotICBVUEJfVU5V
U0VEKGhhbmRsZSk7Ci0KLSAgd2hpbGUgKHJlbWFpbmluZyA+IDIpIHsKLSAgICAvKiBUT0RPKGhh
YmVybWFuKTogaGFuZGxlIGVuY29kZWQgbGVuZ3RocyA+IHNpemVvZihkYXRhKSAqLwotICAgIFVQ
Ql9BU1NFUlRfVkFSKGxpbWl0LCAobGltaXQgLSB0bykgPj0gNCk7Ci0KLSAgICB0b1swXSA9IGJh
c2U2NFtmcm9tWzBdID4+IDJdOwotICAgIHRvWzFdID0gYmFzZTY0WygoZnJvbVswXSAmIDB4Mykg
PDwgNCkgfCAoZnJvbVsxXSA+PiA0KV07Ci0gICAgdG9bMl0gPSBiYXNlNjRbKChmcm9tWzFdICYg
MHhmKSA8PCAyKSB8IChmcm9tWzJdID4+IDYpXTsKLSAgICB0b1szXSA9IGJhc2U2NFtmcm9tWzJd
ICYgMHgzZl07Ci0KLSAgICByZW1haW5pbmcgLT0gMzsKLSAgICB0byArPSA0OwotICAgIGZyb20g
Kz0gMzsKLSAgfQotCi0gIHN3aXRjaCAocmVtYWluaW5nKSB7Ci0gICAgY2FzZSAyOgotICAgICAg
dG9bMF0gPSBiYXNlNjRbZnJvbVswXSA+PiAyXTsKLSAgICAgIHRvWzFdID0gYmFzZTY0WygoZnJv
bVswXSAmIDB4MykgPDwgNCkgfCAoZnJvbVsxXSA+PiA0KV07Ci0gICAgICB0b1syXSA9IGJhc2U2
NFsoZnJvbVsxXSAmIDB4ZikgPDwgMl07Ci0gICAgICB0b1szXSA9ICc9JzsKLSAgICAgIHRvICs9
IDQ7Ci0gICAgICBmcm9tICs9IDI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICB0
b1swXSA9IGJhc2U2NFtmcm9tWzBdID4+IDJdOwotICAgICAgdG9bMV0gPSBiYXNlNjRbKChmcm9t
WzBdICYgMHgzKSA8PCA0KV07Ci0gICAgICB0b1syXSA9ICc9JzsKLSAgICAgIHRvWzNdID0gJz0n
OwotICAgICAgdG8gKz0gNDsKLSAgICAgIGZyb20gKz0gMTsKLSAgICAgIGJyZWFrOwotICB9Ci0K
LSAgYnl0ZXMgPSB0byAtIGRhdGE7Ci0gIHByaW50X2RhdGEocCwgIlwiIiwgMSk7Ci0gIHB1dHN0
cmluZyhwLCBkYXRhLCBieXRlcyk7Ci0gIHByaW50X2RhdGEocCwgIlwiIiwgMSk7Ci0gIHJldHVy
biBsZW47Ci19Ci0KLXN0YXRpYyB2b2lkICpzY2FsYXJfc3RhcnRzdHIodm9pZCAqY2xvc3VyZSwg
Y29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3Qgc2l6ZV9oaW50KSB7Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBV
UEJfVU5VU0VEKGhhbmRsZXJfZGF0YSk7Ci0gIFVQQl9VTlVTRUQoc2l6ZV9oaW50KTsKLSAgQ0hL
KHB1dGtleShjbG9zdXJlLCBoYW5kbGVyX2RhdGEpKTsKLSAgcHJpbnRfZGF0YShwLCAiXCIiLCAx
KTsKLSAgcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyBzaXplX3Qgc2NhbGFyX3N0cih2b2lkICpjbG9z
dXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICBDSEsocHV0c3RyKGNsb3N1cmUsIGhhbmRs
ZXJfZGF0YSwgc3RyLCBsZW4sIGhhbmRsZSkpOwotICByZXR1cm4gbGVuOwotfQotCi1zdGF0aWMg
Ym9vbCBzY2FsYXJfZW5kc3RyKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0
YSkgewotICB1cGJfanNvbl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoYW5k
bGVyX2RhdGEpOwotICBwcmludF9kYXRhKHAsICJcIiIsIDEpOwotICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIHZvaWQgKnJlcGVhdGVkX3N0YXJ0c3RyKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZv
aWQgKmhhbmRsZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
c2l6ZV9oaW50KSB7Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBVUEJfVU5V
U0VEKGhhbmRsZXJfZGF0YSk7Ci0gIFVQQl9VTlVTRUQoc2l6ZV9oaW50KTsKLSAgcHJpbnRfY29t
bWEocCk7Ci0gIHByaW50X2RhdGEocCwgIlwiIiwgMSk7Ci0gIHJldHVybiBwOwotfQotCi1zdGF0
aWMgc2l6ZV90IHJlcGVhdGVkX3N0cih2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVy
X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIsIHNpemVf
dCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfYnVmaGFuZGxlICpo
YW5kbGUpIHsKLSAgQ0hLKHB1dHN0cihjbG9zdXJlLCBoYW5kbGVyX2RhdGEsIHN0ciwgbGVuLCBo
YW5kbGUpKTsKLSAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGJvb2wgcmVwZWF0ZWRfZW5kc3Ry
KHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSkgewotICB1cGJfanNvbl9w
cmludGVyICpwID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoYW5kbGVyX2RhdGEpOwotICBwcmlu
dF9kYXRhKHAsICJcIiIsIDEpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgKm1h
cGtleXZhbF9zdGFydHN0cih2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplX2hpbnQpIHsKLSAg
dXBiX2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlcl9kYXRh
KTsKLSAgVVBCX1VOVVNFRChzaXplX2hpbnQpOwotICBwcmludF9kYXRhKHAsICJcIiIsIDEpOwot
ICByZXR1cm4gcDsKLX0KLQotc3RhdGljIHNpemVfdCBtYXBrZXlfc3RyKHZvaWQgKmNsb3N1cmUs
IGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpzdHIsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIENISyhwdXRzdHIoY2xvc3VyZSwgaGFuZGxlcl9k
YXRhLCBzdHIsIGxlbiwgaGFuZGxlKSk7Ci0gIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBib29s
IG1hcGtleV9lbmRzdHIodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhKSB7
Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhhbmRsZXJf
ZGF0YSk7Ci0gIHByaW50X2RhdGEocCwgIlwiOiIsIDIpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQot
c3RhdGljIGJvb2wgbWFwdmFsdWVfZW5kc3RyKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhh
bmRsZXJfZGF0YSkgewotICB1cGJfanNvbl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAgVVBCX1VO
VVNFRChoYW5kbGVyX2RhdGEpOwotICBwcmludF9kYXRhKHAsICJcIiIsIDEpOwotICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIHNpemVfdCBzY2FsYXJfYnl0ZXModm9pZCAqY2xvc3VyZSwgY29u
c3Qgdm9pZCAqaGFuZGxlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqc3RyLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIENISyhwdXRrZXkoY2xvc3VyZSwgaGFuZGxlcl9k
YXRhKSk7Ci0gIENISyhwdXRieXRlcyhjbG9zdXJlLCBoYW5kbGVyX2RhdGEsIHN0ciwgbGVuLCBo
YW5kbGUpKTsKLSAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNpemVfdCByZXBlYXRlZF9ieXRl
cyh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIHVwYl9q
c29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBwcmludF9jb21tYShwKTsKLSAgQ0hLKHB1dGJ5
dGVzKGNsb3N1cmUsIGhhbmRsZXJfZGF0YSwgc3RyLCBsZW4sIGhhbmRsZSkpOwotICByZXR1cm4g
bGVuOwotfQotCi1zdGF0aWMgc2l6ZV90IG1hcGtleV9ieXRlcyh2b2lkICpjbG9zdXJlLCBjb25z
dCB2b2lkICpoYW5kbGVyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpzdHIsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgdXBiX2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7
Ci0gIENISyhwdXRieXRlcyhjbG9zdXJlLCBoYW5kbGVyX2RhdGEsIHN0ciwgbGVuLCBoYW5kbGUp
KTsKLSAgcHJpbnRfZGF0YShwLCAiOiIsIDEpOwotICByZXR1cm4gbGVuOwotfQotCi1zdGF0aWMg
dm9pZCBzZXRfZW51bV9oZCh1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1cGJfZmllbGRkZWYgKmYsCi0gICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFu
ZGxlcmF0dHIgKmF0dHIpIHsKLSAgRW51bUhhbmRsZXJEYXRhICpoZCA9IG1hbGxvYyhzaXplb2Yo
RW51bUhhbmRsZXJEYXRhKSk7Ci0gIGhkLT5lbnVtZGVmID0gKGNvbnN0IHVwYl9lbnVtZGVmICop
dXBiX2ZpZWxkZGVmX3N1YmRlZihmKTsKLSAgaGQtPmtleW5hbWUgPSBuZXdzdHJwYyhoLCBmKTsK
LSAgdXBiX2hhbmRsZXJzX2FkZGNsZWFudXAoaCwgaGQsIGZyZWUpOwotICB1cGJfaGFuZGxlcmF0
dHJfc2V0aGFuZGxlcmRhdGEoYXR0ciwgaGQpOwotfQotCi0vKiBTZXQgdXAgaGFuZGxlcnMgZm9y
IGEgbWFwZW50cnkgc3VibWVzc2FnZSAoaS5lLiwgYW4gaW5kaXZpZHVhbCBrZXkvdmFsdWUgcGFp
cgotICogaW4gYSBtYXApLgotICoKLSAqIFRPRE86IEhhbmRsZSBtaXNzaW5nIGtleSwgbWlzc2lu
ZyB2YWx1ZSwgb3V0LW9mLW9yZGVyIGtleS92YWx1ZSwgb3IgcmVwZWF0ZWQKLSAqIGtleSBvciB2
YWx1ZSBjYXNlcyBwcm9wZXJseS4gVGhlIHJpZ2h0IHdheSB0byBkbyB0aGlzIGlzIHRvIGFsbG9j
YXRlIGEKLSAqIHRlbXBvcmFyeSBzdHJ1Y3R1cmUgYXQgdGhlIHN0YXJ0IG9mIGEgbWFwZW50cnkg
c3VibWVzc2FnZSwgc3RvcmUga2V5IGFuZAotICogdmFsdWUgZGF0YSBpbiBpdCBhcyBrZXkgYW5k
IHZhbHVlIGhhbmRsZXJzIGFyZSBjYWxsZWQsIGFuZCB0aGVuIHByaW50IHRoZQotICoga2V5L3Zh
bHVlIHBhaXIgb25jZSBhdCB0aGUgZW5kIG9mIHRoZSBzdWJtZXNzYWdlLiBJZiB3ZSBkb24ndCBk
byB0aGlzLCB3ZQotICogc2hvdWxkIGF0IGxlYXN0IGRldGVjdCB0aGUgY2FzZSBhbmQgdGhyb3cg
YW4gZXJyb3IuIEhvd2V2ZXIsIHNvIGZhciBhbGwgb2YKLSAqIG91ciBzb3VyY2VzIHRoYXQgZW1p
dCBtYXBlbnRyeSBtZXNzYWdlcyBkbyBzbyBjYW5vbmljYWxseSAod2l0aCBvbmUga2V5Ci0gKiBm
aWVsZCwgYW5kIHRoZW4gb25lIHZhbHVlIGZpZWxkKSwgc28gdGhpcyBpcyBub3QgYSBwcmVzc2lu
ZyBjb25jZXJuIGF0IHRoZQotICogbW9tZW50LiAqLwotdm9pZCBwcmludGVyX3NldGhhbmRsZXJz
X21hcGVudHJ5KGNvbnN0IHZvaWQgKmNsb3N1cmUsIHVwYl9oYW5kbGVycyAqaCkgewotICBjb25z
dCB1cGJfbXNnZGVmICptZCA9IHVwYl9oYW5kbGVyc19tc2dkZWYoaCk7Ci0KLSAgLyogQSBtYXBl
bnRyeSBtZXNzYWdlIGlzIHByaW50ZWQgc2ltcGx5IGFzICcia2V5IjogdmFsdWUnLiBSYXRoZXIg
dGhhbgotICAgKiBzcGVjaWFsLWNhc2Uga2V5IGFuZCB2YWx1ZSBmb3IgZXZlcnkgdHlwZSBiZWxv
dywgd2UganVzdCBoYW5kbGUgYm90aAotICAgKiBmaWVsZHMgZXhwbGljaXRseSBoZXJlLiAqLwot
ICBjb25zdCB1cGJfZmllbGRkZWYqIGtleV9maWVsZCA9IHVwYl9tc2dkZWZfaXRvZihtZCwgVVBC
X01BUEVOVFJZX0tFWSk7Ci0gIGNvbnN0IHVwYl9maWVsZGRlZiogdmFsdWVfZmllbGQgPSB1cGJf
bXNnZGVmX2l0b2YobWQsIFVQQl9NQVBFTlRSWV9WQUxVRSk7Ci0KLSAgdXBiX2hhbmRsZXJhdHRy
IGVtcHR5X2F0dHIgPSBVUEJfSEFORExFUkFUVFJfSU5JVElBTElaRVI7Ci0KLSAgVVBCX1VOVVNF
RChjbG9zdXJlKTsKLQotICBzd2l0Y2ggKHVwYl9maWVsZGRlZl90eXBlKGtleV9maWVsZCkpIHsK
LSAgICBjYXNlIFVQQl9UWVBFX0lOVDMyOgotICAgICAgdXBiX2hhbmRsZXJzX3NldGludDMyKGgs
IGtleV9maWVsZCwgcHV0bWFwa2V5X2ludDMyX3QsICZlbXB0eV9hdHRyKTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgVVBCX1RZUEVfSU5UNjQ6Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0aW50NjQo
aCwga2V5X2ZpZWxkLCBwdXRtYXBrZXlfaW50NjRfdCwgJmVtcHR5X2F0dHIpOwotICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5UMzI6Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0dWlu
dDMyKGgsIGtleV9maWVsZCwgcHV0bWFwa2V5X3VpbnQzMl90LCAmZW1wdHlfYXR0cik7Ci0gICAg
ICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX1VJTlQ2NDoKLSAgICAgIHVwYl9oYW5kbGVyc19z
ZXR1aW50NjQoaCwga2V5X2ZpZWxkLCBwdXRtYXBrZXlfdWludDY0X3QsICZlbXB0eV9hdHRyKTsK
LSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfQk9PTDoKLSAgICAgIHVwYl9oYW5kbGVy
c19zZXRib29sKGgsIGtleV9maWVsZCwgcHV0bWFwa2V5X2Jvb2wsICZlbXB0eV9hdHRyKTsKLSAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfU1RSSU5HOgotICAgICAgdXBiX2hhbmRsZXJz
X3NldHN0YXJ0c3RyKGgsIGtleV9maWVsZCwgbWFwa2V5dmFsX3N0YXJ0c3RyLCAmZW1wdHlfYXR0
cik7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0c3RyaW5nKGgsIGtleV9maWVsZCwgbWFwa2V5X3N0
ciwgJmVtcHR5X2F0dHIpOwotICAgICAgdXBiX2hhbmRsZXJzX3NldGVuZHN0cihoLCBrZXlfZmll
bGQsIG1hcGtleV9lbmRzdHIsICZlbXB0eV9hdHRyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VVBCX1RZUEVfQllURVM6Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0c3RyaW5nKGgsIGtleV9maWVs
ZCwgbWFwa2V5X2J5dGVzLCAmZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgc3dpdGNoICh1
cGJfZmllbGRkZWZfdHlwZSh2YWx1ZV9maWVsZCkpIHsKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDMy
OgotICAgICAgdXBiX2hhbmRsZXJzX3NldGludDMyKGgsIHZhbHVlX2ZpZWxkLCBwdXRpbnQzMl90
LCAmZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDY0Ogot
ICAgICAgdXBiX2hhbmRsZXJzX3NldGludDY0KGgsIHZhbHVlX2ZpZWxkLCBwdXRpbnQ2NF90LCAm
ZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX1VJTlQzMjoKLSAg
ICAgIHVwYl9oYW5kbGVyc19zZXR1aW50MzIoaCwgdmFsdWVfZmllbGQsIHB1dHVpbnQzMl90LCAm
ZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX1VJTlQ2NDoKLSAg
ICAgIHVwYl9oYW5kbGVyc19zZXR1aW50NjQoaCwgdmFsdWVfZmllbGQsIHB1dHVpbnQ2NF90LCAm
ZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX0JPT0w6Ci0gICAg
ICB1cGJfaGFuZGxlcnNfc2V0Ym9vbChoLCB2YWx1ZV9maWVsZCwgcHV0Ym9vbCwgJmVtcHR5X2F0
dHIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9GTE9BVDoKLSAgICAgIHVwYl9o
YW5kbGVyc19zZXRmbG9hdChoLCB2YWx1ZV9maWVsZCwgcHV0ZmxvYXQsICZlbXB0eV9hdHRyKTsK
LSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfRE9VQkxFOgotICAgICAgdXBiX2hhbmRs
ZXJzX3NldGRvdWJsZShoLCB2YWx1ZV9maWVsZCwgcHV0ZG91YmxlLCAmZW1wdHlfYXR0cik7Ci0g
ICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX1NUUklORzoKLSAgICAgIHVwYl9oYW5kbGVy
c19zZXRzdGFydHN0cihoLCB2YWx1ZV9maWVsZCwgbWFwa2V5dmFsX3N0YXJ0c3RyLCAmZW1wdHlf
YXR0cik7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0c3RyaW5nKGgsIHZhbHVlX2ZpZWxkLCBwdXRz
dHIsICZlbXB0eV9hdHRyKTsKLSAgICAgIHVwYl9oYW5kbGVyc19zZXRlbmRzdHIoaCwgdmFsdWVf
ZmllbGQsIG1hcHZhbHVlX2VuZHN0ciwgJmVtcHR5X2F0dHIpOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBVUEJfVFlQRV9CWVRFUzoKLSAgICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgdmFs
dWVfZmllbGQsIHB1dGJ5dGVzLCAmZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl
IFVQQl9UWVBFX0VOVU06IHsKLSAgICAgIHVwYl9oYW5kbGVyYXR0ciBlbnVtX2F0dHIgPSBVUEJf
SEFORExFUkFUVFJfSU5JVElBTElaRVI7Ci0gICAgICBzZXRfZW51bV9oZChoLCB2YWx1ZV9maWVs
ZCwgJmVudW1fYXR0cik7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0aW50MzIoaCwgdmFsdWVfZmll
bGQsIG1hcHZhbHVlX2VudW0sICZlbnVtX2F0dHIpOwotICAgICAgdXBiX2hhbmRsZXJhdHRyX3Vu
aW5pdCgmZW51bV9hdHRyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVQQl9UWVBF
X01FU1NBR0U6Ci0gICAgICAvKiBObyBoYW5kbGVyIG5lY2Vzc2FyeSAtLSB0aGUgc3VibXNnIGhh
bmRsZXJzIHdpbGwgcHJpbnQgdGhlIG1lc3NhZ2UKLSAgICAgICAqIGFzIGFwcHJvcHJpYXRlLiAq
LwotICAgICAgYnJlYWs7Ci0gIH0KLQotICB1cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZlbXB0eV9h
dHRyKTsKLX0KLQotdm9pZCBwcmludGVyX3NldGhhbmRsZXJzKGNvbnN0IHZvaWQgKmNsb3N1cmUs
IHVwYl9oYW5kbGVycyAqaCkgewotICBjb25zdCB1cGJfbXNnZGVmICptZCA9IHVwYl9oYW5kbGVy
c19tc2dkZWYoaCk7Ci0gIGJvb2wgaXNfbWFwZW50cnkgPSB1cGJfbXNnZGVmX21hcGVudHJ5KG1k
KTsKLSAgdXBiX2hhbmRsZXJhdHRyIGVtcHR5X2F0dHIgPSBVUEJfSEFORExFUkFUVFJfSU5JVElB
TElaRVI7Ci0gIHVwYl9tc2dfZmllbGRfaXRlciBpOwotCi0gIFVQQl9VTlVTRUQoY2xvc3VyZSk7
Ci0KLSAgaWYgKGlzX21hcGVudHJ5KSB7Ci0gICAgLyogbWFwZW50cnkgbWVzc2FnZXMgYXJlIHN1
ZmZpY2llbnRseSBkaWZmZXJlbnQgdGhhdCB3ZSBoYW5kbGUgdGhlbQotICAgICAqIHNlcGFyYXRl
bHkuICovCi0gICAgcHJpbnRlcl9zZXRoYW5kbGVyc19tYXBlbnRyeShjbG9zdXJlLCBoKTsKLSAg
ICByZXR1cm47Ci0gIH0KLQotICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRtc2coaCwgcHJpbnRlcl9z
dGFydG1zZywgJmVtcHR5X2F0dHIpOwotICB1cGJfaGFuZGxlcnNfc2V0ZW5kbXNnKGgsIHByaW50
ZXJfZW5kbXNnLCAmZW1wdHlfYXR0cik7Ci0KLSNkZWZpbmUgVFlQRSh0eXBlLCBuYW1lLCBjdHlw
ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY2Fz
ZSB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBpZiAodXBiX2ZpZWxkZGVmX2lzc2VxKGYpKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHVwYl9oYW5k
bGVyc19zZXQjI25hbWUoaCwgZiwgcmVwZWF0ZWRfIyNjdHlwZSwgJmVtcHR5X2F0dHIpOyAgICAg
ICAgICAgIFwKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHVwYl9oYW5kbGVyc19zZXQj
I25hbWUoaCwgZiwgc2NhbGFyXyMjY3R5cGUsICZuYW1lX2F0dHIpOyAgICAgICAgICAgICAgIFwK
LSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBicmVhazsKLQotICB1cGJfbXNnX2ZpZWxkX2Jl
Z2luKCZpLCBtZCk7Ci0gIGZvcig7ICF1cGJfbXNnX2ZpZWxkX2RvbmUoJmkpOyB1cGJfbXNnX2Zp
ZWxkX25leHQoJmkpKSB7Ci0gICAgY29uc3QgdXBiX2ZpZWxkZGVmICpmID0gdXBiX21zZ19pdGVy
X2ZpZWxkKCZpKTsKLQotICAgIHVwYl9oYW5kbGVyYXR0ciBuYW1lX2F0dHIgPSBVUEJfSEFORExF
UkFUVFJfSU5JVElBTElaRVI7Ci0gICAgdXBiX2hhbmRsZXJhdHRyX3NldGhhbmRsZXJkYXRhKCZu
YW1lX2F0dHIsIG5ld3N0cnBjKGgsIGYpKTsKLQotICAgIGlmICh1cGJfZmllbGRkZWZfaXNtYXAo
ZikpIHsKLSAgICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHNlcShoLCBmLCBzdGFydG1hcCwgJm5h
bWVfYXR0cik7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0ZW5kc2VxKGgsIGYsIGVuZG1hcCwgJm5h
bWVfYXR0cik7Ci0gICAgfSBlbHNlIGlmICh1cGJfZmllbGRkZWZfaXNzZXEoZikpIHsKLSAgICAg
IHVwYl9oYW5kbGVyc19zZXRzdGFydHNlcShoLCBmLCBzdGFydHNlcSwgJm5hbWVfYXR0cik7Ci0g
ICAgICB1cGJfaGFuZGxlcnNfc2V0ZW5kc2VxKGgsIGYsIGVuZHNlcSwgJmVtcHR5X2F0dHIpOwot
ICAgIH0KLQotICAgIHN3aXRjaCAodXBiX2ZpZWxkZGVmX3R5cGUoZikpIHsKLSAgICAgIFRZUEUo
VVBCX1RZUEVfRkxPQVQsICBmbG9hdCwgIGZsb2F0KTsKLSAgICAgIFRZUEUoVVBCX1RZUEVfRE9V
QkxFLCBkb3VibGUsIGRvdWJsZSk7Ci0gICAgICBUWVBFKFVQQl9UWVBFX0JPT0wsICAgYm9vbCwg
ICBib29sKTsKLSAgICAgIFRZUEUoVVBCX1RZUEVfSU5UMzIsICBpbnQzMiwgIGludDMyX3QpOwot
ICAgICAgVFlQRShVUEJfVFlQRV9VSU5UMzIsIHVpbnQzMiwgdWludDMyX3QpOwotICAgICAgVFlQ
RShVUEJfVFlQRV9JTlQ2NCwgIGludDY0LCAgaW50NjRfdCk7Ci0gICAgICBUWVBFKFVQQl9UWVBF
X1VJTlQ2NCwgdWludDY0LCB1aW50NjRfdCk7Ci0gICAgICBjYXNlIFVQQl9UWVBFX0VOVU06IHsK
LSAgICAgICAgLyogRm9yIG5vdywgd2UgYWx3YXlzIGVtaXQgc3ltYm9saWMgbmFtZXMgZm9yIGVu
dW1zLiBXZSBtYXkgd2FudCBhbgotICAgICAgICAgKiBvcHRpb24gbGF0ZXIgdG8gY29udHJvbCB0
aGlzIGJlaGF2aW9yLCBidXQgd2Ugd2lsbCB3YWl0IGZvciBhIHJlYWwKLSAgICAgICAgICogbmVl
ZCBmaXJzdC4gKi8KLSAgICAgICAgdXBiX2hhbmRsZXJhdHRyIGVudW1fYXR0ciA9IFVQQl9IQU5E
TEVSQVRUUl9JTklUSUFMSVpFUjsKLSAgICAgICAgc2V0X2VudW1faGQoaCwgZiwgJmVudW1fYXR0
cik7Ci0KLSAgICAgICAgaWYgKHVwYl9maWVsZGRlZl9pc3NlcShmKSkgewotICAgICAgICAgIHVw
Yl9oYW5kbGVyc19zZXRpbnQzMihoLCBmLCByZXBlYXRlZF9lbnVtLCAmZW51bV9hdHRyKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB1cGJfaGFuZGxlcnNfc2V0aW50MzIoaCwgZiwgc2Nh
bGFyX2VudW0sICZlbnVtX2F0dHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdXBiX2hhbmRsZXJh
dHRyX3VuaW5pdCgmZW51bV9hdHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBj
YXNlIFVQQl9UWVBFX1NUUklORzoKLSAgICAgICAgaWYgKHVwYl9maWVsZGRlZl9pc3NlcShmKSkg
ewotICAgICAgICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHN0cihoLCBmLCByZXBlYXRlZF9zdGFy
dHN0ciwgJmVtcHR5X2F0dHIpOwotICAgICAgICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwg
ZiwgcmVwZWF0ZWRfc3RyLCAmZW1wdHlfYXR0cik7Ci0gICAgICAgICAgdXBiX2hhbmRsZXJzX3Nl
dGVuZHN0cihoLCBmLCByZXBlYXRlZF9lbmRzdHIsICZlbXB0eV9hdHRyKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzdHIoaCwgZiwgc2NhbGFyX3N0
YXJ0c3RyLCAmbmFtZV9hdHRyKTsKLSAgICAgICAgICB1cGJfaGFuZGxlcnNfc2V0c3RyaW5nKGgs
IGYsIHNjYWxhcl9zdHIsICZlbXB0eV9hdHRyKTsKLSAgICAgICAgICB1cGJfaGFuZGxlcnNfc2V0
ZW5kc3RyKGgsIGYsIHNjYWxhcl9lbmRzdHIsICZlbXB0eV9hdHRyKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgVVBCX1RZUEVfQllURVM6Ci0gICAgICAgIC8qIFhYWDog
dGhpcyBkb2Vzbid0IHN1cHBvcnQgc3RyaW5ncyB0aGF0IHNwYW4gYnVmZmVycyB5ZXQuIFRoZSBi
YXNlNjQKLSAgICAgICAgICogZW5jb2RlciB3aWxsIG5lZWQgdG8gYmUgbWFkZSByZXN1bWFibGUg
Zm9yIHRoaXMgdG8gd29yayBwcm9wZXJseS4gKi8KLSAgICAgICAgaWYgKHVwYl9maWVsZGRlZl9p
c3NlcShmKSkgewotICAgICAgICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgZiwgcmVwZWF0
ZWRfYnl0ZXMsICZlbXB0eV9hdHRyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB1cGJf
aGFuZGxlcnNfc2V0c3RyaW5nKGgsIGYsIHNjYWxhcl9ieXRlcywgJm5hbWVfYXR0cik7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVQQl9UWVBFX01FU1NBR0U6Ci0gICAg
ICAgIGlmICh1cGJfZmllbGRkZWZfaXNzZXEoZikpIHsKLSAgICAgICAgICB1cGJfaGFuZGxlcnNf
c2V0c3RhcnRzdWJtc2coaCwgZiwgcmVwZWF0ZWRfc3RhcnRzdWJtc2csICZuYW1lX2F0dHIpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHN1Ym1zZyho
LCBmLCBzY2FsYXJfc3RhcnRzdWJtc2csICZuYW1lX2F0dHIpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIHVwYl9oYW5kbGVyYXR0cl91bmluaXQoJm5hbWVfYXR0cik7
Ci0gIH0KLQotICB1cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZlbXB0eV9hdHRyKTsKLSN1bmRlZiBU
WVBFCi19Ci0KLXN0YXRpYyB2b2lkIGpzb25fcHJpbnRlcl9yZXNldCh1cGJfanNvbl9wcmludGVy
ICpwKSB7Ci0gIHAtPmRlcHRoXyA9IDA7Ci19Ci0KLQotLyogUHVibGljIEFQSSAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
LQotdXBiX2pzb25fcHJpbnRlciAqdXBiX2pzb25fcHJpbnRlcl9jcmVhdGUodXBiX2VudiAqZSwg
Y29uc3QgdXBiX2hhbmRsZXJzICpoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXBiX2J5dGVzc2luayAqb3V0cHV0KSB7Ci0jaWZuZGVmIE5ERUJVRwotICBzaXpl
X3Qgc2l6ZV9iZWZvcmUgPSB1cGJfZW52X2J5dGVzYWxsb2NhdGVkKGUpOwotI2VuZGlmCi0KLSAg
dXBiX2pzb25fcHJpbnRlciAqcCA9IHVwYl9lbnZfbWFsbG9jKGUsIHNpemVvZih1cGJfanNvbl9w
cmludGVyKSk7Ci0gIGlmICghcCkgcmV0dXJuIE5VTEw7Ci0KLSAgcC0+b3V0cHV0XyA9IG91dHB1
dDsKLSAganNvbl9wcmludGVyX3Jlc2V0KHApOwotICB1cGJfc2lua19yZXNldCgmcC0+aW5wdXRf
LCBoLCBwKTsKLQotICAvKiBJZiB0aGlzIGZhaWxzLCBpbmNyZWFzZSB0aGUgdmFsdWUgaW4gcHJp
bnRlci5oLiAqLwotICBhc3NlcnQodXBiX2Vudl9ieXRlc2FsbG9jYXRlZChlKSAtIHNpemVfYmVm
b3JlIDw9IFVQQl9KU09OX1BSSU5URVJfU0laRSk7Ci0gIHJldHVybiBwOwotfQotCi11cGJfc2lu
ayAqdXBiX2pzb25fcHJpbnRlcl9pbnB1dCh1cGJfanNvbl9wcmludGVyICpwKSB7Ci0gIHJldHVy
biAmcC0+aW5wdXRfOwotfQotCi1jb25zdCB1cGJfaGFuZGxlcnMgKnVwYl9qc29uX3ByaW50ZXJf
bmV3aGFuZGxlcnMoY29uc3QgdXBiX21zZ2RlZiAqbWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3duZXIpIHsKLSAgcmV0dXJu
IHVwYl9oYW5kbGVyc19uZXdmcm96ZW4obWQsIG93bmVyLCBwcmludGVyX3NldGhhbmRsZXJzLCBO
VUxMKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvcGhwL2V4dC9nb29nbGUvcHJvdG9idWYvdXBiLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3BocC9l
eHQvZ29vZ2xlL3Byb3RvYnVmL3VwYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
NzhlMmEyODEzMjEyNTBlNmUyZWJhMzk0MDVhOTE3Nzk2Y2NhNDRlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcGhwL2V4dC9nb29nbGUvcHJvdG9idWYvdXBi
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MjE3ICswLDAgQEAKLS8vIEFtYWxnYW1hdGVkIHNvdXJj
ZSBmaWxlCi0vKgotKiogRGVmcyBhcmUgdXBiJ3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2Yg
dGhlIGNvbnN0cnVjdHMgdGhhdCBjYW4gYXBwZWFyCi0qKiBpbiBhIC5wcm90byBmaWxlOgotKioK
LSoqIC0gdXBiOjpNZXNzYWdlRGVmICh1cGJfbXNnZGVmKTogZGVzY3JpYmVzIGEgIm1lc3NhZ2Ui
IGNvbnN0cnVjdC4KLSoqIC0gdXBiOjpGaWVsZERlZiAodXBiX2ZpZWxkZGVmKTogZGVzY3JpYmVz
IGEgbWVzc2FnZSBmaWVsZC4KLSoqIC0gdXBiOjpFbnVtRGVmICh1cGJfZW51bWRlZik6IGRlc2Ny
aWJlcyBhbiBlbnVtLgotKiogLSB1cGI6Ok9uZW9mRGVmICh1cGJfb25lb2ZkZWYpOiBkZXNjcmli
ZXMgYSBvbmVvZi4KLSoqIC0gdXBiOjpEZWYgKHVwYl9kZWYpOiBiYXNlIGNsYXNzIG9mIGFsbCB0
aGUgb3RoZXJzLgotKioKLSoqIFRPRE86IGRlZmluaXRpb25zIG9mIHNlcnZpY2VzLgotKioKLSoq
IExpa2UgdXBiX3JlZmNvdW50ZWQgb2JqZWN0cywgZGVmcyBhcmUgbXV0YWJsZSBvbmx5IHVudGls
IGZyb3plbiwgYW5kIGFyZQotKiogb25seSB0aHJlYWQtc2FmZSBvbmNlIGZyb3plbi4KLSoqCi0q
KiBUaGlzIGlzIGEgbWl4ZWQgQy9DKysgaW50ZXJmYWNlIHRoYXQgb2ZmZXJzIGEgZnVsbCBBUEkg
dG8gYm90aCBsYW5ndWFnZXMuCi0qKiBTZWUgdGhlIHRvcC1sZXZlbCBSRUFETUUgZm9yIG1vcmUg
aW5mb3JtYXRpb24uCi0qLwotCi0jaWZuZGVmIFVQQl9ERUZfSF8KLSNkZWZpbmUgVVBCX0RFRl9I
XwotCi0vKgotKiogdXBiOjpSZWZDb3VudGVkICh1cGJfcmVmY291bnRlZCkKLSoqCi0qKiBBIHJl
ZmNvdW50aW5nIHNjaGVtZSB0aGF0IHN1cHBvcnRzIGNpcmN1bGFyIHJlZnMuICBJdCBhY2NvbXBs
aXNoZXMgdGhpcyBieQotKiogcGFydGl0aW9uaW5nIHRoZSBzZXQgb2Ygb2JqZWN0cyBpbnRvIGdy
b3VwcyBzdWNoIHRoYXQgbm8gY3ljbGUgc3BhbnMgZ3JvdXBzOwotKiogd2UgY2FuIHRoZW4gcmVm
ZXJlbmNlLWNvdW50IHRoZSBncm91cCBhcyBhIHdob2xlIGFuZCBpZ25vcmUgcmVmcyB3aXRoaW4g
dGhlCi0qKiBncm91cC4gIFdoZW4gb2JqZWN0cyBhcmUgbXV0YWJsZSwgdGhlc2UgZ3JvdXBzIGFy
ZSBjb21wdXRlZCB2ZXJ5Ci0qKiBjb25zZXJ2YXRpdmVseTsgd2UgZ3JvdXAgYW55IG9iamVjdHMg
dGhhdCBoYXZlIGV2ZXIgaGFkIGEgbGluayBiZXR3ZWVuIHRoZW0uCi0qKiBXaGVuIG9iamVjdHMg
YXJlIGZyb3plbiwgd2UgY29tcHV0ZSBzdHJvbmdseS1jb25uZWN0ZWQgY29tcG9uZW50cyB3aGlj
aAotKiogYWxsb3dzIHVzIHRvIGJlIHByZWNpc2UgYW5kIG9ubHkgZ3JvdXAgb2JqZWN0cyB0aGF0
IGFyZSBhY3R1YWxseSBjeWNsaWMuCi0qKgotKiogVGhpcyBpcyBhIG1peGVkIEMvQysrIGludGVy
ZmFjZSB0aGF0IG9mZmVycyBhIGZ1bGwgQVBJIHRvIGJvdGggbGFuZ3VhZ2VzLgotKiogU2VlIHRo
ZSB0b3AtbGV2ZWwgUkVBRE1FIGZvciBtb3JlIGluZm9ybWF0aW9uLgotKi8KLQotI2lmbmRlZiBV
UEJfUkVGQ09VTlRFRF9IXwotI2RlZmluZSBVUEJfUkVGQ09VTlRFRF9IXwotCi0vKgotKiogdXBi
X3RhYmxlCi0qKgotKiogVGhpcyBoZWFkZXIgaXMgSU5URVJOQUwtT05MWSEgIEl0cyBpbnRlcmZh
Y2VzIGFyZSBub3QgcHVibGljIG9yIHN0YWJsZSEKLSoqIFRoaXMgZmlsZSBkZWZpbmVzIHZlcnkg
ZmFzdCBpbnQtPnVwYl92YWx1ZSAoaW50dGFibGUpIGFuZCBzdHJpbmctPnVwYl92YWx1ZQotKiog
KHN0cnRhYmxlKSBoYXNoIHRhYmxlcy4KLSoqCi0qKiBUaGUgdGFibGUgdXNlcyBjaGFpbmVkIHNj
YXR0ZXIgd2l0aCBCcmVudCdzIHZhcmlhdGlvbiAoaW5zcGlyZWQgYnkgdGhlIEx1YQotKiogaW1w
bGVtZW50YXRpb24gb2YgaGFzaCB0YWJsZXMpLiAgVGhlIGhhc2ggZnVuY3Rpb24gZm9yIHN0cmlu
Z3MgaXMgQXVzdGluCi0qKiBBcHBsZWJ5J3MgIk11cm11ckhhc2guIgotKioKLSoqIFRoZSBpbnR0
YWJsZSB1c2VzIHVpbnRwdHJfdCBhcyBpdHMga2V5LCB3aGljaCBndWFyYW50ZWVzIGl0IGNhbiBi
ZSB1c2VkIHRvCi0qKiBzdG9yZSBwb2ludGVycyBvciBpbnRlZ2VycyBvZiBhdCBsZWFzdCAzMiBi
aXRzICh1cGIgaXNuJ3QgcmVhbGx5IHVzZWZ1bCBvbgotKiogc3lzdGVtcyB3aGVyZSBzaXplb2Yo
dm9pZCopIDwgNCkuCi0qKgotKiogVGhlIHRhYmxlIG11c3QgYmUgaG9tb2dlbm91cyAoYWxsIHZh
bHVlcyBvZiB0aGUgc2FtZSB0eXBlKS4gIEluIGRlYnVnCi0qKiBtb2RlLCB3ZSBjaGVjayB0aGlz
IG9uIGluc2VydCBhbmQgbG9va3VwLgotKi8KLQotI2lmbmRlZiBVUEJfVEFCTEVfSF8KLSNkZWZp
bmUgVVBCX1RBQkxFX0hfCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdGRpbnQu
aD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLS8qCi0qKiBUaGlzIGZpbGUgY29udGFpbnMgc2hhcmVk
IGRlZmluaXRpb25zIHRoYXQgYXJlIHdpZGVseSB1c2VkIGFjcm9zcyB1cGIuCi0qKgotKiogVGhp
cyBpcyBhIG1peGVkIEMvQysrIGludGVyZmFjZSB0aGF0IG9mZmVycyBhIGZ1bGwgQVBJIHRvIGJv
dGggbGFuZ3VhZ2VzLgotKiogU2VlIHRoZSB0b3AtbGV2ZWwgUkVBRE1FIGZvciBtb3JlIGluZm9y
bWF0aW9uLgotKi8KLQotI2lmbmRlZiBVUEJfSF8KLSNkZWZpbmUgVVBCX0hfCi0KLSNpbmNsdWRl
IDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0j
aW5jbHVkZSA8c3RkZGVmLmg+Ci0KLS8qIFVQQl9JTkxJTkU6IGlubGluZSBpZiBwb3NzaWJsZSwg
ZW1pdCBzdGFuZGFsb25lIGNvZGUgaWYgcmVxdWlyZWQuICovCi0jaWZkZWYgX19jcGx1c3BsdXMK
LSNkZWZpbmUgVVBCX0lOTElORSBpbmxpbmUKLSNlbGlmIGRlZmluZWQgKF9fR05VQ19fKQotI2Rl
ZmluZSBVUEJfSU5MSU5FIHN0YXRpYyBfX2lubGluZV9fCi0jZWxzZQotI2RlZmluZSBVUEJfSU5M
SU5FIHN0YXRpYwotI2VuZGlmCi0KLS8qIERlZmluZSBVUEJfQklHX0VORElBTiBtYW51YWxseSBp
ZiB5b3UncmUgb24gYmlnIGVuZGlhbiBhbmQgeW91ciBjb21waWxlcgotICogZG9lc24ndCBwcm92
aWRlIHRoZXNlIHByZXByb2Nlc3NvciBzeW1ib2xzLiAqLwotI2lmIGRlZmluZWQoX19CWVRFX09S
REVSX18pICYmIChfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXykKLSNkZWZp
bmUgVVBCX0JJR19FTkRJQU4KLSNlbmRpZgotCi0vKiBNYWNyb3MgZm9yIGZ1bmN0aW9uIGF0dHJp
YnV0ZXMgb24gY29tcGlsZXJzIHRoYXQgc3VwcG9ydCB0aGVtLiAqLwotI2lmZGVmIF9fR05VQ19f
Ci0jZGVmaW5lIFVQQl9GT1JDRUlOTElORSBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5
c19pbmxpbmUpKQotI2RlZmluZSBVUEJfTk9JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUp
KQotI2RlZmluZSBVUEJfTk9SRVRVUk4gX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKLSNl
bHNlICAvKiAhZGVmaW5lZChfX0dOVUNfXykgKi8KLSNkZWZpbmUgVVBCX0ZPUkNFSU5MSU5FCi0j
ZGVmaW5lIFVQQl9OT0lOTElORQotI2RlZmluZSBVUEJfTk9SRVRVUk4KLSNlbmRpZgotCi0vKiBB
IGZldyBoYWNreSB3b3JrYXJvdW5kcyBmb3IgZnVuY3Rpb25zIG5vdCBpbiBDODkuCi0gKiBGb3Ig
aW50ZXJuYWwgdXNlIG9ubHkhCi0gKiBUT0RPKGhhYmVybWFuKTogZml4IHRoZXNlIGJ5IGluY2x1
ZGluZyBvdXIgb3duIGltcGxlbWVudGF0aW9ucywgb3IgZmluZGluZwotICogYW5vdGhlciB3b3Jr
YXJvdW5kLgotICovCi0jaWZkZWYgX19HTlVDX18KLSNkZWZpbmUgX3VwYl9zbnByaW50ZiBfX2J1
aWx0aW5fc25wcmludGYKLSNkZWZpbmUgX3VwYl92c25wcmludGYgX19idWlsdGluX3ZzbnByaW50
ZgotI2RlZmluZSBfdXBiX3ZhX2NvcHkoYSwgYikgX192YV9jb3B5KGEsIGIpCi0jZWxpZiBfX1NU
RENfVkVSU0lPTl9fID49IDE5OTkwMUwKLS8qIEM5OSB2ZXJzaW9ucy4gKi8KLSNkZWZpbmUgX3Vw
Yl9zbnByaW50ZiBzbnByaW50ZgotI2RlZmluZSBfdXBiX3ZzbnByaW50ZiB2c25wcmludGYKLSNk
ZWZpbmUgX3VwYl92YV9jb3B5KGEsIGIpIHZhX2NvcHkoYSwgYikKLSNlbHNlCi0jZXJyb3IgTmVl
ZCBpbXBsZW1lbnRhdGlvbnMgb2YgW3Zdc25wcmludGYgYW5kIHZhX2NvcHkKLSNlbmRpZgotCi0K
LSNpZiAoKGRlZmluZWQoX19jcGx1c3BsdXMpICYmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wpIHx8
IFwKLSAgICAgIGRlZmluZWQoX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18pKSAmJiAhZGVmaW5l
ZChVUEJfTk9fQ1hYMTEpCi0jZGVmaW5lIFVQQl9DWFgxMQotI2VuZGlmCi0KLS8qIFVQQl9ESVNB
TExPV19DT1BZX0FORF9BU1NJR04oKQotICogVVBCX0RJU0FMTE9XX1BPRF9PUFMoKQotICoKLSAq
IERlY2xhcmUgdGhlc2UgaW4gdGhlICJwcml2YXRlIiBzZWN0aW9uIG9mIGEgQysrIGNsYXNzIHRv
IGZvcmJpZCBjb3B5L2Fzc2lnbgotICogb3IgYWxsIFBPRCBvcHMgKGNvbnN0cnVjdCwgZGVzdHJ1
Y3QsIGNvcHksIGFzc2lnbikgb24gdGhhdCBjbGFzcy4gKi8KLSNpZmRlZiBVUEJfQ1hYMTEKLSNp
bmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNkZWZpbmUgVVBCX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihjbGFzc19uYW1lKSBcCi0gIGNsYXNzX25hbWUoY29uc3QgY2xhc3NfbmFtZSYpID0gZGVsZXRl
OyBcCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IGNsYXNzX25hbWUmKSA9IGRlbGV0ZTsKLSNkZWZp
bmUgVVBCX0RJU0FMTE9XX1BPRF9PUFMoY2xhc3NfbmFtZSwgZnVsbF9jbGFzc19uYW1lKSBcCi0g
IGNsYXNzX25hbWUoKSA9IGRlbGV0ZTsgXAotICB+Y2xhc3NfbmFtZSgpID0gZGVsZXRlOyBcCi0g
IFVQQl9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oY2xhc3NfbmFtZSkKLSNkZWZpbmUgVVBCX0FT
U0VSVF9TVERMQVlPVVQodHlwZSkgXAotICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc3RhbmRhcmRf
bGF5b3V0PHR5cGU+Ojp2YWx1ZSwgXAotICAgICAgICAgICAgICAgICN0eXBlICIgbXVzdCBiZSBz
dGFuZGFyZCBsYXlvdXQiKTsKLSNlbHNlICAvKiAhZGVmaW5lZChVUEJfQ1hYMTEpICovCi0jZGVm
aW5lIFVQQl9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oY2xhc3NfbmFtZSkgXAotICBjbGFzc19u
YW1lKGNvbnN0IGNsYXNzX25hbWUmKTsgXAotICB2b2lkIG9wZXJhdG9yPShjb25zdCBjbGFzc19u
YW1lJik7Ci0jZGVmaW5lIFVQQl9ESVNBTExPV19QT0RfT1BTKGNsYXNzX25hbWUsIGZ1bGxfY2xh
c3NfbmFtZSkgXAotICBjbGFzc19uYW1lKCk7IFwKLSAgfmNsYXNzX25hbWUoKTsgXAotICBVUEJf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKGNsYXNzX25hbWUpCi0jZGVmaW5lIFVQQl9BU1NFUlRf
U1RETEFZT1VUKHR5cGUpCi0jZW5kaWYKLQotLyogVVBCX0RFQ0xBUkVfVFlQRSgpCi0gKiBVUEJf
REVDTEFSRV9ERVJJVkVEX1RZUEUoKQotICogVVBCX0RFQ0xBUkVfREVSSVZFRF9UWVBFMigpCi0g
KgotICogTWFjcm9zIGZvciBkZWNsYXJpbmcgQyBhbmQgQysrIHR5cGVzIGJvdGgsIGluY2x1ZGlu
ZyBpbmhlcml0YW5jZS4KLSAqIFRoZSBpbmhlcml0YW5jZSBkb2Vzbid0IHVzZSByZWFsIEMrKyBp
bmhlcml0YW5jZSwgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggQy4KLSAqCi0gKiBUaGVzZSBtYWNy
b3MgYWxzbyBwcm92aWRlIHVwY2FzdHM6Ci0gKiAgLSBpbiBDOiB0eXBlcy1zcGVjaWZpYyBmdW5j
dGlvbnMgKGllLiB1cGJfZm9vX3VwY2FzdChmb28pKQotICogIC0gaW4gQysrOiB1cGI6OnVwY2Fz
dChmb28pIGFsb25nIHdpdGggaW1wbGljaXQgY29udmVyc2lvbnMKLSAqCi0gKiBEb3duY2FzdHMg
YXJlIG5vdCBwcm92aWRlZCwgYnV0IHVwYi9kZWYuaCBkZWZpbmVzIGRvd25jYXN0cyBmb3IgdXBi
OjpEZWYuICovCi0KLSNkZWZpbmUgVVBCX0NfVVBDQVNUUyh0eSwgYmFzZSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVVBCX0lOTElORSBiYXNlICp0eSAjIyBfdXBj
YXN0X211dGFibGUodHkgKnApIHsgcmV0dXJuIChiYXNlKilwOyB9IFwKLSAgVVBCX0lOTElORSBj
b25zdCBiYXNlICp0eSAjIyBfdXBjYXN0KGNvbnN0IHR5ICpwKSB7IHJldHVybiAoY29uc3QgYmFz
ZSopcDsgfQotCi0jZGVmaW5lIFVQQl9DX1VQQ0FTVFMyKHR5LCBiYXNlLCBiYXNlMikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9DX1VQQ0FTVFModHksIGJhc2UpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9JTkxJ
TkUgYmFzZTIgKnR5ICMjIF91cGNhc3QyX211dGFibGUodHkgKnApIHsgcmV0dXJuIChiYXNlMiop
cDsgfSBcCi0gIFVQQl9JTkxJTkUgY29uc3QgYmFzZTIgKnR5ICMjIF91cGNhc3QyKGNvbnN0IHR5
ICpwKSB7IHJldHVybiAoY29uc3QgYmFzZTIqKXA7IH0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0K
LSNkZWZpbmUgVVBCX0JFR0lOX0VYVEVSTl9DIGV4dGVybiAiQyIgewotI2RlZmluZSBVUEJfRU5E
X0VYVEVSTl9DIH0KLSNkZWZpbmUgVVBCX1BSSVZBVEVfRk9SX0NQUCBwcml2YXRlOgotI2RlZmlu
ZSBVUEJfREVDTEFSRV9UWVBFKGNwcG5hbWUsIGNuYW1lKSB0eXBlZGVmIGNwcG5hbWUgY25hbWU7
Ci0KLSNkZWZpbmUgVVBCX0RFQ0xBUkVfREVSSVZFRF9UWVBFKGNwcG5hbWUsIGNwcGJhc2UsIGNu
YW1lLCBjYmFzZSkgIFwKLSAgVVBCX0RFQ0xBUkVfVFlQRShjcHBuYW1lLCBjbmFtZSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVVBCX0NfVVBDQVNUUyhjbmFtZSwgY2Jhc2Up
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbmFtZXNwYWNlIHVwYiB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVt
cGxhdGUgPD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgY2xhc3MgUG9pbnRlcjxjcHBuYW1lPiA6IHB1YmxpYyBQb2ludGVyQmFzZTxjcHBu
YW1lLCBjcHBiYXNlPiB7IFwKLSAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBleHBsaWNpdCBQb2ludGVyKGNwcG5h
bWUqIHB0cikgOiBQb2ludGVyQmFzZShwdHIpIHt9ICAgICAgICAgIFwKLSAgfTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
dGVtcGxhdGUgPD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgY2xhc3MgUG9pbnRlcjxjb25zdCBjcHBuYW1lPiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIDogcHVibGljIFBvaW50ZXJCYXNlPGNvbnN0IGNw
cG5hbWUsIGNvbnN0IGNwcGJhc2U+IHsgICAgICAgIFwKLSAgIHB1YmxpYzogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBleHBsaWNp
dCBQb2ludGVyKGNvbnN0IGNwcG5hbWUqIHB0cikgOiBQb2ludGVyQmFzZShwdHIpIHt9ICAgIFwK
LSAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgfQotCi0jZGVmaW5lIFVQQl9ERUNMQVJFX0RFUklWRURfVFlQRTIoY3Bw
bmFtZSwgY3BwYmFzZSwgY3BwYmFzZTIsIGNuYW1lLCBjYmFzZSwgIFwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYmFzZTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBVUEJfREVDTEFSRV9UWVBFKGNwcG5hbWUsIGNuYW1lKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9DX1VQQ0FTVFMyKGNuYW1lLCBj
YmFzZSwgY2Jhc2UyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
bmFtZXNwYWNlIHVwYiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8PiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNsYXNzIFBvaW50
ZXI8Y3BwbmFtZT4gOiBwdWJsaWMgUG9pbnRlckJhc2UyPGNwcG5hbWUsIGNwcGJhc2UsIGNwcGJh
c2UyPiB7IFwKLSAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGV4cGxpY2l0IFBvaW50ZXIoY3Bw
bmFtZSogcHRyKSA6IFBvaW50ZXJCYXNlMihwdHIpIHt9ICAgICAgICAgICAgICAgICAgICBcCi0g
IH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPD4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjbGFzcyBQb2lu
dGVyPGNvbnN0IGNwcG5hbWU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICA6IHB1YmxpYyBQb2ludGVyQmFzZTI8Y29uc3QgY3BwbmFtZSwgY29u
c3QgY3BwYmFzZSwgY29uc3QgY3BwYmFzZTI+IHsgIFwKLSAgIHB1YmxpYzogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGV4cGxpY2l0IFBvaW50ZXIoY29uc3QgY3BwbmFtZSogcHRyKSA6IFBvaW50ZXJCYXNlMihw
dHIpIHt9ICAgICAgICAgICAgICBcCi0gIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZWxz
ZSAgLyogIWRlZmluZWQoX19jcGx1c3BsdXMpICovCi0KLSNkZWZpbmUgVVBCX0JFR0lOX0VYVEVS
Tl9DCi0jZGVmaW5lIFVQQl9FTkRfRVhURVJOX0MKLSNkZWZpbmUgVVBCX1BSSVZBVEVfRk9SX0NQ
UAotI2RlZmluZSBVUEJfREVDTEFSRV9UWVBFKGNwcG5hbWUsIGNuYW1lKSBcCi0gIHN0cnVjdCBj
bmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdHlwZWRlZiBzdHJ1Y3QgY25hbWUg
Y25hbWU7Ci0jZGVmaW5lIFVQQl9ERUNMQVJFX0RFUklWRURfVFlQRShjcHBuYW1lLCBjcHBiYXNl
LCBjbmFtZSwgY2Jhc2UpIFwKLSAgVVBCX0RFQ0xBUkVfVFlQRShjcHBuYW1lLCBjbmFtZSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBVUEJfQ19VUENBU1RTKGNuYW1lLCBjYmFz
ZSkKLSNkZWZpbmUgVVBCX0RFQ0xBUkVfREVSSVZFRF9UWVBFMihjcHBuYW1lLCBjcHBiYXNlLCBj
cHBiYXNlMiwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNuYW1lLCBj
YmFzZSwgY2Jhc2UyKSAgICAgICAgICBcCi0gIFVQQl9ERUNMQVJFX1RZUEUoY3BwbmFtZSwgY25h
bWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVVBCX0NfVVBDQVNUUzIoY25h
bWUsIGNiYXNlLCBjYmFzZTIpCi0KLSNlbmRpZiAgLyogZGVmaW5lZChfX2NwbHVzcGx1cykgKi8K
LQotI2RlZmluZSBVUEJfTUFYKHgsIHkpICgoeCkgPiAoeSkgPyAoeCkgOiAoeSkpCi0jZGVmaW5l
IFVQQl9NSU4oeCwgeSkgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKLQotI2RlZmluZSBVUEJfVU5V
U0VEKHZhcikgKHZvaWQpdmFyCi0KLS8qIEZvciBhc3NlcnRpbmcgc29tZXRoaW5nIGFib3V0IGEg
dmFyaWFibGUgd2hlbiB0aGUgdmFyaWFibGUgaXMgbm90IHVzZWQgZm9yCi0gKiBhbnl0aGluZyBl
bHNlLiAgVGhpcyBwcmV2ZW50cyAidW51c2VkIHZhcmlhYmxlIiB3YXJuaW5ncyB3aGVuIGNvbXBp
bGluZyBpbgotICogZGVidWcgbW9kZS4gKi8KLSNkZWZpbmUgVVBCX0FTU0VSVF9WQVIodmFyLCBw
cmVkaWNhdGUpIFVQQl9VTlVTRUQodmFyKTsgYXNzZXJ0KHByZWRpY2F0ZSkKLQotLyogR2VuZXJp
YyBmdW5jdGlvbiB0eXBlLiAqLwotdHlwZWRlZiB2b2lkIHVwYl9mdW5jKCk7Ci0KLS8qIEMrKyBD
YXN0cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1uYW1lc3BhY2UgdXBiIHsK
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFBvaW50ZXI7Ci0KLS8qIENhc3RzIHRvIGEgc3Vi
Y2xhc3MuICBUaGUgY2FsbGVyIG11c3Qga25vdyB0aGF0IGNhc3QgaXMgY29ycmVjdDsgYW4KLSAq
IGluY29ycmVjdCBjYXN0IHdpbGwgdGhyb3cgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaW4gZGVidWcg
bW9kZS4KLSAqCi0gKiBFeGFtcGxlOgotICogICB1cGI6OkRlZiogZGVmID0gR2V0RGVmKCk7Ci0g
KiAgIC8vIEFzc2VydC1mYWlscyBpZiB0aGlzIHdhcyBub3QgYWN0dWFsbHkgYSBNZXNzYWdlRGVm
LgotICogICB1cGI6Ok1lc3NnZURlZiogbWQgPSB1cGI6OmRvd25fY2FzdDx1cGI6Ok1lc3NhZ2VE
ZWY+KGRlZik7Ci0gKgotICogTm90ZSB0aGF0IGRvd25jYXN0cyBhcmUgb25seSBkZWZpbmVkIGZv
ciBzb21lIHR5cGVzIChhdCB0aGUgbW9tZW50IHlvdSBjYW4KLSAqIG9ubHkgZG93bmNhc3QgZnJv
bSBhIHVwYjo6RGVmIHRvIGEgc3BlY2lmaWMgRGVmIHR5cGUpLiAqLwotdGVtcGxhdGU8Y2xhc3Mg
VG8sIGNsYXNzIEZyb20+IFRvIGRvd25fY2FzdChGcm9tKiBmKTsKLQotLyogQ2FzdHMgdG8gYSBz
dWJjbGFzcy4gIElmIHRoZSBjbGFzcyBkb2VzIG5vdCBhY3R1YWxseSBtYXRjaCB0aGUgZ2l2ZW4g
VG8gdHlwZSwKLSAqIHJldHVybnMgTlVMTC4KLSAqCi0gKiBFeGFtcGxlOgotICogICB1cGI6OkRl
ZiogZGVmID0gR2V0RGVmKCk7Ci0gKiAgIC8vIG1kIHdpbGwgYmUgTlVMTCBpZiB0aGlzIHdhcyBu
b3QgYWN0dWFsbHkgYSBNZXNzYWdlRGVmLgotICogICB1cGI6Ok1lc3NnZURlZiogbWQgPSB1cGI6
OmRvd25fY2FzdDx1cGI6Ok1lc3NhZ2VEZWY+KGRlZik7Ci0gKgotICogTm90ZSB0aGF0IGR5bmFt
aWMgY2FzdHMgYXJlIG9ubHkgZGVmaW5lZCBmb3Igc29tZSB0eXBlcyAoYXQgdGhlIG1vbWVudCB5
b3UKLSAqIGNhbiBvbmx5IGRvd25jYXN0IGZyb20gYSB1cGI6OkRlZiB0byBhIHNwZWNpZmljIERl
ZiB0eXBlKS4uICovCi10ZW1wbGF0ZTxjbGFzcyBUbywgY2xhc3MgRnJvbT4gVG8gZHluX2Nhc3Qo
RnJvbSogZik7Ci0KLS8qIENhc3RzIHRvIGFueSBiYXNlIGNsYXNzLCBvciB0aGUgdHlwZSBpdHNl
bGYgKGllLiBjYW4gYmUgYSBuby1vcCkuCi0gKgotICogRXhhbXBsZToKLSAqICAgdXBiOjpNZXNz
YWdlRGVmKiBtZCA9IEdldERlZigpOwotICogICAvLyBUaGlzIHdpbGwgZmFpbCB0byBjb21waWxl
IGlmIHRoaXMgd2Fzbid0IGFjdHVhbGx5IGEgYmFzZSBjbGFzcy4KLSAqICAgdXBiOjpEZWYqIGRl
ZiA9IHVwYjo6dXBjYXN0KG1kKTsKLSAqLwotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBQb2lu
dGVyPFQ+IHVwY2FzdChUICpmKSB7IHJldHVybiBQb2ludGVyPFQ+KGYpOyB9Ci0KLS8qIEF0dGVt
cHQgdXBjYXN0IHRvIHNwZWNpZmljIGJhc2UgY2xhc3MuCi0gKgotICogRXhhbXBsZToKLSAqICAg
dXBiOjpNZXNzYWdlRGVmKiBtZCA9IEdldERlZigpOwotICogICB1cGI6OnVwY2FzdF90bzx1cGI6
OkRlZj4obWQpLT5NZXRob2RPbkRlZigpOwotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
Rj4gaW5saW5lIFQqIHVwY2FzdF90byhGICpmKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxUKj4o
dXBjYXN0KGYpKTsKLX0KLQotLyogUG9pbnRlckJhc2U8VD46IGltcGxlbWVudGF0aW9uIGRldGFp
bCBvZiB1cGI6OnVwY2FzdCgpLgotICogSXQgaXMgaW1wbGljaXRseSBjb252ZXJ0YWJsZSB0byBw
b2ludGVycyB0byB0aGUgQmFzZSBjbGFzcyhlcykuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBCYXNlPgotY2xhc3MgUG9pbnRlckJhc2UgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgUG9p
bnRlckJhc2UoVCogcHRyKSA6IHB0cl8ocHRyKSB7fQotICBvcGVyYXRvciBUKigpIHsgcmV0dXJu
IHB0cl87IH0KLSAgb3BlcmF0b3IgQmFzZSooKSB7IHJldHVybiAoQmFzZSopcHRyXzsgfQotCi0g
cHJpdmF0ZToKLSAgVCogcHRyXzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBCYXNl
LCBjbGFzcyBCYXNlMj4KLWNsYXNzIFBvaW50ZXJCYXNlMiA6IHB1YmxpYyBQb2ludGVyQmFzZTxU
LCBCYXNlPiB7Ci0gcHVibGljOgotICBleHBsaWNpdCBQb2ludGVyQmFzZTIoVCogcHRyKSA6IFBv
aW50ZXJCYXNlPFQsIEJhc2U+KHB0cikge30KLSAgb3BlcmF0b3IgQmFzZTIqKCkgeyByZXR1cm4g
UG9pbnRlcjxCYXNlPigqdGhpcyk7IH0KLX07Ci0KLX0KLQotI2VuZGlmCi0KLQotLyogdXBiOjpy
ZWZmZWRfcHRyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLSNpbmNsdWRlIDxhbGdvcml0
aG0+ICAvKiBGb3Igc3RkOjpzd2FwKCkuICovCi0KLW5hbWVzcGFjZSB1cGIgewotCi0vKiBQcm92
aWRlcyBSQUlJIHNlbWFudGljcyBmb3IgdXBiIHJlZmNvdW50ZWQgb2JqZWN0cy4gIEVhY2ggcmVm
ZmVkX3B0ciBvd25zIGEKLSAqIHJlZiBvbiB3aGF0ZXZlciBvYmplY3QgaXQgcG9pbnRzIHRvIChp
ZiBhbnkpLiAqLwotdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIHJlZmZlZF9wdHIgewotIHB1Ymxp
YzoKLSAgcmVmZmVkX3B0cigpIDogcHRyXyhOVUxMKSB7fQotCi0gIC8qIElmIHJlZl9kb25vciBp
cyBOVUxMLCB0YWtlcyBhIG5ldyByZWYsIG90aGVyd2lzZSBhZG9wdHMgZnJvbSByZWZfZG9ub3Iu
ICovCi0gIHRlbXBsYXRlIDxjbGFzcyBVPgotICByZWZmZWRfcHRyKFUqIHZhbCwgY29uc3Qgdm9p
ZCogcmVmX2Rvbm9yID0gTlVMTCkKLSAgICAgIDogcHRyXyh1cGI6OnVwY2FzdCh2YWwpKSB7Ci0g
ICAgaWYgKHJlZl9kb25vcikgewotICAgICAgYXNzZXJ0KHB0cl8pOwotICAgICAgcHRyXy0+RG9u
YXRlUmVmKHJlZl9kb25vciwgdGhpcyk7Ci0gICAgfSBlbHNlIGlmIChwdHJfKSB7Ci0gICAgICBw
dHJfLT5SZWYodGhpcyk7Ci0gICAgfQotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFU+Ci0gIHJl
ZmZlZF9wdHIoY29uc3QgcmVmZmVkX3B0cjxVPiYgb3RoZXIpCi0gICAgICA6IHB0cl8odXBiOjp1
cGNhc3Qob3RoZXIuZ2V0KCkpKSB7Ci0gICAgaWYgKHB0cl8pIHB0cl8tPlJlZih0aGlzKTsKLSAg
fQotCi0gIH5yZWZmZWRfcHRyKCkgeyBpZiAocHRyXykgcHRyXy0+VW5yZWYodGhpcyk7IH0KLQot
ICB0ZW1wbGF0ZSA8Y2xhc3MgVT4KLSAgcmVmZmVkX3B0ciYgb3BlcmF0b3I9KGNvbnN0IHJlZmZl
ZF9wdHI8VT4mIG90aGVyKSB7Ci0gICAgcmVzZXQob3RoZXIuZ2V0KCkpOwotICAgIHJldHVybiAq
dGhpczsKLSAgfQotCi0gIHJlZmZlZF9wdHImIG9wZXJhdG9yPShjb25zdCByZWZmZWRfcHRyJiBv
dGhlcikgewotICAgIHJlc2V0KG90aGVyLmdldCgpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0K
LQotICAvKiBUT0RPKGhhYmVybWFuKTogYWRkIEMrKzExIG1vdmUgY29uc3RydWN0aW9uL2Fzc2ln
bm1lbnQgZm9yIGdyZWF0ZXIKLSAgICogZWZmaWNpZW5jeS4gKi8KLQotICB2b2lkIHN3YXAocmVm
ZmVkX3B0ciYgb3RoZXIpIHsKLSAgICBpZiAocHRyXyA9PSBvdGhlci5wdHJfKSB7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHB0cl8pIHB0cl8tPkRvbmF0ZVJlZih0aGlzLCAmb3Ro
ZXIpOwotICAgIGlmIChvdGhlci5wdHJfKSBvdGhlci5wdHJfLT5Eb25hdGVSZWYoJm90aGVyLCB0
aGlzKTsKLSAgICBzdGQ6OnN3YXAocHRyXywgb3RoZXIucHRyXyk7Ci0gIH0KLQotICBUJiBvcGVy
YXRvciooKSBjb25zdCB7Ci0gICAgYXNzZXJ0KHB0cl8pOwotICAgIHJldHVybiAqcHRyXzsKLSAg
fQotCi0gIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7Ci0gICAgYXNzZXJ0KHB0cl8pOwotICAgIHJl
dHVybiBwdHJfOwotICB9Ci0KLSAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gcHRyXzsgfQotCi0g
IC8qIElmIHJlZl9kb25vciBpcyBOVUxMLCB0YWtlcyBhIG5ldyByZWYsIG90aGVyd2lzZSBhZG9w
dHMgZnJvbSByZWZfZG9ub3IuICovCi0gIHRlbXBsYXRlIDxjbGFzcyBVPgotICB2b2lkIHJlc2V0
KFUqIHB0ciA9IE5VTEwsIGNvbnN0IHZvaWQqIHJlZl9kb25vciA9IE5VTEwpIHsKLSAgICByZWZm
ZWRfcHRyKHB0ciwgcmVmX2Rvbm9yKS5zd2FwKCp0aGlzKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxj
bGFzcyBVPgotICByZWZmZWRfcHRyPFU+IGRvd25fY2FzdCgpIHsKLSAgICByZXR1cm4gcmVmZmVk
X3B0cjxVPih1cGI6OmRvd25fY2FzdDxVKj4oZ2V0KCkpKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxj
bGFzcyBVPgotICByZWZmZWRfcHRyPFU+IGR5bl9jYXN0KCkgewotICAgIHJldHVybiByZWZmZWRf
cHRyPFU+KHVwYjo6ZHluX2Nhc3Q8VSo+KGdldCgpKSk7Ci0gIH0KLQotICAvKiBQbGFpbiByZWxl
YXNlKCkgaXMgdW5zYWZlOyBpZiB3ZSB3ZXJlIHRoZSBvbmx5IG93bmVyLCBpdCB3b3VsZCBsZWFr
IHRoZQotICAgKiBvYmplY3QuICBJbnN0ZWFkIHdlIHByb3ZpZGUgdGhpczogKi8KLSAgVCogUmVs
ZWFzZVRvKGNvbnN0IHZvaWQqIG5ld19vd25lcikgewotICAgIFQqIHJldCA9IE5VTEw7Ci0gICAg
cHRyXy0+RG9uYXRlUmVmKHRoaXMsIG5ld19vd25lcik7Ci0gICAgc3RkOjpzd2FwKHJldCwgcHRy
Xyk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gcHJpdmF0ZToKLSAgVCogcHRyXzsKLX07Ci0K
LX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLQotI2VuZGlmICAvKiBfX2NwbHVzcGx1cyAqLwotCi0K
LS8qIHVwYjo6U3RhdHVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotbmFtZXNwYWNl
IHVwYiB7Ci1jbGFzcyBFcnJvclNwYWNlOwotY2xhc3MgU3RhdHVzOwotfQotI2VuZGlmCi0KLVVQ
Ql9ERUNMQVJFX1RZUEUodXBiOjpFcnJvclNwYWNlLCB1cGJfZXJyb3JzcGFjZSkKLVVQQl9ERUNM
QVJFX1RZUEUodXBiOjpTdGF0dXMsIHVwYl9zdGF0dXMpCi0KLS8qIFRoZSBtYXhpbXVtIGxlbmd0
aCBvZiBhbiBlcnJvciBtZXNzYWdlIGJlZm9yZSBpdCB3aWxsIGdldCB0cnVuY2F0ZWQuICovCi0j
ZGVmaW5lIFVQQl9TVEFUVVNfTUFYX01FU1NBR0UgMTI4Ci0KLS8qIEFuIGVycm9yIGNhbGxiYWNr
IGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVwb3J0IGVycm9ycyBmcm9tIHNvbWUgY29tcG9uZW50Lgot
ICogVGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gInRydWUiIHRvIGluZGljYXRlIHRoYXQgdGhlIGNv
bXBvbmVudCBzaG91bGQgdHJ5Ci0gKiB0byByZWNvdmVyIGFuZCBwcm9jZWVkLCBidXQgdGhpcyBp
cyBub3QgYWx3YXlzIHBvc3NpYmxlLiAqLwotdHlwZWRlZiBib29sIHVwYl9lcnJjYl90KHZvaWQg
KmNsb3N1cmUsIGNvbnN0IHVwYl9zdGF0dXMqIHN0YXR1cyk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1
cwotY2xhc3MgdXBiOjpFcnJvclNwYWNlIHsKLSNlbHNlCi1zdHJ1Y3QgdXBiX2Vycm9yc3BhY2Ug
ewotI2VuZGlmCi0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIC8qIFNob3VsZCB0aGUgZXJyb3IgbWVz
c2FnZSBpbiB0aGUgc3RhdHVzIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhpcyBjb2RlLiAqLwotICB2
b2lkICgqc2V0X21lc3NhZ2UpKHVwYl9zdGF0dXMqIHN0YXR1cywgaW50IGNvZGUpOwotfTsKLQot
I2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIE9iamVjdCByZXByZXNlbnRpbmcgYSBzdWNjZXNzIG9y
IGZhaWx1cmUgc3RhdHVzLgotICogSXQgb3ducyBubyByZXNvdXJjZXMgYW5kIGFsbG9jYXRlcyBu
byBtZW1vcnksIHNvIGl0IHNob3VsZCB3b3JrCi0gKiBldmVuIGluIE9PTSBzaXR1YXRpb25zLiAq
LwotCi1jbGFzcyB1cGI6OlN0YXR1cyB7Ci0gcHVibGljOgotICBTdGF0dXMoKTsKLQotICAvKiBS
ZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbm8gZXJyb3IuICovCi0gIGJvb2wgb2soKSBjb25zdDsK
LQotICAvKiBPcHRpb25hbCBlcnJvciBzcGFjZSBhbmQgY29kZSwgdXNlZnVsIGlmIHRoZSBjYWxs
ZXIgd2FudHMgdG8KLSAgICogcHJvZ3JhbW1hdGljYWxseSBjaGVjayB0aGUgc3BlY2lmaWMga2lu
ZCBvZiBlcnJvci4gKi8KLSAgRXJyb3JTcGFjZSogZXJyb3Jfc3BhY2UoKTsKLSAgaW50IGNvZGUo
KSBjb25zdDsKLQotICBjb25zdCBjaGFyICplcnJvcl9tZXNzYWdlKCkgY29uc3Q7Ci0KLSAgLyog
VGhlIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSB0cnVuY2F0ZWQgaWYgaXQgaXMgbG9uZ2VyIHRoYW4K
LSAgICogVVBCX1NUQVRVU19NQVhfTUVTU0FHRS00LiAqLwotICB2b2lkIFNldEVycm9yTWVzc2Fn
ZShjb25zdCBjaGFyKiBtc2cpOwotICB2b2lkIFNldEZvcm1hdHRlZEVycm9yTWVzc2FnZShjb25z
dCBjaGFyKiBmbXQsIC4uLik7Ci0KLSAgLyogSWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZSBh
bHJlYWR5LCB0aGlzIHdpbGwgdXNlIHRoZSBFcnJvclNwYWNlIHRvCi0gICAqIHBvcHVsYXRlIHRo
ZSBlcnJvciBtZXNzYWdlIGZvciB0aGlzIGNvZGUuICBUaGUgY2FsbGVyIGNhbiBzdGlsbCBjYWxs
Ci0gICAqIFNldEVycm9yTWVzc2FnZSgpIHRvIGdpdmUgYSBtb3JlIHNwZWNpZmljIG1lc3NhZ2Uu
ICovCi0gIHZvaWQgU2V0RXJyb3JDb2RlKEVycm9yU3BhY2UqIHNwYWNlLCBpbnQgY29kZSk7Ci0K
LSAgLyogUmVzZXRzIHRoZSBzdGF0dXMgdG8gYSBzdWNjZXNzZnVsIHN0YXRlIHdpdGggbm8gbWVz
c2FnZS4gKi8KLSAgdm9pZCBDbGVhcigpOwotCi0gIHZvaWQgQ29weUZyb20oY29uc3QgU3RhdHVz
JiBvdGhlcik7Ci0KLSBwcml2YXRlOgotICBVUEJfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN0
YXR1cykKLSNlbHNlCi1zdHJ1Y3QgdXBiX3N0YXR1cyB7Ci0jZW5kaWYKLSAgYm9vbCBva187Ci0K
LSAgLyogU3BlY2lmaWMgc3RhdHVzIGNvZGUgZGVmaW5lZCBieSBzb21lIGVycm9yIHNwYWNlIChv
cHRpb25hbCkuICovCi0gIGludCBjb2RlXzsKLSAgdXBiX2Vycm9yc3BhY2UgKmVycm9yX3NwYWNl
XzsKLQotICAvKiBFcnJvciBtZXNzYWdlOyBOVUxMLXRlcm1pbmF0ZWQuICovCi0gIGNoYXIgbXNn
W1VQQl9TVEFUVVNfTUFYX01FU1NBR0VdOwotfTsKLQotI2RlZmluZSBVUEJfU1RBVFVTX0lOSVQg
e3RydWUsIDAsIE5VTEwsIHswfX0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsK
LSNlbmRpZgotCi0vKiBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIGludmFsaWRhdGVkIGJ5IGFueSBv
dGhlciBjYWxsIGludG8gdGhlIHN0YXR1cy4gKi8KLWNvbnN0IGNoYXIgKnVwYl9zdGF0dXNfZXJy
bXNnKGNvbnN0IHVwYl9zdGF0dXMgKnN0YXR1cyk7Ci1ib29sIHVwYl9vayhjb25zdCB1cGJfc3Rh
dHVzICpzdGF0dXMpOwotdXBiX2Vycm9yc3BhY2UgKnVwYl9zdGF0dXNfZXJyc3BhY2UoY29uc3Qg
dXBiX3N0YXR1cyAqc3RhdHVzKTsKLWludCB1cGJfc3RhdHVzX2VycmNvZGUoY29uc3QgdXBiX3N0
YXR1cyAqc3RhdHVzKTsKLQotLyogQW55IG9mIHRoZSBmdW5jdGlvbnMgdGhhdCB3cml0ZSB0byBh
IHN0YXR1cyBvYmplY3QgYWxsb3cgc3RhdHVzIHRvIGJlIE5VTEwsCi0gKiB0byBzdXBwb3J0IHVz
ZSBjYXNlcyB3aGVyZSB0aGUgZnVuY3Rpb24ncyBjYWxsZXIgZG9lcyBub3QgY2FyZSBhYm91dCB0
aGUKLSAqIHN0YXR1cyBtZXNzYWdlLiAqLwotdm9pZCB1cGJfc3RhdHVzX2NsZWFyKHVwYl9zdGF0
dXMgKnN0YXR1cyk7Ci12b2lkIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHVwYl9zdGF0dXMgKnN0YXR1
cywgY29uc3QgY2hhciAqbXNnKTsKLXZvaWQgdXBiX3N0YXR1c19zZXRlcnJmKHVwYl9zdGF0dXMg
KnN0YXR1cywgY29uc3QgY2hhciAqZm10LCAuLi4pOwotdm9pZCB1cGJfc3RhdHVzX3ZzZXRlcnJm
KHVwYl9zdGF0dXMgKnN0YXR1cywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwotdm9p
ZCB1cGJfc3RhdHVzX3NldGVycmNvZGUodXBiX3N0YXR1cyAqc3RhdHVzLCB1cGJfZXJyb3JzcGFj
ZSAqc3BhY2UsIGludCBjb2RlKTsKLXZvaWQgdXBiX3N0YXR1c19jb3B5KHVwYl9zdGF0dXMgKnRv
LCBjb25zdCB1cGJfc3RhdHVzICpmcm9tKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19ICAvKiBl
eHRlcm4gIkMiICovCi0KLW5hbWVzcGFjZSB1cGIgewotCi0vKiBDKysgV3JhcHBlcnMgKi8KLWlu
bGluZSBTdGF0dXM6OlN0YXR1cygpIHsgQ2xlYXIoKTsgfQotaW5saW5lIGJvb2wgU3RhdHVzOjpv
aygpIGNvbnN0IHsgcmV0dXJuIHVwYl9vayh0aGlzKTsgfQotaW5saW5lIGNvbnN0IGNoYXIqIFN0
YXR1czo6ZXJyb3JfbWVzc2FnZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9zdGF0dXNfZXJybXNn
KHRoaXMpOwotfQotaW5saW5lIHZvaWQgU3RhdHVzOjpTZXRFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogbXNnKSB7Ci0gIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHRoaXMsIG1zZyk7Ci19Ci1pbmxpbmUg
dm9pZCBTdGF0dXM6OlNldEZvcm1hdHRlZEVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBmbXQsIC4u
LikgewotICB2YV9saXN0IGFyZ3M7Ci0gIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0gIHVwYl9zdGF0
dXNfdnNldGVycmYodGhpcywgZm10LCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotfQotaW5saW5l
IHZvaWQgU3RhdHVzOjpTZXRFcnJvckNvZGUoRXJyb3JTcGFjZSogc3BhY2UsIGludCBjb2RlKSB7
Ci0gIHVwYl9zdGF0dXNfc2V0ZXJyY29kZSh0aGlzLCBzcGFjZSwgY29kZSk7Ci19Ci1pbmxpbmUg
dm9pZCBTdGF0dXM6OkNsZWFyKCkgeyB1cGJfc3RhdHVzX2NsZWFyKHRoaXMpOyB9Ci1pbmxpbmUg
dm9pZCBTdGF0dXM6OkNvcHlGcm9tKGNvbnN0IFN0YXR1cyYgb3RoZXIpIHsKLSAgdXBiX3N0YXR1
c19jb3B5KHRoaXMsICZvdGhlcik7Ci19Ci0KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLQotI2Vu
ZGlmCi0KLSNlbmRpZiAgLyogVVBCX0hfICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJu
ICJDIiB7Ci0jZW5kaWYKLQotCi0vKiB1cGJfdmFsdWUgKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBBIHRhZ2dl
ZCB1bmlvbiAoc3RvcmVkIHVudGFnZ2VkIGluc2lkZSB0aGUgdGFibGUpIHNvIHRoYXQgd2UgY2Fu
IGNoZWNrIHRoYXQKLSAqIGNsaWVudHMgY2FsbGluZyB0YWJsZSBhY2Nlc3NvcnMgYXJlIGNvcnJl
Y3RseSB0eXBlZCB3aXRob3V0IGhhdmluZyB0byBoYXZlCi0gKiBhbiBleHBsb3Npb24gb2YgYWNj
ZXNzb3JzLiAqLwotdHlwZWRlZiBlbnVtIHsKLSAgVVBCX0NUWVBFX0lOVDMyICAgID0gMSwKLSAg
VVBCX0NUWVBFX0lOVDY0ICAgID0gMiwKLSAgVVBCX0NUWVBFX1VJTlQzMiAgID0gMywKLSAgVVBC
X0NUWVBFX1VJTlQ2NCAgID0gNCwKLSAgVVBCX0NUWVBFX0JPT0wgICAgID0gNSwKLSAgVVBCX0NU
WVBFX0NTVFIgICAgID0gNiwKLSAgVVBCX0NUWVBFX1BUUiAgICAgID0gNywKLSAgVVBCX0NUWVBF
X0NPTlNUUFRSID0gOCwKLSAgVVBCX0NUWVBFX0ZQVFIgICAgID0gOQotfSB1cGJfY3R5cGVfdDsK
LQotdHlwZWRlZiBzdHJ1Y3QgewotICB1aW50NjRfdCB2YWw7Ci0jaWZuZGVmIE5ERUJVRwotICAv
KiBJbiBkZWJ1ZyBtb2RlIHdlIGNhcnJ5IHRoZSB2YWx1ZSB0eXBlIGFyb3VuZCBhbHNvIHNvIHdl
IGNhbiBjaGVjayBhY2Nlc3NlcwotICAgKiB0byBiZSBzdXJlIHRoZSByaWdodCBtZW1iZXIgaXMg
YmVpbmcgcmVhZC4gKi8KLSAgdXBiX2N0eXBlX3QgY3R5cGU7Ci0jZW5kaWYKLX0gdXBiX3ZhbHVl
OwotCi0jaWZkZWYgTkRFQlVHCi0jZGVmaW5lIFNFVF9UWVBFKGRlc3QsIHZhbCkgICAgICBVUEJf
VU5VU0VEKHZhbCkKLSNlbHNlCi0jZGVmaW5lIFNFVF9UWVBFKGRlc3QsIHZhbCkgZGVzdCA9IHZh
bAotI2VuZGlmCi0KLS8qIExpa2Ugc3RyZHVwKCksIHdoaWNoIGlzbid0IGFsd2F5cyBhdmFpbGFi
bGUgc2luY2UgaXQncyBub3QgQU5TSSBDLiAqLwotY2hhciAqdXBiX3N0cmR1cChjb25zdCBjaGFy
ICpzKTsKLS8qIFZhcmlhbnQgdGhhdCB3b3JrcyB3aXRoIGEgbGVuZ3RoLWRlbGltaXRlZCByYXRo
ZXIgdGhhbiBOVUxMLWRlbGltaXRlZCBzdHJpbmcsCi0gKiBhcyBzdXBwb3J0ZWQgYnkgc3RydGFi
bGUuICovCi1jaGFyICp1cGJfc3RyZHVwMihjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuKTsKLQot
VVBCX0lOTElORSB2b2lkIF91cGJfdmFsdWVfc2V0dmFsKHVwYl92YWx1ZSAqdiwgdWludDY0X3Qg
dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9jdHlwZV90IGN0eXBl
KSB7Ci0gIHYtPnZhbCA9IHZhbDsKLSAgU0VUX1RZUEUodi0+Y3R5cGUsIGN0eXBlKTsKLX0KLQot
VVBCX0lOTElORSB1cGJfdmFsdWUgX3VwYl92YWx1ZV92YWwodWludDY0X3QgdmFsLCB1cGJfY3R5
cGVfdCBjdHlwZSkgewotICB1cGJfdmFsdWUgcmV0OwotICBfdXBiX3ZhbHVlX3NldHZhbCgmcmV0
LCB2YWwsIGN0eXBlKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyogRm9yIGVhY2ggdmFsdWUgY3R5
cGUsIGRlZmluZSB0aGUgZm9sbG93aW5nIHNldCBvZiBmdW5jdGlvbnM6Ci0gKgotICogLy8gR2V0
L3NldCBhbiBpbnQzMiBmcm9tIGEgdXBiX3ZhbHVlLgotICogaW50MzJfdCB1cGJfdmFsdWVfZ2V0
aW50MzIodXBiX3ZhbHVlIHZhbCk7Ci0gKiB2b2lkIHVwYl92YWx1ZV9zZXRpbnQzMih1cGJfdmFs
dWUgKnZhbCwgaW50MzJfdCBjdmFsKTsKLSAqCi0gKiAvLyBDb25zdHJ1Y3QgYSBuZXcgdXBiX3Zh
bHVlIGZyb20gYW4gaW50MzIuCi0gKiB1cGJfdmFsdWUgdXBiX3ZhbHVlX2ludDMyKGludDMyX3Qg
dmFsKTsgKi8KLSNkZWZpbmUgRlVOQ1MobmFtZSwgbWVtYmVybmFtZSwgdHlwZV90LCBjb252ZXJ0
ZXIsIHByb3RvX3R5cGUpIFwKLSAgVVBCX0lOTElORSB2b2lkIHVwYl92YWx1ZV9zZXQgIyMgbmFt
ZSh1cGJfdmFsdWUgKnZhbCwgdHlwZV90IGN2YWwpIHsgXAotICAgIHZhbC0+dmFsID0gKGNvbnZl
cnRlciljdmFsOyBcCi0gICAgU0VUX1RZUEUodmFsLT5jdHlwZSwgcHJvdG9fdHlwZSk7IFwKLSAg
fSBcCi0gIFVQQl9JTkxJTkUgdXBiX3ZhbHVlIHVwYl92YWx1ZV8gIyMgbmFtZSh0eXBlX3QgdmFs
KSB7IFwKLSAgICB1cGJfdmFsdWUgcmV0OyBcCi0gICAgdXBiX3ZhbHVlX3NldCAjIyBuYW1lKCZy
ZXQsIHZhbCk7IFwKLSAgICByZXR1cm4gcmV0OyBcCi0gIH0gXAotICBVUEJfSU5MSU5FIHR5cGVf
dCB1cGJfdmFsdWVfZ2V0ICMjIG5hbWUodXBiX3ZhbHVlIHZhbCkgeyBcCi0gICAgYXNzZXJ0KHZh
bC5jdHlwZSA9PSBwcm90b190eXBlKTsgXAotICAgIHJldHVybiAodHlwZV90KShjb252ZXJ0ZXIp
dmFsLnZhbDsgXAotICB9Ci0KLUZVTkNTKGludDMyLCAgICBpbnQzMiwgICAgICAgIGludDMyX3Qs
ICAgICAgaW50MzJfdCwgICAgVVBCX0NUWVBFX0lOVDMyKQotRlVOQ1MoaW50NjQsICAgIGludDY0
LCAgICAgICAgaW50NjRfdCwgICAgICBpbnQ2NF90LCAgICBVUEJfQ1RZUEVfSU5UNjQpCi1GVU5D
Uyh1aW50MzIsICAgdWludDMyLCAgICAgICB1aW50MzJfdCwgICAgIHVpbnQzMl90LCAgIFVQQl9D
VFlQRV9VSU5UMzIpCi1GVU5DUyh1aW50NjQsICAgdWludDY0LCAgICAgICB1aW50NjRfdCwgICAg
IHVpbnQ2NF90LCAgIFVQQl9DVFlQRV9VSU5UNjQpCi1GVU5DUyhib29sLCAgICAgX2Jvb2wsICAg
ICAgICBib29sLCAgICAgICAgIGJvb2wsICAgICAgIFVQQl9DVFlQRV9CT09MKQotRlVOQ1MoY3N0
ciwgICAgIGNzdHIsICAgICAgICAgY2hhciosICAgICAgICB1aW50cHRyX3QsICBVUEJfQ1RZUEVf
Q1NUUikKLUZVTkNTKHB0ciwgICAgICBwdHIsICAgICAgICAgIHZvaWQqLCAgICAgICAgdWludHB0
cl90LCAgVVBCX0NUWVBFX1BUUikKLUZVTkNTKGNvbnN0cHRyLCBjb25zdHB0ciwgICAgIGNvbnN0
IHZvaWQqLCAgdWludHB0cl90LCAgVVBCX0NUWVBFX0NPTlNUUFRSKQotRlVOQ1MoZnB0ciwgICAg
IGZwdHIsICAgICAgICAgdXBiX2Z1bmMqLCAgICB1aW50cHRyX3QsICBVUEJfQ1RZUEVfRlBUUikK
LQotI3VuZGVmIEZVTkNTCi0jdW5kZWYgU0VUX1RZUEUKLQotCi0vKiB1cGJfdGFia2V5ICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwotCi0vKiBFaXRoZXI6Ci0gKiAgIDEuIGFuIGFjdHVhbCBpbnRlZ2VyIGtleSwgb3IKLSAq
ICAgMi4gYSBwb2ludGVyIHRvIGEgc3RyaW5nIHByZWZpeGVkIGJ5IGl0cyB1aW50MzJfdCBsZW5n
dGgsIG93bmVkIGJ5IHVzLgotICoKLSAqIC4uLmRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMg
YSBzdHJpbmcgdGFibGUgb3IgYW4gaW50IHRhYmxlLiAgV2Ugd291bGQKLSAqIG1ha2UgdGhpcyBh
IHVuaW9uIG9mIHRob3NlIHR3byB0eXBlcywgYnV0IEM4OSBkb2Vzbid0IHN1cHBvcnQgc3RhdGlj
YWxseQotICogaW5pdGlhbGl6aW5nIGEgbm9uLWZpcnN0IHVuaW9uIG1lbWJlci4gKi8KLXR5cGVk
ZWYgdWludHB0cl90IHVwYl90YWJrZXk7Ci0KLSNkZWZpbmUgVVBCX1RBQktFWV9OVU0obikgbgot
I2RlZmluZSBVUEJfVEFCS0VZX05PTkUgMAotLyogVGhlIHByZXByb2Nlc3NvciBpc24ndCBxdWl0
ZSBwb3dlcmZ1bCBlbm91Z2ggdG8gdHVybiB0aGUgY29tcGlsZS10aW1lIHN0cmluZwotICogbGVu
Z3RoIGludG8gYSBieXRlLXdpc2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBzbyBjb2RlIGdlbmVy
YXRpb24gbmVlZHMgdG8KLSAqIGhlbHAgaXQgYWxvbmcuCi0gKgotICogImxlbjEiIGlzIHRoZSBs
b3cgYnl0ZSBhbmQgbGVuNCBpcyB0aGUgaGlnaCBieXRlLiAqLwotI2lmZGVmIFVQQl9CSUdfRU5E
SUFOCi0jZGVmaW5lIFVQQl9UQUJLRVlfU1RSKGxlbjEsIGxlbjIsIGxlbjMsIGxlbjQsIHN0cnZh
bCkgXAotICAgICh1aW50cHRyX3QpKGxlbjQgbGVuMyBsZW4yIGxlbjEgc3RydmFsKQotI2Vsc2UK
LSNkZWZpbmUgVVBCX1RBQktFWV9TVFIobGVuMSwgbGVuMiwgbGVuMywgbGVuNCwgc3RydmFsKSBc
Ci0gICAgKHVpbnRwdHJfdCkobGVuMSBsZW4yIGxlbjMgbGVuNCBzdHJ2YWwpCi0jZW5kaWYKLQot
VVBCX0lOTElORSBjaGFyICp1cGJfdGFic3RyKHVwYl90YWJrZXkga2V5LCB1aW50MzJfdCAqbGVu
KSB7Ci0gIGNoYXIqIG1lbSA9IChjaGFyKilrZXk7Ci0gIGlmIChsZW4pIG1lbWNweShsZW4sIG1l
bSwgc2l6ZW9mKCpsZW4pKTsKLSAgcmV0dXJuIG1lbSArIHNpemVvZigqbGVuKTsKLX0KLQotCi0v
KiB1cGJfdGFidmFsICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogU3RhdHVz
IGluaXRpYWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQuCi0gKgotICogVGhpcyBzZXBhcmF0ZSBkZWZp
bml0aW9uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGluIEMrKywgVUlOVFBUUl9NQVggaXNuJ3QKLSAq
IHJlbGlhYmx5IGF2YWlsYWJsZS4gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgdWludDY0X3QgdmFs
OwotfSB1cGJfdGFidmFsOwotCi0jZWxzZQotCi0vKiBDIC0tIHN1cHBvcnRzIHN0YXRpYyBpbml0
aWFsaXphdGlvbiwgYnV0IHRvIHN1cHBvcnQgc3RhdGljIGluaXRpYWxpemF0aW9uIG9mCi0gKiBi
b3RoIGludGVnZXJzIGFuZCBwb2ludHMgZm9yIGJvdGggMzIgYW5kIDY0IGJpdCB0YXJnZXRzLCBp
dCB0YWtlcyBhIGxpdHRsZQotICogYml0IG9mIGRvaW5nLiAqLwotCi0jaWYgVUlOVFBUUl9NQVgg
PT0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMCi0jZGVmaW5lIFVQQl9QVFJfSVNfNjRCSVRTCi0jZWxp
ZiBVSU5UUFRSX01BWCAhPSAweGZmZmZmZmZmCi0jZXJyb3IgQ291bGQgbm90IGRldGVybWluZSBo
b3cgbWFueSBiaXRzIHBvaW50ZXJzIGFyZS4KLSNlbmRpZgotCi10eXBlZGVmIHVuaW9uIHsKLSAg
LyogRm9yIHN0YXRpYyBpbml0aWFsaXphdGlvbi4KLSAgICoKLSAgICogVW5mb3J0dW5hdGVseSB0
aGlzIHVnbGluZXNzIGlzIG5lY2Vzc2FyeSAtLSBpdCBpcyB0aGUgb25seSB3YXkgdGhhdCB3ZSBj
YW4sCi0gICAqIHdpdGggLXN0ZD1jODkgLXBlZGFudGljLCBzdGF0aWNhbGx5IGluaXRpYWxpemUg
dGhpcyB0byBlaXRoZXIgYSBwb2ludGVyIG9yCi0gICAqIGFuIGludGVnZXIgb24gMzItYml0IHBs
YXRmb3Jtcy4gKi8KLSAgc3RydWN0IHsKLSNpZmRlZiBVUEJfUFRSX0lTXzY0QklUUwotICAgIHVp
bnRwdHJfdCB2YWw7Ci0jZWxzZQotICAgIHVpbnRwdHJfdCB2YWwxOwotICAgIHVpbnRwdHJfdCB2
YWwyOwotI2VuZGlmCi0gIH0gc3RhdGljaW5pdDsKLQotICAvKiBUaGUgbm9ybWFsIGFjY2Vzc29y
IHRoYXQgd2UgdXNlIGZvciBldmVyeXRoaW5nIGF0IHJ1bnRpbWUuICovCi0gIHVpbnQ2NF90IHZh
bDsKLX0gdXBiX3RhYnZhbDsKLQotI2lmZGVmIFVQQl9QVFJfSVNfNjRCSVRTCi0jZGVmaW5lIFVQ
Ql9UQUJWQUxVRV9JTlRfSU5JVCh2KSB7e3Z9fQotI2RlZmluZSBVUEJfVEFCVkFMVUVfRU1QVFlf
SU5JVCAge3stMX19Ci0jZWxzZQotCi0vKiAzMi1iaXQgcG9pbnRlcnMgKi8KLQotI2lmZGVmIFVQ
Ql9CSUdfRU5ESUFOCi0jZGVmaW5lIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCh2KSB7ezAsIHZ9fQot
I2RlZmluZSBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCAge3stMSwgLTF9fQotI2Vsc2UKLSNkZWZp
bmUgVVBCX1RBQlZBTFVFX0lOVF9JTklUKHYpIHt7diwgMH19Ci0jZGVmaW5lIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklUICB7ey0xLCAtMX19Ci0jZW5kaWYKLQotI2VuZGlmCi0KLSNkZWZpbmUgVVBC
X1RBQlZBTFVFX1BUUl9JTklUKHYpIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCgodWludHB0cl90KXYp
Ci0KLSN1bmRlZiBVUEJfUFRSX0lTXzY0QklUUwotCi0jZW5kaWYgIC8qIF9fY3BsdXNwbHVzICov
Ci0KLQotLyogdXBiX3RhYmxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdHlwZWRlZiBzdHJ1Y3QgX3VwYl90YWJl
bnQgewotICB1cGJfdGFia2V5IGtleTsKLSAgdXBiX3RhYnZhbCB2YWw7Ci0KLSAgLyogSW50ZXJu
YWwgY2hhaW5pbmcuICBUaGlzIGlzIGNvbnN0IHNvIHdlIGNhbiBjcmVhdGUgc3RhdGljIGluaXRp
YWxpemVycyBmb3IKLSAgICogdGFibGVzLiAgV2UgY2FzdCBhd2F5IGNvbnN0IHNvbWV0aW1lcywg
YnV0ICpvbmx5KiB3aGVuIHRoZSBjb250YWluaW5nCi0gICAqIHVwYl90YWJsZSBpcyBrbm93biB0
byBiZSBub24tY29uc3QuICBUaGlzIHJlcXVpcmVzIGEgYml0IG9mIGNhcmUsIGJ1dAotICAgKiB0
aGUgc3VidGxldHkgaXMgY29uZmluZWQgdG8gdGFibGUuYy4gKi8KLSAgY29uc3Qgc3RydWN0IF91
cGJfdGFiZW50ICpuZXh0OwotfSB1cGJfdGFiZW50OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHNp
emVfdCBjb3VudDsgICAgICAgICAgLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGhhc2ggcGFy
dC4gKi8KLSAgc2l6ZV90IG1hc2s7ICAgICAgICAgICAvKiBNYXNrIHRvIHR1cm4gaGFzaCB2YWx1
ZSAtPiBidWNrZXQuICovCi0gIHVwYl9jdHlwZV90IGN0eXBlOyAgICAgLyogVHlwZSBvZiBhbGwg
dmFsdWVzLiAqLwotICB1aW50OF90IHNpemVfbGcyOyAgICAgIC8qIFNpemUgb2YgdGhlIGhhc2h0
YWJsZSBwYXJ0IGlzIDJec2l6ZV9sZzIgZW50cmllcy4gKi8KLQotICAvKiBIYXNoIHRhYmxlIGVu
dHJpZXMuCi0gICAqIE1ha2luZyB0aGlzIGNvbnN0IGlzbid0IGVudGlyZWx5IGFjY3VyYXRlOyB3
aGF0IHdlIHJlYWxseSB3YW50IGlzIGZvciBpdCB0bwotICAgKiBoYXZlIHRoZSBzYW1lIGNvbnN0
LW5lc3MgYXMgdGhlIHRhYmxlIGl0J3MgaW5zaWRlLiAgQnV0IHRoZXJlJ3Mgbm8gd2F5IHRvCi0g
ICAqIGRlY2xhcmUgdGhhdCBpbiBDLiAgU28gd2UgaGF2ZSB0byBtYWtlIGl0IGNvbnN0IHNvIHRo
YXQgd2UgY2FuIHN0YXRpY2FsbHkKLSAgICogaW5pdGlhbGl6ZSBjb25zdCBoYXNoIHRhYmxlcy4g
IFRoZW4gd2UgY2FzdCBhd2F5IGNvbnN0IHdoZW4gd2UgaGF2ZSB0by4KLSAgICovCi0gIGNvbnN0
IHVwYl90YWJlbnQgKmVudHJpZXM7Ci19IHVwYl90YWJsZTsKLQotdHlwZWRlZiBzdHJ1Y3Qgewot
ICB1cGJfdGFibGUgdDsKLX0gdXBiX3N0cnRhYmxlOwotCi0jZGVmaW5lIFVQQl9TVFJUQUJMRV9J
TklUKGNvdW50LCBtYXNrLCBjdHlwZSwgc2l6ZV9sZzIsIGVudHJpZXMpIFwKLSAge3tjb3VudCwg
bWFzaywgY3R5cGUsIHNpemVfbGcyLCBlbnRyaWVzfX0KLQotI2RlZmluZSBVUEJfRU1QVFlfU1RS
VEFCTEVfSU5JVChjdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9TVFJU
QUJMRV9JTklUKDAsIDAsIGN0eXBlLCAwLCBOVUxMKQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHVw
Yl90YWJsZSB0OyAgICAgICAgICAgICAgLyogRm9yIGVudHJpZXMgdGhhdCBkb24ndCBmaXQgaW4g
dGhlIGFycmF5IHBhcnQuICovCi0gIGNvbnN0IHVwYl90YWJ2YWwgKmFycmF5OyAgLyogQXJyYXkg
cGFydCBvZiB0aGUgdGFibGUuIFNlZSBjb25zdCBub3RlIGFib3ZlLiAqLwotICBzaXplX3QgYXJy
YXlfc2l6ZTsgICAgICAgIC8qIEFycmF5IHBhcnQgc2l6ZS4gKi8KLSAgc2l6ZV90IGFycmF5X2Nv
dW50OyAgICAgICAvKiBBcnJheSBwYXJ0IG51bWJlciBvZiBlbGVtZW50cy4gKi8KLX0gdXBiX2lu
dHRhYmxlOwotCi0jZGVmaW5lIFVQQl9JTlRUQUJMRV9JTklUKGNvdW50LCBtYXNrLCBjdHlwZSwg
c2l6ZV9sZzIsIGVudCwgYSwgYXNpemUsIGFjb3VudCkgXAotICB7e2NvdW50LCBtYXNrLCBjdHlw
ZSwgc2l6ZV9sZzIsIGVudH0sIGEsIGFzaXplLCBhY291bnR9Ci0KLSNkZWZpbmUgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoY3R5cGUpIFwKLSAgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgY3R5cGUs
IDAsIE5VTEwsIE5VTEwsIDAsIDApCi0KLSNkZWZpbmUgVVBCX0FSUkFZX0VNUFRZRU5UIC0xCi0K
LVVQQl9JTkxJTkUgc2l6ZV90IHVwYl90YWJsZV9zaXplKGNvbnN0IHVwYl90YWJsZSAqdCkgewot
ICBpZiAodC0+c2l6ZV9sZzIgPT0gMCkKLSAgICByZXR1cm4gMDsKLSAgZWxzZQotICAgIHJldHVy
biAxIDw8IHQtPnNpemVfbGcyOwotfQotCi0vKiBJbnRlcm5hbC1vbmx5IGZ1bmN0aW9ucywgaW4g
LmggZmlsZSBvbmx5IG91dCBvZiBuZWNlc3NpdHkuICovCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3Rh
YmVudF9pc2VtcHR5KGNvbnN0IHVwYl90YWJlbnQgKmUpIHsKLSAgcmV0dXJuIGUtPmtleSA9PSAw
OwotfQotCi0vKiBVc2VkIGJ5IHNvbWUgb2YgdGhlIHVuaXQgdGVzdHMgZm9yIGdlbmVyaWMgaGFz
aGluZyBmdW5jdGlvbmFsaXR5LiAqLwotdWludDMyX3QgTXVybXVySGFzaDIoY29uc3Qgdm9pZCAq
IGtleSwgc2l6ZV90IGxlbiwgdWludDMyX3Qgc2VlZCk7Ci0KLVVQQl9JTkxJTkUgdWludHB0cl90
IHVwYl9pbnRrZXkodWludHB0cl90IGtleSkgewotICByZXR1cm4ga2V5OwotfQotCi1VUEJfSU5M
SU5FIHVpbnQzMl90IHVwYl9pbnRoYXNoKHVpbnRwdHJfdCBrZXkpIHsKLSAgcmV0dXJuICh1aW50
MzJfdClrZXk7Ci19Ci0KLXN0YXRpYyBjb25zdCB1cGJfdGFiZW50ICp1cGJfZ2V0ZW50cnkoY29u
c3QgdXBiX3RhYmxlICp0LCB1aW50MzJfdCBoYXNoKSB7Ci0gIHJldHVybiB0LT5lbnRyaWVzICsg
KGhhc2ggJiB0LT5tYXNrKTsKLX0KLQotVVBCX0lOTElORSBib29sIHVwYl9hcnJoYXModXBiX3Rh
YnZhbCBrZXkpIHsKLSAgcmV0dXJuIGtleS52YWwgIT0gKHVpbnQ2NF90KS0xOwotfQotCi0vKiBJ
bml0aWFsaXplIGFuZCB1bmluaXRpYWxpemUgYSB0YWJsZSwgcmVzcGVjdGl2ZWx5LiAgSWYgbWVt
b3J5IGFsbG9jYXRpb24KLSAqIGZhaWxlZCwgZmFsc2UgaXMgcmV0dXJuZWQgdGhhdCB0aGUgdGFi
bGUgaXMgdW5pbml0aWFsaXplZC4gKi8KLWJvb2wgdXBiX2ludHRhYmxlX2luaXQodXBiX2ludHRh
YmxlICp0YWJsZSwgdXBiX2N0eXBlX3QgY3R5cGUpOwotYm9vbCB1cGJfc3RydGFibGVfaW5pdCh1
cGJfc3RydGFibGUgKnRhYmxlLCB1cGJfY3R5cGVfdCBjdHlwZSk7Ci12b2lkIHVwYl9pbnR0YWJs
ZV91bmluaXQodXBiX2ludHRhYmxlICp0YWJsZSk7Ci12b2lkIHVwYl9zdHJ0YWJsZV91bmluaXQo
dXBiX3N0cnRhYmxlICp0YWJsZSk7Ci0KLS8qIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMg
aW4gdGhlIHRhYmxlLiAqLwotc2l6ZV90IHVwYl9pbnR0YWJsZV9jb3VudChjb25zdCB1cGJfaW50
dGFibGUgKnQpOwotVVBCX0lOTElORSBzaXplX3QgdXBiX3N0cnRhYmxlX2NvdW50KGNvbnN0IHVw
Yl9zdHJ0YWJsZSAqdCkgewotICByZXR1cm4gdC0+dC5jb3VudDsKLX0KLQotLyogSW5zZXJ0cyB0
aGUgZ2l2ZW4ga2V5IGludG8gdGhlIGhhc2h0YWJsZSB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4gIFRo
ZSBrZXkgbXVzdAotICogbm90IGFscmVhZHkgZXhpc3QgaW4gdGhlIGhhc2ggdGFibGUuICBGb3Ig
c3RyaW5nIHRhYmxlcywgdGhlIGtleSBtdXN0IGJlCi0gKiBOVUxMLXRlcm1pbmF0ZWQsIGFuZCB0
aGUgdGFibGUgd2lsbCBtYWtlIGFuIGludGVybmFsIGNvcHkgb2YgdGhlIGtleS4KLSAqIEludHRh
YmxlcyBtdXN0IG5vdCBpbnNlcnQgYSB2YWx1ZSBvZiBVSU5UUFRSX01BWC4KLSAqCi0gKiBJZiBh
IHRhYmxlIHJlc2l6ZSB3YXMgcmVxdWlyZWQgYnV0IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwg
ZmFsc2UgaXMKLSAqIHJldHVybmVkIGFuZCB0aGUgdGFibGUgaXMgdW5jaGFuZ2VkLiAqLwotYm9v
bCB1cGJfaW50dGFibGVfaW5zZXJ0KHVwYl9pbnR0YWJsZSAqdCwgdWludHB0cl90IGtleSwgdXBi
X3ZhbHVlIHZhbCk7Ci1ib29sIHVwYl9zdHJ0YWJsZV9pbnNlcnQyKHVwYl9zdHJ0YWJsZSAqdCwg
Y29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1
cGJfdmFsdWUgdmFsKTsKLQotLyogRm9yIE5VTEwtdGVybWluYXRlZCBzdHJpbmdzLiAqLwotVVBC
X0lOTElORSBib29sIHVwYl9zdHJ0YWJsZV9pbnNlcnQodXBiX3N0cnRhYmxlICp0LCBjb25zdCBj
aGFyICprZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfdmFsdWUg
dmFsKSB7Ci0gIHJldHVybiB1cGJfc3RydGFibGVfaW5zZXJ0Mih0LCBrZXksIHN0cmxlbihrZXkp
LCB2YWwpOwotfQotCi0vKiBMb29rcyB1cCBrZXkgaW4gdGhpcyB0YWJsZSwgcmV0dXJuaW5nICJ0
cnVlIiBpZiB0aGUga2V5IHdhcyBmb3VuZC4KLSAqIElmIHYgaXMgbm9uLU5VTEwsIGNvcGllcyB0
aGUgdmFsdWUgZm9yIHRoaXMga2V5IGludG8gKnYuICovCi1ib29sIHVwYl9pbnR0YWJsZV9sb29r
dXAoY29uc3QgdXBiX2ludHRhYmxlICp0LCB1aW50cHRyX3Qga2V5LCB1cGJfdmFsdWUgKnYpOwot
Ym9vbCB1cGJfc3RydGFibGVfbG9va3VwMihjb25zdCB1cGJfc3RydGFibGUgKnQsIGNvbnN0IGNo
YXIgKmtleSwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3ZhbHVl
ICp2KTsKLQotLyogRm9yIE5VTEwtdGVybWluYXRlZCBzdHJpbmdzLiAqLwotVVBCX0lOTElORSBi
b29sIHVwYl9zdHJ0YWJsZV9sb29rdXAoY29uc3QgdXBiX3N0cnRhYmxlICp0LCBjb25zdCBjaGFy
ICprZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfdmFsdWUgKnYp
IHsKLSAgcmV0dXJuIHVwYl9zdHJ0YWJsZV9sb29rdXAyKHQsIGtleSwgc3RybGVuKGtleSksIHYp
OwotfQotCi0vKiBSZW1vdmVzIGFuIGl0ZW0gZnJvbSB0aGUgdGFibGUuICBSZXR1cm5zIHRydWUg
aWYgdGhlIHJlbW92ZSB3YXMgc3VjY2Vzc2Z1bCwKLSAqIGFuZCBzdG9yZXMgdGhlIHJlbW92ZWQg
aXRlbSBpbiAqdmFsIGlmIG5vbi1OVUxMLiAqLwotYm9vbCB1cGJfaW50dGFibGVfcmVtb3ZlKHVw
Yl9pbnR0YWJsZSAqdCwgdWludHB0cl90IGtleSwgdXBiX3ZhbHVlICp2YWwpOwotYm9vbCB1cGJf
c3RydGFibGVfcmVtb3ZlMih1cGJfc3RydGFibGUgKnQsIGNvbnN0IGNoYXIgKmtleSwgc2l6ZV90
IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3ZhbHVlICp2YWwpOwotCi0vKiBG
b3IgTlVMTC10ZXJtaW5hdGVkIHN0cmluZ3MuICovCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3N0cnRh
YmxlX3JlbW92ZSh1cGJfc3RydGFibGUgKnQsIGNvbnN0IGNoYXIgKmtleSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl92YWx1ZSAqdikgewotICByZXR1cm4gdXBiX3N0
cnRhYmxlX3JlbW92ZTIodCwga2V5LCBzdHJsZW4oa2V5KSwgdik7Ci19Ci0KLS8qIFVwZGF0ZXMg
YW4gZXhpc3RpbmcgZW50cnkgaW4gYW4gaW50dGFibGUuICBJZiB0aGUgZW50cnkgZG9lcyBub3Qg
ZXhpc3QsCi0gKiByZXR1cm5zIGZhbHNlIGFuZCBkb2VzIG5vdGhpbmcuICBVbmxpa2UgaW5zZXJ0
L3JlbW92ZSwgdGhpcyBkb2VzIG5vdAotICogaW52YWxpZGF0ZSBpdGVyYXRvcnMuICovCi1ib29s
IHVwYl9pbnR0YWJsZV9yZXBsYWNlKHVwYl9pbnR0YWJsZSAqdCwgdWludHB0cl90IGtleSwgdXBi
X3ZhbHVlIHZhbCk7Ci0KLS8qIEhhbmR5IHJvdXRpbmVzIGZvciB0cmVhdGluZyBhbiBpbnR0YWJs
ZSBsaWtlIGEgc3RhY2suICBNYXkgbm90IGJlIG1peGVkIHdpdGgKLSAqIG90aGVyIGluc2VydC9y
ZW1vdmUgY2FsbHMuICovCi1ib29sIHVwYl9pbnR0YWJsZV9wdXNoKHVwYl9pbnR0YWJsZSAqdCwg
dXBiX3ZhbHVlIHZhbCk7Ci11cGJfdmFsdWUgdXBiX2ludHRhYmxlX3BvcCh1cGJfaW50dGFibGUg
KnQpOwotCi0vKiBDb252ZW5pZW5jZSByb3V0aW5lcyBmb3IgaW50dGFibGVzIHdpdGggcG9pbnRl
ciBrZXlzLiAqLwotYm9vbCB1cGJfaW50dGFibGVfaW5zZXJ0cHRyKHVwYl9pbnR0YWJsZSAqdCwg
Y29uc3Qgdm9pZCAqa2V5LCB1cGJfdmFsdWUgdmFsKTsKLWJvb2wgdXBiX2ludHRhYmxlX3JlbW92
ZXB0cih1cGJfaW50dGFibGUgKnQsIGNvbnN0IHZvaWQgKmtleSwgdXBiX3ZhbHVlICp2YWwpOwot
Ym9vbCB1cGJfaW50dGFibGVfbG9va3VwcHRyKAotICAgIGNvbnN0IHVwYl9pbnR0YWJsZSAqdCwg
Y29uc3Qgdm9pZCAqa2V5LCB1cGJfdmFsdWUgKnZhbCk7Ci0KLS8qIE9wdGltaXplcyB0aGUgdGFi
bGUgZm9yIHRoZSBjdXJyZW50IHNldCBvZiBlbnRyaWVzLCBmb3IgYm90aCBtZW1vcnkgdXNlIGFu
ZAotICogbG9va3VwIHRpbWUuICBDbGllbnQgc2hvdWxkIGNhbGwgdGhpcyBhZnRlciBhbGwgZW50
cmllcyBoYXZlIGJlZW4gaW5zZXJ0ZWQ7Ci0gKiBpbnNlcnRpbmcgbW9yZSBlbnRyaWVzIGlzIGxl
Z2FsLCBidXQgd2lsbCBsaWtlbHkgcmVxdWlyZSBhIHRhYmxlIHJlc2l6ZS4gKi8KLXZvaWQgdXBi
X2ludHRhYmxlX2NvbXBhY3QodXBiX2ludHRhYmxlICp0KTsKLQotLyogQSBzcGVjaWFsLWNhc2Ug
aW5saW5hYmxlIHZlcnNpb24gb2YgdGhlIGxvb2t1cCByb3V0aW5lIGZvciAzMi1iaXQKLSAqIGlu
dGVnZXJzLiAqLwotVVBCX0lOTElORSBib29sIHVwYl9pbnR0YWJsZV9sb29rdXAzMihjb25zdCB1
cGJfaW50dGFibGUgKnQsIHVpbnQzMl90IGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXBiX3ZhbHVlICp2KSB7Ci0gICp2ID0gdXBiX3ZhbHVlX2ludDMyKDApOyAg
LyogU2lsZW5jZSBjb21waWxlciB3YXJuaW5ncy4gKi8KLSAgaWYgKGtleSA8IHQtPmFycmF5X3Np
emUpIHsKLSAgICB1cGJfdGFidmFsIGFycnZhbCA9IHQtPmFycmF5W2tleV07Ci0gICAgaWYgKHVw
Yl9hcnJoYXMoYXJydmFsKSkgewotICAgICAgX3VwYl92YWx1ZV9zZXR2YWwodiwgYXJydmFsLnZh
bCwgdC0+dC5jdHlwZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBjb25zdCB1cGJfdGFiZW50ICpl
OwotICAgIGlmICh0LT50LmVudHJpZXMgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotICAgIGZvciAo
ZSA9IHVwYl9nZXRlbnRyeSgmdC0+dCwgdXBiX2ludGhhc2goa2V5KSk7IHRydWU7IGUgPSBlLT5u
ZXh0KSB7Ci0gICAgICBpZiAoKHVpbnQzMl90KWUtPmtleSA9PSBrZXkpIHsKLSAgICAgICAgX3Vw
Yl92YWx1ZV9zZXR2YWwodiwgZS0+dmFsLnZhbCwgdC0+dC5jdHlwZSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgfQotICAgICAgaWYgKGUtPm5leHQgPT0gTlVMTCkgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgfQotfQotCi0vKiBFeHBvc2VkIGZvciB0ZXN0aW5nIG9ubHkuICovCi1ib29s
IHVwYl9zdHJ0YWJsZV9yZXNpemUodXBiX3N0cnRhYmxlICp0LCBzaXplX3Qgc2l6ZV9sZzIpOwot
Ci0vKiBJdGVyYXRvcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBJdGVyYXRvcnMgZm9yIGludCBhbmQgc3Ry
aW5nIHRhYmxlcy4gIFdlIGFyZSBzdWJqZWN0IHRvIHNvbWUga2luZCBvZiB1bnVzdWFsCi0gKiBk
ZXNpZ24gY29uc3RyYWludHM6Ci0gKgotICogRm9yIGhpZ2gtbGV2ZWwgbGFuZ3VhZ2VzOgotICog
IC0gd2UgbXVzdCBiZSBhYmxlIHRvIGd1YXJhbnRlZSB0aGF0IHdlIGRvbid0IGNyYXNoIG9yIGNv
cnJ1cHQgbWVtb3J5IGV2ZW4gaWYKLSAqICAgIHRoZSBwcm9ncmFtIGFjY2Vzc2VzIGFuIGludmFs
aWRhdGVkIGl0ZXJhdG9yLgotICoKLSAqIEZvciBDKysxMSByYW5nZS1iYXNlZCBmb3I6Ci0gKiAg
LSBpdGVyYXRvcnMgbXVzdCBiZSBjb3B5YWJsZQotICogIC0gaXRlcmF0b3JzIG11c3QgYmUgY29t
cGFyYWJsZQotICogIC0gaXQgbXVzdCBiZSBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgYW4gImVuZCIg
dmFsdWUuCi0gKgotICogSXRlcmF0aW9uIG9yZGVyIGlzIHVuZGVmaW5lZC4KLSAqCi0gKiBNb2Rp
ZnlpbmcgdGhlIHRhYmxlIGludmFsaWRhdGVzIGl0ZXJhdG9ycy4gIHVwYl97c3RyLGludH10YWJs
ZV9kb25lKCkgaXMKLSAqIGd1YXJhbnRlZWQgdG8gd29yayBldmVuIG9uIGFuIGludmFsaWRhdGVk
IGl0ZXJhdG9yLCBhcyBsb25nIGFzIHRoZSB0YWJsZSBpdAotICogaXMgaXRlcmF0aW5nIG92ZXIg
aGFzIG5vdCBiZWVuIGZyZWVkLiAgQ2FsbGluZyBuZXh0KCkgb3IgYWNjZXNzaW5nIGRhdGEgZnJv
bQotICogYW4gaW52YWxpZGF0ZWQgaXRlcmF0b3IgeWllbGRzIHVuc3BlY2lmaWVkIGVsZW1lbnRz
IGZyb20gdGhlIHRhYmxlLCBidXQgaXQgaXMKLSAqIGd1YXJhbnRlZWQgbm90IHRvIGNyYXNoIGFu
ZCB0byByZXR1cm4gcmVhbCB0YWJsZSBlbGVtZW50cyAoZXhjZXB0IHdoZW4gZG9uZSgpCi0gKiBp
cyB0cnVlKS4gKi8KLQotCi0vKiB1cGJfc3RydGFibGVfaXRlciAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAgIHVwYl9zdHJ0
YWJsZV9pdGVyIGk7Ci0gKiAgIHVwYl9zdHJ0YWJsZV9iZWdpbigmaSwgdCk7Ci0gKiAgIGZvcig7
ICF1cGJfc3RydGFibGVfZG9uZSgmaSk7IHVwYl9zdHJ0YWJsZV9uZXh0KCZpKSkgewotICogICAg
IGNvbnN0IGNoYXIgKmtleSA9IHVwYl9zdHJ0YWJsZV9pdGVyX2tleSgmaSk7Ci0gKiAgICAgY29u
c3QgdXBiX3ZhbHVlIHZhbCA9IHVwYl9zdHJ0YWJsZV9pdGVyX3ZhbHVlKCZpKTsKLSAqICAgICAv
LyAuLi4KLSAqICAgfQotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgY29uc3QgdXBiX3N0cnRh
YmxlICp0OwotICBzaXplX3QgaW5kZXg7Ci19IHVwYl9zdHJ0YWJsZV9pdGVyOwotCi12b2lkIHVw
Yl9zdHJ0YWJsZV9iZWdpbih1cGJfc3RydGFibGVfaXRlciAqaSwgY29uc3QgdXBiX3N0cnRhYmxl
ICp0KTsKLXZvaWQgdXBiX3N0cnRhYmxlX25leHQodXBiX3N0cnRhYmxlX2l0ZXIgKmkpOwotYm9v
bCB1cGJfc3RydGFibGVfZG9uZShjb25zdCB1cGJfc3RydGFibGVfaXRlciAqaSk7Ci1jb25zdCBj
aGFyICp1cGJfc3RydGFibGVfaXRlcl9rZXkodXBiX3N0cnRhYmxlX2l0ZXIgKmkpOwotc2l6ZV90
IHVwYl9zdHJ0YWJsZV9pdGVyX2tleWxlbmd0aCh1cGJfc3RydGFibGVfaXRlciAqaSk7Ci11cGJf
dmFsdWUgdXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoY29uc3QgdXBiX3N0cnRhYmxlX2l0ZXIgKmkp
Owotdm9pZCB1cGJfc3RydGFibGVfaXRlcl9zZXRkb25lKHVwYl9zdHJ0YWJsZV9pdGVyICppKTsK
LWJvb2wgdXBiX3N0cnRhYmxlX2l0ZXJfaXNlcXVhbChjb25zdCB1cGJfc3RydGFibGVfaXRlciAq
aTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX3N0cnRhYmxlX2l0
ZXIgKmkyKTsKLQotCi0vKiB1cGJfaW50dGFibGVfaXRlciAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAgIHVwYl9pbnR0YWJs
ZV9pdGVyIGk7Ci0gKiAgIHVwYl9pbnR0YWJsZV9iZWdpbigmaSwgdCk7Ci0gKiAgIGZvcig7ICF1
cGJfaW50dGFibGVfZG9uZSgmaSk7IHVwYl9pbnR0YWJsZV9uZXh0KCZpKSkgewotICogICAgIHVp
bnRwdHJfdCBrZXkgPSB1cGJfaW50dGFibGVfaXRlcl9rZXkoJmkpOwotICogICAgIHVwYl92YWx1
ZSB2YWwgPSB1cGJfaW50dGFibGVfaXRlcl92YWx1ZSgmaSk7Ci0gKiAgICAgLy8gLi4uCi0gKiAg
IH0KLSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNvbnN0IHVwYl9pbnR0YWJsZSAqdDsKLSAg
c2l6ZV90IGluZGV4OwotICBib29sIGFycmF5X3BhcnQ7Ci19IHVwYl9pbnR0YWJsZV9pdGVyOwot
Ci12b2lkIHVwYl9pbnR0YWJsZV9iZWdpbih1cGJfaW50dGFibGVfaXRlciAqaSwgY29uc3QgdXBi
X2ludHRhYmxlICp0KTsKLXZvaWQgdXBiX2ludHRhYmxlX25leHQodXBiX2ludHRhYmxlX2l0ZXIg
KmkpOwotYm9vbCB1cGJfaW50dGFibGVfZG9uZShjb25zdCB1cGJfaW50dGFibGVfaXRlciAqaSk7
Ci11aW50cHRyX3QgdXBiX2ludHRhYmxlX2l0ZXJfa2V5KGNvbnN0IHVwYl9pbnR0YWJsZV9pdGVy
ICppKTsKLXVwYl92YWx1ZSB1cGJfaW50dGFibGVfaXRlcl92YWx1ZShjb25zdCB1cGJfaW50dGFi
bGVfaXRlciAqaSk7Ci12b2lkIHVwYl9pbnR0YWJsZV9pdGVyX3NldGRvbmUodXBiX2ludHRhYmxl
X2l0ZXIgKmkpOwotYm9vbCB1cGJfaW50dGFibGVfaXRlcl9pc2VxdWFsKGNvbnN0IHVwYl9pbnR0
YWJsZV9pdGVyICppMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJf
aW50dGFibGVfaXRlciAqaTIpOwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfSAgLyogZXh0ZXJu
ICJDIiAqLwotI2VuZGlmCi0KLSNlbmRpZiAgLyogVVBCX1RBQkxFX0hfICovCi0KLS8qIFJlZmVy
ZW5jZSB0cmFja2luZyB3aWxsIGNoZWNrIHJlZigpL3VucmVmKCkgb3BlcmF0aW9ucyB0byBtYWtl
IHN1cmUgdGhlCi0gKiByZWYgb3duZXJzaGlwIGlzIGNvcnJlY3QuICBXaGVyZSBwb3NzaWJsZSBp
dCB3aWxsIGFsc28gbWFrZSB0b29scyBsaWtlCi0gKiBWYWxncmluZCBhdHRyaWJ1dGUgcmVmIGxl
YWtzIHRvIHRoZSBjb2RlIHRoYXQgdG9vayB0aGUgbGVha2VkIHJlZiwgbm90Ci0gKiB0aGUgY29k
ZSB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGUgb2JqZWN0LgotICoKLSAqIEVuYWJsaW5nIHRo
aXMgcmVxdWlyZXMgdGhlIGFwcGxpY2F0aW9uIHRvIGRlZmluZSB1cGJfbG9jaygpL3VwYl91bmxv
Y2soKQotICogZnVuY3Rpb25zIHRoYXQgYWNxdWlyZS9yZWxlYXNlIGEgZ2xvYmFsIG11dGV4IChv
ciAjZGVmaW5lIFVQQl9USFJFQURfVU5TQUZFKS4KLSAqIEZvciB0aGlzIHJlYXNvbiB3ZSBkb24n
dCBlbmFibGUgaXQgYnkgZGVmYXVsdCwgZXZlbiBpbiBkZWJ1ZyBidWlsZHMuCi0gKi8KLQotLyog
I2RlZmluZSBVUEJfREVCVUdfUkVGUyAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLW5hbWVzcGFj
ZSB1cGIgeyBjbGFzcyBSZWZDb3VudGVkOyB9Ci0jZW5kaWYKLQotVVBCX0RFQ0xBUkVfVFlQRSh1
cGI6OlJlZkNvdW50ZWQsIHVwYl9yZWZjb3VudGVkKQotCi1zdHJ1Y3QgdXBiX3JlZmNvdW50ZWRf
dnRibDsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLWNsYXNzIHVwYjo6UmVmQ291bnRlZCB7Ci0g
cHVibGljOgotICAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG9iamVjdCBpcyBmcm96ZW4u
ICovCi0gIGJvb2wgSXNGcm96ZW4oKSBjb25zdDsKLQotICAvKiBJbmNyZWFzZXMgdGhlIHJlZiBj
b3VudCwgdGhlIG5ldyByZWYgaXMgb3duZWQgYnkgIm93bmVyIiB3aGljaCBtdXN0IG5vdAotICAg
KiBhbHJlYWR5IG93biBhIHJlZiAoYW5kIHNob3VsZCBub3QgaXRzZWxmIGJlIGEgcmVmY291bnRl
ZCBvYmplY3QgaWYgdGhlIHJlZgotICAgKiBjb3VsZCBwb3NzaWJseSBiZSBjaXJjdWxhcjsgc2Vl
IGJlbG93KS4KLSAgICogVGhyZWFkLXNhZmUgaWZmICJ0aGlzIiBpcyBmcm96ZW4uICovCi0gIHZv
aWQgUmVmKGNvbnN0IHZvaWQgKm93bmVyKSBjb25zdDsKLQotICAvKiBSZWxlYXNlIGEgcmVmIHRo
YXQgd2FzIGFjcXVpcmVkIGZyb20gdXBiX3JlZmNvdW50ZWRfcmVmKCkgYW5kIGNvbGxlY3RzIGFu
eQotICAgKiBvYmplY3RzIGl0IGNhbi4gKi8KLSAgdm9pZCBVbnJlZihjb25zdCB2b2lkICpvd25l
cikgY29uc3Q7Ci0KLSAgLyogTW92ZXMgYW4gZXhpc3RpbmcgcmVmIGZyb20gImZyb20iIHRvICJ0
byIsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG92ZXJhbGwKLSAgICogcmVmIGNvdW50LiAgRG9uYXRl
UmVmKGZvbywgTlVMTCwgb3duZXIpIGlzIHRoZSBzYW1lIGFzIFJlZihmb28sIG93bmVyKSwKLSAg
ICogYnV0ICJ0byIgbWF5IG5vdCBiZSBOVUxMLiAqLwotICB2b2lkIERvbmF0ZVJlZihjb25zdCB2
b2lkICpmcm9tLCBjb25zdCB2b2lkICp0bykgY29uc3Q7Ci0KLSAgLyogVmVyaWZpZXMgdGhhdCBh
IHJlZiB0byB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGN1cnJlbnRseSBoZWxkIGJ5IHRoZSBnaXZlbgot
ICAgKiBvd25lci4gIE9ubHkgZWZmZWN0aXZlIGluIFVQQl9ERUJVR19SRUZTIGJ1aWxkcy4gKi8K
LSAgdm9pZCBDaGVja1JlZihjb25zdCB2b2lkICpvd25lcikgY29uc3Q7Ci0KLSBwcml2YXRlOgot
ICBVUEJfRElTQUxMT1dfUE9EX09QUyhSZWZDb3VudGVkLCB1cGI6OlJlZkNvdW50ZWQpCi0jZWxz
ZQotc3RydWN0IHVwYl9yZWZjb3VudGVkIHsKLSNlbmRpZgotICAvKiBUT0RPKGhhYmVybWFuKTog
bW92ZSB0aGUgYWN0dWFsIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvIHN0cnVjdGRlZnMuaW50Lmgu
Ci0gICAqIFRoZSBvbmx5IHJlYXNvbiB0aGV5IGFyZSBoZXJlIGlzIGJlY2F1c2UgaW5saW5lIGZ1
bmN0aW9ucyBuZWVkIHRvIHNlZSB0aGUKLSAgICogZGVmaW5pdGlvbiBvZiB1cGJfaGFuZGxlcnMs
IHdoaWNoIG5lZWRzIHRvIHNlZSB0aGlzIGRlZmluaXRpb24uICBCdXQgd2UKLSAgICogY2FuIGNo
YW5nZSB0aGUgdXBiX2hhbmRsZXJzIGlubGluZSBmdW5jdGlvbnMgdG8gZGVhbCBpbiByYXcgb2Zm
c2V0cwotICAgKiBpbnN0ZWFkLgotICAgKi8KLQotICAvKiBBIHNpbmdsZSByZWZlcmVuY2UgY291
bnQgc2hhcmVkIGJ5IGFsbCBvYmplY3RzIGluIHRoZSBncm91cC4gKi8KLSAgdWludDMyX3QgKmdy
b3VwOwotCi0gIC8qIEEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGFsbCBvYmplY3RzIGluIHRoZSBn
cm91cC4gKi8KLSAgdXBiX3JlZmNvdW50ZWQgKm5leHQ7Ci0KLSAgLyogVGFibGUgb2YgZnVuY3Rp
b24gcG9pbnRlcnMgZm9yIHRoaXMgdHlwZS4gKi8KLSAgY29uc3Qgc3RydWN0IHVwYl9yZWZjb3Vu
dGVkX3Z0YmwgKnZ0Ymw7Ci0KLSAgLyogTWFpbnRhaW5lZCBvbmx5IHdoZW4gbXV0YWJsZSwgdGhp
cyB0cmFja3MgdGhlIG51bWJlciBvZiByZWZzIChidXQgbm90Ci0gICAqIHJlZjIncykgdG8gdGhp
cyBvYmplY3QuICAqZ3JvdXAgc2hvdWxkIGJlIHRoZSBzdW0gb2YgYWxsIGluZGl2aWR1YWxfY291
bnQKLSAgICogaW4gdGhlIGdyb3VwLiAqLwotICB1aW50MzJfdCBpbmRpdmlkdWFsX2NvdW50Owot
Ci0gIGJvb2wgaXNfZnJvemVuOwotCi0jaWZkZWYgVVBCX0RFQlVHX1JFRlMKLSAgdXBiX2ludHRh
YmxlICpyZWZzOyAgLyogTWFwcyBvd25lciAtPiB0cmFja2VkcmVmIGZvciBpbmNvbWluZyByZWZz
LiAqLwotICB1cGJfaW50dGFibGUgKnJlZjJzOyAvKiBTZXQgb2YgdGFyZ2V0cyBmb3Igb3V0Z29p
bmcgcmVmMnMuICovCi0jZW5kaWYKLX07Ci0KLSNpZmRlZiBVUEJfREVCVUdfUkVGUwotI2RlZmlu
ZSBVUEJfUkVGQ09VTlRfSU5JVChyZWZzLCByZWYycykgXAotICAgIHsmc3RhdGljX3JlZmNvdW50
LCBOVUxMLCBOVUxMLCAwLCB0cnVlLCByZWZzLCByZWYyc30KLSNlbHNlCi0jZGVmaW5lIFVQQl9S
RUZDT1VOVF9JTklUKHJlZnMsIHJlZjJzKSB7JnN0YXRpY19yZWZjb3VudCwgTlVMTCwgTlVMTCwg
MCwgdHJ1ZX0KLSNlbmRpZgotCi1VUEJfQkVHSU5fRVhURVJOX0MKLQotLyogSXQgaXMgYmV0dGVy
IHRvIHVzZSB0cmFja2VkIHJlZnMgd2hlbiBwb3NzaWJsZSwgZm9yIHRoZSBleHRyYSBkZWJ1Z2dp
bmcKLSAqIGNhcGFiaWxpdHkuICBCdXQgaWYgdGhpcyBpcyBub3QgcG9zc2libGUgKGJlY2F1c2Ug
eW91IGRvbid0IGhhdmUgZWFzeSBhY2Nlc3MKLSAqIHRvIGEgc3RhYmxlIHBvaW50ZXIgdmFsdWUg
dGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlZiksIHlvdSBjYW4gcGFzcwotICogVVBCX1VO
VFJBQ0tFRF9SRUYgaW5zdGVhZC4gICovCi1leHRlcm4gY29uc3Qgdm9pZCAqVVBCX1VOVFJBQ0tF
RF9SRUY7Ci0KLS8qIE5hdGl2ZSBDIEFQSS4gKi8KLWJvb2wgdXBiX3JlZmNvdW50ZWRfaXNmcm96
ZW4oY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIpOwotdm9pZCB1cGJfcmVmY291bnRlZF9yZWYoY29u
c3QgdXBiX3JlZmNvdW50ZWQgKnIsIGNvbnN0IHZvaWQgKm93bmVyKTsKLXZvaWQgdXBiX3JlZmNv
dW50ZWRfdW5yZWYoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIGNvbnN0IHZvaWQgKm93bmVyKTsK
LXZvaWQgdXBiX3JlZmNvdW50ZWRfZG9uYXRlcmVmKAotICAgIGNvbnN0IHVwYl9yZWZjb3VudGVk
ICpyLCBjb25zdCB2b2lkICpmcm9tLCBjb25zdCB2b2lkICp0byk7Ci12b2lkIHVwYl9yZWZjb3Vu
dGVkX2NoZWNrcmVmKGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLCBjb25zdCB2b2lkICpvd25lcik7
Ci0KLSNkZWZpbmUgVVBCX1JFRkNPVU5URURfQ01FVEhPRFModHlwZSwgdXBjYXN0ZnVuYykgXAot
ICBVUEJfSU5MSU5FIGJvb2wgdHlwZSAjIyBfaXNmcm96ZW4oY29uc3QgdHlwZSAqdikgeyBcCi0g
ICAgcmV0dXJuIHVwYl9yZWZjb3VudGVkX2lzZnJvemVuKHVwY2FzdGZ1bmModikpOyBcCi0gIH0g
XAotICBVUEJfSU5MSU5FIHZvaWQgdHlwZSAjIyBfcmVmKGNvbnN0IHR5cGUgKnYsIGNvbnN0IHZv
aWQgKm93bmVyKSB7IFwKLSAgICB1cGJfcmVmY291bnRlZF9yZWYodXBjYXN0ZnVuYyh2KSwgb3du
ZXIpOyBcCi0gIH0gXAotICBVUEJfSU5MSU5FIHZvaWQgdHlwZSAjIyBfdW5yZWYoY29uc3QgdHlw
ZSAqdiwgY29uc3Qgdm9pZCAqb3duZXIpIHsgXAotICAgIHVwYl9yZWZjb3VudGVkX3VucmVmKHVw
Y2FzdGZ1bmModiksIG93bmVyKTsgXAotICB9IFwKLSAgVVBCX0lOTElORSB2b2lkIHR5cGUgIyMg
X2RvbmF0ZXJlZihjb25zdCB0eXBlICp2LCBjb25zdCB2b2lkICpmcm9tLCBjb25zdCB2b2lkICp0
bykgeyBcCi0gICAgdXBiX3JlZmNvdW50ZWRfZG9uYXRlcmVmKHVwY2FzdGZ1bmModiksIGZyb20s
IHRvKTsgXAotICB9IFwKLSAgVVBCX0lOTElORSB2b2lkIHR5cGUgIyMgX2NoZWNrcmVmKGNvbnN0
IHR5cGUgKnYsIGNvbnN0IHZvaWQgKm93bmVyKSB7IFwKLSAgICB1cGJfcmVmY291bnRlZF9jaGVj
a3JlZih1cGNhc3RmdW5jKHYpLCBvd25lcik7IFwKLSAgfQotCi0jZGVmaW5lIFVQQl9SRUZDT1VO
VEVEX0NQUE1FVEhPRFMgXAotICBib29sIElzRnJvemVuKCkgY29uc3QgeyBcCi0gICAgcmV0dXJu
IHVwYjo6dXBjYXN0X3RvPGNvbnN0IHVwYjo6UmVmQ291bnRlZD4odGhpcyktPklzRnJvemVuKCk7
IFwKLSAgfSBcCi0gIHZvaWQgUmVmKGNvbnN0IHZvaWQgKm93bmVyKSBjb25zdCB7IFwKLSAgICBy
ZXR1cm4gdXBiOjp1cGNhc3RfdG88Y29uc3QgdXBiOjpSZWZDb3VudGVkPih0aGlzKS0+UmVmKG93
bmVyKTsgXAotICB9IFwKLSAgdm9pZCBVbnJlZihjb25zdCB2b2lkICpvd25lcikgY29uc3QgeyBc
Ci0gICAgcmV0dXJuIHVwYjo6dXBjYXN0X3RvPGNvbnN0IHVwYjo6UmVmQ291bnRlZD4odGhpcykt
PlVucmVmKG93bmVyKTsgXAotICB9IFwKLSAgdm9pZCBEb25hdGVSZWYoY29uc3Qgdm9pZCAqZnJv
bSwgY29uc3Qgdm9pZCAqdG8pIGNvbnN0IHsgXAotICAgIHJldHVybiB1cGI6OnVwY2FzdF90bzxj
b25zdCB1cGI6OlJlZkNvdW50ZWQ+KHRoaXMpLT5Eb25hdGVSZWYoZnJvbSwgdG8pOyBcCi0gIH0g
XAotICB2b2lkIENoZWNrUmVmKGNvbnN0IHZvaWQgKm93bmVyKSBjb25zdCB7IFwKLSAgICByZXR1
cm4gdXBiOjp1cGNhc3RfdG88Y29uc3QgdXBiOjpSZWZDb3VudGVkPih0aGlzKS0+Q2hlY2tSZWYo
b3duZXIpOyBcCi0gIH0KLQotLyogSW50ZXJuYWwtdG8tdXBiIEludGVyZmFjZSAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdHlwZWRlZiB2b2lk
IHVwYl9yZWZjb3VudGVkX3Zpc2l0KGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9yZWZjb3VudGVkICpzdWJvYmosCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSk7Ci0KLXN0cnVj
dCB1cGJfcmVmY291bnRlZF92dGJsIHsKLSAgLyogTXVzdCB2aXNpdCBhbGwgc3Vib2JqZWN0cyB0
aGF0IGFyZSBjdXJyZW50bHkgcmVmJ2QgdmlhIHVwYl9yZWZjb3VudGVkX3JlZjIuCi0gICAqIE11
c3QgYmUgbG9uZ2ptcCgpLXNhZmUuICovCi0gIHZvaWQgKCp2aXNpdCkoY29uc3QgdXBiX3JlZmNv
dW50ZWQgKnIsIHVwYl9yZWZjb3VudGVkX3Zpc2l0ICp2aXNpdCwgdm9pZCAqYyk7Ci0KLSAgLyog
TXVzdCBmcmVlIHRoZSBvYmplY3QgYW5kIHJlbGVhc2UgYWxsIHJlZmVyZW5jZXMgdG8gb3RoZXIg
b2JqZWN0cy4gKi8KLSAgdm9pZCAoKmZyZWUpKHVwYl9yZWZjb3VudGVkICpyKTsKLX07Ci0KLS8q
IEluaXRpYWxpemVzIHRoZSByZWZjb3VudGVkIHdpdGggYSBzaW5nbGUgcmVmIGZvciB0aGUgZ2l2
ZW4gb3duZXIuICBSZXR1cm5zCi0gKiBmYWxzZSBpZiBtZW1vcnkgY291bGQgbm90IGJlIGFsbG9j
YXRlZC4gKi8KLWJvb2wgdXBiX3JlZmNvdW50ZWRfaW5pdCh1cGJfcmVmY291bnRlZCAqciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdXBiX3JlZmNvdW50ZWRfdnRibCAq
dnRibCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpvd25lcik7Ci0KLS8q
IEFkZHMgYSByZWYgZnJvbSBvbmUgcmVmY291bnRlZCBvYmplY3QgdG8gYW5vdGhlciAoImZyb20i
IG11c3Qgbm90IGFscmVhZHkKLSAqIG93biBhIHJlZikuICBUaGVzZSByZWZzIG1heSBiZSBjaXJj
dWxhcjsgY3ljbGVzIHdpbGwgYmUgY29sbGVjdGVkIGNvcnJlY3RseQotICogKGlmIGNvbnNlcnZh
dGl2ZWx5KS4gIFRoZXNlIHJlZnMgZG8gbm90IG5lZWQgdG8gYmUgZnJlZWQgaW4gZnJvbSdzIGZy
ZWUoKQotICogZnVuY3Rpb24uICovCi12b2lkIHVwYl9yZWZjb3VudGVkX3JlZjIoY29uc3QgdXBi
X3JlZmNvdW50ZWQgKnIsIHVwYl9yZWZjb3VudGVkICpmcm9tKTsKLQotLyogUmVtb3ZlcyBhIHJl
ZiB0aGF0IHdhcyBhY3F1aXJlZCBmcm9tIHVwYl9yZWZjb3VudGVkX3JlZjIoKSwgYW5kIGNvbGxl
Y3RzIGFueQotICogb2JqZWN0IGl0IGNhbi4gIFRoaXMgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiAi
ZnJvbSIgbm8gbG9uZ2VyIHBvaW50cyB0byAiciIsCi0gKiBhbmQgbm90IGZyb20gZnJvbSdzICJm
cmVlIiBmdW5jdGlvbi4gKi8KLXZvaWQgdXBiX3JlZmNvdW50ZWRfdW5yZWYyKGNvbnN0IHVwYl9y
ZWZjb3VudGVkICpyLCB1cGJfcmVmY291bnRlZCAqZnJvbSk7Ci0KLSNkZWZpbmUgdXBiX3JlZjIo
ciwgZnJvbSkgXAotICAgIHVwYl9yZWZjb3VudGVkX3JlZjIoKGNvbnN0IHVwYl9yZWZjb3VudGVk
KilyLCAodXBiX3JlZmNvdW50ZWQqKWZyb20pCi0jZGVmaW5lIHVwYl91bnJlZjIociwgZnJvbSkg
XAotICAgIHVwYl9yZWZjb3VudGVkX3VucmVmMigoY29uc3QgdXBiX3JlZmNvdW50ZWQqKXIsICh1
cGJfcmVmY291bnRlZCopZnJvbSkKLQotLyogRnJlZXplcyBhbGwgbXV0YWJsZSBvYmplY3QgcmVh
Y2hhYmxlIGJ5IHJlZjIoKSByZWZzIGZyb20gdGhlIGdpdmVuIHJvb3RzLgotICogVGhpcyB3aWxs
IHNwbGl0IHJlZmNvdW50aW5nIGdyb3VwcyBpbnRvIHByZWNpc2UgU0NDIGdyb3Vwcywgc28gdGhh
dAotICogcmVmY291bnRpbmcgb2YgZnJvemVuIG9iamVjdHMgY2FuIGJlIG1vcmUgYWdncmVzc2l2
ZS4gIElmIG1lbW9yeSBhbGxvY2F0aW9uCi0gKiBmYWlscywgb3IgaWYgbW9yZSB0aGFuIDIqKjMx
IG11dGFibGUgb2JqZWN0cyBhcmUgcmVhY2hhYmxlIGZyb20gInJvb3RzIiwgb3IKLSAqIGlmIHRo
ZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSBncmFwaCBleGNlZWRzICJtYXhkZXB0aCIsIGZhbHNlIGlz
IHJldHVybmVkIGFuZAotICogdGhlIG9iamVjdHMgYXJlIHVuY2hhbmdlZC4KLSAqCi0gKiBBZnRl
ciB0aGlzIG9wZXJhdGlvbiBzdWNjZWVkcywgdGhlIG9iamVjdHMgYXJlIGZyb3plbi9jb25zdCwg
YW5kIG1heSBub3QgYmUKLSAqIHVzZWQgdGhyb3VnaCBub24tY29uc3QgcG9pbnRlcnMuICBJbiBw
YXJ0aWN1bGFyLCB0aGV5IG1heSBub3QgYmUgcGFzc2VkIGFzCi0gKiB0aGUgc2Vjb25kIHBhcmFt
ZXRlciBvZiB1cGJfcmVmY291bnRlZF97cmVmLHVucmVmfTIoKS4gIE9uIHRoZSB1cHNpZGUsIGFs
bAotICogb3BlcmF0aW9ucyBvbiBmcm96ZW4gcmVmY291bnRlZHMgYXJlIHRocmVhZHNhZmUsIGFu
ZCBvYmplY3RzIHdpbGwgYmUgZnJlZWQKLSAqIGF0IHRoZSBwcmVjaXNlIG1vbWVudCB0aGF0IHRo
ZXkgYmVjb21lIHVucmVhY2hhYmxlLgotICoKLSAqIENhbGxlciBtdXN0IG93biByZWZzIG9uIGVh
Y2ggb2JqZWN0IGluIHRoZSAicm9vdHMiIGxpc3QuICovCi1ib29sIHVwYl9yZWZjb3VudGVkX2Zy
ZWV6ZSh1cGJfcmVmY291bnRlZCAqY29uc3Qqcm9vdHMsIGludCBuLCB1cGJfc3RhdHVzICpzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heGRlcHRoKTsKLQotLyogU2hhcmVkIGJ5
IGFsbCBjb21waWxlZC1pbiByZWZjb3VudGVkIG9iamVjdHMuICovCi1leHRlcm4gdWludDMyX3Qg
c3RhdGljX3JlZmNvdW50OwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1
cwotLyogQysrIFdyYXBwZXJzLiAqLwotbmFtZXNwYWNlIHVwYiB7Ci1pbmxpbmUgYm9vbCBSZWZD
b3VudGVkOjpJc0Zyb3plbigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9yZWZjb3VudGVkX2lzZnJv
emVuKHRoaXMpOwotfQotaW5saW5lIHZvaWQgUmVmQ291bnRlZDo6UmVmKGNvbnN0IHZvaWQgKm93
bmVyKSBjb25zdCB7Ci0gIHVwYl9yZWZjb3VudGVkX3JlZih0aGlzLCBvd25lcik7Ci19Ci1pbmxp
bmUgdm9pZCBSZWZDb3VudGVkOjpVbnJlZihjb25zdCB2b2lkICpvd25lcikgY29uc3QgewotICB1
cGJfcmVmY291bnRlZF91bnJlZih0aGlzLCBvd25lcik7Ci19Ci1pbmxpbmUgdm9pZCBSZWZDb3Vu
dGVkOjpEb25hdGVSZWYoY29uc3Qgdm9pZCAqZnJvbSwgY29uc3Qgdm9pZCAqdG8pIGNvbnN0IHsK
LSAgdXBiX3JlZmNvdW50ZWRfZG9uYXRlcmVmKHRoaXMsIGZyb20sIHRvKTsKLX0KLWlubGluZSB2
b2lkIFJlZkNvdW50ZWQ6OkNoZWNrUmVmKGNvbnN0IHZvaWQgKm93bmVyKSBjb25zdCB7Ci0gIHVw
Yl9yZWZjb3VudGVkX2NoZWNrcmVmKHRoaXMsIG93bmVyKTsKLX0KLX0gIC8qIG5hbWVzcGFjZSB1
cGIgKi8KLSNlbmRpZgotCi0jZW5kaWYgIC8qIFVQQl9SRUZDT1VOVF9IXyAqLwotCi0jaWZkZWYg
X19jcGx1c3BsdXMKLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNs
dWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSB1cGIgewotY2xhc3MgRGVmOwotY2xhc3MgRW51bURl
ZjsKLWNsYXNzIEZpZWxkRGVmOwotY2xhc3MgTWVzc2FnZURlZjsKLWNsYXNzIE9uZW9mRGVmOwot
fQotI2VuZGlmCi0KLVVQQl9ERUNMQVJFX0RFUklWRURfVFlQRSh1cGI6OkRlZiwgdXBiOjpSZWZD
b3VudGVkLCB1cGJfZGVmLCB1cGJfcmVmY291bnRlZCkKLQotLyogVGhlIG1heGltdW0gbWVzc2Fn
ZSBkZXB0aCB0aGF0IHRoZSB0eXBlIGdyYXBoIGNhbiBoYXZlLiAgVGhpcyBpcyBhIHJlc291cmNl
Ci0gKiBsaW1pdCBmb3IgdGhlIEMgc3RhY2sgc2luY2Ugd2Ugc29tZXRpbWVzIG5lZWQgdG8gcmVj
dXJzaXZlbHkgdHJhdmVyc2UgdGhlCi0gKiBncmFwaC4gIEN5Y2xlcyBhcmUgb2s7IHRoZSB0cmF2
ZXJzYWwgd2lsbCBzdG9wIHdoZW4gaXQgZGV0ZWN0cyBhIGN5Y2xlLCBidXQKLSAqIHdlIG11c3Qg
aGl0IHRoZSBjeWNsZSBiZWZvcmUgdGhlIG1heGltdW0gZGVwdGggaXMgcmVhY2hlZC4KLSAqCi0g
KiBJZiBoYXZpbmcgYSBzaW5nbGUgc3RhdGljIGxpbWl0IGlzIHRvbyBpbmZsZXhpYmxlLCB3ZSBj
YW4gYWRkIGFub3RoZXIgdmFyaWFudAotICogb2YgRGVmOjpGcmVlemUgdGhhdCBhbGxvd3Mgc3Bl
Y2lmeWluZyB0aGlzIGFzIGEgcGFyYW1ldGVyLiAqLwotI2RlZmluZSBVUEJfTUFYX01FU1NBR0Vf
REVQVEggNjQKLQotCi0vKiB1cGI6OkRlZjogYmFzZSBjbGFzcyBmb3IgZGVmcyAgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBBbGwgdGhlIGRpZmZl
cmVudCBraW5kIG9mIGRlZnMgd2Ugc3VwcG9ydC4gIFRoZXNlIGNvcnJlc3BvbmQgMToxIHdpdGgK
LSAqIGRlY2xhcmF0aW9ucyBpbiBhIC5wcm90byBmaWxlLiAqLwotdHlwZWRlZiBlbnVtIHsKLSAg
VVBCX0RFRl9NU0csCi0gIFVQQl9ERUZfRklFTEQsCi0gIFVQQl9ERUZfRU5VTSwKLSAgVVBCX0RF
Rl9PTkVPRiwKLSAgVVBCX0RFRl9TRVJWSUNFLCAgIC8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQuICov
Ci0gIFVQQl9ERUZfQU5ZID0gLTEgICAvKiBXaWxkY2FyZCBmb3IgdXBiX3N5bXRhYl9nZXQqKCkg
Ki8KLX0gdXBiX2RlZnR5cGVfdDsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFRoZSBiYXNl
IGNsYXNzIG9mIGFsbCBkZWZzLiAgSXRzIGJhc2UgaXMgdXBiOjpSZWZDb3VudGVkICh1c2UgdXBi
Ojp1cGNhc3QoKQotICogdG8gY29udmVydCkuICovCi1jbGFzcyB1cGI6OkRlZiB7Ci0gcHVibGlj
OgotICB0eXBlZGVmIHVwYl9kZWZ0eXBlX3QgVHlwZTsKLQotICBEZWYqIER1cChjb25zdCB2b2lk
ICpvd25lcikgY29uc3Q7Ci0KLSAgLyogdXBiOjpSZWZDb3VudGVkIG1ldGhvZHMgbGlrZSBSZWYo
KS9VbnJlZigpLiAqLwotICBVUEJfUkVGQ09VTlRFRF9DUFBNRVRIT0RTCi0KLSAgVHlwZSBkZWZf
dHlwZSgpIGNvbnN0OwotCi0gIC8qICJmdWxsbmFtZSIgaXMgdGhlIGRlZidzIGZ1bGx5LXF1YWxp
ZmllZCBuYW1lIChlZy4gZm9vLmJhci5NZXNzYWdlKS4gKi8KLSAgY29uc3QgY2hhciAqZnVsbF9u
YW1lKCkgY29uc3Q7Ci0KLSAgLyogVGhlIGRlZiBtdXN0IGJlIG11dGFibGUuICBDYWxsZXIgcmV0
YWlucyBvd25lcnNoaXAgb2YgZnVsbG5hbWUuICBEZWZzIGFyZQotICAgKiBub3QgcmVxdWlyZWQg
dG8gaGF2ZSBhIG5hbWU7IGlmIGEgZGVmIGhhcyBubyBuYW1lIHdoZW4gaXQgaXMgZnJvemVuLCBp
dAotICAgKiB3aWxsIHJlbWFpbiBhbiBhbm9ueW1vdXMgZGVmLiAgT24gZmFpbHVyZSwgcmV0dXJu
cyBmYWxzZSBhbmQgZGV0YWlscyBpbiAicyIKLSAgICogaWYgbm9uLU5VTEwuICovCi0gIGJvb2wg
c2V0X2Z1bGxfbmFtZShjb25zdCBjaGFyKiBmdWxsbmFtZSwgdXBiOjpTdGF0dXMqIHMpOwotICBi
b29sIHNldF9mdWxsX25hbWUoY29uc3Qgc3RkOjpzdHJpbmcgJmZ1bGxuYW1lLCB1cGI6OlN0YXR1
cyogcyk7Ci0KLSAgLyogRnJlZXplcyB0aGUgZ2l2ZW4gZGVmczsgdGhpcyB2YWxpZGF0ZXMgYWxs
IGNvbnN0cmFpbnRzIGFuZCBtYXJrcyB0aGUgZGVmcwotICAgKiBhcyBmcm96ZW4gKHJlYWQtb25s
eSkuICAiZGVmcyIgbWF5IG5vdCBjb250YWluIGFueSBmaWVsZGRlZnMsIGJ1dCBmaWVsZHMKLSAg
ICogb2YgYW55IG1zZ2RlZnMgd2lsbCBiZSBmcm96ZW4uCi0gICAqCi0gICAqIFN5bWJvbGljIHJl
ZmVyZW5jZXMgdG8gc3ViLXR5cGVzIGFuZCBlbnVtIGRlZmF1bHRzIG11c3QgaGF2ZSBhbHJlYWR5
IGJlZW4KLSAgICogcmVzb2x2ZWQuICBBbnkgbXV0YWJsZSBkZWZzIHJlYWNoYWJsZSBmcm9tIGFu
eSBvZiAiZGVmcyIgbXVzdCBhbHNvIGJlIGluCi0gICAqIHRoZSBsaXN0OyBtb3JlIGZvcm1hbGx5
LCAiZGVmcyIgbXVzdCBiZSBhIHRyYW5zaXRpdmUgY2xvc3VyZSBvZiBtdXRhYmxlCi0gICAqIGRl
ZnMuCi0gICAqCi0gICAqIEFmdGVyIHRoaXMgb3BlcmF0aW9uIHN1Y2NlZWRzLCB0aGUgZmluYWxp
emVkIGRlZnMgbXVzdCBvbmx5IGJlIGFjY2Vzc2VkCi0gICAqIHRocm91Z2ggYSBjb25zdCBwb2lu
dGVyISAqLwotICBzdGF0aWMgYm9vbCBGcmVlemUoRGVmKiBjb25zdCogZGVmcywgaW50IG4sIFN0
YXR1cyogc3RhdHVzKTsKLSAgc3RhdGljIGJvb2wgRnJlZXplKGNvbnN0IHN0ZDo6dmVjdG9yPERl
Zio+JiBkZWZzLCBTdGF0dXMqIHN0YXR1cyk7Ci0KLSBwcml2YXRlOgotICBVUEJfRElTQUxMT1df
UE9EX09QUyhEZWYsIHVwYjo6RGVmKQotfTsKLQotI2VuZGlmICAvKiBfX2NwbHVzcGx1cyAqLwot
Ci1VUEJfQkVHSU5fRVhURVJOX0MKLQotLyogTmF0aXZlIEMgQVBJLiAqLwotdXBiX2RlZiAqdXBi
X2RlZl9kdXAoY29uc3QgdXBiX2RlZiAqZGVmLCBjb25zdCB2b2lkICpvd25lcik7Ci0KLS8qIElu
Y2x1ZGUgdXBiX3JlZmNvdW50ZWQgbWV0aG9kcyBsaWtlIHVwYl9kZWZfcmVmKCkvdXBiX2RlZl91
bnJlZigpLiAqLwotVVBCX1JFRkNPVU5URURfQ01FVEhPRFModXBiX2RlZiwgdXBiX2RlZl91cGNh
c3QpCi0KLXVwYl9kZWZ0eXBlX3QgdXBiX2RlZl90eXBlKGNvbnN0IHVwYl9kZWYgKmQpOwotY29u
c3QgY2hhciAqdXBiX2RlZl9mdWxsbmFtZShjb25zdCB1cGJfZGVmICpkKTsKLWJvb2wgdXBiX2Rl
Zl9zZXRmdWxsbmFtZSh1cGJfZGVmICpkZWYsIGNvbnN0IGNoYXIgKmZ1bGxuYW1lLCB1cGJfc3Rh
dHVzICpzKTsKLWJvb2wgdXBiX2RlZl9mcmVlemUodXBiX2RlZiAqY29uc3QgKmRlZnMsIGludCBu
LCB1cGJfc3RhdHVzICpzKTsKLQotVVBCX0VORF9FWFRFUk5fQwotCi0KLS8qIHVwYjo6RGVmIGNh
c3RzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBVUEJfQ1BQX0NBU1RTKGNu
YW1lLCBjcHB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgbmFtZXNwYWNlIHVwYiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDw+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxp
bmUgY3BwdHlwZSAqZG93bl9jYXN0PGNwcHR5cGUgKiwgRGVmPihEZWYgKiBkZWYpIHsgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gdXBiX2Rvd25jYXN0XyMjY25hbWUjI19tdXRh
YmxlKGRlZik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICB0ZW1wbGF0ZSA8PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGNwcHR5cGUgKmR5
bl9jYXN0PGNwcHR5cGUgKiwgRGVmPihEZWYgKiBkZWYpIHsgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgcmV0dXJuIHVwYl9keW5jYXN0XyMjY25hbWUjI19tdXRhYmxlKGRlZik7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
dGVtcGxhdGUgPD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSBjb25zdCBjcHB0eXBlICpkb3duX2Nhc3Q8
Y29uc3QgY3BwdHlwZSAqLCBjb25zdCBEZWY+KCAgICAgICAgICAgICAgICAgXAotICAgICAgY29u
c3QgRGVmICpkZWYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gdXBiX2Rvd25jYXN0XyMjY25hbWUoZGVmKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB0ZW1wbGF0ZSA8PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGNvbnN0IGNwcHR5cGUg
KmR5bl9jYXN0PGNvbnN0IGNwcHR5cGUgKiwgY29uc3QgRGVmPihjb25zdCBEZWYgKmRlZikgeyBc
Ci0gICAgcmV0dXJuIHVwYl9keW5jYXN0XyMjY25hbWUoZGVmKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVt
cGxhdGUgPD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSBjb25zdCBjcHB0eXBlICpkb3duX2Nhc3Q8Y29u
c3QgY3BwdHlwZSAqLCBEZWY+KERlZiAqIGRlZikgeyAgICAgICAgICAgXAotICAgIHJldHVybiB1
cGJfZG93bmNhc3RfIyNjbmFtZShkZWYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDw+ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBpbmxpbmUgY29uc3QgY3BwdHlwZSAqZHluX2Nhc3Q8Y29uc3QgY3BwdHlwZSAqLCBE
ZWY+KERlZiAqIGRlZikgeyAgICAgICAgICAgIFwKLSAgICByZXR1cm4gdXBiX2R5bmNhc3RfIyNj
bmFtZShkZWYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAvKiBuYW1lc3BhY2UgdXBiICovCi0jZWxzZQot
I2RlZmluZSBVUEJfQ1BQX0NBU1RTKGNuYW1lLCBjcHB0eXBlKQotI2VuZGlmICAvKiBfX2NwbHVz
cGx1cyAqLwotCi0vKiBEeW5hbWljIGNhc3RzLCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBkZWYgaXMg
b2YgYSBwYXJ0aWN1bGFyIHR5cGUgYXQgcnVudGltZS4KLSAqIERvd25jYXN0cywgZm9yIHdoZW4g
c29tZSB3YW50cyB0byBhc3NlcnQgdGhhdCBhIGRlZiBpcyBvZiBhIHBhcnRpY3VsYXIgdHlwZS4K
LSAqIFRoZXNlIGFyZSBvbmx5IGNoZWNrZWQgaWYgd2UgYXJlIGJ1aWxkaW5nIGRlYnVnLiAqLwot
I2RlZmluZSBVUEJfREVGX0NBU1RTKGxvd2VyLCB1cHBlciwgY3BwdHlwZSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBVUEJfSU5MSU5FIGNvbnN0IHVwYl8jI2xvd2VyICp1cGJf
ZHluY2FzdF8jI2xvd2VyKGNvbnN0IHVwYl9kZWYgKmRlZikgeyAgXAotICAgIGlmICh1cGJfZGVm
X3R5cGUoZGVmKSAhPSBVUEJfREVGXyMjdXBwZXIpIHJldHVybiBOVUxMOyAgICAgICAgICAgICAg
ICAgXAotICAgIHJldHVybiAodXBiXyMjbG93ZXIgKilkZWY7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBVUEJfSU5M
SU5FIGNvbnN0IHVwYl8jI2xvd2VyICp1cGJfZG93bmNhc3RfIyNsb3dlcihjb25zdCB1cGJfZGVm
ICpkZWYpIHsgXAotICAgIGFzc2VydCh1cGJfZGVmX3R5cGUoZGVmKSA9PSBVUEJfREVGXyMjdXBw
ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiAoY29uc3QgdXBiXyMj
bG93ZXIgKilkZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBVUEJfSU5MSU5FIHVwYl8jI2xvd2VyICp1cGJfZHluY2FzdF8j
I2xvd2VyIyNfbXV0YWJsZSh1cGJfZGVmICpkZWYpIHsgICAgXAotICAgIHJldHVybiAodXBiXyMj
bG93ZXIgKil1cGJfZHluY2FzdF8jI2xvd2VyKGRlZik7ICAgICAgICAgICAgICAgICAgICAgICAg
XAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBVUEJfSU5MSU5FIHVwYl8jI2xvd2VyICp1cGJfZG93
bmNhc3RfIyNsb3dlciMjX211dGFibGUodXBiX2RlZiAqZGVmKSB7ICAgXAotICAgIHJldHVybiAo
dXBiXyMjbG93ZXIgKil1cGJfZG93bmNhc3RfIyNsb3dlcihkZWYpOyAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBVUEJfQ1BQX0NBU1RTKGxvd2VyLCBjcHB0
eXBlKQotCi0jZGVmaW5lIFVQQl9ERUZJTkVfREVGKGNwcG5hbWUsIGxvd2VyLCB1cHBlciwgY3Bw
bWV0aG9kcywgbWVtYmVycykgICAgICAgICAgICAgXAotICBVUEJfREVGSU5FX0NMQVNTMihjcHBu
YW1lLCB1cGI6OkRlZiwgdXBiOjpSZWZDb3VudGVkLCBjcHBtZXRob2RzLCAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICAgICBtZW1iZXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9ERUZfQ0FTVFMobG93ZXIsIHVwcGVyLCBj
cHBuYW1lKQotCi0jZGVmaW5lIFVQQl9ERUNMQVJFX0RFRl9UWVBFKGNwcG5hbWUsIGxvd2VyLCB1
cHBlcikgXAotICBVUEJfREVDTEFSRV9ERVJJVkVEX1RZUEUyKGNwcG5hbWUsIHVwYjo6RGVmLCB1
cGI6OlJlZkNvdW50ZWQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfICMjIGxv
d2VyLCB1cGJfZGVmLCB1cGJfcmVmY291bnRlZCkgXAotICBVUEJfREVGX0NBU1RTKGxvd2VyLCB1
cHBlciwgY3BwbmFtZSkKLQotVVBCX0RFQ0xBUkVfREVGX1RZUEUodXBiOjpGaWVsZERlZiwgZmll
bGRkZWYsIEZJRUxEKQotVVBCX0RFQ0xBUkVfREVGX1RZUEUodXBiOjpNZXNzYWdlRGVmLCBtc2dk
ZWYsIE1TRykKLVVQQl9ERUNMQVJFX0RFRl9UWVBFKHVwYjo6RW51bURlZiwgZW51bWRlZiwgRU5V
TSkKLVVQQl9ERUNMQVJFX0RFRl9UWVBFKHVwYjo6T25lb2ZEZWYsIG9uZW9mZGVmLCBPTkVPRikK
LQotI3VuZGVmIFVQQl9ERUNMQVJFX0RFRl9UWVBFCi0jdW5kZWYgVVBCX0RFRl9DQVNUUwotI3Vu
ZGVmIFVQQl9DUFBfQ0FTVFMKLQotCi0vKiB1cGI6OkZpZWxkRGVmICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGUg
dHlwZXMgYSBmaWVsZCBjYW4gaGF2ZS4gIE5vdGUgdGhhdCB0aGlzIGxpc3QgaXMgbm90IGlkZW50
aWNhbCB0byB0aGUKLSAqIHR5cGVzIGRlZmluZWQgaW4gZGVzY3JpcHRvci5wcm90bywgd2hpY2gg
Z2l2ZXMgSU5UMzIgYW5kIFNJTlQzMiBzZXBhcmF0ZQotICogdHlwZXMgKHdlIGRpc3Rpbmd1aXNo
IHRoZSB0d28gd2l0aCB0aGUgImludGVnZXIgZW5jb2RpbmciIGVudW0gYmVsb3cpLiAqLwotdHlw
ZWRlZiBlbnVtIHsKLSAgVVBCX1RZUEVfRkxPQVQgICAgPSAxLAotICBVUEJfVFlQRV9ET1VCTEUg
ICA9IDIsCi0gIFVQQl9UWVBFX0JPT0wgICAgID0gMywKLSAgVVBCX1RZUEVfU1RSSU5HICAgPSA0
LAotICBVUEJfVFlQRV9CWVRFUyAgICA9IDUsCi0gIFVQQl9UWVBFX01FU1NBR0UgID0gNiwKLSAg
VVBCX1RZUEVfRU5VTSAgICAgPSA3LCAgLyogRW51bSB2YWx1ZXMgYXJlIGludDMyLiAqLwotICBV
UEJfVFlQRV9JTlQzMiAgICA9IDgsCi0gIFVQQl9UWVBFX1VJTlQzMiAgID0gOSwKLSAgVVBCX1RZ
UEVfSU5UNjQgICAgPSAxMCwKLSAgVVBCX1RZUEVfVUlOVDY0ICAgPSAxMQotfSB1cGJfZmllbGR0
eXBlX3Q7Ci0KLS8qIFRoZSByZXBlYXRlZC1uZXNzIG9mIGVhY2ggZmllbGQ7IHRoaXMgbWF0Y2hl
cyBkZXNjcmlwdG9yLnByb3RvLiAqLwotdHlwZWRlZiBlbnVtIHsKLSAgVVBCX0xBQkVMX09QVElP
TkFMID0gMSwKLSAgVVBCX0xBQkVMX1JFUVVJUkVEID0gMiwKLSAgVVBCX0xBQkVMX1JFUEVBVEVE
ID0gMwotfSB1cGJfbGFiZWxfdDsKLQotLyogSG93IGludGVnZXJzIHNob3VsZCBiZSBlbmNvZGVk
IGluIHNlcmlhbGl6YXRpb25zIHRoYXQgb2ZmZXIgbXVsdGlwbGUKLSAqIGludGVnZXIgZW5jb2Rp
bmcgbWV0aG9kcy4gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIFVQQl9JTlRGTVRfVkFSSUFCTEUgPSAx
LAotICBVUEJfSU5URk1UX0ZJWEVEID0gMiwKLSAgVVBCX0lOVEZNVF9aSUdaQUcgPSAzICAgLyog
T25seSBmb3Igc2lnbmVkIHR5cGVzIChJTlQzMi9JTlQ2NCkuICovCi19IHVwYl9pbnRmbXRfdDsK
LQotLyogRGVzY3JpcHRvciB0eXBlcywgYXMgZGVmaW5lZCBpbiBkZXNjcmlwdG9yLnByb3RvLiAq
LwotdHlwZWRlZiBlbnVtIHsKLSAgVVBCX0RFU0NSSVBUT1JfVFlQRV9ET1VCTEUgICA9IDEsCi0g
IFVQQl9ERVNDUklQVE9SX1RZUEVfRkxPQVQgICAgPSAyLAotICBVUEJfREVTQ1JJUFRPUl9UWVBF
X0lOVDY0ICAgID0gMywKLSAgVVBCX0RFU0NSSVBUT1JfVFlQRV9VSU5UNjQgICA9IDQsCi0gIFVQ
Ql9ERVNDUklQVE9SX1RZUEVfSU5UMzIgICAgPSA1LAotICBVUEJfREVTQ1JJUFRPUl9UWVBFX0ZJ
WEVENjQgID0gNiwKLSAgVVBCX0RFU0NSSVBUT1JfVFlQRV9GSVhFRDMyICA9IDcsCi0gIFVQQl9E
RVNDUklQVE9SX1RZUEVfQk9PTCAgICAgPSA4LAotICBVUEJfREVTQ1JJUFRPUl9UWVBFX1NUUklO
RyAgID0gOSwKLSAgVVBCX0RFU0NSSVBUT1JfVFlQRV9HUk9VUCAgICA9IDEwLAotICBVUEJfREVT
Q1JJUFRPUl9UWVBFX01FU1NBR0UgID0gMTEsCi0gIFVQQl9ERVNDUklQVE9SX1RZUEVfQllURVMg
ICAgPSAxMiwKLSAgVVBCX0RFU0NSSVBUT1JfVFlQRV9VSU5UMzIgICA9IDEzLAotICBVUEJfREVT
Q1JJUFRPUl9UWVBFX0VOVU0gICAgID0gMTQsCi0gIFVQQl9ERVNDUklQVE9SX1RZUEVfU0ZJWEVE
MzIgPSAxNSwKLSAgVVBCX0RFU0NSSVBUT1JfVFlQRV9TRklYRUQ2NCA9IDE2LAotICBVUEJfREVT
Q1JJUFRPUl9UWVBFX1NJTlQzMiAgID0gMTcsCi0gIFVQQl9ERVNDUklQVE9SX1RZUEVfU0lOVDY0
ICAgPSAxOAotfSB1cGJfZGVzY3JpcHRvcnR5cGVfdDsKLQotLyogTWF4aW11bSBmaWVsZCBudW1i
ZXIgYWxsb3dlZCBmb3IgRmllbGREZWZzLiAgVGhpcyBpcyBhbiBpbmhlcmVudCBsaW1pdCBvZiB0
aGUKLSAqIHByb3RvYnVmIHdpcmUgZm9ybWF0LiAqLwotI2RlZmluZSBVUEJfTUFYX0ZJRUxETlVN
QkVSICgoMSA8PCAyOSkgLSAxKQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogQSB1cGJfZmll
bGRkZWYgZGVzY3JpYmVzIGEgc2luZ2xlIGZpZWxkIGluIGEgbWVzc2FnZS4gIEl0IGlzIG1vc3Qg
b2Z0ZW4KLSAqIGZvdW5kIGFzIGEgcGFydCBvZiBhIHVwYl9tc2dkZWYsIGJ1dCBjYW4gYWxzbyBz
dGFuZCBhbG9uZSB0byByZXByZXNlbnQKLSAqIGFuIGV4dGVuc2lvbi4KLSAqCi0gKiBJdHMgYmFz
ZSBjbGFzcyBpcyB1cGI6OkRlZiAodXNlIHVwYjo6dXBjYXN0KCkgdG8gY29udmVydCkuICovCi1j
bGFzcyB1cGI6OkZpZWxkRGVmIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgdXBiX2ZpZWxkdHlwZV90
IFR5cGU7Ci0gIHR5cGVkZWYgdXBiX2xhYmVsX3QgTGFiZWw7Ci0gIHR5cGVkZWYgdXBiX2ludGZt
dF90IEludGVnZXJGb3JtYXQ7Ci0gIHR5cGVkZWYgdXBiX2Rlc2NyaXB0b3J0eXBlX3QgRGVzY3Jp
cHRvclR5cGU7Ci0KLSAgLyogVGhlc2UgcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlz
IGEgdmFsaWQgbWVtYmVyIG9mIHRoZSBlbnVtZXJhdGlvbi4gKi8KLSAgc3RhdGljIGJvb2wgQ2hl
Y2tUeXBlKGludDMyX3QgdmFsKTsKLSAgc3RhdGljIGJvb2wgQ2hlY2tMYWJlbChpbnQzMl90IHZh
bCk7Ci0gIHN0YXRpYyBib29sIENoZWNrRGVzY3JpcHRvclR5cGUoaW50MzJfdCB2YWwpOwotICBz
dGF0aWMgYm9vbCBDaGVja0ludGVnZXJGb3JtYXQoaW50MzJfdCB2YWwpOwotCi0gIC8qIFRoZXNl
IGNvbnZlcnQgdG8gdGhlIGdpdmVuIGVudW1lcmF0aW9uOyB0aGV5IHJlcXVpcmUgdGhhdCB0aGUg
dmFsdWUgaXMKLSAgICogdmFsaWQuICovCi0gIHN0YXRpYyBUeXBlIENvbnZlcnRUeXBlKGludDMy
X3QgdmFsKTsKLSAgc3RhdGljIExhYmVsIENvbnZlcnRMYWJlbChpbnQzMl90IHZhbCk7Ci0gIHN0
YXRpYyBEZXNjcmlwdG9yVHlwZSBDb252ZXJ0RGVzY3JpcHRvclR5cGUoaW50MzJfdCB2YWwpOwot
ICBzdGF0aWMgSW50ZWdlckZvcm1hdCBDb252ZXJ0SW50ZWdlckZvcm1hdChpbnQzMl90IHZhbCk7
Ci0KLSAgLyogUmV0dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gKi8KLSAg
c3RhdGljIHJlZmZlZF9wdHI8RmllbGREZWY+IE5ldygpOwotCi0gIC8qIER1cGxpY2F0ZXMgdGhl
IGdpdmVuIGZpZWxkLCByZXR1cm5pbmcgTlVMTCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQu
Ci0gICAqIFdoZW4gYSBmaWVsZGRlZiBpcyBkdXBsaWNhdGVkLCB0aGUgc3ViZGVmIChpZiBhbnkp
IGlzIG1hZGUgc3ltYm9saWMgaWYgaXQKLSAgICogd2Fzbid0IGFscmVhZHkuICBJZiB0aGUgc3Vi
ZGVmIGlzIHNldCBidXQgaGFzIG5vIG5hbWUgKHdoaWNoIGlzIHBvc3NpYmxlCi0gICAqIHNpbmNl
IG1zZ2RlZnMgYXJlIG5vdCByZXF1aXJlZCB0byBoYXZlIGEgbmFtZSkgdGhlIG5ldyBmaWVsZGRl
ZidzIHN1YmRlZgotICAgKiB3aWxsIGJlIHVuc2V0LiAqLwotICBGaWVsZERlZiogRHVwKGNvbnN0
IHZvaWQqIG93bmVyKSBjb25zdDsKLQotICAvKiB1cGI6OlJlZkNvdW50ZWQgbWV0aG9kcyBsaWtl
IFJlZigpL1VucmVmKCkuICovCi0gIFVQQl9SRUZDT1VOVEVEX0NQUE1FVEhPRFMKLQotICAvKiBG
dW5jdGlvbmFsaXR5IGZyb20gdXBiOjpEZWYuICovCi0gIGNvbnN0IGNoYXIqIGZ1bGxfbmFtZSgp
IGNvbnN0OwotCi0gIGJvb2wgdHlwZV9pc19zZXQoKSBjb25zdDsgIC8qIHNldF9bZGVzY3JpcHRv
cl9ddHlwZSgpIGhhcyBiZWVuIGNhbGxlZD8gKi8KLSAgVHlwZSB0eXBlKCkgY29uc3Q7ICAgICAg
ICAgLyogUmVxdWlyZXMgdGhhdCB0eXBlX2lzX3NldCgpID09IHRydWUuICovCi0gIExhYmVsIGxh
YmVsKCkgY29uc3Q7ICAgICAgIC8qIERlZmF1bHRzIHRvIFVQQl9MQUJFTF9PUFRJT05BTC4gKi8K
LSAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0OyAgLyogTlVMTCBpZiB1bmluaXRpYWxpemVkLiAq
LwotICB1aW50MzJfdCBudW1iZXIoKSBjb25zdDsgICAvKiBSZXR1cm5zIDAgaWYgdW5pbml0aWFs
aXplZC4gKi8KLSAgYm9vbCBpc19leHRlbnNpb24oKSBjb25zdDsKLQotICAvKiBGb3IgVVBCX1RZ
UEVfTUVTU0FHRSBmaWVsZHMgb25seSB3aGVyZSBpc190YWdfZGVsaW1pdGVkKCkgPT0gZmFsc2Us
Ci0gICAqIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgZmllbGQgc2hvdWxkIGhhdmUgbGF6eSBwYXJz
aW5nIGhhbmRsZXJzIHRoYXQgeWllbGQKLSAgICogdGhlIHVucGFyc2VkIHN0cmluZyBmb3IgdGhl
IHN1Ym1lc3NhZ2UuCi0gICAqCi0gICAqIFRPRE8oaGFiZXJtYW4pOiBJIHRoaW5rIHdlIHdhbnQg
dG8gbW92ZSB0aGlzIGludG8gYSBGaWVsZE9wdGlvbnMgY29udGFpbmVyCi0gICAqIHdoZW4gd2Ug
YWRkIHN1cHBvcnQgZm9yIGN1c3RvbSBvcHRpb25zICh0aGUgRmllbGRPcHRpb25zIHN0cnVjdCB3
aWxsCi0gICAqIGNvbnRhaW4gYm90aCByZWd1bGFyIEZpZWxkT3B0aW9ucyBsaWtlICJsYXp5IiAq
YW5kKiBjdXN0b20gb3B0aW9ucykuICovCi0gIGJvb2wgbGF6eSgpIGNvbnN0OwotCi0gIC8qIEZv
ciBub24tc3RyaW5nLCBub24tc3VibWVzc2FnZSBmaWVsZHMsIHRoaXMgaW5kaWNhdGVzIHdoZXRo
ZXIgYmluYXJ5Ci0gICAqIHByb3RvYnVmcyBhcmUgZW5jb2RlZCBpbiBwYWNrZWQgb3Igbm9uLXBh
Y2tlZCBmb3JtYXQuCi0gICAqCi0gICAqIFRPRE8oaGFiZXJtYW4pOiBzZWUgbm90ZSBhYm92ZSBh
Ym91dCBwdXR0aW5nIG9wdGlvbnMgbGlrZSB0aGlzIGludG8gYQotICAgKiBGaWVsZE9wdGlvbnMg
Y29udGFpbmVyLiAqLwotICBib29sIHBhY2tlZCgpIGNvbnN0OwotCi0gIC8qIEFuIGludGVnZXIg
dGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBpbmRleCBpbnRvIGFuIGFycmF5IG9mIGZpZWxkcyBmb3IK
LSAgICogd2hhdGV2ZXIgbWVzc2FnZSB0aGlzIGZpZWxkIGJlbG9uZ3MgdG8uICBHdWFyYW50ZWVk
IHRvIGJlIGxlc3MgdGhhbgotICAgKiBmLT5jb250YWluaW5nX3R5cGUoKS0+ZmllbGRfY291bnQo
KS4gIE1heSBvbmx5IGJlIGFjY2Vzc2VkIG9uY2UgdGhlIGRlZiBoYXMKLSAgICogYmVlbiBmaW5h
bGl6ZWQuICovCi0gIGludCBpbmRleCgpIGNvbnN0OwotCi0gIC8qIFRoZSBNZXNzYWdlRGVmIHRv
IHdoaWNoIHRoaXMgZmllbGQgYmVsb25ncy4KLSAgICoKLSAgICogSWYgdGhpcyBmaWVsZCBoYXMg
YmVlbiBhZGRlZCB0byBhIE1lc3NhZ2VEZWYsIHRoYXQgbWVzc2FnZSBjYW4gYmUgcmV0cmlldmVk
Ci0gICAqIGRpcmVjdGx5ICh0aGlzIGlzIGFsd2F5cyB0aGUgY2FzZSBmb3IgZnJvemVuIEZpZWxk
RGVmcykuCi0gICAqCi0gICAqIElmIHRoZSBmaWVsZCBoYXMgbm90IHlldCBiZWVuIGFkZGVkIHRv
IGEgTWVzc2FnZURlZiwgeW91IGNhbiBzZXQgdGhlIG5hbWUKLSAgICogb2YgdGhlIGNvbnRhaW5p
bmcgdHlwZSBzeW1ib2xpY2FsbHkgaW5zdGVhZC4gIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IK
LSAgICogZXh0ZW5zaW9ucywgd2hlcmUgdGhlIGV4dGVuc2lvbiBpcyBkZWNsYXJlZCBzZXBhcmF0
ZWx5IGZyb20gdGhlIG1lc3NhZ2UuICovCi0gIGNvbnN0IE1lc3NhZ2VEZWYqIGNvbnRhaW5pbmdf
dHlwZSgpIGNvbnN0OwotICBjb25zdCBjaGFyKiBjb250YWluaW5nX3R5cGVfbmFtZSgpOwotCi0g
IC8qIFRoZSBPbmVvZkRlZiB0byB3aGljaCB0aGlzIGZpZWxkIGJlbG9uZ3MsIG9yIE5VTEwgaWYg
dGhpcyBmaWVsZCBpcyBub3QgcGFydAotICAgKiBvZiBhIG9uZW9mLiAqLwotICBjb25zdCBPbmVv
ZkRlZiogY29udGFpbmluZ19vbmVvZigpIGNvbnN0OwotCi0gIC8qIFRoZSBmaWVsZCdzIHR5cGUg
YWNjb3JkaW5nIHRvIHRoZSBlbnVtIGluIGRlc2NyaXB0b3IucHJvdG8uICBUaGlzIGlzIG5vdAot
ICAgKiB0aGUgc2FtZSBhcyBVUEJfVFlQRV8qLCBiZWNhdXNlIGl0IGRpc3Rpbmd1aXNoZXMgYmV0
d2VlbiAoZm9yIGV4YW1wbGUpCi0gICAqIElOVDMyIGFuZCBTSU5UMzIsIHdoZXJlYXMgb3VyICJ0
eXBlIiBlbnVtIGRvZXMgbm90LiAgVGhpcyByZXR1cm4gb2YKLSAgICogZGVzY3JpcHRvcl90eXBl
KCkgaXMgYSBmdW5jdGlvbiBvZiB0eXBlKCksIGludGVnZXJfZm9ybWF0KCksIGFuZAotICAgKiBp
c190YWdfZGVsaW1pdGVkKCkuICBMaWtld2lzZSBzZXRfZGVzY3JpcHRvcl90eXBlKCkgc2V0cyBh
bGwgdGhyZWUKLSAgICogYXBwcm9wcmlhdGVseS4gKi8KLSAgRGVzY3JpcHRvclR5cGUgZGVzY3Jp
cHRvcl90eXBlKCkgY29uc3Q7Ci0KLSAgLyogQ29udmVuaWVudCBmaWVsZCB0eXBlIHRlc3RzLiAq
LwotICBib29sIElzU3ViTWVzc2FnZSgpIGNvbnN0OwotICBib29sIElzU3RyaW5nKCkgY29uc3Q7
Ci0gIGJvb2wgSXNTZXF1ZW5jZSgpIGNvbnN0OwotICBib29sIElzUHJpbWl0aXZlKCkgY29uc3Q7
Ci0gIGJvb2wgSXNNYXAoKSBjb25zdDsKLQotICAvKiBIb3cgaW50ZWdlcnMgYXJlIGVuY29kZWQu
ICBPbmx5IG1lYW5pbmdmdWwgZm9yIGludGVnZXIgdHlwZXMuCi0gICAqIERlZmF1bHRzIHRvIFVQ
Ql9JTlRGTVRfVkFSSUFCTEUsIGFuZCBpcyByZXNldCB3aGVuICJ0eXBlIiBjaGFuZ2VzLiAqLwot
ICBJbnRlZ2VyRm9ybWF0IGludGVnZXJfZm9ybWF0KCkgY29uc3Q7Ci0KLSAgLyogV2hldGhlciBh
IHN1Ym1lc3NhZ2UgZmllbGQgaXMgdGFnLWRlbGltaXRlZCBvciBub3QgKGlmIGZhbHNlLCB0aGVu
Ci0gICAqIGxlbmd0aC1kZWxpbWl0ZWQpLiAgTWF5IG9ubHkgYmUgc2V0IHdoZW4gdHlwZSgpID09
IFVQQl9UWVBFX01FU1NBR0UuICovCi0gIGJvb2wgaXNfdGFnX2RlbGltaXRlZCgpIGNvbnN0Owot
Ci0gIC8qIFJldHVybnMgdGhlIG5vbi1zdHJpbmcgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBmaWVs
ZGRlZiwgd2hpY2ggbWF5IGVpdGhlcgotICAgKiBiZSBzb21ldGhpbmcgdGhlIGNsaWVudCBzZXQg
ZXhwbGljaXRseSBvciB0aGUgImRlZmF1bHQgZGVmYXVsdCIgKDAgZm9yCi0gICAqIG51bWJlcnMs
IGVtcHR5IGZvciBzdHJpbmdzKS4gIFRoZSBmaWVsZCdzIHR5cGUgaW5kaWNhdGVzIHRoZSB0eXBl
IG9mIHRoZQotICAgKiByZXR1cm5lZCB2YWx1ZSwgZXhjZXB0IGZvciBlbnVtIGZpZWxkcyB0aGF0
IGFyZSBzdGlsbCBtdXRhYmxlLgotICAgKgotICAgKiBSZXF1aXJlcyB0aGF0IHRoZSBnaXZlbiBm
dW5jdGlvbiBtYXRjaGVzIHRoZSBmaWVsZCdzIGN1cnJlbnQgdHlwZS4gKi8KLSAgaW50NjRfdCBk
ZWZhdWx0X2ludDY0KCkgY29uc3Q7Ci0gIGludDMyX3QgZGVmYXVsdF9pbnQzMigpIGNvbnN0Owot
ICB1aW50NjRfdCBkZWZhdWx0X3VpbnQ2NCgpIGNvbnN0OwotICB1aW50MzJfdCBkZWZhdWx0X3Vp
bnQzMigpIGNvbnN0OwotICBib29sIGRlZmF1bHRfYm9vbCgpIGNvbnN0OwotICBmbG9hdCBkZWZh
dWx0X2Zsb2F0KCkgY29uc3Q7Ci0gIGRvdWJsZSBkZWZhdWx0X2RvdWJsZSgpIGNvbnN0OwotCi0g
IC8qIFRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIGFsd2F5cyBOVUxMLXRlcm1pbmF0ZWQuICBJZiBu
b24tTlVMTCwgdGhlIGxlbmd0aAotICAgKiB3aWxsIGJlIHN0b3JlZCBpbiAqbGVuLiAqLwotICBj
b25zdCBjaGFyICpkZWZhdWx0X3N0cmluZyhzaXplX3QqIGxlbikgY29uc3Q7Ci0KLSAgLyogRm9y
IGZyb3plbiBVUEJfVFlQRV9FTlVNIGZpZWxkcywgZW51bSBkZWZhdWx0cyBjYW4gYWx3YXlzIGJl
IHJlYWQgYXMgZWl0aGVyCi0gICAqIHN0cmluZyBvciBpbnQzMiwgYW5kIGJvdGggb2YgdGhlc2Ug
bWV0aG9kcyB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KLSAgICoKLSAgICogRm9yIG11dGFibGUg
VVBCX1RZUEVfRU5VTSBmaWVsZHMsIHRoZSBzdG9yeSBpcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVk
LgotICAgKiBFbnVtIGRlZmF1bHRzIGFyZSB1bnVzdWFsLiBUaGV5IGNhbiBiZSBzcGVjaWZpZWQg
ZWl0aGVyIGFzIHN0cmluZyBvciBpbnQzMiwKLSAgICogYnV0IHRvIGJlIHZhbGlkIHRoZSBlbnVt
IG11c3QgaGF2ZSB0aGF0IHZhbHVlIGFzIGEgbWVtYmVyLiAgQW5kIGlmIG5vCi0gICAqIGRlZmF1
bHQgaXMgc3BlY2lmaWVkLCB0aGUgImRlZmF1bHQgZGVmYXVsdCIgY29tZXMgZnJvbSB0aGUgRW51
bURlZi4KLSAgICoKLSAgICogV2UgYWxsb3cgcmVhZGluZyB0aGUgZGVmYXVsdCBhcyBlaXRoZXIg
YW4gaW50MzIgb3IgYSBzdHJpbmcsIGJ1dCBvbmx5IGlmCi0gICAqIHdlIGhhdmUgYSBtZWFuaW5n
ZnVsIHZhbHVlIHRvIHJlcG9ydC4gIFdlIGhhdmUgYSBtZWFuaW5nZnVsIHZhbHVlIGlmIGl0IHdh
cwotICAgKiBzZXQgZXhwbGljaXRseSwgb3IgaWYgd2UgY291bGQgZ2V0IHRoZSAiZGVmYXVsdCBk
ZWZhdWx0IiBmcm9tIHRoZSBFbnVtRGVmLgotICAgKiBBbHNvIGlmIHlvdSBleHBsaWNpdGx5IHNl
dCB0aGUgbmFtZSBhbmQgd2UgZmluZCB0aGUgbnVtYmVyIGluIHRoZSBFbnVtRGVmICovCi0gIGJv
b2wgRW51bUhhc1N0cmluZ0RlZmF1bHQoKSBjb25zdDsKLSAgYm9vbCBFbnVtSGFzSW50MzJEZWZh
dWx0KCkgY29uc3Q7Ci0KLSAgLyogU3VibWVzc2FnZSBhbmQgZW51bSBmaWVsZHMgbXVzdCByZWZl
cmVuY2UgYSAic3ViZGVmIiwgd2hpY2ggaXMgdGhlCi0gICAqIHVwYjo6TWVzc2FnZURlZiBvciB1
cGI6OkVudW1EZWYgdGhhdCBkZWZpbmVzIHRoZWlyIHR5cGUuICBOb3RlIHRoYXQgd2hlbgotICAg
KiB0aGUgRmllbGREZWYgaXMgbXV0YWJsZSBpdCBtYXkgbm90IGhhdmUgYSBzdWJkZWYgKnlldCos
IGJ1dCB0aGlzIGZ1bmN0aW9uCi0gICAqIHN0aWxsIHJldHVybnMgdHJ1ZSB0byBpbmRpY2F0ZSB0
aGF0IHRoZSBmaWVsZCdzIHR5cGUgcmVxdWlyZXMgYSBzdWJkZWYuICovCi0gIGJvb2wgSGFzU3Vi
RGVmKCkgY29uc3Q7Ci0KLSAgLyogUmV0dXJucyB0aGUgZW51bSBvciBzdWJtZXNzYWdlIGRlZiBm
b3IgdGhpcyBmaWVsZCwgaWYgYW55LiAgVGhlIGZpZWxkJ3MKLSAgICogdHlwZSBtdXN0IG1hdGNo
IChpZS4geW91IG1heSBvbmx5IGNhbGwgZW51bV9zdWJkZWYoKSBmb3IgZmllbGRzIHdoZXJlCi0g
ICAqIHR5cGUoKSA9PSBVUEJfVFlQRV9FTlVNKS4gIFJldHVybnMgTlVMTCBpZiB0aGUgc3ViZGVm
IGhhcyBub3QgYmVlbiBzZXQgb3IKLSAgICogaXMgY3VycmVudGx5IHNldCBzeW1ib2xpY2FsbHku
ICovCi0gIGNvbnN0IEVudW1EZWYqIGVudW1fc3ViZGVmKCkgY29uc3Q7Ci0gIGNvbnN0IE1lc3Nh
Z2VEZWYqIG1lc3NhZ2Vfc3ViZGVmKCkgY29uc3Q7Ci0KLSAgLyogUmV0dXJucyB0aGUgZ2VuZXJp
YyBzdWJkZWYgZm9yIHRoaXMgZmllbGQuICBSZXF1aXJlcyB0aGF0IEhhc1N1YkRlZigpIChpZS4K
LSAgICogb25seSB3b3JrcyBmb3IgVVBCX1RZUEVfRU5VTSBhbmQgVVBCX1RZUEVfTUVTU0FHRSBm
aWVsZHMpLiAqLwotICBjb25zdCBEZWYqIHN1YmRlZigpIGNvbnN0OwotCi0gIC8qIFJldHVybnMg
dGhlIHN5bWJvbGljIG5hbWUgb2YgdGhlIHN1YmRlZi4gIElmIHRoZSBzdWJkZWYgaXMgY3VycmVu
dGx5IHNldAotICAgKiB1bnJlc29sdmVkIChpZS4gc2V0IHN5bWJvbGljYWxseSkgcmV0dXJucyB0
aGUgc3ltYm9saWMgbmFtZS4gIElmIGl0IGhhcwotICAgKiBiZWVuIHJlc29sdmVkIHRvIGEgc3Bl
Y2lmaWMgc3ViZGVmLCByZXR1cm5zIHRoZSBuYW1lIGZyb20gdGhhdCBzdWJkZWYuICovCi0gIGNv
bnN0IGNoYXIqIHN1YmRlZl9uYW1lKCkgY29uc3Q7Ci0KLSAgLyogU2V0dGVycyAobm9uLWNvbnN0
IG1ldGhvZHMpLCBvbmx5IHZhbGlkIGZvciBtdXRhYmxlIEZpZWxkRGVmcyEgKioqKioqKioqKiov
Ci0KLSAgYm9vbCBzZXRfZnVsbF9uYW1lKGNvbnN0IGNoYXIqIGZ1bGxuYW1lLCB1cGI6OlN0YXR1
cyogcyk7Ci0gIGJvb2wgc2V0X2Z1bGxfbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZnVsbG5hbWUs
IHVwYjo6U3RhdHVzKiBzKTsKLQotICAvKiBUaGlzIG1heSBvbmx5IGJlIGNhbGxlZCBpZiBjb250
YWluaW5nX3R5cGUoKSA9PSBOVUxMIChpZS4gdGhlIGZpZWxkIGhhcyBub3QKLSAgICogYmVlbiBh
ZGRlZCB0byBhIG1lc3NhZ2UgeWV0KS4gKi8KLSAgYm9vbCBzZXRfY29udGFpbmluZ190eXBlX25h
bWUoY29uc3QgY2hhciAqbmFtZSwgU3RhdHVzKiBzdGF0dXMpOwotICBib29sIHNldF9jb250YWlu
aW5nX3R5cGVfbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgU3RhdHVzKiBzdGF0dXMpOwot
Ci0gIC8qIERlZmF1bHRzIHRvIGZhbHNlLiAgV2hlbiB3ZSBmcmVlemUsIHdlIGVuc3VyZSB0aGF0
IHRoaXMgY2FuIG9ubHkgYmUgdHJ1ZQotICAgKiBmb3IgbGVuZ3RoLWRlbGltaXRlZCBtZXNzYWdl
IGZpZWxkcy4gIFByaW9yIHRvIGZyZWV6aW5nIHRoaXMgY2FuIGJlIHRydWUgb3IKLSAgICogZmFs
c2Ugd2l0aCBubyByZXN0cmljdGlvbnMuICovCi0gIHZvaWQgc2V0X2xhenkoYm9vbCBsYXp5KTsK
LQotICAvKiBEZWZhdWx0cyB0byB0cnVlLiAgU2V0cyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgZW5j
b2RlZCBpbiBwYWNrZWQgZm9ybWF0LiAqLwotICB2b2lkIHNldF9wYWNrZWQoYm9vbCBwYWNrZWQp
OwotCi0gIC8qICJ0eXBlIiBvciAiZGVzY3JpcHRvcl90eXBlIiBNVVNUIGJlIHNldCBleHBsaWNp
dGx5IGJlZm9yZSB0aGUgZmllbGRkZWYgaXMKLSAgICogZmluYWxpemVkLiAgVGhlc2Ugc2V0dGVy
cyByZXF1aXJlIHRoYXQgdGhlIGVudW0gdmFsdWUgaXMgdmFsaWQ7IGlmIHRoZQotICAgKiB2YWx1
ZSBkaWQgbm90IGNvbWUgZGlyZWN0bHkgZnJvbSBhbiBlbnVtIGNvbnN0YW50LCB0aGUgY2FsbGVy
IHNob3VsZAotICAgKiB2YWxpZGF0ZSBpdCBmaXJzdCB3aXRoIHRoZSBmdW5jdGlvbnMgYWJvdmUg
KENoZWNrRmllbGRUeXBlKCksIGV0YykuICovCi0gIHZvaWQgc2V0X3R5cGUoVHlwZSB0eXBlKTsK
LSAgdm9pZCBzZXRfbGFiZWwoTGFiZWwgbGFiZWwpOwotICB2b2lkIHNldF9kZXNjcmlwdG9yX3R5
cGUoRGVzY3JpcHRvclR5cGUgdHlwZSk7Ci0gIHZvaWQgc2V0X2lzX2V4dGVuc2lvbihib29sIGlz
X2V4dGVuc2lvbik7Ci0KLSAgLyogIm51bWJlciIgYW5kICJuYW1lIiBtdXN0IGJlIHNldCBiZWZv
cmUgdGhlIEZpZWxkRGVmIGlzIGFkZGVkIHRvIGEKLSAgICogTWVzc2FnZURlZiwgYW5kIG1heSBu
b3QgYmUgc2V0IGFmdGVyIHRoYXQuCi0gICAqCi0gICAqICJuYW1lIiBpcyB0aGUgc2FtZSBhcyBm
dWxsX25hbWUoKS9zZXRfZnVsbF9uYW1lKCksIGJ1dCBzaW5jZSBmaWVsZGRlZnMKLSAgICogbW9z
dCBvZnRlbiB1c2Ugc2ltcGxlLCBub24tcXVhbGlmaWVkIG5hbWVzLCB3ZSBwcm92aWRlIHRoaXMg
YWNjZXNzb3IKLSAgICogYWxzby4gIEdlbmVyYWxseSBvbmx5IGV4dGVuc2lvbnMgd2lsbCB3YW50
IHRvIHRoaW5rIG9mIHRoaXMgbmFtZSBhcwotICAgKiBmdWxseS1xdWFsaWZpZWQuICovCi0gIGJv
b2wgc2V0X251bWJlcih1aW50MzJfdCBudW1iZXIsIHVwYjo6U3RhdHVzKiBzKTsKLSAgYm9vbCBz
ZXRfbmFtZShjb25zdCBjaGFyKiBuYW1lLCB1cGI6OlN0YXR1cyogcyk7Ci0gIGJvb2wgc2V0X25h
bWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHVwYjo6U3RhdHVzKiBzKTsKLQotICB2b2lkIHNl
dF9pbnRlZ2VyX2Zvcm1hdChJbnRlZ2VyRm9ybWF0IGZvcm1hdCk7Ci0gIGJvb2wgc2V0X3RhZ19k
ZWxpbWl0ZWQoYm9vbCB0YWdfZGVsaW1pdGVkLCB1cGI6OlN0YXR1cyogcyk7Ci0KLSAgLyogU2V0
cyBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZmllbGQuICBUaGUgY2FsbCBtdXN0IGV4YWN0bHkgbWF0
Y2ggdGhlIHR5cGUKLSAgICogb2YgdGhlIGZpZWxkLiAgRW51bSBmaWVsZHMgbWF5IHVzZSBlaXRo
ZXIgc2V0aW50MzIgb3Igc2V0c3RyaW5nIHRvIHNldAotICAgKiB0aGUgZGVmYXVsdCBudW1lcmlj
YWxseSBvciBzeW1ib2xpY2FsbHksIHJlc3BlY3RpdmVseSwgYnV0IHN5bWJvbGljCi0gICAqIGRl
ZmF1bHRzIG11c3QgYmUgcmVzb2x2ZWQgYmVmb3JlIGZpbmFsaXppbmcgKHNlZSBSZXNvbHZlRW51
bURlZmF1bHQoKSkuCi0gICAqCi0gICAqIENoYW5naW5nIHRoZSB0eXBlIG9mIGEgZmllbGQgd2ls
bCByZXNldCBpdHMgZGVmYXVsdC4gKi8KLSAgdm9pZCBzZXRfZGVmYXVsdF9pbnQ2NChpbnQ2NF90
IHZhbCk7Ci0gIHZvaWQgc2V0X2RlZmF1bHRfaW50MzIoaW50MzJfdCB2YWwpOwotICB2b2lkIHNl
dF9kZWZhdWx0X3VpbnQ2NCh1aW50NjRfdCB2YWwpOwotICB2b2lkIHNldF9kZWZhdWx0X3VpbnQz
Mih1aW50MzJfdCB2YWwpOwotICB2b2lkIHNldF9kZWZhdWx0X2Jvb2woYm9vbCB2YWwpOwotICB2
b2lkIHNldF9kZWZhdWx0X2Zsb2F0KGZsb2F0IHZhbCk7Ci0gIHZvaWQgc2V0X2RlZmF1bHRfZG91
YmxlKGRvdWJsZSB2YWwpOwotICBib29sIHNldF9kZWZhdWx0X3N0cmluZyhjb25zdCB2b2lkICpz
dHIsIHNpemVfdCBsZW4sIFN0YXR1cyAqcyk7Ci0gIGJvb2wgc2V0X2RlZmF1bHRfc3RyaW5nKGNv
bnN0IHN0ZDo6c3RyaW5nICZzdHIsIFN0YXR1cyAqcyk7Ci0gIHZvaWQgc2V0X2RlZmF1bHRfY3N0
cihjb25zdCBjaGFyICpzdHIsIFN0YXR1cyAqcyk7Ci0KLSAgLyogQmVmb3JlIGEgZmllbGRkZWYg
aXMgZnJvemVuLCBpdHMgc3ViZGVmIG1heSBiZSBzZXQgZWl0aGVyIGRpcmVjdGx5ICh3aXRoIGEK
LSAgICogdXBiOjpEZWYqKSBvciBzeW1ib2xpY2FsbHkuICBTeW1ib2xpYyByZWZzIG11c3QgYmUg
cmVzb2x2ZWQgYmVmb3JlIHRoZQotICAgKiBjb250YWluaW5nIG1zZ2RlZiBjYW4gYmUgZnJvemVu
IChzZWUgdXBiX3Jlc29sdmUoKSBhYm92ZSkuICB1cGIgYWx3YXlzCi0gICAqIGd1YXJhbnRlZXMg
dGhhdCBhbnkgZGVmIHJlYWNoYWJsZSBmcm9tIGEgbGl2ZSBkZWYgd2lsbCBhbHNvIGJlIGtlcHQg
YWxpdmUuCi0gICAqCi0gICAqIEJvdGggbWV0aG9kcyByZXF1aXJlIHRoYXQgdXBiX2hhc3N1YmRl
ZihmKSAoc28gdGhlIHR5cGUgbXVzdCBiZSBzZXQgcHJpb3IKLSAgICogdG8gY2FsbGluZyB0aGVz
ZSBtZXRob2RzKS4gIFJldHVybnMgZmFsc2UgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIG9yIGlm
Ci0gICAqIHRoZSBnaXZlbiBzdWJkZWYgaXMgbm90IG9mIHRoZSBjb3JyZWN0IHR5cGUuICBUaGUg
c3ViZGVmIGlzIHJlc2V0IGlmIHRoZQotICAgKiBmaWVsZCdzIHR5cGUgaXMgY2hhbmdlZC4gIFRo
ZSBzdWJkZWYgY2FuIGJlIHNldCB0byBOVUxMIHRvIGNsZWFyIGl0LiAqLwotICBib29sIHNldF9z
dWJkZWYoY29uc3QgRGVmKiBzdWJkZWYsIFN0YXR1cyogcyk7Ci0gIGJvb2wgc2V0X2VudW1fc3Vi
ZGVmKGNvbnN0IEVudW1EZWYqIHN1YmRlZiwgU3RhdHVzKiBzKTsKLSAgYm9vbCBzZXRfbWVzc2Fn
ZV9zdWJkZWYoY29uc3QgTWVzc2FnZURlZiogc3ViZGVmLCBTdGF0dXMqIHMpOwotICBib29sIHNl
dF9zdWJkZWZfbmFtZShjb25zdCBjaGFyKiBuYW1lLCBTdGF0dXMqIHMpOwotICBib29sIHNldF9z
dWJkZWZfbmFtZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgU3RhdHVzKiBzKTsKLQotIHByaXZh
dGU6Ci0gIFVQQl9ESVNBTExPV19QT0RfT1BTKEZpZWxkRGVmLCB1cGI6OkZpZWxkRGVmKQotfTsK
LQotIyBlbmRpZiAgLyogZGVmaW5lZChfX2NwbHVzcGx1cykgKi8KLQotVVBCX0JFR0lOX0VYVEVS
Tl9DCi0KLS8qIE5hdGl2ZSBDIEFQSS4gKi8KLXVwYl9maWVsZGRlZiAqdXBiX2ZpZWxkZGVmX25l
dyhjb25zdCB2b2lkICpvd25lcik7Ci11cGJfZmllbGRkZWYgKnVwYl9maWVsZGRlZl9kdXAoY29u
c3QgdXBiX2ZpZWxkZGVmICpmLCBjb25zdCB2b2lkICpvd25lcik7Ci0KLS8qIEluY2x1ZGUgdXBi
X3JlZmNvdW50ZWQgbWV0aG9kcyBsaWtlIHVwYl9maWVsZGRlZl9yZWYoKS4gKi8KLVVQQl9SRUZD
T1VOVEVEX0NNRVRIT0RTKHVwYl9maWVsZGRlZiwgdXBiX2ZpZWxkZGVmX3VwY2FzdDIpCi0KLS8q
IE1ldGhvZHMgZnJvbSB1cGJfZGVmLiAqLwotY29uc3QgY2hhciAqdXBiX2ZpZWxkZGVmX2Z1bGxu
YW1lKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1ib29sIHVwYl9maWVsZGRlZl9zZXRmdWxsbmFt
ZSh1cGJfZmllbGRkZWYgKmYsIGNvbnN0IGNoYXIgKmZ1bGxuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcyk7Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX3R5cGVp
c3NldChjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotdXBiX2ZpZWxkdHlwZV90IHVwYl9maWVsZGRl
Zl90eXBlKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci11cGJfZGVzY3JpcHRvcnR5cGVfdCB1cGJf
ZmllbGRkZWZfZGVzY3JpcHRvcnR5cGUoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLXVwYl9sYWJl
bF90IHVwYl9maWVsZGRlZl9sYWJlbChjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotdWludDMyX3Qg
dXBiX2ZpZWxkZGVmX251bWJlcihjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotY29uc3QgY2hhciAq
dXBiX2ZpZWxkZGVmX25hbWUoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLWJvb2wgdXBiX2ZpZWxk
ZGVmX2lzZXh0ZW5zaW9uKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1ib29sIHVwYl9maWVsZGRl
Zl9sYXp5KGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1ib29sIHVwYl9maWVsZGRlZl9wYWNrZWQo
Y29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLWNvbnN0IHVwYl9tc2dkZWYgKnVwYl9maWVsZGRlZl9j
b250YWluaW5ndHlwZShjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotY29uc3QgdXBiX29uZW9mZGVm
ICp1cGJfZmllbGRkZWZfY29udGFpbmluZ29uZW9mKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci11
cGJfbXNnZGVmICp1cGJfZmllbGRkZWZfY29udGFpbmluZ3R5cGVfbXV0YWJsZSh1cGJfZmllbGRk
ZWYgKmYpOwotY29uc3QgY2hhciAqdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlbmFtZSh1cGJf
ZmllbGRkZWYgKmYpOwotdXBiX2ludGZtdF90IHVwYl9maWVsZGRlZl9pbnRmbXQoY29uc3QgdXBi
X2ZpZWxkZGVmICpmKTsKLXVpbnQzMl90IHVwYl9maWVsZGRlZl9pbmRleChjb25zdCB1cGJfZmll
bGRkZWYgKmYpOwotYm9vbCB1cGJfZmllbGRkZWZfaXN0YWdkZWxpbShjb25zdCB1cGJfZmllbGRk
ZWYgKmYpOwotYm9vbCB1cGJfZmllbGRkZWZfaXNzdWJtc2coY29uc3QgdXBiX2ZpZWxkZGVmICpm
KTsKLWJvb2wgdXBiX2ZpZWxkZGVmX2lzc3RyaW5nKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1i
b29sIHVwYl9maWVsZGRlZl9pc3NlcShjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotYm9vbCB1cGJf
ZmllbGRkZWZfaXNwcmltaXRpdmUoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLWJvb2wgdXBiX2Zp
ZWxkZGVmX2lzbWFwKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1pbnQ2NF90IHVwYl9maWVsZGRl
Zl9kZWZhdWx0aW50NjQoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLWludDMyX3QgdXBiX2ZpZWxk
ZGVmX2RlZmF1bHRpbnQzMihjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotdWludDY0X3QgdXBiX2Zp
ZWxkZGVmX2RlZmF1bHR1aW50NjQoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLXVpbnQzMl90IHVw
Yl9maWVsZGRlZl9kZWZhdWx0dWludDMyKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1ib29sIHVw
Yl9maWVsZGRlZl9kZWZhdWx0Ym9vbChjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotZmxvYXQgdXBi
X2ZpZWxkZGVmX2RlZmF1bHRmbG9hdChjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotZG91YmxlIHVw
Yl9maWVsZGRlZl9kZWZhdWx0ZG91YmxlKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1jb25zdCBj
aGFyICp1cGJfZmllbGRkZWZfZGVmYXVsdHN0cihjb25zdCB1cGJfZmllbGRkZWYgKmYsIHNpemVf
dCAqbGVuKTsKLWJvb2wgdXBiX2ZpZWxkZGVmX2VudW1oYXNkZWZhdWx0aW50MzIoY29uc3QgdXBi
X2ZpZWxkZGVmICpmKTsKLWJvb2wgdXBiX2ZpZWxkZGVmX2VudW1oYXNkZWZhdWx0c3RyKGNvbnN0
IHVwYl9maWVsZGRlZiAqZik7Ci1ib29sIHVwYl9maWVsZGRlZl9oYXNzdWJkZWYoY29uc3QgdXBi
X2ZpZWxkZGVmICpmKTsKLWNvbnN0IHVwYl9kZWYgKnVwYl9maWVsZGRlZl9zdWJkZWYoY29uc3Qg
dXBiX2ZpZWxkZGVmICpmKTsKLWNvbnN0IHVwYl9tc2dkZWYgKnVwYl9maWVsZGRlZl9tc2dzdWJk
ZWYoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLWNvbnN0IHVwYl9lbnVtZGVmICp1cGJfZmllbGRk
ZWZfZW51bXN1YmRlZihjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotY29uc3QgY2hhciAqdXBiX2Zp
ZWxkZGVmX3N1YmRlZm5hbWUoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLQotdm9pZCB1cGJfZmll
bGRkZWZfc2V0dHlwZSh1cGJfZmllbGRkZWYgKmYsIHVwYl9maWVsZHR5cGVfdCB0eXBlKTsKLXZv
aWQgdXBiX2ZpZWxkZGVmX3NldGRlc2NyaXB0b3J0eXBlKHVwYl9maWVsZGRlZiAqZiwgaW50IHR5
cGUpOwotdm9pZCB1cGJfZmllbGRkZWZfc2V0bGFiZWwodXBiX2ZpZWxkZGVmICpmLCB1cGJfbGFi
ZWxfdCBsYWJlbCk7Ci1ib29sIHVwYl9maWVsZGRlZl9zZXRudW1iZXIodXBiX2ZpZWxkZGVmICpm
LCB1aW50MzJfdCBudW1iZXIsIHVwYl9zdGF0dXMgKnMpOwotYm9vbCB1cGJfZmllbGRkZWZfc2V0
bmFtZSh1cGJfZmllbGRkZWYgKmYsIGNvbnN0IGNoYXIgKm5hbWUsIHVwYl9zdGF0dXMgKnMpOwot
Ym9vbCB1cGJfZmllbGRkZWZfc2V0Y29udGFpbmluZ3R5cGVuYW1lKHVwYl9maWVsZGRlZiAqZiwg
Y29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cGJfc3RhdHVzICpzKTsKLXZvaWQgdXBiX2ZpZWxkZGVmX3NldGlzZXh0ZW5zaW9uKHVwYl9m
aWVsZGRlZiAqZiwgYm9vbCBpc19leHRlbnNpb24pOwotdm9pZCB1cGJfZmllbGRkZWZfc2V0bGF6
eSh1cGJfZmllbGRkZWYgKmYsIGJvb2wgbGF6eSk7Ci12b2lkIHVwYl9maWVsZGRlZl9zZXRwYWNr
ZWQodXBiX2ZpZWxkZGVmICpmLCBib29sIHBhY2tlZCk7Ci12b2lkIHVwYl9maWVsZGRlZl9zZXRp
bnRmbXQodXBiX2ZpZWxkZGVmICpmLCB1cGJfaW50Zm10X3QgZm10KTsKLXZvaWQgdXBiX2ZpZWxk
ZGVmX3NldHRhZ2RlbGltKHVwYl9maWVsZGRlZiAqZiwgYm9vbCB0YWdfZGVsaW0pOwotdm9pZCB1
cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGludDY0KHVwYl9maWVsZGRlZiAqZiwgaW50NjRfdCB2YWwp
Owotdm9pZCB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGludDMyKHVwYl9maWVsZGRlZiAqZiwgaW50
MzJfdCB2YWwpOwotdm9pZCB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdHVpbnQ2NCh1cGJfZmllbGRk
ZWYgKmYsIHVpbnQ2NF90IHZhbCk7Ci12b2lkIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0dWludDMy
KHVwYl9maWVsZGRlZiAqZiwgdWludDMyX3QgdmFsKTsKLXZvaWQgdXBiX2ZpZWxkZGVmX3NldGRl
ZmF1bHRib29sKHVwYl9maWVsZGRlZiAqZiwgYm9vbCB2YWwpOwotdm9pZCB1cGJfZmllbGRkZWZf
c2V0ZGVmYXVsdGZsb2F0KHVwYl9maWVsZGRlZiAqZiwgZmxvYXQgdmFsKTsKLXZvaWQgdXBiX2Zp
ZWxkZGVmX3NldGRlZmF1bHRkb3VibGUodXBiX2ZpZWxkZGVmICpmLCBkb3VibGUgdmFsKTsKLWJv
b2wgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRzdHIodXBiX2ZpZWxkZGVmICpmLCBjb25zdCB2b2lk
ICpzdHIsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9z
dGF0dXMgKnMpOwotdm9pZCB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGNzdHIodXBiX2ZpZWxkZGVm
ICpmLCBjb25zdCBjaGFyICpzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
cGJfc3RhdHVzICpzKTsKLWJvb2wgdXBiX2ZpZWxkZGVmX3NldHN1YmRlZih1cGJfZmllbGRkZWYg
KmYsIGNvbnN0IHVwYl9kZWYgKnN1YmRlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
cGJfc3RhdHVzICpzKTsKLWJvb2wgdXBiX2ZpZWxkZGVmX3NldG1zZ3N1YmRlZih1cGJfZmllbGRk
ZWYgKmYsIGNvbnN0IHVwYl9tc2dkZWYgKnN1YmRlZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGJfc3RhdHVzICpzKTsKLWJvb2wgdXBiX2ZpZWxkZGVmX3NldGVudW1zdWJkZWYo
dXBiX2ZpZWxkZGVmICpmLCBjb25zdCB1cGJfZW51bWRlZiAqc3ViZGVmLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cGJfc3RhdHVzICpzKTsKLWJvb2wgdXBiX2ZpZWxkZGVmX3Nl
dHN1YmRlZm5hbWUodXBiX2ZpZWxkZGVmICpmLCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3RhdHVzICpzKTsKLQotYm9vbCB1cGJfZmllbGRk
ZWZfY2hlY2tsYWJlbChpbnQzMl90IGxhYmVsKTsKLWJvb2wgdXBiX2ZpZWxkZGVmX2NoZWNrdHlw
ZShpbnQzMl90IHR5cGUpOwotYm9vbCB1cGJfZmllbGRkZWZfY2hlY2tkZXNjcmlwdG9ydHlwZShp
bnQzMl90IHR5cGUpOwotYm9vbCB1cGJfZmllbGRkZWZfY2hlY2tpbnRmbXQoaW50MzJfdCBmbXQp
OwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLQotLyogdXBiOjpNZXNzYWdlRGVmICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdHlw
ZWRlZiB1cGJfaW50dGFibGVfaXRlciB1cGJfbXNnX2ZpZWxkX2l0ZXI7Ci10eXBlZGVmIHVwYl9z
dHJ0YWJsZV9pdGVyIHVwYl9tc2dfb25lb2ZfaXRlcjsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0K
LS8qIFN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhIHNpbmdsZSAucHJvdG8gbWVzc2FnZSB0eXBl
LgotICoKLSAqIEl0cyBiYXNlIGNsYXNzIGlzIHVwYjo6RGVmICh1c2UgdXBiOjp1cGNhc3QoKSB0
byBjb252ZXJ0KS4gKi8KLWNsYXNzIHVwYjo6TWVzc2FnZURlZiB7Ci0gcHVibGljOgotICAvKiBS
ZXR1cm5zIE5VTEwgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiAqLwotICBzdGF0aWMgcmVm
ZmVkX3B0cjxNZXNzYWdlRGVmPiBOZXcoKTsKLQotICAvKiB1cGI6OlJlZkNvdW50ZWQgbWV0aG9k
cyBsaWtlIFJlZigpL1VucmVmKCkuICovCi0gIFVQQl9SRUZDT1VOVEVEX0NQUE1FVEhPRFMKLQot
ICAvKiBGdW5jdGlvbmFsaXR5IGZyb20gdXBiOjpEZWYuICovCi0gIGNvbnN0IGNoYXIqIGZ1bGxf
bmFtZSgpIGNvbnN0OwotICBib29sIHNldF9mdWxsX25hbWUoY29uc3QgY2hhciogZnVsbG5hbWUs
IFN0YXR1cyogcyk7Ci0gIGJvb2wgc2V0X2Z1bGxfbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZnVs
bG5hbWUsIFN0YXR1cyogcyk7Ci0KLSAgLyogQ2FsbCB0byBmcmVlemUgdGhpcyBNZXNzYWdlRGVm
LgotICAgKiBXQVJOSU5HOiB0aGlzIHdpbGwgZmFpbCBpZiB0aGlzIG1lc3NhZ2UgaGFzIGFueSB1
bmZyb3plbiBzdWJtZXNzYWdlcyEKLSAgICogTWVzc2FnZXMgd2l0aCBjeWNsZXMgbXVzdCBiZSBm
cm96ZW4gYXMgYSBiYXRjaCB1c2luZyB1cGI6OkRlZjo6RnJlZXplKCkuICovCi0gIGJvb2wgRnJl
ZXplKFN0YXR1cyogcyk7Ci0KLSAgLyogVGhlIG51bWJlciBvZiBmaWVsZHMgdGhhdCBiZWxvbmcg
dG8gdGhlIE1lc3NhZ2VEZWYuICovCi0gIGludCBmaWVsZF9jb3VudCgpIGNvbnN0OwotCi0gIC8q
IFRoZSBudW1iZXIgb2Ygb25lb2ZzIHRoYXQgYmVsb25nIHRvIHRoZSBNZXNzYWdlRGVmLiAqLwot
ICBpbnQgb25lb2ZfY291bnQoKSBjb25zdDsKLQotICAvKiBBZGRzIGEgZmllbGQgKHVwYl9maWVs
ZGRlZiBvYmplY3QpIHRvIGEgbXNnZGVmLiAgUmVxdWlyZXMgdGhhdCB0aGUgbXNnZGVmCi0gICAq
IGFuZCB0aGUgZmllbGRkZWZzIGFyZSBtdXRhYmxlLiAgVGhlIGZpZWxkZGVmJ3MgbmFtZSBhbmQg
bnVtYmVyIG11c3QgYmUKLSAgICogc2V0LCBhbmQgdGhlIG1lc3NhZ2UgbWF5IG5vdCBhbHJlYWR5
IGNvbnRhaW4gYW55IGZpZWxkIHdpdGggdGhpcyBuYW1lIG9yCi0gICAqIG51bWJlciwgYW5kIHRo
aXMgZmllbGRkZWYgbWF5IG5vdCBiZSBwYXJ0IG9mIGFub3RoZXIgbWVzc2FnZS4gIEluIGVycm9y
Ci0gICAqIGNhc2VzIGZhbHNlIGlzIHJldHVybmVkIGFuZCB0aGUgbXNnZGVmIGlzIHVuY2hhbmdl
ZC4KLSAgICoKLSAgICogSWYgdGhlIGdpdmVuIGZpZWxkIGlzIHBhcnQgb2YgYSBvbmVvZiwgdGhp
cyBjYWxsIHN1Y2NlZWRzIGlmIGFuZCBvbmx5IGlmCi0gICAqIHRoYXQgb25lb2YgaXMgYWxyZWFk
eSBwYXJ0IG9mIHRoaXMgbXNnZGVmLiAoTm90ZSB0aGF0IGFkZGluZyBhIG9uZW9mIHRvIGEKLSAg
ICogbXNnZGVmIGF1dG9tYXRpY2FsbHkgYWRkcyBhbGwgb2YgaXRzIGZpZWxkcyB0byB0aGUgbXNn
ZGVmIGF0IHRoZSB0aW1lIHRoYXQKLSAgICogdGhlIG9uZW9mIGlzIGFkZGVkLCBzbyBpdCBpcyB1
c3VhbGx5IG1vcmUgaWRpb21hdGljIHRvIGFkZCB0aGUgb25lb2YncwotICAgKiBmaWVsZHMgZmly
c3QgdGhlbiBhZGQgdGhlIG9uZW9mIHRvIHRoZSBtc2dkZWYuIFRoaXMgY2FzZSBpcyBzdXBwb3J0
ZWQgZm9yCi0gICAqIGNvbnZlbmllbmNlLikKLSAgICoKLSAgICogSWYgfGZ8IGlzIGFscmVhZHkg
cGFydCBvZiB0aGlzIE1lc3NhZ2VEZWYsIHRoaXMgbWV0aG9kIHBlcmZvcm1zIG5vIGFjdGlvbgot
ICAgKiBhbmQgcmV0dXJucyB0cnVlIChzdWNjZXNzKS4gVGh1cywgdGhpcyBtZXRob2QgaXMgaWRl
bXBvdGVudC4gKi8KLSAgYm9vbCBBZGRGaWVsZChGaWVsZERlZiogZiwgU3RhdHVzKiBzKTsKLSAg
Ym9vbCBBZGRGaWVsZChjb25zdCByZWZmZWRfcHRyPEZpZWxkRGVmPiYgZiwgU3RhdHVzKiBzKTsK
LQotICAvKiBBZGRzIGEgb25lb2YgKHVwYl9vbmVvZmRlZiBvYmplY3QpIHRvIGEgbXNnZGVmLiBS
ZXF1aXJlcyB0aGF0IHRoZSBtc2dkZWYsCi0gICAqIG9uZW9mLCBhbmQgYW55IGZpZWxkZGVmcyBh
cmUgbXV0YWJsZSwgdGhhdCB0aGUgZmllbGRkZWZzIGNvbnRhaW5lZCBpbiB0aGUKLSAgICogb25l
b2YgZG8gbm90IGhhdmUgYW55IG5hbWUgb3IgbnVtYmVyIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5n
IGZpZWxkcyBpbiB0aGUKLSAgICogbXNnZGVmLCBhbmQgdGhhdCB0aGUgb25lb2YncyBuYW1lIGlz
IHVuaXF1ZSBhbW9uZyBhbGwgb25lb2ZzIGluIHRoZSBtc2dkZWYuCi0gICAqIElmIHRoZSBvbmVv
ZiBpcyBhZGRlZCBzdWNjZXNzZnVsbHksIGFsbCBvZiBpdHMgZmllbGRzIHdpbGwgYmUgYWRkZWQK
LSAgICogZGlyZWN0bHkgdG8gdGhlIG1zZ2RlZiBhcyB3ZWxsLiBJbiBlcnJvciBjYXNlcywgZmFs
c2UgaXMgcmV0dXJuZWQgYW5kIHRoZQotICAgKiBtc2dkZWYgaXMgdW5jaGFuZ2VkLiAqLwotICBi
b29sIEFkZE9uZW9mKE9uZW9mRGVmKiBvLCBTdGF0dXMqIHMpOwotICBib29sIEFkZE9uZW9mKGNv
bnN0IHJlZmZlZF9wdHI8T25lb2ZEZWY+JiBvLCBTdGF0dXMqIHMpOwotCi0gIC8qIFRoZXNlIHJl
dHVybiBOVUxMIGlmIHRoZSBmaWVsZCBpcyBub3QgZm91bmQuICovCi0gIEZpZWxkRGVmKiBGaW5k
RmllbGRCeU51bWJlcih1aW50MzJfdCBudW1iZXIpOwotICBGaWVsZERlZiogRmluZEZpZWxkQnlO
YW1lKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pOwotICBjb25zdCBGaWVsZERlZiogRmlu
ZEZpZWxkQnlOdW1iZXIodWludDMyX3QgbnVtYmVyKSBjb25zdDsKLSAgY29uc3QgRmllbGREZWYq
IEZpbmRGaWVsZEJ5TmFtZShjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuKSBjb25zdDsKLQot
Ci0gIEZpZWxkRGVmKiBGaW5kRmllbGRCeU5hbWUoY29uc3QgY2hhciAqbmFtZSkgewotICAgIHJl
dHVybiBGaW5kRmllbGRCeU5hbWUobmFtZSwgc3RybGVuKG5hbWUpKTsKLSAgfQotICBjb25zdCBG
aWVsZERlZiogRmluZEZpZWxkQnlOYW1lKGNvbnN0IGNoYXIgKm5hbWUpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gRmluZEZpZWxkQnlOYW1lKG5hbWUsIHN0cmxlbihuYW1lKSk7Ci0gIH0KLQotICB0ZW1w
bGF0ZSA8Y2xhc3MgVD4KLSAgRmllbGREZWYqIEZpbmRGaWVsZEJ5TmFtZShjb25zdCBUJiBzdHIp
IHsKLSAgICByZXR1cm4gRmluZEZpZWxkQnlOYW1lKHN0ci5jX3N0cigpLCBzdHIuc2l6ZSgpKTsK
LSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgY29uc3QgRmllbGREZWYqIEZpbmRGaWVsZEJ5
TmFtZShjb25zdCBUJiBzdHIpIGNvbnN0IHsKLSAgICByZXR1cm4gRmluZEZpZWxkQnlOYW1lKHN0
ci5jX3N0cigpLCBzdHIuc2l6ZSgpKTsKLSAgfQotCi0gIE9uZW9mRGVmKiBGaW5kT25lb2ZCeU5h
bWUoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbik7Ci0gIGNvbnN0IE9uZW9mRGVmKiBGaW5k
T25lb2ZCeU5hbWUoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbikgY29uc3Q7Ci0KLSAgT25l
b2ZEZWYqIEZpbmRPbmVvZkJ5TmFtZShjb25zdCBjaGFyKiBuYW1lKSB7Ci0gICAgcmV0dXJuIEZp
bmRPbmVvZkJ5TmFtZShuYW1lLCBzdHJsZW4obmFtZSkpOwotICB9Ci0gIGNvbnN0IE9uZW9mRGVm
KiBGaW5kT25lb2ZCeU5hbWUoY29uc3QgY2hhciogbmFtZSkgY29uc3QgewotICAgIHJldHVybiBG
aW5kT25lb2ZCeU5hbWUobmFtZSwgc3RybGVuKG5hbWUpKTsKLSAgfQotCi0gIHRlbXBsYXRlPGNs
YXNzIFQ+Ci0gIE9uZW9mRGVmKiBGaW5kT25lb2ZCeU5hbWUoY29uc3QgVCYgc3RyKSB7Ci0gICAg
cmV0dXJuIEZpbmRPbmVvZkJ5TmFtZShzdHIuY19zdHIoKSwgc3RyLnNpemUoKSk7Ci0gIH0KLSAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgY29uc3QgT25lb2ZEZWYqIEZpbmRPbmVvZkJ5TmFtZShjb25z
dCBUJiBzdHIpIGNvbnN0IHsKLSAgICByZXR1cm4gRmluZE9uZW9mQnlOYW1lKHN0ci5jX3N0cigp
LCBzdHIuc2l6ZSgpKTsKLSAgfQotCi0gIC8qIFJldHVybnMgYSBuZXcgbXNnZGVmIHRoYXQgaXMg
YSBjb3B5IG9mIHRoZSBnaXZlbiBtc2dkZWYgKGFuZCBhIGNvcHkgb2YgYWxsCi0gICAqIHRoZSBm
aWVsZHMpIGJ1dCB3aXRoIGFueSByZWZlcmVuY2VzIHRvIHN1Ym1lc3NhZ2VzIGJyb2tlbiBhbmQg
cmVwbGFjZWQKLSAgICogd2l0aCBqdXN0IHRoZSBuYW1lIG9mIHRoZSBzdWJtZXNzYWdlLiAgUmV0
dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uCi0gICAqIGZhaWxlZC4KLSAgICoKLSAgICog
VE9ETyhoYWJlcm1hbik6IHdoaWNoIGlzIG1vcmUgdXNlZnVsLCBrZWVwaW5nIGZpZWxkcyByZXNv
bHZlZCBvcgotICAgKiB1bnJlc29sdmluZyB0aGVtPyAgSWYgdGhlcmUncyBubyBvYnZpb3VzIGFu
c3dlciwgU2hvdWxkIHRoaXMgZnVuY3Rpb25hbGl0eQotICAgKiBqdXN0IGJlIG1vdmVkIGludG8g
c3ltdGFiLmM/ICovCi0gIE1lc3NhZ2VEZWYqIER1cChjb25zdCB2b2lkKiBvd25lcikgY29uc3Q7
Ci0KLSAgLyogSXMgdGhpcyBtZXNzYWdlIGEgbWFwIGVudHJ5PyAqLwotICB2b2lkIHNldG1hcGVu
dHJ5KGJvb2wgbWFwX2VudHJ5KTsKLSAgYm9vbCBtYXBlbnRyeSgpIGNvbnN0OwotCi0gIC8qIEl0
ZXJhdGlvbiBvdmVyIGZpZWxkcy4gIFRoZSBvcmRlciBpcyB1bmRlZmluZWQuICovCi0gIGNsYXNz
IGZpZWxkX2l0ZXJhdG9yCi0gICAgICA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2Fy
ZF9pdGVyYXRvcl90YWcsIEZpZWxkRGVmKj4gewotICAgcHVibGljOgotICAgIGV4cGxpY2l0IGZp
ZWxkX2l0ZXJhdG9yKE1lc3NhZ2VEZWYqIG1kKTsKLSAgICBzdGF0aWMgZmllbGRfaXRlcmF0b3Ig
ZW5kKE1lc3NhZ2VEZWYqIG1kKTsKLQotICAgIHZvaWQgb3BlcmF0b3IrKygpOwotICAgIEZpZWxk
RGVmKiBvcGVyYXRvciooKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgZmllbGRf
aXRlcmF0b3ImIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgZmllbGRf
aXRlcmF0b3ImIG90aGVyKSBjb25zdDsKLQotICAgcHJpdmF0ZToKLSAgICB1cGJfbXNnX2ZpZWxk
X2l0ZXIgaXRlcl87Ci0gIH07Ci0KLSAgY2xhc3MgY29uc3RfZmllbGRfaXRlcmF0b3IKLSAgICAg
IDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgY29uc3Qg
RmllbGREZWYqPiB7Ci0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgY29uc3RfZmllbGRfaXRlcmF0
b3IoY29uc3QgTWVzc2FnZURlZiogbWQpOwotICAgIHN0YXRpYyBjb25zdF9maWVsZF9pdGVyYXRv
ciBlbmQoY29uc3QgTWVzc2FnZURlZiogbWQpOwotCi0gICAgdm9pZCBvcGVyYXRvcisrKCk7Ci0g
ICAgY29uc3QgRmllbGREZWYqIG9wZXJhdG9yKigpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBjb25zdF9maWVsZF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0OwotICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBjb25zdF9maWVsZF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0OwotCi0gICBw
cml2YXRlOgotICAgIHVwYl9tc2dfZmllbGRfaXRlciBpdGVyXzsKLSAgfTsKLQotICAvKiBJdGVy
YXRpb24gb3ZlciBvbmVvZnMuIFRoZSBvcmRlciBpcyB1bmRlZmluZWQuICovCi0gIGNsYXNzIG9u
ZW9mX2l0ZXJhdG9yCi0gICAgICA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9p
dGVyYXRvcl90YWcsIEZpZWxkRGVmKj4gewotICAgcHVibGljOgotICAgIGV4cGxpY2l0IG9uZW9m
X2l0ZXJhdG9yKE1lc3NhZ2VEZWYqIG1kKTsKLSAgICBzdGF0aWMgb25lb2ZfaXRlcmF0b3IgZW5k
KE1lc3NhZ2VEZWYqIG1kKTsKLQotICAgIHZvaWQgb3BlcmF0b3IrKygpOwotICAgIE9uZW9mRGVm
KiBvcGVyYXRvciooKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgb25lb2ZfaXRl
cmF0b3ImIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qgb25lb2ZfaXRl
cmF0b3ImIG90aGVyKSBjb25zdDsKLQotICAgcHJpdmF0ZToKLSAgICB1cGJfbXNnX29uZW9mX2l0
ZXIgaXRlcl87Ci0gIH07Ci0KLSAgY2xhc3MgY29uc3Rfb25lb2ZfaXRlcmF0b3IKLSAgICAgIDog
cHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgY29uc3QgRmll
bGREZWYqPiB7Ci0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgY29uc3Rfb25lb2ZfaXRlcmF0b3Io
Y29uc3QgTWVzc2FnZURlZiogbWQpOwotICAgIHN0YXRpYyBjb25zdF9vbmVvZl9pdGVyYXRvciBl
bmQoY29uc3QgTWVzc2FnZURlZiogbWQpOwotCi0gICAgdm9pZCBvcGVyYXRvcisrKCk7Ci0gICAg
Y29uc3QgT25lb2ZEZWYqIG9wZXJhdG9yKigpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBjb25zdF9vbmVvZl9pdGVyYXRvciYgb3RoZXIpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBjb25zdF9vbmVvZl9pdGVyYXRvciYgb3RoZXIpIGNvbnN0OwotCi0gICBwcml2
YXRlOgotICAgIHVwYl9tc2dfb25lb2ZfaXRlciBpdGVyXzsKLSAgfTsKLQotICBjbGFzcyBGaWVs
ZEFjY2Vzc29yIHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGaWVsZEFjY2Vzc29yKE1lc3Nh
Z2VEZWYqIG1zZykgOiBtc2dfKG1zZykge30KLSAgICBmaWVsZF9pdGVyYXRvciBiZWdpbigpIHsg
cmV0dXJuIG1zZ18tPmZpZWxkX2JlZ2luKCk7IH0KLSAgICBmaWVsZF9pdGVyYXRvciBlbmQoKSB7
IHJldHVybiBtc2dfLT5maWVsZF9lbmQoKTsgfQotICAgcHJpdmF0ZToKLSAgICBNZXNzYWdlRGVm
KiBtc2dfOwotICB9OwotCi0gIGNsYXNzIENvbnN0RmllbGRBY2Nlc3NvciB7Ci0gICBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgQ29uc3RGaWVsZEFjY2Vzc29yKGNvbnN0IE1lc3NhZ2VEZWYqIG1zZykg
OiBtc2dfKG1zZykge30KLSAgICBjb25zdF9maWVsZF9pdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IG1zZ18tPmZpZWxkX2JlZ2luKCk7IH0KLSAgICBjb25zdF9maWVsZF9pdGVyYXRvciBlbmQoKSB7
IHJldHVybiBtc2dfLT5maWVsZF9lbmQoKTsgfQotICAgcHJpdmF0ZToKLSAgICBjb25zdCBNZXNz
YWdlRGVmKiBtc2dfOwotICB9OwotCi0gIGNsYXNzIE9uZW9mQWNjZXNzb3IgewotICAgcHVibGlj
OgotICAgIGV4cGxpY2l0IE9uZW9mQWNjZXNzb3IoTWVzc2FnZURlZiogbXNnKSA6IG1zZ18obXNn
KSB7fQotICAgIG9uZW9mX2l0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbXNnXy0+b25lb2ZfYmVn
aW4oKTsgfQotICAgIG9uZW9mX2l0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1zZ18tPm9uZW9mX2Vu
ZCgpOyB9Ci0gICBwcml2YXRlOgotICAgIE1lc3NhZ2VEZWYqIG1zZ187Ci0gIH07Ci0KLSAgY2xh
c3MgQ29uc3RPbmVvZkFjY2Vzc29yIHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb25zdE9u
ZW9mQWNjZXNzb3IoY29uc3QgTWVzc2FnZURlZiogbXNnKSA6IG1zZ18obXNnKSB7fQotICAgIGNv
bnN0X29uZW9mX2l0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbXNnXy0+b25lb2ZfYmVnaW4oKTsg
fQotICAgIGNvbnN0X29uZW9mX2l0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1zZ18tPm9uZW9mX2Vu
ZCgpOyB9Ci0gICBwcml2YXRlOgotICAgIGNvbnN0IE1lc3NhZ2VEZWYqIG1zZ187Ci0gIH07Ci0K
LSAgZmllbGRfaXRlcmF0b3IgZmllbGRfYmVnaW4oKTsKLSAgZmllbGRfaXRlcmF0b3IgZmllbGRf
ZW5kKCk7Ci0gIGNvbnN0X2ZpZWxkX2l0ZXJhdG9yIGZpZWxkX2JlZ2luKCkgY29uc3Q7Ci0gIGNv
bnN0X2ZpZWxkX2l0ZXJhdG9yIGZpZWxkX2VuZCgpIGNvbnN0OwotCi0gIG9uZW9mX2l0ZXJhdG9y
IG9uZW9mX2JlZ2luKCk7Ci0gIG9uZW9mX2l0ZXJhdG9yIG9uZW9mX2VuZCgpOwotICBjb25zdF9v
bmVvZl9pdGVyYXRvciBvbmVvZl9iZWdpbigpIGNvbnN0OwotICBjb25zdF9vbmVvZl9pdGVyYXRv
ciBvbmVvZl9lbmQoKSBjb25zdDsKLQotICBGaWVsZEFjY2Vzc29yIGZpZWxkcygpIHsgcmV0dXJu
IEZpZWxkQWNjZXNzb3IodGhpcyk7IH0KLSAgQ29uc3RGaWVsZEFjY2Vzc29yIGZpZWxkcygpIGNv
bnN0IHsgcmV0dXJuIENvbnN0RmllbGRBY2Nlc3Nvcih0aGlzKTsgfQotICBPbmVvZkFjY2Vzc29y
IG9uZW9mcygpIHsgcmV0dXJuIE9uZW9mQWNjZXNzb3IodGhpcyk7IH0KLSAgQ29uc3RPbmVvZkFj
Y2Vzc29yIG9uZW9mcygpIGNvbnN0IHsgcmV0dXJuIENvbnN0T25lb2ZBY2Nlc3Nvcih0aGlzKTsg
fQotCi0gcHJpdmF0ZToKLSAgVVBCX0RJU0FMTE9XX1BPRF9PUFMoTWVzc2FnZURlZiwgdXBiOjpN
ZXNzYWdlRGVmKQotfTsKLQotI2VuZGlmICAvKiBfX2NwbHVzcGx1cyAqLwotCi1VUEJfQkVHSU5f
RVhURVJOX0MKLQotLyogUmV0dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4g
Ki8KLXVwYl9tc2dkZWYgKnVwYl9tc2dkZWZfbmV3KGNvbnN0IHZvaWQgKm93bmVyKTsKLQotLyog
SW5jbHVkZSB1cGJfcmVmY291bnRlZCBtZXRob2RzIGxpa2UgdXBiX21zZ2RlZl9yZWYoKS4gKi8K
LVVQQl9SRUZDT1VOVEVEX0NNRVRIT0RTKHVwYl9tc2dkZWYsIHVwYl9tc2dkZWZfdXBjYXN0MikK
LQotYm9vbCB1cGJfbXNnZGVmX2ZyZWV6ZSh1cGJfbXNnZGVmICptLCB1cGJfc3RhdHVzICpzdGF0
dXMpOwotCi1jb25zdCBjaGFyICp1cGJfbXNnZGVmX2Z1bGxuYW1lKGNvbnN0IHVwYl9tc2dkZWYg
Km0pOwotYm9vbCB1cGJfbXNnZGVmX3NldGZ1bGxuYW1lKHVwYl9tc2dkZWYgKm0sIGNvbnN0IGNo
YXIgKmZ1bGxuYW1lLCB1cGJfc3RhdHVzICpzKTsKLQotdXBiX21zZ2RlZiAqdXBiX21zZ2RlZl9k
dXAoY29uc3QgdXBiX21zZ2RlZiAqbSwgY29uc3Qgdm9pZCAqb3duZXIpOwotYm9vbCB1cGJfbXNn
ZGVmX2FkZGZpZWxkKHVwYl9tc2dkZWYgKm0sIHVwYl9maWVsZGRlZiAqZiwgY29uc3Qgdm9pZCAq
cmVmX2Rvbm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpOwotYm9v
bCB1cGJfbXNnZGVmX2FkZG9uZW9mKHVwYl9tc2dkZWYgKm0sIHVwYl9vbmVvZmRlZiAqbywgY29u
c3Qgdm9pZCAqcmVmX2Rvbm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMg
KnMpOwotCi0vKiBGaWVsZCBsb29rdXAgaW4gYSBjb3VwbGUgb2YgZGlmZmVyZW50IHZhcmlhdGlv
bnM6Ci0gKiAgIC0gaXRvZiA9IGludCB0byBmaWVsZAotICogICAtIG50b2YgPSBuYW1lIHRvIGZp
ZWxkCi0gKiAgIC0gbnRvZnogPSBuYW1lIHRvIGZpZWxkLCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5n
LiAqLwotY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJfbXNnZGVmX2l0b2YoY29uc3QgdXBiX21zZ2Rl
ZiAqbSwgdWludDMyX3QgaSk7Ci1jb25zdCB1cGJfZmllbGRkZWYgKnVwYl9tc2dkZWZfbnRvZihj
b25zdCB1cGJfbXNnZGVmICptLCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7Ci1pbnQgdXBiX21zZ2RlZl9udW1maWVsZHMo
Y29uc3QgdXBiX21zZ2RlZiAqbSk7Ci0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1
cGJfbXNnZGVmX250b2Z6KGNvbnN0IHVwYl9tc2dkZWYgKm0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKSB7Ci0gIHJldHVy
biB1cGJfbXNnZGVmX250b2YobSwgbmFtZSwgc3RybGVuKG5hbWUpKTsKLX0KLQotVVBCX0lOTElO
RSB1cGJfZmllbGRkZWYgKnVwYl9tc2dkZWZfaXRvZl9tdXRhYmxlKHVwYl9tc2dkZWYgKm0sIHVp
bnQzMl90IGkpIHsKLSAgcmV0dXJuICh1cGJfZmllbGRkZWYqKXVwYl9tc2dkZWZfaXRvZihtLCBp
KTsKLX0KLQotVVBCX0lOTElORSB1cGJfZmllbGRkZWYgKnVwYl9tc2dkZWZfbnRvZl9tdXRhYmxl
KHVwYl9tc2dkZWYgKm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikgewotICByZXR1cm4gKHVwYl9m
aWVsZGRlZiAqKXVwYl9tc2dkZWZfbnRvZihtLCBuYW1lLCBsZW4pOwotfQotCi0vKiBPbmVvZiBs
b29rdXA6Ci0gKiAgIC0gbnRvbyA9IG5hbWUgdG8gb25lb2YKLSAqICAgLSBudG9veiA9IG5hbWUg
dG8gb25lb2YsIG51bGwtdGVybWluYXRlZCBzdHJpbmcuICovCi1jb25zdCB1cGJfb25lb2ZkZWYg
KnVwYl9tc2dkZWZfbnRvbyhjb25zdCB1cGJfbXNnZGVmICptLCBjb25zdCBjaGFyICpuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7Ci1pbnQgdXBi
X21zZ2RlZl9udW1vbmVvZnMoY29uc3QgdXBiX21zZ2RlZiAqbSk7Ci0KLVVQQl9JTkxJTkUgY29u
c3QgdXBiX29uZW9mZGVmICp1cGJfbXNnZGVmX250b296KGNvbnN0IHVwYl9tc2dkZWYgKm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
Km5hbWUpIHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZfbnRvbyhtLCBuYW1lLCBzdHJsZW4obmFtZSkp
OwotfQotCi1VUEJfSU5MSU5FIHVwYl9vbmVvZmRlZiAqdXBiX21zZ2RlZl9udG9vX211dGFibGUo
dXBiX21zZ2RlZiAqbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuKSB7Ci0gIHJldHVybiAodXBiX29u
ZW9mZGVmICopdXBiX21zZ2RlZl9udG9vKG0sIG5hbWUsIGxlbik7Ci19Ci0KLXZvaWQgdXBiX21z
Z2RlZl9zZXRtYXBlbnRyeSh1cGJfbXNnZGVmICptLCBib29sIG1hcF9lbnRyeSk7Ci1ib29sIHVw
Yl9tc2dkZWZfbWFwZW50cnkoY29uc3QgdXBiX21zZ2RlZiAqbSk7Ci0KLS8qIFdlbGwta25vd24g
ZmllbGQgdGFnIG51bWJlcnMgZm9yIG1hcC1lbnRyeSBtZXNzYWdlcy4gKi8KLSNkZWZpbmUgVVBC
X01BUEVOVFJZX0tFWSAgIDEKLSNkZWZpbmUgVVBCX01BUEVOVFJZX1ZBTFVFIDIKLQotY29uc3Qg
dXBiX29uZW9mZGVmICp1cGJfbXNnZGVmX2ZpbmRvbmVvZihjb25zdCB1cGJfbXNnZGVmICptLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFt
ZSk7Ci1pbnQgdXBiX21zZ2RlZl9udW1vbmVvZnMoY29uc3QgdXBiX21zZ2RlZiAqbSk7Ci0KLS8q
IHVwYl9tc2dfZmllbGRfaXRlciBpOwotICogZm9yKHVwYl9tc2dfZmllbGRfYmVnaW4oJmksIG0p
OwotICogICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJmkpOwotICogICAgIHVwYl9tc2dfZmllbGRf
bmV4dCgmaSkpIHsKLSAqICAgdXBiX2ZpZWxkZGVmICpmID0gdXBiX21zZ19pdGVyX2ZpZWxkKCZp
KTsKLSAqICAgLy8gLi4uCi0gKiB9Ci0gKgotICogRm9yIEMgd2UgZG9uJ3QgaGF2ZSBzZXBhcmF0
ZSBpdGVyYXRvcnMgZm9yIGNvbnN0IGFuZCBub24tY29uc3QuCi0gKiBJdCBpcyB0aGUgY2FsbGVy
J3MgcmVzcG9uc2liaWxpdHkgdG8gY2FzdCB0aGUgdXBiX2ZpZWxkZGVmKiB0bwotICogY29uc3Qg
aWYgdGhlIHVwYl9tc2dkZWYqIGlzIGNvbnN0LiAqLwotdm9pZCB1cGJfbXNnX2ZpZWxkX2JlZ2lu
KHVwYl9tc2dfZmllbGRfaXRlciAqaXRlciwgY29uc3QgdXBiX21zZ2RlZiAqbSk7Ci12b2lkIHVw
Yl9tc2dfZmllbGRfbmV4dCh1cGJfbXNnX2ZpZWxkX2l0ZXIgKml0ZXIpOwotYm9vbCB1cGJfbXNn
X2ZpZWxkX2RvbmUoY29uc3QgdXBiX21zZ19maWVsZF9pdGVyICppdGVyKTsKLXVwYl9maWVsZGRl
ZiAqdXBiX21zZ19pdGVyX2ZpZWxkKGNvbnN0IHVwYl9tc2dfZmllbGRfaXRlciAqaXRlcik7Ci12
b2lkIHVwYl9tc2dfZmllbGRfaXRlcl9zZXRkb25lKHVwYl9tc2dfZmllbGRfaXRlciAqaXRlcik7
Ci0KLS8qIFNpbWlsYXIgdG8gYWJvdmUsIHdlIGFsc28gc3VwcG9ydCBpdGVyYXRpbmcgdGhyb3Vn
aCB0aGUgb25lb2ZzIGluIGEKLSAqIG1zZ2RlZi4gKi8KLXZvaWQgdXBiX21zZ19vbmVvZl9iZWdp
bih1cGJfbXNnX29uZW9mX2l0ZXIgKml0ZXIsIGNvbnN0IHVwYl9tc2dkZWYgKm0pOwotdm9pZCB1
cGJfbXNnX29uZW9mX25leHQodXBiX21zZ19vbmVvZl9pdGVyICppdGVyKTsKLWJvb2wgdXBiX21z
Z19vbmVvZl9kb25lKGNvbnN0IHVwYl9tc2dfb25lb2ZfaXRlciAqaXRlcik7Ci11cGJfb25lb2Zk
ZWYgKnVwYl9tc2dfaXRlcl9vbmVvZihjb25zdCB1cGJfbXNnX29uZW9mX2l0ZXIgKml0ZXIpOwot
dm9pZCB1cGJfbXNnX29uZW9mX2l0ZXJfc2V0ZG9uZSh1cGJfbXNnX29uZW9mX2l0ZXIgKml0ZXIp
OwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLQotLyogdXBiOjpFbnVtRGVmICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdHlw
ZWRlZiB1cGJfc3RydGFibGVfaXRlciB1cGJfZW51bV9pdGVyOwotCi0jaWZkZWYgX19jcGx1c3Bs
dXMKLQotLyogQ2xhc3MgdGhhdCByZXByZXNlbnRzIGFuIGVudW0uICBJdHMgYmFzZSBjbGFzcyBp
cyB1cGI6OkRlZiAoY29udmVydCB3aXRoCi0gKiB1cGI6OnVwY2FzdCgpKS4gKi8KLWNsYXNzIHVw
Yjo6RW51bURlZiB7Ci0gcHVibGljOgotICAvKiBSZXR1cm5zIE5VTEwgaWYgbWVtb3J5IGFsbG9j
YXRpb24gZmFpbGVkLiAqLwotICBzdGF0aWMgcmVmZmVkX3B0cjxFbnVtRGVmPiBOZXcoKTsKLQot
ICAvKiB1cGI6OlJlZkNvdW50ZWQgbWV0aG9kcyBsaWtlIFJlZigpL1VucmVmKCkuICovCi0gIFVQ
Ql9SRUZDT1VOVEVEX0NQUE1FVEhPRFMKLQotICAvKiBGdW5jdGlvbmFsaXR5IGZyb20gdXBiOjpE
ZWYuICovCi0gIGNvbnN0IGNoYXIqIGZ1bGxfbmFtZSgpIGNvbnN0OwotICBib29sIHNldF9mdWxs
X25hbWUoY29uc3QgY2hhciogZnVsbG5hbWUsIFN0YXR1cyogcyk7Ci0gIGJvb2wgc2V0X2Z1bGxf
bmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZnVsbG5hbWUsIFN0YXR1cyogcyk7Ci0KLSAgLyogQ2Fs
bCB0byBmcmVlemUgdGhpcyBFbnVtRGVmLiAqLwotICBib29sIEZyZWV6ZShTdGF0dXMqIHMpOwot
Ci0gIC8qIFRoZSB2YWx1ZSB0aGF0IGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgd2hlbiBubyBmaWVs
ZCBkZWZhdWx0IGlzIHNwZWNpZmllZC4KLSAgICogSWYgbm90IHNldCBleHBsaWNpdGx5LCB0aGUg
Zmlyc3QgdmFsdWUgdGhhdCB3YXMgYWRkZWQgd2lsbCBiZSB1c2VkLgotICAgKiBUaGUgZGVmYXVs
dCB2YWx1ZSBtdXN0IGJlIGEgbWVtYmVyIG9mIHRoZSBlbnVtLgotICAgKiBSZXF1aXJlcyB0aGF0
IHZhbHVlX2NvdW50KCkgPiAwLiAqLwotICBpbnQzMl90IGRlZmF1bHRfdmFsdWUoKSBjb25zdDsK
LQotICAvKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBub3QgdmFs
aWQsIHJldHVybnMgZmFsc2UgYW5kIGFuCi0gICAqIGVycm9yIG1lc3NhZ2UgaW4gc3RhdHVzLiAq
LwotICBib29sIHNldF9kZWZhdWx0X3ZhbHVlKGludDMyX3QgdmFsLCBTdGF0dXMqIHN0YXR1cyk7
Ci0KLSAgLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjdXJyZW50bHkgZGVmaW5lZCBp
biB0aGUgZW51bS4gIE5vdGUgdGhhdAotICAgKiBtdWx0aXBsZSBuYW1lcyBjYW4gcmVmZXIgdG8g
dGhlIHNhbWUgbnVtYmVyLCBzbyB0aGlzIG1heSBiZSBncmVhdGVyIHRoYW4KLSAgICogdGhlIHRv
dGFsIG51bWJlciBvZiB1bmlxdWUgbnVtYmVycy4gKi8KLSAgaW50IHZhbHVlX2NvdW50KCkgY29u
c3Q7Ci0KLSAgLyogQWRkcyBhIHNpbmdsZSBuYW1lL251bWJlciBwYWlyIHRvIHRoZSBlbnVtLiAg
RmFpbHMgaWYgdGhpcyBuYW1lIGhhcwotICAgKiBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVy
IHZhbHVlLiAqLwotICBib29sIEFkZFZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIGludDMyX3QgbnVt
LCBTdGF0dXMqIHN0YXR1cyk7Ci0gIGJvb2wgQWRkVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5h
bWUsIGludDMyX3QgbnVtLCBTdGF0dXMqIHN0YXR1cyk7Ci0KLSAgLyogTG9va3VwcyBmcm9tIG5h
bWUgdG8gaW50ZWdlciwgcmV0dXJuaW5nIHRydWUgaWYgZm91bmQuICovCi0gIGJvb2wgRmluZFZh
bHVlQnlOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIGludDMyX3QqIG51bSkgY29uc3Q7Ci0KLSAgLyog
RmluZHMgdGhlIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbnVtYmVyLCBvciBOVUxM
IGlmIG5vbmUgd2FzCi0gICAqIGZvdW5kLiAgSWYgbW9yZSB0aGFuIG9uZSBuYW1lIGNvcnJlc3Bv
bmRzIHRvIHRoaXMgbnVtYmVyLCByZXR1cm5zIHRoZQotICAgKiBmaXJzdCBvbmUgdGhhdCB3YXMg
YWRkZWQuICovCi0gIGNvbnN0IGNoYXIqIEZpbmRWYWx1ZUJ5TnVtYmVyKGludDMyX3QgbnVtKSBj
b25zdDsKLQotICAvKiBSZXR1cm5zIGEgbmV3IEVudW1EZWYgd2l0aCBhbGwgdGhlIHNhbWUgdmFs
dWVzLiAgVGhlIG5ldyBFbnVtRGVmIHdpbGwgYmUKLSAgICogb3duZWQgYnkgdGhlIGdpdmVuIG93
bmVyLiAqLwotICBFbnVtRGVmKiBEdXAoY29uc3Qgdm9pZCogb3duZXIpIGNvbnN0OwotCi0gIC8q
IEl0ZXJhdGlvbiBvdmVyIG5hbWUvdmFsdWUgcGFpcnMuICBUaGUgb3JkZXIgaXMgdW5kZWZpbmVk
LgotICAgKiBBZGRpbmcgYW4gZW51bSB2YWwgaW52YWxpZGF0ZXMgYW55IGl0ZXJhdG9ycy4KLSAg
ICoKLSAgICogVE9ETzogbWFrZSBjb21wYXRpYmxlIHdpdGggcmFuZ2UtZm9yLCB3aXRoIGVsZW1l
bnRzIGFzIHBhaXJzPyAqLwotICBjbGFzcyBJdGVyYXRvciB7Ci0gICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgSXRlcmF0b3IoY29uc3QgRW51bURlZiopOwotCi0gICAgaW50MzJfdCBudW1iZXIoKTsK
LSAgICBjb25zdCBjaGFyICpuYW1lKCk7Ci0gICAgYm9vbCBEb25lKCk7Ci0gICAgdm9pZCBOZXh0
KCk7Ci0KLSAgIHByaXZhdGU6Ci0gICAgdXBiX2VudW1faXRlciBpdGVyXzsKLSAgfTsKLQotIHBy
aXZhdGU6Ci0gIFVQQl9ESVNBTExPV19QT0RfT1BTKEVudW1EZWYsIHVwYjo6RW51bURlZikKLX07
Ci0KLSNlbmRpZiAgLyogX19jcGx1c3BsdXMgKi8KLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLS8q
IE5hdGl2ZSBDIEFQSS4gKi8KLXVwYl9lbnVtZGVmICp1cGJfZW51bWRlZl9uZXcoY29uc3Qgdm9p
ZCAqb3duZXIpOwotdXBiX2VudW1kZWYgKnVwYl9lbnVtZGVmX2R1cChjb25zdCB1cGJfZW51bWRl
ZiAqZSwgY29uc3Qgdm9pZCAqb3duZXIpOwotCi0vKiBJbmNsdWRlIHVwYl9yZWZjb3VudGVkIG1l
dGhvZHMgbGlrZSB1cGJfZW51bWRlZl9yZWYoKS4gKi8KLVVQQl9SRUZDT1VOVEVEX0NNRVRIT0RT
KHVwYl9lbnVtZGVmLCB1cGJfZW51bWRlZl91cGNhc3QyKQotCi1ib29sIHVwYl9lbnVtZGVmX2Zy
ZWV6ZSh1cGJfZW51bWRlZiAqZSwgdXBiX3N0YXR1cyAqc3RhdHVzKTsKLQotLyogRnJvbSB1cGJf
ZGVmLiAqLwotY29uc3QgY2hhciAqdXBiX2VudW1kZWZfZnVsbG5hbWUoY29uc3QgdXBiX2VudW1k
ZWYgKmUpOwotYm9vbCB1cGJfZW51bWRlZl9zZXRmdWxsbmFtZSh1cGJfZW51bWRlZiAqZSwgY29u
c3QgY2hhciAqZnVsbG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0
dXMgKnMpOwotCi1pbnQzMl90IHVwYl9lbnVtZGVmX2RlZmF1bHQoY29uc3QgdXBiX2VudW1kZWYg
KmUpOwotYm9vbCB1cGJfZW51bWRlZl9zZXRkZWZhdWx0KHVwYl9lbnVtZGVmICplLCBpbnQzMl90
IHZhbCwgdXBiX3N0YXR1cyAqcyk7Ci1pbnQgdXBiX2VudW1kZWZfbnVtdmFscyhjb25zdCB1cGJf
ZW51bWRlZiAqZSk7Ci1ib29sIHVwYl9lbnVtZGVmX2FkZHZhbCh1cGJfZW51bWRlZiAqZSwgY29u
c3QgY2hhciAqbmFtZSwgaW50MzJfdCBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1cGJf
c3RhdHVzICpzdGF0dXMpOwotCi0vKiBFbnVtIGxvb2t1cHM6Ci0gKiAtIG50b2k6ICBsb29rIHVw
IGEgbmFtZSB3aXRoIHNwZWNpZmllZCBsZW5ndGguCi0gKiAtIG50b2l6OiBsb29rIHVwIGEgbmFt
ZSBwcm92aWRlZCBhcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCi0gKiAtIGl0b246ICBsb29r
IHVwIGFuIGludGVnZXIsIHJldHVybmluZyB0aGUgbmFtZSBhcyBhIG51bGwtdGVybWluYXRlZAot
ICogICAgICAgICAgc3RyaW5nLiAqLwotYm9vbCB1cGJfZW51bWRlZl9udG9pKGNvbnN0IHVwYl9l
bnVtZGVmICplLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgKm51bSk7Ci1VUEJfSU5MSU5FIGJvb2wgdXBiX2VudW1kZWZfbnRvaXoo
Y29uc3QgdXBiX2VudW1kZWYgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqbmFtZSwgaW50MzJfdCAqbnVtKSB7Ci0gIHJldHVybiB1cGJfZW51bWRlZl9u
dG9pKGUsIG5hbWUsIHN0cmxlbihuYW1lKSwgbnVtKTsKLX0KLWNvbnN0IGNoYXIgKnVwYl9lbnVt
ZGVmX2l0b24oY29uc3QgdXBiX2VudW1kZWYgKmUsIGludDMyX3QgbnVtKTsKLQotLyogIHVwYl9l
bnVtX2l0ZXIgaTsKLSAqICBmb3IodXBiX2VudW1fYmVnaW4oJmksIGUpOyAhdXBiX2VudW1fZG9u
ZSgmaSk7IHVwYl9lbnVtX25leHQoJmkpKSB7Ci0gKiAgICAvLyAuLi4KLSAqICB9Ci0gKi8KLXZv
aWQgdXBiX2VudW1fYmVnaW4odXBiX2VudW1faXRlciAqaXRlciwgY29uc3QgdXBiX2VudW1kZWYg
KmUpOwotdm9pZCB1cGJfZW51bV9uZXh0KHVwYl9lbnVtX2l0ZXIgKml0ZXIpOwotYm9vbCB1cGJf
ZW51bV9kb25lKHVwYl9lbnVtX2l0ZXIgKml0ZXIpOwotY29uc3QgY2hhciAqdXBiX2VudW1faXRl
cl9uYW1lKHVwYl9lbnVtX2l0ZXIgKml0ZXIpOwotaW50MzJfdCB1cGJfZW51bV9pdGVyX251bWJl
cih1cGJfZW51bV9pdGVyICppdGVyKTsKLQotVVBCX0VORF9FWFRFUk5fQwotCi0vKiB1cGI6Ok9u
ZW9mRGVmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotCi10eXBlZGVmIHVwYl9pbnR0YWJsZV9pdGVyIHVwYl9vbmVvZl9pdGVy
OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogQ2xhc3MgdGhhdCByZXByZXNlbnRzIGEgb25l
b2YuICBJdHMgYmFzZSBjbGFzcyBpcyB1cGI6OkRlZiAoY29udmVydCB3aXRoCi0gKiB1cGI6OnVw
Y2FzdCgpKS4gKi8KLWNsYXNzIHVwYjo6T25lb2ZEZWYgewotIHB1YmxpYzoKLSAgLyogUmV0dXJu
cyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gKi8KLSAgc3RhdGljIHJlZmZlZF9w
dHI8T25lb2ZEZWY+IE5ldygpOwotCi0gIC8qIHVwYjo6UmVmQ291bnRlZCBtZXRob2RzIGxpa2Ug
UmVmKCkvVW5yZWYoKS4gKi8KLSAgVVBCX1JFRkNPVU5URURfQ1BQTUVUSE9EUwotCi0gIC8qIEZ1
bmN0aW9uYWxpdHkgZnJvbSB1cGI6OkRlZi4gKi8KLSAgY29uc3QgY2hhciogZnVsbF9uYW1lKCkg
Y29uc3Q7Ci0KLSAgLyogUmV0dXJucyB0aGUgTWVzc2FnZURlZiB0aGF0IG93bnMgdGhpcyBPbmVv
ZkRlZi4gKi8KLSAgY29uc3QgTWVzc2FnZURlZiogY29udGFpbmluZ190eXBlKCkgY29uc3Q7Ci0K
LSAgLyogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIG9uZW9mLiBUaGlzIGlzIHRoZSBuYW1lIHVz
ZWQgdG8gbG9vayB1cCB0aGUgb25lb2YKLSAgICogYnkgbmFtZSBvbmNlIGFkZGVkIHRvIGEgbWVz
c2FnZSBkZWYuICovCi0gIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdDsKLSAgYm9vbCBzZXRfbmFt
ZShjb25zdCBjaGFyKiBuYW1lLCBTdGF0dXMqIHMpOwotCi0gIC8qIFJldHVybnMgdGhlIG51bWJl
ciBvZiBmaWVsZHMgY3VycmVudGx5IGRlZmluZWQgaW4gdGhlIG9uZW9mLiAqLwotICBpbnQgZmll
bGRfY291bnQoKSBjb25zdDsKLQotICAvKiBBZGRzIGEgZmllbGQgdG8gdGhlIG9uZW9mLiBUaGUg
ZmllbGQgbXVzdCBub3QgaGF2ZSBiZWVuIGFkZGVkIHRvIGFueSBvdGhlcgotICAgKiBvbmVvZiBv
ciBtc2dkZWYuIElmIHRoZSBvbmVvZiBpcyBub3QgeWV0IHBhcnQgb2YgYSBtc2dkZWYsIHRoZW4g
d2hlbiB0aGUKLSAgICogb25lb2YgaXMgZXZlbnR1YWxseSBhZGRlZCB0byBhIG1zZ2RlZiwgYWxs
IGZpZWxkcyBhZGRlZCB0byB0aGUgb25lb2Ygd2lsbAotICAgKiBhbHNvIGJlIGFkZGVkIHRvIHRo
ZSBtc2dkZWYgYXQgdGhhdCB0aW1lLiBJZiB0aGUgb25lb2YgaXMgYWxyZWFkeSBwYXJ0IG9mIGEK
LSAgICogbXNnZGVmLCB0aGUgZmllbGQgbXVzdCBlaXRoZXIgYmUgYSBwYXJ0IG9mIHRoYXQgbXNn
ZGVmIGFscmVhZHksIG9yIG11c3Qgbm90Ci0gICAqIGJlIGEgcGFydCBvZiBhbnkgbXNnZGVmOyBp
biB0aGUgbGF0dGVyIGNhc2UsIHRoZSBmaWVsZCBpcyBhZGRlZCB0byB0aGUKLSAgICogbXNnZGVm
IGFzIGEgcGFydCBvZiB0aGlzIG9wZXJhdGlvbi4KLSAgICoKLSAgICogVGhlIGZpZWxkIG1heSBv
bmx5IGhhdmUgYW4gT1BUSU9OQUwgbGFiZWwsIG5ldmVyIFJFUVVJUkVEIG9yIFJFUEVBVEVELgot
ICAgKgotICAgKiBJZiB8ZnwgaXMgYWxyZWFkeSBwYXJ0IG9mIHRoaXMgTWVzc2FnZURlZiwgdGhp
cyBtZXRob2QgcGVyZm9ybXMgbm8gYWN0aW9uCi0gICAqIGFuZCByZXR1cm5zIHRydWUgKHN1Y2Nl
c3MpLiBUaHVzLCB0aGlzIG1ldGhvZCBpcyBpZGVtcG90ZW50LiAqLwotICBib29sIEFkZEZpZWxk
KEZpZWxkRGVmKiBmaWVsZCwgU3RhdHVzKiBzKTsKLSAgYm9vbCBBZGRGaWVsZChjb25zdCByZWZm
ZWRfcHRyPEZpZWxkRGVmPiYgZmllbGQsIFN0YXR1cyogcyk7Ci0KLSAgLyogTG9va3MgdXAgYnkg
bmFtZS4gKi8KLSAgY29uc3QgRmllbGREZWYqIEZpbmRGaWVsZEJ5TmFtZShjb25zdCBjaGFyKiBu
YW1lLCBzaXplX3QgbGVuKSBjb25zdDsKLSAgRmllbGREZWYqIEZpbmRGaWVsZEJ5TmFtZShjb25z
dCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuKTsKLSAgY29uc3QgRmllbGREZWYqIEZpbmRGaWVsZEJ5
TmFtZShjb25zdCBjaGFyKiBuYW1lKSBjb25zdCB7Ci0gICAgcmV0dXJuIEZpbmRGaWVsZEJ5TmFt
ZShuYW1lLCBzdHJsZW4obmFtZSkpOwotICB9Ci0gIEZpZWxkRGVmKiBGaW5kRmllbGRCeU5hbWUo
Y29uc3QgY2hhciogbmFtZSkgewotICAgIHJldHVybiBGaW5kRmllbGRCeU5hbWUobmFtZSwgc3Ry
bGVuKG5hbWUpKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBUPgotICBGaWVsZERlZiogRmlu
ZEZpZWxkQnlOYW1lKGNvbnN0IFQmIHN0cikgewotICAgIHJldHVybiBGaW5kRmllbGRCeU5hbWUo
c3RyLmNfc3RyKCksIHN0ci5zaXplKCkpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBUPgotICBj
b25zdCBGaWVsZERlZiogRmluZEZpZWxkQnlOYW1lKGNvbnN0IFQmIHN0cikgY29uc3QgewotICAg
IHJldHVybiBGaW5kRmllbGRCeU5hbWUoc3RyLmNfc3RyKCksIHN0ci5zaXplKCkpOwotICB9Ci0K
LSAgLyogTG9va3MgdXAgYnkgdGFnIG51bWJlci4gKi8KLSAgY29uc3QgRmllbGREZWYqIEZpbmRG
aWVsZEJ5TnVtYmVyKHVpbnQzMl90IG51bSkgY29uc3Q7Ci0KLSAgLyogUmV0dXJucyBhIG5ldyBP
bmVvZkRlZiB3aXRoIGFsbCB0aGUgc2FtZSBmaWVsZHMuIFRoZSBPbmVvZkRlZiB3aWxsIGJlIG93
bmVkCi0gICAqIGJ5IHRoZSBnaXZlbiBvd25lci4gKi8KLSAgT25lb2ZEZWYqIER1cChjb25zdCB2
b2lkKiBvd25lcikgY29uc3Q7Ci0KLSAgLyogSXRlcmF0aW9uIG92ZXIgZmllbGRzLiAgVGhlIG9y
ZGVyIGlzIHVuZGVmaW5lZC4gKi8KLSAgY2xhc3MgaXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVy
YXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBGaWVsZERlZio+IHsKLSAgIHB1YmxpYzoK
LSAgICBleHBsaWNpdCBpdGVyYXRvcihPbmVvZkRlZiogbWQpOwotICAgIHN0YXRpYyBpdGVyYXRv
ciBlbmQoT25lb2ZEZWYqIG1kKTsKLQotICAgIHZvaWQgb3BlcmF0b3IrKygpOwotICAgIEZpZWxk
RGVmKiBvcGVyYXRvciooKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdDsKLQotICAgcHJpdmF0ZToKLSAgICB1cGJfb25lb2ZfaXRlciBpdGVyXzsKLSAg
fTsKLQotICBjbGFzcyBjb25zdF9pdGVyYXRvcgotICAgICAgOiBwdWJsaWMgc3RkOjppdGVyYXRv
cjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBjb25zdCBGaWVsZERlZio+IHsKLSAgIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBjb25zdF9pdGVyYXRvcihjb25zdCBPbmVvZkRlZiogbWQpOwotICAg
IHN0YXRpYyBjb25zdF9pdGVyYXRvciBlbmQoY29uc3QgT25lb2ZEZWYqIG1kKTsKLQotICAgIHZv
aWQgb3BlcmF0b3IrKygpOwotICAgIGNvbnN0IEZpZWxkRGVmKiBvcGVyYXRvciooKSBjb25zdDsK
LSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdDsK
LSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdDsK
LQotICAgcHJpdmF0ZToKLSAgICB1cGJfb25lb2ZfaXRlciBpdGVyXzsKLSAgfTsKLQotICBpdGVy
YXRvciBiZWdpbigpOwotICBpdGVyYXRvciBlbmQoKTsKLSAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdDsKLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBV
UEJfRElTQUxMT1dfUE9EX09QUyhPbmVvZkRlZiwgdXBiOjpPbmVvZkRlZikKLX07Ci0KLSNlbmRp
ZiAgLyogX19jcGx1c3BsdXMgKi8KLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLS8qIE5hdGl2ZSBD
IEFQSS4gKi8KLXVwYl9vbmVvZmRlZiAqdXBiX29uZW9mZGVmX25ldyhjb25zdCB2b2lkICpvd25l
cik7Ci11cGJfb25lb2ZkZWYgKnVwYl9vbmVvZmRlZl9kdXAoY29uc3QgdXBiX29uZW9mZGVmICpv
LCBjb25zdCB2b2lkICpvd25lcik7Ci0KLS8qIEluY2x1ZGUgdXBiX3JlZmNvdW50ZWQgbWV0aG9k
cyBsaWtlIHVwYl9vbmVvZmRlZl9yZWYoKS4gKi8KLVVQQl9SRUZDT1VOVEVEX0NNRVRIT0RTKHVw
Yl9vbmVvZmRlZiwgdXBiX29uZW9mZGVmX3VwY2FzdDIpCi0KLWNvbnN0IGNoYXIgKnVwYl9vbmVv
ZmRlZl9uYW1lKGNvbnN0IHVwYl9vbmVvZmRlZiAqbyk7Ci1ib29sIHVwYl9vbmVvZmRlZl9zZXRu
YW1lKHVwYl9vbmVvZmRlZiAqbywgY29uc3QgY2hhciAqbmFtZSwgdXBiX3N0YXR1cyAqcyk7Ci0K
LWNvbnN0IHVwYl9tc2dkZWYgKnVwYl9vbmVvZmRlZl9jb250YWluaW5ndHlwZShjb25zdCB1cGJf
b25lb2ZkZWYgKm8pOwotaW50IHVwYl9vbmVvZmRlZl9udW1maWVsZHMoY29uc3QgdXBiX29uZW9m
ZGVmICpvKTsKLWJvb2wgdXBiX29uZW9mZGVmX2FkZGZpZWxkKHVwYl9vbmVvZmRlZiAqbywgdXBi
X2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmVm
X2Rvbm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcyk7Ci0KLS8q
IE9uZW9mIGxvb2t1cHM6Ci0gKiAtIG50b2Y6ICBsb29rIHVwIGEgZmllbGQgYnkgbmFtZS4KLSAq
IC0gbnRvZno6IGxvb2sgdXAgYSBmaWVsZCBieSBuYW1lIChhcyBhIG51bGwtdGVybWluYXRlZCBz
dHJpbmcpLgotICogLSBpdG9mOiAgbG9vayB1cCBhIGZpZWxkIGJ5IG51bWJlci4gKi8KLWNvbnN0
IHVwYl9maWVsZGRlZiAqdXBiX29uZW9mZGVmX250b2YoY29uc3QgdXBiX29uZW9mZGVmICpvLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBz
aXplX3QgbGVuZ3RoKTsKLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJfb25lb2Zk
ZWZfbnRvZnooY29uc3QgdXBiX29uZW9mZGVmICpvLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKSB7Ci0gIHJldHVybiB1
cGJfb25lb2ZkZWZfbnRvZihvLCBuYW1lLCBzdHJsZW4obmFtZSkpOwotfQotY29uc3QgdXBiX2Zp
ZWxkZGVmICp1cGJfb25lb2ZkZWZfaXRvZihjb25zdCB1cGJfb25lb2ZkZWYgKm8sIHVpbnQzMl90
IG51bSk7Ci0KLS8qICB1cGJfb25lb2ZfaXRlciBpOwotICogIGZvcih1cGJfb25lb2ZfYmVnaW4o
JmksIGUpOyAhdXBiX29uZW9mX2RvbmUoJmkpOyB1cGJfb25lb2ZfbmV4dCgmaSkpIHsKLSAqICAg
IC8vIC4uLgotICogIH0KLSAqLwotdm9pZCB1cGJfb25lb2ZfYmVnaW4odXBiX29uZW9mX2l0ZXIg
Kml0ZXIsIGNvbnN0IHVwYl9vbmVvZmRlZiAqbyk7Ci12b2lkIHVwYl9vbmVvZl9uZXh0KHVwYl9v
bmVvZl9pdGVyICppdGVyKTsKLWJvb2wgdXBiX29uZW9mX2RvbmUodXBiX29uZW9mX2l0ZXIgKml0
ZXIpOwotdXBiX2ZpZWxkZGVmICp1cGJfb25lb2ZfaXRlcl9maWVsZChjb25zdCB1cGJfb25lb2Zf
aXRlciAqaXRlcik7Ci12b2lkIHVwYl9vbmVvZl9pdGVyX3NldGRvbmUodXBiX29uZW9mX2l0ZXIg
Kml0ZXIpOwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1VUEJf
SU5MSU5FIGNvbnN0IGNoYXIqIHVwYl9zYWZlY3N0cihjb25zdCBzdGQ6OnN0cmluZyYgc3RyKSB7
Ci0gIGFzc2VydChzdHIuc2l6ZSgpID09IHN0ZDo6c3RybGVuKHN0ci5jX3N0cigpKSk7Ci0gIHJl
dHVybiBzdHIuY19zdHIoKTsKLX0KLQotLyogSW5saW5lIEMrKyB3cmFwcGVycy4gKi8KLW5hbWVz
cGFjZSB1cGIgewotCi1pbmxpbmUgRGVmKiBEZWY6OkR1cChjb25zdCB2b2lkKiBvd25lcikgY29u
c3QgewotICByZXR1cm4gdXBiX2RlZl9kdXAodGhpcywgb3duZXIpOwotfQotaW5saW5lIERlZjo6
VHlwZSBEZWY6OmRlZl90eXBlKCkgY29uc3QgeyByZXR1cm4gdXBiX2RlZl90eXBlKHRoaXMpOyB9
Ci1pbmxpbmUgY29uc3QgY2hhciogRGVmOjpmdWxsX25hbWUoKSBjb25zdCB7IHJldHVybiB1cGJf
ZGVmX2Z1bGxuYW1lKHRoaXMpOyB9Ci1pbmxpbmUgYm9vbCBEZWY6OnNldF9mdWxsX25hbWUoY29u
c3QgY2hhciogZnVsbG5hbWUsIFN0YXR1cyogcykgewotICByZXR1cm4gdXBiX2RlZl9zZXRmdWxs
bmFtZSh0aGlzLCBmdWxsbmFtZSwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBEZWY6OnNldF9mdWxsX25h
bWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxuYW1lLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVw
Yl9kZWZfc2V0ZnVsbG5hbWUodGhpcywgdXBiX3NhZmVjc3RyKGZ1bGxuYW1lKSwgcyk7Ci19Ci1p
bmxpbmUgYm9vbCBEZWY6OkZyZWV6ZShEZWYqIGNvbnN0KiBkZWZzLCBpbnQgbiwgU3RhdHVzKiBz
dGF0dXMpIHsKLSAgcmV0dXJuIHVwYl9kZWZfZnJlZXplKGRlZnMsIG4sIHN0YXR1cyk7Ci19Ci1p
bmxpbmUgYm9vbCBEZWY6OkZyZWV6ZShjb25zdCBzdGQ6OnZlY3RvcjxEZWYqPiYgZGVmcywgU3Rh
dHVzKiBzdGF0dXMpIHsKLSAgcmV0dXJuIHVwYl9kZWZfZnJlZXplKChEZWYqIGNvbnN0KikmZGVm
c1swXSwgZGVmcy5zaXplKCksIHN0YXR1cyk7Ci19Ci0KLWlubGluZSBib29sIEZpZWxkRGVmOjpD
aGVja1R5cGUoaW50MzJfdCB2YWwpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9jaGVja3R5cGUo
dmFsKTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVmOjpDaGVja0xhYmVsKGludDMyX3QgdmFsKSB7
Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfY2hlY2tsYWJlbCh2YWwpOwotfQotaW5saW5lIGJvb2wg
RmllbGREZWY6OkNoZWNrRGVzY3JpcHRvclR5cGUoaW50MzJfdCB2YWwpIHsKLSAgcmV0dXJuIHVw
Yl9maWVsZGRlZl9jaGVja2Rlc2NyaXB0b3J0eXBlKHZhbCk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVs
ZERlZjo6Q2hlY2tJbnRlZ2VyRm9ybWF0KGludDMyX3QgdmFsKSB7Ci0gIHJldHVybiB1cGJfZmll
bGRkZWZfY2hlY2tpbnRmbXQodmFsKTsKLX0KLWlubGluZSBGaWVsZERlZjo6VHlwZSBGaWVsZERl
Zjo6Q29udmVydFR5cGUoaW50MzJfdCB2YWwpIHsKLSAgYXNzZXJ0KENoZWNrVHlwZSh2YWwpKTsK
LSAgcmV0dXJuIHN0YXRpY19jYXN0PEZpZWxkRGVmOjpUeXBlPih2YWwpOwotfQotaW5saW5lIEZp
ZWxkRGVmOjpMYWJlbCBGaWVsZERlZjo6Q29udmVydExhYmVsKGludDMyX3QgdmFsKSB7Ci0gIGFz
c2VydChDaGVja0xhYmVsKHZhbCkpOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8RmllbGREZWY6Okxh
YmVsPih2YWwpOwotfQotaW5saW5lIEZpZWxkRGVmOjpEZXNjcmlwdG9yVHlwZSBGaWVsZERlZjo6
Q29udmVydERlc2NyaXB0b3JUeXBlKGludDMyX3QgdmFsKSB7Ci0gIGFzc2VydChDaGVja0Rlc2Ny
aXB0b3JUeXBlKHZhbCkpOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8RmllbGREZWY6OkRlc2NyaXB0
b3JUeXBlPih2YWwpOwotfQotaW5saW5lIEZpZWxkRGVmOjpJbnRlZ2VyRm9ybWF0IEZpZWxkRGVm
OjpDb252ZXJ0SW50ZWdlckZvcm1hdChpbnQzMl90IHZhbCkgewotICBhc3NlcnQoQ2hlY2tJbnRl
Z2VyRm9ybWF0KHZhbCkpOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8RmllbGREZWY6OkludGVnZXJG
b3JtYXQ+KHZhbCk7Ci19Ci0KLWlubGluZSByZWZmZWRfcHRyPEZpZWxkRGVmPiBGaWVsZERlZjo6
TmV3KCkgewotICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfZmllbGRkZWZfbmV3KCZmKTsKLSAgcmV0
dXJuIHJlZmZlZF9wdHI8RmllbGREZWY+KGYsICZmKTsKLX0KLWlubGluZSBGaWVsZERlZiogRmll
bGREZWY6OkR1cChjb25zdCB2b2lkKiBvd25lcikgY29uc3QgewotICByZXR1cm4gdXBiX2ZpZWxk
ZGVmX2R1cCh0aGlzLCBvd25lcik7Ci19Ci1pbmxpbmUgY29uc3QgY2hhciogRmllbGREZWY6OmZ1
bGxfbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9mdWxsbmFtZSh0aGlzKTsK
LX0KLWlubGluZSBib29sIEZpZWxkRGVmOjpzZXRfZnVsbF9uYW1lKGNvbnN0IGNoYXIqIGZ1bGxu
YW1lLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9zZXRmdWxsbmFtZSh0aGlz
LCBmdWxsbmFtZSwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERlZjo6c2V0X2Z1bGxfbmFtZShj
b25zdCBzdGQ6OnN0cmluZyYgZnVsbG5hbWUsIFN0YXR1cyogcykgewotICByZXR1cm4gdXBiX2Zp
ZWxkZGVmX3NldGZ1bGxuYW1lKHRoaXMsIHVwYl9zYWZlY3N0cihmdWxsbmFtZSksIHMpOwotfQot
aW5saW5lIGJvb2wgRmllbGREZWY6OnR5cGVfaXNfc2V0KCkgY29uc3QgewotICByZXR1cm4gdXBi
X2ZpZWxkZGVmX3R5cGVpc3NldCh0aGlzKTsKLX0KLWlubGluZSBGaWVsZERlZjo6VHlwZSBGaWVs
ZERlZjo6dHlwZSgpIGNvbnN0IHsgcmV0dXJuIHVwYl9maWVsZGRlZl90eXBlKHRoaXMpOyB9Ci1p
bmxpbmUgRmllbGREZWY6OkRlc2NyaXB0b3JUeXBlIEZpZWxkRGVmOjpkZXNjcmlwdG9yX3R5cGUo
KSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfZGVzY3JpcHRvcnR5cGUodGhpcyk7Ci19
Ci1pbmxpbmUgRmllbGREZWY6OkxhYmVsIEZpZWxkRGVmOjpsYWJlbCgpIGNvbnN0IHsKLSAgcmV0
dXJuIHVwYl9maWVsZGRlZl9sYWJlbCh0aGlzKTsKLX0KLWlubGluZSB1aW50MzJfdCBGaWVsZERl
Zjo6bnVtYmVyKCkgY29uc3QgeyByZXR1cm4gdXBiX2ZpZWxkZGVmX251bWJlcih0aGlzKTsgfQot
aW5saW5lIGNvbnN0IGNoYXIqIEZpZWxkRGVmOjpuYW1lKCkgY29uc3QgeyByZXR1cm4gdXBiX2Zp
ZWxkZGVmX25hbWUodGhpcyk7IH0KLWlubGluZSBib29sIEZpZWxkRGVmOjppc19leHRlbnNpb24o
KSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfaXNleHRlbnNpb24odGhpcyk7Ci19Ci1p
bmxpbmUgYm9vbCBGaWVsZERlZjo6bGF6eSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRl
Zl9sYXp5KHRoaXMpOwotfQotaW5saW5lIHZvaWQgRmllbGREZWY6OnNldF9sYXp5KGJvb2wgbGF6
eSkgewotICB1cGJfZmllbGRkZWZfc2V0bGF6eSh0aGlzLCBsYXp5KTsKLX0KLWlubGluZSBib29s
IEZpZWxkRGVmOjpwYWNrZWQoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfcGFja2Vk
KHRoaXMpOwotfQotaW5saW5lIHZvaWQgRmllbGREZWY6OnNldF9wYWNrZWQoYm9vbCBwYWNrZWQp
IHsKLSAgdXBiX2ZpZWxkZGVmX3NldHBhY2tlZCh0aGlzLCBwYWNrZWQpOwotfQotaW5saW5lIGNv
bnN0IE1lc3NhZ2VEZWYqIEZpZWxkRGVmOjpjb250YWluaW5nX3R5cGUoKSBjb25zdCB7Ci0gIHJl
dHVybiB1cGJfZmllbGRkZWZfY29udGFpbmluZ3R5cGUodGhpcyk7Ci19Ci1pbmxpbmUgY29uc3Qg
T25lb2ZEZWYqIEZpZWxkRGVmOjpjb250YWluaW5nX29uZW9mKCkgY29uc3QgewotICByZXR1cm4g
dXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmdvbmVvZih0aGlzKTsKLX0KLWlubGluZSBjb25zdCBjaGFy
KiBGaWVsZERlZjo6Y29udGFpbmluZ190eXBlX25hbWUoKSB7Ci0gIHJldHVybiB1cGJfZmllbGRk
ZWZfY29udGFpbmluZ3R5cGVuYW1lKHRoaXMpOwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6OnNl
dF9udW1iZXIodWludDMyX3QgbnVtYmVyLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9maWVs
ZGRlZl9zZXRudW1iZXIodGhpcywgbnVtYmVyLCBzKTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVm
OjpzZXRfbmFtZShjb25zdCBjaGFyICpuYW1lLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9m
aWVsZGRlZl9zZXRuYW1lKHRoaXMsIG5hbWUsIHMpOwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6
OnNldF9uYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJu
IHVwYl9maWVsZGRlZl9zZXRuYW1lKHRoaXMsIHVwYl9zYWZlY3N0cihuYW1lKSwgcyk7Ci19Ci1p
bmxpbmUgYm9vbCBGaWVsZERlZjo6c2V0X2NvbnRhaW5pbmdfdHlwZV9uYW1lKGNvbnN0IGNoYXIg
Km5hbWUsIFN0YXR1cyogcykgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX3NldGNvbnRhaW5pbmd0
eXBlbmFtZSh0aGlzLCBuYW1lLCBzKTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVmOjpzZXRfY29u
dGFpbmluZ190eXBlX25hbWUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAqcykgewotICByZXR1cm4g
dXBiX2ZpZWxkZGVmX3NldGNvbnRhaW5pbmd0eXBlbmFtZSh0aGlzLCB1cGJfc2FmZWNzdHIobmFt
ZSksIHMpOwotfQotaW5saW5lIHZvaWQgRmllbGREZWY6OnNldF90eXBlKHVwYl9maWVsZHR5cGVf
dCB0eXBlKSB7Ci0gIHVwYl9maWVsZGRlZl9zZXR0eXBlKHRoaXMsIHR5cGUpOwotfQotaW5saW5l
IHZvaWQgRmllbGREZWY6OnNldF9pc19leHRlbnNpb24oYm9vbCBpc19leHRlbnNpb24pIHsKLSAg
dXBiX2ZpZWxkZGVmX3NldGlzZXh0ZW5zaW9uKHRoaXMsIGlzX2V4dGVuc2lvbik7Ci19Ci1pbmxp
bmUgdm9pZCBGaWVsZERlZjo6c2V0X2Rlc2NyaXB0b3JfdHlwZShGaWVsZERlZjo6RGVzY3JpcHRv
clR5cGUgdHlwZSkgewotICB1cGJfZmllbGRkZWZfc2V0ZGVzY3JpcHRvcnR5cGUodGhpcywgdHlw
ZSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlZjo6c2V0X2xhYmVsKHVwYl9sYWJlbF90IGxhYmVs
KSB7Ci0gIHVwYl9maWVsZGRlZl9zZXRsYWJlbCh0aGlzLCBsYWJlbCk7Ci19Ci1pbmxpbmUgYm9v
bCBGaWVsZERlZjo6SXNTdWJNZXNzYWdlKCkgY29uc3QgewotICByZXR1cm4gdXBiX2ZpZWxkZGVm
X2lzc3VibXNnKHRoaXMpOwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6OklzU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gdXBiX2ZpZWxkZGVmX2lzc3RyaW5nKHRoaXMpOyB9Ci1pbmxpbmUgYm9vbCBG
aWVsZERlZjo6SXNTZXF1ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIHVwYl9maWVsZGRlZl9pc3NlcSh0
aGlzKTsgfQotaW5saW5lIGJvb2wgRmllbGREZWY6OklzTWFwKCkgY29uc3QgeyByZXR1cm4gdXBi
X2ZpZWxkZGVmX2lzbWFwKHRoaXMpOyB9Ci1pbmxpbmUgaW50NjRfdCBGaWVsZERlZjo6ZGVmYXVs
dF9pbnQ2NCgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9kZWZhdWx0aW50NjQodGhp
cyk7Ci19Ci1pbmxpbmUgaW50MzJfdCBGaWVsZERlZjo6ZGVmYXVsdF9pbnQzMigpIGNvbnN0IHsK
LSAgcmV0dXJuIHVwYl9maWVsZGRlZl9kZWZhdWx0aW50MzIodGhpcyk7Ci19Ci1pbmxpbmUgdWlu
dDY0X3QgRmllbGREZWY6OmRlZmF1bHRfdWludDY0KCkgY29uc3QgewotICByZXR1cm4gdXBiX2Zp
ZWxkZGVmX2RlZmF1bHR1aW50NjQodGhpcyk7Ci19Ci1pbmxpbmUgdWludDMyX3QgRmllbGREZWY6
OmRlZmF1bHRfdWludDMyKCkgY29uc3QgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX2RlZmF1bHR1
aW50MzIodGhpcyk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERlZjo6ZGVmYXVsdF9ib29sKCkgY29u
c3QgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX2RlZmF1bHRib29sKHRoaXMpOwotfQotaW5saW5l
IGZsb2F0IEZpZWxkRGVmOjpkZWZhdWx0X2Zsb2F0KCkgY29uc3QgewotICByZXR1cm4gdXBiX2Zp
ZWxkZGVmX2RlZmF1bHRmbG9hdCh0aGlzKTsKLX0KLWlubGluZSBkb3VibGUgRmllbGREZWY6OmRl
ZmF1bHRfZG91YmxlKCkgY29uc3QgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX2RlZmF1bHRkb3Vi
bGUodGhpcyk7Ci19Ci1pbmxpbmUgY29uc3QgY2hhciogRmllbGREZWY6OmRlZmF1bHRfc3RyaW5n
KHNpemVfdCogbGVuKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfZGVmYXVsdHN0cih0
aGlzLCBsZW4pOwotfQotaW5saW5lIHZvaWQgRmllbGREZWY6OnNldF9kZWZhdWx0X2ludDY0KGlu
dDY0X3QgdmFsdWUpIHsKLSAgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRpbnQ2NCh0aGlzLCB2YWx1
ZSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlZjo6c2V0X2RlZmF1bHRfaW50MzIoaW50MzJfdCB2
YWx1ZSkgewotICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGludDMyKHRoaXMsIHZhbHVlKTsKLX0K
LWlubGluZSB2b2lkIEZpZWxkRGVmOjpzZXRfZGVmYXVsdF91aW50NjQodWludDY0X3QgdmFsdWUp
IHsKLSAgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHR1aW50NjQodGhpcywgdmFsdWUpOwotfQotaW5s
aW5lIHZvaWQgRmllbGREZWY6OnNldF9kZWZhdWx0X3VpbnQzMih1aW50MzJfdCB2YWx1ZSkgewot
ICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdHVpbnQzMih0aGlzLCB2YWx1ZSk7Ci19Ci1pbmxpbmUg
dm9pZCBGaWVsZERlZjo6c2V0X2RlZmF1bHRfYm9vbChib29sIHZhbHVlKSB7Ci0gIHVwYl9maWVs
ZGRlZl9zZXRkZWZhdWx0Ym9vbCh0aGlzLCB2YWx1ZSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERl
Zjo6c2V0X2RlZmF1bHRfZmxvYXQoZmxvYXQgdmFsdWUpIHsKLSAgdXBiX2ZpZWxkZGVmX3NldGRl
ZmF1bHRmbG9hdCh0aGlzLCB2YWx1ZSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlZjo6c2V0X2Rl
ZmF1bHRfZG91YmxlKGRvdWJsZSB2YWx1ZSkgewotICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGRv
dWJsZSh0aGlzLCB2YWx1ZSk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERlZjo6c2V0X2RlZmF1bHRf
c3RyaW5nKGNvbnN0IHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICpzKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZf
c2V0ZGVmYXVsdHN0cih0aGlzLCBzdHIsIGxlbiwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERl
Zjo6c2V0X2RlZmF1bHRfc3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIFN0YXR1cyogcykg
ewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRzdHIodGhpcywgc3RyLmNfc3RyKCks
IHN0ci5zaXplKCksIHMpOwotfQotaW5saW5lIHZvaWQgRmllbGREZWY6OnNldF9kZWZhdWx0X2Nz
dHIoY29uc3QgY2hhciogc3RyLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9z
ZXRkZWZhdWx0Y3N0cih0aGlzLCBzdHIsIHMpOwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6Okhh
c1N1YkRlZigpIGNvbnN0IHsgcmV0dXJuIHVwYl9maWVsZGRlZl9oYXNzdWJkZWYodGhpcyk7IH0K
LWlubGluZSBjb25zdCBEZWYqIEZpZWxkRGVmOjpzdWJkZWYoKSBjb25zdCB7IHJldHVybiB1cGJf
ZmllbGRkZWZfc3ViZGVmKHRoaXMpOyB9Ci1pbmxpbmUgY29uc3QgTWVzc2FnZURlZiAqRmllbGRE
ZWY6Om1lc3NhZ2Vfc3ViZGVmKCkgY29uc3QgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX21zZ3N1
YmRlZih0aGlzKTsKLX0KLWlubGluZSBjb25zdCBFbnVtRGVmICpGaWVsZERlZjo6ZW51bV9zdWJk
ZWYoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfZW51bXN1YmRlZih0aGlzKTsKLX0K
LWlubGluZSBjb25zdCBjaGFyKiBGaWVsZERlZjo6c3ViZGVmX25hbWUoKSBjb25zdCB7Ci0gIHJl
dHVybiB1cGJfZmllbGRkZWZfc3ViZGVmbmFtZSh0aGlzKTsKLX0KLWlubGluZSBib29sIEZpZWxk
RGVmOjpzZXRfc3ViZGVmKGNvbnN0IERlZiogc3ViZGVmLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJu
IHVwYl9maWVsZGRlZl9zZXRzdWJkZWYodGhpcywgc3ViZGVmLCBzKTsKLX0KLWlubGluZSBib29s
IEZpZWxkRGVmOjpzZXRfZW51bV9zdWJkZWYoY29uc3QgRW51bURlZiogc3ViZGVmLCBTdGF0dXMq
IHMpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9zZXRlbnVtc3ViZGVmKHRoaXMsIHN1YmRlZiwg
cyk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERlZjo6c2V0X21lc3NhZ2Vfc3ViZGVmKGNvbnN0IE1l
c3NhZ2VEZWYqIHN1YmRlZiwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfc2V0
bXNnc3ViZGVmKHRoaXMsIHN1YmRlZiwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERlZjo6c2V0
X3N1YmRlZl9uYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFN0YXR1cyogcykgewotICByZXR1cm4gdXBi
X2ZpZWxkZGVmX3NldHN1YmRlZm5hbWUodGhpcywgbmFtZSwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBG
aWVsZERlZjo6c2V0X3N1YmRlZl9uYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBTdGF0dXMq
IHMpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9zZXRzdWJkZWZuYW1lKHRoaXMsIHVwYl9zYWZl
Y3N0cihuYW1lKSwgcyk7Ci19Ci0KLWlubGluZSByZWZmZWRfcHRyPE1lc3NhZ2VEZWY+IE1lc3Nh
Z2VEZWY6Ok5ldygpIHsKLSAgdXBiX21zZ2RlZiAqbSA9IHVwYl9tc2dkZWZfbmV3KCZtKTsKLSAg
cmV0dXJuIHJlZmZlZF9wdHI8TWVzc2FnZURlZj4obSwgJm0pOwotfQotaW5saW5lIGNvbnN0IGNo
YXIgKk1lc3NhZ2VEZWY6OmZ1bGxfbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZf
ZnVsbG5hbWUodGhpcyk7Ci19Ci1pbmxpbmUgYm9vbCBNZXNzYWdlRGVmOjpzZXRfZnVsbF9uYW1l
KGNvbnN0IGNoYXIqIGZ1bGxuYW1lLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZf
c2V0ZnVsbG5hbWUodGhpcywgZnVsbG5hbWUsIHMpOwotfQotaW5saW5lIGJvb2wgTWVzc2FnZURl
Zjo6c2V0X2Z1bGxfbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZnVsbG5hbWUsIFN0YXR1cyogcykg
ewotICByZXR1cm4gdXBiX21zZ2RlZl9zZXRmdWxsbmFtZSh0aGlzLCB1cGJfc2FmZWNzdHIoZnVs
bG5hbWUpLCBzKTsKLX0KLWlubGluZSBib29sIE1lc3NhZ2VEZWY6OkZyZWV6ZShTdGF0dXMqIHN0
YXR1cykgewotICByZXR1cm4gdXBiX21zZ2RlZl9mcmVlemUodGhpcywgc3RhdHVzKTsKLX0KLWlu
bGluZSBpbnQgTWVzc2FnZURlZjo6ZmllbGRfY291bnQoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJf
bXNnZGVmX251bWZpZWxkcyh0aGlzKTsKLX0KLWlubGluZSBpbnQgTWVzc2FnZURlZjo6b25lb2Zf
Y291bnQoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfbXNnZGVmX251bW9uZW9mcyh0aGlzKTsKLX0K
LWlubGluZSBib29sIE1lc3NhZ2VEZWY6OkFkZEZpZWxkKHVwYl9maWVsZGRlZiogZiwgU3RhdHVz
KiBzKSB7Ci0gIHJldHVybiB1cGJfbXNnZGVmX2FkZGZpZWxkKHRoaXMsIGYsIE5VTEwsIHMpOwot
fQotaW5saW5lIGJvb2wgTWVzc2FnZURlZjo6QWRkRmllbGQoY29uc3QgcmVmZmVkX3B0cjxGaWVs
ZERlZj4mIGYsIFN0YXR1cyogcykgewotICByZXR1cm4gdXBiX21zZ2RlZl9hZGRmaWVsZCh0aGlz
LCBmLmdldCgpLCBOVUxMLCBzKTsKLX0KLWlubGluZSBib29sIE1lc3NhZ2VEZWY6OkFkZE9uZW9m
KHVwYl9vbmVvZmRlZiogbywgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfbXNnZGVmX2FkZG9u
ZW9mKHRoaXMsIG8sIE5VTEwsIHMpOwotfQotaW5saW5lIGJvb2wgTWVzc2FnZURlZjo6QWRkT25l
b2YoY29uc3QgcmVmZmVkX3B0cjxPbmVvZkRlZj4mIG8sIFN0YXR1cyogcykgewotICByZXR1cm4g
dXBiX21zZ2RlZl9hZGRvbmVvZih0aGlzLCBvLmdldCgpLCBOVUxMLCBzKTsKLX0KLWlubGluZSBG
aWVsZERlZiogTWVzc2FnZURlZjo6RmluZEZpZWxkQnlOdW1iZXIodWludDMyX3QgbnVtYmVyKSB7
Ci0gIHJldHVybiB1cGJfbXNnZGVmX2l0b2ZfbXV0YWJsZSh0aGlzLCBudW1iZXIpOwotfQotaW5s
aW5lIEZpZWxkRGVmKiBNZXNzYWdlRGVmOjpGaW5kRmllbGRCeU5hbWUoY29uc3QgY2hhciogbmFt
ZSwgc2l6ZV90IGxlbikgewotICByZXR1cm4gdXBiX21zZ2RlZl9udG9mX211dGFibGUodGhpcywg
bmFtZSwgbGVuKTsKLX0KLWlubGluZSBjb25zdCBGaWVsZERlZiogTWVzc2FnZURlZjo6RmluZEZp
ZWxkQnlOdW1iZXIodWludDMyX3QgbnVtYmVyKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfbXNnZGVm
X2l0b2YodGhpcywgbnVtYmVyKTsKLX0KLWlubGluZSBjb25zdCBGaWVsZERlZiAqTWVzc2FnZURl
Zjo6RmluZEZpZWxkQnlOYW1lKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKSBjb25zdCB7Ci0gIHJl
dHVybiB1cGJfbXNnZGVmX250b2YodGhpcywgbmFtZSwgbGVuKTsKLX0KLWlubGluZSBPbmVvZkRl
ZiogTWVzc2FnZURlZjo6RmluZE9uZW9mQnlOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBs
ZW4pIHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZfbnRvb19tdXRhYmxlKHRoaXMsIG5hbWUsIGxlbik7
Ci19Ci1pbmxpbmUgY29uc3QgT25lb2ZEZWYqIE1lc3NhZ2VEZWY6OkZpbmRPbmVvZkJ5TmFtZShj
b25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGxlbikgY29uc3QgewotICByZXR1cm4gdXBiX21zZ2RlZl9udG9v
KHRoaXMsIG5hbWUsIGxlbik7Ci19Ci1pbmxpbmUgTWVzc2FnZURlZiogTWVzc2FnZURlZjo6RHVw
KGNvbnN0IHZvaWQgKm93bmVyKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfbXNnZGVmX2R1cCh0aGlz
LCBvd25lcik7Ci19Ci1pbmxpbmUgdm9pZCBNZXNzYWdlRGVmOjpzZXRtYXBlbnRyeShib29sIG1h
cF9lbnRyeSkgewotICB1cGJfbXNnZGVmX3NldG1hcGVudHJ5KHRoaXMsIG1hcF9lbnRyeSk7Ci19
Ci1pbmxpbmUgYm9vbCBNZXNzYWdlRGVmOjptYXBlbnRyeSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVw
Yl9tc2dkZWZfbWFwZW50cnkodGhpcyk7Ci19Ci1pbmxpbmUgTWVzc2FnZURlZjo6ZmllbGRfaXRl
cmF0b3IgTWVzc2FnZURlZjo6ZmllbGRfYmVnaW4oKSB7Ci0gIHJldHVybiBmaWVsZF9pdGVyYXRv
cih0aGlzKTsKLX0KLWlubGluZSBNZXNzYWdlRGVmOjpmaWVsZF9pdGVyYXRvciBNZXNzYWdlRGVm
OjpmaWVsZF9lbmQoKSB7Ci0gIHJldHVybiBmaWVsZF9pdGVyYXRvcjo6ZW5kKHRoaXMpOwotfQot
aW5saW5lIE1lc3NhZ2VEZWY6OmNvbnN0X2ZpZWxkX2l0ZXJhdG9yIE1lc3NhZ2VEZWY6OmZpZWxk
X2JlZ2luKCkgY29uc3QgewotICByZXR1cm4gY29uc3RfZmllbGRfaXRlcmF0b3IodGhpcyk7Ci19
Ci1pbmxpbmUgTWVzc2FnZURlZjo6Y29uc3RfZmllbGRfaXRlcmF0b3IgTWVzc2FnZURlZjo6Zmll
bGRfZW5kKCkgY29uc3QgewotICByZXR1cm4gY29uc3RfZmllbGRfaXRlcmF0b3I6OmVuZCh0aGlz
KTsKLX0KLQotaW5saW5lIE1lc3NhZ2VEZWY6Om9uZW9mX2l0ZXJhdG9yIE1lc3NhZ2VEZWY6Om9u
ZW9mX2JlZ2luKCkgewotICByZXR1cm4gb25lb2ZfaXRlcmF0b3IodGhpcyk7Ci19Ci1pbmxpbmUg
TWVzc2FnZURlZjo6b25lb2ZfaXRlcmF0b3IgTWVzc2FnZURlZjo6b25lb2ZfZW5kKCkgewotICBy
ZXR1cm4gb25lb2ZfaXRlcmF0b3I6OmVuZCh0aGlzKTsKLX0KLWlubGluZSBNZXNzYWdlRGVmOjpj
b25zdF9vbmVvZl9pdGVyYXRvciBNZXNzYWdlRGVmOjpvbmVvZl9iZWdpbigpIGNvbnN0IHsKLSAg
cmV0dXJuIGNvbnN0X29uZW9mX2l0ZXJhdG9yKHRoaXMpOwotfQotaW5saW5lIE1lc3NhZ2VEZWY6
OmNvbnN0X29uZW9mX2l0ZXJhdG9yIE1lc3NhZ2VEZWY6Om9uZW9mX2VuZCgpIGNvbnN0IHsKLSAg
cmV0dXJuIGNvbnN0X29uZW9mX2l0ZXJhdG9yOjplbmQodGhpcyk7Ci19Ci0KLWlubGluZSBNZXNz
YWdlRGVmOjpmaWVsZF9pdGVyYXRvcjo6ZmllbGRfaXRlcmF0b3IoTWVzc2FnZURlZiogbWQpIHsK
LSAgdXBiX21zZ19maWVsZF9iZWdpbigmaXRlcl8sIG1kKTsKLX0KLWlubGluZSBNZXNzYWdlRGVm
OjpmaWVsZF9pdGVyYXRvciBNZXNzYWdlRGVmOjpmaWVsZF9pdGVyYXRvcjo6ZW5kKAotICAgIE1l
c3NhZ2VEZWYqIG1kKSB7Ci0gIE1lc3NhZ2VEZWY6OmZpZWxkX2l0ZXJhdG9yIGl0ZXIobWQpOwot
ICB1cGJfbXNnX2ZpZWxkX2l0ZXJfc2V0ZG9uZSgmaXRlci5pdGVyXyk7Ci0gIHJldHVybiBpdGVy
OwotfQotaW5saW5lIEZpZWxkRGVmKiBNZXNzYWdlRGVmOjpmaWVsZF9pdGVyYXRvcjo6b3BlcmF0
b3IqKCkgY29uc3QgewotICByZXR1cm4gdXBiX21zZ19pdGVyX2ZpZWxkKCZpdGVyXyk7Ci19Ci1p
bmxpbmUgdm9pZCBNZXNzYWdlRGVmOjpmaWVsZF9pdGVyYXRvcjo6b3BlcmF0b3IrKygpIHsKLSAg
cmV0dXJuIHVwYl9tc2dfZmllbGRfbmV4dCgmaXRlcl8pOwotfQotaW5saW5lIGJvb2wgTWVzc2Fn
ZURlZjo6ZmllbGRfaXRlcmF0b3I6Om9wZXJhdG9yPT0oCi0gICAgY29uc3QgZmllbGRfaXRlcmF0
b3IgJm90aGVyKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfaW50dGFibGVfaXRlcl9pc2VxdWFsKCZp
dGVyXywgJm90aGVyLml0ZXJfKTsKLX0KLWlubGluZSBib29sIE1lc3NhZ2VEZWY6OmZpZWxkX2l0
ZXJhdG9yOjpvcGVyYXRvciE9KAotICAgIGNvbnN0IGZpZWxkX2l0ZXJhdG9yICZvdGhlcikgY29u
c3QgewotICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci19Ci0KLWlubGluZSBNZXNzYWdlRGVm
Ojpjb25zdF9maWVsZF9pdGVyYXRvcjo6Y29uc3RfZmllbGRfaXRlcmF0b3IoCi0gICAgY29uc3Qg
TWVzc2FnZURlZiogbWQpIHsKLSAgdXBiX21zZ19maWVsZF9iZWdpbigmaXRlcl8sIG1kKTsKLX0K
LWlubGluZSBNZXNzYWdlRGVmOjpjb25zdF9maWVsZF9pdGVyYXRvciBNZXNzYWdlRGVmOjpjb25z
dF9maWVsZF9pdGVyYXRvcjo6ZW5kKAotICAgIGNvbnN0IE1lc3NhZ2VEZWYgKm1kKSB7Ci0gIE1l
c3NhZ2VEZWY6OmNvbnN0X2ZpZWxkX2l0ZXJhdG9yIGl0ZXIobWQpOwotICB1cGJfbXNnX2ZpZWxk
X2l0ZXJfc2V0ZG9uZSgmaXRlci5pdGVyXyk7Ci0gIHJldHVybiBpdGVyOwotfQotaW5saW5lIGNv
bnN0IEZpZWxkRGVmKiBNZXNzYWdlRGVmOjpjb25zdF9maWVsZF9pdGVyYXRvcjo6b3BlcmF0b3Iq
KCkgY29uc3QgewotICByZXR1cm4gdXBiX21zZ19pdGVyX2ZpZWxkKCZpdGVyXyk7Ci19Ci1pbmxp
bmUgdm9pZCBNZXNzYWdlRGVmOjpjb25zdF9maWVsZF9pdGVyYXRvcjo6b3BlcmF0b3IrKygpIHsK
LSAgcmV0dXJuIHVwYl9tc2dfZmllbGRfbmV4dCgmaXRlcl8pOwotfQotaW5saW5lIGJvb2wgTWVz
c2FnZURlZjo6Y29uc3RfZmllbGRfaXRlcmF0b3I6Om9wZXJhdG9yPT0oCi0gICAgY29uc3QgY29u
c3RfZmllbGRfaXRlcmF0b3IgJm90aGVyKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfaW50dGFibGVf
aXRlcl9pc2VxdWFsKCZpdGVyXywgJm90aGVyLml0ZXJfKTsKLX0KLWlubGluZSBib29sIE1lc3Nh
Z2VEZWY6OmNvbnN0X2ZpZWxkX2l0ZXJhdG9yOjpvcGVyYXRvciE9KAotICAgIGNvbnN0IGNvbnN0
X2ZpZWxkX2l0ZXJhdG9yICZvdGhlcikgY29uc3QgewotICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7Ci19Ci0KLWlubGluZSBNZXNzYWdlRGVmOjpvbmVvZl9pdGVyYXRvcjo6b25lb2ZfaXRlcmF0
b3IoTWVzc2FnZURlZiogbWQpIHsKLSAgdXBiX21zZ19vbmVvZl9iZWdpbigmaXRlcl8sIG1kKTsK
LX0KLWlubGluZSBNZXNzYWdlRGVmOjpvbmVvZl9pdGVyYXRvciBNZXNzYWdlRGVmOjpvbmVvZl9p
dGVyYXRvcjo6ZW5kKAotICAgIE1lc3NhZ2VEZWYqIG1kKSB7Ci0gIE1lc3NhZ2VEZWY6Om9uZW9m
X2l0ZXJhdG9yIGl0ZXIobWQpOwotICB1cGJfbXNnX29uZW9mX2l0ZXJfc2V0ZG9uZSgmaXRlci5p
dGVyXyk7Ci0gIHJldHVybiBpdGVyOwotfQotaW5saW5lIE9uZW9mRGVmKiBNZXNzYWdlRGVmOjpv
bmVvZl9pdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QgewotICByZXR1cm4gdXBiX21zZ19pdGVy
X29uZW9mKCZpdGVyXyk7Ci19Ci1pbmxpbmUgdm9pZCBNZXNzYWdlRGVmOjpvbmVvZl9pdGVyYXRv
cjo6b3BlcmF0b3IrKygpIHsKLSAgcmV0dXJuIHVwYl9tc2dfb25lb2ZfbmV4dCgmaXRlcl8pOwot
fQotaW5saW5lIGJvb2wgTWVzc2FnZURlZjo6b25lb2ZfaXRlcmF0b3I6Om9wZXJhdG9yPT0oCi0g
ICAgY29uc3Qgb25lb2ZfaXRlcmF0b3IgJm90aGVyKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfc3Ry
dGFibGVfaXRlcl9pc2VxdWFsKCZpdGVyXywgJm90aGVyLml0ZXJfKTsKLX0KLWlubGluZSBib29s
IE1lc3NhZ2VEZWY6Om9uZW9mX2l0ZXJhdG9yOjpvcGVyYXRvciE9KAotICAgIGNvbnN0IG9uZW9m
X2l0ZXJhdG9yICZvdGhlcikgY29uc3QgewotICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci19
Ci0KLWlubGluZSBNZXNzYWdlRGVmOjpjb25zdF9vbmVvZl9pdGVyYXRvcjo6Y29uc3Rfb25lb2Zf
aXRlcmF0b3IoCi0gICAgY29uc3QgTWVzc2FnZURlZiogbWQpIHsKLSAgdXBiX21zZ19vbmVvZl9i
ZWdpbigmaXRlcl8sIG1kKTsKLX0KLWlubGluZSBNZXNzYWdlRGVmOjpjb25zdF9vbmVvZl9pdGVy
YXRvciBNZXNzYWdlRGVmOjpjb25zdF9vbmVvZl9pdGVyYXRvcjo6ZW5kKAotICAgIGNvbnN0IE1l
c3NhZ2VEZWYgKm1kKSB7Ci0gIE1lc3NhZ2VEZWY6OmNvbnN0X29uZW9mX2l0ZXJhdG9yIGl0ZXIo
bWQpOwotICB1cGJfbXNnX29uZW9mX2l0ZXJfc2V0ZG9uZSgmaXRlci5pdGVyXyk7Ci0gIHJldHVy
biBpdGVyOwotfQotaW5saW5lIGNvbnN0IE9uZW9mRGVmKiBNZXNzYWdlRGVmOjpjb25zdF9vbmVv
Zl9pdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QgewotICByZXR1cm4gdXBiX21zZ19pdGVyX29u
ZW9mKCZpdGVyXyk7Ci19Ci1pbmxpbmUgdm9pZCBNZXNzYWdlRGVmOjpjb25zdF9vbmVvZl9pdGVy
YXRvcjo6b3BlcmF0b3IrKygpIHsKLSAgcmV0dXJuIHVwYl9tc2dfb25lb2ZfbmV4dCgmaXRlcl8p
OwotfQotaW5saW5lIGJvb2wgTWVzc2FnZURlZjo6Y29uc3Rfb25lb2ZfaXRlcmF0b3I6Om9wZXJh
dG9yPT0oCi0gICAgY29uc3QgY29uc3Rfb25lb2ZfaXRlcmF0b3IgJm90aGVyKSBjb25zdCB7Ci0g
IHJldHVybiB1cGJfc3RydGFibGVfaXRlcl9pc2VxdWFsKCZpdGVyXywgJm90aGVyLml0ZXJfKTsK
LX0KLWlubGluZSBib29sIE1lc3NhZ2VEZWY6OmNvbnN0X29uZW9mX2l0ZXJhdG9yOjpvcGVyYXRv
ciE9KAotICAgIGNvbnN0IGNvbnN0X29uZW9mX2l0ZXJhdG9yICZvdGhlcikgY29uc3QgewotICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci19Ci0KLWlubGluZSByZWZmZWRfcHRyPEVudW1EZWY+
IEVudW1EZWY6Ok5ldygpIHsKLSAgdXBiX2VudW1kZWYgKmUgPSB1cGJfZW51bWRlZl9uZXcoJmUp
OwotICByZXR1cm4gcmVmZmVkX3B0cjxFbnVtRGVmPihlLCAmZSk7Ci19Ci1pbmxpbmUgY29uc3Qg
Y2hhciogRW51bURlZjo6ZnVsbF9uYW1lKCkgY29uc3QgewotICByZXR1cm4gdXBiX2VudW1kZWZf
ZnVsbG5hbWUodGhpcyk7Ci19Ci1pbmxpbmUgYm9vbCBFbnVtRGVmOjpzZXRfZnVsbF9uYW1lKGNv
bnN0IGNoYXIqIGZ1bGxuYW1lLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9lbnVtZGVmX3Nl
dGZ1bGxuYW1lKHRoaXMsIGZ1bGxuYW1lLCBzKTsKLX0KLWlubGluZSBib29sIEVudW1EZWY6OnNl
dF9mdWxsX25hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxuYW1lLCBTdGF0dXMqIHMpIHsKLSAg
cmV0dXJuIHVwYl9lbnVtZGVmX3NldGZ1bGxuYW1lKHRoaXMsIHVwYl9zYWZlY3N0cihmdWxsbmFt
ZSksIHMpOwotfQotaW5saW5lIGJvb2wgRW51bURlZjo6RnJlZXplKFN0YXR1cyogc3RhdHVzKSB7
Ci0gIHJldHVybiB1cGJfZW51bWRlZl9mcmVlemUodGhpcywgc3RhdHVzKTsKLX0KLWlubGluZSBp
bnQzMl90IEVudW1EZWY6OmRlZmF1bHRfdmFsdWUoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZW51
bWRlZl9kZWZhdWx0KHRoaXMpOwotfQotaW5saW5lIGJvb2wgRW51bURlZjo6c2V0X2RlZmF1bHRf
dmFsdWUoaW50MzJfdCB2YWwsIFN0YXR1cyogc3RhdHVzKSB7Ci0gIHJldHVybiB1cGJfZW51bWRl
Zl9zZXRkZWZhdWx0KHRoaXMsIHZhbCwgc3RhdHVzKTsKLX0KLWlubGluZSBpbnQgRW51bURlZjo6
dmFsdWVfY291bnQoKSBjb25zdCB7IHJldHVybiB1cGJfZW51bWRlZl9udW12YWxzKHRoaXMpOyB9
Ci1pbmxpbmUgYm9vbCBFbnVtRGVmOjpBZGRWYWx1ZShjb25zdCBjaGFyKiBuYW1lLCBpbnQzMl90
IG51bSwgU3RhdHVzKiBzdGF0dXMpIHsKLSAgcmV0dXJuIHVwYl9lbnVtZGVmX2FkZHZhbCh0aGlz
LCBuYW1lLCBudW0sIHN0YXR1cyk7Ci19Ci1pbmxpbmUgYm9vbCBFbnVtRGVmOjpBZGRWYWx1ZShj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50MzJfdCBudW0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdGF0dXMqIHN0YXR1cykgewotICByZXR1cm4gdXBiX2VudW1kZWZfYWRkdmFs
KHRoaXMsIHVwYl9zYWZlY3N0cihuYW1lKSwgbnVtLCBzdGF0dXMpOwotfQotaW5saW5lIGJvb2wg
RW51bURlZjo6RmluZFZhbHVlQnlOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIGludDMyX3QgKm51bSkg
Y29uc3QgewotICByZXR1cm4gdXBiX2VudW1kZWZfbnRvaXoodGhpcywgbmFtZSwgbnVtKTsKLX0K
LWlubGluZSBjb25zdCBjaGFyKiBFbnVtRGVmOjpGaW5kVmFsdWVCeU51bWJlcihpbnQzMl90IG51
bSkgY29uc3QgewotICByZXR1cm4gdXBiX2VudW1kZWZfaXRvbih0aGlzLCBudW0pOwotfQotaW5s
aW5lIEVudW1EZWYqIEVudW1EZWY6OkR1cChjb25zdCB2b2lkKiBvd25lcikgY29uc3QgewotICBy
ZXR1cm4gdXBiX2VudW1kZWZfZHVwKHRoaXMsIG93bmVyKTsKLX0KLQotaW5saW5lIEVudW1EZWY6
Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBFbnVtRGVmKiBlKSB7Ci0gIHVwYl9lbnVtX2JlZ2lu
KCZpdGVyXywgZSk7Ci19Ci1pbmxpbmUgaW50MzJfdCBFbnVtRGVmOjpJdGVyYXRvcjo6bnVtYmVy
KCkgewotICByZXR1cm4gdXBiX2VudW1faXRlcl9udW1iZXIoJml0ZXJfKTsKLX0KLWlubGluZSBj
b25zdCBjaGFyKiBFbnVtRGVmOjpJdGVyYXRvcjo6bmFtZSgpIHsKLSAgcmV0dXJuIHVwYl9lbnVt
X2l0ZXJfbmFtZSgmaXRlcl8pOwotfQotaW5saW5lIGJvb2wgRW51bURlZjo6SXRlcmF0b3I6OkRv
bmUoKSB7IHJldHVybiB1cGJfZW51bV9kb25lKCZpdGVyXyk7IH0KLWlubGluZSB2b2lkIEVudW1E
ZWY6Okl0ZXJhdG9yOjpOZXh0KCkgeyByZXR1cm4gdXBiX2VudW1fbmV4dCgmaXRlcl8pOyB9Ci0K
LWlubGluZSByZWZmZWRfcHRyPE9uZW9mRGVmPiBPbmVvZkRlZjo6TmV3KCkgewotICB1cGJfb25l
b2ZkZWYgKm8gPSB1cGJfb25lb2ZkZWZfbmV3KCZvKTsKLSAgcmV0dXJuIHJlZmZlZF9wdHI8T25l
b2ZEZWY+KG8sICZvKTsKLX0KLWlubGluZSBjb25zdCBjaGFyKiBPbmVvZkRlZjo6ZnVsbF9uYW1l
KCkgY29uc3QgewotICByZXR1cm4gdXBiX29uZW9mZGVmX25hbWUodGhpcyk7Ci19Ci0KLWlubGlu
ZSBjb25zdCBNZXNzYWdlRGVmKiBPbmVvZkRlZjo6Y29udGFpbmluZ190eXBlKCkgY29uc3Qgewot
ICByZXR1cm4gdXBiX29uZW9mZGVmX2NvbnRhaW5pbmd0eXBlKHRoaXMpOwotfQotaW5saW5lIGNv
bnN0IGNoYXIqIE9uZW9mRGVmOjpuYW1lKCkgY29uc3QgewotICByZXR1cm4gdXBiX29uZW9mZGVm
X25hbWUodGhpcyk7Ci19Ci1pbmxpbmUgYm9vbCBPbmVvZkRlZjo6c2V0X25hbWUoY29uc3QgY2hh
ciogbmFtZSwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfb25lb2ZkZWZfc2V0bmFtZSh0aGlz
LCBuYW1lLCBzKTsKLX0KLWlubGluZSBpbnQgT25lb2ZEZWY6OmZpZWxkX2NvdW50KCkgY29uc3Qg
ewotICByZXR1cm4gdXBiX29uZW9mZGVmX251bWZpZWxkcyh0aGlzKTsKLX0KLWlubGluZSBib29s
IE9uZW9mRGVmOjpBZGRGaWVsZChGaWVsZERlZiogZmllbGQsIFN0YXR1cyogcykgewotICByZXR1
cm4gdXBiX29uZW9mZGVmX2FkZGZpZWxkKHRoaXMsIGZpZWxkLCBOVUxMLCBzKTsKLX0KLWlubGlu
ZSBib29sIE9uZW9mRGVmOjpBZGRGaWVsZChjb25zdCByZWZmZWRfcHRyPEZpZWxkRGVmPiYgZmll
bGQsIFN0YXR1cyogcykgewotICByZXR1cm4gdXBiX29uZW9mZGVmX2FkZGZpZWxkKHRoaXMsIGZp
ZWxkLmdldCgpLCBOVUxMLCBzKTsKLX0KLWlubGluZSBjb25zdCBGaWVsZERlZiogT25lb2ZEZWY6
OkZpbmRGaWVsZEJ5TmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pIGNvbnN0IHsKLSAgcmV0dXJu
IHVwYl9vbmVvZmRlZl9udG9mKHRoaXMsIG5hbWUsIGxlbik7Ci19Ci1pbmxpbmUgY29uc3QgRmll
bGREZWYqIE9uZW9mRGVmOjpGaW5kRmllbGRCeU51bWJlcih1aW50MzJfdCBudW0pIGNvbnN0IHsK
LSAgcmV0dXJuIHVwYl9vbmVvZmRlZl9pdG9mKHRoaXMsIG51bSk7Ci19Ci1pbmxpbmUgT25lb2ZE
ZWY6Oml0ZXJhdG9yIE9uZW9mRGVmOjpiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMpOyB9
Ci1pbmxpbmUgT25lb2ZEZWY6Oml0ZXJhdG9yIE9uZW9mRGVmOjplbmQoKSB7IHJldHVybiBpdGVy
YXRvcjo6ZW5kKHRoaXMpOyB9Ci1pbmxpbmUgT25lb2ZEZWY6OmNvbnN0X2l0ZXJhdG9yIE9uZW9m
RGVmOjpiZWdpbigpIGNvbnN0IHsKLSAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMpOwotfQot
aW5saW5lIE9uZW9mRGVmOjpjb25zdF9pdGVyYXRvciBPbmVvZkRlZjo6ZW5kKCkgY29uc3Qgewot
ICByZXR1cm4gY29uc3RfaXRlcmF0b3I6OmVuZCh0aGlzKTsKLX0KLQotaW5saW5lIE9uZW9mRGVm
OjppdGVyYXRvcjo6aXRlcmF0b3IoT25lb2ZEZWYqIG8pIHsKLSAgdXBiX29uZW9mX2JlZ2luKCZp
dGVyXywgbyk7Ci19Ci1pbmxpbmUgT25lb2ZEZWY6Oml0ZXJhdG9yIE9uZW9mRGVmOjppdGVyYXRv
cjo6ZW5kKE9uZW9mRGVmKiBvKSB7Ci0gIE9uZW9mRGVmOjppdGVyYXRvciBpdGVyKG8pOwotICB1
cGJfb25lb2ZfaXRlcl9zZXRkb25lKCZpdGVyLml0ZXJfKTsKLSAgcmV0dXJuIGl0ZXI7Ci19Ci1p
bmxpbmUgRmllbGREZWYqIE9uZW9mRGVmOjppdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3Qgewot
ICByZXR1cm4gdXBiX29uZW9mX2l0ZXJfZmllbGQoJml0ZXJfKTsKLX0KLWlubGluZSB2b2lkIE9u
ZW9mRGVmOjppdGVyYXRvcjo6b3BlcmF0b3IrKygpIHsgcmV0dXJuIHVwYl9vbmVvZl9uZXh0KCZp
dGVyXyk7IH0KLWlubGluZSBib29sIE9uZW9mRGVmOjppdGVyYXRvcjo6b3BlcmF0b3I9PShjb25z
dCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9pbnR0YWJsZV9pdGVyX2lz
ZXF1YWwoJml0ZXJfLCAmb3RoZXIuaXRlcl8pOwotfQotaW5saW5lIGJvb2wgT25lb2ZEZWY6Oml0
ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3QgewotICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7Ci19Ci0KLWlubGluZSBPbmVvZkRlZjo6Y29uc3RfaXRlcmF0
b3I6OmNvbnN0X2l0ZXJhdG9yKGNvbnN0IE9uZW9mRGVmKiBtZCkgewotICB1cGJfb25lb2ZfYmVn
aW4oJml0ZXJfLCBtZCk7Ci19Ci1pbmxpbmUgT25lb2ZEZWY6OmNvbnN0X2l0ZXJhdG9yIE9uZW9m
RGVmOjpjb25zdF9pdGVyYXRvcjo6ZW5kKAotICAgIGNvbnN0IE9uZW9mRGVmICptZCkgewotICBP
bmVvZkRlZjo6Y29uc3RfaXRlcmF0b3IgaXRlcihtZCk7Ci0gIHVwYl9vbmVvZl9pdGVyX3NldGRv
bmUoJml0ZXIuaXRlcl8pOwotICByZXR1cm4gaXRlcjsKLX0KLWlubGluZSBjb25zdCBGaWVsZERl
ZiogT25lb2ZEZWY6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdCB7Ci0gIHJldHVy
biB1cGJfbXNnX2l0ZXJfZmllbGQoJml0ZXJfKTsKLX0KLWlubGluZSB2b2lkIE9uZW9mRGVmOjpj
b25zdF9pdGVyYXRvcjo6b3BlcmF0b3IrKygpIHsKLSAgcmV0dXJuIHVwYl9vbmVvZl9uZXh0KCZp
dGVyXyk7Ci19Ci1pbmxpbmUgYm9vbCBPbmVvZkRlZjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9y
PT0oCi0gICAgY29uc3QgY29uc3RfaXRlcmF0b3IgJm90aGVyKSBjb25zdCB7Ci0gIHJldHVybiB1
cGJfaW50dGFibGVfaXRlcl9pc2VxdWFsKCZpdGVyXywgJm90aGVyLml0ZXJfKTsKLX0KLWlubGlu
ZSBib29sIE9uZW9mRGVmOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPSgKLSAgICBjb25zdCBj
b25zdF9pdGVyYXRvciAmb3RoZXIpIGNvbnN0IHsKLSAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OwotfQotCi19ICAvKiBuYW1lc3BhY2UgdXBiICovCi0jZW5kaWYKLQotI2VuZGlmIC8qIFVQQl9E
RUZfSF8gKi8KLS8qCi0qKiBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgb2Ygc3RydWN0
cyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIHByaXZhdGUKLSoqIGFuZCBOT1Qgc3RhYmxlIGFj
cm9zcyB2ZXJzaW9ucyBvZiB1cGIuCi0qKgotKiogVGhlIG9ubHkgcmVhc29uIHRoZXkgYXJlIGRl
Y2xhcmVkIGhlcmUgYW5kIG5vdCBpbiAuYyBmaWxlcyBpcyB0byBhbGxvdyB1cGIKLSoqIGFuZCB0
aGUgYXBwbGljYXRpb24gKGlmIGRlc2lyZWQpIHRvIGVtYmVkIHN0YXRpY2FsbHktaW5pdGlhbGl6
ZWQgaW5zdGFuY2VzCi0qKiBvZiBzdHJ1Y3R1cmVzIGxpa2UgZGVmcy4KLSoqCi0qKiBJZiB5b3Ug
aW5jbHVkZSB0aGlzIGZpbGUsIGFsbCBndWFyYW50ZWVzIG9mIEFCSSBjb21wYXRpYmlsaXR5IGdv
IG91dCB0aGUKLSoqIHdpbmRvdyEgIEFueSBjb2RlIHRoYXQgaW5jbHVkZXMgdGhpcyBmaWxlIG5l
ZWRzIHRvIHJlY29tcGlsZSBhZ2FpbnN0IHRoZQotKiogZXhhY3Qgc2FtZSB2ZXJzaW9uIG9mIHVw
YiB0aGF0IHRoZXkgYXJlIGxpbmtpbmcgYWdhaW5zdC4KLSoqCi0qKiBZb3UgYWxzbyBuZWVkIHRv
IHJlY29tcGlsZSBpZiB5b3UgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgVVBCX0RFQlVHX1JFRlMK
LSoqIGZsYWcuCi0qLwotCi0KLSNpZm5kZWYgVVBCX1NUQVRJQ0lOSVRfSF8KLSNkZWZpbmUgVVBC
X1NUQVRJQ0lOSVRfSF8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0vKiBCZWNhdXNlIG9mIGhvdyB3
ZSBkbyBvdXIgdHlwZWRlZnMsIHRoaXMgaGVhZGVyIGNhbid0IGJlIGluY2x1ZGVkIGZyb20gQysr
LiAqLwotI2Vycm9yIFRoaXMgZmlsZSBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBDKysKLSNlbmRp
ZgotCi0vKiB1cGJfcmVmY291bnRlZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qIHVwYl9kZWYgKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0KLXN0cnVjdCB1cGJfZGVmIHsKLSAgdXBiX3JlZmNvdW50ZWQgYmFzZTsKLQotICBjb25zdCBj
aGFyICpmdWxsbmFtZTsKLSAgY2hhciB0eXBlOyAgLyogQSB1cGJfZGVmdHlwZV90IChjaGFyIHRv
IHNhdmUgc3BhY2UpICovCi0KLSAgLyogVXNlZCBhcyBhIGZsYWcgZHVyaW5nIHRoZSBkZWYncyBt
dXRhYmxlIHN0YWdlLiAgTXVzdCBiZSBmYWxzZSB1bmxlc3MKLSAgICogaXQgaXMgY3VycmVudGx5
IGJlaW5nIHVzZWQgYnkgYSBmdW5jdGlvbiBvbiB0aGUgc3RhY2suICBUaGlzIGFsbG93cwotICAg
KiB1cyB0byBlYXNpbHkgZGV0ZXJtaW5lIHdoaWNoIGRlZnMgd2VyZSBwYXNzZWQgaW50byB0aGUg
ZnVuY3Rpb24ncwotICAgKiBjdXJyZW50IGludm9jYXRpb24uICovCi0gIGJvb2wgY2FtZV9mcm9t
X3VzZXI7Ci19OwotCi0jZGVmaW5lIFVQQl9ERUZfSU5JVChuYW1lLCB0eXBlLCByZWZzLCByZWYy
cykgXAotICAgIHsgVVBCX1JFRkNPVU5UX0lOSVQocmVmcywgcmVmMnMpLCBuYW1lLCB0eXBlLCBm
YWxzZSB9Ci0KLQotLyogdXBiX2ZpZWxkZGVmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IHVwYl9maWVsZGRl
ZiB7Ci0gIHVwYl9kZWYgYmFzZTsKLQotICB1bmlvbiB7Ci0gICAgaW50NjRfdCBzaW50OwotICAg
IHVpbnQ2NF90IHVpbnQ7Ci0gICAgZG91YmxlIGRibDsKLSAgICBmbG9hdCBmbHQ7Ci0gICAgdm9p
ZCAqYnl0ZXM7Ci0gIH0gZGVmYXVsdHZhbDsKLSAgdW5pb24gewotICAgIGNvbnN0IHVwYl9tc2dk
ZWYgKmRlZjsgIC8qIElmICFtc2dfaXNfc3ltYm9saWMuICovCi0gICAgY2hhciAqbmFtZTsgICAg
ICAgICAgICAgLyogSWYgbXNnX2lzX3N5bWJvbGljLiAqLwotICB9IG1zZzsKLSAgdW5pb24gewot
ICAgIGNvbnN0IHVwYl9kZWYgKmRlZjsgIC8qIElmICFzdWJkZWZfaXNfc3ltYm9saWMuICovCi0g
ICAgY2hhciAqbmFtZTsgICAgICAgICAgLyogSWYgc3ViZGVmX2lzX3N5bWJvbGljLiAqLwotICB9
IHN1YjsgIC8qIFRoZSBtc2dkZWYgb3IgZW51bWRlZiBmb3IgdGhpcyBmaWVsZCwgaWYgdXBiX2hh
c3N1YmRlZihmKS4gKi8KLSAgYm9vbCBzdWJkZWZfaXNfc3ltYm9saWM7Ci0gIGJvb2wgbXNnX2lz
X3N5bWJvbGljOwotICBjb25zdCB1cGJfb25lb2ZkZWYgKm9uZW9mOwotICBib29sIGRlZmF1bHRf
aXNfc3RyaW5nOwotICBib29sIHR5cGVfaXNfc2V0XzsgICAgIC8qIEZhbHNlIHVudGlsIHR5cGUg
aXMgZXhwbGljaXRseSBzZXQuICovCi0gIGJvb2wgaXNfZXh0ZW5zaW9uXzsKLSAgYm9vbCBsYXp5
XzsKLSAgYm9vbCBwYWNrZWRfOwotICB1cGJfaW50Zm10X3QgaW50Zm10OwotICBib29sIHRhZ2Rl
bGltOwotICB1cGJfZmllbGR0eXBlX3QgdHlwZV87Ci0gIHVwYl9sYWJlbF90IGxhYmVsXzsKLSAg
dWludDMyX3QgbnVtYmVyXzsKLSAgdWludDMyX3Qgc2VsZWN0b3JfYmFzZTsgIC8qIFVzZWQgdG8g
aW5kZXggaW50byBhIHVwYjo6SGFuZGxlcnMgdGFibGUuICovCi0gIHVpbnQzMl90IGluZGV4XzsK
LX07Ci0KLSNkZWZpbmUgVVBCX0ZJRUxEREVGX0lOSVQobGFiZWwsIHR5cGUsIGludGZtdCwgdGFn
ZGVsaW0sIGlzX2V4dGVuc2lvbiwgbGF6eSwgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHBhY2tlZCwgbmFtZSwgbnVtLCBtc2dkZWYsIHN1YmRlZiwgc2VsZWN0b3JfYmFzZSwgICAgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgZGVmYXVsdHZhbCwgcmVmcywgcmVmMnMp
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVVBC
X0RFRl9JTklUKG5hbWUsIFVQQl9ERUZfRklFTEQsIHJlZnMsIHJlZjJzKSwgZGVmYXVsdHZhbCwg
e21zZ2RlZn0sICAgICAgXAotICAgICAgICB7c3ViZGVmfSwgTlVMTCwgZmFsc2UsIGZhbHNlLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdHlwZSA9
PSBVUEJfVFlQRV9TVFJJTkcgfHwgdHlwZSA9PSBVUEJfVFlQRV9CWVRFUywgdHJ1ZSwgaXNfZXh0
ZW5zaW9uLCBcCi0gICAgICAgIGxhenksIHBhY2tlZCwgaW50Zm10LCB0YWdkZWxpbSwgdHlwZSwg
bGFiZWwsIG51bSwgc2VsZWN0b3JfYmFzZSwgaW5kZXggXAotICB9Ci0KLQotLyogdXBiX21zZ2Rl
ZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KLQotc3RydWN0IHVwYl9tc2dkZWYgewotICB1cGJfZGVmIGJhc2U7Ci0KLSAg
c2l6ZV90IHNlbGVjdG9yX2NvdW50OwotICB1aW50MzJfdCBzdWJtc2dfZmllbGRfY291bnQ7Ci0K
LSAgLyogVGFibGVzIGZvciBsb29raW5nIHVwIGZpZWxkcyBieSBudW1iZXIgYW5kIG5hbWUuICov
Ci0gIHVwYl9pbnR0YWJsZSBpdG9mOyAgLyogaW50IHRvIGZpZWxkICovCi0gIHVwYl9zdHJ0YWJs
ZSBudG9mOyAgLyogbmFtZSB0byBmaWVsZCAqLwotCi0gIC8qIFRhYmxlcyBmb3IgbG9va2luZyB1
cCBvbmVvZnMgYnkgbmFtZS4gKi8KLSAgdXBiX3N0cnRhYmxlIG50b287ICAvKiBuYW1lIHRvIG9u
ZW9mICovCi0KLSAgLyogSXMgdGhpcyBhIG1hcC1lbnRyeSBtZXNzYWdlPwotICAgKiBUT0RPOiBz
ZXQgdGhpcyBmbGFnIHByb3Blcmx5IGZvciBzdGF0aWMgZGVzY3JpcHRvcnM7IHJlZ2VuZXJhdGUK
LSAgICogZGVzY3JpcHRvci51cGIuYy4gKi8KLSAgYm9vbCBtYXBfZW50cnk7Ci0KLSAgLyogVE9E
TyhoYWJlcm1hbik6IHByb3BlciBleHRlbnNpb24gcmFuZ2VzICh0aGVyZSBjYW4gYmUgbXVsdGlw
bGUpLiAqLwotfTsKLQotLyogVE9ETzogYWxzbyBzdXBwb3J0IHN0YXRpYyBpbml0aWFsaXphdGlv
biBvZiB0aGUgb25lb2ZzIHRhYmxlLiBUaGlzIHdpbGwgYmUKLSAqIG5lZWRlZCBpZiB3ZSBjb21w
aWxlIGluIGRlc2NyaXB0b3JzIHRoYXQgY29udGFpbiBvbmVvZnMuICovCi0jZGVmaW5lIFVQQl9N
U0dERUZfSU5JVChuYW1lLCBzZWxlY3Rvcl9jb3VudCwgc3VibXNnX2ZpZWxkX2NvdW50LCBpdG9m
LCBudG9mLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICByZWZzLCByZWYycykgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgVVBCX0RFRl9JTklUKG5hbWUsIFVQQl9ERUZfTVNHLCByZWZzLCByZWYycyksIHNlbGVj
dG9yX2NvdW50LCAgICAgICAgICAgICBcCi0gICAgICAgIHN1Ym1zZ19maWVsZF9jb3VudCwgaXRv
ZiwgbnRvZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IFVQQl9FTVBUWV9TVFJUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLCBmYWxzZSAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIH0KLQotCi0vKiB1cGJfZW51bWRlZiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1
Y3QgdXBiX2VudW1kZWYgewotICB1cGJfZGVmIGJhc2U7Ci0KLSAgdXBiX3N0cnRhYmxlIG50b2k7
Ci0gIHVwYl9pbnR0YWJsZSBpdG9uOwotICBpbnQzMl90IGRlZmF1bHR2YWw7Ci19OwotCi0jZGVm
aW5lIFVQQl9FTlVNREVGX0lOSVQobmFtZSwgbnRvaSwgaXRvbiwgZGVmYXVsdHZhbCwgcmVmcywg
cmVmMnMpIFwKLSAgeyBVUEJfREVGX0lOSVQobmFtZSwgVVBCX0RFRl9FTlVNLCByZWZzLCByZWYy
cyksIG50b2ksIGl0b24sIGRlZmF1bHR2YWwgfQotCi0KLS8qIHVwYl9vbmVvZmRlZiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0KLXN0cnVjdCB1cGJfb25lb2ZkZWYgewotICB1cGJfZGVmIGJhc2U7Ci0KLSAgdXBiX3N0cnRh
YmxlIG50b2Y7Ci0gIHVwYl9pbnR0YWJsZSBpdG9mOwotICBjb25zdCB1cGJfbXNnZGVmICpwYXJl
bnQ7Ci19OwotCi0jZGVmaW5lIFVQQl9PTkVPRkRFRl9JTklUKG5hbWUsIG50b2YsIGl0b2YsIHJl
ZnMsIHJlZjJzKSBcCi0gIHsgVVBCX0RFRl9JTklUKG5hbWUsIFVQQl9ERUZfRU5VTSwgcmVmcywg
cmVmMnMpLCBudG9mLCBpdG9mIH0KLQotCi0vKiB1cGJfc3ltdGFiICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1
Y3QgdXBiX3N5bXRhYiB7Ci0gIHVwYl9yZWZjb3VudGVkIGJhc2U7Ci0KLSAgdXBiX3N0cnRhYmxl
IHN5bXRhYjsKLX07Ci0KLSNkZWZpbmUgVVBCX1NZTVRBQl9JTklUKHN5bXRhYiwgcmVmcywgcmVm
MnMpIFwKLSAgeyBVUEJfUkVGQ09VTlRfSU5JVChyZWZzLCByZWYycyksIHN5bXRhYiB9Ci0KLQot
I2VuZGlmICAvKiBVUEJfU1RBVElDSU5JVF9IXyAqLwotLyoKLSoqIHVwYjo6SGFuZGxlcnMgKHVw
Yl9oYW5kbGVycykKLSoqCi0qKiBBIHVwYl9oYW5kbGVycyBpcyBsaWtlIGEgdmlydHVhbCB0YWJs
ZSBmb3IgYSB1cGJfbXNnZGVmLiAgRWFjaCBmaWVsZCBvZiB0aGUKLSoqIG1lc3NhZ2UgY2FuIGhh
dmUgYXNzb2NpYXRlZCBmdW5jdGlvbnMgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHdlIGFyZQot
KiogcGFyc2luZyBvciB2aXNpdGluZyBhIHN0cmVhbSBvZiBkYXRhLiAgVGhpcyBpcyBzaW1pbGFy
IHRvIGhvdyBoYW5kbGVycyB3b3JrCi0qKiBpbiBTQVggKHRoZSBTaW1wbGUgQVBJIGZvciBYTUwp
LgotKioKLSoqIFRoZSBoYW5kbGVycyBoYXZlIG5vIGlkZWEgd2hlcmUgdGhlIGRhdGEgaXMgY29t
aW5nIGZyb20sIHNvIGEgc2luZ2xlIHNldCBvZgotKiogaGFuZGxlcnMgY291bGQgYmUgdXNlZCB3
aXRoIHR3byBjb21wbGV0ZWx5IGRpZmZlcmVudCBkYXRhIHNvdXJjZXMgKGZvcgotKiogZXhhbXBs
ZSwgYSBwYXJzZXIgYW5kIGEgdmlzaXRvciBvdmVyIGluLW1lbW9yeSBvYmplY3RzKS4gIFRoaXMg
ZGVjb3VwbGluZyBpcwotKiogdGhlIG1vc3QgaW1wb3J0YW50IGZlYXR1cmUgb2YgdXBiLCBiZWNh
dXNlIGl0IGFsbG93cyBwYXJzZXJzIGFuZCBzZXJpYWxpemVycwotKiogdG8gYmUgaGlnaGx5IHJl
dXNhYmxlLgotKioKLSoqIFRoaXMgaXMgYSBtaXhlZCBDL0MrKyBpbnRlcmZhY2UgdGhhdCBvZmZl
cnMgYSBmdWxsIEFQSSB0byBib3RoIGxhbmd1YWdlcy4KLSoqIFNlZSB0aGUgdG9wLWxldmVsIFJF
QURNRSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSovCi0KLSNpZm5kZWYgVVBCX0hBTkRMRVJTX0gK
LSNkZWZpbmUgVVBCX0hBTkRMRVJTX0gKLQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLW5hbWVzcGFj
ZSB1cGIgewotY2xhc3MgQnVmZmVySGFuZGxlOwotY2xhc3MgQnl0ZXNIYW5kbGVyOwotY2xhc3Mg
SGFuZGxlckF0dHJpYnV0ZXM7Ci1jbGFzcyBIYW5kbGVyczsKLXRlbXBsYXRlIDxjbGFzcyBUPiBj
bGFzcyBIYW5kbGVyOwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBDYW5vbmljYWxUeXBlOwot
fSAgLyogbmFtZXNwYWNlIHVwYiAqLwotI2VuZGlmCi0KLVVQQl9ERUNMQVJFX1RZUEUodXBiOjpC
dWZmZXJIYW5kbGUsIHVwYl9idWZoYW5kbGUpCi1VUEJfREVDTEFSRV9UWVBFKHVwYjo6Qnl0ZXNI
YW5kbGVyLCB1cGJfYnl0ZXNoYW5kbGVyKQotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6OkhhbmRsZXJB
dHRyaWJ1dGVzLCB1cGJfaGFuZGxlcmF0dHIpCi1VUEJfREVDTEFSRV9ERVJJVkVEX1RZUEUodXBi
OjpIYW5kbGVycywgdXBiOjpSZWZDb3VudGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVw
Yl9oYW5kbGVycywgdXBiX3JlZmNvdW50ZWQpCi0KLS8qIFRoZSBtYXhpbXVtIGRlcHRoIHRoYXQg
dGhlIGhhbmRsZXIgZ3JhcGggY2FuIGhhdmUuICBUaGlzIGlzIGEgcmVzb3VyY2UgbGltaXQKLSAq
IGZvciB0aGUgQyBzdGFjayBzaW5jZSB3ZSBzb21ldGltZXMgbmVlZCB0byByZWN1cnNpdmVseSB0
cmF2ZXJzZSB0aGUgZ3JhcGguCi0gKiBDeWNsZXMgYXJlIG9rOyB0aGUgdHJhdmVyc2FsIHdpbGwg
c3RvcCB3aGVuIGl0IGRldGVjdHMgYSBjeWNsZSwgYnV0IHdlIG11c3QKLSAqIGhpdCB0aGUgY3lj
bGUgYmVmb3JlIHRoZSBtYXhpbXVtIGRlcHRoIGlzIHJlYWNoZWQuCi0gKgotICogSWYgaGF2aW5n
IGEgc2luZ2xlIHN0YXRpYyBsaW1pdCBpcyB0b28gaW5mbGV4aWJsZSwgd2UgY2FuIGFkZCBhbm90
aGVyIHZhcmlhbnQKLSAqIG9mIEhhbmRsZXJzOjpGcmVlemUgdGhhdCBhbGxvd3Mgc3BlY2lmeWlu
ZyB0aGlzIGFzIGEgcGFyYW1ldGVyLiAqLwotI2RlZmluZSBVUEJfTUFYX0hBTkRMRVJfREVQVEgg
NjQKLQotLyogQWxsIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgaGFuZGxlcnMgdGhhdCBjYW4gYmUg
cmVnaXN0ZXJlZC4KLSAqIE9ubHkgbmVlZGVkIGZvciB0aGUgYWR2YW5jZWQgZnVuY3Rpb25zIGlu
IHVwYjo6SGFuZGxlcnMuICovCi10eXBlZGVmIGVudW0gewotICBVUEJfSEFORExFUl9JTlQzMiwK
LSAgVVBCX0hBTkRMRVJfSU5UNjQsCi0gIFVQQl9IQU5ETEVSX1VJTlQzMiwKLSAgVVBCX0hBTkRM
RVJfVUlOVDY0LAotICBVUEJfSEFORExFUl9GTE9BVCwKLSAgVVBCX0hBTkRMRVJfRE9VQkxFLAot
ICBVUEJfSEFORExFUl9CT09MLAotICBVUEJfSEFORExFUl9TVEFSVFNUUiwKLSAgVVBCX0hBTkRM
RVJfU1RSSU5HLAotICBVUEJfSEFORExFUl9FTkRTVFIsCi0gIFVQQl9IQU5ETEVSX1NUQVJUU1VC
TVNHLAotICBVUEJfSEFORExFUl9FTkRTVUJNU0csCi0gIFVQQl9IQU5ETEVSX1NUQVJUU0VRLAot
ICBVUEJfSEFORExFUl9FTkRTRVEKLX0gdXBiX2hhbmRsZXJ0eXBlX3Q7Ci0KLSNkZWZpbmUgVVBC
X0hBTkRMRVJfTUFYIChVUEJfSEFORExFUl9FTkRTRVErMSkKLQotI2RlZmluZSBVUEJfQlJFQUsg
TlVMTAotCi0vKiBBIGNvbnZlbmllbnQgZGVmaW5pdGlvbiBmb3Igd2hlbiBubyBjbG9zdXJlIGlz
IG5lZWRlZC4gKi8KLWV4dGVybiBjaGFyIF91cGJfbm9jbG9zdXJlOwotI2RlZmluZSBVUEJfTk9f
Q0xPU1VSRSAmX3VwYl9ub2Nsb3N1cmUKLQotLyogQSBzZWxlY3RvciByZWZlcnMgdG8gYSBzcGVj
aWZpYyBmaWVsZCBoYW5kbGVyIGluIHRoZSBIYW5kbGVycyBvYmplY3QKLSAqIChmb3IgZXhhbXBs
ZTogdGhlIFNUQVJUU1VCTVNHIGhhbmRsZXIgZm9yIGZpZWxkICJmaWVsZDE1IikuICovCi10eXBl
ZGVmIGludDMyX3QgdXBiX3NlbGVjdG9yX3Q7Ci0KLVVQQl9CRUdJTl9FWFRFUk5fQwotCi0vKiBG
b3J3YXJkLWRlY2xhcmVzIGZvciBDIGlubGluZSBhY2Nlc3NvcnMuICBXZSBuZWVkIHRvIGRlY2xh
cmUgdGhlc2UgaGVyZQotICogc28gd2UgY2FuICJmcmllbmQiIHRoZW0gaW4gdGhlIGNsYXNzIGRl
Y2xhcmF0aW9ucyBpbiBDKysuICovCi1VUEJfSU5MSU5FIHVwYl9mdW5jICp1cGJfaGFuZGxlcnNf
Z2V0aGFuZGxlcihjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cGJfc2VsZWN0b3JfdCBzKTsKLVVQQl9JTkxJTkUgY29u
c3Qgdm9pZCAqdXBiX2hhbmRsZXJhdHRyX2hhbmRsZXJkYXRhKGNvbnN0IHVwYl9oYW5kbGVyYXR0
ciAqYXR0cik7Ci1VUEJfSU5MSU5FIGNvbnN0IHZvaWQgKnVwYl9oYW5kbGVyc19nZXRoYW5kbGVy
ZGF0YShjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cGJfc2VsZWN0b3JfdCBzKTsKLQotVVBCX0lOTElORSB2
b2lkIHVwYl9idWZoYW5kbGVfaW5pdCh1cGJfYnVmaGFuZGxlICpoKTsKLVVQQl9JTkxJTkUgdm9p
ZCB1cGJfYnVmaGFuZGxlX3NldG9iaih1cGJfYnVmaGFuZGxlICpoLCBjb25zdCB2b2lkICpvYmos
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqdHlwZSk7
Ci1VUEJfSU5MSU5FIHZvaWQgdXBiX2J1ZmhhbmRsZV9zZXRidWYodXBiX2J1ZmhhbmRsZSAqaCwg
Y29uc3QgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBvZnMpOwotVVBCX0lOTElORSBjb25zdCB2b2lkICp1cGJfYnVmaGFuZGxlX29iaihjb25z
dCB1cGJfYnVmaGFuZGxlICpoKTsKLVVQQl9JTkxJTkUgY29uc3Qgdm9pZCAqdXBiX2J1ZmhhbmRs
ZV9vYmp0eXBlKGNvbnN0IHVwYl9idWZoYW5kbGUgKmgpOwotVVBCX0lOTElORSBjb25zdCBjaGFy
ICp1cGJfYnVmaGFuZGxlX2J1Zihjb25zdCB1cGJfYnVmaGFuZGxlICpoKTsKLQotVVBCX0VORF9F
WFRFUk5fQwotCi0KLS8qIFN0YXRpYyBzZWxlY3RvcnMgZm9yIHVwYjo6SGFuZGxlcnMuICovCi0j
ZGVmaW5lIFVQQl9TVEFSVE1TR19TRUxFQ1RPUiAwCi0jZGVmaW5lIFVQQl9FTkRNU0dfU0VMRUNU
T1IgMQotI2RlZmluZSBVUEJfU1RBVElDX1NFTEVDVE9SX0NPVU5UIDIKLQotLyogU3RhdGljIHNl
bGVjdG9ycyBmb3IgdXBiOjpCeXRlc0hhbmRsZXIuICovCi0jZGVmaW5lIFVQQl9TVEFSVFNUUl9T
RUxFQ1RPUiAwCi0jZGVmaW5lIFVQQl9TVFJJTkdfU0VMRUNUT1IgMQotI2RlZmluZSBVUEJfRU5E
U1RSX1NFTEVDVE9SIDIKLQotdHlwZWRlZiB2b2lkIHVwYl9oYW5kbGVyZnJlZSh2b2lkICpkKTsK
LQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIEEgc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBhY2Nv
bXBhbmllcyBhIGhhbmRsZXIncyBmdW5jdGlvbiBwb2ludGVyLiAqLwotY2xhc3MgdXBiOjpIYW5k
bGVyQXR0cmlidXRlcyB7Ci0gcHVibGljOgotICBIYW5kbGVyQXR0cmlidXRlcygpOwotICB+SGFu
ZGxlckF0dHJpYnV0ZXMoKTsKLQotICAvKiBTZXRzIHRoZSBoYW5kbGVyIGRhdGEgdGhhdCB3aWxs
IGJlIHBhc3NlZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiB0aGUKLSAgICogaGFuZGxlci4g
IFRvIGZyZWUgdGhpcyBwb2ludGVyIHdoZW4gdGhlIGhhbmRsZXJzIGFyZSBmcmVlZCwgY2FsbAot
ICAgKiBIYW5kbGVyczo6QWRkQ2xlYW51cCgpLiAqLwotICBib29sIFNldEhhbmRsZXJEYXRhKGNv
bnN0IHZvaWQgKmhhbmRsZXJfZGF0YSk7Ci0gIGNvbnN0IHZvaWQqIGhhbmRsZXJfZGF0YSgpIGNv
bnN0OwotCi0gIC8qIFVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlIGNsb3N1cmUu
ICBUaGlzIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0Ci0gICAqIGFsbCBvdGhlciBjbG9zdXJlIHR5
cGVzIGZvciBoYW5kbGVyIHRoYXQgdXNlIHRoZSBzYW1lIGNsb3N1cmUuCi0gICAqIFJlZ2lzdHJh
dGlvbiB3aWxsIGZhaWwgaWYgdGhpcyBkb2VzIG5vdCBtYXRjaCBhbGwgb3RoZXIgbm9uLU5VTEwg
Y2xvc3VyZQotICAgKiB0eXBlcy4gKi8KLSAgYm9vbCBTZXRDbG9zdXJlVHlwZShjb25zdCB2b2lk
ICpjbG9zdXJlX3R5cGUpOwotICBjb25zdCB2b2lkKiBjbG9zdXJlX3R5cGUoKSBjb25zdDsKLQot
ICAvKiBVc2UgdGhpcyB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCBjbG9zdXJl
LiAgT25seSB1c2VkIGZvcgotICAgKiBTdGFydCp7U3RyaW5nLFN1Yk1lc3NhZ2UsU2VxdWVuY2V9
IGhhbmRsZXJzLiAgVGhpcyBtdXN0IG1hdGNoIHRoZSBjbG9zdXJlCi0gICAqIHR5cGUgb2YgYW55
IGhhbmRsZXJzIHRoYXQgdXNlIGl0IChmb3IgZXhhbXBsZSwgdGhlIFN0cmluZ0J1ZiBoYW5kbGVy
IG11c3QKLSAgICogbWF0Y2ggdGhlIGNsb3N1cmUgcmV0dXJuZWQgZnJvbSBTdGFydFN0cmluZyku
ICovCi0gIGJvb2wgU2V0UmV0dXJuQ2xvc3VyZVR5cGUoY29uc3Qgdm9pZCAqcmV0dXJuX2Nsb3N1
cmVfdHlwZSk7Ci0gIGNvbnN0IHZvaWQqIHJldHVybl9jbG9zdXJlX3R5cGUoKSBjb25zdDsKLQot
ICAvKiBTZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaGFuZGxlciBhbHdheXMgcmV0dXJucyAib2si
IChlaXRoZXIgInRydWUiIG9yIGEKLSAgICogbm9uLU5VTEwgY2xvc3VyZSkuICBUaGlzIGlzIGEg
aGludCB0aGF0IGNhbiBhbGxvdyBjb2RlIGdlbmVyYXRvcnMgdG8KLSAgICogZ2VuZXJhdGUgbW9y
ZSBlZmZpY2llbnQgY29kZS4gKi8KLSAgYm9vbCBTZXRBbHdheXNPayhib29sIGFsd2F5c19vayk7
Ci0gIGJvb2wgYWx3YXlzX29rKCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBmcmllbmQgVVBCX0lO
TElORSBjb25zdCB2b2lkICogOjp1cGJfaGFuZGxlcmF0dHJfaGFuZGxlcmRhdGEoCi0gICAgICBj
b25zdCB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpOwotI2Vsc2UKLXN0cnVjdCB1cGJfaGFuZGxlcmF0
dHIgewotI2VuZGlmCi0gIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YV87Ci0gIGNvbnN0IHZvaWQg
KmNsb3N1cmVfdHlwZV87Ci0gIGNvbnN0IHZvaWQgKnJldHVybl9jbG9zdXJlX3R5cGVfOwotICBi
b29sIGFsd2F5c29rXzsKLX07Ci0KLSNkZWZpbmUgVVBCX0hBTkRMRVJBVFRSX0lOSVRJQUxJWkVS
IHtOVUxMLCBOVUxMLCBOVUxMLCBmYWxzZX0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICB1cGJfZnVu
YyAqZnVuYzsKLQotICAvKiBJdCBpcyB3YXN0ZWZ1bCB0byBpbmNsdWRlIHRoZSBlbnRpcmUgYXR0
cmlidXRlcyBoZXJlOgotICAgKgotICAgKiAqIFNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIGlzIHJl
ZHVuZGFudCAobGlrZSBzdG9yaW5nIHRoZSBjbG9zdXJlIHR5cGUKLSAgICogICBzZXBhcmF0ZWx5
IGZvciBlYWNoIGhhbmRsZXIgdGhhdCBtdXN0IG1hdGNoKS4KLSAgICogKiBTb21lIG9mIHRoZSBp
bmZvIGlzIG9ubHkgbmVlZGVkIHByaW9yIHRvIGZyZWV6ZSgpIChsaWtlIGNsb3N1cmUgdHlwZXMp
LgotICAgKiAqIGFsaWdubWVudCBwYWRkaW5nIHdhc3RlcyBhIGxvdCBvZiBzcGFjZSBmb3IgYWx3
YXlzb2tfLgotICAgKgotICAgKiBJZi93aGVuIHRoZSBzaXplIGFuZCBsb2NhbGl0eSBvZiBoYW5k
bGVycyBpcyBhbiBpc3N1ZSwgd2UgY2FuIG9wdGltaXplIHRoaXMKLSAgICogbm90IHRvIHN0b3Jl
IHRoZSBlbnRpcmUgYXR0ciBsaWtlIHRoaXMuICBXZSBkbyBub3QgZXhwb3NlIHRoZSB0YWJsZSdz
Ci0gICAqIGxheW91dCB0byBhbGxvdyB0aGlzIG9wdGltaXphdGlvbiBpbiB0aGUgZnV0dXJlLiAq
LwotICB1cGJfaGFuZGxlcmF0dHIgYXR0cjsKLX0gdXBiX2hhbmRsZXJzX3RhYmVudDsKLQotI2lm
ZGVmIF9fY3BsdXNwbHVzCi0KLS8qIEV4dHJhIGluZm9ybWF0aW9uIGFib3V0IGEgYnVmZmVyIHRo
YXQgaXMgcGFzc2VkIHRvIGEgU3RyaW5nQnVmIGhhbmRsZXIuCi0gKiBUT0RPKGhhYmVybWFuKTog
YWxsb3cgdGhlIGhhbmRsZSB0byBiZSBwaW5uZWQgc28gdGhhdCBpdCB3aWxsIG91dGxpdmUKLSAq
IHRoZSBoYW5kbGVyIGludm9jYXRpb24uICovCi1jbGFzcyB1cGI6OkJ1ZmZlckhhbmRsZSB7Ci0g
cHVibGljOgotICBCdWZmZXJIYW5kbGUoKTsKLSAgfkJ1ZmZlckhhbmRsZSgpOwotCi0gIC8qIFRo
ZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRo
ZSBwb2ludGVyCi0gICAqIHBhc3NlZCB0byBhIFN0cmluZ0J1ZiBoYW5kbGVyIGJlY2F1c2UgdGhl
IGhhbmRsZXIgbWF5IHJlY2VpdmUgZGF0YQotICAgKiB0aGF0IGlzIGZyb20gdGhlIG1pZGRsZSBv
ciBlbmQgb2YgYSBsYXJnZXIgYnVmZmVyLiAqLwotICBjb25zdCBjaGFyKiBidWZmZXIoKSBjb25z
dDsKLQotICAvKiBUaGUgb2Zmc2V0IHdpdGhpbiB0aGUgYXR0YWNoZWQgb2JqZWN0IHdoZXJlIHRo
aXMgYnVmZmVyIGJlZ2lucy4gIE9ubHkKLSAgICogbWVhbmluZ2Z1bCBpZiB0aGVyZSBpcyBhbiBh
dHRhY2hlZCBvYmplY3QuICovCi0gIHNpemVfdCBvYmplY3Rfb2Zmc2V0KCkgY29uc3Q7Ci0KLSAg
LyogTm90ZSB0aGF0IG9iamVjdF9vZmZzZXQgaXMgdGhlIG9mZnNldCBvZiAiYnVmIiB3aXRoaW4g
dGhlIGF0dGFjaGVkCi0gICAqIG9iamVjdC4gKi8KLSAgdm9pZCBTZXRCdWZmZXIoY29uc3QgY2hh
ciogYnVmLCBzaXplX3Qgb2JqZWN0X29mZnNldCk7Ci0KLSAgLyogVGhlIEJ1ZmZlckhhbmRsZSBj
YW4gaGF2ZSBhbiAiYXR0YWNoZWQgb2JqZWN0Iiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KLSAgICog
dHVubmVsIHRocm91Z2ggYSBwb2ludGVyIHRvIHRoZSBidWZmZXIncyB1bmRlcmx5aW5nIHJlcHJl
c2VudGF0aW9uLiAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgdm9pZCBTZXRBdHRhY2hlZE9i
amVjdChjb25zdCBUKiBvYmopOwotCi0gIC8qIFJldHVybnMgTlVMTCBpZiB0aGUgYXR0YWNoZWQg
b2JqZWN0IGlzIG5vdCBvZiB0aGlzIHR5cGUuICovCi0gIHRlbXBsYXRlIDxjbGFzcyBUPgotICBj
b25zdCBUKiBHZXRBdHRhY2hlZE9iamVjdCgpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgZnJpZW5k
IFVQQl9JTkxJTkUgdm9pZCA6OnVwYl9idWZoYW5kbGVfaW5pdCh1cGJfYnVmaGFuZGxlICpoKTsK
LSAgZnJpZW5kIFVQQl9JTkxJTkUgdm9pZCA6OnVwYl9idWZoYW5kbGVfc2V0b2JqKHVwYl9idWZo
YW5kbGUgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2b2lkICp0eXBlKTsKLSAgZnJpZW5kIFVQQl9JTkxJTkUgdm9pZCA6
OnVwYl9idWZoYW5kbGVfc2V0YnVmKHVwYl9idWZoYW5kbGUgKmgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBv
ZnMpOwotICBmcmllbmQgVVBCX0lOTElORSBjb25zdCB2b2lkKiA6OnVwYl9idWZoYW5kbGVfb2Jq
KGNvbnN0IHVwYl9idWZoYW5kbGUgKmgpOwotICBmcmllbmQgVVBCX0lOTElORSBjb25zdCB2b2lk
KiA6OnVwYl9idWZoYW5kbGVfb2JqdHlwZSgKLSAgICAgIGNvbnN0IHVwYl9idWZoYW5kbGUgKmgp
OwotICBmcmllbmQgVVBCX0lOTElORSBjb25zdCBjaGFyKiA6OnVwYl9idWZoYW5kbGVfYnVmKGNv
bnN0IHVwYl9idWZoYW5kbGUgKmgpOwotI2Vsc2UKLXN0cnVjdCB1cGJfYnVmaGFuZGxlIHsKLSNl
bmRpZgotICBjb25zdCBjaGFyICpidWZfOwotICBjb25zdCB2b2lkICpvYmpfOwotICBjb25zdCB2
b2lkICpvYmp0eXBlXzsKLSAgc2l6ZV90IG9iam9mc187Ci19OwotCi0jaWZkZWYgX19jcGx1c3Bs
dXMKLQotLyogQSB1cGI6OkhhbmRsZXJzIG9iamVjdCByZXByZXNlbnRzIHRoZSBzZXQgb2YgaGFu
ZGxlcnMgYXNzb2NpYXRlZCB3aXRoIGEKLSAqIG1lc3NhZ2UgaW4gdGhlIGdyYXBoIG9mIG1lc3Nh
Z2VzLiAgWW91IGNhbiB0aGluayBvZiBpdCBhcyBhIGJpZyB2aXJ0dWFsCi0gKiB0YWJsZSB3aXRo
IGZ1bmN0aW9ucyBjb3JyZXNwb25kaW5nIHRvIGFsbCB0aGUgZXZlbnRzIHRoYXQgY2FuIGZpcmUg
d2hpbGUKLSAqIHBhcnNpbmcgb3IgdmlzaXRpbmcgYSBtZXNzYWdlIG9mIGEgc3BlY2lmaWMgdHlw
ZS4KLSAqCi0gKiBBbnkgaGFuZGxlcnMgdGhhdCBhcmUgbm90IHNldCBiZWhhdmUgYXMgaWYgdGhl
eSBoYWQgc3VjY2Vzc2Z1bGx5IGNvbnN1bWVkCi0gKiB0aGUgdmFsdWUuICBBbnkgdW5zZXQgU3Rh
cnQqIGhhbmRsZXJzIHdpbGwgcHJvcGFnYXRlIHRoZWlyIGNsb3N1cmUgdG8gdGhlCi0gKiBpbm5l
ciBmcmFtZS4KLSAqCi0gKiBUaGUgZWFzaWVzdCB3YXkgdG8gY3JlYXRlIHRoZSAqSGFuZGxlciBv
YmplY3RzIG5lZWRlZCBieSB0aGUgU2V0KiBtZXRob2RzIGlzCi0gKiB3aXRoIHRoZSBVcGJCaW5k
KCkgYW5kIFVwYk1ha2VIYW5kbGVyKCkgbWFjcm9zOyBzZWUgYmVsb3cuICovCi1jbGFzcyB1cGI6
OkhhbmRsZXJzIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgdXBiX3NlbGVjdG9yX3QgU2VsZWN0b3I7
Ci0gIHR5cGVkZWYgdXBiX2hhbmRsZXJ0eXBlX3QgVHlwZTsKLQotICB0eXBlZGVmIEhhbmRsZXI8
dm9pZCAqKCopKHZvaWQgKiwgY29uc3Qgdm9pZCAqKT4gU3RhcnRGaWVsZEhhbmRsZXI7Ci0gIHR5
cGVkZWYgSGFuZGxlcjxib29sICgqKSh2b2lkICosIGNvbnN0IHZvaWQgKik+IEVuZEZpZWxkSGFu
ZGxlcjsKLSAgdHlwZWRlZiBIYW5kbGVyPGJvb2wgKCopKHZvaWQgKiwgY29uc3Qgdm9pZCAqKT4g
U3RhcnRNZXNzYWdlSGFuZGxlcjsKLSAgdHlwZWRlZiBIYW5kbGVyPGJvb2wgKCopKHZvaWQgKiwg
Y29uc3Qgdm9pZCAqLCBTdGF0dXMqKT4gRW5kTWVzc2FnZUhhbmRsZXI7Ci0gIHR5cGVkZWYgSGFu
ZGxlcjx2b2lkICooKikodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk+IFN0YXJ0U3RyaW5n
SGFuZGxlcjsKLSAgdHlwZWRlZiBIYW5kbGVyPHNpemVfdCAoKikodm9pZCAqLCBjb25zdCB2b2lk
ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBCdWZmZXJIYW5kbGUgKik+IFN0cmluZ0hhbmRsZXI7Ci0KLSAgdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBWYWx1ZUhhbmRsZXIgewotICAgIHR5cGVkZWYgSGFuZGxlcjxib29sKCopKHZv
aWQgKiwgY29uc3Qgdm9pZCAqLCBUKT4gSDsKLSAgfTsKLQotICB0eXBlZGVmIFZhbHVlSGFuZGxl
cjxpbnQzMl90Pjo6SCAgICAgSW50MzJIYW5kbGVyOwotICB0eXBlZGVmIFZhbHVlSGFuZGxlcjxp
bnQ2NF90Pjo6SCAgICAgSW50NjRIYW5kbGVyOwotICB0eXBlZGVmIFZhbHVlSGFuZGxlcjx1aW50
MzJfdD46OkggICAgVUludDMySGFuZGxlcjsKLSAgdHlwZWRlZiBWYWx1ZUhhbmRsZXI8dWludDY0
X3Q+OjpIICAgIFVJbnQ2NEhhbmRsZXI7Ci0gIHR5cGVkZWYgVmFsdWVIYW5kbGVyPGZsb2F0Pjo6
SCAgICAgICBGbG9hdEhhbmRsZXI7Ci0gIHR5cGVkZWYgVmFsdWVIYW5kbGVyPGRvdWJsZT46Okgg
ICAgICBEb3VibGVIYW5kbGVyOwotICB0eXBlZGVmIFZhbHVlSGFuZGxlcjxib29sPjo6SCAgICAg
ICAgQm9vbEhhbmRsZXI7Ci0KLSAgLyogQW55IGZ1bmN0aW9uIHBvaW50ZXIgY2FuIGJlIGNvbnZl
cnRlZCB0byB0aGlzIGFuZCBjb252ZXJ0ZWQgYmFjayB0byBpdHMKLSAgICogY29ycmVjdCB0eXBl
LiAqLwotICB0eXBlZGVmIHZvaWQgR2VuZXJpY0Z1bmN0aW9uKCk7Ci0KLSAgdHlwZWRlZiB2b2lk
IEhhbmRsZXJzQ2FsbGJhY2soY29uc3Qgdm9pZCAqY2xvc3VyZSwgdXBiX2hhbmRsZXJzICpoKTsK
LQotICAvKiBSZXR1cm5zIGEgbmV3IGhhbmRsZXJzIG9iamVjdCBmb3IgdGhlIGdpdmVuIGZyb3pl
biBtc2dkZWYuCi0gICAqIFJldHVybnMgTlVMTCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQu
ICovCi0gIHN0YXRpYyByZWZmZWRfcHRyPEhhbmRsZXJzPiBOZXcoY29uc3QgTWVzc2FnZURlZiAq
bSk7Ci0KLSAgLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlZ2lzdGVyaW5nIGEgZ3JhcGgg
b2YgaGFuZGxlcnMgdGhhdCBtaXJyb3JzIHRoZQotICAgKiBncmFwaCBvZiBtc2dkZWZzIGZvciBz
b21lIG1lc3NhZ2UuICBGb3IgIm0iIGFuZCBhbGwgaXRzIGNoaWxkcmVuIGEgbmV3IHNldAotICAg
KiBvZiBoYW5kbGVycyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZSBnaXZlbiBjYWxsYmFjayB3aWxs
IGJlIGludm9rZWQsCi0gICAqIGFsbG93aW5nIHRoZSBjbGllbnQgdG8gcmVnaXN0ZXIgaGFuZGxl
cnMgZm9yIHRoaXMgbWVzc2FnZS4gIE5vdGUgdGhhdCBhbnkKLSAgICogc3ViaGFuZGxlcnMgc2V0
IGJ5IHRoZSBjYWxsYmFjayB3aWxsIGJlIG92ZXJ3cml0dGVuLiAqLwotICBzdGF0aWMgcmVmZmVk
X3B0cjxjb25zdCBIYW5kbGVycz4gTmV3RnJvemVuKGNvbnN0IE1lc3NhZ2VEZWYgKm0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlcnNDYWxsYmFj
ayAqY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgdm9pZCAqY2xvc3VyZSk7Ci0KLSAgLyogRnVuY3Rpb25hbGl0eSBmcm9tIHVwYjo6
UmVmQ291bnRlZC4gKi8KLSAgVVBCX1JFRkNPVU5URURfQ1BQTUVUSE9EUwotCi0gIC8qIEFsbCBo
YW5kbGVyIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgcmV0dXJuIGJvb2wgdG8gaW5kaWNhdGUgc3Vj
Y2VzcyBvcgotICAgKiBmYWlsdXJlOyBkZXRhaWxzIGFib3V0IGZhaWx1cmVzIGFyZSBzdG9yZWQg
aW4gdGhpcyBzdGF0dXMgb2JqZWN0LiAgSWYgYQotICAgKiBmYWlsdXJlIGRvZXMgb2NjdXIsIGl0
IG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIEhhbmRsZXJzIGFyZSBmcm96ZW4sCi0gICAqIG90
aGVyd2lzZSB0aGUgZnJlZXplKCkgb3BlcmF0aW9uIHdpbGwgZmFpbC4gIFRoZSBmdW5jdGlvbnMg
bWF5ICpvbmx5KiBiZQotICAgKiB1c2VkIHdoaWxlIHRoZSBIYW5kbGVycyBhcmUgbXV0YWJsZS4g
Ki8KLSAgY29uc3QgU3RhdHVzKiBzdGF0dXMoKTsKLSAgdm9pZCBDbGVhckVycm9yKCk7Ci0KLSAg
LyogQ2FsbCB0byBmcmVlemUgdGhlc2UgSGFuZGxlcnMuICBSZXF1aXJlcyB0aGF0IGFueSBTdWJI
YW5kbGVycyBhcmUgYWxyZWFkeQotICAgKiBmcm96ZW4uICBGb3IgY3ljbGVzLCB5b3UgbXVzdCB1
c2UgdGhlIHN0YXRpYyB2ZXJzaW9uIGJlbG93IGFuZCBmcmVlemUgdGhlCi0gICAqIHdob2xlIGdy
YXBoIGF0IG9uY2UuICovCi0gIGJvb2wgRnJlZXplKFN0YXR1cyogcyk7Ci0KLSAgLyogRnJlZXpl
cyB0aGUgZ2l2ZW4gc2V0IG9mIGhhbmRsZXJzLiAgWW91IG1heSBub3QgZnJlZXplIGEgaGFuZGxl
ciB3aXRob3V0Ci0gICAqIGFsc28gZnJlZXppbmcgYW55IGhhbmRsZXJzIHRoZXkgcG9pbnQgdG8u
ICovCi0gIHN0YXRpYyBib29sIEZyZWV6ZShIYW5kbGVycypjb25zdCogaGFuZGxlcnMsIGludCBu
LCBTdGF0dXMqIHMpOwotICBzdGF0aWMgYm9vbCBGcmVlemUoY29uc3Qgc3RkOjp2ZWN0b3I8SGFu
ZGxlcnMqPiYgaGFuZGxlcnMsIFN0YXR1cyogcyk7Ci0KLSAgLyogUmV0dXJucyB0aGUgbXNnZGVm
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGhhbmRsZXJzIG9iamVjdC4gKi8KLSAgY29uc3QgTWVzc2Fn
ZURlZiogbWVzc2FnZV9kZWYoKSBjb25zdDsKLQotICAvKiBBZGRzIHRoZSBnaXZlbiBwb2ludGVy
IGFuZCBmdW5jdGlvbiB0byB0aGUgbGlzdCBvZiBjbGVhbnVwIGZ1bmN0aW9ucyB0aGF0Ci0gICAq
IHdpbGwgYmUgcnVuIHdoZW4gdGhlc2UgaGFuZGxlcnMgYXJlIGZyZWVkLiAgSWYgdGhpcyBwb2lu
dGVyIGhhcyBwcmV2aW91c2x5Ci0gICAqIGJlZW4gcmVnaXN0ZXJlZCwgdGhlIGZ1bmN0aW9uIHJl
dHVybnMgZmFsc2UgYW5kIGRvZXMgbm90aGluZy4gKi8KLSAgYm9vbCBBZGRDbGVhbnVwKHZvaWQg
KnB0ciwgdXBiX2hhbmRsZXJmcmVlICpjbGVhbnVwKTsKLQotICAvKiBTZXRzIHRoZSBzdGFydG1z
ZyBoYW5kbGVyIGZvciB0aGUgbWVzc2FnZSwgd2hpY2ggaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgot
ICAgKgotICAgKiAgIGJvb2wgc3RhcnRtc2coTXlUeXBlKiBjbG9zdXJlKSB7Ci0gICAqICAgICAv
LyBDYWxsZWQgd2hlbiB0aGUgbWVzc2FnZSBiZWdpbnMuICBSZXR1cm5zIHRydWUgaWYgcHJvY2Vz
c2luZyBzaG91bGQKLSAgICogICAgIC8vIGNvbnRpbnVlLgotICAgKiAgICAgcmV0dXJuIHRydWU7
Ci0gICAqICAgfQotICAgKi8KLSAgYm9vbCBTZXRTdGFydE1lc3NhZ2VIYW5kbGVyKGNvbnN0IFN0
YXJ0TWVzc2FnZUhhbmRsZXImIGhhbmRsZXIpOwotCi0gIC8qIFNldHMgdGhlIGVuZG1zZyBoYW5k
bGVyIGZvciB0aGUgbWVzc2FnZSwgd2hpY2ggaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotICAgKgot
ICAgKiAgIGJvb2wgZW5kbXNnKE15VHlwZSogY2xvc3VyZSwgdXBiX3N0YXR1cyAqc3RhdHVzKSB7
Ci0gICAqICAgICAvLyBDYWxsZWQgd2hlbiBwcm9jZXNzaW5nIG9mIHRoaXMgbWVzc2FnZSBlbmRz
LCB3aGV0aGVyIGluIHN1Y2Nlc3Mgb3IKLSAgICogICAgIC8vIGZhaWx1cmUuICAic3RhdHVzIiBp
bmRpY2F0ZXMgdGhlIGZpbmFsIHN0YXR1cyBvZiBwcm9jZXNzaW5nLCBhbmQKLSAgICogICAgIC8v
IGNhbiBhbHNvIGJlIG1vZGlmaWVkIGluLXBsYWNlIHRvIHVwZGF0ZSB0aGUgZmluYWwgc3RhdHVz
LgotICAgKiAgIH0KLSAgICovCi0gIGJvb2wgU2V0RW5kTWVzc2FnZUhhbmRsZXIoY29uc3QgRW5k
TWVzc2FnZUhhbmRsZXImIGhhbmRsZXIpOwotCi0gIC8qIFNldHMgdGhlIHZhbHVlIGhhbmRsZXIg
Zm9yIHRoZSBnaXZlbiBmaWVsZCwgd2hpY2ggaXMgZGVmaW5lZCBhcyBmb2xsb3dzCi0gICAqICh0
aGlzIGlzIGZvciBhbiBpbnQzMiBmaWVsZDsgb3RoZXIgZmllbGQgdHlwZXMgd2lsbCBwYXNzIHRo
ZWlyIG5hdGl2ZQotICAgKiBDL0MrKyB0eXBlIGZvciAidmFsIik6Ci0gICAqCi0gICAqICAgYm9v
bCBPblZhbHVlKE15Q2xvc3VyZSogYywgY29uc3QgTXlIYW5kbGVyRGF0YSogZCwgaW50MzJfdCB2
YWwpIHsKLSAgICogICAgIC8vIENhbGxlZCB3aGVuIHRoZSBmaWVsZCdzIHZhbHVlIGlzIGVuY291
bnRlcmVkLiAgImQiIGNvbnRhaW5zCi0gICAqICAgICAvLyB3aGF0ZXZlciBkYXRhIHdhcyBib3Vu
ZCB0byB0aGlzIGZpZWxkIHdoZW4gaXQgd2FzIHJlZ2lzdGVyZWQuCi0gICAqICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgcHJvY2Vzc2luZyBzaG91bGQgY29udGludWUuCi0gICAqICAgICByZXR1cm4g
dHJ1ZTsKLSAgICogICB9Ci0gICAqCi0gICAqICAgaGFuZGVycy0+U2V0SW50MzJIYW5kbGVyKGYs
IFVwYkJpbmQoT25WYWx1ZSwgbmV3IE15SGFuZGxlckRhdGEoLi4uKSkpOwotICAgKgotICAgKiBU
aGUgdmFsdWUgdHlwZSBtdXN0IGV4YWN0bHkgbWF0Y2ggZi0+dHlwZSgpLgotICAgKiBGb3IgZXhh
bXBsZSwgYSBoYW5kbGVyIHRoYXQgdGFrZXMgYW4gaW50MzJfdCBwYXJhbWV0ZXIgbWF5IG9ubHkg
YmUgdXNlZCBmb3IKLSAgICogZmllbGRzIG9mIHR5cGUgVVBCX1RZUEVfSU5UMzIgYW5kIFVQQl9U
WVBFX0VOVU0uCi0gICAqCi0gICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIGhhbmRsZXIgZmFpbGVk
IHRvIHJlZ2lzdGVyOyBpbiB0aGlzIGNhc2UgdGhlIGNsZWFudXAKLSAgICogaGFuZGxlciAoaWYg
YW55KSB3aWxsIGJlIGNhbGxlZCBpbW1lZGlhdGVseS4KLSAgICovCi0gIGJvb2wgU2V0SW50MzJI
YW5kbGVyIChjb25zdCBGaWVsZERlZiogZiwgIGNvbnN0IEludDMySGFuZGxlciYgaCk7Ci0gIGJv
b2wgU2V0SW50NjRIYW5kbGVyIChjb25zdCBGaWVsZERlZiogZiwgIGNvbnN0IEludDY0SGFuZGxl
ciYgaCk7Ci0gIGJvb2wgU2V0VUludDMySGFuZGxlcihjb25zdCBGaWVsZERlZiogZiwgY29uc3Qg
VUludDMySGFuZGxlciYgaCk7Ci0gIGJvb2wgU2V0VUludDY0SGFuZGxlcihjb25zdCBGaWVsZERl
ZiogZiwgY29uc3QgVUludDY0SGFuZGxlciYgaCk7Ci0gIGJvb2wgU2V0RmxvYXRIYW5kbGVyIChj
b25zdCBGaWVsZERlZiogZiwgIGNvbnN0IEZsb2F0SGFuZGxlciYgaCk7Ci0gIGJvb2wgU2V0RG91
YmxlSGFuZGxlcihjb25zdCBGaWVsZERlZiogZiwgY29uc3QgRG91YmxlSGFuZGxlciYgaCk7Ci0g
IGJvb2wgU2V0Qm9vbEhhbmRsZXIgIChjb25zdCBGaWVsZERlZiogZiwgICBjb25zdCBCb29sSGFu
ZGxlciYgaCk7Ci0KLSAgLyogTGlrZSB0aGUgcHJldmlvdXMsIGJ1dCB0ZW1wbGF0ZWQgb24gdGhl
IHR5cGUgb24gdGhlIHZhbHVlIChpZS4gaW50MzIpLgotICAgKiBUaGlzIGlzIG1vc3RseSB1c2Vm
dWwgdG8gY2FsbCBmcm9tIG90aGVyIHRlbXBsYXRlcy4gIFRvIGNhbGwgdGhpcyB5b3UgbXVzdAot
ICAgKiBzcGVjaWZ5IHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZXhwbGljaXRseSwgaWU6Ci0gICAq
ICAgaC0+U2V0VmFsdWVIYW5kbGVyPFQ+KGYsIFVwYkJpbmQoTXlIYW5kbGVyPFQ+LCBNeURhdGEp
KTsgKi8KLSAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gIGJvb2wgU2V0VmFsdWVIYW5kbGVyKAotICAg
ICAgY29uc3QgRmllbGREZWYgKmYsCi0gICAgICBjb25zdCB0eXBlbmFtZSBWYWx1ZUhhbmRsZXI8
dHlwZW5hbWUgQ2Fub25pY2FsVHlwZTxUPjo6VHlwZT46OkgmIGhhbmRsZXIpOwotCi0gIC8qIFNl
dHMgaGFuZGxlcnMgZm9yIGEgc3RyaW5nIGZpZWxkLCB3aGljaCBhcmUgZGVmaW5lZCBhcyBmb2xs
b3dzOgotICAgKgotICAgKiAgIE15U3ViQ2xvc3VyZSogc3RhcnRzdHIoTXlDbG9zdXJlKiBjLCBj
b25zdCBNeUhhbmRsZXJEYXRhKiBkLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHNpemVfaGludCkgewotICAgKiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBzdHJpbmcgdmFsdWUg
YmVnaW5zLiAgVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlCi0gICAqICAgICAvLyBjbG9z
dXJlIGZvciB0aGUgc3RyaW5nLiAgInNpemVfaGludCIgaW5kaWNhdGVzIHRoZSBzaXplIG9mIHRo
ZQotICAgKiAgICAgLy8gc3RyaW5nIGlmIGl0IGlzIGtub3duLCBob3dldmVyIGlmIHRoZSBzdHJp
bmcgaXMgbGVuZ3RoLWRlbGltaXRlZAotICAgKiAgICAgLy8gYW5kIHRoZSBlbmQtb2Ytc3RyaW5n
IGlzIG5vdCBhdmFpbGFibGUgc2l6ZV9oaW50IHdpbGwgYmUgemVyby4KLSAgICogICAgIC8vIFRo
aXMgY2FzZSBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBjYXNlIHdoZXJlIHRoZSBzaXpl
IGlzCi0gICAqICAgICAvLyBrbm93biB0byBiZSB6ZXJvLgotICAgKiAgICAgLy8KLSAgICogICAg
IC8vIFRPRE8oaGFiZXJtYW4pOiBpcyBpdCBpbXBvcnRhbnQgdG8gZGlzdGluZ3Vpc2ggdGhlc2Ug
Y2FzZXM/Ci0gICAqICAgICAvLyBJZiB3ZSBoYWQgc3NpemVfdCBhcyBhIHR5cGUgd2UgY291bGQg
bWFrZSAtMSAidW5rbm93biIsIGJ1dAotICAgKiAgICAgLy8gc3NpemVfdCBpcyBQT1NJWCAobm90
IEFOU0kpIGFuZCB0aGVyZWZvcmUgbGVzcyBwb3J0YWJsZS4KLSAgICogICAgIC8vIEluIHByYWN0
aWNlIEkgc3VzcGVjdCBpdCB3b24ndCBiZSBpbXBvcnRhbnQgdG8gZGlzdGluZ3Vpc2guCi0gICAq
ICAgICByZXR1cm4gY2xvc3VyZTsKLSAgICogICB9Ci0gICAqCi0gICAqICAgc2l6ZV90IHN0cihN
eUNsb3N1cmUqIGNsb3N1cmUsIGNvbnN0IE15SGFuZGxlckRhdGEqIGQsCi0gICAqICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pIHsKLSAgICogICAgIC8vIENhbGxlZCBm
b3IgZWFjaCBidWZmZXIgb2Ygc3RyaW5nIGRhdGE7IHRoZSBtdWx0aXBsZSBwaHlzaWNhbCBidWZm
ZXJzCi0gICAqICAgICAvLyBhcmUgYWxsIHBhcnQgb2YgdGhlIHNhbWUgbG9naWNhbCBzdHJpbmcu
ICBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcwotICAgKiAgICAgLy8gaG93IG1hbnkgYnl0ZXMg
d2VyZSBjb25zdW1lZC4gIElmIHRoaXMgbnVtYmVyIGlzIGxlc3MgdGhhbiAibGVuIiwKLSAgICog
ICAgIC8vIHRoaXMgd2lsbCBhbHNvIGluZGljYXRlIHRoYXQgcHJvY2Vzc2luZyBzaG91bGQgYmUg
aGFsdGVkIGZvciBub3csCi0gICAqICAgICAvLyBsaWtlIHJldHVybmluZyBmYWxzZSBvciBVUEJf
QlJFQUsgZnJvbSBhbnkgb3RoZXIgY2FsbGJhY2suICBJZgotICAgKiAgICAgLy8gbnVtYmVyIGlz
IGdyZWF0ZXIgdGhhbiAibGVuIiwgdGhlIGV4Y2VzcyBieXRlcyB3aWxsIGJlIHNraXBwZWQgb3Zl
cgotICAgKiAgICAgLy8gYW5kIG5vdCBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLgotICAgKiAgICAg
cmV0dXJuIGxlbjsKLSAgICogICB9Ci0gICAqCi0gICAqICAgYm9vbCBlbmRzdHIoTXlDbG9zdXJl
KiBjLCBjb25zdCBNeUhhbmRsZXJEYXRhKiBkKSB7Ci0gICAqICAgICAvLyBDYWxsZWQgd2hlbiBh
IHN0cmluZyB2YWx1ZSBlbmRzLiAgUmV0dXJuIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyCi0gICAq
ICAgICAvLyBwcm9jZXNzaW5nIHNob3VsZCBjb250aW51ZS4KLSAgICogICAgIHJldHVybiB0cnVl
OwotICAgKiAgIH0KLSAgICovCi0gIGJvb2wgU2V0U3RhcnRTdHJpbmdIYW5kbGVyKGNvbnN0IEZp
ZWxkRGVmKiBmLCBjb25zdCBTdGFydFN0cmluZ0hhbmRsZXImIGgpOwotICBib29sIFNldFN0cmlu
Z0hhbmRsZXIoY29uc3QgRmllbGREZWYqIGYsIGNvbnN0IFN0cmluZ0hhbmRsZXImIGgpOwotICBi
b29sIFNldEVuZFN0cmluZ0hhbmRsZXIoY29uc3QgRmllbGREZWYqIGYsIGNvbnN0IEVuZEZpZWxk
SGFuZGxlciYgaCk7Ci0KLSAgLyogU2V0cyB0aGUgc3RhcnRzZXEgaGFuZGxlciwgd2hpY2ggaXMg
ZGVmaW5lZCBhcyBmb2xsb3dzOgotICAgKgotICAgKiAgIE15U3ViQ2xvc3VyZSAqc3RhcnRzZXEo
TXlDbG9zdXJlKiBjLCBjb25zdCBNeUhhbmRsZXJEYXRhKiBkKSB7Ci0gICAqICAgICAvLyBDYWxs
ZWQgd2hlbiBhIHNlcXVlbmNlIChyZXBlYXRlZCBmaWVsZCkgYmVnaW5zLiAgVGhlIHJldHVybmVk
Ci0gICAqICAgICAvLyBwb2ludGVyIGluZGljYXRlcyB0aGUgY2xvc3VyZSBmb3IgdGhlIHNlcXVl
bmNlIChvciBVUEJfQlJFQUsKLSAgICogICAgIC8vIHRvIGludGVycnVwdCBwcm9jZXNzaW5nKS4K
LSAgICogICAgIHJldHVybiBjbG9zdXJlOwotICAgKiAgIH0KLSAgICoKLSAgICogICBoLT5TZXRT
dGFydFNlcXVlbmNlSGFuZGxlcihmLCBVcGJCaW5kKHN0YXJ0c2VxLCBuZXcgTXlIYW5kbGVyRGF0
YSguLi4pKSk7Ci0gICAqCi0gICAqIFJldHVybnMgImZhbHNlIiBpZiAiZiIgZG9lcyBub3QgYmVs
b25nIHRvIHRoaXMgbWVzc2FnZSBvciBpcyBub3QgYQotICAgKiByZXBlYXRlZCBmaWVsZC4KLSAg
ICovCi0gIGJvb2wgU2V0U3RhcnRTZXF1ZW5jZUhhbmRsZXIoY29uc3QgRmllbGREZWYqIGYsIGNv
bnN0IFN0YXJ0RmllbGRIYW5kbGVyJiBoKTsKLQotICAvKiBTZXRzIHRoZSBzdGFydHN1Ym1zZyBo
YW5kbGVyIGZvciB0aGUgZ2l2ZW4gZmllbGQsIHdoaWNoIGlzIGRlZmluZWQgYXMKLSAgICogZm9s
bG93czoKLSAgICoKLSAgICogICBNeVN1YkNsb3N1cmUqIHN0YXJ0c3VibXNnKE15Q2xvc3VyZSog
YywgY29uc3QgTXlIYW5kbGVyRGF0YSogZCkgewotICAgKiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBz
dWJtZXNzYWdlIGJlZ2lucy4gIFRoZSByZXR1cm5lZCBwb2ludGVyIGluZGljYXRlcyB0aGUKLSAg
ICogICAgIC8vIGNsb3N1cmUgZm9yIHRoZSBzZXF1ZW5jZSAob3IgVVBCX0JSRUFLIHRvIGludGVy
cnVwdCBwcm9jZXNzaW5nKS4KLSAgICogICAgIHJldHVybiBjbG9zdXJlOwotICAgKiAgIH0KLSAg
ICoKLSAgICogICBoLT5TZXRTdGFydFN1Yk1lc3NhZ2VIYW5kbGVyKGYsIFVwYkJpbmQoc3RhcnRz
dWJtc2csCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
dyBNeUhhbmRsZXJEYXRhKC4uLikpKTsKLSAgICoKLSAgICogUmV0dXJucyAiZmFsc2UiIGlmICJm
IiBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBtZXNzYWdlIG9yIGlzIG5vdCBhCi0gICAqIHN1Ym1l
c3NhZ2UvZ3JvdXAgZmllbGQuCi0gICAqLwotICBib29sIFNldFN0YXJ0U3ViTWVzc2FnZUhhbmRs
ZXIoY29uc3QgRmllbGREZWYqIGYsIGNvbnN0IFN0YXJ0RmllbGRIYW5kbGVyJiBoKTsKLQotICAv
KiBTZXRzIHRoZSBlbmRzdWJtc2cgaGFuZGxlciBmb3IgdGhlIGdpdmVuIGZpZWxkLCB3aGljaCBp
cyBkZWZpbmVkIGFzCi0gICAqIGZvbGxvd3M6Ci0gICAqCi0gICAqICAgYm9vbCBlbmRzdWJtc2co
TXlDbG9zdXJlKiBjLCBjb25zdCBNeUhhbmRsZXJEYXRhKiBkKSB7Ci0gICAqICAgICAvLyBDYWxs
ZWQgd2hlbiBhIHN1Ym1lc3NhZ2UgZW5kcy4gIFJldHVybnMgdHJ1ZSB0byBjb250aW51ZSBwcm9j
ZXNzaW5nLgotICAgKiAgICAgcmV0dXJuIHRydWU7Ci0gICAqICAgfQotICAgKgotICAgKiBSZXR1
cm5zICJmYWxzZSIgaWYgImYiIGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIG1lc3NhZ2Ugb3IgaXMg
bm90IGEKLSAgICogc3VibWVzc2FnZS9ncm91cCBmaWVsZC4KLSAgICovCi0gIGJvb2wgU2V0RW5k
U3ViTWVzc2FnZUhhbmRsZXIoY29uc3QgRmllbGREZWYgKmYsIGNvbnN0IEVuZEZpZWxkSGFuZGxl
ciAmaCk7Ci0KLSAgLyogU3RhcnRzIHRoZSBlbmRzdWJzZXEgaGFuZGxlciBmb3IgdGhlIGdpdmVu
IGZpZWxkLCB3aGljaCBpcyBkZWZpbmVkIGFzCi0gICAqIGZvbGxvd3M6Ci0gICAqCi0gICAqICAg
Ym9vbCBlbmRzZXEoTXlDbG9zdXJlKiBjLCBjb25zdCBNeUhhbmRsZXJEYXRhKiBkKSB7Ci0gICAq
ICAgICAvLyBDYWxsZWQgd2hlbiBhIHNlcXVlbmNlIGVuZHMuICBSZXR1cm5zIHRydWUgY29udGlu
dWUgcHJvY2Vzc2luZy4KLSAgICogICAgIHJldHVybiB0cnVlOwotICAgKiAgIH0KLSAgICoKLSAg
ICogUmV0dXJucyAiZmFsc2UiIGlmICJmIiBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBtZXNzYWdl
IG9yIGlzIG5vdCBhCi0gICAqIHJlcGVhdGVkIGZpZWxkLgotICAgKi8KLSAgYm9vbCBTZXRFbmRT
ZXF1ZW5jZUhhbmRsZXIoY29uc3QgRmllbGREZWYqIGYsIGNvbnN0IEVuZEZpZWxkSGFuZGxlciYg
aCk7Ci0KLSAgLyogU2V0cyBvciBnZXRzIHRoZSBvYmplY3QgdGhhdCBzcGVjaWZpZXMgaGFuZGxl
cnMgZm9yIHRoZSBnaXZlbiBmaWVsZCwgd2hpY2gKLSAgICogbXVzdCBiZSBhIHN1Ym1lc3NhZ2Ug
b3IgZ3JvdXAuICBSZXR1cm5zIE5VTEwgaWYgbm8gaGFuZGxlcnMgYXJlIHNldC4gKi8KLSAgYm9v
bCBTZXRTdWJIYW5kbGVycyhjb25zdCBGaWVsZERlZiogZiwgY29uc3QgSGFuZGxlcnMqIHN1Yik7
Ci0gIGNvbnN0IEhhbmRsZXJzKiBHZXRTdWJIYW5kbGVycyhjb25zdCBGaWVsZERlZiogZikgY29u
c3Q7Ci0KLSAgLyogRXF1aXZhbGVudCB0byBHZXRTdWJIYW5kbGVycywgYnV0IHRha2VzIHRoZSBT
VEFSVFNVQk1TRyBzZWxlY3RvciBmb3IgdGhlCi0gICAqIGZpZWxkLiAqLwotICBjb25zdCBIYW5k
bGVycyogR2V0U3ViSGFuZGxlcnMoU2VsZWN0b3Igc3RhcnRzdWJtc2cpIGNvbnN0OwotCi0gIC8q
IEEgc2VsZWN0b3IgcmVmZXJzIHRvIGEgc3BlY2lmaWMgZmllbGQgaGFuZGxlciBpbiB0aGUgSGFu
ZGxlcnMgb2JqZWN0Ci0gICAqIChmb3IgZXhhbXBsZTogdGhlIFNUQVJUU1VCTVNHIGhhbmRsZXIg
Zm9yIGZpZWxkICJmaWVsZDE1IikuCi0gICAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgdHJ1ZSBhbmQg
c3RvcmVzIHRoZSBzZWxlY3RvciBpbiAicyIuCi0gICAqIElmIHRoZSBGaWVsZERlZiBvciBUeXBl
IGFyZSBpbnZhbGlkLCByZXR1cm5zIGZhbHNlLgotICAgKiBUaGUgcmV0dXJuZWQgc2VsZWN0b3Ig
aXMgT05MWSB2YWxpZCBmb3IgSGFuZGxlcnMgd2hvc2UgTWVzc2FnZURlZgotICAgKiBjb250YWlu
cyB0aGlzIEZpZWxkRGVmLiAqLwotICBzdGF0aWMgYm9vbCBHZXRTZWxlY3Rvcihjb25zdCBGaWVs
ZERlZiogZiwgVHlwZSB0eXBlLCBTZWxlY3Rvciogcyk7Ci0KLSAgLyogR2l2ZW4gYSBTVEFSVCBz
ZWxlY3RvciBvZiBhbnkga2luZCwgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBFTkQgc2VsZWN0
b3IuICovCi0gIHN0YXRpYyBTZWxlY3RvciBHZXRFbmRTZWxlY3RvcihTZWxlY3RvciBzdGFydF9z
ZWxlY3Rvcik7Ci0KLSAgLyogUmV0dXJucyB0aGUgZnVuY3Rpb24gcG9pbnRlciBmb3IgdGhpcyBo
YW5kbGVyLiAgSXQgaXMgdGhlIGNsaWVudCdzCi0gICAqIHJlc3BvbnNpYmlsaXR5IHRvIGNhc3Qg
dG8gdGhlIGNvcnJlY3QgZnVuY3Rpb24gdHlwZSBiZWZvcmUgY2FsbGluZyBpdC4gKi8KLSAgR2Vu
ZXJpY0Z1bmN0aW9uKiBHZXRIYW5kbGVyKFNlbGVjdG9yIHNlbGVjdG9yKTsKLQotICAvKiBTZXRz
IHRoZSBnaXZlbiBhdHRyaWJ1dGVzIHRvIHRoZSBhdHRyaWJ1dGVzIGZvciB0aGlzIHNlbGVjdG9y
LiAqLwotICBib29sIEdldEF0dHJpYnV0ZXMoU2VsZWN0b3Igc2VsZWN0b3IsIEhhbmRsZXJBdHRy
aWJ1dGVzKiBhdHRyKTsKLQotICAvKiBSZXR1cm5zIHRoZSBoYW5kbGVyIGRhdGEgdGhhdCB3YXMg
cmVnaXN0ZXJlZCB3aXRoIHRoaXMgaGFuZGxlci4gKi8KLSAgY29uc3Qgdm9pZCogR2V0SGFuZGxl
ckRhdGEoU2VsZWN0b3Igc2VsZWN0b3IpOwotCi0gIC8qIENvdWxkIGFkZCBhbnkgb2YgdGhlIGZv
bGxvd2luZyBmdW5jdGlvbnMgYXMtbmVlZGVkLCB3aXRoIHNvbWUgbWlub3IKLSAgICogaW1wbGVt
ZW50YXRpb24gY2hhbmdlczoKLSAgICoKLSAgICogY29uc3QgRmllbGREZWYqIEdldEZpZWxkRGVm
KFNlbGVjdG9yIHNlbGVjdG9yKTsKLSAgICogc3RhdGljIGJvb2wgSXNTZXF1ZW5jZShTZWxlY3Rv
ciBzZWxlY3Rvcik7ICovCi0KLSBwcml2YXRlOgotICBVUEJfRElTQUxMT1dfUE9EX09QUyhIYW5k
bGVycywgdXBiOjpIYW5kbGVycykKLQotICBmcmllbmQgVVBCX0lOTElORSBHZW5lcmljRnVuY3Rp
b24gKjo6dXBiX2hhbmRsZXJzX2dldGhhbmRsZXIoCi0gICAgICBjb25zdCB1cGJfaGFuZGxlcnMg
KmgsIHVwYl9zZWxlY3Rvcl90IHMpOwotICBmcmllbmQgVVBCX0lOTElORSBjb25zdCB2b2lkICo6
OnVwYl9oYW5kbGVyc19nZXRoYW5kbGVyZGF0YSgKLSAgICAgIGNvbnN0IHVwYl9oYW5kbGVycyAq
aCwgdXBiX3NlbGVjdG9yX3Qgcyk7Ci0jZWxzZQotc3RydWN0IHVwYl9oYW5kbGVycyB7Ci0jZW5k
aWYKLSAgdXBiX3JlZmNvdW50ZWQgYmFzZTsKLQotICBjb25zdCB1cGJfbXNnZGVmICptc2c7Ci0g
IGNvbnN0IHVwYl9oYW5kbGVycyAqKnN1YjsKLSAgY29uc3Qgdm9pZCAqdG9wX2Nsb3N1cmVfdHlw
ZTsKLSAgdXBiX2ludHRhYmxlIGNsZWFudXBfOwotICB1cGJfc3RhdHVzIHN0YXR1c187ICAvKiBV
c2VkIG9ubHkgd2hlbiBtdXRhYmxlLiAqLwotICB1cGJfaGFuZGxlcnNfdGFiZW50IHRhYmxlWzFd
OyAgLyogRHluYW1pY2FsbHktc2l6ZWQgZmllbGQgaGFuZGxlciBhcnJheS4gKi8KLX07Ci0KLSNp
ZmRlZiBfX2NwbHVzcGx1cwotCi1uYW1lc3BhY2UgdXBiIHsKLQotLyogQ29udmVuaWVuY2UgbWFj
cm9zIGZvciBjcmVhdGluZyBhIEhhbmRsZXIgb2JqZWN0IHRoYXQgaXMgd3JhcHBlZCB3aXRoIGEK
LSAqIHR5cGUtc2FmZSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgdGhlICJ2b2lkKiIg
cGFyYW1ldGVycy9yZXR1cm5zCi0gKiBvZiB0aGUgdW5kZXJseWluZyBDIEFQSSBpbnRvIG5pY2Ug
QysrIGZ1bmN0aW9uLgotICoKLSAqIFNhbXBsZSB1c2FnZToKLSAqICAgdm9pZCBPblZhbHVlMShN
eUNsb3N1cmUqIGMsIGNvbnN0IE15SGFuZGxlckRhdGEqIGQsIGludDMyX3QgdmFsKSB7Ci0gKiAg
ICAgLy8gZG8gc3R1ZmYgLi4uCi0gKiAgIH0KLSAqCi0gKiAgIC8vIEhhbmRsZXIgdGhhdCBkb2Vz
bid0IG5lZWQgYW55IGRhdGEgYm91bmQgdG8gaXQuCi0gKiAgIHZvaWQgT25WYWx1ZTIoTXlDbG9z
dXJlKiBjLCBpbnQzMl90IHZhbCkgewotICogICAgIC8vIGRvIHN0dWZmIC4uLgotICogICB9Ci0g
KgotICogICAvLyBIYW5kbGVyIHRoYXQgcmV0dXJucyBib29sIHNvIGl0IGNhbiByZXR1cm4gZmFp
bHVyZSBpZiBuZWNlc3NhcnkuCi0gKiAgIGJvb2wgT25WYWx1ZTMoTXlDbG9zdXJlKiBjLCBpbnQz
Ml90IHZhbCkgewotICogICAgIC8vIGRvIHN0dWZmIC4uLgotICogICAgIHJldHVybiBvazsKLSAq
ICAgfQotICoKLSAqICAgLy8gTWVtYmVyIGZ1bmN0aW9uIGhhbmRsZXIuCi0gKiAgIGNsYXNzIE15
Q2xvc3VyZSB7Ci0gKiAgICBwdWJsaWM6Ci0gKiAgICAgdm9pZCBPblZhbHVlKGludDMyX3QgdmFs
KSB7Ci0gKiAgICAgICAvLyBkbyBzdHVmZiAuLi4KLSAqICAgICB9Ci0gKiAgIH07Ci0gKgotICog
ICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIE15SGFuZGxlckRhdGEuCi0gKiAgIGhhbmRsZXJz
LT5TZXRJbnQzMkhhbmRsZXIoZjEsIFVwYkJpbmQoT25WYWx1ZTEsIG5ldyBNeUhhbmRsZXJEYXRh
KC4uLikpKTsKLSAqICAgaGFuZGxlcnMtPlNldEludDMySGFuZGxlcihmMiwgVXBiTWFrZUhhbmRs
ZXIoT25WYWx1ZTIpKTsKLSAqICAgaGFuZGxlcnMtPlNldEludDMySGFuZGxlcihmMSwgVXBiTWFr
ZUhhbmRsZXIoT25WYWx1ZTMpKTsKLSAqICAgaGFuZGxlcnMtPlNldEludDMySGFuZGxlcihmMiwg
VXBiTWFrZUhhbmRsZXIoJk15Q2xvc3VyZTo6T25WYWx1ZSkpOwotICovCi0KLSNpZmRlZiBVUEJf
Q1hYMTEKLQotLyogSW4gQysrMTEsIHRoZSAidGVtcGxhdGUiIGRpc2FtYmlndWF0b3IgY2FuIGFw
cGVhciBldmVuIG91dHNpZGUgdGVtcGxhdGVzLAotICogc28gYWxsIGNhbGxzIGNhbiBzYWZlbHkg
dXNlIHRoaXMgcGFpciBvZiBtYWNyb3MuICovCi0KLSNkZWZpbmUgVXBiTWFrZUhhbmRsZXIoZikg
dXBiOjpNYXRjaEZ1bmMoZikudGVtcGxhdGUgR2V0RnVuYzxmPigpCi0KLS8qIFdlIGhhdmUgdG8g
YmUgY2FyZWZ1bCB0byBvbmx5IGV2YWx1YXRlICJkIiBvbmNlLiAqLwotI2RlZmluZSBVcGJCaW5k
KGYsIGQpIHVwYjo6TWF0Y2hGdW5jKGYpLnRlbXBsYXRlIEdldEZ1bmM8Zj4oKGQpKQotCi0jZWxz
ZQotCi0vKiBQcmlvciB0byBDKysxMSwgdGhlICJ0ZW1wbGF0ZSIgZGlzYW1iaWd1YXRvciBtYXkg
b25seSBhcHBlYXIgaW5zaWRlIGEKLSAqIHRlbXBsYXRlLCBzbyB0aGUgcmVndWxhciBtYWNybyBt
dXN0IG5vdCB1c2UgInRlbXBsYXRlIiAqLwotCi0jZGVmaW5lIFVwYk1ha2VIYW5kbGVyKGYpIHVw
Yjo6TWF0Y2hGdW5jKGYpLkdldEZ1bmM8Zj4oKQotCi0jZGVmaW5lIFVwYkJpbmQoZiwgZCkgdXBi
OjpNYXRjaEZ1bmMoZikuR2V0RnVuYzxmPigoZCkpCi0KLSNlbmRpZiAgLyogVVBCX0NYWDExICov
Ci0KLS8qIFRoaXMgbWFjcm8gbXVzdCBiZSB1c2VkIGluIEMrKzk4IGZvciBjYWxscyBmcm9tIGlu
c2lkZSBhIHRlbXBsYXRlLiAgQnV0IHdlCi0gKiBkZWZpbmUgdGhpcyB2YXJpYW50IGluIGFsbCBj
YXNlczsgY29kZSB0aGF0IHdhbnRzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBib3RoCi0gKiBDKys5
OCBhbmQgQysrMTEgc2hvdWxkIGFsd2F5cyB1c2UgdGhpcyBtYWNybyB3aGVuIGNhbGxpbmcgZnJv
bSBhIHRlbXBsYXRlLiAqLwotI2RlZmluZSBVcGJNYWtlSGFuZGxlclQoZikgdXBiOjpNYXRjaEZ1
bmMoZikudGVtcGxhdGUgR2V0RnVuYzxmPigpCi0KLS8qIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCB0
byBvbmx5IGV2YWx1YXRlICJkIiBvbmNlLiAqLwotI2RlZmluZSBVcGJCaW5kVChmLCBkKSB1cGI6
Ok1hdGNoRnVuYyhmKS50ZW1wbGF0ZSBHZXRGdW5jPGY+KChkKSkKLQotLyogSGFuZGxlcjogYSBz
dHJ1Y3QgdGhhdCBjb250YWlucyB0aGUgKGhhbmRsZXIsIGRhdGEsIGRlbGV0ZXIpIHR1cGxlIHRo
YXQgaXMKLSAqIHVzZWQgdG8gcmVnaXN0ZXIgYWxsIGhhbmRsZXJzLiAgVXNlcnMgY2FuIE1ha2Uo
KSB0aGVzZSBkaXJlY3RseSBidXQgaXQncwotICogbW9yZSBjb252ZW5pZW50IHRvIHVzZSB0aGUg
VXBiTWFrZUhhbmRsZXIvVXBiQmluZCBtYWNyb3MgYWJvdmUuICovCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY2xhc3MgSGFuZGxlciB7Ci0gcHVibGljOgotICAvKiBUaGUgdW5kZXJseWluZywgaGFuZGxl
ciBmdW5jdGlvbiBzaWduYXR1cmUgdGhhdCB1cGIgdXNlcyBpbnRlcm5hbGx5LiAqLwotICB0eXBl
ZGVmIFQgRnVuY1B0cjsKLQotICAvKiBJbnRlbnRpb25hbGx5IGltcGxpY2l0LiAqLwotICB0ZW1w
bGF0ZSA8Y2xhc3MgRj4gSGFuZGxlcihGIGZ1bmMpOwotICB+SGFuZGxlcigpOwotCi0gcHJpdmF0
ZToKLSAgdm9pZCBBZGRDbGVhbnVwKEhhbmRsZXJzKiBoKSBjb25zdCB7Ci0gICAgaWYgKGNsZWFu
dXBfZnVuY18pIHsKLSAgICAgIGJvb2wgb2sgPSBoLT5BZGRDbGVhbnVwKGNsZWFudXBfZGF0YV8s
IGNsZWFudXBfZnVuY18pOwotICAgICAgVVBCX0FTU0VSVF9WQVIob2ssIG9rKTsKLSAgICB9Ci0g
IH0KLQotICBVUEJfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEhhbmRsZXIpCi0gIGZyaWVuZCBj
bGFzcyBIYW5kbGVyczsKLSAgRnVuY1B0ciBoYW5kbGVyXzsKLSAgbXV0YWJsZSBIYW5kbGVyQXR0
cmlidXRlcyBhdHRyXzsKLSAgbXV0YWJsZSBib29sIHJlZ2lzdGVyZWRfOwotICB2b2lkICpjbGVh
bnVwX2RhdGFfOwotICB1cGJfaGFuZGxlcmZyZWUgKmNsZWFudXBfZnVuY187Ci19OwotCi19ICAv
KiBuYW1lc3BhY2UgdXBiICovCi0KLSNlbmRpZiAgLyogX19jcGx1c3BsdXMgKi8KLQotVVBCX0JF
R0lOX0VYVEVSTl9DCi0KLS8qIE5hdGl2ZSBDIEFQSS4gKi8KLQotLyogSGFuZGxlciBmdW5jdGlv
biB0eXBlZGVmcy4gKi8KLXR5cGVkZWYgYm9vbCB1cGJfc3RhcnRtc2dfaGFuZGxlcmZ1bmModm9p
ZCAqYywgY29uc3Qgdm9pZCopOwotdHlwZWRlZiBib29sIHVwYl9lbmRtc2dfaGFuZGxlcmZ1bmMo
dm9pZCAqYywgY29uc3Qgdm9pZCAqLCB1cGJfc3RhdHVzICpzdGF0dXMpOwotdHlwZWRlZiB2b2lk
KiB1cGJfc3RhcnRmaWVsZF9oYW5kbGVyZnVuYyh2b2lkICpjLCBjb25zdCB2b2lkICpoZCk7Ci10
eXBlZGVmIGJvb2wgdXBiX2VuZGZpZWxkX2hhbmRsZXJmdW5jKHZvaWQgKmMsIGNvbnN0IHZvaWQg
KmhkKTsKLXR5cGVkZWYgYm9vbCB1cGJfaW50MzJfaGFuZGxlcmZ1bmModm9pZCAqYywgY29uc3Qg
dm9pZCAqaGQsIGludDMyX3QgdmFsKTsKLXR5cGVkZWYgYm9vbCB1cGJfaW50NjRfaGFuZGxlcmZ1
bmModm9pZCAqYywgY29uc3Qgdm9pZCAqaGQsIGludDY0X3QgdmFsKTsKLXR5cGVkZWYgYm9vbCB1
cGJfdWludDMyX2hhbmRsZXJmdW5jKHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhkLCB1aW50MzJfdCB2
YWwpOwotdHlwZWRlZiBib29sIHVwYl91aW50NjRfaGFuZGxlcmZ1bmModm9pZCAqYywgY29uc3Qg
dm9pZCAqaGQsIHVpbnQ2NF90IHZhbCk7Ci10eXBlZGVmIGJvb2wgdXBiX2Zsb2F0X2hhbmRsZXJm
dW5jKHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhkLCBmbG9hdCB2YWwpOwotdHlwZWRlZiBib29sIHVw
Yl9kb3VibGVfaGFuZGxlcmZ1bmModm9pZCAqYywgY29uc3Qgdm9pZCAqaGQsIGRvdWJsZSB2YWwp
OwotdHlwZWRlZiBib29sIHVwYl9ib29sX2hhbmRsZXJmdW5jKHZvaWQgKmMsIGNvbnN0IHZvaWQg
KmhkLCBib29sIHZhbCk7Ci10eXBlZGVmIHZvaWQgKnVwYl9zdGFydHN0cl9oYW5kbGVyZnVuYyh2
b2lkICpjLCBjb25zdCB2b2lkICpoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBzaXplX2hpbnQpOwotdHlwZWRlZiBzaXplX3QgdXBiX3N0cmluZ19oYW5k
bGVyZnVuYyh2b2lkICpjLCBjb25zdCB2b2lkICpoZCwgY29uc3QgY2hhciAqYnVmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiwgY29uc3QgdXBiX2J1Zmhh
bmRsZSogaGFuZGxlKTsKLQotLyogdXBiX2J1ZmhhbmRsZSAqLwotc2l6ZV90IHVwYl9idWZoYW5k
bGVfb2Jqb2ZzKGNvbnN0IHVwYl9idWZoYW5kbGUgKmgpOwotCi0vKiB1cGJfaGFuZGxlcmF0dHIg
Ki8KLXZvaWQgdXBiX2hhbmRsZXJhdHRyX2luaXQodXBiX2hhbmRsZXJhdHRyICphdHRyKTsKLXZv
aWQgdXBiX2hhbmRsZXJhdHRyX3VuaW5pdCh1cGJfaGFuZGxlcmF0dHIgKmF0dHIpOwotCi1ib29s
IHVwYl9oYW5kbGVyYXR0cl9zZXRoYW5kbGVyZGF0YSh1cGJfaGFuZGxlcmF0dHIgKmF0dHIsIGNv
bnN0IHZvaWQgKmhkKTsKLWJvb2wgdXBiX2hhbmRsZXJhdHRyX3NldGNsb3N1cmV0eXBlKHVwYl9o
YW5kbGVyYXR0ciAqYXR0ciwgY29uc3Qgdm9pZCAqdHlwZSk7Ci1jb25zdCB2b2lkICp1cGJfaGFu
ZGxlcmF0dHJfY2xvc3VyZXR5cGUoY29uc3QgdXBiX2hhbmRsZXJhdHRyICphdHRyKTsKLWJvb2wg
dXBiX2hhbmRsZXJhdHRyX3NldHJldHVybmNsb3N1cmV0eXBlKHVwYl9oYW5kbGVyYXR0ciAqYXR0
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg
KnR5cGUpOwotY29uc3Qgdm9pZCAqdXBiX2hhbmRsZXJhdHRyX3JldHVybmNsb3N1cmV0eXBlKGNv
bnN0IHVwYl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVyYXR0cl9zZXRhbHdh
eXNvayh1cGJfaGFuZGxlcmF0dHIgKmF0dHIsIGJvb2wgYWx3YXlzb2spOwotYm9vbCB1cGJfaGFu
ZGxlcmF0dHJfYWx3YXlzb2soY29uc3QgdXBiX2hhbmRsZXJhdHRyICphdHRyKTsKLQotVVBCX0lO
TElORSBjb25zdCB2b2lkICp1cGJfaGFuZGxlcmF0dHJfaGFuZGxlcmRhdGEoCi0gICAgY29uc3Qg
dXBiX2hhbmRsZXJhdHRyICphdHRyKSB7Ci0gIHJldHVybiBhdHRyLT5oYW5kbGVyX2RhdGFfOwot
fQotCi0vKiB1cGJfaGFuZGxlcnMgKi8KLXR5cGVkZWYgdm9pZCB1cGJfaGFuZGxlcnNfY2FsbGJh
Y2soY29uc3Qgdm9pZCAqY2xvc3VyZSwgdXBiX2hhbmRsZXJzICpoKTsKLXVwYl9oYW5kbGVycyAq
dXBiX2hhbmRsZXJzX25ldyhjb25zdCB1cGJfbXNnZGVmICptLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm93bmVyKTsKLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBi
X2hhbmRsZXJzX25ld2Zyb3plbihjb25zdCB1cGJfbXNnZGVmICptLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm93bmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVyc19jYWxsYmFjayAq
Y2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdm9pZCAqY2xvc3VyZSk7Ci0KLS8qIEluY2x1ZGUgcmVmY291bnRlZCBtZXRob2RzIGxpa2Ug
dXBiX2hhbmRsZXJzX3JlZigpLiAqLwotVVBCX1JFRkNPVU5URURfQ01FVEhPRFModXBiX2hhbmRs
ZXJzLCB1cGJfaGFuZGxlcnNfdXBjYXN0KQotCi1jb25zdCB1cGJfc3RhdHVzICp1cGJfaGFuZGxl
cnNfc3RhdHVzKHVwYl9oYW5kbGVycyAqaCk7Ci12b2lkIHVwYl9oYW5kbGVyc19jbGVhcmVycih1
cGJfaGFuZGxlcnMgKmgpOwotY29uc3QgdXBiX21zZ2RlZiAqdXBiX2hhbmRsZXJzX21zZ2RlZihj
b25zdCB1cGJfaGFuZGxlcnMgKmgpOwotYm9vbCB1cGJfaGFuZGxlcnNfYWRkY2xlYW51cCh1cGJf
aGFuZGxlcnMgKmgsIHZvaWQgKnAsIHVwYl9oYW5kbGVyZnJlZSAqaGZyZWUpOwotCi1ib29sIHVw
Yl9oYW5kbGVyc19zZXRzdGFydG1zZyh1cGJfaGFuZGxlcnMgKmgsIHVwYl9zdGFydG1zZ19oYW5k
bGVyZnVuYyAqZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVy
YXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVyc19zZXRlbmRtc2codXBiX2hhbmRsZXJzICpo
LCB1cGJfZW5kbXNnX2hhbmRsZXJmdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVyc19zZXRpbnQzMih1
cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwYl9pbnQzMl9oYW5kbGVyZnVuYyAqZnVuYywgdXBiX2hhbmRsZXJhdHRyICph
dHRyKTsKLWJvb2wgdXBiX2hhbmRsZXJzX3NldGludDY0KHVwYl9oYW5kbGVycyAqaCwgY29uc3Qg
dXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2ludDY0X2hh
bmRsZXJmdW5jICpmdW5jLCB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpOwotYm9vbCB1cGJfaGFuZGxl
cnNfc2V0dWludDMyKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl91aW50MzJfaGFuZGxlcmZ1bmMgKmZ1bmMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJhdHRyICphdHRyKTsKLWJvb2wg
dXBiX2hhbmRsZXJzX3NldHVpbnQ2NCh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRl
ZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfdWludDY0X2hhbmRsZXJmdW5j
ICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0
cik7Ci1ib29sIHVwYl9oYW5kbGVyc19zZXRmbG9hdCh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVw
Yl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9mbG9hdF9oYW5k
bGVyZnVuYyAqZnVuYywgdXBiX2hhbmRsZXJhdHRyICphdHRyKTsKLWJvb2wgdXBiX2hhbmRsZXJz
X3NldGRvdWJsZSh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cGJfZG91YmxlX2hhbmRsZXJmdW5jICpmdW5jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVw
Yl9oYW5kbGVyc19zZXRib29sKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpm
LAotICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfYm9vbF9oYW5kbGVyZnVuYyAqZnVuYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJhdHRyICphdHRyKTsKLWJvb2wg
dXBiX2hhbmRsZXJzX3NldHN0YXJ0c3RyKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxk
ZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXJ0c3RyX2hhbmRs
ZXJmdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJh
dHRyICphdHRyKTsKLWJvb2wgdXBiX2hhbmRsZXJzX3NldHN0cmluZyh1cGJfaGFuZGxlcnMgKmgs
IGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJf
c3RyaW5nX2hhbmRsZXJmdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVw
Yl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVyc19zZXRlbmRzdHIodXBiX2hh
bmRsZXJzICpoLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXBiX2VuZGZpZWxkX2hhbmRsZXJmdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVyc19zZXRz
dGFydHNlcSh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGFydGZpZWxkX2hhbmRsZXJmdW5jICpmdW5jLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJhdHRyICphdHRyKTsKLWJv
b2wgdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3VibXNnKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBi
X2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXJ0
ZmllbGRfaGFuZGxlcmZ1bmMgKmZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpOwotYm9vbCB1cGJfaGFuZGxlcnNfc2V0ZW5kc3VibXNn
KHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwYl9lbmRmaWVsZF9oYW5kbGVyZnVuYyAqZnVuYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpOwotYm9vbCB1cGJf
aGFuZGxlcnNfc2V0ZW5kc2VxKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpm
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9lbmRmaWVsZF9oYW5kbGVyZnVuYyAq
ZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxlcmF0dHIgKmF0dHIp
OwotCi1ib29sIHVwYl9oYW5kbGVyc19zZXRzdWJoYW5kbGVycyh1cGJfaGFuZGxlcnMgKmgsIGNv
bnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVwYl9oYW5kbGVycyAqc3ViKTsKLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBiX2hhbmRsZXJz
X2dldHN1YmhhbmRsZXJzKGNvbnN0IHVwYl9oYW5kbGVycyAqaCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1j
b25zdCB1cGJfaGFuZGxlcnMgKnVwYl9oYW5kbGVyc19nZXRzdWJoYW5kbGVyc19zZWwoY29uc3Qg
dXBiX2hhbmRsZXJzICpoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVwYl9zZWxlY3Rvcl90IHNlbCk7Ci0KLVVQQl9JTkxJTkUgdXBiX2Z1bmMg
KnVwYl9oYW5kbGVyc19nZXRoYW5kbGVyKGNvbnN0IHVwYl9oYW5kbGVycyAqaCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zZWxlY3Rvcl90IHMpIHsK
LSAgcmV0dXJuICh1cGJfZnVuYyAqKWgtPnRhYmxlW3NdLmZ1bmM7Ci19Ci0KLWJvb2wgdXBiX2hh
bmRsZXJzX2dldGF0dHIoY29uc3QgdXBiX2hhbmRsZXJzICpoLCB1cGJfc2VsZWN0b3JfdCBzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpOwotCi1VUEJf
SU5MSU5FIGNvbnN0IHZvaWQgKnVwYl9oYW5kbGVyc19nZXRoYW5kbGVyZGF0YShjb25zdCB1cGJf
aGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGJfc2VsZWN0b3JfdCBzKSB7Ci0gIHJldHVybiB1cGJfaGFuZGxlcmF0dHJfaGFu
ZGxlcmRhdGEoJmgtPnRhYmxlW3NdLmF0dHIpOwotfQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQot
LyogSGFuZGxlciB0eXBlcyBmb3Igc2luZ2xlIGZpZWxkcy4KLSAqIFJpZ2h0IG5vdyB3ZSBvbmx5
IGhhdmUgb25lIGZvciBUWVBFX0JZVEVTIGJ1dCBvbmVzIGZvciBvdGhlciB0eXBlcwotICogc2hv
dWxkIGZvbGxvdy4KLSAqCi0gKiBUaGVzZSBmb2xsb3cgdGhlIHNhbWUgaGFuZGxlcnMgcHJvdG9j
b2wgZm9yIGZpZWxkcyBvZiBhIG1lc3NhZ2UuICovCi1jbGFzcyB1cGI6OkJ5dGVzSGFuZGxlciB7
Ci0gcHVibGljOgotICBCeXRlc0hhbmRsZXIoKTsKLSAgfkJ5dGVzSGFuZGxlcigpOwotI2Vsc2UK
LXN0cnVjdCB1cGJfYnl0ZXNoYW5kbGVyIHsKLSNlbmRpZgotICB1cGJfaGFuZGxlcnNfdGFiZW50
IHRhYmxlWzNdOwotfTsKLQotdm9pZCB1cGJfYnl0ZXNoYW5kbGVyX2luaXQodXBiX2J5dGVzaGFu
ZGxlciAqaCk7Ci0KLS8qIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0ICJkIiBvdXRsaXZlcyB0aGUg
aGFuZGxlcnMuCi0gKiBUT0RPKGhhYmVybWFuKTogc2hvdWxkIHRoaXMgaGF2ZSBhICJmcmVlemUi
IG9wZXJhdGlvbj8gIEl0J3Mgbm90IG5lY2Vzc2FyeQotICogZm9yIG1lbW9yeSBtYW5hZ2VtZW50
LCBidXQgY291bGQgYmUgdXNlZnVsIHRvIGZvcmNlIGltbXV0YWJpbGl0eSBhbmQgcHJvdmlkZQot
ICogYSBjb252ZW5pZW50IG1vbWVudCB0byB2ZXJpZnkgdGhhdCBhbGwgcmVnaXN0cmF0aW9uIHN1
Y2NlZWRlZC4gKi8KLWJvb2wgdXBiX2J5dGVzaGFuZGxlcl9zZXRzdGFydHN0cih1cGJfYnl0ZXNo
YW5kbGVyICpoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGFydHN0
cl9oYW5kbGVyZnVuYyAqZnVuYywgdm9pZCAqZCk7Ci1ib29sIHVwYl9ieXRlc2hhbmRsZXJfc2V0
c3RyaW5nKHVwYl9ieXRlc2hhbmRsZXIgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwYl9zdHJpbmdfaGFuZGxlcmZ1bmMgKmZ1bmMsIHZvaWQgKmQpOwotYm9vbCB1cGJfYnl0
ZXNoYW5kbGVyX3NldGVuZHN0cih1cGJfYnl0ZXNoYW5kbGVyICpoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cGJfZW5kZmllbGRfaGFuZGxlcmZ1bmMgKmZ1bmMsIHZvaWQgKmQp
OwotCi0vKiAiU3RhdGljIiBtZXRob2RzICovCi1ib29sIHVwYl9oYW5kbGVyc19mcmVlemUodXBi
X2hhbmRsZXJzICpjb25zdCAqaGFuZGxlcnMsIGludCBuLCB1cGJfc3RhdHVzICpzKTsKLXVwYl9o
YW5kbGVydHlwZV90IHVwYl9oYW5kbGVyc19nZXRwcmltaXRpdmVoYW5kbGVydHlwZShjb25zdCB1
cGJfZmllbGRkZWYgKmYpOwotYm9vbCB1cGJfaGFuZGxlcnNfZ2V0c2VsZWN0b3IoY29uc3QgdXBi
X2ZpZWxkZGVmICpmLCB1cGJfaGFuZGxlcnR5cGVfdCB0eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXBiX3NlbGVjdG9yX3QgKnMpOwotVVBCX0lOTElORSB1cGJfc2VsZWN0b3Jf
dCB1cGJfaGFuZGxlcnNfZ2V0ZW5kc2VsZWN0b3IodXBiX3NlbGVjdG9yX3Qgc3RhcnQpIHsKLSAg
cmV0dXJuIHN0YXJ0ICsgMTsKLX0KLQotLyogSW50ZXJuYWwtb25seS4gKi8KLXVpbnQzMl90IHVw
Yl9oYW5kbGVyc19zZWxlY3RvcmJhc2VvZmZzZXQoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLXVp
bnQzMl90IHVwYl9oYW5kbGVyc19zZWxlY3RvcmNvdW50KGNvbnN0IHVwYl9maWVsZGRlZiAqZik7
Ci0KLVVQQl9FTkRfRVhURVJOX0MKLQotLyoKLSoqIElubGluZSBkZWZpbml0aW9ucyBmb3IgaGFu
ZGxlcnMuaCwgd2hpY2ggYXJlIHBhcnRpY3VsYXJseSBsb25nIGFuZCBhIGJpdAotKiogdHJpY2t5
LgotKi8KLQotI2lmbmRlZiBVUEJfSEFORExFUlNfSU5MX0hfCi0jZGVmaW5lIFVQQl9IQU5ETEVS
U19JTkxfSF8KLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotCi0vKiBDIGlubGluZSBtZXRob2RzLiAq
LwotCi0vKiB1cGJfYnVmaGFuZGxlICovCi1VUEJfSU5MSU5FIHZvaWQgdXBiX2J1ZmhhbmRsZV9p
bml0KHVwYl9idWZoYW5kbGUgKmgpIHsKLSAgaC0+b2JqXyA9IE5VTEw7Ci0gIGgtPm9ianR5cGVf
ID0gTlVMTDsKLSAgaC0+YnVmXyA9IE5VTEw7Ci0gIGgtPm9iam9mc18gPSAwOwotfQotVVBCX0lO
TElORSB2b2lkIHVwYl9idWZoYW5kbGVfdW5pbml0KHVwYl9idWZoYW5kbGUgKmgpIHsKLSAgVVBC
X1VOVVNFRChoKTsKLX0KLVVQQl9JTkxJTkUgdm9pZCB1cGJfYnVmaGFuZGxlX3NldG9iaih1cGJf
YnVmaGFuZGxlICpoLCBjb25zdCB2b2lkICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqdHlwZSkgewotICBoLT5vYmpfID0gb2JqOwotICBoLT5v
Ymp0eXBlXyA9IHR5cGU7Ci19Ci1VUEJfSU5MSU5FIHZvaWQgdXBiX2J1ZmhhbmRsZV9zZXRidWYo
dXBiX2J1ZmhhbmRsZSAqaCwgY29uc3QgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBvZnMpIHsKLSAgaC0+YnVmXyA9IGJ1ZjsKLSAgaC0+b2Jq
b2ZzXyA9IG9mczsKLX0KLVVQQl9JTkxJTkUgY29uc3Qgdm9pZCAqdXBiX2J1ZmhhbmRsZV9vYmoo
Y29uc3QgdXBiX2J1ZmhhbmRsZSAqaCkgewotICByZXR1cm4gaC0+b2JqXzsKLX0KLVVQQl9JTkxJ
TkUgY29uc3Qgdm9pZCAqdXBiX2J1ZmhhbmRsZV9vYmp0eXBlKGNvbnN0IHVwYl9idWZoYW5kbGUg
KmgpIHsKLSAgcmV0dXJuIGgtPm9ianR5cGVfOwotfQotVVBCX0lOTElORSBjb25zdCBjaGFyICp1
cGJfYnVmaGFuZGxlX2J1Zihjb25zdCB1cGJfYnVmaGFuZGxlICpoKSB7Ci0gIHJldHVybiBoLT5i
dWZfOwotfQotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBUeXBlIGRldGVjdGlvbiBhbmQg
dHlwZWRlZnMgZm9yIGludGVnZXIgdHlwZXMuCi0gKiBGb3IgcGxhdGZvcm1zIHdoZXJlIHRoZXJl
IGFyZSBtdWx0aXBsZSAzMi1iaXQgb3IgNjQtYml0IHR5cGVzLCB3ZSBuZWVkIHRvIGJlCi0gKiBh
YmxlIHRvIGVudW1lcmF0ZSB0aGVtIHNvIHdlIGNhbiBwcm9wZXJseSBjcmVhdGUgb3ZlcmxvYWRz
IGZvciBhbGwgdmFyaWFudHMuCi0gKgotICogSWYgYW55IHBsYXRmb3JtIGV4aXN0ZWQgd2hlcmUg
dGhlcmUgd2VyZSB0aHJlZSBpbnRlZ2VyIHR5cGVzIHdpdGggdGhlIHNhbWUKLSAqIHNpemUsIHRo
aXMgd291bGQgaGF2ZSB0byBiZWNvbWUgbW9yZSBjb21wbGljYXRlZC4gIEZvciBleGFtcGxlLCBz
aG9ydCwgaW50LAotICogYW5kIGxvbmcgY291bGQgYWxsIGJlIDMyLWJpdHMuICBFdmVuIG1vcmUg
ZGlhYm9saWNhbGx5LCBzaG9ydCwgaW50LCBsb25nLAotICogYW5kIGxvbmcgbG9uZyBjb3VsZCBh
bGwgYmUgNjQgYml0cyBhbmQgc3RpbGwgYmUgc3RhbmRhcmQtY29tcGxpYW50LgotICogSG93ZXZl
ciwgZmV3IHBsYXRmb3JtcyBhcmUgdGhpcyBzdHJhbmdlLCBhbmQgaXQncyB1bmxpa2VseSB0aGF0
IHVwYiB3aWxsIGJlCi0gKiB1c2VkIG9uIHRoZSBzdHJhbmdlc3Qgb25lcy4gKi8KLQotLyogQ2Fu
J3QgY291bnQgb24gc3RkaW50LmggbGltaXRzIGxpa2UgSU5UMzJfTUFYLCBiZWNhdXNlIGluIEMr
KyB0aGVzZSBhcmUKLSAqIG9ubHkgZGVmaW5lZCB3aGVuIF9fU1REQ19MSU1JVF9NQUNST1MgYXJl
IGRlZmluZWQgYmVmb3JlIHRoZSAqZmlyc3QqIGluY2x1ZGUKLSAqIG9mIHN0ZGludC5oLiAgV2Ug
Y2FuJ3QgZ3VhcmFudGVlIHRoYXQgc29tZW9uZSBlbHNlIGRpZG4ndCBpbmNsdWRlIHRoZXNlIGZp
cnN0Ci0gKiB3aXRob3V0IGRlZmluaW5nIF9fU1REQ19MSU1JVF9NQUNST1MuICovCi0jZGVmaW5l
IFVQQl9JTlQzMl9NQVggMHg3ZmZmZmZmZkxMCi0jZGVmaW5lIFVQQl9JTlQzMl9NSU4gKC1VUEJf
SU5UMzJfTUFYIC0gMSkKLSNkZWZpbmUgVVBCX0lOVDY0X01BWCAweDdmZmZmZmZmZmZmZmZmZmZM
TAotI2RlZmluZSBVUEJfSU5UNjRfTUlOICgtVVBCX0lOVDY0X01BWCAtIDEpCi0KLSNpZiBJTlRf
TUFYID09IFVQQl9JTlQzMl9NQVggJiYgSU5UX01JTiA9PSBVUEJfSU5UMzJfTUlOCi0jZGVmaW5l
IFVQQl9JTlRfSVNfMzJCSVRTIDEKLSNlbmRpZgotCi0jaWYgTE9OR19NQVggPT0gVVBCX0lOVDMy
X01BWCAmJiBMT05HX01JTiA9PSBVUEJfSU5UMzJfTUlOCi0jZGVmaW5lIFVQQl9MT05HX0lTXzMy
QklUUyAxCi0jZW5kaWYKLQotI2lmIExPTkdfTUFYID09IFVQQl9JTlQ2NF9NQVggJiYgTE9OR19N
SU4gPT0gVVBCX0lOVDY0X01JTgotI2RlZmluZSBVUEJfTE9OR19JU182NEJJVFMgMQotI2VuZGlm
Ci0KLSNpZiBMTE9OR19NQVggPT0gVVBCX0lOVDY0X01BWCAmJiBMTE9OR19NSU4gPT0gVVBCX0lO
VDY0X01JTgotI2RlZmluZSBVUEJfTExPTkdfSVNfNjRCSVRTIDEKLSNlbmRpZgotCi0vKiBXZSB1
c2UgbWFjcm9zIGluc3RlYWQgb2YgdHlwZWRlZnMgc28gd2UgY2FuIHVuZGVmaW5lIHRoZW0gbGF0
ZXIgYW5kIGF2b2lkCi0gKiBsZWFraW5nIHRoZW0gb3V0c2lkZSB0aGlzIGhlYWRlciBmaWxlLiAq
LwotI2lmIFVQQl9JTlRfSVNfMzJCSVRTCi0jZGVmaW5lIFVQQl9JTlQzMl9UIGludAotI2RlZmlu
ZSBVUEJfVUlOVDMyX1QgdW5zaWduZWQgaW50Ci0KLSNpZiBVUEJfTE9OR19JU18zMkJJVFMKLSNk
ZWZpbmUgVVBCX1RXT18zMkJJVF9UWVBFUyAxCi0jZGVmaW5lIFVQQl9JTlQzMkFMVF9UIGxvbmcK
LSNkZWZpbmUgVVBCX1VJTlQzMkFMVF9UIHVuc2lnbmVkIGxvbmcKLSNlbmRpZiAgLyogVVBCX0xP
TkdfSVNfMzJCSVRTICovCi0KLSNlbGlmIFVQQl9MT05HX0lTXzMyQklUUyAgLyogJiYgIVVQQl9J
TlRfSVNfMzJCSVRTICovCi0jZGVmaW5lIFVQQl9JTlQzMl9UIGxvbmcKLSNkZWZpbmUgVVBCX1VJ
TlQzMl9UIHVuc2lnbmVkIGxvbmcKLSNlbmRpZiAgLyogVVBCX0lOVF9JU18zMkJJVFMgKi8KLQot
Ci0jaWYgVVBCX0xPTkdfSVNfNjRCSVRTCi0jZGVmaW5lIFVQQl9JTlQ2NF9UIGxvbmcKLSNkZWZp
bmUgVVBCX1VJTlQ2NF9UIHVuc2lnbmVkIGxvbmcKLQotI2lmIFVQQl9MTE9OR19JU182NEJJVFMK
LSNkZWZpbmUgVVBCX1RXT182NEJJVF9UWVBFUyAxCi0jZGVmaW5lIFVQQl9JTlQ2NEFMVF9UIGxv
bmcgbG9uZwotI2RlZmluZSBVUEJfVUlOVDY0QUxUX1QgdW5zaWduZWQgbG9uZyBsb25nCi0jZW5k
aWYgIC8qIFVQQl9MTE9OR19JU182NEJJVFMgKi8KLQotI2VsaWYgVVBCX0xMT05HX0lTXzY0QklU
UyAgLyogJiYgIVVQQl9MT05HX0lTXzY0QklUUyAqLwotI2RlZmluZSBVUEJfSU5UNjRfVCBsb25n
IGxvbmcKLSNkZWZpbmUgVVBCX1VJTlQ2NF9UIHVuc2lnbmVkIGxvbmcgbG9uZwotI2VuZGlmICAv
KiBVUEJfTE9OR19JU182NEJJVFMgKi8KLQotI3VuZGVmIFVQQl9JTlQzMl9NQVgKLSN1bmRlZiBV
UEJfSU5UMzJfTUlOCi0jdW5kZWYgVVBCX0lOVDY0X01BWAotI3VuZGVmIFVQQl9JTlQ2NF9NSU4K
LSN1bmRlZiBVUEJfSU5UX0lTXzMyQklUUwotI3VuZGVmIFVQQl9MT05HX0lTXzMyQklUUwotI3Vu
ZGVmIFVQQl9MT05HX0lTXzY0QklUUwotI3VuZGVmIFVQQl9MTE9OR19JU182NEJJVFMKLQotCi1u
YW1lc3BhY2UgdXBiIHsKLQotdHlwZWRlZiB2b2lkIENsZWFudXBGdW5jKHZvaWQgKnB0cik7Ci0K
LS8qIFRlbXBsYXRlIHRvIHJlbW92ZSAiY29uc3QiIGZyb20gImNvbnN0IFQqIiBhbmQganVzdCBy
ZXR1cm4gIlQqIi4KLSAqCi0gKiBXZSBkZWZpbmUgYSBub25zZW5zZSBkZWZhdWx0IGJlY2F1c2Ug
b3RoZXJ3aXNlIGl0IHdpbGwgZmFpbCB0byBpbnN0YW50aWF0ZSBhcwotICogYSBmdW5jdGlvbiBw
YXJhbWV0ZXIgdHlwZSBldmVuIGluIGNhc2VzIHdoZXJlIHdlIGRvbid0IGV4cGVjdCBhbnkgY2Fs
bGVyIHRvCi0gKiBhY3R1YWxseSBtYXRjaCB0aGUgb3ZlcmxvYWQuICovCi1jbGFzcyBDb3VsZG50
UmVtb3ZlQ29uc3Qge307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJlbW92ZV9jb25zdHB0
ciB7IHR5cGVkZWYgQ291bGRudFJlbW92ZUNvbnN0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IHJlbW92ZV9jb25zdHB0cjxjb25zdCBUICo+IHsgdHlwZWRlZiBUICp0eXBlOyB9
OwotCi0vKiBUZW1wbGF0ZSB0aGF0IHdlIHVzZSBiZWxvdyB0byByZW1vdmUgYSB0ZW1wbGF0ZSBz
cGVjaWFsaXphdGlvbiBmcm9tCi0gKiBjb25zaWRlcmF0aW9uIGlmIGl0IG1hdGNoZXMgYSBzcGVj
aWZpYyB0eXBlLiAqLwotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IHN0cnVjdCBkaXNhYmxl
X2lmX3NhbWUgeyB0eXBlZGVmIHZvaWQgVHlwZTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1
Y3QgZGlzYWJsZV9pZl9zYW1lPFQsIFQ+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gdm9pZCBE
ZWxldGVQb2ludGVyKHZvaWQgKnApIHsgZGVsZXRlIHN0YXRpY19jYXN0PFQ+KHApOyB9Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci1zdHJ1Y3QgRmlyc3RVbmxlc3NWb2lkT3JCb29s
IHsKLSAgdHlwZWRlZiBUMSB2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUMj4KLXN0cnVj
dCBGaXJzdFVubGVzc1ZvaWRPckJvb2w8dm9pZCwgVDI+IHsKLSAgdHlwZWRlZiBUMiB2YWx1ZTsK
LX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUMj4KLXN0cnVjdCBGaXJzdFVubGVzc1ZvaWRPckJvb2w8
Ym9vbCwgVDI+IHsKLSAgdHlwZWRlZiBUMiB2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQs
IGNsYXNzIFU+Ci1zdHJ1Y3QgaXNfc2FtZSB7Ci0gIHN0YXRpYyBib29sIHZhbHVlOwotfTsKLQot
dGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19zYW1lPFQsIFQ+IHsKLSAgc3RhdGljIGJvb2wg
dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVPgotYm9vbCBpc19zYW1lPFQs
IFU+Ojp2YWx1ZSA9IGZhbHNlOwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotYm9vbCBpc19zYW1lPFQs
IFQ+Ojp2YWx1ZSA9IHRydWU7Ci0KLS8qIEZ1bmNJbmZvICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEluZm8g
YWJvdXQgdGhlIHVzZXIncyBvcmlnaW5hbCwgcHJlLXdyYXBwZWQgZnVuY3Rpb24uICovCi10ZW1w
bGF0ZSA8Y2xhc3MgQywgY2xhc3MgUiA9IHZvaWQ+Ci1zdHJ1Y3QgRnVuY0luZm8gewotICAvKiBU
aGUgdHlwZSBvZiB0aGUgY2xvc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiB0YWtlcyAoaXRzIGZpcnN0
IHBhcmFtKS4gKi8KLSAgdHlwZWRlZiBDIENsb3N1cmU7Ci0KLSAgLyogVGhlIHJldHVybiB0eXBl
LiAqLwotICB0eXBlZGVmIFIgUmV0dXJuOwotfTsKLQotLyogRnVuYyAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
LQotLyogRnVuYzEsIEZ1bmMyLCBGdW5jMzogVGVtcGxhdGUgY2xhc3NlcyByZXByZXNlbnRpbmcg
YSBmdW5jdGlvbiBhbmQgaXRzCi0gKiBzaWduYXR1cmUuCi0gKgotICogU2luY2UgdGhlIGZ1bmN0
aW9uIGlzIGEgdGVtcGxhdGUgcGFyYW1ldGVyLCBjYWxsaW5nIHRoZSBmdW5jdGlvbiBjYW4gYmUK
LSAqIGlubGluZWQgYXQgY29tcGlsZS10aW1lIGFuZCBkb2VzIG5vdCByZXF1aXJlIGEgZnVuY3Rp
b24gcG9pbnRlciBhdCBydW50aW1lLgotICogVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgYm91bmQg
dG8gYSBoYW5kbGVyIGRhdGEgc28gaGF2ZSBubyBkYXRhIG9yIGNsZWFudXAKLSAqIGhhbmRsZXIu
ICovCi1zdHJ1Y3QgVW5ib3VuZEZ1bmMgewotICBDbGVhbnVwRnVuYyAqR2V0Q2xlYW51cCgpIHsg
cmV0dXJuIE5VTEw7IH0KLSAgdm9pZCAqR2V0RGF0YSgpIHsgcmV0dXJuIE5VTEw7IH0KLX07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgUiBGKFAxKSwgY2xhc3MgST4KLXN0cnVjdCBG
dW5jMSA6IHB1YmxpYyBVbmJvdW5kRnVuYyB7Ci0gIHR5cGVkZWYgUiBSZXR1cm47Ci0gIHR5cGVk
ZWYgSSBGdW5jSW5mbzsKLSAgc3RhdGljIFIgQ2FsbChQMSBwMSkgeyByZXR1cm4gRihwMSk7IH0K
LX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIFIgRihQMSwgUDIp
LCBjbGFzcyBJPgotc3RydWN0IEZ1bmMyIDogcHVibGljIFVuYm91bmRGdW5jIHsKLSAgdHlwZWRl
ZiBSIFJldHVybjsKLSAgdHlwZWRlZiBJIEZ1bmNJbmZvOwotICBzdGF0aWMgUiBDYWxsKFAxIHAx
LCBQMiBwMikgeyByZXR1cm4gRihwMSwgcDIpOyB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgUiBGKFAxLCBQMiwgUDMpLCBjbGFzcyBJPgot
c3RydWN0IEZ1bmMzIDogcHVibGljIFVuYm91bmRGdW5jIHsKLSAgdHlwZWRlZiBSIFJldHVybjsK
LSAgdHlwZWRlZiBJIEZ1bmNJbmZvOwotICBzdGF0aWMgUiBDYWxsKFAxIHAxLCBQMiBwMiwgUDMg
cDMpIHsgcmV0dXJuIEYocDEsIHAyLCBwMyk7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBj
bGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQNCwgUiBGKFAxLCBQMiwgUDMsIFA0
KSwKLSAgICAgICAgICBjbGFzcyBJPgotc3RydWN0IEZ1bmM0IDogcHVibGljIFVuYm91bmRGdW5j
IHsKLSAgdHlwZWRlZiBSIFJldHVybjsKLSAgdHlwZWRlZiBJIEZ1bmNJbmZvOwotICBzdGF0aWMg
UiBDYWxsKFAxIHAxLCBQMiBwMiwgUDMgcDMsIFA0IHA0KSB7IHJldHVybiBGKHAxLCBwMiwgcDMs
IHA0KTsgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xh
c3MgUDMsIGNsYXNzIFA0LCBjbGFzcyBQNSwKLSAgICAgICAgICBSIEYoUDEsIFAyLCBQMywgUDQs
IFA1KSwgY2xhc3MgST4KLXN0cnVjdCBGdW5jNSA6IHB1YmxpYyBVbmJvdW5kRnVuYyB7Ci0gIHR5
cGVkZWYgUiBSZXR1cm47Ci0gIHR5cGVkZWYgSSBGdW5jSW5mbzsKLSAgc3RhdGljIFIgQ2FsbChQ
MSBwMSwgUDIgcDIsIFAzIHAzLCBQNCBwNCwgUDUgcDUpIHsKLSAgICByZXR1cm4gRihwMSwgcDIs
IHAzLCBwNCwgcDUpOwotICB9Ci19OwotCi0vKiBCb3VuZEZ1bmMgKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBC
b3VuZEZ1bmMyLCBCb3VuZEZ1bmMzOiBMaWtlIEZ1bmMyL0Z1bmMzIGV4Y2VwdCBhbHNvIGNvbnRh
aW5zIGEgdmFsdWUgdGhhdAotICogc2hhbGwgYmUgYm91bmQgdG8gdGhlIGZ1bmN0aW9uJ3Mgc2Vj
b25kIHBhcmFtZXRlci4KLSAqIAotICogTm90ZSB0aGF0IHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlz
IGEgY29uc3QgcG9pbnRlciwgYnV0IG91ciBzdG9yZWQgYm91bmQgdmFsdWUKLSAqIGlzIG5vbi1j
b25zdCBzbyB3ZSBjYW4gZnJlZSBpdCB3aGVuIHRoZSBoYW5kbGVycyBhcmUgZGVzdHJveWVkLiAq
LwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgQm91bmRGdW5jIHsKLSAgdHlwZWRlZiB0eXBl
bmFtZSByZW1vdmVfY29uc3RwdHI8VD46OnR5cGUgTXV0YWJsZVAyOwotICBleHBsaWNpdCBCb3Vu
ZEZ1bmMoTXV0YWJsZVAyIGRhdGFfKSA6IGRhdGEoZGF0YV8pIHt9Ci0gIENsZWFudXBGdW5jICpH
ZXRDbGVhbnVwKCkgeyByZXR1cm4gJkRlbGV0ZVBvaW50ZXI8TXV0YWJsZVAyPjsgfQotICBNdXRh
YmxlUDIgR2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KLSAgTXV0YWJsZVAyIGRhdGE7Ci19Owot
Ci10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBSIEYoUDEsIFAyKSwgY2xh
c3MgST4KLXN0cnVjdCBCb3VuZEZ1bmMyIDogcHVibGljIEJvdW5kRnVuYzxQMj4gewotICB0eXBl
ZGVmIEJvdW5kRnVuYzxQMj4gQmFzZTsKLSAgdHlwZWRlZiBJIEZ1bmNJbmZvOwotICBleHBsaWNp
dCBCb3VuZEZ1bmMyKHR5cGVuYW1lIEJhc2U6Ok11dGFibGVQMiBhcmcpIDogQmFzZShhcmcpIHt9
Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywg
UiBGKFAxLCBQMiwgUDMpLCBjbGFzcyBJPgotc3RydWN0IEJvdW5kRnVuYzMgOiBwdWJsaWMgQm91
bmRGdW5jPFAyPiB7Ci0gIHR5cGVkZWYgQm91bmRGdW5jPFAyPiBCYXNlOwotICB0eXBlZGVmIEkg
RnVuY0luZm87Ci0gIGV4cGxpY2l0IEJvdW5kRnVuYzModHlwZW5hbWUgQmFzZTo6TXV0YWJsZVAy
IGFyZykgOiBCYXNlKGFyZykge30KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwg
Y2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQNCwgUiBGKFAxLCBQMiwgUDMsIFA0KSwKLSAgICAg
ICAgICBjbGFzcyBJPgotc3RydWN0IEJvdW5kRnVuYzQgOiBwdWJsaWMgQm91bmRGdW5jPFAyPiB7
Ci0gIHR5cGVkZWYgQm91bmRGdW5jPFAyPiBCYXNlOwotICB0eXBlZGVmIEkgRnVuY0luZm87Ci0g
IGV4cGxpY2l0IEJvdW5kRnVuYzQodHlwZW5hbWUgQmFzZTo6TXV0YWJsZVAyIGFyZykgOiBCYXNl
KGFyZykge30KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNs
YXNzIFAzLCBjbGFzcyBQNCwgY2xhc3MgUDUsCi0gICAgICAgICAgUiBGKFAxLCBQMiwgUDMsIFA0
LCBQNSksIGNsYXNzIEk+Ci1zdHJ1Y3QgQm91bmRGdW5jNSA6IHB1YmxpYyBCb3VuZEZ1bmM8UDI+
IHsKLSAgdHlwZWRlZiBCb3VuZEZ1bmM8UDI+IEJhc2U7Ci0gIHR5cGVkZWYgSSBGdW5jSW5mbzsK
LSAgZXhwbGljaXQgQm91bmRGdW5jNSh0eXBlbmFtZSBCYXNlOjpNdXRhYmxlUDIgYXJnKSA6IEJh
c2UoYXJnKSB7fQotfTsKLQotLyogRnVuY1NpZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRnVuY1NpZzEs
IEZ1bmNTaWcyLCBGdW5jU2lnMzogdGVtcGxhdGUgY2xhc3NlcyByZWZsZWN0aW5nIGEgZnVuY3Rp
b24KLSAqICpzaWduYXR1cmUqLCBidXQgd2l0aG91dCBhIHNwZWNpZmljIGZ1bmN0aW9uIGF0dGFj
aGVkLgotICoKLSAqIFRoZXNlIGNsYXNzZXMgY29udGFpbiBtZW1iZXIgZnVuY3Rpb25zIHRoYXQg
Y2FuIGJlIGludm9rZWQgd2l0aCBhCi0gKiBzcGVjaWZpYyBmdW5jdGlvbiB0byByZXR1cm4gYSBG
dW5jL0JvdW5kRnVuYyBjbGFzcy4gKi8KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMT4KLXN0
cnVjdCBGdW5jU2lnMSB7Ci0gIHRlbXBsYXRlIDxSIEYoUDEpPgotICBGdW5jMTxSLCBQMSwgRiwg
RnVuY0luZm88UDEsIFI+ID4gR2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVuYzE8UiwgUDEsIEYs
IEZ1bmNJbmZvPFAxLCBSPiA+KCk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFz
cyBQMSwgY2xhc3MgUDI+Ci1zdHJ1Y3QgRnVuY1NpZzIgewotICB0ZW1wbGF0ZSA8UiBGKFAxLCBQ
Mik+Ci0gIEZ1bmMyPFIsIFAxLCBQMiwgRiwgRnVuY0luZm88UDEsIFI+ID4gR2V0RnVuYygpIHsK
LSAgICByZXR1cm4gRnVuYzI8UiwgUDEsIFAyLCBGLCBGdW5jSW5mbzxQMSwgUj4gPigpOwotICB9
Ci0KLSAgdGVtcGxhdGUgPFIgRihQMSwgUDIpPgotICBCb3VuZEZ1bmMyPFIsIFAxLCBQMiwgRiwg
RnVuY0luZm88UDEsIFI+ID4gR2V0RnVuYygKLSAgICAgIHR5cGVuYW1lIHJlbW92ZV9jb25zdHB0
cjxQMj46OnR5cGUgcGFyYW0yKSB7Ci0gICAgcmV0dXJuIEJvdW5kRnVuYzI8UiwgUDEsIFAyLCBG
LCBGdW5jSW5mbzxQMSwgUj4gPihwYXJhbTIpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMz4KLXN0cnVjdCBGdW5jU2lnMyB7Ci0gIHRl
bXBsYXRlIDxSIEYoUDEsIFAyLCBQMyk+Ci0gIEZ1bmMzPFIsIFAxLCBQMiwgUDMsIEYsIEZ1bmNJ
bmZvPFAxLCBSPiA+IEdldEZ1bmMoKSB7Ci0gICAgcmV0dXJuIEZ1bmMzPFIsIFAxLCBQMiwgUDMs
IEYsIEZ1bmNJbmZvPFAxLCBSPiA+KCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8UiBGKFAxLCBQMiwg
UDMpPgotICBCb3VuZEZ1bmMzPFIsIFAxLCBQMiwgUDMsIEYsIEZ1bmNJbmZvPFAxLCBSPiA+IEdl
dEZ1bmMoCi0gICAgICB0eXBlbmFtZSByZW1vdmVfY29uc3RwdHI8UDI+Ojp0eXBlIHBhcmFtMikg
ewotICAgIHJldHVybiBCb3VuZEZ1bmMzPFIsIFAxLCBQMiwgUDMsIEYsIEZ1bmNJbmZvPFAxLCBS
PiA+KHBhcmFtMik7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xh
c3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQND4KLXN0cnVjdCBGdW5jU2lnNCB7Ci0gIHRlbXBsYXRl
IDxSIEYoUDEsIFAyLCBQMywgUDQpPgotICBGdW5jNDxSLCBQMSwgUDIsIFAzLCBQNCwgRiwgRnVu
Y0luZm88UDEsIFI+ID4gR2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVuYzQ8UiwgUDEsIFAyLCBQ
MywgUDQsIEYsIEZ1bmNJbmZvPFAxLCBSPiA+KCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8UiBGKFAx
LCBQMiwgUDMsIFA0KT4KLSAgQm91bmRGdW5jNDxSLCBQMSwgUDIsIFAzLCBQNCwgRiwgRnVuY0lu
Zm88UDEsIFI+ID4gR2V0RnVuYygKLSAgICAgIHR5cGVuYW1lIHJlbW92ZV9jb25zdHB0cjxQMj46
OnR5cGUgcGFyYW0yKSB7Ci0gICAgcmV0dXJuIEJvdW5kRnVuYzQ8UiwgUDEsIFAyLCBQMywgUDQs
IEYsIEZ1bmNJbmZvPFAxLCBSPiA+KHBhcmFtMik7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFz
cyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQNCwgY2xhc3MgUDU+Ci1z
dHJ1Y3QgRnVuY1NpZzUgewotICB0ZW1wbGF0ZSA8UiBGKFAxLCBQMiwgUDMsIFA0LCBQNSk+Ci0g
IEZ1bmM1PFIsIFAxLCBQMiwgUDMsIFA0LCBQNSwgRiwgRnVuY0luZm88UDEsIFI+ID4gR2V0RnVu
YygpIHsKLSAgICByZXR1cm4gRnVuYzU8UiwgUDEsIFAyLCBQMywgUDQsIFA1LCBGLCBGdW5jSW5m
bzxQMSwgUj4gPigpOwotICB9Ci0KLSAgdGVtcGxhdGUgPFIgRihQMSwgUDIsIFAzLCBQNCwgUDUp
PgotICBCb3VuZEZ1bmM1PFIsIFAxLCBQMiwgUDMsIFA0LCBQNSwgRiwgRnVuY0luZm88UDEsIFI+
ID4gR2V0RnVuYygKLSAgICAgIHR5cGVuYW1lIHJlbW92ZV9jb25zdHB0cjxQMj46OnR5cGUgcGFy
YW0yKSB7Ci0gICAgcmV0dXJuIEJvdW5kRnVuYzU8UiwgUDEsIFAyLCBQMywgUDQsIFA1LCBGLCBG
dW5jSW5mbzxQMSwgUj4gPihwYXJhbTIpOwotICB9Ci19OwotCi0vKiBPdmVybG9hZGVkIHRlbXBs
YXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGNvbnN0cnVjdCB0aGUgYXBwcm9wcmlhdGUgRnVuY1NpZyoK
LSAqIGNsYXNzIGdpdmVuIGEgZnVuY3Rpb24gcG9pbnRlciBieSBkZWR1Y2luZyB0aGUgdGVtcGxh
dGUgcGFyYW1ldGVycy4gKi8KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMT4KLWlubGluZSBG
dW5jU2lnMTxSLCBQMT4gTWF0Y2hGdW5jKFIgKCpmKShQMSkpIHsKLSAgVVBCX1VOVVNFRChmKTsg
IC8qIE9ubHkgdXNlZCBmb3IgdGVtcGxhdGUgcGFyYW1ldGVyIGRlZHVjdGlvbi4gKi8KLSAgcmV0
dXJuIEZ1bmNTaWcxPFIsIFAxPigpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEs
IGNsYXNzIFAyPgotaW5saW5lIEZ1bmNTaWcyPFIsIFAxLCBQMj4gTWF0Y2hGdW5jKFIgKCpmKShQ
MSwgUDIpKSB7Ci0gIFVQQl9VTlVTRUQoZik7ICAvKiBPbmx5IHVzZWQgZm9yIHRlbXBsYXRlIHBh
cmFtZXRlciBkZWR1Y3Rpb24uICovCi0gIHJldHVybiBGdW5jU2lnMjxSLCBQMSwgUDI+KCk7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzPgotaW5s
aW5lIEZ1bmNTaWczPFIsIFAxLCBQMiwgUDM+IE1hdGNoRnVuYyhSICgqZikoUDEsIFAyLCBQMykp
IHsKLSAgVVBCX1VOVVNFRChmKTsgIC8qIE9ubHkgdXNlZCBmb3IgdGVtcGxhdGUgcGFyYW1ldGVy
IGRlZHVjdGlvbi4gKi8KLSAgcmV0dXJuIEZ1bmNTaWczPFIsIFAxLCBQMiwgUDM+KCk7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQ
ND4KLWlubGluZSBGdW5jU2lnNDxSLCBQMSwgUDIsIFAzLCBQND4gTWF0Y2hGdW5jKFIgKCpmKShQ
MSwgUDIsIFAzLCBQNCkpIHsKLSAgVVBCX1VOVVNFRChmKTsgIC8qIE9ubHkgdXNlZCBmb3IgdGVt
cGxhdGUgcGFyYW1ldGVyIGRlZHVjdGlvbi4gKi8KLSAgcmV0dXJuIEZ1bmNTaWc0PFIsIFAxLCBQ
MiwgUDMsIFA0PigpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAy
LCBjbGFzcyBQMywgY2xhc3MgUDQsIGNsYXNzIFA1PgotaW5saW5lIEZ1bmNTaWc1PFIsIFAxLCBQ
MiwgUDMsIFA0LCBQNT4gTWF0Y2hGdW5jKFIgKCpmKShQMSwgUDIsIFAzLCBQNCwgUDUpKSB7Ci0g
IFVQQl9VTlVTRUQoZik7ICAvKiBPbmx5IHVzZWQgZm9yIHRlbXBsYXRlIHBhcmFtZXRlciBkZWR1
Y3Rpb24uICovCi0gIHJldHVybiBGdW5jU2lnNTxSLCBQMSwgUDIsIFAzLCBQNCwgUDU+KCk7Ci19
Ci0KLS8qIE1ldGhvZFNpZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIENhbGxNZXRob2QqOiBhIGZ1bmN0aW9u
IHRlbXBsYXRlIHRoYXQgY2FsbHMgYSBnaXZlbiBtZXRob2QuICovCi10ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgQywgUiAoQzo6KkYpKCk+Ci1SIENhbGxNZXRob2QwKEMgKm9iaikgewotICByZXR1
cm4gKCgqb2JqKS4qRikoKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEMsIGNsYXNz
IFAxLCBSIChDOjoqRikoUDEpPgotUiBDYWxsTWV0aG9kMShDICpvYmosIFAxIGFyZzEpIHsKLSAg
cmV0dXJuICgoKm9iaikuKkYpKGFyZzEpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
QywgY2xhc3MgUDEsIGNsYXNzIFAyLCBSIChDOjoqRikoUDEsIFAyKT4KLVIgQ2FsbE1ldGhvZDIo
QyAqb2JqLCBQMSBhcmcxLCBQMiBhcmcyKSB7Ci0gIHJldHVybiAoKCpvYmopLipGKShhcmcxLCBh
cmcyKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEMsIGNsYXNzIFAxLCBjbGFzcyBQ
MiwgY2xhc3MgUDMsIFIgKEM6OipGKShQMSwgUDIsIFAzKT4KLVIgQ2FsbE1ldGhvZDMoQyAqb2Jq
LCBQMSBhcmcxLCBQMiBhcmcyLCBQMyBhcmczKSB7Ci0gIHJldHVybiAoKCpvYmopLipGKShhcmcx
LCBhcmcyLCBhcmczKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEMsIGNsYXNzIFAx
LCBjbGFzcyBQMiwgY2xhc3MgUDMsIGNsYXNzIFA0LAotICAgICAgICAgIFIgKEM6OipGKShQMSwg
UDIsIFAzLCBQNCk+Ci1SIENhbGxNZXRob2Q0KEMgKm9iaiwgUDEgYXJnMSwgUDIgYXJnMiwgUDMg
YXJnMywgUDQgYXJnNCkgewotICByZXR1cm4gKCgqb2JqKS4qRikoYXJnMSwgYXJnMiwgYXJnMywg
YXJnNCk7Ci19Ci0KLS8qIE1ldGhvZFNpZzogbGlrZSBGdW5jU2lnLCBidXQgZm9yIG1lbWJlciBm
dW5jdGlvbnMuCi0gKgotICogR2V0RnVuYygpIHJldHVybnMgYSBub3JtYWwgRnVuY04gb2JqZWN0
LCBzbyBhZnRlciBjYWxsaW5nIEdldEZ1bmMoKSBubwotICogbW9yZSBsb2dpYyBpcyByZXF1aXJl
ZCB0byBzcGVjaWFsLWNhc2UgbWV0aG9kcy4gKi8KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBD
Pgotc3RydWN0IE1ldGhvZFNpZzAgewotICB0ZW1wbGF0ZSA8UiAoQzo6KkYpKCk+Ci0gIEZ1bmMx
PFIsIEMgKiwgQ2FsbE1ldGhvZDA8UiwgQywgRj4sIEZ1bmNJbmZvPEMgKiwgUj4gPiBHZXRGdW5j
KCkgewotICAgIHJldHVybiBGdW5jMTxSLCBDICosIENhbGxNZXRob2QwPFIsIEMsIEY+LCBGdW5j
SW5mbzxDICosIFI+ID4oKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEMs
IGNsYXNzIFAxPgotc3RydWN0IE1ldGhvZFNpZzEgewotICB0ZW1wbGF0ZSA8UiAoQzo6KkYpKFAx
KT4KLSAgRnVuYzI8UiwgQyAqLCBQMSwgQ2FsbE1ldGhvZDE8UiwgQywgUDEsIEY+LCBGdW5jSW5m
bzxDICosIFI+ID4gR2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVuYzI8UiwgQyAqLCBQMSwgQ2Fs
bE1ldGhvZDE8UiwgQywgUDEsIEY+LCBGdW5jSW5mbzxDICosIFI+ID4oKTsKLSAgfQotCi0gIHRl
bXBsYXRlIDxSIChDOjoqRikoUDEpPgotICBCb3VuZEZ1bmMyPFIsIEMgKiwgUDEsIENhbGxNZXRo
b2QxPFIsIEMsIFAxLCBGPiwgRnVuY0luZm88QyAqLCBSPiA+IEdldEZ1bmMoCi0gICAgICB0eXBl
bmFtZSByZW1vdmVfY29uc3RwdHI8UDE+Ojp0eXBlIHBhcmFtMSkgewotICAgIHJldHVybiBCb3Vu
ZEZ1bmMyPFIsIEMgKiwgUDEsIENhbGxNZXRob2QxPFIsIEMsIFAxLCBGPiwgRnVuY0luZm88QyAq
LCBSPiA+KAotICAgICAgICBwYXJhbTEpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgQywgY2xhc3MgUDEsIGNsYXNzIFAyPgotc3RydWN0IE1ldGhvZFNpZzIgewotICB0ZW1w
bGF0ZSA8UiAoQzo6KkYpKFAxLCBQMik+Ci0gIEZ1bmMzPFIsIEMgKiwgUDEsIFAyLCBDYWxsTWV0
aG9kMjxSLCBDLCBQMSwgUDIsIEY+LCBGdW5jSW5mbzxDICosIFI+ID4KLSAgR2V0RnVuYygpIHsK
LSAgICByZXR1cm4gRnVuYzM8UiwgQyAqLCBQMSwgUDIsIENhbGxNZXRob2QyPFIsIEMsIFAxLCBQ
MiwgRj4sCi0gICAgICAgICAgICAgICAgIEZ1bmNJbmZvPEMgKiwgUj4gPigpOwotICB9Ci0KLSAg
dGVtcGxhdGUgPFIgKEM6OipGKShQMSwgUDIpPgotICBCb3VuZEZ1bmMzPFIsIEMgKiwgUDEsIFAy
LCBDYWxsTWV0aG9kMjxSLCBDLCBQMSwgUDIsIEY+LCBGdW5jSW5mbzxDICosIFI+ID4KLSAgR2V0
RnVuYyh0eXBlbmFtZSByZW1vdmVfY29uc3RwdHI8UDE+Ojp0eXBlIHBhcmFtMSkgewotICAgIHJl
dHVybiBCb3VuZEZ1bmMzPFIsIEMgKiwgUDEsIFAyLCBDYWxsTWV0aG9kMjxSLCBDLCBQMSwgUDIs
IEY+LAotICAgICAgICAgICAgICAgICAgICAgIEZ1bmNJbmZvPEMgKiwgUj4gPihwYXJhbTEpOwot
ICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgQywgY2xhc3MgUDEsIGNsYXNzIFAy
LCBjbGFzcyBQMz4KLXN0cnVjdCBNZXRob2RTaWczIHsKLSAgdGVtcGxhdGUgPFIgKEM6OipGKShQ
MSwgUDIsIFAzKT4KLSAgRnVuYzQ8UiwgQyAqLCBQMSwgUDIsIFAzLCBDYWxsTWV0aG9kMzxSLCBD
LCBQMSwgUDIsIFAzLCBGPiwgRnVuY0luZm88QyAqLCBSPiA+Ci0gIEdldEZ1bmMoKSB7Ci0gICAg
cmV0dXJuIEZ1bmM0PFIsIEMgKiwgUDEsIFAyLCBQMywgQ2FsbE1ldGhvZDM8UiwgQywgUDEsIFAy
LCBQMywgRj4sCi0gICAgICAgICAgICAgICAgIEZ1bmNJbmZvPEMgKiwgUj4gPigpOwotICB9Ci0K
LSAgdGVtcGxhdGUgPFIgKEM6OipGKShQMSwgUDIsIFAzKT4KLSAgQm91bmRGdW5jNDxSLCBDICos
IFAxLCBQMiwgUDMsIENhbGxNZXRob2QzPFIsIEMsIFAxLCBQMiwgUDMsIEY+LAotICAgICAgICAg
ICAgIEZ1bmNJbmZvPEMgKiwgUj4gPgotICBHZXRGdW5jKHR5cGVuYW1lIHJlbW92ZV9jb25zdHB0
cjxQMT46OnR5cGUgcGFyYW0xKSB7Ci0gICAgcmV0dXJuIEJvdW5kRnVuYzQ8UiwgQyAqLCBQMSwg
UDIsIFAzLCBDYWxsTWV0aG9kMzxSLCBDLCBQMSwgUDIsIFAzLCBGPiwKLSAgICAgICAgICAgICAg
ICAgICAgICBGdW5jSW5mbzxDICosIFI+ID4ocGFyYW0xKTsKLSAgfQotfTsKLQotdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIEMsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIGNsYXNzIFA0
Pgotc3RydWN0IE1ldGhvZFNpZzQgewotICB0ZW1wbGF0ZSA8UiAoQzo6KkYpKFAxLCBQMiwgUDMs
IFA0KT4KLSAgRnVuYzU8UiwgQyAqLCBQMSwgUDIsIFAzLCBQNCwgQ2FsbE1ldGhvZDQ8UiwgQywg
UDEsIFAyLCBQMywgUDQsIEY+LAotICAgICAgICBGdW5jSW5mbzxDICosIFI+ID4KLSAgR2V0RnVu
YygpIHsKLSAgICByZXR1cm4gRnVuYzU8UiwgQyAqLCBQMSwgUDIsIFAzLCBQNCwgQ2FsbE1ldGhv
ZDQ8UiwgQywgUDEsIFAyLCBQMywgUDQsIEY+LAotICAgICAgICAgICAgICAgICBGdW5jSW5mbzxD
ICosIFI+ID4oKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxSIChDOjoqRikoUDEsIFAyLCBQMywgUDQp
PgotICBCb3VuZEZ1bmM1PFIsIEMgKiwgUDEsIFAyLCBQMywgUDQsIENhbGxNZXRob2Q0PFIsIEMs
IFAxLCBQMiwgUDMsIFA0LCBGPiwKLSAgICAgICAgICAgICBGdW5jSW5mbzxDICosIFI+ID4KLSAg
R2V0RnVuYyh0eXBlbmFtZSByZW1vdmVfY29uc3RwdHI8UDE+Ojp0eXBlIHBhcmFtMSkgewotICAg
IHJldHVybiBCb3VuZEZ1bmM1PFIsIEMgKiwgUDEsIFAyLCBQMywgUDQsCi0gICAgICAgICAgICAg
ICAgICAgICAgQ2FsbE1ldGhvZDQ8UiwgQywgUDEsIFAyLCBQMywgUDQsIEY+LCBGdW5jSW5mbzxD
ICosIFI+ID4oCi0gICAgICAgIHBhcmFtMSk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBS
LCBjbGFzcyBDPgotaW5saW5lIE1ldGhvZFNpZzA8UiwgQz4gTWF0Y2hGdW5jKFIgKEM6OipmKSgp
KSB7Ci0gIFVQQl9VTlVTRUQoZik7ICAvKiBPbmx5IHVzZWQgZm9yIHRlbXBsYXRlIHBhcmFtZXRl
ciBkZWR1Y3Rpb24uICovCi0gIHJldHVybiBNZXRob2RTaWcwPFIsIEM+KCk7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBSLCBjbGFzcyBDLCBjbGFzcyBQMT4KLWlubGluZSBNZXRob2RTaWcxPFIsIEMs
IFAxPiBNYXRjaEZ1bmMoUiAoQzo6KmYpKFAxKSkgewotICBVUEJfVU5VU0VEKGYpOyAgLyogT25s
eSB1c2VkIGZvciB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZGVkdWN0aW9uLiAqLwotICByZXR1cm4gTWV0
aG9kU2lnMTxSLCBDLCBQMT4oKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEMsIGNs
YXNzIFAxLCBjbGFzcyBQMj4KLWlubGluZSBNZXRob2RTaWcyPFIsIEMsIFAxLCBQMj4gTWF0Y2hG
dW5jKFIgKEM6OipmKShQMSwgUDIpKSB7Ci0gIFVQQl9VTlVTRUQoZik7ICAvKiBPbmx5IHVzZWQg
Zm9yIHRlbXBsYXRlIHBhcmFtZXRlciBkZWR1Y3Rpb24uICovCi0gIHJldHVybiBNZXRob2RTaWcy
PFIsIEMsIFAxLCBQMj4oKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEMsIGNsYXNz
IFAxLCBjbGFzcyBQMiwgY2xhc3MgUDM+Ci1pbmxpbmUgTWV0aG9kU2lnMzxSLCBDLCBQMSwgUDIs
IFAzPiBNYXRjaEZ1bmMoUiAoQzo6KmYpKFAxLCBQMiwgUDMpKSB7Ci0gIFVQQl9VTlVTRUQoZik7
ICAvKiBPbmx5IHVzZWQgZm9yIHRlbXBsYXRlIHBhcmFtZXRlciBkZWR1Y3Rpb24uICovCi0gIHJl
dHVybiBNZXRob2RTaWczPFIsIEMsIFAxLCBQMiwgUDM+KCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBSLCBjbGFzcyBDLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQND4KLWlu
bGluZSBNZXRob2RTaWc0PFIsIEMsIFAxLCBQMiwgUDMsIFA0PiBNYXRjaEZ1bmMoUiAoQzo6KmYp
KFAxLCBQMiwgUDMsIFA0KSkgewotICBVUEJfVU5VU0VEKGYpOyAgLyogT25seSB1c2VkIGZvciB0
ZW1wbGF0ZSBwYXJhbWV0ZXIgZGVkdWN0aW9uLiAqLwotICByZXR1cm4gTWV0aG9kU2lnNDxSLCBD
LCBQMSwgUDIsIFAzLCBQND4oKTsKLX0KLQotLyogTWF5YmVXcmFwUmV0dXJuICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyog
VGVtcGxhdGUgY2xhc3MgdGhhdCBhdHRlbXB0cyB0byB3cmFwIHRoZSByZXR1cm4gdmFsdWUgb2Yg
dGhlIGZ1bmN0aW9uIHNvIGl0Ci0gKiBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLiAgVGhlcmUg
YXJlIHR3byBtYWluIGFkanVzdG1lbnRzIGl0IG1heSBtYWtlOgotICoKLSAqICAgMS4gSWYgdGhl
IGZ1bmN0aW9uIHJldHVybnMgdm9pZCwgbWFrZSBpdCByZXR1cm4gdGhlIGV4cGVjdGVkIHR5cGUg
YW5kIHdpdGgKLSAqICAgICAgYSB2YWx1ZSB0aGF0IGFsd2F5cyBpbmRpY2F0ZXMgc3VjY2Vzcy4K
LSAqICAgMi4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYm9vbCwgbWFrZSBpdCByZXR1cm4gdGhl
IGV4cGVjdGVkIHR5cGUgd2l0aCBhCi0gKiAgICAgIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHN1Y2Nl
c3Mgb3IgZmFpbHVyZS4KLSAqCi0gKiBUaGUgImV4cGVjdGVkIHR5cGUiIGZvciByZXR1cm4gaXM6
Ci0gKiAgIDEuIHZvaWQqIGZvciBzdGFydCBoYW5kbGVycy4gIElmIHRoZSBjbG9zdXJlIHBhcmFt
ZXRlciBoYXMgYSBkaWZmZXJlbnQgdHlwZQotICogICAgICB3ZSB3aWxsIGNhc3QgaXQgdG8gdm9p
ZCogZm9yIHRoZSByZXR1cm4gaW4gdGhlIHN1Y2Nlc3MgY2FzZS4KLSAqICAgMi4gc2l6ZV90IGZv
ciBzdHJpbmcgYnVmZmVyIGhhbmRsZXJzLgotICogICAzLiBib29sIGZvciBldmVyeXRoaW5nIGVs
c2UuICovCi0KLS8qIFRlbXBsYXRlIHBhcmFtZXRlcnMgYXJlIEZ1bmNOIHR5cGUgYW5kIGRlc2ly
ZWQgcmV0dXJuIHR5cGUuICovCi10ZW1wbGF0ZSA8Y2xhc3MgRiwgY2xhc3MgUiwgY2xhc3MgRW5h
YmxlID0gdm9pZD4KLXN0cnVjdCBNYXliZVdyYXBSZXR1cm47Ci0KLS8qIElmIHRoZSByZXR1cm4g
dHlwZSBtYXRjaGVzLCByZXR1cm4gdGhlIGdpdmVuIGZ1bmN0aW9uIHVud3JhcHBlZC4gKi8KLXRl
bXBsYXRlIDxjbGFzcyBGPgotc3RydWN0IE1heWJlV3JhcFJldHVybjxGLCB0eXBlbmFtZSBGOjpS
ZXR1cm4+IHsKLSAgdHlwZWRlZiBGIEZ1bmM7Ci19OwotCi0vKiBGdW5jdGlvbiB3cmFwcGVyIHRo
YXQgbXVuZ2VzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB2b2lkIHRvIChib29sKXRydWUuICovCi10
ZW1wbGF0ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCB2b2lkIEYoUDEsIFAyKT4KLWJvb2wgUmV0dXJu
VHJ1ZTIoUDEgcDEsIFAyIHAyKSB7Ci0gIEYocDEsIHAyKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCB2b2lkIEYoUDEsIFAyLCBQ
Myk+Ci1ib29sIFJldHVyblRydWUzKFAxIHAxLCBQMiBwMiwgUDMgcDMpIHsKLSAgRihwMSwgcDIs
IHAzKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qIEZ1bmN0aW9uIHdyYXBwZXIgdGhhdCBtdW5n
ZXMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHZvaWQgdG8gKHZvaWQqKWFyZzEgICovCi10ZW1wbGF0
ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCB2b2lkIEYoUDEsIFAyKT4KLXZvaWQgKlJldHVybkNsb3N1
cmUyKFAxIHAxLCBQMiBwMikgewotICBGKHAxLCBwMik7Ci0gIHJldHVybiBwMTsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIHZvaWQgRihQMSwgUDIsIFAzKT4K
LXZvaWQgKlJldHVybkNsb3N1cmUzKFAxIHAxLCBQMiBwMiwgUDMgcDMpIHsKLSAgRihwMSwgcDIs
IHAzKTsKLSAgcmV0dXJuIHAxOwotfQotCi0vKiBGdW5jdGlvbiB3cmFwcGVyIHRoYXQgbXVuZ2Vz
IHRoZSByZXR1cm4gdmFsdWUgZnJvbSBSIHRvIHZvaWQqLiAqLwotdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFAxLCBjbGFzcyBQMiwgUiBGKFAxLCBQMik+Ci12b2lkICpDYXN0UmV0dXJuVG9Wb2lk
UHRyMihQMSBwMSwgUDIgcDIpIHsKLSAgcmV0dXJuIEYocDEsIHAyKTsKLX0KLQotdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIFIgRihQMSwgUDIsIFAzKT4K
LXZvaWQgKkNhc3RSZXR1cm5Ub1ZvaWRQdHIzKFAxIHAxLCBQMiBwMiwgUDMgcDMpIHsKLSAgcmV0
dXJuIEYocDEsIHAyLCBwMyk7Ci19Ci0KLS8qIEZ1bmN0aW9uIHdyYXBwZXIgdGhhdCBtdW5nZXMg
dGhlIHJldHVybiB2YWx1ZSBmcm9tIGJvb2wgdG8gdm9pZCouICovCi10ZW1wbGF0ZSA8Y2xhc3Mg
UDEsIGNsYXNzIFAyLCBib29sIEYoUDEsIFAyKT4KLXZvaWQgKlJldHVybkNsb3N1cmVPckJyZWFr
MihQMSBwMSwgUDIgcDIpIHsKLSAgcmV0dXJuIEYocDEsIHAyKSA/IHAxIDogVVBCX0JSRUFLOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgYm9vbCBGKFAxLCBQ
MiwgUDMpPgotdm9pZCAqUmV0dXJuQ2xvc3VyZU9yQnJlYWszKFAxIHAxLCBQMiBwMiwgUDMgcDMp
IHsKLSAgcmV0dXJuIEYocDEsIHAyLCBwMykgPyBwMSA6IFVQQl9CUkVBSzsKLX0KLQotLyogRm9y
IHRoZSBzdHJpbmcgY2FsbGJhY2ssIHdoaWNoIHRha2VzIGZpdmUgcGFyYW1zLCByZXR1cm5zIHRo
ZSBzaXplIHBhcmFtLiAqLwotdGVtcGxhdGUgPGNsYXNzIFAxLCBjbGFzcyBQMiwKLSAgICAgICAg
ICB2b2lkIEYoUDEsIFAyLCBjb25zdCBjaGFyICosIHNpemVfdCwgY29uc3QgQnVmZmVySGFuZGxl
ICopPgotc2l6ZV90IFJldHVyblN0cmluZ0xlbihQMSBwMSwgUDIgcDIsIGNvbnN0IGNoYXIgKnAz
LCBzaXplX3QgcDQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlckhhbmRsZSAq
cDUpIHsKLSAgRihwMSwgcDIsIHAzLCBwNCwgcDUpOwotICByZXR1cm4gcDQ7Ci19Ci0KLS8qIEZv
ciB0aGUgc3RyaW5nIGNhbGxiYWNrLCB3aGljaCB0YWtlcyBmaXZlIHBhcmFtcywgcmV0dXJucyB0
aGUgc2l6ZSBwYXJhbSBvcgotICogemVyby4gKi8KLXRlbXBsYXRlIDxjbGFzcyBQMSwgY2xhc3Mg
UDIsCi0gICAgICAgICAgYm9vbCBGKFAxLCBQMiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGNvbnN0
IEJ1ZmZlckhhbmRsZSAqKT4KLXNpemVfdCBSZXR1cm5OT3IwKFAxIHAxLCBQMiBwMiwgY29uc3Qg
Y2hhciAqcDMsIHNpemVfdCBwNCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlckhhbmRs
ZSAqcDUpIHsKLSAgcmV0dXJuIEYocDEsIHAyLCBwMywgcDQsIHA1KSA/IHA0IDogMDsKLX0KLQot
LyogSWYgd2UgaGF2ZSBhIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkIGJ1dCB3YW50IGEgZnVuY3Rp
b24gcmV0dXJuaW5nIGJvb2wsIHdyYXAKLSAqIGl0IGluIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5z
IHRydWUuICovCi10ZW1wbGF0ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCB2b2lkIEYoUDEsIFAyKSwg
Y2xhc3MgST4KLXN0cnVjdCBNYXliZVdyYXBSZXR1cm48RnVuYzI8dm9pZCwgUDEsIFAyLCBGLCBJ
PiwgYm9vbD4gewotICB0eXBlZGVmIEZ1bmMyPGJvb2wsIFAxLCBQMiwgUmV0dXJuVHJ1ZTI8UDEs
IFAyLCBGPiwgST4gRnVuYzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBQMSwgY2xhc3MgUDIsIGNs
YXNzIFAzLCB2b2lkIEYoUDEsIFAyLCBQMyksIGNsYXNzIEk+Ci1zdHJ1Y3QgTWF5YmVXcmFwUmV0
dXJuPEZ1bmMzPHZvaWQsIFAxLCBQMiwgUDMsIEYsIEk+LCBib29sPiB7Ci0gIHR5cGVkZWYgRnVu
YzM8Ym9vbCwgUDEsIFAyLCBQMywgUmV0dXJuVHJ1ZTM8UDEsIFAyLCBQMywgRj4sIEk+IEZ1bmM7
Ci19OwotCi0vKiBJZiBvdXIgZnVuY3Rpb24gcmV0dXJucyB2b2lkIGJ1dCB3ZSB3YW50IG9uZSBy
ZXR1cm5pbmcgdm9pZCosIHdyYXAgaXQgaW4gYQotICogZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRo
ZSBmaXJzdCBhcmd1bWVudC4gKi8KLXRlbXBsYXRlIDxjbGFzcyBQMSwgY2xhc3MgUDIsIHZvaWQg
RihQMSwgUDIpLCBjbGFzcyBJPgotc3RydWN0IE1heWJlV3JhcFJldHVybjxGdW5jMjx2b2lkLCBQ
MSwgUDIsIEYsIEk+LCB2b2lkICo+IHsKLSAgdHlwZWRlZiBGdW5jMjx2b2lkICosIFAxLCBQMiwg
UmV0dXJuQ2xvc3VyZTI8UDEsIFAyLCBGPiwgST4gRnVuYzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFz
cyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCB2b2lkIEYoUDEsIFAyLCBQMyksIGNsYXNzIEk+Ci1z
dHJ1Y3QgTWF5YmVXcmFwUmV0dXJuPEZ1bmMzPHZvaWQsIFAxLCBQMiwgUDMsIEYsIEk+LCB2b2lk
ICo+IHsKLSAgdHlwZWRlZiBGdW5jMzx2b2lkICosIFAxLCBQMiwgUDMsIFJldHVybkNsb3N1cmUz
PFAxLCBQMiwgUDMsIEY+LCBJPiBGdW5jOwotfTsKLQotLyogSWYgb3VyIGZ1bmN0aW9uIHJldHVy
bnMgUiogYnV0IHdlIHdhbnQgb25lIHJldHVybmluZyB2b2lkKiwgd3JhcCBpdCBpbiBhCi0gKiBm
dW5jdGlvbiB0aGF0IGNhc3RzIHRvIHZvaWQqLiAqLwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFAxLCBjbGFzcyBQMiwgUiAqRihQMSwgUDIpLCBjbGFzcyBJPgotc3RydWN0IE1heWJlV3JhcFJl
dHVybjxGdW5jMjxSICosIFAxLCBQMiwgRiwgST4sIHZvaWQgKiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgZGlzYWJsZV9pZl9zYW1lPFIgKiwgdm9pZCAqPjo6VHlwZT4gewotICB0
eXBlZGVmIEZ1bmMyPHZvaWQgKiwgUDEsIFAyLCBDYXN0UmV0dXJuVG9Wb2lkUHRyMjxSICosIFAx
LCBQMiwgRj4sIEk+IEZ1bmM7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNs
YXNzIFAyLCBjbGFzcyBQMywgUiAqRihQMSwgUDIsIFAzKSwgY2xhc3MgST4KLXN0cnVjdCBNYXli
ZVdyYXBSZXR1cm48RnVuYzM8UiAqLCBQMSwgUDIsIFAzLCBGLCBJPiwgdm9pZCAqLAotICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBkaXNhYmxlX2lmX3NhbWU8UiAqLCB2b2lkICo+OjpU
eXBlPiB7Ci0gIHR5cGVkZWYgRnVuYzM8dm9pZCAqLCBQMSwgUDIsIFAzLCBDYXN0UmV0dXJuVG9W
b2lkUHRyMzxSICosIFAxLCBQMiwgUDMsIEY+LCBJPgotICAgICAgRnVuYzsKLX07Ci0KLS8qIElm
IG91ciBmdW5jdGlvbiByZXR1cm5zIGJvb2wgYnV0IHdlIHdhbnQgb25lIHJldHVybmluZyB2b2lk
Kiwgd3JhcCBpdCBpbiBhCi0gKiBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyIHRoZSBmaXJz
dCBwYXJhbSBvciBVUEJfQlJFQUsuICovCi10ZW1wbGF0ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCBi
b29sIEYoUDEsIFAyKSwgY2xhc3MgST4KLXN0cnVjdCBNYXliZVdyYXBSZXR1cm48RnVuYzI8Ym9v
bCwgUDEsIFAyLCBGLCBJPiwgdm9pZCAqPiB7Ci0gIHR5cGVkZWYgRnVuYzI8dm9pZCAqLCBQMSwg
UDIsIFJldHVybkNsb3N1cmVPckJyZWFrMjxQMSwgUDIsIEY+LCBJPiBGdW5jOwotfTsKLQotdGVt
cGxhdGUgPGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIGJvb2wgRihQMSwgUDIsIFAzKSwg
Y2xhc3MgST4KLXN0cnVjdCBNYXliZVdyYXBSZXR1cm48RnVuYzM8Ym9vbCwgUDEsIFAyLCBQMywg
RiwgST4sIHZvaWQgKj4gewotICB0eXBlZGVmIEZ1bmMzPHZvaWQgKiwgUDEsIFAyLCBQMywgUmV0
dXJuQ2xvc3VyZU9yQnJlYWszPFAxLCBQMiwgUDMsIEY+LCBJPgotICAgICAgRnVuYzsKLX07Ci0K
LS8qIElmIG91ciBmdW5jdGlvbiByZXR1cm5zIHZvaWQgYnV0IHdlIHdhbnQgb25lIHJldHVybmlu
ZyBzaXplX3QsIHdyYXAgaXQgaW4gYQotICogZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzaXpl
IGFyZ3VtZW50LiAqLwotdGVtcGxhdGUgPGNsYXNzIFAxLCBjbGFzcyBQMiwKLSAgICAgICAgICB2
b2lkIEYoUDEsIFAyLCBjb25zdCBjaGFyICosIHNpemVfdCwgY29uc3QgQnVmZmVySGFuZGxlICop
LCBjbGFzcyBJPgotc3RydWN0IE1heWJlV3JhcFJldHVybjwKLSAgICBGdW5jNTx2b2lkLCBQMSwg
UDIsIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBjb25zdCBCdWZmZXJIYW5kbGUgKiwgRiwgST4sCi0g
ICAgICAgICAgc2l6ZV90PiB7Ci0gIHR5cGVkZWYgRnVuYzU8c2l6ZV90LCBQMSwgUDIsIGNvbnN0
IGNoYXIgKiwgc2l6ZV90LCBjb25zdCBCdWZmZXJIYW5kbGUgKiwKLSAgICAgICAgICAgICAgICBS
ZXR1cm5TdHJpbmdMZW48UDEsIFAyLCBGPiwgST4gRnVuYzsKLX07Ci0KLS8qIElmIG91ciBmdW5j
dGlvbiByZXR1cm5zIGJvb2wgYnV0IHdlIHdhbnQgb25lIHJldHVybmluZyBzaXplX3QsIHdyYXAg
aXQgaW4gYQotICogZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlciAwIG9yIHRoZSBidWYgc2l6
ZS4gKi8KLXRlbXBsYXRlIDxjbGFzcyBQMSwgY2xhc3MgUDIsCi0gICAgICAgICAgYm9vbCBGKFAx
LCBQMiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGNvbnN0IEJ1ZmZlckhhbmRsZSAqKSwgY2xhc3Mg
ST4KLXN0cnVjdCBNYXliZVdyYXBSZXR1cm48Ci0gICAgRnVuYzU8Ym9vbCwgUDEsIFAyLCBjb25z
dCBjaGFyICosIHNpemVfdCwgY29uc3QgQnVmZmVySGFuZGxlICosIEYsIEk+LAotICAgIHNpemVf
dD4gewotICB0eXBlZGVmIEZ1bmM1PHNpemVfdCwgUDEsIFAyLCBjb25zdCBjaGFyICosIHNpemVf
dCwgY29uc3QgQnVmZmVySGFuZGxlICosCi0gICAgICAgICAgICAgICAgUmV0dXJuTk9yMDxQMSwg
UDIsIEY+LCBJPiBGdW5jOwotfTsKLQotLyogQ29udmVydFBhcmFtcyAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGVt
cGxhdGUgY2xhc3MgdGhhdCBjb252ZXJ0cyB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycyBpZiBuZWNl
c3NhcnksIGFuZAotICogaWdub3JlcyB0aGUgSGFuZGxlckRhdGEgcGFyYW1ldGVyIGlmIGFwcHJv
cHJpYXRlLgotICoKLSAqIFRlbXBsYXRlIHBhcmFtZXRlciBpcyB0aGUgYXJlIEZ1bmNOIGZ1bmN0
aW9uIHR5cGUuICovCi10ZW1wbGF0ZSA8Y2xhc3MgRiwgY2xhc3MgVD4KLXN0cnVjdCBDb252ZXJ0
UGFyYW1zOwotCi0vKiBGdW5jdGlvbiB0aGF0IGRpc2NhcmRzIHRoZSBoYW5kbGVyIGRhdGEgcGFy
YW1ldGVyLiAqLwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBSIEYoUDEpPgotUiBJZ25v
cmVIYW5kbGVyRGF0YTIodm9pZCAqcDEsIGNvbnN0IHZvaWQgKmhkKSB7Ci0gIFVQQl9VTlVTRUQo
aGQpOwotICByZXR1cm4gRihzdGF0aWNfY2FzdDxQMT4ocDEpKTsKLX0KLQotdGVtcGxhdGUgPGNs
YXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMldyYXBwZXIsIGNsYXNzIFAyV3JhcHBlZCwKLSAgICAg
ICAgICBSIEYoUDEsIFAyV3JhcHBlZCk+Ci1SIElnbm9yZUhhbmRsZXJEYXRhMyh2b2lkICpwMSwg
Y29uc3Qgdm9pZCAqaGQsIFAyV3JhcHBlciBwMikgewotICBVUEJfVU5VU0VEKGhkKTsKLSAgcmV0
dXJuIEYoc3RhdGljX2Nhc3Q8UDE+KHAxKSwgcDIpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgUiBGKFAxLCBQMiwgUDMpPgotUiBJZ25vcmVI
YW5kbGVyRGF0YTQodm9pZCAqcDEsIGNvbnN0IHZvaWQgKmhkLCBQMiBwMiwgUDMgcDMpIHsKLSAg
VVBCX1VOVVNFRChoZCk7Ci0gIHJldHVybiBGKHN0YXRpY19jYXN0PFAxPihwMSksIHAyLCBwMyk7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBj
bGFzcyBQNCwgUiBGKFAxLCBQMiwgUDMsIFA0KT4KLVIgSWdub3JlSGFuZGxlckRhdGE1KHZvaWQg
KnAxLCBjb25zdCB2b2lkICpoZCwgUDIgcDIsIFAzIHAzLCBQNCBwNCkgewotICBVUEJfVU5VU0VE
KGhkKTsKLSAgcmV0dXJuIEYoc3RhdGljX2Nhc3Q8UDE+KHAxKSwgcDIsIHAzLCBwNCk7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgUiBGKFAxLCBjb25zdCBjaGFyKiwgc2l6ZV90
KT4KLVIgSWdub3JlSGFuZGxlckRhdGFJZ25vcmVIYW5kbGUodm9pZCAqcDEsIGNvbnN0IHZvaWQg
KmhkLCBjb25zdCBjaGFyICpwMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHAzLCBjb25zdCBCdWZmZXJIYW5kbGUgKmhhbmRsZSkgewotICBVUEJfVU5VU0VEKGhkKTsK
LSAgVVBCX1VOVVNFRChoYW5kbGUpOwotICByZXR1cm4gRihzdGF0aWNfY2FzdDxQMT4ocDEpLCBw
MiwgcDMpOwotfQotCi0vKiBGdW5jdGlvbiB0aGF0IGNhc3RzIHRoZSBoYW5kbGVyIGRhdGEgcGFy
YW1ldGVyLiAqLwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgUiBGKFAx
LCBQMik+Ci1SIENhc3RIYW5kbGVyRGF0YTIodm9pZCAqYywgY29uc3Qgdm9pZCAqaGQpIHsKLSAg
cmV0dXJuIEYoc3RhdGljX2Nhc3Q8UDE+KGMpLCBzdGF0aWNfY2FzdDxQMj4oaGQpKTsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDNXcmFwcGVyLCBj
bGFzcyBQM1dyYXBwZWQsCi0gICAgICAgICAgUiBGKFAxLCBQMiwgUDNXcmFwcGVkKT4KLVIgQ2Fz
dEhhbmRsZXJEYXRhMyh2b2lkICpjLCBjb25zdCB2b2lkICpoZCwgUDNXcmFwcGVyIHAzKSB7Ci0g
IHJldHVybiBGKHN0YXRpY19jYXN0PFAxPihjKSwgc3RhdGljX2Nhc3Q8UDI+KGhkKSwgcDMpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgY2xh
c3MgUDQsIGNsYXNzIFA1LAotICAgICAgICAgIFIgRihQMSwgUDIsIFAzLCBQNCwgUDUpPgotUiBD
YXN0SGFuZGxlckRhdGE1KHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhkLCBQMyBwMywgUDQgcDQsIFA1
IHA1KSB7Ci0gIHJldHVybiBGKHN0YXRpY19jYXN0PFAxPihjKSwgc3RhdGljX2Nhc3Q8UDI+KGhk
KSwgcDMsIHA0LCBwNSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3Mg
UDIsIFIgRihQMSwgUDIsIGNvbnN0IGNoYXIgKiwgc2l6ZV90KT4KLVIgQ2FzdEhhbmRsZXJEYXRh
SWdub3JlSGFuZGxlKHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhkLCBjb25zdCBjaGFyICpwMywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwNCwgY29uc3QgQnVmZmVySGFuZGxl
ICpoYW5kbGUpIHsKLSAgVVBCX1VOVVNFRChoYW5kbGUpOwotICByZXR1cm4gRihzdGF0aWNfY2Fz
dDxQMT4oYyksIHN0YXRpY19jYXN0PFAyPihoZCksIHAzLCBwNCk7Ci19Ci0KLS8qIEZvciB1bmJv
dW5kIGZ1bmN0aW9ucywgaWdub3JlIHRoZSBoYW5kbGVyIGRhdGEuICovCi10ZW1wbGF0ZSA8Y2xh
c3MgUiwgY2xhc3MgUDEsIFIgRihQMSksIGNsYXNzIEksIGNsYXNzIFQ+Ci1zdHJ1Y3QgQ29udmVy
dFBhcmFtczxGdW5jMTxSLCBQMSwgRiwgST4sIFQ+IHsKLSAgdHlwZWRlZiBGdW5jMjxSLCB2b2lk
ICosIGNvbnN0IHZvaWQgKiwgSWdub3JlSGFuZGxlckRhdGEyPFIsIFAxLCBGPiwgST4gRnVuYzsK
LX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIFIgRihQMSwgUDIp
LCBjbGFzcyBJLAotICAgICAgICAgIGNsYXNzIFIyLCBjbGFzcyBQMV8yLCBjbGFzcyBQMl8yLCBj
bGFzcyBQM18yPgotc3RydWN0IENvbnZlcnRQYXJhbXM8RnVuYzI8UiwgUDEsIFAyLCBGLCBJPiwK
LSAgICAgICAgICAgICAgICAgICAgIFIyICgqKShQMV8yLCBQMl8yLCBQM18yKT4gewotICB0eXBl
ZGVmIEZ1bmMzPFIsIHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBQM18yLAotICAgICAgICAgICAgICAg
IElnbm9yZUhhbmRsZXJEYXRhMzxSLCBQMSwgUDNfMiwgUDIsIEY+LCBJPiBGdW5jOwotfTsKLQot
LyogRm9yIFN0cmluZ0J1ZmZlciBvbmx5OyB0aGlzIGlnbm9yZXMgYm90aCB0aGUgaGFuZGxlciBk
YXRhIGFuZCB0aGUKLSAqIEJ1ZmZlckhhbmRsZS4gKi8KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFz
cyBQMSwgUiBGKFAxLCBjb25zdCBjaGFyICosIHNpemVfdCksIGNsYXNzIEksIGNsYXNzIFQ+Ci1z
dHJ1Y3QgQ29udmVydFBhcmFtczxGdW5jMzxSLCBQMSwgY29uc3QgY2hhciAqLCBzaXplX3QsIEYs
IEk+LCBUPiB7Ci0gIHR5cGVkZWYgRnVuYzU8Uiwgdm9pZCAqLCBjb25zdCB2b2lkICosIGNvbnN0
IGNoYXIgKiwgc2l6ZV90LAotICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlckhhbmRsZSAqLCBJ
Z25vcmVIYW5kbGVyRGF0YUlnbm9yZUhhbmRsZTxSLCBQMSwgRj4sCi0gICAgICAgICAgICAgICAg
ST4gRnVuYzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNs
YXNzIFAzLCBjbGFzcyBQNCwgUiBGKFAxLCBQMiwgUDMsIFA0KSwKLSAgICAgICAgICBjbGFzcyBJ
LCBjbGFzcyBUPgotc3RydWN0IENvbnZlcnRQYXJhbXM8RnVuYzQ8UiwgUDEsIFAyLCBQMywgUDQs
IEYsIEk+LCBUPiB7Ci0gIHR5cGVkZWYgRnVuYzU8Uiwgdm9pZCAqLCBjb25zdCB2b2lkICosIFAy
LCBQMywgUDQsCi0gICAgICAgICAgICAgICAgSWdub3JlSGFuZGxlckRhdGE1PFIsIFAxLCBQMiwg
UDMsIFA0LCBGPiwgST4gRnVuYzsKLX07Ci0KLS8qIEZvciBib3VuZCBmdW5jdGlvbnMsIGNhc3Qg
dGhlIGhhbmRsZXIgZGF0YS4gKi8KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3Mg
UDIsIFIgRihQMSwgUDIpLCBjbGFzcyBJLCBjbGFzcyBUPgotc3RydWN0IENvbnZlcnRQYXJhbXM8
Qm91bmRGdW5jMjxSLCBQMSwgUDIsIEYsIEk+LCBUPiB7Ci0gIHR5cGVkZWYgRnVuYzI8Uiwgdm9p
ZCAqLCBjb25zdCB2b2lkICosIENhc3RIYW5kbGVyRGF0YTI8UiwgUDEsIFAyLCBGPiwgST4KLSAg
ICAgIEZ1bmM7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBj
bGFzcyBQMywgUiBGKFAxLCBQMiwgUDMpLCBjbGFzcyBJLAotICAgICAgICAgIGNsYXNzIFIyLCBj
bGFzcyBQMV8yLCBjbGFzcyBQMl8yLCBjbGFzcyBQM18yPgotc3RydWN0IENvbnZlcnRQYXJhbXM8
Qm91bmRGdW5jMzxSLCBQMSwgUDIsIFAzLCBGLCBJPiwKLSAgICAgICAgICAgICAgICAgICAgIFIy
ICgqKShQMV8yLCBQMl8yLCBQM18yKT4gewotICB0eXBlZGVmIEZ1bmMzPFIsIHZvaWQgKiwgY29u
c3Qgdm9pZCAqLCBQM18yLAotICAgICAgICAgICAgICAgIENhc3RIYW5kbGVyRGF0YTM8UiwgUDEs
IFAyLCBQM18yLCBQMywgRj4sIEk+IEZ1bmM7Ci19OwotCi0vKiBGb3IgU3RyaW5nQnVmZmVyIG9u
bHk7IHRoaXMgaWdub3JlcyB0aGUgQnVmZmVySGFuZGxlLiAqLwotdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFAxLCBjbGFzcyBQMiwgUiBGKFAxLCBQMiwgY29uc3QgY2hhciAqLCBzaXplX3QpLAot
ICAgICAgICAgIGNsYXNzIEksIGNsYXNzIFQ+Ci1zdHJ1Y3QgQ29udmVydFBhcmFtczxCb3VuZEZ1
bmM0PFIsIFAxLCBQMiwgY29uc3QgY2hhciAqLCBzaXplX3QsIEYsIEk+LCBUPiB7Ci0gIHR5cGVk
ZWYgRnVuYzU8Uiwgdm9pZCAqLCBjb25zdCB2b2lkICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAot
ICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlckhhbmRsZSAqLCBDYXN0SGFuZGxlckRhdGFJZ25v
cmVIYW5kbGU8UiwgUDEsIFAyLCBGPiwKLSAgICAgICAgICAgICAgICBJPiBGdW5jOwotfTsKLQot
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIGNsYXNzIFA0
LCBjbGFzcyBQNSwKLSAgICAgICAgICBSIEYoUDEsIFAyLCBQMywgUDQsIFA1KSwgY2xhc3MgSSwg
Y2xhc3MgVD4KLXN0cnVjdCBDb252ZXJ0UGFyYW1zPEJvdW5kRnVuYzU8UiwgUDEsIFAyLCBQMywg
UDQsIFA1LCBGLCBJPiwgVD4gewotICB0eXBlZGVmIEZ1bmM1PFIsIHZvaWQgKiwgY29uc3Qgdm9p
ZCAqLCBQMywgUDQsIFA1LAotICAgICAgICAgICAgICAgIENhc3RIYW5kbGVyRGF0YTU8UiwgUDEs
IFAyLCBQMywgUDQsIFA1LCBGPiwgST4gRnVuYzsKLX07Ci0KLS8qIHV0eXBlL2x0eXBlIGFyZSB1
cHBlci9sb3dlci1jYXNlLCBjdHlwZSBpcyBjYW5vbmljYWwgQyB0eXBlLCB2dHlwZSBpcwotICog
dmFyaWFudCBDIHR5cGUuICovCi0jZGVmaW5lIFRZUEVfTUVUSE9EUyh1dHlwZSwgbHR5cGUsIGN0
eXBlLCB2dHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQ2Fub25pY2FsVHlwZTx2dHlwZT4geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB0eXBlZGVmIGN0eXBlIFR5cGU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH07ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICB0ZW1wbGF0ZSA8PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGJvb2wgSGFuZGxlcnM6OlNl
dFZhbHVlSGFuZGxlcjx2dHlwZT4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBjb25zdCBGaWVsZERlZiAqZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY29uc3QgSGFuZGxlcnM6OnV0eXBlICMjIEhh
bmRsZXImIGhhbmRsZXIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhc3Nl
cnQoIWhhbmRsZXIucmVnaXN0ZXJlZF8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgaGFuZGxlci5BZGRDbGVhbnVwKHRoaXMpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGhhbmRsZXIucmVn
aXN0ZXJlZF8gPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldCMjbHR5cGUodGhpcywgZiwgaGFu
ZGxlci5oYW5kbGVyXywgJmhhbmRsZXIuYXR0cl8pOyBcCi0gIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotCi1UWVBFX01FVEhPRFMoRG91YmxlLCBkb3VibGUsIGRvdWJsZSwgICBkb3VibGUpCi1UWVBF
X01FVEhPRFMoRmxvYXQsICBmbG9hdCwgIGZsb2F0LCAgICBmbG9hdCkKLVRZUEVfTUVUSE9EUyhV
SW50NjQsIHVpbnQ2NCwgdWludDY0X3QsIFVQQl9VSU5UNjRfVCkKLVRZUEVfTUVUSE9EUyhVSW50
MzIsIHVpbnQzMiwgdWludDMyX3QsIFVQQl9VSU5UMzJfVCkKLVRZUEVfTUVUSE9EUyhJbnQ2NCwg
IGludDY0LCAgaW50NjRfdCwgIFVQQl9JTlQ2NF9UKQotVFlQRV9NRVRIT0RTKEludDMyLCAgaW50
MzIsICBpbnQzMl90LCAgVVBCX0lOVDMyX1QpCi1UWVBFX01FVEhPRFMoQm9vbCwgICBib29sLCAg
IGJvb2wsICAgICBib29sKQotCi0jaWZkZWYgVVBCX1RXT18zMkJJVF9UWVBFUwotVFlQRV9NRVRI
T0RTKEludDMyLCAgaW50MzIsICBpbnQzMl90LCAgVVBCX0lOVDMyQUxUX1QpCi1UWVBFX01FVEhP
RFMoVUludDMyLCB1aW50MzIsIHVpbnQzMl90LCBVUEJfVUlOVDMyQUxUX1QpCi0jZW5kaWYKLQot
I2lmZGVmIFVQQl9UV09fNjRCSVRfVFlQRVMKLVRZUEVfTUVUSE9EUyhJbnQ2NCwgIGludDY0LCAg
aW50NjRfdCwgIFVQQl9JTlQ2NEFMVF9UKQotVFlQRV9NRVRIT0RTKFVJbnQ2NCwgdWludDY0LCB1
aW50NjRfdCwgVVBCX1VJTlQ2NEFMVF9UKQotI2VuZGlmCi0jdW5kZWYgVFlQRV9NRVRIT0RTCi0K
LXRlbXBsYXRlIDw+IHN0cnVjdCBDYW5vbmljYWxUeXBlPFN0YXR1cyo+IHsKLSAgdHlwZWRlZiBT
dGF0dXMqIFR5cGU7Ci19OwotCi0vKiBUeXBlIG1ldGhvZHMgdGhhdCBhcmUgb25seSBvbmUtcGVy
LWNhbm9uaWNhbC10eXBlIGFuZCBub3QKLSAqIG9uZS1wZXItY3ZhcmlhbnQuICovCi0KLSNkZWZp
bmUgVFlQRV9NRVRIT0RTKHV0eXBlLCBjdHlwZSkgXAotICAgIGlubGluZSBib29sIEhhbmRsZXJz
OjpTZXQjI3V0eXBlIyNIYW5kbGVyKGNvbnN0IEZpZWxkRGVmICpmLCBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXR5cGUjI0hhbmRsZXIgJmgp
IHsgXAotICAgICAgcmV0dXJuIFNldFZhbHVlSGFuZGxlcjxjdHlwZT4oZiwgaCk7IFwKLSAgICB9
IFwKLQotVFlQRV9NRVRIT0RTKERvdWJsZSwgZG91YmxlKQotVFlQRV9NRVRIT0RTKEZsb2F0LCAg
ZmxvYXQpCi1UWVBFX01FVEhPRFMoVUludDY0LCB1aW50NjRfdCkKLVRZUEVfTUVUSE9EUyhVSW50
MzIsIHVpbnQzMl90KQotVFlQRV9NRVRIT0RTKEludDY0LCAgaW50NjRfdCkKLVRZUEVfTUVUSE9E
UyhJbnQzMiwgIGludDMyX3QpCi1UWVBFX01FVEhPRFMoQm9vbCwgICBib29sKQotI3VuZGVmIFRZ
UEVfTUVUSE9EUwotCi10ZW1wbGF0ZSA8Y2xhc3MgRj4gc3RydWN0IFJldHVybk9mOwotCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyPgotc3RydWN0IFJldHVybk9mPFIgKCop
KFAxLCBQMik+IHsKLSAgdHlwZWRlZiBSIFJldHVybjsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBS
LCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzPgotc3RydWN0IFJldHVybk9mPFIgKCopKFAx
LCBQMiwgUDMpPiB7Ci0gIHR5cGVkZWYgUiBSZXR1cm47Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgY2xhc3MgUDQ+Ci1zdHJ1Y3QgUmV0dXJu
T2Y8UiAoKikoUDEsIFAyLCBQMywgUDQpPiB7Ci0gIHR5cGVkZWYgUiBSZXR1cm47Ci19OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgY2xhc3MgUDQs
IGNsYXNzIFA1Pgotc3RydWN0IFJldHVybk9mPFIgKCopKFAxLCBQMiwgUDMsIFA0LCBQNSk+IHsK
LSAgdHlwZWRlZiBSIFJldHVybjsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IGNvbnN0IHZvaWQg
KlVuaXF1ZVB0ckZvclR5cGUoKSB7Ci0gIHN0YXRpYyBjb25zdCBjaGFyIGNoID0gMDsKLSAgcmV0
dXJuICZjaDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci10ZW1wbGF0ZSA8Y2xhc3MgRj4KLWlu
bGluZSBIYW5kbGVyPFQ+OjpIYW5kbGVyKEYgZnVuYykKLSAgICA6IHJlZ2lzdGVyZWRfKGZhbHNl
KSwKLSAgICAgIGNsZWFudXBfZGF0YV8oZnVuYy5HZXREYXRhKCkpLAotICAgICAgY2xlYW51cF9m
dW5jXyhmdW5jLkdldENsZWFudXAoKSkgewotICB1cGJfaGFuZGxlcmF0dHJfc2V0aGFuZGxlcmRh
dGEoJmF0dHJfLCBmdW5jLkdldERhdGEoKSk7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgUmV0dXJuT2Y8
VD46OlJldHVybiBSZXR1cm47Ci0gIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydFBhcmFtczxGLCBU
Pjo6RnVuYyBDb252ZXJ0ZWRQYXJhbXNGdW5jOwotICB0eXBlZGVmIHR5cGVuYW1lIE1heWJlV3Jh
cFJldHVybjxDb252ZXJ0ZWRQYXJhbXNGdW5jLCBSZXR1cm4+OjpGdW5jCi0gICAgICBSZXR1cm5X
cmFwcGVkRnVuYzsKLSAgaGFuZGxlcl8gPSBSZXR1cm5XcmFwcGVkRnVuYygpLkNhbGw7Ci0KLSAg
LyogU2V0IGF0dHJpYnV0ZXMgYmFzZWQgb24gd2hhdCB0ZW1wbGF0ZXMgY2FuIHN0YXRpY2FsbHkg
dGVsbCB1cyBhYm91dCB0aGUKLSAgICogdXNlcidzIGZ1bmN0aW9uLiAqLwotCi0gIC8qIElmIHRo
ZSBvcmlnaW5hbCBmdW5jdGlvbiByZXR1cm5zIHZvaWQsIHRoZW4gd2Uga25vdyB0aGF0IHdlIHdy
YXBwZWQgaXQgdG8KLSAgICogYWx3YXlzIHJldHVybiBvay4gKi8KLSAgYm9vbCBhbHdheXNfb2sg
PSBpc19zYW1lPHR5cGVuYW1lIEY6OkZ1bmNJbmZvOjpSZXR1cm4sIHZvaWQ+Ojp2YWx1ZTsKLSAg
YXR0cl8uU2V0QWx3YXlzT2soYWx3YXlzX29rKTsKLQotICAvKiBDbG9zdXJlIHBhcmFtZXRlciBh
bmQgcmV0dXJuIHR5cGUuICovCi0gIGF0dHJfLlNldENsb3N1cmVUeXBlKFVuaXF1ZVB0ckZvclR5
cGU8dHlwZW5hbWUgRjo6RnVuY0luZm86OkNsb3N1cmU+KCkpOwotCi0gIC8qIFdlIHVzZSB0aGUg
Y2xvc3VyZSB0eXBlIChmcm9tIHRoZSBmaXJzdCBwYXJhbWV0ZXIpIGlmIHRoZSByZXR1cm4gdHlw
ZSBpcwotICAgKiB2b2lkIG9yIGJvb2wsIHNpbmNlIHRoZXNlIGFyZSB0aGUgdHdvIGNhc2VzIHdl
IHdyYXAgdG8gcmV0dXJuIHRoZSBjbG9zdXJlJ3MKLSAgICogdHlwZSBhbnl3YXkuCi0gICAqCi0g
ICAqIFRoaXMgaXMgYWxsIG5vbnNlbnNlIGZvciBub24gU1RBUlQqIGhhbmRsZXJzLCBidXQgaXQg
ZG9lc24ndCBtYXR0ZXIgYmVjYXVzZQotICAgKiBpbiB0aGF0IGNhc2UgdGhlIHZhbHVlIHdpbGwg
YmUgaWdub3JlZC4gKi8KLSAgdHlwZWRlZiB0eXBlbmFtZSBGaXJzdFVubGVzc1ZvaWRPckJvb2w8
dHlwZW5hbWUgRjo6RnVuY0luZm86OlJldHVybiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgRjo6RnVuY0luZm86OkNsb3N1cmU+Ojp2YWx1ZQotICAg
ICAgRWZmZWN0aXZlUmV0dXJuOwotICBhdHRyXy5TZXRSZXR1cm5DbG9zdXJlVHlwZShVbmlxdWVQ
dHJGb3JUeXBlPEVmZmVjdGl2ZVJldHVybj4oKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgot
aW5saW5lIEhhbmRsZXI8VD46On5IYW5kbGVyKCkgewotICBhc3NlcnQocmVnaXN0ZXJlZF8pOwot
fQotCi1pbmxpbmUgSGFuZGxlckF0dHJpYnV0ZXM6OkhhbmRsZXJBdHRyaWJ1dGVzKCkgeyB1cGJf
aGFuZGxlcmF0dHJfaW5pdCh0aGlzKTsgfQotaW5saW5lIEhhbmRsZXJBdHRyaWJ1dGVzOjp+SGFu
ZGxlckF0dHJpYnV0ZXMoKSB7IHVwYl9oYW5kbGVyYXR0cl91bmluaXQodGhpcyk7IH0KLWlubGlu
ZSBib29sIEhhbmRsZXJBdHRyaWJ1dGVzOjpTZXRIYW5kbGVyRGF0YShjb25zdCB2b2lkICpoZCkg
ewotICByZXR1cm4gdXBiX2hhbmRsZXJhdHRyX3NldGhhbmRsZXJkYXRhKHRoaXMsIGhkKTsKLX0K
LWlubGluZSBjb25zdCB2b2lkKiBIYW5kbGVyQXR0cmlidXRlczo6aGFuZGxlcl9kYXRhKCkgY29u
c3QgewotICByZXR1cm4gdXBiX2hhbmRsZXJhdHRyX2hhbmRsZXJkYXRhKHRoaXMpOwotfQotaW5s
aW5lIGJvb2wgSGFuZGxlckF0dHJpYnV0ZXM6OlNldENsb3N1cmVUeXBlKGNvbnN0IHZvaWQgKnR5
cGUpIHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyYXR0cl9zZXRjbG9zdXJldHlwZSh0aGlzLCB0eXBl
KTsKLX0KLWlubGluZSBjb25zdCB2b2lkKiBIYW5kbGVyQXR0cmlidXRlczo6Y2xvc3VyZV90eXBl
KCkgY29uc3QgewotICByZXR1cm4gdXBiX2hhbmRsZXJhdHRyX2Nsb3N1cmV0eXBlKHRoaXMpOwot
fQotaW5saW5lIGJvb2wgSGFuZGxlckF0dHJpYnV0ZXM6OlNldFJldHVybkNsb3N1cmVUeXBlKGNv
bnN0IHZvaWQgKnR5cGUpIHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyYXR0cl9zZXRyZXR1cm5jbG9z
dXJldHlwZSh0aGlzLCB0eXBlKTsKLX0KLWlubGluZSBjb25zdCB2b2lkKiBIYW5kbGVyQXR0cmli
dXRlczo6cmV0dXJuX2Nsb3N1cmVfdHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVy
YXR0cl9yZXR1cm5jbG9zdXJldHlwZSh0aGlzKTsKLX0KLWlubGluZSBib29sIEhhbmRsZXJBdHRy
aWJ1dGVzOjpTZXRBbHdheXNPayhib29sIGFsd2F5c19vaykgewotICByZXR1cm4gdXBiX2hhbmRs
ZXJhdHRyX3NldGFsd2F5c29rKHRoaXMsIGFsd2F5c19vayk7Ci19Ci1pbmxpbmUgYm9vbCBIYW5k
bGVyQXR0cmlidXRlczo6YWx3YXlzX29rKCkgY29uc3QgewotICByZXR1cm4gdXBiX2hhbmRsZXJh
dHRyX2Fsd2F5c29rKHRoaXMpOwotfQotCi1pbmxpbmUgQnVmZmVySGFuZGxlOjpCdWZmZXJIYW5k
bGUoKSB7IHVwYl9idWZoYW5kbGVfaW5pdCh0aGlzKTsgfQotaW5saW5lIEJ1ZmZlckhhbmRsZTo6
fkJ1ZmZlckhhbmRsZSgpIHsgdXBiX2J1ZmhhbmRsZV91bmluaXQodGhpcyk7IH0KLWlubGluZSBj
b25zdCBjaGFyKiBCdWZmZXJIYW5kbGU6OmJ1ZmZlcigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9i
dWZoYW5kbGVfYnVmKHRoaXMpOwotfQotaW5saW5lIHNpemVfdCBCdWZmZXJIYW5kbGU6Om9iamVj
dF9vZmZzZXQoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfYnVmaGFuZGxlX29iam9mcyh0aGlzKTsK
LX0KLWlubGluZSB2b2lkIEJ1ZmZlckhhbmRsZTo6U2V0QnVmZmVyKGNvbnN0IGNoYXIqIGJ1Ziwg
c2l6ZV90IG9mcykgewotICB1cGJfYnVmaGFuZGxlX3NldGJ1Zih0aGlzLCBidWYsIG9mcyk7Ci19
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgQnVmZmVySGFuZGxlOjpTZXRBdHRhY2hlZE9iamVj
dChjb25zdCBUKiBvYmopIHsKLSAgdXBiX2J1ZmhhbmRsZV9zZXRvYmoodGhpcywgb2JqLCBVbmlx
dWVQdHJGb3JUeXBlPFQ+KCkpOwotfQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1jb25zdCBUKiBCdWZm
ZXJIYW5kbGU6OkdldEF0dGFjaGVkT2JqZWN0KCkgY29uc3QgewotICByZXR1cm4gdXBiX2J1Zmhh
bmRsZV9vYmp0eXBlKHRoaXMpID09IFVuaXF1ZVB0ckZvclR5cGU8VD4oKQotICAgICAgPyBzdGF0
aWNfY2FzdDxjb25zdCBUICo+KHVwYl9idWZoYW5kbGVfb2JqKHRoaXMpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogTlVMTDsKLX0KLQotaW5saW5lIHJlZmZlZF9wdHI8SGFuZGxl
cnM+IEhhbmRsZXJzOjpOZXcoY29uc3QgTWVzc2FnZURlZiAqbSkgewotICB1cGJfaGFuZGxlcnMg
KmggPSB1cGJfaGFuZGxlcnNfbmV3KG0sICZoKTsKLSAgcmV0dXJuIHJlZmZlZF9wdHI8SGFuZGxl
cnM+KGgsICZoKTsKLX0KLWlubGluZSByZWZmZWRfcHRyPGNvbnN0IEhhbmRsZXJzPiBIYW5kbGVy
czo6TmV3RnJvemVuKAotICAgIGNvbnN0IE1lc3NhZ2VEZWYgKm0sIHVwYl9oYW5kbGVyc19jYWxs
YmFjayAqY2FsbGJhY2ssCi0gICAgY29uc3Qgdm9pZCAqY2xvc3VyZSkgewotICBjb25zdCB1cGJf
aGFuZGxlcnMgKmggPSB1cGJfaGFuZGxlcnNfbmV3ZnJvemVuKG0sICZoLCBjYWxsYmFjaywgY2xv
c3VyZSk7Ci0gIHJldHVybiByZWZmZWRfcHRyPGNvbnN0IEhhbmRsZXJzPihoLCAmaCk7Ci19Ci1p
bmxpbmUgY29uc3QgU3RhdHVzKiBIYW5kbGVyczo6c3RhdHVzKCkgewotICByZXR1cm4gdXBiX2hh
bmRsZXJzX3N0YXR1cyh0aGlzKTsKLX0KLWlubGluZSB2b2lkIEhhbmRsZXJzOjpDbGVhckVycm9y
KCkgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX2NsZWFyZXJyKHRoaXMpOwotfQotaW5saW5lIGJv
b2wgSGFuZGxlcnM6OkZyZWV6ZShTdGF0dXMgKnMpIHsKLSAgdXBiOjpIYW5kbGVycyogaCA9IHRo
aXM7Ci0gIHJldHVybiB1cGJfaGFuZGxlcnNfZnJlZXplKCZoLCAxLCBzKTsKLX0KLWlubGluZSBi
b29sIEhhbmRsZXJzOjpGcmVlemUoSGFuZGxlcnMgKmNvbnN0ICpoYW5kbGVycywgaW50IG4sIFN0
YXR1cyAqcykgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX2ZyZWV6ZShoYW5kbGVycywgbiwgcyk7
Ci19Ci1pbmxpbmUgYm9vbCBIYW5kbGVyczo6RnJlZXplKGNvbnN0IHN0ZDo6dmVjdG9yPEhhbmRs
ZXJzKj4mIGgsIFN0YXR1cyogc3RhdHVzKSB7Ci0gIHJldHVybiB1cGJfaGFuZGxlcnNfZnJlZXpl
KChIYW5kbGVycyogY29uc3QqKSZoWzBdLCBoLnNpemUoKSwgc3RhdHVzKTsKLX0KLWlubGluZSBj
b25zdCBNZXNzYWdlRGVmICpIYW5kbGVyczo6bWVzc2FnZV9kZWYoKSBjb25zdCB7Ci0gIHJldHVy
biB1cGJfaGFuZGxlcnNfbXNnZGVmKHRoaXMpOwotfQotaW5saW5lIGJvb2wgSGFuZGxlcnM6OkFk
ZENsZWFudXAodm9pZCAqcCwgdXBiX2hhbmRsZXJmcmVlICpmdW5jKSB7Ci0gIHJldHVybiB1cGJf
aGFuZGxlcnNfYWRkY2xlYW51cCh0aGlzLCBwLCBmdW5jKTsKLX0KLWlubGluZSBib29sIEhhbmRs
ZXJzOjpTZXRTdGFydE1lc3NhZ2VIYW5kbGVyKAotICAgIGNvbnN0IEhhbmRsZXJzOjpTdGFydE1l
c3NhZ2VIYW5kbGVyICZoYW5kbGVyKSB7Ci0gIGFzc2VydCghaGFuZGxlci5yZWdpc3RlcmVkXyk7
Ci0gIGhhbmRsZXIucmVnaXN0ZXJlZF8gPSB0cnVlOwotICBoYW5kbGVyLkFkZENsZWFudXAodGhp
cyk7Ci0gIHJldHVybiB1cGJfaGFuZGxlcnNfc2V0c3RhcnRtc2codGhpcywgaGFuZGxlci5oYW5k
bGVyXywgJmhhbmRsZXIuYXR0cl8pOwotfQotaW5saW5lIGJvb2wgSGFuZGxlcnM6OlNldEVuZE1l
c3NhZ2VIYW5kbGVyKAotICAgIGNvbnN0IEhhbmRsZXJzOjpFbmRNZXNzYWdlSGFuZGxlciAmaGFu
ZGxlcikgewotICBhc3NlcnQoIWhhbmRsZXIucmVnaXN0ZXJlZF8pOwotICBoYW5kbGVyLnJlZ2lz
dGVyZWRfID0gdHJ1ZTsKLSAgaGFuZGxlci5BZGRDbGVhbnVwKHRoaXMpOwotICByZXR1cm4gdXBi
X2hhbmRsZXJzX3NldGVuZG1zZyh0aGlzLCBoYW5kbGVyLmhhbmRsZXJfLCAmaGFuZGxlci5hdHRy
Xyk7Ci19Ci1pbmxpbmUgYm9vbCBIYW5kbGVyczo6U2V0U3RhcnRTdHJpbmdIYW5kbGVyKGNvbnN0
IEZpZWxkRGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdGFydFN0cmluZ0hhbmRsZXIgJmhhbmRsZXIpIHsKLSAgYXNzZXJ0KCFoYW5kbGVy
LnJlZ2lzdGVyZWRfKTsKLSAgaGFuZGxlci5yZWdpc3RlcmVkXyA9IHRydWU7Ci0gIGhhbmRsZXIu
QWRkQ2xlYW51cCh0aGlzKTsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyc19zZXRzdGFydHN0cih0aGlz
LCBmLCBoYW5kbGVyLmhhbmRsZXJfLCAmaGFuZGxlci5hdHRyXyk7Ci19Ci1pbmxpbmUgYm9vbCBI
YW5kbGVyczo6U2V0RW5kU3RyaW5nSGFuZGxlcihjb25zdCBGaWVsZERlZiAqZiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVuZEZpZWxkSGFuZGxlciAm
aGFuZGxlcikgewotICBhc3NlcnQoIWhhbmRsZXIucmVnaXN0ZXJlZF8pOwotICBoYW5kbGVyLnJl
Z2lzdGVyZWRfID0gdHJ1ZTsKLSAgaGFuZGxlci5BZGRDbGVhbnVwKHRoaXMpOwotICByZXR1cm4g
dXBiX2hhbmRsZXJzX3NldGVuZHN0cih0aGlzLCBmLCBoYW5kbGVyLmhhbmRsZXJfLCAmaGFuZGxl
ci5hdHRyXyk7Ci19Ci1pbmxpbmUgYm9vbCBIYW5kbGVyczo6U2V0U3RyaW5nSGFuZGxlcihjb25z
dCBGaWVsZERlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZ0hhbmRsZXImIGhhbmRsZXIpIHsKLSAgYXNzZXJ0KCFoYW5kbGVyLnJlZ2lzdGVy
ZWRfKTsKLSAgaGFuZGxlci5yZWdpc3RlcmVkXyA9IHRydWU7Ci0gIGhhbmRsZXIuQWRkQ2xlYW51
cCh0aGlzKTsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcodGhpcywgZiwgaGFuZGxl
ci5oYW5kbGVyXywgJmhhbmRsZXIuYXR0cl8pOwotfQotaW5saW5lIGJvb2wgSGFuZGxlcnM6OlNl
dFN0YXJ0U2VxdWVuY2VIYW5kbGVyKAotICAgIGNvbnN0IEZpZWxkRGVmICpmLCBjb25zdCBTdGFy
dEZpZWxkSGFuZGxlciAmaGFuZGxlcikgewotICBhc3NlcnQoIWhhbmRsZXIucmVnaXN0ZXJlZF8p
OwotICBoYW5kbGVyLnJlZ2lzdGVyZWRfID0gdHJ1ZTsKLSAgaGFuZGxlci5BZGRDbGVhbnVwKHRo
aXMpOwotICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldHN0YXJ0c2VxKHRoaXMsIGYsIGhhbmRsZXIu
aGFuZGxlcl8sICZoYW5kbGVyLmF0dHJfKTsKLX0KLWlubGluZSBib29sIEhhbmRsZXJzOjpTZXRT
dGFydFN1Yk1lc3NhZ2VIYW5kbGVyKAotICAgIGNvbnN0IEZpZWxkRGVmICpmLCBjb25zdCBTdGFy
dEZpZWxkSGFuZGxlciAmaGFuZGxlcikgewotICBhc3NlcnQoIWhhbmRsZXIucmVnaXN0ZXJlZF8p
OwotICBoYW5kbGVyLnJlZ2lzdGVyZWRfID0gdHJ1ZTsKLSAgaGFuZGxlci5BZGRDbGVhbnVwKHRo
aXMpOwotICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3VibXNnKHRoaXMsIGYsIGhhbmRs
ZXIuaGFuZGxlcl8sICZoYW5kbGVyLmF0dHJfKTsKLX0KLWlubGluZSBib29sIEhhbmRsZXJzOjpT
ZXRFbmRTdWJNZXNzYWdlSGFuZGxlcihjb25zdCBGaWVsZERlZiAqZiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFbmRGaWVsZEhhbmRsZXIgJmhh
bmRsZXIpIHsKLSAgYXNzZXJ0KCFoYW5kbGVyLnJlZ2lzdGVyZWRfKTsKLSAgaGFuZGxlci5yZWdp
c3RlcmVkXyA9IHRydWU7Ci0gIGhhbmRsZXIuQWRkQ2xlYW51cCh0aGlzKTsKLSAgcmV0dXJuIHVw
Yl9oYW5kbGVyc19zZXRlbmRzdWJtc2codGhpcywgZiwgaGFuZGxlci5oYW5kbGVyXywgJmhhbmRs
ZXIuYXR0cl8pOwotfQotaW5saW5lIGJvb2wgSGFuZGxlcnM6OlNldEVuZFNlcXVlbmNlSGFuZGxl
cihjb25zdCBGaWVsZERlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRW5kRmllbGRIYW5kbGVyICZoYW5kbGVyKSB7Ci0gIGFzc2VydCghaGFu
ZGxlci5yZWdpc3RlcmVkXyk7Ci0gIGhhbmRsZXIucmVnaXN0ZXJlZF8gPSB0cnVlOwotICBoYW5k
bGVyLkFkZENsZWFudXAodGhpcyk7Ci0gIHJldHVybiB1cGJfaGFuZGxlcnNfc2V0ZW5kc2VxKHRo
aXMsIGYsIGhhbmRsZXIuaGFuZGxlcl8sICZoYW5kbGVyLmF0dHJfKTsKLX0KLWlubGluZSBib29s
IEhhbmRsZXJzOjpTZXRTdWJIYW5kbGVycyhjb25zdCBGaWVsZERlZiAqZiwgY29uc3QgSGFuZGxl
cnMgKnN1YikgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldHN1YmhhbmRsZXJzKHRoaXMsIGYs
IHN1Yik7Ci19Ci1pbmxpbmUgY29uc3QgSGFuZGxlcnMgKkhhbmRsZXJzOjpHZXRTdWJIYW5kbGVy
cyhjb25zdCBGaWVsZERlZiAqZikgY29uc3QgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX2dldHN1
YmhhbmRsZXJzKHRoaXMsIGYpOwotfQotaW5saW5lIGNvbnN0IEhhbmRsZXJzICpIYW5kbGVyczo6
R2V0U3ViSGFuZGxlcnMoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCkgY29uc3QgewotICByZXR1cm4g
dXBiX2hhbmRsZXJzX2dldHN1YmhhbmRsZXJzX3NlbCh0aGlzLCBzZWwpOwotfQotaW5saW5lIGJv
b2wgSGFuZGxlcnM6OkdldFNlbGVjdG9yKGNvbnN0IEZpZWxkRGVmICpmLCBIYW5kbGVyczo6VHlw
ZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJzOjpTZWxl
Y3RvciAqcykgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX2dldHNlbGVjdG9yKGYsIHR5cGUsIHMp
OwotfQotaW5saW5lIEhhbmRsZXJzOjpTZWxlY3RvciBIYW5kbGVyczo6R2V0RW5kU2VsZWN0b3Io
SGFuZGxlcnM6OlNlbGVjdG9yIHN0YXJ0KSB7Ci0gIHJldHVybiB1cGJfaGFuZGxlcnNfZ2V0ZW5k
c2VsZWN0b3Ioc3RhcnQpOwotfQotaW5saW5lIEhhbmRsZXJzOjpHZW5lcmljRnVuY3Rpb24gKkhh
bmRsZXJzOjpHZXRIYW5kbGVyKAotICAgIEhhbmRsZXJzOjpTZWxlY3RvciBzZWxlY3Rvcikgewot
ICByZXR1cm4gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXIodGhpcywgc2VsZWN0b3IpOwotfQotaW5s
aW5lIGNvbnN0IHZvaWQgKkhhbmRsZXJzOjpHZXRIYW5kbGVyRGF0YShIYW5kbGVyczo6U2VsZWN0
b3Igc2VsZWN0b3IpIHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyc19nZXRoYW5kbGVyZGF0YSh0aGlz
LCBzZWxlY3Rvcik7Ci19Ci0KLWlubGluZSBCeXRlc0hhbmRsZXI6OkJ5dGVzSGFuZGxlcigpIHsK
LSAgdXBiX2J5dGVzaGFuZGxlcl9pbml0KHRoaXMpOwotfQotCi1pbmxpbmUgQnl0ZXNIYW5kbGVy
Ojp+Qnl0ZXNIYW5kbGVyKCkge30KLQotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotCi0jZW5kaWYg
IC8qIF9fY3BsdXNwbHVzICovCi0KLQotI3VuZGVmIFVQQl9UV09fMzJCSVRfVFlQRVMKLSN1bmRl
ZiBVUEJfVFdPXzY0QklUX1RZUEVTCi0jdW5kZWYgVVBCX0lOVDMyX1QKLSN1bmRlZiBVUEJfVUlO
VDMyX1QKLSN1bmRlZiBVUEJfSU5UMzJBTFRfVAotI3VuZGVmIFVQQl9VSU5UMzJBTFRfVAotI3Vu
ZGVmIFVQQl9JTlQ2NF9UCi0jdW5kZWYgVVBCX1VJTlQ2NF9UCi0jdW5kZWYgVVBCX0lOVDY0QUxU
X1QKLSN1bmRlZiBVUEJfVUlOVDY0QUxUX1QKLQotI2VuZGlmICAvKiBVUEJfSEFORExFUlNfSU5M
X0hfICovCi0KLSNlbmRpZiAgLyogVVBCX0hBTkRMRVJTX0ggKi8KLS8qCi0qKiB1cGI6OkVudmly
b25tZW50ICh1cGJfZW52KQotKioKLSoqIEEgdXBiOjpFbnZpcm9ubWVudCBwcm92aWRlcyBhIG1l
YW5zIGZvciBpbmplY3RpbmcgbWFsbG9jIGFuZCBhbgotKiogZXJyb3ItcmVwb3J0aW5nIGNhbGxi
YWNrIGludG8gZW5jb2RlcnMvZGVjb2RlcnMuICBUaGlzIGFsbG93cyB0aGVtIHRvIGJlCi0qKiBp
bmRlcGVuZGVudCBvZiBuZWFybHkgYWxsIGFzc3VtcHRpb25zIGFib3V0IHRoZWlyIGFjdHVhbCBl
bnZpcm9ubWVudC4KLSoqCi0qKiBJdCBpcyBhbHNvIGEgY29udGFpbmVyIGZvciBhbGxvY2F0aW5n
IHRoZSBlbmNvZGVycy9kZWNvZGVycyB0aGVtc2VsdmVzIHRoYXQKLSoqIGluc3VsYXRlcyBjbGll
bnRzIGZyb20ga25vd2luZyB0aGVpciBhY3R1YWwgc2l6ZS4gIFRoaXMgcHJvdmlkZXMgQUJJCi0q
KiBjb21wYXRpYmlsaXR5IGV2ZW4gaWYgdGhlIHNpemUgb2YgdGhlIG9iamVjdHMgY2hhbmdlLiAg
QW5kIHRoaXMgYWxsb3dzIHRoZQotKiogc3RydWN0dXJlIGRlZmluaXRpb25zIHRvIGJlIGluIHRo
ZSAuYyBmaWxlcyBpbnN0ZWFkIG9mIHRoZSAuaCBmaWxlcywgbWFraW5nCi0qKiB0aGUgLmggZmls
ZXMgc21hbGxlciBhbmQgbW9yZSByZWFkYWJsZS4KLSovCi0KLQotI2lmbmRlZiBVUEJfRU5WX0hf
Ci0jZGVmaW5lIFVQQl9FTlZfSF8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1uYW1lc3BhY2UgdXBi
IHsKLWNsYXNzIEVudmlyb25tZW50OwotY2xhc3MgU2VlZGVkQWxsb2NhdG9yOwotfQotI2VuZGlm
Ci0KLVVQQl9ERUNMQVJFX1RZUEUodXBiOjpFbnZpcm9ubWVudCwgdXBiX2VudikKLVVQQl9ERUNM
QVJFX1RZUEUodXBiOjpTZWVkZWRBbGxvY2F0b3IsIHVwYl9zZWVkZWRhbGxvYykKLQotdHlwZWRl
ZiB2b2lkICp1cGJfYWxsb2NfZnVuYyh2b2lkICp1ZCwgdm9pZCAqcHRyLCBzaXplX3Qgb2xkc2l6
ZSwgc2l6ZV90IHNpemUpOwotdHlwZWRlZiB2b2lkIHVwYl9jbGVhbnVwX2Z1bmModm9pZCAqdWQp
OwotdHlwZWRlZiBib29sIHVwYl9lcnJvcl9mdW5jKHZvaWQgKnVkLCBjb25zdCB1cGJfc3RhdHVz
ICpzdGF0dXMpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogQW4gZW52aXJvbm1lbnQgaXMg
Km5vdCogdGhyZWFkLXNhZmUuICovCi1jbGFzcyB1cGI6OkVudmlyb25tZW50IHsKLSBwdWJsaWM6
Ci0gIEVudmlyb25tZW50KCk7Ci0gIH5FbnZpcm9ubWVudCgpOwotCi0gIC8qIFNldCBhIGN1c3Rv
bSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGVudmlyb25tZW50LiAgTWF5IE9O
TFkKLSAgICogYmUgY2FsbGVkIGJlZm9yZSBhbnkgY2FsbHMgdG8gTWFsbG9jKCkvUmVhbGxvYygp
L0FkZENsZWFudXAoKSBiZWxvdy4KLSAgICogSWYgdGhpcyBpcyBub3QgY2FsbGVkLCB0aGUgc3lz
dGVtIHJlYWxsb2MoKSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQuCi0gICAqIFRoZSBnaXZlbiB1c2Vy
IHBvaW50ZXIgInVkIiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbi4K
LSAgICoKLSAgICogVGhlIGFsbG9jYXRpb24gZnVuY3Rpb24gd2lsbCBub3QgcmVjZWl2ZSBjb3Jy
ZXNwb25kaW5nICJmcmVlIiBjYWxscy4gIGl0Ci0gICAqIG11c3QgZW5zdXJlIHRoYXQgdGhlIG1l
bW9yeSBpcyB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBFbnZpcm9ubWVudCwKLSAgICog
YnV0IGl0IG1heSBiZSByZWNsYWltZWQgYW55IHRpbWUgdGhlcmVhZnRlci4gIFRoZSBsaWtlbHkg
dXNhZ2UgaXMgdGhhdAotICAgKiAidWQiIHBvaW50cyB0byBhIHN0YXRlZnVsIGFsbG9jYXRvciwg
YW5kIHRoYXQgdGhlIGFsbG9jYXRvciBmcmVlcyBhbGwKLSAgICogbWVtb3J5LCBhcmVuYS1zdHls
ZSwgd2hlbiBpdCBpcyBkZXN0cm95ZWQuICBJbiB0aGlzIGNhc2UgdGhlIGFsbG9jYXRvciBtdXN0
Ci0gICAqIG91dGxpdmUgdGhlIEVudmlyb25tZW50LiAgQW5vdGhlciBwb3NzaWJpbGl0eSBpcyB0
aGF0IHRoZSBhbGxvY2F0aW9uCi0gICAqIGZ1bmN0aW9uIHJldHVybnMgR0MtYWJsZSBtZW1vcnkg
dGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIEdDLXJvb3RlZCBmb3IgdGhlCi0gICAqIGxpZmUgb2Yg
dGhlIEVudmlyb25tZW50LiAqLwotICB2b2lkIFNldEFsbG9jYXRpb25GdW5jdGlvbih1cGJfYWxs
b2NfZnVuYyogYWxsb2MsIHZvaWQqIHVkKTsKLQotICB0ZW1wbGF0ZTxjbGFzcyBUPgotICB2b2lk
IFNldEFsbG9jYXRvcihUKiBhbGxvY2F0b3IpIHsKLSAgICBTZXRBbGxvY2F0aW9uRnVuY3Rpb24o
YWxsb2NhdG9yLT5HZXRBbGxvY2F0aW9uRnVuY3Rpb24oKSwgYWxsb2NhdG9yKTsKLSAgfQotCi0g
IC8qIFNldCBhIGN1c3RvbSBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uICovCi0gIHZvaWQgU2V0
RXJyb3JGdW5jdGlvbih1cGJfZXJyb3JfZnVuYyogZnVuYywgdm9pZCogdWQpOwotCi0gIC8qIFNl
dCB0aGUgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uIHRvIHNpbXBseSBjb3B5IHRoZSBzdGF0dXMg
dG8gdGhlIGdpdmVuCi0gICAqIHN0YXR1cyBhbmQgYWJvcnQuICovCi0gIHZvaWQgUmVwb3J0RXJy
b3JzVG8oU3RhdHVzKiBzdGF0dXMpOwotCi0gIC8qIFJldHVybnMgdHJ1ZSBpZiBhbGwgYWxsb2Nh
dGlvbnMgYW5kIEFkZENsZWFudXAoKSBjYWxscyBoYXZlIHN1Y2NlZWRlZCwKLSAgICogYW5kIG5v
IGVycm9ycyB3ZXJlIHJlcG9ydGVkIHdpdGggUmVwb3J0RXJyb3IoKSAoZXhjZXB0IG9uZXMgdGhh
dCByZWNvdmVyZWQKLSAgICogc3VjY2Vzc2Z1bGx5KS4gKi8KLSAgYm9vbCBvaygpIGNvbnN0Owot
Ci0gIC8qIEZ1bmN0aW9ucyBmb3IgdXNlIGJ5IGVuY29kZXJzL2RlY29kZXJzLiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gIC8qIFJlcG9ydHMgYW4gZXJyb3IgdG8gdGhp
cyBlbnZpcm9ubWVudCdzIGNhbGxiYWNrLCByZXR1cm5pbmcgdHJ1ZSBpZgotICAgKiB0aGUgY2Fs
bGVyIHNob3VsZCB0cnkgdG8gcmVjb3Zlci4gKi8KLSAgYm9vbCBSZXBvcnRFcnJvcihjb25zdCBT
dGF0dXMqIHN0YXR1cyk7Ci0KLSAgLyogQWxsb2NhdGUgbWVtb3J5LiAgVXNlcyB0aGUgZW52aXJv
bm1lbnQncyBhbGxvY2F0aW9uIGZ1bmN0aW9uLgotICAgKgotICAgKiBUaGVyZSBpcyBubyBuZWVk
IHRvIGZyZWUoKS4gQWxsIG1lbW9yeSB3aWxsIGJlIGZyZWVkIGF1dG9tYXRpY2FsbHksIGJ1dCBp
cwotICAgKiBndWFyYW50ZWVkIHRvIG91dGxpdmUgdGhlIEVudmlyb25tZW50LiAqLwotICB2b2lk
KiBNYWxsb2Moc2l6ZV90IHNpemUpOwotCi0gIC8qIFJlYWxsb2NhdGUgbWVtb3J5LiAgUHJlc2Vy
dmVzICJvbGRzaXplIiBieXRlcyBmcm9tIHRoZSBleGlzdGluZyBidWZmZXIKLSAgICogUmVxdWly
ZXM6IG9sZHNpemUgPD0gZXhpc3Rpbmdfc2l6ZS4KLSAgICoKLSAgICogVE9ETyhoYWJlcm1hbik6
IHNob3VsZCB3ZSBhbHNvIGVuZm9yY2UgdGhhdCBvbGRzaXplIDw9IHNpemU/ICovCi0gIHZvaWQq
IFJlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUpOwotCi0gIC8q
IEFkZCBhIGNsZWFudXAgZnVuY3Rpb24gdG8gcnVuIHdoZW4gdGhlIGVudmlyb25tZW50IGlzIGRl
c3Ryb3llZC4KLSAgICogUmV0dXJucyBmYWxzZSBvbiBvdXQtb2YtbWVtb3J5LgotICAgKgotICAg
KiBUaGUgZmlyc3QgY2FsbCB0byBBZGRDbGVhbnVwKCkgYWZ0ZXIgU2V0QWxsb2NhdGlvbkZ1bmN0
aW9uKCkgaXMgZ3VhcmFudGVlZAotICAgKiB0byByZXR1cm4gdHJ1ZSAtLSB0aGlzIG1ha2VzIGl0
IHBvc3NpYmxlIHRvIHJvYnVzdGx5IHNldCBhIGNsZWFudXAgaGFuZGxlcgotICAgKiBmb3IgYSBj
dXN0b20gYWxsb2NhdGlvbiBmdW5jdGlvbi4gKi8KLSAgYm9vbCBBZGRDbGVhbnVwKHVwYl9jbGVh
bnVwX2Z1bmMqIGZ1bmMsIHZvaWQqIHVkKTsKLQotICAvKiBUb3RhbCBudW1iZXIgb2YgYnl0ZXMg
dGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkLiAgSXQgaXMgdW5kZWZpbmVkIHdoYXQKLSAgICogUmVh
bGxvYygpIGRvZXMgdG8gdGhpcyBjb3VudGVyLiAqLwotICBzaXplX3QgQnl0ZXNBbGxvY2F0ZWQo
KSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIFVQQl9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRW52
aXJvbm1lbnQpCi0KLSNlbHNlCi1zdHJ1Y3QgdXBiX2VudiB7Ci0jZW5kaWYgIC8qIF9fY3BsdXNw
bHVzICovCi0KLSAgYm9vbCBva187Ci0gIHNpemVfdCBieXRlc19hbGxvY2F0ZWQ7Ci0KLSAgLyog
QWxsb2MgZnVuY3Rpb24uICovCi0gIHVwYl9hbGxvY19mdW5jICphbGxvYzsKLSAgdm9pZCAqYWxs
b2NfdWQ7Ci0KLSAgLyogRXJyb3ItcmVwb3J0aW5nIGZ1bmN0aW9uLiAqLwotICB1cGJfZXJyb3Jf
ZnVuYyAqZXJyOwotICB2b2lkICplcnJfdWQ7Ci0KLSAgLyogVXNlcmRhdGEgZm9yIGRlZmF1bHQg
YWxsb2MgZnVuYy4gKi8KLSAgdm9pZCAqZGVmYXVsdF9hbGxvY191ZDsKLQotICAvKiBDbGVhbnVw
IGVudHJpZXMuICBQb2ludGVyIHRvIGEgY2xlYW51cF9lbnQsIGRlZmluZWQgaW4gZW52LmMgKi8K
LSAgdm9pZCAqY2xlYW51cF9oZWFkOwotCi0gIC8qIEZvciBmdXR1cmUgZXhwYW5zaW9uLCBzaW5j
ZSB0aGUgc2l6ZSBvZiB0aGlzIHN0cnVjdCBpcyBleHBvc2VkIHRvIHVzZXJzLiAqLwotICB2b2lk
ICpmdXR1cmUxOwotICB2b2lkICpmdXR1cmUyOwotfTsKLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0K
LXZvaWQgdXBiX2Vudl9pbml0KHVwYl9lbnYgKmUpOwotdm9pZCB1cGJfZW52X3VuaW5pdCh1cGJf
ZW52ICplKTsKLXZvaWQgdXBiX2Vudl9zZXRhbGxvY2Z1bmModXBiX2VudiAqZSwgdXBiX2FsbG9j
X2Z1bmMgKmZ1bmMsIHZvaWQgKnVkKTsKLXZvaWQgdXBiX2Vudl9zZXRlcnJvcmZ1bmModXBiX2Vu
diAqZSwgdXBiX2Vycm9yX2Z1bmMgKmZ1bmMsIHZvaWQgKnVkKTsKLXZvaWQgdXBiX2Vudl9yZXBv
cnRlcnJvcnN0byh1cGJfZW52ICplLCB1cGJfc3RhdHVzICpzdGF0dXMpOwotYm9vbCB1cGJfZW52
X29rKGNvbnN0IHVwYl9lbnYgKmUpOwotYm9vbCB1cGJfZW52X3JlcG9ydGVycm9yKHVwYl9lbnYg
KmUsIGNvbnN0IHVwYl9zdGF0dXMgKnN0YXR1cyk7Ci12b2lkICp1cGJfZW52X21hbGxvYyh1cGJf
ZW52ICplLCBzaXplX3Qgc2l6ZSk7Ci12b2lkICp1cGJfZW52X3JlYWxsb2ModXBiX2VudiAqZSwg
dm9pZCAqcHRyLCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUpOwotYm9vbCB1cGJfZW52X2Fk
ZGNsZWFudXAodXBiX2VudiAqZSwgdXBiX2NsZWFudXBfZnVuYyAqZnVuYywgdm9pZCAqdWQpOwot
c2l6ZV90IHVwYl9lbnZfYnl0ZXNhbGxvY2F0ZWQoY29uc3QgdXBiX2VudiAqZSk7Ci0KLVVQQl9F
TkRfRVhURVJOX0MKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIEFuIGFsbG9jYXRvciB0aGF0
IGFsbG9jYXRlcyBmcm9tIGFuIGluaXRpYWwgbWVtb3J5IHJlZ2lvbiAobGlrZWx5IHRoZSBzdGFj
aykKLSAqIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYW5vdGhlciBhbGxvY2F0b3IuICovCi1jbGFz
cyB1cGI6OlNlZWRlZEFsbG9jYXRvciB7Ci0gcHVibGljOgotICBTZWVkZWRBbGxvY2F0b3Iodm9p
ZCAqbWVtLCBzaXplX3QgbGVuKTsKLSAgflNlZWRlZEFsbG9jYXRvcigpOwotCi0gIC8qIFNldCBh
IGN1c3RvbSBmYWxsYmFjayBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGFsbG9j
YXRvciwgdG8gdXNlCi0gICAqIG9uY2UgdGhlIGluaXRpYWwgcmVnaW9uIHJ1bnMgb3V0LgotICAg
KgotICAgKiBNYXkgT05MWSBiZSBjYWxsZWQgYmVmb3JlIEdldEFsbG9jYXRpb25GdW5jdGlvbigp
LiAgSWYgdGhpcyBpcyBub3QKLSAgICogY2FsbGVkLCB0aGUgc3lzdGVtIHJlYWxsb2MoKSB3aWxs
IGJlIHRoZSBmYWxsYmFjayBhbGxvY2F0b3IuICovCi0gIHZvaWQgU2V0RmFsbGJhY2tBbGxvY2F0
b3IodXBiX2FsbG9jX2Z1bmMgKmFsbG9jLCB2b2lkICp1ZCk7Ci0KLSAgLyogR2V0cyB0aGUgYWxs
b2NhdGlvbiBmdW5jdGlvbiBmb3IgdGhpcyBhbGxvY2F0b3IuICovCi0gIHVwYl9hbGxvY19mdW5j
KiBHZXRBbGxvY2F0aW9uRnVuY3Rpb24oKTsKLQotIHByaXZhdGU6Ci0gIFVQQl9ESVNBTExPV19D
T1BZX0FORF9BU1NJR04oU2VlZGVkQWxsb2NhdG9yKQotCi0jZWxzZQotc3RydWN0IHVwYl9zZWVk
ZWRhbGxvYyB7Ci0jZW5kaWYgIC8qIF9fY3BsdXNwbHVzICovCi0KLSAgLyogRmFsbGJhY2sgYWxs
b2MgZnVuY3Rpb24uICAqLwotICB1cGJfYWxsb2NfZnVuYyAqYWxsb2M7Ci0gIHVwYl9jbGVhbnVw
X2Z1bmMgKmFsbG9jX2NsZWFudXA7Ci0gIHZvaWQgKmFsbG9jX3VkOwotICBib29sIG5lZWRfY2xl
YW51cDsKLSAgYm9vbCByZXR1cm5lZF9hbGxvY2Z1bmM7Ci0KLSAgLyogVXNlcmRhdGEgZm9yIGRl
ZmF1bHQgYWxsb2MgZnVuYy4gKi8KLSAgdm9pZCAqZGVmYXVsdF9hbGxvY191ZDsKLQotICAvKiBQ
b2ludGVycyBmb3IgdGhlIGluaXRpYWwgbWVtb3J5IHJlZ2lvbi4gKi8KLSAgY2hhciAqbWVtX2Jh
c2U7Ci0gIGNoYXIgKm1lbV9wdHI7Ci0gIGNoYXIgKm1lbV9saW1pdDsKLQotICAvKiBGb3IgZnV0
dXJlIGV4cGFuc2lvbiwgc2luY2UgdGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3QgaXMgZXhwb3NlZCB0
byB1c2Vycy4gKi8KLSAgdm9pZCAqZnV0dXJlMTsKLSAgdm9pZCAqZnV0dXJlMjsKLX07Ci0KLVVQ
Ql9CRUdJTl9FWFRFUk5fQwotCi12b2lkIHVwYl9zZWVkZWRhbGxvY19pbml0KHVwYl9zZWVkZWRh
bGxvYyAqYSwgdm9pZCAqbWVtLCBzaXplX3QgbGVuKTsKLXZvaWQgdXBiX3NlZWRlZGFsbG9jX3Vu
aW5pdCh1cGJfc2VlZGVkYWxsb2MgKmEpOwotdm9pZCB1cGJfc2VlZGVkYWxsb2Nfc2V0ZmFsbGJh
Y2thbGxvYyh1cGJfc2VlZGVkYWxsb2MgKmEsIHVwYl9hbGxvY19mdW5jICpmdW5jLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1ZCk7Ci11cGJfYWxsb2NfZnVu
YyAqdXBiX3NlZWRlZGFsbG9jX2dldGFsbG9jZnVuYyh1cGJfc2VlZGVkYWxsb2MgKmEpOwotCi1V
UEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1uYW1lc3BhY2UgdXBiIHsK
LQotaW5saW5lIEVudmlyb25tZW50OjpFbnZpcm9ubWVudCgpIHsKLSAgdXBiX2Vudl9pbml0KHRo
aXMpOwotfQotaW5saW5lIEVudmlyb25tZW50Ojp+RW52aXJvbm1lbnQoKSB7Ci0gIHVwYl9lbnZf
dW5pbml0KHRoaXMpOwotfQotaW5saW5lIHZvaWQgRW52aXJvbm1lbnQ6OlNldEFsbG9jYXRpb25G
dW5jdGlvbih1cGJfYWxsb2NfZnVuYyAqYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVkKSB7Ci0gIHVwYl9lbnZfc2V0YWxsb2NmdW5j
KHRoaXMsIGFsbG9jLCB1ZCk7Ci19Ci1pbmxpbmUgdm9pZCBFbnZpcm9ubWVudDo6U2V0RXJyb3JG
dW5jdGlvbih1cGJfZXJyb3JfZnVuYyAqZnVuYywgdm9pZCAqdWQpIHsKLSAgdXBiX2Vudl9zZXRl
cnJvcmZ1bmModGhpcywgZnVuYywgdWQpOwotfQotaW5saW5lIHZvaWQgRW52aXJvbm1lbnQ6OlJl
cG9ydEVycm9yc1RvKFN0YXR1cyogc3RhdHVzKSB7Ci0gIHVwYl9lbnZfcmVwb3J0ZXJyb3JzdG8o
dGhpcywgc3RhdHVzKTsKLX0KLWlubGluZSBib29sIEVudmlyb25tZW50OjpvaygpIGNvbnN0IHsK
LSAgcmV0dXJuIHVwYl9lbnZfb2sodGhpcyk7Ci19Ci1pbmxpbmUgYm9vbCBFbnZpcm9ubWVudDo6
UmVwb3J0RXJyb3IoY29uc3QgU3RhdHVzKiBzdGF0dXMpIHsKLSAgcmV0dXJuIHVwYl9lbnZfcmVw
b3J0ZXJyb3IodGhpcywgc3RhdHVzKTsKLX0KLWlubGluZSB2b2lkICpFbnZpcm9ubWVudDo6TWFs
bG9jKHNpemVfdCBzaXplKSB7Ci0gIHJldHVybiB1cGJfZW52X21hbGxvYyh0aGlzLCBzaXplKTsK
LX0KLWlubGluZSB2b2lkICpFbnZpcm9ubWVudDo6UmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBv
bGRzaXplLCBzaXplX3Qgc2l6ZSkgewotICByZXR1cm4gdXBiX2Vudl9yZWFsbG9jKHRoaXMsIHB0
ciwgb2xkc2l6ZSwgc2l6ZSk7Ci19Ci1pbmxpbmUgYm9vbCBFbnZpcm9ubWVudDo6QWRkQ2xlYW51
cCh1cGJfY2xlYW51cF9mdW5jICpmdW5jLCB2b2lkICp1ZCkgewotICByZXR1cm4gdXBiX2Vudl9h
ZGRjbGVhbnVwKHRoaXMsIGZ1bmMsIHVkKTsKLX0KLWlubGluZSBzaXplX3QgRW52aXJvbm1lbnQ6
OkJ5dGVzQWxsb2NhdGVkKCkgY29uc3QgewotICByZXR1cm4gdXBiX2Vudl9ieXRlc2FsbG9jYXRl
ZCh0aGlzKTsKLX0KLQotaW5saW5lIFNlZWRlZEFsbG9jYXRvcjo6U2VlZGVkQWxsb2NhdG9yKHZv
aWQgKm1lbSwgc2l6ZV90IGxlbikgewotICB1cGJfc2VlZGVkYWxsb2NfaW5pdCh0aGlzLCBtZW0s
IGxlbik7Ci19Ci1pbmxpbmUgU2VlZGVkQWxsb2NhdG9yOjp+U2VlZGVkQWxsb2NhdG9yKCkgewot
ICB1cGJfc2VlZGVkYWxsb2NfdW5pbml0KHRoaXMpOwotfQotaW5saW5lIHZvaWQgU2VlZGVkQWxs
b2NhdG9yOjpTZXRGYWxsYmFja0FsbG9jYXRvcih1cGJfYWxsb2NfZnVuYyAqYWxsb2MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVkKSB7
Ci0gIHVwYl9zZWVkZWRhbGxvY19zZXRmYWxsYmFja2FsbG9jKHRoaXMsIGFsbG9jLCB1ZCk7Ci19
Ci1pbmxpbmUgdXBiX2FsbG9jX2Z1bmMgKlNlZWRlZEFsbG9jYXRvcjo6R2V0QWxsb2NhdGlvbkZ1
bmN0aW9uKCkgewotICByZXR1cm4gdXBiX3NlZWRlZGFsbG9jX2dldGFsbG9jZnVuYyh0aGlzKTsK
LX0KLQotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotCi0jZW5kaWYgIC8qIF9fY3BsdXNwbHVzICov
Ci0KLSNlbmRpZiAgLyogVVBCX0VOVl9IXyAqLwotLyoKLSoqIHVwYjo6U2luayAodXBiX3Npbmsp
Ci0qKiB1cGI6OkJ5dGVzU2luayAodXBiX2J5dGVzc2luaykKLSoqCi0qKiBBIHVwYl9zaW5rIGlz
IGFuIG9iamVjdCB0aGF0IGJpbmRzIGEgdXBiX2hhbmRsZXJzIG9iamVjdCB0byBzb21lIHJ1bnRp
bWUKLSoqIHN0YXRlLiAgSXQgaXMgdGhlIG9iamVjdCB0aGF0IGNhbiBhY3R1YWxseSByZWNlaXZl
IGRhdGEgdmlhIHRoZSB1cGJfaGFuZGxlcnMKLSoqIGludGVyZmFjZS4KLSoqCi0qKiBVbmxpa2Ug
dXBiX2RlZiBhbmQgdXBiX2hhbmRsZXJzLCB1cGJfc2luayBpcyBuZXZlciBmcm96ZW4sIGltbXV0
YWJsZSwgb3IKLSoqIHRocmVhZC1zYWZlLiAgWW91IGNhbiBjcmVhdGUgYXMgbWFueSBvZiB0aGVt
IGFzIHlvdSB3YW50LCBidXQgZWFjaCBvbmUgbWF5Ci0qKiBvbmx5IGJlIHVzZWQgaW4gYSBzaW5n
bGUgdGhyZWFkIGF0IGEgdGltZS4KLSoqCi0qKiBJZiB3ZSBjb21wYXJlIHdpdGggY2xhc3MtYmFz
ZWQgT09QLCBhIHlvdSBjYW4gdGhpbmsgb2YgYSB1cGJfZGVmIGFzIGFuCi0qKiBhYnN0cmFjdCBi
YXNlIGNsYXNzLCBhIHVwYl9oYW5kbGVycyBhcyBhIGNvbmNyZXRlIGRlcml2ZWQgY2xhc3MsIGFu
ZCBhCi0qKiB1cGJfc2luayBhcyBhbiBvYmplY3QgKGNsYXNzIGluc3RhbmNlKS4KLSovCi0KLSNp
Zm5kZWYgVVBCX1NJTktfSAotI2RlZmluZSBVUEJfU0lOS19ICi0KLQotI2lmZGVmIF9fY3BsdXNw
bHVzCi1uYW1lc3BhY2UgdXBiIHsKLWNsYXNzIEJ1ZmZlclNvdXJjZTsKLWNsYXNzIEJ5dGVzU2lu
azsKLWNsYXNzIFNpbms7Ci19Ci0jZW5kaWYKLQotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6OkJ1ZmZl
clNvdXJjZSwgdXBiX2J1ZnNyYykKLVVQQl9ERUNMQVJFX1RZUEUodXBiOjpCeXRlc1NpbmssIHVw
Yl9ieXRlc3NpbmspCi1VUEJfREVDTEFSRV9UWVBFKHVwYjo6U2luaywgdXBiX3NpbmspCi0KLSNp
ZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBBIHVwYjo6U2luayBpcyBhbiBvYmplY3QgdGhhdCBiaW5k
cyBhIHVwYjo6SGFuZGxlcnMgb2JqZWN0IHRvIHNvbWUgcnVudGltZQotICogc3RhdGUuICBJdCBy
ZXByZXNlbnRzIGFuIGVuZHBvaW50IHRvIHdoaWNoIGRhdGEgY2FuIGJlIHNlbnQuCi0gKgotICog
VE9ETyhoYWJlcm1hbik6IHJpZ2h0IG5vdyBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIHRha2Ugc2Vs
ZWN0b3JzLiAgU2hvdWxkIHRoZXkKLSAqIHRha2Ugc2VsZWN0b3JiYXNlIGluc3RlYWQ/Ci0gKgot
ICogaWUuIGluc3RlYWQgb2YgY2FsbGluZzoKLSAqICAgc2luay0+U3RhcnRTdHJpbmcoRk9PX0ZJ
RUxEX1NUQVJUX1NUUklORywgLi4uKQotICogYSBzZWxlY3RvciBiYXNlIHdvdWxkIGxldCB5b3Ug
c2F5OgotICogICBzaW5rLT5TdGFydFN0cmluZyhGT09fRklFTEQsIC4uLikKLSAqCi0gKiBUaGlz
IHdvdWxkIG1ha2UgY2FsbCBzaXRlcyBhIGxpdHRsZSBuaWNlciBhbmQgcmVxdWlyZSBlbWl0dGlu
ZyBmZXdlciBzZWxlY3RvcgotICogZGVmaW5pdGlvbnMgaW4gLmggZmlsZXMuCi0gKgotICogQnV0
IHRoZSBjdXJyZW50IHNjaGVtZSBoYXMgdGhlIGJlbmVmaXQgdGhhdCB5b3UgY2FuIHJldHJpZXZl
IGEgZnVuY3Rpb24KLSAqIHBvaW50ZXIgZm9yIGFueSBoYW5kbGVyIHdpdGggaGFuZGxlcnMtPkdl
dEhhbmRsZXIoc2VsZWN0b3IpLCB3aXRob3V0IGhhdmluZwotICogdG8gaGF2ZSBhIHNlcGFyYXRl
IEdldEhhbmRsZXIoKSBmdW5jdGlvbiBmb3IgZWFjaCBoYW5kbGVyIHR5cGUuICBUaGUgSklUCi0g
KiBjb21waWxlciB1c2VzIHRoaXMuICBUbyBhY2NvbW1vZGF0ZSB3ZSdkIGhhdmUgdG8gZXhwb3Nl
IGEgc2VwYXJhdGUKLSAqIEdldEhhbmRsZXIoKSBmb3IgZXZlcnkgaGFuZGxlciB0eXBlLgotICoK
LSAqIEFsc28gdG8gcG9uZGVyOiBzZWxlY3RvcnMgcmlnaHQgbm93IGFyZSBpbmRlcGVuZGVudCBv
ZiBhIHNwZWNpZmljIEhhbmRsZXJzCi0gKiBpbnN0YW5jZS4gIEluIG90aGVyIHdvcmRzLCB0aGV5
IGFsbG9jYXRlIGEgbnVtYmVyIHRvIGV2ZXJ5IHBvc3NpYmxlIGhhbmRsZXIKLSAqIHRoYXQgKmNv
dWxkKiBiZSByZWdpc3RlcmVkLCB3aXRob3V0IGtub3dpbmcgYW55dGhpbmcgYWJvdXQgd2hhdCBo
YW5kbGVycwotICogKmFyZSogcmVnaXN0ZXJlZC4gIFRoYXQgbWVhbnMgdGhhdCB1c2luZyBzZWxl
Y3RvcnMgYXMgdGFibGUgb2Zmc2V0cyBwcm9oaWJpdHMKLSAqIHVzIGZyb20gY29tcGFjdGluZyB0
aGUgaGFuZGxlciB0YWJsZSBhdCBGcmVlemUoKSB0aW1lLiAgSWYgdGhlIHRhYmxlIGlzIHZlcnkK
LSAqIHNwYXJzZSwgdGhpcyBjb3VsZCBiZSB3YXN0ZWZ1bC4KLSAqCi0gKiBIYXZpbmcgYW5vdGhl
ciBzZWxlY3Rvci1saWtlIHRoaW5nIHRoYXQgaXMgc3BlY2lmaWMgdG8gYSBIYW5kbGVycyBpbnN0
YW5jZQotICogd291bGQgYWxsb3cgdGhpcyBjb21wYWN0aW5nLCBidXQgdGhlbiBpdCB3b3VsZCBi
ZSBpbXBvc3NpYmxlIHRvIHdyaXRlIGNvZGUKLSAqIGFoZWFkLW9mLXRpbWUgdGhhdCBjYW4gYmUg
Ym91bmQgdG8gYW55IEhhbmRsZXJzIGluc3RhbmNlIGF0IHJ1bnRpbWUuICBGb3IKLSAqIGV4YW1w
bGUsIGEgLnByb3RvIGZpbGUgcGFyc2VyIHdyaXR0ZW4gYXMgc3RyYWlnaHQgQyB3aWxsIG5vdCBr
bm93IHdoYXQKLSAqIEhhbmRsZXJzIGl0IHdpbGwgYmUgYm91bmQgdG8sIHNvIHdoZW4gaXQgY2Fs
bHMgc2luay0+U3RhcnRTdHJpbmcoKSB3aGF0Ci0gKiBzZWxlY3RvciB3aWxsIGl0IHBhc3M/ICBJ
dCBuZWVkcyBhIHNlbGVjdG9yIGxpa2Ugd2UgaGF2ZSB0b2RheSwgdGhhdCBpcwotICogaW5kZXBl
bmRlbnQgb2YgYW55IHBhcnRpY3VsYXIgdXBiOjpIYW5kbGVycy4KLSAqCi0gKiBJcyB0aGVyZSBh
IHdheSB0aGVuIHRvIGFsbG93IEhhbmRsZXJzIHRhYmxlIGNvbXBhY3Rpb24/ICovCi1jbGFzcyB1
cGI6OlNpbmsgewotIHB1YmxpYzoKLSAgLyogQ29uc3RydWN0b3Igd2l0aCBubyBpbml0aWFsaXph
dGlvbjsgbXVzdCBiZSBSZXNldCgpIGJlZm9yZSB1c2UuICovCi0gIFNpbmsoKSB7fQotCi0gIC8q
IENvbnN0cnVjdHMgYSBuZXcgc2luayBmb3IgdGhlIGdpdmVuIGZyb3plbiBoYW5kbGVycyBhbmQg
Y2xvc3VyZS4KLSAgICoKLSAgICogVE9ETzogb25jZSB0aGUgSGFuZGxlcnMga25vdyB0aGUgZXhw
ZWN0ZWQgY2xvc3VyZSB0eXBlLCB2ZXJpZnkgdGhhdCBUCi0gICAqIG1hdGNoZXMgaXQuICovCi0g
IHRlbXBsYXRlIDxjbGFzcyBUPiBTaW5rKGNvbnN0IEhhbmRsZXJzKiBoYW5kbGVycywgVCogY2xv
c3VyZSk7Ci0KLSAgLyogUmVzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc2luay4gKi8KLSAgdGVtcGxh
dGUgPGNsYXNzIFQ+IHZvaWQgUmVzZXQoY29uc3QgSGFuZGxlcnMqIGhhbmRsZXJzLCBUKiBjbG9z
dXJlKTsKLQotICAvKiBSZXR1cm5zIHRoZSB0b3AtbGV2ZWwgb2JqZWN0IHRoYXQgaXMgYm91bmQg
dG8gdGhpcyBzaW5rLgotICAgKgotICAgKiBUT0RPOiBvbmNlIHRoZSBIYW5kbGVycyBrbm93IHRo
ZSBleHBlY3RlZCBjbG9zdXJlIHR5cGUsIHZlcmlmeSB0aGF0IFQKLSAgICogbWF0Y2hlcyBpdC4g
Ki8KLSAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQqIEdldE9iamVjdCgpIGNvbnN0OwotCi0gIC8qIEZ1
bmN0aW9ucyBmb3IgcHVzaGluZyBkYXRhIGludG8gdGhlIHNpbmsuCi0gICAqCi0gICAqIFRoZXNl
IHJldHVybiBmYWxzZSBpZiBwcm9jZXNzaW5nIHNob3VsZCBzdG9wIChlaXRoZXIgZHVlIHRvIGVy
cm9yIG9yIGp1c3QKLSAgICogdG8gc3VzcGVuZCkuCi0gICAqCi0gICAqIFRoZXNlIG1heSBub3Qg
YmUgY2FsbGVkIGZyb20gd2l0aGluIG9uZSBvZiB0aGUgc2FtZSBzaW5rJ3MgaGFuZGxlcnMgKGlu
Ci0gICAqIG90aGVyIHdvcmRzLCBoYW5kbGVycyBhcmUgbm90IHJlLWVudHJhbnQpLiAqLwotCi0g
IC8qIFNob3VsZCBiZSBjYWxsZWQgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgZXZlcnkgbWVzc2Fn
ZTsgYm90aCB0aGUgdG9wLWxldmVsCi0gICAqIG1lc3NhZ2UgYW5kIHN1Ym1lc3NhZ2VzLiAgVGhp
cyBtZWFucyB0aGF0IHN1Ym1lc3NhZ2VzIHNob3VsZCB1c2UgdGhlCi0gICAqIGZvbGxvd2luZyBz
ZXF1ZW5jZToKLSAgICogICBzaW5rLT5TdGFydFN1Yk1lc3NhZ2Uoc3RhcnRzdWJtc2dfc2VsZWN0
b3IpOwotICAgKiAgIHNpbmstPlN0YXJ0TWVzc2FnZSgpOwotICAgKiAgIC8vIC4uLgotICAgKiAg
IHNpbmstPkVuZE1lc3NhZ2UoJnN0YXR1cyk7Ci0gICAqICAgc2luay0+RW5kU3ViTWVzc2FnZShl
bmRzdWJtc2dfc2VsZWN0b3IpOyAqLwotICBib29sIFN0YXJ0TWVzc2FnZSgpOwotICBib29sIEVu
ZE1lc3NhZ2UoU3RhdHVzKiBzdGF0dXMpOwotCi0gIC8qIFB1dHRpbmcgb2YgaW5kaXZpZHVhbCB2
YWx1ZXMuICBUaGVzZSB3b3JrIGZvciBib3RoIHJlcGVhdGVkIGFuZAotICAgKiBub24tcmVwZWF0
ZWQgZmllbGRzLCBidXQgZm9yIHJlcGVhdGVkIGZpZWxkcyB5b3UgbXVzdCB3cmFwIHRoZW0gaW4K
LSAgICogY2FsbHMgdG8gU3RhcnRTZXF1ZW5jZSgpL0VuZFNlcXVlbmNlKCkuICovCi0gIGJvb2wg
UHV0SW50MzIoSGFuZGxlcnM6OlNlbGVjdG9yIHMsIGludDMyX3QgdmFsKTsKLSAgYm9vbCBQdXRJ
bnQ2NChIYW5kbGVyczo6U2VsZWN0b3IgcywgaW50NjRfdCB2YWwpOwotICBib29sIFB1dFVJbnQz
MihIYW5kbGVyczo6U2VsZWN0b3IgcywgdWludDMyX3QgdmFsKTsKLSAgYm9vbCBQdXRVSW50NjQo
SGFuZGxlcnM6OlNlbGVjdG9yIHMsIHVpbnQ2NF90IHZhbCk7Ci0gIGJvb2wgUHV0RmxvYXQoSGFu
ZGxlcnM6OlNlbGVjdG9yIHMsIGZsb2F0IHZhbCk7Ci0gIGJvb2wgUHV0RG91YmxlKEhhbmRsZXJz
OjpTZWxlY3RvciBzLCBkb3VibGUgdmFsKTsKLSAgYm9vbCBQdXRCb29sKEhhbmRsZXJzOjpTZWxl
Y3RvciBzLCBib29sIHZhbCk7Ci0KLSAgLyogUHV0dGluZyBvZiBzdHJpbmcvYnl0ZXMgdmFsdWVz
LiAgRWFjaCBzdHJpbmcgY2FuIGNvbnNpc3Qgb2YgemVybyBvciBtb3JlCi0gICAqIG5vbi1jb250
aWd1b3VzIGJ1ZmZlcnMgb2YgZGF0YS4KLSAgICoKLSAgICogRm9yIFN0YXJ0U3RyaW5nKCksIHRo
ZSBmdW5jdGlvbiB3aWxsIHdyaXRlIGEgc2luayBmb3IgdGhlIHN0cmluZyB0byAic3ViLiIKLSAg
ICogVGhlIHN1Yi1zaW5rIG11c3QgYmUgdXNlZCBmb3IgYW55L2FsbCBQdXRTdHJpbmdCdWZmZXIo
KSBjYWxscy4gKi8KLSAgYm9vbCBTdGFydFN0cmluZyhIYW5kbGVyczo6U2VsZWN0b3Igcywgc2l6
ZV90IHNpemVfaGludCwgU2luayogc3ViKTsKLSAgc2l6ZV90IFB1dFN0cmluZ0J1ZmZlcihIYW5k
bGVyczo6U2VsZWN0b3IgcywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlckhhbmRsZSAqaGFuZGxlKTsKLSAgYm9vbCBFbmRT
dHJpbmcoSGFuZGxlcnM6OlNlbGVjdG9yIHMpOwotCi0gIC8qIEZvciBzdWJtZXNzYWdlIGZpZWxk
cy4KLSAgICoKLSAgICogRm9yIFN0YXJ0U3ViTWVzc2FnZSgpLCB0aGUgZnVuY3Rpb24gd2lsbCB3
cml0ZSBhIHNpbmsgZm9yIHRoZSBzdHJpbmcgdG8KLSAgICogInN1Yi4iIFRoZSBzdWItc2luayBt
dXN0IGJlIHVzZWQgZm9yIGFueS9hbGwgaGFuZGxlcnMgY2FsbGVkIHdpdGhpbiB0aGUKLSAgICog
c3VibWVzc2FnZS4gKi8KLSAgYm9vbCBTdGFydFN1Yk1lc3NhZ2UoSGFuZGxlcnM6OlNlbGVjdG9y
IHMsIFNpbmsqIHN1Yik7Ci0gIGJvb2wgRW5kU3ViTWVzc2FnZShIYW5kbGVyczo6U2VsZWN0b3Ig
cyk7Ci0KLSAgLyogRm9yIHJlcGVhdGVkIGZpZWxkcyBvZiBhbnkgdHlwZSwgdGhlIHNlcXVlbmNl
IG9mIHZhbHVlcyBtdXN0IGJlIHdyYXBwZWQgaW4KLSAgICogdGhlc2UgY2FsbHMuCi0gICAqCi0g
ICAqIEZvciBTdGFydFNlcXVlbmNlKCksIHRoZSBmdW5jdGlvbiB3aWxsIHdyaXRlIGEgc2luayBm
b3IgdGhlIHN0cmluZyB0bwotICAgKiAic3ViLiIgVGhlIHN1Yi1zaW5rIG11c3QgYmUgdXNlZCBm
b3IgYW55L2FsbCBoYW5kbGVycyBjYWxsZWQgd2l0aGluIHRoZQotICAgKiBzZXF1ZW5jZS4gKi8K
LSAgYm9vbCBTdGFydFNlcXVlbmNlKEhhbmRsZXJzOjpTZWxlY3RvciBzLCBTaW5rKiBzdWIpOwot
ICBib29sIEVuZFNlcXVlbmNlKEhhbmRsZXJzOjpTZWxlY3RvciBzKTsKLQotICAvKiBDb3B5IGFu
ZCBhc3NpZ24gc3BlY2lmaWNhbGx5IGFsbG93ZWQuCi0gICAqIFdlIGRvbid0IGV2ZW4gYm90aGVy
IG1ha2luZyB0aGVzZSBtZW1iZXJzIHByaXZhdGUgYmVjYXVzZSBzbyBtYW55Ci0gICAqIGZ1bmN0
aW9ucyBuZWVkIHRoZW0gYW5kIHRoaXMgaXMgbWFpbmx5IGp1c3QgYSBkdW1iIGRhdGEgY29udGFp
bmVyIGFueXdheS4KLSAgICovCi0jZWxzZQotc3RydWN0IHVwYl9zaW5rIHsKLSNlbmRpZgotICBj
b25zdCB1cGJfaGFuZGxlcnMgKmhhbmRsZXJzOwotICB2b2lkICpjbG9zdXJlOwotfTsKLQotI2lm
ZGVmIF9fY3BsdXNwbHVzCi1jbGFzcyB1cGI6OkJ5dGVzU2luayB7Ci0gcHVibGljOgotICBCeXRl
c1NpbmsoKSB7fQotCi0gIC8qIENvbnN0cnVjdHMgYSBuZXcgc2luayBmb3IgdGhlIGdpdmVuIGZy
b3plbiBoYW5kbGVycyBhbmQgY2xvc3VyZS4KLSAgICoKLSAgICogVE9ETyhoYWJlcm1hbik6IG9u
Y2UgdGhlIEhhbmRsZXJzIGtub3cgdGhlIGV4cGVjdGVkIGNsb3N1cmUgdHlwZSwgdmVyaWZ5Ci0g
ICAqIHRoYXQgVCBtYXRjaGVzIGl0LiAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gQnl0ZXNTaW5r
KGNvbnN0IEJ5dGVzSGFuZGxlciogaGFuZGxlciwgVCogY2xvc3VyZSk7Ci0KLSAgLyogUmVzZXRz
IHRoZSB2YWx1ZSBvZiB0aGUgc2luay4gKi8KLSAgdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQgUmVz
ZXQoY29uc3QgQnl0ZXNIYW5kbGVyKiBoYW5kbGVyLCBUKiBjbG9zdXJlKTsKLQotICBib29sIFN0
YXJ0KHNpemVfdCBzaXplX2hpbnQsIHZvaWQgKipzdWJjKTsKLSAgc2l6ZV90IFB1dEJ1ZmZlcih2
b2lkICpzdWJjLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAg
ICAgY29uc3QgQnVmZmVySGFuZGxlICpoYW5kbGUpOwotICBib29sIEVuZCgpOwotI2Vsc2UKLXN0
cnVjdCB1cGJfYnl0ZXNzaW5rIHsKLSNlbmRpZgotICBjb25zdCB1cGJfYnl0ZXNoYW5kbGVyICpo
YW5kbGVyOwotICB2b2lkICpjbG9zdXJlOwotfTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8q
IEEgY2xhc3MgZm9yIHB1c2hpbmcgYSBmbGF0IGJ1ZmZlciBvZiBkYXRhIHRvIGEgQnl0ZXNTaW5r
LgotICogWW91IGNhbiBjb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhpcyB0byBnZXQgYSByZXN1
bWFibGUgc291cmNlLAotICogb3IganVzdCBjYWxsIHRoZSBzdGF0aWMgUHV0QnVmZmVyKCkgdG8g
ZG8gYSBub24tcmVzdW1hYmxlIHB1c2ggYWxsIGluIG9uZQotICogZ28uICovCi1jbGFzcyB1cGI6
OkJ1ZmZlclNvdXJjZSB7Ci0gcHVibGljOgotICBCdWZmZXJTb3VyY2UoKTsKLSAgQnVmZmVyU291
cmNlKGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbiwgQnl0ZXNTaW5rKiBzaW5rKTsKLQotICAv
KiBSZXR1cm5zIHRydWUgaWYgdGhlIGVudGlyZSBidWZmZXIgd2FzIHB1c2hlZCBzdWNjZXNzZnVs
bHkuICBPdGhlcndpc2UgdGhlCi0gICAqIG5leHQgY2FsbCB0byBQdXROZXh0KCkgd2lsbCByZXN1
bWUgd2hlcmUgdGhlIHByZXZpb3VzIG9uZSBsZWZ0IG9mZi4KLSAgICogVE9ETyhoYWJlcm1hbik6
IGltcGxlbWVudCB0aGlzLiAqLwotICBib29sIFB1dE5leHQoKTsKLQotICAvKiBBIHN0YXRpYyB2
ZXJzaW9uOyB3aXRoIHRoaXMgdmVyc2lvbiBpcyBpdCBub3QgcG9zc2libGUgdG8gcmVzdW1lIGlu
IHRoZQotICAgKiBjYXNlIG9mIGZhaWx1cmUgb3IgYSBwYXJ0aWFsbHktY29uc3VtZWQgYnVmZmVy
LiAqLwotICBzdGF0aWMgYm9vbCBQdXRCdWZmZXIoY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVu
LCBCeXRlc1NpbmsqIHNpbmspOwotCi0gIHRlbXBsYXRlIDxjbGFzcyBUPiBzdGF0aWMgYm9vbCBQ
dXRCdWZmZXIoY29uc3QgVCYgc3RyLCBCeXRlc1NpbmsqIHNpbmspIHsKLSAgICByZXR1cm4gUHV0
QnVmZmVyKHN0ci5jX3N0cigpLCBzdHIuc2l6ZSgpLCBzaW5rKTsKLSAgfQotI2Vsc2UKLXN0cnVj
dCB1cGJfYnVmc3JjIHsKLSAgY2hhciBkdW1teTsKLSNlbmRpZgotfTsKLQotVVBCX0JFR0lOX0VY
VEVSTl9DCi0KLS8qIElubGluZSBkZWZpbml0aW9ucy4gKi8KLQotVVBCX0lOTElORSB2b2lkIHVw
Yl9ieXRlc3NpbmtfcmVzZXQodXBiX2J5dGVzc2luayAqcywgY29uc3QgdXBiX2J5dGVzaGFuZGxl
ciAqaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUp
IHsKLSAgcy0+aGFuZGxlciA9IGg7Ci0gIHMtPmNsb3N1cmUgPSBjbG9zdXJlOwotfQotCi1VUEJf
SU5MSU5FIGJvb2wgdXBiX2J5dGVzc2lua19zdGFydCh1cGJfYnl0ZXNzaW5rICpzLCBzaXplX3Qg
c2l6ZV9oaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKnN1
YmMpIHsKLSAgdHlwZWRlZiB1cGJfc3RhcnRzdHJfaGFuZGxlcmZ1bmMgZnVuYzsKLSAgZnVuYyAq
c3RhcnQ7Ci0gICpzdWJjID0gcy0+Y2xvc3VyZTsKLSAgaWYgKCFzLT5oYW5kbGVyKSByZXR1cm4g
dHJ1ZTsKLSAgc3RhcnQgPSAoZnVuYyAqKXMtPmhhbmRsZXItPnRhYmxlW1VQQl9TVEFSVFNUUl9T
RUxFQ1RPUl0uZnVuYzsKLQotICBpZiAoIXN0YXJ0KSByZXR1cm4gdHJ1ZTsKLSAgKnN1YmMgPSBz
dGFydChzLT5jbG9zdXJlLCB1cGJfaGFuZGxlcmF0dHJfaGFuZGxlcmRhdGEoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZzLT5oYW5kbGVyLT50YWJsZVtVUEJfU1RBUlRTVFJfU0VM
RUNUT1JdLmF0dHIpLAotICAgICAgICAgICAgICAgIHNpemVfaGludCk7Ci0gIHJldHVybiAqc3Vi
YyAhPSBOVUxMOwotfQotCi1VUEJfSU5MSU5FIHNpemVfdCB1cGJfYnl0ZXNzaW5rX3B1dGJ1Zih1
cGJfYnl0ZXNzaW5rICpzLCB2b2lkICpzdWJjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9idWZoYW5kbGUqIGhhbmRsZSkgewot
ICB0eXBlZGVmIHVwYl9zdHJpbmdfaGFuZGxlcmZ1bmMgZnVuYzsKLSAgZnVuYyAqcHV0YnVmOwot
ICBpZiAoIXMtPmhhbmRsZXIpIHJldHVybiB0cnVlOwotICBwdXRidWYgPSAoZnVuYyAqKXMtPmhh
bmRsZXItPnRhYmxlW1VQQl9TVFJJTkdfU0VMRUNUT1JdLmZ1bmM7Ci0KLSAgaWYgKCFwdXRidWYp
IHJldHVybiB0cnVlOwotICByZXR1cm4gcHV0YnVmKHN1YmMsIHVwYl9oYW5kbGVyYXR0cl9oYW5k
bGVyZGF0YSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPmhhbmRsZXItPnRhYmxlW1VQ
Ql9TVFJJTkdfU0VMRUNUT1JdLmF0dHIpLAotICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZSwgaGFu
ZGxlKTsKLX0KLQotVVBCX0lOTElORSBib29sIHVwYl9ieXRlc3NpbmtfZW5kKHVwYl9ieXRlc3Np
bmsgKnMpIHsKLSAgdHlwZWRlZiB1cGJfZW5kZmllbGRfaGFuZGxlcmZ1bmMgZnVuYzsKLSAgZnVu
YyAqZW5kOwotICBpZiAoIXMtPmhhbmRsZXIpIHJldHVybiB0cnVlOwotICBlbmQgPSAoZnVuYyAq
KXMtPmhhbmRsZXItPnRhYmxlW1VQQl9FTkRTVFJfU0VMRUNUT1JdLmZ1bmM7Ci0KLSAgaWYgKCFl
bmQpIHJldHVybiB0cnVlOwotICByZXR1cm4gZW5kKHMtPmNsb3N1cmUsCi0gICAgICAgICAgICAg
dXBiX2hhbmRsZXJhdHRyX2hhbmRsZXJkYXRhKAotICAgICAgICAgICAgICAgICAmcy0+aGFuZGxl
ci0+dGFibGVbVVBCX0VORFNUUl9TRUxFQ1RPUl0uYXR0cikpOwotfQotCi1VUEJfSU5MSU5FIGJv
b2wgdXBiX2J1ZnNyY19wdXRidWYoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9ieXRlc3NpbmsgKnNpbmspIHsKLSAgdm9p
ZCAqc3ViYzsKLSAgYm9vbCByZXQ7Ci0gIHVwYl9idWZoYW5kbGUgaGFuZGxlOwotICB1cGJfYnVm
aGFuZGxlX2luaXQoJmhhbmRsZSk7Ci0gIHVwYl9idWZoYW5kbGVfc2V0YnVmKCZoYW5kbGUsIGJ1
ZiwgMCk7Ci0gIHJldCA9IHVwYl9ieXRlc3Npbmtfc3RhcnQoc2luaywgbGVuLCAmc3ViYyk7Ci0g
IGlmIChyZXQgJiYgbGVuICE9IDApIHsKLSAgICByZXQgPSAodXBiX2J5dGVzc2lua19wdXRidWYo
c2luaywgc3ViYywgYnVmLCBsZW4sICZoYW5kbGUpID49IGxlbik7Ci0gIH0KLSAgaWYgKHJldCkg
ewotICAgIHJldCA9IHVwYl9ieXRlc3NpbmtfZW5kKHNpbmspOwotICB9Ci0gIHVwYl9idWZoYW5k
bGVfdW5pbml0KCZoYW5kbGUpOwotICByZXR1cm4gcmV0OwotfQotCi0jZGVmaW5lIFBVVFZBTCh0
eXBlLCBjdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBVUEJfSU5MSU5FIGJvb2wgdXBiX3NpbmtfcHV0IyN0eXBlKHVwYl9zaW5rICpz
LCB1cGJfc2VsZWN0b3JfdCBzZWwsICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdHlwZSB2YWwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgdHlwZWRlZiB1cGJfIyN0eXBlIyNfaGFuZGxlcmZ1bmMgZnVuY3R5cGU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGZ1bmN0eXBlICpmdW5jOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBj
b25zdCB2b2lkICpoZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCFzLT5oYW5kbGVycykgcmV0dXJuIHRydWU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGZ1bmMgPSAo
ZnVuY3R5cGUgKil1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcihzLT5oYW5kbGVycywgc2VsKTsgICAg
ICAgICAgICAgIFwKLSAgICBpZiAoIWZ1bmMpIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaGQgPSB1cGJfaGFuZGxl
cnNfZ2V0aGFuZGxlcmRhdGEocy0+aGFuZGxlcnMsIHNlbCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHJldHVybiBmdW5jKHMtPmNsb3N1cmUsIGhkLCB2YWwpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi1QVVRWQUwoaW50MzIsICBpbnQz
Ml90KQotUFVUVkFMKGludDY0LCAgaW50NjRfdCkKLVBVVFZBTCh1aW50MzIsIHVpbnQzMl90KQot
UFVUVkFMKHVpbnQ2NCwgdWludDY0X3QpCi1QVVRWQUwoZmxvYXQsICBmbG9hdCkKLVBVVFZBTChk
b3VibGUsIGRvdWJsZSkKLVBVVFZBTChib29sLCAgIGJvb2wpCi0jdW5kZWYgUFVUVkFMCi0KLVVQ
Ql9JTkxJTkUgdm9pZCB1cGJfc2lua19yZXNldCh1cGJfc2luayAqcywgY29uc3QgdXBiX2hhbmRs
ZXJzICpoLCB2b2lkICpjKSB7Ci0gIHMtPmhhbmRsZXJzID0gaDsKLSAgcy0+Y2xvc3VyZSA9IGM7
Ci19Ci0KLVVQQl9JTkxJTkUgc2l6ZV90IHVwYl9zaW5rX3B1dHN0cmluZyh1cGJfc2luayAqcywg
dXBiX3NlbGVjdG9yX3Qgc2VsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIHR5cGVkZWYgdXBiX3N0
cmluZ19oYW5kbGVyZnVuYyBmdW5jOwotICBmdW5jICpoYW5kbGVyOwotICBjb25zdCB2b2lkICpo
ZDsKLSAgaWYgKCFzLT5oYW5kbGVycykgcmV0dXJuIG47Ci0gIGhhbmRsZXIgPSAoZnVuYyAqKXVw
Yl9oYW5kbGVyc19nZXRoYW5kbGVyKHMtPmhhbmRsZXJzLCBzZWwpOwotCi0gIGlmICghaGFuZGxl
cikgcmV0dXJuIG47Ci0gIGhkID0gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXJkYXRhKHMtPmhhbmRs
ZXJzLCBzZWwpOwotICByZXR1cm4gaGFuZGxlcihzLT5jbG9zdXJlLCBoZCwgYnVmLCBuLCBoYW5k
bGUpOwotfQotCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3Npbmtfc3RhcnRtc2codXBiX3NpbmsgKnMp
IHsKLSAgdHlwZWRlZiB1cGJfc3RhcnRtc2dfaGFuZGxlcmZ1bmMgZnVuYzsKLSAgZnVuYyAqc3Rh
cnRtc2c7Ci0gIGNvbnN0IHZvaWQgKmhkOwotICBpZiAoIXMtPmhhbmRsZXJzKSByZXR1cm4gdHJ1
ZTsKLSAgc3RhcnRtc2cgPSAoZnVuYyopdXBiX2hhbmRsZXJzX2dldGhhbmRsZXIocy0+aGFuZGxl
cnMsIFVQQl9TVEFSVE1TR19TRUxFQ1RPUik7Ci0KLSAgaWYgKCFzdGFydG1zZykgcmV0dXJuIHRy
dWU7Ci0gIGhkID0gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXJkYXRhKHMtPmhhbmRsZXJzLCBVUEJf
U1RBUlRNU0dfU0VMRUNUT1IpOwotICByZXR1cm4gc3RhcnRtc2cocy0+Y2xvc3VyZSwgaGQpOwot
fQotCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3NpbmtfZW5kbXNnKHVwYl9zaW5rICpzLCB1cGJfc3Rh
dHVzICpzdGF0dXMpIHsKLSAgdHlwZWRlZiB1cGJfZW5kbXNnX2hhbmRsZXJmdW5jIGZ1bmM7Ci0g
IGZ1bmMgKmVuZG1zZzsKLSAgY29uc3Qgdm9pZCAqaGQ7Ci0gIGlmICghcy0+aGFuZGxlcnMpIHJl
dHVybiB0cnVlOwotICBlbmRtc2cgPSAoZnVuYyAqKXVwYl9oYW5kbGVyc19nZXRoYW5kbGVyKHMt
PmhhbmRsZXJzLCBVUEJfRU5ETVNHX1NFTEVDVE9SKTsKLQotICBpZiAoIWVuZG1zZykgcmV0dXJu
IHRydWU7Ci0gIGhkID0gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXJkYXRhKHMtPmhhbmRsZXJzLCBV
UEJfRU5ETVNHX1NFTEVDVE9SKTsKLSAgcmV0dXJuIGVuZG1zZyhzLT5jbG9zdXJlLCBoZCwgc3Rh
dHVzKTsKLX0KLQotVVBCX0lOTElORSBib29sIHVwYl9zaW5rX3N0YXJ0c2VxKHVwYl9zaW5rICpz
LCB1cGJfc2VsZWN0b3JfdCBzZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXBiX3NpbmsgKnN1YikgewotICB0eXBlZGVmIHVwYl9zdGFydGZpZWxkX2hhbmRsZXJmdW5jIGZ1
bmM7Ci0gIGZ1bmMgKnN0YXJ0c2VxOwotICBjb25zdCB2b2lkICpoZDsKLSAgc3ViLT5jbG9zdXJl
ID0gcy0+Y2xvc3VyZTsKLSAgc3ViLT5oYW5kbGVycyA9IHMtPmhhbmRsZXJzOwotICBpZiAoIXMt
PmhhbmRsZXJzKSByZXR1cm4gdHJ1ZTsKLSAgc3RhcnRzZXEgPSAoZnVuYyopdXBiX2hhbmRsZXJz
X2dldGhhbmRsZXIocy0+aGFuZGxlcnMsIHNlbCk7Ci0KLSAgaWYgKCFzdGFydHNlcSkgcmV0dXJu
IHRydWU7Ci0gIGhkID0gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXJkYXRhKHMtPmhhbmRsZXJzLCBz
ZWwpOwotICBzdWItPmNsb3N1cmUgPSBzdGFydHNlcShzLT5jbG9zdXJlLCBoZCk7Ci0gIHJldHVy
biBzdWItPmNsb3N1cmUgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLVVQQl9JTkxJTkUgYm9vbCB1cGJf
c2lua19lbmRzZXEodXBiX3NpbmsgKnMsIHVwYl9zZWxlY3Rvcl90IHNlbCkgewotICB0eXBlZGVm
IHVwYl9lbmRmaWVsZF9oYW5kbGVyZnVuYyBmdW5jOwotICBmdW5jICplbmRzZXE7Ci0gIGNvbnN0
IHZvaWQgKmhkOwotICBpZiAoIXMtPmhhbmRsZXJzKSByZXR1cm4gdHJ1ZTsKLSAgZW5kc2VxID0g
KGZ1bmMqKXVwYl9oYW5kbGVyc19nZXRoYW5kbGVyKHMtPmhhbmRsZXJzLCBzZWwpOwotCi0gIGlm
ICghZW5kc2VxKSByZXR1cm4gdHJ1ZTsKLSAgaGQgPSB1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcmRh
dGEocy0+aGFuZGxlcnMsIHNlbCk7Ci0gIHJldHVybiBlbmRzZXEocy0+Y2xvc3VyZSwgaGQpOwot
fQotCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3Npbmtfc3RhcnRzdHIodXBiX3NpbmsgKnMsIHVwYl9z
ZWxlY3Rvcl90IHNlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
c2l6ZV9oaW50LCB1cGJfc2luayAqc3ViKSB7Ci0gIHR5cGVkZWYgdXBiX3N0YXJ0c3RyX2hhbmRs
ZXJmdW5jIGZ1bmM7Ci0gIGZ1bmMgKnN0YXJ0c3RyOwotICBjb25zdCB2b2lkICpoZDsKLSAgc3Vi
LT5jbG9zdXJlID0gcy0+Y2xvc3VyZTsKLSAgc3ViLT5oYW5kbGVycyA9IHMtPmhhbmRsZXJzOwot
ICBpZiAoIXMtPmhhbmRsZXJzKSByZXR1cm4gdHJ1ZTsKLSAgc3RhcnRzdHIgPSAoZnVuYyopdXBi
X2hhbmRsZXJzX2dldGhhbmRsZXIocy0+aGFuZGxlcnMsIHNlbCk7Ci0KLSAgaWYgKCFzdGFydHN0
cikgcmV0dXJuIHRydWU7Ci0gIGhkID0gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXJkYXRhKHMtPmhh
bmRsZXJzLCBzZWwpOwotICBzdWItPmNsb3N1cmUgPSBzdGFydHN0cihzLT5jbG9zdXJlLCBoZCwg
c2l6ZV9oaW50KTsKLSAgcmV0dXJuIHN1Yi0+Y2xvc3VyZSA/IHRydWUgOiBmYWxzZTsKLX0KLQot
VVBCX0lOTElORSBib29sIHVwYl9zaW5rX2VuZHN0cih1cGJfc2luayAqcywgdXBiX3NlbGVjdG9y
X3Qgc2VsKSB7Ci0gIHR5cGVkZWYgdXBiX2VuZGZpZWxkX2hhbmRsZXJmdW5jIGZ1bmM7Ci0gIGZ1
bmMgKmVuZHN0cjsKLSAgY29uc3Qgdm9pZCAqaGQ7Ci0gIGlmICghcy0+aGFuZGxlcnMpIHJldHVy
biB0cnVlOwotICBlbmRzdHIgPSAoZnVuYyopdXBiX2hhbmRsZXJzX2dldGhhbmRsZXIocy0+aGFu
ZGxlcnMsIHNlbCk7Ci0KLSAgaWYgKCFlbmRzdHIpIHJldHVybiB0cnVlOwotICBoZCA9IHVwYl9o
YW5kbGVyc19nZXRoYW5kbGVyZGF0YShzLT5oYW5kbGVycywgc2VsKTsKLSAgcmV0dXJuIGVuZHN0
cihzLT5jbG9zdXJlLCBoZCk7Ci19Ci0KLVVQQl9JTkxJTkUgYm9vbCB1cGJfc2lua19zdGFydHN1
Ym1zZyh1cGJfc2luayAqcywgdXBiX3NlbGVjdG9yX3Qgc2VsLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwYl9zaW5rICpzdWIpIHsKLSAgdHlwZWRlZiB1cGJfc3RhcnRm
aWVsZF9oYW5kbGVyZnVuYyBmdW5jOwotICBmdW5jICpzdGFydHN1Ym1zZzsKLSAgY29uc3Qgdm9p
ZCAqaGQ7Ci0gIHN1Yi0+Y2xvc3VyZSA9IHMtPmNsb3N1cmU7Ci0gIGlmICghcy0+aGFuZGxlcnMp
IHsKLSAgICBzdWItPmhhbmRsZXJzID0gTlVMTDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBz
dWItPmhhbmRsZXJzID0gdXBiX2hhbmRsZXJzX2dldHN1YmhhbmRsZXJzX3NlbChzLT5oYW5kbGVy
cywgc2VsKTsKLSAgc3RhcnRzdWJtc2cgPSAoZnVuYyopdXBiX2hhbmRsZXJzX2dldGhhbmRsZXIo
cy0+aGFuZGxlcnMsIHNlbCk7Ci0KLSAgaWYgKCFzdGFydHN1Ym1zZykgcmV0dXJuIHRydWU7Ci0g
IGhkID0gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXJkYXRhKHMtPmhhbmRsZXJzLCBzZWwpOwotICBz
dWItPmNsb3N1cmUgPSBzdGFydHN1Ym1zZyhzLT5jbG9zdXJlLCBoZCk7Ci0gIHJldHVybiBzdWIt
PmNsb3N1cmUgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLVVQQl9JTkxJTkUgYm9vbCB1cGJfc2lua19l
bmRzdWJtc2codXBiX3NpbmsgKnMsIHVwYl9zZWxlY3Rvcl90IHNlbCkgewotICB0eXBlZGVmIHVw
Yl9lbmRmaWVsZF9oYW5kbGVyZnVuYyBmdW5jOwotICBmdW5jICplbmRzdWJtc2c7Ci0gIGNvbnN0
IHZvaWQgKmhkOwotICBpZiAoIXMtPmhhbmRsZXJzKSByZXR1cm4gdHJ1ZTsKLSAgZW5kc3VibXNn
ID0gKGZ1bmMqKXVwYl9oYW5kbGVyc19nZXRoYW5kbGVyKHMtPmhhbmRsZXJzLCBzZWwpOwotCi0g
IGlmICghZW5kc3VibXNnKSByZXR1cm4gcy0+Y2xvc3VyZTsKLSAgaGQgPSB1cGJfaGFuZGxlcnNf
Z2V0aGFuZGxlcmRhdGEocy0+aGFuZGxlcnMsIHNlbCk7Ci0gIHJldHVybiBlbmRzdWJtc2cocy0+
Y2xvc3VyZSwgaGQpOwotfQotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1
cwotCi1uYW1lc3BhY2UgdXBiIHsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IFNpbms6OlNpbmsoY29u
c3QgSGFuZGxlcnMqIGhhbmRsZXJzLCBUKiBjbG9zdXJlKSB7Ci0gIHVwYl9zaW5rX3Jlc2V0KHRo
aXMsIGhhbmRsZXJzLCBjbG9zdXJlKTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBUPgotaW5saW5lIHZv
aWQgU2luazo6UmVzZXQoY29uc3QgSGFuZGxlcnMqIGhhbmRsZXJzLCBUKiBjbG9zdXJlKSB7Ci0g
IHVwYl9zaW5rX3Jlc2V0KHRoaXMsIGhhbmRsZXJzLCBjbG9zdXJlKTsKLX0KLWlubGluZSBib29s
IFNpbms6OlN0YXJ0TWVzc2FnZSgpIHsKLSAgcmV0dXJuIHVwYl9zaW5rX3N0YXJ0bXNnKHRoaXMp
OwotfQotaW5saW5lIGJvb2wgU2luazo6RW5kTWVzc2FnZShTdGF0dXMqIHN0YXR1cykgewotICBy
ZXR1cm4gdXBiX3NpbmtfZW5kbXNnKHRoaXMsIHN0YXR1cyk7Ci19Ci1pbmxpbmUgYm9vbCBTaW5r
OjpQdXRJbnQzMihIYW5kbGVyczo6U2VsZWN0b3Igc2VsLCBpbnQzMl90IHZhbCkgewotICByZXR1
cm4gdXBiX3NpbmtfcHV0aW50MzIodGhpcywgc2VsLCB2YWwpOwotfQotaW5saW5lIGJvb2wgU2lu
azo6UHV0SW50NjQoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCwgaW50NjRfdCB2YWwpIHsKLSAgcmV0
dXJuIHVwYl9zaW5rX3B1dGludDY0KHRoaXMsIHNlbCwgdmFsKTsKLX0KLWlubGluZSBib29sIFNp
bms6OlB1dFVJbnQzMihIYW5kbGVyczo6U2VsZWN0b3Igc2VsLCB1aW50MzJfdCB2YWwpIHsKLSAg
cmV0dXJuIHVwYl9zaW5rX3B1dHVpbnQzMih0aGlzLCBzZWwsIHZhbCk7Ci19Ci1pbmxpbmUgYm9v
bCBTaW5rOjpQdXRVSW50NjQoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCwgdWludDY0X3QgdmFsKSB7
Ci0gIHJldHVybiB1cGJfc2lua19wdXR1aW50NjQodGhpcywgc2VsLCB2YWwpOwotfQotaW5saW5l
IGJvb2wgU2luazo6UHV0RmxvYXQoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCwgZmxvYXQgdmFsKSB7
Ci0gIHJldHVybiB1cGJfc2lua19wdXRmbG9hdCh0aGlzLCBzZWwsIHZhbCk7Ci19Ci1pbmxpbmUg
Ym9vbCBTaW5rOjpQdXREb3VibGUoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCwgZG91YmxlIHZhbCkg
ewotICByZXR1cm4gdXBiX3NpbmtfcHV0ZG91YmxlKHRoaXMsIHNlbCwgdmFsKTsKLX0KLWlubGlu
ZSBib29sIFNpbms6OlB1dEJvb2woSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCwgYm9vbCB2YWwpIHsK
LSAgcmV0dXJuIHVwYl9zaW5rX3B1dGJvb2wodGhpcywgc2VsLCB2YWwpOwotfQotaW5saW5lIGJv
b2wgU2luazo6U3RhcnRTdHJpbmcoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCwgc2l6ZV90IHNpemVf
aGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmsgKnN1YikgewotICByZXR1
cm4gdXBiX3Npbmtfc3RhcnRzdHIodGhpcywgc2VsLCBzaXplX2hpbnQsIHN1Yik7Ci19Ci1pbmxp
bmUgc2l6ZV90IFNpbms6OlB1dFN0cmluZ0J1ZmZlcihIYW5kbGVyczo6U2VsZWN0b3Igc2VsLCBj
b25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgbGVuLCBjb25zdCBCdWZmZXJIYW5kbGUqIGhhbmRsZSkgewotICByZXR1cm4gdXBiX3Npbmtf
cHV0c3RyaW5nKHRoaXMsIHNlbCwgYnVmLCBsZW4sIGhhbmRsZSk7Ci19Ci1pbmxpbmUgYm9vbCBT
aW5rOjpFbmRTdHJpbmcoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCkgewotICByZXR1cm4gdXBiX3Np
bmtfZW5kc3RyKHRoaXMsIHNlbCk7Ci19Ci1pbmxpbmUgYm9vbCBTaW5rOjpTdGFydFN1Yk1lc3Nh
Z2UoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCwgU2luayogc3ViKSB7Ci0gIHJldHVybiB1cGJfc2lu
a19zdGFydHN1Ym1zZyh0aGlzLCBzZWwsIHN1Yik7Ci19Ci1pbmxpbmUgYm9vbCBTaW5rOjpFbmRT
dWJNZXNzYWdlKEhhbmRsZXJzOjpTZWxlY3RvciBzZWwpIHsKLSAgcmV0dXJuIHVwYl9zaW5rX2Vu
ZHN1Ym1zZyh0aGlzLCBzZWwpOwotfQotaW5saW5lIGJvb2wgU2luazo6U3RhcnRTZXF1ZW5jZShI
YW5kbGVyczo6U2VsZWN0b3Igc2VsLCBTaW5rKiBzdWIpIHsKLSAgcmV0dXJuIHVwYl9zaW5rX3N0
YXJ0c2VxKHRoaXMsIHNlbCwgc3ViKTsKLX0KLWlubGluZSBib29sIFNpbms6OkVuZFNlcXVlbmNl
KEhhbmRsZXJzOjpTZWxlY3RvciBzZWwpIHsKLSAgcmV0dXJuIHVwYl9zaW5rX2VuZHNlcSh0aGlz
LCBzZWwpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLUJ5dGVzU2luazo6Qnl0ZXNTaW5rKGNv
bnN0IEJ5dGVzSGFuZGxlciogaGFuZGxlciwgVCogY2xvc3VyZSkgewotICBSZXNldChoYW5kbGVy
LCBjbG9zdXJlKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIEJ5dGVzU2luazo6UmVz
ZXQoY29uc3QgQnl0ZXNIYW5kbGVyICpoYW5kbGVyLCBUICpjbG9zdXJlKSB7Ci0gIHVwYl9ieXRl
c3NpbmtfcmVzZXQodGhpcywgaGFuZGxlciwgY2xvc3VyZSk7Ci19Ci1pbmxpbmUgYm9vbCBCeXRl
c1Npbms6OlN0YXJ0KHNpemVfdCBzaXplX2hpbnQsIHZvaWQgKipzdWJjKSB7Ci0gIHJldHVybiB1
cGJfYnl0ZXNzaW5rX3N0YXJ0KHRoaXMsIHNpemVfaGludCwgc3ViYyk7Ci19Ci1pbmxpbmUgc2l6
ZV90IEJ5dGVzU2luazo6UHV0QnVmZmVyKHZvaWQgKnN1YmMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6
ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVmZmVy
SGFuZGxlICpoYW5kbGUpIHsKLSAgcmV0dXJuIHVwYl9ieXRlc3NpbmtfcHV0YnVmKHRoaXMsIHN1
YmMsIGJ1ZiwgbGVuLCBoYW5kbGUpOwotfQotaW5saW5lIGJvb2wgQnl0ZXNTaW5rOjpFbmQoKSB7
Ci0gIHJldHVybiB1cGJfYnl0ZXNzaW5rX2VuZCh0aGlzKTsKLX0KLQotaW5saW5lIGJvb2wgQnVm
ZmVyU291cmNlOjpQdXRCdWZmZXIoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZXNTaW5rICpzaW5rKSB7Ci0gIHJldHVy
biB1cGJfYnVmc3JjX3B1dGJ1ZihidWYsIGxlbiwgc2luayk7Ci19Ci0KLX0gIC8qIG5hbWVzcGFj
ZSB1cGIgKi8KLSNlbmRpZgotCi0jZW5kaWYKLS8qCi0qKiBGb3IgaGFuZGxlcnMgdGhhdCBkbyB2
ZXJ5IHRpbnksIHZlcnkgc2ltcGxlIG9wZXJhdGlvbnMsIHRoZSBmdW5jdGlvbiBjYWxsCi0qKiBv
dmVyaGVhZCBvZiBjYWxsaW5nIGEgaGFuZGxlciBjYW4gYmUgc2lnbmlmaWNhbnQuICBUaGlzIGZp
bGUgYWxsb3dzIHRoZQotKiogdXNlciB0byBkZWZpbmUgaGFuZGxlcnMgdGhhdCBkbyBzb21ldGhp
bmcgdmVyeSBzaW1wbGUgbGlrZSBzdG9yZSB0aGUgdmFsdWUKLSoqIHRvIG1lbW9yeSBhbmQvb3Ig
c2V0IGEgaGFzYml0LiAgSklUIGNvbXBpbGVycyBjYW4gdGhlbiBzcGVjaWFsLWNhc2UgdGhlc2UK
LSoqIGhhbmRsZXJzIGFuZCBlbWl0IHNwZWNpYWxpemVkIGNvZGUgZm9yIHRoZW0gaW5zdGVhZCBv
ZiBhY3R1YWxseSBjYWxsaW5nIHRoZQotKiogaGFuZGxlci4KLSoqCi0qKiBUaGUgZnVuY3Rpb25h
bGl0eSBpcyB2ZXJ5IHNpbXBsZS9saW1pdGVkIHJpZ2h0IG5vdyBidXQgbWF5IGV4cGFuZCB0byBi
ZSBhYmxlCi0qKiB0byBjYWxsIGFub3RoZXIgZnVuY3Rpb24uCi0qLwotCi0jaWZuZGVmIFVQQl9T
SElNX0gKLSNkZWZpbmUgVVBCX1NISU1fSAotCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgc2l6ZV90
IG9mZnNldDsKLSAgaW50MzJfdCBoYXNiaXQ7Ci19IHVwYl9zaGltX2RhdGE7Ci0KLSNpZmRlZiBf
X2NwbHVzcGx1cwotCi1uYW1lc3BhY2UgdXBiIHsKLQotc3RydWN0IFNoaW0gewotICB0eXBlZGVm
IHVwYl9zaGltX2RhdGEgRGF0YTsKLQotICAvKiBTZXRzIGEgaGFuZGxlciBmb3IgdGhlIGdpdmVu
IGZpZWxkIHRoYXQgd3JpdGVzIHRoZSB2YWx1ZSB0byB0aGUgZ2l2ZW4KLSAgICogb2Zmc2V0IGFu
ZCwgaWYgaGFzYml0ID49IDAsIHNldHMgYSBiaXQgYXQgdGhlIGdpdmVuIGJpdCBvZmZzZXQuICBS
ZXR1cm5zCi0gICAqIHRydWUgaWYgdGhlIGhhbmRsZXIgd2FzIHNldCBzdWNjZXNzZnVsbHkuICov
Ci0gIHN0YXRpYyBib29sIFNldChIYW5kbGVycyAqaCwgY29uc3QgRmllbGREZWYgKmYsIHNpemVf
dCBvZnMsIGludDMyX3QgaGFzYml0KTsKLQotICAvKiBJZiB0aGlzIGhhbmRsZXIgaXMgYSBzaGlt
LCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHVwYjo6U2hpbTo6RGF0YSBhbmQKLSAgICogc3Rv
cmVzIHRoZSB0eXBlIGluICJ0eXBlIi4gIE90aGVyd2lzZSByZXR1cm5zIE5VTEwuICovCi0gIHN0
YXRpYyBjb25zdCBEYXRhKiBHZXREYXRhKGNvbnN0IEhhbmRsZXJzKiBoLCBIYW5kbGVyczo6U2Vs
ZWN0b3IgcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZWY6OlR5cGUqIHR5
cGUpOwotfTsKLQotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotCi0jZW5kaWYKLQotVVBCX0JFR0lO
X0VYVEVSTl9DCi0KLS8qIEMgQVBJLiAqLwotYm9vbCB1cGJfc2hpbV9zZXQodXBiX2hhbmRsZXJz
ICpoLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsIHNpemVfdCBvZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICBpbnQzMl90IGhhc2JpdCk7Ci1jb25zdCB1cGJfc2hpbV9kYXRhICp1cGJfc2hpbV9nZXRk
YXRhKGNvbnN0IHVwYl9oYW5kbGVycyAqaCwgdXBiX3NlbGVjdG9yX3QgcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2ZpZWxkdHlwZV90ICp0eXBlKTsKLQotVVBC
X0VORF9FWFRFUk5fQwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLS8qIEMrKyBXcmFwcGVycy4gKi8K
LW5hbWVzcGFjZSB1cGIgewotaW5saW5lIGJvb2wgU2hpbTo6U2V0KEhhbmRsZXJzKiBoLCBjb25z
dCBGaWVsZERlZiogZiwgc2l6ZV90IG9mcywKLSAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
IGhhc2JpdCkgewotICByZXR1cm4gdXBiX3NoaW1fc2V0KGgsIGYsIG9mcywgaGFzYml0KTsKLX0K
LWlubGluZSBjb25zdCBTaGltOjpEYXRhKiBTaGltOjpHZXREYXRhKGNvbnN0IEhhbmRsZXJzKiBo
LCBIYW5kbGVyczo6U2VsZWN0b3IgcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZpZWxkRGVmOjpUeXBlKiB0eXBlKSB7Ci0gIHJldHVybiB1cGJfc2hpbV9nZXRkYXRh
KGgsIHMsIHR5cGUpOwotfQotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotI2VuZGlmCi0KLSNlbmRp
ZiAgLyogVVBCX1NISU1fSCAqLwotLyoKLSoqIHVwYjo6U3ltYm9sVGFibGUgKHVwYl9zeW10YWIp
Ci0qKgotKiogQSBzeW10YWIgKHN5bWJvbCB0YWJsZSkgc3RvcmVzIGEgbmFtZS0+ZGVmIG1hcCBv
ZiB1cGJfZGVmcy4gIENsaWVudHMgY291bGQKLSoqIGFsd2F5cyBjcmVhdGUgc3VjaCB0YWJsZXMg
dGhlbXNlbHZlcywgYnV0IHVwYl9zeW10YWIgaGFzIGxvZ2ljIGZvciByZXNvbHZpbmcKLSoqIHN5
bWJvbGljIHJlZmVyZW5jZXMsIGFuZCBpbiBwYXJ0aWN1bGFyLCBmb3Iga2VlcGluZyBhIHdob2xl
IHNldCBvZiBjb25zaXN0ZW50Ci0qKiBkZWZzIHdoZW4gcmVwbGFjaW5nIHNvbWUgc3Vic2V0IG9m
IHRob3NlIGRlZnMuICBUaGlzIGxvZ2ljIGlzIG5vbnRyaXZpYWwuCi0qKgotKiogVGhpcyBpcyBh
IG1peGVkIEMvQysrIGludGVyZmFjZSB0aGF0IG9mZmVycyBhIGZ1bGwgQVBJIHRvIGJvdGggbGFu
Z3VhZ2VzLgotKiogU2VlIHRoZSB0b3AtbGV2ZWwgUkVBRE1FIGZvciBtb3JlIGluZm9ybWF0aW9u
LgotKi8KLQotI2lmbmRlZiBVUEJfU1lNVEFCX0hfCi0jZGVmaW5lIFVQQl9TWU1UQUJfSF8KLQot
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLSNpbmNsdWRlIDx2ZWN0b3I+Ci1uYW1lc3BhY2UgdXBiIHsg
Y2xhc3MgU3ltYm9sVGFibGU7IH0KLSNlbmRpZgotCi1VUEJfREVDTEFSRV9ERVJJVkVEX1RZUEUo
dXBiOjpTeW1ib2xUYWJsZSwgdXBiOjpSZWZDb3VudGVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwYl9zeW10YWIsIHVwYl9yZWZjb3VudGVkKQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gVVBC
X1BSSVZBVEVfRk9SX0NQUAotICB1cGJfc3RydGFibGVfaXRlciBpdGVyOwotICB1cGJfZGVmdHlw
ZV90IHR5cGU7Ci19IHVwYl9zeW10YWJfaXRlcjsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8q
IE5vbi1jb25zdCBtZXRob2RzIGluIHVwYjo6U3ltYm9sVGFibGUgYXJlIE5PVCB0aHJlYWQtc2Fm
ZS4gKi8KLWNsYXNzIHVwYjo6U3ltYm9sVGFibGUgewotIHB1YmxpYzoKLSAgLyogUmV0dXJucyBh
IG5ldyBzeW1ib2wgdGFibGUgd2l0aCBhIHNpbmdsZSByZWYgb3duZWQgYnkgIm93bmVyLiIKLSAg
ICogUmV0dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gKi8KLSAgc3RhdGlj
IHJlZmZlZF9wdHI8U3ltYm9sVGFibGU+IE5ldygpOwotCi0gIC8qIEluY2x1ZGUgUmVmQ291bnRl
ZCBiYXNlIG1ldGhvZHMuICovCi0gIFVQQl9SRUZDT1VOVEVEX0NQUE1FVEhPRFMKLQotICAvKiBG
b3IgYWxsIGxvb2t1cCBmdW5jdGlvbnMsIHRoZSByZXR1cm5lZCBwb2ludGVyIGlzIG5vdCBvd25l
ZCBieSB0aGUKLSAgICogY2FsbGVyOyBpdCBtYXkgYmUgaW52YWxpZGF0ZWQgYnkgYW55IG5vbi1j
b25zdCBjYWxsIG9yIHVucmVmIG9mIHRoZQotICAgKiBTeW1ib2xUYWJsZSEgIFRvIHByb3RlY3Qg
YWdhaW5zdCB0aGlzLCB0YWtlIGEgcmVmIGlmIGRlc2lyZWQuICovCi0KLSAgLyogRnJlZXplcyB0
aGUgc3ltYm9sIHRhYmxlOiBwcmV2ZW50cyBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiBpdC4KLSAg
ICogQWZ0ZXIgdGhlIEZyZWV6ZSgpIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgU3ltYm9s
VGFibGUgbXVzdCBvbmx5IGJlCi0gICAqIGFjY2Vzc2VkIHZpYSBhIGNvbnN0IHBvaW50ZXIuCi0g
ICAqCi0gICAqIFVubGlrZSB3aXRoIHVwYjo6TWVzc2FnZURlZi91cGI6OkVudW1EZWYvZXRjLCBm
cmVlemluZyBhIFN5bWJvbFRhYmxlIGlzIG5vdAotICAgKiBhIG5lY2Vzc2FyeSBzdGVwIGluIHVz
aW5nIGEgU3ltYm9sVGFibGUuICBJZiB5b3UgaGF2ZSBubyBuZWVkIGZvciBpdCB0byBiZQotICAg
KiBpbW11dGFibGUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gZnJlZXplIGl0IGV2ZXIuICBIb3dldmVy
IHNvbWV0aW1lcyBpdCBpcwotICAgKiB1c2VmdWwsIGFuZCBTeW1ib2xUYWJsZXMgdGhhdCBhcmUg
c3RhdGljYWxseSBjb21waWxlZCBpbnRvIHRoZSBiaW5hcnkgYXJlCi0gICAqIGFsd2F5cyBmcm96
ZW4gYnkgbmF0dXJlLiAqLwotICB2b2lkIEZyZWV6ZSgpOwotCi0gIC8qIFJlc29sdmVzIHRoZSBn
aXZlbiBzeW1ib2wgdXNpbmcgdGhlIHJ1bGVzIGRlc2NyaWJlZCBpbiBkZXNjcmlwdG9yLnByb3Rv
LAotICAgKiBuYW1lbHk6Ci0gICAqCi0gICAqICAgIElmIHRoZSBuYW1lIHN0YXJ0cyB3aXRoIGEg
Jy4nLCBpdCBpcyBmdWxseS1xdWFsaWZpZWQuICBPdGhlcndpc2UsCi0gICAqICAgIEMrKy1saWtl
IHNjb3BpbmcgcnVsZXMgYXJlIHVzZWQgdG8gZmluZCB0aGUgdHlwZSAoaS5lLiBmaXJzdCB0aGUg
bmVzdGVkCi0gICAqICAgIHR5cGVzIHdpdGhpbiB0aGlzIG1lc3NhZ2UgYXJlIHNlYXJjaGVkLCB0
aGVuIHdpdGhpbiB0aGUgcGFyZW50LCBvbiB1cAotICAgKiAgICB0byB0aGUgcm9vdCBuYW1lc3Bh
Y2UpLgotICAgKgotICAgKiBJZiBub3QgZm91bmQsIHJldHVybnMgTlVMTC4gKi8KLSAgY29uc3Qg
RGVmKiBSZXNvbHZlKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IGNoYXIqIHN5bSkgY29uc3Q7Ci0K
LSAgLyogRmluZHMgYW4gZW50cnkgaW4gdGhlIHN5bWJvbCB0YWJsZSB3aXRoIHRoaXMgZXhhY3Qg
bmFtZS4gIElmIG5vdCBmb3VuZCwKLSAgICogcmV0dXJucyBOVUxMLiAqLwotICBjb25zdCBEZWYq
IExvb2t1cChjb25zdCBjaGFyICpzeW0pIGNvbnN0OwotICBjb25zdCBNZXNzYWdlRGVmKiBMb29r
dXBNZXNzYWdlKGNvbnN0IGNoYXIgKnN5bSkgY29uc3Q7Ci0gIGNvbnN0IEVudW1EZWYqIExvb2t1
cEVudW0oY29uc3QgY2hhciAqc3ltKSBjb25zdDsKLQotICAvKiBUT0RPOiBpbnRyb2R1Y2UgYSBD
KysgaXRlcmF0b3IsIGJ1dCBtYWtlIGl0IG5pY2UgYW5kIHRlbXBsYXRlZCBzbyB0aGF0IGlmCi0g
ICAqIHlvdSBhc2sgZm9yIGFuIGl0ZXJhdG9yIG9mIE1lc3NhZ2VEZWYgdGhlIGl0ZXJhdGVkIGVs
ZW1lbnRzIGFyZSBzdHJvbmdseQotICAgKiB0eXBlZCBhcyBNZXNzYWdlRGVmKi4gKi8KLQotICAv
KiBBZGRzIHRoZSBnaXZlbiBtdXRhYmxlIGRlZnMgdG8gdGhlIHN5bXRhYiwgcmVzb2x2aW5nIGFs
bCBzeW1ib2xzCi0gICAqIChpbmNsdWRpbmcgZW51bSBkZWZhdWx0IHZhbHVlcykgYW5kIGZpbmFs
aXppbmcgdGhlIGRlZnMuICBPbmx5IG9uZSBkZWYgcGVyCi0gICAqIG5hbWUgbWF5IGJlIGluIHRo
ZSBsaXN0LCBidXQgZGVmcyBjYW4gcmVwbGFjZSBleGlzdGluZyBkZWZzIGluIHRoZSBzeW10YWIu
Ci0gICAqIEFsbCBkZWZzIG11c3QgaGF2ZSBhIG5hbWUgLS0gYW5vbnltb3VzIGRlZnMgYXJlIG5v
dCBhbGxvd2VkLiAgQW5vbnltb3VzCi0gICAqIGRlZnMgY2FuIHN0aWxsIGJlIGZyb3plbiBieSBj
YWxsaW5nIHVwYl9kZWZfZnJlZXplKCkgZGlyZWN0bHkuCi0gICAqCi0gICAqIEFueSBleGlzdGlu
ZyBkZWZzIHRoYXQgY2FuIHJlYWNoIGRlZnMgdGhhdCBhcmUgYmVpbmcgcmVwbGFjZWQgd2lsbAot
ICAgKiB0aGVtc2VsdmVzIGJlIHJlcGxhY2VkIGFsc28sIHNvIHRoYXQgdGhlIHJlc3VsdGluZyBz
ZXQgb2YgZGVmcyBpcyBmdWxseQotICAgKiBjb25zaXN0ZW50LgotICAgKgotICAgKiBUaGlzIGxv
Z2ljIGltcGxlbWVudGVkIGluIHRoaXMgbWV0aG9kIGlzIGEgY29udmVuaWVuY2U7IHVsdGltYXRl
bHkgaXQKLSAgICogY2FsbHMgc29tZSBjb21iaW5hdGlvbiBvZiB1cGJfZmllbGRkZWZfc2V0c3Vi
ZGVmKCksIHVwYl9kZWZfZHVwKCksIGFuZAotICAgKiB1cGJfZnJlZXplKCksIGFueSBvZiB3aGlj
aCB0aGUgY2xpZW50IGNvdWxkIGNhbGwgdGhlbXNlbGYuICBIb3dldmVyLCBzaW5jZQotICAgKiB0
aGUgbG9naWMgZm9yIGRvaW5nIHNvIGlzIG5vbnRyaXZpYWwsIHdlIHByb3ZpZGUgaXQgaGVyZS4K
LSAgICoKLSAgICogVGhlIGVudGlyZSBvcGVyYXRpb24gZWl0aGVyIHN1Y2NlZWRzIG9yIGZhaWxz
LiAgSWYgdGhlIG9wZXJhdGlvbiBmYWlscywKLSAgICogdGhlIHN5bXRhYiBpcyB1bmNoYW5nZWQs
IGZhbHNlIGlzIHJldHVybmVkLCBhbmQgc3RhdHVzIGluZGljYXRlcyB0aGUKLSAgICogZXJyb3Iu
ICBUaGUgY2FsbGVyIHBhc3NlcyBhIHJlZiBvbiBhbGwgZGVmcyB0byB0aGUgc3ltdGFiIChldmVu
IGlmIHRoZQotICAgKiBvcGVyYXRpb24gZmFpbHMpLgotICAgKgotICAgKiBUT0RPKGhhYmVybWFu
KTogY3VycmVudGx5IGZhaWx1cmUgd2lsbCBsZWF2ZSB0aGUgc3ltdGFiIHVuY2hhbmdlZCwgYnV0
IG1heQotICAgKiBsZWF2ZSB0aGUgZGVmcyB0aGVtc2VsdmVzIHBhcnRpYWxseSByZXNvbHZlZC4g
IERvZXMgdGhpcyBtYXR0ZXI/ICBJZiBzbyB3ZQotICAgKiBjb3VsZCBkbyBhIHByZXBhc3MgdGhh
dCBlbnN1cmVzIHRoYXQgYWxsIHN5bWJvbHMgYXJlIHJlc29sdmFibGUgYW5kIGJhaWwKLSAgICog
aWYgbm90LCBzbyB3ZSBkb24ndCBtdXRhdGUgYW55dGhpbmcgdW50aWwgd2Uga25vdyB0aGUgb3Bl
cmF0aW9uIHdpbGwKLSAgICogc3VjY2VlZC4KLSAgICoKLSAgICogVE9ETyhoYWJlcm1hbik6IHNp
bmNlIHRoZSBkZWZzIG11c3QgYmUgbXV0YWJsZSwgcmVmaW5pbmcgYSBmcm96ZW4gZGVmCi0gICAq
IHJlcXVpcmVzIG1ha2luZyBtdXRhYmxlIGNvcGllcyBvZiB0aGUgZW50aXJlIHRyZWUuICBUaGlz
IGlzIHdhc3RlZnVsIGlmCi0gICAqIG9ubHkgYSBmZXcgbWVzc2FnZXMgYXJlIGNoYW5naW5nLiAg
V2UgbWF5IHdhbnQgdG8gYWRkIGEgd2F5IG9mIGFkZGluZyBhCi0gICAqIHRyZWUgb2YgZnJvemVu
IGRlZnMgdG8gdGhlIHN5bXRhYiAocGVyaGFwcyBhbiBhbHRlcm5hdGUgY29uc3RydWN0b3Igd2hl
cmUKLSAgICogeW91IHBhc3MgdGhlIHJvb3Qgb2YgdGhlIHRyZWU/KSAqLwotICBib29sIEFkZChE
ZWYqY29uc3QqIGRlZnMsIGludCBuLCB2b2lkKiByZWZfZG9ub3IsIHVwYl9zdGF0dXMqIHN0YXR1
cyk7Ci0KLSAgYm9vbCBBZGQoY29uc3Qgc3RkOjp2ZWN0b3I8RGVmKj4mIGRlZnMsIHZvaWQgKm93
bmVyLCBTdGF0dXMqIHN0YXR1cykgewotICAgIHJldHVybiBBZGQoKERlZipjb25zdCopJmRlZnNb
MF0sIGRlZnMuc2l6ZSgpLCBvd25lciwgc3RhdHVzKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgVVBC
X0RJU0FMTE9XX1BPRF9PUFMoU3ltYm9sVGFibGUsIHVwYjo6U3ltYm9sVGFibGUpCi19OwotCi0j
ZW5kaWYgIC8qIF9fY3BsdXNwbHVzICovCi0KLVVQQl9CRUdJTl9FWFRFUk5fQwotCi0vKiBOYXRp
dmUgQyBBUEkuICovCi0KLS8qIEluY2x1ZGUgcmVmY291bnRlZCBtZXRob2RzIGxpa2UgdXBiX3N5
bXRhYl9yZWYoKS4gKi8KLVVQQl9SRUZDT1VOVEVEX0NNRVRIT0RTKHVwYl9zeW10YWIsIHVwYl9z
eW10YWJfdXBjYXN0KQotCi11cGJfc3ltdGFiICp1cGJfc3ltdGFiX25ldyhjb25zdCB2b2lkICpv
d25lcik7Ci12b2lkIHVwYl9zeW10YWJfZnJlZXplKHVwYl9zeW10YWIgKnMpOwotY29uc3QgdXBi
X2RlZiAqdXBiX3N5bXRhYl9yZXNvbHZlKGNvbnN0IHVwYl9zeW10YWIgKnMsIGNvbnN0IGNoYXIg
KmJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3lt
KTsKLWNvbnN0IHVwYl9kZWYgKnVwYl9zeW10YWJfbG9va3VwKGNvbnN0IHVwYl9zeW10YWIgKnMs
IGNvbnN0IGNoYXIgKnN5bSk7Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJfc3ltdGFiX2xvb2t1cG1z
Zyhjb25zdCB1cGJfc3ltdGFiICpzLCBjb25zdCBjaGFyICpzeW0pOwotY29uc3QgdXBiX2VudW1k
ZWYgKnVwYl9zeW10YWJfbG9va3VwZW51bShjb25zdCB1cGJfc3ltdGFiICpzLCBjb25zdCBjaGFy
ICpzeW0pOwotYm9vbCB1cGJfc3ltdGFiX2FkZCh1cGJfc3ltdGFiICpzLCB1cGJfZGVmICpjb25z
dCpkZWZzLCBpbnQgbiwgdm9pZCAqcmVmX2Rvbm9yLAotICAgICAgICAgICAgICAgICAgICB1cGJf
c3RhdHVzICpzdGF0dXMpOwotCi0vKiB1cGJfc3ltdGFiX2l0ZXIgaTsKLSAqIGZvcih1cGJfc3lt
dGFiX2JlZ2luKCZpLCBzLCB0eXBlKTsgIXVwYl9zeW10YWJfZG9uZSgmaSk7Ci0gKiAgICAgdXBi
X3N5bXRhYl9uZXh0KCZpKSkgewotICogICBjb25zdCB1cGJfZGVmICpkZWYgPSB1cGJfc3ltdGFi
X2l0ZXJfZGVmKCZpKTsKLSAqICAgIC8vIC4uLgotICogfQotICoKLSAqIEZvciBDIHdlIGRvbid0
IGhhdmUgc2VwYXJhdGUgaXRlcmF0b3JzIGZvciBjb25zdCBhbmQgbm9uLWNvbnN0LgotICogSXQg
aXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNhc3QgdGhlIHVwYl9maWVsZGRlZiog
dG8KLSAqIGNvbnN0IGlmIHRoZSB1cGJfbXNnZGVmKiBpcyBjb25zdC4gKi8KLXZvaWQgdXBiX3N5
bXRhYl9iZWdpbih1cGJfc3ltdGFiX2l0ZXIgKml0ZXIsIGNvbnN0IHVwYl9zeW10YWIgKnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgdXBiX2RlZnR5cGVfdCB0eXBlKTsKLXZvaWQgdXBiX3N5bXRh
Yl9uZXh0KHVwYl9zeW10YWJfaXRlciAqaXRlcik7Ci1ib29sIHVwYl9zeW10YWJfZG9uZShjb25z
dCB1cGJfc3ltdGFiX2l0ZXIgKml0ZXIpOwotY29uc3QgdXBiX2RlZiAqdXBiX3N5bXRhYl9pdGVy
X2RlZihjb25zdCB1cGJfc3ltdGFiX2l0ZXIgKml0ZXIpOwotCi1VUEJfRU5EX0VYVEVSTl9DCi0K
LSNpZmRlZiBfX2NwbHVzcGx1cwotLyogQysrIGlubGluZSB3cmFwcGVycy4gKi8KLW5hbWVzcGFj
ZSB1cGIgewotaW5saW5lIHJlZmZlZF9wdHI8U3ltYm9sVGFibGU+IFN5bWJvbFRhYmxlOjpOZXco
KSB7Ci0gIHVwYl9zeW10YWIgKnMgPSB1cGJfc3ltdGFiX25ldygmcyk7Ci0gIHJldHVybiByZWZm
ZWRfcHRyPFN5bWJvbFRhYmxlPihzLCAmcyk7Ci19Ci0KLWlubGluZSB2b2lkIFN5bWJvbFRhYmxl
OjpGcmVlemUoKSB7Ci0gIHJldHVybiB1cGJfc3ltdGFiX2ZyZWV6ZSh0aGlzKTsKLX0KLWlubGlu
ZSBjb25zdCBEZWYgKlN5bWJvbFRhYmxlOjpSZXNvbHZlKGNvbnN0IGNoYXIgKmJhc2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzeW0pIGNvbnN0
IHsKLSAgcmV0dXJuIHVwYl9zeW10YWJfcmVzb2x2ZSh0aGlzLCBiYXNlLCBzeW0pOwotfQotaW5s
aW5lIGNvbnN0IERlZiogU3ltYm9sVGFibGU6Okxvb2t1cChjb25zdCBjaGFyICpzeW0pIGNvbnN0
IHsKLSAgcmV0dXJuIHVwYl9zeW10YWJfbG9va3VwKHRoaXMsIHN5bSk7Ci19Ci1pbmxpbmUgY29u
c3QgTWVzc2FnZURlZiAqU3ltYm9sVGFibGU6Okxvb2t1cE1lc3NhZ2UoY29uc3QgY2hhciAqc3lt
KSBjb25zdCB7Ci0gIHJldHVybiB1cGJfc3ltdGFiX2xvb2t1cG1zZyh0aGlzLCBzeW0pOwotfQot
aW5saW5lIGJvb2wgU3ltYm9sVGFibGU6OkFkZCgKLSAgICBEZWYqY29uc3QqIGRlZnMsIGludCBu
LCB2b2lkKiByZWZfZG9ub3IsIHVwYl9zdGF0dXMqIHN0YXR1cykgewotICByZXR1cm4gdXBiX3N5
bXRhYl9hZGQodGhpcywgKHVwYl9kZWYqY29uc3QqKWRlZnMsIG4sIHJlZl9kb25vciwgc3RhdHVz
KTsKLX0KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLSNlbmRpZgotCi0jZW5kaWYgIC8qIFVQQl9T
WU1UQUJfSF8gKi8KLS8qCi0qKiB1cGI6OmRlc2NyaXB0b3I6OlJlYWRlciAodXBiX2Rlc2NyZWFk
ZXIpCi0qKgotKiogUHJvdmlkZXMgYSB3YXkgb2YgYnVpbGRpbmcgdXBiOjpEZWZzIGZyb20gZGF0
YSBpbiBkZXNjcmlwdG9yLnByb3RvIGZvcm1hdC4KLSovCi0KLSNpZm5kZWYgVVBCX0RFU0NSSVBU
T1JfSAotI2RlZmluZSBVUEJfREVTQ1JJUFRPUl9ICi0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1u
YW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBkZXNjcmlwdG9yIHsKLWNsYXNzIFJlYWRlcjsKLX0g
IC8qIG5hbWVzcGFjZSBkZXNjcmlwdG9yICovCi19ICAvKiBuYW1lc3BhY2UgdXBiICovCi0jZW5k
aWYKLQotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6OmRlc2NyaXB0b3I6OlJlYWRlciwgdXBiX2Rlc2Ny
ZWFkZXIpCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBDbGFzcyB0aGF0IHJlY2VpdmVzIGRl
c2NyaXB0b3IgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGRlc2NyaXB0b3IucHJvdG8gc2NoZW1hCi0g
KiBhbmQgdXNlIGl0IHRvIGJ1aWxkIHVwYjo6RGVmcyBjb3JyZXNwb25kaW5nIHRvIHRoYXQgc2No
ZW1hLiAqLwotY2xhc3MgdXBiOjpkZXNjcmlwdG9yOjpSZWFkZXIgewotIHB1YmxpYzoKLSAgLyog
VGhlc2UgaGFuZGxlcnMgbXVzdCBoYXZlIGNvbWUgZnJvbSBOZXdIYW5kbGVycygpIGFuZCBtdXN0
IG91dGxpdmUgdGhlCi0gICAqIFJlYWRlci4KLSAgICoKLSAgICogVE9ETzogZ2VuZXJhdGUgdGhl
IGhhbmRsZXJzIHN0YXRpY2FsbHkgKGxpa2Ugd2UgZG8gd2l0aCB0aGUKLSAgICogZGVzY3JpcHRv
ci5wcm90byBkZWZzKSBzbyB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgdG8gcGFzcyB0aGlzIHBhcmFt
ZXRlciAob3IKLSAgICogdG8gYnVpbGQvbWVtb3J5LW1hbmFnZSB0aGUgaGFuZGxlcnMgYXQgcnVu
dGltZSBhdCBhbGwpLiAgVW5mb3J0dW5hdGVseSB0aGlzCi0gICAqIGlzIGEgYml0IHRyaWNreSB0
byBpbXBsZW1lbnQgZm9yIEhhbmRsZXJzLCBidXQgbmVjZXNzYXJ5IHRvIHNpbXBsaWZ5IHRoaXMK
LSAgICogaW50ZXJmYWNlLiAqLwotICBzdGF0aWMgUmVhZGVyKiBDcmVhdGUoRW52aXJvbm1lbnQq
IGVudiwgY29uc3QgSGFuZGxlcnMqIGhhbmRsZXJzKTsKLQotICAvKiBUaGUgcmVhZGVyJ3MgaW5w
dXQ7IHRoaXMgaXMgd2hlcmUgZGVzY3JpcHRvci5wcm90byBkYXRhIHNob3VsZCBiZSBzZW50LiAq
LwotICBTaW5rKiBpbnB1dCgpOwotCi0gIC8qIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGRlZnMg
dGhhdCBoYXZlIGJlZW4gcGFyc2VkLCBhbmQgdHJhbnNmZXJzIG93bmVyc2hpcAotICAgKiBvZiB0
aGVtIHRvICJvd25lciIuICBUaGUgbnVtYmVyIG9mIGRlZnMgaXMgc3RvcmVkIGluICpuLiAgT3du
ZXJzaGlwIG9mIHRoZQotICAgKiByZXR1cm5lZCBhcnJheSBpcyByZXRhaW5lZCBhbmQgaXMgaW52
YWxpZGF0ZWQgYnkgYW55IG90aGVyIGNhbGwgaW50bwotICAgKiBSZWFkZXIuCi0gICAqCi0gICAq
IFRoZXNlIGRlZnMgYXJlIG5vdCBmcm96ZW4gb3IgcmVzb2x2ZWQ7IHRoZXkgYXJlIHJlYWR5IHRv
IGJlIGFkZGVkIHRvIGEKLSAgICogc3ltdGFiLiAqLwotICB1cGI6OkRlZioqIEdldERlZnModm9p
ZCogb3duZXIsIGludCogbik7Ci0KLSAgLyogQnVpbGRzIGFuZCByZXR1cm5zIGhhbmRsZXJzIGZv
ciB0aGUgcmVhZGVyLCBvd25lZCBieSAib3duZXIuIiAqLwotICBzdGF0aWMgSGFuZGxlcnMqIE5l
d0hhbmRsZXJzKGNvbnN0IHZvaWQqIG93bmVyKTsKLQotIHByaXZhdGU6Ci0gIFVQQl9ESVNBTExP
V19QT0RfT1BTKFJlYWRlciwgdXBiOjpkZXNjcmlwdG9yOjpSZWFkZXIpCi19OwotCi0jZW5kaWYK
LQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLS8qIEMgQVBJLiAqLwotdXBiX2Rlc2NyZWFkZXIgKnVw
Yl9kZXNjcmVhZGVyX2NyZWF0ZSh1cGJfZW52ICplLCBjb25zdCB1cGJfaGFuZGxlcnMgKmgpOwot
dXBiX3NpbmsgKnVwYl9kZXNjcmVhZGVyX2lucHV0KHVwYl9kZXNjcmVhZGVyICpyKTsKLXVwYl9k
ZWYgKip1cGJfZGVzY3JlYWRlcl9nZXRkZWZzKHVwYl9kZXNjcmVhZGVyICpyLCB2b2lkICpvd25l
ciwgaW50ICpuKTsKLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBiX2Rlc2NyZWFkZXJfbmV3aGFuZGxl
cnMoY29uc3Qgdm9pZCAqb3duZXIpOwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2Nw
bHVzcGx1cwotLyogQysrIGltcGxlbWVudGF0aW9uIGRldGFpbHMuICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLW5hbWVzcGFjZSB1cGIgewotbmFtZXNw
YWNlIGRlc2NyaXB0b3IgewotaW5saW5lIFJlYWRlciogUmVhZGVyOjpDcmVhdGUoRW52aXJvbm1l
bnQqIGUsIGNvbnN0IEhhbmRsZXJzICpoKSB7Ci0gIHJldHVybiB1cGJfZGVzY3JlYWRlcl9jcmVh
dGUoZSwgaCk7Ci19Ci1pbmxpbmUgU2luayogUmVhZGVyOjppbnB1dCgpIHsgcmV0dXJuIHVwYl9k
ZXNjcmVhZGVyX2lucHV0KHRoaXMpOyB9Ci1pbmxpbmUgdXBiOjpEZWYqKiBSZWFkZXI6OkdldERl
ZnModm9pZCogb3duZXIsIGludCogbikgewotICByZXR1cm4gdXBiX2Rlc2NyZWFkZXJfZ2V0ZGVm
cyh0aGlzLCBvd25lciwgbik7Ci19Ci19ICAvKiBuYW1lc3BhY2UgZGVzY3JpcHRvciAqLwotfSAg
LyogbmFtZXNwYWNlIHVwYiAqLwotI2VuZGlmCi0KLSNlbmRpZiAgLyogVVBCX0RFU0NSSVBUT1Jf
SCAqLwotLyogVGhpcyBmaWxlIGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgYSBzZXQgb2YgY29tcGls
ZWQtaW4gZGVmcy4KLSAqIE5vdGUgdGhhdCB1bmxpa2UgR29vZ2xlJ3MgcHJvdG9idWYsIGl0IGRv
ZXMgKm5vdCogZGVmaW5lCi0gKiBnZW5lcmF0ZWQgY2xhc3NlcyBvciBhbnkgb3RoZXIga2luZCBv
ZiBkYXRhIHN0cnVjdHVyZSBmb3IKLSAqIGFjdHVhbGx5IHN0b3JpbmcgcHJvdG9idWZzLiAgSXQg
b25seSBjb250YWlucyAqZGVmcyogd2hpY2gKLSAqIGxldCB5b3UgcmVmbGVjdCBvdmVyIGEgcHJv
dG9idWYgKnNjaGVtYSouCi0gKi8KLS8qIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IHVwYmMg
KHRoZSB1cGIgY29tcGlsZXIpLgotICogRG8gbm90IGVkaXQgLS0geW91ciBjaGFuZ2VzIHdpbGwg
YmUgZGlzY2FyZGVkIHdoZW4gdGhlIGZpbGUgaXMKLSAqIHJlZ2VuZXJhdGVkLiAqLwotCi0jaWZu
ZGVmIEdPT0dMRV9QUk9UT0JVRl9ERVNDUklQVE9SX1VQQl9IXwotI2RlZmluZSBHT09HTEVfUFJP
VE9CVUZfREVTQ1JJUFRPUl9VUEJfSF8KLQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLVVQQl9CRUdJ
Tl9FWFRFUk5fQwotI2VuZGlmCi0KLS8qIEVudW1zICovCi0KLXR5cGVkZWYgZW51bSB7Ci0gIEdP
T0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19MQUJFTF9PUFRJT05BTCA9IDEsCi0g
IEdPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19MQUJFTF9SRVFVSVJFRCA9IDIs
Ci0gIEdPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19MQUJFTF9SRVBFQVRFRCA9
IDMKLX0gZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsOwotCi10eXBl
ZGVmIGVudW0gewotICBHT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9fVFlQRV9E
T1VCTEUgPSAxLAotICBHT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9fVFlQRV9G
TE9BVCA9IDIsCi0gIEdPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19UWVBFX0lO
VDY0ID0gMywKLSAgR09PR0xFX1BST1RPQlVGX0ZJRUxEREVTQ1JJUFRPUlBST1RPX1RZUEVfVUlO
VDY0ID0gNCwKLSAgR09PR0xFX1BST1RPQlVGX0ZJRUxEREVTQ1JJUFRPUlBST1RPX1RZUEVfSU5U
MzIgPSA1LAotICBHT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9fVFlQRV9GSVhF
RDY0ID0gNiwKLSAgR09PR0xFX1BST1RPQlVGX0ZJRUxEREVTQ1JJUFRPUlBST1RPX1RZUEVfRklY
RUQzMiA9IDcsCi0gIEdPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19UWVBFX0JP
T0wgPSA4LAotICBHT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9fVFlQRV9TVFJJ
TkcgPSA5LAotICBHT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9fVFlQRV9HUk9V
UCA9IDEwLAotICBHT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9fVFlQRV9NRVNT
QUdFID0gMTEsCi0gIEdPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19UWVBFX0JZ
VEVTID0gMTIsCi0gIEdPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19UWVBFX1VJ
TlQzMiA9IDEzLAotICBHT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9fVFlQRV9F
TlVNID0gMTQsCi0gIEdPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19UWVBFX1NG
SVhFRDMyID0gMTUsCi0gIEdPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19UWVBF
X1NGSVhFRDY0ID0gMTYsCi0gIEdPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19U
WVBFX1NJTlQzMiA9IDE3LAotICBHT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9f
VFlQRV9TSU5UNjQgPSAxOAotfSBnb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9f
VHlwZTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgR09PR0xFX1BST1RPQlVGX0ZJRUxET1BUSU9OU19T
VFJJTkcgPSAwLAotICBHT09HTEVfUFJPVE9CVUZfRklFTERPUFRJT05TX0NPUkQgPSAxLAotICBH
T09HTEVfUFJPVE9CVUZfRklFTERPUFRJT05TX1NUUklOR19QSUVDRSA9IDIKLX0gZ29vZ2xlX3By
b3RvYnVmX0ZpZWxkT3B0aW9uc19DVHlwZTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgR09PR0xFX1BS
T1RPQlVGX0ZJTEVPUFRJT05TX1NQRUVEID0gMSwKLSAgR09PR0xFX1BST1RPQlVGX0ZJTEVPUFRJ
T05TX0NPREVfU0laRSA9IDIsCi0gIEdPT0dMRV9QUk9UT0JVRl9GSUxFT1BUSU9OU19MSVRFX1JV
TlRJTUUgPSAzCi19IGdvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGU7Ci0K
LS8qIFNlbGVjdG9ycyAqLwotCi0vKiBnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvICov
Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfREVTQ1JJUFRPUlBST1RPX0ZJRUxEX1NUQVJU
U1VCTVNHIDIKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9ERVNDUklQVE9SUFJPVE9fTkVT
VEVEX1RZUEVfU1RBUlRTVUJNU0cgMwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RFU0NS
SVBUT1JQUk9UT19FTlVNX1RZUEVfU1RBUlRTVUJNU0cgNAotI2RlZmluZSBTRUxfR09PR0xFX1BS
T1RPQlVGX0RFU0NSSVBUT1JQUk9UT19FWFRFTlNJT05fUkFOR0VfU1RBUlRTVUJNU0cgNQotI2Rl
ZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RFU0NSSVBUT1JQUk9UT19FWFRFTlNJT05fU1RBUlRT
VUJNU0cgNgotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RFU0NSSVBUT1JQUk9UT19PUFRJ
T05TX1NUQVJUU1VCTVNHIDcKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9ERVNDUklQVE9S
UFJPVE9fRklFTERfU1RBUlRTRVEgOAotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RFU0NS
SVBUT1JQUk9UT19GSUVMRF9FTkRTRVEgOQotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RF
U0NSSVBUT1JQUk9UT19GSUVMRF9FTkRTVUJNU0cgMTAKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9U
T0JVRl9ERVNDUklQVE9SUFJPVE9fTkVTVEVEX1RZUEVfU1RBUlRTRVEgMTEKLSNkZWZpbmUgU0VM
X0dPT0dMRV9QUk9UT0JVRl9ERVNDUklQVE9SUFJPVE9fTkVTVEVEX1RZUEVfRU5EU0VRIDEyCi0j
ZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfREVTQ1JJUFRPUlBST1RPX05FU1RFRF9UWVBFX0VO
RFNVQk1TRyAxMwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RFU0NSSVBUT1JQUk9UT19F
TlVNX1RZUEVfU1RBUlRTRVEgMTQKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9ERVNDUklQ
VE9SUFJPVE9fRU5VTV9UWVBFX0VORFNFUSAxNQotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVG
X0RFU0NSSVBUT1JQUk9UT19FTlVNX1RZUEVfRU5EU1VCTVNHIDE2Ci0jZGVmaW5lIFNFTF9HT09H
TEVfUFJPVE9CVUZfREVTQ1JJUFRPUlBST1RPX0VYVEVOU0lPTl9SQU5HRV9TVEFSVFNFUSAxNwot
I2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RFU0NSSVBUT1JQUk9UT19FWFRFTlNJT05fUkFO
R0VfRU5EU0VRIDE4Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfREVTQ1JJUFRPUlBST1RP
X0VYVEVOU0lPTl9SQU5HRV9FTkRTVUJNU0cgMTkKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JV
Rl9ERVNDUklQVE9SUFJPVE9fRVhURU5TSU9OX1NUQVJUU0VRIDIwCi0jZGVmaW5lIFNFTF9HT09H
TEVfUFJPVE9CVUZfREVTQ1JJUFRPUlBST1RPX0VYVEVOU0lPTl9FTkRTRVEgMjEKLSNkZWZpbmUg
U0VMX0dPT0dMRV9QUk9UT0JVRl9ERVNDUklQVE9SUFJPVE9fRVhURU5TSU9OX0VORFNVQk1TRyAy
MgotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RFU0NSSVBUT1JQUk9UT19PUFRJT05TX0VO
RFNVQk1TRyAyMwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RFU0NSSVBUT1JQUk9UT19O
QU1FX1NUUklORyAyNAotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0RFU0NSSVBUT1JQUk9U
T19OQU1FX1NUQVJUU1RSIDI1Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfREVTQ1JJUFRP
UlBST1RPX05BTUVfRU5EU1RSIDI2Ci0KLS8qIGdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJv
dG8uRXh0ZW5zaW9uUmFuZ2UgKi8KLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9ERVNDUklQ
VE9SUFJPVE9fRVhURU5TSU9OUkFOR0VfU1RBUlRfSU5UMzIgMgotI2RlZmluZSBTRUxfR09PR0xF
X1BST1RPQlVGX0RFU0NSSVBUT1JQUk9UT19FWFRFTlNJT05SQU5HRV9FTkRfSU5UMzIgMwotCi0v
KiBnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90byAqLwotI2RlZmluZSBTRUxfR09P
R0xFX1BST1RPQlVGX0VOVU1ERVNDUklQVE9SUFJPVE9fVkFMVUVfU1RBUlRTVUJNU0cgMgotI2Rl
ZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0VOVU1ERVNDUklQVE9SUFJPVE9fT1BUSU9OU19TVEFS
VFNVQk1TRyAzCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRU5VTURFU0NSSVBUT1JQUk9U
T19WQUxVRV9TVEFSVFNFUSA0Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRU5VTURFU0NS
SVBUT1JQUk9UT19WQUxVRV9FTkRTRVEgNQotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0VO
VU1ERVNDUklQVE9SUFJPVE9fVkFMVUVfRU5EU1VCTVNHIDYKLSNkZWZpbmUgU0VMX0dPT0dMRV9Q
Uk9UT0JVRl9FTlVNREVTQ1JJUFRPUlBST1RPX09QVElPTlNfRU5EU1VCTVNHIDcKLSNkZWZpbmUg
U0VMX0dPT0dMRV9QUk9UT0JVRl9FTlVNREVTQ1JJUFRPUlBST1RPX05BTUVfU1RSSU5HIDgKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9FTlVNREVTQ1JJUFRPUlBST1RPX05BTUVfU1RBUlRT
VFIgOQotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0VOVU1ERVNDUklQVE9SUFJPVE9fTkFN
RV9FTkRTVFIgMTAKLQotLyogZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zICovCi0jZGVmaW5l
IFNFTF9HT09HTEVfUFJPVE9CVUZfRU5VTU9QVElPTlNfVU5JTlRFUlBSRVRFRF9PUFRJT05fU1RB
UlRTVUJNU0cgMgotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0VOVU1PUFRJT05TX1VOSU5U
RVJQUkVURURfT1BUSU9OX1NUQVJUU0VRIDMKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9F
TlVNT1BUSU9OU19VTklOVEVSUFJFVEVEX09QVElPTl9FTkRTRVEgNAotI2RlZmluZSBTRUxfR09P
R0xFX1BST1RPQlVGX0VOVU1PUFRJT05TX1VOSU5URVJQUkVURURfT1BUSU9OX0VORFNVQk1TRyA1
Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRU5VTU9QVElPTlNfQUxMT1dfQUxJQVNfQk9P
TCA2Ci0KLS8qIGdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gKi8KLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9FTlVNVkFMVUVERVNDUklQVE9SUFJPVE9fT1BUSU9O
U19TVEFSVFNVQk1TRyAyCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRU5VTVZBTFVFREVT
Q1JJUFRPUlBST1RPX09QVElPTlNfRU5EU1VCTVNHIDMKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9U
T0JVRl9FTlVNVkFMVUVERVNDUklQVE9SUFJPVE9fTkFNRV9TVFJJTkcgNAotI2RlZmluZSBTRUxf
R09PR0xFX1BST1RPQlVGX0VOVU1WQUxVRURFU0NSSVBUT1JQUk9UT19OQU1FX1NUQVJUU1RSIDUK
LSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9FTlVNVkFMVUVERVNDUklQVE9SUFJPVE9fTkFN
RV9FTkRTVFIgNgotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0VOVU1WQUxVRURFU0NSSVBU
T1JQUk9UT19OVU1CRVJfSU5UMzIgNwotCi0vKiBnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0
aW9ucyAqLwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0VOVU1WQUxVRU9QVElPTlNfVU5J
TlRFUlBSRVRFRF9PUFRJT05fU1RBUlRTVUJNU0cgMgotI2RlZmluZSBTRUxfR09PR0xFX1BST1RP
QlVGX0VOVU1WQUxVRU9QVElPTlNfVU5JTlRFUlBSRVRFRF9PUFRJT05fU1RBUlRTRVEgMwotI2Rl
ZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0VOVU1WQUxVRU9QVElPTlNfVU5JTlRFUlBSRVRFRF9P
UFRJT05fRU5EU0VRIDQKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9FTlVNVkFMVUVPUFRJ
T05TX1VOSU5URVJQUkVURURfT1BUSU9OX0VORFNVQk1TRyA1Ci0KLS8qIGdvb2dsZS5wcm90b2J1
Zi5GaWVsZERlc2NyaXB0b3JQcm90byAqLwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJ
RUxEREVTQ1JJUFRPUlBST1RPX09QVElPTlNfU1RBUlRTVUJNU0cgMgotI2RlZmluZSBTRUxfR09P
R0xFX1BST1RPQlVGX0ZJRUxEREVTQ1JJUFRPUlBST1RPX09QVElPTlNfRU5EU1VCTVNHIDMKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19OQU1FX1NUUklO
RyA0Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9fTkFN
RV9TVEFSVFNUUiA1Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9S
UFJPVE9fTkFNRV9FTkRTVFIgNgotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJRUxEREVT
Q1JJUFRPUlBST1RPX0VYVEVOREVFX1NUUklORyA3Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9C
VUZfRklFTERERVNDUklQVE9SUFJPVE9fRVhURU5ERUVfU1RBUlRTVFIgOAotI2RlZmluZSBTRUxf
R09PR0xFX1BST1RPQlVGX0ZJRUxEREVTQ1JJUFRPUlBST1RPX0VYVEVOREVFX0VORFNUUiA5Ci0j
ZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9fTlVNQkVSX0lO
VDMyIDEwCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklFTERERVNDUklQVE9SUFJPVE9f
TEFCRUxfSU5UMzIgMTEKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBU
T1JQUk9UT19UWVBFX0lOVDMyIDEyCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklFTERE
RVNDUklQVE9SUFJPVE9fVFlQRV9OQU1FX1NUUklORyAxMwotI2RlZmluZSBTRUxfR09PR0xFX1BS
T1RPQlVGX0ZJRUxEREVTQ1JJUFRPUlBST1RPX1RZUEVfTkFNRV9TVEFSVFNUUiAxNAotI2RlZmlu
ZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJRUxEREVTQ1JJUFRPUlBST1RPX1RZUEVfTkFNRV9FTkRT
VFIgMTUKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19E
RUZBVUxUX1ZBTFVFX1NUUklORyAxNgotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJRUxE
REVTQ1JJUFRPUlBST1RPX0RFRkFVTFRfVkFMVUVfU1RBUlRTVFIgMTcKLSNkZWZpbmUgU0VMX0dP
T0dMRV9QUk9UT0JVRl9GSUVMRERFU0NSSVBUT1JQUk9UT19ERUZBVUxUX1ZBTFVFX0VORFNUUiAx
OAotCi0vKiBnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zICovCi0jZGVmaW5lIFNFTF9HT09H
TEVfUFJPVE9CVUZfRklFTERPUFRJT05TX1VOSU5URVJQUkVURURfT1BUSU9OX1NUQVJUU1VCTVNH
IDIKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUVMRE9QVElPTlNfVU5JTlRFUlBSRVRF
RF9PUFRJT05fU1RBUlRTRVEgMwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJRUxET1BU
SU9OU19VTklOVEVSUFJFVEVEX09QVElPTl9FTkRTRVEgNAotI2RlZmluZSBTRUxfR09PR0xFX1BS
T1RPQlVGX0ZJRUxET1BUSU9OU19VTklOVEVSUFJFVEVEX09QVElPTl9FTkRTVUJNU0cgNQotI2Rl
ZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJRUxET1BUSU9OU19DVFlQRV9JTlQzMiA2Ci0jZGVm
aW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklFTERPUFRJT05TX1BBQ0tFRF9CT09MIDcKLSNkZWZp
bmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUVMRE9QVElPTlNfREVQUkVDQVRFRF9CT09MIDgKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUVMRE9QVElPTlNfTEFaWV9CT09MIDkKLSNkZWZp
bmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUVMRE9QVElPTlNfRVhQRVJJTUVOVEFMX01BUF9LRVlf
U1RSSU5HIDEwCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklFTERPUFRJT05TX0VYUEVS
SU1FTlRBTF9NQVBfS0VZX1NUQVJUU1RSIDExCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZf
RklFTERPUFRJT05TX0VYUEVSSU1FTlRBTF9NQVBfS0VZX0VORFNUUiAxMgotI2RlZmluZSBTRUxf
R09PR0xFX1BST1RPQlVGX0ZJRUxET1BUSU9OU19XRUFLX0JPT0wgMTMKLQotLyogZ29vZ2xlLnBy
b3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8gKi8KLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JV
Rl9GSUxFREVTQ1JJUFRPUlBST1RPX01FU1NBR0VfVFlQRV9TVEFSVFNVQk1TRyAyCi0jZGVmaW5l
IFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRURFU0NSSVBUT1JQUk9UT19FTlVNX1RZUEVfU1RBUlRT
VUJNU0cgMwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJTEVERVNDUklQVE9SUFJPVE9f
U0VSVklDRV9TVEFSVFNVQk1TRyA0Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRURF
U0NSSVBUT1JQUk9UT19FWFRFTlNJT05fU1RBUlRTVUJNU0cgNQotI2RlZmluZSBTRUxfR09PR0xF
X1BST1RPQlVGX0ZJTEVERVNDUklQVE9SUFJPVE9fT1BUSU9OU19TVEFSVFNVQk1TRyA2Ci0jZGVm
aW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRURFU0NSSVBUT1JQUk9UT19TT1VSQ0VfQ09ERV9J
TkZPX1NUQVJUU1VCTVNHIDcKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJ
UFRPUlBST1RPX01FU1NBR0VfVFlQRV9TVEFSVFNFUSA4Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJP
VE9CVUZfRklMRURFU0NSSVBUT1JQUk9UT19NRVNTQUdFX1RZUEVfRU5EU0VRIDkKLSNkZWZpbmUg
U0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX01FU1NBR0VfVFlQRV9FTkRT
VUJNU0cgMTAKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RP
X0VOVU1fVFlQRV9TVEFSVFNFUSAxMQotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJTEVE
RVNDUklQVE9SUFJPVE9fRU5VTV9UWVBFX0VORFNFUSAxMgotI2RlZmluZSBTRUxfR09PR0xFX1BS
T1RPQlVGX0ZJTEVERVNDUklQVE9SUFJPVE9fRU5VTV9UWVBFX0VORFNVQk1TRyAxMwotI2RlZmlu
ZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJTEVERVNDUklQVE9SUFJPVE9fU0VSVklDRV9TVEFSVFNF
USAxNAotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJTEVERVNDUklQVE9SUFJPVE9fU0VS
VklDRV9FTkRTRVEgMTUKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRP
UlBST1RPX1NFUlZJQ0VfRU5EU1VCTVNHIDE2Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZf
RklMRURFU0NSSVBUT1JQUk9UT19FWFRFTlNJT05fU1RBUlRTRVEgMTcKLSNkZWZpbmUgU0VMX0dP
T0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX0VYVEVOU0lPTl9FTkRTRVEgMTgKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX0VYVEVOU0lPTl9F
TkRTVUJNU0cgMTkKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBS
T1RPX09QVElPTlNfRU5EU1VCTVNHIDIwCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklM
RURFU0NSSVBUT1JQUk9UT19TT1VSQ0VfQ09ERV9JTkZPX0VORFNVQk1TRyAyMQotI2RlZmluZSBT
RUxfR09PR0xFX1BST1RPQlVGX0ZJTEVERVNDUklQVE9SUFJPVE9fTkFNRV9TVFJJTkcgMjIKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX05BTUVfU1RBUlRT
VFIgMjMKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX05B
TUVfRU5EU1RSIDI0Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRURFU0NSSVBUT1JQ
Uk9UT19QQUNLQUdFX1NUUklORyAyNQotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJTEVE
RVNDUklQVE9SUFJPVE9fUEFDS0FHRV9TVEFSVFNUUiAyNgotI2RlZmluZSBTRUxfR09PR0xFX1BS
T1RPQlVGX0ZJTEVERVNDUklQVE9SUFJPVE9fUEFDS0FHRV9FTkRTVFIgMjcKLSNkZWZpbmUgU0VM
X0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX0RFUEVOREVOQ1lfU1RBUlRTRVEg
MjgKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX0RFUEVO
REVOQ1lfRU5EU0VRIDI5Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRURFU0NSSVBU
T1JQUk9UT19ERVBFTkRFTkNZX1NUUklORyAzMAotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVG
X0ZJTEVERVNDUklQVE9SUFJPVE9fREVQRU5ERU5DWV9TVEFSVFNUUiAzMQotI2RlZmluZSBTRUxf
R09PR0xFX1BST1RPQlVGX0ZJTEVERVNDUklQVE9SUFJPVE9fREVQRU5ERU5DWV9FTkRTVFIgMzIK
LSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX1BVQkxJQ19E
RVBFTkRFTkNZX1NUQVJUU0VRIDMzCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRURF
U0NSSVBUT1JQUk9UT19QVUJMSUNfREVQRU5ERU5DWV9FTkRTRVEgMzQKLSNkZWZpbmUgU0VMX0dP
T0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX1BVQkxJQ19ERVBFTkRFTkNZX0lOVDMy
IDM1Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRURFU0NSSVBUT1JQUk9UT19XRUFL
X0RFUEVOREVOQ1lfU1RBUlRTRVEgMzYKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxF
REVTQ1JJUFRPUlBST1RPX1dFQUtfREVQRU5ERU5DWV9FTkRTRVEgMzcKLSNkZWZpbmUgU0VMX0dP
T0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlBST1RPX1dFQUtfREVQRU5ERU5DWV9JTlQzMiAz
OAotCi0vKiBnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQgKi8KLSNkZWZpbmUgU0VM
X0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlNFVF9GSUxFX1NUQVJUU1VCTVNHIDIKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlNFVF9GSUxFX1NUQVJUU0VR
IDMKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFREVTQ1JJUFRPUlNFVF9GSUxFX0VO
RFNFUSA0Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRURFU0NSSVBUT1JTRVRfRklM
RV9FTkRTVUJNU0cgNQotCi0vKiBnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMgKi8KLSNkZWZp
bmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFT1BUSU9OU19VTklOVEVSUFJFVEVEX09QVElPTl9T
VEFSVFNVQk1TRyAyCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRU9QVElPTlNfVU5J
TlRFUlBSRVRFRF9PUFRJT05fU1RBUlRTRVEgMwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVG
X0ZJTEVPUFRJT05TX1VOSU5URVJQUkVURURfT1BUSU9OX0VORFNFUSA0Ci0jZGVmaW5lIFNFTF9H
T09HTEVfUFJPVE9CVUZfRklMRU9QVElPTlNfVU5JTlRFUlBSRVRFRF9PUFRJT05fRU5EU1VCTVNH
IDUKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFT1BUSU9OU19KQVZBX1BBQ0tBR0Vf
U1RSSU5HIDYKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFT1BUSU9OU19KQVZBX1BB
Q0tBR0VfU1RBUlRTVFIgNwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJTEVPUFRJT05T
X0pBVkFfUEFDS0FHRV9FTkRTVFIgOAotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJTEVP
UFRJT05TX0pBVkFfT1VURVJfQ0xBU1NOQU1FX1NUUklORyA5Ci0jZGVmaW5lIFNFTF9HT09HTEVf
UFJPVE9CVUZfRklMRU9QVElPTlNfSkFWQV9PVVRFUl9DTEFTU05BTUVfU1RBUlRTVFIgMTAKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFT1BUSU9OU19KQVZBX09VVEVSX0NMQVNTTkFN
RV9FTkRTVFIgMTEKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFT1BUSU9OU19PUFRJ
TUlaRV9GT1JfSU5UMzIgMTIKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9GSUxFT1BUSU9O
U19KQVZBX01VTFRJUExFX0ZJTEVTX0JPT0wgMTMKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JV
Rl9GSUxFT1BUSU9OU19HT19QQUNLQUdFX1NUUklORyAxNAotI2RlZmluZSBTRUxfR09PR0xFX1BS
T1RPQlVGX0ZJTEVPUFRJT05TX0dPX1BBQ0tBR0VfU1RBUlRTVFIgMTUKLSNkZWZpbmUgU0VMX0dP
T0dMRV9QUk9UT0JVRl9GSUxFT1BUSU9OU19HT19QQUNLQUdFX0VORFNUUiAxNgotI2RlZmluZSBT
RUxfR09PR0xFX1BST1RPQlVGX0ZJTEVPUFRJT05TX0NDX0dFTkVSSUNfU0VSVklDRVNfQk9PTCAx
NwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX0ZJTEVPUFRJT05TX0pBVkFfR0VORVJJQ19T
RVJWSUNFU19CT09MIDE4Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfRklMRU9QVElPTlNf
UFlfR0VORVJJQ19TRVJWSUNFU19CT09MIDE5Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZf
RklMRU9QVElPTlNfSkFWQV9HRU5FUkFURV9FUVVBTFNfQU5EX0hBU0hfQk9PTCAyMAotCi0vKiBn
b29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMgKi8KLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9U
T0JVRl9NRVNTQUdFT1BUSU9OU19VTklOVEVSUFJFVEVEX09QVElPTl9TVEFSVFNVQk1TRyAyCi0j
ZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfTUVTU0FHRU9QVElPTlNfVU5JTlRFUlBSRVRFRF9P
UFRJT05fU1RBUlRTRVEgMwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX01FU1NBR0VPUFRJ
T05TX1VOSU5URVJQUkVURURfT1BUSU9OX0VORFNFUSA0Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJP
VE9CVUZfTUVTU0FHRU9QVElPTlNfVU5JTlRFUlBSRVRFRF9PUFRJT05fRU5EU1VCTVNHIDUKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9NRVNTQUdFT1BUSU9OU19NRVNTQUdFX1NFVF9XSVJF
X0ZPUk1BVF9CT09MIDYKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9NRVNTQUdFT1BUSU9O
U19OT19TVEFOREFSRF9ERVNDUklQVE9SX0FDQ0VTU09SX0JPT0wgNwotCi0vKiBnb29nbGUucHJv
dG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvICovCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9C
VUZfTUVUSE9EREVTQ1JJUFRPUlBST1RPX09QVElPTlNfU1RBUlRTVUJNU0cgMgotI2RlZmluZSBT
RUxfR09PR0xFX1BST1RPQlVGX01FVEhPRERFU0NSSVBUT1JQUk9UT19PUFRJT05TX0VORFNVQk1T
RyAzCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfTUVUSE9EREVTQ1JJUFRPUlBST1RPX05B
TUVfU1RSSU5HIDQKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9NRVRIT0RERVNDUklQVE9S
UFJPVE9fTkFNRV9TVEFSVFNUUiA1Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfTUVUSE9E
REVTQ1JJUFRPUlBST1RPX05BTUVfRU5EU1RSIDYKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JV
Rl9NRVRIT0RERVNDUklQVE9SUFJPVE9fSU5QVVRfVFlQRV9TVFJJTkcgNwotI2RlZmluZSBTRUxf
R09PR0xFX1BST1RPQlVGX01FVEhPRERFU0NSSVBUT1JQUk9UT19JTlBVVF9UWVBFX1NUQVJUU1RS
IDgKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9NRVRIT0RERVNDUklQVE9SUFJPVE9fSU5Q
VVRfVFlQRV9FTkRTVFIgOQotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX01FVEhPRERFU0NS
SVBUT1JQUk9UT19PVVRQVVRfVFlQRV9TVFJJTkcgMTAKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9U
T0JVRl9NRVRIT0RERVNDUklQVE9SUFJPVE9fT1VUUFVUX1RZUEVfU1RBUlRTVFIgMTEKLSNkZWZp
bmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9NRVRIT0RERVNDUklQVE9SUFJPVE9fT1VUUFVUX1RZUEVf
RU5EU1RSIDEyCi0KLS8qIGdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zICovCi0jZGVmaW5l
IFNFTF9HT09HTEVfUFJPVE9CVUZfTUVUSE9ET1BUSU9OU19VTklOVEVSUFJFVEVEX09QVElPTl9T
VEFSVFNVQk1TRyAyCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfTUVUSE9ET1BUSU9OU19V
TklOVEVSUFJFVEVEX09QVElPTl9TVEFSVFNFUSAzCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9C
VUZfTUVUSE9ET1BUSU9OU19VTklOVEVSUFJFVEVEX09QVElPTl9FTkRTRVEgNAotI2RlZmluZSBT
RUxfR09PR0xFX1BST1RPQlVGX01FVEhPRE9QVElPTlNfVU5JTlRFUlBSRVRFRF9PUFRJT05fRU5E
U1VCTVNHIDUKLQotLyogZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8gKi8K
LSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9TRVJWSUNFREVTQ1JJUFRPUlBST1RPX01FVEhP
RF9TVEFSVFNVQk1TRyAyCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfU0VSVklDRURFU0NS
SVBUT1JQUk9UT19PUFRJT05TX1NUQVJUU1VCTVNHIDMKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9U
T0JVRl9TRVJWSUNFREVTQ1JJUFRPUlBST1RPX01FVEhPRF9TVEFSVFNFUSA0Ci0jZGVmaW5lIFNF
TF9HT09HTEVfUFJPVE9CVUZfU0VSVklDRURFU0NSSVBUT1JQUk9UT19NRVRIT0RfRU5EU0VRIDUK
LSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9TRVJWSUNFREVTQ1JJUFRPUlBST1RPX01FVEhP
RF9FTkRTVUJNU0cgNgotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX1NFUlZJQ0VERVNDUklQ
VE9SUFJPVE9fT1BUSU9OU19FTkRTVUJNU0cgNwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVG
X1NFUlZJQ0VERVNDUklQVE9SUFJPVE9fTkFNRV9TVFJJTkcgOAotI2RlZmluZSBTRUxfR09PR0xF
X1BST1RPQlVGX1NFUlZJQ0VERVNDUklQVE9SUFJPVE9fTkFNRV9TVEFSVFNUUiA5Ci0jZGVmaW5l
IFNFTF9HT09HTEVfUFJPVE9CVUZfU0VSVklDRURFU0NSSVBUT1JQUk9UT19OQU1FX0VORFNUUiAx
MAotCi0vKiBnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMgKi8KLSNkZWZpbmUgU0VMX0dP
T0dMRV9QUk9UT0JVRl9TRVJWSUNFT1BUSU9OU19VTklOVEVSUFJFVEVEX09QVElPTl9TVEFSVFNV
Qk1TRyAyCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfU0VSVklDRU9QVElPTlNfVU5JTlRF
UlBSRVRFRF9PUFRJT05fU1RBUlRTRVEgMwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX1NF
UlZJQ0VPUFRJT05TX1VOSU5URVJQUkVURURfT1BUSU9OX0VORFNFUSA0Ci0jZGVmaW5lIFNFTF9H
T09HTEVfUFJPVE9CVUZfU0VSVklDRU9QVElPTlNfVU5JTlRFUlBSRVRFRF9PUFRJT05fRU5EU1VC
TVNHIDUKLQotLyogZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvICovCi0jZGVmaW5lIFNF
TF9HT09HTEVfUFJPVE9CVUZfU09VUkNFQ09ERUlORk9fTE9DQVRJT05fU1RBUlRTVUJNU0cgMgot
I2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX1NPVVJDRUNPREVJTkZPX0xPQ0FUSU9OX1NUQVJU
U0VRIDMKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9TT1VSQ0VDT0RFSU5GT19MT0NBVElP
Tl9FTkRTRVEgNAotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX1NPVVJDRUNPREVJTkZPX0xP
Q0FUSU9OX0VORFNVQk1TRyA1Ci0KLS8qIGdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5M
b2NhdGlvbiAqLwotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX1NPVVJDRUNPREVJTkZPX0xP
Q0FUSU9OX1BBVEhfU1RBUlRTRVEgMgotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX1NPVVJD
RUNPREVJTkZPX0xPQ0FUSU9OX1BBVEhfRU5EU0VRIDMKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9U
T0JVRl9TT1VSQ0VDT0RFSU5GT19MT0NBVElPTl9QQVRIX0lOVDMyIDQKLSNkZWZpbmUgU0VMX0dP
T0dMRV9QUk9UT0JVRl9TT1VSQ0VDT0RFSU5GT19MT0NBVElPTl9TUEFOX1NUQVJUU0VRIDUKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9TT1VSQ0VDT0RFSU5GT19MT0NBVElPTl9TUEFOX0VO
RFNFUSA2Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfU09VUkNFQ09ERUlORk9fTE9DQVRJ
T05fU1BBTl9JTlQzMiA3Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfU09VUkNFQ09ERUlO
Rk9fTE9DQVRJT05fTEVBRElOR19DT01NRU5UU19TVFJJTkcgOAotI2RlZmluZSBTRUxfR09PR0xF
X1BST1RPQlVGX1NPVVJDRUNPREVJTkZPX0xPQ0FUSU9OX0xFQURJTkdfQ09NTUVOVFNfU1RBUlRT
VFIgOQotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVGX1NPVVJDRUNPREVJTkZPX0xPQ0FUSU9O
X0xFQURJTkdfQ09NTUVOVFNfRU5EU1RSIDEwCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZf
U09VUkNFQ09ERUlORk9fTE9DQVRJT05fVFJBSUxJTkdfQ09NTUVOVFNfU1RSSU5HIDExCi0jZGVm
aW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfU09VUkNFQ09ERUlORk9fTE9DQVRJT05fVFJBSUxJTkdf
Q09NTUVOVFNfU1RBUlRTVFIgMTIKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9TT1VSQ0VD
T0RFSU5GT19MT0NBVElPTl9UUkFJTElOR19DT01NRU5UU19FTkRTVFIgMTMKLQotLyogZ29vZ2xl
LnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24gKi8KLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9U
T0JVRl9VTklOVEVSUFJFVEVET1BUSU9OX05BTUVfU1RBUlRTVUJNU0cgMgotI2RlZmluZSBTRUxf
R09PR0xFX1BST1RPQlVGX1VOSU5URVJQUkVURURPUFRJT05fTkFNRV9TVEFSVFNFUSAzCi0jZGVm
aW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfVU5JTlRFUlBSRVRFRE9QVElPTl9OQU1FX0VORFNFUSA0
Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfVU5JTlRFUlBSRVRFRE9QVElPTl9OQU1FX0VO
RFNVQk1TRyA1Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfVU5JTlRFUlBSRVRFRE9QVElP
Tl9JREVOVElGSUVSX1ZBTFVFX1NUUklORyA2Ci0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZf
VU5JTlRFUlBSRVRFRE9QVElPTl9JREVOVElGSUVSX1ZBTFVFX1NUQVJUU1RSIDcKLSNkZWZpbmUg
U0VMX0dPT0dMRV9QUk9UT0JVRl9VTklOVEVSUFJFVEVET1BUSU9OX0lERU5USUZJRVJfVkFMVUVf
RU5EU1RSIDgKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9VTklOVEVSUFJFVEVET1BUSU9O
X1BPU0lUSVZFX0lOVF9WQUxVRV9VSU5UNjQgOQotI2RlZmluZSBTRUxfR09PR0xFX1BST1RPQlVG
X1VOSU5URVJQUkVURURPUFRJT05fTkVHQVRJVkVfSU5UX1ZBTFVFX0lOVDY0IDEwCi0jZGVmaW5l
IFNFTF9HT09HTEVfUFJPVE9CVUZfVU5JTlRFUlBSRVRFRE9QVElPTl9ET1VCTEVfVkFMVUVfRE9V
QkxFIDExCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfVU5JTlRFUlBSRVRFRE9QVElPTl9T
VFJJTkdfVkFMVUVfU1RSSU5HIDEyCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfVU5JTlRF
UlBSRVRFRE9QVElPTl9TVFJJTkdfVkFMVUVfU1RBUlRTVFIgMTMKLSNkZWZpbmUgU0VMX0dPT0dM
RV9QUk9UT0JVRl9VTklOVEVSUFJFVEVET1BUSU9OX1NUUklOR19WQUxVRV9FTkRTVFIgMTQKLSNk
ZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9VTklOVEVSUFJFVEVET1BUSU9OX0FHR1JFR0FURV9W
QUxVRV9TVFJJTkcgMTUKLSNkZWZpbmUgU0VMX0dPT0dMRV9QUk9UT0JVRl9VTklOVEVSUFJFVEVE
T1BUSU9OX0FHR1JFR0FURV9WQUxVRV9TVEFSVFNUUiAxNgotI2RlZmluZSBTRUxfR09PR0xFX1BS
T1RPQlVGX1VOSU5URVJQUkVURURPUFRJT05fQUdHUkVHQVRFX1ZBTFVFX0VORFNUUiAxNwotCi0v
KiBnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCAqLwotI2RlZmlu
ZSBTRUxfR09PR0xFX1BST1RPQlVGX1VOSU5URVJQUkVURURPUFRJT05fTkFNRVBBUlRfTkFNRV9Q
QVJUX1NUUklORyAyCi0jZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfVU5JTlRFUlBSRVRFRE9Q
VElPTl9OQU1FUEFSVF9OQU1FX1BBUlRfU1RBUlRTVFIgMwotI2RlZmluZSBTRUxfR09PR0xFX1BS
T1RPQlVGX1VOSU5URVJQUkVURURPUFRJT05fTkFNRVBBUlRfTkFNRV9QQVJUX0VORFNUUiA0Ci0j
ZGVmaW5lIFNFTF9HT09HTEVfUFJPVE9CVUZfVU5JTlRFUlBSRVRFRE9QVElPTl9OQU1FUEFSVF9J
U19FWFRFTlNJT05fQk9PTCA1Ci0KLWNvbnN0IHVwYl9zeW10YWIgKnVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX2Rlc2NyaXB0b3IoY29uc3Qgdm9pZCAqb3duZXIpOwotCi0vKiBNZXNzYWdlRGVmcyAq
LwotVVBCX0lOTElORSBjb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9E
ZXNjcmlwdG9yUHJvdG8oY29uc3QgdXBiX3N5bXRhYiAqcykgewotICBjb25zdCB1cGJfbXNnZGVm
ICptID0gdXBiX3N5bXRhYl9sb29rdXBtc2cocywgImdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9y
UHJvdG8iKTsKLSAgYXNzZXJ0KG0pOwotICByZXR1cm4gbTsKLX0KLVVQQl9JTkxJTkUgY29uc3Qg
dXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX0V4dGVu
c2lvblJhbmdlKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9
IHVwYl9zeW10YWJfbG9va3VwbXNnKHMsICJnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3Rv
LkV4dGVuc2lvblJhbmdlIik7Ci0gIGFzc2VydChtKTsKLSAgcmV0dXJuIG07Ci19Ci1VUEJfSU5M
SU5FIGNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1EZXNjcmlw
dG9yUHJvdG8oY29uc3QgdXBiX3N5bXRhYiAqcykgewotICBjb25zdCB1cGJfbXNnZGVmICptID0g
dXBiX3N5bXRhYl9sb29rdXBtc2cocywgImdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclBy
b3RvIik7Ci0gIGFzc2VydChtKTsKLSAgcmV0dXJuIG07Ci19Ci1VUEJfSU5MSU5FIGNvbnN0IHVw
Yl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1PcHRpb25zKGNvbnN0IHVwYl9z
eW10YWIgKnMpIHsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9zeW10YWJfbG9va3VwbXNn
KHMsICJnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMiKTsKLSAgYXNzZXJ0KG0pOwotICByZXR1
cm4gbTsKLX0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsKLSAg
Y29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9zeW10YWJfbG9va3VwbXNnKHMsICJnb29nbGUucHJv
dG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIik7Ci0gIGFzc2VydChtKTsKLSAgcmV0dXJu
IG07Ci19Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX0VudW1WYWx1ZU9wdGlvbnMoY29uc3QgdXBiX3N5bXRhYiAqcykgewotICBjb25zdCB1cGJf
bXNnZGVmICptID0gdXBiX3N5bXRhYl9sb29rdXBtc2cocywgImdvb2dsZS5wcm90b2J1Zi5FbnVt
VmFsdWVPcHRpb25zIik7Ci0gIGFzc2VydChtKTsKLSAgcmV0dXJuIG07Ci19Ci1VUEJfSU5MSU5F
IGNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRv
clByb3RvKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9IHVw
Yl9zeW10YWJfbG9va3VwbXNnKHMsICJnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJv
dG8iKTsKLSAgYXNzZXJ0KG0pOwotICByZXR1cm4gbTsKLX0KLVVQQl9JTkxJTkUgY29uc3QgdXBi
X21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zKGNvbnN0IHVwYl9z
eW10YWIgKnMpIHsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9zeW10YWJfbG9va3VwbXNn
KHMsICJnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zIik7Ci0gIGFzc2VydChtKTsKLSAgcmV0
dXJuIG07Ci19Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG8oY29uc3QgdXBiX3N5bXRhYiAqcykgewotICBjb25z
dCB1cGJfbXNnZGVmICptID0gdXBiX3N5bXRhYl9sb29rdXBtc2cocywgImdvb2dsZS5wcm90b2J1
Zi5GaWxlRGVzY3JpcHRvclByb3RvIik7Ci0gIGFzc2VydChtKTsKLSAgcmV0dXJuIG07Ci19Ci1V
UEJfSU5MSU5FIGNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVE
ZXNjcmlwdG9yU2V0KGNvbnN0IHVwYl9zeW10YWIgKnMpIHsKLSAgY29uc3QgdXBiX21zZ2RlZiAq
bSA9IHVwYl9zeW10YWJfbG9va3VwbXNnKHMsICJnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0
b3JTZXQiKTsKLSAgYXNzZXJ0KG0pOwotICByZXR1cm4gbTsKLX0KLVVQQl9JTkxJTkUgY29uc3Qg
dXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnMoY29uc3QgdXBi
X3N5bXRhYiAqcykgewotICBjb25zdCB1cGJfbXNnZGVmICptID0gdXBiX3N5bXRhYl9sb29rdXBt
c2cocywgImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucyIpOwotICBhc3NlcnQobSk7Ci0gIHJl
dHVybiBtOwotfQotVVBCX0lOTElORSBjb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9w
cm90b2J1Zl9NZXNzYWdlT3B0aW9ucyhjb25zdCB1cGJfc3ltdGFiICpzKSB7Ci0gIGNvbnN0IHVw
Yl9tc2dkZWYgKm0gPSB1cGJfc3ltdGFiX2xvb2t1cG1zZyhzLCAiZ29vZ2xlLnByb3RvYnVmLk1l
c3NhZ2VPcHRpb25zIik7Ci0gIGFzc2VydChtKTsKLSAgcmV0dXJuIG07Ci19Ci1VUEJfSU5MSU5F
IGNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01ldGhvZERlc2NyaXB0
b3JQcm90byhjb25zdCB1cGJfc3ltdGFiICpzKSB7Ci0gIGNvbnN0IHVwYl9tc2dkZWYgKm0gPSB1
cGJfc3ltdGFiX2xvb2t1cG1zZyhzLCAiZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQ
cm90byIpOwotICBhc3NlcnQobSk7Ci0gIHJldHVybiBtOwotfQotVVBCX0lOTElORSBjb25zdCB1
cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2RPcHRpb25zKGNvbnN0IHVw
Yl9zeW10YWIgKnMpIHsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9zeW10YWJfbG9va3Vw
bXNnKHMsICJnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucyIpOwotICBhc3NlcnQobSk7Ci0g
IHJldHVybiBtOwotfQotVVBCX0lOTElORSBjb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2ds
ZV9wcm90b2J1Zl9TZXJ2aWNlRGVzY3JpcHRvclByb3RvKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsK
LSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9zeW10YWJfbG9va3VwbXNnKHMsICJnb29nbGUu
cHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90byIpOwotICBhc3NlcnQobSk7Ci0gIHJldHVy
biBtOwotfQotVVBCX0lOTElORSBjb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9TZXJ2aWNlT3B0aW9ucyhjb25zdCB1cGJfc3ltdGFiICpzKSB7Ci0gIGNvbnN0IHVwYl9t
c2dkZWYgKm0gPSB1cGJfc3ltdGFiX2xvb2t1cG1zZyhzLCAiZ29vZ2xlLnByb3RvYnVmLlNlcnZp
Y2VPcHRpb25zIik7Ci0gIGFzc2VydChtKTsKLSAgcmV0dXJuIG07Ci19Ci1VUEJfSU5MSU5FIGNv
bnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NvdXJjZUNvZGVJbmZvKGNv
bnN0IHVwYl9zeW10YWIgKnMpIHsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9zeW10YWJf
bG9va3VwbXNnKHMsICJnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8iKTsKLSAgYXNzZXJ0
KG0pOwotICByZXR1cm4gbTsKLX0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVm
c19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9fTG9jYXRpb24oY29uc3QgdXBiX3N5bXRh
YiAqcykgewotICBjb25zdCB1cGJfbXNnZGVmICptID0gdXBiX3N5bXRhYl9sb29rdXBtc2cocywg
Imdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbiIpOwotICBhc3NlcnQobSk7
Ci0gIHJldHVybiBtOwotfQotVVBCX0lOTElORSBjb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsK
LSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9zeW10YWJfbG9va3VwbXNnKHMsICJnb29nbGUu
cHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiIpOwotICBhc3NlcnQobSk7Ci0gIHJldHVybiBt
OwotfQotVVBCX0lOTElORSBjb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9VbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KGNvbnN0IHVwYl9zeW10YWIgKnMpIHsKLSAg
Y29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9zeW10YWJfbG9va3VwbXNnKHMsICJnb29nbGUucHJv
dG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCIpOwotICBhc3NlcnQobSk7Ci0gIHJl
dHVybiBtOwotfQotCi0KLS8qIEVudW1EZWZzICovCi1VUEJfSU5MSU5FIGNvbnN0IHVwYl9lbnVt
ZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbChj
b25zdCB1cGJfc3ltdGFiICpzKSB7Ci0gIGNvbnN0IHVwYl9lbnVtZGVmICplID0gdXBiX3N5bXRh
Yl9sb29rdXBlbnVtKHMsICJnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFi
ZWwiKTsKLSAgYXNzZXJ0KGUpOwotICByZXR1cm4gZTsKLX0KLVVQQl9JTkxJTkUgY29uc3QgdXBi
X2VudW1kZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX1R5
cGUoY29uc3QgdXBiX3N5bXRhYiAqcykgewotICBjb25zdCB1cGJfZW51bWRlZiAqZSA9IHVwYl9z
eW10YWJfbG9va3VwZW51bShzLCAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3Rv
LlR5cGUiKTsKLSAgYXNzZXJ0KGUpOwotICByZXR1cm4gZTsKLX0KLVVQQl9JTkxJTkUgY29uc3Qg
dXBiX2VudW1kZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19DVHlwZShj
b25zdCB1cGJfc3ltdGFiICpzKSB7Ci0gIGNvbnN0IHVwYl9lbnVtZGVmICplID0gdXBiX3N5bXRh
Yl9sb29rdXBlbnVtKHMsICJnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlIik7Ci0g
IGFzc2VydChlKTsKLSAgcmV0dXJuIGU7Ci19Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9lbnVtZGVm
ICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUoY29uc3Qg
dXBiX3N5bXRhYiAqcykgewotICBjb25zdCB1cGJfZW51bWRlZiAqZSA9IHVwYl9zeW10YWJfbG9v
a3VwZW51bShzLCAiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZSIpOwot
ICBhc3NlcnQoZSk7Ci0gIHJldHVybiBlOwotfQotCi1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVs
ZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJh
bmdlX2VuZChjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKHMpLCAy
KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX0Rlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZV9zdGFydChjb25zdCB1cGJfc3ltdGFi
ICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVz
Y3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKHMpLCAxKTsgfQotVVBCX0lOTElORSBjb25zdCB1
cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19lbnVt
X3R5cGUoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRl
ZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90byhzKSwgNCk7IH0KLVVQQl9JTkxJTkUg
Y29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlwdG9yUHJv
dG9fZXh0ZW5zaW9uKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRv
Zih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlwdG9yUHJvdG8ocyksIDYpOyB9Ci1VUEJf
SU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3Jp
cHRvclByb3RvX2V4dGVuc2lvbl9yYW5nZShjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1
cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvKHMp
LCA1KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX0Rlc2NyaXB0b3JQcm90b19maWVsZChjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVy
biB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3Rv
KHMpLCAyKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19uYW1lKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0
dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlwdG9yUHJv
dG8ocyksIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX25lc3RlZF90eXBlKGNvbnN0IHVwYl9zeW10YWIg
KnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNj
cmlwdG9yUHJvdG8ocyksIDMpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX29wdGlvbnMoY29uc3QgdXBiX3N5
bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X0Rlc2NyaXB0b3JQcm90byhzKSwgNyk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVm
ICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtRGVzY3JpcHRvclByb3RvX25hbWUoY29uc3Qg
dXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX0VudW1EZXNjcmlwdG9yUHJvdG8ocyksIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVw
Yl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bURlc2NyaXB0b3JQcm90b19v
cHRpb25zKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJk
ZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtRGVzY3JpcHRvclByb3RvKHMpLCAzKTsgfQotVVBCX0lO
TElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1EZXNj
cmlwdG9yUHJvdG9fdmFsdWUoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2Rl
Zl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1EZXNjcmlwdG9yUHJvdG8ocyksIDIp
OyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfRW51bU9wdGlvbnNfYWxsb3dfYWxpYXMoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4g
dXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1PcHRpb25zKHMpLCAy
KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX0VudW1PcHRpb25zX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKGNvbnN0IHVwYl9zeW10YWIgKnMp
IHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtT3B0
aW9ucyhzKSwgOTk5KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNf
Z29vZ2xlX3Byb3RvYnVmX0VudW1WYWx1ZURlc2NyaXB0b3JQcm90b19uYW1lKGNvbnN0IHVwYl9z
eW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ocyksIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVw
Yl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVlRGVzY3JpcHRvclBy
b3RvX251bWJlcihjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2Yo
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKHMpLCAyKTsg
fQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X0VudW1WYWx1ZURlc2NyaXB0b3JQcm90b19vcHRpb25zKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsg
cmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtVmFsdWVE
ZXNjcmlwdG9yUHJvdG8ocyksIDMpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAq
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVlT3B0aW9uc191bmludGVycHJldGVkX29w
dGlvbihjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVm
c19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVlT3B0aW9ucyhzKSwgOTk5KTsgfQotVVBCX0lOTElO
RSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3Jp
cHRvclByb3RvX2RlZmF1bHRfdmFsdWUoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBi
X21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3Rv
KHMpLCA3KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX2V4dGVuZGVlKGNvbnN0IHVwYl9zeW10YWIg
KnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVs
ZERlc2NyaXB0b3JQcm90byhzKSwgMik7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVm
ICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19sYWJlbChjb25z
dCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVf
cHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG8ocyksIDQpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0
IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJv
dG9fbmFtZShjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG8ocyksIDEpOyB9Ci1VUEJf
SU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRE
ZXNjcmlwdG9yUHJvdG9fbnVtYmVyKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9t
c2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90byhz
KSwgMyk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9w
cm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19vcHRpb25zKGNvbnN0IHVwYl9zeW10YWIgKnMp
IHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERl
c2NyaXB0b3JQcm90byhzKSwgOCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1
cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b190eXBlKGNvbnN0IHVw
Yl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90byhzKSwgNSk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBi
X2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b190
eXBlX25hbWUoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVw
YmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvKHMpLCA2KTsgfQotVVBC
X0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxk
T3B0aW9uc19jdHlwZShjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0
b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zKHMpLCAxKTsgfQotVVBCX0lO
TElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0
aW9uc19kZXByZWNhdGVkKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZf
aXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnMocyksIDMpOyB9Ci1VUEJf
SU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRP
cHRpb25zX2V4cGVyaW1lbnRhbF9tYXBfa2V5KGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJu
IHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnMocyks
IDkpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfRmllbGRPcHRpb25zX2xhenkoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBi
X21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9ucyhzKSwgNSk7
IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9GaWVsZE9wdGlvbnNfcGFja2VkKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9t
c2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnMocyksIDIpOyB9
Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZf
RmllbGRPcHRpb25zX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsg
cmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlv
bnMocyksIDk5OSk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnNfd2Vhayhjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJl
dHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25z
KHMpLCAxMCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2ds
ZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvX2RlcGVuZGVuY3koY29uc3QgdXBiX3N5bXRh
YiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Zp
bGVEZXNjcmlwdG9yUHJvdG8ocyksIDMpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRl
ZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19lbnVtX3R5cGUo
Y29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG8ocyksIDUpOyB9Ci1VUEJfSU5MSU5FIGNv
bnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQ
cm90b19leHRlbnNpb24oY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9p
dG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG8ocyksIDcpOyB9
Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZf
RmlsZURlc2NyaXB0b3JQcm90b19tZXNzYWdlX3R5cGUoY29uc3QgdXBiX3N5bXRhYiAqcykgeyBy
ZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlw
dG9yUHJvdG8ocyksIDQpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVm
c19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19uYW1lKGNvbnN0IHVwYl9zeW10
YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9G
aWxlRGVzY3JpcHRvclByb3RvKHMpLCAxKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRk
ZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9fb3B0aW9ucyhj
b25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90byhzKSwgOCk7IH0KLVVQQl9JTkxJTkUgY29u
c3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclBy
b3RvX3BhY2thZ2UoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9m
KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG8ocyksIDIpOyB9Ci1V
UEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmls
ZURlc2NyaXB0b3JQcm90b19wdWJsaWNfZGVwZW5kZW5jeShjb25zdCB1cGJfc3ltdGFiICpzKSB7
IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2Ny
aXB0b3JQcm90byhzKSwgMTApOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19zZXJ2aWNlKGNvbnN0IHVw
Yl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvKHMpLCA2KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJf
ZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9fc291
cmNlX2NvZGVfaW5mbyhjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0
b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90byhzKSwgOSk7IH0K
LVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9G
aWxlRGVzY3JpcHRvclByb3RvX3dlYWtfZGVwZW5kZW5jeShjb25zdCB1cGJfc3ltdGFiICpzKSB7
IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2Ny
aXB0b3JQcm90byhzKSwgMTEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JTZXRfZmlsZShjb25zdCB1cGJfc3lt
dGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZf
RmlsZURlc2NyaXB0b3JTZXQocyksIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRl
ZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfY2NfZ2VuZXJpY19zZXJ2aWNl
cyhjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19n
b29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnMocyksIDE2KTsgfQotVVBCX0lOTElORSBjb25zdCB1
cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2dvX3BhY2th
Z2UoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNf
Z29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zKHMpLCAxMSk7IH0KLVVQQl9JTkxJTkUgY29uc3Qg
dXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19qYXZhX2dl
bmVyYXRlX2VxdWFsc19hbmRfaGFzaChjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJf
bXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnMocyksIDIwKTsg
fQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X0ZpbGVPcHRpb25zX2phdmFfZ2VuZXJpY19zZXJ2aWNlcyhjb25zdCB1cGJfc3ltdGFiICpzKSB7
IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlv
bnMocyksIDE3KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2phdmFfbXVsdGlwbGVfZmlsZXMoY29uc3QgdXBiX3N5
bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X0ZpbGVPcHRpb25zKHMpLCAxMCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1
cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19qYXZhX291dGVyX2NsYXNzbmFtZShj
b25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRmlsZU9wdGlvbnMocyksIDgpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9m
aWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfamF2YV9wYWNrYWdl
KGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9ucyhzKSwgMSk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBi
X2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19vcHRpbWl6ZV9m
b3IoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNf
Z29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zKHMpLCA5KTsgfQotVVBCX0lOTElORSBjb25zdCB1
cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX3B5X2dlbmVy
aWNfc2VydmljZXMoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9m
KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zKHMpLCAxOCk7IH0KLVVQQl9JTkxJ
TkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9u
c191bmludGVycHJldGVkX29wdGlvbihjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJf
bXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnMocyksIDk5OSk7
IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9NZXNzYWdlT3B0aW9uc19tZXNzYWdlX3NldF93aXJlX2Zvcm1hdChjb25zdCB1cGJfc3ltdGFi
ICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWVz
c2FnZU9wdGlvbnMocyksIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfTWVzc2FnZU9wdGlvbnNfbm9fc3RhbmRhcmRfZGVzY3JpcHRv
cl9hY2Nlc3Nvcihjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2Yo
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWVzc2FnZU9wdGlvbnMocyksIDIpOyB9Ci1VUEJfSU5M
SU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWVzc2FnZU9w
dGlvbnNfdW5pbnRlcnByZXRlZF9vcHRpb24oY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4g
dXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01lc3NhZ2VPcHRpb25zKHMp
LCA5OTkpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVf
cHJvdG9idWZfTWV0aG9kRGVzY3JpcHRvclByb3RvX2lucHV0X3R5cGUoY29uc3QgdXBiX3N5bXRh
YiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01l
dGhvZERlc2NyaXB0b3JQcm90byhzKSwgMik7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxk
ZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNjcmlwdG9yUHJvdG9fbmFtZShj
b25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29n
bGVfcHJvdG9idWZfTWV0aG9kRGVzY3JpcHRvclByb3RvKHMpLCAxKTsgfQotVVBCX0lOTElORSBj
b25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01ldGhvZERlc2NyaXB0
b3JQcm90b19vcHRpb25zKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZf
aXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNjcmlwdG9yUHJvdG8ocyksIDQp
OyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfTWV0aG9kRGVzY3JpcHRvclByb3RvX291dHB1dF90eXBlKGNvbnN0IHVwYl9zeW10YWIgKnMp
IHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2RE
ZXNjcmlwdG9yUHJvdG8ocyksIDMpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAq
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWV0aG9kT3B0aW9uc191bmludGVycHJldGVkX29wdGlv
bihjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19n
b29nbGVfcHJvdG9idWZfTWV0aG9kT3B0aW9ucyhzKSwgOTk5KTsgfQotVVBCX0lOTElORSBjb25z
dCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NlcnZpY2VEZXNjcmlwdG9y
UHJvdG9fbWV0aG9kKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRv
Zih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9TZXJ2aWNlRGVzY3JpcHRvclByb3RvKHMpLCAyKTsg
fQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X1NlcnZpY2VEZXNjcmlwdG9yUHJvdG9fbmFtZShjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVy
biB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfU2VydmljZURlc2NyaXB0
b3JQcm90byhzKSwgMSk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9TZXJ2aWNlRGVzY3JpcHRvclByb3RvX29wdGlvbnMoY29uc3QgdXBi
X3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX1NlcnZpY2VEZXNjcmlwdG9yUHJvdG8ocyksIDMpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVw
Yl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU2VydmljZU9wdGlvbnNfdW5pbnRl
cnByZXRlZF9vcHRpb24oY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9p
dG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NlcnZpY2VPcHRpb25zKHMpLCA5OTkpOyB9Ci1V
UEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291
cmNlQ29kZUluZm9fTG9jYXRpb25fbGVhZGluZ19jb21tZW50cyhjb25zdCB1cGJfc3ltdGFiICpz
KSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNl
Q29kZUluZm9fTG9jYXRpb24ocyksIDMpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRl
ZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9fTG9jYXRpb25fcGF0aChj
b25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29n
bGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9fTG9jYXRpb24ocyksIDEpOyB9Ci1VUEJfSU5MSU5F
IGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUlu
Zm9fTG9jYXRpb25fc3Bhbihjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVm
X2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9fTG9jYXRpb24ocyks
IDIpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfU291cmNlQ29kZUluZm9fTG9jYXRpb25fdHJhaWxpbmdfY29tbWVudHMoY29uc3QgdXBi
X3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX1NvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKHMpLCA0KTsgfQotVVBCX0lOTElORSBjb25zdCB1
cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NvdXJjZUNvZGVJbmZvX2xvY2F0
aW9uKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VDb2RlSW5mbyhzKSwgMSk7IH0KLVVQQl9JTkxJTkUgY29u
c3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0
aW9uX05hbWVQYXJ0X2lzX2V4dGVuc2lvbihjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1
cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlv
bl9OYW1lUGFydChzKSwgMik7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJk
ZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0X25hbWVfcGFy
dChjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19n
b29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydChzKSwgMSk7IH0KLVVQ
Ql9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Vbmlu
dGVycHJldGVkT3B0aW9uX2FnZ3JlZ2F0ZV92YWx1ZShjb25zdCB1cGJfc3ltdGFiICpzKSB7IHJl
dHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRl
ZE9wdGlvbihzKSwgOCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uX2RvdWJsZV92YWx1ZShjb25zdCB1
cGJfc3ltdGFiICpzKSB7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YodXBiZGVmc19nb29nbGVfcHJv
dG9idWZfVW5pbnRlcnByZXRlZE9wdGlvbihzKSwgNik7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBi
X2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uX2lk
ZW50aWZpZXJfdmFsdWUoY29uc3QgdXBiX3N5bXRhYiAqcykgeyByZXR1cm4gdXBiX21zZ2RlZl9p
dG9mKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRpb24ocyksIDMpOyB9
Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZf
VW5pbnRlcnByZXRlZE9wdGlvbl9uYW1lKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVw
Yl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9u
KHMpLCAyKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRpb25fbmVnYXRpdmVfaW50X3ZhbHVlKGNvbnN0IHVw
Yl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9VbmludGVycHJldGVkT3B0aW9uKHMpLCA1KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJf
ZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRpb25fcG9z
aXRpdmVfaW50X3ZhbHVlKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsgcmV0dXJuIHVwYl9tc2dkZWZf
aXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uKHMpLCA0KTsg
fQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X1VuaW50ZXJwcmV0ZWRPcHRpb25fc3RyaW5nX3ZhbHVlKGNvbnN0IHVwYl9zeW10YWIgKnMpIHsg
cmV0dXJuIHVwYl9tc2dkZWZfaXRvZih1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJl
dGVkT3B0aW9uKHMpLCA3KTsgfQotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVz
cGx1cwotCi1uYW1lc3BhY2UgdXBiZGVmcyB7Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFj
ZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgZGVzY3JpcHRvciB7Ci1pbmxpbmUgdXBiOjpyZWZmZWRf
cHRyPGNvbnN0IHVwYjo6U3ltYm9sVGFibGU+IFN5bWJvbFRhYmxlKCkgewotICBjb25zdCB1cGI6
OlN5bWJvbFRhYmxlKiBzID0gdXBiZGVmc19nb29nbGVfcHJvdG9idWZfZGVzY3JpcHRvcigmcyk7
Ci0gIHJldHVybiB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpTeW1ib2xUYWJsZT4ocywgJnMp
OwotfQotfSAgLyogbmFtZXNwYWNlIGRlc2NyaXB0b3IgKi8KLX0gIC8qIG5hbWVzcGFjZSBwcm90
b2J1ZiAqLwotfSAgLyogbmFtZXNwYWNlIGdvb2dsZSAqLwotCi0jZGVmaW5lIFJFVFVSTl9SRUZG
RUQodHlwZSwgZnVuYykgXAotICAgIGNvbnN0IHR5cGUqIG9iaiA9IGZ1bmModXBiZGVmczo6Z29v
Z2xlOjpwcm90b2J1Zjo6ZGVzY3JpcHRvcjo6U3ltYm9sVGFibGUoKS5nZXQoKSk7IFwKLSAgICBy
ZXR1cm4gdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHR5cGU+KG9iaik7Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBEZXNjcmlwdG9yUHJvdG8gewot
aW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6Ok1lc3NhZ2VEZWY+IE1lc3NhZ2VEZWYo
KSB7IFJFVFVSTl9SRUZGRUQodXBiOjpNZXNzYWdlRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9EZXNjcmlwdG9yUHJvdG8pIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpG
aWVsZERlZj4gZW51bV90eXBlKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRl
ZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19lbnVtX3R5cGUpIH0KLWlubGluZSB1
cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gZXh0ZW5zaW9uKCkgeyBSRVRVUk5f
UkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQ
cm90b19leHRlbnNpb24pIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVs
ZERlZj4gZXh0ZW5zaW9uX3JhbmdlKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVw
YmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19leHRlbnNpb25fcmFuZ2UpIH0K
LWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gZmllbGQoKSB7IFJF
VFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3Jp
cHRvclByb3RvX2ZpZWxkKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6Rmll
bGREZWY+IG5hbWUoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX25hbWUpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9w
dHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gbmVzdGVkX3R5cGUoKSB7IFJFVFVSTl9SRUZGRUQodXBi
OjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX25lc3Rl
ZF90eXBlKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IG9w
dGlvbnMoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfRGVzY3JpcHRvclByb3RvX29wdGlvbnMpIH0KLX0gIC8qIG5hbWVzcGFjZSBEZXNjcmlw
dG9yUHJvdG8gKi8KLX0gIC8qIG5hbWVzcGFjZSBwcm90b2J1ZiAqLwotfSAgLyogbmFtZXNwYWNl
IGdvb2dsZSAqLwotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgRGVzY3JpcHRvclByb3RvIHsKLW5hbWVzcGFjZSBFeHRlbnNpb25SYW5nZSB7Ci1p
bmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6TWVzc2FnZURlZj4gTWVzc2FnZURlZigp
IHsgUkVUVVJOX1JFRkZFRCh1cGI6Ok1lc3NhZ2VEZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X0Rlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSkgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0
cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBlbmQoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERl
ZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdl
X2VuZCkgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBzdGFy
dCgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9EZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2Vfc3RhcnQpIH0KLX0gIC8qIG5hbWVzcGFj
ZSBFeHRlbnNpb25SYW5nZSAqLwotfSAgLyogbmFtZXNwYWNlIERlc2NyaXB0b3JQcm90byAqLwot
fSAgLyogbmFtZXNwYWNlIHByb3RvYnVmICovCi19ICAvKiBuYW1lc3BhY2UgZ29vZ2xlICovCi0K
LW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBFbnVt
RGVzY3JpcHRvclByb3RvIHsKLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpNZXNz
YWdlRGVmPiBNZXNzYWdlRGVmKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6TWVzc2FnZURlZiwgdXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRW51bURlc2NyaXB0b3JQcm90bykgfQotaW5saW5lIHVwYjo6
cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBuYW1lKCkgeyBSRVRVUk5fUkVGRkVEKHVw
Yjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1EZXNjcmlwdG9yUHJvdG9f
bmFtZSkgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBvcHRp
b25zKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX0VudW1EZXNjcmlwdG9yUHJvdG9fb3B0aW9ucykgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0
cjxjb25zdCB1cGI6OkZpZWxkRGVmPiB2YWx1ZSgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxk
RGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtRGVzY3JpcHRvclByb3RvX3ZhbHVlKSB9
Ci19ICAvKiBuYW1lc3BhY2UgRW51bURlc2NyaXB0b3JQcm90byAqLwotfSAgLyogbmFtZXNwYWNl
IHByb3RvYnVmICovCi19ICAvKiBuYW1lc3BhY2UgZ29vZ2xlICovCi0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBFbnVtT3B0aW9ucyB7Ci1pbmxp
bmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6TWVzc2FnZURlZj4gTWVzc2FnZURlZigpIHsg
UkVUVVJOX1JFRkZFRCh1cGI6Ok1lc3NhZ2VEZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Vu
dW1PcHRpb25zKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+
IGFsbG93X2FsaWFzKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX0VudW1PcHRpb25zX2FsbG93X2FsaWFzKSB9Ci1pbmxpbmUgdXBiOjpyZWZm
ZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IHVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgeyBSRVRV
Uk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1PcHRp
b25zX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKSB9Ci19ICAvKiBuYW1lc3BhY2UgRW51bU9wdGlvbnMg
Ki8KLX0gIC8qIG5hbWVzcGFjZSBwcm90b2J1ZiAqLwotfSAgLyogbmFtZXNwYWNlIGdvb2dsZSAq
LwotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ug
RW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHsKLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3Qg
dXBiOjpNZXNzYWdlRGVmPiBNZXNzYWdlRGVmKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6TWVzc2Fn
ZURlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKSB9
Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IG5hbWUoKSB7IFJF
VFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZh
bHVlRGVzY3JpcHRvclByb3RvX25hbWUpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3Qg
dXBiOjpGaWVsZERlZj4gbnVtYmVyKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVw
YmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1WYWx1ZURlc2NyaXB0b3JQcm90b19udW1iZXIpIH0K
LWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gb3B0aW9ucygpIHsg
UkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVt
VmFsdWVEZXNjcmlwdG9yUHJvdG9fb3B0aW9ucykgfQotfSAgLyogbmFtZXNwYWNlIEVudW1WYWx1
ZURlc2NyaXB0b3JQcm90byAqLwotfSAgLyogbmFtZXNwYWNlIHByb3RvYnVmICovCi19ICAvKiBu
YW1lc3BhY2UgZ29vZ2xlICovCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLW5hbWVzcGFjZSBFbnVtVmFsdWVPcHRpb25zIHsKLWlubGluZSB1cGI6OnJlZmZlZF9w
dHI8Y29uc3QgdXBiOjpNZXNzYWdlRGVmPiBNZXNzYWdlRGVmKCkgeyBSRVRVUk5fUkVGRkVEKHVw
Yjo6TWVzc2FnZURlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVlT3B0aW9ucykg
fQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiB1bmludGVycHJl
dGVkX29wdGlvbigpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2ds
ZV9wcm90b2J1Zl9FbnVtVmFsdWVPcHRpb25zX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKSB9Ci19ICAv
KiBuYW1lc3BhY2UgRW51bVZhbHVlT3B0aW9ucyAqLwotfSAgLyogbmFtZXNwYWNlIHByb3RvYnVm
ICovCi19ICAvKiBuYW1lc3BhY2UgZ29vZ2xlICovCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFt
ZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBGaWVsZERlc2NyaXB0b3JQcm90byB7Ci1pbmxp
bmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6TWVzc2FnZURlZj4gTWVzc2FnZURlZigpIHsg
UkVUVVJOX1JFRkZFRCh1cGI6Ok1lc3NhZ2VEZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Zp
ZWxkRGVzY3JpcHRvclByb3RvKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6
RmllbGREZWY+IGRlZmF1bHRfdmFsdWUoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwg
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9fZGVmYXVsdF92YWx1
ZSkgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBleHRlbmRl
ZSgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9GaWVsZERlc2NyaXB0b3JQcm90b19leHRlbmRlZSkgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0
cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBsYWJlbCgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxk
RGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19sYWJlbCkg
fQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBuYW1lKCkgeyBS
RVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxk
RGVzY3JpcHRvclByb3RvX25hbWUpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBi
OjpGaWVsZERlZj4gbnVtYmVyKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRl
ZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX251bWJlcikgfQotaW5saW5l
IHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBvcHRpb25zKCkgeyBSRVRVUk5f
UkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3Jp
cHRvclByb3RvX29wdGlvbnMpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpG
aWVsZERlZj4gdHlwZSgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b190eXBlKSB9Ci1pbmxpbmUgdXBiOjpy
ZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IHR5cGVfbmFtZSgpIHsgUkVUVVJOX1JFRkZF
RCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQ
cm90b190eXBlX25hbWUpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpFbnVt
RGVmPiBMYWJlbCgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkVudW1EZWYsIHVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsKSB9Ci1pbmxpbmUgdXBiOjpyZWZm
ZWRfcHRyPGNvbnN0IHVwYjo6RW51bURlZj4gVHlwZSgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkVu
dW1EZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUp
IH0KLX0gIC8qIG5hbWVzcGFjZSBGaWVsZERlc2NyaXB0b3JQcm90byAqLwotfSAgLyogbmFtZXNw
YWNlIHByb3RvYnVmICovCi19ICAvKiBuYW1lc3BhY2UgZ29vZ2xlICovCi0KLW5hbWVzcGFjZSBn
b29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBGaWVsZE9wdGlvbnMgewot
aW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6Ok1lc3NhZ2VEZWY+IE1lc3NhZ2VEZWYo
KSB7IFJFVFVSTl9SRUZGRUQodXBiOjpNZXNzYWdlRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9GaWVsZE9wdGlvbnMpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVs
ZERlZj4gY3R5cGUoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRmllbGRPcHRpb25zX2N0eXBlKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRy
PGNvbnN0IHVwYjo6RmllbGREZWY+IGRlcHJlY2F0ZWQoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpG
aWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX2RlcHJlY2F0ZWQp
IH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gZXhwZXJpbWVu
dGFsX21hcF9rZXkoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRmllbGRPcHRpb25zX2V4cGVyaW1lbnRhbF9tYXBfa2V5KSB9Ci1pbmxpbmUg
dXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IGxhenkoKSB7IFJFVFVSTl9SRUZG
RUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX2xh
enkpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gcGFja2Vk
KCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X0ZpZWxkT3B0aW9uc19wYWNrZWQpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBi
OjpGaWVsZERlZj4gdW5pbnRlcnByZXRlZF9vcHRpb24oKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpG
aWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX3VuaW50ZXJwcmV0
ZWRfb3B0aW9uKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+
IHdlYWsoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfRmllbGRPcHRpb25zX3dlYWspIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3Qg
dXBiOjpFbnVtRGVmPiBDVHlwZSgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkVudW1EZWYsIHVwYmRl
ZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19DVHlwZSkgfQotfSAgLyogbmFtZXNwYWNl
IEZpZWxkT3B0aW9ucyAqLwotfSAgLyogbmFtZXNwYWNlIHByb3RvYnVmICovCi19ICAvKiBuYW1l
c3BhY2UgZ29vZ2xlICovCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBGaWxlRGVzY3JpcHRvclByb3RvIHsKLWlubGluZSB1cGI6OnJlZmZlZF9w
dHI8Y29uc3QgdXBiOjpNZXNzYWdlRGVmPiBNZXNzYWdlRGVmKCkgeyBSRVRVUk5fUkVGRkVEKHVw
Yjo6TWVzc2FnZURlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90
bykgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBkZXBlbmRl
bmN5KCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9fZGVwZW5kZW5jeSkgfQotaW5saW5lIHVwYjo6cmVmZmVk
X3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBlbnVtX3R5cGUoKSB7IFJFVFVSTl9SRUZGRUQodXBi
OjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19l
bnVtX3R5cGUpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4g
ZXh0ZW5zaW9uKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9fZXh0ZW5zaW9uKSB9Ci1pbmxpbmUgdXBiOjpy
ZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IG1lc3NhZ2VfdHlwZSgpIHsgUkVUVVJOX1JF
RkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRv
clByb3RvX21lc3NhZ2VfdHlwZSkgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6
OkZpZWxkRGVmPiBuYW1lKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNf
Z29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9fbmFtZSkgfQotaW5saW5lIHVwYjo6
cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBvcHRpb25zKCkgeyBSRVRVUk5fUkVGRkVE
KHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJv
dG9fb3B0aW9ucykgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVm
PiBwYWNrYWdlKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9fcGFja2FnZSkgfQotaW5saW5lIHVwYjo6cmVm
ZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBwdWJsaWNfZGVwZW5kZW5jeSgpIHsgUkVUVVJO
X1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3Jp
cHRvclByb3RvX3B1YmxpY19kZXBlbmRlbmN5KSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNv
bnN0IHVwYjo6RmllbGREZWY+IHNlcnZpY2UoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERl
ZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19zZXJ2aWNlKSB9
Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IHNvdXJjZV9jb2Rl
X2luZm8oKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19zb3VyY2VfY29kZV9pbmZvKSB9Ci1pbmxpbmUgdXBi
OjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IHdlYWtfZGVwZW5kZW5jeSgpIHsgUkVU
VVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVz
Y3JpcHRvclByb3RvX3dlYWtfZGVwZW5kZW5jeSkgfQotfSAgLyogbmFtZXNwYWNlIEZpbGVEZXNj
cmlwdG9yUHJvdG8gKi8KLX0gIC8qIG5hbWVzcGFjZSBwcm90b2J1ZiAqLwotfSAgLyogbmFtZXNw
YWNlIGdvb2dsZSAqLwotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci1uYW1lc3BhY2UgRmlsZURlc2NyaXB0b3JTZXQgewotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxj
b25zdCB1cGI6Ok1lc3NhZ2VEZWY+IE1lc3NhZ2VEZWYoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpN
ZXNzYWdlRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclNldCkgfQot
aW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBmaWxlKCkgeyBSRVRV
Uk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNj
cmlwdG9yU2V0X2ZpbGUpIH0KLX0gIC8qIG5hbWVzcGFjZSBGaWxlRGVzY3JpcHRvclNldCAqLwot
fSAgLyogbmFtZXNwYWNlIHByb3RvYnVmICovCi19ICAvKiBuYW1lc3BhY2UgZ29vZ2xlICovCi0K
LW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBGaWxl
T3B0aW9ucyB7Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6TWVzc2FnZURlZj4g
TWVzc2FnZURlZigpIHsgUkVUVVJOX1JFRkZFRCh1cGI6Ok1lc3NhZ2VEZWYsIHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0
IHVwYjo6RmllbGREZWY+IGNjX2dlbmVyaWNfc2VydmljZXMoKSB7IFJFVFVSTl9SRUZGRUQodXBi
OjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfY2NfZ2VuZXJp
Y19zZXJ2aWNlcykgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVm
PiBnb19wYWNrYWdlKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2dvX3BhY2thZ2UpIH0KLWlubGluZSB1cGI6OnJlZmZl
ZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2go
KSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZf
RmlsZU9wdGlvbnNfamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gpIH0KLWlubGluZSB1cGI6
OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gamF2YV9nZW5lcmljX3NlcnZpY2VzKCkg
eyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Zp
bGVPcHRpb25zX2phdmFfZ2VuZXJpY19zZXJ2aWNlcykgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0
cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBqYXZhX211bHRpcGxlX2ZpbGVzKCkgeyBSRVRVUk5fUkVG
RkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2ph
dmFfbXVsdGlwbGVfZmlsZXMpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpG
aWVsZERlZj4gamF2YV9vdXRlcl9jbGFzc25hbWUoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVs
ZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfamF2YV9vdXRlcl9jbGFz
c25hbWUpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gamF2
YV9wYWNrYWdlKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX0ZpbGVPcHRpb25zX2phdmFfcGFja2FnZSkgfQotaW5saW5lIHVwYjo6cmVmZmVk
X3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBvcHRpbWl6ZV9mb3IoKSB7IFJFVFVSTl9SRUZGRUQo
dXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfb3B0aW1p
emVfZm9yKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IHB5
X2dlbmVyaWNfc2VydmljZXMoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVm
c19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfcHlfZ2VuZXJpY19zZXJ2aWNlcykgfQotaW5s
aW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiB1bmludGVycHJldGVkX29w
dGlvbigpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9GaWxlT3B0aW9uc191bmludGVycHJldGVkX29wdGlvbikgfQotaW5saW5lIHVwYjo6cmVm
ZmVkX3B0cjxjb25zdCB1cGI6OkVudW1EZWY+IE9wdGltaXplTW9kZSgpIHsgUkVUVVJOX1JFRkZF
RCh1cGI6OkVudW1EZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX09wdGlt
aXplTW9kZSkgfQotfSAgLyogbmFtZXNwYWNlIEZpbGVPcHRpb25zICovCi19ICAvKiBuYW1lc3Bh
Y2UgcHJvdG9idWYgKi8KLX0gIC8qIG5hbWVzcGFjZSBnb29nbGUgKi8KLQotbmFtZXNwYWNlIGdv
b2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIE1lc3NhZ2VPcHRpb25zIHsK
LWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpNZXNzYWdlRGVmPiBNZXNzYWdlRGVm
KCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6TWVzc2FnZURlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfTWVzc2FnZU9wdGlvbnMpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpG
aWVsZERlZj4gbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpG
aWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWVzc2FnZU9wdGlvbnNfbWVzc2FnZV9z
ZXRfd2lyZV9mb3JtYXQpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVs
ZERlZj4gbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpIHsgUkVUVVJOX1JFRkZFRCh1
cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXNzYWdlT3B0aW9uc19ub19z
dGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNv
bnN0IHVwYjo6RmllbGREZWY+IHVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgeyBSRVRVUk5fUkVGRkVE
KHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01lc3NhZ2VPcHRpb25zX3Vu
aW50ZXJwcmV0ZWRfb3B0aW9uKSB9Ci19ICAvKiBuYW1lc3BhY2UgTWVzc2FnZU9wdGlvbnMgKi8K
LX0gIC8qIG5hbWVzcGFjZSBwcm90b2J1ZiAqLwotfSAgLyogbmFtZXNwYWNlIGdvb2dsZSAqLwot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgTWV0
aG9kRGVzY3JpcHRvclByb3RvIHsKLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpN
ZXNzYWdlRGVmPiBNZXNzYWdlRGVmKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6TWVzc2FnZURlZiwg
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWV0aG9kRGVzY3JpcHRvclByb3RvKSB9Ci1pbmxpbmUg
dXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IGlucHV0X3R5cGUoKSB7IFJFVFVS
Tl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWV0aG9kRGVz
Y3JpcHRvclByb3RvX2lucHV0X3R5cGUpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3Qg
dXBiOjpGaWVsZERlZj4gbmFtZSgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJk
ZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNjcmlwdG9yUHJvdG9fbmFtZSkgfQotaW5saW5l
IHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBvcHRpb25zKCkgeyBSRVRVUk5f
UkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01ldGhvZERlc2Ny
aXB0b3JQcm90b19vcHRpb25zKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6
RmllbGREZWY+IG91dHB1dF90eXBlKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVw
YmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01ldGhvZERlc2NyaXB0b3JQcm90b19vdXRwdXRfdHlwZSkg
fQotfSAgLyogbmFtZXNwYWNlIE1ldGhvZERlc2NyaXB0b3JQcm90byAqLwotfSAgLyogbmFtZXNw
YWNlIHByb3RvYnVmICovCi19ICAvKiBuYW1lc3BhY2UgZ29vZ2xlICovCi0KLW5hbWVzcGFjZSBn
b29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBNZXRob2RPcHRpb25zIHsK
LWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpNZXNzYWdlRGVmPiBNZXNzYWdlRGVm
KCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6TWVzc2FnZURlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfTWV0aG9kT3B0aW9ucykgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZp
ZWxkRGVmPiB1bmludGVycHJldGVkX29wdGlvbigpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxk
RGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2RPcHRpb25zX3VuaW50ZXJwcmV0ZWRf
b3B0aW9uKSB9Ci19ICAvKiBuYW1lc3BhY2UgTWV0aG9kT3B0aW9ucyAqLwotfSAgLyogbmFtZXNw
YWNlIHByb3RvYnVmICovCi19ICAvKiBuYW1lc3BhY2UgZ29vZ2xlICovCi0KLW5hbWVzcGFjZSBn
b29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBTZXJ2aWNlRGVzY3JpcHRv
clByb3RvIHsKLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpNZXNzYWdlRGVmPiBN
ZXNzYWdlRGVmKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6TWVzc2FnZURlZiwgdXBiZGVmc19nb29n
bGVfcHJvdG9idWZfU2VydmljZURlc2NyaXB0b3JQcm90bykgfQotaW5saW5lIHVwYjo6cmVmZmVk
X3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBtZXRob2QoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpG
aWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU2VydmljZURlc2NyaXB0b3JQcm90b19t
ZXRob2QpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gbmFt
ZSgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9TZXJ2aWNlRGVzY3JpcHRvclByb3RvX25hbWUpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8
Y29uc3QgdXBiOjpGaWVsZERlZj4gb3B0aW9ucygpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxk
RGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9TZXJ2aWNlRGVzY3JpcHRvclByb3RvX29wdGlv
bnMpIH0KLX0gIC8qIG5hbWVzcGFjZSBTZXJ2aWNlRGVzY3JpcHRvclByb3RvICovCi19ICAvKiBu
YW1lc3BhY2UgcHJvdG9idWYgKi8KLX0gIC8qIG5hbWVzcGFjZSBnb29nbGUgKi8KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIFNlcnZpY2VPcHRp
b25zIHsKLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpNZXNzYWdlRGVmPiBNZXNz
YWdlRGVmKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6TWVzc2FnZURlZiwgdXBiZGVmc19nb29nbGVf
cHJvdG9idWZfU2VydmljZU9wdGlvbnMpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3Qg
dXBiOjpGaWVsZERlZj4gdW5pbnRlcnByZXRlZF9vcHRpb24oKSB7IFJFVFVSTl9SRUZGRUQodXBi
OjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU2VydmljZU9wdGlvbnNfdW5pbnRl
cnByZXRlZF9vcHRpb24pIH0KLX0gIC8qIG5hbWVzcGFjZSBTZXJ2aWNlT3B0aW9ucyAqLwotfSAg
LyogbmFtZXNwYWNlIHByb3RvYnVmICovCi19ICAvKiBuYW1lc3BhY2UgZ29vZ2xlICovCi0KLW5h
bWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBTb3VyY2VD
b2RlSW5mbyB7Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6TWVzc2FnZURlZj4g
TWVzc2FnZURlZigpIHsgUkVUVVJOX1JFRkZFRCh1cGI6Ok1lc3NhZ2VEZWYsIHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX1NvdXJjZUNvZGVJbmZvKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNv
bnN0IHVwYjo6RmllbGREZWY+IGxvY2F0aW9uKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGRE
ZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NvdXJjZUNvZGVJbmZvX2xvY2F0aW9uKSB9Ci19
ICAvKiBuYW1lc3BhY2UgU291cmNlQ29kZUluZm8gKi8KLX0gIC8qIG5hbWVzcGFjZSBwcm90b2J1
ZiAqLwotfSAgLyogbmFtZXNwYWNlIGdvb2dsZSAqLwotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgU291cmNlQ29kZUluZm8gewotbmFtZXNwYWNl
IExvY2F0aW9uIHsKLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpNZXNzYWdlRGVm
PiBNZXNzYWdlRGVmKCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6TWVzc2FnZURlZiwgdXBiZGVmc19n
b29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9fTG9jYXRpb24pIH0KLWlubGluZSB1cGI6OnJl
ZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gbGVhZGluZ19jb21tZW50cygpIHsgUkVUVVJO
X1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VDb2Rl
SW5mb19Mb2NhdGlvbl9sZWFkaW5nX2NvbW1lbnRzKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRy
PGNvbnN0IHVwYjo6RmllbGREZWY+IHBhdGgoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERl
ZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9fTG9jYXRpb25fcGF0aCkg
fQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBzcGFuKCkgeyBS
RVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NvdXJj
ZUNvZGVJbmZvX0xvY2F0aW9uX3NwYW4pIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3Qg
dXBiOjpGaWVsZERlZj4gdHJhaWxpbmdfY29tbWVudHMoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpG
aWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9fTG9jYXRpb25f
dHJhaWxpbmdfY29tbWVudHMpIH0KLX0gIC8qIG5hbWVzcGFjZSBMb2NhdGlvbiAqLwotfSAgLyog
bmFtZXNwYWNlIFNvdXJjZUNvZGVJbmZvICovCi19ICAvKiBuYW1lc3BhY2UgcHJvdG9idWYgKi8K
LX0gIC8qIG5hbWVzcGFjZSBnb29nbGUgKi8KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3Bh
Y2UgcHJvdG9idWYgewotbmFtZXNwYWNlIFVuaW50ZXJwcmV0ZWRPcHRpb24gewotaW5saW5lIHVw
Yjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6Ok1lc3NhZ2VEZWY+IE1lc3NhZ2VEZWYoKSB7IFJFVFVS
Tl9SRUZGRUQodXBiOjpNZXNzYWdlRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVy
cHJldGVkT3B0aW9uKSB9Ci1pbmxpbmUgdXBiOjpyZWZmZWRfcHRyPGNvbnN0IHVwYjo6RmllbGRE
ZWY+IGFnZ3JlZ2F0ZV92YWx1ZSgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJk
ZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uX2FnZ3JlZ2F0ZV92YWx1ZSkg
fQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVmPiBkb3VibGVfdmFs
dWUoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfVW5pbnRlcnByZXRlZE9wdGlvbl9kb3VibGVfdmFsdWUpIH0KLWlubGluZSB1cGI6OnJlZmZl
ZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gaWRlbnRpZmllcl92YWx1ZSgpIHsgUkVUVVJOX1JF
RkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVk
T3B0aW9uX2lkZW50aWZpZXJfdmFsdWUpIH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3Qg
dXBiOjpGaWVsZERlZj4gbmFtZSgpIHsgUkVUVVJOX1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJk
ZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uX25hbWUpIH0KLWlubGluZSB1
cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gbmVnYXRpdmVfaW50X3ZhbHVlKCkg
eyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1Vu
aW50ZXJwcmV0ZWRPcHRpb25fbmVnYXRpdmVfaW50X3ZhbHVlKSB9Ci1pbmxpbmUgdXBiOjpyZWZm
ZWRfcHRyPGNvbnN0IHVwYjo6RmllbGREZWY+IHBvc2l0aXZlX2ludF92YWx1ZSgpIHsgUkVUVVJO
X1JFRkZFRCh1cGI6OkZpZWxkRGVmLCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJl
dGVkT3B0aW9uX3Bvc2l0aXZlX2ludF92YWx1ZSkgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxj
b25zdCB1cGI6OkZpZWxkRGVmPiBzdHJpbmdfdmFsdWUoKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpG
aWVsZERlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlvbl9zdHJp
bmdfdmFsdWUpIH0KLX0gIC8qIG5hbWVzcGFjZSBVbmludGVycHJldGVkT3B0aW9uICovCi19ICAv
KiBuYW1lc3BhY2UgcHJvdG9idWYgKi8KLX0gIC8qIG5hbWVzcGFjZSBnb29nbGUgKi8KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIFVuaW50ZXJw
cmV0ZWRPcHRpb24gewotbmFtZXNwYWNlIE5hbWVQYXJ0IHsKLWlubGluZSB1cGI6OnJlZmZlZF9w
dHI8Y29uc3QgdXBiOjpNZXNzYWdlRGVmPiBNZXNzYWdlRGVmKCkgeyBSRVRVUk5fUkVGRkVEKHVw
Yjo6TWVzc2FnZURlZiwgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlv
bl9OYW1lUGFydCkgfQotaW5saW5lIHVwYjo6cmVmZmVkX3B0cjxjb25zdCB1cGI6OkZpZWxkRGVm
PiBpc19leHRlbnNpb24oKSB7IFJFVFVSTl9SRUZGRUQodXBiOjpGaWVsZERlZiwgdXBiZGVmc19n
b29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydF9pc19leHRlbnNpb24p
IH0KLWlubGluZSB1cGI6OnJlZmZlZF9wdHI8Y29uc3QgdXBiOjpGaWVsZERlZj4gbmFtZV9wYXJ0
KCkgeyBSRVRVUk5fUkVGRkVEKHVwYjo6RmllbGREZWYsIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X1VuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnRfbmFtZV9wYXJ0KSB9Ci19ICAvKiBuYW1lc3Bh
Y2UgTmFtZVBhcnQgKi8KLX0gIC8qIG5hbWVzcGFjZSBVbmludGVycHJldGVkT3B0aW9uICovCi19
ICAvKiBuYW1lc3BhY2UgcHJvdG9idWYgKi8KLX0gIC8qIG5hbWVzcGFjZSBnb29nbGUgKi8KLQot
fSAgLyogbmFtZXNwYWNlIHVwYmRlZnMgKi8KLQotCi0jdW5kZWYgUkVUVVJOX1JFRkZFRAotI2Vu
ZGlmIC8qIF9fY3BsdXNwbHVzICovCi0KLSNlbmRpZiAgLyogR09PR0xFX1BST1RPQlVGX0RFU0NS
SVBUT1JfVVBCX0hfICovCi0vKgotKiogSW50ZXJuYWwtb25seSBkZWZpbml0aW9ucyBmb3IgdGhl
IGRlY29kZXIuCi0qLwotCi0jaWZuZGVmIFVQQl9ERUNPREVSX0lOVF9IXwotI2RlZmluZSBVUEJf
REVDT0RFUl9JTlRfSF8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotLyoKLSoqIHVwYjo6cGI6OkRl
Y29kZXIKLSoqCi0qKiBBIGhpZ2ggcGVyZm9ybWFuY2UsIHN0cmVhbWluZywgcmVzdW1hYmxlIGRl
Y29kZXIgZm9yIHRoZSBiaW5hcnkgcHJvdG9idWYKLSoqIGZvcm1hdC4KLSoqCi0qKiBUaGlzIGlu
dGVyZmFjZSB3b3JrcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHdoYXQgZGVjb2RlciBiYWNrZW5k
IGlzIGJlaW5nCi0qKiB1c2VkLiAgQSBjbGllbnQgb2YgdGhpcyBjbGFzcyBkb2VzIG5vdCBuZWVk
IHRvIGtub3cgd2hldGhlciBkZWNvZGluZyBpcyB1c2luZwotKiogYSBKSVR0ZWQgZGVjb2RlciAo
RHluQVNNLCBMTFZNLCBldGMpIG9yIGFuIGludGVycHJldGVkIGRlY29kZXIuICBCeSBkZWZhdWx0
LAotKiogaXQgd2lsbCBhbHdheXMgdXNlIHRoZSBmYXN0ZXN0IGF2YWlsYWJsZSBkZWNvZGVyLiAg
SG93ZXZlciwgeW91IGNhbiBjYWxsCi0qKiBzZXRfYWxsb3dfaml0KGZhbHNlKSB0byBkaXNhYmxl
IGFueSBKSVQgZGVjb2RlciB0aGF0IG1pZ2h0IGJlIGF2YWlsYWJsZS4KLSoqIFRoaXMgaXMgcHJp
bWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KLSovCi0KLSNpZm5kZWYgVVBCX0RF
Q09ERVJfSF8KLSNkZWZpbmUgVVBCX0RFQ09ERVJfSF8KLQotCi0jaWZkZWYgX19jcGx1c3BsdXMK
LW5hbWVzcGFjZSB1cGIgewotbmFtZXNwYWNlIHBiIHsKLWNsYXNzIENvZGVDYWNoZTsKLWNsYXNz
IERlY29kZXI7Ci1jbGFzcyBEZWNvZGVyTWV0aG9kOwotY2xhc3MgRGVjb2Rlck1ldGhvZE9wdGlv
bnM7Ci19ICAvKiBuYW1lc3BhY2UgcGIgKi8KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLSNlbmRp
ZgotCi1VUEJfREVDTEFSRV9UWVBFKHVwYjo6cGI6OkNvZGVDYWNoZSwgdXBiX3BiY29kZWNhY2hl
KQotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6OnBiOjpEZWNvZGVyLCB1cGJfcGJkZWNvZGVyKQotVVBC
X0RFQ0xBUkVfVFlQRSh1cGI6OnBiOjpEZWNvZGVyTWV0aG9kT3B0aW9ucywgdXBiX3BiZGVjb2Rl
cm1ldGhvZG9wdHMpCi0KLVVQQl9ERUNMQVJFX0RFUklWRURfVFlQRSh1cGI6OnBiOjpEZWNvZGVy
TWV0aG9kLCB1cGI6OlJlZkNvdW50ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3Bi
ZGVjb2Rlcm1ldGhvZCwgdXBiX3JlZmNvdW50ZWQpCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0v
KiBUaGUgcGFyYW1ldGVycyBvbmUgdXNlcyB0byBjb25zdHJ1Y3QgYSBEZWNvZGVyTWV0aG9kLgot
ICogVE9ETyhoYWJlcm1hbik6IG1vdmUgYWxsb3dqaXQgaGVyZT8gIFNlZW1zIG1vcmUgY29udmVu
aWVudCBmb3IgdXNlcnMuCi0gKiBUT0RPKGhhYmVybWFuKTogbW92ZSB0aGlzIHRvIGJlIGhlYXAg
YWxsb2NhdGVkIGZvciBBQkkgc3RhYmlsaXR5LiAqLwotY2xhc3MgdXBiOjpwYjo6RGVjb2Rlck1l
dGhvZE9wdGlvbnMgewotIHB1YmxpYzoKLSAgLyogUGFyYW1ldGVyIHJlcHJlc2VudHMgdGhlIGRl
c3RpbmF0aW9uIGhhbmRsZXJzIHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBwdXNoCi0gICAqIHRvLiAq
LwotICBleHBsaWNpdCBEZWNvZGVyTWV0aG9kT3B0aW9ucyhjb25zdCBIYW5kbGVycyogZGVzdF9o
YW5kbGVycyk7Ci0KLSAgLyogU2hvdWxkIHRoZSBkZWNvZGVyIHB1c2ggc3VibWVzc2FnZXMgdG8g
bGF6eSBoYW5kbGVycyBmb3IgZmllbGRzIHRoYXQgaGF2ZQotICAgKiB0aGVtPyAgVGhlIGNhbGxl
ciBzaG91bGQgc2V0IHRoaXMgaWZmIHRoZSBsYXp5IGhhbmRsZXJzIGV4cGVjdCBkYXRhIHRoYXQg
aXMKLSAgICogaW4gcHJvdG9idWYgYmluYXJ5IGZvcm1hdCBhbmQgdGhlIGNhbGxlciB3aXNoZXMg
dG8gbGF6eSBwYXJzZSBpdC4gKi8KLSAgdm9pZCBzZXRfbGF6eShib29sIGxhenkpOwotI2Vsc2UK
LXN0cnVjdCB1cGJfcGJkZWNvZGVybWV0aG9kb3B0cyB7Ci0jZW5kaWYKLSAgY29uc3QgdXBiX2hh
bmRsZXJzICpoYW5kbGVyczsKLSAgYm9vbCBsYXp5OwotfTsKLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci0KLS8qIFJlcHJlc2VudHMgdGhlIGNvZGUgdG8gcGFyc2UgYSBwcm90b2J1ZiBhY2NvcmRpbmcg
dG8gYSBkZXN0aW5hdGlvbgotICogSGFuZGxlcnMuICovCi1jbGFzcyB1cGI6OnBiOjpEZWNvZGVy
TWV0aG9kIHsKLSBwdWJsaWM6Ci0gIC8qIEluY2x1ZGUgYmFzZSBtZXRob2RzIGZyb20gdXBiOjpS
ZWZlcmVuY2VDb3VudGVkLiAqLwotICBVUEJfUkVGQ09VTlRFRF9DUFBNRVRIT0RTCi0KLSAgLyog
VGhlIGRlc3RpbmF0aW9uIGhhbmRsZXJzIHRoYXQgYXJlIHN0YXRpY2FsbHkgYm91bmQgdG8gdGhp
cyBtZXRob2QuCi0gICAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2FwYWJsZSBvZiBvdXRwdXR0aW5n
IHRvIGEgc2luayB0aGF0IHVzZXMgdGhlc2UKLSAgICogaGFuZGxlcnMuICovCi0gIGNvbnN0IEhh
bmRsZXJzKiBkZXN0X2hhbmRsZXJzKCkgY29uc3Q7Ci0KLSAgLyogVGhlIGlucHV0IGhhbmRsZXJz
IGZvciB0aGlzIGRlY29kZXIgbWV0aG9kLiAqLwotICBjb25zdCBCeXRlc0hhbmRsZXIqIGlucHV0
X2hhbmRsZXIoKSBjb25zdDsKLQotICAvKiBXaGV0aGVyIHRoaXMgbWV0aG9kIGlzIG5hdGl2ZS4g
Ki8KLSAgYm9vbCBpc19uYXRpdmUoKSBjb25zdDsKLQotICAvKiBDb252ZW5pZW5jZSBtZXRob2Qg
Zm9yIGdlbmVyYXRpbmcgYSBEZWNvZGVyTWV0aG9kIHdpdGhvdXQgZXhwbGljaXRseQotICAgKiBj
cmVhdGluZyBhIENvZGVDYWNoZS4gKi8KLSAgc3RhdGljIHJlZmZlZF9wdHI8Y29uc3QgRGVjb2Rl
ck1ldGhvZD4gTmV3KGNvbnN0IERlY29kZXJNZXRob2RPcHRpb25zJiBvcHRzKTsKLQotIHByaXZh
dGU6Ci0gIFVQQl9ESVNBTExPV19QT0RfT1BTKERlY29kZXJNZXRob2QsIHVwYjo6cGI6OkRlY29k
ZXJNZXRob2QpCi19OwotCi0jZW5kaWYKLQotLyogUHJlYWxsb2NhdGlvbiBoaW50OiBkZWNvZGVy
IHdvbid0IGFsbG9jYXRlIG1vcmUgYnl0ZXMgdGhhbiB0aGlzIHdoZW4gZmlyc3QKLSAqIGNvbnN0
cnVjdGVkLiAgVGhpcyBoaW50IG1heSBiZSBhbiBvdmVyZXN0aW1hdGUgZm9yIHNvbWUgYnVpbGQg
Y29uZmlndXJhdGlvbnMuCi0gKiBCdXQgaWYgdGhlIGRlY29kZXIgbGlicmFyeSBpcyB1cGdyYWRl
ZCB3aXRob3V0IHJlY29tcGlsaW5nIHRoZSBhcHBsaWNhdGlvbiwKLSAqIGl0IG1heSBiZSBhbiB1
bmRlcmVzdGltYXRlLiAqLwotI2RlZmluZSBVUEJfUEJfREVDT0RFUl9TSVpFIDQ0MDgKLQotI2lm
ZGVmIF9fY3BsdXNwbHVzCi0KLS8qIEEgRGVjb2RlciByZWNlaXZlcyBiaW5hcnkgcHJvdG9idWYg
ZGF0YSBvbiBpdHMgaW5wdXQgc2luayBhbmQgcHVzaGVzIHRoZQotICogZGVjb2RlZCBkYXRhIHRv
IGl0cyBvdXRwdXQgc2luay4gKi8KLWNsYXNzIHVwYjo6cGI6OkRlY29kZXIgewotIHB1YmxpYzoK
LSAgLyogQ29uc3RydWN0cyBhIGRlY29kZXIgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBtZXRob2Qs
IHdoaWNoIG11c3Qgb3V0bGl2ZSB0aGlzCi0gICAqIGRlY29kZXIuICBBbnkgZXJyb3JzIGR1cmlu
ZyBwYXJzaW5nIHdpbGwgYmUgc2V0IG9uIHRoZSBnaXZlbiBzdGF0dXMsIHdoaWNoCi0gICAqIG11
c3QgYWxzbyBvdXRsaXZlIHRoaXMgZGVjb2Rlci4KLSAgICoKLSAgICogVGhlIHNpbmsgbXVzdCBt
YXRjaCB0aGUgZ2l2ZW4gbWV0aG9kLiAqLwotICBzdGF0aWMgRGVjb2RlciogQ3JlYXRlKEVudmly
b25tZW50KiBlbnYsIGNvbnN0IERlY29kZXJNZXRob2QqIG1ldGhvZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBTaW5rKiBvdXRwdXQpOwotCi0gIC8qIFJldHVybnMgdGhlIERlY29kZXJNZXRo
b2QgdGhpcyBkZWNvZGVyIGlzIHBhcnNpbmcgZnJvbS4gKi8KLSAgY29uc3QgRGVjb2Rlck1ldGhv
ZCogbWV0aG9kKCkgY29uc3Q7Ci0KLSAgLyogVGhlIHNpbmsgb24gd2hpY2ggdGhpcyBkZWNvZGVy
IHJlY2VpdmVzIGlucHV0LiAqLwotICBCeXRlc1NpbmsqIGlucHV0KCk7Ci0KLSAgLyogUmV0dXJu
cyBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KLSAgICoKLSAgICogVGhpcyBj
YW4gYmUgdXNlZnVsIGZvciBkZXRlcm1pbmluZyB0aGUgc3RyZWFtIHBvc2l0aW9uIHdoZXJlIGFu
IGVycm9yCi0gICAqIG9jY3VycmVkLgotICAgKgotICAgKiBUaGlzIHZhbHVlIG1heSBub3QgYmUg
dXAtdG8tZGF0ZSB3aGVuIGNhbGxlZCBmcm9tIGluc2lkZSBhIHBhcnNpbmcKLSAgICogY2FsbGJh
Y2suICovCi0gIHVpbnQ2NF90IEJ5dGVzUGFyc2VkKCkgY29uc3Q7Ci0KLSAgLyogR2V0cy9zZXRz
IHRoZSBwYXJzaW5nIG5leHRpbmcgbGltaXQuICBJZiB0aGUgdG90YWwgbnVtYmVyIG9mIG5lc3Rl
ZAotICAgKiBzdWJtZXNzYWdlcyBhbmQgcmVwZWF0ZWQgZmllbGRzIGhpdHMgdGhpcyBsaW1pdCwg
cGFyc2luZyB3aWxsIGZhaWwuICBUaGlzCi0gICAqIGlzIGEgcmVzb3VyY2UgbGltaXQgdGhhdCBj
b250cm9scyB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBwYXJzaW5nCi0gICAqIHN0
YWNrLgotICAgKgotICAgKiBTZXR0aW5nIHRoZSBsaW1pdCB3aWxsIGZhaWwgaWYgdGhlIHBhcnNl
ciBpcyBjdXJyZW50bHkgc3VzcGVuZGVkIGF0IGEgZGVwdGgKLSAgICogZ3JlYXRlciB0aGFuIHRo
aXMsIG9yIGlmIG1lbW9yeSBhbGxvY2F0aW9uIG9mIHRoZSBzdGFjayBmYWlscy4gKi8KLSAgc2l6
ZV90IG1heF9uZXN0aW5nKCkgY29uc3Q7Ci0gIGJvb2wgc2V0X21heF9uZXN0aW5nKHNpemVfdCBt
YXgpOwotCi0gIHZvaWQgUmVzZXQoKTsKLQotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtTaXplID0g
VVBCX1BCX0RFQ09ERVJfU0laRTsKLQotIHByaXZhdGU6Ci0gIFVQQl9ESVNBTExPV19QT0RfT1BT
KERlY29kZXIsIHVwYjo6cGI6OkRlY29kZXIpCi19OwotCi0jZW5kaWYgIC8qIF9fY3BsdXNwbHVz
ICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBBIGNsYXNzIGZvciBjYWNoaW5nIHByb3Rv
YnVmIHByb2Nlc3NpbmcgY29kZSwgd2hldGhlciBieXRlY29kZSBmb3IgdGhlCi0gKiBpbnRlcnBy
ZXRlZCBkZWNvZGVyIG9yIG1hY2hpbmUgY29kZSBmb3IgdGhlIEpJVC4KLSAqCi0gKiBUaGlzIGNs
YXNzIGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAqCi0gKiBUT0RPKGhhYmVybWFuKTogbW92ZSB0aGlz
IHRvIGJlIGhlYXAgYWxsb2NhdGVkIGZvciBBQkkgc3RhYmlsaXR5LiAqLwotY2xhc3MgdXBiOjpw
Yjo6Q29kZUNhY2hlIHsKLSBwdWJsaWM6Ci0gIENvZGVDYWNoZSgpOwotICB+Q29kZUNhY2hlKCk7
Ci0KLSAgLyogV2hldGhlciB0aGUgY2FjaGUgaXMgYWxsb3dlZCB0byBnZW5lcmF0ZSBtYWNoaW5l
IGNvZGUuICBEZWZhdWx0cyB0byB0cnVlLgotICAgKiBUaGVyZSBpcyBubyByZWFsIHJlYXNvbiB0
byB0dXJuIGl0IG9mZiBleGNlcHQgZm9yIHRlc3Rpbmcgb3IgaWYgeW91IGFyZQotICAgKiBoYXZp
bmcgYSBzcGVjaWZpYyBwcm9ibGVtIHdpdGggdGhlIEpJVC4KLSAgICoKLSAgICogTm90ZSB0aGF0
IGFsbG93X2ppdCA9IHRydWUgZG9lcyBub3QgKmd1YXJhbnRlZSogdGhhdCB0aGUgY29kZSB3aWxs
IGJlIEpJVAotICAgKiBjb21waWxlZC4gIElmIHRoaXMgcGxhdGZvcm0gaXMgbm90IHN1cHBvcnRl
ZCBvciB0aGUgSklUIHdhcyBub3QgY29tcGlsZWQKLSAgICogaW4sIHRoZSBjb2RlIG1heSBzdGls
bCBiZSBpbnRlcnByZXRlZC4gKi8KLSAgYm9vbCBhbGxvd19qaXQoKSBjb25zdDsKLQotICAvKiBU
aGlzIG1heSBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgZmlyc3QgY29uc3RydWN0
ZWQsIGFuZCBwcmlvciB0bwotICAgKiBhbnkgY29kZSBnZW5lcmF0aW9uLCBvdGhlcndpc2UgcmV0
dXJucyBmYWxzZSBhbmQgZG9lcyBub3RoaW5nLiAqLwotICBib29sIHNldF9hbGxvd19qaXQoYm9v
bCBhbGxvdyk7Ci0KLSAgLyogUmV0dXJucyBhIERlY29kZXJNZXRob2QgdGhhdCBjYW4gcHVzaCBk
YXRhIHRvIHRoZSBnaXZlbiBoYW5kbGVycy4KLSAgICogSWYgYSBzdWl0YWJsZSBtZXRob2QgYWxy
ZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmV0dXJuZWQgZnJvbSB0aGUgY2FjaGUuCi0gICAqCi0g
ICAqIFNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIGhhbmRsZXJzIGhlcmUgYWxsb3dzIHRoZSBE
ZWNvZGVyTWV0aG9kIHRvIGJlCi0gICAqIHN0YXRpY2FsbHkgYm91bmQgdG8gdGhlIGRlc3RpbmF0
aW9uIGhhbmRsZXJzIGlmIHBvc3NpYmxlLCB3aGljaCBjYW4gYWxsb3cKLSAgICogbW9yZSBlZmZp
Y2llbnQgZGVjb2RpbmcuICBIb3dldmVyIHRoZSByZXR1cm5lZCBtZXRob2QgbWF5IG9yIG1heSBu
b3QKLSAgICogYWN0dWFsbHkgYmUgc3RhdGljYWxseSBib3VuZC4gIEJ1dCBpbiBhbGwgY2FzZXMs
IHRoZSByZXR1cm5lZCBtZXRob2QgY2FuCi0gICAqIHB1c2ggZGF0YSB0byB0aGUgZ2l2ZW4gaGFu
ZGxlcnMuICovCi0gIGNvbnN0IERlY29kZXJNZXRob2QgKkdldERlY29kZXJNZXRob2QoY29uc3Qg
RGVjb2Rlck1ldGhvZE9wdGlvbnMmIG9wdHMpOwotCi0gIC8qIElmL3doZW4gc29tZW9uZSBuZWVk
cyB0byBleHBsaWNpdGx5IGNyZWF0ZSBhIGR5bmFtaWNhbGx5LWJvdW5kCi0gICAqIERlY29kZXJN
ZXRob2QqLCB3ZSBjYW4gYWRkIGEgbWV0aG9kIHRvIGdldCBpdCBoZXJlLiAqLwotCi0gcHJpdmF0
ZToKLSAgVVBCX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb2RlQ2FjaGUpCi0jZWxzZQotc3Ry
dWN0IHVwYl9wYmNvZGVjYWNoZSB7Ci0jZW5kaWYKLSAgYm9vbCBhbGxvd19qaXRfOwotCi0gIC8q
IEFycmF5IG9mIG1ncm91cHMuICovCi0gIHVwYl9pbnR0YWJsZSBncm91cHM7Ci19OwotCi1VUEJf
QkVHSU5fRVhURVJOX0MKLQotdXBiX3BiZGVjb2RlciAqdXBiX3BiZGVjb2Rlcl9jcmVhdGUodXBi
X2VudiAqZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9w
YmRlY29kZXJtZXRob2QgKm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwYl9zaW5rICpvdXRwdXQpOwotY29uc3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqdXBiX3Bi
ZGVjb2Rlcl9tZXRob2QoY29uc3QgdXBiX3BiZGVjb2RlciAqZCk7Ci11cGJfYnl0ZXNzaW5rICp1
cGJfcGJkZWNvZGVyX2lucHV0KHVwYl9wYmRlY29kZXIgKmQpOwotdWludDY0X3QgdXBiX3BiZGVj
b2Rlcl9ieXRlc3BhcnNlZChjb25zdCB1cGJfcGJkZWNvZGVyICpkKTsKLXNpemVfdCB1cGJfcGJk
ZWNvZGVyX21heG5lc3RpbmcoY29uc3QgdXBiX3BiZGVjb2RlciAqZCk7Ci1ib29sIHVwYl9wYmRl
Y29kZXJfc2V0bWF4bmVzdGluZyh1cGJfcGJkZWNvZGVyICpkLCBzaXplX3QgbWF4KTsKLXZvaWQg
dXBiX3BiZGVjb2Rlcl9yZXNldCh1cGJfcGJkZWNvZGVyICpkKTsKLQotdm9pZCB1cGJfcGJkZWNv
ZGVybWV0aG9kb3B0c19pbml0KHVwYl9wYmRlY29kZXJtZXRob2RvcHRzICpvcHRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9oYW5kbGVycyAqaCk7Ci12b2lk
IHVwYl9wYmRlY29kZXJtZXRob2RvcHRzX3NldGxhenkodXBiX3BiZGVjb2Rlcm1ldGhvZG9wdHMg
Km9wdHMsIGJvb2wgbGF6eSk7Ci0KLQotLyogSW5jbHVkZSByZWZjb3VudGVkIG1ldGhvZHMgbGlr
ZSB1cGJfcGJkZWNvZGVybWV0aG9kX3JlZigpLiAqLwotVVBCX1JFRkNPVU5URURfQ01FVEhPRFMo
dXBiX3BiZGVjb2Rlcm1ldGhvZCwgdXBiX3BiZGVjb2Rlcm1ldGhvZF91cGNhc3QpCi0KLWNvbnN0
IHVwYl9oYW5kbGVycyAqdXBiX3BiZGVjb2Rlcm1ldGhvZF9kZXN0aGFuZGxlcnMoCi0gICAgY29u
c3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqbSk7Ci1jb25zdCB1cGJfYnl0ZXNoYW5kbGVyICp1cGJf
cGJkZWNvZGVybWV0aG9kX2lucHV0aGFuZGxlcigKLSAgICBjb25zdCB1cGJfcGJkZWNvZGVybWV0
aG9kICptKTsKLWJvb2wgdXBiX3BiZGVjb2Rlcm1ldGhvZF9pc25hdGl2ZShjb25zdCB1cGJfcGJk
ZWNvZGVybWV0aG9kICptKTsKLWNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKnVwYl9wYmRlY29k
ZXJtZXRob2RfbmV3KAotICAgIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2RvcHRzICpvcHRzLCBj
b25zdCB2b2lkICpvd25lcik7Ci0KLXZvaWQgdXBiX3BiY29kZWNhY2hlX2luaXQodXBiX3BiY29k
ZWNhY2hlICpjKTsKLXZvaWQgdXBiX3BiY29kZWNhY2hlX3VuaW5pdCh1cGJfcGJjb2RlY2FjaGUg
KmMpOwotYm9vbCB1cGJfcGJjb2RlY2FjaGVfYWxsb3dqaXQoY29uc3QgdXBiX3BiY29kZWNhY2hl
ICpjKTsKLWJvb2wgdXBiX3BiY29kZWNhY2hlX3NldGFsbG93aml0KHVwYl9wYmNvZGVjYWNoZSAq
YywgYm9vbCBhbGxvdyk7Ci1jb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICp1cGJfcGJjb2RlY2Fj
aGVfZ2V0ZGVjb2Rlcm1ldGhvZCgKLSAgICB1cGJfcGJjb2RlY2FjaGUgKmMsIGNvbnN0IHVwYl9w
YmRlY29kZXJtZXRob2RvcHRzICpvcHRzKTsKLQotVVBCX0VORF9FWFRFUk5fQwotCi0jaWZkZWYg
X19jcGx1c3BsdXMKLQotbmFtZXNwYWNlIHVwYiB7Ci0KLW5hbWVzcGFjZSBwYiB7Ci0KLS8qIHN0
YXRpYyAqLwotaW5saW5lIERlY29kZXIqIERlY29kZXI6OkNyZWF0ZShFbnZpcm9ubWVudCogZW52
LCBjb25zdCBEZWNvZGVyTWV0aG9kKiBtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaW5rKiBzaW5rKSB7Ci0gIHJldHVybiB1cGJfcGJkZWNvZGVyX2NyZWF0ZShlbnYsIG0sIHNp
bmspOwotfQotaW5saW5lIGNvbnN0IERlY29kZXJNZXRob2QqIERlY29kZXI6Om1ldGhvZCgpIGNv
bnN0IHsKLSAgcmV0dXJuIHVwYl9wYmRlY29kZXJfbWV0aG9kKHRoaXMpOwotfQotaW5saW5lIEJ5
dGVzU2luayogRGVjb2Rlcjo6aW5wdXQoKSB7Ci0gIHJldHVybiB1cGJfcGJkZWNvZGVyX2lucHV0
KHRoaXMpOwotfQotaW5saW5lIHVpbnQ2NF90IERlY29kZXI6OkJ5dGVzUGFyc2VkKCkgY29uc3Qg
ewotICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9ieXRlc3BhcnNlZCh0aGlzKTsKLX0KLWlubGluZSBz
aXplX3QgRGVjb2Rlcjo6bWF4X25lc3RpbmcoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfcGJkZWNv
ZGVyX21heG5lc3RpbmcodGhpcyk7Ci19Ci1pbmxpbmUgYm9vbCBEZWNvZGVyOjpzZXRfbWF4X25l
c3Rpbmcoc2l6ZV90IG1heCkgewotICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9zZXRtYXhuZXN0aW5n
KHRoaXMsIG1heCk7Ci19Ci1pbmxpbmUgdm9pZCBEZWNvZGVyOjpSZXNldCgpIHsgdXBiX3BiZGVj
b2Rlcl9yZXNldCh0aGlzKTsgfQotCi1pbmxpbmUgRGVjb2Rlck1ldGhvZE9wdGlvbnM6OkRlY29k
ZXJNZXRob2RPcHRpb25zKGNvbnN0IEhhbmRsZXJzKiBoKSB7Ci0gIHVwYl9wYmRlY29kZXJtZXRo
b2RvcHRzX2luaXQodGhpcywgaCk7Ci19Ci1pbmxpbmUgdm9pZCBEZWNvZGVyTWV0aG9kT3B0aW9u
czo6c2V0X2xhenkoYm9vbCBsYXp5KSB7Ci0gIHVwYl9wYmRlY29kZXJtZXRob2RvcHRzX3NldGxh
enkodGhpcywgbGF6eSk7Ci19Ci0KLWlubGluZSBjb25zdCBIYW5kbGVycyogRGVjb2Rlck1ldGhv
ZDo6ZGVzdF9oYW5kbGVycygpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9wYmRlY29kZXJtZXRob2Rf
ZGVzdGhhbmRsZXJzKHRoaXMpOwotfQotaW5saW5lIGNvbnN0IEJ5dGVzSGFuZGxlciogRGVjb2Rl
ck1ldGhvZDo6aW5wdXRfaGFuZGxlcigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9wYmRlY29kZXJt
ZXRob2RfaW5wdXRoYW5kbGVyKHRoaXMpOwotfQotaW5saW5lIGJvb2wgRGVjb2Rlck1ldGhvZDo6
aXNfbmF0aXZlKCkgY29uc3QgewotICByZXR1cm4gdXBiX3BiZGVjb2Rlcm1ldGhvZF9pc25hdGl2
ZSh0aGlzKTsKLX0KLS8qIHN0YXRpYyAqLwotaW5saW5lIHJlZmZlZF9wdHI8Y29uc3QgRGVjb2Rl
ck1ldGhvZD4gRGVjb2Rlck1ldGhvZDo6TmV3KAotICAgIGNvbnN0IERlY29kZXJNZXRob2RPcHRp
b25zICZvcHRzKSB7Ci0gIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKm0gPSB1cGJfcGJkZWNv
ZGVybWV0aG9kX25ldygmb3B0cywgJm0pOwotICByZXR1cm4gcmVmZmVkX3B0cjxjb25zdCBEZWNv
ZGVyTWV0aG9kPihtLCAmbSk7Ci19Ci0KLWlubGluZSBDb2RlQ2FjaGU6OkNvZGVDYWNoZSgpIHsK
LSAgdXBiX3BiY29kZWNhY2hlX2luaXQodGhpcyk7Ci19Ci1pbmxpbmUgQ29kZUNhY2hlOjp+Q29k
ZUNhY2hlKCkgewotICB1cGJfcGJjb2RlY2FjaGVfdW5pbml0KHRoaXMpOwotfQotaW5saW5lIGJv
b2wgQ29kZUNhY2hlOjphbGxvd19qaXQoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfcGJjb2RlY2Fj
aGVfYWxsb3dqaXQodGhpcyk7Ci19Ci1pbmxpbmUgYm9vbCBDb2RlQ2FjaGU6OnNldF9hbGxvd19q
aXQoYm9vbCBhbGxvdykgewotICByZXR1cm4gdXBiX3BiY29kZWNhY2hlX3NldGFsbG93aml0KHRo
aXMsIGFsbG93KTsKLX0KLWlubGluZSBjb25zdCBEZWNvZGVyTWV0aG9kICpDb2RlQ2FjaGU6Okdl
dERlY29kZXJNZXRob2QoCi0gICAgY29uc3QgRGVjb2Rlck1ldGhvZE9wdGlvbnMmIG9wdHMpIHsK
LSAgcmV0dXJuIHVwYl9wYmNvZGVjYWNoZV9nZXRkZWNvZGVybWV0aG9kKHRoaXMsICZvcHRzKTsK
LX0KLQotfSAgLyogbmFtZXNwYWNlIHBiICovCi19ICAvKiBuYW1lc3BhY2UgdXBiICovCi0KLSNl
bmRpZiAgLyogX19jcGx1c3BsdXMgKi8KLQotI2VuZGlmICAvKiBVUEJfREVDT0RFUl9IXyAqLwot
Ci0vKiBDKysgbmFtZXMgYXJlIG5vdCBhY3R1YWxseSB1c2VkIHNpbmNlIHRoaXMgdHlwZSBpc24n
dCBleHBvc2VkIHRvIHVzZXJzLiAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1uYW1lc3BhY2UgdXBi
IHsKLW5hbWVzcGFjZSBwYiB7Ci1jbGFzcyBNZXNzYWdlR3JvdXA7Ci19ICAvKiBuYW1lc3BhY2Ug
cGIgKi8KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLSNlbmRpZgotVVBCX0RFQ0xBUkVfREVSSVZF
RF9UWVBFKHVwYjo6cGI6Ok1lc3NhZ2VHcm91cCwgdXBiOjpSZWZDb3VudGVkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIG1ncm91cCwgdXBiX3JlZmNvdW50ZWQpCi0KLS8qIE9wY29kZSBkZWZp
bml0aW9ucy4gIFRoZSBjYW5vbmljYWwgbWVhbmluZyBvZiBlYWNoIG9wY29kZSBpcyBpdHMKLSAq
IGltcGxlbWVudGF0aW9uIGluIHRoZSBpbnRlcnByZXRlciAodGhlIEpJVCBpcyB3cml0dGVuIHRv
IG1hdGNoIHRoaXMpLgotICoKLSAqIEFsbCBpbnN0cnVjdGlvbnMgaGF2ZSB0aGUgb3Bjb2RlIGlu
IHRoZSBsb3cgYnl0ZS4KLSAqIEluc3RydWN0aW9uIGZvcm1hdCBmb3IgbW9zdCBpbnN0cnVjdGlv
bnMgaXM6Ci0gKgotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rCi0gKiB8ICAgICBh
cmcgKDI0KSAgICAgIHwgb3AgKDgpIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t
KwotICoKLSAqIEV4Y2VwdGlvbnMgYXJlIGluZGljYXRlZCBiZWxvdy4gIEEgZmV3IG9wY29kZXMg
YXJlIG11bHRpLXdvcmQuICovCi10eXBlZGVmIGVudW0gewotICAvKiBPcGNvZGVzIDEtOCwgMTMs
IDE1LTE4IHBhcnNlIHRoZWlyIHJlc3BlY3RpdmUgZGVzY3JpcHRvciB0eXBlcy4KLSAgICogQXJn
IGZvciBhbGwgb2YgdGhlc2UgaXMgdGhlIHVwYiBzZWxlY3RvciBmb3IgdGhpcyBmaWVsZC4gKi8K
LSNkZWZpbmUgVCh0eXBlKSBPUF9QQVJTRV8gIyMgdHlwZSA9IFVQQl9ERVNDUklQVE9SX1RZUEVf
ICMjIHR5cGUKLSAgVChET1VCTEUpLCBUKEZMT0FUKSwgVChJTlQ2NCksIFQoVUlOVDY0KSwgVChJ
TlQzMiksIFQoRklYRUQ2NCksIFQoRklYRUQzMiksCi0gIFQoQk9PTCksIFQoVUlOVDMyKSwgVChT
RklYRUQzMiksIFQoU0ZJWEVENjQpLCBUKFNJTlQzMiksIFQoU0lOVDY0KSwKLSN1bmRlZiBUCi0g
IE9QX1NUQVJUTVNHICAgICAgID0gOSwgICAvKiBObyBhcmcuICovCi0gIE9QX0VORE1TRyAgICAg
ICAgID0gMTAsICAvKiBObyBhcmcuICovCi0gIE9QX1NUQVJUU0VRICAgICAgID0gMTEsCi0gIE9Q
X0VORFNFUSAgICAgICAgID0gMTIsCi0gIE9QX1NUQVJUU1VCTVNHICAgID0gMTQsCi0gIE9QX0VO
RFNVQk1TRyAgICAgID0gMTksCi0gIE9QX1NUQVJUU1RSICAgICAgID0gMjAsCi0gIE9QX1NUUklO
RyAgICAgICAgID0gMjEsCi0gIE9QX0VORFNUUiAgICAgICAgID0gMjIsCi0KLSAgT1BfUFVTSFRB
R0RFTElNICAgPSAyMywgIC8qIE5vIGFyZy4gKi8KLSAgT1BfUFVTSExFTkRFTElNICAgPSAyNCwg
IC8qIE5vIGFyZy4gKi8KLSAgT1BfUE9QICAgICAgICAgICAgPSAyNSwgIC8qIE5vIGFyZy4gKi8K
LSAgT1BfU0VUREVMSU0gICAgICAgPSAyNiwgIC8qIE5vIGFyZy4gKi8KLSAgT1BfU0VUQklHR1JP
VVBOVU0gPSAyNywgIC8qIHR3byB3b3JkczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
ICAgfCB1bnVzZWQgKDI0KSAgICAgfCBvcGMgKDgpIHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqICAgfCAgICAgICAgZ3JvdXBudW0gKDMyKSAgICAgIHwgKi8KLSAgT1BfQ0hFQ0tERUxJ
TSAgICAgPSAyOCwKLSAgT1BfQ0FMTCAgICAgICAgICAgPSAyOSwKLSAgT1BfUkVUICAgICAgICAg
ICAgPSAzMCwKLSAgT1BfQlJBTkNIICAgICAgICAgPSAzMSwKLQotICAvKiBEaWZmZXJlbnQgb3Bj
b2RlcyBkZXBlbmRpbmcgb24gaG93IG1hbnkgYnl0ZXMgZXhwZWN0ZWQuICovCi0gIE9QX1RBRzEg
ICAgICAgICAgID0gMzIsICAvKiB8IG1hdGNoIHRhZyAoMTYpIHwganVtcCB0YXJnZXQgKDgpIHwg
b3BjICg4KSB8ICovCi0gIE9QX1RBRzIgICAgICAgICAgID0gMzMsICAvKiB8IG1hdGNoIHRhZyAo
MTYpIHwganVtcCB0YXJnZXQgKDgpIHwgb3BjICg4KSB8ICovCi0gIE9QX1RBR04gICAgICAgICAg
ID0gMzQsICAvKiB0aHJlZSB3b3JkczogKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
ICAgfCB1bnVzZWQgKDE2KSB8IGp1bXAgdGFyZ2V0KDgpIHwgb3BjICg4KSB8ICovCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiAgIHwgICAgICAgICAgIG1hdGNoIHRhZyAxICgzMikgICAg
ICAgICAgICAgfCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICB8ICAgICAgICAg
ICBtYXRjaCB0YWcgMiAoMzIpICAgICAgICAgICAgIHwgKi8KLQotICBPUF9TRVRESVNQQVRDSCAg
ICA9IDM1LCAgLyogTiB3b3JkczogKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAg
fCB1bnVzZWQgKDI0KSAgICAgICAgIHwgb3BjIHwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qICAgfCB1cGJfaW50dGFibGUqICgzMiBvciA2NCkgIHwgKi8KLQotICBPUF9ESVNQQVRD
SCAgICAgICA9IDM2LCAgLyogTm8gYXJnLiAqLwotCi0gIE9QX0hBTFQgICAgICAgICAgID0gMzcg
ICAvKiBObyBhcmcuICovCi19IG9wY29kZTsKLQotI2RlZmluZSBPUF9NQVggT1BfSEFMVAotCi1V
UEJfSU5MSU5FIG9wY29kZSBnZXRvcCh1aW50MzJfdCBpbnN0cikgeyByZXR1cm4gaW5zdHIgJiAw
eGZmOyB9Ci0KLS8qIE1ldGhvZCBncm91cDsgcmVwcmVzZW50cyBhIHNldCBvZiBkZWNvZGVyIG1l
dGhvZHMgdGhhdCBoYWQgdGhlaXIgY29kZQotICogZW1pdHRlZCB0b2dldGhlciwgYW5kIG11c3Qg
dGhlcmVmb3JlIGJlIGZyZWVkIHRvZ2V0aGVyLiAgSW1tdXRhYmxlIG9uY2UKLSAqIGNyZWF0ZWQu
ICBJdCBpcyBwb3NzaWJsZSB3ZSBtYXkgd2FudCB0byBleHBvc2UgdGhpcyB0byB1c2VycyBhdCBz
b21lIHBvaW50LgotICoKLSAqIE92ZXJhbGwgb3duZXJzaGlwIG9mIERlY29kZXIgb2JqZWN0cyBs
b29rcyBsaWtlIHRoaXM6Ci0gKgotICogICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rCi0gKiAg
ICAgICAgICAgICAgICB8ICAgICAgICAgIHwgPC0tLT4gRGVjb2Rlck1ldGhvZAotICogICAgICAg
ICAgICAgICAgfCBtZXRob2QgICB8Ci0gKiBDb2RlQ2FjaGUgLS0tPiB8ICBncm91cCAgIHwgPC0t
LT4gRGVjb2Rlck1ldGhvZAotICogICAgICAgICAgICAgICAgfCAgICAgICAgICB8Ci0gKiAgICAg
ICAgICAgICAgICB8IChtZ3JvdXApIHwgPC0tLT4gRGVjb2Rlck1ldGhvZAotICogICAgICAgICAg
ICAgICAgKy0tLS0tLS0tLS0rCi0gKi8KLXN0cnVjdCBtZ3JvdXAgewotICB1cGJfcmVmY291bnRl
ZCBiYXNlOwotCi0gIC8qIE1hcHMgdXBiX21zZ2RlZi91cGJfaGFuZGxlcnMgLT4gdXBiX3BiZGVj
b2Rlcm1ldGhvZC4gIFdlIG93biByZWZzIG9uIHRoZQotICAgKiBtZXRob2RzLiAqLwotICB1cGJf
aW50dGFibGUgbWV0aG9kczsKLQotICAvKiBXaGVuIHdlIGFkZCB0aGUgYWJpbGl0eSB0byBsaW5r
IHRvIHByZXZpb3VzbHkgZXhpc3RpbmcgbWdyb3Vwcywgd2UnbGwKLSAgICogbmVlZCBhbiBhcnJh
eSBvZiBtZ3JvdXBzIHdlIHJlZmVyZW5jZSBoZXJlLCBhbmQgb3duIHJlZnMgb24gdGhlbS4gKi8K
LQotICAvKiBUaGUgYnl0ZWNvZGUgZm9yIG91ciBtZXRob2RzLCBpZiBhbnkgZXhpc3RzLiAgT3du
ZWQgYnkgdXMuICovCi0gIHVpbnQzMl90ICpieXRlY29kZTsKLSAgdWludDMyX3QgKmJ5dGVjb2Rl
X2VuZDsKLQotI2lmZGVmIFVQQl9VU0VfSklUX1g2NAotICAvKiBKSVQtZ2VuZXJhdGVkIG1hY2hp
bmUgY29kZSwgaWYgYW55LiAqLwotICB1cGJfc3RyaW5nX2hhbmRsZXJmdW5jICpqaXRfY29kZTsK
LSAgLyogVGhlIHNpemUgb2YgdGhlIGppdF9jb2RlIChyZXF1aXJlZCB0byBtdW5tYXAoKSkuICov
Ci0gIHNpemVfdCBqaXRfc2l6ZTsKLSAgY2hhciAqZGVidWdfaW5mbzsKLSAgdm9pZCAqZGw7Ci0j
ZW5kaWYKLX07Ci0KLS8qIFRoZSBtYXhpbXVtIHRoYXQgYW55IHN1Ym1lc3NhZ2VzIGNhbiBiZSBu
ZXN0ZWQuICBNYXRjaGVzIHByb3RvMidzIGxpbWl0LgotICogVGhpcyBzcGVjaWZpZXMgdGhlIHNp
emUgb2YgdGhlIGRlY29kZXIncyBzdGF0aWNhbGx5LXNpemVkIGFycmF5IGFuZCB0aGVyZWZvcmUK
LSAqIHNldHRpbmcgaXQgaGlnaCB3aWxsIGNhdXNlIHRoZSB1cGI6OnBiOjpEZWNvZGVyIG9iamVj
dCB0byBiZSBsYXJnZXIuCi0gKgotICogSWYgbmVjZXNzYXJ5IHdlIGNhbiBhZGQgYSBydW50aW1l
LXNldHRhYmxlIHByb3BlcnR5IHRvIERlY29kZXIgdGhhdCBhbGxvdwotICogdGhpcyB0byBiZSBs
YXJnZXIgdGhhbiB0aGUgY29tcGlsZS10aW1lIHNldHRpbmcsIGJ1dCB0aGlzIHdvdWxkIGFkZAot
ICogY29tcGxleGl0eSwgcGFydGljdWxhcmx5IHNpbmNlIHdlIHdvdWxkIGhhdmUgdG8gZGVjaWRl
IGhvdy9pZiB0byBnaXZlIHVzZXJzCi0gKiB0aGUgYWJpbGl0eSB0byBzZXQgYSBjdXN0b20gbWVt
b3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uICovCi0jZGVmaW5lIFVQQl9ERUNPREVSX01BWF9ORVNU
SU5HIDY0Ci0KLS8qIEludGVybmFsLW9ubHkgc3RydWN0IHVzZWQgYnkgdGhlIGRlY29kZXIuICov
Ci10eXBlZGVmIHN0cnVjdCB7Ci0gIC8qIFNwYWNlIG9wdGltaXphdGlvbiBub3RlOiB3ZSBzdG9y
ZSB0d28gcG9pbnRlcnMgaGVyZSB0aGF0IHRoZSBKSVQKLSAgICogZG9lc24ndCBuZWVkIGF0IGFs
bDsgdGhlIHVwYl9oYW5kbGVycyogaW5zaWRlIHRoZSBzaW5rIGFuZAotICAgKiB0aGUgZGlzcGF0
Y2ggdGFibGUgcG9pbnRlci4gIFdlIGNhbiBvcHRpbXplIHNvIHRoYXQgdGhlIEpJVCB1c2VzCi0g
ICAqIHNtYWxsZXIgc3RhY2sgZnJhbWVzIHRoYW4gdGhlIGludGVycHJldGVyLiAgVGhlIG9ubHkg
dGhpbmcgd2UgbmVlZAotICAgKiB0byBndWFyYW50ZWUgaXMgdGhhdCB0aGUgZmFsbGJhY2sgcm91
dGluZXMgY2FuIGZpbmQgZW5kX29mcy4gKi8KLSAgdXBiX3Npbmsgc2luazsKLQotICAvKiBUaGUg
YWJzb2x1dGUgc3RyZWFtIG9mZnNldCBvZiB0aGUgZW5kLW9mLWZyYW1lIGRlbGltaXRlci4KLSAg
ICogTm9uLWRlbGltaXRlZCBmcmFtZXMgKGdyb3VwcyBhbmQgbm9uLXBhY2tlZCByZXBlYXRlZCBm
aWVsZHMpIHJldXNlIHRoZQotICAgKiBkZWxpbWl0ZXIgb2YgdGhlaXIgcGFyZW50LCBldmVuIHRo
b3VnaCB0aGUgZnJhbWUgbWF5IG5vdCBlbmQgdGhlcmUuCi0gICAqCi0gICAqIE5PVEU6IHRoZSBK
SVQgc3RvcmVzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHZhbHVlIGhlcmUgZm9yIG5vbi10b3AgZnJh
bWVzLgotICAgKiBJdCBzdG9yZXMgdGhlIHZhbHVlIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhl
IGVuY2xvc2VkIG1lc3NhZ2UuICBCdXQgdGhlCi0gICAqIHRvcCBmcmFtZSBpcyBzdGlsbCBzdG9y
ZWQgdGhlIHNhbWUgd2F5LCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGVuc3VyaW5nCi0gICAqIHRo
YXQgY2FsbHMgZnJvbSB0aGUgSklUIGludG8gQyB3b3JrIGNvcnJlY3RseS4gKi8KLSAgdWludDY0
X3QgZW5kX29mczsKLSAgY29uc3QgdWludDMyX3QgKmJhc2U7Ci0KLSAgLyogMCBpbmRpY2F0ZXMg
YSBsZW5ndGgtZGVsaW1pdGVkIGZpZWxkLgotICAgKiBBIHBvc2l0aXZlIG51bWJlciBpbmRpY2F0
ZXMgYSBrbm93biBncm91cC4KLSAgICogQSBuZWdhdGl2ZSBudW1iZXIgaW5kaWNhdGVzIGFuIHVu
a25vd24gZ3JvdXAuICovCi0gIGludDMyX3QgZ3JvdXBudW07Ci0gIHVwYl9pbnR0YWJsZSAqZGlz
cGF0Y2g7ICAvKiBOb3QgdXNlZCBieSB0aGUgSklULiAqLwotfSB1cGJfcGJkZWNvZGVyX2ZyYW1l
OwotCi1zdHJ1Y3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCB7Ci0gIHVwYl9yZWZjb3VudGVkIGJhc2U7
Ci0KLSAgLyogV2hpbGUgY29tcGlsaW5nLCB0aGUgYmFzZSBpcyByZWxhdGl2ZSBpbiAib2ZzIiwg
YWZ0ZXIgY29tcGlsaW5nIGl0IGlzCi0gICAqIGFic29sdXRlIGluICJwdHIiLiAqLwotICB1bmlv
biB7Ci0gICAgdWludDMyX3Qgb2ZzOyAgICAgLyogUEMgb2Zmc2V0IG9mIG1ldGhvZC4gKi8KLSAg
ICB2b2lkICpwdHI7ICAgICAgICAvKiBQb2ludGVyIHRvIGJ5dGVjb2RlIG9yIG1hY2hpbmUgY29k
ZSBmb3IgdGhpcyBtZXRob2QuICovCi0gIH0gY29kZV9iYXNlOwotCi0gIC8qIFRoZSBkZWNvZGVy
IG1ldGhvZCBncm91cCB0byB3aGljaCB0aGlzIG1ldGhvZCBiZWxvbmdzLiAgV2Ugb3duIGEgcmVm
LgotICAgKiBPd25pbmcgYSByZWYgb24gdGhlIGVudGlyZSBncm91cCBpcyBtb3JlIGNvYXJzZS1n
cmFpbmVkIHRoYW4gaXMgc3RyaWN0bHkKLSAgICogbmVjZXNzYXJ5OyBhbGwgd2UgdHJ1bHkgcmVx
dWlyZSBpcyB0aGF0IG1ldGhvZHMgd2UgZGlyZWN0bHkgcmVmZXJlbmNlCi0gICAqIG91dGxpdmUg
dXMsIHdoaWxlIHRoZSBncm91cCBjb3VsZCBjb250YWluIG1hbnkgb3RoZXIgbWVzc2FnZXMgd2Ug
ZG9uJ3QKLSAgICogcmVxdWlyZS4gIEJ1dCB0aGUgZ3JvdXAgcmVwcmVzZW50cyB0aGUgbWVzc2Fn
ZXMgdGhhdCB3ZXJlCi0gICAqIGFsbG9jYXRlZCtjb21waWxlZCB0b2dldGhlciwgc28gaXQgbWFr
ZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gZnJlZSB0aGVtCi0gICAqIHRvZ2V0aGVyIGFsc28uICovCi0g
IGNvbnN0IHVwYl9yZWZjb3VudGVkICpncm91cDsKLQotICAvKiBXaGV0aGVyIHRoaXMgbWV0aG9k
IGlzIG5hdGl2ZSBjb2RlIG9yIGJ5dGVjb2RlLiAqLwotICBib29sIGlzX25hdGl2ZV87Ci0KLSAg
LyogVGhlIGhhbmRsZXIgb25lIGNhbGxzIHRvIGludm9rZSB0aGlzIG1ldGhvZC4gKi8KLSAgdXBi
X2J5dGVzaGFuZGxlciBpbnB1dF9oYW5kbGVyXzsKLQotICAvKiBUaGUgZGVzdGluYXRpb24gaGFu
ZGxlcnMgdGhpcyBtZXRob2QgaXMgYm91bmQgdG8uICBXZSBvd24gYSByZWYuICovCi0gIGNvbnN0
IHVwYl9oYW5kbGVycyAqZGVzdF9oYW5kbGVyc187Ci0KLSAgLyogRGlzcGF0Y2ggdGFibGUgLS0g
dXNlZCBieSBib3RoIGJ5dGVjb2RlIGRlY29kZXIgYW5kIEpJVCB3aGVuIGVuY291bnRlcmluZyBh
Ci0gICAqIGZpZWxkIG51bWJlciB0aGF0IHdhc24ndCB0aGUgb25lIHdlIHdlcmUgZXhwZWN0aW5n
IHRvIHNlZS4gIFNlZQotICAgKiBkZWNvZGVyLmludC5oIGZvciB0aGUgbGF5b3V0IG9mIHRoaXMg
dGFibGUuICovCi0gIHVwYl9pbnR0YWJsZSBkaXNwYXRjaDsKLX07Ci0KLXN0cnVjdCB1cGJfcGJk
ZWNvZGVyIHsKLSAgdXBiX2VudiAqZW52OwotCi0gIC8qIE91ciBpbnB1dCBzaW5rLiAqLwotICB1
cGJfYnl0ZXNzaW5rIGlucHV0XzsKLQotICAvKiBUaGUgZGVjb2RlciBtZXRob2Qgd2UgYXJlIHBh
cnNpbmcgd2l0aCAob3duZWQpLiAqLwotICBjb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICptZXRo
b2RfOwotCi0gIHNpemVfdCBjYWxsX2xlbjsKLSAgY29uc3QgdWludDMyX3QgKnBjLCAqbGFzdDsK
LQotICAvKiBDdXJyZW50IGlucHV0IGJ1ZmZlciBhbmQgaXRzIHN0cmVhbSBvZmZzZXQuICovCi0g
IGNvbnN0IGNoYXIgKmJ1ZiwgKnB0ciwgKmVuZCwgKmNoZWNrcG9pbnQ7Ci0KLSAgLyogRW5kIG9m
IHRoZSBkZWxpbWl0ZWQgcmVnaW9uLCByZWxhdGl2ZSB0byBwdHIsIE5VTEwgaWYgbm90IGluIHRo
aXMgYnVmLiAqLwotICBjb25zdCBjaGFyICpkZWxpbV9lbmQ7Ci0KLSAgLyogRW5kIG9mIHRoZSBk
ZWxpbWl0ZWQgcmVnaW9uLCByZWxhdGl2ZSB0byBwdHIsIGVuZCBpZiBub3QgaW4gdGhpcyBidWYu
ICovCi0gIGNvbnN0IGNoYXIgKmRhdGFfZW5kOwotCi0gIC8qIE92ZXJhbGwgc3RyZWFtIG9mZnNl
dCBvZiAiYnVmLiIgKi8KLSAgdWludDY0X3QgYnVmc3RhcnRfb2ZzOwotCi0gIC8qIEJ1ZmZlciBm
b3IgcmVzaWR1YWwgYnl0ZXMgbm90IHBhcnNlZCBmcm9tIHRoZSBwcmV2aW91cyBidWZmZXIuCi0g
ICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNpZHVhbCBieXRlcyB3ZSByZXF1aXJlIGlzIDEy
OyBhIGZpdmUtYnl0ZQotICAgKiB1bmtub3duIHRhZyBwbHVzIGFuIGVpZ2h0LWJ5dGUgdmFsdWUs
IGxlc3Mgb25lIGJlY2F1c2UgdGhlIHZhbHVlCi0gICAqIGlzIG9ubHkgYSBwYXJ0aWFsIHZhbHVl
LiAqLwotICBjaGFyIHJlc2lkdWFsWzEyXTsKLSAgY2hhciAqcmVzaWR1YWxfZW5kOwotCi0gIC8q
IEJ5dGVzIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgZGlzY2FyZGVkIGZyb20gdGhlIGlucHV0IGJl
b3JlIHdlIHN0YXJ0Ci0gICAqIHBhcnNpbmcgYWdhaW4uICBXZSBzZXQgdGhpcyB3aGVuIHdlIGlu
dGVybmFsbHkgZGV0ZXJtaW5lIHRoYXQgd2UgY2FuCi0gICAqIHNhZmVseSBza2lwIHRoZSBuZXh0
IE4gYnl0ZXMsIGJ1dCB0aGlzIHJlZ2lvbiBleHRlbmRzIHBhc3QgdGhlIGN1cnJlbnQKLSAgICog
dXNlciBidWZmZXIuICovCi0gIHNpemVfdCBza2lwOwotCi0gIC8qIFN0b3JlcyB0aGUgdXNlciBi
dWZmZXIgcGFzc2VkIHRvIG91ciBkZWNvZGUgZnVuY3Rpb24uICovCi0gIGNvbnN0IGNoYXIgKmJ1
Zl9wYXJhbTsKLSAgc2l6ZV90IHNpemVfcGFyYW07Ci0gIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhh
bmRsZTsKLQotICAvKiBPdXIgaW50ZXJuYWwgc3RhY2suICovCi0gIHVwYl9wYmRlY29kZXJfZnJh
bWUgKnN0YWNrLCAqdG9wLCAqbGltaXQ7Ci0gIGNvbnN0IHVpbnQzMl90ICoqY2FsbHN0YWNrOwot
ICBzaXplX3Qgc3RhY2tfc2l6ZTsKLQotICB1cGJfc3RhdHVzICpzdGF0dXM7Ci0KLSNpZmRlZiBV
UEJfVVNFX0pJVF9YNjQKLSAgLyogVXNlZCBtb21lbnRhcmlseSBieSB0aGUgZ2VuZXJhdGVkIGNv
ZGUgdG8gc3RvcmUgYSB2YWx1ZSB3aGlsZSBhIHVzZXIKLSAgICogZnVuY3Rpb24gaXMgY2FsbGVk
LiAqLwotICB1aW50MzJfdCB0bXBfbGVuOwotCi0gIGNvbnN0IHZvaWQgKnNhdmVkX3JzcDsKLSNl
bmRpZgotfTsKLQotLyogRGVjb2RlciBlbnRyeSBwb2ludHM7IHVzZWQgYXMgaGFuZGxlcnMuICov
Ci12b2lkICp1cGJfcGJkZWNvZGVyX3N0YXJ0YmModm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAq
cGMsIHNpemVfdCBzaXplX2hpbnQpOwotdm9pZCAqdXBiX3BiZGVjb2Rlcl9zdGFydGppdCh2b2lk
ICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgc2l6ZV90IHNpemVfaGludCk7Ci1zaXplX3QgdXBi
X3BiZGVjb2Rlcl9kZWNvZGUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNo
YXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgY29uc3Qg
dXBiX2J1ZmhhbmRsZSAqaGFuZGxlKTsKLWJvb2wgdXBiX3BiZGVjb2Rlcl9lbmQodm9pZCAqY2xv
c3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhKTsKLQotLyogRGVjb2Rlci1pbnRlcm5hbCBm
dW5jdGlvbnMgdGhhdCB0aGUgSklUIGNhbGxzIHRvIGhhbmRsZSBmYWxsYmFjayBwYXRocy4gKi8K
LWludDMyX3QgdXBiX3BiZGVjb2Rlcl9yZXN1bWUodXBiX3BiZGVjb2RlciAqZCwgdm9pZCAqcCwg
Y29uc3QgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6
ZSwgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKTsKLXNpemVfdCB1cGJfcGJkZWNvZGVyX3N1
c3BlbmQodXBiX3BiZGVjb2RlciAqZCk7Ci1pbnQzMl90IHVwYl9wYmRlY29kZXJfc2tpcHVua25v
d24odXBiX3BiZGVjb2RlciAqZCwgaW50MzJfdCBmaWVsZG51bSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50OF90IHdpcmVfdHlwZSk7Ci1pbnQzMl90IHVwYl9wYmRlY29k
ZXJfY2hlY2t0YWdfc2xvdyh1cGJfcGJkZWNvZGVyICpkLCB1aW50NjRfdCBleHBlY3RlZCk7Ci1p
bnQzMl90IHVwYl9wYmRlY29kZXJfZGVjb2RlX3ZhcmludF9zbG93KHVwYl9wYmRlY29kZXIgKmQs
IHVpbnQ2NF90ICp1NjQpOwotaW50MzJfdCB1cGJfcGJkZWNvZGVyX2RlY29kZV9mMzIodXBiX3Bi
ZGVjb2RlciAqZCwgdWludDMyX3QgKnUzMik7Ci1pbnQzMl90IHVwYl9wYmRlY29kZXJfZGVjb2Rl
X2Y2NCh1cGJfcGJkZWNvZGVyICpkLCB1aW50NjRfdCAqdTY0KTsKLXZvaWQgdXBiX3BiZGVjb2Rl
cl9zZXRlcnIodXBiX3BiZGVjb2RlciAqZCwgY29uc3QgY2hhciAqbXNnKTsKLQotLyogRXJyb3Ig
bWVzc2FnZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIGJ5dGVjb2RlIGFuZCBKSVQgZGVj
b2RlcnMuICovCi1leHRlcm4gY29uc3QgY2hhciAqa1BiRGVjb2RlclN0YWNrT3ZlcmZsb3c7Ci1l
eHRlcm4gY29uc3QgY2hhciAqa1BiRGVjb2RlclN1Ym1lc3NhZ2VUb29Mb25nOwotCi0vKiBBY2Nl
c3MgdG8gZGVjb2RlcnBsYW4gbWVtYmVycyBuZWVkZWQgYnkgdGhlIGRlY29kZXIuICovCi1jb25z
dCBjaGFyICp1cGJfcGJkZWNvZGVyX2dldG9wbmFtZSh1bnNpZ25lZCBpbnQgb3ApOwotCi0vKiBK
SVQgY29kZWdlbiBlbnRyeSBwb2ludC4gKi8KLXZvaWQgdXBiX3BiZGVjb2Rlcl9qaXQobWdyb3Vw
ICpncm91cCk7Ci12b2lkIHVwYl9wYmRlY29kZXJfZnJlZWppdChtZ3JvdXAgKmdyb3VwKTsKLVVQ
Ql9SRUZDT1VOVEVEX0NNRVRIT0RTKG1ncm91cCwgbWdyb3VwX3VwY2FzdCkKLQotLyogQSBzcGVj
aWFsIGxhYmVsIHRoYXQgbWVhbnMgImRvIGZpZWxkIGRpc3BhdGNoIGZvciB0aGlzIG1lc3NhZ2Ug
YW5kIGJyYW5jaCB0bwotICogd2hlcmV2ZXIgdGhhdCB0YWtlcyB5b3UuIiAqLwotI2RlZmluZSBM
QUJFTF9ESVNQQVRDSCAwCi0KLS8qIEEgc3BlY2lhbCBzbG90IGluIHRoZSBkaXNwYXRjaCB0YWJs
ZSB0aGF0IHN0b3JlcyB0aGUgZXBpbG9ndWUgKEVORE1TRyBhbmQvb3IKLSAqIFJFVCkgZm9yIGJy
YW5jaGluZyB0byB3aGVuIHdlIGZpbmQgYW4gYXBwcm9wcmlhdGUgRU5ER1JPVVAgdGFnLiAqLwot
I2RlZmluZSBESVNQQVRDSF9FTkRNU0cgMAotCi0vKiBJdCdzIGltcG9ydGFudCB0byB1c2UgdGhp
cyBpbnZhbGlkIHdpcmUgdHlwZSBpbnN0ZWFkIG9mIDAgKHdoaWNoIGlzIGEgdmFsaWQKLSAqIHdp
cmUgdHlwZSkuICovCi0jZGVmaW5lIE5PX1dJUkVfVFlQRSAweGZmCi0KLS8qIFRoZSBkaXNwYXRj
aCB0YWJsZSBsYXlvdXQgaXM6Ci0gKiAgIFtmaWVsZCBudW1iZXJdIC0+IFsgNDgtYml0IG9mZnNl
dCBdWyA4LWJpdCB3dDIgXVsgOC1iaXQgd3QxIF0KLSAqCi0gKiBJZiB3dDEgbWF0Y2hlcywganVt
cCB0byB0aGUgNDgtYml0IG9mZnNldC4gIElmIHd0MiBtYXRjaGVzLCBsb29rdXAKLSAqIChVUEJf
TUFYX0ZJRUxETlVNQkVSICsgZmllbGRudW0pIGFuZCBqdW1wIHRoZXJlLgotICoKLSAqIFdlIG5l
ZWQgdHdvIHdpcmUgdHlwZXMgYmVjYXVzZSBvZiBwYWNrZWQvbm9uLXBhY2tlZCBjb21wYXRpYmls
aXR5LiAgQQotICogcHJpbWl0aXZlIHJlcGVhdGVkIGZpZWxkIGNhbiB1c2UgZWl0aGVyIHdpcmUg
dHlwZSBhbmQgYmUgdmFsaWQuICBXaGlsZSB3ZQotICogY291bGQga2V5IHRoZSB0YWJsZSBvbiBm
aWVsZG51bSt3aXJldHlwZSwgdGhlIHRhYmxlIHdvdWxkIGJlIDh4IHNwYXJzZXIuCi0gKgotICog
U3RvcmluZyB0d28gd2lyZSB0eXBlcyBpbiB0aGUgcHJpbWFyeSB2YWx1ZSBhbGxvd3MgdXMgdG8g
cXVpY2tseSBydWxlIG91dAotICogdGhlIHNlY29uZCB3aXJlIHR5cGUgd2l0aG91dCBuZWVkaW5n
IHRvIGRvIGEgc2VwYXJhdGUgbG9va3VwICh0aGlzIGNhc2UgaXMKLSAqIGxlc3MgY29tbW9uIHRo
YW4gYW4gdW5rbm93biBmaWVsZCkuICovCi1VUEJfSU5MSU5FIHVpbnQ2NF90IHVwYl9wYmRlY29k
ZXJfcGFja2Rpc3BhdGNoKHVpbnQ2NF90IG9mcywgdWludDhfdCB3dDEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgd3QyKSB7Ci0gIHJldHVy
biAob2ZzIDw8IDE2KSB8ICh3dDIgPDwgOCkgfCB3dDE7Ci19Ci0KLVVQQl9JTkxJTkUgdm9pZCB1
cGJfcGJkZWNvZGVyX3VucGFja2Rpc3BhdGNoKHVpbnQ2NF90IGRpc3BhdGNoLCB1aW50NjRfdCAq
b2ZzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf
dCAqd3QxLCB1aW50OF90ICp3dDIpIHsKLSAgKnd0MSA9ICh1aW50OF90KWRpc3BhdGNoOwotICAq
d3QyID0gKHVpbnQ4X3QpKGRpc3BhdGNoID4+IDgpOwotICAqb2ZzID0gZGlzcGF0Y2ggPj4gMTY7
Ci19Ci0KLS8qIEFsbCBvZiB0aGUgZnVuY3Rpb25zIGluIGRlY29kZXIuYyB0aGF0IHJldHVybiBp
bnQzMl90IHJldHVybiB2YWx1ZXMgYWNjb3JkaW5nCi0gKiB0byB0aGUgZm9sbG93aW5nIHNjaGVt
ZToKLSAqICAgMS4gbmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGEgcmV0dXJuIGNvZGUgZnJvbSB0
aGUgZm9sbG93aW5nIGxpc3QuCi0gKiAgIDIuIHBvc2l0aXZlIHZhbHVlcyBpbmRpY2F0ZSB0aGF0
IGVycm9yIG9yIGVuZCBvZiBidWZmZXIgd2FzIGhpdCwgYW5kCi0gKiAgICAgIHRoYXQgdGhlIGRl
Y29kZSBmdW5jdGlvbiBzaG91bGQgaW1tZWRpYXRlbHkgcmV0dXJuIHRoZSBnaXZlbiB2YWx1ZQot
ICogICAgICAodGhlIGRlY29kZXIgc3RhdGUgaGFzIGFscmVhZHkgYmVlbiBzdXNwZW5kZWQgYW5k
IGlzIHJlYWR5IHRvIGJlCi0gKiAgICAgIHJlc3VtZWQpLiAqLwotI2RlZmluZSBERUNPREVfT0sg
LTEKLSNkZWZpbmUgREVDT0RFX01JU01BVENIIC0yICAvKiBVc2VkIG9ubHkgZnJvbSBjaGVja3Rh
Z19zbG93KCkuICovCi0jZGVmaW5lIERFQ09ERV9FTkRHUk9VUCAtMyAgLyogVXNlZCBvbmx5IGZy
b20gY2hlY2t1bmtub3duKCkuICovCi0KLSNkZWZpbmUgQ0hFQ0tfUkVUVVJOKHgpIHsgaW50MzJf
dCByZXQgPSB4OyBpZiAocmV0ID49IDApIHJldHVybiByZXQ7IH0KLQotI2VuZGlmICAvKiBVUEJf
REVDT0RFUl9JTlRfSF8gKi8KLS8qCi0qKiBBIG51bWJlciBvZiByb3V0aW5lcyBmb3IgdmFyaW50
IG1hbmlwdWxhdGlvbiAod2Uga2VlcCB0aGVtIGFsbCBhcm91bmQgdG8KLSoqIGhhdmUgbXVsdGlw
bGUgYXBwcm9hY2hlcyBhdmFpbGFibGUgZm9yIGJlbmNobWFya2luZykuCi0qLwotCi0jaWZuZGVm
IFVQQl9WQVJJTlRfREVDT0RFUl9IXwotI2RlZmluZSBVUEJfVkFSSU5UX0RFQ09ERVJfSF8KLQot
I2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0cmlu
Zy5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qIEEg
bGlzdCBvZiB0eXBlcyBhcyB0aGV5IGFyZSBlbmNvZGVkIG9uLXRoZS13aXJlLiAqLwotdHlwZWRl
ZiBlbnVtIHsKLSAgVVBCX1dJUkVfVFlQRV9WQVJJTlQgICAgICA9IDAsCi0gIFVQQl9XSVJFX1RZ
UEVfNjRCSVQgICAgICAgPSAxLAotICBVUEJfV0lSRV9UWVBFX0RFTElNSVRFRCAgID0gMiwKLSAg
VVBCX1dJUkVfVFlQRV9TVEFSVF9HUk9VUCA9IDMsCi0gIFVQQl9XSVJFX1RZUEVfRU5EX0dST1VQ
ICAgPSA0LAotICBVUEJfV0lSRV9UWVBFXzMyQklUICAgICAgID0gNQotfSB1cGJfd2lyZXR5cGVf
dDsKLQotI2RlZmluZSBVUEJfTUFYX1dJUkVfVFlQRSA1Ci0KLS8qIFRoZSBtYXhpbXVtIG51bWJl
ciBvZiBieXRlcyB0aGF0IGl0IHRha2VzIHRvIGVuY29kZSBhIDY0LWJpdCB2YXJpbnQuCi0gKiBO
b3RlIHRoYXQgd2l0aCBhIGJldHRlciBlbmNvZGluZyB0aGlzIGNvdWxkIGJlIDkgKFRPRE86IHdy
aXRlIHVwIGEKLSAqIHdpa2kgZG9jdW1lbnQgYWJvdXQgdGhpcykuICovCi0jZGVmaW5lIFVQQl9Q
Ql9WQVJJTlRfTUFYX0xFTiAxMAotCi0vKiBBcnJheSBvZiB0aGUgIm5hdGl2ZSIgKGllLiBub24t
cGFja2VkLXJlcGVhdGVkKSB3aXJlIHR5cGUgZm9yIHRoZSBnaXZlbiBhCi0gKiBkZXNjcmlwdG9y
IHR5cGUgKHVwYl9kZXNjcmlwdG9ydHlwZV90KS4gKi8KLWV4dGVybiBjb25zdCB1aW50OF90IHVw
Yl9wYl9uYXRpdmVfd2lyZV90eXBlc1tdOwotCi0vKiBaaWctemFnIGVuY29kaW5nL2RlY29kaW5n
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1V
UEJfSU5MSU5FIGludDMyX3QgdXBiX3p6ZGVjXzMyKHVpbnQzMl90IG4pIHsKLSAgcmV0dXJuIChu
ID4+IDEpIF4gLShpbnQzMl90KShuICYgMSk7Ci19Ci1VUEJfSU5MSU5FIGludDY0X3QgdXBiX3p6
ZGVjXzY0KHVpbnQ2NF90IG4pIHsKLSAgcmV0dXJuIChuID4+IDEpIF4gLShpbnQ2NF90KShuICYg
MSk7Ci19Ci1VUEJfSU5MSU5FIHVpbnQzMl90IHVwYl96emVuY18zMihpbnQzMl90IG4pIHsgcmV0
dXJuIChuIDw8IDEpIF4gKG4gPj4gMzEpOyB9Ci1VUEJfSU5MSU5FIHVpbnQ2NF90IHVwYl96emVu
Y182NChpbnQ2NF90IG4pIHsgcmV0dXJuIChuIDw8IDEpIF4gKG4gPj4gNjMpOyB9Ci0KLS8qIERl
Y29kaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLS8qIEFsbCBkZWNvZGluZyBmdW5jdGlvbnMgcmV0dXJuIHRo
aXMgc3RydWN0IGJ5IHZhbHVlLiAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBjaGFyICpw
OyAgLyogTlVMTCBpZiB0aGUgdmFyaW50IHdhcyB1bnRlcm1pbmF0ZWQuICovCi0gIHVpbnQ2NF90
IHZhbDsKLX0gdXBiX2RlY29kZXJldDsKLQotVVBCX0lOTElORSB1cGJfZGVjb2RlcmV0IHVwYl9k
ZWNvZGVyZXRfbWFrZShjb25zdCBjaGFyICpwLCB1aW50NjRfdCB2YWwpIHsKLSAgdXBiX2RlY29k
ZXJldCByZXQ7Ci0gIHJldC5wID0gcDsKLSAgcmV0LnZhbCA9IHZhbDsKLSAgcmV0dXJuIHJldDsK
LX0KLQotLyogRm91ciBmdW5jdGlvbnMgZm9yIGRlY29kaW5nIGEgdmFyaW50IG9mIGF0IG1vc3Qg
ZWlnaHQgYnl0ZXMuICBUaGV5IGFyZSBhbGwKLSAqIGZ1bmN0aW9uYWxseSBpZGVudGljYWwsIGJ1
dCBhcmUgaW1wbGVtZW50ZWQgaW4gZGlmZmVyZW50IHdheXMgYW5kIGxpa2VseSBoYXZlCi0gKiBk
aWZmZXJlbnQgcGVyZm9ybWFuY2UgcHJvZmlsZXMuICBXZSBrZWVwIHRoZW0gYXJvdW5kIGZvciBw
ZXJmb3JtYW5jZSB0ZXN0aW5nLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgbWF5
IG5vdCByZWFkIGJ5dGUtYnktYnl0ZSwgc28gdGhleSBtdXN0IG5vdCBiZSB1c2VkCi0gKiB1bmxl
c3MgdGhlcmUgYXJlIGF0IGxlYXN0IGVpZ2h0IGJ5dGVzIGxlZnQgaW4gdGhlIGJ1ZmZlciEgKi8K
LXVwYl9kZWNvZGVyZXQgdXBiX3ZkZWNvZGVfbWF4OF9icmFuY2gzMih1cGJfZGVjb2RlcmV0IHIp
OwotdXBiX2RlY29kZXJldCB1cGJfdmRlY29kZV9tYXg4X2JyYW5jaDY0KHVwYl9kZWNvZGVyZXQg
cik7Ci11cGJfZGVjb2RlcmV0IHVwYl92ZGVjb2RlX21heDhfd3JpZ2h0KHVwYl9kZWNvZGVyZXQg
cik7Ci11cGJfZGVjb2RlcmV0IHVwYl92ZGVjb2RlX21heDhfbWFzc2ltaW5vKHVwYl9kZWNvZGVy
ZXQgcik7Ci0KLS8qIFRlbXBsYXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHRoZSBmaXJz
dCB0d28gYnl0ZXMgd2l0aCBicmFuY2hpbmcKLSAqIGFuZCBkaXNwYXRjaGVzIDItMTAgYnl0ZXMg
d2l0aCBhIHNlcGFyYXRlIGZ1bmN0aW9uLiAgTm90ZSB0aGF0IHRoaXMgbWF5IHJlYWQKLSAqIHVw
IHRvIDEwIGJ5dGVzLCBzbyBpdCBtdXN0IG5vdCBiZSB1c2VkIHVubGVzcyB0aGVyZSBhcmUgYXQg
bGVhc3QgdGVuIGJ5dGVzCi0gKiBsZWZ0IGluIHRoZSBidWZmZXIhICovCi0jZGVmaW5lIFVQQl9W
QVJJTlRfREVDT0RFUl9DSEVDSzIobmFtZSwgZGVjb2RlX21heDhfZnVuY3Rpb24pICAgICAgICAg
ICAgICAgICAgXAotVVBCX0lOTElORSB1cGJfZGVjb2RlcmV0IHVwYl92ZGVjb2RlX2NoZWNrMl8g
IyMgbmFtZShjb25zdCBjaGFyICpfcCkgeyAgICAgICAgIFwKLSAgdWludDhfdCAqcCA9ICh1aW50
OF90KilfcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIHVwYl9kZWNvZGVyZXQgcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoKCpwICYgMHg4MCkgPT0gMCkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
LyogQ29tbW9uIGNhc2U6IG9uZS1ieXRlIHZhcmludC4gKi8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIHVwYl9kZWNvZGVyZXRfbWFrZShfcCAr
IDEsICpwICYgMHg3ZlUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgciA9IHVwYl9kZWNvZGVyZXRfbWFrZShfcCArIDIsICgqcCAmIDB4
N2ZVKSB8ICgoKihwICsgMSkgJiAweDdmVSkgPDwgNykpOyAgICBcCi0gIGlmICgoKihwICsgMSkg
JiAweDgwKSA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIC8qIFR3by1ieXRlIHZhcmludC4gKi8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gcjsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiBMb25nZXIgdmFyaW50LCBmYWxsYmFjayB0
byBvdXQtb2YtbGluZSBmdW5jdGlvbi4gKi8gICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0
dXJuIGRlY29kZV9tYXg4X2Z1bmN0aW9uKHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi19Ci0KLVVQQl9WQVJJTlRfREVDT0RFUl9DSEVDSzIoYnJhbmNo
MzIsIHVwYl92ZGVjb2RlX21heDhfYnJhbmNoMzIpCi1VUEJfVkFSSU5UX0RFQ09ERVJfQ0hFQ0sy
KGJyYW5jaDY0LCB1cGJfdmRlY29kZV9tYXg4X2JyYW5jaDY0KQotVVBCX1ZBUklOVF9ERUNPREVS
X0NIRUNLMih3cmlnaHQsIHVwYl92ZGVjb2RlX21heDhfd3JpZ2h0KQotVVBCX1ZBUklOVF9ERUNP
REVSX0NIRUNLMihtYXNzaW1pbm8sIHVwYl92ZGVjb2RlX21heDhfbWFzc2ltaW5vKQotI3VuZGVm
IFVQQl9WQVJJTlRfREVDT0RFUl9DSEVDSzIKLQotLyogT3VyIGNhbm9uaWNhbCBmdW5jdGlvbnMg
Zm9yIGRlY29kaW5nIHZhcmludHMsIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkKLSAqIGZhdm9yZWQg
YmVzdC1wZXJmb3JtaW5nIGltcGxlbWVudGF0aW9ucy4gKi8KLVVQQl9JTkxJTkUgdXBiX2RlY29k
ZXJldCB1cGJfdmRlY29kZV9mYXN0KGNvbnN0IGNoYXIgKnApIHsKLSAgaWYgKHNpemVvZihsb25n
KSA9PSA4KQotICAgIHJldHVybiB1cGJfdmRlY29kZV9jaGVjazJfYnJhbmNoNjQocCk7Ci0gIGVs
c2UKLSAgICByZXR1cm4gdXBiX3ZkZWNvZGVfY2hlY2syX2JyYW5jaDMyKHApOwotfQotCi1VUEJf
SU5MSU5FIHVwYl9kZWNvZGVyZXQgdXBiX3ZkZWNvZGVfbWF4OF9mYXN0KHVwYl9kZWNvZGVyZXQg
cikgewotICByZXR1cm4gdXBiX3ZkZWNvZGVfbWF4OF9tYXNzaW1pbm8ocik7Ci19Ci0KLQotLyog
RW5jb2RpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLQotVVBCX0lOTElORSBpbnQgdXBiX3ZhbHVlX3NpemUodWlu
dDY0X3QgdmFsKSB7Ci0jaWZkZWYgX19HTlVDX18KLSAgaW50IGhpZ2hfYml0ID0gNjMgLSBfX2J1
aWx0aW5fY2x6bGwodmFsKTsgIC8qIDAtYmFzZWQsIHVuZGVmIGlmIHZhbCA9PSAwLiAqLwotI2Vs
c2UKLSAgaW50IGhpZ2hfYml0ID0gMDsKLSAgdWludDY0X3QgdG1wID0gdmFsOwotICB3aGlsZSh0
bXAgPj49IDEpIGhpZ2hfYml0Kys7Ci0jZW5kaWYKLSAgcmV0dXJuIHZhbCA9PSAwID8gMSA6IGhp
Z2hfYml0IC8gOCArIDE7Ci19Ci0KLS8qIEVuY29kZXMgYSA2NC1iaXQgdmFyaW50IGludG8gYnVm
ICh3aGljaCBtdXN0IGJlID49VVBCX1BCX1ZBUklOVF9NQVhfTEVOCi0gKiBieXRlcyBsb25nKSwg
cmV0dXJuaW5nIGhvdyBtYW55IGJ5dGVzIHdlcmUgdXNlZC4KLSAqCi0gKiBUT0RPOiBiZW5jaG1h
cmsgYW5kIG9wdGltaXplIGlmIG5lY2Vzc2FyeS4gKi8KLVVQQl9JTkxJTkUgc2l6ZV90IHVwYl92
ZW5jb2RlNjQodWludDY0X3QgdmFsLCBjaGFyICpidWYpIHsKLSAgc2l6ZV90IGk7Ci0gIGlmICh2
YWwgPT0gMCkgeyBidWZbMF0gPSAwOyByZXR1cm4gMTsgfQotICBpID0gMDsKLSAgd2hpbGUgKHZh
bCkgewotICAgIHVpbnQ4X3QgYnl0ZSA9IHZhbCAmIDB4N2ZVOwotICAgIHZhbCA+Pj0gNzsKLSAg
ICBpZiAodmFsKSBieXRlIHw9IDB4ODBVOwotICAgIGJ1ZltpKytdID0gYnl0ZTsKLSAgfQotICBy
ZXR1cm4gaTsKLX0KLQotVVBCX0lOTElORSBzaXplX3QgdXBiX3ZhcmludF9zaXplKHVpbnQ2NF90
IHZhbCkgewotICBjaGFyIGJ1ZltVUEJfUEJfVkFSSU5UX01BWF9MRU5dOwotICByZXR1cm4gdXBi
X3ZlbmNvZGU2NCh2YWwsIGJ1Zik7Ci19Ci0KLS8qIEVuY29kZXMgYSAzMi1iaXQgdmFyaW50LCAq
bm90KiBzaWduLWV4dGVuZGVkLiAqLwotVVBCX0lOTElORSB1aW50NjRfdCB1cGJfdmVuY29kZTMy
KHVpbnQzMl90IHZhbCkgewotICBjaGFyIGJ1ZltVUEJfUEJfVkFSSU5UX01BWF9MRU5dOwotICBz
aXplX3QgYnl0ZXMgPSB1cGJfdmVuY29kZTY0KHZhbCwgYnVmKTsKLSAgdWludDY0X3QgcmV0ID0g
MDsKLSAgYXNzZXJ0KGJ5dGVzIDw9IDUpOwotICBtZW1jcHkoJnJldCwgYnVmLCBieXRlcyk7Ci0g
IGFzc2VydChyZXQgPD0gMHhmZmZmZmZmZmZmVSk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLSNpZmRl
ZiBfX2NwbHVzcGx1cwotfSAgLyogZXh0ZXJuICJDIiAqLwotI2VuZGlmCi0KLSNlbmRpZiAgLyog
VVBCX1ZBUklOVF9ERUNPREVSX0hfICovCi0vKgotKiogdXBiOjpwYjo6RW5jb2RlciAodXBiX3Bi
X2VuY29kZXIpCi0qKgotKiogSW1wbGVtZW50cyBhIHNldCBvZiB1cGJfaGFuZGxlcnMgdGhhdCB3
cml0ZSBwcm90b2J1ZiBkYXRhIHRvIHRoZSBiaW5hcnkgd2lyZQotKiogZm9ybWF0LgotKioKLSoq
IFRoaXMgZW5jb2RlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBhY2Nlc3MgdG8g
YW55IG91dC1vZi1iYW5kIG9yCi0qKiBwcmVjb21wdXRlZCBsZW5ndGhzIGZvciBzdWJtZXNzYWdl
cywgc28gaXQgbXVzdCBidWZmZXIgc3VibWVzc2FnZXMgaW50ZXJuYWxseQotKiogYmVmb3JlIGl0
IGNhbiBlbWl0IHRoZSBmaXJzdCBieXRlLgotKi8KLQotI2lmbmRlZiBVUEJfRU5DT0RFUl9IXwot
I2RlZmluZSBVUEJfRU5DT0RFUl9IXwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotbmFtZXNwYWNl
IHVwYiB7Ci1uYW1lc3BhY2UgcGIgewotY2xhc3MgRW5jb2RlcjsKLX0gIC8qIG5hbWVzcGFjZSBw
YiAqLwotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotI2VuZGlmCi0KLVVQQl9ERUNMQVJFX1RZUEUo
dXBiOjpwYjo6RW5jb2RlciwgdXBiX3BiX2VuY29kZXIpCi0KLSNkZWZpbmUgVVBCX1BCRU5DT0RF
Ul9NQVhfTkVTVElORyAxMDAKLQotLyogdXBiOjpwYjo6RW5jb2RlciAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogUHJlYWxs
b2NhdGlvbiBoaW50OiBkZWNvZGVyIHdvbid0IGFsbG9jYXRlIG1vcmUgYnl0ZXMgdGhhbiB0aGlz
IHdoZW4gZmlyc3QKLSAqIGNvbnN0cnVjdGVkLiAgVGhpcyBoaW50IG1heSBiZSBhbiBvdmVyZXN0
aW1hdGUgZm9yIHNvbWUgYnVpbGQgY29uZmlndXJhdGlvbnMuCi0gKiBCdXQgaWYgdGhlIGRlY29k
ZXIgbGlicmFyeSBpcyB1cGdyYWRlZCB3aXRob3V0IHJlY29tcGlsaW5nIHRoZSBhcHBsaWNhdGlv
biwKLSAqIGl0IG1heSBiZSBhbiB1bmRlcmVzdGltYXRlLiAqLwotI2RlZmluZSBVUEJfUEJfRU5D
T0RFUl9TSVpFIDc2OAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotY2xhc3MgdXBiOjpwYjo6RW5j
b2RlciB7Ci0gcHVibGljOgotICAvKiBDcmVhdGVzIGEgbmV3IGVuY29kZXIgaW4gdGhlIGdpdmVu
IGVudmlyb25tZW50LiAgVGhlIEhhbmRsZXJzIG11c3QgaGF2ZQotICAgKiBjb21lIGZyb20gTmV3
SGFuZGxlcnMoKSBiZWxvdy4gKi8KLSAgc3RhdGljIEVuY29kZXIqIENyZWF0ZShFbnZpcm9ubWVu
dCogZW52LCBjb25zdCBIYW5kbGVycyogaGFuZGxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgQnl0ZXNTaW5rKiBvdXRwdXQpOwotCi0gIC8qIFRoZSBpbnB1dCB0byB0aGUgZW5jb2Rlci4g
Ki8KLSAgU2luayogaW5wdXQoKTsKLQotICAvKiBDcmVhdGVzIGEgbmV3IHNldCBvZiBoYW5kbGVy
cyBmb3IgdGhpcyBNZXNzYWdlRGVmLiAqLwotICBzdGF0aWMgcmVmZmVkX3B0cjxjb25zdCBIYW5k
bGVycz4gTmV3SGFuZGxlcnMoY29uc3QgTWVzc2FnZURlZiogbXNnKTsKLQotICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGtTaXplID0gVVBCX1BCX0VOQ09ERVJfU0laRTsKLQotIHByaXZhdGU6Ci0gIFVQ
Ql9ESVNBTExPV19QT0RfT1BTKEVuY29kZXIsIHVwYjo6cGI6OkVuY29kZXIpCi19OwotCi0jZW5k
aWYKLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBiX3BiX2Vu
Y29kZXJfbmV3aGFuZGxlcnMoY29uc3QgdXBiX21zZ2RlZiAqbSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3duZXIpOwotdXBiX3Np
bmsgKnVwYl9wYl9lbmNvZGVyX2lucHV0KHVwYl9wYl9lbmNvZGVyICpwKTsKLXVwYl9wYl9lbmNv
ZGVyKiB1cGJfcGJfZW5jb2Rlcl9jcmVhdGUodXBiX2VudiogZSwgY29uc3QgdXBiX2hhbmRsZXJz
KiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfYnl0ZXNzaW5r
KiBvdXRwdXQpOwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1u
YW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBwYiB7Ci1pbmxpbmUgRW5jb2RlciogRW5jb2Rlcjo6
Q3JlYXRlKEVudmlyb25tZW50KiBlbnYsIGNvbnN0IEhhbmRsZXJzKiBoYW5kbGVycywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZXNTaW5rKiBvdXRwdXQpIHsKLSAgcmV0dXJu
IHVwYl9wYl9lbmNvZGVyX2NyZWF0ZShlbnYsIGhhbmRsZXJzLCBvdXRwdXQpOwotfQotaW5saW5l
IFNpbmsqIEVuY29kZXI6OmlucHV0KCkgewotICByZXR1cm4gdXBiX3BiX2VuY29kZXJfaW5wdXQo
dGhpcyk7Ci19Ci1pbmxpbmUgcmVmZmVkX3B0cjxjb25zdCBIYW5kbGVycz4gRW5jb2Rlcjo6TmV3
SGFuZGxlcnMoCi0gICAgY29uc3QgdXBiOjpNZXNzYWdlRGVmICptZCkgewotICBjb25zdCBIYW5k
bGVycyogaCA9IHVwYl9wYl9lbmNvZGVyX25ld2hhbmRsZXJzKG1kLCAmaCk7Ci0gIHJldHVybiBy
ZWZmZWRfcHRyPGNvbnN0IEhhbmRsZXJzPihoLCAmaCk7Ci19Ci19ICAvKiBuYW1lc3BhY2UgcGIg
Ki8KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLQotI2VuZGlmCi0KLSNlbmRpZiAgLyogVVBCX0VO
Q09ERVJfSF8gKi8KLS8qCi0qKiB1cGIncyBjb3JlIGNvbXBvbmVudHMgbGlrZSB1cGJfZGVjb2Rl
ciBhbmQgdXBiX21zZyBhcmUgY2FyZWZ1bGx5IGRlc2lnbmVkIHRvCi0qKiBhdm9pZCBkZXBlbmRp
bmcgb24gZWFjaCBvdGhlciBmb3IgbWF4aW11bSBvcnRob2dvbmFsaXR5LiAgSW4gb3RoZXIgd29y
ZHMsCi0qKiB5b3UgY2FuIHVzZSBhIHVwYl9kZWNvZGVyIHRvIGRlY29kZSBpbnRvICphbnkqIGtp
bmQgb2Ygc3RydWN0dXJlOyB1cGJfbXNnIGlzCi0qKiBqdXN0IG9uZSBzdWNoIHN0cnVjdHVyZS4g
IEEgdXBiX21zZyBjYW4gYmUgc2VyaWFsaXplZC9kZXNlcmlhbGl6ZWQgaW50byBhbnkKLSoqIGZv
cm1hdCwgcHJvdG9idWYgYmluYXJ5IGZvcm1hdCBpcyBqdXN0IG9uZSBzdWNoIGZvcm1hdC4KLSoq
Ci0qKiBIb3dldmVyLCBmb3IgY29udmVuaWVuY2Ugd2UgcHJvdmlkZSBmdW5jdGlvbnMgaGVyZSBm
b3IgZG9pbmcgY29tbW9uCi0qKiBvcGVyYXRpb25zIGxpa2UgZGVzZXJpYWxpemluZyBwcm90b2J1
ZiBiaW5hcnkgZm9ybWF0IGludG8gYSB1cGJfbXNnLiAgVGhlCi0qKiBjb21wcm9taXNlIGlzIHRo
YXQgdGhpcyBmaWxlIGRyYWdzIGluIGFsbW9zdCBhbGwgb2YgdXBiIGFzIGEgZGVwZW5kZW5jeSwK
LSoqIHdoaWNoIGNvdWxkIGJlIHVuZGVzaXJhYmxlIGlmIHlvdSdyZSB0cnlpbmcgdG8gdXNlIGEg
dHJpbW1lZC1kb3duIGJ1aWxkIG9mCi0qKiB1cGIuCi0qKgotKiogV2hpbGUgdGhlc2Ugcm91dGlu
ZXMgYXJlIGNvbnZlbmllbnQsIHRoZXkgZG8gbm90IHJldXNlIGFueSBlbmNvZGluZy9kZWNvZGlu
ZwotKiogc3RhdGUuICBGb3IgZXhhbXBsZSwgaWYgYSBkZWNvZGVyIGlzIEpJVC1iYXNlZCwgaXQg
d2lsbCBiZSByZS1KSVR0ZWQgZXZlcnkKLSoqIHRpbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxs
ZWQuICBGb3IgdGhpcyByZWFzb24sIGlmIHlvdSBhcmUgcGFyc2luZyBsb3RzCi0qKiBvZiBkYXRh
IGFuZCBlZmZpY2llbmN5IGlzIGFuIGlzc3VlLCB0aGVzZSBtYXkgbm90IGJlIHRoZSBiZXN0IGZ1
bmN0aW9ucyB0bwotKiogdXNlICh0aG91Z2ggdGhleSBhcmUgdXNlZnVsIGZvciBwcm90b3R5cGlu
ZywgYmVmb3JlIG9wdGltaXppbmcpLgotKi8KLQotI2lmbmRlZiBVUEJfR0xVRV9ICi0jZGVmaW5l
IFVQQl9HTFVFX0gKLQotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKiBMb2FkcyBhbGwgZGVmcyBmcm9tIHRoZSBnaXZl
biBwcm90b2J1ZiBiaW5hcnkgZGVzY3JpcHRvciwgc2V0dGluZyBkZWZhdWx0Ci0gKiBhY2Nlc3Nv
cnMgYW5kIGEgZGVmYXVsdCBsYXlvdXQgb24gYWxsIG1lc3NhZ2VzLiAgVGhlIGNhbGxlciBvd25z
IHRoZQotICogcmV0dXJuZWQgYXJyYXkgb2YgZGVmcywgd2hpY2ggd2lsbCBiZSBvZiBsZW5ndGgg
Km4uICBPbiBlcnJvciBOVUxMIGlzCi0gKiByZXR1cm5lZCBhbmQgc3RhdHVzIGlzIHNldCAoaWYg
bm9uLU5VTEwpLiAqLwotdXBiX2RlZiAqKnVwYl9sb2FkX2RlZnNfZnJvbV9kZXNjcmlwdG9yKGNv
bnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgaW50ICpuLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKm93bmVyLCB1cGJfc3RhdHVzICpzdGF0dXMpOwotCi0v
KiBMaWtlIHRoZSBwcmV2aW91cyBidXQgYWxzbyBhZGRzIHRoZSBsb2FkZWQgZGVmcyB0byB0aGUg
Z2l2ZW4gc3ltdGFiLiAqLwotYm9vbCB1cGJfbG9hZF9kZXNjcmlwdG9yX2ludG9fc3ltdGFiKHVw
Yl9zeW10YWIgKnN5bXRhYiwgY29uc3QgY2hhciAqc3RyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIHVwYl9zdGF0dXMgKnN0YXR1cyk7Ci0KLS8qIExp
a2UgdGhlIHByZXZpb3VzIGJ1dCBhbHNvIHJlYWRzIHRoZSBkZXNjcmlwdG9yIGZyb20gdGhlIGdp
dmVuIGZpbGVuYW1lLiAqLwotYm9vbCB1cGJfbG9hZF9kZXNjcmlwdG9yX2ZpbGVfaW50b19zeW10
YWIodXBiX3N5bXRhYiAqc3ltdGFiLCBjb25zdCBjaGFyICpmbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnN0YXR1cyk7Ci0KLS8qIFJl
YWRzIHRoZSBnaXZlbiBmaWxlbmFtZSBpbnRvIGEgY2hhcmFjdGVyIHN0cmluZywgcmV0dXJuaW5n
IE5VTEwgaWYgdGhlcmUKLSAqIHdhcyBhbiBlcnJvci4gKi8KLWNoYXIgKnVwYl9yZWFkZmlsZShj
b25zdCBjaGFyICpmaWxlbmFtZSwgc2l6ZV90ICpsZW4pOwotCi0jaWZkZWYgX19jcGx1c3BsdXMK
LX0gIC8qIGV4dGVybiAiQyIgKi8KLQotbmFtZXNwYWNlIHVwYiB7Ci0KLS8qIEFsbCByb3V0aW5l
cyB0aGF0IGxvYWQgZGVzY3JpcHRvcnMgZXhwZWN0IHRoZSBkZXNjcmlwdG9yIHRvIGJlIGEKLSAq
IEZpbGVEZXNjcmlwdG9yU2V0LiAqLwotaW5saW5lIGJvb2wgTG9hZERlc2NyaXB0b3JGaWxlSW50
b1N5bXRhYihTeW1ib2xUYWJsZSogcywgY29uc3QgY2hhciAqZm5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyogc3RhdHVzKSB7Ci0gIHJldHVybiB1
cGJfbG9hZF9kZXNjcmlwdG9yX2ZpbGVfaW50b19zeW10YWIocywgZm5hbWUsIHN0YXR1cyk7Ci19
Ci0KLWlubGluZSBib29sIExvYWREZXNjcmlwdG9ySW50b1N5bXRhYihTeW1ib2xUYWJsZSogcywg
Y29uc3QgY2hhciogc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBsZW4sIFN0YXR1cyogc3RhdHVzKSB7Ci0gIHJldHVybiB1cGJfbG9hZF9kZXNjcmlwdG9y
X2ludG9fc3ltdGFiKHMsIHN0ciwgbGVuLCBzdGF0dXMpOwotfQotCi0vKiBUZW1wbGF0ZWQgc28g
aXQgY2FuIGFjY2VwdCBib3RoIHN0cmluZyBhbmQgc3RkOjpzdHJpbmcuICovCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLWJvb2wgTG9hZERlc2NyaXB0b3JJbnRvU3ltdGFiKFN5bWJvbFRhYmxlKiBz
LCBjb25zdCBUJiBkZXNjLCBTdGF0dXMqIHN0YXR1cykgewotICByZXR1cm4gdXBiX2xvYWRfZGVz
Y3JpcHRvcl9pbnRvX3N5bXRhYihzLCBkZXNjLmNfc3RyKCksIGRlc2Muc2l6ZSgpLCBzdGF0dXMp
OwotfQotCi19ICAvKiBuYW1lc3BhY2UgdXBiICovCi0KLSNlbmRpZgotCi0jZW5kaWYgIC8qIFVQ
Ql9HTFVFX0ggKi8KLS8qCi0qKiB1cGI6OnBiOjpUZXh0UHJpbnRlciAodXBiX3RleHRwcmludGVy
KQotKioKLSoqIEhhbmRsZXJzIGZvciB3cml0aW5nIHRvIHByb3RvYnVmIHRleHQgZm9ybWF0Lgot
Ki8KLQotI2lmbmRlZiBVUEJfVEVYVF9IXwotI2RlZmluZSBVUEJfVEVYVF9IXwotCi0KLSNpZmRl
ZiBfX2NwbHVzcGx1cwotbmFtZXNwYWNlIHVwYiB7Ci1uYW1lc3BhY2UgcGIgewotY2xhc3MgVGV4
dFByaW50ZXI7Ci19ICAvKiBuYW1lc3BhY2UgcGIgKi8KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8K
LSNlbmRpZgotCi1VUEJfREVDTEFSRV9UWVBFKHVwYjo6cGI6OlRleHRQcmludGVyLCB1cGJfdGV4
dHByaW50ZXIpCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1jbGFzcyB1cGI6OnBiOjpUZXh0UHJp
bnRlciB7Ci0gcHVibGljOgotICAvKiBUaGUgZ2l2ZW4gaGFuZGxlcnMgbXVzdCBoYXZlIGNvbWUg
ZnJvbSBOZXdIYW5kbGVycygpLiAgSXQgbXVzdCBvdXRsaXZlIHRoZQotICAgKiBUZXh0UHJpbnRl
ci4gKi8KLSAgc3RhdGljIFRleHRQcmludGVyICpDcmVhdGUoRW52aXJvbm1lbnQgKmVudiwgY29u
c3QgdXBiOjpIYW5kbGVycyAqaGFuZGxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJ5dGVzU2luayAqb3V0cHV0KTsKLQotICB2b2lkIFNldFNpbmdsZUxpbmVNb2RlKGJvb2wgc2lu
Z2xlX2xpbmUpOwotCi0gIFNpbmsqIGlucHV0KCk7Ci0KLSAgLyogSWYgaGFuZGxlciBjYWNoaW5n
IGJlY29tZXMgYSByZXF1aXJlbWVudCB3ZSBjYW4gYWRkIGEgY29kZSBjYWNoZSBhcyBpbgotICAg
KiBkZWNvZGVyLmggKi8KLSAgc3RhdGljIHJlZmZlZF9wdHI8Y29uc3QgSGFuZGxlcnM+IE5ld0hh
bmRsZXJzKGNvbnN0IE1lc3NhZ2VEZWYqIG1kKTsKLX07Ci0KLSNlbmRpZgotCi1VUEJfQkVHSU5f
RVhURVJOX0MKLQotLyogQyBBUEkuICovCi11cGJfdGV4dHByaW50ZXIgKnVwYl90ZXh0cHJpbnRl
cl9jcmVhdGUodXBiX2VudiAqZW52LCBjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2J5dGVzc2luayAqb3V0cHV0KTsKLXZv
aWQgdXBiX3RleHRwcmludGVyX3NldHNpbmdsZWxpbmUodXBiX3RleHRwcmludGVyICpwLCBib29s
IHNpbmdsZV9saW5lKTsKLXVwYl9zaW5rICp1cGJfdGV4dHByaW50ZXJfaW5wdXQodXBiX3RleHRw
cmludGVyICpwKTsKLQotY29uc3QgdXBiX2hhbmRsZXJzICp1cGJfdGV4dHByaW50ZXJfbmV3aGFu
ZGxlcnMoY29uc3QgdXBiX21zZ2RlZiAqbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm93bmVyKTsKLQotVVBCX0VORF9FWFRFUk5f
QwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotbmFtZXNwYWNlIHVwYiB7Ci1uYW1lc3BhY2UgcGIg
ewotaW5saW5lIFRleHRQcmludGVyICpUZXh0UHJpbnRlcjo6Q3JlYXRlKEVudmlyb25tZW50ICpl
bnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiOjpI
YW5kbGVycyAqaGFuZGxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQnl0ZXNTaW5rICpvdXRwdXQpIHsKLSAgcmV0dXJuIHVwYl90ZXh0cHJpbnRlcl9jcmVhdGUo
ZW52LCBoYW5kbGVycywgb3V0cHV0KTsKLX0KLWlubGluZSB2b2lkIFRleHRQcmludGVyOjpTZXRT
aW5nbGVMaW5lTW9kZShib29sIHNpbmdsZV9saW5lKSB7Ci0gIHVwYl90ZXh0cHJpbnRlcl9zZXRz
aW5nbGVsaW5lKHRoaXMsIHNpbmdsZV9saW5lKTsKLX0KLWlubGluZSBTaW5rKiBUZXh0UHJpbnRl
cjo6aW5wdXQoKSB7Ci0gIHJldHVybiB1cGJfdGV4dHByaW50ZXJfaW5wdXQodGhpcyk7Ci19Ci1p
bmxpbmUgcmVmZmVkX3B0cjxjb25zdCBIYW5kbGVycz4gVGV4dFByaW50ZXI6Ok5ld0hhbmRsZXJz
KAotICAgIGNvbnN0IE1lc3NhZ2VEZWYgKm1kKSB7Ci0gIGNvbnN0IEhhbmRsZXJzKiBoID0gdXBi
X3RleHRwcmludGVyX25ld2hhbmRsZXJzKG1kLCAmaCk7Ci0gIHJldHVybiByZWZmZWRfcHRyPGNv
bnN0IEhhbmRsZXJzPihoLCAmaCk7Ci19Ci19ICAvKiBuYW1lc3BhY2UgcGIgKi8KLX0gIC8qIG5h
bWVzcGFjZSB1cGIgKi8KLQotI2VuZGlmCi0KLSNlbmRpZiAgLyogVVBCX1RFWFRfSF8gKi8KLS8q
Ci0qKiB1cGI6Ompzb246OlBhcnNlciAodXBiX2pzb25fcGFyc2VyKQotKioKLSoqIFBhcnNlcyBK
U09OIGFjY29yZGluZyB0byBhIHNwZWNpZmljIHNjaGVtYS4KLSoqIFN1cHBvcnQgZm9yIHBhcnNp
bmcgYXJiaXRyYXJ5IEpTT04gKHNjaGVtYS1sZXNzKSB3aWxsIGJlIGFkZGVkIGxhdGVyLgotKi8K
LQotI2lmbmRlZiBVUEJfSlNPTl9QQVJTRVJfSF8KLSNkZWZpbmUgVVBCX0pTT05fUEFSU0VSX0hf
Ci0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1uYW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBqc29u
IHsKLWNsYXNzIFBhcnNlcjsKLX0gIC8qIG5hbWVzcGFjZSBqc29uICovCi19ICAvKiBuYW1lc3Bh
Y2UgdXBiICovCi0jZW5kaWYKLQotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6Ompzb246OlBhcnNlciwg
dXBiX2pzb25fcGFyc2VyKQotCi0vKiB1cGI6Ompzb246OlBhcnNlciAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBQcmVhbGxv
Y2F0aW9uIGhpbnQ6IHBhcnNlciB3b24ndCBhbGxvY2F0ZSBtb3JlIGJ5dGVzIHRoYW4gdGhpcyB3
aGVuIGZpcnN0Ci0gKiBjb25zdHJ1Y3RlZC4gIFRoaXMgaGludCBtYXkgYmUgYW4gb3ZlcmVzdGlt
YXRlIGZvciBzb21lIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLgotICogQnV0IGlmIHRoZSBwYXJzZXIg
bGlicmFyeSBpcyB1cGdyYWRlZCB3aXRob3V0IHJlY29tcGlsaW5nIHRoZSBhcHBsaWNhdGlvbiwK
LSAqIGl0IG1heSBiZSBhbiB1bmRlcmVzdGltYXRlLiAqLwotI2RlZmluZSBVUEJfSlNPTl9QQVJT
RVJfU0laRSAzNzA0Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBQYXJzZXMgYW4gaW5jb21p
bmcgQnl0ZXNTdHJlYW0sIHB1c2hpbmcgdGhlIHJlc3VsdHMgdG8gdGhlIGRlc3RpbmF0aW9uCi0g
KiBzaW5rLiAqLwotY2xhc3MgdXBiOjpqc29uOjpQYXJzZXIgewotIHB1YmxpYzoKLSAgc3RhdGlj
IFBhcnNlciogQ3JlYXRlKEVudmlyb25tZW50KiBlbnYsIFNpbmsqIG91dHB1dCk7Ci0KLSAgQnl0
ZXNTaW5rKiBpbnB1dCgpOwotCi0gcHJpdmF0ZToKLSAgVVBCX0RJU0FMTE9XX1BPRF9PUFMoUGFy
c2VyLCB1cGI6Ompzb246OlBhcnNlcikKLX07Ci0KLSNlbmRpZgotCi1VUEJfQkVHSU5fRVhURVJO
X0MKLQotdXBiX2pzb25fcGFyc2VyICp1cGJfanNvbl9wYXJzZXJfY3JlYXRlKHVwYl9lbnYgKmUs
IHVwYl9zaW5rICpvdXRwdXQpOwotdXBiX2J5dGVzc2luayAqdXBiX2pzb25fcGFyc2VyX2lucHV0
KHVwYl9qc29uX3BhcnNlciAqcCk7Ci0KLVVQQl9FTkRfRVhURVJOX0MKLQotI2lmZGVmIF9fY3Bs
dXNwbHVzCi0KLW5hbWVzcGFjZSB1cGIgewotbmFtZXNwYWNlIGpzb24gewotaW5saW5lIFBhcnNl
ciogUGFyc2VyOjpDcmVhdGUoRW52aXJvbm1lbnQqIGVudiwgU2luayogb3V0cHV0KSB7Ci0gIHJl
dHVybiB1cGJfanNvbl9wYXJzZXJfY3JlYXRlKGVudiwgb3V0cHV0KTsKLX0KLWlubGluZSBCeXRl
c1NpbmsqIFBhcnNlcjo6aW5wdXQoKSB7Ci0gIHJldHVybiB1cGJfanNvbl9wYXJzZXJfaW5wdXQo
dGhpcyk7Ci19Ci19ICAvKiBuYW1lc3BhY2UganNvbiAqLwotfSAgLyogbmFtZXNwYWNlIHVwYiAq
LwotCi0jZW5kaWYKLQotCi0jZW5kaWYgIC8qIFVQQl9KU09OX1BBUlNFUl9IXyAqLwotLyoKLSoq
IHVwYjo6anNvbjo6UHJpbnRlcgotKioKLSoqIEhhbmRsZXJzIHRoYXQgZW1pdCBKU09OIGFjY29y
ZGluZyB0byBhIHNwZWNpZmljIHByb3RvYnVmIHNjaGVtYS4KLSovCi0KLSNpZm5kZWYgVVBCX0pT
T05fVFlQRURfUFJJTlRFUl9IXwotI2RlZmluZSBVUEJfSlNPTl9UWVBFRF9QUklOVEVSX0hfCi0K
LQotI2lmZGVmIF9fY3BsdXNwbHVzCi1uYW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBqc29uIHsK
LWNsYXNzIFByaW50ZXI7Ci19ICAvKiBuYW1lc3BhY2UganNvbiAqLwotfSAgLyogbmFtZXNwYWNl
IHVwYiAqLwotI2VuZGlmCi0KLVVQQl9ERUNMQVJFX1RZUEUodXBiOjpqc29uOjpQcmludGVyLCB1
cGJfanNvbl9wcmludGVyKQotCi0KLS8qIHVwYjo6anNvbjo6UHJpbnRlciAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUg
VVBCX0pTT05fUFJJTlRFUl9TSVpFIDE2OAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogUHJp
bnRzIGFuIGluY29taW5nIHN0cmVhbSBvZiBkYXRhIHRvIGEgQnl0ZXNTaW5rIGluIEpTT04gZm9y
bWF0LiAqLwotY2xhc3MgdXBiOjpqc29uOjpQcmludGVyIHsKLSBwdWJsaWM6Ci0gIHN0YXRpYyBQ
cmludGVyKiBDcmVhdGUoRW52aXJvbm1lbnQqIGVudiwgY29uc3QgdXBiOjpIYW5kbGVycyogaGFu
ZGxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZXNTaW5rKiBvdXRwdXQpOwotCi0g
IC8qIFRoZSBpbnB1dCB0byB0aGUgcHJpbnRlci4gKi8KLSAgU2luayogaW5wdXQoKTsKLQotICAv
KiBSZXR1cm5zIGhhbmRsZXJzIGZvciBwcmludGluZyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmll
ZCBzY2hlbWEuICovCi0gIHN0YXRpYyByZWZmZWRfcHRyPGNvbnN0IEhhbmRsZXJzPiBOZXdIYW5k
bGVycyhjb25zdCB1cGI6Ok1lc3NhZ2VEZWYqIG1kKTsKLQotICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGtTaXplID0gVVBCX0pTT05fUFJJTlRFUl9TSVpFOwotCi0gcHJpdmF0ZToKLSAgVVBCX0RJU0FM
TE9XX1BPRF9PUFMoUHJpbnRlciwgdXBiOjpqc29uOjpQcmludGVyKQotfTsKLQotI2VuZGlmCi0K
LVVQQl9CRUdJTl9FWFRFUk5fQwotCi0vKiBOYXRpdmUgQyBBUEkuICovCi11cGJfanNvbl9wcmlu
dGVyICp1cGJfanNvbl9wcmludGVyX2NyZWF0ZSh1cGJfZW52ICplLCBjb25zdCB1cGJfaGFuZGxl
cnMgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfYnl0
ZXNzaW5rICpvdXRwdXQpOwotdXBiX3NpbmsgKnVwYl9qc29uX3ByaW50ZXJfaW5wdXQodXBiX2pz
b25fcHJpbnRlciAqcCk7Ci1jb25zdCB1cGJfaGFuZGxlcnMgKnVwYl9qc29uX3ByaW50ZXJfbmV3
aGFuZGxlcnMoY29uc3QgdXBiX21zZ2RlZiAqbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3duZXIpOwotCi1VUEJfRU5EX0VY
VEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1uYW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFj
ZSBqc29uIHsKLWlubGluZSBQcmludGVyKiBQcmludGVyOjpDcmVhdGUoRW52aXJvbm1lbnQqIGVu
diwgY29uc3QgdXBiOjpIYW5kbGVycyogaGFuZGxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJ5dGVzU2luayogb3V0cHV0KSB7Ci0gIHJldHVybiB1cGJfanNvbl9wcmludGVy
X2NyZWF0ZShlbnYsIGhhbmRsZXJzLCBvdXRwdXQpOwotfQotaW5saW5lIFNpbmsqIFByaW50ZXI6
OmlucHV0KCkgeyByZXR1cm4gdXBiX2pzb25fcHJpbnRlcl9pbnB1dCh0aGlzKTsgfQotaW5saW5l
IHJlZmZlZF9wdHI8Y29uc3QgSGFuZGxlcnM+IFByaW50ZXI6Ok5ld0hhbmRsZXJzKAotICAgIGNv
bnN0IHVwYjo6TWVzc2FnZURlZiAqbWQpIHsKLSAgY29uc3QgSGFuZGxlcnMqIGggPSB1cGJfanNv
bl9wcmludGVyX25ld2hhbmRsZXJzKG1kLCAmaCk7Ci0gIHJldHVybiByZWZmZWRfcHRyPGNvbnN0
IEhhbmRsZXJzPihoLCAmaCk7Ci19Ci19ICAvKiBuYW1lc3BhY2UganNvbiAqLwotfSAgLyogbmFt
ZXNwYWNlIHVwYiAqLwotCi0jZW5kaWYKLQotI2VuZGlmICAvKiBVUEJfSlNPTl9UWVBFRF9QUklO
VEVSX0hfICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3BocC90ZXN0cy9hdXRvbG9hZC5waHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3BocC90ZXN0cy9h
dXRvbG9hZC5waHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmODhiYTAxNDk2ZWUy
NDE2NWM4OWNmMDZlYWFmZjNhMGY4MDk3ZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9waHAvdGVzdHMvYXV0b2xvYWQucGhwCisrKyAvZGV2L251bGwKQEAg
LTEsNCArMCwwIEBACi08P3BocAotCi1yZXF1aXJlX29uY2UoJ3Rlc3QucGIucGhwJyk7Ci1yZXF1
aXJlX29uY2UoJ3Rlc3RfdXRpbC5waHAnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcG9zdF9wcm9jZXNzX2Rpc3Qu
c2ggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3Bvc3RfcHJvY2Vzc19kaXN0LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4
MjczNmJkMGRlZmFmODAyYmI5NWM4OWNmYzIwYzJlYzhjYzkyMDhhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcG9zdF9wcm9jZXNzX2Rpc3Quc2gKKysrIC9k
ZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0jISAvYmluL3NoCi0KLSMgVGhpcyBzY3JpcHQgdGFr
ZXMgdGhlIHJlc3VsdCBvZiAibWFrZSBkaXN0IiBhbmQ6Ci0jIDEpIFVucGFja3MgaXQuCi0jIDIp
IEVuc3VyZXMgYWxsIGNvbnRlbnRzIGFyZSB1c2VyLXdyaXRhYmxlLiAgU29tZSB2ZXJzaW9uIGNv
bnRyb2wgc3lzdGVtcwotIyAgICBrZWVwIGNvZGUgcmVhZC1vbmx5IHVudGlsIHlvdSBleHBsaWNp
dGx5IGFzayB0byBlZGl0IGl0LCBhbmQgdGhlIG5vcm1hbAotIyAgICAibWFrZSBkaXN0IiBwcm9j
ZXNzIGRvZXMgbm90IGNvcnJlY3QgZm9yIHRoaXMsIHNvIHRoZSByZXN1bHQgaXMgdGhhdAotIyAg
ICB0aGUgZW50aXJlIGRpc3QgaXMgc3RpbGwgbWFya2VkIHJlYWQtb25seSB3aGVuIHVucGFja2Vk
LCB3aGljaCBpcwotIyAgICBhbm5veWluZy4gIFNvLCB3ZSBmaXggaXQuCi0jIDMpIENvbnZlcnQg
TVNWQyBwcm9qZWN0IGZpbGVzIHRvIE1TVkMgMjAwNSwgc28gdGhhdCBhbnlvbmUgd2hvIGhhcyB2
ZXJzaW9uCi0jICAgIDIwMDUgKm9yKiAyMDA4IGNhbiBvcGVuIHRoZW0uICAoSW4gdmVyc2lvbiBj
b250cm9sLCB3ZSBrZWVwIHRoaW5ncyBpbgotIyAgICBNU1ZDIDIwMDggZm9ybWF0IHNpbmNlIHRo
YXQncyB3aGF0IHdlIHVzZSBpbiBkZXZlbG9wbWVudC4pCi0jIDQpIFVzZXMgdGhlIHJlc3VsdCB0
byBjcmVhdGUgLnRhci5neiwgLnRhci5iejIsIGFuZCAuemlwIHZlcnNpb25zIGFuZAotIyAgICBk
ZXBvc2l0ZXMgdGhlbSBpbiB0aGUgImRpc3QiIGRpcmVjdG9yeS4gIEluIHRoZSAuemlwIHZlcnNp
b24sIGFsbAotIyAgICBub24tdGVzdGRhdGEgLnR4dCBmaWxlcyBhcmUgY29udmVydGVkIHRvIFdp
bmRvd3Mtc3R5bGUgbGluZSBlbmRpbmdzLgotIyA1KSBDbGVhbnMgdXAgYWZ0ZXIgaXRzZWxmLgot
Ci1pZiBbICIkMSIgPT0gIiIgXTsgdGhlbgotICBlY2hvICJVU0FHRTogICQwIERJU1RGSUxFIiA+
JjIKLSAgZXhpdCAxCi1maQotCi1pZiBbICEgLWUgJDEgXTsgdGhlbgotICBlY2hvICQxIjogRmls
ZSBub3QgZm91bmQuIiA+JjIKLSAgZXhpdCAxCi1maQotCi1zZXQgLWV4Ci0KLUxBTkdVQUdFUz0i
Y3BwIGNzaGFycCBqYXZhIGphdmFuYW5vIGpzIG9iamVjdGl2ZWMgcHl0aG9uIHJ1YnkiCi1CQVNF
TkFNRT1gYmFzZW5hbWUgJDEgLnRhci5nemAKLVZFUlNJT049JHtCQVNFTkFNRTo5fQotCi0jIENy
ZWF0ZSBhIGRpcmVjdG9yeSBjYWxsZWQgImRpc3QiLCBjb3B5IHRoZSB0YXJiYWxsIHRoZXJlIGFu
ZCB1bnBhY2sgaXQuCi1ta2RpciBkaXN0Ci1jcCAkMSBkaXN0Ci1jZCBkaXN0Ci10YXIgenh2ZiAk
QkFTRU5BTUUudGFyLmd6Ci1ybSAkQkFTRU5BTUUudGFyLmd6Ci0KLSMgU2V0IHRoZSBlbnRpcmUg
Y29udGVudHMgdG8gYmUgdXNlci13cml0YWJsZS4KLWNobW9kIC1SIHUrdyAkQkFTRU5BTUUKLWNk
ICRCQVNFTkFNRQotCi1mb3IgTEFORyBpbiAkTEFOR1VBR0VTOyBkbwotICAjIEJ1aWxkIHRoZSBk
aXN0IGFnYWluIGluIC50YXIuZ3oKLSAgLi9jb25maWd1cmUgRElTVF9MQU5HPSRMQU5HCi0gIG1h
a2UgZGlzdC1nemlwCi0gIG12ICRCQVNFTkFNRS50YXIuZ3ogLi4vcHJvdG9idWYtJExBTkctJFZF
UlNJT04udGFyLmd6Ci1kb25lCi0KLSMgQ29udmVydCBhbGwgdGV4dCBmaWxlcyB0byB1c2UgRE9T
LXN0eWxlIGxpbmUgZW5kaW5ncywgdGhlbiBidWlsZCBhIC56aXAKLSMgZGlzdHJpYnV0aW9uLgot
dG9kb3MgKi50eHQgKi8qLnR4dAotCi1mb3IgTEFORyBpbiAkTEFOR1VBR0VTOyBkbwotICAjIEJ1
aWxkIHRoZSBkaXN0IGFnYWluIGluIC56aXAKLSAgLi9jb25maWd1cmUgRElTVF9MQU5HPSRMQU5H
Ci0gIG1ha2UgZGlzdC16aXAKLSAgbXYgJEJBU0VOQU1FLnppcCAuLi9wcm90b2J1Zi0kTEFORy0k
VkVSU0lPTi56aXAKLWRvbmUKLQotY2QgLi4KLXJtIC1yZiAkQkFTRU5BTUUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
cHJvdG9fbGlicmFyeS5nbmkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvX2xpYnJhcnkuZ25pCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3MjNhMTUyOTBkOWRkYTRhOTdkNzIxZjc3NTFiMTc4MmVkODdlOWI4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHJvdG9fbGlicmFyeS5n
bmkKKysrIC9kZXYvbnVsbApAQCAtMSwzNjcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
IyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIENvbXBpbGUgYSBwcm90b2NvbCBidWZm
ZXIuCi0jCi0jIFByb3RvYnVmIHBhcmFtZXRlcnM6Ci0jCi0jICAgcHJvdG9faW5fZGlyIChvcHRp
b25hbCkKLSMgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50
IEJVSUxELmduIGZpbGUgd2hlcmUKLSMgICAgICAgcHJvdG8gZmlsZXMgYXJlIGxvY2F0ZWQgYW5k
IHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mCi0jICAgICAgIHRoaXMgcHJvdG8gbGlicmFyeSBz
dGFydHMuCi0jCi0jICAgICAgIFRoaXMgb3B0aW9uIGNhbiBiZSBjYWxjdWxhdGVkIGF1dG9tYXRp
Y2FsbHkgYnV0IGl0IHdpbGwgcmFpc2UgYW4KLSMgICAgICAgYXNzZXJ0aW9uIGVycm9yIGlmIGFu
eSBuZXN0ZWQgZGlyZWN0b3JpZXMgYXJlIGZvdW5kLgotIwotIyAgIHByb3RvX291dF9kaXIgKG9w
dGlvbmFsKQotIyAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggc3VmZml4IHRoYXQgb3V0cHV0IGZp
bGVzIGFyZSBnZW5lcmF0ZWQgdW5kZXIuCi0jICAgICAgIFRoaXMgcGF0aCB3aWxsIGJlIGFwcGVu
ZGVkIHRvIHxyb290X2dlbl9kaXJ8LCBidXQgZm9yIHB5dGhvbiBzdHVicwotIyAgICAgICBpdCB3
aWxsIGJlIGFwcGVuZGVkIHRvIHxyb290X2J1aWxkX2RpcnwvcHlwcm90by4KLSMKLSMgICBnZW5l
cmF0ZV9weXRob24gKG9wdGlvbmFsLCBkZWZhdWx0IHRydWUpCi0jICAgICAgIEdlbmVyYXRlIFB5
dGhvbiBwcm90b2J1ZiBzdHVicy4KLSMKLSMgICBnZW5lcmF0ZV9jYyAob3B0aW9uYWwsIGRlZmF1
bHQgdHJ1ZSkKLSMgICAgICAgR2VuZXJhdGUgQysrIHByb3RvYnVmIHN0dWJzLgotIwotIyAgIGNj
X2dlbmVyYXRvcl9vcHRpb25zIChvcHRpb25hbCkKLSMgICAgICAgTGlzdCBvZiBleHRyYSBmbGFn
cyBwYXNzZWQgdG8gdGhlIHByb3RvY29sIGNvbXBpbGVyLiAgSWYgeW91IG5lZWQgdG8KLSMgICAg
ICAgYWRkIGFuIEVYUE9SVCBtYWNybyB0byBhIHByb3RvYnVmJ3MgQysrIGhlYWRlciwgc2V0IHRo
ZQotIyAgICAgICAnY2NfZ2VuZXJhdG9yX29wdGlvbnMnIHZhcmlhYmxlIHdpdGggdGhlIHZhbHVl
OgotIyAgICAgICAnZGxsZXhwb3J0X2RlY2w9Rk9PX0VYUE9SVDonIChub3RlIHRyYWlsaW5nIGNv
bG9uKS4KLSMKLSMgICAgICAgSXQgaXMgbGlrZWx5IHlvdSBhbHNvIG5lZWQgdG8gI2luY2x1ZGUg
YSBmaWxlIGZvciB0aGUgYWJvdmUgRVhQT1JUCi0jICAgICAgIG1hY3JvIHRvIHdvcmsgKHNlZSBj
Y19pbmNsdWRlKSBhbmQgc2V0Ci0jICAgICAgIGNvbXBvbmVudF9idWlsZF9mb3JjZV9zb3VyY2Vf
c2V0ID0gdHJ1ZS4KLSMKLSMgICBjY19pbmNsdWRlIChvcHRpb25hbCkKLSMgICAgICAgU3RyaW5n
IGxpc3RpbmcgYW4gZXh0cmEgaW5jbHVkZSB0aGF0IHNob3VsZCBiZSBwYXNzZWQuCi0jICAgICAg
IEV4YW1wbGU6IGNjX2luY2x1ZGUgPSAiZm9vL2Jhci5oIgotIwotIyAgIGdlbmVyYXRvcl9wbHVn
aW5fbGFiZWwgKG9wdGlvbmFsKQotIyAgICAgICBHTiBsYWJlbCBmb3IgcGx1Z2luIGV4ZWN1dGFi
bGUgd2hpY2ggZ2VuZXJhdGVzIGN1c3RvbSBjYyBzdHVicy4KLSMgICAgICAgRG9uJ3Qgc3BlY2lm
eSBhIHRvb2xjaGFpbiwgaG9zdCB0b29sY2hhaW4gaXMgYXNzdW1lZC4KLSMKLSMgICBnZW5lcmF0
b3JfcGx1Z2luX3NjcmlwdCAob3B0aW9uYWwpCi0jICAgICAgIFBhdGggdG8gcGx1Z2luIHNjcmlw
dC4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggfGdlbmVyYXRvcl9wbHVnaW5fbGFiZWx8LgotIwot
IyAgIGdlbmVyYXRvcl9wbHVnaW5fc2NyaXB0X2RlcHMgKG9wdGlvbmFsKQotIyAgICAgICBMaXN0
IG9mIGFkZGl0aW9uYWwgZmlsZXMgcmVxdWlyZWQgZm9yIGdlbmVyYXRvciBwbHVnaW4gc2NyaXB0
LgotIwotIyAgIGdlbmVyYXRvcl9wbHVnaW5fc3VmZml4W2VzXSAocmVxdWlyZWQgaWYgdXNpbmcg
YSBwbHVnaW4pCi0jICAgICAgIFN1ZmZpeCAoYmVmb3JlIGV4dGVuc2lvbikgZm9yIGdlbmVyYXRl
ZCAuY2MgYW5kIC5oIGZpbGVzCi0jICAgICAgIG9yIGxpc3Qgb2Ygc3VmZml4ZXMgZm9yIGFsbCBm
aWxlcyAod2l0aCBleHRlbnNpb25zKS4KLSMKLSMgICBnZW5lcmF0b3JfcGx1Z2luX29wdGlvbnMg
KG9wdGlvbmFsKQotIyAgICAgICBFeHRyYSBmbGFncyBwYXNzZWQgdG8gdGhlIHBsdWdpbi4gU2Vl
IGNjX2dlbmVyYXRvcl9vcHRpb25zLgotIwotIyAgIGRlcHMgKG9wdGlvbmFsKQotIyAgICAgICBB
ZGRpdGlvbmFsIGRlcGVuZGVuY2llcy4KLSMKLSMgUGFyYW1ldGVycyBmb3IgY29tcGlsaW5nIHRo
ZSBnZW5lcmF0ZWQgY29kZToKLSMKLSMgICBjb21wb25lbnRfYnVpbGRfZm9yY2Vfc291cmNlX3Nl
dCAoRGVmYXVsdD1mYWxzZSkKLSMgICAgICAgV2hlbiBzZXQgdHJ1ZSB0aGUgZ2VuZXJhdGVkIGNv
ZGUgd2lsbCBiZSBjb21waWxlZCBhcyBhIHNvdXJjZSBzZXQgaW4KLSMgICAgICAgdGhlIGNvbXBv
bmVudCBidWlsZC4gVGhpcyBkb2VzIG5vdCBhZmZlY3Qgc3RhdGljIGJ1aWxkcy4gIElmIHlvdSBh
cmUKLSMgICAgICAgZXhwb3J0aW5nIHN5bWJvbHMgZnJvbSBhIGNvbXBvbmVudCwgdGhpcyBpcyBy
ZXF1aXJlZCB0byBwcmV2ZW50IHRob3NlCi0jICAgICAgIHN5bWJvbHMgZnJvbSBiZWluZyBzdHJp
cHBlZC4gSWYgeW91J3JlIG5vdCB1c2luZyBkbGxleHBvcnRzIGluCi0jICAgICAgIGNjX2dlbmVy
YXRvcl9vcHRpb25zLCBpdCdzIHVzdWFsbHkgYmVzdCB0byBsZWF2ZSB0aGlzIGZhbHNlLgotIwot
IyAgIGRlZmluZXMgKG9wdGlvbmFsKQotIyAgICAgICBEZWZpbmVzIHRvIHN1cHBseSB0byB0aGUg
c291cmNlIHNldCB0aGF0IGNvbXBpbGVzIHRoZSBnZW5lcmF0ZWQgc291cmNlCi0jICAgICAgIGNv
ZGUuCi0jCi0jICAgZXh0cmFfY29uZmlncyAob3B0aW9uYWwpCi0jICAgICAgIEEgbGlzdCBvZiBj
b25maWcgbGFiZWxzIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgY29uZmlncyBhcHBseWlu
ZwotIyAgICAgICB0byB0aGUgc291cmNlIHNldC4KLSMKLSMgRXhhbXBsZToKLSMgIHByb3RvX2xp
YnJhcnkoIm15bGliIikgewotIyAgICBzb3VyY2VzID0gWwotIyAgICAgICJmb28ucHJvdG8iLAot
IyAgICBdCi0jICB9Ci0KLXRlbXBsYXRlKCJwcm90b19saWJyYXJ5IikgewotICBhc3NlcnQoZGVm
aW5lZChpbnZva2VyLnNvdXJjZXMpLCAiTmVlZCBzb3VyY2VzIGZvciBwcm90b19saWJyYXJ5IikK
LSAgcHJvdG9fc291cmNlcyA9IGludm9rZXIuc291cmNlcwotCi0gICMgRG9uJ3QgYXBwbHkgT1Mt
c3BlY2lmaWMgc291cmNlcyBmaWx0ZXJpbmcgdG8gdGhlIGFzc2lnbm1lbnRzIGxhdGVyIG9uLgot
ICAjIFBsYXRmb3JtIGZpbGVzIHNob3VsZCBoYXZlIGdvdHRlbiBmaWx0ZXJlZCBvdXQgaW4gdGhl
IHNvdXJjZXMgYXNzaWdubWVudAotICAjIHdoZW4gdGhpcyB0ZW1wbGF0ZSB3YXMgaW52b2tlZC4g
SWYgdGhleSB3ZXJlbid0LCBpdCB3YXMgb24gcHVycG9zZSBhbmQKLSAgIyB0aGlzIHRlbXBsYXRl
IHNob3VsZG4ndCByZS1hcHBseSB0aGUgZmlsdGVyLgotICBzZXRfc291cmNlc19hc3NpZ25tZW50
X2ZpbHRlcihbXSkKLQotICBpZiAoaG9zdF9vcyA9PSAid2luIikgewotICAgIGhvc3RfZXhlY3V0
YWJsZV9zdWZmaXggPSAiLmV4ZSIKLSAgfSBlbHNlIHsKLSAgICBob3N0X2V4ZWN1dGFibGVfc3Vm
Zml4ID0gIiIKLSAgfQotCi0gIGlmIChkZWZpbmVkKGludm9rZXIuZ2VuZXJhdGVfY2MpKSB7Ci0g
ICAgZ2VuZXJhdGVfY2MgPSBpbnZva2VyLmdlbmVyYXRlX2NjCi0gIH0gZWxzZSB7Ci0gICAgZ2Vu
ZXJhdGVfY2MgPSB0cnVlCi0gIH0KLQotICBpZiAoZGVmaW5lZChpbnZva2VyLmdlbmVyYXRlX3B5
dGhvbikpIHsKLSAgICBnZW5lcmF0ZV9weXRob24gPSBpbnZva2VyLmdlbmVyYXRlX3B5dGhvbgot
ICB9IGVsc2UgewotICAgIGdlbmVyYXRlX3B5dGhvbiA9IHRydWUKLSAgfQotCi0gIGlmIChkZWZp
bmVkKGludm9rZXIuZ2VuZXJhdG9yX3BsdWdpbl9sYWJlbCkpIHsKLSAgICAjIFN0cmFpZ2h0Zm9y
d2FyZCB3YXkgdG8gZ2V0IHRoZSBuYW1lIG9mIGV4ZWN1dGFibGUgZG9lc24ndCB3b3JrIGJlY2F1
c2UKLSAgICAjIHxyb290X291dF9kaXJ8IGFuZCB8cm9vdF9idWlsZF9kaXJ8IG1heSBkaWZmZXIg
aW4gY3Jvc3MtY29tcGlsYXRpb24gYW5kCi0gICAgIyBhbHNvIFdpbmRvd3MgZXhlY3V0YWJsZXMg
aGF2ZSAuZXhlIGF0IHRoZSBlbmQuCi0KLSAgICBwbHVnaW5faG9zdF9sYWJlbCA9IGludm9rZXIu
Z2VuZXJhdG9yX3BsdWdpbl9sYWJlbCArICIoJGhvc3RfdG9vbGNoYWluKSIKLSAgICBwbHVnaW5f
cGF0aCA9IGdldF9sYWJlbF9pbmZvKHBsdWdpbl9ob3N0X2xhYmVsLCAicm9vdF9vdXRfZGlyIikg
KyAiLyIgKwotICAgICAgICAgICAgICAgICAgZ2V0X2xhYmVsX2luZm8ocGx1Z2luX2hvc3RfbGFi
ZWwsICJuYW1lIikgKwotICAgICAgICAgICAgICAgICAgaG9zdF9leGVjdXRhYmxlX3N1ZmZpeAot
ICAgIGdlbmVyYXRlX3dpdGhfcGx1Z2luID0gdHJ1ZQotICB9IGVsc2UgaWYgKGRlZmluZWQoaW52
b2tlci5nZW5lcmF0b3JfcGx1Z2luX3NjcmlwdCkpIHsKLSAgICBwbHVnaW5fcGF0aCA9IGludm9r
ZXIuZ2VuZXJhdG9yX3BsdWdpbl9zY3JpcHQKLSAgICBnZW5lcmF0ZV93aXRoX3BsdWdpbiA9IHRy
dWUKLSAgfSBlbHNlIHsKLSAgICBnZW5lcmF0ZV93aXRoX3BsdWdpbiA9IGZhbHNlCi0gIH0KLQot
ICBpZiAoZ2VuZXJhdGVfd2l0aF9wbHVnaW4pIHsKLSAgICBpZiAoZGVmaW5lZChpbnZva2VyLmdl
bmVyYXRvcl9wbHVnaW5fc3VmZml4KSkgewotICAgICAgZ2VuZXJhdG9yX3BsdWdpbl9zdWZmaXhl
cyA9IFsKLSAgICAgICAgIiR7aW52b2tlci5nZW5lcmF0b3JfcGx1Z2luX3N1ZmZpeH0uaCIsCi0g
ICAgICAgICIke2ludm9rZXIuZ2VuZXJhdG9yX3BsdWdpbl9zdWZmaXh9LmNjIiwKLSAgICAgIF0K
LSAgICB9IGVsc2UgewotICAgICAgZ2VuZXJhdG9yX3BsdWdpbl9zdWZmaXhlcyA9IGludm9rZXIu
Z2VuZXJhdG9yX3BsdWdpbl9zdWZmaXhlcwotICAgIH0KLSAgfQotCi0gIGlmIChkZWZpbmVkKGlu
dm9rZXIucHJvdG9faW5fZGlyKSkgewotICAgIHByb3RvX2luX2RpciA9IGludm9rZXIucHJvdG9f
aW5fZGlyCi0gICAgaGFzX25lc3RlZF9kaXJzID0gZmFsc2UKLSAgICBmb3JlYWNoKHByb3RvX3Nv
dXJjZSwgcHJvdG9fc291cmNlcykgewotICAgICAgaWYgKGdldF9wYXRoX2luZm8ocHJvdG9fc291
cmNlLCAiZGlyIikgIT0gcHJvdG9faW5fZGlyKSB7Ci0gICAgICAgIGhhc19uZXN0ZWRfZGlycyA9
IHRydWUKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgcHJvdG9faW5fZGlyID0gZ2V0
X3BhdGhfaW5mbyhwcm90b19zb3VyY2VzWzBdLCAiZGlyIikKLSAgICBoYXNfbmVzdGVkX2RpcnMg
PSBmYWxzZQotCi0gICAgIyBTYW5pdHkgY2hlY2ssIHxwcm90b19pbl9kaXJ8IHNob3VsZCBiZSBk
ZWZpbmVkIHRvIGFsbG93IHN1Yi1kaXJlY3Rvcmllcy4KLSAgICBmb3JlYWNoKHByb3RvX3NvdXJj
ZSwgcHJvdG9fc291cmNlcykgewotICAgICAgYXNzZXJ0KGdldF9wYXRoX2luZm8ocHJvdG9fc291
cmNlLCAiZGlyIikgPT0gcHJvdG9faW5fZGlyLAotICAgICAgICAgICAgICJQbGVhc2UgZGVmaW5l
IHxwcm90b19pbl9kaXJ8IHRvIGFsbG93IG5lc3RlZCBkaXJlY3Rvcmllcy4iKQotICAgIH0KLSAg
fQotCi0gICMgQXZvaWQgYWJzb2x1dGUgcGF0aCBiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRo
YXQgfHByb3RvX2luX2RpcnwgaXMKLSAgIyByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IG9mIGN1
cnJlbnQgQlVJTEQuZ24gZmlsZS4KLSAgcHJvdG9faW5fZGlyID0gcmViYXNlX3BhdGgocHJvdG9f
aW5fZGlyLCAiLiIpCi0KLSAgaWYgKGRlZmluZWQoaW52b2tlci5wcm90b19vdXRfZGlyKSkgewot
ICAgIHByb3RvX291dF9kaXIgPSBpbnZva2VyLnByb3RvX291dF9kaXIKLSAgfSBlbHNlIHsKLSAg
ICAjIEFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBvZiBjdXJyZW50IEJVSUxELmduIGZp
bGUgZXhjbHVkaW5nICIvLyIuCi0gICAgcHJvdG9fb3V0X2RpciA9IHJlYmFzZV9wYXRoKCIuIiwg
Ii8vIikKLSAgICBpZiAocHJvdG9faW5fZGlyICE9ICIuIikgewotICAgICAgcHJvdG9fb3V0X2Rp
ciArPSAiLyRwcm90b19pbl9kaXIiCi0gICAgfQotICB9Ci0KLSAgIyBXZSBuZWVkIGJvdGggYWJz
b2x1dGUgcGF0aCB0byB1c2UgaW4gR04gc3RhdGVtZW50cyBhbmQgYSByZWxhdGl2ZSBvbmUKLSAg
IyB0byBwYXNzIHRvIGV4dGVybmFsIHNjcmlwdC4KLSAgaWYgKGdlbmVyYXRlX2NjIHx8IGdlbmVy
YXRlX3dpdGhfcGx1Z2luKSB7Ci0gICAgY2Nfb3V0X2RpciA9ICIkcm9vdF9nZW5fZGlyLyIgKyBw
cm90b19vdXRfZGlyCi0gICAgcmVsX2NjX291dF9kaXIgPSByZWJhc2VfcGF0aChjY19vdXRfZGly
LCByb290X2J1aWxkX2RpcikKLSAgfQotICBpZiAoZ2VuZXJhdGVfcHl0aG9uKSB7Ci0gICAgcHlf
b3V0X2RpciA9ICIkcm9vdF9vdXRfZGlyL3B5cHJvdG8vIiArIHByb3RvX291dF9kaXIKLSAgICBy
ZWxfcHlfb3V0X2RpciA9IHJlYmFzZV9wYXRoKHB5X291dF9kaXIsIHJvb3RfYnVpbGRfZGlyKQot
ICB9Ci0KLSAgcHJvdG9zID0gcmViYXNlX3BhdGgoaW52b2tlci5zb3VyY2VzLCBwcm90b19pbl9k
aXIpCi0gIHByb3RvZ2VucyA9IFtdCi0KLSAgIyBMaXN0IG91dHB1dCBmaWxlcy4KLSAgZm9yZWFj
aChwcm90bywgcHJvdG9zKSB7Ci0gICAgcHJvdG9fZGlyID0gZ2V0X3BhdGhfaW5mbyhwcm90bywg
ImRpciIpCi0gICAgcHJvdG9fbmFtZSA9IGdldF9wYXRoX2luZm8ocHJvdG8sICJuYW1lIikKLSAg
ICBwcm90b19wYXRoID0gcHJvdG9fZGlyICsgIi8iICsgcHJvdG9fbmFtZQotCi0gICAgaWYgKGdl
bmVyYXRlX2NjKSB7Ci0gICAgICBwcm90b2dlbnMgKz0gWwotICAgICAgICAiJGNjX291dF9kaXIv
JHByb3RvX3BhdGgucGIuaCIsCi0gICAgICAgICIkY2Nfb3V0X2Rpci8kcHJvdG9fcGF0aC5wYi5j
YyIsCi0gICAgICBdCi0gICAgfQotICAgIGlmIChnZW5lcmF0ZV9weXRob24pIHsKLSAgICAgIHBy
b3RvZ2VucyArPSBbICIkcHlfb3V0X2Rpci8ke3Byb3RvX3BhdGh9X3BiMi5weSIgXQotICAgIH0K
LSAgICBpZiAoZ2VuZXJhdGVfd2l0aF9wbHVnaW4pIHsKLSAgICAgIGZvcmVhY2goc3VmZml4LCBn
ZW5lcmF0b3JfcGx1Z2luX3N1ZmZpeGVzKSB7Ci0gICAgICAgIHByb3RvZ2VucyArPSBbICIkY2Nf
b3V0X2Rpci8ke3Byb3RvX3BhdGh9JHtzdWZmaXh9IiBdCi0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSAgYWN0aW9uX25hbWUgPSAiJHt0YXJnZXRfbmFtZX1fZ2VuIgotICBzb3VyY2Vfc2V0X25hbWUg
PSB0YXJnZXRfbmFtZQotCi0gICMgR2VuZXJhdGUgcHJvdG9idWYgc3R1YnMuCi0gIGFjdGlvbihh
Y3Rpb25fbmFtZSkgewotICAgIHZpc2liaWxpdHkgPSBbICI6JHNvdXJjZV9zZXRfbmFtZSIgXQot
ICAgIHNjcmlwdCA9ICIvL3Rvb2xzL3Byb3RvY193cmFwcGVyL3Byb3RvY193cmFwcGVyLnB5Igot
ICAgIHNvdXJjZXMgPSBwcm90b19zb3VyY2VzCi0gICAgb3V0cHV0cyA9IGdldF9wYXRoX2luZm8o
cHJvdG9nZW5zLCAiYWJzcGF0aCIpCi0gICAgYXJncyA9IHByb3RvcwotCi0gICAgcHJvdG9jX2xh
YmVsID0gIi8vdGhpcmRfcGFydHkvcHJvdG9idWY6cHJvdG9jKCRob3N0X3Rvb2xjaGFpbikiCi0g
ICAgcHJvdG9jX3BhdGggPSBnZXRfbGFiZWxfaW5mbyhwcm90b2NfbGFiZWwsICJyb290X291dF9k
aXIiKSArICIvcHJvdG9jIiArCi0gICAgICAgICAgICAgICAgICBob3N0X2V4ZWN1dGFibGVfc3Vm
Zml4Ci0gICAgYXJncyArPSBbCi0gICAgICAjIFdyYXBwZXIgc2hvdWxkIG5ldmVyIHBpY2sgYSBz
eXN0ZW0gcHJvdG9jLgotICAgICAgIyBQYXRoIHNob3VsZCBiZSByZWJhc2VkIGJlY2F1c2UgfHJv
b3RfYnVpbGRfZGlyfCBmb3IgY3VycmVudCB0b29sY2hhaW4KLSAgICAgICMgbWF5IGJlIGRpZmZl
cmVudCBmcm9tIHxyb290X291dF9kaXJ8IG9mIHByb3RvYyBidWlsdCBvbiBob3N0IHRvb2xjaGFp
bi4KLSAgICAgICItLXByb3RvYyIsCi0gICAgICAiLi8iICsgcmViYXNlX3BhdGgocHJvdG9jX3Bh
dGgsIHJvb3RfYnVpbGRfZGlyKSwKLSAgICAgICItLXByb3RvLWluLWRpciIsCi0gICAgICByZWJh
c2VfcGF0aChwcm90b19pbl9kaXIsIHJvb3RfYnVpbGRfZGlyKSwKLSAgICBdCi0KLSAgICBpZiAo
Z2VuZXJhdGVfY2MpIHsKLSAgICAgIGFyZ3MgKz0gWwotICAgICAgICAiLS1jYy1vdXQtZGlyIiwK
LSAgICAgICAgcmVsX2NjX291dF9kaXIsCi0gICAgICBdCi0gICAgICBpZiAoZGVmaW5lZChpbnZv
a2VyLmNjX2dlbmVyYXRvcl9vcHRpb25zKSkgewotICAgICAgICBhcmdzICs9IFsKLSAgICAgICAg
ICAiLS1jYy1vcHRpb25zIiwKLSAgICAgICAgICBpbnZva2VyLmNjX2dlbmVyYXRvcl9vcHRpb25z
LAotICAgICAgICBdCi0gICAgICB9Ci0gICAgICBpZiAoZGVmaW5lZChpbnZva2VyLmNjX2luY2x1
ZGUpKSB7Ci0gICAgICAgIGFyZ3MgKz0gWwotICAgICAgICAgICItLWluY2x1ZGUiLAotICAgICAg
ICAgIGludm9rZXIuY2NfaW5jbHVkZSwKLSAgICAgICAgXQotICAgICAgfQotICAgIH0KLQotICAg
IGlmIChnZW5lcmF0ZV9weXRob24pIHsKLSAgICAgIGFyZ3MgKz0gWwotICAgICAgICAiLS1weS1v
dXQtZGlyIiwKLSAgICAgICAgcmVsX3B5X291dF9kaXIsCi0gICAgICBdCi0gICAgfQotCi0gICAg
aWYgKGdlbmVyYXRlX3dpdGhfcGx1Z2luKSB7Ci0gICAgICBhcmdzICs9IFsKLSAgICAgICAgIi0t
cGx1Z2luIiwKLSAgICAgICAgcmViYXNlX3BhdGgocGx1Z2luX3BhdGgsIHJvb3RfYnVpbGRfZGly
KSwKLSAgICAgICAgIi0tcGx1Z2luLW91dC1kaXIiLAotICAgICAgICByZWxfY2Nfb3V0X2RpciwK
LSAgICAgIF0KLSAgICAgIGlmIChkZWZpbmVkKGludm9rZXIuZ2VuZXJhdG9yX3BsdWdpbl9vcHRp
b25zKSkgewotICAgICAgICBhcmdzICs9IFsKLSAgICAgICAgICAiLS1wbHVnaW4tb3B0aW9ucyIs
Ci0gICAgICAgICAgaW52b2tlci5nZW5lcmF0b3JfcGx1Z2luX29wdGlvbnMsCi0gICAgICAgIF0K
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAjIFN5c3RlbSBwcm90b2MgaXMgbm90IHVzZWQgc28gaXQn
cyBuZWNlc3NhcnkgdG8gYnVpbGQgYSBjaHJvbWl1bSBvbmUuCi0gICAgaW5wdXRzID0gWwotICAg
ICAgcHJvdG9jX3BhdGgsCi0gICAgXQotICAgIGRlcHMgPSBbCi0gICAgICBwcm90b2NfbGFiZWws
Ci0gICAgXQotCi0gICAgaWYgKGdlbmVyYXRlX3dpdGhfcGx1Z2luKSB7Ci0gICAgICBpbnB1dHMg
Kz0gWyBwbHVnaW5fcGF0aCBdCi0gICAgICBpZiAoZGVmaW5lZChpbnZva2VyLmdlbmVyYXRvcl9w
bHVnaW5fc2NyaXB0X2RlcHMpKSB7Ci0gICAgICAgICMgQWRkaXRpb25hbCBzY3JpcHRzIGZvciBw
bHVnaW4uCi0gICAgICAgIGlucHV0cyArPSBpbnZva2VyLmdlbmVyYXRvcl9wbHVnaW5fc2NyaXB0
X2RlcHMKLSAgICAgIH0KLSAgICAgIGlmIChkZWZpbmVkKHBsdWdpbl9ob3N0X2xhYmVsKSkgewot
ICAgICAgICAjIEFjdGlvbiBkZXBlbmRzIG9uIG5hdGl2ZSBnZW5lcmF0b3IgcGx1Z2luIGJ1dCBm
b3IgaG9zdCB0b29sY2hhaW4gb25seS4KLSAgICAgICAgZGVwcyArPSBbIHBsdWdpbl9ob3N0X2xh
YmVsIF0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGVmaW5lZChpbnZva2VyLmRlcHMpKSB7
Ci0gICAgICAjIFRoZSBkZXBzIG1heSBoYXZlIHN0ZXBzIHRoYXQgaGF2ZSB0byBydW4gYmVmb3Jl
IHJ1bm5pbmcgcHJvdG9jLgotICAgICAgZGVwcyArPSBpbnZva2VyLmRlcHMKLSAgICB9Ci0gIH0K
LQotICAjIE9wdGlvbiB0byBkaXNhYmxlIGJ1aWxkaW5nIGEgbGlicmFyeSBpbiBjb21wb25lbnQg
YnVpbGQuCi0gIGlmIChkZWZpbmVkKGludm9rZXIuY29tcG9uZW50X2J1aWxkX2ZvcmNlX3NvdXJj
ZV9zZXQpICYmCi0gICAgICBpbnZva2VyLmNvbXBvbmVudF9idWlsZF9mb3JjZV9zb3VyY2Vfc2V0
ICYmCi0gICAgICBpc19jb21wb25lbnRfYnVpbGQpIHsKLSAgICBsaW5rX3RhcmdldF90eXBlID0g
InNvdXJjZV9zZXQiCi0gIH0gZWxzZSB7Ci0gICAgbGlua190YXJnZXRfdHlwZSA9ICJzdGF0aWNf
bGlicmFyeSIKLSAgfQotCi0gICMgR2VuZXJhdGVkIGZpbGVzIG1heSBpbmNsdWRlIG90aGVyIGdl
bmVyYXRlZCBoZWFkZXJzLiBUaGVzZSBpbmNsdWRlcyBhbHdheXMKLSAgIyB1c2UgcmVsYXRpdmUg
cGF0aHMgc3RhcnRpbmcgYXQgfGNjX291dF9kaXJ8LgotICAjIEhvd2V2ZXIgdGhlcmUgaXMgbm8g
bmVjZXNzaXR5IHRvIGFkZCBhbiBhZGRpdGlvbmFsIGRpcmVjdG9yeSwgaWYgYWxsIHByb3Rvcwot
ICAjIGFyZSBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3aGljaCBpcyBpbiB0aGUgc2Vh
cmNoIHBhdGggYnkgZGVmYXVsdC4KLSAgaWYgKGhhc19uZXN0ZWRfZGlycykgewotICAgIGNvbmZp
Z19uYW1lID0gIiR7dGFyZ2V0X25hbWV9X2NvbmZpZyIKLSAgICBjb25maWcoY29uZmlnX25hbWUp
IHsKLSAgICAgIGluY2x1ZGVfZGlycyA9IFsgY2Nfb3V0X2RpciBdCi0gICAgfQotICB9Ci0KLSAg
IyBCdWlsZCBnZW5lcmF0ZWQgcHJvdG9idWYgc3R1YnMgYXMgbGliYXJ5IG9yIHNvdXJjZSBzZXQu
Ci0gIHRhcmdldChsaW5rX3RhcmdldF90eXBlLCB0YXJnZXRfbmFtZSkgewotICAgIGZvcndhcmRf
dmFyaWFibGVzX2Zyb20oaW52b2tlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGVzdG9ubHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlz
aWJpbGl0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBdKQotCi0gICAgc291cmNlcyA9
IGdldF90YXJnZXRfb3V0cHV0cygiOiRhY3Rpb25fbmFtZSIpCi0KLSAgICBpZiAoZGVmaW5lZChp
bnZva2VyLmV4dHJhX2NvbmZpZ3MpKSB7Ci0gICAgICBjb25maWdzICs9IGludm9rZXIuZXh0cmFf
Y29uZmlncwotICAgIH0KLQotICAgIHB1YmxpY19jb25maWdzID0gWyAiLy90aGlyZF9wYXJ0eS9w
cm90b2J1Zjp1c2luZ19wcm90byIgXQotCi0gICAgaWYgKGdlbmVyYXRlX2NjIHx8IGdlbmVyYXRl
X3dpdGhfcGx1Z2luKSB7Ci0gICAgICAjIE5vdCBuZWNlc3NhcnkgaWYgYWxsIHByb3RvcyBhcmUg
bG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCi0gICAgICBpZiAoaGFzX25lc3RlZF9kaXJz
KSB7Ci0gICAgICAgICMgSXQncyBub3QgZW5vdWdoIHRvIHNldCB8aW5jbHVkZV9kaXJzfCBmb3Ig
dGFyZ2V0IHNpbmNlIHB1YmxpYyBpbXBvcnRzCi0gICAgICAgICMgZXhwb3NlIGNvcnJlc3BvbmRp
bmcgaW5jbHVkZXMgdG8gaGVhZGVyIGZpbGVzIGFzIHdlbGwuCi0gICAgICAgIHB1YmxpY19jb25m
aWdzICs9IFsgIjokY29uZmlnX25hbWUiIF0KLSAgICAgIH0KLQotICAgICAgIyBJZiB1c2luZyBi
dWlsdC1pbiBjYyBnZW5lcmF0b3IsIHRoZSByZXN1bHRpbmcgaGVhZGVycyByZWZlcmVuY2UgaGVh
ZGVycwotICAgICAgIyB3aXRoaW4gcHJvdG9idWZfbGl0ZS4gSGVuY2UsIGRlcGVuZGVuY2llcyBy
ZXF1aXJlIHRob3NlIGhlYWRlcnMgdG9vLgotICAgICAgIyBJZiB1c2luZyBnZW5lcmF0b3IgcGx1
Z2luLCBleHRyYSBkZXBzIHNob3VsZCBiZSByZXNvbHZlZCBieSB0aGUgaW52b2tlci4KLSAgICAg
IGlmIChnZW5lcmF0ZV9jYykgewotICAgICAgICBwdWJsaWNfZGVwcyA9IFsKLSAgICAgICAgICAi
Ly90aGlyZF9wYXJ0eS9wcm90b2J1Zjpwcm90b2J1Zl9saXRlIiwKLSAgICAgICAgXQotICAgICAg
fQotICAgIH0KLQotICAgIGRlcHMgPSBbCi0gICAgICAiOiRhY3Rpb25fbmFtZSIsCi0gICAgXQot
Ci0gICAgIyBUaGlzIHdpbGwgbGluayBhbnkgbGlicmFyaWVzIGluIHRoZSBkZXBzICh0aGUgdXNl
IG9mIGludm9rZXIuZGVwcyBpbiB0aGUKLSAgICAjIGFjdGlvbiB3b24ndCBsaW5rIGl0KS4KLSAg
ICBpZiAoZGVmaW5lZChpbnZva2VyLmRlcHMpKSB7Ci0gICAgICBkZXBzICs9IGludm9rZXIuZGVw
cwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1Zi1saXRlLnBjLmluIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1
Zi1saXRlLnBjLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYxZjQ2MTk1NGU4
YTgzNTIxODVhZWJmYzU1NWY1YjA5Nzc0MjQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvcHJvdG9idWYtbGl0ZS5wYy5pbgorKysgL2Rldi9udWxsCkBAIC0x
LDExICswLDAgQEAKLXByZWZpeD1AcHJlZml4QAotZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAot
bGliZGlyPUBsaWJkaXJACi1pbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAotCi1OYW1lOiBQcm90b2Nv
bCBCdWZmZXJzCi1EZXNjcmlwdGlvbjogR29vZ2xlJ3MgRGF0YSBJbnRlcmNoYW5nZSBGb3JtYXQK
LVZlcnNpb246IEBWRVJTSU9OQAotTGliczogLUwke2xpYmRpcn0gLWxwcm90b2J1Zi1saXRlIEBQ
VEhSRUFEX0NGTEFHU0AgQFBUSFJFQURfTElCU0AKLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBQ
VEhSRUFEX0NGTEFHU0AKLUNvbmZsaWN0czogcHJvdG9idWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHJvdG9idWYu
YnpsIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9wcm90b2J1Zi5iemwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiY2FlMGIz
MjQyZjgxZGZjOWNiNThjZTA5MDcxNGRhZmEzNjkzNWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1Zi5iemwKKysrIC9kZXYvbnVsbApAQCAtMSwz
MDQgKzAsMCBAQAotIyAtKi0gbW9kZTogcHl0aG9uOyAtKi0gUFlUSE9OLVBSRVBST0NFU1NJTkct
UkVRVUlSRUQKLQotZGVmIF9HZXRQYXRoKGN0eCwgcGF0aCk6Ci0gIGlmIGN0eC5sYWJlbC53b3Jr
c3BhY2Vfcm9vdDoKLSAgICByZXR1cm4gY3R4LmxhYmVsLndvcmtzcGFjZV9yb290ICsgJy8nICsg
cGF0aAotICBlbHNlOgotICAgIHJldHVybiBwYXRoCi0KLWRlZiBfR2VuRGlyKGN0eCk6Ci0gIGlm
IG5vdCBjdHguYXR0ci5pbmNsdWRlczoKLSAgICByZXR1cm4gY3R4LmxhYmVsLndvcmtzcGFjZV9y
b290Ci0gIGlmIG5vdCBjdHguYXR0ci5pbmNsdWRlc1swXToKLSAgICByZXR1cm4gX0dldFBhdGgo
Y3R4LCBjdHgubGFiZWwucGFja2FnZSkKLSAgaWYgbm90IGN0eC5sYWJlbC5wYWNrYWdlOgotICAg
IHJldHVybiBfR2V0UGF0aChjdHgsIGN0eC5hdHRyLmluY2x1ZGVzWzBdKQotICByZXR1cm4gX0dl
dFBhdGgoY3R4LCBjdHgubGFiZWwucGFja2FnZSArICcvJyArIGN0eC5hdHRyLmluY2x1ZGVzWzBd
KQotCi1kZWYgX0NjT3V0cyhzcmNzLCB1c2VfZ3JwY19wbHVnaW49RmFsc2UpOgotICByZXQgPSBb
c1s6LWxlbigiLnByb3RvIildICsgIi5wYi5oIiBmb3IgcyBpbiBzcmNzXSArIFwKLSAgICAgICAg
W3NbOi1sZW4oIi5wcm90byIpXSArICIucGIuY2MiIGZvciBzIGluIHNyY3NdCi0gIGlmIHVzZV9n
cnBjX3BsdWdpbjoKLSAgICByZXQgKz0gW3NbOi1sZW4oIi5wcm90byIpXSArICIuZ3JwYy5wYi5o
IiBmb3IgcyBpbiBzcmNzXSArIFwKLSAgICAgICAgICAgW3NbOi1sZW4oIi5wcm90byIpXSArICIu
Z3JwYy5wYi5jYyIgZm9yIHMgaW4gc3Jjc10KLSAgcmV0dXJuIHJldAotCi1kZWYgX1B5T3V0cyhz
cmNzKToKLSAgcmV0dXJuIFtzWzotbGVuKCIucHJvdG8iKV0gKyAiX3BiMi5weSIgZm9yIHMgaW4g
c3Jjc10KLQotZGVmIF9SZWxhdGl2ZU91dHB1dFBhdGgocGF0aCwgaW5jbHVkZSk6Ci0gIGlmIGlu
Y2x1ZGUgPT0gTm9uZToKLSAgICByZXR1cm4gcGF0aAotCi0gIGlmIG5vdCBwYXRoLnN0YXJ0c3dp
dGgoaW5jbHVkZSk6Ci0gICAgZmFpbCgiSW5jbHVkZSBwYXRoICVzIGlzbid0IHBhcnQgb2YgdGhl
IHBhdGggJXMuIiAlIChpbmNsdWRlLCBwYXRoKSkKLQotICBpZiBpbmNsdWRlIGFuZCBpbmNsdWRl
Wy0xXSAhPSAnLyc6Ci0gICAgaW5jbHVkZSA9IGluY2x1ZGUgKyAnLycKLQotICBwYXRoID0gcGF0
aFtsZW4oaW5jbHVkZSk6XQotCi0gIGlmIG5vdCBwYXRoLnN0YXJ0c3dpdGgoUEFDS0FHRV9OQU1F
KToKLSAgICBmYWlsKCJUaGUgcGFja2FnZSAlcyBpcyBub3Qgd2l0aGluIHRoZSBwYXRoICVzIiAl
IChQQUNLQUdFX05BTUUsIHBhdGgpKQotCi0gIGlmIG5vdCBQQUNLQUdFX05BTUU6Ci0gICAgcmV0
dXJuIHBhdGgKLQotICByZXR1cm4gcGF0aFtsZW4oUEFDS0FHRV9OQU1FKSsxOl0KLQotZGVmIF9w
cm90b19nZW5faW1wbChjdHgpOgotICAiIiJHZW5lcmFsIGltcGxlbWVudGF0aW9uIGZvciBnZW5l
cmF0aW5nIHByb3RvcyIiIgotICBzcmNzID0gY3R4LmZpbGVzLnNyY3MKLSAgZGVwcyA9IFtdCi0g
IGRlcHMgKz0gY3R4LmZpbGVzLnNyY3MKLSAgZ2VuX2RpciA9IF9HZW5EaXIoY3R4KQotICBpZiBn
ZW5fZGlyOgotICAgIGltcG9ydF9mbGFncyA9IFsiLUkiICsgZ2VuX2Rpcl0KLSAgZWxzZToKLSAg
ICBpbXBvcnRfZmxhZ3MgPSBbIi1JLiJdCi0KLSAgZm9yIGRlcCBpbiBjdHguYXR0ci5kZXBzOgot
ICAgIGltcG9ydF9mbGFncyArPSBkZXAucHJvdG8uaW1wb3J0X2ZsYWdzCi0gICAgZGVwcyArPSBk
ZXAucHJvdG8uZGVwcwotCi0gIGFyZ3MgPSBbXQotICBpZiBjdHguYXR0ci5nZW5fY2M6Ci0gICAg
YXJncyArPSBbIi0tY3BwX291dD0iICsgY3R4LnZhclsiR0VORElSIl0gKyAiLyIgKyBnZW5fZGly
XQotICBpZiBjdHguYXR0ci5nZW5fcHk6Ci0gICAgYXJncyArPSBbIi0tcHl0aG9uX291dD0iICsg
Y3R4LnZhclsiR0VORElSIl0gKyAiLyIgKyBnZW5fZGlyXQotCi0gIGlmIGN0eC5leGVjdXRhYmxl
LmdycGNfY3BwX3BsdWdpbjoKLSAgICBhcmdzICs9IFsiLS1wbHVnaW49cHJvdG9jLWdlbi1ncnBj
PSIgKyBjdHguZXhlY3V0YWJsZS5ncnBjX2NwcF9wbHVnaW4ucGF0aF0KLSAgICBhcmdzICs9IFsi
LS1ncnBjX291dD0iICsgY3R4LnZhclsiR0VORElSIl0gKyAiLyIgKyBnZW5fZGlyXQotCi0gIGlm
IGFyZ3M6Ci0gICAgY3R4LmFjdGlvbigKLSAgICAgICAgaW5wdXRzPXNyY3MgKyBkZXBzLAotICAg
ICAgICBvdXRwdXRzPWN0eC5vdXRwdXRzLm91dHMsCi0gICAgICAgIGFyZ3VtZW50cz1hcmdzICsg
aW1wb3J0X2ZsYWdzICsgW3MucGF0aCBmb3IgcyBpbiBzcmNzXSwKLSAgICAgICAgZXhlY3V0YWJs
ZT1jdHguZXhlY3V0YWJsZS5wcm90b2MsCi0gICAgKQotCi0gIHJldHVybiBzdHJ1Y3QoCi0gICAg
ICBwcm90bz1zdHJ1Y3QoCi0gICAgICAgICAgc3Jjcz1zcmNzLAotICAgICAgICAgIGltcG9ydF9m
bGFncz1pbXBvcnRfZmxhZ3MsCi0gICAgICAgICAgZGVwcz1kZXBzLAotICAgICAgKSwKLSAgKQot
Ci1fcHJvdG9fZ2VuID0gcnVsZSgKLSAgICBhdHRycyA9IHsKLSAgICAgICAgInNyY3MiOiBhdHRy
LmxhYmVsX2xpc3QoYWxsb3dfZmlsZXMgPSBUcnVlKSwKLSAgICAgICAgImRlcHMiOiBhdHRyLmxh
YmVsX2xpc3QocHJvdmlkZXJzID0gWyJwcm90byJdKSwKLSAgICAgICAgImluY2x1ZGVzIjogYXR0
ci5zdHJpbmdfbGlzdCgpLAotICAgICAgICAicHJvdG9jIjogYXR0ci5sYWJlbCgKLSAgICAgICAg
ICAgIGNmZyA9IEhPU1RfQ0ZHLAotICAgICAgICAgICAgZXhlY3V0YWJsZSA9IFRydWUsCi0gICAg
ICAgICAgICBzaW5nbGVfZmlsZSA9IFRydWUsCi0gICAgICAgICAgICBtYW5kYXRvcnkgPSBUcnVl
LAotICAgICAgICApLAotICAgICAgICAiZ3JwY19jcHBfcGx1Z2luIjogYXR0ci5sYWJlbCgKLSAg
ICAgICAgICAgIGNmZyA9IEhPU1RfQ0ZHLAotICAgICAgICAgICAgZXhlY3V0YWJsZSA9IFRydWUs
Ci0gICAgICAgICAgICBzaW5nbGVfZmlsZSA9IFRydWUsCi0gICAgICAgICksCi0gICAgICAgICJn
ZW5fY2MiOiBhdHRyLmJvb2woKSwKLSAgICAgICAgImdlbl9weSI6IGF0dHIuYm9vbCgpLAotICAg
ICAgICAib3V0cyI6IGF0dHIub3V0cHV0X2xpc3QoKSwKLSAgICB9LAotICAgIG91dHB1dF90b19n
ZW5maWxlcyA9IFRydWUsCi0gICAgaW1wbGVtZW50YXRpb24gPSBfcHJvdG9fZ2VuX2ltcGwsCi0p
Ci0KLWRlZiBjY19wcm90b19saWJyYXJ5KAotICAgICAgICBuYW1lLAotICAgICAgICBzcmNzPVtd
LAotICAgICAgICBkZXBzPVtdLAotICAgICAgICBjY19saWJzPVtdLAotICAgICAgICBpbmNsdWRl
PU5vbmUsCi0gICAgICAgIHByb3RvYz0iLy86cHJvdG9jIiwKLSAgICAgICAgaW50ZXJuYWxfYm9v
dHN0cmFwX2hhY2s9RmFsc2UsCi0gICAgICAgIHVzZV9ncnBjX3BsdWdpbj1GYWxzZSwKLSAgICAg
ICAgZGVmYXVsdF9ydW50aW1lPSIvLzpwcm90b2J1ZiIsCi0gICAgICAgICoqa2FyZ3MpOgotICAi
IiJCYXplbCBydWxlIHRvIGNyZWF0ZSBhIEMrKyBwcm90b2J1ZiBsaWJyYXJ5IGZyb20gcHJvdG8g
c291cmNlIGZpbGVzCi0KLSAgTk9URTogdGhlIHJ1bGUgaXMgb25seSBhbiBpbnRlcm5hbCB3b3Jr
YXJvdW5kIHRvIGdlbmVyYXRlIHByb3Rvcy4gVGhlCi0gIGludGVyZmFjZSBtYXkgY2hhbmdlIGFu
ZCB0aGUgcnVsZSBtYXkgYmUgcmVtb3ZlZCB3aGVuIGJhemVsIGhhcyBpbnRyb2R1Y2VkCi0gIHRo
ZSBuYXRpdmUgcnVsZS4KLQotICBBcmdzOgotICAgIG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBjY19w
cm90b19saWJyYXJ5LgotICAgIHNyY3M6IHRoZSAucHJvdG8gZmlsZXMgb2YgdGhlIGNjX3Byb3Rv
X2xpYnJhcnkuCi0gICAgZGVwczogYSBsaXN0IG9mIGRlcGVuZGVuY3kgbGFiZWxzOyBtdXN0IGJl
IGNjX3Byb3RvX2xpYnJhcnkuCi0gICAgY2NfbGliczogYSBsaXN0IG9mIG90aGVyIGNjX2xpYnJh
cnkgdGFyZ2V0cyBkZXBlbmRlZCBieSB0aGUgZ2VuZXJhdGVkCi0gICAgICAgIGNjX2xpYnJhcnku
Ci0gICAgaW5jbHVkZTogYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgaW5jbHVkZSBwYXRoIG9mIHRo
ZSAucHJvdG8gZmlsZXMuCi0gICAgcHJvdG9jOiB0aGUgbGFiZWwgb2YgdGhlIHByb3RvY29sIGNv
bXBpbGVyIHRvIGdlbmVyYXRlIHRoZSBzb3VyY2VzLgotICAgIGludGVybmFsX2Jvb3RzdHJhcF9o
YWNrOiBhIGZsYWcgaW5kaWNhdGUgdGhlIGNjX3Byb3RvX2xpYnJhcnkgaXMgdXNlZCBvbmx5Ci0g
ICAgICAgIGZvciBib290c3RyYXBpbmcuIFdoZW4gaXQgaXMgc2V0IHRvIFRydWUsIG5vIGZpbGVz
IHdpbGwgYmUgZ2VuZXJhdGVkLgotICAgICAgICBUaGUgcnVsZSB3aWxsIHNpbXBseSBiZSBhIHBy
b3ZpZGVyIGZvciAucHJvdG8gZmlsZXMsIHNvIHRoYXQgb3RoZXIKLSAgICAgICAgY2NfcHJvdG9f
bGlicmFyeSBjYW4gZGVwZW5kIG9uIGl0LgotICAgIHVzZV9ncnBjX3BsdWdpbjogYSBmbGFnIHRv
IGluZGljYXRlIHdoZXRoZXIgdG8gY2FsbCB0aGUgZ3JwYyBDKysgcGx1Z2luCi0gICAgICAgIHdo
ZW4gcHJvY2Vzc2luZyB0aGUgcHJvdG8gZmlsZXMuCi0gICAgZGVmYXVsdF9ydW50aW1lOiB0aGUg
aW1wbGljaXRseSBkZWZhdWx0IHJ1bnRpbWUgd2hpY2ggd2lsbCBiZSBkZXBlbmRlZCBvbiBieQot
ICAgICAgICB0aGUgZ2VuZXJhdGVkIGNjX2xpYnJhcnkgdGFyZ2V0LgotICAgICoqa2FyZ3M6IG90
aGVyIGtleXdvcmQgYXJndW1lbnRzIHRoYXQgYXJlIHBhc3NlZCB0byBjY19saWJyYXJ5LgotCi0g
ICIiIgotCi0gIGluY2x1ZGVzID0gW10KLSAgaWYgaW5jbHVkZSAhPSBOb25lOgotICAgIGluY2x1
ZGVzID0gW2luY2x1ZGVdCi0KLSAgaWYgaW50ZXJuYWxfYm9vdHN0cmFwX2hhY2s6Ci0gICAgIyBG
b3IgcHJlLWNoZWNrZWQtaW4gZ2VuZXJhdGVkIGZpbGVzLCB3ZSBhZGQgdGhlIGludGVybmFsX2Jv
b3RzdHJhcF9oYWNrCi0gICAgIyB3aGljaCB3aWxsIHNraXAgdGhlIGNvZGVnZW4gYWN0aW9uLgot
ICAgIF9wcm90b19nZW4oCi0gICAgICAgIG5hbWU9bmFtZSArICJfZ2VucHJvdG8iLAotICAgICAg
ICBzcmNzPXNyY3MsCi0gICAgICAgIGRlcHM9W3MgKyAiX2dlbnByb3RvIiBmb3IgcyBpbiBkZXBz
XSwKLSAgICAgICAgaW5jbHVkZXM9aW5jbHVkZXMsCi0gICAgICAgIHByb3RvYz1wcm90b2MsCi0g
ICAgICAgIHZpc2liaWxpdHk9WyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCi0gICAgKQotICAgICMg
QW4gZW1wdHkgY2NfbGlicmFyeSB0byBtYWtlIHJ1bGUgZGVwZW5kZW5jeSBjb25zaXN0ZW50Lgot
ICAgIG5hdGl2ZS5jY19saWJyYXJ5KAotICAgICAgICBuYW1lPW5hbWUsCi0gICAgICAgICoqa2Fy
Z3MpCi0gICAgcmV0dXJuCi0KLSAgZ3JwY19jcHBfcGx1Z2luID0gTm9uZQotICBpZiB1c2VfZ3Jw
Y19wbHVnaW46Ci0gICAgZ3JwY19jcHBfcGx1Z2luID0gIi8vZXh0ZXJuYWw6Z3JwY19jcHBfcGx1
Z2luIgotCi0gIG91dHMgPSBfQ2NPdXRzKHNyY3MsIHVzZV9ncnBjX3BsdWdpbikKLQotICBfcHJv
dG9fZ2VuKAotICAgICAgbmFtZT1uYW1lICsgIl9nZW5wcm90byIsCi0gICAgICBzcmNzPXNyY3Ms
Ci0gICAgICBkZXBzPVtzICsgIl9nZW5wcm90byIgZm9yIHMgaW4gZGVwc10sCi0gICAgICBpbmNs
dWRlcz1pbmNsdWRlcywKLSAgICAgIHByb3RvYz1wcm90b2MsCi0gICAgICBncnBjX2NwcF9wbHVn
aW49Z3JwY19jcHBfcGx1Z2luLAotICAgICAgZ2VuX2NjPTEsCi0gICAgICBvdXRzPW91dHMsCi0g
ICAgICB2aXNpYmlsaXR5PVsiLy92aXNpYmlsaXR5OnB1YmxpYyJdLAotICApCi0KLSAgaWYgZGVm
YXVsdF9ydW50aW1lIGFuZCBub3QgZGVmYXVsdF9ydW50aW1lIGluIGNjX2xpYnM6Ci0gICAgY2Nf
bGlicyArPSBbZGVmYXVsdF9ydW50aW1lXQotICBpZiB1c2VfZ3JwY19wbHVnaW46Ci0gICAgY2Nf
bGlicyArPSBbIi8vZXh0ZXJuYWw6Z3JwY19saWIiXQotCi0gIG5hdGl2ZS5jY19saWJyYXJ5KAot
ICAgICAgbmFtZT1uYW1lLAotICAgICAgc3Jjcz1vdXRzLAotICAgICAgZGVwcz1jY19saWJzICsg
ZGVwcywKLSAgICAgIGluY2x1ZGVzPWluY2x1ZGVzLAotICAgICAgKiprYXJncykKLQotCi1kZWYg
aW50ZXJuYWxfZ2VuX3dlbGxfa25vd25fcHJvdG9zX2phdmEoc3Jjcyk6Ci0gICIiIkJhemVsIHJ1
bGUgdG8gZ2VuZXJhdGUgdGhlIGdlbl93ZWxsX2tub3duX3Byb3Rvc19qYXZhIGdlbnJ1bGUKLQot
ICBBcmdzOgotICAgIHNyY3M6IHRoZSB3ZWxsIGtub3duIHByb3RvcwotICAiIiIKLSAgcm9vdCA9
IExhYmVsKCIlcy8vcHJvdG9idWZfamF2YSIgJSAoUkVQT1NJVE9SWV9OQU1FKSkud29ya3NwYWNl
X3Jvb3QKLSAgaWYgcm9vdCA9PSAiIjoKLSAgICBpbmNsdWRlID0gIiAtSXNyYyAiCi0gIGVsc2U6
Ci0gICAgaW5jbHVkZSA9ICIgLUklcy9zcmMgIiAlIHJvb3QKLSAgbmF0aXZlLmdlbnJ1bGUoCi0g
ICAgbmFtZSA9ICJnZW5fd2VsbF9rbm93bl9wcm90b3NfamF2YSIsCi0gICAgc3JjcyA9IHNyY3Ms
Ci0gICAgb3V0cyA9IFsKLSAgICAgICAgIndlbGxrbm93bi5zcmNqYXIiLAotICAgIF0sCi0gICAg
Y21kID0gIiQobG9jYXRpb24gOnByb3RvYykgLS1qYXZhX291dD0kKEBEKS93ZWxsa25vd24uamFy
IiArCi0gICAgICAgICAgIiAlcyAkKFNSQ1MpICIgJSBpbmNsdWRlICsKLSAgICAgICAgICAiICYm
IG12ICQoQEQpL3dlbGxrbm93bi5qYXIgJChARCkvd2VsbGtub3duLnNyY2phciIsCi0gICAgdG9v
bHMgPSBbIjpwcm90b2MiXSwKLSAgKQotCi0KLWRlZiBweV9wcm90b19saWJyYXJ5KAotICAgICAg
ICBuYW1lLAotICAgICAgICBzcmNzPVtdLAotICAgICAgICBkZXBzPVtdLAotICAgICAgICBweV9s
aWJzPVtdLAotICAgICAgICBweV9leHRyYV9zcmNzPVtdLAotICAgICAgICBpbmNsdWRlPU5vbmUs
Ci0gICAgICAgIGRlZmF1bHRfcnVudGltZT0iLy86cHJvdG9idWZfcHl0aG9uIiwKLSAgICAgICAg
cHJvdG9jPSIvLzpwcm90b2MiLAotICAgICAgICAqKmthcmdzKToKLSAgIiIiQmF6ZWwgcnVsZSB0
byBjcmVhdGUgYSBQeXRob24gcHJvdG9idWYgbGlicmFyeSBmcm9tIHByb3RvIHNvdXJjZSBmaWxl
cwotCi0gIE5PVEU6IHRoZSBydWxlIGlzIG9ubHkgYW4gaW50ZXJuYWwgd29ya2Fyb3VuZCB0byBn
ZW5lcmF0ZSBwcm90b3MuIFRoZQotICBpbnRlcmZhY2UgbWF5IGNoYW5nZSBhbmQgdGhlIHJ1bGUg
bWF5IGJlIHJlbW92ZWQgd2hlbiBiYXplbCBoYXMgaW50cm9kdWNlZAotICB0aGUgbmF0aXZlIHJ1
bGUuCi0KLSAgQXJnczoKLSAgICBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgcHlfcHJvdG9fbGlicmFy
eS4KLSAgICBzcmNzOiB0aGUgLnByb3RvIGZpbGVzIG9mIHRoZSBweV9wcm90b19saWJyYXJ5Lgot
ICAgIGRlcHM6IGEgbGlzdCBvZiBkZXBlbmRlbmN5IGxhYmVsczsgbXVzdCBiZSBweV9wcm90b19s
aWJyYXJ5LgotICAgIHB5X2xpYnM6IGEgbGlzdCBvZiBvdGhlciBweV9saWJyYXJ5IHRhcmdldHMg
ZGVwZW5kZWQgYnkgdGhlIGdlbmVyYXRlZAotICAgICAgICBweV9saWJyYXJ5LgotICAgIHB5X2V4
dHJhX3NyY3M6IGV4dHJhIHNvdXJjZSBmaWxlcyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIG91
dHB1dAotICAgICAgICBweV9saWJyYXJ5LiBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGZvciBpbnRl
cm5hbCBib290c3RyYXBwaW5nLgotICAgIGluY2x1ZGU6IGEgc3RyaW5nIGluZGljYXRpbmcgdGhl
IGluY2x1ZGUgcGF0aCBvZiB0aGUgLnByb3RvIGZpbGVzLgotICAgIGRlZmF1bHRfcnVudGltZTog
dGhlIGltcGxpY2l0bHkgZGVmYXVsdCBydW50aW1lIHdoaWNoIHdpbGwgYmUgZGVwZW5kZWQgb24g
YnkKLSAgICAgICAgdGhlIGdlbmVyYXRlZCBweV9saWJyYXJ5IHRhcmdldC4KLSAgICBwcm90b2M6
IHRoZSBsYWJlbCBvZiB0aGUgcHJvdG9jb2wgY29tcGlsZXIgdG8gZ2VuZXJhdGUgdGhlIHNvdXJj
ZXMuCi0gICAgKiprYXJnczogb3RoZXIga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgcGFzc2Vk
IHRvIGNjX2xpYnJhcnkuCi0KLSAgIiIiCi0gIG91dHMgPSBfUHlPdXRzKHNyY3MpCi0KLSAgaW5j
bHVkZXMgPSBbXQotICBpZiBpbmNsdWRlICE9IE5vbmU6Ci0gICAgaW5jbHVkZXMgPSBbaW5jbHVk
ZV0KLQotICBfcHJvdG9fZ2VuKAotICAgICAgbmFtZT1uYW1lICsgIl9nZW5wcm90byIsCi0gICAg
ICBzcmNzPXNyY3MsCi0gICAgICBkZXBzPVtzICsgIl9nZW5wcm90byIgZm9yIHMgaW4gZGVwc10s
Ci0gICAgICBpbmNsdWRlcz1pbmNsdWRlcywKLSAgICAgIHByb3RvYz1wcm90b2MsCi0gICAgICBn
ZW5fcHk9MSwKLSAgICAgIG91dHM9b3V0cywKLSAgICAgIHZpc2liaWxpdHk9WyIvL3Zpc2liaWxp
dHk6cHVibGljIl0sCi0gICkKLQotICBpZiBkZWZhdWx0X3J1bnRpbWUgYW5kIG5vdCBkZWZhdWx0
X3J1bnRpbWUgaW4gcHlfbGlicyArIGRlcHM6Ci0gICAgcHlfbGlicyArPSBbZGVmYXVsdF9ydW50
aW1lXQotCi0gIG5hdGl2ZS5weV9saWJyYXJ5KAotICAgICAgbmFtZT1uYW1lLAotICAgICAgc3Jj
cz1vdXRzK3B5X2V4dHJhX3NyY3MsCi0gICAgICBkZXBzPXB5X2xpYnMrZGVwcywKLSAgICAgIGlt
cG9ydHM9aW5jbHVkZXMsCi0gICAgICAqKmthcmdzKQotCi1kZWYgaW50ZXJuYWxfcHJvdG9idWZf
cHlfdGVzdHMoCi0gICAgbmFtZSwKLSAgICBtb2R1bGVzPVtdLAotICAgICoqa2FyZ3MpOgotICAi
IiJCYXplbCBydWxlcyB0byBjcmVhdGUgYmF0Y2ggdGVzdHMgZm9yIHByb3RvYnVmIGludGVybmFs
LgotCi0gIEFyZ3M6Ci0gICAgbmFtZTogdGhlIG5hbWUgb2YgdGhlIHJ1bGUuCi0gICAgbW9kdWxl
czogYSBsaXN0IG9mIG1vZHVsZXMgZm9yIHRlc3RzLiBUaGUgbWFjcm8gd2lsbCBjcmVhdGUgYSBw
eV90ZXN0IGZvcgotICAgICAgICBlYWNoIG9mIHRoZSBwYXJhbWV0ZXIgd2l0aCB0aGUgc291cmNl
ICJnb29nbGUvcHJvdG9idWYvJXMucHkiCi0gICAga2FyZ3M6IGV4dHJhIHBhcmFtZXRlcnMgdGhh
dCB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZSBweV90ZXN0LgotCi0gICIiIgotICBmb3IgbSBpbiBt
b2R1bGVzOgotICAgIHMgPSAicHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC8lcy5weSIg
JSBtCi0gICAgbmF0aXZlLnB5X3Rlc3QoCi0gICAgICAgIG5hbWU9InB5XyVzIiAlIG0sCi0gICAg
ICAgIHNyY3M9W3NdLAotICAgICAgICBtYWluPXMsCi0gICAgICAgICoqa2FyZ3MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3Byb3RvYnVmLnBjLmluIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1Zi5wYy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDkwMTQ5MDM0ZDY2OThmZGMwMzQwZjY5MjEyNTM3MTBhNzAyNjMxOS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYnVmLnBjLmluCisr
KyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotcHJlZml4PUBwcmVmaXhACi1leGVjX3ByZWZp
eD1AZXhlY19wcmVmaXhACi1saWJkaXI9QGxpYmRpckAKLWluY2x1ZGVkaXI9QGluY2x1ZGVkaXJA
Ci0KLU5hbWU6IFByb3RvY29sIEJ1ZmZlcnMKLURlc2NyaXB0aW9uOiBHb29nbGUncyBEYXRhIElu
dGVyY2hhbmdlIEZvcm1hdAotVmVyc2lvbjogQFZFUlNJT05ACi1MaWJzOiAtTCR7bGliZGlyfSAt
bHByb3RvYnVmIEBQVEhSRUFEX0NGTEFHU0AgQFBUSFJFQURfTElCU0AKLUxpYnMucHJpdmF0ZTog
QExJQlNACi1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAUFRIUkVBRF9DRkxBR1NACi1Db25mbGlj
dHM6IHByb3RvYnVmLWxpdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHJvdG9jLWFydGlmYWN0cy9Eb2NrZXJmaWxl
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9wcm90b2MtYXJ0aWZhY3RzL0RvY2tlcmZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGZkMzViODlmZWFlZGFkOGM4YTFiZTJhMTI5YjI2MzExYThmZmIzZDQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2MtYXJ0aWZhY3RzL0RvY2tl
cmZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1GUk9NIGNlbnRvczo2LjYKLQot
UlVOIHl1bSBpbnN0YWxsIC15IGdpdCBcCi0gICAgICAgICAgICAgICAgICAgdGFyIFwKLSAgICAg
ICAgICAgICAgICAgICB3Z2V0IFwKLSAgICAgICAgICAgICAgICAgICBtYWtlIFwKLSAgICAgICAg
ICAgICAgICAgICBhdXRvY29uZiBcCi0gICAgICAgICAgICAgICAgICAgY3VybC1kZXZlbCBcCi0g
ICAgICAgICAgICAgICAgICAgdW56aXAgXAotICAgICAgICAgICAgICAgICAgIGF1dG9tYWtlIFwK
LSAgICAgICAgICAgICAgICAgICBsaWJ0b29sIFwKLSAgICAgICAgICAgICAgICAgICBnbGliYy1z
dGF0aWMuaTY4NiBcCi0gICAgICAgICAgICAgICAgICAgZ2xpYmMtZGV2ZWwgXAotICAgICAgICAg
ICAgICAgICAgIGdsaWJjLWRldmVsLmk2ODYKLQotIyBJbnN0YWxsIEphdmEgOAotUlVOIHdnZXQg
LXEgLS1uby1jb29raWVzIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgXAotICAgIC0taGVhZGVyICJD
b29raWU6IGdwd19lMjQ9aHR0cCUzQSUyRiUyRnd3dy5vcmFjbGUuY29tJTJGOyBvcmFjbGVsaWNl
bnNlPWFjY2VwdC1zZWN1cmViYWNrdXAtY29va2llIiAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5j
b20vb3RuLXB1Yi9qYXZhL2pkay84dTQ1LWIxNC9qZGstOHU0NS1saW51eC14NjQudGFyLmd6IiBc
Ci0gICAgLU8gLSB8IHRhciB4eiAtQyAvdmFyL2xvY2FsCi1FTlYgSkFWQV9IT01FIC92YXIvbG9j
YWwvamRrMS44LjBfNDUKLUVOViBQQVRIICRKQVZBX0hPTUUvYmluOiRQQVRICi0KLSMgSW5zdGFs
bCBNYXZlbgotUlVOIHdnZXQgLXEgaHR0cDovL2FwYWNoZS5jcy51dGFoLmVkdS9tYXZlbi9tYXZl
bi0zLzMuMy4zL2JpbmFyaWVzL2FwYWNoZS1tYXZlbi0zLjMuMy1iaW4udGFyLmd6IC1PIC0gfCBc
Ci0gICAgdGFyIHh6IC1DIC92YXIvbG9jYWwKLUVOViBQQVRIIC92YXIvbG9jYWwvYXBhY2hlLW1h
dmVuLTMuMy4zL2JpbjokUEFUSAotCi0jIEluc3RhbGwgR0NDIDQuNyB0byBzdXBwb3J0IC1zdGF0
aWMtbGlic3RkYysrCi1SVU4gd2dldCBodHRwOi8vcGVvcGxlLmNlbnRvcy5vcmcvdHJ1L2RldnRv
b2xzLTEuMS9kZXZ0b29scy0xLjEucmVwbyAtUCAvZXRjL3l1bS5yZXBvcy5kCi1SVU4gYmFzaCAt
YyAnZWNobyAiZW5hYmxlZD0xIiA+PiAvZXRjL3l1bS5yZXBvcy5kL2RldnRvb2xzLTEuMS5yZXBv
JwotUlVOIGJhc2ggLWMgInNlZCAtZSAncy9cJGJhc2VhcmNoL2kzODYvZycgL2V0Yy95dW0ucmVw
b3MuZC9kZXZ0b29scy0xLjEucmVwbyA+IC9ldGMveXVtLnJlcG9zLmQvZGV2dG9vbHMtaTM4Ni0x
LjEucmVwbyIKLVJVTiBzZWQgLWUgJ3MvdGVzdGluZy0vdGVzdGluZy1pMzg2LS9nJyAtaSAvZXRj
L3l1bS5yZXBvcy5kL2RldnRvb2xzLWkzODYtMS4xLnJlcG8KLVJVTiB5dW0gaW5zdGFsbCAteSBk
ZXZ0b29sc2V0LTEuMSBcCi0gICAgICAgICAgICAgICAgICAgZGV2dG9vbHNldC0xLjEtbGlic3Rk
YysrLWRldmVsIFwKLSAgICAgICAgICAgICAgICAgICBkZXZ0b29sc2V0LTEuMS1saWJzdGRjKyst
ZGV2ZWwuaTY4NgotCi1SVU4gZ2l0IGNsb25lIC0tZGVwdGggMSBodHRwczovL2dpdGh1Yi5jb20v
Z29vZ2xlL3Byb3RvYnVmLmdpdAotCi0jIFN0YXJ0IGluIGRldnRvb2xzZXQgZW52aXJvbm1lbnQg
dGhhdCB1c2VzIEdDQyA0LjcKLUNNRCBbInNjbCIsICJlbmFibGUiLCAiZGV2dG9vbHNldC0xLjEi
LCAiYmFzaCJdCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYy1hcnRpZmFjdHMvUkVBRE1FLm1kIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2Mt
YXJ0aWZhY3RzL1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMyMGY2
NTE2ZDVlMzc4NTgzOWZjNzkxNDQ4OTE1Yjk4OGE4MTJkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYy1hcnRpZmFjdHMvUkVBRE1FLm1kCisrKyAv
ZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLSMgQnVpbGQgc2NyaXB0cyB0aGF0IHB1Ymxpc2gg
cHJlLWNvbXBpbGVkIHByb3RvYyBhcnRpZmFjdHMKLWBgcHJvdG9jYGAgaXMgdGhlIGNvbXBpbGVy
IGZvciBgYC5wcm90b2BgIGZpbGVzLiBJdCBnZW5lcmF0ZXMgbGFuZ3VhZ2UgYmluZGluZ3MKLWZv
ciB0aGUgbWVzc2FnZXMgYW5kL29yIFJQQyBzZXJ2aWNlcyBmcm9tIGBgLnByb3RvYGAgZmlsZXMu
Ci0KLUJlY2F1c2UgYGBwcm90b2NgYCBpcyBhIG5hdGl2ZSBleGVjdXRhYmxlLCB0aGUgc2NyaXB0
cyB1bmRlciB0aGlzIGRpcmVjdG9yeQotYnVpbGQgYW5kIHB1Ymxpc2ggYSBgYHByb3RvY2BgIGV4
ZWN1dGFibGUgKGEuay5hLiBhcnRpZmFjdCkgdG8gTWF2ZW4KLXJlcG9zaXRvcmllcy4gVGhlIGFy
dGlmYWN0IGNhbiBiZSB1c2VkIGJ5IGJ1aWxkIGF1dG9tYXRpb24gdG9vbHMgc28gdGhhdCB1c2Vy
cwotd291bGQgbm90IG5lZWQgdG8gY29tcGlsZSBhbmQgaW5zdGFsbCBgYHByb3RvY2BgIGZvciB0
aGVpciBzeXN0ZW1zLgotCi0jIyBWZXJzaW9uaW5nCi1UaGUgdmVyc2lvbiBvZiB0aGUgYGBwcm90
b2NgYCBhcnRpZmFjdCBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSB2ZXJzaW9uIG9mIHRoZQotUHJv
dG9idWYgcHJvamVjdC4KLQotIyMgQXJ0aWZhY3QgbmFtZQotVGhlIG5hbWUgb2YgYSBwdWJsaXNo
ZWQgYGBwcm90b2NgYCBhcnRpZmFjdCBpcyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLWBgcHJv
dG9jLTx2ZXJzaW9uPi08b3M+LTxhcmNoPi5leGVgYCwgZS5nLiwgYGBwcm90b2MtMy4wLjAtYWxw
aGEtMy13aW5kb3dzLXg4Nl82NC5leGVgYC4KLQotIyMgU3lzdGVtIHJlcXVpcmVtZW50Ci1JbnN0
YWxsIFtBcGFjaGUgTWF2ZW5dKGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLykgaWYgeW91IGRvbid0
IGhhdmUgaXQuCi0KLVRoZSBzY3JpcHRzIG9ubHkgd29yayB1bmRlciBVbml4LWxpa2UgZW52aXJv
bm1lbnRzLCBlLmcuLCBMaW51eCwgTWFjT1NYLCBhbmQKLUN5Z3dpbiBvciBNaW5HVyBmb3IgV2lu
ZG93cy4gUGxlYXNlIHNlZSBgYFJFQURNRS5tZGBgIG9mIHRoZSBQcm90b2J1ZiBwcm9qZWN0Ci1m
b3IgaG93IHRvIHNldCB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCi0KLSMjIFRvIGluc3RhbGwg
YXJ0aWZhY3RzIGxvY2FsbHkKLVRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIGluc3RhbGwgdGhl
IGBgcHJvdG9jYGAgYXJ0aWZhY3QgdG8geW91ciBsb2NhbCBNYXZlbiByZXBvc2l0b3J5LgotYGBg
Ci0kIG12biBpbnN0YWxsCi1gYGAKLQotIyMgQ3Jvc3MtY29tcGlsYXRpb24KLVRoZSBNYXZlbiBz
Y3JpcHQgd2lsbCB0cnkgdG8gZGV0ZWN0IHRoZSBPUyBhbmQgdGhlIGFyY2hpdGVjdHVyZSBmcm9t
IEphdmEKLXN5c3RlbSBwcm9wZXJ0aWVzLiBJdCdzIHBvc3NpYmxlIHRvIGJ1aWxkIGEgcHJvdG9j
IGJpbmFyeSBmb3IgYW4gYXJjaGl0ZWN0dXJlCi10aGF0IGlzIGRpZmZlcmVudCBmcm9tIHdoYXQg
SmF2YSBoYXMgZGV0ZWN0ZWQsIGFzIGxvbmcgYXMgeW91IGhhdmUgdGhlIHByb3BlcgotY29tcGls
ZXJzIGluc3RhbGxlZC4KLQotWW91IGNhbiBvdmVycmlkZSB0aGUgTWF2ZW4gcHJvcGVydGllcyBg
YG9zLmRldGVjdGVkLm5hbWVgYCBhbmQKLWBgb3MuZGV0ZWN0ZWQuYXJjaGBgIHRvIGZvcmNlIHRo
ZSBzY3JpcHQgdG8gZ2VuZXJhdGUgYmluYXJpZXMgZm9yIGEgc3BlY2lmaWMgT1MKLWFuZC9vciBh
cmNoaXRlY3R1cmUuIFZhbGlkIHZhbHVlcyBhcmUgZGVmaW5lZCBhcyB0aGUgcmV0dXJuIHZhbHVl
cyBvZgotYGBub3JtYWxpemVPcygpYGAgYW5kIGBgbm9ybWFsaXplQXJjaCgpYGAgb2YgYGBEZXRl
Y3RvcmBgIGZyb20KLVtvcy1tYXZlbi1wbHVnaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS90cnVzdGlu
L29zLW1hdmVuLXBsdWdpbi9ibG9iL21hc3Rlci9zcmMvbWFpbi9qYXZhL2tyL21vdGQvbWF2ZW4v
b3MvRGV0ZWN0b3IuamF2YSkuCi1GcmVxdWVudGx5IHVzZWQgdmFsdWVzIGFyZToKLS0gYGBvcy5k
ZXRlY3RlZC5uYW1lYGA6IGBgbGludXhgYCwgYGBvc3hgYCwgYGB3aW5kb3dzYGAuCi0tIGBgb3Mu
ZGV0ZWN0ZWQuYXJjaGBgOiBgYHg4Nl8zMmBgLCBgYHg4Nl82NGBgCi0KLUZvciBleGFtcGxlLCBN
aW5nR1czMiBvbmx5IHNoaXBzIHdpdGggMzItYml0IGNvbXBpbGVycywgYnV0IHlvdSBjYW4gc3Rp
bGwgYnVpbGQKLTMyLWJpdCBwcm90b2MgdW5kZXIgNjQtYml0IFdpbmRvd3MsIHdpdGggdGhlIGZv
bGxvd2luZyBjb21tYW5kOgotYGBgCi0kIG12biBpbnN0YWxsIC1Eb3MuZGV0ZWN0ZWQuYXJjaD14
ODZfMzIKLWBgYAotCi0jIyBUbyBwdXNoIGFydGlmYWN0cyB0byBNYXZlbiBDZW50cmFsCi1CZWZv
cmUgeW91IGNhbiB1cGxvYWQgYXJ0aWZhY3RzIHRvIE1hdmVuIENlbnRyYWwgcmVwb3NpdG9yeSwg
bWFrZSBzdXJlIHlvdSBoYXZlCi1yZWFkIFt0aGlzIHBhZ2VdKGh0dHA6Ly9jZW50cmFsLnNvbmF0
eXBlLm9yZy9wYWdlcy9hcGFjaGUtbWF2ZW4uaHRtbCkgb24gaG93IHRvCi1jb25maWd1cmUgR1BH
IGFuZCBTb25hdHlwZSBhY2NvdW50LgotCi1Zb3UgbmVlZCB0byBwZXJmb3JtIHRoZSBkZXBsb3lt
ZW50IGZvciBldmVyeSBwbGF0Zm9ybSB0aGF0IHlvdSB3YW50IHRvCi1zdXBwb3J0LiBETyBOT1Qg
Y2xvc2UgdGhlIHN0YWdpbmcgcmVwb3NpdG9yeSB1bnRpbCB5b3UgaGF2ZSBkb25lIHRoZQotZGVw
bG95bWVudCBmb3IgYWxsIHBsYXRmb3Jtcy4gQ3VycmVudGx5IHRoZSBmb2xsb3dpbmcgcGxhdGZv
cm1zIGFyZSBzdXBwb3J0ZWQ6Ci0tIExpbnV4ICh4ODZfMzIgYW5kIHg4Nl82NCkKLS0gV2luZG93
cyAoeDg2XzMyIGFuZCB4ODZfNjQpIHdpdGgKLSAtIEN5Z3dpbiB3aXRoIE1pbkdXIGNvbXBpbGVy
cyAoYm90aCB4ODZfMzIgYW5kIHg4Nl82NCkKLSAtIE1TWVMgd2l0aCBNaW5HVzMyICh4ODZfMzIg
b25seSkKLS0gTWFjT1NYICh4ODZfMzIgYW5kIHg4Nl82NCkKLQotVXNlIHRoZSBmb2xsb3dpbmcg
Y29tbWFuZCB0byBkZXBsb3kgYXJ0aWZhY3RzIGZvciB0aGUgaG9zdCBwbGF0Zm9ybSB0byBhCi1z
dGFnaW5nIHJlcG9zaXRvcnkuCi1gYGAKLSQgbXZuIGNsZWFuIGRlcGxveSAtUCByZWxlYXNlCi1g
YGAKLUl0IGNyZWF0ZXMgYSBuZXcgc3RhZ2luZyByZXBvc2l0b3J5LiBHbyB0bwotaHR0cHM6Ly9v
c3Muc29uYXR5cGUub3JnLyNzdGFnaW5nUmVwb3NpdG9yaWVzIGFuZCBmaW5kIHRoZSByZXBvc2l0
b3J5LCB1c3VhbGx5Ci1pbiB0aGUgbmFtZSBsaWtlIGBgY29tZ29vZ2xlLTEyM2BgLgotCi1Zb3Ug
d2lsbCB3YW50IHRvIHJ1biB0aGlzIGNvbW1hbmQgb24gYSBkaWZmZXJlbnQgcGxhdGZvcm0uIFJl
bWVtYmVyLCBpbgotc3Vic2VxdWVudCBkZXBsb3ltZW50cyB5b3Ugd2lsbCBuZWVkIHRvIHByb3Zp
ZGUgdGhlIHJlcG9zaXRvcnkgbmFtZSB0aGF0IHlvdQotaGF2ZSBmb3VuZCBpbiB0aGUgZmlyc3Qg
ZGVwbG95bWVudCBzbyB0aGF0IGFsbCBhcnRpZmFjdHMgZ28gdG8gdGhlIHNhbWUKLXJlcG9zaXRv
cnk6Ci1gYGAKLSQgbXZuIGNsZWFuIGRlcGxveSAtUCByZWxlYXNlIC1Ec3RhZ2luZy5yZXBvc2l0
b3J5PWNvbWdvb2dsZS0xMjMKLWBgYAotCi1BIDMyLWJpdCBhcnRpZmFjdCBjYW4gYmUgZGVwbG95
ZWQgZnJvbSBhIDY0LWJpdCBob3N0IHdpdGgKLWBgLURvcy5kZXRlY3RlZC5hcmNoPXg4Nl8zMmBg
Ci0KLVdoZW4geW91IGhhdmUgZG9uZSBkZXBsb3ltZW50IGZvciBhbGwgcGxhdGZvcm1zLCBnbyB0
bwotaHR0cHM6Ly9vc3Muc29uYXR5cGUub3JnLyNzdGFnaW5nUmVwb3NpdG9yaWVzLCB2ZXJpZnkg
dGhhdCB0aGUgc3RhZ2luZwotcmVwb3NpdG9yeSBoYXMgYWxsIHRoZSBiaW5hcmllcywgY2xvc2Ug
YW5kIHJlbGVhc2UgdGhpcyByZXBvc2l0b3J5LgotCi0jIyMgVGlwcyBmb3IgZGVwbG95aW5nIG9u
IExpbnV4Ci1XZSBidWlsZCBvbiBDZW50b3MgNi42IHRvIHByb3ZpZGUgYSBnb29kIGNvbXBhdGli
aWxpdHkgZm9yIG5vdCB2ZXJ5IG5ldwotc3lzdGVtcy4gV2UgaGF2ZSBwcm92aWRlZCBhIGBgRG9j
a2VyZmlsZWBgIHVuZGVyIHRoaXMgZGlyZWN0b3J5IHRvIGJ1aWxkIHRoZQotZW52aXJvbm1lbnQu
IEl0IGhhcyBiZWVuIHRlc3RlZCB3aXRoIERvY2tlciAxLjYuMS4KLQotVG8gYnVpbGQgYSBpbWFn
ZToKLWBgYAotJCBkb2NrZXIgYnVpbGQgLXQgcHJvdG9jLWFydGlmYWN0cyAuCi1gYGAKLQotVG8g
cnVuIHRoZSBpbWFnZToKLWBgYAotJCBkb2NrZXIgcnVuIC1pdCAtLXJtPXRydWUgcHJvdG9jLWFy
dGlmYWN0cwotYGBgCi0KLVRoZSBQcm90b2J1ZiByZXBvc2l0b3J5IGhhcyBiZWVuIGNsb25lZCBp
bnRvIGBgL3Byb3RvYnVmYGAuCi0KLSMjIyBUaXBzIGZvciBkZXBsb3lpbmcgb24gV2luZG93cwot
VW5kZXIgV2luZG93cyB0aGUgZm9sbG93aW5nIGVycm9yIG1heSBvY2N1cjogYGBncGc6IGNhbm5v
dCBvcGVuIHR0eSBgbm8gdHR5JzoKLU5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlgYC4gVGhpcyBj
YW4gYmUgZml4ZWQgYnkgY29uZmlndXJpbmcgZ3BnIHRocm91Z2ggYW4KLWFjdGl2ZSBwcm9maWxl
IGluIGBgLm0yXHNldHRpbmdzLnhtbGBgIHdoZXJlIGFsc28gdGhlIFNvbmF0eXBlIHBhc3N3b3Jk
IGlzCi1zdG9yZWQ6Ci1gYGB4bWwKLTxzZXR0aW5ncz4KLSAgPHNlcnZlcnM+Ci0gICAgPHNlcnZl
cj4KLSAgICAgIDxpZD5vc3NyaDwvaWQ+Ci0gICAgICA8dXNlcm5hbWU+W3VzZXJuYW1lXTwvdXNl
cm5hbWU+Ci0gICAgICA8cGFzc3dvcmQ+W3Bhc3N3b3JkXTwvcGFzc3dvcmQ+Ci0gICAgPC9zZXJ2
ZXI+Ci0gIDwvc2VydmVycz4KLSAgPHByb2ZpbGVzPgotICAgIDxwcm9maWxlPgotICAgICAgPGlk
PmdwZzwvaWQ+Ci0gICAgICA8cHJvcGVydGllcz4KLSAgICAgICAgPGdwZy5leGVjdXRhYmxlPmdw
ZzwvZ3BnLmV4ZWN1dGFibGU+Ci0gICAgICAgIDxncGcucGFzc3BocmFzZT5bcGFzc3dvcmRdPC9n
cGcucGFzc3BocmFzZT4KLSAgICAgIDwvcHJvcGVydGllcz4KLSAgICA8L3Byb2ZpbGU+Ci0gIDwv
cHJvZmlsZXM+Ci0gIDxhY3RpdmVQcm9maWxlcz4KLSAgICA8YWN0aXZlUHJvZmlsZT5ncGc8L2Fj
dGl2ZVByb2ZpbGU+Ci0gIDwvYWN0aXZlUHJvZmlsZXM+Ci08L3NldHRpbmdzPgotYGBgCi0KLSMj
IyBUZXN0ZWQgYnVpbGQgZW52aXJvbm1lbnRzCi1XZSBoYXZlIHN1Y2Nlc3NmdWxseSBidWlsdCBh
cnRpZmFjdHMgb24gdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudHM6Ci0tIExpbnV4IHg4Nl8zMiBh
bmQgeDg2XzY0OgotIC0gQ2VudG9zIDYuNiAod2l0aGluIERvY2tlciAxLjYuMSkKLSAtIFVidW50
dSAxNC4wNC4yIDY0LWJpdAotLSBXaW5kb3dzIHg4Nl8zMjogTVNZUyB3aXRoIGBgbWluZ3czMi1n
Y2MtZysrIDQuOC4xLTRgYCBvbiBXaW5kb3dzIDcgNjQtYml0Ci0tIFdpbmRvd3MgeDg2XzY0OiBD
eWd3aW42NCB3aXRoIGBgbWluZ3c2NC14ODZfNjQtZ2NjLWcrKyA0LjguMy0xYGAgb24gV2luZG93
cyA3IDY0LWJpdAotLSBNYWMgT1MgWCB4ODZfMzIgYW5kIHg4Nl82NDogTWFjIE9TIFggMTAuOS41
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3Byb3RvYy1hcnRpZmFjdHMvYnVpbGQtcHJvdG9jLnNoIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2MtYXJ0
aWZhY3RzL2J1aWxkLXByb3RvYy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODhl
NmFlNTBhMDRjZWYzZTRkYjc1NzBjNThmMTllM2VkMWM5N2ViNC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYy1hcnRpZmFjdHMvYnVpbGQtcHJvdG9j
LnNoCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0KLSMgQnVp
bGRzIHByb3RvYyBleGVjdXRhYmxlIGludG8gdGFyZ2V0L3Byb3RvYy5leGUKLSMgVG8gYmUgcnVu
IGZyb20gTWF2ZW4uCi0jIFVzYWdlOiBidWlsZC1wcm90b2Muc2ggPE9TPiA8QVJDSD4KLSMgPE9T
PiBhbmQgPEFSQ0g+IGFyZSAke29zLmRldGVjdGVkLm5hbWV9IGFuZCAke29zLmRldGVjdGVkLmFy
Y2h9IGZyb20gb3MtbWF2ZW4tcGx1Z2luCi1PUz0kMQotQVJDSD0kMgotCi1pZiBbWyAkIyA8IDIg
XV07IHRoZW4KLSAgZWNobyAiTm8gYXJndW1lbnRzIHByb3ZpZGVkLiBUaGlzIHNjcmlwdCBpcyBp
bnRlbmRlZCB0byBiZSBydW4gZnJvbSBNYXZlbi4iCi0gIGV4aXQgMQotZmkKLQotIyBVbmRlciBD
eWd3aW4sIGJhc2ggZG9lc24ndCBoYXZlIHRoZXNlIGluIFBBVEggd2hlbiBjYWxsZWQgZnJvbSBN
YXZlbiB3aGljaAotIyBydW5zIGluIFdpbmRvd3MgdmVyc2lvbiBvZiBKYXZhLgotZXhwb3J0IFBB
VEg9Ii9iaW46L3Vzci9iaW46JFBBVEgiCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgSGVscGVy
IGZ1bmN0aW9ucwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotRV9QQVJBTV9FUlI9OTgKLUVfQVNTRVJU
X0ZBSUxFRD05OQotCi0jIFVzYWdlOgotZmFpbCgpCi17Ci0gIGVjaG8gIkVSUk9SOiAkMSIKLSAg
ZWNobwotICBleGl0ICRFX0FTU0VSVF9GQUlMRUQKLX0KLQotIyBVc2FnZTogYXNzZXJ0RXEgVkFM
MSBWQUwyICRMSU5FTk8KLWFzc2VydEVxICgpCi17Ci0gIGxpbmVubz0kMwotICBpZiBbIC16ICIk
bGluZW5vIiBdOyB0aGVuCi0gICAgZWNobyAibGluZW5vIG5vdCBnaXZlbiIKLSAgICBleGl0ICRF
X1BBUkFNX0VSUgotICBmaQotCi0gIGlmIFtbICIkMSIgIT0gIiQyIiBdXTsgdGhlbgotICAgIGVj
aG8gIkFzc2VydGlvbiBmYWlsZWQ6ICBcIiQxXCIgPT0gXCIkMlwiIgotICAgIGVjaG8gIkZpbGUg
XCIkMFwiLCBsaW5lICRsaW5lbm8iICAgICMgR2l2ZSBuYW1lIG9mIGZpbGUgYW5kIGxpbmUgbnVt
YmVyLgotICAgIGV4aXQgJEVfQVNTRVJUX0ZBSUxFRAotICBmaQotfQotCi0jIENoZWNrcyB0aGUg
YXJ0aWZhY3QgaXMgZm9yIHRoZSBleHBlY3RlZCBhcmNoaXRlY3R1cmUKLSMgVXNhZ2U6IGNoZWNr
QXJjaCA8cGF0aC10by1wcm90b2M+Ci1jaGVja0FyY2ggKCkKLXsKLSAgZWNobwotICBlY2hvICJD
aGVja2luZyBmaWxlIGZvcm1hdCAuLi4iCi0gIGlmIFtbICIkT1MiID09IHdpbmRvd3MgfHwgIiRP
UyIgPT0gbGludXggXV07IHRoZW4KLSAgICBmb3JtYXQ9IiQob2JqZHVtcCAtZiAiJDEiIHwgZ3Jl
cCAtbyAiZmlsZSBmb3JtYXQgLiokIiB8IGdyZXAgLW8gIlteIF0qJCIpIgotICAgIGVjaG8gRm9y
bWF0PSRmb3JtYXQKLSAgICBpZiBbWyAiJE9TIiA9PSBsaW51eCBdXTsgdGhlbgotICAgICAgaWYg
W1sgIiRBUkNIIiA9PSB4ODZfMzIgXV07IHRoZW4KLSAgICAgICAgYXNzZXJ0RXEgJGZvcm1hdCAi
ZWxmMzItaTM4NiIgJExJTkVOTwotICAgICAgZWxpZiBbWyAiJEFSQ0giID09IHg4Nl82NCBdXTsg
dGhlbgotICAgICAgICBhc3NlcnRFcSAkZm9ybWF0ICJlbGY2NC14ODYtNjQiICRMSU5FTk8KLSAg
ICAgIGVsc2UKLSAgICAgICAgZmFpbCAiVW5zdXBwb3J0ZWQgYXJjaDogJEFSQ0giCi0gICAgICBm
aQotICAgIGVsc2UKLSAgICAgICMgJE9TID09IHdpbmRvd3MKLSAgICAgIGlmIFtbICIkQVJDSCIg
PT0geDg2XzMyIF1dOyB0aGVuCi0gICAgICAgIGFzc2VydEVxICRmb3JtYXQgInBlaS1pMzg2IiAk
TElORU5PCi0gICAgICBlbGlmIFtbICIkQVJDSCIgPT0geDg2XzY0IF1dOyB0aGVuCi0gICAgICAg
IGFzc2VydEVxICRmb3JtYXQgInBlaS14ODYtNjQiICRMSU5FTk8KLSAgICAgIGVsc2UKLSAgICAg
ICAgZmFpbCAiVW5zdXBwb3J0ZWQgYXJjaDogJEFSQ0giCi0gICAgICBmaQotICAgIGZpCi0gIGVs
aWYgW1sgIiRPUyIgPT0gb3N4IF1dOyB0aGVuCi0gICAgZm9ybWF0PSIkKGZpbGUgLWIgIiQxIiB8
IGdyZXAgLW8gIlteIF0qJCIpIgotICAgIGVjaG8gRm9ybWF0PSRmb3JtYXQKLSAgICBpZiBbWyAi
JEFSQ0giID09IHg4Nl8zMiBdXTsgdGhlbgotICAgICAgYXNzZXJ0RXEgJGZvcm1hdCAiaTM4NiIg
JExJTkVOTwotICAgIGVsaWYgW1sgIiRBUkNIIiA9PSB4ODZfNjQgXV07IHRoZW4KLSAgICAgIGFz
c2VydEVxICRmb3JtYXQgIng4Nl82NCIgJExJTkVOTwotICAgIGVsc2UKLSAgICAgIGZhaWwgIlVu
c3VwcG9ydGVkIGFyY2g6ICRBUkNIIgotICAgIGZpCi0gIGVsc2UKLSAgICBmYWlsICJVbnN1cHBv
cnRlZCBzeXN0ZW06ICRPUyIKLSAgZmkKLSAgZWNobwotfQotCi0jIENoZWNrcyB0aGUgZGVwZW5k
ZW5jaWVzIG9mIHRoZSBhcnRpZmFjdC4gQXJ0aWZhY3RzIHNob3VsZCBvbmx5IGRlcGVuZCBvbgot
IyBzeXN0ZW0gbGlicmFyaWVzLgotIyBVc2FnZTogY2hlY2tEZXBlbmRlbmNpZXMgPHBhdGgtdG8t
cHJvdG9jPgotY2hlY2tEZXBlbmRlbmNpZXMgKCkKLXsKLSAgaWYgW1sgIiRPUyIgPT0gd2luZG93
cyBdXTsgdGhlbgotICAgIGR1bXBfY21kPSdvYmpkdW1wIC14ICciJDEiJyB8IGZncmVwICJETEwg
TmFtZSInCi0gICAgd2hpdGVfbGlzdD0iS0VSTkVMMzJcLmRsbFx8bXN2Y3J0XC5kbGwiCi0gIGVs
aWYgW1sgIiRPUyIgPT0gbGludXggXV07IHRoZW4KLSAgICBkdW1wX2NtZD0nbGRkICciJDEiCi0g
ICAgaWYgW1sgIiRBUkNIIiA9PSB4ODZfMzIgXV07IHRoZW4KLSAgICAgIHdoaXRlX2xpc3Q9Imxp
bnV4LWdhdGVcLnNvXC4xXHxsaWJwdGhyZWFkXC5zb1wuMFx8bGlibVwuc29cLjZcfGxpYmNcLnNv
XC42XHxsZC1saW51eFwuc29cLjIiCi0gICAgZWxpZiBbWyAiJEFSQ0giID09IHg4Nl82NCBdXTsg
dGhlbgotICAgICAgd2hpdGVfbGlzdD0ibGludXgtdmRzb1wuc29cLjFcfGxpYnB0aHJlYWRcLnNv
XC4wXHxsaWJtXC5zb1wuNlx8bGliY1wuc29cLjZcfGxkLWxpbnV4LXg4Ni02NFwuc29cLjIiCi0g
ICAgZmkKLSAgZWxpZiBbWyAiJE9TIiA9PSBvc3ggXV07IHRoZW4KLSAgICBkdW1wX2NtZD0nb3Rv
b2wgLUwgJyIkMSInIHwgZmdyZXAgZHlsaWInCi0gICAgd2hpdGVfbGlzdD0ibGlielwuMVwuZHls
aWJcfGxpYnN0ZGMrK1wuNlwuZHlsaWJcfGxpYlN5c3RlbVwuQlwuZHlsaWIiCi0gIGZpCi0gIGlm
IFtbIC16ICIkd2hpdGVfbGlzdCIgfHwgLXogIiRkdW1wX2NtZCIgXV07IHRoZW4KLSAgICBmYWls
ICJVbnN1cHBvcnRlZCBwbGF0Zm9ybSAkT1MtJEFSQ0guIgotICBmaQotICBlY2hvICJDaGVja2lu
ZyBmb3IgZXhwZWN0ZWQgZGVwZW5kZW5jaWVzIC4uLiIKLSAgZXZhbCAkZHVtcF9jbWQgfCBncmVw
IC1pICIkd2hpdGVfbGlzdCIgfHwgZmFpbCAiZG9lc24ndCBzaG93IGFueSBleHBlY3RlZCBkZXBl
bmRlbmNpZXMiCi0gIGVjaG8gIkNoZWNraW5nIGZvciB1bmV4cGVjdGVkIGRlcGVuZGVuY2llcyAu
Li4iCi0gIGV2YWwgJGR1bXBfY21kIHwgZ3JlcCAtaSAtdiAiJHdoaXRlX2xpc3QiCi0gIHJldD0k
PwotICBpZiBbWyAkcmV0ID09IDAgXV07IHRoZW4KLSAgICBmYWlsICJmb3VuZCB1bmV4cGVjdGVk
IGRlcGVuZGVuY2llcyAobGlzdGVkIGFib3ZlKS4iCi0gIGVsaWYgW1sgJHJldCAhPSAxIF1dOyB0
aGVuCi0gICAgZmFpbCAiRXJyb3Igd2hlbiBjaGVja2luZyBkZXBlbmRlbmNpZXMuIgotICBmaSAg
IyBncmVwIHJldHVybnMgMSB3aGVuICJub3QgZm91bmQiLCB3aGljaCBpcyB3aGF0IHdlIGV4cGVj
dAotICBlY2hvICJEZXBlbmRlbmNpZXMgbG9vayBnb29kLiIKLSAgZWNobwotfQotIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIwotCi1lY2hvICJCdWlsZGluZyBwcm90b2MsIE9TPSRPUyBBUkNIPSRBUkNIIgot
Ci0jIE5lc3RlZCBkb3VibGUgcXVvdGVzIGFyZSB1bmludHVpdGl2ZSwgYnV0IGl0IHdvcmtzLgot
Y2QgIiQoZGlybmFtZSAiJDAiKSIKLQotV09SS0lOR19ESVI9JChwd2QpCi1DT05GSUdVUkVfQVJH
Uz0iLS1kaXNhYmxlLXNoYXJlZCIKLQotTUFLRV9UQVJHRVQ9InByb3RvYyIKLWlmIFtbICIkT1Mi
ID09IHdpbmRvd3MgXV07IHRoZW4KLSAgTUFLRV9UQVJHRVQ9IiR7TUFLRV9UQVJHRVR9LmV4ZSIK
LWZpCi0KLSMgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWUgc2V0IGluIGNvbmZpZ3VyZS5hYyB0
aGF0IGhhcyAnLWcnIHdoaWNoIHByb2R1Y2VzCi0jIGh1Z2UgYmluYXJ5LgotQ1hYRkxBR1M9Ii1E
TkRFQlVHIgotTERGTEFHUz0iIgotCi1pZiBbWyAiJCh1bmFtZSkiID09IENZR1dJTiogXV07IHRo
ZW4KLSAgYXNzZXJ0RXEgIiRPUyIgd2luZG93cyAkTElORU5PCi0gICMgVXNlIG1pbmd3MzIgY29t
cGlsZXJzIGJlY2F1c2UgZXhlY3V0YWJsZXMgcHJvZHVjZWQgYnkgQ3lnd2luIGNvbXBpbGVyCi0g
ICMgYWx3YXlzIGhhdmUgZGVwZW5kZW5jeSBvbiBDeWd3aW4gRExMLgotICBpZiBbWyAiJEFSQ0gi
ID09IHg4Nl82NCBdXTsgdGhlbgotICAgIENPTkZJR1VSRV9BUkdTPSIkQ09ORklHVVJFX0FSR1Mg
LS1ob3N0PXg4Nl82NC13NjQtbWluZ3czMiIKLSAgZWxpZiBbWyAiJEFSQ0giID09IHg4Nl8zMiBd
XTsgdGhlbgotICAgIENPTkZJR1VSRV9BUkdTPSIkQ09ORklHVVJFX0FSR1MgLS1ob3N0PWk2ODYt
cGMtbWluZ3czMiIKLSAgZWxzZQotICAgIGZhaWwgIlVuc3VwcG9ydGVkIGFyY2ggYnkgQ1lHV0lO
OiAkQVJDSCIKLSAgZmkKLWVsaWYgW1sgIiQodW5hbWUpIiA9PSBNSU5HVzMyKiBdXTsgdGhlbgot
ICBhc3NlcnRFcSAiJE9TIiB3aW5kb3dzICRMSU5FTk8KLSAgYXNzZXJ0RXEgIiRBUkNIIiB4ODZf
MzIgJExJTkVOTwotZWxpZiBbWyAiJCh1bmFtZSkiID09IE1JTkdXNjQqIF1dOyB0aGVuCi0gIGFz
c2VydEVxICIkT1MiIHdpbmRvd3MgJExJTkVOTwotICBhc3NlcnRFcSAiJEFSQ0giIHg4Nl82NCAk
TElORU5PCi1lbGlmIFtbICIkKHVuYW1lKSIgPT0gTGludXgqIF1dOyB0aGVuCi0gIGlmIFtbICIk
T1MiID09IGxpbnV4IF1dOyB0aGVuCi0gICAgaWYgW1sgIiRBUkNIIiA9PSB4ODZfNjQgXV07IHRo
ZW4KLSAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLW02NCIKLSAgICBlbGlmIFtbICIkQVJDSCIg
PT0geDg2XzMyIF1dOyB0aGVuCi0gICAgICBDWFhGTEFHUz0iJENYWEZMQUdTIC1tMzIiCi0gICAg
ZWxzZQotICAgICAgZmFpbCAiVW5zdXBwb3J0ZWQgYXJjaDogJEFSQ0giCi0gICAgZmkKLSAgZWxp
ZiBbWyAiJE9TIiA9PSB3aW5kb3dzIF1dOyB0aGVuCi0gICAgIyBDcm9zcy1jb21waWxhdGlvbiBm
b3IgV2luZG93cwotICAgICMgVE9ETyh6aGFuZ2t1bjgzKSBNaW5HVyA2NCBhbHdheXMgYWRkcyBk
ZXBlbmRlbmN5IG9uIGxpYndpbnB0aHJlYWQtMS5kbGwsCi0gICAgIyB3aGljaCBpcyB1bmRlc2ly
YWJsZSBmb3IgcmVwb3NpdG9yeSBkZXBsb3ltZW50LgotICAgIENPTkZJR1VSRV9BUkdTPSIkQ09O
RklHVVJFX0FSR1MiCi0gICAgaWYgW1sgIiRBUkNIIiA9PSB4ODZfNjQgXV07IHRoZW4KLSAgICAg
IENPTkZJR1VSRV9BUkdTPSIkQ09ORklHVVJFX0FSR1MgLS1ob3N0PXg4Nl82NC13NjQtbWluZ3cz
MiIKLSAgICBlbGlmIFtbICIkQVJDSCIgPT0geDg2XzMyIF1dOyB0aGVuCi0gICAgICBDT05GSUdV
UkVfQVJHUz0iJENPTkZJR1VSRV9BUkdTIC0taG9zdD1pNjg2LXc2NC1taW5ndzMyIgotICAgIGVs
c2UKLSAgICAgIGZhaWwgIlVuc3VwcG9ydGVkIGFyY2g6ICRBUkNIIgotICAgIGZpCi0gIGVsc2UK
LSAgICBmYWlsICJDYW5ub3QgYnVpbGQgJE9TIG9uICQodW5hbWUpIgotICBmaQotZWxpZiBbWyAi
JCh1bmFtZSkiID09IERhcndpbiogXV07IHRoZW4KLSAgYXNzZXJ0RXEgIiRPUyIgb3N4ICRMSU5F
Tk8KLSAgIyBNYWtlIHRoZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIE9TWCAxMC43IGFuZCBsYXRl
cgotICBDWFhGTEFHUz0iJENYWEZMQUdTIC1tbWFjb3N4LXZlcnNpb24tbWluPTEwLjciCi0gIGlm
IFtbICIkQVJDSCIgPT0geDg2XzY0IF1dOyB0aGVuCi0gICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAt
bTY0IgotICBlbGlmIFtbICIkQVJDSCIgPT0geDg2XzMyIF1dOyB0aGVuCi0gICAgQ1hYRkxBR1M9
IiRDWFhGTEFHUyAtbTMyIgotICBlbHNlCi0gICAgZmFpbCAiVW5zdXBwb3J0ZWQgYXJjaDogJEFS
Q0giCi0gIGZpCi1lbHNlCi0gIGZhaWwgIlVuc3VwcG9ydGVkIHN5c3RlbTogJCh1bmFtZSkiCi1m
aQotCi0jIFN0YXRpY2FsbHkgbGluayBsaWJnY2MgYW5kIGxpYnN0ZGMrKy4KLSMgLXMgdG8gcHJv
ZHVjZSBzdHJpcHBlZCBiaW5hcnkuCi0jIEFuZCB0aGV5IGRvbid0IHdvcmsgdW5kZXIgTWFjLgot
aWYgW1sgIiRPUyIgIT0gb3N4IF1dOyB0aGVuCi0gIExERkxBR1M9IiRMREZMQUdTIC1zdGF0aWMt
bGliZ2NjIC1zdGF0aWMtbGlic3RkYysrIC1zIgotZmkKLQotZXhwb3J0IENYWEZMQUdTIExERkxB
R1MKLQotVEFSR0VUX0ZJTEU9dGFyZ2V0L3Byb3RvYy5leGUKLQotY2QgIiRXT1JLSU5HX0RJUiIv
Li4gJiYgLi9jb25maWd1cmUgJENPTkZJR1VSRV9BUkdTICYmCi0gIGNkIHNyYyAmJiBtYWtlIGNs
ZWFuICYmIG1ha2UgJE1BS0VfVEFSR0VUICYmCi0gIGNkICIkV09SS0lOR19ESVIiICYmIG1rZGly
IC1wIHRhcmdldCAmJgotICAoY3AgLi4vc3JjL3Byb3RvYyAkVEFSR0VUX0ZJTEUgfHwgY3AgLi4v
c3JjL3Byb3RvYy5leGUgJFRBUkdFVF9GSUxFKSB8fAotICBleGl0IDEKLQotaWYgW1sgIiRPUyIg
PT0gb3N4IF1dOyB0aGVuCi0gICMgU2luY2UgTWFjIGxpbmtlciBkb2Vzbid0IGFjY2VwdCAiLXMi
LCB3ZSBuZWVkIHRvIHJ1biBzdHJpcAotICBzdHJpcCAkVEFSR0VUX0ZJTEUgfHwgZXhpdCAxCi1m
aQotCi1jaGVja0FyY2ggJFRBUkdFVF9GSUxFICYmIGNoZWNrRGVwZW5kZW5jaWVzICRUQVJHRVRf
RklMRQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2MtYXJ0aWZhY3RzL3BvbS54bWwgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYy1hcnRpZmFj
dHMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk3MjhhMDYzOWE0YTEy
YmY3NTA4NTc2ZGFmZThjOWIxOTg1NzE3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3Byb3RvYy1hcnRpZmFjdHMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBA
IC0xLDEzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgot
PHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgeG1s
bnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgeHNp
OnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDov
L21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0gIDxtb2RlbFZlcnNpb24+NC4w
LjA8L21vZGVsVmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlPC9n
cm91cElkPgotICAgIDxhcnRpZmFjdElkPmdvb2dsZTwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lv
bj4xPC92ZXJzaW9uPgotICA8L3BhcmVudD4KLSAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5wcm90b2J1
ZjwvZ3JvdXBJZD4KLSAgPGFydGlmYWN0SWQ+cHJvdG9jPC9hcnRpZmFjdElkPgotICA8dmVyc2lv
bj4zLjAuMC1iZXRhLTI8L3ZlcnNpb24+Ci0gIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0g
IDxuYW1lPlByb3RvYnVmIENvbXBpbGVyPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+Ci0gICAgUHJv
dG9idWYgQ29tcGlsZXIgKHByb3RvYykgaXMgYSBjb21waWxlciBmb3IgLnByb3RvIGZpbGVzLiBJ
dCBnZW5lcmF0ZXMKLSAgICBsYW5ndWFnZS1zcGVjaWZpYyBjb2RlIGZvciBQcm90b2J1ZiBtZXNz
YWdlcyBhbmQgUlBDIGludGVyZmFjZXMuCi0gIDwvZGVzY3JpcHRpb24+Ci0gIDxpbmNlcHRpb25Z
ZWFyPjIwMDg8L2luY2VwdGlvblllYXI+Ci0gIDx1cmw+aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy88L3VybD4KLSAgPGxpY2Vuc2VzPgotICAgIDxsaWNlbnNl
PgotICAgICAgPG5hbWU+TmV3IEJTRCBsaWNlbnNlPC9uYW1lPgotICAgICAgPHVybD5odHRwOi8v
d3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocDwvdXJsPgotICAgICAg
PGRpc3RyaWJ1dGlvbj5yZXBvPC9kaXN0cmlidXRpb24+Ci0gICAgPC9saWNlbnNlPgotICA8L2xp
Y2Vuc2VzPgotICA8c2NtPgotICAgIDx1cmw+aHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90
b2J1ZjwvdXJsPgotICAgIDxjb25uZWN0aW9uPgotICAgICAgc2NtOmdpdDpodHRwczovL2dpdGh1
Yi5jb20vZ29vZ2xlL3Byb3RvYnVmLmdpdAotICAgIDwvY29ubmVjdGlvbj4KLSAgPC9zY20+Ci0g
IDxidWlsZD4KLSAgICA8ZXh0ZW5zaW9ucz4KLSAgICAgIDxleHRlbnNpb24+Ci0gICAgICAgIDxn
cm91cElkPmtyLm1vdGQubWF2ZW48L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPm9zLW1h
dmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+MS4yLjMuRmluYWw8L3Zl
cnNpb24+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2V4dGVuc2lvbnM+Ci0gICAgPHBsdWdp
bnM+Ci0gICAgICA8cGx1Z2luPgotICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwv
Z3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0
SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjEuMS4xPC92ZXJzaW9uPgotICAgICAgICA8ZXhlY3V0aW9u
cz4KLSAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgPHBoYXNlPmNvbXBpbGU8L3Bo
YXNlPgotICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICA8Z29hbD5leGVjPC9nb2Fs
PgotICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAg
PC9leGVjdXRpb25zPgotICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICA8ZXhlY3V0
YWJsZT5iYXNoPC9leGVjdXRhYmxlPgotICAgICAgICAgIDxhcmd1bWVudHM+Ci0gICAgICAgICAg
ICA8YXJndW1lbnQ+YnVpbGQtcHJvdG9jLnNoPC9hcmd1bWVudD4KLSAgICAgICAgICAgIDxhcmd1
bWVudD4ke29zLmRldGVjdGVkLm5hbWV9PC9hcmd1bWVudD4KLSAgICAgICAgICAgIDxhcmd1bWVu
dD4ke29zLmRldGVjdGVkLmFyY2h9PC9hcmd1bWVudD4KLSAgICAgICAgICA8L2FyZ3VtZW50cz4K
LSAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgPC9wbHVnaW4+Ci0gICAgICA8cGx1Z2lu
PgotICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KLSAgICAgICAg
PGFydGlmYWN0SWQ+YnVpbGQtaGVscGVyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAg
ICAgPHZlcnNpb24+MS44PC92ZXJzaW9uPgotICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAg
ICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgPGlkPmF0dGFjaC1hcnRpZmFjdHM8L2lkPgotICAg
ICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPgotICAgICAgICAgICAgPGdvYWxzPgotICAg
ICAgICAgICAgICA8Z29hbD5hdHRhY2gtYXJ0aWZhY3Q8L2dvYWw+Ci0gICAgICAgICAgICA8L2dv
YWxzPgotICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgIDxhcnRpZmFj
dHM+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0PgotICAgICAgICAgICAgICAgICAgPGZpbGU+
JHtiYXNlZGlyfS90YXJnZXQvcHJvdG9jLmV4ZTwvZmlsZT4KLSAgICAgICAgICAgICAgICAgIDxj
bGFzc2lmaWVyPiR7b3MuZGV0ZWN0ZWQubmFtZX0tJHtvcy5kZXRlY3RlZC5hcmNofTwvY2xhc3Np
Zmllcj4KLSAgICAgICAgICAgICAgICAgIDx0eXBlPmV4ZTwvdHlwZT4KLSAgICAgICAgICAgICAg
ICA8L2FydGlmYWN0PgotICAgICAgICAgICAgICA8L2FydGlmYWN0cz4KLSAgICAgICAgICAgIDwv
Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgPC9leGVjdXRp
b25zPgotICAgICAgPC9wbHVnaW4+Ci0gICAgPC9wbHVnaW5zPgotICA8L2J1aWxkPgotICA8cHJv
ZmlsZXM+Ci0gICAgPHByb2ZpbGU+Ci0gICAgICA8aWQ+cmVsZWFzZTwvaWQ+Ci0gICAgICA8cHJv
cGVydGllcz4KLSAgICAgICAgPCEtLSBTcGVjaWZ5IHRoZSBzdGFnaW5nIHJlcG9zaXRvcnkgdG8g
ZGVwbG95IHRvLiBUaGlzIGNhbiBiZSBsZWZ0Ci0gICAgICAgICAgICAgZW1wdHkgZm9yIHRoZSBm
aXJzdCBkZXBsb3ltZW50LCBhbmQgU29uYXR5cGUgd2lsbCBjcmVhdGUgb25lLiBGb3IKLSAgICAg
ICAgICAgICBzdWJzZXF1ZW50IGRlcGxveW1lbnRzIGl0IHNob3VsZCBiZSBzZXQgdG8gd2hhdCBT
b25hdHlwZSBoYXMKLSAgICAgICAgICAgICBjcmVhdGVkLCBzbyB0aGF0IGFsbCBkZXBsb3ltZW50
cyB3aWxsIGdvIHRvIHRoZSBzYW1lIHJlcG9zaXRvcnkuCi0gICAgICAgICAgICAgLS0+Ci0gICAg
ICAgIDxzdGFnaW5nLnJlcG9zaXRvcnk+PC9zdGFnaW5nLnJlcG9zaXRvcnk+Ci0gICAgICA8L3By
b3BlcnRpZXM+Ci0gICAgICA8YnVpbGQ+Ci0gICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgIDxw
bHVnaW4+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dy
b3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1ncGctcGx1Z2luPC9hcnRpZmFj
dElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS41PC92ZXJzaW9uPgotICAgICAgICAgICAgPGV4
ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgPGlk
PnNpZ24tYXJ0aWZhY3RzPC9pZD4KLSAgICAgICAgICAgICAgICA8cGhhc2U+dmVyaWZ5PC9waGFz
ZT4KLSAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICA8Z29hbD5zaWdu
PC9nb2FsPgotICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgIDwvZXhlY3V0
aW9uPgotICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgIDwvcGx1Z2luPgotICAg
ICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc29uYXR5cGUucGx1Z2lu
czwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm5leHVzLXN0YWdpbmctbWF2ZW4t
cGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS42LjM8L3ZlcnNpb24+
Ci0gICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgotICAgICAgICAgICAg
PGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICA8c2VydmVySWQ+c29uYXR5cGUtbmV4dXMt
c3RhZ2luZzwvc2VydmVySWQ+Ci0gICAgICAgICAgICAgICA8bmV4dXNVcmw+aHR0cHM6Ly9vc3Mu
c29uYXR5cGUub3JnLzwvbmV4dXNVcmw+Ci0gICAgICAgICAgICAgICA8c2tpcFN0YWdpbmdSZXBv
c2l0b3J5Q2xvc2U+dHJ1ZTwvc2tpcFN0YWdpbmdSZXBvc2l0b3J5Q2xvc2U+Ci0gICAgICAgICAg
ICAgICA8YXV0b1JlbGVhc2VBZnRlckNsb3NlPmZhbHNlPC9hdXRvUmVsZWFzZUFmdGVyQ2xvc2U+
Ci0gICAgICAgICAgICAgICA8c3RhZ2luZ1JlcG9zaXRvcnlJZD4ke3N0YWdpbmcucmVwb3NpdG9y
eX08L3N0YWdpbmdSZXBvc2l0b3J5SWQ+Ci0gICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0g
ICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLSAgICAgIDwvYnVpbGQ+Ci0g
ICAgPC9wcm9maWxlPgotICA8L3Byb2ZpbGVzPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRo
b24vTUFOSUZFU1QuaW4gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9NQU5JRkVTVC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjYwODg4MjYzYmU5ZTRjZjBlYjY1MWI1ZjA3ZjQ2ZDZlYjI3ZWQwNi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9NQU5JRkVTVC5p
bgorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXBydW5lIGdvb2dsZS9wcm90b2J1Zi9p
bnRlcm5hbC9pbXBvcnRfdGVzdF9wYWNrYWdlCi1leGNsdWRlIGdvb2dsZS9wcm90b2J1Zi9pbnRl
cm5hbC8qX3BiMi5weQotZXhjbHVkZSBnb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvKl90ZXN0LnB5
Ci1leGNsdWRlIGdvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC8qLnByb3RvCi1leGNsdWRlIGdvb2ds
ZS9wcm90b2J1Zi9pbnRlcm5hbC90ZXN0X3V0aWwucHkKLQotcmVjdXJzaXZlLWV4Y2x1ZGUgZ29v
Z2xlICpfdGVzdC5weQotcmVjdXJzaXZlLWV4Y2x1ZGUgZ29vZ2xlICpfdGVzdC5wcm90bwotcmVj
dXJzaXZlLWV4Y2x1ZGUgZ29vZ2xlIHVuaXR0ZXN0Kl9wYjIucHkKLQotZ2xvYmFsLWV4Y2x1ZGUg
Ki5kbGwKLWdsb2JhbC1leGNsdWRlICoucHljCi1nbG9iYWwtZXhjbHVkZSAqLnB5bwotZ2xvYmFs
LWV4Y2x1ZGUgKi5zbwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vUkVBRE1FLm1kIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vUkVBRE1F
Lm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2FjZmQ5NGQ2ODhiNmVkYmE0ZWFi
OWFiMGUxZjY1YjU1NDg0NzZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvcHl0aG9uL1JFQURNRS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBA
Ci1Qcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1bIVtC
dWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9nb29nbGUvcHJvdG9idWYuc3ZnP2Jy
YW5jaD1tYXN0ZXIpXShodHRwczovL3RyYXZpcy1jaS5vcmcvZ29vZ2xlL3Byb3RvYnVmKQotCi1D
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgotCi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUg
UHl0aG9uIFByb3RvY29sIEJ1ZmZlcnMgcnVudGltZSBsaWJyYXJ5LgotCi1Ob3JtYWxseSwgdGhp
cyBkaXJlY3RvcnkgY29tZXMgYXMgcGFydCBvZiB0aGUgcHJvdG9idWYgcGFja2FnZSwgYXZhaWxh
YmxlCi1mcm9tOgotCi0gIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0KLVRoZSBjb21wbGV0ZSBwYWNrYWdlIGluY2x1ZGVzIHRoZSBDKysgc291cmNlIGNv
ZGUsIHdoaWNoIGluY2x1ZGVzIHRoZQotUHJvdG9jb2wgQ29tcGlsZXIgKHByb3RvYykuICBJZiB5
b3UgZG93bmxvYWRlZCB0aGlzIHBhY2thZ2UgZnJvbSBQeVBJCi1vciBzb21lIG90aGVyIFB5dGhv
bi1zcGVjaWZpYyBzb3VyY2UsIHlvdSBtYXkgaGF2ZSByZWNlaXZlZCBvbmx5IHRoZQotUHl0aG9u
IHBhcnQgb2YgdGhlIGNvZGUuICBJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIG5lZWQgdG8gb2J0YWlu
IHRoZQotUHJvdG9jb2wgQ29tcGlsZXIgZnJvbSBzb21lIG90aGVyIHNvdXJjZSBiZWZvcmUgeW91
IGNhbiB1c2UgdGhpcwotcGFja2FnZS4KLQotRGV2ZWxvcG1lbnQgV2FybmluZwotPT09PT09PT09
PT09PT09PT09PQotCi1UaGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIFByb3RvY29sIEJ1ZmZl
cnMgaXMgbm90IGFzIG1hdHVyZSBhcyB0aGUgQysrCi1hbmQgSmF2YSBpbXBsZW1lbnRhdGlvbnMu
ICBJdCBtYXkgYmUgbW9yZSBidWdneSwgYW5kIGl0IGlzIGtub3duIHRvIGJlCi1wcmV0dHkgc2xv
dyBhdCB0aGlzIHRpbWUuICBJZiB5b3Ugd291bGQgbGlrZSB0byBoZWxwIGZpeCB0aGVzZSBpc3N1
ZXMsCi1qb2luIHRoZSBQcm90b2NvbCBCdWZmZXJzIGRpc2N1c3Npb24gbGlzdCBhbmQgbGV0IHVz
IGtub3chCi0KLUluc3RhbGxhdGlvbgotPT09PT09PT09PT09Ci0KLTEpIE1ha2Ugc3VyZSB5b3Ug
aGF2ZSBQeXRob24gMi42IG9yIG5ld2VyLiAgSWYgaW4gZG91YnQsIHJ1bjoKLQotICAgICAkIHB5
dGhvbiAtVgotCi0yKSBJZiB5b3UgZG8gbm90IGhhdmUgc2V0dXB0b29scyBpbnN0YWxsZWQsIG5v
dGUgdGhhdCBpdCB3aWxsIGJlCi0gICBkb3dubG9hZGVkIGFuZCBpbnN0YWxsZWQgYXV0b21hdGlj
YWxseSBhcyBzb29uIGFzIHlvdSBydW4gc2V0dXAucHkuCi0gICBJZiB5b3Ugd291bGQgcmF0aGVy
IGluc3RhbGwgaXQgbWFudWFsbHksIHlvdSBtYXkgZG8gc28gYnkgZm9sbG93aW5nCi0gICB0aGUg
aW5zdHJ1Y3Rpb25zIG9uIHRoaXMgcGFnZToKLQotICAgICBodHRwczovL3BhY2thZ2luZy5weXRo
b24ub3JnL2VuL2xhdGVzdC9pbnN0YWxsaW5nLmh0bWwjc2V0dXAtZm9yLWluc3RhbGxpbmctcGFj
a2FnZXMKLQotMykgQnVpbGQgdGhlIEMrKyBjb2RlLCBvciBpbnN0YWxsIGEgYmluYXJ5IGRpc3Ry
aWJ1dGlvbiBvZiBwcm90b2MuICBJZgotICAgeW91IGluc3RhbGwgYSBiaW5hcnkgZGlzdHJpYnV0
aW9uLCBtYWtlIHN1cmUgdGhhdCBpdCBpcyB0aGUgc2FtZQotICAgdmVyc2lvbiBhcyB0aGlzIHBh
Y2thZ2UuICBJZiBpbiBkb3VidCwgcnVuOgotCi0gICAgICQgcHJvdG9jIC0tdmVyc2lvbgotCi00
KSBCdWlsZCBhbmQgcnVuIHRoZSB0ZXN0czoKLQotICAgICAkIHB5dGhvbiBzZXR1cC5weSBidWls
ZAotICAgICAkIHB5dGhvbiBzZXR1cC5weSB0ZXN0Ci0KLSAgICAgVG8gYnVpbGQsIHRlc3QsIGFu
ZCB1c2UgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbiwgeW91IG11c3QgZmlyc3QgY29tcGlsZQotICAg
ICBsaWJwcm90b2J1Zi5zbzoKLQotICAgICAkIChjZCAuLiAmJiBtYWtlKQotCi0gICAgIE9uIE9T
IFg6Ci0KLSAgICAgIElmIHlvdSBhcmUgcnVubmluZyBhIGhvbWVicmV3LXByb3ZpZGVkIHB5dGhv
biwgeW91IG11c3QgbWFrZSBzdXJlIGFub3RoZXIKLSAgICAgIHZlcnNpb24gb2YgcHJvdG9idWYg
aXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLCBhcyBob21lYnJldydzIHB5dGhvbiB3aWxsCi0gICAg
ICBzZWFyY2ggL3Vzci9sb2NhbC9saWIgZm9yIGxpYnByb3RvYnVmLnNvIGJlZm9yZSBpdCBzZWFy
Y2hlcyAuLi9zcmMvLmxpYnMKLSAgICAgIFlvdSBjYW4gZWl0aGVyIHVubGluayBob21lYnJldydz
IHByb3RvYnVmIG9yIGluc3RhbGwgdGhlIGxpYnByb3RvYnVmIHlvdQotICAgICAgYnVpbHQgZWFy
bGllcjoKLQotICAgICAgJCBicmV3IHVubGluayBwcm90b2J1ZgotICAgICAgb3IKLSAgICAgICQg
KGNkIC4uICYmIG1ha2UgaW5zdGFsbCkKLQotICAgICBPbiBvdGhlciAqbml4OgotCi0gICAgICBZ
b3UgbXVzdCBtYWtlIGxpYnByb3RvYnVmLnNvIGR5bmFtaWNhbGx5IGF2YWlsYWJsZS4gWW91IGNh
biBlaXRoZXIKLSAgICAgIGluc3RhbGwgbGlicHJvdG9idWYgeW91IGJ1aWx0IGVhcmxpZXIsIG9y
IHNldCBMRF9MSUJSQVJZX1BBVEg6Ci0KLSAgICAgICQgZXhwb3J0IExEX0xJQlJBUllfUEFUSD0u
Li9zcmMvLmxpYnMKLSAgICAgIG9yCi0gICAgICAkIChjZCAuLiAmJiBtYWtlIGluc3RhbGwpCi0K
LSAgICAgVG8gYnVpbGQgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbiBydW46Ci0gICAgICQgcHl0aG9u
IHNldHVwLnB5IGJ1aWxkIC0tY3BwX2ltcGxlbWVudGF0aW9uCi0KLSAgICAgVGhlbiBydW4gdGhl
IHRlc3RzIGxpa2Ugc286Ci0gICAgICQgcHl0aG9uIHNldHVwLnB5IHRlc3QgLS1jcHBfaW1wbGVt
ZW50YXRpb24KLQotICAgSWYgc29tZSB0ZXN0cyBmYWlsLCB0aGlzIGxpYnJhcnkgbWF5IG5vdCB3
b3JrIGNvcnJlY3RseSBvbiB5b3VyCi0gICBzeXN0ZW0uICBDb250aW51ZSBhdCB5b3VyIG93biBy
aXNrLgotCi0gICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGlzIGEga25vd24gcHJvYmxlbSB3aXRo
IHNvbWUgdmVyc2lvbnMgb2YKLSAgIFB5dGhvbiBvbiBDeWd3aW4gd2hpY2ggY2F1c2VzIHRoZSB0
ZXN0cyB0byBmYWlsIGFmdGVyIHByaW50aW5nIHRoZQotICAgZXJyb3I6ICAic2VtX2luaXQ6IFJl
c291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIi4gIFRoaXMgYXBwZWFycwotICAgdG8gYmUg
YSBidWcgZWl0aGVyIGluIEN5Z3dpbiBvciBpbiBQeXRob246Ci0gICAgIGh0dHA6Ly93d3cuY3ln
d2luLmNvbS9tbC9jeWd3aW4vMjAwNS0wNy9tc2cwMTM3OC5odG1sCi0gICBXZSBkbyBub3Qga25v
dyBpZiBvciB3aGVuIGl0IG1pZ2h0IG1lIGZpeGVkLiAgV2UgYWxzbyBkbyBub3Qga25vdwotICAg
aG93IGxpa2VseSBpdCBpcyB0aGF0IHRoaXMgYnVnIHdpbGwgYWZmZWN0IHVzZXJzIGluIHByYWN0
aWNlLgotCi01KSBJbnN0YWxsOgotCi0gICAgJCBweXRob24gc2V0dXAucHkgaW5zdGFsbAotCi0g
IG9yOgotCi0gICAgJCAoY2QgLi4gJiYgbWFrZSBpbnN0YWxsKQotICAgICQgcHl0aG9uIHNldHVw
LnB5IGluc3RhbGwgLS1jcHBfaW1wbGVtZW50YXRpb24KLQotICAgVGhpcyBzdGVwIG1heSByZXF1
aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLgotICAgTk9URTogVG8gdXNlIEMrKyBpbXBsZW1lbnRh
dGlvbiwgeW91IG5lZWQgdG8gZXhwb3J0IGFuIGVudmlyb25tZW50Ci0gICB2YXJpYWJsZSBiZWZv
cmUgcnVubmluZyB5b3VyIHByb2dyYW0uICBTZWUgdGhlICJDKysgSW1wbGVtZW50YXRpb24iCi0g
ICBzZWN0aW9uIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCi0KLVVzYWdlCi09PT09PQotCi1UaGUg
Y29tcGxldGUgZG9jdW1lbnRhdGlvbiBmb3IgUHJvdG9jb2wgQnVmZmVycyBpcyBhdmFpbGFibGUg
dmlhIHRoZQotd2ViIGF0OgotCi0gIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0KLUMrKyBJbXBsZW1lbnRhdGlvbgotPT09PT09PT09PT09PT09PT09Ci0K
LVRoZSBDKysgaW1wbGVtZW50YXRpb24gZm9yIFB5dGhvbiBtZXNzYWdlcyBpcyBidWlsdCBhcyBh
IFB5dGhvbiBleHRlbnNpb24gdG8KLWltcHJvdmUgdGhlIG92ZXJhbGwgcHJvdG9idWYgUHl0aG9u
IHBlcmZvcm1hbmNlLgotCi1UbyB1c2UgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbiwgeW91IG5lZWQg
dG8gaW5zdGFsbCB0aGUgQysrIHByb3RvYnVmIHJ1bnRpbWUKLWxpYnJhcnksIHBsZWFzZSBzZWUg
aW5zdHJ1Y3Rpb25zIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24v
Z29vZ2xlL19faW5pdF9fLnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL19faW5pdF9fLnB5CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCA1NTg1NjE0MTIyOTk3MGRhMDE3YzJkZGQ1NjcxMWU3MjY4NzM5
ZmRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9u
L2dvb2dsZS9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotdHJ5Ogot
ICBfX2ltcG9ydF9fKCdwa2dfcmVzb3VyY2VzJykuZGVjbGFyZV9uYW1lc3BhY2UoX19uYW1lX18p
Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gIF9fcGF0aF9fID0gX19pbXBvcnRfXygncGtndXRpbCcp
LmV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2ds
ZS9wcm90b2J1Zi9fX2luaXRfXy5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9fX2luaXRfXy5w
eQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMmEzYzY3NzFhMGY3ODAwZDcxNWU5YzU4
Yjc4YzAyOTMxZDAxZTYyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApA
QCAtMSwzOSArMCwwIEBACi0jIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1
dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSMgQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLQotX192ZXJzaW9uX18gPSAnMy4wLjBiMycKLQotaWYgX19uYW1l
X18gIT0gJ19fbWFpbl9fJzoKLSAgdHJ5OgotICAgIF9faW1wb3J0X18oJ3BrZ19yZXNvdXJjZXMn
KS5kZWNsYXJlX25hbWVzcGFjZShfX25hbWVfXykKLSAgZXhjZXB0IEltcG9ydEVycm9yOgotICAg
IF9fcGF0aF9fID0gX19pbXBvcnRfXygncGtndXRpbCcpLmV4dGVuZF9wYXRoKF9fcGF0aF9fLCBf
X25hbWVfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnB5
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHkKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDMyMDliMzRkNTdkOGRhMWQ0NWJjOWU1YTQ1NzI0MTYwM2I3ZDI2MTAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xl
L3Byb3RvYnVmL2Rlc2NyaXB0b3IucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5NzEgKzAsMCBAQAot
IyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMg
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0iIiJEZXNjcmlwdG9ycyBlc3NlbnRpYWxseSBjb250YWluIGV4YWN0bHkgdGhlIGlu
Zm9ybWF0aW9uIGZvdW5kIGluIGEgLnByb3RvCi1maWxlLCBpbiB0eXBlcyB0aGF0IG1ha2UgdGhp
cyBpbmZvcm1hdGlvbiBhY2Nlc3NpYmxlIGluIFB5dGhvbi4KLSIiIgotCi1fX2F1dGhvcl9fID0g
J3JvYmluc29uQGdvb2dsZS5jb20gKFdpbGwgUm9iaW5zb24pJwotCi1pbXBvcnQgc2l4Ci0KLWZy
b20gZ29vZ2xlLnByb3RvYnVmLmludGVybmFsIGltcG9ydCBhcGlfaW1wbGVtZW50YXRpb24KLQot
X1VTRV9DX0RFU0NSSVBUT1JTID0gRmFsc2UKLWlmIGFwaV9pbXBsZW1lbnRhdGlvbi5UeXBlKCkg
PT0gJ2NwcCc6Ci0gICMgVXNlZCBieSBNYWtlRGVzY3JpcHRvciBpbiBjcHAgbW9kZQotICBpbXBv
cnQgb3MKLSAgaW1wb3J0IHV1aWQKLSAgZnJvbSBnb29nbGUucHJvdG9idWYucHlleHQgaW1wb3J0
IF9tZXNzYWdlCi0gIF9VU0VfQ19ERVNDUklQVE9SUyA9IGdldGF0dHIoX21lc3NhZ2UsICdfVVNF
X0NfREVTQ1JJUFRPUlMnLCBGYWxzZSkKLQotCi1jbGFzcyBFcnJvcihFeGNlcHRpb24pOgotICAi
IiJCYXNlIGVycm9yIGZvciB0aGlzIG1vZHVsZS4iIiIKLQotCi1jbGFzcyBUeXBlVHJhbnNmb3Jt
YXRpb25FcnJvcihFcnJvcik6Ci0gICIiIkVycm9yIHRyYW5zZm9ybWluZyBiZXR3ZWVuIHB5dGhv
biBwcm90byB0eXBlIGFuZCBjb3JyZXNwb25kaW5nIEMrKyB0eXBlLiIiIgotCi0KLWlmIF9VU0Vf
Q19ERVNDUklQVE9SUzoKLSAgIyBUaGlzIG1ldGFjbGFzcyBhbGxvd3MgdG8gb3ZlcnJpZGUgdGhl
IGJlaGF2aW9yIG9mIGNvZGUgbGlrZQotICAjICAgICBpc2luc3RhbmNlKG15X2Rlc2NyaXB0b3Is
IEZpZWxkRGVzY3JpcHRvcikKLSAgIyBhbmQgbWFrZSBpdCByZXR1cm4gVHJ1ZSB3aGVuIHRoZSBk
ZXNjcmlwdG9yIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBleHRlbnNpb24KLSAgIyB0eXBlIHdyaXR0
ZW4gaW4gQysrLgotICBjbGFzcyBEZXNjcmlwdG9yTWV0YWNsYXNzKHR5cGUpOgotICAgIGRlZiBf
X2luc3RhbmNlY2hlY2tfXyhjbHMsIG9iaik6Ci0gICAgICBpZiBzdXBlcihEZXNjcmlwdG9yTWV0
YWNsYXNzLCBjbHMpLl9faW5zdGFuY2VjaGVja19fKG9iaik6Ci0gICAgICAgIHJldHVybiBUcnVl
Ci0gICAgICBpZiBpc2luc3RhbmNlKG9iaiwgY2xzLl9DX0RFU0NSSVBUT1JfQ0xBU1MpOgotICAg
ICAgICByZXR1cm4gVHJ1ZQotICAgICAgcmV0dXJuIEZhbHNlCi1lbHNlOgotICAjIFRoZSBzdGFu
ZGFyZCBtZXRhY2xhc3M7IG5vdGhpbmcgY2hhbmdlcy4KLSAgRGVzY3JpcHRvck1ldGFjbGFzcyA9
IHR5cGUKLQotCi1jbGFzcyBEZXNjcmlwdG9yQmFzZShzaXgud2l0aF9tZXRhY2xhc3MoRGVzY3Jp
cHRvck1ldGFjbGFzcykpOgotCi0gICIiIkRlc2NyaXB0b3JzIGJhc2UgY2xhc3MuCi0KLSAgVGhp
cyBjbGFzcyBpcyB0aGUgYmFzZSBvZiBhbGwgZGVzY3JpcHRvciBjbGFzc2VzLiBJdCBwcm92aWRl
cyBjb21tb24gb3B0aW9ucwotICByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCi0KLSAgQXR0cmlidXRl
czoKLSAgICBoYXNfb3B0aW9uczogIFRydWUgaWYgdGhlIGRlc2NyaXB0b3IgaGFzIG5vbi1kZWZh
dWx0IG9wdGlvbnMuICBVc3VhbGx5IGl0Ci0gICAgICAgIGlzIG5vdCBuZWNlc3NhcnkgdG8gcmVh
ZCB0aGlzIC0tIGp1c3QgY2FsbCBHZXRPcHRpb25zKCkgd2hpY2ggd2lsbAotICAgICAgICBoYXBw
aWx5IHJldHVybiB0aGUgZGVmYXVsdCBpbnN0YW5jZS4gIEhvd2V2ZXIsIGl0J3Mgc29tZXRpbWVz
IHVzZWZ1bAotICAgICAgICBmb3IgZWZmaWNpZW5jeSwgYW5kIGFsc28gdXNlZnVsIGluc2lkZSB0
aGUgcHJvdG9idWYgaW1wbGVtZW50YXRpb24gdG8KLSAgICAgICAgYXZvaWQgc29tZSBib290c3Ry
YXBwaW5nIGlzc3Vlcy4KLSAgIiIiCi0KLSAgaWYgX1VTRV9DX0RFU0NSSVBUT1JTOgotICAgICMg
VGhlIGNsYXNzLCBvciB0dXBsZSBvZiBjbGFzc2VzLCB0aGF0IGFyZSBjb25zaWRlcmVkIGFzICJ2
aXJ0dWFsCi0gICAgIyBzdWJjbGFzc2VzIiBvZiB0aGlzIGRlc2NyaXB0b3IgY2xhc3MuCi0gICAg
X0NfREVTQ1JJUFRPUl9DTEFTUyA9ICgpCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMs
IG9wdGlvbnNfY2xhc3NfbmFtZSk6Ci0gICAgIiIiSW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciBn
aXZlbiBpdHMgb3B0aW9ucyBtZXNzYWdlIGFuZCB0aGUgbmFtZSBvZiB0aGUKLSAgICBjbGFzcyBv
ZiB0aGUgb3B0aW9ucyBtZXNzYWdlLiBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgaXMgcmVxdWlyZWQg
aW4gY2FzZQotICAgIHRoZSBvcHRpb25zIG1lc3NhZ2UgaXMgTm9uZSBhbmQgaGFzIHRvIGJlIGNy
ZWF0ZWQuCi0gICAgIiIiCi0gICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLSAgICBzZWxmLl9v
cHRpb25zX2NsYXNzX25hbWUgPSBvcHRpb25zX2NsYXNzX25hbWUKLQotICAgICMgRG9lcyB0aGlz
IGRlc2NyaXB0b3IgaGF2ZSBub24tZGVmYXVsdCBvcHRpb25zPwotICAgIHNlbGYuaGFzX29wdGlv
bnMgPSBvcHRpb25zIGlzIG5vdCBOb25lCi0KLSAgZGVmIF9TZXRPcHRpb25zKHNlbGYsIG9wdGlv
bnMsIG9wdGlvbnNfY2xhc3NfbmFtZSk6Ci0gICAgIiIiU2V0cyB0aGUgZGVzY3JpcHRvcidzIG9w
dGlvbnMKLQotICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBnZW5lcmF0ZWQgcHJvdG8yIGZp
bGVzIHRvIHVwZGF0ZSBkZXNjcmlwdG9yCi0gICAgb3B0aW9ucy4gSXQgbXVzdCBub3QgYmUgdXNl
ZCBvdXRzaWRlIHByb3RvMi4KLSAgICAiIiIKLSAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwot
ICAgIHNlbGYuX29wdGlvbnNfY2xhc3NfbmFtZSA9IG9wdGlvbnNfY2xhc3NfbmFtZQotCi0gICAg
IyBEb2VzIHRoaXMgZGVzY3JpcHRvciBoYXZlIG5vbi1kZWZhdWx0IG9wdGlvbnM/Ci0gICAgc2Vs
Zi5oYXNfb3B0aW9ucyA9IG9wdGlvbnMgaXMgbm90IE5vbmUKLQotICBkZWYgR2V0T3B0aW9ucyhz
ZWxmKToKLSAgICAiIiJSZXRyaWV2ZXMgZGVzY3JpcHRvciBvcHRpb25zLgotCi0gICAgVGhpcyBt
ZXRob2QgcmV0dXJucyB0aGUgb3B0aW9ucyBzZXQgb3IgY3JlYXRlcyB0aGUgZGVmYXVsdCBvcHRp
b25zIGZvciB0aGUKLSAgICBkZXNjcmlwdG9yLgotICAgICIiIgotICAgIGlmIHNlbGYuX29wdGlv
bnM6Ci0gICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucwotICAgIGZyb20gZ29vZ2xlLnByb3RvYnVm
IGltcG9ydCBkZXNjcmlwdG9yX3BiMgotICAgIHRyeToKLSAgICAgIG9wdGlvbnNfY2xhc3MgPSBn
ZXRhdHRyKGRlc2NyaXB0b3JfcGIyLCBzZWxmLl9vcHRpb25zX2NsYXNzX25hbWUpCi0gICAgZXhj
ZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdVbmtub3duIG9w
dGlvbnMgY2xhc3MgbmFtZSAlcyEnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5f
b3B0aW9uc19jbGFzc19uYW1lKSkKLSAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9uc19jbGFzcygp
Ci0gICAgcmV0dXJuIHNlbGYuX29wdGlvbnMKLQotCi1jbGFzcyBfTmVzdGVkRGVzY3JpcHRvckJh
c2UoRGVzY3JpcHRvckJhc2UpOgotICAiIiJDb21tb24gY2xhc3MgZm9yIGRlc2NyaXB0b3JzIHRo
YXQgY2FuIGJlIG5lc3RlZC4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgb3B0
aW9uc19jbGFzc19uYW1lLCBuYW1lLCBmdWxsX25hbWUsCi0gICAgICAgICAgICAgICBmaWxlLCBj
b250YWluaW5nX3R5cGUsIHNlcmlhbGl6ZWRfc3RhcnQ9Tm9uZSwKLSAgICAgICAgICAgICAgIHNl
cmlhbGl6ZWRfZW5kPU5vbmUpOgotICAgICIiIkNvbnN0cnVjdG9yLgotCi0gICAgQXJnczoKLSAg
ICAgIG9wdGlvbnM6IFByb3RvY29sIG1lc3NhZ2Ugb3B0aW9ucyBvciBOb25lCi0gICAgICAgIHRv
IHVzZSBkZWZhdWx0IG1lc3NhZ2Ugb3B0aW9ucy4KLSAgICAgIG9wdGlvbnNfY2xhc3NfbmFtZTog
KHN0cikgVGhlIGNsYXNzIG5hbWUgb2YgdGhlIGFib3ZlIG9wdGlvbnMuCi0KLSAgICAgIG5hbWU6
IChzdHIpIE5hbWUgb2YgdGhpcyBwcm90b2NvbCBtZXNzYWdlIHR5cGUuCi0gICAgICBmdWxsX25h
bWU6IChzdHIpIEZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoaXMgcHJvdG9jb2wgbWVzc2FnZSB0
eXBlLAotICAgICAgICB3aGljaCB3aWxsIGluY2x1ZGUgcHJvdG9jb2wgInBhY2thZ2UiIG5hbWUg
YW5kIHRoZSBuYW1lIG9mIGFueQotICAgICAgICBlbmNsb3NpbmcgdHlwZXMuCi0gICAgICBmaWxl
OiAoRmlsZURlc2NyaXB0b3IpIFJlZmVyZW5jZSB0byBmaWxlIGluZm8uCi0gICAgICBjb250YWlu
aW5nX3R5cGU6IGlmIHByb3ZpZGVkLCB0aGlzIGlzIGEgbmVzdGVkIGRlc2NyaXB0b3IsIHdpdGgg
dGhpcwotICAgICAgICBkZXNjcmlwdG9yIGFzIHBhcmVudCwgb3RoZXJ3aXNlIE5vbmUuCi0gICAg
ICBzZXJpYWxpemVkX3N0YXJ0OiBUaGUgc3RhcnQgaW5kZXggKGluY2x1c2l2ZSkgaW4gYmxvY2sg
aW4gdGhlCi0gICAgICAgIGZpbGUuc2VyaWFsaXplZF9wYiB0aGF0IGRlc2NyaWJlcyB0aGlzIGRl
c2NyaXB0b3IuCi0gICAgICBzZXJpYWxpemVkX2VuZDogVGhlIGVuZCBpbmRleCAoZXhjbHVzaXZl
KSBpbiBibG9jayBpbiB0aGUKLSAgICAgICAgZmlsZS5zZXJpYWxpemVkX3BiIHRoYXQgZGVzY3Jp
YmVzIHRoaXMgZGVzY3JpcHRvci4KLSAgICAiIiIKLSAgICBzdXBlcihfTmVzdGVkRGVzY3JpcHRv
ckJhc2UsIHNlbGYpLl9faW5pdF9fKAotICAgICAgICBvcHRpb25zLCBvcHRpb25zX2NsYXNzX25h
bWUpCi0KLSAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgIyBUT0RPKGZhbGspOiBBZGQgZnVuY3Rp
b24gdG8gY2FsY3VsYXRlIGZ1bGxfbmFtZSBpbnN0ZWFkIG9mIGhhdmluZyBpdCBpbgotICAgICMg
ICAgICAgICAgICAgbWVtb3J5PwotICAgIHNlbGYuZnVsbF9uYW1lID0gZnVsbF9uYW1lCi0gICAg
c2VsZi5maWxlID0gZmlsZQotICAgIHNlbGYuY29udGFpbmluZ190eXBlID0gY29udGFpbmluZ190
eXBlCi0KLSAgICBzZWxmLl9zZXJpYWxpemVkX3N0YXJ0ID0gc2VyaWFsaXplZF9zdGFydAotICAg
IHNlbGYuX3NlcmlhbGl6ZWRfZW5kID0gc2VyaWFsaXplZF9lbmQKLQotICBkZWYgR2V0VG9wTGV2
ZWxDb250YWluaW5nVHlwZShzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSByb290IGlmIHRoaXMg
aXMgYSBuZXN0ZWQgdHlwZSwgb3IgaXRzZWxmIGlmIGl0cyB0aGUgcm9vdC4iIiIKLSAgICBkZXNj
ID0gc2VsZgotICAgIHdoaWxlIGRlc2MuY29udGFpbmluZ190eXBlIGlzIG5vdCBOb25lOgotICAg
ICAgZGVzYyA9IGRlc2MuY29udGFpbmluZ190eXBlCi0gICAgcmV0dXJuIGRlc2MKLQotICBkZWYg
Q29weVRvUHJvdG8oc2VsZiwgcHJvdG8pOgotICAgICIiIkNvcGllcyB0aGlzIHRvIHRoZSBtYXRj
aGluZyBwcm90byBpbiBkZXNjcmlwdG9yX3BiMi4KLQotICAgIEFyZ3M6Ci0gICAgICBwcm90bzog
QW4gZW1wdHkgcHJvdG8gaW5zdGFuY2UgZnJvbSBkZXNjcmlwdG9yX3BiMi4KLQotICAgIFJhaXNl
czoKLSAgICAgIEVycm9yOiBJZiBzZWxmIGNvdWxkbnQgYmUgc2VyaWFsaXplZCwgZHVlIHRvIHRv
IGZldyBjb25zdHJ1Y3RvciBhcmd1bWVudHMuCi0gICAgIiIiCi0gICAgaWYgKHNlbGYuZmlsZSBp
cyBub3QgTm9uZSBhbmQKLSAgICAgICAgc2VsZi5fc2VyaWFsaXplZF9zdGFydCBpcyBub3QgTm9u
ZSBhbmQKLSAgICAgICAgc2VsZi5fc2VyaWFsaXplZF9lbmQgaXMgbm90IE5vbmUpOgotICAgICAg
cHJvdG8uUGFyc2VGcm9tU3RyaW5nKHNlbGYuZmlsZS5zZXJpYWxpemVkX3BiWwotICAgICAgICAg
IHNlbGYuX3NlcmlhbGl6ZWRfc3RhcnQ6c2VsZi5fc2VyaWFsaXplZF9lbmRdKQotICAgIGVsc2U6
Ci0gICAgICByYWlzZSBFcnJvcignRGVzY3JpcHRvciBkb2VzIG5vdCBjb250YWluIHNlcmlhbGl6
YXRpb24uJykKLQotCi1jbGFzcyBEZXNjcmlwdG9yKF9OZXN0ZWREZXNjcmlwdG9yQmFzZSk6Ci0K
LSAgIiIiRGVzY3JpcHRvciBmb3IgYSBwcm90b2NvbCBtZXNzYWdlIHR5cGUuCi0KLSAgQSBEZXNj
cmlwdG9yIGluc3RhbmNlIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6Ci0KLSAgICBuYW1l
OiAoc3RyKSBOYW1lIG9mIHRoaXMgcHJvdG9jb2wgbWVzc2FnZSB0eXBlLgotICAgIGZ1bGxfbmFt
ZTogKHN0cikgRnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhpcyBwcm90b2NvbCBtZXNzYWdlIHR5
cGUsCi0gICAgICB3aGljaCB3aWxsIGluY2x1ZGUgcHJvdG9jb2wgInBhY2thZ2UiIG5hbWUgYW5k
IHRoZSBuYW1lIG9mIGFueQotICAgICAgZW5jbG9zaW5nIHR5cGVzLgotCi0gICAgY29udGFpbmlu
Z190eXBlOiAoRGVzY3JpcHRvcikgUmVmZXJlbmNlIHRvIHRoZSBkZXNjcmlwdG9yIG9mIHRoZQot
ICAgICAgdHlwZSBjb250YWluaW5nIHVzLCBvciBOb25lIGlmIHRoaXMgaXMgdG9wLWxldmVsLgot
Ci0gICAgZmllbGRzOiAobGlzdCBvZiBGaWVsZERlc2NyaXB0b3JzKSBGaWVsZCBkZXNjcmlwdG9y
cyBmb3IgYWxsCi0gICAgICBmaWVsZHMgaW4gdGhpcyB0eXBlLgotICAgIGZpZWxkc19ieV9udW1i
ZXI6IChkaWN0IGludCAtPiBGaWVsZERlc2NyaXB0b3IpIFNhbWUgRmllbGREZXNjcmlwdG9yCi0g
ICAgICBvYmplY3RzIGFzIGluIHxmaWVsZHN8LCBidXQgaW5kZXhlZCBieSAibnVtYmVyIiBhdHRy
aWJ1dGUgaW4gZWFjaAotICAgICAgRmllbGREZXNjcmlwdG9yLgotICAgIGZpZWxkc19ieV9uYW1l
OiAoZGljdCBzdHIgLT4gRmllbGREZXNjcmlwdG9yKSBTYW1lIEZpZWxkRGVzY3JpcHRvcgotICAg
ICAgb2JqZWN0cyBhcyBpbiB8ZmllbGRzfCwgYnV0IGluZGV4ZWQgYnkgIm5hbWUiIGF0dHJpYnV0
ZSBpbiBlYWNoCi0gICAgICBGaWVsZERlc2NyaXB0b3IuCi0gICAgZmllbGRzX2J5X2NhbWVsY2Fz
ZV9uYW1lOiAoZGljdCBzdHIgLT4gRmllbGREZXNjcmlwdG9yKSBTYW1lCi0gICAgICBGaWVsZERl
c2NyaXB0b3Igb2JqZWN0cyBhcyBpbiB8ZmllbGRzfCwgYnV0IGluZGV4ZWQgYnkKLSAgICAgICJj
YW1lbGNhc2VfbmFtZSIgYXR0cmlidXRlIGluIGVhY2ggRmllbGREZXNjcmlwdG9yLgotCi0gICAg
bmVzdGVkX3R5cGVzOiAobGlzdCBvZiBEZXNjcmlwdG9ycykgRGVzY3JpcHRvciByZWZlcmVuY2Vz
Ci0gICAgICBmb3IgYWxsIHByb3RvY29sIG1lc3NhZ2UgdHlwZXMgbmVzdGVkIHdpdGhpbiB0aGlz
IG9uZS4KLSAgICBuZXN0ZWRfdHlwZXNfYnlfbmFtZTogKGRpY3Qgc3RyIC0+IERlc2NyaXB0b3Ip
IFNhbWUgRGVzY3JpcHRvcgotICAgICAgb2JqZWN0cyBhcyBpbiB8bmVzdGVkX3R5cGVzfCwgYnV0
IGluZGV4ZWQgYnkgIm5hbWUiIGF0dHJpYnV0ZQotICAgICAgaW4gZWFjaCBEZXNjcmlwdG9yLgot
Ci0gICAgZW51bV90eXBlczogKGxpc3Qgb2YgRW51bURlc2NyaXB0b3JzKSBFbnVtRGVzY3JpcHRv
ciByZWZlcmVuY2VzCi0gICAgICBmb3IgYWxsIGVudW1zIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyB0
eXBlLgotICAgIGVudW1fdHlwZXNfYnlfbmFtZTogKGRpY3Qgc3RyIC0+RW51bURlc2NyaXB0b3Ip
IFNhbWUgRW51bURlc2NyaXB0b3IKLSAgICAgIG9iamVjdHMgYXMgaW4gfGVudW1fdHlwZXN8LCBi
dXQgaW5kZXhlZCBieSAibmFtZSIgYXR0cmlidXRlCi0gICAgICBpbiBlYWNoIEVudW1EZXNjcmlw
dG9yLgotICAgIGVudW1fdmFsdWVzX2J5X25hbWU6IChkaWN0IHN0ciAtPiBFbnVtVmFsdWVEZXNj
cmlwdG9yKSBEaWN0IG1hcHBpbmcKLSAgICAgIGZyb20gZW51bSB2YWx1ZSBuYW1lIHRvIEVudW1W
YWx1ZURlc2NyaXB0b3IgZm9yIHRoYXQgdmFsdWUuCi0KLSAgICBleHRlbnNpb25zOiAobGlzdCBv
ZiBGaWVsZERlc2NyaXB0b3IpIEFsbCBleHRlbnNpb25zIGRlZmluZWQgZGlyZWN0bHkKLSAgICAg
IHdpdGhpbiB0aGlzIG1lc3NhZ2UgdHlwZSAoTk9UIHdpdGhpbiBhIG5lc3RlZCB0eXBlKS4KLSAg
ICBleHRlbnNpb25zX2J5X25hbWU6IChkaWN0LCBzdHJpbmcgLT4gRmllbGREZXNjcmlwdG9yKSBT
YW1lIEZpZWxkRGVzY3JpcHRvcgotICAgICAgb2JqZWN0cyBhcyB8ZXh0ZW5zaW9uc3wsIGJ1dCBp
bmRleGVkIGJ5ICJuYW1lIiBhdHRyaWJ1dGUgb2YgZWFjaAotICAgICAgRmllbGREZXNjcmlwdG9y
LgotCi0gICAgaXNfZXh0ZW5kYWJsZTogIERvZXMgdGhpcyB0eXBlIGRlZmluZSBhbnkgZXh0ZW5z
aW9uIHJhbmdlcz8KLQotICAgIG9uZW9mczogKGxpc3Qgb2YgT25lb2ZEZXNjcmlwdG9yKSBUaGUg
bGlzdCBvZiBkZXNjcmlwdG9ycyBmb3Igb25lb2YgZmllbGRzCi0gICAgICBpbiB0aGlzIG1lc3Nh
Z2UuCi0gICAgb25lb2ZzX2J5X25hbWU6IChkaWN0IHN0ciAtPiBPbmVvZkRlc2NyaXB0b3IpIFNh
bWUgb2JqZWN0cyBhcyBpbiB8b25lb2ZzfCwKLSAgICAgIGJ1dCBpbmRleGVkIGJ5ICJuYW1lIiBh
dHRyaWJ1dGUuCi0KLSAgICBmaWxlOiAoRmlsZURlc2NyaXB0b3IpIFJlZmVyZW5jZSB0byBmaWxl
IGRlc2NyaXB0b3IuCi0gICIiIgotCi0gIGlmIF9VU0VfQ19ERVNDUklQVE9SUzoKLSAgICBfQ19E
RVNDUklQVE9SX0NMQVNTID0gX21lc3NhZ2UuRGVzY3JpcHRvcgotCi0gICAgZGVmIF9fbmV3X18o
Y2xzLCBuYW1lLCBmdWxsX25hbWUsIGZpbGVuYW1lLCBjb250YWluaW5nX3R5cGUsIGZpZWxkcywK
LSAgICAgICAgICAgICAgICBuZXN0ZWRfdHlwZXMsIGVudW1fdHlwZXMsIGV4dGVuc2lvbnMsIG9w
dGlvbnM9Tm9uZSwKLSAgICAgICAgICAgICAgICBpc19leHRlbmRhYmxlPVRydWUsIGV4dGVuc2lv
bl9yYW5nZXM9Tm9uZSwgb25lb2ZzPU5vbmUsCi0gICAgICAgICAgICAgICAgZmlsZT1Ob25lLCBz
ZXJpYWxpemVkX3N0YXJ0PU5vbmUsIHNlcmlhbGl6ZWRfZW5kPU5vbmUsCi0gICAgICAgICAgICAg
ICAgc3ludGF4PU5vbmUpOgotICAgICAgX21lc3NhZ2UuTWVzc2FnZS5fQ2hlY2tDYWxsZWRGcm9t
R2VuZXJhdGVkRmlsZSgpCi0gICAgICByZXR1cm4gX21lc3NhZ2UuZGVmYXVsdF9wb29sLkZpbmRN
ZXNzYWdlVHlwZUJ5TmFtZShmdWxsX25hbWUpCi0KLSAgIyBOT1RFKHRtYXJlayk6IFRoZSBmaWxl
IGFyZ3VtZW50IHJlZGVmaW5pbmcgYSBidWlsdGluIGlzIG5vdGhpbmcgd2UgY2FuCi0gICMgZml4
IHJpZ2h0IG5vdyBzaW5jZSB3ZSBkb24ndCBrbm93IGhvdyBtYW55IGNsaWVudHMgYWxyZWFkeSBy
ZWx5IG9uIHRoZQotICAjIG5hbWUgb2YgdGhlIGFyZ3VtZW50LgotICBkZWYgX19pbml0X18oc2Vs
ZiwgbmFtZSwgZnVsbF9uYW1lLCBmaWxlbmFtZSwgY29udGFpbmluZ190eXBlLCBmaWVsZHMsCi0g
ICAgICAgICAgICAgICBuZXN0ZWRfdHlwZXMsIGVudW1fdHlwZXMsIGV4dGVuc2lvbnMsIG9wdGlv
bnM9Tm9uZSwKLSAgICAgICAgICAgICAgIGlzX2V4dGVuZGFibGU9VHJ1ZSwgZXh0ZW5zaW9uX3Jh
bmdlcz1Ob25lLCBvbmVvZnM9Tm9uZSwKLSAgICAgICAgICAgICAgIGZpbGU9Tm9uZSwgc2VyaWFs
aXplZF9zdGFydD1Ob25lLCBzZXJpYWxpemVkX2VuZD1Ob25lLAotICAgICAgICAgICAgICAgc3lu
dGF4PU5vbmUpOiAgIyBweWxpbnQ6ZGlzYWJsZT1yZWRlZmluZWQtYnVpbHRpbgotICAgICIiIkFy
Z3VtZW50cyB0byBfX2luaXRfXygpIGFyZSBhcyBkZXNjcmliZWQgaW4gdGhlIGRlc2NyaXB0aW9u
Ci0gICAgb2YgRGVzY3JpcHRvciBmaWVsZHMgYWJvdmUuCi0KLSAgICBOb3RlIHRoYXQgZmlsZW5h
bWUgaXMgYW4gb2Jzb2xldGUgYXJndW1lbnQsIHRoYXQgaXMgbm90IHVzZWQgYW55bW9yZS4KLSAg
ICBQbGVhc2UgdXNlIGZpbGUubmFtZSB0byBhY2Nlc3MgdGhpcyBhcyBhbiBhdHRyaWJ1dGUuCi0g
ICAgIiIiCi0gICAgc3VwZXIoRGVzY3JpcHRvciwgc2VsZikuX19pbml0X18oCi0gICAgICAgIG9w
dGlvbnMsICdNZXNzYWdlT3B0aW9ucycsIG5hbWUsIGZ1bGxfbmFtZSwgZmlsZSwKLSAgICAgICAg
Y29udGFpbmluZ190eXBlLCBzZXJpYWxpemVkX3N0YXJ0PXNlcmlhbGl6ZWRfc3RhcnQsCi0gICAg
ICAgIHNlcmlhbGl6ZWRfZW5kPXNlcmlhbGl6ZWRfZW5kKQotCi0gICAgIyBXZSBoYXZlIGZpZWxk
cyBpbiBhZGRpdGlvbiB0byBmaWVsZHNfYnlfbmFtZSBhbmQgZmllbGRzX2J5X251bWJlciwKLSAg
ICAjIHNvIHRoYXQ6Ci0gICAgIyAgIDEuIENsaWVudHMgY2FuIGluZGV4IGZpZWxkcyBieSAib3Jk
ZXIgaW4gd2hpY2ggdGhleSdyZSBsaXN0ZWQuIgotICAgICMgICAyLiBDbGllbnRzIGNhbiBlYXNp
bHkgaXRlcmF0ZSBvdmVyIGFsbCBmaWVsZHMgd2l0aCB0aGUgdGVyc2UKLSAgICAjICAgICAgc3lu
dGF4OiBmb3IgZiBpbiBkZXNjcmlwdG9yLmZpZWxkczogLi4uCi0gICAgc2VsZi5maWVsZHMgPSBm
aWVsZHMKLSAgICBmb3IgZmllbGQgaW4gc2VsZi5maWVsZHM6Ci0gICAgICBmaWVsZC5jb250YWlu
aW5nX3R5cGUgPSBzZWxmCi0gICAgc2VsZi5maWVsZHNfYnlfbnVtYmVyID0gZGljdCgoZi5udW1i
ZXIsIGYpIGZvciBmIGluIGZpZWxkcykKLSAgICBzZWxmLmZpZWxkc19ieV9uYW1lID0gZGljdCgo
Zi5uYW1lLCBmKSBmb3IgZiBpbiBmaWVsZHMpCi0gICAgc2VsZi5fZmllbGRzX2J5X2NhbWVsY2Fz
ZV9uYW1lID0gTm9uZQotCi0gICAgc2VsZi5uZXN0ZWRfdHlwZXMgPSBuZXN0ZWRfdHlwZXMKLSAg
ICBmb3IgbmVzdGVkX3R5cGUgaW4gbmVzdGVkX3R5cGVzOgotICAgICAgbmVzdGVkX3R5cGUuY29u
dGFpbmluZ190eXBlID0gc2VsZgotICAgIHNlbGYubmVzdGVkX3R5cGVzX2J5X25hbWUgPSBkaWN0
KCh0Lm5hbWUsIHQpIGZvciB0IGluIG5lc3RlZF90eXBlcykKLQotICAgIHNlbGYuZW51bV90eXBl
cyA9IGVudW1fdHlwZXMKLSAgICBmb3IgZW51bV90eXBlIGluIHNlbGYuZW51bV90eXBlczoKLSAg
ICAgIGVudW1fdHlwZS5jb250YWluaW5nX3R5cGUgPSBzZWxmCi0gICAgc2VsZi5lbnVtX3R5cGVz
X2J5X25hbWUgPSBkaWN0KCh0Lm5hbWUsIHQpIGZvciB0IGluIGVudW1fdHlwZXMpCi0gICAgc2Vs
Zi5lbnVtX3ZhbHVlc19ieV9uYW1lID0gZGljdCgKLSAgICAgICAgKHYubmFtZSwgdikgZm9yIHQg
aW4gZW51bV90eXBlcyBmb3IgdiBpbiB0LnZhbHVlcykKLQotICAgIHNlbGYuZXh0ZW5zaW9ucyA9
IGV4dGVuc2lvbnMKLSAgICBmb3IgZXh0ZW5zaW9uIGluIHNlbGYuZXh0ZW5zaW9uczoKLSAgICAg
IGV4dGVuc2lvbi5leHRlbnNpb25fc2NvcGUgPSBzZWxmCi0gICAgc2VsZi5leHRlbnNpb25zX2J5
X25hbWUgPSBkaWN0KChmLm5hbWUsIGYpIGZvciBmIGluIGV4dGVuc2lvbnMpCi0gICAgc2VsZi5p
c19leHRlbmRhYmxlID0gaXNfZXh0ZW5kYWJsZQotICAgIHNlbGYuZXh0ZW5zaW9uX3JhbmdlcyA9
IGV4dGVuc2lvbl9yYW5nZXMKLSAgICBzZWxmLm9uZW9mcyA9IG9uZW9mcyBpZiBvbmVvZnMgaXMg
bm90IE5vbmUgZWxzZSBbXQotICAgIHNlbGYub25lb2ZzX2J5X25hbWUgPSBkaWN0KChvLm5hbWUs
IG8pIGZvciBvIGluIHNlbGYub25lb2ZzKQotICAgIGZvciBvbmVvZiBpbiBzZWxmLm9uZW9mczoK
LSAgICAgIG9uZW9mLmNvbnRhaW5pbmdfdHlwZSA9IHNlbGYKLSAgICBzZWxmLnN5bnRheCA9IHN5
bnRheCBvciAicHJvdG8yIgotCi0gIEBwcm9wZXJ0eQotICBkZWYgZmllbGRzX2J5X2NhbWVsY2Fz
ZV9uYW1lKHNlbGYpOgotICAgIGlmIHNlbGYuX2ZpZWxkc19ieV9jYW1lbGNhc2VfbmFtZSBpcyBO
b25lOgotICAgICAgc2VsZi5fZmllbGRzX2J5X2NhbWVsY2FzZV9uYW1lID0gZGljdCgKLSAgICAg
ICAgICAoZi5jYW1lbGNhc2VfbmFtZSwgZikgZm9yIGYgaW4gc2VsZi5maWVsZHMpCi0gICAgcmV0
dXJuIHNlbGYuX2ZpZWxkc19ieV9jYW1lbGNhc2VfbmFtZQotCi0gIGRlZiBFbnVtVmFsdWVOYW1l
KHNlbGYsIGVudW0sIHZhbHVlKToKLSAgICAiIiJSZXR1cm5zIHRoZSBzdHJpbmcgbmFtZSBvZiBh
biBlbnVtIHZhbHVlLgotCi0gICAgVGhpcyBpcyBqdXN0IGEgc21hbGwgaGVscGVyIG1ldGhvZCB0
byBzaW1wbGlmeSBhIGNvbW1vbiBvcGVyYXRpb24uCi0KLSAgICBBcmdzOgotICAgICAgZW51bTog
c3RyaW5nIG5hbWUgb2YgdGhlIEVudW0uCi0gICAgICB2YWx1ZTogaW50LCB2YWx1ZSBvZiB0aGUg
ZW51bS4KLQotICAgIFJldHVybnM6Ci0gICAgICBzdHJpbmcgbmFtZSBvZiB0aGUgZW51bSB2YWx1
ZS4KLQotICAgIFJhaXNlczoKLSAgICAgIEtleUVycm9yIGlmIGVpdGhlciB0aGUgRW51bSBkb2Vz
bid0IGV4aXN0IG9yIHRoZSB2YWx1ZSBpcyBub3QgYSB2YWxpZAotICAgICAgICB2YWx1ZSBmb3Ig
dGhlIGVudW0uCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuZW51bV90eXBlc19ieV9uYW1lW2Vu
dW1dLnZhbHVlc19ieV9udW1iZXJbdmFsdWVdLm5hbWUKLQotICBkZWYgQ29weVRvUHJvdG8oc2Vs
ZiwgcHJvdG8pOgotICAgICIiIkNvcGllcyB0aGlzIHRvIGEgZGVzY3JpcHRvcl9wYjIuRGVzY3Jp
cHRvclByb3RvLgotCi0gICAgQXJnczoKLSAgICAgIHByb3RvOiBBbiBlbXB0eSBkZXNjcmlwdG9y
X3BiMi5EZXNjcmlwdG9yUHJvdG8uCi0gICAgIiIiCi0gICAgIyBUaGlzIGZ1bmN0aW9uIGlzIG92
ZXJyaWRlbiB0byBnaXZlIGEgYmV0dGVyIGRvYyBjb21tZW50LgotICAgIHN1cGVyKERlc2NyaXB0
b3IsIHNlbGYpLkNvcHlUb1Byb3RvKHByb3RvKQotCi0KLSMgVE9ETyhyb2JpbnNvbik6IFdlIHNo
b3VsZCBoYXZlIGFnZ3Jlc3NpdmUgY2hlY2tpbmcgaGVyZSwKLSMgZm9yIGV4YW1wbGU6Ci0jICAg
KiBJZiB5b3Ugc3BlY2lmeSBhIHJlcGVhdGVkIGZpZWxkLCB5b3Ugc2hvdWxkIG5vdCBiZSBhbGxv
d2VkCi0jICAgICB0byBzcGVjaWZ5IGEgZGVmYXVsdCB2YWx1ZS4KLSMgICAqIFtPdGhlciBleGFt
cGxlcyBoZXJlIGFzIG5lZWRlZF0uCi0jCi0jIFRPRE8ocm9iaW5zb24pOiBmb3IgdGhpcyBhbmQg
b3RoZXIgKkRlc2NyaXB0b3IgY2xhc3Nlcywgd2UKLSMgbWlnaHQgYWxzbyB3YW50IHRvIGxvY2sg
dGhpbmdzIGRvd24gYWdncmVzc2l2ZWx5IChlLmcuLAotIyBwcmV2ZW50IGNsaWVudHMgZnJvbSBz
ZXR0aW5nIHRoZSBhdHRyaWJ1dGVzKS4gIEhhdmluZwotIyBzdHJvbmdlciBpbnZhcmlhbnRzIGhl
cmUgaW4gZ2VuZXJhbCB3aWxsIHJlZHVjZSB0aGUgbnVtYmVyCi0jIG9mIHJ1bnRpbWUgY2hlY2tz
IHdlIG11c3QgZG8gaW4gcmVmbGVjdGlvbi5weS4uLgotY2xhc3MgRmllbGREZXNjcmlwdG9yKERl
c2NyaXB0b3JCYXNlKToKLQotICAiIiJEZXNjcmlwdG9yIGZvciBhIHNpbmdsZSBmaWVsZCBpbiBh
IC5wcm90byBmaWxlLgotCi0gIEEgRmllbGREZXNjcmlwdG9yIGluc3RhbmNlIGhhcyB0aGUgZm9s
bG93aW5nIGF0dHJpYnV0ZXM6Ci0KLSAgICBuYW1lOiAoc3RyKSBOYW1lIG9mIHRoaXMgZmllbGQs
IGV4YWN0bHkgYXMgaXQgYXBwZWFycyBpbiAucHJvdG8uCi0gICAgZnVsbF9uYW1lOiAoc3RyKSBO
YW1lIG9mIHRoaXMgZmllbGQsIGluY2x1ZGluZyBjb250YWluaW5nIHNjb3BlLiAgVGhpcyBpcwot
ICAgICAgcGFydGljdWxhcmx5IHJlbGV2YW50IGZvciBleHRlbnNpb25zLgotICAgIGNhbWVsY2Fz
ZV9uYW1lOiAoc3RyKSBDYW1lbGNhc2UgbmFtZSBvZiB0aGlzIGZpZWxkLgotICAgIGluZGV4OiAo
aW50KSBEZW5zZSwgMC1pbmRleGVkIGluZGV4IGdpdmluZyB0aGUgb3JkZXIgdGhhdCB0aGlzCi0g
ICAgICBmaWVsZCB0ZXh0dWFsbHkgYXBwZWFycyB3aXRoaW4gaXRzIG1lc3NhZ2UgaW4gdGhlIC5w
cm90byBmaWxlLgotICAgIG51bWJlcjogKGludCkgVGFnIG51bWJlciBkZWNsYXJlZCBmb3IgdGhp
cyBmaWVsZCBpbiB0aGUgLnByb3RvIGZpbGUuCi0KLSAgICB0eXBlOiAoT25lIG9mIHRoZSBUWVBF
XyogY29uc3RhbnRzIGJlbG93KSBEZWNsYXJlZCB0eXBlLgotICAgIGNwcF90eXBlOiAoT25lIG9m
IHRoZSBDUFBUWVBFXyogY29uc3RhbnRzIGJlbG93KSBDKysgdHlwZSB1c2VkIHRvCi0gICAgICBy
ZXByZXNlbnQgdGhpcyBmaWVsZC4KLQotICAgIGxhYmVsOiAoT25lIG9mIHRoZSBMQUJFTF8qIGNv
bnN0YW50cyBiZWxvdykgVGVsbHMgd2hldGhlciB0aGlzCi0gICAgICBmaWVsZCBpcyBvcHRpb25h
bCwgcmVxdWlyZWQsIG9yIHJlcGVhdGVkLgotICAgIGhhc19kZWZhdWx0X3ZhbHVlOiAoYm9vbCkg
VHJ1ZSBpZiB0aGlzIGZpZWxkIGhhcyBhIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCwKLSAgICAgIG90
aGVyd2lzZSBmYWxzZS4KLSAgICBkZWZhdWx0X3ZhbHVlOiAoVmFyaWVzKSBEZWZhdWx0IHZhbHVl
IG9mIHRoaXMgZmllbGQuICBPbmx5Ci0gICAgICBtZWFuaW5nZnVsIGZvciBub24tcmVwZWF0ZWQg
c2NhbGFyIGZpZWxkcy4gIFJlcGVhdGVkIGZpZWxkcwotICAgICAgc2hvdWxkIGFsd2F5cyBzZXQg
dGhpcyB0byBbXSwgYW5kIG5vbi1yZXBlYXRlZCBjb21wb3NpdGUKLSAgICAgIGZpZWxkcyBzaG91
bGQgYWx3YXlzIHNldCB0aGlzIHRvIE5vbmUuCi0KLSAgICBjb250YWluaW5nX3R5cGU6IChEZXNj
cmlwdG9yKSBEZXNjcmlwdG9yIG9mIHRoZSBwcm90b2NvbCBtZXNzYWdlCi0gICAgICB0eXBlIHRo
YXQgY29udGFpbnMgdGhpcyBmaWVsZC4gIFNldCBieSB0aGUgRGVzY3JpcHRvciBjb25zdHJ1Y3Rv
cgotICAgICAgaWYgd2UncmUgcGFzc2VkIGludG8gb25lLgotICAgICAgU29tZXdoYXQgY29uZnVz
aW5nbHksIGZvciBleHRlbnNpb24gZmllbGRzLCB0aGlzIGlzIHRoZQotICAgICAgZGVzY3JpcHRv
ciBvZiB0aGUgRVhURU5ERUQgbWVzc2FnZSwgbm90IHRoZSBkZXNjcmlwdG9yCi0gICAgICBvZiB0
aGUgbWVzc2FnZSBjb250YWluaW5nIHRoaXMgZmllbGQuICAoU2VlIGlzX2V4dGVuc2lvbiBhbmQK
LSAgICAgIGV4dGVuc2lvbl9zY29wZSBiZWxvdykuCi0gICAgbWVzc2FnZV90eXBlOiAoRGVzY3Jp
cHRvcikgSWYgYSBjb21wb3NpdGUgZmllbGQsIGEgZGVzY3JpcHRvcgotICAgICAgb2YgdGhlIG1l
c3NhZ2UgdHlwZSBjb250YWluZWQgaW4gdGhpcyBmaWVsZC4gIE90aGVyd2lzZSwgdGhpcyBpcyBO
b25lLgotICAgIGVudW1fdHlwZTogKEVudW1EZXNjcmlwdG9yKSBJZiB0aGlzIGZpZWxkIGNvbnRh
aW5zIGFuIGVudW0sIGEKLSAgICAgIGRlc2NyaXB0b3Igb2YgdGhhdCBlbnVtLiAgT3RoZXJ3aXNl
LCB0aGlzIGlzIE5vbmUuCi0KLSAgICBpc19leHRlbnNpb246IFRydWUgaWZmIHRoaXMgZGVzY3Jp
YmVzIGFuIGV4dGVuc2lvbiBmaWVsZC4KLSAgICBleHRlbnNpb25fc2NvcGU6IChEZXNjcmlwdG9y
KSBPbmx5IG1lYW5pbmdmdWwgaWYgaXNfZXh0ZW5zaW9uIGlzIFRydWUuCi0gICAgICBHaXZlcyB0
aGUgbWVzc2FnZSB0aGF0IGltbWVkaWF0ZWx5IGNvbnRhaW5zIHRoaXMgZXh0ZW5zaW9uIGZpZWxk
LgotICAgICAgV2lsbCBiZSBOb25lIGlmZiB3ZSdyZSBhIHRvcC1sZXZlbCAoZmlsZS1sZXZlbCkg
ZXh0ZW5zaW9uIGZpZWxkLgotCi0gICAgb3B0aW9uczogKGRlc2NyaXB0b3JfcGIyLkZpZWxkT3B0
aW9ucykgUHJvdG9jb2wgbWVzc2FnZSBmaWVsZCBvcHRpb25zIG9yCi0gICAgICBOb25lIHRvIHVz
ZSBkZWZhdWx0IGZpZWxkIG9wdGlvbnMuCi0KLSAgICBjb250YWluaW5nX29uZW9mOiAoT25lb2ZE
ZXNjcmlwdG9yKSBJZiB0aGUgZmllbGQgaXMgYSBtZW1iZXIgb2YgYSBvbmVvZgotICAgICAgdW5p
b24sIGNvbnRhaW5zIGl0cyBkZXNjcmlwdG9yLiBPdGhlcndpc2UsIE5vbmUuCi0gICIiIgotCi0g
ICMgTXVzdCBiZSBjb25zaXN0ZW50IHdpdGggQysrIEZpZWxkRGVzY3JpcHRvcjo6VHlwZSBlbnVt
IGluCi0gICMgZGVzY3JpcHRvci5oLgotICAjCi0gICMgVE9ETyhyb2JpbnNvbik6IEZpbmQgYSB3
YXkgdG8gZWxpbWluYXRlIHRoaXMgcmVwZXRpdGlvbi4KLSAgVFlQRV9ET1VCTEUgICAgICAgICA9
IDEKLSAgVFlQRV9GTE9BVCAgICAgICAgICA9IDIKLSAgVFlQRV9JTlQ2NCAgICAgICAgICA9IDMK
LSAgVFlQRV9VSU5UNjQgICAgICAgICA9IDQKLSAgVFlQRV9JTlQzMiAgICAgICAgICA9IDUKLSAg
VFlQRV9GSVhFRDY0ICAgICAgICA9IDYKLSAgVFlQRV9GSVhFRDMyICAgICAgICA9IDcKLSAgVFlQ
RV9CT09MICAgICAgICAgICA9IDgKLSAgVFlQRV9TVFJJTkcgICAgICAgICA9IDkKLSAgVFlQRV9H
Uk9VUCAgICAgICAgICA9IDEwCi0gIFRZUEVfTUVTU0FHRSAgICAgICAgPSAxMQotICBUWVBFX0JZ
VEVTICAgICAgICAgID0gMTIKLSAgVFlQRV9VSU5UMzIgICAgICAgICA9IDEzCi0gIFRZUEVfRU5V
TSAgICAgICAgICAgPSAxNAotICBUWVBFX1NGSVhFRDMyICAgICAgID0gMTUKLSAgVFlQRV9TRklY
RUQ2NCAgICAgICA9IDE2Ci0gIFRZUEVfU0lOVDMyICAgICAgICAgPSAxNwotICBUWVBFX1NJTlQ2
NCAgICAgICAgID0gMTgKLSAgTUFYX1RZUEUgICAgICAgICAgICA9IDE4Ci0KLSAgIyBNdXN0IGJl
IGNvbnNpc3RlbnQgd2l0aCBDKysgRmllbGREZXNjcmlwdG9yOjpDcHBUeXBlIGVudW0gaW4KLSAg
IyBkZXNjcmlwdG9yLmguCi0gICMKLSAgIyBUT0RPKHJvYmluc29uKTogRmluZCBhIHdheSB0byBl
bGltaW5hdGUgdGhpcyByZXBldGl0aW9uLgotICBDUFBUWVBFX0lOVDMyICAgICAgID0gMQotICBD
UFBUWVBFX0lOVDY0ICAgICAgID0gMgotICBDUFBUWVBFX1VJTlQzMiAgICAgID0gMwotICBDUFBU
WVBFX1VJTlQ2NCAgICAgID0gNAotICBDUFBUWVBFX0RPVUJMRSAgICAgID0gNQotICBDUFBUWVBF
X0ZMT0FUICAgICAgID0gNgotICBDUFBUWVBFX0JPT0wgICAgICAgID0gNwotICBDUFBUWVBFX0VO
VU0gICAgICAgID0gOAotICBDUFBUWVBFX1NUUklORyAgICAgID0gOQotICBDUFBUWVBFX01FU1NB
R0UgICAgID0gMTAKLSAgTUFYX0NQUFRZUEUgICAgICAgICA9IDEwCi0KLSAgX1BZVEhPTl9UT19D
UFBfUFJPVE9fVFlQRV9NQVAgPSB7Ci0gICAgICBUWVBFX0RPVUJMRTogQ1BQVFlQRV9ET1VCTEUs
Ci0gICAgICBUWVBFX0ZMT0FUOiBDUFBUWVBFX0ZMT0FULAotICAgICAgVFlQRV9FTlVNOiBDUFBU
WVBFX0VOVU0sCi0gICAgICBUWVBFX0lOVDY0OiBDUFBUWVBFX0lOVDY0LAotICAgICAgVFlQRV9T
SU5UNjQ6IENQUFRZUEVfSU5UNjQsCi0gICAgICBUWVBFX1NGSVhFRDY0OiBDUFBUWVBFX0lOVDY0
LAotICAgICAgVFlQRV9VSU5UNjQ6IENQUFRZUEVfVUlOVDY0LAotICAgICAgVFlQRV9GSVhFRDY0
OiBDUFBUWVBFX1VJTlQ2NCwKLSAgICAgIFRZUEVfSU5UMzI6IENQUFRZUEVfSU5UMzIsCi0gICAg
ICBUWVBFX1NGSVhFRDMyOiBDUFBUWVBFX0lOVDMyLAotICAgICAgVFlQRV9TSU5UMzI6IENQUFRZ
UEVfSU5UMzIsCi0gICAgICBUWVBFX1VJTlQzMjogQ1BQVFlQRV9VSU5UMzIsCi0gICAgICBUWVBF
X0ZJWEVEMzI6IENQUFRZUEVfVUlOVDMyLAotICAgICAgVFlQRV9CWVRFUzogQ1BQVFlQRV9TVFJJ
TkcsCi0gICAgICBUWVBFX1NUUklORzogQ1BQVFlQRV9TVFJJTkcsCi0gICAgICBUWVBFX0JPT0w6
IENQUFRZUEVfQk9PTCwKLSAgICAgIFRZUEVfTUVTU0FHRTogQ1BQVFlQRV9NRVNTQUdFLAotICAg
ICAgVFlQRV9HUk9VUDogQ1BQVFlQRV9NRVNTQUdFCi0gICAgICB9Ci0KLSAgIyBNdXN0IGJlIGNv
bnNpc3RlbnQgd2l0aCBDKysgRmllbGREZXNjcmlwdG9yOjpMYWJlbCBlbnVtIGluCi0gICMgZGVz
Y3JpcHRvci5oLgotICAjCi0gICMgVE9ETyhyb2JpbnNvbik6IEZpbmQgYSB3YXkgdG8gZWxpbWlu
YXRlIHRoaXMgcmVwZXRpdGlvbi4KLSAgTEFCRUxfT1BUSU9OQUwgICAgICA9IDEKLSAgTEFCRUxf
UkVRVUlSRUQgICAgICA9IDIKLSAgTEFCRUxfUkVQRUFURUQgICAgICA9IDMKLSAgTUFYX0xBQkVM
ICAgICAgICAgICA9IDMKLQotICAjIE11c3QgYmUgY29uc2lzdGVudCB3aXRoIEMrKyBjb25zdGFu
dHMga01heE51bWJlciwga0ZpcnN0UmVzZXJ2ZWROdW1iZXIsCi0gICMgYW5kIGtMYXN0UmVzZXJ2
ZWROdW1iZXIgaW4gZGVzY3JpcHRvci5oCi0gIE1BWF9GSUVMRF9OVU1CRVIgPSAoMSA8PCAyOSkg
LSAxCi0gIEZJUlNUX1JFU0VSVkVEX0ZJRUxEX05VTUJFUiA9IDE5MDAwCi0gIExBU1RfUkVTRVJW
RURfRklFTERfTlVNQkVSID0gMTk5OTkKLQotICBpZiBfVVNFX0NfREVTQ1JJUFRPUlM6Ci0gICAg
X0NfREVTQ1JJUFRPUl9DTEFTUyA9IF9tZXNzYWdlLkZpZWxkRGVzY3JpcHRvcgotCi0gICAgZGVm
IF9fbmV3X18oY2xzLCBuYW1lLCBmdWxsX25hbWUsIGluZGV4LCBudW1iZXIsIHR5cGUsIGNwcF90
eXBlLCBsYWJlbCwKLSAgICAgICAgICAgICAgICBkZWZhdWx0X3ZhbHVlLCBtZXNzYWdlX3R5cGUs
IGVudW1fdHlwZSwgY29udGFpbmluZ190eXBlLAotICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lv
biwgZXh0ZW5zaW9uX3Njb3BlLCBvcHRpb25zPU5vbmUsCi0gICAgICAgICAgICAgICAgaGFzX2Rl
ZmF1bHRfdmFsdWU9VHJ1ZSwgY29udGFpbmluZ19vbmVvZj1Ob25lKToKLSAgICAgIF9tZXNzYWdl
Lk1lc3NhZ2UuX0NoZWNrQ2FsbGVkRnJvbUdlbmVyYXRlZEZpbGUoKQotICAgICAgaWYgaXNfZXh0
ZW5zaW9uOgotICAgICAgICByZXR1cm4gX21lc3NhZ2UuZGVmYXVsdF9wb29sLkZpbmRFeHRlbnNp
b25CeU5hbWUoZnVsbF9uYW1lKQotICAgICAgZWxzZToKLSAgICAgICAgcmV0dXJuIF9tZXNzYWdl
LmRlZmF1bHRfcG9vbC5GaW5kRmllbGRCeU5hbWUoZnVsbF9uYW1lKQotCi0gIGRlZiBfX2luaXRf
XyhzZWxmLCBuYW1lLCBmdWxsX25hbWUsIGluZGV4LCBudW1iZXIsIHR5cGUsIGNwcF90eXBlLCBs
YWJlbCwKLSAgICAgICAgICAgICAgIGRlZmF1bHRfdmFsdWUsIG1lc3NhZ2VfdHlwZSwgZW51bV90
eXBlLCBjb250YWluaW5nX3R5cGUsCi0gICAgICAgICAgICAgICBpc19leHRlbnNpb24sIGV4dGVu
c2lvbl9zY29wZSwgb3B0aW9ucz1Ob25lLAotICAgICAgICAgICAgICAgaGFzX2RlZmF1bHRfdmFs
dWU9VHJ1ZSwgY29udGFpbmluZ19vbmVvZj1Ob25lKToKLSAgICAiIiJUaGUgYXJndW1lbnRzIGFy
ZSBhcyBkZXNjcmliZWQgaW4gdGhlIGRlc2NyaXB0aW9uIG9mIEZpZWxkRGVzY3JpcHRvcgotICAg
IGF0dHJpYnV0ZXMgYWJvdmUuCi0KLSAgICBOb3RlIHRoYXQgY29udGFpbmluZ190eXBlIG1heSBi
ZSBOb25lLCBhbmQgbWF5IGJlIHNldCBsYXRlciBpZiBuZWNlc3NhcnkKLSAgICAodG8gZGVhbCB3
aXRoIGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlbiBtZXNzYWdlIHR5cGVzLCBmb3IgZXhhbXBs
ZSkuCi0gICAgTGlrZXdpc2UgZm9yIGV4dGVuc2lvbl9zY29wZS4KLSAgICAiIiIKLSAgICBzdXBl
cihGaWVsZERlc2NyaXB0b3IsIHNlbGYpLl9faW5pdF9fKG9wdGlvbnMsICdGaWVsZE9wdGlvbnMn
KQotICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICBzZWxmLmZ1bGxfbmFtZSA9IGZ1bGxfbmFtZQot
ICAgIHNlbGYuX2NhbWVsY2FzZV9uYW1lID0gTm9uZQotICAgIHNlbGYuaW5kZXggPSBpbmRleAot
ICAgIHNlbGYubnVtYmVyID0gbnVtYmVyCi0gICAgc2VsZi50eXBlID0gdHlwZQotICAgIHNlbGYu
Y3BwX3R5cGUgPSBjcHBfdHlwZQotICAgIHNlbGYubGFiZWwgPSBsYWJlbAotICAgIHNlbGYuaGFz
X2RlZmF1bHRfdmFsdWUgPSBoYXNfZGVmYXVsdF92YWx1ZQotICAgIHNlbGYuZGVmYXVsdF92YWx1
ZSA9IGRlZmF1bHRfdmFsdWUKLSAgICBzZWxmLmNvbnRhaW5pbmdfdHlwZSA9IGNvbnRhaW5pbmdf
dHlwZQotICAgIHNlbGYubWVzc2FnZV90eXBlID0gbWVzc2FnZV90eXBlCi0gICAgc2VsZi5lbnVt
X3R5cGUgPSBlbnVtX3R5cGUKLSAgICBzZWxmLmlzX2V4dGVuc2lvbiA9IGlzX2V4dGVuc2lvbgot
ICAgIHNlbGYuZXh0ZW5zaW9uX3Njb3BlID0gZXh0ZW5zaW9uX3Njb3BlCi0gICAgc2VsZi5jb250
YWluaW5nX29uZW9mID0gY29udGFpbmluZ19vbmVvZgotICAgIGlmIGFwaV9pbXBsZW1lbnRhdGlv
bi5UeXBlKCkgPT0gJ2NwcCc6Ci0gICAgICBpZiBpc19leHRlbnNpb246Ci0gICAgICAgIHNlbGYu
X2NkZXNjcmlwdG9yID0gX21lc3NhZ2UuZGVmYXVsdF9wb29sLkZpbmRFeHRlbnNpb25CeU5hbWUo
ZnVsbF9uYW1lKQotICAgICAgZWxzZToKLSAgICAgICAgc2VsZi5fY2Rlc2NyaXB0b3IgPSBfbWVz
c2FnZS5kZWZhdWx0X3Bvb2wuRmluZEZpZWxkQnlOYW1lKGZ1bGxfbmFtZSkKLSAgICBlbHNlOgot
ICAgICAgc2VsZi5fY2Rlc2NyaXB0b3IgPSBOb25lCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBjYW1l
bGNhc2VfbmFtZShzZWxmKToKLSAgICBpZiBzZWxmLl9jYW1lbGNhc2VfbmFtZSBpcyBOb25lOgot
ICAgICAgc2VsZi5fY2FtZWxjYXNlX25hbWUgPSBfVG9DYW1lbENhc2Uoc2VsZi5uYW1lKQotICAg
IHJldHVybiBzZWxmLl9jYW1lbGNhc2VfbmFtZQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIFBy
b3RvVHlwZVRvQ3BwUHJvdG9UeXBlKHByb3RvX3R5cGUpOgotICAgICIiIkNvbnZlcnRzIGZyb20g
YSBQeXRob24gcHJvdG8gdHlwZSB0byBhIEMrKyBQcm90byBUeXBlLgotCi0gICAgVGhlIFB5dGhv
biBQcm90b2NvbEJ1ZmZlciBjbGFzc2VzIHNwZWNpZnkgYm90aCB0aGUgJ1B5dGhvbicgZGF0YXR5
cGUgYW5kIHRoZQotICAgICdDKysnIGRhdGF0eXBlIC0gYW5kIHRoZXkncmUgbm90IHRoZSBzYW1l
LiBUaGlzIGhlbHBlciBtZXRob2Qgc2hvdWxkCi0gICAgdHJhbnNsYXRlIGZyb20gb25lIHRvIGFu
b3RoZXIuCi0KLSAgICBBcmdzOgotICAgICAgcHJvdG9fdHlwZTogdGhlIFB5dGhvbiBwcm90byB0
eXBlIChkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFXyopCi0gICAgUmV0dXJuczoKLSAg
ICAgIGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfKiwgdGhlIEMrKyB0eXBlLgot
ICAgIFJhaXNlczoKLSAgICAgIFR5cGVUcmFuc2Zvcm1hdGlvbkVycm9yOiB3aGVuIHRoZSBQeXRo
b24gcHJvdG8gdHlwZSBpc24ndCBrbm93bi4KLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICByZXR1
cm4gRmllbGREZXNjcmlwdG9yLl9QWVRIT05fVE9fQ1BQX1BST1RPX1RZUEVfTUFQW3Byb3RvX3R5
cGVdCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgcmFpc2UgVHlwZVRyYW5zZm9ybWF0aW9u
RXJyb3IoJ1Vua25vd24gcHJvdG9fdHlwZTogJXMnICUgcHJvdG9fdHlwZSkKLQotCi1jbGFzcyBF
bnVtRGVzY3JpcHRvcihfTmVzdGVkRGVzY3JpcHRvckJhc2UpOgotCi0gICIiIkRlc2NyaXB0b3Ig
Zm9yIGFuIGVudW0gZGVmaW5lZCBpbiBhIC5wcm90byBmaWxlLgotCi0gIEFuIEVudW1EZXNjcmlw
dG9yIGluc3RhbmNlIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6Ci0KLSAgICBuYW1lOiAo
c3RyKSBOYW1lIG9mIHRoZSBlbnVtIHR5cGUuCi0gICAgZnVsbF9uYW1lOiAoc3RyKSBGdWxsIG5h
bWUgb2YgdGhlIHR5cGUsIGluY2x1ZGluZyBwYWNrYWdlIG5hbWUKLSAgICAgIGFuZCBhbnkgZW5j
bG9zaW5nIHR5cGUocykuCi0KLSAgICB2YWx1ZXM6IChsaXN0IG9mIEVudW1WYWx1ZURlc2NyaXB0
b3JzKSBMaXN0IG9mIHRoZSB2YWx1ZXMKLSAgICAgIGluIHRoaXMgZW51bS4KLSAgICB2YWx1ZXNf
YnlfbmFtZTogKGRpY3Qgc3RyIC0+IEVudW1WYWx1ZURlc2NyaXB0b3IpIFNhbWUgYXMgfHZhbHVl
c3wsCi0gICAgICBidXQgaW5kZXhlZCBieSB0aGUgIm5hbWUiIGZpZWxkIG9mIGVhY2ggRW51bVZh
bHVlRGVzY3JpcHRvci4KLSAgICB2YWx1ZXNfYnlfbnVtYmVyOiAoZGljdCBpbnQgLT4gRW51bVZh
bHVlRGVzY3JpcHRvcikgU2FtZSBhcyB8dmFsdWVzfCwKLSAgICAgIGJ1dCBpbmRleGVkIGJ5IHRo
ZSAibnVtYmVyIiBmaWVsZCBvZiBlYWNoIEVudW1WYWx1ZURlc2NyaXB0b3IuCi0gICAgY29udGFp
bmluZ190eXBlOiAoRGVzY3JpcHRvcikgRGVzY3JpcHRvciBvZiB0aGUgaW1tZWRpYXRlIGNvbnRh
aW5pbmcKLSAgICAgIHR5cGUgb2YgdGhpcyBlbnVtLCBvciBOb25lIGlmIHRoaXMgaXMgYW4gZW51
bSBkZWZpbmVkIGF0IHRoZQotICAgICAgdG9wIGxldmVsIGluIGEgLnByb3RvIGZpbGUuICBTZXQg
YnkgRGVzY3JpcHRvcidzIGNvbnN0cnVjdG9yCi0gICAgICBpZiB3ZSdyZSBwYXNzZWQgaW50byBv
bmUuCi0gICAgZmlsZTogKEZpbGVEZXNjcmlwdG9yKSBSZWZlcmVuY2UgdG8gZmlsZSBkZXNjcmlw
dG9yLgotICAgIG9wdGlvbnM6IChkZXNjcmlwdG9yX3BiMi5FbnVtT3B0aW9ucykgRW51bSBvcHRp
b25zIG1lc3NhZ2Ugb3IKLSAgICAgIE5vbmUgdG8gdXNlIGRlZmF1bHQgZW51bSBvcHRpb25zLgot
ICAiIiIKLQotICBpZiBfVVNFX0NfREVTQ1JJUFRPUlM6Ci0gICAgX0NfREVTQ1JJUFRPUl9DTEFT
UyA9IF9tZXNzYWdlLkVudW1EZXNjcmlwdG9yCi0KLSAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUs
IGZ1bGxfbmFtZSwgZmlsZW5hbWUsIHZhbHVlcywKLSAgICAgICAgICAgICAgICBjb250YWluaW5n
X3R5cGU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBmaWxlPU5vbmUsCi0gICAgICAgICAgICAgICAgc2Vy
aWFsaXplZF9zdGFydD1Ob25lLCBzZXJpYWxpemVkX2VuZD1Ob25lKToKLSAgICAgIF9tZXNzYWdl
Lk1lc3NhZ2UuX0NoZWNrQ2FsbGVkRnJvbUdlbmVyYXRlZEZpbGUoKQotICAgICAgcmV0dXJuIF9t
ZXNzYWdlLmRlZmF1bHRfcG9vbC5GaW5kRW51bVR5cGVCeU5hbWUoZnVsbF9uYW1lKQotCi0gIGRl
ZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBmdWxsX25hbWUsIGZpbGVuYW1lLCB2YWx1ZXMsCi0gICAg
ICAgICAgICAgICBjb250YWluaW5nX3R5cGU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBmaWxlPU5vbmUs
Ci0gICAgICAgICAgICAgICBzZXJpYWxpemVkX3N0YXJ0PU5vbmUsIHNlcmlhbGl6ZWRfZW5kPU5v
bmUpOgotICAgICIiIkFyZ3VtZW50cyBhcmUgYXMgZGVzY3JpYmVkIGluIHRoZSBhdHRyaWJ1dGUg
ZGVzY3JpcHRpb24gYWJvdmUuCi0KLSAgICBOb3RlIHRoYXQgZmlsZW5hbWUgaXMgYW4gb2Jzb2xl
dGUgYXJndW1lbnQsIHRoYXQgaXMgbm90IHVzZWQgYW55bW9yZS4KLSAgICBQbGVhc2UgdXNlIGZp
bGUubmFtZSB0byBhY2Nlc3MgdGhpcyBhcyBhbiBhdHRyaWJ1dGUuCi0gICAgIiIiCi0gICAgc3Vw
ZXIoRW51bURlc2NyaXB0b3IsIHNlbGYpLl9faW5pdF9fKAotICAgICAgICBvcHRpb25zLCAnRW51
bU9wdGlvbnMnLCBuYW1lLCBmdWxsX25hbWUsIGZpbGUsCi0gICAgICAgIGNvbnRhaW5pbmdfdHlw
ZSwgc2VyaWFsaXplZF9zdGFydD1zZXJpYWxpemVkX3N0YXJ0LAotICAgICAgICBzZXJpYWxpemVk
X2VuZD1zZXJpYWxpemVkX2VuZCkKLQotICAgIHNlbGYudmFsdWVzID0gdmFsdWVzCi0gICAgZm9y
IHZhbHVlIGluIHNlbGYudmFsdWVzOgotICAgICAgdmFsdWUudHlwZSA9IHNlbGYKLSAgICBzZWxm
LnZhbHVlc19ieV9uYW1lID0gZGljdCgodi5uYW1lLCB2KSBmb3IgdiBpbiB2YWx1ZXMpCi0gICAg
c2VsZi52YWx1ZXNfYnlfbnVtYmVyID0gZGljdCgodi5udW1iZXIsIHYpIGZvciB2IGluIHZhbHVl
cykKLQotICBkZWYgQ29weVRvUHJvdG8oc2VsZiwgcHJvdG8pOgotICAgICIiIkNvcGllcyB0aGlz
IHRvIGEgZGVzY3JpcHRvcl9wYjIuRW51bURlc2NyaXB0b3JQcm90by4KLQotICAgIEFyZ3M6Ci0g
ICAgICBwcm90bzogQW4gZW1wdHkgZGVzY3JpcHRvcl9wYjIuRW51bURlc2NyaXB0b3JQcm90by4K
LSAgICAiIiIKLSAgICAjIFRoaXMgZnVuY3Rpb24gaXMgb3ZlcnJpZGVuIHRvIGdpdmUgYSBiZXR0
ZXIgZG9jIGNvbW1lbnQuCi0gICAgc3VwZXIoRW51bURlc2NyaXB0b3IsIHNlbGYpLkNvcHlUb1By
b3RvKHByb3RvKQotCi0KLWNsYXNzIEVudW1WYWx1ZURlc2NyaXB0b3IoRGVzY3JpcHRvckJhc2Up
OgotCi0gICIiIkRlc2NyaXB0b3IgZm9yIGEgc2luZ2xlIHZhbHVlIHdpdGhpbiBhbiBlbnVtLgot
Ci0gICAgbmFtZTogKHN0cikgTmFtZSBvZiB0aGlzIHZhbHVlLgotICAgIGluZGV4OiAoaW50KSBE
ZW5zZSwgMC1pbmRleGVkIGluZGV4IGdpdmluZyB0aGUgb3JkZXIgdGhhdCB0aGlzCi0gICAgICB2
YWx1ZSBhcHBlYXJzIHRleHR1YWxseSB3aXRoaW4gaXRzIGVudW0gaW4gdGhlIC5wcm90byBmaWxl
LgotICAgIG51bWJlcjogKGludCkgQWN0dWFsIG51bWJlciBhc3NpZ25lZCB0byB0aGlzIGVudW0g
dmFsdWUuCi0gICAgdHlwZTogKEVudW1EZXNjcmlwdG9yKSBFbnVtRGVzY3JpcHRvciB0byB3aGlj
aCB0aGlzIHZhbHVlCi0gICAgICBiZWxvbmdzLiAgU2V0IGJ5IEVudW1EZXNjcmlwdG9yJ3MgY29u
c3RydWN0b3IgaWYgd2UncmUKLSAgICAgIHBhc3NlZCBpbnRvIG9uZS4KLSAgICBvcHRpb25zOiAo
ZGVzY3JpcHRvcl9wYjIuRW51bVZhbHVlT3B0aW9ucykgRW51bSB2YWx1ZSBvcHRpb25zIG1lc3Nh
Z2Ugb3IKLSAgICAgIE5vbmUgdG8gdXNlIGRlZmF1bHQgZW51bSB2YWx1ZSBvcHRpb25zIG9wdGlv
bnMuCi0gICIiIgotCi0gIGlmIF9VU0VfQ19ERVNDUklQVE9SUzoKLSAgICBfQ19ERVNDUklQVE9S
X0NMQVNTID0gX21lc3NhZ2UuRW51bVZhbHVlRGVzY3JpcHRvcgotCi0gICAgZGVmIF9fbmV3X18o
Y2xzLCBuYW1lLCBpbmRleCwgbnVtYmVyLCB0eXBlPU5vbmUsIG9wdGlvbnM9Tm9uZSk6Ci0gICAg
ICBfbWVzc2FnZS5NZXNzYWdlLl9DaGVja0NhbGxlZEZyb21HZW5lcmF0ZWRGaWxlKCkKLSAgICAg
ICMgVGhlcmUgaXMgbm8gd2F5IHdlIGNhbiBidWlsZCBhIGNvbXBsZXRlIEVudW1WYWx1ZURlc2Ny
aXB0b3Igd2l0aCB0aGUKLSAgICAgICMgZ2l2ZW4gcGFyYW1ldGVycyAodGhlIG5hbWUgb2YgdGhl
IEVudW0gaXMgbm90IGtub3duLCBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEZvcnR1bmF0ZWx5IGdl
bmVyYXRlZCBmaWxlcyBqdXN0IHBhc3MgaXQgdG8gdGhlIEVudW1EZXNjcmlwdG9yKCkKLSAgICAg
ICMgY29uc3RydWN0b3IsIHdoaWNoIHdpbGwgaWdub3JlIGl0LCBzbyByZXR1cm5pbmcgTm9uZSBp
cyBnb29kIGVub3VnaC4KLSAgICAgIHJldHVybiBOb25lCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYs
IG5hbWUsIGluZGV4LCBudW1iZXIsIHR5cGU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKLSAgICAiIiJB
cmd1bWVudHMgYXJlIGFzIGRlc2NyaWJlZCBpbiB0aGUgYXR0cmlidXRlIGRlc2NyaXB0aW9uIGFi
b3ZlLiIiIgotICAgIHN1cGVyKEVudW1WYWx1ZURlc2NyaXB0b3IsIHNlbGYpLl9faW5pdF9fKG9w
dGlvbnMsICdFbnVtVmFsdWVPcHRpb25zJykKLSAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgc2Vs
Zi5pbmRleCA9IGluZGV4Ci0gICAgc2VsZi5udW1iZXIgPSBudW1iZXIKLSAgICBzZWxmLnR5cGUg
PSB0eXBlCi0KLQotY2xhc3MgT25lb2ZEZXNjcmlwdG9yKG9iamVjdCk6Ci0gICIiIkRlc2NyaXB0
b3IgZm9yIGEgb25lb2YgZmllbGQuCi0KLSAgICBuYW1lOiAoc3RyKSBOYW1lIG9mIHRoZSBvbmVv
ZiBmaWVsZC4KLSAgICBmdWxsX25hbWU6IChzdHIpIEZ1bGwgbmFtZSBvZiB0aGUgb25lb2YgZmll
bGQsIGluY2x1ZGluZyBwYWNrYWdlIG5hbWUuCi0gICAgaW5kZXg6IChpbnQpIDAtYmFzZWQgaW5k
ZXggZ2l2aW5nIHRoZSBvcmRlciBvZiB0aGUgb25lb2YgZmllbGQgaW5zaWRlCi0gICAgICBpdHMg
Y29udGFpbmluZyB0eXBlLgotICAgIGNvbnRhaW5pbmdfdHlwZTogKERlc2NyaXB0b3IpIERlc2Ny
aXB0b3Igb2YgdGhlIHByb3RvY29sIG1lc3NhZ2UKLSAgICAgIHR5cGUgdGhhdCBjb250YWlucyB0
aGlzIGZpZWxkLiAgU2V0IGJ5IHRoZSBEZXNjcmlwdG9yIGNvbnN0cnVjdG9yCi0gICAgICBpZiB3
ZSdyZSBwYXNzZWQgaW50byBvbmUuCi0gICAgZmllbGRzOiAobGlzdCBvZiBGaWVsZERlc2NyaXB0
b3IpIFRoZSBsaXN0IG9mIGZpZWxkIGRlc2NyaXB0b3JzIHRoaXMKLSAgICAgIG9uZW9mIGNhbiBj
b250YWluLgotICAiIiIKLQotICBpZiBfVVNFX0NfREVTQ1JJUFRPUlM6Ci0gICAgX0NfREVTQ1JJ
UFRPUl9DTEFTUyA9IF9tZXNzYWdlLk9uZW9mRGVzY3JpcHRvcgotCi0gICAgZGVmIF9fbmV3X18o
Y2xzLCBuYW1lLCBmdWxsX25hbWUsIGluZGV4LCBjb250YWluaW5nX3R5cGUsIGZpZWxkcyk6Ci0g
ICAgICBfbWVzc2FnZS5NZXNzYWdlLl9DaGVja0NhbGxlZEZyb21HZW5lcmF0ZWRGaWxlKCkKLSAg
ICAgIHJldHVybiBfbWVzc2FnZS5kZWZhdWx0X3Bvb2wuRmluZE9uZW9mQnlOYW1lKGZ1bGxfbmFt
ZSkKLQotICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZnVsbF9uYW1lLCBpbmRleCwgY29udGFp
bmluZ190eXBlLCBmaWVsZHMpOgotICAgICIiIkFyZ3VtZW50cyBhcmUgYXMgZGVzY3JpYmVkIGlu
IHRoZSBhdHRyaWJ1dGUgZGVzY3JpcHRpb24gYWJvdmUuIiIiCi0gICAgc2VsZi5uYW1lID0gbmFt
ZQotICAgIHNlbGYuZnVsbF9uYW1lID0gZnVsbF9uYW1lCi0gICAgc2VsZi5pbmRleCA9IGluZGV4
Ci0gICAgc2VsZi5jb250YWluaW5nX3R5cGUgPSBjb250YWluaW5nX3R5cGUKLSAgICBzZWxmLmZp
ZWxkcyA9IGZpZWxkcwotCi0KLWNsYXNzIFNlcnZpY2VEZXNjcmlwdG9yKF9OZXN0ZWREZXNjcmlw
dG9yQmFzZSk6Ci0KLSAgIiIiRGVzY3JpcHRvciBmb3IgYSBzZXJ2aWNlLgotCi0gICAgbmFtZTog
KHN0cikgTmFtZSBvZiB0aGUgc2VydmljZS4KLSAgICBmdWxsX25hbWU6IChzdHIpIEZ1bGwgbmFt
ZSBvZiB0aGUgc2VydmljZSwgaW5jbHVkaW5nIHBhY2thZ2UgbmFtZS4KLSAgICBpbmRleDogKGlu
dCkgMC1pbmRleGVkIGluZGV4IGdpdmluZyB0aGUgb3JkZXIgdGhhdCB0aGlzIHNlcnZpY2VzCi0g
ICAgICBkZWZpbml0aW9uIGFwcGVhcnMgd2l0aGluZyB0aGUgLnByb3RvIGZpbGUuCi0gICAgbWV0
aG9kczogKGxpc3Qgb2YgTWV0aG9kRGVzY3JpcHRvcikgTGlzdCBvZiBtZXRob2RzIHByb3ZpZGVk
IGJ5IHRoaXMKLSAgICAgIHNlcnZpY2UuCi0gICAgb3B0aW9uczogKGRlc2NyaXB0b3JfcGIyLlNl
cnZpY2VPcHRpb25zKSBTZXJ2aWNlIG9wdGlvbnMgbWVzc2FnZSBvcgotICAgICAgTm9uZSB0byB1
c2UgZGVmYXVsdCBzZXJ2aWNlIG9wdGlvbnMuCi0gICAgZmlsZTogKEZpbGVEZXNjcmlwdG9yKSBS
ZWZlcmVuY2UgdG8gZmlsZSBpbmZvLgotICAiIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgbmFt
ZSwgZnVsbF9uYW1lLCBpbmRleCwgbWV0aG9kcywgb3B0aW9ucz1Ob25lLCBmaWxlPU5vbmUsCi0g
ICAgICAgICAgICAgICBzZXJpYWxpemVkX3N0YXJ0PU5vbmUsIHNlcmlhbGl6ZWRfZW5kPU5vbmUp
OgotICAgIHN1cGVyKFNlcnZpY2VEZXNjcmlwdG9yLCBzZWxmKS5fX2luaXRfXygKLSAgICAgICAg
b3B0aW9ucywgJ1NlcnZpY2VPcHRpb25zJywgbmFtZSwgZnVsbF9uYW1lLCBmaWxlLAotICAgICAg
ICBOb25lLCBzZXJpYWxpemVkX3N0YXJ0PXNlcmlhbGl6ZWRfc3RhcnQsCi0gICAgICAgIHNlcmlh
bGl6ZWRfZW5kPXNlcmlhbGl6ZWRfZW5kKQotICAgIHNlbGYuaW5kZXggPSBpbmRleAotICAgIHNl
bGYubWV0aG9kcyA9IG1ldGhvZHMKLSAgICAjIFNldCB0aGUgY29udGFpbmluZyBzZXJ2aWNlIGZv
ciBlYWNoIG1ldGhvZCBpbiB0aGlzIHNlcnZpY2UuCi0gICAgZm9yIG1ldGhvZCBpbiBzZWxmLm1l
dGhvZHM6Ci0gICAgICBtZXRob2QuY29udGFpbmluZ19zZXJ2aWNlID0gc2VsZgotCi0gIGRlZiBG
aW5kTWV0aG9kQnlOYW1lKHNlbGYsIG5hbWUpOgotICAgICIiIlNlYXJjaGVzIGZvciB0aGUgc3Bl
Y2lmaWVkIG1ldGhvZCwgYW5kIHJldHVybnMgaXRzIGRlc2NyaXB0b3IuIiIiCi0gICAgZm9yIG1l
dGhvZCBpbiBzZWxmLm1ldGhvZHM6Ci0gICAgICBpZiBuYW1lID09IG1ldGhvZC5uYW1lOgotICAg
ICAgICByZXR1cm4gbWV0aG9kCi0gICAgcmV0dXJuIE5vbmUKLQotICBkZWYgQ29weVRvUHJvdG8o
c2VsZiwgcHJvdG8pOgotICAgICIiIkNvcGllcyB0aGlzIHRvIGEgZGVzY3JpcHRvcl9wYjIuU2Vy
dmljZURlc2NyaXB0b3JQcm90by4KLQotICAgIEFyZ3M6Ci0gICAgICBwcm90bzogQW4gZW1wdHkg
ZGVzY3JpcHRvcl9wYjIuU2VydmljZURlc2NyaXB0b3JQcm90by4KLSAgICAiIiIKLSAgICAjIFRo
aXMgZnVuY3Rpb24gaXMgb3ZlcnJpZGVuIHRvIGdpdmUgYSBiZXR0ZXIgZG9jIGNvbW1lbnQuCi0g
ICAgc3VwZXIoU2VydmljZURlc2NyaXB0b3IsIHNlbGYpLkNvcHlUb1Byb3RvKHByb3RvKQotCi0K
LWNsYXNzIE1ldGhvZERlc2NyaXB0b3IoRGVzY3JpcHRvckJhc2UpOgotCi0gICIiIkRlc2NyaXB0
b3IgZm9yIGEgbWV0aG9kIGluIGEgc2VydmljZS4KLQotICBuYW1lOiAoc3RyKSBOYW1lIG9mIHRo
ZSBtZXRob2Qgd2l0aGluIHRoZSBzZXJ2aWNlLgotICBmdWxsX25hbWU6IChzdHIpIEZ1bGwgbmFt
ZSBvZiBtZXRob2QuCi0gIGluZGV4OiAoaW50KSAwLWluZGV4ZWQgaW5kZXggb2YgdGhlIG1ldGhv
ZCBpbnNpZGUgdGhlIHNlcnZpY2UuCi0gIGNvbnRhaW5pbmdfc2VydmljZTogKFNlcnZpY2VEZXNj
cmlwdG9yKSBUaGUgc2VydmljZSB0aGF0IGNvbnRhaW5zIHRoaXMKLSAgICBtZXRob2QuCi0gIGlu
cHV0X3R5cGU6IFRoZSBkZXNjcmlwdG9yIG9mIHRoZSBtZXNzYWdlIHRoYXQgdGhpcyBtZXRob2Qg
YWNjZXB0cy4KLSAgb3V0cHV0X3R5cGU6IFRoZSBkZXNjcmlwdG9yIG9mIHRoZSBtZXNzYWdlIHRo
YXQgdGhpcyBtZXRob2QgcmV0dXJucy4KLSAgb3B0aW9uczogKGRlc2NyaXB0b3JfcGIyLk1ldGhv
ZE9wdGlvbnMpIE1ldGhvZCBvcHRpb25zIG1lc3NhZ2Ugb3IKLSAgICBOb25lIHRvIHVzZSBkZWZh
dWx0IG1ldGhvZCBvcHRpb25zLgotICAiIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwg
ZnVsbF9uYW1lLCBpbmRleCwgY29udGFpbmluZ19zZXJ2aWNlLAotICAgICAgICAgICAgICAgaW5w
dXRfdHlwZSwgb3V0cHV0X3R5cGUsIG9wdGlvbnM9Tm9uZSk6Ci0gICAgIiIiVGhlIGFyZ3VtZW50
cyBhcmUgYXMgZGVzY3JpYmVkIGluIHRoZSBkZXNjcmlwdGlvbiBvZiBNZXRob2REZXNjcmlwdG9y
Ci0gICAgYXR0cmlidXRlcyBhYm92ZS4KLQotICAgIE5vdGUgdGhhdCBjb250YWluaW5nX3NlcnZp
Y2UgbWF5IGJlIE5vbmUsIGFuZCBtYXkgYmUgc2V0IGxhdGVyIGlmIG5lY2Vzc2FyeS4KLSAgICAi
IiIKLSAgICBzdXBlcihNZXRob2REZXNjcmlwdG9yLCBzZWxmKS5fX2luaXRfXyhvcHRpb25zLCAn
TWV0aG9kT3B0aW9ucycpCi0gICAgc2VsZi5uYW1lID0gbmFtZQotICAgIHNlbGYuZnVsbF9uYW1l
ID0gZnVsbF9uYW1lCi0gICAgc2VsZi5pbmRleCA9IGluZGV4Ci0gICAgc2VsZi5jb250YWluaW5n
X3NlcnZpY2UgPSBjb250YWluaW5nX3NlcnZpY2UKLSAgICBzZWxmLmlucHV0X3R5cGUgPSBpbnB1
dF90eXBlCi0gICAgc2VsZi5vdXRwdXRfdHlwZSA9IG91dHB1dF90eXBlCi0KLQotY2xhc3MgRmls
ZURlc2NyaXB0b3IoRGVzY3JpcHRvckJhc2UpOgotICAiIiJEZXNjcmlwdG9yIGZvciBhIGZpbGUu
IE1pbWljcyB0aGUgZGVzY3JpcHRvcl9wYjIuRmlsZURlc2NyaXB0b3JQcm90by4KLQotICBOb3Rl
IHRoYXQgZW51bV90eXBlc19ieV9uYW1lLCBleHRlbnNpb25zX2J5X25hbWUsIGFuZCBkZXBlbmRl
bmNpZXMKLSAgZmllbGRzIGFyZSBvbmx5IHNldCBieSB0aGUgbWVzc2FnZV9mYWN0b3J5IG1vZHVs
ZSwgYW5kIG5vdCBieSB0aGUKLSAgZ2VuZXJhdGVkIHByb3RvIGNvZGUuCi0KLSAgbmFtZTogbmFt
ZSBvZiBmaWxlLCByZWxhdGl2ZSB0byByb290IG9mIHNvdXJjZSB0cmVlLgotICBwYWNrYWdlOiBu
YW1lIG9mIHRoZSBwYWNrYWdlCi0gIHN5bnRheDogc3RyaW5nIGluZGljYXRpbmcgc3ludGF4IG9m
IHRoZSBmaWxlIChjYW4gYmUgInByb3RvMiIgb3IgInByb3RvMyIpCi0gIHNlcmlhbGl6ZWRfcGI6
IChzdHIpIEJ5dGUgc3RyaW5nIG9mIHNlcmlhbGl6ZWQKLSAgICBkZXNjcmlwdG9yX3BiMi5GaWxl
RGVzY3JpcHRvclByb3RvLgotICBkZXBlbmRlbmNpZXM6IExpc3Qgb2Ygb3RoZXIgRmlsZURlc2Ny
aXB0b3JzIHRoaXMgRmlsZURlc2NyaXB0b3IgZGVwZW5kcyBvbi4KLSAgcHVibGljX2RlcGVuZGVu
Y2llczogQSBsaXN0IG9mIEZpbGVEZXNjcmlwdG9ycywgc3Vic2V0IG9mIHRoZSBkZXBlbmRlbmNp
ZXMKLSAgICBhYm92ZSwgd2hpY2ggd2VyZSBkZWNsYXJlZCBhcyAicHVibGljIi4KLSAgbWVzc2Fn
ZV90eXBlc19ieV9uYW1lOiBEaWN0IG9mIG1lc3NhZ2UgbmFtZXMgb2YgdGhlaXIgZGVzY3JpcHRv
cnMuCi0gIGVudW1fdHlwZXNfYnlfbmFtZTogRGljdCBvZiBlbnVtIG5hbWVzIGFuZCB0aGVpciBk
ZXNjcmlwdG9ycy4KLSAgZXh0ZW5zaW9uc19ieV9uYW1lOiBEaWN0IG9mIGV4dGVuc2lvbiBuYW1l
cyBhbmQgdGhlaXIgZGVzY3JpcHRvcnMuCi0gIHBvb2w6IHRoZSBEZXNjcmlwdG9yUG9vbCB0aGlz
IGRlc2NyaXB0b3IgYmVsb25ncyB0by4gIFdoZW4gbm90IHBhc3NlZCB0byB0aGUKLSAgICBjb25z
dHJ1Y3RvciwgdGhlIGdsb2JhbCBkZWZhdWx0IHBvb2wgaXMgdXNlZC4KLSAgIiIiCi0KLSAgaWYg
X1VTRV9DX0RFU0NSSVBUT1JTOgotICAgIF9DX0RFU0NSSVBUT1JfQ0xBU1MgPSBfbWVzc2FnZS5G
aWxlRGVzY3JpcHRvcgotCi0gICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBwYWNrYWdlLCBvcHRp
b25zPU5vbmUsIHNlcmlhbGl6ZWRfcGI9Tm9uZSwKLSAgICAgICAgICAgICAgICBkZXBlbmRlbmNp
ZXM9Tm9uZSwgcHVibGljX2RlcGVuZGVuY2llcz1Ob25lLAotICAgICAgICAgICAgICAgIHN5bnRh
eD1Ob25lLCBwb29sPU5vbmUpOgotICAgICAgIyBGaWxlRGVzY3JpcHRvcigpIGlzIGNhbGxlZCBm
cm9tIHZhcmlvdXMgcGxhY2VzLCBub3Qgb25seSBmcm9tIGdlbmVyYXRlZAotICAgICAgIyBmaWxl
cywgdG8gcmVnaXN0ZXIgZHluYW1pYyBwcm90byBmaWxlcyBhbmQgbWVzc2FnZXMuCi0gICAgICBp
ZiBzZXJpYWxpemVkX3BiOgotICAgICAgICAjIFRPRE8oYW1hdXJ5ZmEpOiB1c2UgdGhlIHBvb2wg
cGFzc2VkIGFzIGFyZ3VtZW50LiBUaGlzIHdpbGwgd29yayBvbmx5Ci0gICAgICAgICMgZm9yIEMr
Ky1pbXBsZW1lbnRlZCBEZXNjcmlwdG9yUG9vbHMuCi0gICAgICAgIHJldHVybiBfbWVzc2FnZS5k
ZWZhdWx0X3Bvb2wuQWRkU2VyaWFsaXplZEZpbGUoc2VyaWFsaXplZF9wYikKLSAgICAgIGVsc2U6
Ci0gICAgICAgIHJldHVybiBzdXBlcihGaWxlRGVzY3JpcHRvciwgY2xzKS5fX25ld19fKGNscykK
LQotICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFja2FnZSwgb3B0aW9ucz1Ob25lLCBzZXJp
YWxpemVkX3BiPU5vbmUsCi0gICAgICAgICAgICAgICBkZXBlbmRlbmNpZXM9Tm9uZSwgcHVibGlj
X2RlcGVuZGVuY2llcz1Ob25lLAotICAgICAgICAgICAgICAgc3ludGF4PU5vbmUsIHBvb2w9Tm9u
ZSk6Ci0gICAgIiIiQ29uc3RydWN0b3IuIiIiCi0gICAgc3VwZXIoRmlsZURlc2NyaXB0b3IsIHNl
bGYpLl9faW5pdF9fKG9wdGlvbnMsICdGaWxlT3B0aW9ucycpCi0KLSAgICBpZiBwb29sIGlzIE5v
bmU6Ci0gICAgICBmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wb29sCi0g
ICAgICBwb29sID0gZGVzY3JpcHRvcl9wb29sLkRlZmF1bHQoKQotICAgIHNlbGYucG9vbCA9IHBv
b2wKLSAgICBzZWxmLm1lc3NhZ2VfdHlwZXNfYnlfbmFtZSA9IHt9Ci0gICAgc2VsZi5uYW1lID0g
bmFtZQotICAgIHNlbGYucGFja2FnZSA9IHBhY2thZ2UKLSAgICBzZWxmLnN5bnRheCA9IHN5bnRh
eCBvciAicHJvdG8yIgotICAgIHNlbGYuc2VyaWFsaXplZF9wYiA9IHNlcmlhbGl6ZWRfcGIKLQot
ICAgIHNlbGYuZW51bV90eXBlc19ieV9uYW1lID0ge30KLSAgICBzZWxmLmV4dGVuc2lvbnNfYnlf
bmFtZSA9IHt9Ci0gICAgc2VsZi5kZXBlbmRlbmNpZXMgPSAoZGVwZW5kZW5jaWVzIG9yIFtdKQot
ICAgIHNlbGYucHVibGljX2RlcGVuZGVuY2llcyA9IChwdWJsaWNfZGVwZW5kZW5jaWVzIG9yIFtd
KQotCi0gICAgaWYgKGFwaV9pbXBsZW1lbnRhdGlvbi5UeXBlKCkgPT0gJ2NwcCcgYW5kCi0gICAg
ICAgIHNlbGYuc2VyaWFsaXplZF9wYiBpcyBub3QgTm9uZSk6Ci0gICAgICBfbWVzc2FnZS5kZWZh
dWx0X3Bvb2wuQWRkU2VyaWFsaXplZEZpbGUoc2VsZi5zZXJpYWxpemVkX3BiKQotCi0gIGRlZiBD
b3B5VG9Qcm90byhzZWxmLCBwcm90byk6Ci0gICAgIiIiQ29waWVzIHRoaXMgdG8gYSBkZXNjcmlw
dG9yX3BiMi5GaWxlRGVzY3JpcHRvclByb3RvLgotCi0gICAgQXJnczoKLSAgICAgIHByb3RvOiBB
biBlbXB0eSBkZXNjcmlwdG9yX3BiMi5GaWxlRGVzY3JpcHRvclByb3RvLgotICAgICIiIgotICAg
IHByb3RvLlBhcnNlRnJvbVN0cmluZyhzZWxmLnNlcmlhbGl6ZWRfcGIpCi0KLQotZGVmIF9QYXJz
ZU9wdGlvbnMobWVzc2FnZSwgc3RyaW5nKToKLSAgIiIiUGFyc2VzIHNlcmlhbGl6ZWQgb3B0aW9u
cy4KLQotICBUaGlzIGhlbHBlciBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIHNlcmlhbGl6ZWQg
b3B0aW9ucyBpbiBnZW5lcmF0ZWQKLSAgcHJvdG8yIGZpbGVzLiBJdCBtdXN0IG5vdCBiZSB1c2Vk
IG91dHNpZGUgcHJvdG8yLgotICAiIiIKLSAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoc3RyaW5n
KQotICByZXR1cm4gbWVzc2FnZQotCi0KLWRlZiBfVG9DYW1lbENhc2UobmFtZSk6Ci0gICIiIkNv
bnZlcnRzIG5hbWUgdG8gY2FtZWwtY2FzZSBhbmQgcmV0dXJucyBpdC4iIiIKLSAgY2FwaXRhbGl6
ZV9uZXh0ID0gRmFsc2UKLSAgcmVzdWx0ID0gW10KLQotICBmb3IgYyBpbiBuYW1lOgotICAgIGlm
IGMgPT0gJ18nOgotICAgICAgaWYgcmVzdWx0OgotICAgICAgICBjYXBpdGFsaXplX25leHQgPSBU
cnVlCi0gICAgZWxpZiBjYXBpdGFsaXplX25leHQ6Ci0gICAgICByZXN1bHQuYXBwZW5kKGMudXBw
ZXIoKSkKLSAgICAgIGNhcGl0YWxpemVfbmV4dCA9IEZhbHNlCi0gICAgZWxzZToKLSAgICAgIHJl
c3VsdCArPSBjCi0KLSAgIyBMb3dlci1jYXNlIHRoZSBmaXJzdCBsZXR0ZXIuCi0gIGlmIHJlc3Vs
dCBhbmQgcmVzdWx0WzBdLmlzdXBwZXIoKToKLSAgICByZXN1bHRbMF0gPSByZXN1bHRbMF0ubG93
ZXIoKQotICByZXR1cm4gJycuam9pbihyZXN1bHQpCi0KLQotZGVmIE1ha2VEZXNjcmlwdG9yKGRl
c2NfcHJvdG8sIHBhY2thZ2U9JycsIGJ1aWxkX2ZpbGVfaWZfY3BwPVRydWUsCi0gICAgICAgICAg
ICAgICAgICAgc3ludGF4PU5vbmUpOgotICAiIiJNYWtlIGEgcHJvdG9idWYgRGVzY3JpcHRvciBn
aXZlbiBhIERlc2NyaXB0b3JQcm90byBwcm90b2J1Zi4KLQotICBIYW5kbGVzIG5lc3RlZCBkZXNj
cmlwdG9ycy4gTm90ZSB0aGF0IHRoaXMgaXMgbGltaXRlZCB0byB0aGUgc2NvcGUgb2YgZGVmaW5p
bmcKLSAgYSBtZXNzYWdlIGluc2lkZSBvZiBhbm90aGVyIG1lc3NhZ2UuIENvbXBvc2l0ZSBmaWVs
ZHMgY2FuIGN1cnJlbnRseSBvbmx5IGJlCi0gIHJlc29sdmVkIGlmIHRoZSBtZXNzYWdlIGlzIGRl
ZmluZWQgaW4gdGhlIHNhbWUgc2NvcGUgYXMgdGhlIGZpZWxkLgotCi0gIEFyZ3M6Ci0gICAgZGVz
Y19wcm90bzogVGhlIGRlc2NyaXB0b3JfcGIyLkRlc2NyaXB0b3JQcm90byBwcm90b2J1ZiBtZXNz
YWdlLgotICAgIHBhY2thZ2U6IE9wdGlvbmFsIHBhY2thZ2UgbmFtZSBmb3IgdGhlIG5ldyBtZXNz
YWdlIERlc2NyaXB0b3IgKHN0cmluZykuCi0gICAgYnVpbGRfZmlsZV9pZl9jcHA6IFVwZGF0ZSB0
aGUgQysrIGRlc2NyaXB0b3IgcG9vbCBpZiBhcGkgbWF0Y2hlcy4KLSAgICAgICAgICAgICAgICAg
ICAgICAgU2V0IHRvIEZhbHNlIG9uIHJlY3Vyc2lvbiwgc28gbm8gZHVwbGljYXRlcyBhcmUgY3Jl
YXRlZC4KLSAgICBzeW50YXg6IFRoZSBzeW50YXgvc2VtYW50aWNzIHRoYXQgc2hvdWxkIGJlIHVz
ZWQuICBTZXQgdG8gInByb3RvMyIgdG8gZ2V0Ci0gICAgICAgICAgICBwcm90bzMgZmllbGQgcHJl
c2VuY2Ugc2VtYW50aWNzLgotICBSZXR1cm5zOgotICAgIEEgRGVzY3JpcHRvciBmb3IgcHJvdG9i
dWYgbWVzc2FnZXMuCi0gICIiIgotICBpZiBhcGlfaW1wbGVtZW50YXRpb24uVHlwZSgpID09ICdj
cHAnIGFuZCBidWlsZF9maWxlX2lmX2NwcDoKLSAgICAjIFRoZSBDKysgaW1wbGVtZW50YXRpb24g
cmVxdWlyZXMgYWxsIGRlc2NyaXB0b3JzIHRvIGJlIGJhY2tlZCBieSB0aGUgc2FtZQotICAgICMg
ZGVmaW5pdGlvbiBpbiB0aGUgQysrIGRlc2NyaXB0b3IgcG9vbC4gVG8gZG8gdGhpcywgd2UgYnVp
bGQgYQotICAgICMgRmlsZURlc2NyaXB0b3JQcm90byB3aXRoIHRoZSBzYW1lIGRlZmluaXRpb24g
YXMgdGhpcyBkZXNjcmlwdG9yIGFuZCBidWlsZAotICAgICMgaXQgaW50byB0aGUgcG9vbC4KLSAg
ICBmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wYjIKLSAgICBmaWxlX2Rl
c2NyaXB0b3JfcHJvdG8gPSBkZXNjcmlwdG9yX3BiMi5GaWxlRGVzY3JpcHRvclByb3RvKCkKLSAg
ICBmaWxlX2Rlc2NyaXB0b3JfcHJvdG8ubWVzc2FnZV90eXBlLmFkZCgpLk1lcmdlRnJvbShkZXNj
X3Byb3RvKQotCi0gICAgIyBHZW5lcmF0ZSBhIHJhbmRvbSBuYW1lIGZvciB0aGlzIHByb3RvIGZp
bGUgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBhbnkKLSAgICAjIGltcG9ydGVkIG9uZXMuIFdl
IG5lZWQgdG8gc3BlY2lmeSBhIGZpbGUgbmFtZSBzbyB0aGUgZGVzY3JpcHRvciBwb29sCi0gICAg
IyBhY2NlcHRzIG91ciBGaWxlRGVzY3JpcHRvclByb3RvLCBidXQgaXQgaXMgbm90IGltcG9ydGFu
dCB3aGF0IHRoYXQgZmlsZQotICAgICMgbmFtZSBpcyBhY3R1YWxseSBzZXQgdG8uCi0gICAgcHJv
dG9fbmFtZSA9IHN0cih1dWlkLnV1aWQ0KCkpCi0KLSAgICBpZiBwYWNrYWdlOgotICAgICAgZmls
ZV9kZXNjcmlwdG9yX3Byb3RvLm5hbWUgPSBvcy5wYXRoLmpvaW4ocGFja2FnZS5yZXBsYWNlKCcu
JywgJy8nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb3RvX25hbWUgKyAnLnByb3RvJykKLSAgICAgIGZpbGVfZGVzY3JpcHRvcl9wcm90by5wYWNr
YWdlID0gcGFja2FnZQotICAgIGVsc2U6Ci0gICAgICBmaWxlX2Rlc2NyaXB0b3JfcHJvdG8ubmFt
ZSA9IHByb3RvX25hbWUgKyAnLnByb3RvJwotCi0gICAgX21lc3NhZ2UuZGVmYXVsdF9wb29sLkFk
ZChmaWxlX2Rlc2NyaXB0b3JfcHJvdG8pCi0gICAgcmVzdWx0ID0gX21lc3NhZ2UuZGVmYXVsdF9w
b29sLkZpbmRGaWxlQnlOYW1lKGZpbGVfZGVzY3JpcHRvcl9wcm90by5uYW1lKQotCi0gICAgaWYg
X1VTRV9DX0RFU0NSSVBUT1JTOgotICAgICAgcmV0dXJuIHJlc3VsdC5tZXNzYWdlX3R5cGVzX2J5
X25hbWVbZGVzY19wcm90by5uYW1lXQotCi0gIGZ1bGxfbWVzc2FnZV9uYW1lID0gW2Rlc2NfcHJv
dG8ubmFtZV0KLSAgaWYgcGFja2FnZTogZnVsbF9tZXNzYWdlX25hbWUuaW5zZXJ0KDAsIHBhY2th
Z2UpCi0KLSAgIyBDcmVhdGUgRGVzY3JpcHRvcnMgZm9yIGVudW0gdHlwZXMKLSAgZW51bV90eXBl
cyA9IHt9Ci0gIGZvciBlbnVtX3Byb3RvIGluIGRlc2NfcHJvdG8uZW51bV90eXBlOgotICAgIGZ1
bGxfbmFtZSA9ICcuJy5qb2luKGZ1bGxfbWVzc2FnZV9uYW1lICsgW2VudW1fcHJvdG8ubmFtZV0p
Ci0gICAgZW51bV9kZXNjID0gRW51bURlc2NyaXB0b3IoCi0gICAgICBlbnVtX3Byb3RvLm5hbWUs
IGZ1bGxfbmFtZSwgTm9uZSwgWwotICAgICAgICAgIEVudW1WYWx1ZURlc2NyaXB0b3IoZW51bV92
YWwubmFtZSwgaWksIGVudW1fdmFsLm51bWJlcikKLSAgICAgICAgICBmb3IgaWksIGVudW1fdmFs
IGluIGVudW1lcmF0ZShlbnVtX3Byb3RvLnZhbHVlKV0pCi0gICAgZW51bV90eXBlc1tmdWxsX25h
bWVdID0gZW51bV9kZXNjCi0KLSAgIyBDcmVhdGUgRGVzY3JpcHRvcnMgZm9yIG5lc3RlZCB0eXBl
cwotICBuZXN0ZWRfdHlwZXMgPSB7fQotICBmb3IgbmVzdGVkX3Byb3RvIGluIGRlc2NfcHJvdG8u
bmVzdGVkX3R5cGU6Ci0gICAgZnVsbF9uYW1lID0gJy4nLmpvaW4oZnVsbF9tZXNzYWdlX25hbWUg
KyBbbmVzdGVkX3Byb3RvLm5hbWVdKQotICAgICMgTmVzdGVkIHR5cGVzIGFyZSBqdXN0IHRob3Nl
IGRlZmluZWQgaW5zaWRlIG9mIHRoZSBtZXNzYWdlLCBub3QgYWxsIHR5cGVzCi0gICAgIyB1c2Vk
IGJ5IGZpZWxkcyBpbiB0aGUgbWVzc2FnZSwgc28gbm8gbG9vcHMgYXJlIHBvc3NpYmxlIGhlcmUu
Ci0gICAgbmVzdGVkX2Rlc2MgPSBNYWtlRGVzY3JpcHRvcihuZXN0ZWRfcHJvdG8sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPScuJy5qb2luKGZ1bGxfbWVzc2FnZV9u
YW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX2ZpbGVfaWZfY3Bw
PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4PXN5bnRheCkK
LSAgICBuZXN0ZWRfdHlwZXNbZnVsbF9uYW1lXSA9IG5lc3RlZF9kZXNjCi0KLSAgZmllbGRzID0g
W10KLSAgZm9yIGZpZWxkX3Byb3RvIGluIGRlc2NfcHJvdG8uZmllbGQ6Ci0gICAgZnVsbF9uYW1l
ID0gJy4nLmpvaW4oZnVsbF9tZXNzYWdlX25hbWUgKyBbZmllbGRfcHJvdG8ubmFtZV0pCi0gICAg
ZW51bV9kZXNjID0gTm9uZQotICAgIG5lc3RlZF9kZXNjID0gTm9uZQotICAgIGlmIGZpZWxkX3By
b3RvLkhhc0ZpZWxkKCd0eXBlX25hbWUnKToKLSAgICAgIHR5cGVfbmFtZSA9IGZpZWxkX3Byb3Rv
LnR5cGVfbmFtZQotICAgICAgZnVsbF90eXBlX25hbWUgPSAnLicuam9pbihmdWxsX21lc3NhZ2Vf
bmFtZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlX25hbWVbdHlwZV9u
YW1lLnJmaW5kKCcuJykrMTpdXSkKLSAgICAgIGlmIGZ1bGxfdHlwZV9uYW1lIGluIG5lc3RlZF90
eXBlczoKLSAgICAgICAgbmVzdGVkX2Rlc2MgPSBuZXN0ZWRfdHlwZXNbZnVsbF90eXBlX25hbWVd
Ci0gICAgICBlbGlmIGZ1bGxfdHlwZV9uYW1lIGluIGVudW1fdHlwZXM6Ci0gICAgICAgIGVudW1f
ZGVzYyA9IGVudW1fdHlwZXNbZnVsbF90eXBlX25hbWVdCi0gICAgICAjIEVsc2UgdHlwZV9uYW1l
IHJlZmVyZW5jZXMgYSBub24tbG9jYWwgdHlwZSwgd2hpY2ggaXNuJ3QgaW1wbGVtZW50ZWQKLSAg
ICBmaWVsZCA9IEZpZWxkRGVzY3JpcHRvcigKLSAgICAgICAgZmllbGRfcHJvdG8ubmFtZSwgZnVs
bF9uYW1lLCBmaWVsZF9wcm90by5udW1iZXIgLSAxLAotICAgICAgICBmaWVsZF9wcm90by5udW1i
ZXIsIGZpZWxkX3Byb3RvLnR5cGUsCi0gICAgICAgIEZpZWxkRGVzY3JpcHRvci5Qcm90b1R5cGVU
b0NwcFByb3RvVHlwZShmaWVsZF9wcm90by50eXBlKSwKLSAgICAgICAgZmllbGRfcHJvdG8ubGFi
ZWwsIE5vbmUsIG5lc3RlZF9kZXNjLCBlbnVtX2Rlc2MsIE5vbmUsIEZhbHNlLCBOb25lLAotICAg
ICAgICBvcHRpb25zPWZpZWxkX3Byb3RvLm9wdGlvbnMsIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNl
KQotICAgIGZpZWxkcy5hcHBlbmQoZmllbGQpCi0KLSAgZGVzY19uYW1lID0gJy4nLmpvaW4oZnVs
bF9tZXNzYWdlX25hbWUpCi0gIHJldHVybiBEZXNjcmlwdG9yKGRlc2NfcHJvdG8ubmFtZSwgZGVz
Y19uYW1lLCBOb25lLCBOb25lLCBmaWVsZHMsCi0gICAgICAgICAgICAgICAgICAgIGxpc3QobmVz
dGVkX3R5cGVzLnZhbHVlcygpKSwgbGlzdChlbnVtX3R5cGVzLnZhbHVlcygpKSwgW10sCi0gICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnM9ZGVzY19wcm90by5vcHRpb25zKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9w
eXRob24vZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfZGF0YWJhc2UucHkgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29n
bGUvcHJvdG9idWYvZGVzY3JpcHRvcl9kYXRhYmFzZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTMzM2Y5OTY2ZTRjZDU1YTI0ZTM0OTYwMmRiMTQxNTBmNWQ0YjViYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJv
dG9idWYvZGVzY3JpcHRvcl9kYXRhYmFzZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCww
IEBACi0jIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMg
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLSIiIlByb3ZpZGVzIGEgY29udGFpbmVyIGZvciBEZXNjcmlwdG9yUHJvdG9z
LiIiIgotCi1fX2F1dGhvcl9fID0gJ21hdHRoZXd0b2lhQGdvb2dsZS5jb20gKE1hdHQgVG9pYSkn
Ci0KLQotY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKLSAgcGFzcwotCi0KLWNsYXNzIERlc2NyaXB0
b3JEYXRhYmFzZUNvbmZsaWN0aW5nRGVmaW5pdGlvbkVycm9yKEVycm9yKToKLSAgIiIiUmFpc2Vk
IHdoZW4gYSBwcm90byBpcyBhZGRlZCB3aXRoIHRoZSBzYW1lIG5hbWUgJiBkaWZmZXJlbnQgZGVz
Y3JpcHRvci4iIiIKLQotCi1jbGFzcyBEZXNjcmlwdG9yRGF0YWJhc2Uob2JqZWN0KToKLSAgIiIi
QSBjb250YWluZXIgYWNjZXB0aW5nIEZpbGVEZXNjcmlwdG9yUHJvdG9zIGFuZCBtYXBzIERlc2Ny
aXB0b3JQcm90b3MuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHNlbGYuX2ZpbGVf
ZGVzY19wcm90b3NfYnlfZmlsZSA9IHt9Ci0gICAgc2VsZi5fZmlsZV9kZXNjX3Byb3Rvc19ieV9z
eW1ib2wgPSB7fQotCi0gIGRlZiBBZGQoc2VsZiwgZmlsZV9kZXNjX3Byb3RvKToKLSAgICAiIiJB
ZGRzIHRoZSBGaWxlRGVzY3JpcHRvclByb3RvIGFuZCBpdHMgdHlwZXMgdG8gdGhpcyBkYXRhYmFz
ZS4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlX2Rlc2NfcHJvdG86IFRoZSBGaWxlRGVzY3JpcHRv
clByb3RvIHRvIGFkZC4KLSAgICBSYWlzZXM6Ci0gICAgICBEZXNjcmlwdG9yRGF0YWJhc2VFeGNl
cHRpb246IGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhZGQgYSBwcm90bwotICAgICAgICB3aXRo
IHRoZSBzYW1lIG5hbWUgYnV0IGRpZmZlcmVudCBkZWZpbml0aW9uIHRoYW4gYW4gZXhpc2l0aW5n
Ci0gICAgICAgIHByb3RvIGluIHRoZSBkYXRhYmFzZS4KLSAgICAiIiIKLSAgICBwcm90b19uYW1l
ID0gZmlsZV9kZXNjX3Byb3RvLm5hbWUKLSAgICBpZiBwcm90b19uYW1lIG5vdCBpbiBzZWxmLl9m
aWxlX2Rlc2NfcHJvdG9zX2J5X2ZpbGU6Ci0gICAgICBzZWxmLl9maWxlX2Rlc2NfcHJvdG9zX2J5
X2ZpbGVbcHJvdG9fbmFtZV0gPSBmaWxlX2Rlc2NfcHJvdG8KLSAgICBlbGlmIHNlbGYuX2ZpbGVf
ZGVzY19wcm90b3NfYnlfZmlsZVtwcm90b19uYW1lXSAhPSBmaWxlX2Rlc2NfcHJvdG86Ci0gICAg
ICByYWlzZSBEZXNjcmlwdG9yRGF0YWJhc2VDb25mbGljdGluZ0RlZmluaXRpb25FcnJvcigKLSAg
ICAgICAgICAnJXMgYWxyZWFkeSBhZGRlZCwgYnV0IHdpdGggZGlmZmVyZW50IGRlc2NyaXB0b3Iu
JyAlIHByb3RvX25hbWUpCi0KLSAgICAjIEFkZCB0aGUgdG9wLWxldmVsIE1lc3NhZ2UsIEVudW0g
YW5kIEV4dGVuc2lvbiBkZXNjcmlwdG9ycyB0byB0aGUgaW5kZXguCi0gICAgcGFja2FnZSA9IGZp
bGVfZGVzY19wcm90by5wYWNrYWdlCi0gICAgZm9yIG1lc3NhZ2UgaW4gZmlsZV9kZXNjX3Byb3Rv
Lm1lc3NhZ2VfdHlwZToKLSAgICAgIHNlbGYuX2ZpbGVfZGVzY19wcm90b3NfYnlfc3ltYm9sLnVw
ZGF0ZSgKLSAgICAgICAgICAobmFtZSwgZmlsZV9kZXNjX3Byb3RvKSBmb3IgbmFtZSBpbiBfRXh0
cmFjdFN5bWJvbHMobWVzc2FnZSwgcGFja2FnZSkpCi0gICAgZm9yIGVudW0gaW4gZmlsZV9kZXNj
X3Byb3RvLmVudW1fdHlwZToKLSAgICAgIHNlbGYuX2ZpbGVfZGVzY19wcm90b3NfYnlfc3ltYm9s
WwotICAgICAgICAgICcuJy5qb2luKChwYWNrYWdlLCBlbnVtLm5hbWUpKV0gPSBmaWxlX2Rlc2Nf
cHJvdG8KLSAgICBmb3IgZXh0ZW5zaW9uIGluIGZpbGVfZGVzY19wcm90by5leHRlbnNpb246Ci0g
ICAgICBzZWxmLl9maWxlX2Rlc2NfcHJvdG9zX2J5X3N5bWJvbFsKLSAgICAgICAgICAnLicuam9p
bigocGFja2FnZSwgZXh0ZW5zaW9uLm5hbWUpKV0gPSBmaWxlX2Rlc2NfcHJvdG8KLQotICBkZWYg
RmluZEZpbGVCeU5hbWUoc2VsZiwgbmFtZSk6Ci0gICAgIiIiRmluZHMgdGhlIGZpbGUgZGVzY3Jp
cHRvciBwcm90byBieSBmaWxlIG5hbWUuCi0KLSAgICBUeXBpY2FsbHkgdGhlIGZpbGUgbmFtZSBp
cyBhIHJlbGF0aXZlIHBhdGggZW5kaW5nIHRvIGEgLnByb3RvIGZpbGUuIFRoZQotICAgIHByb3Rv
IHdpdGggdGhlIGdpdmVuIG5hbWUgd2lsbCBoYXZlIHRvIGhhdmUgYmVlbiBhZGRlZCB0byB0aGlz
IGRhdGFiYXNlCi0gICAgdXNpbmcgdGhlIEFkZCBtZXRob2Qgb3IgZWxzZSBhbiBlcnJvciB3aWxs
IGJlIHJhaXNlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBuYW1lOiBUaGUgZmlsZSBuYW1lIHRvIGZp
bmQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIGZpbGUgZGVzY3JpcHRvciBwcm90byBtYXRj
aGluZyB0aGUgbmFtZS4KLQotICAgIFJhaXNlczoKLSAgICAgIEtleUVycm9yIGlmIG5vIGZpbGUg
YnkgdGhlIGdpdmVuIG5hbWUgd2FzIGFkZGVkLgotICAgICIiIgotCi0gICAgcmV0dXJuIHNlbGYu
X2ZpbGVfZGVzY19wcm90b3NfYnlfZmlsZVtuYW1lXQotCi0gIGRlZiBGaW5kRmlsZUNvbnRhaW5p
bmdTeW1ib2woc2VsZiwgc3ltYm9sKToKLSAgICAiIiJGaW5kcyB0aGUgZmlsZSBkZXNjcmlwdG9y
IHByb3RvIGNvbnRhaW5pbmcgdGhlIHNwZWNpZmllZCBzeW1ib2wuCi0KLSAgICBUaGUgc3ltYm9s
IHNob3VsZCBiZSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGluY2x1ZGluZyB0aGUgZmlsZSBkZXNj
cmlwdG9yJ3MKLSAgICBwYWNrYWdlIGFuZCBhbnkgY29udGFpbmluZyBtZXNzYWdlcy4gU29tZSBl
eGFtcGxlczoKLQotICAgICdzb21lLnBhY2thZ2UubmFtZS5NZXNzYWdlJwotICAgICdzb21lLnBh
Y2thZ2UubmFtZS5NZXNzYWdlLk5lc3RlZEVudW0nCi0KLSAgICBUaGUgZmlsZSBkZXNjcmlwdG9y
IHByb3RvIGNvbnRhaW5pbmcgdGhlIHNwZWNpZmllZCBzeW1ib2wgbXVzdCBiZSBhZGRlZCB0bwot
ICAgIHRoaXMgZGF0YWJhc2UgdXNpbmcgdGhlIEFkZCBtZXRob2Qgb3IgZWxzZSBhbiBlcnJvciB3
aWxsIGJlIHJhaXNlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBzeW1ib2w6IFRoZSBmdWxseSBxdWFs
aWZpZWQgc3ltYm9sIG5hbWUuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIGZpbGUgZGVzY3Jp
cHRvciBwcm90byBjb250YWluaW5nIHRoZSBzeW1ib2wuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBL
ZXlFcnJvciBpZiBubyBmaWxlIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3ltYm9sLgotICAgICIi
IgotCi0gICAgcmV0dXJuIHNlbGYuX2ZpbGVfZGVzY19wcm90b3NfYnlfc3ltYm9sW3N5bWJvbF0K
LQotCi1kZWYgX0V4dHJhY3RTeW1ib2xzKGRlc2NfcHJvdG8sIHBhY2thZ2UpOgotICAiIiJQdWxs
cyBvdXQgYWxsIHRoZSBzeW1ib2xzIGZyb20gYSBkZXNjcmlwdG9yIHByb3RvLgotCi0gIEFyZ3M6
Ci0gICAgZGVzY19wcm90bzogVGhlIHByb3RvIHRvIGV4dHJhY3Qgc3ltYm9scyBmcm9tLgotICAg
IHBhY2thZ2U6IFRoZSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhlIGRlc2NyaXB0b3IgdHlwZS4KLQot
ICBZaWVsZHM6Ci0gICAgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGZvdW5kIGluIHRoZSBkZXNj
cmlwdG9yLgotICAiIiIKLQotICBtZXNzYWdlX25hbWUgPSAnLicuam9pbigocGFja2FnZSwgZGVz
Y19wcm90by5uYW1lKSkKLSAgeWllbGQgbWVzc2FnZV9uYW1lCi0gIGZvciBuZXN0ZWRfdHlwZSBp
biBkZXNjX3Byb3RvLm5lc3RlZF90eXBlOgotICAgIGZvciBzeW1ib2wgaW4gX0V4dHJhY3RTeW1i
b2xzKG5lc3RlZF90eXBlLCBtZXNzYWdlX25hbWUpOgotICAgICAgeWllbGQgc3ltYm9sCi0gIGZv
ciBlbnVtX3R5cGUgaW4gZGVzY19wcm90by5lbnVtX3R5cGU6Ci0gICAgeWllbGQgJy4nLmpvaW4o
KG1lc3NhZ2VfbmFtZSwgZW51bV90eXBlLm5hbWUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xl
L3Byb3RvYnVmL2Rlc2NyaXB0b3JfcGIyLnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2Rlc2Ny
aXB0b3JfcGIyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTNiZTVhYzg3ZmZm
MDYyYTlmMDI0ZmZlZDY0YTM5ZjY5NzQ3YmE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX3BiMi5w
eQorKysgL2Rldi9udWxsCkBAIC0xLDE3OTcgKzAsMCBAQAotIyBHZW5lcmF0ZWQgYnkgdGhlIHBy
b3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQotIyBzb3VyY2U6IGdvb2dsZS9w
cm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvCi0KLWltcG9ydCBzeXMKLV9iPXN5cy52ZXJzaW9uX2lu
Zm9bMF08MyBhbmQgKGxhbWJkYSB4OngpIG9yIChsYW1iZGEgeDp4LmVuY29kZSgnbGF0aW4xJykp
Ci1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvciBhcyBfZGVzY3JpcHRvcgot
ZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IG1lc3NhZ2UgYXMgX21lc3NhZ2UKLWZyb20gZ29v
Z2xlLnByb3RvYnVmIGltcG9ydCByZWZsZWN0aW9uIGFzIF9yZWZsZWN0aW9uCi1mcm9tIGdvb2ds
ZS5wcm90b2J1ZiBpbXBvcnQgc3ltYm9sX2RhdGFiYXNlIGFzIF9zeW1ib2xfZGF0YWJhc2UKLSMg
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGltcG9ydHMpCi0KLV9zeW1fZGIgPSBfc3ltYm9sX2Rh
dGFiYXNlLkRlZmF1bHQoKQotCi0KLQotCi1ERVNDUklQVE9SID0gX2Rlc2NyaXB0b3IuRmlsZURl
c2NyaXB0b3IoCi0gIG5hbWU9J2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvJywKLSAg
cGFja2FnZT0nZ29vZ2xlLnByb3RvYnVmJywKLSAgc3ludGF4PSdwcm90bzInLAotICBzZXJpYWxp
emVkX3BiPV9iKCdcbiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90b1x4MTJceDBmZ29v
Z2xlLnByb3RvYnVmXCJHXG5ceDExXHg0NmlsZURlc2NyaXB0b3JTZXRceDEyXHgzMlxuXHgwNFx4
NjZpbGVceDE4XHgwMSBceDAzKFx4MGJceDMyJC5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0
b3JQcm90b1wiXHhkYlx4MDNcblx4MTNceDQ2aWxlRGVzY3JpcHRvclByb3RvXHgxMlx4MGNcblx4
MDRuYW1lXHgxOFx4MDEgXHgwMShcdFx4MTJceDBmXG5ceDA3cGFja2FnZVx4MThceDAyIFx4MDEo
XHRceDEyXHgxMlxuXG5kZXBlbmRlbmN5XHgxOFx4MDMgXHgwMyhcdFx4MTJceDE5XG5ceDExcHVi
bGljX2RlcGVuZGVuY3lceDE4XG4gXHgwMyhceDA1XHgxMlx4MTdcblx4MGZ3ZWFrX2RlcGVuZGVu
Y3lceDE4XHgwYiBceDAzKFx4MDVceDEyXHgzNlxuXHgwY21lc3NhZ2VfdHlwZVx4MThceDA0IFx4
MDMoXHgwYlx4MzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9ceDEyXHgzN1xuXHRl
bnVtX3R5cGVceDE4XHgwNSBceDAzKFx4MGJceDMyJC5nb29nbGUucHJvdG9idWYuRW51bURlc2Ny
aXB0b3JQcm90b1x4MTJceDM4XG5ceDA3c2VydmljZVx4MThceDA2IFx4MDMoXHgwYlx4MzJcJy5n
b29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90b1x4MTJceDM4XG5cdGV4dGVuc2lv
blx4MThceDA3IFx4MDMoXHgwYlx4MzIlLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQ
cm90b1x4MTItXG5ceDA3b3B0aW9uc1x4MThceDA4IFx4MDEoXHgwYlx4MzJceDFjLmdvb2dsZS5w
cm90b2J1Zi5GaWxlT3B0aW9uc1x4MTJceDM5XG5ceDEwc291cmNlX2NvZGVfaW5mb1x4MThcdCBc
eDAxKFx4MGJceDMyXHgxZi5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm9ceDEyXHgwZVxu
XHgwNnN5bnRheFx4MThceDBjIFx4MDEoXHRcIlx4ZjBceDA0XG5ceDBmXHg0NFx4NjVzY3JpcHRv
clByb3RvXHgxMlx4MGNcblx4MDRuYW1lXHgxOFx4MDEgXHgwMShcdFx4MTJceDM0XG5ceDA1XHg2
NmllbGRceDE4XHgwMiBceDAzKFx4MGJceDMyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlw
dG9yUHJvdG9ceDEyXHgzOFxuXHRleHRlbnNpb25ceDE4XHgwNiBceDAzKFx4MGJceDMyJS5nb29n
bGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9ceDEyXHgzNVxuXHgwYm5lc3RlZF90eXBl
XHgxOFx4MDMgXHgwMyhceDBiXHgzMiAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b1x4
MTJceDM3XG5cdGVudW1fdHlwZVx4MThceDA0IFx4MDMoXHgwYlx4MzIkLmdvb2dsZS5wcm90b2J1
Zi5FbnVtRGVzY3JpcHRvclByb3RvXHgxMkhcblx4MGZceDY1eHRlbnNpb25fcmFuZ2VceDE4XHgw
NSBceDAzKFx4MGJceDMyLy5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lv
blJhbmdlXHgxMlx4Mzlcblxub25lb2ZfZGVjbFx4MThceDA4IFx4MDMoXHgwYlx4MzIlLmdvb2ds
ZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b1x4MTJceDMwXG5ceDA3b3B0aW9uc1x4MThc
eDA3IFx4MDEoXHgwYlx4MzJceDFmLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9uc1x4MTJc
eDQ2XG5ceDBlcmVzZXJ2ZWRfcmFuZ2VceDE4XHQgXHgwMyhceDBiXHgzMi4uZ29vZ2xlLnByb3Rv
YnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlXHgxMlx4MTVcblxycmVzZXJ2ZWRfbmFt
ZVx4MThcbiBceDAzKFx0XHgxYSxcblx4MGVceDQ1eHRlbnNpb25SYW5nZVx4MTJcclxuXHgwNXN0
YXJ0XHgxOFx4MDEgXHgwMShceDA1XHgxMlx4MGJcblx4MDNceDY1bmRceDE4XHgwMiBceDAxKFx4
MDVceDFhK1xuXHJSZXNlcnZlZFJhbmdlXHgxMlxyXG5ceDA1c3RhcnRceDE4XHgwMSBceDAxKFx4
MDVceDEyXHgwYlxuXHgwM1x4NjVuZFx4MThceDAyIFx4MDEoXHgwNVwiXHhiY1x4MDVcblx4MTRc
eDQ2aWVsZERlc2NyaXB0b3JQcm90b1x4MTJceDBjXG5ceDA0bmFtZVx4MThceDAxIFx4MDEoXHRc
eDEyXHgwZVxuXHgwNm51bWJlclx4MThceDAzIFx4MDEoXHgwNVx4MTI6XG5ceDA1bGFiZWxceDE4
XHgwNCBceDAxKFx4MGVceDMyKy5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8u
TGFiZWxceDEyXHgzOFxuXHgwNHR5cGVceDE4XHgwNSBceDAxKFx4MGVceDMyKi5nb29nbGUucHJv
dG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZVx4MTJceDExXG5cdHR5cGVfbmFtZVx4MThc
eDA2IFx4MDEoXHRceDEyXHgxMFxuXHgwOFx4NjV4dGVuZGVlXHgxOFx4MDIgXHgwMShcdFx4MTJc
eDE1XG5ccmRlZmF1bHRfdmFsdWVceDE4XHgwNyBceDAxKFx0XHgxMlx4MTNcblx4MGJvbmVvZl9p
bmRleFx4MThcdCBceDAxKFx4MDVceDEyXHgxMVxuXHRqc29uX25hbWVceDE4XG4gXHgwMShcdFx4
MTIuXG5ceDA3b3B0aW9uc1x4MThceDA4IFx4MDEoXHgwYlx4MzJceDFkLmdvb2dsZS5wcm90b2J1
Zi5GaWVsZE9wdGlvbnNcIlx4YjZceDAyXG5ceDA0VHlwZVx4MTJceDBmXG5ceDBiVFlQRV9ET1VC
TEVceDEwXHgwMVx4MTJceDBlXG5cblRZUEVfRkxPQVRceDEwXHgwMlx4MTJceDBlXG5cblRZUEVf
SU5UNjRceDEwXHgwM1x4MTJceDBmXG5ceDBiVFlQRV9VSU5UNjRceDEwXHgwNFx4MTJceDBlXG5c
blRZUEVfSU5UMzJceDEwXHgwNVx4MTJceDEwXG5ceDBjVFlQRV9GSVhFRDY0XHgxMFx4MDZceDEy
XHgxMFxuXHgwY1RZUEVfRklYRUQzMlx4MTBceDA3XHgxMlxyXG5cdFRZUEVfQk9PTFx4MTBceDA4
XHgxMlx4MGZcblx4MGJUWVBFX1NUUklOR1x4MTBcdFx4MTJceDBlXG5cblRZUEVfR1JPVVBceDEw
XG5ceDEyXHgxMFxuXHgwY1RZUEVfTUVTU0FHRVx4MTBceDBiXHgxMlx4MGVcblxuVFlQRV9CWVRF
U1x4MTBceDBjXHgxMlx4MGZcblx4MGJUWVBFX1VJTlQzMlx4MTBcclx4MTJcclxuXHRUWVBFX0VO
VU1ceDEwXHgwZVx4MTJceDExXG5cclRZUEVfU0ZJWEVEMzJceDEwXHgwZlx4MTJceDExXG5cclRZ
UEVfU0ZJWEVENjRceDEwXHgxMFx4MTJceDBmXG5ceDBiVFlQRV9TSU5UMzJceDEwXHgxMVx4MTJc
eDBmXG5ceDBiVFlQRV9TSU5UNjRceDEwXHgxMlwiQ1xuXHgwNUxhYmVsXHgxMlx4MTJcblx4MGVM
QUJFTF9PUFRJT05BTFx4MTBceDAxXHgxMlx4MTJcblx4MGVMQUJFTF9SRVFVSVJFRFx4MTBceDAy
XHgxMlx4MTJcblx4MGVMQUJFTF9SRVBFQVRFRFx4MTBceDAzXCIkXG5ceDE0T25lb2ZEZXNjcmlw
dG9yUHJvdG9ceDEyXHgwY1xuXHgwNG5hbWVceDE4XHgwMSBceDAxKFx0XCJceDhjXHgwMVxuXHgx
M1x4NDVudW1EZXNjcmlwdG9yUHJvdG9ceDEyXHgwY1xuXHgwNG5hbWVceDE4XHgwMSBceDAxKFx0
XHgxMlx4Mzhcblx4MDV2YWx1ZVx4MThceDAyIFx4MDMoXHgwYlx4MzIpLmdvb2dsZS5wcm90b2J1
Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9ceDEyLVxuXHgwN29wdGlvbnNceDE4XHgwMyBceDAx
KFx4MGJceDMyXHgxYy5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnNcImxcblx4MThceDQ1bnVt
VmFsdWVEZXNjcmlwdG9yUHJvdG9ceDEyXHgwY1xuXHgwNG5hbWVceDE4XHgwMSBceDAxKFx0XHgx
Mlx4MGVcblx4MDZudW1iZXJceDE4XHgwMiBceDAxKFx4MDVceDEyXHgzMlxuXHgwN29wdGlvbnNc
eDE4XHgwMyBceDAxKFx4MGJceDMyIS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc1wi
XHg5MFx4MDFcblx4MTZTZXJ2aWNlRGVzY3JpcHRvclByb3RvXHgxMlx4MGNcblx4MDRuYW1lXHgx
OFx4MDEgXHgwMShcdFx4MTJceDM2XG5ceDA2bWV0aG9kXHgxOFx4MDIgXHgwMyhceDBiXHgzMiYu
Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b1x4MTJceDMwXG5ceDA3b3B0aW9u
c1x4MThceDAzIFx4MDEoXHgwYlx4MzJceDFmLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9u
c1wiXHhjMVx4MDFcblx4MTVNZXRob2REZXNjcmlwdG9yUHJvdG9ceDEyXHgwY1xuXHgwNG5hbWVc
eDE4XHgwMSBceDAxKFx0XHgxMlx4MTJcblxuaW5wdXRfdHlwZVx4MThceDAyIFx4MDEoXHRceDEy
XHgxM1xuXHgwYm91dHB1dF90eXBlXHgxOFx4MDMgXHgwMShcdFx4MTIvXG5ceDA3b3B0aW9uc1x4
MThceDA0IFx4MDEoXHgwYlx4MzJceDFlLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zXHgx
Mlx4MWZcblx4MTBceDYzbGllbnRfc3RyZWFtaW5nXHgxOFx4MDUgXHgwMShceDA4Olx4MDVceDY2
XHg2MWxzZVx4MTJceDFmXG5ceDEwc2VydmVyX3N0cmVhbWluZ1x4MThceDA2IFx4MDEoXHgwODpc
eDA1XHg2Nlx4NjFsc2VcIlx4ODdceDA1XG5ceDBiXHg0NmlsZU9wdGlvbnNceDEyXHgxNFxuXHgw
Y2phdmFfcGFja2FnZVx4MThceDAxIFx4MDEoXHRceDEyXHgxY1xuXHgxNGphdmFfb3V0ZXJfY2xh
c3NuYW1lXHgxOFx4MDggXHgwMShcdFx4MTJcIlxuXHgxM2phdmFfbXVsdGlwbGVfZmlsZXNceDE4
XG4gXHgwMShceDA4Olx4MDVceDY2XHg2MWxzZVx4MTIsXG5ceDFkamF2YV9nZW5lcmF0ZV9lcXVh
bHNfYW5kX2hhc2hceDE4XHgxNCBceDAxKFx4MDg6XHgwNVx4NjZceDYxbHNlXHgxMiVcblx4MTZq
YXZhX3N0cmluZ19jaGVja191dGY4XHgxOFx4MWIgXHgwMShceDA4Olx4MDVceDY2XHg2MWxzZVx4
MTJceDQ2XG5ceDBjb3B0aW1pemVfZm9yXHgxOFx0IFx4MDEoXHgwZVx4MzIpLmdvb2dsZS5wcm90
b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6XHgwNVNQRUVEXHgxMlx4MTJcblxuZ29fcGFj
a2FnZVx4MThceDBiIFx4MDEoXHRceDEyXCJcblx4MTNceDYzXHg2M19nZW5lcmljX3NlcnZpY2Vz
XHgxOFx4MTAgXHgwMShceDA4Olx4MDVceDY2XHg2MWxzZVx4MTIkXG5ceDE1amF2YV9nZW5lcmlj
X3NlcnZpY2VzXHgxOFx4MTEgXHgwMShceDA4Olx4MDVceDY2XHg2MWxzZVx4MTJcIlxuXHgxM3B5
X2dlbmVyaWNfc2VydmljZXNceDE4XHgxMiBceDAxKFx4MDg6XHgwNVx4NjZceDYxbHNlXHgxMlx4
MTlcblxuZGVwcmVjYXRlZFx4MThceDE3IFx4MDEoXHgwODpceDA1XHg2Nlx4NjFsc2VceDEyXHgx
ZlxuXHgxMFx4NjNceDYzX2VuYWJsZV9hcmVuYXNceDE4XHgxZiBceDAxKFx4MDg6XHgwNVx4NjZc
eDYxbHNlXHgxMlx4MTlcblx4MTFvYmpjX2NsYXNzX3ByZWZpeFx4MTgkIFx4MDEoXHRceDEyXHgx
OFxuXHgxMFx4NjNzaGFycF9uYW1lc3BhY2VceDE4JSBceDAxKFx0XHgxMlx4NDNcblx4MTR1bmlu
dGVycHJldGVkX29wdGlvblx4MThceGU3XHgwNyBceDAzKFx4MGJceDMyJC5nb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvblwiOlxuXHgwY09wdGltaXplTW9kZVx4MTJcdFxuXHgwNVNQ
RUVEXHgxMFx4MDFceDEyXHJcblx0Q09ERV9TSVpFXHgxMFx4MDJceDEyXHgxMFxuXHgwY0xJVEVf
UlVOVElNRVx4MTBceDAzKlx0XHgwOFx4ZThceDA3XHgxMFx4ODBceDgwXHg4MFx4ODBceDAySlx4
MDRceDA4Jlx4MTBcJ1wiXHhlNlx4MDFcblx4MGVNZXNzYWdlT3B0aW9uc1x4MTImXG5ceDE3bWVz
c2FnZV9zZXRfd2lyZV9mb3JtYXRceDE4XHgwMSBceDAxKFx4MDg6XHgwNVx4NjZceDYxbHNlXHgx
Mi5cblx4MWZub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yXHgxOFx4MDIgXHgwMShceDA4
Olx4MDVceDY2XHg2MWxzZVx4MTJceDE5XG5cbmRlcHJlY2F0ZWRceDE4XHgwMyBceDAxKFx4MDg6
XHgwNVx4NjZceDYxbHNlXHgxMlx4MTFcblx0bWFwX2VudHJ5XHgxOFx4MDcgXHgwMShceDA4XHgx
Mlx4NDNcblx4MTR1bmludGVycHJldGVkX29wdGlvblx4MThceGU3XHgwNyBceDAzKFx4MGJceDMy
JC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbipcdFx4MDhceGU4XHgwN1x4MTBc
eDgwXHg4MFx4ODBceDgwXHgwMlwiXHg5OFx4MDNcblx4MGNceDQ2aWVsZE9wdGlvbnNceDEyOlxu
XHgwNVx4NjN0eXBlXHgxOFx4MDEgXHgwMShceDBlXHgzMiMuZ29vZ2xlLnByb3RvYnVmLkZpZWxk
T3B0aW9ucy5DVHlwZTpceDA2U1RSSU5HXHgxMlx4MGVcblx4MDZwYWNrZWRceDE4XHgwMiBceDAx
KFx4MDhceDEyP1xuXHgwNmpzdHlwZVx4MThceDA2IFx4MDEoXHgwZVx4MzIkLmdvb2dsZS5wcm90
b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOlx0SlNfTk9STUFMXHgxMlx4MTNcblx4MDRsYXp5XHgx
OFx4MDUgXHgwMShceDA4Olx4MDVceDY2XHg2MWxzZVx4MTJceDE5XG5cbmRlcHJlY2F0ZWRceDE4
XHgwMyBceDAxKFx4MDg6XHgwNVx4NjZceDYxbHNlXHgxMlx4MTNcblx4MDR3ZWFrXHgxOFxuIFx4
MDEoXHgwODpceDA1XHg2Nlx4NjFsc2VceDEyXHg0M1xuXHgxNHVuaW50ZXJwcmV0ZWRfb3B0aW9u
XHgxOFx4ZTdceDA3IFx4MDMoXHgwYlx4MzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk
T3B0aW9uXCIvXG5ceDA1XHg0M1R5cGVceDEyXG5cblx4MDZTVFJJTkdceDEwXHgwMFx4MTJceDA4
XG5ceDA0XHg0M09SRFx4MTBceDAxXHgxMlx4MTBcblx4MGNTVFJJTkdfUElFQ0VceDEwXHgwMlwi
NVxuXHgwNkpTVHlwZVx4MTJcclxuXHRKU19OT1JNQUxceDEwXHgwMFx4MTJcclxuXHRKU19TVFJJ
TkdceDEwXHgwMVx4MTJcclxuXHRKU19OVU1CRVJceDEwXHgwMipcdFx4MDhceGU4XHgwN1x4MTBc
eDgwXHg4MFx4ODBceDgwXHgwMlwiXHg4ZFx4MDFcblx4MGJceDQ1bnVtT3B0aW9uc1x4MTJceDEz
XG5ceDBiXHg2MWxsb3dfYWxpYXNceDE4XHgwMiBceDAxKFx4MDhceDEyXHgxOVxuXG5kZXByZWNh
dGVkXHgxOFx4MDMgXHgwMShceDA4Olx4MDVceDY2XHg2MWxzZVx4MTJceDQzXG5ceDE0dW5pbnRl
cnByZXRlZF9vcHRpb25ceDE4XHhlN1x4MDcgXHgwMyhceDBiXHgzMiQuZ29vZ2xlLnByb3RvYnVm
LlVuaW50ZXJwcmV0ZWRPcHRpb24qXHRceDA4XHhlOFx4MDdceDEwXHg4MFx4ODBceDgwXHg4MFx4
MDJcIn1cblx4MTBceDQ1bnVtVmFsdWVPcHRpb25zXHgxMlx4MTlcblxuZGVwcmVjYXRlZFx4MThc
eDAxIFx4MDEoXHgwODpceDA1XHg2Nlx4NjFsc2VceDEyXHg0M1xuXHgxNHVuaW50ZXJwcmV0ZWRf
b3B0aW9uXHgxOFx4ZTdceDA3IFx4MDMoXHgwYlx4MzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVy
cHJldGVkT3B0aW9uKlx0XHgwOFx4ZThceDA3XHgxMFx4ODBceDgwXHg4MFx4ODBceDAyXCJ7XG5c
eDBlU2VydmljZU9wdGlvbnNceDEyXHgxOVxuXG5kZXByZWNhdGVkXHgxOCEgXHgwMShceDA4Olx4
MDVceDY2XHg2MWxzZVx4MTJceDQzXG5ceDE0dW5pbnRlcnByZXRlZF9vcHRpb25ceDE4XHhlN1x4
MDcgXHgwMyhceDBiXHgzMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24qXHRc
eDA4XHhlOFx4MDdceDEwXHg4MFx4ODBceDgwXHg4MFx4MDJcInpcblxyTWV0aG9kT3B0aW9uc1x4
MTJceDE5XG5cbmRlcHJlY2F0ZWRceDE4ISBceDAxKFx4MDg6XHgwNVx4NjZceDYxbHNlXHgxMlx4
NDNcblx4MTR1bmludGVycHJldGVkX29wdGlvblx4MThceGU3XHgwNyBceDAzKFx4MGJceDMyJC5n
b29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbipcdFx4MDhceGU4XHgwN1x4MTBceDgw
XHg4MFx4ODBceDgwXHgwMlwiXHg5ZVx4MDJcblx4MTNVbmludGVycHJldGVkT3B0aW9uXHgxMjtc
blx4MDRuYW1lXHgxOFx4MDIgXHgwMyhceDBiXHgzMi0uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJw
cmV0ZWRPcHRpb24uTmFtZVBhcnRceDEyXHgxOFxuXHgxMGlkZW50aWZpZXJfdmFsdWVceDE4XHgw
MyBceDAxKFx0XHgxMlx4MWFcblx4MTJwb3NpdGl2ZV9pbnRfdmFsdWVceDE4XHgwNCBceDAxKFx4
MDRceDEyXHgxYVxuXHgxMm5lZ2F0aXZlX2ludF92YWx1ZVx4MThceDA1IFx4MDEoXHgwM1x4MTJc
eDE0XG5ceDBjXHg2NG91YmxlX3ZhbHVlXHgxOFx4MDYgXHgwMShceDAxXHgxMlx4MTRcblx4MGNz
dHJpbmdfdmFsdWVceDE4XHgwNyBceDAxKFx4MGNceDEyXHgxN1xuXHgwZlx4NjFnZ3JlZ2F0ZV92
YWx1ZVx4MThceDA4IFx4MDEoXHRceDFhXHgzM1xuXHgwOE5hbWVQYXJ0XHgxMlx4MTFcblx0bmFt
ZV9wYXJ0XHgxOFx4MDEgXHgwMihcdFx4MTJceDE0XG5ceDBjaXNfZXh0ZW5zaW9uXHgxOFx4MDIg
XHgwMihceDA4XCJceGQ1XHgwMVxuXHgwZVNvdXJjZUNvZGVJbmZvXHgxMjpcblx4MDhsb2NhdGlv
blx4MThceDAxIFx4MDMoXHgwYlx4MzIoLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5M
b2NhdGlvblx4MWFceDg2XHgwMVxuXHgwOExvY2F0aW9uXHgxMlx4MTBcblx4MDRwYXRoXHgxOFx4
MDEgXHgwMyhceDA1XHg0Mlx4MDJceDEwXHgwMVx4MTJceDEwXG5ceDA0c3Bhblx4MThceDAyIFx4
MDMoXHgwNVx4NDJceDAyXHgxMFx4MDFceDEyXHgxOFxuXHgxMGxlYWRpbmdfY29tbWVudHNceDE4
XHgwMyBceDAxKFx0XHgxMlx4MTlcblx4MTF0cmFpbGluZ19jb21tZW50c1x4MThceDA0IFx4MDEo
XHRceDEyIVxuXHgxOWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHNceDE4XHgwNiBceDAzKFx0XCJc
eGE3XHgwMVxuXHgxMUdlbmVyYXRlZENvZGVJbmZvXHgxMlx4NDFcblxuYW5ub3RhdGlvblx4MThc
eDAxIFx4MDMoXHgwYlx4MzItLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5v
dGF0aW9uXHgxYU9cblxuQW5ub3RhdGlvblx4MTJceDEwXG5ceDA0cGF0aFx4MThceDAxIFx4MDMo
XHgwNVx4NDJceDAyXHgxMFx4MDFceDEyXHgxM1xuXHgwYnNvdXJjZV9maWxlXHgxOFx4MDIgXHgw
MShcdFx4MTJcclxuXHgwNVx4NjJceDY1Z2luXHgxOFx4MDMgXHgwMShceDA1XHgxMlx4MGJcblx4
MDNceDY1bmRceDE4XHgwNCBceDAxKFx4MDVceDQyWFxuXHgxM1x4NjNvbS5nb29nbGUucHJvdG9i
dWZCXHgxMFx4NDRceDY1c2NyaXB0b3JQcm90b3NIXHgwMVpcbmRlc2NyaXB0b3JceGEyXHgwMlx4
MDNHUEJceGFhXHgwMlx4MWFHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbicpCi0pCi1fc3ltX2Ri
LlJlZ2lzdGVyRmlsZURlc2NyaXB0b3IoREVTQ1JJUFRPUikKLQotCi0KLV9GSUVMRERFU0NSSVBU
T1JQUk9UT19UWVBFID0gX2Rlc2NyaXB0b3IuRW51bURlc2NyaXB0b3IoCi0gIG5hbWU9J1R5cGUn
LAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBl
JywKLSAgZmlsZW5hbWU9Tm9uZSwKLSAgZmlsZT1ERVNDUklQVE9SLAotICB2YWx1ZXM9WwotICAg
IF9kZXNjcmlwdG9yLkVudW1WYWx1ZURlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdUWVBFX0RPVUJM
RScsIGluZGV4PTAsIG51bWJlcj0xLAotICAgICAgb3B0aW9ucz1Ob25lLAotICAgICAgdHlwZT1O
b25lKSwKLSAgICBfZGVzY3JpcHRvci5FbnVtVmFsdWVEZXNjcmlwdG9yKAotICAgICAgbmFtZT0n
VFlQRV9GTE9BVCcsIGluZGV4PTEsIG51bWJlcj0yLAotICAgICAgb3B0aW9ucz1Ob25lLAotICAg
ICAgdHlwZT1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5FbnVtVmFsdWVEZXNjcmlwdG9yKAotICAg
ICAgbmFtZT0nVFlQRV9JTlQ2NCcsIGluZGV4PTIsIG51bWJlcj0zLAotICAgICAgb3B0aW9ucz1O
b25lLAotICAgICAgdHlwZT1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5FbnVtVmFsdWVEZXNjcmlw
dG9yKAotICAgICAgbmFtZT0nVFlQRV9VSU5UNjQnLCBpbmRleD0zLCBudW1iZXI9NCwKLSAgICAg
IG9wdGlvbnM9Tm9uZSwKLSAgICAgIHR5cGU9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRW51bVZh
bHVlRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J1RZUEVfSU5UMzInLCBpbmRleD00LCBudW1iZXI9
NSwKLSAgICAgIG9wdGlvbnM9Tm9uZSwKLSAgICAgIHR5cGU9Tm9uZSksCi0gICAgX2Rlc2NyaXB0
b3IuRW51bVZhbHVlRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J1RZUEVfRklYRUQ2NCcsIGluZGV4
PTUsIG51bWJlcj02LAotICAgICAgb3B0aW9ucz1Ob25lLAotICAgICAgdHlwZT1Ob25lKSwKLSAg
ICBfZGVzY3JpcHRvci5FbnVtVmFsdWVEZXNjcmlwdG9yKAotICAgICAgbmFtZT0nVFlQRV9GSVhF
RDMyJywgaW5kZXg9NiwgbnVtYmVyPTcsCi0gICAgICBvcHRpb25zPU5vbmUsCi0gICAgICB0eXBl
PU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkVudW1WYWx1ZURlc2NyaXB0b3IoCi0gICAgICBuYW1l
PSdUWVBFX0JPT0wnLCBpbmRleD03LCBudW1iZXI9OCwKLSAgICAgIG9wdGlvbnM9Tm9uZSwKLSAg
ICAgIHR5cGU9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRW51bVZhbHVlRGVzY3JpcHRvcigKLSAg
ICAgIG5hbWU9J1RZUEVfU1RSSU5HJywgaW5kZXg9OCwgbnVtYmVyPTksCi0gICAgICBvcHRpb25z
PU5vbmUsCi0gICAgICB0eXBlPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkVudW1WYWx1ZURlc2Ny
aXB0b3IoCi0gICAgICBuYW1lPSdUWVBFX0dST1VQJywgaW5kZXg9OSwgbnVtYmVyPTEwLAotICAg
ICAgb3B0aW9ucz1Ob25lLAotICAgICAgdHlwZT1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5FbnVt
VmFsdWVEZXNjcmlwdG9yKAotICAgICAgbmFtZT0nVFlQRV9NRVNTQUdFJywgaW5kZXg9MTAsIG51
bWJlcj0xMSwKLSAgICAgIG9wdGlvbnM9Tm9uZSwKLSAgICAgIHR5cGU9Tm9uZSksCi0gICAgX2Rl
c2NyaXB0b3IuRW51bVZhbHVlRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J1RZUEVfQllURVMnLCBp
bmRleD0xMSwgbnVtYmVyPTEyLAotICAgICAgb3B0aW9ucz1Ob25lLAotICAgICAgdHlwZT1Ob25l
KSwKLSAgICBfZGVzY3JpcHRvci5FbnVtVmFsdWVEZXNjcmlwdG9yKAotICAgICAgbmFtZT0nVFlQ
RV9VSU5UMzInLCBpbmRleD0xMiwgbnVtYmVyPTEzLAotICAgICAgb3B0aW9ucz1Ob25lLAotICAg
ICAgdHlwZT1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5FbnVtVmFsdWVEZXNjcmlwdG9yKAotICAg
ICAgbmFtZT0nVFlQRV9FTlVNJywgaW5kZXg9MTMsIG51bWJlcj0xNCwKLSAgICAgIG9wdGlvbnM9
Tm9uZSwKLSAgICAgIHR5cGU9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRW51bVZhbHVlRGVzY3Jp
cHRvcigKLSAgICAgIG5hbWU9J1RZUEVfU0ZJWEVEMzInLCBpbmRleD0xNCwgbnVtYmVyPTE1LAot
ICAgICAgb3B0aW9ucz1Ob25lLAotICAgICAgdHlwZT1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5F
bnVtVmFsdWVEZXNjcmlwdG9yKAotICAgICAgbmFtZT0nVFlQRV9TRklYRUQ2NCcsIGluZGV4PTE1
LCBudW1iZXI9MTYsCi0gICAgICBvcHRpb25zPU5vbmUsCi0gICAgICB0eXBlPU5vbmUpLAotICAg
IF9kZXNjcmlwdG9yLkVudW1WYWx1ZURlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdUWVBFX1NJTlQz
MicsIGluZGV4PTE2LCBudW1iZXI9MTcsCi0gICAgICBvcHRpb25zPU5vbmUsCi0gICAgICB0eXBl
PU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkVudW1WYWx1ZURlc2NyaXB0b3IoCi0gICAgICBuYW1l
PSdUWVBFX1NJTlQ2NCcsIGluZGV4PTE3LCBudW1iZXI9MTgsCi0gICAgICBvcHRpb25zPU5vbmUs
Ci0gICAgICB0eXBlPU5vbmUpLAotICBdLAotICBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgb3B0
aW9ucz1Ob25lLAotICBzZXJpYWxpemVkX3N0YXJ0PTE1NTMsCi0gIHNlcmlhbGl6ZWRfZW5kPTE4
NjMsCi0pCi1fc3ltX2RiLlJlZ2lzdGVyRW51bURlc2NyaXB0b3IoX0ZJRUxEREVTQ1JJUFRPUlBS
T1RPX1RZUEUpCi0KLV9GSUVMRERFU0NSSVBUT1JQUk9UT19MQUJFTCA9IF9kZXNjcmlwdG9yLkVu
dW1EZXNjcmlwdG9yKAotICBuYW1lPSdMYWJlbCcsCi0gIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3Rv
YnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsJywKLSAgZmlsZW5hbWU9Tm9uZSwKLSAgZmls
ZT1ERVNDUklQVE9SLAotICB2YWx1ZXM9WwotICAgIF9kZXNjcmlwdG9yLkVudW1WYWx1ZURlc2Ny
aXB0b3IoCi0gICAgICBuYW1lPSdMQUJFTF9PUFRJT05BTCcsIGluZGV4PTAsIG51bWJlcj0xLAot
ICAgICAgb3B0aW9ucz1Ob25lLAotICAgICAgdHlwZT1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5F
bnVtVmFsdWVEZXNjcmlwdG9yKAotICAgICAgbmFtZT0nTEFCRUxfUkVRVUlSRUQnLCBpbmRleD0x
LCBudW1iZXI9MiwKLSAgICAgIG9wdGlvbnM9Tm9uZSwKLSAgICAgIHR5cGU9Tm9uZSksCi0gICAg
X2Rlc2NyaXB0b3IuRW51bVZhbHVlRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J0xBQkVMX1JFUEVB
VEVEJywgaW5kZXg9MiwgbnVtYmVyPTMsCi0gICAgICBvcHRpb25zPU5vbmUsCi0gICAgICB0eXBl
PU5vbmUpLAotICBdLAotICBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgb3B0aW9ucz1Ob25lLAot
ICBzZXJpYWxpemVkX3N0YXJ0PTE4NjUsCi0gIHNlcmlhbGl6ZWRfZW5kPTE5MzIsCi0pCi1fc3lt
X2RiLlJlZ2lzdGVyRW51bURlc2NyaXB0b3IoX0ZJRUxEREVTQ1JJUFRPUlBST1RPX0xBQkVMKQot
Ci1fRklMRU9QVElPTlNfT1BUSU1JWkVNT0RFID0gX2Rlc2NyaXB0b3IuRW51bURlc2NyaXB0b3Io
Ci0gIG5hbWU9J09wdGltaXplTW9kZScsCi0gIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZp
bGVPcHRpb25zLk9wdGltaXplTW9kZScsCi0gIGZpbGVuYW1lPU5vbmUsCi0gIGZpbGU9REVTQ1JJ
UFRPUiwKLSAgdmFsdWVzPVsKLSAgICBfZGVzY3JpcHRvci5FbnVtVmFsdWVEZXNjcmlwdG9yKAot
ICAgICAgbmFtZT0nU1BFRUQnLCBpbmRleD0wLCBudW1iZXI9MSwKLSAgICAgIG9wdGlvbnM9Tm9u
ZSwKLSAgICAgIHR5cGU9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRW51bVZhbHVlRGVzY3JpcHRv
cigKLSAgICAgIG5hbWU9J0NPREVfU0laRScsIGluZGV4PTEsIG51bWJlcj0yLAotICAgICAgb3B0
aW9ucz1Ob25lLAotICAgICAgdHlwZT1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5FbnVtVmFsdWVE
ZXNjcmlwdG9yKAotICAgICAgbmFtZT0nTElURV9SVU5USU1FJywgaW5kZXg9MiwgbnVtYmVyPTMs
Ci0gICAgICBvcHRpb25zPU5vbmUsCi0gICAgICB0eXBlPU5vbmUpLAotICBdLAotICBjb250YWlu
aW5nX3R5cGU9Tm9uZSwKLSAgb3B0aW9ucz1Ob25lLAotICBzZXJpYWxpemVkX3N0YXJ0PTMxNDEs
Ci0gIHNlcmlhbGl6ZWRfZW5kPTMxOTksCi0pCi1fc3ltX2RiLlJlZ2lzdGVyRW51bURlc2NyaXB0
b3IoX0ZJTEVPUFRJT05TX09QVElNSVpFTU9ERSkKLQotX0ZJRUxET1BUSU9OU19DVFlQRSA9IF9k
ZXNjcmlwdG9yLkVudW1EZXNjcmlwdG9yKAotICBuYW1lPSdDVHlwZScsCi0gIGZ1bGxfbmFtZT0n
Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZScsCi0gIGZpbGVuYW1lPU5vbmUsCi0g
IGZpbGU9REVTQ1JJUFRPUiwKLSAgdmFsdWVzPVsKLSAgICBfZGVzY3JpcHRvci5FbnVtVmFsdWVE
ZXNjcmlwdG9yKAotICAgICAgbmFtZT0nU1RSSU5HJywgaW5kZXg9MCwgbnVtYmVyPTAsCi0gICAg
ICBvcHRpb25zPU5vbmUsCi0gICAgICB0eXBlPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkVudW1W
YWx1ZURlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdDT1JEJywgaW5kZXg9MSwgbnVtYmVyPTEsCi0g
ICAgICBvcHRpb25zPU5vbmUsCi0gICAgICB0eXBlPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkVu
dW1WYWx1ZURlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdTVFJJTkdfUElFQ0UnLCBpbmRleD0yLCBu
dW1iZXI9MiwKLSAgICAgIG9wdGlvbnM9Tm9uZSwKLSAgICAgIHR5cGU9Tm9uZSksCi0gIF0sCi0g
IGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICBvcHRpb25zPU5vbmUsCi0gIHNlcmlhbGl6ZWRfc3Rh
cnQ9Mzc0NywKLSAgc2VyaWFsaXplZF9lbmQ9Mzc5NCwKLSkKLV9zeW1fZGIuUmVnaXN0ZXJFbnVt
RGVzY3JpcHRvcihfRklFTERPUFRJT05TX0NUWVBFKQotCi1fRklFTERPUFRJT05TX0pTVFlQRSA9
IF9kZXNjcmlwdG9yLkVudW1EZXNjcmlwdG9yKAotICBuYW1lPSdKU1R5cGUnLAotICBmdWxsX25h
bWU9J2dvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlJywKLSAgZmlsZW5hbWU9Tm9u
ZSwKLSAgZmlsZT1ERVNDUklQVE9SLAotICB2YWx1ZXM9WwotICAgIF9kZXNjcmlwdG9yLkVudW1W
YWx1ZURlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdKU19OT1JNQUwnLCBpbmRleD0wLCBudW1iZXI9
MCwKLSAgICAgIG9wdGlvbnM9Tm9uZSwKLSAgICAgIHR5cGU9Tm9uZSksCi0gICAgX2Rlc2NyaXB0
b3IuRW51bVZhbHVlRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J0pTX1NUUklORycsIGluZGV4PTEs
IG51bWJlcj0xLAotICAgICAgb3B0aW9ucz1Ob25lLAotICAgICAgdHlwZT1Ob25lKSwKLSAgICBf
ZGVzY3JpcHRvci5FbnVtVmFsdWVEZXNjcmlwdG9yKAotICAgICAgbmFtZT0nSlNfTlVNQkVSJywg
aW5kZXg9MiwgbnVtYmVyPTIsCi0gICAgICBvcHRpb25zPU5vbmUsCi0gICAgICB0eXBlPU5vbmUp
LAotICBdLAotICBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgb3B0aW9ucz1Ob25lLAotICBzZXJp
YWxpemVkX3N0YXJ0PTM3OTYsCi0gIHNlcmlhbGl6ZWRfZW5kPTM4NDksCi0pCi1fc3ltX2RiLlJl
Z2lzdGVyRW51bURlc2NyaXB0b3IoX0ZJRUxET1BUSU9OU19KU1RZUEUpCi0KLQotX0ZJTEVERVND
UklQVE9SU0VUID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKLSAgbmFtZT0nRmlsZURlc2NyaXB0
b3JTZXQnLAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldCcs
Ci0gIGZpbGVuYW1lPU5vbmUsCi0gIGZpbGU9REVTQ1JJUFRPUiwKLSAgY29udGFpbmluZ190eXBl
PU5vbmUsCi0gIGZpZWxkcz1bCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAg
ICAgbmFtZT0nZmlsZScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
U2V0LmZpbGUnLCBpbmRleD0wLAotICAgICAgbnVtYmVyPTEsIHR5cGU9MTEsIGNwcF90eXBlPTEw
LCBsYWJlbD0zLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9
W10sCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdf
dHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9u
ZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gIF0sCi0gIGV4dGVuc2lvbnM9WwotICBdLAotICBu
ZXN0ZWRfdHlwZXM9W10sCi0gIGVudW1fdHlwZXM9WwotICBdLAotICBvcHRpb25zPU5vbmUsCi0g
IGlzX2V4dGVuZGFibGU9RmFsc2UsCi0gIHN5bnRheD0ncHJvdG8yJywKLSAgZXh0ZW5zaW9uX3Jh
bmdlcz1bXSwKLSAgb25lb2ZzPVsKLSAgXSwKLSAgc2VyaWFsaXplZF9zdGFydD01MywKLSAgc2Vy
aWFsaXplZF9lbmQ9MTI0LAotKQotCi0KLV9GSUxFREVTQ1JJUFRPUlBST1RPID0gX2Rlc2NyaXB0
b3IuRGVzY3JpcHRvcigKLSAgbmFtZT0nRmlsZURlc2NyaXB0b3JQcm90bycsCi0gIGZ1bGxfbmFt
ZT0nZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8nLAotICBmaWxlbmFtZT1Ob25l
LAotICBmaWxlPURFU0NSSVBUT1IsCi0gIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICBmaWVsZHM9
WwotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J25hbWUnLCBm
dWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm5hbWUnLCBpbmRl
eD0wLAotICAgICAgbnVtYmVyPTEsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKLSAgICAg
IGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0
Zi04JyksCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5p
bmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9
Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlw
dG9yKAotICAgICAgbmFtZT0ncGFja2FnZScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZp
bGVEZXNjcmlwdG9yUHJvdG8ucGFja2FnZScsIGluZGV4PTEsCi0gICAgICBudW1iZXI9MiwgdHlw
ZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2Us
IGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKLSAgICAgIG1lc3NhZ2VfdHlw
ZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19l
eHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25l
KSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdkZXBlbmRl
bmN5JywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kZXBl
bmRlbmN5JywgaW5kZXg9MiwKLSAgICAgIG51bWJlcj0zLCB0eXBlPTksIGNwcF90eXBlPTksIGxh
YmVsPTMsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1bXSwK
LSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBl
PU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAot
ICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0g
ICAgICBuYW1lPSdwdWJsaWNfZGVwZW5kZW5jeScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVm
LkZpbGVEZXNjcmlwdG9yUHJvdG8ucHVibGljX2RlcGVuZGVuY3knLCBpbmRleD0zLAotICAgICAg
bnVtYmVyPTEwLCB0eXBlPTUsIGNwcF90eXBlPTEsIGxhYmVsPTMsCi0gICAgICBoYXNfZGVmYXVs
dF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1bXSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25l
LCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNp
b249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAg
ICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSd3ZWFrX2RlcGVuZGVu
Y3knLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLndlYWtf
ZGVwZW5kZW5jeScsIGluZGV4PTQsCi0gICAgICBudW1iZXI9MTEsIHR5cGU9NSwgY3BwX3R5cGU9
MSwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVl
PVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5n
X3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5v
bmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRv
cigKLSAgICAgIG5hbWU9J21lc3NhZ2VfdHlwZScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVm
LkZpbGVEZXNjcmlwdG9yUHJvdG8ubWVzc2FnZV90eXBlJywgaW5kZXg9NSwKLSAgICAgIG51bWJl
cj00LCB0eXBlPTExLCBjcHBfdHlwZT0xMCwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZhdWx0X3Zh
bHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVu
dW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1G
YWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9k
ZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2VudW1fdHlwZScsIGZ1bGxf
bmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZW51bV90eXBlJywgaW5k
ZXg9NiwKLSAgICAgIG51bWJlcj01LCB0eXBlPTExLCBjcHBfdHlwZT0xMCwgbGFiZWw9MywKLSAg
ICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPVtdLAotICAgICAgbWVz
c2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAg
ICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRp
b25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9
J3NlcnZpY2UnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3Rv
LnNlcnZpY2UnLCBpbmRleD03LAotICAgICAgbnVtYmVyPTYsIHR5cGU9MTEsIGNwcF90eXBlPTEw
LCBsYWJlbD0zLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9
W10sCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdf
dHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9u
ZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9y
KAotICAgICAgbmFtZT0nZXh0ZW5zaW9uJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRmls
ZURlc2NyaXB0b3JQcm90by5leHRlbnNpb24nLCBpbmRleD04LAotICAgICAgbnVtYmVyPTcsIHR5
cGU9MTEsIGNwcF90eXBlPTEwLCBsYWJlbD0zLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFs
c2UsIGRlZmF1bHRfdmFsdWU9W10sCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBl
PU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBl
eHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0
b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nb3B0aW9ucycsIGZ1bGxfbmFtZT0nZ29v
Z2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ub3B0aW9ucycsIGluZGV4PTksCi0gICAg
ICBudW1iZXI9OCwgdHlwZT0xMSwgY3BwX3R5cGU9MTAsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVm
YXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1Ob25lLAotICAgICAgbWVzc2FnZV90eXBl
PU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4
dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUp
LAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J3NvdXJjZV9j
b2RlX2luZm8nLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3Rv
LnNvdXJjZV9jb2RlX2luZm8nLCBpbmRleD0xMCwKLSAgICAgIG51bWJlcj05LCB0eXBlPTExLCBj
cHBfdHlwZT0xMCwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZh
dWx0X3ZhbHVlPU5vbmUsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUs
IGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNp
b25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmll
bGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nc3ludGF4JywgZnVsbF9uYW1lPSdnb29nbGUucHJv
dG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zeW50YXgnLCBpbmRleD0xMSwKLSAgICAgIG51bWJl
cj0xMiwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFs
dWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKLSAgICAgIG1l
c3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0g
ICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0
aW9ucz1Ob25lKSwKLSAgXSwKLSAgZXh0ZW5zaW9ucz1bCi0gIF0sCi0gIG5lc3RlZF90eXBlcz1b
XSwKLSAgZW51bV90eXBlcz1bCi0gIF0sCi0gIG9wdGlvbnM9Tm9uZSwKLSAgaXNfZXh0ZW5kYWJs
ZT1GYWxzZSwKLSAgc3ludGF4PSdwcm90bzInLAotICBleHRlbnNpb25fcmFuZ2VzPVtdLAotICBv
bmVvZnM9WwotICBdLAotICBzZXJpYWxpemVkX3N0YXJ0PTEyNywKLSAgc2VyaWFsaXplZF9lbmQ9
NjAyLAotKQotCi0KLV9ERVNDUklQVE9SUFJPVE9fRVhURU5TSU9OUkFOR0UgPSBfZGVzY3JpcHRv
ci5EZXNjcmlwdG9yKAotICBuYW1lPSdFeHRlbnNpb25SYW5nZScsCi0gIGZ1bGxfbmFtZT0nZ29v
Z2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZScsCi0gIGZpbGVuYW1l
PU5vbmUsCi0gIGZpbGU9REVTQ1JJUFRPUiwKLSAgY29udGFpbmluZ190eXBlPU5vbmUsCi0gIGZp
ZWxkcz1bCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nc3Rh
cnQnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9u
UmFuZ2Uuc3RhcnQnLCBpbmRleD0wLAotICAgICAgbnVtYmVyPTEsIHR5cGU9NSwgY3BwX3R5cGU9
MSwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVl
PTAsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdf
dHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9u
ZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9y
KAotICAgICAgbmFtZT0nZW5kJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
clByb3RvLkV4dGVuc2lvblJhbmdlLmVuZCcsIGluZGV4PTEsCi0gICAgICBudW1iZXI9MiwgdHlw
ZT01LCBjcHBfdHlwZT0xLCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2Us
IGRlZmF1bHRfdmFsdWU9MCwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9u
ZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVu
c2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgXSwKLSAgZXh0ZW5zaW9u
cz1bCi0gIF0sCi0gIG5lc3RlZF90eXBlcz1bXSwKLSAgZW51bV90eXBlcz1bCi0gIF0sCi0gIG9w
dGlvbnM9Tm9uZSwKLSAgaXNfZXh0ZW5kYWJsZT1GYWxzZSwKLSAgc3ludGF4PSdwcm90bzInLAot
ICBleHRlbnNpb25fcmFuZ2VzPVtdLAotICBvbmVvZnM9WwotICBdLAotICBzZXJpYWxpemVkX3N0
YXJ0PTExNDAsCi0gIHNlcmlhbGl6ZWRfZW5kPTExODQsCi0pCi0KLV9ERVNDUklQVE9SUFJPVE9f
UkVTRVJWRURSQU5HRSA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCi0gIG5hbWU9J1Jlc2VydmVk
UmFuZ2UnLAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVz
ZXJ2ZWRSYW5nZScsCi0gIGZpbGVuYW1lPU5vbmUsCi0gIGZpbGU9REVTQ1JJUFRPUiwKLSAgY29u
dGFpbmluZ190eXBlPU5vbmUsCi0gIGZpZWxkcz1bCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNj
cmlwdG9yKAotICAgICAgbmFtZT0nc3RhcnQnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5E
ZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5zdGFydCcsIGluZGV4PTAsCi0gICAgICBudW1i
ZXI9MSwgdHlwZT01LCBjcHBfdHlwZT0xLCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFs
dWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9MCwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVt
X3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFs
c2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVz
Y3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdlbmQnLCBmdWxsX25hbWU9J2dv
b2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5lbmQnLCBpbmRleD0x
LAotICAgICAgbnVtYmVyPTIsIHR5cGU9NSwgY3BwX3R5cGU9MSwgbGFiZWw9MSwKLSAgICAgIGhh
c19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPTAsCi0gICAgICBtZXNzYWdlX3R5
cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNf
ZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9u
ZSksCi0gIF0sCi0gIGV4dGVuc2lvbnM9WwotICBdLAotICBuZXN0ZWRfdHlwZXM9W10sCi0gIGVu
dW1fdHlwZXM9WwotICBdLAotICBvcHRpb25zPU5vbmUsCi0gIGlzX2V4dGVuZGFibGU9RmFsc2Us
Ci0gIHN5bnRheD0ncHJvdG8yJywKLSAgZXh0ZW5zaW9uX3Jhbmdlcz1bXSwKLSAgb25lb2ZzPVsK
LSAgXSwKLSAgc2VyaWFsaXplZF9zdGFydD0xMTg2LAotICBzZXJpYWxpemVkX2VuZD0xMjI5LAot
KQotCi1fREVTQ1JJUFRPUlBST1RPID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKLSAgbmFtZT0n
RGVzY3JpcHRvclByb3RvJywKLSAgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
clByb3RvJywKLSAgZmlsZW5hbWU9Tm9uZSwKLSAgZmlsZT1ERVNDUklQVE9SLAotICBjb250YWlu
aW5nX3R5cGU9Tm9uZSwKLSAgZmllbGRzPVsKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0
b3IoCi0gICAgICBuYW1lPSduYW1lJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvclByb3RvLm5hbWUnLCBpbmRleD0wLAotICAgICAgbnVtYmVyPTEsIHR5cGU9OSwgY3BwX3R5
cGU9OSwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3Zh
bHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51
bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZh
bHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rl
c2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nZmllbGQnLCBmdWxsX25hbWU9
J2dvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZmllbGQnLCBpbmRleD0xLAotICAgICAg
bnVtYmVyPTIsIHR5cGU9MTEsIGNwcF90eXBlPTEwLCBsYWJlbD0zLAotICAgICAgaGFzX2RlZmF1
bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9W10sCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9u
ZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5z
aW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0g
ICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nZXh0ZW5zaW9uJywg
ZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbicsIGlu
ZGV4PTIsCi0gICAgICBudW1iZXI9NiwgdHlwZT0xMSwgY3BwX3R5cGU9MTAsIGxhYmVsPTMsCi0g
ICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1bXSwKLSAgICAgIG1l
c3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0g
ICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0
aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1l
PSduZXN0ZWRfdHlwZScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90
by5uZXN0ZWRfdHlwZScsIGluZGV4PTMsCi0gICAgICBudW1iZXI9MywgdHlwZT0xMSwgY3BwX3R5
cGU9MTAsIGxhYmVsPTMsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92
YWx1ZT1bXSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFp
bmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29w
ZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2Ny
aXB0b3IoCi0gICAgICBuYW1lPSdlbnVtX3R5cGUnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9yUHJvdG8uZW51bV90eXBlJywgaW5kZXg9NCwKLSAgICAgIG51bWJlcj00LCB0
eXBlPTExLCBjcHBfdHlwZT0xMCwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZh
bHNlLCBkZWZhdWx0X3ZhbHVlPVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlw
ZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwg
ZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlw
dG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2V4dGVuc2lvbl9yYW5nZScsIGZ1bGxf
bmFtZT0nZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNpb25fcmFuZ2UnLCBp
bmRleD01LAotICAgICAgbnVtYmVyPTUsIHR5cGU9MTEsIGNwcF90eXBlPTEwLCBsYWJlbD0zLAot
ICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9W10sCi0gICAgICBt
ZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAot
ICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9w
dGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFt
ZT0nb25lb2ZfZGVjbCcsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90
by5vbmVvZl9kZWNsJywgaW5kZXg9NiwKLSAgICAgIG51bWJlcj04LCB0eXBlPTExLCBjcHBfdHlw
ZT0xMCwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3Zh
bHVlPVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWlu
aW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3Bl
PU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3Jp
cHRvcigKLSAgICAgIG5hbWU9J29wdGlvbnMnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5E
ZXNjcmlwdG9yUHJvdG8ub3B0aW9ucycsIGluZGV4PTcsCi0gICAgICBudW1iZXI9NywgdHlwZT0x
MSwgY3BwX3R5cGU9MTAsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwg
ZGVmYXVsdF92YWx1ZT1Ob25lLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1O
b25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0
ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9y
LkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J3Jlc2VydmVkX3JhbmdlJywgZnVsbF9uYW1l
PSdnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlc2VydmVkX3JhbmdlJywgaW5kZXg9
OCwKLSAgICAgIG51bWJlcj05LCB0eXBlPTExLCBjcHBfdHlwZT0xMCwgbGFiZWw9MywKLSAgICAg
IGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPVtdLAotICAgICAgbWVzc2Fn
ZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAg
IGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25z
PU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J3Jl
c2VydmVkX25hbWUnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8u
cmVzZXJ2ZWRfbmFtZScsIGluZGV4PTksCi0gICAgICBudW1iZXI9MTAsIHR5cGU9OSwgY3BwX3R5
cGU9OSwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3Zh
bHVlPVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWlu
aW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3Bl
PU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICBdLAotICBleHRlbnNpb25zPVsKLSAgXSwK
LSAgbmVzdGVkX3R5cGVzPVtfREVTQ1JJUFRPUlBST1RPX0VYVEVOU0lPTlJBTkdFLCBfREVTQ1JJ
UFRPUlBST1RPX1JFU0VSVkVEUkFOR0UsIF0sCi0gIGVudW1fdHlwZXM9WwotICBdLAotICBvcHRp
b25zPU5vbmUsCi0gIGlzX2V4dGVuZGFibGU9RmFsc2UsCi0gIHN5bnRheD0ncHJvdG8yJywKLSAg
ZXh0ZW5zaW9uX3Jhbmdlcz1bXSwKLSAgb25lb2ZzPVsKLSAgXSwKLSAgc2VyaWFsaXplZF9zdGFy
dD02MDUsCi0gIHNlcmlhbGl6ZWRfZW5kPTEyMjksCi0pCi0KLQotX0ZJRUxEREVTQ1JJUFRPUlBS
T1RPID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKLSAgbmFtZT0nRmllbGREZXNjcmlwdG9yUHJv
dG8nLAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bycs
Ci0gIGZpbGVuYW1lPU5vbmUsCi0gIGZpbGU9REVTQ1JJUFRPUiwKLSAgY29udGFpbmluZ190eXBl
PU5vbmUsCi0gIGZpZWxkcz1bCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAg
ICAgbmFtZT0nbmFtZScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRv
clByb3RvLm5hbWUnLCBpbmRleD0wLAotICAgICAgbnVtYmVyPTEsIHR5cGU9OSwgY3BwX3R5cGU9
OSwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVl
PV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90
eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNl
LCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2Ny
aXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nbnVtYmVyJywgZnVsbF9uYW1lPSdn
b29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubnVtYmVyJywgaW5kZXg9MSwKLSAg
ICAgIG51bWJlcj0zLCB0eXBlPTUsIGNwcF90eXBlPTEsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVm
YXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT0wLAotICAgICAgbWVzc2FnZV90eXBlPU5v
bmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVu
c2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAot
ICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2xhYmVsJywgZnVs
bF9uYW1lPSdnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubGFiZWwnLCBpbmRl
eD0yLAotICAgICAgbnVtYmVyPTQsIHR5cGU9MTQsIGNwcF90eXBlPTgsIGxhYmVsPTEsCi0gICAg
ICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT0xLAotICAgICAgbWVzc2Fn
ZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAg
IGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25z
PU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J3R5
cGUnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50eXBl
JywgaW5kZXg9MywKLSAgICAgIG51bWJlcj01LCB0eXBlPTE0LCBjcHBfdHlwZT04LCBsYWJlbD0x
LAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9MSwKLSAgICAg
IG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUs
Ci0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAg
b3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBu
YW1lPSd0eXBlX25hbWUnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0
b3JQcm90by50eXBlX25hbWUnLCBpbmRleD00LAotICAgICAgbnVtYmVyPTYsIHR5cGU9OSwgY3Bw
X3R5cGU9OSwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0
X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwg
ZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9u
PUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAg
X2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nZXh0ZW5kZWUnLCBmdWxs
X25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5leHRlbmRlZScsIGlu
ZGV4PTUsCi0gICAgICBudW1iZXI9MiwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAg
ICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgn
dXRmLTgnKSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFp
bmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29w
ZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2Ny
aXB0b3IoCi0gICAgICBuYW1lPSdkZWZhdWx0X3ZhbHVlJywgZnVsbF9uYW1lPSdnb29nbGUucHJv
dG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZGVmYXVsdF92YWx1ZScsIGluZGV4PTYsCi0gICAg
ICBudW1iZXI9NywgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1
bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKLSAg
ICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5v
bmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAg
ICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAg
ICBuYW1lPSdvbmVvZl9pbmRleCcsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVz
Y3JpcHRvclByb3RvLm9uZW9mX2luZGV4JywgaW5kZXg9NywKLSAgICAgIG51bWJlcj05LCB0eXBl
PTUsIGNwcF90eXBlPTEsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwg
ZGVmYXVsdF92YWx1ZT0wLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25l
LCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5z
aW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZp
ZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2pzb25fbmFtZScsIGZ1bGxfbmFtZT0nZ29vZ2xl
LnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmpzb25fbmFtZScsIGluZGV4PTgsCi0gICAg
ICBudW1iZXI9MTAsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZh
dWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCi0g
ICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1O
b25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAg
ICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAg
ICAgbmFtZT0nb3B0aW9ucycsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3Jp
cHRvclByb3RvLm9wdGlvbnMnLCBpbmRleD05LAotICAgICAgbnVtYmVyPTgsIHR5cGU9MTEsIGNw
cF90eXBlPTEwLCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1
bHRfdmFsdWU9Tm9uZSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwg
Y29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lv
bl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgXSwKLSAgZXh0ZW5zaW9ucz1b
Ci0gIF0sCi0gIG5lc3RlZF90eXBlcz1bXSwKLSAgZW51bV90eXBlcz1bCi0gICAgX0ZJRUxEREVT
Q1JJUFRPUlBST1RPX1RZUEUsCi0gICAgX0ZJRUxEREVTQ1JJUFRPUlBST1RPX0xBQkVMLAotICBd
LAotICBvcHRpb25zPU5vbmUsCi0gIGlzX2V4dGVuZGFibGU9RmFsc2UsCi0gIHN5bnRheD0ncHJv
dG8yJywKLSAgZXh0ZW5zaW9uX3Jhbmdlcz1bXSwKLSAgb25lb2ZzPVsKLSAgXSwKLSAgc2VyaWFs
aXplZF9zdGFydD0xMjMyLAotICBzZXJpYWxpemVkX2VuZD0xOTMyLAotKQotCi0KLV9PTkVPRkRF
U0NSSVBUT1JQUk9UTyA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCi0gIG5hbWU9J09uZW9mRGVz
Y3JpcHRvclByb3RvJywKLSAgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlw
dG9yUHJvdG8nLAotICBmaWxlbmFtZT1Ob25lLAotICBmaWxlPURFU0NSSVBUT1IsCi0gIGNvbnRh
aW5pbmdfdHlwZT1Ob25lLAotICBmaWVsZHM9WwotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3Jp
cHRvcigKLSAgICAgIG5hbWU9J25hbWUnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5PbmVv
ZkRlc2NyaXB0b3JQcm90by5uYW1lJywgaW5kZXg9MCwKLSAgICAgIG51bWJlcj0xLCB0eXBlPTks
IGNwcF90eXBlPTksIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVm
YXVsdF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAotICAgICAgbWVzc2FnZV90eXBlPU5v
bmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVu
c2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAot
ICBdLAotICBleHRlbnNpb25zPVsKLSAgXSwKLSAgbmVzdGVkX3R5cGVzPVtdLAotICBlbnVtX3R5
cGVzPVsKLSAgXSwKLSAgb3B0aW9ucz1Ob25lLAotICBpc19leHRlbmRhYmxlPUZhbHNlLAotICBz
eW50YXg9J3Byb3RvMicsCi0gIGV4dGVuc2lvbl9yYW5nZXM9W10sCi0gIG9uZW9mcz1bCi0gIF0s
Ci0gIHNlcmlhbGl6ZWRfc3RhcnQ9MTkzNCwKLSAgc2VyaWFsaXplZF9lbmQ9MTk3MCwKLSkKLQot
Ci1fRU5VTURFU0NSSVBUT1JQUk9UTyA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCi0gIG5hbWU9
J0VudW1EZXNjcmlwdG9yUHJvdG8nLAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5FbnVt
RGVzY3JpcHRvclByb3RvJywKLSAgZmlsZW5hbWU9Tm9uZSwKLSAgZmlsZT1ERVNDUklQVE9SLAot
ICBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgZmllbGRzPVsKLSAgICBfZGVzY3JpcHRvci5GaWVs
ZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSduYW1lJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9i
dWYuRW51bURlc2NyaXB0b3JQcm90by5uYW1lJywgaW5kZXg9MCwKLSAgICAgIG51bWJlcj0xLCB0
eXBlPTksIGNwcF90eXBlPTksIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxz
ZSwgZGVmYXVsdF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAotICAgICAgbWVzc2FnZV90
eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlz
X2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5v
bmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J3ZhbHVl
JywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by52YWx1ZScs
IGluZGV4PTEsCi0gICAgICBudW1iZXI9MiwgdHlwZT0xMSwgY3BwX3R5cGU9MTAsIGxhYmVsPTMs
Ci0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1bXSwKLSAgICAg
IG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUs
Ci0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAg
b3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBu
YW1lPSdvcHRpb25zJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQ
cm90by5vcHRpb25zJywgaW5kZXg9MiwKLSAgICAgIG51bWJlcj0zLCB0eXBlPTExLCBjcHBfdHlw
ZT0xMCwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3Zh
bHVlPU5vbmUsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRh
aW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2Nv
cGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gIF0sCi0gIGV4dGVuc2lvbnM9WwotICBd
LAotICBuZXN0ZWRfdHlwZXM9W10sCi0gIGVudW1fdHlwZXM9WwotICBdLAotICBvcHRpb25zPU5v
bmUsCi0gIGlzX2V4dGVuZGFibGU9RmFsc2UsCi0gIHN5bnRheD0ncHJvdG8yJywKLSAgZXh0ZW5z
aW9uX3Jhbmdlcz1bXSwKLSAgb25lb2ZzPVsKLSAgXSwKLSAgc2VyaWFsaXplZF9zdGFydD0xOTcz
LAotICBzZXJpYWxpemVkX2VuZD0yMTEzLAotKQotCi0KLV9FTlVNVkFMVUVERVNDUklQVE9SUFJP
VE8gPSBfZGVzY3JpcHRvci5EZXNjcmlwdG9yKAotICBuYW1lPSdFbnVtVmFsdWVEZXNjcmlwdG9y
UHJvdG8nLAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9y
UHJvdG8nLAotICBmaWxlbmFtZT1Ob25lLAotICBmaWxlPURFU0NSSVBUT1IsCi0gIGNvbnRhaW5p
bmdfdHlwZT1Ob25lLAotICBmaWVsZHM9WwotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRv
cigKLSAgICAgIG5hbWU9J25hbWUnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5FbnVtVmFs
dWVEZXNjcmlwdG9yUHJvdG8ubmFtZScsIGluZGV4PTAsCi0gICAgICBudW1iZXI9MSwgdHlwZT05
LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRl
ZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1O
b25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRl
bnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwK
LSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdudW1iZXInLCBm
dWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ubnVtYmVy
JywgaW5kZXg9MSwKLSAgICAgIG51bWJlcj0yLCB0eXBlPTUsIGNwcF90eXBlPTEsIGxhYmVsPTEs
Ci0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT0wLAotICAgICAg
bWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwK
LSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBv
cHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5h
bWU9J29wdGlvbnMnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlw
dG9yUHJvdG8ub3B0aW9ucycsIGluZGV4PTIsCi0gICAgICBudW1iZXI9MywgdHlwZT0xMSwgY3Bw
X3R5cGU9MTAsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVs
dF92YWx1ZT1Ob25lLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBj
b250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9u
X3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICBdLAotICBleHRlbnNpb25zPVsK
LSAgXSwKLSAgbmVzdGVkX3R5cGVzPVtdLAotICBlbnVtX3R5cGVzPVsKLSAgXSwKLSAgb3B0aW9u
cz1Ob25lLAotICBpc19leHRlbmRhYmxlPUZhbHNlLAotICBzeW50YXg9J3Byb3RvMicsCi0gIGV4
dGVuc2lvbl9yYW5nZXM9W10sCi0gIG9uZW9mcz1bCi0gIF0sCi0gIHNlcmlhbGl6ZWRfc3RhcnQ9
MjExNSwKLSAgc2VyaWFsaXplZF9lbmQ9MjIyMywKLSkKLQotCi1fU0VSVklDRURFU0NSSVBUT1JQ
Uk9UTyA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCi0gIG5hbWU9J1NlcnZpY2VEZXNjcmlwdG9y
UHJvdG8nLAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclBy
b3RvJywKLSAgZmlsZW5hbWU9Tm9uZSwKLSAgZmlsZT1ERVNDUklQVE9SLAotICBjb250YWluaW5n
X3R5cGU9Tm9uZSwKLSAgZmllbGRzPVsKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3Io
Ci0gICAgICBuYW1lPSduYW1lJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuU2VydmljZURl
c2NyaXB0b3JQcm90by5uYW1lJywgaW5kZXg9MCwKLSAgICAgIG51bWJlcj0xLCB0eXBlPTksIGNw
cF90eXBlPTksIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVs
dF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUs
IGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lv
bj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAg
IF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J21ldGhvZCcsIGZ1bGxf
bmFtZT0nZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ubWV0aG9kJywgaW5k
ZXg9MSwKLSAgICAgIG51bWJlcj0yLCB0eXBlPTExLCBjcHBfdHlwZT0xMCwgbGFiZWw9MywKLSAg
ICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPVtdLAotICAgICAgbWVz
c2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAg
ICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRp
b25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9
J29wdGlvbnMnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclBy
b3RvLm9wdGlvbnMnLCBpbmRleD0yLAotICAgICAgbnVtYmVyPTMsIHR5cGU9MTEsIGNwcF90eXBl
PTEwLCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFs
dWU9Tm9uZSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFp
bmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29w
ZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgXSwKLSAgZXh0ZW5zaW9ucz1bCi0gIF0s
Ci0gIG5lc3RlZF90eXBlcz1bXSwKLSAgZW51bV90eXBlcz1bCi0gIF0sCi0gIG9wdGlvbnM9Tm9u
ZSwKLSAgaXNfZXh0ZW5kYWJsZT1GYWxzZSwKLSAgc3ludGF4PSdwcm90bzInLAotICBleHRlbnNp
b25fcmFuZ2VzPVtdLAotICBvbmVvZnM9WwotICBdLAotICBzZXJpYWxpemVkX3N0YXJ0PTIyMjYs
Ci0gIHNlcmlhbGl6ZWRfZW5kPTIzNzAsCi0pCi0KLQotX01FVEhPRERFU0NSSVBUT1JQUk9UTyA9
IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCi0gIG5hbWU9J01ldGhvZERlc2NyaXB0b3JQcm90bycs
Ci0gIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bycsCi0g
IGZpbGVuYW1lPU5vbmUsCi0gIGZpbGU9REVTQ1JJUFRPUiwKLSAgY29udGFpbmluZ190eXBlPU5v
bmUsCi0gIGZpZWxkcz1bCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAg
bmFtZT0nbmFtZScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQ
cm90by5uYW1lJywgaW5kZXg9MCwKLSAgICAgIG51bWJlcj0xLCB0eXBlPTksIGNwcF90eXBlPTks
IGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1f
YigiIikuZGVjb2RlKCd1dGYtOCcpLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlw
ZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwg
ZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlw
dG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2lucHV0X3R5cGUnLCBmdWxsX25hbWU9
J2dvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uaW5wdXRfdHlwZScsIGluZGV4
PTEsCi0gICAgICBudW1iZXI9MiwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAgICAg
aGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRm
LTgnKSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmlu
Z190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1O
b25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0
b3IoCi0gICAgICBuYW1lPSdvdXRwdXRfdHlwZScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVm
Lk1ldGhvZERlc2NyaXB0b3JQcm90by5vdXRwdXRfdHlwZScsIGluZGV4PTIsCi0gICAgICBudW1i
ZXI9MywgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFs
dWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKLSAgICAgIG1l
c3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0g
ICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0
aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1l
PSdvcHRpb25zJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclBy
b3RvLm9wdGlvbnMnLCBpbmRleD0zLAotICAgICAgbnVtYmVyPTQsIHR5cGU9MTEsIGNwcF90eXBl
PTEwLCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFs
dWU9Tm9uZSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFp
bmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29w
ZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2Ny
aXB0b3IoCi0gICAgICBuYW1lPSdjbGllbnRfc3RyZWFtaW5nJywgZnVsbF9uYW1lPSdnb29nbGUu
cHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmNsaWVudF9zdHJlYW1pbmcnLCBpbmRleD00
LAotICAgICAgbnVtYmVyPTUsIHR5cGU9OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKLSAgICAgIGhh
c19kZWZhdWx0X3ZhbHVlPVRydWUsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCi0gICAgICBtZXNzYWdl
X3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAg
aXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9
Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nc2Vy
dmVyX3N0cmVhbWluZycsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0
b3JQcm90by5zZXJ2ZXJfc3RyZWFtaW5nJywgaW5kZXg9NSwKLSAgICAgIG51bWJlcj02LCB0eXBl
PTgsIGNwcF90eXBlPTcsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1UcnVlLCBk
ZWZhdWx0X3ZhbHVlPUZhbHNlLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1O
b25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0
ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICBdLAotICBleHRlbnNp
b25zPVsKLSAgXSwKLSAgbmVzdGVkX3R5cGVzPVtdLAotICBlbnVtX3R5cGVzPVsKLSAgXSwKLSAg
b3B0aW9ucz1Ob25lLAotICBpc19leHRlbmRhYmxlPUZhbHNlLAotICBzeW50YXg9J3Byb3RvMics
Ci0gIGV4dGVuc2lvbl9yYW5nZXM9W10sCi0gIG9uZW9mcz1bCi0gIF0sCi0gIHNlcmlhbGl6ZWRf
c3RhcnQ9MjM3MywKLSAgc2VyaWFsaXplZF9lbmQ9MjU2NiwKLSkKLQotCi1fRklMRU9QVElPTlMg
PSBfZGVzY3JpcHRvci5EZXNjcmlwdG9yKAotICBuYW1lPSdGaWxlT3B0aW9ucycsCi0gIGZ1bGxf
bmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zJywKLSAgZmlsZW5hbWU9Tm9uZSwKLSAg
ZmlsZT1ERVNDUklQVE9SLAotICBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgZmllbGRzPVsKLSAg
ICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdqYXZhX3BhY2thZ2Un
LCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5qYXZhX3BhY2thZ2UnLCBp
bmRleD0wLAotICAgICAgbnVtYmVyPTEsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKLSAg
ICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUo
J3V0Zi04JyksCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRh
aW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2Nv
cGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNj
cmlwdG9yKAotICAgICAgbmFtZT0namF2YV9vdXRlcl9jbGFzc25hbWUnLCBmdWxsX25hbWU9J2dv
b2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5qYXZhX291dGVyX2NsYXNzbmFtZScsIGluZGV4PTEs
Ci0gICAgICBudW1iZXI9OCwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAgICAgaGFz
X2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgn
KSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190
eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25l
LAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3Io
Ci0gICAgICBuYW1lPSdqYXZhX211bHRpcGxlX2ZpbGVzJywgZnVsbF9uYW1lPSdnb29nbGUucHJv
dG9idWYuRmlsZU9wdGlvbnMuamF2YV9tdWx0aXBsZV9maWxlcycsIGluZGV4PTIsCi0gICAgICBu
dW1iZXI9MTAsIHR5cGU9OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0
X3ZhbHVlPVRydWUsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9u
ZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5z
aW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0g
ICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0namF2YV9nZW5lcmF0
ZV9lcXVhbHNfYW5kX2hhc2gnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCcsIGluZGV4PTMsCi0gICAgICBudW1iZXI9
MjAsIHR5cGU9OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVl
PVRydWUsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51
bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZh
bHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rl
c2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0namF2YV9zdHJpbmdfY2hlY2tf
dXRmOCcsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfc3RyaW5n
X2NoZWNrX3V0ZjgnLCBpbmRleD00LAotICAgICAgbnVtYmVyPTI3LCB0eXBlPTgsIGNwcF90eXBl
PTcsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1UcnVlLCBkZWZhdWx0X3ZhbHVl
PUZhbHNlLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWlu
aW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3Bl
PU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3Jp
cHRvcigKLSAgICAgIG5hbWU9J29wdGltaXplX2ZvcicsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3Rv
YnVmLkZpbGVPcHRpb25zLm9wdGltaXplX2ZvcicsIGluZGV4PTUsCi0gICAgICBudW1iZXI9OSwg
dHlwZT0xNCwgY3BwX3R5cGU9OCwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPVRy
dWUsIGRlZmF1bHRfdmFsdWU9MSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9
Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4
dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRv
ci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdnb19wYWNrYWdlJywgZnVsbF9uYW1lPSdn
b29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZ29fcGFja2FnZScsIGluZGV4PTYsCi0gICAgICBu
dW1iZXI9MTEsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0
X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCi0gICAg
ICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25l
LAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAg
IG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAg
bmFtZT0nY2NfZ2VuZXJpY19zZXJ2aWNlcycsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZp
bGVPcHRpb25zLmNjX2dlbmVyaWNfc2VydmljZXMnLCBpbmRleD03LAotICAgICAgbnVtYmVyPTE2
LCB0eXBlPTgsIGNwcF90eXBlPTcsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1U
cnVlLCBkZWZhdWx0X3ZhbHVlPUZhbHNlLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1f
dHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxz
ZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNj
cmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2phdmFfZ2VuZXJpY19zZXJ2aWNl
cycsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfZ2VuZXJpY19z
ZXJ2aWNlcycsIGluZGV4PTgsCi0gICAgICBudW1iZXI9MTcsIHR5cGU9OCwgY3BwX3R5cGU9Nywg
bGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPVRydWUsIGRlZmF1bHRfdmFsdWU9RmFs
c2UsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdf
dHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9u
ZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9y
KAotICAgICAgbmFtZT0ncHlfZ2VuZXJpY19zZXJ2aWNlcycsIGZ1bGxfbmFtZT0nZ29vZ2xlLnBy
b3RvYnVmLkZpbGVPcHRpb25zLnB5X2dlbmVyaWNfc2VydmljZXMnLCBpbmRleD05LAotICAgICAg
bnVtYmVyPTE4LCB0eXBlPTgsIGNwcF90eXBlPTcsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVs
dF92YWx1ZT1UcnVlLCBkZWZhdWx0X3ZhbHVlPUZhbHNlLAotICAgICAgbWVzc2FnZV90eXBlPU5v
bmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVu
c2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAot
ICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2RlcHJlY2F0ZWQn
LCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5kZXByZWNhdGVkJywgaW5k
ZXg9MTAsCi0gICAgICBudW1iZXI9MjMsIHR5cGU9OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKLSAg
ICAgIGhhc19kZWZhdWx0X3ZhbHVlPVRydWUsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCi0gICAgICBt
ZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAot
ICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9w
dGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFt
ZT0nY2NfZW5hYmxlX2FyZW5hcycsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRp
b25zLmNjX2VuYWJsZV9hcmVuYXMnLCBpbmRleD0xMSwKLSAgICAgIG51bWJlcj0zMSwgdHlwZT04
LCBjcHBfdHlwZT03LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9VHJ1ZSwgZGVm
YXVsdF92YWx1ZT1GYWxzZSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9u
ZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVu
c2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5G
aWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdvYmpjX2NsYXNzX3ByZWZpeCcsIGZ1bGxfbmFt
ZT0nZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLm9iamNfY2xhc3NfcHJlZml4JywgaW5kZXg9
MTIsCi0gICAgICBudW1iZXI9MzYsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKLSAgICAg
IGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0
Zi04JyksCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5p
bmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9
Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlw
dG9yKAotICAgICAgbmFtZT0nY3NoYXJwX25hbWVzcGFjZScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnBy
b3RvYnVmLkZpbGVPcHRpb25zLmNzaGFycF9uYW1lc3BhY2UnLCBpbmRleD0xMywKLSAgICAgIG51
bWJlcj0zNywgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRf
dmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKLSAgICAg
IG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUs
Ci0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAg
b3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBu
YW1lPSd1bmludGVycHJldGVkX29wdGlvbicsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkZp
bGVPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uJywgaW5kZXg9MTQsCi0gICAgICBudW1iZXI9
OTk5LCB0eXBlPTExLCBjcHBfdHlwZT0xMCwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZhdWx0X3Zh
bHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVu
dW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1G
YWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICBdLAot
ICBleHRlbnNpb25zPVsKLSAgXSwKLSAgbmVzdGVkX3R5cGVzPVtdLAotICBlbnVtX3R5cGVzPVsK
LSAgICBfRklMRU9QVElPTlNfT1BUSU1JWkVNT0RFLAotICBdLAotICBvcHRpb25zPU5vbmUsCi0g
IGlzX2V4dGVuZGFibGU9VHJ1ZSwKLSAgc3ludGF4PSdwcm90bzInLAotICBleHRlbnNpb25fcmFu
Z2VzPVsoMTAwMCwgNTM2ODcwOTEyKSwgXSwKLSAgb25lb2ZzPVsKLSAgXSwKLSAgc2VyaWFsaXpl
ZF9zdGFydD0yNTY5LAotICBzZXJpYWxpemVkX2VuZD0zMjE2LAotKQotCi0KLV9NRVNTQUdFT1BU
SU9OUyA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCi0gIG5hbWU9J01lc3NhZ2VPcHRpb25zJywK
LSAgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMnLAotICBmaWxlbmFt
ZT1Ob25lLAotICBmaWxlPURFU0NSSVBUT1IsCi0gIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICBm
aWVsZHM9WwotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J21l
c3NhZ2Vfc2V0X3dpcmVfZm9ybWF0JywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuTWVzc2Fn
ZU9wdGlvbnMubWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQnLCBpbmRleD0wLAotICAgICAgbnVtYmVy
PTEsIHR5cGU9OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVl
PVRydWUsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51
bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZh
bHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rl
c2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nbm9fc3RhbmRhcmRfZGVzY3Jp
cHRvcl9hY2Nlc3NvcicsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25z
Lm5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3InLCBpbmRleD0xLAotICAgICAgbnVtYmVy
PTIsIHR5cGU9OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVl
PVRydWUsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51
bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZh
bHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rl
c2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nZGVwcmVjYXRlZCcsIGZ1bGxf
bmFtZT0nZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlcHJlY2F0ZWQnLCBpbmRleD0y
LAotICAgICAgbnVtYmVyPTMsIHR5cGU9OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKLSAgICAgIGhh
c19kZWZhdWx0X3ZhbHVlPVRydWUsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCi0gICAgICBtZXNzYWdl
X3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAg
aXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9
Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nbWFw
X2VudHJ5JywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMubWFwX2Vu
dHJ5JywgaW5kZXg9MywKLSAgICAgIG51bWJlcj03LCB0eXBlPTgsIGNwcF90eXBlPTcsIGxhYmVs
PTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1GYWxzZSwK
LSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBl
PU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAot
ICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0g
ICAgICBuYW1lPSd1bmludGVycHJldGVkX29wdGlvbicsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3Rv
YnVmLk1lc3NhZ2VPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uJywgaW5kZXg9NCwKLSAgICAg
IG51bWJlcj05OTksIHR5cGU9MTEsIGNwcF90eXBlPTEwLCBsYWJlbD0zLAotICAgICAgaGFzX2Rl
ZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9W10sCi0gICAgICBtZXNzYWdlX3R5cGU9
Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0
ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSks
Ci0gIF0sCi0gIGV4dGVuc2lvbnM9WwotICBdLAotICBuZXN0ZWRfdHlwZXM9W10sCi0gIGVudW1f
dHlwZXM9WwotICBdLAotICBvcHRpb25zPU5vbmUsCi0gIGlzX2V4dGVuZGFibGU9VHJ1ZSwKLSAg
c3ludGF4PSdwcm90bzInLAotICBleHRlbnNpb25fcmFuZ2VzPVsoMTAwMCwgNTM2ODcwOTEyKSwg
XSwKLSAgb25lb2ZzPVsKLSAgXSwKLSAgc2VyaWFsaXplZF9zdGFydD0zMjE5LAotICBzZXJpYWxp
emVkX2VuZD0zNDQ5LAotKQotCi0KLV9GSUVMRE9QVElPTlMgPSBfZGVzY3JpcHRvci5EZXNjcmlw
dG9yKAotICBuYW1lPSdGaWVsZE9wdGlvbnMnLAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1
Zi5GaWVsZE9wdGlvbnMnLAotICBmaWxlbmFtZT1Ob25lLAotICBmaWxlPURFU0NSSVBUT1IsCi0g
IGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICBmaWVsZHM9WwotICAgIF9kZXNjcmlwdG9yLkZpZWxk
RGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2N0eXBlJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9i
dWYuRmllbGRPcHRpb25zLmN0eXBlJywgaW5kZXg9MCwKLSAgICAgIG51bWJlcj0xLCB0eXBlPTE0
LCBjcHBfdHlwZT04LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9VHJ1ZSwgZGVm
YXVsdF92YWx1ZT0wLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBj
b250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9u
X3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxk
RGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J3BhY2tlZCcsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3Rv
YnVmLkZpZWxkT3B0aW9ucy5wYWNrZWQnLCBpbmRleD0xLAotICAgICAgbnVtYmVyPTIsIHR5cGU9
OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBk
ZWZhdWx0X3ZhbHVlPUZhbHNlLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1O
b25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0
ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9y
LkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2pzdHlwZScsIGZ1bGxfbmFtZT0nZ29vZ2xl
LnByb3RvYnVmLkZpZWxkT3B0aW9ucy5qc3R5cGUnLCBpbmRleD0yLAotICAgICAgbnVtYmVyPTYs
IHR5cGU9MTQsIGNwcF90eXBlPTgsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1U
cnVlLCBkZWZhdWx0X3ZhbHVlPTAsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBl
PU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBl
eHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0
b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nbGF6eScsIGZ1bGxfbmFtZT0nZ29vZ2xl
LnByb3RvYnVmLkZpZWxkT3B0aW9ucy5sYXp5JywgaW5kZXg9MywKLSAgICAgIG51bWJlcj01LCB0
eXBlPTgsIGNwcF90eXBlPTcsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1UcnVl
LCBkZWZhdWx0X3ZhbHVlPUZhbHNlLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlw
ZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwg
ZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlw
dG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2RlcHJlY2F0ZWQnLCBmdWxsX25hbWU9
J2dvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZGVwcmVjYXRlZCcsIGluZGV4PTQsCi0gICAg
ICBudW1iZXI9MywgdHlwZT04LCBjcHBfdHlwZT03LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1
bHRfdmFsdWU9VHJ1ZSwgZGVmYXVsdF92YWx1ZT1GYWxzZSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1O
b25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRl
bnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwK
LSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSd3ZWFrJywgZnVs
bF9uYW1lPSdnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLndlYWsnLCBpbmRleD01LAotICAg
ICAgbnVtYmVyPTEwLCB0eXBlPTgsIGNwcF90eXBlPTcsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVm
YXVsdF92YWx1ZT1UcnVlLCBkZWZhdWx0X3ZhbHVlPUZhbHNlLAotICAgICAgbWVzc2FnZV90eXBl
PU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4
dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUp
LAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J3VuaW50ZXJw
cmV0ZWRfb3B0aW9uJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnVu
aW50ZXJwcmV0ZWRfb3B0aW9uJywgaW5kZXg9NiwKLSAgICAgIG51bWJlcj05OTksIHR5cGU9MTEs
IGNwcF90eXBlPTEwLCBsYWJlbD0zLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRl
ZmF1bHRfdmFsdWU9W10sCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUs
IGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNp
b25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gIF0sCi0gIGV4dGVuc2lvbnM9
WwotICBdLAotICBuZXN0ZWRfdHlwZXM9W10sCi0gIGVudW1fdHlwZXM9WwotICAgIF9GSUVMRE9Q
VElPTlNfQ1RZUEUsCi0gICAgX0ZJRUxET1BUSU9OU19KU1RZUEUsCi0gIF0sCi0gIG9wdGlvbnM9
Tm9uZSwKLSAgaXNfZXh0ZW5kYWJsZT1UcnVlLAotICBzeW50YXg9J3Byb3RvMicsCi0gIGV4dGVu
c2lvbl9yYW5nZXM9WygxMDAwLCA1MzY4NzA5MTIpLCBdLAotICBvbmVvZnM9WwotICBdLAotICBz
ZXJpYWxpemVkX3N0YXJ0PTM0NTIsCi0gIHNlcmlhbGl6ZWRfZW5kPTM4NjAsCi0pCi0KLQotX0VO
VU1PUFRJT05TID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKLSAgbmFtZT0nRW51bU9wdGlvbnMn
LAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucycsCi0gIGZpbGVuYW1l
PU5vbmUsCi0gIGZpbGU9REVTQ1JJUFRPUiwKLSAgY29udGFpbmluZ190eXBlPU5vbmUsCi0gIGZp
ZWxkcz1bCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nYWxs
b3dfYWxpYXMnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5hbGxvd19h
bGlhcycsIGluZGV4PTAsCi0gICAgICBudW1iZXI9MiwgdHlwZT04LCBjcHBfdHlwZT03LCBsYWJl
bD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9RmFsc2Us
Ci0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlw
ZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwK
LSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAot
ICAgICAgbmFtZT0nZGVwcmVjYXRlZCcsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLkVudW1P
cHRpb25zLmRlcHJlY2F0ZWQnLCBpbmRleD0xLAotICAgICAgbnVtYmVyPTMsIHR5cGU9OCwgY3Bw
X3R5cGU9NywgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPVRydWUsIGRlZmF1bHRf
dmFsdWU9RmFsc2UsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNv
bnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25f
c2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGRE
ZXNjcmlwdG9yKAotICAgICAgbmFtZT0ndW5pbnRlcnByZXRlZF9vcHRpb24nLCBmdWxsX25hbWU9
J2dvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbicsIGluZGV4
PTIsCi0gICAgICBudW1iZXI9OTk5LCB0eXBlPTExLCBjcHBfdHlwZT0xMCwgbGFiZWw9MywKLSAg
ICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPVtdLAotICAgICAgbWVz
c2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAg
ICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRp
b25zPU5vbmUpLAotICBdLAotICBleHRlbnNpb25zPVsKLSAgXSwKLSAgbmVzdGVkX3R5cGVzPVtd
LAotICBlbnVtX3R5cGVzPVsKLSAgXSwKLSAgb3B0aW9ucz1Ob25lLAotICBpc19leHRlbmRhYmxl
PVRydWUsCi0gIHN5bnRheD0ncHJvdG8yJywKLSAgZXh0ZW5zaW9uX3Jhbmdlcz1bKDEwMDAsIDUz
Njg3MDkxMiksIF0sCi0gIG9uZW9mcz1bCi0gIF0sCi0gIHNlcmlhbGl6ZWRfc3RhcnQ9Mzg2MywK
LSAgc2VyaWFsaXplZF9lbmQ9NDAwNCwKLSkKLQotCi1fRU5VTVZBTFVFT1BUSU9OUyA9IF9kZXNj
cmlwdG9yLkRlc2NyaXB0b3IoCi0gIG5hbWU9J0VudW1WYWx1ZU9wdGlvbnMnLAotICBmdWxsX25h
bWU9J2dvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zJywKLSAgZmlsZW5hbWU9Tm9uZSwK
LSAgZmlsZT1ERVNDUklQVE9SLAotICBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgZmllbGRzPVsK
LSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdkZXByZWNhdGVk
JywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5kZXByZWNhdGVk
JywgaW5kZXg9MCwKLSAgICAgIG51bWJlcj0xLCB0eXBlPTgsIGNwcF90eXBlPTcsIGxhYmVsPTEs
Ci0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1UcnVlLCBkZWZhdWx0X3ZhbHVlPUZhbHNlLAotICAg
ICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9u
ZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAg
ICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAg
IG5hbWU9J3VuaW50ZXJwcmV0ZWRfb3B0aW9uJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYu
RW51bVZhbHVlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbicsIGluZGV4PTEsCi0gICAgICBu
dW1iZXI9OTk5LCB0eXBlPTExLCBjcHBfdHlwZT0xMCwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZh
dWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5v
bmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVu
c2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAot
ICBdLAotICBleHRlbnNpb25zPVsKLSAgXSwKLSAgbmVzdGVkX3R5cGVzPVtdLAotICBlbnVtX3R5
cGVzPVsKLSAgXSwKLSAgb3B0aW9ucz1Ob25lLAotICBpc19leHRlbmRhYmxlPVRydWUsCi0gIHN5
bnRheD0ncHJvdG8yJywKLSAgZXh0ZW5zaW9uX3Jhbmdlcz1bKDEwMDAsIDUzNjg3MDkxMiksIF0s
Ci0gIG9uZW9mcz1bCi0gIF0sCi0gIHNlcmlhbGl6ZWRfc3RhcnQ9NDAwNiwKLSAgc2VyaWFsaXpl
ZF9lbmQ9NDEzMSwKLSkKLQotCi1fU0VSVklDRU9QVElPTlMgPSBfZGVzY3JpcHRvci5EZXNjcmlw
dG9yKAotICBuYW1lPSdTZXJ2aWNlT3B0aW9ucycsCi0gIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3Rv
YnVmLlNlcnZpY2VPcHRpb25zJywKLSAgZmlsZW5hbWU9Tm9uZSwKLSAgZmlsZT1ERVNDUklQVE9S
LAotICBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgZmllbGRzPVsKLSAgICBfZGVzY3JpcHRvci5G
aWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdkZXByZWNhdGVkJywgZnVsbF9uYW1lPSdnb29n
bGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZGVwcmVjYXRlZCcsIGluZGV4PTAsCi0gICAgICBu
dW1iZXI9MzMsIHR5cGU9OCwgY3BwX3R5cGU9NywgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0
X3ZhbHVlPVRydWUsIGRlZmF1bHRfdmFsdWU9RmFsc2UsCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9u
ZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5z
aW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0g
ICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0ndW5pbnRlcnByZXRl
ZF9vcHRpb24nLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy51bmlu
dGVycHJldGVkX29wdGlvbicsIGluZGV4PTEsCi0gICAgICBudW1iZXI9OTk5LCB0eXBlPTExLCBj
cHBfdHlwZT0xMCwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZh
dWx0X3ZhbHVlPVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBj
b250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9u
X3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICBdLAotICBleHRlbnNpb25zPVsK
LSAgXSwKLSAgbmVzdGVkX3R5cGVzPVtdLAotICBlbnVtX3R5cGVzPVsKLSAgXSwKLSAgb3B0aW9u
cz1Ob25lLAotICBpc19leHRlbmRhYmxlPVRydWUsCi0gIHN5bnRheD0ncHJvdG8yJywKLSAgZXh0
ZW5zaW9uX3Jhbmdlcz1bKDEwMDAsIDUzNjg3MDkxMiksIF0sCi0gIG9uZW9mcz1bCi0gIF0sCi0g
IHNlcmlhbGl6ZWRfc3RhcnQ9NDEzMywKLSAgc2VyaWFsaXplZF9lbmQ9NDI1NiwKLSkKLQotCi1f
TUVUSE9ET1BUSU9OUyA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCi0gIG5hbWU9J01ldGhvZE9w
dGlvbnMnLAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zJywKLSAg
ZmlsZW5hbWU9Tm9uZSwKLSAgZmlsZT1ERVNDUklQVE9SLAotICBjb250YWluaW5nX3R5cGU9Tm9u
ZSwKLSAgZmllbGRzPVsKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBu
YW1lPSdkZXByZWNhdGVkJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9u
cy5kZXByZWNhdGVkJywgaW5kZXg9MCwKLSAgICAgIG51bWJlcj0zMywgdHlwZT04LCBjcHBfdHlw
ZT03LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9VHJ1ZSwgZGVmYXVsdF92YWx1
ZT1GYWxzZSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFp
bmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29w
ZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2Ny
aXB0b3IoCi0gICAgICBuYW1lPSd1bmludGVycHJldGVkX29wdGlvbicsIGZ1bGxfbmFtZT0nZ29v
Z2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24nLCBpbmRleD0x
LAotICAgICAgbnVtYmVyPTk5OSwgdHlwZT0xMSwgY3BwX3R5cGU9MTAsIGxhYmVsPTMsCi0gICAg
ICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1bXSwKLSAgICAgIG1lc3Nh
Z2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAg
ICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9u
cz1Ob25lKSwKLSAgXSwKLSAgZXh0ZW5zaW9ucz1bCi0gIF0sCi0gIG5lc3RlZF90eXBlcz1bXSwK
LSAgZW51bV90eXBlcz1bCi0gIF0sCi0gIG9wdGlvbnM9Tm9uZSwKLSAgaXNfZXh0ZW5kYWJsZT1U
cnVlLAotICBzeW50YXg9J3Byb3RvMicsCi0gIGV4dGVuc2lvbl9yYW5nZXM9WygxMDAwLCA1MzY4
NzA5MTIpLCBdLAotICBvbmVvZnM9WwotICBdLAotICBzZXJpYWxpemVkX3N0YXJ0PTQyNTgsCi0g
IHNlcmlhbGl6ZWRfZW5kPTQzODAsCi0pCi0KLQotX1VOSU5URVJQUkVURURPUFRJT05fTkFNRVBB
UlQgPSBfZGVzY3JpcHRvci5EZXNjcmlwdG9yKAotICBuYW1lPSdOYW1lUGFydCcsCi0gIGZ1bGxf
bmFtZT0nZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQnLAotICBm
aWxlbmFtZT1Ob25lLAotICBmaWxlPURFU0NSSVBUT1IsCi0gIGNvbnRhaW5pbmdfdHlwZT1Ob25l
LAotICBmaWVsZHM9WwotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5h
bWU9J25hbWVfcGFydCcsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRP
cHRpb24uTmFtZVBhcnQubmFtZV9wYXJ0JywgaW5kZXg9MCwKLSAgICAgIG51bWJlcj0xLCB0eXBl
PTksIGNwcF90eXBlPTksIGxhYmVsPTIsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwg
ZGVmYXVsdF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAotICAgICAgbWVzc2FnZV90eXBl
PU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4
dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUp
LAotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2lzX2V4dGVu
c2lvbicsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFt
ZVBhcnQuaXNfZXh0ZW5zaW9uJywgaW5kZXg9MSwKLSAgICAgIG51bWJlcj0yLCB0eXBlPTgsIGNw
cF90eXBlPTcsIGxhYmVsPTIsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVs
dF92YWx1ZT1GYWxzZSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwg
Y29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lv
bl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgXSwKLSAgZXh0ZW5zaW9ucz1b
Ci0gIF0sCi0gIG5lc3RlZF90eXBlcz1bXSwKLSAgZW51bV90eXBlcz1bCi0gIF0sCi0gIG9wdGlv
bnM9Tm9uZSwKLSAgaXNfZXh0ZW5kYWJsZT1GYWxzZSwKLSAgc3ludGF4PSdwcm90bzInLAotICBl
eHRlbnNpb25fcmFuZ2VzPVtdLAotICBvbmVvZnM9WwotICBdLAotICBzZXJpYWxpemVkX3N0YXJ0
PTQ2MTgsCi0gIHNlcmlhbGl6ZWRfZW5kPTQ2NjksCi0pCi0KLV9VTklOVEVSUFJFVEVET1BUSU9O
ID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKLSAgbmFtZT0nVW5pbnRlcnByZXRlZE9wdGlvbics
Ci0gIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24nLAotICBm
aWxlbmFtZT1Ob25lLAotICBmaWxlPURFU0NSSVBUT1IsCi0gIGNvbnRhaW5pbmdfdHlwZT1Ob25l
LAotICBmaWVsZHM9WwotICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5h
bWU9J25hbWUnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9u
Lm5hbWUnLCBpbmRleD0wLAotICAgICAgbnVtYmVyPTIsIHR5cGU9MTEsIGNwcF90eXBlPTEwLCBs
YWJlbD0zLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9W10s
Ci0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlw
ZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwK
LSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAot
ICAgICAgbmFtZT0naWRlbnRpZmllcl92YWx1ZScsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVm
LlVuaW50ZXJwcmV0ZWRPcHRpb24uaWRlbnRpZmllcl92YWx1ZScsIGluZGV4PTEsCi0gICAgICBu
dW1iZXI9MywgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRf
dmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKLSAgICAg
IG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUs
Ci0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAg
b3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBu
YW1lPSdwb3NpdGl2ZV9pbnRfdmFsdWUnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5Vbmlu
dGVycHJldGVkT3B0aW9uLnBvc2l0aXZlX2ludF92YWx1ZScsIGluZGV4PTIsCi0gICAgICBudW1i
ZXI9NCwgdHlwZT00LCBjcHBfdHlwZT00LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFs
dWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9MCwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVt
X3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFs
c2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVz
Y3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSduZWdhdGl2ZV9pbnRfdmFsdWUn
LCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLm5lZ2F0aXZl
X2ludF92YWx1ZScsIGluZGV4PTMsCi0gICAgICBudW1iZXI9NSwgdHlwZT0zLCBjcHBfdHlwZT0y
LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9
MCwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190
eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25l
LAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3Io
Ci0gICAgICBuYW1lPSdkb3VibGVfdmFsdWUnLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5V
bmludGVycHJldGVkT3B0aW9uLmRvdWJsZV92YWx1ZScsIGluZGV4PTQsCi0gICAgICBudW1iZXI9
NiwgdHlwZT0xLCBjcHBfdHlwZT01LCBsYWJlbD0xLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9
RmFsc2UsIGRlZmF1bHRfdmFsdWU9ZmxvYXQoMCksCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwg
ZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9u
PUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAg
X2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nc3RyaW5nX3ZhbHVlJywg
ZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zdHJpbmdfdmFs
dWUnLCBpbmRleD01LAotICAgICAgbnVtYmVyPTcsIHR5cGU9MTIsIGNwcF90eXBlPTksIGxhYmVs
PTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1fYigiIiks
Ci0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlw
ZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwK
LSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAot
ICAgICAgbmFtZT0nYWdncmVnYXRlX3ZhbHVlJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYu
VW5pbnRlcnByZXRlZE9wdGlvbi5hZ2dyZWdhdGVfdmFsdWUnLCBpbmRleD02LAotICAgICAgbnVt
YmVyPTgsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKLSAgICAgIGhhc19kZWZhdWx0X3Zh
bHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCi0gICAgICBt
ZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAot
ICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9w
dGlvbnM9Tm9uZSksCi0gIF0sCi0gIGV4dGVuc2lvbnM9WwotICBdLAotICBuZXN0ZWRfdHlwZXM9
W19VTklOVEVSUFJFVEVET1BUSU9OX05BTUVQQVJULCBdLAotICBlbnVtX3R5cGVzPVsKLSAgXSwK
LSAgb3B0aW9ucz1Ob25lLAotICBpc19leHRlbmRhYmxlPUZhbHNlLAotICBzeW50YXg9J3Byb3Rv
MicsCi0gIGV4dGVuc2lvbl9yYW5nZXM9W10sCi0gIG9uZW9mcz1bCi0gIF0sCi0gIHNlcmlhbGl6
ZWRfc3RhcnQ9NDM4MywKLSAgc2VyaWFsaXplZF9lbmQ9NDY2OSwKLSkKLQotCi1fU09VUkNFQ09E
RUlORk9fTE9DQVRJT04gPSBfZGVzY3JpcHRvci5EZXNjcmlwdG9yKAotICBuYW1lPSdMb2NhdGlv
bicsCi0gIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9u
JywKLSAgZmlsZW5hbWU9Tm9uZSwKLSAgZmlsZT1ERVNDUklQVE9SLAotICBjb250YWluaW5nX3R5
cGU9Tm9uZSwKLSAgZmllbGRzPVsKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0g
ICAgICBuYW1lPSdwYXRoJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUlu
Zm8uTG9jYXRpb24ucGF0aCcsIGluZGV4PTAsCi0gICAgICBudW1iZXI9MSwgdHlwZT01LCBjcHBf
dHlwZT0xLCBsYWJlbD0zLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRf
dmFsdWU9W10sCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRh
aW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2Nv
cGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNj
cmlwdG9yKAotICAgICAgbmFtZT0nc3BhbicsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLlNv
dXJjZUNvZGVJbmZvLkxvY2F0aW9uLnNwYW4nLCBpbmRleD0xLAotICAgICAgbnVtYmVyPTIsIHR5
cGU9NSwgY3BwX3R5cGU9MSwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNl
LCBkZWZhdWx0X3ZhbHVlPVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1O
b25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0
ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9y
LkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2xlYWRpbmdfY29tbWVudHMnLCBmdWxsX25h
bWU9J2dvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFkaW5nX2NvbW1l
bnRzJywgaW5kZXg9MiwKLSAgICAgIG51bWJlcj0zLCB0eXBlPTksIGNwcF90eXBlPTksIGxhYmVs
PTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1fYigiIiku
ZGVjb2RlKCd1dGYtOCcpLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25l
LCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5z
aW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlwdG9yLkZp
ZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J3RyYWlsaW5nX2NvbW1lbnRzJywgZnVsbF9uYW1l
PSdnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24udHJhaWxpbmdfY29tbWVu
dHMnLCBpbmRleD0zLAotICAgICAgbnVtYmVyPTQsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9
MSwKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5k
ZWNvZGUoJ3V0Zi04JyksCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUs
IGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNp
b25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmll
bGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cycsIGZ1
bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdf
ZGV0YWNoZWRfY29tbWVudHMnLCBpbmRleD00LAotICAgICAgbnVtYmVyPTYsIHR5cGU9OSwgY3Bw
X3R5cGU9OSwgbGFiZWw9MywKLSAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0
X3ZhbHVlPVtdLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250
YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Nj
b3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICBdLAotICBleHRlbnNpb25zPVsKLSAg
XSwKLSAgbmVzdGVkX3R5cGVzPVtdLAotICBlbnVtX3R5cGVzPVsKLSAgXSwKLSAgb3B0aW9ucz1O
b25lLAotICBpc19leHRlbmRhYmxlPUZhbHNlLAotICBzeW50YXg9J3Byb3RvMicsCi0gIGV4dGVu
c2lvbl9yYW5nZXM9W10sCi0gIG9uZW9mcz1bCi0gIF0sCi0gIHNlcmlhbGl6ZWRfc3RhcnQ9NDc1
MSwKLSAgc2VyaWFsaXplZF9lbmQ9NDg4NSwKLSkKLQotX1NPVVJDRUNPREVJTkZPID0gX2Rlc2Ny
aXB0b3IuRGVzY3JpcHRvcigKLSAgbmFtZT0nU291cmNlQ29kZUluZm8nLAotICBmdWxsX25hbWU9
J2dvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbycsCi0gIGZpbGVuYW1lPU5vbmUsCi0gIGZp
bGU9REVTQ1JJUFRPUiwKLSAgY29udGFpbmluZ190eXBlPU5vbmUsCi0gIGZpZWxkcz1bCi0gICAg
X2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAotICAgICAgbmFtZT0nbG9jYXRpb24nLCBmdWxs
X25hbWU9J2dvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5sb2NhdGlvbicsIGluZGV4PTAs
Ci0gICAgICBudW1iZXI9MSwgdHlwZT0xMSwgY3BwX3R5cGU9MTAsIGxhYmVsPTMsCi0gICAgICBo
YXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1bXSwKLSAgICAgIG1lc3NhZ2Vf
dHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBp
c19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1O
b25lKSwKLSAgXSwKLSAgZXh0ZW5zaW9ucz1bCi0gIF0sCi0gIG5lc3RlZF90eXBlcz1bX1NPVVJD
RUNPREVJTkZPX0xPQ0FUSU9OLCBdLAotICBlbnVtX3R5cGVzPVsKLSAgXSwKLSAgb3B0aW9ucz1O
b25lLAotICBpc19leHRlbmRhYmxlPUZhbHNlLAotICBzeW50YXg9J3Byb3RvMicsCi0gIGV4dGVu
c2lvbl9yYW5nZXM9W10sCi0gIG9uZW9mcz1bCi0gIF0sCi0gIHNlcmlhbGl6ZWRfc3RhcnQ9NDY3
MiwKLSAgc2VyaWFsaXplZF9lbmQ9NDg4NSwKLSkKLQotCi1fR0VORVJBVEVEQ09ERUlORk9fQU5O
T1RBVElPTiA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCi0gIG5hbWU9J0Fubm90YXRpb24nLAot
ICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9u
JywKLSAgZmlsZW5hbWU9Tm9uZSwKLSAgZmlsZT1ERVNDUklQVE9SLAotICBjb250YWluaW5nX3R5
cGU9Tm9uZSwKLSAgZmllbGRzPVsKLSAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCi0g
ICAgICBuYW1lPSdwYXRoJywgZnVsbF9uYW1lPSdnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29k
ZUluZm8uQW5ub3RhdGlvbi5wYXRoJywgaW5kZXg9MCwKLSAgICAgIG51bWJlcj0xLCB0eXBlPTUs
IGNwcF90eXBlPTEsIGxhYmVsPTMsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVm
YXVsdF92YWx1ZT1bXSwKLSAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwg
Y29udGFpbmluZ190eXBlPU5vbmUsCi0gICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lv
bl9zY29wZT1Ob25lLAotICAgICAgb3B0aW9ucz1Ob25lKSwKLSAgICBfZGVzY3JpcHRvci5GaWVs
ZERlc2NyaXB0b3IoCi0gICAgICBuYW1lPSdzb3VyY2VfZmlsZScsIGZ1bGxfbmFtZT0nZ29vZ2xl
LnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uc291cmNlX2ZpbGUnLCBpbmRl
eD0xLAotICAgICAgbnVtYmVyPTIsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKLSAgICAg
IGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0
Zi04JyksCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5p
bmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9
Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlw
dG9yKAotICAgICAgbmFtZT0nYmVnaW4nLCBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5HZW5l
cmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLmJlZ2luJywgaW5kZXg9MiwKLSAgICAgIG51bWJlcj0z
LCB0eXBlPTUsIGNwcF90eXBlPTEsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVmYXVsdF92YWx1ZT1G
YWxzZSwgZGVmYXVsdF92YWx1ZT0wLAotICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlw
ZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwg
ZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAotICAgIF9kZXNjcmlw
dG9yLkZpZWxkRGVzY3JpcHRvcigKLSAgICAgIG5hbWU9J2VuZCcsIGZ1bGxfbmFtZT0nZ29vZ2xl
LnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uZW5kJywgaW5kZXg9MywKLSAg
ICAgIG51bWJlcj00LCB0eXBlPTUsIGNwcF90eXBlPTEsIGxhYmVsPTEsCi0gICAgICBoYXNfZGVm
YXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT0wLAotICAgICAgbWVzc2FnZV90eXBlPU5v
bmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKLSAgICAgIGlzX2V4dGVu
c2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICBvcHRpb25zPU5vbmUpLAot
ICBdLAotICBleHRlbnNpb25zPVsKLSAgXSwKLSAgbmVzdGVkX3R5cGVzPVtdLAotICBlbnVtX3R5
cGVzPVsKLSAgXSwKLSAgb3B0aW9ucz1Ob25lLAotICBpc19leHRlbmRhYmxlPUZhbHNlLAotICBz
eW50YXg9J3Byb3RvMicsCi0gIGV4dGVuc2lvbl9yYW5nZXM9W10sCi0gIG9uZW9mcz1bCi0gIF0s
Ci0gIHNlcmlhbGl6ZWRfc3RhcnQ9NDk3NiwKLSAgc2VyaWFsaXplZF9lbmQ9NTA1NSwKLSkKLQot
X0dFTkVSQVRFRENPREVJTkZPID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKLSAgbmFtZT0nR2Vu
ZXJhdGVkQ29kZUluZm8nLAotICBmdWxsX25hbWU9J2dvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRD
b2RlSW5mbycsCi0gIGZpbGVuYW1lPU5vbmUsCi0gIGZpbGU9REVTQ1JJUFRPUiwKLSAgY29udGFp
bmluZ190eXBlPU5vbmUsCi0gIGZpZWxkcz1bCi0gICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlw
dG9yKAotICAgICAgbmFtZT0nYW5ub3RhdGlvbicsIGZ1bGxfbmFtZT0nZ29vZ2xlLnByb3RvYnVm
LkdlbmVyYXRlZENvZGVJbmZvLmFubm90YXRpb24nLCBpbmRleD0wLAotICAgICAgbnVtYmVyPTEs
IHR5cGU9MTEsIGNwcF90eXBlPTEwLCBsYWJlbD0zLAotICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9
RmFsc2UsIGRlZmF1bHRfdmFsdWU9W10sCi0gICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90
eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNl
LCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKLSAgICAgIG9wdGlvbnM9Tm9uZSksCi0gIF0sCi0gIGV4
dGVuc2lvbnM9WwotICBdLAotICBuZXN0ZWRfdHlwZXM9W19HRU5FUkFURURDT0RFSU5GT19BTk5P
VEFUSU9OLCBdLAotICBlbnVtX3R5cGVzPVsKLSAgXSwKLSAgb3B0aW9ucz1Ob25lLAotICBpc19l
eHRlbmRhYmxlPUZhbHNlLAotICBzeW50YXg9J3Byb3RvMicsCi0gIGV4dGVuc2lvbl9yYW5nZXM9
W10sCi0gIG9uZW9mcz1bCi0gIF0sCi0gIHNlcmlhbGl6ZWRfc3RhcnQ9NDg4OCwKLSAgc2VyaWFs
aXplZF9lbmQ9NTA1NSwKLSkKLQotX0ZJTEVERVNDUklQVE9SU0VULmZpZWxkc19ieV9uYW1lWydm
aWxlJ10ubWVzc2FnZV90eXBlID0gX0ZJTEVERVNDUklQVE9SUFJPVE8KLV9GSUxFREVTQ1JJUFRP
UlBST1RPLmZpZWxkc19ieV9uYW1lWydtZXNzYWdlX3R5cGUnXS5tZXNzYWdlX3R5cGUgPSBfREVT
Q1JJUFRPUlBST1RPCi1fRklMRURFU0NSSVBUT1JQUk9UTy5maWVsZHNfYnlfbmFtZVsnZW51bV90
eXBlJ10ubWVzc2FnZV90eXBlID0gX0VOVU1ERVNDUklQVE9SUFJPVE8KLV9GSUxFREVTQ1JJUFRP
UlBST1RPLmZpZWxkc19ieV9uYW1lWydzZXJ2aWNlJ10ubWVzc2FnZV90eXBlID0gX1NFUlZJQ0VE
RVNDUklQVE9SUFJPVE8KLV9GSUxFREVTQ1JJUFRPUlBST1RPLmZpZWxkc19ieV9uYW1lWydleHRl
bnNpb24nXS5tZXNzYWdlX3R5cGUgPSBfRklFTERERVNDUklQVE9SUFJPVE8KLV9GSUxFREVTQ1JJ
UFRPUlBST1RPLmZpZWxkc19ieV9uYW1lWydvcHRpb25zJ10ubWVzc2FnZV90eXBlID0gX0ZJTEVP
UFRJT05TCi1fRklMRURFU0NSSVBUT1JQUk9UTy5maWVsZHNfYnlfbmFtZVsnc291cmNlX2NvZGVf
aW5mbyddLm1lc3NhZ2VfdHlwZSA9IF9TT1VSQ0VDT0RFSU5GTwotX0RFU0NSSVBUT1JQUk9UT19F
WFRFTlNJT05SQU5HRS5jb250YWluaW5nX3R5cGUgPSBfREVTQ1JJUFRPUlBST1RPCi1fREVTQ1JJ
UFRPUlBST1RPX1JFU0VSVkVEUkFOR0UuY29udGFpbmluZ190eXBlID0gX0RFU0NSSVBUT1JQUk9U
TwotX0RFU0NSSVBUT1JQUk9UTy5maWVsZHNfYnlfbmFtZVsnZmllbGQnXS5tZXNzYWdlX3R5cGUg
PSBfRklFTERERVNDUklQVE9SUFJPVE8KLV9ERVNDUklQVE9SUFJPVE8uZmllbGRzX2J5X25hbWVb
J2V4dGVuc2lvbiddLm1lc3NhZ2VfdHlwZSA9IF9GSUVMRERFU0NSSVBUT1JQUk9UTwotX0RFU0NS
SVBUT1JQUk9UTy5maWVsZHNfYnlfbmFtZVsnbmVzdGVkX3R5cGUnXS5tZXNzYWdlX3R5cGUgPSBf
REVTQ1JJUFRPUlBST1RPCi1fREVTQ1JJUFRPUlBST1RPLmZpZWxkc19ieV9uYW1lWydlbnVtX3R5
cGUnXS5tZXNzYWdlX3R5cGUgPSBfRU5VTURFU0NSSVBUT1JQUk9UTwotX0RFU0NSSVBUT1JQUk9U
Ty5maWVsZHNfYnlfbmFtZVsnZXh0ZW5zaW9uX3JhbmdlJ10ubWVzc2FnZV90eXBlID0gX0RFU0NS
SVBUT1JQUk9UT19FWFRFTlNJT05SQU5HRQotX0RFU0NSSVBUT1JQUk9UTy5maWVsZHNfYnlfbmFt
ZVsnb25lb2ZfZGVjbCddLm1lc3NhZ2VfdHlwZSA9IF9PTkVPRkRFU0NSSVBUT1JQUk9UTwotX0RF
U0NSSVBUT1JQUk9UTy5maWVsZHNfYnlfbmFtZVsnb3B0aW9ucyddLm1lc3NhZ2VfdHlwZSA9IF9N
RVNTQUdFT1BUSU9OUwotX0RFU0NSSVBUT1JQUk9UTy5maWVsZHNfYnlfbmFtZVsncmVzZXJ2ZWRf
cmFuZ2UnXS5tZXNzYWdlX3R5cGUgPSBfREVTQ1JJUFRPUlBST1RPX1JFU0VSVkVEUkFOR0UKLV9G
SUVMRERFU0NSSVBUT1JQUk9UTy5maWVsZHNfYnlfbmFtZVsnbGFiZWwnXS5lbnVtX3R5cGUgPSBf
RklFTERERVNDUklQVE9SUFJPVE9fTEFCRUwKLV9GSUVMRERFU0NSSVBUT1JQUk9UTy5maWVsZHNf
YnlfbmFtZVsndHlwZSddLmVudW1fdHlwZSA9IF9GSUVMRERFU0NSSVBUT1JQUk9UT19UWVBFCi1f
RklFTERERVNDUklQVE9SUFJPVE8uZmllbGRzX2J5X25hbWVbJ29wdGlvbnMnXS5tZXNzYWdlX3R5
cGUgPSBfRklFTERPUFRJT05TCi1fRklFTERERVNDUklQVE9SUFJPVE9fVFlQRS5jb250YWluaW5n
X3R5cGUgPSBfRklFTERERVNDUklQVE9SUFJPVE8KLV9GSUVMRERFU0NSSVBUT1JQUk9UT19MQUJF
TC5jb250YWluaW5nX3R5cGUgPSBfRklFTERERVNDUklQVE9SUFJPVE8KLV9FTlVNREVTQ1JJUFRP
UlBST1RPLmZpZWxkc19ieV9uYW1lWyd2YWx1ZSddLm1lc3NhZ2VfdHlwZSA9IF9FTlVNVkFMVUVE
RVNDUklQVE9SUFJPVE8KLV9FTlVNREVTQ1JJUFRPUlBST1RPLmZpZWxkc19ieV9uYW1lWydvcHRp
b25zJ10ubWVzc2FnZV90eXBlID0gX0VOVU1PUFRJT05TCi1fRU5VTVZBTFVFREVTQ1JJUFRPUlBS
T1RPLmZpZWxkc19ieV9uYW1lWydvcHRpb25zJ10ubWVzc2FnZV90eXBlID0gX0VOVU1WQUxVRU9Q
VElPTlMKLV9TRVJWSUNFREVTQ1JJUFRPUlBST1RPLmZpZWxkc19ieV9uYW1lWydtZXRob2QnXS5t
ZXNzYWdlX3R5cGUgPSBfTUVUSE9EREVTQ1JJUFRPUlBST1RPCi1fU0VSVklDRURFU0NSSVBUT1JQ
Uk9UTy5maWVsZHNfYnlfbmFtZVsnb3B0aW9ucyddLm1lc3NhZ2VfdHlwZSA9IF9TRVJWSUNFT1BU
SU9OUwotX01FVEhPRERFU0NSSVBUT1JQUk9UTy5maWVsZHNfYnlfbmFtZVsnb3B0aW9ucyddLm1l
c3NhZ2VfdHlwZSA9IF9NRVRIT0RPUFRJT05TCi1fRklMRU9QVElPTlMuZmllbGRzX2J5X25hbWVb
J29wdGltaXplX2ZvciddLmVudW1fdHlwZSA9IF9GSUxFT1BUSU9OU19PUFRJTUlaRU1PREUKLV9G
SUxFT1BUSU9OUy5maWVsZHNfYnlfbmFtZVsndW5pbnRlcnByZXRlZF9vcHRpb24nXS5tZXNzYWdl
X3R5cGUgPSBfVU5JTlRFUlBSRVRFRE9QVElPTgotX0ZJTEVPUFRJT05TX09QVElNSVpFTU9ERS5j
b250YWluaW5nX3R5cGUgPSBfRklMRU9QVElPTlMKLV9NRVNTQUdFT1BUSU9OUy5maWVsZHNfYnlf
bmFtZVsndW5pbnRlcnByZXRlZF9vcHRpb24nXS5tZXNzYWdlX3R5cGUgPSBfVU5JTlRFUlBSRVRF
RE9QVElPTgotX0ZJRUxET1BUSU9OUy5maWVsZHNfYnlfbmFtZVsnY3R5cGUnXS5lbnVtX3R5cGUg
PSBfRklFTERPUFRJT05TX0NUWVBFCi1fRklFTERPUFRJT05TLmZpZWxkc19ieV9uYW1lWydqc3R5
cGUnXS5lbnVtX3R5cGUgPSBfRklFTERPUFRJT05TX0pTVFlQRQotX0ZJRUxET1BUSU9OUy5maWVs
ZHNfYnlfbmFtZVsndW5pbnRlcnByZXRlZF9vcHRpb24nXS5tZXNzYWdlX3R5cGUgPSBfVU5JTlRF
UlBSRVRFRE9QVElPTgotX0ZJRUxET1BUSU9OU19DVFlQRS5jb250YWluaW5nX3R5cGUgPSBfRklF
TERPUFRJT05TCi1fRklFTERPUFRJT05TX0pTVFlQRS5jb250YWluaW5nX3R5cGUgPSBfRklFTERP
UFRJT05TCi1fRU5VTU9QVElPTlMuZmllbGRzX2J5X25hbWVbJ3VuaW50ZXJwcmV0ZWRfb3B0aW9u
J10ubWVzc2FnZV90eXBlID0gX1VOSU5URVJQUkVURURPUFRJT04KLV9FTlVNVkFMVUVPUFRJT05T
LmZpZWxkc19ieV9uYW1lWyd1bmludGVycHJldGVkX29wdGlvbiddLm1lc3NhZ2VfdHlwZSA9IF9V
TklOVEVSUFJFVEVET1BUSU9OCi1fU0VSVklDRU9QVElPTlMuZmllbGRzX2J5X25hbWVbJ3VuaW50
ZXJwcmV0ZWRfb3B0aW9uJ10ubWVzc2FnZV90eXBlID0gX1VOSU5URVJQUkVURURPUFRJT04KLV9N
RVRIT0RPUFRJT05TLmZpZWxkc19ieV9uYW1lWyd1bmludGVycHJldGVkX29wdGlvbiddLm1lc3Nh
Z2VfdHlwZSA9IF9VTklOVEVSUFJFVEVET1BUSU9OCi1fVU5JTlRFUlBSRVRFRE9QVElPTl9OQU1F
UEFSVC5jb250YWluaW5nX3R5cGUgPSBfVU5JTlRFUlBSRVRFRE9QVElPTgotX1VOSU5URVJQUkVU
RURPUFRJT04uZmllbGRzX2J5X25hbWVbJ25hbWUnXS5tZXNzYWdlX3R5cGUgPSBfVU5JTlRFUlBS
RVRFRE9QVElPTl9OQU1FUEFSVAotX1NPVVJDRUNPREVJTkZPX0xPQ0FUSU9OLmNvbnRhaW5pbmdf
dHlwZSA9IF9TT1VSQ0VDT0RFSU5GTwotX1NPVVJDRUNPREVJTkZPLmZpZWxkc19ieV9uYW1lWyds
b2NhdGlvbiddLm1lc3NhZ2VfdHlwZSA9IF9TT1VSQ0VDT0RFSU5GT19MT0NBVElPTgotX0dFTkVS
QVRFRENPREVJTkZPX0FOTk9UQVRJT04uY29udGFpbmluZ190eXBlID0gX0dFTkVSQVRFRENPREVJ
TkZPCi1fR0VORVJBVEVEQ09ERUlORk8uZmllbGRzX2J5X25hbWVbJ2Fubm90YXRpb24nXS5tZXNz
YWdlX3R5cGUgPSBfR0VORVJBVEVEQ09ERUlORk9fQU5OT1RBVElPTgotREVTQ1JJUFRPUi5tZXNz
YWdlX3R5cGVzX2J5X25hbWVbJ0ZpbGVEZXNjcmlwdG9yU2V0J10gPSBfRklMRURFU0NSSVBUT1JT
RVQKLURFU0NSSVBUT1IubWVzc2FnZV90eXBlc19ieV9uYW1lWydGaWxlRGVzY3JpcHRvclByb3Rv
J10gPSBfRklMRURFU0NSSVBUT1JQUk9UTwotREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVzX2J5X25h
bWVbJ0Rlc2NyaXB0b3JQcm90byddID0gX0RFU0NSSVBUT1JQUk9UTwotREVTQ1JJUFRPUi5tZXNz
YWdlX3R5cGVzX2J5X25hbWVbJ0ZpZWxkRGVzY3JpcHRvclByb3RvJ10gPSBfRklFTERERVNDUklQ
VE9SUFJPVE8KLURFU0NSSVBUT1IubWVzc2FnZV90eXBlc19ieV9uYW1lWydPbmVvZkRlc2NyaXB0
b3JQcm90byddID0gX09ORU9GREVTQ1JJUFRPUlBST1RPCi1ERVNDUklQVE9SLm1lc3NhZ2VfdHlw
ZXNfYnlfbmFtZVsnRW51bURlc2NyaXB0b3JQcm90byddID0gX0VOVU1ERVNDUklQVE9SUFJPVE8K
LURFU0NSSVBUT1IubWVzc2FnZV90eXBlc19ieV9uYW1lWydFbnVtVmFsdWVEZXNjcmlwdG9yUHJv
dG8nXSA9IF9FTlVNVkFMVUVERVNDUklQVE9SUFJPVE8KLURFU0NSSVBUT1IubWVzc2FnZV90eXBl
c19ieV9uYW1lWydTZXJ2aWNlRGVzY3JpcHRvclByb3RvJ10gPSBfU0VSVklDRURFU0NSSVBUT1JQ
Uk9UTwotREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVzX2J5X25hbWVbJ01ldGhvZERlc2NyaXB0b3JQ
cm90byddID0gX01FVEhPRERFU0NSSVBUT1JQUk9UTwotREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVz
X2J5X25hbWVbJ0ZpbGVPcHRpb25zJ10gPSBfRklMRU9QVElPTlMKLURFU0NSSVBUT1IubWVzc2Fn
ZV90eXBlc19ieV9uYW1lWydNZXNzYWdlT3B0aW9ucyddID0gX01FU1NBR0VPUFRJT05TCi1ERVND
UklQVE9SLm1lc3NhZ2VfdHlwZXNfYnlfbmFtZVsnRmllbGRPcHRpb25zJ10gPSBfRklFTERPUFRJ
T05TCi1ERVNDUklQVE9SLm1lc3NhZ2VfdHlwZXNfYnlfbmFtZVsnRW51bU9wdGlvbnMnXSA9IF9F
TlVNT1BUSU9OUwotREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVzX2J5X25hbWVbJ0VudW1WYWx1ZU9w
dGlvbnMnXSA9IF9FTlVNVkFMVUVPUFRJT05TCi1ERVNDUklQVE9SLm1lc3NhZ2VfdHlwZXNfYnlf
bmFtZVsnU2VydmljZU9wdGlvbnMnXSA9IF9TRVJWSUNFT1BUSU9OUwotREVTQ1JJUFRPUi5tZXNz
YWdlX3R5cGVzX2J5X25hbWVbJ01ldGhvZE9wdGlvbnMnXSA9IF9NRVRIT0RPUFRJT05TCi1ERVND
UklQVE9SLm1lc3NhZ2VfdHlwZXNfYnlfbmFtZVsnVW5pbnRlcnByZXRlZE9wdGlvbiddID0gX1VO
SU5URVJQUkVURURPUFRJT04KLURFU0NSSVBUT1IubWVzc2FnZV90eXBlc19ieV9uYW1lWydTb3Vy
Y2VDb2RlSW5mbyddID0gX1NPVVJDRUNPREVJTkZPCi1ERVNDUklQVE9SLm1lc3NhZ2VfdHlwZXNf
YnlfbmFtZVsnR2VuZXJhdGVkQ29kZUluZm8nXSA9IF9HRU5FUkFURURDT0RFSU5GTwotCi1GaWxl
RGVzY3JpcHRvclNldCA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUo
J0ZpbGVEZXNjcmlwdG9yU2V0JywgKF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGljdCgKLSAgREVTQ1JJ
UFRPUiA9IF9GSUxFREVTQ1JJUFRPUlNFVCwKLSAgX19tb2R1bGVfXyA9ICdnb29nbGUucHJvdG9i
dWYuZGVzY3JpcHRvcl9wYjInCi0gICMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Nj
b3BlOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldCkKLSAgKSkKLV9zeW1fZGIuUmVn
aXN0ZXJNZXNzYWdlKEZpbGVEZXNjcmlwdG9yU2V0KQotCi1GaWxlRGVzY3JpcHRvclByb3RvID0g
X3JlZmxlY3Rpb24uR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZSgnRmlsZURlc2NyaXB0b3JQ
cm90bycsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3QoCi0gIERFU0NSSVBUT1IgPSBfRklMRURF
U0NSSVBUT1JQUk9UTywKLSAgX19tb2R1bGVfXyA9ICdnb29nbGUucHJvdG9idWYuZGVzY3JpcHRv
cl9wYjInCi0gICMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5w
cm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvKQotICApKQotX3N5bV9kYi5SZWdpc3Rlck1lc3Nh
Z2UoRmlsZURlc2NyaXB0b3JQcm90bykKLQotRGVzY3JpcHRvclByb3RvID0gX3JlZmxlY3Rpb24u
R2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZSgnRGVzY3JpcHRvclByb3RvJywgKF9tZXNzYWdl
Lk1lc3NhZ2UsKSwgZGljdCgKLQotICBFeHRlbnNpb25SYW5nZSA9IF9yZWZsZWN0aW9uLkdlbmVy
YXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ0V4dGVuc2lvblJhbmdlJywgKF9tZXNzYWdlLk1lc3Nh
Z2UsKSwgZGljdCgKLSAgICBERVNDUklQVE9SID0gX0RFU0NSSVBUT1JQUk9UT19FWFRFTlNJT05S
QU5HRSwKLSAgICBfX21vZHVsZV9fID0gJ2dvb2dsZS5wcm90b2J1Zi5kZXNjcmlwdG9yX3BiMicK
LSAgICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9i
dWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlKQotICAgICkpCi0gICwKLQotICBSZXNl
cnZlZFJhbmdlID0gX3JlZmxlY3Rpb24uR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZSgnUmVz
ZXJ2ZWRSYW5nZScsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3QoCi0gICAgREVTQ1JJUFRPUiA9
IF9ERVNDUklQVE9SUFJPVE9fUkVTRVJWRURSQU5HRSwKLSAgICBfX21vZHVsZV9fID0gJ2dvb2ds
ZS5wcm90b2J1Zi5kZXNjcmlwdG9yX3BiMicKLSAgICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFu
Z2UpCi0gICAgKSkKLSAgLAotICBERVNDUklQVE9SID0gX0RFU0NSSVBUT1JQUk9UTywKLSAgX19t
b2R1bGVfXyA9ICdnb29nbGUucHJvdG9idWYuZGVzY3JpcHRvcl9wYjInCi0gICMgQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJv
dG8pCi0gICkpCi1fc3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShEZXNjcmlwdG9yUHJvdG8pCi1fc3lt
X2RiLlJlZ2lzdGVyTWVzc2FnZShEZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UpCi1fc3lt
X2RiLlJlZ2lzdGVyTWVzc2FnZShEZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSkKLQotRmll
bGREZXNjcmlwdG9yUHJvdG8gPSBfcmVmbGVjdGlvbi5HZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VU
eXBlKCdGaWVsZERlc2NyaXB0b3JQcm90bycsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3QoCi0g
IERFU0NSSVBUT1IgPSBfRklFTERERVNDUklQVE9SUFJPVE8sCi0gIF9fbW9kdWxlX18gPSAnZ29v
Z2xlLnByb3RvYnVmLmRlc2NyaXB0b3JfcGIyJwotICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8pCi0gICkp
Ci1fc3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShGaWVsZERlc2NyaXB0b3JQcm90bykKLQotT25lb2ZE
ZXNjcmlwdG9yUHJvdG8gPSBfcmVmbGVjdGlvbi5HZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBl
KCdPbmVvZkRlc2NyaXB0b3JQcm90bycsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3QoCi0gIERF
U0NSSVBUT1IgPSBfT05FT0ZERVNDUklQVE9SUFJPVE8sCi0gIF9fbW9kdWxlX18gPSAnZ29vZ2xl
LnByb3RvYnVmLmRlc2NyaXB0b3JfcGIyJwotICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChj
bGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8pCi0gICkpCi1f
c3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShPbmVvZkRlc2NyaXB0b3JQcm90bykKLQotRW51bURlc2Ny
aXB0b3JQcm90byA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ0Vu
dW1EZXNjcmlwdG9yUHJvdG8nLCAoX21lc3NhZ2UuTWVzc2FnZSwpLCBkaWN0KAotICBERVNDUklQ
VE9SID0gX0VOVU1ERVNDUklQVE9SUFJPVE8sCi0gIF9fbW9kdWxlX18gPSAnZ29vZ2xlLnByb3Rv
YnVmLmRlc2NyaXB0b3JfcGIyJwotICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19z
Y29wZTpnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bykKLSAgKSkKLV9zeW1fZGIu
UmVnaXN0ZXJNZXNzYWdlKEVudW1EZXNjcmlwdG9yUHJvdG8pCi0KLUVudW1WYWx1ZURlc2NyaXB0
b3JQcm90byA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ0VudW1W
YWx1ZURlc2NyaXB0b3JQcm90bycsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3QoCi0gIERFU0NS
SVBUT1IgPSBfRU5VTVZBTFVFREVTQ1JJUFRPUlBST1RPLAotICBfX21vZHVsZV9fID0gJ2dvb2ds
ZS5wcm90b2J1Zi5kZXNjcmlwdG9yX3BiMicKLSAgIyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Y2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bykKLSAg
KSkKLV9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bykKLQot
U2VydmljZURlc2NyaXB0b3JQcm90byA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVz
c2FnZVR5cGUoJ1NlcnZpY2VEZXNjcmlwdG9yUHJvdG8nLCAoX21lc3NhZ2UuTWVzc2FnZSwpLCBk
aWN0KAotICBERVNDUklQVE9SID0gX1NFUlZJQ0VERVNDUklQVE9SUFJPVE8sCi0gIF9fbW9kdWxl
X18gPSAnZ29vZ2xlLnByb3RvYnVmLmRlc2NyaXB0b3JfcGIyJwotICAjIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQ
cm90bykKLSAgKSkKLV9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKFNlcnZpY2VEZXNjcmlwdG9yUHJv
dG8pCi0KLU1ldGhvZERlc2NyaXB0b3JQcm90byA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3Rv
Y29sTWVzc2FnZVR5cGUoJ01ldGhvZERlc2NyaXB0b3JQcm90bycsIChfbWVzc2FnZS5NZXNzYWdl
LCksIGRpY3QoCi0gIERFU0NSSVBUT1IgPSBfTUVUSE9EREVTQ1JJUFRPUlBST1RPLAotICBfX21v
ZHVsZV9fID0gJ2dvb2dsZS5wcm90b2J1Zi5kZXNjcmlwdG9yX3BiMicKLSAgIyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0
b3JQcm90bykKLSAgKSkKLV9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKE1ldGhvZERlc2NyaXB0b3JQ
cm90bykKLQotRmlsZU9wdGlvbnMgPSBfcmVmbGVjdGlvbi5HZW5lcmF0ZWRQcm90b2NvbE1lc3Nh
Z2VUeXBlKCdGaWxlT3B0aW9ucycsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3QoCi0gIERFU0NS
SVBUT1IgPSBfRklMRU9QVElPTlMsCi0gIF9fbW9kdWxlX18gPSAnZ29vZ2xlLnByb3RvYnVmLmRl
c2NyaXB0b3JfcGIyJwotICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpn
b29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMpCi0gICkpCi1fc3ltX2RiLlJlZ2lzdGVyTWVzc2Fn
ZShGaWxlT3B0aW9ucykKLQotTWVzc2FnZU9wdGlvbnMgPSBfcmVmbGVjdGlvbi5HZW5lcmF0ZWRQ
cm90b2NvbE1lc3NhZ2VUeXBlKCdNZXNzYWdlT3B0aW9ucycsIChfbWVzc2FnZS5NZXNzYWdlLCks
IGRpY3QoCi0gIERFU0NSSVBUT1IgPSBfTUVTU0FHRU9QVElPTlMsCi0gIF9fbW9kdWxlX18gPSAn
Z29vZ2xlLnByb3RvYnVmLmRlc2NyaXB0b3JfcGIyJwotICAjIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMpCi0gICkpCi1f
c3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShNZXNzYWdlT3B0aW9ucykKLQotRmllbGRPcHRpb25zID0g
X3JlZmxlY3Rpb24uR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZSgnRmllbGRPcHRpb25zJywg
KF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGljdCgKLSAgREVTQ1JJUFRPUiA9IF9GSUVMRE9QVElPTlMs
Ci0gIF9fbW9kdWxlX18gPSAnZ29vZ2xlLnByb3RvYnVmLmRlc2NyaXB0b3JfcGIyJwotICAjIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuRmllbGRP
cHRpb25zKQotICApKQotX3N5bV9kYi5SZWdpc3Rlck1lc3NhZ2UoRmllbGRPcHRpb25zKQotCi1F
bnVtT3B0aW9ucyA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ0Vu
dW1PcHRpb25zJywgKF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGljdCgKLSAgREVTQ1JJUFRPUiA9IF9F
TlVNT1BUSU9OUywKLSAgX19tb2R1bGVfXyA9ICdnb29nbGUucHJvdG9idWYuZGVzY3JpcHRvcl9w
YjInCi0gICMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90
b2J1Zi5FbnVtT3B0aW9ucykKLSAgKSkKLV9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKEVudW1PcHRp
b25zKQotCi1FbnVtVmFsdWVPcHRpb25zID0gX3JlZmxlY3Rpb24uR2VuZXJhdGVkUHJvdG9jb2xN
ZXNzYWdlVHlwZSgnRW51bVZhbHVlT3B0aW9ucycsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3Qo
Ci0gIERFU0NSSVBUT1IgPSBfRU5VTVZBTFVFT1BUSU9OUywKLSAgX19tb2R1bGVfXyA9ICdnb29n
bGUucHJvdG9idWYuZGVzY3JpcHRvcl9wYjInCi0gICMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zKQotICApKQotX3N5
bV9kYi5SZWdpc3Rlck1lc3NhZ2UoRW51bVZhbHVlT3B0aW9ucykKLQotU2VydmljZU9wdGlvbnMg
PSBfcmVmbGVjdGlvbi5HZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBlKCdTZXJ2aWNlT3B0aW9u
cycsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3QoCi0gIERFU0NSSVBUT1IgPSBfU0VSVklDRU9Q
VElPTlMsCi0gIF9fbW9kdWxlX18gPSAnZ29vZ2xlLnByb3RvYnVmLmRlc2NyaXB0b3JfcGIyJwot
ICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYu
U2VydmljZU9wdGlvbnMpCi0gICkpCi1fc3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShTZXJ2aWNlT3B0
aW9ucykKLQotTWV0aG9kT3B0aW9ucyA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVz
c2FnZVR5cGUoJ01ldGhvZE9wdGlvbnMnLCAoX21lc3NhZ2UuTWVzc2FnZSwpLCBkaWN0KAotICBE
RVNDUklQVE9SID0gX01FVEhPRE9QVElPTlMsCi0gIF9fbW9kdWxlX18gPSAnZ29vZ2xlLnByb3Rv
YnVmLmRlc2NyaXB0b3JfcGIyJwotICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19z
Y29wZTpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucykKLSAgKSkKLV9zeW1fZGIuUmVnaXN0
ZXJNZXNzYWdlKE1ldGhvZE9wdGlvbnMpCi0KLVVuaW50ZXJwcmV0ZWRPcHRpb24gPSBfcmVmbGVj
dGlvbi5HZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBlKCdVbmludGVycHJldGVkT3B0aW9uJywg
KF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGljdCgKLQotICBOYW1lUGFydCA9IF9yZWZsZWN0aW9uLkdl
bmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ05hbWVQYXJ0JywgKF9tZXNzYWdlLk1lc3NhZ2Us
KSwgZGljdCgKLSAgICBERVNDUklQVE9SID0gX1VOSU5URVJQUkVURURPUFRJT05fTkFNRVBBUlQs
Ci0gICAgX19tb2R1bGVfXyA9ICdnb29nbGUucHJvdG9idWYuZGVzY3JpcHRvcl9wYjInCi0gICAg
IyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLlVu
aW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQpCi0gICAgKSkKLSAgLAotICBERVNDUklQVE9SID0g
X1VOSU5URVJQUkVURURPUFRJT04sCi0gIF9fbW9kdWxlX18gPSAnZ29vZ2xlLnByb3RvYnVmLmRl
c2NyaXB0b3JfcGIyJwotICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpn
b29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbikKLSAgKSkKLV9zeW1fZGIuUmVnaXN0
ZXJNZXNzYWdlKFVuaW50ZXJwcmV0ZWRPcHRpb24pCi1fc3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShV
bmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0KQotCi1Tb3VyY2VDb2RlSW5mbyA9IF9yZWZsZWN0
aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ1NvdXJjZUNvZGVJbmZvJywgKF9tZXNz
YWdlLk1lc3NhZ2UsKSwgZGljdCgKLQotICBMb2NhdGlvbiA9IF9yZWZsZWN0aW9uLkdlbmVyYXRl
ZFByb3RvY29sTWVzc2FnZVR5cGUoJ0xvY2F0aW9uJywgKF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGlj
dCgKLSAgICBERVNDUklQVE9SID0gX1NPVVJDRUNPREVJTkZPX0xPQ0FUSU9OLAotICAgIF9fbW9k
dWxlX18gPSAnZ29vZ2xlLnByb3RvYnVmLmRlc2NyaXB0b3JfcGIyJwotICAgICMgQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5m
by5Mb2NhdGlvbikKLSAgICApKQotICAsCi0gIERFU0NSSVBUT1IgPSBfU09VUkNFQ09ERUlORk8s
Ci0gIF9fbW9kdWxlX18gPSAnZ29vZ2xlLnByb3RvYnVmLmRlc2NyaXB0b3JfcGIyJwotICAjIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuU291cmNl
Q29kZUluZm8pCi0gICkpCi1fc3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShTb3VyY2VDb2RlSW5mbykK
LV9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKFNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uKQotCi1HZW5l
cmF0ZWRDb2RlSW5mbyA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUo
J0dlbmVyYXRlZENvZGVJbmZvJywgKF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGljdCgKLQotICBBbm5v
dGF0aW9uID0gX3JlZmxlY3Rpb24uR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZSgnQW5ub3Rh
dGlvbicsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3QoCi0gICAgREVTQ1JJUFRPUiA9IF9HRU5F
UkFURURDT0RFSU5GT19BTk5PVEFUSU9OLAotICAgIF9fbW9kdWxlX18gPSAnZ29vZ2xlLnByb3Rv
YnVmLmRlc2NyaXB0b3JfcGIyJwotICAgICMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNz
X3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uKQotICAg
ICkpCi0gICwKLSAgREVTQ1JJUFRPUiA9IF9HRU5FUkFURURDT0RFSU5GTywKLSAgX19tb2R1bGVf
XyA9ICdnb29nbGUucHJvdG9idWYuZGVzY3JpcHRvcl9wYjInCi0gICMgQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbykK
LSAgKSkKLV9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKEdlbmVyYXRlZENvZGVJbmZvKQotX3N5bV9k
Yi5SZWdpc3Rlck1lc3NhZ2UoR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbikKLQotCi0jIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChtb2R1bGVfc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9n
b29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9wb29sLnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVm
L2Rlc2NyaXB0b3JfcG9vbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhMzM3
MDE3MjBlZTFlZDQxMDJhNWI4ZDk5MDZlNzkyZjk5MTVjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRv
cl9wb29sLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzUxICswLDAgQEAKLSMgUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiUHJv
dmlkZXMgRGVzY3JpcHRvclBvb2wgdG8gdXNlIGFzIGEgY29udGFpbmVyIGZvciBwcm90bzIgZGVz
Y3JpcHRvcnMuCi0KLVRoZSBEZXNjcmlwdG9yUG9vbCBpcyB1c2VkIGluIGNvbmplY3Rpb24gd2l0
aCBhIERlc2NyaXB0b3JEYXRhYmFzZSB0byBtYWludGFpbgotYSBjb2xsZWN0aW9uIG9mIHByb3Rv
Y29sIGJ1ZmZlciBkZXNjcmlwdG9ycyBmb3IgdXNlIHdoZW4gZHluYW1pY2FsbHkgY3JlYXRpbmcK
LW1lc3NhZ2UgdHlwZXMgYXQgcnVudGltZS4KLQotRm9yIG1vc3QgYXBwbGljYXRpb25zIHByb3Rv
Y29sIGJ1ZmZlcnMgc2hvdWxkIGJlIHVzZWQgdmlhIG1vZHVsZXMgZ2VuZXJhdGVkIGJ5Ci10aGUg
cHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyIHRvb2wuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3
aGVuIHRoZSB0eXBlIG9mCi1wcm90b2NvbCBidWZmZXJzIHVzZWQgaW4gYW4gYXBwbGljYXRpb24g
b3IgbGlicmFyeSBjYW5ub3QgYmUgcHJlZGV0ZXJtaW5lZC4KLQotQmVsb3cgaXMgYSBzdHJhaWdo
dGZvcndhcmQgZXhhbXBsZSBvbiBob3cgdG8gdXNlIHRoaXMgY2xhc3M6Ci0KLSAgcG9vbCA9IERl
c2NyaXB0b3JQb29sKCkKLSAgZmlsZV9kZXNjcmlwdG9yX3Byb3RvcyA9IFsgLi4uIF0KLSAgZm9y
IGZpbGVfZGVzY3JpcHRvcl9wcm90byBpbiBmaWxlX2Rlc2NyaXB0b3JfcHJvdG9zOgotICAgIHBv
b2wuQWRkKGZpbGVfZGVzY3JpcHRvcl9wcm90bykKLSAgbXlfbWVzc2FnZV9kZXNjcmlwdG9yID0g
cG9vbC5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoJ3NvbWUucGFja2FnZS5NZXNzYWdlVHlwZScpCi0K
LVRoZSBtZXNzYWdlIGRlc2NyaXB0b3IgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0
aGUgbWVzc2FnZV9mYWN0b3J5Ci1tb2R1bGUgaW4gb3JkZXIgdG8gY3JlYXRlIGEgcHJvdG9jb2wg
YnVmZmVyIGNsYXNzIHRoYXQgY2FuIGJlIGVuY29kZWQgYW5kCi1kZWNvZGVkLgotCi1JZiB5b3Ug
d2FudCB0byBnZXQgYSBQeXRob24gY2xhc3MgZm9yIHRoZSBzcGVjaWZpZWQgcHJvdG8sIHVzZSB0
aGUKLWhlbHBlciBmdW5jdGlvbnMgaW5zaWRlIGdvb2dsZS5wcm90b2J1Zi5tZXNzYWdlX2ZhY3Rv
cnkKLWRpcmVjdGx5IGluc3RlYWQgb2YgdGhpcyBjbGFzcy4KLSIiIgotCi1fX2F1dGhvcl9fID0g
J21hdHRoZXd0b2lhQGdvb2dsZS5jb20gKE1hdHQgVG9pYSknCi0KLWZyb20gZ29vZ2xlLnByb3Rv
YnVmIGltcG9ydCBkZXNjcmlwdG9yCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3Jp
cHRvcl9kYXRhYmFzZQotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHRleHRfZW5jb2RpbmcK
LQotCi1fVVNFX0NfREVTQ1JJUFRPUlMgPSBkZXNjcmlwdG9yLl9VU0VfQ19ERVNDUklQVE9SUwot
Ci0KLWRlZiBfTm9ybWFsaXplRnVsbHlRdWFsaWZpZWROYW1lKG5hbWUpOgotICAiIiJSZW1vdmUg
bGVhZGluZyBwZXJpb2QgZnJvbSBmdWxseS1xdWFsaWZpZWQgdHlwZSBuYW1lLgotCi0gIER1ZSB0
byBiLzEzODYwMzUxIGluIGRlc2NyaXB0b3JfZGF0YWJhc2UucHksIHR5cGVzIGluIHRoZSByb290
IG5hbWVzcGFjZSBhcmUKLSAgZ2VuZXJhdGVkIHdpdGggYSBsZWFkaW5nIHBlcmlvZC4gVGhpcyBm
dW5jdGlvbiByZW1vdmVzIHRoYXQgcHJlZml4LgotCi0gIEFyZ3M6Ci0gICAgbmFtZTogQSBzdHIs
IHRoZSBmdWxseS1xdWFsaWZpZWQgc3ltYm9sIG5hbWUuCi0KLSAgUmV0dXJuczoKLSAgICBBIHN0
ciwgdGhlIG5vcm1hbGl6ZWQgZnVsbHktcXVhbGlmaWVkIHN5bWJvbCBuYW1lLgotICAiIiIKLSAg
cmV0dXJuIG5hbWUubHN0cmlwKCcuJykKLQotCi1jbGFzcyBEZXNjcmlwdG9yUG9vbChvYmplY3Qp
OgotICAiIiJBIGNvbGxlY3Rpb24gb2YgcHJvdG9idWZzIGR5bmFtaWNhbGx5IGNvbnN0cnVjdGVk
IGJ5IGRlc2NyaXB0b3IgcHJvdG9zLiIiIgotCi0gIGlmIF9VU0VfQ19ERVNDUklQVE9SUzoKLQot
ICAgIGRlZiBfX25ld19fKGNscywgZGVzY3JpcHRvcl9kYj1Ob25lKToKLSAgICAgICMgcHlsaW50
OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKLSAgICAgIHJldHVybiBkZXNjcmlwdG9yLl9tZXNz
YWdlLkRlc2NyaXB0b3JQb29sKGRlc2NyaXB0b3JfZGIpCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYs
IGRlc2NyaXB0b3JfZGI9Tm9uZSk6Ci0gICAgIiIiSW5pdGlhbGl6ZXMgYSBQb29sIG9mIHByb3Rv
IGJ1ZmZzLgotCi0gICAgVGhlIGRlc2NyaXB0b3JfZGIgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVj
dG9yIGlzIHByb3ZpZGVkIHRvIGFsbG93Ci0gICAgc3BlY2lhbGl6ZWQgZmlsZSBkZXNjcmlwdG9y
IHByb3RvIGxvb2t1cCBjb2RlIHRvIGJlIHRyaWdnZXJlZCBvbiBkZW1hbmQuIEFuCi0gICAgZXhh
bXBsZSB3b3VsZCBiZSBhbiBpbXBsZW1lbnRhdGlvbiB3aGljaCB3aWxsIHJlYWQgYW5kIGNvbXBp
bGUgYSBmaWxlCi0gICAgc3BlY2lmaWVkIGluIGEgY2FsbCB0byBGaW5kRmlsZUJ5TmFtZSgpIGFu
ZCBub3QgcmVxdWlyZSB0aGUgY2FsbCB0byBBZGQoKQotICAgIGF0IGFsbC4gUmVzdWx0cyBmcm9t
IHRoaXMgZGF0YWJhc2Ugd2lsbCBiZSBjYWNoZWQgaW50ZXJuYWxseSBoZXJlIGFzIHdlbGwuCi0K
LSAgICBBcmdzOgotICAgICAgZGVzY3JpcHRvcl9kYjogQSBzZWNvbmRhcnkgc291cmNlIG9mIGZp
bGUgZGVzY3JpcHRvcnMuCi0gICAgIiIiCi0KLSAgICBzZWxmLl9pbnRlcm5hbF9kYiA9IGRlc2Ny
aXB0b3JfZGF0YWJhc2UuRGVzY3JpcHRvckRhdGFiYXNlKCkKLSAgICBzZWxmLl9kZXNjcmlwdG9y
X2RiID0gZGVzY3JpcHRvcl9kYgotICAgIHNlbGYuX2Rlc2NyaXB0b3JzID0ge30KLSAgICBzZWxm
Ll9lbnVtX2Rlc2NyaXB0b3JzID0ge30KLSAgICBzZWxmLl9maWxlX2Rlc2NyaXB0b3JzID0ge30K
LQotICBkZWYgQWRkKHNlbGYsIGZpbGVfZGVzY19wcm90byk6Ci0gICAgIiIiQWRkcyB0aGUgRmls
ZURlc2NyaXB0b3JQcm90byBhbmQgaXRzIHR5cGVzIHRvIHRoaXMgcG9vbC4KLQotICAgIEFyZ3M6
Ci0gICAgICBmaWxlX2Rlc2NfcHJvdG86IFRoZSBGaWxlRGVzY3JpcHRvclByb3RvIHRvIGFkZC4K
LSAgICAiIiIKLQotICAgIHNlbGYuX2ludGVybmFsX2RiLkFkZChmaWxlX2Rlc2NfcHJvdG8pCi0K
LSAgZGVmIEFkZFNlcmlhbGl6ZWRGaWxlKHNlbGYsIHNlcmlhbGl6ZWRfZmlsZV9kZXNjX3Byb3Rv
KToKLSAgICAiIiJBZGRzIHRoZSBGaWxlRGVzY3JpcHRvclByb3RvIGFuZCBpdHMgdHlwZXMgdG8g
dGhpcyBwb29sLgotCi0gICAgQXJnczoKLSAgICAgIHNlcmlhbGl6ZWRfZmlsZV9kZXNjX3Byb3Rv
OiBBIGJ5dGVzIHN0cmluZywgc2VyaWFsaXphdGlvbiBvZiB0aGUKLSAgICAgICAgRmlsZURlc2Ny
aXB0b3JQcm90byB0byBhZGQuCi0gICAgIiIiCi0KLSAgICAjIHB5bGludDogZGlzYWJsZT1nLWlt
cG9ydC1ub3QtYXQtdG9wCi0gICAgZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IGRlc2NyaXB0
b3JfcGIyCi0gICAgZmlsZV9kZXNjX3Byb3RvID0gZGVzY3JpcHRvcl9wYjIuRmlsZURlc2NyaXB0
b3JQcm90by5Gcm9tU3RyaW5nKAotICAgICAgICBzZXJpYWxpemVkX2ZpbGVfZGVzY19wcm90bykK
LSAgICBzZWxmLkFkZChmaWxlX2Rlc2NfcHJvdG8pCi0KLSAgZGVmIEFkZERlc2NyaXB0b3Ioc2Vs
ZiwgZGVzYyk6Ci0gICAgIiIiQWRkcyBhIERlc2NyaXB0b3IgdG8gdGhlIHBvb2wsIG5vbi1yZWN1
cnNpdmVseS4KLQotICAgIElmIHRoZSBEZXNjcmlwdG9yIGNvbnRhaW5zIG5lc3RlZCBtZXNzYWdl
cyBvciBlbnVtcywgdGhlIGNhbGxlciBtdXN0Ci0gICAgZXhwbGljaXRseSByZWdpc3RlciB0aGVt
LiBUaGlzIG1ldGhvZCBhbHNvIHJlZ2lzdGVycyB0aGUgRmlsZURlc2NyaXB0b3IKLSAgICBhc3Nv
Y2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuCi0KLSAgICBBcmdzOgotICAgICAgZGVzYzogQSBEZXNj
cmlwdG9yLgotICAgICIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKGRlc2MsIGRlc2NyaXB0b3Iu
RGVzY3JpcHRvcik6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IoJ0V4cGVjdGVkIGluc3RhbmNlIG9m
IGRlc2NyaXB0b3IuRGVzY3JpcHRvci4nKQotCi0gICAgc2VsZi5fZGVzY3JpcHRvcnNbZGVzYy5m
dWxsX25hbWVdID0gZGVzYwotICAgIHNlbGYuQWRkRmlsZURlc2NyaXB0b3IoZGVzYy5maWxlKQot
Ci0gIGRlZiBBZGRFbnVtRGVzY3JpcHRvcihzZWxmLCBlbnVtX2Rlc2MpOgotICAgICIiIkFkZHMg
YW4gRW51bURlc2NyaXB0b3IgdG8gdGhlIHBvb2wuCi0KLSAgICBUaGlzIG1ldGhvZCBhbHNvIHJl
Z2lzdGVycyB0aGUgRmlsZURlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLgot
Ci0gICAgQXJnczoKLSAgICAgIGVudW1fZGVzYzogQW4gRW51bURlc2NyaXB0b3IuCi0gICAgIiIi
Ci0KLSAgICBpZiBub3QgaXNpbnN0YW5jZShlbnVtX2Rlc2MsIGRlc2NyaXB0b3IuRW51bURlc2Ny
aXB0b3IpOgotICAgICAgcmFpc2UgVHlwZUVycm9yKCdFeHBlY3RlZCBpbnN0YW5jZSBvZiBkZXNj
cmlwdG9yLkVudW1EZXNjcmlwdG9yLicpCi0KLSAgICBzZWxmLl9lbnVtX2Rlc2NyaXB0b3JzW2Vu
dW1fZGVzYy5mdWxsX25hbWVdID0gZW51bV9kZXNjCi0gICAgc2VsZi5BZGRGaWxlRGVzY3JpcHRv
cihlbnVtX2Rlc2MuZmlsZSkKLQotICBkZWYgQWRkRmlsZURlc2NyaXB0b3Ioc2VsZiwgZmlsZV9k
ZXNjKToKLSAgICAiIiJBZGRzIGEgRmlsZURlc2NyaXB0b3IgdG8gdGhlIHBvb2wsIG5vbi1yZWN1
cnNpdmVseS4KLQotICAgIElmIHRoZSBGaWxlRGVzY3JpcHRvciBjb250YWlucyBtZXNzYWdlcyBv
ciBlbnVtcywgdGhlIGNhbGxlciBtdXN0IGV4cGxpY2l0bHkKLSAgICByZWdpc3RlciB0aGVtLgot
Ci0gICAgQXJnczoKLSAgICAgIGZpbGVfZGVzYzogQSBGaWxlRGVzY3JpcHRvci4KLSAgICAiIiIK
LQotICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbGVfZGVzYywgZGVzY3JpcHRvci5GaWxlRGVzY3Jp
cHRvcik6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IoJ0V4cGVjdGVkIGluc3RhbmNlIG9mIGRlc2Ny
aXB0b3IuRmlsZURlc2NyaXB0b3IuJykKLSAgICBzZWxmLl9maWxlX2Rlc2NyaXB0b3JzW2ZpbGVf
ZGVzYy5uYW1lXSA9IGZpbGVfZGVzYwotCi0gIGRlZiBGaW5kRmlsZUJ5TmFtZShzZWxmLCBmaWxl
X25hbWUpOgotICAgICIiIkdldHMgYSBGaWxlRGVzY3JpcHRvciBieSBmaWxlIG5hbWUuCi0KLSAg
ICBBcmdzOgotICAgICAgZmlsZV9uYW1lOiBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBnZXQgYSBk
ZXNjcmlwdG9yIGZvci4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIEZpbGVEZXNjcmlwdG9yIGZv
ciB0aGUgbmFtZWQgZmlsZS4KLQotICAgIFJhaXNlczoKLSAgICAgIEtleUVycm9yOiBpZiB0aGUg
ZmlsZSBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSBwb29sLgotICAgICIiIgotCi0gICAgdHJ5Ogot
ICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVfZGVzY3JpcHRvcnNbZmlsZV9uYW1lXQotICAgIGV4Y2Vw
dCBLZXlFcnJvcjoKLSAgICAgIHBhc3MKLQotICAgIHRyeToKLSAgICAgIGZpbGVfcHJvdG8gPSBz
ZWxmLl9pbnRlcm5hbF9kYi5GaW5kRmlsZUJ5TmFtZShmaWxlX25hbWUpCi0gICAgZXhjZXB0IEtl
eUVycm9yIGFzIGVycm9yOgotICAgICAgaWYgc2VsZi5fZGVzY3JpcHRvcl9kYjoKLSAgICAgICAg
ZmlsZV9wcm90byA9IHNlbGYuX2Rlc2NyaXB0b3JfZGIuRmluZEZpbGVCeU5hbWUoZmlsZV9uYW1l
KQotICAgICAgZWxzZToKLSAgICAgICAgcmFpc2UgZXJyb3IKLSAgICBpZiBub3QgZmlsZV9wcm90
bzoKLSAgICAgIHJhaXNlIEtleUVycm9yKCdDYW5ub3QgZmluZCBhIGZpbGUgbmFtZWQgJXMnICUg
ZmlsZV9uYW1lKQotICAgIHJldHVybiBzZWxmLl9Db252ZXJ0RmlsZVByb3RvVG9GaWxlRGVzY3Jp
cHRvcihmaWxlX3Byb3RvKQotCi0gIGRlZiBGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woc2VsZiwg
c3ltYm9sKToKLSAgICAiIiJHZXRzIHRoZSBGaWxlRGVzY3JpcHRvciBmb3IgdGhlIGZpbGUgY29u
dGFpbmluZyB0aGUgc3BlY2lmaWVkIHN5bWJvbC4KLQotICAgIEFyZ3M6Ci0gICAgICBzeW1ib2w6
IFRoZSBuYW1lIG9mIHRoZSBzeW1ib2wgdG8gc2VhcmNoIGZvci4KLQotICAgIFJldHVybnM6Ci0g
ICAgICBBIEZpbGVEZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBzeW1ib2wu
Ci0KLSAgICBSYWlzZXM6Ci0gICAgICBLZXlFcnJvcjogaWYgdGhlIGZpbGUgY2FuIG5vdCBiZSBm
b3VuZCBpbiB0aGUgcG9vbC4KLSAgICAiIiIKLQotICAgIHN5bWJvbCA9IF9Ob3JtYWxpemVGdWxs
eVF1YWxpZmllZE5hbWUoc3ltYm9sKQotICAgIHRyeToKLSAgICAgIHJldHVybiBzZWxmLl9kZXNj
cmlwdG9yc1tzeW1ib2xdLmZpbGUKLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICBwYXNzCi0K
LSAgICB0cnk6Ci0gICAgICByZXR1cm4gc2VsZi5fZW51bV9kZXNjcmlwdG9yc1tzeW1ib2xdLmZp
bGUKLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICBwYXNzCi0KLSAgICB0cnk6Ci0gICAgICBm
aWxlX3Byb3RvID0gc2VsZi5faW50ZXJuYWxfZGIuRmluZEZpbGVDb250YWluaW5nU3ltYm9sKHN5
bWJvbCkKLSAgICBleGNlcHQgS2V5RXJyb3IgYXMgZXJyb3I6Ci0gICAgICBpZiBzZWxmLl9kZXNj
cmlwdG9yX2RiOgotICAgICAgICBmaWxlX3Byb3RvID0gc2VsZi5fZGVzY3JpcHRvcl9kYi5GaW5k
RmlsZUNvbnRhaW5pbmdTeW1ib2woc3ltYm9sKQotICAgICAgZWxzZToKLSAgICAgICAgcmFpc2Ug
ZXJyb3IKLSAgICBpZiBub3QgZmlsZV9wcm90bzoKLSAgICAgIHJhaXNlIEtleUVycm9yKCdDYW5u
b3QgZmluZCBhIGZpbGUgY29udGFpbmluZyAlcycgJSBzeW1ib2wpCi0gICAgcmV0dXJuIHNlbGYu
X0NvbnZlcnRGaWxlUHJvdG9Ub0ZpbGVEZXNjcmlwdG9yKGZpbGVfcHJvdG8pCi0KLSAgZGVmIEZp
bmRNZXNzYWdlVHlwZUJ5TmFtZShzZWxmLCBmdWxsX25hbWUpOgotICAgICIiIkxvYWRzIHRoZSBu
YW1lZCBkZXNjcmlwdG9yIGZyb20gdGhlIHBvb2wuCi0KLSAgICBBcmdzOgotICAgICAgZnVsbF9u
YW1lOiBUaGUgZnVsbCBuYW1lIG9mIHRoZSBkZXNjcmlwdG9yIHRvIGxvYWQuCi0KLSAgICBSZXR1
cm5zOgotICAgICAgVGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBuYW1lZCB0eXBlLgotICAgICIiIgot
Ci0gICAgZnVsbF9uYW1lID0gX05vcm1hbGl6ZUZ1bGx5UXVhbGlmaWVkTmFtZShmdWxsX25hbWUp
Ci0gICAgaWYgZnVsbF9uYW1lIG5vdCBpbiBzZWxmLl9kZXNjcmlwdG9yczoKLSAgICAgIHNlbGYu
RmluZEZpbGVDb250YWluaW5nU3ltYm9sKGZ1bGxfbmFtZSkKLSAgICByZXR1cm4gc2VsZi5fZGVz
Y3JpcHRvcnNbZnVsbF9uYW1lXQotCi0gIGRlZiBGaW5kRW51bVR5cGVCeU5hbWUoc2VsZiwgZnVs
bF9uYW1lKToKLSAgICAiIiJMb2FkcyB0aGUgbmFtZWQgZW51bSBkZXNjcmlwdG9yIGZyb20gdGhl
IHBvb2wuCi0KLSAgICBBcmdzOgotICAgICAgZnVsbF9uYW1lOiBUaGUgZnVsbCBuYW1lIG9mIHRo
ZSBlbnVtIGRlc2NyaXB0b3IgdG8gbG9hZC4KLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgZW51
bSBkZXNjcmlwdG9yIGZvciB0aGUgbmFtZWQgdHlwZS4KLSAgICAiIiIKLQotICAgIGZ1bGxfbmFt
ZSA9IF9Ob3JtYWxpemVGdWxseVF1YWxpZmllZE5hbWUoZnVsbF9uYW1lKQotICAgIGlmIGZ1bGxf
bmFtZSBub3QgaW4gc2VsZi5fZW51bV9kZXNjcmlwdG9yczoKLSAgICAgIHNlbGYuRmluZEZpbGVD
b250YWluaW5nU3ltYm9sKGZ1bGxfbmFtZSkKLSAgICByZXR1cm4gc2VsZi5fZW51bV9kZXNjcmlw
dG9yc1tmdWxsX25hbWVdCi0KLSAgZGVmIEZpbmRGaWVsZEJ5TmFtZShzZWxmLCBmdWxsX25hbWUp
OgotICAgICIiIkxvYWRzIHRoZSBuYW1lZCBmaWVsZCBkZXNjcmlwdG9yIGZyb20gdGhlIHBvb2wu
Ci0KLSAgICBBcmdzOgotICAgICAgZnVsbF9uYW1lOiBUaGUgZnVsbCBuYW1lIG9mIHRoZSBmaWVs
ZCBkZXNjcmlwdG9yIHRvIGxvYWQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIGZpZWxkIGRl
c2NyaXB0b3IgZm9yIHRoZSBuYW1lZCBmaWVsZC4KLSAgICAiIiIKLSAgICBmdWxsX25hbWUgPSBf
Tm9ybWFsaXplRnVsbHlRdWFsaWZpZWROYW1lKGZ1bGxfbmFtZSkKLSAgICBtZXNzYWdlX25hbWUs
IF8sIGZpZWxkX25hbWUgPSBmdWxsX25hbWUucnBhcnRpdGlvbignLicpCi0gICAgbWVzc2FnZV9k
ZXNjcmlwdG9yID0gc2VsZi5GaW5kTWVzc2FnZVR5cGVCeU5hbWUobWVzc2FnZV9uYW1lKQotICAg
IHJldHVybiBtZXNzYWdlX2Rlc2NyaXB0b3IuZmllbGRzX2J5X25hbWVbZmllbGRfbmFtZV0KLQot
ICBkZWYgRmluZEV4dGVuc2lvbkJ5TmFtZShzZWxmLCBmdWxsX25hbWUpOgotICAgICIiIkxvYWRz
IHRoZSBuYW1lZCBleHRlbnNpb24gZGVzY3JpcHRvciBmcm9tIHRoZSBwb29sLgotCi0gICAgQXJn
czoKLSAgICAgIGZ1bGxfbmFtZTogVGhlIGZ1bGwgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIGRlc2Ny
aXB0b3IgdG8gbG9hZC4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIEZpZWxkRGVzY3JpcHRvciwg
ZGVzY3JpYmluZyB0aGUgbmFtZWQgZXh0ZW5zaW9uLgotICAgICIiIgotICAgIGZ1bGxfbmFtZSA9
IF9Ob3JtYWxpemVGdWxseVF1YWxpZmllZE5hbWUoZnVsbF9uYW1lKQotICAgIG1lc3NhZ2VfbmFt
ZSwgXywgZXh0ZW5zaW9uX25hbWUgPSBmdWxsX25hbWUucnBhcnRpdGlvbignLicpCi0gICAgdHJ5
OgotICAgICAgIyBNb3N0IGV4dGVuc2lvbnMgYXJlIG5lc3RlZCBpbnNpZGUgYSBtZXNzYWdlLgot
ICAgICAgc2NvcGUgPSBzZWxmLkZpbmRNZXNzYWdlVHlwZUJ5TmFtZShtZXNzYWdlX25hbWUpCi0g
ICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgIyBTb21lIGV4dGVuc2lvbnMgYXJlIGRlZmluZWQg
YXQgZmlsZSBzY29wZS4KLSAgICAgIHNjb3BlID0gc2VsZi5GaW5kRmlsZUNvbnRhaW5pbmdTeW1i
b2woZnVsbF9uYW1lKQotICAgIHJldHVybiBzY29wZS5leHRlbnNpb25zX2J5X25hbWVbZXh0ZW5z
aW9uX25hbWVdCi0KLSAgZGVmIF9Db252ZXJ0RmlsZVByb3RvVG9GaWxlRGVzY3JpcHRvcihzZWxm
LCBmaWxlX3Byb3RvKToKLSAgICAiIiJDcmVhdGVzIGEgRmlsZURlc2NyaXB0b3IgZnJvbSBhIHBy
b3RvIG9yIHJldHVybnMgYSBjYWNoZWQgY29weS4KLQotICAgIFRoaXMgbWV0aG9kIGFsc28gaGFz
IHRoZSBzaWRlIGVmZmVjdCBvZiBsb2FkaW5nIGFsbCB0aGUgc3ltYm9scyBmb3VuZCBpbgotICAg
IHRoZSBmaWxlIGludG8gdGhlIGFwcHJvcHJpYXRlIGRpY3Rpb25hcmllcyBpbiB0aGUgcG9vbC4K
LQotICAgIEFyZ3M6Ci0gICAgICBmaWxlX3Byb3RvOiBUaGUgcHJvdG8gdG8gY29udmVydC4KLQot
ICAgIFJldHVybnM6Ci0gICAgICBBIEZpbGVEZXNjcmlwdG9yIG1hdGNoaW5nIHRoZSBwYXNzZWQg
aW4gcHJvdG8uCi0gICAgIiIiCi0KLSAgICBpZiBmaWxlX3Byb3RvLm5hbWUgbm90IGluIHNlbGYu
X2ZpbGVfZGVzY3JpcHRvcnM6Ci0gICAgICBidWlsdF9kZXBzID0gbGlzdChzZWxmLl9HZXREZXBz
KGZpbGVfcHJvdG8uZGVwZW5kZW5jeSkpCi0gICAgICBkaXJlY3RfZGVwcyA9IFtzZWxmLkZpbmRG
aWxlQnlOYW1lKG4pIGZvciBuIGluIGZpbGVfcHJvdG8uZGVwZW5kZW5jeV0KLSAgICAgIHB1Ymxp
Y19kZXBzID0gW2RpcmVjdF9kZXBzW2ldIGZvciBpIGluIGZpbGVfcHJvdG8ucHVibGljX2RlcGVu
ZGVuY3ldCi0KLSAgICAgIGZpbGVfZGVzY3JpcHRvciA9IGRlc2NyaXB0b3IuRmlsZURlc2NyaXB0
b3IoCi0gICAgICAgICAgcG9vbD1zZWxmLAotICAgICAgICAgIG5hbWU9ZmlsZV9wcm90by5uYW1l
LAotICAgICAgICAgIHBhY2thZ2U9ZmlsZV9wcm90by5wYWNrYWdlLAotICAgICAgICAgIHN5bnRh
eD1maWxlX3Byb3RvLnN5bnRheCwKLSAgICAgICAgICBvcHRpb25zPWZpbGVfcHJvdG8ub3B0aW9u
cywKLSAgICAgICAgICBzZXJpYWxpemVkX3BiPWZpbGVfcHJvdG8uU2VyaWFsaXplVG9TdHJpbmco
KSwKLSAgICAgICAgICBkZXBlbmRlbmNpZXM9ZGlyZWN0X2RlcHMsCi0gICAgICAgICAgcHVibGlj
X2RlcGVuZGVuY2llcz1wdWJsaWNfZGVwcykKLSAgICAgIGlmIF9VU0VfQ19ERVNDUklQVE9SUzoK
LSAgICAgICAgIyBXaGVuIHVzaW5nIEMrKyBkZXNjcmlwdG9ycywgYWxsIG9iamVjdHMgZGVmaW5l
ZCBpbiB0aGUgZmlsZSB3ZXJlIGFkZGVkCi0gICAgICAgICMgdG8gdGhlIEMrKyBkYXRhYmFzZSB3
aGVuIHRoZSBGaWxlRGVzY3JpcHRvciB3YXMgYnVpbHQgYWJvdmUuCi0gICAgICAgICMgSnVzdCBh
ZGQgdGhlbSB0byB0aGlzIGRlc2NyaXB0b3IgcG9vbC4KLSAgICAgICAgZGVmIF9BZGRNZXNzYWdl
RGVzY3JpcHRvcihtZXNzYWdlX2Rlc2MpOgotICAgICAgICAgIHNlbGYuX2Rlc2NyaXB0b3JzW21l
c3NhZ2VfZGVzYy5mdWxsX25hbWVdID0gbWVzc2FnZV9kZXNjCi0gICAgICAgICAgZm9yIG5lc3Rl
ZCBpbiBtZXNzYWdlX2Rlc2MubmVzdGVkX3R5cGVzOgotICAgICAgICAgICAgX0FkZE1lc3NhZ2VE
ZXNjcmlwdG9yKG5lc3RlZCkKLSAgICAgICAgICBmb3IgZW51bV90eXBlIGluIG1lc3NhZ2VfZGVz
Yy5lbnVtX3R5cGVzOgotICAgICAgICAgICAgX0FkZEVudW1EZXNjcmlwdG9yKGVudW1fdHlwZSkK
LSAgICAgICAgZGVmIF9BZGRFbnVtRGVzY3JpcHRvcihlbnVtX2Rlc2MpOgotICAgICAgICAgIHNl
bGYuX2VudW1fZGVzY3JpcHRvcnNbZW51bV9kZXNjLmZ1bGxfbmFtZV0gPSBlbnVtX2Rlc2MKLSAg
ICAgICAgZm9yIG1lc3NhZ2VfdHlwZSBpbiBmaWxlX2Rlc2NyaXB0b3IubWVzc2FnZV90eXBlc19i
eV9uYW1lLnZhbHVlcygpOgotICAgICAgICAgIF9BZGRNZXNzYWdlRGVzY3JpcHRvcihtZXNzYWdl
X3R5cGUpCi0gICAgICAgIGZvciBlbnVtX3R5cGUgaW4gZmlsZV9kZXNjcmlwdG9yLmVudW1fdHlw
ZXNfYnlfbmFtZS52YWx1ZXMoKToKLSAgICAgICAgICBfQWRkRW51bURlc2NyaXB0b3IoZW51bV90
eXBlKQotICAgICAgZWxzZToKLSAgICAgICAgc2NvcGUgPSB7fQotCi0gICAgICAgICMgVGhpcyBs
b29wIGV4dHJhY3RzIGFsbCB0aGUgbWVzc2FnZSBhbmQgZW51bSB0eXBlcyBmcm9tIGFsbCB0aGUK
LSAgICAgICAgIyBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGVfcHJvdG8uIFRoaXMgaXMgbmVjZXNz
YXJ5IHRvIGNyZWF0ZSB0aGUKLSAgICAgICAgIyBzY29wZSBvZiBhdmFpbGFibGUgbWVzc2FnZSB0
eXBlcyB3aGVuIGRlZmluaW5nIHRoZSBwYXNzZWQgaW4KLSAgICAgICAgIyBmaWxlIHByb3RvLgot
ICAgICAgICBmb3IgZGVwZW5kZW5jeSBpbiBidWlsdF9kZXBzOgotICAgICAgICAgIHNjb3BlLnVw
ZGF0ZShzZWxmLl9FeHRyYWN0U3ltYm9scygKLSAgICAgICAgICAgICAgZGVwZW5kZW5jeS5tZXNz
YWdlX3R5cGVzX2J5X25hbWUudmFsdWVzKCkpKQotICAgICAgICAgIHNjb3BlLnVwZGF0ZSgoX1By
ZWZpeFdpdGhEb3QoZW51bS5mdWxsX25hbWUpLCBlbnVtKQotICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgZW51bSBpbiBkZXBlbmRlbmN5LmVudW1fdHlwZXNfYnlfbmFtZS52YWx1ZXMoKSkKLQot
ICAgICAgICBmb3IgbWVzc2FnZV90eXBlIGluIGZpbGVfcHJvdG8ubWVzc2FnZV90eXBlOgotICAg
ICAgICAgIG1lc3NhZ2VfZGVzYyA9IHNlbGYuX0NvbnZlcnRNZXNzYWdlRGVzY3JpcHRvcigKLSAg
ICAgICAgICAgICAgbWVzc2FnZV90eXBlLCBmaWxlX3Byb3RvLnBhY2thZ2UsIGZpbGVfZGVzY3Jp
cHRvciwgc2NvcGUsCi0gICAgICAgICAgICAgIGZpbGVfcHJvdG8uc3ludGF4KQotICAgICAgICAg
IGZpbGVfZGVzY3JpcHRvci5tZXNzYWdlX3R5cGVzX2J5X25hbWVbbWVzc2FnZV9kZXNjLm5hbWVd
ID0gKAotICAgICAgICAgICAgICBtZXNzYWdlX2Rlc2MpCi0KLSAgICAgICAgZm9yIGVudW1fdHlw
ZSBpbiBmaWxlX3Byb3RvLmVudW1fdHlwZToKLSAgICAgICAgICBmaWxlX2Rlc2NyaXB0b3IuZW51
bV90eXBlc19ieV9uYW1lW2VudW1fdHlwZS5uYW1lXSA9ICgKLSAgICAgICAgICAgICAgc2VsZi5f
Q29udmVydEVudW1EZXNjcmlwdG9yKGVudW1fdHlwZSwgZmlsZV9wcm90by5wYWNrYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9kZXNjcmlwdG9yLCBO
b25lLCBzY29wZSkpCi0KLSAgICAgICAgZm9yIGluZGV4LCBleHRlbnNpb25fcHJvdG8gaW4gZW51
bWVyYXRlKGZpbGVfcHJvdG8uZXh0ZW5zaW9uKToKLSAgICAgICAgICBleHRlbnNpb25fZGVzYyA9
IHNlbGYuX01ha2VGaWVsZERlc2NyaXB0b3IoCi0gICAgICAgICAgICAgIGV4dGVuc2lvbl9wcm90
bywgZmlsZV9wcm90by5wYWNrYWdlLCBpbmRleCwgaXNfZXh0ZW5zaW9uPVRydWUpCi0gICAgICAg
ICAgZXh0ZW5zaW9uX2Rlc2MuY29udGFpbmluZ190eXBlID0gc2VsZi5fR2V0VHlwZUZyb21TY29w
ZSgKLSAgICAgICAgICAgICAgZmlsZV9kZXNjcmlwdG9yLnBhY2thZ2UsIGV4dGVuc2lvbl9wcm90
by5leHRlbmRlZSwgc2NvcGUpCi0gICAgICAgICAgc2VsZi5fU2V0RmllbGRUeXBlKGV4dGVuc2lv
bl9wcm90bywgZXh0ZW5zaW9uX2Rlc2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls
ZV9kZXNjcmlwdG9yLnBhY2thZ2UsIHNjb3BlKQotICAgICAgICAgIGZpbGVfZGVzY3JpcHRvci5l
eHRlbnNpb25zX2J5X25hbWVbZXh0ZW5zaW9uX2Rlc2MubmFtZV0gPSAoCi0gICAgICAgICAgICAg
IGV4dGVuc2lvbl9kZXNjKQotCi0gICAgICAgIGZvciBkZXNjX3Byb3RvIGluIGZpbGVfcHJvdG8u
bWVzc2FnZV90eXBlOgotICAgICAgICAgIHNlbGYuX1NldEFsbEZpZWxkVHlwZXMoZmlsZV9wcm90
by5wYWNrYWdlLCBkZXNjX3Byb3RvLCBzY29wZSkKLQotICAgICAgICBpZiBmaWxlX3Byb3RvLnBh
Y2thZ2U6Ci0gICAgICAgICAgZGVzY19wcm90b19wcmVmaXggPSBfUHJlZml4V2l0aERvdChmaWxl
X3Byb3RvLnBhY2thZ2UpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgZGVzY19wcm90b19wcmVm
aXggPSAnJwotCi0gICAgICAgIGZvciBkZXNjX3Byb3RvIGluIGZpbGVfcHJvdG8ubWVzc2FnZV90
eXBlOgotICAgICAgICAgIGRlc2MgPSBzZWxmLl9HZXRUeXBlRnJvbVNjb3BlKAotICAgICAgICAg
ICAgICBkZXNjX3Byb3RvX3ByZWZpeCwgZGVzY19wcm90by5uYW1lLCBzY29wZSkKLSAgICAgICAg
ICBmaWxlX2Rlc2NyaXB0b3IubWVzc2FnZV90eXBlc19ieV9uYW1lW2Rlc2NfcHJvdG8ubmFtZV0g
PSBkZXNjCi0KLSAgICAgIHNlbGYuQWRkKGZpbGVfcHJvdG8pCi0gICAgICBzZWxmLl9maWxlX2Rl
c2NyaXB0b3JzW2ZpbGVfcHJvdG8ubmFtZV0gPSBmaWxlX2Rlc2NyaXB0b3IKLQotICAgIHJldHVy
biBzZWxmLl9maWxlX2Rlc2NyaXB0b3JzW2ZpbGVfcHJvdG8ubmFtZV0KLQotICBkZWYgX0NvbnZl
cnRNZXNzYWdlRGVzY3JpcHRvcihzZWxmLCBkZXNjX3Byb3RvLCBwYWNrYWdlPU5vbmUsIGZpbGVf
ZGVzYz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZT1Ob25lLCBz
eW50YXg9Tm9uZSk6Ci0gICAgIiIiQWRkcyB0aGUgcHJvdG8gdG8gdGhlIHBvb2wgaW4gdGhlIHNw
ZWNpZmllZCBwYWNrYWdlLgotCi0gICAgQXJnczoKLSAgICAgIGRlc2NfcHJvdG86IFRoZSBkZXNj
cmlwdG9yX3BiMi5EZXNjcmlwdG9yUHJvdG8gcHJvdG9idWYgbWVzc2FnZS4KLSAgICAgIHBhY2th
Z2U6IFRoZSBwYWNrYWdlIHRoZSBwcm90byBzaG91bGQgYmUgbG9jYXRlZCBpbi4KLSAgICAgIGZp
bGVfZGVzYzogVGhlIGZpbGUgY29udGFpbmluZyB0aGlzIG1lc3NhZ2UuCi0gICAgICBzY29wZTog
RGljdCBtYXBwaW5nIHNob3J0IGFuZCBmdWxsIHN5bWJvbHMgdG8gbWVzc2FnZSBhbmQgZW51bSB0
eXBlcy4KLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgYWRkZWQgZGVzY3JpcHRvci4KLSAgICAi
IiIKLQotICAgIGlmIHBhY2thZ2U6Ci0gICAgICBkZXNjX25hbWUgPSAnLicuam9pbigocGFja2Fn
ZSwgZGVzY19wcm90by5uYW1lKSkKLSAgICBlbHNlOgotICAgICAgZGVzY19uYW1lID0gZGVzY19w
cm90by5uYW1lCi0KLSAgICBpZiBmaWxlX2Rlc2MgaXMgTm9uZToKLSAgICAgIGZpbGVfbmFtZSA9
IE5vbmUKLSAgICBlbHNlOgotICAgICAgZmlsZV9uYW1lID0gZmlsZV9kZXNjLm5hbWUKLQotICAg
IGlmIHNjb3BlIGlzIE5vbmU6Ci0gICAgICBzY29wZSA9IHt9Ci0KLSAgICBuZXN0ZWQgPSBbCi0g
ICAgICAgIHNlbGYuX0NvbnZlcnRNZXNzYWdlRGVzY3JpcHRvcigKLSAgICAgICAgICAgIG5lc3Rl
ZCwgZGVzY19uYW1lLCBmaWxlX2Rlc2MsIHNjb3BlLCBzeW50YXgpCi0gICAgICAgIGZvciBuZXN0
ZWQgaW4gZGVzY19wcm90by5uZXN0ZWRfdHlwZV0KLSAgICBlbnVtcyA9IFsKLSAgICAgICAgc2Vs
Zi5fQ29udmVydEVudW1EZXNjcmlwdG9yKGVudW0sIGRlc2NfbmFtZSwgZmlsZV9kZXNjLCBOb25l
LCBzY29wZSkKLSAgICAgICAgZm9yIGVudW0gaW4gZGVzY19wcm90by5lbnVtX3R5cGVdCi0gICAg
ZmllbGRzID0gW3NlbGYuX01ha2VGaWVsZERlc2NyaXB0b3IoZmllbGQsIGRlc2NfbmFtZSwgaW5k
ZXgpCi0gICAgICAgICAgICAgIGZvciBpbmRleCwgZmllbGQgaW4gZW51bWVyYXRlKGRlc2NfcHJv
dG8uZmllbGQpXQotICAgIGV4dGVuc2lvbnMgPSBbCi0gICAgICAgIHNlbGYuX01ha2VGaWVsZERl
c2NyaXB0b3IoZXh0ZW5zaW9uLCBkZXNjX25hbWUsIGluZGV4LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbj1UcnVlKQotICAgICAgICBmb3IgaW5kZXgsIGV4
dGVuc2lvbiBpbiBlbnVtZXJhdGUoZGVzY19wcm90by5leHRlbnNpb24pXQotICAgIG9uZW9mcyA9
IFsKLSAgICAgICAgZGVzY3JpcHRvci5PbmVvZkRlc2NyaXB0b3IoZGVzYy5uYW1lLCAnLicuam9p
bigoZGVzY19uYW1lLCBkZXNjLm5hbWUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXgsIE5vbmUsIFtdKQotICAgICAgICBmb3IgaW5kZXgsIGRlc2MgaW4gZW51bWVy
YXRlKGRlc2NfcHJvdG8ub25lb2ZfZGVjbCldCi0gICAgZXh0ZW5zaW9uX3JhbmdlcyA9IFsoci5z
dGFydCwgci5lbmQpIGZvciByIGluIGRlc2NfcHJvdG8uZXh0ZW5zaW9uX3JhbmdlXQotICAgIGlm
IGV4dGVuc2lvbl9yYW5nZXM6Ci0gICAgICBpc19leHRlbmRhYmxlID0gVHJ1ZQotICAgIGVsc2U6
Ci0gICAgICBpc19leHRlbmRhYmxlID0gRmFsc2UKLSAgICBkZXNjID0gZGVzY3JpcHRvci5EZXNj
cmlwdG9yKAotICAgICAgICBuYW1lPWRlc2NfcHJvdG8ubmFtZSwKLSAgICAgICAgZnVsbF9uYW1l
PWRlc2NfbmFtZSwKLSAgICAgICAgZmlsZW5hbWU9ZmlsZV9uYW1lLAotICAgICAgICBjb250YWlu
aW5nX3R5cGU9Tm9uZSwKLSAgICAgICAgZmllbGRzPWZpZWxkcywKLSAgICAgICAgb25lb2ZzPW9u
ZW9mcywKLSAgICAgICAgbmVzdGVkX3R5cGVzPW5lc3RlZCwKLSAgICAgICAgZW51bV90eXBlcz1l
bnVtcywKLSAgICAgICAgZXh0ZW5zaW9ucz1leHRlbnNpb25zLAotICAgICAgICBvcHRpb25zPWRl
c2NfcHJvdG8ub3B0aW9ucywKLSAgICAgICAgaXNfZXh0ZW5kYWJsZT1pc19leHRlbmRhYmxlLAot
ICAgICAgICBleHRlbnNpb25fcmFuZ2VzPWV4dGVuc2lvbl9yYW5nZXMsCi0gICAgICAgIGZpbGU9
ZmlsZV9kZXNjLAotICAgICAgICBzZXJpYWxpemVkX3N0YXJ0PU5vbmUsCi0gICAgICAgIHNlcmlh
bGl6ZWRfZW5kPU5vbmUsCi0gICAgICAgIHN5bnRheD1zeW50YXgpCi0gICAgZm9yIG5lc3RlZCBp
biBkZXNjLm5lc3RlZF90eXBlczoKLSAgICAgIG5lc3RlZC5jb250YWluaW5nX3R5cGUgPSBkZXNj
Ci0gICAgZm9yIGVudW0gaW4gZGVzYy5lbnVtX3R5cGVzOgotICAgICAgZW51bS5jb250YWluaW5n
X3R5cGUgPSBkZXNjCi0gICAgZm9yIGZpZWxkX2luZGV4LCBmaWVsZF9kZXNjIGluIGVudW1lcmF0
ZShkZXNjX3Byb3RvLmZpZWxkKToKLSAgICAgIGlmIGZpZWxkX2Rlc2MuSGFzRmllbGQoJ29uZW9m
X2luZGV4Jyk6Ci0gICAgICAgIG9uZW9mX2luZGV4ID0gZmllbGRfZGVzYy5vbmVvZl9pbmRleAot
ICAgICAgICBvbmVvZnNbb25lb2ZfaW5kZXhdLmZpZWxkcy5hcHBlbmQoZmllbGRzW2ZpZWxkX2lu
ZGV4XSkKLSAgICAgICAgZmllbGRzW2ZpZWxkX2luZGV4XS5jb250YWluaW5nX29uZW9mID0gb25l
b2ZzW29uZW9mX2luZGV4XQotCi0gICAgc2NvcGVbX1ByZWZpeFdpdGhEb3QoZGVzY19uYW1lKV0g
PSBkZXNjCi0gICAgc2VsZi5fZGVzY3JpcHRvcnNbZGVzY19uYW1lXSA9IGRlc2MKLSAgICByZXR1
cm4gZGVzYwotCi0gIGRlZiBfQ29udmVydEVudW1EZXNjcmlwdG9yKHNlbGYsIGVudW1fcHJvdG8s
IHBhY2thZ2U9Tm9uZSwgZmlsZV9kZXNjPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5pbmdfdHlwZT1Ob25lLCBzY29wZT1Ob25lKToKLSAgICAiIiJNYWtlIGEgcHJv
dG9idWYgRW51bURlc2NyaXB0b3IgZ2l2ZW4gYW4gRW51bURlc2NyaXB0b3JQcm90byBwcm90b2J1
Zi4KLQotICAgIEFyZ3M6Ci0gICAgICBlbnVtX3Byb3RvOiBUaGUgZGVzY3JpcHRvcl9wYjIuRW51
bURlc2NyaXB0b3JQcm90byBwcm90b2J1ZiBtZXNzYWdlLgotICAgICAgcGFja2FnZTogT3B0aW9u
YWwgcGFja2FnZSBuYW1lIGZvciB0aGUgbmV3IG1lc3NhZ2UgRW51bURlc2NyaXB0b3IuCi0gICAg
ICBmaWxlX2Rlc2M6IFRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGVudW0gZGVzY3JpcHRvci4KLSAg
ICAgIGNvbnRhaW5pbmdfdHlwZTogVGhlIHR5cGUgY29udGFpbmluZyB0aGlzIGVudW0uCi0gICAg
ICBzY29wZTogU2NvcGUgY29udGFpbmluZyBhdmFpbGFibGUgdHlwZXMuCi0KLSAgICBSZXR1cm5z
OgotICAgICAgVGhlIGFkZGVkIGRlc2NyaXB0b3IKLSAgICAiIiIKLQotICAgIGlmIHBhY2thZ2U6
Ci0gICAgICBlbnVtX25hbWUgPSAnLicuam9pbigocGFja2FnZSwgZW51bV9wcm90by5uYW1lKSkK
LSAgICBlbHNlOgotICAgICAgZW51bV9uYW1lID0gZW51bV9wcm90by5uYW1lCi0KLSAgICBpZiBm
aWxlX2Rlc2MgaXMgTm9uZToKLSAgICAgIGZpbGVfbmFtZSA9IE5vbmUKLSAgICBlbHNlOgotICAg
ICAgZmlsZV9uYW1lID0gZmlsZV9kZXNjLm5hbWUKLQotICAgIHZhbHVlcyA9IFtzZWxmLl9NYWtl
RW51bVZhbHVlRGVzY3JpcHRvcih2YWx1ZSwgaW5kZXgpCi0gICAgICAgICAgICAgIGZvciBpbmRl
eCwgdmFsdWUgaW4gZW51bWVyYXRlKGVudW1fcHJvdG8udmFsdWUpXQotICAgIGRlc2MgPSBkZXNj
cmlwdG9yLkVudW1EZXNjcmlwdG9yKG5hbWU9ZW51bV9wcm90by5uYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxfbmFtZT1lbnVtX25hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9ZmlsZV9uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9ZmlsZV9kZXNjLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz12YWx1ZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlPWNvbnRhaW5pbmdfdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPWVudW1fcHJvdG8ub3B0
aW9ucykKLSAgICBzY29wZVsnLiVzJyAlIGVudW1fbmFtZV0gPSBkZXNjCi0gICAgc2VsZi5fZW51
bV9kZXNjcmlwdG9yc1tlbnVtX25hbWVdID0gZGVzYwotICAgIHJldHVybiBkZXNjCi0KLSAgZGVm
IF9NYWtlRmllbGREZXNjcmlwdG9yKHNlbGYsIGZpZWxkX3Byb3RvLCBtZXNzYWdlX25hbWUsIGlu
ZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlKToKLSAg
ICAiIiJDcmVhdGVzIGEgZmllbGQgZGVzY3JpcHRvciBmcm9tIGEgRmllbGREZXNjcmlwdG9yUHJv
dG8uCi0KLSAgICBGb3IgbWVzc2FnZSBhbmQgZW51bSB0eXBlIGZpZWxkcywgdGhpcyBtZXRob2Qg
d2lsbCBkbyBhIGxvb2sgdXAKLSAgICBpbiB0aGUgcG9vbCBmb3IgdGhlIGFwcHJvcHJpYXRlIGRl
c2NyaXB0b3IgZm9yIHRoYXQgdHlwZS4gSWYgaXQKLSAgICBpcyB1bmF2YWlsYWJsZSwgaXQgd2ls
bCBmYWxsIGJhY2sgdG8gdGhlIF9zb3VyY2UgZnVuY3Rpb24gdG8KLSAgICBjcmVhdGUgaXQuIElm
IHRoaXMgdHlwZSBpcyBzdGlsbCB1bmF2YWlsYWJsZSwgY29uc3RydWN0aW9uIHdpbGwKLSAgICBm
YWlsLgotCi0gICAgQXJnczoKLSAgICAgIGZpZWxkX3Byb3RvOiBUaGUgcHJvdG8gZGVzY3JpYmlu
ZyB0aGUgZmllbGQuCi0gICAgICBtZXNzYWdlX25hbWU6IFRoZSBuYW1lIG9mIHRoZSBjb250YWlu
aW5nIG1lc3NhZ2UuCi0gICAgICBpbmRleDogSW5kZXggb2YgdGhlIGZpZWxkCi0gICAgICBpc19l
eHRlbnNpb246IEluZGljYXRpb24gdGhhdCB0aGlzIGZpZWxkIGlzIGZvciBhbiBleHRlbnNpb24u
Ci0KLSAgICBSZXR1cm5zOgotICAgICAgQW4gaW5pdGlhbGl6ZWQgRmllbGREZXNjcmlwdG9yIG9i
amVjdAotICAgICIiIgotCi0gICAgaWYgbWVzc2FnZV9uYW1lOgotICAgICAgZnVsbF9uYW1lID0g
Jy4nLmpvaW4oKG1lc3NhZ2VfbmFtZSwgZmllbGRfcHJvdG8ubmFtZSkpCi0gICAgZWxzZToKLSAg
ICAgIGZ1bGxfbmFtZSA9IGZpZWxkX3Byb3RvLm5hbWUKLQotICAgIHJldHVybiBkZXNjcmlwdG9y
LkZpZWxkRGVzY3JpcHRvcigKLSAgICAgICAgbmFtZT1maWVsZF9wcm90by5uYW1lLAotICAgICAg
ICBmdWxsX25hbWU9ZnVsbF9uYW1lLAotICAgICAgICBpbmRleD1pbmRleCwKLSAgICAgICAgbnVt
YmVyPWZpZWxkX3Byb3RvLm51bWJlciwKLSAgICAgICAgdHlwZT1maWVsZF9wcm90by50eXBlLAot
ICAgICAgICBjcHBfdHlwZT1Ob25lLAotICAgICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwKLSAgICAg
ICAgZW51bV90eXBlPU5vbmUsCi0gICAgICAgIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAotICAgICAg
ICBsYWJlbD1maWVsZF9wcm90by5sYWJlbCwKLSAgICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFs
c2UsCi0gICAgICAgIGRlZmF1bHRfdmFsdWU9Tm9uZSwKLSAgICAgICAgaXNfZXh0ZW5zaW9uPWlz
X2V4dGVuc2lvbiwKLSAgICAgICAgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICAgIG9wdGlv
bnM9ZmllbGRfcHJvdG8ub3B0aW9ucykKLQotICBkZWYgX1NldEFsbEZpZWxkVHlwZXMoc2VsZiwg
cGFja2FnZSwgZGVzY19wcm90bywgc2NvcGUpOgotICAgICIiIlNldHMgYWxsIHRoZSBkZXNjcmlw
dG9yJ3MgZmllbGRzJ3MgdHlwZXMuCi0KLSAgICBUaGlzIG1ldGhvZCBhbHNvIHNldHMgdGhlIGNv
bnRhaW5pbmcgdHlwZXMgb24gYW55IGV4dGVuc2lvbnMuCi0KLSAgICBBcmdzOgotICAgICAgcGFj
a2FnZTogVGhlIGN1cnJlbnQgcGFja2FnZSBvZiBkZXNjX3Byb3RvLgotICAgICAgZGVzY19wcm90
bzogVGhlIG1lc3NhZ2UgZGVzY3JpcHRvciB0byB1cGRhdGUuCi0gICAgICBzY29wZTogRW5jbG9z
aW5nIHNjb3BlIG9mIGF2YWlsYWJsZSB0eXBlcy4KLSAgICAiIiIKLQotICAgIHBhY2thZ2UgPSBf
UHJlZml4V2l0aERvdChwYWNrYWdlKQotCi0gICAgbWFpbl9kZXNjID0gc2VsZi5fR2V0VHlwZUZy
b21TY29wZShwYWNrYWdlLCBkZXNjX3Byb3RvLm5hbWUsIHNjb3BlKQotCi0gICAgaWYgcGFja2Fn
ZSA9PSAnLic6Ci0gICAgICBuZXN0ZWRfcGFja2FnZSA9IF9QcmVmaXhXaXRoRG90KGRlc2NfcHJv
dG8ubmFtZSkKLSAgICBlbHNlOgotICAgICAgbmVzdGVkX3BhY2thZ2UgPSAnLicuam9pbihbcGFj
a2FnZSwgZGVzY19wcm90by5uYW1lXSkKLQotICAgIGZvciBmaWVsZF9wcm90bywgZmllbGRfZGVz
YyBpbiB6aXAoZGVzY19wcm90by5maWVsZCwgbWFpbl9kZXNjLmZpZWxkcyk6Ci0gICAgICBzZWxm
Ll9TZXRGaWVsZFR5cGUoZmllbGRfcHJvdG8sIGZpZWxkX2Rlc2MsIG5lc3RlZF9wYWNrYWdlLCBz
Y29wZSkKLQotICAgIGZvciBleHRlbnNpb25fcHJvdG8sIGV4dGVuc2lvbl9kZXNjIGluICgKLSAg
ICAgICAgemlwKGRlc2NfcHJvdG8uZXh0ZW5zaW9uLCBtYWluX2Rlc2MuZXh0ZW5zaW9ucykpOgot
ICAgICAgZXh0ZW5zaW9uX2Rlc2MuY29udGFpbmluZ190eXBlID0gc2VsZi5fR2V0VHlwZUZyb21T
Y29wZSgKLSAgICAgICAgICBuZXN0ZWRfcGFja2FnZSwgZXh0ZW5zaW9uX3Byb3RvLmV4dGVuZGVl
LCBzY29wZSkKLSAgICAgIHNlbGYuX1NldEZpZWxkVHlwZShleHRlbnNpb25fcHJvdG8sIGV4dGVu
c2lvbl9kZXNjLCBuZXN0ZWRfcGFja2FnZSwgc2NvcGUpCi0KLSAgICBmb3IgbmVzdGVkX3R5cGUg
aW4gZGVzY19wcm90by5uZXN0ZWRfdHlwZToKLSAgICAgIHNlbGYuX1NldEFsbEZpZWxkVHlwZXMo
bmVzdGVkX3BhY2thZ2UsIG5lc3RlZF90eXBlLCBzY29wZSkKLQotICBkZWYgX1NldEZpZWxkVHlw
ZShzZWxmLCBmaWVsZF9wcm90bywgZmllbGRfZGVzYywgcGFja2FnZSwgc2NvcGUpOgotICAgICIi
IlNldHMgdGhlIGZpZWxkJ3MgdHlwZSwgY3BwX3R5cGUsIG1lc3NhZ2VfdHlwZSBhbmQgZW51bV90
eXBlLgotCi0gICAgQXJnczoKLSAgICAgIGZpZWxkX3Byb3RvOiBEYXRhIGFib3V0IHRoZSBmaWVs
ZCBpbiBwcm90byBmb3JtYXQuCi0gICAgICBmaWVsZF9kZXNjOiBUaGUgZGVzY3JpcHRvciB0byBt
b2RpeS4KLSAgICAgIHBhY2thZ2U6IFRoZSBwYWNrYWdlIHRoZSBmaWVsZCdzIGNvbnRhaW5lciBp
cyBpbi4KLSAgICAgIHNjb3BlOiBFbmNsb3Npbmcgc2NvcGUgb2YgYXZhaWxhYmxlIHR5cGVzLgot
ICAgICIiIgotICAgIGlmIGZpZWxkX3Byb3RvLnR5cGVfbmFtZToKLSAgICAgIGRlc2MgPSBzZWxm
Ll9HZXRUeXBlRnJvbVNjb3BlKHBhY2thZ2UsIGZpZWxkX3Byb3RvLnR5cGVfbmFtZSwgc2NvcGUp
Ci0gICAgZWxzZToKLSAgICAgIGRlc2MgPSBOb25lCi0KLSAgICBpZiBub3QgZmllbGRfcHJvdG8u
SGFzRmllbGQoJ3R5cGUnKToKLSAgICAgIGlmIGlzaW5zdGFuY2UoZGVzYywgZGVzY3JpcHRvci5E
ZXNjcmlwdG9yKToKLSAgICAgICAgZmllbGRfcHJvdG8udHlwZSA9IGRlc2NyaXB0b3IuRmllbGRE
ZXNjcmlwdG9yLlRZUEVfTUVTU0FHRQotICAgICAgZWxzZToKLSAgICAgICAgZmllbGRfcHJvdG8u
dHlwZSA9IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfRU5VTQotCi0gICAgZmllbGRf
ZGVzYy5jcHBfdHlwZSA9IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlByb3RvVHlwZVRvQ3Bw
UHJvdG9UeXBlKAotICAgICAgICBmaWVsZF9wcm90by50eXBlKQotCi0gICAgaWYgKGZpZWxkX3By
b3RvLnR5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9NRVNTQUdFCi0gICAg
ICAgIG9yIGZpZWxkX3Byb3RvLnR5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQ
RV9HUk9VUCk6Ci0gICAgICBmaWVsZF9kZXNjLm1lc3NhZ2VfdHlwZSA9IGRlc2MKLQotICAgIGlm
IGZpZWxkX3Byb3RvLnR5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9FTlVN
OgotICAgICAgZmllbGRfZGVzYy5lbnVtX3R5cGUgPSBkZXNjCi0KLSAgICBpZiBmaWVsZF9wcm90
by5sYWJlbCA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBFQVRFRDoKLSAg
ICAgIGZpZWxkX2Rlc2MuaGFzX2RlZmF1bHRfdmFsdWUgPSBGYWxzZQotICAgICAgZmllbGRfZGVz
Yy5kZWZhdWx0X3ZhbHVlID0gW10KLSAgICBlbGlmIGZpZWxkX3Byb3RvLkhhc0ZpZWxkKCdkZWZh
dWx0X3ZhbHVlJyk6Ci0gICAgICBmaWVsZF9kZXNjLmhhc19kZWZhdWx0X3ZhbHVlID0gVHJ1ZQot
ICAgICAgaWYgKGZpZWxkX3Byb3RvLnR5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3Iu
VFlQRV9ET1VCTEUgb3IKLSAgICAgICAgICBmaWVsZF9wcm90by50eXBlID09IGRlc2NyaXB0b3Iu
RmllbGREZXNjcmlwdG9yLlRZUEVfRkxPQVQpOgotICAgICAgICBmaWVsZF9kZXNjLmRlZmF1bHRf
dmFsdWUgPSBmbG9hdChmaWVsZF9wcm90by5kZWZhdWx0X3ZhbHVlKQotICAgICAgZWxpZiBmaWVs
ZF9wcm90by50eXBlID09IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfU1RSSU5HOgot
ICAgICAgICBmaWVsZF9kZXNjLmRlZmF1bHRfdmFsdWUgPSBmaWVsZF9wcm90by5kZWZhdWx0X3Zh
bHVlCi0gICAgICBlbGlmIGZpZWxkX3Byb3RvLnR5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2Ny
aXB0b3IuVFlQRV9CT09MOgotICAgICAgICBmaWVsZF9kZXNjLmRlZmF1bHRfdmFsdWUgPSBmaWVs
ZF9wcm90by5kZWZhdWx0X3ZhbHVlLmxvd2VyKCkgPT0gJ3RydWUnCi0gICAgICBlbGlmIGZpZWxk
X3Byb3RvLnR5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9FTlVNOgotICAg
ICAgICBmaWVsZF9kZXNjLmRlZmF1bHRfdmFsdWUgPSBmaWVsZF9kZXNjLmVudW1fdHlwZS52YWx1
ZXNfYnlfbmFtZVsKLSAgICAgICAgICAgIGZpZWxkX3Byb3RvLmRlZmF1bHRfdmFsdWVdLm51bWJl
cgotICAgICAgZWxpZiBmaWVsZF9wcm90by50eXBlID09IGRlc2NyaXB0b3IuRmllbGREZXNjcmlw
dG9yLlRZUEVfQllURVM6Ci0gICAgICAgIGZpZWxkX2Rlc2MuZGVmYXVsdF92YWx1ZSA9IHRleHRf
ZW5jb2RpbmcuQ1VuZXNjYXBlKAotICAgICAgICAgICAgZmllbGRfcHJvdG8uZGVmYXVsdF92YWx1
ZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgICMgQWxsIG90aGVyIHR5cGVzIGFyZSBvZiB0aGUgImlu
dCIgdHlwZS4KLSAgICAgICAgZmllbGRfZGVzYy5kZWZhdWx0X3ZhbHVlID0gaW50KGZpZWxkX3By
b3RvLmRlZmF1bHRfdmFsdWUpCi0gICAgZWxzZToKLSAgICAgIGZpZWxkX2Rlc2MuaGFzX2RlZmF1
bHRfdmFsdWUgPSBGYWxzZQotICAgICAgaWYgKGZpZWxkX3Byb3RvLnR5cGUgPT0gZGVzY3JpcHRv
ci5GaWVsZERlc2NyaXB0b3IuVFlQRV9ET1VCTEUgb3IKLSAgICAgICAgICBmaWVsZF9wcm90by50
eXBlID09IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfRkxPQVQpOgotICAgICAgICBm
aWVsZF9kZXNjLmRlZmF1bHRfdmFsdWUgPSAwLjAKLSAgICAgIGVsaWYgZmllbGRfcHJvdG8udHlw
ZSA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX1NUUklORzoKLSAgICAgICAgZmll
bGRfZGVzYy5kZWZhdWx0X3ZhbHVlID0gdScnCi0gICAgICBlbGlmIGZpZWxkX3Byb3RvLnR5cGUg
PT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9CT09MOgotICAgICAgICBmaWVsZF9k
ZXNjLmRlZmF1bHRfdmFsdWUgPSBGYWxzZQotICAgICAgZWxpZiBmaWVsZF9wcm90by50eXBlID09
IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfRU5VTToKLSAgICAgICAgZmllbGRfZGVz
Yy5kZWZhdWx0X3ZhbHVlID0gZmllbGRfZGVzYy5lbnVtX3R5cGUudmFsdWVzWzBdLm51bWJlcgot
ICAgICAgZWxpZiBmaWVsZF9wcm90by50eXBlID09IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9y
LlRZUEVfQllURVM6Ci0gICAgICAgIGZpZWxkX2Rlc2MuZGVmYXVsdF92YWx1ZSA9IGInJwotICAg
ICAgZWxzZToKLSAgICAgICAgIyBBbGwgb3RoZXIgdHlwZXMgYXJlIG9mIHRoZSAiaW50IiB0eXBl
LgotICAgICAgICBmaWVsZF9kZXNjLmRlZmF1bHRfdmFsdWUgPSAwCi0KLSAgICBmaWVsZF9kZXNj
LnR5cGUgPSBmaWVsZF9wcm90by50eXBlCi0KLSAgZGVmIF9NYWtlRW51bVZhbHVlRGVzY3JpcHRv
cihzZWxmLCB2YWx1ZV9wcm90bywgaW5kZXgpOgotICAgICIiIkNyZWF0ZXMgYSBlbnVtIHZhbHVl
IGRlc2NyaXB0b3Igb2JqZWN0IGZyb20gYSBlbnVtIHZhbHVlIHByb3RvLgotCi0gICAgQXJnczoK
LSAgICAgIHZhbHVlX3Byb3RvOiBUaGUgcHJvdG8gZGVzY3JpYmluZyB0aGUgZW51bSB2YWx1ZS4K
LSAgICAgIGluZGV4OiBUaGUgaW5kZXggb2YgdGhlIGVudW0gdmFsdWUuCi0KLSAgICBSZXR1cm5z
OgotICAgICAgQW4gaW5pdGlhbGl6ZWQgRW51bVZhbHVlRGVzY3JpcHRvciBvYmplY3QuCi0gICAg
IiIiCi0KLSAgICByZXR1cm4gZGVzY3JpcHRvci5FbnVtVmFsdWVEZXNjcmlwdG9yKAotICAgICAg
ICBuYW1lPXZhbHVlX3Byb3RvLm5hbWUsCi0gICAgICAgIGluZGV4PWluZGV4LAotICAgICAgICBu
dW1iZXI9dmFsdWVfcHJvdG8ubnVtYmVyLAotICAgICAgICBvcHRpb25zPXZhbHVlX3Byb3RvLm9w
dGlvbnMsCi0gICAgICAgIHR5cGU9Tm9uZSkKLQotICBkZWYgX0V4dHJhY3RTeW1ib2xzKHNlbGYs
IGRlc2NyaXB0b3JzKToKLSAgICAiIiJQdWxscyBvdXQgYWxsIHRoZSBzeW1ib2xzIGZyb20gZGVz
Y3JpcHRvciBwcm90b3MuCi0KLSAgICBBcmdzOgotICAgICAgZGVzY3JpcHRvcnM6IFRoZSBtZXNz
YWdlcyB0byBleHRyYWN0IGRlc2NyaXB0b3JzIGZyb20uCi0gICAgWWllbGRzOgotICAgICAgQSB0
d28gZWxlbWVudCB0dXBsZSBvZiB0aGUgdHlwZSBuYW1lIGFuZCBkZXNjcmlwdG9yIG9iamVjdC4K
LSAgICAiIiIKLQotICAgIGZvciBkZXNjIGluIGRlc2NyaXB0b3JzOgotICAgICAgeWllbGQgKF9Q
cmVmaXhXaXRoRG90KGRlc2MuZnVsbF9uYW1lKSwgZGVzYykKLSAgICAgIGZvciBzeW1ib2wgaW4g
c2VsZi5fRXh0cmFjdFN5bWJvbHMoZGVzYy5uZXN0ZWRfdHlwZXMpOgotICAgICAgICB5aWVsZCBz
eW1ib2wKLSAgICAgIGZvciBlbnVtIGluIGRlc2MuZW51bV90eXBlczoKLSAgICAgICAgeWllbGQg
KF9QcmVmaXhXaXRoRG90KGVudW0uZnVsbF9uYW1lKSwgZW51bSkKLQotICBkZWYgX0dldERlcHMo
c2VsZiwgZGVwZW5kZW5jaWVzKToKLSAgICAiIiJSZWN1cnNpdmVseSBmaW5kcyBkZXBlbmRlbmNp
ZXMgZm9yIGZpbGUgcHJvdG9zLgotCi0gICAgQXJnczoKLSAgICAgIGRlcGVuZGVuY2llczogVGhl
IG5hbWVzIG9mIHRoZSBmaWxlcyBiZWluZyBkZXBlbmRlZCBvbi4KLQotICAgIFlpZWxkczoKLSAg
ICAgIEVhY2ggZGlyZWN0IGFuZCBpbmRpcmVjdCBkZXBlbmRlbmN5LgotICAgICIiIgotCi0gICAg
Zm9yIGRlcGVuZGVuY3kgaW4gZGVwZW5kZW5jaWVzOgotICAgICAgZGVwX2Rlc2MgPSBzZWxmLkZp
bmRGaWxlQnlOYW1lKGRlcGVuZGVuY3kpCi0gICAgICB5aWVsZCBkZXBfZGVzYwotICAgICAgZm9y
IHBhcmVudF9kZXAgaW4gZGVwX2Rlc2MuZGVwZW5kZW5jaWVzOgotICAgICAgICB5aWVsZCBwYXJl
bnRfZGVwCi0KLSAgZGVmIF9HZXRUeXBlRnJvbVNjb3BlKHNlbGYsIHBhY2thZ2UsIHR5cGVfbmFt
ZSwgc2NvcGUpOgotICAgICIiIkZpbmRzIGEgZ2l2ZW4gdHlwZSBuYW1lIGluIHRoZSBjdXJyZW50
IHNjb3BlLgotCi0gICAgQXJnczoKLSAgICAgIHBhY2thZ2U6IFRoZSBwYWNrYWdlIHRoZSBwcm90
byBzaG91bGQgYmUgbG9jYXRlZCBpbi4KLSAgICAgIHR5cGVfbmFtZTogVGhlIG5hbWUgb2YgdGhl
IHR5cGUgdG8gYmUgZm91bmQgaW4gdGhlIHNjb3BlLgotICAgICAgc2NvcGU6IERpY3QgbWFwcGlu
ZyBzaG9ydCBhbmQgZnVsbCBzeW1ib2xzIHRvIG1lc3NhZ2UgYW5kIGVudW0gdHlwZXMuCi0KLSAg
ICBSZXR1cm5zOgotICAgICAgVGhlIGRlc2NyaXB0b3IgZm9yIHRoZSByZXF1ZXN0ZWQgdHlwZS4K
LSAgICAiIiIKLSAgICBpZiB0eXBlX25hbWUgbm90IGluIHNjb3BlOgotICAgICAgY29tcG9uZW50
cyA9IF9QcmVmaXhXaXRoRG90KHBhY2thZ2UpLnNwbGl0KCcuJykKLSAgICAgIHdoaWxlIGNvbXBv
bmVudHM6Ci0gICAgICAgIHBvc3NpYmxlX21hdGNoID0gJy4nLmpvaW4oY29tcG9uZW50cyArIFt0
eXBlX25hbWVdKQotICAgICAgICBpZiBwb3NzaWJsZV9tYXRjaCBpbiBzY29wZToKLSAgICAgICAg
ICB0eXBlX25hbWUgPSBwb3NzaWJsZV9tYXRjaAotICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgY29tcG9uZW50cy5wb3AoLTEpCi0gICAgcmV0dXJuIHNjb3BlW3R5cGVf
bmFtZV0KLQotCi1kZWYgX1ByZWZpeFdpdGhEb3QobmFtZSk6Ci0gIHJldHVybiBuYW1lIGlmIG5h
bWUuc3RhcnRzd2l0aCgnLicpIGVsc2UgJy4lcycgJSBuYW1lCi0KLQotaWYgX1VTRV9DX0RFU0NS
SVBUT1JTOgotICAjIFRPRE8oYW1hdXJ5ZmEpOiBUaGlzIHBvb2wgY291bGQgYmUgY29uc3RydWN0
ZWQgZnJvbSBQeXRob24gY29kZSwgd2hlbiB3ZQotICAjIHN1cHBvcnQgYSBmbGFnIGxpa2UgJ3Vz
ZV9jcHBfZ2VuZXJhdGVkX3Bvb2w9VHJ1ZScuCi0gICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3Rl
ZC1hY2Nlc3MKLSAgX0RFRkFVTFQgPSBkZXNjcmlwdG9yLl9tZXNzYWdlLmRlZmF1bHRfcG9vbAot
ZWxzZToKLSAgX0RFRkFVTFQgPSBEZXNjcmlwdG9yUG9vbCgpCi0KLQotZGVmIERlZmF1bHQoKToK
LSAgcmV0dXJuIF9ERUZBVUxUCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50
ZXJuYWwvX19pbml0X18ucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvX19pbml0
X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0Yjhi
MjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9fcGFyYW1l
dGVyaXplZC5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9fcGFyYW1ldGVyaXpl
ZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZGVhM2YxOTk3NWQwMzAwOWYwMjgw
MDZmZGIyYWJkMGZkZjEwMjQyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvX3BhcmFtZXRlcml6ZWQu
cHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NDMgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhv
bgotIwotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0j
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0iIiJBZGRzIHN1cHBvcnQgZm9yIHBhcmFtZXRlcml6ZWQgdGVzdHMgdG8g
UHl0aG9uJ3MgdW5pdHRlc3QgVGVzdENhc2UgY2xhc3MuCi0KLUEgcGFyYW1ldGVyaXplZCB0ZXN0
IGlzIGEgbWV0aG9kIGluIGEgdGVzdCBjYXNlIHRoYXQgaXMgaW52b2tlZCB3aXRoIGRpZmZlcmVu
dAotYXJndW1lbnQgdHVwbGVzLgotCi1BIHNpbXBsZSBleGFtcGxlOgotCi0gIGNsYXNzIEFkZGl0
aW9uRXhhbXBsZShwYXJhbWV0ZXJpemVkLlBhcmFtZXRlcml6ZWRUZXN0Q2FzZSk6Ci0gICAgQHBh
cmFtZXRlcml6ZWQuUGFyYW1ldGVycygKLSAgICAgICAoMSwgMiwgMyksCi0gICAgICAgKDQsIDUs
IDkpLAotICAgICAgICgxLCAxLCAzKSkKLSAgICBkZWYgdGVzdEFkZGl0aW9uKHNlbGYsIG9wMSwg
b3AyLCByZXN1bHQpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIG9wMSArIG9wMikK
LQotCi1FYWNoIGludm9jYXRpb24gaXMgYSBzZXBhcmF0ZSB0ZXN0IGNhc2UgYW5kIHByb3Blcmx5
IGlzb2xhdGVkIGp1c3QKLWxpa2UgYSBub3JtYWwgdGVzdCBtZXRob2QsIHdpdGggaXRzIG93biBz
ZXRVcC90ZWFyRG93biBjeWNsZS4gSW4gdGhlCi1leGFtcGxlIGFib3ZlLCB0aGVyZSBhcmUgdGhy
ZWUgc2VwYXJhdGUgdGVzdGNhc2VzLCBvbmUgb2Ygd2hpY2ggd2lsbAotZmFpbCBkdWUgdG8gYW4g
YXNzZXJ0aW9uIGVycm9yICgxICsgMSAhPSAzKS4KLQotUGFyYW1ldGVycyBmb3IgaW52aWRpZHVh
bCB0ZXN0IGNhc2VzIGNhbiBiZSB0dXBsZXMgKHdpdGggcG9zaXRpb25hbCBwYXJhbWV0ZXJzKQot
b3IgZGljdGlvbmFyaWVzICh3aXRoIG5hbWVkIHBhcmFtZXRlcnMpOgotCi0gIGNsYXNzIEFkZGl0
aW9uRXhhbXBsZShwYXJhbWV0ZXJpemVkLlBhcmFtZXRlcml6ZWRUZXN0Q2FzZSk6Ci0gICAgQHBh
cmFtZXRlcml6ZWQuUGFyYW1ldGVycygKLSAgICAgICB7J29wMSc6IDEsICdvcDInOiAyLCAncmVz
dWx0JzogM30sCi0gICAgICAgeydvcDEnOiA0LCAnb3AyJzogNSwgJ3Jlc3VsdCc6IDl9LAotICAg
ICkKLSAgICBkZWYgdGVzdEFkZGl0aW9uKHNlbGYsIG9wMSwgb3AyLCByZXN1bHQpOgotICAgICAg
c2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIG9wMSArIG9wMikKLQotSWYgYSBwYXJhbWV0ZXJpemVk
IHRlc3QgZmFpbHMsIHRoZSBlcnJvciBtZXNzYWdlIHdpbGwgc2hvdyB0aGUKLW9yaWdpbmFsIHRl
c3QgbmFtZSAod2hpY2ggaXMgbW9kaWZpZWQgaW50ZXJuYWxseSkgYW5kIHRoZSBhcmd1bWVudHMK
LWZvciB0aGUgc3BlY2lmaWMgaW52b2NhdGlvbiwgd2hpY2ggYXJlIHBhcnQgb2YgdGhlIHN0cmlu
ZyByZXR1cm5lZCBieQotdGhlIHNob3J0RGVzY3JpcHRpb24oKSBtZXRob2Qgb24gdGVzdCBjYXNl
cy4KLQotVGhlIGlkIG1ldGhvZCBvZiB0aGUgdGVzdCwgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1
bml0dGVzdCBmcmFtZXdvcmssCi1pcyBhbHNvIG1vZGlmaWVkIHRvIHNob3cgdGhlIGFyZ3VtZW50
cy4gVG8gbWFrZSBzdXJlIHRoYXQgdGVzdCBuYW1lcwotc3RheSB0aGUgc2FtZSBhY3Jvc3Mgc2V2
ZXJhbCBpbnZvY2F0aW9ucywgb2JqZWN0IHJlcHJlc2VudGF0aW9ucyBsaWtlCi0KLSAgPj4+IGNs
YXNzIEZvbyhvYmplY3QpOgotICAuLi4gIHBhc3MKLSAgPj4+IHJlcHIoRm9vKCkpCi0gICc8X19t
YWluX18uRm9vIG9iamVjdCBhdCAweDIzZDg2MTA+JwotCi1hcmUgdHVybmVkIGludG8gJzxfX21h
aW5fXy5Gb28+Jy4gRm9yIGV2ZW4gbW9yZSBkZXNjcmlwdGl2ZSBuYW1lcywKLWVzcGVjaWFsbHkg
aW4gdGVzdCBsb2dzLCB5b3UgY2FuIHVzZSB0aGUgTmFtZWRQYXJhbWV0ZXJzIGRlY29yYXRvci4g
SW4KLXRoaXMgY2FzZSwgb25seSB0dXBsZXMgYXJlIHN1cHBvcnRlZCwgYW5kIHRoZSBmaXJzdCBw
YXJhbWV0ZXJzIGhhcyB0bwotYmUgYSBzdHJpbmcgKG9yIGFuIG9iamVjdCB0aGF0IHJldHVybnMg
YW4gYXB0IG5hbWUgd2hlbiBjb252ZXJ0ZWQgdmlhCi1zdHIoKSk6Ci0KLSAgY2xhc3MgTmFtZWRF
eGFtcGxlKHBhcmFtZXRlcml6ZWQuUGFyYW1ldGVyaXplZFRlc3RDYXNlKToKLSAgICBAcGFyYW1l
dGVyaXplZC5OYW1lZFBhcmFtZXRlcnMoCi0gICAgICAgKCdOb3JtYWwnLCAnYWEnLCAnYWFhJywg
VHJ1ZSksCi0gICAgICAgKCdFbXB0eVByZWZpeCcsICcnLCAnYWJjJywgVHJ1ZSksCi0gICAgICAg
KCdCb3RoRW1wdHknLCAnJywgJycsIFRydWUpKQotICAgIGRlZiB0ZXN0U3RhcnRzV2l0aChzZWxm
LCBwcmVmaXgsIHN0cmluZywgcmVzdWx0KToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0
LCBzdHJpbmdzLnN0YXJ0c3dpdGgocHJlZml4KSkKLQotTmFtZWQgdGVzdHMgYWxzbyBoYXZlIHRo
ZSBiZW5lZml0IHRoYXQgdGhleSBjYW4gYmUgcnVuIGluZGl2aWR1YWxseQotZnJvbSB0aGUgY29t
bWFuZCBsaW5lOgotCi0gICQgdGVzdG1vZHVsZS5weSBOYW1lZEV4YW1wbGUudGVzdFN0YXJ0c1dp
dGhOb3JtYWwKLSAgLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBSYW4gMSB0ZXN0IGluIDAuMDAwcwotCi0g
IE9LCi0KLVBhcmFtZXRlcml6ZWQgQ2xhc3NlcwotPT09PT09PT09PT09PT09PT09PT09Ci1JZiBp
bnZvY2F0aW9uIGFyZ3VtZW50cyBhcmUgc2hhcmVkIGFjcm9zcyB0ZXN0IG1ldGhvZHMgaW4gYSBz
aW5nbGUKLVBhcmFtZXRlcml6ZWRUZXN0Q2FzZSBjbGFzcywgaW5zdGVhZCBvZiBkZWNvcmF0aW5n
IGFsbCB0ZXN0IG1ldGhvZHMKLWluZGl2aWR1YWxseSwgdGhlIGNsYXNzIGl0c2VsZiBjYW4gYmUg
ZGVjb3JhdGVkOgotCi0gIEBwYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMoCi0gICAgKDEsIDIsIDMp
Ci0gICAgKDQsIDUsIDkpKQotICBjbGFzcyBBcml0aG1ldGljVGVzdChwYXJhbWV0ZXJpemVkLlBh
cmFtZXRlcml6ZWRUZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RBZGQoc2VsZiwgYXJnMSwgYXJnMiwg
cmVzdWx0KToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJnMSArIGFyZzIsIHJlc3VsdCkKLQot
ICAgIGRlZiB0ZXN0U3VidHJhY3Qoc2VsZiwgYXJnMiwgYXJnMiwgcmVzdWx0KToKLSAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVzdWx0IC0gYXJnMSwgYXJnMikKLQotSW5wdXRzIGZyb20gSXRlcmFi
bGVzCi09PT09PT09PT09PT09PT09PT09PT0KLUlmIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHNoYXJl
ZCBhY3Jvc3Mgc2V2ZXJhbCB0ZXN0IGNhc2VzLCBvciBhcmUgZHluYW1pY2FsbHkKLWNyZWF0ZWQg
ZnJvbSBvdGhlciBzb3VyY2VzLCBhIHNpbmdsZSBub24tdHVwbGUgaXRlcmFibGUgY2FuIGJlIHBh
c3NlZCBpbnRvCi10aGUgZGVjb3JhdG9yLiBUaGlzIGl0ZXJhYmxlIHdpbGwgYmUgdXNlZCB0byBv
YnRhaW4gdGhlIHRlc3QgY2FzZXM6Ci0KLSAgY2xhc3MgQWRkaXRpb25FeGFtcGxlKHBhcmFtZXRl
cml6ZWQuUGFyYW1ldGVyaXplZFRlc3RDYXNlKToKLSAgICBAcGFyYW1ldGVyaXplZC5QYXJhbWV0
ZXJzKAotICAgICAgYy5vcDEsIGMub3AyLCBjLnJlc3VsdCBmb3IgYyBpbiB0ZXN0Y2FzZXMKLSAg
ICApCi0gICAgZGVmIHRlc3RBZGRpdGlvbihzZWxmLCBvcDEsIG9wMiwgcmVzdWx0KToKLSAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBvcDEgKyBvcDIpCi0KLQotU2luZ2xlLUFyZ3VtZW50
IFRlc3QgTWV0aG9kcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotSWYgYSB0ZXN0IG1l
dGhvZCB0YWtlcyBvbmx5IG9uZSBhcmd1bWVudCwgdGhlIHNpbmdsZSBhcmd1bWVudCBkb2VzIG5v
dCBuZWVkIHRvCi1iZSB3cmFwcGVkIGludG8gYSB0dXBsZToKLQotICBjbGFzcyBOZWdhdGl2ZU51
bWJlckV4YW1wbGUocGFyYW1ldGVyaXplZC5QYXJhbWV0ZXJpemVkVGVzdENhc2UpOgotICAgIEBw
YXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMoCi0gICAgICAgLTEsIC0zLCAtNCwgLTUKLSAgICApCi0g
ICAgZGVmIHRlc3RJc05lZ2F0aXZlKHNlbGYsIGFyZyk6Ci0gICAgICBzZWxmLmFzc2VydFRydWUo
SXNOZWdhdGl2ZShhcmcpKQotIiIiCi0KLV9fYXV0aG9yX18gPSAndG1hcmVrQGdvb2dsZS5jb20g
KFRvcnN0ZW4gTWFyZWspJwotCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBmdW5jdG9vbHMK
LWltcG9ydCByZQotaW1wb3J0IHR5cGVzCi10cnk6Ci0gIGltcG9ydCB1bml0dGVzdDIgYXMgdW5p
dHRlc3QKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdXVp
ZAotCi1pbXBvcnQgc2l4Ci0KLUFERFJfUkUgPSByZS5jb21waWxlKHInXDwoW2EtekEtWjAtOV9c
LVwuXSspIG9iamVjdCBhdCAweFthLWZBLUYwLTldK1w+JykKLV9TRVBBUkFUT1IgPSB1dWlkLnV1
aWQxKCkuaGV4Ci1fRklSU1RfQVJHID0gb2JqZWN0KCkKLV9BUkdVTUVOVF9SRVBSID0gb2JqZWN0
KCkKLQotCi1kZWYgX0NsZWFuUmVwcihvYmopOgotICByZXR1cm4gQUREUl9SRS5zdWIocic8XDE+
JywgcmVwcihvYmopKQotCi0KLSMgSGVscGVyIGZ1bmN0aW9uIGZvcm1lcmx5IGZyb20gdGhlIHVu
aXR0ZXN0IG1vZHVsZSwgcmVtb3ZlZCBmcm9tIGl0IGluCi0jIFB5dGhvbiAyLjcuCi1kZWYgX1N0
ckNsYXNzKGNscyk6Ci0gIHJldHVybiAnJXMuJXMnICUgKGNscy5fX21vZHVsZV9fLCBjbHMuX19u
YW1lX18pCi0KLQotZGVmIF9Ob25TdHJpbmdJdGVyYWJsZShvYmopOgotICByZXR1cm4gKGlzaW5z
dGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSkgYW5kIG5vdAotICAgICAgICAgIGlzaW5z
dGFuY2Uob2JqLCBzaXguc3RyaW5nX3R5cGVzKSkKLQotCi1kZWYgX0Zvcm1hdFBhcmFtZXRlckxp
c3QodGVzdGNhc2VfcGFyYW1zKToKLSAgaWYgaXNpbnN0YW5jZSh0ZXN0Y2FzZV9wYXJhbXMsIGNv
bGxlY3Rpb25zLk1hcHBpbmcpOgotICAgIHJldHVybiAnLCAnLmpvaW4oJyVzPSVzJyAlIChhcmdu
YW1lLCBfQ2xlYW5SZXByKHZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgIGZvciBhcmduYW1l
LCB2YWx1ZSBpbiB0ZXN0Y2FzZV9wYXJhbXMuaXRlbXMoKSkKLSAgZWxpZiBfTm9uU3RyaW5nSXRl
cmFibGUodGVzdGNhc2VfcGFyYW1zKToKLSAgICByZXR1cm4gJywgJy5qb2luKG1hcChfQ2xlYW5S
ZXByLCB0ZXN0Y2FzZV9wYXJhbXMpKQotICBlbHNlOgotICAgIHJldHVybiBfRm9ybWF0UGFyYW1l
dGVyTGlzdCgodGVzdGNhc2VfcGFyYW1zLCkpCi0KLQotY2xhc3MgX1BhcmFtZXRlcml6ZWRUZXN0
SXRlcihvYmplY3QpOgotICAiIiJDYWxsYWJsZSBhbmQgaXRlcmFibGUgY2xhc3MgZm9yIHByb2R1
Y2luZyBuZXcgdGVzdCBjYXNlcy4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9tZXRo
b2QsIHRlc3RjYXNlcywgbmFtaW5nX3R5cGUpOgotICAgICIiIlJldHVybnMgY29uY3JldGUgdGVz
dCBmdW5jdGlvbnMgZm9yIGEgdGVzdCBhbmQgYSBsaXN0IG9mIHBhcmFtZXRlcnMuCi0KLSAgICBU
aGUgbmFtaW5nX3R5cGUgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG5hbWUgb2YgdGhlIGNvbmNy
ZXRlCi0gICAgZnVuY3Rpb25zIGFzIHJlcG9ydGVkIGJ5IHRoZSB1bml0dGVzdCBmcmFtZXdvcmsu
IElmIG5hbWluZ190eXBlIGlzCi0gICAgX0ZJUlNUX0FSRywgdGhlIHRlc3RjYXNlcyBtdXN0IGJl
IHR1cGxlcywgYW5kIHRoZSBmaXJzdCBlbGVtZW50IG11c3QKLSAgICBoYXZlIGEgc3RyaW5nIHJl
cHJlc2VudGF0aW9uIHRoYXQgaXMgYSB2YWxpZCBQeXRob24gaWRlbnRpZmllci4KLQotICAgIEFy
Z3M6Ci0gICAgICB0ZXN0X21ldGhvZDogVGhlIGRlY29yYXRlZCB0ZXN0IG1ldGhvZC4KLSAgICAg
IHRlc3RjYXNlczogKGxpc3Qgb2YgdHVwbGUvZGljdCkgQSBsaXN0IG9mIHBhcmFtZXRlcgotICAg
ICAgICAgICAgICAgICB0dXBsZXMvZGljdHMgZm9yIGluZGl2aWR1YWwgdGVzdCBpbnZvY2F0aW9u
cy4KLSAgICAgIG5hbWluZ190eXBlOiBUaGUgdGVzdCBuYW1pbmcgdHlwZSwgZWl0aGVyIF9OQU1F
RCBvciBfQVJHVU1FTlRfUkVQUi4KLSAgICAiIiIKLSAgICBzZWxmLl90ZXN0X21ldGhvZCA9IHRl
c3RfbWV0aG9kCi0gICAgc2VsZi50ZXN0Y2FzZXMgPSB0ZXN0Y2FzZXMKLSAgICBzZWxmLl9uYW1p
bmdfdHlwZSA9IG5hbWluZ190eXBlCi0KLSAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3
YXJncyk6Ci0gICAgcmFpc2UgUnVudGltZUVycm9yKCdZb3UgYXBwZWFyIHRvIGJlIHJ1bm5pbmcg
YSBwYXJhbWV0ZXJpemVkIHRlc3QgY2FzZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICd3aXRo
b3V0IGhhdmluZyBpbmhlcml0ZWQgZnJvbSBwYXJhbWV0ZXJpemVkLicKLSAgICAgICAgICAgICAg
ICAgICAgICAgJ1BhcmFtZXRlcml6ZWRUZXN0Q2FzZS4gVGhpcyBpcyBiYWQgYmVjYXVzZSBub25l
IG9mICcKLSAgICAgICAgICAgICAgICAgICAgICAgJ3lvdXIgdGVzdCBjYXNlcyBhcmUgYWN0dWFs
bHkgYmVpbmcgcnVuLicpCi0KLSAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgIHRlc3RfbWV0aG9k
ID0gc2VsZi5fdGVzdF9tZXRob2QKLSAgICBuYW1pbmdfdHlwZSA9IHNlbGYuX25hbWluZ190eXBl
Ci0KLSAgICBkZWYgTWFrZUJvdW5kUGFyYW1UZXN0KHRlc3RjYXNlX3BhcmFtcyk6Ci0gICAgICBA
ZnVuY3Rvb2xzLndyYXBzKHRlc3RfbWV0aG9kKQotICAgICAgZGVmIEJvdW5kUGFyYW1UZXN0KHNl
bGYpOgotICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3RjYXNlX3BhcmFtcywgY29sbGVjdGlvbnMu
TWFwcGluZyk6Ci0gICAgICAgICAgdGVzdF9tZXRob2Qoc2VsZiwgKip0ZXN0Y2FzZV9wYXJhbXMp
Ci0gICAgICAgIGVsaWYgX05vblN0cmluZ0l0ZXJhYmxlKHRlc3RjYXNlX3BhcmFtcyk6Ci0gICAg
ICAgICAgdGVzdF9tZXRob2Qoc2VsZiwgKnRlc3RjYXNlX3BhcmFtcykKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICB0ZXN0X21ldGhvZChzZWxmLCB0ZXN0Y2FzZV9wYXJhbXMpCi0KLSAgICAgIGlm
IG5hbWluZ190eXBlIGlzIF9GSVJTVF9BUkc6Ci0gICAgICAgICMgU2lnbmFsIHRoZSBtZXRhY2xh
c3MgdGhhdCB0aGUgbmFtZSBvZiB0aGUgdGVzdCBmdW5jdGlvbiBpcyB1bmlxdWUKLSAgICAgICAg
IyBhbmQgZGVzY3JpcHRpdmUuCi0gICAgICAgIEJvdW5kUGFyYW1UZXN0Ll9feF91c2VfbmFtZV9f
ID0gVHJ1ZQotICAgICAgICBCb3VuZFBhcmFtVGVzdC5fX25hbWVfXyArPSBzdHIodGVzdGNhc2Vf
cGFyYW1zWzBdKQotICAgICAgICB0ZXN0Y2FzZV9wYXJhbXMgPSB0ZXN0Y2FzZV9wYXJhbXNbMTpd
Ci0gICAgICBlbGlmIG5hbWluZ190eXBlIGlzIF9BUkdVTUVOVF9SRVBSOgotICAgICAgICAjIF9f
eF9leHRyYV9pZF9fIGlzIHVzZWQgdG8gcGFzcyBuYW1pbmcgaW5mb3JtYXRpb24gdG8gdGhlIF9f
bmV3X18KLSAgICAgICAgIyBtZXRob2Qgb2YgVGVzdEdlbmVyYXRvck1ldGFjbGFzcy4KLSAgICAg
ICAgIyBUaGUgbWV0YWNsYXNzIHdpbGwgbWFrZSBzdXJlIHRvIGNyZWF0ZSBhIHVuaXF1ZSwgYnV0
IG5vbmRlc2NyaXB0aXZlCi0gICAgICAgICMgbmFtZSBmb3IgdGhpcyB0ZXN0LgotICAgICAgICBC
b3VuZFBhcmFtVGVzdC5fX3hfZXh0cmFfaWRfXyA9ICcoJXMpJyAlICgKLSAgICAgICAgICAgIF9G
b3JtYXRQYXJhbWV0ZXJMaXN0KHRlc3RjYXNlX3BhcmFtcyksKQotICAgICAgZWxzZToKLSAgICAg
ICAgcmFpc2UgUnVudGltZUVycm9yKCclcyBpcyBub3QgYSB2YWxpZCBuYW1pbmcgdHlwZS4nICUg
KG5hbWluZ190eXBlLCkpCi0KLSAgICAgIEJvdW5kUGFyYW1UZXN0Ll9fZG9jX18gPSAnJXMoJXMp
JyAlICgKLSAgICAgICAgICBCb3VuZFBhcmFtVGVzdC5fX25hbWVfXywgX0Zvcm1hdFBhcmFtZXRl
ckxpc3QodGVzdGNhc2VfcGFyYW1zKSkKLSAgICAgIGlmIHRlc3RfbWV0aG9kLl9fZG9jX186Ci0g
ICAgICAgIEJvdW5kUGFyYW1UZXN0Ll9fZG9jX18gKz0gJ1xuJXMnICUgKHRlc3RfbWV0aG9kLl9f
ZG9jX18sKQotICAgICAgcmV0dXJuIEJvdW5kUGFyYW1UZXN0Ci0gICAgcmV0dXJuIChNYWtlQm91
bmRQYXJhbVRlc3QoYykgZm9yIGMgaW4gc2VsZi50ZXN0Y2FzZXMpCi0KLQotZGVmIF9Jc1Npbmds
ZXRvbkxpc3QodGVzdGNhc2VzKToKLSAgIiIiVHJ1ZSBpZmYgdGVzdGNhc2VzIGNvbnRhaW5zIG9u
bHkgYSBzaW5nbGUgbm9uLXR1cGxlIGVsZW1lbnQuIiIiCi0gIHJldHVybiBsZW4odGVzdGNhc2Vz
KSA9PSAxIGFuZCBub3QgaXNpbnN0YW5jZSh0ZXN0Y2FzZXNbMF0sIHR1cGxlKQotCi0KLWRlZiBf
TW9kaWZ5Q2xhc3MoY2xhc3Nfb2JqZWN0LCB0ZXN0Y2FzZXMsIG5hbWluZ190eXBlKToKLSAgYXNz
ZXJ0IG5vdCBnZXRhdHRyKGNsYXNzX29iamVjdCwgJ19pZF9zdWZmaXgnLCBOb25lKSwgKAotICAg
ICAgJ0Nhbm5vdCBhZGQgcGFyYW1ldGVycyB0byAlcywnCi0gICAgICAnIHdoaWNoIGFscmVhZHkg
aGFzIHBhcmFtZXRlcml6ZWQgbWV0aG9kcy4nICUgKGNsYXNzX29iamVjdCwpKQotICBjbGFzc19v
YmplY3QuX2lkX3N1ZmZpeCA9IGlkX3N1ZmZpeCA9IHt9Ci0gICMgV2UgY2hhbmdlIHRoZSBzaXpl
IG9mIF9fZGljdF9fIHdoaWxlIHdlIGl0ZXJhdGUgb3ZlciBpdCwgCi0gICMgd2hpY2ggUHl0aG9u
IDMueCB3aWxsIGNvbXBsYWluIGFib3V0LCBzbyB1c2UgY29weSgpLgotICBmb3IgbmFtZSwgb2Jq
IGluIGNsYXNzX29iamVjdC5fX2RpY3RfXy5jb3B5KCkuaXRlbXMoKToKLSAgICBpZiAobmFtZS5z
dGFydHN3aXRoKHVuaXR0ZXN0LlRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeCkKLSAgICAgICAg
YW5kIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5GdW5jdGlvblR5cGUpKToKLSAgICAgIGRlbGF0dHIo
Y2xhc3Nfb2JqZWN0LCBuYW1lKQotICAgICAgbWV0aG9kcyA9IHt9Ci0gICAgICBfVXBkYXRlQ2xh
c3NEaWN0Rm9yUGFyYW1UZXN0Q2FzZSgKLSAgICAgICAgICBtZXRob2RzLCBpZF9zdWZmaXgsIG5h
bWUsCi0gICAgICAgICAgX1BhcmFtZXRlcml6ZWRUZXN0SXRlcihvYmosIHRlc3RjYXNlcywgbmFt
aW5nX3R5cGUpKQotICAgICAgZm9yIG5hbWUsIG1ldGggaW4gbWV0aG9kcy5pdGVtcygpOgotICAg
ICAgICBzZXRhdHRyKGNsYXNzX29iamVjdCwgbmFtZSwgbWV0aCkKLQotCi1kZWYgX1BhcmFtZXRl
ckRlY29yYXRvcihuYW1pbmdfdHlwZSwgdGVzdGNhc2VzKToKLSAgIiIiSW1wbGVtZW50YXRpb24g
b2YgdGhlIHBhcmFtZXRlcml6YXRpb24gZGVjb3JhdG9ycy4KLQotICBBcmdzOgotICAgIG5hbWlu
Z190eXBlOiBUaGUgbmFtaW5nIHR5cGUuCi0gICAgdGVzdGNhc2VzOiBUZXN0Y2FzZSBwYXJhbWV0
ZXJzLgotCi0gIFJldHVybnM6Ci0gICAgQSBmdW5jdGlvbiBmb3IgbW9kaWZ5aW5nIHRoZSBkZWNv
cmF0ZWQgb2JqZWN0LgotICAiIiIKLSAgZGVmIF9BcHBseShvYmopOgotICAgIGlmIGlzaW5zdGFu
Y2Uob2JqLCB0eXBlKToKLSAgICAgIF9Nb2RpZnlDbGFzcygKLSAgICAgICAgICBvYmosCi0gICAg
ICAgICAgbGlzdCh0ZXN0Y2FzZXMpIGlmIG5vdCBpc2luc3RhbmNlKHRlc3RjYXNlcywgY29sbGVj
dGlvbnMuU2VxdWVuY2UpCi0gICAgICAgICAgZWxzZSB0ZXN0Y2FzZXMsCi0gICAgICAgICAgbmFt
aW5nX3R5cGUpCi0gICAgICByZXR1cm4gb2JqCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBfUGFy
YW1ldGVyaXplZFRlc3RJdGVyKG9iaiwgdGVzdGNhc2VzLCBuYW1pbmdfdHlwZSkKLQotICBpZiBf
SXNTaW5nbGV0b25MaXN0KHRlc3RjYXNlcyk6Ci0gICAgYXNzZXJ0IF9Ob25TdHJpbmdJdGVyYWJs
ZSh0ZXN0Y2FzZXNbMF0pLCAoCi0gICAgICAgICdTaW5nbGUgcGFyYW1ldGVyIGFyZ3VtZW50IG11
c3QgYmUgYSBub24tc3RyaW5nIGl0ZXJhYmxlJykKLSAgICB0ZXN0Y2FzZXMgPSB0ZXN0Y2FzZXNb
MF0KLQotICByZXR1cm4gX0FwcGx5Ci0KLQotZGVmIFBhcmFtZXRlcnMoKnRlc3RjYXNlcyk6Ci0g
ICIiIkEgZGVjb3JhdG9yIGZvciBjcmVhdGluZyBwYXJhbWV0ZXJpemVkIHRlc3RzLgotCi0gIFNl
ZSB0aGUgbW9kdWxlIGRvY3N0cmluZyBmb3IgYSB1c2FnZSBleGFtcGxlLgotICBBcmdzOgotICAg
ICp0ZXN0Y2FzZXM6IFBhcmFtZXRlcnMgZm9yIHRoZSBkZWNvcmF0ZWQgbWV0aG9kLCBlaXRoZXIg
YSBzaW5nbGUKLSAgICAgICAgICAgICAgICBpdGVyYWJsZSwgb3IgYSBsaXN0IG9mIHR1cGxlcy9k
aWN0cy9vYmplY3RzIChmb3IgdGVzdHMKLSAgICAgICAgICAgICAgICB3aXRoIG9ubHkgb25lIGFy
Z3VtZW50KS4KLQotICBSZXR1cm5zOgotICAgICBBIHRlc3QgZ2VuZXJhdG9yIHRvIGJlIGhhbmRs
ZWQgYnkgVGVzdEdlbmVyYXRvck1ldGFjbGFzcy4KLSAgIiIiCi0gIHJldHVybiBfUGFyYW1ldGVy
RGVjb3JhdG9yKF9BUkdVTUVOVF9SRVBSLCB0ZXN0Y2FzZXMpCi0KLQotZGVmIE5hbWVkUGFyYW1l
dGVycygqdGVzdGNhc2VzKToKLSAgIiIiQSBkZWNvcmF0b3IgZm9yIGNyZWF0aW5nIHBhcmFtZXRl
cml6ZWQgdGVzdHMuCi0KLSAgU2VlIHRoZSBtb2R1bGUgZG9jc3RyaW5nIGZvciBhIHVzYWdlIGV4
YW1wbGUuIFRoZSBmaXJzdCBlbGVtZW50IG9mCi0gIGVhY2ggcGFyYW1ldGVyIHR1cGxlIHNob3Vs
ZCBiZSBhIHN0cmluZyBhbmQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUKLSAgbmFtZSBvZiB0aGUg
dGVzdCBtZXRob2QuCi0KLSAgQXJnczoKLSAgICAqdGVzdGNhc2VzOiBQYXJhbWV0ZXJzIGZvciB0
aGUgZGVjb3JhdGVkIG1ldGhvZCwgZWl0aGVyIGEgc2luZ2xlCi0gICAgICAgICAgICAgICAgaXRl
cmFibGUsIG9yIGEgbGlzdCBvZiB0dXBsZXMuCi0KLSAgUmV0dXJuczoKLSAgICAgQSB0ZXN0IGdl
bmVyYXRvciB0byBiZSBoYW5kbGVkIGJ5IFRlc3RHZW5lcmF0b3JNZXRhY2xhc3MuCi0gICIiIgot
ICByZXR1cm4gX1BhcmFtZXRlckRlY29yYXRvcihfRklSU1RfQVJHLCB0ZXN0Y2FzZXMpCi0KLQot
Y2xhc3MgVGVzdEdlbmVyYXRvck1ldGFjbGFzcyh0eXBlKToKLSAgIiIiTWV0YWNsYXNzIGZvciB0
ZXN0IGNhc2VzIHdpdGggdGVzdCBnZW5lcmF0b3JzLgotCi0gIEEgdGVzdCBnZW5lcmF0b3IgaXMg
YW4gaXRlcmFibGUgaW4gYSB0ZXN0Y2FzZSB0aGF0IHByb2R1Y2VzIGNhbGxhYmxlcy4gVGhlc2UK
LSAgY2FsbGFibGVzIG11c3QgYmUgc2luZ2xlLWFyZ3VtZW50IG1ldGhvZHMuIFRoZXNlIG1ldGhv
ZHMgYXJlIGluamVjdGVkIGludG8KLSAgdGhlIGNsYXNzIG5hbWVzcGFjZSBhbmQgdGhlIG9yaWdp
bmFsIGl0ZXJhYmxlIGlzIHJlbW92ZWQuIElmIHRoZSBuYW1lIG9mIHRoZQotICBpdGVyYWJsZSBj
b25mb3JtcyB0byB0aGUgdGVzdCBwYXR0ZXJuLCB0aGUgaW5qZWN0ZWQgbWV0aG9kcyB3aWxsIGJl
IHBpY2tlZAotICB1cCBhcyB0ZXN0cyBieSB0aGUgdW5pdHRlc3QgZnJhbWV3b3JrLgotCi0gIElu
IGdlbmVyYWwsIGl0IGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVjdGlvbiB3aXRoIHRo
ZQotICBQYXJhbWV0ZXJzIGRlY29yYXRvci4KLSAgIiIiCi0KLSAgZGVmIF9fbmV3X18obWNzLCBj
bGFzc19uYW1lLCBiYXNlcywgZGN0KToKLSAgICBkY3RbJ19pZF9zdWZmaXgnXSA9IGlkX3N1ZmZp
eCA9IHt9Ci0gICAgZm9yIG5hbWUsIG9iaiBpbiBkY3QuaXRlbXMoKToKLSAgICAgIGlmIChuYW1l
LnN0YXJ0c3dpdGgodW5pdHRlc3QuVGVzdExvYWRlci50ZXN0TWV0aG9kUHJlZml4KSBhbmQKLSAg
ICAgICAgICBfTm9uU3RyaW5nSXRlcmFibGUob2JqKSk6Ci0gICAgICAgIGl0ZXJhdG9yID0gaXRl
cihvYmopCi0gICAgICAgIGRjdC5wb3AobmFtZSkKLSAgICAgICAgX1VwZGF0ZUNsYXNzRGljdEZv
clBhcmFtVGVzdENhc2UoZGN0LCBpZF9zdWZmaXgsIG5hbWUsIGl0ZXJhdG9yKQotCi0gICAgcmV0
dXJuIHR5cGUuX19uZXdfXyhtY3MsIGNsYXNzX25hbWUsIGJhc2VzLCBkY3QpCi0KLQotZGVmIF9V
cGRhdGVDbGFzc0RpY3RGb3JQYXJhbVRlc3RDYXNlKGRjdCwgaWRfc3VmZml4LCBuYW1lLCBpdGVy
YXRvcik6Ci0gICIiIkFkZHMgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzIHRvIGEgZGljdGlvbmFyeS4K
LQotICBBcmdzOgotICAgIGRjdDogVGhlIHRhcmdldCBkaWN0aW9uYXJ5LgotICAgIGlkX3N1ZmZp
eDogVGhlIGRpY3Rpb25hcnkgZm9yIG1hcHBpbmcgbmFtZXMgdG8gdGVzdCBJRHMuCi0gICAgbmFt
ZTogVGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIHRlc3QgY2FzZS4KLSAgICBpdGVyYXRvcjogVGhl
IGl0ZXJhdG9yIGdlbmVyYXRpbmcgdGhlIGluZGl2aWR1YWwgdGVzdCBjYXNlcy4KLSAgIiIiCi0g
IGZvciBpZHgsIGZ1bmMgaW4gZW51bWVyYXRlKGl0ZXJhdG9yKToKLSAgICBhc3NlcnQgY2FsbGFi
bGUoZnVuYyksICdUZXN0IGdlbmVyYXRvcnMgbXVzdCB5aWVsZCBjYWxsYWJsZXMsIGdvdCAlcicg
JSAoCi0gICAgICAgIGZ1bmMsKQotICAgIGlmIGdldGF0dHIoZnVuYywgJ19feF91c2VfbmFtZV9f
JywgRmFsc2UpOgotICAgICAgbmV3X25hbWUgPSBmdW5jLl9fbmFtZV9fCi0gICAgZWxzZToKLSAg
ICAgIG5ld19uYW1lID0gJyVzJXMlZCcgJSAobmFtZSwgX1NFUEFSQVRPUiwgaWR4KQotICAgIGFz
c2VydCBuZXdfbmFtZSBub3QgaW4gZGN0LCAoCi0gICAgICAgICdOYW1lIG9mIHBhcmFtZXRlcml6
ZWQgdGVzdCBjYXNlICIlcyIgbm90IHVuaXF1ZScgJSAobmV3X25hbWUsKSkKLSAgICBkY3RbbmV3
X25hbWVdID0gZnVuYwotICAgIGlkX3N1ZmZpeFtuZXdfbmFtZV0gPSBnZXRhdHRyKGZ1bmMsICdf
X3hfZXh0cmFfaWRfXycsICcnKQotCi0KLWNsYXNzIFBhcmFtZXRlcml6ZWRUZXN0Q2FzZSh1bml0
dGVzdC5UZXN0Q2FzZSk6Ci0gICIiIkJhc2UgY2xhc3MgZm9yIHRlc3QgY2FzZXMgdXNpbmcgdGhl
IFBhcmFtZXRlcnMgZGVjb3JhdG9yLiIiIgotICBfX21ldGFjbGFzc19fID0gVGVzdEdlbmVyYXRv
ck1ldGFjbGFzcwotCi0gIGRlZiBfT3JpZ2luYWxOYW1lKHNlbGYpOgotICAgIHJldHVybiBzZWxm
Ll90ZXN0TWV0aG9kTmFtZS5zcGxpdChfU0VQQVJBVE9SKVswXQotCi0gIGRlZiBfX3N0cl9fKHNl
bGYpOgotICAgIHJldHVybiAnJXMgKCVzKScgJSAoc2VsZi5fT3JpZ2luYWxOYW1lKCksIF9TdHJD
bGFzcyhzZWxmLl9fY2xhc3NfXykpCi0KLSAgZGVmIGlkKHNlbGYpOiAgIyBweWxpbnQ6IGRpc2Fi
bGU9aW52YWxpZC1uYW1lCi0gICAgIiIiUmV0dXJucyB0aGUgZGVzY3JpcHRpdmUgSUQgb2YgdGhl
IHRlc3QuCi0KLSAgICBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgdW5pdHRlc3Rpbmcg
ZnJhbWV3b3JrIHRvIGdldCBhIG5hbWUKLSAgICBmb3IgdGhlIHRlc3QgdG8gYmUgdXNlZCBpbiBy
ZXBvcnRzLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSB0ZXN0IGlkLgotICAgICIiIgotICAg
IHJldHVybiAnJXMuJXMlcycgJSAoX1N0ckNsYXNzKHNlbGYuX19jbGFzc19fKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX09yaWdpbmFsTmFtZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5faWRfc3VmZml4LmdldChzZWxmLl90ZXN0TWV0aG9kTmFtZSwgJycpKQotCi0K
LWRlZiBDb29wUGFyYW1ldGVyaXplZFRlc3RDYXNlKG90aGVyX2Jhc2VfY2xhc3MpOgotICAiIiJS
ZXR1cm5zIGEgbmV3IGJhc2UgY2xhc3Mgd2l0aCBhIGNvb3BlcmF0aXZlIG1ldGFjbGFzcyBiYXNl
LgotCi0gIFRoaXMgZW5hYmxlcyB0aGUgUGFyYW1ldGVyaXplZFRlc3RDYXNlIHRvIGJlIHVzZWQg
aW4gY29tYmluYXRpb24KLSAgd2l0aCBvdGhlciBiYXNlIGNsYXNzZXMgdGhhdCBoYXZlIGN1c3Rv
bSBtZXRhY2xhc3Nlcywgc3VjaCBhcwotICBtb3guTW94VGVzdEJhc2UuCi0KLSAgT25seSB3b3Jr
cyB3aXRoIG1ldGFjbGFzc2VzIHRoYXQgZG8gbm90IG92ZXJyaWRlIHR5cGUuX19uZXdfXy4KLQot
ICBFeGFtcGxlOgotCi0gICAgaW1wb3J0IGdvb2dsZTMKLSAgICBpbXBvcnQgbW94Ci0KLSAgICBm
cm9tIGdvb2dsZTMudGVzdGluZy5weWJhc2UgaW1wb3J0IHBhcmFtZXRlcml6ZWQKLQotICAgIGNs
YXNzIEV4YW1wbGVUZXN0KHBhcmFtZXRlcml6ZWQuQ29vcFBhcmFtZXRlcml6ZWRUZXN0Q2FzZSht
b3guTW94VGVzdEJhc2UpKToKLSAgICAgIC4uLgotCi0gIEFyZ3M6Ci0gICAgb3RoZXJfYmFzZV9j
bGFzczogKGNsYXNzKSBBIHRlc3QgY2FzZSBiYXNlIGNsYXNzLgotCi0gIFJldHVybnM6Ci0gICAg
QSBuZXcgY2xhc3Mgb2JqZWN0LgotICAiIiIKLSAgbWV0YWNsYXNzID0gdHlwZSgKLSAgICAgICdD
b29wTWV0YWNsYXNzJywKLSAgICAgIChvdGhlcl9iYXNlX2NsYXNzLl9fbWV0YWNsYXNzX18sCi0g
ICAgICAgVGVzdEdlbmVyYXRvck1ldGFjbGFzcyksIHt9KQotICByZXR1cm4gbWV0YWNsYXNzKAot
ICAgICAgJ0Nvb3BQYXJhbWV0ZXJpemVkVGVzdENhc2UnLAotICAgICAgKG90aGVyX2Jhc2VfY2xh
c3MsIFBhcmFtZXRlcml6ZWRUZXN0Q2FzZSksIHt9KQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xl
L3Byb3RvYnVmL2ludGVybmFsL2FueV90ZXN0LnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVm
L2ludGVybmFsL2FueV90ZXN0LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
ZDY0MWNhMGI4ZWZhYWI0ZDYwNzY3ZjM1OTQ5MDk0NmY5MDQwMGZiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRl
cm5hbC9hbnlfdGVzdC5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGppZWx1b0Bnb29nbGUu
Y29tIChKaWUgTHVvKQotCi1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBnb29nbGUucHJv
dG9idWYuaW50ZXJuYWw7Ci0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90byI7Ci0K
LW1lc3NhZ2UgVGVzdEFueSB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5BbnkgdmFsdWUgPSAxOwotICBp
bnQzMiBpbnRfdmFsdWUgPSAyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVm
L2ludGVybmFsL2FwaV9pbXBsZW1lbnRhdGlvbi5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9p
bnRlcm5hbC9hcGlfaW1wbGVtZW50YXRpb24uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDZkYjEyZThkYzY3NjU3OTY1NzEwM2UzMjc0OTU0MjJmOTRiODA3YTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVm
L2ludGVybmFsL2FwaV9pbXBsZW1lbnRhdGlvbi5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyOSAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPFB5
dGhvbi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1l
c3BhY2UgcHl0aG9uIHsKLQotLy8gVmVyc2lvbiBjb25zdGFudC4KLS8vIFRoaXMgaXMgZWl0aGVy
IDAgZm9yIHB5dGhvbiwgMSBmb3IgQ1BQIFYxLCAyIGZvciBDUFAgVjIuCi0vLwotLy8gMCBpcyBk
ZWZhdWx0IGFuZCBpcyBlcXVpdmFsZW50IHRvCi0vLyAgIFBST1RPQ09MX0JVRkZFUlNfUFlUSE9O
X0lNUExFTUVOVEFUSU9OPXB5dGhvbgotLy8KLS8vIDEgaXMgc2V0IHdpdGggLURQWVRIT05fUFJP
VE8yX0NQUF9JTVBMX1YxIGFuZCBpcyBlcXVpdmFsZW50IHRvCi0vLyAgIFBST1RPQ09MX0JVRkZF
UlNfUFlUSE9OX0lNUExFTUVOVEFUSU9OPWNwcAotLy8gYW5kCi0vLyAgIFBST1RPQ09MX0JVRkZF
UlNfUFlUSE9OX0lNUExFTUVOVEFUSU9OX1ZFUlNJT049MQotLy8KLS8vIDIgaXMgc2V0IHdpdGgg
LURQWVRIT05fUFJPVE8yX0NQUF9JTVBMX1YyIGFuZCBpcyBlcXVpdmFsZW50IHRvCi0vLyAgIFBS
T1RPQ09MX0JVRkZFUlNfUFlUSE9OX0lNUExFTUVOVEFUSU9OPWNwcAotLy8gYW5kCi0vLyAgIFBS
T1RPQ09MX0JVRkZFUlNfUFlUSE9OX0lNUExFTUVOVEFUSU9OX1ZFUlNJT049MgotI2lmZGVmIFBZ
VEhPTl9QUk9UTzJfQ1BQX0lNUExfVjEKLSNlcnJvciAiUFlUSE9OX1BST1RPMl9DUFBfSU1QTF9W
MSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIKLSNlbHNlCi0jaWZkZWYgUFlUSE9OX1BST1RPMl9D
UFBfSU1QTF9WMgotc3RhdGljIGludCBrSW1wbFZlcnNpb24gPSAyOwotI2Vsc2UKLSNpZmRlZiBQ
WVRIT05fUFJPVE8yX1BZVEhPTl9JTVBMCi1zdGF0aWMgaW50IGtJbXBsVmVyc2lvbiA9IDA7Ci0j
ZWxzZQotCi1zdGF0aWMgaW50IGtJbXBsVmVyc2lvbiA9IC0xOyAgLy8gLTEgbWVhbnMgIlVuc3Bl
Y2lmaWVkIGJ5IGNvbXBpbGVyIGZsYWdzIi4KLQotI2VuZGlmICAvLyBQWVRIT05fUFJPVE8yX1BZ
VEhPTl9JTVBMCi0jZW5kaWYgIC8vIFBZVEhPTl9QUk9UTzJfQ1BQX0lNUExfVjIKLSNlbmRpZiAg
Ly8gUFlUSE9OX1BST1RPMl9DUFBfSU1QTF9WMQotCi1zdGF0aWMgY29uc3QgY2hhcioga0ltcGxW
ZXJzaW9uTmFtZSA9ICJhcGlfdmVyc2lvbiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrTW9kdWxl
TmFtZSA9ICJfYXBpX2ltcGxlbWVudGF0aW9uIjsKLXN0YXRpYyBjb25zdCBjaGFyIGtNb2R1bGVE
b2NzdHJpbmdbXSA9Ci0iX2FwaV9pbXBsZW1lbnRhdGlvbiBpcyBhIG1vZHVsZSB0aGF0IGV4cG9z
ZXMgY29tcGlsZS10aW1lIGNvbnN0YW50cyB0aGF0XG4iCi0iZGV0ZXJtaW5lIHRoZSBkZWZhdWx0
IEFQSSBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9yIFB5dGhvbiBwcm90bzIuXG4iCi0iXG4iCi0i
SXQgY29tcGxlbWVudHMgYXBpX2ltcGxlbWVudGF0aW9uLnB5IGJ5IHNldHRpbmcgZGVmYXVsdHMg
dXNpbmcgY29tcGlsZS10aW1lXG4iCi0iY29uc3RhbnRzIGRlZmluZWQgaW4gQywgc3VjaCB0aGF0
IG9uZSBjYW4gc2V0IGRlZmF1bHRzIGF0IGNvbXBpbGF0aW9uXG4iCi0iKGUuZy4gd2l0aCBibGF6
ZSBmbGFnIC0tY29wdD0tRFBZVEhPTl9QUk9UTzJfQ1BQX0lNUExfVjIpLiI7Ci0KLSNpZiBQWV9N
QUpPUl9WRVJTSU9OID49IDMKLXN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX21vZHVsZSA9IHsK
LSAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICBrTW9kdWxlTmFtZSwKLSAga01vZHVsZURvY3N0
cmluZywKLSAgLTEsCi0gIE5VTEwsCi0gIE5VTEwsCi0gIE5VTEwsCi0gIE5VTEwsCi0gIE5VTEwK
LX07Ci0jZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9fYXBpX2ltcGxlbWVudGF0aW9uCi0jZGVmaW5l
IElOSVRGVU5DX0VSUk9SVkFMIE5VTEwKLSNlbHNlCi0jZGVmaW5lIElOSVRGVU5DIGluaXRfYXBp
X2ltcGxlbWVudGF0aW9uCi0jZGVmaW5lIElOSVRGVU5DX0VSUk9SVkFMCi0jZW5kaWYKLQotZXh0
ZXJuICJDIiB7Ci0gIFB5TU9ESU5JVF9GVU5DIElOSVRGVU5DKCkgewotI2lmIFBZX01BSk9SX1ZF
UlNJT04gPj0gMwotICAgIFB5T2JqZWN0ICptb2R1bGUgPSBQeU1vZHVsZV9DcmVhdGUoJl9tb2R1
bGUpOwotI2Vsc2UKLSAgICBQeU9iamVjdCAqbW9kdWxlID0gUHlfSW5pdE1vZHVsZTMoCi0gICAg
ICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KGtNb2R1bGVOYW1lKSwKLSAgICAgICAgTlVMTCwKLSAgICAg
ICAgY29uc3RfY2FzdDxjaGFyKj4oa01vZHVsZURvY3N0cmluZykpOwotI2VuZGlmCi0gICAgaWYg
KG1vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gSU5JVEZVTkNfRVJST1JWQUw7Ci0gICAg
fQotCi0gICAgLy8gQWRkcyB0aGUgbW9kdWxlIHZhcmlhYmxlICJhcGlfdmVyc2lvbiIuCi0gICAg
aWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KAotICAgICAgICBtb2R1bGUsCi0gICAgICAgIGNv
bnN0X2Nhc3Q8Y2hhcio+KGtJbXBsVmVyc2lvbk5hbWUpLAotICAgICAgICBrSW1wbFZlcnNpb24p
KQotI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0gICAgICByZXR1cm47Ci0jZWxzZQotICAgICAg
eyBQeV9ERUNSRUYobW9kdWxlKTsgcmV0dXJuIE5VTEw7IH0KLQotICAgIHJldHVybiBtb2R1bGU7
Ci0jZW5kaWYKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgcHl0aG9uCi19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dv
b2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9hcGlfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29n
bGUvcHJvdG9idWYvaW50ZXJuYWwvYXBpX2ltcGxlbWVudGF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCA0NjBhNGE2YzJjOGNkYWI2ZDE0MmNlNWJhNmIzOWVkNjk2ZDY5NzU4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dv
b2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9hcGlfaW1wbGVtZW50YXRpb24ucHkKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTMgKzAsMCBAQAotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0
cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJEZXRlcm1pbmUgd2hpY2ggaW1wbGVtZW50
YXRpb24gb2YgdGhlIHByb3RvYnVmIEFQSSBpcyB1c2VkIGluIHRoaXMgcHJvY2Vzcy4KLSIiIgot
Ci1pbXBvcnQgb3MKLWltcG9ydCB3YXJuaW5ncwotaW1wb3J0IHN5cwotCi10cnk6Ci0gICMgcHls
aW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKLSAgZnJvbSBnb29nbGUucHJvdG9idWYu
aW50ZXJuYWwgaW1wb3J0IF9hcGlfaW1wbGVtZW50YXRpb24KLSAgIyBUaGUgY29tcGlsZS10aW1l
IGNvbnN0YW50cyBpbiB0aGUgX2FwaV9pbXBsZW1lbnRhdGlvbiBtb2R1bGUgY2FuIGJlIHVzZWQg
dG8KLSAgIyBzd2l0Y2ggdG8gYSBjZXJ0YWluIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQeXRob24g
QVBJIGF0IGJ1aWxkIHRpbWUuCi0gIF9hcGlfdmVyc2lvbiA9IF9hcGlfaW1wbGVtZW50YXRpb24u
YXBpX3ZlcnNpb24KLSAgX3Byb3RvX2V4dGVuc2lvbl9tb2R1bGVzX2V4aXN0X2luX2J1aWxkID0g
VHJ1ZQotZXhjZXB0IEltcG9ydEVycm9yOgotICBfYXBpX3ZlcnNpb24gPSAtMSAgIyBVbnNwZWNp
ZmllZCBieSBjb21waWxlciBmbGFncy4KLSAgX3Byb3RvX2V4dGVuc2lvbl9tb2R1bGVzX2V4aXN0
X2luX2J1aWxkID0gRmFsc2UKLQotaWYgX2FwaV92ZXJzaW9uID09IDE6Ci0gIHJhaXNlIFZhbHVl
RXJyb3IoJ2FwaV92ZXJzaW9uPTEgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKQotaWYgX2FwaV92
ZXJzaW9uIDwgMDogICMgU3RpbGwgdW5zcGVjaWZpZWQ/Ci0gIHRyeToKLSAgICAjIFRoZSBwcmVz
ZW5jZSBvZiB0aGlzIG1vZHVsZSBpbiBhIGJ1aWxkIGFsbG93cyB0aGUgcHJvdG8gaW1wbGVtZW50
YXRpb24gdG8KLSAgICAjIGJlIHVwZ3JhZGVkIG1lcmVseSB2aWEgYnVpbGQgZGVwcyByYXRoZXIg
dGhhbiBhIGNvbXBpbGVyIGZsYWcgb3IgdGhlCi0gICAgIyBydW50aW1lIGVudmlyb25tZW50IHZh
cmlhYmxlLgotICAgICMgcHlsaW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKLSAgICBm
cm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgX3VzZV9mYXN0X2NwcF9wcm90b3MKLSAgICAjIFdv
cmsgYXJvdW5kIGEga25vd24gaXNzdWUgaW4gdGhlIGNsYXNzaWMgYm9vdHN0cmFwIC5wYXIgaW1w
b3J0IGhvb2suCi0gICAgaWYgbm90IF91c2VfZmFzdF9jcHBfcHJvdG9zOgotICAgICAgcmFpc2Ug
SW1wb3J0RXJyb3IoJ191c2VfZmFzdF9jcHBfcHJvdG9zIGltcG9ydCBzdWNjZWVkZWQgYnV0IHdh
cyBOb25lJykKLSAgICBkZWwgX3VzZV9mYXN0X2NwcF9wcm90b3MKLSAgICBfYXBpX3ZlcnNpb24g
PSAyCi0gIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpZiBfcHJvdG9fZXh0ZW5zaW9uX21vZHVs
ZXNfZXhpc3RfaW5fYnVpbGQ6Ci0gICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDM6ICAj
IFB5dGhvbiAzIGRlZmF1bHRzIHRvIEMrKyBpbXBsIHYyLgotICAgICAgICBfYXBpX3ZlcnNpb24g
PSAyCi0gICAgICAjIFRPRE8oYi8xNzQyNzQ4Nik6IE1ha2UgUHl0aG9uIDIgZGVmYXVsdCB0byBD
KysgaW1wbCB2Mi4KLQotX2RlZmF1bHRfaW1wbGVtZW50YXRpb25fdHlwZSA9ICgKLSAgICAncHl0
aG9uJyBpZiBfYXBpX3ZlcnNpb24gPD0gMCBlbHNlICdjcHAnKQotCi0jIFRoaXMgZW52aXJvbm1l
bnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gc3dpdGNoIHRvIGEgY2VydGFpbiBpbXBsZW1lbnRh
dGlvbgotIyBvZiB0aGUgUHl0aG9uIEFQSSwgb3ZlcnJpZGluZyB0aGUgY29tcGlsZS10aW1lIGNv
bnN0YW50cyBpbiB0aGUKLSMgX2FwaV9pbXBsZW1lbnRhdGlvbiBtb2R1bGUuIFJpZ2h0IG5vdyBv
bmx5ICdweXRob24nIGFuZCAnY3BwJyBhcmUgdmFsaWQKLSMgdmFsdWVzLiBBbnkgb3RoZXIgdmFs
dWUgd2lsbCBiZSBpZ25vcmVkLgotX2ltcGxlbWVudGF0aW9uX3R5cGUgPSBvcy5nZXRlbnYoJ1BS
T1RPQ09MX0JVRkZFUlNfUFlUSE9OX0lNUExFTUVOVEFUSU9OJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9kZWZhdWx0X2ltcGxlbWVudGF0aW9uX3R5cGUpCi0KLWlmIF9pbXBs
ZW1lbnRhdGlvbl90eXBlICE9ICdweXRob24nOgotICBfaW1wbGVtZW50YXRpb25fdHlwZSA9ICdj
cHAnCi0KLWlmICdQeVB5JyBpbiBzeXMudmVyc2lvbiBhbmQgX2ltcGxlbWVudGF0aW9uX3R5cGUg
PT0gJ2NwcCc6Ci0gIHdhcm5pbmdzLndhcm4oJ1B5UHkgZG9lcyBub3Qgd29yayB5ZXQgd2l0aCBj
cHAgcHJvdG9jb2wgYnVmZmVycy4gJwotICAgICAgICAgICAgICAgICdGYWxsaW5nIGJhY2sgdG8g
dGhlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbi4nKQotICBfaW1wbGVtZW50YXRpb25fdHlwZSA9ICdw
eXRob24nCi0KLSMgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBzd2l0
Y2ggYmV0d2VlbiB0aGUgdHdvCi0jICdjcHAnIGltcGxlbWVudGF0aW9ucywgb3ZlcnJpZGluZyB0
aGUgY29tcGlsZS10aW1lIGNvbnN0YW50cyBpbiB0aGUKLSMgX2FwaV9pbXBsZW1lbnRhdGlvbiBt
b2R1bGUuIFJpZ2h0IG5vdyBvbmx5ICcyJyBpcyBzdXBwb3J0ZWQuIEFueSBvdGhlcgotIyB2YWx1
ZSB3aWxsIGNhdXNlIGFuIGVycm9yIHRvIGJlIHJhaXNlZC4KLV9pbXBsZW1lbnRhdGlvbl92ZXJz
aW9uX3N0ciA9IG9zLmdldGVudigKLSAgICAnUFJPVE9DT0xfQlVGRkVSU19QWVRIT05fSU1QTEVN
RU5UQVRJT05fVkVSU0lPTicsICcyJykKLQotaWYgX2ltcGxlbWVudGF0aW9uX3ZlcnNpb25fc3Ry
ICE9ICcyJzoKLSAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICd1bnN1cHBvcnRlZCBQUk9UT0NP
TF9CVUZGRVJTX1BZVEhPTl9JTVBMRU1FTlRBVElPTl9WRVJTSU9OOiAiJyArCi0gICAgICBfaW1w
bGVtZW50YXRpb25fdmVyc2lvbl9zdHIgKyAnIiAoc3VwcG9ydGVkIHZlcnNpb25zOiAyKScKLSAg
ICAgICkKLQotX2ltcGxlbWVudGF0aW9uX3ZlcnNpb24gPSBpbnQoX2ltcGxlbWVudGF0aW9uX3Zl
cnNpb25fc3RyKQotCi0KLSMgVXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBkaXNjb3VyYWdlZC4g
Q2xpZW50cyBzaG91bGRuJ3QgY2FyZSB3aGljaAotIyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJ
IGlzIGluIHVzZS4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGd1YXJhbnRlZQotIyB0aGF0IGRpZmZl
cmVuY2VzIGJldHdlZW4gQVBJcyB3aWxsIGJlIG1haW50YWluZWQuCi0jIFBsZWFzZSBkb24ndCB1
c2UgdGhpcyBmdW5jdGlvbiBpZiBwb3NzaWJsZS4KLWRlZiBUeXBlKCk6Ci0gIHJldHVybiBfaW1w
bGVtZW50YXRpb25fdHlwZQotCi0KLSMgU2VlIGNvbW1lbnQgb24gJ1R5cGUnIGFib3ZlLgotZGVm
IFZlcnNpb24oKToKLSAgcmV0dXJuIF9pbXBsZW1lbnRhdGlvbl92ZXJzaW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvY29udGFpbmVycy5weSBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dv
b2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9jb250YWluZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCA5N2NkZDg0OGUzNGQ4ZGE0MDgzYWJiNTEyYjc0MDM2ODZkZGVjOTFmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9w
cm90b2J1Zi9pbnRlcm5hbC9jb250YWluZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjExICsw
LDAgQEAKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotIiIiQ29udGFpbnMgY29udGFpbmVyIGNsYXNzZXMgdG8gcmVwcmVzZW50
IGRpZmZlcmVudCBwcm90b2NvbCBidWZmZXIgdHlwZXMuCi0KLVRoaXMgZmlsZSBkZWZpbmVzIGNv
bnRhaW5lciBjbGFzc2VzIHdoaWNoIHJlcHJlc2VudCBjYXRlZ29yaWVzIG9mIHByb3RvY29sCi1i
dWZmZXIgZmllbGQgdHlwZXMgd2hpY2ggbmVlZCBleHRyYSBtYWludGVuYW5jZS4gQ3VycmVudGx5
IHRoZXNlIGNhdGVnb3JpZXMKLWFyZToKLSAgLSBSZXBlYXRlZCBzY2FsYXIgZmllbGRzIC0gVGhl
c2UgYXJlIGFsbCByZXBlYXRlZCBmaWVsZHMgd2hpY2ggYXJlbid0Ci0gICAgY29tcG9zaXRlIChl
LmcuIHRoZXkgYXJlIG9mIHNpbXBsZSB0eXBlcyBsaWtlIGludDMyLCBzdHJpbmcsIGV0YykuCi0g
IC0gUmVwZWF0ZWQgY29tcG9zaXRlIGZpZWxkcyAtIFJlcGVhdGVkIGZpZWxkcyB3aGljaCBhcmUg
Y29tcG9zaXRlLiBUaGlzCi0gICAgaW5jbHVkZXMgZ3JvdXBzIGFuZCBuZXN0ZWQgbWVzc2FnZXMu
Ci0iIiIKLQotX19hdXRob3JfXyA9ICdwZXRhckBnb29nbGUuY29tIChQZXRhciBQZXRyb3YpJwot
Ci1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBzeXMKLQotaWYgc3lzLnZlcnNpb25faW5mb1sw
XSA8IDM6Ci0gICMgV2Ugd291bGQgdXNlIGNvbGxlY3Rpb25zLk11dGFibGVNYXBwaW5nIGFsbCB0
aGUgdGltZSwgYnV0IGluIFB5dGhvbiAyIGl0Ci0gICMgZG9lc24ndCBkZWZpbmUgX19zbG90c19f
LiAgVGhpcyBjYXVzZXMgdHdvIHNpZ25pZmljYW50IHByb2JsZW1zOgotICAjCi0gICMgMS4gd2Ug
Y2FuJ3QgZGlzYWxsb3cgYXJiaXRyYXJ5IGF0dHJpYnV0ZSBhc3NpZ25tZW50LCBldmVuIGlmIG91
ciBkZXJpdmVkCi0gICMgICAgY2xhc3NlcyAqZG8qIGRlZmluZSBfX3Nsb3RzX18uCi0gICMKLSAg
IyAyLiB3ZSBjYW4ndCBzYWZlbHkgZGVyaXZlIGEgQyB0eXBlIGZyb20gaXQgd2l0aG91dCBfX3Ns
b3RzX18gZGVmaW5lZCAodGhlCi0gICMgICAgaW50ZXJwcmV0ZXIgZXhwZWN0cyB0byBmaW5kIGEg
ZGljdCBhdCB0cF9kaWN0b2Zmc2V0LCB3aGljaCB3ZSBjYW4ndAotICAjICAgIHJvYnVzdGx5IHBy
b3ZpZGUuICBBbmQgd2UgZG9uJ3Qgd2FudCBhbiBpbnN0YW5jZSBkaWN0IGFueXdheS4KLSAgIwot
ICAjIFNvIHRoaXMgaXMgdGhlIFB5dGhvbiAyLjcgZGVmaW5pdGlvbiBvZiBNYXBwaW5nL011dGFi
bGVNYXBwaW5nIGZ1bmN0aW9ucwotICAjIHZlcmJhdGltLCBleGNlcHQgdGhhdDoKLSAgIyAxLiBX
ZSBkZWNsYXJlIF9fc2xvdHNfXy4KLSAgIyAyLiBXZSBkb24ndCBkZWNsYXJlIHRoaXMgYXMgYSB2
aXJ0dWFsIGJhc2UgY2xhc3MuICBUaGUgY2xhc3NlcyBkZWZpbmVkCi0gICMgICAgaW4gY29sbGVj
dGlvbnMgYXJlIHRoZSBpbnRlcmVzdGluZyBiYXNlIGNsYXNzZXMsIG5vdCB1cy4KLSAgIwotICAj
IE5vdGU6IGRlcml2aW5nIGZyb20gb2JqZWN0IGlzIGNyaXRpY2FsLiAgSXQgaXMgdGhlIG9ubHkg
dGhpbmcgdGhhdCBtYWtlcwotICAjIHRoaXMgYSB0cnVlIHR5cGUsIGFsbG93aW5nIHVzIHRvIGRl
cml2ZSBmcm9tIGl0IGluIEMrKyBjbGVhbmx5IGFuZCBtYWtpbmcKLSAgIyBfX3Nsb3RzX18gcHJv
cGVybHkgZGlzYWxsb3cgYXJiaXRyYXJ5IGVsZW1lbnQgYXNzaWdubWVudC4KLQotICBjbGFzcyBN
YXBwaW5nKG9iamVjdCk6Ci0gICAgX19zbG90c19fID0gKCkKLQotICAgIGRlZiBnZXQoc2VsZiwg
a2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgdHJ5OgotICAgICAgICByZXR1cm4gc2VsZltrZXld
Ci0gICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLSAgICBk
ZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6Ci0gICAgICB0cnk6Ci0gICAgICAgIHNlbGZba2V5
XQotICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgIGVs
c2U6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgaXRlcmtleXMoc2VsZik6Ci0gICAg
ICByZXR1cm4gaXRlcihzZWxmKQotCi0gICAgZGVmIGl0ZXJ2YWx1ZXMoc2VsZik6Ci0gICAgICBm
b3Iga2V5IGluIHNlbGY6Ci0gICAgICAgIHlpZWxkIHNlbGZba2V5XQotCi0gICAgZGVmIGl0ZXJp
dGVtcyhzZWxmKToKLSAgICAgIGZvciBrZXkgaW4gc2VsZjoKLSAgICAgICAgeWllbGQgKGtleSwg
c2VsZltrZXldKQotCi0gICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICByZXR1cm4gbGlzdChzZWxm
KQotCi0gICAgZGVmIGl0ZW1zKHNlbGYpOgotICAgICAgcmV0dXJuIFsoa2V5LCBzZWxmW2tleV0p
IGZvciBrZXkgaW4gc2VsZl0KLQotICAgIGRlZiB2YWx1ZXMoc2VsZik6Ci0gICAgICByZXR1cm4g
W3NlbGZba2V5XSBmb3Iga2V5IGluIHNlbGZdCi0KLSAgICAjIE1hcHBpbmdzIGFyZSBub3QgaGFz
aGFibGUgYnkgZGVmYXVsdCwgYnV0IHN1YmNsYXNzZXMgY2FuIGNoYW5nZSB0aGlzCi0gICAgX19o
YXNoX18gPSBOb25lCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgIGlmIG5v
dCBpc2luc3RhbmNlKG90aGVyLCBjb2xsZWN0aW9ucy5NYXBwaW5nKToKLSAgICAgICAgcmV0dXJu
IE5vdEltcGxlbWVudGVkCi0gICAgICByZXR1cm4gZGljdChzZWxmLml0ZW1zKCkpID09IGRpY3Qo
b3RoZXIuaXRlbXMoKSkKLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgcmV0
dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotICBjbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5n
KToKLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgX19tYXJrZXIgPSBvYmplY3QoKQotCi0gICAg
ZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgotICAgICAgdHJ5OgotICAgICAg
ICB2YWx1ZSA9IHNlbGZba2V5XQotICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICBpZiBk
ZWZhdWx0IGlzIHNlbGYuX19tYXJrZXI6Ci0gICAgICAgICAgcmFpc2UKLSAgICAgICAgcmV0dXJu
IGRlZmF1bHQKLSAgICAgIGVsc2U6Ci0gICAgICAgIGRlbCBzZWxmW2tleV0KLSAgICAgICAgcmV0
dXJuIHZhbHVlCi0KLSAgICBkZWYgcG9waXRlbShzZWxmKToKLSAgICAgIHRyeToKLSAgICAgICAg
a2V5ID0gbmV4dChpdGVyKHNlbGYpKQotICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAg
ICAgIHJhaXNlIEtleUVycm9yCi0gICAgICB2YWx1ZSA9IHNlbGZba2V5XQotICAgICAgZGVsIHNl
bGZba2V5XQotICAgICAgcmV0dXJuIGtleSwgdmFsdWUKLQotICAgIGRlZiBjbGVhcihzZWxmKToK
LSAgICAgIHRyeToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICBzZWxmLnBvcGl0ZW0o
KQotICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdXBkYXRl
KCphcmdzLCAqKmt3ZHMpOgotICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKLSAgICAgICAgcmFpc2Ug
VHlwZUVycm9yKCJ1cGRhdGUoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICh7fSBnaXZlbikiLmZvcm1hdChsZW4oYXJncykp
KQotICAgICAgZWxpZiBub3QgYXJnczoKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1cGRhdGUo
KSB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50ICgwIGdpdmVuKSIpCi0gICAgICBzZWxmID0gYXJn
c1swXQotICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKLQot
ICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6Ci0gICAgICAgIGZvciBrZXkgaW4g
b3RoZXI6Ci0gICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQotICAgICAgZWxpZiBoYXNh
dHRyKG90aGVyLCAia2V5cyIpOgotICAgICAgICBmb3Iga2V5IGluIG90aGVyLmtleXMoKToKLSAg
ICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCi0gICAgICBlbHNlOgotICAgICAgICBmb3Ig
a2V5LCB2YWx1ZSBpbiBvdGhlcjoKLSAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotICAgICAg
Zm9yIGtleSwgdmFsdWUgaW4ga3dkcy5pdGVtcygpOgotICAgICAgICBzZWxmW2tleV0gPSB2YWx1
ZQotCi0gICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAg
dHJ5OgotICAgICAgICByZXR1cm4gc2VsZltrZXldCi0gICAgICBleGNlcHQgS2V5RXJyb3I6Ci0g
ICAgICAgIHNlbGZba2V5XSA9IGRlZmF1bHQKLSAgICAgIHJldHVybiBkZWZhdWx0Ci0KLSAgY29s
bGVjdGlvbnMuTWFwcGluZy5yZWdpc3RlcihNYXBwaW5nKQotICBjb2xsZWN0aW9ucy5NdXRhYmxl
TWFwcGluZy5yZWdpc3RlcihNdXRhYmxlTWFwcGluZykKLQotZWxzZToKLSAgIyBJbiBQeXRob24g
MyB3ZSBjYW4ganVzdCB1c2UgTXV0YWJsZU1hcHBpbmcgZGlyZWN0bHksIGJlY2F1c2UgaXQgZGVm
aW5lcwotICAjIF9fc2xvdHNfXy4KLSAgTXV0YWJsZU1hcHBpbmcgPSBjb2xsZWN0aW9ucy5NdXRh
YmxlTWFwcGluZwotCi0KLWNsYXNzIEJhc2VDb250YWluZXIob2JqZWN0KToKLQotICAiIiJCYXNl
IGNvbnRhaW5lciBjbGFzcy4iIiIKLQotICAjIE1pbmltaXplcyBtZW1vcnkgdXNhZ2UgYW5kIGRp
c2FsbG93cyBhc3NpZ25tZW50IHRvIG90aGVyIGF0dHJpYnV0ZXMuCi0gIF9fc2xvdHNfXyA9IFsn
X21lc3NhZ2VfbGlzdGVuZXInLCAnX3ZhbHVlcyddCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG1l
c3NhZ2VfbGlzdGVuZXIpOgotICAgICIiIgotICAgIEFyZ3M6Ci0gICAgICBtZXNzYWdlX2xpc3Rl
bmVyOiBBIE1lc3NhZ2VMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgVGhlIFJlcGVh
dGVkU2NhbGFyRmllbGRDb250YWluZXIgd2lsbCBjYWxsIHRoaXMgb2JqZWN0J3MKLSAgICAgICAg
TW9kaWZpZWQoKSBtZXRob2Qgd2hlbiBpdCBpcyBtb2RpZmllZC4KLSAgICAiIiIKLSAgICBzZWxm
Ll9tZXNzYWdlX2xpc3RlbmVyID0gbWVzc2FnZV9saXN0ZW5lcgotICAgIHNlbGYuX3ZhbHVlcyA9
IFtdCi0KLSAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgIiIiUmV0cmlldmVzIGl0
ZW0gYnkgdGhlIHNwZWNpZmllZCBrZXkuIiIiCi0gICAgcmV0dXJuIHNlbGYuX3ZhbHVlc1trZXld
Ci0KLSAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIGluIHRoZSBjb250YWluZXIuIiIiCi0gICAgcmV0dXJuIGxlbihzZWxmLl92YWx1ZXMp
Ci0KLSAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgIiIiQ2hlY2tzIGlmIGFub3RoZXIg
aW5zdGFuY2UgaXNuJ3QgZXF1YWwgdG8gdGhpcyBvbmUuIiIiCi0gICAgIyBUaGUgY29uY3JldGUg
Y2xhc3NlcyBzaG91bGQgZGVmaW5lIF9fZXFfXy4KLSAgICByZXR1cm4gbm90IHNlbGYgPT0gb3Ro
ZXIKLQotICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgcmFpc2UgVHlwZUVycm9yKCd1bmhhc2hh
YmxlIG9iamVjdCcpCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgIHJldHVybiByZXByKHNl
bGYuX3ZhbHVlcykKLQotICBkZWYgc29ydChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICMg
Q29udGludWUgdG8gc3VwcG9ydCB0aGUgb2xkIHNvcnRfZnVuY3Rpb24ga2V5d29yZCBhcmd1bWVu
dC4KLSAgICAjIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYSByYXJlIG9jY3VycmVuY2UsIHNvIHVz
ZSBMQllMIHRvIGF2b2lkCi0gICAgIyB0aGUgb3ZlcmhlYWQgb2YgYWN0dWFsbHkgY2F0Y2hpbmcg
S2V5RXJyb3IuCi0gICAgaWYgJ3NvcnRfZnVuY3Rpb24nIGluIGt3YXJnczoKLSAgICAgIGt3YXJn
c1snY21wJ10gPSBrd2FyZ3MucG9wKCdzb3J0X2Z1bmN0aW9uJykKLSAgICBzZWxmLl92YWx1ZXMu
c29ydCgqYXJncywgKiprd2FyZ3MpCi0KLQotY2xhc3MgUmVwZWF0ZWRTY2FsYXJGaWVsZENvbnRh
aW5lcihCYXNlQ29udGFpbmVyKToKLQotICAiIiJTaW1wbGUsIHR5cGUtY2hlY2tlZCwgbGlzdC1s
aWtlIGNvbnRhaW5lciBmb3IgaG9sZGluZyByZXBlYXRlZCBzY2FsYXJzLiIiIgotCi0gICMgRGlz
YWxsb3dzIGFzc2lnbm1lbnQgdG8gb3RoZXIgYXR0cmlidXRlcy4KLSAgX19zbG90c19fID0gWydf
dHlwZV9jaGVja2VyJ10KLQotICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZV9saXN0ZW5lciwg
dHlwZV9jaGVja2VyKToKLSAgICAiIiIKLSAgICBBcmdzOgotICAgICAgbWVzc2FnZV9saXN0ZW5l
cjogQSBNZXNzYWdlTGlzdGVuZXIgaW1wbGVtZW50YXRpb24uCi0gICAgICAgIFRoZSBSZXBlYXRl
ZFNjYWxhckZpZWxkQ29udGFpbmVyIHdpbGwgY2FsbCB0aGlzIG9iamVjdCdzCi0gICAgICAgIE1v
ZGlmaWVkKCkgbWV0aG9kIHdoZW4gaXQgaXMgbW9kaWZpZWQuCi0gICAgICB0eXBlX2NoZWNrZXI6
IEEgdHlwZV9jaGVja2Vycy5WYWx1ZUNoZWNrZXIgaW5zdGFuY2UgdG8gcnVuIG9uIGVsZW1lbnRz
Ci0gICAgICAgIGluc2VydGVkIGludG8gdGhpcyBjb250YWluZXIuCi0gICAgIiIiCi0gICAgc3Vw
ZXIoUmVwZWF0ZWRTY2FsYXJGaWVsZENvbnRhaW5lciwgc2VsZikuX19pbml0X18obWVzc2FnZV9s
aXN0ZW5lcikKLSAgICBzZWxmLl90eXBlX2NoZWNrZXIgPSB0eXBlX2NoZWNrZXIKLQotICBkZWYg
YXBwZW5kKHNlbGYsIHZhbHVlKToKLSAgICAiIiJBcHBlbmRzIGFuIGl0ZW0gdG8gdGhlIGxpc3Qu
IFNpbWlsYXIgdG8gbGlzdC5hcHBlbmQoKS4iIiIKLSAgICBzZWxmLl92YWx1ZXMuYXBwZW5kKHNl
bGYuX3R5cGVfY2hlY2tlci5DaGVja1ZhbHVlKHZhbHVlKSkKLSAgICBpZiBub3Qgc2VsZi5fbWVz
c2FnZV9saXN0ZW5lci5kaXJ0eToKLSAgICAgIHNlbGYuX21lc3NhZ2VfbGlzdGVuZXIuTW9kaWZp
ZWQoKQotCi0gIGRlZiBpbnNlcnQoc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgIiIiSW5zZXJ0cyB0
aGUgaXRlbSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiBTaW1pbGFyIHRvIGxpc3QuaW5zZXJ0
KCkuIiIiCi0gICAgc2VsZi5fdmFsdWVzLmluc2VydChrZXksIHNlbGYuX3R5cGVfY2hlY2tlci5D
aGVja1ZhbHVlKHZhbHVlKSkKLSAgICBpZiBub3Qgc2VsZi5fbWVzc2FnZV9saXN0ZW5lci5kaXJ0
eToKLSAgICAgIHNlbGYuX21lc3NhZ2VfbGlzdGVuZXIuTW9kaWZpZWQoKQotCi0gIGRlZiBleHRl
bmQoc2VsZiwgZWxlbV9zZXEpOgotICAgICIiIkV4dGVuZHMgYnkgYXBwZW5kaW5nIHRoZSBnaXZl
biBpdGVyYWJsZS4gU2ltaWxhciB0byBsaXN0LmV4dGVuZCgpLiIiIgotCi0gICAgaWYgZWxlbV9z
ZXEgaXMgTm9uZToKLSAgICAgIHJldHVybgotICAgIHRyeToKLSAgICAgIGVsZW1fc2VxX2l0ZXIg
PSBpdGVyKGVsZW1fc2VxKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICBpZiBub3QgZWxl
bV9zZXE6Ci0gICAgICAgICMgc2lsZW50bHkgaWdub3JlIGZhbHN5IGlucHV0cyA6LS8uCi0gICAg
ICAgICMgVE9ETyhwdHVja2VyKTogRGVwcmVjYXRlIHRoaXMgYmVoYXZpb3IuIGIvMTg0MTM4NjIK
LSAgICAgICAgcmV0dXJuCi0gICAgICByYWlzZQotCi0gICAgbmV3X3ZhbHVlcyA9IFtzZWxmLl90
eXBlX2NoZWNrZXIuQ2hlY2tWYWx1ZShlbGVtKSBmb3IgZWxlbSBpbiBlbGVtX3NlcV9pdGVyXQot
ICAgIGlmIG5ld192YWx1ZXM6Ci0gICAgICBzZWxmLl92YWx1ZXMuZXh0ZW5kKG5ld192YWx1ZXMp
Ci0gICAgICBzZWxmLl9tZXNzYWdlX2xpc3RlbmVyLk1vZGlmaWVkKCkKLQotICBkZWYgTWVyZ2VG
cm9tKHNlbGYsIG90aGVyKToKLSAgICAiIiJBcHBlbmRzIHRoZSBjb250ZW50cyBvZiBhbm90aGVy
IHJlcGVhdGVkIGZpZWxkIG9mIHRoZSBzYW1lIHR5cGUgdG8gdGhpcwotICAgIG9uZS4gV2UgZG8g
bm90IGNoZWNrIHRoZSB0eXBlcyBvZiB0aGUgaW5kaXZpZHVhbCBmaWVsZHMuCi0gICAgIiIiCi0g
ICAgc2VsZi5fdmFsdWVzLmV4dGVuZChvdGhlci5fdmFsdWVzKQotICAgIHNlbGYuX21lc3NhZ2Vf
bGlzdGVuZXIuTW9kaWZpZWQoKQotCi0gIGRlZiByZW1vdmUoc2VsZiwgZWxlbSk6Ci0gICAgIiIi
UmVtb3ZlcyBhbiBpdGVtIGZyb20gdGhlIGxpc3QuIFNpbWlsYXIgdG8gbGlzdC5yZW1vdmUoKS4i
IiIKLSAgICBzZWxmLl92YWx1ZXMucmVtb3ZlKGVsZW0pCi0gICAgc2VsZi5fbWVzc2FnZV9saXN0
ZW5lci5Nb2RpZmllZCgpCi0KLSAgZGVmIHBvcChzZWxmLCBrZXk9LTEpOgotICAgICIiIlJlbW92
ZXMgYW5kIHJldHVybnMgYW4gaXRlbSBhdCBhIGdpdmVuIGluZGV4LiBTaW1pbGFyIHRvIGxpc3Qu
cG9wKCkuIiIiCi0gICAgdmFsdWUgPSBzZWxmLl92YWx1ZXNba2V5XQotICAgIHNlbGYuX19kZWxp
dGVtX18oa2V5KQotICAgIHJldHVybiB2YWx1ZQotCi0gIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBr
ZXksIHZhbHVlKToKLSAgICAiIiJTZXRzIHRoZSBpdGVtIG9uIHRoZSBzcGVjaWZpZWQgcG9zaXRp
b24uIiIiCi0gICAgaWYgaXNpbnN0YW5jZShrZXksIHNsaWNlKTogICMgUFkzCi0gICAgICBpZiBr
ZXkuc3RlcCBpcyBub3QgTm9uZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXh0ZW5kZWQg
c2xpY2VzIG5vdCBzdXBwb3J0ZWQnKQotICAgICAgc2VsZi5fX3NldHNsaWNlX18oa2V5LnN0YXJ0
LCBrZXkuc3RvcCwgdmFsdWUpCi0gICAgZWxzZToKLSAgICAgIHNlbGYuX3ZhbHVlc1trZXldID0g
c2VsZi5fdHlwZV9jaGVja2VyLkNoZWNrVmFsdWUodmFsdWUpCi0gICAgICBzZWxmLl9tZXNzYWdl
X2xpc3RlbmVyLk1vZGlmaWVkKCkKLQotICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIHN0YXJ0LCBz
dG9wKToKLSAgICAiIiJSZXRyaWV2ZXMgdGhlIHN1YnNldCBvZiBpdGVtcyBmcm9tIGJldHdlZW4g
dGhlIHNwZWNpZmllZCBpbmRpY2VzLiIiIgotICAgIHJldHVybiBzZWxmLl92YWx1ZXNbc3RhcnQ6
c3RvcF0KLQotICBkZWYgX19zZXRzbGljZV9fKHNlbGYsIHN0YXJ0LCBzdG9wLCB2YWx1ZXMpOgot
ICAgICIiIlNldHMgdGhlIHN1YnNldCBvZiBpdGVtcyBmcm9tIGJldHdlZW4gdGhlIHNwZWNpZmll
ZCBpbmRpY2VzLiIiIgotICAgIG5ld192YWx1ZXMgPSBbXQotICAgIGZvciB2YWx1ZSBpbiB2YWx1
ZXM6Ci0gICAgICBuZXdfdmFsdWVzLmFwcGVuZChzZWxmLl90eXBlX2NoZWNrZXIuQ2hlY2tWYWx1
ZSh2YWx1ZSkpCi0gICAgc2VsZi5fdmFsdWVzW3N0YXJ0OnN0b3BdID0gbmV3X3ZhbHVlcwotICAg
IHNlbGYuX21lc3NhZ2VfbGlzdGVuZXIuTW9kaWZpZWQoKQotCi0gIGRlZiBfX2RlbGl0ZW1fXyhz
ZWxmLCBrZXkpOgotICAgICIiIkRlbGV0ZXMgdGhlIGl0ZW0gYXQgdGhlIHNwZWNpZmllZCBwb3Np
dGlvbi4iIiIKLSAgICBkZWwgc2VsZi5fdmFsdWVzW2tleV0KLSAgICBzZWxmLl9tZXNzYWdlX2xp
c3RlbmVyLk1vZGlmaWVkKCkKLQotICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIHN0YXJ0LCBzdG9w
KToKLSAgICAiIiJEZWxldGVzIHRoZSBzdWJzZXQgb2YgaXRlbXMgZnJvbSBiZXR3ZWVuIHRoZSBz
cGVjaWZpZWQgaW5kaWNlcy4iIiIKLSAgICBkZWwgc2VsZi5fdmFsdWVzW3N0YXJ0OnN0b3BdCi0g
ICAgc2VsZi5fbWVzc2FnZV9saXN0ZW5lci5Nb2RpZmllZCgpCi0KLSAgZGVmIF9fZXFfXyhzZWxm
LCBvdGhlcik6Ci0gICAgIiIiQ29tcGFyZXMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugd2l0aCBhbm90
aGVyIG9uZS4iIiIKLSAgICBpZiBzZWxmIGlzIG90aGVyOgotICAgICAgcmV0dXJuIFRydWUKLSAg
ICAjIFNwZWNpYWwgY2FzZSBmb3IgdGhlIHNhbWUgdHlwZSB3aGljaCBzaG91bGQgYmUgY29tbW9u
IGFuZCBmYXN0LgotICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKLSAg
ICAgIHJldHVybiBvdGhlci5fdmFsdWVzID09IHNlbGYuX3ZhbHVlcwotICAgICMgV2UgYXJlIHBy
ZXN1bWFibHkgY29tcGFyaW5nIGFnYWluc3Qgc29tZSBvdGhlciBzZXF1ZW5jZSB0eXBlLgotICAg
IHJldHVybiBvdGhlciA9PSBzZWxmLl92YWx1ZXMKLQotY29sbGVjdGlvbnMuTXV0YWJsZVNlcXVl
bmNlLnJlZ2lzdGVyKEJhc2VDb250YWluZXIpCi0KLQotY2xhc3MgUmVwZWF0ZWRDb21wb3NpdGVG
aWVsZENvbnRhaW5lcihCYXNlQ29udGFpbmVyKToKLQotICAiIiJTaW1wbGUsIGxpc3QtbGlrZSBj
b250YWluZXIgZm9yIGhvbGRpbmcgcmVwZWF0ZWQgY29tcG9zaXRlIGZpZWxkcy4iIiIKLQotICAj
IERpc2FsbG93cyBhc3NpZ25tZW50IHRvIG90aGVyIGF0dHJpYnV0ZXMuCi0gIF9fc2xvdHNfXyA9
IFsnX21lc3NhZ2VfZGVzY3JpcHRvciddCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2Vf
bGlzdGVuZXIsIG1lc3NhZ2VfZGVzY3JpcHRvcik6Ci0gICAgIiIiCi0gICAgTm90ZSB0aGF0IHdl
IHBhc3MgaW4gYSBkZXNjcmlwdG9yIGluc3RlYWQgb2YgdGhlIGdlbmVyYXRlZCBkaXJlY3RseSwK
LSAgICBzaW5jZSBhdCB0aGUgdGltZSB3ZSBjb25zdHJ1Y3QgYSBfUmVwZWF0ZWRDb21wb3NpdGVG
aWVsZENvbnRhaW5lciB3ZQotICAgIGhhdmVuJ3QgeWV0IG5lY2Vzc2FyaWx5IGluaXRpYWxpemVk
IHRoZSB0eXBlIHRoYXQgd2lsbCBiZSBjb250YWluZWQgaW4gdGhlCi0gICAgY29udGFpbmVyLgot
Ci0gICAgQXJnczoKLSAgICAgIG1lc3NhZ2VfbGlzdGVuZXI6IEEgTWVzc2FnZUxpc3RlbmVyIGlt
cGxlbWVudGF0aW9uLgotICAgICAgICBUaGUgUmVwZWF0ZWRDb21wb3NpdGVGaWVsZENvbnRhaW5l
ciB3aWxsIGNhbGwgdGhpcyBvYmplY3QncwotICAgICAgICBNb2RpZmllZCgpIG1ldGhvZCB3aGVu
IGl0IGlzIG1vZGlmaWVkLgotICAgICAgbWVzc2FnZV9kZXNjcmlwdG9yOiBBIERlc2NyaXB0b3Ig
aW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgcHJvdG9jb2wgdHlwZQotICAgICAgICB0aGF0IHNob3Vs
ZCBiZSBwcmVzZW50IGluIHRoaXMgY29udGFpbmVyLiAgV2UnbGwgdXNlIHRoZQotICAgICAgICBf
Y29uY3JldGVfY2xhc3MgZmllbGQgb2YgdGhpcyBkZXNjcmlwdG9yIHdoZW4gdGhlIGNsaWVudCBj
YWxscyBhZGQoKS4KLSAgICAiIiIKLSAgICBzdXBlcihSZXBlYXRlZENvbXBvc2l0ZUZpZWxkQ29u
dGFpbmVyLCBzZWxmKS5fX2luaXRfXyhtZXNzYWdlX2xpc3RlbmVyKQotICAgIHNlbGYuX21lc3Nh
Z2VfZGVzY3JpcHRvciA9IG1lc3NhZ2VfZGVzY3JpcHRvcgotCi0gIGRlZiBhZGQoc2VsZiwgKipr
d2FyZ3MpOgotICAgICIiIkFkZHMgYSBuZXcgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0
IGFuZCByZXR1cm5zIGl0LiBLZXl3b3JkCi0gICAgYXJndW1lbnRzIG1heSBiZSB1c2VkIHRvIGlu
aXRpYWxpemUgdGhlIGVsZW1lbnQuCi0gICAgIiIiCi0gICAgbmV3X2VsZW1lbnQgPSBzZWxmLl9t
ZXNzYWdlX2Rlc2NyaXB0b3IuX2NvbmNyZXRlX2NsYXNzKCoqa3dhcmdzKQotICAgIG5ld19lbGVt
ZW50Ll9TZXRMaXN0ZW5lcihzZWxmLl9tZXNzYWdlX2xpc3RlbmVyKQotICAgIHNlbGYuX3ZhbHVl
cy5hcHBlbmQobmV3X2VsZW1lbnQpCi0gICAgaWYgbm90IHNlbGYuX21lc3NhZ2VfbGlzdGVuZXIu
ZGlydHk6Ci0gICAgICBzZWxmLl9tZXNzYWdlX2xpc3RlbmVyLk1vZGlmaWVkKCkKLSAgICByZXR1
cm4gbmV3X2VsZW1lbnQKLQotICBkZWYgZXh0ZW5kKHNlbGYsIGVsZW1fc2VxKToKLSAgICAiIiJF
eHRlbmRzIGJ5IGFwcGVuZGluZyB0aGUgZ2l2ZW4gc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2YgdGhl
IHNhbWUgdHlwZQotICAgIGFzIHRoaXMgb25lLCBjb3B5aW5nIGVhY2ggaW5kaXZpZHVhbCBtZXNz
YWdlLgotICAgICIiIgotICAgIG1lc3NhZ2VfY2xhc3MgPSBzZWxmLl9tZXNzYWdlX2Rlc2NyaXB0
b3IuX2NvbmNyZXRlX2NsYXNzCi0gICAgbGlzdGVuZXIgPSBzZWxmLl9tZXNzYWdlX2xpc3RlbmVy
Ci0gICAgdmFsdWVzID0gc2VsZi5fdmFsdWVzCi0gICAgZm9yIG1lc3NhZ2UgaW4gZWxlbV9zZXE6
Ci0gICAgICBuZXdfZWxlbWVudCA9IG1lc3NhZ2VfY2xhc3MoKQotICAgICAgbmV3X2VsZW1lbnQu
X1NldExpc3RlbmVyKGxpc3RlbmVyKQotICAgICAgbmV3X2VsZW1lbnQuTWVyZ2VGcm9tKG1lc3Nh
Z2UpCi0gICAgICB2YWx1ZXMuYXBwZW5kKG5ld19lbGVtZW50KQotICAgIGxpc3RlbmVyLk1vZGlm
aWVkKCkKLQotICBkZWYgTWVyZ2VGcm9tKHNlbGYsIG90aGVyKToKLSAgICAiIiJBcHBlbmRzIHRo
ZSBjb250ZW50cyBvZiBhbm90aGVyIHJlcGVhdGVkIGZpZWxkIG9mIHRoZSBzYW1lIHR5cGUgdG8g
dGhpcwotICAgIG9uZSwgY29weWluZyBlYWNoIGluZGl2aWR1YWwgbWVzc2FnZS4KLSAgICAiIiIK
LSAgICBzZWxmLmV4dGVuZChvdGhlci5fdmFsdWVzKQotCi0gIGRlZiByZW1vdmUoc2VsZiwgZWxl
bSk6Ci0gICAgIiIiUmVtb3ZlcyBhbiBpdGVtIGZyb20gdGhlIGxpc3QuIFNpbWlsYXIgdG8gbGlz
dC5yZW1vdmUoKS4iIiIKLSAgICBzZWxmLl92YWx1ZXMucmVtb3ZlKGVsZW0pCi0gICAgc2VsZi5f
bWVzc2FnZV9saXN0ZW5lci5Nb2RpZmllZCgpCi0KLSAgZGVmIHBvcChzZWxmLCBrZXk9LTEpOgot
ICAgICIiIlJlbW92ZXMgYW5kIHJldHVybnMgYW4gaXRlbSBhdCBhIGdpdmVuIGluZGV4LiBTaW1p
bGFyIHRvIGxpc3QucG9wKCkuIiIiCi0gICAgdmFsdWUgPSBzZWxmLl92YWx1ZXNba2V5XQotICAg
IHNlbGYuX19kZWxpdGVtX18oa2V5KQotICAgIHJldHVybiB2YWx1ZQotCi0gIGRlZiBfX2dldHNs
aWNlX18oc2VsZiwgc3RhcnQsIHN0b3ApOgotICAgICIiIlJldHJpZXZlcyB0aGUgc3Vic2V0IG9m
IGl0ZW1zIGZyb20gYmV0d2VlbiB0aGUgc3BlY2lmaWVkIGluZGljZXMuIiIiCi0gICAgcmV0dXJu
IHNlbGYuX3ZhbHVlc1tzdGFydDpzdG9wXQotCi0gIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkp
OgotICAgICIiIkRlbGV0ZXMgdGhlIGl0ZW0gYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4iIiIK
LSAgICBkZWwgc2VsZi5fdmFsdWVzW2tleV0KLSAgICBzZWxmLl9tZXNzYWdlX2xpc3RlbmVyLk1v
ZGlmaWVkKCkKLQotICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIHN0YXJ0LCBzdG9wKToKLSAgICAi
IiJEZWxldGVzIHRoZSBzdWJzZXQgb2YgaXRlbXMgZnJvbSBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQg
aW5kaWNlcy4iIiIKLSAgICBkZWwgc2VsZi5fdmFsdWVzW3N0YXJ0OnN0b3BdCi0gICAgc2VsZi5f
bWVzc2FnZV9saXN0ZW5lci5Nb2RpZmllZCgpCi0KLSAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6
Ci0gICAgIiIiQ29tcGFyZXMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugd2l0aCBhbm90aGVyIG9uZS4i
IiIKLSAgICBpZiBzZWxmIGlzIG90aGVyOgotICAgICAgcmV0dXJuIFRydWUKLSAgICBpZiBub3Qg
aXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgotICAgICAgcmFpc2UgVHlwZUVycm9y
KCdDYW4gb25seSBjb21wYXJlIHJlcGVhdGVkIGNvbXBvc2l0ZSBmaWVsZHMgYWdhaW5zdCAnCi0g
ICAgICAgICAgICAgICAgICAgICAgJ290aGVyIHJlcGVhdGVkIGNvbXBvc2l0ZSBmaWVsZHMuJykK
LSAgICByZXR1cm4gc2VsZi5fdmFsdWVzID09IG90aGVyLl92YWx1ZXMKLQotCi1jbGFzcyBTY2Fs
YXJNYXAoTXV0YWJsZU1hcHBpbmcpOgotCi0gICIiIlNpbXBsZSwgdHlwZS1jaGVja2VkLCBkaWN0
LWxpa2UgY29udGFpbmVyIGZvciBob2xkaW5nIHJlcGVhdGVkIHNjYWxhcnMuIiIiCi0KLSAgIyBE
aXNhbGxvd3MgYXNzaWdubWVudCB0byBvdGhlciBhdHRyaWJ1dGVzLgotICBfX3Nsb3RzX18gPSBb
J19rZXlfY2hlY2tlcicsICdfdmFsdWVfY2hlY2tlcicsICdfdmFsdWVzJywgJ19tZXNzYWdlX2xp
c3RlbmVyJ10KLQotICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZV9saXN0ZW5lciwga2V5X2No
ZWNrZXIsIHZhbHVlX2NoZWNrZXIpOgotICAgICIiIgotICAgIEFyZ3M6Ci0gICAgICBtZXNzYWdl
X2xpc3RlbmVyOiBBIE1lc3NhZ2VMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgVGhl
IFNjYWxhck1hcCB3aWxsIGNhbGwgdGhpcyBvYmplY3QncyBNb2RpZmllZCgpIG1ldGhvZCB3aGVu
IGl0Ci0gICAgICAgIGlzIG1vZGlmaWVkLgotICAgICAga2V5X2NoZWNrZXI6IEEgdHlwZV9jaGVj
a2Vycy5WYWx1ZUNoZWNrZXIgaW5zdGFuY2UgdG8gcnVuIG9uIGtleXMKLSAgICAgICAgaW5zZXJ0
ZWQgaW50byB0aGlzIGNvbnRhaW5lci4KLSAgICAgIHZhbHVlX2NoZWNrZXI6IEEgdHlwZV9jaGVj
a2Vycy5WYWx1ZUNoZWNrZXIgaW5zdGFuY2UgdG8gcnVuIG9uIHZhbHVlcwotICAgICAgICBpbnNl
cnRlZCBpbnRvIHRoaXMgY29udGFpbmVyLgotICAgICIiIgotICAgIHNlbGYuX21lc3NhZ2VfbGlz
dGVuZXIgPSBtZXNzYWdlX2xpc3RlbmVyCi0gICAgc2VsZi5fa2V5X2NoZWNrZXIgPSBrZXlfY2hl
Y2tlcgotICAgIHNlbGYuX3ZhbHVlX2NoZWNrZXIgPSB2YWx1ZV9jaGVja2VyCi0gICAgc2VsZi5f
dmFsdWVzID0ge30KLQotICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKLSAgICB0cnk6Ci0g
ICAgICByZXR1cm4gc2VsZi5fdmFsdWVzW2tleV0KLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAg
ICBrZXkgPSBzZWxmLl9rZXlfY2hlY2tlci5DaGVja1ZhbHVlKGtleSkKLSAgICAgIHZhbCA9IHNl
bGYuX3ZhbHVlX2NoZWNrZXIuRGVmYXVsdFZhbHVlKCkKLSAgICAgIHNlbGYuX3ZhbHVlc1trZXld
ID0gdmFsCi0gICAgICByZXR1cm4gdmFsCi0KLSAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVt
KToKLSAgICAjIFdlIGNoZWNrIHRoZSBrZXkncyB0eXBlIHRvIG1hdGNoIHRoZSBzdHJvbmctdHlw
aW5nIGZsYXZvciBvZiB0aGUgQVBJLgotICAgICMgQWxzbyB0aGlzIG1ha2VzIGl0IGVhc2llciB0
byBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbi4KLSAgICBzZWxm
Ll9rZXlfY2hlY2tlci5DaGVja1ZhbHVlKGl0ZW0pCi0gICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5f
dmFsdWVzCi0KLSAgIyBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgZXhwbGljaXRseSwgYmVjYXVz
ZSBvdXIgZGVmYXVsdGRpY3QtbGlrZSBiZWhhdmlvcgotICAjIHdpbGwgbWFrZSB0aGUgZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbiAoZnJvbSBvdXIgYmFzZSBjbGFzcykgYWx3YXlzIGluc2VydAotICAj
IHRoZSBrZXkuCi0gIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgIGlmIGtl
eSBpbiBzZWxmOgotICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgIGVsc2U6Ci0gICAgICByZXR1
cm4gZGVmYXVsdAotCi0gIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICBj
aGVja2VkX2tleSA9IHNlbGYuX2tleV9jaGVja2VyLkNoZWNrVmFsdWUoa2V5KQotICAgIGNoZWNr
ZWRfdmFsdWUgPSBzZWxmLl92YWx1ZV9jaGVja2VyLkNoZWNrVmFsdWUodmFsdWUpCi0gICAgc2Vs
Zi5fdmFsdWVzW2NoZWNrZWRfa2V5XSA9IGNoZWNrZWRfdmFsdWUKLSAgICBzZWxmLl9tZXNzYWdl
X2xpc3RlbmVyLk1vZGlmaWVkKCkKLQotICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKLSAg
ICBkZWwgc2VsZi5fdmFsdWVzW2tleV0KLSAgICBzZWxmLl9tZXNzYWdlX2xpc3RlbmVyLk1vZGlm
aWVkKCkKLQotICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICByZXR1cm4gbGVuKHNlbGYuX3ZhbHVl
cykKLQotICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgcmV0dXJuIGl0ZXIoc2VsZi5fdmFsdWVz
KQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gcmVwcihzZWxmLl92YWx1ZXMp
Ci0KLSAgZGVmIE1lcmdlRnJvbShzZWxmLCBvdGhlcik6Ci0gICAgc2VsZi5fdmFsdWVzLnVwZGF0
ZShvdGhlci5fdmFsdWVzKQotICAgIHNlbGYuX21lc3NhZ2VfbGlzdGVuZXIuTW9kaWZpZWQoKQot
Ci0gIGRlZiBJbnZhbGlkYXRlSXRlcmF0b3JzKHNlbGYpOgotICAgICMgSXQgYXBwZWFycyB0aGF0
IHRoZSBvbmx5IHdheSB0byByZWxpYWJseSBpbnZhbGlkYXRlIGl0ZXJhdG9ycyB0bwotICAgICMg
c2VsZi5fdmFsdWVzIGlzIHRvIGVuc3VyZSB0aGF0IGl0cyBzaXplIGNoYW5nZXMuCi0gICAgb3Jp
Z2luYWwgPSBzZWxmLl92YWx1ZXMKLSAgICBzZWxmLl92YWx1ZXMgPSBvcmlnaW5hbC5jb3B5KCkK
LSAgICBvcmlnaW5hbFtOb25lXSA9IE5vbmUKLQotICAjIFRoaXMgaXMgZGVmaW5lZCBpbiB0aGUg
YWJzdHJhY3QgYmFzZSwgYnV0IHdlIGNhbiBkbyBpdCBtdWNoIG1vcmUgY2hlYXBseS4KLSAgZGVm
IGNsZWFyKHNlbGYpOgotICAgIHNlbGYuX3ZhbHVlcy5jbGVhcigpCi0gICAgc2VsZi5fbWVzc2Fn
ZV9saXN0ZW5lci5Nb2RpZmllZCgpCi0KLQotY2xhc3MgTWVzc2FnZU1hcChNdXRhYmxlTWFwcGlu
Zyk6Ci0KLSAgIiIiU2ltcGxlLCB0eXBlLWNoZWNrZWQsIGRpY3QtbGlrZSBjb250YWluZXIgZm9y
IHdpdGggc3VibWVzc2FnZSB2YWx1ZXMuIiIiCi0KLSAgIyBEaXNhbGxvd3MgYXNzaWdubWVudCB0
byBvdGhlciBhdHRyaWJ1dGVzLgotICBfX3Nsb3RzX18gPSBbJ19rZXlfY2hlY2tlcicsICdfdmFs
dWVzJywgJ19tZXNzYWdlX2xpc3RlbmVyJywKLSAgICAgICAgICAgICAgICdfbWVzc2FnZV9kZXNj
cmlwdG9yJ10KLQotICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZV9saXN0ZW5lciwgbWVzc2Fn
ZV9kZXNjcmlwdG9yLCBrZXlfY2hlY2tlcik6Ci0gICAgIiIiCi0gICAgQXJnczoKLSAgICAgIG1l
c3NhZ2VfbGlzdGVuZXI6IEEgTWVzc2FnZUxpc3RlbmVyIGltcGxlbWVudGF0aW9uLgotICAgICAg
ICBUaGUgU2NhbGFyTWFwIHdpbGwgY2FsbCB0aGlzIG9iamVjdCdzIE1vZGlmaWVkKCkgbWV0aG9k
IHdoZW4gaXQKLSAgICAgICAgaXMgbW9kaWZpZWQuCi0gICAgICBrZXlfY2hlY2tlcjogQSB0eXBl
X2NoZWNrZXJzLlZhbHVlQ2hlY2tlciBpbnN0YW5jZSB0byBydW4gb24ga2V5cwotICAgICAgICBp
bnNlcnRlZCBpbnRvIHRoaXMgY29udGFpbmVyLgotICAgICAgdmFsdWVfY2hlY2tlcjogQSB0eXBl
X2NoZWNrZXJzLlZhbHVlQ2hlY2tlciBpbnN0YW5jZSB0byBydW4gb24gdmFsdWVzCi0gICAgICAg
IGluc2VydGVkIGludG8gdGhpcyBjb250YWluZXIuCi0gICAgIiIiCi0gICAgc2VsZi5fbWVzc2Fn
ZV9saXN0ZW5lciA9IG1lc3NhZ2VfbGlzdGVuZXIKLSAgICBzZWxmLl9tZXNzYWdlX2Rlc2NyaXB0
b3IgPSBtZXNzYWdlX2Rlc2NyaXB0b3IKLSAgICBzZWxmLl9rZXlfY2hlY2tlciA9IGtleV9jaGVj
a2VyCi0gICAgc2VsZi5fdmFsdWVzID0ge30KLQotICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5
KToKLSAgICB0cnk6Ci0gICAgICByZXR1cm4gc2VsZi5fdmFsdWVzW2tleV0KLSAgICBleGNlcHQg
S2V5RXJyb3I6Ci0gICAgICBrZXkgPSBzZWxmLl9rZXlfY2hlY2tlci5DaGVja1ZhbHVlKGtleSkK
LSAgICAgIG5ld19lbGVtZW50ID0gc2VsZi5fbWVzc2FnZV9kZXNjcmlwdG9yLl9jb25jcmV0ZV9j
bGFzcygpCi0gICAgICBuZXdfZWxlbWVudC5fU2V0TGlzdGVuZXIoc2VsZi5fbWVzc2FnZV9saXN0
ZW5lcikKLSAgICAgIHNlbGYuX3ZhbHVlc1trZXldID0gbmV3X2VsZW1lbnQKLSAgICAgIHNlbGYu
X21lc3NhZ2VfbGlzdGVuZXIuTW9kaWZpZWQoKQotCi0gICAgICByZXR1cm4gbmV3X2VsZW1lbnQK
LQotICBkZWYgZ2V0X29yX2NyZWF0ZShzZWxmLCBrZXkpOgotICAgICIiImdldF9vcl9jcmVhdGUo
KSBpcyBhbiBhbGlhcyBmb3IgZ2V0aXRlbSAoaWUuIG1hcFtrZXldKS4KLQotICAgIEFyZ3M6Ci0g
ICAgICBrZXk6IFRoZSBrZXkgdG8gZ2V0IG9yIGNyZWF0ZSBpbiB0aGUgbWFwLgotCi0gICAgVGhp
cyBpcyB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgeW91IHdhbnQgdG8gYmUgZXhwbGljaXQgdGhhdCB0
aGUgY2FsbCBpcwotICAgIG11dGF0aW5nIHRoZSBtYXAuICBUaGlzIGNhbiBhdm9pZCBsaW50IGVy
cm9ycyBmb3Igc3RhdGVtZW50cyBsaWtlIHRoaXMKLSAgICB0aGF0IG90aGVyd2lzZSB3b3VsZCBh
cHBlYXIgdG8gYmUgcG9pbnRsZXNzIHN0YXRlbWVudHM6Ci0KLSAgICAgIG1zZy5teV9tYXBba2V5
XQotICAgICIiIgotICAgIHJldHVybiBzZWxmW2tleV0KLQotICAjIFdlIG5lZWQgdG8gb3ZlcnJp
ZGUgdGhpcyBleHBsaWNpdGx5LCBiZWNhdXNlIG91ciBkZWZhdWx0ZGljdC1saWtlIGJlaGF2aW9y
Ci0gICMgd2lsbCBtYWtlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIChmcm9tIG91ciBiYXNl
IGNsYXNzKSBhbHdheXMgaW5zZXJ0Ci0gICMgdGhlIGtleS4KLSAgZGVmIGdldChzZWxmLCBrZXks
IGRlZmF1bHQ9Tm9uZSk6Ci0gICAgaWYga2V5IGluIHNlbGY6Ci0gICAgICByZXR1cm4gc2VsZltr
ZXldCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBkZWZhdWx0Ci0KLSAgZGVmIF9fY29udGFpbnNf
XyhzZWxmLCBpdGVtKToKLSAgICByZXR1cm4gaXRlbSBpbiBzZWxmLl92YWx1ZXMKLQotICBkZWYg
X19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcignTWF5
IG5vdCBzZXQgdmFsdWVzIGRpcmVjdGx5LCBjYWxsIG15X21hcFtrZXldLmZvbyA9IDUnKQotCi0g
IGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgIGRlbCBzZWxmLl92YWx1ZXNba2V5XQot
ICAgIHNlbGYuX21lc3NhZ2VfbGlzdGVuZXIuTW9kaWZpZWQoKQotCi0gIGRlZiBfX2xlbl9fKHNl
bGYpOgotICAgIHJldHVybiBsZW4oc2VsZi5fdmFsdWVzKQotCi0gIGRlZiBfX2l0ZXJfXyhzZWxm
KToKLSAgICByZXR1cm4gaXRlcihzZWxmLl92YWx1ZXMpCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYp
OgotICAgIHJldHVybiByZXByKHNlbGYuX3ZhbHVlcykKLQotICBkZWYgTWVyZ2VGcm9tKHNlbGYs
IG90aGVyKToKLSAgICBmb3Iga2V5IGluIG90aGVyOgotICAgICAgc2VsZltrZXldLk1lcmdlRnJv
bShvdGhlcltrZXldKQotICAgICMgc2VsZi5fbWVzc2FnZV9saXN0ZW5lci5Nb2RpZmllZCgpIG5v
dCByZXF1aXJlZCBoZXJlLCBiZWNhdXNlCi0gICAgIyBtdXRhdGlvbnMgdG8gc3VibWVzc2FnZXMg
YWxyZWFkeSBwcm9wYWdhdGUuCi0KLSAgZGVmIEludmFsaWRhdGVJdGVyYXRvcnMoc2VsZik6Ci0g
ICAgIyBJdCBhcHBlYXJzIHRoYXQgdGhlIG9ubHkgd2F5IHRvIHJlbGlhYmx5IGludmFsaWRhdGUg
aXRlcmF0b3JzIHRvCi0gICAgIyBzZWxmLl92YWx1ZXMgaXMgdG8gZW5zdXJlIHRoYXQgaXRzIHNp
emUgY2hhbmdlcy4KLSAgICBvcmlnaW5hbCA9IHNlbGYuX3ZhbHVlcwotICAgIHNlbGYuX3ZhbHVl
cyA9IG9yaWdpbmFsLmNvcHkoKQotICAgIG9yaWdpbmFsW05vbmVdID0gTm9uZQotCi0gICMgVGhp
cyBpcyBkZWZpbmVkIGluIHRoZSBhYnN0cmFjdCBiYXNlLCBidXQgd2UgY2FuIGRvIGl0IG11Y2gg
bW9yZSBjaGVhcGx5LgotICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgc2VsZi5fdmFsdWVzLmNsZWFy
KCkKLSAgICBzZWxmLl9tZXNzYWdlX2xpc3RlbmVyLk1vZGlmaWVkKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9kZWNvZGVyLnB5IGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3By
b3RvYnVmL2ludGVybmFsL2RlY29kZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDMxODY5ZTQ1NzVjYTkwMDQ0MGE4Y2U0NTJjZTJhZjVlZDg3YTE5YWEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2lu
dGVybmFsL2RlY29kZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NTQgKzAsMCBAQAotIyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0j
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0iIiJDb2RlIGZvciBkZWNvZGluZyBwcm90b2NvbCBidWZmZXIgcHJpbWl0aXZlcy4KLQotVGhp
cyBjb2RlIGlzIHZlcnkgc2ltaWxhciB0byBlbmNvZGVyLnB5IC0tIHJlYWQgdGhlIGRvY3MgZm9y
IHRoYXQgbW9kdWxlIGZpcnN0LgotCi1BICJkZWNvZGVyIiBpcyBhIGZ1bmN0aW9uIHdpdGggdGhl
IHNpZ25hdHVyZToKLSAgRGVjb2RlKGJ1ZmZlciwgcG9zLCBlbmQsIG1lc3NhZ2UsIGZpZWxkX2Rp
Y3QpCi1UaGUgYXJndW1lbnRzIGFyZToKLSAgYnVmZmVyOiAgICAgVGhlIHN0cmluZyBjb250YWlu
aW5nIHRoZSBlbmNvZGVkIG1lc3NhZ2UuCi0gIHBvczogICAgICAgIFRoZSBjdXJyZW50IHBvc2l0
aW9uIGluIHRoZSBzdHJpbmcuCi0gIGVuZDogICAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgc3Ry
aW5nIHdoZXJlIHRoZSBjdXJyZW50IG1lc3NhZ2UgZW5kcy4gIE1heSBiZQotICAgICAgICAgICAg
ICBsZXNzIHRoYW4gbGVuKGJ1ZmZlcikgaWYgd2UncmUgcmVhZGluZyBhIHN1Yi1tZXNzYWdlLgot
ICBtZXNzYWdlOiAgICBUaGUgbWVzc2FnZSBvYmplY3QgaW50byB3aGljaCB3ZSdyZSBwYXJzaW5n
LgotICBmaWVsZF9kaWN0OiBtZXNzYWdlLl9maWVsZHMgKGF2b2lkcyBhIGhhc2h0YWJsZSBsb29r
dXApLgotVGhlIGRlY29kZXIgcmVhZHMgdGhlIGZpZWxkIGFuZCBzdG9yZXMgaXQgaW50byBmaWVs
ZF9kaWN0LCByZXR1cm5pbmcgdGhlIG5ldwotYnVmZmVyIHBvc2l0aW9uLiAgQSBkZWNvZGVyIGZv
ciBhIHJlcGVhdGVkIGZpZWxkIG1heSBwcm9hY3RpdmVseSBkZWNvZGUgYWxsIG9mCi10aGUgZWxl
bWVudHMgb2YgdGhhdCBmaWVsZCwgaWYgdGhleSBhcHBlYXIgY29uc2VjdXRpdmVseS4KLQotTm90
ZSB0aGF0IGRlY29kZXJzIG1heSB0aHJvdyBhbnkgb2YgdGhlIGZvbGxvd2luZzoKLSAgSW5kZXhF
cnJvcjogIEluZGljYXRlcyBhIHRydW5jYXRlZCBtZXNzYWdlLgotICBzdHJ1Y3QuZXJyb3I6ICBV
bnBhY2tpbmcgb2YgYSBmaXhlZC13aWR0aCBmaWVsZCBmYWlsZWQuCi0gIG1lc3NhZ2UuRGVjb2Rl
RXJyb3I6ICBPdGhlciBlcnJvcnMuCi0KLURlY29kZXJzIGFyZSBleHBlY3RlZCB0byByYWlzZSBh
biBleGNlcHRpb24gaWYgdGhleSBhcmUgY2FsbGVkIHdpdGggcG9zID4gZW5kLgotVGhpcyBhbGxv
d3MgY2FsbGVycyB0byBiZSBsYXggYWJvdXQgYm91bmRzIGNoZWNraW5nOiAgaXQncyBmaW5ldG8g
cmVhZCBwYXN0Ci0iZW5kIiBhcyBsb25nIGFzIHlvdSBhcmUgc3VyZSB0aGF0IHNvbWVvbmUgZWxz
ZSB3aWxsIG5vdGljZSBhbmQgdGhyb3cgYW4KLWV4Y2VwdGlvbiBsYXRlciBvbi4KLQotU29tZXRo
aW5nIHVwIHRoZSBjYWxsIHN0YWNrIGlzIGV4cGVjdGVkIHRvIGNhdGNoIEluZGV4RXJyb3IgYW5k
IHN0cnVjdC5lcnJvcgotYW5kIGNvbnZlcnQgdGhlbSB0byBtZXNzYWdlLkRlY29kZUVycm9yLgot
Ci1EZWNvZGVycyBhcmUgY29uc3RydWN0ZWQgdXNpbmcgZGVjb2RlciBjb25zdHJ1Y3RvcnMgd2l0
aCB0aGUgc2lnbmF0dXJlOgotICBNYWtlRGVjb2RlcihmaWVsZF9udW1iZXIsIGlzX3JlcGVhdGVk
LCBpc19wYWNrZWQsIGtleSwgbmV3X2RlZmF1bHQpCi1UaGUgYXJndW1lbnRzIGFyZToKLSAgZmll
bGRfbnVtYmVyOiAgVGhlIGZpZWxkIG51bWJlciBvZiB0aGUgZmllbGQgd2Ugd2FudCB0byBkZWNv
ZGUuCi0gIGlzX3JlcGVhdGVkOiAgIElzIHRoZSBmaWVsZCBhIHJlcGVhdGVkIGZpZWxkPyAoYm9v
bCkKLSAgaXNfcGFja2VkOiAgICAgSXMgdGhlIGZpZWxkIGEgcGFja2VkIGZpZWxkPyAoYm9vbCkK
LSAga2V5OiAgICAgICAgICAgVGhlIGtleSB0byB1c2Ugd2hlbiBsb29raW5nIHVwIHRoZSBmaWVs
ZCB3aXRoaW4gZmllbGRfZGljdC4KLSAgICAgICAgICAgICAgICAgKFRoaXMgaXMgYWN0dWFsbHkg
dGhlIEZpZWxkRGVzY3JpcHRvciBidXQgbm90aGluZyBpbiB0aGlzCi0gICAgICAgICAgICAgICAg
IGZpbGUgc2hvdWxkIGRlcGVuZCBvbiB0aGF0LikKLSAgbmV3X2RlZmF1bHQ6ICAgQSBmdW5jdGlv
biB3aGljaCB0YWtlcyBhIG1lc3NhZ2Ugb2JqZWN0IGFzIGEgcGFyYW1ldGVyIGFuZAotICAgICAg
ICAgICAgICAgICByZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IHZhbHVlIGZv
ciB0aGlzIGZpZWxkLgotICAgICAgICAgICAgICAgICAoVGhpcyBpcyBjYWxsZWQgZm9yIHJlcGVh
dGVkIGZpZWxkcyBhbmQgc3ViLW1lc3NhZ2VzLCB3aGVuIGFuCi0gICAgICAgICAgICAgICAgIGlu
c3RhbmNlIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuKQotCi1BcyB3aXRoIGVuY29kZXJzLCB3ZSBk
ZWZpbmUgYSBkZWNvZGVyIGNvbnN0cnVjdG9yIGZvciBldmVyeSB0eXBlIG9mIGZpZWxkLgotVGhl
biwgZm9yIGV2ZXJ5IGZpZWxkIG9mIGV2ZXJ5IG1lc3NhZ2UgY2xhc3Mgd2UgY29uc3RydWN0IGFu
IGFjdHVhbCBkZWNvZGVyLgotVGhhdCBkZWNvZGVyIGdvZXMgaW50byBhIGRpY3QgaW5kZXhlZCBi
eSB0YWcsIHNvIHdoZW4gd2UgZGVjb2RlIGEgbWVzc2FnZQotd2UgcmVwZWF0ZWRseSByZWFkIGEg
dGFnLCBsb29rIHVwIHRoZSBjb3JyZXNwb25kaW5nIGRlY29kZXIsIGFuZCBpbnZva2UgaXQuCi0i
IiIKLQotX19hdXRob3JfXyA9ICdrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKScKLQot
aW1wb3J0IHN0cnVjdAotCi1pbXBvcnQgc2l4Ci0KLWlmIHNpeC5QWTM6Ci0gIGxvbmcgPSBpbnQK
LQotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IGVuY29kZXIKLWZyb20gZ29v
Z2xlLnByb3RvYnVmLmludGVybmFsIGltcG9ydCB3aXJlX2Zvcm1hdAotZnJvbSBnb29nbGUucHJv
dG9idWYgaW1wb3J0IG1lc3NhZ2UKLQotCi0jIFRoaXMgd2lsbCBvdmVyZmxvdyBhbmQgdGh1cyBi
ZWNvbWUgSUVFRS03NTQgImluZmluaXR5Ii4gIFdlIHdvdWxkIHVzZQotIyAiZmxvYXQoJ2luZicp
IiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIFdpbmRvd3MgcHJlLVB5dGhvbi0yLjYuCi1fUE9TX0lO
RiA9IDFlMTAwMDAKLV9ORUdfSU5GID0gLV9QT1NfSU5GCi1fTkFOID0gX1BPU19JTkYgKiAwCi0K
LQotIyBUaGlzIGlzIG5vdCBmb3Igb3B0aW1pemF0aW9uLCBidXQgcmF0aGVyIHRvIGF2b2lkIGNv
bmZsaWN0cyB3aXRoIGxvY2FsCi0jIHZhcmlhYmxlcyBuYW1lZCAibWVzc2FnZSIuCi1fRGVjb2Rl
RXJyb3IgPSBtZXNzYWdlLkRlY29kZUVycm9yCi0KLQotZGVmIF9WYXJpbnREZWNvZGVyKG1hc2ss
IHJlc3VsdF90eXBlKToKLSAgIiIiUmV0dXJuIGFuIGVuY29kZXIgZm9yIGEgYmFzaWMgdmFyaW50
IHZhbHVlIChkb2VzIG5vdCBpbmNsdWRlIHRhZykuCi0KLSAgRGVjb2RlZCB2YWx1ZXMgd2lsbCBi
ZSBiaXR3aXNlLWFuZGVkIHdpdGggdGhlIGdpdmVuIG1hc2sgYmVmb3JlIGJlaW5nCi0gIHJldHVy
bmVkLCBlLmcuIHRvIGxpbWl0IHRoZW0gdG8gMzIgYml0cy4gIFRoZSByZXR1cm5lZCBkZWNvZGVy
IGRvZXMgbm90Ci0gIHRha2UgdGhlIHVzdWFsICJlbmQiIHBhcmFtZXRlciAtLSB0aGUgY2FsbGVy
IGlzIGV4cGVjdGVkIHRvIGRvIGJvdW5kcyBjaGVja2luZwotICBhZnRlciB0aGUgZmFjdCAob2Z0
ZW4gdGhlIGNhbGxlciBjYW4gZGVmZXIgc3VjaCBjaGVja2luZyB1bnRpbCBsYXRlcikuICBUaGUK
LSAgZGVjb2RlciByZXR1cm5zIGEgKHZhbHVlLCBuZXdfcG9zKSBwYWlyLgotICAiIiIKLQotICBk
ZWYgRGVjb2RlVmFyaW50KGJ1ZmZlciwgcG9zKToKLSAgICByZXN1bHQgPSAwCi0gICAgc2hpZnQg
PSAwCi0gICAgd2hpbGUgMToKLSAgICAgIGIgPSBzaXguaW5kZXhieXRlcyhidWZmZXIsIHBvcykK
LSAgICAgIHJlc3VsdCB8PSAoKGIgJiAweDdmKSA8PCBzaGlmdCkKLSAgICAgIHBvcyArPSAxCi0g
ICAgICBpZiBub3QgKGIgJiAweDgwKToKLSAgICAgICAgcmVzdWx0ICY9IG1hc2sKLSAgICAgICAg
cmVzdWx0ID0gcmVzdWx0X3R5cGUocmVzdWx0KQotICAgICAgICByZXR1cm4gKHJlc3VsdCwgcG9z
KQotICAgICAgc2hpZnQgKz0gNwotICAgICAgaWYgc2hpZnQgPj0gNjQ6Ci0gICAgICAgIHJhaXNl
IF9EZWNvZGVFcnJvcignVG9vIG1hbnkgYnl0ZXMgd2hlbiBkZWNvZGluZyB2YXJpbnQuJykKLSAg
cmV0dXJuIERlY29kZVZhcmludAotCi0KLWRlZiBfU2lnbmVkVmFyaW50RGVjb2RlcihtYXNrLCBy
ZXN1bHRfdHlwZSk6Ci0gICIiIkxpa2UgX1ZhcmludERlY29kZXIoKSBidXQgZGVjb2RlcyBzaWdu
ZWQgdmFsdWVzLiIiIgotCi0gIGRlZiBEZWNvZGVWYXJpbnQoYnVmZmVyLCBwb3MpOgotICAgIHJl
c3VsdCA9IDAKLSAgICBzaGlmdCA9IDAKLSAgICB3aGlsZSAxOgotICAgICAgYiA9IHNpeC5pbmRl
eGJ5dGVzKGJ1ZmZlciwgcG9zKQotICAgICAgcmVzdWx0IHw9ICgoYiAmIDB4N2YpIDw8IHNoaWZ0
KQotICAgICAgcG9zICs9IDEKLSAgICAgIGlmIG5vdCAoYiAmIDB4ODApOgotICAgICAgICBpZiBy
ZXN1bHQgPiAweDdmZmZmZmZmZmZmZmZmZmY6Ci0gICAgICAgICAgcmVzdWx0IC09ICgxIDw8IDY0
KQotICAgICAgICAgIHJlc3VsdCB8PSB+bWFzawotICAgICAgICBlbHNlOgotICAgICAgICAgIHJl
c3VsdCAmPSBtYXNrCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdF90eXBlKHJlc3VsdCkKLSAgICAg
ICAgcmV0dXJuIChyZXN1bHQsIHBvcykKLSAgICAgIHNoaWZ0ICs9IDcKLSAgICAgIGlmIHNoaWZ0
ID49IDY0OgotICAgICAgICByYWlzZSBfRGVjb2RlRXJyb3IoJ1RvbyBtYW55IGJ5dGVzIHdoZW4g
ZGVjb2RpbmcgdmFyaW50LicpCi0gIHJldHVybiBEZWNvZGVWYXJpbnQKLQotIyBXZSBmb3JjZSAz
Mi1iaXQgdmFsdWVzIHRvIGludCBhbmQgNjQtYml0IHZhbHVlcyB0byBsb25nIHRvIG1ha2UKLSMg
YWx0ZXJuYXRlIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aGUgZGlzdGluY3Rpb24gaXMgbW9yZSBz
aWduaWZpY2FudAotIyAoZS5nLiB0aGUgQysrIGltcGxlbWVudGF0aW9uKSBzaW1wbGVyLgotCi1f
RGVjb2RlVmFyaW50ID0gX1ZhcmludERlY29kZXIoKDEgPDwgNjQpIC0gMSwgbG9uZykKLV9EZWNv
ZGVTaWduZWRWYXJpbnQgPSBfU2lnbmVkVmFyaW50RGVjb2RlcigoMSA8PCA2NCkgLSAxLCBsb25n
KQotCi0jIFVzZSB0aGVzZSB2ZXJzaW9ucyBmb3IgdmFsdWVzIHdoaWNoIG11c3QgYmUgbGltaXRl
ZCB0byAzMiBiaXRzLgotX0RlY29kZVZhcmludDMyID0gX1ZhcmludERlY29kZXIoKDEgPDwgMzIp
IC0gMSwgaW50KQotX0RlY29kZVNpZ25lZFZhcmludDMyID0gX1NpZ25lZFZhcmludERlY29kZXIo
KDEgPDwgMzIpIC0gMSwgaW50KQotCi0KLWRlZiBSZWFkVGFnKGJ1ZmZlciwgcG9zKToKLSAgIiIi
UmVhZCBhIHRhZyBmcm9tIHRoZSBidWZmZXIsIGFuZCByZXR1cm4gYSAodGFnX2J5dGVzLCBuZXdf
cG9zKSB0dXBsZS4KLQotICBXZSByZXR1cm4gdGhlIHJhdyBieXRlcyBvZiB0aGUgdGFnIHJhdGhl
ciB0aGFuIGRlY29kaW5nIHRoZW0uICBUaGUgcmF3Ci0gIGJ5dGVzIGNhbiB0aGVuIGJlIHVzZWQg
dG8gbG9vayB1cCB0aGUgcHJvcGVyIGRlY29kZXIuICBUaGlzIGVmZmVjdGl2ZWx5IGFsbG93cwot
ICB1cyB0byB0cmFkZSBzb21lIHdvcmsgdGhhdCB3b3VsZCBiZSBkb25lIGluIHB1cmUtcHl0aG9u
IChkZWNvZGluZyBhIHZhcmludCkKLSAgZm9yIHdvcmsgdGhhdCBpcyBkb25lIGluIEMgKHNlYXJj
aGluZyBmb3IgYSBieXRlIHN0cmluZyBpbiBhIGhhc2ggdGFibGUpLgotICBJbiBhIGxvdy1sZXZl
bCBsYW5ndWFnZSBpdCB3b3VsZCBiZSBtdWNoIGNoZWFwZXIgdG8gZGVjb2RlIHRoZSB2YXJpbnQg
YW5kCi0gIHVzZSB0aGF0LCBidXQgbm90IGluIFB5dGhvbi4KLSAgIiIiCi0KLSAgc3RhcnQgPSBw
b3MKLSAgd2hpbGUgc2l4LmluZGV4Ynl0ZXMoYnVmZmVyLCBwb3MpICYgMHg4MDoKLSAgICBwb3Mg
Kz0gMQotICBwb3MgKz0gMQotICByZXR1cm4gKGJ1ZmZlcltzdGFydDpwb3NdLCBwb3MpCi0KLQot
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0KLWRlZiBfU2ltcGxlRGVjb2Rlcih3aXJlX3R5cGUsIGRlY29kZV92
YWx1ZSk6Ci0gICIiIlJldHVybiBhIGNvbnN0cnVjdG9yIGZvciBhIGRlY29kZXIgZm9yIGZpZWxk
cyBvZiBhIHBhcnRpY3VsYXIgdHlwZS4KLQotICBBcmdzOgotICAgICAgd2lyZV90eXBlOiAgVGhl
IGZpZWxkJ3Mgd2lyZSB0eXBlLgotICAgICAgZGVjb2RlX3ZhbHVlOiAgQSBmdW5jdGlvbiB3aGlj
aCBkZWNvZGVzIGFuIGluZGl2aWR1YWwgdmFsdWUsIGUuZy4KLSAgICAgICAgX0RlY29kZVZhcmlu
dCgpCi0gICIiIgotCi0gIGRlZiBTcGVjaWZpY0RlY29kZXIoZmllbGRfbnVtYmVyLCBpc19yZXBl
YXRlZCwgaXNfcGFja2VkLCBrZXksIG5ld19kZWZhdWx0KToKLSAgICBpZiBpc19wYWNrZWQ6Ci0g
ICAgICBsb2NhbF9EZWNvZGVWYXJpbnQgPSBfRGVjb2RlVmFyaW50Ci0gICAgICBkZWYgRGVjb2Rl
UGFja2VkRmllbGQoYnVmZmVyLCBwb3MsIGVuZCwgbWVzc2FnZSwgZmllbGRfZGljdCk6Ci0gICAg
ICAgIHZhbHVlID0gZmllbGRfZGljdC5nZXQoa2V5KQotICAgICAgICBpZiB2YWx1ZSBpcyBOb25l
OgotICAgICAgICAgIHZhbHVlID0gZmllbGRfZGljdC5zZXRkZWZhdWx0KGtleSwgbmV3X2RlZmF1
bHQobWVzc2FnZSkpCi0gICAgICAgIChlbmRwb2ludCwgcG9zKSA9IGxvY2FsX0RlY29kZVZhcmlu
dChidWZmZXIsIHBvcykKLSAgICAgICAgZW5kcG9pbnQgKz0gcG9zCi0gICAgICAgIGlmIGVuZHBv
aW50ID4gZW5kOgotICAgICAgICAgIHJhaXNlIF9EZWNvZGVFcnJvcignVHJ1bmNhdGVkIG1lc3Nh
Z2UuJykKLSAgICAgICAgd2hpbGUgcG9zIDwgZW5kcG9pbnQ6Ci0gICAgICAgICAgKGVsZW1lbnQs
IHBvcykgPSBkZWNvZGVfdmFsdWUoYnVmZmVyLCBwb3MpCi0gICAgICAgICAgdmFsdWUuYXBwZW5k
KGVsZW1lbnQpCi0gICAgICAgIGlmIHBvcyA+IGVuZHBvaW50OgotICAgICAgICAgIGRlbCB2YWx1
ZVstMV0gICAjIERpc2NhcmQgY29ycnVwdCB2YWx1ZS4KLSAgICAgICAgICByYWlzZSBfRGVjb2Rl
RXJyb3IoJ1BhY2tlZCBlbGVtZW50IHdhcyB0cnVuY2F0ZWQuJykKLSAgICAgICAgcmV0dXJuIHBv
cwotICAgICAgcmV0dXJuIERlY29kZVBhY2tlZEZpZWxkCi0gICAgZWxpZiBpc19yZXBlYXRlZDoK
LSAgICAgIHRhZ19ieXRlcyA9IGVuY29kZXIuVGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX3R5
cGUpCi0gICAgICB0YWdfbGVuID0gbGVuKHRhZ19ieXRlcykKLSAgICAgIGRlZiBEZWNvZGVSZXBl
YXRlZEZpZWxkKGJ1ZmZlciwgcG9zLCBlbmQsIG1lc3NhZ2UsIGZpZWxkX2RpY3QpOgotICAgICAg
ICB2YWx1ZSA9IGZpZWxkX2RpY3QuZ2V0KGtleSkKLSAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToK
LSAgICAgICAgICB2YWx1ZSA9IGZpZWxkX2RpY3Quc2V0ZGVmYXVsdChrZXksIG5ld19kZWZhdWx0
KG1lc3NhZ2UpKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgIChlbGVtZW50LCBuZXdfcG9z
KSA9IGRlY29kZV92YWx1ZShidWZmZXIsIHBvcykKLSAgICAgICAgICB2YWx1ZS5hcHBlbmQoZWxl
bWVudCkKLSAgICAgICAgICAjIFByZWRpY3QgdGhhdCB0aGUgbmV4dCB0YWcgaXMgYW5vdGhlciBj
b3B5IG9mIHRoZSBzYW1lIHJlcGVhdGVkCi0gICAgICAgICAgIyBmaWVsZC4KLSAgICAgICAgICBw
b3MgPSBuZXdfcG9zICsgdGFnX2xlbgotICAgICAgICAgIGlmIGJ1ZmZlcltuZXdfcG9zOnBvc10g
IT0gdGFnX2J5dGVzIG9yIG5ld19wb3MgPj0gZW5kOgotICAgICAgICAgICAgIyBQcmVkaWN0aW9u
IGZhaWxlZC4gIFJldHVybi4KLSAgICAgICAgICAgIGlmIG5ld19wb3MgPiBlbmQ6Ci0gICAgICAg
ICAgICAgIHJhaXNlIF9EZWNvZGVFcnJvcignVHJ1bmNhdGVkIG1lc3NhZ2UuJykKLSAgICAgICAg
ICAgIHJldHVybiBuZXdfcG9zCi0gICAgICByZXR1cm4gRGVjb2RlUmVwZWF0ZWRGaWVsZAotICAg
IGVsc2U6Ci0gICAgICBkZWYgRGVjb2RlRmllbGQoYnVmZmVyLCBwb3MsIGVuZCwgbWVzc2FnZSwg
ZmllbGRfZGljdCk6Ci0gICAgICAgIChmaWVsZF9kaWN0W2tleV0sIHBvcykgPSBkZWNvZGVfdmFs
dWUoYnVmZmVyLCBwb3MpCi0gICAgICAgIGlmIHBvcyA+IGVuZDoKLSAgICAgICAgICBkZWwgZmll
bGRfZGljdFtrZXldICAjIERpc2NhcmQgY29ycnVwdCB2YWx1ZS4KLSAgICAgICAgICByYWlzZSBf
RGVjb2RlRXJyb3IoJ1RydW5jYXRlZCBtZXNzYWdlLicpCi0gICAgICAgIHJldHVybiBwb3MKLSAg
ICAgIHJldHVybiBEZWNvZGVGaWVsZAotCi0gIHJldHVybiBTcGVjaWZpY0RlY29kZXIKLQotCi1k
ZWYgX01vZGlmaWVkRGVjb2Rlcih3aXJlX3R5cGUsIGRlY29kZV92YWx1ZSwgbW9kaWZ5X3ZhbHVl
KToKLSAgIiIiTGlrZSBTaW1wbGVEZWNvZGVyIGJ1dCBhZGRpdGlvbmFsbHkgaW52b2tlcyBtb2Rp
ZnlfdmFsdWUgb24gZXZlcnkgdmFsdWUKLSAgYmVmb3JlIHN0b3JpbmcgaXQuICBVc3VhbGx5IG1v
ZGlmeV92YWx1ZSBpcyBaaWdaYWdEZWNvZGUuCi0gICIiIgotCi0gICMgUmV1c2luZyBfU2ltcGxl
RGVjb2RlciBpcyBzbGlnaHRseSBzbG93ZXIgdGhhbiBjb3B5aW5nIGEgYnVuY2ggb2YgY29kZSwg
YnV0Ci0gICMgbm90IGVub3VnaCB0byBtYWtlIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZS4KLQot
ICBkZWYgSW5uZXJEZWNvZGUoYnVmZmVyLCBwb3MpOgotICAgIChyZXN1bHQsIG5ld19wb3MpID0g
ZGVjb2RlX3ZhbHVlKGJ1ZmZlciwgcG9zKQotICAgIHJldHVybiAobW9kaWZ5X3ZhbHVlKHJlc3Vs
dCksIG5ld19wb3MpCi0gIHJldHVybiBfU2ltcGxlRGVjb2Rlcih3aXJlX3R5cGUsIElubmVyRGVj
b2RlKQotCi0KLWRlZiBfU3RydWN0UGFja0RlY29kZXIod2lyZV90eXBlLCBmb3JtYXQpOgotICAi
IiJSZXR1cm4gYSBjb25zdHJ1Y3RvciBmb3IgYSBkZWNvZGVyIGZvciBhIGZpeGVkLXdpZHRoIGZp
ZWxkLgotCi0gIEFyZ3M6Ci0gICAgICB3aXJlX3R5cGU6ICBUaGUgZmllbGQncyB3aXJlIHR5cGUu
Ci0gICAgICBmb3JtYXQ6ICBUaGUgZm9ybWF0IHN0cmluZyB0byBwYXNzIHRvIHN0cnVjdC51bnBh
Y2soKS4KLSAgIiIiCi0KLSAgdmFsdWVfc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShmb3JtYXQpCi0g
IGxvY2FsX3VucGFjayA9IHN0cnVjdC51bnBhY2sKLQotICAjIFJldXNpbmcgX1NpbXBsZURlY29k
ZXIgaXMgc2xpZ2h0bHkgc2xvd2VyIHRoYW4gY29weWluZyBhIGJ1bmNoIG9mIGNvZGUsIGJ1dAot
ICAjIG5vdCBlbm91Z2ggdG8gbWFrZSBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UuCi0KLSAgIyBO
b3RlIHRoYXQgd2UgZXhwZWN0IHNvbWVvbmUgdXAtc3RhY2sgdG8gY2F0Y2ggc3RydWN0LmVycm9y
IGFuZCBjb252ZXJ0Ci0gICMgaXQgdG8gX0RlY29kZUVycm9yIC0tIHRoaXMgd2F5IHdlIGRvbid0
IGhhdmUgdG8gc2V0IHVwIGV4Y2VwdGlvbi0KLSAgIyBoYW5kbGluZyBibG9ja3MgZXZlcnkgdGlt
ZSB3ZSBwYXJzZSBvbmUgdmFsdWUuCi0KLSAgZGVmIElubmVyRGVjb2RlKGJ1ZmZlciwgcG9zKToK
LSAgICBuZXdfcG9zID0gcG9zICsgdmFsdWVfc2l6ZQotICAgIHJlc3VsdCA9IGxvY2FsX3VucGFj
ayhmb3JtYXQsIGJ1ZmZlcltwb3M6bmV3X3Bvc10pWzBdCi0gICAgcmV0dXJuIChyZXN1bHQsIG5l
d19wb3MpCi0gIHJldHVybiBfU2ltcGxlRGVjb2Rlcih3aXJlX3R5cGUsIElubmVyRGVjb2RlKQot
Ci0KLWRlZiBfRmxvYXREZWNvZGVyKCk6Ci0gICIiIlJldHVybnMgYSBkZWNvZGVyIGZvciBhIGZs
b2F0IGZpZWxkLgotCi0gIFRoaXMgY29kZSB3b3JrcyBhcm91bmQgYSBidWcgaW4gc3RydWN0LnVu
cGFjayBmb3Igbm9uLWZpbml0ZSAzMi1iaXQKLSAgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgotICAi
IiIKLQotICBsb2NhbF91bnBhY2sgPSBzdHJ1Y3QudW5wYWNrCi0KLSAgZGVmIElubmVyRGVjb2Rl
KGJ1ZmZlciwgcG9zKToKLSAgICAjIFdlIGV4cGVjdCBhIDMyLWJpdCB2YWx1ZSBpbiBsaXR0bGUt
ZW5kaWFuIGJ5dGUgb3JkZXIuICBCaXQgMSBpcyB0aGUgc2lnbgotICAgICMgYml0LCBiaXRzIDIt
OSByZXByZXNlbnQgdGhlIGV4cG9uZW50LCBhbmQgYml0cyAxMC0zMiBhcmUgdGhlIHNpZ25pZmlj
YW5kLgotICAgIG5ld19wb3MgPSBwb3MgKyA0Ci0gICAgZmxvYXRfYnl0ZXMgPSBidWZmZXJbcG9z
Om5ld19wb3NdCi0KLSAgICAjIElmIHRoaXMgdmFsdWUgaGFzIGFsbCBpdHMgZXhwb25lbnQgYml0
cyBzZXQsIHRoZW4gaXQncyBub24tZmluaXRlLgotICAgICMgSW4gUHl0aG9uIDIuNCwgc3RydWN0
LnVucGFjayB3aWxsIGNvbnZlcnQgaXQgdG8gYSBmaW5pdGUgNjQtYml0IHZhbHVlLgotICAgICMg
VG8gYXZvaWQgdGhhdCwgd2UgcGFyc2UgaXQgc3BlY2lhbGx5LgotICAgIGlmIChmbG9hdF9ieXRl
c1szOjRdIGluIGInXHg3Rlx4RkYnIGFuZCBmbG9hdF9ieXRlc1syOjNdID49IGInXHg4MCcpOgot
ICAgICAgIyBJZiBhdCBsZWFzdCBvbmUgc2lnbmlmaWNhbmQgYml0IGlzIHNldC4uLgotICAgICAg
aWYgZmxvYXRfYnl0ZXNbMDozXSAhPSBiJ1x4MDBceDAwXHg4MCc6Ci0gICAgICAgIHJldHVybiAo
X05BTiwgbmV3X3BvcykKLSAgICAgICMgSWYgc2lnbiBiaXQgaXMgc2V0Li4uCi0gICAgICBpZiBm
bG9hdF9ieXRlc1szOjRdID09IGInXHhGRic6Ci0gICAgICAgIHJldHVybiAoX05FR19JTkYsIG5l
d19wb3MpCi0gICAgICByZXR1cm4gKF9QT1NfSU5GLCBuZXdfcG9zKQotCi0gICAgIyBOb3RlIHRo
YXQgd2UgZXhwZWN0IHNvbWVvbmUgdXAtc3RhY2sgdG8gY2F0Y2ggc3RydWN0LmVycm9yIGFuZCBj
b252ZXJ0Ci0gICAgIyBpdCB0byBfRGVjb2RlRXJyb3IgLS0gdGhpcyB3YXkgd2UgZG9uJ3QgaGF2
ZSB0byBzZXQgdXAgZXhjZXB0aW9uLQotICAgICMgaGFuZGxpbmcgYmxvY2tzIGV2ZXJ5IHRpbWUg
d2UgcGFyc2Ugb25lIHZhbHVlLgotICAgIHJlc3VsdCA9IGxvY2FsX3VucGFjaygnPGYnLCBmbG9h
dF9ieXRlcylbMF0KLSAgICByZXR1cm4gKHJlc3VsdCwgbmV3X3BvcykKLSAgcmV0dXJuIF9TaW1w
bGVEZWNvZGVyKHdpcmVfZm9ybWF0LldJUkVUWVBFX0ZJWEVEMzIsIElubmVyRGVjb2RlKQotCi0K
LWRlZiBfRG91YmxlRGVjb2RlcigpOgotICAiIiJSZXR1cm5zIGEgZGVjb2RlciBmb3IgYSBkb3Vi
bGUgZmllbGQuCi0KLSAgVGhpcyBjb2RlIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiBzdHJ1Y3QudW5w
YWNrIGZvciBub3QtYS1udW1iZXIuCi0gICIiIgotCi0gIGxvY2FsX3VucGFjayA9IHN0cnVjdC51
bnBhY2sKLQotICBkZWYgSW5uZXJEZWNvZGUoYnVmZmVyLCBwb3MpOgotICAgICMgV2UgZXhwZWN0
IGEgNjQtYml0IHZhbHVlIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci4gIEJpdCAxIGlzIHRo
ZSBzaWduCi0gICAgIyBiaXQsIGJpdHMgMi0xMiByZXByZXNlbnQgdGhlIGV4cG9uZW50LCBhbmQg
Yml0cyAxMy02NCBhcmUgdGhlIHNpZ25pZmljYW5kLgotICAgIG5ld19wb3MgPSBwb3MgKyA4Ci0g
ICAgZG91YmxlX2J5dGVzID0gYnVmZmVyW3BvczpuZXdfcG9zXQotCi0gICAgIyBJZiB0aGlzIHZh
bHVlIGhhcyBhbGwgaXRzIGV4cG9uZW50IGJpdHMgc2V0IGFuZCBhdCBsZWFzdCBvbmUgc2lnbmlm
aWNhbmQKLSAgICAjIGJpdCBzZXQsIGl0J3Mgbm90IGEgbnVtYmVyLiAgSW4gUHl0aG9uIDIuNCwg
c3RydWN0LnVucGFjayB3aWxsIHRyZWF0IGl0Ci0gICAgIyBhcyBpbmYgb3IgLWluZi4gIFRvIGF2
b2lkIHRoYXQsIHdlIHRyZWF0IGl0IHNwZWNpYWxseS4KLSAgICBpZiAoKGRvdWJsZV9ieXRlc1s3
OjhdIGluIGInXHg3Rlx4RkYnKQotICAgICAgICBhbmQgKGRvdWJsZV9ieXRlc1s2OjddID49IGIn
XHhGMCcpCi0gICAgICAgIGFuZCAoZG91YmxlX2J5dGVzWzA6N10gIT0gYidceDAwXHgwMFx4MDBc
eDAwXHgwMFx4MDBceEYwJykpOgotICAgICAgcmV0dXJuIChfTkFOLCBuZXdfcG9zKQotCi0gICAg
IyBOb3RlIHRoYXQgd2UgZXhwZWN0IHNvbWVvbmUgdXAtc3RhY2sgdG8gY2F0Y2ggc3RydWN0LmVy
cm9yIGFuZCBjb252ZXJ0Ci0gICAgIyBpdCB0byBfRGVjb2RlRXJyb3IgLS0gdGhpcyB3YXkgd2Ug
ZG9uJ3QgaGF2ZSB0byBzZXQgdXAgZXhjZXB0aW9uLQotICAgICMgaGFuZGxpbmcgYmxvY2tzIGV2
ZXJ5IHRpbWUgd2UgcGFyc2Ugb25lIHZhbHVlLgotICAgIHJlc3VsdCA9IGxvY2FsX3VucGFjaygn
PGQnLCBkb3VibGVfYnl0ZXMpWzBdCi0gICAgcmV0dXJuIChyZXN1bHQsIG5ld19wb3MpCi0gIHJl
dHVybiBfU2ltcGxlRGVjb2Rlcih3aXJlX2Zvcm1hdC5XSVJFVFlQRV9GSVhFRDY0LCBJbm5lckRl
Y29kZSkKLQotCi1kZWYgRW51bURlY29kZXIoZmllbGRfbnVtYmVyLCBpc19yZXBlYXRlZCwgaXNf
cGFja2VkLCBrZXksIG5ld19kZWZhdWx0KToKLSAgZW51bV90eXBlID0ga2V5LmVudW1fdHlwZQot
ICBpZiBpc19wYWNrZWQ6Ci0gICAgbG9jYWxfRGVjb2RlVmFyaW50ID0gX0RlY29kZVZhcmludAot
ICAgIGRlZiBEZWNvZGVQYWNrZWRGaWVsZChidWZmZXIsIHBvcywgZW5kLCBtZXNzYWdlLCBmaWVs
ZF9kaWN0KToKLSAgICAgIHZhbHVlID0gZmllbGRfZGljdC5nZXQoa2V5KQotICAgICAgaWYgdmFs
dWUgaXMgTm9uZToKLSAgICAgICAgdmFsdWUgPSBmaWVsZF9kaWN0LnNldGRlZmF1bHQoa2V5LCBu
ZXdfZGVmYXVsdChtZXNzYWdlKSkKLSAgICAgIChlbmRwb2ludCwgcG9zKSA9IGxvY2FsX0RlY29k
ZVZhcmludChidWZmZXIsIHBvcykKLSAgICAgIGVuZHBvaW50ICs9IHBvcwotICAgICAgaWYgZW5k
cG9pbnQgPiBlbmQ6Ci0gICAgICAgIHJhaXNlIF9EZWNvZGVFcnJvcignVHJ1bmNhdGVkIG1lc3Nh
Z2UuJykKLSAgICAgIHdoaWxlIHBvcyA8IGVuZHBvaW50OgotICAgICAgICB2YWx1ZV9zdGFydF9w
b3MgPSBwb3MKLSAgICAgICAgKGVsZW1lbnQsIHBvcykgPSBfRGVjb2RlU2lnbmVkVmFyaW50MzIo
YnVmZmVyLCBwb3MpCi0gICAgICAgIGlmIGVsZW1lbnQgaW4gZW51bV90eXBlLnZhbHVlc19ieV9u
dW1iZXI6Ci0gICAgICAgICAgdmFsdWUuYXBwZW5kKGVsZW1lbnQpCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgaWYgbm90IG1lc3NhZ2UuX3Vua25vd25fZmllbGRzOgotICAgICAgICAgICAgbWVz
c2FnZS5fdW5rbm93bl9maWVsZHMgPSBbXQotICAgICAgICAgIHRhZ19ieXRlcyA9IGVuY29kZXIu
VGFnQnl0ZXMoZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2lyZV9mb3JtYXQuV0lSRVRZUEVfVkFSSU5UKQotICAgICAgICAgIG1lc3NhZ2UuX3Vu
a25vd25fZmllbGRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgKHRhZ19ieXRlcywgYnVmZmVyW3Zh
bHVlX3N0YXJ0X3Bvczpwb3NdKSkKLSAgICAgIGlmIHBvcyA+IGVuZHBvaW50OgotICAgICAgICBp
ZiBlbGVtZW50IGluIGVudW1fdHlwZS52YWx1ZXNfYnlfbnVtYmVyOgotICAgICAgICAgIGRlbCB2
YWx1ZVstMV0gICAjIERpc2NhcmQgY29ycnVwdCB2YWx1ZS4KLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICBkZWwgbWVzc2FnZS5fdW5rbm93bl9maWVsZHNbLTFdCi0gICAgICAgIHJhaXNlIF9EZWNv
ZGVFcnJvcignUGFja2VkIGVsZW1lbnQgd2FzIHRydW5jYXRlZC4nKQotICAgICAgcmV0dXJuIHBv
cwotICAgIHJldHVybiBEZWNvZGVQYWNrZWRGaWVsZAotICBlbGlmIGlzX3JlcGVhdGVkOgotICAg
IHRhZ19ieXRlcyA9IGVuY29kZXIuVGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX2Zvcm1hdC5X
SVJFVFlQRV9WQVJJTlQpCi0gICAgdGFnX2xlbiA9IGxlbih0YWdfYnl0ZXMpCi0gICAgZGVmIERl
Y29kZVJlcGVhdGVkRmllbGQoYnVmZmVyLCBwb3MsIGVuZCwgbWVzc2FnZSwgZmllbGRfZGljdCk6
Ci0gICAgICB2YWx1ZSA9IGZpZWxkX2RpY3QuZ2V0KGtleSkKLSAgICAgIGlmIHZhbHVlIGlzIE5v
bmU6Ci0gICAgICAgIHZhbHVlID0gZmllbGRfZGljdC5zZXRkZWZhdWx0KGtleSwgbmV3X2RlZmF1
bHQobWVzc2FnZSkpCi0gICAgICB3aGlsZSAxOgotICAgICAgICAoZWxlbWVudCwgbmV3X3Bvcykg
PSBfRGVjb2RlU2lnbmVkVmFyaW50MzIoYnVmZmVyLCBwb3MpCi0gICAgICAgIGlmIGVsZW1lbnQg
aW4gZW51bV90eXBlLnZhbHVlc19ieV9udW1iZXI6Ci0gICAgICAgICAgdmFsdWUuYXBwZW5kKGVs
ZW1lbnQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgaWYgbm90IG1lc3NhZ2UuX3Vua25vd25f
ZmllbGRzOgotICAgICAgICAgICAgbWVzc2FnZS5fdW5rbm93bl9maWVsZHMgPSBbXQotICAgICAg
ICAgIG1lc3NhZ2UuX3Vua25vd25fZmllbGRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgKHRhZ19i
eXRlcywgYnVmZmVyW3BvczpuZXdfcG9zXSkpCi0gICAgICAgICMgUHJlZGljdCB0aGF0IHRoZSBu
ZXh0IHRhZyBpcyBhbm90aGVyIGNvcHkgb2YgdGhlIHNhbWUgcmVwZWF0ZWQKLSAgICAgICAgIyBm
aWVsZC4KLSAgICAgICAgcG9zID0gbmV3X3BvcyArIHRhZ19sZW4KLSAgICAgICAgaWYgYnVmZmVy
W25ld19wb3M6cG9zXSAhPSB0YWdfYnl0ZXMgb3IgbmV3X3BvcyA+PSBlbmQ6Ci0gICAgICAgICAg
IyBQcmVkaWN0aW9uIGZhaWxlZC4gIFJldHVybi4KLSAgICAgICAgICBpZiBuZXdfcG9zID4gZW5k
OgotICAgICAgICAgICAgcmFpc2UgX0RlY29kZUVycm9yKCdUcnVuY2F0ZWQgbWVzc2FnZS4nKQot
ICAgICAgICAgIHJldHVybiBuZXdfcG9zCi0gICAgcmV0dXJuIERlY29kZVJlcGVhdGVkRmllbGQK
LSAgZWxzZToKLSAgICBkZWYgRGVjb2RlRmllbGQoYnVmZmVyLCBwb3MsIGVuZCwgbWVzc2FnZSwg
ZmllbGRfZGljdCk6Ci0gICAgICB2YWx1ZV9zdGFydF9wb3MgPSBwb3MKLSAgICAgIChlbnVtX3Zh
bHVlLCBwb3MpID0gX0RlY29kZVNpZ25lZFZhcmludDMyKGJ1ZmZlciwgcG9zKQotICAgICAgaWYg
cG9zID4gZW5kOgotICAgICAgICByYWlzZSBfRGVjb2RlRXJyb3IoJ1RydW5jYXRlZCBtZXNzYWdl
LicpCi0gICAgICBpZiBlbnVtX3ZhbHVlIGluIGVudW1fdHlwZS52YWx1ZXNfYnlfbnVtYmVyOgot
ICAgICAgICBmaWVsZF9kaWN0W2tleV0gPSBlbnVtX3ZhbHVlCi0gICAgICBlbHNlOgotICAgICAg
ICBpZiBub3QgbWVzc2FnZS5fdW5rbm93bl9maWVsZHM6Ci0gICAgICAgICAgbWVzc2FnZS5fdW5r
bm93bl9maWVsZHMgPSBbXQotICAgICAgICB0YWdfYnl0ZXMgPSBlbmNvZGVyLlRhZ0J5dGVzKGZp
ZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlX2Zv
cm1hdC5XSVJFVFlQRV9WQVJJTlQpCi0gICAgICAgIG1lc3NhZ2UuX3Vua25vd25fZmllbGRzLmFw
cGVuZCgKLSAgICAgICAgICAodGFnX2J5dGVzLCBidWZmZXJbdmFsdWVfc3RhcnRfcG9zOnBvc10p
KQotICAgICAgcmV0dXJuIHBvcwotICAgIHJldHVybiBEZWNvZGVGaWVsZAotCi0KLSMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotCi1JbnQzMkRlY29kZXIgPSBfU2ltcGxlRGVjb2RlcigKLSAgICB3aXJlX2Zvcm1h
dC5XSVJFVFlQRV9WQVJJTlQsIF9EZWNvZGVTaWduZWRWYXJpbnQzMikKLQotSW50NjREZWNvZGVy
ID0gX1NpbXBsZURlY29kZXIoCi0gICAgd2lyZV9mb3JtYXQuV0lSRVRZUEVfVkFSSU5ULCBfRGVj
b2RlU2lnbmVkVmFyaW50KQotCi1VSW50MzJEZWNvZGVyID0gX1NpbXBsZURlY29kZXIod2lyZV9m
b3JtYXQuV0lSRVRZUEVfVkFSSU5ULCBfRGVjb2RlVmFyaW50MzIpCi1VSW50NjREZWNvZGVyID0g
X1NpbXBsZURlY29kZXIod2lyZV9mb3JtYXQuV0lSRVRZUEVfVkFSSU5ULCBfRGVjb2RlVmFyaW50
KQotCi1TSW50MzJEZWNvZGVyID0gX01vZGlmaWVkRGVjb2RlcigKLSAgICB3aXJlX2Zvcm1hdC5X
SVJFVFlQRV9WQVJJTlQsIF9EZWNvZGVWYXJpbnQzMiwgd2lyZV9mb3JtYXQuWmlnWmFnRGVjb2Rl
KQotU0ludDY0RGVjb2RlciA9IF9Nb2RpZmllZERlY29kZXIoCi0gICAgd2lyZV9mb3JtYXQuV0lS
RVRZUEVfVkFSSU5ULCBfRGVjb2RlVmFyaW50LCB3aXJlX2Zvcm1hdC5aaWdaYWdEZWNvZGUpCi0K
LSMgTm90ZSB0aGF0IFB5dGhvbiBjb252ZW5pZW50bHkgZ3VhcmFudGVlcyB0aGF0IHdoZW4gdXNp
bmcgdGhlICc8JyBwcmVmaXggb24KLSMgZm9ybWF0cywgdGhleSB3aWxsIGFsc28gaGF2ZSB0aGUg
c2FtZSBzaXplIGFjcm9zcyBhbGwgcGxhdGZvcm1zIChhcyBvcHBvc2VkCi0jIHRvIHdpdGhvdXQg
dGhlIHByZWZpeCwgd2hlcmUgdGhlaXIgc2l6ZXMgZGVwZW5kIG9uIHRoZSBDIGNvbXBpbGVyJ3Mg
YmFzaWMKLSMgdHlwZSBzaXplcykuCi1GaXhlZDMyRGVjb2RlciAgPSBfU3RydWN0UGFja0RlY29k
ZXIod2lyZV9mb3JtYXQuV0lSRVRZUEVfRklYRUQzMiwgJzxJJykKLUZpeGVkNjREZWNvZGVyICA9
IF9TdHJ1Y3RQYWNrRGVjb2Rlcih3aXJlX2Zvcm1hdC5XSVJFVFlQRV9GSVhFRDY0LCAnPFEnKQot
U0ZpeGVkMzJEZWNvZGVyID0gX1N0cnVjdFBhY2tEZWNvZGVyKHdpcmVfZm9ybWF0LldJUkVUWVBF
X0ZJWEVEMzIsICc8aScpCi1TRml4ZWQ2NERlY29kZXIgPSBfU3RydWN0UGFja0RlY29kZXIod2ly
ZV9mb3JtYXQuV0lSRVRZUEVfRklYRUQ2NCwgJzxxJykKLUZsb2F0RGVjb2RlciA9IF9GbG9hdERl
Y29kZXIoKQotRG91YmxlRGVjb2RlciA9IF9Eb3VibGVEZWNvZGVyKCkKLQotQm9vbERlY29kZXIg
PSBfTW9kaWZpZWREZWNvZGVyKAotICAgIHdpcmVfZm9ybWF0LldJUkVUWVBFX1ZBUklOVCwgX0Rl
Y29kZVZhcmludCwgYm9vbCkKLQotCi1kZWYgU3RyaW5nRGVjb2RlcihmaWVsZF9udW1iZXIsIGlz
X3JlcGVhdGVkLCBpc19wYWNrZWQsIGtleSwgbmV3X2RlZmF1bHQpOgotICAiIiJSZXR1cm5zIGEg
ZGVjb2RlciBmb3IgYSBzdHJpbmcgZmllbGQuIiIiCi0KLSAgbG9jYWxfRGVjb2RlVmFyaW50ID0g
X0RlY29kZVZhcmludAotICBsb2NhbF91bmljb2RlID0gc2l4LnRleHRfdHlwZQotCi0gIGRlZiBf
Q29udmVydFRvVW5pY29kZShieXRlX3N0cik6Ci0gICAgdHJ5OgotICAgICAgcmV0dXJuIGxvY2Fs
X3VuaWNvZGUoYnl0ZV9zdHIsICd1dGYtOCcpCi0gICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJv
ciBhcyBlOgotICAgICAgIyBhZGQgbW9yZSBpbmZvcm1hdGlvbiB0byB0aGUgZXJyb3IgbWVzc2Fn
ZSBhbmQgcmUtcmFpc2UgaXQuCi0gICAgICBlLnJlYXNvbiA9ICclcyBpbiBmaWVsZDogJXMnICUg
KGUsIGtleS5mdWxsX25hbWUpCi0gICAgICByYWlzZQotCi0gIGFzc2VydCBub3QgaXNfcGFja2Vk
Ci0gIGlmIGlzX3JlcGVhdGVkOgotICAgIHRhZ19ieXRlcyA9IGVuY29kZXIuVGFnQnl0ZXMoZmll
bGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lyZV9mb3JtYXQu
V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCkKLSAgICB0YWdfbGVuID0gbGVuKHRhZ19ieXRlcykK
LSAgICBkZWYgRGVjb2RlUmVwZWF0ZWRGaWVsZChidWZmZXIsIHBvcywgZW5kLCBtZXNzYWdlLCBm
aWVsZF9kaWN0KToKLSAgICAgIHZhbHVlID0gZmllbGRfZGljdC5nZXQoa2V5KQotICAgICAgaWYg
dmFsdWUgaXMgTm9uZToKLSAgICAgICAgdmFsdWUgPSBmaWVsZF9kaWN0LnNldGRlZmF1bHQoa2V5
LCBuZXdfZGVmYXVsdChtZXNzYWdlKSkKLSAgICAgIHdoaWxlIDE6Ci0gICAgICAgIChzaXplLCBw
b3MpID0gbG9jYWxfRGVjb2RlVmFyaW50KGJ1ZmZlciwgcG9zKQotICAgICAgICBuZXdfcG9zID0g
cG9zICsgc2l6ZQotICAgICAgICBpZiBuZXdfcG9zID4gZW5kOgotICAgICAgICAgIHJhaXNlIF9E
ZWNvZGVFcnJvcignVHJ1bmNhdGVkIHN0cmluZy4nKQotICAgICAgICB2YWx1ZS5hcHBlbmQoX0Nv
bnZlcnRUb1VuaWNvZGUoYnVmZmVyW3BvczpuZXdfcG9zXSkpCi0gICAgICAgICMgUHJlZGljdCB0
aGF0IHRoZSBuZXh0IHRhZyBpcyBhbm90aGVyIGNvcHkgb2YgdGhlIHNhbWUgcmVwZWF0ZWQgZmll
bGQuCi0gICAgICAgIHBvcyA9IG5ld19wb3MgKyB0YWdfbGVuCi0gICAgICAgIGlmIGJ1ZmZlcltu
ZXdfcG9zOnBvc10gIT0gdGFnX2J5dGVzIG9yIG5ld19wb3MgPT0gZW5kOgotICAgICAgICAgICMg
UHJlZGljdGlvbiBmYWlsZWQuICBSZXR1cm4uCi0gICAgICAgICAgcmV0dXJuIG5ld19wb3MKLSAg
ICByZXR1cm4gRGVjb2RlUmVwZWF0ZWRGaWVsZAotICBlbHNlOgotICAgIGRlZiBEZWNvZGVGaWVs
ZChidWZmZXIsIHBvcywgZW5kLCBtZXNzYWdlLCBmaWVsZF9kaWN0KToKLSAgICAgIChzaXplLCBw
b3MpID0gbG9jYWxfRGVjb2RlVmFyaW50KGJ1ZmZlciwgcG9zKQotICAgICAgbmV3X3BvcyA9IHBv
cyArIHNpemUKLSAgICAgIGlmIG5ld19wb3MgPiBlbmQ6Ci0gICAgICAgIHJhaXNlIF9EZWNvZGVF
cnJvcignVHJ1bmNhdGVkIHN0cmluZy4nKQotICAgICAgZmllbGRfZGljdFtrZXldID0gX0NvbnZl
cnRUb1VuaWNvZGUoYnVmZmVyW3BvczpuZXdfcG9zXSkKLSAgICAgIHJldHVybiBuZXdfcG9zCi0g
ICAgcmV0dXJuIERlY29kZUZpZWxkCi0KLQotZGVmIEJ5dGVzRGVjb2RlcihmaWVsZF9udW1iZXIs
IGlzX3JlcGVhdGVkLCBpc19wYWNrZWQsIGtleSwgbmV3X2RlZmF1bHQpOgotICAiIiJSZXR1cm5z
IGEgZGVjb2RlciBmb3IgYSBieXRlcyBmaWVsZC4iIiIKLQotICBsb2NhbF9EZWNvZGVWYXJpbnQg
PSBfRGVjb2RlVmFyaW50Ci0KLSAgYXNzZXJ0IG5vdCBpc19wYWNrZWQKLSAgaWYgaXNfcmVwZWF0
ZWQ6Ci0gICAgdGFnX2J5dGVzID0gZW5jb2Rlci5UYWdCeXRlcyhmaWVsZF9udW1iZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9MRU5HVEhf
REVMSU1JVEVEKQotICAgIHRhZ19sZW4gPSBsZW4odGFnX2J5dGVzKQotICAgIGRlZiBEZWNvZGVS
ZXBlYXRlZEZpZWxkKGJ1ZmZlciwgcG9zLCBlbmQsIG1lc3NhZ2UsIGZpZWxkX2RpY3QpOgotICAg
ICAgdmFsdWUgPSBmaWVsZF9kaWN0LmdldChrZXkpCi0gICAgICBpZiB2YWx1ZSBpcyBOb25lOgot
ICAgICAgICB2YWx1ZSA9IGZpZWxkX2RpY3Quc2V0ZGVmYXVsdChrZXksIG5ld19kZWZhdWx0KG1l
c3NhZ2UpKQotICAgICAgd2hpbGUgMToKLSAgICAgICAgKHNpemUsIHBvcykgPSBsb2NhbF9EZWNv
ZGVWYXJpbnQoYnVmZmVyLCBwb3MpCi0gICAgICAgIG5ld19wb3MgPSBwb3MgKyBzaXplCi0gICAg
ICAgIGlmIG5ld19wb3MgPiBlbmQ6Ci0gICAgICAgICAgcmFpc2UgX0RlY29kZUVycm9yKCdUcnVu
Y2F0ZWQgc3RyaW5nLicpCi0gICAgICAgIHZhbHVlLmFwcGVuZChidWZmZXJbcG9zOm5ld19wb3Nd
KQotICAgICAgICAjIFByZWRpY3QgdGhhdCB0aGUgbmV4dCB0YWcgaXMgYW5vdGhlciBjb3B5IG9m
IHRoZSBzYW1lIHJlcGVhdGVkIGZpZWxkLgotICAgICAgICBwb3MgPSBuZXdfcG9zICsgdGFnX2xl
bgotICAgICAgICBpZiBidWZmZXJbbmV3X3Bvczpwb3NdICE9IHRhZ19ieXRlcyBvciBuZXdfcG9z
ID09IGVuZDoKLSAgICAgICAgICAjIFByZWRpY3Rpb24gZmFpbGVkLiAgUmV0dXJuLgotICAgICAg
ICAgIHJldHVybiBuZXdfcG9zCi0gICAgcmV0dXJuIERlY29kZVJlcGVhdGVkRmllbGQKLSAgZWxz
ZToKLSAgICBkZWYgRGVjb2RlRmllbGQoYnVmZmVyLCBwb3MsIGVuZCwgbWVzc2FnZSwgZmllbGRf
ZGljdCk6Ci0gICAgICAoc2l6ZSwgcG9zKSA9IGxvY2FsX0RlY29kZVZhcmludChidWZmZXIsIHBv
cykKLSAgICAgIG5ld19wb3MgPSBwb3MgKyBzaXplCi0gICAgICBpZiBuZXdfcG9zID4gZW5kOgot
ICAgICAgICByYWlzZSBfRGVjb2RlRXJyb3IoJ1RydW5jYXRlZCBzdHJpbmcuJykKLSAgICAgIGZp
ZWxkX2RpY3Rba2V5XSA9IGJ1ZmZlcltwb3M6bmV3X3Bvc10KLSAgICAgIHJldHVybiBuZXdfcG9z
Ci0gICAgcmV0dXJuIERlY29kZUZpZWxkCi0KLQotZGVmIEdyb3VwRGVjb2RlcihmaWVsZF9udW1i
ZXIsIGlzX3JlcGVhdGVkLCBpc19wYWNrZWQsIGtleSwgbmV3X2RlZmF1bHQpOgotICAiIiJSZXR1
cm5zIGEgZGVjb2RlciBmb3IgYSBncm91cCBmaWVsZC4iIiIKLQotICBlbmRfdGFnX2J5dGVzID0g
ZW5jb2Rlci5UYWdCeXRlcyhmaWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpcmVfZm9ybWF0LldJUkVUWVBFX0VORF9HUk9VUCkKLSAgZW5kX3RhZ19sZW4g
PSBsZW4oZW5kX3RhZ19ieXRlcykKLQotICBhc3NlcnQgbm90IGlzX3BhY2tlZAotICBpZiBpc19y
ZXBlYXRlZDoKLSAgICB0YWdfYnl0ZXMgPSBlbmNvZGVyLlRhZ0J5dGVzKGZpZWxkX251bWJlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVfZm9ybWF0LldJUkVUWVBFX1NU
QVJUX0dST1VQKQotICAgIHRhZ19sZW4gPSBsZW4odGFnX2J5dGVzKQotICAgIGRlZiBEZWNvZGVS
ZXBlYXRlZEZpZWxkKGJ1ZmZlciwgcG9zLCBlbmQsIG1lc3NhZ2UsIGZpZWxkX2RpY3QpOgotICAg
ICAgdmFsdWUgPSBmaWVsZF9kaWN0LmdldChrZXkpCi0gICAgICBpZiB2YWx1ZSBpcyBOb25lOgot
ICAgICAgICB2YWx1ZSA9IGZpZWxkX2RpY3Quc2V0ZGVmYXVsdChrZXksIG5ld19kZWZhdWx0KG1l
c3NhZ2UpKQotICAgICAgd2hpbGUgMToKLSAgICAgICAgdmFsdWUgPSBmaWVsZF9kaWN0LmdldChr
ZXkpCi0gICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgdmFsdWUgPSBmaWVsZF9k
aWN0LnNldGRlZmF1bHQoa2V5LCBuZXdfZGVmYXVsdChtZXNzYWdlKSkKLSAgICAgICAgIyBSZWFk
IHN1Yi1tZXNzYWdlLgotICAgICAgICBwb3MgPSB2YWx1ZS5hZGQoKS5fSW50ZXJuYWxQYXJzZShi
dWZmZXIsIHBvcywgZW5kKQotICAgICAgICAjIFJlYWQgZW5kIHRhZy4KLSAgICAgICAgbmV3X3Bv
cyA9IHBvcytlbmRfdGFnX2xlbgotICAgICAgICBpZiBidWZmZXJbcG9zOm5ld19wb3NdICE9IGVu
ZF90YWdfYnl0ZXMgb3IgbmV3X3BvcyA+IGVuZDoKLSAgICAgICAgICByYWlzZSBfRGVjb2RlRXJy
b3IoJ01pc3NpbmcgZ3JvdXAgZW5kIHRhZy4nKQotICAgICAgICAjIFByZWRpY3QgdGhhdCB0aGUg
bmV4dCB0YWcgaXMgYW5vdGhlciBjb3B5IG9mIHRoZSBzYW1lIHJlcGVhdGVkIGZpZWxkLgotICAg
ICAgICBwb3MgPSBuZXdfcG9zICsgdGFnX2xlbgotICAgICAgICBpZiBidWZmZXJbbmV3X3Bvczpw
b3NdICE9IHRhZ19ieXRlcyBvciBuZXdfcG9zID09IGVuZDoKLSAgICAgICAgICAjIFByZWRpY3Rp
b24gZmFpbGVkLiAgUmV0dXJuLgotICAgICAgICAgIHJldHVybiBuZXdfcG9zCi0gICAgcmV0dXJu
IERlY29kZVJlcGVhdGVkRmllbGQKLSAgZWxzZToKLSAgICBkZWYgRGVjb2RlRmllbGQoYnVmZmVy
LCBwb3MsIGVuZCwgbWVzc2FnZSwgZmllbGRfZGljdCk6Ci0gICAgICB2YWx1ZSA9IGZpZWxkX2Rp
Y3QuZ2V0KGtleSkKLSAgICAgIGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAgICAgIHZhbHVlID0gZmll
bGRfZGljdC5zZXRkZWZhdWx0KGtleSwgbmV3X2RlZmF1bHQobWVzc2FnZSkpCi0gICAgICAjIFJl
YWQgc3ViLW1lc3NhZ2UuCi0gICAgICBwb3MgPSB2YWx1ZS5fSW50ZXJuYWxQYXJzZShidWZmZXIs
IHBvcywgZW5kKQotICAgICAgIyBSZWFkIGVuZCB0YWcuCi0gICAgICBuZXdfcG9zID0gcG9zK2Vu
ZF90YWdfbGVuCi0gICAgICBpZiBidWZmZXJbcG9zOm5ld19wb3NdICE9IGVuZF90YWdfYnl0ZXMg
b3IgbmV3X3BvcyA+IGVuZDoKLSAgICAgICAgcmFpc2UgX0RlY29kZUVycm9yKCdNaXNzaW5nIGdy
b3VwIGVuZCB0YWcuJykKLSAgICAgIHJldHVybiBuZXdfcG9zCi0gICAgcmV0dXJuIERlY29kZUZp
ZWxkCi0KLQotZGVmIE1lc3NhZ2VEZWNvZGVyKGZpZWxkX251bWJlciwgaXNfcmVwZWF0ZWQsIGlz
X3BhY2tlZCwga2V5LCBuZXdfZGVmYXVsdCk6Ci0gICIiIlJldHVybnMgYSBkZWNvZGVyIGZvciBh
IG1lc3NhZ2UgZmllbGQuIiIiCi0KLSAgbG9jYWxfRGVjb2RlVmFyaW50ID0gX0RlY29kZVZhcmlu
dAotCi0gIGFzc2VydCBub3QgaXNfcGFja2VkCi0gIGlmIGlzX3JlcGVhdGVkOgotICAgIHRhZ19i
eXRlcyA9IGVuY29kZXIuVGFnQnl0ZXMoZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2lyZV9mb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCkKLSAg
ICB0YWdfbGVuID0gbGVuKHRhZ19ieXRlcykKLSAgICBkZWYgRGVjb2RlUmVwZWF0ZWRGaWVsZChi
dWZmZXIsIHBvcywgZW5kLCBtZXNzYWdlLCBmaWVsZF9kaWN0KToKLSAgICAgIHZhbHVlID0gZmll
bGRfZGljdC5nZXQoa2V5KQotICAgICAgaWYgdmFsdWUgaXMgTm9uZToKLSAgICAgICAgdmFsdWUg
PSBmaWVsZF9kaWN0LnNldGRlZmF1bHQoa2V5LCBuZXdfZGVmYXVsdChtZXNzYWdlKSkKLSAgICAg
IHdoaWxlIDE6Ci0gICAgICAgICMgUmVhZCBsZW5ndGguCi0gICAgICAgIChzaXplLCBwb3MpID0g
bG9jYWxfRGVjb2RlVmFyaW50KGJ1ZmZlciwgcG9zKQotICAgICAgICBuZXdfcG9zID0gcG9zICsg
c2l6ZQotICAgICAgICBpZiBuZXdfcG9zID4gZW5kOgotICAgICAgICAgIHJhaXNlIF9EZWNvZGVF
cnJvcignVHJ1bmNhdGVkIG1lc3NhZ2UuJykKLSAgICAgICAgIyBSZWFkIHN1Yi1tZXNzYWdlLgot
ICAgICAgICBpZiB2YWx1ZS5hZGQoKS5fSW50ZXJuYWxQYXJzZShidWZmZXIsIHBvcywgbmV3X3Bv
cykgIT0gbmV3X3BvczoKLSAgICAgICAgICAjIFRoZSBvbmx5IHJlYXNvbiBfSW50ZXJuYWxQYXJz
ZSB3b3VsZCByZXR1cm4gZWFybHkgaXMgaWYgaXQKLSAgICAgICAgICAjIGVuY291bnRlcmVkIGFu
IGVuZC1ncm91cCB0YWcuCi0gICAgICAgICAgcmFpc2UgX0RlY29kZUVycm9yKCdVbmV4cGVjdGVk
IGVuZC1ncm91cCB0YWcuJykKLSAgICAgICAgIyBQcmVkaWN0IHRoYXQgdGhlIG5leHQgdGFnIGlz
IGFub3RoZXIgY29weSBvZiB0aGUgc2FtZSByZXBlYXRlZCBmaWVsZC4KLSAgICAgICAgcG9zID0g
bmV3X3BvcyArIHRhZ19sZW4KLSAgICAgICAgaWYgYnVmZmVyW25ld19wb3M6cG9zXSAhPSB0YWdf
Ynl0ZXMgb3IgbmV3X3BvcyA9PSBlbmQ6Ci0gICAgICAgICAgIyBQcmVkaWN0aW9uIGZhaWxlZC4g
IFJldHVybi4KLSAgICAgICAgICByZXR1cm4gbmV3X3BvcwotICAgIHJldHVybiBEZWNvZGVSZXBl
YXRlZEZpZWxkCi0gIGVsc2U6Ci0gICAgZGVmIERlY29kZUZpZWxkKGJ1ZmZlciwgcG9zLCBlbmQs
IG1lc3NhZ2UsIGZpZWxkX2RpY3QpOgotICAgICAgdmFsdWUgPSBmaWVsZF9kaWN0LmdldChrZXkp
Ci0gICAgICBpZiB2YWx1ZSBpcyBOb25lOgotICAgICAgICB2YWx1ZSA9IGZpZWxkX2RpY3Quc2V0
ZGVmYXVsdChrZXksIG5ld19kZWZhdWx0KG1lc3NhZ2UpKQotICAgICAgIyBSZWFkIGxlbmd0aC4K
LSAgICAgIChzaXplLCBwb3MpID0gbG9jYWxfRGVjb2RlVmFyaW50KGJ1ZmZlciwgcG9zKQotICAg
ICAgbmV3X3BvcyA9IHBvcyArIHNpemUKLSAgICAgIGlmIG5ld19wb3MgPiBlbmQ6Ci0gICAgICAg
IHJhaXNlIF9EZWNvZGVFcnJvcignVHJ1bmNhdGVkIG1lc3NhZ2UuJykKLSAgICAgICMgUmVhZCBz
dWItbWVzc2FnZS4KLSAgICAgIGlmIHZhbHVlLl9JbnRlcm5hbFBhcnNlKGJ1ZmZlciwgcG9zLCBu
ZXdfcG9zKSAhPSBuZXdfcG9zOgotICAgICAgICAjIFRoZSBvbmx5IHJlYXNvbiBfSW50ZXJuYWxQ
YXJzZSB3b3VsZCByZXR1cm4gZWFybHkgaXMgaWYgaXQgZW5jb3VudGVyZWQKLSAgICAgICAgIyBh
biBlbmQtZ3JvdXAgdGFnLgotICAgICAgICByYWlzZSBfRGVjb2RlRXJyb3IoJ1VuZXhwZWN0ZWQg
ZW5kLWdyb3VwIHRhZy4nKQotICAgICAgcmV0dXJuIG5ld19wb3MKLSAgICByZXR1cm4gRGVjb2Rl
RmllbGQKLQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1FU1NBR0VfU0VUX0lURU1fVEFHID0gZW5jb2Rl
ci5UYWdCeXRlcygxLCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9TVEFSVF9HUk9VUCkKLQotZGVmIE1l
c3NhZ2VTZXRJdGVtRGVjb2RlcihleHRlbnNpb25zX2J5X251bWJlcik6Ci0gICIiIlJldHVybnMg
YSBkZWNvZGVyIGZvciBhIE1lc3NhZ2VTZXQgaXRlbS4KLQotICBUaGUgcGFyYW1ldGVyIGlzIHRo
ZSBfZXh0ZW5zaW9uc19ieV9udW1iZXIgbWFwIGZvciB0aGUgbWVzc2FnZSBjbGFzcy4KLQotICBU
aGUgbWVzc2FnZSBzZXQgbWVzc2FnZSBsb29rcyBsaWtlIHRoaXM6Ci0gICAgbWVzc2FnZSBNZXNz
YWdlU2V0IHsKLSAgICAgIHJlcGVhdGVkIGdyb3VwIEl0ZW0gPSAxIHsKLSAgICAgICAgcmVxdWly
ZWQgaW50MzIgdHlwZV9pZCA9IDI7Ci0gICAgICAgIHJlcXVpcmVkIHN0cmluZyBtZXNzYWdlID0g
MzsKLSAgICAgIH0KLSAgICB9Ci0gICIiIgotCi0gIHR5cGVfaWRfdGFnX2J5dGVzID0gZW5jb2Rl
ci5UYWdCeXRlcygyLCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9WQVJJTlQpCi0gIG1lc3NhZ2VfdGFn
X2J5dGVzID0gZW5jb2Rlci5UYWdCeXRlcygzLCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9MRU5HVEhf
REVMSU1JVEVEKQotICBpdGVtX2VuZF90YWdfYnl0ZXMgPSBlbmNvZGVyLlRhZ0J5dGVzKDEsIHdp
cmVfZm9ybWF0LldJUkVUWVBFX0VORF9HUk9VUCkKLQotICBsb2NhbF9SZWFkVGFnID0gUmVhZFRh
ZwotICBsb2NhbF9EZWNvZGVWYXJpbnQgPSBfRGVjb2RlVmFyaW50Ci0gIGxvY2FsX1NraXBGaWVs
ZCA9IFNraXBGaWVsZAotCi0gIGRlZiBEZWNvZGVJdGVtKGJ1ZmZlciwgcG9zLCBlbmQsIG1lc3Nh
Z2UsIGZpZWxkX2RpY3QpOgotICAgIG1lc3NhZ2Vfc2V0X2l0ZW1fc3RhcnQgPSBwb3MKLSAgICB0
eXBlX2lkID0gLTEKLSAgICBtZXNzYWdlX3N0YXJ0ID0gLTEKLSAgICBtZXNzYWdlX2VuZCA9IC0x
Ci0KLSAgICAjIFRlY2huaWNhbGx5LCB0eXBlX2lkIGFuZCBtZXNzYWdlIGNhbiBhcHBlYXIgaW4g
YW55IG9yZGVyLCBzbyB3ZSBuZWVkCi0gICAgIyBhIGxpdHRsZSBsb29wIGhlcmUuCi0gICAgd2hp
bGUgMToKLSAgICAgICh0YWdfYnl0ZXMsIHBvcykgPSBsb2NhbF9SZWFkVGFnKGJ1ZmZlciwgcG9z
KQotICAgICAgaWYgdGFnX2J5dGVzID09IHR5cGVfaWRfdGFnX2J5dGVzOgotICAgICAgICAodHlw
ZV9pZCwgcG9zKSA9IGxvY2FsX0RlY29kZVZhcmludChidWZmZXIsIHBvcykKLSAgICAgIGVsaWYg
dGFnX2J5dGVzID09IG1lc3NhZ2VfdGFnX2J5dGVzOgotICAgICAgICAoc2l6ZSwgbWVzc2FnZV9z
dGFydCkgPSBsb2NhbF9EZWNvZGVWYXJpbnQoYnVmZmVyLCBwb3MpCi0gICAgICAgIHBvcyA9IG1l
c3NhZ2VfZW5kID0gbWVzc2FnZV9zdGFydCArIHNpemUKLSAgICAgIGVsaWYgdGFnX2J5dGVzID09
IGl0ZW1fZW5kX3RhZ19ieXRlczoKLSAgICAgICAgYnJlYWsKLSAgICAgIGVsc2U6Ci0gICAgICAg
IHBvcyA9IFNraXBGaWVsZChidWZmZXIsIHBvcywgZW5kLCB0YWdfYnl0ZXMpCi0gICAgICAgIGlm
IHBvcyA9PSAtMToKLSAgICAgICAgICByYWlzZSBfRGVjb2RlRXJyb3IoJ01pc3NpbmcgZ3JvdXAg
ZW5kIHRhZy4nKQotCi0gICAgaWYgcG9zID4gZW5kOgotICAgICAgcmFpc2UgX0RlY29kZUVycm9y
KCdUcnVuY2F0ZWQgbWVzc2FnZS4nKQotCi0gICAgaWYgdHlwZV9pZCA9PSAtMToKLSAgICAgIHJh
aXNlIF9EZWNvZGVFcnJvcignTWVzc2FnZVNldCBpdGVtIG1pc3NpbmcgdHlwZV9pZC4nKQotICAg
IGlmIG1lc3NhZ2Vfc3RhcnQgPT0gLTE6Ci0gICAgICByYWlzZSBfRGVjb2RlRXJyb3IoJ01lc3Nh
Z2VTZXQgaXRlbSBtaXNzaW5nIG1lc3NhZ2UuJykKLQotICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lv
bnNfYnlfbnVtYmVyLmdldCh0eXBlX2lkKQotICAgIGlmIGV4dGVuc2lvbiBpcyBub3QgTm9uZToK
LSAgICAgIHZhbHVlID0gZmllbGRfZGljdC5nZXQoZXh0ZW5zaW9uKQotICAgICAgaWYgdmFsdWUg
aXMgTm9uZToKLSAgICAgICAgdmFsdWUgPSBmaWVsZF9kaWN0LnNldGRlZmF1bHQoCi0gICAgICAg
ICAgICBleHRlbnNpb24sIGV4dGVuc2lvbi5tZXNzYWdlX3R5cGUuX2NvbmNyZXRlX2NsYXNzKCkp
Ci0gICAgICBpZiB2YWx1ZS5fSW50ZXJuYWxQYXJzZShidWZmZXIsIG1lc3NhZ2Vfc3RhcnQsbWVz
c2FnZV9lbmQpICE9IG1lc3NhZ2VfZW5kOgotICAgICAgICAjIFRoZSBvbmx5IHJlYXNvbiBfSW50
ZXJuYWxQYXJzZSB3b3VsZCByZXR1cm4gZWFybHkgaXMgaWYgaXQgZW5jb3VudGVyZWQKLSAgICAg
ICAgIyBhbiBlbmQtZ3JvdXAgdGFnLgotICAgICAgICByYWlzZSBfRGVjb2RlRXJyb3IoJ1VuZXhw
ZWN0ZWQgZW5kLWdyb3VwIHRhZy4nKQotICAgIGVsc2U6Ci0gICAgICBpZiBub3QgbWVzc2FnZS5f
dW5rbm93bl9maWVsZHM6Ci0gICAgICAgIG1lc3NhZ2UuX3Vua25vd25fZmllbGRzID0gW10KLSAg
ICAgIG1lc3NhZ2UuX3Vua25vd25fZmllbGRzLmFwcGVuZCgoTUVTU0FHRV9TRVRfSVRFTV9UQUcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclttZXNzYWdlX3Nl
dF9pdGVtX3N0YXJ0OnBvc10pKQotCi0gICAgcmV0dXJuIHBvcwotCi0gIHJldHVybiBEZWNvZGVJ
dGVtCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZGVmIE1hcERlY29kZXIoZmllbGRfZGVzY3JpcHRvciwg
bmV3X2RlZmF1bHQsIGlzX21lc3NhZ2VfbWFwKToKLSAgIiIiUmV0dXJucyBhIGRlY29kZXIgZm9y
IGEgbWFwIGZpZWxkLiIiIgotCi0gIGtleSA9IGZpZWxkX2Rlc2NyaXB0b3IKLSAgdGFnX2J5dGVz
ID0gZW5jb2Rlci5UYWdCeXRlcyhmaWVsZF9kZXNjcmlwdG9yLm51bWJlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVE
KQotICB0YWdfbGVuID0gbGVuKHRhZ19ieXRlcykKLSAgbG9jYWxfRGVjb2RlVmFyaW50ID0gX0Rl
Y29kZVZhcmludAotICAjIENhbid0IHJlYWQgX2NvbmNyZXRlX2NsYXNzIHlldDsgbWlnaHQgbm90
IGJlIGluaXRpYWxpemVkLgotICBtZXNzYWdlX3R5cGUgPSBmaWVsZF9kZXNjcmlwdG9yLm1lc3Nh
Z2VfdHlwZQotCi0gIGRlZiBEZWNvZGVNYXAoYnVmZmVyLCBwb3MsIGVuZCwgbWVzc2FnZSwgZmll
bGRfZGljdCk6Ci0gICAgc3VibXNnID0gbWVzc2FnZV90eXBlLl9jb25jcmV0ZV9jbGFzcygpCi0g
ICAgdmFsdWUgPSBmaWVsZF9kaWN0LmdldChrZXkpCi0gICAgaWYgdmFsdWUgaXMgTm9uZToKLSAg
ICAgIHZhbHVlID0gZmllbGRfZGljdC5zZXRkZWZhdWx0KGtleSwgbmV3X2RlZmF1bHQobWVzc2Fn
ZSkpCi0gICAgd2hpbGUgMToKLSAgICAgICMgUmVhZCBsZW5ndGguCi0gICAgICAoc2l6ZSwgcG9z
KSA9IGxvY2FsX0RlY29kZVZhcmludChidWZmZXIsIHBvcykKLSAgICAgIG5ld19wb3MgPSBwb3Mg
KyBzaXplCi0gICAgICBpZiBuZXdfcG9zID4gZW5kOgotICAgICAgICByYWlzZSBfRGVjb2RlRXJy
b3IoJ1RydW5jYXRlZCBtZXNzYWdlLicpCi0gICAgICAjIFJlYWQgc3ViLW1lc3NhZ2UuCi0gICAg
ICBzdWJtc2cuQ2xlYXIoKQotICAgICAgaWYgc3VibXNnLl9JbnRlcm5hbFBhcnNlKGJ1ZmZlciwg
cG9zLCBuZXdfcG9zKSAhPSBuZXdfcG9zOgotICAgICAgICAjIFRoZSBvbmx5IHJlYXNvbiBfSW50
ZXJuYWxQYXJzZSB3b3VsZCByZXR1cm4gZWFybHkgaXMgaWYgaXQKLSAgICAgICAgIyBlbmNvdW50
ZXJlZCBhbiBlbmQtZ3JvdXAgdGFnLgotICAgICAgICByYWlzZSBfRGVjb2RlRXJyb3IoJ1VuZXhw
ZWN0ZWQgZW5kLWdyb3VwIHRhZy4nKQotCi0gICAgICBpZiBpc19tZXNzYWdlX21hcDoKLSAgICAg
ICAgdmFsdWVbc3VibXNnLmtleV0uTWVyZ2VGcm9tKHN1Ym1zZy52YWx1ZSkKLSAgICAgIGVsc2U6
Ci0gICAgICAgIHZhbHVlW3N1Ym1zZy5rZXldID0gc3VibXNnLnZhbHVlCi0KLSAgICAgICMgUHJl
ZGljdCB0aGF0IHRoZSBuZXh0IHRhZyBpcyBhbm90aGVyIGNvcHkgb2YgdGhlIHNhbWUgcmVwZWF0
ZWQgZmllbGQuCi0gICAgICBwb3MgPSBuZXdfcG9zICsgdGFnX2xlbgotICAgICAgaWYgYnVmZmVy
W25ld19wb3M6cG9zXSAhPSB0YWdfYnl0ZXMgb3IgbmV3X3BvcyA9PSBlbmQ6Ci0gICAgICAgICMg
UHJlZGljdGlvbiBmYWlsZWQuICBSZXR1cm4uCi0gICAgICAgIHJldHVybiBuZXdfcG9zCi0KLSAg
cmV0dXJuIERlY29kZU1hcAotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE9wdGltaXphdGlvbiBpcyBub3Qg
YXMgaGVhdnkgaGVyZSBiZWNhdXNlIGNhbGxzIHRvIFNraXBGaWVsZCgpIGFyZSByYXJlLAotIyBl
eGNlcHQgZm9yIGhhbmRsaW5nIGVuZC1ncm91cCB0YWdzLgotCi1kZWYgX1NraXBWYXJpbnQoYnVm
ZmVyLCBwb3MsIGVuZCk6Ci0gICIiIlNraXAgYSB2YXJpbnQgdmFsdWUuICBSZXR1cm5zIHRoZSBu
ZXcgcG9zaXRpb24uIiIiCi0gICMgUHJldmlvdXNseSBvcmQoYnVmZmVyW3Bvc10pIHJhaXNlZCBJ
bmRleEVycm9yIHdoZW4gcG9zIGlzIG91dCBvZiByYW5nZS4KLSAgIyBXaXRoIHRoaXMgY29kZSwg
b3JkKGInJykgcmFpc2VzIFR5cGVFcnJvci4gIEJvdGggYXJlIGhhbmRsZWQgaW4KLSAgIyBweXRo
b25fbWVzc2FnZS5weSB0byBnZW5lcmF0ZSBhICdUcnVuY2F0ZWQgbWVzc2FnZScgZXJyb3IuCi0g
IHdoaWxlIG9yZChidWZmZXJbcG9zOnBvcysxXSkgJiAweDgwOgotICAgIHBvcyArPSAxCi0gIHBv
cyArPSAxCi0gIGlmIHBvcyA+IGVuZDoKLSAgICByYWlzZSBfRGVjb2RlRXJyb3IoJ1RydW5jYXRl
ZCBtZXNzYWdlLicpCi0gIHJldHVybiBwb3MKLQotZGVmIF9Ta2lwRml4ZWQ2NChidWZmZXIsIHBv
cywgZW5kKToKLSAgIiIiU2tpcCBhIGZpeGVkNjQgdmFsdWUuICBSZXR1cm5zIHRoZSBuZXcgcG9z
aXRpb24uIiIiCi0KLSAgcG9zICs9IDgKLSAgaWYgcG9zID4gZW5kOgotICAgIHJhaXNlIF9EZWNv
ZGVFcnJvcignVHJ1bmNhdGVkIG1lc3NhZ2UuJykKLSAgcmV0dXJuIHBvcwotCi1kZWYgX1NraXBM
ZW5ndGhEZWxpbWl0ZWQoYnVmZmVyLCBwb3MsIGVuZCk6Ci0gICIiIlNraXAgYSBsZW5ndGgtZGVs
aW1pdGVkIHZhbHVlLiAgUmV0dXJucyB0aGUgbmV3IHBvc2l0aW9uLiIiIgotCi0gIChzaXplLCBw
b3MpID0gX0RlY29kZVZhcmludChidWZmZXIsIHBvcykKLSAgcG9zICs9IHNpemUKLSAgaWYgcG9z
ID4gZW5kOgotICAgIHJhaXNlIF9EZWNvZGVFcnJvcignVHJ1bmNhdGVkIG1lc3NhZ2UuJykKLSAg
cmV0dXJuIHBvcwotCi1kZWYgX1NraXBHcm91cChidWZmZXIsIHBvcywgZW5kKToKLSAgIiIiU2tp
cCBzdWItZ3JvdXAuICBSZXR1cm5zIHRoZSBuZXcgcG9zaXRpb24uIiIiCi0KLSAgd2hpbGUgMToK
LSAgICAodGFnX2J5dGVzLCBwb3MpID0gUmVhZFRhZyhidWZmZXIsIHBvcykKLSAgICBuZXdfcG9z
ID0gU2tpcEZpZWxkKGJ1ZmZlciwgcG9zLCBlbmQsIHRhZ19ieXRlcykKLSAgICBpZiBuZXdfcG9z
ID09IC0xOgotICAgICAgcmV0dXJuIHBvcwotICAgIHBvcyA9IG5ld19wb3MKLQotZGVmIF9FbmRH
cm91cChidWZmZXIsIHBvcywgZW5kKToKLSAgIiIiU2tpcHBpbmcgYW4gRU5EX0dST1VQIHRhZyBy
ZXR1cm5zIC0xIHRvIHRlbGwgdGhlIHBhcmVudCBsb29wIHRvIGJyZWFrLiIiIgotCi0gIHJldHVy
biAtMQotCi1kZWYgX1NraXBGaXhlZDMyKGJ1ZmZlciwgcG9zLCBlbmQpOgotICAiIiJTa2lwIGEg
Zml4ZWQzMiB2YWx1ZS4gIFJldHVybnMgdGhlIG5ldyBwb3NpdGlvbi4iIiIKLQotICBwb3MgKz0g
NAotICBpZiBwb3MgPiBlbmQ6Ci0gICAgcmFpc2UgX0RlY29kZUVycm9yKCdUcnVuY2F0ZWQgbWVz
c2FnZS4nKQotICByZXR1cm4gcG9zCi0KLWRlZiBfUmFpc2VJbnZhbGlkV2lyZVR5cGUoYnVmZmVy
LCBwb3MsIGVuZCk6Ci0gICIiIlNraXAgZnVuY3Rpb24gZm9yIHVua25vd24gd2lyZSB0eXBlcy4g
IFJhaXNlcyBhbiBleGNlcHRpb24uIiIiCi0KLSAgcmFpc2UgX0RlY29kZUVycm9yKCdUYWcgaGFk
IGludmFsaWQgd2lyZSB0eXBlLicpCi0KLWRlZiBfRmllbGRTa2lwcGVyKCk6Ci0gICIiIkNvbnN0
cnVjdHMgdGhlIFNraXBGaWVsZCBmdW5jdGlvbi4iIiIKLQotICBXSVJFVFlQRV9UT19TS0lQUEVS
ID0gWwotICAgICAgX1NraXBWYXJpbnQsCi0gICAgICBfU2tpcEZpeGVkNjQsCi0gICAgICBfU2tp
cExlbmd0aERlbGltaXRlZCwKLSAgICAgIF9Ta2lwR3JvdXAsCi0gICAgICBfRW5kR3JvdXAsCi0g
ICAgICBfU2tpcEZpeGVkMzIsCi0gICAgICBfUmFpc2VJbnZhbGlkV2lyZVR5cGUsCi0gICAgICBf
UmFpc2VJbnZhbGlkV2lyZVR5cGUsCi0gICAgICBdCi0KLSAgd2lyZXR5cGVfbWFzayA9IHdpcmVf
Zm9ybWF0LlRBR19UWVBFX01BU0sKLQotICBkZWYgU2tpcEZpZWxkKGJ1ZmZlciwgcG9zLCBlbmQs
IHRhZ19ieXRlcyk6Ci0gICAgIiIiU2tpcHMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQgdGFn
LgotCi0gICAgfHBvc3wgc2hvdWxkIHBvaW50IHRvIHRoZSBieXRlIGltbWVkaWF0ZWx5IGFmdGVy
IHRoZSB0YWcuCi0KLSAgICBSZXR1cm5zOgotICAgICAgICBUaGUgbmV3IHBvc2l0aW9uIChhZnRl
ciB0aGUgdGFnIHZhbHVlKSwgb3IgLTEgaWYgdGhlIHRhZyBpcyBhbiBlbmQtZ3JvdXAKLSAgICAg
ICAgdGFnIChpbiB3aGljaCBjYXNlIHRoZSBjYWxsaW5nIGxvb3Agc2hvdWxkIGJyZWFrKS4KLSAg
ICAiIiIKLQotICAgICMgVGhlIHdpcmUgdHlwZSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IGJ5dGUg
c2luY2UgdmFyaW50cyBhcmUgbGl0dGxlLWVuZGlhbi4KLSAgICB3aXJlX3R5cGUgPSBvcmQodGFn
X2J5dGVzWzA6MV0pICYgd2lyZXR5cGVfbWFzawotICAgIHJldHVybiBXSVJFVFlQRV9UT19TS0lQ
UEVSW3dpcmVfdHlwZV0oYnVmZmVyLCBwb3MsIGVuZCkKLQotICByZXR1cm4gU2tpcEZpZWxkCi0K
LVNraXBGaWVsZCA9IF9GaWVsZFNraXBwZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3By
b3RvYnVmL2ludGVybmFsL2Rlc2NyaXB0b3JfZGF0YWJhc2VfdGVzdC5weSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2ds
ZS9wcm90b2J1Zi9pbnRlcm5hbC9kZXNjcmlwdG9yX2RhdGFiYXNlX3Rlc3QucHkKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMjVhNDU4MjFkNDg5MjFiNWFmNDFkNTk1MGM5MjM3MTY1
MmMxNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRo
b24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2Rlc2NyaXB0b3JfZGF0YWJhc2VfdGVzdC5weQor
KysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLSMK
LSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0j
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotIiIiVGVzdHMgZm9yIGdvb2dsZS5wcm90b2J1Zi5kZXNjcmlwdG9yX2RhdGFiYXNl
LiIiIgotCi1fX2F1dGhvcl9fID0gJ21hdHRoZXd0b2lhQGdvb2dsZS5jb20gKE1hdHQgVG9pYSkn
Ci0KLXRyeToKLSAgaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdCAgI1BZMjYKLWV4Y2VwdCBJ
bXBvcnRFcnJvcjoKLSAgaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZ29vZ2xlLnByb3RvYnVmIGlt
cG9ydCBkZXNjcmlwdG9yX3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0
IGZhY3RvcnlfdGVzdDJfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRv
cl9kYXRhYmFzZQotCi0KLWNsYXNzIERlc2NyaXB0b3JEYXRhYmFzZVRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgotCi0gIGRlZiB0ZXN0QWRkKHNlbGYpOgotICAgIGRiID0gZGVzY3JpcHRvcl9kYXRh
YmFzZS5EZXNjcmlwdG9yRGF0YWJhc2UoKQotICAgIGZpbGVfZGVzY19wcm90byA9IGRlc2NyaXB0
b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8uRnJvbVN0cmluZygKLSAgICAgICAgZmFjdG9yeV90
ZXN0Ml9wYjIuREVTQ1JJUFRPUi5zZXJpYWxpemVkX3BiKQotICAgIGRiLkFkZChmaWxlX2Rlc2Nf
cHJvdG8pCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGVzY19wcm90bywgZGIuRmluZEZp
bGVCeU5hbWUoCi0gICAgICAgICdnb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZmFjdG9yeV90ZXN0
Mi5wcm90bycpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kZXNjX3Byb3RvLCBkYi5GaW5k
RmlsZUNvbnRhaW5pbmdTeW1ib2woCi0gICAgICAgICdnb29nbGUucHJvdG9idWYucHl0aG9uLmlu
dGVybmFsLkZhY3RvcnkyTWVzc2FnZScpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kZXNj
X3Byb3RvLCBkYi5GaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woCi0gICAgICAgICdnb29nbGUucHJv
dG9idWYucHl0aG9uLmludGVybmFsLkZhY3RvcnkyTWVzc2FnZS5OZXN0ZWRGYWN0b3J5Mk1lc3Nh
Z2UnKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGVzY19wcm90bywgZGIuRmluZEZpbGVD
b250YWluaW5nU3ltYm9sKAotICAgICAgICAnZ29vZ2xlLnByb3RvYnVmLnB5dGhvbi5pbnRlcm5h
bC5GYWN0b3J5MkVudW0nKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGVzY19wcm90bywg
ZGIuRmluZEZpbGVDb250YWluaW5nU3ltYm9sKAotICAgICAgICAnZ29vZ2xlLnByb3RvYnVmLnB5
dGhvbi5pbnRlcm5hbC5GYWN0b3J5Mk1lc3NhZ2UuTmVzdGVkRmFjdG9yeTJFbnVtJykpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbChmaWxlX2Rlc2NfcHJvdG8sIGRiLkZpbmRGaWxlQ29udGFpbmluZ1N5
bWJvbCgKLSAgICAgICAgJ2dvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwuTWVzc2FnZVdp
dGhOZXN0ZWRFbnVtT25seS5OZXN0ZWRFbnVtJykpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVm
L2ludGVybmFsL2Rlc2NyaXB0b3JfcG9vbF90ZXN0LnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVm
L2ludGVybmFsL2Rlc2NyaXB0b3JfcG9vbF90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2YTEzZTBiY2YwYjk3OTZkOGE5ZTczNGFmMjJlNzk3ODUwZGYyYjhlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90
b2J1Zi9pbnRlcm5hbC9kZXNjcmlwdG9yX3Bvb2xfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0x
LDc1MCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlRlc3Rz
IGZvciBnb29nbGUucHJvdG9idWYuZGVzY3JpcHRvcl9wb29sLiIiIgotCi1fX2F1dGhvcl9fID0g
J21hdHRoZXd0b2lhQGdvb2dsZS5jb20gKE1hdHQgVG9pYSknCi0KLWltcG9ydCBvcwotaW1wb3J0
IHN5cwotCi10cnk6Ci0gIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QgICNQWTI2Ci1leGNl
cHQgSW1wb3J0RXJyb3I6Ci0gIGltcG9ydCB1bml0dGVzdAotCi1mcm9tIGdvb2dsZS5wcm90b2J1
ZiBpbXBvcnQgdW5pdHRlc3RfaW1wb3J0X3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0
IHVuaXR0ZXN0X2ltcG9ydF9wdWJsaWNfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQg
dW5pdHRlc3RfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wYjIK
LWZyb20gZ29vZ2xlLnByb3RvYnVmLmludGVybmFsIGltcG9ydCBhcGlfaW1wbGVtZW50YXRpb24K
LWZyb20gZ29vZ2xlLnByb3RvYnVmLmludGVybmFsIGltcG9ydCBkZXNjcmlwdG9yX3Bvb2xfdGVz
dDFfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbCBpbXBvcnQgZGVzY3JpcHRvcl9w
b29sX3Rlc3QyX3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IGZhY3Rv
cnlfdGVzdDFfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbCBpbXBvcnQgZmFjdG9y
eV90ZXN0Ml9wYjIKLWZyb20gZ29vZ2xlLnByb3RvYnVmLmludGVybmFsIGltcG9ydCBtb3JlX21l
c3NhZ2VzX3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IGRlc2NyaXB0b3IKLWZyb20g
Z29vZ2xlLnByb3RvYnVmIGltcG9ydCBkZXNjcmlwdG9yX2RhdGFiYXNlCi1mcm9tIGdvb2dsZS5w
cm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wb29sCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBv
cnQgbWVzc2FnZV9mYWN0b3J5Ci1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgc3ltYm9sX2Rh
dGFiYXNlCi0KLQotY2xhc3MgRGVzY3JpcHRvclBvb2xUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
LQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5wb29sID0gZGVzY3JpcHRvcl9wb29sLkRl
c2NyaXB0b3JQb29sKCkKLSAgICBzZWxmLmZhY3RvcnlfdGVzdDFfZmQgPSBkZXNjcmlwdG9yX3Bi
Mi5GaWxlRGVzY3JpcHRvclByb3RvLkZyb21TdHJpbmcoCi0gICAgICAgIGZhY3RvcnlfdGVzdDFf
cGIyLkRFU0NSSVBUT1Iuc2VyaWFsaXplZF9wYikKLSAgICBzZWxmLmZhY3RvcnlfdGVzdDJfZmQg
PSBkZXNjcmlwdG9yX3BiMi5GaWxlRGVzY3JpcHRvclByb3RvLkZyb21TdHJpbmcoCi0gICAgICAg
IGZhY3RvcnlfdGVzdDJfcGIyLkRFU0NSSVBUT1Iuc2VyaWFsaXplZF9wYikKLSAgICBzZWxmLnBv
b2wuQWRkKHNlbGYuZmFjdG9yeV90ZXN0MV9mZCkKLSAgICBzZWxmLnBvb2wuQWRkKHNlbGYuZmFj
dG9yeV90ZXN0Ml9mZCkKLQotICBkZWYgdGVzdEZpbmRGaWxlQnlOYW1lKHNlbGYpOgotICAgIG5h
bWUxID0gJ2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9mYWN0b3J5X3Rlc3QxLnByb3RvJwotICAg
IGZpbGVfZGVzYzEgPSBzZWxmLnBvb2wuRmluZEZpbGVCeU5hbWUobmFtZTEpCi0gICAgc2VsZi5h
c3NlcnRJc0luc3RhbmNlKGZpbGVfZGVzYzEsIGRlc2NyaXB0b3IuRmlsZURlc2NyaXB0b3IpCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lMSwgZmlsZV9kZXNjMS5uYW1lKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ2dvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwnLCBmaWxlX2Rlc2MxLnBh
Y2thZ2UpCi0gICAgc2VsZi5hc3NlcnRJbignRmFjdG9yeTFNZXNzYWdlJywgZmlsZV9kZXNjMS5t
ZXNzYWdlX3R5cGVzX2J5X25hbWUpCi0KLSAgICBuYW1lMiA9ICdnb29nbGUvcHJvdG9idWYvaW50
ZXJuYWwvZmFjdG9yeV90ZXN0Mi5wcm90bycKLSAgICBmaWxlX2Rlc2MyID0gc2VsZi5wb29sLkZp
bmRGaWxlQnlOYW1lKG5hbWUyKQotICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaWxlX2Rlc2My
LCBkZXNjcmlwdG9yLkZpbGVEZXNjcmlwdG9yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZTIs
IGZpbGVfZGVzYzIubmFtZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdnb29nbGUucHJvdG9idWYu
cHl0aG9uLmludGVybmFsJywgZmlsZV9kZXNjMi5wYWNrYWdlKQotICAgIHNlbGYuYXNzZXJ0SW4o
J0ZhY3RvcnkyTWVzc2FnZScsIGZpbGVfZGVzYzIubWVzc2FnZV90eXBlc19ieV9uYW1lKQotCi0g
IGRlZiB0ZXN0RmluZEZpbGVCeU5hbWVGYWlsdXJlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3Nl
cnRSYWlzZXMoS2V5RXJyb3IpOgotICAgICAgc2VsZi5wb29sLkZpbmRGaWxlQnlOYW1lKCdEb2Vz
IG5vdCBleGlzdCcpCi0KLSAgZGVmIHRlc3RGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woc2VsZik6
Ci0gICAgZmlsZV9kZXNjMSA9IHNlbGYucG9vbC5GaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woCi0g
ICAgICAgICdnb29nbGUucHJvdG9idWYucHl0aG9uLmludGVybmFsLkZhY3RvcnkxTWVzc2FnZScp
Ci0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpbGVfZGVzYzEsIGRlc2NyaXB0b3IuRmlsZURl
c2NyaXB0b3IpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFs
L2ZhY3RvcnlfdGVzdDEucHJvdG8nLAotICAgICAgICAgICAgICAgICAgICAgZmlsZV9kZXNjMS5u
YW1lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2dvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJu
YWwnLCBmaWxlX2Rlc2MxLnBhY2thZ2UpCi0gICAgc2VsZi5hc3NlcnRJbignRmFjdG9yeTFNZXNz
YWdlJywgZmlsZV9kZXNjMS5tZXNzYWdlX3R5cGVzX2J5X25hbWUpCi0KLSAgICBmaWxlX2Rlc2My
ID0gc2VsZi5wb29sLkZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbCgKLSAgICAgICAgJ2dvb2dsZS5w
cm90b2J1Zi5weXRob24uaW50ZXJuYWwuRmFjdG9yeTJNZXNzYWdlJykKLSAgICBzZWxmLmFzc2Vy
dElzSW5zdGFuY2UoZmlsZV9kZXNjMiwgZGVzY3JpcHRvci5GaWxlRGVzY3JpcHRvcikKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKCdnb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZmFjdG9yeV90ZXN0Mi5w
cm90bycsCi0gICAgICAgICAgICAgICAgICAgICBmaWxlX2Rlc2MyLm5hbWUpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbCgnZ29vZ2xlLnByb3RvYnVmLnB5dGhvbi5pbnRlcm5hbCcsIGZpbGVfZGVzYzIu
cGFja2FnZSkKLSAgICBzZWxmLmFzc2VydEluKCdGYWN0b3J5Mk1lc3NhZ2UnLCBmaWxlX2Rlc2My
Lm1lc3NhZ2VfdHlwZXNfYnlfbmFtZSkKLQotICBkZWYgdGVzdEZpbmRGaWxlQ29udGFpbmluZ1N5
bWJvbEZhaWx1cmUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6
Ci0gICAgICBzZWxmLnBvb2wuRmluZEZpbGVDb250YWluaW5nU3ltYm9sKCdEb2VzIG5vdCBleGlz
dCcpCi0KLSAgZGVmIHRlc3RGaW5kTWVzc2FnZVR5cGVCeU5hbWUoc2VsZik6Ci0gICAgbXNnMSA9
IHNlbGYucG9vbC5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoCi0gICAgICAgICdnb29nbGUucHJvdG9i
dWYucHl0aG9uLmludGVybmFsLkZhY3RvcnkxTWVzc2FnZScpCi0gICAgc2VsZi5hc3NlcnRJc0lu
c3RhbmNlKG1zZzEsIGRlc2NyaXB0b3IuRGVzY3JpcHRvcikKLSAgICBzZWxmLmFzc2VydEVxdWFs
KCdGYWN0b3J5MU1lc3NhZ2UnLCBtc2cxLm5hbWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZ29v
Z2xlLnByb3RvYnVmLnB5dGhvbi5pbnRlcm5hbC5GYWN0b3J5MU1lc3NhZ2UnLAotICAgICAgICAg
ICAgICAgICAgICAgbXNnMS5mdWxsX25hbWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBt
c2cxLmNvbnRhaW5pbmdfdHlwZSkKLQotICAgIG5lc3RlZF9tc2cxID0gbXNnMS5uZXN0ZWRfdHlw
ZXNbMF0KLSAgICBzZWxmLmFzc2VydEVxdWFsKCdOZXN0ZWRGYWN0b3J5MU1lc3NhZ2UnLCBuZXN0
ZWRfbXNnMS5uYW1lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMSwgbmVzdGVkX21zZzEuY29u
dGFpbmluZ190eXBlKQotCi0gICAgbmVzdGVkX2VudW0xID0gbXNnMS5lbnVtX3R5cGVzWzBdCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgnTmVzdGVkRmFjdG9yeTFFbnVtJywgbmVzdGVkX2VudW0xLm5h
bWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtc2cxLCBuZXN0ZWRfZW51bTEuY29udGFpbmluZ190
eXBlKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbChuZXN0ZWRfbXNnMSwgbXNnMS5maWVsZHNfYnlf
bmFtZVsKLSAgICAgICAgJ25lc3RlZF9mYWN0b3J5XzFfbWVzc2FnZSddLm1lc3NhZ2VfdHlwZSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKG5lc3RlZF9lbnVtMSwgbXNnMS5maWVsZHNfYnlfbmFtZVsK
LSAgICAgICAgJ25lc3RlZF9mYWN0b3J5XzFfZW51bSddLmVudW1fdHlwZSkKLQotICAgIG1zZzIg
PSBzZWxmLnBvb2wuRmluZE1lc3NhZ2VUeXBlQnlOYW1lKAotICAgICAgICAnZ29vZ2xlLnByb3Rv
YnVmLnB5dGhvbi5pbnRlcm5hbC5GYWN0b3J5Mk1lc3NhZ2UnKQotICAgIHNlbGYuYXNzZXJ0SXNJ
bnN0YW5jZShtc2cyLCBkZXNjcmlwdG9yLkRlc2NyaXB0b3IpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgnRmFjdG9yeTJNZXNzYWdlJywgbXNnMi5uYW1lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2dv
b2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwuRmFjdG9yeTJNZXNzYWdlJywKLSAgICAgICAg
ICAgICAgICAgICAgIG1zZzIuZnVsbF9uYW1lKQotICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1zZzIu
Y29udGFpbmluZ190eXBlKQotCi0gICAgbmVzdGVkX21zZzIgPSBtc2cyLm5lc3RlZF90eXBlc1sw
XQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ05lc3RlZEZhY3RvcnkyTWVzc2FnZScsIG5lc3RlZF9t
c2cyLm5hbWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtc2cyLCBuZXN0ZWRfbXNnMi5jb250YWlu
aW5nX3R5cGUpCi0KLSAgICBuZXN0ZWRfZW51bTIgPSBtc2cyLmVudW1fdHlwZXNbMF0KLSAgICBz
ZWxmLmFzc2VydEVxdWFsKCdOZXN0ZWRGYWN0b3J5MkVudW0nLCBuZXN0ZWRfZW51bTIubmFtZSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIsIG5lc3RlZF9lbnVtMi5jb250YWluaW5nX3R5cGUp
Ci0KLSAgICBzZWxmLmFzc2VydEVxdWFsKG5lc3RlZF9tc2cyLCBtc2cyLmZpZWxkc19ieV9uYW1l
WwotICAgICAgICAnbmVzdGVkX2ZhY3RvcnlfMl9tZXNzYWdlJ10ubWVzc2FnZV90eXBlKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwobmVzdGVkX2VudW0yLCBtc2cyLmZpZWxkc19ieV9uYW1lWwotICAg
ICAgICAnbmVzdGVkX2ZhY3RvcnlfMl9lbnVtJ10uZW51bV90eXBlKQotCi0gICAgc2VsZi5hc3Nl
cnRUcnVlKG1zZzIuZmllbGRzX2J5X25hbWVbJ2ludF93aXRoX2RlZmF1bHQnXS5oYXNfZGVmYXVs
dF92YWx1ZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAxNzc2LCBtc2cyLmZpZWxk
c19ieV9uYW1lWydpbnRfd2l0aF9kZWZhdWx0J10uZGVmYXVsdF92YWx1ZSkKLQotICAgIHNlbGYu
YXNzZXJ0VHJ1ZSgKLSAgICAgICAgbXNnMi5maWVsZHNfYnlfbmFtZVsnZG91YmxlX3dpdGhfZGVm
YXVsdCddLmhhc19kZWZhdWx0X3ZhbHVlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAg
IDkuOTksIG1zZzIuZmllbGRzX2J5X25hbWVbJ2RvdWJsZV93aXRoX2RlZmF1bHQnXS5kZWZhdWx0
X3ZhbHVlKQotCi0gICAgc2VsZi5hc3NlcnRUcnVlKAotICAgICAgICBtc2cyLmZpZWxkc19ieV9u
YW1lWydzdHJpbmdfd2l0aF9kZWZhdWx0J10uaGFzX2RlZmF1bHRfdmFsdWUpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbCgKLSAgICAgICAgJ2hlbGxvIHdvcmxkJywgbXNnMi5maWVsZHNfYnlfbmFtZVsn
c3RyaW5nX3dpdGhfZGVmYXVsdCddLmRlZmF1bHRfdmFsdWUpCi0KLSAgICBzZWxmLmFzc2VydFRy
dWUobXNnMi5maWVsZHNfYnlfbmFtZVsnYm9vbF93aXRoX2RlZmF1bHQnXS5oYXNfZGVmYXVsdF92
YWx1ZSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKG1zZzIuZmllbGRzX2J5X25hbWVbJ2Jvb2xfd2l0
aF9kZWZhdWx0J10uZGVmYXVsdF92YWx1ZSkKLQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cyLmZp
ZWxkc19ieV9uYW1lWydlbnVtX3dpdGhfZGVmYXVsdCddLmhhc19kZWZhdWx0X3ZhbHVlKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIDEsIG1zZzIuZmllbGRzX2J5X25hbWVbJ2VudW1f
d2l0aF9kZWZhdWx0J10uZGVmYXVsdF92YWx1ZSkKLQotICAgIG1zZzMgPSBzZWxmLnBvb2wuRmlu
ZE1lc3NhZ2VUeXBlQnlOYW1lKAotICAgICAgICAnZ29vZ2xlLnByb3RvYnVmLnB5dGhvbi5pbnRl
cm5hbC5GYWN0b3J5Mk1lc3NhZ2UuTmVzdGVkRmFjdG9yeTJNZXNzYWdlJykKLSAgICBzZWxmLmFz
c2VydEVxdWFsKG5lc3RlZF9tc2cyLCBtc2czKQotCi0gICAgc2VsZi5hc3NlcnRUcnVlKG1zZzIu
ZmllbGRzX2J5X25hbWVbJ2J5dGVzX3dpdGhfZGVmYXVsdCddLmhhc19kZWZhdWx0X3ZhbHVlKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGInYVx4ZmJceDAwYycsCi0gICAgICAgIG1z
ZzIuZmllbGRzX2J5X25hbWVbJ2J5dGVzX3dpdGhfZGVmYXVsdCddLmRlZmF1bHRfdmFsdWUpCi0K
LSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihtc2cyLm9uZW9mcykpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgxLCBsZW4obXNnMi5vbmVvZnNfYnlfbmFtZSkpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgyLCBsZW4obXNnMi5vbmVvZnNbMF0uZmllbGRzKSkKLSAgICBmb3IgbmFtZSBpbiBbJ29uZW9m
X2ludCcsICdvbmVvZl9zdHJpbmcnXToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMi5vbmVv
ZnNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgIG1zZzIuZmllbGRzX2J5X25hbWVbbmFtZV0u
Y29udGFpbmluZ19vbmVvZikKLSAgICAgIHNlbGYuYXNzZXJ0SW4obXNnMi5maWVsZHNfYnlfbmFt
ZVtuYW1lXSwgbXNnMi5vbmVvZnNbMF0uZmllbGRzKQotCi0gIGRlZiB0ZXN0RmluZE1lc3NhZ2VU
eXBlQnlOYW1lRmFpbHVyZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVy
cm9yKToKLSAgICAgIHNlbGYucG9vbC5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoJ0RvZXMgbm90IGV4
aXN0JykKLQotICBkZWYgdGVzdEZpbmRFbnVtVHlwZUJ5TmFtZShzZWxmKToKLSAgICBlbnVtMSA9
IHNlbGYucG9vbC5GaW5kRW51bVR5cGVCeU5hbWUoCi0gICAgICAgICdnb29nbGUucHJvdG9idWYu
cHl0aG9uLmludGVybmFsLkZhY3RvcnkxRW51bScpCi0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNl
KGVudW0xLCBkZXNjcmlwdG9yLkVudW1EZXNjcmlwdG9yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgZW51bTEudmFsdWVzX2J5X25hbWVbJ0ZBQ1RPUllfMV9WQUxVRV8wJ10ubnVtYmVyKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMSwgZW51bTEudmFsdWVzX2J5X25hbWVbJ0ZBQ1RPUllfMV9WQUxV
RV8xJ10ubnVtYmVyKQotCi0gICAgbmVzdGVkX2VudW0xID0gc2VsZi5wb29sLkZpbmRFbnVtVHlw
ZUJ5TmFtZSgKLSAgICAgICAgJ2dvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwuRmFjdG9y
eTFNZXNzYWdlLk5lc3RlZEZhY3RvcnkxRW51bScpCi0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNl
KG5lc3RlZF9lbnVtMSwgZGVzY3JpcHRvci5FbnVtRGVzY3JpcHRvcikKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKAotICAgICAgICAwLCBuZXN0ZWRfZW51bTEudmFsdWVzX2J5X25hbWVbJ05FU1RFRF9G
QUNUT1JZXzFfVkFMVUVfMCddLm51bWJlcikKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAg
ICAxLCBuZXN0ZWRfZW51bTEudmFsdWVzX2J5X25hbWVbJ05FU1RFRF9GQUNUT1JZXzFfVkFMVUVf
MSddLm51bWJlcikKLQotICAgIGVudW0yID0gc2VsZi5wb29sLkZpbmRFbnVtVHlwZUJ5TmFtZSgK
LSAgICAgICAgJ2dvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwuRmFjdG9yeTJFbnVtJykK
LSAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW51bTIsIGRlc2NyaXB0b3IuRW51bURlc2NyaXB0
b3IpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBlbnVtMi52YWx1ZXNfYnlfbmFtZVsnRkFDVE9S
WV8yX1ZBTFVFXzAnXS5udW1iZXIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBlbnVtMi52YWx1
ZXNfYnlfbmFtZVsnRkFDVE9SWV8yX1ZBTFVFXzEnXS5udW1iZXIpCi0KLSAgICBuZXN0ZWRfZW51
bTIgPSBzZWxmLnBvb2wuRmluZEVudW1UeXBlQnlOYW1lKAotICAgICAgICAnZ29vZ2xlLnByb3Rv
YnVmLnB5dGhvbi5pbnRlcm5hbC5GYWN0b3J5Mk1lc3NhZ2UuTmVzdGVkRmFjdG9yeTJFbnVtJykK
LSAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobmVzdGVkX2VudW0yLCBkZXNjcmlwdG9yLkVudW1E
ZXNjcmlwdG9yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIDAsIG5lc3RlZF9lbnVt
Mi52YWx1ZXNfYnlfbmFtZVsnTkVTVEVEX0ZBQ1RPUllfMl9WQUxVRV8wJ10ubnVtYmVyKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIDEsIG5lc3RlZF9lbnVtMi52YWx1ZXNfYnlfbmFt
ZVsnTkVTVEVEX0ZBQ1RPUllfMl9WQUxVRV8xJ10ubnVtYmVyKQotCi0gIGRlZiB0ZXN0RmluZEVu
dW1UeXBlQnlOYW1lRmFpbHVyZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtl
eUVycm9yKToKLSAgICAgIHNlbGYucG9vbC5GaW5kRW51bVR5cGVCeU5hbWUoJ0RvZXMgbm90IGV4
aXN0JykKLQotICBkZWYgdGVzdEZpbmRGaWVsZEJ5TmFtZShzZWxmKToKLSAgICBmaWVsZCA9IHNl
bGYucG9vbC5GaW5kRmllbGRCeU5hbWUoCi0gICAgICAgICdnb29nbGUucHJvdG9idWYucHl0aG9u
LmludGVybmFsLkZhY3RvcnkxTWVzc2FnZS5saXN0X3ZhbHVlJykKLSAgICBzZWxmLmFzc2VydEVx
dWFsKGZpZWxkLm5hbWUsICdsaXN0X3ZhbHVlJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGZpZWxk
LmxhYmVsLCBmaWVsZC5MQUJFTF9SRVBFQVRFRCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2Vz
KEtleUVycm9yKToKLSAgICAgIHNlbGYucG9vbC5GaW5kRmllbGRCeU5hbWUoJ0RvZXMgbm90IGV4
aXN0JykKLQotICBkZWYgdGVzdEZpbmRFeHRlbnNpb25CeU5hbWUoc2VsZik6Ci0gICAgIyBBbiBl
eHRlbnNpb24gZGVmaW5lZCBpbiBhIG1lc3NhZ2UuCi0gICAgZXh0ZW5zaW9uID0gc2VsZi5wb29s
LkZpbmRFeHRlbnNpb25CeU5hbWUoCi0gICAgICAgICdnb29nbGUucHJvdG9idWYucHl0aG9uLmlu
dGVybmFsLkZhY3RvcnkyTWVzc2FnZS5vbmVfbW9yZV9maWVsZCcpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbChleHRlbnNpb24ubmFtZSwgJ29uZV9tb3JlX2ZpZWxkJykKLSAgICAjIEFuIGV4dGVuc2lv
biBkZWZpbmVkIGF0IGZpbGUgc2NvcGUuCi0gICAgZXh0ZW5zaW9uID0gc2VsZi5wb29sLkZpbmRF
eHRlbnNpb25CeU5hbWUoCi0gICAgICAgICdnb29nbGUucHJvdG9idWYucHl0aG9uLmludGVybmFs
LmFub3RoZXJfZmllbGQnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0ZW5zaW9uLm5hbWUsICdh
bm90aGVyX2ZpZWxkJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4dGVuc2lvbi5udW1iZXIsIDEw
MDIpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICBzZWxmLnBv
b2wuRmluZEZpZWxkQnlOYW1lKCdEb2VzIG5vdCBleGlzdCcpCi0KLSAgZGVmIHRlc3RFeHRlbnNp
b25zQXJlTm90RmllbGRzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJy
b3IpOgotICAgICAgc2VsZi5wb29sLkZpbmRGaWVsZEJ5TmFtZSgnZ29vZ2xlLnByb3RvYnVmLnB5
dGhvbi5pbnRlcm5hbC5hbm90aGVyX2ZpZWxkJykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2Vz
KEtleUVycm9yKToKLSAgICAgIHNlbGYucG9vbC5GaW5kRmllbGRCeU5hbWUoCi0gICAgICAgICAg
J2dvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwuRmFjdG9yeTJNZXNzYWdlLm9uZV9tb3Jl
X2ZpZWxkJykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgIHNl
bGYucG9vbC5GaW5kRXh0ZW5zaW9uQnlOYW1lKAotICAgICAgICAgICdnb29nbGUucHJvdG9idWYu
cHl0aG9uLmludGVybmFsLkZhY3RvcnkxTWVzc2FnZS5saXN0X3ZhbHVlJykKLQotICBkZWYgdGVz
dFVzZXJEZWZpbmVkREIoc2VsZik6Ci0gICAgZGIgPSBkZXNjcmlwdG9yX2RhdGFiYXNlLkRlc2Ny
aXB0b3JEYXRhYmFzZSgpCi0gICAgc2VsZi5wb29sID0gZGVzY3JpcHRvcl9wb29sLkRlc2NyaXB0
b3JQb29sKGRiKQotICAgIGRiLkFkZChzZWxmLmZhY3RvcnlfdGVzdDFfZmQpCi0gICAgZGIuQWRk
KHNlbGYuZmFjdG9yeV90ZXN0Ml9mZCkKLSAgICBzZWxmLnRlc3RGaW5kTWVzc2FnZVR5cGVCeU5h
bWUoKQotCi0gIGRlZiB0ZXN0QWRkU2VyaWFsaXplZEZpbGUoc2VsZik6Ci0gICAgc2VsZi5wb29s
ID0gZGVzY3JpcHRvcl9wb29sLkRlc2NyaXB0b3JQb29sKCkKLSAgICBzZWxmLnBvb2wuQWRkU2Vy
aWFsaXplZEZpbGUoc2VsZi5mYWN0b3J5X3Rlc3QxX2ZkLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCi0g
ICAgc2VsZi5wb29sLkFkZFNlcmlhbGl6ZWRGaWxlKHNlbGYuZmFjdG9yeV90ZXN0Ml9mZC5TZXJp
YWxpemVUb1N0cmluZygpKQotICAgIHNlbGYudGVzdEZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgpCi0K
LSAgZGVmIHRlc3RDb21wbGV4TmVzdGluZyhzZWxmKToKLSAgICBtb3JlX21lc3NhZ2VzX2Rlc2Mg
PSBkZXNjcmlwdG9yX3BiMi5GaWxlRGVzY3JpcHRvclByb3RvLkZyb21TdHJpbmcoCi0gICAgICAg
IG1vcmVfbWVzc2FnZXNfcGIyLkRFU0NSSVBUT1Iuc2VyaWFsaXplZF9wYikKLSAgICB0ZXN0MV9k
ZXNjID0gZGVzY3JpcHRvcl9wYjIuRmlsZURlc2NyaXB0b3JQcm90by5Gcm9tU3RyaW5nKAotICAg
ICAgICBkZXNjcmlwdG9yX3Bvb2xfdGVzdDFfcGIyLkRFU0NSSVBUT1Iuc2VyaWFsaXplZF9wYikK
LSAgICB0ZXN0Ml9kZXNjID0gZGVzY3JpcHRvcl9wYjIuRmlsZURlc2NyaXB0b3JQcm90by5Gcm9t
U3RyaW5nKAotICAgICAgICBkZXNjcmlwdG9yX3Bvb2xfdGVzdDJfcGIyLkRFU0NSSVBUT1Iuc2Vy
aWFsaXplZF9wYikKLSAgICBzZWxmLnBvb2wuQWRkKG1vcmVfbWVzc2FnZXNfZGVzYykKLSAgICBz
ZWxmLnBvb2wuQWRkKHRlc3QxX2Rlc2MpCi0gICAgc2VsZi5wb29sLkFkZCh0ZXN0Ml9kZXNjKQot
ICAgIFRFU1QxX0ZJTEUuQ2hlY2tGaWxlKHNlbGYsIHNlbGYucG9vbCkKLSAgICBURVNUMl9GSUxF
LkNoZWNrRmlsZShzZWxmLCBzZWxmLnBvb2wpCi0KLQotICBkZWYgdGVzdEVudW1EZWZhdWx0VmFs
dWUoc2VsZik6Ci0gICAgIiIiVGVzdCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBlbnVtcyB3aGljaCBk
b24ndCBzdGFydCBhdCB6ZXJvLiIiIgotICAgIGRlZiBfQ2hlY2tEZWZhdWx0VmFsdWUoZmlsZV9k
ZXNjcmlwdG9yKToKLSAgICAgIGRlZmF1bHRfdmFsdWUgPSAoZmlsZV9kZXNjcmlwdG9yCi0gICAg
ICAgICAgICAgICAgICAgICAgIC5tZXNzYWdlX3R5cGVzX2J5X25hbWVbJ0Rlc2NyaXB0b3JQb29s
VGVzdDEnXQotICAgICAgICAgICAgICAgICAgICAgICAuZmllbGRzX2J5X25hbWVbJ25lc3RlZF9l
bnVtJ10KLSAgICAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHRfdmFsdWUpCi0gICAgICBzZWxm
LmFzc2VydEVxdWFsKGRlZmF1bHRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGRlc2Ny
aXB0b3JfcG9vbF90ZXN0MV9wYjIuRGVzY3JpcHRvclBvb2xUZXN0MS5CRVRBKQotICAgICMgRmly
c3QgY2hlY2sgd2hhdCB0aGUgZ2VuZXJhdGVkIGRlc2NyaXB0b3IgY29udGFpbnMuCi0gICAgX0No
ZWNrRGVmYXVsdFZhbHVlKGRlc2NyaXB0b3JfcG9vbF90ZXN0MV9wYjIuREVTQ1JJUFRPUikKLSAg
ICAjIFRoZW4gY2hlY2sgdGhlIGdlbmVyYXRlZCBwb29sLiBOb3JtYWxseSB0aGlzIGlzIHRoZSBz
YW1lIGRlc2NyaXB0b3IuCi0gICAgZmlsZV9kZXNjcmlwdG9yID0gc3ltYm9sX2RhdGFiYXNlLkRl
ZmF1bHQoKS5wb29sLkZpbmRGaWxlQnlOYW1lKAotICAgICAgICAnZ29vZ2xlL3Byb3RvYnVmL2lu
dGVybmFsL2Rlc2NyaXB0b3JfcG9vbF90ZXN0MS5wcm90bycpCi0gICAgc2VsZi5hc3NlcnRJcyhm
aWxlX2Rlc2NyaXB0b3IsIGRlc2NyaXB0b3JfcG9vbF90ZXN0MV9wYjIuREVTQ1JJUFRPUikKLSAg
ICBfQ2hlY2tEZWZhdWx0VmFsdWUoZmlsZV9kZXNjcmlwdG9yKQotCi0gICAgIyBUaGVuIGNoZWNr
IHRoZSBkeW5hbWljIHBvb2wgYW5kIGl0cyBpbnRlcm5hbCBEZXNjcmlwdG9yRGF0YWJhc2UuCi0g
ICAgZGVzY3JpcHRvcl9wcm90byA9IGRlc2NyaXB0b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8u
RnJvbVN0cmluZygKLSAgICAgICAgZGVzY3JpcHRvcl9wb29sX3Rlc3QxX3BiMi5ERVNDUklQVE9S
LnNlcmlhbGl6ZWRfcGIpCi0gICAgc2VsZi5wb29sLkFkZChkZXNjcmlwdG9yX3Byb3RvKQotICAg
ICMgQW5kIGRvIHRoZSBzYW1lIGNoZWNrIGFzIGFib3ZlCi0gICAgZmlsZV9kZXNjcmlwdG9yID0g
c2VsZi5wb29sLkZpbmRGaWxlQnlOYW1lKAotICAgICAgICAnZ29vZ2xlL3Byb3RvYnVmL2ludGVy
bmFsL2Rlc2NyaXB0b3JfcG9vbF90ZXN0MS5wcm90bycpCi0gICAgX0NoZWNrRGVmYXVsdFZhbHVl
KGZpbGVfZGVzY3JpcHRvcikKLQotICBkZWYgdGVzdERlZmF1bHRWYWx1ZUZvckN1c3RvbU1lc3Nh
Z2VzKHNlbGYpOgotICAgICIiIkNoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBub24tZXhpc3Rl
bnQgZmllbGRzLiIiIgotICAgIGRlZiBfQ2hlY2tWYWx1ZUFuZFR5cGUodmFsdWUsIGV4cGVjdGVk
X3ZhbHVlLCBleHBlY3RlZF90eXBlKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIGV4
cGVjdGVkX3ZhbHVlKQotICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLCBleHBlY3Rl
ZF90eXBlKQotCi0gICAgZGVmIF9DaGVja0RlZmF1bHRWYWx1ZXMobXNnKToKLSAgICAgIHRyeToK
LSAgICAgICAgaW50NjQgPSBsb25nCi0gICAgICBleGNlcHQgTmFtZUVycm9yOiAgIyBQeXRob24z
Ci0gICAgICAgIGludDY0ID0gaW50Ci0gICAgICB0cnk6Ci0gICAgICAgIHVuaWNvZGVfdHlwZSA9
IHVuaWNvZGUKLSAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6ICAjIFB5dGhvbjMKLSAgICAgICAgdW5p
Y29kZV90eXBlID0gc3RyCi0gICAgICBfQ2hlY2tWYWx1ZUFuZFR5cGUobXNnLm9wdGlvbmFsX2lu
dDMyLCAwLCBpbnQpCi0gICAgICBfQ2hlY2tWYWx1ZUFuZFR5cGUobXNnLm9wdGlvbmFsX3VpbnQ2
NCwgMCwgKGludDY0LCBpbnQpKQotICAgICAgX0NoZWNrVmFsdWVBbmRUeXBlKG1zZy5vcHRpb25h
bF9mbG9hdCwgMCwgKGZsb2F0LCBpbnQpKQotICAgICAgX0NoZWNrVmFsdWVBbmRUeXBlKG1zZy5v
cHRpb25hbF9kb3VibGUsIDAsIChmbG9hdCwgaW50KSkKLSAgICAgIF9DaGVja1ZhbHVlQW5kVHlw
ZShtc2cub3B0aW9uYWxfYm9vbCwgRmFsc2UsIGJvb2wpCi0gICAgICBfQ2hlY2tWYWx1ZUFuZFR5
cGUobXNnLm9wdGlvbmFsX3N0cmluZywgdScnLCB1bmljb2RlX3R5cGUpCi0gICAgICBfQ2hlY2tW
YWx1ZUFuZFR5cGUobXNnLm9wdGlvbmFsX2J5dGVzLCBiJycsIGJ5dGVzKQotICAgICAgX0NoZWNr
VmFsdWVBbmRUeXBlKG1zZy5vcHRpb25hbF9uZXN0ZWRfZW51bSwgbXNnLkZPTywgaW50KQotICAg
ICMgRmlyc3QgZm9yIHRoZSBnZW5lcmF0ZWQgbWVzc2FnZQotICAgIF9DaGVja0RlZmF1bHRWYWx1
ZXModW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpKQotICAgICMgVGhlbiBmb3IgYSBtZXNzYWdl
IGJ1aWx0IHdpdGggZnJvbSB0aGUgRGVzY3JpcHRvclBvb2wuCi0gICAgcG9vbCA9IGRlc2NyaXB0
b3JfcG9vbC5EZXNjcmlwdG9yUG9vbCgpCi0gICAgcG9vbC5BZGQoZGVzY3JpcHRvcl9wYjIuRmls
ZURlc2NyaXB0b3JQcm90by5Gcm9tU3RyaW5nKAotICAgICAgICB1bml0dGVzdF9pbXBvcnRfcHVi
bGljX3BiMi5ERVNDUklQVE9SLnNlcmlhbGl6ZWRfcGIpKQotICAgIHBvb2wuQWRkKGRlc2NyaXB0
b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8uRnJvbVN0cmluZygKLSAgICAgICAgdW5pdHRlc3Rf
aW1wb3J0X3BiMi5ERVNDUklQVE9SLnNlcmlhbGl6ZWRfcGIpKQotICAgIHBvb2wuQWRkKGRlc2Ny
aXB0b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8uRnJvbVN0cmluZygKLSAgICAgICAgdW5pdHRl
c3RfcGIyLkRFU0NSSVBUT1Iuc2VyaWFsaXplZF9wYikpCi0gICAgbWVzc2FnZV9jbGFzcyA9IG1l
c3NhZ2VfZmFjdG9yeS5NZXNzYWdlRmFjdG9yeShwb29sKS5HZXRQcm90b3R5cGUoCi0gICAgICAg
IHBvb2wuRmluZE1lc3NhZ2VUeXBlQnlOYW1lKAotICAgICAgICAgICAgdW5pdHRlc3RfcGIyLlRl
c3RBbGxUeXBlcy5ERVNDUklQVE9SLmZ1bGxfbmFtZSkpCi0gICAgX0NoZWNrRGVmYXVsdFZhbHVl
cyhtZXNzYWdlX2NsYXNzKCkpCi0KLQotY2xhc3MgUHJvdG9GaWxlKG9iamVjdCk6Ci0KLSAgZGVm
IF9faW5pdF9fKHNlbGYsIG5hbWUsIHBhY2thZ2UsIG1lc3NhZ2VzLCBkZXBlbmRlbmNpZXM9Tm9u
ZSwKLSAgICAgICAgICAgICAgIHB1YmxpY19kZXBlbmRlbmNpZXM9Tm9uZSk6Ci0gICAgc2VsZi5u
YW1lID0gbmFtZQotICAgIHNlbGYucGFja2FnZSA9IHBhY2thZ2UKLSAgICBzZWxmLm1lc3NhZ2Vz
ID0gbWVzc2FnZXMKLSAgICBzZWxmLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcyBvciBbXQot
ICAgIHNlbGYucHVibGljX2RlcGVuZGVuY2llcyA9IHB1YmxpY19kZXBlbmRlbmNpZXMgb3IgW10K
LQotICBkZWYgQ2hlY2tGaWxlKHNlbGYsIHRlc3QsIHBvb2wpOgotICAgIGZpbGVfZGVzYyA9IHBv
b2wuRmluZEZpbGVCeU5hbWUoc2VsZi5uYW1lKQotICAgIHRlc3QuYXNzZXJ0RXF1YWwoc2VsZi5u
YW1lLCBmaWxlX2Rlc2MubmFtZSkKLSAgICB0ZXN0LmFzc2VydEVxdWFsKHNlbGYucGFja2FnZSwg
ZmlsZV9kZXNjLnBhY2thZ2UpCi0gICAgZGVwZW5kZW5jaWVzX25hbWVzID0gW2YubmFtZSBmb3Ig
ZiBpbiBmaWxlX2Rlc2MuZGVwZW5kZW5jaWVzXQotICAgIHRlc3QuYXNzZXJ0RXF1YWwoc2VsZi5k
ZXBlbmRlbmNpZXMsIGRlcGVuZGVuY2llc19uYW1lcykKLSAgICBwdWJsaWNfZGVwZW5kZW5jaWVz
X25hbWVzID0gW2YubmFtZSBmb3IgZiBpbiBmaWxlX2Rlc2MucHVibGljX2RlcGVuZGVuY2llc10K
LSAgICB0ZXN0LmFzc2VydEVxdWFsKHNlbGYucHVibGljX2RlcGVuZGVuY2llcywgcHVibGljX2Rl
cGVuZGVuY2llc19uYW1lcykKLSAgICBmb3IgbmFtZSwgbXNnX3R5cGUgaW4gc2VsZi5tZXNzYWdl
cy5pdGVtcygpOgotICAgICAgbXNnX3R5cGUuQ2hlY2tUeXBlKHRlc3QsIE5vbmUsIG5hbWUsIGZp
bGVfZGVzYykKLQotCi1jbGFzcyBFbnVtVHlwZShvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhz
ZWxmLCB2YWx1ZXMpOgotICAgIHNlbGYudmFsdWVzID0gdmFsdWVzCi0KLSAgZGVmIENoZWNrVHlw
ZShzZWxmLCB0ZXN0LCBtc2dfZGVzYywgbmFtZSwgZmlsZV9kZXNjKToKLSAgICBlbnVtX2Rlc2Mg
PSBtc2dfZGVzYy5lbnVtX3R5cGVzX2J5X25hbWVbbmFtZV0KLSAgICB0ZXN0LmFzc2VydEVxdWFs
KG5hbWUsIGVudW1fZGVzYy5uYW1lKQotICAgIGV4cGVjdGVkX2VudW1fZnVsbF9uYW1lID0gJy4n
LmpvaW4oW21zZ19kZXNjLmZ1bGxfbmFtZSwgbmFtZV0pCi0gICAgdGVzdC5hc3NlcnRFcXVhbChl
eHBlY3RlZF9lbnVtX2Z1bGxfbmFtZSwgZW51bV9kZXNjLmZ1bGxfbmFtZSkKLSAgICB0ZXN0LmFz
c2VydEVxdWFsKG1zZ19kZXNjLCBlbnVtX2Rlc2MuY29udGFpbmluZ190eXBlKQotICAgIHRlc3Qu
YXNzZXJ0RXF1YWwoZmlsZV9kZXNjLCBlbnVtX2Rlc2MuZmlsZSkKLSAgICBmb3IgaW5kZXgsICh2
YWx1ZSwgbnVtYmVyKSBpbiBlbnVtZXJhdGUoc2VsZi52YWx1ZXMpOgotICAgICAgdmFsdWVfZGVz
YyA9IGVudW1fZGVzYy52YWx1ZXNfYnlfbmFtZVt2YWx1ZV0KLSAgICAgIHRlc3QuYXNzZXJ0RXF1
YWwodmFsdWUsIHZhbHVlX2Rlc2MubmFtZSkKLSAgICAgIHRlc3QuYXNzZXJ0RXF1YWwoaW5kZXgs
IHZhbHVlX2Rlc2MuaW5kZXgpCi0gICAgICB0ZXN0LmFzc2VydEVxdWFsKG51bWJlciwgdmFsdWVf
ZGVzYy5udW1iZXIpCi0gICAgICB0ZXN0LmFzc2VydEVxdWFsKGVudW1fZGVzYywgdmFsdWVfZGVz
Yy50eXBlKQotICAgICAgdGVzdC5hc3NlcnRJbih2YWx1ZSwgbXNnX2Rlc2MuZW51bV92YWx1ZXNf
YnlfbmFtZSkKLQotCi1jbGFzcyBNZXNzYWdlVHlwZShvYmplY3QpOgotCi0gIGRlZiBfX2luaXRf
XyhzZWxmLCB0eXBlX2RpY3QsIGZpZWxkX2xpc3QsIGlzX2V4dGVuZGFibGU9RmFsc2UsCi0gICAg
ICAgICAgICAgICBleHRlbnNpb25zPU5vbmUpOgotICAgIHNlbGYudHlwZV9kaWN0ID0gdHlwZV9k
aWN0Ci0gICAgc2VsZi5maWVsZF9saXN0ID0gZmllbGRfbGlzdAotICAgIHNlbGYuaXNfZXh0ZW5k
YWJsZSA9IGlzX2V4dGVuZGFibGUKLSAgICBzZWxmLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zIG9y
IFtdCi0KLSAgZGVmIENoZWNrVHlwZShzZWxmLCB0ZXN0LCBjb250YWluaW5nX3R5cGVfZGVzYywg
bmFtZSwgZmlsZV9kZXNjKToKLSAgICBpZiBjb250YWluaW5nX3R5cGVfZGVzYyBpcyBOb25lOgot
ICAgICAgZGVzYyA9IGZpbGVfZGVzYy5tZXNzYWdlX3R5cGVzX2J5X25hbWVbbmFtZV0KLSAgICAg
IGV4cGVjdGVkX2Z1bGxfbmFtZSA9ICcuJy5qb2luKFtmaWxlX2Rlc2MucGFja2FnZSwgbmFtZV0p
Ci0gICAgZWxzZToKLSAgICAgIGRlc2MgPSBjb250YWluaW5nX3R5cGVfZGVzYy5uZXN0ZWRfdHlw
ZXNfYnlfbmFtZVtuYW1lXQotICAgICAgZXhwZWN0ZWRfZnVsbF9uYW1lID0gJy4nLmpvaW4oW2Nv
bnRhaW5pbmdfdHlwZV9kZXNjLmZ1bGxfbmFtZSwgbmFtZV0pCi0KLSAgICB0ZXN0LmFzc2VydEVx
dWFsKG5hbWUsIGRlc2MubmFtZSkKLSAgICB0ZXN0LmFzc2VydEVxdWFsKGV4cGVjdGVkX2Z1bGxf
bmFtZSwgZGVzYy5mdWxsX25hbWUpCi0gICAgdGVzdC5hc3NlcnRFcXVhbChjb250YWluaW5nX3R5
cGVfZGVzYywgZGVzYy5jb250YWluaW5nX3R5cGUpCi0gICAgdGVzdC5hc3NlcnRFcXVhbChkZXNj
LmZpbGUsIGZpbGVfZGVzYykKLSAgICB0ZXN0LmFzc2VydEVxdWFsKHNlbGYuaXNfZXh0ZW5kYWJs
ZSwgZGVzYy5pc19leHRlbmRhYmxlKQotICAgIGZvciBuYW1lLCBzdWJ0eXBlIGluIHNlbGYudHlw
ZV9kaWN0Lml0ZW1zKCk6Ci0gICAgICBzdWJ0eXBlLkNoZWNrVHlwZSh0ZXN0LCBkZXNjLCBuYW1l
LCBmaWxlX2Rlc2MpCi0KLSAgICBmb3IgaW5kZXgsIChuYW1lLCBmaWVsZCkgaW4gZW51bWVyYXRl
KHNlbGYuZmllbGRfbGlzdCk6Ci0gICAgICBmaWVsZC5DaGVja0ZpZWxkKHRlc3QsIGRlc2MsIG5h
bWUsIGluZGV4KQotCi0gICAgZm9yIGluZGV4LCAobmFtZSwgZmllbGQpIGluIGVudW1lcmF0ZShz
ZWxmLmV4dGVuc2lvbnMpOgotICAgICAgZmllbGQuQ2hlY2tGaWVsZCh0ZXN0LCBkZXNjLCBuYW1l
LCBpbmRleCkKLQotCi1jbGFzcyBFbnVtRmllbGQob2JqZWN0KToKLQotICBkZWYgX19pbml0X18o
c2VsZiwgbnVtYmVyLCB0eXBlX25hbWUsIGRlZmF1bHRfdmFsdWUpOgotICAgIHNlbGYubnVtYmVy
ID0gbnVtYmVyCi0gICAgc2VsZi50eXBlX25hbWUgPSB0eXBlX25hbWUKLSAgICBzZWxmLmRlZmF1
bHRfdmFsdWUgPSBkZWZhdWx0X3ZhbHVlCi0KLSAgZGVmIENoZWNrRmllbGQoc2VsZiwgdGVzdCwg
bXNnX2Rlc2MsIG5hbWUsIGluZGV4KToKLSAgICBmaWVsZF9kZXNjID0gbXNnX2Rlc2MuZmllbGRz
X2J5X25hbWVbbmFtZV0KLSAgICBlbnVtX2Rlc2MgPSBtc2dfZGVzYy5lbnVtX3R5cGVzX2J5X25h
bWVbc2VsZi50eXBlX25hbWVdCi0gICAgdGVzdC5hc3NlcnRFcXVhbChuYW1lLCBmaWVsZF9kZXNj
Lm5hbWUpCi0gICAgZXhwZWN0ZWRfZmllbGRfZnVsbF9uYW1lID0gJy4nLmpvaW4oW21zZ19kZXNj
LmZ1bGxfbmFtZSwgbmFtZV0pCi0gICAgdGVzdC5hc3NlcnRFcXVhbChleHBlY3RlZF9maWVsZF9m
dWxsX25hbWUsIGZpZWxkX2Rlc2MuZnVsbF9uYW1lKQotICAgIHRlc3QuYXNzZXJ0RXF1YWwoaW5k
ZXgsIGZpZWxkX2Rlc2MuaW5kZXgpCi0gICAgdGVzdC5hc3NlcnRFcXVhbChzZWxmLm51bWJlciwg
ZmllbGRfZGVzYy5udW1iZXIpCi0gICAgdGVzdC5hc3NlcnRFcXVhbChkZXNjcmlwdG9yLkZpZWxk
RGVzY3JpcHRvci5UWVBFX0VOVU0sIGZpZWxkX2Rlc2MudHlwZSkKLSAgICB0ZXN0LmFzc2VydEVx
dWFsKGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfRU5VTSwKLSAgICAgICAgICAg
ICAgICAgICAgIGZpZWxkX2Rlc2MuY3BwX3R5cGUpCi0gICAgdGVzdC5hc3NlcnRUcnVlKGZpZWxk
X2Rlc2MuaGFzX2RlZmF1bHRfdmFsdWUpCi0gICAgdGVzdC5hc3NlcnRFcXVhbChlbnVtX2Rlc2Mu
dmFsdWVzX2J5X25hbWVbc2VsZi5kZWZhdWx0X3ZhbHVlXS5udW1iZXIsCi0gICAgICAgICAgICAg
ICAgICAgICBmaWVsZF9kZXNjLmRlZmF1bHRfdmFsdWUpCi0gICAgdGVzdC5hc3NlcnRFcXVhbCht
c2dfZGVzYywgZmllbGRfZGVzYy5jb250YWluaW5nX3R5cGUpCi0gICAgdGVzdC5hc3NlcnRFcXVh
bChlbnVtX2Rlc2MsIGZpZWxkX2Rlc2MuZW51bV90eXBlKQotCi0KLWNsYXNzIE1lc3NhZ2VGaWVs
ZChvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBudW1iZXIsIHR5cGVfbmFtZSk6Ci0g
ICAgc2VsZi5udW1iZXIgPSBudW1iZXIKLSAgICBzZWxmLnR5cGVfbmFtZSA9IHR5cGVfbmFtZQot
Ci0gIGRlZiBDaGVja0ZpZWxkKHNlbGYsIHRlc3QsIG1zZ19kZXNjLCBuYW1lLCBpbmRleCk6Ci0g
ICAgZmllbGRfZGVzYyA9IG1zZ19kZXNjLmZpZWxkc19ieV9uYW1lW25hbWVdCi0gICAgZmllbGRf
dHlwZV9kZXNjID0gbXNnX2Rlc2MubmVzdGVkX3R5cGVzX2J5X25hbWVbc2VsZi50eXBlX25hbWVd
Ci0gICAgdGVzdC5hc3NlcnRFcXVhbChuYW1lLCBmaWVsZF9kZXNjLm5hbWUpCi0gICAgZXhwZWN0
ZWRfZmllbGRfZnVsbF9uYW1lID0gJy4nLmpvaW4oW21zZ19kZXNjLmZ1bGxfbmFtZSwgbmFtZV0p
Ci0gICAgdGVzdC5hc3NlcnRFcXVhbChleHBlY3RlZF9maWVsZF9mdWxsX25hbWUsIGZpZWxkX2Rl
c2MuZnVsbF9uYW1lKQotICAgIHRlc3QuYXNzZXJ0RXF1YWwoaW5kZXgsIGZpZWxkX2Rlc2MuaW5k
ZXgpCi0gICAgdGVzdC5hc3NlcnRFcXVhbChzZWxmLm51bWJlciwgZmllbGRfZGVzYy5udW1iZXIp
Ci0gICAgdGVzdC5hc3NlcnRFcXVhbChkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX01F
U1NBR0UsIGZpZWxkX2Rlc2MudHlwZSkKLSAgICB0ZXN0LmFzc2VydEVxdWFsKGRlc2NyaXB0b3Iu
RmllbGREZXNjcmlwdG9yLkNQUFRZUEVfTUVTU0FHRSwKLSAgICAgICAgICAgICAgICAgICAgIGZp
ZWxkX2Rlc2MuY3BwX3R5cGUpCi0gICAgdGVzdC5hc3NlcnRGYWxzZShmaWVsZF9kZXNjLmhhc19k
ZWZhdWx0X3ZhbHVlKQotICAgIHRlc3QuYXNzZXJ0RXF1YWwobXNnX2Rlc2MsIGZpZWxkX2Rlc2Mu
Y29udGFpbmluZ190eXBlKQotICAgIHRlc3QuYXNzZXJ0RXF1YWwoZmllbGRfdHlwZV9kZXNjLCBm
aWVsZF9kZXNjLm1lc3NhZ2VfdHlwZSkKLQotCi1jbGFzcyBTdHJpbmdGaWVsZChvYmplY3QpOgot
Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBudW1iZXIsIGRlZmF1bHRfdmFsdWUpOgotICAgIHNlbGYu
bnVtYmVyID0gbnVtYmVyCi0gICAgc2VsZi5kZWZhdWx0X3ZhbHVlID0gZGVmYXVsdF92YWx1ZQot
Ci0gIGRlZiBDaGVja0ZpZWxkKHNlbGYsIHRlc3QsIG1zZ19kZXNjLCBuYW1lLCBpbmRleCk6Ci0g
ICAgZmllbGRfZGVzYyA9IG1zZ19kZXNjLmZpZWxkc19ieV9uYW1lW25hbWVdCi0gICAgdGVzdC5h
c3NlcnRFcXVhbChuYW1lLCBmaWVsZF9kZXNjLm5hbWUpCi0gICAgZXhwZWN0ZWRfZmllbGRfZnVs
bF9uYW1lID0gJy4nLmpvaW4oW21zZ19kZXNjLmZ1bGxfbmFtZSwgbmFtZV0pCi0gICAgdGVzdC5h
c3NlcnRFcXVhbChleHBlY3RlZF9maWVsZF9mdWxsX25hbWUsIGZpZWxkX2Rlc2MuZnVsbF9uYW1l
KQotICAgIHRlc3QuYXNzZXJ0RXF1YWwoaW5kZXgsIGZpZWxkX2Rlc2MuaW5kZXgpCi0gICAgdGVz
dC5hc3NlcnRFcXVhbChzZWxmLm51bWJlciwgZmllbGRfZGVzYy5udW1iZXIpCi0gICAgdGVzdC5h
c3NlcnRFcXVhbChkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX1NUUklORywgZmllbGRf
ZGVzYy50eXBlKQotICAgIHRlc3QuYXNzZXJ0RXF1YWwoZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0
b3IuQ1BQVFlQRV9TVFJJTkcsCi0gICAgICAgICAgICAgICAgICAgICBmaWVsZF9kZXNjLmNwcF90
eXBlKQotICAgIHRlc3QuYXNzZXJ0VHJ1ZShmaWVsZF9kZXNjLmhhc19kZWZhdWx0X3ZhbHVlKQot
ICAgIHRlc3QuYXNzZXJ0RXF1YWwoc2VsZi5kZWZhdWx0X3ZhbHVlLCBmaWVsZF9kZXNjLmRlZmF1
bHRfdmFsdWUpCi0KLQotY2xhc3MgRXh0ZW5zaW9uRmllbGQob2JqZWN0KToKLQotICBkZWYgX19p
bml0X18oc2VsZiwgbnVtYmVyLCBleHRlbmRlZF90eXBlKToKLSAgICBzZWxmLm51bWJlciA9IG51
bWJlcgotICAgIHNlbGYuZXh0ZW5kZWRfdHlwZSA9IGV4dGVuZGVkX3R5cGUKLQotICBkZWYgQ2hl
Y2tGaWVsZChzZWxmLCB0ZXN0LCBtc2dfZGVzYywgbmFtZSwgaW5kZXgpOgotICAgIGZpZWxkX2Rl
c2MgPSBtc2dfZGVzYy5leHRlbnNpb25zX2J5X25hbWVbbmFtZV0KLSAgICB0ZXN0LmFzc2VydEVx
dWFsKG5hbWUsIGZpZWxkX2Rlc2MubmFtZSkKLSAgICBleHBlY3RlZF9maWVsZF9mdWxsX25hbWUg
PSAnLicuam9pbihbbXNnX2Rlc2MuZnVsbF9uYW1lLCBuYW1lXSkKLSAgICB0ZXN0LmFzc2VydEVx
dWFsKGV4cGVjdGVkX2ZpZWxkX2Z1bGxfbmFtZSwgZmllbGRfZGVzYy5mdWxsX25hbWUpCi0gICAg
dGVzdC5hc3NlcnRFcXVhbChzZWxmLm51bWJlciwgZmllbGRfZGVzYy5udW1iZXIpCi0gICAgdGVz
dC5hc3NlcnRFcXVhbChpbmRleCwgZmllbGRfZGVzYy5pbmRleCkKLSAgICB0ZXN0LmFzc2VydEVx
dWFsKGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfTUVTU0FHRSwgZmllbGRfZGVzYy50
eXBlKQotICAgIHRlc3QuYXNzZXJ0RXF1YWwoZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuQ1BQ
VFlQRV9NRVNTQUdFLAotICAgICAgICAgICAgICAgICAgICAgZmllbGRfZGVzYy5jcHBfdHlwZSkK
LSAgICB0ZXN0LmFzc2VydEZhbHNlKGZpZWxkX2Rlc2MuaGFzX2RlZmF1bHRfdmFsdWUpCi0gICAg
dGVzdC5hc3NlcnRUcnVlKGZpZWxkX2Rlc2MuaXNfZXh0ZW5zaW9uKQotICAgIHRlc3QuYXNzZXJ0
RXF1YWwobXNnX2Rlc2MsIGZpZWxkX2Rlc2MuZXh0ZW5zaW9uX3Njb3BlKQotICAgIHRlc3QuYXNz
ZXJ0RXF1YWwobXNnX2Rlc2MsIGZpZWxkX2Rlc2MubWVzc2FnZV90eXBlKQotICAgIHRlc3QuYXNz
ZXJ0RXF1YWwoc2VsZi5leHRlbmRlZF90eXBlLCBmaWVsZF9kZXNjLmNvbnRhaW5pbmdfdHlwZS5u
YW1lKQotCi0KLWNsYXNzIEFkZERlc2NyaXB0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQot
ICBkZWYgX1Rlc3RNZXNzYWdlKHNlbGYsIHByZWZpeCk6Ci0gICAgcG9vbCA9IGRlc2NyaXB0b3Jf
cG9vbC5EZXNjcmlwdG9yUG9vbCgpCi0gICAgcG9vbC5BZGREZXNjcmlwdG9yKHVuaXR0ZXN0X3Bi
Mi5UZXN0QWxsVHlwZXMuREVTQ1JJUFRPUikKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAg
ICAncHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzJywKLSAgICAgICAgcG9vbC5GaW5kTWVz
c2FnZVR5cGVCeU5hbWUoCi0gICAgICAgICAgICBwcmVmaXggKyAncHJvdG9idWZfdW5pdHRlc3Qu
VGVzdEFsbFR5cGVzJykuZnVsbF9uYW1lKQotCi0gICAgIyBBZGREZXNjcmlwdG9yIGlzIG5vdCBy
ZWN1cnNpdmUuCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICBw
b29sLkZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgKLSAgICAgICAgICBwcmVmaXggKyAncHJvdG9idWZf
dW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UnKQotCi0gICAgcG9vbC5BZGREZXNj
cmlwdG9yKHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZS5ERVNDUklQVE9S
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICdwcm90b2J1Zl91bml0dGVzdC5UZXN0
QWxsVHlwZXMuTmVzdGVkTWVzc2FnZScsCi0gICAgICAgIHBvb2wuRmluZE1lc3NhZ2VUeXBlQnlO
YW1lKAotICAgICAgICAgICAgcHJlZml4ICsgJ3Byb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBl
cy5OZXN0ZWRNZXNzYWdlJykuZnVsbF9uYW1lKQotCi0gICAgIyBGaWxlcyBhcmUgaW1wbGljaXRs
eSBhbHNvIGluZGV4ZWQgd2hlbiBtZXNzYWdlcyBhcmUgYWRkZWQuCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCgKLSAgICAgICAgJ2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wcm90bycsCi0gICAgICAg
IHBvb2wuRmluZEZpbGVCeU5hbWUoCi0gICAgICAgICAgICAnZ29vZ2xlL3Byb3RvYnVmL3VuaXR0
ZXN0LnByb3RvJykubmFtZSkKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICdnb29n
bGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8nLAotICAgICAgICBwb29sLkZpbmRGaWxlQ29udGFp
bmluZ1N5bWJvbCgKLSAgICAgICAgICAgIHByZWZpeCArICdwcm90b2J1Zl91bml0dGVzdC5UZXN0
QWxsVHlwZXMuTmVzdGVkTWVzc2FnZScpLm5hbWUpCi0KLSAgQHVuaXR0ZXN0LnNraXBJZihhcGlf
aW1wbGVtZW50YXRpb24uVHlwZSgpID09ICdjcHAnLAotICAgICAgICAgICAgICAgICAgICdXaXRo
IHRoZSBjcHAgaW1wbGVtZW50YXRpb24sIEFkZCgpIG11c3QgYmUgY2FsbGVkIGZpcnN0JykKLSAg
ZGVmIHRlc3RNZXNzYWdlKHNlbGYpOgotICAgIHNlbGYuX1Rlc3RNZXNzYWdlKCcnKQotICAgIHNl
bGYuX1Rlc3RNZXNzYWdlKCcuJykKLQotICBkZWYgX1Rlc3RFbnVtKHNlbGYsIHByZWZpeCk6Ci0g
ICAgcG9vbCA9IGRlc2NyaXB0b3JfcG9vbC5EZXNjcmlwdG9yUG9vbCgpCi0gICAgcG9vbC5BZGRF
bnVtRGVzY3JpcHRvcih1bml0dGVzdF9wYjIuRm9yZWlnbkVudW0uREVTQ1JJUFRPUikKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAncHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbkVudW0n
LAotICAgICAgICBwb29sLkZpbmRFbnVtVHlwZUJ5TmFtZSgKLSAgICAgICAgICAgIHByZWZpeCAr
ICdwcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bScpLmZ1bGxfbmFtZSkKLQotICAgICMgQWRk
RW51bURlc2NyaXB0b3IgaXMgbm90IHJlY3Vyc2l2ZS4KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFp
c2VzKEtleUVycm9yKToKLSAgICAgIHBvb2wuRmluZEVudW1UeXBlQnlOYW1lKAotICAgICAgICAg
IHByZWZpeCArICdwcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bS5OZXN0ZWRFbnVtJykKLQot
ICAgIHBvb2wuQWRkRW51bURlc2NyaXB0b3IodW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5OZXN0
ZWRFbnVtLkRFU0NSSVBUT1IpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgJ3Byb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtJywKLSAgICAgICAgcG9vbC5GaW5k
RW51bVR5cGVCeU5hbWUoCi0gICAgICAgICAgICBwcmVmaXggKyAncHJvdG9idWZfdW5pdHRlc3Qu
VGVzdEFsbFR5cGVzLk5lc3RlZEVudW0nKS5mdWxsX25hbWUpCi0KLSAgICAjIEZpbGVzIGFyZSBp
bXBsaWNpdGx5IGFsc28gaW5kZXhlZCB3aGVuIGVudW1zIGFyZSBhZGRlZC4KLSAgICBzZWxmLmFz
c2VydEVxdWFsKAotICAgICAgICAnZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnByb3RvJywKLSAg
ICAgICAgcG9vbC5GaW5kRmlsZUJ5TmFtZSgKLSAgICAgICAgICAgICdnb29nbGUvcHJvdG9idWYv
dW5pdHRlc3QucHJvdG8nKS5uYW1lKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAg
J2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wcm90bycsCi0gICAgICAgIHBvb2wuRmluZEZpbGVD
b250YWluaW5nU3ltYm9sKAotICAgICAgICAgICAgcHJlZml4ICsgJ3Byb3RvYnVmX3VuaXR0ZXN0
LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtJykubmFtZSkKLQotICBAdW5pdHRlc3Quc2tpcElmKGFw
aV9pbXBsZW1lbnRhdGlvbi5UeXBlKCkgPT0gJ2NwcCcsCi0gICAgICAgICAgICAgICAgICAgJ1dp
dGggdGhlIGNwcCBpbXBsZW1lbnRhdGlvbiwgQWRkKCkgbXVzdCBiZSBjYWxsZWQgZmlyc3QnKQot
ICBkZWYgdGVzdEVudW0oc2VsZik6Ci0gICAgc2VsZi5fVGVzdEVudW0oJycpCi0gICAgc2VsZi5f
VGVzdEVudW0oJy4nKQotCi0gIEB1bml0dGVzdC5za2lwSWYoYXBpX2ltcGxlbWVudGF0aW9uLlR5
cGUoKSA9PSAnY3BwJywKLSAgICAgICAgICAgICAgICAgICAnV2l0aCB0aGUgY3BwIGltcGxlbWVu
dGF0aW9uLCBBZGQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCcpCi0gIGRlZiB0ZXN0RmlsZShzZWxm
KToKLSAgICBwb29sID0gZGVzY3JpcHRvcl9wb29sLkRlc2NyaXB0b3JQb29sKCkKLSAgICBwb29s
LkFkZEZpbGVEZXNjcmlwdG9yKHVuaXR0ZXN0X3BiMi5ERVNDUklQVE9SKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCi0gICAgICAgICdnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8nLAotICAg
ICAgICBwb29sLkZpbmRGaWxlQnlOYW1lKAotICAgICAgICAgICAgJ2dvb2dsZS9wcm90b2J1Zi91
bml0dGVzdC5wcm90bycpLm5hbWUpCi0KLSAgICAjIEFkZEZpbGVEZXNjcmlwdG9yIGlzIG5vdCBy
ZWN1cnNpdmU7IG1lc3NhZ2VzIGFuZCBlbnVtcyB3aXRoaW4gZmlsZXMgbXVzdAotICAgICMgYmUg
ZXhwbGljaXRseSByZWdpc3RlcmVkLgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJy
b3IpOgotICAgICAgcG9vbC5GaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woCi0gICAgICAgICAgJ3By
b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcycpCi0KLSAgZGVmIHRlc3RFbXB0eURlc2NyaXB0
b3JQb29sKHNlbGYpOgotICAgICMgQ2hlY2sgdGhhdCBhbiBlbXB0eSBEZXNjcmlwdG9yUG9vbCgp
IGNvbnRhaW5zIG5vIG1lc3NhZ2VzLgotICAgIHBvb2wgPSBkZXNjcmlwdG9yX3Bvb2wuRGVzY3Jp
cHRvclBvb2woKQotICAgIHByb3RvX2ZpbGVfbmFtZSA9IGRlc2NyaXB0b3JfcGIyLkRFU0NSSVBU
T1IubmFtZQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwb29sLkZpbmRGaWxlQnlO
YW1lLCBwcm90b19maWxlX25hbWUpCi0gICAgIyBBZGQgdGhlIGFib3ZlIGZpbGUgdG8gdGhlIHBv
b2wKLSAgICBmaWxlX2Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yX3BiMi5GaWxlRGVzY3JpcHRvclBy
b3RvKCkKLSAgICBkZXNjcmlwdG9yX3BiMi5ERVNDUklQVE9SLkNvcHlUb1Byb3RvKGZpbGVfZGVz
Y3JpcHRvcikKLSAgICBwb29sLkFkZChmaWxlX2Rlc2NyaXB0b3IpCi0gICAgIyBOb3cgaXQgZXhp
c3RzLgotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb29sLkZpbmRGaWxlQnlOYW1lKHByb3RvX2ZpbGVf
bmFtZSkpCi0KLSAgZGVmIHRlc3RDdXN0b21EZXNjcmlwdG9yUG9vbChzZWxmKToKLSAgICAjIENy
ZWF0ZSBhIG5ldyBwb29sLCBhbmQgYWRkIGEgZmlsZSBkZXNjcmlwdG9yLgotICAgIHBvb2wgPSBk
ZXNjcmlwdG9yX3Bvb2wuRGVzY3JpcHRvclBvb2woKQotICAgIGZpbGVfZGVzYyA9IGRlc2NyaXB0
b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8oCi0gICAgICAgIG5hbWU9J3NvbWUvZmlsZS5wcm90
bycsIHBhY2thZ2U9J3BhY2thZ2UnKQotICAgIGZpbGVfZGVzYy5tZXNzYWdlX3R5cGUuYWRkKG5h
bWU9J01lc3NhZ2UnKQotICAgIHBvb2wuQWRkKGZpbGVfZGVzYykKLSAgICBzZWxmLmFzc2VydEVx
dWFsKHBvb2wuRmluZEZpbGVCeU5hbWUoJ3NvbWUvZmlsZS5wcm90bycpLm5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAnc29tZS9maWxlLnByb3RvJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHBv
b2wuRmluZE1lc3NhZ2VUeXBlQnlOYW1lKCdwYWNrYWdlLk1lc3NhZ2UnKS5uYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgJ01lc3NhZ2UnKQotCi0KLUB1bml0dGVzdC5za2lwSWYoCi0gICAgYXBp
X2ltcGxlbWVudGF0aW9uLlR5cGUoKSAhPSAnY3BwJywKLSAgICAnZGVmYXVsdF9wb29sIGlzIG9u
bHkgc3VwcG9ydGVkIGJ5IHRoZSBDKysgaW1wbGVtZW50YXRpb24nKQotY2xhc3MgRGVmYXVsdFBv
b2xUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdEZpbmRNZXRob2RzKHNlbGYp
OgotICAgICMgcHlsaW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKLSAgICBmcm9tIGdv
b2dsZS5wcm90b2J1Zi5weWV4dCBpbXBvcnQgX21lc3NhZ2UKLSAgICBwb29sID0gX21lc3NhZ2Uu
ZGVmYXVsdF9wb29sCi0gICAgc2VsZi5hc3NlcnRJcygKLSAgICAgICAgcG9vbC5GaW5kRmlsZUJ5
TmFtZSgnZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnByb3RvJyksCi0gICAgICAgIHVuaXR0ZXN0
X3BiMi5ERVNDUklQVE9SKQotICAgIHNlbGYuYXNzZXJ0SXMoCi0gICAgICAgIHBvb2wuRmluZE1l
c3NhZ2VUeXBlQnlOYW1lKCdwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMnKSwKLSAgICAg
ICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5ERVNDUklQVE9SKQotICAgIHNlbGYuYXNzZXJ0
SXMoCi0gICAgICAgIHBvb2wuRmluZEZpZWxkQnlOYW1lKCdwcm90b2J1Zl91bml0dGVzdC5UZXN0
QWxsVHlwZXMub3B0aW9uYWxfaW50MzInKSwKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxU
eXBlcy5ERVNDUklQVE9SLmZpZWxkc19ieV9uYW1lWydvcHRpb25hbF9pbnQzMiddKQotICAgIHNl
bGYuYXNzZXJ0SXMoCi0gICAgICAgIHBvb2wuRmluZEV4dGVuc2lvbkJ5TmFtZSgncHJvdG9idWZf
dW5pdHRlc3Qub3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uJyksCi0gICAgICAgIHVuaXR0ZXN0X3Bi
Mi5ERVNDUklQVE9SLmV4dGVuc2lvbnNfYnlfbmFtZVsnb3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9u
J10pCi0gICAgc2VsZi5hc3NlcnRJcygKLSAgICAgICAgcG9vbC5GaW5kRW51bVR5cGVCeU5hbWUo
J3Byb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtJyksCi0gICAgICAgIHVuaXR0ZXN0X3BiMi5G
b3JlaWduRW51bS5ERVNDUklQVE9SKQotICAgIHNlbGYuYXNzZXJ0SXMoCi0gICAgICAgIHBvb2wu
RmluZE9uZW9mQnlOYW1lKCdwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMub25lb2ZfZmll
bGQnKSwKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5ERVNDUklQVE9SLm9uZW9m
c19ieV9uYW1lWydvbmVvZl9maWVsZCddKQotCi0gIGRlZiB0ZXN0QWRkRmlsZURlc2NyaXB0b3Io
c2VsZik6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9Zy1pbXBvcnQtbm90LWF0LXRvcAotICAgIGZy
b20gZ29vZ2xlLnByb3RvYnVmLnB5ZXh0IGltcG9ydCBfbWVzc2FnZQotICAgIHBvb2wgPSBfbWVz
c2FnZS5kZWZhdWx0X3Bvb2wKLSAgICBmaWxlX2Rlc2MgPSBkZXNjcmlwdG9yX3BiMi5GaWxlRGVz
Y3JpcHRvclByb3RvKG5hbWU9J3NvbWUvZmlsZS5wcm90bycpCi0gICAgcG9vbC5BZGQoZmlsZV9k
ZXNjKQotICAgIHBvb2wuQWRkU2VyaWFsaXplZEZpbGUoZmlsZV9kZXNjLlNlcmlhbGl6ZVRvU3Ry
aW5nKCkpCi0KLQotVEVTVDFfRklMRSA9IFByb3RvRmlsZSgKLSAgICAnZ29vZ2xlL3Byb3RvYnVm
L2ludGVybmFsL2Rlc2NyaXB0b3JfcG9vbF90ZXN0MS5wcm90bycsCi0gICAgJ2dvb2dsZS5wcm90
b2J1Zi5weXRob24uaW50ZXJuYWwnLAotICAgIHsKLSAgICAgICAgJ0Rlc2NyaXB0b3JQb29sVGVz
dDEnOiBNZXNzYWdlVHlwZSh7Ci0gICAgICAgICAgICAnTmVzdGVkRW51bSc6IEVudW1UeXBlKFso
J0FMUEhBJywgMSksICgnQkVUQScsIDIpXSksCi0gICAgICAgICAgICAnTmVzdGVkTWVzc2FnZSc6
IE1lc3NhZ2VUeXBlKHsKLSAgICAgICAgICAgICAgICAnTmVzdGVkRW51bSc6IEVudW1UeXBlKFso
J0VQU0lMT04nLCA1KSwgKCdaRVRBJywgNildKSwKLSAgICAgICAgICAgICAgICAnRGVlcE5lc3Rl
ZE1lc3NhZ2UnOiBNZXNzYWdlVHlwZSh7Ci0gICAgICAgICAgICAgICAgICAgICdOZXN0ZWRFbnVt
JzogRW51bVR5cGUoWygnRVRBJywgNyksICgnVEhFVEEnLCA4KV0pLAotICAgICAgICAgICAgICAg
IH0sIFsKLSAgICAgICAgICAgICAgICAgICAgKCduZXN0ZWRfZW51bScsIEVudW1GaWVsZCgxLCAn
TmVzdGVkRW51bScsICdFVEEnKSksCi0gICAgICAgICAgICAgICAgICAgICgnbmVzdGVkX2ZpZWxk
JywgU3RyaW5nRmllbGQoMiwgJ3RoZXRhJykpLAotICAgICAgICAgICAgICAgIF0pLAotICAgICAg
ICAgICAgfSwgWwotICAgICAgICAgICAgICAgICgnbmVzdGVkX2VudW0nLCBFbnVtRmllbGQoMSwg
J05lc3RlZEVudW0nLCAnWkVUQScpKSwKLSAgICAgICAgICAgICAgICAoJ25lc3RlZF9maWVsZCcs
IFN0cmluZ0ZpZWxkKDIsICdiZXRhJykpLAotICAgICAgICAgICAgICAgICgnZGVlcF9uZXN0ZWRf
bWVzc2FnZScsIE1lc3NhZ2VGaWVsZCgzLCAnRGVlcE5lc3RlZE1lc3NhZ2UnKSksCi0gICAgICAg
ICAgICBdKQotICAgICAgICB9LCBbCi0gICAgICAgICAgICAoJ25lc3RlZF9lbnVtJywgRW51bUZp
ZWxkKDEsICdOZXN0ZWRFbnVtJywgJ0JFVEEnKSksCi0gICAgICAgICAgICAoJ25lc3RlZF9tZXNz
YWdlJywgTWVzc2FnZUZpZWxkKDIsICdOZXN0ZWRNZXNzYWdlJykpLAotICAgICAgICBdLCBpc19l
eHRlbmRhYmxlPVRydWUpLAotCi0gICAgICAgICdEZXNjcmlwdG9yUG9vbFRlc3QyJzogTWVzc2Fn
ZVR5cGUoewotICAgICAgICAgICAgJ05lc3RlZEVudW0nOiBFbnVtVHlwZShbKCdHQU1NQScsIDMp
LCAoJ0RFTFRBJywgNCldKSwKLSAgICAgICAgICAgICdOZXN0ZWRNZXNzYWdlJzogTWVzc2FnZVR5
cGUoewotICAgICAgICAgICAgICAgICdOZXN0ZWRFbnVtJzogRW51bVR5cGUoWygnSU9UQScsIDkp
LCAoJ0tBUFBBJywgMTApXSksCi0gICAgICAgICAgICAgICAgJ0RlZXBOZXN0ZWRNZXNzYWdlJzog
TWVzc2FnZVR5cGUoewotICAgICAgICAgICAgICAgICAgICAnTmVzdGVkRW51bSc6IEVudW1UeXBl
KFsoJ0xBTUJEQScsIDExKSwgKCdNVScsIDEyKV0pLAotICAgICAgICAgICAgICAgIH0sIFsKLSAg
ICAgICAgICAgICAgICAgICAgKCduZXN0ZWRfZW51bScsIEVudW1GaWVsZCgxLCAnTmVzdGVkRW51
bScsICdNVScpKSwKLSAgICAgICAgICAgICAgICAgICAgKCduZXN0ZWRfZmllbGQnLCBTdHJpbmdG
aWVsZCgyLCAnbGFtYmRhJykpLAotICAgICAgICAgICAgICAgIF0pLAotICAgICAgICAgICAgfSwg
WwotICAgICAgICAgICAgICAgICgnbmVzdGVkX2VudW0nLCBFbnVtRmllbGQoMSwgJ05lc3RlZEVu
dW0nLCAnSU9UQScpKSwKLSAgICAgICAgICAgICAgICAoJ25lc3RlZF9maWVsZCcsIFN0cmluZ0Zp
ZWxkKDIsICdkZWx0YScpKSwKLSAgICAgICAgICAgICAgICAoJ2RlZXBfbmVzdGVkX21lc3NhZ2Un
LCBNZXNzYWdlRmllbGQoMywgJ0RlZXBOZXN0ZWRNZXNzYWdlJykpLAotICAgICAgICAgICAgXSkK
LSAgICAgICAgfSwgWwotICAgICAgICAgICAgKCduZXN0ZWRfZW51bScsIEVudW1GaWVsZCgxLCAn
TmVzdGVkRW51bScsICdHQU1NQScpKSwKLSAgICAgICAgICAgICgnbmVzdGVkX21lc3NhZ2UnLCBN
ZXNzYWdlRmllbGQoMiwgJ05lc3RlZE1lc3NhZ2UnKSksCi0gICAgICAgIF0pLAotICAgIH0pCi0K
LQotVEVTVDJfRklMRSA9IFByb3RvRmlsZSgKLSAgICAnZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFs
L2Rlc2NyaXB0b3JfcG9vbF90ZXN0Mi5wcm90bycsCi0gICAgJ2dvb2dsZS5wcm90b2J1Zi5weXRo
b24uaW50ZXJuYWwnLAotICAgIHsKLSAgICAgICAgJ0Rlc2NyaXB0b3JQb29sVGVzdDMnOiBNZXNz
YWdlVHlwZSh7Ci0gICAgICAgICAgICAnTmVzdGVkRW51bSc6IEVudW1UeXBlKFsoJ05VJywgMTMp
LCAoJ1hJJywgMTQpXSksCi0gICAgICAgICAgICAnTmVzdGVkTWVzc2FnZSc6IE1lc3NhZ2VUeXBl
KHsKLSAgICAgICAgICAgICAgICAnTmVzdGVkRW51bSc6IEVudW1UeXBlKFsoJ09NSUNST04nLCAx
NSksICgnUEknLCAxNildKSwKLSAgICAgICAgICAgICAgICAnRGVlcE5lc3RlZE1lc3NhZ2UnOiBN
ZXNzYWdlVHlwZSh7Ci0gICAgICAgICAgICAgICAgICAgICdOZXN0ZWRFbnVtJzogRW51bVR5cGUo
WygnUkhPJywgMTcpLCAoJ1NJR01BJywgMTgpXSksCi0gICAgICAgICAgICAgICAgfSwgWwotICAg
ICAgICAgICAgICAgICAgICAoJ25lc3RlZF9lbnVtJywgRW51bUZpZWxkKDEsICdOZXN0ZWRFbnVt
JywgJ1JITycpKSwKLSAgICAgICAgICAgICAgICAgICAgKCduZXN0ZWRfZmllbGQnLCBTdHJpbmdG
aWVsZCgyLCAnc2lnbWEnKSksCi0gICAgICAgICAgICAgICAgXSksCi0gICAgICAgICAgICB9LCBb
Ci0gICAgICAgICAgICAgICAgKCduZXN0ZWRfZW51bScsIEVudW1GaWVsZCgxLCAnTmVzdGVkRW51
bScsICdQSScpKSwKLSAgICAgICAgICAgICAgICAoJ25lc3RlZF9maWVsZCcsIFN0cmluZ0ZpZWxk
KDIsICdudScpKSwKLSAgICAgICAgICAgICAgICAoJ2RlZXBfbmVzdGVkX21lc3NhZ2UnLCBNZXNz
YWdlRmllbGQoMywgJ0RlZXBOZXN0ZWRNZXNzYWdlJykpLAotICAgICAgICAgICAgXSkKLSAgICAg
ICAgfSwgWwotICAgICAgICAgICAgKCduZXN0ZWRfZW51bScsIEVudW1GaWVsZCgxLCAnTmVzdGVk
RW51bScsICdYSScpKSwKLSAgICAgICAgICAgICgnbmVzdGVkX21lc3NhZ2UnLCBNZXNzYWdlRmll
bGQoMiwgJ05lc3RlZE1lc3NhZ2UnKSksCi0gICAgICAgIF0sIGV4dGVuc2lvbnM9WwotICAgICAg
ICAgICAgKCdkZXNjcmlwdG9yX3Bvb2xfdGVzdCcsCi0gICAgICAgICAgICAgRXh0ZW5zaW9uRmll
bGQoMTAwMSwgJ0Rlc2NyaXB0b3JQb29sVGVzdDEnKSksCi0gICAgICAgIF0pLAotICAgIH0sCi0g
ICAgZGVwZW5kZW5jaWVzPVsnZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2Rlc2NyaXB0b3JfcG9v
bF90ZXN0MS5wcm90bycsCi0gICAgICAgICAgICAgICAgICAnZ29vZ2xlL3Byb3RvYnVmL2ludGVy
bmFsL21vcmVfbWVzc2FnZXMucHJvdG8nXSwKLSAgICBwdWJsaWNfZGVwZW5kZW5jaWVzPVsnZ29v
Z2xlL3Byb3RvYnVmL2ludGVybmFsL21vcmVfbWVzc2FnZXMucHJvdG8nXSkKLQotCi1pZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9u
L2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9kZXNjcmlwdG9yX3Bvb2xfdGVzdDEucHJvdG8gYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5
dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZGVzY3JpcHRvcl9wb29sX3Rlc3QxLnByb3Rv
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDgxNmI3OGVjNGJmNTY2ZDA0NTk1MTg5
MWQ4NjRkNWNjN2M5ZDI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9kZXNjcmlwdG9yX3Bvb2xfdGVz
dDEucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMiI7Ci0KLXBhY2thZ2UgZ29vZ2xl
LnByb3RvYnVmLnB5dGhvbi5pbnRlcm5hbDsKLQotCi1tZXNzYWdlIERlc2NyaXB0b3JQb29sVGVz
dDEgewotICBleHRlbnNpb25zIDEwMDAgdG8gbWF4OwotCi0gIGVudW0gTmVzdGVkRW51bSB7Ci0g
ICAgQUxQSEEgPSAxOwotICAgIEJFVEEgPSAyOwotICB9Ci0KLSAgb3B0aW9uYWwgTmVzdGVkRW51
bSBuZXN0ZWRfZW51bSA9IDEgW2RlZmF1bHQgPSBCRVRBXTsKLQotICBtZXNzYWdlIE5lc3RlZE1l
c3NhZ2UgewotICAgIGVudW0gTmVzdGVkRW51bSB7Ci0gICAgICBFUFNJTE9OID0gNTsKLSAgICAg
IFpFVEEgPSA2OwotICAgIH0KLSAgICBvcHRpb25hbCBOZXN0ZWRFbnVtIG5lc3RlZF9lbnVtID0g
MSBbZGVmYXVsdCA9IFpFVEFdOwotICAgIG9wdGlvbmFsIHN0cmluZyBuZXN0ZWRfZmllbGQgPSAy
IFtkZWZhdWx0ID0gImJldGEiXTsKLSAgICBvcHRpb25hbCBEZWVwTmVzdGVkTWVzc2FnZSBkZWVw
X25lc3RlZF9tZXNzYWdlID0gMzsKLQotICAgIG1lc3NhZ2UgRGVlcE5lc3RlZE1lc3NhZ2Ugewot
ICAgICAgZW51bSBOZXN0ZWRFbnVtIHsKLSAgICAgICAgRVRBID0gNzsKLSAgICAgICAgVEhFVEEg
PSA4OwotICAgICAgfQotICAgICAgb3B0aW9uYWwgTmVzdGVkRW51bSBuZXN0ZWRfZW51bSA9IDEg
W2RlZmF1bHQgPSBFVEFdOwotICAgICAgb3B0aW9uYWwgc3RyaW5nIG5lc3RlZF9maWVsZCA9IDIg
W2RlZmF1bHQgPSAidGhldGEiXTsKLSAgICB9Ci0gIH0KLQotICBvcHRpb25hbCBOZXN0ZWRNZXNz
YWdlIG5lc3RlZF9tZXNzYWdlID0gMjsKLX0KLQotbWVzc2FnZSBEZXNjcmlwdG9yUG9vbFRlc3Qy
IHsKLSAgZW51bSBOZXN0ZWRFbnVtIHsKLSAgICBHQU1NQSA9IDM7Ci0gICAgREVMVEEgPSA0Owot
ICB9Ci0KLSAgb3B0aW9uYWwgTmVzdGVkRW51bSBuZXN0ZWRfZW51bSA9IDEgW2RlZmF1bHQgPSBH
QU1NQV07Ci0KLSAgbWVzc2FnZSBOZXN0ZWRNZXNzYWdlIHsKLSAgICBlbnVtIE5lc3RlZEVudW0g
ewotICAgICAgSU9UQSA9IDk7Ci0gICAgICBLQVBQQSA9IDEwOwotICAgIH0KLSAgICBvcHRpb25h
bCBOZXN0ZWRFbnVtIG5lc3RlZF9lbnVtID0gMSBbZGVmYXVsdCA9IElPVEFdOwotICAgIG9wdGlv
bmFsIHN0cmluZyBuZXN0ZWRfZmllbGQgPSAyIFtkZWZhdWx0ID0gImRlbHRhIl07Ci0gICAgb3B0
aW9uYWwgRGVlcE5lc3RlZE1lc3NhZ2UgZGVlcF9uZXN0ZWRfbWVzc2FnZSA9IDM7Ci0KLSAgICBt
ZXNzYWdlIERlZXBOZXN0ZWRNZXNzYWdlIHsKLSAgICAgIGVudW0gTmVzdGVkRW51bSB7Ci0gICAg
ICAgIExBTUJEQSA9IDExOwotICAgICAgICBNVSA9IDEyOwotICAgICAgfQotICAgICAgb3B0aW9u
YWwgTmVzdGVkRW51bSBuZXN0ZWRfZW51bSA9IDEgW2RlZmF1bHQgPSBNVV07Ci0gICAgICBvcHRp
b25hbCBzdHJpbmcgbmVzdGVkX2ZpZWxkID0gMiBbZGVmYXVsdCA9ICJsYW1iZGEiXTsKLSAgICB9
Ci0gIH0KLQotICBvcHRpb25hbCBOZXN0ZWRNZXNzYWdlIG5lc3RlZF9tZXNzYWdlID0gMjsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9kZXNjcmlwdG9yX3Bv
b2xfdGVzdDIucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZGVzY3JpcHRv
cl9wb29sX3Rlc3QyLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjE4ZWNj
YjlmYTRhNjkyYTM0YWY1ZmJjMTQ4MDUxYzQ0YWY1OGFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9k
ZXNjcmlwdG9yX3Bvb2xfdGVzdDIucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMiI7
Ci0KLXBhY2thZ2UgZ29vZ2xlLnByb3RvYnVmLnB5dGhvbi5pbnRlcm5hbDsKLQotaW1wb3J0ICJn
b29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZGVzY3JpcHRvcl9wb29sX3Rlc3QxLnByb3RvIjsKLWlt
cG9ydCBwdWJsaWMgImdvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9tb3JlX21lc3NhZ2VzLnByb3Rv
IjsKLQotCi1tZXNzYWdlIERlc2NyaXB0b3JQb29sVGVzdDMgewotCi0gIGV4dGVuZCBEZXNjcmlw
dG9yUG9vbFRlc3QxIHsKLSAgICBvcHRpb25hbCBEZXNjcmlwdG9yUG9vbFRlc3QzIGRlc2NyaXB0
b3JfcG9vbF90ZXN0ID0gMTAwMTsKLSAgfQotCi0gIGVudW0gTmVzdGVkRW51bSB7Ci0gICAgTlUg
PSAxMzsKLSAgICBYSSA9IDE0OwotICB9Ci0KLSAgb3B0aW9uYWwgTmVzdGVkRW51bSBuZXN0ZWRf
ZW51bSA9IDEgW2RlZmF1bHQgPSBYSV07Ci0KLSAgbWVzc2FnZSBOZXN0ZWRNZXNzYWdlIHsKLSAg
ICBlbnVtIE5lc3RlZEVudW0gewotICAgICAgT01JQ1JPTiA9IDE1OwotICAgICAgUEkgPSAxNjsK
LSAgICB9Ci0gICAgb3B0aW9uYWwgTmVzdGVkRW51bSBuZXN0ZWRfZW51bSA9IDEgW2RlZmF1bHQg
PSBQSV07Ci0gICAgb3B0aW9uYWwgc3RyaW5nIG5lc3RlZF9maWVsZCA9IDIgW2RlZmF1bHQgPSAi
bnUiXTsKLSAgICBvcHRpb25hbCBEZWVwTmVzdGVkTWVzc2FnZSBkZWVwX25lc3RlZF9tZXNzYWdl
ID0gMzsKLQotICAgIG1lc3NhZ2UgRGVlcE5lc3RlZE1lc3NhZ2UgewotICAgICAgZW51bSBOZXN0
ZWRFbnVtIHsKLSAgICAgICAgUkhPID0gMTc7Ci0gICAgICAgIFNJR01BID0gMTg7Ci0gICAgICB9
Ci0gICAgICBvcHRpb25hbCBOZXN0ZWRFbnVtIG5lc3RlZF9lbnVtID0gMSBbZGVmYXVsdCA9IFJI
T107Ci0gICAgICBvcHRpb25hbCBzdHJpbmcgbmVzdGVkX2ZpZWxkID0gMiBbZGVmYXVsdCA9ICJz
aWdtYSJdOwotICAgIH0KLSAgfQotCi0gIG9wdGlvbmFsIE5lc3RlZE1lc3NhZ2UgbmVzdGVkX21l
c3NhZ2UgPSAyOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJu
YWwvZGVzY3JpcHRvcl90ZXN0LnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2Rl
c2NyaXB0b3JfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjhlNzU1NTMz
NThmNWQ3MjE5MWNmMzBjZjRlZjlmOWIwNDQyMTQzMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZGVz
Y3JpcHRvcl90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsODIyICswLDAgQEAKLSMhIC91c3Iv
YmluL2VudiBweXRob24KLSMKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJp
YnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVW5pdHRlc3QgZm9yIGdvb2dsZS5wcm90b2J1
Zi5pbnRlcm5hbC5kZXNjcmlwdG9yLiIiIgotCi1fX2F1dGhvcl9fID0gJ3JvYmluc29uQGdvb2ds
ZS5jb20gKFdpbGwgUm9iaW5zb24pJwotCi1pbXBvcnQgc3lzCi0KLXRyeToKLSAgaW1wb3J0IHVu
aXR0ZXN0MiBhcyB1bml0dGVzdCAgI1BZMjYKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1wb3J0
IHVuaXR0ZXN0Ci0KLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB1bml0dGVzdF9jdXN0b21f
b3B0aW9uc19wYjIKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB1bml0dGVzdF9pbXBvcnRf
cGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdW5pdHRlc3RfcGIyCi1mcm9tIGdvb2ds
ZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wYjIKLWZyb20gZ29vZ2xlLnByb3RvYnVmLmlu
dGVybmFsIGltcG9ydCBhcGlfaW1wbGVtZW50YXRpb24KLWZyb20gZ29vZ2xlLnByb3RvYnVmLmlu
dGVybmFsIGltcG9ydCB0ZXN0X3V0aWwKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBkZXNj
cmlwdG9yCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wb29sCi1mcm9t
IGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgc3ltYm9sX2RhdGFiYXNlCi1mcm9tIGdvb2dsZS5wcm90
b2J1ZiBpbXBvcnQgdGV4dF9mb3JtYXQKLQotCi1URVNUX0VNUFRZX01FU1NBR0VfREVTQ1JJUFRP
Ul9BU0NJSSA9ICIiIgotbmFtZTogJ1Rlc3RFbXB0eU1lc3NhZ2UnCi0iIiIKLQotCi1jbGFzcyBE
ZXNjcmlwdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgot
ICAgIGZpbGVfcHJvdG8gPSBkZXNjcmlwdG9yX3BiMi5GaWxlRGVzY3JpcHRvclByb3RvKAotICAg
ICAgICBuYW1lPSdzb21lL2ZpbGVuYW1lL3NvbWUucHJvdG8nLAotICAgICAgICBwYWNrYWdlPSdw
cm90b2J1Zl91bml0dGVzdCcpCi0gICAgbWVzc2FnZV9wcm90byA9IGZpbGVfcHJvdG8ubWVzc2Fn
ZV90eXBlLmFkZCgKLSAgICAgICAgbmFtZT0nTmVzdGVkTWVzc2FnZScpCi0gICAgbWVzc2FnZV9w
cm90by5maWVsZC5hZGQoCi0gICAgICAgIG5hbWU9J2JiJywKLSAgICAgICAgbnVtYmVyPTEsCi0g
ICAgICAgIHR5cGU9ZGVzY3JpcHRvcl9wYjIuRmllbGREZXNjcmlwdG9yUHJvdG8uVFlQRV9JTlQz
MiwKLSAgICAgICAgbGFiZWw9ZGVzY3JpcHRvcl9wYjIuRmllbGREZXNjcmlwdG9yUHJvdG8uTEFC
RUxfT1BUSU9OQUwpCi0gICAgZW51bV9wcm90byA9IG1lc3NhZ2VfcHJvdG8uZW51bV90eXBlLmFk
ZCgKLSAgICAgICAgbmFtZT0nRm9yZWlnbkVudW0nKQotICAgIGVudW1fcHJvdG8udmFsdWUuYWRk
KG5hbWU9J0ZPUkVJR05fRk9PJywgbnVtYmVyPTQpCi0gICAgZW51bV9wcm90by52YWx1ZS5hZGQo
bmFtZT0nRk9SRUlHTl9CQVInLCBudW1iZXI9NSkKLSAgICBlbnVtX3Byb3RvLnZhbHVlLmFkZChu
YW1lPSdGT1JFSUdOX0JBWicsIG51bWJlcj02KQotCi0gICAgc2VsZi5wb29sID0gc2VsZi5HZXRE
ZXNjcmlwdG9yUG9vbCgpCi0gICAgc2VsZi5wb29sLkFkZChmaWxlX3Byb3RvKQotICAgIHNlbGYu
bXlfZmlsZSA9IHNlbGYucG9vbC5GaW5kRmlsZUJ5TmFtZShmaWxlX3Byb3RvLm5hbWUpCi0gICAg
c2VsZi5teV9tZXNzYWdlID0gc2VsZi5teV9maWxlLm1lc3NhZ2VfdHlwZXNfYnlfbmFtZVttZXNz
YWdlX3Byb3RvLm5hbWVdCi0gICAgc2VsZi5teV9lbnVtID0gc2VsZi5teV9tZXNzYWdlLmVudW1f
dHlwZXNfYnlfbmFtZVtlbnVtX3Byb3RvLm5hbWVdCi0KLSAgICBzZWxmLm15X21ldGhvZCA9IGRl
c2NyaXB0b3IuTWV0aG9kRGVzY3JpcHRvcigKLSAgICAgICAgbmFtZT0nQmFyJywKLSAgICAgICAg
ZnVsbF9uYW1lPSdwcm90b2J1Zl91bml0dGVzdC5UZXN0U2VydmljZS5CYXInLAotICAgICAgICBp
bmRleD0wLAotICAgICAgICBjb250YWluaW5nX3NlcnZpY2U9Tm9uZSwKLSAgICAgICAgaW5wdXRf
dHlwZT1Ob25lLAotICAgICAgICBvdXRwdXRfdHlwZT1Ob25lKQotICAgIHNlbGYubXlfc2Vydmlj
ZSA9IGRlc2NyaXB0b3IuU2VydmljZURlc2NyaXB0b3IoCi0gICAgICAgIG5hbWU9J1Rlc3RTZXJ2
aWNlV2l0aE9wdGlvbnMnLAotICAgICAgICBmdWxsX25hbWU9J3Byb3RvYnVmX3VuaXR0ZXN0LlRl
c3RTZXJ2aWNlV2l0aE9wdGlvbnMnLAotICAgICAgICBmaWxlPXNlbGYubXlfZmlsZSwKLSAgICAg
ICAgaW5kZXg9MCwKLSAgICAgICAgbWV0aG9kcz1bCi0gICAgICAgICAgICBzZWxmLm15X21ldGhv
ZAotICAgICAgICBdKQotCi0gIGRlZiBHZXREZXNjcmlwdG9yUG9vbChzZWxmKToKLSAgICByZXR1
cm4gc3ltYm9sX2RhdGFiYXNlLkRlZmF1bHQoKS5wb29sCi0KLSAgZGVmIHRlc3RFbnVtVmFsdWVO
YW1lKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5teV9tZXNzYWdlLkVudW1WYWx1
ZU5hbWUoJ0ZvcmVpZ25FbnVtJywgNCksCi0gICAgICAgICAgICAgICAgICAgICAnRk9SRUlHTl9G
T08nKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgc2VsZi5teV9tZXNzYWdlLmVu
dW1fdHlwZXNfYnlfbmFtZVsKLSAgICAgICAgICAgICdGb3JlaWduRW51bSddLnZhbHVlc19ieV9u
dW1iZXJbNF0ubmFtZSwKLSAgICAgICAgc2VsZi5teV9tZXNzYWdlLkVudW1WYWx1ZU5hbWUoJ0Zv
cmVpZ25FbnVtJywgNCkpCi0KLSAgZGVmIHRlc3RFbnVtRml4dXBzKHNlbGYpOgotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5teV9lbnVtLCBzZWxmLm15X2VudW0udmFsdWVzWzBdLnR5cGUpCi0K
LSAgZGVmIHRlc3RDb250YWluaW5nVHlwZUZpeHVwcyhzZWxmKToKLSAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYubXlfbWVzc2FnZSwgc2VsZi5teV9tZXNzYWdlLmZpZWxkc1swXS5jb250YWluaW5n
X3R5cGUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm15X21lc3NhZ2UsIHNlbGYubXlfZW51
bS5jb250YWluaW5nX3R5cGUpCi0KLSAgZGVmIHRlc3RDb250YWluaW5nU2VydmljZUZpeHVwcyhz
ZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubXlfc2VydmljZSwgc2VsZi5teV9tZXRo
b2QuY29udGFpbmluZ19zZXJ2aWNlKQotCi0gIGRlZiB0ZXN0R2V0T3B0aW9ucyhzZWxmKToKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubXlfZW51bS5HZXRPcHRpb25zKCksCi0gICAgICAgICAg
ICAgICAgICAgICBkZXNjcmlwdG9yX3BiMi5FbnVtT3B0aW9ucygpKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5teV9lbnVtLnZhbHVlc1swXS5HZXRPcHRpb25zKCksCi0gICAgICAgICAgICAg
ICAgICAgICBkZXNjcmlwdG9yX3BiMi5FbnVtVmFsdWVPcHRpb25zKCkpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLm15X21lc3NhZ2UuR2V0T3B0aW9ucygpLAotICAgICAgICAgICAgICAgICAg
ICAgZGVzY3JpcHRvcl9wYjIuTWVzc2FnZU9wdGlvbnMoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYubXlfbWVzc2FnZS5maWVsZHNbMF0uR2V0T3B0aW9ucygpLAotICAgICAgICAgICAgICAg
ICAgICAgZGVzY3JpcHRvcl9wYjIuRmllbGRPcHRpb25zKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLm15X21ldGhvZC5HZXRPcHRpb25zKCksCi0gICAgICAgICAgICAgICAgICAgICBkZXNj
cmlwdG9yX3BiMi5NZXRob2RPcHRpb25zKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm15
X3NlcnZpY2UuR2V0T3B0aW9ucygpLAotICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl9w
YjIuU2VydmljZU9wdGlvbnMoKSkKLQotICBkZWYgdGVzdFNpbXBsZUN1c3RvbU9wdGlvbnMoc2Vs
Zik6Ci0gICAgZmlsZV9kZXNjcmlwdG9yID0gdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLkRF
U0NSSVBUT1IKLSAgICBtZXNzYWdlX2Rlc2NyaXB0b3IgPVwKLSAgICAgICAgdW5pdHRlc3RfY3Vz
dG9tX29wdGlvbnNfcGIyLlRlc3RNZXNzYWdlV2l0aEN1c3RvbU9wdGlvbnMuREVTQ1JJUFRPUgot
ICAgIGZpZWxkX2Rlc2NyaXB0b3IgPSBtZXNzYWdlX2Rlc2NyaXB0b3IuZmllbGRzX2J5X25hbWVb
ImZpZWxkMSJdCi0gICAgZW51bV9kZXNjcmlwdG9yID0gbWVzc2FnZV9kZXNjcmlwdG9yLmVudW1f
dHlwZXNfYnlfbmFtZVsiQW5FbnVtIl0KLSAgICBlbnVtX3ZhbHVlX2Rlc2NyaXB0b3IgPVwKLSAg
ICAgICAgbWVzc2FnZV9kZXNjcmlwdG9yLmVudW1fdmFsdWVzX2J5X25hbWVbIkFORU5VTV9WQUwy
Il0KLSAgICBzZXJ2aWNlX2Rlc2NyaXB0b3IgPVwKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29w
dGlvbnNfcGIyLlRlc3RTZXJ2aWNlV2l0aEN1c3RvbU9wdGlvbnMuREVTQ1JJUFRPUgotICAgIG1l
dGhvZF9kZXNjcmlwdG9yID0gc2VydmljZV9kZXNjcmlwdG9yLkZpbmRNZXRob2RCeU5hbWUoIkZv
byIpCi0KLSAgICBmaWxlX29wdGlvbnMgPSBmaWxlX2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpCi0g
ICAgZmlsZV9vcHQxID0gdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmZpbGVfb3B0MQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoOTg3NjU0MzIxMCwgZmlsZV9vcHRpb25zLkV4dGVuc2lvbnNbZmls
ZV9vcHQxXSkKLSAgICBtZXNzYWdlX29wdGlvbnMgPSBtZXNzYWdlX2Rlc2NyaXB0b3IuR2V0T3B0
aW9ucygpCi0gICAgbWVzc2FnZV9vcHQxID0gdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLm1l
c3NhZ2Vfb3B0MQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTU2LCBtZXNzYWdlX29wdGlvbnMuRXh0
ZW5zaW9uc1ttZXNzYWdlX29wdDFdKQotICAgIGZpZWxkX29wdGlvbnMgPSBmaWVsZF9kZXNjcmlw
dG9yLkdldE9wdGlvbnMoKQotICAgIGZpZWxkX29wdDEgPSB1bml0dGVzdF9jdXN0b21fb3B0aW9u
c19wYjIuZmllbGRfb3B0MQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoODc2NTQzMjEwOSwgZmllbGRf
b3B0aW9ucy5FeHRlbnNpb25zW2ZpZWxkX29wdDFdKQotICAgIGZpZWxkX29wdDIgPSB1bml0dGVz
dF9jdXN0b21fb3B0aW9uc19wYjIuZmllbGRfb3B0MgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIs
IGZpZWxkX29wdGlvbnMuRXh0ZW5zaW9uc1tmaWVsZF9vcHQyXSkKLSAgICBlbnVtX29wdGlvbnMg
PSBlbnVtX2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpCi0gICAgZW51bV9vcHQxID0gdW5pdHRlc3Rf
Y3VzdG9tX29wdGlvbnNfcGIyLmVudW1fb3B0MQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTc4OSwg
ZW51bV9vcHRpb25zLkV4dGVuc2lvbnNbZW51bV9vcHQxXSkKLSAgICBlbnVtX3ZhbHVlX29wdGlv
bnMgPSBlbnVtX3ZhbHVlX2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpCi0gICAgZW51bV92YWx1ZV9v
cHQxID0gdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmVudW1fdmFsdWVfb3B0MQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMTIzLCBlbnVtX3ZhbHVlX29wdGlvbnMuRXh0ZW5zaW9uc1tlbnVtX3Zh
bHVlX29wdDFdKQotCi0gICAgc2VydmljZV9vcHRpb25zID0gc2VydmljZV9kZXNjcmlwdG9yLkdl
dE9wdGlvbnMoKQotICAgIHNlcnZpY2Vfb3B0MSA9IHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3Bi
Mi5zZXJ2aWNlX29wdDEKLSAgICBzZWxmLmFzc2VydEVxdWFsKC05ODc2NTQzMjEwLCBzZXJ2aWNl
X29wdGlvbnMuRXh0ZW5zaW9uc1tzZXJ2aWNlX29wdDFdKQotICAgIG1ldGhvZF9vcHRpb25zID0g
bWV0aG9kX2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpCi0gICAgbWV0aG9kX29wdDEgPSB1bml0dGVz
dF9jdXN0b21fb3B0aW9uc19wYjIubWV0aG9kX29wdDEKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVu
aXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5NRVRIT0RPUFQxX1ZBTDIsCi0gICAgICAgICAgICAg
ICAgICAgICBtZXRob2Rfb3B0aW9ucy5FeHRlbnNpb25zW21ldGhvZF9vcHQxXSkKLQotICAgIG1l
c3NhZ2VfZGVzY3JpcHRvciA9ICgKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIy
LkR1bW15TWVzc2FnZUNvbnRhaW5pbmdFbnVtLkRFU0NSSVBUT1IpCi0gICAgc2VsZi5hc3NlcnRU
cnVlKGZpbGVfZGVzY3JpcHRvci5oYXNfb3B0aW9ucykKLSAgICBzZWxmLmFzc2VydEZhbHNlKG1l
c3NhZ2VfZGVzY3JpcHRvci5oYXNfb3B0aW9ucykKLQotICBkZWYgdGVzdERpZmZlcmVudEN1c3Rv
bU9wdGlvblR5cGVzKHNlbGYpOgotICAgIGtpbnQzMm1pbiA9IC0yKiozMQotICAgIGtpbnQ2NG1p
biA9IC0yKio2MwotICAgIGtpbnQzMm1heCA9IDIqKjMxIC0gMQotICAgIGtpbnQ2NG1heCA9IDIq
KjYzIC0gMQotICAgIGt1aW50MzJtYXggPSAyKiozMiAtIDEKLSAgICBrdWludDY0bWF4ID0gMioq
NjQgLSAxCi0KLSAgICBtZXNzYWdlX2Rlc2NyaXB0b3IgPVwKLSAgICAgICAgdW5pdHRlc3RfY3Vz
dG9tX29wdGlvbnNfcGIyLkN1c3RvbU9wdGlvbk1pbkludGVnZXJWYWx1ZXMuREVTQ1JJUFRPUgot
ICAgIG1lc3NhZ2Vfb3B0aW9ucyA9IG1lc3NhZ2VfZGVzY3JpcHRvci5HZXRPcHRpb25zKCkKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBtZXNzYWdlX29wdGlvbnMuRXh0ZW5zaW9uc1sKLSAg
ICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmJvb2xfb3B0XSkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKGtpbnQzMm1pbiwgbWVzc2FnZV9vcHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAg
IHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5pbnQzMl9vcHRdKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoa2ludDY0bWluLCBtZXNzYWdlX29wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5p
dHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmludDY0X29wdF0pCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgwLCBtZXNzYWdlX29wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9t
X29wdGlvbnNfcGIyLnVpbnQzMl9vcHRdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbWVzc2Fn
ZV9vcHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3Bi
Mi51aW50NjRfb3B0XSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGtpbnQzMm1pbiwgbWVzc2FnZV9v
cHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5z
aW50MzJfb3B0XSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGtpbnQ2NG1pbiwgbWVzc2FnZV9vcHRp
b25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5zaW50
NjRfb3B0XSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG1lc3NhZ2Vfb3B0aW9ucy5FeHRlbnNp
b25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuZml4ZWQzMl9vcHRdKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbWVzc2FnZV9vcHRpb25zLkV4dGVuc2lvbnNbCi0gICAg
ICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5maXhlZDY0X29wdF0pCi0gICAgc2VsZi5h
c3NlcnRFcXVhbChraW50MzJtaW4sIG1lc3NhZ2Vfb3B0aW9ucy5FeHRlbnNpb25zWwotICAgICAg
ICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuc2ZpeGVkMzJfb3B0XSkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKGtpbnQ2NG1pbiwgbWVzc2FnZV9vcHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAg
IHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5zZml4ZWQ2NF9vcHRdKQotCi0gICAgbWVzc2Fn
ZV9kZXNjcmlwdG9yID1cCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5DdXN0
b21PcHRpb25NYXhJbnRlZ2VyVmFsdWVzLkRFU0NSSVBUT1IKLSAgICBtZXNzYWdlX29wdGlvbnMg
PSBtZXNzYWdlX2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChU
cnVlLCBtZXNzYWdlX29wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9t
X29wdGlvbnNfcGIyLmJvb2xfb3B0XSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGtpbnQzMm1heCwg
bWVzc2FnZV9vcHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRp
b25zX3BiMi5pbnQzMl9vcHRdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2ludDY0bWF4LCBtZXNz
YWdlX29wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNf
cGIyLmludDY0X29wdF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChrdWludDMybWF4LCBtZXNzYWdl
X29wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIy
LnVpbnQzMl9vcHRdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3VpbnQ2NG1heCwgbWVzc2FnZV9v
cHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi51
aW50NjRfb3B0XSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGtpbnQzMm1heCwgbWVzc2FnZV9vcHRp
b25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5zaW50
MzJfb3B0XSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGtpbnQ2NG1heCwgbWVzc2FnZV9vcHRpb25z
LkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5zaW50NjRf
b3B0XSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGt1aW50MzJtYXgsIG1lc3NhZ2Vfb3B0aW9ucy5F
eHRlbnNpb25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuZml4ZWQzMl9v
cHRdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3VpbnQ2NG1heCwgbWVzc2FnZV9vcHRpb25zLkV4
dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5maXhlZDY0X29w
dF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChraW50MzJtYXgsIG1lc3NhZ2Vfb3B0aW9ucy5FeHRl
bnNpb25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuc2ZpeGVkMzJfb3B0
XSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGtpbnQ2NG1heCwgbWVzc2FnZV9vcHRpb25zLkV4dGVu
c2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5zZml4ZWQ2NF9vcHRd
KQotCi0gICAgbWVzc2FnZV9kZXNjcmlwdG9yID1cCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9v
cHRpb25zX3BiMi5DdXN0b21PcHRpb25PdGhlclZhbHVlcy5ERVNDUklQVE9SCi0gICAgbWVzc2Fn
ZV9vcHRpb25zID0gbWVzc2FnZV9kZXNjcmlwdG9yLkdldE9wdGlvbnMoKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoLTEwMCwgbWVzc2FnZV9vcHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0
ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5pbnQzMl9vcHRdKQotICAgIHNlbGYuYXNzZXJ0QWxtb3N0
RXF1YWwoMTIuMzQ1Njc4OSwgbWVzc2FnZV9vcHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVu
aXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5mbG9hdF9vcHRdLCA2KQotICAgIHNlbGYuYXNzZXJ0
QWxtb3N0RXF1YWwoMS4yMzQ1Njc4OTAxMjM0NTY3ODksIG1lc3NhZ2Vfb3B0aW9ucy5FeHRlbnNp
b25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuZG91YmxlX29wdF0pCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgiSGVsbG8sIFwiV29ybGRcIiIsIG1lc3NhZ2Vfb3B0aW9ucy5F
eHRlbnNpb25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuc3RyaW5nX29w
dF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChiIkhlbGxvXDBXb3JsZCIsIG1lc3NhZ2Vfb3B0aW9u
cy5FeHRlbnNpb25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuYnl0ZXNf
b3B0XSkKLSAgICBkdW1teV9lbnVtID0gdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLkR1bW15
TWVzc2FnZUNvbnRhaW5pbmdFbnVtCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgZHVt
bXlfZW51bS5URVNUX09QVElPTl9FTlVNX1RZUEUyLAotICAgICAgICBtZXNzYWdlX29wdGlvbnMu
RXh0ZW5zaW9uc1t1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuZW51bV9vcHRdKQotCi0gICAg
bWVzc2FnZV9kZXNjcmlwdG9yID1cCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3Bi
Mi5TZXR0aW5nUmVhbHNGcm9tUG9zaXRpdmVJbnRzLkRFU0NSSVBUT1IKLSAgICBtZXNzYWdlX29w
dGlvbnMgPSBtZXNzYWdlX2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpCi0gICAgc2VsZi5hc3NlcnRB
bG1vc3RFcXVhbCgxMiwgbWVzc2FnZV9vcHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0
ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5mbG9hdF9vcHRdLCA2KQotICAgIHNlbGYuYXNzZXJ0QWxt
b3N0RXF1YWwoMTU0LCBtZXNzYWdlX29wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRl
c3RfY3VzdG9tX29wdGlvbnNfcGIyLmRvdWJsZV9vcHRdKQotCi0gICAgbWVzc2FnZV9kZXNjcmlw
dG9yID1cCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5TZXR0aW5nUmVhbHNG
cm9tTmVnYXRpdmVJbnRzLkRFU0NSSVBUT1IKLSAgICBtZXNzYWdlX29wdGlvbnMgPSBtZXNzYWdl
X2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpCi0gICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgtMTIs
IG1lc3NhZ2Vfb3B0aW9ucy5FeHRlbnNpb25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0
aW9uc19wYjIuZmxvYXRfb3B0XSwgNikKLSAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKC0xNTQs
IG1lc3NhZ2Vfb3B0aW9ucy5FeHRlbnNpb25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0
aW9uc19wYjIuZG91YmxlX29wdF0pCi0KLSAgZGVmIHRlc3RDb21wbGV4RXh0ZW5zaW9uT3B0aW9u
cyhzZWxmKToKLSAgICBkZXNjcmlwdG9yID1cCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRp
b25zX3BiMi5WYXJpb3VzQ29tcGxleE9wdGlvbnMuREVTQ1JJUFRPUgotICAgIG9wdGlvbnMgPSBk
ZXNjcmlwdG9yLkdldE9wdGlvbnMoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIG9wdGlvbnMu
RXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmNvbXBsZXhf
b3B0MV0uZm9vKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMzI0LCBvcHRpb25zLkV4dGVuc2lvbnNb
Ci0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5jb21wbGV4X29wdDFdLkV4dGVu
c2lvbnNbCi0gICAgICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIucXV1eF0pCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCg4NzYsIG9wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5p
dHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmNvbXBsZXhfb3B0MV0uRXh0ZW5zaW9uc1sKLSAgICAg
ICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5jb3JnZV0ucXV4KQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoOTg3LCBvcHRpb25zLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1
c3RvbV9vcHRpb25zX3BiMi5jb21wbGV4X29wdDJdLmJheikKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDY1NCwgb3B0aW9ucy5FeHRlbnNpb25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9u
c19wYjIuY29tcGxleF9vcHQyXS5FeHRlbnNpb25zWwotICAgICAgICAgICAgdW5pdHRlc3RfY3Vz
dG9tX29wdGlvbnNfcGIyLmdyYXVsdF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg3NDMsIG9wdGlv
bnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmNvbXBs
ZXhfb3B0Ml0uYmFyLmZvbykKLSAgICBzZWxmLmFzc2VydEVxdWFsKDE5OTksIG9wdGlvbnMuRXh0
ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmNvbXBsZXhfb3B0
Ml0uYmFyLkV4dGVuc2lvbnNbCi0gICAgICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19w
YjIucXV1eF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyMDA4LCBvcHRpb25zLkV4dGVuc2lvbnNb
Ci0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5jb21wbGV4X29wdDJdLmJhci5F
eHRlbnNpb25zWwotICAgICAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmNvcmdl
XS5xdXgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg3NDEsIG9wdGlvbnMuRXh0ZW5zaW9uc1sKLSAg
ICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmNvbXBsZXhfb3B0Ml0uRXh0ZW5zaW9u
c1sKLSAgICAgICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5nYXJwbHldLmZvbykK
LSAgICBzZWxmLmFzc2VydEVxdWFsKDE5OTgsIG9wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAg
dW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmNvbXBsZXhfb3B0Ml0uRXh0ZW5zaW9uc1sKLSAg
ICAgICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5nYXJwbHldLkV4dGVuc2lvbnNb
Ci0gICAgICAgICAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLnF1dXhdKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMjEyMSwgb3B0aW9ucy5FeHRlbnNpb25zWwotICAgICAgICB1bml0
dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuY29tcGxleF9vcHQyXS5FeHRlbnNpb25zWwotICAgICAg
ICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmdhcnBseV0uRXh0ZW5zaW9uc1sKLSAg
ICAgICAgICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuY29yZ2VdLnF1eCkKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKDE5NzEsIG9wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5p
dHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLkNvbXBsZXhPcHRpb25UeXBlMgotICAgICAgICAuQ29t
cGxleE9wdGlvblR5cGU0LmNvbXBsZXhfb3B0NF0ud2FsZG8pCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgzMjEsIG9wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlv
bnNfcGIyLmNvbXBsZXhfb3B0Ml0uZnJlZC53YWxkbykKLSAgICBzZWxmLmFzc2VydEVxdWFsKDks
IG9wdGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIy
LmNvbXBsZXhfb3B0M10ucXV4KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjIsIG9wdGlvbnMuRXh0
ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmNvbXBsZXhfb3B0
M10uY29tcGxleG9wdGlvbnR5cGU1LnBsdWdoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjQsIG9w
dGlvbnMuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmNv
bXBsZXhvcHQ2XS54eXp6eSkKLQotICAjIENoZWNrIHRoYXQgYWdncmVnYXRlIG9wdGlvbnMgd2Vy
ZSBwYXJzZWQgYW5kIHNhdmVkIGNvcnJlY3RseSBpbgotICAjIHRoZSBhcHByb3ByaWF0ZSBkZXNj
cmlwdG9ycy4KLSAgZGVmIHRlc3RBZ2dyZWdhdGVPcHRpb25zKHNlbGYpOgotICAgIGZpbGVfZGVz
Y3JpcHRvciA9IHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5ERVNDUklQVE9SCi0gICAgbWVz
c2FnZV9kZXNjcmlwdG9yID1cCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5B
Z2dyZWdhdGVNZXNzYWdlLkRFU0NSSVBUT1IKLSAgICBmaWVsZF9kZXNjcmlwdG9yID0gbWVzc2Fn
ZV9kZXNjcmlwdG9yLmZpZWxkc19ieV9uYW1lWyJmaWVsZG5hbWUiXQotICAgIGVudW1fZGVzY3Jp
cHRvciA9IHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5BZ2dyZWdhdGVFbnVtLkRFU0NSSVBU
T1IKLSAgICBlbnVtX3ZhbHVlX2Rlc2NyaXB0b3IgPSBlbnVtX2Rlc2NyaXB0b3IudmFsdWVzX2J5
X25hbWVbIlZBTFVFIl0KLSAgICBzZXJ2aWNlX2Rlc2NyaXB0b3IgPVwKLSAgICAgICAgdW5pdHRl
c3RfY3VzdG9tX29wdGlvbnNfcGIyLkFnZ3JlZ2F0ZVNlcnZpY2UuREVTQ1JJUFRPUgotICAgIG1l
dGhvZF9kZXNjcmlwdG9yID0gc2VydmljZV9kZXNjcmlwdG9yLkZpbmRNZXRob2RCeU5hbWUoIk1l
dGhvZCIpCi0KLSAgICAjIFRlc3RzIGZvciB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGRhdGEgZW1i
ZWRkZWQgaW4gZmlsZW9wdAotICAgIGZpbGVfb3B0aW9ucyA9IGZpbGVfZGVzY3JpcHRvci5HZXRP
cHRpb25zKCkuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIy
LmZpbGVvcHRdCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxMDAsIGZpbGVfb3B0aW9ucy5pKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVBbm5vdGF0aW9uIiwgZmlsZV9vcHRpb25zLnMpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbCgiTmVzdGVkRmlsZUFubm90YXRpb24iLCBmaWxlX29wdGlvbnMuc3Vi
LnMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZUV4dGVuc2lvbkFubm90YXRpb24iLCBmaWxl
X29wdGlvbnMuZmlsZS5FeHRlbnNpb25zWwotICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9u
c19wYjIuZmlsZW9wdF0ucykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCJFbWJlZGRlZE1lc3NhZ2VT
ZXRFbGVtZW50IiwgZmlsZV9vcHRpb25zLm1zZXQuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRl
c3RfY3VzdG9tX29wdGlvbnNfcGIyLkFnZ3JlZ2F0ZU1lc3NhZ2VTZXRFbGVtZW50Ci0gICAgICAg
IC5tZXNzYWdlX3NldF9leHRlbnNpb25dLnMpCi0KLSAgICAjIFNpbXBsZSB0ZXN0cyBmb3IgYWxs
IHRoZSBvdGhlciB0eXBlcyBvZiBhbm5vdGF0aW9ucwotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0g
ICAgICAgICJNZXNzYWdlQW5ub3RhdGlvbiIsCi0gICAgICAgIG1lc3NhZ2VfZGVzY3JpcHRvci5H
ZXRPcHRpb25zKCkuRXh0ZW5zaW9uc1sKLSAgICAgICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRp
b25zX3BiMi5tc2dvcHRdLnMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgIkZpZWxk
QW5ub3RhdGlvbiIsCi0gICAgICAgIGZpZWxkX2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpLkV4dGVu
c2lvbnNbCi0gICAgICAgICAgICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuZmllbGRvcHRd
LnMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgIkVudW1Bbm5vdGF0aW9uIiwKLSAg
ICAgICAgZW51bV9kZXNjcmlwdG9yLkdldE9wdGlvbnMoKS5FeHRlbnNpb25zWwotICAgICAgICAg
ICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLmVudW1vcHRdLnMpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgKLSAgICAgICAgIkVudW1WYWx1ZUFubm90YXRpb24iLAotICAgICAgICBlbnVtX3Zh
bHVlX2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpLkV4dGVuc2lvbnNbCi0gICAgICAgICAgICB1bml0
dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuZW51bXZhbG9wdF0ucykKLSAgICBzZWxmLmFzc2VydEVx
dWFsKAotICAgICAgICAiU2VydmljZUFubm90YXRpb24iLAotICAgICAgICBzZXJ2aWNlX2Rlc2Ny
aXB0b3IuR2V0T3B0aW9ucygpLkV4dGVuc2lvbnNbCi0gICAgICAgICAgICB1bml0dGVzdF9jdXN0
b21fb3B0aW9uc19wYjIuc2VydmljZW9wdF0ucykKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAg
ICAgICAiTWV0aG9kQW5ub3RhdGlvbiIsCi0gICAgICAgIG1ldGhvZF9kZXNjcmlwdG9yLkdldE9w
dGlvbnMoKS5FeHRlbnNpb25zWwotICAgICAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNf
cGIyLm1ldGhvZG9wdF0ucykKLQotICBkZWYgdGVzdE5lc3RlZE9wdGlvbnMoc2VsZik6Ci0gICAg
bmVzdGVkX21lc3NhZ2UgPVwKLSAgICAgICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLk5l
c3RlZE9wdGlvblR5cGUuTmVzdGVkTWVzc2FnZS5ERVNDUklQVE9SCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCgxMDAxLCBuZXN0ZWRfbWVzc2FnZS5HZXRPcHRpb25zKCkuRXh0ZW5zaW9uc1sKLSAgICAg
ICAgdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIyLm1lc3NhZ2Vfb3B0MV0pCi0gICAgbmVzdGVk
X2ZpZWxkID0gbmVzdGVkX21lc3NhZ2UuZmllbGRzX2J5X25hbWVbIm5lc3RlZF9maWVsZCJdCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgxMDAyLCBuZXN0ZWRfZmllbGQuR2V0T3B0aW9ucygpLkV4dGVu
c2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5maWVsZF9vcHQxXSkK
LSAgICBvdXRlcl9tZXNzYWdlID1cCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3Bi
Mi5OZXN0ZWRPcHRpb25UeXBlLkRFU0NSSVBUT1IKLSAgICBuZXN0ZWRfZW51bSA9IG91dGVyX21l
c3NhZ2UuZW51bV90eXBlc19ieV9uYW1lWyJOZXN0ZWRFbnVtIl0KLSAgICBzZWxmLmFzc2VydEVx
dWFsKDEwMDMsIG5lc3RlZF9lbnVtLkdldE9wdGlvbnMoKS5FeHRlbnNpb25zWwotICAgICAgICB1
bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuZW51bV9vcHQxXSkKLSAgICBuZXN0ZWRfZW51bV92
YWx1ZSA9IG91dGVyX21lc3NhZ2UuZW51bV92YWx1ZXNfYnlfbmFtZVsiTkVTVEVEX0VOVU1fVkFM
VUUiXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAwNCwgbmVzdGVkX2VudW1fdmFsdWUuR2V0T3B0
aW9ucygpLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5l
bnVtX3ZhbHVlX29wdDFdKQotICAgIG5lc3RlZF9leHRlbnNpb24gPSBvdXRlcl9tZXNzYWdlLmV4
dGVuc2lvbnNfYnlfbmFtZVsibmVzdGVkX2V4dGVuc2lvbiJdCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgxMDA1LCBuZXN0ZWRfZXh0ZW5zaW9uLkdldE9wdGlvbnMoKS5FeHRlbnNpb25zWwotICAgICAg
ICB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIuZmllbGRfb3B0Ml0pCi0KLSAgZGVmIHRlc3RG
aWxlRGVzY3JpcHRvclJlZmVyZW5jZXMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
Lm15X2VudW0uZmlsZSwgc2VsZi5teV9maWxlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5t
eV9tZXNzYWdlLmZpbGUsIHNlbGYubXlfZmlsZSkKLQotICBkZWYgdGVzdEZpbGVEZXNjcmlwdG9y
KHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5teV9maWxlLm5hbWUsICdzb21lL2Zp
bGVuYW1lL3NvbWUucHJvdG8nKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5teV9maWxlLnBh
Y2thZ2UsICdwcm90b2J1Zl91bml0dGVzdCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm15
X2ZpbGUucG9vbCwgc2VsZi5wb29sKQotICAgICMgR2VuZXJhdGVkIG1vZHVsZXMgYWxzbyBiZWxv
bmcgdG8gdGhlIGRlZmF1bHQgcG9vbC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3Bi
Mi5ERVNDUklQVE9SLnBvb2wsIGRlc2NyaXB0b3JfcG9vbC5EZWZhdWx0KCkpCi0KLSAgQHVuaXR0
ZXN0LnNraXBJZigKLSAgICAgIGFwaV9pbXBsZW1lbnRhdGlvbi5UeXBlKCkgIT0gJ2NwcCcgb3Ig
YXBpX2ltcGxlbWVudGF0aW9uLlZlcnNpb24oKSAhPSAyLAotICAgICAgJ0ltbXV0YWJpbGl0eSBv
ZiBkZXNjcmlwdG9ycyBpcyBvbmx5IGVuZm9yY2VkIGluIHYyIGltcGxlbWVudGF0aW9uJykKLSAg
ZGVmIHRlc3RJbW11dGFibGVDcHBEZXNjcmlwdG9yKHNlbGYpOgotICAgIG1lc3NhZ2VfZGVzY3Jp
cHRvciA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuREVTQ1JJUFRPUgotICAgIHdpdGggc2Vs
Zi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgotICAgICAgbWVzc2FnZV9kZXNjcmlwdG9y
LmZpZWxkc19ieV9uYW1lID0gTm9uZQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVy
cm9yKToKLSAgICAgIG1lc3NhZ2VfZGVzY3JpcHRvci5maWVsZHNfYnlfbmFtZVsnQW5vdGhlcidd
ID0gTm9uZQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgIG1l
c3NhZ2VfZGVzY3JpcHRvci5maWVsZHMuYXBwZW5kKE5vbmUpCi0KLQotY2xhc3MgTmV3RGVzY3Jp
cHRvclRlc3QoRGVzY3JpcHRvclRlc3QpOgotICAiIiJSZWRvIHRoZSBzYW1lIHRlc3RzIGFzIGFi
b3ZlLCBidXQgd2l0aCBhIHNlcGFyYXRlIERlc2NyaXB0b3JQb29sLiIiIgotCi0gIGRlZiBHZXRE
ZXNjcmlwdG9yUG9vbChzZWxmKToKLSAgICByZXR1cm4gZGVzY3JpcHRvcl9wb29sLkRlc2NyaXB0
b3JQb29sKCkKLQotCi1jbGFzcyBHZW5lcmF0ZWREZXNjcmlwdG9yVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6Ci0gICIiIlRlc3RzIGZvciB0aGUgcHJvcGVydGllcyBvZiBkZXNjcmlwdG9ycyBpbiBn
ZW5lcmF0ZWQgY29kZS4iIiIKLQotICBkZWYgQ2hlY2tNZXNzYWdlRGVzY3JpcHRvcihzZWxmLCBt
ZXNzYWdlX2Rlc2NyaXB0b3IpOgotICAgICMgQmFzaWMgcHJvcGVydGllcwotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobWVzc2FnZV9kZXNjcmlwdG9yLm5hbWUsICdUZXN0QWxsVHlwZXMnKQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9kZXNjcmlwdG9yLmZ1bGxfbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICdwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMnKQotICAgICMgVGVzdCBl
cXVhbGl0eSBhbmQgaGFzaGFiaWxpdHkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2VfZGVz
Y3JpcHRvciwgbWVzc2FnZV9kZXNjcmlwdG9yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2Fn
ZV9kZXNjcmlwdG9yLmZpZWxkc1swXS5jb250YWluaW5nX3R5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlX2Rlc2NyaXB0b3IpCi0gICAgc2VsZi5hc3NlcnRJbihtZXNzYWdlX2Rlc2Ny
aXB0b3IsIFttZXNzYWdlX2Rlc2NyaXB0b3JdKQotICAgIHNlbGYuYXNzZXJ0SW4obWVzc2FnZV9k
ZXNjcmlwdG9yLCB7bWVzc2FnZV9kZXNjcmlwdG9yOiBOb25lfSkKLSAgICAjIFRlc3QgZmllbGQg
Y29udGFpbmVycwotICAgIHNlbGYuQ2hlY2tEZXNjcmlwdG9yU2VxdWVuY2UobWVzc2FnZV9kZXNj
cmlwdG9yLmZpZWxkcykKLSAgICBzZWxmLkNoZWNrRGVzY3JpcHRvck1hcHBpbmcobWVzc2FnZV9k
ZXNjcmlwdG9yLmZpZWxkc19ieV9uYW1lKQotICAgIHNlbGYuQ2hlY2tEZXNjcmlwdG9yTWFwcGlu
ZyhtZXNzYWdlX2Rlc2NyaXB0b3IuZmllbGRzX2J5X251bWJlcikKLSAgICBzZWxmLkNoZWNrRGVz
Y3JpcHRvck1hcHBpbmcobWVzc2FnZV9kZXNjcmlwdG9yLmZpZWxkc19ieV9jYW1lbGNhc2VfbmFt
ZSkKLQotICBkZWYgQ2hlY2tGaWVsZERlc2NyaXB0b3Ioc2VsZiwgZmllbGRfZGVzY3JpcHRvcik6
Ci0gICAgIyBCYXNpYyBwcm9wZXJ0aWVzCi0gICAgc2VsZi5hc3NlcnRFcXVhbChmaWVsZF9kZXNj
cmlwdG9yLm5hbWUsICdvcHRpb25hbF9pbnQzMicpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChmaWVs
ZF9kZXNjcmlwdG9yLmNhbWVsY2FzZV9uYW1lLCAnb3B0aW9uYWxJbnQzMicpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbChmaWVsZF9kZXNjcmlwdG9yLmZ1bGxfbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICdwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMub3B0aW9uYWxfaW50MzInKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZmllbGRfZGVzY3JpcHRvci5jb250YWluaW5nX3R5cGUubmFtZSwg
J1Rlc3RBbGxUeXBlcycpCi0gICAgIyBUZXN0IGVxdWFsaXR5IGFuZCBoYXNoYWJpbGl0eQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZmllbGRfZGVzY3JpcHRvciwgZmllbGRfZGVzY3JpcHRvcikKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBmaWVsZF9kZXNjcmlwdG9yLmNvbnRhaW5pbmdf
dHlwZS5maWVsZHNfYnlfbmFtZVsnb3B0aW9uYWxfaW50MzInXSwKLSAgICAgICAgZmllbGRfZGVz
Y3JpcHRvcikKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBmaWVsZF9kZXNjcmlwdG9y
LmNvbnRhaW5pbmdfdHlwZS5maWVsZHNfYnlfY2FtZWxjYXNlX25hbWVbCi0gICAgICAgICAgICAn
b3B0aW9uYWxJbnQzMiddLAotICAgICAgICBmaWVsZF9kZXNjcmlwdG9yKQotICAgIHNlbGYuYXNz
ZXJ0SW4oZmllbGRfZGVzY3JpcHRvciwgW2ZpZWxkX2Rlc2NyaXB0b3JdKQotICAgIHNlbGYuYXNz
ZXJ0SW4oZmllbGRfZGVzY3JpcHRvciwge2ZpZWxkX2Rlc2NyaXB0b3I6IE5vbmV9KQotCi0gIGRl
ZiBDaGVja0Rlc2NyaXB0b3JTZXF1ZW5jZShzZWxmLCBzZXF1ZW5jZSk6Ci0gICAgIyBWZXJpZmll
cyB0aGF0IGEgcHJvcGVydHkgbGlrZSAnbWVzc2FnZURlc2NyaXB0b3IuZmllbGRzJyBoYXMgYWxs
IHRoZQotICAgICMgcHJvcGVydGllcyBvZiBhbiBpbW11dGFibGUgYWJjLlNlcXVlbmNlLgotICAg
IHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oc2VxdWVuY2UpLCAwKSAgIyBTaXplZAotICAgIHNlbGYu
YXNzZXJ0RXF1YWwobGVuKHNlcXVlbmNlKSwgbGVuKGxpc3Qoc2VxdWVuY2UpKSkgICMgSXRlcmFi
bGUKLSAgICBpdGVtID0gc2VxdWVuY2VbMF0KLSAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIHNl
cXVlbmNlWzBdKQotICAgIHNlbGYuYXNzZXJ0SW4oaXRlbSwgc2VxdWVuY2UpICAjIENvbnRhaW5l
cgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VxdWVuY2UuaW5kZXgoaXRlbSksIDApCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZXF1ZW5jZS5jb3VudChpdGVtKSwgMSkKLSAgICByZXZlcnNlZF9pdGVy
YXRvciA9IHJldmVyc2VkKHNlcXVlbmNlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZl
cnNlZF9pdGVyYXRvciksIGxpc3Qoc2VxdWVuY2UpWzo6LTFdKQotICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIHJldmVyc2VkX2l0ZXJhdG9yKQotCi0gIGRlZiBDaGVj
a0Rlc2NyaXB0b3JNYXBwaW5nKHNlbGYsIG1hcHBpbmcpOgotICAgICMgVmVyaWZpZXMgdGhhdCBh
IHByb3BlcnR5IGxpa2UgJ21lc3NhZ2VEZXNjcmlwdG9yLmZpZWxkcycgaGFzIGFsbCB0aGUKLSAg
ICAjIHByb3BlcnRpZXMgb2YgYW4gaW1tdXRhYmxlIGFiYy5NYXBwaW5nLgotICAgIHNlbGYuYXNz
ZXJ0R3JlYXRlcihsZW4obWFwcGluZyksIDApICAjIFNpemVkCi0gICAgc2VsZi5hc3NlcnRFcXVh
bChsZW4obWFwcGluZyksIGxlbihsaXN0KG1hcHBpbmcpKSkgICMgSXRlcmFibGUKLSAgICBpZiBz
eXMudmVyc2lvbl9pbmZvID49ICgzLCk6Ci0gICAgICBrZXksIGl0ZW0gPSBuZXh0KGl0ZXIobWFw
cGluZy5pdGVtcygpKSkKLSAgICBlbHNlOgotICAgICAga2V5LCBpdGVtID0gbWFwcGluZy5pdGVt
cygpWzBdCi0gICAgc2VsZi5hc3NlcnRJbihrZXksIG1hcHBpbmcpICAjIENvbnRhaW5lcgotICAg
IHNlbGYuYXNzZXJ0RXF1YWwobWFwcGluZy5nZXQoa2V5KSwgaXRlbSkKLSAgICAjIGtleXMoKSwg
aXRlcmtleXMoKSAmY28KLSAgICBpdGVtID0gKG5leHQoaXRlcihtYXBwaW5nLmtleXMoKSkpLCBu
ZXh0KGl0ZXIobWFwcGluZy52YWx1ZXMoKSkpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbSwg
bmV4dChpdGVyKG1hcHBpbmcuaXRlbXMoKSkpKQotICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAo
MywpOgotICAgICAgZGVmIENoZWNrSXRlbXMoc2VxLCBpdGVyYXRvcik6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobmV4dChpdGVyYXRvciksIHNlcVswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChsaXN0KGl0ZXJhdG9yKSwgc2VxWzE6XSkKLSAgICAgIENoZWNrSXRlbXMobWFwcGluZy5r
ZXlzKCksIG1hcHBpbmcuaXRlcmtleXMoKSkKLSAgICAgIENoZWNrSXRlbXMobWFwcGluZy52YWx1
ZXMoKSwgbWFwcGluZy5pdGVydmFsdWVzKCkpCi0gICAgICBDaGVja0l0ZW1zKG1hcHBpbmcuaXRl
bXMoKSwgbWFwcGluZy5pdGVyaXRlbXMoKSkKLQotICBkZWYgdGVzdERlc2NyaXB0b3Ioc2VsZik6
Ci0gICAgbWVzc2FnZV9kZXNjcmlwdG9yID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5ERVND
UklQVE9SCi0gICAgc2VsZi5DaGVja01lc3NhZ2VEZXNjcmlwdG9yKG1lc3NhZ2VfZGVzY3JpcHRv
cikKLSAgICBmaWVsZF9kZXNjcmlwdG9yID0gbWVzc2FnZV9kZXNjcmlwdG9yLmZpZWxkc19ieV9u
YW1lWydvcHRpb25hbF9pbnQzMiddCi0gICAgc2VsZi5DaGVja0ZpZWxkRGVzY3JpcHRvcihmaWVs
ZF9kZXNjcmlwdG9yKQotICAgIGZpZWxkX2Rlc2NyaXB0b3IgPSBtZXNzYWdlX2Rlc2NyaXB0b3Iu
ZmllbGRzX2J5X2NhbWVsY2FzZV9uYW1lWwotICAgICAgICAnb3B0aW9uYWxJbnQzMiddCi0gICAg
c2VsZi5DaGVja0ZpZWxkRGVzY3JpcHRvcihmaWVsZF9kZXNjcmlwdG9yKQotCi0gIGRlZiB0ZXN0
Q3BwRGVzY3JpcHRvckNvbnRhaW5lcihzZWxmKToKLSAgICAjIENoZWNrIHRoYXQgdGhlIGNvbGxl
Y3Rpb24gaXMgc3RpbGwgdmFsaWQgZXZlbiBpZiB0aGUgcGFyZW50IGRpc2FwcGVhcmVkLgotICAg
IGVudW0gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLkRFU0NSSVBUT1IuZW51bV90eXBlc19i
eV9uYW1lWydOZXN0ZWRFbnVtJ10KLSAgICB2YWx1ZXMgPSBlbnVtLnZhbHVlcwotICAgIGRlbCBl
bnVtCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnRk9PJywgdmFsdWVzWzBdLm5hbWUpCi0KLSAgZGVm
IHRlc3RDcHBEZXNjcmlwdG9yQ29udGFpbmVyX0l0ZXJhdG9yKHNlbGYpOgotICAgICMgU2FtZSB0
ZXN0IHdpdGggdGhlIGl0ZXJhdG9yCi0gICAgZW51bSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlw
ZXMuREVTQ1JJUFRPUi5lbnVtX3R5cGVzX2J5X25hbWVbJ05lc3RlZEVudW0nXQotICAgIHZhbHVl
c19pdGVyID0gaXRlcihlbnVtLnZhbHVlcykKLSAgICBkZWwgZW51bQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ0ZPTycsIG5leHQodmFsdWVzX2l0ZXIpLm5hbWUpCi0KLQotY2xhc3MgRGVzY3JpcHRv
ckNvcHlUb1Byb3RvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICIiIlRlc3RzIGZvciBDb3B5
VG8gZnVuY3Rpb25zIG9mIERlc2NyaXB0b3IuIiIiCi0KLSAgZGVmIF9Bc3NlcnRQcm90b0VxdWFs
KHNlbGYsIGFjdHVhbF9wcm90bywgZXhwZWN0ZWRfY2xhc3MsIGV4cGVjdGVkX2FzY2lpKToKLSAg
ICBleHBlY3RlZF9wcm90byA9IGV4cGVjdGVkX2NsYXNzKCkKLSAgICB0ZXh0X2Zvcm1hdC5NZXJn
ZShleHBlY3RlZF9hc2NpaSwgZXhwZWN0ZWRfcHJvdG8pCi0KLSAgICBzZWxmLmFzc2VydEVxdWFs
KAotICAgICAgICBhY3R1YWxfcHJvdG8sIGV4cGVjdGVkX3Byb3RvLAotICAgICAgICAnTm90IGVx
dWFsLFxuQWN0dWFsOlxuJXNcbkV4cGVjdGVkOlxuJXNcbicKLSAgICAgICAgJSAoc3RyKGFjdHVh
bF9wcm90byksIHN0cihleHBlY3RlZF9wcm90bykpKQotCi0gIGRlZiBfSW50ZXJuYWxUZXN0Q29w
eVRvUHJvdG8oc2VsZiwgZGVzYywgZXhwZWN0ZWRfcHJvdG9fY2xhc3MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcHJvdG9fYXNjaWkpOgotICAgIGFjdHVhbCA9IGV4
cGVjdGVkX3Byb3RvX2NsYXNzKCkKLSAgICBkZXNjLkNvcHlUb1Byb3RvKGFjdHVhbCkKLSAgICBz
ZWxmLl9Bc3NlcnRQcm90b0VxdWFsKAotICAgICAgICBhY3R1YWwsIGV4cGVjdGVkX3Byb3RvX2Ns
YXNzLCBleHBlY3RlZF9wcm90b19hc2NpaSkKLQotICBkZWYgdGVzdENvcHlUb1Byb3RvX0VtcHR5
TWVzc2FnZShzZWxmKToKLSAgICBzZWxmLl9JbnRlcm5hbFRlc3RDb3B5VG9Qcm90bygKLSAgICAg
ICAgdW5pdHRlc3RfcGIyLlRlc3RFbXB0eU1lc3NhZ2UuREVTQ1JJUFRPUiwKLSAgICAgICAgZGVz
Y3JpcHRvcl9wYjIuRGVzY3JpcHRvclByb3RvLAotICAgICAgICBURVNUX0VNUFRZX01FU1NBR0Vf
REVTQ1JJUFRPUl9BU0NJSSkKLQotICBkZWYgdGVzdENvcHlUb1Byb3RvX05lc3RlZE1lc3NhZ2Uo
c2VsZik6Ci0gICAgVEVTVF9ORVNURURfTUVTU0FHRV9BU0NJSSA9ICIiIgotICAgICAgbmFtZTog
J05lc3RlZE1lc3NhZ2UnCi0gICAgICBmaWVsZDogPAotICAgICAgICBuYW1lOiAnYmInCi0gICAg
ICAgIG51bWJlcjogMQotICAgICAgICBsYWJlbDogMSAgIyBPcHRpb25hbAotICAgICAgICB0eXBl
OiA1ICAjIFRZUEVfSU5UMzIKLSAgICAgID4KLSAgICAgICIiIgotCi0gICAgc2VsZi5fSW50ZXJu
YWxUZXN0Q29weVRvUHJvdG8oCi0gICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVz
dGVkTWVzc2FnZS5ERVNDUklQVE9SLAotICAgICAgICBkZXNjcmlwdG9yX3BiMi5EZXNjcmlwdG9y
UHJvdG8sCi0gICAgICAgIFRFU1RfTkVTVEVEX01FU1NBR0VfQVNDSUkpCi0KLSAgZGVmIHRlc3RD
b3B5VG9Qcm90b19Gb3JlaWduTmVzdGVkTWVzc2FnZShzZWxmKToKLSAgICBURVNUX0ZPUkVJR05f
TkVTVEVEX0FTQ0lJID0gIiIiCi0gICAgICBuYW1lOiAnVGVzdEZvcmVpZ25OZXN0ZWQnCi0gICAg
ICBmaWVsZDogPAotICAgICAgICBuYW1lOiAnZm9yZWlnbl9uZXN0ZWQnCi0gICAgICAgIG51bWJl
cjogMQotICAgICAgICBsYWJlbDogMSAgIyBPcHRpb25hbAotICAgICAgICB0eXBlOiAxMSAgIyBU
WVBFX01FU1NBR0UKLSAgICAgICAgdHlwZV9uYW1lOiAnLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB
bGxUeXBlcy5OZXN0ZWRNZXNzYWdlJwotICAgICAgPgotICAgICAgIiIiCi0KLSAgICBzZWxmLl9J
bnRlcm5hbFRlc3RDb3B5VG9Qcm90bygKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RGb3JlaWdu
TmVzdGVkLkRFU0NSSVBUT1IsCi0gICAgICAgIGRlc2NyaXB0b3JfcGIyLkRlc2NyaXB0b3JQcm90
bywKLSAgICAgICAgVEVTVF9GT1JFSUdOX05FU1RFRF9BU0NJSSkKLQotICBkZWYgdGVzdENvcHlU
b1Byb3RvX0ZvcmVpZ25FbnVtKHNlbGYpOgotICAgIFRFU1RfRk9SRUlHTl9FTlVNX0FTQ0lJID0g
IiIiCi0gICAgICBuYW1lOiAnRm9yZWlnbkVudW0nCi0gICAgICB2YWx1ZTogPAotICAgICAgICBu
YW1lOiAnRk9SRUlHTl9GT08nCi0gICAgICAgIG51bWJlcjogNAotICAgICAgPgotICAgICAgdmFs
dWU6IDwKLSAgICAgICAgbmFtZTogJ0ZPUkVJR05fQkFSJwotICAgICAgICBudW1iZXI6IDUKLSAg
ICAgID4KLSAgICAgIHZhbHVlOiA8Ci0gICAgICAgIG5hbWU6ICdGT1JFSUdOX0JBWicKLSAgICAg
ICAgbnVtYmVyOiA2Ci0gICAgICA+Ci0gICAgICAiIiIKLQotICAgIHNlbGYuX0ludGVybmFsVGVz
dENvcHlUb1Byb3RvKAotICAgICAgICB1bml0dGVzdF9wYjIuRm9yZWlnbkVudW0uREVTQ1JJUFRP
UiwKLSAgICAgICAgZGVzY3JpcHRvcl9wYjIuRW51bURlc2NyaXB0b3JQcm90bywKLSAgICAgICAg
VEVTVF9GT1JFSUdOX0VOVU1fQVNDSUkpCi0KLSAgZGVmIHRlc3RDb3B5VG9Qcm90b19PcHRpb25z
KHNlbGYpOgotICAgIFRFU1RfREVQUkVDQVRFRF9GSUVMRFNfQVNDSUkgPSAiIiIKLSAgICAgIG5h
bWU6ICdUZXN0RGVwcmVjYXRlZEZpZWxkcycKLSAgICAgIGZpZWxkOiA8Ci0gICAgICAgIG5hbWU6
ICdkZXByZWNhdGVkX2ludDMyJwotICAgICAgICBudW1iZXI6IDEKLSAgICAgICAgbGFiZWw6IDEg
ICMgT3B0aW9uYWwKLSAgICAgICAgdHlwZTogNSAgIyBUWVBFX0lOVDMyCi0gICAgICAgIG9wdGlv
bnM6IDwKLSAgICAgICAgICBkZXByZWNhdGVkOiB0cnVlCi0gICAgICAgID4KLSAgICAgID4KLSAg
ICAgICIiIgotCi0gICAgc2VsZi5fSW50ZXJuYWxUZXN0Q29weVRvUHJvdG8oCi0gICAgICAgIHVu
aXR0ZXN0X3BiMi5UZXN0RGVwcmVjYXRlZEZpZWxkcy5ERVNDUklQVE9SLAotICAgICAgICBkZXNj
cmlwdG9yX3BiMi5EZXNjcmlwdG9yUHJvdG8sCi0gICAgICAgIFRFU1RfREVQUkVDQVRFRF9GSUVM
RFNfQVNDSUkpCi0KLSAgZGVmIHRlc3RDb3B5VG9Qcm90b19BbGxFeHRlbnNpb25zKHNlbGYpOgot
ICAgIFRFU1RfRU1QVFlfTUVTU0FHRV9XSVRIX0VYVEVOU0lPTlNfQVNDSUkgPSAiIiIKLSAgICAg
IG5hbWU6ICdUZXN0RW1wdHlNZXNzYWdlV2l0aEV4dGVuc2lvbnMnCi0gICAgICBleHRlbnNpb25f
cmFuZ2U6IDwKLSAgICAgICAgc3RhcnQ6IDEKLSAgICAgICAgZW5kOiA1MzY4NzA5MTIKLSAgICAg
ID4KLSAgICAgICIiIgotCi0gICAgc2VsZi5fSW50ZXJuYWxUZXN0Q29weVRvUHJvdG8oCi0gICAg
ICAgIHVuaXR0ZXN0X3BiMi5UZXN0RW1wdHlNZXNzYWdlV2l0aEV4dGVuc2lvbnMuREVTQ1JJUFRP
UiwKLSAgICAgICAgZGVzY3JpcHRvcl9wYjIuRGVzY3JpcHRvclByb3RvLAotICAgICAgICBURVNU
X0VNUFRZX01FU1NBR0VfV0lUSF9FWFRFTlNJT05TX0FTQ0lJKQotCi0gIGRlZiB0ZXN0Q29weVRv
UHJvdG9fU2V2ZXJhbEV4dGVuc2lvbnMoc2VsZik6Ci0gICAgVEVTVF9NRVNTQUdFX1dJVEhfU0VW
RVJBTF9FWFRFTlNJT05TX0FTQ0lJID0gIiIiCi0gICAgICBuYW1lOiAnVGVzdE11bHRpcGxlRXh0
ZW5zaW9uUmFuZ2VzJwotICAgICAgZXh0ZW5zaW9uX3JhbmdlOiA8Ci0gICAgICAgIHN0YXJ0OiA0
MgotICAgICAgICBlbmQ6IDQzCi0gICAgICA+Ci0gICAgICBleHRlbnNpb25fcmFuZ2U6IDwKLSAg
ICAgICAgc3RhcnQ6IDQxNDMKLSAgICAgICAgZW5kOiA0MjQ0Ci0gICAgICA+Ci0gICAgICBleHRl
bnNpb25fcmFuZ2U6IDwKLSAgICAgICAgc3RhcnQ6IDY1NTM2Ci0gICAgICAgIGVuZDogNTM2ODcw
OTEyCi0gICAgICA+Ci0gICAgICAiIiIKLQotICAgIHNlbGYuX0ludGVybmFsVGVzdENvcHlUb1By
b3RvKAotICAgICAgICB1bml0dGVzdF9wYjIuVGVzdE11bHRpcGxlRXh0ZW5zaW9uUmFuZ2VzLkRF
U0NSSVBUT1IsCi0gICAgICAgIGRlc2NyaXB0b3JfcGIyLkRlc2NyaXB0b3JQcm90bywKLSAgICAg
ICAgVEVTVF9NRVNTQUdFX1dJVEhfU0VWRVJBTF9FWFRFTlNJT05TX0FTQ0lJKQotCi0gICMgRGlz
YWJsZSB0aGlzIHRlc3Qgc28gd2UgY2FuIG1ha2UgY2hhbmdlcyB0byB0aGUgcHJvdG8gZmlsZS4K
LSAgIyBUT0RPKHhpYW9mZW5nKTogRW5hYmxlIHRoaXMgdGVzdCBhZnRlciBjbC81NTUzMDY1OSBp
cyBzdWJtaXR0ZWQuCi0gICMKLSAgIyBkZWYgdGVzdENvcHlUb1Byb3RvX0ZpbGVEZXNjcmlwdG9y
KHNlbGYpOgotICAjICAgVU5JVFRFU1RfSU1QT1JUX0ZJTEVfREVTQ1JJUFRPUl9BU0NJSSA9ICgi
IiIKLSAgIyAgICAgbmFtZTogJ2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnQucHJvdG8n
Ci0gICMgICAgIHBhY2thZ2U6ICdwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQnCi0gICMgICAgIGRl
cGVuZGVuY3k6ICdnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpYy5wcm90bycK
LSAgIyAgICAgbWVzc2FnZV90eXBlOiA8Ci0gICMgICAgICAgbmFtZTogJ0ltcG9ydE1lc3NhZ2Un
Ci0gICMgICAgICAgZmllbGQ6IDwKLSAgIyAgICAgICAgIG5hbWU6ICdkJwotICAjICAgICAgICAg
bnVtYmVyOiAxCi0gICMgICAgICAgICBsYWJlbDogMSAgIyBPcHRpb25hbAotICAjICAgICAgICAg
dHlwZTogNSAgIyBUWVBFX0lOVDMyCi0gICMgICAgICAgPgotICAjICAgICA+Ci0gICMgICAgICIi
IiArCi0gICMgICAgICIiImVudW1fdHlwZTogPAotICAjICAgICAgIG5hbWU6ICdJbXBvcnRFbnVt
JwotICAjICAgICAgIHZhbHVlOiA8Ci0gICMgICAgICAgICBuYW1lOiAnSU1QT1JUX0ZPTycKLSAg
IyAgICAgICAgIG51bWJlcjogNwotICAjICAgICAgID4KLSAgIyAgICAgICB2YWx1ZTogPAotICAj
ICAgICAgICAgbmFtZTogJ0lNUE9SVF9CQVInCi0gICMgICAgICAgICBudW1iZXI6IDgKLSAgIyAg
ICAgICA+Ci0gICMgICAgICAgdmFsdWU6IDwKLSAgIyAgICAgICAgIG5hbWU6ICdJTVBPUlRfQkFa
JwotICAjICAgICAgICAgbnVtYmVyOiA5Ci0gICMgICAgICAgPgotICAjICAgICA+Ci0gICMgICAg
IG9wdGlvbnM6IDwKLSAgIyAgICAgICBqYXZhX3BhY2thZ2U6ICdjb20uZ29vZ2xlLnByb3RvYnVm
LnRlc3QnCi0gICMgICAgICAgb3B0aW1pemVfZm9yOiAxICAjIFNQRUVECi0gICMgICAgID4KLSAg
IyAgICAgcHVibGljX2RlcGVuZGVuY3k6IDAKLSAgIyAgIiIiKQotICAjICBzZWxmLl9JbnRlcm5h
bFRlc3RDb3B5VG9Qcm90bygKLSAgIyAgICAgIHVuaXR0ZXN0X2ltcG9ydF9wYjIuREVTQ1JJUFRP
UiwKLSAgIyAgICAgIGRlc2NyaXB0b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8sCi0gICMgICAg
ICBVTklUVEVTVF9JTVBPUlRfRklMRV9ERVNDUklQVE9SX0FTQ0lJKQotCi0gIGRlZiB0ZXN0Q29w
eVRvUHJvdG9fU2VydmljZURlc2NyaXB0b3Ioc2VsZik6Ci0gICAgVEVTVF9TRVJWSUNFX0FTQ0lJ
ID0gIiIiCi0gICAgICBuYW1lOiAnVGVzdFNlcnZpY2UnCi0gICAgICBtZXRob2Q6IDwKLSAgICAg
ICAgbmFtZTogJ0ZvbycKLSAgICAgICAgaW5wdXRfdHlwZTogJy5wcm90b2J1Zl91bml0dGVzdC5G
b29SZXF1ZXN0JwotICAgICAgICBvdXRwdXRfdHlwZTogJy5wcm90b2J1Zl91bml0dGVzdC5Gb29S
ZXNwb25zZScKLSAgICAgID4KLSAgICAgIG1ldGhvZDogPAotICAgICAgICBuYW1lOiAnQmFyJwot
ICAgICAgICBpbnB1dF90eXBlOiAnLnByb3RvYnVmX3VuaXR0ZXN0LkJhclJlcXVlc3QnCi0gICAg
ICAgIG91dHB1dF90eXBlOiAnLnByb3RvYnVmX3VuaXR0ZXN0LkJhclJlc3BvbnNlJwotICAgICAg
PgotICAgICAgIiIiCi0gICAgIyBUT0RPKHJvY2tpbmcpOiBlbmFibGUgdGhpcyB0ZXN0IGFmdGVy
IHRoZSBwcm90byBkZXNjcmlwdG9yIGNoYW5nZSBpcwotICAgICMgY2hlY2tlZCBpbi4KLSAgICAj
c2VsZi5fSW50ZXJuYWxUZXN0Q29weVRvUHJvdG8oCi0gICAgIyAgICB1bml0dGVzdF9wYjIuVGVz
dFNlcnZpY2UuREVTQ1JJUFRPUiwKLSAgICAjICAgIGRlc2NyaXB0b3JfcGIyLlNlcnZpY2VEZXNj
cmlwdG9yUHJvdG8sCi0gICAgIyAgICBURVNUX1NFUlZJQ0VfQVNDSUkpCi0KLQotY2xhc3MgTWFr
ZURlc2NyaXB0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdE1ha2VEZXNj
cmlwdG9yV2l0aE5lc3RlZEZpZWxkcyhzZWxmKToKLSAgICBmaWxlX2Rlc2NyaXB0b3JfcHJvdG8g
PSBkZXNjcmlwdG9yX3BiMi5GaWxlRGVzY3JpcHRvclByb3RvKCkKLSAgICBmaWxlX2Rlc2NyaXB0
b3JfcHJvdG8ubmFtZSA9ICdGb28yJwotICAgIG1lc3NhZ2VfdHlwZSA9IGZpbGVfZGVzY3JpcHRv
cl9wcm90by5tZXNzYWdlX3R5cGUuYWRkKCkKLSAgICBtZXNzYWdlX3R5cGUubmFtZSA9IGZpbGVf
ZGVzY3JpcHRvcl9wcm90by5uYW1lCi0gICAgbmVzdGVkX3R5cGUgPSBtZXNzYWdlX3R5cGUubmVz
dGVkX3R5cGUuYWRkKCkKLSAgICBuZXN0ZWRfdHlwZS5uYW1lID0gJ1N1YicKLSAgICBlbnVtX3R5
cGUgPSBuZXN0ZWRfdHlwZS5lbnVtX3R5cGUuYWRkKCkKLSAgICBlbnVtX3R5cGUubmFtZSA9ICdG
T08nCi0gICAgZW51bV90eXBlX3ZhbCA9IGVudW1fdHlwZS52YWx1ZS5hZGQoKQotICAgIGVudW1f
dHlwZV92YWwubmFtZSA9ICdCQVInCi0gICAgZW51bV90eXBlX3ZhbC5udW1iZXIgPSAzCi0gICAg
ZmllbGQgPSBtZXNzYWdlX3R5cGUuZmllbGQuYWRkKCkKLSAgICBmaWVsZC5udW1iZXIgPSAxCi0g
ICAgZmllbGQubmFtZSA9ICd1aW50NjRfZmllbGQnCi0gICAgZmllbGQubGFiZWwgPSBkZXNjcmlw
dG9yLkZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVFVSVJFRAotICAgIGZpZWxkLnR5cGUgPSBkZXNj
cmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX1VJTlQ2NAotICAgIGZpZWxkID0gbWVzc2FnZV90
eXBlLmZpZWxkLmFkZCgpCi0gICAgZmllbGQubnVtYmVyID0gMgotICAgIGZpZWxkLm5hbWUgPSAn
bmVzdGVkX21lc3NhZ2VfZmllbGQnCi0gICAgZmllbGQubGFiZWwgPSBkZXNjcmlwdG9yLkZpZWxk
RGVzY3JpcHRvci5MQUJFTF9SRVFVSVJFRAotICAgIGZpZWxkLnR5cGUgPSBkZXNjcmlwdG9yLkZp
ZWxkRGVzY3JpcHRvci5UWVBFX01FU1NBR0UKLSAgICBmaWVsZC50eXBlX25hbWUgPSAnU3ViJwot
ICAgIGVudW1fZmllbGQgPSBuZXN0ZWRfdHlwZS5maWVsZC5hZGQoKQotICAgIGVudW1fZmllbGQu
bnVtYmVyID0gMgotICAgIGVudW1fZmllbGQubmFtZSA9ICdiYXJfZmllbGQnCi0gICAgZW51bV9m
aWVsZC5sYWJlbCA9IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkxBQkVMX1JFUVVJUkVECi0g
ICAgZW51bV9maWVsZC50eXBlID0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9FTlVN
Ci0gICAgZW51bV9maWVsZC50eXBlX25hbWUgPSAnRm9vMi5TdWIuRk9PJwotCi0gICAgcmVzdWx0
ID0gZGVzY3JpcHRvci5NYWtlRGVzY3JpcHRvcihtZXNzYWdlX3R5cGUpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChyZXN1bHQuZmllbGRzWzBdLmNwcF90eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9VSU5UNjQpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChyZXN1bHQuZmllbGRzWzFdLmNwcF90eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9NRVNTQUdFKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocmVzdWx0LmZpZWxkc1sxXS5tZXNzYWdlX3R5cGUuY29udGFpbmluZ190eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0
Lm5lc3RlZF90eXBlc1swXS5maWVsZHNbMF0uZnVsbF9uYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgJ0ZvbzIuU3ViLmJhcl9maWVsZCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQubmVz
dGVkX3R5cGVzWzBdLmZpZWxkc1swXS5lbnVtX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQubmVzdGVkX3R5cGVzWzBdLmVudW1fdHlwZXNbMF0pCi0KLSAgZGVmIHRlc3RNYWtlRGVz
Y3JpcHRvcldpdGhVbnNpZ25lZEludEZpZWxkKHNlbGYpOgotICAgIGZpbGVfZGVzY3JpcHRvcl9w
cm90byA9IGRlc2NyaXB0b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8oKQotICAgIGZpbGVfZGVz
Y3JpcHRvcl9wcm90by5uYW1lID0gJ0ZvbycKLSAgICBtZXNzYWdlX3R5cGUgPSBmaWxlX2Rlc2Ny
aXB0b3JfcHJvdG8ubWVzc2FnZV90eXBlLmFkZCgpCi0gICAgbWVzc2FnZV90eXBlLm5hbWUgPSBm
aWxlX2Rlc2NyaXB0b3JfcHJvdG8ubmFtZQotICAgIGVudW1fdHlwZSA9IG1lc3NhZ2VfdHlwZS5l
bnVtX3R5cGUuYWRkKCkKLSAgICBlbnVtX3R5cGUubmFtZSA9ICdGT08nCi0gICAgZW51bV90eXBl
X3ZhbCA9IGVudW1fdHlwZS52YWx1ZS5hZGQoKQotICAgIGVudW1fdHlwZV92YWwubmFtZSA9ICdC
QVInCi0gICAgZW51bV90eXBlX3ZhbC5udW1iZXIgPSAzCi0gICAgZmllbGQgPSBtZXNzYWdlX3R5
cGUuZmllbGQuYWRkKCkKLSAgICBmaWVsZC5udW1iZXIgPSAxCi0gICAgZmllbGQubmFtZSA9ICd1
aW50NjRfZmllbGQnCi0gICAgZmllbGQubGFiZWwgPSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRv
ci5MQUJFTF9SRVFVSVJFRAotICAgIGZpZWxkLnR5cGUgPSBkZXNjcmlwdG9yLkZpZWxkRGVzY3Jp
cHRvci5UWVBFX1VJTlQ2NAotICAgIGVudW1fZmllbGQgPSBtZXNzYWdlX3R5cGUuZmllbGQuYWRk
KCkKLSAgICBlbnVtX2ZpZWxkLm51bWJlciA9IDIKLSAgICBlbnVtX2ZpZWxkLm5hbWUgPSAnYmFy
X2ZpZWxkJwotICAgIGVudW1fZmllbGQubGFiZWwgPSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRv
ci5MQUJFTF9SRVFVSVJFRAotICAgIGVudW1fZmllbGQudHlwZSA9IGRlc2NyaXB0b3IuRmllbGRE
ZXNjcmlwdG9yLlRZUEVfRU5VTQotICAgIGVudW1fZmllbGQudHlwZV9uYW1lID0gJ0Zvby5GT08n
Ci0KLSAgICByZXN1bHQgPSBkZXNjcmlwdG9yLk1ha2VEZXNjcmlwdG9yKG1lc3NhZ2VfdHlwZSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5maWVsZHNbMF0uY3BwX3R5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX1VJTlQ2NCkK
LQotCi0gIGRlZiB0ZXN0TWFrZURlc2NyaXB0b3JXaXRoT3B0aW9ucyhzZWxmKToKLSAgICBkZXNj
cmlwdG9yX3Byb3RvID0gZGVzY3JpcHRvcl9wYjIuRGVzY3JpcHRvclByb3RvKCkKLSAgICBhZ2dy
ZWdhdGVfbWVzc2FnZSA9IHVuaXR0ZXN0X2N1c3RvbV9vcHRpb25zX3BiMi5BZ2dyZWdhdGVNZXNz
YWdlCi0gICAgYWdncmVnYXRlX21lc3NhZ2UuREVTQ1JJUFRPUi5Db3B5VG9Qcm90byhkZXNjcmlw
dG9yX3Byb3RvKQotICAgIHJlZm9ybWVkX2Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLk1ha2VEZXNj
cmlwdG9yKGRlc2NyaXB0b3JfcHJvdG8pCi0KLSAgICBvcHRpb25zID0gcmVmb3JtZWRfZGVzY3Jp
cHRvci5HZXRPcHRpb25zKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEwMSwKLSAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zLkV4dGVuc2lvbnNbdW5pdHRlc3RfY3VzdG9tX29wdGlvbnNfcGIy
Lm1zZ29wdF0uaSkKLQotICBkZWYgdGVzdENhbWVsY2FzZU5hbWUoc2VsZik6Ci0gICAgZGVzY3Jp
cHRvcl9wcm90byA9IGRlc2NyaXB0b3JfcGIyLkRlc2NyaXB0b3JQcm90bygpCi0gICAgZGVzY3Jp
cHRvcl9wcm90by5uYW1lID0gJ0JhcicKLSAgICBuYW1lcyA9IFsnZm9vX2ZvbycsICdGb29CYXIn
LCAnZm9vQmF6JywgJ2Zvb0ZvbycsICdmb29iYXInXQotICAgIGNhbWVsY2FzZV9uYW1lcyA9IFsn
Zm9vRm9vJywgJ2Zvb0JhcicsICdmb29CYXonLCAnZm9vRm9vJywgJ2Zvb2JhciddCi0gICAgZm9y
IGluZGV4IGluIHJhbmdlKGxlbihuYW1lcykpOgotICAgICAgZmllbGQgPSBkZXNjcmlwdG9yX3By
b3RvLmZpZWxkLmFkZCgpCi0gICAgICBmaWVsZC5udW1iZXIgPSBpbmRleCArIDEKLSAgICAgIGZp
ZWxkLm5hbWUgPSBuYW1lc1tpbmRleF0KLSAgICByZXN1bHQgPSBkZXNjcmlwdG9yLk1ha2VEZXNj
cmlwdG9yKGRlc2NyaXB0b3JfcHJvdG8pCi0gICAgZm9yIGluZGV4IGluIHJhbmdlKGxlbihjYW1l
bGNhc2VfbmFtZXMpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmZpZWxkc1tpbmRl
eF0uY2FtZWxjYXNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNhbWVsY2FzZV9uYW1l
c1tpbmRleF0pCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFp
bigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZW5jb2Rlci5w
eSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGVyLnB5CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCA0OGVmMmRmMzFjMjFkYWU3Y2I1YjhjODEzYTM4NjEzZGE2M2Ey
MmU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9u
L2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9lbmNvZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEs
ODIzICswLDAgQEAKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9u
LgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQ29kZSBmb3IgZW5jb2RpbmcgcHJvdG9jb2wgbWVzc2Fn
ZSBwcmltaXRpdmVzLgotCi1Db250YWlucyB0aGUgbG9naWMgZm9yIGVuY29kaW5nIGV2ZXJ5IGxv
Z2ljYWwgcHJvdG9jb2wgZmllbGQgdHlwZQotaW50byBvbmUgb2YgdGhlIDUgcGh5c2ljYWwgd2ly
ZSB0eXBlcy4KLQotVGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIHB1c2ggdGhlIFB5dGhvbiBpbnRl
cnByZXRlcidzIHBlcmZvcm1hbmNlIHRvIHRoZQotbGltaXRzLgotCi1UaGUgYmFzaWMgaWRlYSBp
cyB0aGF0IGF0IHN0YXJ0dXAgdGltZSwgZm9yIGV2ZXJ5IGZpZWxkIChpLmUuIGV2ZXJ5Ci1GaWVs
ZERlc2NyaXB0b3IpIHdlIGNvbnN0cnVjdCB0d28gZnVuY3Rpb25zOiAgYSAic2l6ZXIiIGFuZCBh
biAiZW5jb2RlciIuICBUaGUKLXNpemVyIHRha2VzIGEgdmFsdWUgb2YgdGhpcyBmaWVsZCdzIHR5
cGUgYW5kIGNvbXB1dGVzIGl0cyBieXRlIHNpemUuICBUaGUKLWVuY29kZXIgdGFrZXMgYSB3cml0
ZXIgZnVuY3Rpb24gYW5kIGEgdmFsdWUuICBJdCBlbmNvZGVzIHRoZSB2YWx1ZSBpbnRvIGJ5dGUK
LXN0cmluZ3MgYW5kIGludm9rZXMgdGhlIHdyaXRlciBmdW5jdGlvbiB0byB3cml0ZSB0aG9zZSBz
dHJpbmdzLiAgVHlwaWNhbGx5IHRoZQotd3JpdGVyIGZ1bmN0aW9uIGlzIHRoZSB3cml0ZSgpIG1l
dGhvZCBvZiBhIEJ5dGVzSU8uCi0KLVdlIHRyeSB0byBkbyBhcyBtdWNoIHdvcmsgYXMgcG9zc2li
bGUgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIHdyaXRlciBhbmQgdGhlCi1zaXplciByYXRoZXIgdGhh
biB3aGVuIGNhbGxpbmcgdGhlbS4gIEluIHBhcnRpY3VsYXI6Ci0qIFdlIGNvcHkgYW55IG5lZWRl
ZCBnbG9iYWwgZnVuY3Rpb25zIHRvIGxvY2FsIHZhcmlhYmxlcywgc28gdGhhdCB3ZSBkbyBub3Qg
bmVlZAotICB0byBkbyBjb3N0bHkgZ2xvYmFsIHRhYmxlIGxvb2t1cHMgYXQgcnVudGltZS4KLSog
U2ltaWxhcmx5LCB3ZSB0cnkgdG8gZG8gYW55IGF0dHJpYnV0ZSBsb29rdXBzIGF0IHN0YXJ0dXAg
dGltZSBpZiBwb3NzaWJsZS4KLSogRXZlcnkgZmllbGQncyB0YWcgaXMgZW5jb2RlZCB0byBieXRl
cyBhdCBzdGFydHVwLCBzaW5jZSBpdCBjYW4ndCBjaGFuZ2UgYXQKLSAgcnVudGltZS4KLSogV2hh
dGV2ZXIgY29tcG9uZW50IG9mIHRoZSBmaWVsZCBzaXplIHdlIGNhbiBjb21wdXRlIGF0IHN0YXJ0
dXAsIHdlIGRvLgotKiBXZSAqYXZvaWQqIHNoYXJpbmcgY29kZSBpZiBkb2luZyBzbyB3b3VsZCBt
YWtlIHRoZSBjb2RlIHNsb3dlciBhbmQgbm90IHNoYXJpbmcKLSAgZG9lcyBub3QgYnVyZGVuIHVz
IHRvbyBtdWNoLiAgRm9yIGV4YW1wbGUsIGVuY29kZXJzIGZvciByZXBlYXRlZCBmaWVsZHMgZG8K
LSAgbm90IGp1c3QgY2FsbCB0aGUgZW5jb2RlcnMgZm9yIHNpbmd1bGFyIGZpZWxkcyBpbiBhIGxv
b3AgYmVjYXVzZSB0aGlzIHdvdWxkCi0gIGFkZCBhbiBleHRyYSBmdW5jdGlvbiBjYWxsIG92ZXJo
ZWFkIGZvciBldmVyeSBsb29wIGl0ZXJhdGlvbjsgaW5zdGVhZCwgd2UKLSAgbWFudWFsbHkgaW5s
aW5lIHRoZSBzaW5nbGUtdmFsdWUgZW5jb2RlciBpbnRvIHRoZSBsb29wLgotKiBJZiBhIFB5dGhv
biBmdW5jdGlvbiBsYWNrcyBhIHJldHVybiBzdGF0ZW1lbnQsIFB5dGhvbiBhY3R1YWxseSBnZW5l
cmF0ZXMKLSAgaW5zdHJ1Y3Rpb25zIHRvIHBvcCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRl
bWVudCBvZmYgdGhlIHN0YWNrLCBwdXNoCi0gIE5vbmUgb250byB0aGUgc3RhY2ssIGFuZCB0aGVu
IHJldHVybiB0aGF0LiAgSWYgd2UgcmVhbGx5IGRvbid0IGNhcmUgd2hhdAotICB2YWx1ZSBpcyBy
ZXR1cm5lZCwgdGhlbiB3ZSBjYW4gc2F2ZSB0d28gaW5zdHJ1Y3Rpb25zIGJ5IHJldHVybmluZyB0
aGUKLSAgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudC4gIEl0IGxvb2tzIGZ1bm55IGJ1dCBp
dCBoZWxwcy4KLSogV2UgYXNzdW1lIHRoYXQgdHlwZSBhbmQgYm91bmRzIGNoZWNraW5nIGhhcyBo
YXBwZW5lZCBhdCBhIGhpZ2hlciBsZXZlbC4KLSIiIgotCi1fX2F1dGhvcl9fID0gJ2tlbnRvbkBn
b29nbGUuY29tIChLZW50b24gVmFyZGEpJwotCi1pbXBvcnQgc3RydWN0Ci0KLWltcG9ydCBzaXgK
LQotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IHdpcmVfZm9ybWF0Ci0KLQot
IyBUaGlzIHdpbGwgb3ZlcmZsb3cgYW5kIHRodXMgYmVjb21lIElFRUUtNzU0ICJpbmZpbml0eSIu
ICBXZSB3b3VsZCB1c2UKLSMgImZsb2F0KCdpbmYnKSIgYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBX
aW5kb3dzIHByZS1QeXRob24tMi42LgotX1BPU19JTkYgPSAxZTEwMDAwCi1fTkVHX0lORiA9IC1f
UE9TX0lORgotCi0KLWRlZiBfVmFyaW50U2l6ZSh2YWx1ZSk6Ci0gICIiIkNvbXB1dGUgdGhlIHNp
emUgb2YgYSB2YXJpbnQgdmFsdWUuIiIiCi0gIGlmIHZhbHVlIDw9IDB4N2Y6IHJldHVybiAxCi0g
IGlmIHZhbHVlIDw9IDB4M2ZmZjogcmV0dXJuIDIKLSAgaWYgdmFsdWUgPD0gMHgxZmZmZmY6IHJl
dHVybiAzCi0gIGlmIHZhbHVlIDw9IDB4ZmZmZmZmZjogcmV0dXJuIDQKLSAgaWYgdmFsdWUgPD0g
MHg3ZmZmZmZmZmY6IHJldHVybiA1Ci0gIGlmIHZhbHVlIDw9IDB4M2ZmZmZmZmZmZmY6IHJldHVy
biA2Ci0gIGlmIHZhbHVlIDw9IDB4MWZmZmZmZmZmZmZmZjogcmV0dXJuIDcKLSAgaWYgdmFsdWUg
PD0gMHhmZmZmZmZmZmZmZmZmZjogcmV0dXJuIDgKLSAgaWYgdmFsdWUgPD0gMHg3ZmZmZmZmZmZm
ZmZmZmZmOiByZXR1cm4gOQotICByZXR1cm4gMTAKLQotCi1kZWYgX1NpZ25lZFZhcmludFNpemUo
dmFsdWUpOgotICAiIiJDb21wdXRlIHRoZSBzaXplIG9mIGEgc2lnbmVkIHZhcmludCB2YWx1ZS4i
IiIKLSAgaWYgdmFsdWUgPCAwOiByZXR1cm4gMTAKLSAgaWYgdmFsdWUgPD0gMHg3ZjogcmV0dXJu
IDEKLSAgaWYgdmFsdWUgPD0gMHgzZmZmOiByZXR1cm4gMgotICBpZiB2YWx1ZSA8PSAweDFmZmZm
ZjogcmV0dXJuIDMKLSAgaWYgdmFsdWUgPD0gMHhmZmZmZmZmOiByZXR1cm4gNAotICBpZiB2YWx1
ZSA8PSAweDdmZmZmZmZmZjogcmV0dXJuIDUKLSAgaWYgdmFsdWUgPD0gMHgzZmZmZmZmZmZmZjog
cmV0dXJuIDYKLSAgaWYgdmFsdWUgPD0gMHgxZmZmZmZmZmZmZmZmOiByZXR1cm4gNwotICBpZiB2
YWx1ZSA8PSAweGZmZmZmZmZmZmZmZmZmOiByZXR1cm4gOAotICBpZiB2YWx1ZSA8PSAweDdmZmZm
ZmZmZmZmZmZmZmY6IHJldHVybiA5Ci0gIHJldHVybiAxMAotCi0KLWRlZiBfVGFnU2l6ZShmaWVs
ZF9udW1iZXIpOgotICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8g
c2VyaWFsaXplIGEgdGFnIHdpdGggdGhpcyBmaWVsZAotICBudW1iZXIuIiIiCi0gICMgSnVzdCBw
YXNzIGluIHR5cGUgMCwgc2luY2UgdGhlIHR5cGUgd29uJ3QgYWZmZWN0IHRoZSB0YWcrdHlwZSBz
aXplLgotICByZXR1cm4gX1ZhcmludFNpemUod2lyZV9mb3JtYXQuUGFja1RhZyhmaWVsZF9udW1i
ZXIsIDApKQotCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSW4gdGhpcyBzZWN0aW9uIHdlIGRlZmluZSBz
b21lIGdlbmVyaWMgc2l6ZXJzLiAgRWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMKLSMgdGFrZXMgcGFy
YW1ldGVycyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgZmllbGQgdHlwZSwgZS5nLiBpbnQzMiBv
ciBmaXhlZDY0LgotIyBJdCByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24gd2hpY2ggaW4gdHVybiB0
YWtlcyBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIGEKLSMgcGFydGljdWxhciBmaWVsZCwgZS5nLiB0
aGUgZmllbGQgbnVtYmVyIGFuZCB3aGV0aGVyIGl0IGlzIHJlcGVhdGVkIG9yIHBhY2tlZC4KLSMg
TG9vayBhdCB0aGUgbmV4dCBzZWN0aW9uIHRvIHNlZSBob3cgdGhlc2UgYXJlIHVzZWQuCi0KLQot
ZGVmIF9TaW1wbGVTaXplcihjb21wdXRlX3ZhbHVlX3NpemUpOgotICAiIiJBIHNpemVyIHdoaWNo
IHVzZXMgdGhlIGZ1bmN0aW9uIGNvbXB1dGVfdmFsdWVfc2l6ZSB0byBjb21wdXRlIHRoZSBzaXpl
IG9mCi0gIGVhY2ggdmFsdWUuICBUeXBpY2FsbHkgY29tcHV0ZV92YWx1ZV9zaXplIGlzIF9WYXJp
bnRTaXplLiIiIgotCi0gIGRlZiBTcGVjaWZpY1NpemVyKGZpZWxkX251bWJlciwgaXNfcmVwZWF0
ZWQsIGlzX3BhY2tlZCk6Ci0gICAgdGFnX3NpemUgPSBfVGFnU2l6ZShmaWVsZF9udW1iZXIpCi0g
ICAgaWYgaXNfcGFja2VkOgotICAgICAgbG9jYWxfVmFyaW50U2l6ZSA9IF9WYXJpbnRTaXplCi0g
ICAgICBkZWYgUGFja2VkRmllbGRTaXplKHZhbHVlKToKLSAgICAgICAgcmVzdWx0ID0gMAotICAg
ICAgICBmb3IgZWxlbWVudCBpbiB2YWx1ZToKLSAgICAgICAgICByZXN1bHQgKz0gY29tcHV0ZV92
YWx1ZV9zaXplKGVsZW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHQgKyBsb2NhbF9WYXJpbnRT
aXplKHJlc3VsdCkgKyB0YWdfc2l6ZQotICAgICAgcmV0dXJuIFBhY2tlZEZpZWxkU2l6ZQotICAg
IGVsaWYgaXNfcmVwZWF0ZWQ6Ci0gICAgICBkZWYgUmVwZWF0ZWRGaWVsZFNpemUodmFsdWUpOgot
ICAgICAgICByZXN1bHQgPSB0YWdfc2l6ZSAqIGxlbih2YWx1ZSkKLSAgICAgICAgZm9yIGVsZW1l
bnQgaW4gdmFsdWU6Ci0gICAgICAgICAgcmVzdWx0ICs9IGNvbXB1dGVfdmFsdWVfc2l6ZShlbGVt
ZW50KQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICByZXR1cm4gUmVwZWF0ZWRGaWVsZFNp
emUKLSAgICBlbHNlOgotICAgICAgZGVmIEZpZWxkU2l6ZSh2YWx1ZSk6Ci0gICAgICAgIHJldHVy
biB0YWdfc2l6ZSArIGNvbXB1dGVfdmFsdWVfc2l6ZSh2YWx1ZSkKLSAgICAgIHJldHVybiBGaWVs
ZFNpemUKLQotICByZXR1cm4gU3BlY2lmaWNTaXplcgotCi0KLWRlZiBfTW9kaWZpZWRTaXplcihj
b21wdXRlX3ZhbHVlX3NpemUsIG1vZGlmeV92YWx1ZSk6Ci0gICIiIkxpa2UgU2ltcGxlU2l6ZXIs
IGJ1dCBtb2RpZnlfdmFsdWUgaXMgaW52b2tlZCBvbiBlYWNoIHZhbHVlIGJlZm9yZSBpdCBpcwot
ICBwYXNzZWQgdG8gY29tcHV0ZV92YWx1ZV9zaXplLiAgbW9kaWZ5X3ZhbHVlIGlzIHR5cGljYWxs
eSBaaWdaYWdFbmNvZGUuIiIiCi0KLSAgZGVmIFNwZWNpZmljU2l6ZXIoZmllbGRfbnVtYmVyLCBp
c19yZXBlYXRlZCwgaXNfcGFja2VkKToKLSAgICB0YWdfc2l6ZSA9IF9UYWdTaXplKGZpZWxkX251
bWJlcikKLSAgICBpZiBpc19wYWNrZWQ6Ci0gICAgICBsb2NhbF9WYXJpbnRTaXplID0gX1Zhcmlu
dFNpemUKLSAgICAgIGRlZiBQYWNrZWRGaWVsZFNpemUodmFsdWUpOgotICAgICAgICByZXN1bHQg
PSAwCi0gICAgICAgIGZvciBlbGVtZW50IGluIHZhbHVlOgotICAgICAgICAgIHJlc3VsdCArPSBj
b21wdXRlX3ZhbHVlX3NpemUobW9kaWZ5X3ZhbHVlKGVsZW1lbnQpKQotICAgICAgICByZXR1cm4g
cmVzdWx0ICsgbG9jYWxfVmFyaW50U2l6ZShyZXN1bHQpICsgdGFnX3NpemUKLSAgICAgIHJldHVy
biBQYWNrZWRGaWVsZFNpemUKLSAgICBlbGlmIGlzX3JlcGVhdGVkOgotICAgICAgZGVmIFJlcGVh
dGVkRmllbGRTaXplKHZhbHVlKToKLSAgICAgICAgcmVzdWx0ID0gdGFnX3NpemUgKiBsZW4odmFs
dWUpCi0gICAgICAgIGZvciBlbGVtZW50IGluIHZhbHVlOgotICAgICAgICAgIHJlc3VsdCArPSBj
b21wdXRlX3ZhbHVlX3NpemUobW9kaWZ5X3ZhbHVlKGVsZW1lbnQpKQotICAgICAgICByZXR1cm4g
cmVzdWx0Ci0gICAgICByZXR1cm4gUmVwZWF0ZWRGaWVsZFNpemUKLSAgICBlbHNlOgotICAgICAg
ZGVmIEZpZWxkU2l6ZSh2YWx1ZSk6Ci0gICAgICAgIHJldHVybiB0YWdfc2l6ZSArIGNvbXB1dGVf
dmFsdWVfc2l6ZShtb2RpZnlfdmFsdWUodmFsdWUpKQotICAgICAgcmV0dXJuIEZpZWxkU2l6ZQot
Ci0gIHJldHVybiBTcGVjaWZpY1NpemVyCi0KLQotZGVmIF9GaXhlZFNpemVyKHZhbHVlX3NpemUp
OgotICAiIiJMaWtlIF9TaW1wbGVTaXplciBleGNlcHQgZm9yIGEgZml4ZWQtc2l6ZSBmaWVsZC4g
IFRoZSBpbnB1dCBpcyB0aGUgc2l6ZQotICBvZiBvbmUgdmFsdWUuIiIiCi0KLSAgZGVmIFNwZWNp
ZmljU2l6ZXIoZmllbGRfbnVtYmVyLCBpc19yZXBlYXRlZCwgaXNfcGFja2VkKToKLSAgICB0YWdf
c2l6ZSA9IF9UYWdTaXplKGZpZWxkX251bWJlcikKLSAgICBpZiBpc19wYWNrZWQ6Ci0gICAgICBs
b2NhbF9WYXJpbnRTaXplID0gX1ZhcmludFNpemUKLSAgICAgIGRlZiBQYWNrZWRGaWVsZFNpemUo
dmFsdWUpOgotICAgICAgICByZXN1bHQgPSBsZW4odmFsdWUpICogdmFsdWVfc2l6ZQotICAgICAg
ICByZXR1cm4gcmVzdWx0ICsgbG9jYWxfVmFyaW50U2l6ZShyZXN1bHQpICsgdGFnX3NpemUKLSAg
ICAgIHJldHVybiBQYWNrZWRGaWVsZFNpemUKLSAgICBlbGlmIGlzX3JlcGVhdGVkOgotICAgICAg
ZWxlbWVudF9zaXplID0gdmFsdWVfc2l6ZSArIHRhZ19zaXplCi0gICAgICBkZWYgUmVwZWF0ZWRG
aWVsZFNpemUodmFsdWUpOgotICAgICAgICByZXR1cm4gbGVuKHZhbHVlKSAqIGVsZW1lbnRfc2l6
ZQotICAgICAgcmV0dXJuIFJlcGVhdGVkRmllbGRTaXplCi0gICAgZWxzZToKLSAgICAgIGZpZWxk
X3NpemUgPSB2YWx1ZV9zaXplICsgdGFnX3NpemUKLSAgICAgIGRlZiBGaWVsZFNpemUodmFsdWUp
OgotICAgICAgICByZXR1cm4gZmllbGRfc2l6ZQotICAgICAgcmV0dXJuIEZpZWxkU2l6ZQotCi0g
IHJldHVybiBTcGVjaWZpY1NpemVyCi0KLQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBIZXJlIHdlIGRlY2xh
cmUgYSBzaXplciBjb25zdHJ1Y3RvciBmb3IgZWFjaCBmaWVsZCB0eXBlLiAgRWFjaCAic2l6ZXIK
LSMgY29uc3RydWN0b3IiIGlzIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyAoZmllbGRfbnVtYmVyLCBp
c19yZXBlYXRlZCwgaXNfcGFja2VkKQotIyBhcyBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgc2l6
ZXIsIHdoaWNoIGluIHR1cm4gdGFrZXMgYSBmaWVsZCB2YWx1ZSBhcwotIyBhIHBhcmFtZXRlciBh
bmQgcmV0dXJucyBpdHMgZW5jb2RlZCBzaXplLgotCi0KLUludDMyU2l6ZXIgPSBJbnQ2NFNpemVy
ID0gRW51bVNpemVyID0gX1NpbXBsZVNpemVyKF9TaWduZWRWYXJpbnRTaXplKQotCi1VSW50MzJT
aXplciA9IFVJbnQ2NFNpemVyID0gX1NpbXBsZVNpemVyKF9WYXJpbnRTaXplKQotCi1TSW50MzJT
aXplciA9IFNJbnQ2NFNpemVyID0gX01vZGlmaWVkU2l6ZXIoCi0gICAgX1NpZ25lZFZhcmludFNp
emUsIHdpcmVfZm9ybWF0LlppZ1phZ0VuY29kZSkKLQotRml4ZWQzMlNpemVyID0gU0ZpeGVkMzJT
aXplciA9IEZsb2F0U2l6ZXIgID0gX0ZpeGVkU2l6ZXIoNCkKLUZpeGVkNjRTaXplciA9IFNGaXhl
ZDY0U2l6ZXIgPSBEb3VibGVTaXplciA9IF9GaXhlZFNpemVyKDgpCi0KLUJvb2xTaXplciA9IF9G
aXhlZFNpemVyKDEpCi0KLQotZGVmIFN0cmluZ1NpemVyKGZpZWxkX251bWJlciwgaXNfcmVwZWF0
ZWQsIGlzX3BhY2tlZCk6Ci0gICIiIlJldHVybnMgYSBzaXplciBmb3IgYSBzdHJpbmcgZmllbGQu
IiIiCi0KLSAgdGFnX3NpemUgPSBfVGFnU2l6ZShmaWVsZF9udW1iZXIpCi0gIGxvY2FsX1Zhcmlu
dFNpemUgPSBfVmFyaW50U2l6ZQotICBsb2NhbF9sZW4gPSBsZW4KLSAgYXNzZXJ0IG5vdCBpc19w
YWNrZWQKLSAgaWYgaXNfcmVwZWF0ZWQ6Ci0gICAgZGVmIFJlcGVhdGVkRmllbGRTaXplKHZhbHVl
KToKLSAgICAgIHJlc3VsdCA9IHRhZ19zaXplICogbGVuKHZhbHVlKQotICAgICAgZm9yIGVsZW1l
bnQgaW4gdmFsdWU6Ci0gICAgICAgIGwgPSBsb2NhbF9sZW4oZWxlbWVudC5lbmNvZGUoJ3V0Zi04
JykpCi0gICAgICAgIHJlc3VsdCArPSBsb2NhbF9WYXJpbnRTaXplKGwpICsgbAotICAgICAgcmV0
dXJuIHJlc3VsdAotICAgIHJldHVybiBSZXBlYXRlZEZpZWxkU2l6ZQotICBlbHNlOgotICAgIGRl
ZiBGaWVsZFNpemUodmFsdWUpOgotICAgICAgbCA9IGxvY2FsX2xlbih2YWx1ZS5lbmNvZGUoJ3V0
Zi04JykpCi0gICAgICByZXR1cm4gdGFnX3NpemUgKyBsb2NhbF9WYXJpbnRTaXplKGwpICsgbAot
ICAgIHJldHVybiBGaWVsZFNpemUKLQotCi1kZWYgQnl0ZXNTaXplcihmaWVsZF9udW1iZXIsIGlz
X3JlcGVhdGVkLCBpc19wYWNrZWQpOgotICAiIiJSZXR1cm5zIGEgc2l6ZXIgZm9yIGEgYnl0ZXMg
ZmllbGQuIiIiCi0KLSAgdGFnX3NpemUgPSBfVGFnU2l6ZShmaWVsZF9udW1iZXIpCi0gIGxvY2Fs
X1ZhcmludFNpemUgPSBfVmFyaW50U2l6ZQotICBsb2NhbF9sZW4gPSBsZW4KLSAgYXNzZXJ0IG5v
dCBpc19wYWNrZWQKLSAgaWYgaXNfcmVwZWF0ZWQ6Ci0gICAgZGVmIFJlcGVhdGVkRmllbGRTaXpl
KHZhbHVlKToKLSAgICAgIHJlc3VsdCA9IHRhZ19zaXplICogbGVuKHZhbHVlKQotICAgICAgZm9y
IGVsZW1lbnQgaW4gdmFsdWU6Ci0gICAgICAgIGwgPSBsb2NhbF9sZW4oZWxlbWVudCkKLSAgICAg
ICAgcmVzdWx0ICs9IGxvY2FsX1ZhcmludFNpemUobCkgKyBsCi0gICAgICByZXR1cm4gcmVzdWx0
Ci0gICAgcmV0dXJuIFJlcGVhdGVkRmllbGRTaXplCi0gIGVsc2U6Ci0gICAgZGVmIEZpZWxkU2l6
ZSh2YWx1ZSk6Ci0gICAgICBsID0gbG9jYWxfbGVuKHZhbHVlKQotICAgICAgcmV0dXJuIHRhZ19z
aXplICsgbG9jYWxfVmFyaW50U2l6ZShsKSArIGwKLSAgICByZXR1cm4gRmllbGRTaXplCi0KLQot
ZGVmIEdyb3VwU2l6ZXIoZmllbGRfbnVtYmVyLCBpc19yZXBlYXRlZCwgaXNfcGFja2VkKToKLSAg
IiIiUmV0dXJucyBhIHNpemVyIGZvciBhIGdyb3VwIGZpZWxkLiIiIgotCi0gIHRhZ19zaXplID0g
X1RhZ1NpemUoZmllbGRfbnVtYmVyKSAqIDIKLSAgYXNzZXJ0IG5vdCBpc19wYWNrZWQKLSAgaWYg
aXNfcmVwZWF0ZWQ6Ci0gICAgZGVmIFJlcGVhdGVkRmllbGRTaXplKHZhbHVlKToKLSAgICAgIHJl
c3VsdCA9IHRhZ19zaXplICogbGVuKHZhbHVlKQotICAgICAgZm9yIGVsZW1lbnQgaW4gdmFsdWU6
Ci0gICAgICAgIHJlc3VsdCArPSBlbGVtZW50LkJ5dGVTaXplKCkKLSAgICAgIHJldHVybiByZXN1
bHQKLSAgICByZXR1cm4gUmVwZWF0ZWRGaWVsZFNpemUKLSAgZWxzZToKLSAgICBkZWYgRmllbGRT
aXplKHZhbHVlKToKLSAgICAgIHJldHVybiB0YWdfc2l6ZSArIHZhbHVlLkJ5dGVTaXplKCkKLSAg
ICByZXR1cm4gRmllbGRTaXplCi0KLQotZGVmIE1lc3NhZ2VTaXplcihmaWVsZF9udW1iZXIsIGlz
X3JlcGVhdGVkLCBpc19wYWNrZWQpOgotICAiIiJSZXR1cm5zIGEgc2l6ZXIgZm9yIGEgbWVzc2Fn
ZSBmaWVsZC4iIiIKLQotICB0YWdfc2l6ZSA9IF9UYWdTaXplKGZpZWxkX251bWJlcikKLSAgbG9j
YWxfVmFyaW50U2l6ZSA9IF9WYXJpbnRTaXplCi0gIGFzc2VydCBub3QgaXNfcGFja2VkCi0gIGlm
IGlzX3JlcGVhdGVkOgotICAgIGRlZiBSZXBlYXRlZEZpZWxkU2l6ZSh2YWx1ZSk6Ci0gICAgICBy
ZXN1bHQgPSB0YWdfc2l6ZSAqIGxlbih2YWx1ZSkKLSAgICAgIGZvciBlbGVtZW50IGluIHZhbHVl
OgotICAgICAgICBsID0gZWxlbWVudC5CeXRlU2l6ZSgpCi0gICAgICAgIHJlc3VsdCArPSBsb2Nh
bF9WYXJpbnRTaXplKGwpICsgbAotICAgICAgcmV0dXJuIHJlc3VsdAotICAgIHJldHVybiBSZXBl
YXRlZEZpZWxkU2l6ZQotICBlbHNlOgotICAgIGRlZiBGaWVsZFNpemUodmFsdWUpOgotICAgICAg
bCA9IHZhbHVlLkJ5dGVTaXplKCkKLSAgICAgIHJldHVybiB0YWdfc2l6ZSArIGxvY2FsX1Zhcmlu
dFNpemUobCkgKyBsCi0gICAgcmV0dXJuIEZpZWxkU2l6ZQotCi0KLSMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMg
TWVzc2FnZVNldCBpcyBzcGVjaWFsOiBpdCBuZWVkcyBjdXN0b20gbG9naWMgdG8gY29tcHV0ZSBp
dHMgc2l6ZSBwcm9wZXJseS4KLQotCi1kZWYgTWVzc2FnZVNldEl0ZW1TaXplcihmaWVsZF9udW1i
ZXIpOgotICAiIiJSZXR1cm5zIGEgc2l6ZXIgZm9yIGV4dGVuc2lvbnMgb2YgTWVzc2FnZVNldC4K
LQotICBUaGUgbWVzc2FnZSBzZXQgbWVzc2FnZSBsb29rcyBsaWtlIHRoaXM6Ci0gICAgbWVzc2Fn
ZSBNZXNzYWdlU2V0IHsKLSAgICAgIHJlcGVhdGVkIGdyb3VwIEl0ZW0gPSAxIHsKLSAgICAgICAg
cmVxdWlyZWQgaW50MzIgdHlwZV9pZCA9IDI7Ci0gICAgICAgIHJlcXVpcmVkIHN0cmluZyBtZXNz
YWdlID0gMzsKLSAgICAgIH0KLSAgICB9Ci0gICIiIgotICBzdGF0aWNfc2l6ZSA9IChfVGFnU2l6
ZSgxKSAqIDIgKyBfVGFnU2l6ZSgyKSArIF9WYXJpbnRTaXplKGZpZWxkX251bWJlcikgKwotICAg
ICAgICAgICAgICAgICBfVGFnU2l6ZSgzKSkKLSAgbG9jYWxfVmFyaW50U2l6ZSA9IF9WYXJpbnRT
aXplCi0KLSAgZGVmIEZpZWxkU2l6ZSh2YWx1ZSk6Ci0gICAgbCA9IHZhbHVlLkJ5dGVTaXplKCkK
LSAgICByZXR1cm4gc3RhdGljX3NpemUgKyBsb2NhbF9WYXJpbnRTaXplKGwpICsgbAotCi0gIHJl
dHVybiBGaWVsZFNpemUKLQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE1hcCBpcyBzcGVjaWFsOiBpdCBu
ZWVkcyBjdXN0b20gbG9naWMgdG8gY29tcHV0ZSBpdHMgc2l6ZSBwcm9wZXJseS4KLQotCi1kZWYg
TWFwU2l6ZXIoZmllbGRfZGVzY3JpcHRvcik6Ci0gICIiIlJldHVybnMgYSBzaXplciBmb3IgYSBt
YXAgZmllbGQuIiIiCi0KLSAgIyBDYW4ndCBsb29rIGF0IGZpZWxkX2Rlc2NyaXB0b3IubWVzc2Fn
ZV90eXBlLl9jb25jcmV0ZV9jbGFzcyBiZWNhdXNlIGl0IG1heQotICAjIG5vdCBoYXZlIGJlZW4g
aW5pdGlhbGl6ZWQgeWV0LgotICBtZXNzYWdlX3R5cGUgPSBmaWVsZF9kZXNjcmlwdG9yLm1lc3Nh
Z2VfdHlwZQotICBtZXNzYWdlX3NpemVyID0gTWVzc2FnZVNpemVyKGZpZWxkX2Rlc2NyaXB0b3Iu
bnVtYmVyLCBGYWxzZSwgRmFsc2UpCi0KLSAgZGVmIEZpZWxkU2l6ZShtYXBfdmFsdWUpOgotICAg
IHRvdGFsID0gMAotICAgIGZvciBrZXkgaW4gbWFwX3ZhbHVlOgotICAgICAgdmFsdWUgPSBtYXBf
dmFsdWVba2V5XQotICAgICAgIyBJdCdzIHdhc3RlZnVsIHRvIGNyZWF0ZSB0aGUgbWVzc2FnZXMg
YW5kIHRocm93IHRoZW0gYXdheSBvbmUgc2Vjb25kCi0gICAgICAjIGxhdGVyIHNpbmNlIHdlJ2xs
IGRvIHRoZSBzYW1lIGZvciB0aGUgYWN0dWFsIGVuY29kZS4gIEJ1dCB0aGVyZSdzIG5vdCBhbgot
ICAgICAgIyBvYnZpb3VzIHdheSB0byBhdm9pZCB0aGlzIHdpdGhpbiB0aGUgY3VycmVudCBkZXNp
Z24gd2l0aG91dCB0b25zIG9mIGNvZGUKLSAgICAgICMgZHVwbGljYXRpb24uCi0gICAgICBlbnRy
eV9tc2cgPSBtZXNzYWdlX3R5cGUuX2NvbmNyZXRlX2NsYXNzKGtleT1rZXksIHZhbHVlPXZhbHVl
KQotICAgICAgdG90YWwgKz0gbWVzc2FnZV9zaXplcihlbnRyeV9tc2cpCi0gICAgcmV0dXJuIHRv
dGFsCi0KLSAgcmV0dXJuIEZpZWxkU2l6ZQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIEVuY29kZXJzIQot
Ci0KLWRlZiBfVmFyaW50RW5jb2RlcigpOgotICAiIiJSZXR1cm4gYW4gZW5jb2RlciBmb3IgYSBi
YXNpYyB2YXJpbnQgdmFsdWUgKGRvZXMgbm90IGluY2x1ZGUgdGFnKS4iIiIKLQotICBkZWYgRW5j
b2RlVmFyaW50KHdyaXRlLCB2YWx1ZSk6Ci0gICAgYml0cyA9IHZhbHVlICYgMHg3ZgotICAgIHZh
bHVlID4+PSA3Ci0gICAgd2hpbGUgdmFsdWU6Ci0gICAgICB3cml0ZShzaXguaW50MmJ5dGUoMHg4
MHxiaXRzKSkKLSAgICAgIGJpdHMgPSB2YWx1ZSAmIDB4N2YKLSAgICAgIHZhbHVlID4+PSA3Ci0g
ICAgcmV0dXJuIHdyaXRlKHNpeC5pbnQyYnl0ZShiaXRzKSkKLQotICByZXR1cm4gRW5jb2RlVmFy
aW50Ci0KLQotZGVmIF9TaWduZWRWYXJpbnRFbmNvZGVyKCk6Ci0gICIiIlJldHVybiBhbiBlbmNv
ZGVyIGZvciBhIGJhc2ljIHNpZ25lZCB2YXJpbnQgdmFsdWUgKGRvZXMgbm90IGluY2x1ZGUKLSAg
dGFnKS4iIiIKLQotICBkZWYgRW5jb2RlU2lnbmVkVmFyaW50KHdyaXRlLCB2YWx1ZSk6Ci0gICAg
aWYgdmFsdWUgPCAwOgotICAgICAgdmFsdWUgKz0gKDEgPDwgNjQpCi0gICAgYml0cyA9IHZhbHVl
ICYgMHg3ZgotICAgIHZhbHVlID4+PSA3Ci0gICAgd2hpbGUgdmFsdWU6Ci0gICAgICB3cml0ZShz
aXguaW50MmJ5dGUoMHg4MHxiaXRzKSkKLSAgICAgIGJpdHMgPSB2YWx1ZSAmIDB4N2YKLSAgICAg
IHZhbHVlID4+PSA3Ci0gICAgcmV0dXJuIHdyaXRlKHNpeC5pbnQyYnl0ZShiaXRzKSkKLQotICBy
ZXR1cm4gRW5jb2RlU2lnbmVkVmFyaW50Ci0KLQotX0VuY29kZVZhcmludCA9IF9WYXJpbnRFbmNv
ZGVyKCkKLV9FbmNvZGVTaWduZWRWYXJpbnQgPSBfU2lnbmVkVmFyaW50RW5jb2RlcigpCi0KLQot
ZGVmIF9WYXJpbnRCeXRlcyh2YWx1ZSk6Ci0gICIiIkVuY29kZSB0aGUgZ2l2ZW4gaW50ZWdlciBh
cyBhIHZhcmludCBhbmQgcmV0dXJuIHRoZSBieXRlcy4gIFRoaXMgaXMgb25seQotICBjYWxsZWQg
YXQgc3RhcnR1cCB0aW1lIHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBmYXN0LiIiIgotCi0gIHBp
ZWNlcyA9IFtdCi0gIF9FbmNvZGVWYXJpbnQocGllY2VzLmFwcGVuZCwgdmFsdWUpCi0gIHJldHVy
biBiIiIuam9pbihwaWVjZXMpCi0KLQotZGVmIFRhZ0J5dGVzKGZpZWxkX251bWJlciwgd2lyZV90
eXBlKToKLSAgIiIiRW5jb2RlIHRoZSBnaXZlbiB0YWcgYW5kIHJldHVybiB0aGUgYnl0ZXMuICBP
bmx5IGNhbGxlZCBhdCBzdGFydHVwLiIiIgotCi0gIHJldHVybiBfVmFyaW50Qnl0ZXMod2lyZV9m
b3JtYXQuUGFja1RhZyhmaWVsZF9udW1iZXIsIHdpcmVfdHlwZSkpCi0KLSMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSMgQXMgd2l0aCBzaXplcnMgKHNlZSBhYm92ZSksIHdlIGhhdmUgYSBudW1iZXIgb2YgY29tbW9u
IGVuY29kZXIKLSMgaW1wbGVtZW50YXRpb25zLgotCi0KLWRlZiBfU2ltcGxlRW5jb2Rlcih3aXJl
X3R5cGUsIGVuY29kZV92YWx1ZSwgY29tcHV0ZV92YWx1ZV9zaXplKToKLSAgIiIiUmV0dXJuIGEg
Y29uc3RydWN0b3IgZm9yIGFuIGVuY29kZXIgZm9yIGZpZWxkcyBvZiBhIHBhcnRpY3VsYXIgdHlw
ZS4KLQotICBBcmdzOgotICAgICAgd2lyZV90eXBlOiAgVGhlIGZpZWxkJ3Mgd2lyZSB0eXBlLCBm
b3IgZW5jb2RpbmcgdGFncy4KLSAgICAgIGVuY29kZV92YWx1ZTogIEEgZnVuY3Rpb24gd2hpY2gg
ZW5jb2RlcyBhbiBpbmRpdmlkdWFsIHZhbHVlLCBlLmcuCi0gICAgICAgIF9FbmNvZGVWYXJpbnQo
KS4KLSAgICAgIGNvbXB1dGVfdmFsdWVfc2l6ZTogIEEgZnVuY3Rpb24gd2hpY2ggY29tcHV0ZXMg
dGhlIHNpemUgb2YgYW4gaW5kaXZpZHVhbAotICAgICAgICB2YWx1ZSwgZS5nLiBfVmFyaW50U2l6
ZSgpLgotICAiIiIKLQotICBkZWYgU3BlY2lmaWNFbmNvZGVyKGZpZWxkX251bWJlciwgaXNfcmVw
ZWF0ZWQsIGlzX3BhY2tlZCk6Ci0gICAgaWYgaXNfcGFja2VkOgotICAgICAgdGFnX2J5dGVzID0g
VGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1J
VEVEKQotICAgICAgbG9jYWxfRW5jb2RlVmFyaW50ID0gX0VuY29kZVZhcmludAotICAgICAgZGVm
IEVuY29kZVBhY2tlZEZpZWxkKHdyaXRlLCB2YWx1ZSk6Ci0gICAgICAgIHdyaXRlKHRhZ19ieXRl
cykKLSAgICAgICAgc2l6ZSA9IDAKLSAgICAgICAgZm9yIGVsZW1lbnQgaW4gdmFsdWU6Ci0gICAg
ICAgICAgc2l6ZSArPSBjb21wdXRlX3ZhbHVlX3NpemUoZWxlbWVudCkKLSAgICAgICAgbG9jYWxf
RW5jb2RlVmFyaW50KHdyaXRlLCBzaXplKQotICAgICAgICBmb3IgZWxlbWVudCBpbiB2YWx1ZToK
LSAgICAgICAgICBlbmNvZGVfdmFsdWUod3JpdGUsIGVsZW1lbnQpCi0gICAgICByZXR1cm4gRW5j
b2RlUGFja2VkRmllbGQKLSAgICBlbGlmIGlzX3JlcGVhdGVkOgotICAgICAgdGFnX2J5dGVzID0g
VGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX3R5cGUpCi0gICAgICBkZWYgRW5jb2RlUmVwZWF0
ZWRGaWVsZCh3cml0ZSwgdmFsdWUpOgotICAgICAgICBmb3IgZWxlbWVudCBpbiB2YWx1ZToKLSAg
ICAgICAgICB3cml0ZSh0YWdfYnl0ZXMpCi0gICAgICAgICAgZW5jb2RlX3ZhbHVlKHdyaXRlLCBl
bGVtZW50KQotICAgICAgcmV0dXJuIEVuY29kZVJlcGVhdGVkRmllbGQKLSAgICBlbHNlOgotICAg
ICAgdGFnX2J5dGVzID0gVGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX3R5cGUpCi0gICAgICBk
ZWYgRW5jb2RlRmllbGQod3JpdGUsIHZhbHVlKToKLSAgICAgICAgd3JpdGUodGFnX2J5dGVzKQot
ICAgICAgICByZXR1cm4gZW5jb2RlX3ZhbHVlKHdyaXRlLCB2YWx1ZSkKLSAgICAgIHJldHVybiBF
bmNvZGVGaWVsZAotCi0gIHJldHVybiBTcGVjaWZpY0VuY29kZXIKLQotCi1kZWYgX01vZGlmaWVk
RW5jb2Rlcih3aXJlX3R5cGUsIGVuY29kZV92YWx1ZSwgY29tcHV0ZV92YWx1ZV9zaXplLCBtb2Rp
ZnlfdmFsdWUpOgotICAiIiJMaWtlIFNpbXBsZUVuY29kZXIgYnV0IGFkZGl0aW9uYWxseSBpbnZv
a2VzIG1vZGlmeV92YWx1ZSBvbiBldmVyeSB2YWx1ZQotICBiZWZvcmUgcGFzc2luZyBpdCB0byBl
bmNvZGVfdmFsdWUuICBVc3VhbGx5IG1vZGlmeV92YWx1ZSBpcyBaaWdaYWdFbmNvZGUuIiIiCi0K
LSAgZGVmIFNwZWNpZmljRW5jb2RlcihmaWVsZF9udW1iZXIsIGlzX3JlcGVhdGVkLCBpc19wYWNr
ZWQpOgotICAgIGlmIGlzX3BhY2tlZDoKLSAgICAgIHRhZ19ieXRlcyA9IFRhZ0J5dGVzKGZpZWxk
X251bWJlciwgd2lyZV9mb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCkKLSAgICAgIGxv
Y2FsX0VuY29kZVZhcmludCA9IF9FbmNvZGVWYXJpbnQKLSAgICAgIGRlZiBFbmNvZGVQYWNrZWRG
aWVsZCh3cml0ZSwgdmFsdWUpOgotICAgICAgICB3cml0ZSh0YWdfYnl0ZXMpCi0gICAgICAgIHNp
emUgPSAwCi0gICAgICAgIGZvciBlbGVtZW50IGluIHZhbHVlOgotICAgICAgICAgIHNpemUgKz0g
Y29tcHV0ZV92YWx1ZV9zaXplKG1vZGlmeV92YWx1ZShlbGVtZW50KSkKLSAgICAgICAgbG9jYWxf
RW5jb2RlVmFyaW50KHdyaXRlLCBzaXplKQotICAgICAgICBmb3IgZWxlbWVudCBpbiB2YWx1ZToK
LSAgICAgICAgICBlbmNvZGVfdmFsdWUod3JpdGUsIG1vZGlmeV92YWx1ZShlbGVtZW50KSkKLSAg
ICAgIHJldHVybiBFbmNvZGVQYWNrZWRGaWVsZAotICAgIGVsaWYgaXNfcmVwZWF0ZWQ6Ci0gICAg
ICB0YWdfYnl0ZXMgPSBUYWdCeXRlcyhmaWVsZF9udW1iZXIsIHdpcmVfdHlwZSkKLSAgICAgIGRl
ZiBFbmNvZGVSZXBlYXRlZEZpZWxkKHdyaXRlLCB2YWx1ZSk6Ci0gICAgICAgIGZvciBlbGVtZW50
IGluIHZhbHVlOgotICAgICAgICAgIHdyaXRlKHRhZ19ieXRlcykKLSAgICAgICAgICBlbmNvZGVf
dmFsdWUod3JpdGUsIG1vZGlmeV92YWx1ZShlbGVtZW50KSkKLSAgICAgIHJldHVybiBFbmNvZGVS
ZXBlYXRlZEZpZWxkCi0gICAgZWxzZToKLSAgICAgIHRhZ19ieXRlcyA9IFRhZ0J5dGVzKGZpZWxk
X251bWJlciwgd2lyZV90eXBlKQotICAgICAgZGVmIEVuY29kZUZpZWxkKHdyaXRlLCB2YWx1ZSk6
Ci0gICAgICAgIHdyaXRlKHRhZ19ieXRlcykKLSAgICAgICAgcmV0dXJuIGVuY29kZV92YWx1ZSh3
cml0ZSwgbW9kaWZ5X3ZhbHVlKHZhbHVlKSkKLSAgICAgIHJldHVybiBFbmNvZGVGaWVsZAotCi0g
IHJldHVybiBTcGVjaWZpY0VuY29kZXIKLQotCi1kZWYgX1N0cnVjdFBhY2tFbmNvZGVyKHdpcmVf
dHlwZSwgZm9ybWF0KToKLSAgIiIiUmV0dXJuIGEgY29uc3RydWN0b3IgZm9yIGFuIGVuY29kZXIg
Zm9yIGEgZml4ZWQtd2lkdGggZmllbGQuCi0KLSAgQXJnczoKLSAgICAgIHdpcmVfdHlwZTogIFRo
ZSBmaWVsZCdzIHdpcmUgdHlwZSwgZm9yIGVuY29kaW5nIHRhZ3MuCi0gICAgICBmb3JtYXQ6ICBU
aGUgZm9ybWF0IHN0cmluZyB0byBwYXNzIHRvIHN0cnVjdC5wYWNrKCkuCi0gICIiIgotCi0gIHZh
bHVlX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoZm9ybWF0KQotCi0gIGRlZiBTcGVjaWZpY0VuY29k
ZXIoZmllbGRfbnVtYmVyLCBpc19yZXBlYXRlZCwgaXNfcGFja2VkKToKLSAgICBsb2NhbF9zdHJ1
Y3RfcGFjayA9IHN0cnVjdC5wYWNrCi0gICAgaWYgaXNfcGFja2VkOgotICAgICAgdGFnX2J5dGVz
ID0gVGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVM
SU1JVEVEKQotICAgICAgbG9jYWxfRW5jb2RlVmFyaW50ID0gX0VuY29kZVZhcmludAotICAgICAg
ZGVmIEVuY29kZVBhY2tlZEZpZWxkKHdyaXRlLCB2YWx1ZSk6Ci0gICAgICAgIHdyaXRlKHRhZ19i
eXRlcykKLSAgICAgICAgbG9jYWxfRW5jb2RlVmFyaW50KHdyaXRlLCBsZW4odmFsdWUpICogdmFs
dWVfc2l6ZSkKLSAgICAgICAgZm9yIGVsZW1lbnQgaW4gdmFsdWU6Ci0gICAgICAgICAgd3JpdGUo
bG9jYWxfc3RydWN0X3BhY2soZm9ybWF0LCBlbGVtZW50KSkKLSAgICAgIHJldHVybiBFbmNvZGVQ
YWNrZWRGaWVsZAotICAgIGVsaWYgaXNfcmVwZWF0ZWQ6Ci0gICAgICB0YWdfYnl0ZXMgPSBUYWdC
eXRlcyhmaWVsZF9udW1iZXIsIHdpcmVfdHlwZSkKLSAgICAgIGRlZiBFbmNvZGVSZXBlYXRlZEZp
ZWxkKHdyaXRlLCB2YWx1ZSk6Ci0gICAgICAgIGZvciBlbGVtZW50IGluIHZhbHVlOgotICAgICAg
ICAgIHdyaXRlKHRhZ19ieXRlcykKLSAgICAgICAgICB3cml0ZShsb2NhbF9zdHJ1Y3RfcGFjayhm
b3JtYXQsIGVsZW1lbnQpKQotICAgICAgcmV0dXJuIEVuY29kZVJlcGVhdGVkRmllbGQKLSAgICBl
bHNlOgotICAgICAgdGFnX2J5dGVzID0gVGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX3R5cGUp
Ci0gICAgICBkZWYgRW5jb2RlRmllbGQod3JpdGUsIHZhbHVlKToKLSAgICAgICAgd3JpdGUodGFn
X2J5dGVzKQotICAgICAgICByZXR1cm4gd3JpdGUobG9jYWxfc3RydWN0X3BhY2soZm9ybWF0LCB2
YWx1ZSkpCi0gICAgICByZXR1cm4gRW5jb2RlRmllbGQKLQotICByZXR1cm4gU3BlY2lmaWNFbmNv
ZGVyCi0KLQotZGVmIF9GbG9hdGluZ1BvaW50RW5jb2Rlcih3aXJlX3R5cGUsIGZvcm1hdCk6Ci0g
ICIiIlJldHVybiBhIGNvbnN0cnVjdG9yIGZvciBhbiBlbmNvZGVyIGZvciBmbG9hdCBmaWVsZHMu
Ci0KLSAgVGhpcyBpcyBsaWtlIFN0cnVjdFBhY2tFbmNvZGVyLCBidXQgY2F0Y2hlcyBlcnJvcnMg
dGhhdCBtYXkgYmUgZHVlIHRvCi0gIHBhc3Npbmcgbm9uLWZpbml0ZSBmbG9hdGluZy1wb2ludCB2
YWx1ZXMgdG8gc3RydWN0LnBhY2ssIGFuZCBtYWtlcyBhCi0gIHNlY29uZCBhdHRlbXB0IHRvIGVu
Y29kZSB0aG9zZSB2YWx1ZXMuCi0KLSAgQXJnczoKLSAgICAgIHdpcmVfdHlwZTogIFRoZSBmaWVs
ZCdzIHdpcmUgdHlwZSwgZm9yIGVuY29kaW5nIHRhZ3MuCi0gICAgICBmb3JtYXQ6ICBUaGUgZm9y
bWF0IHN0cmluZyB0byBwYXNzIHRvIHN0cnVjdC5wYWNrKCkuCi0gICIiIgotCi0gIHZhbHVlX3Np
emUgPSBzdHJ1Y3QuY2FsY3NpemUoZm9ybWF0KQotICBpZiB2YWx1ZV9zaXplID09IDQ6Ci0gICAg
ZGVmIEVuY29kZU5vbkZpbml0ZU9yUmFpc2Uod3JpdGUsIHZhbHVlKToKLSAgICAgICMgUmVtZW1i
ZXIgdGhhdCB0aGUgc2VyaWFsaXplZCBmb3JtIHVzZXMgbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVy
LgotICAgICAgaWYgdmFsdWUgPT0gX1BPU19JTkY6Ci0gICAgICAgIHdyaXRlKGInXHgwMFx4MDBc
eDgwXHg3RicpCi0gICAgICBlbGlmIHZhbHVlID09IF9ORUdfSU5GOgotICAgICAgICB3cml0ZShi
J1x4MDBceDAwXHg4MFx4RkYnKQotICAgICAgZWxpZiB2YWx1ZSAhPSB2YWx1ZTogICAgICAgICAg
ICMgTmFOCi0gICAgICAgIHdyaXRlKGInXHgwMFx4MDBceEMwXHg3RicpCi0gICAgICBlbHNlOgot
ICAgICAgICByYWlzZQotICBlbGlmIHZhbHVlX3NpemUgPT0gODoKLSAgICBkZWYgRW5jb2RlTm9u
RmluaXRlT3JSYWlzZSh3cml0ZSwgdmFsdWUpOgotICAgICAgaWYgdmFsdWUgPT0gX1BPU19JTkY6
Ci0gICAgICAgIHdyaXRlKGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhGMFx4N0YnKQotICAg
ICAgZWxpZiB2YWx1ZSA9PSBfTkVHX0lORjoKLSAgICAgICAgd3JpdGUoYidceDAwXHgwMFx4MDBc
eDAwXHgwMFx4MDBceEYwXHhGRicpCi0gICAgICBlbGlmIHZhbHVlICE9IHZhbHVlOiAgICAgICAg
ICAgICAgICAgICAgICAgICAjIE5hTgotICAgICAgICB3cml0ZShiJ1x4MDBceDAwXHgwMFx4MDBc
eDAwXHgwMFx4RjhceDdGJykKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlCi0gIGVsc2U6Ci0g
ICAgcmFpc2UgVmFsdWVFcnJvcignQ2FuXCd0IGVuY29kZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMg
dGhhdCBhcmUgJwotICAgICAgICAgICAgICAgICAgICAgJyVkIGJ5dGVzIGxvbmcgKG9ubHkgNCBv
ciA4KScgJSB2YWx1ZV9zaXplKQotCi0gIGRlZiBTcGVjaWZpY0VuY29kZXIoZmllbGRfbnVtYmVy
LCBpc19yZXBlYXRlZCwgaXNfcGFja2VkKToKLSAgICBsb2NhbF9zdHJ1Y3RfcGFjayA9IHN0cnVj
dC5wYWNrCi0gICAgaWYgaXNfcGFja2VkOgotICAgICAgdGFnX2J5dGVzID0gVGFnQnl0ZXMoZmll
bGRfbnVtYmVyLCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKQotICAgICAg
bG9jYWxfRW5jb2RlVmFyaW50ID0gX0VuY29kZVZhcmludAotICAgICAgZGVmIEVuY29kZVBhY2tl
ZEZpZWxkKHdyaXRlLCB2YWx1ZSk6Ci0gICAgICAgIHdyaXRlKHRhZ19ieXRlcykKLSAgICAgICAg
bG9jYWxfRW5jb2RlVmFyaW50KHdyaXRlLCBsZW4odmFsdWUpICogdmFsdWVfc2l6ZSkKLSAgICAg
ICAgZm9yIGVsZW1lbnQgaW4gdmFsdWU6Ci0gICAgICAgICAgIyBUaGlzIHRyeS9leGNlcHQgYmxv
Y2sgaXMgZ29pbmcgdG8gYmUgZmFzdGVyIHRoYW4gYW55IGNvZGUgdGhhdAotICAgICAgICAgICMg
d2UgY291bGQgd3JpdGUgdG8gY2hlY2sgd2hldGhlciBlbGVtZW50IGlzIGZpbml0ZS4KLSAgICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICB3cml0ZShsb2NhbF9zdHJ1Y3RfcGFjayhmb3JtYXQsIGVs
ZW1lbnQpKQotICAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FcnJvcjoKLSAgICAgICAgICAgIEVuY29k
ZU5vbkZpbml0ZU9yUmFpc2Uod3JpdGUsIGVsZW1lbnQpCi0gICAgICByZXR1cm4gRW5jb2RlUGFj
a2VkRmllbGQKLSAgICBlbGlmIGlzX3JlcGVhdGVkOgotICAgICAgdGFnX2J5dGVzID0gVGFnQnl0
ZXMoZmllbGRfbnVtYmVyLCB3aXJlX3R5cGUpCi0gICAgICBkZWYgRW5jb2RlUmVwZWF0ZWRGaWVs
ZCh3cml0ZSwgdmFsdWUpOgotICAgICAgICBmb3IgZWxlbWVudCBpbiB2YWx1ZToKLSAgICAgICAg
ICB3cml0ZSh0YWdfYnl0ZXMpCi0gICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd3JpdGUobG9j
YWxfc3RydWN0X3BhY2soZm9ybWF0LCBlbGVtZW50KSkKLSAgICAgICAgICBleGNlcHQgU3lzdGVt
RXJyb3I6Ci0gICAgICAgICAgICBFbmNvZGVOb25GaW5pdGVPclJhaXNlKHdyaXRlLCBlbGVtZW50
KQotICAgICAgcmV0dXJuIEVuY29kZVJlcGVhdGVkRmllbGQKLSAgICBlbHNlOgotICAgICAgdGFn
X2J5dGVzID0gVGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX3R5cGUpCi0gICAgICBkZWYgRW5j
b2RlRmllbGQod3JpdGUsIHZhbHVlKToKLSAgICAgICAgd3JpdGUodGFnX2J5dGVzKQotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgd3JpdGUobG9jYWxfc3RydWN0X3BhY2soZm9ybWF0LCB2YWx1ZSkp
Ci0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FcnJvcjoKLSAgICAgICAgICBFbmNvZGVOb25GaW5pdGVP
clJhaXNlKHdyaXRlLCB2YWx1ZSkKLSAgICAgIHJldHVybiBFbmNvZGVGaWVsZAotCi0gIHJldHVy
biBTcGVjaWZpY0VuY29kZXIKLQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIEhlcmUgd2UgZGVjbGFyZSBh
biBlbmNvZGVyIGNvbnN0cnVjdG9yIGZvciBlYWNoIGZpZWxkIHR5cGUuICBUaGVzZSB3b3JrCi0j
IHZlcnkgc2ltaWxhcmx5IHRvIHNpemVyIGNvbnN0cnVjdG9ycywgZGVzY3JpYmVkIGVhcmxpZXIu
Ci0KLQotSW50MzJFbmNvZGVyID0gSW50NjRFbmNvZGVyID0gRW51bUVuY29kZXIgPSBfU2ltcGxl
RW5jb2RlcigKLSAgICB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9WQVJJTlQsIF9FbmNvZGVTaWduZWRW
YXJpbnQsIF9TaWduZWRWYXJpbnRTaXplKQotCi1VSW50MzJFbmNvZGVyID0gVUludDY0RW5jb2Rl
ciA9IF9TaW1wbGVFbmNvZGVyKAotICAgIHdpcmVfZm9ybWF0LldJUkVUWVBFX1ZBUklOVCwgX0Vu
Y29kZVZhcmludCwgX1ZhcmludFNpemUpCi0KLVNJbnQzMkVuY29kZXIgPSBTSW50NjRFbmNvZGVy
ID0gX01vZGlmaWVkRW5jb2RlcigKLSAgICB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9WQVJJTlQsIF9F
bmNvZGVWYXJpbnQsIF9WYXJpbnRTaXplLAotICAgIHdpcmVfZm9ybWF0LlppZ1phZ0VuY29kZSkK
LQotIyBOb3RlIHRoYXQgUHl0aG9uIGNvbnZlbmllbnRseSBndWFyYW50ZWVzIHRoYXQgd2hlbiB1
c2luZyB0aGUgJzwnIHByZWZpeCBvbgotIyBmb3JtYXRzLCB0aGV5IHdpbGwgYWxzbyBoYXZlIHRo
ZSBzYW1lIHNpemUgYWNyb3NzIGFsbCBwbGF0Zm9ybXMgKGFzIG9wcG9zZWQKLSMgdG8gd2l0aG91
dCB0aGUgcHJlZml4LCB3aGVyZSB0aGVpciBzaXplcyBkZXBlbmQgb24gdGhlIEMgY29tcGlsZXIn
cyBiYXNpYwotIyB0eXBlIHNpemVzKS4KLUZpeGVkMzJFbmNvZGVyICA9IF9TdHJ1Y3RQYWNrRW5j
b2Rlcih3aXJlX2Zvcm1hdC5XSVJFVFlQRV9GSVhFRDMyLCAnPEknKQotRml4ZWQ2NEVuY29kZXIg
ID0gX1N0cnVjdFBhY2tFbmNvZGVyKHdpcmVfZm9ybWF0LldJUkVUWVBFX0ZJWEVENjQsICc8UScp
Ci1TRml4ZWQzMkVuY29kZXIgPSBfU3RydWN0UGFja0VuY29kZXIod2lyZV9mb3JtYXQuV0lSRVRZ
UEVfRklYRUQzMiwgJzxpJykKLVNGaXhlZDY0RW5jb2RlciA9IF9TdHJ1Y3RQYWNrRW5jb2Rlcih3
aXJlX2Zvcm1hdC5XSVJFVFlQRV9GSVhFRDY0LCAnPHEnKQotRmxvYXRFbmNvZGVyICAgID0gX0Zs
b2F0aW5nUG9pbnRFbmNvZGVyKHdpcmVfZm9ybWF0LldJUkVUWVBFX0ZJWEVEMzIsICc8ZicpCi1E
b3VibGVFbmNvZGVyICAgPSBfRmxvYXRpbmdQb2ludEVuY29kZXIod2lyZV9mb3JtYXQuV0lSRVRZ
UEVfRklYRUQ2NCwgJzxkJykKLQotCi1kZWYgQm9vbEVuY29kZXIoZmllbGRfbnVtYmVyLCBpc19y
ZXBlYXRlZCwgaXNfcGFja2VkKToKLSAgIiIiUmV0dXJucyBhbiBlbmNvZGVyIGZvciBhIGJvb2xl
YW4gZmllbGQuIiIiCi0KLSAgZmFsc2VfYnl0ZSA9IGInXHgwMCcKLSAgdHJ1ZV9ieXRlID0gYidc
eDAxJwotICBpZiBpc19wYWNrZWQ6Ci0gICAgdGFnX2J5dGVzID0gVGFnQnl0ZXMoZmllbGRfbnVt
YmVyLCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKQotICAgIGxvY2FsX0Vu
Y29kZVZhcmludCA9IF9FbmNvZGVWYXJpbnQKLSAgICBkZWYgRW5jb2RlUGFja2VkRmllbGQod3Jp
dGUsIHZhbHVlKToKLSAgICAgIHdyaXRlKHRhZ19ieXRlcykKLSAgICAgIGxvY2FsX0VuY29kZVZh
cmludCh3cml0ZSwgbGVuKHZhbHVlKSkKLSAgICAgIGZvciBlbGVtZW50IGluIHZhbHVlOgotICAg
ICAgICBpZiBlbGVtZW50OgotICAgICAgICAgIHdyaXRlKHRydWVfYnl0ZSkKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICB3cml0ZShmYWxzZV9ieXRlKQotICAgIHJldHVybiBFbmNvZGVQYWNrZWRG
aWVsZAotICBlbGlmIGlzX3JlcGVhdGVkOgotICAgIHRhZ19ieXRlcyA9IFRhZ0J5dGVzKGZpZWxk
X251bWJlciwgd2lyZV9mb3JtYXQuV0lSRVRZUEVfVkFSSU5UKQotICAgIGRlZiBFbmNvZGVSZXBl
YXRlZEZpZWxkKHdyaXRlLCB2YWx1ZSk6Ci0gICAgICBmb3IgZWxlbWVudCBpbiB2YWx1ZToKLSAg
ICAgICAgd3JpdGUodGFnX2J5dGVzKQotICAgICAgICBpZiBlbGVtZW50OgotICAgICAgICAgIHdy
aXRlKHRydWVfYnl0ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICB3cml0ZShmYWxzZV9ieXRl
KQotICAgIHJldHVybiBFbmNvZGVSZXBlYXRlZEZpZWxkCi0gIGVsc2U6Ci0gICAgdGFnX2J5dGVz
ID0gVGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9WQVJJTlQpCi0g
ICAgZGVmIEVuY29kZUZpZWxkKHdyaXRlLCB2YWx1ZSk6Ci0gICAgICB3cml0ZSh0YWdfYnl0ZXMp
Ci0gICAgICBpZiB2YWx1ZToKLSAgICAgICAgcmV0dXJuIHdyaXRlKHRydWVfYnl0ZSkKLSAgICAg
IHJldHVybiB3cml0ZShmYWxzZV9ieXRlKQotICAgIHJldHVybiBFbmNvZGVGaWVsZAotCi0KLWRl
ZiBTdHJpbmdFbmNvZGVyKGZpZWxkX251bWJlciwgaXNfcmVwZWF0ZWQsIGlzX3BhY2tlZCk6Ci0g
ICIiIlJldHVybnMgYW4gZW5jb2RlciBmb3IgYSBzdHJpbmcgZmllbGQuIiIiCi0KLSAgdGFnID0g
VGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1J
VEVEKQotICBsb2NhbF9FbmNvZGVWYXJpbnQgPSBfRW5jb2RlVmFyaW50Ci0gIGxvY2FsX2xlbiA9
IGxlbgotICBhc3NlcnQgbm90IGlzX3BhY2tlZAotICBpZiBpc19yZXBlYXRlZDoKLSAgICBkZWYg
RW5jb2RlUmVwZWF0ZWRGaWVsZCh3cml0ZSwgdmFsdWUpOgotICAgICAgZm9yIGVsZW1lbnQgaW4g
dmFsdWU6Ci0gICAgICAgIGVuY29kZWQgPSBlbGVtZW50LmVuY29kZSgndXRmLTgnKQotICAgICAg
ICB3cml0ZSh0YWcpCi0gICAgICAgIGxvY2FsX0VuY29kZVZhcmludCh3cml0ZSwgbG9jYWxfbGVu
KGVuY29kZWQpKQotICAgICAgICB3cml0ZShlbmNvZGVkKQotICAgIHJldHVybiBFbmNvZGVSZXBl
YXRlZEZpZWxkCi0gIGVsc2U6Ci0gICAgZGVmIEVuY29kZUZpZWxkKHdyaXRlLCB2YWx1ZSk6Ci0g
ICAgICBlbmNvZGVkID0gdmFsdWUuZW5jb2RlKCd1dGYtOCcpCi0gICAgICB3cml0ZSh0YWcpCi0g
ICAgICBsb2NhbF9FbmNvZGVWYXJpbnQod3JpdGUsIGxvY2FsX2xlbihlbmNvZGVkKSkKLSAgICAg
IHJldHVybiB3cml0ZShlbmNvZGVkKQotICAgIHJldHVybiBFbmNvZGVGaWVsZAotCi0KLWRlZiBC
eXRlc0VuY29kZXIoZmllbGRfbnVtYmVyLCBpc19yZXBlYXRlZCwgaXNfcGFja2VkKToKLSAgIiIi
UmV0dXJucyBhbiBlbmNvZGVyIGZvciBhIGJ5dGVzIGZpZWxkLiIiIgotCi0gIHRhZyA9IFRhZ0J5
dGVzKGZpZWxkX251bWJlciwgd2lyZV9mb3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCkK
LSAgbG9jYWxfRW5jb2RlVmFyaW50ID0gX0VuY29kZVZhcmludAotICBsb2NhbF9sZW4gPSBsZW4K
LSAgYXNzZXJ0IG5vdCBpc19wYWNrZWQKLSAgaWYgaXNfcmVwZWF0ZWQ6Ci0gICAgZGVmIEVuY29k
ZVJlcGVhdGVkRmllbGQod3JpdGUsIHZhbHVlKToKLSAgICAgIGZvciBlbGVtZW50IGluIHZhbHVl
OgotICAgICAgICB3cml0ZSh0YWcpCi0gICAgICAgIGxvY2FsX0VuY29kZVZhcmludCh3cml0ZSwg
bG9jYWxfbGVuKGVsZW1lbnQpKQotICAgICAgICB3cml0ZShlbGVtZW50KQotICAgIHJldHVybiBF
bmNvZGVSZXBlYXRlZEZpZWxkCi0gIGVsc2U6Ci0gICAgZGVmIEVuY29kZUZpZWxkKHdyaXRlLCB2
YWx1ZSk6Ci0gICAgICB3cml0ZSh0YWcpCi0gICAgICBsb2NhbF9FbmNvZGVWYXJpbnQod3JpdGUs
IGxvY2FsX2xlbih2YWx1ZSkpCi0gICAgICByZXR1cm4gd3JpdGUodmFsdWUpCi0gICAgcmV0dXJu
IEVuY29kZUZpZWxkCi0KLQotZGVmIEdyb3VwRW5jb2RlcihmaWVsZF9udW1iZXIsIGlzX3JlcGVh
dGVkLCBpc19wYWNrZWQpOgotICAiIiJSZXR1cm5zIGFuIGVuY29kZXIgZm9yIGEgZ3JvdXAgZmll
bGQuIiIiCi0KLSAgc3RhcnRfdGFnID0gVGFnQnl0ZXMoZmllbGRfbnVtYmVyLCB3aXJlX2Zvcm1h
dC5XSVJFVFlQRV9TVEFSVF9HUk9VUCkKLSAgZW5kX3RhZyA9IFRhZ0J5dGVzKGZpZWxkX251bWJl
ciwgd2lyZV9mb3JtYXQuV0lSRVRZUEVfRU5EX0dST1VQKQotICBhc3NlcnQgbm90IGlzX3BhY2tl
ZAotICBpZiBpc19yZXBlYXRlZDoKLSAgICBkZWYgRW5jb2RlUmVwZWF0ZWRGaWVsZCh3cml0ZSwg
dmFsdWUpOgotICAgICAgZm9yIGVsZW1lbnQgaW4gdmFsdWU6Ci0gICAgICAgIHdyaXRlKHN0YXJ0
X3RhZykKLSAgICAgICAgZWxlbWVudC5fSW50ZXJuYWxTZXJpYWxpemUod3JpdGUpCi0gICAgICAg
IHdyaXRlKGVuZF90YWcpCi0gICAgcmV0dXJuIEVuY29kZVJlcGVhdGVkRmllbGQKLSAgZWxzZToK
LSAgICBkZWYgRW5jb2RlRmllbGQod3JpdGUsIHZhbHVlKToKLSAgICAgIHdyaXRlKHN0YXJ0X3Rh
ZykKLSAgICAgIHZhbHVlLl9JbnRlcm5hbFNlcmlhbGl6ZSh3cml0ZSkKLSAgICAgIHJldHVybiB3
cml0ZShlbmRfdGFnKQotICAgIHJldHVybiBFbmNvZGVGaWVsZAotCi0KLWRlZiBNZXNzYWdlRW5j
b2RlcihmaWVsZF9udW1iZXIsIGlzX3JlcGVhdGVkLCBpc19wYWNrZWQpOgotICAiIiJSZXR1cm5z
IGFuIGVuY29kZXIgZm9yIGEgbWVzc2FnZSBmaWVsZC4iIiIKLQotICB0YWcgPSBUYWdCeXRlcyhm
aWVsZF9udW1iZXIsIHdpcmVfZm9ybWF0LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpCi0gIGxv
Y2FsX0VuY29kZVZhcmludCA9IF9FbmNvZGVWYXJpbnQKLSAgYXNzZXJ0IG5vdCBpc19wYWNrZWQK
LSAgaWYgaXNfcmVwZWF0ZWQ6Ci0gICAgZGVmIEVuY29kZVJlcGVhdGVkRmllbGQod3JpdGUsIHZh
bHVlKToKLSAgICAgIGZvciBlbGVtZW50IGluIHZhbHVlOgotICAgICAgICB3cml0ZSh0YWcpCi0g
ICAgICAgIGxvY2FsX0VuY29kZVZhcmludCh3cml0ZSwgZWxlbWVudC5CeXRlU2l6ZSgpKQotICAg
ICAgICBlbGVtZW50Ll9JbnRlcm5hbFNlcmlhbGl6ZSh3cml0ZSkKLSAgICByZXR1cm4gRW5jb2Rl
UmVwZWF0ZWRGaWVsZAotICBlbHNlOgotICAgIGRlZiBFbmNvZGVGaWVsZCh3cml0ZSwgdmFsdWUp
OgotICAgICAgd3JpdGUodGFnKQotICAgICAgbG9jYWxfRW5jb2RlVmFyaW50KHdyaXRlLCB2YWx1
ZS5CeXRlU2l6ZSgpKQotICAgICAgcmV0dXJuIHZhbHVlLl9JbnRlcm5hbFNlcmlhbGl6ZSh3cml0
ZSkKLSAgICByZXR1cm4gRW5jb2RlRmllbGQKLQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFzIGJlZm9y
ZSwgTWVzc2FnZVNldCBpcyBzcGVjaWFsLgotCi0KLWRlZiBNZXNzYWdlU2V0SXRlbUVuY29kZXIo
ZmllbGRfbnVtYmVyKToKLSAgIiIiRW5jb2RlciBmb3IgZXh0ZW5zaW9ucyBvZiBNZXNzYWdlU2V0
LgotCi0gIFRoZSBtZXNzYWdlIHNldCBtZXNzYWdlIGxvb2tzIGxpa2UgdGhpczoKLSAgICBtZXNz
YWdlIE1lc3NhZ2VTZXQgewotICAgICAgcmVwZWF0ZWQgZ3JvdXAgSXRlbSA9IDEgewotICAgICAg
ICByZXF1aXJlZCBpbnQzMiB0eXBlX2lkID0gMjsKLSAgICAgICAgcmVxdWlyZWQgc3RyaW5nIG1l
c3NhZ2UgPSAzOwotICAgICAgfQotICAgIH0KLSAgIiIiCi0gIHN0YXJ0X2J5dGVzID0gYiIiLmpv
aW4oWwotICAgICAgVGFnQnl0ZXMoMSwgd2lyZV9mb3JtYXQuV0lSRVRZUEVfU1RBUlRfR1JPVVAp
LAotICAgICAgVGFnQnl0ZXMoMiwgd2lyZV9mb3JtYXQuV0lSRVRZUEVfVkFSSU5UKSwKLSAgICAg
IF9WYXJpbnRCeXRlcyhmaWVsZF9udW1iZXIpLAotICAgICAgVGFnQnl0ZXMoMywgd2lyZV9mb3Jt
YXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCldKQotICBlbmRfYnl0ZXMgPSBUYWdCeXRlcygx
LCB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9FTkRfR1JPVVApCi0gIGxvY2FsX0VuY29kZVZhcmludCA9
IF9FbmNvZGVWYXJpbnQKLQotICBkZWYgRW5jb2RlRmllbGQod3JpdGUsIHZhbHVlKToKLSAgICB3
cml0ZShzdGFydF9ieXRlcykKLSAgICBsb2NhbF9FbmNvZGVWYXJpbnQod3JpdGUsIHZhbHVlLkJ5
dGVTaXplKCkpCi0gICAgdmFsdWUuX0ludGVybmFsU2VyaWFsaXplKHdyaXRlKQotICAgIHJldHVy
biB3cml0ZShlbmRfYnl0ZXMpCi0KLSAgcmV0dXJuIEVuY29kZUZpZWxkCi0KLQotIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotIyBBcyBiZWZvcmUsIE1hcCBpcyBzcGVjaWFsLgotCi0KLWRlZiBNYXBFbmNvZGVyKGZp
ZWxkX2Rlc2NyaXB0b3IpOgotICAiIiJFbmNvZGVyIGZvciBleHRlbnNpb25zIG9mIE1lc3NhZ2VT
ZXQuCi0KLSAgTWFwcyBhbHdheXMgaGF2ZSBhIHdpcmUgZm9ybWF0IGxpa2UgdGhpczoKLSAgICBt
ZXNzYWdlIE1hcEVudHJ5IHsKLSAgICAgIGtleV90eXBlIGtleSA9IDE7Ci0gICAgICB2YWx1ZV90
eXBlIHZhbHVlID0gMjsKLSAgICB9Ci0gICAgcmVwZWF0ZWQgTWFwRW50cnkgbWFwID0gTjsKLSAg
IiIiCi0gICMgQ2FuJ3QgbG9vayBhdCBmaWVsZF9kZXNjcmlwdG9yLm1lc3NhZ2VfdHlwZS5fY29u
Y3JldGVfY2xhc3MgYmVjYXVzZSBpdCBtYXkKLSAgIyBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVk
IHlldC4KLSAgbWVzc2FnZV90eXBlID0gZmllbGRfZGVzY3JpcHRvci5tZXNzYWdlX3R5cGUKLSAg
ZW5jb2RlX21lc3NhZ2UgPSBNZXNzYWdlRW5jb2RlcihmaWVsZF9kZXNjcmlwdG9yLm51bWJlciwg
RmFsc2UsIEZhbHNlKQotCi0gIGRlZiBFbmNvZGVGaWVsZCh3cml0ZSwgdmFsdWUpOgotICAgIGZv
ciBrZXkgaW4gdmFsdWU6Ci0gICAgICBlbnRyeV9tc2cgPSBtZXNzYWdlX3R5cGUuX2NvbmNyZXRl
X2NsYXNzKGtleT1rZXksIHZhbHVlPXZhbHVlW2tleV0pCi0gICAgICBlbmNvZGVfbWVzc2FnZSh3
cml0ZSwgZW50cnlfbXNnKQotCi0gIHJldHVybiBFbmNvZGVGaWVsZApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRo
b24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2VudW1fdHlwZV93cmFwcGVyLnB5IGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24v
Z29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2VudW1fdHlwZV93cmFwcGVyLnB5CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxY2ZmZTM1Mjk1OTZhMDk4Nzk3NjFhMTczOWFkY2E5MmE0ODVm
ZDUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9u
L2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9lbnVtX3R5cGVfd3JhcHBlci5weQorKysgL2Rldi9u
dWxsCkBAIC0xLDg5ICswLDAgQEAKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlz
dHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQSBzaW1wbGUgd3JhcHBlciBhcm91bmQg
ZW51bSB0eXBlcyB0byBleHBvc2UgdXRpbGl0eSBmdW5jdGlvbnMuCi0KLUluc3RhbmNlcyBhcmUg
Y3JlYXRlZCBhcyBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZW51bSB0aGV5
IHdyYXAKLW9uIHByb3RvIGNsYXNzZXMuICBGb3IgdXNhZ2UsIHNlZToKLSAgcmVmbGVjdGlvbl90
ZXN0LnB5Ci0iIiIKLQotX19hdXRob3JfXyA9ICdyYWJzYXR0QGdvb2dsZS5jb20gKEtldmluIFJh
YnNhdHQpJwotCi0KLWNsYXNzIEVudW1UeXBlV3JhcHBlcihvYmplY3QpOgotICAiIiJBIHV0aWxp
dHkgZm9yIGZpbmRpbmcgdGhlIG5hbWVzIG9mIGVudW0gdmFsdWVzLiIiIgotCi0gIERFU0NSSVBU
T1IgPSBOb25lCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGVudW1fdHlwZSk6Ci0gICAgIiIiSW5p
dHMgRW51bVR5cGVXcmFwcGVyIHdpdGggYW4gRW51bURlc2NyaXB0b3IuIiIiCi0gICAgc2VsZi5f
ZW51bV90eXBlID0gZW51bV90eXBlCi0gICAgc2VsZi5ERVNDUklQVE9SID0gZW51bV90eXBlOwot
Ci0gIGRlZiBOYW1lKHNlbGYsIG51bWJlcik6Ci0gICAgIiIiUmV0dXJucyBhIHN0cmluZyBjb250
YWluaW5nIHRoZSBuYW1lIG9mIGFuIGVudW0gdmFsdWUuIiIiCi0gICAgaWYgbnVtYmVyIGluIHNl
bGYuX2VudW1fdHlwZS52YWx1ZXNfYnlfbnVtYmVyOgotICAgICAgcmV0dXJuIHNlbGYuX2VudW1f
dHlwZS52YWx1ZXNfYnlfbnVtYmVyW251bWJlcl0ubmFtZQotICAgIHJhaXNlIFZhbHVlRXJyb3Io
J0VudW0gJXMgaGFzIG5vIG5hbWUgZGVmaW5lZCBmb3IgdmFsdWUgJWQnICUgKAotICAgICAgICBz
ZWxmLl9lbnVtX3R5cGUubmFtZSwgbnVtYmVyKSkKLQotICBkZWYgVmFsdWUoc2VsZiwgbmFtZSk6
Ci0gICAgIiIiUmV0dXJucyB0aGUgdmFsdWUgY29yZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBlbnVt
IG5hbWUuIiIiCi0gICAgaWYgbmFtZSBpbiBzZWxmLl9lbnVtX3R5cGUudmFsdWVzX2J5X25hbWU6
Ci0gICAgICByZXR1cm4gc2VsZi5fZW51bV90eXBlLnZhbHVlc19ieV9uYW1lW25hbWVdLm51bWJl
cgotICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VudW0gJXMgaGFzIG5vIHZhbHVlIGRlZmluZWQgZm9y
IG5hbWUgJXMnICUgKAotICAgICAgICBzZWxmLl9lbnVtX3R5cGUubmFtZSwgbmFtZSkpCi0KLSAg
ZGVmIGtleXMoc2VsZik6Ci0gICAgIiIiUmV0dXJuIGEgbGlzdCBvZiB0aGUgc3RyaW5nIG5hbWVz
IGluIHRoZSBlbnVtLgotCi0gICAgVGhlc2UgYXJlIHJldHVybmVkIGluIHRoZSBvcmRlciB0aGV5
IHdlcmUgZGVmaW5lZCBpbiB0aGUgLnByb3RvIGZpbGUuCi0gICAgIiIiCi0KLSAgICByZXR1cm4g
W3ZhbHVlX2Rlc2NyaXB0b3IubmFtZQotICAgICAgICAgICAgZm9yIHZhbHVlX2Rlc2NyaXB0b3Ig
aW4gc2VsZi5fZW51bV90eXBlLnZhbHVlc10KLQotICBkZWYgdmFsdWVzKHNlbGYpOgotICAgICIi
IlJldHVybiBhIGxpc3Qgb2YgdGhlIGludGVnZXIgdmFsdWVzIGluIHRoZSBlbnVtLgotCi0gICAg
VGhlc2UgYXJlIHJldHVybmVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgZGVmaW5lZCBpbiB0aGUg
LnByb3RvIGZpbGUuCi0gICAgIiIiCi0KLSAgICByZXR1cm4gW3ZhbHVlX2Rlc2NyaXB0b3IubnVt
YmVyCi0gICAgICAgICAgICBmb3IgdmFsdWVfZGVzY3JpcHRvciBpbiBzZWxmLl9lbnVtX3R5cGUu
dmFsdWVzXQotCi0gIGRlZiBpdGVtcyhzZWxmKToKLSAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIHRo
ZSAobmFtZSwgdmFsdWUpIHBhaXJzIG9mIHRoZSBlbnVtLgotCi0gICAgVGhlc2UgYXJlIHJldHVy
bmVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgZGVmaW5lZCBpbiB0aGUgLnByb3RvIGZpbGUuCi0g
ICAgIiIiCi0gICAgcmV0dXJuIFsodmFsdWVfZGVzY3JpcHRvci5uYW1lLCB2YWx1ZV9kZXNjcmlw
dG9yLm51bWJlcikKLSAgICAgICAgICAgIGZvciB2YWx1ZV9kZXNjcmlwdG9yIGluIHNlbGYuX2Vu
dW1fdHlwZS52YWx1ZXNdCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJu
YWwvZmFjdG9yeV90ZXN0MS5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9m
YWN0b3J5X3Rlc3QxLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmZiYmVl
Y2YxYzQwYTZjMTdmOThhZmQ3Y2RiNDIxOTA0ZmY3NzkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9m
YWN0b3J5X3Rlc3QxLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogbWF0dGhld3RvaWFAZ29v
Z2xlLmNvbSAoTWF0dCBUb2lhKQotCi1zeW50YXggPSAicHJvdG8yIjsKLQotcGFja2FnZSBnb29n
bGUucHJvdG9idWYucHl0aG9uLmludGVybmFsOwotCi0KLWVudW0gRmFjdG9yeTFFbnVtIHsKLSAg
RkFDVE9SWV8xX1ZBTFVFXzAgPSAwOwotICBGQUNUT1JZXzFfVkFMVUVfMSA9IDE7Ci19Ci0KLW1l
c3NhZ2UgRmFjdG9yeTFNZXNzYWdlIHsKLSAgb3B0aW9uYWwgRmFjdG9yeTFFbnVtIGZhY3Rvcnlf
MV9lbnVtID0gMTsKLSAgZW51bSBOZXN0ZWRGYWN0b3J5MUVudW0gewotICAgIE5FU1RFRF9GQUNU
T1JZXzFfVkFMVUVfMCA9IDA7Ci0gICAgTkVTVEVEX0ZBQ1RPUllfMV9WQUxVRV8xID0gMTsKLSAg
fQotICBvcHRpb25hbCBOZXN0ZWRGYWN0b3J5MUVudW0gbmVzdGVkX2ZhY3RvcnlfMV9lbnVtID0g
MjsKLSAgbWVzc2FnZSBOZXN0ZWRGYWN0b3J5MU1lc3NhZ2UgewotICAgIG9wdGlvbmFsIHN0cmlu
ZyB2YWx1ZSA9IDE7Ci0gIH0KLSAgb3B0aW9uYWwgTmVzdGVkRmFjdG9yeTFNZXNzYWdlIG5lc3Rl
ZF9mYWN0b3J5XzFfbWVzc2FnZSA9IDM7Ci0gIG9wdGlvbmFsIGludDMyIHNjYWxhcl92YWx1ZSA9
IDQ7Ci0gIHJlcGVhdGVkIHN0cmluZyBsaXN0X3ZhbHVlID0gNTsKLQotICBleHRlbnNpb25zIDEw
MDAgdG8gbWF4OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFs
L2ZhY3RvcnlfdGVzdDIucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZmFj
dG9yeV90ZXN0Mi5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxYjU0YWRh
MmIxZTliMjNiZGYwZDY2ODJjMmQzZTlmMzE3NzVmZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZmFj
dG9yeV90ZXN0Mi5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IG1hdHRoZXd0b2lhQGdvb2ds
ZS5jb20gKE1hdHQgVG9pYSkKLQotc3ludGF4ID0gInByb3RvMiI7Ci0KLXBhY2thZ2UgZ29vZ2xl
LnByb3RvYnVmLnB5dGhvbi5pbnRlcm5hbDsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvaW50
ZXJuYWwvZmFjdG9yeV90ZXN0MS5wcm90byI7Ci0KLQotZW51bSBGYWN0b3J5MkVudW0gewotICBG
QUNUT1JZXzJfVkFMVUVfMCA9IDA7Ci0gIEZBQ1RPUllfMl9WQUxVRV8xID0gMTsKLX0KLQotbWVz
c2FnZSBGYWN0b3J5Mk1lc3NhZ2UgewotICByZXF1aXJlZCBpbnQzMiBtYW5kYXRvcnkgPSAxOwot
ICBvcHRpb25hbCBGYWN0b3J5MkVudW0gZmFjdG9yeV8yX2VudW0gPSAyOwotICBlbnVtIE5lc3Rl
ZEZhY3RvcnkyRW51bSB7Ci0gICAgTkVTVEVEX0ZBQ1RPUllfMl9WQUxVRV8wID0gMDsKLSAgICBO
RVNURURfRkFDVE9SWV8yX1ZBTFVFXzEgPSAxOwotICB9Ci0gIG9wdGlvbmFsIE5lc3RlZEZhY3Rv
cnkyRW51bSBuZXN0ZWRfZmFjdG9yeV8yX2VudW0gPSAzOwotICBtZXNzYWdlIE5lc3RlZEZhY3Rv
cnkyTWVzc2FnZSB7Ci0gICAgb3B0aW9uYWwgc3RyaW5nIHZhbHVlID0gMTsKLSAgfQotICBvcHRp
b25hbCBOZXN0ZWRGYWN0b3J5Mk1lc3NhZ2UgbmVzdGVkX2ZhY3RvcnlfMl9tZXNzYWdlID0gNDsK
LSAgb3B0aW9uYWwgRmFjdG9yeTFNZXNzYWdlIGZhY3RvcnlfMV9tZXNzYWdlID0gNTsKLSAgb3B0
aW9uYWwgRmFjdG9yeTFFbnVtIGZhY3RvcnlfMV9lbnVtID0gNjsKLSAgb3B0aW9uYWwgRmFjdG9y
eTFNZXNzYWdlLk5lc3RlZEZhY3RvcnkxRW51bSBuZXN0ZWRfZmFjdG9yeV8xX2VudW0gPSA3Owot
ICBvcHRpb25hbCBGYWN0b3J5MU1lc3NhZ2UuTmVzdGVkRmFjdG9yeTFNZXNzYWdlIG5lc3RlZF9m
YWN0b3J5XzFfbWVzc2FnZSA9IDg7Ci0gIG9wdGlvbmFsIEZhY3RvcnkyTWVzc2FnZSBjaXJjdWxh
cl9tZXNzYWdlID0gOTsKLSAgb3B0aW9uYWwgc3RyaW5nIHNjYWxhcl92YWx1ZSA9IDEwOwotICBy
ZXBlYXRlZCBzdHJpbmcgbGlzdF92YWx1ZSA9IDExOwotICByZXBlYXRlZCBncm91cCBHcm91cGVk
ID0gMTIgewotICAgIG9wdGlvbmFsIHN0cmluZyBwYXJ0XzEgPSAxMzsKLSAgICBvcHRpb25hbCBz
dHJpbmcgcGFydF8yID0gMTQ7Ci0gIH0KLSAgb3B0aW9uYWwgTG9vcE1lc3NhZ2UgbG9vcCA9IDE1
OwotICBvcHRpb25hbCBpbnQzMiBpbnRfd2l0aF9kZWZhdWx0ID0gMTYgW2RlZmF1bHQgPSAxNzc2
XTsKLSAgb3B0aW9uYWwgZG91YmxlIGRvdWJsZV93aXRoX2RlZmF1bHQgPSAxNyBbZGVmYXVsdCA9
IDkuOTldOwotICBvcHRpb25hbCBzdHJpbmcgc3RyaW5nX3dpdGhfZGVmYXVsdCA9IDE4IFtkZWZh
dWx0ID0gImhlbGxvIHdvcmxkIl07Ci0gIG9wdGlvbmFsIGJvb2wgYm9vbF93aXRoX2RlZmF1bHQg
PSAxOSBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgb3B0aW9uYWwgRmFjdG9yeTJFbnVtIGVudW1fd2l0
aF9kZWZhdWx0ID0gMjAgW2RlZmF1bHQgPSBGQUNUT1JZXzJfVkFMVUVfMV07Ci0gIG9wdGlvbmFs
IGJ5dGVzIGJ5dGVzX3dpdGhfZGVmYXVsdCA9IDIxIFtkZWZhdWx0ID0gImFcMzczXDAwMGMiXTsK
LQotCi0gIGV4dGVuZCBGYWN0b3J5MU1lc3NhZ2UgewotICAgIG9wdGlvbmFsIHN0cmluZyBvbmVf
bW9yZV9maWVsZCA9IDEwMDE7Ci0gIH0KLQotICBvbmVvZiBvbmVvZl9maWVsZCB7Ci0gICAgaW50
MzIgb25lb2ZfaW50ID0gMjI7Ci0gICAgc3RyaW5nIG9uZW9mX3N0cmluZyA9IDIzOwotICB9Ci19
Ci0KLW1lc3NhZ2UgTG9vcE1lc3NhZ2UgewotICBvcHRpb25hbCBGYWN0b3J5Mk1lc3NhZ2UgbG9v
cCA9IDE7Ci19Ci0KLW1lc3NhZ2UgTWVzc2FnZVdpdGhOZXN0ZWRFbnVtT25seSB7Ci0gIGVudW0g
TmVzdGVkRW51bSB7Ci0gICAgTkVTVEVEX01FU1NBR0VfRU5VTV8wID0gMDsKLSAgfQotfQotCi1l
eHRlbmQgRmFjdG9yeTFNZXNzYWdlIHsKLSAgb3B0aW9uYWwgc3RyaW5nIGFub3RoZXJfZmllbGQg
PSAxMDAyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2dl
bmVyYXRvcl90ZXN0LnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2dlbmVyYXRv
cl90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4M2VhNWY1MDk0YTU3N2Mw
YTVkMjI4MWFhNTcyMTk5M2QzOWVkOTJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9nZW5lcmF0b3Jf
dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0OCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYg
cHl0aG9uCi0jCi0jIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSMgVE9ETyhyb2JpbnNvbik6IEZsZXNoIHRoaXMgb3V0IGNvbnNp
ZGVyYWJseS4gIFdlIGZvY3VzZWQgb24gcmVmbGVjdGlvbl90ZXN0LnB5Ci0jIGZpcnN0LCBzaW5j
ZSBpdCdzIHRlc3RpbmcgdGhlIHN1YnRsZXIgY29kZSwgYW5kIHNpbmNlIGl0IHByb3ZpZGVzIGRl
Y2VudAotIyBpbmRpcmVjdCB0ZXN0aW5nIG9mIHRoZSBwcm90b2NvbCBjb21waWxlciBvdXRwdXQu
Ci0KLSIiIlVuaXR0ZXN0IHRoYXQgZGlyZWN0bHkgdGVzdHMgdGhlIG91dHB1dCBvZiB0aGUgcHVy
ZS1QeXRob24gcHJvdG9jb2wKLWNvbXBpbGVyLiAgU2VlIC8vZ29vZ2xlL3Byb3RvYnVmL2ludGVy
bmFsL3JlZmxlY3Rpb25fdGVzdC5weSBmb3IgYSB0ZXN0IHdoaWNoCi1mdXJ0aGVyIGVuc3VyZXMg
dGhhdCB3ZSBjYW4gdXNlIFB5dGhvbiBwcm90b2NvbCBtZXNzYWdlIG9iamVjdHMgYXMgd2UgZXhw
ZWN0LgotIiIiCi0KLV9fYXV0aG9yX18gPSAncm9iaW5zb25AZ29vZ2xlLmNvbSAoV2lsbCBSb2Jp
bnNvbiknCi0KLXRyeToKLSAgaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdCAgI1BZMjYKLWV4
Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZ29vZ2xlLnByb3Rv
YnVmLmludGVybmFsIGltcG9ydCB0ZXN0X2JhZF9pZGVudGlmaWVyc19wYjIKLWZyb20gZ29vZ2xl
LnByb3RvYnVmIGltcG9ydCB1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wYjIKLWZyb20gZ29vZ2xl
LnByb3RvYnVmIGltcG9ydCB1bml0dGVzdF9pbXBvcnRfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1
ZiBpbXBvcnQgdW5pdHRlc3RfaW1wb3J0X3B1YmxpY19wYjIKLWZyb20gZ29vZ2xlLnByb3RvYnVm
IGltcG9ydCB1bml0dGVzdF9tc2V0X3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHVu
aXR0ZXN0X21zZXRfd2lyZV9mb3JtYXRfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQg
dW5pdHRlc3Rfbm9fZ2VuZXJpY19zZXJ2aWNlc19wYjIKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGlt
cG9ydCB1bml0dGVzdF9wYjIKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBzZXJ2aWNlCi1m
cm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgc3ltYm9sX2RhdGFiYXNlCi0KLU1BWF9FWFRFTlNJ
T04gPSA1MzY4NzA5MTIKLQotCi1jbGFzcyBHZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKLQotICBkZWYgdGVzdE5lc3RlZE1lc3NhZ2VEZXNjcmlwdG9yKHNlbGYpOgotICAgIGZpZWxk
X25hbWUgPSAnb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UnCi0gICAgcHJvdG9fdHlwZSA9IHVuaXR0
ZXN0X3BiMi5UZXN0QWxsVHlwZXMKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBwcm90
b190eXBlLk5lc3RlZE1lc3NhZ2UuREVTQ1JJUFRPUiwKLSAgICAgICAgcHJvdG9fdHlwZS5ERVND
UklQVE9SLmZpZWxkc19ieV9uYW1lW2ZpZWxkX25hbWVdLm1lc3NhZ2VfdHlwZSkKLQotICBkZWYg
dGVzdEVudW1zKHNlbGYpOgotICAgICMgV2UgdGVzdCBvbmx5IG1vZHVsZS1sZXZlbCBlbnVtcyBo
ZXJlLgotICAgICMgVE9ETyhyb2JpbnNvbik6IEV4YW1pbmUgZGVzY3JpcHRvcnMgZGlyZWN0bHkg
dG8gY2hlY2sKLSAgICAjIGVudW0gZGVzY3JpcHRvciBvdXRwdXQuCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCg0LCB1bml0dGVzdF9wYjIuRk9SRUlHTl9GT08pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg1
LCB1bml0dGVzdF9wYjIuRk9SRUlHTl9CQVIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg2LCB1bml0
dGVzdF9wYjIuRk9SRUlHTl9CQVopCi0KLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxs
VHlwZXMoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8uRk9PKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMSwgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5GT08pCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgyLCBwcm90by5CQVIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCB1bml0dGVzdF9w
YjIuVGVzdEFsbFR5cGVzLkJBUikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLkJBWikK
LSAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuQkFaKQot
Ci0gIGRlZiB0ZXN0RXh0cmVtZURlZmF1bHRWYWx1ZXMoc2VsZik6Ci0gICAgbWVzc2FnZSA9IHVu
aXR0ZXN0X3BiMi5UZXN0RXh0cmVtZURlZmF1bHRWYWx1ZXMoKQotCi0gICAgIyBQeXRob24gcHJl
LTIuNiBkb2VzIG5vdCBoYXZlIGlzaW5mKCkgb3IgaXNuYW4oKSBmdW5jdGlvbnMsIHNvIHdlIGhh
dmUKLSAgICAjIHRvIHByb3ZpZGUgb3VyIG93bi4KLSAgICBkZWYgaXNuYW4odmFsKToKLSAgICAg
ICMgTmFOIGlzIG5ldmVyIGVxdWFsIHRvIGl0c2VsZi4KLSAgICAgIHJldHVybiB2YWwgIT0gdmFs
Ci0gICAgZGVmIGlzaW5mKHZhbCk6Ci0gICAgICAjIEluZmluaXR5IHRpbWVzIHplcm8gZXF1YWxz
IE5hTi4KLSAgICAgIHJldHVybiBub3QgaXNuYW4odmFsKSBhbmQgaXNuYW4odmFsICogMCkKLQot
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luZihtZXNzYWdlLmluZl9kb3VibGUpKQotICAgIHNlbGYu
YXNzZXJ0VHJ1ZShtZXNzYWdlLmluZl9kb3VibGUgPiAwKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShp
c2luZihtZXNzYWdlLm5lZ19pbmZfZG91YmxlKSkKLSAgICBzZWxmLmFzc2VydFRydWUobWVzc2Fn
ZS5uZWdfaW5mX2RvdWJsZSA8IDApCi0gICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKG1lc3NhZ2Uu
bmFuX2RvdWJsZSkpCi0KLSAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYobWVzc2FnZS5pbmZfZmxv
YXQpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLmluZl9mbG9hdCA+IDApCi0gICAgc2Vs
Zi5hc3NlcnRUcnVlKGlzaW5mKG1lc3NhZ2UubmVnX2luZl9mbG9hdCkpCi0gICAgc2VsZi5hc3Nl
cnRUcnVlKG1lc3NhZ2UubmVnX2luZl9mbG9hdCA8IDApCi0gICAgc2VsZi5hc3NlcnRUcnVlKGlz
bmFuKG1lc3NhZ2UubmFuX2Zsb2F0KSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCI/ID8gPz8gPz8g
Pz8/ID8/LyA/Py0iLCBtZXNzYWdlLmNwcF90cmlncmFwaCkKLQotICBkZWYgdGVzdEhhc0RlZmF1
bHRWYWx1ZXMoc2VsZik6Ci0gICAgZGVzYyA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuREVT
Q1JJUFRPUgotCi0gICAgZXhwZWN0ZWRfaGFzX2RlZmF1bHRfYnlfbmFtZSA9IHsKLSAgICAgICAg
J29wdGlvbmFsX2ludDMyJzogRmFsc2UsCi0gICAgICAgICdyZXBlYXRlZF9pbnQzMic6IEZhbHNl
LAotICAgICAgICAnb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UnOiBGYWxzZSwKLSAgICAgICAgJ2Rl
ZmF1bHRfaW50MzInOiBUcnVlLAotICAgIH0KLQotICAgIGhhc19kZWZhdWx0X2J5X25hbWUgPSBk
aWN0KAotICAgICAgICBbKGYubmFtZSwgZi5oYXNfZGVmYXVsdF92YWx1ZSkKLSAgICAgICAgIGZv
ciBmIGluIGRlc2MuZmllbGRzCi0gICAgICAgICBpZiBmLm5hbWUgaW4gZXhwZWN0ZWRfaGFzX2Rl
ZmF1bHRfYnlfbmFtZV0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9oYXNfZGVmYXVs
dF9ieV9uYW1lLCBoYXNfZGVmYXVsdF9ieV9uYW1lKQotCi0gIGRlZiB0ZXN0Q29udGFpbmluZ1R5
cGVCZWhhdmlvckZvckV4dGVuc2lvbnMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCh1bml0
dGVzdF9wYjIub3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uLmNvbnRhaW5pbmdfdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucy5ERVNDUklQVE9S
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlRlc3RSZXF1aXJlZC5zaW5nbGUu
Y29udGFpbmluZ190eXBlLAotICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RB
bGxFeHRlbnNpb25zLkRFU0NSSVBUT1IpCi0KLSAgZGVmIHRlc3RFeHRlbnNpb25TY29wZShzZWxm
KToKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5vcHRpb25hbF9pbnQzMl9leHRl
bnNpb24uZXh0ZW5zaW9uX3Njb3BlLAotICAgICAgICAgICAgICAgICAgICAgTm9uZSkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5UZXN0UmVxdWlyZWQuc2luZ2xlLmV4dGVuc2lv
bl9zY29wZSwKLSAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0UmVxdWlyZWQu
REVTQ1JJUFRPUikKLQotICBkZWYgdGVzdElzRXh0ZW5zaW9uKHNlbGYpOgotICAgIHNlbGYuYXNz
ZXJ0VHJ1ZSh1bml0dGVzdF9wYjIub3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uLmlzX2V4dGVuc2lv
bikKLSAgICBzZWxmLmFzc2VydFRydWUodW5pdHRlc3RfcGIyLlRlc3RSZXF1aXJlZC5zaW5nbGUu
aXNfZXh0ZW5zaW9uKQotCi0gICAgbWVzc2FnZV9kZXNjcmlwdG9yID0gdW5pdHRlc3RfcGIyLlRl
c3RSZXF1aXJlZC5ERVNDUklQVE9SCi0gICAgbm9uX2V4dGVuc2lvbl9kZXNjcmlwdG9yID0gbWVz
c2FnZV9kZXNjcmlwdG9yLmZpZWxkc19ieV9uYW1lWydhJ10KLSAgICBzZWxmLmFzc2VydFRydWUo
bm90IG5vbl9leHRlbnNpb25fZGVzY3JpcHRvci5pc19leHRlbnNpb24pCi0KLSAgZGVmIHRlc3RP
cHRpb25zKHNlbGYpOgotICAgIHByb3RvID0gdW5pdHRlc3RfbXNldF93aXJlX2Zvcm1hdF9wYjIu
VGVzdE1lc3NhZ2VTZXQoKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5ERVNDUklQVE9SLkdl
dE9wdGlvbnMoKS5tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCkKLQotICBkZWYgdGVzdE1lc3NhZ2VX
aXRoQ3VzdG9tT3B0aW9ucyhzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X2N1c3RvbV9vcHRp
b25zX3BiMi5UZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRpb25zKCkKLSAgICBlbnVtX29wdGlvbnMg
PSBwcm90by5ERVNDUklQVE9SLmVudW1fdHlwZXNfYnlfbmFtZVsnQW5FbnVtJ10uR2V0T3B0aW9u
cygpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGVudW1fb3B0aW9ucyBpcyBub3QgTm9uZSkKLSAgICAj
IFRPRE8oZ3BzKTogV2UgcmVhbGx5IHNob3VsZCB0ZXN0IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhl
IGVudW1fb3B0MQotICAgICMgZXh0ZW5zaW9uIGFuZCBmb3IgaXRzIHZhbHVlIHRvIGJlIHNldCB0
byAtNzg5LgotCi0gIGRlZiB0ZXN0TmVzdGVkVHlwZXMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRF
cXVhbCgKLSAgICAgICAgc2V0KHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuREVTQ1JJUFRPUi5u
ZXN0ZWRfdHlwZXMpLAotICAgICAgICBzZXQoWwotICAgICAgICAgICAgdW5pdHRlc3RfcGIyLlRl
c3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLkRFU0NSSVBUT1IsCi0gICAgICAgICAgICB1bml0dGVz
dF9wYjIuVGVzdEFsbFR5cGVzLk9wdGlvbmFsR3JvdXAuREVTQ1JJUFRPUiwKLSAgICAgICAgICAg
IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuUmVwZWF0ZWRHcm91cC5ERVNDUklQVE9SLAotICAg
ICAgICBdKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5UZXN0RW1wdHlNZXNz
YWdlLkRFU0NSSVBUT1IubmVzdGVkX3R5cGVzLCBbXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAot
ICAgICAgICB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UuREVTQ1JJUFRP
Ui5uZXN0ZWRfdHlwZXMsIFtdKQotCi0gIGRlZiB0ZXN0Q29udGFpbmluZ1R5cGUoc2VsZik6Ci0g
ICAgc2VsZi5hc3NlcnRUcnVlKAotICAgICAgICB1bml0dGVzdF9wYjIuVGVzdEVtcHR5TWVzc2Fn
ZS5ERVNDUklQVE9SLmNvbnRhaW5pbmdfdHlwZSBpcyBOb25lKQotICAgIHNlbGYuYXNzZXJ0VHJ1
ZSgKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5ERVNDUklQVE9SLmNvbnRhaW5p
bmdfdHlwZSBpcyBOb25lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIHVuaXR0ZXN0
X3BiMi5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZS5ERVNDUklQVE9SLmNvbnRhaW5pbmdfdHlw
ZSwKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5ERVNDUklQVE9SKQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVzdGVk
TWVzc2FnZS5ERVNDUklQVE9SLmNvbnRhaW5pbmdfdHlwZSwKLSAgICAgICAgdW5pdHRlc3RfcGIy
LlRlc3RBbGxUeXBlcy5ERVNDUklQVE9SKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAg
IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuUmVwZWF0ZWRHcm91cC5ERVNDUklQVE9SLmNvbnRh
aW5pbmdfdHlwZSwKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5ERVNDUklQVE9S
KQotCi0gIGRlZiB0ZXN0Q29udGFpbmluZ1R5cGVJbkVudW1EZXNjcmlwdG9yKHNlbGYpOgotICAg
IHNlbGYuYXNzZXJ0VHJ1ZSh1bml0dGVzdF9wYjIuX0ZPUkVJR05FTlVNLmNvbnRhaW5pbmdfdHlw
ZSBpcyBOb25lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLl9URVNUQUxMVFlQ
RVNfTkVTVEVERU5VTS5jb250YWluaW5nX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICB1bml0
dGVzdF9wYjIuVGVzdEFsbFR5cGVzLkRFU0NSSVBUT1IpCi0KLSAgZGVmIHRlc3RQYWNrYWdlKHNl
bGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxs
VHlwZXMuREVTQ1JJUFRPUi5maWxlLnBhY2thZ2UsCi0gICAgICAgICdwcm90b2J1Zl91bml0dGVz
dCcpCi0gICAgZGVzYyA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZS5E
RVNDUklQVE9SCi0gICAgc2VsZi5hc3NlcnRFcXVhbChkZXNjLmZpbGUucGFja2FnZSwgJ3Byb3Rv
YnVmX3VuaXR0ZXN0JykKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICB1bml0dGVzdF9p
bXBvcnRfcGIyLkltcG9ydE1lc3NhZ2UuREVTQ1JJUFRPUi5maWxlLnBhY2thZ2UsCi0gICAgICAg
ICdwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQnKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAg
ICAgICAgdW5pdHRlc3RfcGIyLl9GT1JFSUdORU5VTS5maWxlLnBhY2thZ2UsICdwcm90b2J1Zl91
bml0dGVzdCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgdW5pdHRlc3RfcGIyLl9U
RVNUQUxMVFlQRVNfTkVTVEVERU5VTS5maWxlLnBhY2thZ2UsCi0gICAgICAgICdwcm90b2J1Zl91
bml0dGVzdCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgdW5pdHRlc3RfaW1wb3J0
X3BiMi5fSU1QT1JURU5VTS5maWxlLnBhY2thZ2UsCi0gICAgICAgICdwcm90b2J1Zl91bml0dGVz
dF9pbXBvcnQnKQotCi0gIGRlZiB0ZXN0RXh0ZW5zaW9uUmFuZ2Uoc2VsZik6Ci0gICAgc2VsZi5h
c3NlcnRFcXVhbCgKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5ERVNDUklQVE9S
LmV4dGVuc2lvbl9yYW5nZXMsIFtdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIHVu
aXR0ZXN0X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucy5ERVNDUklQVE9SLmV4dGVuc2lvbl9yYW5nZXMs
Ci0gICAgICAgIFsoMSwgTUFYX0VYVEVOU0lPTildKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0g
ICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0TXVsdGlwbGVFeHRlbnNpb25SYW5nZXMuREVTQ1JJUFRP
Ui5leHRlbnNpb25fcmFuZ2VzLAotICAgICAgICBbKDQyLCA0MyksICg0MTQzLCA0MjQ0KSwgKDY1
NTM2LCBNQVhfRVhURU5TSU9OKV0pCi0KLSAgZGVmIHRlc3RGaWxlRGVzY3JpcHRvcihzZWxmKToK
LSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5ERVNDUklQVE9SLm5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAnZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnByb3RvJykKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5ERVNDUklQVE9SLnBhY2thZ2UsICdwcm90b2J1
Zl91bml0dGVzdCcpCi0gICAgc2VsZi5hc3NlcnRGYWxzZSh1bml0dGVzdF9wYjIuREVTQ1JJUFRP
Ui5zZXJpYWxpemVkX3BiIGlzIE5vbmUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCh1bml0dGVzdF9w
YjIuREVTQ1JJUFRPUi5kZXBlbmRlbmNpZXMsCi0gICAgICAgICAgICAgICAgICAgICBbdW5pdHRl
c3RfaW1wb3J0X3BiMi5ERVNDUklQVE9SXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0
X2ltcG9ydF9wYjIuREVTQ1JJUFRPUi5kZXBlbmRlbmNpZXMsCi0gICAgICAgICAgICAgICAgICAg
ICBbdW5pdHRlc3RfaW1wb3J0X3B1YmxpY19wYjIuREVTQ1JJUFRPUl0pCi0KLSAgZGVmIHRlc3RO
b0dlbmVyaWNTZXJ2aWNlcyhzZWxmKToKLSAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cih1bml0
dGVzdF9ub19nZW5lcmljX3NlcnZpY2VzX3BiMiwgIlRlc3RNZXNzYWdlIikpCi0gICAgc2VsZi5h
c3NlcnRUcnVlKGhhc2F0dHIodW5pdHRlc3Rfbm9fZ2VuZXJpY19zZXJ2aWNlc19wYjIsICJGT08i
KSkKLSAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cih1bml0dGVzdF9ub19nZW5lcmljX3NlcnZp
Y2VzX3BiMiwgInRlc3RfZXh0ZW5zaW9uIikpCi0KLSAgICAjIE1ha2Ugc3VyZSB1bml0dGVzdF9u
b19nZW5lcmljX3NlcnZpY2VzX3BiMiBoYXMgbm8gc2VydmljZXMgc3ViY2xhc3NpbmcKLSAgICAj
IFByb3RvMiBTZXJ2aWNlIGNsYXNzLgotICAgIGlmIGhhc2F0dHIodW5pdHRlc3Rfbm9fZ2VuZXJp
Y19zZXJ2aWNlc19wYjIsICJUZXN0U2VydmljZSIpOgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShp
c3N1YmNsYXNzKHVuaXR0ZXN0X25vX2dlbmVyaWNfc2VydmljZXNfcGIyLlRlc3RTZXJ2aWNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuU2VydmljZSkpCi0KLSAg
ZGVmIHRlc3RNZXNzYWdlVHlwZXNCeU5hbWUoc2VsZik6Ci0gICAgZmlsZV90eXBlID0gdW5pdHRl
c3RfcGIyLkRFU0NSSVBUT1IKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICB1bml0dGVz
dF9wYjIuX1RFU1RBTExUWVBFUywKLSAgICAgICAgZmlsZV90eXBlLm1lc3NhZ2VfdHlwZXNfYnlf
bmFtZVt1bml0dGVzdF9wYjIuX1RFU1RBTExUWVBFUy5uYW1lXSkKLQotICAgICMgTmVzdGVkIG1l
c3NhZ2VzIHNob3VsZG4ndCBiZSBpbmNsdWRlZCBpbiB0aGUgbWVzc2FnZV90eXBlc19ieV9uYW1l
Ci0gICAgIyBkaWN0aW9uYXJ5IChsaWtlIGluIHRoZSBDKysgQVBJKS4KLSAgICBzZWxmLmFzc2Vy
dEZhbHNlKAotICAgICAgICB1bml0dGVzdF9wYjIuX1RFU1RBTExUWVBFU19ORVNURURNRVNTQUdF
Lm5hbWUgaW4KLSAgICAgICAgZmlsZV90eXBlLm1lc3NhZ2VfdHlwZXNfYnlfbmFtZSkKLQotICBk
ZWYgdGVzdEVudW1UeXBlc0J5TmFtZShzZWxmKToKLSAgICBmaWxlX3R5cGUgPSB1bml0dGVzdF9w
YjIuREVTQ1JJUFRPUgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIHVuaXR0ZXN0X3Bi
Mi5fRk9SRUlHTkVOVU0sCi0gICAgICAgIGZpbGVfdHlwZS5lbnVtX3R5cGVzX2J5X25hbWVbdW5p
dHRlc3RfcGIyLl9GT1JFSUdORU5VTS5uYW1lXSkKLQotICBkZWYgdGVzdEV4dGVuc2lvbnNCeU5h
bWUoc2VsZik6Ci0gICAgZmlsZV90eXBlID0gdW5pdHRlc3RfcGIyLkRFU0NSSVBUT1IKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKAotICAgICAgICB1bml0dGVzdF9wYjIubXlfZXh0ZW5zaW9uX3N0cmlu
ZywKLSAgICAgICAgZmlsZV90eXBlLmV4dGVuc2lvbnNfYnlfbmFtZVt1bml0dGVzdF9wYjIubXlf
ZXh0ZW5zaW9uX3N0cmluZy5uYW1lXSkKLQotICBkZWYgdGVzdFB1YmxpY0ltcG9ydHMoc2VsZik6
Ci0gICAgIyBUZXN0IHB1YmxpYyBpbXBvcnRzIGFzIGVtYmVkZGVkIG1lc3NhZ2UuCi0gICAgYWxs
X3R5cGVfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDAsIGFsbF90eXBlX3Byb3RvLm9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZS5l
KQotCi0gICAgIyBQdWJsaWNJbXBvcnRNZXNzYWdlIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gdW5p
dHRlc3RfaW1wb3J0X3B1YmxpY19wYjIKLSAgICAjIG1vZHVsZSwgYW5kIGlzIHB1YmxpYyBpbXBv
cnRlZCBieSB1bml0dGVzdF9pbXBvcnRfcGIyIG1vZHVsZS4KLSAgICBwdWJsaWNfaW1wb3J0X3By
b3RvID0gdW5pdHRlc3RfaW1wb3J0X3BiMi5QdWJsaWNJbXBvcnRNZXNzYWdlKCkKLSAgICBzZWxm
LmFzc2VydEVxdWFsKDAsIHB1YmxpY19pbXBvcnRfcHJvdG8uZSkKLSAgICBzZWxmLmFzc2VydFRy
dWUodW5pdHRlc3RfaW1wb3J0X3B1YmxpY19wYjIuUHVibGljSW1wb3J0TWVzc2FnZSBpcwotICAg
ICAgICAgICAgICAgICAgICB1bml0dGVzdF9pbXBvcnRfcGIyLlB1YmxpY0ltcG9ydE1lc3NhZ2Up
Ci0KLSAgZGVmIHRlc3RCYWRJZGVudGlmaWVycyhzZWxmKToKLSAgICAjIFdlJ3JlIGp1c3QgdGVz
dGluZyB0aGF0IHRoZSBjb2RlIHdhcyBpbXBvcnRlZCB3aXRob3V0IHByb2JsZW1zLgotICAgIG1l
c3NhZ2UgPSB0ZXN0X2JhZF9pZGVudGlmaWVyc19wYjIuVGVzdEJhZElkZW50aWZpZXJzKCkKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UuRXh0ZW5zaW9uc1t0ZXN0X2JhZF9pZGVudGlmaWVy
c19wYjIubWVzc2FnZV0sCi0gICAgICAgICAgICAgICAgICAgICAiZm9vIikKLSAgICBzZWxmLmFz
c2VydEVxdWFsKG1lc3NhZ2UuRXh0ZW5zaW9uc1t0ZXN0X2JhZF9pZGVudGlmaWVyc19wYjIuZGVz
Y3JpcHRvcl0sCi0gICAgICAgICAgICAgICAgICAgICAiYmFyIikKLSAgICBzZWxmLmFzc2VydEVx
dWFsKG1lc3NhZ2UuRXh0ZW5zaW9uc1t0ZXN0X2JhZF9pZGVudGlmaWVyc19wYjIucmVmbGVjdGlv
bl0sCi0gICAgICAgICAgICAgICAgICAgICAiYmF6IikKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1l
c3NhZ2UuRXh0ZW5zaW9uc1t0ZXN0X2JhZF9pZGVudGlmaWVyc19wYjIuc2VydmljZV0sCi0gICAg
ICAgICAgICAgICAgICAgICAicXV4IikKLQotICBkZWYgdGVzdE9uZW9mKHNlbGYpOgotICAgIGRl
c2MgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLkRFU0NSSVBUT1IKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDEsIGxlbihkZXNjLm9uZW9mcykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnb25lb2Zf
ZmllbGQnLCBkZXNjLm9uZW9mc1swXS5uYW1lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZGVz
Yy5vbmVvZnNbMF0uaW5kZXgpCi0gICAgc2VsZi5hc3NlcnRJcyhkZXNjLCBkZXNjLm9uZW9mc1sw
XS5jb250YWluaW5nX3R5cGUpCi0gICAgc2VsZi5hc3NlcnRJcyhkZXNjLm9uZW9mc1swXSwgZGVz
Yy5vbmVvZnNfYnlfbmFtZVsnb25lb2ZfZmllbGQnXSkKLSAgICBuZXN0ZWRfbmFtZXMgPSBzZXQo
WydvbmVvZl91aW50MzInLCAnb25lb2ZfbmVzdGVkX21lc3NhZ2UnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgJ29uZW9mX3N0cmluZycsICdvbmVvZl9ieXRlcyddKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoCi0gICAgICAgIG5lc3RlZF9uYW1lcywKLSAgICAgICAgc2V0KFtmaWVsZC5uYW1lIGZv
ciBmaWVsZCBpbiBkZXNjLm9uZW9mc1swXS5maWVsZHNdKSkKLSAgICBmb3IgZmllbGRfbmFtZSwg
ZmllbGRfZGVzYyBpbiBkZXNjLmZpZWxkc19ieV9uYW1lLml0ZW1zKCk6Ci0gICAgICBpZiBmaWVs
ZF9uYW1lIGluIG5lc3RlZF9uYW1lczoKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhkZXNjLm9uZW9m
c1swXSwgZmllbGRfZGVzYy5jb250YWluaW5nX29uZW9mKQotICAgICAgZWxzZToKLSAgICAgICAg
c2VsZi5hc3NlcnRJc05vbmUoZmllbGRfZGVzYy5jb250YWluaW5nX29uZW9mKQotCi0KLWNsYXNz
IFN5bWJvbERhdGFiYXNlUmVnaXN0cmF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICIi
IkNoZWNrcyB0aGF0IG1lc3NhZ2VzLCBlbnVtcyBhbmQgZmlsZXMgYXJlIGNvcnJlY3RseSByZWdp
c3RlcmVkLiIiIgotCi0gIGRlZiB0ZXN0R2V0U3ltYm9sKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoCi0gICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMsIHN5bWJvbF9kYXRhYmFz
ZS5EZWZhdWx0KCkuR2V0U3ltYm9sKAotICAgICAgICAgICAgJ3Byb3RvYnVmX3VuaXR0ZXN0LlRl
c3RBbGxUeXBlcycpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIHVuaXR0ZXN0X3Bi
Mi5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZSwKLSAgICAgICAgc3ltYm9sX2RhdGFiYXNlLkRl
ZmF1bHQoKS5HZXRTeW1ib2woCi0gICAgICAgICAgICAncHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs
bFR5cGVzLk5lc3RlZE1lc3NhZ2UnKSkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVy
cm9yKToKLSAgICAgIHN5bWJvbF9kYXRhYmFzZS5EZWZhdWx0KCkuR2V0U3ltYm9sKCdwcm90b2J1
Zl91bml0dGVzdC5OZXN0ZWRNZXNzYWdlJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAg
ICB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLk9wdGlvbmFsR3JvdXAsCi0gICAgICAgIHN5bWJv
bF9kYXRhYmFzZS5EZWZhdWx0KCkuR2V0U3ltYm9sKAotICAgICAgICAgICAgJ3Byb3RvYnVmX3Vu
aXR0ZXN0LlRlc3RBbGxUeXBlcy5PcHRpb25hbEdyb3VwJykpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5SZXBlYXRlZEdyb3VwLAotICAg
ICAgICBzeW1ib2xfZGF0YWJhc2UuRGVmYXVsdCgpLkdldFN5bWJvbCgKLSAgICAgICAgICAgICdw
cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuUmVwZWF0ZWRHcm91cCcpKQotCi0gIGRlZiB0
ZXN0RW51bXMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgJ3Byb3RvYnVm
X3VuaXR0ZXN0LkZvcmVpZ25FbnVtJywKLSAgICAgICAgc3ltYm9sX2RhdGFiYXNlLkRlZmF1bHQo
KS5wb29sLkZpbmRFbnVtVHlwZUJ5TmFtZSgKLSAgICAgICAgICAgICdwcm90b2J1Zl91bml0dGVz
dC5Gb3JlaWduRW51bScpLmZ1bGxfbmFtZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAg
ICAncHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0nLAotICAgICAgICBz
eW1ib2xfZGF0YWJhc2UuRGVmYXVsdCgpLnBvb2wuRmluZEVudW1UeXBlQnlOYW1lKAotICAgICAg
ICAgICAgJ3Byb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtJykuZnVsbF9u
YW1lKQotCi0gIGRlZiB0ZXN0RmluZEZpbGVCeU5hbWUoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRF
cXVhbCgKLSAgICAgICAgJ2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wcm90bycsCi0gICAgICAg
IHN5bWJvbF9kYXRhYmFzZS5EZWZhdWx0KCkucG9vbC5GaW5kRmlsZUJ5TmFtZSgKLSAgICAgICAg
ICAgICdnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8nKS5uYW1lKQotCi1pZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dv
b2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9pbXBvcnRfdGVzdF9wYWNrYWdlL19faW5pdF9fLnB5IGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9w
eXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2ltcG9ydF90ZXN0X3BhY2thZ2UvX19pbml0
X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMjFkZDBlYzU4ZmYyNzVkMjE1
ZWRhZmMyZTg0YzFjN2I4MDBlMGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2ltcG9ydF90ZXN0X3Bh
Y2thZ2UvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSIiIlNhbXBsZSBtb2R1bGUgaW1wb3J0aW5nIGEgbmVzdGVkIHByb3RvIGZyb20gaXRzZWxmLiIi
IgotCi1mcm9tIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbC5pbXBvcnRfdGVzdF9wYWNrYWdlIGlt
cG9ydCBvdXRlcl9wYjIgYXMgbXlwcm90bwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3Rv
YnVmL2ludGVybmFsL2ltcG9ydF90ZXN0X3BhY2thZ2UvaW5uZXIucHJvdG8gYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29n
bGUvcHJvdG9idWYvaW50ZXJuYWwvaW1wb3J0X3Rlc3RfcGFja2FnZS9pbm5lci5wcm90bwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4N2MxMjMwZTU0OWUwNzE5Njg2NmM5MDE5ZDU2
NGNhZGYxOTc3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvaW1wb3J0X3Rlc3RfcGFja2FnZS9pbm5l
ci5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8yIjsKLQotcGFja2FnZSBnb29nbGUu
cHJvdG9idWYucHl0aG9uLmludGVybmFsLmltcG9ydF90ZXN0X3BhY2thZ2U7Ci0KLW1lc3NhZ2Ug
SW5uZXIgewotICBvcHRpb25hbCBpbnQzMiB2YWx1ZSA9IDEgW2RlZmF1bHQgPSA1N107Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvaW1wb3J0X3Rlc3RfcGFj
a2FnZS9vdXRlci5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9pbXBvcnRf
dGVzdF9wYWNrYWdlL291dGVyLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
MjdmYjVjOGY0MjA3ZjBiNzVlZTAwMmZjNzY1YzM5M2RiN2YwOGIzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRl
cm5hbC9pbXBvcnRfdGVzdF9wYWNrYWdlL291dGVyLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEs
MzkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9
ICJwcm90bzIiOwotCi1wYWNrYWdlIGdvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwuaW1w
b3J0X3Rlc3RfcGFja2FnZTsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvaW1w
b3J0X3Rlc3RfcGFja2FnZS9pbm5lci5wcm90byI7Ci0KLW1lc3NhZ2UgT3V0ZXIgewotICBvcHRp
b25hbCBJbm5lciBpbm5lciA9IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9i
dWYvaW50ZXJuYWwvanNvbl9mb3JtYXRfdGVzdC5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9p
bnRlcm5hbC9qc29uX2Zvcm1hdF90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZGM5ZjQ5YTQwNzFhZDA3NzgwN2YxZGI1NmY4ODE0OTk5OWE0OTk4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9p
bnRlcm5hbC9qc29uX2Zvcm1hdF90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzY5ICswLDAg
QEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLSMKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVGVzdCBmb3IgZ29vZ2xl
LnByb3RvYnVmLmpzb25fZm9ybWF0LiIiIgotCi1fX2F1dGhvcl9fID0gJ2ppZWx1b0Bnb29nbGUu
Y29tIChKaWUgTHVvKScKLQotaW1wb3J0IGpzb24KLWltcG9ydCBtYXRoCi1pbXBvcnQgc3lzCi0K
LXRyeToKLSAgaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdCAgI1BZMjYKLWV4Y2VwdCBJbXBv
cnRFcnJvcjoKLSAgaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9y
dCBhbnlfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZHVyYXRpb25fcGIyCi1mcm9t
IGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZmllbGRfbWFza19wYjIKLWZyb20gZ29vZ2xlLnByb3Rv
YnVmIGltcG9ydCBzdHJ1Y3RfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdGltZXN0
YW1wX3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHdyYXBwZXJzX3BiMgotZnJvbSBn
b29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IHdlbGxfa25vd25fdHlwZXMKLWZyb20gZ29v
Z2xlLnByb3RvYnVmIGltcG9ydCBqc29uX2Zvcm1hdAotZnJvbSBnb29nbGUucHJvdG9idWYudXRp
bCBpbXBvcnQganNvbl9mb3JtYXRfcHJvdG8zX3BiMgotCi0KLWNsYXNzIEpzb25Gb3JtYXRCYXNl
KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgRmlsbEFsbEZpZWxkcyhzZWxmLCBtZXNzYWdl
KToKLSAgICBtZXNzYWdlLmludDMyX3ZhbHVlID0gMjAKLSAgICBtZXNzYWdlLmludDY0X3ZhbHVl
ID0gLTIwCi0gICAgbWVzc2FnZS51aW50MzJfdmFsdWUgPSAzMTIwOTg3NjU0Ci0gICAgbWVzc2Fn
ZS51aW50NjRfdmFsdWUgPSAxMjM0NTY3ODkwMAotICAgIG1lc3NhZ2UuZmxvYXRfdmFsdWUgPSBm
bG9hdCgnLWluZicpCi0gICAgbWVzc2FnZS5kb3VibGVfdmFsdWUgPSAzLjE0MTUKLSAgICBtZXNz
YWdlLmJvb2xfdmFsdWUgPSBUcnVlCi0gICAgbWVzc2FnZS5zdHJpbmdfdmFsdWUgPSAnZm9vJwot
ICAgIG1lc3NhZ2UuYnl0ZXNfdmFsdWUgPSBiJ2JhcicKLSAgICBtZXNzYWdlLm1lc3NhZ2VfdmFs
dWUudmFsdWUgPSAxMAotICAgIG1lc3NhZ2UuZW51bV92YWx1ZSA9IGpzb25fZm9ybWF0X3Byb3Rv
M19wYjIuQkFSCi0gICAgIyBSZXBlYXRlZAotICAgIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzJfdmFs
dWUuYXBwZW5kKDB4N0ZGRkZGRkYpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMl92YWx1ZS5h
cHBlbmQoLTIxNDc0ODM2NDgpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2NF92YWx1ZS5hcHBl
bmQoOTAwNzE5OTI1NDc0MDk5MikKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2ludDY0X3ZhbHVlLmFw
cGVuZCgtOTAwNzE5OTI1NDc0MDk5MikKLSAgICBtZXNzYWdlLnJlcGVhdGVkX3VpbnQzMl92YWx1
ZS5hcHBlbmQoMHhGRkZGRkZGKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfdWludDMyX3ZhbHVlLmFw
cGVuZCgweDdGRkZGRkYpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF91aW50NjRfdmFsdWUuYXBwZW5k
KDkwMDcxOTkyNTQ3NDA5OTIpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF91aW50NjRfdmFsdWUuYXBw
ZW5kKDkwMDcxOTkyNTQ3NDA5OTEpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9mbG9hdF92YWx1ZS5h
cHBlbmQoMCkKLQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlX3ZhbHVlLmFwcGVuZCgxRS0x
NSkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZV92YWx1ZS5hcHBlbmQoZmxvYXQoJ2luZicp
KQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbF92YWx1ZS5hcHBlbmQoVHJ1ZSkKLSAgICBtZXNz
YWdlLnJlcGVhdGVkX2Jvb2xfdmFsdWUuYXBwZW5kKEZhbHNlKQotICAgIG1lc3NhZ2UucmVwZWF0
ZWRfc3RyaW5nX3ZhbHVlLmFwcGVuZCgnRmV3IHN5bWJvbHMhIyQsOycpCi0gICAgbWVzc2FnZS5y
ZXBlYXRlZF9zdHJpbmdfdmFsdWUuYXBwZW5kKCdiYXInKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRf
Ynl0ZXNfdmFsdWUuYXBwZW5kKGInZm9vJykKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2J5dGVzX3Zh
bHVlLmFwcGVuZChiJ2JhcicpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9tZXNzYWdlX3ZhbHVlLmFk
ZCgpLnZhbHVlID0gMTAKLSAgICBtZXNzYWdlLnJlcGVhdGVkX21lc3NhZ2VfdmFsdWUuYWRkKCku
dmFsdWUgPSAxMQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfZW51bV92YWx1ZS5hcHBlbmQoanNvbl9m
b3JtYXRfcHJvdG8zX3BiMi5GT08pCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9lbnVtX3ZhbHVlLmFw
cGVuZChqc29uX2Zvcm1hdF9wcm90bzNfcGIyLkJBUikKLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNz
YWdlCi0KLSAgZGVmIENoZWNrUGFyc2VCYWNrKHNlbGYsIG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdl
KToKLSAgICBqc29uX2Zvcm1hdC5QYXJzZShqc29uX2Zvcm1hdC5NZXNzYWdlVG9Kc29uKG1lc3Nh
Z2UpLAotICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZF9tZXNzYWdlKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobWVzc2FnZSwgcGFyc2VkX21lc3NhZ2UpCi0KLSAgZGVmIENoZWNrRXJyb3Ioc2Vs
ZiwgdGV4dCwgZXJyb3JfbWVzc2FnZSk6Ci0gICAgbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3Rv
M19wYjIuVGVzdE1lc3NhZ2UoKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAotICAgICAg
ICBqc29uX2Zvcm1hdC5QYXJzZUVycm9yLAotICAgICAgICBlcnJvcl9tZXNzYWdlLAotICAgICAg
ICBqc29uX2Zvcm1hdC5QYXJzZSwgdGV4dCwgbWVzc2FnZSkKLQotCi1jbGFzcyBKc29uRm9ybWF0
VGVzdChKc29uRm9ybWF0QmFzZSk6Ci0KLSAgZGVmIHRlc3RFbXB0eU1lc3NhZ2VUb0pzb24oc2Vs
Zik6Ci0gICAgbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdE1lc3NhZ2UoKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbl9mb3JtYXQuTWVzc2FnZVRvSnNvbihtZXNzYWdlKSwK
LSAgICAgICAgICAgICAgICAgICAgICd7fScpCi0gICAgcGFyc2VkX21lc3NhZ2UgPSBqc29uX2Zv
cm1hdF9wcm90bzNfcGIyLlRlc3RNZXNzYWdlKCkKLSAgICBzZWxmLkNoZWNrUGFyc2VCYWNrKG1l
c3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQotCi0gIGRlZiB0ZXN0UGFydGlhbE1lc3NhZ2VUb0pzb24o
c2VsZik6Ci0gICAgbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdE1lc3NhZ2Uo
Ci0gICAgICAgIHN0cmluZ192YWx1ZT0ndGVzdCcsCi0gICAgICAgIHJlcGVhdGVkX2ludDMyX3Zh
bHVlPVs4OSwgNF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKGpzb25fZm9ybWF0
Lk1lc3NhZ2VUb0pzb24obWVzc2FnZSkpLAotICAgICAgICAgICAgICAgICAgICAganNvbi5sb2Fk
cygneyJzdHJpbmdWYWx1ZSI6ICJ0ZXN0IiwgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnInJlcGVhdGVkSW50MzJWYWx1ZSI6IFs4OSwgNF19JykpCi0gICAgcGFyc2VkX21lc3Nh
Z2UgPSBqc29uX2Zvcm1hdF9wcm90bzNfcGIyLlRlc3RNZXNzYWdlKCkKLSAgICBzZWxmLkNoZWNr
UGFyc2VCYWNrKG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQotCi0gIGRlZiB0ZXN0QWxsRmllbGRz
VG9Kc29uKHNlbGYpOgotICAgIG1lc3NhZ2UgPSBqc29uX2Zvcm1hdF9wcm90bzNfcGIyLlRlc3RN
ZXNzYWdlKCkKLSAgICB0ZXh0ID0gKCd7ImludDMyVmFsdWUiOiAyMCwgJwotICAgICAgICAgICAg
JyJpbnQ2NFZhbHVlIjogIi0yMCIsICcKLSAgICAgICAgICAgICcidWludDMyVmFsdWUiOiAzMTIw
OTg3NjU0LCcKLSAgICAgICAgICAgICcidWludDY0VmFsdWUiOiAiMTIzNDU2Nzg5MDAiLCcKLSAg
ICAgICAgICAgICciZmxvYXRWYWx1ZSI6ICItSW5maW5pdHkiLCcKLSAgICAgICAgICAgICciZG91
YmxlVmFsdWUiOiAzLjE0MTUsJwotICAgICAgICAgICAgJyJib29sVmFsdWUiOiB0cnVlLCcKLSAg
ICAgICAgICAgICcic3RyaW5nVmFsdWUiOiAiZm9vIiwnCi0gICAgICAgICAgICAnImJ5dGVzVmFs
dWUiOiAiWW1GeSIsJwotICAgICAgICAgICAgJyJtZXNzYWdlVmFsdWUiOiB7InZhbHVlIjogMTB9
LCcKLSAgICAgICAgICAgICciZW51bVZhbHVlIjogIkJBUiIsJwotICAgICAgICAgICAgJyJyZXBl
YXRlZEludDMyVmFsdWUiOiBbMjE0NzQ4MzY0NywgLTIxNDc0ODM2NDhdLCcKLSAgICAgICAgICAg
ICcicmVwZWF0ZWRJbnQ2NFZhbHVlIjogWyI5MDA3MTk5MjU0NzQwOTkyIiwgIi05MDA3MTk5MjU0
NzQwOTkyIl0sJwotICAgICAgICAgICAgJyJyZXBlYXRlZFVpbnQzMlZhbHVlIjogWzI2ODQzNTQ1
NSwgMTM0MjE3NzI3XSwnCi0gICAgICAgICAgICAnInJlcGVhdGVkVWludDY0VmFsdWUiOiBbIjkw
MDcxOTkyNTQ3NDA5OTIiLCAiOTAwNzE5OTI1NDc0MDk5MSJdLCcKLSAgICAgICAgICAgICcicmVw
ZWF0ZWRGbG9hdFZhbHVlIjogWzBdLCcKLSAgICAgICAgICAgICcicmVwZWF0ZWREb3VibGVWYWx1
ZSI6IFsxZS0xNSwgIkluZmluaXR5Il0sJwotICAgICAgICAgICAgJyJyZXBlYXRlZEJvb2xWYWx1
ZSI6IFt0cnVlLCBmYWxzZV0sJwotICAgICAgICAgICAgJyJyZXBlYXRlZFN0cmluZ1ZhbHVlIjog
WyJGZXcgc3ltYm9scyEjJCw7IiwgImJhciJdLCcKLSAgICAgICAgICAgICcicmVwZWF0ZWRCeXRl
c1ZhbHVlIjogWyJabTl2IiwgIlltRnkiXSwnCi0gICAgICAgICAgICAnInJlcGVhdGVkTWVzc2Fn
ZVZhbHVlIjogW3sidmFsdWUiOiAxMH0sIHsidmFsdWUiOiAxMX1dLCcKLSAgICAgICAgICAgICci
cmVwZWF0ZWRFbnVtVmFsdWUiOiBbIkZPTyIsICJCQVIiXScKLSAgICAgICAgICAgICd9JykKLSAg
ICBzZWxmLkZpbGxBbGxGaWVsZHMobWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAg
ICAgICBqc29uLmxvYWRzKGpzb25fZm9ybWF0Lk1lc3NhZ2VUb0pzb24obWVzc2FnZSkpLAotICAg
ICAgICBqc29uLmxvYWRzKHRleHQpKQotICAgIHBhcnNlZF9tZXNzYWdlID0ganNvbl9mb3JtYXRf
cHJvdG8zX3BiMi5UZXN0TWVzc2FnZSgpCi0gICAganNvbl9mb3JtYXQuUGFyc2UodGV4dCwgcGFy
c2VkX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCBwYXJzZWRfbWVzc2Fn
ZSkKLQotICBkZWYgdGVzdEpzb25Fc2NhcGVTdHJpbmcoc2VsZik6Ci0gICAgbWVzc2FnZSA9IGpz
b25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdE1lc3NhZ2UoKQotICAgIGlmIHN5cy52ZXJzaW9uX2lu
Zm9bMF0gPCAzOgotICAgICAgbWVzc2FnZS5zdHJpbmdfdmFsdWUgPSAnJlxuPFwiXHI+XGJcdFxm
XFxcMDAxL1x4ZTJceDgwXHhhOFx4ZTJceDgwXHhhOScKLSAgICBlbHNlOgotICAgICAgbWVzc2Fn
ZS5zdHJpbmdfdmFsdWUgPSAnJlxuPFwiXHI+XGJcdFxmXFxcMDAxLycKLSAgICAgIG1lc3NhZ2Uu
c3RyaW5nX3ZhbHVlICs9IChiJ1x4ZTJceDgwXHhhOFx4ZTJceDgwXHhhOScpLmRlY29kZSgndXRm
LTgnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGpzb25fZm9ybWF0Lk1lc3NhZ2VU
b0pzb24obWVzc2FnZSksCi0gICAgICAgICd7XG4gICJzdHJpbmdWYWx1ZSI6ICcKLSAgICAgICAg
JyImXFxuPFxcXCJcXHI+XFxiXFx0XFxmXFxcXFxcdTAwMDEvXFx1MjAyOFxcdTIwMjkiXG59JykK
LSAgICBwYXJzZWRfbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdE1lc3NhZ2Uo
KQotICAgIHNlbGYuQ2hlY2tQYXJzZUJhY2sobWVzc2FnZSwgcGFyc2VkX21lc3NhZ2UpCi0gICAg
dGV4dCA9IHUneyJpbnQzMlZhbHVlIjogIlx1MDAzMSJ9JwotICAgIGpzb25fZm9ybWF0LlBhcnNl
KHRleHQsIG1lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLmludDMyX3ZhbHVl
LCAxKQotCi0gIGRlZiB0ZXN0QWx3YXlzU2VyaWxpYXplKHNlbGYpOgotICAgIG1lc3NhZ2UgPSBq
c29uX2Zvcm1hdF9wcm90bzNfcGIyLlRlc3RNZXNzYWdlKAotICAgICAgICBzdHJpbmdfdmFsdWU9
J2ZvbycpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAganNvbi5sb2Fkcyhqc29uX2Zv
cm1hdC5NZXNzYWdlVG9Kc29uKG1lc3NhZ2UsIFRydWUpKSwKLSAgICAgICAganNvbi5sb2Fkcygn
eycKLSAgICAgICAgICAgICAgICAgICAnInJlcGVhdGVkU3RyaW5nVmFsdWUiOiBbXSwnCi0gICAg
ICAgICAgICAgICAgICAgJyJzdHJpbmdWYWx1ZSI6ICJmb28iLCcKLSAgICAgICAgICAgICAgICAg
ICAnInJlcGVhdGVkQm9vbFZhbHVlIjogW10sJwotICAgICAgICAgICAgICAgICAgICcicmVwZWF0
ZWRVaW50MzJWYWx1ZSI6IFtdLCcKLSAgICAgICAgICAgICAgICAgICAnInJlcGVhdGVkSW50MzJW
YWx1ZSI6IFtdLCcKLSAgICAgICAgICAgICAgICAgICAnImVudW1WYWx1ZSI6ICJGT08iLCcKLSAg
ICAgICAgICAgICAgICAgICAnImludDMyVmFsdWUiOiAwLCcKLSAgICAgICAgICAgICAgICAgICAn
ImZsb2F0VmFsdWUiOiAwLCcKLSAgICAgICAgICAgICAgICAgICAnImludDY0VmFsdWUiOiAiMCIs
JwotICAgICAgICAgICAgICAgICAgICcidWludDMyVmFsdWUiOiAwLCcKLSAgICAgICAgICAgICAg
ICAgICAnInJlcGVhdGVkQnl0ZXNWYWx1ZSI6IFtdLCcKLSAgICAgICAgICAgICAgICAgICAnInJl
cGVhdGVkVWludDY0VmFsdWUiOiBbXSwnCi0gICAgICAgICAgICAgICAgICAgJyJyZXBlYXRlZERv
dWJsZVZhbHVlIjogW10sJwotICAgICAgICAgICAgICAgICAgICciYnl0ZXNWYWx1ZSI6ICIiLCcK
LSAgICAgICAgICAgICAgICAgICAnImJvb2xWYWx1ZSI6IGZhbHNlLCcKLSAgICAgICAgICAgICAg
ICAgICAnInJlcGVhdGVkRW51bVZhbHVlIjogW10sJwotICAgICAgICAgICAgICAgICAgICcidWlu
dDY0VmFsdWUiOiAiMCIsJwotICAgICAgICAgICAgICAgICAgICciZG91YmxlVmFsdWUiOiAwLCcK
LSAgICAgICAgICAgICAgICAgICAnInJlcGVhdGVkRmxvYXRWYWx1ZSI6IFtdLCcKLSAgICAgICAg
ICAgICAgICAgICAnInJlcGVhdGVkSW50NjRWYWx1ZSI6IFtdLCcKLSAgICAgICAgICAgICAgICAg
ICAnInJlcGVhdGVkTWVzc2FnZVZhbHVlIjogW119JykpCi0gICAgcGFyc2VkX21lc3NhZ2UgPSBq
c29uX2Zvcm1hdF9wcm90bzNfcGIyLlRlc3RNZXNzYWdlKCkKLSAgICBzZWxmLkNoZWNrUGFyc2VC
YWNrKG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQotCi0gIGRlZiB0ZXN0TWFwRmllbGRzKHNlbGYp
OgotICAgIG1lc3NhZ2UgPSBqc29uX2Zvcm1hdF9wcm90bzNfcGIyLlRlc3RNYXAoKQotICAgIG1l
c3NhZ2UuYm9vbF9tYXBbVHJ1ZV0gPSAxCi0gICAgbWVzc2FnZS5ib29sX21hcFtGYWxzZV0gPSAy
Ci0gICAgbWVzc2FnZS5pbnQzMl9tYXBbMV0gPSAyCi0gICAgbWVzc2FnZS5pbnQzMl9tYXBbMl0g
PSAzCi0gICAgbWVzc2FnZS5pbnQ2NF9tYXBbMV0gPSAyCi0gICAgbWVzc2FnZS5pbnQ2NF9tYXBb
Ml0gPSAzCi0gICAgbWVzc2FnZS51aW50MzJfbWFwWzFdID0gMgotICAgIG1lc3NhZ2UudWludDMy
X21hcFsyXSA9IDMKLSAgICBtZXNzYWdlLnVpbnQ2NF9tYXBbMV0gPSAyCi0gICAgbWVzc2FnZS51
aW50NjRfbWFwWzJdID0gMwotICAgIG1lc3NhZ2Uuc3RyaW5nX21hcFsnMSddID0gMgotICAgIG1l
c3NhZ2Uuc3RyaW5nX21hcFsnbnVsbCddID0gMwotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAg
ICAgIGpzb24ubG9hZHMoanNvbl9mb3JtYXQuTWVzc2FnZVRvSnNvbihtZXNzYWdlLCBUcnVlKSks
Ci0gICAgICAgIGpzb24ubG9hZHMoJ3snCi0gICAgICAgICAgICAgICAgICAgJyJib29sTWFwIjog
eyJmYWxzZSI6IDIsICJ0cnVlIjogMX0sJwotICAgICAgICAgICAgICAgICAgICciaW50MzJNYXAi
OiB7IjEiOiAyLCAiMiI6IDN9LCcKLSAgICAgICAgICAgICAgICAgICAnImludDY0TWFwIjogeyIx
IjogMiwgIjIiOiAzfSwnCi0gICAgICAgICAgICAgICAgICAgJyJ1aW50MzJNYXAiOiB7IjEiOiAy
LCAiMiI6IDN9LCcKLSAgICAgICAgICAgICAgICAgICAnInVpbnQ2NE1hcCI6IHsiMSI6IDIsICIy
IjogM30sJwotICAgICAgICAgICAgICAgICAgICcic3RyaW5nTWFwIjogeyIxIjogMiwgIm51bGwi
OiAzfScKLSAgICAgICAgICAgICAgICAgICAnfScpKQotICAgIHBhcnNlZF9tZXNzYWdlID0ganNv
bl9mb3JtYXRfcHJvdG8zX3BiMi5UZXN0TWFwKCkKLSAgICBzZWxmLkNoZWNrUGFyc2VCYWNrKG1l
c3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQotCi0gIGRlZiB0ZXN0T25lb2ZGaWVsZHMoc2VsZik6Ci0g
ICAgbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdE9uZW9mKCkKLSAgICAjIEFs
d2F5cyBwcmludCBkb2VzIG5vdCBhZmZlY3Qgb25lb2YgZmllbGRzLgotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoCi0gICAgICAgIGpzb25fZm9ybWF0Lk1lc3NhZ2VUb0pzb24obWVzc2FnZSwgVHJ1ZSks
Ci0gICAgICAgICd7fScpCi0gICAgbWVzc2FnZS5vbmVvZl9pbnQzMl92YWx1ZSA9IDAKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBqc29uX2Zvcm1hdC5NZXNzYWdlVG9Kc29uKG1lc3Nh
Z2UsIFRydWUpLAotICAgICAgICAne1xuJwotICAgICAgICAnICAib25lb2ZJbnQzMlZhbHVlIjog
MFxuJwotICAgICAgICAnfScpCi0gICAgcGFyc2VkX21lc3NhZ2UgPSBqc29uX2Zvcm1hdF9wcm90
bzNfcGIyLlRlc3RPbmVvZigpCi0gICAgc2VsZi5DaGVja1BhcnNlQmFjayhtZXNzYWdlLCBwYXJz
ZWRfbWVzc2FnZSkKLQotICBkZWYgdGVzdFRpbWVzdGFtcE1lc3NhZ2Uoc2VsZik6Ci0gICAgbWVz
c2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdFRpbWVzdGFtcCgpCi0gICAgbWVzc2Fn
ZS52YWx1ZS5zZWNvbmRzID0gMAotICAgIG1lc3NhZ2UudmFsdWUubmFub3MgPSAwCi0gICAgbWVz
c2FnZS5yZXBlYXRlZF92YWx1ZS5hZGQoKS5zZWNvbmRzID0gMjAKLSAgICBtZXNzYWdlLnJlcGVh
dGVkX3ZhbHVlWzBdLm5hbm9zID0gMQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfdmFsdWUuYWRkKCku
c2Vjb25kcyA9IDAKLSAgICBtZXNzYWdlLnJlcGVhdGVkX3ZhbHVlWzFdLm5hbm9zID0gMTAwMDAK
LSAgICBtZXNzYWdlLnJlcGVhdGVkX3ZhbHVlLmFkZCgpLnNlY29uZHMgPSAxMDAwMDAwMDAKLSAg
ICBtZXNzYWdlLnJlcGVhdGVkX3ZhbHVlWzJdLm5hbm9zID0gMAotICAgICMgTWF4aW11bSB0aW1l
Ci0gICAgbWVzc2FnZS5yZXBlYXRlZF92YWx1ZS5hZGQoKS5zZWNvbmRzID0gMjUzNDAyMzAwNzk5
Ci0gICAgbWVzc2FnZS5yZXBlYXRlZF92YWx1ZVszXS5uYW5vcyA9IDk5OTk5OTk5OQotICAgICMg
TWluaW11bSB0aW1lCi0gICAgbWVzc2FnZS5yZXBlYXRlZF92YWx1ZS5hZGQoKS5zZWNvbmRzID0g
LTYyMTM1NTk2ODAwCi0gICAgbWVzc2FnZS5yZXBlYXRlZF92YWx1ZVs0XS5uYW5vcyA9IDAKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBqc29uLmxvYWRzKGpzb25fZm9ybWF0Lk1lc3Nh
Z2VUb0pzb24obWVzc2FnZSwgVHJ1ZSkpLAotICAgICAgICBqc29uLmxvYWRzKCd7JwotICAgICAg
ICAgICAgICAgICAgICcidmFsdWUiOiAiMTk3MC0wMS0wMVQwMDowMDowMFoiLCcKLSAgICAgICAg
ICAgICAgICAgICAnInJlcGVhdGVkVmFsdWUiOiBbJwotICAgICAgICAgICAgICAgICAgICcgICIx
OTcwLTAxLTAxVDAwOjAwOjIwLjAwMDAwMDAwMVoiLCcKLSAgICAgICAgICAgICAgICAgICAnICAi
MTk3MC0wMS0wMVQwMDowMDowMC4wMDAwMTBaIiwnCi0gICAgICAgICAgICAgICAgICAgJyAgIjE5
NzMtMDMtMDNUMDk6NDY6NDBaIiwnCi0gICAgICAgICAgICAgICAgICAgJyAgIjk5OTktMTItMzFU
MjM6NTk6NTkuOTk5OTk5OTk5WiIsJwotICAgICAgICAgICAgICAgICAgICcgICIwMDAxLTAxLTAx
VDAwOjAwOjAwWiInCi0gICAgICAgICAgICAgICAgICAgJ10nCi0gICAgICAgICAgICAgICAgICAg
J30nKSkKLSAgICBwYXJzZWRfbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdFRp
bWVzdGFtcCgpCi0gICAgc2VsZi5DaGVja1BhcnNlQmFjayhtZXNzYWdlLCBwYXJzZWRfbWVzc2Fn
ZSkKLSAgICB0ZXh0ID0gKHIneyJ2YWx1ZSI6ICIxOTcwLTAxLTAxVDAwOjAwOjAwLjAxKzA4OjAw
IiwnCi0gICAgICAgICAgICByJyJyZXBlYXRlZFZhbHVlIjpbJwotICAgICAgICAgICAgcicgICIx
OTcwLTAxLTAxVDAwOjAwOjAwLjAxKzA4OjMwIiwnCi0gICAgICAgICAgICByJyAgIjE5NzAtMDEt
MDFUMDA6MDA6MDAuMDEtMDE6MjMiXX0nKQotICAgIGpzb25fZm9ybWF0LlBhcnNlKHRleHQsIHBh
cnNlZF9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VkX21lc3NhZ2UudmFsdWUu
c2Vjb25kcywgLTggKiAzNjAwKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VkX21lc3NhZ2Uu
dmFsdWUubmFub3MsIDEwMDAwMDAwKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VkX21lc3Nh
Z2UucmVwZWF0ZWRfdmFsdWVbMF0uc2Vjb25kcywgLTguNSAqIDM2MDApCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChwYXJzZWRfbWVzc2FnZS5yZXBlYXRlZF92YWx1ZVsxXS5zZWNvbmRzLCAzNjAwICsg
MjMgKiA2MCkKLQotICBkZWYgdGVzdER1cmF0aW9uTWVzc2FnZShzZWxmKToKLSAgICBtZXNzYWdl
ID0ganNvbl9mb3JtYXRfcHJvdG8zX3BiMi5UZXN0RHVyYXRpb24oKQotICAgIG1lc3NhZ2UudmFs
dWUuc2Vjb25kcyA9IDEKLSAgICBtZXNzYWdlLnJlcGVhdGVkX3ZhbHVlLmFkZCgpLnNlY29uZHMg
PSAwCi0gICAgbWVzc2FnZS5yZXBlYXRlZF92YWx1ZVswXS5uYW5vcyA9IDEwCi0gICAgbWVzc2Fn
ZS5yZXBlYXRlZF92YWx1ZS5hZGQoKS5zZWNvbmRzID0gLTEKLSAgICBtZXNzYWdlLnJlcGVhdGVk
X3ZhbHVlWzFdLm5hbm9zID0gLTEwMDAKLSAgICBtZXNzYWdlLnJlcGVhdGVkX3ZhbHVlLmFkZCgp
LnNlY29uZHMgPSAxMAotICAgIG1lc3NhZ2UucmVwZWF0ZWRfdmFsdWVbMl0ubmFub3MgPSAxMTAw
MDAwMAotICAgIG1lc3NhZ2UucmVwZWF0ZWRfdmFsdWUuYWRkKCkuc2Vjb25kcyA9IC0zMTU1NzYw
MDAwMDAKLSAgICBtZXNzYWdlLnJlcGVhdGVkX3ZhbHVlLmFkZCgpLnNlY29uZHMgPSAzMTU1NzYw
MDAwMDAKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBqc29uLmxvYWRzKGpzb25fZm9y
bWF0Lk1lc3NhZ2VUb0pzb24obWVzc2FnZSwgVHJ1ZSkpLAotICAgICAgICBqc29uLmxvYWRzKCd7
JwotICAgICAgICAgICAgICAgICAgICcidmFsdWUiOiAiMXMiLCcKLSAgICAgICAgICAgICAgICAg
ICAnInJlcGVhdGVkVmFsdWUiOiBbJwotICAgICAgICAgICAgICAgICAgICcgICIwLjAwMDAwMDAx
MHMiLCcKLSAgICAgICAgICAgICAgICAgICAnICAiLTEuMDAwMDAxcyIsJwotICAgICAgICAgICAg
ICAgICAgICcgICIxMC4wMTFzIiwnCi0gICAgICAgICAgICAgICAgICAgJyAgIi0zMTU1NzYwMDAw
MDBzIiwnCi0gICAgICAgICAgICAgICAgICAgJyAgIjMxNTU3NjAwMDAwMHMiJwotICAgICAgICAg
ICAgICAgICAgICddJwotICAgICAgICAgICAgICAgICAgICd9JykpCi0gICAgcGFyc2VkX21lc3Nh
Z2UgPSBqc29uX2Zvcm1hdF9wcm90bzNfcGIyLlRlc3REdXJhdGlvbigpCi0gICAgc2VsZi5DaGVj
a1BhcnNlQmFjayhtZXNzYWdlLCBwYXJzZWRfbWVzc2FnZSkKLQotICBkZWYgdGVzdEZpZWxkTWFz
a01lc3NhZ2Uoc2VsZik6Ci0gICAgbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVz
dEZpZWxkTWFzaygpCi0gICAgbWVzc2FnZS52YWx1ZS5wYXRocy5hcHBlbmQoJ2Zvby5iYXInKQot
ICAgIG1lc3NhZ2UudmFsdWUucGF0aHMuYXBwZW5kKCdiYXInKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoCi0gICAgICAgIGpzb25fZm9ybWF0Lk1lc3NhZ2VUb0pzb24obWVzc2FnZSwgVHJ1ZSksCi0g
ICAgICAgICd7XG4nCi0gICAgICAgICcgICJ2YWx1ZSI6ICJmb28uYmFyLGJhciJcbicKLSAgICAg
ICAgJ30nKQotICAgIHBhcnNlZF9tZXNzYWdlID0ganNvbl9mb3JtYXRfcHJvdG8zX3BiMi5UZXN0
RmllbGRNYXNrKCkKLSAgICBzZWxmLkNoZWNrUGFyc2VCYWNrKG1lc3NhZ2UsIHBhcnNlZF9tZXNz
YWdlKQotCi0gIGRlZiB0ZXN0V3JhcHBlck1lc3NhZ2Uoc2VsZik6Ci0gICAgbWVzc2FnZSA9IGpz
b25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdFdyYXBwZXIoKQotICAgIG1lc3NhZ2UuYm9vbF92YWx1
ZS52YWx1ZSA9IEZhbHNlCi0gICAgbWVzc2FnZS5pbnQzMl92YWx1ZS52YWx1ZSA9IDAKLSAgICBt
ZXNzYWdlLnN0cmluZ192YWx1ZS52YWx1ZSA9ICcnCi0gICAgbWVzc2FnZS5ieXRlc192YWx1ZS52
YWx1ZSA9IGInJwotICAgIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbF92YWx1ZS5hZGQoKS52YWx1ZSA9
IFRydWUKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2Jvb2xfdmFsdWUuYWRkKCkudmFsdWUgPSBGYWxz
ZQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzJfdmFsdWUuYWRkKCkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKAotICAgICAgICBqc29uLmxvYWRzKGpzb25fZm9ybWF0Lk1lc3NhZ2VUb0pzb24obWVz
c2FnZSwgVHJ1ZSkpLAotICAgICAgICBqc29uLmxvYWRzKCd7XG4nCi0gICAgICAgICAgICAgICAg
ICAgJyAgImludDMyVmFsdWUiOiAwLCcKLSAgICAgICAgICAgICAgICAgICAnICAiYm9vbFZhbHVl
IjogZmFsc2UsJwotICAgICAgICAgICAgICAgICAgICcgICJzdHJpbmdWYWx1ZSI6ICIiLCcKLSAg
ICAgICAgICAgICAgICAgICAnICAiYnl0ZXNWYWx1ZSI6ICIiLCcKLSAgICAgICAgICAgICAgICAg
ICAnICAicmVwZWF0ZWRCb29sVmFsdWUiOiBbdHJ1ZSwgZmFsc2VdLCcKLSAgICAgICAgICAgICAg
ICAgICAnICAicmVwZWF0ZWRJbnQzMlZhbHVlIjogWzBdLCcKLSAgICAgICAgICAgICAgICAgICAn
ICAicmVwZWF0ZWRVaW50MzJWYWx1ZSI6IFtdLCcKLSAgICAgICAgICAgICAgICAgICAnICAicmVw
ZWF0ZWRGbG9hdFZhbHVlIjogW10sJwotICAgICAgICAgICAgICAgICAgICcgICJyZXBlYXRlZERv
dWJsZVZhbHVlIjogW10sJwotICAgICAgICAgICAgICAgICAgICcgICJyZXBlYXRlZEJ5dGVzVmFs
dWUiOiBbXSwnCi0gICAgICAgICAgICAgICAgICAgJyAgInJlcGVhdGVkSW50NjRWYWx1ZSI6IFtd
LCcKLSAgICAgICAgICAgICAgICAgICAnICAicmVwZWF0ZWRVaW50NjRWYWx1ZSI6IFtdLCcKLSAg
ICAgICAgICAgICAgICAgICAnICAicmVwZWF0ZWRTdHJpbmdWYWx1ZSI6IFtdJwotICAgICAgICAg
ICAgICAgICAgICd9JykpCi0gICAgcGFyc2VkX21lc3NhZ2UgPSBqc29uX2Zvcm1hdF9wcm90bzNf
cGIyLlRlc3RXcmFwcGVyKCkKLSAgICBzZWxmLkNoZWNrUGFyc2VCYWNrKG1lc3NhZ2UsIHBhcnNl
ZF9tZXNzYWdlKQotCi0gIGRlZiB0ZXN0U3RydWN0TWVzc2FnZShzZWxmKToKLSAgICBtZXNzYWdl
ID0ganNvbl9mb3JtYXRfcHJvdG8zX3BiMi5UZXN0U3RydWN0KCkKLSAgICBtZXNzYWdlLnZhbHVl
WyduYW1lJ10gPSAnSmltJwotICAgIG1lc3NhZ2UudmFsdWVbJ2FnZSddID0gMTAKLSAgICBtZXNz
YWdlLnZhbHVlWydhdHRlbmQnXSA9IFRydWUKLSAgICBtZXNzYWdlLnZhbHVlWydlbWFpbCddID0g
Tm9uZQotICAgIG1lc3NhZ2UudmFsdWUuZ2V0X29yX2NyZWF0ZV9zdHJ1Y3QoJ2FkZHJlc3MnKVsn
Y2l0eSddID0gJ1NGTycKLSAgICBtZXNzYWdlLnZhbHVlWydhZGRyZXNzJ11bJ2hvdXNlX251bWJl
ciddID0gMTAyNAotICAgIHN0cnVjdF9saXN0ID0gbWVzc2FnZS52YWx1ZS5nZXRfb3JfY3JlYXRl
X2xpc3QoJ2xpc3QnKQotICAgIHN0cnVjdF9saXN0LmV4dGVuZChbNiwgJ3NldmVuJywgVHJ1ZSwg
RmFsc2UsIE5vbmVdKQotICAgIHN0cnVjdF9saXN0LmFkZF9zdHJ1Y3QoKVsnc3Via2V5MiddID0g
OQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfdmFsdWUuYWRkKClbJ2FnZSddID0gMTEKLSAgICBtZXNz
YWdlLnJlcGVhdGVkX3ZhbHVlLmFkZCgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAg
anNvbi5sb2Fkcyhqc29uX2Zvcm1hdC5NZXNzYWdlVG9Kc29uKG1lc3NhZ2UsIEZhbHNlKSksCi0g
ICAgICAgIGpzb24ubG9hZHMoCi0gICAgICAgICAgICAneycKLSAgICAgICAgICAgICcgICJ2YWx1
ZSI6IHsnCi0gICAgICAgICAgICAnICAgICJhZGRyZXNzIjogeycKLSAgICAgICAgICAgICcgICAg
ICAiY2l0eSI6ICJTRk8iLCAnCi0gICAgICAgICAgICAnICAgICAgImhvdXNlX251bWJlciI6IDEw
MjQnCi0gICAgICAgICAgICAnICAgIH0sICcKLSAgICAgICAgICAgICcgICAgImFnZSI6IDEwLCAn
Ci0gICAgICAgICAgICAnICAgICJuYW1lIjogIkppbSIsICcKLSAgICAgICAgICAgICcgICAgImF0
dGVuZCI6IHRydWUsICcKLSAgICAgICAgICAgICcgICAgImVtYWlsIjogbnVsbCwgJwotICAgICAg
ICAgICAgJyAgICAibGlzdCI6IFs2LCAic2V2ZW4iLCB0cnVlLCBmYWxzZSwgbnVsbCwgeyJzdWJr
ZXkyIjogOX1dJwotICAgICAgICAgICAgJyAgfSwnCi0gICAgICAgICAgICAnICAicmVwZWF0ZWRW
YWx1ZSI6IFt7ImFnZSI6IDExfSwge31dJwotICAgICAgICAgICAgJ30nKSkKLSAgICBwYXJzZWRf
bWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdFN0cnVjdCgpCi0gICAgc2VsZi5D
aGVja1BhcnNlQmFjayhtZXNzYWdlLCBwYXJzZWRfbWVzc2FnZSkKLQotICBkZWYgdGVzdFZhbHVl
TWVzc2FnZShzZWxmKToKLSAgICBtZXNzYWdlID0ganNvbl9mb3JtYXRfcHJvdG8zX3BiMi5UZXN0
VmFsdWUoKQotICAgIG1lc3NhZ2UudmFsdWUuc3RyaW5nX3ZhbHVlID0gJ2hlbGxvJwotICAgIG1l
c3NhZ2UucmVwZWF0ZWRfdmFsdWUuYWRkKCkubnVtYmVyX3ZhbHVlID0gMTEuMQotICAgIG1lc3Nh
Z2UucmVwZWF0ZWRfdmFsdWUuYWRkKCkuYm9vbF92YWx1ZSA9IEZhbHNlCi0gICAgbWVzc2FnZS5y
ZXBlYXRlZF92YWx1ZS5hZGQoKS5udWxsX3ZhbHVlID0gMAotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Ci0gICAgICAgIGpzb24ubG9hZHMoanNvbl9mb3JtYXQuTWVzc2FnZVRvSnNvbihtZXNzYWdlLCBG
YWxzZSkpLAotICAgICAgICBqc29uLmxvYWRzKAotICAgICAgICAgICAgJ3snCi0gICAgICAgICAg
ICAnICAidmFsdWUiOiAiaGVsbG8iLCcKLSAgICAgICAgICAgICcgICJyZXBlYXRlZFZhbHVlIjog
WzExLjEsIGZhbHNlLCBudWxsXScKLSAgICAgICAgICAgICd9JykpCi0gICAgcGFyc2VkX21lc3Nh
Z2UgPSBqc29uX2Zvcm1hdF9wcm90bzNfcGIyLlRlc3RWYWx1ZSgpCi0gICAgc2VsZi5DaGVja1Bh
cnNlQmFjayhtZXNzYWdlLCBwYXJzZWRfbWVzc2FnZSkKLSAgICAjIENhbid0IHBhcnNlIGJhY2sg
aWYgdGhlIFZhbHVlIG1lc3NhZ2UgaXMgbm90IHNldC4KLSAgICBtZXNzYWdlLnJlcGVhdGVkX3Zh
bHVlLmFkZCgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAganNvbi5sb2Fkcyhqc29u
X2Zvcm1hdC5NZXNzYWdlVG9Kc29uKG1lc3NhZ2UsIEZhbHNlKSksCi0gICAgICAgIGpzb24ubG9h
ZHMoCi0gICAgICAgICAgICAneycKLSAgICAgICAgICAgICcgICJ2YWx1ZSI6ICJoZWxsbyIsJwot
ICAgICAgICAgICAgJyAgInJlcGVhdGVkVmFsdWUiOiBbMTEuMSwgZmFsc2UsIG51bGwsIG51bGxd
JwotICAgICAgICAgICAgJ30nKSkKLQotICBkZWYgdGVzdExpc3RWYWx1ZU1lc3NhZ2Uoc2VsZik6
Ci0gICAgbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdExpc3RWYWx1ZSgpCi0g
ICAgbWVzc2FnZS52YWx1ZS52YWx1ZXMuYWRkKCkubnVtYmVyX3ZhbHVlID0gMTEuMQotICAgIG1l
c3NhZ2UudmFsdWUudmFsdWVzLmFkZCgpLm51bGxfdmFsdWUgPSAwCi0gICAgbWVzc2FnZS52YWx1
ZS52YWx1ZXMuYWRkKCkuYm9vbF92YWx1ZSA9IFRydWUKLSAgICBtZXNzYWdlLnZhbHVlLnZhbHVl
cy5hZGQoKS5zdHJpbmdfdmFsdWUgPSAnaGVsbG8nCi0gICAgbWVzc2FnZS52YWx1ZS52YWx1ZXMu
YWRkKCkuc3RydWN0X3ZhbHVlWyduYW1lJ10gPSAnSmltJwotICAgIG1lc3NhZ2UucmVwZWF0ZWRf
dmFsdWUuYWRkKCkudmFsdWVzLmFkZCgpLm51bWJlcl92YWx1ZSA9IDEKLSAgICBtZXNzYWdlLnJl
cGVhdGVkX3ZhbHVlLmFkZCgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAganNvbi5s
b2Fkcyhqc29uX2Zvcm1hdC5NZXNzYWdlVG9Kc29uKG1lc3NhZ2UsIEZhbHNlKSksCi0gICAgICAg
IGpzb24ubG9hZHMoCi0gICAgICAgICAgICAneyJ2YWx1ZSI6IFsxMS4xLCBudWxsLCB0cnVlLCAi
aGVsbG8iLCB7Im5hbWUiOiAiSmltIn1dXG4sJwotICAgICAgICAgICAgJyJyZXBlYXRlZFZhbHVl
IjogW1sxXSwgW11dfScpKQotICAgIHBhcnNlZF9tZXNzYWdlID0ganNvbl9mb3JtYXRfcHJvdG8z
X3BiMi5UZXN0TGlzdFZhbHVlKCkKLSAgICBzZWxmLkNoZWNrUGFyc2VCYWNrKG1lc3NhZ2UsIHBh
cnNlZF9tZXNzYWdlKQotCi0gIGRlZiB0ZXN0QW55TWVzc2FnZShzZWxmKToKLSAgICBtZXNzYWdl
ID0ganNvbl9mb3JtYXRfcHJvdG8zX3BiMi5UZXN0QW55KCkKLSAgICB2YWx1ZTEgPSBqc29uX2Zv
cm1hdF9wcm90bzNfcGIyLk1lc3NhZ2VUeXBlKCkKLSAgICB2YWx1ZTIgPSBqc29uX2Zvcm1hdF9w
cm90bzNfcGIyLk1lc3NhZ2VUeXBlKCkKLSAgICB2YWx1ZTEudmFsdWUgPSAxMjM0Ci0gICAgdmFs
dWUyLnZhbHVlID0gNTY3OAotICAgIG1lc3NhZ2UudmFsdWUuUGFjayh2YWx1ZTEpCi0gICAgbWVz
c2FnZS5yZXBlYXRlZF92YWx1ZS5hZGQoKS5QYWNrKHZhbHVlMSkKLSAgICBtZXNzYWdlLnJlcGVh
dGVkX3ZhbHVlLmFkZCgpLlBhY2sodmFsdWUyKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfdmFsdWUu
YWRkKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBqc29uLmxvYWRzKGpzb25fZm9y
bWF0Lk1lc3NhZ2VUb0pzb24obWVzc2FnZSwgVHJ1ZSkpLAotICAgICAgICBqc29uLmxvYWRzKAot
ICAgICAgICAgICAgJ3tcbicKLSAgICAgICAgICAgICcgICJyZXBlYXRlZFZhbHVlIjogWyB7XG4n
Ci0gICAgICAgICAgICAnICAgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvMy5N
ZXNzYWdlVHlwZSIsXG4nCi0gICAgICAgICAgICAnICAgICJ2YWx1ZSI6IDEyMzRcbicKLSAgICAg
ICAgICAgICcgIH0sIHtcbicKLSAgICAgICAgICAgICcgICAgIkB0eXBlIjogInR5cGUuZ29vZ2xl
YXBpcy5jb20vcHJvdG8zLk1lc3NhZ2VUeXBlIixcbicKLSAgICAgICAgICAgICcgICAgInZhbHVl
IjogNTY3OFxuJwotICAgICAgICAgICAgJyAgfSxcbicKLSAgICAgICAgICAgICcgIHt9XSxcbicK
LSAgICAgICAgICAgICcgICJ2YWx1ZSI6IHtcbicKLSAgICAgICAgICAgICcgICAgIkB0eXBlIjog
InR5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG8zLk1lc3NhZ2VUeXBlIixcbicKLSAgICAgICAgICAg
ICcgICAgInZhbHVlIjogMTIzNFxuJwotICAgICAgICAgICAgJyAgfVxuJwotICAgICAgICAgICAg
J31cbicpKQotICAgIHBhcnNlZF9tZXNzYWdlID0ganNvbl9mb3JtYXRfcHJvdG8zX3BiMi5UZXN0
QW55KCkKLSAgICBzZWxmLkNoZWNrUGFyc2VCYWNrKG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQot
Ci0gIGRlZiB0ZXN0V2VsbEtub3duSW5BbnlNZXNzYWdlKHNlbGYpOgotICAgIG1lc3NhZ2UgPSBh
bnlfcGIyLkFueSgpCi0gICAgaW50MzJfdmFsdWUgPSB3cmFwcGVyc19wYjIuSW50MzJWYWx1ZSgp
Ci0gICAgaW50MzJfdmFsdWUudmFsdWUgPSAxMjM0Ci0gICAgbWVzc2FnZS5QYWNrKGludDMyX3Zh
bHVlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGpzb24ubG9hZHMoanNvbl9mb3Jt
YXQuTWVzc2FnZVRvSnNvbihtZXNzYWdlLCBUcnVlKSksCi0gICAgICAgIGpzb24ubG9hZHMoCi0g
ICAgICAgICAgICAne1xuJwotICAgICAgICAgICAgJyAgIkB0eXBlIjogXCJ0eXBlLmdvb2dsZWFw
aXMuY29tL2dvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlXCIsXG4nCi0gICAgICAgICAgICAnICAi
dmFsdWUiOiAxMjM0XG4nCi0gICAgICAgICAgICAnfVxuJykpCi0gICAgcGFyc2VkX21lc3NhZ2Ug
PSBhbnlfcGIyLkFueSgpCi0gICAgc2VsZi5DaGVja1BhcnNlQmFjayhtZXNzYWdlLCBwYXJzZWRf
bWVzc2FnZSkKLQotICAgIHRpbWVzdGFtcCA9IHRpbWVzdGFtcF9wYjIuVGltZXN0YW1wKCkKLSAg
ICBtZXNzYWdlLlBhY2sodGltZXN0YW1wKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAg
IGpzb24ubG9hZHMoanNvbl9mb3JtYXQuTWVzc2FnZVRvSnNvbihtZXNzYWdlLCBUcnVlKSksCi0g
ICAgICAgIGpzb24ubG9hZHMoCi0gICAgICAgICAgICAne1xuJwotICAgICAgICAgICAgJyAgIkB0
eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIsXG4n
Ci0gICAgICAgICAgICAnICAidmFsdWUiOiAiMTk3MC0wMS0wMVQwMDowMDowMFoiXG4nCi0gICAg
ICAgICAgICAnfVxuJykpCi0gICAgc2VsZi5DaGVja1BhcnNlQmFjayhtZXNzYWdlLCBwYXJzZWRf
bWVzc2FnZSkKLQotICAgIGR1cmF0aW9uID0gZHVyYXRpb25fcGIyLkR1cmF0aW9uKCkKLSAgICBk
dXJhdGlvbi5zZWNvbmRzID0gMQotICAgIG1lc3NhZ2UuUGFjayhkdXJhdGlvbikKLSAgICBzZWxm
LmFzc2VydEVxdWFsKAotICAgICAgICBqc29uLmxvYWRzKGpzb25fZm9ybWF0Lk1lc3NhZ2VUb0pz
b24obWVzc2FnZSwgVHJ1ZSkpLAotICAgICAgICBqc29uLmxvYWRzKAotICAgICAgICAgICAgJ3tc
bicKLSAgICAgICAgICAgICcgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5w
cm90b2J1Zi5EdXJhdGlvbiIsXG4nCi0gICAgICAgICAgICAnICAidmFsdWUiOiAiMXMiXG4nCi0g
ICAgICAgICAgICAnfVxuJykpCi0gICAgc2VsZi5DaGVja1BhcnNlQmFjayhtZXNzYWdlLCBwYXJz
ZWRfbWVzc2FnZSkKLQotICAgIGZpZWxkX21hc2sgPSBmaWVsZF9tYXNrX3BiMi5GaWVsZE1hc2so
KQotICAgIGZpZWxkX21hc2sucGF0aHMuYXBwZW5kKCdmb28uYmFyJykKLSAgICBmaWVsZF9tYXNr
LnBhdGhzLmFwcGVuZCgnYmFyJykKLSAgICBtZXNzYWdlLlBhY2soZmllbGRfbWFzaykKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBqc29uLmxvYWRzKGpzb25fZm9ybWF0Lk1lc3NhZ2VU
b0pzb24obWVzc2FnZSwgVHJ1ZSkpLAotICAgICAgICBqc29uLmxvYWRzKAotICAgICAgICAgICAg
J3tcbicKLSAgICAgICAgICAgICcgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2ds
ZS5wcm90b2J1Zi5GaWVsZE1hc2siLFxuJwotICAgICAgICAgICAgJyAgInZhbHVlIjogImZvby5i
YXIsYmFyIlxuJwotICAgICAgICAgICAgJ31cbicpKQotICAgIHNlbGYuQ2hlY2tQYXJzZUJhY2so
bWVzc2FnZSwgcGFyc2VkX21lc3NhZ2UpCi0KLSAgICBzdHJ1Y3RfbWVzc2FnZSA9IHN0cnVjdF9w
YjIuU3RydWN0KCkKLSAgICBzdHJ1Y3RfbWVzc2FnZVsnbmFtZSddID0gJ0ppbScKLSAgICBtZXNz
YWdlLlBhY2soc3RydWN0X21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAg
anNvbi5sb2Fkcyhqc29uX2Zvcm1hdC5NZXNzYWdlVG9Kc29uKG1lc3NhZ2UsIFRydWUpKSwKLSAg
ICAgICAganNvbi5sb2FkcygKLSAgICAgICAgICAgICd7XG4nCi0gICAgICAgICAgICAnICAiQHR5
cGUiOiAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuU3RydWN0IixcbicKLSAg
ICAgICAgICAgICcgICJ2YWx1ZSI6IHsibmFtZSI6ICJKaW0ifVxuJwotICAgICAgICAgICAgJ31c
bicpKQotICAgIHNlbGYuQ2hlY2tQYXJzZUJhY2sobWVzc2FnZSwgcGFyc2VkX21lc3NhZ2UpCi0K
LSAgICBuZXN0ZWRfYW55ID0gYW55X3BiMi5BbnkoKQotICAgIGludDMyX3ZhbHVlLnZhbHVlID0g
NTY3OAotICAgIG5lc3RlZF9hbnkuUGFjayhpbnQzMl92YWx1ZSkKLSAgICBtZXNzYWdlLlBhY2so
bmVzdGVkX2FueSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBqc29uLmxvYWRzKGpz
b25fZm9ybWF0Lk1lc3NhZ2VUb0pzb24obWVzc2FnZSwgVHJ1ZSkpLAotICAgICAgICBqc29uLmxv
YWRzKAotICAgICAgICAgICAgJ3tcbicKLSAgICAgICAgICAgICcgICJAdHlwZSI6ICJ0eXBlLmdv
b2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5BbnkiLFxuJwotICAgICAgICAgICAgJyAgInZh
bHVlIjoge1xuJwotICAgICAgICAgICAgJyAgICAiQHR5cGUiOiAidHlwZS5nb29nbGVhcGlzLmNv
bS9nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZSIsXG4nCi0gICAgICAgICAgICAnICAgICJ2YWx1
ZSI6IDU2NzhcbicKLSAgICAgICAgICAgICcgIH1cbicKLSAgICAgICAgICAgICd9XG4nKSkKLSAg
ICBzZWxmLkNoZWNrUGFyc2VCYWNrKG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQotCi0gIGRlZiB0
ZXN0UGFyc2VOdWxsKHNlbGYpOgotICAgIG1lc3NhZ2UgPSBqc29uX2Zvcm1hdF9wcm90bzNfcGIy
LlRlc3RNZXNzYWdlKCkKLSAgICBwYXJzZWRfbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19w
YjIuVGVzdE1lc3NhZ2UoKQotICAgIHNlbGYuRmlsbEFsbEZpZWxkcyhwYXJzZWRfbWVzc2FnZSkK
LSAgICBqc29uX2Zvcm1hdC5QYXJzZSgneyJpbnQzMlZhbHVlIjogbnVsbCwgJwotICAgICAgICAg
ICAgICAgICAgICAgICciaW50NjRWYWx1ZSI6IG51bGwsICcKLSAgICAgICAgICAgICAgICAgICAg
ICAnInVpbnQzMlZhbHVlIjogbnVsbCwnCi0gICAgICAgICAgICAgICAgICAgICAgJyJ1aW50NjRW
YWx1ZSI6IG51bGwsJwotICAgICAgICAgICAgICAgICAgICAgICciZmxvYXRWYWx1ZSI6IG51bGws
JwotICAgICAgICAgICAgICAgICAgICAgICciZG91YmxlVmFsdWUiOiBudWxsLCcKLSAgICAgICAg
ICAgICAgICAgICAgICAnImJvb2xWYWx1ZSI6IG51bGwsJwotICAgICAgICAgICAgICAgICAgICAg
ICcic3RyaW5nVmFsdWUiOiBudWxsLCcKLSAgICAgICAgICAgICAgICAgICAgICAnImJ5dGVzVmFs
dWUiOiBudWxsLCcKLSAgICAgICAgICAgICAgICAgICAgICAnIm1lc3NhZ2VWYWx1ZSI6IG51bGws
JwotICAgICAgICAgICAgICAgICAgICAgICciZW51bVZhbHVlIjogbnVsbCwnCi0gICAgICAgICAg
ICAgICAgICAgICAgJyJyZXBlYXRlZEludDMyVmFsdWUiOiBudWxsLCcKLSAgICAgICAgICAgICAg
ICAgICAgICAnInJlcGVhdGVkSW50NjRWYWx1ZSI6IG51bGwsJwotICAgICAgICAgICAgICAgICAg
ICAgICcicmVwZWF0ZWRVaW50MzJWYWx1ZSI6IG51bGwsJwotICAgICAgICAgICAgICAgICAgICAg
ICcicmVwZWF0ZWRVaW50NjRWYWx1ZSI6IG51bGwsJwotICAgICAgICAgICAgICAgICAgICAgICci
cmVwZWF0ZWRGbG9hdFZhbHVlIjogbnVsbCwnCi0gICAgICAgICAgICAgICAgICAgICAgJyJyZXBl
YXRlZERvdWJsZVZhbHVlIjogbnVsbCwnCi0gICAgICAgICAgICAgICAgICAgICAgJyJyZXBlYXRl
ZEJvb2xWYWx1ZSI6IG51bGwsJwotICAgICAgICAgICAgICAgICAgICAgICcicmVwZWF0ZWRTdHJp
bmdWYWx1ZSI6IG51bGwsJwotICAgICAgICAgICAgICAgICAgICAgICcicmVwZWF0ZWRCeXRlc1Zh
bHVlIjogbnVsbCwnCi0gICAgICAgICAgICAgICAgICAgICAgJyJyZXBlYXRlZE1lc3NhZ2VWYWx1
ZSI6IG51bGwsJwotICAgICAgICAgICAgICAgICAgICAgICcicmVwZWF0ZWRFbnVtVmFsdWUiOiBu
dWxsJwotICAgICAgICAgICAgICAgICAgICAgICd9JywKLSAgICAgICAgICAgICAgICAgICAgICBw
YXJzZWRfbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsIHBhcnNlZF9tZXNz
YWdlKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAotICAgICAgICBqc29uX2Zvcm1hdC5Q
YXJzZUVycm9yLAotICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIHJlcGVhdGVkSW50MzJWYWx1ZSBm
aWVsZDogJwotICAgICAgICAnbnVsbCBpcyBub3QgYWxsb3dlZCB0byBiZSB1c2VkIGFzIGFuIGVs
ZW1lbnQgaW4gYSByZXBlYXRlZCBmaWVsZC4nLAotICAgICAgICBqc29uX2Zvcm1hdC5QYXJzZSwK
LSAgICAgICAgJ3sicmVwZWF0ZWRJbnQzMlZhbHVlIjpbMSwgbnVsbF19JywKLSAgICAgICAgcGFy
c2VkX21lc3NhZ2UpCi0KLSAgZGVmIHRlc3ROYW5GbG9hdChzZWxmKToKLSAgICBtZXNzYWdlID0g
anNvbl9mb3JtYXRfcHJvdG8zX3BiMi5UZXN0TWVzc2FnZSgpCi0gICAgbWVzc2FnZS5mbG9hdF92
YWx1ZSA9IGZsb2F0KCduYW4nKQotICAgIHRleHQgPSAne1xuICAiZmxvYXRWYWx1ZSI6ICJOYU4i
XG59JwotICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbl9mb3JtYXQuTWVzc2FnZVRvSnNvbihtZXNz
YWdlKSwgdGV4dCkKLSAgICBwYXJzZWRfbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIu
VGVzdE1lc3NhZ2UoKQotICAgIGpzb25fZm9ybWF0LlBhcnNlKHRleHQsIHBhcnNlZF9tZXNzYWdl
KQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHBhcnNlZF9tZXNzYWdlLmZsb2F0X3Zh
bHVlKSkKLQotICBkZWYgdGVzdFBhcnNlRW1wdHlUZXh0KHNlbGYpOgotICAgIHNlbGYuQ2hlY2tF
cnJvcignJywKLSAgICAgICAgICAgICAgICAgICAgcidGYWlsZWQgdG8gbG9hZCBKU09OOiAoRXhw
ZWN0aW5nIHZhbHVlKXwoTm8gSlNPTikuJykKLQotICBkZWYgdGVzdFBhcnNlQmFkRW51bVZhbHVl
KHNlbGYpOgotICAgIHNlbGYuQ2hlY2tFcnJvcigKLSAgICAgICAgJ3siZW51bVZhbHVlIjogMX0n
LAotICAgICAgICAnRW51bSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIGxpdGVyYWwgd2l0aCBkb3Vi
bGUgcXVvdGVzLiAnCi0gICAgICAgICdUeXBlICJwcm90bzMuRW51bVR5cGUiIGhhcyBubyB2YWx1
ZSBuYW1lZCAxLicpCi0gICAgc2VsZi5DaGVja0Vycm9yKAotICAgICAgICAneyJlbnVtVmFsdWUi
OiAiYmF6In0nLAotICAgICAgICAnRW51bSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIGxpdGVyYWwg
d2l0aCBkb3VibGUgcXVvdGVzLiAnCi0gICAgICAgICdUeXBlICJwcm90bzMuRW51bVR5cGUiIGhh
cyBubyB2YWx1ZSBuYW1lZCBiYXouJykKLQotICBkZWYgdGVzdFBhcnNlQmFkSWRlbnRpZmVyKHNl
bGYpOgotICAgIHNlbGYuQ2hlY2tFcnJvcigne2ludDMyVmFsdWU6IDF9JywKLSAgICAgICAgICAg
ICAgICAgICAgKHInRmFpbGVkIHRvIGxvYWQgSlNPTjogRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUn
Ci0gICAgICAgICAgICAgICAgICAgICByJyggZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rlcyk/OiBs
aW5lIDEnKSkKLSAgICBzZWxmLkNoZWNrRXJyb3IoJ3sidW5rbm93bk5hbWUiOiAxfScsCi0gICAg
ICAgICAgICAgICAgICAgICdNZXNzYWdlIHR5cGUgInByb3RvMy5UZXN0TWVzc2FnZSIgaGFzIG5v
IGZpZWxkIG5hbWVkICcKLSAgICAgICAgICAgICAgICAgICAgJyJ1bmtub3duTmFtZSIuJykKLQot
ICBkZWYgdGVzdER1cGxpY2F0ZUZpZWxkKHNlbGYpOgotICAgICMgRHVwbGljYXRlIGtleSBjaGVj
ayBpcyBub3Qgc3VwcG9ydGVkIGZvciBweXRob24yLjYKLSAgICBpZiBzeXMudmVyc2lvbl9pbmZv
IDwgKDIsIDcpOgotICAgICAgcmV0dXJuCi0gICAgc2VsZi5DaGVja0Vycm9yKCd7ImludDMyVmFs
dWUiOiAxLFxuImludDMyVmFsdWUiOjJ9JywKLSAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0
byBsb2FkIEpTT046IGR1cGxpY2F0ZSBrZXkgaW50MzJWYWx1ZS4nKQotCi0gIGRlZiB0ZXN0SW52
YWxpZEJvb2xWYWx1ZShzZWxmKToKLSAgICBzZWxmLkNoZWNrRXJyb3IoJ3siYm9vbFZhbHVlIjog
MX0nLAotICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIGJvb2xWYWx1ZSBmaWVs
ZDogJwotICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZSB3aXRob3V0
IHF1b3Rlcy4nKQotICAgIHNlbGYuQ2hlY2tFcnJvcigneyJib29sVmFsdWUiOiAidHJ1ZSJ9JywK
LSAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBwYXJzZSBib29sVmFsdWUgZmllbGQ6ICcK
LSAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRydWUgb3IgZmFsc2Ugd2l0aG91dCBxdW90
ZXMuJykKLQotICBkZWYgdGVzdEludmFsaWRJbnRlZ2VyVmFsdWUoc2VsZik6Ci0gICAgbWVzc2Fn
ZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVzdE1lc3NhZ2UoKQotICAgIHRleHQgPSAneyJp
bnQzMlZhbHVlIjogMHgxMjM0NX0nCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoanNvbl9mb3JtYXQu
UGFyc2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBqc29uX2Zvcm1hdC5QYXJzZSwgdGV4
dCwgbWVzc2FnZSkKLSAgICBzZWxmLkNoZWNrRXJyb3IoJ3siaW50MzJWYWx1ZSI6IDAxMjM0NX0n
LAotICAgICAgICAgICAgICAgICAgICAocidGYWlsZWQgdG8gbG9hZCBKU09OOiBFeHBlY3Rpbmcg
XCc/LFwnPyBkZWxpbWl0ZXI6ICcKLSAgICAgICAgICAgICAgICAgICAgIHInbGluZSAxLicpKQot
ICAgIHNlbGYuQ2hlY2tFcnJvcigneyJpbnQzMlZhbHVlIjogMS4wfScsCi0gICAgICAgICAgICAg
ICAgICAgICdGYWlsZWQgdG8gcGFyc2UgaW50MzJWYWx1ZSBmaWVsZDogJwotICAgICAgICAgICAg
ICAgICAgICAnQ291bGRuXCd0IHBhcnNlIGludGVnZXI6IDEuMC4nKQotICAgIHNlbGYuQ2hlY2tF
cnJvcigneyJpbnQzMlZhbHVlIjogIiAxICJ9JywKLSAgICAgICAgICAgICAgICAgICAgJ0ZhaWxl
ZCB0byBwYXJzZSBpbnQzMlZhbHVlIGZpZWxkOiAnCi0gICAgICAgICAgICAgICAgICAgICdDb3Vs
ZG5cJ3QgcGFyc2UgaW50ZWdlcjogIiAxICIuJykKLSAgICBzZWxmLkNoZWNrRXJyb3IoJ3siaW50
MzJWYWx1ZSI6ICIxICJ9JywKLSAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBwYXJzZSBp
bnQzMlZhbHVlIGZpZWxkOiAnCi0gICAgICAgICAgICAgICAgICAgICdDb3VsZG5cJ3QgcGFyc2Ug
aW50ZWdlcjogIjEgIi4nKQotICAgIHNlbGYuQ2hlY2tFcnJvcigneyJpbnQzMlZhbHVlIjogMTIz
NDU2Nzg5MDEyMzQ1Njc4OTB9JywKLSAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBwYXJz
ZSBpbnQzMlZhbHVlIGZpZWxkOiBWYWx1ZSBvdXQgb2YgcmFuZ2U6ICcKLSAgICAgICAgICAgICAg
ICAgICAgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwLicpCi0gICAgc2VsZi5DaGVja0Vycm9yKCd7Imlu
dDMyVmFsdWUiOiAxZTV9JywKLSAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBwYXJzZSBp
bnQzMlZhbHVlIGZpZWxkOiAnCi0gICAgICAgICAgICAgICAgICAgICdDb3VsZG5cJ3QgcGFyc2Ug
aW50ZWdlcjogMTAwMDAwLjAuJykKLSAgICBzZWxmLkNoZWNrRXJyb3IoJ3sidWludDMyVmFsdWUi
OiAtMX0nLAotICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIHVpbnQzMlZhbHVl
IGZpZWxkOiAnCi0gICAgICAgICAgICAgICAgICAgICdWYWx1ZSBvdXQgb2YgcmFuZ2U6IC0xLicp
Ci0KLSAgZGVmIHRlc3RJbnZhbGlkRmxvYXRWYWx1ZShzZWxmKToKLSAgICBzZWxmLkNoZWNrRXJy
b3IoJ3siZmxvYXRWYWx1ZSI6ICJuYW4ifScsCi0gICAgICAgICAgICAgICAgICAgICdGYWlsZWQg
dG8gcGFyc2UgZmxvYXRWYWx1ZSBmaWVsZDogQ291bGRuXCd0ICcKLSAgICAgICAgICAgICAgICAg
ICAgJ3BhcnNlIGZsb2F0ICJuYW4iLCB1c2UgIk5hTiIgaW5zdGVhZC4nKQotCi0gIGRlZiB0ZXN0
SW52YWxpZEJ5dGVzVmFsdWUoc2VsZik6Ci0gICAgc2VsZi5DaGVja0Vycm9yKCd7ImJ5dGVzVmFs
dWUiOiAiQVFJIn0nLAotICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIGJ5dGVz
VmFsdWUgZmllbGQ6IEluY29ycmVjdCBwYWRkaW5nLicpCi0gICAgc2VsZi5DaGVja0Vycm9yKCd7
ImJ5dGVzVmFsdWUiOiAiQVFJKiJ9JywKLSAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBw
YXJzZSBieXRlc1ZhbHVlIGZpZWxkOiBJbmNvcnJlY3QgcGFkZGluZy4nKQotCi0gIGRlZiB0ZXN0
SW52YWxpZE1hcChzZWxmKToKLSAgICBtZXNzYWdlID0ganNvbl9mb3JtYXRfcHJvdG8zX3BiMi5U
ZXN0TWFwKCkKLSAgICB0ZXh0ID0gJ3siaW50MzJNYXAiOiB7Im51bGwiOiAyLCAiMiI6IDN9fScK
LSAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKLSAgICAgICAganNvbl9mb3JtYXQuUGFyc2VF
cnJvciwKLSAgICAgICAgJ0ZhaWxlZCB0byBwYXJzZSBpbnQzMk1hcCBmaWVsZDogaW52YWxpZCBs
aXRlcmFsJywKLSAgICAgICAganNvbl9mb3JtYXQuUGFyc2UsIHRleHQsIG1lc3NhZ2UpCi0gICAg
dGV4dCA9ICd7ImludDMyTWFwIjogezE6IDIsICIyIjogM319JwotICAgIHNlbGYuYXNzZXJ0UmFp
c2VzUmVnZXhwKAotICAgICAgICBqc29uX2Zvcm1hdC5QYXJzZUVycm9yLAotICAgICAgICAocidG
YWlsZWQgdG8gbG9hZCBKU09OOiBFeHBlY3RpbmcgcHJvcGVydHkgbmFtZScKLSAgICAgICAgIHIn
KCBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzKT86IGxpbmUgMScpLAotICAgICAgICBqc29uX2Zv
cm1hdC5QYXJzZSwgdGV4dCwgbWVzc2FnZSkKLSAgICB0ZXh0ID0gJ3siYm9vbE1hcCI6IHsibnVs
bCI6IDF9fScKLSAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKLSAgICAgICAganNvbl9mb3Jt
YXQuUGFyc2VFcnJvciwKLSAgICAgICAgJ0ZhaWxlZCB0byBwYXJzZSBib29sTWFwIGZpZWxkOiBF
eHBlY3RlZCAidHJ1ZSIgb3IgImZhbHNlIiwgbm90IG51bGwuJywKLSAgICAgICAganNvbl9mb3Jt
YXQuUGFyc2UsIHRleHQsIG1lc3NhZ2UpCi0gICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA3
KToKLSAgICAgIHJldHVybgotICAgIHRleHQgPSByJ3sic3RyaW5nTWFwIjogeyJhIjogMywgIlx1
MDA2MSI6IDJ9fScKLSAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKLSAgICAgICAganNvbl9m
b3JtYXQuUGFyc2VFcnJvciwKLSAgICAgICAgJ0ZhaWxlZCB0byBsb2FkIEpTT046IGR1cGxpY2F0
ZSBrZXkgYScsCi0gICAgICAgIGpzb25fZm9ybWF0LlBhcnNlLCB0ZXh0LCBtZXNzYWdlKQotCi0g
IGRlZiB0ZXN0SW52YWxpZFRpbWVzdGFtcChzZWxmKToKLSAgICBtZXNzYWdlID0ganNvbl9mb3Jt
YXRfcHJvdG8zX3BiMi5UZXN0VGltZXN0YW1wKCkKLSAgICB0ZXh0ID0gJ3sidmFsdWUiOiAiMTAw
MDAtMDEtMDFUMDA6MDA6MDAuMDBaIn0nCi0gICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCi0g
ICAgICAgIGpzb25fZm9ybWF0LlBhcnNlRXJyb3IsCi0gICAgICAgICd0aW1lIGRhdGEgXCcxMDAw
MC0wMS0wMVQwMDowMDowMFwnIGRvZXMgbm90IG1hdGNoJwotICAgICAgICAnIGZvcm1hdCBcJyVZ
LSVtLSVkVCVIOiVNOiVTXCcuJywKLSAgICAgICAganNvbl9mb3JtYXQuUGFyc2UsIHRleHQsIG1l
c3NhZ2UpCi0gICAgdGV4dCA9ICd7InZhbHVlIjogIjE5NzAtMDEtMDFUMDA6MDA6MDAuMDEyMzQ1
Njc4OTAxMloifScKLSAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKLSAgICAgICAgd2VsbF9r
bm93bl90eXBlcy5QYXJzZUVycm9yLAotICAgICAgICAnbmFub3MgMDEyMzQ1Njc4OTAxMiBtb3Jl
IHRoYW4gOSBmcmFjdGlvbmFsIGRpZ2l0cy4nLAotICAgICAgICBqc29uX2Zvcm1hdC5QYXJzZSwg
dGV4dCwgbWVzc2FnZSkKLSAgICB0ZXh0ID0gJ3sidmFsdWUiOiAiMTk3Mi0wMS0wMVQwMTowMDow
MC4wMSswOCJ9JwotICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAotICAgICAgICB3ZWxsX2tu
b3duX3R5cGVzLlBhcnNlRXJyb3IsCi0gICAgICAgIChyJ0ludmFsaWQgdGltZXpvbmUgb2Zmc2V0
IHZhbHVlOiBcKzA4LicpLAotICAgICAgICBqc29uX2Zvcm1hdC5QYXJzZSwgdGV4dCwgbWVzc2Fn
ZSkKLSAgICAjIFRpbWUgc21hbGxlciB0aGFuIG1pbmltdW0gdGltZS4KLSAgICB0ZXh0ID0gJ3si
dmFsdWUiOiAiMDAwMC0wMS0wMVQwMDowMDowMFoifScKLSAgICBzZWxmLmFzc2VydFJhaXNlc1Jl
Z2V4cCgKLSAgICAgICAganNvbl9mb3JtYXQuUGFyc2VFcnJvciwKLSAgICAgICAgJ0ZhaWxlZCB0
byBwYXJzZSB2YWx1ZSBmaWVsZDogeWVhciBpcyBvdXQgb2YgcmFuZ2UuJywKLSAgICAgICAganNv
bl9mb3JtYXQuUGFyc2UsIHRleHQsIG1lc3NhZ2UpCi0gICAgIyBUaW1lIGJpZ2dlciB0aGFuIG1h
eGludW0gdGltZS4KLSAgICBtZXNzYWdlLnZhbHVlLnNlY29uZHMgPSAyNTM0MDIzMDA4MDAKLSAg
ICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKLSAgICAgICAgT3ZlcmZsb3dFcnJvciwKLSAgICAg
ICAgJ2RhdGUgdmFsdWUgb3V0IG9mIHJhbmdlJywKLSAgICAgICAganNvbl9mb3JtYXQuTWVzc2Fn
ZVRvSnNvbiwgbWVzc2FnZSkKLQotICBkZWYgdGVzdEludmFsaWRPbmVvZihzZWxmKToKLSAgICBt
ZXNzYWdlID0ganNvbl9mb3JtYXRfcHJvdG8zX3BiMi5UZXN0T25lb2YoKQotICAgIHRleHQgPSAn
eyJvbmVvZkludDMyVmFsdWUiOiAxLCAib25lb2ZTdHJpbmdWYWx1ZSI6ICIyIn0nCi0gICAgc2Vs
Zi5hc3NlcnRSYWlzZXNSZWdleHAoCi0gICAgICAgIGpzb25fZm9ybWF0LlBhcnNlRXJyb3IsCi0g
ICAgICAgICdNZXNzYWdlIHR5cGUgInByb3RvMy5UZXN0T25lb2YiJwotICAgICAgICAnIHNob3Vs
ZCBub3QgaGF2ZSBtdWx0aXBsZSAib25lb2ZfdmFsdWUiIG9uZW9mIGZpZWxkcy4nLAotICAgICAg
ICBqc29uX2Zvcm1hdC5QYXJzZSwgdGV4dCwgbWVzc2FnZSkKLQotICBkZWYgdGVzdEludmFsaWRM
aXN0VmFsdWUoc2VsZik6Ci0gICAgbWVzc2FnZSA9IGpzb25fZm9ybWF0X3Byb3RvM19wYjIuVGVz
dExpc3RWYWx1ZSgpCi0gICAgdGV4dCA9ICd7InZhbHVlIjogMTIzNH0nCi0gICAgc2VsZi5hc3Nl
cnRSYWlzZXNSZWdleHAoCi0gICAgICAgIGpzb25fZm9ybWF0LlBhcnNlRXJyb3IsCi0gICAgICAg
IHInRmFpbGVkIHRvIHBhcnNlIHZhbHVlIGZpZWxkOiBMaXN0VmFsdWUgbXVzdCBiZSBpbiBcW1xd
IHdoaWNoIGlzIDEyMzQnLAotICAgICAgICBqc29uX2Zvcm1hdC5QYXJzZSwgdGV4dCwgbWVzc2Fn
ZSkKLQotICBkZWYgdGVzdEludmFsaWRTdHJ1Y3Qoc2VsZik6Ci0gICAgbWVzc2FnZSA9IGpzb25f
Zm9ybWF0X3Byb3RvM19wYjIuVGVzdFN0cnVjdCgpCi0gICAgdGV4dCA9ICd7InZhbHVlIjogMTIz
NH0nCi0gICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCi0gICAgICAgIGpzb25fZm9ybWF0LlBh
cnNlRXJyb3IsCi0gICAgICAgICdGYWlsZWQgdG8gcGFyc2UgdmFsdWUgZmllbGQ6IFN0cnVjdCBt
dXN0IGJlIGluIGEgZGljdCB3aGljaCBpcyAxMjM0JywKLSAgICAgICAganNvbl9mb3JtYXQuUGFy
c2UsIHRleHQsIG1lc3NhZ2UpCi0KLSAgZGVmIHRlc3RJbnZhbGlkQW55KHNlbGYpOgotICAgIG1l
c3NhZ2UgPSBhbnlfcGIyLkFueSgpCi0gICAgdGV4dCA9ICd7IkB0eXBlIjogInR5cGUuZ29vZ2xl
YXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUifScKLSAgICBzZWxmLmFzc2VydFJh
aXNlc1JlZ2V4cCgKLSAgICAgICAgS2V5RXJyb3IsCi0gICAgICAgICd2YWx1ZScsCi0gICAgICAg
IGpzb25fZm9ybWF0LlBhcnNlLCB0ZXh0LCBtZXNzYWdlKQotICAgIHRleHQgPSAneyJ2YWx1ZSI6
IDEyMzR9JwotICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAotICAgICAgICBqc29uX2Zvcm1h
dC5QYXJzZUVycm9yLAotICAgICAgICAnQHR5cGUgaXMgbWlzc2luZyB3aGVuIHBhcnNpbmcgYW55
IG1lc3NhZ2UuJywKLSAgICAgICAganNvbl9mb3JtYXQuUGFyc2UsIHRleHQsIG1lc3NhZ2UpCi0g
ICAgdGV4dCA9ICd7IkB0eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vTWVzc2FnZU5vdEV4aXN0
IiwgInZhbHVlIjogMTIzNH0nCi0gICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCi0gICAgICAg
IFR5cGVFcnJvciwKLSAgICAgICAgJ0NhbiBub3QgZmluZCBtZXNzYWdlIGRlc2NyaXB0b3IgYnkg
dHlwZV91cmw6ICcKLSAgICAgICAgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vTWVzc2FnZU5vdEV4aXN0
LicsCi0gICAgICAgIGpzb25fZm9ybWF0LlBhcnNlLCB0ZXh0LCBtZXNzYWdlKQotICAgICMgT25s
eSBsYXN0IHBhcnQgaXMgdG8gYmUgdXNlZDogYi8yNTYzMDExMgotICAgIHRleHQgPSAocid7IkB0
eXBlIjogImluY29ycmVjdC5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuSW50MzJWYWx1
ZSIsJwotICAgICAgICAgICAgcicidmFsdWUiOiAxMjM0fScpCi0gICAganNvbl9mb3JtYXQuUGFy
c2UodGV4dCwgbWVzc2FnZSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0
dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9t
ZXNzYWdlX2ZhY3RvcnlfdGVzdC5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9t
ZXNzYWdlX2ZhY3RvcnlfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Ji
N2QxYWNlY2Q2MmFiOWRiODViN2IwN2M2MjA5Y2IxOTk5MzlmOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJu
YWwvbWVzc2FnZV9mYWN0b3J5X3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBA
QAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoK
LSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJUZXN0cyBmb3IgZ29vZ2xl
LnByb3RvYnVmLm1lc3NhZ2VfZmFjdG9yeS4iIiIKLQotX19hdXRob3JfXyA9ICdtYXR0aGV3dG9p
YUBnb29nbGUuY29tIChNYXR0IFRvaWEpJwotCi10cnk6Ci0gIGltcG9ydCB1bml0dGVzdDIgYXMg
dW5pdHRlc3QgICNQWTI2Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gIGltcG9ydCB1bml0dGVzdAot
Ci1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wYjIKLWZyb20gZ29vZ2xl
LnByb3RvYnVmLmludGVybmFsIGltcG9ydCBmYWN0b3J5X3Rlc3QxX3BiMgotZnJvbSBnb29nbGUu
cHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IGZhY3RvcnlfdGVzdDJfcGIyCi1mcm9tIGdvb2dsZS5w
cm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9kYXRhYmFzZQotZnJvbSBnb29nbGUucHJvdG9idWYg
aW1wb3J0IGRlc2NyaXB0b3JfcG9vbAotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IG1lc3Nh
Z2VfZmFjdG9yeQotCi0KLWNsYXNzIE1lc3NhZ2VGYWN0b3J5VGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuZmFjdG9yeV90ZXN0MV9mZCA9IGRl
c2NyaXB0b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8uRnJvbVN0cmluZygKLSAgICAgICAgZmFj
dG9yeV90ZXN0MV9wYjIuREVTQ1JJUFRPUi5zZXJpYWxpemVkX3BiKQotICAgIHNlbGYuZmFjdG9y
eV90ZXN0Ml9mZCA9IGRlc2NyaXB0b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8uRnJvbVN0cmlu
ZygKLSAgICAgICAgZmFjdG9yeV90ZXN0Ml9wYjIuREVTQ1JJUFRPUi5zZXJpYWxpemVkX3BiKQot
Ci0gIGRlZiBfRXhlcmNpc2VEeW5hbWljQ2xhc3Moc2VsZiwgY2xzKToKLSAgICBtc2cgPSBjbHMo
KQotICAgIG1zZy5tYW5kYXRvcnkgPSA0MgotICAgIG1zZy5uZXN0ZWRfZmFjdG9yeV8yX2VudW0g
PSAwCi0gICAgbXNnLm5lc3RlZF9mYWN0b3J5XzJfbWVzc2FnZS52YWx1ZSA9ICduZXN0ZWQgbWVz
c2FnZSB2YWx1ZScKLSAgICBtc2cuZmFjdG9yeV8xX21lc3NhZ2UuZmFjdG9yeV8xX2VudW0gPSAx
Ci0gICAgbXNnLmZhY3RvcnlfMV9tZXNzYWdlLm5lc3RlZF9mYWN0b3J5XzFfZW51bSA9IDAKLSAg
ICBtc2cuZmFjdG9yeV8xX21lc3NhZ2UubmVzdGVkX2ZhY3RvcnlfMV9tZXNzYWdlLnZhbHVlID0g
KAotICAgICAgICAnbmVzdGVkIG1lc3NhZ2UgdmFsdWUnKQotICAgIG1zZy5mYWN0b3J5XzFfbWVz
c2FnZS5zY2FsYXJfdmFsdWUgPSAyMgotICAgIG1zZy5mYWN0b3J5XzFfbWVzc2FnZS5saXN0X3Zh
bHVlLmV4dGVuZChbdSdvbmUnLCB1J3R3bycsIHUndGhyZWUnXSkKLSAgICBtc2cuZmFjdG9yeV8x
X21lc3NhZ2UubGlzdF92YWx1ZS5hcHBlbmQodSdmb3VyJykKLSAgICBtc2cuZmFjdG9yeV8xX2Vu
dW0gPSAxCi0gICAgbXNnLm5lc3RlZF9mYWN0b3J5XzFfZW51bSA9IDAKLSAgICBtc2cubmVzdGVk
X2ZhY3RvcnlfMV9tZXNzYWdlLnZhbHVlID0gJ25lc3RlZCBtZXNzYWdlIHZhbHVlJwotICAgIG1z
Zy5jaXJjdWxhcl9tZXNzYWdlLm1hbmRhdG9yeSA9IDEKLSAgICBtc2cuY2lyY3VsYXJfbWVzc2Fn
ZS5jaXJjdWxhcl9tZXNzYWdlLm1hbmRhdG9yeSA9IDIKLSAgICBtc2cuY2lyY3VsYXJfbWVzc2Fn
ZS5zY2FsYXJfdmFsdWUgPSAnb25lIGRlZXAnCi0gICAgbXNnLnNjYWxhcl92YWx1ZSA9ICd6ZXJv
IGRlZXAnCi0gICAgbXNnLmxpc3RfdmFsdWUuZXh0ZW5kKFt1J2ZvdXInLCB1J3RocmVlJywgdSd0
d28nXSkKLSAgICBtc2cubGlzdF92YWx1ZS5hcHBlbmQodSdvbmUnKQotICAgIG1zZy5ncm91cGVk
LmFkZCgpCi0gICAgbXNnLmdyb3VwZWRbMF0ucGFydF8xID0gJ2hlbGxvJwotICAgIG1zZy5ncm91
cGVkWzBdLnBhcnRfMiA9ICd3b3JsZCcKLSAgICBtc2cuZ3JvdXBlZC5hZGQocGFydF8xPSd0ZXN0
aW5nJywgcGFydF8yPScxMjMnKQotICAgIG1zZy5sb29wLmxvb3AubWFuZGF0b3J5ID0gMgotICAg
IG1zZy5sb29wLmxvb3AubG9vcC5sb29wLm1hbmRhdG9yeSA9IDQKLSAgICBzZXJpYWxpemVkID0g
bXNnLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLSAgICBjb252ZXJ0ZWQgPSBmYWN0b3J5X3Rlc3QyX3Bi
Mi5GYWN0b3J5Mk1lc3NhZ2UuRnJvbVN0cmluZyhzZXJpYWxpemVkKQotICAgIHJlc2VyaWFsaXpl
ZCA9IGNvbnZlcnRlZC5TZXJpYWxpemVUb1N0cmluZygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChz
ZXJpYWxpemVkLCByZXNlcmlhbGl6ZWQpCi0gICAgcmVzdWx0ID0gY2xzLkZyb21TdHJpbmcocmVz
ZXJpYWxpemVkKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCByZXN1bHQpCi0KLSAgZGVmIHRl
c3RHZXRQcm90b3R5cGUoc2VsZik6Ci0gICAgZGIgPSBkZXNjcmlwdG9yX2RhdGFiYXNlLkRlc2Ny
aXB0b3JEYXRhYmFzZSgpCi0gICAgcG9vbCA9IGRlc2NyaXB0b3JfcG9vbC5EZXNjcmlwdG9yUG9v
bChkYikKLSAgICBkYi5BZGQoc2VsZi5mYWN0b3J5X3Rlc3QxX2ZkKQotICAgIGRiLkFkZChzZWxm
LmZhY3RvcnlfdGVzdDJfZmQpCi0gICAgZmFjdG9yeSA9IG1lc3NhZ2VfZmFjdG9yeS5NZXNzYWdl
RmFjdG9yeSgpCi0gICAgY2xzID0gZmFjdG9yeS5HZXRQcm90b3R5cGUocG9vbC5GaW5kTWVzc2Fn
ZVR5cGVCeU5hbWUoCi0gICAgICAgICdnb29nbGUucHJvdG9idWYucHl0aG9uLmludGVybmFsLkZh
Y3RvcnkyTWVzc2FnZScpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xzIGlzIGZhY3RvcnlfdGVz
dDJfcGIyLkZhY3RvcnkyTWVzc2FnZSkKLSAgICBzZWxmLl9FeGVyY2lzZUR5bmFtaWNDbGFzcyhj
bHMpCi0gICAgY2xzMiA9IGZhY3RvcnkuR2V0UHJvdG90eXBlKHBvb2wuRmluZE1lc3NhZ2VUeXBl
QnlOYW1lKAotICAgICAgICAnZ29vZ2xlLnByb3RvYnVmLnB5dGhvbi5pbnRlcm5hbC5GYWN0b3J5
Mk1lc3NhZ2UnKSkKLSAgICBzZWxmLmFzc2VydFRydWUoY2xzIGlzIGNsczIpCi0KLSAgZGVmIHRl
c3RHZXRNZXNzYWdlcyhzZWxmKToKLSAgICAjIHBlcmZvcm1lZCB0d2ljZSBiZWNhdXNlIG11bHRp
cGxlIGNhbGxzIHdpdGggdGhlIHNhbWUgaW5wdXQgbXVzdCBiZSBhbGxvd2VkCi0gICAgZm9yIF8g
aW4gcmFuZ2UoMik6Ci0gICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VfZmFjdG9yeS5HZXRNZXNzYWdl
cyhbc2VsZi5mYWN0b3J5X3Rlc3QxX2ZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuZmFjdG9yeV90ZXN0Ml9mZF0pCi0gICAgICBzZWxmLmFzc2Vy
dFRydWUoCi0gICAgICAgICAgc2V0KFsnZ29vZ2xlLnByb3RvYnVmLnB5dGhvbi5pbnRlcm5hbC5G
YWN0b3J5Mk1lc3NhZ2UnLAotICAgICAgICAgICAgICAgJ2dvb2dsZS5wcm90b2J1Zi5weXRob24u
aW50ZXJuYWwuRmFjdG9yeTFNZXNzYWdlJ10sCi0gICAgICAgICAgICAgKS5pc3N1YnNldChzZXQo
bWVzc2FnZXMua2V5cygpKSkpCi0gICAgICBzZWxmLl9FeGVyY2lzZUR5bmFtaWNDbGFzcygKLSAg
ICAgICAgICBtZXNzYWdlc1snZ29vZ2xlLnByb3RvYnVmLnB5dGhvbi5pbnRlcm5hbC5GYWN0b3J5
Mk1lc3NhZ2UnXSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICBzZXQoWydnb29n
bGUucHJvdG9idWYucHl0aG9uLmludGVybmFsLkZhY3RvcnkyTWVzc2FnZS5vbmVfbW9yZV9maWVs
ZCcsCi0gICAgICAgICAgICAgICAnZ29vZ2xlLnByb3RvYnVmLnB5dGhvbi5pbnRlcm5hbC5hbm90
aGVyX2ZpZWxkJ10sCi0gICAgICAgICAgICAgKS5pc3N1YnNldCgKLSAgICAgICAgICAgICAgICAg
c2V0KG1lc3NhZ2VzWydnb29nbGUucHJvdG9idWYucHl0aG9uLmludGVybmFsLkZhY3RvcnkxTWVz
c2FnZSddCi0gICAgICAgICAgICAgICAgICAgICAuX2V4dGVuc2lvbnNfYnlfbmFtZS5rZXlzKCkp
KSkKLSAgICAgIGZhY3RvcnlfbXNnMSA9IG1lc3NhZ2VzWydnb29nbGUucHJvdG9idWYucHl0aG9u
LmludGVybmFsLkZhY3RvcnkxTWVzc2FnZSddCi0gICAgICBtc2cxID0gbWVzc2FnZXNbJ2dvb2ds
ZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwuRmFjdG9yeTFNZXNzYWdlJ10oKQotICAgICAgZXh0
MSA9IGZhY3RvcnlfbXNnMS5fZXh0ZW5zaW9uc19ieV9uYW1lWwotICAgICAgICAgICdnb29nbGUu
cHJvdG9idWYucHl0aG9uLmludGVybmFsLkZhY3RvcnkyTWVzc2FnZS5vbmVfbW9yZV9maWVsZCdd
Ci0gICAgICBleHQyID0gZmFjdG9yeV9tc2cxLl9leHRlbnNpb25zX2J5X25hbWVbCi0gICAgICAg
ICAgJ2dvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwuYW5vdGhlcl9maWVsZCddCi0gICAg
ICBtc2cxLkV4dGVuc2lvbnNbZXh0MV0gPSAndGVzdDEnCi0gICAgICBtc2cxLkV4dGVuc2lvbnNb
ZXh0Ml0gPSAndGVzdDInCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0MScsIG1zZzEuRXh0
ZW5zaW9uc1tleHQxXSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3Rlc3QyJywgbXNnMS5FeHRl
bnNpb25zW2V4dDJdKQotCi0gIGRlZiB0ZXN0RHVwbGljYXRlRXh0ZW5zaW9uTnVtYmVyKHNlbGYp
OgotICAgIHBvb2wgPSBkZXNjcmlwdG9yX3Bvb2wuRGVzY3JpcHRvclBvb2woKQotICAgIGZhY3Rv
cnkgPSBtZXNzYWdlX2ZhY3RvcnkuTWVzc2FnZUZhY3RvcnkocG9vbD1wb29sKQotCi0gICAgIyBB
ZGQgQ29udGFpbmVyIG1lc3NhZ2UuCi0gICAgZiA9IGRlc2NyaXB0b3JfcGIyLkZpbGVEZXNjcmlw
dG9yUHJvdG8oKQotICAgIGYubmFtZSA9ICdnb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvY29udGFp
bmVyLnByb3RvJwotICAgIGYucGFja2FnZSA9ICdnb29nbGUucHJvdG9idWYucHl0aG9uLmludGVy
bmFsJwotICAgIG1zZyA9IGYubWVzc2FnZV90eXBlLmFkZCgpCi0gICAgbXNnLm5hbWUgPSAnQ29u
dGFpbmVyJwotICAgIHJuZyA9IG1zZy5leHRlbnNpb25fcmFuZ2UuYWRkKCkKLSAgICBybmcuc3Rh
cnQgPSAxCi0gICAgcm5nLmVuZCA9IDEwCi0gICAgcG9vbC5BZGQoZikKLSAgICBtc2dzID0gZmFj
dG9yeS5HZXRNZXNzYWdlcyhbZi5uYW1lXSkKLSAgICBzZWxmLmFzc2VydEluKCdnb29nbGUucHJv
dG9idWYucHl0aG9uLmludGVybmFsLkNvbnRhaW5lcicsIG1zZ3MpCi0KLSAgICAjIEV4dGVuZCBj
b250YWluZXIuCi0gICAgZiA9IGRlc2NyaXB0b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8oKQot
ICAgIGYubmFtZSA9ICdnb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvZXh0ZW5zaW9uLnByb3RvJwot
ICAgIGYucGFja2FnZSA9ICdnb29nbGUucHJvdG9idWYucHl0aG9uLmludGVybmFsJwotICAgIGYu
ZGVwZW5kZW5jeS5hcHBlbmQoJ2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9jb250YWluZXIucHJv
dG8nKQotICAgIG1zZyA9IGYubWVzc2FnZV90eXBlLmFkZCgpCi0gICAgbXNnLm5hbWUgPSAnRXh0
ZW5zaW9uJwotICAgIGV4dCA9IG1zZy5leHRlbnNpb24uYWRkKCkKLSAgICBleHQubmFtZSA9ICdl
eHRlbnNpb25fZmllbGQnCi0gICAgZXh0Lm51bWJlciA9IDIKLSAgICBleHQubGFiZWwgPSBkZXNj
cmlwdG9yX3BiMi5GaWVsZERlc2NyaXB0b3JQcm90by5MQUJFTF9PUFRJT05BTAotICAgIGV4dC50
eXBlX25hbWUgPSAnRXh0ZW5zaW9uJwotICAgIGV4dC5leHRlbmRlZSA9ICdDb250YWluZXInCi0g
ICAgcG9vbC5BZGQoZikKLSAgICBtc2dzID0gZmFjdG9yeS5HZXRNZXNzYWdlcyhbZi5uYW1lXSkK
LSAgICBzZWxmLmFzc2VydEluKCdnb29nbGUucHJvdG9idWYucHl0aG9uLmludGVybmFsLkV4dGVu
c2lvbicsIG1zZ3MpCi0KLSAgICAjIEFkZCBEdXBsaWNhdGUgZXh0ZW5kaW5nIHRoZSBzYW1lIGZp
ZWxkIG51bWJlci4KLSAgICBmID0gZGVzY3JpcHRvcl9wYjIuRmlsZURlc2NyaXB0b3JQcm90bygp
Ci0gICAgZi5uYW1lID0gJ2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9kdXBsaWNhdGUucHJvdG8n
Ci0gICAgZi5wYWNrYWdlID0gJ2dvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWwnCi0gICAg
Zi5kZXBlbmRlbmN5LmFwcGVuZCgnZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2NvbnRhaW5lci5w
cm90bycpCi0gICAgbXNnID0gZi5tZXNzYWdlX3R5cGUuYWRkKCkKLSAgICBtc2cubmFtZSA9ICdE
dXBsaWNhdGUnCi0gICAgZXh0ID0gbXNnLmV4dGVuc2lvbi5hZGQoKQotICAgIGV4dC5uYW1lID0g
J2V4dGVuc2lvbl9maWVsZCcKLSAgICBleHQubnVtYmVyID0gMgotICAgIGV4dC5sYWJlbCA9IGRl
c2NyaXB0b3JfcGIyLkZpZWxkRGVzY3JpcHRvclByb3RvLkxBQkVMX09QVElPTkFMCi0gICAgZXh0
LnR5cGVfbmFtZSA9ICdEdXBsaWNhdGUnCi0gICAgZXh0LmV4dGVuZGVlID0gJ0NvbnRhaW5lcicK
LSAgICBwb29sLkFkZChmKQotCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24p
IGFzIGNtOgotICAgICAgZmFjdG9yeS5HZXRNZXNzYWdlcyhbZi5uYW1lXSkKLQotICAgIHNlbGYu
YXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24sIChBc3NlcnRpb25FcnJvciwgVmFsdWVFcnJv
cikpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvbWVzc2FnZV9saXN0ZW5l
ci5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9tZXNzYWdlX2xpc3RlbmVyLnB5
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwZmMyNTVhNzc0NTYzNDczZWRiN2MwYzQz
MTVkNWE2MGE5OGI0MTlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9tZXNzYWdlX2xpc3RlbmVyLnB5
CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJEZWZpbmVzIGEgbGlz
dGVuZXIgaW50ZXJmYWNlIGZvciBvYnNlcnZpbmcgY2VydGFpbgotc3RhdGUgdHJhbnNpdGlvbnMg
b24gTWVzc2FnZSBvYmplY3RzLgotCi1BbHNvIGRlZmluZXMgYSBudWxsIGltcGxlbWVudGF0aW9u
IG9mIHRoaXMgaW50ZXJmYWNlLgotIiIiCi0KLV9fYXV0aG9yX18gPSAncm9iaW5zb25AZ29vZ2xl
LmNvbSAoV2lsbCBSb2JpbnNvbiknCi0KLQotY2xhc3MgTWVzc2FnZUxpc3RlbmVyKG9iamVjdCk6
Ci0KLSAgIiIiTGlzdGVucyBmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIGEgbWVzc2FnZS4gIE1l
YW50IHRvIGJlIHJlZ2lzdGVyZWQgdmlhCi0gIE1lc3NhZ2UuX1NldExpc3RlbmVyKCkuCi0KLSAg
QXR0cmlidXRlczoKLSAgICBkaXJ0eTogIElmIFRydWUsIHRoZW4gY2FsbGluZyBNb2RpZmllZCgp
IHdvdWxkIGJlIGEgbm8tb3AuICBUaGlzIGNhbiBiZQotICAgICAgICAgICAgdXNlZCB0byBhdm9p
ZCB0aGVzZSBjYWxscyBlbnRpcmVseSBpbiB0aGUgY29tbW9uIGNhc2UuCi0gICIiIgotCi0gIGRl
ZiBNb2RpZmllZChzZWxmKToKLSAgICAiIiJDYWxsZWQgZXZlcnkgdGltZSB0aGUgbWVzc2FnZSBp
cyBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIHBhcmVudAotICAgIG1lc3NhZ2UgbWF5
IG5lZWQgdG8gYmUgdXBkYXRlZC4gIFRoaXMgY3VycmVudGx5IG1lYW5zIGVpdGhlcjoKLSAgICAo
YSkgVGhlIG1lc3NhZ2Ugd2FzIG1vZGlmaWVkIGZvciB0aGUgZmlyc3QgdGltZSwgc28gdGhlIHBh
cmVudCBtZXNzYWdlCi0gICAgICAgIHNob3VsZCBoZW5jZWZvcnRoIG1hcmsgdGhlIG1lc3NhZ2Ug
YXMgcHJlc2VudC4KLSAgICAoYikgVGhlIG1lc3NhZ2UncyBjYWNoZWQgYnl0ZSBzaXplIGJlY2Ft
ZSBkaXJ0eSAtLSBpLmUuIHRoZSBtZXNzYWdlIHdhcwotICAgICAgICBtb2RpZmllZCBmb3IgdGhl
IGZpcnN0IHRpbWUgYWZ0ZXIgYSBwcmV2aW91cyBjYWxsIHRvIEJ5dGVTaXplKCkuCi0gICAgICAg
IFRoZXJlZm9yZSB0aGUgcGFyZW50IHNob3VsZCBhbHNvIG1hcmsgaXRzIGJ5dGUgc2l6ZSBhcyBk
aXJ0eS4KLSAgICBOb3RlIHRoYXQgKGEpIGltcGxpZXMgKGIpLCBzaW5jZSBuZXcgb2JqZWN0cyBz
dGFydCBvdXQgd2l0aCBhIGNsaWVudCBjYWNoZWQKLSAgICBzaXplICh6ZXJvKS4gIEhvd2V2ZXIs
IHdlIGRvY3VtZW50IChhKSBleHBsaWNpdGx5IGJlY2F1c2UgaXQgaXMgaW1wb3J0YW50LgotCi0g
ICAgTW9kaWZpZWQoKSB3aWxsICpvbmx5KiBiZSBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gb25lIG9m
IHRoZXNlIHR3byBldmVudHMgLS0KLSAgICBub3QgZXZlcnkgdGltZSB0aGUgc3ViLW1lc3NhZ2Ug
aXMgbW9kaWZpZWQuCi0KLSAgICBOb3RlIHRoYXQgaWYgdGhlIGxpc3RlbmVyJ3MgfGRpcnR5fCBh
dHRyaWJ1dGUgaXMgdHJ1ZSwgdGhlbiBjYWxsaW5nCi0gICAgTW9kaWZpZWQgYXQgdGhlIG1vbWVu
dCB3b3VsZCBiZSBhIG5vLW9wLCBzbyBpdCBjYW4gYmUgc2tpcHBlZC4gIFBlcmZvcm1hbmNlLQot
ICAgIHNlbnNpdGl2ZSBjYWxsZXJzIHNob3VsZCBjaGVjayB0aGlzIGF0dHJpYnV0ZSBkaXJlY3Rs
eSBiZWZvcmUgY2FsbGluZyBzaW5jZQotICAgIGl0IHdpbGwgYmUgdHJ1ZSBtb3N0IG9mIHRoZSB0
aW1lLgotICAgICIiIgotCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0KLWNsYXNz
IE51bGxNZXNzYWdlTGlzdGVuZXIob2JqZWN0KToKLQotICAiIiJOby1vcCBNZXNzYWdlTGlzdGVu
ZXIgaW1wbGVtZW50YXRpb24uIiIiCi0KLSAgZGVmIE1vZGlmaWVkKHNlbGYpOgotICAgIHBhc3MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9tZXNzYWdlX3NldF9l
eHRlbnNpb25zLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL21lc3NhZ2Vf
c2V0X2V4dGVuc2lvbnMucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZTVm
MTkzNzUxOGEwNTAyZjlmOGM5Y2NkZTRlMmY4MGY3ZWI0ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFs
L21lc3NhZ2Vfc2V0X2V4dGVuc2lvbnMucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVGhpcyBmaWxlIGNv
bnRhaW5zIG1lc3NhZ2VzIHRoYXQgZXh0ZW5kIE1lc3NhZ2VTZXQuCi0KLXN5bnRheCA9ICJwcm90
bzIiOwotcGFja2FnZSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWw7Ci0KLQotLy8gQSBtZXNzYWdl
IHdpdGggbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQuCi1tZXNzYWdlIFRlc3RNZXNzYWdlU2V0IHsK
LSAgb3B0aW9uIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0ID0gdHJ1ZTsKLSAgZXh0ZW5zaW9ucyA0
IHRvIG1heDsKLX0KLQotbWVzc2FnZSBUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEgewotICBleHRl
bmQgVGVzdE1lc3NhZ2VTZXQgewotICAgIG9wdGlvbmFsIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9u
MSBtZXNzYWdlX3NldF9leHRlbnNpb24gPSA5ODQxODYwMzsKLSAgfQotICBvcHRpb25hbCBpbnQz
MiBpID0gMTU7Ci19Ci0KLW1lc3NhZ2UgVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yIHsKLSAgZXh0
ZW5kIFRlc3RNZXNzYWdlU2V0IHsKLSAgICBvcHRpb25hbCBUZXN0TWVzc2FnZVNldEV4dGVuc2lv
bjIgbWVzc2FnZV9zZXRfZXh0ZW5zaW9uID0gOTg0MTg2MzQ7Ci0gIH0KLSAgb3B0aW9uYWwgc3Ry
aW5nIHN0ciA9IDI1OwotfQotCi1tZXNzYWdlIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMyB7Ci0g
IG9wdGlvbmFsIHN0cmluZyB0ZXh0ID0gMzU7Ci19Ci0KLWV4dGVuZCBUZXN0TWVzc2FnZVNldCB7
Ci0gIG9wdGlvbmFsIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMyBtZXNzYWdlX3NldF9leHRlbnNp
b24zID0gOTg0MTg2NTU7Ci19Ci0KLS8vIFRoaXMgbWVzc2FnZSB3YXMgdXNlZCB0byBnZW5lcmF0
ZQotLy8gLy9uZXQvcHJvdG8yL3B5dGhvbi9pbnRlcm5hbC90ZXN0ZGF0YS9tZXNzYWdlX3NldF9t
ZXNzYWdlLCBidXQgaXMgY29tbWVudGVkCi0vLyBvdXQgc2luY2UgaXQgbXVzdCBub3QgYWN0dWFs
bHkgZXhpc3QgaW4gY29kZSwgdG8gc2ltdWxhdGUgYW4gInVua25vd24iCi0vLyBleHRlbnNpb24u
Ci0vLyBtZXNzYWdlIFRlc3RNZXNzYWdlU2V0VW5rbm93bkV4dGVuc2lvbiB7Ci0vLyAgIGV4dGVu
ZCBUZXN0TWVzc2FnZVNldCB7Ci0vLyAgICAgb3B0aW9uYWwgVGVzdE1lc3NhZ2VTZXRVbmtub3du
RXh0ZW5zaW9uIG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbiA9IDU2MTQxNDIxOwotLy8gICB9Ci0vLyAg
IG9wdGlvbmFsIGludDY0IGEgPSAxOwotLy8gfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3By
b3RvYnVmL2ludGVybmFsL21lc3NhZ2VfdGVzdC5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9p
bnRlcm5hbC9tZXNzYWdlX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDRl
ZTMxZDhlZDk3Y2Y0MjU1ZDYxMzY3MmI5NDJhMDk0ZmFmZTcyMzkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVy
bmFsL21lc3NhZ2VfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4NTIgKzAsMCBAQAotIyEg
L3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0j
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0j
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJUZXN0cyBweXRob24gcHJvdG9jb2wg
YnVmZmVycyBhZ2FpbnN0IHRoZSBnb2xkZW4gbWVzc2FnZS4KLQotTm90ZSB0aGF0IHRoZSBnb2xk
ZW4gbWVzc2FnZXMgZXhlcmNpc2UgZXZlcnkga25vd24gZmllbGQgdHlwZSwgdGh1cyB0aGlzCi10
ZXN0IGVuZHMgdXAgZXhlcmNpc2luZyBhbmQgdmVyaWZ5aW5nIG5lYXJseSBhbGwgb2YgdGhlIHBh
cnNpbmcgYW5kCi1zZXJpYWxpemF0aW9uIGNvZGUgaW4gdGhlIHdob2xlIGxpYnJhcnkuCi0KLVRP
RE8oa2VudG9uKTogIE1lcmdlIHdpdGggd2lyZV9mb3JtYXRfdGVzdD8gIEl0IGRvZXNuJ3QgbWFr
ZSBhIHdob2xlIGxvdCBvZgotc2Vuc2UgdG8gY2FsbCB0aGlzIGEgdGVzdCBvZiB0aGUgIm1lc3Nh
Z2UiIG1vZHVsZSwgd2hpY2ggb25seSBkZWNsYXJlcyBhbgotYWJzdHJhY3QgaW50ZXJmYWNlLgot
IiIiCi0KLV9fYXV0aG9yX18gPSAnZ3BzQGdvb2dsZS5jb20gKEdyZWdvcnkgUC4gU21pdGgpJwot
Ci0KLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IGNvcHkKLWltcG9ydCBtYXRoCi1pbXBvcnQg
b3BlcmF0b3IKLWltcG9ydCBwaWNrbGUKLWltcG9ydCBzaXgKLWltcG9ydCBzeXMKLQotdHJ5Ogot
ICBpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0ICAjUFkyNgotZXhjZXB0IEltcG9ydEVycm9y
OgotICBpbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IG1hcF91
bml0dGVzdF9wYjIKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB1bml0dGVzdF9wYjIKLWZy
b20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB1bml0dGVzdF9wcm90bzNfYXJlbmFfcGIyCi1mcm9t
IGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wYjIKLWZyb20gZ29vZ2xlLnByb3Rv
YnVmIGltcG9ydCBkZXNjcmlwdG9yX3Bvb2wKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBt
ZXNzYWdlX2ZhY3RvcnkKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB0ZXh0X2Zvcm1hdAot
ZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IGFwaV9pbXBsZW1lbnRhdGlvbgot
ZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IHBhY2tlZF9maWVsZF90ZXN0X3Bi
MgotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IHRlc3RfdXRpbAotZnJvbSBn
b29nbGUucHJvdG9idWYgaW1wb3J0IG1lc3NhZ2UKLWZyb20gZ29vZ2xlLnByb3RvYnVmLmludGVy
bmFsIGltcG9ydCBfcGFyYW1ldGVyaXplZAotCi1pZiBzaXguUFkzOgotICBsb25nID0gaW50Ci0K
LQotIyBQeXRob24gcHJlLTIuNiBkb2VzIG5vdCBoYXZlIGlzaW5mKCkgb3IgaXNuYW4oKSBmdW5j
dGlvbnMsIHNvIHdlIGhhdmUKLSMgdG8gcHJvdmlkZSBvdXIgb3duLgotZGVmIGlzbmFuKHZhbCk6
Ci0gICMgTmFOIGlzIG5ldmVyIGVxdWFsIHRvIGl0c2VsZi4KLSAgcmV0dXJuIHZhbCAhPSB2YWwK
LWRlZiBpc2luZih2YWwpOgotICAjIEluZmluaXR5IHRpbWVzIHplcm8gZXF1YWxzIE5hTi4KLSAg
cmV0dXJuIG5vdCBpc25hbih2YWwpIGFuZCBpc25hbih2YWwgKiAwKQotZGVmIElzUG9zSW5mKHZh
bCk6Ci0gIHJldHVybiBpc2luZih2YWwpIGFuZCAodmFsID4gMCkKLWRlZiBJc05lZ0luZih2YWwp
OgotICByZXR1cm4gaXNpbmYodmFsKSBhbmQgKHZhbCA8IDApCi0KLQotQF9wYXJhbWV0ZXJpemVk
LlBhcmFtZXRlcnMoCi0gICAgKHVuaXR0ZXN0X3BiMiksCi0gICAgKHVuaXR0ZXN0X3Byb3RvM19h
cmVuYV9wYjIpKQotY2xhc3MgTWVzc2FnZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRl
ZiB0ZXN0QmFkVXRmOFN0cmluZyhzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgaWYgYXBpX2lt
cGxlbWVudGF0aW9uLlR5cGUoKSAhPSAncHl0aG9uJzoKLSAgICAgIHNlbGYuc2tpcFRlc3QoIlNr
aXBwaW5nIHRlc3RCYWRVdGY4U3RyaW5nLCBjdXJyZW50bHkgb25seSB0aGUgcHl0aG9uICIKLSAg
ICAgICAgICAgICAgICAgICAgImFwaSBpbXBsZW1lbnRhdGlvbiByYWlzZXMgVW5pY29kZURlY29k
ZUVycm9yIHdoZW4gYSAiCi0gICAgICAgICAgICAgICAgICAgICJzdHJpbmcgZmllbGQgY29udGFp
bnMgYmFkIHV0Zi04LiIpCi0gICAgYmFkX3V0ZjhfZGF0YSA9IHRlc3RfdXRpbC5Hb2xkZW5GaWxl
RGF0YSgnYmFkX3V0Zjhfc3RyaW5nJykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNv
ZGVEZWNvZGVFcnJvcikgYXMgY29udGV4dDoKLSAgICAgIG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxU
eXBlcy5Gcm9tU3RyaW5nKGJhZF91dGY4X2RhdGEpCi0gICAgc2VsZi5hc3NlcnRJbignVGVzdEFs
bFR5cGVzLm9wdGlvbmFsX3N0cmluZycsIHN0cihjb250ZXh0LmV4Y2VwdGlvbikpCi0KLSAgZGVm
IHRlc3RHb2xkZW5NZXNzYWdlKHNlbGYsIG1lc3NhZ2VfbW9kdWxlKToKLSAgICAjIFByb3RvMyBk
b2Vzbid0IGhhdmUgdGhlICJkZWZhdWx0X2ZvbyIgbWVtYmVycyBvciBmb3JlaWduIGVudW1zLAot
ICAgICMgYW5kIGRvZXNuJ3QgcHJlc2VydmUgdW5rbm93biBmaWVsZHMsIHNvIGZvciBwcm90bzMg
d2UgdXNlIGEgZ29sZGVuCi0gICAgIyBtZXNzYWdlIHRoYXQgZG9lc24ndCBoYXZlIHRoZXNlIGZp
ZWxkcyBzZXQuCi0gICAgaWYgbWVzc2FnZV9tb2R1bGUgaXMgdW5pdHRlc3RfcGIyOgotICAgICAg
Z29sZGVuX2RhdGEgPSB0ZXN0X3V0aWwuR29sZGVuRmlsZURhdGEoCi0gICAgICAgICAgJ2dvbGRl
bl9tZXNzYWdlX29uZW9mX2ltcGxlbWVudGVkJykKLSAgICBlbHNlOgotICAgICAgZ29sZGVuX2Rh
dGEgPSB0ZXN0X3V0aWwuR29sZGVuRmlsZURhdGEoJ2dvbGRlbl9tZXNzYWdlX3Byb3RvMycpCi0K
LSAgICBnb2xkZW5fbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAg
Z29sZGVuX21lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKGdvbGRlbl9kYXRhKQotICAgIGlmIG1lc3Nh
Z2VfbW9kdWxlIGlzIHVuaXR0ZXN0X3BiMjoKLSAgICAgIHRlc3RfdXRpbC5FeHBlY3RBbGxGaWVs
ZHNTZXQoc2VsZiwgZ29sZGVuX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChnb2xkZW5f
ZGF0YSwgZ29sZGVuX21lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoKSkKLSAgICBnb2xkZW5fY29w
eSA9IGNvcHkuZGVlcGNvcHkoZ29sZGVuX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChn
b2xkZW5fZGF0YSwgZ29sZGVuX2NvcHkuU2VyaWFsaXplVG9TdHJpbmcoKSkKLQotICBkZWYgdGVz
dEdvbGRlblBhY2tlZE1lc3NhZ2Uoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIGdvbGRlbl9k
YXRhID0gdGVzdF91dGlsLkdvbGRlbkZpbGVEYXRhKCdnb2xkZW5fcGFja2VkX2ZpZWxkc19tZXNz
YWdlJykKLSAgICBnb2xkZW5fbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RQYWNrZWRUeXBl
cygpCi0gICAgZ29sZGVuX21lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKGdvbGRlbl9kYXRhKQotICAg
IGFsbF9zZXQgPSBtZXNzYWdlX21vZHVsZS5UZXN0UGFja2VkVHlwZXMoKQotICAgIHRlc3RfdXRp
bC5TZXRBbGxQYWNrZWRGaWVsZHMoYWxsX3NldCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGFsbF9z
ZXQsIGdvbGRlbl9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ29sZGVuX2RhdGEsIGFs
bF9zZXQuU2VyaWFsaXplVG9TdHJpbmcoKSkKLSAgICBnb2xkZW5fY29weSA9IGNvcHkuZGVlcGNv
cHkoZ29sZGVuX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChnb2xkZW5fZGF0YSwgZ29s
ZGVuX2NvcHkuU2VyaWFsaXplVG9TdHJpbmcoKSkKLQotICBkZWYgdGVzdFBpY2tsZVN1cHBvcnQo
c2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIGdvbGRlbl9kYXRhID0gdGVzdF91dGlsLkdvbGRl
bkZpbGVEYXRhKCdnb2xkZW5fbWVzc2FnZScpCi0gICAgZ29sZGVuX21lc3NhZ2UgPSBtZXNzYWdl
X21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIGdvbGRlbl9tZXNzYWdlLlBhcnNlRnJvbVN0cmlu
Zyhnb2xkZW5fZGF0YSkKLSAgICBwaWNrbGVkX21lc3NhZ2UgPSBwaWNrbGUuZHVtcHMoZ29sZGVu
X21lc3NhZ2UpCi0KLSAgICB1bnBpY2tsZWRfbWVzc2FnZSA9IHBpY2tsZS5sb2FkcyhwaWNrbGVk
X21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWRfbWVzc2FnZSwgZ29sZGVu
X21lc3NhZ2UpCi0KLSAgZGVmIHRlc3RQb3NpdGl2ZUluZmluaXR5KHNlbGYsIG1lc3NhZ2VfbW9k
dWxlKToKLSAgICBpZiBtZXNzYWdlX21vZHVsZSBpcyB1bml0dGVzdF9wYjI6Ci0gICAgICBnb2xk
ZW5fZGF0YSA9IChiJ1x4NURceDAwXHgwMFx4ODBceDdGJwotICAgICAgICAgICAgICAgICAgICAg
YidceDYxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhGMFx4N0YnCi0gICAgICAgICAgICAgICAg
ICAgICBiJ1x4Q0RceDAyXHgwMFx4MDBceDgwXHg3RicKLSAgICAgICAgICAgICAgICAgICAgIGIn
XHhEMVx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceEYwXHg3RicpCi0gICAgZWxzZToKLSAg
ICAgIGdvbGRlbl9kYXRhID0gKGInXHg1RFx4MDBceDAwXHg4MFx4N0YnCi0gICAgICAgICAgICAg
ICAgICAgICBiJ1x4NjFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceEYwXHg3RicKLSAgICAgICAg
ICAgICAgICAgICAgIGInXHhDQVx4MDJceDA0XHgwMFx4MDBceDgwXHg3RicKLSAgICAgICAgICAg
ICAgICAgICAgIGInXHhEMlx4MDJceDA4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhGMFx4N0Yn
KQotCi0gICAgZ29sZGVuX21lc3NhZ2UgPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQot
ICAgIGdvbGRlbl9tZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhnb2xkZW5fZGF0YSkKLSAgICBzZWxm
LmFzc2VydFRydWUoSXNQb3NJbmYoZ29sZGVuX21lc3NhZ2Uub3B0aW9uYWxfZmxvYXQpKQotICAg
IHNlbGYuYXNzZXJ0VHJ1ZShJc1Bvc0luZihnb2xkZW5fbWVzc2FnZS5vcHRpb25hbF9kb3VibGUp
KQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShJc1Bvc0luZihnb2xkZW5fbWVzc2FnZS5yZXBlYXRlZF9m
bG9hdFswXSkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKElzUG9zSW5mKGdvbGRlbl9tZXNzYWdlLnJl
cGVhdGVkX2RvdWJsZVswXSkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChnb2xkZW5fZGF0YSwgZ29s
ZGVuX21lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoKSkKLQotICBkZWYgdGVzdE5lZ2F0aXZlSW5m
aW5pdHkoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIGlmIG1lc3NhZ2VfbW9kdWxlIGlzIHVu
aXR0ZXN0X3BiMjoKLSAgICAgIGdvbGRlbl9kYXRhID0gKGInXHg1RFx4MDBceDAwXHg4MFx4RkYn
Ci0gICAgICAgICAgICAgICAgICAgICBiJ1x4NjFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceEYw
XHhGRicKLSAgICAgICAgICAgICAgICAgICAgIGInXHhDRFx4MDJceDAwXHgwMFx4ODBceEZGJwot
ICAgICAgICAgICAgICAgICAgICAgYidceEQxXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4
RjBceEZGJykKLSAgICBlbHNlOgotICAgICAgZ29sZGVuX2RhdGEgPSAoYidceDVEXHgwMFx4MDBc
eDgwXHhGRicKLSAgICAgICAgICAgICAgICAgICAgIGInXHg2MVx4MDBceDAwXHgwMFx4MDBceDAw
XHgwMFx4RjBceEZGJwotICAgICAgICAgICAgICAgICAgICAgYidceENBXHgwMlx4MDRceDAwXHgw
MFx4ODBceEZGJwotICAgICAgICAgICAgICAgICAgICAgYidceEQyXHgwMlx4MDhceDAwXHgwMFx4
MDBceDAwXHgwMFx4MDBceEYwXHhGRicpCi0KLSAgICBnb2xkZW5fbWVzc2FnZSA9IG1lc3NhZ2Vf
bW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgZ29sZGVuX21lc3NhZ2UuUGFyc2VGcm9tU3RyaW5n
KGdvbGRlbl9kYXRhKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShJc05lZ0luZihnb2xkZW5fbWVzc2Fn
ZS5vcHRpb25hbF9mbG9hdCkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKElzTmVnSW5mKGdvbGRlbl9t
ZXNzYWdlLm9wdGlvbmFsX2RvdWJsZSkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKElzTmVnSW5mKGdv
bGRlbl9tZXNzYWdlLnJlcGVhdGVkX2Zsb2F0WzBdKSkKLSAgICBzZWxmLmFzc2VydFRydWUoSXNO
ZWdJbmYoZ29sZGVuX21lc3NhZ2UucmVwZWF0ZWRfZG91YmxlWzBdKSkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKGdvbGRlbl9kYXRhLCBnb2xkZW5fbWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQot
Ci0gIGRlZiB0ZXN0Tm90QU51bWJlcihzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgZ29sZGVu
X2RhdGEgPSAoYidceDVEXHgwMFx4MDBceEMwXHg3RicKLSAgICAgICAgICAgICAgICAgICBiJ1x4
NjFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceEY4XHg3RicKLSAgICAgICAgICAgICAgICAgICBi
J1x4Q0RceDAyXHgwMFx4MDBceEMwXHg3RicKLSAgICAgICAgICAgICAgICAgICBiJ1x4RDFceDAy
XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhGOFx4N0YnKQotICAgIGdvbGRlbl9tZXNzYWdlID0g
bWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBnb2xkZW5fbWVzc2FnZS5QYXJzZUZy
b21TdHJpbmcoZ29sZGVuX2RhdGEpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGdvbGRlbl9t
ZXNzYWdlLm9wdGlvbmFsX2Zsb2F0KSkKLSAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oZ29sZGVu
X21lc3NhZ2Uub3B0aW9uYWxfZG91YmxlKSkKLSAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oZ29s
ZGVuX21lc3NhZ2UucmVwZWF0ZWRfZmxvYXRbMF0pKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25h
bihnb2xkZW5fbWVzc2FnZS5yZXBlYXRlZF9kb3VibGVbMF0pKQotCi0gICAgIyBUaGUgcHJvdG9j
b2wgYnVmZmVyIG1heSBzZXJpYWxpemUgdG8gYW55IG9uZSBvZiBtdWx0aXBsZSBkaWZmZXJlbnQK
LSAgICAjIHJlcHJlc2VudGF0aW9ucyBvZiBhIE5hTi4gIFJhdGhlciB0aGFuIHZlcmlmeSBhIHNw
ZWNpZmljIHJlcHJlc2VudGF0aW9uLAotICAgICMgdmVyaWZ5IHRoZSBzZXJpYWxpemVkIHN0cmlu
ZyBjYW4gYmUgY29udmVydGVkIGludG8gYSBjb3JyZWN0bHkKLSAgICAjIGJlaGF2aW5nIHByb3Rv
Y29sIGJ1ZmZlci4KLSAgICBzZXJpYWxpemVkID0gZ29sZGVuX21lc3NhZ2UuU2VyaWFsaXplVG9T
dHJpbmcoKQotICAgIG1lc3NhZ2UgPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAg
IG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQpCi0gICAgc2VsZi5hc3NlcnRUcnVl
KGlzbmFuKG1lc3NhZ2Uub3B0aW9uYWxfZmxvYXQpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25h
bihtZXNzYWdlLm9wdGlvbmFsX2RvdWJsZSkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKG1l
c3NhZ2UucmVwZWF0ZWRfZmxvYXRbMF0pKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihtZXNz
YWdlLnJlcGVhdGVkX2RvdWJsZVswXSkpCi0KLSAgZGVmIHRlc3RQb3NpdGl2ZUluZmluaXR5UGFj
a2VkKHNlbGYsIG1lc3NhZ2VfbW9kdWxlKToKLSAgICBnb2xkZW5fZGF0YSA9IChiJ1x4QTJceDA2
XHgwNFx4MDBceDAwXHg4MFx4N0YnCi0gICAgICAgICAgICAgICAgICAgYidceEFBXHgwNlx4MDhc
eDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceEYwXHg3RicpCi0gICAgZ29sZGVuX21lc3NhZ2UgPSBt
ZXNzYWdlX21vZHVsZS5UZXN0UGFja2VkVHlwZXMoKQotICAgIGdvbGRlbl9tZXNzYWdlLlBhcnNl
RnJvbVN0cmluZyhnb2xkZW5fZGF0YSkKLSAgICBzZWxmLmFzc2VydFRydWUoSXNQb3NJbmYoZ29s
ZGVuX21lc3NhZ2UucGFja2VkX2Zsb2F0WzBdKSkKLSAgICBzZWxmLmFzc2VydFRydWUoSXNQb3NJ
bmYoZ29sZGVuX21lc3NhZ2UucGFja2VkX2RvdWJsZVswXSkpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bChnb2xkZW5fZGF0YSwgZ29sZGVuX21lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoKSkKLQotICBk
ZWYgdGVzdE5lZ2F0aXZlSW5maW5pdHlQYWNrZWQoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAg
IGdvbGRlbl9kYXRhID0gKGInXHhBMlx4MDZceDA0XHgwMFx4MDBceDgwXHhGRicKLSAgICAgICAg
ICAgICAgICAgICBiJ1x4QUFceDA2XHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4RjBceEZG
JykKLSAgICBnb2xkZW5fbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RQYWNrZWRUeXBlcygp
Ci0gICAgZ29sZGVuX21lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKGdvbGRlbl9kYXRhKQotICAgIHNl
bGYuYXNzZXJ0VHJ1ZShJc05lZ0luZihnb2xkZW5fbWVzc2FnZS5wYWNrZWRfZmxvYXRbMF0pKQot
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShJc05lZ0luZihnb2xkZW5fbWVzc2FnZS5wYWNrZWRfZG91Ymxl
WzBdKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGdvbGRlbl9kYXRhLCBnb2xkZW5fbWVzc2FnZS5T
ZXJpYWxpemVUb1N0cmluZygpKQotCi0gIGRlZiB0ZXN0Tm90QU51bWJlclBhY2tlZChzZWxmLCBt
ZXNzYWdlX21vZHVsZSk6Ci0gICAgZ29sZGVuX2RhdGEgPSAoYidceEEyXHgwNlx4MDRceDAwXHgw
MFx4QzBceDdGJwotICAgICAgICAgICAgICAgICAgIGInXHhBQVx4MDZceDA4XHgwMFx4MDBceDAw
XHgwMFx4MDBceDAwXHhGOFx4N0YnKQotICAgIGdvbGRlbl9tZXNzYWdlID0gbWVzc2FnZV9tb2R1
bGUuVGVzdFBhY2tlZFR5cGVzKCkKLSAgICBnb2xkZW5fbWVzc2FnZS5QYXJzZUZyb21TdHJpbmco
Z29sZGVuX2RhdGEpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGdvbGRlbl9tZXNzYWdlLnBh
Y2tlZF9mbG9hdFswXSkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGdvbGRlbl9tZXNzYWdl
LnBhY2tlZF9kb3VibGVbMF0pKQotCi0gICAgc2VyaWFsaXplZCA9IGdvbGRlbl9tZXNzYWdlLlNl
cmlhbGl6ZVRvU3RyaW5nKCkKLSAgICBtZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUuVGVzdFBhY2tl
ZFR5cGVzKCkKLSAgICBtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhzZXJpYWxpemVkKQotICAgIHNl
bGYuYXNzZXJ0VHJ1ZShpc25hbihtZXNzYWdlLnBhY2tlZF9mbG9hdFswXSkpCi0gICAgc2VsZi5h
c3NlcnRUcnVlKGlzbmFuKG1lc3NhZ2UucGFja2VkX2RvdWJsZVswXSkpCi0KLSAgZGVmIHRlc3RF
eHRyZW1lRmxvYXRWYWx1ZXMoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG1lc3NhZ2UgPSBt
ZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotCi0gICAgIyBNb3N0IHBvc2l0aXZlIGV4cG9u
ZW50LCBubyBzaWduaWZpY2FuZCBiaXRzIHNldC4KLSAgICBrTW9zdFBvc0V4cG9uZW50Tm9TaWdC
aXRzID0gbWF0aC5wb3coMiwgMTI3KQotICAgIG1lc3NhZ2Uub3B0aW9uYWxfZmxvYXQgPSBrTW9z
dFBvc0V4cG9uZW50Tm9TaWdCaXRzCi0gICAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcobWVzc2Fn
ZS5TZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLm9wdGlv
bmFsX2Zsb2F0ID09IGtNb3N0UG9zRXhwb25lbnROb1NpZ0JpdHMpCi0KLSAgICAjIE1vc3QgcG9z
aXRpdmUgZXhwb25lbnQsIG9uZSBzaWduaWZpY2FuZCBiaXQgc2V0LgotICAgIGtNb3N0UG9zRXhw
b25lbnRPbmVTaWdCaXQgPSAxLjUgKiBtYXRoLnBvdygyLCAxMjcpCi0gICAgbWVzc2FnZS5vcHRp
b25hbF9mbG9hdCA9IGtNb3N0UG9zRXhwb25lbnRPbmVTaWdCaXQKLSAgICBtZXNzYWdlLlBhcnNl
RnJvbVN0cmluZyhtZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCi0gICAgc2VsZi5hc3NlcnRU
cnVlKG1lc3NhZ2Uub3B0aW9uYWxfZmxvYXQgPT0ga01vc3RQb3NFeHBvbmVudE9uZVNpZ0JpdCkK
LQotICAgICMgUmVwZWF0IGxhc3QgdHdvIGNhc2VzIHdpdGggdmFsdWVzIG9mIHNhbWUgbWFnbml0
dWRlLCBidXQgbmVnYXRpdmUuCi0gICAgbWVzc2FnZS5vcHRpb25hbF9mbG9hdCA9IC1rTW9zdFBv
c0V4cG9uZW50Tm9TaWdCaXRzCi0gICAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcobWVzc2FnZS5T
ZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLm9wdGlvbmFs
X2Zsb2F0ID09IC1rTW9zdFBvc0V4cG9uZW50Tm9TaWdCaXRzKQotCi0gICAgbWVzc2FnZS5vcHRp
b25hbF9mbG9hdCA9IC1rTW9zdFBvc0V4cG9uZW50T25lU2lnQml0Ci0gICAgbWVzc2FnZS5QYXJz
ZUZyb21TdHJpbmcobWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0
VHJ1ZShtZXNzYWdlLm9wdGlvbmFsX2Zsb2F0ID09IC1rTW9zdFBvc0V4cG9uZW50T25lU2lnQml0
KQotCi0gICAgIyBNb3N0IG5lZ2F0aXZlIGV4cG9uZW50LCBubyBzaWduaWZpY2FuZCBiaXRzIHNl
dC4KLSAgICBrTW9zdE5lZ0V4cG9uZW50Tm9TaWdCaXRzID0gbWF0aC5wb3coMiwgLTEyNykKLSAg
ICBtZXNzYWdlLm9wdGlvbmFsX2Zsb2F0ID0ga01vc3ROZWdFeHBvbmVudE5vU2lnQml0cwotICAg
IG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKG1lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoKSkKLSAg
ICBzZWxmLmFzc2VydFRydWUobWVzc2FnZS5vcHRpb25hbF9mbG9hdCA9PSBrTW9zdE5lZ0V4cG9u
ZW50Tm9TaWdCaXRzKQotCi0gICAgIyBNb3N0IG5lZ2F0aXZlIGV4cG9uZW50LCBvbmUgc2lnbmlm
aWNhbmQgYml0IHNldC4KLSAgICBrTW9zdE5lZ0V4cG9uZW50T25lU2lnQml0ID0gMS41ICogbWF0
aC5wb3coMiwgLTEyNykKLSAgICBtZXNzYWdlLm9wdGlvbmFsX2Zsb2F0ID0ga01vc3ROZWdFeHBv
bmVudE9uZVNpZ0JpdAotICAgIG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKG1lc3NhZ2UuU2VyaWFs
aXplVG9TdHJpbmcoKSkKLSAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZS5vcHRpb25hbF9mbG9h
dCA9PSBrTW9zdE5lZ0V4cG9uZW50T25lU2lnQml0KQotCi0gICAgIyBSZXBlYXQgbGFzdCB0d28g
Y2FzZXMgd2l0aCB2YWx1ZXMgb2YgdGhlIHNhbWUgbWFnbml0dWRlLCBidXQgbmVnYXRpdmUuCi0g
ICAgbWVzc2FnZS5vcHRpb25hbF9mbG9hdCA9IC1rTW9zdE5lZ0V4cG9uZW50Tm9TaWdCaXRzCi0g
ICAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcobWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQot
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLm9wdGlvbmFsX2Zsb2F0ID09IC1rTW9zdE5lZ0V4
cG9uZW50Tm9TaWdCaXRzKQotCi0gICAgbWVzc2FnZS5vcHRpb25hbF9mbG9hdCA9IC1rTW9zdE5l
Z0V4cG9uZW50T25lU2lnQml0Ci0gICAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcobWVzc2FnZS5T
ZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLm9wdGlvbmFs
X2Zsb2F0ID09IC1rTW9zdE5lZ0V4cG9uZW50T25lU2lnQml0KQotCi0gIGRlZiB0ZXN0RXh0cmVt
ZURvdWJsZVZhbHVlcyhzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbWVzc2FnZSA9IG1lc3Nh
Z2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0KLSAgICAjIE1vc3QgcG9zaXRpdmUgZXhwb25lbnQs
IG5vIHNpZ25pZmljYW5kIGJpdHMgc2V0LgotICAgIGtNb3N0UG9zRXhwb25lbnROb1NpZ0JpdHMg
PSBtYXRoLnBvdygyLCAxMDIzKQotICAgIG1lc3NhZ2Uub3B0aW9uYWxfZG91YmxlID0ga01vc3RQ
b3NFeHBvbmVudE5vU2lnQml0cwotICAgIG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKG1lc3NhZ2Uu
U2VyaWFsaXplVG9TdHJpbmcoKSkKLSAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZS5vcHRpb25h
bF9kb3VibGUgPT0ga01vc3RQb3NFeHBvbmVudE5vU2lnQml0cykKLQotICAgICMgTW9zdCBwb3Np
dGl2ZSBleHBvbmVudCwgb25lIHNpZ25pZmljYW5kIGJpdCBzZXQuCi0gICAga01vc3RQb3NFeHBv
bmVudE9uZVNpZ0JpdCA9IDEuNSAqIG1hdGgucG93KDIsIDEwMjMpCi0gICAgbWVzc2FnZS5vcHRp
b25hbF9kb3VibGUgPSBrTW9zdFBvc0V4cG9uZW50T25lU2lnQml0Ci0gICAgbWVzc2FnZS5QYXJz
ZUZyb21TdHJpbmcobWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0
VHJ1ZShtZXNzYWdlLm9wdGlvbmFsX2RvdWJsZSA9PSBrTW9zdFBvc0V4cG9uZW50T25lU2lnQml0
KQotCi0gICAgIyBSZXBlYXQgbGFzdCB0d28gY2FzZXMgd2l0aCB2YWx1ZXMgb2Ygc2FtZSBtYWdu
aXR1ZGUsIGJ1dCBuZWdhdGl2ZS4KLSAgICBtZXNzYWdlLm9wdGlvbmFsX2RvdWJsZSA9IC1rTW9z
dFBvc0V4cG9uZW50Tm9TaWdCaXRzCi0gICAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcobWVzc2Fn
ZS5TZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLm9wdGlv
bmFsX2RvdWJsZSA9PSAta01vc3RQb3NFeHBvbmVudE5vU2lnQml0cykKLQotICAgIG1lc3NhZ2Uu
b3B0aW9uYWxfZG91YmxlID0gLWtNb3N0UG9zRXhwb25lbnRPbmVTaWdCaXQKLSAgICBtZXNzYWdl
LlBhcnNlRnJvbVN0cmluZyhtZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCi0gICAgc2VsZi5h
c3NlcnRUcnVlKG1lc3NhZ2Uub3B0aW9uYWxfZG91YmxlID09IC1rTW9zdFBvc0V4cG9uZW50T25l
U2lnQml0KQotCi0gICAgIyBNb3N0IG5lZ2F0aXZlIGV4cG9uZW50LCBubyBzaWduaWZpY2FuZCBi
aXRzIHNldC4KLSAgICBrTW9zdE5lZ0V4cG9uZW50Tm9TaWdCaXRzID0gbWF0aC5wb3coMiwgLTEw
MjMpCi0gICAgbWVzc2FnZS5vcHRpb25hbF9kb3VibGUgPSBrTW9zdE5lZ0V4cG9uZW50Tm9TaWdC
aXRzCi0gICAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcobWVzc2FnZS5TZXJpYWxpemVUb1N0cmlu
ZygpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLm9wdGlvbmFsX2RvdWJsZSA9PSBrTW9z
dE5lZ0V4cG9uZW50Tm9TaWdCaXRzKQotCi0gICAgIyBNb3N0IG5lZ2F0aXZlIGV4cG9uZW50LCBv
bmUgc2lnbmlmaWNhbmQgYml0IHNldC4KLSAgICBrTW9zdE5lZ0V4cG9uZW50T25lU2lnQml0ID0g
MS41ICogbWF0aC5wb3coMiwgLTEwMjMpCi0gICAgbWVzc2FnZS5vcHRpb25hbF9kb3VibGUgPSBr
TW9zdE5lZ0V4cG9uZW50T25lU2lnQml0Ci0gICAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcobWVz
c2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLm9w
dGlvbmFsX2RvdWJsZSA9PSBrTW9zdE5lZ0V4cG9uZW50T25lU2lnQml0KQotCi0gICAgIyBSZXBl
YXQgbGFzdCB0d28gY2FzZXMgd2l0aCB2YWx1ZXMgb2YgdGhlIHNhbWUgbWFnbml0dWRlLCBidXQg
bmVnYXRpdmUuCi0gICAgbWVzc2FnZS5vcHRpb25hbF9kb3VibGUgPSAta01vc3ROZWdFeHBvbmVu
dE5vU2lnQml0cwotICAgIG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKG1lc3NhZ2UuU2VyaWFsaXpl
VG9TdHJpbmcoKSkKLSAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZS5vcHRpb25hbF9kb3VibGUg
PT0gLWtNb3N0TmVnRXhwb25lbnROb1NpZ0JpdHMpCi0KLSAgICBtZXNzYWdlLm9wdGlvbmFsX2Rv
dWJsZSA9IC1rTW9zdE5lZ0V4cG9uZW50T25lU2lnQml0Ci0gICAgbWVzc2FnZS5QYXJzZUZyb21T
dHJpbmcobWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLm9wdGlvbmFsX2RvdWJsZSA9PSAta01vc3ROZWdFeHBvbmVudE9uZVNpZ0JpdCkKLQot
ICBkZWYgdGVzdEZsb2F0UHJpbnRpbmcoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG1lc3Nh
Z2UgPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIG1lc3NhZ2Uub3B0aW9uYWxf
ZmxvYXQgPSAyLjAKLSAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtZXNzYWdlKSwgJ29wdGlvbmFs
X2Zsb2F0OiAyLjBcbicpCi0KLSAgZGVmIHRlc3RIaWdoUHJlY2lzaW9uRmxvYXRQcmludGluZyhz
ZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RB
bGxUeXBlcygpCi0gICAgbWVzc2FnZS5vcHRpb25hbF9kb3VibGUgPSAwLjEyMzQ1Njc4OTEyMzQ1
Njc4Ci0gICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywpOgotICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzdHIobWVzc2FnZSksICdvcHRpb25hbF9kb3VibGU6IDAuMTIzNDU2Nzg5MTIzNDU2Nzhc
bicpCi0gICAgZWxzZToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG1lc3NhZ2UpLCAnb3B0
aW9uYWxfZG91YmxlOiAwLjEyMzQ1Njc4OTEyM1xuJykKLQotICBkZWYgdGVzdFVua25vd25GaWVs
ZFByaW50aW5nKHNlbGYsIG1lc3NhZ2VfbW9kdWxlKToKLSAgICBwb3B1bGF0ZWQgPSBtZXNzYWdl
X21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIHRlc3RfdXRpbC5TZXRBbGxOb25MYXp5RmllbGRz
KHBvcHVsYXRlZCkKLSAgICBlbXB0eSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RFbXB0eU1lc3NhZ2Uo
KQotICAgIGVtcHR5LlBhcnNlRnJvbVN0cmluZyhwb3B1bGF0ZWQuU2VyaWFsaXplVG9TdHJpbmco
KSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlbXB0eSksICcnKQotCi0gIGRlZiB0ZXN0UmVw
ZWF0ZWROZXN0ZWRGaWVsZEl0ZXJhdGlvbihzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbXNn
ID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBtc2cucmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2UuYWRkKGJiPTEpCi0gICAgbXNnLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZChi
Yj0yKQotICAgIG1zZy5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoYmI9MykKLSAgICBtc2cu
cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKGJiPTQpCi0KLSAgICBzZWxmLmFzc2VydEVxdWFs
KFsxLCAyLCAzLCA0XSwKLSAgICAgICAgICAgICAgICAgICAgIFttLmJiIGZvciBtIGluIG1zZy5y
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbNCwgMywgMiwg
MV0sCi0gICAgICAgICAgICAgICAgICAgICBbbS5iYiBmb3IgbSBpbiByZXZlcnNlZChtc2cucmVw
ZWF0ZWRfbmVzdGVkX21lc3NhZ2UpXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKFs0LCAzLCAyLCAx
XSwKLSAgICAgICAgICAgICAgICAgICAgIFttLmJiIGZvciBtIGluIG1zZy5yZXBlYXRlZF9uZXN0
ZWRfbWVzc2FnZVs6Oi0xXV0pCi0KLSAgZGVmIHRlc3RTb3J0aW5nUmVwZWF0ZWRTY2FsYXJGaWVs
ZHNEZWZhdWx0Q29tcGFyYXRvcihzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgIiIiQ2hlY2sg
c29tZSBkaWZmZXJlbnQgdHlwZXMgd2l0aCB0aGUgZGVmYXVsdCBjb21wYXJhdG9yLiIiIgotICAg
IG1lc3NhZ2UgPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotCi0gICAgIyBUT0RPKG1h
dHRwKTogd291bGQgdGVzdGluZyBtb3JlIHNjYWxhciB0eXBlcyBzdHJlbmd0aGVuIHRlc3Q/Ci0g
ICAgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMSkKLSAgICBtZXNzYWdlLnJlcGVhdGVk
X2ludDMyLmFwcGVuZCgzKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzIuYXBwZW5kKDIpCi0g
ICAgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMi5zb3J0KCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1l
c3NhZ2UucmVwZWF0ZWRfaW50MzJbMF0sIDEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdl
LnJlcGVhdGVkX2ludDMyWzFdLCAyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZS5yZXBl
YXRlZF9pbnQzMlsyXSwgMykKLQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfZmxvYXQuYXBwZW5kKDEu
MSkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2Zsb2F0LmFwcGVuZCgxLjMpCi0gICAgbWVzc2FnZS5y
ZXBlYXRlZF9mbG9hdC5hcHBlbmQoMS4yKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfZmxvYXQuc29y
dCgpCi0gICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtZXNzYWdlLnJlcGVhdGVkX2Zsb2F0WzBd
LCAxLjEpCi0gICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtZXNzYWdlLnJlcGVhdGVkX2Zsb2F0
WzFdLCAxLjIpCi0gICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtZXNzYWdlLnJlcGVhdGVkX2Zs
b2F0WzJdLCAxLjMpCi0KLSAgICBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZy5hcHBlbmQoJ2EnKQot
ICAgIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nLmFwcGVuZCgnYycpCi0gICAgbWVzc2FnZS5yZXBl
YXRlZF9zdHJpbmcuYXBwZW5kKCdiJykKLSAgICBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZy5zb3J0
KCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nWzBdLCAnYScp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLnJlcGVhdGVkX3N0cmluZ1sxXSwgJ2InKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdbMl0sICdjJykKLQot
ICAgIG1lc3NhZ2UucmVwZWF0ZWRfYnl0ZXMuYXBwZW5kKGInYScpCi0gICAgbWVzc2FnZS5yZXBl
YXRlZF9ieXRlcy5hcHBlbmQoYidjJykKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2J5dGVzLmFwcGVu
ZChiJ2InKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfYnl0ZXMuc29ydCgpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChtZXNzYWdlLnJlcGVhdGVkX2J5dGVzWzBdLCBiJ2EnKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwobWVzc2FnZS5yZXBlYXRlZF9ieXRlc1sxXSwgYidiJykKLSAgICBzZWxmLmFzc2VydEVx
dWFsKG1lc3NhZ2UucmVwZWF0ZWRfYnl0ZXNbMl0sIGInYycpCi0KLSAgZGVmIHRlc3RTb3J0aW5n
UmVwZWF0ZWRTY2FsYXJGaWVsZHNDdXN0b21Db21wYXJhdG9yKHNlbGYsIG1lc3NhZ2VfbW9kdWxl
KToKLSAgICAiIiJDaGVjayBzb21lIGRpZmZlcmVudCB0eXBlcyB3aXRoIGN1c3RvbSBjb21wYXJh
dG9yLiIiIgotICAgIG1lc3NhZ2UgPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotCi0g
ICAgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoLTMpCi0gICAgbWVzc2FnZS5yZXBlYXRl
ZF9pbnQzMi5hcHBlbmQoLTIpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoLTEp
Ci0gICAgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMi5zb3J0KGtleT1hYnMpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChtZXNzYWdlLnJlcGVhdGVkX2ludDMyWzBdLCAtMSkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKG1lc3NhZ2UucmVwZWF0ZWRfaW50MzJbMV0sIC0yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bWVzc2FnZS5yZXBlYXRlZF9pbnQzMlsyXSwgLTMpCi0KLSAgICBtZXNzYWdlLnJlcGVhdGVkX3N0
cmluZy5hcHBlbmQoJ2FhYScpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmcuYXBwZW5kKCdi
YicpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmcuYXBwZW5kKCdjJykKLSAgICBtZXNzYWdl
LnJlcGVhdGVkX3N0cmluZy5zb3J0KGtleT1sZW4pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNz
YWdlLnJlcGVhdGVkX3N0cmluZ1swXSwgJ2MnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2Fn
ZS5yZXBlYXRlZF9zdHJpbmdbMV0sICdiYicpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdl
LnJlcGVhdGVkX3N0cmluZ1syXSwgJ2FhYScpCi0KLSAgZGVmIHRlc3RTb3J0aW5nUmVwZWF0ZWRD
b21wb3NpdGVGaWVsZHNDdXN0b21Db21wYXJhdG9yKHNlbGYsIG1lc3NhZ2VfbW9kdWxlKToKLSAg
ICAiIiJDaGVjayBwYXNzaW5nIGEgY3VzdG9tIGNvbXBhcmF0b3IgdG8gc29ydCBhIHJlcGVhdGVk
IGNvbXBvc2l0ZSBmaWVsZC4iIiIKLSAgICBtZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFs
bFR5cGVzKCkKLQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkuYmIg
PSAxCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDMKLSAg
ICBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpLmJiID0gMgotICAgIG1lc3Nh
Z2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkuYmIgPSA2Ci0gICAgbWVzc2FnZS5yZXBl
YXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDUKLSAgICBtZXNzYWdlLnJlcGVhdGVkX25l
c3RlZF9tZXNzYWdlLmFkZCgpLmJiID0gNAotICAgIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21l
c3NhZ2Uuc29ydChrZXk9b3BlcmF0b3IuYXR0cmdldHRlcignYmInKSkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VbMF0uYmIsIDEpCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbChtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlWzFdLmJiLCAyKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZVsyXS5i
YiwgMykKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3Nh
Z2VbM10uYmIsIDQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLnJlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlWzRdLmJiLCA1KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZS5yZXBlYXRl
ZF9uZXN0ZWRfbWVzc2FnZVs1XS5iYiwgNikKLQotICBkZWYgdGVzdFNvcnRpbmdSZXBlYXRlZENv
bXBvc2l0ZUZpZWxkc1N0YWJsZShzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgIiIiQ2hlY2sg
cGFzc2luZyBhIGN1c3RvbSBjb21wYXJhdG9yIHRvIHNvcnQgYSByZXBlYXRlZCBjb21wb3NpdGUg
ZmllbGQuIiIiCi0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0K
LSAgICBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpLmJiID0gMjEKLSAgICBt
ZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpLmJiID0gMjAKLSAgICBtZXNzYWdl
LnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpLmJiID0gMTMKLSAgICBtZXNzYWdlLnJlcGVh
dGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpLmJiID0gMzMKLSAgICBtZXNzYWdlLnJlcGVhdGVkX25l
c3RlZF9tZXNzYWdlLmFkZCgpLmJiID0gMTEKLSAgICBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9t
ZXNzYWdlLmFkZCgpLmJiID0gMjQKLSAgICBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdl
LmFkZCgpLmJiID0gMTAKLSAgICBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLnNvcnQo
a2V5PWxhbWJkYSB6OiB6LmJiIC8vIDEwKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAg
IFsxMywgMTEsIDEwLCAyMSwgMjAsIDI0LCAzM10sCi0gICAgICAgIFtuLmJiIGZvciBuIGluIG1l
c3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VdKQotCi0gICAgIyBNYWtlIHN1cmUgdGhhdCBm
b3IgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbiwgdGhlIHVuZGVybHlpbmcgZmllbGRzCi0gICAgIyBh
cmUgYWN0dWFsbHkgcmVvcmRlcmVkLgotICAgIHBiID0gbWVzc2FnZS5TZXJpYWxpemVUb1N0cmlu
ZygpCi0gICAgbWVzc2FnZS5DbGVhcigpCi0gICAgbWVzc2FnZS5NZXJnZUZyb21TdHJpbmcocGIp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgWzEzLCAxMSwgMTAsIDIxLCAyMCwgMjQs
IDMzXSwKLSAgICAgICAgW24uYmIgZm9yIG4gaW4gbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZV0pCi0KLSAgZGVmIHRlc3RSZXBlYXRlZENvbXBvc2l0ZUZpZWxkU29ydEFyZ3VtZW50cyhz
ZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgIiIiQ2hlY2sgc29ydGluZyBhIHJlcGVhdGVkIGNv
bXBvc2l0ZSBmaWVsZCB1c2luZyBsaXN0LnNvcnQoKSBhcmd1bWVudHMuIiIiCi0gICAgbWVzc2Fn
ZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0KLSAgICBnZXRfYmIgPSBvcGVyYXRv
ci5hdHRyZ2V0dGVyKCdiYicpCi0gICAgY21wX2JiID0gbGFtYmRhIGEsIGI6IGNtcChhLmJiLCBi
LmJiKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkuYmIgPSAxCi0g
ICAgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDMKLSAgICBtZXNz
YWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpLmJiID0gMgotICAgIG1lc3NhZ2UucmVw
ZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkuYmIgPSA2Ci0gICAgbWVzc2FnZS5yZXBlYXRlZF9u
ZXN0ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDUKLSAgICBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9t
ZXNzYWdlLmFkZCgpLmJiID0gNAotICAgIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Uu
c29ydChrZXk9Z2V0X2JiKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2suYmIgZm9yIGsgaW4gbWVz
c2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV0sCi0gICAgICAgICAgICAgICAgICAgICBbMSwg
MiwgMywgNCwgNSwgNl0pCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5zb3J0
KGtleT1nZXRfYmIsIHJldmVyc2U9VHJ1ZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKFtrLmJiIGZv
ciBrIGluIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VdLAotICAgICAgICAgICAgICAg
ICAgICAgWzYsIDUsIDQsIDMsIDIsIDFdKQotICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMs
KTogcmV0dXJuICAjIE5vIGNtcCBzb3J0aW5nIGluIFBZMy4KLSAgICBtZXNzYWdlLnJlcGVhdGVk
X25lc3RlZF9tZXNzYWdlLnNvcnQoc29ydF9mdW5jdGlvbj1jbXBfYmIpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChbay5iYiBmb3IgayBpbiBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlXSwK
LSAgICAgICAgICAgICAgICAgICAgIFsxLCAyLCAzLCA0LCA1LCA2XSkKLSAgICBtZXNzYWdlLnJl
cGVhdGVkX25lc3RlZF9tZXNzYWdlLnNvcnQoY21wPWNtcF9iYiwgcmV2ZXJzZT1UcnVlKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoW2suYmIgZm9yIGsgaW4gbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRf
bWVzc2FnZV0sCi0gICAgICAgICAgICAgICAgICAgICBbNiwgNSwgNCwgMywgMiwgMV0pCi0KLSAg
ZGVmIHRlc3RSZXBlYXRlZFNjYWxhckZpZWxkU29ydEFyZ3VtZW50cyhzZWxmLCBtZXNzYWdlX21v
ZHVsZSk6Ci0gICAgIiIiQ2hlY2sgc29ydGluZyBhIHNjYWxhciBmaWVsZCB1c2luZyBsaXN0LnNv
cnQoKSBhcmd1bWVudHMuIiIiCi0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxU
eXBlcygpCi0KLSAgICBtZXNzYWdlLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgtMykKLSAgICBtZXNz
YWdlLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgtMikKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2ludDMy
LmFwcGVuZCgtMSkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2ludDMyLnNvcnQoa2V5PWFicykKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVzc2FnZS5yZXBlYXRlZF9pbnQzMiksIFstMSwgLTIs
IC0zXSkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2ludDMyLnNvcnQoa2V5PWFicywgcmV2ZXJzZT1U
cnVlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZXNzYWdlLnJlcGVhdGVkX2ludDMyKSwg
Wy0zLCAtMiwgLTFdKQotICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywpOiAgIyBObyBjbXAg
c29ydGluZyBpbiBQWTMuCi0gICAgICBhYnNfY21wID0gbGFtYmRhIGEsIGI6IGNtcChhYnMoYSks
IGFicyhiKSkKLSAgICAgIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzIuc29ydChzb3J0X2Z1bmN0aW9u
PWFic19jbXApCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVzc2FnZS5yZXBlYXRlZF9p
bnQzMiksIFstMSwgLTIsIC0zXSkKLSAgICAgIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzIuc29ydChj
bXA9YWJzX2NtcCwgcmV2ZXJzZT1UcnVlKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1l
c3NhZ2UucmVwZWF0ZWRfaW50MzIpLCBbLTMsIC0yLCAtMV0pCi0KLSAgICBtZXNzYWdlLnJlcGVh
dGVkX3N0cmluZy5hcHBlbmQoJ2FhYScpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmcuYXBw
ZW5kKCdiYicpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmcuYXBwZW5kKCdjJykKLSAgICBt
ZXNzYWdlLnJlcGVhdGVkX3N0cmluZy5zb3J0KGtleT1sZW4pCi0gICAgc2VsZi5hc3NlcnRFcXVh
bChsaXN0KG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nKSwgWydjJywgJ2JiJywgJ2FhYSddKQotICAg
IG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nLnNvcnQoa2V5PWxlbiwgcmV2ZXJzZT1UcnVlKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZXNzYWdlLnJlcGVhdGVkX3N0cmluZyksIFsnYWFhJywg
J2JiJywgJ2MnXSkKLSAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsKTogICMgTm8gY21wIHNv
cnRpbmcgaW4gUFkzLgotICAgICAgbGVuX2NtcCA9IGxhbWJkYSBhLCBiOiBjbXAobGVuKGEpLCBs
ZW4oYikpCi0gICAgICBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZy5zb3J0KHNvcnRfZnVuY3Rpb249
bGVuX2NtcCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZXNzYWdlLnJlcGVhdGVkX3N0
cmluZyksIFsnYycsICdiYicsICdhYWEnXSkKLSAgICAgIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5n
LnNvcnQoY21wPWxlbl9jbXAsIHJldmVyc2U9VHJ1ZSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bGlzdChtZXNzYWdlLnJlcGVhdGVkX3N0cmluZyksIFsnYWFhJywgJ2JiJywgJ2MnXSkKLQotICBk
ZWYgdGVzdFJlcGVhdGVkRmllbGRzQ29tcGFyYWJsZShzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0g
ICAgbTEgPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIG0yID0gbWVzc2FnZV9t
b2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBtMS5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMCkKLSAg
ICBtMS5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMSkKLSAgICBtMS5yZXBlYXRlZF9pbnQzMi5hcHBl
bmQoMikKLSAgICBtMi5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMCkKLSAgICBtMi5yZXBlYXRlZF9p
bnQzMi5hcHBlbmQoMSkKLSAgICBtMi5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMikKLSAgICBtMS5y
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDEKLSAgICBtMS5yZXBlYXRlZF9uZXN0
ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDIKLSAgICBtMS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5h
ZGQoKS5iYiA9IDMKLSAgICBtMi5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDEK
LSAgICBtMi5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDIKLSAgICBtMi5yZXBl
YXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDMKLQotICAgIGlmIHN5cy52ZXJzaW9uX2lu
Zm8gPj0gKDMsKTogcmV0dXJuICAjIE5vIGNtcCgpIGluIFBZMy4KLQotICAgICMgVGhlc2UgY29t
cGFyaXNvbnMgc2hvdWxkIG5vdCByYWlzZSBlcnJvcnMuCi0gICAgXyA9IG0xIDwgbTIKLSAgICBf
ID0gbTEucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgPCBtMi5yZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZQotCi0gICAgIyBNYWtlIHN1cmUgY21wIGFsd2F5cyB3b3Jrcy4gSWYgaXQgd2Fzbid0IGRlZmlu
ZWQsIHRoZXNlIHdvdWxkIGJlCi0gICAgIyBpZCgpIGNvbXBhcmlzb25zIGFuZCB3b3VsZCBhbGwg
ZmFpbC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChtMSwgbTIpLCAwKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY21wKG0xLnJlcGVhdGVkX2ludDMyLCBtMi5yZXBlYXRlZF9pbnQzMiksIDApCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbChjbXAobTEucmVwZWF0ZWRfaW50MzIsIFswLCAxLCAyXSksIDAp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChjbXAobTEucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgbTIucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UpLCAwKQot
ICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICMgQ2FuJ3QgY29t
cGFyZSByZXBlYXRlZCBjb21wb3NpdGUgY29udGFpbmVycyB0byBsaXN0cy4KLSAgICAgIGNtcCht
MS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSwgbTIucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VbOl0p
Ci0KLSAgICAjIFRPRE8oYW51cmFhZyk6IEltcGxlbWVudCBleHRlbnNpb25kaWN0IGNvbXBhcmlz
b24gaW4gQysrIGFuZCB0aGVuIGFkZCB0ZXN0Ci0KLSAgZGVmIHRlc3RSZXBlYXRlZEZpZWxkc0Fy
ZVNlcXVlbmNlcyhzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbSA9IG1lc3NhZ2VfbW9kdWxl
LlRlc3RBbGxUeXBlcygpCi0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0ucmVwZWF0ZWRfaW50
MzIsIGNvbGxlY3Rpb25zLk11dGFibGVTZXF1ZW5jZSkKLSAgICBzZWxmLmFzc2VydElzSW5zdGFu
Y2UobS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29sbGVjdGlvbnMuTXV0YWJsZVNlcXVlbmNlKQotCi0gIGRlZiBlbnN1cmVOZXN0ZWRNZXNzYWdl
RXhpc3RzKHNlbGYsIG1zZywgYXR0cmlidXRlKToKLSAgICAiIiJNYWtlIHN1cmUgdGhhdCBhIG5l
c3RlZCBtZXNzYWdlIG9iamVjdCBleGlzdHMuCi0KLSAgICBBcyBzb29uIGFzIGEgbmVzdGVkIG1l
c3NhZ2UgYXR0cmlidXRlIGlzIGFjY2Vzc2VkLCBpdCB3aWxsIGJlIHByZXNlbnQgaW4gdGhlCi0g
ICAgX2ZpZWxkcyBkaWN0LCB3aXRob3V0IGJlaW5nIG1hcmtlZCBhcyBhY3R1YWxseSBiZWluZyBz
ZXQuCi0gICAgIiIiCi0gICAgZ2V0YXR0cihtc2csIGF0dHJpYnV0ZSkKLSAgICBzZWxmLmFzc2Vy
dEZhbHNlKG1zZy5IYXNGaWVsZChhdHRyaWJ1dGUpKQotCi0gIGRlZiB0ZXN0T25lb2ZHZXRDYXNl
Tm9uZXhpc3RpbmdGaWVsZChzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbSA9IG1lc3NhZ2Vf
bW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwg
bS5XaGljaE9uZW9mLCAnbm9fc3VjaF9vbmVvZl9maWVsZCcpCi0KLSAgZGVmIHRlc3RPbmVvZkRl
ZmF1bHRWYWx1ZXMoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG0gPSBtZXNzYWdlX21vZHVs
ZS5UZXN0QWxsVHlwZXMoKQotICAgIHNlbGYuYXNzZXJ0SXMoTm9uZSwgbS5XaGljaE9uZW9mKCdv
bmVvZl9maWVsZCcpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5IYXNGaWVsZCgnb25lb2ZfdWlu
dDMyJykpCi0KLSAgICAjIE9uZW9mIGlzIHNldCBldmVuIHdoZW4gc2V0dGluZyBpdCB0byBhIGRl
ZmF1bHQgdmFsdWUuCi0gICAgbS5vbmVvZl91aW50MzIgPSAwCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgnb25lb2ZfdWludDMyJywgbS5XaGljaE9uZW9mKCdvbmVvZl9maWVsZCcpKQotICAgIHNlbGYu
YXNzZXJ0VHJ1ZShtLkhhc0ZpZWxkKCdvbmVvZl91aW50MzInKSkKLSAgICBzZWxmLmFzc2VydEZh
bHNlKG0uSGFzRmllbGQoJ29uZW9mX3N0cmluZycpKQotCi0gICAgbS5vbmVvZl9zdHJpbmcgPSAi
IgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ29uZW9mX3N0cmluZycsIG0uV2hpY2hPbmVvZignb25l
b2ZfZmllbGQnKSkKLSAgICBzZWxmLmFzc2VydFRydWUobS5IYXNGaWVsZCgnb25lb2Zfc3RyaW5n
JykpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShtLkhhc0ZpZWxkKCdvbmVvZl91aW50MzInKSkKLQot
ICBkZWYgdGVzdE9uZW9mU2VtYW50aWNzKHNlbGYsIG1lc3NhZ2VfbW9kdWxlKToKLSAgICBtID0g
bWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2VydElzKE5vbmUsIG0u
V2hpY2hPbmVvZignb25lb2ZfZmllbGQnKSkKLQotICAgIG0ub25lb2ZfdWludDMyID0gMTEKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKCdvbmVvZl91aW50MzInLCBtLldoaWNoT25lb2YoJ29uZW9mX2Zp
ZWxkJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG0uSGFzRmllbGQoJ29uZW9mX3VpbnQzMicpKQot
Ci0gICAgbS5vbmVvZl9zdHJpbmcgPSB1J2ZvbycKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdvbmVv
Zl9zdHJpbmcnLCBtLldoaWNoT25lb2YoJ29uZW9mX2ZpZWxkJykpCi0gICAgc2VsZi5hc3NlcnRG
YWxzZShtLkhhc0ZpZWxkKCdvbmVvZl91aW50MzInKSkKLSAgICBzZWxmLmFzc2VydFRydWUobS5I
YXNGaWVsZCgnb25lb2Zfc3RyaW5nJykpCi0KLSAgICAjIFJlYWQgbmVzdGVkIG1lc3NhZ2UgYWNj
ZXNzb3Igd2l0aG91dCBhY2Nlc3Npbmcgc3VibWVzc2FnZS4KLSAgICBtLm9uZW9mX25lc3RlZF9t
ZXNzYWdlCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnb25lb2Zfc3RyaW5nJywgbS5XaGljaE9uZW9m
KCdvbmVvZl9maWVsZCcpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLkhhc0ZpZWxkKCdvbmVvZl9z
dHJpbmcnKSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKG0uSGFzRmllbGQoJ29uZW9mX25lc3RlZF9t
ZXNzYWdlJykpCi0KLSAgICAjIFJlYWQgYWNjZXNzb3Igb2YgbmVzdGVkIG1lc3NhZ2Ugd2l0aG91
dCBhY2Nlc3Npbmcgc3VibWVzc2FnZS4KLSAgICBtLm9uZW9mX25lc3RlZF9tZXNzYWdlLmJiCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgnb25lb2Zfc3RyaW5nJywgbS5XaGljaE9uZW9mKCdvbmVvZl9m
aWVsZCcpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLkhhc0ZpZWxkKCdvbmVvZl9zdHJpbmcnKSkK
LSAgICBzZWxmLmFzc2VydEZhbHNlKG0uSGFzRmllbGQoJ29uZW9mX25lc3RlZF9tZXNzYWdlJykp
Ci0KLSAgICBtLm9uZW9mX25lc3RlZF9tZXNzYWdlLmJiID0gMTEKLSAgICBzZWxmLmFzc2VydEVx
dWFsKCdvbmVvZl9uZXN0ZWRfbWVzc2FnZScsIG0uV2hpY2hPbmVvZignb25lb2ZfZmllbGQnKSkK
LSAgICBzZWxmLmFzc2VydEZhbHNlKG0uSGFzRmllbGQoJ29uZW9mX3N0cmluZycpKQotICAgIHNl
bGYuYXNzZXJ0VHJ1ZShtLkhhc0ZpZWxkKCdvbmVvZl9uZXN0ZWRfbWVzc2FnZScpKQotCi0gICAg
bS5vbmVvZl9ieXRlcyA9IGInYmInCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnb25lb2ZfYnl0ZXMn
LCBtLldoaWNoT25lb2YoJ29uZW9mX2ZpZWxkJykpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShtLkhh
c0ZpZWxkKCdvbmVvZl9uZXN0ZWRfbWVzc2FnZScpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLkhh
c0ZpZWxkKCdvbmVvZl9ieXRlcycpKQotCi0gIGRlZiB0ZXN0T25lb2ZDb21wb3NpdGVGaWVsZFJl
YWRBY2Nlc3Moc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG0gPSBtZXNzYWdlX21vZHVsZS5U
ZXN0QWxsVHlwZXMoKQotICAgIG0ub25lb2ZfdWludDMyID0gMTEKLQotICAgIHNlbGYuZW5zdXJl
TmVzdGVkTWVzc2FnZUV4aXN0cyhtLCAnb25lb2ZfbmVzdGVkX21lc3NhZ2UnKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ29uZW9mX3VpbnQzMicsIG0uV2hpY2hPbmVvZignb25lb2ZfZmllbGQnKSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKDExLCBtLm9uZW9mX3VpbnQzMikKLQotICBkZWYgdGVzdE9u
ZW9mV2hpY2hPbmVvZihzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbSA9IG1lc3NhZ2VfbW9k
dWxlLlRlc3RBbGxUeXBlcygpCi0gICAgc2VsZi5hc3NlcnRJcyhOb25lLCBtLldoaWNoT25lb2Yo
J29uZW9mX2ZpZWxkJykpCi0gICAgaWYgbWVzc2FnZV9tb2R1bGUgaXMgdW5pdHRlc3RfcGIyOgot
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLkhhc0ZpZWxkKCdvbmVvZl9maWVsZCcpKQotCi0gICAg
bS5vbmVvZl91aW50MzIgPSAxMQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ29uZW9mX3VpbnQzMics
IG0uV2hpY2hPbmVvZignb25lb2ZfZmllbGQnKSkKLSAgICBpZiBtZXNzYWdlX21vZHVsZSBpcyB1
bml0dGVzdF9wYjI6Ci0gICAgICBzZWxmLmFzc2VydFRydWUobS5IYXNGaWVsZCgnb25lb2ZfZmll
bGQnKSkKLQotICAgIG0ub25lb2ZfYnl0ZXMgPSBiJ2JiJwotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J29uZW9mX2J5dGVzJywgbS5XaGljaE9uZW9mKCdvbmVvZl9maWVsZCcpKQotCi0gICAgbS5DbGVh
ckZpZWxkKCdvbmVvZl9ieXRlcycpCi0gICAgc2VsZi5hc3NlcnRJcyhOb25lLCBtLldoaWNoT25l
b2YoJ29uZW9mX2ZpZWxkJykpCi0gICAgaWYgbWVzc2FnZV9tb2R1bGUgaXMgdW5pdHRlc3RfcGIy
OgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLkhhc0ZpZWxkKCdvbmVvZl9maWVsZCcpKQotCi0g
IGRlZiB0ZXN0T25lb2ZDbGVhckZpZWxkKHNlbGYsIG1lc3NhZ2VfbW9kdWxlKToKLSAgICBtID0g
bWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBtLm9uZW9mX3VpbnQzMiA9IDExCi0g
ICAgbS5DbGVhckZpZWxkKCdvbmVvZl9maWVsZCcpCi0gICAgaWYgbWVzc2FnZV9tb2R1bGUgaXMg
dW5pdHRlc3RfcGIyOgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLkhhc0ZpZWxkKCdvbmVvZl9m
aWVsZCcpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5IYXNGaWVsZCgnb25lb2ZfdWludDMyJykp
Ci0gICAgc2VsZi5hc3NlcnRJcyhOb25lLCBtLldoaWNoT25lb2YoJ29uZW9mX2ZpZWxkJykpCi0K
LSAgZGVmIHRlc3RPbmVvZkNsZWFyU2V0RmllbGQoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAg
IG0gPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIG0ub25lb2ZfdWludDMyID0g
MTEKLSAgICBtLkNsZWFyRmllbGQoJ29uZW9mX3VpbnQzMicpCi0gICAgaWYgbWVzc2FnZV9tb2R1
bGUgaXMgdW5pdHRlc3RfcGIyOgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLkhhc0ZpZWxkKCdv
bmVvZl9maWVsZCcpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5IYXNGaWVsZCgnb25lb2ZfdWlu
dDMyJykpCi0gICAgc2VsZi5hc3NlcnRJcyhOb25lLCBtLldoaWNoT25lb2YoJ29uZW9mX2ZpZWxk
JykpCi0KLSAgZGVmIHRlc3RPbmVvZkNsZWFyVW5zZXRGaWVsZChzZWxmLCBtZXNzYWdlX21vZHVs
ZSk6Ci0gICAgbSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgbS5vbmVvZl91
aW50MzIgPSAxMQotICAgIHNlbGYuZW5zdXJlTmVzdGVkTWVzc2FnZUV4aXN0cyhtLCAnb25lb2Zf
bmVzdGVkX21lc3NhZ2UnKQotICAgIG0uQ2xlYXJGaWVsZCgnb25lb2ZfbmVzdGVkX21lc3NhZ2Un
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTEsIG0ub25lb2ZfdWludDMyKQotICAgIGlmIG1lc3Nh
Z2VfbW9kdWxlIGlzIHVuaXR0ZXN0X3BiMjoKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLkhhc0Zp
ZWxkKCdvbmVvZl9maWVsZCcpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLkhhc0ZpZWxkKCdvbmVv
Zl91aW50MzInKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdvbmVvZl91aW50MzInLCBtLldoaWNo
T25lb2YoJ29uZW9mX2ZpZWxkJykpCi0KLSAgZGVmIHRlc3RPbmVvZkRlc2VyaWFsaXplKHNlbGYs
IG1lc3NhZ2VfbW9kdWxlKToKLSAgICBtID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkK
LSAgICBtLm9uZW9mX3VpbnQzMiA9IDExCi0gICAgbTIgPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxs
VHlwZXMoKQotICAgIG0yLlBhcnNlRnJvbVN0cmluZyhtLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgnb25lb2ZfdWludDMyJywgbTIuV2hpY2hPbmVvZignb25lb2Zf
ZmllbGQnKSkKLQotICBkZWYgdGVzdE9uZW9mQ29weUZyb20oc2VsZiwgbWVzc2FnZV9tb2R1bGUp
OgotICAgIG0gPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIG0ub25lb2ZfdWlu
dDMyID0gMTEKLSAgICBtMiA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgbTIu
Q29weUZyb20obSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdvbmVvZl91aW50MzInLCBtMi5XaGlj
aE9uZW9mKCdvbmVvZl9maWVsZCcpKQotCi0gIGRlZiB0ZXN0T25lb2ZOZXN0ZWRNZXJnZUZyb20o
c2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG0gPSBtZXNzYWdlX21vZHVsZS5OZXN0ZWRUZXN0
QWxsVHlwZXMoKQotICAgIG0ucGF5bG9hZC5vbmVvZl91aW50MzIgPSAxMQotICAgIG0yID0gbWVz
c2FnZV9tb2R1bGUuTmVzdGVkVGVzdEFsbFR5cGVzKCkKLSAgICBtMi5wYXlsb2FkLm9uZW9mX2J5
dGVzID0gYidiYicKLSAgICBtMi5jaGlsZC5wYXlsb2FkLm9uZW9mX2J5dGVzID0gYidiYicKLSAg
ICBtMi5NZXJnZUZyb20obSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdvbmVvZl91aW50MzInLCBt
Mi5wYXlsb2FkLldoaWNoT25lb2YoJ29uZW9mX2ZpZWxkJykpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgnb25lb2ZfYnl0ZXMnLCBtMi5jaGlsZC5wYXlsb2FkLldoaWNoT25lb2YoJ29uZW9mX2ZpZWxk
JykpCi0KLSAgZGVmIHRlc3RPbmVvZk1lc3NhZ2VNZXJnZUZyb20oc2VsZiwgbWVzc2FnZV9tb2R1
bGUpOgotICAgIG0gPSBtZXNzYWdlX21vZHVsZS5OZXN0ZWRUZXN0QWxsVHlwZXMoKQotICAgIG0u
cGF5bG9hZC5vbmVvZl9uZXN0ZWRfbWVzc2FnZS5iYiA9IDExCi0gICAgbS5jaGlsZC5wYXlsb2Fk
Lm9uZW9mX25lc3RlZF9tZXNzYWdlLmJiID0gMTIKLSAgICBtMiA9IG1lc3NhZ2VfbW9kdWxlLk5l
c3RlZFRlc3RBbGxUeXBlcygpCi0gICAgbTIucGF5bG9hZC5vbmVvZl91aW50MzIgPSAxMwotICAg
IG0yLk1lcmdlRnJvbShtKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ29uZW9mX25lc3RlZF9tZXNz
YWdlJywKLSAgICAgICAgICAgICAgICAgICAgIG0yLnBheWxvYWQuV2hpY2hPbmVvZignb25lb2Zf
ZmllbGQnKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdvbmVvZl9uZXN0ZWRfbWVzc2FnZScsCi0g
ICAgICAgICAgICAgICAgICAgICBtMi5jaGlsZC5wYXlsb2FkLldoaWNoT25lb2YoJ29uZW9mX2Zp
ZWxkJykpCi0KLSAgZGVmIHRlc3RPbmVvZk5lc3RlZE1lc3NhZ2VJbml0KHNlbGYsIG1lc3NhZ2Vf
bW9kdWxlKToKLSAgICBtID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKAotICAgICAgICBv
bmVvZl9uZXN0ZWRfbWVzc2FnZT1tZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMuTmVzdGVkTWVz
c2FnZSgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ29uZW9mX25lc3RlZF9tZXNzYWdlJywgbS5X
aGljaE9uZW9mKCdvbmVvZl9maWVsZCcpKQotCi0gIGRlZiB0ZXN0T25lb2ZDbGVhcihzZWxmLCBt
ZXNzYWdlX21vZHVsZSk6Ci0gICAgbSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0g
ICAgbS5vbmVvZl91aW50MzIgPSAxMQotICAgIG0uQ2xlYXIoKQotICAgIHNlbGYuYXNzZXJ0SXNO
b25lKG0uV2hpY2hPbmVvZignb25lb2ZfZmllbGQnKSkKLSAgICBtLm9uZW9mX2J5dGVzID0gYidi
YicKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdvbmVvZl9ieXRlcycsIG0uV2hpY2hPbmVvZignb25l
b2ZfZmllbGQnKSkKLQotICBkZWYgdGVzdEFzc2lnbkJ5dGVTdHJpbmdUb1VuaWNvZGVGaWVsZChz
ZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgIiIiQXNzaWduaW5nIGEgYnl0ZSBzdHJpbmcgdG8g
YSBzdHJpbmcgZmllbGQgc2hvdWxkIHJlc3VsdAotICAgIGluIHRoZSB2YWx1ZSBiZWluZyBjb252
ZXJ0ZWQgdG8gYSBVbmljb2RlIHN0cmluZy4iIiIKLSAgICBtID0gbWVzc2FnZV9tb2R1bGUuVGVz
dEFsbFR5cGVzKCkKLSAgICBtLm9wdGlvbmFsX3N0cmluZyA9IHN0cignJykKLSAgICBzZWxmLmFz
c2VydElzSW5zdGFuY2UobS5vcHRpb25hbF9zdHJpbmcsIHNpeC50ZXh0X3R5cGUpCi0KLSAgZGVm
IHRlc3RMb25nVmFsdWVkU2xpY2Uoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgICIiIkl0IHNo
b3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgbG9uZy12YWx1ZWQgaW5kaWNpZXMgaW4gc2xpY2VzCi0K
LSAgICBUaGlzIGRpZG4ndCB1c2VkIHRvIHdvcmsgaW4gdGhlIHYyIEMrKyBpbXBsZW1lbnRhdGlv
bi4KLSAgICAiIiIKLSAgICBtID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLQotICAg
ICMgUmVwZWF0ZWQgc2NhbGFyCi0gICAgbS5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMSkKLSAgICBz
bCA9IG0ucmVwZWF0ZWRfaW50MzJbbG9uZygwKTpsb25nKGxlbihtLnJlcGVhdGVkX2ludDMyKSld
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5yZXBlYXRlZF9pbnQzMiksIGxlbihzbCkpCi0K
LSAgICAjIFJlcGVhdGVkIGNvbXBvc2l0ZQotICAgIG0ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Uu
YWRkKCkuYmIgPSAzCi0gICAgc2wgPSBtLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlW2xvbmcoMCk6
bG9uZyhsZW4obS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSkpXQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwobGVuKG0ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UpLCBsZW4oc2wpKQotCi0gIGRlZiB0ZXN0
RXh0ZW5kU2hvdWxkTm90U3dhbGxvd0V4Y2VwdGlvbnMoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgot
ICAgICIiIlRoaXMgZGlkbid0IHVzZSB0byB3b3JrIGluIHRoZSB2MiBDKysgaW1wbGVtZW50YXRp
b24uIiIiCi0gICAgbSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIF86Ci0gICAgICBtLnJlcGVhdGVkX2ludDMy
LmV4dGVuZChhIGZvciBpIGluIHJhbmdlKDEwKSkgICMgcHlsaW50OiBkaXNhYmxlPXVuZGVmaW5l
ZC12YXJpYWJsZQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBfOgot
ICAgICAgbS5yZXBlYXRlZF9uZXN0ZWRfZW51bS5leHRlbmQoCi0gICAgICAgICAgYSBmb3IgaSBp
biByYW5nZSgxMCkpICAjIHB5bGludDogZGlzYWJsZT11bmRlZmluZWQtdmFyaWFibGUKLQotICBG
QUxTWV9WQUxVRVMgPSBbTm9uZSwgRmFsc2UsIDAsIDAuMCwgYicnLCB1JycsIGJ5dGVhcnJheSgp
LCBbXSwge30sIHNldCgpXQotCi0gIGRlZiB0ZXN0RXh0ZW5kSW50MzJXaXRoTm90aGluZyhzZWxm
LCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgIiIiVGVzdCBuby1vcHMgZXh0ZW5kaW5nIHJlcGVhdGVk
IGludDMyIGZpZWxkcy4iIiIKLSAgICBtID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkK
LSAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoW10sIG0ucmVwZWF0ZWRfaW50MzIpCi0KLSAg
ICAjIFRPRE8ocHR1Y2tlcik6IERlcHJlY2F0ZSB0aGlzIGJlaGF2aW9yLiBiLzE4NDEzODYyCi0g
ICAgZm9yIGZhbHN5X3ZhbHVlIGluIE1lc3NhZ2VUZXN0LkZBTFNZX1ZBTFVFUzoKLSAgICAgIG0u
cmVwZWF0ZWRfaW50MzIuZXh0ZW5kKGZhbHN5X3ZhbHVlKQotICAgICAgc2VsZi5hc3NlcnRTZXF1
ZW5jZUVxdWFsKFtdLCBtLnJlcGVhdGVkX2ludDMyKQotCi0gICAgbS5yZXBlYXRlZF9pbnQzMi5l
eHRlbmQoW10pCi0gICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFtdLCBtLnJlcGVhdGVkX2lu
dDMyKQotCi0gIGRlZiB0ZXN0RXh0ZW5kRmxvYXRXaXRoTm90aGluZyhzZWxmLCBtZXNzYWdlX21v
ZHVsZSk6Ci0gICAgIiIiVGVzdCBuby1vcHMgZXh0ZW5kaW5nIHJlcGVhdGVkIGZsb2F0IGZpZWxk
cy4iIiIKLSAgICBtID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFz
c2VydFNlcXVlbmNlRXF1YWwoW10sIG0ucmVwZWF0ZWRfZmxvYXQpCi0KLSAgICAjIFRPRE8ocHR1
Y2tlcik6IERlcHJlY2F0ZSB0aGlzIGJlaGF2aW9yLiBiLzE4NDEzODYyCi0gICAgZm9yIGZhbHN5
X3ZhbHVlIGluIE1lc3NhZ2VUZXN0LkZBTFNZX1ZBTFVFUzoKLSAgICAgIG0ucmVwZWF0ZWRfZmxv
YXQuZXh0ZW5kKGZhbHN5X3ZhbHVlKQotICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFtd
LCBtLnJlcGVhdGVkX2Zsb2F0KQotCi0gICAgbS5yZXBlYXRlZF9mbG9hdC5leHRlbmQoW10pCi0g
ICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFtdLCBtLnJlcGVhdGVkX2Zsb2F0KQotCi0gIGRl
ZiB0ZXN0RXh0ZW5kU3RyaW5nV2l0aE5vdGhpbmcoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAg
ICIiIlRlc3Qgbm8tb3BzIGV4dGVuZGluZyByZXBlYXRlZCBzdHJpbmcgZmllbGRzLiIiIgotICAg
IG0gPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIHNlbGYuYXNzZXJ0U2VxdWVu
Y2VFcXVhbChbXSwgbS5yZXBlYXRlZF9zdHJpbmcpCi0KLSAgICAjIFRPRE8ocHR1Y2tlcik6IERl
cHJlY2F0ZSB0aGlzIGJlaGF2aW9yLiBiLzE4NDEzODYyCi0gICAgZm9yIGZhbHN5X3ZhbHVlIGlu
IE1lc3NhZ2VUZXN0LkZBTFNZX1ZBTFVFUzoKLSAgICAgIG0ucmVwZWF0ZWRfc3RyaW5nLmV4dGVu
ZChmYWxzeV92YWx1ZSkKLSAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChbXSwgbS5yZXBl
YXRlZF9zdHJpbmcpCi0KLSAgICBtLnJlcGVhdGVkX3N0cmluZy5leHRlbmQoW10pCi0gICAgc2Vs
Zi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFtdLCBtLnJlcGVhdGVkX3N0cmluZykKLQotICBkZWYgdGVz
dEV4dGVuZEludDMyV2l0aFB5dGhvbkxpc3Qoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgICIi
IlRlc3QgZXh0ZW5kaW5nIHJlcGVhdGVkIGludDMyIGZpZWxkcyB3aXRoIHB5dGhvbiBsaXN0cy4i
IiIKLSAgICBtID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2Vy
dFNlcXVlbmNlRXF1YWwoW10sIG0ucmVwZWF0ZWRfaW50MzIpCi0gICAgbS5yZXBlYXRlZF9pbnQz
Mi5leHRlbmQoWzBdKQotICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChbMF0sIG0ucmVwZWF0
ZWRfaW50MzIpCi0gICAgbS5yZXBlYXRlZF9pbnQzMi5leHRlbmQoWzEsIDJdKQotICAgIHNlbGYu
YXNzZXJ0U2VxdWVuY2VFcXVhbChbMCwgMSwgMl0sIG0ucmVwZWF0ZWRfaW50MzIpCi0gICAgbS5y
ZXBlYXRlZF9pbnQzMi5leHRlbmQoWzMsIDRdKQotICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVh
bChbMCwgMSwgMiwgMywgNF0sIG0ucmVwZWF0ZWRfaW50MzIpCi0KLSAgZGVmIHRlc3RFeHRlbmRG
bG9hdFdpdGhQeXRob25MaXN0KHNlbGYsIG1lc3NhZ2VfbW9kdWxlKToKLSAgICAiIiJUZXN0IGV4
dGVuZGluZyByZXBlYXRlZCBmbG9hdCBmaWVsZHMgd2l0aCBweXRob24gbGlzdHMuIiIiCi0gICAg
bSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgc2VsZi5hc3NlcnRTZXF1ZW5j
ZUVxdWFsKFtdLCBtLnJlcGVhdGVkX2Zsb2F0KQotICAgIG0ucmVwZWF0ZWRfZmxvYXQuZXh0ZW5k
KFswLjBdKQotICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChbMC4wXSwgbS5yZXBlYXRlZF9m
bG9hdCkKLSAgICBtLnJlcGVhdGVkX2Zsb2F0LmV4dGVuZChbMS4wLCAyLjBdKQotICAgIHNlbGYu
YXNzZXJ0U2VxdWVuY2VFcXVhbChbMC4wLCAxLjAsIDIuMF0sIG0ucmVwZWF0ZWRfZmxvYXQpCi0g
ICAgbS5yZXBlYXRlZF9mbG9hdC5leHRlbmQoWzMuMCwgNC4wXSkKLSAgICBzZWxmLmFzc2VydFNl
cXVlbmNlRXF1YWwoWzAuMCwgMS4wLCAyLjAsIDMuMCwgNC4wXSwgbS5yZXBlYXRlZF9mbG9hdCkK
LQotICBkZWYgdGVzdEV4dGVuZFN0cmluZ1dpdGhQeXRob25MaXN0KHNlbGYsIG1lc3NhZ2VfbW9k
dWxlKToKLSAgICAiIiJUZXN0IGV4dGVuZGluZyByZXBlYXRlZCBzdHJpbmcgZmllbGRzIHdpdGgg
cHl0aG9uIGxpc3RzLiIiIgotICAgIG0gPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQot
ICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChbXSwgbS5yZXBlYXRlZF9zdHJpbmcpCi0gICAg
bS5yZXBlYXRlZF9zdHJpbmcuZXh0ZW5kKFsnJ10pCi0gICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVx
dWFsKFsnJ10sIG0ucmVwZWF0ZWRfc3RyaW5nKQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nLmV4dGVu
ZChbJzExJywgJzIyJ10pCi0gICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFsnJywgJzExJywg
JzIyJ10sIG0ucmVwZWF0ZWRfc3RyaW5nKQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nLmV4dGVuZChb
JzMzJywgJzQ0J10pCi0gICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFsnJywgJzExJywgJzIy
JywgJzMzJywgJzQ0J10sIG0ucmVwZWF0ZWRfc3RyaW5nKQotCi0gIGRlZiB0ZXN0RXh0ZW5kU3Ry
aW5nV2l0aFN0cmluZyhzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgIiIiVGVzdCBleHRlbmRp
bmcgcmVwZWF0ZWQgc3RyaW5nIGZpZWxkcyB3aXRoIGNoYXJhY3RlcnMgZnJvbSBhIHN0cmluZy4i
IiIKLSAgICBtID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2Vy
dFNlcXVlbmNlRXF1YWwoW10sIG0ucmVwZWF0ZWRfc3RyaW5nKQotICAgIG0ucmVwZWF0ZWRfc3Ry
aW5nLmV4dGVuZCgnYWJjJykKLSAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoWydhJywgJ2In
LCAnYyddLCBtLnJlcGVhdGVkX3N0cmluZykKLQotICBjbGFzcyBUZXN0SXRlcmFibGUob2JqZWN0
KToKLSAgICAiIiJUaGlzIGl0ZXJhYmxlIG9iamVjdCBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIG51
bXB5LmFycmF5LgotCi0gICAgX19ub256ZXJvX18gZmFpbHMgZm9yIGxlbmd0aCA+IDEsIGFuZCBy
ZXR1cm5zIGJvb2woaXRlbVswXSkgZm9yIGxlbmd0aCA9PSAxLgotCi0gICAgIiIiCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgdmFsdWVzPU5vbmUpOgotICAgICAgc2VsZi5fbGlzdCA9IHZhbHVl
cyBvciBbXQotCi0gICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgotICAgICAgc2l6ZSA9IGxlbihz
ZWxmLl9saXN0KQotICAgICAgaWYgc2l6ZSA9PSAwOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAg
ICAgIGlmIHNpemUgPT0gMToKLSAgICAgICAgcmV0dXJuIGJvb2woc2VsZi5fbGlzdFswXSkKLSAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1RydXRoIHZhbHVlIGlzIGFtYmlndW91cy4nKQotCi0gICAg
ZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICByZXR1cm4gbGVuKHNlbGYuX2xpc3QpCi0KLSAgICBk
ZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICByZXR1cm4gc2VsZi5fbGlzdC5fX2l0ZXJfXygpCi0K
LSAgZGVmIHRlc3RFeHRlbmRJbnQzMldpdGhJdGVyYWJsZShzZWxmLCBtZXNzYWdlX21vZHVsZSk6
Ci0gICAgIiIiVGVzdCBleHRlbmRpbmcgcmVwZWF0ZWQgaW50MzIgZmllbGRzIHdpdGggaXRlcmFi
bGUuIiIiCi0gICAgbSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgc2VsZi5h
c3NlcnRTZXF1ZW5jZUVxdWFsKFtdLCBtLnJlcGVhdGVkX2ludDMyKQotICAgIG0ucmVwZWF0ZWRf
aW50MzIuZXh0ZW5kKE1lc3NhZ2VUZXN0LlRlc3RJdGVyYWJsZShbXSkpCi0gICAgc2VsZi5hc3Nl
cnRTZXF1ZW5jZUVxdWFsKFtdLCBtLnJlcGVhdGVkX2ludDMyKQotICAgIG0ucmVwZWF0ZWRfaW50
MzIuZXh0ZW5kKE1lc3NhZ2VUZXN0LlRlc3RJdGVyYWJsZShbMF0pKQotICAgIHNlbGYuYXNzZXJ0
U2VxdWVuY2VFcXVhbChbMF0sIG0ucmVwZWF0ZWRfaW50MzIpCi0gICAgbS5yZXBlYXRlZF9pbnQz
Mi5leHRlbmQoTWVzc2FnZVRlc3QuVGVzdEl0ZXJhYmxlKFsxLCAyXSkpCi0gICAgc2VsZi5hc3Nl
cnRTZXF1ZW5jZUVxdWFsKFswLCAxLCAyXSwgbS5yZXBlYXRlZF9pbnQzMikKLSAgICBtLnJlcGVh
dGVkX2ludDMyLmV4dGVuZChNZXNzYWdlVGVzdC5UZXN0SXRlcmFibGUoWzMsIDRdKSkKLSAgICBz
ZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoWzAsIDEsIDIsIDMsIDRdLCBtLnJlcGVhdGVkX2ludDMy
KQotCi0gIGRlZiB0ZXN0RXh0ZW5kRmxvYXRXaXRoSXRlcmFibGUoc2VsZiwgbWVzc2FnZV9tb2R1
bGUpOgotICAgICIiIlRlc3QgZXh0ZW5kaW5nIHJlcGVhdGVkIGZsb2F0IGZpZWxkcyB3aXRoIGl0
ZXJhYmxlLiIiIgotICAgIG0gPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIHNl
bGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChbXSwgbS5yZXBlYXRlZF9mbG9hdCkKLSAgICBtLnJlcGVh
dGVkX2Zsb2F0LmV4dGVuZChNZXNzYWdlVGVzdC5UZXN0SXRlcmFibGUoW10pKQotICAgIHNlbGYu
YXNzZXJ0U2VxdWVuY2VFcXVhbChbXSwgbS5yZXBlYXRlZF9mbG9hdCkKLSAgICBtLnJlcGVhdGVk
X2Zsb2F0LmV4dGVuZChNZXNzYWdlVGVzdC5UZXN0SXRlcmFibGUoWzAuMF0pKQotICAgIHNlbGYu
YXNzZXJ0U2VxdWVuY2VFcXVhbChbMC4wXSwgbS5yZXBlYXRlZF9mbG9hdCkKLSAgICBtLnJlcGVh
dGVkX2Zsb2F0LmV4dGVuZChNZXNzYWdlVGVzdC5UZXN0SXRlcmFibGUoWzEuMCwgMi4wXSkpCi0g
ICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFswLjAsIDEuMCwgMi4wXSwgbS5yZXBlYXRlZF9m
bG9hdCkKLSAgICBtLnJlcGVhdGVkX2Zsb2F0LmV4dGVuZChNZXNzYWdlVGVzdC5UZXN0SXRlcmFi
bGUoWzMuMCwgNC4wXSkpCi0gICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFswLjAsIDEuMCwg
Mi4wLCAzLjAsIDQuMF0sIG0ucmVwZWF0ZWRfZmxvYXQpCi0KLSAgZGVmIHRlc3RFeHRlbmRTdHJp
bmdXaXRoSXRlcmFibGUoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgICIiIlRlc3QgZXh0ZW5k
aW5nIHJlcGVhdGVkIHN0cmluZyBmaWVsZHMgd2l0aCBpdGVyYWJsZS4iIiIKLSAgICBtID0gbWVz
c2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwo
W10sIG0ucmVwZWF0ZWRfc3RyaW5nKQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nLmV4dGVuZChNZXNz
YWdlVGVzdC5UZXN0SXRlcmFibGUoW10pKQotICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChb
XSwgbS5yZXBlYXRlZF9zdHJpbmcpCi0gICAgbS5yZXBlYXRlZF9zdHJpbmcuZXh0ZW5kKE1lc3Nh
Z2VUZXN0LlRlc3RJdGVyYWJsZShbJyddKSkKLSAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwo
WycnXSwgbS5yZXBlYXRlZF9zdHJpbmcpCi0gICAgbS5yZXBlYXRlZF9zdHJpbmcuZXh0ZW5kKE1l
c3NhZ2VUZXN0LlRlc3RJdGVyYWJsZShbJzEnLCAnMiddKSkKLSAgICBzZWxmLmFzc2VydFNlcXVl
bmNlRXF1YWwoWycnLCAnMScsICcyJ10sIG0ucmVwZWF0ZWRfc3RyaW5nKQotICAgIG0ucmVwZWF0
ZWRfc3RyaW5nLmV4dGVuZChNZXNzYWdlVGVzdC5UZXN0SXRlcmFibGUoWyczJywgJzQnXSkpCi0g
ICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFsnJywgJzEnLCAnMicsICczJywgJzQnXSwgbS5y
ZXBlYXRlZF9zdHJpbmcpCi0KLSAgZGVmIHRlc3RQaWNrbGVSZXBlYXRlZFNjYWxhckNvbnRhaW5l
cihzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgIyBUT0RPKHRpYmVsbCk6IFRoZSBwdXJlLVB5
dGhvbiBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0IHBpY2tsaW5nIG9mCi0gICAgIyAgIHNjYWxhciBj
b250YWluZXJzIGluICpzb21lKiBjYXNlcy4gRm9yIG5vdyB0aGUgY3BwMiB2ZXJzaW9uCi0gICAg
IyAgIHRocm93cyBhbiBleGNlcHRpb24gdG8gYXZvaWQgYSBzZWdmYXVsdC4gSW52ZXN0aWdhdGUg
aWYgd2UKLSAgICAjICAgd2FudCB0byBzdXBwb3J0IHBpY2tsaW5nIG9mIHRoZXNlIGZpZWxkcy4K
LSAgICAjCi0gICAgIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6IGh0dHBzOi8vYjIuY29ycC5n
b29nbGUuY29tL3UvMC9pc3N1ZXMvMTg2Nzc4OTcKLSAgICBpZiAoYXBpX2ltcGxlbWVudGF0aW9u
LlR5cGUoKSAhPSAnY3BwJyBvcgotICAgICAgICBhcGlfaW1wbGVtZW50YXRpb24uVmVyc2lvbigp
ID09IDIpOgotICAgICAgcmV0dXJuCi0gICAgbSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBl
cygpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhwaWNrbGUuUGlja2xlRXJyb3IpIGFzIF86
Ci0gICAgICBwaWNrbGUuZHVtcHMobS5yZXBlYXRlZF9pbnQzMiwgcGlja2xlLkhJR0hFU1RfUFJP
VE9DT0wpCi0KLSAgZGVmIHRlc3RTb3J0RW1wdHlSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lcihz
ZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgIiIiRXhlcmNpc2UgYSBzY2VuYXJpbyB0aGF0IGhh
cyBsZWQgdG8gc2VnZmF1bHRzIGluIHRoZSBwYXN0LgotICAgICIiIgotICAgIG0gPSBtZXNzYWdl
X21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIG0ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Uuc29y
dCgpCi0KLSAgZGVmIHRlc3RIYXNGaWVsZE9uUmVwZWF0ZWRGaWVsZChzZWxmLCBtZXNzYWdlX21v
ZHVsZSk6Ci0gICAgIiIiVXNpbmcgSGFzRmllbGQgb24gYSByZXBlYXRlZCBmaWVsZCBzaG91bGQg
cmFpc2UgYW4gZXhjZXB0aW9uLgotICAgICIiIgotICAgIG0gPSBtZXNzYWdlX21vZHVsZS5UZXN0
QWxsVHlwZXMoKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgXzoK
LSAgICAgIG0uSGFzRmllbGQoJ3JlcGVhdGVkX2ludDMyJykKLQotICBkZWYgdGVzdFJlcGVhdGVk
U2NhbGFyRmllbGRQb3Aoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG0gPSBtZXNzYWdlX21v
ZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJv
cikgYXMgXzoKLSAgICAgIG0ucmVwZWF0ZWRfaW50MzIucG9wKCkKLSAgICBtLnJlcGVhdGVkX2lu
dDMyLmV4dGVuZChyYW5nZSg1KSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDQsIG0ucmVwZWF0ZWRf
aW50MzIucG9wKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtLnJlcGVhdGVkX2ludDMyLnBv
cCgwKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG0ucmVwZWF0ZWRfaW50MzIucG9wKDEpKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDNdLCBtLnJlcGVhdGVkX2ludDMyKQotCi0gIGRlZiB0
ZXN0UmVwZWF0ZWRDb21wb3NpdGVGaWVsZFBvcChzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAg
bSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJh
aXNlcyhJbmRleEVycm9yKSBhcyBfOgotICAgICAgbS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5w
b3AoKQotICAgIGZvciBpIGluIHJhbmdlKDUpOgotICAgICAgbiA9IG0ucmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2UuYWRkKCkKLSAgICAgIG4uYmIgPSBpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg0LCBt
LnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLnBvcCgpLmJiKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgbS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5wb3AoMCkuYmIpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCgyLCBtLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLnBvcCgxKS5iYikKLSAgICBzZWxmLmFz
c2VydEVxdWFsKFsxLCAzXSwgW24uYmIgZm9yIG4gaW4gbS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZV0pCi0KLQotIyBDbGFzcyB0byB0ZXN0IHByb3RvMi1vbmx5IGZlYXR1cmVzIChyZXF1aXJlZCwg
ZXh0ZW5zaW9ucywgZXRjLikKLWNsYXNzIFByb3RvMlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgot
Ci0gIGRlZiB0ZXN0RmllbGRQcmVzZW5jZShzZWxmKToKLSAgICBtZXNzYWdlID0gdW5pdHRlc3Rf
cGIyLlRlc3RBbGxUeXBlcygpCi0KLSAgICBzZWxmLmFzc2VydEZhbHNlKG1lc3NhZ2UuSGFzRmll
bGQoIm9wdGlvbmFsX2ludDMyIikpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShtZXNzYWdlLkhhc0Zp
ZWxkKCJvcHRpb25hbF9ib29sIikpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShtZXNzYWdlLkhhc0Zp
ZWxkKCJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSIpKQotCi0gICAgd2l0aCBzZWxmLmFzc2VydFJh
aXNlcyhWYWx1ZUVycm9yKToKLSAgICAgIG1lc3NhZ2UuSGFzRmllbGQoImZpZWxkX2RvZXNudF9l
eGlzdCIpCi0KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAg
bWVzc2FnZS5IYXNGaWVsZCgicmVwZWF0ZWRfaW50MzIiKQotICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICBtZXNzYWdlLkhhc0ZpZWxkKCJyZXBlYXRlZF9uZXN0
ZWRfbWVzc2FnZSIpCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG1lc3NhZ2Uub3B0aW9uYWxf
aW50MzIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgbWVzc2FnZS5vcHRpb25hbF9ib29s
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2Fn
ZS5iYikKLQotICAgICMgRmllbGRzIGFyZSBzZXQgZXZlbiB3aGVuIHNldHRpbmcgdGhlIHZhbHVl
cyB0byBkZWZhdWx0IHZhbHVlcy4KLSAgICBtZXNzYWdlLm9wdGlvbmFsX2ludDMyID0gMAotICAg
IG1lc3NhZ2Uub3B0aW9uYWxfYm9vbCA9IEZhbHNlCi0gICAgbWVzc2FnZS5vcHRpb25hbF9uZXN0
ZWRfbWVzc2FnZS5iYiA9IDAKLSAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgi
b3B0aW9uYWxfaW50MzIiKSkKLSAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgi
b3B0aW9uYWxfYm9vbCIpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0ZpZWxkKCJv
cHRpb25hbF9uZXN0ZWRfbWVzc2FnZSIpKQotCi0gICAgIyBTZXQgdGhlIGZpZWxkcyB0byBub24t
ZGVmYXVsdCB2YWx1ZXMuCi0gICAgbWVzc2FnZS5vcHRpb25hbF9pbnQzMiA9IDUKLSAgICBtZXNz
YWdlLm9wdGlvbmFsX2Jvb2wgPSBUcnVlCi0gICAgbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZS5iYiA9IDE1Ci0KLSAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgib3B0
aW9uYWxfaW50MzIiKSkKLSAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgib3B0
aW9uYWxfYm9vbCIpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0ZpZWxkKCJvcHRp
b25hbF9uZXN0ZWRfbWVzc2FnZSIpKQotCi0gICAgIyBDbGVhcmluZyB0aGUgZmllbGRzIHVuc2V0
cyB0aGVtIGFuZCByZXNldHMgdGhlaXIgdmFsdWUgdG8gZGVmYXVsdC4KLSAgICBtZXNzYWdlLkNs
ZWFyRmllbGQoIm9wdGlvbmFsX2ludDMyIikKLSAgICBtZXNzYWdlLkNsZWFyRmllbGQoIm9wdGlv
bmFsX2Jvb2wiKQotICAgIG1lc3NhZ2UuQ2xlYXJGaWVsZCgib3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UiKQotCi0gICAgc2VsZi5hc3NlcnRGYWxzZShtZXNzYWdlLkhhc0ZpZWxkKCJvcHRpb25hbF9p
bnQzMiIpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UobWVzc2FnZS5IYXNGaWVsZCgib3B0aW9uYWxf
Ym9vbCIpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UobWVzc2FnZS5IYXNGaWVsZCgib3B0aW9uYWxf
bmVzdGVkX21lc3NhZ2UiKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG1lc3NhZ2Uub3B0aW9u
YWxfaW50MzIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgbWVzc2FnZS5vcHRpb25hbF9i
b29sKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZS5iYikKLQotICAjIFRPRE8odGliZWxsKTogVGhlIEMrKyBpbXBsZW1lbnRhdGlvbnMgYWN0
dWFsbHkgYWxsb3dzIGFzc2lnbm1lbnQKLSAgIyBvZiB1bmtub3duIGVudW0gdmFsdWVzIHRvICpz
Y2FsYXIqIGZpZWxkcyAoYnV0IG5vdCByZXBlYXRlZAotICAjIGZpZWxkcykuIE9uY2UgY2hlY2tl
ZCBlbnVtIGZpZWxkcyBiZWNvbWVzIHRoZSBkZWZhdWx0IGluIHRoZQotICAjIFB5dGhvbiBpbXBs
ZW1lbnRhdGlvbiwgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgZm9sbG93IHN1aXQuCi0g
IGRlZiB0ZXN0QXNzaWduSW52YWxpZEVudW0oc2VsZik6Ci0gICAgIiIiSXQgc2hvdWxkIG5vdCBi
ZSBwb3NzaWJsZSB0byBhc3NpZ24gYW4gaW52YWxpZCBlbnVtIG51bWJlciB0byBhbgotICAgIGVu
dW0gZmllbGQuIiIiCi0gICAgbSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotCi0gICAg
d2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBfOgotICAgICAgbS5vcHRpb25h
bF9uZXN0ZWRfZW51bSA9IDEyMzQ1NjcKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9y
LCBtLnJlcGVhdGVkX25lc3RlZF9lbnVtLmFwcGVuZCwgMTIzNDU2NykKLQotICBkZWYgdGVzdEdv
bGRlbkV4dGVuc2lvbnMoc2VsZik6Ci0gICAgZ29sZGVuX2RhdGEgPSB0ZXN0X3V0aWwuR29sZGVu
RmlsZURhdGEoJ2dvbGRlbl9tZXNzYWdlJykKLSAgICBnb2xkZW5fbWVzc2FnZSA9IHVuaXR0ZXN0
X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucygpCi0gICAgZ29sZGVuX21lc3NhZ2UuUGFyc2VGcm9tU3Ry
aW5nKGdvbGRlbl9kYXRhKQotICAgIGFsbF9zZXQgPSB1bml0dGVzdF9wYjIuVGVzdEFsbEV4dGVu
c2lvbnMoKQotICAgIHRlc3RfdXRpbC5TZXRBbGxFeHRlbnNpb25zKGFsbF9zZXQpCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbChhbGxfc2V0LCBnb2xkZW5fbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKGdvbGRlbl9kYXRhLCBnb2xkZW5fbWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQotICAg
IGdvbGRlbl9jb3B5ID0gY29weS5kZWVwY29weShnb2xkZW5fbWVzc2FnZSkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKGdvbGRlbl9kYXRhLCBnb2xkZW5fY29weS5TZXJpYWxpemVUb1N0cmluZygpKQot
Ci0gIGRlZiB0ZXN0R29sZGVuUGFja2VkRXh0ZW5zaW9ucyhzZWxmKToKLSAgICBnb2xkZW5fZGF0
YSA9IHRlc3RfdXRpbC5Hb2xkZW5GaWxlRGF0YSgnZ29sZGVuX3BhY2tlZF9maWVsZHNfbWVzc2Fn
ZScpCi0gICAgZ29sZGVuX21lc3NhZ2UgPSB1bml0dGVzdF9wYjIuVGVzdFBhY2tlZEV4dGVuc2lv
bnMoKQotICAgIGdvbGRlbl9tZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhnb2xkZW5fZGF0YSkKLSAg
ICBhbGxfc2V0ID0gdW5pdHRlc3RfcGIyLlRlc3RQYWNrZWRFeHRlbnNpb25zKCkKLSAgICB0ZXN0
X3V0aWwuU2V0QWxsUGFja2VkRXh0ZW5zaW9ucyhhbGxfc2V0KQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoYWxsX3NldCwgZ29sZGVuX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChnb2xkZW5f
ZGF0YSwgYWxsX3NldC5TZXJpYWxpemVUb1N0cmluZygpKQotICAgIGdvbGRlbl9jb3B5ID0gY29w
eS5kZWVwY29weShnb2xkZW5fbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGdvbGRlbl9k
YXRhLCBnb2xkZW5fY29weS5TZXJpYWxpemVUb1N0cmluZygpKQotCi0gIGRlZiB0ZXN0UGlja2xl
SW5jb21wbGV0ZVByb3RvKHNlbGYpOgotICAgIGdvbGRlbl9tZXNzYWdlID0gdW5pdHRlc3RfcGIy
LlRlc3RSZXF1aXJlZChhPTEpCi0gICAgcGlja2xlZF9tZXNzYWdlID0gcGlja2xlLmR1bXBzKGdv
bGRlbl9tZXNzYWdlKQotCi0gICAgdW5waWNrbGVkX21lc3NhZ2UgPSBwaWNrbGUubG9hZHMocGlj
a2xlZF9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkX21lc3NhZ2UsIGdv
bGRlbl9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkX21lc3NhZ2UuYSwg
MSkKLSAgICAjIFRoaXMgaXMgc3RpbGwgYW4gaW5jb21wbGV0ZSBwcm90byAtIHNvIHNlcmlhbGl6
aW5nIHNob3VsZCBmYWlsCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMobWVzc2FnZS5FbmNvZGVFcnJv
ciwgdW5waWNrbGVkX21lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcpCi0KLQotICAjIFRPRE8oaGFi
ZXJtYW4pOiB0aGlzIGlzbid0IHJlYWxseSBhIHByb3RvMi1zcGVjaWZpYyB0ZXN0IGV4Y2VwdCB0
aGF0IHRoaXMKLSAgIyBtZXNzYWdlIGhhcyBhIHJlcXVpcmVkIGZpZWxkIGluIGl0LiAgU2hvdWxk
IHByb2JhYmx5IGJlIGZhY3RvcmVkIG91dCBzbwotICAjIHRoYXQgd2UgY2FuIHRlc3QgdGhlIG90
aGVyIHBhcnRzIHdpdGggcHJvdG8zLgotICBkZWYgdGVzdFBhcnNpbmdNZXJnZShzZWxmKToKLSAg
ICAiIiJDaGVjayB0aGUgbWVyZ2UgYmVoYXZpb3Igd2hlbiBhIHJlcXVpcmVkIG9yIG9wdGlvbmFs
IGZpZWxkIGFwcGVhcnMKLSAgICBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQuIiIiCi0gICAg
bWVzc2FnZXMgPSBbCi0gICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKSwKLSAgICAg
ICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpLAotICAgICAgICB1bml0dGVzdF9wYjIuVGVz
dEFsbFR5cGVzKCkgXQotICAgIG1lc3NhZ2VzWzBdLm9wdGlvbmFsX2ludDMyID0gMQotICAgIG1l
c3NhZ2VzWzFdLm9wdGlvbmFsX2ludDY0ID0gMgotICAgIG1lc3NhZ2VzWzJdLm9wdGlvbmFsX2lu
dDMyID0gMwotICAgIG1lc3NhZ2VzWzJdLm9wdGlvbmFsX3N0cmluZyA9ICdoZWxsbycKLQotICAg
IG1lcmdlZF9tZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgbWVyZ2Vk
X21lc3NhZ2Uub3B0aW9uYWxfaW50MzIgPSAzCi0gICAgbWVyZ2VkX21lc3NhZ2Uub3B0aW9uYWxf
aW50NjQgPSAyCi0gICAgbWVyZ2VkX21lc3NhZ2Uub3B0aW9uYWxfc3RyaW5nID0gJ2hlbGxvJwot
Ci0gICAgZ2VuZXJhdG9yID0gdW5pdHRlc3RfcGIyLlRlc3RQYXJzaW5nTWVyZ2UuUmVwZWF0ZWRG
aWVsZHNHZW5lcmF0b3IoKQotICAgIGdlbmVyYXRvci5maWVsZDEuZXh0ZW5kKG1lc3NhZ2VzKQot
ICAgIGdlbmVyYXRvci5maWVsZDIuZXh0ZW5kKG1lc3NhZ2VzKQotICAgIGdlbmVyYXRvci5maWVs
ZDMuZXh0ZW5kKG1lc3NhZ2VzKQotICAgIGdlbmVyYXRvci5leHQxLmV4dGVuZChtZXNzYWdlcykK
LSAgICBnZW5lcmF0b3IuZXh0Mi5leHRlbmQobWVzc2FnZXMpCi0gICAgZ2VuZXJhdG9yLmdyb3Vw
MS5hZGQoKS5maWVsZDEuTWVyZ2VGcm9tKG1lc3NhZ2VzWzBdKQotICAgIGdlbmVyYXRvci5ncm91
cDEuYWRkKCkuZmllbGQxLk1lcmdlRnJvbShtZXNzYWdlc1sxXSkKLSAgICBnZW5lcmF0b3IuZ3Jv
dXAxLmFkZCgpLmZpZWxkMS5NZXJnZUZyb20obWVzc2FnZXNbMl0pCi0gICAgZ2VuZXJhdG9yLmdy
b3VwMi5hZGQoKS5maWVsZDEuTWVyZ2VGcm9tKG1lc3NhZ2VzWzBdKQotICAgIGdlbmVyYXRvci5n
cm91cDIuYWRkKCkuZmllbGQxLk1lcmdlRnJvbShtZXNzYWdlc1sxXSkKLSAgICBnZW5lcmF0b3Iu
Z3JvdXAyLmFkZCgpLmZpZWxkMS5NZXJnZUZyb20obWVzc2FnZXNbMl0pCi0KLSAgICBkYXRhID0g
Z2VuZXJhdG9yLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLSAgICBwYXJzaW5nX21lcmdlID0gdW5pdHRl
c3RfcGIyLlRlc3RQYXJzaW5nTWVyZ2UoKQotICAgIHBhcnNpbmdfbWVyZ2UuUGFyc2VGcm9tU3Ry
aW5nKGRhdGEpCi0KLSAgICAjIFJlcXVpcmVkIGFuZCBvcHRpb25hbCBmaWVsZHMgc2hvdWxkIGJl
IG1lcmdlZC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNpbmdfbWVyZ2UucmVxdWlyZWRfYWxs
X3R5cGVzLCBtZXJnZWRfbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNpbmdfbWVy
Z2Uub3B0aW9uYWxfYWxsX3R5cGVzLCBtZXJnZWRfbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKHBhcnNpbmdfbWVyZ2Uub3B0aW9uYWxncm91cC5vcHRpb25hbF9ncm91cF9hbGxfdHlwZXMs
Ci0gICAgICAgICAgICAgICAgICAgICBtZXJnZWRfbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKHBhcnNpbmdfbWVyZ2UuRXh0ZW5zaW9uc1sKLSAgICAgICAgICAgICAgICAgICAgIHVuaXR0
ZXN0X3BiMi5UZXN0UGFyc2luZ01lcmdlLm9wdGlvbmFsX2V4dF0sCi0gICAgICAgICAgICAgICAg
ICAgICBtZXJnZWRfbWVzc2FnZSkKLQotICAgICMgUmVwZWF0ZWQgZmllbGRzIHNob3VsZCBub3Qg
YmUgbWVyZ2VkLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhcnNpbmdfbWVyZ2UucmVwZWF0
ZWRfYWxsX3R5cGVzKSwgMykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXJzaW5nX21lcmdl
LnJlcGVhdGVkZ3JvdXApLCAzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhcnNpbmdfbWVy
Z2UuRXh0ZW5zaW9uc1sKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RQYXJzaW5nTWVyZ2UucmVw
ZWF0ZWRfZXh0XSksIDMpCi0KLSAgZGVmIHRlc3RQeXRob25pY0luaXQoc2VsZik6Ci0gICAgbWVz
c2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoCi0gICAgICAgIG9wdGlvbmFsX2ludDMy
PTEwMCwKLSAgICAgICAgb3B0aW9uYWxfZml4ZWQzMj0yMDAsCi0gICAgICAgIG9wdGlvbmFsX2Zs
b2F0PTMwMC41LAotICAgICAgICBvcHRpb25hbF9ieXRlcz1iJ3gnLAotICAgICAgICBvcHRpb25h
bGdyb3VwPXsnYSc6IDQwMH0sCi0gICAgICAgIG9wdGlvbmFsX25lc3RlZF9tZXNzYWdlPXsnYmIn
OiA1MDB9LAotICAgICAgICBvcHRpb25hbF9uZXN0ZWRfZW51bT0nQkFaJywKLSAgICAgICAgcmVw
ZWF0ZWRncm91cD1beydhJzogNjAwfSwKLSAgICAgICAgICAgICAgICAgICAgICAgeydhJzogNzAw
fV0sCi0gICAgICAgIHJlcGVhdGVkX25lc3RlZF9lbnVtPVsnRk9PJywgdW5pdHRlc3RfcGIyLlRl
c3RBbGxUeXBlcy5CQVJdLAotICAgICAgICBkZWZhdWx0X2ludDMyPTgwMCwKLSAgICAgICAgb25l
b2Zfc3RyaW5nPSd5JykKLSAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWVzc2FnZSwgdW5pdHRl
c3RfcGIyLlRlc3RBbGxUeXBlcykKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEwMCwgbWVzc2FnZS5v
cHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIwMCwgbWVzc2FnZS5vcHRpb25h
bF9maXhlZDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMzAwLjUsIG1lc3NhZ2Uub3B0aW9uYWxf
ZmxvYXQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChiJ3gnLCBtZXNzYWdlLm9wdGlvbmFsX2J5dGVz
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDAwLCBtZXNzYWdlLm9wdGlvbmFsZ3JvdXAuYSkKLSAg
ICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSwg
dW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoNTAwLCBtZXNzYWdlLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLmJiKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5CQVosCi0gICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlLm9wdGlvbmFsX25lc3RlZF9lbnVtKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMiwgbGVuKG1lc3NhZ2UucmVwZWF0ZWRncm91cCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg2
MDAsIG1lc3NhZ2UucmVwZWF0ZWRncm91cFswXS5hKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNzAw
LCBtZXNzYWdlLnJlcGVhdGVkZ3JvdXBbMV0uYSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxl
bihtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9lbnVtKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVu
aXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuRk9PLAotICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZS5yZXBlYXRlZF9uZXN0ZWRfZW51bVswXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0
X3BiMi5UZXN0QWxsVHlwZXMuQkFSLAotICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXBl
YXRlZF9uZXN0ZWRfZW51bVsxXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDgwMCwgbWVzc2FnZS5k
ZWZhdWx0X2ludDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3knLCBtZXNzYWdlLm9uZW9mX3N0
cmluZykKLSAgICBzZWxmLmFzc2VydEZhbHNlKG1lc3NhZ2UuSGFzRmllbGQoJ29wdGlvbmFsX2lu
dDY0JykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4obWVzc2FnZS5yZXBlYXRlZF9mbG9h
dCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgbWVzc2FnZS5kZWZhdWx0X2ludDY0KQotCi0g
ICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMob3B0aW9uYWxfbmVzdGVkX2Vu
dW09dSdCQVonKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBl
cy5CQVosCi0gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm9wdGlvbmFsX25lc3RlZF9lbnVt
KQotCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgIHVuaXR0
ZXN0X3BiMi5UZXN0QWxsVHlwZXMoCi0gICAgICAgICAgb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2U9
eydJTlZBTElEX05FU1RFRF9GSUVMRCc6IDE3fSkKLQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlz
ZXMoVHlwZUVycm9yKToKLSAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoCi0gICAgICAg
ICAgb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2U9eydiYic6ICdJTlZBTElEX1ZBTFVFX1RZUEUnfSkK
LQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICB1bml0dGVz
dF9wYjIuVGVzdEFsbFR5cGVzKG9wdGlvbmFsX25lc3RlZF9lbnVtPSdJTlZBTElEX0xBQkVMJykK
LQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICB1bml0dGVz
dF9wYjIuVGVzdEFsbFR5cGVzKHJlcGVhdGVkX25lc3RlZF9lbnVtPSdGT08nKQotCi0KLQotIyBD
bGFzcyB0byB0ZXN0IHByb3RvMy1vbmx5IGZlYXR1cmVzL2JlaGF2aW9yICh1cGRhdGVkIGZpZWxk
IHByZXNlbmNlICYgZW51bXMpCi1jbGFzcyBQcm90bzNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
LQotICAjIFV0aWxpdHkgbWV0aG9kIGZvciBjb21wYXJpbmcgZXF1YWxpdHkgd2l0aCBhIG1hcC4K
LSAgZGVmIGFzc2VydE1hcEl0ZXJFcXVhbHMoc2VsZiwgbWFwX2l0ZXIsIGRpY3RfdmFsdWUpOgot
ICAgICMgQXZvaWQgbXV0YXRpbmcgY2FsbGVyJ3MgY29weS4KLSAgICBkaWN0X3ZhbHVlID0gZGlj
dChkaWN0X3ZhbHVlKQotCi0gICAgZm9yIGssIHYgaW4gbWFwX2l0ZXI6Ci0gICAgICBzZWxmLmFz
c2VydEVxdWFsKHYsIGRpY3RfdmFsdWVba10pCi0gICAgICBkZWwgZGljdF92YWx1ZVtrXQotCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCh7fSwgZGljdF92YWx1ZSkKLQotICBkZWYgdGVzdEZpZWxkUHJl
c2VuY2Uoc2VsZik6Ci0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3Byb3RvM19hcmVuYV9wYjIuVGVz
dEFsbFR5cGVzKCkKLQotICAgICMgV2UgY2FuJ3QgdGVzdCBwcmVzZW5jZSBvZiBub24tcmVwZWF0
ZWQsIG5vbi1zdWJtZXNzYWdlIGZpZWxkcy4KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IpOgotICAgICAgbWVzc2FnZS5IYXNGaWVsZCgnb3B0aW9uYWxfaW50MzInKQotICAg
IHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICBtZXNzYWdlLkhhc0Zp
ZWxkKCdvcHRpb25hbF9mbG9hdCcpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yKToKLSAgICAgIG1lc3NhZ2UuSGFzRmllbGQoJ29wdGlvbmFsX3N0cmluZycpCi0gICAgd2l0
aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgIG1lc3NhZ2UuSGFzRmllbGQo
J29wdGlvbmFsX2Jvb2wnKQotCi0gICAgIyBCdXQgd2UgY2FuIHN0aWxsIHRlc3QgcHJlc2VuY2Ug
b2Ygc3VibWVzc2FnZSBmaWVsZHMuCi0gICAgc2VsZi5hc3NlcnRGYWxzZShtZXNzYWdlLkhhc0Zp
ZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZScpKQotCi0gICAgIyBBcyB3aXRoIHByb3RvMiwg
d2UgY2FuJ3QgdGVzdCBwcmVzZW5jZSBvZiBmaWVsZHMgdGhhdCBkb24ndCBleGlzdCwgb3IKLSAg
ICAjIHJlcGVhdGVkIGZpZWxkcy4KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJy
b3IpOgotICAgICAgbWVzc2FnZS5IYXNGaWVsZCgnZmllbGRfZG9lc250X2V4aXN0JykKLQotICAg
IHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICBtZXNzYWdlLkhhc0Zp
ZWxkKCdyZXBlYXRlZF9pbnQzMicpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yKToKLSAgICAgIG1lc3NhZ2UuSGFzRmllbGQoJ3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlJykK
LQotICAgICMgRmllbGRzIHNob3VsZCBkZWZhdWx0IHRvIHRoZWlyIHR5cGUtc3BlY2lmaWMgZGVm
YXVsdC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG1lc3NhZ2Uub3B0aW9uYWxfaW50MzIpCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtZXNzYWdlLm9wdGlvbmFsX2Zsb2F0KQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJycsIG1lc3NhZ2Uub3B0aW9uYWxfc3RyaW5nKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoRmFsc2UsIG1lc3NhZ2Uub3B0aW9uYWxfYm9vbCkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDAsIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIpCi0KLSAgICAjIFNldHRpbmcg
YSBzdWJtZXNzYWdlIHNob3VsZCBzdGlsbCByZXR1cm4gcHJvcGVyIHByZXNlbmNlIGluZm9ybWF0
aW9uLgotICAgIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIgPSAwCi0gICAgc2Vs
Zi5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmllbGQoJ29wdGlvbmFsX25lc3RlZF9tZXNzYWdlJykp
Ci0KLSAgICAjIFNldCB0aGUgZmllbGRzIHRvIG5vbi1kZWZhdWx0IHZhbHVlcy4KLSAgICBtZXNz
YWdlLm9wdGlvbmFsX2ludDMyID0gNQotICAgIG1lc3NhZ2Uub3B0aW9uYWxfZmxvYXQgPSAxLjEK
LSAgICBtZXNzYWdlLm9wdGlvbmFsX3N0cmluZyA9ICdhYmMnCi0gICAgbWVzc2FnZS5vcHRpb25h
bF9ib29sID0gVHJ1ZQotICAgIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIgPSAx
NQotCi0gICAgIyBDbGVhcmluZyB0aGUgZmllbGRzIHVuc2V0cyB0aGVtIGFuZCByZXNldHMgdGhl
aXIgdmFsdWUgdG8gZGVmYXVsdC4KLSAgICBtZXNzYWdlLkNsZWFyRmllbGQoJ29wdGlvbmFsX2lu
dDMyJykKLSAgICBtZXNzYWdlLkNsZWFyRmllbGQoJ29wdGlvbmFsX2Zsb2F0JykKLSAgICBtZXNz
YWdlLkNsZWFyRmllbGQoJ29wdGlvbmFsX3N0cmluZycpCi0gICAgbWVzc2FnZS5DbGVhckZpZWxk
KCdvcHRpb25hbF9ib29sJykKLSAgICBtZXNzYWdlLkNsZWFyRmllbGQoJ29wdGlvbmFsX25lc3Rl
ZF9tZXNzYWdlJykKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbWVzc2FnZS5vcHRpb25hbF9p
bnQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG1lc3NhZ2Uub3B0aW9uYWxfZmxvYXQpCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgbWVzc2FnZS5vcHRpb25hbF9zdHJpbmcpCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbChGYWxzZSwgbWVzc2FnZS5vcHRpb25hbF9ib29sKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMCwgbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5iYikKLQotICBkZWYg
dGVzdEFzc2lnblVua25vd25FbnVtKHNlbGYpOgotICAgICIiIkFzc2lnbmluZyBhbiB1bmtub3du
IGVudW0gdmFsdWUgaXMgYWxsb3dlZCBhbmQgcHJlc2VydmVzIHRoZSB2YWx1ZS4iIiIKLSAgICBt
ID0gdW5pdHRlc3RfcHJvdG8zX2FyZW5hX3BiMi5UZXN0QWxsVHlwZXMoKQotCi0gICAgbS5vcHRp
b25hbF9uZXN0ZWRfZW51bSA9IDEyMzQ1NjcKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEyMzQ1Njcs
IG0ub3B0aW9uYWxfbmVzdGVkX2VudW0pCi0gICAgbS5yZXBlYXRlZF9uZXN0ZWRfZW51bS5hcHBl
bmQoMjIzMzQ0NTUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyMjMzNDQ1NSwgbS5yZXBlYXRlZF9u
ZXN0ZWRfZW51bVswXSkKLSAgICAjIEFzc2lnbm1lbnQgaXMgYSBkaWZmZXJlbnQgY29kZSBwYXRo
IHRoYW4gYXBwZW5kIGZvciB0aGUgQysrIGltcGwuCi0gICAgbS5yZXBlYXRlZF9uZXN0ZWRfZW51
bVswXSA9IDc2NTQzMjEKLSAgICBzZWxmLmFzc2VydEVxdWFsKDc2NTQzMjEsIG0ucmVwZWF0ZWRf
bmVzdGVkX2VudW1bMF0pCi0gICAgc2VyaWFsaXplZCA9IG0uU2VyaWFsaXplVG9TdHJpbmcoKQot
Ci0gICAgbTIgPSB1bml0dGVzdF9wcm90bzNfYXJlbmFfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAg
bTIuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxMjM0
NTY3LCBtMi5vcHRpb25hbF9uZXN0ZWRfZW51bSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDc2NTQz
MjEsIG0yLnJlcGVhdGVkX25lc3RlZF9lbnVtWzBdKQotCi0gICMgTWFwIGlzbid0IHJlYWxseSBh
IHByb3RvMy1vbmx5IGZlYXR1cmUuIEJ1dCB0aGVyZSBpcyBubyBwcm90bzIgZXF1aXZhbGVudAot
ICAjIG9mIGdvb2dsZS9wcm90b2J1Zi9tYXBfdW5pdHRlc3QucHJvdG8gcmlnaHQgbm93LCBzbyBp
dCdzIG5vdCBlYXN5IHRvCi0gICMgdGVzdCBib3RoIHdpdGggdGhlIHNhbWUgdGVzdCBsaWtlIHdl
IGRvIGZvciB0aGUgb3RoZXIgcHJvdG8yL3Byb3RvMyB0ZXN0cy4KLSAgIyAoZ29vZ2xlL3Byb3Rv
YnVmL21hcF9wcm90b2J1Zl91bml0dGVzdC5wcm90byBpcyB2ZXJ5IGRpZmZlcmVudCBpbiB0aGUg
c2V0Ci0gICMgb2YgbWVzc2FnZXMgYW5kIGZpZWxkcyBpdCBjb250YWlucykuCi0gIGRlZiB0ZXN0
U2NhbGFyTWFwRGVmYXVsdHMoc2VsZik6Ci0gICAgbXNnID0gbWFwX3VuaXR0ZXN0X3BiMi5UZXN0
TWFwKCkKLQotICAgICMgU2NhbGFycyBzdGFydCBvdXQgdW5zZXQuCi0gICAgc2VsZi5hc3NlcnRG
YWxzZSgtMTIzIGluIG1zZy5tYXBfaW50MzJfaW50MzIpCi0gICAgc2VsZi5hc3NlcnRGYWxzZSgt
MioqMzMgaW4gbXNnLm1hcF9pbnQ2NF9pbnQ2NCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKDEyMyBp
biBtc2cubWFwX3VpbnQzMl91aW50MzIpCi0gICAgc2VsZi5hc3NlcnRGYWxzZSgyKiozMyBpbiBt
c2cubWFwX3VpbnQ2NF91aW50NjQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZSgxMjMgaW4gbXNnLm1h
cF9pbnQzMl9kb3VibGUpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShGYWxzZSBpbiBtc2cubWFwX2Jv
b2xfYm9vbCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKCdhYmMnIGluIG1zZy5tYXBfc3RyaW5nX3N0
cmluZykKLSAgICBzZWxmLmFzc2VydEZhbHNlKDExMSBpbiBtc2cubWFwX2ludDMyX2J5dGVzKQot
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoODg4IGluIG1zZy5tYXBfaW50MzJfZW51bSkKLQotICAgICMg
QWNjZXNzaW5nIGFuIHVuc2V0IGtleSByZXR1cm5zIHRoZSBkZWZhdWx0LgotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMCwgbXNnLm1hcF9pbnQzMl9pbnQzMlstMTIzXSkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKDAsIG1zZy5tYXBfaW50NjRfaW50NjRbLTIqKjMzXSkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDAsIG1zZy5tYXBfdWludDMyX3VpbnQzMlsxMjNdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwg
bXNnLm1hcF91aW50NjRfdWludDY0WzIqKjMzXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAuMCwg
bXNnLm1hcF9pbnQzMl9kb3VibGVbMTIzXSkKLSAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5j
ZShtc2cubWFwX2ludDMyX2RvdWJsZVsxMjNdLCBmbG9hdCkpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bChGYWxzZSwgbXNnLm1hcF9ib29sX2Jvb2xbRmFsc2VdKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShp
c2luc3RhbmNlKG1zZy5tYXBfYm9vbF9ib29sW0ZhbHNlXSwgYm9vbCkpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgnJywgbXNnLm1hcF9zdHJpbmdfc3RyaW5nWydhYmMnXSkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKGInJywgbXNnLm1hcF9pbnQzMl9ieXRlc1sxMTFdKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMCwgbXNnLm1hcF9pbnQzMl9lbnVtWzg4OF0pCi0KLSAgICAjIEl0IGFsc28gc2V0cyB0aGUg
dmFsdWUgaW4gdGhlIG1hcAotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMTIzIGluIG1zZy5tYXBfaW50
MzJfaW50MzIpCi0gICAgc2VsZi5hc3NlcnRUcnVlKC0yKiozMyBpbiBtc2cubWFwX2ludDY0X2lu
dDY0KQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgxMjMgaW4gbXNnLm1hcF91aW50MzJfdWludDMyKQot
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiozMyBpbiBtc2cubWFwX3VpbnQ2NF91aW50NjQpCi0gICAg
c2VsZi5hc3NlcnRUcnVlKDEyMyBpbiBtc2cubWFwX2ludDMyX2RvdWJsZSkKLSAgICBzZWxmLmFz
c2VydFRydWUoRmFsc2UgaW4gbXNnLm1hcF9ib29sX2Jvb2wpCi0gICAgc2VsZi5hc3NlcnRUcnVl
KCdhYmMnIGluIG1zZy5tYXBfc3RyaW5nX3N0cmluZykKLSAgICBzZWxmLmFzc2VydFRydWUoMTEx
IGluIG1zZy5tYXBfaW50MzJfYnl0ZXMpCi0gICAgc2VsZi5hc3NlcnRUcnVlKDg4OCBpbiBtc2cu
bWFwX2ludDMyX2VudW0pCi0KLSAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnLm1hcF9zdHJp
bmdfc3RyaW5nWydhYmMnXSwgc2l4LnRleHRfdHlwZSkKLQotICAgICMgQWNjZXNzaW5nIGFuIHVu
c2V0IGtleSBzdGlsbCB0aHJvd3MgVHlwZUVycm9yIGlmIHRoZSB0eXBlIG9mIHRoZSBrZXkKLSAg
ICAjIGlzIGluY29ycmVjdC4KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6
Ci0gICAgICBtc2cubWFwX3N0cmluZ19zdHJpbmdbMTIzXQotCi0gICAgd2l0aCBzZWxmLmFzc2Vy
dFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgMTIzIGluIG1zZy5tYXBfc3RyaW5nX3N0cmluZwot
Ci0gIGRlZiB0ZXN0TWFwR2V0KHNlbGYpOgotICAgICMgTmVlZCB0byB0ZXN0IHRoYXQgZ2V0KCkg
cHJvcGVybHkgcmV0dXJucyB0aGUgZGVmYXVsdCwgZXZlbiB0aG91Z2ggdGhlIGRpY3QKLSAgICAj
IGhhcyBkZWZhdWx0ZGljdC1saWtlIHNlbWFudGljcy4KLSAgICBtc2cgPSBtYXBfdW5pdHRlc3Rf
cGIyLlRlc3RNYXAoKQotCi0gICAgc2VsZi5hc3NlcnRJc05vbmUobXNnLm1hcF9pbnQzMl9pbnQz
Mi5nZXQoNSkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxMCwgbXNnLm1hcF9pbnQzMl9pbnQzMi5n
ZXQoNSwgMTApKQotICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1zZy5tYXBfaW50MzJfaW50MzIuZ2V0
KDUpKQotCi0gICAgbXNnLm1hcF9pbnQzMl9pbnQzMls1XSA9IDE1Ci0gICAgc2VsZi5hc3NlcnRF
cXVhbCgxNSwgbXNnLm1hcF9pbnQzMl9pbnQzMi5nZXQoNSkpCi0KLSAgICBzZWxmLmFzc2VydElz
Tm9uZShtc2cubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS5nZXQoNSkpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgxMCwgbXNnLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UuZ2V0KDUsIDEwKSkKLQot
ICAgIHN1Ym1zZyA9IG1zZy5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlWzVdCi0gICAgc2VsZi5h
c3NlcnRJcyhzdWJtc2csIG1zZy5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlLmdldCg1KSkKLQot
ICBkZWYgdGVzdFNjYWxhck1hcChzZWxmKToKLSAgICBtc2cgPSBtYXBfdW5pdHRlc3RfcGIyLlRl
c3RNYXAoKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4obXNnLm1hcF9pbnQzMl9pbnQz
MikpCi0gICAgc2VsZi5hc3NlcnRGYWxzZSg1IGluIG1zZy5tYXBfaW50MzJfaW50MzIpCi0KLSAg
ICBtc2cubWFwX2ludDMyX2ludDMyWy0xMjNdID0gLTQ1NgotICAgIG1zZy5tYXBfaW50NjRfaW50
NjRbLTIqKjMzXSA9IC0yKiozNAotICAgIG1zZy5tYXBfdWludDMyX3VpbnQzMlsxMjNdID0gNDU2
Ci0gICAgbXNnLm1hcF91aW50NjRfdWludDY0WzIqKjMzXSA9IDIqKjM0Ci0gICAgbXNnLm1hcF9z
dHJpbmdfc3RyaW5nWydhYmMnXSA9ICcxMjMnCi0gICAgbXNnLm1hcF9pbnQzMl9lbnVtWzg4OF0g
PSAyCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBtc2cuRmluZEluaXRpYWxpemF0aW9uRXJy
b3JzKCkpCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihtc2cubWFwX3N0cmluZ19zdHJp
bmcpKQotCi0gICAgIyBCYWQga2V5LgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVy
cm9yKToKLSAgICAgIG1zZy5tYXBfc3RyaW5nX3N0cmluZ1sxMjNdID0gJzEyMycKLQotICAgICMg
VmVyaWZ5IHRoYXQgdHJ5aW5nIHRvIGFzc2lnbiBhIGJhZCBrZXkgZG9lc24ndCBhY3R1YWxseSBh
ZGQgYSBtZW1iZXIgdG8KLSAgICAjIHRoZSBtYXAuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBs
ZW4obXNnLm1hcF9zdHJpbmdfc3RyaW5nKSkKLQotICAgICMgQmFkIHZhbHVlLgotICAgIHdpdGgg
c2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgIG1zZy5tYXBfc3RyaW5nX3N0cmlu
Z1snMTIzJ10gPSAxMjMKLQotICAgIHNlcmlhbGl6ZWQgPSBtc2cuU2VyaWFsaXplVG9TdHJpbmco
KQotICAgIG1zZzIgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAoKQotICAgIG1zZzIuUGFyc2VG
cm9tU3RyaW5nKHNlcmlhbGl6ZWQpCi0KLSAgICAjIEJhZCBrZXkuCi0gICAgd2l0aCBzZWxmLmFz
c2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgbXNnMi5tYXBfc3RyaW5nX3N0cmluZ1sxMjNd
ID0gJzEyMycKLQotICAgICMgQmFkIHZhbHVlLgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMo
VHlwZUVycm9yKToKLSAgICAgIG1zZzIubWFwX3N0cmluZ19zdHJpbmdbJzEyMyddID0gMTIzCi0K
LSAgICBzZWxmLmFzc2VydEVxdWFsKC00NTYsIG1zZzIubWFwX2ludDMyX2ludDMyWy0xMjNdKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTIqKjM0LCBtc2cyLm1hcF9pbnQ2NF9pbnQ2NFstMioqMzNd
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDU2LCBtc2cyLm1hcF91aW50MzJfdWludDMyWzEyM10p
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgyKiozNCwgbXNnMi5tYXBfdWludDY0X3VpbnQ2NFsyKioz
M10pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnMTIzJywgbXNnMi5tYXBfc3RyaW5nX3N0cmluZ1sn
YWJjJ10pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtc2cyLm1hcF9pbnQzMl9lbnVtWzg4OF0p
Ci0KLSAgZGVmIHRlc3RTdHJpbmdVbmljb2RlQ29udmVyc2lvbkluTWFwKHNlbGYpOgotICAgIG1z
ZyA9IG1hcF91bml0dGVzdF9wYjIuVGVzdE1hcCgpCi0KLSAgICB1bmljb2RlX29iaiA9IHUnXHUx
MjM0JwotICAgIGJ5dGVzX29iaiA9IHVuaWNvZGVfb2JqLmVuY29kZSgndXRmOCcpCi0KLSAgICBt
c2cubWFwX3N0cmluZ19zdHJpbmdbYnl0ZXNfb2JqXSA9IGJ5dGVzX29iagotCi0gICAgKGtleSwg
dmFsdWUpID0gbGlzdChtc2cubWFwX3N0cmluZ19zdHJpbmcuaXRlbXMoKSlbMF0KLQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoa2V5LCB1bmljb2RlX29iaikKLSAgICBzZWxmLmFzc2VydEVxdWFsKHZh
bHVlLCB1bmljb2RlX29iaikKLQotICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrZXksIHNpeC50
ZXh0X3R5cGUpCi0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLCBzaXgudGV4dF90eXBl
KQotCi0gIGRlZiB0ZXN0TWVzc2FnZU1hcChzZWxmKToKLSAgICBtc2cgPSBtYXBfdW5pdHRlc3Rf
cGIyLlRlc3RNYXAoKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4obXNnLm1hcF9pbnQz
Ml9mb3JlaWduX21lc3NhZ2UpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoNSBpbiBtc2cubWFwX2lu
dDMyX2ZvcmVpZ25fbWVzc2FnZSkKLQotICAgIG1zZy5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdl
WzEyM10KLSAgICAjIGdldF9vcl9jcmVhdGUoKSBpcyBhbiBhbGlhcyBmb3IgZ2V0aXRlbS4KLSAg
ICBtc2cubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS5nZXRfb3JfY3JlYXRlKC00NTYpCi0KLSAg
ICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihtc2cubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSkp
Ci0gICAgc2VsZi5hc3NlcnRJbigxMjMsIG1zZy5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlKQot
ICAgIHNlbGYuYXNzZXJ0SW4oLTQ1NiwgbXNnLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UpCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4obXNnLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2Up
KQotCi0gICAgIyBCYWQga2V5LgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9y
KToKLSAgICAgIG1zZy5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlWycxMjMnXQotCi0gICAgIyBD
YW4ndCBhc3NpZ24gZGlyZWN0bHkgdG8gc3VibWVzc2FnZS4KLSAgICB3aXRoIHNlbGYuYXNzZXJ0
UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgbXNnLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2Vb
OTk5XSA9IG1zZy5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlWzEyM10KLQotICAgICMgVmVyaWZ5
IHRoYXQgdHJ5aW5nIHRvIGFzc2lnbiBhIGJhZCBrZXkgZG9lc24ndCBhY3R1YWxseSBhZGQgYSBt
ZW1iZXIgdG8KLSAgICAjIHRoZSBtYXAuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4obXNn
Lm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UpKQotCi0gICAgc2VyaWFsaXplZCA9IG1zZy5TZXJp
YWxpemVUb1N0cmluZygpCi0gICAgbXNnMiA9IG1hcF91bml0dGVzdF9wYjIuVGVzdE1hcCgpCi0g
ICAgbXNnMi5QYXJzZUZyb21TdHJpbmcoc2VyaWFsaXplZCkKLQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMiwgbGVuKG1zZzIubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSkpCi0gICAgc2VsZi5hc3Nl
cnRJbigxMjMsIG1zZzIubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSkKLSAgICBzZWxmLmFzc2Vy
dEluKC00NTYsIG1zZzIubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDIsIGxlbihtc2cyLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UpKQotCi0gIGRlZiB0
ZXN0TWVyZ2VGcm9tKHNlbGYpOgotICAgIG1zZyA9IG1hcF91bml0dGVzdF9wYjIuVGVzdE1hcCgp
Ci0gICAgbXNnLm1hcF9pbnQzMl9pbnQzMlsxMl0gPSAzNAotICAgIG1zZy5tYXBfaW50MzJfaW50
MzJbNTZdID0gNzgKLSAgICBtc2cubWFwX2ludDY0X2ludDY0WzIyXSA9IDMzCi0gICAgbXNnLm1h
cF9pbnQzMl9mb3JlaWduX21lc3NhZ2VbMTExXS5jID0gNQotICAgIG1zZy5tYXBfaW50MzJfZm9y
ZWlnbl9tZXNzYWdlWzIyMl0uYyA9IDEwCi0KLSAgICBtc2cyID0gbWFwX3VuaXR0ZXN0X3BiMi5U
ZXN0TWFwKCkKLSAgICBtc2cyLm1hcF9pbnQzMl9pbnQzMlsxMl0gPSA1NQotICAgIG1zZzIubWFw
X2ludDY0X2ludDY0Wzg4XSA9IDk5Ci0gICAgbXNnMi5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdl
WzIyMl0uYyA9IDE1Ci0KLSAgICBtc2cyLk1lcmdlRnJvbShtc2cpCi0KLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDM0LCBtc2cyLm1hcF9pbnQzMl9pbnQzMlsxMl0pCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCg3OCwgbXNnMi5tYXBfaW50MzJfaW50MzJbNTZdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMzMs
IG1zZzIubWFwX2ludDY0X2ludDY0WzIyXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBtc2cy
Lm1hcF9pbnQ2NF9pbnQ2NFs4OF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBtc2cyLm1hcF9p
bnQzMl9mb3JlaWduX21lc3NhZ2VbMTExXS5jKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAsIG1z
ZzIubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZVsyMjJdLmMpCi0KLSAgICAjIFZlcmlmeSB0aGF0
IHRoZXJlIGlzIG9ubHkgb25lIGVudHJ5IHBlciBrZXksIGV2ZW4gdGhvdWdoIHRoZSBNZXJnZUZy
b20KLSAgICAjIG1heSBoYXZlIGludGVybmFsbHkgY3JlYXRlZCBtdWx0aXBsZSBlbnRyaWVzIGZv
ciBhIHNpbmdsZSBrZXkgaW4gdGhlCi0gICAgIyBsaXN0IHJlcHJlc2VudGF0aW9uLgotICAgIGFz
X2RpY3QgPSB7fQotICAgIGZvciBrZXkgaW4gbXNnMi5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdl
OgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShrZXkgaW4gYXNfZGljdCkKLSAgICAgIGFzX2RpY3Rb
a2V5XSA9IG1zZzIubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZVtrZXldLmMKLQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoezExMTogNSwgMjIyOiAxMH0sIGFzX2RpY3QpCi0KLSAgICAjIFNwZWNpYWwg
Y2FzZTogdGVzdCB0aGF0IGRlbGV0ZSBvZiBpdGVtIHJlYWxseSByZW1vdmVzIHRoZSBpdGVtLCBl
dmVuIGlmCi0gICAgIyB0aGVyZSBtaWdodCBoYXZlIHBoeXNpY2FsbHkgYmVlbiBkdXBsaWNhdGUg
a2V5cyBkdWUgdG8gdGhlIHByZXZpb3VzIG1lcmdlLgotICAgICMgVGhpcyBpcyBvbmx5IGEgc3Bl
Y2lhbCBjYXNlIGZvciB0aGUgQysrIGltcGxlbWVudGF0aW9uIHdoaWNoIHN0b3JlcyB0aGUKLSAg
ICAjIG1hcCBhcyBhbiBhcnJheS4KLSAgICBkZWwgbXNnMi5tYXBfaW50MzJfaW50MzJbMTJdCi0g
ICAgc2VsZi5hc3NlcnRGYWxzZSgxMiBpbiBtc2cyLm1hcF9pbnQzMl9pbnQzMikKLQotICAgIGRl
bCBtc2cyLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2VbMjIyXQotICAgIHNlbGYuYXNzZXJ0RmFs
c2UoMjIyIGluIG1zZzIubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSkKLQotICBkZWYgdGVzdE1l
cmdlRnJvbUJhZFR5cGUoc2VsZik6Ci0gICAgbXNnID0gbWFwX3VuaXR0ZXN0X3BiMi5UZXN0TWFw
KCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAotICAgICAgICBUeXBlRXJyb3Is
Ci0gICAgICAgIHInUGFyYW1ldGVyIHRvIE1lcmdlRnJvbVwoXCkgbXVzdCBiZSBpbnN0YW5jZSBv
ZiBzYW1lIGNsYXNzOiBleHBlY3RlZCAnCi0gICAgICAgIHInLipUZXN0TWFwIGdvdCBpbnRcLicp
OgotICAgICAgbXNnLk1lcmdlRnJvbSgxKQotCi0gIGRlZiB0ZXN0Q29weUZyb21CYWRUeXBlKHNl
bGYpOgotICAgIG1zZyA9IG1hcF91bml0dGVzdF9wYjIuVGVzdE1hcCgpCi0gICAgd2l0aCBzZWxm
LmFzc2VydFJhaXNlc1JlZ2V4cCgKLSAgICAgICAgVHlwZUVycm9yLAotICAgICAgICByJ1BhcmFt
ZXRlciB0byBbQS1aYS16XSpGcm9tXChcKSBtdXN0IGJlIGluc3RhbmNlIG9mIHNhbWUgY2xhc3M6
ICcKLSAgICAgICAgcidleHBlY3RlZCAuKlRlc3RNYXAgZ290IGludFwuJyk6Ci0gICAgICBtc2cu
Q29weUZyb20oMSkKLQotICBkZWYgdGVzdEludGVnZXJNYXBXaXRoTG9uZ3Moc2VsZik6Ci0gICAg
bXNnID0gbWFwX3VuaXR0ZXN0X3BiMi5UZXN0TWFwKCkKLSAgICBtc2cubWFwX2ludDMyX2ludDMy
W2xvbmcoLTEyMyldID0gbG9uZygtNDU2KQotICAgIG1zZy5tYXBfaW50NjRfaW50NjRbbG9uZygt
MioqMzMpXSA9IGxvbmcoLTIqKjM0KQotICAgIG1zZy5tYXBfdWludDMyX3VpbnQzMltsb25nKDEy
MyldID0gbG9uZyg0NTYpCi0gICAgbXNnLm1hcF91aW50NjRfdWludDY0W2xvbmcoMioqMzMpXSA9
IGxvbmcoMioqMzQpCi0KLSAgICBzZXJpYWxpemVkID0gbXNnLlNlcmlhbGl6ZVRvU3RyaW5nKCkK
LSAgICBtc2cyID0gbWFwX3VuaXR0ZXN0X3BiMi5UZXN0TWFwKCkKLSAgICBtc2cyLlBhcnNlRnJv
bVN0cmluZyhzZXJpYWxpemVkKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgtNDU2LCBtc2cyLm1h
cF9pbnQzMl9pbnQzMlstMTIzXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKC0yKiozNCwgbXNnMi5t
YXBfaW50NjRfaW50NjRbLTIqKjMzXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDQ1NiwgbXNnMi5t
YXBfdWludDMyX3VpbnQzMlsxMjNdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMioqMzQsIG1zZzIu
bWFwX3VpbnQ2NF91aW50NjRbMioqMzNdKQotCi0gIGRlZiB0ZXN0TWFwQXNzaWdubWVudENhdXNl
c1ByZXNlbmNlKHNlbGYpOgotICAgIG1zZyA9IG1hcF91bml0dGVzdF9wYjIuVGVzdE1hcFN1Ym1l
c3NhZ2UoKQotICAgIG1zZy50ZXN0X21hcC5tYXBfaW50MzJfaW50MzJbMTIzXSA9IDQ1NgotCi0g
ICAgc2VyaWFsaXplZCA9IG1zZy5TZXJpYWxpemVUb1N0cmluZygpCi0gICAgbXNnMiA9IG1hcF91
bml0dGVzdF9wYjIuVGVzdE1hcFN1Ym1lc3NhZ2UoKQotICAgIG1zZzIuUGFyc2VGcm9tU3RyaW5n
KHNlcmlhbGl6ZWQpCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgbXNnMikKLQotICAgICMg
Tm93IHRlc3QgdGhhdCB2YXJpb3VzIG11dGF0aW9ucyBvZiB0aGUgbWFwIHByb3Blcmx5IGludmFs
aWRhdGUgdGhlCi0gICAgIyBjYWNoZWQgc2l6ZSBvZiB0aGUgc3VibWVzc2FnZS4KLSAgICBtc2cu
dGVzdF9tYXAubWFwX2ludDMyX2ludDMyWzg4OF0gPSA5OTkKLSAgICBzZXJpYWxpemVkID0gbXNn
LlNlcmlhbGl6ZVRvU3RyaW5nKCkKLSAgICBtc2cyLlBhcnNlRnJvbVN0cmluZyhzZXJpYWxpemVk
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBtc2cyKQotCi0gICAgbXNnLnRlc3RfbWFwLm1h
cF9pbnQzMl9pbnQzMi5jbGVhcigpCi0gICAgc2VyaWFsaXplZCA9IG1zZy5TZXJpYWxpemVUb1N0
cmluZygpCi0gICAgbXNnMi5QYXJzZUZyb21TdHJpbmcoc2VyaWFsaXplZCkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKG1zZywgbXNnMikKLQotICBkZWYgdGVzdE1hcEFzc2lnbm1lbnRDYXVzZXNQcmVz
ZW5jZUZvclN1Ym1lc3NhZ2VzKHNlbGYpOgotICAgIG1zZyA9IG1hcF91bml0dGVzdF9wYjIuVGVz
dE1hcFN1Ym1lc3NhZ2UoKQotICAgIG1zZy50ZXN0X21hcC5tYXBfaW50MzJfZm9yZWlnbl9tZXNz
YWdlWzEyM10uYyA9IDUKLQotICAgIHNlcmlhbGl6ZWQgPSBtc2cuU2VyaWFsaXplVG9TdHJpbmco
KQotICAgIG1zZzIgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXBTdWJtZXNzYWdlKCkKLSAgICBt
c2cyLlBhcnNlRnJvbVN0cmluZyhzZXJpYWxpemVkKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbCht
c2csIG1zZzIpCi0KLSAgICAjIE5vdyB0ZXN0IHRoYXQgdmFyaW91cyBtdXRhdGlvbnMgb2YgdGhl
IG1hcCBwcm9wZXJseSBpbnZhbGlkYXRlIHRoZQotICAgICMgY2FjaGVkIHNpemUgb2YgdGhlIHN1
Ym1lc3NhZ2UuCi0gICAgbXNnLnRlc3RfbWFwLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2VbODg4
XS5jID0gNwotICAgIHNlcmlhbGl6ZWQgPSBtc2cuU2VyaWFsaXplVG9TdHJpbmcoKQotICAgIG1z
ZzIuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtc2cs
IG1zZzIpCi0KLSAgICBtc2cudGVzdF9tYXAubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZVs4ODhd
Lk1lcmdlRnJvbSgKLSAgICAgICAgbXNnLnRlc3RfbWFwLm1hcF9pbnQzMl9mb3JlaWduX21lc3Nh
Z2VbMTIzXSkKLSAgICBzZXJpYWxpemVkID0gbXNnLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLSAgICBt
c2cyLlBhcnNlRnJvbVN0cmluZyhzZXJpYWxpemVkKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNn
LCBtc2cyKQotCi0gICAgbXNnLnRlc3RfbWFwLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UuY2xl
YXIoKQotICAgIHNlcmlhbGl6ZWQgPSBtc2cuU2VyaWFsaXplVG9TdHJpbmcoKQotICAgIG1zZzIu
UGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIG1z
ZzIpCi0KLSAgZGVmIHRlc3RNb2RpZnlNYXBXaGlsZUl0ZXJhdGluZyhzZWxmKToKLSAgICBtc2cg
PSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAoKQotCi0gICAgc3RyaW5nX3N0cmluZ19pdGVyID0g
aXRlcihtc2cubWFwX3N0cmluZ19zdHJpbmcpCi0gICAgaW50MzJfZm9yZWlnbl9pdGVyID0gaXRl
cihtc2cubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSkKLQotICAgIG1zZy5tYXBfc3RyaW5nX3N0
cmluZ1snYWJjJ10gPSAnMTIzJwotICAgIG1zZy5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlWzVd
LmMgPSA1Ci0KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6Ci0gICAg
ICBmb3Iga2V5IGluIHN0cmluZ19zdHJpbmdfaXRlcjoKLSAgICAgICAgcGFzcwotCi0gICAgd2l0
aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgZm9yIGtleSBpbiBpbnQz
Ml9mb3JlaWduX2l0ZXI6Ci0gICAgICAgIHBhc3MKLQotICBkZWYgdGVzdFN1Ym1lc3NhZ2VNYXAo
c2VsZik6Ci0gICAgbXNnID0gbWFwX3VuaXR0ZXN0X3BiMi5UZXN0TWFwKCkKLQotICAgIHN1Ym1z
ZyA9IG1zZy5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlWzExMV0KLSAgICBzZWxmLmFzc2VydElz
KHN1Ym1zZywgbXNnLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2VbMTExXSkKLSAgICBzZWxmLmFz
c2VydElzSW5zdGFuY2Uoc3VibXNnLCB1bml0dGVzdF9wYjIuRm9yZWlnbk1lc3NhZ2UpCi0KLSAg
ICBzdWJtc2cuYyA9IDUKLQotICAgIHNlcmlhbGl6ZWQgPSBtc2cuU2VyaWFsaXplVG9TdHJpbmco
KQotICAgIG1zZzIgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAoKQotICAgIG1zZzIuUGFyc2VG
cm9tU3RyaW5nKHNlcmlhbGl6ZWQpCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKDUsIG1zZzIubWFw
X2ludDMyX2ZvcmVpZ25fbWVzc2FnZVsxMTFdLmMpCi0KLSAgICAjIERvZXNuJ3QgYWxsb3cgZGly
ZWN0IHN1Ym1lc3NhZ2UgYXNzaWdubWVudC4KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IpOgotICAgICAgbXNnLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2VbODhdID0gdW5p
dHRlc3RfcGIyLkZvcmVpZ25NZXNzYWdlKCkKLQotICBkZWYgdGVzdE1hcEl0ZXJhdGlvbihzZWxm
KToKLSAgICBtc2cgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAoKQotCi0gICAgZm9yIGssIHYg
aW4gbXNnLm1hcF9pbnQzMl9pbnQzMi5pdGVtcygpOgotICAgICAgIyBTaG91bGQgbm90IGJlIHJl
YWNoZWQuCi0gICAgICBzZWxmLmFzc2VydFRydWUoRmFsc2UpCi0KLSAgICBtc2cubWFwX2ludDMy
X2ludDMyWzJdID0gNAotICAgIG1zZy5tYXBfaW50MzJfaW50MzJbM10gPSA2Ci0gICAgbXNnLm1h
cF9pbnQzMl9pbnQzMls0XSA9IDgKLSAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihtc2cubWFw
X2ludDMyX2ludDMyKSkKLQotICAgIG1hdGNoaW5nX2RpY3QgPSB7MjogNCwgMzogNiwgNDogOH0K
LSAgICBzZWxmLmFzc2VydE1hcEl0ZXJFcXVhbHMobXNnLm1hcF9pbnQzMl9pbnQzMi5pdGVtcygp
LCBtYXRjaGluZ19kaWN0KQotCi0gIGRlZiB0ZXN0TWFwSXRlbXMoc2VsZik6Ci0gICAgIyBNYXAg
aXRlbXMgdXNlZCB0byBoYXZlIHN0cmFuZ2UgYmVoYXZpb3JzIHdoZW4gdXNlIGMgZXh0ZW5zaW9u
LiBCZWNhdXNlCi0gICAgIyBbXSBtYXkgcmVvcmRlciB0aGUgbWFwIGFuZCBpbnZhbGlkYXRlIGFu
eSBleHN0aW5nIGl0ZXJhdG9ycy4KLSAgICAjIFRPRE8oamllbHVvKTogQ2hlY2sgaWYgW10gcmVv
cmRlcmluZyB0aGUgbWFwIGlzIGEgYnVnIG9yIGludGVuZGVkCi0gICAgIyBiZWhhdmlvci4KLSAg
ICBtc2cgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAoKQotICAgIG1zZy5tYXBfc3RyaW5nX3N0
cmluZ1snbG9jYWxfaW5pdF9vcCddID0gJycKLSAgICBtc2cubWFwX3N0cmluZ19zdHJpbmdbJ3Ry
YWluYWJsZV92YXJpYWJsZXMnXSA9ICcnCi0gICAgbXNnLm1hcF9zdHJpbmdfc3RyaW5nWyd2YXJp
YWJsZXMnXSA9ICcnCi0gICAgbXNnLm1hcF9zdHJpbmdfc3RyaW5nWydpbml0X29wJ10gPSAnJwot
ICAgIG1zZy5tYXBfc3RyaW5nX3N0cmluZ1snc3VtbWFyaWVzJ10gPSAnJwotICAgIGl0ZW1zMSA9
IG1zZy5tYXBfc3RyaW5nX3N0cmluZy5pdGVtcygpCi0gICAgaXRlbXMyID0gbXNnLm1hcF9zdHJp
bmdfc3RyaW5nLml0ZW1zKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zMSwgaXRlbXMyKQot
Ci0gIGRlZiB0ZXN0TWFwSXRlcmF0aW9uQ2xlYXJNZXNzYWdlKHNlbGYpOgotICAgICMgSXRlcmF0
b3IgbmVlZHMgdG8gd29yayBldmVuIGlmIG1lc3NhZ2UgYW5kIG1hcCBhcmUgZGVsZXRlZC4KLSAg
ICBtc2cgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAoKQotCi0gICAgbXNnLm1hcF9pbnQzMl9p
bnQzMlsyXSA9IDQKLSAgICBtc2cubWFwX2ludDMyX2ludDMyWzNdID0gNgotICAgIG1zZy5tYXBf
aW50MzJfaW50MzJbNF0gPSA4Ci0KLSAgICBpdCA9IG1zZy5tYXBfaW50MzJfaW50MzIuaXRlbXMo
KQotICAgIGRlbCBtc2cKLQotICAgIG1hdGNoaW5nX2RpY3QgPSB7MjogNCwgMzogNiwgNDogOH0K
LSAgICBzZWxmLmFzc2VydE1hcEl0ZXJFcXVhbHMoaXQsIG1hdGNoaW5nX2RpY3QpCi0KLSAgZGVm
IHRlc3RNYXBDb25zdHJ1Y3Rpb24oc2VsZik6Ci0gICAgbXNnID0gbWFwX3VuaXR0ZXN0X3BiMi5U
ZXN0TWFwKG1hcF9pbnQzMl9pbnQzMj17MTogMiwgMzogNH0pCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgyLCBtc2cubWFwX2ludDMyX2ludDMyWzFdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgbXNn
Lm1hcF9pbnQzMl9pbnQzMlszXSkKLQotICAgIG1zZyA9IG1hcF91bml0dGVzdF9wYjIuVGVzdE1h
cCgKLSAgICAgICAgbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZT17MzogdW5pdHRlc3RfcGIyLkZv
cmVpZ25NZXNzYWdlKGM9NSl9KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgbXNnLm1hcF9pbnQz
Ml9mb3JlaWduX21lc3NhZ2VbM10uYykKLQotICBkZWYgdGVzdE1hcFZhbGlkQWZ0ZXJGaWVsZENs
ZWFyZWQoc2VsZik6Ci0gICAgIyBNYXAgbmVlZHMgdG8gd29yayBldmVuIGlmIGZpZWxkIGlzIGNs
ZWFyZWQuCi0gICAgIyBGb3IgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbiB0aGlzIHRlc3RzIHRoZSBj
b3JyZWN0bmVzcyBvZgotICAgICMgU2NhbGFyTWFwQ29udGFpbmVyOjpSZWxlYXNlKCkKLSAgICBt
c2cgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAoKQotICAgIGludDMyX21hcCA9IG1zZy5tYXBf
aW50MzJfaW50MzIKLQotICAgIGludDMyX21hcFsyXSA9IDQKLSAgICBpbnQzMl9tYXBbM10gPSA2
Ci0gICAgaW50MzJfbWFwWzRdID0gOAotCi0gICAgbXNnLkNsZWFyRmllbGQoJ21hcF9pbnQzMl9p
bnQzMicpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG1zZy5TZXJpYWxpemVUb1N0cmluZygp
KQotICAgIG1hdGNoaW5nX2RpY3QgPSB7MjogNCwgMzogNiwgNDogOH0KLSAgICBzZWxmLmFzc2Vy
dE1hcEl0ZXJFcXVhbHMoaW50MzJfbWFwLml0ZW1zKCksIG1hdGNoaW5nX2RpY3QpCi0KLSAgZGVm
IHRlc3RNZXNzYWdlTWFwVmFsaWRBZnRlckZpZWxkQ2xlYXJlZChzZWxmKToKLSAgICAjIE1hcCBu
ZWVkcyB0byB3b3JrIGV2ZW4gaWYgZmllbGQgaXMgY2xlYXJlZC4KLSAgICAjIEZvciB0aGUgQysr
IGltcGxlbWVudGF0aW9uIHRoaXMgdGVzdHMgdGhlIGNvcnJlY3RuZXNzIG9mCi0gICAgIyBTY2Fs
YXJNYXBDb250YWluZXI6OlJlbGVhc2UoKQotICAgIG1zZyA9IG1hcF91bml0dGVzdF9wYjIuVGVz
dE1hcCgpCi0gICAgaW50MzJfZm9yZWlnbl9tZXNzYWdlID0gbXNnLm1hcF9pbnQzMl9mb3JlaWdu
X21lc3NhZ2UKLQotICAgIGludDMyX2ZvcmVpZ25fbWVzc2FnZVsyXS5jID0gNQotCi0gICAgbXNn
LkNsZWFyRmllbGQoJ21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UnKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoYicnLCBtc2cuU2VyaWFsaXplVG9TdHJpbmcoKSkKLSAgICBzZWxmLmFzc2VydFRydWUo
MiBpbiBpbnQzMl9mb3JlaWduX21lc3NhZ2Uua2V5cygpKQotCi0gIGRlZiB0ZXN0TWFwSXRlcklu
dmFsaWRhdGVkQnlDbGVhckZpZWxkKHNlbGYpOgotICAgICMgTWFwIGl0ZXJhdG9yIGlzIGludmFs
aWRhdGVkIHdoZW4gZmllbGQgaXMgY2xlYXJlZC4KLSAgICAjIEJ1dCB0aGlzIGNhc2UgZG9lcyBu
ZWVkIHRvIG5vdCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIuCi0gICAgIyBGb3IgdGhlIEMrKyBpbXBs
ZW1lbnRhdGlvbiB0aGlzIHRlc3RzIHRoZSBjb3JyZWN0bmVzcyBvZgotICAgICMgU2NhbGFyTWFw
Q29udGFpbmVyOjpSZWxlYXNlKCkKLSAgICBtc2cgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAo
KQotCi0gICAgaXQgPSBpdGVyKG1zZy5tYXBfaW50MzJfaW50MzIpCi0KLSAgICBtc2cuQ2xlYXJG
aWVsZCgnbWFwX2ludDMyX2ludDMyJykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRp
bWVFcnJvcik6Ci0gICAgICBmb3IgXyBpbiBpdDoKLSAgICAgICAgcGFzcwotCi0gICAgaXQgPSBp
dGVyKG1zZy5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlKQotICAgIG1zZy5DbGVhckZpZWxkKCdt
YXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlJykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1
bnRpbWVFcnJvcik6Ci0gICAgICBmb3IgXyBpbiBpdDoKLSAgICAgICAgcGFzcwotCi0gIGRlZiB0
ZXN0TWFwRGVsZXRlKHNlbGYpOgotICAgIG1zZyA9IG1hcF91bml0dGVzdF9wYjIuVGVzdE1hcCgp
Ci0KLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihtc2cubWFwX2ludDMyX2ludDMyKSkKLQot
ICAgIG1zZy5tYXBfaW50MzJfaW50MzJbNF0gPSA2Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBs
ZW4obXNnLm1hcF9pbnQzMl9pbnQzMikpCi0KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtl
eUVycm9yKToKLSAgICAgIGRlbCBtc2cubWFwX2ludDMyX2ludDMyWzg4XQotCi0gICAgZGVsIG1z
Zy5tYXBfaW50MzJfaW50MzJbNF0KLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihtc2cubWFw
X2ludDMyX2ludDMyKSkKLQotICBkZWYgdGVzdE1hcHNBcmVNYXBwaW5nKHNlbGYpOgotICAgIG1z
ZyA9IG1hcF91bml0dGVzdF9wYjIuVGVzdE1hcCgpCi0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNl
KG1zZy5tYXBfaW50MzJfaW50MzIsIGNvbGxlY3Rpb25zLk1hcHBpbmcpCi0gICAgc2VsZi5hc3Nl
cnRJc0luc3RhbmNlKG1zZy5tYXBfaW50MzJfaW50MzIsIGNvbGxlY3Rpb25zLk11dGFibGVNYXBw
aW5nKQotICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2cubWFwX2ludDMyX2ZvcmVpZ25fbWVz
c2FnZSwgY29sbGVjdGlvbnMuTWFwcGluZykKLSAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNn
Lm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bGxlY3Rpb25zLk11dGFibGVNYXBwaW5nKQotCi0gIGRlZiB0ZXN0TWFwRmluZEluaXRpYWxpemF0
aW9uRXJyb3JzU21va2VUZXN0KHNlbGYpOgotICAgIG1zZyA9IG1hcF91bml0dGVzdF9wYjIuVGVz
dE1hcCgpCi0gICAgbXNnLm1hcF9zdHJpbmdfc3RyaW5nWydhYmMnXSA9ICcxMjMnCi0gICAgbXNn
Lm1hcF9pbnQzMl9pbnQzMlszNV0gPSA2NAotICAgIG1zZy5tYXBfc3RyaW5nX2ZvcmVpZ25fbWVz
c2FnZVsnZm9vJ10uYyA9IDUKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihtc2cuRmluZElu
aXRpYWxpemF0aW9uRXJyb3JzKCkpKQotCi0KLQotY2xhc3MgVmFsaWRUeXBlTmFtZXNUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgYXNzZXJ0SW1wb3J0RnJvbU5hbWUoc2VsZiwgbXNn
LCBiYXNlX25hbWUpOgotICAgICMgUGFyc2UgPHR5cGUgJ21vZHVsZS5jbGFzc19uYW1lJz4gdG8g
ZXh0cmEgJ3NvbWUubmFtZScgYXMgYSBzdHJpbmcuCi0gICAgdHBfbmFtZSA9IHN0cih0eXBlKG1z
ZykpLnNwbGl0KCInIilbMV0KLSAgICB2YWxpZF9uYW1lcyA9ICgnUmVwZWF0ZWQlc0NvbnRhaW5l
cicgJSBiYXNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgJ1JlcGVhdGVkJXNGaWVsZENvbnRh
aW5lcicgJSBiYXNlX25hbWUpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGFueSh0cF9uYW1lLmVuZHN3
aXRoKHYpIGZvciB2IGluIHZhbGlkX25hbWVzKSwKLSAgICAgICAgICAgICAgICAgICAgJyVyIGRv
ZXMgZW5kIHdpdGggYW55IG9mICVyJyAlICh0cF9uYW1lLCB2YWxpZF9uYW1lcykpCi0KLSAgICBw
YXJ0cyA9IHRwX25hbWUuc3BsaXQoJy4nKQotICAgIGNsYXNzX25hbWUgPSBwYXJ0c1stMV0KLSAg
ICBtb2R1bGVfbmFtZSA9ICcuJy5qb2luKHBhcnRzWzotMV0pCi0gICAgX19pbXBvcnRfXyhtb2R1
bGVfbmFtZSwgZnJvbWxpc3Q9W2NsYXNzX25hbWVdKQotCi0gIGRlZiB0ZXN0VHlwZU5hbWVzQ2Fu
QmVJbXBvcnRlZChzZWxmKToKLSAgICAjIElmIGltcG9ydCBkb2Vzbid0IHdvcmssIHBpY2tsaW5n
IHdvbid0IHdvcmsgZWl0aGVyLgotICAgIHBiID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygp
Ci0gICAgc2VsZi5hc3NlcnRJbXBvcnRGcm9tTmFtZShwYi5yZXBlYXRlZF9pbnQzMiwgJ1NjYWxh
cicpCi0gICAgc2VsZi5hc3NlcnRJbXBvcnRGcm9tTmFtZShwYi5yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZSwgJ0NvbXBvc2l0ZScpCi0KLWNsYXNzIFBhY2tlZEZpZWxkVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6Ci0KLSAgZGVmIHNldE1lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6Ci0gICAgbWVzc2FnZS5y
ZXBlYXRlZF9pbnQzMi5hcHBlbmQoMSkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2ludDY0LmFwcGVu
ZCgxKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfdWludDMyLmFwcGVuZCgxKQotICAgIG1lc3NhZ2Uu
cmVwZWF0ZWRfdWludDY0LmFwcGVuZCgxKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDMyLmFw
cGVuZCgxKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDY0LmFwcGVuZCgxKQotICAgIG1lc3Nh
Z2UucmVwZWF0ZWRfZml4ZWQzMi5hcHBlbmQoMSkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2ZpeGVk
NjQuYXBwZW5kKDEpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQzMi5hcHBlbmQoMSkKLSAg
ICBtZXNzYWdlLnJlcGVhdGVkX3NmaXhlZDY0LmFwcGVuZCgxKQotICAgIG1lc3NhZ2UucmVwZWF0
ZWRfZmxvYXQuYXBwZW5kKDEuMCkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZS5hcHBlbmQo
MS4wKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbC5hcHBlbmQoVHJ1ZSkKLSAgICBtZXNzYWdl
LnJlcGVhdGVkX25lc3RlZF9lbnVtLmFwcGVuZCgxKQotCi0gIGRlZiB0ZXN0UGFja2VkRmllbGRz
KHNlbGYpOgotICAgIG1lc3NhZ2UgPSBwYWNrZWRfZmllbGRfdGVzdF9wYjIuVGVzdFBhY2tlZFR5
cGVzKCkKLSAgICBzZWxmLnNldE1lc3NhZ2UobWVzc2FnZSkKLSAgICBnb2xkZW5fZGF0YSA9IChi
J1x4MEFceDAxXHgwMScKLSAgICAgICAgICAgICAgICAgICBiJ1x4MTJceDAxXHgwMScKLSAgICAg
ICAgICAgICAgICAgICBiJ1x4MUFceDAxXHgwMScKLSAgICAgICAgICAgICAgICAgICBiJ1x4MjJc
eDAxXHgwMScKLSAgICAgICAgICAgICAgICAgICBiJ1x4MkFceDAxXHgwMicKLSAgICAgICAgICAg
ICAgICAgICBiJ1x4MzJceDAxXHgwMicKLSAgICAgICAgICAgICAgICAgICBiJ1x4M0FceDA0XHgw
MVx4MDBceDAwXHgwMCcKLSAgICAgICAgICAgICAgICAgICBiJ1x4NDJceDA4XHgwMVx4MDBceDAw
XHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgICAgICAgICAgICAgYidceDRBXHgwNFx4MDFc
eDAwXHgwMFx4MDAnCi0gICAgICAgICAgICAgICAgICAgYidceDUyXHgwOFx4MDFceDAwXHgwMFx4
MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICAgICAgICAgICAgIGInXHg1QVx4MDRceDAwXHgw
MFx4ODBceDNmJwotICAgICAgICAgICAgICAgICAgIGInXHg2Mlx4MDhceDAwXHgwMFx4MDBceDAw
XHgwMFx4MDBceGYwXHgzZicKLSAgICAgICAgICAgICAgICAgICBiJ1x4NkFceDAxXHgwMScKLSAg
ICAgICAgICAgICAgICAgICBiJ1x4NzJceDAxXHgwMScpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChn
b2xkZW5fZGF0YSwgbWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQotCi0gIGRlZiB0ZXN0VW5w
YWNrZWRGaWVsZHMoc2VsZik6Ci0gICAgbWVzc2FnZSA9IHBhY2tlZF9maWVsZF90ZXN0X3BiMi5U
ZXN0VW5wYWNrZWRUeXBlcygpCi0gICAgc2VsZi5zZXRNZXNzYWdlKG1lc3NhZ2UpCi0gICAgZ29s
ZGVuX2RhdGEgPSAoYidceDA4XHgwMScKLSAgICAgICAgICAgICAgICAgICBiJ1x4MTBceDAxJwot
ICAgICAgICAgICAgICAgICAgIGInXHgxOFx4MDEnCi0gICAgICAgICAgICAgICAgICAgYidceDIw
XHgwMScKLSAgICAgICAgICAgICAgICAgICBiJ1x4MjhceDAyJwotICAgICAgICAgICAgICAgICAg
IGInXHgzMFx4MDInCi0gICAgICAgICAgICAgICAgICAgYidceDNEXHgwMVx4MDBceDAwXHgwMCcK
LSAgICAgICAgICAgICAgICAgICBiJ1x4NDFceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgw
MCcKLSAgICAgICAgICAgICAgICAgICBiJ1x4NERceDAxXHgwMFx4MDBceDAwJwotICAgICAgICAg
ICAgICAgICAgIGInXHg1MVx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAg
ICAgICAgICAgICAgIGInXHg1RFx4MDBceDAwXHg4MFx4M2YnCi0gICAgICAgICAgICAgICAgICAg
YidceDYxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhmMFx4M2YnCi0gICAgICAgICAgICAgICAg
ICAgYidceDY4XHgwMScKLSAgICAgICAgICAgICAgICAgICBiJ1x4NzBceDAxJykKLSAgICBzZWxm
LmFzc2VydEVxdWFsKGdvbGRlbl9kYXRhLCBtZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCi0K
LQotQHVuaXR0ZXN0LnNraXBJZihhcGlfaW1wbGVtZW50YXRpb24uVHlwZSgpICE9ICdjcHAnLAot
ICAgICAgICAgICAgICAgICAnZXhwbGljaXQgdGVzdHMgb2YgdGhlIEMrKyBpbXBsZW1lbnRhdGlv
bicpCi1jbGFzcyBPdmVyc2l6ZVByb3Rvc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRl
ZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLmZpbGVfZGVzYyA9ICIiIgotICAgICAgbmFtZTogImYv
Zi5tc2cyIgotICAgICAgcGFja2FnZTogImYiCi0gICAgICBtZXNzYWdlX3R5cGUgewotICAgICAg
ICBuYW1lOiAibXNnMSIKLSAgICAgICAgZmllbGQgewotICAgICAgICAgIG5hbWU6ICJwYXlsb2Fk
IgotICAgICAgICAgIG51bWJlcjogMQotICAgICAgICAgIGxhYmVsOiBMQUJFTF9PUFRJT05BTAot
ICAgICAgICAgIHR5cGU6IFRZUEVfU1RSSU5HCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIG1l
c3NhZ2VfdHlwZSB7Ci0gICAgICAgIG5hbWU6ICJtc2cyIgotICAgICAgICBmaWVsZCB7Ci0gICAg
ICAgICAgbmFtZTogImZpZWxkIgotICAgICAgICAgIG51bWJlcjogMQotICAgICAgICAgIGxhYmVs
OiBMQUJFTF9PUFRJT05BTAotICAgICAgICAgIHR5cGU6IFRZUEVfTUVTU0FHRQotICAgICAgICAg
IHR5cGVfbmFtZTogIm1zZzEiCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAiIiIKLSAgICBwb29s
ID0gZGVzY3JpcHRvcl9wb29sLkRlc2NyaXB0b3JQb29sKCkKLSAgICBkZXNjID0gZGVzY3JpcHRv
cl9wYjIuRmlsZURlc2NyaXB0b3JQcm90bygpCi0gICAgdGV4dF9mb3JtYXQuUGFyc2Uoc2VsZi5m
aWxlX2Rlc2MsIGRlc2MpCi0gICAgcG9vbC5BZGQoZGVzYykKLSAgICBzZWxmLnByb3RvX2NscyA9
IG1lc3NhZ2VfZmFjdG9yeS5NZXNzYWdlRmFjdG9yeShwb29sKS5HZXRQcm90b3R5cGUoCi0gICAg
ICAgIHBvb2wuRmluZE1lc3NhZ2VUeXBlQnlOYW1lKCdmLm1zZzInKSkKLSAgICBzZWxmLnAgPSBz
ZWxmLnByb3RvX2NscygpCi0gICAgc2VsZi5wLmZpZWxkLnBheWxvYWQgPSAnYycgKiAoMTAyNCAq
IDEwMjQgKiA2NCArIDEpCi0gICAgc2VsZi5wX3NlcmlhbGl6ZWQgPSBzZWxmLnAuU2VyaWFsaXpl
VG9TdHJpbmcoKQotCi0gIGRlZiB0ZXN0QXNzZXJ0T3ZlcnNpemVQcm90byhzZWxmKToKLSAgICBm
cm9tIGdvb2dsZS5wcm90b2J1Zi5weWV4dC5fbWVzc2FnZSBpbXBvcnQgU2V0QWxsb3dPdmVyc2l6
ZVByb3RvcwotICAgIFNldEFsbG93T3ZlcnNpemVQcm90b3MoRmFsc2UpCi0gICAgcSA9IHNlbGYu
cHJvdG9fY2xzKCkKLSAgICB0cnk6Ci0gICAgICBxLlBhcnNlRnJvbVN0cmluZyhzZWxmLnBfc2Vy
aWFsaXplZCkKLSAgICBleGNlcHQgbWVzc2FnZS5EZWNvZGVFcnJvciBhcyBlOgotICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzdHIoZSksICdFcnJvciBwYXJzaW5nIG1lc3NhZ2UnKQotCi0gIGRlZiB0
ZXN0U3VjY2VlZE92ZXJzaXplUHJvdG8oc2VsZik6Ci0gICAgZnJvbSBnb29nbGUucHJvdG9idWYu
cHlleHQuX21lc3NhZ2UgaW1wb3J0IFNldEFsbG93T3ZlcnNpemVQcm90b3MKLSAgICBTZXRBbGxv
d092ZXJzaXplUHJvdG9zKFRydWUpCi0gICAgcSA9IHNlbGYucHJvdG9fY2xzKCkKLSAgICBxLlBh
cnNlRnJvbVN0cmluZyhzZWxmLnBfc2VyaWFsaXplZCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYucC5maWVsZC5wYXlsb2FkLCBxLmZpZWxkLnBheWxvYWQpCi0KLWlmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3By
b3RvYnVmL2ludGVybmFsL21pc3NpbmdfZW51bV92YWx1ZXMucHJvdG8gYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUv
cHJvdG9idWYvaW50ZXJuYWwvbWlzc2luZ19lbnVtX3ZhbHVlcy5wcm90bwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTg1MGJlNWJiN2ZkYjg1NDc5OWVmYTY3OWRiOGNhMDNhMDZiMjgy
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9n
b29nbGUvcHJvdG9idWYvaW50ZXJuYWwvbWlzc2luZ19lbnVtX3ZhbHVlcy5wcm90bworKysgL2Rl
di9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi1zeW50YXggPSAicHJvdG8yIjsKLQotcGFja2FnZSBnb29nbGUucHJvdG9idWYucHl0aG9u
LmludGVybmFsOwotCi1tZXNzYWdlIFRlc3RFbnVtVmFsdWVzIHsKLSAgZW51bSBOZXN0ZWRFbnVt
IHsKLSAgICBaRVJPID0gMDsKLSAgICBPTkUgPSAxOwotICB9Ci0gIG9wdGlvbmFsIE5lc3RlZEVu
dW0gb3B0aW9uYWxfbmVzdGVkX2VudW0gPSAxOwotICByZXBlYXRlZCBOZXN0ZWRFbnVtIHJlcGVh
dGVkX25lc3RlZF9lbnVtID0gMjsKLSAgcmVwZWF0ZWQgTmVzdGVkRW51bSBwYWNrZWRfbmVzdGVk
X2VudW0gPSAzIFtwYWNrZWQgPSB0cnVlXTsKLX0KLQotbWVzc2FnZSBUZXN0TWlzc2luZ0VudW1W
YWx1ZXMgewotICBlbnVtIE5lc3RlZEVudW0gewotICAgIFRXTyA9IDI7Ci0gIH0KLSAgb3B0aW9u
YWwgTmVzdGVkRW51bSBvcHRpb25hbF9uZXN0ZWRfZW51bSA9IDE7Ci0gIHJlcGVhdGVkIE5lc3Rl
ZEVudW0gcmVwZWF0ZWRfbmVzdGVkX2VudW0gPSAyOwotICByZXBlYXRlZCBOZXN0ZWRFbnVtIHBh
Y2tlZF9uZXN0ZWRfZW51bSA9IDMgW3BhY2tlZCA9IHRydWVdOwotfQotCi1tZXNzYWdlIEp1c3RT
dHJpbmcgewotICByZXF1aXJlZCBzdHJpbmcgZHVtbXkgPSAxOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRo
b24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL21vcmVfZXh0ZW5zaW9ucy5wcm90byBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9u
L2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9tb3JlX2V4dGVuc2lvbnMucHJvdG8KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZjE0NjczNjFjNGNlM2MwMGMzNGZlM2I0YzQ1M2M0MTg4
MmM5NWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRo
b24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL21vcmVfZXh0ZW5zaW9ucy5wcm90bworKysgL2Rl
di9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyBBdXRob3I6IHJvYmluc29uQGdvb2dsZS5jb20gKFdpbGwgUm9iaW5zb24pCi0KLXN5
bnRheCA9ICJwcm90bzIiOwotCi1wYWNrYWdlIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbDsKLQot
Ci1tZXNzYWdlIFRvcExldmVsTWVzc2FnZSB7Ci0gIG9wdGlvbmFsIEV4dGVuZGVkTWVzc2FnZSBz
dWJtZXNzYWdlID0gMTsKLX0KLQotCi1tZXNzYWdlIEV4dGVuZGVkTWVzc2FnZSB7Ci0gIGV4dGVu
c2lvbnMgMSB0byBtYXg7Ci19Ci0KLQotbWVzc2FnZSBGb3JlaWduTWVzc2FnZSB7Ci0gIG9wdGlv
bmFsIGludDMyIGZvcmVpZ25fbWVzc2FnZV9pbnQgPSAxOwotfQotCi0KLWV4dGVuZCBFeHRlbmRl
ZE1lc3NhZ2UgewotICBvcHRpb25hbCBpbnQzMiBvcHRpb25hbF9pbnRfZXh0ZW5zaW9uID0gMTsK
LSAgb3B0aW9uYWwgRm9yZWlnbk1lc3NhZ2Ugb3B0aW9uYWxfbWVzc2FnZV9leHRlbnNpb24gPSAy
OwotCi0gIHJlcGVhdGVkIGludDMyIHJlcGVhdGVkX2ludF9leHRlbnNpb24gPSAzOwotICByZXBl
YXRlZCBGb3JlaWduTWVzc2FnZSByZXBlYXRlZF9tZXNzYWdlX2V4dGVuc2lvbiA9IDQ7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvbW9yZV9leHRlbnNpb25z
X2R5bmFtaWMucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvbW9yZV9leHRl
bnNpb25zX2R5bmFtaWMucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZjg1
ZWY2MGNkYTBhYzQwODhkNDRjOThiMTQwNGM5MmU0MjI4NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFs
L21vcmVfZXh0ZW5zaW9uc19keW5hbWljLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogamFz
b25oQGdvb2dsZS5jb20gKEphc29uIEhzdWVoKQotLy8KLS8vIFRoaXMgZmlsZSBpcyB1c2VkIHRv
IHRlc3QgYSBjb3JuZXIgY2FzZSBpbiB0aGUgQ1BQIGltcGxlbWVudGF0aW9uIHdoZXJlIHRoZQot
Ly8gZ2VuZXJhdGVkIEMrKyB0eXBlIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGV4dGVuZGVlLCBidXQg
dGhlIGV4dGVuc2lvbiBpcwotLy8gZGVmaW5lZCBpbiBhIGZpbGUgd2hvc2UgQysrIHR5cGUgaXMg
bm90IGluIHRoZSBiaW5hcnkuCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi1pbXBvcnQgImdvb2ds
ZS9wcm90b2J1Zi9pbnRlcm5hbC9tb3JlX2V4dGVuc2lvbnMucHJvdG8iOwotCi1wYWNrYWdlIGdv
b2dsZS5wcm90b2J1Zi5pbnRlcm5hbDsKLQotbWVzc2FnZSBEeW5hbWljTWVzc2FnZVR5cGUgewot
ICBvcHRpb25hbCBpbnQzMiBhID0gMTsKLX0KLQotZXh0ZW5kIEV4dGVuZGVkTWVzc2FnZSB7Ci0g
IG9wdGlvbmFsIGludDMyIGR5bmFtaWNfaW50MzJfZXh0ZW5zaW9uID0gMTAwOwotICBvcHRpb25h
bCBEeW5hbWljTWVzc2FnZVR5cGUgZHluYW1pY19tZXNzYWdlX2V4dGVuc2lvbiA9IDEwMTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9tb3JlX21lc3NhZ2Vz
LnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL21vcmVfbWVzc2FnZXMucHJv
dG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNmFiOWVmZGZjMjI5ZjMwNTlmNWQx
MjIzY2EzOGU2NjE1Y2U5YjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL21vcmVfbWVzc2FnZXMucHJv
dG8KKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiByb2JpbnNvbkBnb29nbGUuY29tIChXaWxsIFJvYmlu
c29uKQotCi1zeW50YXggPSAicHJvdG8yIjsKLQotcGFja2FnZSBnb29nbGUucHJvdG9idWYuaW50
ZXJuYWw7Ci0KLS8vIEEgbWVzc2FnZSB3aGVyZSB0YWcgbnVtYmVycyBhcmUgbGlzdGVkIG91dCBv
ZiBvcmRlciwgdG8gYWxsb3cgdXMgdG8gdGVzdCBvdXIKLS8vIGNhbm9uaWNhbGl6YXRpb24gb2Yg
c2VyaWFsaXplZCBvdXRwdXQsIHdoaWNoIHNob3VsZCBhbHdheXMgYmUgaW4gdGFnIG9yZGVyLgot
Ly8gV2UgYWxzbyBtaXggaW4gc29tZSBleHRlbnNpb25zIGZvciBleHRyYSBmdW4uCi1tZXNzYWdl
IE91dE9mT3JkZXJGaWVsZHMgewotICBvcHRpb25hbCAgIHNpbnQzMiBvcHRpb25hbF9zaW50MzIg
ICA9ICA1OwotICBleHRlbnNpb25zIDQgdG8gNDsKLSAgb3B0aW9uYWwgICB1aW50MzIgb3B0aW9u
YWxfdWludDMyICAgPSAgMzsKLSAgZXh0ZW5zaW9ucyAyIHRvIDI7Ci0gIG9wdGlvbmFsICAgIGlu
dDMyIG9wdGlvbmFsX2ludDMyICAgID0gIDE7Ci19OwotCi0KLWV4dGVuZCBPdXRPZk9yZGVyRmll
bGRzIHsKLSAgb3B0aW9uYWwgICB1aW50NjQgb3B0aW9uYWxfdWludDY0ICAgPSAgNDsKLSAgb3B0
aW9uYWwgICAgaW50NjQgb3B0aW9uYWxfaW50NjQgICAgPSAgMjsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9wYWNrZWRfZmllbGRfdGVzdC5wcm90byBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9wYWNrZWRfZmllbGRfdGVzdC5wcm90bwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmZGMxMGE4N2NhM2MxMzE0Njc2MjQzOGQzNGQ3
MjFmYmUwY2RlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvcGFja2VkX2ZpZWxkX3Rlc3QucHJvdG8K
KysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMyI7Ci0KLXBhY2thZ2UgZ29vZ2xlLnByb3RvYnVm
LnB5dGhvbi5pbnRlcm5hbDsKLQotbWVzc2FnZSBUZXN0UGFja2VkVHlwZXMgewotICBlbnVtIE5l
c3RlZEVudW0gewotICAgIEZPTyA9IDA7Ci0gICAgQkFSID0gMTsKLSAgICBCQVogPSAyOwotICB9
Ci0KLSAgcmVwZWF0ZWQgICAgaW50MzIgcmVwZWF0ZWRfaW50MzIgICAgPSAgMTsKLSAgcmVwZWF0
ZWQgICAgaW50NjQgcmVwZWF0ZWRfaW50NjQgICAgPSAgMjsKLSAgcmVwZWF0ZWQgICB1aW50MzIg
cmVwZWF0ZWRfdWludDMyICAgPSAgMzsKLSAgcmVwZWF0ZWQgICB1aW50NjQgcmVwZWF0ZWRfdWlu
dDY0ICAgPSAgNDsKLSAgcmVwZWF0ZWQgICBzaW50MzIgcmVwZWF0ZWRfc2ludDMyICAgPSAgNTsK
LSAgcmVwZWF0ZWQgICBzaW50NjQgcmVwZWF0ZWRfc2ludDY0ICAgPSAgNjsKLSAgcmVwZWF0ZWQg
IGZpeGVkMzIgcmVwZWF0ZWRfZml4ZWQzMiAgPSAgNzsKLSAgcmVwZWF0ZWQgIGZpeGVkNjQgcmVw
ZWF0ZWRfZml4ZWQ2NCAgPSAgODsKLSAgcmVwZWF0ZWQgc2ZpeGVkMzIgcmVwZWF0ZWRfc2ZpeGVk
MzIgPSAgOTsKLSAgcmVwZWF0ZWQgc2ZpeGVkNjQgcmVwZWF0ZWRfc2ZpeGVkNjQgPSAxMDsKLSAg
cmVwZWF0ZWQgICAgZmxvYXQgcmVwZWF0ZWRfZmxvYXQgICAgPSAxMTsKLSAgcmVwZWF0ZWQgICBk
b3VibGUgcmVwZWF0ZWRfZG91YmxlICAgPSAxMjsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgcmVwZWF0
ZWRfYm9vbCAgICAgPSAxMzsKLSAgcmVwZWF0ZWQgTmVzdGVkRW51bSByZXBlYXRlZF9uZXN0ZWRf
ZW51bSA9IDE0OwotfQotCi1tZXNzYWdlIFRlc3RVbnBhY2tlZFR5cGVzIHsKLSAgcmVwZWF0ZWQg
ICAgaW50MzIgcmVwZWF0ZWRfaW50MzIgICAgPSAgMSBbcGFja2VkID0gZmFsc2VdOwotICByZXBl
YXRlZCAgICBpbnQ2NCByZXBlYXRlZF9pbnQ2NCAgICA9ICAyIFtwYWNrZWQgPSBmYWxzZV07Ci0g
IHJlcGVhdGVkICAgdWludDMyIHJlcGVhdGVkX3VpbnQzMiAgID0gIDMgW3BhY2tlZCA9IGZhbHNl
XTsKLSAgcmVwZWF0ZWQgICB1aW50NjQgcmVwZWF0ZWRfdWludDY0ICAgPSAgNCBbcGFja2VkID0g
ZmFsc2VdOwotICByZXBlYXRlZCAgIHNpbnQzMiByZXBlYXRlZF9zaW50MzIgICA9ICA1IFtwYWNr
ZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAgc2ludDY0IHJlcGVhdGVkX3NpbnQ2NCAgID0gIDYg
W3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIgcmVwZWF0ZWRfZml4ZWQzMiAg
PSAgNyBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCAgZml4ZWQ2NCByZXBlYXRlZF9maXhl
ZDY0ICA9ICA4IFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHJlcGVhdGVk
X3NmaXhlZDMyID0gIDkgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkNjQgcmVw
ZWF0ZWRfc2ZpeGVkNjQgPSAxMCBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCAgICBmbG9h
dCByZXBlYXRlZF9mbG9hdCAgICA9IDExIFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAg
ZG91YmxlIHJlcGVhdGVkX2RvdWJsZSAgID0gMTIgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0
ZWQgICAgIGJvb2wgcmVwZWF0ZWRfYm9vbCAgICAgPSAxMyBbcGFja2VkID0gZmFsc2VdOwotICBy
ZXBlYXRlZCBUZXN0UGFja2VkVHlwZXMuTmVzdGVkRW51bSByZXBlYXRlZF9uZXN0ZWRfZW51bSA9
IDE0IFtwYWNrZWQgPSBmYWxzZV07Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9i
dWYvaW50ZXJuYWwvcHJvdG9fYnVpbGRlcl90ZXN0LnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVm
L2ludGVybmFsL3Byb3RvX2J1aWxkZXJfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzZkZmJmZGVkODgyMzJjMmZhZTRhNTBiODQ0NWFlOGQ3YjRmYjYwNi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9i
dWYvaW50ZXJuYWwvcHJvdG9fYnVpbGRlcl90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTYg
KzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0j
IG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJUZXN0cyBmb3Ig
Z29vZ2xlLnByb3RvYnVmLnByb3RvX2J1aWxkZXIuIiIiCi0KLXRyeToKLSAgICBmcm9tIGNvbGxl
Y3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZyb20g
b3JkZXJlZGRpY3QgaW1wb3J0IE9yZGVyZWREaWN0ICAjUFkyNgotdHJ5OgotICBpbXBvcnQgdW5p
dHRlc3QyIGFzIHVuaXR0ZXN0Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gIGltcG9ydCB1bml0dGVz
dAotCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wYjIKLWZyb20gZ29v
Z2xlLnByb3RvYnVmIGltcG9ydCBkZXNjcmlwdG9yX3Bvb2wKLWZyb20gZ29vZ2xlLnByb3RvYnVm
IGltcG9ydCBwcm90b19idWlsZGVyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdGV4dF9m
b3JtYXQKLQotCi1jbGFzcyBQcm90b0J1aWxkZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQot
ICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5vcmRlcmVkX2ZpZWxkcyA9IE9yZGVyZWREaWN0
KFsKLSAgICAgICAgKCdmb28nLCBkZXNjcmlwdG9yX3BiMi5GaWVsZERlc2NyaXB0b3JQcm90by5U
WVBFX0lOVDY0KSwKLSAgICAgICAgKCdiYXInLCBkZXNjcmlwdG9yX3BiMi5GaWVsZERlc2NyaXB0
b3JQcm90by5UWVBFX1NUUklORyksCi0gICAgICAgIF0pCi0gICAgc2VsZi5fZmllbGRzID0gZGlj
dChzZWxmLm9yZGVyZWRfZmllbGRzKQotCi0gIGRlZiB0ZXN0TWFrZVNpbXBsZVByb3RvQ2xhc3Mo
c2VsZik6Ci0gICAgIiIiVGVzdCB0aGF0IHdlIGNhbiBjcmVhdGUgYSBwcm90byBjbGFzcy4iIiIK
LSAgICBwcm90b19jbHMgPSBwcm90b19idWlsZGVyLk1ha2VTaW1wbGVQcm90b0NsYXNzKAotICAg
ICAgICBzZWxmLl9maWVsZHMsCi0gICAgICAgIGZ1bGxfbmFtZT0nbmV0LnByb3RvMi5weXRob24u
cHVibGljLnByb3RvX2J1aWxkZXJfdGVzdC5UZXN0JykKLSAgICBwcm90byA9IHByb3RvX2Nscygp
Ci0gICAgcHJvdG8uZm9vID0gMTIzNDUKLSAgICBwcm90by5iYXIgPSAnYXNkZicKLSAgICBzZWxm
LmFzc2VydE11bHRpTGluZUVxdWFsKAotICAgICAgICAnYmFyOiAiYXNkZiJcbmZvbzogMTIzNDVc
bicsIHRleHRfZm9ybWF0Lk1lc3NhZ2VUb1N0cmluZyhwcm90bykpCi0KLSAgZGVmIHRlc3RPcmRl
cmVkRmllbGRzKHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCB0aGUgZmllbGQgb3JkZXIgaXMgbWFp
bnRhaW5lZCB3aGVuIGdpdmVuIGFuIE9yZGVyZWREaWN0LiIiIgotICAgIHByb3RvX2NscyA9IHBy
b3RvX2J1aWxkZXIuTWFrZVNpbXBsZVByb3RvQ2xhc3MoCi0gICAgICAgIHNlbGYub3JkZXJlZF9m
aWVsZHMsCi0gICAgICAgIGZ1bGxfbmFtZT0nbmV0LnByb3RvMi5weXRob24ucHVibGljLnByb3Rv
X2J1aWxkZXJfdGVzdC5PcmRlcmVkVGVzdCcpCi0gICAgcHJvdG8gPSBwcm90b19jbHMoKQotICAg
IHByb3RvLmZvbyA9IDEyMzQ1Ci0gICAgcHJvdG8uYmFyID0gJ2FzZGYnCi0gICAgc2VsZi5hc3Nl
cnRNdWx0aUxpbmVFcXVhbCgKLSAgICAgICAgJ2ZvbzogMTIzNDVcbmJhcjogImFzZGYiXG4nLCB0
ZXh0X2Zvcm1hdC5NZXNzYWdlVG9TdHJpbmcocHJvdG8pKQotCi0gIGRlZiB0ZXN0TWFrZVNhbWVQ
cm90b0NsYXNzVHdpY2Uoc2VsZik6Ci0gICAgIiIiVGVzdCB0aGF0IHRoZSBEZXNjcmlwdG9yUG9v
bCBpcyB1c2VkLiIiIgotICAgIHBvb2wgPSBkZXNjcmlwdG9yX3Bvb2wuRGVzY3JpcHRvclBvb2wo
KQotICAgIHByb3RvX2NsczEgPSBwcm90b19idWlsZGVyLk1ha2VTaW1wbGVQcm90b0NsYXNzKAot
ICAgICAgICBzZWxmLl9maWVsZHMsCi0gICAgICAgIGZ1bGxfbmFtZT0nbmV0LnByb3RvMi5weXRo
b24ucHVibGljLnByb3RvX2J1aWxkZXJfdGVzdC5UZXN0JywKLSAgICAgICAgcG9vbD1wb29sKQot
ICAgIHByb3RvX2NsczIgPSBwcm90b19idWlsZGVyLk1ha2VTaW1wbGVQcm90b0NsYXNzKAotICAg
ICAgICBzZWxmLl9maWVsZHMsCi0gICAgICAgIGZ1bGxfbmFtZT0nbmV0LnByb3RvMi5weXRob24u
cHVibGljLnByb3RvX2J1aWxkZXJfdGVzdC5UZXN0JywKLSAgICAgICAgcG9vbD1wb29sKQotICAg
IHNlbGYuYXNzZXJ0SXMocHJvdG9fY2xzMS5ERVNDUklQVE9SLCBwcm90b19jbHMyLkRFU0NSSVBU
T1IpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvcHl0aG9uX21lc3NhZ2Uu
cHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvcHl0aG9uX21lc3NhZ2UucHkKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGY4ZjczZGQyMDQ4NmZiODNjNTU3NmFlYThlOGFi
NzUyOGIyZWIyNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3B5dGhvbl9tZXNzYWdlLnB5CisrKyAv
ZGV2L251bGwKQEAgLTEsMTU0OCArMCwwIEBACi0jIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSMgVGhpcyBjb2RlIGlzIG1lYW50
IHRvIHdvcmsgb24gUHl0aG9uIDIuNCBhbmQgYWJvdmUgb25seS4KLSMKLSMgVE9ETyhyb2JpbnNv
bik6IEhlbHBlcnMgZm9yIHZlcmJvc2UsIGNvbW1vbiBjaGVja3MgbGlrZSBzZWVpbmcgaWYgYQot
IyBkZXNjcmlwdG9yJ3MgY3BwX3R5cGUgaXMgQ1BQVFlQRV9NRVNTQUdFLgotCi0iIiJDb250YWlu
cyBhIG1ldGFjbGFzcyBhbmQgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZQotcHJvdG9j
b2wgbWVzc2FnZSBjbGFzc2VzIGZyb20gRGVzY3JpcHRvciBvYmplY3RzIGF0IHJ1bnRpbWUuCi0K
LVJlY2FsbCB0aGF0IGEgbWV0YWNsYXNzIGlzIHRoZSAidHlwZSIgb2YgYSBjbGFzcy4KLShBIGNs
YXNzIGlzIHRvIGEgbWV0YWNsYXNzIHdoYXQgYW4gaW5zdGFuY2UgaXMgdG8gYSBjbGFzcy4pCi0K
LUluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZSBHZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBlIG1l
dGFjbGFzcwotdG8gaW5qZWN0IGFsbCB0aGUgdXNlZnVsIGZ1bmN0aW9uYWxpdHkgaW50byB0aGUg
Y2xhc3Nlcwotb3V0cHV0IGJ5IHRoZSBwcm90b2NvbCBjb21waWxlciBhdCBjb21waWxlLXRpbWUu
Ci0KLVRoZSB1cHNob3Qgb2YgYWxsIHRoaXMgaXMgdGhhdCB0aGUgcmVhbCBpbXBsZW1lbnRhdGlv
bgotZGV0YWlscyBmb3IgQUxMIHB1cmUtUHl0aG9uIHByb3RvY29sIGJ1ZmZlcnMgYXJlICpoZXJl
IGluCi10aGlzIGZpbGUqLgotIiIiCi0KLV9fYXV0aG9yX18gPSAncm9iaW5zb25AZ29vZ2xlLmNv
bSAoV2lsbCBSb2JpbnNvbiknCi0KLWZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KLWltcG9ydCBzeXMK
LWltcG9ydCBzdHJ1Y3QKLWltcG9ydCB3ZWFrcmVmCi0KLWltcG9ydCBzaXgKLXRyeToKLSAgaW1w
b3J0IHNpeC5tb3Zlcy5jb3B5cmVnIGFzIGNvcHlyZWcKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAg
IyBPbiBzb21lIHBsYXRmb3JtcywgZm9yIGV4YW1wbGUgZ01hYywgd2UgcnVuIG5hdGl2ZSBQeXRo
b24gYmVjYXVzZSB0aGVyZSBpcwotICAjIG5vdGhpbmcgbGlrZSBoZXJtZXRpYyBQeXRob24uIFRo
aXMgbWVhbnMgbGVzc2VyIGNvbnRyb2wgb24gdGhlIHN5c3RlbSBhbmQKLSAgIyB0aGUgc2l4Lm1v
dmVzIHBhY2thZ2UgbWF5IGJlIG1pc3NpbmcgKGlzIG1pc3Npbmcgb24gMjAxNTAzMjEgb24gZ01h
YykuIEJlCi0gICMgZXh0cmEgY29uc2VydmF0aXZlIGFuZCB0cnkgdG8gbG9hZCB0aGUgb2xkIHJl
cGxhY2VtZW50IGlmIGl0IGZhaWxzLgotICBpbXBvcnQgY29weV9yZWcgYXMgY29weXJlZwotCi0j
IFdlIHVzZSAiYXMiIHRvIGF2b2lkIG5hbWUgY29sbGlzaW9ucyB3aXRoIHZhcmlhYmxlcy4KLWZy
b20gZ29vZ2xlLnByb3RvYnVmLmludGVybmFsIGltcG9ydCBjb250YWluZXJzCi1mcm9tIGdvb2ds
ZS5wcm90b2J1Zi5pbnRlcm5hbCBpbXBvcnQgZGVjb2RlcgotZnJvbSBnb29nbGUucHJvdG9idWYu
aW50ZXJuYWwgaW1wb3J0IGVuY29kZXIKLWZyb20gZ29vZ2xlLnByb3RvYnVmLmludGVybmFsIGlt
cG9ydCBlbnVtX3R5cGVfd3JhcHBlcgotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1w
b3J0IG1lc3NhZ2VfbGlzdGVuZXIgYXMgbWVzc2FnZV9saXN0ZW5lcl9tb2QKLWZyb20gZ29vZ2xl
LnByb3RvYnVmLmludGVybmFsIGltcG9ydCB0eXBlX2NoZWNrZXJzCi1mcm9tIGdvb2dsZS5wcm90
b2J1Zi5pbnRlcm5hbCBpbXBvcnQgd2VsbF9rbm93bl90eXBlcwotZnJvbSBnb29nbGUucHJvdG9i
dWYuaW50ZXJuYWwgaW1wb3J0IHdpcmVfZm9ybWF0Ci1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBv
cnQgZGVzY3JpcHRvciBhcyBkZXNjcmlwdG9yX21vZAotZnJvbSBnb29nbGUucHJvdG9idWYgaW1w
b3J0IG1lc3NhZ2UgYXMgbWVzc2FnZV9tb2QKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBz
eW1ib2xfZGF0YWJhc2UKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB0ZXh0X2Zvcm1hdAot
Ci1fRmllbGREZXNjcmlwdG9yID0gZGVzY3JpcHRvcl9tb2QuRmllbGREZXNjcmlwdG9yCi1fQW55
RnVsbFR5cGVOYW1lID0gJ2dvb2dsZS5wcm90b2J1Zi5BbnknCi0KLQotY2xhc3MgR2VuZXJhdGVk
UHJvdG9jb2xNZXNzYWdlVHlwZSh0eXBlKToKLQotICAiIiJNZXRhY2xhc3MgZm9yIHByb3RvY29s
IG1lc3NhZ2UgY2xhc3NlcyBjcmVhdGVkIGF0IHJ1bnRpbWUgZnJvbSBEZXNjcmlwdG9ycy4KLQot
ICBXZSBhZGQgaW1wbGVtZW50YXRpb25zIGZvciBhbGwgbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhl
IE1lc3NhZ2UgY2xhc3MuICBXZQotICBhbHNvIGNyZWF0ZSBwcm9wZXJ0aWVzIHRvIGFsbG93IGdl
dHRpbmcvc2V0dGluZyBhbGwgZmllbGRzIGluIHRoZSBwcm90b2NvbAotICBtZXNzYWdlLiAgRmlu
YWxseSwgd2UgY3JlYXRlIHNsb3RzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSBhY2NpZGVudGFsbHkK
LSAgInNldHRpbmciIG5vbmV4aXN0ZW50IGZpZWxkcyBpbiB0aGUgcHJvdG9jb2wgbWVzc2FnZSwg
d2hpY2ggdGhlbiB3b3VsZG4ndCBnZXQKLSAgc2VyaWFsaXplZCAvIGRlc2VyaWFsaXplZCBwcm9w
ZXJseS4KLQotICBUaGUgcHJvdG9jb2wgY29tcGlsZXIgY3VycmVudGx5IHVzZXMgdGhpcyBtZXRh
Y2xhc3MgdG8gY3JlYXRlIHByb3RvY29sCi0gIG1lc3NhZ2UgY2xhc3NlcyBhdCBydW50aW1lLiAg
Q2xpZW50cyBjYW4gYWxzbyBtYW51YWxseSBjcmVhdGUgdGhlaXIgb3duCi0gIGNsYXNzZXMgYXQg
cnVudGltZSwgYXMgaW4gdGhpcyBleGFtcGxlOgotCi0gIG15ZGVzY3JpcHRvciA9IERlc2NyaXB0
b3IoLi4uLi4pCi0gIGNsYXNzIE15UHJvdG9DbGFzcyhNZXNzYWdlKToKLSAgICBfX21ldGFjbGFz
c19fID0gR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZQotICAgIERFU0NSSVBUT1IgPSBteWRl
c2NyaXB0b3IKLSAgbXlwcm90b19pbnN0YW5jZSA9IE15UHJvdG9DbGFzcygpCi0gIG15cHJvdG8u
Zm9vX2ZpZWxkID0gMjMKLSAgLi4uCi0KLSAgVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBub3Qgd29y
ayBmb3IgbmVzdGVkIHR5cGVzLiBJZiB5b3Ugd2lzaCB0byBpbmNsdWRlIHRoZW0sCi0gIHVzZSBy
ZWZsZWN0aW9uLk1ha2VDbGFzcygpIGluc3RlYWQgb2YgbWFudWFsbHkgaW5zdGFudGlhdGluZyB0
aGUgY2xhc3MgaW4KLSAgb3JkZXIgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBjbGFzcyBzdHJ1
Y3R1cmUuCi0gICIiIgotCi0gICMgTXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHByb3RvY29s
LWNvbXBpbGVyIGNvZGUgaW4KLSAgIyBwcm90bzIvY29tcGlsZXIvaW50ZXJuYWwvZ2VuZXJhdG9y
LiouCi0gIF9ERVNDUklQVE9SX0tFWSA9ICdERVNDUklQVE9SJwotCi0gIGRlZiBfX25ld19fKGNs
cywgbmFtZSwgYmFzZXMsIGRpY3Rpb25hcnkpOgotICAgICIiIkN1c3RvbSBhbGxvY2F0aW9uIGZv
ciBydW50aW1lLWdlbmVyYXRlZCBjbGFzcyB0eXBlcy4KLQotICAgIFdlIG92ZXJyaWRlIF9fbmV3
X18gYmVjYXVzZSB0aGlzIGlzIGFwcGFyZW50bHkgdGhlIG9ubHkgcGxhY2UKLSAgICB3aGVyZSB3
ZSBjYW4gbWVhbmluZ2Z1bGx5IHNldCBfX3Nsb3RzX18gb24gdGhlIGNsYXNzIHdlJ3JlIGNyZWF0
aW5nKD8pLgotICAgIChUaGUgaW50ZXJwbGF5IGJldHdlZW4gbWV0YWNsYXNzZXMgYW5kIHNsb3Rz
IGlzIG5vdCB2ZXJ5IHdlbGwtZG9jdW1lbnRlZCkuCi0KLSAgICBBcmdzOgotICAgICAgbmFtZTog
TmFtZSBvZiB0aGUgY2xhc3MgKGlnbm9yZWQsIGJ1dCByZXF1aXJlZCBieSB0aGUKLSAgICAgICAg
bWV0YWNsYXNzIHByb3RvY29sKS4KLSAgICAgIGJhc2VzOiBCYXNlIGNsYXNzZXMgb2YgdGhlIGNs
YXNzIHdlJ3JlIGNvbnN0cnVjdGluZy4KLSAgICAgICAgKFNob3VsZCBiZSBtZXNzYWdlLk1lc3Nh
Z2UpLiAgV2UgaWdub3JlIHRoaXMgZmllbGQsIGJ1dAotICAgICAgICBpdCdzIHJlcXVpcmVkIGJ5
IHRoZSBtZXRhY2xhc3MgcHJvdG9jb2wKLSAgICAgIGRpY3Rpb25hcnk6IFRoZSBjbGFzcyBkaWN0
aW9uYXJ5IG9mIHRoZSBjbGFzcyB3ZSdyZQotICAgICAgICBjb25zdHJ1Y3RpbmcuICBkaWN0aW9u
YXJ5W19ERVNDUklQVE9SX0tFWV0gbXVzdCBjb250YWluCi0gICAgICAgIGEgRGVzY3JpcHRvciBv
YmplY3QgZGVzY3JpYmluZyB0aGlzIHByb3RvY29sIG1lc3NhZ2UKLSAgICAgICAgdHlwZS4KLQot
ICAgIFJldHVybnM6Ci0gICAgICBOZXdseS1hbGxvY2F0ZWQgY2xhc3MuCi0gICAgIiIiCi0gICAg
ZGVzY3JpcHRvciA9IGRpY3Rpb25hcnlbR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZS5fREVT
Q1JJUFRPUl9LRVldCi0gICAgaWYgZGVzY3JpcHRvci5mdWxsX25hbWUgaW4gd2VsbF9rbm93bl90
eXBlcy5XS1RCQVNFUzoKLSAgICAgIGJhc2VzICs9ICh3ZWxsX2tub3duX3R5cGVzLldLVEJBU0VT
W2Rlc2NyaXB0b3IuZnVsbF9uYW1lXSwpCi0gICAgX0FkZENsYXNzQXR0cmlidXRlc0Zvck5lc3Rl
ZEV4dGVuc2lvbnMoZGVzY3JpcHRvciwgZGljdGlvbmFyeSkKLSAgICBfQWRkU2xvdHMoZGVzY3Jp
cHRvciwgZGljdGlvbmFyeSkKLQotICAgIHN1cGVyY2xhc3MgPSBzdXBlcihHZW5lcmF0ZWRQcm90
b2NvbE1lc3NhZ2VUeXBlLCBjbHMpCi0gICAgbmV3X2NsYXNzID0gc3VwZXJjbGFzcy5fX25ld19f
KGNscywgbmFtZSwgYmFzZXMsIGRpY3Rpb25hcnkpCi0gICAgcmV0dXJuIG5ld19jbGFzcwotCi0g
IGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0aW9uYXJ5KToKLSAgICAiIiJIZXJl
IHdlIHBlcmZvcm0gdGhlIG1ham9yaXR5IG9mIG91ciB3b3JrIG9uIHRoZSBjbGFzcy4KLSAgICBX
ZSBhZGQgZW51bSBnZXR0ZXJzLCBhbiBfX2luaXRfXyBtZXRob2QsIGltcGxlbWVudGF0aW9ucwot
ICAgIG9mIGFsbCBNZXNzYWdlIG1ldGhvZHMsIGFuZCBwcm9wZXJ0aWVzIGZvciBhbGwgZmllbGRz
Ci0gICAgaW4gdGhlIHByb3RvY29sIHR5cGUuCi0KLSAgICBBcmdzOgotICAgICAgbmFtZTogTmFt
ZSBvZiB0aGUgY2xhc3MgKGlnbm9yZWQsIGJ1dCByZXF1aXJlZCBieSB0aGUKLSAgICAgICAgbWV0
YWNsYXNzIHByb3RvY29sKS4KLSAgICAgIGJhc2VzOiBCYXNlIGNsYXNzZXMgb2YgdGhlIGNsYXNz
IHdlJ3JlIGNvbnN0cnVjdGluZy4KLSAgICAgICAgKFNob3VsZCBiZSBtZXNzYWdlLk1lc3NhZ2Up
LiAgV2UgaWdub3JlIHRoaXMgZmllbGQsIGJ1dAotICAgICAgICBpdCdzIHJlcXVpcmVkIGJ5IHRo
ZSBtZXRhY2xhc3MgcHJvdG9jb2wKLSAgICAgIGRpY3Rpb25hcnk6IFRoZSBjbGFzcyBkaWN0aW9u
YXJ5IG9mIHRoZSBjbGFzcyB3ZSdyZQotICAgICAgICBjb25zdHJ1Y3RpbmcuICBkaWN0aW9uYXJ5
W19ERVNDUklQVE9SX0tFWV0gbXVzdCBjb250YWluCi0gICAgICAgIGEgRGVzY3JpcHRvciBvYmpl
Y3QgZGVzY3JpYmluZyB0aGlzIHByb3RvY29sIG1lc3NhZ2UKLSAgICAgICAgdHlwZS4KLSAgICAi
IiIKLSAgICBkZXNjcmlwdG9yID0gZGljdGlvbmFyeVtHZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VU
eXBlLl9ERVNDUklQVE9SX0tFWV0KLSAgICBjbHMuX2RlY29kZXJzX2J5X3RhZyA9IHt9Ci0gICAg
Y2xzLl9leHRlbnNpb25zX2J5X25hbWUgPSB7fQotICAgIGNscy5fZXh0ZW5zaW9uc19ieV9udW1i
ZXIgPSB7fQotICAgIGlmIChkZXNjcmlwdG9yLmhhc19vcHRpb25zIGFuZAotICAgICAgICBkZXNj
cmlwdG9yLkdldE9wdGlvbnMoKS5tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCk6Ci0gICAgICBjbHMu
X2RlY29kZXJzX2J5X3RhZ1tkZWNvZGVyLk1FU1NBR0VfU0VUX0lURU1fVEFHXSA9ICgKLSAgICAg
ICAgICBkZWNvZGVyLk1lc3NhZ2VTZXRJdGVtRGVjb2RlcihjbHMuX2V4dGVuc2lvbnNfYnlfbnVt
YmVyKSwgTm9uZSkKLQotICAgICMgQXR0YWNoIHN0dWZmIHRvIGVhY2ggRmllbGREZXNjcmlwdG9y
IGZvciBxdWljayBsb29rdXAgbGF0ZXIgb24uCi0gICAgZm9yIGZpZWxkIGluIGRlc2NyaXB0b3Iu
ZmllbGRzOgotICAgICAgX0F0dGFjaEZpZWxkSGVscGVycyhjbHMsIGZpZWxkKQotCi0gICAgZGVz
Y3JpcHRvci5fY29uY3JldGVfY2xhc3MgPSBjbHMgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3Rl
ZC1hY2Nlc3MKLSAgICBfQWRkRW51bVZhbHVlcyhkZXNjcmlwdG9yLCBjbHMpCi0gICAgX0FkZElu
aXRNZXRob2QoZGVzY3JpcHRvciwgY2xzKQotICAgIF9BZGRQcm9wZXJ0aWVzRm9yRmllbGRzKGRl
c2NyaXB0b3IsIGNscykKLSAgICBfQWRkUHJvcGVydGllc0ZvckV4dGVuc2lvbnMoZGVzY3JpcHRv
ciwgY2xzKQotICAgIF9BZGRTdGF0aWNNZXRob2RzKGNscykKLSAgICBfQWRkTWVzc2FnZU1ldGhv
ZHMoZGVzY3JpcHRvciwgY2xzKQotICAgIF9BZGRQcml2YXRlSGVscGVyTWV0aG9kcyhkZXNjcmlw
dG9yLCBjbHMpCi0gICAgY29weXJlZy5waWNrbGUoY2xzLCBsYW1iZGEgb2JqOiAoY2xzLCAoKSwg
b2JqLl9fZ2V0c3RhdGVfXygpKSkKLQotICAgIHN1cGVyY2xhc3MgPSBzdXBlcihHZW5lcmF0ZWRQ
cm90b2NvbE1lc3NhZ2VUeXBlLCBjbHMpCi0gICAgc3VwZXJjbGFzcy5fX2luaXRfXyhuYW1lLCBi
YXNlcywgZGljdGlvbmFyeSkKLQotCi0jIFN0YXRlbGVzcyBoZWxwZXJzIGZvciBHZW5lcmF0ZWRQ
cm90b2NvbE1lc3NhZ2VUeXBlIGJlbG93LgotIyBPdXRzaWRlIGNsaWVudHMgc2hvdWxkIG5vdCBh
Y2Nlc3MgdGhlc2UgZGlyZWN0bHkuCi0jCi0jIEkgb3B0ZWQgbm90IHRvIG1ha2UgYW55IG9mIHRo
ZXNlIG1ldGhvZHMgb24gdGhlIG1ldGFjbGFzcywgdG8gbWFrZSBpdCBtb3JlCi0jIGNsZWFyIHRo
YXQgSSdtIG5vdCByZWFsbHkgdXNpbmcgYW55IHN0YXRlIHRoZXJlIGFuZCB0byBrZWVwIGNsaWVu
dHMgZnJvbQotIyB0aGlua2luZyB0aGF0IHRoZXkgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZXNl
IGNvbnN0cnVjdGlvbiBoZWxwZXJzLgotCi0KLWRlZiBfUHJvcGVydHlOYW1lKHByb3RvX2ZpZWxk
X25hbWUpOgotICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwdWJsaWMgcHJvcGVydHkgYXR0
cmlidXRlIHdoaWNoCi0gIGNsaWVudHMgY2FuIHVzZSB0byBnZXQgYW5kIChpbiBzb21lIGNhc2Vz
KSBzZXQgdGhlIHZhbHVlCi0gIG9mIGEgcHJvdG9jb2wgbWVzc2FnZSBmaWVsZC4KLQotICBBcmdz
OgotICAgIHByb3RvX2ZpZWxkX25hbWU6IFRoZSBwcm90b2NvbCBtZXNzYWdlIGZpZWxkIG5hbWUs
IGV4YWN0bHkKLSAgICAgIGFzIGl0IGFwcGVhcnMgKG9yIHdvdWxkIGFwcGVhcikgaW4gYSAucHJv
dG8gZmlsZS4KLSAgIiIiCi0gICMgVE9ETyhyb2JpbnNvbik6IEVzY2FwZSBQeXRob24ga2V5d29y
ZHMgKGUuZy4sIHlpZWxkKSwgYW5kIHRlc3QgdGhpcyBzdXBwb3J0LgotICAjIG5ub3J3aXR6IG1h
a2VzIG15IGRheSBieSB3cml0aW5nOgotICAjICIiIgotICAjIEZZSS4gIFNlZSB0aGUga2V5d29y
ZCBtb2R1bGUgaW4gdGhlIHN0ZGxpYi4gVGhpcyBjb3VsZCBiZSBhcyBzaW1wbGUgYXM6Ci0gICMK
LSAgIyBpZiBrZXl3b3JkLmlza2V5d29yZChwcm90b19maWVsZF9uYW1lKToKLSAgIyAgIHJldHVy
biBwcm90b19maWVsZF9uYW1lICsgIl8iCi0gICMgcmV0dXJuIHByb3RvX2ZpZWxkX25hbWUKLSAg
IyAiIiIKLSAgIyBLZW50b24gc2F5czogIFRoZSBhYm92ZSBpcyBhIEJBRCBJREVBLiAgUGVvcGxl
IHJlbHkgb24gYmVpbmcgYWJsZSB0byB1c2UKLSAgIyAgIGdldGF0dHIoKSBhbmQgc2V0YXR0cigp
IHRvIHJlZmxlY3RpdmVseSBtYW5pcHVsYXRlIGZpZWxkIHZhbHVlcy4gIElmIHdlCi0gICMgICBy
ZW5hbWUgdGhlIHByb3BlcnRpZXMsIHRoZW4gZXZlcnkgc3VjaCB1c2VyIGhhcyB0byBhbHNvIG1h
a2Ugc3VyZSB0byBhcHBseQotICAjICAgdGhlIHNhbWUgdHJhbnNmb3JtYXRpb24uICBOb3RlIHRo
YXQgY3VycmVudGx5IGlmIHlvdSBuYW1lIGEgZmllbGQgInlpZWxkIiwKLSAgIyAgIHlvdSBjYW4g
c3RpbGwgYWNjZXNzIGl0IGp1c3QgZmluZSB1c2luZyBnZXRhdHRyL3NldGF0dHIgLS0gaXQncyBu
b3QgZXZlbgotICAjICAgdGhhdCBjdW1iZXJzb21lIHRvIGRvIHNvLgotICAjIFRPRE8oa2VudG9u
KTogIFJlbW92ZSB0aGlzIG1ldGhvZCBlbnRpcmVseSBpZi93aGVuIGV2ZXJ5b25lIGFncmVlcyB3
aXRoIG15Ci0gICMgICBwb3NpdGlvbi4KLSAgcmV0dXJuIHByb3RvX2ZpZWxkX25hbWUKLQotCi1k
ZWYgX1ZlcmlmeUV4dGVuc2lvbkhhbmRsZShtZXNzYWdlLCBleHRlbnNpb25faGFuZGxlKToKLSAg
IiIiVmVyaWZ5IHRoYXQgdGhlIGdpdmVuIGV4dGVuc2lvbiBoYW5kbGUgaXMgdmFsaWQuIiIiCi0K
LSAgaWYgbm90IGlzaW5zdGFuY2UoZXh0ZW5zaW9uX2hhbmRsZSwgX0ZpZWxkRGVzY3JpcHRvcik6
Ci0gICAgcmFpc2UgS2V5RXJyb3IoJ0hhc0V4dGVuc2lvbigpIGV4cGVjdHMgYW4gZXh0ZW5zaW9u
IGhhbmRsZSwgZ290OiAlcycgJQotICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbl9oYW5kbGUp
Ci0KLSAgaWYgbm90IGV4dGVuc2lvbl9oYW5kbGUuaXNfZXh0ZW5zaW9uOgotICAgIHJhaXNlIEtl
eUVycm9yKCciJXMiIGlzIG5vdCBhbiBleHRlbnNpb24uJyAlIGV4dGVuc2lvbl9oYW5kbGUuZnVs
bF9uYW1lKQotCi0gIGlmIG5vdCBleHRlbnNpb25faGFuZGxlLmNvbnRhaW5pbmdfdHlwZToKLSAg
ICByYWlzZSBLZXlFcnJvcignIiVzIiBpcyBtaXNzaW5nIGEgY29udGFpbmluZ190eXBlLicKLSAg
ICAgICAgICAgICAgICAgICAlIGV4dGVuc2lvbl9oYW5kbGUuZnVsbF9uYW1lKQotCi0gIGlmIGV4
dGVuc2lvbl9oYW5kbGUuY29udGFpbmluZ190eXBlIGlzIG5vdCBtZXNzYWdlLkRFU0NSSVBUT1I6
Ci0gICAgcmFpc2UgS2V5RXJyb3IoJ0V4dGVuc2lvbiAiJXMiIGV4dGVuZHMgbWVzc2FnZSB0eXBl
ICIlcyIsIGJ1dCB0aGlzICcKLSAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSBpcyBvZiB0eXBl
ICIlcyIuJyAlCi0gICAgICAgICAgICAgICAgICAgKGV4dGVuc2lvbl9oYW5kbGUuZnVsbF9uYW1l
LAotICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25faGFuZGxlLmNvbnRhaW5pbmdfdHlwZS5m
dWxsX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuREVTQ1JJUFRPUi5mdWxsX25h
bWUpKQotCi0KLWRlZiBfQWRkU2xvdHMobWVzc2FnZV9kZXNjcmlwdG9yLCBkaWN0aW9uYXJ5KToK
LSAgIiIiQWRkcyBhIF9fc2xvdHNfXyBlbnRyeSB0byBkaWN0aW9uYXJ5LCBjb250YWluaW5nIHRo
ZSBuYW1lcyBvZiBhbGwgdmFsaWQKLSAgYXR0cmlidXRlcyBmb3IgdGhpcyBtZXNzYWdlIHR5cGUu
Ci0KLSAgQXJnczoKLSAgICBtZXNzYWdlX2Rlc2NyaXB0b3I6IEEgRGVzY3JpcHRvciBpbnN0YW5j
ZSBkZXNjcmliaW5nIHRoaXMgbWVzc2FnZSB0eXBlLgotICAgIGRpY3Rpb25hcnk6IENsYXNzIGRp
Y3Rpb25hcnkgdG8gd2hpY2ggd2UnbGwgYWRkIGEgJ19fc2xvdHNfXycgZW50cnkuCi0gICIiIgot
ICBkaWN0aW9uYXJ5WydfX3Nsb3RzX18nXSA9IFsnX2NhY2hlZF9ieXRlX3NpemUnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnX2NhY2hlZF9ieXRlX3NpemVfZGlydHknLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnX2ZpZWxkcycsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdfdW5rbm93bl9maWVsZHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
X2lzX3ByZXNlbnRfaW5fcGFyZW50JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19s
aXN0ZW5lcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfbGlzdGVuZXJfZm9yX2No
aWxkcmVuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fd2Vha3JlZl9fJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19vbmVvZnMnXQotCi0KLWRlZiBfSXNNZXNzYWdl
U2V0RXh0ZW5zaW9uKGZpZWxkKToKLSAgcmV0dXJuIChmaWVsZC5pc19leHRlbnNpb24gYW5kCi0g
ICAgICAgICAgZmllbGQuY29udGFpbmluZ190eXBlLmhhc19vcHRpb25zIGFuZAotICAgICAgICAg
IGZpZWxkLmNvbnRhaW5pbmdfdHlwZS5HZXRPcHRpb25zKCkubWVzc2FnZV9zZXRfd2lyZV9mb3Jt
YXQgYW5kCi0gICAgICAgICAgZmllbGQudHlwZSA9PSBfRmllbGREZXNjcmlwdG9yLlRZUEVfTUVT
U0FHRSBhbmQKLSAgICAgICAgICBmaWVsZC5sYWJlbCA9PSBfRmllbGREZXNjcmlwdG9yLkxBQkVM
X09QVElPTkFMKQotCi0KLWRlZiBfSXNNYXBGaWVsZChmaWVsZCk6Ci0gIHJldHVybiAoZmllbGQu
dHlwZSA9PSBfRmllbGREZXNjcmlwdG9yLlRZUEVfTUVTU0FHRSBhbmQKLSAgICAgICAgICBmaWVs
ZC5tZXNzYWdlX3R5cGUuaGFzX29wdGlvbnMgYW5kCi0gICAgICAgICAgZmllbGQubWVzc2FnZV90
eXBlLkdldE9wdGlvbnMoKS5tYXBfZW50cnkpCi0KLQotZGVmIF9Jc01lc3NhZ2VNYXBGaWVsZChm
aWVsZCk6Ci0gIHZhbHVlX3R5cGUgPSBmaWVsZC5tZXNzYWdlX3R5cGUuZmllbGRzX2J5X25hbWVb
InZhbHVlIl0KLSAgcmV0dXJuIHZhbHVlX3R5cGUuY3BwX3R5cGUgPT0gX0ZpZWxkRGVzY3JpcHRv
ci5DUFBUWVBFX01FU1NBR0UKLQotCi1kZWYgX0F0dGFjaEZpZWxkSGVscGVycyhjbHMsIGZpZWxk
X2Rlc2NyaXB0b3IpOgotICBpc19yZXBlYXRlZCA9IChmaWVsZF9kZXNjcmlwdG9yLmxhYmVsID09
IF9GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQpCi0gIGlzX3BhY2thYmxlID0gKGlzX3Jl
cGVhdGVkIGFuZAotICAgICAgICAgICAgICAgICB3aXJlX2Zvcm1hdC5Jc1R5cGVQYWNrYWJsZShm
aWVsZF9kZXNjcmlwdG9yLnR5cGUpKQotICBpZiBub3QgaXNfcGFja2FibGU6Ci0gICAgaXNfcGFj
a2VkID0gRmFsc2UKLSAgZWxpZiBmaWVsZF9kZXNjcmlwdG9yLmNvbnRhaW5pbmdfdHlwZS5zeW50
YXggPT0gInByb3RvMiI6Ci0gICAgaXNfcGFja2VkID0gKGZpZWxkX2Rlc2NyaXB0b3IuaGFzX29w
dGlvbnMgYW5kCi0gICAgICAgICAgICAgICAgZmllbGRfZGVzY3JpcHRvci5HZXRPcHRpb25zKCku
cGFja2VkKQotICBlbHNlOgotICAgIGhhc19wYWNrZWRfZmFsc2UgPSAoZmllbGRfZGVzY3JpcHRv
ci5oYXNfb3B0aW9ucyBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2Rlc2NyaXB0
b3IuR2V0T3B0aW9ucygpLkhhc0ZpZWxkKCJwYWNrZWQiKSBhbmQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZpZWxkX2Rlc2NyaXB0b3IuR2V0T3B0aW9ucygpLnBhY2tlZCA9PSBGYWxzZSkKLSAg
ICBpc19wYWNrZWQgPSBub3QgaGFzX3BhY2tlZF9mYWxzZQotICBpc19tYXBfZW50cnkgPSBfSXNN
YXBGaWVsZChmaWVsZF9kZXNjcmlwdG9yKQotCi0gIGlmIGlzX21hcF9lbnRyeToKLSAgICBmaWVs
ZF9lbmNvZGVyID0gZW5jb2Rlci5NYXBFbmNvZGVyKGZpZWxkX2Rlc2NyaXB0b3IpCi0gICAgc2l6
ZXIgPSBlbmNvZGVyLk1hcFNpemVyKGZpZWxkX2Rlc2NyaXB0b3IpCi0gIGVsaWYgX0lzTWVzc2Fn
ZVNldEV4dGVuc2lvbihmaWVsZF9kZXNjcmlwdG9yKToKLSAgICBmaWVsZF9lbmNvZGVyID0gZW5j
b2Rlci5NZXNzYWdlU2V0SXRlbUVuY29kZXIoZmllbGRfZGVzY3JpcHRvci5udW1iZXIpCi0gICAg
c2l6ZXIgPSBlbmNvZGVyLk1lc3NhZ2VTZXRJdGVtU2l6ZXIoZmllbGRfZGVzY3JpcHRvci5udW1i
ZXIpCi0gIGVsc2U6Ci0gICAgZmllbGRfZW5jb2RlciA9IHR5cGVfY2hlY2tlcnMuVFlQRV9UT19F
TkNPREVSW2ZpZWxkX2Rlc2NyaXB0b3IudHlwZV0oCi0gICAgICAgIGZpZWxkX2Rlc2NyaXB0b3Iu
bnVtYmVyLCBpc19yZXBlYXRlZCwgaXNfcGFja2VkKQotICAgIHNpemVyID0gdHlwZV9jaGVja2Vy
cy5UWVBFX1RPX1NJWkVSW2ZpZWxkX2Rlc2NyaXB0b3IudHlwZV0oCi0gICAgICAgIGZpZWxkX2Rl
c2NyaXB0b3IubnVtYmVyLCBpc19yZXBlYXRlZCwgaXNfcGFja2VkKQotCi0gIGZpZWxkX2Rlc2Ny
aXB0b3IuX2VuY29kZXIgPSBmaWVsZF9lbmNvZGVyCi0gIGZpZWxkX2Rlc2NyaXB0b3IuX3NpemVy
ID0gc2l6ZXIKLSAgZmllbGRfZGVzY3JpcHRvci5fZGVmYXVsdF9jb25zdHJ1Y3RvciA9IF9EZWZh
dWx0VmFsdWVDb25zdHJ1Y3RvckZvckZpZWxkKAotICAgICAgZmllbGRfZGVzY3JpcHRvcikKLQot
ICBkZWYgQWRkRGVjb2Rlcih3aXJldHlwZSwgaXNfcGFja2VkKToKLSAgICB0YWdfYnl0ZXMgPSBl
bmNvZGVyLlRhZ0J5dGVzKGZpZWxkX2Rlc2NyaXB0b3IubnVtYmVyLCB3aXJldHlwZSkKLSAgICBk
ZWNvZGVfdHlwZSA9IGZpZWxkX2Rlc2NyaXB0b3IudHlwZQotICAgIGlmIChkZWNvZGVfdHlwZSA9
PSBfRmllbGREZXNjcmlwdG9yLlRZUEVfRU5VTSBhbmQKLSAgICAgICAgdHlwZV9jaGVja2Vycy5T
dXBwb3J0c09wZW5FbnVtcyhmaWVsZF9kZXNjcmlwdG9yKSk6Ci0gICAgICBkZWNvZGVfdHlwZSA9
IF9GaWVsZERlc2NyaXB0b3IuVFlQRV9JTlQzMgotCi0gICAgb25lb2ZfZGVzY3JpcHRvciA9IE5v
bmUKLSAgICBpZiBmaWVsZF9kZXNjcmlwdG9yLmNvbnRhaW5pbmdfb25lb2YgaXMgbm90IE5vbmU6
Ci0gICAgICBvbmVvZl9kZXNjcmlwdG9yID0gZmllbGRfZGVzY3JpcHRvcgotCi0gICAgaWYgaXNf
bWFwX2VudHJ5OgotICAgICAgaXNfbWVzc2FnZV9tYXAgPSBfSXNNZXNzYWdlTWFwRmllbGQoZmll
bGRfZGVzY3JpcHRvcikKLQotICAgICAgZmllbGRfZGVjb2RlciA9IGRlY29kZXIuTWFwRGVjb2Rl
cigKLSAgICAgICAgICBmaWVsZF9kZXNjcmlwdG9yLCBfR2V0SW5pdGlhbGl6ZURlZmF1bHRGb3JN
YXAoZmllbGRfZGVzY3JpcHRvciksCi0gICAgICAgICAgaXNfbWVzc2FnZV9tYXApCi0gICAgZWxz
ZToKLSAgICAgIGZpZWxkX2RlY29kZXIgPSB0eXBlX2NoZWNrZXJzLlRZUEVfVE9fREVDT0RFUltk
ZWNvZGVfdHlwZV0oCi0gICAgICAgICAgICAgIGZpZWxkX2Rlc2NyaXB0b3IubnVtYmVyLCBpc19y
ZXBlYXRlZCwgaXNfcGFja2VkLAotICAgICAgICAgICAgICBmaWVsZF9kZXNjcmlwdG9yLCBmaWVs
ZF9kZXNjcmlwdG9yLl9kZWZhdWx0X2NvbnN0cnVjdG9yKQotCi0gICAgY2xzLl9kZWNvZGVyc19i
eV90YWdbdGFnX2J5dGVzXSA9IChmaWVsZF9kZWNvZGVyLCBvbmVvZl9kZXNjcmlwdG9yKQotCi0g
IEFkZERlY29kZXIodHlwZV9jaGVja2Vycy5GSUVMRF9UWVBFX1RPX1dJUkVfVFlQRVtmaWVsZF9k
ZXNjcmlwdG9yLnR5cGVdLAotICAgICAgICAgICAgIEZhbHNlKQotCi0gIGlmIGlzX3JlcGVhdGVk
IGFuZCB3aXJlX2Zvcm1hdC5Jc1R5cGVQYWNrYWJsZShmaWVsZF9kZXNjcmlwdG9yLnR5cGUpOgot
ICAgICMgVG8gc3VwcG9ydCB3aXJlIGNvbXBhdGliaWxpdHkgb2YgYWRkaW5nIHBhY2tlZCA9IHRy
dWUsIGFkZCBhIGRlY29kZXIgZm9yCi0gICAgIyBwYWNrZWQgdmFsdWVzIHJlZ2FyZGxlc3Mgb2Yg
dGhlIGZpZWxkJ3Mgb3B0aW9ucy4KLSAgICBBZGREZWNvZGVyKHdpcmVfZm9ybWF0LldJUkVUWVBF
X0xFTkdUSF9ERUxJTUlURUQsIFRydWUpCi0KLQotZGVmIF9BZGRDbGFzc0F0dHJpYnV0ZXNGb3JO
ZXN0ZWRFeHRlbnNpb25zKGRlc2NyaXB0b3IsIGRpY3Rpb25hcnkpOgotICBleHRlbnNpb25fZGlj
dCA9IGRlc2NyaXB0b3IuZXh0ZW5zaW9uc19ieV9uYW1lCi0gIGZvciBleHRlbnNpb25fbmFtZSwg
ZXh0ZW5zaW9uX2ZpZWxkIGluIGV4dGVuc2lvbl9kaWN0Lml0ZW1zKCk6Ci0gICAgYXNzZXJ0IGV4
dGVuc2lvbl9uYW1lIG5vdCBpbiBkaWN0aW9uYXJ5Ci0gICAgZGljdGlvbmFyeVtleHRlbnNpb25f
bmFtZV0gPSBleHRlbnNpb25fZmllbGQKLQotCi1kZWYgX0FkZEVudW1WYWx1ZXMoZGVzY3JpcHRv
ciwgY2xzKToKLSAgIiIiU2V0cyBjbGFzcy1sZXZlbCBhdHRyaWJ1dGVzIGZvciBhbGwgZW51bSBm
aWVsZHMgZGVmaW5lZCBpbiB0aGlzIG1lc3NhZ2UuCi0KLSAgQWxzbyBleHBvcnRpbmcgYSBjbGFz
cy1sZXZlbCBvYmplY3QgdGhhdCBjYW4gbmFtZSBlbnVtIHZhbHVlcy4KLQotICBBcmdzOgotICAg
IGRlc2NyaXB0b3I6IERlc2NyaXB0b3Igb2JqZWN0IGZvciB0aGlzIG1lc3NhZ2UgdHlwZS4KLSAg
ICBjbHM6IENsYXNzIHdlJ3JlIGNvbnN0cnVjdGluZyBmb3IgdGhpcyBtZXNzYWdlIHR5cGUuCi0g
ICIiIgotICBmb3IgZW51bV90eXBlIGluIGRlc2NyaXB0b3IuZW51bV90eXBlczoKLSAgICBzZXRh
dHRyKGNscywgZW51bV90eXBlLm5hbWUsIGVudW1fdHlwZV93cmFwcGVyLkVudW1UeXBlV3JhcHBl
cihlbnVtX3R5cGUpKQotICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdHlwZS52YWx1ZXM6Ci0g
ICAgICBzZXRhdHRyKGNscywgZW51bV92YWx1ZS5uYW1lLCBlbnVtX3ZhbHVlLm51bWJlcikKLQot
Ci1kZWYgX0dldEluaXRpYWxpemVEZWZhdWx0Rm9yTWFwKGZpZWxkKToKLSAgaWYgZmllbGQubGFi
ZWwgIT0gX0ZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBFQVRFRDoKLSAgICByYWlzZSBWYWx1ZUVy
cm9yKCdtYXBfZW50cnkgc2V0IG9uIG5vbi1yZXBlYXRlZCBmaWVsZCAlcycgJSAoCi0gICAgICAg
IGZpZWxkLm5hbWUpKQotICBmaWVsZHNfYnlfbmFtZSA9IGZpZWxkLm1lc3NhZ2VfdHlwZS5maWVs
ZHNfYnlfbmFtZQotICBrZXlfY2hlY2tlciA9IHR5cGVfY2hlY2tlcnMuR2V0VHlwZUNoZWNrZXIo
ZmllbGRzX2J5X25hbWVbJ2tleSddKQotCi0gIHZhbHVlX2ZpZWxkID0gZmllbGRzX2J5X25hbWVb
J3ZhbHVlJ10KLSAgaWYgX0lzTWVzc2FnZU1hcEZpZWxkKGZpZWxkKToKLSAgICBkZWYgTWFrZU1l
c3NhZ2VNYXBEZWZhdWx0KG1lc3NhZ2UpOgotICAgICAgcmV0dXJuIGNvbnRhaW5lcnMuTWVzc2Fn
ZU1hcCgKLSAgICAgICAgICBtZXNzYWdlLl9saXN0ZW5lcl9mb3JfY2hpbGRyZW4sIHZhbHVlX2Zp
ZWxkLm1lc3NhZ2VfdHlwZSwga2V5X2NoZWNrZXIpCi0gICAgcmV0dXJuIE1ha2VNZXNzYWdlTWFw
RGVmYXVsdAotICBlbHNlOgotICAgIHZhbHVlX2NoZWNrZXIgPSB0eXBlX2NoZWNrZXJzLkdldFR5
cGVDaGVja2VyKHZhbHVlX2ZpZWxkKQotICAgIGRlZiBNYWtlUHJpbWl0aXZlTWFwRGVmYXVsdCht
ZXNzYWdlKToKLSAgICAgIHJldHVybiBjb250YWluZXJzLlNjYWxhck1hcCgKLSAgICAgICAgICBt
ZXNzYWdlLl9saXN0ZW5lcl9mb3JfY2hpbGRyZW4sIGtleV9jaGVja2VyLCB2YWx1ZV9jaGVja2Vy
KQotICAgIHJldHVybiBNYWtlUHJpbWl0aXZlTWFwRGVmYXVsdAotCi1kZWYgX0RlZmF1bHRWYWx1
ZUNvbnN0cnVjdG9yRm9yRmllbGQoZmllbGQpOgotICAiIiJSZXR1cm5zIGEgZnVuY3Rpb24gd2hp
Y2ggcmV0dXJucyBhIGRlZmF1bHQgdmFsdWUgZm9yIGEgZmllbGQuCi0KLSAgQXJnczoKLSAgICBm
aWVsZDogRmllbGREZXNjcmlwdG9yIG9iamVjdCBmb3IgdGhpcyBmaWVsZC4KLQotICBUaGUgcmV0
dXJuZWQgZnVuY3Rpb24gaGFzIG9uZSBhcmd1bWVudDoKLSAgICBtZXNzYWdlOiBNZXNzYWdlIGlu
c3RhbmNlIGNvbnRhaW5pbmcgdGhpcyBmaWVsZCwgb3IgYSB3ZWFrcmVmIHByb3h5Ci0gICAgICBv
ZiBzYW1lLgotCi0gIFRoYXQgZnVuY3Rpb24gaW4gdHVybiByZXR1cm5zIGEgZGVmYXVsdCB2YWx1
ZSBmb3IgdGhpcyBmaWVsZC4gIFRoZSBkZWZhdWx0Ci0gICAgdmFsdWUgbWF5IHJlZmVyIGJhY2sg
dG8gfG1lc3NhZ2V8IHZpYSBhIHdlYWsgcmVmZXJlbmNlLgotICAiIiIKLQotICBpZiBfSXNNYXBG
aWVsZChmaWVsZCk6Ci0gICAgcmV0dXJuIF9HZXRJbml0aWFsaXplRGVmYXVsdEZvck1hcChmaWVs
ZCkKLQotICBpZiBmaWVsZC5sYWJlbCA9PSBfRmllbGREZXNjcmlwdG9yLkxBQkVMX1JFUEVBVEVE
OgotICAgIGlmIGZpZWxkLmhhc19kZWZhdWx0X3ZhbHVlIGFuZCBmaWVsZC5kZWZhdWx0X3ZhbHVl
ICE9IFtdOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignUmVwZWF0ZWQgZmllbGQgZGVmYXVsdCB2
YWx1ZSBub3QgZW1wdHkgbGlzdDogJXMnICUgKAotICAgICAgICAgIGZpZWxkLmRlZmF1bHRfdmFs
dWUpKQotICAgIGlmIGZpZWxkLmNwcF90eXBlID09IF9GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9N
RVNTQUdFOgotICAgICAgIyBXZSBjYW4ndCBsb29rIGF0IF9jb25jcmV0ZV9jbGFzcyB5ZXQgc2lu
Y2UgaXQgbWlnaHQgbm90IGhhdmUKLSAgICAgICMgYmVlbiBzZXQuICAoRGVwZW5kcyBvbiBvcmRl
ciBpbiB3aGljaCB3ZSBpbml0aWFsaXplIHRoZSBjbGFzc2VzKS4KLSAgICAgIG1lc3NhZ2VfdHlw
ZSA9IGZpZWxkLm1lc3NhZ2VfdHlwZQotICAgICAgZGVmIE1ha2VSZXBlYXRlZE1lc3NhZ2VEZWZh
dWx0KG1lc3NhZ2UpOgotICAgICAgICByZXR1cm4gY29udGFpbmVycy5SZXBlYXRlZENvbXBvc2l0
ZUZpZWxkQ29udGFpbmVyKAotICAgICAgICAgICAgbWVzc2FnZS5fbGlzdGVuZXJfZm9yX2NoaWxk
cmVuLCBmaWVsZC5tZXNzYWdlX3R5cGUpCi0gICAgICByZXR1cm4gTWFrZVJlcGVhdGVkTWVzc2Fn
ZURlZmF1bHQKLSAgICBlbHNlOgotICAgICAgdHlwZV9jaGVja2VyID0gdHlwZV9jaGVja2Vycy5H
ZXRUeXBlQ2hlY2tlcihmaWVsZCkKLSAgICAgIGRlZiBNYWtlUmVwZWF0ZWRTY2FsYXJEZWZhdWx0
KG1lc3NhZ2UpOgotICAgICAgICByZXR1cm4gY29udGFpbmVycy5SZXBlYXRlZFNjYWxhckZpZWxk
Q29udGFpbmVyKAotICAgICAgICAgICAgbWVzc2FnZS5fbGlzdGVuZXJfZm9yX2NoaWxkcmVuLCB0
eXBlX2NoZWNrZXIpCi0gICAgICByZXR1cm4gTWFrZVJlcGVhdGVkU2NhbGFyRGVmYXVsdAotCi0g
IGlmIGZpZWxkLmNwcF90eXBlID09IF9GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9NRVNTQUdFOgot
ICAgICMgX2NvbmNyZXRlX2NsYXNzIG1heSBub3QgeWV0IGJlIGluaXRpYWxpemVkLgotICAgIG1l
c3NhZ2VfdHlwZSA9IGZpZWxkLm1lc3NhZ2VfdHlwZQotICAgIGRlZiBNYWtlU3ViTWVzc2FnZURl
ZmF1bHQobWVzc2FnZSk6Ci0gICAgICByZXN1bHQgPSBtZXNzYWdlX3R5cGUuX2NvbmNyZXRlX2Ns
YXNzKCkKLSAgICAgIHJlc3VsdC5fU2V0TGlzdGVuZXIoCi0gICAgICAgICAgX09uZW9mTGlzdGVu
ZXIobWVzc2FnZSwgZmllbGQpCi0gICAgICAgICAgaWYgZmllbGQuY29udGFpbmluZ19vbmVvZiBp
cyBub3QgTm9uZQotICAgICAgICAgIGVsc2UgbWVzc2FnZS5fbGlzdGVuZXJfZm9yX2NoaWxkcmVu
KQotICAgICAgcmV0dXJuIHJlc3VsdAotICAgIHJldHVybiBNYWtlU3ViTWVzc2FnZURlZmF1bHQK
LQotICBkZWYgTWFrZVNjYWxhckRlZmF1bHQobWVzc2FnZSk6Ci0gICAgIyBUT0RPKHByb3RvYnVm
LXRlYW0pOiBUaGlzIG1heSBiZSBicm9rZW4gc2luY2UgdGhlcmUgbWF5IG5vdCBiZQotICAgICMg
ZGVmYXVsdF92YWx1ZS4gIENvbWJpbmUgd2l0aCBoYXNfZGVmYXVsdF92YWx1ZSBzb21laG93Lgot
ICAgIHJldHVybiBmaWVsZC5kZWZhdWx0X3ZhbHVlCi0gIHJldHVybiBNYWtlU2NhbGFyRGVmYXVs
dAotCi0KLWRlZiBfUmVyYWlzZVR5cGVFcnJvcldpdGhGaWVsZE5hbWUobWVzc2FnZV9uYW1lLCBm
aWVsZF9uYW1lKToKLSAgIiIiUmUtcmFpc2UgdGhlIGN1cnJlbnRseS1oYW5kbGVkIFR5cGVFcnJv
ciB3aXRoIHRoZSBmaWVsZCBuYW1lIGFkZGVkLiIiIgotICBleGMgPSBzeXMuZXhjX2luZm8oKVsx
XQotICBpZiBsZW4oZXhjLmFyZ3MpID09IDEgYW5kIHR5cGUoZXhjKSBpcyBUeXBlRXJyb3I6Ci0g
ICAgIyBzaW1wbGUgVHlwZUVycm9yOyBhZGQgZmllbGQgbmFtZSB0byBleGNlcHRpb24gbWVzc2Fn
ZQotICAgIGV4YyA9IFR5cGVFcnJvcignJXMgZm9yIGZpZWxkICVzLiVzJyAlIChzdHIoZXhjKSwg
bWVzc2FnZV9uYW1lLCBmaWVsZF9uYW1lKSkKLQotICAjIHJlLXJhaXNlIHBvc3NpYmx5LWFtZW5k
ZWQgZXhjZXB0aW9uIHdpdGggb3JpZ2luYWwgdHJhY2ViYWNrOgotICBzaXgucmVyYWlzZSh0eXBl
KGV4YyksIGV4Yywgc3lzLmV4Y19pbmZvKClbMl0pCi0KLQotZGVmIF9BZGRJbml0TWV0aG9kKG1l
c3NhZ2VfZGVzY3JpcHRvciwgY2xzKToKLSAgIiIiQWRkcyBhbiBfX2luaXRfXyBtZXRob2QgdG8g
Y2xzLiIiIgotCi0gIGRlZiBfR2V0SW50ZWdlckVudW1WYWx1ZShlbnVtX3R5cGUsIHZhbHVlKToK
LSAgICAiIiJDb252ZXJ0IGEgc3RyaW5nIG9yIGludGVnZXIgZW51bSB2YWx1ZSB0byBhbiBpbnRl
Z2VyLgotCi0gICAgSWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCBpdCBpcyBjb252ZXJ0ZWQgdG8g
dGhlIGVudW0gdmFsdWUgaW4KLSAgICBlbnVtX3R5cGUgd2l0aCB0aGUgc2FtZSBuYW1lLiAgSWYg
dGhlIHZhbHVlIGlzIG5vdCBhIHN0cmluZywgaXQncwotICAgIHJldHVybmVkIGFzLWlzLiAgKE5v
IGNvbnZlcnNpb24gb3IgYm91bmRzLWNoZWNraW5nIGlzIGRvbmUuKQotICAgICIiIgotICAgIGlm
IGlzaW5zdGFuY2UodmFsdWUsIHNpeC5zdHJpbmdfdHlwZXMpOgotICAgICAgdHJ5OgotICAgICAg
ICByZXR1cm4gZW51bV90eXBlLnZhbHVlc19ieV9uYW1lW3ZhbHVlXS5udW1iZXIKLSAgICAgIGV4
Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRW51bSB0eXBlICVzOiB1
bmtub3duIGxhYmVsICIlcyInICUgKAotICAgICAgICAgICAgZW51bV90eXBlLmZ1bGxfbmFtZSwg
dmFsdWUpKQotICAgIHJldHVybiB2YWx1ZQotCi0gIGRlZiBpbml0KHNlbGYsICoqa3dhcmdzKToK
LSAgICBzZWxmLl9jYWNoZWRfYnl0ZV9zaXplID0gMAotICAgIHNlbGYuX2NhY2hlZF9ieXRlX3Np
emVfZGlydHkgPSBsZW4oa3dhcmdzKSA+IDAKLSAgICBzZWxmLl9maWVsZHMgPSB7fQotICAgICMg
Q29udGFpbnMgYSBtYXBwaW5nIGZyb20gb25lb2YgZmllbGQgZGVzY3JpcHRvcnMgdG8gdGhlIGRl
c2NyaXB0b3IKLSAgICAjIG9mIHRoZSBjdXJyZW50bHkgc2V0IGZpZWxkIGluIHRoYXQgb25lb2Yg
ZmllbGQuCi0gICAgc2VsZi5fb25lb2ZzID0ge30KLQotICAgICMgX3Vua25vd25fZmllbGRzIGlz
ICgpIHdoZW4gZW1wdHkgZm9yIGVmZmljaWVuY3ksIGFuZCB3aWxsIGJlIHR1cm5lZCBpbnRvCi0g
ICAgIyBhIGxpc3QgaWYgZmllbGRzIGFyZSBhZGRlZC4KLSAgICBzZWxmLl91bmtub3duX2ZpZWxk
cyA9ICgpCi0gICAgc2VsZi5faXNfcHJlc2VudF9pbl9wYXJlbnQgPSBGYWxzZQotICAgIHNlbGYu
X2xpc3RlbmVyID0gbWVzc2FnZV9saXN0ZW5lcl9tb2QuTnVsbE1lc3NhZ2VMaXN0ZW5lcigpCi0g
ICAgc2VsZi5fbGlzdGVuZXJfZm9yX2NoaWxkcmVuID0gX0xpc3RlbmVyKHNlbGYpCi0gICAgZm9y
IGZpZWxkX25hbWUsIGZpZWxkX3ZhbHVlIGluIGt3YXJncy5pdGVtcygpOgotICAgICAgZmllbGQg
PSBfR2V0RmllbGRCeU5hbWUobWVzc2FnZV9kZXNjcmlwdG9yLCBmaWVsZF9uYW1lKQotICAgICAg
aWYgZmllbGQgaXMgTm9uZToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlcygpIGdvdCBhbiB1
bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyVzJyIgJQotICAgICAgICAgICAgICAgICAgICAg
ICAgKG1lc3NhZ2VfZGVzY3JpcHRvci5uYW1lLCBmaWVsZF9uYW1lKSkKLSAgICAgIGlmIGZpZWxk
X3ZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICMgZmllbGQ9Tm9uZSBpcyB0aGUgc2FtZSBhcyBubyBm
aWVsZCBhdCBhbGwuCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICBpZiBmaWVsZC5sYWJlbCA9PSBf
RmllbGREZXNjcmlwdG9yLkxBQkVMX1JFUEVBVEVEOgotICAgICAgICBjb3B5ID0gZmllbGQuX2Rl
ZmF1bHRfY29uc3RydWN0b3Ioc2VsZikKLSAgICAgICAgaWYgZmllbGQuY3BwX3R5cGUgPT0gX0Zp
ZWxkRGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0U6ICAjIENvbXBvc2l0ZQotICAgICAgICAgIGlm
IF9Jc01hcEZpZWxkKGZpZWxkKToKLSAgICAgICAgICAgIGlmIF9Jc01lc3NhZ2VNYXBGaWVsZChm
aWVsZCk6Ci0gICAgICAgICAgICAgIGZvciBrZXkgaW4gZmllbGRfdmFsdWU6Ci0gICAgICAgICAg
ICAgICAgY29weVtrZXldLk1lcmdlRnJvbShmaWVsZF92YWx1ZVtrZXldKQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgY29weS51cGRhdGUoZmllbGRfdmFsdWUpCi0gICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGZvciB2YWwgaW4gZmllbGRfdmFsdWU6Ci0gICAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UodmFsLCBkaWN0KToKLSAgICAgICAgICAgICAgICBjb3B5LmFkZCgqKnZh
bCkKLSAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb3B5LmFkZCgpLk1lcmdl
RnJvbSh2YWwpCi0gICAgICAgIGVsc2U6ICAjIFNjYWxhcgotICAgICAgICAgIGlmIGZpZWxkLmNw
cF90eXBlID09IF9GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9FTlVNOgotICAgICAgICAgICAgZmll
bGRfdmFsdWUgPSBbX0dldEludGVnZXJFbnVtVmFsdWUoZmllbGQuZW51bV90eXBlLCB2YWwpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdmFsIGluIGZpZWxkX3ZhbHVlXQotICAgICAg
ICAgIGNvcHkuZXh0ZW5kKGZpZWxkX3ZhbHVlKQotICAgICAgICBzZWxmLl9maWVsZHNbZmllbGRd
ID0gY29weQotICAgICAgZWxpZiBmaWVsZC5jcHBfdHlwZSA9PSBfRmllbGREZXNjcmlwdG9yLkNQ
UFRZUEVfTUVTU0FHRToKLSAgICAgICAgY29weSA9IGZpZWxkLl9kZWZhdWx0X2NvbnN0cnVjdG9y
KHNlbGYpCi0gICAgICAgIG5ld192YWwgPSBmaWVsZF92YWx1ZQotICAgICAgICBpZiBpc2luc3Rh
bmNlKGZpZWxkX3ZhbHVlLCBkaWN0KToKLSAgICAgICAgICBuZXdfdmFsID0gZmllbGQubWVzc2Fn
ZV90eXBlLl9jb25jcmV0ZV9jbGFzcygqKmZpZWxkX3ZhbHVlKQotICAgICAgICB0cnk6Ci0gICAg
ICAgICAgY29weS5NZXJnZUZyb20obmV3X3ZhbCkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoK
LSAgICAgICAgICBfUmVyYWlzZVR5cGVFcnJvcldpdGhGaWVsZE5hbWUobWVzc2FnZV9kZXNjcmlw
dG9yLm5hbWUsIGZpZWxkX25hbWUpCi0gICAgICAgIHNlbGYuX2ZpZWxkc1tmaWVsZF0gPSBjb3B5
Ci0gICAgICBlbHNlOgotICAgICAgICBpZiBmaWVsZC5jcHBfdHlwZSA9PSBfRmllbGREZXNjcmlw
dG9yLkNQUFRZUEVfRU5VTToKLSAgICAgICAgICBmaWVsZF92YWx1ZSA9IF9HZXRJbnRlZ2VyRW51
bVZhbHVlKGZpZWxkLmVudW1fdHlwZSwgZmllbGRfdmFsdWUpCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICBzZXRhdHRyKHNlbGYsIGZpZWxkX25hbWUsIGZpZWxkX3ZhbHVlKQotICAgICAgICBleGNl
cHQgVHlwZUVycm9yOgotICAgICAgICAgIF9SZXJhaXNlVHlwZUVycm9yV2l0aEZpZWxkTmFtZSht
ZXNzYWdlX2Rlc2NyaXB0b3IubmFtZSwgZmllbGRfbmFtZSkKLQotICBpbml0Ll9fbW9kdWxlX18g
PSBOb25lCi0gIGluaXQuX19kb2NfXyA9IE5vbmUKLSAgY2xzLl9faW5pdF9fID0gaW5pdAotCi0K
LWRlZiBfR2V0RmllbGRCeU5hbWUobWVzc2FnZV9kZXNjcmlwdG9yLCBmaWVsZF9uYW1lKToKLSAg
IiIiUmV0dXJucyBhIGZpZWxkIGRlc2NyaXB0b3IgYnkgZmllbGQgbmFtZS4KLQotICBBcmdzOgot
ICAgIG1lc3NhZ2VfZGVzY3JpcHRvcjogQSBEZXNjcmlwdG9yIGRlc2NyaWJpbmcgYWxsIGZpZWxk
cyBpbiBtZXNzYWdlLgotICAgIGZpZWxkX25hbWU6IFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBy
ZXRyaWV2ZS4KLSAgUmV0dXJuczoKLSAgICBUaGUgZmllbGQgZGVzY3JpcHRvciBhc3NvY2lhdGVk
IHdpdGggdGhlIGZpZWxkIG5hbWUuCi0gICIiIgotICB0cnk6Ci0gICAgcmV0dXJuIG1lc3NhZ2Vf
ZGVzY3JpcHRvci5maWVsZHNfYnlfbmFtZVtmaWVsZF9uYW1lXQotICBleGNlcHQgS2V5RXJyb3I6
Ci0gICAgcmFpc2UgVmFsdWVFcnJvcignUHJvdG9jb2wgbWVzc2FnZSAlcyBoYXMgbm8gIiVzIiBm
aWVsZC4nICUKLSAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlX2Rlc2NyaXB0b3IubmFtZSwg
ZmllbGRfbmFtZSkpCi0KLQotZGVmIF9BZGRQcm9wZXJ0aWVzRm9yRmllbGRzKGRlc2NyaXB0b3Is
IGNscyk6Ci0gICIiIkFkZHMgcHJvcGVydGllcyBmb3IgYWxsIGZpZWxkcyBpbiB0aGlzIHByb3Rv
Y29sIG1lc3NhZ2UgdHlwZS4iIiIKLSAgZm9yIGZpZWxkIGluIGRlc2NyaXB0b3IuZmllbGRzOgot
ICAgIF9BZGRQcm9wZXJ0aWVzRm9yRmllbGQoZmllbGQsIGNscykKLQotICBpZiBkZXNjcmlwdG9y
LmlzX2V4dGVuZGFibGU6Ci0gICAgIyBfRXh0ZW5zaW9uRGljdCBpcyBqdXN0IGFuIGFkYXB0b3Ig
d2l0aCBubyBzdGF0ZSBzbyB3ZSBhbGxvY2F0ZSBhIG5ldyBvbmUKLSAgICAjIGV2ZXJ5IHRpbWUg
aXQgaXMgYWNjZXNzZWQuCi0gICAgY2xzLkV4dGVuc2lvbnMgPSBwcm9wZXJ0eShsYW1iZGEgc2Vs
ZjogX0V4dGVuc2lvbkRpY3Qoc2VsZikpCi0KLQotZGVmIF9BZGRQcm9wZXJ0aWVzRm9yRmllbGQo
ZmllbGQsIGNscyk6Ci0gICIiIkFkZHMgYSBwdWJsaWMgcHJvcGVydHkgZm9yIGEgcHJvdG9jb2wg
bWVzc2FnZSBmaWVsZC4KLSAgQ2xpZW50cyBjYW4gdXNlIHRoaXMgcHJvcGVydHkgdG8gZ2V0IGFu
ZCAoaW4gdGhlIGNhc2UKLSAgb2Ygbm9uLXJlcGVhdGVkIHNjYWxhciBmaWVsZHMpIGRpcmVjdGx5
IHNldCB0aGUgdmFsdWUKLSAgb2YgYSBwcm90b2NvbCBtZXNzYWdlIGZpZWxkLgotCi0gIEFyZ3M6
Ci0gICAgZmllbGQ6IEEgRmllbGREZXNjcmlwdG9yIGZvciB0aGlzIGZpZWxkLgotICAgIGNsczog
VGhlIGNsYXNzIHdlJ3JlIGNvbnN0cnVjdGluZy4KLSAgIiIiCi0gICMgQ2F0Y2ggaXQgaWYgd2Ug
YWRkIG90aGVyIHR5cGVzIHRoYXQgd2Ugc2hvdWxkCi0gICMgaGFuZGxlIHNwZWNpYWxseSBoZXJl
LgotICBhc3NlcnQgX0ZpZWxkRGVzY3JpcHRvci5NQVhfQ1BQVFlQRSA9PSAxMAotCi0gIGNvbnN0
YW50X25hbWUgPSBmaWVsZC5uYW1lLnVwcGVyKCkgKyAiX0ZJRUxEX05VTUJFUiIKLSAgc2V0YXR0
cihjbHMsIGNvbnN0YW50X25hbWUsIGZpZWxkLm51bWJlcikKLQotICBpZiBmaWVsZC5sYWJlbCA9
PSBfRmllbGREZXNjcmlwdG9yLkxBQkVMX1JFUEVBVEVEOgotICAgIF9BZGRQcm9wZXJ0aWVzRm9y
UmVwZWF0ZWRGaWVsZChmaWVsZCwgY2xzKQotICBlbGlmIGZpZWxkLmNwcF90eXBlID09IF9GaWVs
ZERlc2NyaXB0b3IuQ1BQVFlQRV9NRVNTQUdFOgotICAgIF9BZGRQcm9wZXJ0aWVzRm9yTm9uUmVw
ZWF0ZWRDb21wb3NpdGVGaWVsZChmaWVsZCwgY2xzKQotICBlbHNlOgotICAgIF9BZGRQcm9wZXJ0
aWVzRm9yTm9uUmVwZWF0ZWRTY2FsYXJGaWVsZChmaWVsZCwgY2xzKQotCi0KLWRlZiBfQWRkUHJv
cGVydGllc0ZvclJlcGVhdGVkRmllbGQoZmllbGQsIGNscyk6Ci0gICIiIkFkZHMgYSBwdWJsaWMg
cHJvcGVydHkgZm9yIGEgInJlcGVhdGVkIiBwcm90b2NvbCBtZXNzYWdlIGZpZWxkLiAgQ2xpZW50
cwotICBjYW4gdXNlIHRoaXMgcHJvcGVydHkgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQs
IHdoaWNoIHdpbGwgYmUgZWl0aGVyIGEKLSAgX1JlcGVhdGVkU2NhbGFyRmllbGRDb250YWluZXIg
b3IgX1JlcGVhdGVkQ29tcG9zaXRlRmllbGRDb250YWluZXIgKHNlZQotICBiZWxvdykuCi0KLSAg
Tm90ZSB0aGF0IHdoZW4gY2xpZW50cyBhZGQgdmFsdWVzIHRvIHRoZXNlIGNvbnRhaW5lcnMsIHdl
IHBlcmZvcm0KLSAgdHlwZS1jaGVja2luZyBpbiB0aGUgY2FzZSBvZiByZXBlYXRlZCBzY2FsYXIg
ZmllbGRzLCBhbmQgd2UgYWxzbyBzZXQgYW55Ci0gIG5lY2Vzc2FyeSAiaGFzIiBiaXRzIGFzIGEg
c2lkZS1lZmZlY3QuCi0KLSAgQXJnczoKLSAgICBmaWVsZDogQSBGaWVsZERlc2NyaXB0b3IgZm9y
IHRoaXMgZmllbGQuCi0gICAgY2xzOiBUaGUgY2xhc3Mgd2UncmUgY29uc3RydWN0aW5nLgotICAi
IiIKLSAgcHJvdG9fZmllbGRfbmFtZSA9IGZpZWxkLm5hbWUKLSAgcHJvcGVydHlfbmFtZSA9IF9Q
cm9wZXJ0eU5hbWUocHJvdG9fZmllbGRfbmFtZSkKLQotICBkZWYgZ2V0dGVyKHNlbGYpOgotICAg
IGZpZWxkX3ZhbHVlID0gc2VsZi5fZmllbGRzLmdldChmaWVsZCkKLSAgICBpZiBmaWVsZF92YWx1
ZSBpcyBOb25lOgotICAgICAgIyBDb25zdHJ1Y3QgYSBuZXcgb2JqZWN0IHRvIHJlcHJlc2VudCB0
aGlzIGZpZWxkLgotICAgICAgZmllbGRfdmFsdWUgPSBmaWVsZC5fZGVmYXVsdF9jb25zdHJ1Y3Rv
cihzZWxmKQotCi0gICAgICAjIEF0b21pY2FsbHkgY2hlY2sgaWYgYW5vdGhlciB0aHJlYWQgaGFz
IHByZWVtcHRlZCB1cyBhbmQsIGlmIG5vdCwgc3dhcAotICAgICAgIyBpbiB0aGUgbmV3IG9iamVj
dCB3ZSBqdXN0IGNyZWF0ZWQuICBJZiBzb21lb25lIGhhcyBwcmVlbXB0ZWQgdXMsIHdlCi0gICAg
ICAjIHRha2UgdGhhdCBvYmplY3QgYW5kIGRpc2NhcmQgb3Vycy4KLSAgICAgICMgV0FSTklORzog
IFdlIGFyZSByZWx5aW5nIG9uIHNldGRlZmF1bHQoKSBiZWluZyBhdG9taWMuICBUaGlzIGlzIHRy
dWUKLSAgICAgICMgICBpbiBDUHl0aG9uIGJ1dCB3ZSBoYXZlbid0IGludmVzdGlnYXRlZCBvdGhl
cnMuICBUaGlzIHdhcm5pbmcgYXBwZWFycwotICAgICAgIyAgIGluIHNldmVyYWwgb3RoZXIgbG9j
YXRpb25zIGluIHRoaXMgZmlsZS4KLSAgICAgIGZpZWxkX3ZhbHVlID0gc2VsZi5fZmllbGRzLnNl
dGRlZmF1bHQoZmllbGQsIGZpZWxkX3ZhbHVlKQotICAgIHJldHVybiBmaWVsZF92YWx1ZQotICBn
ZXR0ZXIuX19tb2R1bGVfXyA9IE5vbmUKLSAgZ2V0dGVyLl9fZG9jX18gPSAnR2V0dGVyIGZvciAl
cy4nICUgcHJvdG9fZmllbGRfbmFtZQotCi0gICMgV2UgZGVmaW5lIGEgc2V0dGVyIGp1c3Qgc28g
d2UgY2FuIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGEgbW9yZQotICAjIGhlbHBmdWwgZXJyb3Ig
bWVzc2FnZS4KLSAgZGVmIHNldHRlcihzZWxmLCBuZXdfdmFsdWUpOgotICAgIHJhaXNlIEF0dHJp
YnV0ZUVycm9yKCdBc3NpZ25tZW50IG5vdCBhbGxvd2VkIHRvIHJlcGVhdGVkIGZpZWxkICcKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAnIiVzIiBpbiBwcm90b2NvbCBtZXNzYWdlIG9iamVjdC4n
ICUgcHJvdG9fZmllbGRfbmFtZSkKLQotICBkb2MgPSAnTWFnaWMgYXR0cmlidXRlIGdlbmVyYXRl
ZCBmb3IgIiVzIiBwcm90byBmaWVsZC4nICUgcHJvdG9fZmllbGRfbmFtZQotICBzZXRhdHRyKGNs
cywgcHJvcGVydHlfbmFtZSwgcHJvcGVydHkoZ2V0dGVyLCBzZXR0ZXIsIGRvYz1kb2MpKQotCi0K
LWRlZiBfQWRkUHJvcGVydGllc0Zvck5vblJlcGVhdGVkU2NhbGFyRmllbGQoZmllbGQsIGNscyk6
Ci0gICIiIkFkZHMgYSBwdWJsaWMgcHJvcGVydHkgZm9yIGEgbm9ucmVwZWF0ZWQsIHNjYWxhciBw
cm90b2NvbCBtZXNzYWdlIGZpZWxkLgotICBDbGllbnRzIGNhbiB1c2UgdGhpcyBwcm9wZXJ0eSB0
byBnZXQgYW5kIGRpcmVjdGx5IHNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgotICBOb3RlIHRo
YXQgd2hlbiB0aGUgY2xpZW50IHNldHMgdGhlIHZhbHVlIG9mIGEgZmllbGQgYnkgdXNpbmcgdGhp
cyBwcm9wZXJ0eSwKLSAgYWxsIG5lY2Vzc2FyeSAiaGFzIiBiaXRzIGFyZSBzZXQgYXMgYSBzaWRl
LWVmZmVjdCwgYW5kIHdlIGFsc28gcGVyZm9ybQotICB0eXBlLWNoZWNraW5nLgotCi0gIEFyZ3M6
Ci0gICAgZmllbGQ6IEEgRmllbGREZXNjcmlwdG9yIGZvciB0aGlzIGZpZWxkLgotICAgIGNsczog
VGhlIGNsYXNzIHdlJ3JlIGNvbnN0cnVjdGluZy4KLSAgIiIiCi0gIHByb3RvX2ZpZWxkX25hbWUg
PSBmaWVsZC5uYW1lCi0gIHByb3BlcnR5X25hbWUgPSBfUHJvcGVydHlOYW1lKHByb3RvX2ZpZWxk
X25hbWUpCi0gIHR5cGVfY2hlY2tlciA9IHR5cGVfY2hlY2tlcnMuR2V0VHlwZUNoZWNrZXIoZmll
bGQpCi0gIGRlZmF1bHRfdmFsdWUgPSBmaWVsZC5kZWZhdWx0X3ZhbHVlCi0gIHZhbGlkX3ZhbHVl
cyA9IHNldCgpCi0gIGlzX3Byb3RvMyA9IGZpZWxkLmNvbnRhaW5pbmdfdHlwZS5zeW50YXggPT0g
InByb3RvMyIKLQotICBkZWYgZ2V0dGVyKHNlbGYpOgotICAgICMgVE9ETyhwcm90b2J1Zi10ZWFt
KTogVGhpcyBtYXkgYmUgYnJva2VuIHNpbmNlIHRoZXJlIG1heSBub3QgYmUKLSAgICAjIGRlZmF1
bHRfdmFsdWUuICBDb21iaW5lIHdpdGggaGFzX2RlZmF1bHRfdmFsdWUgc29tZWhvdy4KLSAgICBy
ZXR1cm4gc2VsZi5fZmllbGRzLmdldChmaWVsZCwgZGVmYXVsdF92YWx1ZSkKLSAgZ2V0dGVyLl9f
bW9kdWxlX18gPSBOb25lCi0gIGdldHRlci5fX2RvY19fID0gJ0dldHRlciBmb3IgJXMuJyAlIHBy
b3RvX2ZpZWxkX25hbWUKLQotICBjbGVhcl93aGVuX3NldF90b19kZWZhdWx0ID0gaXNfcHJvdG8z
IGFuZCBub3QgZmllbGQuY29udGFpbmluZ19vbmVvZgotCi0gIGRlZiBmaWVsZF9zZXR0ZXIoc2Vs
ZiwgbmV3X3ZhbHVlKToKLSAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0g
ICAgIyBUZXN0aW5nIHRoZSB2YWx1ZSBmb3IgdHJ1dGhpbmVzcyBjYXB0dXJlcyBhbGwgb2YgdGhl
IHByb3RvMyBkZWZhdWx0cwotICAgICMgKDAsIDAuMCwgZW51bSAwLCBhbmQgRmFsc2UpLgotICAg
IG5ld192YWx1ZSA9IHR5cGVfY2hlY2tlci5DaGVja1ZhbHVlKG5ld192YWx1ZSkKLSAgICBpZiBj
bGVhcl93aGVuX3NldF90b19kZWZhdWx0IGFuZCBub3QgbmV3X3ZhbHVlOgotICAgICAgc2VsZi5f
ZmllbGRzLnBvcChmaWVsZCwgTm9uZSkKLSAgICBlbHNlOgotICAgICAgc2VsZi5fZmllbGRzW2Zp
ZWxkXSA9IG5ld192YWx1ZQotICAgICMgQ2hlY2sgX2NhY2hlZF9ieXRlX3NpemVfZGlydHkgaW5s
aW5lIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIHNpbmNlIHNjYWxhcgotICAgICMgc2V0dGVycyBh
cmUgY2FsbGVkIGZyZXF1ZW50bHkuCi0gICAgaWYgbm90IHNlbGYuX2NhY2hlZF9ieXRlX3NpemVf
ZGlydHk6Ci0gICAgICBzZWxmLl9Nb2RpZmllZCgpCi0KLSAgaWYgZmllbGQuY29udGFpbmluZ19v
bmVvZjoKLSAgICBkZWYgc2V0dGVyKHNlbGYsIG5ld192YWx1ZSk6Ci0gICAgICBmaWVsZF9zZXR0
ZXIoc2VsZiwgbmV3X3ZhbHVlKQotICAgICAgc2VsZi5fVXBkYXRlT25lb2ZTdGF0ZShmaWVsZCkK
LSAgZWxzZToKLSAgICBzZXR0ZXIgPSBmaWVsZF9zZXR0ZXIKLQotICBzZXR0ZXIuX19tb2R1bGVf
XyA9IE5vbmUKLSAgc2V0dGVyLl9fZG9jX18gPSAnU2V0dGVyIGZvciAlcy4nICUgcHJvdG9fZmll
bGRfbmFtZQotCi0gICMgQWRkIGEgcHJvcGVydHkgdG8gZW5jYXBzdWxhdGUgdGhlIGdldHRlci9z
ZXR0ZXIuCi0gIGRvYyA9ICdNYWdpYyBhdHRyaWJ1dGUgZ2VuZXJhdGVkIGZvciAiJXMiIHByb3Rv
IGZpZWxkLicgJSBwcm90b19maWVsZF9uYW1lCi0gIHNldGF0dHIoY2xzLCBwcm9wZXJ0eV9uYW1l
LCBwcm9wZXJ0eShnZXR0ZXIsIHNldHRlciwgZG9jPWRvYykpCi0KLQotZGVmIF9BZGRQcm9wZXJ0
aWVzRm9yTm9uUmVwZWF0ZWRDb21wb3NpdGVGaWVsZChmaWVsZCwgY2xzKToKLSAgIiIiQWRkcyBh
IHB1YmxpYyBwcm9wZXJ0eSBmb3IgYSBub25yZXBlYXRlZCwgY29tcG9zaXRlIHByb3RvY29sIG1l
c3NhZ2UgZmllbGQuCi0gIEEgY29tcG9zaXRlIGZpZWxkIGlzIGEgImdyb3VwIiBvciAibWVzc2Fn
ZSIgZmllbGQuCi0KLSAgQ2xpZW50cyBjYW4gdXNlIHRoaXMgcHJvcGVydHkgdG8gZ2V0IHRoZSB2
YWx1ZSBvZiB0aGUgZmllbGQsIGJ1dCBjYW5ub3QKLSAgYXNzaWduIHRvIHRoZSBwcm9wZXJ0eSBk
aXJlY3RseS4KLQotICBBcmdzOgotICAgIGZpZWxkOiBBIEZpZWxkRGVzY3JpcHRvciBmb3IgdGhp
cyBmaWVsZC4KLSAgICBjbHM6IFRoZSBjbGFzcyB3ZSdyZSBjb25zdHJ1Y3RpbmcuCi0gICIiIgot
ICAjIFRPRE8ocm9iaW5zb24pOiBSZW1vdmUgZHVwbGljYXRpb24gd2l0aCBzaW1pbGFyIG1ldGhv
ZAotICAjIGZvciBub24tcmVwZWF0ZWQgc2NhbGFycy4KLSAgcHJvdG9fZmllbGRfbmFtZSA9IGZp
ZWxkLm5hbWUKLSAgcHJvcGVydHlfbmFtZSA9IF9Qcm9wZXJ0eU5hbWUocHJvdG9fZmllbGRfbmFt
ZSkKLQotICBkZWYgZ2V0dGVyKHNlbGYpOgotICAgIGZpZWxkX3ZhbHVlID0gc2VsZi5fZmllbGRz
LmdldChmaWVsZCkKLSAgICBpZiBmaWVsZF92YWx1ZSBpcyBOb25lOgotICAgICAgIyBDb25zdHJ1
Y3QgYSBuZXcgb2JqZWN0IHRvIHJlcHJlc2VudCB0aGlzIGZpZWxkLgotICAgICAgZmllbGRfdmFs
dWUgPSBmaWVsZC5fZGVmYXVsdF9jb25zdHJ1Y3RvcihzZWxmKQotCi0gICAgICAjIEF0b21pY2Fs
bHkgY2hlY2sgaWYgYW5vdGhlciB0aHJlYWQgaGFzIHByZWVtcHRlZCB1cyBhbmQsIGlmIG5vdCwg
c3dhcAotICAgICAgIyBpbiB0aGUgbmV3IG9iamVjdCB3ZSBqdXN0IGNyZWF0ZWQuICBJZiBzb21l
b25lIGhhcyBwcmVlbXB0ZWQgdXMsIHdlCi0gICAgICAjIHRha2UgdGhhdCBvYmplY3QgYW5kIGRp
c2NhcmQgb3Vycy4KLSAgICAgICMgV0FSTklORzogIFdlIGFyZSByZWx5aW5nIG9uIHNldGRlZmF1
bHQoKSBiZWluZyBhdG9taWMuICBUaGlzIGlzIHRydWUKLSAgICAgICMgICBpbiBDUHl0aG9uIGJ1
dCB3ZSBoYXZlbid0IGludmVzdGlnYXRlZCBvdGhlcnMuICBUaGlzIHdhcm5pbmcgYXBwZWFycwot
ICAgICAgIyAgIGluIHNldmVyYWwgb3RoZXIgbG9jYXRpb25zIGluIHRoaXMgZmlsZS4KLSAgICAg
IGZpZWxkX3ZhbHVlID0gc2VsZi5fZmllbGRzLnNldGRlZmF1bHQoZmllbGQsIGZpZWxkX3ZhbHVl
KQotICAgIHJldHVybiBmaWVsZF92YWx1ZQotICBnZXR0ZXIuX19tb2R1bGVfXyA9IE5vbmUKLSAg
Z2V0dGVyLl9fZG9jX18gPSAnR2V0dGVyIGZvciAlcy4nICUgcHJvdG9fZmllbGRfbmFtZQotCi0g
ICMgV2UgZGVmaW5lIGEgc2V0dGVyIGp1c3Qgc28gd2UgY2FuIHRocm93IGFuIGV4Y2VwdGlvbiB3
aXRoIGEgbW9yZQotICAjIGhlbHBmdWwgZXJyb3IgbWVzc2FnZS4KLSAgZGVmIHNldHRlcihzZWxm
LCBuZXdfdmFsdWUpOgotICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdBc3NpZ25tZW50IG5vdCBh
bGxvd2VkIHRvIGNvbXBvc2l0ZSBmaWVsZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyIl
cyIgaW4gcHJvdG9jb2wgbWVzc2FnZSBvYmplY3QuJyAlIHByb3RvX2ZpZWxkX25hbWUpCi0KLSAg
IyBBZGQgYSBwcm9wZXJ0eSB0byBlbmNhcHN1bGF0ZSB0aGUgZ2V0dGVyLgotICBkb2MgPSAnTWFn
aWMgYXR0cmlidXRlIGdlbmVyYXRlZCBmb3IgIiVzIiBwcm90byBmaWVsZC4nICUgcHJvdG9fZmll
bGRfbmFtZQotICBzZXRhdHRyKGNscywgcHJvcGVydHlfbmFtZSwgcHJvcGVydHkoZ2V0dGVyLCBz
ZXR0ZXIsIGRvYz1kb2MpKQotCi0KLWRlZiBfQWRkUHJvcGVydGllc0ZvckV4dGVuc2lvbnMoZGVz
Y3JpcHRvciwgY2xzKToKLSAgIiIiQWRkcyBwcm9wZXJ0aWVzIGZvciBhbGwgZmllbGRzIGluIHRo
aXMgcHJvdG9jb2wgbWVzc2FnZSB0eXBlLiIiIgotICBleHRlbnNpb25fZGljdCA9IGRlc2NyaXB0
b3IuZXh0ZW5zaW9uc19ieV9uYW1lCi0gIGZvciBleHRlbnNpb25fbmFtZSwgZXh0ZW5zaW9uX2Zp
ZWxkIGluIGV4dGVuc2lvbl9kaWN0Lml0ZW1zKCk6Ci0gICAgY29uc3RhbnRfbmFtZSA9IGV4dGVu
c2lvbl9uYW1lLnVwcGVyKCkgKyAiX0ZJRUxEX05VTUJFUiIKLSAgICBzZXRhdHRyKGNscywgY29u
c3RhbnRfbmFtZSwgZXh0ZW5zaW9uX2ZpZWxkLm51bWJlcikKLQotCi1kZWYgX0FkZFN0YXRpY01l
dGhvZHMoY2xzKToKLSAgIyBUT0RPKHJvYmluc29uKTogVGhpcyBwcm9iYWJseSBuZWVkcyB0byBi
ZSB0aHJlYWQtc2FmZSg/KQotICBkZWYgUmVnaXN0ZXJFeHRlbnNpb24oZXh0ZW5zaW9uX2hhbmRs
ZSk6Ci0gICAgZXh0ZW5zaW9uX2hhbmRsZS5jb250YWluaW5nX3R5cGUgPSBjbHMuREVTQ1JJUFRP
UgotICAgIF9BdHRhY2hGaWVsZEhlbHBlcnMoY2xzLCBleHRlbnNpb25faGFuZGxlKQotCi0gICAg
IyBUcnkgdG8gaW5zZXJ0IG91ciBleHRlbnNpb24sIGZhaWxpbmcgaWYgYW4gZXh0ZW5zaW9uIHdp
dGggdGhlIHNhbWUgbnVtYmVyCi0gICAgIyBhbHJlYWR5IGV4aXN0cy4KLSAgICBhY3R1YWxfaGFu
ZGxlID0gY2xzLl9leHRlbnNpb25zX2J5X251bWJlci5zZXRkZWZhdWx0KAotICAgICAgICBleHRl
bnNpb25faGFuZGxlLm51bWJlciwgZXh0ZW5zaW9uX2hhbmRsZSkKLSAgICBpZiBhY3R1YWxfaGFu
ZGxlIGlzIG5vdCBleHRlbnNpb25faGFuZGxlOgotICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3Io
Ci0gICAgICAgICAgJ0V4dGVuc2lvbnMgIiVzIiBhbmQgIiVzIiBib3RoIHRyeSB0byBleHRlbmQg
bWVzc2FnZSB0eXBlICIlcyIgd2l0aCAnCi0gICAgICAgICAgJ2ZpZWxkIG51bWJlciAlZC4nICUK
LSAgICAgICAgICAoZXh0ZW5zaW9uX2hhbmRsZS5mdWxsX25hbWUsIGFjdHVhbF9oYW5kbGUuZnVs
bF9uYW1lLAotICAgICAgICAgICBjbHMuREVTQ1JJUFRPUi5mdWxsX25hbWUsIGV4dGVuc2lvbl9o
YW5kbGUubnVtYmVyKSkKLQotICAgIGNscy5fZXh0ZW5zaW9uc19ieV9uYW1lW2V4dGVuc2lvbl9o
YW5kbGUuZnVsbF9uYW1lXSA9IGV4dGVuc2lvbl9oYW5kbGUKLQotICAgIGhhbmRsZSA9IGV4dGVu
c2lvbl9oYW5kbGUgICMgYXZvaWQgbGluZSB3cmFwcGluZwotICAgIGlmIF9Jc01lc3NhZ2VTZXRF
eHRlbnNpb24oaGFuZGxlKToKLSAgICAgICMgTWVzc2FnZVNldCBleHRlbnNpb24uICBBbHNvIHJl
Z2lzdGVyIHVuZGVyIHR5cGUgbmFtZS4KLSAgICAgIGNscy5fZXh0ZW5zaW9uc19ieV9uYW1lWwot
ICAgICAgICAgIGV4dGVuc2lvbl9oYW5kbGUubWVzc2FnZV90eXBlLmZ1bGxfbmFtZV0gPSBleHRl
bnNpb25faGFuZGxlCi0KLSAgY2xzLlJlZ2lzdGVyRXh0ZW5zaW9uID0gc3RhdGljbWV0aG9kKFJl
Z2lzdGVyRXh0ZW5zaW9uKQotCi0gIGRlZiBGcm9tU3RyaW5nKHMpOgotICAgIG1lc3NhZ2UgPSBj
bHMoKQotICAgIG1lc3NhZ2UuTWVyZ2VGcm9tU3RyaW5nKHMpCi0gICAgcmV0dXJuIG1lc3NhZ2UK
LSAgY2xzLkZyb21TdHJpbmcgPSBzdGF0aWNtZXRob2QoRnJvbVN0cmluZykKLQotCi1kZWYgX0lz
UHJlc2VudChpdGVtKToKLSAgIiIiR2l2ZW4gYSAoRmllbGREZXNjcmlwdG9yLCB2YWx1ZSkgdHVw
bGUgZnJvbSBfZmllbGRzLCByZXR1cm4gdHJ1ZSBpZiB0aGUKLSAgdmFsdWUgc2hvdWxkIGJlIGlu
Y2x1ZGVkIGluIHRoZSBsaXN0IHJldHVybmVkIGJ5IExpc3RGaWVsZHMoKS4iIiIKLQotICBpZiBp
dGVtWzBdLmxhYmVsID09IF9GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQ6Ci0gICAgcmV0
dXJuIGJvb2woaXRlbVsxXSkKLSAgZWxpZiBpdGVtWzBdLmNwcF90eXBlID09IF9GaWVsZERlc2Ny
aXB0b3IuQ1BQVFlQRV9NRVNTQUdFOgotICAgIHJldHVybiBpdGVtWzFdLl9pc19wcmVzZW50X2lu
X3BhcmVudAotICBlbHNlOgotICAgIHJldHVybiBUcnVlCi0KLQotZGVmIF9BZGRMaXN0RmllbGRz
TWV0aG9kKG1lc3NhZ2VfZGVzY3JpcHRvciwgY2xzKToKLSAgIiIiSGVscGVyIGZvciBfQWRkTWVz
c2FnZU1ldGhvZHMoKS4iIiIKLQotICBkZWYgTGlzdEZpZWxkcyhzZWxmKToKLSAgICBhbGxfZmll
bGRzID0gW2l0ZW0gZm9yIGl0ZW0gaW4gc2VsZi5fZmllbGRzLml0ZW1zKCkgaWYgX0lzUHJlc2Vu
dChpdGVtKV0KLSAgICBhbGxfZmllbGRzLnNvcnQoa2V5ID0gbGFtYmRhIGl0ZW06IGl0ZW1bMF0u
bnVtYmVyKQotICAgIHJldHVybiBhbGxfZmllbGRzCi0KLSAgY2xzLkxpc3RGaWVsZHMgPSBMaXN0
RmllbGRzCi0KLV9Qcm90bzNIYXNFcnJvciA9ICdQcm90b2NvbCBtZXNzYWdlIGhhcyBubyBub24t
cmVwZWF0ZWQgc3VibWVzc2FnZSBmaWVsZCAiJXMiJwotX1Byb3RvMkhhc0Vycm9yID0gJ1Byb3Rv
Y29sIG1lc3NhZ2UgaGFzIG5vIG5vbi1yZXBlYXRlZCBmaWVsZCAiJXMiJwotCi1kZWYgX0FkZEhh
c0ZpZWxkTWV0aG9kKG1lc3NhZ2VfZGVzY3JpcHRvciwgY2xzKToKLSAgIiIiSGVscGVyIGZvciBf
QWRkTWVzc2FnZU1ldGhvZHMoKS4iIiIKLQotICBpc19wcm90bzMgPSAobWVzc2FnZV9kZXNjcmlw
dG9yLnN5bnRheCA9PSAicHJvdG8zIikKLSAgZXJyb3JfbXNnID0gX1Byb3RvM0hhc0Vycm9yIGlm
IGlzX3Byb3RvMyBlbHNlIF9Qcm90bzJIYXNFcnJvcgotCi0gIGhhc3NhYmxlX2ZpZWxkcyA9IHt9
Ci0gIGZvciBmaWVsZCBpbiBtZXNzYWdlX2Rlc2NyaXB0b3IuZmllbGRzOgotICAgIGlmIGZpZWxk
LmxhYmVsID09IF9GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQ6Ci0gICAgICBjb250aW51
ZQotICAgICMgRm9yIHByb3RvMywgb25seSBzdWJtZXNzYWdlcyBhbmQgZmllbGRzIGluc2lkZSBh
IG9uZW9mIGhhdmUgcHJlc2VuY2UuCi0gICAgaWYgKGlzX3Byb3RvMyBhbmQgZmllbGQuY3BwX3R5
cGUgIT0gX0ZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0UgYW5kCi0gICAgICAgIG5vdCBm
aWVsZC5jb250YWluaW5nX29uZW9mKToKLSAgICAgIGNvbnRpbnVlCi0gICAgaGFzc2FibGVfZmll
bGRzW2ZpZWxkLm5hbWVdID0gZmllbGQKLQotICBpZiBub3QgaXNfcHJvdG8zOgotICAgICMgRmll
bGRzIGluc2lkZSBvbmVvZnMgYXJlIG5ldmVyIHJlcGVhdGVkIChlbmZvcmNlZCBieSB0aGUgY29t
cGlsZXIpLgotICAgIGZvciBvbmVvZiBpbiBtZXNzYWdlX2Rlc2NyaXB0b3Iub25lb2ZzOgotICAg
ICAgaGFzc2FibGVfZmllbGRzW29uZW9mLm5hbWVdID0gb25lb2YKLQotICBkZWYgSGFzRmllbGQo
c2VsZiwgZmllbGRfbmFtZSk6Ci0gICAgdHJ5OgotICAgICAgZmllbGQgPSBoYXNzYWJsZV9maWVs
ZHNbZmllbGRfbmFtZV0KLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICByYWlzZSBWYWx1ZUVy
cm9yKGVycm9yX21zZyAlIGZpZWxkX25hbWUpCi0KLSAgICBpZiBpc2luc3RhbmNlKGZpZWxkLCBk
ZXNjcmlwdG9yX21vZC5PbmVvZkRlc2NyaXB0b3IpOgotICAgICAgdHJ5OgotICAgICAgICByZXR1
cm4gSGFzRmllbGQoc2VsZiwgc2VsZi5fb25lb2ZzW2ZpZWxkXS5uYW1lKQotICAgICAgZXhjZXB0
IEtleUVycm9yOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICBlbHNlOgotICAgICAgaWYgZmll
bGQuY3BwX3R5cGUgPT0gX0ZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0U6Ci0gICAgICAg
IHZhbHVlID0gc2VsZi5fZmllbGRzLmdldChmaWVsZCkKLSAgICAgICAgcmV0dXJuIHZhbHVlIGlz
IG5vdCBOb25lIGFuZCB2YWx1ZS5faXNfcHJlc2VudF9pbl9wYXJlbnQKLSAgICAgIGVsc2U6Ci0g
ICAgICAgIHJldHVybiBmaWVsZCBpbiBzZWxmLl9maWVsZHMKLQotICBjbHMuSGFzRmllbGQgPSBI
YXNGaWVsZAotCi0KLWRlZiBfQWRkQ2xlYXJGaWVsZE1ldGhvZChtZXNzYWdlX2Rlc2NyaXB0b3Is
IGNscyk6Ci0gICIiIkhlbHBlciBmb3IgX0FkZE1lc3NhZ2VNZXRob2RzKCkuIiIiCi0gIGRlZiBD
bGVhckZpZWxkKHNlbGYsIGZpZWxkX25hbWUpOgotICAgIHRyeToKLSAgICAgIGZpZWxkID0gbWVz
c2FnZV9kZXNjcmlwdG9yLmZpZWxkc19ieV9uYW1lW2ZpZWxkX25hbWVdCi0gICAgZXhjZXB0IEtl
eUVycm9yOgotICAgICAgdHJ5OgotICAgICAgICBmaWVsZCA9IG1lc3NhZ2VfZGVzY3JpcHRvci5v
bmVvZnNfYnlfbmFtZVtmaWVsZF9uYW1lXQotICAgICAgICBpZiBmaWVsZCBpbiBzZWxmLl9vbmVv
ZnM6Ci0gICAgICAgICAgZmllbGQgPSBzZWxmLl9vbmVvZnNbZmllbGRdCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgcmV0dXJuCi0gICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoJ1Byb3RvY29sIG1lc3NhZ2UgJXMoKSBoYXMgbm8gIiVzIiBmaWVsZC4nICUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZV9kZXNjcmlwdG9yLm5hbWUsIGZpZWxk
X25hbWUpKQotCi0gICAgaWYgZmllbGQgaW4gc2VsZi5fZmllbGRzOgotICAgICAgIyBUbyBtYXRj
aCB0aGUgQysrIGltcGxlbWVudGF0aW9uLCB3ZSBuZWVkIHRvIGludmFsaWRhdGUgaXRlcmF0b3Jz
Ci0gICAgICAjIGZvciBtYXAgZmllbGRzIHdoZW4gQ2xlYXJGaWVsZCgpIGhhcHBlbnMuCi0gICAg
ICBpZiBoYXNhdHRyKHNlbGYuX2ZpZWxkc1tmaWVsZF0sICdJbnZhbGlkYXRlSXRlcmF0b3JzJyk6
Ci0gICAgICAgIHNlbGYuX2ZpZWxkc1tmaWVsZF0uSW52YWxpZGF0ZUl0ZXJhdG9ycygpCi0KLSAg
ICAgICMgTm90ZTogIElmIHRoZSBmaWVsZCBpcyBhIHN1Yi1tZXNzYWdlLCBpdHMgbGlzdGVuZXIg
d2lsbCBzdGlsbCBwb2ludAotICAgICAgIyAgIGF0IHVzLiAgVGhhdCdzIGZpbmUsIGJlY2F1c2Ug
dGhlIHdvcnN0IHRoYW4gY2FuIGhhcHBlbiBpcyB0aGF0IGl0Ci0gICAgICAjICAgd2lsbCBjYWxs
IF9Nb2RpZmllZCgpIGFuZCBpbnZhbGlkYXRlIG91ciBieXRlIHNpemUuICBCaWcgZGVhbC4KLSAg
ICAgIGRlbCBzZWxmLl9maWVsZHNbZmllbGRdCi0KLSAgICAgIGlmIHNlbGYuX29uZW9mcy5nZXQo
ZmllbGQuY29udGFpbmluZ19vbmVvZiwgTm9uZSkgaXMgZmllbGQ6Ci0gICAgICAgIGRlbCBzZWxm
Ll9vbmVvZnNbZmllbGQuY29udGFpbmluZ19vbmVvZl0KLQotICAgICMgQWx3YXlzIGNhbGwgX01v
ZGlmaWVkKCkgLS0gZXZlbiBpZiBub3RoaW5nIHdhcyBjaGFuZ2VkLCB0aGlzIGlzCi0gICAgIyBh
IG11dGF0aW5nIG1ldGhvZCwgYW5kIHRodXMgY2FsbGluZyBpdCBzaG91bGQgY2F1c2UgdGhlIGZp
ZWxkIHRvIGJlY29tZQotICAgICMgcHJlc2VudCBpbiB0aGUgcGFyZW50IG1lc3NhZ2UuCi0gICAg
c2VsZi5fTW9kaWZpZWQoKQotCi0gIGNscy5DbGVhckZpZWxkID0gQ2xlYXJGaWVsZAotCi0KLWRl
ZiBfQWRkQ2xlYXJFeHRlbnNpb25NZXRob2QoY2xzKToKLSAgIiIiSGVscGVyIGZvciBfQWRkTWVz
c2FnZU1ldGhvZHMoKS4iIiIKLSAgZGVmIENsZWFyRXh0ZW5zaW9uKHNlbGYsIGV4dGVuc2lvbl9o
YW5kbGUpOgotICAgIF9WZXJpZnlFeHRlbnNpb25IYW5kbGUoc2VsZiwgZXh0ZW5zaW9uX2hhbmRs
ZSkKLQotICAgICMgU2ltaWxhciB0byBDbGVhckZpZWxkKCksIGFib3ZlLgotICAgIGlmIGV4dGVu
c2lvbl9oYW5kbGUgaW4gc2VsZi5fZmllbGRzOgotICAgICAgZGVsIHNlbGYuX2ZpZWxkc1tleHRl
bnNpb25faGFuZGxlXQotICAgIHNlbGYuX01vZGlmaWVkKCkKLSAgY2xzLkNsZWFyRXh0ZW5zaW9u
ID0gQ2xlYXJFeHRlbnNpb24KLQotCi1kZWYgX0FkZEhhc0V4dGVuc2lvbk1ldGhvZChjbHMpOgot
ICAiIiJIZWxwZXIgZm9yIF9BZGRNZXNzYWdlTWV0aG9kcygpLiIiIgotICBkZWYgSGFzRXh0ZW5z
aW9uKHNlbGYsIGV4dGVuc2lvbl9oYW5kbGUpOgotICAgIF9WZXJpZnlFeHRlbnNpb25IYW5kbGUo
c2VsZiwgZXh0ZW5zaW9uX2hhbmRsZSkKLSAgICBpZiBleHRlbnNpb25faGFuZGxlLmxhYmVsID09
IF9GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQ6Ci0gICAgICByYWlzZSBLZXlFcnJvcign
IiVzIiBpcyByZXBlYXRlZC4nICUgZXh0ZW5zaW9uX2hhbmRsZS5mdWxsX25hbWUpCi0KLSAgICBp
ZiBleHRlbnNpb25faGFuZGxlLmNwcF90eXBlID09IF9GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9N
RVNTQUdFOgotICAgICAgdmFsdWUgPSBzZWxmLl9maWVsZHMuZ2V0KGV4dGVuc2lvbl9oYW5kbGUp
Ci0gICAgICByZXR1cm4gdmFsdWUgaXMgbm90IE5vbmUgYW5kIHZhbHVlLl9pc19wcmVzZW50X2lu
X3BhcmVudAotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gZXh0ZW5zaW9uX2hhbmRsZSBpbiBzZWxm
Ll9maWVsZHMKLSAgY2xzLkhhc0V4dGVuc2lvbiA9IEhhc0V4dGVuc2lvbgotCi1kZWYgX0ludGVy
bmFsVW5wYWNrQW55KG1zZyk6Ci0gICIiIlVucGFja3MgQW55IG1lc3NhZ2UgYW5kIHJldHVybnMg
dGhlIHVucGFja2VkIG1lc3NhZ2UuCi0KLSAgVGhpcyBpbnRlcm5hbCBtZXRob2QgaXMgZGlmZmVy
bnQgZnJvbSBwdWJsaWMgQW55IFVucGFjayBtZXRob2Qgd2hpY2ggdGFrZXMKLSAgdGhlIHRhcmdl
dCBtZXNzYWdlIGFzIGFyZ3VtZW50LiBfSW50ZXJuYWxVbnBhY2tBbnkgbWV0aG9kIGRvZXMgbm90
IGhhdmUKLSAgdGFyZ2V0IG1lc3NhZ2UgdHlwZSBhbmQgbmVlZCB0byBmaW5kIHRoZSBtZXNzYWdl
IHR5cGUgaW4gZGVzY3JpcHRvciBwb29sLgotCi0gIEFyZ3M6Ci0gICAgbXNnOiBBbiBBbnkgbWVz
c2FnZSB0byBiZSB1bnBhY2tlZC4KLQotICBSZXR1cm5zOgotICAgIFRoZSB1bnBhY2tlZCBtZXNz
YWdlLgotICAiIiIKLSAgdHlwZV91cmwgPSBtc2cudHlwZV91cmwKLSAgZGIgPSBzeW1ib2xfZGF0
YWJhc2UuRGVmYXVsdCgpCi0KLSAgaWYgbm90IHR5cGVfdXJsOgotICAgIHJldHVybiBOb25lCi0K
LSAgIyBUT0RPKGhhYmVybWFuKTogRm9yIG5vdyB3ZSBqdXN0IHN0cmlwIHRoZSBob3N0bmFtZS4g
IEJldHRlciBsb2dpYyB3aWxsIGJlCi0gICMgcmVxdWlyZWQuCi0gIHR5cGVfbmFtZSA9IHR5cGVf
dXJsLnNwbGl0KCIvIilbLTFdCi0gIGRlc2NyaXB0b3IgPSBkYi5wb29sLkZpbmRNZXNzYWdlVHlw
ZUJ5TmFtZSh0eXBlX25hbWUpCi0KLSAgaWYgZGVzY3JpcHRvciBpcyBOb25lOgotICAgIHJldHVy
biBOb25lCi0KLSAgbWVzc2FnZV9jbGFzcyA9IGRiLkdldFByb3RvdHlwZShkZXNjcmlwdG9yKQot
ICBtZXNzYWdlID0gbWVzc2FnZV9jbGFzcygpCi0KLSAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmco
bXNnLnZhbHVlKQotICByZXR1cm4gbWVzc2FnZQotCi1kZWYgX0FkZEVxdWFsc01ldGhvZChtZXNz
YWdlX2Rlc2NyaXB0b3IsIGNscyk6Ci0gICIiIkhlbHBlciBmb3IgX0FkZE1lc3NhZ2VNZXRob2Rz
KCkuIiIiCi0gIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgIGlmIChub3QgaXNpbnN0YW5j
ZShvdGhlciwgbWVzc2FnZV9tb2QuTWVzc2FnZSkgb3IKLSAgICAgICAgb3RoZXIuREVTQ1JJUFRP
UiAhPSBzZWxmLkRFU0NSSVBUT1IpOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBpZiBzZWxm
IGlzIG90aGVyOgotICAgICAgcmV0dXJuIFRydWUKLQotICAgIGlmIHNlbGYuREVTQ1JJUFRPUi5m
dWxsX25hbWUgPT0gX0FueUZ1bGxUeXBlTmFtZToKLSAgICAgIGFueV9hID0gX0ludGVybmFsVW5w
YWNrQW55KHNlbGYpCi0gICAgICBhbnlfYiA9IF9JbnRlcm5hbFVucGFja0FueShvdGhlcikKLSAg
ICAgIGlmIGFueV9hIGFuZCBhbnlfYjoKLSAgICAgICAgcmV0dXJuIGFueV9hID09IGFueV9iCi0K
LSAgICBpZiBub3Qgc2VsZi5MaXN0RmllbGRzKCkgPT0gb3RoZXIuTGlzdEZpZWxkcygpOgotICAg
ICAgcmV0dXJuIEZhbHNlCi0KLSAgICAjIFNvcnQgdW5rbm93biBmaWVsZHMgYmVjYXVzZSB0aGVp
ciBvcmRlciBzaG91bGRuJ3QgYWZmZWN0IGVxdWFsaXR5IHRlc3QuCi0gICAgdW5rbm93bl9maWVs
ZHMgPSBsaXN0KHNlbGYuX3Vua25vd25fZmllbGRzKQotICAgIHVua25vd25fZmllbGRzLnNvcnQo
KQotICAgIG90aGVyX3Vua25vd25fZmllbGRzID0gbGlzdChvdGhlci5fdW5rbm93bl9maWVsZHMp
Ci0gICAgb3RoZXJfdW5rbm93bl9maWVsZHMuc29ydCgpCi0KLSAgICByZXR1cm4gdW5rbm93bl9m
aWVsZHMgPT0gb3RoZXJfdW5rbm93bl9maWVsZHMKLQotICBjbHMuX19lcV9fID0gX19lcV9fCi0K
LQotZGVmIF9BZGRTdHJNZXRob2QobWVzc2FnZV9kZXNjcmlwdG9yLCBjbHMpOgotICAiIiJIZWxw
ZXIgZm9yIF9BZGRNZXNzYWdlTWV0aG9kcygpLiIiIgotICBkZWYgX19zdHJfXyhzZWxmKToKLSAg
ICByZXR1cm4gdGV4dF9mb3JtYXQuTWVzc2FnZVRvU3RyaW5nKHNlbGYpCi0gIGNscy5fX3N0cl9f
ID0gX19zdHJfXwotCi0KLWRlZiBfQWRkUmVwck1ldGhvZChtZXNzYWdlX2Rlc2NyaXB0b3IsIGNs
cyk6Ci0gICIiIkhlbHBlciBmb3IgX0FkZE1lc3NhZ2VNZXRob2RzKCkuIiIiCi0gIGRlZiBfX3Jl
cHJfXyhzZWxmKToKLSAgICByZXR1cm4gdGV4dF9mb3JtYXQuTWVzc2FnZVRvU3RyaW5nKHNlbGYp
Ci0gIGNscy5fX3JlcHJfXyA9IF9fcmVwcl9fCi0KLQotZGVmIF9BZGRVbmljb2RlTWV0aG9kKHVu
dXNlZF9tZXNzYWdlX2Rlc2NyaXB0b3IsIGNscyk6Ci0gICIiIkhlbHBlciBmb3IgX0FkZE1lc3Nh
Z2VNZXRob2RzKCkuIiIiCi0KLSAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgotICAgIHJldHVybiB0
ZXh0X2Zvcm1hdC5NZXNzYWdlVG9TdHJpbmcoc2VsZiwgYXNfdXRmOD1UcnVlKS5kZWNvZGUoJ3V0
Zi04JykKLSAgY2xzLl9fdW5pY29kZV9fID0gX191bmljb2RlX18KLQotCi1kZWYgX0J5dGVzRm9y
Tm9uUmVwZWF0ZWRFbGVtZW50KHZhbHVlLCBmaWVsZF9udW1iZXIsIGZpZWxkX3R5cGUpOgotICAi
IiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvIHNlcmlhbGl6ZSBhIG5vbi1y
ZXBlYXRlZCBlbGVtZW50LgotICBUaGUgcmV0dXJuZWQgYnl0ZSBjb3VudCBpbmNsdWRlcyBzcGFj
ZSBmb3IgdGFnIGluZm9ybWF0aW9uIGFuZCBhbnkKLSAgb3RoZXIgYWRkaXRpb25hbCBzcGFjZSBh
c3NvY2lhdGVkIHdpdGggc2VyaWFsaXppbmcgdmFsdWUuCi0KLSAgQXJnczoKLSAgICB2YWx1ZTog
VmFsdWUgd2UncmUgc2VyaWFsaXppbmcuCi0gICAgZmllbGRfbnVtYmVyOiBGaWVsZCBudW1iZXIg
b2YgdGhpcyB2YWx1ZS4gIChTaW5jZSB0aGUgZmllbGQgbnVtYmVyCi0gICAgICBpcyBzdG9yZWQg
YXMgcGFydCBvZiBhIHZhcmludC1lbmNvZGVkIHRhZywgdGhpcyBoYXMgYW4gaW1wYWN0Ci0gICAg
ICBvbiB0aGUgdG90YWwgYnl0ZXMgcmVxdWlyZWQgdG8gc2VyaWFsaXplIHRoZSB2YWx1ZSkuCi0g
ICAgZmllbGRfdHlwZTogVGhlIHR5cGUgb2YgdGhlIGZpZWxkLiAgT25lIG9mIHRoZSBUWVBFXyog
Y29uc3RhbnRzCi0gICAgICB3aXRoaW4gRmllbGREZXNjcmlwdG9yLgotICAiIiIKLSAgdHJ5Ogot
ICAgIGZuID0gdHlwZV9jaGVja2Vycy5UWVBFX1RPX0JZVEVfU0laRV9GTltmaWVsZF90eXBlXQot
ICAgIHJldHVybiBmbihmaWVsZF9udW1iZXIsIHZhbHVlKQotICBleGNlcHQgS2V5RXJyb3I6Ci0g
ICAgcmFpc2UgbWVzc2FnZV9tb2QuRW5jb2RlRXJyb3IoJ1VucmVjb2duaXplZCBmaWVsZCB0eXBl
OiAlZCcgJSBmaWVsZF90eXBlKQotCi0KLWRlZiBfQWRkQnl0ZVNpemVNZXRob2QobWVzc2FnZV9k
ZXNjcmlwdG9yLCBjbHMpOgotICAiIiJIZWxwZXIgZm9yIF9BZGRNZXNzYWdlTWV0aG9kcygpLiIi
IgotCi0gIGRlZiBCeXRlU2l6ZShzZWxmKToKLSAgICBpZiBub3Qgc2VsZi5fY2FjaGVkX2J5dGVf
c2l6ZV9kaXJ0eToKLSAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRfYnl0ZV9zaXplCi0KLSAgICBz
aXplID0gMAotICAgIGZvciBmaWVsZF9kZXNjcmlwdG9yLCBmaWVsZF92YWx1ZSBpbiBzZWxmLkxp
c3RGaWVsZHMoKToKLSAgICAgIHNpemUgKz0gZmllbGRfZGVzY3JpcHRvci5fc2l6ZXIoZmllbGRf
dmFsdWUpCi0KLSAgICBmb3IgdGFnX2J5dGVzLCB2YWx1ZV9ieXRlcyBpbiBzZWxmLl91bmtub3du
X2ZpZWxkczoKLSAgICAgIHNpemUgKz0gbGVuKHRhZ19ieXRlcykgKyBsZW4odmFsdWVfYnl0ZXMp
Ci0KLSAgICBzZWxmLl9jYWNoZWRfYnl0ZV9zaXplID0gc2l6ZQotICAgIHNlbGYuX2NhY2hlZF9i
eXRlX3NpemVfZGlydHkgPSBGYWxzZQotICAgIHNlbGYuX2xpc3RlbmVyX2Zvcl9jaGlsZHJlbi5k
aXJ0eSA9IEZhbHNlCi0gICAgcmV0dXJuIHNpemUKLQotICBjbHMuQnl0ZVNpemUgPSBCeXRlU2l6
ZQotCi0KLWRlZiBfQWRkU2VyaWFsaXplVG9TdHJpbmdNZXRob2QobWVzc2FnZV9kZXNjcmlwdG9y
LCBjbHMpOgotICAiIiJIZWxwZXIgZm9yIF9BZGRNZXNzYWdlTWV0aG9kcygpLiIiIgotCi0gIGRl
ZiBTZXJpYWxpemVUb1N0cmluZyhzZWxmKToKLSAgICAjIENoZWNrIGlmIHRoZSBtZXNzYWdlIGhh
cyBhbGwgb2YgaXRzIHJlcXVpcmVkIGZpZWxkcyBzZXQuCi0gICAgZXJyb3JzID0gW10KLSAgICBp
ZiBub3Qgc2VsZi5Jc0luaXRpYWxpemVkKCk6Ci0gICAgICByYWlzZSBtZXNzYWdlX21vZC5FbmNv
ZGVFcnJvcigKLSAgICAgICAgICAnTWVzc2FnZSAlcyBpcyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxk
czogJXMnICUgKAotICAgICAgICAgIHNlbGYuREVTQ1JJUFRPUi5mdWxsX25hbWUsICcsJy5qb2lu
KHNlbGYuRmluZEluaXRpYWxpemF0aW9uRXJyb3JzKCkpKSkKLSAgICByZXR1cm4gc2VsZi5TZXJp
YWxpemVQYXJ0aWFsVG9TdHJpbmcoKQotICBjbHMuU2VyaWFsaXplVG9TdHJpbmcgPSBTZXJpYWxp
emVUb1N0cmluZwotCi0KLWRlZiBfQWRkU2VyaWFsaXplUGFydGlhbFRvU3RyaW5nTWV0aG9kKG1l
c3NhZ2VfZGVzY3JpcHRvciwgY2xzKToKLSAgIiIiSGVscGVyIGZvciBfQWRkTWVzc2FnZU1ldGhv
ZHMoKS4iIiIKLQotICBkZWYgU2VyaWFsaXplUGFydGlhbFRvU3RyaW5nKHNlbGYpOgotICAgIG91
dCA9IEJ5dGVzSU8oKQotICAgIHNlbGYuX0ludGVybmFsU2VyaWFsaXplKG91dC53cml0ZSkKLSAg
ICByZXR1cm4gb3V0LmdldHZhbHVlKCkKLSAgY2xzLlNlcmlhbGl6ZVBhcnRpYWxUb1N0cmluZyA9
IFNlcmlhbGl6ZVBhcnRpYWxUb1N0cmluZwotCi0gIGRlZiBJbnRlcm5hbFNlcmlhbGl6ZShzZWxm
LCB3cml0ZV9ieXRlcyk6Ci0gICAgZm9yIGZpZWxkX2Rlc2NyaXB0b3IsIGZpZWxkX3ZhbHVlIGlu
IHNlbGYuTGlzdEZpZWxkcygpOgotICAgICAgZmllbGRfZGVzY3JpcHRvci5fZW5jb2Rlcih3cml0
ZV9ieXRlcywgZmllbGRfdmFsdWUpCi0gICAgZm9yIHRhZ19ieXRlcywgdmFsdWVfYnl0ZXMgaW4g
c2VsZi5fdW5rbm93bl9maWVsZHM6Ci0gICAgICB3cml0ZV9ieXRlcyh0YWdfYnl0ZXMpCi0gICAg
ICB3cml0ZV9ieXRlcyh2YWx1ZV9ieXRlcykKLSAgY2xzLl9JbnRlcm5hbFNlcmlhbGl6ZSA9IElu
dGVybmFsU2VyaWFsaXplCi0KLQotZGVmIF9BZGRNZXJnZUZyb21TdHJpbmdNZXRob2QobWVzc2Fn
ZV9kZXNjcmlwdG9yLCBjbHMpOgotICAiIiJIZWxwZXIgZm9yIF9BZGRNZXNzYWdlTWV0aG9kcygp
LiIiIgotICBkZWYgTWVyZ2VGcm9tU3RyaW5nKHNlbGYsIHNlcmlhbGl6ZWQpOgotICAgIGxlbmd0
aCA9IGxlbihzZXJpYWxpemVkKQotICAgIHRyeToKLSAgICAgIGlmIHNlbGYuX0ludGVybmFsUGFy
c2Uoc2VyaWFsaXplZCwgMCwgbGVuZ3RoKSAhPSBsZW5ndGg6Ci0gICAgICAgICMgVGhlIG9ubHkg
cmVhc29uIF9JbnRlcm5hbFBhcnNlIHdvdWxkIHJldHVybiBlYXJseSBpcyBpZiBpdAotICAgICAg
ICAjIGVuY291bnRlcmVkIGFuIGVuZC1ncm91cCB0YWcuCi0gICAgICAgIHJhaXNlIG1lc3NhZ2Vf
bW9kLkRlY29kZUVycm9yKCdVbmV4cGVjdGVkIGVuZC1ncm91cCB0YWcuJykKLSAgICBleGNlcHQg
KEluZGV4RXJyb3IsIFR5cGVFcnJvcik6Ci0gICAgICAjIE5vdyBvcmQoYnVmW3A6cCsxXSkgPT0g
b3JkKCcnKSBnZXRzIFR5cGVFcnJvci4KLSAgICAgIHJhaXNlIG1lc3NhZ2VfbW9kLkRlY29kZUVy
cm9yKCdUcnVuY2F0ZWQgbWVzc2FnZS4nKQotICAgIGV4Y2VwdCBzdHJ1Y3QuZXJyb3IgYXMgZToK
LSAgICAgIHJhaXNlIG1lc3NhZ2VfbW9kLkRlY29kZUVycm9yKGUpCi0gICAgcmV0dXJuIGxlbmd0
aCAgICMgUmV0dXJuIHRoaXMgZm9yIGxlZ2FjeSByZWFzb25zLgotICBjbHMuTWVyZ2VGcm9tU3Ry
aW5nID0gTWVyZ2VGcm9tU3RyaW5nCi0KLSAgbG9jYWxfUmVhZFRhZyA9IGRlY29kZXIuUmVhZFRh
ZwotICBsb2NhbF9Ta2lwRmllbGQgPSBkZWNvZGVyLlNraXBGaWVsZAotICBkZWNvZGVyc19ieV90
YWcgPSBjbHMuX2RlY29kZXJzX2J5X3RhZwotICBpc19wcm90bzMgPSBtZXNzYWdlX2Rlc2NyaXB0
b3Iuc3ludGF4ID09ICJwcm90bzMiCi0KLSAgZGVmIEludGVybmFsUGFyc2Uoc2VsZiwgYnVmZmVy
LCBwb3MsIGVuZCk6Ci0gICAgc2VsZi5fTW9kaWZpZWQoKQotICAgIGZpZWxkX2RpY3QgPSBzZWxm
Ll9maWVsZHMKLSAgICB1bmtub3duX2ZpZWxkX2xpc3QgPSBzZWxmLl91bmtub3duX2ZpZWxkcwot
ICAgIHdoaWxlIHBvcyAhPSBlbmQ6Ci0gICAgICAodGFnX2J5dGVzLCBuZXdfcG9zKSA9IGxvY2Fs
X1JlYWRUYWcoYnVmZmVyLCBwb3MpCi0gICAgICBmaWVsZF9kZWNvZGVyLCBmaWVsZF9kZXNjID0g
ZGVjb2RlcnNfYnlfdGFnLmdldCh0YWdfYnl0ZXMsIChOb25lLCBOb25lKSkKLSAgICAgIGlmIGZp
ZWxkX2RlY29kZXIgaXMgTm9uZToKLSAgICAgICAgdmFsdWVfc3RhcnRfcG9zID0gbmV3X3Bvcwot
ICAgICAgICBuZXdfcG9zID0gbG9jYWxfU2tpcEZpZWxkKGJ1ZmZlciwgbmV3X3BvcywgZW5kLCB0
YWdfYnl0ZXMpCi0gICAgICAgIGlmIG5ld19wb3MgPT0gLTE6Ci0gICAgICAgICAgcmV0dXJuIHBv
cwotICAgICAgICBpZiBub3QgaXNfcHJvdG8zOgotICAgICAgICAgIGlmIG5vdCB1bmtub3duX2Zp
ZWxkX2xpc3Q6Ci0gICAgICAgICAgICB1bmtub3duX2ZpZWxkX2xpc3QgPSBzZWxmLl91bmtub3du
X2ZpZWxkcyA9IFtdCi0gICAgICAgICAgdW5rbm93bl9maWVsZF9saXN0LmFwcGVuZCgKLSAgICAg
ICAgICAgICAgKHRhZ19ieXRlcywgYnVmZmVyW3ZhbHVlX3N0YXJ0X3BvczpuZXdfcG9zXSkpCi0g
ICAgICAgIHBvcyA9IG5ld19wb3MKLSAgICAgIGVsc2U6Ci0gICAgICAgIHBvcyA9IGZpZWxkX2Rl
Y29kZXIoYnVmZmVyLCBuZXdfcG9zLCBlbmQsIHNlbGYsIGZpZWxkX2RpY3QpCi0gICAgICAgIGlm
IGZpZWxkX2Rlc2M6Ci0gICAgICAgICAgc2VsZi5fVXBkYXRlT25lb2ZTdGF0ZShmaWVsZF9kZXNj
KQotICAgIHJldHVybiBwb3MKLSAgY2xzLl9JbnRlcm5hbFBhcnNlID0gSW50ZXJuYWxQYXJzZQot
Ci0KLWRlZiBfQWRkSXNJbml0aWFsaXplZE1ldGhvZChtZXNzYWdlX2Rlc2NyaXB0b3IsIGNscyk6
Ci0gICIiIkFkZHMgdGhlIElzSW5pdGlhbGl6ZWQgYW5kIEZpbmRJbml0aWFsaXphdGlvbkVycm9y
IG1ldGhvZHMgdG8gdGhlCi0gIHByb3RvY29sIG1lc3NhZ2UgY2xhc3MuIiIiCi0KLSAgcmVxdWly
ZWRfZmllbGRzID0gW2ZpZWxkIGZvciBmaWVsZCBpbiBtZXNzYWdlX2Rlc2NyaXB0b3IuZmllbGRz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZC5sYWJlbCA9PSBfRmllbGREZXNj
cmlwdG9yLkxBQkVMX1JFUVVJUkVEXQotCi0gIGRlZiBJc0luaXRpYWxpemVkKHNlbGYsIGVycm9y
cz1Ob25lKToKLSAgICAiIiJDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGZpZWxkcyBvZiBhIG1lc3Nh
Z2UgYXJlIHNldC4KLQotICAgIEFyZ3M6Ci0gICAgICBlcnJvcnM6ICBBIGxpc3Qgd2hpY2gsIGlm
IHByb3ZpZGVkLCB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBmaWVsZAotICAgICAgICAgICAg
ICAgcGF0aHMgb2YgYWxsIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLgotCi0gICAgUmV0dXJuczoK
LSAgICAgIFRydWUgaWZmIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSBoYXMgYWxsIHJlcXVpcmVkIGZp
ZWxkcyBzZXQuCi0gICAgIiIiCi0KLSAgICAjIFBlcmZvcm1hbmNlIGlzIGNyaXRpY2FsIHNvIHdl
IGF2b2lkIEhhc0ZpZWxkKCkgYW5kIExpc3RGaWVsZHMoKS4KLQotICAgIGZvciBmaWVsZCBpbiBy
ZXF1aXJlZF9maWVsZHM6Ci0gICAgICBpZiAoZmllbGQgbm90IGluIHNlbGYuX2ZpZWxkcyBvcgot
ICAgICAgICAgIChmaWVsZC5jcHBfdHlwZSA9PSBfRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfTUVT
U0FHRSBhbmQKLSAgICAgICAgICAgbm90IHNlbGYuX2ZpZWxkc1tmaWVsZF0uX2lzX3ByZXNlbnRf
aW5fcGFyZW50KSk6Ci0gICAgICAgIGlmIGVycm9ycyBpcyBub3QgTm9uZToKLSAgICAgICAgICBl
cnJvcnMuZXh0ZW5kKHNlbGYuRmluZEluaXRpYWxpemF0aW9uRXJyb3JzKCkpCi0gICAgICAgIHJl
dHVybiBGYWxzZQotCi0gICAgZm9yIGZpZWxkLCB2YWx1ZSBpbiBsaXN0KHNlbGYuX2ZpZWxkcy5p
dGVtcygpKTogICMgZGljdCBjYW4gY2hhbmdlIHNpemUhCi0gICAgICBpZiBmaWVsZC5jcHBfdHlw
ZSA9PSBfRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgaWYgZmllbGQu
bGFiZWwgPT0gX0ZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBFQVRFRDoKLSAgICAgICAgICBpZiAo
ZmllbGQubWVzc2FnZV90eXBlLmhhc19vcHRpb25zIGFuZAotICAgICAgICAgICAgICBmaWVsZC5t
ZXNzYWdlX3R5cGUuR2V0T3B0aW9ucygpLm1hcF9lbnRyeSk6Ci0gICAgICAgICAgICBjb250aW51
ZQotICAgICAgICAgIGZvciBlbGVtZW50IGluIHZhbHVlOgotICAgICAgICAgICAgaWYgbm90IGVs
ZW1lbnQuSXNJbml0aWFsaXplZCgpOgotICAgICAgICAgICAgICBpZiBlcnJvcnMgaXMgbm90IE5v
bmU6Ci0gICAgICAgICAgICAgICAgZXJyb3JzLmV4dGVuZChzZWxmLkZpbmRJbml0aWFsaXphdGlv
bkVycm9ycygpKQotICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxpZiB2YWx1
ZS5faXNfcHJlc2VudF9pbl9wYXJlbnQgYW5kIG5vdCB2YWx1ZS5Jc0luaXRpYWxpemVkKCk6Ci0g
ICAgICAgICAgaWYgZXJyb3JzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZXJyb3JzLmV4dGVu
ZChzZWxmLkZpbmRJbml0aWFsaXphdGlvbkVycm9ycygpKQotICAgICAgICAgIHJldHVybiBGYWxz
ZQotCi0gICAgcmV0dXJuIFRydWUKLQotICBjbHMuSXNJbml0aWFsaXplZCA9IElzSW5pdGlhbGl6
ZWQKLQotICBkZWYgRmluZEluaXRpYWxpemF0aW9uRXJyb3JzKHNlbGYpOgotICAgICIiIkZpbmRz
IHJlcXVpcmVkIGZpZWxkcyB3aGljaCBhcmUgbm90IGluaXRpYWxpemVkLgotCi0gICAgUmV0dXJu
czoKLSAgICAgIEEgbGlzdCBvZiBzdHJpbmdzLiAgRWFjaCBzdHJpbmcgaXMgYSBwYXRoIHRvIGFu
IHVuaW5pdGlhbGl6ZWQgZmllbGQgZnJvbQotICAgICAgdGhlIHRvcC1sZXZlbCBtZXNzYWdlLCBl
LmcuICJmb28uYmFyWzVdLmJheiIuCi0gICAgIiIiCi0KLSAgICBlcnJvcnMgPSBbXSAgIyBzaW1w
bGlmeSB0aGluZ3MKLQotICAgIGZvciBmaWVsZCBpbiByZXF1aXJlZF9maWVsZHM6Ci0gICAgICBp
ZiBub3Qgc2VsZi5IYXNGaWVsZChmaWVsZC5uYW1lKToKLSAgICAgICAgZXJyb3JzLmFwcGVuZChm
aWVsZC5uYW1lKQotCi0gICAgZm9yIGZpZWxkLCB2YWx1ZSBpbiBzZWxmLkxpc3RGaWVsZHMoKToK
LSAgICAgIGlmIGZpZWxkLmNwcF90eXBlID09IF9GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9NRVNT
QUdFOgotICAgICAgICBpZiBmaWVsZC5pc19leHRlbnNpb246Ci0gICAgICAgICAgbmFtZSA9ICIo
JXMpIiAlIGZpZWxkLmZ1bGxfbmFtZQotICAgICAgICBlbHNlOgotICAgICAgICAgIG5hbWUgPSBm
aWVsZC5uYW1lCi0KLSAgICAgICAgaWYgX0lzTWFwRmllbGQoZmllbGQpOgotICAgICAgICAgIGlm
IF9Jc01lc3NhZ2VNYXBGaWVsZChmaWVsZCk6Ci0gICAgICAgICAgICBmb3Iga2V5IGluIHZhbHVl
OgotICAgICAgICAgICAgICBlbGVtZW50ID0gdmFsdWVba2V5XQotICAgICAgICAgICAgICBwcmVm
aXggPSAiJXNbJXNdLiIgJSAobmFtZSwga2V5KQotICAgICAgICAgICAgICBzdWJfZXJyb3JzID0g
ZWxlbWVudC5GaW5kSW5pdGlhbGl6YXRpb25FcnJvcnMoKQotICAgICAgICAgICAgICBlcnJvcnMg
Kz0gW3ByZWZpeCArIGVycm9yIGZvciBlcnJvciBpbiBzdWJfZXJyb3JzXQotICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAjIFNjYWxhck1hcHMgY2FuJ3QgaGF2ZSBhbnkgaW5pdGlhbGl6YXRp
b24gZXJyb3JzLgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbGlmIGZpZWxkLmxhYmVsID09
IF9GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQ6Ci0gICAgICAgICAgZm9yIGkgaW4gcmFu
Z2UobGVuKHZhbHVlKSk6Ci0gICAgICAgICAgICBlbGVtZW50ID0gdmFsdWVbaV0KLSAgICAgICAg
ICAgIHByZWZpeCA9ICIlc1slZF0uIiAlIChuYW1lLCBpKQotICAgICAgICAgICAgc3ViX2Vycm9y
cyA9IGVsZW1lbnQuRmluZEluaXRpYWxpemF0aW9uRXJyb3JzKCkKLSAgICAgICAgICAgIGVycm9y
cyArPSBbcHJlZml4ICsgZXJyb3IgZm9yIGVycm9yIGluIHN1Yl9lcnJvcnNdCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgcHJlZml4ID0gbmFtZSArICIuIgotICAgICAgICAgIHN1Yl9lcnJvcnMg
PSB2YWx1ZS5GaW5kSW5pdGlhbGl6YXRpb25FcnJvcnMoKQotICAgICAgICAgIGVycm9ycyArPSBb
cHJlZml4ICsgZXJyb3IgZm9yIGVycm9yIGluIHN1Yl9lcnJvcnNdCi0KLSAgICByZXR1cm4gZXJy
b3JzCi0KLSAgY2xzLkZpbmRJbml0aWFsaXphdGlvbkVycm9ycyA9IEZpbmRJbml0aWFsaXphdGlv
bkVycm9ycwotCi0KLWRlZiBfQWRkTWVyZ2VGcm9tTWV0aG9kKGNscyk6Ci0gIExBQkVMX1JFUEVB
VEVEID0gX0ZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBFQVRFRAotICBDUFBUWVBFX01FU1NBR0Ug
PSBfRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfTUVTU0FHRQotCi0gIGRlZiBNZXJnZUZyb20oc2Vs
ZiwgbXNnKToKLSAgICBpZiBub3QgaXNpbnN0YW5jZShtc2csIGNscyk6Ci0gICAgICByYWlzZSBU
eXBlRXJyb3IoCi0gICAgICAgICAgIlBhcmFtZXRlciB0byBNZXJnZUZyb20oKSBtdXN0IGJlIGlu
c3RhbmNlIG9mIHNhbWUgY2xhc3M6ICIKLSAgICAgICAgICAiZXhwZWN0ZWQgJXMgZ290ICVzLiIg
JSAoY2xzLl9fbmFtZV9fLCB0eXBlKG1zZykuX19uYW1lX18pKQotCi0gICAgYXNzZXJ0IG1zZyBp
cyBub3Qgc2VsZgotICAgIHNlbGYuX01vZGlmaWVkKCkKLQotICAgIGZpZWxkcyA9IHNlbGYuX2Zp
ZWxkcwotCi0gICAgZm9yIGZpZWxkLCB2YWx1ZSBpbiBtc2cuX2ZpZWxkcy5pdGVtcygpOgotICAg
ICAgaWYgZmllbGQubGFiZWwgPT0gTEFCRUxfUkVQRUFURUQ6Ci0gICAgICAgIGZpZWxkX3ZhbHVl
ID0gZmllbGRzLmdldChmaWVsZCkKLSAgICAgICAgaWYgZmllbGRfdmFsdWUgaXMgTm9uZToKLSAg
ICAgICAgICAjIENvbnN0cnVjdCBhIG5ldyBvYmplY3QgdG8gcmVwcmVzZW50IHRoaXMgZmllbGQu
Ci0gICAgICAgICAgZmllbGRfdmFsdWUgPSBmaWVsZC5fZGVmYXVsdF9jb25zdHJ1Y3RvcihzZWxm
KQotICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSBmaWVsZF92YWx1ZQotICAgICAgICBmaWVsZF92
YWx1ZS5NZXJnZUZyb20odmFsdWUpCi0gICAgICBlbGlmIGZpZWxkLmNwcF90eXBlID09IENQUFRZ
UEVfTUVTU0FHRToKLSAgICAgICAgaWYgdmFsdWUuX2lzX3ByZXNlbnRfaW5fcGFyZW50OgotICAg
ICAgICAgIGZpZWxkX3ZhbHVlID0gZmllbGRzLmdldChmaWVsZCkKLSAgICAgICAgICBpZiBmaWVs
ZF92YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgIyBDb25zdHJ1Y3QgYSBuZXcgb2JqZWN0IHRv
IHJlcHJlc2VudCB0aGlzIGZpZWxkLgotICAgICAgICAgICAgZmllbGRfdmFsdWUgPSBmaWVsZC5f
ZGVmYXVsdF9jb25zdHJ1Y3RvcihzZWxmKQotICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IGZp
ZWxkX3ZhbHVlCi0gICAgICAgICAgZmllbGRfdmFsdWUuTWVyZ2VGcm9tKHZhbHVlKQotICAgICAg
ZWxzZToKLSAgICAgICAgc2VsZi5fZmllbGRzW2ZpZWxkXSA9IHZhbHVlCi0gICAgICAgIGlmIGZp
ZWxkLmNvbnRhaW5pbmdfb25lb2Y6Ci0gICAgICAgICAgc2VsZi5fVXBkYXRlT25lb2ZTdGF0ZShm
aWVsZCkKLQotICAgIGlmIG1zZy5fdW5rbm93bl9maWVsZHM6Ci0gICAgICBpZiBub3Qgc2VsZi5f
dW5rbm93bl9maWVsZHM6Ci0gICAgICAgIHNlbGYuX3Vua25vd25fZmllbGRzID0gW10KLSAgICAg
IHNlbGYuX3Vua25vd25fZmllbGRzLmV4dGVuZChtc2cuX3Vua25vd25fZmllbGRzKQotCi0gIGNs
cy5NZXJnZUZyb20gPSBNZXJnZUZyb20KLQotCi1kZWYgX0FkZFdoaWNoT25lb2ZNZXRob2QobWVz
c2FnZV9kZXNjcmlwdG9yLCBjbHMpOgotICBkZWYgV2hpY2hPbmVvZihzZWxmLCBvbmVvZl9uYW1l
KToKLSAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgc2V0IGZpZWxkIGlu
c2lkZSBhIG9uZW9mLCBvciBOb25lLiIiIgotICAgIHRyeToKLSAgICAgIGZpZWxkID0gbWVzc2Fn
ZV9kZXNjcmlwdG9yLm9uZW9mc19ieV9uYW1lW29uZW9mX25hbWVdCi0gICAgZXhjZXB0IEtleUVy
cm9yOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAnUHJvdG9jb2wgbWVzc2Fn
ZSBoYXMgbm8gb25lb2YgIiVzIiBmaWVsZC4nICUgb25lb2ZfbmFtZSkKLQotICAgIG5lc3RlZF9m
aWVsZCA9IHNlbGYuX29uZW9mcy5nZXQoZmllbGQsIE5vbmUpCi0gICAgaWYgbmVzdGVkX2ZpZWxk
IGlzIG5vdCBOb25lIGFuZCBzZWxmLkhhc0ZpZWxkKG5lc3RlZF9maWVsZC5uYW1lKToKLSAgICAg
IHJldHVybiBuZXN0ZWRfZmllbGQubmFtZQotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gTm9uZQot
Ci0gIGNscy5XaGljaE9uZW9mID0gV2hpY2hPbmVvZgotCi0KLWRlZiBfQ2xlYXIoc2VsZik6Ci0g
ICMgQ2xlYXIgZmllbGRzLgotICBzZWxmLl9maWVsZHMgPSB7fQotICBzZWxmLl91bmtub3duX2Zp
ZWxkcyA9ICgpCi0gIHNlbGYuX29uZW9mcyA9IHt9Ci0gIHNlbGYuX01vZGlmaWVkKCkKLQotCi1k
ZWYgX0Rpc2NhcmRVbmtub3duRmllbGRzKHNlbGYpOgotICBzZWxmLl91bmtub3duX2ZpZWxkcyA9
IFtdCi0gIGZvciBmaWVsZCwgdmFsdWUgaW4gc2VsZi5MaXN0RmllbGRzKCk6Ci0gICAgaWYgZmll
bGQuY3BwX3R5cGUgPT0gX0ZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0U6Ci0gICAgICBp
ZiBmaWVsZC5sYWJlbCA9PSBfRmllbGREZXNjcmlwdG9yLkxBQkVMX1JFUEVBVEVEOgotICAgICAg
ICBmb3Igc3ViX21lc3NhZ2UgaW4gdmFsdWU6Ci0gICAgICAgICAgc3ViX21lc3NhZ2UuRGlzY2Fy
ZFVua25vd25GaWVsZHMoKQotICAgICAgZWxzZToKLSAgICAgICAgdmFsdWUuRGlzY2FyZFVua25v
d25GaWVsZHMoKQotCi0KLWRlZiBfU2V0TGlzdGVuZXIoc2VsZiwgbGlzdGVuZXIpOgotICBpZiBs
aXN0ZW5lciBpcyBOb25lOgotICAgIHNlbGYuX2xpc3RlbmVyID0gbWVzc2FnZV9saXN0ZW5lcl9t
b2QuTnVsbE1lc3NhZ2VMaXN0ZW5lcigpCi0gIGVsc2U6Ci0gICAgc2VsZi5fbGlzdGVuZXIgPSBs
aXN0ZW5lcgotCi0KLWRlZiBfQWRkTWVzc2FnZU1ldGhvZHMobWVzc2FnZV9kZXNjcmlwdG9yLCBj
bHMpOgotICAiIiJBZGRzIGltcGxlbWVudGF0aW9ucyBvZiBhbGwgTWVzc2FnZSBtZXRob2RzIHRv
IGNscy4iIiIKLSAgX0FkZExpc3RGaWVsZHNNZXRob2QobWVzc2FnZV9kZXNjcmlwdG9yLCBjbHMp
Ci0gIF9BZGRIYXNGaWVsZE1ldGhvZChtZXNzYWdlX2Rlc2NyaXB0b3IsIGNscykKLSAgX0FkZENs
ZWFyRmllbGRNZXRob2QobWVzc2FnZV9kZXNjcmlwdG9yLCBjbHMpCi0gIGlmIG1lc3NhZ2VfZGVz
Y3JpcHRvci5pc19leHRlbmRhYmxlOgotICAgIF9BZGRDbGVhckV4dGVuc2lvbk1ldGhvZChjbHMp
Ci0gICAgX0FkZEhhc0V4dGVuc2lvbk1ldGhvZChjbHMpCi0gIF9BZGRFcXVhbHNNZXRob2QobWVz
c2FnZV9kZXNjcmlwdG9yLCBjbHMpCi0gIF9BZGRTdHJNZXRob2QobWVzc2FnZV9kZXNjcmlwdG9y
LCBjbHMpCi0gIF9BZGRSZXByTWV0aG9kKG1lc3NhZ2VfZGVzY3JpcHRvciwgY2xzKQotICBfQWRk
VW5pY29kZU1ldGhvZChtZXNzYWdlX2Rlc2NyaXB0b3IsIGNscykKLSAgX0FkZEJ5dGVTaXplTWV0
aG9kKG1lc3NhZ2VfZGVzY3JpcHRvciwgY2xzKQotICBfQWRkU2VyaWFsaXplVG9TdHJpbmdNZXRo
b2QobWVzc2FnZV9kZXNjcmlwdG9yLCBjbHMpCi0gIF9BZGRTZXJpYWxpemVQYXJ0aWFsVG9TdHJp
bmdNZXRob2QobWVzc2FnZV9kZXNjcmlwdG9yLCBjbHMpCi0gIF9BZGRNZXJnZUZyb21TdHJpbmdN
ZXRob2QobWVzc2FnZV9kZXNjcmlwdG9yLCBjbHMpCi0gIF9BZGRJc0luaXRpYWxpemVkTWV0aG9k
KG1lc3NhZ2VfZGVzY3JpcHRvciwgY2xzKQotICBfQWRkTWVyZ2VGcm9tTWV0aG9kKGNscykKLSAg
X0FkZFdoaWNoT25lb2ZNZXRob2QobWVzc2FnZV9kZXNjcmlwdG9yLCBjbHMpCi0gICMgQWRkcyBt
ZXRob2RzIHdoaWNoIGRvIG5vdCBkZXBlbmQgb24gY2xzLgotICBjbHMuQ2xlYXIgPSBfQ2xlYXIK
LSAgY2xzLkRpc2NhcmRVbmtub3duRmllbGRzID0gX0Rpc2NhcmRVbmtub3duRmllbGRzCi0gIGNs
cy5fU2V0TGlzdGVuZXIgPSBfU2V0TGlzdGVuZXIKLQotCi1kZWYgX0FkZFByaXZhdGVIZWxwZXJN
ZXRob2RzKG1lc3NhZ2VfZGVzY3JpcHRvciwgY2xzKToKLSAgIiIiQWRkcyBpbXBsZW1lbnRhdGlv
biBvZiBwcml2YXRlIGhlbHBlciBtZXRob2RzIHRvIGNscy4iIiIKLQotICBkZWYgTW9kaWZpZWQo
c2VsZik6Ci0gICAgIiIiU2V0cyB0aGUgX2NhY2hlZF9ieXRlX3NpemVfZGlydHkgYml0IHRvIHRy
dWUsCi0gICAgYW5kIHByb3BhZ2F0ZXMgdGhpcyB0byBvdXIgbGlzdGVuZXIgaWZmIHRoaXMgd2Fz
IGEgc3RhdGUgY2hhbmdlLgotICAgICIiIgotCi0gICAgIyBOb3RlOiAgU29tZSBjYWxsZXJzIGNo
ZWNrIF9jYWNoZWRfYnl0ZV9zaXplX2RpcnR5IGJlZm9yZSBjYWxsaW5nCi0gICAgIyAgIF9Nb2Rp
ZmllZCgpIGFzIGFuIGV4dHJhIG9wdGltaXphdGlvbi4gIFNvLCBpZiB0aGlzIG1ldGhvZCBpcyBl
dmVyCi0gICAgIyAgIGNoYW5nZWQgc3VjaCB0aGF0IGl0IGRvZXMgc3R1ZmYgZXZlbiB3aGVuIF9j
YWNoZWRfYnl0ZV9zaXplX2RpcnR5IGlzCi0gICAgIyAgIGFscmVhZHkgdHJ1ZSwgdGhlIGNhbGxl
cnMgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGlmIG5vdCBzZWxmLl9jYWNoZWRfYnl0ZV9zaXpl
X2RpcnR5OgotICAgICAgc2VsZi5fY2FjaGVkX2J5dGVfc2l6ZV9kaXJ0eSA9IFRydWUKLSAgICAg
IHNlbGYuX2xpc3RlbmVyX2Zvcl9jaGlsZHJlbi5kaXJ0eSA9IFRydWUKLSAgICAgIHNlbGYuX2lz
X3ByZXNlbnRfaW5fcGFyZW50ID0gVHJ1ZQotICAgICAgc2VsZi5fbGlzdGVuZXIuTW9kaWZpZWQo
KQotCi0gIGRlZiBfVXBkYXRlT25lb2ZTdGF0ZShzZWxmLCBmaWVsZCk6Ci0gICAgIiIiU2V0cyBm
aWVsZCBhcyB0aGUgYWN0aXZlIGZpZWxkIGluIGl0cyBjb250YWluaW5nIG9uZW9mLgotCi0gICAg
V2lsbCBhbHNvIGRlbGV0ZSBjdXJyZW50bHkgYWN0aXZlIGZpZWxkIGluIHRoZSBvbmVvZiwgaWYg
aXQgaXMgZGlmZmVyZW50Ci0gICAgZnJvbSB0aGUgYXJndW1lbnQuIERvZXMgbm90IG1hcmsgdGhl
IG1lc3NhZ2UgYXMgbW9kaWZpZWQuCi0gICAgIiIiCi0gICAgb3RoZXJfZmllbGQgPSBzZWxmLl9v
bmVvZnMuc2V0ZGVmYXVsdChmaWVsZC5jb250YWluaW5nX29uZW9mLCBmaWVsZCkKLSAgICBpZiBv
dGhlcl9maWVsZCBpcyBub3QgZmllbGQ6Ci0gICAgICBkZWwgc2VsZi5fZmllbGRzW290aGVyX2Zp
ZWxkXQotICAgICAgc2VsZi5fb25lb2ZzW2ZpZWxkLmNvbnRhaW5pbmdfb25lb2ZdID0gZmllbGQK
LQotICBjbHMuX01vZGlmaWVkID0gTW9kaWZpZWQKLSAgY2xzLlNldEluUGFyZW50ID0gTW9kaWZp
ZWQKLSAgY2xzLl9VcGRhdGVPbmVvZlN0YXRlID0gX1VwZGF0ZU9uZW9mU3RhdGUKLQotCi1jbGFz
cyBfTGlzdGVuZXIob2JqZWN0KToKLQotICAiIiJNZXNzYWdlTGlzdGVuZXIgaW1wbGVtZW50YXRp
b24gdGhhdCBhIHBhcmVudCBtZXNzYWdlIHJlZ2lzdGVycyB3aXRoIGl0cwotICBjaGlsZCBtZXNz
YWdlLgotCi0gIEluIG9yZGVyIHRvIHN1cHBvcnQgc2VtYW50aWNzIGxpa2U6Ci0KLSAgICBmb28u
YmFyLmJhei5xdXggPSAyMwotICAgIGFzc2VydCBmb28uSGFzRmllbGQoJ2JhcicpCi0KLSAgLi4u
Y2hpbGQgb2JqZWN0cyBtdXN0IGhhdmUgYmFjayByZWZlcmVuY2VzIHRvIHRoZWlyIHBhcmVudHMu
Ci0gIFRoaXMgaGVscGVyIGNsYXNzIGlzIGF0IHRoZSBoZWFydCBvZiB0aGlzIHN1cHBvcnQuCi0g
ICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnRfbWVzc2FnZSk6Ci0gICAgIiIiQXJn
czoKLSAgICAgIHBhcmVudF9tZXNzYWdlOiBUaGUgbWVzc2FnZSB3aG9zZSBfTW9kaWZpZWQoKSBt
ZXRob2Qgd2Ugc2hvdWxkIGNhbGwgd2hlbgotICAgICAgICB3ZSByZWNlaXZlIE1vZGlmaWVkKCkg
bWVzc2FnZXMuCi0gICAgIiIiCi0gICAgIyBUaGlzIGxpc3RlbmVyIGVzdGFibGlzaGVzIGEgYmFj
ayByZWZlcmVuY2UgZnJvbSBhIGNoaWxkIChjb250YWluZWQpIG9iamVjdAotICAgICMgdG8gaXRz
IHBhcmVudCAoY29udGFpbmluZykgb2JqZWN0LiAgV2UgbWFrZSB0aGlzIGEgd2VhayByZWZlcmVu
Y2UgdG8gYXZvaWQKLSAgICAjIGNyZWF0aW5nIGN5Y2xpYyBnYXJiYWdlIHdoZW4gdGhlIGNsaWVu
dCBmaW5pc2hlcyB3aXRoIHRoZSAncGFyZW50JyBvYmplY3QKLSAgICAjIGluIHRoZSB0cmVlLgot
ICAgIGlmIGlzaW5zdGFuY2UocGFyZW50X21lc3NhZ2UsIHdlYWtyZWYuUHJveHlUeXBlKToKLSAg
ICAgIHNlbGYuX3BhcmVudF9tZXNzYWdlX3dlYWtyZWYgPSBwYXJlbnRfbWVzc2FnZQotICAgIGVs
c2U6Ci0gICAgICBzZWxmLl9wYXJlbnRfbWVzc2FnZV93ZWFrcmVmID0gd2Vha3JlZi5wcm94eShw
YXJlbnRfbWVzc2FnZSkKLQotICAgICMgQXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBhbHNvIGluZGlj
YXRlIGRpcmVjdGx5IG9uIHRoZSBsaXN0ZW5lciB3aGV0aGVyCi0gICAgIyBvciBub3QgdGhlIHBh
cmVudCBtZXNzYWdlIGlzIGRpcnR5LiAgVGhpcyB3YXkgd2UgY2FuIGF2b2lkIHRyYXZlcnNpbmcK
LSAgICAjIHVwIHRoZSB0cmVlIGluIHRoZSBjb21tb24gY2FzZS4KLSAgICBzZWxmLmRpcnR5ID0g
RmFsc2UKLQotICBkZWYgTW9kaWZpZWQoc2VsZik6Ci0gICAgaWYgc2VsZi5kaXJ0eToKLSAgICAg
IHJldHVybgotICAgIHRyeToKLSAgICAgICMgUHJvcGFnYXRlIHRoZSBzaWduYWwgdG8gb3VyIHBh
cmVudHMgaWZmIHRoaXMgaXMgdGhlIGZpcnN0IGZpZWxkIHNldC4KLSAgICAgIHNlbGYuX3BhcmVu
dF9tZXNzYWdlX3dlYWtyZWYuX01vZGlmaWVkKCkKLSAgICBleGNlcHQgUmVmZXJlbmNlRXJyb3I6
Ci0gICAgICAjIFdlIGNhbiBnZXQgaGVyZSBpZiBhIGNsaWVudCBoYXMga2VwdCBhIHJlZmVyZW5j
ZSB0byBhIGNoaWxkIG9iamVjdCwKLSAgICAgICMgYW5kIGlzIG5vdyBzZXR0aW5nIGEgZmllbGQg
b24gaXQsIGJ1dCB0aGUgY2hpbGQncyBwYXJlbnQgaGFzIGJlZW4KLSAgICAgICMgZ2FyYmFnZS1j
b2xsZWN0ZWQuICBUaGlzIGlzIG5vdCBhbiBlcnJvci4KLSAgICAgIHBhc3MKLQotCi1jbGFzcyBf
T25lb2ZMaXN0ZW5lcihfTGlzdGVuZXIpOgotICAiIiJTcGVjaWFsIGxpc3RlbmVyIGltcGxlbWVu
dGF0aW9uIGZvciBzZXR0aW5nIGNvbXBvc2l0ZSBvbmVvZiBmaWVsZHMuIiIiCi0KLSAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBhcmVudF9tZXNzYWdlLCBmaWVsZCk6Ci0gICAgIiIiQXJnczoKLSAgICAg
IHBhcmVudF9tZXNzYWdlOiBUaGUgbWVzc2FnZSB3aG9zZSBfTW9kaWZpZWQoKSBtZXRob2Qgd2Ug
c2hvdWxkIGNhbGwgd2hlbgotICAgICAgICB3ZSByZWNlaXZlIE1vZGlmaWVkKCkgbWVzc2FnZXMu
Ci0gICAgICBmaWVsZDogVGhlIGRlc2NyaXB0b3Igb2YgdGhlIGZpZWxkIGJlaW5nIHNldCBpbiB0
aGUgcGFyZW50IG1lc3NhZ2UuCi0gICAgIiIiCi0gICAgc3VwZXIoX09uZW9mTGlzdGVuZXIsIHNl
bGYpLl9faW5pdF9fKHBhcmVudF9tZXNzYWdlKQotICAgIHNlbGYuX2ZpZWxkID0gZmllbGQKLQot
ICBkZWYgTW9kaWZpZWQoc2VsZik6Ci0gICAgIiIiQWxzbyB1cGRhdGVzIHRoZSBzdGF0ZSBvZiB0
aGUgY29udGFpbmluZyBvbmVvZiBpbiB0aGUgcGFyZW50IG1lc3NhZ2UuIiIiCi0gICAgdHJ5Ogot
ICAgICAgc2VsZi5fcGFyZW50X21lc3NhZ2Vfd2Vha3JlZi5fVXBkYXRlT25lb2ZTdGF0ZShzZWxm
Ll9maWVsZCkKLSAgICAgIHN1cGVyKF9PbmVvZkxpc3RlbmVyLCBzZWxmKS5Nb2RpZmllZCgpCi0g
ICAgZXhjZXB0IFJlZmVyZW5jZUVycm9yOgotICAgICAgcGFzcwotCi0KLSMgVE9ETyhyb2JpbnNv
bik6IE1vdmUgZWxzZXdoZXJlPyAgVGhpcyBmaWxlIGlzIGdldHRpbmcgcHJldHR5IHJpZGljdWxv
dXMuLi4KLSMgVE9ETyhyb2JpbnNvbik6IFVuaWZ5IGVycm9yIGhhbmRsaW5nIG9mICJ1bmtub3du
IGV4dGVuc2lvbiIgY3JhcC4KLSMgVE9ETyhyb2JpbnNvbik6IFN1cHBvcnQgaXRlcml0ZW1zKCkt
c3R5bGUgaXRlcmF0aW9uIG92ZXIgYWxsCi0jIGV4dGVuc2lvbnMgd2l0aCB0aGUgImhhcyIgYml0
cyB0dXJuZWQgb24/Ci1jbGFzcyBfRXh0ZW5zaW9uRGljdChvYmplY3QpOgotCi0gICIiIkRpY3Qt
bGlrZSBjb250YWluZXIgZm9yIHN1cHBvcnRpbmcgYW4gaW5kZXhhYmxlICJFeHRlbnNpb25zIgot
ICBmaWVsZCBvbiBwcm90byBpbnN0YW5jZXMuCi0KLSAgTm90ZSB0aGF0IGluIGFsbCBjYXNlcyB3
ZSBleHBlY3QgZXh0ZW5zaW9uIGhhbmRsZXMgdG8gYmUKLSAgRmllbGREZXNjcmlwdG9ycy4KLSAg
IiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dGVuZGVkX21lc3NhZ2UpOgotICAgICIiImV4
dGVuZGVkX21lc3NhZ2U6IE1lc3NhZ2UgaW5zdGFuY2UgZm9yIHdoaWNoIHdlIGFyZSB0aGUgRXh0
ZW5zaW9ucyBkaWN0LgotICAgICIiIgotCi0gICAgc2VsZi5fZXh0ZW5kZWRfbWVzc2FnZSA9IGV4
dGVuZGVkX21lc3NhZ2UKLQotICBkZWYgX19nZXRpdGVtX18oc2VsZiwgZXh0ZW5zaW9uX2hhbmRs
ZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZXh0ZW5z
aW9uIGhhbmRsZS4iIiIKLQotICAgIF9WZXJpZnlFeHRlbnNpb25IYW5kbGUoc2VsZi5fZXh0ZW5k
ZWRfbWVzc2FnZSwgZXh0ZW5zaW9uX2hhbmRsZSkKLQotICAgIHJlc3VsdCA9IHNlbGYuX2V4dGVu
ZGVkX21lc3NhZ2UuX2ZpZWxkcy5nZXQoZXh0ZW5zaW9uX2hhbmRsZSkKLSAgICBpZiByZXN1bHQg
aXMgbm90IE5vbmU6Ci0gICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBpZiBleHRlbnNpb25faGFu
ZGxlLmxhYmVsID09IF9GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQ6Ci0gICAgICByZXN1
bHQgPSBleHRlbnNpb25faGFuZGxlLl9kZWZhdWx0X2NvbnN0cnVjdG9yKHNlbGYuX2V4dGVuZGVk
X21lc3NhZ2UpCi0gICAgZWxpZiBleHRlbnNpb25faGFuZGxlLmNwcF90eXBlID09IF9GaWVsZERl
c2NyaXB0b3IuQ1BQVFlQRV9NRVNTQUdFOgotICAgICAgcmVzdWx0ID0gZXh0ZW5zaW9uX2hhbmRs
ZS5tZXNzYWdlX3R5cGUuX2NvbmNyZXRlX2NsYXNzKCkKLSAgICAgIHRyeToKLSAgICAgICAgcmVz
dWx0Ll9TZXRMaXN0ZW5lcihzZWxmLl9leHRlbmRlZF9tZXNzYWdlLl9saXN0ZW5lcl9mb3JfY2hp
bGRyZW4pCi0gICAgICBleGNlcHQgUmVmZXJlbmNlRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBl
bHNlOgotICAgICAgIyBTaW5ndWxhciBzY2FsYXIgLS0ganVzdCByZXR1cm4gdGhlIGRlZmF1bHQg
d2l0aG91dCBpbnNlcnRpbmcgaW50byB0aGUKLSAgICAgICMgZGljdC4KLSAgICAgIHJldHVybiBl
eHRlbnNpb25faGFuZGxlLmRlZmF1bHRfdmFsdWUKLQotICAgICMgQXRvbWljYWxseSBjaGVjayBp
ZiBhbm90aGVyIHRocmVhZCBoYXMgcHJlZW1wdGVkIHVzIGFuZCwgaWYgbm90LCBzd2FwCi0gICAg
IyBpbiB0aGUgbmV3IG9iamVjdCB3ZSBqdXN0IGNyZWF0ZWQuICBJZiBzb21lb25lIGhhcyBwcmVl
bXB0ZWQgdXMsIHdlCi0gICAgIyB0YWtlIHRoYXQgb2JqZWN0IGFuZCBkaXNjYXJkIG91cnMuCi0g
ICAgIyBXQVJOSU5HOiAgV2UgYXJlIHJlbHlpbmcgb24gc2V0ZGVmYXVsdCgpIGJlaW5nIGF0b21p
Yy4gIFRoaXMgaXMgdHJ1ZQotICAgICMgICBpbiBDUHl0aG9uIGJ1dCB3ZSBoYXZlbid0IGludmVz
dGlnYXRlZCBvdGhlcnMuICBUaGlzIHdhcm5pbmcgYXBwZWFycwotICAgICMgICBpbiBzZXZlcmFs
IG90aGVyIGxvY2F0aW9ucyBpbiB0aGlzIGZpbGUuCi0gICAgcmVzdWx0ID0gc2VsZi5fZXh0ZW5k
ZWRfbWVzc2FnZS5fZmllbGRzLnNldGRlZmF1bHQoCi0gICAgICAgIGV4dGVuc2lvbl9oYW5kbGUs
IHJlc3VsdCkKLQotICAgIHJldHVybiByZXN1bHQKLQotICBkZWYgX19lcV9fKHNlbGYsIG90aGVy
KToKLSAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgotICAgICAg
cmV0dXJuIEZhbHNlCi0KLSAgICBteV9maWVsZHMgPSBzZWxmLl9leHRlbmRlZF9tZXNzYWdlLkxp
c3RGaWVsZHMoKQotICAgIG90aGVyX2ZpZWxkcyA9IG90aGVyLl9leHRlbmRlZF9tZXNzYWdlLkxp
c3RGaWVsZHMoKQotCi0gICAgIyBHZXQgcmlkIG9mIG5vbi1leHRlbnNpb24gZmllbGRzLgotICAg
IG15X2ZpZWxkcyAgICA9IFsgZmllbGQgZm9yIGZpZWxkIGluIG15X2ZpZWxkcyAgICBpZiBmaWVs
ZC5pc19leHRlbnNpb24gXQotICAgIG90aGVyX2ZpZWxkcyA9IFsgZmllbGQgZm9yIGZpZWxkIGlu
IG90aGVyX2ZpZWxkcyBpZiBmaWVsZC5pc19leHRlbnNpb24gXQotCi0gICAgcmV0dXJuIG15X2Zp
ZWxkcyA9PSBvdGhlcl9maWVsZHMKLQotICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICBy
ZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQotICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgcmFp
c2UgVHlwZUVycm9yKCd1bmhhc2hhYmxlIG9iamVjdCcpCi0KLSAgIyBOb3RlIHRoYXQgdGhpcyBp
cyBvbmx5IG1lYW5pbmdmdWwgZm9yIG5vbi1yZXBlYXRlZCwgc2NhbGFyIGV4dGVuc2lvbgotICAj
IGZpZWxkcy4gIE5vdGUgYWxzbyB0aGF0IHdlIG1heSBoYXZlIHRvIGNhbGwgX01vZGlmaWVkKCkg
d2hlbiB3ZSBkbwotICAjIHN1Y2Nlc3NmdWxseSBzZXQgYSBmaWVsZCB0aGlzIHdheSwgdG8gc2V0
IGFueSBuZWNzc2FyeSAiaGFzIiBiaXRzIGluIHRoZQotICAjIGFuY2VzdG9ycyBvZiB0aGUgZXh0
ZW5kZWQgbWVzc2FnZS4KLSAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGV4dGVuc2lvbl9oYW5kbGUs
IHZhbHVlKToKLSAgICAiIiJJZiBleHRlbnNpb25faGFuZGxlIHNwZWNpZmllcyBhIG5vbi1yZXBl
YXRlZCwgc2NhbGFyIGV4dGVuc2lvbgotICAgIGZpZWxkLCBzZXRzIHRoZSB2YWx1ZSBvZiB0aGF0
IGZpZWxkLgotICAgICIiIgotCi0gICAgX1ZlcmlmeUV4dGVuc2lvbkhhbmRsZShzZWxmLl9leHRl
bmRlZF9tZXNzYWdlLCBleHRlbnNpb25faGFuZGxlKQotCi0gICAgaWYgKGV4dGVuc2lvbl9oYW5k
bGUubGFiZWwgPT0gX0ZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBFQVRFRCBvcgotICAgICAgICBl
eHRlbnNpb25faGFuZGxlLmNwcF90eXBlID09IF9GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9NRVNT
QUdFKToKLSAgICAgIHJhaXNlIFR5cGVFcnJvcigKLSAgICAgICAgICAnQ2Fubm90IGFzc2lnbiB0
byBleHRlbnNpb24gIiVzIiBiZWNhdXNlIGl0IGlzIGEgcmVwZWF0ZWQgb3IgJwotICAgICAgICAg
ICdjb21wb3NpdGUgdHlwZS4nICUgZXh0ZW5zaW9uX2hhbmRsZS5mdWxsX25hbWUpCi0KLSAgICAj
IEl0J3Mgc2xpZ2h0bHkgd2FzdGVmdWwgdG8gbG9va3VwIHRoZSB0eXBlIGNoZWNrZXIgZWFjaCB0
aW1lLAotICAgICMgYnV0IHdlIGV4cGVjdCB0aGlzIHRvIGJlIGEgdmFuaXNoaW5nbHkgdW5jb21t
b24gY2FzZSBhbnl3YXkuCi0gICAgdHlwZV9jaGVja2VyID0gdHlwZV9jaGVja2Vycy5HZXRUeXBl
Q2hlY2tlcihleHRlbnNpb25faGFuZGxlKQotICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3Rl
ZC1hY2Nlc3MKLSAgICBzZWxmLl9leHRlbmRlZF9tZXNzYWdlLl9maWVsZHNbZXh0ZW5zaW9uX2hh
bmRsZV0gPSAoCi0gICAgICAgIHR5cGVfY2hlY2tlci5DaGVja1ZhbHVlKHZhbHVlKSkKLSAgICBz
ZWxmLl9leHRlbmRlZF9tZXNzYWdlLl9Nb2RpZmllZCgpCi0KLSAgZGVmIF9GaW5kRXh0ZW5zaW9u
QnlOYW1lKHNlbGYsIG5hbWUpOgotICAgICIiIlRyaWVzIHRvIGZpbmQgYSBrbm93biBleHRlbnNp
b24gd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCi0KLSAgICBBcmdzOgotICAgICAgbmFtZTogRXh0
ZW5zaW9uIGZ1bGwgbmFtZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBFeHRlbnNpb24gZmllbGQg
ZGVzY3JpcHRvci4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5fZXh0ZW5kZWRfbWVzc2FnZS5f
ZXh0ZW5zaW9uc19ieV9uYW1lLmdldChuYW1lLCBOb25lKQotCi0gIGRlZiBfRmluZEV4dGVuc2lv
bkJ5TnVtYmVyKHNlbGYsIG51bWJlcik6Ci0gICAgIiIiVHJpZXMgdG8gZmluZCBhIGtub3duIGV4
dGVuc2lvbiB3aXRoIHRoZSBmaWVsZCBudW1iZXIuCi0KLSAgICBBcmdzOgotICAgICAgbnVtYmVy
OiBFeHRlbnNpb24gZmllbGQgbnVtYmVyLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEV4dGVuc2lv
biBmaWVsZCBkZXNjcmlwdG9yLgotICAgICIiIgotICAgIHJldHVybiBzZWxmLl9leHRlbmRlZF9t
ZXNzYWdlLl9leHRlbnNpb25zX2J5X251bWJlci5nZXQobnVtYmVyLCBOb25lKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3JlZmxlY3Rpb25fdGVzdC5weSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9yZWZsZWN0aW9uX3Rlc3QucHkKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDZkYzJmZmZlMmI5MjdhZmQwZWZiNjk0N2JjYTNmOGIyNjhk
ZjNjNzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRo
b24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3JlZmxlY3Rpb25fdGVzdC5weQorKysgL2Rldi9u
dWxsCkBAIC0xLDI5ODMgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIyAtKi0gY29k
aW5nOiB1dGYtOCAtKi0KLSMKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJp
YnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVW5pdHRlc3QgZm9yIHJlZmxlY3Rpb24ucHks
IHdoaWNoIGFsc28gaW5kaXJlY3RseSB0ZXN0cyB0aGUgb3V0cHV0IG9mIHRoZQotcHVyZS1QeXRo
b24gcHJvdG9jb2wgY29tcGlsZXIuCi0iIiIKLQotaW1wb3J0IGNvcHkKLWltcG9ydCBnYwotaW1w
b3J0IG9wZXJhdG9yCi1pbXBvcnQgc2l4Ci1pbXBvcnQgc3RydWN0Ci0KLXRyeToKLSAgaW1wb3J0
IHVuaXR0ZXN0MiBhcyB1bml0dGVzdCAgI1BZMjYKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1w
b3J0IHVuaXR0ZXN0Ci0KLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB1bml0dGVzdF9pbXBv
cnRfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdW5pdHRlc3RfbXNldF9wYjIKLWZy
b20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB1bml0dGVzdF9wYjIKLWZyb20gZ29vZ2xlLnByb3Rv
YnVmIGltcG9ydCBkZXNjcmlwdG9yX3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IGRl
c2NyaXB0b3IKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBtZXNzYWdlCi1mcm9tIGdvb2ds
ZS5wcm90b2J1ZiBpbXBvcnQgcmVmbGVjdGlvbgotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0
IHRleHRfZm9ybWF0Ci1mcm9tIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbCBpbXBvcnQgYXBpX2lt
cGxlbWVudGF0aW9uCi1mcm9tIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbCBpbXBvcnQgbW9yZV9l
eHRlbnNpb25zX3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IG1vcmVf
bWVzc2FnZXNfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbCBpbXBvcnQgbWVzc2Fn
ZV9zZXRfZXh0ZW5zaW9uc19wYjIKLWZyb20gZ29vZ2xlLnByb3RvYnVmLmludGVybmFsIGltcG9y
dCB3aXJlX2Zvcm1hdAotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IHRlc3Rf
dXRpbAotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IGRlY29kZXIKLQotCi1j
bGFzcyBfTWluaURlY29kZXIob2JqZWN0KToKLSAgIiIiRGVjb2RlcyBhIHN0cmVhbSBvZiB2YWx1
ZXMgZnJvbSBhIHN0cmluZy4KLQotICBPbmNlIHVwb24gYSB0aW1lIHdlIGFjdHVhbGx5IGhhZCBh
IGNsYXNzIGNhbGxlZCBkZWNvZGVyLkRlY29kZXIuICBUaGVuIHdlCi0gIGdvdCByaWQgb2YgaXQg
ZHVyaW5nIGEgcmVkZXNpZ24gdGhhdCBtYWRlIGRlY29kaW5nIG11Y2gsIG11Y2ggZmFzdGVyIG92
ZXJhbGwuCi0gIEJ1dCBhIGNvdXBsZSB0ZXN0cyBpbiB0aGlzIGZpbGUgdXNlZCBpdCB0byBjaGVj
ayB0aGF0IHRoZSBzZXJpYWxpemVkIGZvcm0gb2YKLSAgYSBtZXNzYWdlIHdhcyBjb3JyZWN0LiAg
U28sIHRoaXMgY2xhc3MgaW1wbGVtZW50cyBqdXN0IHRoZSBtZXRob2RzIHRoYXQgd2VyZQotICB1
c2VkIGJ5IHNhaWQgdGVzdHMsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byByZXdyaXRlIHRoZSB0
ZXN0cy4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGJ5dGVzKToKLSAgICBzZWxmLl9i
eXRlcyA9IGJ5dGVzCi0gICAgc2VsZi5fcG9zID0gMAotCi0gIGRlZiBSZWFkVmFyaW50KHNlbGYp
OgotICAgIHJlc3VsdCwgc2VsZi5fcG9zID0gZGVjb2Rlci5fRGVjb2RlVmFyaW50KHNlbGYuX2J5
dGVzLCBzZWxmLl9wb3MpCi0gICAgcmV0dXJuIHJlc3VsdAotCi0gIFJlYWRJbnQzMiA9IFJlYWRW
YXJpbnQKLSAgUmVhZEludDY0ID0gUmVhZFZhcmludAotICBSZWFkVUludDMyID0gUmVhZFZhcmlu
dAotICBSZWFkVUludDY0ID0gUmVhZFZhcmludAotCi0gIGRlZiBSZWFkU0ludDY0KHNlbGYpOgot
ICAgIHJldHVybiB3aXJlX2Zvcm1hdC5aaWdaYWdEZWNvZGUoc2VsZi5SZWFkVmFyaW50KCkpCi0K
LSAgUmVhZFNJbnQzMiA9IFJlYWRTSW50NjQKLQotICBkZWYgUmVhZEZpZWxkTnVtYmVyQW5kV2ly
ZVR5cGUoc2VsZik6Ci0gICAgcmV0dXJuIHdpcmVfZm9ybWF0LlVucGFja1RhZyhzZWxmLlJlYWRW
YXJpbnQoKSkKLQotICBkZWYgUmVhZEZsb2F0KHNlbGYpOgotICAgIHJlc3VsdCA9IHN0cnVjdC51
bnBhY2soIjxmIiwgc2VsZi5fYnl0ZXNbc2VsZi5fcG9zOnNlbGYuX3Bvcys0XSlbMF0KLSAgICBz
ZWxmLl9wb3MgKz0gNAotICAgIHJldHVybiByZXN1bHQKLQotICBkZWYgUmVhZERvdWJsZShzZWxm
KToKLSAgICByZXN1bHQgPSBzdHJ1Y3QudW5wYWNrKCI8ZCIsIHNlbGYuX2J5dGVzW3NlbGYuX3Bv
czpzZWxmLl9wb3MrOF0pWzBdCi0gICAgc2VsZi5fcG9zICs9IDgKLSAgICByZXR1cm4gcmVzdWx0
Ci0KLSAgZGVmIEVuZE9mU3RyZWFtKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9wb3MgPT0gbGVu
KHNlbGYuX2J5dGVzKQotCi0KLWNsYXNzIFJlZmxlY3Rpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKLQotICBkZWYgYXNzZXJ0TGlzdHNFcXVhbChzZWxmLCB2YWx1ZXMsIG90aGVycyk6Ci0gICAg
c2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgbGVuKG90aGVycykpCi0gICAgZm9yIGkgaW4g
cmFuZ2UobGVuKHZhbHVlcykpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbaV0sIG90
aGVyc1tpXSkKLQotICBkZWYgdGVzdFNjYWxhckNvbnN0cnVjdG9yKHNlbGYpOgotICAgICMgQ29u
c3RydWN0b3Igd2l0aCBvbmx5IHNjYWxhciB0eXBlcyBzaG91bGQgc3VjY2VlZC4KLSAgICBwcm90
byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoCi0gICAgICAgIG9wdGlvbmFsX2ludDMyPTI0
LAotICAgICAgICBvcHRpb25hbF9kb3VibGU9NTQuMzIxLAotICAgICAgICBvcHRpb25hbF9zdHJp
bmc9J29wdGlvbmFsX3N0cmluZycsCi0gICAgICAgIG9wdGlvbmFsX2Zsb2F0PU5vbmUpCi0KLSAg
ICBzZWxmLmFzc2VydEVxdWFsKDI0LCBwcm90by5vcHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFz
c2VydEVxdWFsKDU0LjMyMSwgcHJvdG8ub3B0aW9uYWxfZG91YmxlKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ29wdGlvbmFsX3N0cmluZycsIHByb3RvLm9wdGlvbmFsX3N0cmluZykKLSAgICBzZWxm
LmFzc2VydEZhbHNlKHByb3RvLkhhc0ZpZWxkKCJvcHRpb25hbF9mbG9hdCIpKQotCi0gIGRlZiB0
ZXN0UmVwZWF0ZWRTY2FsYXJDb25zdHJ1Y3RvcihzZWxmKToKLSAgICAjIENvbnN0cnVjdG9yIHdp
dGggb25seSByZXBlYXRlZCBzY2FsYXIgdHlwZXMgc2hvdWxkIHN1Y2NlZWQuCi0gICAgcHJvdG8g
PSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKAotICAgICAgICByZXBlYXRlZF9pbnQzMj1bMSwg
MiwgMywgNF0sCi0gICAgICAgIHJlcGVhdGVkX2RvdWJsZT1bMS4yMywgNTQuMzIxXSwKLSAgICAg
ICAgcmVwZWF0ZWRfYm9vbD1bVHJ1ZSwgRmFsc2UsIEZhbHNlXSwKLSAgICAgICAgcmVwZWF0ZWRf
c3RyaW5nPVsib3B0aW9uYWxfc3RyaW5nIl0sCi0gICAgICAgIHJlcGVhdGVkX2Zsb2F0PU5vbmUp
Ci0KLSAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzLCA0XSwgbGlzdChwcm90by5yZXBlYXRl
ZF9pbnQzMikpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbMS4yMywgNTQuMzIxXSwgbGlzdChwcm90
by5yZXBlYXRlZF9kb3VibGUpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoW1RydWUsIEZhbHNlLCBG
YWxzZV0sIGxpc3QocHJvdG8ucmVwZWF0ZWRfYm9vbCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChb
Im9wdGlvbmFsX3N0cmluZyJdLCBsaXN0KHByb3RvLnJlcGVhdGVkX3N0cmluZykpCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbChbXSwgbGlzdChwcm90by5yZXBlYXRlZF9mbG9hdCkpCi0KLSAgZGVmIHRl
c3RSZXBlYXRlZENvbXBvc2l0ZUNvbnN0cnVjdG9yKHNlbGYpOgotICAgICMgQ29uc3RydWN0b3Ig
d2l0aCBvbmx5IHJlcGVhdGVkIGNvbXBvc2l0ZSB0eXBlcyBzaG91bGQgc3VjY2VlZC4KLSAgICBw
cm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoCi0gICAgICAgIHJlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlPVsKLSAgICAgICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVzdGVk
TWVzc2FnZSgKLSAgICAgICAgICAgICAgICBiYj11bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLkZP
TyksCi0gICAgICAgICAgICB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2Uo
Ci0gICAgICAgICAgICAgICAgYmI9dW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5CQVIpXSwKLSAg
ICAgICAgcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlPVsKLSAgICAgICAgICAgIHVuaXR0ZXN0X3Bi
Mi5Gb3JlaWduTWVzc2FnZShjPS00MyksCi0gICAgICAgICAgICB1bml0dGVzdF9wYjIuRm9yZWln
bk1lc3NhZ2UoYz00NTMyNCksCi0gICAgICAgICAgICB1bml0dGVzdF9wYjIuRm9yZWlnbk1lc3Nh
Z2UoYz0xMildLAotICAgICAgICByZXBlYXRlZGdyb3VwPVsKLSAgICAgICAgICAgIHVuaXR0ZXN0
X3BiMi5UZXN0QWxsVHlwZXMuUmVwZWF0ZWRHcm91cCgpLAotICAgICAgICAgICAgdW5pdHRlc3Rf
cGIyLlRlc3RBbGxUeXBlcy5SZXBlYXRlZEdyb3VwKGE9MSksCi0gICAgICAgICAgICB1bml0dGVz
dF9wYjIuVGVzdEFsbFR5cGVzLlJlcGVhdGVkR3JvdXAoYT0yKV0pCi0KLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKAotICAgICAgICBbdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdl
KAotICAgICAgICAgICAgYmI9dW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5GT08pLAotICAgICAg
ICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlKAotICAgICAgICAgICAg
IGJiPXVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuQkFSKV0sCi0gICAgICAgIGxpc3QocHJvdG8u
cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAg
IFt1bml0dGVzdF9wYjIuRm9yZWlnbk1lc3NhZ2UoYz0tNDMpLAotICAgICAgICAgdW5pdHRlc3Rf
cGIyLkZvcmVpZ25NZXNzYWdlKGM9NDUzMjQpLAotICAgICAgICAgdW5pdHRlc3RfcGIyLkZvcmVp
Z25NZXNzYWdlKGM9MTIpXSwKLSAgICAgICAgbGlzdChwcm90by5yZXBlYXRlZF9mb3JlaWduX21l
c3NhZ2UpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIFt1bml0dGVzdF9wYjIuVGVz
dEFsbFR5cGVzLlJlcGVhdGVkR3JvdXAoKSwKLSAgICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxs
VHlwZXMuUmVwZWF0ZWRHcm91cChhPTEpLAotICAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxU
eXBlcy5SZXBlYXRlZEdyb3VwKGE9MildLAotICAgICAgICBsaXN0KHByb3RvLnJlcGVhdGVkZ3Jv
dXApKQotCi0gIGRlZiB0ZXN0TWl4ZWRDb25zdHJ1Y3RvcihzZWxmKToKLSAgICAjIENvbnN0cnVj
dG9yIHdpdGggb25seSBtaXhlZCB0eXBlcyBzaG91bGQgc3VjY2VlZC4KLSAgICBwcm90byA9IHVu
aXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoCi0gICAgICAgIG9wdGlvbmFsX2ludDMyPTI0LAotICAg
ICAgICBvcHRpb25hbF9zdHJpbmc9J29wdGlvbmFsX3N0cmluZycsCi0gICAgICAgIHJlcGVhdGVk
X2RvdWJsZT1bMS4yMywgNTQuMzIxXSwKLSAgICAgICAgcmVwZWF0ZWRfYm9vbD1bVHJ1ZSwgRmFs
c2UsIEZhbHNlXSwKLSAgICAgICAgcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2U9WwotICAgICAgICAg
ICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlKAotICAgICAgICAgICAg
ICAgIGJiPXVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuRk9PKSwKLSAgICAgICAgICAgIHVuaXR0
ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZSgKLSAgICAgICAgICAgICAgICBiYj11
bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLkJBUildLAotICAgICAgICByZXBlYXRlZF9mb3JlaWdu
X21lc3NhZ2U9WwotICAgICAgICAgICAgdW5pdHRlc3RfcGIyLkZvcmVpZ25NZXNzYWdlKGM9LTQz
KSwKLSAgICAgICAgICAgIHVuaXR0ZXN0X3BiMi5Gb3JlaWduTWVzc2FnZShjPTQ1MzI0KSwKLSAg
ICAgICAgICAgIHVuaXR0ZXN0X3BiMi5Gb3JlaWduTWVzc2FnZShjPTEyKV0sCi0gICAgICAgIG9w
dGlvbmFsX25lc3RlZF9tZXNzYWdlPU5vbmUpCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKDI0LCBw
cm90by5vcHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdvcHRpb25hbF9zdHJp
bmcnLCBwcm90by5vcHRpb25hbF9zdHJpbmcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbMS4yMywg
NTQuMzIxXSwgbGlzdChwcm90by5yZXBlYXRlZF9kb3VibGUpKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoW1RydWUsIEZhbHNlLCBGYWxzZV0sIGxpc3QocHJvdG8ucmVwZWF0ZWRfYm9vbCkpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgW3VuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVz
dGVkTWVzc2FnZSgKLSAgICAgICAgICAgIGJiPXVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuRk9P
KSwKLSAgICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZSgKLSAg
ICAgICAgICAgICBiYj11bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLkJBUildLAotICAgICAgICBs
aXN0KHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKSkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KAotICAgICAgICBbdW5pdHRlc3RfcGIyLkZvcmVpZ25NZXNzYWdlKGM9LTQzKSwKLSAgICAgICAg
IHVuaXR0ZXN0X3BiMi5Gb3JlaWduTWVzc2FnZShjPTQ1MzI0KSwKLSAgICAgICAgIHVuaXR0ZXN0
X3BiMi5Gb3JlaWduTWVzc2FnZShjPTEyKV0sCi0gICAgICAgIGxpc3QocHJvdG8ucmVwZWF0ZWRf
Zm9yZWlnbl9tZXNzYWdlKSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKHByb3RvLkhhc0ZpZWxkKCJv
cHRpb25hbF9uZXN0ZWRfbWVzc2FnZSIpKQotCi0gIGRlZiB0ZXN0Q29uc3RydWN0b3JUeXBlRXJy
b3Ioc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgIFR5cGVFcnJvciwgdW5p
dHRlc3RfcGIyLlRlc3RBbGxUeXBlcywgb3B0aW9uYWxfaW50MzI9ImZvbyIpCi0gICAgc2VsZi5h
c3NlcnRSYWlzZXMoCi0gICAgICAgIFR5cGVFcnJvciwgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBl
cywgb3B0aW9uYWxfc3RyaW5nPTEyMzQpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAg
IFR5cGVFcnJvciwgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcywgb3B0aW9uYWxfbmVzdGVkX21l
c3NhZ2U9MTIzNCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgVHlwZUVycm9yLCB1
bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLCByZXBlYXRlZF9pbnQzMj0xMjM0KQotICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKAotICAgICAgICBUeXBlRXJyb3IsIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlw
ZXMsIHJlcGVhdGVkX2ludDMyPVsiZm9vIl0pCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAg
ICAgIFR5cGVFcnJvciwgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcywgcmVwZWF0ZWRfc3RyaW5n
PTEyMzQpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgIFR5cGVFcnJvciwgdW5pdHRl
c3RfcGIyLlRlc3RBbGxUeXBlcywgcmVwZWF0ZWRfc3RyaW5nPVsxMjM0XSkKLSAgICBzZWxmLmFz
c2VydFJhaXNlcygKLSAgICAgICAgVHlwZUVycm9yLCB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVz
LCByZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZT0xMjM0KQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAot
ICAgICAgICBUeXBlRXJyb3IsIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMsIHJlcGVhdGVkX25l
c3RlZF9tZXNzYWdlPVsxMjM0XSkKLQotICBkZWYgdGVzdENvbnN0cnVjdG9ySW52YWxpZGF0ZXND
YWNoZWRCeXRlU2l6ZShzZWxmKToKLSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxU
eXBlcyhvcHRpb25hbF9pbnQzMiA9IDEyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbWVzc2Fn
ZS5CeXRlU2l6ZSgpKQotCi0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMo
Ci0gICAgICAgIG9wdGlvbmFsX25lc3RlZF9tZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxU
eXBlcy5OZXN0ZWRNZXNzYWdlKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBtZXNzYWdlLkJ5
dGVTaXplKCkpCi0KLSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcyhyZXBl
YXRlZF9pbnQzMiA9IFsxMl0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBtZXNzYWdlLkJ5dGVT
aXplKCkpCi0KLSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygKLSAgICAg
ICAgcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgPSBbdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5O
ZXN0ZWRNZXNzYWdlKCldKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbWVzc2FnZS5CeXRlU2l6
ZSgpKQotCi0gIGRlZiB0ZXN0U2ltcGxlSGFzQml0cyhzZWxmKToKLSAgICAjIFRlc3QgYSBzY2Fs
YXIuCi0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFz
c2VydFRydWUobm90IHByb3RvLkhhc0ZpZWxkKCdvcHRpb25hbF9pbnQzMicpKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMCwgcHJvdG8ub3B0aW9uYWxfaW50MzIpCi0gICAgIyBIYXNGaWVsZCgpIHNo
b3VsZG4ndCBiZSB0cnVlIGlmIGFsbCB3ZSd2ZSBkb25lIGlzCi0gICAgIyByZWFkIHRoZSBkZWZh
dWx0IHZhbHVlLgotICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcHJvdG8uSGFzRmllbGQoJ29wdGlv
bmFsX2ludDMyJykpCi0gICAgcHJvdG8ub3B0aW9uYWxfaW50MzIgPSAxCi0gICAgIyBTZXR0aW5n
IGEgdmFsdWUgaG93ZXZlciAqc2hvdWxkKiBzZXQgdGhlICJoYXMiIGJpdC4KLSAgICBzZWxmLmFz
c2VydFRydWUocHJvdG8uSGFzRmllbGQoJ29wdGlvbmFsX2ludDMyJykpCi0gICAgcHJvdG8uQ2xl
YXJGaWVsZCgnb3B0aW9uYWxfaW50MzInKQotICAgICMgQW5kIGNsZWFyaW5nIHRoYXQgdmFsdWUg
c2hvdWxkIHVuc2V0IHRoZSAiaGFzIiBiaXQuCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBwcm90
by5IYXNGaWVsZCgnb3B0aW9uYWxfaW50MzInKSkKLQotICBkZWYgdGVzdEhhc0JpdHNXaXRoU2lu
Z2x5TmVzdGVkU2NhbGFyKHNlbGYpOgotICAgICMgSGVscGVyIHVzZWQgdG8gdGVzdCBmb3JlaWdu
IG1lc3NhZ2VzIGFuZCBncm91cHMuCi0gICAgIwotICAgICMgY29tcG9zaXRlX2ZpZWxkX25hbWUg
c2hvdWxkIGJlIHRoZSBuYW1lIG9mIGEgbm9uLXJlcGVhdGVkCi0gICAgIyBjb21wb3NpdGUgKGku
ZS4sIGZvcmVpZ24gb3IgZ3JvdXApIGZpZWxkIGluIFRlc3RBbGxUeXBlcywKLSAgICAjIGFuZCBz
Y2FsYXJfZmllbGRfbmFtZSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYW4gaW50ZWdlci12YWx1ZWQK
LSAgICAjIHNjYWxhciBmaWVsZCB3aXRoaW4gdGhhdCBjb21wb3NpdGUuCi0gICAgIwotICAgICMg
SSBuZXZlciB0aG91Z2h0IEknZCBtaXNzIEMrKyBtYWNyb3MgYW5kIHRlbXBsYXRlcyBzbyBtdWNo
LiA6KAotICAgICMgVGhpcyBoZWxwZXIgaXMgc2VtYW50aWNhbGx5IGp1c3Q6Ci0gICAgIwotICAg
ICMgICBhc3NlcnQgcHJvdG8uY29tcG9zaXRlX2ZpZWxkLnNjYWxhcl9maWVsZCA9PSAwCi0gICAg
IyAgIGFzc2VydCBub3QgcHJvdG8uY29tcG9zaXRlX2ZpZWxkLkhhc0ZpZWxkKCdzY2FsYXJfZmll
bGQnKQotICAgICMgICBhc3NlcnQgbm90IHByb3RvLkhhc0ZpZWxkKCdjb21wb3NpdGVfZmllbGQn
KQotICAgICMKLSAgICAjICAgcHJvdG8uY29tcG9zaXRlX2ZpZWxkLnNjYWxhcl9maWVsZCA9IDEw
Ci0gICAgIyAgIG9sZF9jb21wb3NpdGVfZmllbGQgPSBwcm90by5jb21wb3NpdGVfZmllbGQKLSAg
ICAjCi0gICAgIyAgIGFzc2VydCBwcm90by5jb21wb3NpdGVfZmllbGQuc2NhbGFyX2ZpZWxkID09
IDEwCi0gICAgIyAgIGFzc2VydCBwcm90by5jb21wb3NpdGVfZmllbGQuSGFzRmllbGQoJ3NjYWxh
cl9maWVsZCcpCi0gICAgIyAgIGFzc2VydCBwcm90by5IYXNGaWVsZCgnY29tcG9zaXRlX2ZpZWxk
JykKLSAgICAjCi0gICAgIyAgIHByb3RvLkNsZWFyRmllbGQoJ2NvbXBvc2l0ZV9maWVsZCcpCi0g
ICAgIwotICAgICMgICBhc3NlcnQgbm90IHByb3RvLmNvbXBvc2l0ZV9maWVsZC5IYXNGaWVsZCgn
c2NhbGFyX2ZpZWxkJykKLSAgICAjICAgYXNzZXJ0IG5vdCBwcm90by5IYXNGaWVsZCgnY29tcG9z
aXRlX2ZpZWxkJykKLSAgICAjICAgYXNzZXJ0IHByb3RvLmNvbXBvc2l0ZV9maWVsZC5zY2FsYXJf
ZmllbGQgPT0gMAotICAgICMKLSAgICAjICAgIyBOb3cgZW5zdXJlIHRoYXQgQ2xlYXJGaWVsZCgn
Y29tcG9zaXRlX2ZpZWxkJykgZGlzY29ubmVjdGVkCi0gICAgIyAgICMgdGhlIG9sZCBmaWVsZCBv
YmplY3QgZnJvbSB0aGUgb2JqZWN0IHRyZWUuLi4KLSAgICAjICAgYXNzZXJ0IG9sZF9jb21wb3Np
dGVfZmllbGQgaXMgbm90IHByb3RvLmNvbXBvc2l0ZV9maWVsZAotICAgICMgICBvbGRfY29tcG9z
aXRlX2ZpZWxkLnNjYWxhcl9maWVsZCA9IDIwCi0gICAgIyAgIGFzc2VydCBub3QgcHJvdG8uY29t
cG9zaXRlX2ZpZWxkLkhhc0ZpZWxkKCdzY2FsYXJfZmllbGQnKQotICAgICMgICBhc3NlcnQgbm90
IHByb3RvLkhhc0ZpZWxkKCdjb21wb3NpdGVfZmllbGQnKQotICAgIGRlZiBUZXN0Q29tcG9zaXRl
SGFzQml0cyhjb21wb3NpdGVfZmllbGRfbmFtZSwgc2NhbGFyX2ZpZWxkX25hbWUpOgotICAgICAg
cHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICAgICMgRmlyc3QsIGNoZWNr
IHRoYXQgd2UgY2FuIGdldCB0aGUgc2NhbGFyIHZhbHVlLCBhbmQgc2VlIHRoYXQgaXQncyB0aGUK
LSAgICAgICMgZGVmYXVsdCAoMCksIGJ1dCB0aGF0IHByb3RvLkhhc0ZpZWxkKCdvbXBvc2l0ZScp
IGFuZAotICAgICAgIyBwcm90by5jb21wb3NpdGUuSGFzRmllbGQoJ3NjYWxhcicpIHdpbGwgc3Rp
bGwgcmV0dXJuIEZhbHNlLgotICAgICAgY29tcG9zaXRlX2ZpZWxkID0gZ2V0YXR0cihwcm90bywg
Y29tcG9zaXRlX2ZpZWxkX25hbWUpCi0gICAgICBvcmlnaW5hbF9zY2FsYXJfdmFsdWUgPSBnZXRh
dHRyKGNvbXBvc2l0ZV9maWVsZCwgc2NhbGFyX2ZpZWxkX25hbWUpCi0gICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDAsIG9yaWdpbmFsX3NjYWxhcl92YWx1ZSkKLSAgICAgICMgQXNzZXJ0IHRoYXQgdGhl
IGNvbXBvc2l0ZSBvYmplY3QgZG9lcyBub3QgImhhdmUiIHRoZSBzY2FsYXIuCi0gICAgICBzZWxm
LmFzc2VydFRydWUobm90IGNvbXBvc2l0ZV9maWVsZC5IYXNGaWVsZChzY2FsYXJfZmllbGRfbmFt
ZSkpCi0gICAgICAjIEFzc2VydCB0aGF0IHByb3RvIGRvZXMgbm90ICJoYXZlIiB0aGUgY29tcG9z
aXRlIGZpZWxkLgotICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBwcm90by5IYXNGaWVsZChjb21w
b3NpdGVfZmllbGRfbmFtZSkpCi0KLSAgICAgICMgTm93IHNldCB0aGUgc2NhbGFyIHdpdGhpbiB0
aGUgY29tcG9zaXRlIGZpZWxkLiAgRW5zdXJlIHRoYXQgdGhlIHNldHRpbmcKLSAgICAgICMgaXMg
cmVmbGVjdGVkLCBhbmQgdGhhdCBwcm90by5IYXNGaWVsZCgnY29tcG9zaXRlJykgYW5kCi0gICAg
ICAjIHByb3RvLmNvbXBvc2l0ZS5IYXNGaWVsZCgnc2NhbGFyJykgbm93IGJvdGggcmV0dXJuIFRy
dWUuCi0gICAgICBuZXdfdmFsID0gMjAKLSAgICAgIHNldGF0dHIoY29tcG9zaXRlX2ZpZWxkLCBz
Y2FsYXJfZmllbGRfbmFtZSwgbmV3X3ZhbCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3Zh
bCwgZ2V0YXR0cihjb21wb3NpdGVfZmllbGQsIHNjYWxhcl9maWVsZF9uYW1lKSkKLSAgICAgICMg
SG9sZCBvbiB0byBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBjb21wb3NpdGVfZmllbGQgb2Jq
ZWN0LgotICAgICAgb2xkX2NvbXBvc2l0ZV9maWVsZCA9IGNvbXBvc2l0ZV9maWVsZAotICAgICAg
IyBBc3NlcnQgdGhhdCB0aGUgaGFzIG1ldGhvZHMgbm93IHJldHVybiB0cnVlLgotICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGNvbXBvc2l0ZV9maWVsZC5IYXNGaWVsZChzY2FsYXJfZmllbGRfbmFtZSkp
Ci0gICAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uSGFzRmllbGQoY29tcG9zaXRlX2ZpZWxkX25h
bWUpKQotCi0gICAgICAjIE5vdyBjYWxsIHRoZSBjbGVhciBtZXRob2QuLi4KLSAgICAgIHByb3Rv
LkNsZWFyRmllbGQoY29tcG9zaXRlX2ZpZWxkX25hbWUpCi0KLSAgICAgICMgLi4uYW5kIGVuc3Vy
ZSB0aGF0IHRoZSAiaGFzIiBiaXRzIGFyZSBhbGwgYmFjayB0byBGYWxzZS4uLgotICAgICAgY29t
cG9zaXRlX2ZpZWxkID0gZ2V0YXR0cihwcm90bywgY29tcG9zaXRlX2ZpZWxkX25hbWUpCi0gICAg
ICBzZWxmLmFzc2VydFRydWUobm90IGNvbXBvc2l0ZV9maWVsZC5IYXNGaWVsZChzY2FsYXJfZmll
bGRfbmFtZSkpCi0gICAgICBzZWxmLmFzc2VydFRydWUobm90IHByb3RvLkhhc0ZpZWxkKGNvbXBv
c2l0ZV9maWVsZF9uYW1lKSkKLSAgICAgICMgLi4uYW5kIGVuc3VyZSB0aGF0IHRoZSBzY2FsYXIg
ZmllbGQgaGFzIHJldHVybmVkIHRvIGl0cyBkZWZhdWx0LgotICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgwLCBnZXRhdHRyKGNvbXBvc2l0ZV9maWVsZCwgc2NhbGFyX2ZpZWxkX25hbWUpKQotCi0gICAg
ICBzZWxmLmFzc2VydFRydWUob2xkX2NvbXBvc2l0ZV9maWVsZCBpcyBub3QgY29tcG9zaXRlX2Zp
ZWxkKQotICAgICAgc2V0YXR0cihvbGRfY29tcG9zaXRlX2ZpZWxkLCBzY2FsYXJfZmllbGRfbmFt
ZSwgbmV3X3ZhbCkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY29tcG9zaXRlX2ZpZWxkLkhh
c0ZpZWxkKHNjYWxhcl9maWVsZF9uYW1lKSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcHJv
dG8uSGFzRmllbGQoY29tcG9zaXRlX2ZpZWxkX25hbWUpKQotICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgwLCBnZXRhdHRyKGNvbXBvc2l0ZV9maWVsZCwgc2NhbGFyX2ZpZWxkX25hbWUpKQotCi0gICAg
IyBUZXN0IHNpbXBsZSwgc2luZ2xlLWxldmVsIG5lc3Rpbmcgd2hlbiB3ZSBzZXQgYSBzY2FsYXIu
Ci0gICAgVGVzdENvbXBvc2l0ZUhhc0JpdHMoJ29wdGlvbmFsZ3JvdXAnLCAnYScpCi0gICAgVGVz
dENvbXBvc2l0ZUhhc0JpdHMoJ29wdGlvbmFsX25lc3RlZF9tZXNzYWdlJywgJ2JiJykKLSAgICBU
ZXN0Q29tcG9zaXRlSGFzQml0cygnb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlJywgJ2MnKQotICAg
IFRlc3RDb21wb3NpdGVIYXNCaXRzKCdvcHRpb25hbF9pbXBvcnRfbWVzc2FnZScsICdkJykKLQot
ICBkZWYgdGVzdFJlZmVyZW5jZXNUb05lc3RlZE1lc3NhZ2Uoc2VsZik6Ci0gICAgcHJvdG8gPSB1
bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBuZXN0ZWQgPSBwcm90by5vcHRpb25hbF9u
ZXN0ZWRfbWVzc2FnZQotICAgIGRlbCBwcm90bwotICAgICMgQSBwcmV2aW91cyB2ZXJzaW9uIGhh
ZCBhIGJ1ZyB3aGVyZSB0aGlzIHdvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuCi0gICAgIyBo
aXR0aW5nIGEgbm93LWRlYWQgd2VhayByZWZlcmVuY2UuCi0gICAgbmVzdGVkLmJiID0gMjMKLQot
ICBkZWYgdGVzdERpc2Nvbm5lY3RpbmdOZXN0ZWRNZXNzYWdlQmVmb3JlU2V0dGluZ0ZpZWxkKHNl
bGYpOgotICAgIHByb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgbmVzdGVk
ID0gcHJvdG8ub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UKLSAgICBwcm90by5DbGVhckZpZWxkKCdv
cHRpb25hbF9uZXN0ZWRfbWVzc2FnZScpICAjIFNob3VsZCBkaXNjb25uZWN0IGZyb20gcGFyZW50
Ci0gICAgc2VsZi5hc3NlcnRUcnVlKG5lc3RlZCBpcyBub3QgcHJvdG8ub3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UpCi0gICAgbmVzdGVkLmJiID0gMjMKLSAgICBzZWxmLmFzc2VydFRydWUobm90IHBy
b3RvLkhhc0ZpZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZScpKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMCwgcHJvdG8ub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIpCi0KLSAgZGVmIHRlc3RH
ZXREZWZhdWx0TWVzc2FnZUFmdGVyRGlzY29ubmVjdGluZ0RlZmF1bHRNZXNzYWdlKHNlbGYpOgot
ICAgIHByb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgbmVzdGVkID0gcHJv
dG8ub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UKLSAgICBwcm90by5DbGVhckZpZWxkKCdvcHRpb25h
bF9uZXN0ZWRfbWVzc2FnZScpCi0gICAgZGVsIHByb3RvCi0gICAgZGVsIG5lc3RlZAotICAgICMg
Rm9yY2UgYSBnYXJiYWdlIGNvbGxlY3Qgc28gdGhhdCB0aGUgdW5kZXJseWluZyBDTWVzc2FnZXMg
YXJlIGZyZWVkIGFsb25nCi0gICAgIyB3aXRoIHRoZSBNZXNzYWdlcyB0aGV5IHBvaW50IHRvLiBU
aGlzIGlzIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgZGVsZXRpbmcKLSAgICAjIGRlZmF1bHQgbWVz
c2FnZSBpbnN0YW5jZXMuCi0gICAgZ2MuY29sbGVjdCgpCi0gICAgcHJvdG8gPSB1bml0dGVzdF9w
YjIuVGVzdEFsbFR5cGVzKCkKLSAgICBuZXN0ZWQgPSBwcm90by5vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZQotCi0gIGRlZiB0ZXN0RGlzY29ubmVjdGluZ05lc3RlZE1lc3NhZ2VBZnRlclNldHRpbmdG
aWVsZChzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAg
IG5lc3RlZCA9IHByb3RvLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlCi0gICAgbmVzdGVkLmJiID0g
NQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5IYXNGaWVsZCgnb3B0aW9uYWxfbmVzdGVkX21l
c3NhZ2UnKSkKLSAgICBwcm90by5DbGVhckZpZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZScp
ICAjIFNob3VsZCBkaXNjb25uZWN0IGZyb20gcGFyZW50Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCg1
LCBuZXN0ZWQuYmIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5vcHRpb25hbF9uZXN0
ZWRfbWVzc2FnZS5iYikKLSAgICBzZWxmLmFzc2VydFRydWUobmVzdGVkIGlzIG5vdCBwcm90by5v
cHRpb25hbF9uZXN0ZWRfbWVzc2FnZSkKLSAgICBuZXN0ZWQuYmIgPSAyMwotICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShub3QgcHJvdG8uSGFzRmllbGQoJ29wdGlvbmFsX25lc3RlZF9tZXNzYWdlJykpCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5iYikK
LQotICBkZWYgdGVzdERpc2Nvbm5lY3RpbmdOZXN0ZWRNZXNzYWdlQmVmb3JlR2V0dGluZ0ZpZWxk
KHNlbGYpOgotICAgIHByb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgc2Vs
Zi5hc3NlcnRUcnVlKG5vdCBwcm90by5IYXNGaWVsZCgnb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Un
KSkKLSAgICBwcm90by5DbGVhckZpZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZScpCi0gICAg
c2VsZi5hc3NlcnRUcnVlKG5vdCBwcm90by5IYXNGaWVsZCgnb3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UnKSkKLQotICBkZWYgdGVzdERpc2Nvbm5lY3RpbmdOZXN0ZWRNZXNzYWdlQWZ0ZXJNZXJnZShz
ZWxmKToKLSAgICAjIFRoaXMgdGVzdCBleGVyY2lzZXMgdGhlIGNvZGUgcGF0aCB0aGF0IGRvZXMg
bm90IHVzZSBSZWxlYXNlTWVzc2FnZSgpLgotICAgICMgVGhlIHVuZGVybHlpbmcgZmVhciBpcyB0
aGF0IGlmIHdlIHVzZSBSZWxlYXNlTWVzc2FnZSgpIGluY29ycmVjdGx5LAotICAgICMgd2Ugd2ls
bCBoYXZlIG1lbW9yeSBsZWFrcy4gIEl0J3MgaGFyZCB0byBjaGVjayB0aGF0IHRoYXQgZG9lc24n
dCBoYXBwZW4sCi0gICAgIyBidXQgYXQgbGVhc3Qgd2UgY2FuIGV4ZXJjaXNlIHRoYXQgY29kZSBw
YXRoIHRvIG1ha2Ugc3VyZSBpdCB3b3Jrcy4KLSAgICBwcm90bzEgPSB1bml0dGVzdF9wYjIuVGVz
dEFsbFR5cGVzKCkKLSAgICBwcm90bzIgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAg
ICBwcm90bzIub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIgPSA1Ci0gICAgcHJvdG8xLk1lcmdl
RnJvbShwcm90bzIpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvMS5IYXNGaWVsZCgnb3B0aW9u
YWxfbmVzdGVkX21lc3NhZ2UnKSkKLSAgICBwcm90bzEuQ2xlYXJGaWVsZCgnb3B0aW9uYWxfbmVz
dGVkX21lc3NhZ2UnKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcHJvdG8xLkhhc0ZpZWxkKCdv
cHRpb25hbF9uZXN0ZWRfbWVzc2FnZScpKQotCi0gIGRlZiB0ZXN0RGlzY29ubmVjdGluZ0xhenlO
ZXN0ZWRNZXNzYWdlKHNlbGYpOgotICAgICMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyByZWxlYXNpbmcg
YSBuZXN0ZWQgbWVzc2FnZSB0aGF0IGlzIGxhenkuIFRoaXMgdGVzdAotICAgICMgb25seSBleGVy
Y2lzZXMgcmVhbCBjb2RlIGluIHRoZSBDKysgaW1wbGVtZW50YXRpb24gYXMgUHl0aG9uIGRvZXMg
bm90Ci0gICAgIyBzdXBwb3J0IGxhenkgcGFyc2luZywgYnV0IHRoZSBjdXJyZW50IEMrKyBpbXBs
ZW1lbnRhdGlvbiByZXN1bHRzIGluCi0gICAgIyBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYSBjcmFz
aC4KLSAgICBpZiBhcGlfaW1wbGVtZW50YXRpb24uVHlwZSgpICE9ICdweXRob24nOgotICAgICAg
cmV0dXJuCi0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBwcm90
by5vcHRpb25hbF9sYXp5X21lc3NhZ2UuYmIgPSA1Ci0gICAgcHJvdG8uQ2xlYXJGaWVsZCgnb3B0
aW9uYWxfbGF6eV9tZXNzYWdlJykKLSAgICBkZWwgcHJvdG8KLSAgICBnYy5jb2xsZWN0KCkKLQot
ICBkZWYgdGVzdEhhc0JpdHNXaGVuTW9kaWZ5aW5nUmVwZWF0ZWRGaWVsZHMoc2VsZik6Ci0gICAg
IyBUZXN0IG5lc3Rpbmcgd2hlbiB3ZSBhZGQgYW4gZWxlbWVudCB0byBhIHJlcGVhdGVkIGZpZWxk
IGluIGEgc3VibWVzc2FnZS4KLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0TmVzdGVkTWVz
c2FnZUhhc0JpdHMoKQotICAgIHByb3RvLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLm5lc3RlZG1l
c3NhZ2VfcmVwZWF0ZWRfaW50MzIuYXBwZW5kKDUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAg
ICAgICAgWzVdLCBwcm90by5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5uZXN0ZWRtZXNzYWdlX3Jl
cGVhdGVkX2ludDMyKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5IYXNGaWVsZCgnb3B0aW9u
YWxfbmVzdGVkX21lc3NhZ2UnKSkKLQotICAgICMgRG8gdGhlIHNhbWUgdGVzdCwgYnV0IHdpdGgg
YSByZXBlYXRlZCBjb21wb3NpdGUgZmllbGQgd2l0aGluIHRoZQotICAgICMgc3VibWVzc2FnZS4K
LSAgICBwcm90by5DbGVhckZpZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZScpCi0gICAgc2Vs
Zi5hc3NlcnRUcnVlKG5vdCBwcm90by5IYXNGaWVsZCgnb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Un
KSkKLSAgICBwcm90by5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5uZXN0ZWRtZXNzYWdlX3JlcGVh
dGVkX2ZvcmVpZ25tZXNzYWdlLmFkZCgpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLkhhc0Zp
ZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZScpKQotCi0gIGRlZiB0ZXN0SGFzQml0c0Zvck1h
bnlMZXZlbHNPZk5lc3Rpbmcoc2VsZik6Ci0gICAgIyBUZXN0IG5lc3RpbmcgbWFueSBsZXZlbHMg
ZGVlcC4KLSAgICByZWN1cnNpdmVfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdE11dHVhbFJlY3Vy
c2lvbkEoKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcmVjdXJzaXZlX3Byb3RvLkhhc0ZpZWxk
KCdiYicpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVjdXJzaXZlX3Byb3RvLmJiLmEuYmIu
YS5iYi5vcHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFzc2VydFRydWUobm90IHJlY3Vyc2l2ZV9w
cm90by5IYXNGaWVsZCgnYmInKSkKLSAgICByZWN1cnNpdmVfcHJvdG8uYmIuYS5iYi5hLmJiLm9w
dGlvbmFsX2ludDMyID0gNQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgcmVjdXJzaXZlX3Byb3Rv
LmJiLmEuYmIuYS5iYi5vcHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFzc2VydFRydWUocmVjdXJz
aXZlX3Byb3RvLkhhc0ZpZWxkKCdiYicpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWN1cnNpdmVf
cHJvdG8uYmIuSGFzRmllbGQoJ2EnKSkKLSAgICBzZWxmLmFzc2VydFRydWUocmVjdXJzaXZlX3By
b3RvLmJiLmEuSGFzRmllbGQoJ2JiJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHJlY3Vyc2l2ZV9w
cm90by5iYi5hLmJiLkhhc0ZpZWxkKCdhJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHJlY3Vyc2l2
ZV9wcm90by5iYi5hLmJiLmEuSGFzRmllbGQoJ2JiJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5v
dCByZWN1cnNpdmVfcHJvdG8uYmIuYS5iYi5hLmJiLkhhc0ZpZWxkKCdhJykpCi0gICAgc2VsZi5h
c3NlcnRUcnVlKHJlY3Vyc2l2ZV9wcm90by5iYi5hLmJiLmEuYmIuSGFzRmllbGQoJ29wdGlvbmFs
X2ludDMyJykpCi0KLSAgZGVmIHRlc3RTaW5ndWxhckxpc3RGaWVsZHMoc2VsZik6Ci0gICAgcHJv
dG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBwcm90by5vcHRpb25hbF9maXhl
ZDMyID0gMQotICAgIHByb3RvLm9wdGlvbmFsX2ludDMyID0gNQotICAgIHByb3RvLm9wdGlvbmFs
X3N0cmluZyA9ICdmb28nCi0gICAgIyBBY2Nlc3Mgc3ViLW1lc3NhZ2UgYnV0IGRvbid0IHNldCBp
dCB5ZXQuCi0gICAgbmVzdGVkX21lc3NhZ2UgPSBwcm90by5vcHRpb25hbF9uZXN0ZWRfbWVzc2Fn
ZQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICBbIChwcm90by5ERVNDUklQVE9SLmZpZWxk
c19ieV9uYW1lWydvcHRpb25hbF9pbnQzMicgIF0sIDUpLAotICAgICAgICAocHJvdG8uREVTQ1JJ
UFRPUi5maWVsZHNfYnlfbmFtZVsnb3B0aW9uYWxfZml4ZWQzMiddLCAxKSwKLSAgICAgICAgKHBy
b3RvLkRFU0NSSVBUT1IuZmllbGRzX2J5X25hbWVbJ29wdGlvbmFsX3N0cmluZycgXSwgJ2Zvbycp
IF0sCi0gICAgICBwcm90by5MaXN0RmllbGRzKCkpCi0KLSAgICBwcm90by5vcHRpb25hbF9uZXN0
ZWRfbWVzc2FnZS5iYiA9IDEyMwotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICBbIChwcm90
by5ERVNDUklQVE9SLmZpZWxkc19ieV9uYW1lWydvcHRpb25hbF9pbnQzMicgIF0sIDUpLAotICAg
ICAgICAocHJvdG8uREVTQ1JJUFRPUi5maWVsZHNfYnlfbmFtZVsnb3B0aW9uYWxfZml4ZWQzMidd
LCAxKSwKLSAgICAgICAgKHByb3RvLkRFU0NSSVBUT1IuZmllbGRzX2J5X25hbWVbJ29wdGlvbmFs
X3N0cmluZycgXSwgJ2ZvbycpLAotICAgICAgICAocHJvdG8uREVTQ1JJUFRPUi5maWVsZHNfYnlf
bmFtZVsnb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UnIF0sCi0gICAgICAgICAgICAgbmVzdGVkX21l
c3NhZ2UpIF0sCi0gICAgICBwcm90by5MaXN0RmllbGRzKCkpCi0KLSAgZGVmIHRlc3RSZXBlYXRl
ZExpc3RGaWVsZHMoc2VsZik6Ci0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVz
KCkKLSAgICBwcm90by5yZXBlYXRlZF9maXhlZDMyLmFwcGVuZCgxKQotICAgIHByb3RvLnJlcGVh
dGVkX2ludDMyLmFwcGVuZCg1KQotICAgIHByb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgxMSkK
LSAgICBwcm90by5yZXBlYXRlZF9zdHJpbmcuZXh0ZW5kKFsnZm9vJywgJ2JhciddKQotICAgIHBy
b3RvLnJlcGVhdGVkX3N0cmluZy5leHRlbmQoW10pCi0gICAgcHJvdG8ucmVwZWF0ZWRfc3RyaW5n
LmFwcGVuZCgnYmF6JykKLSAgICBwcm90by5yZXBlYXRlZF9zdHJpbmcuZXh0ZW5kKHN0cih4KSBm
b3IgeCBpbiByYW5nZSgyKSkKLSAgICBwcm90by5vcHRpb25hbF9pbnQzMiA9IDIxCi0gICAgcHJv
dG8ucmVwZWF0ZWRfYm9vbCAgIyBBY2Nlc3MgYnV0IGRvbid0IHNldCBhbnl0aGluZzsgc2hvdWxk
IG5vdCBiZSBsaXN0ZWQuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgIFsgKHByb3RvLkRF
U0NSSVBUT1IuZmllbGRzX2J5X25hbWVbJ29wdGlvbmFsX2ludDMyJyAgXSwgMjEpLAotICAgICAg
ICAocHJvdG8uREVTQ1JJUFRPUi5maWVsZHNfYnlfbmFtZVsncmVwZWF0ZWRfaW50MzInICBdLCBb
NSwgMTFdKSwKLSAgICAgICAgKHByb3RvLkRFU0NSSVBUT1IuZmllbGRzX2J5X25hbWVbJ3JlcGVh
dGVkX2ZpeGVkMzInXSwgWzFdKSwKLSAgICAgICAgKHByb3RvLkRFU0NSSVBUT1IuZmllbGRzX2J5
X25hbWVbJ3JlcGVhdGVkX3N0cmluZycgXSwKLSAgICAgICAgICBbJ2ZvbycsICdiYXInLCAnYmF6
JywgJzAnLCAnMSddKSBdLAotICAgICAgcHJvdG8uTGlzdEZpZWxkcygpKQotCi0gIGRlZiB0ZXN0
U2luZ3VsYXJMaXN0RXh0ZW5zaW9ucyhzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5U
ZXN0QWxsRXh0ZW5zaW9ucygpCi0gICAgcHJvdG8uRXh0ZW5zaW9uc1t1bml0dGVzdF9wYjIub3B0
aW9uYWxfZml4ZWQzMl9leHRlbnNpb25dID0gMQotICAgIHByb3RvLkV4dGVuc2lvbnNbdW5pdHRl
c3RfcGIyLm9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbiAgXSA9IDUKLSAgICBwcm90by5FeHRlbnNp
b25zW3VuaXR0ZXN0X3BiMi5vcHRpb25hbF9zdHJpbmdfZXh0ZW5zaW9uIF0gPSAnZm9vJwotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICBbICh1bml0dGVzdF9wYjIub3B0aW9uYWxfaW50MzJf
ZXh0ZW5zaW9uICAsIDUpLAotICAgICAgICAodW5pdHRlc3RfcGIyLm9wdGlvbmFsX2ZpeGVkMzJf
ZXh0ZW5zaW9uLCAxKSwKLSAgICAgICAgKHVuaXR0ZXN0X3BiMi5vcHRpb25hbF9zdHJpbmdfZXh0
ZW5zaW9uICwgJ2ZvbycpIF0sCi0gICAgICBwcm90by5MaXN0RmllbGRzKCkpCi0KLSAgZGVmIHRl
c3RSZXBlYXRlZExpc3RFeHRlbnNpb25zKHNlbGYpOgotICAgIHByb3RvID0gdW5pdHRlc3RfcGIy
LlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICBwcm90by5FeHRlbnNpb25zW3VuaXR0ZXN0X3BiMi5y
ZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbl0uYXBwZW5kKDEpCi0gICAgcHJvdG8uRXh0ZW5zaW9u
c1t1bml0dGVzdF9wYjIucmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uICBdLmFwcGVuZCg1KQotICAg
IHByb3RvLkV4dGVuc2lvbnNbdW5pdHRlc3RfcGIyLnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbiAg
XS5hcHBlbmQoMTEpCi0gICAgcHJvdG8uRXh0ZW5zaW9uc1t1bml0dGVzdF9wYjIucmVwZWF0ZWRf
c3RyaW5nX2V4dGVuc2lvbiBdLmFwcGVuZCgnZm9vJykKLSAgICBwcm90by5FeHRlbnNpb25zW3Vu
aXR0ZXN0X3BiMi5yZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uIF0uYXBwZW5kKCdiYXInKQotICAg
IHByb3RvLkV4dGVuc2lvbnNbdW5pdHRlc3RfcGIyLnJlcGVhdGVkX3N0cmluZ19leHRlbnNpb24g
XS5hcHBlbmQoJ2JheicpCi0gICAgcHJvdG8uRXh0ZW5zaW9uc1t1bml0dGVzdF9wYjIub3B0aW9u
YWxfaW50MzJfZXh0ZW5zaW9uICBdID0gMjEKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAg
WyAodW5pdHRlc3RfcGIyLm9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbiAgLCAyMSksCi0gICAgICAg
ICh1bml0dGVzdF9wYjIucmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uICAsIFs1LCAxMV0pLAotICAg
ICAgICAodW5pdHRlc3RfcGIyLnJlcGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uLCBbMV0pLAotICAg
ICAgICAodW5pdHRlc3RfcGIyLnJlcGVhdGVkX3N0cmluZ19leHRlbnNpb24gLCBbJ2ZvbycsICdi
YXInLCAnYmF6J10pIF0sCi0gICAgICBwcm90by5MaXN0RmllbGRzKCkpCi0KLSAgZGVmIHRlc3RM
aXN0RmllbGRzQW5kRXh0ZW5zaW9ucyhzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5U
ZXN0RmllbGRPcmRlcmluZ3MoKQotICAgIHRlc3RfdXRpbC5TZXRBbGxGaWVsZHNBbmRFeHRlbnNp
b25zKHByb3RvKQotICAgIHVuaXR0ZXN0X3BiMi5teV9leHRlbnNpb25faW50Ci0gICAgc2VsZi5h
c3NlcnRFcXVhbCgKLSAgICAgIFsgKHByb3RvLkRFU0NSSVBUT1IuZmllbGRzX2J5X25hbWVbJ215
X2ludCcgICBdLCAxKSwKLSAgICAgICAgKHVuaXR0ZXN0X3BiMi5teV9leHRlbnNpb25faW50ICAg
ICAgICAgICAgICAgLCAyMyksCi0gICAgICAgIChwcm90by5ERVNDUklQVE9SLmZpZWxkc19ieV9u
YW1lWydteV9zdHJpbmcnXSwgJ2ZvbycpLAotICAgICAgICAodW5pdHRlc3RfcGIyLm15X2V4dGVu
c2lvbl9zdHJpbmcgICAgICAgICAgICAsICdiYXInKSwKLSAgICAgICAgKHByb3RvLkRFU0NSSVBU
T1IuZmllbGRzX2J5X25hbWVbJ215X2Zsb2F0JyBdLCAxLjApIF0sCi0gICAgICBwcm90by5MaXN0
RmllbGRzKCkpCi0KLSAgZGVmIHRlc3REZWZhdWx0VmFsdWVzKHNlbGYpOgotICAgIHByb3RvID0g
dW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90
by5vcHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLm9wdGlvbmFs
X2ludDY0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ub3B0aW9uYWxfdWludDMyKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ub3B0aW9uYWxfdWludDY0KQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMCwgcHJvdG8ub3B0aW9uYWxfc2ludDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMCwgcHJvdG8ub3B0aW9uYWxfc2ludDY0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJv
dG8ub3B0aW9uYWxfZml4ZWQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLm9wdGlv
bmFsX2ZpeGVkNjQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5vcHRpb25hbF9zZml4
ZWQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLm9wdGlvbmFsX3NmaXhlZDY0KQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMC4wLCBwcm90by5vcHRpb25hbF9mbG9hdCkKLSAgICBzZWxm
LmFzc2VydEVxdWFsKDAuMCwgcHJvdG8ub3B0aW9uYWxfZG91YmxlKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoRmFsc2UsIHByb3RvLm9wdGlvbmFsX2Jvb2wpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgn
JywgcHJvdG8ub3B0aW9uYWxfc3RyaW5nKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBwcm90
by5vcHRpb25hbF9ieXRlcykKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDEsIHByb3RvLmRlZmF1
bHRfaW50MzIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgcHJvdG8uZGVmYXVsdF9pbnQ2NCkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKDQzLCBwcm90by5kZWZhdWx0X3VpbnQzMikKLSAgICBzZWxm
LmFzc2VydEVxdWFsKDQ0LCBwcm90by5kZWZhdWx0X3VpbnQ2NCkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKC00NSwgcHJvdG8uZGVmYXVsdF9zaW50MzIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg0Niwg
cHJvdG8uZGVmYXVsdF9zaW50NjQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg0NywgcHJvdG8uZGVm
YXVsdF9maXhlZDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDgsIHByb3RvLmRlZmF1bHRfZml4
ZWQ2NCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDQ5LCBwcm90by5kZWZhdWx0X3NmaXhlZDMyKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTUwLCBwcm90by5kZWZhdWx0X3NmaXhlZDY0KQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoNTEuNSwgcHJvdG8uZGVmYXVsdF9mbG9hdCkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDUyZTMsIHByb3RvLmRlZmF1bHRfZG91YmxlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
VHJ1ZSwgcHJvdG8uZGVmYXVsdF9ib29sKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2hlbGxvJywg
cHJvdG8uZGVmYXVsdF9zdHJpbmcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChiJ3dvcmxkJywgcHJv
dG8uZGVmYXVsdF9ieXRlcykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5UZXN0
QWxsVHlwZXMuQkFSLCBwcm90by5kZWZhdWx0X25lc3RlZF9lbnVtKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwodW5pdHRlc3RfcGIyLkZPUkVJR05fQkFSLCBwcm90by5kZWZhdWx0X2ZvcmVpZ25fZW51
bSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X2ltcG9ydF9wYjIuSU1QT1JUX0JBUiwK
LSAgICAgICAgICAgICAgICAgICAgIHByb3RvLmRlZmF1bHRfaW1wb3J0X2VudW0pCi0KLSAgICBw
cm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0RXh0cmVtZURlZmF1bHRWYWx1ZXMoKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwodSdcdTEyMzQnLCBwcm90by51dGY4X3N0cmluZykKLQotICBkZWYgdGVzdEhh
c0ZpZWxkV2l0aFVua25vd25GaWVsZE5hbWUoc2VsZik6Ci0gICAgcHJvdG8gPSB1bml0dGVzdF9w
YjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwcm90
by5IYXNGaWVsZCwgJ25vbmV4aXN0ZW50X2ZpZWxkJykKLQotICBkZWYgdGVzdENsZWFyRmllbGRX
aXRoVW5rbm93bkZpZWxkTmFtZShzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0
QWxsVHlwZXMoKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHByb3RvLkNsZWFy
RmllbGQsICdub25leGlzdGVudF9maWVsZCcpCi0KLSAgZGVmIHRlc3RDbGVhclJlbW92ZXNDaGls
ZHJlbihzZWxmKToKLSAgICAjIE1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGltcGxlbWVudGF0
aW9uIGJ1Z3MgdGhhdCBhcmUgb25seSBwYXJ0aWFsbHkKLSAgICAjIGNsZWFyaW5nIHRoZSBtZXNz
YWdlICh3aGljaCBjYW4gaGFwcGVuIGluIHRoZSBtb3JlIGNvbXBsZXggQysrCi0gICAgIyBpbXBs
ZW1lbnRhdGlvbiB3aGljaCBoYXMgcGFyYWxsZWwgbWVzc2FnZSBsaXN0cykuCi0gICAgcHJvdG8g
PSB1bml0dGVzdF9wYjIuVGVzdFJlcXVpcmVkRm9yZWlnbigpCi0gICAgZm9yIGkgaW4gcmFuZ2Uo
MTApOgotICAgICAgcHJvdG8ucmVwZWF0ZWRfbWVzc2FnZS5hZGQoKQotICAgIHByb3RvMiA9IHVu
aXR0ZXN0X3BiMi5UZXN0UmVxdWlyZWRGb3JlaWduKCkKLSAgICBwcm90by5Db3B5RnJvbShwcm90
bzIpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBwcm90by5yZXBl
YXRlZF9tZXNzYWdlWzVdKQotCi0gIGRlZiB0ZXN0RGlzYWxsb3dlZEFzc2lnbm1lbnRzKHNlbGYp
OgotICAgICMgSXQncyBpbGxlZ2FsIHRvIGFzc2lnbiB2YWx1ZXMgZGlyZWN0bHkgdG8gcmVwZWF0
ZWQgZmllbGRzCi0gICAgIyBvciB0byBub25yZXBlYXRlZCBjb21wb3NpdGUgZmllbGRzLiAgRW5z
dXJlIHRoYXQgdGhpcyBmYWlscy4KLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlw
ZXMoKQotICAgICMgUmVwZWF0ZWQgZmllbGRzLgotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJp
YnV0ZUVycm9yLCBzZXRhdHRyLCBwcm90bywgJ3JlcGVhdGVkX2ludDMyJywgMTApCi0gICAgIyBM
aXN0cyBzaG91bGRuJ3Qgd29yaywgZWl0aGVyLgotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJp
YnV0ZUVycm9yLCBzZXRhdHRyLCBwcm90bywgJ3JlcGVhdGVkX2ludDMyJywgWzEwXSkKLSAgICAj
IENvbXBvc2l0ZSBmaWVsZHMuCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3Is
IHNldGF0dHIsIHByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25hbF9uZXN0ZWRf
bWVzc2FnZScsIDIzKQotICAgICMgQXNzaWdubWVudCB0byBhIHJlcGVhdGVkIG5lc3RlZCBtZXNz
YWdlIGZpZWxkIHdpdGhvdXQgc3BlY2lmeWluZwotICAgICMgdGhlIGluZGV4IGluIHRoZSBhcnJh
eSBvZiBuZXN0ZWQgbWVzc2FnZXMuCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJy
b3IsIHNldGF0dHIsIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICdiYicsIDM0KQotICAgICMgQXNzaWdubWVudCB0byBhbiBhdHRyaWJ1dGUgb2Yg
YSByZXBlYXRlZCBmaWVsZC4KLSAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwg
c2V0YXR0ciwgcHJvdG8ucmVwZWF0ZWRfZmxvYXQsCi0gICAgICAgICAgICAgICAgICAgICAgJ3Nv
bWVfYXR0cmlidXRlJywgMzQpCi0gICAgIyBwcm90by5ub25leGlzdGVudF9maWVsZCA9IDIzIHNo
b3VsZCBmYWlsIGFzIHdlbGwuCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3Is
IHNldGF0dHIsIHByb3RvLCAnbm9uZXhpc3RlbnRfZmllbGQnLCAyMykKLQotICBkZWYgdGVzdFNp
bmdsZVNjYWxhclR5cGVTYWZldHkoc2VsZik6Ci0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVz
dEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHBy
b3RvLCAnb3B0aW9uYWxfaW50MzInLCAxLjEpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVy
cm9yLCBzZXRhdHRyLCBwcm90bywgJ29wdGlvbmFsX2ludDMyJywgJ2ZvbycpCi0gICAgc2VsZi5h
c3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBwcm90bywgJ29wdGlvbmFsX3N0cmluZycs
IDEwKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgcHJvdG8sICdv
cHRpb25hbF9ieXRlcycsIDEwKQotCi0gIGRlZiB0ZXN0SW50ZWdlclR5cGVzKHNlbGYpOgotICAg
IGRlZiBUZXN0R2V0QW5kRGVzZXJpYWxpemUoZmllbGRfbmFtZSwgdmFsdWUsIGV4cGVjdGVkX3R5
cGUpOgotICAgICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICAgIHNl
dGF0dHIocHJvdG8sIGZpZWxkX25hbWUsIHZhbHVlKQotICAgICAgc2VsZi5hc3NlcnRJc0luc3Rh
bmNlKGdldGF0dHIocHJvdG8sIGZpZWxkX25hbWUpLCBleHBlY3RlZF90eXBlKQotICAgICAgcHJv
dG8yID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgICBwcm90bzIuUGFyc2VGcm9t
U3RyaW5nKHByb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCi0gICAgICBzZWxmLmFzc2VydElzSW5z
dGFuY2UoZ2V0YXR0cihwcm90bzIsIGZpZWxkX25hbWUpLCBleHBlY3RlZF90eXBlKQotCi0gICAg
VGVzdEdldEFuZERlc2VyaWFsaXplKCdvcHRpb25hbF9pbnQzMicsIDEsIGludCkKLSAgICBUZXN0
R2V0QW5kRGVzZXJpYWxpemUoJ29wdGlvbmFsX2ludDMyJywgMSA8PCAzMCwgaW50KQotICAgIFRl
c3RHZXRBbmREZXNlcmlhbGl6ZSgnb3B0aW9uYWxfdWludDMyJywgMSA8PCAzMCwgaW50KQotICAg
IHRyeToKLSAgICAgIGludGVnZXJfNjQgPSBsb25nCi0gICAgZXhjZXB0IE5hbWVFcnJvcjogIyBQ
eXRob24zCi0gICAgICBpbnRlZ2VyXzY0ID0gaW50Ci0gICAgaWYgc3RydWN0LmNhbGNzaXplKCdM
JykgPT0gNDoKLSAgICAgICMgUHl0aG9uIG9ubHkgaGFzIHNpZ25lZCBpbnRzLCBzbyAzMi1iaXQg
cHl0aG9uIGNhbid0IGZpdCBhbiB1aW50MzIKLSAgICAgICMgaW4gYW4gaW50LgotICAgICAgVGVz
dEdldEFuZERlc2VyaWFsaXplKCdvcHRpb25hbF91aW50MzInLCAxIDw8IDMxLCBsb25nKQotICAg
IGVsc2U6Ci0gICAgICAjIDY0LWJpdCBweXRob24gY2FuIGZpdCB1aW50MzIgaW5zaWRlIGFuIGlu
dAotICAgICAgVGVzdEdldEFuZERlc2VyaWFsaXplKCdvcHRpb25hbF91aW50MzInLCAxIDw8IDMx
LCBpbnQpCi0gICAgVGVzdEdldEFuZERlc2VyaWFsaXplKCdvcHRpb25hbF9pbnQ2NCcsIDEgPDwg
MzAsIGludGVnZXJfNjQpCi0gICAgVGVzdEdldEFuZERlc2VyaWFsaXplKCdvcHRpb25hbF9pbnQ2
NCcsIDEgPDwgNjAsIGludGVnZXJfNjQpCi0gICAgVGVzdEdldEFuZERlc2VyaWFsaXplKCdvcHRp
b25hbF91aW50NjQnLCAxIDw8IDMwLCBpbnRlZ2VyXzY0KQotICAgIFRlc3RHZXRBbmREZXNlcmlh
bGl6ZSgnb3B0aW9uYWxfdWludDY0JywgMSA8PCA2MCwgaW50ZWdlcl82NCkKLQotICBkZWYgdGVz
dFNpbmdsZVNjYWxhckJvdW5kc0NoZWNraW5nKHNlbGYpOgotICAgIGRlZiBUZXN0TWluQW5kTWF4
SW50ZWdlcnMoZmllbGRfbmFtZSwgZXhwZWN0ZWRfbWluLCBleHBlY3RlZF9tYXgpOgotICAgICAg
cGIgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICAgIHNldGF0dHIocGIsIGZpZWxk
X25hbWUsIGV4cGVjdGVkX21pbikKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbWlu
LCBnZXRhdHRyKHBiLCBmaWVsZF9uYW1lKSkKLSAgICAgIHNldGF0dHIocGIsIGZpZWxkX25hbWUs
IGV4cGVjdGVkX21heCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbWF4LCBnZXRh
dHRyKHBiLCBmaWVsZF9uYW1lKSkKLSAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3Is
IHNldGF0dHIsIHBiLCBmaWVsZF9uYW1lLCBleHBlY3RlZF9taW4gLSAxKQotICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgcGIsIGZpZWxkX25hbWUsIGV4cGVjdGVk
X21heCArIDEpCi0KLSAgICBUZXN0TWluQW5kTWF4SW50ZWdlcnMoJ29wdGlvbmFsX2ludDMyJywg
LSgxIDw8IDMxKSwgKDEgPDwgMzEpIC0gMSkKLSAgICBUZXN0TWluQW5kTWF4SW50ZWdlcnMoJ29w
dGlvbmFsX3VpbnQzMicsIDAsIDB4ZmZmZmZmZmYpCi0gICAgVGVzdE1pbkFuZE1heEludGVnZXJz
KCdvcHRpb25hbF9pbnQ2NCcsIC0oMSA8PCA2MyksICgxIDw8IDYzKSAtIDEpCi0gICAgVGVzdE1p
bkFuZE1heEludGVnZXJzKCdvcHRpb25hbF91aW50NjQnLCAwLCAweGZmZmZmZmZmZmZmZmZmZmYp
Ci0KLSAgICBwYiA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHBiLm9wdGlvbmFs
X25lc3RlZF9lbnVtID0gMQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcGIub3B0aW9uYWxfbmVz
dGVkX2VudW0pCi0KLSAgZGVmIHRlc3RSZXBlYXRlZFNjYWxhclR5cGVTYWZldHkoc2VsZik6Ci0g
ICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2VydFJh
aXNlcyhUeXBlRXJyb3IsIHByb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCwgMS4xKQotICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJvdG8ucmVwZWF0ZWRfaW50MzIuYXBwZW5kLCAn
Zm9vJykKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByb3RvLnJlcGVhdGVkX3N0
cmluZywgMTApCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcm90by5yZXBlYXRl
ZF9ieXRlcywgMTApCi0KLSAgICBwcm90by5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMTApCi0gICAg
cHJvdG8ucmVwZWF0ZWRfaW50MzJbMF0gPSAyMwotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4
RXJyb3IsIHByb3RvLnJlcGVhdGVkX2ludDMyLl9fc2V0aXRlbV9fLCA1MDAsIDIzKQotICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJvdG8ucmVwZWF0ZWRfaW50MzIuX19zZXRpdGVt
X18sIDAsICdhYmMnKQotCi0gICAgIyBSZXBlYXRlZCBlbnVtcyB0ZXN0cy4KLSAgICAjcHJvdG8u
cmVwZWF0ZWRfbmVzdGVkX2VudW0uYXBwZW5kKDApCi0KLSAgZGVmIHRlc3RTaW5nbGVTY2FsYXJH
ZXR0ZXJzQW5kU2V0dGVycyhzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxs
VHlwZXMoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ub3B0aW9uYWxfaW50MzIpCi0g
ICAgcHJvdG8ub3B0aW9uYWxfaW50MzIgPSAxCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwcm90
by5vcHRpb25hbF9pbnQzMikKLQotICAgIHByb3RvLm9wdGlvbmFsX3VpbnQ2NCA9IDB4ZmZmZmZm
ZmZmZmZmCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgweGZmZmZmZmZmZmZmZiwgcHJvdG8ub3B0aW9u
YWxfdWludDY0KQotICAgIHByb3RvLm9wdGlvbmFsX3VpbnQ2NCA9IDB4ZmZmZmZmZmZmZmZmZmZm
ZgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmZmZmZmZmZmZmZmZmZmZmLCBwcm90by5vcHRpb25h
bF91aW50NjQpCi0gICAgIyBUT0RPKHJvYmluc29uKTogVGVzdCBhbGwgb3RoZXIgc2NhbGFyIGZp
ZWxkIHR5cGVzLgotCi0gIGRlZiB0ZXN0U2luZ2xlU2NhbGFyQ2xlYXJGaWVsZChzZWxmKToKLSAg
ICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgICMgU2hvdWxkIGJlIGFs
bG93ZWQgdG8gY2xlYXIgc29tZXRoaW5nIHRoYXQncyBub3QgdGhlcmUgKGEgbm8tb3ApLgotICAg
IHByb3RvLkNsZWFyRmllbGQoJ29wdGlvbmFsX2ludDMyJykKLSAgICBwcm90by5vcHRpb25hbF9p
bnQzMiA9IDEKLSAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uSGFzRmllbGQoJ29wdGlvbmFsX2lu
dDMyJykpCi0gICAgcHJvdG8uQ2xlYXJGaWVsZCgnb3B0aW9uYWxfaW50MzInKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMCwgcHJvdG8ub3B0aW9uYWxfaW50MzIpCi0gICAgc2VsZi5hc3NlcnRUcnVl
KG5vdCBwcm90by5IYXNGaWVsZCgnb3B0aW9uYWxfaW50MzInKSkKLSAgICAjIFRPRE8ocm9iaW5z
b24pOiBUZXN0IGFsbCBvdGhlciBzY2FsYXIgZmllbGQgdHlwZXMuCi0KLSAgZGVmIHRlc3RFbnVt
cyhzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8uRk9PKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdW5p
dHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5GT08pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBwcm90
by5CQVIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVz
LkJBUikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLkJBWikKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDMsIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuQkFaKQotCi0gIGRlZiB0ZXN0RW51
bV9OYW1lKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZPUkVJR05fRk9PJywKLSAgICAg
ICAgICAgICAgICAgICAgIHVuaXR0ZXN0X3BiMi5Gb3JlaWduRW51bS5OYW1lKHVuaXR0ZXN0X3Bi
Mi5GT1JFSUdOX0ZPTykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnRk9SRUlHTl9CQVInLAotICAg
ICAgICAgICAgICAgICAgICAgdW5pdHRlc3RfcGIyLkZvcmVpZ25FbnVtLk5hbWUodW5pdHRlc3Rf
cGIyLkZPUkVJR05fQkFSKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdGT1JFSUdOX0JBWicsCi0g
ICAgICAgICAgICAgICAgICAgICB1bml0dGVzdF9wYjIuRm9yZWlnbkVudW0uTmFtZSh1bml0dGVz
dF9wYjIuRk9SRUlHTl9CQVopKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0g
ICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3RfcGIyLkZvcmVpZ25FbnVtLk5hbWUsIDExMzEy
KQotCi0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKCdGT08nLAotICAgICAgICAgICAgICAgICAgICAgcHJvdG8uTmVzdGVkRW51bS5O
YW1lKHByb3RvLkZPTykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnRk9PJywKLSAgICAgICAgICAg
ICAgICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVzdGVkRW51bS5OYW1lKHByb3Rv
LkZPTykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnQkFSJywKLSAgICAgICAgICAgICAgICAgICAg
IHByb3RvLk5lc3RlZEVudW0uTmFtZShwcm90by5CQVIpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J0JBUicsCi0gICAgICAgICAgICAgICAgICAgICB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLk5l
c3RlZEVudW0uTmFtZShwcm90by5CQVIpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0JBWicsCi0g
ICAgICAgICAgICAgICAgICAgICBwcm90by5OZXN0ZWRFbnVtLk5hbWUocHJvdG8uQkFaKSkKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKCdCQVonLAotICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Rf
cGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLk5hbWUocHJvdG8uQkFaKSkKLSAgICBzZWxmLmFz
c2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIHByb3RvLk5lc3Rl
ZEVudW0uTmFtZSwgMTEzMTIpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKLSAg
ICAgICAgICAgICAgICAgICAgICB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0u
TmFtZSwgMTEzMTIpCi0KLSAgZGVmIHRlc3RFbnVtX1ZhbHVlKHNlbGYpOgotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwodW5pdHRlc3RfcGIyLkZPUkVJR05fRk9PLAotICAgICAgICAgICAgICAgICAgICAg
dW5pdHRlc3RfcGIyLkZvcmVpZ25FbnVtLlZhbHVlKCdGT1JFSUdOX0ZPTycpKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLkZPUkVJR05fQkFSLAotICAgICAgICAgICAgICAgICAg
ICAgdW5pdHRlc3RfcGIyLkZvcmVpZ25FbnVtLlZhbHVlKCdGT1JFSUdOX0JBUicpKQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLkZPUkVJR05fQkFaLAotICAgICAgICAgICAgICAg
ICAgICAgdW5pdHRlc3RfcGIyLkZvcmVpZ25FbnVtLlZhbHVlKCdGT1JFSUdOX0JBWicpKQotICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgdW5p
dHRlc3RfcGIyLkZvcmVpZ25FbnVtLlZhbHVlLCAnRk8nKQotCi0gICAgcHJvdG8gPSB1bml0dGVz
dF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvLkZPTywKLSAg
ICAgICAgICAgICAgICAgICAgIHByb3RvLk5lc3RlZEVudW0uVmFsdWUoJ0ZPTycpKQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwocHJvdG8uRk9PLAotICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Rf
cGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLlZhbHVlKCdGT08nKSkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKHByb3RvLkJBUiwKLSAgICAgICAgICAgICAgICAgICAgIHByb3RvLk5lc3RlZEVudW0u
VmFsdWUoJ0JBUicpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uQkFSLAotICAgICAgICAg
ICAgICAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLlZhbHVlKCdC
QVInKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvLkJBWiwKLSAgICAgICAgICAgICAgICAg
ICAgIHByb3RvLk5lc3RlZEVudW0uVmFsdWUoJ0JBWicpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cHJvdG8uQkFaLAotICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBl
cy5OZXN0ZWRFbnVtLlZhbHVlKCdCQVonKSkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yLAotICAgICAgICAgICAgICAgICAgICAgIHByb3RvLk5lc3RlZEVudW0uVmFsdWUsICdGb28n
KQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtLlZhbHVlLCAnRm9vJykKLQot
ICBkZWYgdGVzdEVudW1fS2V5c0FuZFZhbHVlcyhzZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFs
KFsnRk9SRUlHTl9GT08nLCAnRk9SRUlHTl9CQVInLCAnRk9SRUlHTl9CQVonXSwKLSAgICAgICAg
ICAgICAgICAgICAgIGxpc3QodW5pdHRlc3RfcGIyLkZvcmVpZ25FbnVtLmtleXMoKSkpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbChbNCwgNSwgNl0sCi0gICAgICAgICAgICAgICAgICAgICBsaXN0KHVu
aXR0ZXN0X3BiMi5Gb3JlaWduRW51bS52YWx1ZXMoKSkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChb
KCdGT1JFSUdOX0ZPTycsIDQpLCAoJ0ZPUkVJR05fQkFSJywgNSksCi0gICAgICAgICAgICAgICAg
ICAgICAgKCdGT1JFSUdOX0JBWicsIDYpXSwKLSAgICAgICAgICAgICAgICAgICAgIGxpc3QodW5p
dHRlc3RfcGIyLkZvcmVpZ25FbnVtLml0ZW1zKCkpKQotCi0gICAgcHJvdG8gPSB1bml0dGVzdF9w
YjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKFsnRk9PJywgJ0JBUicsICdC
QVonLCAnTkVHJ10sIGxpc3QocHJvdG8uTmVzdGVkRW51bS5rZXlzKCkpKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoWzEsIDIsIDMsIC0xXSwgbGlzdChwcm90by5OZXN0ZWRFbnVtLnZhbHVlcygpKSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ0ZPTycsIDEpLCAoJ0JBUicsIDIpLCAoJ0JBWicsIDMp
LCAoJ05FRycsIC0xKV0sCi0gICAgICAgICAgICAgICAgICAgICBsaXN0KHByb3RvLk5lc3RlZEVu
dW0uaXRlbXMoKSkpCi0KLSAgZGVmIHRlc3RSZXBlYXRlZFNjYWxhcnMoc2VsZik6Ci0gICAgcHJv
dG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShu
b3QgcHJvdG8ucmVwZWF0ZWRfaW50MzIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocHJv
dG8ucmVwZWF0ZWRfaW50MzIpKQotICAgIHByb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCg1KQot
ICAgIHByb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgxMCkKLSAgICBwcm90by5yZXBlYXRlZF9p
bnQzMi5hcHBlbmQoMTUpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLnJlcGVhdGVkX2ludDMy
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbGVuKHByb3RvLnJlcGVhdGVkX2ludDMyKSkKLQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzUsIDEwLCAxNV0sIHByb3RvLnJlcGVhdGVkX2ludDMyKQot
Ci0gICAgIyBUZXN0IHNpbmdsZSByZXRyaWV2YWwuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBw
cm90by5yZXBlYXRlZF9pbnQzMlswXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDE1LCBwcm90by5y
ZXBlYXRlZF9pbnQzMlstMV0pCi0gICAgIyBUZXN0IG91dC1vZi1ib3VuZHMgaW5kaWNlcy4KLSAg
ICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBwcm90by5yZXBlYXRlZF9pbnQzMi5fX2dl
dGl0ZW1fXywgMTIzNCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBwcm90by5y
ZXBlYXRlZF9pbnQzMi5fX2dldGl0ZW1fXywgLTEyMzQpCi0gICAgIyBUZXN0IGluY29ycmVjdCB0
eXBlcyBwYXNzZWQgdG8gX19nZXRpdGVtX18uCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVy
cm9yLCBwcm90by5yZXBlYXRlZF9pbnQzMi5fX2dldGl0ZW1fXywgJ2ZvbycpCi0gICAgc2VsZi5h
c3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcm90by5yZXBlYXRlZF9pbnQzMi5fX2dldGl0ZW1fXywg
Tm9uZSkKLQotICAgICMgVGVzdCBzaW5nbGUgYXNzaWdubWVudC4KLSAgICBwcm90by5yZXBlYXRl
ZF9pbnQzMlsxXSA9IDIwCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbNSwgMjAsIDE1XSwgcHJvdG8u
cmVwZWF0ZWRfaW50MzIpCi0KLSAgICAjIFRlc3QgaW5zZXJ0aW9uLgotICAgIHByb3RvLnJlcGVh
dGVkX2ludDMyLmluc2VydCgxLCAyNSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKFs1LCAyNSwgMjAs
IDE1XSwgcHJvdG8ucmVwZWF0ZWRfaW50MzIpCi0KLSAgICAjIFRlc3Qgc2xpY2UgcmV0cmlldmFs
LgotICAgIHByb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgzMCkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKFsyNSwgMjAsIDE1XSwgcHJvdG8ucmVwZWF0ZWRfaW50MzJbMTo0XSkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKFs1LCAyNSwgMjAsIDE1LCAzMF0sIHByb3RvLnJlcGVhdGVkX2ludDMyWzpdKQot
Ci0gICAgIyBUZXN0IHNsaWNlIGFzc2lnbm1lbnQgd2l0aCBhbiBpdGVyYXRvcgotICAgIHByb3Rv
LnJlcGVhdGVkX2ludDMyWzE6NF0gPSAoaSBmb3IgaSBpbiByYW5nZSgzKSkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKFs1LCAwLCAxLCAyLCAzMF0sIHByb3RvLnJlcGVhdGVkX2ludDMyKQotCi0gICAg
IyBUZXN0IHNsaWNlIGFzc2lnbm1lbnQuCi0gICAgcHJvdG8ucmVwZWF0ZWRfaW50MzJbMTo0XSA9
IFszNSwgNDAsIDQ1XQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzUsIDM1LCA0MCwgNDUsIDMwXSwg
cHJvdG8ucmVwZWF0ZWRfaW50MzIpCi0KLSAgICAjIFRlc3QgdGhhdCB3ZSBjYW4gdXNlIHRoZSBm
aWVsZCBhcyBhbiBpdGVyYXRvci4KLSAgICByZXN1bHQgPSBbXQotICAgIGZvciBpIGluIHByb3Rv
LnJlcGVhdGVkX2ludDMyOgotICAgICAgcmVzdWx0LmFwcGVuZChpKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoWzUsIDM1LCA0MCwgNDUsIDMwXSwgcmVzdWx0KQotCi0gICAgIyBUZXN0IHNpbmdsZSBk
ZWxldGlvbi4KLSAgICBkZWwgcHJvdG8ucmVwZWF0ZWRfaW50MzJbMl0KLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKFs1LCAzNSwgNDUsIDMwXSwgcHJvdG8ucmVwZWF0ZWRfaW50MzIpCi0KLSAgICAjIFRl
c3Qgc2xpY2UgZGVsZXRpb24uCi0gICAgZGVsIHByb3RvLnJlcGVhdGVkX2ludDMyWzI6XQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoWzUsIDM1XSwgcHJvdG8ucmVwZWF0ZWRfaW50MzIpCi0KLSAgICAj
IFRlc3QgZXh0ZW5kaW5nLgotICAgIHByb3RvLnJlcGVhdGVkX2ludDMyLmV4dGVuZChbMywgMTNd
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzUsIDM1LCAzLCAxM10sIHByb3RvLnJlcGVhdGVkX2lu
dDMyKQotCi0gICAgIyBUZXN0IGNsZWFyaW5nLgotICAgIHByb3RvLkNsZWFyRmllbGQoJ3JlcGVh
dGVkX2ludDMyJykKLSAgICBzZWxmLmFzc2VydFRydWUobm90IHByb3RvLnJlcGVhdGVkX2ludDMy
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHByb3RvLnJlcGVhdGVkX2ludDMyKSkKLQot
ICAgIHByb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MSwgcHJvdG8ucmVwZWF0ZWRfaW50MzJbLTFdKQotICAgICMgVGVzdCBhc3NpZ25tZW50IHRvIGEg
bmVnYXRpdmUgaW5kZXguCi0gICAgcHJvdG8ucmVwZWF0ZWRfaW50MzJbLTFdID0gMgotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMiwgcHJvdG8ucmVwZWF0ZWRfaW50MzJbLTFdKQotCi0gICAgIyBUZXN0
IGRlbGV0aW9uIGF0IG5lZ2F0aXZlIGluZGljZXMuCi0gICAgcHJvdG8ucmVwZWF0ZWRfaW50MzJb
Ol0gPSBbMCwgMSwgMiwgM10KLSAgICBkZWwgcHJvdG8ucmVwZWF0ZWRfaW50MzJbLTFdCi0gICAg
c2VsZi5hc3NlcnRFcXVhbChbMCwgMSwgMl0sIHByb3RvLnJlcGVhdGVkX2ludDMyKQotCi0gICAg
ZGVsIHByb3RvLnJlcGVhdGVkX2ludDMyWy0yXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzAsIDJd
LCBwcm90by5yZXBlYXRlZF9pbnQzMikKLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJy
b3IsIHByb3RvLnJlcGVhdGVkX2ludDMyLl9fZGVsaXRlbV9fLCAtMykKLSAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhJbmRleEVycm9yLCBwcm90by5yZXBlYXRlZF9pbnQzMi5fX2RlbGl0ZW1fXywgMzAw
KQotCi0gICAgZGVsIHByb3RvLnJlcGVhdGVkX2ludDMyWy0yOi0xXQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoWzJdLCBwcm90by5yZXBlYXRlZF9pbnQzMikKLQotICAgIGRlbCBwcm90by5yZXBlYXRl
ZF9pbnQzMlsxMDA6MTAwMDBdCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbMl0sIHByb3RvLnJlcGVh
dGVkX2ludDMyKQotCi0gIGRlZiB0ZXN0UmVwZWF0ZWRTY2FsYXJzUmVtb3ZlKHNlbGYpOgotICAg
IHByb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0KLSAgICBzZWxmLmFzc2VydFRy
dWUobm90IHByb3RvLnJlcGVhdGVkX2ludDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVu
KHByb3RvLnJlcGVhdGVkX2ludDMyKSkKLSAgICBwcm90by5yZXBlYXRlZF9pbnQzMi5hcHBlbmQo
NSkKLSAgICBwcm90by5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMTApCi0gICAgcHJvdG8ucmVwZWF0
ZWRfaW50MzIuYXBwZW5kKDUpCi0gICAgcHJvdG8ucmVwZWF0ZWRfaW50MzIuYXBwZW5kKDUpCi0K
LSAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGxlbihwcm90by5yZXBlYXRlZF9pbnQzMikpCi0gICAg
cHJvdG8ucmVwZWF0ZWRfaW50MzIucmVtb3ZlKDUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBs
ZW4ocHJvdG8ucmVwZWF0ZWRfaW50MzIpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAsIHByb3Rv
LnJlcGVhdGVkX2ludDMyWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgcHJvdG8ucmVwZWF0
ZWRfaW50MzJbMV0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBwcm90by5yZXBlYXRlZF9pbnQz
MlsyXSkKLQotICAgIHByb3RvLnJlcGVhdGVkX2ludDMyLnJlbW92ZSg1KQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMiwgbGVuKHByb3RvLnJlcGVhdGVkX2ludDMyKSkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKDEwLCBwcm90by5yZXBlYXRlZF9pbnQzMlswXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDUs
IHByb3RvLnJlcGVhdGVkX2ludDMyWzFdKQotCi0gICAgcHJvdG8ucmVwZWF0ZWRfaW50MzIucmVt
b3ZlKDEwKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHByb3RvLnJlcGVhdGVkX2ludDMy
KSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDUsIHByb3RvLnJlcGVhdGVkX2ludDMyWzBdKQotCi0g
ICAgIyBSZW1vdmUgYSBub24tZXhpc3RlbnQgZWxlbWVudC4KLSAgICBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yLCBwcm90by5yZXBlYXRlZF9pbnQzMi5yZW1vdmUsIDEyMykKLQotICBkZWYg
dGVzdFJlcGVhdGVkQ29tcG9zaXRlcyhzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5U
ZXN0QWxsVHlwZXMoKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcHJvdG8ucmVwZWF0ZWRfbmVz
dGVkX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocHJvdG8ucmVwZWF0ZWRf
bmVzdGVkX21lc3NhZ2UpKQotICAgIG0wID0gcHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Uu
YWRkKCkKLSAgICBtMSA9IHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpCi0gICAg
c2VsZi5hc3NlcnRUcnVlKHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMiwgbGVuKHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKSkKLSAgICBz
ZWxmLmFzc2VydExpc3RzRXF1YWwoW20wLCBtMV0sIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNz
YWdlKQotICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtMCwgdW5pdHRlc3RfcGIyLlRlc3RBbGxU
eXBlcy5OZXN0ZWRNZXNzYWdlKQotCi0gICAgIyBUZXN0IG91dC1vZi1ib3VuZHMgaW5kaWNlcy4K
LSAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBwcm90by5yZXBlYXRlZF9uZXN0ZWRf
bWVzc2FnZS5fX2dldGl0ZW1fXywKLSAgICAgICAgICAgICAgICAgICAgICAxMjM0KQotICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdl
Ll9fZ2V0aXRlbV9fLAotICAgICAgICAgICAgICAgICAgICAgIC0xMjM0KQotCi0gICAgIyBUZXN0
IGluY29ycmVjdCB0eXBlcyBwYXNzZWQgdG8gX19nZXRpdGVtX18uCi0gICAgc2VsZi5hc3NlcnRS
YWlzZXMoVHlwZUVycm9yLCBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5fX2dldGl0ZW1f
XywKLSAgICAgICAgICAgICAgICAgICAgICAnZm9vJykKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhU
eXBlRXJyb3IsIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLl9fZ2V0aXRlbV9fLAotICAg
ICAgICAgICAgICAgICAgICAgIE5vbmUpCi0KLSAgICAjIFRlc3Qgc2xpY2UgcmV0cmlldmFsLgot
ICAgIG0yID0gcHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkKLSAgICBtMyA9IHBy
b3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpCi0gICAgbTQgPSBwcm90by5yZXBlYXRl
ZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKQotICAgIHNlbGYuYXNzZXJ0TGlzdHNFcXVhbCgKLSAgICAg
ICAgW20xLCBtMiwgbTNdLCBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZVsxOjRdKQotICAg
IHNlbGYuYXNzZXJ0TGlzdHNFcXVhbCgKLSAgICAgICAgW20wLCBtMSwgbTIsIG0zLCBtNF0sIHBy
b3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlWzpdKQotICAgIHNlbGYuYXNzZXJ0TGlzdHNFcXVh
bCgKLSAgICAgICAgW20wLCBtMV0sIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlWzoyXSkK
LSAgICBzZWxmLmFzc2VydExpc3RzRXF1YWwoCi0gICAgICAgIFttMiwgbTMsIG00XSwgcHJvdG8u
cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VbMjpdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAg
ICAgIG0wLCBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZVswXSkKLSAgICBzZWxmLmFzc2Vy
dExpc3RzRXF1YWwoCi0gICAgICAgIFttMF0sIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdl
WzoxXSkKLQotICAgICMgVGVzdCB0aGF0IHdlIGNhbiB1c2UgdGhlIGZpZWxkIGFzIGFuIGl0ZXJh
dG9yLgotICAgIHJlc3VsdCA9IFtdCi0gICAgZm9yIGkgaW4gcHJvdG8ucmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2U6Ci0gICAgICByZXN1bHQuYXBwZW5kKGkpCi0gICAgc2VsZi5hc3NlcnRMaXN0c0Vx
dWFsKFttMCwgbTEsIG0yLCBtMywgbTRdLCByZXN1bHQpCi0KLSAgICAjIFRlc3Qgc2luZ2xlIGRl
bGV0aW9uLgotICAgIGRlbCBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZVsyXQotICAgIHNl
bGYuYXNzZXJ0TGlzdHNFcXVhbChbbTAsIG0xLCBtMywgbTRdLCBwcm90by5yZXBlYXRlZF9uZXN0
ZWRfbWVzc2FnZSkKLQotICAgICMgVGVzdCBzbGljZSBkZWxldGlvbi4KLSAgICBkZWwgcHJvdG8u
cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VbMjpdCi0gICAgc2VsZi5hc3NlcnRMaXN0c0VxdWFsKFtt
MCwgbTFdLCBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSkKLQotICAgICMgVGVzdCBleHRl
bmRpbmcuCi0gICAgbjEgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2Uo
YmI9MSkKLSAgICBuMiA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZShi
Yj0yKQotICAgIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmV4dGVuZChbbjEsbjJdKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgbGVuKHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdl
KSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG4xLCBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZVsyXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG4yLCBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZVszXSkKLQotICAgICMgVGVzdCBjbGVhcmluZy4KLSAgICBwcm90by5DbGVhckZpZWxkKCdy
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZScpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBwcm90by5y
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihwcm90
by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSkpCi0KLSAgICAjIFRlc3QgY29uc3RydWN0aW5nIGFu
IGVsZW1lbnQgd2hpbGUgYWRkaW5nIGl0LgotICAgIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNz
YWdlLmFkZChiYj0yMykKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihwcm90by5yZXBlYXRl
ZF9uZXN0ZWRfbWVzc2FnZSkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyMywgcHJvdG8ucmVwZWF0
ZWRfbmVzdGVkX21lc3NhZ2VbMF0uYmIpCi0KLSAgZGVmIHRlc3RSZXBlYXRlZENvbXBvc2l0ZVJl
bW92ZShzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Up
KQotICAgIG0wID0gcHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkKLSAgICAjIE5l
ZWQgdG8gc2V0IHNvbWUgZGlmZmVyZW50aWF0aW5nIHZhcmlhYmxlIHNvIG0wICE9IG0xICE9IG0y
OgotICAgIG0wLmJiID0gbGVuKHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKQotICAgIG0x
ID0gcHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkKLSAgICBtMS5iYiA9IGxlbihw
cm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydFRydWUobTAgIT0g
bTEpCi0gICAgbTIgPSBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKQotICAgIG0y
LmJiID0gbGVuKHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0
TGlzdHNFcXVhbChbbTAsIG0xLCBtMl0sIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKQot
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4ocHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3Nh
Z2UpKQotICAgIHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLnJlbW92ZShtMCkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKDIsIGxlbihwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSkpCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbChtMSwgcHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VbMF0p
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChtMiwgcHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Vb
MV0pCi0KLSAgICAjIFJlbW92aW5nIG0wIGFnYWluIG9yIHJlbW92aW5nIE5vbmUgc2hvdWxkIHJh
aXNlIGVycm9yCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcHJvdG8ucmVwZWF0
ZWRfbmVzdGVkX21lc3NhZ2UucmVtb3ZlLCBtMCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1
ZUVycm9yLCBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5yZW1vdmUsIE5vbmUpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4ocHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UpKQot
Ci0gICAgcHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UucmVtb3ZlKG0yKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMSwgbGVuKHByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKSkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKG0xLCBwcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZVswXSkKLQot
ICBkZWYgdGVzdEhhbmRXcml0dGVuUmVmbGVjdGlvbihzZWxmKToKLSAgICAjIEhhbmQgd3JpdHRl
biBleHRlbnNpb25zIGFyZSBvbmx5IHN1cHBvcnRlZCBieSB0aGUgcHVyZS1QeXRob24KLSAgICAj
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkuCi0gICAgaWYgYXBpX2ltcGxlbWVudGF0aW9uLlR5
cGUoKSAhPSAncHl0aG9uJzoKLSAgICAgIHJldHVybgotCi0gICAgRmllbGREZXNjcmlwdG9yID0g
ZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IKLSAgICBmb29fZmllbGRfZGVzY3JpcHRvciA9IEZp
ZWxkRGVzY3JpcHRvcigKLSAgICAgICAgbmFtZT0nZm9vX2ZpZWxkJywgZnVsbF9uYW1lPSdNeVBy
b3RvLmZvb19maWVsZCcsCi0gICAgICAgIGluZGV4PTAsIG51bWJlcj0xLCB0eXBlPUZpZWxkRGVz
Y3JpcHRvci5UWVBFX0lOVDY0LAotICAgICAgICBjcHBfdHlwZT1GaWVsZERlc2NyaXB0b3IuQ1BQ
VFlQRV9JTlQ2NCwKLSAgICAgICAgbGFiZWw9RmllbGREZXNjcmlwdG9yLkxBQkVMX09QVElPTkFM
LCBkZWZhdWx0X3ZhbHVlPTAsCi0gICAgICAgIGNvbnRhaW5pbmdfdHlwZT1Ob25lLCBtZXNzYWdl
X3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsCi0gICAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwg
ZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCi0gICAgICAgIG9wdGlvbnM9ZGVzY3JpcHRvcl9wYjIuRmll
bGRPcHRpb25zKCkpCi0gICAgbXlkZXNjcmlwdG9yID0gZGVzY3JpcHRvci5EZXNjcmlwdG9yKAot
ICAgICAgICBuYW1lPSdNeVByb3RvJywgZnVsbF9uYW1lPSdNeVByb3RvJywgZmlsZW5hbWU9J2ln
bm9yZWQnLAotICAgICAgICBjb250YWluaW5nX3R5cGU9Tm9uZSwgbmVzdGVkX3R5cGVzPVtdLCBl
bnVtX3R5cGVzPVtdLAotICAgICAgICBmaWVsZHM9W2Zvb19maWVsZF9kZXNjcmlwdG9yXSwgZXh0
ZW5zaW9ucz1bXSwKLSAgICAgICAgb3B0aW9ucz1kZXNjcmlwdG9yX3BiMi5NZXNzYWdlT3B0aW9u
cygpKQotICAgIGNsYXNzIE15UHJvdG9DbGFzcyhzaXgud2l0aF9tZXRhY2xhc3MocmVmbGVjdGlv
bi5HZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBlLCBtZXNzYWdlLk1lc3NhZ2UpKToKLSAgICAg
IERFU0NSSVBUT1IgPSBteWRlc2NyaXB0b3IKLSAgICBteXByb3RvX2luc3RhbmNlID0gTXlQcm90
b0NsYXNzKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG15cHJvdG9faW5zdGFuY2UuZm9vX2Zp
ZWxkKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgbXlwcm90b19pbnN0YW5jZS5IYXNGaWVsZCgn
Zm9vX2ZpZWxkJykpCi0gICAgbXlwcm90b19pbnN0YW5jZS5mb29fZmllbGQgPSAyMwotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMjMsIG15cHJvdG9faW5zdGFuY2UuZm9vX2ZpZWxkKQotICAgIHNlbGYu
YXNzZXJ0VHJ1ZShteXByb3RvX2luc3RhbmNlLkhhc0ZpZWxkKCdmb29fZmllbGQnKSkKLQotICBk
ZWYgdGVzdERlc2NyaXB0b3JQcm90b1N1cHBvcnQoc2VsZik6Ci0gICAgIyBIYW5kIHdyaXR0ZW4g
ZGVzY3JpcHRvcnMvcmVmbGVjdGlvbiBhcmUgb25seSBzdXBwb3J0ZWQgYnkgdGhlIHB1cmUtUHl0
aG9uCi0gICAgIyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJLgotICAgIGlmIGFwaV9pbXBsZW1l
bnRhdGlvbi5UeXBlKCkgIT0gJ3B5dGhvbic6Ci0gICAgICByZXR1cm4KLQotICAgIGRlZiBBZGRE
ZXNjcmlwdG9yRmllbGQocHJvdG8sIGZpZWxkX25hbWUsIGZpZWxkX3R5cGUpOgotICAgICAgQWRk
RGVzY3JpcHRvckZpZWxkLmZpZWxkX2luZGV4ICs9IDEKLSAgICAgIG5ld19maWVsZCA9IHByb3Rv
LmZpZWxkLmFkZCgpCi0gICAgICBuZXdfZmllbGQubmFtZSA9IGZpZWxkX25hbWUKLSAgICAgIG5l
d19maWVsZC50eXBlID0gZmllbGRfdHlwZQotICAgICAgbmV3X2ZpZWxkLm51bWJlciA9IEFkZERl
c2NyaXB0b3JGaWVsZC5maWVsZF9pbmRleAotICAgICAgbmV3X2ZpZWxkLmxhYmVsID0gZGVzY3Jp
cHRvcl9wYjIuRmllbGREZXNjcmlwdG9yUHJvdG8uTEFCRUxfT1BUSU9OQUwKLQotICAgIEFkZERl
c2NyaXB0b3JGaWVsZC5maWVsZF9pbmRleCA9IDAKLQotICAgIGRlc2NfcHJvdG8gPSBkZXNjcmlw
dG9yX3BiMi5EZXNjcmlwdG9yUHJvdG8oKQotICAgIGRlc2NfcHJvdG8ubmFtZSA9ICdDYXInCi0g
ICAgZmRwID0gZGVzY3JpcHRvcl9wYjIuRmllbGREZXNjcmlwdG9yUHJvdG8KLSAgICBBZGREZXNj
cmlwdG9yRmllbGQoZGVzY19wcm90bywgJ25hbWUnLCBmZHAuVFlQRV9TVFJJTkcpCi0gICAgQWRk
RGVzY3JpcHRvckZpZWxkKGRlc2NfcHJvdG8sICd5ZWFyJywgZmRwLlRZUEVfSU5UNjQpCi0gICAg
QWRkRGVzY3JpcHRvckZpZWxkKGRlc2NfcHJvdG8sICdhdXRvbWF0aWMnLCBmZHAuVFlQRV9CT09M
KQotICAgIEFkZERlc2NyaXB0b3JGaWVsZChkZXNjX3Byb3RvLCAncHJpY2UnLCBmZHAuVFlQRV9E
T1VCTEUpCi0gICAgIyBBZGQgYSByZXBlYXRlZCBmaWVsZAotICAgIEFkZERlc2NyaXB0b3JGaWVs
ZC5maWVsZF9pbmRleCArPSAxCi0gICAgbmV3X2ZpZWxkID0gZGVzY19wcm90by5maWVsZC5hZGQo
KQotICAgIG5ld19maWVsZC5uYW1lID0gJ293bmVycycKLSAgICBuZXdfZmllbGQudHlwZSA9IGZk
cC5UWVBFX1NUUklORwotICAgIG5ld19maWVsZC5udW1iZXIgPSBBZGREZXNjcmlwdG9yRmllbGQu
ZmllbGRfaW5kZXgKLSAgICBuZXdfZmllbGQubGFiZWwgPSBkZXNjcmlwdG9yX3BiMi5GaWVsZERl
c2NyaXB0b3JQcm90by5MQUJFTF9SRVBFQVRFRAotCi0gICAgZGVzYyA9IGRlc2NyaXB0b3IuTWFr
ZURlc2NyaXB0b3IoZGVzY19wcm90bykKLSAgICBzZWxmLmFzc2VydFRydWUoJ25hbWUnIGluIGRl
c2MuZmllbGRzX2J5X25hbWUpCi0gICAgc2VsZi5hc3NlcnRUcnVlKCd5ZWFyJyBpbiBkZXNjLmZp
ZWxkc19ieV9uYW1lKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXV0b21hdGljJyBpbiBkZXNjLmZp
ZWxkc19ieV9uYW1lKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncHJpY2UnIGluIGRlc2MuZmllbGRz
X2J5X25hbWUpCi0gICAgc2VsZi5hc3NlcnRUcnVlKCdvd25lcnMnIGluIGRlc2MuZmllbGRzX2J5
X25hbWUpCi0KLSAgICBjbGFzcyBDYXJNZXNzYWdlKHNpeC53aXRoX21ldGFjbGFzcyhyZWZsZWN0
aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUsIG1lc3NhZ2UuTWVzc2FnZSkpOgotICAg
ICAgREVTQ1JJUFRPUiA9IGRlc2MKLQotICAgIHByaXVzID0gQ2FyTWVzc2FnZSgpCi0gICAgcHJp
dXMubmFtZSA9ICdwcml1cycKLSAgICBwcml1cy55ZWFyID0gMjAxMAotICAgIHByaXVzLmF1dG9t
YXRpYyA9IFRydWUKLSAgICBwcml1cy5wcmljZSA9IDI1MTM0Ljc1Ci0gICAgcHJpdXMub3duZXJz
LmV4dGVuZChbJ2JvYicsICdzdXNhbiddKQotCi0gICAgc2VyaWFsaXplZF9wcml1cyA9IHByaXVz
LlNlcmlhbGl6ZVRvU3RyaW5nKCkKLSAgICBuZXdfcHJpdXMgPSByZWZsZWN0aW9uLlBhcnNlTWVz
c2FnZShkZXNjLCBzZXJpYWxpemVkX3ByaXVzKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdfcHJp
dXMgaXMgbm90IHByaXVzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJpdXMsIG5ld19wcml1cykK
LQotICAgICMgdGhlc2UgYXJlIHVubmVjZXNzYXJ5IGFzc3VtaW5nIG1lc3NhZ2UgZXF1YWxpdHkg
d29ya3MgYXMgYWR2ZXJ0aXNlZCBidXQKLSAgICAjIGV4cGxpY2l0bHkgY2hlY2sgdG8gYmUgc2Fm
ZSBzaW5jZSB3ZSdyZSBtdWNraW5nIGFib3V0IGluIG1ldGFjbGFzcyBmb28KLSAgICBzZWxmLmFz
c2VydEVxdWFsKHByaXVzLm5hbWUsIG5ld19wcml1cy5uYW1lKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwocHJpdXMueWVhciwgbmV3X3ByaXVzLnllYXIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwcml1
cy5hdXRvbWF0aWMsIG5ld19wcml1cy5hdXRvbWF0aWMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChw
cml1cy5wcmljZSwgbmV3X3ByaXVzLnByaWNlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJpdXMu
b3duZXJzLCBuZXdfcHJpdXMub3duZXJzKQotCi0gIGRlZiB0ZXN0VG9wTGV2ZWxFeHRlbnNpb25z
Rm9yT3B0aW9uYWxTY2FsYXIoc2VsZik6Ci0gICAgZXh0ZW5kZWVfcHJvdG8gPSB1bml0dGVzdF9w
YjIuVGVzdEFsbEV4dGVuc2lvbnMoKQotICAgIGV4dGVuc2lvbiA9IHVuaXR0ZXN0X3BiMi5vcHRp
b25hbF9pbnQzMl9leHRlbnNpb24KLSAgICBzZWxmLmFzc2VydFRydWUobm90IGV4dGVuZGVlX3By
b3RvLkhhc0V4dGVuc2lvbihleHRlbnNpb24pKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZXh0
ZW5kZWVfcHJvdG8uRXh0ZW5zaW9uc1tleHRlbnNpb25dKQotICAgICMgQXMgd2l0aCBub3JtYWwg
c2NhbGFyIGZpZWxkcywganVzdCBkb2luZyBhIHJlYWQgZG9lc24ndCBhY3R1YWxseSBzZXQgdGhl
Ci0gICAgIyAiaGFzIiBiaXQuCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBleHRlbmRlZV9wcm90
by5IYXNFeHRlbnNpb24oZXh0ZW5zaW9uKSkKLSAgICAjIEFjdHVhbGx5IHNldCB0aGUgdGhpbmcu
Ci0gICAgZXh0ZW5kZWVfcHJvdG8uRXh0ZW5zaW9uc1tleHRlbnNpb25dID0gMjMKLSAgICBzZWxm
LmFzc2VydEVxdWFsKDIzLCBleHRlbmRlZV9wcm90by5FeHRlbnNpb25zW2V4dGVuc2lvbl0pCi0g
ICAgc2VsZi5hc3NlcnRUcnVlKGV4dGVuZGVlX3Byb3RvLkhhc0V4dGVuc2lvbihleHRlbnNpb24p
KQotICAgICMgRW5zdXJlIHRoYXQgY2xlYXJpbmcgd29ya3MgYXMgd2VsbC4KLSAgICBleHRlbmRl
ZV9wcm90by5DbGVhckV4dGVuc2lvbihleHRlbnNpb24pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgw
LCBleHRlbmRlZV9wcm90by5FeHRlbnNpb25zW2V4dGVuc2lvbl0pCi0gICAgc2VsZi5hc3NlcnRU
cnVlKG5vdCBleHRlbmRlZV9wcm90by5IYXNFeHRlbnNpb24oZXh0ZW5zaW9uKSkKLQotICBkZWYg
dGVzdFRvcExldmVsRXh0ZW5zaW9uc0ZvclJlcGVhdGVkU2NhbGFyKHNlbGYpOgotICAgIGV4dGVu
ZGVlX3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICBleHRlbnNp
b24gPSB1bml0dGVzdF9wYjIucmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbgotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMCwgbGVuKGV4dGVuZGVlX3Byb3RvLkV4dGVuc2lvbnNbZXh0ZW5zaW9uXSkpCi0g
ICAgZXh0ZW5kZWVfcHJvdG8uRXh0ZW5zaW9uc1tleHRlbnNpb25dLmFwcGVuZCgnZm9vJykKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKFsnZm9vJ10sIGV4dGVuZGVlX3Byb3RvLkV4dGVuc2lvbnNbZXh0
ZW5zaW9uXSkKLSAgICBzdHJpbmdfbGlzdCA9IGV4dGVuZGVlX3Byb3RvLkV4dGVuc2lvbnNbZXh0
ZW5zaW9uXQotICAgIGV4dGVuZGVlX3Byb3RvLkNsZWFyRXh0ZW5zaW9uKGV4dGVuc2lvbikKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihleHRlbmRlZV9wcm90by5FeHRlbnNpb25zW2V4dGVu
c2lvbl0pKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJpbmdfbGlzdCBpcyBub3QgZXh0ZW5kZWVf
cHJvdG8uRXh0ZW5zaW9uc1tleHRlbnNpb25dKQotICAgICMgU2hvdWxkbid0IGJlIGFsbG93ZWQg
dG8gZG8gRXh0ZW5zaW9uc1tleHRlbnNpb25dID0gJ2EnCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMo
VHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBleHRlbmRlZV9wcm90by5FeHRlbnNpb25zLAot
ICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiwgJ2EnKQotCi0gIGRlZiB0ZXN0VG9wTGV2
ZWxFeHRlbnNpb25zRm9yT3B0aW9uYWxNZXNzYWdlKHNlbGYpOgotICAgIGV4dGVuZGVlX3Byb3Rv
ID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICBleHRlbnNpb24gPSB1bml0
dGVzdF9wYjIub3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lvbgotICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShub3QgZXh0ZW5kZWVfcHJvdG8uSGFzRXh0ZW5zaW9uKGV4dGVuc2lvbikpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbCgwLCBleHRlbmRlZV9wcm90by5FeHRlbnNpb25zW2V4dGVuc2lvbl0u
YykKLSAgICAjIEFzIHdpdGggbm9ybWFsIChub24tZXh0ZW5zaW9uKSBmaWVsZHMsIG1lcmVseSBy
ZWFkaW5nIGZyb20gdGhlCi0gICAgIyB0aGluZyBzaG91bGRuJ3Qgc2V0IHRoZSAiaGFzIiBiaXQu
Ci0gICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBleHRlbmRlZV9wcm90by5IYXNFeHRlbnNpb24oZXh0
ZW5zaW9uKSkKLSAgICBleHRlbmRlZV9wcm90by5FeHRlbnNpb25zW2V4dGVuc2lvbl0uYyA9IDIz
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgyMywgZXh0ZW5kZWVfcHJvdG8uRXh0ZW5zaW9uc1tleHRl
bnNpb25dLmMpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGV4dGVuZGVlX3Byb3RvLkhhc0V4dGVuc2lv
bihleHRlbnNpb24pKQotICAgICMgU2F2ZSBhIHJlZmVyZW5jZSBoZXJlLgotICAgIGZvcmVpZ25f
bWVzc2FnZSA9IGV4dGVuZGVlX3Byb3RvLkV4dGVuc2lvbnNbZXh0ZW5zaW9uXQotICAgIGV4dGVu
ZGVlX3Byb3RvLkNsZWFyRXh0ZW5zaW9uKGV4dGVuc2lvbikKLSAgICBzZWxmLmFzc2VydFRydWUo
Zm9yZWlnbl9tZXNzYWdlIGlzIG5vdCBleHRlbmRlZV9wcm90by5FeHRlbnNpb25zW2V4dGVuc2lv
bl0pCi0gICAgIyBTZXR0aW5nIGEgZmllbGQgb24gZm9yZWlnbl9tZXNzYWdlIG5vdyBzaG91bGRu
J3Qgc2V0Ci0gICAgIyBhbnkgImhhcyIgYml0cyBvbiBleHRlbmRlZV9wcm90by4KLSAgICBmb3Jl
aWduX21lc3NhZ2UuYyA9IDQyCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZm9yZWlnbl9tZXNz
YWdlLmMpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGZvcmVpZ25fbWVzc2FnZS5IYXNGaWVsZCgnYycp
KQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXh0ZW5kZWVfcHJvdG8uSGFzRXh0ZW5zaW9uKGV4
dGVuc2lvbikpCi0gICAgIyBTaG91bGRuJ3QgYmUgYWxsb3dlZCB0byBkbyBFeHRlbnNpb25zW2V4
dGVuc2lvbl0gPSAnYScKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9y
LnNldGl0ZW0sIGV4dGVuZGVlX3Byb3RvLkV4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgZXh0ZW5zaW9uLCAnYScpCi0KLSAgZGVmIHRlc3RUb3BMZXZlbEV4dGVuc2lvbnNGb3JSZXBl
YXRlZE1lc3NhZ2Uoc2VsZik6Ci0gICAgZXh0ZW5kZWVfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVz
dEFsbEV4dGVuc2lvbnMoKQotICAgIGV4dGVuc2lvbiA9IHVuaXR0ZXN0X3BiMi5yZXBlYXRlZGdy
b3VwX2V4dGVuc2lvbgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGV4dGVuZGVlX3Byb3Rv
LkV4dGVuc2lvbnNbZXh0ZW5zaW9uXSkpCi0gICAgZ3JvdXAgPSBleHRlbmRlZV9wcm90by5FeHRl
bnNpb25zW2V4dGVuc2lvbl0uYWRkKCkKLSAgICBncm91cC5hID0gMjMKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDIzLCBleHRlbmRlZV9wcm90by5FeHRlbnNpb25zW2V4dGVuc2lvbl1bMF0uYSkKLSAg
ICBncm91cC5hID0gNDIKLSAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBleHRlbmRlZV9wcm90by5F
eHRlbnNpb25zW2V4dGVuc2lvbl1bMF0uYSkKLSAgICBncm91cF9saXN0ID0gZXh0ZW5kZWVfcHJv
dG8uRXh0ZW5zaW9uc1tleHRlbnNpb25dCi0gICAgZXh0ZW5kZWVfcHJvdG8uQ2xlYXJFeHRlbnNp
b24oZXh0ZW5zaW9uKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGV4dGVuZGVlX3Byb3Rv
LkV4dGVuc2lvbnNbZXh0ZW5zaW9uXSkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGdyb3VwX2xpc3Qg
aXMgbm90IGV4dGVuZGVlX3Byb3RvLkV4dGVuc2lvbnNbZXh0ZW5zaW9uXSkKLSAgICAjIFNob3Vs
ZG4ndCBiZSBhbGxvd2VkIHRvIGRvIEV4dGVuc2lvbnNbZXh0ZW5zaW9uXSA9ICdhJwotICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgZXh0ZW5kZWVfcHJv
dG8uRXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24sICdhJykKLQot
ICBkZWYgdGVzdE5lc3RlZEV4dGVuc2lvbnMoc2VsZik6Ci0gICAgZXh0ZW5kZWVfcHJvdG8gPSB1
bml0dGVzdF9wYjIuVGVzdEFsbEV4dGVuc2lvbnMoKQotICAgIGV4dGVuc2lvbiA9IHVuaXR0ZXN0
X3BiMi5UZXN0UmVxdWlyZWQuc2luZ2xlCi0KLSAgICAjIFdlIGp1c3QgdGVzdCB0aGUgbm9uLXJl
cGVhdGVkIGNhc2UuCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBleHRlbmRlZV9wcm90by5IYXNF
eHRlbnNpb24oZXh0ZW5zaW9uKSkKLSAgICByZXF1aXJlZCA9IGV4dGVuZGVlX3Byb3RvLkV4dGVu
c2lvbnNbZXh0ZW5zaW9uXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVxdWlyZWQuYSkKLSAg
ICBzZWxmLmFzc2VydFRydWUobm90IGV4dGVuZGVlX3Byb3RvLkhhc0V4dGVuc2lvbihleHRlbnNp
b24pKQotICAgIHJlcXVpcmVkLmEgPSAyMwotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjMsIGV4dGVu
ZGVlX3Byb3RvLkV4dGVuc2lvbnNbZXh0ZW5zaW9uXS5hKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShl
eHRlbmRlZV9wcm90by5IYXNFeHRlbnNpb24oZXh0ZW5zaW9uKSkKLSAgICBleHRlbmRlZV9wcm90
by5DbGVhckV4dGVuc2lvbihleHRlbnNpb24pCi0gICAgc2VsZi5hc3NlcnRUcnVlKHJlcXVpcmVk
IGlzIG5vdCBleHRlbmRlZV9wcm90by5FeHRlbnNpb25zW2V4dGVuc2lvbl0pCi0gICAgc2VsZi5h
c3NlcnRUcnVlKG5vdCBleHRlbmRlZV9wcm90by5IYXNFeHRlbnNpb24oZXh0ZW5zaW9uKSkKLQot
ICBkZWYgdGVzdFJlZ2lzdGVyZWRFeHRlbnNpb25zKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0VHJ1
ZSgncHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uJyBpbgotICAgICAg
ICAgICAgICAgICAgICB1bml0dGVzdF9wYjIuVGVzdEFsbEV4dGVuc2lvbnMuX2V4dGVuc2lvbnNf
YnlfbmFtZSkKLSAgICBzZWxmLmFzc2VydFRydWUoMSBpbiB1bml0dGVzdF9wYjIuVGVzdEFsbEV4
dGVuc2lvbnMuX2V4dGVuc2lvbnNfYnlfbnVtYmVyKQotICAgICMgTWFrZSBzdXJlIGV4dGVuc2lv
bnMgaGF2ZW4ndCBiZWVuIHJlZ2lzdGVyZWQgaW50byB0eXBlcyB0aGF0IHNob3VsZG4ndAotICAg
ICMgaGF2ZSBhbnkuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4odW5pdHRlc3RfcGIyLlRl
c3RBbGxUeXBlcy5fZXh0ZW5zaW9uc19ieV9uYW1lKSkKLQotICAjIElmIG1lc3NhZ2UgQSBkaXJl
Y3RseSBjb250YWlucyBtZXNzYWdlIEIsIGFuZAotICAjIGEuSGFzRmllbGQoJ2InKSBpcyBjdXJy
ZW50bHkgRmFsc2UsIHRoZW4gbXV0YXRpbmcgYW55Ci0gICMgZXh0ZW5zaW9uIGluIEIgc2hvdWxk
IGNoYW5nZSBhLkhhc0ZpZWxkKCdiJykgdG8gVHJ1ZQotICAjIChhbmQgc28gb24gdXAgdGhlIG9i
amVjdCB0cmVlKS4KLSAgZGVmIHRlc3RIYXNCaXRzRm9yQW5jZXN0b3JzT2ZFeHRlbmRlZE1lc3Nh
Z2Uoc2VsZik6Ci0gICAgIyBPcHRpb25hbCBzY2FsYXIgZXh0ZW5zaW9uLgotICAgIHRvcGxldmVs
ID0gbW9yZV9leHRlbnNpb25zX3BiMi5Ub3BMZXZlbE1lc3NhZ2UoKQotICAgIHNlbGYuYXNzZXJ0
VHJ1ZShub3QgdG9wbGV2ZWwuSGFzRmllbGQoJ3N1Ym1lc3NhZ2UnKSkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDAsIHRvcGxldmVsLnN1Ym1lc3NhZ2UuRXh0ZW5zaW9uc1sKLSAgICAgICAgbW9yZV9l
eHRlbnNpb25zX3BiMi5vcHRpb25hbF9pbnRfZXh0ZW5zaW9uXSkKLSAgICBzZWxmLmFzc2VydFRy
dWUobm90IHRvcGxldmVsLkhhc0ZpZWxkKCdzdWJtZXNzYWdlJykpCi0gICAgdG9wbGV2ZWwuc3Vi
bWVzc2FnZS5FeHRlbnNpb25zWwotICAgICAgICBtb3JlX2V4dGVuc2lvbnNfcGIyLm9wdGlvbmFs
X2ludF9leHRlbnNpb25dID0gMjMKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIzLCB0b3BsZXZlbC5z
dWJtZXNzYWdlLkV4dGVuc2lvbnNbCi0gICAgICAgIG1vcmVfZXh0ZW5zaW9uc19wYjIub3B0aW9u
YWxfaW50X2V4dGVuc2lvbl0pCi0gICAgc2VsZi5hc3NlcnRUcnVlKHRvcGxldmVsLkhhc0ZpZWxk
KCdzdWJtZXNzYWdlJykpCi0KLSAgICAjIFJlcGVhdGVkIHNjYWxhciBleHRlbnNpb24uCi0gICAg
dG9wbGV2ZWwgPSBtb3JlX2V4dGVuc2lvbnNfcGIyLlRvcExldmVsTWVzc2FnZSgpCi0gICAgc2Vs
Zi5hc3NlcnRUcnVlKG5vdCB0b3BsZXZlbC5IYXNGaWVsZCgnc3VibWVzc2FnZScpKQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoW10sIHRvcGxldmVsLnN1Ym1lc3NhZ2UuRXh0ZW5zaW9uc1sKLSAgICAg
ICAgbW9yZV9leHRlbnNpb25zX3BiMi5yZXBlYXRlZF9pbnRfZXh0ZW5zaW9uXSkKLSAgICBzZWxm
LmFzc2VydFRydWUobm90IHRvcGxldmVsLkhhc0ZpZWxkKCdzdWJtZXNzYWdlJykpCi0gICAgdG9w
bGV2ZWwuc3VibWVzc2FnZS5FeHRlbnNpb25zWwotICAgICAgICBtb3JlX2V4dGVuc2lvbnNfcGIy
LnJlcGVhdGVkX2ludF9leHRlbnNpb25dLmFwcGVuZCgyMykKLSAgICBzZWxmLmFzc2VydEVxdWFs
KFsyM10sIHRvcGxldmVsLnN1Ym1lc3NhZ2UuRXh0ZW5zaW9uc1sKLSAgICAgICAgbW9yZV9leHRl
bnNpb25zX3BiMi5yZXBlYXRlZF9pbnRfZXh0ZW5zaW9uXSkKLSAgICBzZWxmLmFzc2VydFRydWUo
dG9wbGV2ZWwuSGFzRmllbGQoJ3N1Ym1lc3NhZ2UnKSkKLQotICAgICMgT3B0aW9uYWwgbWVzc2Fn
ZSBleHRlbnNpb24uCi0gICAgdG9wbGV2ZWwgPSBtb3JlX2V4dGVuc2lvbnNfcGIyLlRvcExldmVs
TWVzc2FnZSgpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0b3BsZXZlbC5IYXNGaWVsZCgnc3Vi
bWVzc2FnZScpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdG9wbGV2ZWwuc3VibWVzc2FnZS5F
eHRlbnNpb25zWwotICAgICAgICBtb3JlX2V4dGVuc2lvbnNfcGIyLm9wdGlvbmFsX21lc3NhZ2Vf
ZXh0ZW5zaW9uXS5mb3JlaWduX21lc3NhZ2VfaW50KQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qg
dG9wbGV2ZWwuSGFzRmllbGQoJ3N1Ym1lc3NhZ2UnKSkKLSAgICB0b3BsZXZlbC5zdWJtZXNzYWdl
LkV4dGVuc2lvbnNbCi0gICAgICAgIG1vcmVfZXh0ZW5zaW9uc19wYjIub3B0aW9uYWxfbWVzc2Fn
ZV9leHRlbnNpb25dLmZvcmVpZ25fbWVzc2FnZV9pbnQgPSAyMwotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMjMsIHRvcGxldmVsLnN1Ym1lc3NhZ2UuRXh0ZW5zaW9uc1sKLSAgICAgICAgbW9yZV9leHRl
bnNpb25zX3BiMi5vcHRpb25hbF9tZXNzYWdlX2V4dGVuc2lvbl0uZm9yZWlnbl9tZXNzYWdlX2lu
dCkKLSAgICBzZWxmLmFzc2VydFRydWUodG9wbGV2ZWwuSGFzRmllbGQoJ3N1Ym1lc3NhZ2UnKSkK
LQotICAgICMgUmVwZWF0ZWQgbWVzc2FnZSBleHRlbnNpb24uCi0gICAgdG9wbGV2ZWwgPSBtb3Jl
X2V4dGVuc2lvbnNfcGIyLlRvcExldmVsTWVzc2FnZSgpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5v
dCB0b3BsZXZlbC5IYXNGaWVsZCgnc3VibWVzc2FnZScpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgbGVuKHRvcGxldmVsLnN1Ym1lc3NhZ2UuRXh0ZW5zaW9uc1sKLSAgICAgICAgbW9yZV9leHRl
bnNpb25zX3BiMi5yZXBlYXRlZF9tZXNzYWdlX2V4dGVuc2lvbl0pKQotICAgIHNlbGYuYXNzZXJ0
VHJ1ZShub3QgdG9wbGV2ZWwuSGFzRmllbGQoJ3N1Ym1lc3NhZ2UnKSkKLSAgICBmb3JlaWduID0g
dG9wbGV2ZWwuc3VibWVzc2FnZS5FeHRlbnNpb25zWwotICAgICAgICBtb3JlX2V4dGVuc2lvbnNf
cGIyLnJlcGVhdGVkX21lc3NhZ2VfZXh0ZW5zaW9uXS5hZGQoKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZm9yZWlnbiwgdG9wbGV2ZWwuc3VibWVzc2FnZS5FeHRlbnNpb25zWwotICAgICAgICBtb3Jl
X2V4dGVuc2lvbnNfcGIyLnJlcGVhdGVkX21lc3NhZ2VfZXh0ZW5zaW9uXVswXSkKLSAgICBzZWxm
LmFzc2VydFRydWUodG9wbGV2ZWwuSGFzRmllbGQoJ3N1Ym1lc3NhZ2UnKSkKLQotICBkZWYgdGVz
dERpc2Nvbm5lY3Rpb25BZnRlckNsZWFyaW5nRW1wdHlNZXNzYWdlKHNlbGYpOgotICAgIHRvcGxl
dmVsID0gbW9yZV9leHRlbnNpb25zX3BiMi5Ub3BMZXZlbE1lc3NhZ2UoKQotICAgIGV4dGVuZGVl
X3Byb3RvID0gdG9wbGV2ZWwuc3VibWVzc2FnZQotICAgIGV4dGVuc2lvbiA9IG1vcmVfZXh0ZW5z
aW9uc19wYjIub3B0aW9uYWxfbWVzc2FnZV9leHRlbnNpb24KLSAgICBleHRlbnNpb25fcHJvdG8g
PSBleHRlbmRlZV9wcm90by5FeHRlbnNpb25zW2V4dGVuc2lvbl0KLSAgICBleHRlbmRlZV9wcm90
by5DbGVhckV4dGVuc2lvbihleHRlbnNpb24pCi0gICAgZXh0ZW5zaW9uX3Byb3RvLmZvcmVpZ25f
bWVzc2FnZV9pbnQgPSAyMwotCi0gICAgc2VsZi5hc3NlcnRUcnVlKGV4dGVuc2lvbl9wcm90byBp
cyBub3QgZXh0ZW5kZWVfcHJvdG8uRXh0ZW5zaW9uc1tleHRlbnNpb25dKQotCi0gIGRlZiB0ZXN0
RXh0ZW5zaW9uRmFpbHVyZU1vZGVzKHNlbGYpOgotICAgIGV4dGVuZGVlX3Byb3RvID0gdW5pdHRl
c3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLQotICAgICMgVHJ5IG5vbi1leHRlbnNpb24taGFu
ZGxlIGFyZ3VtZW50cyB0byBIYXNFeHRlbnNpb24sCi0gICAgIyBDbGVhckV4dGVuc2lvbigpLCBh
bmQgRXh0ZW5zaW9uc1tdLi4uCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGV4dGVu
ZGVlX3Byb3RvLkhhc0V4dGVuc2lvbiwgMTIzNCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlF
cnJvciwgZXh0ZW5kZWVfcHJvdG8uQ2xlYXJFeHRlbnNpb24sIDEyMzQpCi0gICAgc2VsZi5hc3Nl
cnRSYWlzZXMoS2V5RXJyb3IsIGV4dGVuZGVlX3Byb3RvLkV4dGVuc2lvbnMuX19nZXRpdGVtX18s
IDEyMzQpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGV4dGVuZGVlX3Byb3RvLkV4
dGVuc2lvbnMuX19zZXRpdGVtX18sIDEyMzQsIDUpCi0KLSAgICAjIFRyeSBzb21ldGhpbmcgdGhh
dCAqaXMqIGFuIGV4dGVuc2lvbiBoYW5kbGUsIGp1c3Qgbm90IGZvcgotICAgICMgdGhpcyBtZXNz
YWdlLi4uCi0gICAgZm9yIHVua25vd25faGFuZGxlIGluIChtb3JlX2V4dGVuc2lvbnNfcGIyLm9w
dGlvbmFsX2ludF9leHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2V4
dGVuc2lvbnNfcGIyLm9wdGlvbmFsX21lc3NhZ2VfZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbW9yZV9leHRlbnNpb25zX3BiMi5yZXBlYXRlZF9pbnRfZXh0ZW5zaW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9leHRlbnNpb25zX3BiMi5yZXBlYXRlZF9t
ZXNzYWdlX2V4dGVuc2lvbik6Ci0gICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZXh0
ZW5kZWVfcHJvdG8uSGFzRXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93
bl9oYW5kbGUpCi0gICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZXh0ZW5kZWVfcHJv
dG8uQ2xlYXJFeHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duX2hhbmRs
ZSkKLSAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBleHRlbmRlZV9wcm90by5FeHRl
bnNpb25zLl9fZ2V0aXRlbV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bl9oYW5k
bGUpCi0gICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZXh0ZW5kZWVfcHJvdG8uRXh0
ZW5zaW9ucy5fX3NldGl0ZW1fXywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd25faGFu
ZGxlLCA1KQotCi0gICAgIyBUcnkgY2FsbCBIYXNFeHRlbnNpb24oKSB3aXRoIGEgdmFsaWQgaGFu
ZGxlLCBidXQgZm9yIGEKLSAgICAjICpyZXBlYXRlZCogZmllbGQuICAoSnVzdCBhcyB3aXRoIG5v
bi1leHRlbnNpb24gcmVwZWF0ZWQKLSAgICAjIGZpZWxkcywgSGFzKigpIGlzbid0IHN1cHBvcnRl
ZCBmb3IgZXh0ZW5zaW9uIHJlcGVhdGVkIGZpZWxkcykuCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMo
S2V5RXJyb3IsIGV4dGVuZGVlX3Byb3RvLkhhc0V4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICB1bml0dGVzdF9wYjIucmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbikKLQotICBkZWYgdGVz
dFN0YXRpY1BhcnNlRnJvbShzZWxmKToKLSAgICBwcm90bzEgPSB1bml0dGVzdF9wYjIuVGVzdEFs
bFR5cGVzKCkKLSAgICB0ZXN0X3V0aWwuU2V0QWxsRmllbGRzKHByb3RvMSkKLQotICAgIHN0cmlu
ZzEgPSBwcm90bzEuU2VyaWFsaXplVG9TdHJpbmcoKQotICAgIHByb3RvMiA9IHVuaXR0ZXN0X3Bi
Mi5UZXN0QWxsVHlwZXMuRnJvbVN0cmluZyhzdHJpbmcxKQotCi0gICAgIyBNZXNzYWdlcyBzaG91
bGQgYmUgZXF1YWwuCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwcm90bzIsIHByb3RvMSkKLQotICBk
ZWYgdGVzdE1lcmdlRnJvbVNpbmd1bGFyRmllbGQoc2VsZik6Ci0gICAgIyBUZXN0IG1lcmdlIHdp
dGgganVzdCBhIHNpbmd1bGFyIGZpZWxkLgotICAgIHByb3RvMSA9IHVuaXR0ZXN0X3BiMi5UZXN0
QWxsVHlwZXMoKQotICAgIHByb3RvMS5vcHRpb25hbF9pbnQzMiA9IDEKLQotICAgIHByb3RvMiA9
IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgICMgVGhpcyBzaG91bGRuJ3QgZ2V0IG92
ZXJ3cml0dGVuLgotICAgIHByb3RvMi5vcHRpb25hbF9zdHJpbmcgPSAndmFsdWUnCi0KLSAgICBw
cm90bzIuTWVyZ2VGcm9tKHByb3RvMSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHByb3RvMi5v
cHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKCd2YWx1ZScsIHByb3RvMi5vcHRp
b25hbF9zdHJpbmcpCi0KLSAgZGVmIHRlc3RNZXJnZUZyb21SZXBlYXRlZEZpZWxkKHNlbGYpOgot
ICAgICMgVGVzdCBtZXJnZSB3aXRoIGp1c3QgYSByZXBlYXRlZCBmaWVsZC4KLSAgICBwcm90bzEg
PSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBwcm90bzEucmVwZWF0ZWRfaW50MzIu
YXBwZW5kKDEpCi0gICAgcHJvdG8xLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgyKQotCi0gICAgcHJv
dG8yID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgcHJvdG8yLnJlcGVhdGVkX2lu
dDMyLmFwcGVuZCgwKQotICAgIHByb3RvMi5NZXJnZUZyb20ocHJvdG8xKQotCi0gICAgc2VsZi5h
c3NlcnRFcXVhbCgwLCBwcm90bzIucmVwZWF0ZWRfaW50MzJbMF0pCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCgxLCBwcm90bzIucmVwZWF0ZWRfaW50MzJbMV0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgy
LCBwcm90bzIucmVwZWF0ZWRfaW50MzJbMl0pCi0KLSAgZGVmIHRlc3RNZXJnZUZyb21PcHRpb25h
bEdyb3VwKHNlbGYpOgotICAgICMgVGVzdCBtZXJnZSB3aXRoIGFuIG9wdGlvbmFsIGdyb3VwLgot
ICAgIHByb3RvMSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHByb3RvMS5vcHRp
b25hbGdyb3VwLmEgPSAxMgotICAgIHByb3RvMiA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMo
KQotICAgIHByb3RvMi5NZXJnZUZyb20ocHJvdG8xKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTIs
IHByb3RvMi5vcHRpb25hbGdyb3VwLmEpCi0KLSAgZGVmIHRlc3RNZXJnZUZyb21SZXBlYXRlZE5l
c3RlZE1lc3NhZ2Uoc2VsZik6Ci0gICAgIyBUZXN0IG1lcmdlIHdpdGggYSByZXBlYXRlZCBuZXN0
ZWQgbWVzc2FnZS4KLSAgICBwcm90bzEgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAg
ICBtID0gcHJvdG8xLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpCi0gICAgbS5iYiA9IDEy
MwotICAgIG0gPSBwcm90bzEucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkKLSAgICBtLmJi
ID0gMzIxCi0KLSAgICBwcm90bzIgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBt
ID0gcHJvdG8yLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpCi0gICAgbS5iYiA9IDk5OQot
ICAgIHByb3RvMi5NZXJnZUZyb20ocHJvdG8xKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTk5LCBw
cm90bzIucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VbMF0uYmIpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgxMjMsIHByb3RvMi5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZVsxXS5iYikKLSAgICBzZWxmLmFz
c2VydEVxdWFsKDMyMSwgcHJvdG8yLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlWzJdLmJiKQotCi0g
ICAgcHJvdG8zID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgcHJvdG8zLnJlcGVh
dGVkX25lc3RlZF9tZXNzYWdlLk1lcmdlRnJvbShwcm90bzIucmVwZWF0ZWRfbmVzdGVkX21lc3Nh
Z2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg5OTksIHByb3RvMy5yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZVswXS5iYikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEyMywgcHJvdG8zLnJlcGVhdGVkX25l
c3RlZF9tZXNzYWdlWzFdLmJiKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMzIxLCBwcm90bzMucmVw
ZWF0ZWRfbmVzdGVkX21lc3NhZ2VbMl0uYmIpCi0KLSAgZGVmIHRlc3RNZXJnZUZyb21BbGxGaWVs
ZHMoc2VsZik6Ci0gICAgIyBXaXRoIGFsbCBmaWVsZHMgc2V0LgotICAgIHByb3RvMSA9IHVuaXR0
ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHRlc3RfdXRpbC5TZXRBbGxGaWVsZHMocHJvdG8x
KQotICAgIHByb3RvMiA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHByb3RvMi5N
ZXJnZUZyb20ocHJvdG8xKQotCi0gICAgIyBNZXNzYWdlcyBzaG91bGQgYmUgZXF1YWwuCi0gICAg
c2VsZi5hc3NlcnRFcXVhbChwcm90bzIsIHByb3RvMSkKLQotICAgICMgU2VyaWFsaXplZCBzdHJp
bmcgc2hvdWxkIGJlIGVxdWFsIHRvby4KLSAgICBzdHJpbmcxID0gcHJvdG8xLlNlcmlhbGl6ZVRv
U3RyaW5nKCkKLSAgICBzdHJpbmcyID0gcHJvdG8yLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKHN0cmluZzEsIHN0cmluZzIpCi0KLSAgZGVmIHRlc3RNZXJnZUZyb21F
eHRlbnNpb25zU2luZ3VsYXIoc2VsZik6Ci0gICAgcHJvdG8xID0gdW5pdHRlc3RfcGIyLlRlc3RB
bGxFeHRlbnNpb25zKCkKLSAgICBwcm90bzEuRXh0ZW5zaW9uc1t1bml0dGVzdF9wYjIub3B0aW9u
YWxfaW50MzJfZXh0ZW5zaW9uXSA9IDEKLQotICAgIHByb3RvMiA9IHVuaXR0ZXN0X3BiMi5UZXN0
QWxsRXh0ZW5zaW9ucygpCi0gICAgcHJvdG8yLk1lcmdlRnJvbShwcm90bzEpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbCgKLSAgICAgICAgMSwgcHJvdG8yLkV4dGVuc2lvbnNbdW5pdHRlc3RfcGIyLm9w
dGlvbmFsX2ludDMyX2V4dGVuc2lvbl0pCi0KLSAgZGVmIHRlc3RNZXJnZUZyb21FeHRlbnNpb25z
UmVwZWF0ZWQoc2VsZik6Ci0gICAgcHJvdG8xID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNp
b25zKCkKLSAgICBwcm90bzEuRXh0ZW5zaW9uc1t1bml0dGVzdF9wYjIucmVwZWF0ZWRfaW50MzJf
ZXh0ZW5zaW9uXS5hcHBlbmQoMSkKLSAgICBwcm90bzEuRXh0ZW5zaW9uc1t1bml0dGVzdF9wYjIu
cmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uXS5hcHBlbmQoMikKLQotICAgIHByb3RvMiA9IHVuaXR0
ZXN0X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucygpCi0gICAgcHJvdG8yLkV4dGVuc2lvbnNbdW5pdHRl
c3RfcGIyLnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbl0uYXBwZW5kKDApCi0gICAgcHJvdG8yLk1l
cmdlRnJvbShwcm90bzEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgMywgbGVuKHBy
b3RvMi5FeHRlbnNpb25zW3VuaXR0ZXN0X3BiMi5yZXBlYXRlZF9pbnQzMl9leHRlbnNpb25dKSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAwLCBwcm90bzIuRXh0ZW5zaW9uc1t1bml0
dGVzdF9wYjIucmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uXVswXSkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKAotICAgICAgICAxLCBwcm90bzIuRXh0ZW5zaW9uc1t1bml0dGVzdF9wYjIucmVwZWF0ZWRf
aW50MzJfZXh0ZW5zaW9uXVsxXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAyLCBw
cm90bzIuRXh0ZW5zaW9uc1t1bml0dGVzdF9wYjIucmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uXVsy
XSkKLQotICBkZWYgdGVzdE1lcmdlRnJvbUV4dGVuc2lvbnNOZXN0ZWRNZXNzYWdlKHNlbGYpOgot
ICAgIHByb3RvMSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucygpCi0gICAgZXh0MSA9
IHByb3RvMS5FeHRlbnNpb25zWwotICAgICAgICB1bml0dGVzdF9wYjIucmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2VfZXh0ZW5zaW9uXQotICAgIG0gPSBleHQxLmFkZCgpCi0gICAgbS5iYiA9IDIyMgot
ICAgIG0gPSBleHQxLmFkZCgpCi0gICAgbS5iYiA9IDMzMwotCi0gICAgcHJvdG8yID0gdW5pdHRl
c3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICBleHQyID0gcHJvdG8yLkV4dGVuc2lvbnNb
Ci0gICAgICAgIHVuaXR0ZXN0X3BiMi5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb25d
Ci0gICAgbSA9IGV4dDIuYWRkKCkKLSAgICBtLmJiID0gMTExCi0KLSAgICBwcm90bzIuTWVyZ2VG
cm9tKHByb3RvMSkKLSAgICBleHQyID0gcHJvdG8yLkV4dGVuc2lvbnNbCi0gICAgICAgIHVuaXR0
ZXN0X3BiMi5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb25dCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgzLCBsZW4oZXh0MikpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxMTEsIGV4dDJbMF0u
YmIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyMjIsIGV4dDJbMV0uYmIpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgzMzMsIGV4dDJbMl0uYmIpCi0KLSAgZGVmIHRlc3RNZXJnZUZyb21CdWcoc2VsZik6
Ci0gICAgbWVzc2FnZTEgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBtZXNzYWdl
MiA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotCi0gICAgIyBDYXVzZSBvcHRpb25hbF9u
ZXN0ZWRfbWVzc2FnZSB0byBiZSBpbnN0YW50aWF0ZWQgd2l0aGluIG1lc3NhZ2UxLCBldmVuCi0g
ICAgIyB0aG91Z2ggaXQgaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUgInByZXNlbnQiLgotICAgIG1l
c3NhZ2UxLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlCi0gICAgc2VsZi5hc3NlcnRGYWxzZShtZXNz
YWdlMS5IYXNGaWVsZCgnb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UnKSkKLQotICAgICMgTWVyZ2Ug
aW50byBtZXNzYWdlMi4gIFRoaXMgc2hvdWxkIG5vdCBpbnN0YW50aWF0ZSB0aGUgZmllbGQgaXMg
bWVzc2FnZTIuCi0gICAgbWVzc2FnZTIuTWVyZ2VGcm9tKG1lc3NhZ2UxKQotICAgIHNlbGYuYXNz
ZXJ0RmFsc2UobWVzc2FnZTIuSGFzRmllbGQoJ29wdGlvbmFsX25lc3RlZF9tZXNzYWdlJykpCi0K
LSAgZGVmIHRlc3RDb3B5RnJvbVNpbmd1bGFyRmllbGQoc2VsZik6Ci0gICAgIyBUZXN0IGNvcHkg
d2l0aCBqdXN0IGEgc2luZ3VsYXIgZmllbGQuCi0gICAgcHJvdG8xID0gdW5pdHRlc3RfcGIyLlRl
c3RBbGxUeXBlcygpCi0gICAgcHJvdG8xLm9wdGlvbmFsX2ludDMyID0gMQotICAgIHByb3RvMS5v
cHRpb25hbF9zdHJpbmcgPSAnaW1wb3J0YW50LXRleHQnCi0KLSAgICBwcm90bzIgPSB1bml0dGVz
dF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBwcm90bzIub3B0aW9uYWxfc3RyaW5nID0gJ3ZhbHVl
JwotCi0gICAgcHJvdG8yLkNvcHlGcm9tKHByb3RvMSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEs
IHByb3RvMi5vcHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdpbXBvcnRhbnQt
dGV4dCcsIHByb3RvMi5vcHRpb25hbF9zdHJpbmcpCi0KLSAgZGVmIHRlc3RDb3B5RnJvbVJlcGVh
dGVkRmllbGQoc2VsZik6Ci0gICAgIyBUZXN0IGNvcHkgd2l0aCBhIHJlcGVhdGVkIGZpZWxkLgot
ICAgIHByb3RvMSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHByb3RvMS5yZXBl
YXRlZF9pbnQzMi5hcHBlbmQoMSkKLSAgICBwcm90bzEucmVwZWF0ZWRfaW50MzIuYXBwZW5kKDIp
Ci0KLSAgICBwcm90bzIgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBwcm90bzIu
cmVwZWF0ZWRfaW50MzIuYXBwZW5kKDApCi0gICAgcHJvdG8yLkNvcHlGcm9tKHByb3RvMSkKLQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8yLnJlcGVhdGVkX2ludDMyWzBdKQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMiwgcHJvdG8yLnJlcGVhdGVkX2ludDMyWzFdKQotCi0gIGRlZiB0ZXN0
Q29weUZyb21BbGxGaWVsZHMoc2VsZik6Ci0gICAgIyBXaXRoIGFsbCBmaWVsZHMgc2V0LgotICAg
IHByb3RvMSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHRlc3RfdXRpbC5TZXRB
bGxGaWVsZHMocHJvdG8xKQotICAgIHByb3RvMiA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMo
KQotICAgIHByb3RvMi5Db3B5RnJvbShwcm90bzEpCi0KLSAgICAjIE1lc3NhZ2VzIHNob3VsZCBi
ZSBlcXVhbC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvMiwgcHJvdG8xKQotCi0gICAgIyBT
ZXJpYWxpemVkIHN0cmluZyBzaG91bGQgYmUgZXF1YWwgdG9vLgotICAgIHN0cmluZzEgPSBwcm90
bzEuU2VyaWFsaXplVG9TdHJpbmcoKQotICAgIHN0cmluZzIgPSBwcm90bzIuU2VyaWFsaXplVG9T
dHJpbmcoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nMSwgc3RyaW5nMikKLQotICBkZWYg
dGVzdENvcHlGcm9tU2VsZihzZWxmKToKLSAgICBwcm90bzEgPSB1bml0dGVzdF9wYjIuVGVzdEFs
bFR5cGVzKCkKLSAgICBwcm90bzEucmVwZWF0ZWRfaW50MzIuYXBwZW5kKDEpCi0gICAgcHJvdG8x
Lm9wdGlvbmFsX2ludDMyID0gMgotICAgIHByb3RvMS5vcHRpb25hbF9zdHJpbmcgPSAnaW1wb3J0
YW50LXRleHQnCi0KLSAgICBwcm90bzEuQ29weUZyb20ocHJvdG8xKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMSwgcHJvdG8xLnJlcGVhdGVkX2ludDMyWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MiwgcHJvdG8xLm9wdGlvbmFsX2ludDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ltcG9ydGFu
dC10ZXh0JywgcHJvdG8xLm9wdGlvbmFsX3N0cmluZykKLQotICBkZWYgdGVzdENvcHlGcm9tQmFk
VHlwZShzZWxmKToKLSAgICAjIFRoZSBweXRob24gaW1wbGVtZW50YXRpb24gZG9lc24ndCByYWlz
ZSBhbiBleGNlcHRpb24gaW4gdGhpcwotICAgICMgY2FzZS4gSW4gdGhlb3J5IGl0IHNob3VsZC4K
LSAgICBpZiBhcGlfaW1wbGVtZW50YXRpb24uVHlwZSgpID09ICdweXRob24nOgotICAgICAgcmV0
dXJuCi0gICAgcHJvdG8xID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgcHJvdG8y
ID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICBzZWxmLmFzc2VydFJhaXNl
cyhUeXBlRXJyb3IsIHByb3RvMS5Db3B5RnJvbSwgcHJvdG8yKQotCi0gIGRlZiB0ZXN0RGVlcENv
cHkoc2VsZik6Ci0gICAgcHJvdG8xID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAg
cHJvdG8xLm9wdGlvbmFsX2ludDMyID0gMQotICAgIHByb3RvMiA9IGNvcHkuZGVlcGNvcHkocHJv
dG8xKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8yLm9wdGlvbmFsX2ludDMyKQotCi0g
ICAgcHJvdG8xLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgyKQotICAgIHByb3RvMS5yZXBlYXRlZF9p
bnQzMi5hcHBlbmQoMykKLSAgICBjb250YWluZXIgPSBjb3B5LmRlZXBjb3B5KHByb3RvMS5yZXBl
YXRlZF9pbnQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKFsyLCAzXSwgY29udGFpbmVyKQotCi0g
ICAgIyBUT0RPKGFudXJhYWcpOiBJbXBsZW1lbnQgZGVlcGNvcHkgZm9yIHJlcGVhdGVkIGNvbXBv
c2l0ZSAvIGV4dGVuc2lvbiBkaWN0Ci0KLSAgZGVmIHRlc3RDbGVhcihzZWxmKToKLSAgICBwcm90
byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgICMgQysrIGltcGxlbWVudGF0aW9u
IGRvZXMgbm90IHN1cHBvcnQgbGF6eSBmaWVsZHMgcmlnaHQgbm93IHNvIGxlYXZlIGl0Ci0gICAg
IyBvdXQgZm9yIG5vdy4KLSAgICBpZiBhcGlfaW1wbGVtZW50YXRpb24uVHlwZSgpID09ICdweXRo
b24nOgotICAgICAgdGVzdF91dGlsLlNldEFsbEZpZWxkcyhwcm90bykKLSAgICBlbHNlOgotICAg
ICAgdGVzdF91dGlsLlNldEFsbE5vbkxhenlGaWVsZHMocHJvdG8pCi0gICAgIyBDbGVhciB0aGUg
bWVzc2FnZS4KLSAgICBwcm90by5DbGVhcigpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5C
eXRlU2l6ZSgpLCAwKQotICAgIGVtcHR5X3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBl
cygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwcm90bywgZW1wdHlfcHJvdG8pCi0KLSAgICAjIFRl
c3QgaWYgZXh0ZW5zaW9ucyB3aGljaCB3ZXJlIHNldCBhcmUgY2xlYXJlZC4KLSAgICBwcm90byA9
IHVuaXR0ZXN0X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucygpCi0gICAgdGVzdF91dGlsLlNldEFsbEV4
dGVuc2lvbnMocHJvdG8pCi0gICAgIyBDbGVhciB0aGUgbWVzc2FnZS4KLSAgICBwcm90by5DbGVh
cigpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5CeXRlU2l6ZSgpLCAwKQotICAgIGVtcHR5
X3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKHByb3RvLCBlbXB0eV9wcm90bykKLQotICBkZWYgdGVzdERpc2Nvbm5lY3RpbmdCZWZv
cmVDbGVhcihzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQot
ICAgIG5lc3RlZCA9IHByb3RvLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlCi0gICAgcHJvdG8uQ2xl
YXIoKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXN0ZWQgaXMgbm90IHByb3RvLm9wdGlvbmFsX25l
c3RlZF9tZXNzYWdlKQotICAgIG5lc3RlZC5iYiA9IDIzCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5v
dCBwcm90by5IYXNGaWVsZCgnb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UnKSkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKDAsIHByb3RvLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLmJiKQotCi0gICAgcHJv
dG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBuZXN0ZWQgPSBwcm90by5vcHRp
b25hbF9uZXN0ZWRfbWVzc2FnZQotICAgIG5lc3RlZC5iYiA9IDUKLSAgICBmb3JlaWduID0gcHJv
dG8ub3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlCi0gICAgZm9yZWlnbi5jID0gNgotCi0gICAgcHJv
dG8uQ2xlYXIoKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXN0ZWQgaXMgbm90IHByb3RvLm9wdGlv
bmFsX25lc3RlZF9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3JlaWduIGlzIG5vdCBw
cm90by5vcHRpb25hbF9mb3JlaWduX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBu
ZXN0ZWQuYmIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBmb3JlaWduLmMpCi0gICAgbmVzdGVk
LmJiID0gMTUKLSAgICBmb3JlaWduLmMgPSAxNgotICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJvdG8u
SGFzRmllbGQoJ29wdGlvbmFsX25lc3RlZF9tZXNzYWdlJykpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bCgwLCBwcm90by5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5iYikKLSAgICBzZWxmLmFzc2VydEZh
bHNlKHByb3RvLkhhc0ZpZWxkKCdvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UnKSkKLSAgICBzZWxm
LmFzc2VydEVxdWFsKDAsIHByb3RvLm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZS5jKQotCi0gIGRl
ZiB0ZXN0T25lT2Yoc2VsZik6Ci0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVz
KCkKLSAgICBwcm90by5vbmVvZl91aW50MzIgPSAxMAotICAgIHByb3RvLm9uZW9mX25lc3RlZF9t
ZXNzYWdlLmJiID0gMTEKLSAgICBzZWxmLmFzc2VydEVxdWFsKDExLCBwcm90by5vbmVvZl9uZXN0
ZWRfbWVzc2FnZS5iYikKLSAgICBzZWxmLmFzc2VydEZhbHNlKHByb3RvLkhhc0ZpZWxkKCdvbmVv
Zl91aW50MzInKSkKLSAgICBuZXN0ZWQgPSBwcm90by5vbmVvZl9uZXN0ZWRfbWVzc2FnZQotICAg
IHByb3RvLm9uZW9mX3N0cmluZyA9ICdhYmMnCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJywg
cHJvdG8ub25lb2Zfc3RyaW5nKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTEsIG5lc3RlZC5iYikK
LSAgICBzZWxmLmFzc2VydEZhbHNlKHByb3RvLkhhc0ZpZWxkKCdvbmVvZl9uZXN0ZWRfbWVzc2Fn
ZScpKQotCi0gIGRlZiBhc3NlcnRJbml0aWFsaXplZChzZWxmLCBwcm90byk6Ci0gICAgc2VsZi5h
c3NlcnRUcnVlKHByb3RvLklzSW5pdGlhbGl6ZWQoKSkKLSAgICAjIE5laXRoZXIgbWV0aG9kIHNo
b3VsZCByYWlzZSBhbiBleGNlcHRpb24uCi0gICAgcHJvdG8uU2VyaWFsaXplVG9TdHJpbmcoKQot
ICAgIHByb3RvLlNlcmlhbGl6ZVBhcnRpYWxUb1N0cmluZygpCi0KLSAgZGVmIGFzc2VydE5vdElu
aXRpYWxpemVkKHNlbGYsIHByb3RvKToKLSAgICBzZWxmLmFzc2VydEZhbHNlKHByb3RvLklzSW5p
dGlhbGl6ZWQoKSkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhtZXNzYWdlLkVuY29kZUVycm9yLCBw
cm90by5TZXJpYWxpemVUb1N0cmluZykKLSAgICAjICJQYXJ0aWFsIiBzZXJpYWxpemF0aW9uIGRv
ZXNuJ3QgY2FyZSBpZiBtZXNzYWdlIGlzIHVuaW5pdGlhbGl6ZWQuCi0gICAgcHJvdG8uU2VyaWFs
aXplUGFydGlhbFRvU3RyaW5nKCkKLQotICBkZWYgdGVzdElzSW5pdGlhbGl6ZWQoc2VsZik6Ci0g
ICAgIyBUcml2aWFsIGNhc2VzIC0gYWxsIG9wdGlvbmFsIGZpZWxkcyBhbmQgZXh0ZW5zaW9ucy4K
LSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHNlbGYuYXNzZXJ0
SW5pdGlhbGl6ZWQocHJvdG8pCi0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbEV4dGVu
c2lvbnMoKQotICAgIHNlbGYuYXNzZXJ0SW5pdGlhbGl6ZWQocHJvdG8pCi0KLSAgICAjIFRoZSBj
YXNlIG9mIHVuaW5pdGlhbGl6ZWQgcmVxdWlyZWQgZmllbGRzLgotICAgIHByb3RvID0gdW5pdHRl
c3RfcGIyLlRlc3RSZXF1aXJlZCgpCi0gICAgc2VsZi5hc3NlcnROb3RJbml0aWFsaXplZChwcm90
bykKLSAgICBwcm90by5hID0gcHJvdG8uYiA9IHByb3RvLmMgPSAyCi0gICAgc2VsZi5hc3NlcnRJ
bml0aWFsaXplZChwcm90bykKLQotICAgICMgVGhlIGNhc2Ugb2YgdW5pbml0aWFsaXplZCBzdWJt
ZXNzYWdlLgotICAgIHByb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RSZXF1aXJlZEZvcmVpZ24oKQot
ICAgIHNlbGYuYXNzZXJ0SW5pdGlhbGl6ZWQocHJvdG8pCi0gICAgcHJvdG8ub3B0aW9uYWxfbWVz
c2FnZS5hID0gMQotICAgIHNlbGYuYXNzZXJ0Tm90SW5pdGlhbGl6ZWQocHJvdG8pCi0gICAgcHJv
dG8ub3B0aW9uYWxfbWVzc2FnZS5iID0gMAotICAgIHByb3RvLm9wdGlvbmFsX21lc3NhZ2UuYyA9
IDAKLSAgICBzZWxmLmFzc2VydEluaXRpYWxpemVkKHByb3RvKQotCi0gICAgIyBVbmluaXRpYWxp
emVkIHJlcGVhdGVkIHN1Ym1lc3NhZ2UuCi0gICAgbWVzc2FnZTEgPSBwcm90by5yZXBlYXRlZF9t
ZXNzYWdlLmFkZCgpCi0gICAgc2VsZi5hc3NlcnROb3RJbml0aWFsaXplZChwcm90bykKLSAgICBt
ZXNzYWdlMS5hID0gbWVzc2FnZTEuYiA9IG1lc3NhZ2UxLmMgPSAwCi0gICAgc2VsZi5hc3NlcnRJ
bml0aWFsaXplZChwcm90bykKLQotICAgICMgVW5pbml0aWFsaXplZCByZXBlYXRlZCBncm91cCBp
biBhbiBleHRlbnNpb24uCi0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbEV4dGVuc2lv
bnMoKQotICAgIGV4dGVuc2lvbiA9IHVuaXR0ZXN0X3BiMi5UZXN0UmVxdWlyZWQubXVsdGkKLSAg
ICBtZXNzYWdlMSA9IHByb3RvLkV4dGVuc2lvbnNbZXh0ZW5zaW9uXS5hZGQoKQotICAgIG1lc3Nh
Z2UyID0gcHJvdG8uRXh0ZW5zaW9uc1tleHRlbnNpb25dLmFkZCgpCi0gICAgc2VsZi5hc3NlcnRO
b3RJbml0aWFsaXplZChwcm90bykKLSAgICBtZXNzYWdlMS5hID0gMQotICAgIG1lc3NhZ2UxLmIg
PSAxCi0gICAgbWVzc2FnZTEuYyA9IDEKLSAgICBzZWxmLmFzc2VydE5vdEluaXRpYWxpemVkKHBy
b3RvKQotICAgIG1lc3NhZ2UyLmEgPSAyCi0gICAgbWVzc2FnZTIuYiA9IDIKLSAgICBtZXNzYWdl
Mi5jID0gMgotICAgIHNlbGYuYXNzZXJ0SW5pdGlhbGl6ZWQocHJvdG8pCi0KLSAgICAjIFVuaW5p
dGlhbGl6ZWQgbm9ucmVwZWF0ZWQgbWVzc2FnZSBpbiBhbiBleHRlbnNpb24uCi0gICAgcHJvdG8g
PSB1bml0dGVzdF9wYjIuVGVzdEFsbEV4dGVuc2lvbnMoKQotICAgIGV4dGVuc2lvbiA9IHVuaXR0
ZXN0X3BiMi5UZXN0UmVxdWlyZWQuc2luZ2xlCi0gICAgcHJvdG8uRXh0ZW5zaW9uc1tleHRlbnNp
b25dLmEgPSAxCi0gICAgc2VsZi5hc3NlcnROb3RJbml0aWFsaXplZChwcm90bykKLSAgICBwcm90
by5FeHRlbnNpb25zW2V4dGVuc2lvbl0uYiA9IDIKLSAgICBwcm90by5FeHRlbnNpb25zW2V4dGVu
c2lvbl0uYyA9IDMKLSAgICBzZWxmLmFzc2VydEluaXRpYWxpemVkKHByb3RvKQotCi0gICAgIyBU
cnkgcGFzc2luZyBhbiBlcnJvcnMgbGlzdC4KLSAgICBlcnJvcnMgPSBbXQotICAgIHByb3RvID0g
dW5pdHRlc3RfcGIyLlRlc3RSZXF1aXJlZCgpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShwcm90by5J
c0luaXRpYWxpemVkKGVycm9ycykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcnMsIFsnYScs
ICdiJywgJ2MnXSkKLQotICBAdW5pdHRlc3Quc2tpcElmKAotICAgICAgYXBpX2ltcGxlbWVudGF0
aW9uLlR5cGUoKSAhPSAnY3BwJyBvciBhcGlfaW1wbGVtZW50YXRpb24uVmVyc2lvbigpICE9IDIs
Ci0gICAgICAnRXJyb3JzIGFyZSBvbmx5IGF2YWlsYWJsZSBmcm9tIHRoZSBtb3N0IHJlY2VudCBD
KysgaW1wbGVtZW50YXRpb24uJykKLSAgZGVmIHRlc3RGaWxlRGVzY3JpcHRvckVycm9ycyhzZWxm
KToKLSAgICBmaWxlX25hbWUgPSAndGVzdF9maWxlX2Rlc2NyaXB0b3JfZXJyb3JzLnByb3RvJwot
ICAgIHBhY2thZ2VfbmFtZSA9ICd0ZXN0X2ZpbGVfZGVzY3JpcHRvcl9lcnJvcnMucHJvdG8nCi0g
ICAgZmlsZV9kZXNjcmlwdG9yX3Byb3RvID0gZGVzY3JpcHRvcl9wYjIuRmlsZURlc2NyaXB0b3JQ
cm90bygpCi0gICAgZmlsZV9kZXNjcmlwdG9yX3Byb3RvLm5hbWUgPSBmaWxlX25hbWUKLSAgICBm
aWxlX2Rlc2NyaXB0b3JfcHJvdG8ucGFja2FnZSA9IHBhY2thZ2VfbmFtZQotICAgIG0xID0gZmls
ZV9kZXNjcmlwdG9yX3Byb3RvLm1lc3NhZ2VfdHlwZS5hZGQoKQotICAgIG0xLm5hbWUgPSAnbXNn
MScKLSAgICAjIENvbXBpbGVzIHRoZSBwcm90byBpbnRvIHRoZSBDKysgZGVzY3JpcHRvciBwb29s
Ci0gICAgZGVzY3JpcHRvci5GaWxlRGVzY3JpcHRvcigKLSAgICAgICAgZmlsZV9uYW1lLAotICAg
ICAgICBwYWNrYWdlX25hbWUsCi0gICAgICAgIHNlcmlhbGl6ZWRfcGI9ZmlsZV9kZXNjcmlwdG9y
X3Byb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCi0gICAgIyBBZGQgYSBGaWxlRGVzY3JpcHRvclBy
b3RvIHRoYXQgaGFzIGR1cGxpY2F0ZSBzeW1ib2xzCi0gICAgYW5vdGhlcl9maWxlX25hbWUgPSAn
YW5vdGhlcl90ZXN0X2ZpbGVfZGVzY3JpcHRvcl9lcnJvcnMucHJvdG8nCi0gICAgZmlsZV9kZXNj
cmlwdG9yX3Byb3RvLm5hbWUgPSBhbm90aGVyX2ZpbGVfbmFtZQotICAgIG0yID0gZmlsZV9kZXNj
cmlwdG9yX3Byb3RvLm1lc3NhZ2VfdHlwZS5hZGQoKQotICAgIG0yLm5hbWUgPSAnbXNnMicKLSAg
ICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206Ci0gICAgICBkZXNjcmlw
dG9yLkZpbGVEZXNjcmlwdG9yKAotICAgICAgICAgIGFub3RoZXJfZmlsZV9uYW1lLAotICAgICAg
ICAgIHBhY2thZ2VfbmFtZSwKLSAgICAgICAgICBzZXJpYWxpemVkX3BiPWZpbGVfZGVzY3JpcHRv
cl9wcm90by5TZXJpYWxpemVUb1N0cmluZygpKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0
dHIoY20sICdleGNlcHRpb24nKSwgJyVzIG5vdCByYWlzZWQnICUKLSAgICAgICAgICAgICAgICAg
ICAgICBnZXRhdHRyKGNtLmV4cGVjdGVkLCAnX19uYW1lX18nLCBjbS5leHBlY3RlZCkpCi0gICAg
ICBzZWxmLmFzc2VydEluKCd0ZXN0X2ZpbGVfZGVzY3JpcHRvcl9lcnJvcnMucHJvdG8nLCBzdHIo
Y20uZXhjZXB0aW9uKSkKLSAgICAgICMgRXJyb3IgbWVzc2FnZSB3aWxsIHNheSBzb21ldGhpbmcg
YWJvdXQgdGhpcyBkZWZpbml0aW9uIGJlaW5nIGEKLSAgICAgICMgZHVwbGljYXRlLCB0aG91Z2gg
d2UgZG9uJ3QgY2hlY2sgdGhlIG1lc3NhZ2UgZXhhY3RseSB0byBhdm9pZCBhCi0gICAgICAjIGRl
cGVuZGVuY3kgb24gdGhlIEMrKyBsb2dnaW5nIGNvZGUuCi0gICAgICBzZWxmLmFzc2VydEluKCd0
ZXN0X2ZpbGVfZGVzY3JpcHRvcl9lcnJvcnMubXNnMScsIHN0cihjbS5leGNlcHRpb24pKQotCi0g
IGRlZiB0ZXN0U3RyaW5nVVRGOEVuY29kaW5nKHNlbGYpOgotICAgIHByb3RvID0gdW5pdHRlc3Rf
cGIyLlRlc3RBbGxUeXBlcygpCi0KLSAgICAjIEFzc2lnbm1lbnQgb2YgYSB1bmljb2RlIG9iamVj
dCB0byBhIGZpZWxkIG9mIHR5cGUgJ2J5dGVzJyBpcyBub3QgYWxsb3dlZC4KLSAgICBzZWxmLmFz
c2VydFJhaXNlcyhUeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgc2V0YXR0ciwgcHJv
dG8sICdvcHRpb25hbF9ieXRlcycsIHUndW5pY29kZSBvYmplY3QnKQotCi0gICAgIyBDaGVjayB0
aGF0IHRoZSBkZWZhdWx0IHZhbHVlIGlzIG9mIHB5dGhvbidzICd1bmljb2RlJyB0eXBlLgotICAg
IHNlbGYuYXNzZXJ0RXF1YWwodHlwZShwcm90by5vcHRpb25hbF9zdHJpbmcpLCBzaXgudGV4dF90
eXBlKQotCi0gICAgcHJvdG8ub3B0aW9uYWxfc3RyaW5nID0gc2l4LnRleHRfdHlwZSgnVGVzdGlu
ZycpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5vcHRpb25hbF9zdHJpbmcsIHN0cignVGVz
dGluZycpKQotCi0gICAgIyBBc3NpZ24gYSB2YWx1ZSBvZiB0eXBlICdzdHInIHdoaWNoIGNhbiBi
ZSBlbmNvZGVkIGluIFVURi04LgotICAgIHByb3RvLm9wdGlvbmFsX3N0cmluZyA9IHN0cignVGVz
dGluZycpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5vcHRpb25hbF9zdHJpbmcsIHNpeC50
ZXh0X3R5cGUoJ1Rlc3RpbmcnKSkKLQotICAgICMgVHJ5IHRvIGFzc2lnbiBhICdieXRlcycgb2Jq
ZWN0IHdoaWNoIGNvbnRhaW5zIG5vbi1VVEYtOC4KLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1
ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIsIHByb3RvLCAnb3B0aW9uYWxf
c3RyaW5nJywgYidhXHg4MGEnKQotICAgICMgTm8gZXhjZXB0aW9uOiBBc3NpZ24gYWxyZWFkeSBl
bmNvZGVkIFVURi04IGJ5dGVzIHRvIGEgc3RyaW5nIGZpZWxkLgotICAgIHV0ZjhfYnl0ZXMgPSB1
J9Ci0LXRgdGCJy5lbmNvZGUoJ3V0Zi04JykKLSAgICBwcm90by5vcHRpb25hbF9zdHJpbmcgPSB1
dGY4X2J5dGVzCi0gICAgIyBObyBleGNlcHRpb246IEFzc2lnbiB0aGUgYSBub24tYXNjaWkgdW5p
Y29kZSBvYmplY3QuCi0gICAgcHJvdG8ub3B0aW9uYWxfc3RyaW5nID0gdSfQotC10YHRgicKLSAg
ICAjIE5vIGV4Y2VwdGlvbiB0aHJvd24gKG5vcm1hbCBzdHIgYXNzaWdubWVudCBjb250YWluaW5n
IEFTQ0lJKS4KLSAgICBwcm90by5vcHRpb25hbF9zdHJpbmcgPSAnYWJjJwotCi0gIGRlZiB0ZXN0
U3RyaW5nVVRGOFNlcmlhbGl6YXRpb24oc2VsZik6Ci0gICAgcHJvdG8gPSBtZXNzYWdlX3NldF9l
eHRlbnNpb25zX3BiMi5UZXN0TWVzc2FnZVNldCgpCi0gICAgZXh0ZW5zaW9uX21lc3NhZ2UgPSBt
ZXNzYWdlX3NldF9leHRlbnNpb25zX3BiMi5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjIKLSAgICBl
eHRlbnNpb24gPSBleHRlbnNpb25fbWVzc2FnZS5tZXNzYWdlX3NldF9leHRlbnNpb24KLQotICAg
IHRlc3RfdXRmOCA9IHUn0KLQtdGB0YInCi0gICAgdGVzdF91dGY4X2J5dGVzID0gdGVzdF91dGY4
LmVuY29kZSgndXRmLTgnKQotCi0gICAgIyAnVGVzdCcgaW4gYW5vdGhlciBsYW5ndWFnZSwgdXNp
bmcgVVRGLTggY2hhcnNldC4KLSAgICBwcm90by5FeHRlbnNpb25zW2V4dGVuc2lvbl0uc3RyID0g
dGVzdF91dGY4Ci0KLSAgICAjIFNlcmlhbGl6ZSB1c2luZyB0aGUgTWVzc2FnZVNldCB3aXJlIGZv
cm1hdCAodGhpcyBpcyBzcGVjaWZpZWQgaW4gdGhlCi0gICAgIyAucHJvdG8gZmlsZSkuCi0gICAg
c2VyaWFsaXplZCA9IHByb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLQotICAgICMgQ2hlY2sgYnl0
ZSBzaXplLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uQnl0ZVNpemUoKSwgbGVuKHNlcmlh
bGl6ZWQpKQotCi0gICAgcmF3ID0gdW5pdHRlc3RfbXNldF9wYjIuUmF3TWVzc2FnZVNldCgpCi0g
ICAgYnl0ZXNfcmVhZCA9IHJhdy5NZXJnZUZyb21TdHJpbmcoc2VyaWFsaXplZCkKLSAgICBzZWxm
LmFzc2VydEVxdWFsKGxlbihzZXJpYWxpemVkKSwgYnl0ZXNfcmVhZCkKLQotICAgIG1lc3NhZ2Uy
ID0gbWVzc2FnZV9zZXRfZXh0ZW5zaW9uc19wYjIuVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yKCkK
LQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHJhdy5pdGVtKSkKLSAgICAjIENoZWNrIHRo
YXQgdGhlIHR5cGVfaWQgaXMgdGhlIHNhbWUgYXMgdGhlIHRhZyBJRCBpbiB0aGUgLnByb3RvIGZp
bGUuCi0gICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuaXRlbVswXS50eXBlX2lkLCA5ODQxODYzNCkK
LQotICAgICMgQ2hlY2sgdGhlIGFjdHVhbCBieXRlcyBvbiB0aGUgd2lyZS4KLSAgICBzZWxmLmFz
c2VydFRydWUocmF3Lml0ZW1bMF0ubWVzc2FnZS5lbmRzd2l0aCh0ZXN0X3V0ZjhfYnl0ZXMpKQot
ICAgIGJ5dGVzX3JlYWQgPSBtZXNzYWdlMi5NZXJnZUZyb21TdHJpbmcocmF3Lml0ZW1bMF0ubWVz
c2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyYXcuaXRlbVswXS5tZXNzYWdlKSwgYnl0
ZXNfcmVhZCkKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShtZXNzYWdlMi5zdHIpLCBzaXgu
dGV4dF90eXBlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZTIuc3RyLCB0ZXN0X3V0Zjgp
Ci0KLSAgICAjIFRoZSBwdXJlIFB5dGhvbiBBUEkgdGhyb3dzIGFuIGV4Y2VwdGlvbiBvbiBNZXJn
ZUZyb21TdHJpbmcoKSwKLSAgICAjIGlmIGFueSBvZiB0aGUgc3RyaW5nIGZpZWxkcyBvZiB0aGUg
bWVzc2FnZSBjYW4ndCBiZSBVVEYtOCBkZWNvZGVkLgotICAgICMgVGhlIEMrKyBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgQVBJIGhhcyBubyB3YXkgdG8gY2hlY2sgdGhhdCBvbgotICAgICMgTWVyZ2VG
cm9tU3RyaW5nIGFuZCB0aHVzIGhhcyBubyB3YXkgdG8gdGhyb3cgdGhlIGV4Y2VwdGlvbi4KLSAg
ICAjCi0gICAgIyBUaGUgcHVyZSBQeXRob24gQVBJIGFsd2F5cyByZXR1cm5zIG9iamVjdHMgb2Yg
dHlwZSAndW5pY29kZScgKFVURi04Ci0gICAgIyBlbmNvZGVkKSwgb3IgJ2J5dGVzJyAoaW4gNyBi
aXQgQVNDSUkpLgotICAgIGJhZGJ5dGVzID0gcmF3Lml0ZW1bMF0ubWVzc2FnZS5yZXBsYWNlKAot
ICAgICAgICB0ZXN0X3V0ZjhfYnl0ZXMsIGxlbih0ZXN0X3V0ZjhfYnl0ZXMpICogYidceGZmJykK
LQotICAgIHVuaWNvZGVfZGVjb2RlX2ZhaWxlZCA9IEZhbHNlCi0gICAgdHJ5OgotICAgICAgbWVz
c2FnZTIuTWVyZ2VGcm9tU3RyaW5nKGJhZGJ5dGVzKQotICAgIGV4Y2VwdCBVbmljb2RlRGVjb2Rl
RXJyb3I6Ci0gICAgICB1bmljb2RlX2RlY29kZV9mYWlsZWQgPSBUcnVlCi0gICAgc3RyaW5nX2Zp
ZWxkID0gbWVzc2FnZTIuc3RyCi0gICAgc2VsZi5hc3NlcnRUcnVlKHVuaWNvZGVfZGVjb2RlX2Zh
aWxlZCBvciB0eXBlKHN0cmluZ19maWVsZCkgaXMgYnl0ZXMpCi0KLSAgZGVmIHRlc3RCeXRlc0lu
VGV4dEZvcm1hdChzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMo
b3B0aW9uYWxfYnl0ZXM9YidceDAwXHg3Zlx4ODBceGZmJykKLSAgICBzZWxmLmFzc2VydEVxdWFs
KHUnb3B0aW9uYWxfYnl0ZXM6ICJcXDAwMFxcMTc3XFwyMDBcXDM3NyJcbicsCi0gICAgICAgICAg
ICAgICAgICAgICBzaXgudGV4dF90eXBlKHByb3RvKSkKLQotICBkZWYgdGVzdEVtcHR5TmVzdGVk
TWVzc2FnZShzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQot
ICAgIHByb3RvLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLk1lcmdlRnJvbSgKLSAgICAgICAgdW5p
dHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlKCkpCi0gICAgc2VsZi5hc3NlcnRU
cnVlKHByb3RvLkhhc0ZpZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZScpKQotCi0gICAgcHJv
dG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBwcm90by5vcHRpb25hbF9uZXN0
ZWRfbWVzc2FnZS5Db3B5RnJvbSgKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5O
ZXN0ZWRNZXNzYWdlKCkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLkhhc0ZpZWxkKCdvcHRp
b25hbF9uZXN0ZWRfbWVzc2FnZScpKQotCi0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFs
bFR5cGVzKCkKLSAgICBieXRlc19yZWFkID0gcHJvdG8ub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Uu
TWVyZ2VGcm9tU3RyaW5nKGInJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJ5dGVzX3JlYWQp
Ci0gICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLkhhc0ZpZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZScpKQotCi0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBw
cm90by5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoYicnKQotICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwcm90by5IYXNGaWVsZCgnb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UnKSkK
LQotICAgIHNlcmlhbGl6ZWQgPSBwcm90by5TZXJpYWxpemVUb1N0cmluZygpCi0gICAgcHJvdG8y
ID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAg
ICAgICAgbGVuKHNlcmlhbGl6ZWQpLAotICAgICAgICBwcm90bzIuTWVyZ2VGcm9tU3RyaW5nKHNl
cmlhbGl6ZWQpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90bzIuSGFzRmllbGQoJ29wdGlvbmFs
X25lc3RlZF9tZXNzYWdlJykpCi0KLSAgZGVmIHRlc3RTZXRJblBhcmVudChzZWxmKToKLSAgICBw
cm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
cHJvdG8uSGFzRmllbGQoJ29wdGlvbmFsZ3JvdXAnKSkKLSAgICBwcm90by5vcHRpb25hbGdyb3Vw
LlNldEluUGFyZW50KCkKLSAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uSGFzRmllbGQoJ29wdGlv
bmFsZ3JvdXAnKSkKLQotICBkZWYgdGVzdFBhY2thZ2VJbml0aWFsaXphdGlvbkltcG9ydChzZWxm
KToKLSAgICAiIiJUZXN0IHRoYXQgd2UgY2FuIGltcG9ydCBuZXN0ZWQgbWVzc2FnZXMgZnJvbSB0
aGVpciBfX2luaXRfXy5weS4KLQotICAgIFN1Y2ggc2V0dXAgaXMgbm90IHRyaXZpYWwgc2luY2Ug
YXQgdGhlIHRpbWUgb2YgcHJvY2Vzc2luZyBvZiBfX2luaXRfXy5weSBvbmUKLSAgICBjYW4ndCBy
ZWZlciB0byBpdHMgc3VibW9kdWxlcyBieSBuYW1lIGluIGNvZGUsIHNvIGV4cHJlc3Npb25zIGxp
a2UKLSAgICBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwuaW1wb3J0X3Rlc3RfcGFja2FnZS5pbm5l
cl9wYjIKLSAgICBkb24ndCB3b3JrLiBUaGV5IGRvIHdvcmsgaW4gaW1wb3J0cywgc28gd2UgaGF2
ZSBhc3NpZ24gYW4gYWxpYXMgYXQgaW1wb3J0Ci0gICAgYW5kIHRoZW4gdXNlIHRoYXQgYWxpYXMg
aW4gZ2VuZXJhdGVkIGNvZGUuCi0gICAgIiIiCi0gICAgIyBXZSBpbXBvcnQgaGVyZSBzaW5jZSBp
dCdzIHRoZSBpbXBvcnQgdGhhdCB1c2VkIHRvIGZhaWwsIGFuZCB3ZSB3YW50Ci0gICAgIyB0aGUg
ZmFpbHVyZSB0byBoYXZlIHRoZSByaWdodCBjb250ZXh0LgotICAgICMgcHlsaW50OiBkaXNhYmxl
PWctaW1wb3J0LW5vdC1hdC10b3AKLSAgICBmcm9tIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbCBp
bXBvcnQgaW1wb3J0X3Rlc3RfcGFja2FnZQotICAgICMgcHlsaW50OiBlbmFibGU9Zy1pbXBvcnQt
bm90LWF0LXRvcAotICAgIG1zZyA9IGltcG9ydF90ZXN0X3BhY2thZ2UubXlwcm90by5PdXRlcigp
Ci0gICAgIyBKdXN0IGNoZWNrIHRoZSBkZWZhdWx0IHZhbHVlLgotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoNTcsIG1zZy5pbm5lci52YWx1ZSkKLQotIyAgU2luY2Ugd2UgaGFkIHNvIG1hbnkgdGVzdHMg
Zm9yIHByb3RvY29sIGJ1ZmZlciBlcXVhbGl0eSwgd2UgYnJva2UgdGhlc2Ugb3V0Ci0jICBpbnRv
IHNlcGFyYXRlIFRlc3RDYXNlIGNsYXNzZXMuCi0KLQotY2xhc3MgVGVzdEFsbFR5cGVzRXF1YWxp
dHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2Vs
Zi5maXJzdF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHNlbGYuc2Vj
b25kX3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0KLSAgZGVmIHRlc3ROb3RI
YXNoYWJsZShzZWxmKToKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIHNl
bGYuZmlyc3RfcHJvdG8pCi0KLSAgZGVmIHRlc3RTZWxmRXF1YWxpdHkoc2VsZik6Ci0gICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLmZpcnN0X3Byb3RvLCBzZWxmLmZpcnN0X3Byb3RvKQotCi0gIGRl
ZiB0ZXN0RW1wdHlQcm90b3NFcXVhbChzZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYu
Zmlyc3RfcHJvdG8sIHNlbGYuc2Vjb25kX3Byb3RvKQotCi0KLWNsYXNzIEZ1bGxQcm90b3NFcXVh
bGl0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICIiIkVxdWFsaXR5IHRlc3RzIHVzaW5n
IGNvbXBsZXRlbHktZnVsbCBwcm90b3MgYXMgYSBzdGFydGluZyBwb2ludC4iIiIKLQotICBkZWYg
c2V0VXAoc2VsZik6Ci0gICAgc2VsZi5maXJzdF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxs
VHlwZXMoKQotICAgIHNlbGYuc2Vjb25kX3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBl
cygpCi0gICAgdGVzdF91dGlsLlNldEFsbEZpZWxkcyhzZWxmLmZpcnN0X3Byb3RvKQotICAgIHRl
c3RfdXRpbC5TZXRBbGxGaWVsZHMoc2VsZi5zZWNvbmRfcHJvdG8pCi0KLSAgZGVmIHRlc3ROb3RI
YXNoYWJsZShzZWxmKToKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIHNl
bGYuZmlyc3RfcHJvdG8pCi0KLSAgZGVmIHRlc3ROb25lTm90RXF1YWwoc2VsZik6Ci0gICAgc2Vs
Zi5hc3NlcnROb3RFcXVhbChzZWxmLmZpcnN0X3Byb3RvLCBOb25lKQotICAgIHNlbGYuYXNzZXJ0
Tm90RXF1YWwoTm9uZSwgc2VsZi5zZWNvbmRfcHJvdG8pCi0KLSAgZGVmIHRlc3ROb3RFcXVhbFRv
T3RoZXJNZXNzYWdlKHNlbGYpOgotICAgIHRoaXJkX3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RS
ZXF1aXJlZCgpCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmZpcnN0X3Byb3RvLCB0aGly
ZF9wcm90bykKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRoaXJkX3Byb3RvLCBzZWxmLnNlY29u
ZF9wcm90bykKLQotICBkZWYgdGVzdEFsbEZpZWxkc0ZpbGxlZEVxdWFsaXR5KHNlbGYpOgotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maXJzdF9wcm90bywgc2VsZi5zZWNvbmRfcHJvdG8pCi0K
LSAgZGVmIHRlc3ROb25SZXBlYXRlZFNjYWxhcihzZWxmKToKLSAgICAjIE5vbnJlcGVhdGVkIHNj
YWxhciBmaWVsZCBjaGFuZ2Ugc2hvdWxkIGNhdXNlIGluZXF1YWxpdHkuCi0gICAgc2VsZi5maXJz
dF9wcm90by5vcHRpb25hbF9pbnQzMiArPSAxCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxm
LmZpcnN0X3Byb3RvLCBzZWxmLnNlY29uZF9wcm90bykKLSAgICAjIC4uLmFzIHNob3VsZCBjbGVh
cmluZyBhIGZpZWxkLgotICAgIHNlbGYuZmlyc3RfcHJvdG8uQ2xlYXJGaWVsZCgnb3B0aW9uYWxf
aW50MzInKQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5maXJzdF9wcm90bywgc2VsZi5z
ZWNvbmRfcHJvdG8pCi0KLSAgZGVmIHRlc3ROb25SZXBlYXRlZENvbXBvc2l0ZShzZWxmKToKLSAg
ICAjIENoYW5nZSBhIG5vbnJlcGVhdGVkIGNvbXBvc2l0ZSBmaWVsZC4KLSAgICBzZWxmLmZpcnN0
X3Byb3RvLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLmJiICs9IDEKLSAgICBzZWxmLmFzc2VydE5v
dEVxdWFsKHNlbGYuZmlyc3RfcHJvdG8sIHNlbGYuc2Vjb25kX3Byb3RvKQotICAgIHNlbGYuZmly
c3RfcHJvdG8ub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIgLT0gMQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5maXJzdF9wcm90bywgc2VsZi5zZWNvbmRfcHJvdG8pCi0gICAgIyBDbGVhciBh
IGZpZWxkIGluIHRoZSBuZXN0ZWQgbWVzc2FnZS4KLSAgICBzZWxmLmZpcnN0X3Byb3RvLm9wdGlv
bmFsX25lc3RlZF9tZXNzYWdlLkNsZWFyRmllbGQoJ2JiJykKLSAgICBzZWxmLmFzc2VydE5vdEVx
dWFsKHNlbGYuZmlyc3RfcHJvdG8sIHNlbGYuc2Vjb25kX3Byb3RvKQotICAgIHNlbGYuZmlyc3Rf
cHJvdG8ub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIgPSAoCi0gICAgICAgIHNlbGYuc2Vjb25k
X3Byb3RvLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLmJiKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5maXJzdF9wcm90bywgc2VsZi5zZWNvbmRfcHJvdG8pCi0gICAgIyBSZW1vdmUgdGhlIG5l
c3RlZCBtZXNzYWdlIGVudGlyZWx5LgotICAgIHNlbGYuZmlyc3RfcHJvdG8uQ2xlYXJGaWVsZCgn
b3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UnKQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5m
aXJzdF9wcm90bywgc2VsZi5zZWNvbmRfcHJvdG8pCi0KLSAgZGVmIHRlc3RSZXBlYXRlZFNjYWxh
cihzZWxmKToKLSAgICAjIENoYW5nZSBhIHJlcGVhdGVkIHNjYWxhciBmaWVsZC4KLSAgICBzZWxm
LmZpcnN0X3Byb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCg1KQotICAgIHNlbGYuYXNzZXJ0Tm90
RXF1YWwoc2VsZi5maXJzdF9wcm90bywgc2VsZi5zZWNvbmRfcHJvdG8pCi0gICAgc2VsZi5maXJz
dF9wcm90by5DbGVhckZpZWxkKCdyZXBlYXRlZF9pbnQzMicpCi0gICAgc2VsZi5hc3NlcnROb3RF
cXVhbChzZWxmLmZpcnN0X3Byb3RvLCBzZWxmLnNlY29uZF9wcm90bykKLQotICBkZWYgdGVzdFJl
cGVhdGVkQ29tcG9zaXRlKHNlbGYpOgotICAgICMgQ2hhbmdlIHZhbHVlIHdpdGhpbiBhIHJlcGVh
dGVkIGNvbXBvc2l0ZSBmaWVsZC4KLSAgICBzZWxmLmZpcnN0X3Byb3RvLnJlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlWzBdLmJiICs9IDEKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZmlyc3Rf
cHJvdG8sIHNlbGYuc2Vjb25kX3Byb3RvKQotICAgIHNlbGYuZmlyc3RfcHJvdG8ucmVwZWF0ZWRf
bmVzdGVkX21lc3NhZ2VbMF0uYmIgLT0gMQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maXJz
dF9wcm90bywgc2VsZi5zZWNvbmRfcHJvdG8pCi0gICAgIyBBZGQgYSB2YWx1ZSB0byBhIHJlcGVh
dGVkIGNvbXBvc2l0ZSBmaWVsZC4KLSAgICBzZWxmLmZpcnN0X3Byb3RvLnJlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlLmFkZCgpCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmZpcnN0X3Byb3Rv
LCBzZWxmLnNlY29uZF9wcm90bykKLSAgICBzZWxmLnNlY29uZF9wcm90by5yZXBlYXRlZF9uZXN0
ZWRfbWVzc2FnZS5hZGQoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maXJzdF9wcm90bywg
c2VsZi5zZWNvbmRfcHJvdG8pCi0KLSAgZGVmIHRlc3ROb25SZXBlYXRlZFNjYWxhckhhc0JpdHMo
c2VsZik6Ci0gICAgIyBFbnN1cmUgdGhhdCB3ZSB0ZXN0ICJoYXMiIGJpdHMgYXMgd2VsbCBhcyB2
YWx1ZSBmb3IKLSAgICAjIG5vbnJlcGVhdGVkIHNjYWxhciBmaWVsZC4KLSAgICBzZWxmLmZpcnN0
X3Byb3RvLkNsZWFyRmllbGQoJ29wdGlvbmFsX2ludDMyJykKLSAgICBzZWxmLnNlY29uZF9wcm90
by5vcHRpb25hbF9pbnQzMiA9IDAKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZmlyc3Rf
cHJvdG8sIHNlbGYuc2Vjb25kX3Byb3RvKQotCi0gIGRlZiB0ZXN0Tm9uUmVwZWF0ZWRDb21wb3Np
dGVIYXNCaXRzKHNlbGYpOgotICAgICMgRW5zdXJlIHRoYXQgd2UgdGVzdCAiaGFzIiBiaXRzIGFz
IHdlbGwgYXMgdmFsdWUgZm9yCi0gICAgIyBub25yZXBlYXRlZCBjb21wb3NpdGUgZmllbGQuCi0g
ICAgc2VsZi5maXJzdF9wcm90by5DbGVhckZpZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZScp
Ci0gICAgc2VsZi5zZWNvbmRfcHJvdG8ub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuQ2xlYXJGaWVs
ZCgnYmInKQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5maXJzdF9wcm90bywgc2VsZi5z
ZWNvbmRfcHJvdG8pCi0gICAgc2VsZi5maXJzdF9wcm90by5vcHRpb25hbF9uZXN0ZWRfbWVzc2Fn
ZS5iYiA9IDAKLSAgICBzZWxmLmZpcnN0X3Byb3RvLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLkNs
ZWFyRmllbGQoJ2JiJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmlyc3RfcHJvdG8sIHNl
bGYuc2Vjb25kX3Byb3RvKQotCi0KLWNsYXNzIEV4dGVuc2lvbkVxdWFsaXR5VGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RFeHRlbnNpb25FcXVhbGl0eShzZWxmKToKLSAgICBm
aXJzdF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucygpCi0gICAgc2Vjb25k
X3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKGZpcnN0X3Byb3RvLCBzZWNvbmRfcHJvdG8pCi0gICAgdGVzdF91dGlsLlNldEFsbEV4
dGVuc2lvbnMoZmlyc3RfcHJvdG8pCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbChmaXJzdF9wcm90
bywgc2Vjb25kX3Byb3RvKQotICAgIHRlc3RfdXRpbC5TZXRBbGxFeHRlbnNpb25zKHNlY29uZF9w
cm90bykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X3Byb3RvLCBzZWNvbmRfcHJvdG8pCi0K
LSAgICAjIEVuc3VyZSB0aGF0IHdlIGNoZWNrIHZhbHVlIGVxdWFsaXR5LgotICAgIGZpcnN0X3By
b3RvLkV4dGVuc2lvbnNbdW5pdHRlc3RfcGIyLm9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbl0gKz0g
MQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZmlyc3RfcHJvdG8sIHNlY29uZF9wcm90bykKLSAg
ICBmaXJzdF9wcm90by5FeHRlbnNpb25zW3VuaXR0ZXN0X3BiMi5vcHRpb25hbF9pbnQzMl9leHRl
bnNpb25dIC09IDEKLSAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X3Byb3RvLCBzZWNvbmRfcHJv
dG8pCi0KLSAgICAjIEVuc3VyZSB0aGF0IHdlIGFsc28gbG9vayBhdCAiaGFzIiBiaXRzLgotICAg
IGZpcnN0X3Byb3RvLkNsZWFyRXh0ZW5zaW9uKHVuaXR0ZXN0X3BiMi5vcHRpb25hbF9pbnQzMl9l
eHRlbnNpb24pCi0gICAgc2Vjb25kX3Byb3RvLkV4dGVuc2lvbnNbdW5pdHRlc3RfcGIyLm9wdGlv
bmFsX2ludDMyX2V4dGVuc2lvbl0gPSAwCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbChmaXJzdF9w
cm90bywgc2Vjb25kX3Byb3RvKQotICAgIGZpcnN0X3Byb3RvLkV4dGVuc2lvbnNbdW5pdHRlc3Rf
cGIyLm9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbl0gPSAwCi0gICAgc2VsZi5hc3NlcnRFcXVhbChm
aXJzdF9wcm90bywgc2Vjb25kX3Byb3RvKQotCi0gICAgIyBFbnN1cmUgdGhhdCBkaWZmZXJlbmNl
cyBpbiBjYWNoZWQgdmFsdWVzCi0gICAgIyBkb24ndCBtYXR0ZXIgaWYgImhhcyIgYml0cyBhcmUg
Ym90aCBmYWxzZS4KLSAgICBmaXJzdF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsRXh0ZW5z
aW9ucygpCi0gICAgc2Vjb25kX3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNpb25z
KCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAwLCBmaXJzdF9wcm90by5FeHRlbnNp
b25zW3VuaXR0ZXN0X3BiMi5vcHRpb25hbF9pbnQzMl9leHRlbnNpb25dKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZmlyc3RfcHJvdG8sIHNlY29uZF9wcm90bykKLQotCi1jbGFzcyBNdXR1YWxSZWN1
cnNpb25FcXVhbGl0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0RXF1YWxp
dHlXaXRoTXV0dWFsUmVjdXJzaW9uKHNlbGYpOgotICAgIGZpcnN0X3Byb3RvID0gdW5pdHRlc3Rf
cGIyLlRlc3RNdXR1YWxSZWN1cnNpb25BKCkKLSAgICBzZWNvbmRfcHJvdG8gPSB1bml0dGVzdF9w
YjIuVGVzdE11dHVhbFJlY3Vyc2lvbkEoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3RfcHJv
dG8sIHNlY29uZF9wcm90bykKLSAgICBmaXJzdF9wcm90by5iYi5hLmJiLm9wdGlvbmFsX2ludDMy
ID0gMjMKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZpcnN0X3Byb3RvLCBzZWNvbmRfcHJvdG8p
Ci0gICAgc2Vjb25kX3Byb3RvLmJiLmEuYmIub3B0aW9uYWxfaW50MzIgPSAyMwotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZmlyc3RfcHJvdG8sIHNlY29uZF9wcm90bykKLQotCi1jbGFzcyBCeXRlU2l6
ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxm
LnByb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgc2VsZi5leHRlbmRlZF9w
cm90byA9IG1vcmVfZXh0ZW5zaW9uc19wYjIuRXh0ZW5kZWRNZXNzYWdlKCkKLSAgICBzZWxmLnBh
Y2tlZF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0UGFja2VkVHlwZXMoKQotICAgIHNlbGYucGFj
a2VkX2V4dGVuZGVkX3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RQYWNrZWRFeHRlbnNpb25zKCkK
LQotICBkZWYgU2l6ZShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5wcm90by5CeXRlU2l6ZSgpCi0K
LSAgZGVmIHRlc3RFbXB0eU1lc3NhZ2Uoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBz
ZWxmLnByb3RvLkJ5dGVTaXplKCkpCi0KLSAgZGVmIHRlc3RTaXplZE9uS3dhcmdzKHNlbGYpOgot
ICAgICMgVXNlIGEgc2VwYXJhdGUgbWVzc2FnZSB0byBlbnN1cmUgdGVzdGluZyByaWdodCBhZnRl
ciBjcmVhdGlvbi4KLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8uQnl0ZVNpemUoKSkKLSAgICBwcm90b19rd2FyZ3Mg
PSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKG9wdGlvbmFsX2ludDY0ID0gMSkKLSAgICAjIE9u
ZSBieXRlIGZvciB0aGUgdGFnLCBvbmUgdG8gZW5jb2RlIHZhcmludCAxLgotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMiwgcHJvdG9fa3dhcmdzLkJ5dGVTaXplKCkpCi0KLSAgZGVmIHRlc3RWYXJpbnRz
KHNlbGYpOgotICAgIGRlZiBUZXN0KGksIGV4cGVjdGVkX3ZhcmludF9zaXplKToKLSAgICAgIHNl
bGYucHJvdG8uQ2xlYXIoKQotICAgICAgc2VsZi5wcm90by5vcHRpb25hbF9pbnQ2NCA9IGkKLSAg
ICAgICMgQWRkIG9uZSB0byB0aGUgdmFyaW50IHNpemUgZm9yIHRoZSB0YWcgaW5mbwotICAgICAg
IyBmb3IgdGFnIDEuCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3ZhcmludF9zaXpl
ICsgMSwgc2VsZi5TaXplKCkpCi0gICAgVGVzdCgwLCAxKQotICAgIFRlc3QoMSwgMSkKLSAgICBm
b3IgaSwgbnVtX2J5dGVzIGluIHppcChyYW5nZSg3LCA2MywgNyksIHJhbmdlKDEsIDEwMDAwKSk6
Ci0gICAgICBUZXN0KCgxIDw8IGkpIC0gMSwgbnVtX2J5dGVzKQotICAgIFRlc3QoLTEsIDEwKQot
ICAgIFRlc3QoLTIsIDEwKQotICAgIFRlc3QoLSgxIDw8IDYzKSwgMTApCi0KLSAgZGVmIHRlc3RT
dHJpbmdzKHNlbGYpOgotICAgIHNlbGYucHJvdG8ub3B0aW9uYWxfc3RyaW5nID0gJycKLSAgICAj
IE5lZWQgb25lIGJ5dGUgZm9yIHRhZyBpbmZvICh0YWcgIzE0KSwgYW5kIG9uZSBieXRlIGZvciBs
ZW5ndGguCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzZWxmLlNpemUoKSkKLQotICAgIHNlbGYu
cHJvdG8ub3B0aW9uYWxfc3RyaW5nID0gJ2FiYycKLSAgICAjIE5lZWQgb25lIGJ5dGUgZm9yIHRh
ZyBpbmZvICh0YWcgIzE0KSwgYW5kIG9uZSBieXRlIGZvciBsZW5ndGguCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgyICsgbGVuKHNlbGYucHJvdG8ub3B0aW9uYWxfc3RyaW5nKSwgc2VsZi5TaXplKCkp
Ci0KLSAgICBzZWxmLnByb3RvLm9wdGlvbmFsX3N0cmluZyA9ICd4JyAqIDEyOAotICAgICMgTmVl
ZCBvbmUgYnl0ZSBmb3IgdGFnIGluZm8gKHRhZyAjMTQpLCBhbmQgVFdPIGJ5dGVzIGZvciBsZW5n
dGguCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgzICsgbGVuKHNlbGYucHJvdG8ub3B0aW9uYWxfc3Ry
aW5nKSwgc2VsZi5TaXplKCkpCi0KLSAgZGVmIHRlc3RPdGhlck51bWVyaWNzKHNlbGYpOgotICAg
IHNlbGYucHJvdG8ub3B0aW9uYWxfZml4ZWQzMiA9IDEyMzQKLSAgICAjIE9uZSBieXRlIGZvciB0
YWcgYW5kIDQgYnl0ZXMgZm9yIGZpeGVkMzIuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBzZWxm
LlNpemUoKSkKLSAgICBzZWxmLnByb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0K
LSAgICBzZWxmLnByb3RvLm9wdGlvbmFsX2ZpeGVkNjQgPSAxMjM0Ci0gICAgIyBPbmUgYnl0ZSBm
b3IgdGFnIGFuZCA4IGJ5dGVzIGZvciBmaXhlZDY0LgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoOSwg
c2VsZi5TaXplKCkpCi0gICAgc2VsZi5wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMo
KQotCi0gICAgc2VsZi5wcm90by5vcHRpb25hbF9mbG9hdCA9IDEuMjM0Ci0gICAgIyBPbmUgYnl0
ZSBmb3IgdGFnIGFuZCA0IGJ5dGVzIGZvciBmbG9hdC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKDUs
IHNlbGYuU2l6ZSgpKQotICAgIHNlbGYucHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVz
KCkKLQotICAgIHNlbGYucHJvdG8ub3B0aW9uYWxfZG91YmxlID0gMS4yMzQKLSAgICAjIE9uZSBi
eXRlIGZvciB0YWcgYW5kIDggYnl0ZXMgZm9yIGZsb2F0LgotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
OSwgc2VsZi5TaXplKCkpCi0gICAgc2VsZi5wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlw
ZXMoKQotCi0gICAgc2VsZi5wcm90by5vcHRpb25hbF9zaW50MzIgPSA2NAotICAgICMgT25lIGJ5
dGUgZm9yIHRhZyBhbmQgMiBieXRlcyBmb3IgemlnLXphZy1lbmNvZGVkIDY0LgotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMywgc2VsZi5TaXplKCkpCi0gICAgc2VsZi5wcm90byA9IHVuaXR0ZXN0X3Bi
Mi5UZXN0QWxsVHlwZXMoKQotCi0gIGRlZiB0ZXN0Q29tcG9zaXRlcyhzZWxmKToKLSAgICAjIDMg
Ynl0ZXMuCi0gICAgc2VsZi5wcm90by5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5iYiA9ICgxIDw8
IDE0KQotICAgICMgUGx1cyBvbmUgYnl0ZSBmb3IgYmIgdGFnLgotICAgICMgUGx1cyAxIGJ5dGUg
Zm9yIG9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIHNlcmlhbGl6ZWQgc2l6ZS4KLSAgICAjIFBsdXMg
dHdvIGJ5dGVzIGZvciBvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSB0YWcuCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgzICsgMSArIDEgKyAyLCBzZWxmLlNpemUoKSkKLQotICBkZWYgdGVzdEdyb3Vwcyhz
ZWxmKToKLSAgICAjIDQgYnl0ZXMuCi0gICAgc2VsZi5wcm90by5vcHRpb25hbGdyb3VwLmEgPSAo
MSA8PCAyMSkKLSAgICAjIFBsdXMgdHdvIGJ5dGVzIGZvciB8YXwgdGFnLgotICAgICMgUGx1cyAy
ICogdHdvIGJ5dGVzIGZvciBTVEFSVF9HUk9VUCBhbmQgRU5EX0dST1VQIHRhZ3MuCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbCg0ICsgMiArIDIqMiwgc2VsZi5TaXplKCkpCi0KLSAgZGVmIHRlc3RSZXBl
YXRlZFNjYWxhcnMoc2VsZik6Ci0gICAgc2VsZi5wcm90by5yZXBlYXRlZF9pbnQzMi5hcHBlbmQo
MTApICAjIDEgYnl0ZS4KLSAgICBzZWxmLnByb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgxMjgp
ICAjIDIgYnl0ZXMuCi0gICAgIyBBbHNvIG5lZWQgMiBieXRlcyBmb3IgZWFjaCBlbnRyeSBmb3Ig
dGFnLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSArIDIgKyAyKjIsIHNlbGYuU2l6ZSgpKQotCi0g
IGRlZiB0ZXN0UmVwZWF0ZWRTY2FsYXJzRXh0ZW5kKHNlbGYpOgotICAgIHNlbGYucHJvdG8ucmVw
ZWF0ZWRfaW50MzIuZXh0ZW5kKFsxMCwgMTI4XSkgICMgMyBieXRlcy4KLSAgICAjIEFsc28gbmVl
ZCAyIGJ5dGVzIGZvciBlYWNoIGVudHJ5IGZvciB0YWcuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgx
ICsgMiArIDIqMiwgc2VsZi5TaXplKCkpCi0KLSAgZGVmIHRlc3RSZXBlYXRlZFNjYWxhcnNSZW1v
dmUoc2VsZik6Ci0gICAgc2VsZi5wcm90by5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMTApICAjIDEg
Ynl0ZS4KLSAgICBzZWxmLnByb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgxMjgpICAjIDIgYnl0
ZXMuCi0gICAgIyBBbHNvIG5lZWQgMiBieXRlcyBmb3IgZWFjaCBlbnRyeSBmb3IgdGFnLgotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMSArIDIgKyAyKjIsIHNlbGYuU2l6ZSgpKQotICAgIHNlbGYucHJv
dG8ucmVwZWF0ZWRfaW50MzIucmVtb3ZlKDEyOCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEgKyAy
LCBzZWxmLlNpemUoKSkKLQotICBkZWYgdGVzdFJlcGVhdGVkQ29tcG9zaXRlcyhzZWxmKToKLSAg
ICAjIEVtcHR5IG1lc3NhZ2UuICAyIGJ5dGVzIHRhZyBwbHVzIDEgYnl0ZSBsZW5ndGguCi0gICAg
Zm9yZWlnbl9tZXNzYWdlXzAgPSBzZWxmLnByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFk
ZCgpCi0gICAgIyAyIGJ5dGVzIHRhZyBwbHVzIDEgYnl0ZSBsZW5ndGggcGx1cyAxIGJ5dGUgYmIg
dGFnIDEgYnl0ZSBpbnQuCi0gICAgZm9yZWlnbl9tZXNzYWdlXzEgPSBzZWxmLnByb3RvLnJlcGVh
dGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpCi0gICAgZm9yZWlnbl9tZXNzYWdlXzEuYmIgPSA3Ci0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgyICsgMSArIDIgKyAxICsgMSArIDEsIHNlbGYuU2l6ZSgpKQot
Ci0gIGRlZiB0ZXN0UmVwZWF0ZWRDb21wb3NpdGVzRGVsZXRlKHNlbGYpOgotICAgICMgRW1wdHkg
bWVzc2FnZS4gIDIgYnl0ZXMgdGFnIHBsdXMgMSBieXRlIGxlbmd0aC4KLSAgICBmb3JlaWduX21l
c3NhZ2VfMCA9IHNlbGYucHJvdG8ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkKLSAgICAj
IDIgYnl0ZXMgdGFnIHBsdXMgMSBieXRlIGxlbmd0aCBwbHVzIDEgYnl0ZSBiYiB0YWcgMSBieXRl
IGludC4KLSAgICBmb3JlaWduX21lc3NhZ2VfMSA9IHNlbGYucHJvdG8ucmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2UuYWRkKCkKLSAgICBmb3JlaWduX21lc3NhZ2VfMS5iYiA9IDkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKDIgKyAxICsgMiArIDEgKyAxICsgMSwgc2VsZi5TaXplKCkpCi0KLSAgICAjIDIg
Ynl0ZXMgdGFnIHBsdXMgMSBieXRlIGxlbmd0aCBwbHVzIDEgYnl0ZSBiYiB0YWcgMSBieXRlIGlu
dC4KLSAgICBkZWwgc2VsZi5wcm90by5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZVswXQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMiArIDEgKyAxICsgMSwgc2VsZi5TaXplKCkpCi0KLSAgICAjIE5vdyBh
ZGQgYSBuZXcgbWVzc2FnZS4KLSAgICBmb3JlaWduX21lc3NhZ2VfMiA9IHNlbGYucHJvdG8ucmVw
ZWF0ZWRfbmVzdGVkX21lc3NhZ2UuYWRkKCkKLSAgICBmb3JlaWduX21lc3NhZ2VfMi5iYiA9IDEy
Ci0KLSAgICAjIDIgYnl0ZXMgdGFnIHBsdXMgMSBieXRlIGxlbmd0aCBwbHVzIDEgYnl0ZSBiYiB0
YWcgMSBieXRlIGludC4KLSAgICAjIDIgYnl0ZXMgdGFnIHBsdXMgMSBieXRlIGxlbmd0aCBwbHVz
IDEgYnl0ZSBiYiB0YWcgMSBieXRlIGludC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKDIgKyAxICsg
MSArIDEgKyAyICsgMSArIDEgKyAxLCBzZWxmLlNpemUoKSkKLQotICAgICMgMiBieXRlcyB0YWcg
cGx1cyAxIGJ5dGUgbGVuZ3RoIHBsdXMgMSBieXRlIGJiIHRhZyAxIGJ5dGUgaW50LgotICAgIGRl
bCBzZWxmLnByb3RvLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlWzFdCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCgyICsgMSArIDEgKyAxLCBzZWxmLlNpemUoKSkKLQotICAgIGRlbCBzZWxmLnByb3RvLnJl
cGVhdGVkX25lc3RlZF9tZXNzYWdlWzBdCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZWxmLlNp
emUoKSkKLQotICBkZWYgdGVzdFJlcGVhdGVkR3JvdXBzKHNlbGYpOgotICAgICMgMi1ieXRlIFNU
QVJUX0dST1VQIHBsdXMgMi1ieXRlIEVORF9HUk9VUC4KLSAgICBncm91cF8wID0gc2VsZi5wcm90
by5yZXBlYXRlZGdyb3VwLmFkZCgpCi0gICAgIyAyLWJ5dGUgU1RBUlRfR1JPVVAgcGx1cyAyLWJ5
dGUgfGF8IHRhZyArIDEtYnl0ZSB8YXwKLSAgICAjIHBsdXMgMi1ieXRlIEVORF9HUk9VUC4KLSAg
ICBncm91cF8xID0gc2VsZi5wcm90by5yZXBlYXRlZGdyb3VwLmFkZCgpCi0gICAgZ3JvdXBfMS5h
ID0gIDcKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIgKyAyICsgMiArIDIgKyAxICsgMiwgc2VsZi5T
aXplKCkpCi0KLSAgZGVmIHRlc3RFeHRlbnNpb25zKHNlbGYpOgotICAgIHByb3RvID0gdW5pdHRl
c3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3Rv
LkJ5dGVTaXplKCkpCi0gICAgZXh0ZW5zaW9uID0gdW5pdHRlc3RfcGIyLm9wdGlvbmFsX2ludDMy
X2V4dGVuc2lvbiAgIyBGaWVsZCAjMSwgMSBieXRlLgotICAgIHByb3RvLkV4dGVuc2lvbnNbZXh0
ZW5zaW9uXSA9IDIzCi0gICAgIyAxIGJ5dGUgZm9yIHRhZywgMSBieXRlIGZvciB2YWx1ZS4KLSAg
ICBzZWxmLmFzc2VydEVxdWFsKDIsIHByb3RvLkJ5dGVTaXplKCkpCi0KLSAgZGVmIHRlc3RDYWNo
ZUludmFsaWRhdGlvbkZvck5vbnJlcGVhdGVkU2NhbGFyKHNlbGYpOgotICAgICMgVGVzdCBub24t
ZXh0ZW5zaW9uLgotICAgIHNlbGYucHJvdG8ub3B0aW9uYWxfaW50MzIgPSAxCi0gICAgc2VsZi5h
c3NlcnRFcXVhbCgyLCBzZWxmLnByb3RvLkJ5dGVTaXplKCkpCi0gICAgc2VsZi5wcm90by5vcHRp
b25hbF9pbnQzMiA9IDEyOAotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgc2VsZi5wcm90by5CeXRl
U2l6ZSgpKQotICAgIHNlbGYucHJvdG8uQ2xlYXJGaWVsZCgnb3B0aW9uYWxfaW50MzInKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VsZi5wcm90by5CeXRlU2l6ZSgpKQotCi0gICAgIyBUZXN0
IHdpdGhpbiBleHRlbnNpb24uCi0gICAgZXh0ZW5zaW9uID0gbW9yZV9leHRlbnNpb25zX3BiMi5v
cHRpb25hbF9pbnRfZXh0ZW5zaW9uCi0gICAgc2VsZi5leHRlbmRlZF9wcm90by5FeHRlbnNpb25z
W2V4dGVuc2lvbl0gPSAxCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzZWxmLmV4dGVuZGVkX3By
b3RvLkJ5dGVTaXplKCkpCi0gICAgc2VsZi5leHRlbmRlZF9wcm90by5FeHRlbnNpb25zW2V4dGVu
c2lvbl0gPSAxMjgKLSAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHNlbGYuZXh0ZW5kZWRfcHJvdG8u
Qnl0ZVNpemUoKSkKLSAgICBzZWxmLmV4dGVuZGVkX3Byb3RvLkNsZWFyRXh0ZW5zaW9uKGV4dGVu
c2lvbikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbGYuZXh0ZW5kZWRfcHJvdG8uQnl0ZVNp
emUoKSkKLQotICBkZWYgdGVzdENhY2hlSW52YWxpZGF0aW9uRm9yUmVwZWF0ZWRTY2FsYXIoc2Vs
Zik6Ci0gICAgIyBUZXN0IG5vbi1leHRlbnNpb24uCi0gICAgc2VsZi5wcm90by5yZXBlYXRlZF9p
bnQzMi5hcHBlbmQoMSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHNlbGYucHJvdG8uQnl0ZVNp
emUoKSkKLSAgICBzZWxmLnByb3RvLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgxKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoNiwgc2VsZi5wcm90by5CeXRlU2l6ZSgpKQotICAgIHNlbGYucHJvdG8ucmVw
ZWF0ZWRfaW50MzJbMV0gPSAxMjgKLSAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHNlbGYucHJvdG8u
Qnl0ZVNpemUoKSkKLSAgICBzZWxmLnByb3RvLkNsZWFyRmllbGQoJ3JlcGVhdGVkX2ludDMyJykK
LSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbGYucHJvdG8uQnl0ZVNpemUoKSkKLQotICAgICMg
VGVzdCB3aXRoaW4gZXh0ZW5zaW9uLgotICAgIGV4dGVuc2lvbiA9IG1vcmVfZXh0ZW5zaW9uc19w
YjIucmVwZWF0ZWRfaW50X2V4dGVuc2lvbgotICAgIHJlcGVhdGVkID0gc2VsZi5leHRlbmRlZF9w
cm90by5FeHRlbnNpb25zW2V4dGVuc2lvbl0KLSAgICByZXBlYXRlZC5hcHBlbmQoMSkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKDIsIHNlbGYuZXh0ZW5kZWRfcHJvdG8uQnl0ZVNpemUoKSkKLSAgICBy
ZXBlYXRlZC5hcHBlbmQoMSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDQsIHNlbGYuZXh0ZW5kZWRf
cHJvdG8uQnl0ZVNpemUoKSkKLSAgICByZXBlYXRlZFsxXSA9IDEyOAotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoNSwgc2VsZi5leHRlbmRlZF9wcm90by5CeXRlU2l6ZSgpKQotICAgIHNlbGYuZXh0ZW5k
ZWRfcHJvdG8uQ2xlYXJFeHRlbnNpb24oZXh0ZW5zaW9uKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgc2VsZi5leHRlbmRlZF9wcm90by5CeXRlU2l6ZSgpKQotCi0gIGRlZiB0ZXN0Q2FjaGVJbnZh
bGlkYXRpb25Gb3JOb25yZXBlYXRlZE1lc3NhZ2Uoc2VsZik6Ci0gICAgIyBUZXN0IG5vbi1leHRl
bnNpb24uCi0gICAgc2VsZi5wcm90by5vcHRpb25hbF9mb3JlaWduX21lc3NhZ2UuYyA9IDEKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKDUsIHNlbGYucHJvdG8uQnl0ZVNpemUoKSkKLSAgICBzZWxmLnBy
b3RvLm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZS5jID0gMTI4Ci0gICAgc2VsZi5hc3NlcnRFcXVh
bCg2LCBzZWxmLnByb3RvLkJ5dGVTaXplKCkpCi0gICAgc2VsZi5wcm90by5vcHRpb25hbF9mb3Jl
aWduX21lc3NhZ2UuQ2xlYXJGaWVsZCgnYycpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBzZWxm
LnByb3RvLkJ5dGVTaXplKCkpCi0gICAgc2VsZi5wcm90by5DbGVhckZpZWxkKCdvcHRpb25hbF9m
b3JlaWduX21lc3NhZ2UnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VsZi5wcm90by5CeXRl
U2l6ZSgpKQotCi0gICAgaWYgYXBpX2ltcGxlbWVudGF0aW9uLlR5cGUoKSA9PSAncHl0aG9uJzoK
LSAgICAgICMgVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGluIHB1cmUtUHl0aG9uIGltcGxlbWVudGF0
aW9uIG9mIHRoZSBBUEkuCi0gICAgICBjaGlsZCA9IHNlbGYucHJvdG8ub3B0aW9uYWxfZm9yZWln
bl9tZXNzYWdlCi0gICAgICBzZWxmLnByb3RvLkNsZWFyRmllbGQoJ29wdGlvbmFsX2ZvcmVpZ25f
bWVzc2FnZScpCi0gICAgICBjaGlsZC5jID0gMTI4Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKDAs
IHNlbGYucHJvdG8uQnl0ZVNpemUoKSkKLQotICAgICMgVGVzdCB3aXRoaW4gZXh0ZW5zaW9uLgot
ICAgIGV4dGVuc2lvbiA9IG1vcmVfZXh0ZW5zaW9uc19wYjIub3B0aW9uYWxfbWVzc2FnZV9leHRl
bnNpb24KLSAgICBjaGlsZCA9IHNlbGYuZXh0ZW5kZWRfcHJvdG8uRXh0ZW5zaW9uc1tleHRlbnNp
b25dCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZWxmLmV4dGVuZGVkX3Byb3RvLkJ5dGVTaXpl
KCkpCi0gICAgY2hpbGQuZm9yZWlnbl9tZXNzYWdlX2ludCA9IDEKLSAgICBzZWxmLmFzc2VydEVx
dWFsKDQsIHNlbGYuZXh0ZW5kZWRfcHJvdG8uQnl0ZVNpemUoKSkKLSAgICBjaGlsZC5mb3JlaWdu
X21lc3NhZ2VfaW50ID0gMTI4Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBzZWxmLmV4dGVuZGVk
X3Byb3RvLkJ5dGVTaXplKCkpCi0gICAgc2VsZi5leHRlbmRlZF9wcm90by5DbGVhckV4dGVuc2lv
bihleHRlbnNpb24pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZWxmLmV4dGVuZGVkX3Byb3Rv
LkJ5dGVTaXplKCkpCi0KLSAgZGVmIHRlc3RDYWNoZUludmFsaWRhdGlvbkZvclJlcGVhdGVkTWVz
c2FnZShzZWxmKToKLSAgICAjIFRlc3Qgbm9uLWV4dGVuc2lvbi4KLSAgICBjaGlsZDAgPSBzZWxm
LnByb3RvLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZS5hZGQoKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMywgc2VsZi5wcm90by5CeXRlU2l6ZSgpKQotICAgIHNlbGYucHJvdG8ucmVwZWF0ZWRfZm9y
ZWlnbl9tZXNzYWdlLmFkZCgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBzZWxmLnByb3RvLkJ5
dGVTaXplKCkpCi0gICAgY2hpbGQwLmMgPSAxCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg4LCBzZWxm
LnByb3RvLkJ5dGVTaXplKCkpCi0gICAgc2VsZi5wcm90by5DbGVhckZpZWxkKCdyZXBlYXRlZF9m
b3JlaWduX21lc3NhZ2UnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VsZi5wcm90by5CeXRl
U2l6ZSgpKQotCi0gICAgIyBUZXN0IHdpdGhpbiBleHRlbnNpb24uCi0gICAgZXh0ZW5zaW9uID0g
bW9yZV9leHRlbnNpb25zX3BiMi5yZXBlYXRlZF9tZXNzYWdlX2V4dGVuc2lvbgotICAgIGNoaWxk
X2xpc3QgPSBzZWxmLmV4dGVuZGVkX3Byb3RvLkV4dGVuc2lvbnNbZXh0ZW5zaW9uXQotICAgIGNo
aWxkMCA9IGNoaWxkX2xpc3QuYWRkKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbGYuZXh0
ZW5kZWRfcHJvdG8uQnl0ZVNpemUoKSkKLSAgICBjaGlsZF9saXN0LmFkZCgpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbCg0LCBzZWxmLmV4dGVuZGVkX3Byb3RvLkJ5dGVTaXplKCkpCi0gICAgY2hpbGQw
LmZvcmVpZ25fbWVzc2FnZV9pbnQgPSAxCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBzZWxmLmV4
dGVuZGVkX3Byb3RvLkJ5dGVTaXplKCkpCi0gICAgY2hpbGQwLkNsZWFyRmllbGQoJ2ZvcmVpZ25f
bWVzc2FnZV9pbnQnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgc2VsZi5leHRlbmRlZF9wcm90
by5CeXRlU2l6ZSgpKQotICAgIHNlbGYuZXh0ZW5kZWRfcHJvdG8uQ2xlYXJFeHRlbnNpb24oZXh0
ZW5zaW9uKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VsZi5leHRlbmRlZF9wcm90by5CeXRl
U2l6ZSgpKQotCi0gIGRlZiB0ZXN0UGFja2VkUmVwZWF0ZWRTY2FsYXJzKHNlbGYpOgotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMCwgc2VsZi5wYWNrZWRfcHJvdG8uQnl0ZVNpemUoKSkKLQotICAgIHNl
bGYucGFja2VkX3Byb3RvLnBhY2tlZF9pbnQzMi5hcHBlbmQoMTApICAgIyAxIGJ5dGUuCi0gICAg
c2VsZi5wYWNrZWRfcHJvdG8ucGFja2VkX2ludDMyLmFwcGVuZCgxMjgpICAjIDIgYnl0ZXMuCi0g
ICAgIyBUaGUgdGFnIGlzIDIgYnl0ZXMgKHRoZSBmaWVsZCBudW1iZXIgaXMgOTApLCBhbmQgdGhl
IHZhcmludAotICAgICMgc3RvcmluZyB0aGUgbGVuZ3RoIGlzIDEgYnl0ZS4KLSAgICBpbnRfc2l6
ZSA9IDEgKyAyICsgMwotICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50X3NpemUsIHNlbGYucGFja2Vk
X3Byb3RvLkJ5dGVTaXplKCkpCi0KLSAgICBzZWxmLnBhY2tlZF9wcm90by5wYWNrZWRfZG91Ymxl
LmFwcGVuZCg0LjIpICAgIyA4IGJ5dGVzCi0gICAgc2VsZi5wYWNrZWRfcHJvdG8ucGFja2VkX2Rv
dWJsZS5hcHBlbmQoMy4yNSkgICMgOCBieXRlcwotICAgICMgMiBtb3JlIHRhZyBieXRlcywgMSBt
b3JlIGxlbmd0aCBieXRlLgotICAgIGRvdWJsZV9zaXplID0gOCArIDggKyAzCi0gICAgc2VsZi5h
c3NlcnRFcXVhbChpbnRfc2l6ZStkb3VibGVfc2l6ZSwgc2VsZi5wYWNrZWRfcHJvdG8uQnl0ZVNp
emUoKSkKLQotICAgIHNlbGYucGFja2VkX3Byb3RvLkNsZWFyRmllbGQoJ3BhY2tlZF9pbnQzMicp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChkb3VibGVfc2l6ZSwgc2VsZi5wYWNrZWRfcHJvdG8uQnl0
ZVNpemUoKSkKLQotICBkZWYgdGVzdFBhY2tlZEV4dGVuc2lvbnMoc2VsZik6Ci0gICAgc2VsZi5h
c3NlcnRFcXVhbCgwLCBzZWxmLnBhY2tlZF9leHRlbmRlZF9wcm90by5CeXRlU2l6ZSgpKQotICAg
IGV4dGVuc2lvbiA9IHNlbGYucGFja2VkX2V4dGVuZGVkX3Byb3RvLkV4dGVuc2lvbnNbCi0gICAg
ICAgIHVuaXR0ZXN0X3BiMi5wYWNrZWRfZml4ZWQzMl9leHRlbnNpb25dCi0gICAgZXh0ZW5zaW9u
LmV4dGVuZChbMSwgMiwgMywgNF0pICAgIyAxNiBieXRlcwotICAgICMgVGFnIGlzIDMgYnl0ZXMu
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgxOSwgc2VsZi5wYWNrZWRfZXh0ZW5kZWRfcHJvdG8uQnl0
ZVNpemUoKSkKLQotCi0jIElzc3VlcyB0byBiZSBzdXJlIHRvIGNvdmVyIGluY2x1ZGU6Ci0jICAg
KiBIYW5kbGluZyBvZiB1bnJlY29nbml6ZWQgdGFncyAoInVuaW50ZXJwcmV0ZWRfYnl0ZXMiKS4K
LSMgICAqIEhhbmRsaW5nIG9mIE1lc3NhZ2VTZXRzLgotIyAgICogQ29uc2lzdGVudCBvcmRlcmlu
ZyBvZiB0YWdzIGluIHRoZSB3aXJlIGZvcm1hdCwKLSMgICAgIGluY2x1ZGluZyBvcmRlcmluZyBi
ZXR3ZWVuIGV4dGVuc2lvbnMgYW5kIG5vbi1leHRlbnNpb24KLSMgICAgIGZpZWxkcy4KLSMgICAq
IENvbnNpc3RlbnQgc2VyaWFsaXphdGlvbiBvZiBuZWdhdGl2ZSBudW1iZXJzLCBlc3BlY2lhbGx5
Ci0jICAgICBuZWdhdGl2ZSBpbnQzMnMuCi0jICAgKiBIYW5kbGluZyBvZiBlbXB0eSBzdWJtZXNz
YWdlcyAod2l0aCBhbmQgd2l0aG91dCAiaGFzIgotIyAgICAgYml0cyBzZXQpLgotCi1jbGFzcyBT
ZXJpYWxpemF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RTZXJpYWxp
emVFbXRweU1lc3NhZ2Uoc2VsZik6Ci0gICAgZmlyc3RfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVz
dEFsbFR5cGVzKCkKLSAgICBzZWNvbmRfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVz
KCkKLSAgICBzZXJpYWxpemVkID0gZmlyc3RfcHJvdG8uU2VyaWFsaXplVG9TdHJpbmcoKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3RfcHJvdG8uQnl0ZVNpemUoKSwgbGVuKHNlcmlhbGl6ZWQp
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGxlbihzZXJpYWxpemVkKSwKLSAgICAg
ICAgc2Vjb25kX3Byb3RvLk1lcmdlRnJvbVN0cmluZyhzZXJpYWxpemVkKSkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKGZpcnN0X3Byb3RvLCBzZWNvbmRfcHJvdG8pCi0KLSAgZGVmIHRlc3RTZXJpYWxp
emVBbGxGaWVsZHMoc2VsZik6Ci0gICAgZmlyc3RfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFs
bFR5cGVzKCkKLSAgICBzZWNvbmRfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkK
LSAgICB0ZXN0X3V0aWwuU2V0QWxsRmllbGRzKGZpcnN0X3Byb3RvKQotICAgIHNlcmlhbGl6ZWQg
PSBmaXJzdF9wcm90by5TZXJpYWxpemVUb1N0cmluZygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChm
aXJzdF9wcm90by5CeXRlU2l6ZSgpLCBsZW4oc2VyaWFsaXplZCkpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCgKLSAgICAgICAgbGVuKHNlcmlhbGl6ZWQpLAotICAgICAgICBzZWNvbmRfcHJvdG8uTWVy
Z2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3RfcHJv
dG8sIHNlY29uZF9wcm90bykKLQotICBkZWYgdGVzdFNlcmlhbGl6ZUFsbEV4dGVuc2lvbnMoc2Vs
Zik6Ci0gICAgZmlyc3RfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbEV4dGVuc2lvbnMoKQot
ICAgIHNlY29uZF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucygpCi0gICAg
dGVzdF91dGlsLlNldEFsbEV4dGVuc2lvbnMoZmlyc3RfcHJvdG8pCi0gICAgc2VyaWFsaXplZCA9
IGZpcnN0X3Byb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAot
ICAgICAgICBsZW4oc2VyaWFsaXplZCksCi0gICAgICAgIHNlY29uZF9wcm90by5NZXJnZUZyb21T
dHJpbmcoc2VyaWFsaXplZCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9wcm90bywgc2Vj
b25kX3Byb3RvKQotCi0gIGRlZiB0ZXN0U2VyaWFsaXplV2l0aE9wdGlvbmFsR3JvdXAoc2VsZik6
Ci0gICAgZmlyc3RfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWNv
bmRfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBmaXJzdF9wcm90by5v
cHRpb25hbGdyb3VwLmEgPSAyNDIKLSAgICBzZXJpYWxpemVkID0gZmlyc3RfcHJvdG8uU2VyaWFs
aXplVG9TdHJpbmcoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGxlbihzZXJpYWxp
emVkKSwKLSAgICAgICAgc2Vjb25kX3Byb3RvLk1lcmdlRnJvbVN0cmluZyhzZXJpYWxpemVkKSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X3Byb3RvLCBzZWNvbmRfcHJvdG8pCi0KLSAgZGVm
IHRlc3RTZXJpYWxpemVOZWdhdGl2ZVZhbHVlcyhzZWxmKToKLSAgICBmaXJzdF9wcm90byA9IHVu
aXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotCi0gICAgZmlyc3RfcHJvdG8ub3B0aW9uYWxfaW50
MzIgPSAtMQotICAgIGZpcnN0X3Byb3RvLm9wdGlvbmFsX2ludDY0ID0gLSgyIDw8IDQwKQotICAg
IGZpcnN0X3Byb3RvLm9wdGlvbmFsX3NpbnQzMiA9IC0zCi0gICAgZmlyc3RfcHJvdG8ub3B0aW9u
YWxfc2ludDY0ID0gLSg0IDw8IDQwKQotICAgIGZpcnN0X3Byb3RvLm9wdGlvbmFsX3NmaXhlZDMy
ID0gLTUKLSAgICBmaXJzdF9wcm90by5vcHRpb25hbF9zZml4ZWQ2NCA9IC0oNiA8PCA0MCkKLQot
ICAgIHNlY29uZF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuRnJvbVN0cmluZygK
LSAgICAgICAgZmlyc3RfcHJvdG8uU2VyaWFsaXplVG9TdHJpbmcoKSkKLQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZmlyc3RfcHJvdG8sIHNlY29uZF9wcm90bykKLQotICBkZWYgdGVzdFBhcnNlVHJ1
bmNhdGVkKHNlbGYpOgotICAgICMgVGhpcyB0ZXN0IGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgdGhl
IFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJLgotICAgIGlmIGFwaV9pbXBsZW1lbnRh
dGlvbi5UeXBlKCkgIT0gJ3B5dGhvbic6Ci0gICAgICByZXR1cm4KLQotICAgIGZpcnN0X3Byb3Rv
ID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgdGVzdF91dGlsLlNldEFsbEZpZWxk
cyhmaXJzdF9wcm90bykKLSAgICBzZXJpYWxpemVkID0gZmlyc3RfcHJvdG8uU2VyaWFsaXplVG9T
dHJpbmcoKQotCi0gICAgZm9yIHRydW5jYXRpb25fcG9pbnQgaW4gcmFuZ2UobGVuKHNlcmlhbGl6
ZWQpICsgMSk6Ci0gICAgICB0cnk6Ci0gICAgICAgIHNlY29uZF9wcm90byA9IHVuaXR0ZXN0X3Bi
Mi5UZXN0QWxsVHlwZXMoKQotICAgICAgICB1bmtub3duX2ZpZWxkcyA9IHVuaXR0ZXN0X3BiMi5U
ZXN0RW1wdHlNZXNzYWdlKCkKLSAgICAgICAgcG9zID0gc2Vjb25kX3Byb3RvLl9JbnRlcm5hbFBh
cnNlKHNlcmlhbGl6ZWQsIDAsIHRydW5jYXRpb25fcG9pbnQpCi0gICAgICAgICMgSWYgd2UgZGlk
bid0IHJhaXNlIGFuIGVycm9yIHRoZW4gd2UgcmVhZCBleGFjdGx5IHRoZSBhbW91bnQgZXhwZWN0
ZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJ1bmNhdGlvbl9wb2ludCwgcG9zKQotCi0g
ICAgICAgICMgUGFyc2luZyB0byB1bmtub3duIGZpZWxkcyBzaG91bGQgbm90IHRocm93IGlmIHBh
cnNpbmcgdG8ga25vd24gZmllbGRzCi0gICAgICAgICMgZGlkIG5vdC4KLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgIHBvczIgPSB1bmtub3duX2ZpZWxkcy5fSW50ZXJuYWxQYXJzZShzZXJpYWxpemVk
LCAwLCB0cnVuY2F0aW9uX3BvaW50KQotICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJ1bmNh
dGlvbl9wb2ludCwgcG9zMikKLSAgICAgICAgZXhjZXB0IG1lc3NhZ2UuRGVjb2RlRXJyb3I6Ci0g
ICAgICAgICAgc2VsZi5mYWlsKCdQYXJzaW5nIHVua25vd24gZmllbGRzIGZhaWxlZCB3aGVuIHBh
cnNpbmcga25vd24gZmllbGRzICcKLSAgICAgICAgICAgICAgICAgICAgJ2RpZCBub3QuJykKLSAg
ICAgIGV4Y2VwdCBtZXNzYWdlLkRlY29kZUVycm9yOgotICAgICAgICAjIFBhcnNpbmcgdW5rbm93
biBmaWVsZHMgc2hvdWxkIGFsc28gZmFpbC4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobWVz
c2FnZS5EZWNvZGVFcnJvciwgdW5rbm93bl9maWVsZHMuX0ludGVybmFsUGFyc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQsIDAsIHRydW5jYXRpb25fcG9pbnQpCi0KLSAg
ZGVmIHRlc3RDYW5vbmljYWxTZXJpYWxpemF0aW9uT3JkZXIoc2VsZik6Ci0gICAgcHJvdG8gPSBt
b3JlX21lc3NhZ2VzX3BiMi5PdXRPZk9yZGVyRmllbGRzKCkKLSAgICAjIFRoZXNlIGFyZSBhbHNv
IHRoZWlyIHRhZyBudW1iZXJzLiAgRXZlbiB0aG91Z2ggd2UncmUgc2V0dGluZyB0aGVzZSBpbgot
ICAgICMgcmV2ZXJzZS10YWcgb3JkZXIgQU5EIHRoZXkncmUgbGlzdGVkIGluIHJldmVyc2UgdGFn
LW9yZGVyIGluIHRoZSAucHJvdG8KLSAgICAjIGZpbGUsIHRoZXkgc2hvdWxkIG5vbmV0aGVsZXNz
IGJlIHNlcmlhbGl6ZWQgaW4gdGFnIG9yZGVyLgotICAgIHByb3RvLm9wdGlvbmFsX3NpbnQzMiA9
IDUKLSAgICBwcm90by5FeHRlbnNpb25zW21vcmVfbWVzc2FnZXNfcGIyLm9wdGlvbmFsX3VpbnQ2
NF0gPSA0Ci0gICAgcHJvdG8ub3B0aW9uYWxfdWludDMyID0gMwotICAgIHByb3RvLkV4dGVuc2lv
bnNbbW9yZV9tZXNzYWdlc19wYjIub3B0aW9uYWxfaW50NjRdID0gMgotICAgIHByb3RvLm9wdGlv
bmFsX2ludDMyID0gMQotICAgIHNlcmlhbGl6ZWQgPSBwcm90by5TZXJpYWxpemVUb1N0cmluZygp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5CeXRlU2l6ZSgpLCBsZW4oc2VyaWFsaXplZCkp
Ci0gICAgZCA9IF9NaW5pRGVjb2RlcihzZXJpYWxpemVkKQotICAgIFJlYWRUYWcgPSBkLlJlYWRG
aWVsZE51bWJlckFuZFdpcmVUeXBlCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgoMSwgd2lyZV9mb3Jt
YXQuV0lSRVRZUEVfVkFSSU5UKSwgUmVhZFRhZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwg
ZC5SZWFkSW50MzIoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCgyLCB3aXJlX2Zvcm1hdC5XSVJF
VFlQRV9WQVJJTlQpLCBSZWFkVGFnKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBkLlJlYWRJ
bnQ2NCgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDMsIHdpcmVfZm9ybWF0LldJUkVUWVBFX1ZB
UklOVCksIFJlYWRUYWcoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGQuUmVhZFVJbnQzMigp
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDQsIHdpcmVfZm9ybWF0LldJUkVUWVBFX1ZBUklOVCks
IFJlYWRUYWcoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGQuUmVhZFVJbnQ2NCgpKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoKDUsIHdpcmVfZm9ybWF0LldJUkVUWVBFX1ZBUklOVCksIFJlYWRU
YWcoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDUsIGQuUmVhZFNJbnQzMigpKQotCi0gIGRlZiB0
ZXN0Q2Fub25pY2FsU2VyaWFsaXphdGlvbk9yZGVyU2FtZUFzQ3BwKHNlbGYpOgotICAgICMgQ29w
eSBvZiB0aGUgc2FtZSB0ZXN0IHdlIHVzZSBmb3IgQysrLgotICAgIHByb3RvID0gdW5pdHRlc3Rf
cGIyLlRlc3RGaWVsZE9yZGVyaW5ncygpCi0gICAgdGVzdF91dGlsLlNldEFsbEZpZWxkc0FuZEV4
dGVuc2lvbnMocHJvdG8pCi0gICAgc2VyaWFsaXplZCA9IHByb3RvLlNlcmlhbGl6ZVRvU3RyaW5n
KCkKLSAgICB0ZXN0X3V0aWwuRXhwZWN0QWxsRmllbGRzQW5kRXh0ZW5zaW9uc0luT3JkZXIoc2Vy
aWFsaXplZCkKLQotICBkZWYgdGVzdE1lcmdlRnJvbVN0cmluZ1doZW5GaWVsZHNBbHJlYWR5U2V0
KHNlbGYpOgotICAgIGZpcnN0X3Byb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0g
ICAgZmlyc3RfcHJvdG8ucmVwZWF0ZWRfc3RyaW5nLmFwcGVuZCgnZm9vYmFyJykKLSAgICBmaXJz
dF9wcm90by5vcHRpb25hbF9pbnQzMiA9IDIzCi0gICAgZmlyc3RfcHJvdG8ub3B0aW9uYWxfbmVz
dGVkX21lc3NhZ2UuYmIgPSA0MgotICAgIHNlcmlhbGl6ZWQgPSBmaXJzdF9wcm90by5TZXJpYWxp
emVUb1N0cmluZygpCi0KLSAgICBzZWNvbmRfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5
cGVzKCkKLSAgICBzZWNvbmRfcHJvdG8ucmVwZWF0ZWRfc3RyaW5nLmFwcGVuZCgnYmF6JykKLSAg
ICBzZWNvbmRfcHJvdG8ub3B0aW9uYWxfaW50MzIgPSAxMDAKLSAgICBzZWNvbmRfcHJvdG8ub3B0
aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIgPSA5OTkKLQotICAgIGJ5dGVzX3BhcnNlZCA9IHNlY29u
ZF9wcm90by5NZXJnZUZyb21TdHJpbmcoc2VyaWFsaXplZCkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KGxlbihzZXJpYWxpemVkKSwgYnl0ZXNfcGFyc2VkKQotCi0gICAgIyBFbnN1cmUgdGhhdCB3ZSBh
cHBlbmQgdG8gcmVwZWF0ZWQgZmllbGRzLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydiYXonLCAn
Zm9vYmFyJ10sIGxpc3Qoc2Vjb25kX3Byb3RvLnJlcGVhdGVkX3N0cmluZykpCi0gICAgIyBFbnN1
cmUgdGhhdCB3ZSBvdmVyd3JpdGUgbm9ucmVwZWF0ZCBzY2FsYXJzLgotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMjMsIHNlY29uZF9wcm90by5vcHRpb25hbF9pbnQzMikKLSAgICAjIEVuc3VyZSB0aGF0
IHdlIHJlY3Vyc2l2ZWx5IGNhbGwgTWVyZ2VGcm9tU3RyaW5nKCkgb24KLSAgICAjIHN1Ym1lc3Nh
Z2VzLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHNlY29uZF9wcm90by5vcHRpb25hbF9uZXN0
ZWRfbWVzc2FnZS5iYikKLQotICBkZWYgdGVzdE1lc3NhZ2VTZXRXaXJlRm9ybWF0KHNlbGYpOgot
ICAgIHByb3RvID0gbWVzc2FnZV9zZXRfZXh0ZW5zaW9uc19wYjIuVGVzdE1lc3NhZ2VTZXQoKQot
ICAgIGV4dGVuc2lvbl9tZXNzYWdlMSA9IG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbnNfcGIyLlRlc3RN
ZXNzYWdlU2V0RXh0ZW5zaW9uMQotICAgIGV4dGVuc2lvbl9tZXNzYWdlMiA9IG1lc3NhZ2Vfc2V0
X2V4dGVuc2lvbnNfcGIyLlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMgotICAgIGV4dGVuc2lvbjEg
PSBleHRlbnNpb25fbWVzc2FnZTEubWVzc2FnZV9zZXRfZXh0ZW5zaW9uCi0gICAgZXh0ZW5zaW9u
MiA9IGV4dGVuc2lvbl9tZXNzYWdlMi5tZXNzYWdlX3NldF9leHRlbnNpb24KLSAgICBleHRlbnNp
b24zID0gbWVzc2FnZV9zZXRfZXh0ZW5zaW9uc19wYjIubWVzc2FnZV9zZXRfZXh0ZW5zaW9uMwot
ICAgIHByb3RvLkV4dGVuc2lvbnNbZXh0ZW5zaW9uMV0uaSA9IDEyMwotICAgIHByb3RvLkV4dGVu
c2lvbnNbZXh0ZW5zaW9uMl0uc3RyID0gJ2ZvbycKLSAgICBwcm90by5FeHRlbnNpb25zW2V4dGVu
c2lvbjNdLnRleHQgPSAnYmFyJwotCi0gICAgIyBTZXJpYWxpemUgdXNpbmcgdGhlIE1lc3NhZ2VT
ZXQgd2lyZSBmb3JtYXQgKHRoaXMgaXMgc3BlY2lmaWVkIGluIHRoZQotICAgICMgLnByb3RvIGZp
bGUpLgotICAgIHNlcmlhbGl6ZWQgPSBwcm90by5TZXJpYWxpemVUb1N0cmluZygpCi0KLSAgICBy
YXcgPSB1bml0dGVzdF9tc2V0X3BiMi5SYXdNZXNzYWdlU2V0KCkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgcmF3LkRFU0NSSVBUT1IuR2V0T3B0aW9u
cygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAg
ICAgIGxlbihzZXJpYWxpemVkKSwKLSAgICAgICAgcmF3Lk1lcmdlRnJvbVN0cmluZyhzZXJpYWxp
emVkKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihyYXcuaXRlbSkpCi0KLSAgICBtZXNz
YWdlMSA9IG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbnNfcGIyLlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9u
MSgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgbGVuKHJhdy5pdGVtWzBdLm1lc3Nh
Z2UpLAotICAgICAgICBtZXNzYWdlMS5NZXJnZUZyb21TdHJpbmcocmF3Lml0ZW1bMF0ubWVzc2Fn
ZSkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxMjMsIG1lc3NhZ2UxLmkpCi0KLSAgICBtZXNzYWdl
MiA9IG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbnNfcGIyLlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMigp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgbGVuKHJhdy5pdGVtWzFdLm1lc3NhZ2Up
LAotICAgICAgICBtZXNzYWdlMi5NZXJnZUZyb21TdHJpbmcocmF3Lml0ZW1bMV0ubWVzc2FnZSkp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vJywgbWVzc2FnZTIuc3RyKQotCi0gICAgbWVzc2Fn
ZTMgPSBtZXNzYWdlX3NldF9leHRlbnNpb25zX3BiMi5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjMo
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGxlbihyYXcuaXRlbVsyXS5tZXNzYWdl
KSwKLSAgICAgICAgbWVzc2FnZTMuTWVyZ2VGcm9tU3RyaW5nKHJhdy5pdGVtWzJdLm1lc3NhZ2Up
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhcicsIG1lc3NhZ2UzLnRleHQpCi0KLSAgICAjIERl
c2VyaWFsaXplIHVzaW5nIHRoZSBNZXNzYWdlU2V0IHdpcmUgZm9ybWF0LgotICAgIHByb3RvMiA9
IG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbnNfcGIyLlRlc3RNZXNzYWdlU2V0KCkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKAotICAgICAgICBsZW4oc2VyaWFsaXplZCksCi0gICAgICAgIHByb3RvMi5NZXJn
ZUZyb21TdHJpbmcoc2VyaWFsaXplZCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxMjMsIHByb3Rv
Mi5FeHRlbnNpb25zW2V4dGVuc2lvbjFdLmkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vJywg
cHJvdG8yLkV4dGVuc2lvbnNbZXh0ZW5zaW9uMl0uc3RyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J2JhcicsIHByb3RvMi5FeHRlbnNpb25zW2V4dGVuc2lvbjNdLnRleHQpCi0KLSAgICAjIENoZWNr
IGJ5dGUgc2l6ZS4KLSAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvMi5CeXRlU2l6ZSgpLCBsZW4o
c2VyaWFsaXplZCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5CeXRlU2l6ZSgpLCBsZW4o
c2VyaWFsaXplZCkpCi0KLSAgZGVmIHRlc3RNZXNzYWdlU2V0V2lyZUZvcm1hdFVua25vd25FeHRl
bnNpb24oc2VsZik6Ci0gICAgIyBDcmVhdGUgYSBtZXNzYWdlIHVzaW5nIHRoZSBtZXNzYWdlIHNl
dCB3aXJlIGZvcm1hdCB3aXRoIGFuIHVua25vd24KLSAgICAjIG1lc3NhZ2UuCi0gICAgcmF3ID0g
dW5pdHRlc3RfbXNldF9wYjIuUmF3TWVzc2FnZVNldCgpCi0KLSAgICAjIEFkZCBhbiBpdGVtLgot
ICAgIGl0ZW0gPSByYXcuaXRlbS5hZGQoKQotICAgIGl0ZW0udHlwZV9pZCA9IDk4NDE4NjAzCi0g
ICAgZXh0ZW5zaW9uX21lc3NhZ2UxID0gbWVzc2FnZV9zZXRfZXh0ZW5zaW9uc19wYjIuVGVzdE1l
c3NhZ2VTZXRFeHRlbnNpb24xCi0gICAgbWVzc2FnZTEgPSBtZXNzYWdlX3NldF9leHRlbnNpb25z
X3BiMi5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEoKQotICAgIG1lc3NhZ2UxLmkgPSAxMjM0NQot
ICAgIGl0ZW0ubWVzc2FnZSA9IG1lc3NhZ2UxLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLQotICAgICMg
QWRkIGEgc2Vjb25kLCB1bmtub3duIGV4dGVuc2lvbi4KLSAgICBpdGVtID0gcmF3Lml0ZW0uYWRk
KCkKLSAgICBpdGVtLnR5cGVfaWQgPSA5ODQxODYwNAotICAgIGV4dGVuc2lvbl9tZXNzYWdlMSA9
IG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbnNfcGIyLlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMQotICAg
IG1lc3NhZ2UxID0gbWVzc2FnZV9zZXRfZXh0ZW5zaW9uc19wYjIuVGVzdE1lc3NhZ2VTZXRFeHRl
bnNpb24xKCkKLSAgICBtZXNzYWdlMS5pID0gMTIzNDYKLSAgICBpdGVtLm1lc3NhZ2UgPSBtZXNz
YWdlMS5TZXJpYWxpemVUb1N0cmluZygpCi0KLSAgICAjIEFkZCBhbm90aGVyIHVua25vd24gZXh0
ZW5zaW9uLgotICAgIGl0ZW0gPSByYXcuaXRlbS5hZGQoKQotICAgIGl0ZW0udHlwZV9pZCA9IDk4
NDE4NjA1Ci0gICAgbWVzc2FnZTEgPSBtZXNzYWdlX3NldF9leHRlbnNpb25zX3BiMi5UZXN0TWVz
c2FnZVNldEV4dGVuc2lvbjIoKQotICAgIG1lc3NhZ2UxLnN0ciA9ICdmb28nCi0gICAgaXRlbS5t
ZXNzYWdlID0gbWVzc2FnZTEuU2VyaWFsaXplVG9TdHJpbmcoKQotCi0gICAgc2VyaWFsaXplZCA9
IHJhdy5TZXJpYWxpemVUb1N0cmluZygpCi0KLSAgICAjIFBhcnNlIG1lc3NhZ2UgdXNpbmcgdGhl
IG1lc3NhZ2Ugc2V0IHdpcmUgZm9ybWF0LgotICAgIHByb3RvID0gbWVzc2FnZV9zZXRfZXh0ZW5z
aW9uc19wYjIuVGVzdE1lc3NhZ2VTZXQoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAg
IGxlbihzZXJpYWxpemVkKSwKLSAgICAgICAgcHJvdG8uTWVyZ2VGcm9tU3RyaW5nKHNlcmlhbGl6
ZWQpKQotCi0gICAgIyBDaGVjayB0aGF0IHRoZSBtZXNzYWdlIHBhcnNlZCB3ZWxsLgotICAgIGV4
dGVuc2lvbl9tZXNzYWdlMSA9IG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbnNfcGIyLlRlc3RNZXNzYWdl
U2V0RXh0ZW5zaW9uMQotICAgIGV4dGVuc2lvbjEgPSBleHRlbnNpb25fbWVzc2FnZTEubWVzc2Fn
ZV9zZXRfZXh0ZW5zaW9uCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxMjM0NSwgcHJvdG8uRXh0ZW5z
aW9uc1tleHRlbnNpb24xXS5pKQotCi0gIGRlZiB0ZXN0VW5rbm93bkZpZWxkcyhzZWxmKToKLSAg
ICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHRlc3RfdXRpbC5TZXRB
bGxGaWVsZHMocHJvdG8pCi0KLSAgICBzZXJpYWxpemVkID0gcHJvdG8uU2VyaWFsaXplVG9TdHJp
bmcoKQotCi0gICAgIyBUaGUgZW1wdHkgbWVzc2FnZSBzaG91bGQgYmUgcGFyc2FibGUgd2l0aCBh
bGwgb2YgdGhlIGZpZWxkcwotICAgICMgdW5rbm93bi4KLSAgICBwcm90bzIgPSB1bml0dGVzdF9w
YjIuVGVzdEVtcHR5TWVzc2FnZSgpCi0KLSAgICAjIFBhcnNpbmcgdGhpcyBtZXNzYWdlIHNob3Vs
ZCBzdWNjZWVkLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGxlbihzZXJpYWxpemVk
KSwKLSAgICAgICAgcHJvdG8yLk1lcmdlRnJvbVN0cmluZyhzZXJpYWxpemVkKSkKLQotICAgICMg
Tm93IHRlc3Qgd2l0aCBhIGludDY0IGZpZWxkIHNldC4KLSAgICBwcm90byA9IHVuaXR0ZXN0X3Bi
Mi5UZXN0QWxsVHlwZXMoKQotICAgIHByb3RvLm9wdGlvbmFsX2ludDY0ID0gMHgwZmZmZmZmZmZm
ZmZmZmZmCi0gICAgc2VyaWFsaXplZCA9IHByb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLSAgICAj
IFRoZSBlbXB0eSBtZXNzYWdlIHNob3VsZCBiZSBwYXJzYWJsZSB3aXRoIGFsbCBvZiB0aGUgZmll
bGRzCi0gICAgIyB1bmtub3duLgotICAgIHByb3RvMiA9IHVuaXR0ZXN0X3BiMi5UZXN0RW1wdHlN
ZXNzYWdlKCkKLSAgICAjIFBhcnNpbmcgdGhpcyBtZXNzYWdlIHNob3VsZCBzdWNjZWVkLgotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGxlbihzZXJpYWxpemVkKSwKLSAgICAgICAgcHJv
dG8yLk1lcmdlRnJvbVN0cmluZyhzZXJpYWxpemVkKSkKLQotICBkZWYgX0NoZWNrUmFpc2VzKHNl
bGYsIGV4Y19jbGFzcywgY2FsbGFibGVfb2JqLCBleGNlcHRpb24pOgotICAgICIiIlRoaXMgbWV0
aG9kIGNoZWNrcyBpZiB0aGUgZXhjcGV0aW9uIHR5cGUgYW5kIG1lc3NhZ2UgYXJlIGFzIGV4cGVj
dGVkLiIiIgotICAgIHRyeToKLSAgICAgIGNhbGxhYmxlX29iaigpCi0gICAgZXhjZXB0IGV4Y19j
bGFzcyBhcyBleDoKLSAgICAgICMgQ2hlY2sgaWYgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlIGlzIHRo
ZSByaWdodCBvbmUuCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y2VwdGlvbiwgc3RyKGV4KSkK
LSAgICAgIHJldHVybgotICAgIGVsc2U6Ci0gICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRp
b24oJyVzIG5vdCByYWlzZWQnICUgc3RyKGV4Y19jbGFzcykpCi0KLSAgZGVmIHRlc3RTZXJpYWxp
emVVbmluaXRpYWxpemVkKHNlbGYpOgotICAgIHByb3RvID0gdW5pdHRlc3RfcGIyLlRlc3RSZXF1
aXJlZCgpCi0gICAgc2VsZi5fQ2hlY2tSYWlzZXMoCi0gICAgICAgIG1lc3NhZ2UuRW5jb2RlRXJy
b3IsCi0gICAgICAgIHByb3RvLlNlcmlhbGl6ZVRvU3RyaW5nLAotICAgICAgICAnTWVzc2FnZSBw
cm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWQgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHM6
ICcKLSAgICAgICAgJ2EsYixjJykKLSAgICAjIFNob3VsZG4ndCByYWlzZSBleGNlcHRpb25zLgot
ICAgIHBhcnRpYWwgPSBwcm90by5TZXJpYWxpemVQYXJ0aWFsVG9TdHJpbmcoKQotCi0gICAgcHJv
dG8yID0gdW5pdHRlc3RfcGIyLlRlc3RSZXF1aXJlZCgpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShw
cm90bzIuSGFzRmllbGQoJ2EnKSkKLSAgICAjIHByb3RvMiBQYXJzZUZyb21TdHJpbmcgZG9lcyBu
b3QgY2hlY2sgdGhhdCByZXF1aXJlZCBmaWVsZHMgYXJlIHNldC4KLSAgICBwcm90bzIuUGFyc2VG
cm9tU3RyaW5nKHBhcnRpYWwpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShwcm90bzIuSGFzRmllbGQo
J2EnKSkKLQotICAgIHByb3RvLmEgPSAxCi0gICAgc2VsZi5fQ2hlY2tSYWlzZXMoCi0gICAgICAg
IG1lc3NhZ2UuRW5jb2RlRXJyb3IsCi0gICAgICAgIHByb3RvLlNlcmlhbGl6ZVRvU3RyaW5nLAot
ICAgICAgICAnTWVzc2FnZSBwcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWQgaXMgbWlzc2lu
ZyByZXF1aXJlZCBmaWVsZHM6IGIsYycpCi0gICAgIyBTaG91bGRuJ3QgcmFpc2UgZXhjZXB0aW9u
cy4KLSAgICBwYXJ0aWFsID0gcHJvdG8uU2VyaWFsaXplUGFydGlhbFRvU3RyaW5nKCkKLQotICAg
IHByb3RvLmIgPSAyCi0gICAgc2VsZi5fQ2hlY2tSYWlzZXMoCi0gICAgICAgIG1lc3NhZ2UuRW5j
b2RlRXJyb3IsCi0gICAgICAgIHByb3RvLlNlcmlhbGl6ZVRvU3RyaW5nLAotICAgICAgICAnTWVz
c2FnZSBwcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWQgaXMgbWlzc2luZyByZXF1aXJlZCBm
aWVsZHM6IGMnKQotICAgICMgU2hvdWxkbid0IHJhaXNlIGV4Y2VwdGlvbnMuCi0gICAgcGFydGlh
bCA9IHByb3RvLlNlcmlhbGl6ZVBhcnRpYWxUb1N0cmluZygpCi0KLSAgICBwcm90by5jID0gMwot
ICAgIHNlcmlhbGl6ZWQgPSBwcm90by5TZXJpYWxpemVUb1N0cmluZygpCi0gICAgIyBTaG91bGRu
J3QgcmFpc2UgZXhjZXB0aW9ucy4KLSAgICBwYXJ0aWFsID0gcHJvdG8uU2VyaWFsaXplUGFydGlh
bFRvU3RyaW5nKCkKLQotICAgIHByb3RvMiA9IHVuaXR0ZXN0X3BiMi5UZXN0UmVxdWlyZWQoKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGxlbihzZXJpYWxpemVkKSwKLSAgICAgICAg
cHJvdG8yLk1lcmdlRnJvbVN0cmluZyhzZXJpYWxpemVkKSkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDEsIHByb3RvMi5hKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcHJvdG8yLmIpCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbCgzLCBwcm90bzIuYykKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAg
ICBsZW4ocGFydGlhbCksCi0gICAgICAgIHByb3RvMi5NZXJnZUZyb21TdHJpbmcocGFydGlhbCkp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwcm90bzIuYSkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDIsIHByb3RvMi5iKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgcHJvdG8yLmMpCi0KLSAgZGVm
IHRlc3RTZXJpYWxpemVVbmluaXRpYWxpemVkU3ViTWVzc2FnZShzZWxmKToKLSAgICBwcm90byA9
IHVuaXR0ZXN0X3BiMi5UZXN0UmVxdWlyZWRGb3JlaWduKCkKLQotICAgICMgU3ViLW1lc3NhZ2Ug
ZG9lc24ndCBleGlzdCB5ZXQsIHNvIHRoaXMgc3VjY2VlZHMuCi0gICAgcHJvdG8uU2VyaWFsaXpl
VG9TdHJpbmcoKQotCi0gICAgcHJvdG8ub3B0aW9uYWxfbWVzc2FnZS5hID0gMQotICAgIHNlbGYu
X0NoZWNrUmFpc2VzKAotICAgICAgICBtZXNzYWdlLkVuY29kZUVycm9yLAotICAgICAgICBwcm90
by5TZXJpYWxpemVUb1N0cmluZywKLSAgICAgICAgJ01lc3NhZ2UgcHJvdG9idWZfdW5pdHRlc3Qu
VGVzdFJlcXVpcmVkRm9yZWlnbiAnCi0gICAgICAgICdpcyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxk
czogJwotICAgICAgICAnb3B0aW9uYWxfbWVzc2FnZS5iLG9wdGlvbmFsX21lc3NhZ2UuYycpCi0K
LSAgICBwcm90by5vcHRpb25hbF9tZXNzYWdlLmIgPSAyCi0gICAgcHJvdG8ub3B0aW9uYWxfbWVz
c2FnZS5jID0gMwotICAgIHByb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLQotICAgIHByb3RvLnJl
cGVhdGVkX21lc3NhZ2UuYWRkKCkuYSA9IDEKLSAgICBwcm90by5yZXBlYXRlZF9tZXNzYWdlLmFk
ZCgpLmIgPSAyCi0gICAgc2VsZi5fQ2hlY2tSYWlzZXMoCi0gICAgICAgIG1lc3NhZ2UuRW5jb2Rl
RXJyb3IsCi0gICAgICAgIHByb3RvLlNlcmlhbGl6ZVRvU3RyaW5nLAotICAgICAgICAnTWVzc2Fn
ZSBwcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWRGb3JlaWduIGlzIG1pc3NpbmcgcmVxdWly
ZWQgZmllbGRzOiAnCi0gICAgICAgICdyZXBlYXRlZF9tZXNzYWdlWzBdLmIscmVwZWF0ZWRfbWVz
c2FnZVswXS5jLCcKLSAgICAgICAgJ3JlcGVhdGVkX21lc3NhZ2VbMV0uYSxyZXBlYXRlZF9tZXNz
YWdlWzFdLmMnKQotCi0gICAgcHJvdG8ucmVwZWF0ZWRfbWVzc2FnZVswXS5iID0gMgotICAgIHBy
b3RvLnJlcGVhdGVkX21lc3NhZ2VbMF0uYyA9IDMKLSAgICBwcm90by5yZXBlYXRlZF9tZXNzYWdl
WzFdLmEgPSAxCi0gICAgcHJvdG8ucmVwZWF0ZWRfbWVzc2FnZVsxXS5jID0gMwotICAgIHByb3Rv
LlNlcmlhbGl6ZVRvU3RyaW5nKCkKLQotICBkZWYgdGVzdFNlcmlhbGl6ZUFsbFBhY2tlZEZpZWxk
cyhzZWxmKToKLSAgICBmaXJzdF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0UGFja2VkVHlwZXMo
KQotICAgIHNlY29uZF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0UGFja2VkVHlwZXMoKQotICAg
IHRlc3RfdXRpbC5TZXRBbGxQYWNrZWRGaWVsZHMoZmlyc3RfcHJvdG8pCi0gICAgc2VyaWFsaXpl
ZCA9IGZpcnN0X3Byb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KGZpcnN0X3Byb3RvLkJ5dGVTaXplKCksIGxlbihzZXJpYWxpemVkKSkKLSAgICBieXRlc19yZWFk
ID0gc2Vjb25kX3Byb3RvLk1lcmdlRnJvbVN0cmluZyhzZXJpYWxpemVkKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2Vjb25kX3Byb3RvLkJ5dGVTaXplKCksIGJ5dGVzX3JlYWQpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbChmaXJzdF9wcm90bywgc2Vjb25kX3Byb3RvKQotCi0gIGRlZiB0ZXN0U2VyaWFs
aXplQWxsUGFja2VkRXh0ZW5zaW9ucyhzZWxmKToKLSAgICBmaXJzdF9wcm90byA9IHVuaXR0ZXN0
X3BiMi5UZXN0UGFja2VkRXh0ZW5zaW9ucygpCi0gICAgc2Vjb25kX3Byb3RvID0gdW5pdHRlc3Rf
cGIyLlRlc3RQYWNrZWRFeHRlbnNpb25zKCkKLSAgICB0ZXN0X3V0aWwuU2V0QWxsUGFja2VkRXh0
ZW5zaW9ucyhmaXJzdF9wcm90bykKLSAgICBzZXJpYWxpemVkID0gZmlyc3RfcHJvdG8uU2VyaWFs
aXplVG9TdHJpbmcoKQotICAgIGJ5dGVzX3JlYWQgPSBzZWNvbmRfcHJvdG8uTWVyZ2VGcm9tU3Ry
aW5nKHNlcmlhbGl6ZWQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWNvbmRfcHJvdG8uQnl0ZVNp
emUoKSwgYnl0ZXNfcmVhZCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X3Byb3RvLCBzZWNv
bmRfcHJvdG8pCi0KLSAgZGVmIHRlc3RNZXJnZVBhY2tlZEZyb21TdHJpbmdXaGVuU29tZUZpZWxk
c0FscmVhZHlTZXQoc2VsZik6Ci0gICAgZmlyc3RfcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVzdFBh
Y2tlZFR5cGVzKCkKLSAgICBmaXJzdF9wcm90by5wYWNrZWRfaW50MzIuZXh0ZW5kKFsxLCAyXSkK
LSAgICBmaXJzdF9wcm90by5wYWNrZWRfZG91YmxlLmFwcGVuZCgzLjApCi0gICAgc2VyaWFsaXpl
ZCA9IGZpcnN0X3Byb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLQotICAgIHNlY29uZF9wcm90byA9
IHVuaXR0ZXN0X3BiMi5UZXN0UGFja2VkVHlwZXMoKQotICAgIHNlY29uZF9wcm90by5wYWNrZWRf
aW50MzIuYXBwZW5kKDMpCi0gICAgc2Vjb25kX3Byb3RvLnBhY2tlZF9kb3VibGUuZXh0ZW5kKFsx
LjAsIDIuMF0pCi0gICAgc2Vjb25kX3Byb3RvLnBhY2tlZF9zaW50MzIuYXBwZW5kKDQpCi0KLSAg
ICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBsZW4oc2VyaWFsaXplZCksCi0gICAgICAgIHNl
Y29uZF9wcm90by5NZXJnZUZyb21TdHJpbmcoc2VyaWFsaXplZCkpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbChbMywgMSwgMl0sIHNlY29uZF9wcm90by5wYWNrZWRfaW50MzIpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChbMS4wLCAyLjAsIDMuMF0sIHNlY29uZF9wcm90by5wYWNrZWRfZG91YmxlKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoWzRdLCBzZWNvbmRfcHJvdG8ucGFja2VkX3NpbnQzMikKLQotICBk
ZWYgdGVzdFBhY2tlZEZpZWxkc1dpcmVGb3JtYXQoc2VsZik6Ci0gICAgcHJvdG8gPSB1bml0dGVz
dF9wYjIuVGVzdFBhY2tlZFR5cGVzKCkKLSAgICBwcm90by5wYWNrZWRfaW50MzIuZXh0ZW5kKFsx
LCAyLCAxNTAsIDNdKSAgIyAxICsgMSArIDIgKyAxIGJ5dGVzCi0gICAgcHJvdG8ucGFja2VkX2Rv
dWJsZS5leHRlbmQoWzEuMCwgMTAwMC4wXSkgICMgOCArIDggYnl0ZXMKLSAgICBwcm90by5wYWNr
ZWRfZmxvYXQuYXBwZW5kKDIuMCkgICAgICAgICAgICAgIyA0IGJ5dGVzLCB3aWxsIGJlIGJlZm9y
ZSBkb3VibGUKLSAgICBzZXJpYWxpemVkID0gcHJvdG8uU2VyaWFsaXplVG9TdHJpbmcoKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uQnl0ZVNpemUoKSwgbGVuKHNlcmlhbGl6ZWQpKQotICAg
IGQgPSBfTWluaURlY29kZXIoc2VyaWFsaXplZCkKLSAgICBSZWFkVGFnID0gZC5SZWFkRmllbGRO
dW1iZXJBbmRXaXJlVHlwZQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDkwLCB3aXJlX2Zvcm1hdC5X
SVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKSwgUmVhZFRhZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMSsxKzErMiwgZC5SZWFkSW50MzIoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGQuUmVh
ZEludDMyKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBkLlJlYWRJbnQzMigpKQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMTUwLCBkLlJlYWRJbnQzMigpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MywgZC5SZWFkSW50MzIoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCgxMDAsIHdpcmVfZm9ybWF0
LldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpLCBSZWFkVGFnKCkpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCg0LCBkLlJlYWRJbnQzMigpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMi4wLCBkLlJlYWRG
bG9hdCgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwMSwgd2lyZV9mb3JtYXQuV0lSRVRZUEVf
TEVOR1RIX0RFTElNSVRFRCksIFJlYWRUYWcoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDgrOCwg
ZC5SZWFkSW50MzIoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEuMCwgZC5SZWFkRG91YmxlKCkp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgxMDAwLjAsIGQuUmVhZERvdWJsZSgpKQotICAgIHNlbGYu
YXNzZXJ0VHJ1ZShkLkVuZE9mU3RyZWFtKCkpCi0KLSAgZGVmIHRlc3RQYXJzZVBhY2tlZEZyb21V
bnBhY2tlZChzZWxmKToKLSAgICB1bnBhY2tlZCA9IHVuaXR0ZXN0X3BiMi5UZXN0VW5wYWNrZWRU
eXBlcygpCi0gICAgdGVzdF91dGlsLlNldEFsbFVucGFja2VkRmllbGRzKHVucGFja2VkKQotICAg
IHBhY2tlZCA9IHVuaXR0ZXN0X3BiMi5UZXN0UGFja2VkVHlwZXMoKQotICAgIHNlcmlhbGl6ZWQg
PSB1bnBhY2tlZC5TZXJpYWxpemVUb1N0cmluZygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAg
ICAgICAgbGVuKHNlcmlhbGl6ZWQpLAotICAgICAgICBwYWNrZWQuTWVyZ2VGcm9tU3RyaW5nKHNl
cmlhbGl6ZWQpKQotICAgIGV4cGVjdGVkID0gdW5pdHRlc3RfcGIyLlRlc3RQYWNrZWRUeXBlcygp
Ci0gICAgdGVzdF91dGlsLlNldEFsbFBhY2tlZEZpZWxkcyhleHBlY3RlZCkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKGV4cGVjdGVkLCBwYWNrZWQpCi0KLSAgZGVmIHRlc3RQYXJzZVVucGFja2VkRnJv
bVBhY2tlZChzZWxmKToKLSAgICBwYWNrZWQgPSB1bml0dGVzdF9wYjIuVGVzdFBhY2tlZFR5cGVz
KCkKLSAgICB0ZXN0X3V0aWwuU2V0QWxsUGFja2VkRmllbGRzKHBhY2tlZCkKLSAgICB1bnBhY2tl
ZCA9IHVuaXR0ZXN0X3BiMi5UZXN0VW5wYWNrZWRUeXBlcygpCi0gICAgc2VyaWFsaXplZCA9IHBh
Y2tlZC5TZXJpYWxpemVUb1N0cmluZygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAg
bGVuKHNlcmlhbGl6ZWQpLAotICAgICAgICB1bnBhY2tlZC5NZXJnZUZyb21TdHJpbmcoc2VyaWFs
aXplZCkpCi0gICAgZXhwZWN0ZWQgPSB1bml0dGVzdF9wYjIuVGVzdFVucGFja2VkVHlwZXMoKQot
ICAgIHRlc3RfdXRpbC5TZXRBbGxVbnBhY2tlZEZpZWxkcyhleHBlY3RlZCkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKGV4cGVjdGVkLCB1bnBhY2tlZCkKLQotICBkZWYgdGVzdEZpZWxkTnVtYmVycyhz
ZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLkJCX0ZJ
RUxEX05VTUJFUiwgMSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5UZXN0QWxs
VHlwZXMuT1BUSU9OQUxfSU5UMzJfRklFTERfTlVNQkVSLCAxKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwodW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5PUFRJT05BTEdST1VQX0ZJRUxEX05VTUJFUiwg
MTYpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlw
ZXMuT1BUSU9OQUxfTkVTVEVEX01FU1NBR0VfRklFTERfTlVNQkVSLCAxOCkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKAotICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5PUFRJT05BTF9ORVNU
RURfRU5VTV9GSUVMRF9OVU1CRVIsIDIxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3Rf
cGIyLlRlc3RBbGxUeXBlcy5SRVBFQVRFRF9JTlQzMl9GSUVMRF9OVU1CRVIsIDMxKQotICAgIHNl
bGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5SRVBFQVRFREdST1VQX0ZJ
RUxEX05VTUJFUiwgNDYpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgIHVuaXR0ZXN0X3Bi
Mi5UZXN0QWxsVHlwZXMuUkVQRUFURURfTkVTVEVEX01FU1NBR0VfRklFTERfTlVNQkVSLCA0OCkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5S
RVBFQVRFRF9ORVNURURfRU5VTV9GSUVMRF9OVU1CRVIsIDUxKQotCi0gIGRlZiB0ZXN0RXh0ZW5z
aW9uRmllbGROdW1iZXJzKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIy
LlRlc3RSZXF1aXJlZC5zaW5nbGUubnVtYmVyLCAxMDAwKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
dW5pdHRlc3RfcGIyLlRlc3RSZXF1aXJlZC5TSU5HTEVfRklFTERfTlVNQkVSLCAxMDAwKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlRlc3RSZXF1aXJlZC5tdWx0aS5udW1iZXIs
IDEwMDEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCh1bml0dGVzdF9wYjIuVGVzdFJlcXVpcmVkLk1V
TFRJX0ZJRUxEX05VTUJFUiwgMTAwMSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3Bi
Mi5vcHRpb25hbF9pbnQzMl9leHRlbnNpb24ubnVtYmVyLCAxKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwodW5pdHRlc3RfcGIyLk9QVElPTkFMX0lOVDMyX0VYVEVOU0lPTl9GSUVMRF9OVU1CRVIsIDEp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCh1bml0dGVzdF9wYjIub3B0aW9uYWxncm91cF9leHRlbnNp
b24ubnVtYmVyLCAxNikKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5PUFRJT05B
TEdST1VQX0VYVEVOU0lPTl9GSUVMRF9OVU1CRVIsIDE2KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
dW5pdHRlc3RfcGIyLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbi5udW1iZXIsIDE4
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICB1bml0dGVzdF9wYjIuT1BUSU9OQUxfTkVT
VEVEX01FU1NBR0VfRVhURU5TSU9OX0ZJRUxEX05VTUJFUiwgMTgpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCh1bml0dGVzdF9wYjIub3B0aW9uYWxfbmVzdGVkX2VudW1fZXh0ZW5zaW9uLm51bWJlciwg
MjEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCh1bml0dGVzdF9wYjIuT1BUSU9OQUxfTkVTVEVEX0VO
VU1fRVhURU5TSU9OX0ZJRUxEX05VTUJFUiwKLSAgICAgIDIxKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwodW5pdHRlc3RfcGIyLnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbi5udW1iZXIsIDMxKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlJFUEVBVEVEX0lOVDMyX0VYVEVOU0lPTl9G
SUVMRF9OVU1CRVIsIDMxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLnJlcGVh
dGVkZ3JvdXBfZXh0ZW5zaW9uLm51bWJlciwgNDYpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCh1bml0
dGVzdF9wYjIuUkVQRUFURURHUk9VUF9FWFRFTlNJT05fRklFTERfTlVNQkVSLCA0NikKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRl
bnNpb24ubnVtYmVyLCA0OCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgdW5pdHRlc3Rf
cGIyLlJFUEVBVEVEX05FU1RFRF9NRVNTQUdFX0VYVEVOU0lPTl9GSUVMRF9OVU1CRVIsIDQ4KQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4
dGVuc2lvbi5udW1iZXIsIDUxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlJF
UEVBVEVEX05FU1RFRF9FTlVNX0VYVEVOU0lPTl9GSUVMRF9OVU1CRVIsCi0gICAgICA1MSkKLQot
ICBkZWYgdGVzdEluaXRLd2FyZ3Moc2VsZik6Ci0gICAgcHJvdG8gPSB1bml0dGVzdF9wYjIuVGVz
dEFsbFR5cGVzKAotICAgICAgICBvcHRpb25hbF9pbnQzMj0xLAotICAgICAgICBvcHRpb25hbF9z
dHJpbmc9J2ZvbycsCi0gICAgICAgIG9wdGlvbmFsX2Jvb2w9VHJ1ZSwKLSAgICAgICAgb3B0aW9u
YWxfYnl0ZXM9YidiYXInLAotICAgICAgICBvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZT11bml0dGVz
dF9wYjIuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UoYmI9MSksCi0gICAgICAgIG9wdGlvbmFs
X2ZvcmVpZ25fbWVzc2FnZT11bml0dGVzdF9wYjIuRm9yZWlnbk1lc3NhZ2UoYz0xKSwKLSAgICAg
ICAgb3B0aW9uYWxfbmVzdGVkX2VudW09dW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5GT08sCi0g
ICAgICAgIG9wdGlvbmFsX2ZvcmVpZ25fZW51bT11bml0dGVzdF9wYjIuRk9SRUlHTl9GT08sCi0g
ICAgICAgIHJlcGVhdGVkX2ludDMyPVsxLCAyLCAzXSkKLSAgICBzZWxmLmFzc2VydFRydWUocHJv
dG8uSXNJbml0aWFsaXplZCgpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5IYXNGaWVsZCgn
b3B0aW9uYWxfaW50MzInKSkKLSAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uSGFzRmllbGQoJ29w
dGlvbmFsX3N0cmluZycpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5IYXNGaWVsZCgnb3B0
aW9uYWxfYm9vbCcpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5IYXNGaWVsZCgnb3B0aW9u
YWxfYnl0ZXMnKSkKLSAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uSGFzRmllbGQoJ29wdGlvbmFs
X25lc3RlZF9tZXNzYWdlJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLkhhc0ZpZWxkKCdv
cHRpb25hbF9mb3JlaWduX21lc3NhZ2UnKSkKLSAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uSGFz
RmllbGQoJ29wdGlvbmFsX25lc3RlZF9lbnVtJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHByb3Rv
Lkhhc0ZpZWxkKCdvcHRpb25hbF9mb3JlaWduX2VudW0nKSkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDEsIHByb3RvLm9wdGlvbmFsX2ludDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZvbycsIHBy
b3RvLm9wdGlvbmFsX3N0cmluZykKLSAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHByb3RvLm9w
dGlvbmFsX2Jvb2wpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChiJ2JhcicsIHByb3RvLm9wdGlvbmFs
X2J5dGVzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8ub3B0aW9uYWxfbmVzdGVkX21l
c3NhZ2UuYmIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwcm90by5vcHRpb25hbF9mb3JlaWdu
X21lc3NhZ2UuYykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlw
ZXMuRk9PLAotICAgICAgICAgICAgICAgICAgICAgcHJvdG8ub3B0aW9uYWxfbmVzdGVkX2VudW0p
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCh1bml0dGVzdF9wYjIuRk9SRUlHTl9GT08sIHByb3RvLm9w
dGlvbmFsX2ZvcmVpZ25fZW51bSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcHJv
dG8ucmVwZWF0ZWRfaW50MzIpCi0KLSAgZGVmIHRlc3RJbml0QXJnc1Vua25vd25GaWVsZE5hbWUo
c2VsZik6Ci0gICAgZGVmIEluaXRhbGl6ZUVtcHR5TWVzc2FnZVdpdGhFeHRyYUtleXdvcmRBcmco
KToKLSAgICAgIHVudXNlZF9wcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0RW1wdHlNZXNzYWdlKHVu
a25vd249J3Vua25vd24nKQotICAgIHNlbGYuX0NoZWNrUmFpc2VzKAotICAgICAgICBWYWx1ZUVy
cm9yLAotICAgICAgICBJbml0YWxpemVFbXB0eU1lc3NhZ2VXaXRoRXh0cmFLZXl3b3JkQXJnLAot
ICAgICAgICAnUHJvdG9jb2wgbWVzc2FnZSBUZXN0RW1wdHlNZXNzYWdlIGhhcyBubyAidW5rbm93
biIgZmllbGQuJykKLQotICBkZWYgdGVzdEluaXRSZXF1aXJlZEt3YXJncyhzZWxmKToKLSAgICBw
cm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0UmVxdWlyZWQoYT0xLCBiPTEsIGM9MSkKLSAgICBzZWxm
LmFzc2VydFRydWUocHJvdG8uSXNJbml0aWFsaXplZCgpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShw
cm90by5IYXNGaWVsZCgnYScpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5IYXNGaWVsZCgn
YicpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5IYXNGaWVsZCgnYycpKQotICAgIHNlbGYu
YXNzZXJ0VHJ1ZShub3QgcHJvdG8uSGFzRmllbGQoJ2R1bW15MicpKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMSwgcHJvdG8uYSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHByb3RvLmIpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbCgxLCBwcm90by5jKQotCi0gIGRlZiB0ZXN0SW5pdFJlcXVpcmVkRm9y
ZWlnbkt3YXJncyhzZWxmKToKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5UZXN0UmVxdWlyZWRG
b3JlaWduKAotICAgICAgICBvcHRpb25hbF9tZXNzYWdlPXVuaXR0ZXN0X3BiMi5UZXN0UmVxdWly
ZWQoYT0xLCBiPTEsIGM9MSkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLklzSW5pdGlhbGl6
ZWQoKSkKLSAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uSGFzRmllbGQoJ29wdGlvbmFsX21lc3Nh
Z2UnKSkKLSAgICBzZWxmLmFzc2VydFRydWUocHJvdG8ub3B0aW9uYWxfbWVzc2FnZS5Jc0luaXRp
YWxpemVkKCkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLm9wdGlvbmFsX21lc3NhZ2UuSGFz
RmllbGQoJ2EnKSkKLSAgICBzZWxmLmFzc2VydFRydWUocHJvdG8ub3B0aW9uYWxfbWVzc2FnZS5I
YXNGaWVsZCgnYicpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5vcHRpb25hbF9tZXNzYWdl
Lkhhc0ZpZWxkKCdjJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBwcm90by5vcHRpb25hbF9t
ZXNzYWdlLkhhc0ZpZWxkKCdkdW1teTInKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVuaXR0ZXN0
X3BiMi5UZXN0UmVxdWlyZWQoYT0xLCBiPTEsIGM9MSksCi0gICAgICAgICAgICAgICAgICAgICBw
cm90by5vcHRpb25hbF9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8ub3B0
aW9uYWxfbWVzc2FnZS5hKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8ub3B0aW9uYWxf
bWVzc2FnZS5iKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8ub3B0aW9uYWxfbWVzc2Fn
ZS5jKQotCi0gIGRlZiB0ZXN0SW5pdFJlcGVhdGVkS3dhcmdzKHNlbGYpOgotICAgIHByb3RvID0g
dW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcyhyZXBlYXRlZF9pbnQzMj1bMSwgMiwgM10pCi0gICAg
c2VsZi5hc3NlcnRUcnVlKHByb3RvLklzSW5pdGlhbGl6ZWQoKSkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKDEsIHByb3RvLnJlcGVhdGVkX2ludDMyWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwg
cHJvdG8ucmVwZWF0ZWRfaW50MzJbMV0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBwcm90by5y
ZXBlYXRlZF9pbnQzMlsyXSkKLQotCi1jbGFzcyBPcHRpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6Ci0KLSAgZGVmIHRlc3RNZXNzYWdlT3B0aW9ucyhzZWxmKToKLSAgICBwcm90byA9IG1lc3Nh
Z2Vfc2V0X2V4dGVuc2lvbnNfcGIyLlRlc3RNZXNzYWdlU2V0KCkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKFRydWUsCi0gICAgICAgICAgICAgICAgICAgICBwcm90by5ERVNDUklQVE9SLkdldE9wdGlv
bnMoKS5tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCkKLSAgICBwcm90byA9IHVuaXR0ZXN0X3BiMi5U
ZXN0QWxsVHlwZXMoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsCi0gICAgICAgICAgICAg
ICAgICAgICBwcm90by5ERVNDUklQVE9SLkdldE9wdGlvbnMoKS5tZXNzYWdlX3NldF93aXJlX2Zv
cm1hdCkKLQotICBkZWYgdGVzdFBhY2tlZE9wdGlvbnMoc2VsZik6Ci0gICAgcHJvdG8gPSB1bml0
dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBwcm90by5vcHRpb25hbF9pbnQzMiA9IDEKLSAg
ICBwcm90by5vcHRpb25hbF9kb3VibGUgPSAzLjAKLSAgICBmb3IgZmllbGRfZGVzY3JpcHRvciwg
XyBpbiBwcm90by5MaXN0RmllbGRzKCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBm
aWVsZF9kZXNjcmlwdG9yLkdldE9wdGlvbnMoKS5wYWNrZWQpCi0KLSAgICBwcm90byA9IHVuaXR0
ZXN0X3BiMi5UZXN0UGFja2VkVHlwZXMoKQotICAgIHByb3RvLnBhY2tlZF9pbnQzMi5hcHBlbmQo
MSkKLSAgICBwcm90by5wYWNrZWRfZG91YmxlLmFwcGVuZCgzLjApCi0gICAgZm9yIGZpZWxkX2Rl
c2NyaXB0b3IsIF8gaW4gcHJvdG8uTGlzdEZpZWxkcygpOgotICAgICAgc2VsZi5hc3NlcnRFcXVh
bChUcnVlLCBmaWVsZF9kZXNjcmlwdG9yLkdldE9wdGlvbnMoKS5wYWNrZWQpCi0gICAgICBzZWxm
LmFzc2VydEVxdWFsKGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkxBQkVMX1JFUEVBVEVELAot
ICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9kZXNjcmlwdG9yLmxhYmVsKQotCi0KLQotY2xh
c3MgQ2xhc3NBUElUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBAdW5pdHRlc3Quc2tpcElm
KAotICAgICAgYXBpX2ltcGxlbWVudGF0aW9uLlR5cGUoKSA9PSAnY3BwJyBhbmQgYXBpX2ltcGxl
bWVudGF0aW9uLlZlcnNpb24oKSA9PSAyLAotICAgICAgJ0MrKyBpbXBsZW1lbnRhdGlvbiByZXF1
aXJlcyBhIGNhbGwgdG8gTWFrZURlc2NyaXB0b3IoKScpCi0gIGRlZiB0ZXN0TWFrZUNsYXNzV2l0
aE5lc3RlZERlc2NyaXB0b3Ioc2VsZik6Ci0gICAgbGVhZl9kZXNjID0gZGVzY3JpcHRvci5EZXNj
cmlwdG9yKCdsZWFmJywgJ3BhY2thZ2UucGFyZW50LmNoaWxkLmxlYWYnLCAnJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlPU5vbmUsIGZpZWxk
cz1bXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkX3R5cGVz
PVtdLCBlbnVtX3R5cGVzPVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHRlbnNpb25zPVtdKQotICAgIGNoaWxkX2Rlc2MgPSBkZXNjcmlwdG9yLkRlc2NyaXB0b3Io
J2NoaWxkJywgJ3BhY2thZ2UucGFyZW50LmNoaWxkJywgJycsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nX3R5cGU9Tm9uZSwgZmllbGRzPVtdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkX3R5cGVzPVtsZWFmX2Rl
c2NdLCBlbnVtX3R5cGVzPVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXh0ZW5zaW9ucz1bXSkKLSAgICBzaWJsaW5nX2Rlc2MgPSBkZXNjcmlwdG9yLkRlc2NyaXB0
b3IoJ3NpYmxpbmcnLCAncGFja2FnZS5wYXJlbnQuc2libGluZycsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcnLCBjb250YWluaW5nX3R5cGU9Tm9uZSwgZmllbGRz
PVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWRfdHlw
ZXM9W10sIGVudW1fdHlwZXM9W10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4dGVuc2lvbnM9W10pCi0gICAgcGFyZW50X2Rlc2MgPSBkZXNjcmlwdG9yLkRlc2Ny
aXB0b3IoJ3BhcmVudCcsICdwYWNrYWdlLnBhcmVudCcsICcnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZT1Ob25lLCBmaWVsZHM9W10sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkX3R5cGVzPVtjaGls
ZF9kZXNjLCBzaWJsaW5nX2Rlc2NdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1fdHlwZXM9W10sIGV4dGVuc2lvbnM9W10pCi0gICAgbWVzc2FnZV9jbGFzcyA9
IHJlZmxlY3Rpb24uTWFrZUNsYXNzKHBhcmVudF9kZXNjKQotICAgIHNlbGYuYXNzZXJ0SW4oJ2No
aWxkJywgbWVzc2FnZV9jbGFzcy5fX2RpY3RfXykKLSAgICBzZWxmLmFzc2VydEluKCdzaWJsaW5n
JywgbWVzc2FnZV9jbGFzcy5fX2RpY3RfXykKLSAgICBzZWxmLmFzc2VydEluKCdsZWFmJywgbWVz
c2FnZV9jbGFzcy5jaGlsZC5fX2RpY3RfXykKLQotICBkZWYgX0dldFNlcmlhbGl6ZWRGaWxlRGVz
Y3JpcHRvcihzZWxmLCBuYW1lKToKLSAgICAiIiJHZXQgYSBzZXJpYWxpemVkIHJlcHJlc2VudGF0
aW9uIG9mIGEgdGVzdCBGaWxlRGVzY3JpcHRvclByb3RvLgotCi0gICAgQXJnczoKLSAgICAgIG5h
bWU6IEFsbCBjYWxscyB0byB0aGlzIG11c3QgdXNlIGEgdW5pcXVlIG1lc3NhZ2UgbmFtZSwgdG8g
YXZvaWQKLSAgICAgICAgICBjb2xsaXNpb25zIGluIHRoZSBjcHAgZGVzY3JpcHRvciBwb29sLgot
ICAgIFJldHVybnM6Ci0gICAgICBBIHN0cmluZyBjb250YWluaW5nIHRoZSBzZXJpYWxpemVkIGZv
cm0gb2YgYSB0ZXN0IEZpbGVEZXNjcmlwdG9yUHJvdG8uCi0gICAgIiIiCi0gICAgZmlsZV9kZXNj
cmlwdG9yX3N0ciA9ICgKLSAgICAgICAgJ21lc3NhZ2VfdHlwZSB7JwotICAgICAgICAnICBuYW1l
OiAiJyArIG5hbWUgKyAnIicKLSAgICAgICAgJyAgZmllbGQgeycKLSAgICAgICAgJyAgICBuYW1l
OiAiZmxhdCInCi0gICAgICAgICcgICAgbnVtYmVyOiAxJwotICAgICAgICAnICAgIGxhYmVsOiBM
QUJFTF9SRVBFQVRFRCcKLSAgICAgICAgJyAgICB0eXBlOiBUWVBFX1VJTlQzMicKLSAgICAgICAg
JyAgfScKLSAgICAgICAgJyAgZmllbGQgeycKLSAgICAgICAgJyAgICBuYW1lOiAiYmFyIicKLSAg
ICAgICAgJyAgICBudW1iZXI6IDInCi0gICAgICAgICcgICAgbGFiZWw6IExBQkVMX09QVElPTkFM
JwotICAgICAgICAnICAgIHR5cGU6IFRZUEVfTUVTU0FHRScKLSAgICAgICAgJyAgICB0eXBlX25h
bWU6ICJCYXIiJwotICAgICAgICAnICB9JwotICAgICAgICAnICBuZXN0ZWRfdHlwZSB7JwotICAg
ICAgICAnICAgIG5hbWU6ICJCYXIiJwotICAgICAgICAnICAgIGZpZWxkIHsnCi0gICAgICAgICcg
ICAgICBuYW1lOiAiYmF6IicKLSAgICAgICAgJyAgICAgIG51bWJlcjogMycKLSAgICAgICAgJyAg
ICAgIGxhYmVsOiBMQUJFTF9PUFRJT05BTCcKLSAgICAgICAgJyAgICAgIHR5cGU6IFRZUEVfTUVT
U0FHRScKLSAgICAgICAgJyAgICAgIHR5cGVfbmFtZTogIkJheiInCi0gICAgICAgICcgICAgfScK
LSAgICAgICAgJyAgICBuZXN0ZWRfdHlwZSB7JwotICAgICAgICAnICAgICAgbmFtZTogIkJheiIn
Ci0gICAgICAgICcgICAgICBlbnVtX3R5cGUgeycKLSAgICAgICAgJyAgICAgICAgbmFtZTogImRl
ZXBfZW51bSInCi0gICAgICAgICcgICAgICAgIHZhbHVlIHsnCi0gICAgICAgICcgICAgICAgICAg
bmFtZTogIlZBTFVFX0EiJwotICAgICAgICAnICAgICAgICAgIG51bWJlcjogMCcKLSAgICAgICAg
JyAgICAgICAgfScKLSAgICAgICAgJyAgICAgIH0nCi0gICAgICAgICcgICAgICBmaWVsZCB7Jwot
ICAgICAgICAnICAgICAgICBuYW1lOiAiZGVlcCInCi0gICAgICAgICcgICAgICAgIG51bWJlcjog
NCcKLSAgICAgICAgJyAgICAgICAgbGFiZWw6IExBQkVMX09QVElPTkFMJwotICAgICAgICAnICAg
ICAgICB0eXBlOiBUWVBFX1VJTlQzMicKLSAgICAgICAgJyAgICAgIH0nCi0gICAgICAgICcgICAg
fScKLSAgICAgICAgJyAgfScKLSAgICAgICAgJ30nKQotICAgIGZpbGVfZGVzY3JpcHRvciA9IGRl
c2NyaXB0b3JfcGIyLkZpbGVEZXNjcmlwdG9yUHJvdG8oKQotICAgIHRleHRfZm9ybWF0Lk1lcmdl
KGZpbGVfZGVzY3JpcHRvcl9zdHIsIGZpbGVfZGVzY3JpcHRvcikKLSAgICByZXR1cm4gZmlsZV9k
ZXNjcmlwdG9yLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLQotICBkZWYgdGVzdFBhcnNpbmdGbGF0Q2xh
c3NXaXRoRXhwbGljaXRDbGFzc0RlY2xhcmF0aW9uKHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCB0
aGUgZ2VuZXJhdGVkIGNsYXNzIGNhbiBwYXJzZSBhIGZsYXQgbWVzc2FnZS4iIiIKLSAgICAjIFRP
RE8oeGlhb2ZlbmcpOiBUaGlzIHRlc3QgZmFpbHMgd2l0aCBjcHAgaW1wbGVtZXRuYXRpb24gaW4g
dGhlIGNhbGwKLSAgICAjIG9mIHNpeC53aXRoX21ldGFjbGFzcygpLiBUaGUgb3RoZXIgdHdvIGNh
bGxzaXRlcyBvZiB3aXRoX21ldGFjbGFzcwotICAgICMgaW4gdGhpcyBmaWxlIGFyZSBib3RoIGV4
Y2x1ZGVkIGZyb20gY3BwIHRlc3QsIHNvIGl0IG1pZ2h0IGJlIGV4cGVjdGVkCi0gICAgIyB0byBm
YWlsLiBOZWVkIHNvbWVvbmUgbW9yZSBmYW1pbGlhciB3aXRoIHRoZSBweXRob24gY29kZSB0byB0
YWtlIGEKLSAgICAjIGxvb2sgYXQgdGhpcy4KLSAgICBpZiBhcGlfaW1wbGVtZW50YXRpb24uVHlw
ZSgpICE9ICdweXRob24nOgotICAgICAgcmV0dXJuCi0gICAgZmlsZV9kZXNjcmlwdG9yID0gZGVz
Y3JpcHRvcl9wYjIuRmlsZURlc2NyaXB0b3JQcm90bygpCi0gICAgZmlsZV9kZXNjcmlwdG9yLlBh
cnNlRnJvbVN0cmluZyhzZWxmLl9HZXRTZXJpYWxpemVkRmlsZURlc2NyaXB0b3IoJ0EnKSkKLSAg
ICBtc2dfZGVzY3JpcHRvciA9IGRlc2NyaXB0b3IuTWFrZURlc2NyaXB0b3IoCi0gICAgICAgIGZp
bGVfZGVzY3JpcHRvci5tZXNzYWdlX3R5cGVbMF0pCi0KLSAgICBjbGFzcyBNZXNzYWdlQ2xhc3Mo
c2l4LndpdGhfbWV0YWNsYXNzKHJlZmxlY3Rpb24uR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlw
ZSwgbWVzc2FnZS5NZXNzYWdlKSk6Ci0gICAgICBERVNDUklQVE9SID0gbXNnX2Rlc2NyaXB0b3IK
LSAgICBtc2cgPSBNZXNzYWdlQ2xhc3MoKQotICAgIG1zZ19zdHIgPSAoCi0gICAgICAgICdmbGF0
OiAwICcKLSAgICAgICAgJ2ZsYXQ6IDEgJwotICAgICAgICAnZmxhdDogMiAnKQotICAgIHRleHRf
Zm9ybWF0Lk1lcmdlKG1zZ19zdHIsIG1zZykKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5mbGF0
LCBbMCwgMSwgMl0pCi0KLSAgZGVmIHRlc3RQYXJzaW5nRmxhdENsYXNzKHNlbGYpOgotICAgICIi
IlRlc3QgdGhhdCB0aGUgZ2VuZXJhdGVkIGNsYXNzIGNhbiBwYXJzZSBhIGZsYXQgbWVzc2FnZS4i
IiIKLSAgICBmaWxlX2Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yX3BiMi5GaWxlRGVzY3JpcHRvclBy
b3RvKCkKLSAgICBmaWxlX2Rlc2NyaXB0b3IuUGFyc2VGcm9tU3RyaW5nKHNlbGYuX0dldFNlcmlh
bGl6ZWRGaWxlRGVzY3JpcHRvcignQicpKQotICAgIG1zZ19kZXNjcmlwdG9yID0gZGVzY3JpcHRv
ci5NYWtlRGVzY3JpcHRvcigKLSAgICAgICAgZmlsZV9kZXNjcmlwdG9yLm1lc3NhZ2VfdHlwZVsw
XSkKLSAgICBtc2dfY2xhc3MgPSByZWZsZWN0aW9uLk1ha2VDbGFzcyhtc2dfZGVzY3JpcHRvcikK
LSAgICBtc2cgPSBtc2dfY2xhc3MoKQotICAgIG1zZ19zdHIgPSAoCi0gICAgICAgICdmbGF0OiAw
ICcKLSAgICAgICAgJ2ZsYXQ6IDEgJwotICAgICAgICAnZmxhdDogMiAnKQotICAgIHRleHRfZm9y
bWF0Lk1lcmdlKG1zZ19zdHIsIG1zZykKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5mbGF0LCBb
MCwgMSwgMl0pCi0KLSAgZGVmIHRlc3RQYXJzaW5nTmVzdGVkQ2xhc3Moc2VsZik6Ci0gICAgIiIi
VGVzdCB0aGF0IHRoZSBnZW5lcmF0ZWQgY2xhc3MgY2FuIHBhcnNlIGEgbmVzdGVkIG1lc3NhZ2Uu
IiIiCi0gICAgZmlsZV9kZXNjcmlwdG9yID0gZGVzY3JpcHRvcl9wYjIuRmlsZURlc2NyaXB0b3JQ
cm90bygpCi0gICAgZmlsZV9kZXNjcmlwdG9yLlBhcnNlRnJvbVN0cmluZyhzZWxmLl9HZXRTZXJp
YWxpemVkRmlsZURlc2NyaXB0b3IoJ0MnKSkKLSAgICBtc2dfZGVzY3JpcHRvciA9IGRlc2NyaXB0
b3IuTWFrZURlc2NyaXB0b3IoCi0gICAgICAgIGZpbGVfZGVzY3JpcHRvci5tZXNzYWdlX3R5cGVb
MF0pCi0gICAgbXNnX2NsYXNzID0gcmVmbGVjdGlvbi5NYWtlQ2xhc3MobXNnX2Rlc2NyaXB0b3Ip
Ci0gICAgbXNnID0gbXNnX2NsYXNzKCkKLSAgICBtc2dfc3RyID0gKAotICAgICAgICAnYmFyIHsn
Ci0gICAgICAgICcgIGJheiB7JwotICAgICAgICAnICAgIGRlZXA6IDQnCi0gICAgICAgICcgIH0n
Ci0gICAgICAgICd9JykKLSAgICB0ZXh0X2Zvcm1hdC5NZXJnZShtc2dfc3RyLCBtc2cpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbChtc2cuYmFyLmJhei5kZWVwLCA0KQotCi1pZiBfX25hbWVfXyA9PSAn
X19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9w
cm90b2J1Zi9pbnRlcm5hbC9zZXJ2aWNlX3JlZmxlY3Rpb25fdGVzdC5weSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2ds
ZS9wcm90b2J1Zi9pbnRlcm5hbC9zZXJ2aWNlX3JlZmxlY3Rpb25fdGVzdC5weQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggNjI5MDBiMWQxNTNhYjRmZGJkM2MyY2NhODUzZTg4NmI2ODMw
ZWVlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhv
bi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvc2VydmljZV9yZWZsZWN0aW9uX3Rlc3QucHkKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIwot
IyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMg
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0iIiJUZXN0cyBmb3IgZ29vZ2xlLnByb3RvYnVmLmludGVybmFsLnNlcnZpY2VfcmVm
bGVjdGlvbi4iIiIKLQotX19hdXRob3JfXyA9ICdwZXRhckBnb29nbGUuY29tIChQZXRhciBQZXRy
b3YpJwotCi0KLXRyeToKLSAgaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdCAgI1BZMjYKLWV4
Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZ29vZ2xlLnByb3Rv
YnVmIGltcG9ydCB1bml0dGVzdF9wYjIKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBzZXJ2
aWNlX3JlZmxlY3Rpb24KLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBzZXJ2aWNlCi0KLQot
Y2xhc3MgRm9vVW5pdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0U2Vydmlj
ZShzZWxmKToKLSAgICBjbGFzcyBNb2NrUnBjQ2hhbm5lbChzZXJ2aWNlLlJwY0NoYW5uZWwpOgot
ICAgICAgZGVmIENhbGxNZXRob2Qoc2VsZiwgbWV0aG9kLCBjb250cm9sbGVyLCByZXF1ZXN0LCBy
ZXNwb25zZSwgY2FsbGJhY2spOgotICAgICAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZAotICAgICAg
ICBzZWxmLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyCi0gICAgICAgIHNlbGYucmVxdWVzdCA9IHJl
cXVlc3QKLSAgICAgICAgY2FsbGJhY2socmVzcG9uc2UpCi0KLSAgICBjbGFzcyBNb2NrUnBjQ29u
dHJvbGxlcihzZXJ2aWNlLlJwY0NvbnRyb2xsZXIpOgotICAgICAgZGVmIFNldEZhaWxlZChzZWxm
LCBtc2cpOgotICAgICAgICBzZWxmLmZhaWx1cmVfbWVzc2FnZSA9IG1zZwotCi0gICAgc2VsZi5j
YWxsYmFja19yZXNwb25zZSA9IE5vbmUKLQotICAgIGNsYXNzIE15U2VydmljZSh1bml0dGVzdF9w
YjIuVGVzdFNlcnZpY2UpOgotICAgICAgcGFzcwotCi0gICAgc2VsZi5jYWxsYmFja19yZXNwb25z
ZSA9IE5vbmUKLQotICAgIGRlZiBNeUNhbGxiYWNrKHJlc3BvbnNlKToKLSAgICAgIHNlbGYuY2Fs
bGJhY2tfcmVzcG9uc2UgPSByZXNwb25zZQotCi0gICAgcnBjX2NvbnRyb2xsZXIgPSBNb2NrUnBj
Q29udHJvbGxlcigpCi0gICAgY2hhbm5lbCA9IE1vY2tScGNDaGFubmVsKCkKLSAgICBzcnZjID0g
TXlTZXJ2aWNlKCkKLSAgICBzcnZjLkZvbyhycGNfY29udHJvbGxlciwgdW5pdHRlc3RfcGIyLkZv
b1JlcXVlc3QoKSwgTXlDYWxsYmFjaykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdNZXRob2QgRm9v
IG5vdCBpbXBsZW1lbnRlZC4nLAotICAgICAgICAgICAgICAgICAgICAgcnBjX2NvbnRyb2xsZXIu
ZmFpbHVyZV9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5jYWxsYmFj
a19yZXNwb25zZSkKLQotICAgIHJwY19jb250cm9sbGVyLmZhaWx1cmVfbWVzc2FnZSA9IE5vbmUK
LQotICAgIHNlcnZpY2VfZGVzY3JpcHRvciA9IHVuaXR0ZXN0X3BiMi5UZXN0U2VydmljZS5HZXRE
ZXNjcmlwdG9yKCkKLSAgICBzcnZjLkNhbGxNZXRob2Qoc2VydmljZV9kZXNjcmlwdG9yLm1ldGhv
ZHNbMV0sIHJwY19jb250cm9sbGVyLAotICAgICAgICAgICAgICAgICAgICB1bml0dGVzdF9wYjIu
QmFyUmVxdWVzdCgpLCBNeUNhbGxiYWNrKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ01ldGhvZCBC
YXIgbm90IGltcGxlbWVudGVkLicsCi0gICAgICAgICAgICAgICAgICAgICBycGNfY29udHJvbGxl
ci5mYWlsdXJlX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLmNhbGxi
YWNrX3Jlc3BvbnNlKQotCi0gICAgY2xhc3MgTXlTZXJ2aWNlSW1wbCh1bml0dGVzdF9wYjIuVGVz
dFNlcnZpY2UpOgotICAgICAgZGVmIEZvbyhzZWxmLCBycGNfY29udHJvbGxlciwgcmVxdWVzdCwg
ZG9uZSk6Ci0gICAgICAgIHNlbGYuZm9vX2NhbGxlZCA9IFRydWUKLSAgICAgIGRlZiBCYXIoc2Vs
ZiwgcnBjX2NvbnRyb2xsZXIsIHJlcXVlc3QsIGRvbmUpOgotICAgICAgICBzZWxmLmJhcl9jYWxs
ZWQgPSBUcnVlCi0KLSAgICBzcnZjID0gTXlTZXJ2aWNlSW1wbCgpCi0gICAgcnBjX2NvbnRyb2xs
ZXIuZmFpbHVyZV9tZXNzYWdlID0gTm9uZQotICAgIHNydmMuRm9vKHJwY19jb250cm9sbGVyLCB1
bml0dGVzdF9wYjIuRm9vUmVxdWVzdCgpLCBNeUNhbGxiYWNrKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgcnBjX2NvbnRyb2xsZXIuZmFpbHVyZV9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoVHJ1ZSwgc3J2Yy5mb29fY2FsbGVkKQotCi0gICAgcnBjX2NvbnRyb2xsZXIuZmFpbHVy
ZV9tZXNzYWdlID0gTm9uZQotICAgIHNydmMuQ2FsbE1ldGhvZChzZXJ2aWNlX2Rlc2NyaXB0b3Iu
bWV0aG9kc1sxXSwgcnBjX2NvbnRyb2xsZXIsCi0gICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0
X3BiMi5CYXJSZXF1ZXN0KCksIE15Q2FsbGJhY2spCi0gICAgc2VsZi5hc3NlcnRFcXVhbChOb25l
LCBycGNfY29udHJvbGxlci5mYWlsdXJlX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChU
cnVlLCBzcnZjLmJhcl9jYWxsZWQpCi0KLSAgZGVmIHRlc3RTZXJ2aWNlU3R1YihzZWxmKToKLSAg
ICBjbGFzcyBNb2NrUnBjQ2hhbm5lbChzZXJ2aWNlLlJwY0NoYW5uZWwpOgotICAgICAgZGVmIENh
bGxNZXRob2Qoc2VsZiwgbWV0aG9kLCBjb250cm9sbGVyLCByZXF1ZXN0LAotICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2VfY2xhc3MsIGNhbGxiYWNrKToKLSAgICAgICAgc2VsZi5tZXRob2Qg
PSBtZXRob2QKLSAgICAgICAgc2VsZi5jb250cm9sbGVyID0gY29udHJvbGxlcgotICAgICAgICBz
ZWxmLnJlcXVlc3QgPSByZXF1ZXN0Ci0gICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlX2NsYXNzKCkp
Ci0KLSAgICBzZWxmLmNhbGxiYWNrX3Jlc3BvbnNlID0gTm9uZQotCi0gICAgZGVmIE15Q2FsbGJh
Y2socmVzcG9uc2UpOgotICAgICAgc2VsZi5jYWxsYmFja19yZXNwb25zZSA9IHJlc3BvbnNlCi0K
LSAgICBjaGFubmVsID0gTW9ja1JwY0NoYW5uZWwoKQotICAgIHN0dWIgPSB1bml0dGVzdF9wYjIu
VGVzdFNlcnZpY2VfU3R1YihjaGFubmVsKQotICAgIHJwY19jb250cm9sbGVyID0gJ2NvbnRyb2xs
ZXInCi0gICAgcmVxdWVzdCA9ICdyZXF1ZXN0JwotCi0gICAgIyBHZXREZXNjcmlwdG9yIG5vdyBz
dGF0aWMsIHN0aWxsIHdvcmtzIGFzIGluc3RhbmNlIG1ldGhvZCBmb3IgY29tcGF0aWJpbGl0eQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlRlc3RTZXJ2aWNlX1N0dWIuR2V0RGVz
Y3JpcHRvcigpLAotICAgICAgICAgICAgICAgICAgICAgc3R1Yi5HZXREZXNjcmlwdG9yKCkpCi0K
LSAgICAjIEludm9rZSBtZXRob2QuCi0gICAgc3R1Yi5Gb28ocnBjX2NvbnRyb2xsZXIsIHJlcXVl
c3QsIE15Q2FsbGJhY2spCi0KLSAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5jYWxsYmFj
a19yZXNwb25zZSwgdW5pdHRlc3RfcGIyLkZvb1Jlc3BvbnNlKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwocmVxdWVzdCwgY2hhbm5lbC5yZXF1ZXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocnBjX2Nv
bnRyb2xsZXIsIGNoYW5uZWwuY29udHJvbGxlcikKLSAgICBzZWxmLmFzc2VydEVxdWFsKHN0dWIu
R2V0RGVzY3JpcHRvcigpLm1ldGhvZHNbMF0sIGNoYW5uZWwubWV0aG9kKQotCi0KLWlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24v
Z29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3N5bWJvbF9kYXRhYmFzZV90ZXN0LnB5IGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24v
Z29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3N5bWJvbF9kYXRhYmFzZV90ZXN0LnB5CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTliNDI2ZGM0Y2Q5MTViNDQxZDI5YjgwMWQ5YjYwNTU1
ZjlmNmZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9zeW1ib2xfZGF0YWJhc2VfdGVzdC5weQorKysg
L2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0j
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSIiIlRlc3RzIGZvciBnb29nbGUucHJvdG9idWYuc3ltYm9sX2RhdGFiYXNlLiIiIgot
Ci10cnk6Ci0gIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QgICNQWTI2Ci1leGNlcHQgSW1w
b3J0RXJyb3I6Ci0gIGltcG9ydCB1bml0dGVzdAotCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBv
cnQgdW5pdHRlc3RfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcgot
ZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHN5bWJvbF9kYXRhYmFzZQotCi1jbGFzcyBTeW1i
b2xEYXRhYmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBfRGF0YWJhc2Uoc2Vs
Zik6Ci0gICAgIyBUT0RPKGIvMTc3MzQwOTUpOiBSZW1vdmUgdGhpcyBkaWZmZXJlbmNlIHdoZW4g
dGhlIEMrKyBpbXBsZW1lbnRhdGlvbgotICAgICMgc3VwcG9ydHMgbXVsdGlwbGUgZGF0YWJhc2Vz
LgotICAgIGlmIGRlc2NyaXB0b3IuX1VTRV9DX0RFU0NSSVBUT1JTOgotICAgICAgcmV0dXJuIHN5
bWJvbF9kYXRhYmFzZS5EZWZhdWx0KCkKLSAgICBlbHNlOgotICAgICAgZGIgPSBzeW1ib2xfZGF0
YWJhc2UuU3ltYm9sRGF0YWJhc2UoKQotICAgICAgIyBSZWdpc3RlciByZXByZXNlbnRhdGl2ZSB0
eXBlcyBmcm9tIHVuaXR0ZXN0X3BiMi4KLSAgICAgIGRiLlJlZ2lzdGVyRmlsZURlc2NyaXB0b3Io
dW5pdHRlc3RfcGIyLkRFU0NSSVBUT1IpCi0gICAgICBkYi5SZWdpc3Rlck1lc3NhZ2UodW5pdHRl
c3RfcGIyLlRlc3RBbGxUeXBlcykKLSAgICAgIGRiLlJlZ2lzdGVyTWVzc2FnZSh1bml0dGVzdF9w
YjIuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UpCi0gICAgICBkYi5SZWdpc3Rlck1lc3NhZ2Uo
dW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5PcHRpb25hbEdyb3VwKQotICAgICAgZGIuUmVnaXN0
ZXJNZXNzYWdlKHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuUmVwZWF0ZWRHcm91cCkKLSAgICAg
IGRiLlJlZ2lzdGVyRW51bURlc2NyaXB0b3IodW5pdHRlc3RfcGIyLkZvcmVpZ25FbnVtLkRFU0NS
SVBUT1IpCi0gICAgICBkYi5SZWdpc3RlckVudW1EZXNjcmlwdG9yKHVuaXR0ZXN0X3BiMi5UZXN0
QWxsVHlwZXMuTmVzdGVkRW51bS5ERVNDUklQVE9SKQotICAgICAgcmV0dXJuIGRiCi0KLSAgZGVm
IHRlc3RHZXRQcm90b3R5cGUoc2VsZik6Ci0gICAgaW5zdGFuY2UgPSBzZWxmLl9EYXRhYmFzZSgp
LkdldFByb3RvdHlwZSgKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5ERVNDUklQ
VE9SKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnN0YW5jZSBpcyB1bml0dGVzdF9wYjIuVGVzdEFs
bFR5cGVzKQotCi0gIGRlZiB0ZXN0R2V0TWVzc2FnZXMoc2VsZik6Ci0gICAgbWVzc2FnZXMgPSBz
ZWxmLl9EYXRhYmFzZSgpLkdldE1lc3NhZ2VzKAotICAgICAgICBbJ2dvb2dsZS9wcm90b2J1Zi91
bml0dGVzdC5wcm90byddKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgdW5pdHRlc3Rf
cGIyLlRlc3RBbGxUeXBlcyBpcwotICAgICAgICBtZXNzYWdlc1sncHJvdG9idWZfdW5pdHRlc3Qu
VGVzdEFsbFR5cGVzJ10pCi0KLSAgZGVmIHRlc3RHZXRTeW1ib2woc2VsZik6Ci0gICAgc2VsZi5h
c3NlcnRFcXVhbCgKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcywgc2VsZi5fRGF0
YWJhc2UoKS5HZXRTeW1ib2woCi0gICAgICAgICAgICAncHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs
bFR5cGVzJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgdW5pdHRlc3RfcGIyLlRl
c3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLCBzZWxmLl9EYXRhYmFzZSgpLkdldFN5bWJvbCgKLSAg
ICAgICAgICAgICdwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZScp
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlw
ZXMuT3B0aW9uYWxHcm91cCwgc2VsZi5fRGF0YWJhc2UoKS5HZXRTeW1ib2woCi0gICAgICAgICAg
ICAncHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk9wdGlvbmFsR3JvdXAnKSkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKAotICAgICAgICB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLlJlcGVh
dGVkR3JvdXAsIHNlbGYuX0RhdGFiYXNlKCkuR2V0U3ltYm9sKAotICAgICAgICAgICAgJ3Byb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5SZXBlYXRlZEdyb3VwJykpCi0KLSAgZGVmIHRlc3RF
bnVtcyhzZWxmKToKLSAgICAjIENoZWNrIHJlZ2lzdHJhdGlvbiBvZiB0eXBlcyBpbiB0aGUgcG9v
bC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAncHJvdG9idWZfdW5pdHRlc3QuRm9y
ZWlnbkVudW0nLAotICAgICAgICBzZWxmLl9EYXRhYmFzZSgpLnBvb2wuRmluZEVudW1UeXBlQnlO
YW1lKAotICAgICAgICAgICAgJ3Byb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtJykuZnVsbF9u
YW1lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICdwcm90b2J1Zl91bml0dGVzdC5U
ZXN0QWxsVHlwZXMuTmVzdGVkRW51bScsCi0gICAgICAgIHNlbGYuX0RhdGFiYXNlKCkucG9vbC5G
aW5kRW51bVR5cGVCeU5hbWUoCi0gICAgICAgICAgICAncHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs
bFR5cGVzLk5lc3RlZEVudW0nKS5mdWxsX25hbWUpCi0KLSAgZGVmIHRlc3RGaW5kTWVzc2FnZVR5
cGVCeU5hbWUoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgJ3Byb3RvYnVm
X3VuaXR0ZXN0LlRlc3RBbGxUeXBlcycsCi0gICAgICAgIHNlbGYuX0RhdGFiYXNlKCkucG9vbC5G
aW5kTWVzc2FnZVR5cGVCeU5hbWUoCi0gICAgICAgICAgICAncHJvdG9idWZfdW5pdHRlc3QuVGVz
dEFsbFR5cGVzJykuZnVsbF9uYW1lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICdw
cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZScsCi0gICAgICAgIHNl
bGYuX0RhdGFiYXNlKCkucG9vbC5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoCi0gICAgICAgICAgICAn
cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UnKS5mdWxsX25hbWUp
Ci0KLSAgZGVmIHRlc3RGaW5kRmluZENvbnRhaW5pbmdTeW1ib2woc2VsZik6Ci0gICAgIyBMb29r
dXAgYmFzZWQgb24gZWl0aGVyIGVudW0gb3IgbWVzc2FnZS4KLSAgICBzZWxmLmFzc2VydEVxdWFs
KAotICAgICAgICAnZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnByb3RvJywKLSAgICAgICAgc2Vs
Zi5fRGF0YWJhc2UoKS5wb29sLkZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbCgKLSAgICAgICAgICAg
ICdwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkRW51bScpLm5hbWUpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgJ2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wcm90
bycsCi0gICAgICAgIHNlbGYuX0RhdGFiYXNlKCkucG9vbC5GaW5kRmlsZUNvbnRhaW5pbmdTeW1i
b2woCi0gICAgICAgICAgICAncHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzJykubmFtZSkK
LQotICBkZWYgdGVzdEZpbmRGaWxlQnlOYW1lKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Ci0gICAgICAgICdnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8nLAotICAgICAgICBzZWxm
Ll9EYXRhYmFzZSgpLnBvb2wuRmluZEZpbGVCeU5hbWUoCi0gICAgICAgICAgICAnZ29vZ2xlL3By
b3RvYnVmL3VuaXR0ZXN0LnByb3RvJykubmFtZSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1
Zi9pbnRlcm5hbC90ZXN0X2JhZF9pZGVudGlmaWVycy5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90
b2J1Zi9pbnRlcm5hbC90ZXN0X2JhZF9pZGVudGlmaWVycy5wcm90bwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzQ4NjBlYTg4YTIyZTMzMjBhMWE2ZGM2MTcyZTdkMDVjMzNjMmUzMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29n
bGUvcHJvdG9idWYvaW50ZXJuYWwvdGVzdF9iYWRfaWRlbnRpZmllcnMucHJvdG8KKysrIC9kZXYv
bnVsbApAQCAtMSw1MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotCi1zeW50YXgg
PSAicHJvdG8yIjsKLQotcGFja2FnZSBwcm90b2J1Zl91bml0dGVzdDsKLQotb3B0aW9uIHB5X2dl
bmVyaWNfc2VydmljZXMgPSB0cnVlOwotCi1tZXNzYWdlIFRlc3RCYWRJZGVudGlmaWVycyB7Ci0g
IGV4dGVuc2lvbnMgMTAwIHRvIG1heDsKLX0KLQotLy8gTWFrZSBzdXJlIHRoZXNlIHJlYXNvbmFi
bGUgZXh0ZW5zaW9uIG5hbWVzIGRvbid0IGNvbmZsaWN0IHdpdGggaW50ZXJuYWwKLS8vIHZhcmlh
Ymxlcy4KLWV4dGVuZCBUZXN0QmFkSWRlbnRpZmllcnMgewotICBvcHRpb25hbCBzdHJpbmcgbWVz
c2FnZSA9IDEwMCBbZGVmYXVsdD0iZm9vIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBkZXNjcmlwdG9y
ID0gMTAxIFtkZWZhdWx0PSJiYXIiXTsKLSAgb3B0aW9uYWwgc3RyaW5nIHJlZmxlY3Rpb24gPSAx
MDIgW2RlZmF1bHQ9ImJheiJdOwotICBvcHRpb25hbCBzdHJpbmcgc2VydmljZSA9IDEwMyBbZGVm
YXVsdD0icXV4Il07Ci19Ci0KLW1lc3NhZ2UgQW5vdGhlck1lc3NhZ2Uge30KLXNlcnZpY2UgQW5v
dGhlclNlcnZpY2Uge30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5h
bC90ZXN0X3V0aWwucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvdGVzdF91dGls
LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyYzgwNTU5OWI2MmY0YzdiYTMxYjdl
YjcwMTU0MWU4NDNkOWM4NGFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC90ZXN0X3V0aWwucHkKKysr
IC9kZXYvbnVsbApAQCAtMSw2OTYgKzAsMCBAQAotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoK
LSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJVdGlsaXRpZXMgZm9yIFB5
dGhvbiBwcm90bzIgdGVzdHMuCi0KLVRoaXMgaXMgaW50ZW50aW9uYWxseSBtb2RlbGVkIG9uIEMr
KyBjb2RlIGluCi0vL2dvb2dsZS9wcm90b2J1Zi90ZXN0X3V0aWwuKi4KLSIiIgotCi1fX2F1dGhv
cl9fID0gJ3JvYmluc29uQGdvb2dsZS5jb20gKFdpbGwgUm9iaW5zb24pJwotCi1pbXBvcnQgb3Mu
cGF0aAotCi1pbXBvcnQgc3lzCi0KLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB1bml0dGVz
dF9pbXBvcnRfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdW5pdHRlc3RfcGIyCi1m
cm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wYjIKLQotIyBUZXN0cyB3aGV0
aGVyIHRoZSBnaXZlbiBUZXN0QWxsVHlwZXMgbWVzc2FnZSBpcyBwcm90bzIgb3Igbm90LgotIyBU
aGlzIGlzIHVzZWQgdG8gZ2F0ZSBzZXZlcmFsIGZpZWxkcy9mZWF0dXJlcyB0aGF0IG9ubHkgZXhp
c3QKLSMgZm9yIHRoZSBwcm90bzIgdmVyc2lvbiBvZiB0aGUgbWVzc2FnZS4KLWRlZiBJc1Byb3Rv
MihtZXNzYWdlKToKLSAgcmV0dXJuIG1lc3NhZ2UuREVTQ1JJUFRPUi5zeW50YXggPT0gInByb3Rv
MiIKLQotZGVmIFNldEFsbE5vbkxhenlGaWVsZHMobWVzc2FnZSk6Ci0gICIiIlNldHMgZXZlcnkg
bm9uLWxhenkgZmllbGQgaW4gdGhlIG1lc3NhZ2UgdG8gYSB1bmlxdWUgdmFsdWUuCi0KLSAgQXJn
czoKLSAgICBtZXNzYWdlOiBBIFRlc3RBbGxUeXBlcyBpbnN0YW5jZS4KLSAgIiIiCi0KLSAgIwot
ICAjIE9wdGlvbmFsIGZpZWxkcy4KLSAgIwotCi0gIG1lc3NhZ2Uub3B0aW9uYWxfaW50MzIgICAg
PSAxMDEKLSAgbWVzc2FnZS5vcHRpb25hbF9pbnQ2NCAgICA9IDEwMgotICBtZXNzYWdlLm9wdGlv
bmFsX3VpbnQzMiAgID0gMTAzCi0gIG1lc3NhZ2Uub3B0aW9uYWxfdWludDY0ICAgPSAxMDQKLSAg
bWVzc2FnZS5vcHRpb25hbF9zaW50MzIgICA9IDEwNQotICBtZXNzYWdlLm9wdGlvbmFsX3NpbnQ2
NCAgID0gMTA2Ci0gIG1lc3NhZ2Uub3B0aW9uYWxfZml4ZWQzMiAgPSAxMDcKLSAgbWVzc2FnZS5v
cHRpb25hbF9maXhlZDY0ICA9IDEwOAotICBtZXNzYWdlLm9wdGlvbmFsX3NmaXhlZDMyID0gMTA5
Ci0gIG1lc3NhZ2Uub3B0aW9uYWxfc2ZpeGVkNjQgPSAxMTAKLSAgbWVzc2FnZS5vcHRpb25hbF9m
bG9hdCAgICA9IDExMQotICBtZXNzYWdlLm9wdGlvbmFsX2RvdWJsZSAgID0gMTEyCi0gIG1lc3Nh
Z2Uub3B0aW9uYWxfYm9vbCAgICAgPSBUcnVlCi0gIG1lc3NhZ2Uub3B0aW9uYWxfc3RyaW5nICAg
PSB1JzExNScKLSAgbWVzc2FnZS5vcHRpb25hbF9ieXRlcyAgICA9IGInMTE2JwotCi0gIGlmIElz
UHJvdG8yKG1lc3NhZ2UpOgotICAgIG1lc3NhZ2Uub3B0aW9uYWxncm91cC5hID0gMTE3Ci0gIG1l
c3NhZ2Uub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIgPSAxMTgKLSAgbWVzc2FnZS5vcHRpb25h
bF9mb3JlaWduX21lc3NhZ2UuYyA9IDExOQotICBtZXNzYWdlLm9wdGlvbmFsX2ltcG9ydF9tZXNz
YWdlLmQgPSAxMjAKLSAgbWVzc2FnZS5vcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2UuZSA9
IDEyNgotCi0gIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVkX2VudW0gPSB1bml0dGVzdF9wYjIuVGVz
dEFsbFR5cGVzLkJBWgotICBtZXNzYWdlLm9wdGlvbmFsX2ZvcmVpZ25fZW51bSA9IHVuaXR0ZXN0
X3BiMi5GT1JFSUdOX0JBWgotICBpZiBJc1Byb3RvMihtZXNzYWdlKToKLSAgICBtZXNzYWdlLm9w
dGlvbmFsX2ltcG9ydF9lbnVtID0gdW5pdHRlc3RfaW1wb3J0X3BiMi5JTVBPUlRfQkFaCi0KLSAg
bWVzc2FnZS5vcHRpb25hbF9zdHJpbmdfcGllY2UgPSB1JzEyNCcKLSAgbWVzc2FnZS5vcHRpb25h
bF9jb3JkID0gdScxMjUnCi0KLSAgIwotICAjIFJlcGVhdGVkIGZpZWxkcy4KLSAgIwotCi0gIG1l
c3NhZ2UucmVwZWF0ZWRfaW50MzIuYXBwZW5kKDIwMSkKLSAgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2
NC5hcHBlbmQoMjAyKQotICBtZXNzYWdlLnJlcGVhdGVkX3VpbnQzMi5hcHBlbmQoMjAzKQotICBt
ZXNzYWdlLnJlcGVhdGVkX3VpbnQ2NC5hcHBlbmQoMjA0KQotICBtZXNzYWdlLnJlcGVhdGVkX3Np
bnQzMi5hcHBlbmQoMjA1KQotICBtZXNzYWdlLnJlcGVhdGVkX3NpbnQ2NC5hcHBlbmQoMjA2KQot
ICBtZXNzYWdlLnJlcGVhdGVkX2ZpeGVkMzIuYXBwZW5kKDIwNykKLSAgbWVzc2FnZS5yZXBlYXRl
ZF9maXhlZDY0LmFwcGVuZCgyMDgpCi0gIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkMzIuYXBwZW5k
KDIwOSkKLSAgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQ2NC5hcHBlbmQoMjEwKQotICBtZXNzYWdl
LnJlcGVhdGVkX2Zsb2F0LmFwcGVuZCgyMTEpCi0gIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlLmFw
cGVuZCgyMTIpCi0gIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbC5hcHBlbmQoVHJ1ZSkKLSAgbWVzc2Fn
ZS5yZXBlYXRlZF9zdHJpbmcuYXBwZW5kKHUnMjE1JykKLSAgbWVzc2FnZS5yZXBlYXRlZF9ieXRl
cy5hcHBlbmQoYicyMTYnKQotCi0gIGlmIElzUHJvdG8yKG1lc3NhZ2UpOgotICAgIG1lc3NhZ2Uu
cmVwZWF0ZWRncm91cC5hZGQoKS5hID0gMjE3Ci0gIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21l
c3NhZ2UuYWRkKCkuYmIgPSAyMTgKLSAgbWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2Uu
YWRkKCkuYyA9IDIxOQotICBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlLmFkZCgpLmQg
PSAyMjAKLSAgbWVzc2FnZS5yZXBlYXRlZF9sYXp5X21lc3NhZ2UuYWRkKCkuYmIgPSAyMjcKLQot
ICBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9lbnVtLmFwcGVuZCh1bml0dGVzdF9wYjIuVGVzdEFs
bFR5cGVzLkJBUikKLSAgbWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX2VudW0uYXBwZW5kKHVuaXR0
ZXN0X3BiMi5GT1JFSUdOX0JBUikKLSAgaWYgSXNQcm90bzIobWVzc2FnZSk6Ci0gICAgbWVzc2Fn
ZS5yZXBlYXRlZF9pbXBvcnRfZW51bS5hcHBlbmQodW5pdHRlc3RfaW1wb3J0X3BiMi5JTVBPUlRf
QkFSKQotCi0gIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nX3BpZWNlLmFwcGVuZCh1JzIyNCcpCi0g
IG1lc3NhZ2UucmVwZWF0ZWRfY29yZC5hcHBlbmQodScyMjUnKQotCi0gICMgQWRkIGEgc2Vjb25k
IG9uZSBvZiBlYWNoIGZpZWxkLgotICBtZXNzYWdlLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgzMDEp
Ci0gIG1lc3NhZ2UucmVwZWF0ZWRfaW50NjQuYXBwZW5kKDMwMikKLSAgbWVzc2FnZS5yZXBlYXRl
ZF91aW50MzIuYXBwZW5kKDMwMykKLSAgbWVzc2FnZS5yZXBlYXRlZF91aW50NjQuYXBwZW5kKDMw
NCkKLSAgbWVzc2FnZS5yZXBlYXRlZF9zaW50MzIuYXBwZW5kKDMwNSkKLSAgbWVzc2FnZS5yZXBl
YXRlZF9zaW50NjQuYXBwZW5kKDMwNikKLSAgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDMyLmFwcGVu
ZCgzMDcpCi0gIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQ2NC5hcHBlbmQoMzA4KQotICBtZXNzYWdl
LnJlcGVhdGVkX3NmaXhlZDMyLmFwcGVuZCgzMDkpCi0gIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVk
NjQuYXBwZW5kKDMxMCkKLSAgbWVzc2FnZS5yZXBlYXRlZF9mbG9hdC5hcHBlbmQoMzExKQotICBt
ZXNzYWdlLnJlcGVhdGVkX2RvdWJsZS5hcHBlbmQoMzEyKQotICBtZXNzYWdlLnJlcGVhdGVkX2Jv
b2wuYXBwZW5kKEZhbHNlKQotICBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZy5hcHBlbmQodSczMTUn
KQotICBtZXNzYWdlLnJlcGVhdGVkX2J5dGVzLmFwcGVuZChiJzMxNicpCi0KLSAgaWYgSXNQcm90
bzIobWVzc2FnZSk6Ci0gICAgbWVzc2FnZS5yZXBlYXRlZGdyb3VwLmFkZCgpLmEgPSAzMTcKLSAg
bWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKS5iYiA9IDMxOAotICBtZXNzYWdl
LnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZS5hZGQoKS5jID0gMzE5Ci0gIG1lc3NhZ2UucmVwZWF0
ZWRfaW1wb3J0X21lc3NhZ2UuYWRkKCkuZCA9IDMyMAotICBtZXNzYWdlLnJlcGVhdGVkX2xhenlf
bWVzc2FnZS5hZGQoKS5iYiA9IDMyNwotCi0gIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW0u
YXBwZW5kKHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMuQkFaKQotICBtZXNzYWdlLnJlcGVhdGVk
X2ZvcmVpZ25fZW51bS5hcHBlbmQodW5pdHRlc3RfcGIyLkZPUkVJR05fQkFaKQotICBpZiBJc1By
b3RvMihtZXNzYWdlKToKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9lbnVtLmFwcGVuZCh1
bml0dGVzdF9pbXBvcnRfcGIyLklNUE9SVF9CQVopCi0KLSAgbWVzc2FnZS5yZXBlYXRlZF9zdHJp
bmdfcGllY2UuYXBwZW5kKHUnMzI0JykKLSAgbWVzc2FnZS5yZXBlYXRlZF9jb3JkLmFwcGVuZCh1
JzMyNScpCi0KLSAgIwotICAjIEZpZWxkcyB0aGF0IGhhdmUgZGVmYXVsdHMuCi0gICMKLQotICBp
ZiBJc1Byb3RvMihtZXNzYWdlKToKLSAgICBtZXNzYWdlLmRlZmF1bHRfaW50MzIgPSA0MDEKLSAg
ICBtZXNzYWdlLmRlZmF1bHRfaW50NjQgPSA0MDIKLSAgICBtZXNzYWdlLmRlZmF1bHRfdWludDMy
ID0gNDAzCi0gICAgbWVzc2FnZS5kZWZhdWx0X3VpbnQ2NCA9IDQwNAotICAgIG1lc3NhZ2UuZGVm
YXVsdF9zaW50MzIgPSA0MDUKLSAgICBtZXNzYWdlLmRlZmF1bHRfc2ludDY0ID0gNDA2Ci0gICAg
bWVzc2FnZS5kZWZhdWx0X2ZpeGVkMzIgPSA0MDcKLSAgICBtZXNzYWdlLmRlZmF1bHRfZml4ZWQ2
NCA9IDQwOAotICAgIG1lc3NhZ2UuZGVmYXVsdF9zZml4ZWQzMiA9IDQwOQotICAgIG1lc3NhZ2Uu
ZGVmYXVsdF9zZml4ZWQ2NCA9IDQxMAotICAgIG1lc3NhZ2UuZGVmYXVsdF9mbG9hdCA9IDQxMQot
ICAgIG1lc3NhZ2UuZGVmYXVsdF9kb3VibGUgPSA0MTIKLSAgICBtZXNzYWdlLmRlZmF1bHRfYm9v
bCA9IEZhbHNlCi0gICAgbWVzc2FnZS5kZWZhdWx0X3N0cmluZyA9ICc0MTUnCi0gICAgbWVzc2Fn
ZS5kZWZhdWx0X2J5dGVzID0gYic0MTYnCi0KLSAgICBtZXNzYWdlLmRlZmF1bHRfbmVzdGVkX2Vu
dW0gPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLkZPTwotICAgIG1lc3NhZ2UuZGVmYXVsdF9m
b3JlaWduX2VudW0gPSB1bml0dGVzdF9wYjIuRk9SRUlHTl9GT08KLSAgICBtZXNzYWdlLmRlZmF1
bHRfaW1wb3J0X2VudW0gPSB1bml0dGVzdF9pbXBvcnRfcGIyLklNUE9SVF9GT08KLQotICAgIG1l
c3NhZ2UuZGVmYXVsdF9zdHJpbmdfcGllY2UgPSAnNDI0JwotICAgIG1lc3NhZ2UuZGVmYXVsdF9j
b3JkID0gJzQyNScKLQotICBtZXNzYWdlLm9uZW9mX3VpbnQzMiA9IDYwMQotICBtZXNzYWdlLm9u
ZW9mX25lc3RlZF9tZXNzYWdlLmJiID0gNjAyCi0gIG1lc3NhZ2Uub25lb2Zfc3RyaW5nID0gJzYw
MycKLSAgbWVzc2FnZS5vbmVvZl9ieXRlcyA9IGInNjA0JwotCi0KLWRlZiBTZXRBbGxGaWVsZHMo
bWVzc2FnZSk6Ci0gIFNldEFsbE5vbkxhenlGaWVsZHMobWVzc2FnZSkKLSAgbWVzc2FnZS5vcHRp
b25hbF9sYXp5X21lc3NhZ2UuYmIgPSAxMjcKLQotCi1kZWYgU2V0QWxsRXh0ZW5zaW9ucyhtZXNz
YWdlKToKLSAgIiIiU2V0cyBldmVyeSBleHRlbnNpb24gaW4gdGhlIG1lc3NhZ2UgdG8gYSB1bmlx
dWUgdmFsdWUuCi0KLSAgQXJnczoKLSAgICBtZXNzYWdlOiBBIHVuaXR0ZXN0X3BiMi5UZXN0QWxs
RXh0ZW5zaW9ucyBpbnN0YW5jZS4KLSAgIiIiCi0KLSAgZXh0ZW5zaW9ucyA9IG1lc3NhZ2UuRXh0
ZW5zaW9ucwotICBwYjIgPSB1bml0dGVzdF9wYjIKLSAgaW1wb3J0X3BiMiA9IHVuaXR0ZXN0X2lt
cG9ydF9wYjIKLQotICAjCi0gICMgT3B0aW9uYWwgZmllbGRzLgotICAjCi0KLSAgZXh0ZW5zaW9u
c1twYjIub3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uXSA9IDEwMQotICBleHRlbnNpb25zW3BiMi5v
cHRpb25hbF9pbnQ2NF9leHRlbnNpb25dID0gMTAyCi0gIGV4dGVuc2lvbnNbcGIyLm9wdGlvbmFs
X3VpbnQzMl9leHRlbnNpb25dID0gMTAzCi0gIGV4dGVuc2lvbnNbcGIyLm9wdGlvbmFsX3VpbnQ2
NF9leHRlbnNpb25dID0gMTA0Ci0gIGV4dGVuc2lvbnNbcGIyLm9wdGlvbmFsX3NpbnQzMl9leHRl
bnNpb25dID0gMTA1Ci0gIGV4dGVuc2lvbnNbcGIyLm9wdGlvbmFsX3NpbnQ2NF9leHRlbnNpb25d
ID0gMTA2Ci0gIGV4dGVuc2lvbnNbcGIyLm9wdGlvbmFsX2ZpeGVkMzJfZXh0ZW5zaW9uXSA9IDEw
NwotICBleHRlbnNpb25zW3BiMi5vcHRpb25hbF9maXhlZDY0X2V4dGVuc2lvbl0gPSAxMDgKLSAg
ZXh0ZW5zaW9uc1twYjIub3B0aW9uYWxfc2ZpeGVkMzJfZXh0ZW5zaW9uXSA9IDEwOQotICBleHRl
bnNpb25zW3BiMi5vcHRpb25hbF9zZml4ZWQ2NF9leHRlbnNpb25dID0gMTEwCi0gIGV4dGVuc2lv
bnNbcGIyLm9wdGlvbmFsX2Zsb2F0X2V4dGVuc2lvbl0gPSAxMTEKLSAgZXh0ZW5zaW9uc1twYjIu
b3B0aW9uYWxfZG91YmxlX2V4dGVuc2lvbl0gPSAxMTIKLSAgZXh0ZW5zaW9uc1twYjIub3B0aW9u
YWxfYm9vbF9leHRlbnNpb25dID0gVHJ1ZQotICBleHRlbnNpb25zW3BiMi5vcHRpb25hbF9zdHJp
bmdfZXh0ZW5zaW9uXSA9IHUnMTE1JwotICBleHRlbnNpb25zW3BiMi5vcHRpb25hbF9ieXRlc19l
eHRlbnNpb25dID0gYicxMTYnCi0KLSAgZXh0ZW5zaW9uc1twYjIub3B0aW9uYWxncm91cF9leHRl
bnNpb25dLmEgPSAxMTcKLSAgZXh0ZW5zaW9uc1twYjIub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Vf
ZXh0ZW5zaW9uXS5iYiA9IDExOAotICBleHRlbnNpb25zW3BiMi5vcHRpb25hbF9mb3JlaWduX21l
c3NhZ2VfZXh0ZW5zaW9uXS5jID0gMTE5Ci0gIGV4dGVuc2lvbnNbcGIyLm9wdGlvbmFsX2ltcG9y
dF9tZXNzYWdlX2V4dGVuc2lvbl0uZCA9IDEyMAotICBleHRlbnNpb25zW3BiMi5vcHRpb25hbF9w
dWJsaWNfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uXS5lID0gMTI2Ci0gIGV4dGVuc2lvbnNbcGIy
Lm9wdGlvbmFsX2xhenlfbWVzc2FnZV9leHRlbnNpb25dLmJiID0gMTI3Ci0KLSAgZXh0ZW5zaW9u
c1twYjIub3B0aW9uYWxfbmVzdGVkX2VudW1fZXh0ZW5zaW9uXSA9IHBiMi5UZXN0QWxsVHlwZXMu
QkFaCi0gIGV4dGVuc2lvbnNbcGIyLm9wdGlvbmFsX25lc3RlZF9lbnVtX2V4dGVuc2lvbl0gPSBw
YjIuVGVzdEFsbFR5cGVzLkJBWgotICBleHRlbnNpb25zW3BiMi5vcHRpb25hbF9mb3JlaWduX2Vu
dW1fZXh0ZW5zaW9uXSA9IHBiMi5GT1JFSUdOX0JBWgotICBleHRlbnNpb25zW3BiMi5vcHRpb25h
bF9pbXBvcnRfZW51bV9leHRlbnNpb25dID0gaW1wb3J0X3BiMi5JTVBPUlRfQkFaCi0KLSAgZXh0
ZW5zaW9uc1twYjIub3B0aW9uYWxfc3RyaW5nX3BpZWNlX2V4dGVuc2lvbl0gPSB1JzEyNCcKLSAg
ZXh0ZW5zaW9uc1twYjIub3B0aW9uYWxfY29yZF9leHRlbnNpb25dID0gdScxMjUnCi0KLSAgIwot
ICAjIFJlcGVhdGVkIGZpZWxkcy4KLSAgIwotCi0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVkX2lu
dDMyX2V4dGVuc2lvbl0uYXBwZW5kKDIwMSkKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRfaW50
NjRfZXh0ZW5zaW9uXS5hcHBlbmQoMjAyKQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF91aW50
MzJfZXh0ZW5zaW9uXS5hcHBlbmQoMjAzKQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF91aW50
NjRfZXh0ZW5zaW9uXS5hcHBlbmQoMjA0KQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9zaW50
MzJfZXh0ZW5zaW9uXS5hcHBlbmQoMjA1KQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9zaW50
NjRfZXh0ZW5zaW9uXS5hcHBlbmQoMjA2KQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9maXhl
ZDMyX2V4dGVuc2lvbl0uYXBwZW5kKDIwNykKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRfZml4
ZWQ2NF9leHRlbnNpb25dLmFwcGVuZCgyMDgpCi0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVkX3Nm
aXhlZDMyX2V4dGVuc2lvbl0uYXBwZW5kKDIwOSkKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRf
c2ZpeGVkNjRfZXh0ZW5zaW9uXS5hcHBlbmQoMjEwKQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRl
ZF9mbG9hdF9leHRlbnNpb25dLmFwcGVuZCgyMTEpCi0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVk
X2RvdWJsZV9leHRlbnNpb25dLmFwcGVuZCgyMTIpCi0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVk
X2Jvb2xfZXh0ZW5zaW9uXS5hcHBlbmQoVHJ1ZSkKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRf
c3RyaW5nX2V4dGVuc2lvbl0uYXBwZW5kKHUnMjE1JykKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0
ZWRfYnl0ZXNfZXh0ZW5zaW9uXS5hcHBlbmQoYicyMTYnKQotCi0gIGV4dGVuc2lvbnNbcGIyLnJl
cGVhdGVkZ3JvdXBfZXh0ZW5zaW9uXS5hZGQoKS5hID0gMjE3Ci0gIGV4dGVuc2lvbnNbcGIyLnJl
cGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl0uYWRkKCkuYmIgPSAyMTgKLSAgZXh0ZW5z
aW9uc1twYjIucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lvbl0uYWRkKCkuYyA9IDIx
OQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25dLmFk
ZCgpLmQgPSAyMjAKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRfbGF6eV9tZXNzYWdlX2V4dGVu
c2lvbl0uYWRkKCkuYmIgPSAyMjcKLQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9uZXN0ZWRf
ZW51bV9leHRlbnNpb25dLmFwcGVuZChwYjIuVGVzdEFsbFR5cGVzLkJBUikKLSAgZXh0ZW5zaW9u
c1twYjIucmVwZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbl0uYXBwZW5kKHBiMi5GT1JFSUdO
X0JBUikKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5zaW9uXS5h
cHBlbmQoaW1wb3J0X3BiMi5JTVBPUlRfQkFSKQotCi0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVk
X3N0cmluZ19waWVjZV9leHRlbnNpb25dLmFwcGVuZCh1JzIyNCcpCi0gIGV4dGVuc2lvbnNbcGIy
LnJlcGVhdGVkX2NvcmRfZXh0ZW5zaW9uXS5hcHBlbmQodScyMjUnKQotCi0gICMgQXBwZW5kIGEg
c2Vjb25kIG9uZSBvZiBlYWNoIGZpZWxkLgotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9pbnQz
Ml9leHRlbnNpb25dLmFwcGVuZCgzMDEpCi0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVkX2ludDY0
X2V4dGVuc2lvbl0uYXBwZW5kKDMwMikKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRfdWludDMy
X2V4dGVuc2lvbl0uYXBwZW5kKDMwMykKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRfdWludDY0
X2V4dGVuc2lvbl0uYXBwZW5kKDMwNCkKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRfc2ludDMy
X2V4dGVuc2lvbl0uYXBwZW5kKDMwNSkKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRfc2ludDY0
X2V4dGVuc2lvbl0uYXBwZW5kKDMwNikKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRfZml4ZWQz
Ml9leHRlbnNpb25dLmFwcGVuZCgzMDcpCi0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVkX2ZpeGVk
NjRfZXh0ZW5zaW9uXS5hcHBlbmQoMzA4KQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9zZml4
ZWQzMl9leHRlbnNpb25dLmFwcGVuZCgzMDkpCi0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVkX3Nm
aXhlZDY0X2V4dGVuc2lvbl0uYXBwZW5kKDMxMCkKLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRf
ZmxvYXRfZXh0ZW5zaW9uXS5hcHBlbmQoMzExKQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9k
b3VibGVfZXh0ZW5zaW9uXS5hcHBlbmQoMzEyKQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9i
b29sX2V4dGVuc2lvbl0uYXBwZW5kKEZhbHNlKQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9z
dHJpbmdfZXh0ZW5zaW9uXS5hcHBlbmQodSczMTUnKQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRl
ZF9ieXRlc19leHRlbnNpb25dLmFwcGVuZChiJzMxNicpCi0KLSAgZXh0ZW5zaW9uc1twYjIucmVw
ZWF0ZWRncm91cF9leHRlbnNpb25dLmFkZCgpLmEgPSAzMTcKLSAgZXh0ZW5zaW9uc1twYjIucmVw
ZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uXS5hZGQoKS5iYiA9IDMxOAotICBleHRlbnNp
b25zW3BiMi5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uXS5hZGQoKS5jID0gMzE5
Ci0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl0uYWRk
KCkuZCA9IDMyMAotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5z
aW9uXS5hZGQoKS5iYiA9IDMyNwotCi0gIGV4dGVuc2lvbnNbcGIyLnJlcGVhdGVkX25lc3RlZF9l
bnVtX2V4dGVuc2lvbl0uYXBwZW5kKHBiMi5UZXN0QWxsVHlwZXMuQkFaKQotICBleHRlbnNpb25z
W3BiMi5yZXBlYXRlZF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uXS5hcHBlbmQocGIyLkZPUkVJR05f
QkFaKQotICBleHRlbnNpb25zW3BiMi5yZXBlYXRlZF9pbXBvcnRfZW51bV9leHRlbnNpb25dLmFw
cGVuZChpbXBvcnRfcGIyLklNUE9SVF9CQVopCi0KLSAgZXh0ZW5zaW9uc1twYjIucmVwZWF0ZWRf
c3RyaW5nX3BpZWNlX2V4dGVuc2lvbl0uYXBwZW5kKHUnMzI0JykKLSAgZXh0ZW5zaW9uc1twYjIu
cmVwZWF0ZWRfY29yZF9leHRlbnNpb25dLmFwcGVuZCh1JzMyNScpCi0KLSAgIwotICAjIEZpZWxk
cyB3aXRoIGRlZmF1bHRzLgotICAjCi0KLSAgZXh0ZW5zaW9uc1twYjIuZGVmYXVsdF9pbnQzMl9l
eHRlbnNpb25dID0gNDAxCi0gIGV4dGVuc2lvbnNbcGIyLmRlZmF1bHRfaW50NjRfZXh0ZW5zaW9u
XSA9IDQwMgotICBleHRlbnNpb25zW3BiMi5kZWZhdWx0X3VpbnQzMl9leHRlbnNpb25dID0gNDAz
Ci0gIGV4dGVuc2lvbnNbcGIyLmRlZmF1bHRfdWludDY0X2V4dGVuc2lvbl0gPSA0MDQKLSAgZXh0
ZW5zaW9uc1twYjIuZGVmYXVsdF9zaW50MzJfZXh0ZW5zaW9uXSA9IDQwNQotICBleHRlbnNpb25z
W3BiMi5kZWZhdWx0X3NpbnQ2NF9leHRlbnNpb25dID0gNDA2Ci0gIGV4dGVuc2lvbnNbcGIyLmRl
ZmF1bHRfZml4ZWQzMl9leHRlbnNpb25dID0gNDA3Ci0gIGV4dGVuc2lvbnNbcGIyLmRlZmF1bHRf
Zml4ZWQ2NF9leHRlbnNpb25dID0gNDA4Ci0gIGV4dGVuc2lvbnNbcGIyLmRlZmF1bHRfc2ZpeGVk
MzJfZXh0ZW5zaW9uXSA9IDQwOQotICBleHRlbnNpb25zW3BiMi5kZWZhdWx0X3NmaXhlZDY0X2V4
dGVuc2lvbl0gPSA0MTAKLSAgZXh0ZW5zaW9uc1twYjIuZGVmYXVsdF9mbG9hdF9leHRlbnNpb25d
ID0gNDExCi0gIGV4dGVuc2lvbnNbcGIyLmRlZmF1bHRfZG91YmxlX2V4dGVuc2lvbl0gPSA0MTIK
LSAgZXh0ZW5zaW9uc1twYjIuZGVmYXVsdF9ib29sX2V4dGVuc2lvbl0gPSBGYWxzZQotICBleHRl
bnNpb25zW3BiMi5kZWZhdWx0X3N0cmluZ19leHRlbnNpb25dID0gdSc0MTUnCi0gIGV4dGVuc2lv
bnNbcGIyLmRlZmF1bHRfYnl0ZXNfZXh0ZW5zaW9uXSA9IGInNDE2JwotCi0gIGV4dGVuc2lvbnNb
cGIyLmRlZmF1bHRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uXSA9IHBiMi5UZXN0QWxsVHlwZXMuRk9P
Ci0gIGV4dGVuc2lvbnNbcGIyLmRlZmF1bHRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbl0gPSBwYjIu
Rk9SRUlHTl9GT08KLSAgZXh0ZW5zaW9uc1twYjIuZGVmYXVsdF9pbXBvcnRfZW51bV9leHRlbnNp
b25dID0gaW1wb3J0X3BiMi5JTVBPUlRfRk9PCi0KLSAgZXh0ZW5zaW9uc1twYjIuZGVmYXVsdF9z
dHJpbmdfcGllY2VfZXh0ZW5zaW9uXSA9IHUnNDI0JwotICBleHRlbnNpb25zW3BiMi5kZWZhdWx0
X2NvcmRfZXh0ZW5zaW9uXSA9ICc0MjUnCi0KLSAgZXh0ZW5zaW9uc1twYjIub25lb2ZfdWludDMy
X2V4dGVuc2lvbl0gPSA2MDEKLSAgZXh0ZW5zaW9uc1twYjIub25lb2ZfbmVzdGVkX21lc3NhZ2Vf
ZXh0ZW5zaW9uXS5iYiA9IDYwMgotICBleHRlbnNpb25zW3BiMi5vbmVvZl9zdHJpbmdfZXh0ZW5z
aW9uXSA9IHUnNjAzJwotICBleHRlbnNpb25zW3BiMi5vbmVvZl9ieXRlc19leHRlbnNpb25dID0g
Yic2MDQnCi0KLQotZGVmIFNldEFsbEZpZWxkc0FuZEV4dGVuc2lvbnMobWVzc2FnZSk6Ci0gICIi
IlNldHMgZXZlcnkgZmllbGQgYW5kIGV4dGVuc2lvbiBpbiB0aGUgbWVzc2FnZSB0byBhIHVuaXF1
ZSB2YWx1ZS4KLQotICBBcmdzOgotICAgIG1lc3NhZ2U6IEEgdW5pdHRlc3RfcGIyLlRlc3RBbGxF
eHRlbnNpb25zIG1lc3NhZ2UuCi0gICIiIgotICBtZXNzYWdlLm15X2ludCA9IDEKLSAgbWVzc2Fn
ZS5teV9zdHJpbmcgPSAnZm9vJwotICBtZXNzYWdlLm15X2Zsb2F0ID0gMS4wCi0gIG1lc3NhZ2Uu
RXh0ZW5zaW9uc1t1bml0dGVzdF9wYjIubXlfZXh0ZW5zaW9uX2ludF0gPSAyMwotICBtZXNzYWdl
LkV4dGVuc2lvbnNbdW5pdHRlc3RfcGIyLm15X2V4dGVuc2lvbl9zdHJpbmddID0gJ2JhcicKLQot
Ci1kZWYgRXhwZWN0QWxsRmllbGRzQW5kRXh0ZW5zaW9uc0luT3JkZXIoc2VyaWFsaXplZCk6Ci0g
ICIiIkVuc3VyZXMgdGhhdCBzZXJpYWxpemVkIGlzIHRoZSBzZXJpYWxpemF0aW9uIHdlIGV4cGVj
dCBmb3IgYSBtZXNzYWdlCi0gIGZpbGxlZCB3aXRoIFNldEFsbEZpZWxkc0FuZEV4dGVuc2lvbnMo
KS4gIChTcGVjaWZpY2FsbHksIGVuc3VyZXMgdGhhdCB0aGUKLSAgc2VyaWFsaXphdGlvbiBpcyBp
biBjYW5vbmljYWwsIHRhZy1udW1iZXIgb3JkZXIpLgotICAiIiIKLSAgbXlfZXh0ZW5zaW9uX2lu
dCA9IHVuaXR0ZXN0X3BiMi5teV9leHRlbnNpb25faW50Ci0gIG15X2V4dGVuc2lvbl9zdHJpbmcg
PSB1bml0dGVzdF9wYjIubXlfZXh0ZW5zaW9uX3N0cmluZwotICBleHBlY3RlZF9zdHJpbmdzID0g
W10KLSAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0RmllbGRPcmRlcmluZ3MoKQotICBtZXNz
YWdlLm15X2ludCA9IDEgICMgRmllbGQgMS4KLSAgZXhwZWN0ZWRfc3RyaW5ncy5hcHBlbmQobWVz
c2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQotICBtZXNzYWdlLkNsZWFyKCkKLSAgbWVzc2FnZS5F
eHRlbnNpb25zW215X2V4dGVuc2lvbl9pbnRdID0gMjMgICMgRmllbGQgNS4KLSAgZXhwZWN0ZWRf
c3RyaW5ncy5hcHBlbmQobWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQotICBtZXNzYWdlLkNs
ZWFyKCkKLSAgbWVzc2FnZS5teV9zdHJpbmcgPSAnZm9vJyAgIyBGaWVsZCAxMS4KLSAgZXhwZWN0
ZWRfc3RyaW5ncy5hcHBlbmQobWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpKQotICBtZXNzYWdl
LkNsZWFyKCkKLSAgbWVzc2FnZS5FeHRlbnNpb25zW215X2V4dGVuc2lvbl9zdHJpbmddID0gJ2Jh
cicgICMgRmllbGQgNTAuCi0gIGV4cGVjdGVkX3N0cmluZ3MuYXBwZW5kKG1lc3NhZ2UuU2VyaWFs
aXplVG9TdHJpbmcoKSkKLSAgbWVzc2FnZS5DbGVhcigpCi0gIG1lc3NhZ2UubXlfZmxvYXQgPSAx
LjAKLSAgZXhwZWN0ZWRfc3RyaW5ncy5hcHBlbmQobWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygp
KQotICBtZXNzYWdlLkNsZWFyKCkKLSAgZXhwZWN0ZWQgPSBiJycuam9pbihleHBlY3RlZF9zdHJp
bmdzKQotCi0gIGlmIGV4cGVjdGVkICE9IHNlcmlhbGl6ZWQ6Ci0gICAgcmFpc2UgVmFsdWVFcnJv
cignRXhwZWN0ZWQgJXIsIGZvdW5kICVyJyAlIChleHBlY3RlZCwgc2VyaWFsaXplZCkpCi0KLQot
ZGVmIEV4cGVjdEFsbEZpZWxkc1NldCh0ZXN0X2Nhc2UsIG1lc3NhZ2UpOgotICAiIiJDaGVjayBh
bGwgZmllbGRzIGZvciBjb3JyZWN0IHZhbHVlcyBoYXZlIGFmdGVyIFNldCpGaWVsZHMoKSBpcyBj
YWxsZWQuIiIiCi0gIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmllbGQoJ29wdGlv
bmFsX2ludDMyJykpCi0gIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmllbGQoJ29w
dGlvbmFsX2ludDY0JykpCi0gIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmllbGQo
J29wdGlvbmFsX3VpbnQzMicpKQotICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0Zp
ZWxkKCdvcHRpb25hbF91aW50NjQnKSkKLSAgdGVzdF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5I
YXNGaWVsZCgnb3B0aW9uYWxfc2ludDMyJykpCi0gIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3Nh
Z2UuSGFzRmllbGQoJ29wdGlvbmFsX3NpbnQ2NCcpKQotICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLkhhc0ZpZWxkKCdvcHRpb25hbF9maXhlZDMyJykpCi0gIHRlc3RfY2FzZS5hc3NlcnRU
cnVlKG1lc3NhZ2UuSGFzRmllbGQoJ29wdGlvbmFsX2ZpeGVkNjQnKSkKLSAgdGVzdF9jYXNlLmFz
c2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnb3B0aW9uYWxfc2ZpeGVkMzInKSkKLSAgdGVzdF9j
YXNlLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnb3B0aW9uYWxfc2ZpeGVkNjQnKSkKLSAg
dGVzdF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnb3B0aW9uYWxfZmxvYXQnKSkK
LSAgdGVzdF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnb3B0aW9uYWxfZG91Ymxl
JykpCi0gIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmllbGQoJ29wdGlvbmFsX2Jv
b2wnKSkKLSAgdGVzdF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnb3B0aW9uYWxf
c3RyaW5nJykpCi0gIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmllbGQoJ29wdGlv
bmFsX2J5dGVzJykpCi0KLSAgaWYgSXNQcm90bzIobWVzc2FnZSk6Ci0gICAgdGVzdF9jYXNlLmFz
c2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnb3B0aW9uYWxncm91cCcpKQotICB0ZXN0X2Nhc2Uu
YXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0ZpZWxkKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZScpKQot
ICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0ZpZWxkKCdvcHRpb25hbF9mb3JlaWdu
X21lc3NhZ2UnKSkKLSAgdGVzdF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnb3B0
aW9uYWxfaW1wb3J0X21lc3NhZ2UnKSkKLQotICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShtZXNzYWdl
Lm9wdGlvbmFsZ3JvdXAuSGFzRmllbGQoJ2EnKSkKLSAgdGVzdF9jYXNlLmFzc2VydFRydWUobWVz
c2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5IYXNGaWVsZCgnYmInKSkKLSAgdGVzdF9jYXNl
LmFzc2VydFRydWUobWVzc2FnZS5vcHRpb25hbF9mb3JlaWduX21lc3NhZ2UuSGFzRmllbGQoJ2Mn
KSkKLSAgdGVzdF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5vcHRpb25hbF9pbXBvcnRfbWVzc2Fn
ZS5IYXNGaWVsZCgnZCcpKQotCi0gIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmll
bGQoJ29wdGlvbmFsX25lc3RlZF9lbnVtJykpCi0gIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3Nh
Z2UuSGFzRmllbGQoJ29wdGlvbmFsX2ZvcmVpZ25fZW51bScpKQotICBpZiBJc1Byb3RvMihtZXNz
YWdlKToKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0ZpZWxkKCdvcHRpb25h
bF9pbXBvcnRfZW51bScpKQotCi0gIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmll
bGQoJ29wdGlvbmFsX3N0cmluZ19waWVjZScpKQotICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShtZXNz
YWdlLkhhc0ZpZWxkKCdvcHRpb25hbF9jb3JkJykpCi0KLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFs
KDEwMSwgbWVzc2FnZS5vcHRpb25hbF9pbnQzMikKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDEw
MiwgbWVzc2FnZS5vcHRpb25hbF9pbnQ2NCkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDEwMywg
bWVzc2FnZS5vcHRpb25hbF91aW50MzIpCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgxMDQsIG1l
c3NhZ2Uub3B0aW9uYWxfdWludDY0KQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMTA1LCBtZXNz
YWdlLm9wdGlvbmFsX3NpbnQzMikKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDEwNiwgbWVzc2Fn
ZS5vcHRpb25hbF9zaW50NjQpCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgxMDcsIG1lc3NhZ2Uu
b3B0aW9uYWxfZml4ZWQzMikKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDEwOCwgbWVzc2FnZS5v
cHRpb25hbF9maXhlZDY0KQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMTA5LCBtZXNzYWdlLm9w
dGlvbmFsX3NmaXhlZDMyKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMTEwLCBtZXNzYWdlLm9w
dGlvbmFsX3NmaXhlZDY0KQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMTExLCBtZXNzYWdlLm9w
dGlvbmFsX2Zsb2F0KQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMTEyLCBtZXNzYWdlLm9wdGlv
bmFsX2RvdWJsZSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKFRydWUsIG1lc3NhZ2Uub3B0aW9u
YWxfYm9vbCkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKCcxMTUnLCBtZXNzYWdlLm9wdGlvbmFs
X3N0cmluZykKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKGInMTE2JywgbWVzc2FnZS5vcHRpb25h
bF9ieXRlcykKLQotICBpZiBJc1Byb3RvMihtZXNzYWdlKToKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0
RXF1YWwoMTE3LCBtZXNzYWdlLm9wdGlvbmFsZ3JvdXAuYSkKLSAgdGVzdF9jYXNlLmFzc2VydEVx
dWFsKDExOCwgbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5iYikKLSAgdGVzdF9jYXNl
LmFzc2VydEVxdWFsKDExOSwgbWVzc2FnZS5vcHRpb25hbF9mb3JlaWduX21lc3NhZ2UuYykKLSAg
dGVzdF9jYXNlLmFzc2VydEVxdWFsKDEyMCwgbWVzc2FnZS5vcHRpb25hbF9pbXBvcnRfbWVzc2Fn
ZS5kKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMTI2LCBtZXNzYWdlLm9wdGlvbmFsX3B1Ymxp
Y19pbXBvcnRfbWVzc2FnZS5lKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMTI3LCBtZXNzYWdl
Lm9wdGlvbmFsX2xhenlfbWVzc2FnZS5iYikKLQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwodW5p
dHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5CQVosCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlLm9wdGlvbmFsX25lc3RlZF9lbnVtKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwodW5pdHRl
c3RfcGIyLkZPUkVJR05fQkFaLAotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vcHRp
b25hbF9mb3JlaWduX2VudW0pCi0gIGlmIElzUHJvdG8yKG1lc3NhZ2UpOgotICAgIHRlc3RfY2Fz
ZS5hc3NlcnRFcXVhbCh1bml0dGVzdF9pbXBvcnRfcGIyLklNUE9SVF9CQVosCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2Uub3B0aW9uYWxfaW1wb3J0X2VudW0pCi0KLSAgIyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyLCBsZW4obWVzc2FnZS5yZXBlYXRlZF9p
bnQzMikpCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyLCBsZW4obWVzc2FnZS5yZXBlYXRlZF9p
bnQ2NCkpCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyLCBsZW4obWVzc2FnZS5yZXBlYXRlZF91
aW50MzIpKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMiwgbGVuKG1lc3NhZ2UucmVwZWF0ZWRf
dWludDY0KSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNzYWdlLnJlcGVhdGVk
X3NpbnQzMikpCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyLCBsZW4obWVzc2FnZS5yZXBlYXRl
ZF9zaW50NjQpKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMiwgbGVuKG1lc3NhZ2UucmVwZWF0
ZWRfZml4ZWQzMikpCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyLCBsZW4obWVzc2FnZS5yZXBl
YXRlZF9maXhlZDY0KSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNzYWdlLnJl
cGVhdGVkX3NmaXhlZDMyKSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNzYWdl
LnJlcGVhdGVkX3NmaXhlZDY0KSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNz
YWdlLnJlcGVhdGVkX2Zsb2F0KSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNz
YWdlLnJlcGVhdGVkX2RvdWJsZSkpCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyLCBsZW4obWVz
c2FnZS5yZXBlYXRlZF9ib29sKSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNz
YWdlLnJlcGVhdGVkX3N0cmluZykpCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyLCBsZW4obWVz
c2FnZS5yZXBlYXRlZF9ieXRlcykpCi0KLSAgaWYgSXNQcm90bzIobWVzc2FnZSk6Ci0gICAgdGVz
dF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNzYWdlLnJlcGVhdGVkZ3JvdXApKQotICB0ZXN0
X2Nhc2UuYXNzZXJ0RXF1YWwoMiwgbGVuKG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Up
KQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMiwgbGVuKG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWln
bl9tZXNzYWdlKSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNzYWdlLnJlcGVh
dGVkX2ltcG9ydF9tZXNzYWdlKSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNz
YWdlLnJlcGVhdGVkX25lc3RlZF9lbnVtKSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxl
bihtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fZW51bSkpCi0gIGlmIElzUHJvdG8yKG1lc3NhZ2Up
OgotICAgIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyLCBsZW4obWVzc2FnZS5yZXBlYXRlZF9pbXBv
cnRfZW51bSkpCi0KLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIsIGxlbihtZXNzYWdlLnJlcGVh
dGVkX3N0cmluZ19waWVjZSkpCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyLCBsZW4obWVzc2Fn
ZS5yZXBlYXRlZF9jb3JkKSkKLQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMjAxLCBtZXNzYWdl
LnJlcGVhdGVkX2ludDMyWzBdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMjAyLCBtZXNzYWdl
LnJlcGVhdGVkX2ludDY0WzBdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMjAzLCBtZXNzYWdl
LnJlcGVhdGVkX3VpbnQzMlswXSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIwNCwgbWVzc2Fn
ZS5yZXBlYXRlZF91aW50NjRbMF0pCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyMDUsIG1lc3Nh
Z2UucmVwZWF0ZWRfc2ludDMyWzBdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMjA2LCBtZXNz
YWdlLnJlcGVhdGVkX3NpbnQ2NFswXSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDIwNywgbWVz
c2FnZS5yZXBlYXRlZF9maXhlZDMyWzBdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMjA4LCBt
ZXNzYWdlLnJlcGVhdGVkX2ZpeGVkNjRbMF0pCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyMDks
IG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkMzJbMF0pCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgy
MTAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkNjRbMF0pCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVh
bCgyMTEsIG1lc3NhZ2UucmVwZWF0ZWRfZmxvYXRbMF0pCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVh
bCgyMTIsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlWzBdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1
YWwoVHJ1ZSwgbWVzc2FnZS5yZXBlYXRlZF9ib29sWzBdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1
YWwoJzIxNScsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nWzBdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0
RXF1YWwoYicyMTYnLCBtZXNzYWdlLnJlcGVhdGVkX2J5dGVzWzBdKQotCi0gIGlmIElzUHJvdG8y
KG1lc3NhZ2UpOgotICAgIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgyMTcsIG1lc3NhZ2UucmVwZWF0
ZWRncm91cFswXS5hKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMjE4LCBtZXNzYWdlLnJlcGVh
dGVkX25lc3RlZF9tZXNzYWdlWzBdLmJiKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMjE5LCBt
ZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZVswXS5jKQotICB0ZXN0X2Nhc2UuYXNzZXJ0
RXF1YWwoMjIwLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlWzBdLmQpCi0gIHRlc3Rf
Y2FzZS5hc3NlcnRFcXVhbCgyMjcsIG1lc3NhZ2UucmVwZWF0ZWRfbGF6eV9tZXNzYWdlWzBdLmJi
KQotCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCh1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLkJB
UiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW1b
MF0pCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCh1bml0dGVzdF9wYjIuRk9SRUlHTl9CQVIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fZW51bVswXSkK
LSAgaWYgSXNQcm90bzIobWVzc2FnZSk6Ci0gICAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKHVuaXR0
ZXN0X2ltcG9ydF9wYjIuSU1QT1JUX0JBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZS5yZXBlYXRlZF9pbXBvcnRfZW51bVswXSkKLQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwo
MzAxLCBtZXNzYWdlLnJlcGVhdGVkX2ludDMyWzFdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwo
MzAyLCBtZXNzYWdlLnJlcGVhdGVkX2ludDY0WzFdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwo
MzAzLCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQzMlsxXSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFs
KDMwNCwgbWVzc2FnZS5yZXBlYXRlZF91aW50NjRbMV0pCi0gIHRlc3RfY2FzZS5hc3NlcnRFcXVh
bCgzMDUsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDMyWzFdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1
YWwoMzA2LCBtZXNzYWdlLnJlcGVhdGVkX3NpbnQ2NFsxXSkKLSAgdGVzdF9jYXNlLmFzc2VydEVx
dWFsKDMwNywgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDMyWzFdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0
RXF1YWwoMzA4LCBtZXNzYWdlLnJlcGVhdGVkX2ZpeGVkNjRbMV0pCi0gIHRlc3RfY2FzZS5hc3Nl
cnRFcXVhbCgzMDksIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkMzJbMV0pCi0gIHRlc3RfY2FzZS5h
c3NlcnRFcXVhbCgzMTAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkNjRbMV0pCi0gIHRlc3RfY2Fz
ZS5hc3NlcnRFcXVhbCgzMTEsIG1lc3NhZ2UucmVwZWF0ZWRfZmxvYXRbMV0pCi0gIHRlc3RfY2Fz
ZS5hc3NlcnRFcXVhbCgzMTIsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlWzFdKQotICB0ZXN0X2Nh
c2UuYXNzZXJ0RXF1YWwoRmFsc2UsIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbFsxXSkKLSAgdGVzdF9j
YXNlLmFzc2VydEVxdWFsKCczMTUnLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZ1sxXSkKLSAgdGVz
dF9jYXNlLmFzc2VydEVxdWFsKGInMzE2JywgbWVzc2FnZS5yZXBlYXRlZF9ieXRlc1sxXSkKLQot
ICBpZiBJc1Byb3RvMihtZXNzYWdlKToKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMzE3LCBt
ZXNzYWdlLnJlcGVhdGVkZ3JvdXBbMV0uYSkKLSAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDMxOCwg
bWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZVsxXS5iYikKLSAgdGVzdF9jYXNlLmFzc2Vy
dEVxdWFsKDMxOSwgbWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VbMV0uYykKLSAgdGVz
dF9jYXNlLmFzc2VydEVxdWFsKDMyMCwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZVsx
XS5kKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoMzI3LCBtZXNzYWdlLnJlcGVhdGVkX2xhenlf
bWVzc2FnZVsxXS5iYikKLQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLlRl
c3RBbGxUeXBlcy5CQVosCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlcGVhdGVk
X25lc3RlZF9lbnVtWzFdKQotICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwodW5pdHRlc3RfcGIyLkZP
UkVJR05fQkFaLAotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXBlYXRlZF9mb3Jl
aWduX2VudW1bMV0pCi0gIGlmIElzUHJvdG8yKG1lc3NhZ2UpOgotICAgIHRlc3RfY2FzZS5hc3Nl
cnRFcXVhbCh1bml0dGVzdF9pbXBvcnRfcGIyLklNUE9SVF9CQVosCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UucmVwZWF0ZWRfaW1wb3J0X2VudW1bMV0pCi0KLSAgIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gIGlmIElzUHJvdG8yKG1lc3NhZ2UpOgotICAgIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1l
c3NhZ2UuSGFzRmllbGQoJ2RlZmF1bHRfaW50MzInKSkKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1
ZShtZXNzYWdlLkhhc0ZpZWxkKCdkZWZhdWx0X2ludDY0JykpCi0gICAgdGVzdF9jYXNlLmFzc2Vy
dFRydWUobWVzc2FnZS5IYXNGaWVsZCgnZGVmYXVsdF91aW50MzInKSkKLSAgICB0ZXN0X2Nhc2Uu
YXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0ZpZWxkKCdkZWZhdWx0X3VpbnQ2NCcpKQotICAgIHRlc3Rf
Y2FzZS5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmllbGQoJ2RlZmF1bHRfc2ludDMyJykpCi0gICAg
dGVzdF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnZGVmYXVsdF9zaW50NjQnKSkK
LSAgICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0ZpZWxkKCdkZWZhdWx0X2ZpeGVk
MzInKSkKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0ZpZWxkKCdkZWZhdWx0
X2ZpeGVkNjQnKSkKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShtZXNzYWdlLkhhc0ZpZWxkKCdk
ZWZhdWx0X3NmaXhlZDMyJykpCi0gICAgdGVzdF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5IYXNG
aWVsZCgnZGVmYXVsdF9zZml4ZWQ2NCcpKQotICAgIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3Nh
Z2UuSGFzRmllbGQoJ2RlZmF1bHRfZmxvYXQnKSkKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZSht
ZXNzYWdlLkhhc0ZpZWxkKCdkZWZhdWx0X2RvdWJsZScpKQotICAgIHRlc3RfY2FzZS5hc3NlcnRU
cnVlKG1lc3NhZ2UuSGFzRmllbGQoJ2RlZmF1bHRfYm9vbCcpKQotICAgIHRlc3RfY2FzZS5hc3Nl
cnRUcnVlKG1lc3NhZ2UuSGFzRmllbGQoJ2RlZmF1bHRfc3RyaW5nJykpCi0gICAgdGVzdF9jYXNl
LmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnZGVmYXVsdF9ieXRlcycpKQotCi0gICAgdGVz
dF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnZGVmYXVsdF9uZXN0ZWRfZW51bScp
KQotICAgIHRlc3RfY2FzZS5hc3NlcnRUcnVlKG1lc3NhZ2UuSGFzRmllbGQoJ2RlZmF1bHRfZm9y
ZWlnbl9lbnVtJykpCi0gICAgdGVzdF9jYXNlLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgn
ZGVmYXVsdF9pbXBvcnRfZW51bScpKQotCi0gICAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDQwMSwg
bWVzc2FnZS5kZWZhdWx0X2ludDMyKQotICAgIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCg0MDIsIG1l
c3NhZ2UuZGVmYXVsdF9pbnQ2NCkKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoNDAzLCBtZXNz
YWdlLmRlZmF1bHRfdWludDMyKQotICAgIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCg0MDQsIG1lc3Nh
Z2UuZGVmYXVsdF91aW50NjQpCi0gICAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDQwNSwgbWVzc2Fn
ZS5kZWZhdWx0X3NpbnQzMikKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoNDA2LCBtZXNzYWdl
LmRlZmF1bHRfc2ludDY0KQotICAgIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCg0MDcsIG1lc3NhZ2Uu
ZGVmYXVsdF9maXhlZDMyKQotICAgIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCg0MDgsIG1lc3NhZ2Uu
ZGVmYXVsdF9maXhlZDY0KQotICAgIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCg0MDksIG1lc3NhZ2Uu
ZGVmYXVsdF9zZml4ZWQzMikKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoNDEwLCBtZXNzYWdl
LmRlZmF1bHRfc2ZpeGVkNjQpCi0gICAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKDQxMSwgbWVzc2Fn
ZS5kZWZhdWx0X2Zsb2F0KQotICAgIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCg0MTIsIG1lc3NhZ2Uu
ZGVmYXVsdF9kb3VibGUpCi0gICAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKEZhbHNlLCBtZXNzYWdl
LmRlZmF1bHRfYm9vbCkKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoJzQxNScsIG1lc3NhZ2Uu
ZGVmYXVsdF9zdHJpbmcpCi0gICAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKGInNDE2JywgbWVzc2Fn
ZS5kZWZhdWx0X2J5dGVzKQotCi0gICAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3Bi
Mi5UZXN0QWxsVHlwZXMuRk9PLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRl
ZmF1bHRfbmVzdGVkX2VudW0pCi0gICAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKHVuaXR0ZXN0X3Bi
Mi5GT1JFSUdOX0ZPTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kZWZhdWx0
X2ZvcmVpZ25fZW51bSkKLSAgICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwodW5pdHRlc3RfaW1wb3J0
X3BiMi5JTVBPUlRfRk9PLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRlZmF1
bHRfaW1wb3J0X2VudW0pCi0KLQotZGVmIEdvbGRlbkZpbGUoZmlsZW5hbWUpOgotICAiIiJGaW5k
cyB0aGUgZ2l2ZW4gZ29sZGVuIGZpbGUgYW5kIHJldHVybnMgYSBmaWxlIG9iamVjdCByZXByZXNl
bnRpbmcgaXQuIiIiCi0KLSAgIyBTZWFyY2ggdXAgdGhlIGRpcmVjdG9yeSB0cmVlIGxvb2tpbmcg
Zm9yIHRoZSBDKysgcHJvdG9idWYgc291cmNlIGNvZGUuCi0gIHBhdGggPSAnLicKLSAgd2hpbGUg
b3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2lu
KHBhdGgsICdzcmMvZ29vZ2xlL3Byb3RvYnVmJykpOgotICAgICAgIyBGb3VuZCBpdC4gIExvYWQg
dGhlIGdvbGRlbiBmaWxlIGZyb20gdGhlIHRlc3RkYXRhIGRpcmVjdG9yeS4KLSAgICAgIGZ1bGxf
cGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAnc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0ZGF0YScs
IGZpbGVuYW1lKQotICAgICAgcmV0dXJuIG9wZW4oZnVsbF9wYXRoLCAncmInKQotICAgIHBhdGgg
PSBvcy5wYXRoLmpvaW4ocGF0aCwgJy4uJykKLQotICAjIFNlYXJjaCBpbnRlcm5hbGx5LgotICBw
YXRoID0gJy4nCi0gIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAndGhpcmRfcGFydHkv
cHkvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGVuYW1lKQotICBpZiBvcy5wYXRoLmV4aXN0cyhmdWxsX3BhdGgpOgotICAgICMgRm91bmQg
aXQuICBMb2FkIHRoZSBnb2xkZW4gZmlsZSBmcm9tIHRoZSB0ZXN0ZGF0YSBkaXJlY3RvcnkuCi0g
ICAgcmV0dXJuIG9wZW4oZnVsbF9wYXRoLCAncmInKQotCi0gIHJhaXNlIFJ1bnRpbWVFcnJvcigK
LSAgICAgICdDb3VsZCBub3QgZmluZCBnb2xkZW4gZmlsZXMuICBUaGlzIHRlc3QgbXVzdCBiZSBy
dW4gZnJvbSB3aXRoaW4gdGhlICcKLSAgICAgICdwcm90b2J1ZiBzb3VyY2UgcGFja2FnZSBzbyB0
aGF0IGl0IGNhbiByZWFkIHRlc3QgZGF0YSBmaWxlcyBmcm9tIHRoZSAnCi0gICAgICAnQysrIHNv
dXJjZSB0cmVlLicpCi0KLQotZGVmIEdvbGRlbkZpbGVEYXRhKGZpbGVuYW1lKToKLSAgIiIiRmlu
ZHMgdGhlIGdpdmVuIGdvbGRlbiBmaWxlIGFuZCByZXR1cm5zIGl0cyBjb250ZW50cy4iIiIKLSAg
d2l0aCBHb2xkZW5GaWxlKGZpbGVuYW1lKSBhcyBmOgotICAgIHJldHVybiBmLnJlYWQoKQotCi0K
LWRlZiBTZXRBbGxQYWNrZWRGaWVsZHMobWVzc2FnZSk6Ci0gICIiIlNldHMgZXZlcnkgZmllbGQg
aW4gdGhlIG1lc3NhZ2UgdG8gYSB1bmlxdWUgdmFsdWUuCi0KLSAgQXJnczoKLSAgICBtZXNzYWdl
OiBBIFRlc3RQYWNrZWRUeXBlcyBpbnN0YW5jZS4KLSAgIiIiCi0gIG1lc3NhZ2UucGFja2VkX2lu
dDMyLmV4dGVuZChbNjAxLCA3MDFdKQotICBtZXNzYWdlLnBhY2tlZF9pbnQ2NC5leHRlbmQoWzYw
MiwgNzAyXSkKLSAgbWVzc2FnZS5wYWNrZWRfdWludDMyLmV4dGVuZChbNjAzLCA3MDNdKQotICBt
ZXNzYWdlLnBhY2tlZF91aW50NjQuZXh0ZW5kKFs2MDQsIDcwNF0pCi0gIG1lc3NhZ2UucGFja2Vk
X3NpbnQzMi5leHRlbmQoWzYwNSwgNzA1XSkKLSAgbWVzc2FnZS5wYWNrZWRfc2ludDY0LmV4dGVu
ZChbNjA2LCA3MDZdKQotICBtZXNzYWdlLnBhY2tlZF9maXhlZDMyLmV4dGVuZChbNjA3LCA3MDdd
KQotICBtZXNzYWdlLnBhY2tlZF9maXhlZDY0LmV4dGVuZChbNjA4LCA3MDhdKQotICBtZXNzYWdl
LnBhY2tlZF9zZml4ZWQzMi5leHRlbmQoWzYwOSwgNzA5XSkKLSAgbWVzc2FnZS5wYWNrZWRfc2Zp
eGVkNjQuZXh0ZW5kKFs2MTAsIDcxMF0pCi0gIG1lc3NhZ2UucGFja2VkX2Zsb2F0LmV4dGVuZChb
NjExLjAsIDcxMS4wXSkKLSAgbWVzc2FnZS5wYWNrZWRfZG91YmxlLmV4dGVuZChbNjEyLjAsIDcx
Mi4wXSkKLSAgbWVzc2FnZS5wYWNrZWRfYm9vbC5leHRlbmQoW1RydWUsIEZhbHNlXSkKLSAgbWVz
c2FnZS5wYWNrZWRfZW51bS5leHRlbmQoW3VuaXR0ZXN0X3BiMi5GT1JFSUdOX0JBUiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0X3BiMi5GT1JFSUdOX0JBWl0pCi0KLQot
ZGVmIFNldEFsbFBhY2tlZEV4dGVuc2lvbnMobWVzc2FnZSk6Ci0gICIiIlNldHMgZXZlcnkgZXh0
ZW5zaW9uIGluIHRoZSBtZXNzYWdlIHRvIGEgdW5pcXVlIHZhbHVlLgotCi0gIEFyZ3M6Ci0gICAg
bWVzc2FnZTogQSB1bml0dGVzdF9wYjIuVGVzdFBhY2tlZEV4dGVuc2lvbnMgaW5zdGFuY2UuCi0g
ICIiIgotICBleHRlbnNpb25zID0gbWVzc2FnZS5FeHRlbnNpb25zCi0gIHBiMiA9IHVuaXR0ZXN0
X3BiMgotCi0gIGV4dGVuc2lvbnNbcGIyLnBhY2tlZF9pbnQzMl9leHRlbnNpb25dLmV4dGVuZChb
NjAxLCA3MDFdKQotICBleHRlbnNpb25zW3BiMi5wYWNrZWRfaW50NjRfZXh0ZW5zaW9uXS5leHRl
bmQoWzYwMiwgNzAyXSkKLSAgZXh0ZW5zaW9uc1twYjIucGFja2VkX3VpbnQzMl9leHRlbnNpb25d
LmV4dGVuZChbNjAzLCA3MDNdKQotICBleHRlbnNpb25zW3BiMi5wYWNrZWRfdWludDY0X2V4dGVu
c2lvbl0uZXh0ZW5kKFs2MDQsIDcwNF0pCi0gIGV4dGVuc2lvbnNbcGIyLnBhY2tlZF9zaW50MzJf
ZXh0ZW5zaW9uXS5leHRlbmQoWzYwNSwgNzA1XSkKLSAgZXh0ZW5zaW9uc1twYjIucGFja2VkX3Np
bnQ2NF9leHRlbnNpb25dLmV4dGVuZChbNjA2LCA3MDZdKQotICBleHRlbnNpb25zW3BiMi5wYWNr
ZWRfZml4ZWQzMl9leHRlbnNpb25dLmV4dGVuZChbNjA3LCA3MDddKQotICBleHRlbnNpb25zW3Bi
Mi5wYWNrZWRfZml4ZWQ2NF9leHRlbnNpb25dLmV4dGVuZChbNjA4LCA3MDhdKQotICBleHRlbnNp
b25zW3BiMi5wYWNrZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uXS5leHRlbmQoWzYwOSwgNzA5XSkKLSAg
ZXh0ZW5zaW9uc1twYjIucGFja2VkX3NmaXhlZDY0X2V4dGVuc2lvbl0uZXh0ZW5kKFs2MTAsIDcx
MF0pCi0gIGV4dGVuc2lvbnNbcGIyLnBhY2tlZF9mbG9hdF9leHRlbnNpb25dLmV4dGVuZChbNjEx
LjAsIDcxMS4wXSkKLSAgZXh0ZW5zaW9uc1twYjIucGFja2VkX2RvdWJsZV9leHRlbnNpb25dLmV4
dGVuZChbNjEyLjAsIDcxMi4wXSkKLSAgZXh0ZW5zaW9uc1twYjIucGFja2VkX2Jvb2xfZXh0ZW5z
aW9uXS5leHRlbmQoW1RydWUsIEZhbHNlXSkKLSAgZXh0ZW5zaW9uc1twYjIucGFja2VkX2VudW1f
ZXh0ZW5zaW9uXS5leHRlbmQoW3VuaXR0ZXN0X3BiMi5GT1JFSUdOX0JBUiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0X3BiMi5GT1JFSUdO
X0JBWl0pCi0KLQotZGVmIFNldEFsbFVucGFja2VkRmllbGRzKG1lc3NhZ2UpOgotICAiIiJTZXRz
IGV2ZXJ5IGZpZWxkIGluIHRoZSBtZXNzYWdlIHRvIGEgdW5pcXVlIHZhbHVlLgotCi0gIEFyZ3M6
Ci0gICAgbWVzc2FnZTogQSB1bml0dGVzdF9wYjIuVGVzdFVucGFja2VkVHlwZXMgaW5zdGFuY2Uu
Ci0gICIiIgotICBtZXNzYWdlLnVucGFja2VkX2ludDMyLmV4dGVuZChbNjAxLCA3MDFdKQotICBt
ZXNzYWdlLnVucGFja2VkX2ludDY0LmV4dGVuZChbNjAyLCA3MDJdKQotICBtZXNzYWdlLnVucGFj
a2VkX3VpbnQzMi5leHRlbmQoWzYwMywgNzAzXSkKLSAgbWVzc2FnZS51bnBhY2tlZF91aW50NjQu
ZXh0ZW5kKFs2MDQsIDcwNF0pCi0gIG1lc3NhZ2UudW5wYWNrZWRfc2ludDMyLmV4dGVuZChbNjA1
LCA3MDVdKQotICBtZXNzYWdlLnVucGFja2VkX3NpbnQ2NC5leHRlbmQoWzYwNiwgNzA2XSkKLSAg
bWVzc2FnZS51bnBhY2tlZF9maXhlZDMyLmV4dGVuZChbNjA3LCA3MDddKQotICBtZXNzYWdlLnVu
cGFja2VkX2ZpeGVkNjQuZXh0ZW5kKFs2MDgsIDcwOF0pCi0gIG1lc3NhZ2UudW5wYWNrZWRfc2Zp
eGVkMzIuZXh0ZW5kKFs2MDksIDcwOV0pCi0gIG1lc3NhZ2UudW5wYWNrZWRfc2ZpeGVkNjQuZXh0
ZW5kKFs2MTAsIDcxMF0pCi0gIG1lc3NhZ2UudW5wYWNrZWRfZmxvYXQuZXh0ZW5kKFs2MTEuMCwg
NzExLjBdKQotICBtZXNzYWdlLnVucGFja2VkX2RvdWJsZS5leHRlbmQoWzYxMi4wLCA3MTIuMF0p
Ci0gIG1lc3NhZ2UudW5wYWNrZWRfYm9vbC5leHRlbmQoW1RydWUsIEZhbHNlXSkKLSAgbWVzc2Fn
ZS51bnBhY2tlZF9lbnVtLmV4dGVuZChbdW5pdHRlc3RfcGIyLkZPUkVJR05fQkFSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdF9wYjIuRk9SRUlHTl9CQVpdKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3RleHRfZW5jb2RpbmdfdGVz
dC5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC90ZXh0X2VuY29kaW5nX3Rlc3Qu
cHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGM3ZDE4MmM0NDRhODBiYmFlMzU5OTFm
MTEzMDk2OTE0YmM5Njc2YWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3RleHRfZW5jb2RpbmdfdGVz
dC5weQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRo
b24KLSMKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotIiIiVGVzdHMgZm9yIGdvb2dsZS5wcm90b2J1Zi50ZXh0X2VuY29kaW5n
LiIiIgotCi10cnk6Ci0gIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QgICNQWTI2Ci1leGNl
cHQgSW1wb3J0RXJyb3I6Ci0gIGltcG9ydCB1bml0dGVzdAotCi1mcm9tIGdvb2dsZS5wcm90b2J1
ZiBpbXBvcnQgdGV4dF9lbmNvZGluZwotCi1URVNUX1ZBTFVFUyA9IFsKLSAgICAoImZvb1xccmJh
clxcbmJhelxcdCIsCi0gICAgICJmb29cXHJiYXJcXG5iYXpcXHQiLAotICAgICBiImZvb1xyYmFy
XG5iYXpcdCIpLAotICAgICgiXFwnZnVsbCBvZiBcXFwic291bmRcXFwiIGFuZCBcXFwiZnVyeVxc
XCJcXCciLAotICAgICAiXFwnZnVsbCBvZiBcXFwic291bmRcXFwiIGFuZCBcXFwiZnVyeVxcXCJc
XCciLAotICAgICBiIidmdWxsIG9mIFwic291bmRcIiBhbmQgXCJmdXJ5XCInIiksCi0gICAgKCJz
aWduaVxcXFxmeWluZ1xcXFwgbm90aGluZ1xcXFwiLAotICAgICAic2lnbmlcXFxcZnlpbmdcXFxc
IG5vdGhpbmdcXFxcIiwKLSAgICAgYiJzaWduaVxcZnlpbmdcXCBub3RoaW5nXFwiKSwKLSAgICAo
IlxcMDEwXFx0XFxuXFwwMTNcXDAxNFxcciIsCi0gICAgICJceDA4XFx0XFxuXHgwYlx4MGNcXHIi
LAotICAgICBiIlwwMTBcMDExXDAxMlwwMTNcMDE0XDAxNSIpXQotCi0KLWNsYXNzIFRleHRFbmNv
ZGluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHRlc3RDRXNjYXBlKHNlbGYp
OgotICAgIGZvciBlc2NhcGVkLCBlc2NhcGVkX3V0ZjgsIHVuZXNjYXBlZCBpbiBURVNUX1ZBTFVF
UzoKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXNjYXBlZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHRfZW5jb2RpbmcuQ0VzY2FwZSh1bmVzY2FwZWQsIGFzX3V0Zjg9RmFsc2UpKQotICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChlc2NhcGVkX3V0ZjgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0X2VuY29kaW5nLkNFc2NhcGUodW5lc2NhcGVkLCBhc191dGY4PVRydWUpKQotCi0gIGRl
ZiB0ZXN0Q1VuZXNjYXBlKHNlbGYpOgotICAgIGZvciBlc2NhcGVkLCBlc2NhcGVkX3V0ZjgsIHVu
ZXNjYXBlZCBpbiBURVNUX1ZBTFVFUzoKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5lc2NhcGVk
LCB0ZXh0X2VuY29kaW5nLkNVbmVzY2FwZShlc2NhcGVkKSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodW5lc2NhcGVkLCB0ZXh0X2VuY29kaW5nLkNVbmVzY2FwZShlc2NhcGVkX3V0ZjgpKQotCi0K
LWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3RleHRfZm9ybWF0X3Rlc3QucHkgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5
dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvdGV4dF9mb3JtYXRfdGVzdC5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYWIyYmYwNWI4ZTk5ZjNkZjE0MzE5YTkyMzQyNmFiZWM2
YzZiMmFmMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5
dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvdGV4dF9mb3JtYXRfdGVzdC5weQorKysgL2Rl
di9udWxsCkBAIC0xLDExNTkgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0j
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0iIiJUZXN0IGZvciBnb29nbGUucHJvdG9idWYudGV4dF9mb3JtYXQuIiIiCi0KLV9fYXV0
aG9yX18gPSAna2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSknCi0KLQotaW1wb3J0IHJl
Ci1pbXBvcnQgc2l4Ci1pbXBvcnQgc3RyaW5nCi0KLXRyeToKLSAgaW1wb3J0IHVuaXR0ZXN0MiBh
cyB1bml0dGVzdCAgI1BZMjYKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1wb3J0IHVuaXR0ZXN0
Ci0KLWZyb20gZ29vZ2xlLnByb3RvYnVmLmludGVybmFsIGltcG9ydCBfcGFyYW1ldGVyaXplZAot
Ci1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgbWFwX3VuaXR0ZXN0X3BiMgotZnJvbSBnb29n
bGUucHJvdG9idWYgaW1wb3J0IHVuaXR0ZXN0X21zZXRfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1
ZiBpbXBvcnQgdW5pdHRlc3RfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdW5pdHRl
c3RfcHJvdG8zX2FyZW5hX3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0
IGFwaV9pbXBsZW1lbnRhdGlvbgotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0
IHRlc3RfdXRpbAotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IG1lc3NhZ2Vf
c2V0X2V4dGVuc2lvbnNfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdGV4dF9mb3Jt
YXQKLQotCi0jIExvdy1sZXZlbCBudXRzLW4tYm9sdHMgdGVzdHMuCi1jbGFzcyBTaW1wbGVUZXh0
Rm9ybWF0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICMgVGhlIG1lbWJlcnMgb2YgX1FV
T1RFUyBhcmUgZm9ybWF0dGVkIGludG8gYSByZWdleHAgdGVtcGxhdGUgdGhhdAotICAjIGV4cGVj
dHMgc2luZ2xlIGNoYXJhY3RlcnMuICBUaGVyZWZvcmUgaXQncyBhbiBlcnJvciAoaW4gYWRkaXRp
b24gdG8gYmVpbmcKLSAgIyBub24tc2Vuc2ljYWwgaW4gdGhlIGZpcnN0IHBsYWNlKSB0byB0cnkg
dG8gc3BlY2lmeSBhICJxdW90ZSBtYXJrIiB0aGF0IGlzCi0gICMgbW9yZSB0aGFuIG9uZSBjaGFy
YWN0ZXIuCi0gIGRlZiB0ZXN0UXVvdGVNYXJrc0FyZVNpbmdsZUNoYXJzKHNlbGYpOgotICAgIGZv
ciBxdW90ZSBpbiB0ZXh0X2Zvcm1hdC5fUVVPVEVTOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgx
LCBsZW4ocXVvdGUpKQotCi0KLSMgQmFzZSBjbGFzcyB3aXRoIHNvbWUgY29tbW9uIGZ1bmN0aW9u
YWxpdHkuCi1jbGFzcyBUZXh0Rm9ybWF0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVm
IFJlYWRHb2xkZW4oc2VsZiwgZ29sZGVuX2ZpbGVuYW1lKToKLSAgICB3aXRoIHRlc3RfdXRpbC5H
b2xkZW5GaWxlKGdvbGRlbl9maWxlbmFtZSkgYXMgZjoKLSAgICAgIHJldHVybiAoZi5yZWFkbGlu
ZXMoKSBpZiBzdHIgaXMgYnl0ZXMgZWxzZSAgIyBQWTMKLSAgICAgICAgICAgICAgW2dvbGRlbl9s
aW5lLmRlY29kZSgndXRmLTgnKSBmb3IgZ29sZGVuX2xpbmUgaW4gZl0pCi0KLSAgZGVmIENvbXBh
cmVUb0dvbGRlbkZpbGUoc2VsZiwgdGV4dCwgZ29sZGVuX2ZpbGVuYW1lKToKLSAgICBnb2xkZW5f
bGluZXMgPSBzZWxmLlJlYWRHb2xkZW4oZ29sZGVuX2ZpbGVuYW1lKQotICAgIHNlbGYuYXNzZXJ0
TXVsdGlMaW5lRXF1YWwodGV4dCwgJycuam9pbihnb2xkZW5fbGluZXMpKQotCi0gIGRlZiBDb21w
YXJlVG9Hb2xkZW5UZXh0KHNlbGYsIHRleHQsIGdvbGRlbl90ZXh0KToKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKHRleHQsIGdvbGRlbl90ZXh0KQotCi0gIGRlZiBSZW1vdmVSZWR1bmRhbnRaZXJvcyhz
ZWxmLCB0ZXh0KToKLSAgICAjIFNvbWUgcGxhdGZvcm1zIHByaW50IDFlKzUgYXMgMWUrMDA1LiAg
VGhpcyBpcyBmaW5lLCBidXQgd2UgbmVlZCB0byByZW1vdmUKLSAgICAjIHRoZXNlIHplcm9zIGlu
IG9yZGVyIHRvIG1hdGNoIHRoZSBnb2xkZW4gZmlsZS4KLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNl
KCdlKzAnLCdlKycpLnJlcGxhY2UoJ2UrMCcsJ2UrJykgXAotICAgICAgICAgICAgICAgLnJlcGxh
Y2UoJ2UtMCcsJ2UtJykucmVwbGFjZSgnZS0wJywnZS0nKQotICAgICMgRmxvYXRpbmcgcG9pbnQg
ZmllbGRzIGFyZSBwcmludGVkIHdpdGggLjAgc3VmZml4IGV2ZW4gaWYgdGhleSBhcmUKLSAgICAj
IGFjdHVhbHkgaW50ZWdlciBudW1iZXJzLgotICAgIHRleHQgPSByZS5jb21waWxlKCdcLjAkJywg
cmUuTVVMVElMSU5FKS5zdWIoJycsIHRleHQpCi0gICAgcmV0dXJuIHRleHQKLQotCi1AX3BhcmFt
ZXRlcml6ZWQuUGFyYW1ldGVycygKLSAgICAodW5pdHRlc3RfcGIyKSwKLSAgICAodW5pdHRlc3Rf
cHJvdG8zX2FyZW5hX3BiMikpCi1jbGFzcyBUZXh0Rm9ybWF0VGVzdChUZXh0Rm9ybWF0QmFzZSk6
Ci0KLSAgZGVmIHRlc3RQcmludEV4b3RpYyhzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbWVz
c2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgbWVzc2FnZS5yZXBlYXRl
ZF9pbnQ2NC5hcHBlbmQoLTkyMjMzNzIwMzY4NTQ3NzU4MDgpCi0gICAgbWVzc2FnZS5yZXBlYXRl
ZF91aW50NjQuYXBwZW5kKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQotICAgIG1lc3NhZ2UucmVwZWF0
ZWRfZG91YmxlLmFwcGVuZCgxMjMuNDU2KQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlLmFw
cGVuZCgxLjIzZTIyKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlLmFwcGVuZCgxLjIzZS0x
OCkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZy5hcHBlbmQoJ1wwMDBcMDAxXGFcYlxmXG5c
clx0XHZcXFwnIicpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmcuYXBwZW5kKHUnXHUwMGZj
XHVhNzFmJykKLSAgICBzZWxmLkNvbXBhcmVUb0dvbGRlblRleHQoCi0gICAgICAgIHNlbGYuUmVt
b3ZlUmVkdW5kYW50WmVyb3ModGV4dF9mb3JtYXQuTWVzc2FnZVRvU3RyaW5nKG1lc3NhZ2UpKSwK
LSAgICAgICAgJ3JlcGVhdGVkX2ludDY0OiAtOTIyMzM3MjAzNjg1NDc3NTgwOFxuJwotICAgICAg
ICAncmVwZWF0ZWRfdWludDY0OiAxODQ0Njc0NDA3MzcwOTU1MTYxNVxuJwotICAgICAgICAncmVw
ZWF0ZWRfZG91YmxlOiAxMjMuNDU2XG4nCi0gICAgICAgICdyZXBlYXRlZF9kb3VibGU6IDEuMjNl
KzIyXG4nCi0gICAgICAgICdyZXBlYXRlZF9kb3VibGU6IDEuMjNlLTE4XG4nCi0gICAgICAgICdy
ZXBlYXRlZF9zdHJpbmc6JwotICAgICAgICAnICJcXDAwMFxcMDAxXFwwMDdcXDAxMFxcMDE0XFxu
XFxyXFx0XFwwMTNcXFxcXFxcJ1xcIiJcbicKLSAgICAgICAgJ3JlcGVhdGVkX3N0cmluZzogIlxc
MzAzXFwyNzRcXDM1MlxcMjM0XFwyMzciXG4nKQotCi0gIGRlZiB0ZXN0UHJpbnRFeG90aWNVbmlj
b2RlU3ViY2xhc3Moc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIGNsYXNzIFVuaWNvZGVTdWIo
c2l4LnRleHRfdHlwZSk6Ci0gICAgICBwYXNzCi0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxl
LlRlc3RBbGxUeXBlcygpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmcuYXBwZW5kKFVuaWNv
ZGVTdWIodSdcdTAwZmNcdWE3MWYnKSkKLSAgICBzZWxmLkNvbXBhcmVUb0dvbGRlblRleHQoCi0g
ICAgICAgIHRleHRfZm9ybWF0Lk1lc3NhZ2VUb1N0cmluZyhtZXNzYWdlKSwKLSAgICAgICAgJ3Jl
cGVhdGVkX3N0cmluZzogIlxcMzAzXFwyNzRcXDM1MlxcMjM0XFwyMzciXG4nKQotCi0gIGRlZiB0
ZXN0UHJpbnROZXN0ZWRNZXNzYWdlQXNPbmVMaW5lKHNlbGYsIG1lc3NhZ2VfbW9kdWxlKToKLSAg
ICBtZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBtc2cgPSBtZXNz
YWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlLmFkZCgpCi0gICAgbXNnLmJiID0gNDIKLSAgICBz
ZWxmLkNvbXBhcmVUb0dvbGRlblRleHQoCi0gICAgICAgIHRleHRfZm9ybWF0Lk1lc3NhZ2VUb1N0
cmluZyhtZXNzYWdlLCBhc19vbmVfbGluZT1UcnVlKSwKLSAgICAgICAgJ3JlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlIHsgYmI6IDQyIH0nKQotCi0gIGRlZiB0ZXN0UHJpbnRSZXBlYXRlZEZpZWxkc0Fz
T25lTGluZShzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9k
dWxlLlRlc3RBbGxUeXBlcygpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMSkK
LSAgICBtZXNzYWdlLnJlcGVhdGVkX2ludDMyLmFwcGVuZCgxKQotICAgIG1lc3NhZ2UucmVwZWF0
ZWRfaW50MzIuYXBwZW5kKDMpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmcuYXBwZW5kKCdH
b29nbGUnKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nLmFwcGVuZCgnWnVyaWNoJykKLSAg
ICBzZWxmLkNvbXBhcmVUb0dvbGRlblRleHQoCi0gICAgICAgIHRleHRfZm9ybWF0Lk1lc3NhZ2VU
b1N0cmluZyhtZXNzYWdlLCBhc19vbmVfbGluZT1UcnVlKSwKLSAgICAgICAgJ3JlcGVhdGVkX2lu
dDMyOiAxIHJlcGVhdGVkX2ludDMyOiAxIHJlcGVhdGVkX2ludDMyOiAzICcKLSAgICAgICAgJ3Jl
cGVhdGVkX3N0cmluZzogIkdvb2dsZSIgcmVwZWF0ZWRfc3RyaW5nOiAiWnVyaWNoIicpCi0KLSAg
ZGVmIHRlc3RQcmludE5lc3RlZE5ld0xpbmVJblN0cmluZ0FzT25lTGluZShzZWxmLCBtZXNzYWdl
X21vZHVsZSk6Ci0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0g
ICAgbWVzc2FnZS5vcHRpb25hbF9zdHJpbmcgPSAnYVxubmV3XG5saW5lJwotICAgIHNlbGYuQ29t
cGFyZVRvR29sZGVuVGV4dCgKLSAgICAgICAgdGV4dF9mb3JtYXQuTWVzc2FnZVRvU3RyaW5nKG1l
c3NhZ2UsIGFzX29uZV9saW5lPVRydWUpLAotICAgICAgICAnb3B0aW9uYWxfc3RyaW5nOiAiYVxc
bm5ld1xcbmxpbmUiJykKLQotICBkZWYgdGVzdFByaW50RXhvdGljQXNPbmVMaW5lKHNlbGYsIG1l
c3NhZ2VfbW9kdWxlKToKLSAgICBtZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVz
KCkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2ludDY0LmFwcGVuZCgtOTIyMzM3MjAzNjg1NDc3NTgw
OCkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX3VpbnQ2NC5hcHBlbmQoMTg0NDY3NDQwNzM3MDk1NTE2
MTUpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9kb3VibGUuYXBwZW5kKDEyMy40NTYpCi0gICAgbWVz
c2FnZS5yZXBlYXRlZF9kb3VibGUuYXBwZW5kKDEuMjNlMjIpCi0gICAgbWVzc2FnZS5yZXBlYXRl
ZF9kb3VibGUuYXBwZW5kKDEuMjNlLTE4KQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nLmFw
cGVuZCgnXDAwMFwwMDFcYVxiXGZcblxyXHRcdlxcXCciJykKLSAgICBtZXNzYWdlLnJlcGVhdGVk
X3N0cmluZy5hcHBlbmQodSdcdTAwZmNcdWE3MWYnKQotICAgIHNlbGYuQ29tcGFyZVRvR29sZGVu
VGV4dCgKLSAgICAgICAgc2VsZi5SZW1vdmVSZWR1bmRhbnRaZXJvcygKLSAgICAgICAgICAgIHRl
eHRfZm9ybWF0Lk1lc3NhZ2VUb1N0cmluZyhtZXNzYWdlLCBhc19vbmVfbGluZT1UcnVlKSksCi0g
ICAgICAgICdyZXBlYXRlZF9pbnQ2NDogLTkyMjMzNzIwMzY4NTQ3NzU4MDgnCi0gICAgICAgICcg
cmVwZWF0ZWRfdWludDY0OiAxODQ0Njc0NDA3MzcwOTU1MTYxNScKLSAgICAgICAgJyByZXBlYXRl
ZF9kb3VibGU6IDEyMy40NTYnCi0gICAgICAgICcgcmVwZWF0ZWRfZG91YmxlOiAxLjIzZSsyMicK
LSAgICAgICAgJyByZXBlYXRlZF9kb3VibGU6IDEuMjNlLTE4JwotICAgICAgICAnIHJlcGVhdGVk
X3N0cmluZzogJwotICAgICAgICAnIlxcMDAwXFwwMDFcXDAwN1xcMDEwXFwwMTRcXG5cXHJcXHRc
XDAxM1xcXFxcXFwnXFwiIicKLSAgICAgICAgJyByZXBlYXRlZF9zdHJpbmc6ICJcXDMwM1xcMjc0
XFwzNTJcXDIzNFxcMjM3IicpCi0KLSAgZGVmIHRlc3RSb3VuZFRyaXBFeG90aWNBc09uZUxpbmUo
c2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG1lc3NhZ2UgPSBtZXNzYWdlX21vZHVsZS5UZXN0
QWxsVHlwZXMoKQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfaW50NjQuYXBwZW5kKC05MjIzMzcyMDM2
ODU0Nzc1ODA4KQotICAgIG1lc3NhZ2UucmVwZWF0ZWRfdWludDY0LmFwcGVuZCgxODQ0Njc0NDA3
MzcwOTU1MTYxNSkKLSAgICBtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZS5hcHBlbmQoMTIzLjQ1NikK
LSAgICBtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZS5hcHBlbmQoMS4yM2UyMikKLSAgICBtZXNzYWdl
LnJlcGVhdGVkX2RvdWJsZS5hcHBlbmQoMS4yM2UtMTgpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9z
dHJpbmcuYXBwZW5kKCdcMDAwXDAwMVxhXGJcZlxuXHJcdFx2XFxcJyInKQotICAgIG1lc3NhZ2Uu
cmVwZWF0ZWRfc3RyaW5nLmFwcGVuZCh1J1x1MDBmY1x1YTcxZicpCi0KLSAgICAjIFRlc3QgYXNf
dXRmOCA9IEZhbHNlLgotICAgIHdpcmVfdGV4dCA9IHRleHRfZm9ybWF0Lk1lc3NhZ2VUb1N0cmlu
ZygKLSAgICAgICAgbWVzc2FnZSwgYXNfb25lX2xpbmU9VHJ1ZSwgYXNfdXRmOD1GYWxzZSkKLSAg
ICBwYXJzZWRfbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgciA9
IHRleHRfZm9ybWF0LlBhcnNlKHdpcmVfdGV4dCwgcGFyc2VkX21lc3NhZ2UpCi0gICAgc2VsZi5h
c3NlcnRJcyhyLCBwYXJzZWRfbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2Us
IHBhcnNlZF9tZXNzYWdlKQotCi0gICAgIyBUZXN0IGFzX3V0ZjggPSBUcnVlLgotICAgIHdpcmVf
dGV4dCA9IHRleHRfZm9ybWF0Lk1lc3NhZ2VUb1N0cmluZygKLSAgICAgICAgbWVzc2FnZSwgYXNf
b25lX2xpbmU9VHJ1ZSwgYXNfdXRmOD1UcnVlKQotICAgIHBhcnNlZF9tZXNzYWdlID0gbWVzc2Fn
ZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICByID0gdGV4dF9mb3JtYXQuUGFyc2Uod2lyZV90
ZXh0LCBwYXJzZWRfbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydElzKHIsIHBhcnNlZF9tZXNzYWdl
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgcGFyc2VkX21lc3NhZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgJ1xuJXMgIT0gJXMnICUgKG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdlKSkK
LQotICBkZWYgdGVzdFByaW50UmF3VXRmOFN0cmluZyhzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0g
ICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgbWVzc2FnZS5y
ZXBlYXRlZF9zdHJpbmcuYXBwZW5kKHUnXHUwMGZjXHVhNzFmJykKLSAgICB0ZXh0ID0gdGV4dF9m
b3JtYXQuTWVzc2FnZVRvU3RyaW5nKG1lc3NhZ2UsIGFzX3V0Zjg9VHJ1ZSkKLSAgICBzZWxmLkNv
bXBhcmVUb0dvbGRlblRleHQodGV4dCwgJ3JlcGVhdGVkX3N0cmluZzogIlwzMDNcMjc0XDM1Mlwy
MzRcMjM3IlxuJykKLSAgICBwYXJzZWRfbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxU
eXBlcygpCi0gICAgdGV4dF9mb3JtYXQuUGFyc2UodGV4dCwgcGFyc2VkX21lc3NhZ2UpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCBwYXJzZWRfbWVzc2FnZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAnXG4lcyAhPSAlcycgJSAobWVzc2FnZSwgcGFyc2VkX21lc3NhZ2UpKQotCi0gIGRl
ZiB0ZXN0UHJpbnRGbG9hdEZvcm1hdChzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgIyBDaGVj
ayB0aGF0IGZsb2F0X2Zvcm1hdCBhcmd1bWVudCBpcyBwYXNzZWQgdG8gc3ViLW1lc3NhZ2UgZm9y
bWF0dGluZy4KLSAgICBtZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUuTmVzdGVkVGVzdEFsbFR5cGVz
KCkKLSAgICAjIFdlIHVzZSAxLjI1IGFzIGl0IGlzIGEgcm91bmQgbnVtYmVyIGluIGJpbmFyeS4g
IFRoZSBwcm90byAzMi1iaXQgZmxvYXQKLSAgICAjIHdpbGwgbm90IGdhaW4gYWRkaXRpb25hbCBp
bXByZWNpc2UgZGlnaXRzIGFzIGEgNjQtYml0IFB5dGhvbiBmbG9hdCBhbmQKLSAgICAjIHNob3cg
dXAgaW4gaXRzIHN0ci4gIDMyLWJpdCAxLjIgaXMgbm9pc3kgd2hlbiBleHRlbmRlZCB0byA2NC1i
aXQ6Ci0gICAgIyAgPj4+IHN0cnVjdC51bnBhY2soJ2YnLCBzdHJ1Y3QucGFjaygnZicsIDEuMikp
WzBdCi0gICAgIyAgMS4yMDAwMDAwNDc2ODM3MTU4Ci0gICAgIyAgPj4+IHN0cnVjdC51bnBhY2so
J2YnLCBzdHJ1Y3QucGFjaygnZicsIDEuMjUpKVswXQotICAgICMgIDEuMjUKLSAgICBtZXNzYWdl
LnBheWxvYWQub3B0aW9uYWxfZmxvYXQgPSAxLjI1Ci0gICAgIyBDaGVjayByb3VuZGluZyBhdCAx
NSBzaWduaWZpY2FudCBkaWdpdHMKLSAgICBtZXNzYWdlLnBheWxvYWQub3B0aW9uYWxfZG91Ymxl
ID0gLS4wMDAwMDM0NTY3ODkwMTIzNDU2NzgKLSAgICAjIENoZWNrIG5vIGRlY2ltYWwgcG9pbnQu
Ci0gICAgbWVzc2FnZS5wYXlsb2FkLnJlcGVhdGVkX2Zsb2F0LmFwcGVuZCgtNTY0MikKLSAgICAj
IENoZWNrIG5vIHRyYWlsaW5nIHplcm9zLgotICAgIG1lc3NhZ2UucGF5bG9hZC5yZXBlYXRlZF9k
b3VibGUuYXBwZW5kKC4wMDAwNzg5MDApCi0gICAgZm9ybWF0dGVkX2ZpZWxkcyA9IFsnb3B0aW9u
YWxfZmxvYXQ6IDEuMjUnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbmFsX2RvdWJs
ZTogLTMuNDU2Nzg5MDEyMzQ1NjhlLTYnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGVh
dGVkX2Zsb2F0OiAtNTY0MicsCi0gICAgICAgICAgICAgICAgICAgICAgICAncmVwZWF0ZWRfZG91
YmxlOiA3Ljg5ZS01J10KLSAgICB0ZXh0X21lc3NhZ2UgPSB0ZXh0X2Zvcm1hdC5NZXNzYWdlVG9T
dHJpbmcobWVzc2FnZSwgZmxvYXRfZm9ybWF0PScuMTVnJykKLSAgICBzZWxmLkNvbXBhcmVUb0dv
bGRlblRleHQoCi0gICAgICAgIHNlbGYuUmVtb3ZlUmVkdW5kYW50WmVyb3ModGV4dF9tZXNzYWdl
KSwKLSAgICAgICAgJ3BheWxvYWQge3tcbiAgezB9XG4gIHsxfVxuICB7Mn1cbiAgezN9XG59fVxu
Jy5mb3JtYXQoKmZvcm1hdHRlZF9maWVsZHMpKQotICAgICMgYXNfb25lX2xpbmU9VHJ1ZSBpcyBh
IHNlcGFyYXRlIGNvZGUgYnJhbmNoIHdoZXJlIGZsb2F0X2Zvcm1hdCBpcyBwYXNzZWQuCi0gICAg
dGV4dF9tZXNzYWdlID0gdGV4dF9mb3JtYXQuTWVzc2FnZVRvU3RyaW5nKG1lc3NhZ2UsIGFzX29u
ZV9saW5lPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0X2Zvcm1hdD0nLjE1ZycpCi0gICAgc2VsZi5Db21wYXJlVG9Hb2xkZW5UZXh0KAot
ICAgICAgICBzZWxmLlJlbW92ZVJlZHVuZGFudFplcm9zKHRleHRfbWVzc2FnZSksCi0gICAgICAg
ICdwYXlsb2FkIHt7IHswfSB7MX0gezJ9IHszfSB9fScuZm9ybWF0KCpmb3JtYXR0ZWRfZmllbGRz
KSkKLQotICBkZWYgdGVzdE1lc3NhZ2VUb1N0cmluZyhzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0g
ICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLkZvcmVpZ25NZXNzYWdlKCkKLSAgICBtZXNzYWdl
LmMgPSAxMjMKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjOiAxMjNcbicsIHN0cihtZXNzYWdlKSkK
LQotICBkZWYgdGVzdFByaW50RmllbGQoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG1lc3Nh
Z2UgPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIGZpZWxkID0gbWVzc2FnZS5E
RVNDUklQVE9SLmZpZWxkc19ieV9uYW1lWydvcHRpb25hbF9mbG9hdCddCi0gICAgdmFsdWUgPSBt
ZXNzYWdlLm9wdGlvbmFsX2Zsb2F0Ci0gICAgb3V0ID0gdGV4dF9mb3JtYXQuVGV4dFdyaXRlcihG
YWxzZSkKLSAgICB0ZXh0X2Zvcm1hdC5QcmludEZpZWxkKGZpZWxkLCB2YWx1ZSwgb3V0KQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ29wdGlvbmFsX2Zsb2F0OiAwLjBcbicsIG91dC5nZXR2YWx1ZSgp
KQotICAgIG91dC5jbG9zZSgpCi0gICAgIyBUZXN0IFByaW50ZXIKLSAgICBvdXQgPSB0ZXh0X2Zv
cm1hdC5UZXh0V3JpdGVyKEZhbHNlKQotICAgIHByaW50ZXIgPSB0ZXh0X2Zvcm1hdC5fUHJpbnRl
cihvdXQpCi0gICAgcHJpbnRlci5QcmludEZpZWxkKGZpZWxkLCB2YWx1ZSkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKCdvcHRpb25hbF9mbG9hdDogMC4wXG4nLCBvdXQuZ2V0dmFsdWUoKSkKLSAgICBv
dXQuY2xvc2UoKQotCi0gIGRlZiB0ZXN0UHJpbnRGaWVsZFZhbHVlKHNlbGYsIG1lc3NhZ2VfbW9k
dWxlKToKLSAgICBtZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBm
aWVsZCA9IG1lc3NhZ2UuREVTQ1JJUFRPUi5maWVsZHNfYnlfbmFtZVsnb3B0aW9uYWxfZmxvYXQn
XQotICAgIHZhbHVlID0gbWVzc2FnZS5vcHRpb25hbF9mbG9hdAotICAgIG91dCA9IHRleHRfZm9y
bWF0LlRleHRXcml0ZXIoRmFsc2UpCi0gICAgdGV4dF9mb3JtYXQuUHJpbnRGaWVsZFZhbHVlKGZp
ZWxkLCB2YWx1ZSwgb3V0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzAuMCcsIG91dC5nZXR2YWx1
ZSgpKQotICAgIG91dC5jbG9zZSgpCi0gICAgIyBUZXN0IFByaW50ZXIKLSAgICBvdXQgPSB0ZXh0
X2Zvcm1hdC5UZXh0V3JpdGVyKEZhbHNlKQotICAgIHByaW50ZXIgPSB0ZXh0X2Zvcm1hdC5fUHJp
bnRlcihvdXQpCi0gICAgcHJpbnRlci5QcmludEZpZWxkVmFsdWUoZmllbGQsIHZhbHVlKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJzAuMCcsIG91dC5nZXR2YWx1ZSgpKQotICAgIG91dC5jbG9zZSgp
Ci0KLSAgZGVmIHRlc3RQYXJzZUFsbEZpZWxkcyhzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAg
bWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgdGVzdF91dGlsLlNl
dEFsbEZpZWxkcyhtZXNzYWdlKQotICAgIGFzY2lpX3RleHQgPSB0ZXh0X2Zvcm1hdC5NZXNzYWdl
VG9TdHJpbmcobWVzc2FnZSkKLQotICAgIHBhcnNlZF9tZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUu
VGVzdEFsbFR5cGVzKCkKLSAgICB0ZXh0X2Zvcm1hdC5QYXJzZShhc2NpaV90ZXh0LCBwYXJzZWRf
bWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQot
ICAgIGlmIG1lc3NhZ2VfbW9kdWxlIGlzIHVuaXR0ZXN0X3BiMjoKLSAgICAgIHRlc3RfdXRpbC5F
eHBlY3RBbGxGaWVsZHNTZXQoc2VsZiwgbWVzc2FnZSkKLQotICBkZWYgdGVzdFBhcnNlRXhvdGlj
KHNlbGYsIG1lc3NhZ2VfbW9kdWxlKToKLSAgICBtZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUuVGVz
dEFsbFR5cGVzKCkKLSAgICB0ZXh0ID0gKCdyZXBlYXRlZF9pbnQ2NDogLTkyMjMzNzIwMzY4NTQ3
NzU4MDhcbicKLSAgICAgICAgICAgICdyZXBlYXRlZF91aW50NjQ6IDE4NDQ2NzQ0MDczNzA5NTUx
NjE1XG4nCi0gICAgICAgICAgICAncmVwZWF0ZWRfZG91YmxlOiAxMjMuNDU2XG4nCi0gICAgICAg
ICAgICAncmVwZWF0ZWRfZG91YmxlOiAxLjIzZSsyMlxuJwotICAgICAgICAgICAgJ3JlcGVhdGVk
X2RvdWJsZTogMS4yM2UtMThcbicKLSAgICAgICAgICAgICdyZXBlYXRlZF9zdHJpbmc6IFxuJwot
ICAgICAgICAgICAgJyJcXDAwMFxcMDAxXFwwMDdcXDAxMFxcMDE0XFxuXFxyXFx0XFwwMTNcXFxc
XFxcJ1xcIiJcbicKLSAgICAgICAgICAgICdyZXBlYXRlZF9zdHJpbmc6ICJmb28iIFwnY29yZ2Vc
JyAiZ3JhdWx0IlxuJwotICAgICAgICAgICAgJ3JlcGVhdGVkX3N0cmluZzogIlxcMzAzXFwyNzRc
XDM1MlxcMjM0XFwyMzciXG4nCi0gICAgICAgICAgICAncmVwZWF0ZWRfc3RyaW5nOiAiXFx4YzNc
XHhiYyJcbicKLSAgICAgICAgICAgICdyZXBlYXRlZF9zdHJpbmc6ICJceGMzXHhiYyJcbicpCi0g
ICAgdGV4dF9mb3JtYXQuUGFyc2UodGV4dCwgbWVzc2FnZSkKLQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoLTkyMjMzNzIwMzY4NTQ3NzU4MDgsIG1lc3NhZ2UucmVwZWF0ZWRfaW50NjRbMF0pCi0gICAg
c2VsZi5hc3NlcnRFcXVhbCgxODQ0Njc0NDA3MzcwOTU1MTYxNSwgbWVzc2FnZS5yZXBlYXRlZF91
aW50NjRbMF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxMjMuNDU2LCBtZXNzYWdlLnJlcGVhdGVk
X2RvdWJsZVswXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEuMjNlMjIsIG1lc3NhZ2UucmVwZWF0
ZWRfZG91YmxlWzFdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMS4yM2UtMTgsIG1lc3NhZ2UucmVw
ZWF0ZWRfZG91YmxlWzJdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICdcMDAwXDAw
MVxhXGJcZlxuXHJcdFx2XFxcJyInLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZ1swXSkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKCdmb29jb3JnZWdyYXVsdCcsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5n
WzFdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdTAwZmNcdWE3MWYnLCBtZXNzYWdlLnJlcGVh
dGVkX3N0cmluZ1syXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHUwMGZjJywgbWVzc2FnZS5y
ZXBlYXRlZF9zdHJpbmdbM10pCi0KLSAgZGVmIHRlc3RQYXJzZVRyYWlsaW5nQ29tbWFzKHNlbGYs
IG1lc3NhZ2VfbW9kdWxlKToKLSAgICBtZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5
cGVzKCkKLSAgICB0ZXh0ID0gKCdyZXBlYXRlZF9pbnQ2NDogMTAwO1xuJwotICAgICAgICAgICAg
J3JlcGVhdGVkX2ludDY0OiAyMDA7XG4nCi0gICAgICAgICAgICAncmVwZWF0ZWRfaW50NjQ6IDMw
MCxcbicKLSAgICAgICAgICAgICdyZXBlYXRlZF9zdHJpbmc6ICJvbmUiLFxuJwotICAgICAgICAg
ICAgJ3JlcGVhdGVkX3N0cmluZzogInR3byI7XG4nKQotICAgIHRleHRfZm9ybWF0LlBhcnNlKHRl
eHQsIG1lc3NhZ2UpCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKDEwMCwgbWVzc2FnZS5yZXBlYXRl
ZF9pbnQ2NFswXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIwMCwgbWVzc2FnZS5yZXBlYXRlZF9p
bnQ2NFsxXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDMwMCwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2
NFsyXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHUnb25lJywgbWVzc2FnZS5yZXBlYXRlZF9zdHJp
bmdbMF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCh1J3R3bycsIG1lc3NhZ2UucmVwZWF0ZWRfc3Ry
aW5nWzFdKQotCi0gIGRlZiB0ZXN0UGFyc2VSZXBlYXRlZFNjYWxhclNob3J0Rm9ybWF0KHNlbGYs
IG1lc3NhZ2VfbW9kdWxlKToKLSAgICBtZXNzYWdlID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5
cGVzKCkKLSAgICB0ZXh0ID0gKCdyZXBlYXRlZF9pbnQ2NDogWzEwMCwgMjAwXTtcbicKLSAgICAg
ICAgICAgICdyZXBlYXRlZF9pbnQ2NDogMzAwLFxuJwotICAgICAgICAgICAgJ3JlcGVhdGVkX3N0
cmluZzogWyJvbmUiLCAidHdvIl07XG4nKQotICAgIHRleHRfZm9ybWF0LlBhcnNlKHRleHQsIG1l
c3NhZ2UpCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKDEwMCwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2
NFswXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIwMCwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2NFsx
XSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDMwMCwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2NFsyXSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKHUnb25lJywgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdbMF0p
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCh1J3R3bycsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nWzFd
KQotCi0gIGRlZiB0ZXN0UGFyc2VSZXBlYXRlZE1lc3NhZ2VTaG9ydEZvcm1hdChzZWxmLCBtZXNz
YWdlX21vZHVsZSk6Ci0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygp
Ci0gICAgdGV4dCA9ICgncmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2U6IFt7YmI6IDEwMH0sIHtiYjog
MjAwfV0sXG4nCi0gICAgICAgICAgICAncmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2U6IHtiYjogMzAw
fVxuJwotICAgICAgICAgICAgJ3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlIFt7YmI6IDQwMH1dO1xu
JykKLSAgICB0ZXh0X2Zvcm1hdC5QYXJzZSh0ZXh0LCBtZXNzYWdlKQotCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgxMDAsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VbMF0uYmIpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbCgyMDAsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VbMV0u
YmIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgzMDAsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21l
c3NhZ2VbMl0uYmIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg0MDAsIG1lc3NhZ2UucmVwZWF0ZWRf
bmVzdGVkX21lc3NhZ2VbM10uYmIpCi0KLSAgZGVmIHRlc3RQYXJzZUVtcHR5VGV4dChzZWxmLCBt
ZXNzYWdlX21vZHVsZSk6Ci0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBl
cygpCi0gICAgdGV4dCA9ICcnCi0gICAgdGV4dF9mb3JtYXQuUGFyc2UodGV4dCwgbWVzc2FnZSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpLCBtZXNz
YWdlKQotCi0gIGRlZiB0ZXN0UGFyc2VJbnZhbGlkVXRmOChzZWxmLCBtZXNzYWdlX21vZHVsZSk6
Ci0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgdGV4dCA9
ICdyZXBlYXRlZF9zdHJpbmc6ICJcXHhjM1xceGMzIicKLSAgICBzZWxmLmFzc2VydFJhaXNlcyh0
ZXh0X2Zvcm1hdC5QYXJzZUVycm9yLCB0ZXh0X2Zvcm1hdC5QYXJzZSwgdGV4dCwgbWVzc2FnZSkK
LQotICBkZWYgdGVzdFBhcnNlU2luZ2xlV29yZChzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAg
bWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgdGV4dCA9ICdmb28n
Ci0gICAgc2l4LmFzc2VydFJhaXNlc1JlZ2V4KHNlbGYsCi0gICAgICAgIHRleHRfZm9ybWF0LlBh
cnNlRXJyb3IsCi0gICAgICAgIChyJzE6MSA6IE1lc3NhZ2UgdHlwZSAiXHcrLlRlc3RBbGxUeXBl
cyIgaGFzIG5vIGZpZWxkIG5hbWVkICcKLSAgICAgICAgIHInImZvbyIuJyksCi0gICAgICAgIHRl
eHRfZm9ybWF0LlBhcnNlLCB0ZXh0LCBtZXNzYWdlKQotCi0gIGRlZiB0ZXN0UGFyc2VVbmtub3du
RmllbGQoc2VsZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG1lc3NhZ2UgPSBtZXNzYWdlX21vZHVs
ZS5UZXN0QWxsVHlwZXMoKQotICAgIHRleHQgPSAndW5rbm93bl9maWVsZDogOFxuJwotICAgIHNp
eC5hc3NlcnRSYWlzZXNSZWdleChzZWxmLAotICAgICAgICB0ZXh0X2Zvcm1hdC5QYXJzZUVycm9y
LAotICAgICAgICAocicxOjEgOiBNZXNzYWdlIHR5cGUgIlx3Ky5UZXN0QWxsVHlwZXMiIGhhcyBu
byBmaWVsZCBuYW1lZCAnCi0gICAgICAgICByJyJ1bmtub3duX2ZpZWxkIi4nKSwKLSAgICAgICAg
dGV4dF9mb3JtYXQuUGFyc2UsIHRleHQsIG1lc3NhZ2UpCi0KLSAgZGVmIHRlc3RQYXJzZUJhZEVu
dW1WYWx1ZShzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9k
dWxlLlRlc3RBbGxUeXBlcygpCi0gICAgdGV4dCA9ICdvcHRpb25hbF9uZXN0ZWRfZW51bTogQkFS
UicKLSAgICBzaXguYXNzZXJ0UmFpc2VzUmVnZXgoc2VsZiwKLSAgICAgICAgdGV4dF9mb3JtYXQu
UGFyc2VFcnJvciwKLSAgICAgICAgKHInMToyMyA6IEVudW0gdHlwZSAiXHcrLlRlc3RBbGxUeXBl
cy5OZXN0ZWRFbnVtIiAnCi0gICAgICAgICByJ2hhcyBubyB2YWx1ZSBuYW1lZCBCQVJSLicpLAot
ICAgICAgICB0ZXh0X2Zvcm1hdC5QYXJzZSwgdGV4dCwgbWVzc2FnZSkKLQotICAgIG1lc3NhZ2Ug
PSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMoKQotICAgIHRleHQgPSAnb3B0aW9uYWxfbmVz
dGVkX2VudW06IDEwMCcKLSAgICBzaXguYXNzZXJ0UmFpc2VzUmVnZXgoc2VsZiwKLSAgICAgICAg
dGV4dF9mb3JtYXQuUGFyc2VFcnJvciwKLSAgICAgICAgKHInMToyMyA6IEVudW0gdHlwZSAiXHcr
LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtIiAnCi0gICAgICAgICByJ2hhcyBubyB2YWx1ZSB3aXRo
IG51bWJlciAxMDAuJyksCi0gICAgICAgIHRleHRfZm9ybWF0LlBhcnNlLCB0ZXh0LCBtZXNzYWdl
KQotCi0gIGRlZiB0ZXN0UGFyc2VCYWRJbnRWYWx1ZShzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0g
ICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAgdGV4dCA9ICdv
cHRpb25hbF9pbnQzMjogYm9yaycKLSAgICBzaXguYXNzZXJ0UmFpc2VzUmVnZXgoc2VsZiwKLSAg
ICAgICAgdGV4dF9mb3JtYXQuUGFyc2VFcnJvciwKLSAgICAgICAgKCcxOjE3IDogQ291bGRuXCd0
IHBhcnNlIGludGVnZXI6IGJvcmsnKSwKLSAgICAgICAgdGV4dF9mb3JtYXQuUGFyc2UsIHRleHQs
IG1lc3NhZ2UpCi0KLSAgZGVmIHRlc3RQYXJzZVN0cmluZ0ZpZWxkVW5lc2NhcGUoc2VsZiwgbWVz
c2FnZV9tb2R1bGUpOgotICAgIG1lc3NhZ2UgPSBtZXNzYWdlX21vZHVsZS5UZXN0QWxsVHlwZXMo
KQotICAgIHRleHQgPSByJycncmVwZWF0ZWRfc3RyaW5nOiAiXHhmXHg2MiIKLSAgICAgICAgICAg
ICAgIHJlcGVhdGVkX3N0cmluZzogIlxceGZcXHg2MiIKLSAgICAgICAgICAgICAgIHJlcGVhdGVk
X3N0cmluZzogIlxcXHhmXFxceDYyIgotICAgICAgICAgICAgICAgcmVwZWF0ZWRfc3RyaW5nOiAi
XFxcXHhmXFxcXHg2MiIKLSAgICAgICAgICAgICAgIHJlcGVhdGVkX3N0cmluZzogIlxcXFxceGZc
XFxcXHg2MiIKLSAgICAgICAgICAgICAgIHJlcGVhdGVkX3N0cmluZzogIlx4NWN4MjAiJycnCi0g
ICAgdGV4dF9mb3JtYXQuUGFyc2UodGV4dCwgbWVzc2FnZSkKLQotICAgIFNMQVNIID0gJ1xcJwot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MGZiJywgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdbMF0p
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChTTEFTSCArICd4ZicgKyBTTEFTSCArICd4NjInLCBtZXNz
YWdlLnJlcGVhdGVkX3N0cmluZ1sxXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKFNMQVNIICsgJ1x4
MGYnICsgU0xBU0ggKyAnYicsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nWzJdKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoU0xBU0ggKyBTTEFTSCArICd4ZicgKyBTTEFTSCArIFNMQVNIICsgJ3g2Mics
Ci0gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZ1szXSkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKFNMQVNIICsgU0xBU0ggKyAnXHgwZicgKyBTTEFTSCArIFNMQVNIICsg
J2InLAotICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdbNF0pCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbChTTEFTSCArICd4MjAnLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmlu
Z1s1XSkKLQotICBkZWYgdGVzdE1lcmdlRHVwbGljYXRlU2NhbGFycyhzZWxmLCBtZXNzYWdlX21v
ZHVsZSk6Ci0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygpCi0gICAg
dGV4dCA9ICgnb3B0aW9uYWxfaW50MzI6IDQyICcKLSAgICAgICAgICAgICdvcHRpb25hbF9pbnQz
MjogNjcnKQotICAgIHIgPSB0ZXh0X2Zvcm1hdC5NZXJnZSh0ZXh0LCBtZXNzYWdlKQotICAgIHNl
bGYuYXNzZXJ0SXMociwgbWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDY3LCBtZXNzYWdl
Lm9wdGlvbmFsX2ludDMyKQotCi0gIGRlZiB0ZXN0TWVyZ2VEdXBsaWNhdGVOZXN0ZWRNZXNzYWdl
U2NhbGFycyhzZWxmLCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbWVzc2FnZSA9IG1lc3NhZ2VfbW9k
dWxlLlRlc3RBbGxUeXBlcygpCi0gICAgdGV4dCA9ICgnb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Ug
eyBiYjogMSB9ICcKLSAgICAgICAgICAgICdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSB7IGJiOiAy
IH0nKQotICAgIHIgPSB0ZXh0X2Zvcm1hdC5NZXJnZSh0ZXh0LCBtZXNzYWdlKQotICAgIHNlbGYu
YXNzZXJ0VHJ1ZShyIGlzIG1lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtZXNzYWdl
Lm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLmJiKQotCi0gIGRlZiB0ZXN0UGFyc2VPbmVvZihzZWxm
LCBtZXNzYWdlX21vZHVsZSk6Ci0gICAgbSA9IG1lc3NhZ2VfbW9kdWxlLlRlc3RBbGxUeXBlcygp
Ci0gICAgbS5vbmVvZl91aW50MzIgPSAxMQotICAgIG0yID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFs
bFR5cGVzKCkKLSAgICB0ZXh0X2Zvcm1hdC5QYXJzZSh0ZXh0X2Zvcm1hdC5NZXNzYWdlVG9TdHJp
bmcobSksIG0yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ29uZW9mX3VpbnQzMicsIG0yLldoaWNo
T25lb2YoJ29uZW9mX2ZpZWxkJykpCi0KLSAgZGVmIHRlc3RQYXJzZU11bHRpcGxlT25lb2Yoc2Vs
ZiwgbWVzc2FnZV9tb2R1bGUpOgotICAgIG1fc3RyaW5nID0gJ1xuJy5qb2luKFsKLSAgICAgICAg
J29uZW9mX3VpbnQzMjogMTEnLAotICAgICAgICAnb25lb2Zfc3RyaW5nOiAiZm9vIiddKQotICAg
IG0yID0gbWVzc2FnZV9tb2R1bGUuVGVzdEFsbFR5cGVzKCkKLSAgICBpZiBtZXNzYWdlX21vZHVs
ZSBpcyB1bml0dGVzdF9wYjI6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAot
ICAgICAgICAgIHRleHRfZm9ybWF0LlBhcnNlRXJyb3IsICcgaXMgc3BlY2lmaWVkIGFsb25nIHdp
dGggZmllbGQgJyk6Ci0gICAgICAgIHRleHRfZm9ybWF0LlBhcnNlKG1fc3RyaW5nLCBtMikKLSAg
ICBlbHNlOgotICAgICAgdGV4dF9mb3JtYXQuUGFyc2UobV9zdHJpbmcsIG0yKQotICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnb25lb2Zfc3RyaW5nJywgbTIuV2hpY2hPbmVvZignb25lb2ZfZmllbGQn
KSkKLQotCi0jIFRoZXNlIGFyZSB0ZXN0cyB0aGF0IGFyZW4ndCBmdW5kYW1lbnRhbGx5IHNwZWNp
ZmljIHRvIHByb3RvMiwgYnV0IGFyZSBhdAotIyB0aGUgbW9tZW50IGJlY2F1c2Ugb2YgZGlmZmVy
ZW5jZXMgYmV0d2VlbiB0aGUgcHJvdG8yIGFuZCBwcm90bzMgdGVzdCBzY2hlbWFzLgotIyBJZGVh
bGx5IHRoZSBzY2hlbWFzIHdvdWxkIGJlIG1hZGUgbW9yZSBzaW1pbGFyIHNvIHRoZXNlIHRlc3Rz
IGNvdWxkIHBhc3MuCi1jbGFzcyBPbmx5V29ya3NXaXRoUHJvdG8yUmlnaHROb3dUZXN0cyhUZXh0
Rm9ybWF0QmFzZSk6Ci0KLSAgZGVmIHRlc3RQcmludEFsbEZpZWxkc1BvaW50eShzZWxmKToKLSAg
ICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgdGVzdF91dGlsLlNl
dEFsbEZpZWxkcyhtZXNzYWdlKQotICAgIHNlbGYuQ29tcGFyZVRvR29sZGVuRmlsZSgKLSAgICAg
ICAgc2VsZi5SZW1vdmVSZWR1bmRhbnRaZXJvcygKLSAgICAgICAgICAgIHRleHRfZm9ybWF0Lk1l
c3NhZ2VUb1N0cmluZyhtZXNzYWdlLCBwb2ludHlfYnJhY2tldHM9VHJ1ZSkpLAotICAgICAgICAn
dGV4dF9mb3JtYXRfdW5pdHRlc3RfZGF0YV9wb2ludHlfb25lb2YudHh0JykKLQotICBkZWYgdGVz
dFBhcnNlR29sZGVuKHNlbGYpOgotICAgIGdvbGRlbl90ZXh0ID0gJ1xuJy5qb2luKHNlbGYuUmVh
ZEdvbGRlbigKLSAgICAgICAgJ3RleHRfZm9ybWF0X3VuaXR0ZXN0X2RhdGFfb25lb2ZfaW1wbGVt
ZW50ZWQudHh0JykpCi0gICAgcGFyc2VkX21lc3NhZ2UgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5
cGVzKCkKLSAgICByID0gdGV4dF9mb3JtYXQuUGFyc2UoZ29sZGVuX3RleHQsIHBhcnNlZF9tZXNz
YWdlKQotICAgIHNlbGYuYXNzZXJ0SXMociwgcGFyc2VkX21lc3NhZ2UpCi0KLSAgICBtZXNzYWdl
ID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgdGVzdF91dGlsLlNldEFsbEZpZWxk
cyhtZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgcGFyc2VkX21lc3NhZ2Up
Ci0KLSAgZGVmIHRlc3RQcmludEFsbEZpZWxkcyhzZWxmKToKLSAgICBtZXNzYWdlID0gdW5pdHRl
c3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgdGVzdF91dGlsLlNldEFsbEZpZWxkcyhtZXNzYWdl
KQotICAgIHNlbGYuQ29tcGFyZVRvR29sZGVuRmlsZSgKLSAgICAgICAgc2VsZi5SZW1vdmVSZWR1
bmRhbnRaZXJvcyh0ZXh0X2Zvcm1hdC5NZXNzYWdlVG9TdHJpbmcobWVzc2FnZSkpLAotICAgICAg
ICAndGV4dF9mb3JtYXRfdW5pdHRlc3RfZGF0YV9vbmVvZl9pbXBsZW1lbnRlZC50eHQnKQotCi0g
IGRlZiB0ZXN0UHJpbnRBbGxGaWVsZHNQb2ludHkoc2VsZik6Ci0gICAgbWVzc2FnZSA9IHVuaXR0
ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHRlc3RfdXRpbC5TZXRBbGxGaWVsZHMobWVzc2Fn
ZSkKLSAgICBzZWxmLkNvbXBhcmVUb0dvbGRlbkZpbGUoCi0gICAgICAgIHNlbGYuUmVtb3ZlUmVk
dW5kYW50WmVyb3MoCi0gICAgICAgICAgICB0ZXh0X2Zvcm1hdC5NZXNzYWdlVG9TdHJpbmcobWVz
c2FnZSwgcG9pbnR5X2JyYWNrZXRzPVRydWUpKSwKLSAgICAgICAgJ3RleHRfZm9ybWF0X3VuaXR0
ZXN0X2RhdGFfcG9pbnR5X29uZW9mLnR4dCcpCi0KLSAgZGVmIHRlc3RQcmludEluSW5kZXhPcmRl
cihzZWxmKToKLSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RGaWVsZE9yZGVyaW5ncygp
Ci0gICAgbWVzc2FnZS5teV9zdHJpbmcgPSAnMTE1JwotICAgIG1lc3NhZ2UubXlfaW50ID0gMTAx
Ci0gICAgbWVzc2FnZS5teV9mbG9hdCA9IDExMQotICAgIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2Uub28gPSAwCi0gICAgbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5iYiA9
IDEKLSAgICBzZWxmLkNvbXBhcmVUb0dvbGRlblRleHQoCi0gICAgICAgIHNlbGYuUmVtb3ZlUmVk
dW5kYW50WmVyb3ModGV4dF9mb3JtYXQuTWVzc2FnZVRvU3RyaW5nKAotICAgICAgICAgICAgbWVz
c2FnZSwgdXNlX2luZGV4X29yZGVyPVRydWUpKSwKLSAgICAgICAgJ215X3N0cmluZzogXCIxMTVc
IlxubXlfaW50OiAxMDFcbm15X2Zsb2F0OiAxMTFcbicKLSAgICAgICAgJ29wdGlvbmFsX25lc3Rl
ZF9tZXNzYWdlIHtcbiAgb286IDBcbiAgYmI6IDFcbn1cbicpCi0gICAgc2VsZi5Db21wYXJlVG9H
b2xkZW5UZXh0KAotICAgICAgICBzZWxmLlJlbW92ZVJlZHVuZGFudFplcm9zKHRleHRfZm9ybWF0
Lk1lc3NhZ2VUb1N0cmluZygKLSAgICAgICAgICAgIG1lc3NhZ2UpKSwKLSAgICAgICAgJ215X2lu
dDogMTAxXG5teV9zdHJpbmc6IFwiMTE1XCJcbm15X2Zsb2F0OiAxMTFcbicKLSAgICAgICAgJ29w
dGlvbmFsX25lc3RlZF9tZXNzYWdlIHtcbiAgYmI6IDFcbiAgb286IDBcbn1cbicpCi0KLSAgZGVm
IHRlc3RNZXJnZUxpbmVzR29sZGVuKHNlbGYpOgotICAgIG9wZW5lZCA9IHNlbGYuUmVhZEdvbGRl
bigndGV4dF9mb3JtYXRfdW5pdHRlc3RfZGF0YV9vbmVvZl9pbXBsZW1lbnRlZC50eHQnKQotICAg
IHBhcnNlZF9tZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgciA9IHRl
eHRfZm9ybWF0Lk1lcmdlTGluZXMob3BlbmVkLCBwYXJzZWRfbWVzc2FnZSkKLSAgICBzZWxmLmFz
c2VydElzKHIsIHBhcnNlZF9tZXNzYWdlKQotCi0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5U
ZXN0QWxsVHlwZXMoKQotICAgIHRlc3RfdXRpbC5TZXRBbGxGaWVsZHMobWVzc2FnZSkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQotCi0gIGRlZiB0ZXN0UGFy
c2VMaW5lc0dvbGRlbihzZWxmKToKLSAgICBvcGVuZWQgPSBzZWxmLlJlYWRHb2xkZW4oJ3RleHRf
Zm9ybWF0X3VuaXR0ZXN0X2RhdGFfb25lb2ZfaW1wbGVtZW50ZWQudHh0JykKLSAgICBwYXJzZWRf
bWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHIgPSB0ZXh0X2Zvcm1h
dC5QYXJzZUxpbmVzKG9wZW5lZCwgcGFyc2VkX21lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRJcyhy
LCBwYXJzZWRfbWVzc2FnZSkKLQotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5
cGVzKCkKLSAgICB0ZXN0X3V0aWwuU2V0QWxsRmllbGRzKG1lc3NhZ2UpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChtZXNzYWdlLCBwYXJzZWRfbWVzc2FnZSkKLQotICBkZWYgdGVzdFByaW50TWFwKHNl
bGYpOgotICAgIG1lc3NhZ2UgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAoKQotCi0gICAgbWVz
c2FnZS5tYXBfaW50MzJfaW50MzJbLTEyM10gPSAtNDU2Ci0gICAgbWVzc2FnZS5tYXBfaW50NjRf
aW50NjRbLTIqKjMzXSA9IC0yKiozNAotICAgIG1lc3NhZ2UubWFwX3VpbnQzMl91aW50MzJbMTIz
XSA9IDQ1NgotICAgIG1lc3NhZ2UubWFwX3VpbnQ2NF91aW50NjRbMioqMzNdID0gMioqMzQKLSAg
ICBtZXNzYWdlLm1hcF9zdHJpbmdfc3RyaW5nWyJhYmMiXSA9ICIxMjMiCi0gICAgbWVzc2FnZS5t
YXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlWzExMV0uYyA9IDUKLQotICAgICMgTWFwcyBhcmUgc2Vy
aWFsaXplZCB0byB0ZXh0IGZvcm1hdCB1c2luZyB0aGVpciB1bmRlcmx5aW5nIHJlcGVhdGVkCi0g
ICAgIyByZXByZXNlbnRhdGlvbi4KLSAgICBzZWxmLkNvbXBhcmVUb0dvbGRlblRleHQoCi0gICAg
ICAgIHRleHRfZm9ybWF0Lk1lc3NhZ2VUb1N0cmluZyhtZXNzYWdlKSwKLSAgICAgICAgJ21hcF9p
bnQzMl9pbnQzMiB7XG4nCi0gICAgICAgICcgIGtleTogLTEyM1xuJwotICAgICAgICAnICB2YWx1
ZTogLTQ1NlxuJwotICAgICAgICAnfVxuJwotICAgICAgICAnbWFwX2ludDY0X2ludDY0IHtcbicK
LSAgICAgICAgJyAga2V5OiAtODU4OTkzNDU5MlxuJwotICAgICAgICAnICB2YWx1ZTogLTE3MTc5
ODY5MTg0XG4nCi0gICAgICAgICd9XG4nCi0gICAgICAgICdtYXBfdWludDMyX3VpbnQzMiB7XG4n
Ci0gICAgICAgICcgIGtleTogMTIzXG4nCi0gICAgICAgICcgIHZhbHVlOiA0NTZcbicKLSAgICAg
ICAgJ31cbicKLSAgICAgICAgJ21hcF91aW50NjRfdWludDY0IHtcbicKLSAgICAgICAgJyAga2V5
OiA4NTg5OTM0NTkyXG4nCi0gICAgICAgICcgIHZhbHVlOiAxNzE3OTg2OTE4NFxuJwotICAgICAg
ICAnfVxuJwotICAgICAgICAnbWFwX3N0cmluZ19zdHJpbmcge1xuJwotICAgICAgICAnICBrZXk6
ICJhYmMiXG4nCi0gICAgICAgICcgIHZhbHVlOiAiMTIzIlxuJwotICAgICAgICAnfVxuJwotICAg
ICAgICAnbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSB7XG4nCi0gICAgICAgICcgIGtleTogMTEx
XG4nCi0gICAgICAgICcgIHZhbHVlIHtcbicKLSAgICAgICAgJyAgICBjOiA1XG4nCi0gICAgICAg
ICcgIH1cbicKLSAgICAgICAgJ31cbicpCi0KLSAgZGVmIHRlc3RNYXBPcmRlckVuZm9yY2VtZW50
KHNlbGYpOgotICAgIG1lc3NhZ2UgPSBtYXBfdW5pdHRlc3RfcGIyLlRlc3RNYXAoKQotICAgIGZv
ciBsZXR0ZXIgaW4gc3RyaW5nLmFzY2lpX3VwcGVyY2FzZVsxMzoyNl06Ci0gICAgICBtZXNzYWdl
Lm1hcF9zdHJpbmdfc3RyaW5nW2xldHRlcl0gPSAnZHVtbXknCi0gICAgZm9yIGxldHRlciBpbiBy
ZXZlcnNlZChzdHJpbmcuYXNjaWlfdXBwZXJjYXNlWzA6MTNdKToKLSAgICAgIG1lc3NhZ2UubWFw
X3N0cmluZ19zdHJpbmdbbGV0dGVyXSA9ICdkdW1teScKLSAgICBnb2xkZW4gPSAnJy5qb2luKCgK
LSAgICAgICAgJ21hcF9zdHJpbmdfc3RyaW5nIHtcbiAga2V5OiAiJWMiXG4gIHZhbHVlOiAiZHVt
bXkiXG59XG4nICUgKGxldHRlciwpCi0gICAgICAgIGZvciBsZXR0ZXIgaW4gc3RyaW5nLmFzY2lp
X3VwcGVyY2FzZSkpCi0gICAgc2VsZi5Db21wYXJlVG9Hb2xkZW5UZXh0KHRleHRfZm9ybWF0Lk1l
c3NhZ2VUb1N0cmluZyhtZXNzYWdlKSwgZ29sZGVuKQotCi0gIGRlZiB0ZXN0TWFwT3JkZXJTZW1h
bnRpY3Moc2VsZik6Ci0gICAgZ29sZGVuX2xpbmVzID0gc2VsZi5SZWFkR29sZGVuKCdtYXBfdGVz
dF9kYXRhLnR4dCcpCi0gICAgIyBUaGUgQysrIGltcGxlbWVudGF0aW9uIGVtaXRzIGRlZmF1bHRl
ZC12YWx1ZSBmaWVsZHMsIHdoaWxlIHRoZSBQeXRob24KLSAgICAjIGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90LiAgQWRqdXN0aW5nIGZvciB0aGlzIGlzIGF3a3dhcmQsIGJ1dCBpdCBpcwotICAgICMg
dmFsdWFibGUgdG8gdGVzdCBhZ2FpbnN0IGEgY29tbW9uIGdvbGRlbiBmaWxlLgotICAgIGxpbmVf
YmxhY2tsaXN0ID0gKCcgIGtleTogMFxuJywKLSAgICAgICAgICAgICAgICAgICAgICAnICB2YWx1
ZTogMFxuJywKLSAgICAgICAgICAgICAgICAgICAgICAnICBrZXk6IGZhbHNlXG4nLAotICAgICAg
ICAgICAgICAgICAgICAgICcgIHZhbHVlOiBmYWxzZVxuJykKLSAgICBnb2xkZW5fbGluZXMgPSBb
bGluZSBmb3IgbGluZSBpbiBnb2xkZW5fbGluZXMgaWYgbGluZSBub3QgaW4gbGluZV9ibGFja2xp
c3RdCi0KLSAgICBtZXNzYWdlID0gbWFwX3VuaXR0ZXN0X3BiMi5UZXN0TWFwKCkKLSAgICB0ZXh0
X2Zvcm1hdC5QYXJzZUxpbmVzKGdvbGRlbl9saW5lcywgbWVzc2FnZSkKLSAgICBjYW5kaWRhdGUg
PSB0ZXh0X2Zvcm1hdC5NZXNzYWdlVG9TdHJpbmcobWVzc2FnZSkKLSAgICAjIFRoZSBQeXRob24g
aW1wbGVtZW50YXRpb24gZW1pdHMgIjEuMCIgZm9yIHRoZSBkb3VibGUgdmFsdWUgdGhhdCB0aGUg
QysrCi0gICAgIyBpbXBsZW1lbnRhdGlvbiBlbWl0cyBhcyAiMSIuCi0gICAgY2FuZGlkYXRlID0g
Y2FuZGlkYXRlLnJlcGxhY2UoJzEuMCcsICcxJywgMikKLSAgICBzZWxmLmFzc2VydE11bHRpTGlu
ZUVxdWFsKGNhbmRpZGF0ZSwgJycuam9pbihnb2xkZW5fbGluZXMpKQotCi0KLSMgVGVzdHMgb2Yg
cHJvdG8yLW9ubHkgZmVhdHVyZXMgKE1lc3NhZ2VTZXQsIGV4dGVuc2lvbnMsIGV0Yy4pLgotY2xh
c3MgUHJvdG8yVGVzdHMoVGV4dEZvcm1hdEJhc2UpOgotCi0gIGRlZiB0ZXN0UHJpbnRNZXNzYWdl
U2V0KHNlbGYpOgotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9tc2V0X3BiMi5UZXN0TWVzc2FnZVNl
dENvbnRhaW5lcigpCi0gICAgZXh0MSA9IHVuaXR0ZXN0X21zZXRfcGIyLlRlc3RNZXNzYWdlU2V0
RXh0ZW5zaW9uMS5tZXNzYWdlX3NldF9leHRlbnNpb24KLSAgICBleHQyID0gdW5pdHRlc3RfbXNl
dF9wYjIuVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yLm1lc3NhZ2Vfc2V0X2V4dGVuc2lvbgotICAg
IG1lc3NhZ2UubWVzc2FnZV9zZXQuRXh0ZW5zaW9uc1tleHQxXS5pID0gMjMKLSAgICBtZXNzYWdl
Lm1lc3NhZ2Vfc2V0LkV4dGVuc2lvbnNbZXh0Ml0uc3RyID0gJ2ZvbycKLSAgICBzZWxmLkNvbXBh
cmVUb0dvbGRlblRleHQoCi0gICAgICAgIHRleHRfZm9ybWF0Lk1lc3NhZ2VUb1N0cmluZyhtZXNz
YWdlKSwKLSAgICAgICAgJ21lc3NhZ2Vfc2V0IHtcbicKLSAgICAgICAgJyAgW3Byb3RvYnVmX3Vu
aXR0ZXN0LlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMV0ge1xuJwotICAgICAgICAnICAgIGk6IDIz
XG4nCi0gICAgICAgICcgIH1cbicKLSAgICAgICAgJyAgW3Byb3RvYnVmX3VuaXR0ZXN0LlRlc3RN
ZXNzYWdlU2V0RXh0ZW5zaW9uMl0ge1xuJwotICAgICAgICAnICAgIHN0cjogXCJmb29cIlxuJwot
ICAgICAgICAnICB9XG4nCi0gICAgICAgICd9XG4nKQotCi0gICAgbWVzc2FnZSA9IG1lc3NhZ2Vf
c2V0X2V4dGVuc2lvbnNfcGIyLlRlc3RNZXNzYWdlU2V0KCkKLSAgICBleHQgPSBtZXNzYWdlX3Nl
dF9leHRlbnNpb25zX3BiMi5tZXNzYWdlX3NldF9leHRlbnNpb24zCi0gICAgbWVzc2FnZS5FeHRl
bnNpb25zW2V4dF0udGV4dCA9ICdiYXInCi0gICAgc2VsZi5Db21wYXJlVG9Hb2xkZW5UZXh0KAot
ICAgICAgICB0ZXh0X2Zvcm1hdC5NZXNzYWdlVG9TdHJpbmcobWVzc2FnZSksCi0gICAgICAgICdb
Z29vZ2xlLnByb3RvYnVmLmludGVybmFsLlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uM10ge1xuJwot
ICAgICAgICAnICB0ZXh0OiBcImJhclwiXG4nCi0gICAgICAgICd9XG4nKQotCi0gIGRlZiB0ZXN0
UHJpbnRNZXNzYWdlU2V0QnlGaWVsZE51bWJlcihzZWxmKToKLSAgICBvdXQgPSB0ZXh0X2Zvcm1h
dC5UZXh0V3JpdGVyKEZhbHNlKQotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9tc2V0X3BiMi5UZXN0
TWVzc2FnZVNldENvbnRhaW5lcigpCi0gICAgZXh0MSA9IHVuaXR0ZXN0X21zZXRfcGIyLlRlc3RN
ZXNzYWdlU2V0RXh0ZW5zaW9uMS5tZXNzYWdlX3NldF9leHRlbnNpb24KLSAgICBleHQyID0gdW5p
dHRlc3RfbXNldF9wYjIuVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yLm1lc3NhZ2Vfc2V0X2V4dGVu
c2lvbgotICAgIG1lc3NhZ2UubWVzc2FnZV9zZXQuRXh0ZW5zaW9uc1tleHQxXS5pID0gMjMKLSAg
ICBtZXNzYWdlLm1lc3NhZ2Vfc2V0LkV4dGVuc2lvbnNbZXh0Ml0uc3RyID0gJ2ZvbycKLSAgICB0
ZXh0X2Zvcm1hdC5QcmludE1lc3NhZ2UobWVzc2FnZSwgb3V0LCB1c2VfZmllbGRfbnVtYmVyPVRy
dWUpCi0gICAgc2VsZi5Db21wYXJlVG9Hb2xkZW5UZXh0KAotICAgICAgICBvdXQuZ2V0dmFsdWUo
KSwKLSAgICAgICAgJzEge1xuJwotICAgICAgICAnICAxNTQ1MDA4IHtcbicKLSAgICAgICAgJyAg
ICAxNTogMjNcbicKLSAgICAgICAgJyAgfVxuJwotICAgICAgICAnICAxNTQ3NzY5IHtcbicKLSAg
ICAgICAgJyAgICAyNTogXCJmb29cIlxuJwotICAgICAgICAnICB9XG4nCi0gICAgICAgICd9XG4n
KQotICAgIG91dC5jbG9zZSgpCi0KLSAgZGVmIHRlc3RQcmludE1lc3NhZ2VTZXRBc09uZUxpbmUo
c2VsZik6Ci0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X21zZXRfcGIyLlRlc3RNZXNzYWdlU2V0Q29u
dGFpbmVyKCkKLSAgICBleHQxID0gdW5pdHRlc3RfbXNldF9wYjIuVGVzdE1lc3NhZ2VTZXRFeHRl
bnNpb24xLm1lc3NhZ2Vfc2V0X2V4dGVuc2lvbgotICAgIGV4dDIgPSB1bml0dGVzdF9tc2V0X3Bi
Mi5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjIubWVzc2FnZV9zZXRfZXh0ZW5zaW9uCi0gICAgbWVz
c2FnZS5tZXNzYWdlX3NldC5FeHRlbnNpb25zW2V4dDFdLmkgPSAyMwotICAgIG1lc3NhZ2UubWVz
c2FnZV9zZXQuRXh0ZW5zaW9uc1tleHQyXS5zdHIgPSAnZm9vJwotICAgIHNlbGYuQ29tcGFyZVRv
R29sZGVuVGV4dCgKLSAgICAgICAgdGV4dF9mb3JtYXQuTWVzc2FnZVRvU3RyaW5nKG1lc3NhZ2Us
IGFzX29uZV9saW5lPVRydWUpLAotICAgICAgICAnbWVzc2FnZV9zZXQgeycKLSAgICAgICAgJyBb
cHJvdG9idWZfdW5pdHRlc3QuVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xXSB7JwotICAgICAgICAn
IGk6IDIzJwotICAgICAgICAnIH0nCi0gICAgICAgICcgW3Byb3RvYnVmX3VuaXR0ZXN0LlRlc3RN
ZXNzYWdlU2V0RXh0ZW5zaW9uMl0geycKLSAgICAgICAgJyBzdHI6IFwiZm9vXCInCi0gICAgICAg
ICcgfScKLSAgICAgICAgJyB9JykKLQotICBkZWYgdGVzdFBhcnNlTWVzc2FnZVNldChzZWxmKToK
LSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgdGV4dCA9ICgn
cmVwZWF0ZWRfdWludDY0OiAxXG4nCi0gICAgICAgICAgICAncmVwZWF0ZWRfdWludDY0OiAyXG4n
KQotICAgIHRleHRfZm9ybWF0LlBhcnNlKHRleHQsIG1lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCgxLCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQ2NFswXSkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDIsIG1lc3NhZ2UucmVwZWF0ZWRfdWludDY0WzFdKQotCi0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0
X21zZXRfcGIyLlRlc3RNZXNzYWdlU2V0Q29udGFpbmVyKCkKLSAgICB0ZXh0ID0gKCdtZXNzYWdl
X3NldCB7XG4nCi0gICAgICAgICAgICAnICBbcHJvdG9idWZfdW5pdHRlc3QuVGVzdE1lc3NhZ2VT
ZXRFeHRlbnNpb24xXSB7XG4nCi0gICAgICAgICAgICAnICAgIGk6IDIzXG4nCi0gICAgICAgICAg
ICAnICB9XG4nCi0gICAgICAgICAgICAnICBbcHJvdG9idWZfdW5pdHRlc3QuVGVzdE1lc3NhZ2VT
ZXRFeHRlbnNpb24yXSB7XG4nCi0gICAgICAgICAgICAnICAgIHN0cjogXCJmb29cIlxuJwotICAg
ICAgICAgICAgJyAgfVxuJwotICAgICAgICAgICAgJ31cbicpCi0gICAgdGV4dF9mb3JtYXQuUGFy
c2UodGV4dCwgbWVzc2FnZSkKLSAgICBleHQxID0gdW5pdHRlc3RfbXNldF9wYjIuVGVzdE1lc3Nh
Z2VTZXRFeHRlbnNpb24xLm1lc3NhZ2Vfc2V0X2V4dGVuc2lvbgotICAgIGV4dDIgPSB1bml0dGVz
dF9tc2V0X3BiMi5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjIubWVzc2FnZV9zZXRfZXh0ZW5zaW9u
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgyMywgbWVzc2FnZS5tZXNzYWdlX3NldC5FeHRlbnNpb25z
W2V4dDFdLmkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vJywgbWVzc2FnZS5tZXNzYWdlX3Nl
dC5FeHRlbnNpb25zW2V4dDJdLnN0cikKLQotICBkZWYgdGVzdFBhcnNlTWVzc2FnZUJ5RmllbGRO
dW1iZXIoc2VsZik6Ci0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQot
ICAgIHRleHQgPSAoJzM0OiAxXG4nCi0gICAgICAgICAgICAncmVwZWF0ZWRfdWludDY0OiAyXG4n
KQotICAgIHRleHRfZm9ybWF0LlBhcnNlKHRleHQsIG1lc3NhZ2UsIGFsbG93X2ZpZWxkX251bWJl
cj1UcnVlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbWVzc2FnZS5yZXBlYXRlZF91aW50NjRb
MF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQ2NFsxXSkK
LQotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9tc2V0X3BiMi5UZXN0TWVzc2FnZVNldENvbnRhaW5l
cigpCi0gICAgdGV4dCA9ICgnMSB7XG4nCi0gICAgICAgICAgICAnICAxNTQ1MDA4IHtcbicKLSAg
ICAgICAgICAgICcgICAgMTU6IDIzXG4nCi0gICAgICAgICAgICAnICB9XG4nCi0gICAgICAgICAg
ICAnICAxNTQ3NzY5IHtcbicKLSAgICAgICAgICAgICcgICAgMjU6IFwiZm9vXCJcbicKLSAgICAg
ICAgICAgICcgIH1cbicKLSAgICAgICAgICAgICd9XG4nKQotICAgIHRleHRfZm9ybWF0LlBhcnNl
KHRleHQsIG1lc3NhZ2UsIGFsbG93X2ZpZWxkX251bWJlcj1UcnVlKQotICAgIGV4dDEgPSB1bml0
dGVzdF9tc2V0X3BiMi5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEubWVzc2FnZV9zZXRfZXh0ZW5z
aW9uCi0gICAgZXh0MiA9IHVuaXR0ZXN0X21zZXRfcGIyLlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9u
Mi5tZXNzYWdlX3NldF9leHRlbnNpb24KLSAgICBzZWxmLmFzc2VydEVxdWFsKDIzLCBtZXNzYWdl
Lm1lc3NhZ2Vfc2V0LkV4dGVuc2lvbnNbZXh0MV0uaSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdm
b28nLCBtZXNzYWdlLm1lc3NhZ2Vfc2V0LkV4dGVuc2lvbnNbZXh0Ml0uc3RyKQotCi0gICAgIyBD
YW4ndCBwYXJzZSBmaWVsZCBudW1iZXIgd2l0aG91dCBzZXQgYWxsb3dfZmllbGRfbnVtYmVyPVRy
dWUuCi0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIHRleHQg
PSAnMzQ6MVxuJwotICAgIHNpeC5hc3NlcnRSYWlzZXNSZWdleCgKLSAgICAgICAgc2VsZiwKLSAg
ICAgICAgdGV4dF9mb3JtYXQuUGFyc2VFcnJvciwKLSAgICAgICAgKHInMToxIDogTWVzc2FnZSB0
eXBlICJcdysuVGVzdEFsbFR5cGVzIiBoYXMgbm8gZmllbGQgbmFtZWQgJwotICAgICAgICAgcici
MzQiLicpLAotICAgICAgICB0ZXh0X2Zvcm1hdC5QYXJzZSwgdGV4dCwgbWVzc2FnZSkKLQotICAg
ICMgQ2FuJ3QgcGFyc2UgaWYgZmllbGQgbnVtYmVyIGlzIG5vdCBmb3VuZC4KLSAgICB0ZXh0ID0g
JzEyMzQ6MVxuJwotICAgIHNpeC5hc3NlcnRSYWlzZXNSZWdleCgKLSAgICAgICAgc2VsZiwKLSAg
ICAgICAgdGV4dF9mb3JtYXQuUGFyc2VFcnJvciwKLSAgICAgICAgKHInMToxIDogTWVzc2FnZSB0
eXBlICJcdysuVGVzdEFsbFR5cGVzIiBoYXMgbm8gZmllbGQgbmFtZWQgJwotICAgICAgICAgcici
MTIzNCIuJyksCi0gICAgICAgIHRleHRfZm9ybWF0LlBhcnNlLCB0ZXh0LCBtZXNzYWdlLCBhbGxv
d19maWVsZF9udW1iZXI9VHJ1ZSkKLQotICBkZWYgdGVzdFByaW50QWxsRXh0ZW5zaW9ucyhzZWxm
KToKLSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICB0
ZXN0X3V0aWwuU2V0QWxsRXh0ZW5zaW9ucyhtZXNzYWdlKQotICAgIHNlbGYuQ29tcGFyZVRvR29s
ZGVuRmlsZSgKLSAgICAgICAgc2VsZi5SZW1vdmVSZWR1bmRhbnRaZXJvcyh0ZXh0X2Zvcm1hdC5N
ZXNzYWdlVG9TdHJpbmcobWVzc2FnZSkpLAotICAgICAgICAndGV4dF9mb3JtYXRfdW5pdHRlc3Rf
ZXh0ZW5zaW9uc19kYXRhLnR4dCcpCi0KLSAgZGVmIHRlc3RQcmludEFsbEV4dGVuc2lvbnNQb2lu
dHkoc2VsZik6Ci0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucygp
Ci0gICAgdGVzdF91dGlsLlNldEFsbEV4dGVuc2lvbnMobWVzc2FnZSkKLSAgICBzZWxmLkNvbXBh
cmVUb0dvbGRlbkZpbGUoCi0gICAgICAgIHNlbGYuUmVtb3ZlUmVkdW5kYW50WmVyb3ModGV4dF9m
b3JtYXQuTWVzc2FnZVRvU3RyaW5nKAotICAgICAgICAgICAgbWVzc2FnZSwgcG9pbnR5X2JyYWNr
ZXRzPVRydWUpKSwKLSAgICAgICAgJ3RleHRfZm9ybWF0X3VuaXR0ZXN0X2V4dGVuc2lvbnNfZGF0
YV9wb2ludHkudHh0JykKLQotICBkZWYgdGVzdFBhcnNlR29sZGVuRXh0ZW5zaW9ucyhzZWxmKToK
LSAgICBnb2xkZW5fdGV4dCA9ICdcbicuam9pbihzZWxmLlJlYWRHb2xkZW4oCi0gICAgICAgICd0
ZXh0X2Zvcm1hdF91bml0dGVzdF9leHRlbnNpb25zX2RhdGEudHh0JykpCi0gICAgcGFyc2VkX21l
c3NhZ2UgPSB1bml0dGVzdF9wYjIuVGVzdEFsbEV4dGVuc2lvbnMoKQotICAgIHRleHRfZm9ybWF0
LlBhcnNlKGdvbGRlbl90ZXh0LCBwYXJzZWRfbWVzc2FnZSkKLQotICAgIG1lc3NhZ2UgPSB1bml0
dGVzdF9wYjIuVGVzdEFsbEV4dGVuc2lvbnMoKQotICAgIHRlc3RfdXRpbC5TZXRBbGxFeHRlbnNp
b25zKG1lc3NhZ2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCBwYXJzZWRfbWVzc2Fn
ZSkKLQotICBkZWYgdGVzdFBhcnNlQWxsRXh0ZW5zaW9ucyhzZWxmKToKLSAgICBtZXNzYWdlID0g
dW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICB0ZXN0X3V0aWwuU2V0QWxsRXh0
ZW5zaW9ucyhtZXNzYWdlKQotICAgIGFzY2lpX3RleHQgPSB0ZXh0X2Zvcm1hdC5NZXNzYWdlVG9T
dHJpbmcobWVzc2FnZSkKLQotICAgIHBhcnNlZF9tZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RB
bGxFeHRlbnNpb25zKCkKLSAgICB0ZXh0X2Zvcm1hdC5QYXJzZShhc2NpaV90ZXh0LCBwYXJzZWRf
bWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQot
Ci0gIGRlZiB0ZXN0UGFyc2VBbGxvd2VkVW5rbm93bkV4dGVuc2lvbihzZWxmKToKLSAgICAjIFNr
aXAgb3ZlciB1bmtub3duIGV4dGVuc2lvbiBjb3JyZWN0bHkuCi0gICAgbWVzc2FnZSA9IHVuaXR0
ZXN0X21zZXRfcGIyLlRlc3RNZXNzYWdlU2V0Q29udGFpbmVyKCkKLSAgICB0ZXh0ID0gKCdtZXNz
YWdlX3NldCB7XG4nCi0gICAgICAgICAgICAnICBbdW5rbm93bl9leHRlbnNpb25dIHtcbicKLSAg
ICAgICAgICAgICcgICAgaTogMjNcbicKLSAgICAgICAgICAgICcgICAgYmluOiAiXHhlMCInCi0g
ICAgICAgICAgICAnICAgIFtuZXN0ZWRfdW5rbm93bl9leHRdOiB7XG4nCi0gICAgICAgICAgICAn
ICAgICAgaTogMjNcbicKLSAgICAgICAgICAgICcgICAgICB0ZXN0OiAidGVzdF9zdHJpbmciXG4n
Ci0gICAgICAgICAgICAnICAgICAgZmxvYXR5X2Zsb2F0OiAtMC4zMTVcbicKLSAgICAgICAgICAg
ICcgICAgICBudW06IC1pbmZcbicKLSAgICAgICAgICAgICcgICAgICBtdWx0aWxpbmVfc3RyOiAi
YWJjIlxuJwotICAgICAgICAgICAgJyAgICAgICAgICAiZGVmIlxuJwotICAgICAgICAgICAgJyAg
ICAgICAgICAieHl6LiJcbicKLSAgICAgICAgICAgICcgICAgICBbbmVzdGVkX3Vua25vd25fZXh0
XTogPFxuJwotICAgICAgICAgICAgJyAgICAgICAgaTogMjNcbicKLSAgICAgICAgICAgICcgICAg
ICAgIGk6IDI0XG4nCi0gICAgICAgICAgICAnICAgICAgICBwb2ludGZsb2F0OiAuM1xuJwotICAg
ICAgICAgICAgJyAgICAgICAgdGVzdDogInRlc3Rfc3RyaW5nIlxuJwotICAgICAgICAgICAgJyAg
ICAgICAgZmxvYXR5X2Zsb2F0OiAtMC4zMTVcbicKLSAgICAgICAgICAgICcgICAgICAgIG51bTog
LWluZlxuJwotICAgICAgICAgICAgJyAgICAgICAgbG9uZ19zdHJpbmc6ICJ0ZXN0IiAidGVzdDIi
IFxuJwotICAgICAgICAgICAgJyAgICAgID5cbicKLSAgICAgICAgICAgICcgICAgfVxuJwotICAg
ICAgICAgICAgJyAgfVxuJwotICAgICAgICAgICAgJyAgW3Vua25vd25fZXh0ZW5zaW9uXTogNVxu
JwotICAgICAgICAgICAgJ31cbicpCi0gICAgdGV4dF9mb3JtYXQuUGFyc2UodGV4dCwgbWVzc2Fn
ZSwgYWxsb3dfdW5rbm93bl9leHRlbnNpb249VHJ1ZSkKLSAgICBnb2xkZW4gPSAnbWVzc2FnZV9z
ZXQge1xufVxuJwotICAgIHNlbGYuQ29tcGFyZVRvR29sZGVuVGV4dCh0ZXh0X2Zvcm1hdC5NZXNz
YWdlVG9TdHJpbmcobWVzc2FnZSksIGdvbGRlbikKLQotICAgICMgQ2F0Y2ggcGFyc2UgZXJyb3Jz
IGluIHVua25vd24gZXh0ZW5zaW9uLgotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9tc2V0X3BiMi5U
ZXN0TWVzc2FnZVNldENvbnRhaW5lcigpCi0gICAgbWFsZm9ybWVkID0gKCdtZXNzYWdlX3NldCB7
XG4nCi0gICAgICAgICAgICAgICAgICcgIFt1bmtub3duX2V4dGVuc2lvbl0ge1xuJwotICAgICAg
ICAgICAgICAgICAnICAgIGk6XG4nICAjIE1pc3NpbmcgdmFsdWUuCi0gICAgICAgICAgICAgICAg
ICcgIH1cbicKLSAgICAgICAgICAgICAgICAgJ31cbicpCi0gICAgc2l4LmFzc2VydFJhaXNlc1Jl
Z2V4KHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfZm9ybWF0LlBhcnNlRXJy
b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdJbnZhbGlkIGZpZWxkIHZhbHVlOiB9JywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9mb3JtYXQuUGFyc2UsIG1hbGZvcm1lZCwg
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfdW5rbm93bl9leHRlbnNp
b249VHJ1ZSkKLQotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9tc2V0X3BiMi5UZXN0TWVzc2FnZVNl
dENvbnRhaW5lcigpCi0gICAgbWFsZm9ybWVkID0gKCdtZXNzYWdlX3NldCB7XG4nCi0gICAgICAg
ICAgICAgICAgICcgIFt1bmtub3duX2V4dGVuc2lvbl0ge1xuJwotICAgICAgICAgICAgICAgICAn
ICAgIHN0cjogIm1hbGZvcm1lZCBzdHJpbmdcbicgICMgTWlzc2luZyBjbG9zaW5nIHF1b3RlLgot
ICAgICAgICAgICAgICAgICAnICB9XG4nCi0gICAgICAgICAgICAgICAgICd9XG4nKQotICAgIHNp
eC5hc3NlcnRSYWlzZXNSZWdleChzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
X2Zvcm1hdC5QYXJzZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBm
aWVsZCB2YWx1ZTogIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfZm9ybWF0LlBh
cnNlLCBtYWxmb3JtZWQsIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93
X3Vua25vd25fZXh0ZW5zaW9uPVRydWUpCi0KLSAgICBtZXNzYWdlID0gdW5pdHRlc3RfbXNldF9w
YjIuVGVzdE1lc3NhZ2VTZXRDb250YWluZXIoKQotICAgIG1hbGZvcm1lZCA9ICgnbWVzc2FnZV9z
ZXQge1xuJwotICAgICAgICAgICAgICAgICAnICBbdW5rbm93bl9leHRlbnNpb25dIHtcbicKLSAg
ICAgICAgICAgICAgICAgJyAgICBzdHI6ICJtYWxmb3JtZWRcbiBtdWx0aWxpbmVcbiBzdHJpbmdc
bicKLSAgICAgICAgICAgICAgICAgJyAgfVxuJwotICAgICAgICAgICAgICAgICAnfVxuJykKLSAg
ICBzaXguYXNzZXJ0UmFpc2VzUmVnZXgoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dF9mb3JtYXQuUGFyc2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludmFs
aWQgZmllbGQgdmFsdWU6ICInLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2Zvcm1h
dC5QYXJzZSwgbWFsZm9ybWVkLCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBh
bGxvd191bmtub3duX2V4dGVuc2lvbj1UcnVlKQotCi0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X21z
ZXRfcGIyLlRlc3RNZXNzYWdlU2V0Q29udGFpbmVyKCkKLSAgICBtYWxmb3JtZWQgPSAoJ21lc3Nh
Z2Vfc2V0IHtcbicKLSAgICAgICAgICAgICAgICAgJyAgW21hbGZvcm1lZF9leHRlbnNpb25dIDxc
bicKLSAgICAgICAgICAgICAgICAgJyAgICBpOiAtNVxuJwotICAgICAgICAgICAgICAgICAnICBc
bicgICMgTWlzc2luZyAnPicgaGVyZS4KLSAgICAgICAgICAgICAgICAgJ31cbicpCi0gICAgc2l4
LmFzc2VydFJhaXNlc1JlZ2V4KHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRf
Zm9ybWF0LlBhcnNlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICc1OjEgOiBFeHBl
Y3RlZCAiPiIuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9mb3JtYXQuUGFyc2Us
IG1hbGZvcm1lZCwgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfdW5r
bm93bl9leHRlbnNpb249VHJ1ZSkKLQotICAgICMgRG9uJ3QgYWxsb3cgdW5rbm93biBmaWVsZHMg
d2l0aCBhbGxvd191bmtub3duX2V4dGVuc2lvbj1UcnVlLgotICAgIG1lc3NhZ2UgPSB1bml0dGVz
dF9tc2V0X3BiMi5UZXN0TWVzc2FnZVNldENvbnRhaW5lcigpCi0gICAgbWFsZm9ybWVkID0gKCdt
ZXNzYWdlX3NldCB7XG4nCi0gICAgICAgICAgICAgICAgICcgIHVua25vd25fZmllbGQ6IHRydWVc
bicKLSAgICAgICAgICAgICAgICAgJyAgXG4nICAjIE1pc3NpbmcgJz4nIGhlcmUuCi0gICAgICAg
ICAgICAgICAgICd9XG4nKQotICAgIHNpeC5hc3NlcnRSYWlzZXNSZWdleChzZWxmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0X2Zvcm1hdC5QYXJzZUVycm9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAoJzI6MyA6IE1lc3NhZ2UgdHlwZSAnCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAnInByb3RvMl93aXJlZm9ybWF0X3VuaXR0ZXN0LlRlc3RNZXNzYWdlU2V0IiBoYXMg
bm8nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZpZWxkIG5hbWVkICJ1bmtub3duX2Zp
ZWxkIi4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9mb3JtYXQuUGFyc2UsIG1h
bGZvcm1lZCwgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfdW5rbm93
bl9leHRlbnNpb249VHJ1ZSkKLQotICAgICMgUGFyc2Uga25vd24gZXh0ZW5zaW9uIGNvcnJlY3R5
LgotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9tc2V0X3BiMi5UZXN0TWVzc2FnZVNldENvbnRhaW5l
cigpCi0gICAgdGV4dCA9ICgnbWVzc2FnZV9zZXQge1xuJwotICAgICAgICAgICAgJyAgW3Byb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMV0ge1xuJwotICAgICAgICAgICAg
JyAgICBpOiAyM1xuJwotICAgICAgICAgICAgJyAgfVxuJwotICAgICAgICAgICAgJyAgW3Byb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMl0ge1xuJwotICAgICAgICAgICAg
JyAgICBzdHI6IFwiZm9vXCJcbicKLSAgICAgICAgICAgICcgIH1cbicKLSAgICAgICAgICAgICd9
XG4nKQotICAgIHRleHRfZm9ybWF0LlBhcnNlKHRleHQsIG1lc3NhZ2UsIGFsbG93X3Vua25vd25f
ZXh0ZW5zaW9uPVRydWUpCi0gICAgZXh0MSA9IHVuaXR0ZXN0X21zZXRfcGIyLlRlc3RNZXNzYWdl
U2V0RXh0ZW5zaW9uMS5tZXNzYWdlX3NldF9leHRlbnNpb24KLSAgICBleHQyID0gdW5pdHRlc3Rf
bXNldF9wYjIuVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yLm1lc3NhZ2Vfc2V0X2V4dGVuc2lvbgot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjMsIG1lc3NhZ2UubWVzc2FnZV9zZXQuRXh0ZW5zaW9uc1tl
eHQxXS5pKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZvbycsIG1lc3NhZ2UubWVzc2FnZV9zZXQu
RXh0ZW5zaW9uc1tleHQyXS5zdHIpCi0KLSAgZGVmIHRlc3RQYXJzZUJhZEV4dGVuc2lvbihzZWxm
KToKLSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICB0
ZXh0ID0gJ1t1bmtub3duX2V4dGVuc2lvbl06IDhcbicKLSAgICBzaXguYXNzZXJ0UmFpc2VzUmVn
ZXgoc2VsZiwKLSAgICAgICAgdGV4dF9mb3JtYXQuUGFyc2VFcnJvciwKLSAgICAgICAgJzE6MiA6
IEV4dGVuc2lvbiAidW5rbm93bl9leHRlbnNpb24iIG5vdCByZWdpc3RlcmVkLicsCi0gICAgICAg
IHRleHRfZm9ybWF0LlBhcnNlLCB0ZXh0LCBtZXNzYWdlKQotICAgIG1lc3NhZ2UgPSB1bml0dGVz
dF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzaXguYXNzZXJ0UmFpc2VzUmVnZXgoc2VsZiwKLSAg
ICAgICAgdGV4dF9mb3JtYXQuUGFyc2VFcnJvciwKLSAgICAgICAgKCcxOjIgOiBNZXNzYWdlIHR5
cGUgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcyIgZG9lcyBub3QgaGF2ZSAnCi0gICAg
ICAgICAnZXh0ZW5zaW9ucy4nKSwKLSAgICAgICAgdGV4dF9mb3JtYXQuUGFyc2UsIHRleHQsIG1l
c3NhZ2UpCi0KLSAgZGVmIHRlc3RNZXJnZUR1cGxpY2F0ZUV4dGVuc2lvblNjYWxhcnMoc2VsZik6
Ci0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsRXh0ZW5zaW9ucygpCi0gICAgdGV4
dCA9ICgnW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbl06IDQyICcK
LSAgICAgICAgICAgICdbcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9u
XTogNjcnKQotICAgIHRleHRfZm9ybWF0Lk1lcmdlKHRleHQsIG1lc3NhZ2UpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbCgKLSAgICAgICAgNjcsCi0gICAgICAgIG1lc3NhZ2UuRXh0ZW5zaW9uc1t1bml0
dGVzdF9wYjIub3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uXSkKLQotICBkZWYgdGVzdFBhcnNlRHVw
bGljYXRlRXh0ZW5zaW9uU2NhbGFycyhzZWxmKToKLSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIy
LlRlc3RBbGxFeHRlbnNpb25zKCkKLSAgICB0ZXh0ID0gKCdbcHJvdG9idWZfdW5pdHRlc3Qub3B0
aW9uYWxfaW50MzJfZXh0ZW5zaW9uXTogNDIgJwotICAgICAgICAgICAgJ1twcm90b2J1Zl91bml0
dGVzdC5vcHRpb25hbF9pbnQzMl9leHRlbnNpb25dOiA2NycpCi0gICAgc2l4LmFzc2VydFJhaXNl
c1JlZ2V4KHNlbGYsCi0gICAgICAgIHRleHRfZm9ybWF0LlBhcnNlRXJyb3IsCi0gICAgICAgICgn
MTo5NiA6IE1lc3NhZ2UgdHlwZSAicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMi
ICcKLSAgICAgICAgICdzaG91bGQgbm90IGhhdmUgbXVsdGlwbGUgJwotICAgICAgICAgJyJwcm90
b2J1Zl91bml0dGVzdC5vcHRpb25hbF9pbnQzMl9leHRlbnNpb24iIGV4dGVuc2lvbnMuJyksCi0g
ICAgICAgIHRleHRfZm9ybWF0LlBhcnNlLCB0ZXh0LCBtZXNzYWdlKQotCi0gIGRlZiB0ZXN0UGFy
c2VEdXBsaWNhdGVOZXN0ZWRNZXNzYWdlU2NhbGFycyhzZWxmKToKLSAgICBtZXNzYWdlID0gdW5p
dHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgdGV4dCA9ICgnb3B0aW9uYWxfbmVzdGVkX21l
c3NhZ2UgeyBiYjogMSB9ICcKLSAgICAgICAgICAgICdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSB7
IGJiOiAyIH0nKQotICAgIHNpeC5hc3NlcnRSYWlzZXNSZWdleChzZWxmLAotICAgICAgICB0ZXh0
X2Zvcm1hdC5QYXJzZUVycm9yLAotICAgICAgICAoJzE6NjUgOiBNZXNzYWdlIHR5cGUgInByb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlIiAnCi0gICAgICAgICAnc2hv
dWxkIG5vdCBoYXZlIG11bHRpcGxlICJiYiIgZmllbGRzLicpLAotICAgICAgICB0ZXh0X2Zvcm1h
dC5QYXJzZSwgdGV4dCwgbWVzc2FnZSkKLQotICBkZWYgdGVzdFBhcnNlRHVwbGljYXRlU2NhbGFy
cyhzZWxmKToKLSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAg
dGV4dCA9ICgnb3B0aW9uYWxfaW50MzI6IDQyICcKLSAgICAgICAgICAgICdvcHRpb25hbF9pbnQz
MjogNjcnKQotICAgIHNpeC5hc3NlcnRSYWlzZXNSZWdleChzZWxmLAotICAgICAgICB0ZXh0X2Zv
cm1hdC5QYXJzZUVycm9yLAotICAgICAgICAoJzE6MzYgOiBNZXNzYWdlIHR5cGUgInByb3RvYnVm
X3VuaXR0ZXN0LlRlc3RBbGxUeXBlcyIgc2hvdWxkIG5vdCAnCi0gICAgICAgICAnaGF2ZSBtdWx0
aXBsZSAib3B0aW9uYWxfaW50MzIiIGZpZWxkcy4nKSwKLSAgICAgICAgdGV4dF9mb3JtYXQuUGFy
c2UsIHRleHQsIG1lc3NhZ2UpCi0KLSAgZGVmIHRlc3RQYXJzZUdyb3VwTm90Q2xvc2VkKHNlbGYp
OgotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICB0ZXh0ID0g
J1JlcGVhdGVkR3JvdXA6IDwnCi0gICAgc2l4LmFzc2VydFJhaXNlc1JlZ2V4KHNlbGYsCi0gICAg
ICAgIHRleHRfZm9ybWF0LlBhcnNlRXJyb3IsICcxOjE2IDogRXhwZWN0ZWQgIj4iLicsCi0gICAg
ICAgIHRleHRfZm9ybWF0LlBhcnNlLCB0ZXh0LCBtZXNzYWdlKQotICAgIHRleHQgPSAnUmVwZWF0
ZWRHcm91cDogeycKLSAgICBzaXguYXNzZXJ0UmFpc2VzUmVnZXgoc2VsZiwKLSAgICAgICAgdGV4
dF9mb3JtYXQuUGFyc2VFcnJvciwgJzE6MTYgOiBFeHBlY3RlZCAifSIuJywKLSAgICAgICAgdGV4
dF9mb3JtYXQuUGFyc2UsIHRleHQsIG1lc3NhZ2UpCi0KLSAgZGVmIHRlc3RQYXJzZUVtcHR5R3Jv
dXAoc2VsZik6Ci0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAg
IHRleHQgPSAnT3B0aW9uYWxHcm91cDoge30nCi0gICAgdGV4dF9mb3JtYXQuUGFyc2UodGV4dCwg
bWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZS5IYXNGaWVsZCgnb3B0aW9uYWxn
cm91cCcpKQotCi0gICAgbWVzc2FnZS5DbGVhcigpCi0KLSAgICBtZXNzYWdlID0gdW5pdHRlc3Rf
cGIyLlRlc3RBbGxUeXBlcygpCi0gICAgdGV4dCA9ICdPcHRpb25hbEdyb3VwOiA8PicKLSAgICB0
ZXh0X2Zvcm1hdC5QYXJzZSh0ZXh0LCBtZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNz
YWdlLkhhc0ZpZWxkKCdvcHRpb25hbGdyb3VwJykpCi0KLSAgIyBNYXBzIGFyZW4ndCByZWFsbHkg
cHJvdG8yLW9ubHksIGJ1dCBvdXIgdGVzdCBzY2hlbWEgb25seSBoYXMgbWFwcyBmb3IKLSAgIyBw
cm90bzIuCi0gIGRlZiB0ZXN0UGFyc2VNYXAoc2VsZik6Ci0gICAgdGV4dCA9ICgnbWFwX2ludDMy
X2ludDMyIHtcbicKLSAgICAgICAgICAgICcgIGtleTogLTEyM1xuJwotICAgICAgICAgICAgJyAg
dmFsdWU6IC00NTZcbicKLSAgICAgICAgICAgICd9XG4nCi0gICAgICAgICAgICAnbWFwX2ludDY0
X2ludDY0IHtcbicKLSAgICAgICAgICAgICcgIGtleTogLTg1ODk5MzQ1OTJcbicKLSAgICAgICAg
ICAgICcgIHZhbHVlOiAtMTcxNzk4NjkxODRcbicKLSAgICAgICAgICAgICd9XG4nCi0gICAgICAg
ICAgICAnbWFwX3VpbnQzMl91aW50MzIge1xuJwotICAgICAgICAgICAgJyAga2V5OiAxMjNcbicK
LSAgICAgICAgICAgICcgIHZhbHVlOiA0NTZcbicKLSAgICAgICAgICAgICd9XG4nCi0gICAgICAg
ICAgICAnbWFwX3VpbnQ2NF91aW50NjQge1xuJwotICAgICAgICAgICAgJyAga2V5OiA4NTg5OTM0
NTkyXG4nCi0gICAgICAgICAgICAnICB2YWx1ZTogMTcxNzk4NjkxODRcbicKLSAgICAgICAgICAg
ICd9XG4nCi0gICAgICAgICAgICAnbWFwX3N0cmluZ19zdHJpbmcge1xuJwotICAgICAgICAgICAg
JyAga2V5OiAiYWJjIlxuJwotICAgICAgICAgICAgJyAgdmFsdWU6ICIxMjMiXG4nCi0gICAgICAg
ICAgICAnfVxuJwotICAgICAgICAgICAgJ21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2Uge1xuJwot
ICAgICAgICAgICAgJyAga2V5OiAxMTFcbicKLSAgICAgICAgICAgICcgIHZhbHVlIHtcbicKLSAg
ICAgICAgICAgICcgICAgYzogNVxuJwotICAgICAgICAgICAgJyAgfVxuJwotICAgICAgICAgICAg
J31cbicpCi0gICAgbWVzc2FnZSA9IG1hcF91bml0dGVzdF9wYjIuVGVzdE1hcCgpCi0gICAgdGV4
dF9mb3JtYXQuUGFyc2UodGV4dCwgbWVzc2FnZSkKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTQ1
NiwgbWVzc2FnZS5tYXBfaW50MzJfaW50MzJbLTEyM10pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgt
MioqMzQsIG1lc3NhZ2UubWFwX2ludDY0X2ludDY0Wy0yKiozM10pCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCg0NTYsIG1lc3NhZ2UubWFwX3VpbnQzMl91aW50MzJbMTIzXSkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDIqKjM0LCBtZXNzYWdlLm1hcF91aW50NjRfdWludDY0WzIqKjMzXSkKLSAgICBzZWxm
LmFzc2VydEVxdWFsKCIxMjMiLCBtZXNzYWdlLm1hcF9zdHJpbmdfc3RyaW5nWyJhYmMiXSkKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKDUsIG1lc3NhZ2UubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZVsx
MTFdLmMpCi0KLQotY2xhc3MgVG9rZW5pemVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAg
ZGVmIHRlc3RTaW1wbGVUb2tlbkNhc2VzKHNlbGYpOgotICAgIHRleHQgPSAoJ2lkZW50aWZpZXIx
OiJzdHJpbmcxIlxuICAgICBcblxuJwotICAgICAgICAgICAgJ2lkZW50aWZpZXIyIDogXG4gXG4x
MjMgIFxuICBpZGVudGlmaWVyMyA6XCdzdHJpbmdcJ1xuJwotICAgICAgICAgICAgJ2lkZW50aWZp
RVJfNCA6IDEuMWUrMiBJRDU6LTAuMjMgSUQ2OlwnYWFhYVxcXCdiYmJiXCdcbicKLSAgICAgICAg
ICAgICdJRDcgOiAiYWFcXCJiYiJcblxuXG5cbiBJRDg6IHtBOmluZiBCOi1pbmYgQzp0cnVlIEQ6
ZmFsc2V9XG4nCi0gICAgICAgICAgICAnSUQ5OiAyMiBJRDEwOiAtMTExMTExMTExMTExMTExMTEx
IElEMTE6IC0yMlxuJwotICAgICAgICAgICAgJ0lEMTI6IDIyMjIyMjIyMjIyMjIyMjIyMjIgSUQx
MzogMS4yMzQ1NmYgSUQxNDogMS4yZSsyZiAnCi0gICAgICAgICAgICAnZmFsc2VfYm9vbDogIDAg
dHJ1ZV9CT09MOnQgXG4gdHJ1ZV9ib29sMTogIDEgZmFsc2VfQk9PTDE6ZiAnKQotICAgIHRva2Vu
aXplciA9IHRleHRfZm9ybWF0Ll9Ub2tlbml6ZXIodGV4dC5zcGxpdGxpbmVzKCkpCi0gICAgbWV0
aG9kcyA9IFsodG9rZW5pemVyLkNvbnN1bWVJZGVudGlmaWVyLCAnaWRlbnRpZmllcjEnKSwKLSAg
ICAgICAgICAgICAgICc6JywKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZVN0cmlu
ZywgJ3N0cmluZzEnKSwKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZUlkZW50aWZp
ZXIsICdpZGVudGlmaWVyMicpLAotICAgICAgICAgICAgICAgJzonLAotICAgICAgICAgICAgICAg
KHRva2VuaXplci5Db25zdW1lSW50MzIsIDEyMyksCi0gICAgICAgICAgICAgICAodG9rZW5pemVy
LkNvbnN1bWVJZGVudGlmaWVyLCAnaWRlbnRpZmllcjMnKSwKLSAgICAgICAgICAgICAgICc6JywK
LSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZVN0cmluZywgJ3N0cmluZycpLAotICAg
ICAgICAgICAgICAgKHRva2VuaXplci5Db25zdW1lSWRlbnRpZmllciwgJ2lkZW50aWZpRVJfNCcp
LAotICAgICAgICAgICAgICAgJzonLAotICAgICAgICAgICAgICAgKHRva2VuaXplci5Db25zdW1l
RmxvYXQsIDEuMWUrMiksCi0gICAgICAgICAgICAgICAodG9rZW5pemVyLkNvbnN1bWVJZGVudGlm
aWVyLCAnSUQ1JyksCi0gICAgICAgICAgICAgICAnOicsCi0gICAgICAgICAgICAgICAodG9rZW5p
emVyLkNvbnN1bWVGbG9hdCwgLTAuMjMpLAotICAgICAgICAgICAgICAgKHRva2VuaXplci5Db25z
dW1lSWRlbnRpZmllciwgJ0lENicpLAotICAgICAgICAgICAgICAgJzonLAotICAgICAgICAgICAg
ICAgKHRva2VuaXplci5Db25zdW1lU3RyaW5nLCAnYWFhYVwnYmJiYicpLAotICAgICAgICAgICAg
ICAgKHRva2VuaXplci5Db25zdW1lSWRlbnRpZmllciwgJ0lENycpLAotICAgICAgICAgICAgICAg
JzonLAotICAgICAgICAgICAgICAgKHRva2VuaXplci5Db25zdW1lU3RyaW5nLCAnYWFcImJiJyks
Ci0gICAgICAgICAgICAgICAodG9rZW5pemVyLkNvbnN1bWVJZGVudGlmaWVyLCAnSUQ4JyksCi0g
ICAgICAgICAgICAgICAnOicsCi0gICAgICAgICAgICAgICAneycsCi0gICAgICAgICAgICAgICAo
dG9rZW5pemVyLkNvbnN1bWVJZGVudGlmaWVyLCAnQScpLAotICAgICAgICAgICAgICAgJzonLAot
ICAgICAgICAgICAgICAgKHRva2VuaXplci5Db25zdW1lRmxvYXQsIGZsb2F0KCdpbmYnKSksCi0g
ICAgICAgICAgICAgICAodG9rZW5pemVyLkNvbnN1bWVJZGVudGlmaWVyLCAnQicpLAotICAgICAg
ICAgICAgICAgJzonLAotICAgICAgICAgICAgICAgKHRva2VuaXplci5Db25zdW1lRmxvYXQsIC1m
bG9hdCgnaW5mJykpLAotICAgICAgICAgICAgICAgKHRva2VuaXplci5Db25zdW1lSWRlbnRpZmll
ciwgJ0MnKSwKLSAgICAgICAgICAgICAgICc6JywKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIu
Q29uc3VtZUJvb2wsIFRydWUpLAotICAgICAgICAgICAgICAgKHRva2VuaXplci5Db25zdW1lSWRl
bnRpZmllciwgJ0QnKSwKLSAgICAgICAgICAgICAgICc6JywKLSAgICAgICAgICAgICAgICh0b2tl
bml6ZXIuQ29uc3VtZUJvb2wsIEZhbHNlKSwKLSAgICAgICAgICAgICAgICd9JywKLSAgICAgICAg
ICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZUlkZW50aWZpZXIsICdJRDknKSwKLSAgICAgICAgICAg
ICAgICc6JywKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZVVpbnQzMiwgMjIpLAot
ICAgICAgICAgICAgICAgKHRva2VuaXplci5Db25zdW1lSWRlbnRpZmllciwgJ0lEMTAnKSwKLSAg
ICAgICAgICAgICAgICc6JywKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZUludDY0
LCAtMTExMTExMTExMTExMTExMTExKSwKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3Vt
ZUlkZW50aWZpZXIsICdJRDExJyksCi0gICAgICAgICAgICAgICAnOicsCi0gICAgICAgICAgICAg
ICAodG9rZW5pemVyLkNvbnN1bWVJbnQzMiwgLTIyKSwKLSAgICAgICAgICAgICAgICh0b2tlbml6
ZXIuQ29uc3VtZUlkZW50aWZpZXIsICdJRDEyJyksCi0gICAgICAgICAgICAgICAnOicsCi0gICAg
ICAgICAgICAgICAodG9rZW5pemVyLkNvbnN1bWVVaW50NjQsIDIyMjIyMjIyMjIyMjIyMjIyMjIp
LAotICAgICAgICAgICAgICAgKHRva2VuaXplci5Db25zdW1lSWRlbnRpZmllciwgJ0lEMTMnKSwK
LSAgICAgICAgICAgICAgICc6JywKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZUZs
b2F0LCAxLjIzNDU2KSwKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZUlkZW50aWZp
ZXIsICdJRDE0JyksCi0gICAgICAgICAgICAgICAnOicsCi0gICAgICAgICAgICAgICAodG9rZW5p
emVyLkNvbnN1bWVGbG9hdCwgMS4yZSsyKSwKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29u
c3VtZUlkZW50aWZpZXIsICdmYWxzZV9ib29sJyksCi0gICAgICAgICAgICAgICAnOicsCi0gICAg
ICAgICAgICAgICAodG9rZW5pemVyLkNvbnN1bWVCb29sLCBGYWxzZSksCi0gICAgICAgICAgICAg
ICAodG9rZW5pemVyLkNvbnN1bWVJZGVudGlmaWVyLCAndHJ1ZV9CT09MJyksCi0gICAgICAgICAg
ICAgICAnOicsCi0gICAgICAgICAgICAgICAodG9rZW5pemVyLkNvbnN1bWVCb29sLCBUcnVlKSwK
LSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZUlkZW50aWZpZXIsICd0cnVlX2Jvb2wx
JyksCi0gICAgICAgICAgICAgICAnOicsCi0gICAgICAgICAgICAgICAodG9rZW5pemVyLkNvbnN1
bWVCb29sLCBUcnVlKSwKLSAgICAgICAgICAgICAgICh0b2tlbml6ZXIuQ29uc3VtZUlkZW50aWZp
ZXIsICdmYWxzZV9CT09MMScpLAotICAgICAgICAgICAgICAgJzonLAotICAgICAgICAgICAgICAg
KHRva2VuaXplci5Db25zdW1lQm9vbCwgRmFsc2UpXQotCi0gICAgaSA9IDAKLSAgICB3aGlsZSBu
b3QgdG9rZW5pemVyLkF0RW5kKCk6Ci0gICAgICBtID0gbWV0aG9kc1tpXQotICAgICAgaWYgdHlw
ZShtKSA9PSBzdHI6Ci0gICAgICAgIHRva2VuID0gdG9rZW5pemVyLnRva2VuCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwodG9rZW4sIG0pCi0gICAgICAgIHRva2VuaXplci5OZXh0VG9rZW4oKQot
ICAgICAgZWxzZToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzFdLCBtWzBdKCkpCi0gICAg
ICBpICs9IDEKLQotICBkZWYgdGVzdENvbnN1bWVJbnRlZ2VycyhzZWxmKToKLSAgICAjIFRoaXMg
dGVzdCBvbmx5IHRlc3RzIHRoZSBmYWlsdXJlcyBpbiB0aGUgaW50ZWdlciBwYXJzaW5nIG1ldGhv
ZHMgYXMgd2VsbAotICAgICMgYXMgdGhlICcwJyBzcGVjaWFsIGNhc2VzLgotICAgIGludDY0X21h
eCA9ICgxIDw8IDYzKSAtIDEKLSAgICB1aW50MzJfbWF4ID0gKDEgPDwgMzIpIC0gMQotICAgIHRl
eHQgPSAnLTEgJWQgJWQnICUgKHVpbnQzMl9tYXggKyAxLCBpbnQ2NF9tYXggKyAxKQotICAgIHRv
a2VuaXplciA9IHRleHRfZm9ybWF0Ll9Ub2tlbml6ZXIodGV4dC5zcGxpdGxpbmVzKCkpCi0gICAg
c2VsZi5hc3NlcnRSYWlzZXModGV4dF9mb3JtYXQuUGFyc2VFcnJvciwgdG9rZW5pemVyLkNvbnN1
bWVVaW50MzIpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXModGV4dF9mb3JtYXQuUGFyc2VFcnJvciwg
dG9rZW5pemVyLkNvbnN1bWVVaW50NjQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgdG9rZW5p
emVyLkNvbnN1bWVJbnQzMigpKQotCi0gICAgc2VsZi5hc3NlcnRSYWlzZXModGV4dF9mb3JtYXQu
UGFyc2VFcnJvciwgdG9rZW5pemVyLkNvbnN1bWVVaW50MzIpCi0gICAgc2VsZi5hc3NlcnRSYWlz
ZXModGV4dF9mb3JtYXQuUGFyc2VFcnJvciwgdG9rZW5pemVyLkNvbnN1bWVJbnQzMikKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKHVpbnQzMl9tYXggKyAxLCB0b2tlbml6ZXIuQ29uc3VtZUludDY0KCkp
Ci0KLSAgICBzZWxmLmFzc2VydFJhaXNlcyh0ZXh0X2Zvcm1hdC5QYXJzZUVycm9yLCB0b2tlbml6
ZXIuQ29uc3VtZUludDY0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50NjRfbWF4ICsgMSwgdG9r
ZW5pemVyLkNvbnN1bWVVaW50NjQoKSkKLSAgICBzZWxmLmFzc2VydFRydWUodG9rZW5pemVyLkF0
RW5kKCkpCi0KLSAgICB0ZXh0ID0gJy0wIC0wIDAgMCcKLSAgICB0b2tlbml6ZXIgPSB0ZXh0X2Zv
cm1hdC5fVG9rZW5pemVyKHRleHQuc3BsaXRsaW5lcygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgdG9rZW5pemVyLkNvbnN1bWVVaW50MzIoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHRv
a2VuaXplci5Db25zdW1lVWludDY0KCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCB0b2tlbml6
ZXIuQ29uc3VtZVVpbnQzMigpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdG9rZW5pemVyLkNv
bnN1bWVVaW50NjQoKSkKLSAgICBzZWxmLmFzc2VydFRydWUodG9rZW5pemVyLkF0RW5kKCkpCi0K
LSAgZGVmIHRlc3RDb25zdW1lQnl0ZVN0cmluZyhzZWxmKToKLSAgICB0ZXh0ID0gJyJzdHJpbmcx
XCcnCi0gICAgdG9rZW5pemVyID0gdGV4dF9mb3JtYXQuX1Rva2VuaXplcih0ZXh0LnNwbGl0bGlu
ZXMoKSkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyh0ZXh0X2Zvcm1hdC5QYXJzZUVycm9yLCB0b2tl
bml6ZXIuQ29uc3VtZUJ5dGVTdHJpbmcpCi0KLSAgICB0ZXh0ID0gJ3N0cmluZzEiJwotICAgIHRv
a2VuaXplciA9IHRleHRfZm9ybWF0Ll9Ub2tlbml6ZXIodGV4dC5zcGxpdGxpbmVzKCkpCi0gICAg
c2VsZi5hc3NlcnRSYWlzZXModGV4dF9mb3JtYXQuUGFyc2VFcnJvciwgdG9rZW5pemVyLkNvbnN1
bWVCeXRlU3RyaW5nKQotCi0gICAgdGV4dCA9ICdcbiJcXHh0IicKLSAgICB0b2tlbml6ZXIgPSB0
ZXh0X2Zvcm1hdC5fVG9rZW5pemVyKHRleHQuc3BsaXRsaW5lcygpKQotICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKHRleHRfZm9ybWF0LlBhcnNlRXJyb3IsIHRva2VuaXplci5Db25zdW1lQnl0ZVN0cmlu
ZykKLQotICAgIHRleHQgPSAnXG4iXFwiJwotICAgIHRva2VuaXplciA9IHRleHRfZm9ybWF0Ll9U
b2tlbml6ZXIodGV4dC5zcGxpdGxpbmVzKCkpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXModGV4dF9m
b3JtYXQuUGFyc2VFcnJvciwgdG9rZW5pemVyLkNvbnN1bWVCeXRlU3RyaW5nKQotCi0gICAgdGV4
dCA9ICdcbiJcXHgiJwotICAgIHRva2VuaXplciA9IHRleHRfZm9ybWF0Ll9Ub2tlbml6ZXIodGV4
dC5zcGxpdGxpbmVzKCkpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXModGV4dF9mb3JtYXQuUGFyc2VF
cnJvciwgdG9rZW5pemVyLkNvbnN1bWVCeXRlU3RyaW5nKQotCi0gIGRlZiB0ZXN0Q29uc3VtZUJv
b2woc2VsZik6Ci0gICAgdGV4dCA9ICdub3QtYS1ib29sJwotICAgIHRva2VuaXplciA9IHRleHRf
Zm9ybWF0Ll9Ub2tlbml6ZXIodGV4dC5zcGxpdGxpbmVzKCkpCi0gICAgc2VsZi5hc3NlcnRSYWlz
ZXModGV4dF9mb3JtYXQuUGFyc2VFcnJvciwgdG9rZW5pemVyLkNvbnN1bWVCb29sKQotCi0KLWlm
IF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9w
eXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3R5cGVfY2hlY2tlcnMucHkgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9n
b29nbGUvcHJvdG9idWYvaW50ZXJuYWwvdHlwZV9jaGVja2Vycy5weQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMWJlM2FkOWEzYzA5ZDM4OGY4ZmY0NmFlODk0ZjkzZTBkNjFiYzgxOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29n
bGUvcHJvdG9idWYvaW50ZXJuYWwvdHlwZV9jaGVja2Vycy5weQorKysgL2Rldi9udWxsCkBAIC0x
LDM1MiArMCwwIEBACi0jIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlv
bi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlByb3ZpZGVzIHR5cGUgY2hlY2tpbmcgcm91dGluZXMu
Ci0KLVRoaXMgbW9kdWxlIGRlZmluZXMgdHlwZSBjaGVja2luZyB1dGlsaXRpZXMgaW4gdGhlIGZv
cm1zIG9mIGRpY3Rpb25hcmllczoKLQotVkFMVUVfQ0hFQ0tFUlM6IEEgZGljdGlvbmFyeSBvZiBm
aWVsZCB0eXBlcyBhbmQgYSB2YWx1ZSB2YWxpZGF0aW9uIG9iamVjdC4KLVRZUEVfVE9fQllURV9T
SVpFX0ZOOiBBIGRpY3Rpb25hcnkgd2l0aCBmaWVsZCB0eXBlcyBhbmQgYSBzaXplIGNvbXB1dGlu
ZwotICBmdW5jdGlvbi4KLVRZUEVfVE9fU0VSSUFMSVpFX01FVEhPRDogQSBkaWN0aW9uYXJ5IHdp
dGggZmllbGQgdHlwZXMgYW5kIHNlcmlhbGl6YXRpb24KLSAgZnVuY3Rpb24uCi1GSUVMRF9UWVBF
X1RPX1dJUkVfVFlQRTogQSBkaWN0aW9uYXJ5IHdpdGggZmllbGQgdHlwZWQgYW5kIHRoZWlyCi0g
IGNvcmVzcG9uZGluZyB3aXJlIHR5cGVzLgotVFlQRV9UT19ERVNFUklBTElaRV9NRVRIT0Q6IEEg
ZGljdGlvbmFyeSB3aXRoIGZpZWxkIHR5cGVzIGFuZCBkZXNlcmlhbGl6YXRpb24KLSAgZnVuY3Rp
b24uCi0iIiIKLQotX19hdXRob3JfXyA9ICdyb2JpbnNvbkBnb29nbGUuY29tIChXaWxsIFJvYmlu
c29uKScKLQotaW1wb3J0IHNpeAotCi1pZiBzaXguUFkzOgotICBsb25nID0gaW50Ci0KLWZyb20g
Z29vZ2xlLnByb3RvYnVmLmludGVybmFsIGltcG9ydCBhcGlfaW1wbGVtZW50YXRpb24KLWZyb20g
Z29vZ2xlLnByb3RvYnVmLmludGVybmFsIGltcG9ydCBkZWNvZGVyCi1mcm9tIGdvb2dsZS5wcm90
b2J1Zi5pbnRlcm5hbCBpbXBvcnQgZW5jb2RlcgotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJu
YWwgaW1wb3J0IHdpcmVfZm9ybWF0Ci1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3Jp
cHRvcgotCi1fRmllbGREZXNjcmlwdG9yID0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IKLQot
ZGVmIFN1cHBvcnRzT3BlbkVudW1zKGZpZWxkX2Rlc2NyaXB0b3IpOgotICByZXR1cm4gZmllbGRf
ZGVzY3JpcHRvci5jb250YWluaW5nX3R5cGUuc3ludGF4ID09ICJwcm90bzMiCi0KLWRlZiBHZXRU
eXBlQ2hlY2tlcihmaWVsZCk6Ci0gICIiIlJldHVybnMgYSB0eXBlIGNoZWNrZXIgZm9yIGEgbWVz
c2FnZSBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHR5cGVzLgotCi0gIEFyZ3M6Ci0gICAgZmllbGQ6
IEZpZWxkRGVzY3JpcHRvciBvYmplY3QgZm9yIHRoaXMgZmllbGQuCi0KLSAgUmV0dXJuczoKLSAg
ICBBbiBpbnN0YW5jZSBvZiBUeXBlQ2hlY2tlciB3aGljaCBjYW4gYmUgdXNlZCB0byB2ZXJpZnkg
dGhlIHR5cGVzCi0gICAgb2YgdmFsdWVzIGFzc2lnbmVkIHRvIGEgZmllbGQgb2YgdGhlIHNwZWNp
ZmllZCB0eXBlLgotICAiIiIKLSAgaWYgKGZpZWxkLmNwcF90eXBlID09IF9GaWVsZERlc2NyaXB0
b3IuQ1BQVFlQRV9TVFJJTkcgYW5kCi0gICAgICBmaWVsZC50eXBlID09IF9GaWVsZERlc2NyaXB0
b3IuVFlQRV9TVFJJTkcpOgotICAgIHJldHVybiBVbmljb2RlVmFsdWVDaGVja2VyKCkKLSAgaWYg
ZmllbGQuY3BwX3R5cGUgPT0gX0ZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX0VOVU06Ci0gICAgaWYg
U3VwcG9ydHNPcGVuRW51bXMoZmllbGQpOgotICAgICAgIyBXaGVuIG9wZW4gZW51bXMgYXJlIHN1
cHBvcnRlZCwgYW55IGludDMyIGNhbiBiZSBhc3NpZ25lZC4KLSAgICAgIHJldHVybiBfVkFMVUVf
Q0hFQ0tFUlNbX0ZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX0lOVDMyXQotICAgIGVsc2U6Ci0gICAg
ICByZXR1cm4gRW51bVZhbHVlQ2hlY2tlcihmaWVsZC5lbnVtX3R5cGUpCi0gIHJldHVybiBfVkFM
VUVfQ0hFQ0tFUlNbZmllbGQuY3BwX3R5cGVdCi0KLQotIyBOb25lIG9mIHRoZSB0eXBlY2hlY2tl
cnMgYmVsb3cgbWFrZSBhbnkgYXR0ZW1wdCB0byBndWFyZCBhZ2FpbnN0IHBlb3BsZQotIyBzdWJj
bGFzc2luZyBidWlsdGluIHR5cGVzIGFuZCBkb2luZyB3ZWlyZCB0aGluZ3MuICBXZSdyZSBub3Qg
dHJ5aW5nIHRvCi0jIHByb3RlY3QgYWdhaW5zdCBtYWxpY2lvdXMgY2xpZW50cyBoZXJlLCBqdXN0
IHBlb3BsZSBhY2NpZGVudGFsbHkgc2hvb3RpbmcKLSMgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdCBp
biBvYnZpb3VzIHdheXMuCi0KLWNsYXNzIFR5cGVDaGVja2VyKG9iamVjdCk6Ci0KLSAgIiIiVHlw
ZSBjaGVja2VyIHVzZWQgdG8gY2F0Y2ggdHlwZSBlcnJvcnMgYXMgZWFybHkgYXMgcG9zc2libGUK
LSAgd2hlbiB0aGUgY2xpZW50IGlzIHNldHRpbmcgc2NhbGFyIGZpZWxkcyBpbiBwcm90b2NvbCBt
ZXNzYWdlcy4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsICphY2NlcHRhYmxlX3R5cGVz
KToKLSAgICBzZWxmLl9hY2NlcHRhYmxlX3R5cGVzID0gYWNjZXB0YWJsZV90eXBlcwotCi0gIGRl
ZiBDaGVja1ZhbHVlKHNlbGYsIHByb3Bvc2VkX3ZhbHVlKToKLSAgICAiIiJUeXBlIGNoZWNrIHRo
ZSBwcm92aWRlZCB2YWx1ZSBhbmQgcmV0dXJuIGl0LgotCi0gICAgVGhlIHJldHVybmVkIHZhbHVl
IG1pZ2h0IGhhdmUgYmVlbiBub3JtYWxpemVkIHRvIGFub3RoZXIgdHlwZS4KLSAgICAiIiIKLSAg
ICBpZiBub3QgaXNpbnN0YW5jZShwcm9wb3NlZF92YWx1ZSwgc2VsZi5fYWNjZXB0YWJsZV90eXBl
cyk6Ci0gICAgICBtZXNzYWdlID0gKCclLjEwMjRyIGhhcyB0eXBlICVzLCBidXQgZXhwZWN0ZWQg
b25lIG9mOiAlcycgJQotICAgICAgICAgICAgICAgICAocHJvcG9zZWRfdmFsdWUsIHR5cGUocHJv
cG9zZWRfdmFsdWUpLCBzZWxmLl9hY2NlcHRhYmxlX3R5cGVzKSkKLSAgICAgIHJhaXNlIFR5cGVF
cnJvcihtZXNzYWdlKQotICAgIHJldHVybiBwcm9wb3NlZF92YWx1ZQotCi0KLWNsYXNzIFR5cGVD
aGVja2VyV2l0aERlZmF1bHQoVHlwZUNoZWNrZXIpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBk
ZWZhdWx0X3ZhbHVlLCAqYWNjZXB0YWJsZV90eXBlcyk6Ci0gICAgVHlwZUNoZWNrZXIuX19pbml0
X18oc2VsZiwgYWNjZXB0YWJsZV90eXBlcykKLSAgICBzZWxmLl9kZWZhdWx0X3ZhbHVlID0gZGVm
YXVsdF92YWx1ZQotCi0gIGRlZiBEZWZhdWx0VmFsdWUoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYu
X2RlZmF1bHRfdmFsdWUKLQotCi0jIEludFZhbHVlQ2hlY2tlciBhbmQgaXRzIHN1YmNsYXNzZXMg
cGVyZm9ybSBpbnRlZ2VyIHR5cGUtY2hlY2tzCi0jIGFuZCBib3VuZHMtY2hlY2tzLgotY2xhc3Mg
SW50VmFsdWVDaGVja2VyKG9iamVjdCk6Ci0KLSAgIiIiQ2hlY2tlciB1c2VkIGZvciBpbnRlZ2Vy
IGZpZWxkcy4gIFBlcmZvcm1zIHR5cGUtY2hlY2sgYW5kIHJhbmdlIGNoZWNrLiIiIgotCi0gIGRl
ZiBDaGVja1ZhbHVlKHNlbGYsIHByb3Bvc2VkX3ZhbHVlKToKLSAgICBpZiBub3QgaXNpbnN0YW5j
ZShwcm9wb3NlZF92YWx1ZSwgc2l4LmludGVnZXJfdHlwZXMpOgotICAgICAgbWVzc2FnZSA9ICgn
JS4xMDI0ciBoYXMgdHlwZSAlcywgYnV0IGV4cGVjdGVkIG9uZSBvZjogJXMnICUKLSAgICAgICAg
ICAgICAgICAgKHByb3Bvc2VkX3ZhbHVlLCB0eXBlKHByb3Bvc2VkX3ZhbHVlKSwgc2l4LmludGVn
ZXJfdHlwZXMpKQotICAgICAgcmFpc2UgVHlwZUVycm9yKG1lc3NhZ2UpCi0gICAgaWYgbm90IHNl
bGYuX01JTiA8PSBwcm9wb3NlZF92YWx1ZSA8PSBzZWxmLl9NQVg6Ci0gICAgICByYWlzZSBWYWx1
ZUVycm9yKCdWYWx1ZSBvdXQgb2YgcmFuZ2U6ICVkJyAlIHByb3Bvc2VkX3ZhbHVlKQotICAgICMg
V2UgZm9yY2UgMzItYml0IHZhbHVlcyB0byBpbnQgYW5kIDY0LWJpdCB2YWx1ZXMgdG8gbG9uZyB0
byBtYWtlCi0gICAgIyBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zIHdoZXJlIHRoZSBkaXN0aW5j
dGlvbiBpcyBtb3JlIHNpZ25pZmljYW50Ci0gICAgIyAoZS5nLiB0aGUgQysrIGltcGxlbWVudGF0
aW9uKSBzaW1wbGVyLgotICAgIHByb3Bvc2VkX3ZhbHVlID0gc2VsZi5fVFlQRShwcm9wb3NlZF92
YWx1ZSkKLSAgICByZXR1cm4gcHJvcG9zZWRfdmFsdWUKLQotICBkZWYgRGVmYXVsdFZhbHVlKHNl
bGYpOgotICAgIHJldHVybiAwCi0KLQotY2xhc3MgRW51bVZhbHVlQ2hlY2tlcihvYmplY3QpOgot
Ci0gICIiIkNoZWNrZXIgdXNlZCBmb3IgZW51bSBmaWVsZHMuICBQZXJmb3JtcyB0eXBlLWNoZWNr
IGFuZCByYW5nZSBjaGVjay4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgZW51bV90eXBlKToK
LSAgICBzZWxmLl9lbnVtX3R5cGUgPSBlbnVtX3R5cGUKLQotICBkZWYgQ2hlY2tWYWx1ZShzZWxm
LCBwcm9wb3NlZF92YWx1ZSk6Ci0gICAgaWYgbm90IGlzaW5zdGFuY2UocHJvcG9zZWRfdmFsdWUs
IHNpeC5pbnRlZ2VyX3R5cGVzKToKLSAgICAgIG1lc3NhZ2UgPSAoJyUuMTAyNHIgaGFzIHR5cGUg
JXMsIGJ1dCBleHBlY3RlZCBvbmUgb2Y6ICVzJyAlCi0gICAgICAgICAgICAgICAgIChwcm9wb3Nl
ZF92YWx1ZSwgdHlwZShwcm9wb3NlZF92YWx1ZSksIHNpeC5pbnRlZ2VyX3R5cGVzKSkKLSAgICAg
IHJhaXNlIFR5cGVFcnJvcihtZXNzYWdlKQotICAgIGlmIHByb3Bvc2VkX3ZhbHVlIG5vdCBpbiBz
ZWxmLl9lbnVtX3R5cGUudmFsdWVzX2J5X251bWJlcjoKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
J1Vua25vd24gZW51bSB2YWx1ZTogJWQnICUgcHJvcG9zZWRfdmFsdWUpCi0gICAgcmV0dXJuIHBy
b3Bvc2VkX3ZhbHVlCi0KLSAgZGVmIERlZmF1bHRWYWx1ZShzZWxmKToKLSAgICByZXR1cm4gc2Vs
Zi5fZW51bV90eXBlLnZhbHVlc1swXS5udW1iZXIKLQotCi1jbGFzcyBVbmljb2RlVmFsdWVDaGVj
a2VyKG9iamVjdCk6Ci0KLSAgIiIiQ2hlY2tlciB1c2VkIGZvciBzdHJpbmcgZmllbGRzLgotCi0g
IEFsd2F5cyByZXR1cm5zIGEgdW5pY29kZSB2YWx1ZSwgZXZlbiBpZiB0aGUgaW5wdXQgaXMgb2Yg
dHlwZSBzdHIuCi0gICIiIgotCi0gIGRlZiBDaGVja1ZhbHVlKHNlbGYsIHByb3Bvc2VkX3ZhbHVl
KToKLSAgICBpZiBub3QgaXNpbnN0YW5jZShwcm9wb3NlZF92YWx1ZSwgKGJ5dGVzLCBzaXgudGV4
dF90eXBlKSk6Ci0gICAgICBtZXNzYWdlID0gKCclLjEwMjRyIGhhcyB0eXBlICVzLCBidXQgZXhw
ZWN0ZWQgb25lIG9mOiAlcycgJQotICAgICAgICAgICAgICAgICAocHJvcG9zZWRfdmFsdWUsIHR5
cGUocHJvcG9zZWRfdmFsdWUpLCAoYnl0ZXMsIHNpeC50ZXh0X3R5cGUpKSkKLSAgICAgIHJhaXNl
IFR5cGVFcnJvcihtZXNzYWdlKQotCi0gICAgIyBJZiB0aGUgdmFsdWUgaXMgb2YgdHlwZSAnYnl0
ZXMnIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIHZhbGlkIFVURi04IGRhdGEuCi0gICAgaWYgaXNpbnN0
YW5jZShwcm9wb3NlZF92YWx1ZSwgYnl0ZXMpOgotICAgICAgdHJ5OgotICAgICAgICBwcm9wb3Nl
ZF92YWx1ZSA9IHByb3Bvc2VkX3ZhbHVlLmRlY29kZSgndXRmLTgnKQotICAgICAgZXhjZXB0IFVu
aWNvZGVEZWNvZGVFcnJvcjoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignJS4xMDI0ciBoYXMg
dHlwZSBieXRlcywgYnV0IGlzblwndCB2YWxpZCBVVEYtOCAnCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgJ2VuY29kaW5nLiBOb24tVVRGLTggc3RyaW5ncyBtdXN0IGJlIGNvbnZlcnRlZCB0byAn
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ3VuaWNvZGUgb2JqZWN0cyBiZWZvcmUgYmVpbmcg
YWRkZWQuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHByb3Bvc2VkX3ZhbHVlKSkKLSAg
ICByZXR1cm4gcHJvcG9zZWRfdmFsdWUKLQotICBkZWYgRGVmYXVsdFZhbHVlKHNlbGYpOgotICAg
IHJldHVybiB1IiIKLQotCi1jbGFzcyBJbnQzMlZhbHVlQ2hlY2tlcihJbnRWYWx1ZUNoZWNrZXIp
OgotICAjIFdlJ3JlIHN1cmUgdG8gdXNlIGludHMgaW5zdGVhZCBvZiBsb25ncyBoZXJlIHNpbmNl
IGNvbXBhcmlzb24gbWF5IGJlIG1vcmUKLSAgIyBlZmZpY2llbnQuCi0gIF9NSU4gPSAtMjE0NzQ4
MzY0OAotICBfTUFYID0gMjE0NzQ4MzY0NwotICBfVFlQRSA9IGludAotCi0KLWNsYXNzIFVpbnQz
MlZhbHVlQ2hlY2tlcihJbnRWYWx1ZUNoZWNrZXIpOgotICBfTUlOID0gMAotICBfTUFYID0gKDEg
PDwgMzIpIC0gMQotICBfVFlQRSA9IGludAotCi0KLWNsYXNzIEludDY0VmFsdWVDaGVja2VyKElu
dFZhbHVlQ2hlY2tlcik6Ci0gIF9NSU4gPSAtKDEgPDwgNjMpCi0gIF9NQVggPSAoMSA8PCA2Mykg
LSAxCi0gIF9UWVBFID0gbG9uZwotCi0KLWNsYXNzIFVpbnQ2NFZhbHVlQ2hlY2tlcihJbnRWYWx1
ZUNoZWNrZXIpOgotICBfTUlOID0gMAotICBfTUFYID0gKDEgPDwgNjQpIC0gMQotICBfVFlQRSA9
IGxvbmcKLQotCi0jIFR5cGUtY2hlY2tlcnMgZm9yIGFsbCBzY2FsYXIgQ1BQVFlQRXMuCi1fVkFM
VUVfQ0hFQ0tFUlMgPSB7Ci0gICAgX0ZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX0lOVDMyOiBJbnQz
MlZhbHVlQ2hlY2tlcigpLAotICAgIF9GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9JTlQ2NDogSW50
NjRWYWx1ZUNoZWNrZXIoKSwKLSAgICBfRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfVUlOVDMyOiBV
aW50MzJWYWx1ZUNoZWNrZXIoKSwKLSAgICBfRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfVUlOVDY0
OiBVaW50NjRWYWx1ZUNoZWNrZXIoKSwKLSAgICBfRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfRE9V
QkxFOiBUeXBlQ2hlY2tlcldpdGhEZWZhdWx0KAotICAgICAgICAwLjAsIGZsb2F0LCBpbnQsIGxv
bmcpLAotICAgIF9GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9GTE9BVDogVHlwZUNoZWNrZXJXaXRo
RGVmYXVsdCgKLSAgICAgICAgMC4wLCBmbG9hdCwgaW50LCBsb25nKSwKLSAgICBfRmllbGREZXNj
cmlwdG9yLkNQUFRZUEVfQk9PTDogVHlwZUNoZWNrZXJXaXRoRGVmYXVsdCgKLSAgICAgICAgRmFs
c2UsIGJvb2wsIGludCksCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX1NUUklORzogVHlw
ZUNoZWNrZXJXaXRoRGVmYXVsdChiJycsIGJ5dGVzKSwKLSAgICB9Ci0KLQotIyBNYXAgZnJvbSBm
aWVsZCB0eXBlIHRvIGEgZnVuY3Rpb24gRiwgc3VjaCB0aGF0IEYoZmllbGRfbnVtLCB2YWx1ZSkK
LSMgZ2l2ZXMgdGhlIHRvdGFsIGJ5dGUgc2l6ZSBmb3IgYSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gdHlw
ZS4gIFRoaXMKLSMgYnl0ZSBzaXplIGluY2x1ZGVzIHRhZyBpbmZvcm1hdGlvbiBhbmQgYW55IG90
aGVyIGFkZGl0aW9uYWwgc3BhY2UKLSMgYXNzb2NpYXRlZCB3aXRoIHNlcmlhbGl6aW5nICJ2YWx1
ZSIuCi1UWVBFX1RPX0JZVEVfU0laRV9GTiA9IHsKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVf
RE9VQkxFOiB3aXJlX2Zvcm1hdC5Eb3VibGVCeXRlU2l6ZSwKLSAgICBfRmllbGREZXNjcmlwdG9y
LlRZUEVfRkxPQVQ6IHdpcmVfZm9ybWF0LkZsb2F0Qnl0ZVNpemUsCi0gICAgX0ZpZWxkRGVzY3Jp
cHRvci5UWVBFX0lOVDY0OiB3aXJlX2Zvcm1hdC5JbnQ2NEJ5dGVTaXplLAotICAgIF9GaWVsZERl
c2NyaXB0b3IuVFlQRV9VSU5UNjQ6IHdpcmVfZm9ybWF0LlVJbnQ2NEJ5dGVTaXplLAotICAgIF9G
aWVsZERlc2NyaXB0b3IuVFlQRV9JTlQzMjogd2lyZV9mb3JtYXQuSW50MzJCeXRlU2l6ZSwKLSAg
ICBfRmllbGREZXNjcmlwdG9yLlRZUEVfRklYRUQ2NDogd2lyZV9mb3JtYXQuRml4ZWQ2NEJ5dGVT
aXplLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9GSVhFRDMyOiB3aXJlX2Zvcm1hdC5GaXhl
ZDMyQnl0ZVNpemUsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0JPT0w6IHdpcmVfZm9ybWF0
LkJvb2xCeXRlU2l6ZSwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfU1RSSU5HOiB3aXJlX2Zv
cm1hdC5TdHJpbmdCeXRlU2l6ZSwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfR1JPVVA6IHdp
cmVfZm9ybWF0Lkdyb3VwQnl0ZVNpemUsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX01FU1NB
R0U6IHdpcmVfZm9ybWF0Lk1lc3NhZ2VCeXRlU2l6ZSwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZ
UEVfQllURVM6IHdpcmVfZm9ybWF0LkJ5dGVzQnl0ZVNpemUsCi0gICAgX0ZpZWxkRGVzY3JpcHRv
ci5UWVBFX1VJTlQzMjogd2lyZV9mb3JtYXQuVUludDMyQnl0ZVNpemUsCi0gICAgX0ZpZWxkRGVz
Y3JpcHRvci5UWVBFX0VOVU06IHdpcmVfZm9ybWF0LkVudW1CeXRlU2l6ZSwKLSAgICBfRmllbGRE
ZXNjcmlwdG9yLlRZUEVfU0ZJWEVEMzI6IHdpcmVfZm9ybWF0LlNGaXhlZDMyQnl0ZVNpemUsCi0g
ICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX1NGSVhFRDY0OiB3aXJlX2Zvcm1hdC5TRml4ZWQ2NEJ5
dGVTaXplLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9TSU5UMzI6IHdpcmVfZm9ybWF0LlNJ
bnQzMkJ5dGVTaXplLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9TSU5UNjQ6IHdpcmVfZm9y
bWF0LlNJbnQ2NEJ5dGVTaXplCi0gICAgfQotCi0KLSMgTWFwcyBmcm9tIGZpZWxkIHR5cGVzIHRv
IGVuY29kZXIgY29uc3RydWN0b3JzLgotVFlQRV9UT19FTkNPREVSID0gewotICAgIF9GaWVsZERl
c2NyaXB0b3IuVFlQRV9ET1VCTEU6IGVuY29kZXIuRG91YmxlRW5jb2RlciwKLSAgICBfRmllbGRE
ZXNjcmlwdG9yLlRZUEVfRkxPQVQ6IGVuY29kZXIuRmxvYXRFbmNvZGVyLAotICAgIF9GaWVsZERl
c2NyaXB0b3IuVFlQRV9JTlQ2NDogZW5jb2Rlci5JbnQ2NEVuY29kZXIsCi0gICAgX0ZpZWxkRGVz
Y3JpcHRvci5UWVBFX1VJTlQ2NDogZW5jb2Rlci5VSW50NjRFbmNvZGVyLAotICAgIF9GaWVsZERl
c2NyaXB0b3IuVFlQRV9JTlQzMjogZW5jb2Rlci5JbnQzMkVuY29kZXIsCi0gICAgX0ZpZWxkRGVz
Y3JpcHRvci5UWVBFX0ZJWEVENjQ6IGVuY29kZXIuRml4ZWQ2NEVuY29kZXIsCi0gICAgX0ZpZWxk
RGVzY3JpcHRvci5UWVBFX0ZJWEVEMzI6IGVuY29kZXIuRml4ZWQzMkVuY29kZXIsCi0gICAgX0Zp
ZWxkRGVzY3JpcHRvci5UWVBFX0JPT0w6IGVuY29kZXIuQm9vbEVuY29kZXIsCi0gICAgX0ZpZWxk
RGVzY3JpcHRvci5UWVBFX1NUUklORzogZW5jb2Rlci5TdHJpbmdFbmNvZGVyLAotICAgIF9GaWVs
ZERlc2NyaXB0b3IuVFlQRV9HUk9VUDogZW5jb2Rlci5Hcm91cEVuY29kZXIsCi0gICAgX0ZpZWxk
RGVzY3JpcHRvci5UWVBFX01FU1NBR0U6IGVuY29kZXIuTWVzc2FnZUVuY29kZXIsCi0gICAgX0Zp
ZWxkRGVzY3JpcHRvci5UWVBFX0JZVEVTOiBlbmNvZGVyLkJ5dGVzRW5jb2RlciwKLSAgICBfRmll
bGREZXNjcmlwdG9yLlRZUEVfVUlOVDMyOiBlbmNvZGVyLlVJbnQzMkVuY29kZXIsCi0gICAgX0Zp
ZWxkRGVzY3JpcHRvci5UWVBFX0VOVU06IGVuY29kZXIuRW51bUVuY29kZXIsCi0gICAgX0ZpZWxk
RGVzY3JpcHRvci5UWVBFX1NGSVhFRDMyOiBlbmNvZGVyLlNGaXhlZDMyRW5jb2RlciwKLSAgICBf
RmllbGREZXNjcmlwdG9yLlRZUEVfU0ZJWEVENjQ6IGVuY29kZXIuU0ZpeGVkNjRFbmNvZGVyLAot
ICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9TSU5UMzI6IGVuY29kZXIuU0ludDMyRW5jb2RlciwK
LSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfU0lOVDY0OiBlbmNvZGVyLlNJbnQ2NEVuY29kZXIs
Ci0gICAgfQotCi0KLSMgTWFwcyBmcm9tIGZpZWxkIHR5cGVzIHRvIHNpemVyIGNvbnN0cnVjdG9y
cy4KLVRZUEVfVE9fU0laRVIgPSB7Ci0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0RPVUJMRTog
ZW5jb2Rlci5Eb3VibGVTaXplciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfRkxPQVQ6IGVu
Y29kZXIuRmxvYXRTaXplciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfSU5UNjQ6IGVuY29k
ZXIuSW50NjRTaXplciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfVUlOVDY0OiBlbmNvZGVy
LlVJbnQ2NFNpemVyLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9JTlQzMjogZW5jb2Rlci5J
bnQzMlNpemVyLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9GSVhFRDY0OiBlbmNvZGVyLkZp
eGVkNjRTaXplciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfRklYRUQzMjogZW5jb2Rlci5G
aXhlZDMyU2l6ZXIsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0JPT0w6IGVuY29kZXIuQm9v
bFNpemVyLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9TVFJJTkc6IGVuY29kZXIuU3RyaW5n
U2l6ZXIsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0dST1VQOiBlbmNvZGVyLkdyb3VwU2l6
ZXIsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX01FU1NBR0U6IGVuY29kZXIuTWVzc2FnZVNp
emVyLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9CWVRFUzogZW5jb2Rlci5CeXRlc1NpemVy
LAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9VSU5UMzI6IGVuY29kZXIuVUludDMyU2l6ZXIs
Ci0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0VOVU06IGVuY29kZXIuRW51bVNpemVyLAotICAg
IF9GaWVsZERlc2NyaXB0b3IuVFlQRV9TRklYRUQzMjogZW5jb2Rlci5TRml4ZWQzMlNpemVyLAot
ICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9TRklYRUQ2NDogZW5jb2Rlci5TRml4ZWQ2NFNpemVy
LAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9TSU5UMzI6IGVuY29kZXIuU0ludDMyU2l6ZXIs
Ci0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX1NJTlQ2NDogZW5jb2Rlci5TSW50NjRTaXplciwK
LSAgICB9Ci0KLQotIyBNYXBzIGZyb20gZmllbGQgdHlwZSB0byBhIGRlY29kZXIgY29uc3RydWN0
b3IuCi1UWVBFX1RPX0RFQ09ERVIgPSB7Ci0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0RPVUJM
RTogZGVjb2Rlci5Eb3VibGVEZWNvZGVyLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9GTE9B
VDogZGVjb2Rlci5GbG9hdERlY29kZXIsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0lOVDY0
OiBkZWNvZGVyLkludDY0RGVjb2RlciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfVUlOVDY0
OiBkZWNvZGVyLlVJbnQ2NERlY29kZXIsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0lOVDMy
OiBkZWNvZGVyLkludDMyRGVjb2RlciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfRklYRUQ2
NDogZGVjb2Rlci5GaXhlZDY0RGVjb2RlciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfRklY
RUQzMjogZGVjb2Rlci5GaXhlZDMyRGVjb2RlciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVf
Qk9PTDogZGVjb2Rlci5Cb29sRGVjb2RlciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfU1RS
SU5HOiBkZWNvZGVyLlN0cmluZ0RlY29kZXIsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0dS
T1VQOiBkZWNvZGVyLkdyb3VwRGVjb2RlciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfTUVT
U0FHRTogZGVjb2Rlci5NZXNzYWdlRGVjb2RlciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVf
QllURVM6IGRlY29kZXIuQnl0ZXNEZWNvZGVyLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9V
SU5UMzI6IGRlY29kZXIuVUludDMyRGVjb2RlciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVf
RU5VTTogZGVjb2Rlci5FbnVtRGVjb2RlciwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfU0ZJ
WEVEMzI6IGRlY29kZXIuU0ZpeGVkMzJEZWNvZGVyLAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQ
RV9TRklYRUQ2NDogZGVjb2Rlci5TRml4ZWQ2NERlY29kZXIsCi0gICAgX0ZpZWxkRGVzY3JpcHRv
ci5UWVBFX1NJTlQzMjogZGVjb2Rlci5TSW50MzJEZWNvZGVyLAotICAgIF9GaWVsZERlc2NyaXB0
b3IuVFlQRV9TSU5UNjQ6IGRlY29kZXIuU0ludDY0RGVjb2RlciwKLSAgICB9Ci0KLSMgTWFwcyBm
cm9tIGZpZWxkIHR5cGUgdG8gZXhwZWN0ZWQgd2lyZXR5cGUuCi1GSUVMRF9UWVBFX1RPX1dJUkVf
VFlQRSA9IHsKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfRE9VQkxFOiB3aXJlX2Zvcm1hdC5X
SVJFVFlQRV9GSVhFRDY0LAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9GTE9BVDogd2lyZV9m
b3JtYXQuV0lSRVRZUEVfRklYRUQzMiwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfSU5UNjQ6
IHdpcmVfZm9ybWF0LldJUkVUWVBFX1ZBUklOVCwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVf
VUlOVDY0OiB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9WQVJJTlQsCi0gICAgX0ZpZWxkRGVzY3JpcHRv
ci5UWVBFX0lOVDMyOiB3aXJlX2Zvcm1hdC5XSVJFVFlQRV9WQVJJTlQsCi0gICAgX0ZpZWxkRGVz
Y3JpcHRvci5UWVBFX0ZJWEVENjQ6IHdpcmVfZm9ybWF0LldJUkVUWVBFX0ZJWEVENjQsCi0gICAg
X0ZpZWxkRGVzY3JpcHRvci5UWVBFX0ZJWEVEMzI6IHdpcmVfZm9ybWF0LldJUkVUWVBFX0ZJWEVE
MzIsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX0JPT0w6IHdpcmVfZm9ybWF0LldJUkVUWVBF
X1ZBUklOVCwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfU1RSSU5HOgotICAgICAgd2lyZV9m
b3JtYXQuV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZ
UEVfR1JPVVA6IHdpcmVfZm9ybWF0LldJUkVUWVBFX1NUQVJUX0dST1VQLAotICAgIF9GaWVsZERl
c2NyaXB0b3IuVFlQRV9NRVNTQUdFOgotICAgICAgd2lyZV9mb3JtYXQuV0lSRVRZUEVfTEVOR1RI
X0RFTElNSVRFRCwKLSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfQllURVM6Ci0gICAgICB3aXJl
X2Zvcm1hdC5XSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELAotICAgIF9GaWVsZERlc2NyaXB0b3Iu
VFlQRV9VSU5UMzI6IHdpcmVfZm9ybWF0LldJUkVUWVBFX1ZBUklOVCwKLSAgICBfRmllbGREZXNj
cmlwdG9yLlRZUEVfRU5VTTogd2lyZV9mb3JtYXQuV0lSRVRZUEVfVkFSSU5ULAotICAgIF9GaWVs
ZERlc2NyaXB0b3IuVFlQRV9TRklYRUQzMjogd2lyZV9mb3JtYXQuV0lSRVRZUEVfRklYRUQzMiwK
LSAgICBfRmllbGREZXNjcmlwdG9yLlRZUEVfU0ZJWEVENjQ6IHdpcmVfZm9ybWF0LldJUkVUWVBF
X0ZJWEVENjQsCi0gICAgX0ZpZWxkRGVzY3JpcHRvci5UWVBFX1NJTlQzMjogd2lyZV9mb3JtYXQu
V0lSRVRZUEVfVkFSSU5ULAotICAgIF9GaWVsZERlc2NyaXB0b3IuVFlQRV9TSU5UNjQ6IHdpcmVf
Zm9ybWF0LldJUkVUWVBFX1ZBUklOVCwKLSAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUv
cHJvdG9idWYvaW50ZXJuYWwvdW5rbm93bl9maWVsZHNfdGVzdC5weSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9w
cm90b2J1Zi9pbnRlcm5hbC91bmtub3duX2ZpZWxkc190ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCA4NDA3M2YxYzUzNDRmOTM0ZDRkZWY5OTlmYTIwOTcwMGZjN2RkMzlkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2ds
ZS9wcm90b2J1Zi9pbnRlcm5hbC91bmtub3duX2ZpZWxkc190ZXN0LnB5CisrKyAvZGV2L251bGwK
QEAgLTEsMzIwICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLSMgLSotIGNvZGluZzog
dXRmLTggLSotCi0jCi0jIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlv
bi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlRlc3QgZm9yIHByZXNlcnZhdGlvbiBvZiB1bmtub3du
IGZpZWxkcyBpbiB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24uIiIiCi0KLV9fYXV0aG9y
X18gPSAnYm9oZGFua0Bnb29nbGUuY29tIChCb2hkYW4gS292YWwpJwotCi10cnk6Ci0gIGltcG9y
dCB1bml0dGVzdDIgYXMgdW5pdHRlc3QgICNQWTI2Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gIGlt
cG9ydCB1bml0dGVzdAotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHVuaXR0ZXN0X21zZXRf
cGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdW5pdHRlc3RfcGIyCi1mcm9tIGdvb2ds
ZS5wcm90b2J1ZiBpbXBvcnQgdW5pdHRlc3RfcHJvdG8zX2FyZW5hX3BiMgotZnJvbSBnb29nbGUu
cHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IGFwaV9pbXBsZW1lbnRhdGlvbgotZnJvbSBnb29nbGUu
cHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IGVuY29kZXIKLWZyb20gZ29vZ2xlLnByb3RvYnVmLmlu
dGVybmFsIGltcG9ydCBtZXNzYWdlX3NldF9leHRlbnNpb25zX3BiMgotZnJvbSBnb29nbGUucHJv
dG9idWYuaW50ZXJuYWwgaW1wb3J0IG1pc3NpbmdfZW51bV92YWx1ZXNfcGIyCi1mcm9tIGdvb2ds
ZS5wcm90b2J1Zi5pbnRlcm5hbCBpbXBvcnQgdGVzdF91dGlsCi1mcm9tIGdvb2dsZS5wcm90b2J1
Zi5pbnRlcm5hbCBpbXBvcnQgdHlwZV9jaGVja2VycwotCi0KLWRlZiBTa2lwSWZDcHBJbXBsZW1l
bnRhdGlvbihmdW5jKToKLSAgcmV0dXJuIHVuaXR0ZXN0LnNraXBJZigKLSAgICAgIGFwaV9pbXBs
ZW1lbnRhdGlvbi5UeXBlKCkgPT0gJ2NwcCcgYW5kIGFwaV9pbXBsZW1lbnRhdGlvbi5WZXJzaW9u
KCkgPT0gMiwKLSAgICAgICdDKysgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgZXhwb3NlIHVua25v
d24gZmllbGRzIHRvIFB5dGhvbicpKGZ1bmMpCi0KLQotY2xhc3MgVW5rbm93bkZpZWxkc1Rlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLmRlc2Ny
aXB0b3IgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzLkRFU0NSSVBUT1IKLSAgICBzZWxmLmFs
bF9maWVsZHMgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICB0ZXN0X3V0aWwuU2V0
QWxsRmllbGRzKHNlbGYuYWxsX2ZpZWxkcykKLSAgICBzZWxmLmFsbF9maWVsZHNfZGF0YSA9IHNl
bGYuYWxsX2ZpZWxkcy5TZXJpYWxpemVUb1N0cmluZygpCi0gICAgc2VsZi5lbXB0eV9tZXNzYWdl
ID0gdW5pdHRlc3RfcGIyLlRlc3RFbXB0eU1lc3NhZ2UoKQotICAgIHNlbGYuZW1wdHlfbWVzc2Fn
ZS5QYXJzZUZyb21TdHJpbmcoc2VsZi5hbGxfZmllbGRzX2RhdGEpCi0KLSAgZGVmIHRlc3RTZXJp
YWxpemUoc2VsZik6Ci0gICAgZGF0YSA9IHNlbGYuZW1wdHlfbWVzc2FnZS5TZXJpYWxpemVUb1N0
cmluZygpCi0KLSAgICAjIERvbid0IHVzZSBhc3NlcnRFcXVhbCBiZWNhdXNlIHdlIGRvbid0IHdh
bnQgdG8gZHVtcCByYXcgYmluYXJ5IGRhdGEgdG8KLSAgICAjIHN0ZG91dC4KLSAgICBzZWxmLmFz
c2VydFRydWUoZGF0YSA9PSBzZWxmLmFsbF9maWVsZHNfZGF0YSkKLQotICBkZWYgdGVzdFNlcmlh
bGl6ZVByb3RvMyhzZWxmKToKLSAgICAjIFZlcmlmeSB0aGF0IHByb3RvMyBkb2Vzbid0IHByZXNl
cnZlIHVua25vd24gZmllbGRzLgotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9wcm90bzNfYXJlbmFf
cGIyLlRlc3RFbXB0eU1lc3NhZ2UoKQotICAgIG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKHNlbGYu
YWxsX2ZpZWxkc19kYXRhKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKG1lc3NhZ2UuU2Vy
aWFsaXplVG9TdHJpbmcoKSkpCi0KLSAgZGVmIHRlc3RCeXRlU2l6ZShzZWxmKToKLSAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYuYWxsX2ZpZWxkcy5CeXRlU2l6ZSgpLCBzZWxmLmVtcHR5X21lc3Nh
Z2UuQnl0ZVNpemUoKSkKLQotICBkZWYgdGVzdExpc3RGaWVsZHMoc2VsZik6Ci0gICAgIyBNYWtl
IHN1cmUgTGlzdEZpZWxkcyBkb2Vzbid0IHJldHVybiB1bmtub3duIGZpZWxkcy4KLSAgICBzZWxm
LmFzc2VydEVxdWFsKDAsIGxlbihzZWxmLmVtcHR5X21lc3NhZ2UuTGlzdEZpZWxkcygpKSkKLQot
ICBkZWYgdGVzdFNlcmlhbGl6ZU1lc3NhZ2VTZXRXaXJlRm9ybWF0VW5rbm93bkV4dGVuc2lvbihz
ZWxmKToKLSAgICAjIENyZWF0ZSBhIG1lc3NhZ2UgdXNpbmcgdGhlIG1lc3NhZ2Ugc2V0IHdpcmUg
Zm9ybWF0IHdpdGggYW4gdW5rbm93bgotICAgICMgbWVzc2FnZS4KLSAgICByYXcgPSB1bml0dGVz
dF9tc2V0X3BiMi5SYXdNZXNzYWdlU2V0KCkKLQotICAgICMgQWRkIGFuIHVua25vd24gZXh0ZW5z
aW9uLgotICAgIGl0ZW0gPSByYXcuaXRlbS5hZGQoKQotICAgIGl0ZW0udHlwZV9pZCA9IDk4NDE4
NjAzCi0gICAgbWVzc2FnZTEgPSBtZXNzYWdlX3NldF9leHRlbnNpb25zX3BiMi5UZXN0TWVzc2Fn
ZVNldEV4dGVuc2lvbjEoKQotICAgIG1lc3NhZ2UxLmkgPSAxMjM0NQotICAgIGl0ZW0ubWVzc2Fn
ZSA9IG1lc3NhZ2UxLlNlcmlhbGl6ZVRvU3RyaW5nKCkKLQotICAgIHNlcmlhbGl6ZWQgPSByYXcu
U2VyaWFsaXplVG9TdHJpbmcoKQotCi0gICAgIyBQYXJzZSBtZXNzYWdlIHVzaW5nIHRoZSBtZXNz
YWdlIHNldCB3aXJlIGZvcm1hdC4KLSAgICBwcm90byA9IG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbnNf
cGIyLlRlc3RNZXNzYWdlU2V0KCkKLSAgICBwcm90by5NZXJnZUZyb21TdHJpbmcoc2VyaWFsaXpl
ZCkKLQotICAgICMgVmVyaWZ5IHRoYXQgdGhlIHVua25vd24gZXh0ZW5zaW9uIGlzIHNlcmlhbGl6
ZWQgdW5jaGFuZ2VkCi0gICAgcmVzZXJpYWxpemVkID0gcHJvdG8uU2VyaWFsaXplVG9TdHJpbmco
KQotICAgIG5ld19yYXcgPSB1bml0dGVzdF9tc2V0X3BiMi5SYXdNZXNzYWdlU2V0KCkKLSAgICBu
ZXdfcmF3Lk1lcmdlRnJvbVN0cmluZyhyZXNlcmlhbGl6ZWQpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bChyYXcsIG5ld19yYXcpCi0KLSAgZGVmIHRlc3RFcXVhbHMoc2VsZik6Ci0gICAgbWVzc2FnZSA9
IHVuaXR0ZXN0X3BiMi5UZXN0RW1wdHlNZXNzYWdlKCkKLSAgICBtZXNzYWdlLlBhcnNlRnJvbVN0
cmluZyhzZWxmLmFsbF9maWVsZHNfZGF0YSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW1w
dHlfbWVzc2FnZSwgbWVzc2FnZSkKLQotICAgIHNlbGYuYWxsX2ZpZWxkcy5DbGVhckZpZWxkKCdv
cHRpb25hbF9zdHJpbmcnKQotICAgIG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKHNlbGYuYWxsX2Zp
ZWxkcy5TZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5l
bXB0eV9tZXNzYWdlLCBtZXNzYWdlKQotCi0gIGRlZiB0ZXN0RGlzY2FyZFVua25vd25GaWVsZHMo
c2VsZik6Ci0gICAgc2VsZi5lbXB0eV9tZXNzYWdlLkRpc2NhcmRVbmtub3duRmllbGRzKCkKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKGInJywgc2VsZi5lbXB0eV9tZXNzYWdlLlNlcmlhbGl6ZVRvU3Ry
aW5nKCkpCi0gICAgIyBUZXN0IG1lc3NhZ2UgZmllbGQgYW5kIHJlcGVhdGVkIG1lc3NhZ2UgZmll
bGQuCi0gICAgbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlwZXMoKQotICAgIG90aGVy
X21lc3NhZ2UgPSB1bml0dGVzdF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBvdGhlcl9tZXNzYWdl
Lm9wdGlvbmFsX3N0cmluZyA9ICdkaXNjYXJkJwotICAgIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKAotICAgICAgICBvdGhlcl9tZXNzYWdlLlNlcmlhbGl6
ZVRvU3RyaW5nKCkpCi0gICAgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5hZGQoKS5Q
YXJzZUZyb21TdHJpbmcoCi0gICAgICAgIG90aGVyX21lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmco
KSkKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKAotICAgICAgICBiJycsIG1lc3NhZ2Uub3B0aW9u
YWxfbmVzdGVkX21lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoKSkKLSAgICBzZWxmLmFzc2VydE5v
dEVxdWFsKAotICAgICAgICBiJycsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VbMF0u
U2VyaWFsaXplVG9TdHJpbmcoKSkKLSAgICBtZXNzYWdlLkRpc2NhcmRVbmtub3duRmllbGRzKCkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2Fn
ZS5TZXJpYWxpemVUb1N0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIGIn
JywgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZVswXS5TZXJpYWxpemVUb1N0cmluZygp
KQotCi0KLWNsYXNzIFVua25vd25GaWVsZHNBY2Nlc3NvcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5kZXNjcmlwdG9yID0gdW5pdHRlc3Rf
cGIyLlRlc3RBbGxUeXBlcy5ERVNDUklQVE9SCi0gICAgc2VsZi5hbGxfZmllbGRzID0gdW5pdHRl
c3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgdGVzdF91dGlsLlNldEFsbEZpZWxkcyhzZWxmLmFs
bF9maWVsZHMpCi0gICAgc2VsZi5hbGxfZmllbGRzX2RhdGEgPSBzZWxmLmFsbF9maWVsZHMuU2Vy
aWFsaXplVG9TdHJpbmcoKQotICAgIHNlbGYuZW1wdHlfbWVzc2FnZSA9IHVuaXR0ZXN0X3BiMi5U
ZXN0RW1wdHlNZXNzYWdlKCkKLSAgICBzZWxmLmVtcHR5X21lc3NhZ2UuUGFyc2VGcm9tU3RyaW5n
KHNlbGYuYWxsX2ZpZWxkc19kYXRhKQotICAgIGlmIGFwaV9pbXBsZW1lbnRhdGlvbi5UeXBlKCkg
IT0gJ2NwcCc6Ci0gICAgICAjIF91bmtub3duX2ZpZWxkcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWwuCi0gICAgICBzZWxmLnVua25vd25fZmllbGRzID0gc2VsZi5lbXB0eV9tZXNzYWdlLl91
bmtub3duX2ZpZWxkcwotCi0gICMgQWxsIHRoZSB0ZXN0cyB0aGF0IHVzZSBHZXRGaWVsZCgpIGNo
ZWNrIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUKLSAgIyBQeXRob24gaW1wbGVtZW50
YXRpb24sIHdoaWNoIHN0b3JlcyB1bmtub3duIGZpZWxkcyBhcyBzZXJpYWxpemVkIHN0cmluZ3Mu
Ci0gICMgVGhlc2UgdGVzdHMgYXJlIHNraXBwZWQgYnkgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbjog
aXQncyBlbm91Z2ggdG8gY2hlY2sgdGhhdAotICAjIHRoZSBtZXNzYWdlIGlzIGNvcnJlY3RseSBz
ZXJpYWxpemVkLgotCi0gIGRlZiBHZXRGaWVsZChzZWxmLCBuYW1lKToKLSAgICBmaWVsZF9kZXNj
cmlwdG9yID0gc2VsZi5kZXNjcmlwdG9yLmZpZWxkc19ieV9uYW1lW25hbWVdCi0gICAgd2lyZV90
eXBlID0gdHlwZV9jaGVja2Vycy5GSUVMRF9UWVBFX1RPX1dJUkVfVFlQRVtmaWVsZF9kZXNjcmlw
dG9yLnR5cGVdCi0gICAgZmllbGRfdGFnID0gZW5jb2Rlci5UYWdCeXRlcyhmaWVsZF9kZXNjcmlw
dG9yLm51bWJlciwgd2lyZV90eXBlKQotICAgIHJlc3VsdF9kaWN0ID0ge30KLSAgICBmb3IgdGFn
X2J5dGVzLCB2YWx1ZSBpbiBzZWxmLnVua25vd25fZmllbGRzOgotICAgICAgaWYgdGFnX2J5dGVz
ID09IGZpZWxkX3RhZzoKLSAgICAgICAgZGVjb2RlciA9IHVuaXR0ZXN0X3BiMi5UZXN0QWxsVHlw
ZXMuX2RlY29kZXJzX2J5X3RhZ1t0YWdfYnl0ZXNdWzBdCi0gICAgICAgIGRlY29kZXIodmFsdWUs
IDAsIGxlbih2YWx1ZSksIHNlbGYuYWxsX2ZpZWxkcywgcmVzdWx0X2RpY3QpCi0gICAgcmV0dXJu
IHJlc3VsdF9kaWN0W2ZpZWxkX2Rlc2NyaXB0b3JdCi0KLSAgQFNraXBJZkNwcEltcGxlbWVudGF0
aW9uCi0gIGRlZiB0ZXN0RW51bShzZWxmKToKLSAgICB2YWx1ZSA9IHNlbGYuR2V0RmllbGQoJ29w
dGlvbmFsX25lc3RlZF9lbnVtJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYWxsX2ZpZWxk
cy5vcHRpb25hbF9uZXN0ZWRfZW51bSwgdmFsdWUpCi0KLSAgQFNraXBJZkNwcEltcGxlbWVudGF0
aW9uCi0gIGRlZiB0ZXN0UmVwZWF0ZWRFbnVtKHNlbGYpOgotICAgIHZhbHVlID0gc2VsZi5HZXRG
aWVsZCgncmVwZWF0ZWRfbmVzdGVkX2VudW0nKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5h
bGxfZmllbGRzLnJlcGVhdGVkX25lc3RlZF9lbnVtLCB2YWx1ZSkKLQotICBAU2tpcElmQ3BwSW1w
bGVtZW50YXRpb24KLSAgZGVmIHRlc3RWYXJpbnQoc2VsZik6Ci0gICAgdmFsdWUgPSBzZWxmLkdl
dEZpZWxkKCdvcHRpb25hbF9pbnQzMicpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFsbF9m
aWVsZHMub3B0aW9uYWxfaW50MzIsIHZhbHVlKQotCi0gIEBTa2lwSWZDcHBJbXBsZW1lbnRhdGlv
bgotICBkZWYgdGVzdEZpeGVkMzIoc2VsZik6Ci0gICAgdmFsdWUgPSBzZWxmLkdldEZpZWxkKCdv
cHRpb25hbF9maXhlZDMyJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYWxsX2ZpZWxkcy5v
cHRpb25hbF9maXhlZDMyLCB2YWx1ZSkKLQotICBAU2tpcElmQ3BwSW1wbGVtZW50YXRpb24KLSAg
ZGVmIHRlc3RGaXhlZDY0KHNlbGYpOgotICAgIHZhbHVlID0gc2VsZi5HZXRGaWVsZCgnb3B0aW9u
YWxfZml4ZWQ2NCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFsbF9maWVsZHMub3B0aW9u
YWxfZml4ZWQ2NCwgdmFsdWUpCi0KLSAgQFNraXBJZkNwcEltcGxlbWVudGF0aW9uCi0gIGRlZiB0
ZXN0TGVuZ3RoRGVsaW1pdGVkKHNlbGYpOgotICAgIHZhbHVlID0gc2VsZi5HZXRGaWVsZCgnb3B0
aW9uYWxfc3RyaW5nJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYWxsX2ZpZWxkcy5vcHRp
b25hbF9zdHJpbmcsIHZhbHVlKQotCi0gIEBTa2lwSWZDcHBJbXBsZW1lbnRhdGlvbgotICBkZWYg
dGVzdEdyb3VwKHNlbGYpOgotICAgIHZhbHVlID0gc2VsZi5HZXRGaWVsZCgnb3B0aW9uYWxncm91
cCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFsbF9maWVsZHMub3B0aW9uYWxncm91cCwg
dmFsdWUpCi0KLSAgZGVmIHRlc3RDb3B5RnJvbShzZWxmKToKLSAgICBtZXNzYWdlID0gdW5pdHRl
c3RfcGIyLlRlc3RFbXB0eU1lc3NhZ2UoKQotICAgIG1lc3NhZ2UuQ29weUZyb20oc2VsZi5lbXB0
eV9tZXNzYWdlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZS5TZXJpYWxpemVUb1N0cmlu
ZygpLCBzZWxmLmFsbF9maWVsZHNfZGF0YSkKLQotICBkZWYgdGVzdE1lcmdlRnJvbShzZWxmKToK
LSAgICBtZXNzYWdlID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgbWVzc2FnZS5v
cHRpb25hbF9pbnQzMiA9IDEKLSAgICBtZXNzYWdlLm9wdGlvbmFsX3VpbnQzMiA9IDIKLSAgICBz
b3VyY2UgPSB1bml0dGVzdF9wYjIuVGVzdEVtcHR5TWVzc2FnZSgpCi0gICAgc291cmNlLlBhcnNl
RnJvbVN0cmluZyhtZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCi0KLSAgICBtZXNzYWdlLkNs
ZWFyRmllbGQoJ29wdGlvbmFsX2ludDMyJykKLSAgICBtZXNzYWdlLm9wdGlvbmFsX2ludDY0ID0g
MwotICAgIG1lc3NhZ2Uub3B0aW9uYWxfdWludDMyID0gNAotICAgIGRlc3RpbmF0aW9uID0gdW5p
dHRlc3RfcGIyLlRlc3RFbXB0eU1lc3NhZ2UoKQotICAgIGRlc3RpbmF0aW9uLlBhcnNlRnJvbVN0
cmluZyhtZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCi0KLSAgICBkZXN0aW5hdGlvbi5NZXJn
ZUZyb20oc291cmNlKQotICAgICMgQ2hlY2sgdGhhdCB0aGUgZmllbGRzIHdoZXJlIGNvcnJlY3Rs
eSBtZXJnZWQsIGV2ZW4gc3RvcmVkIGluIHRoZSB1bmtub3duCi0gICAgIyBmaWVsZHMgc2V0Lgot
ICAgIG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKGRlc3RpbmF0aW9uLlNlcmlhbGl6ZVRvU3RyaW5n
KCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLm9wdGlvbmFsX2ludDMyLCAxKQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZS5vcHRpb25hbF91aW50MzIsIDIpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbChtZXNzYWdlLm9wdGlvbmFsX2ludDY0LCAzKQotCi0gIGRlZiB0ZXN0Q2xlYXIo
c2VsZik6Ci0gICAgc2VsZi5lbXB0eV9tZXNzYWdlLkNsZWFyKCkKLSAgICAjIEFsbCBjbGVhcmVk
LCBldmVuIHVua25vd24gZmllbGRzLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbXB0eV9t
ZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCksIGInJykKLQotICBkZWYgdGVzdFVua25vd25FeHRl
bnNpb25zKHNlbGYpOgotICAgIG1lc3NhZ2UgPSB1bml0dGVzdF9wYjIuVGVzdEVtcHR5TWVzc2Fn
ZVdpdGhFeHRlbnNpb25zKCkKLSAgICBtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhzZWxmLmFsbF9m
aWVsZHNfZGF0YSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UuU2VyaWFsaXplVG9TdHJp
bmcoKSwgc2VsZi5hbGxfZmllbGRzX2RhdGEpCi0KLQotY2xhc3MgVW5rbm93bkVudW1WYWx1ZXNU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5k
ZXNjcmlwdG9yID0gbWlzc2luZ19lbnVtX3ZhbHVlc19wYjIuVGVzdEVudW1WYWx1ZXMuREVTQ1JJ
UFRPUgotCi0gICAgc2VsZi5tZXNzYWdlID0gbWlzc2luZ19lbnVtX3ZhbHVlc19wYjIuVGVzdEVu
dW1WYWx1ZXMoKQotICAgIHNlbGYubWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfZW51bSA9ICgKLSAg
ICAgIG1pc3NpbmdfZW51bV92YWx1ZXNfcGIyLlRlc3RFbnVtVmFsdWVzLlpFUk8pCi0gICAgc2Vs
Zi5tZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9lbnVtLmV4dGVuZChbCi0gICAgICBtaXNzaW5nX2Vu
dW1fdmFsdWVzX3BiMi5UZXN0RW51bVZhbHVlcy5aRVJPLAotICAgICAgbWlzc2luZ19lbnVtX3Zh
bHVlc19wYjIuVGVzdEVudW1WYWx1ZXMuT05FLAotICAgICAgXSkKLSAgICBzZWxmLm1lc3NhZ2Uu
cGFja2VkX25lc3RlZF9lbnVtLmV4dGVuZChbCi0gICAgICBtaXNzaW5nX2VudW1fdmFsdWVzX3Bi
Mi5UZXN0RW51bVZhbHVlcy5aRVJPLAotICAgICAgbWlzc2luZ19lbnVtX3ZhbHVlc19wYjIuVGVz
dEVudW1WYWx1ZXMuT05FLAotICAgICAgXSkKLSAgICBzZWxmLm1lc3NhZ2VfZGF0YSA9IHNlbGYu
bWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygpCi0gICAgc2VsZi5taXNzaW5nX21lc3NhZ2UgPSBt
aXNzaW5nX2VudW1fdmFsdWVzX3BiMi5UZXN0TWlzc2luZ0VudW1WYWx1ZXMoKQotICAgIHNlbGYu
bWlzc2luZ19tZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhzZWxmLm1lc3NhZ2VfZGF0YSkKLSAgICBp
ZiBhcGlfaW1wbGVtZW50YXRpb24uVHlwZSgpICE9ICdjcHAnOgotICAgICAgIyBfdW5rbm93bl9m
aWVsZHMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgotICAgICAgc2VsZi51bmtub3duX2Zp
ZWxkcyA9IHNlbGYubWlzc2luZ19tZXNzYWdlLl91bmtub3duX2ZpZWxkcwotCi0gICMgQWxsIHRo
ZSB0ZXN0cyB0aGF0IHVzZSBHZXRGaWVsZCgpIGNoZWNrIGFuIGltcGxlbWVudGF0aW9uIGRldGFp
bCBvZiB0aGUKLSAgIyBQeXRob24gaW1wbGVtZW50YXRpb24sIHdoaWNoIHN0b3JlcyB1bmtub3du
IGZpZWxkcyBhcyBzZXJpYWxpemVkIHN0cmluZ3MuCi0gICMgVGhlc2UgdGVzdHMgYXJlIHNraXBw
ZWQgYnkgdGhlIEMrKyBpbXBsZW1lbnRhdGlvbjogaXQncyBlbm91Z2ggdG8gY2hlY2sgdGhhdAot
ICAjIHRoZSBtZXNzYWdlIGlzIGNvcnJlY3RseSBzZXJpYWxpemVkLgotCi0gIGRlZiBHZXRGaWVs
ZChzZWxmLCBuYW1lKToKLSAgICBmaWVsZF9kZXNjcmlwdG9yID0gc2VsZi5kZXNjcmlwdG9yLmZp
ZWxkc19ieV9uYW1lW25hbWVdCi0gICAgd2lyZV90eXBlID0gdHlwZV9jaGVja2Vycy5GSUVMRF9U
WVBFX1RPX1dJUkVfVFlQRVtmaWVsZF9kZXNjcmlwdG9yLnR5cGVdCi0gICAgZmllbGRfdGFnID0g
ZW5jb2Rlci5UYWdCeXRlcyhmaWVsZF9kZXNjcmlwdG9yLm51bWJlciwgd2lyZV90eXBlKQotICAg
IHJlc3VsdF9kaWN0ID0ge30KLSAgICBmb3IgdGFnX2J5dGVzLCB2YWx1ZSBpbiBzZWxmLnVua25v
d25fZmllbGRzOgotICAgICAgaWYgdGFnX2J5dGVzID09IGZpZWxkX3RhZzoKLSAgICAgICAgZGVj
b2RlciA9IG1pc3NpbmdfZW51bV92YWx1ZXNfcGIyLlRlc3RFbnVtVmFsdWVzLl9kZWNvZGVyc19i
eV90YWdbCi0gICAgICAgICAgdGFnX2J5dGVzXVswXQotICAgICAgICBkZWNvZGVyKHZhbHVlLCAw
LCBsZW4odmFsdWUpLCBzZWxmLm1lc3NhZ2UsIHJlc3VsdF9kaWN0KQotICAgIHJldHVybiByZXN1
bHRfZGljdFtmaWVsZF9kZXNjcmlwdG9yXQotCi0gIGRlZiB0ZXN0VW5rbm93blBhcnNlTWlzbWF0
Y2hFbnVtVmFsdWUoc2VsZik6Ci0gICAganVzdF9zdHJpbmcgPSBtaXNzaW5nX2VudW1fdmFsdWVz
X3BiMi5KdXN0U3RyaW5nKCkKLSAgICBqdXN0X3N0cmluZy5kdW1teSA9ICdibGFoJwotCi0gICAg
bWlzc2luZyA9IG1pc3NpbmdfZW51bV92YWx1ZXNfcGIyLlRlc3RFbnVtVmFsdWVzKCkKLSAgICAj
IFRoZSBwYXJzZSBpcyBpbnZhbGlkLCBzdG9yaW5nIHRoZSBzdHJpbmcgcHJvdG8gaW50byB0aGUg
c2V0IG9mCi0gICAgIyB1bmtub3duIGZpZWxkcy4KLSAgICBtaXNzaW5nLlBhcnNlRnJvbVN0cmlu
ZyhqdXN0X3N0cmluZy5TZXJpYWxpemVUb1N0cmluZygpKQotCi0gICAgIyBGZXRjaGluZyB0aGUg
ZW51bSBmaWVsZCBzaG91bGRuJ3QgY3Jhc2gsIGluc3RlYWQgcmV0dXJuaW5nIHRoZQotICAgICMg
ZGVmYXVsdCB2YWx1ZS4KLSAgICBzZWxmLmFzc2VydEVxdWFsKG1pc3Npbmcub3B0aW9uYWxfbmVz
dGVkX2VudW0sIDApCi0KLSAgQFNraXBJZkNwcEltcGxlbWVudGF0aW9uCi0gIGRlZiB0ZXN0VW5r
bm93bkVudW1WYWx1ZShzZWxmKToKLSAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWlzc2luZ19t
ZXNzYWdlLkhhc0ZpZWxkKCdvcHRpb25hbF9uZXN0ZWRfZW51bScpKQotICAgIHZhbHVlID0gc2Vs
Zi5HZXRGaWVsZCgnb3B0aW9uYWxfbmVzdGVkX2VudW0nKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tZXNzYWdlLm9wdGlvbmFsX25lc3RlZF9lbnVtLCB2YWx1ZSkKLQotICBAU2tpcElmQ3Bw
SW1wbGVtZW50YXRpb24KLSAgZGVmIHRlc3RVbmtub3duUmVwZWF0ZWRFbnVtVmFsdWUoc2VsZik6
Ci0gICAgdmFsdWUgPSBzZWxmLkdldEZpZWxkKCdyZXBlYXRlZF9uZXN0ZWRfZW51bScpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLm1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW0sIHZhbHVl
KQotCi0gIEBTa2lwSWZDcHBJbXBsZW1lbnRhdGlvbgotICBkZWYgdGVzdFVua25vd25QYWNrZWRF
bnVtVmFsdWUoc2VsZik6Ci0gICAgdmFsdWUgPSBzZWxmLkdldEZpZWxkKCdwYWNrZWRfbmVzdGVk
X2VudW0nKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tZXNzYWdlLnBhY2tlZF9uZXN0ZWRf
ZW51bSwgdmFsdWUpCi0KLSAgZGVmIHRlc3RSb3VuZFRyaXAoc2VsZik6Ci0gICAgbmV3X21lc3Nh
Z2UgPSBtaXNzaW5nX2VudW1fdmFsdWVzX3BiMi5UZXN0RW51bVZhbHVlcygpCi0gICAgbmV3X21l
c3NhZ2UuUGFyc2VGcm9tU3RyaW5nKHNlbGYubWlzc2luZ19tZXNzYWdlLlNlcmlhbGl6ZVRvU3Ry
aW5nKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1lc3NhZ2UsIG5ld19tZXNzYWdlKQot
Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3dlbGxfa25vd25fdHlwZXMucHkg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvd2VsbF9rbm93bl90eXBlcy5weQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1ZGZmZDBmYzUzZDQ3Mjg2NDdjMWU4NTUxYWE5
ZDY3Njc4MmM4ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvd2VsbF9rbm93bl90eXBlcy5weQorKysg
L2Rldi9udWxsCkBAIC0xLDcyNCArMCwwIEBACi0jIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIkNvbnRhaW5zIHdlbGwga25v
d24gY2xhc3Nlcy4KLQotVGhpcyBmaWxlcyBkZWZpbmVzIHdlbGwga25vd24gY2xhc3NlcyB3aGlj
aCBuZWVkIGV4dHJhIG1haW50ZW5hbmNlIGluY2x1ZGluZzoKLSAgLSBBbnkKLSAgLSBEdXJhdGlv
bgotICAtIEZpZWxkTWFzawotICAtIFN0cnVjdAotICAtIFRpbWVzdGFtcAotIiIiCi0KLV9fYXV0
aG9yX18gPSAnamllbHVvQGdvb2dsZS5jb20gKEppZSBMdW8pJwotCi1mcm9tIGRhdGV0aW1lIGlt
cG9ydCBkYXRldGltZQotZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCi1pbXBvcnQgc2l4
Ci0KLWZyb20gZ29vZ2xlLnByb3RvYnVmLmRlc2NyaXB0b3IgaW1wb3J0IEZpZWxkRGVzY3JpcHRv
cgotCi1fVElNRVNUQU1QRk9NQVQgPSAnJVktJW0tJWRUJUg6JU06JVMnCi1fTkFOT1NfUEVSX1NF
Q09ORCA9IDEwMDAwMDAwMDAKLV9OQU5PU19QRVJfTUlMTElTRUNPTkQgPSAxMDAwMDAwCi1fTkFO
T1NfUEVSX01JQ1JPU0VDT05EID0gMTAwMAotX01JTExJU19QRVJfU0VDT05EID0gMTAwMAotX01J
Q1JPU19QRVJfU0VDT05EID0gMTAwMDAwMAotX1NFQ09ORFNfUEVSX0RBWSA9IDI0ICogMzYwMAot
Ci0KLWNsYXNzIEVycm9yKEV4Y2VwdGlvbik6Ci0gICIiIlRvcC1sZXZlbCBtb2R1bGUgZXJyb3Iu
IiIiCi0KLQotY2xhc3MgUGFyc2VFcnJvcihFcnJvcik6Ci0gICIiIlRocm93biBpbiBjYXNlIG9m
IHBhcnNpbmcgZXJyb3IuIiIiCi0KLQotY2xhc3MgQW55KG9iamVjdCk6Ci0gICIiIkNsYXNzIGZv
ciBBbnkgTWVzc2FnZSB0eXBlLiIiIgotCi0gIGRlZiBQYWNrKHNlbGYsIG1zZywgdHlwZV91cmxf
cHJlZml4PSd0eXBlLmdvb2dsZWFwaXMuY29tLycpOgotICAgICIiIlBhY2tzIHRoZSBzcGVjaWZp
ZWQgbWVzc2FnZSBpbnRvIGN1cnJlbnQgQW55IG1lc3NhZ2UuIiIiCi0gICAgaWYgbGVuKHR5cGVf
dXJsX3ByZWZpeCkgPCAxIG9yIHR5cGVfdXJsX3ByZWZpeFstMV0gIT0gJy8nOgotICAgICAgc2Vs
Zi50eXBlX3VybCA9ICclcy8lcycgJSAodHlwZV91cmxfcHJlZml4LCBtc2cuREVTQ1JJUFRPUi5m
dWxsX25hbWUpCi0gICAgZWxzZToKLSAgICAgIHNlbGYudHlwZV91cmwgPSAnJXMlcycgJSAodHlw
ZV91cmxfcHJlZml4LCBtc2cuREVTQ1JJUFRPUi5mdWxsX25hbWUpCi0gICAgc2VsZi52YWx1ZSA9
IG1zZy5TZXJpYWxpemVUb1N0cmluZygpCi0KLSAgZGVmIFVucGFjayhzZWxmLCBtc2cpOgotICAg
ICIiIlVucGFja3MgdGhlIGN1cnJlbnQgQW55IG1lc3NhZ2UgaW50byBzcGVjaWZpZWQgbWVzc2Fn
ZS4iIiIKLSAgICBkZXNjcmlwdG9yID0gbXNnLkRFU0NSSVBUT1IKLSAgICBpZiBub3Qgc2VsZi5J
cyhkZXNjcmlwdG9yKToKLSAgICAgIHJldHVybiBGYWxzZQotICAgIG1zZy5QYXJzZUZyb21TdHJp
bmcoc2VsZi52YWx1ZSkKLSAgICByZXR1cm4gVHJ1ZQotCi0gIGRlZiBUeXBlTmFtZShzZWxmKToK
LSAgICAiIiJSZXR1cm5zIHRoZSBwcm90b2J1ZiB0eXBlIG5hbWUgb2YgdGhlIGlubmVyIG1lc3Nh
Z2UuIiIiCi0gICAgIyBPbmx5IGxhc3QgcGFydCBpcyB0byBiZSB1c2VkOiBiLzI1NjMwMTEyCi0g
ICAgcmV0dXJuIHNlbGYudHlwZV91cmwuc3BsaXQoJy8nKVstMV0KLQotICBkZWYgSXMoc2VsZiwg
ZGVzY3JpcHRvcik6Ci0gICAgIiIiQ2hlY2tzIGlmIHRoaXMgQW55IHJlcHJlc2VudHMgdGhlIGdp
dmVuIHByb3RvYnVmIHR5cGUuIiIiCi0gICAgcmV0dXJuIHNlbGYuVHlwZU5hbWUoKSA9PSBkZXNj
cmlwdG9yLmZ1bGxfbmFtZQotCi0KLWNsYXNzIFRpbWVzdGFtcChvYmplY3QpOgotICAiIiJDbGFz
cyBmb3IgVGltZXN0YW1wIG1lc3NhZ2UgdHlwZS4iIiIKLQotICBkZWYgVG9Kc29uU3RyaW5nKHNl
bGYpOgotICAgICIiIkNvbnZlcnRzIFRpbWVzdGFtcCB0byBSRkMgMzMzOSBkYXRlIHN0cmluZyBm
b3JtYXQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBzdHJpbmcgY29udmVydGVkIGZyb20gdGlt
ZXN0YW1wLiBUaGUgc3RyaW5nIGlzIGFsd2F5cyBaLW5vcm1hbGl6ZWQKLSAgICAgIGFuZCB1c2Vz
IDMsIDYgb3IgOSBmcmFjdGlvbmFsIGRpZ2l0cyBhcyByZXF1aXJlZCB0byByZXByZXNlbnQgdGhl
Ci0gICAgICBleGFjdCB0aW1lLiBFeGFtcGxlIG9mIHRoZSByZXR1cm4gZm9ybWF0OiAnMTk3Mi0w
MS0wMVQxMDowMDoyMC4wMjFaJwotICAgICIiIgotICAgIG5hbm9zID0gc2VsZi5uYW5vcyAlIF9O
QU5PU19QRVJfU0VDT05ECi0gICAgdG90YWxfc2VjID0gc2VsZi5zZWNvbmRzICsgKHNlbGYubmFu
b3MgLSBuYW5vcykgLy8gX05BTk9TX1BFUl9TRUNPTkQKLSAgICBzZWNvbmRzID0gdG90YWxfc2Vj
ICUgX1NFQ09ORFNfUEVSX0RBWQotICAgIGRheXMgPSAodG90YWxfc2VjIC0gc2Vjb25kcykgLy8g
X1NFQ09ORFNfUEVSX0RBWQotICAgIGR0ID0gZGF0ZXRpbWUoMTk3MCwgMSwgMSkgKyB0aW1lZGVs
dGEoZGF5cywgc2Vjb25kcykKLQotICAgIHJlc3VsdCA9IGR0Lmlzb2Zvcm1hdCgpCi0gICAgaWYg
KG5hbm9zICUgMWU5KSA9PSAwOgotICAgICAgIyBJZiB0aGVyZSBhcmUgMCBmcmFjdGlvbmFsIGRp
Z2l0cywgdGhlIGZyYWN0aW9uYWwKLSAgICAgICMgcG9pbnQgJy4nIHNob3VsZCBiZSBvbWl0dGVk
IHdoZW4gc2VyaWFsaXppbmcuCi0gICAgICByZXR1cm4gcmVzdWx0ICsgJ1onCi0gICAgaWYgKG5h
bm9zICUgMWU2KSA9PSAwOgotICAgICAgIyBTZXJpYWxpemUgMyBmcmFjdGlvbmFsIGRpZ2l0cy4K
LSAgICAgIHJldHVybiByZXN1bHQgKyAnLiUwM2RaJyAlIChuYW5vcyAvIDFlNikKLSAgICBpZiAo
bmFub3MgJSAxZTMpID09IDA6Ci0gICAgICAjIFNlcmlhbGl6ZSA2IGZyYWN0aW9uYWwgZGlnaXRz
LgotICAgICAgcmV0dXJuIHJlc3VsdCArICcuJTA2ZFonICUgKG5hbm9zIC8gMWUzKQotICAgICMg
U2VyaWFsaXplIDkgZnJhY3Rpb25hbCBkaWdpdHMuCi0gICAgcmV0dXJuIHJlc3VsdCArICcuJTA5
ZFonICUgbmFub3MKLQotICBkZWYgRnJvbUpzb25TdHJpbmcoc2VsZiwgdmFsdWUpOgotICAgICIi
IlBhcnNlIGEgUkZDIDMzMzkgZGF0ZSBzdHJpbmcgZm9ybWF0IHRvIFRpbWVzdGFtcC4KLQotICAg
IEFyZ3M6Ci0gICAgICB2YWx1ZTogQSBkYXRlIHN0cmluZy4gQW55IGZyYWN0aW9uYWwgZGlnaXRz
IChvciBub25lKSBhbmQgYW55IG9mZnNldCBhcmUKLSAgICAgICAgICBhY2NlcHRlZCBhcyBsb25n
IGFzIHRoZXkgZml0IGludG8gbmFuby1zZWNvbmRzIHByZWNpc2lvbi4KLSAgICAgICAgICBFeGFt
cGxlIG9mIGFjY2VwdGVkIGZvcm1hdDogJzE5NzItMDEtMDFUMTA6MDA6MjAuMDIxLTA1OjAwJwot
Ci0gICAgUmFpc2VzOgotICAgICAgUGFyc2VFcnJvcjogT24gcGFyc2luZyBwcm9ibGVtcy4KLSAg
ICAiIiIKLSAgICB0aW1lem9uZV9vZmZzZXQgPSB2YWx1ZS5maW5kKCdaJykKLSAgICBpZiB0aW1l
em9uZV9vZmZzZXQgPT0gLTE6Ci0gICAgICB0aW1lem9uZV9vZmZzZXQgPSB2YWx1ZS5maW5kKCcr
JykKLSAgICBpZiB0aW1lem9uZV9vZmZzZXQgPT0gLTE6Ci0gICAgICB0aW1lem9uZV9vZmZzZXQg
PSB2YWx1ZS5yZmluZCgnLScpCi0gICAgaWYgdGltZXpvbmVfb2Zmc2V0ID09IC0xOgotICAgICAg
cmFpc2UgUGFyc2VFcnJvcigKLSAgICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIHRpbWVzdGFtcDog
bWlzc2luZyB2YWxpZCB0aW1lem9uZSBvZmZzZXQuJykKLSAgICB0aW1lX3ZhbHVlID0gdmFsdWVb
MDp0aW1lem9uZV9vZmZzZXRdCi0gICAgIyBQYXJzZSBkYXRldGltZSBhbmQgbmFub3MuCi0gICAg
cG9pbnRfcG9zaXRpb24gPSB0aW1lX3ZhbHVlLmZpbmQoJy4nKQotICAgIGlmIHBvaW50X3Bvc2l0
aW9uID09IC0xOgotICAgICAgc2Vjb25kX3ZhbHVlID0gdGltZV92YWx1ZQotICAgICAgbmFub192
YWx1ZSA9ICcnCi0gICAgZWxzZToKLSAgICAgIHNlY29uZF92YWx1ZSA9IHRpbWVfdmFsdWVbOnBv
aW50X3Bvc2l0aW9uXQotICAgICAgbmFub192YWx1ZSA9IHRpbWVfdmFsdWVbcG9pbnRfcG9zaXRp
b24gKyAxOl0KLSAgICBkYXRlX29iamVjdCA9IGRhdGV0aW1lLnN0cnB0aW1lKHNlY29uZF92YWx1
ZSwgX1RJTUVTVEFNUEZPTUFUKQotICAgIHRkID0gZGF0ZV9vYmplY3QgLSBkYXRldGltZSgxOTcw
LCAxLCAxKQotICAgIHNlY29uZHMgPSB0ZC5zZWNvbmRzICsgdGQuZGF5cyAqIF9TRUNPTkRTX1BF
Ul9EQVkKLSAgICBpZiBsZW4obmFub192YWx1ZSkgPiA5OgotICAgICAgcmFpc2UgUGFyc2VFcnJv
cigKLSAgICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIFRpbWVzdGFtcDogbmFub3MgezB9IG1vcmUg
dGhhbiAnCi0gICAgICAgICAgJzkgZnJhY3Rpb25hbCBkaWdpdHMuJy5mb3JtYXQobmFub192YWx1
ZSkpCi0gICAgaWYgbmFub192YWx1ZToKLSAgICAgIG5hbm9zID0gcm91bmQoZmxvYXQoJzAuJyAr
IG5hbm9fdmFsdWUpICogMWU5KQotICAgIGVsc2U6Ci0gICAgICBuYW5vcyA9IDAKLSAgICAjIFBh
cnNlIHRpbWV6b25lIG9mZnNldHMuCi0gICAgaWYgdmFsdWVbdGltZXpvbmVfb2Zmc2V0XSA9PSAn
Wic6Ci0gICAgICBpZiBsZW4odmFsdWUpICE9IHRpbWV6b25lX29mZnNldCArIDE6Ci0gICAgICAg
IHJhaXNlIFBhcnNlRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0aW1lc3RhbXA6IGludmFsaWQgdHJh
aWxpbmcnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyBkYXRhIHswfS4nLmZvcm1hdCh2YWx1
ZSkpCi0gICAgZWxzZToKLSAgICAgIHRpbWV6b25lID0gdmFsdWVbdGltZXpvbmVfb2Zmc2V0Ol0K
LSAgICAgIHBvcyA9IHRpbWV6b25lLmZpbmQoJzonKQotICAgICAgaWYgcG9zID09IC0xOgotICAg
ICAgICByYWlzZSBQYXJzZUVycm9yKAotICAgICAgICAgICAgJ0ludmFsaWQgdGltZXpvbmUgb2Zm
c2V0IHZhbHVlOiB7MH0uJy5mb3JtYXQodGltZXpvbmUpKQotICAgICAgaWYgdGltZXpvbmVbMF0g
PT0gJysnOgotICAgICAgICBzZWNvbmRzIC09IChpbnQodGltZXpvbmVbMTpwb3NdKSo2MCtpbnQo
dGltZXpvbmVbcG9zKzE6XSkpKjYwCi0gICAgICBlbHNlOgotICAgICAgICBzZWNvbmRzICs9IChp
bnQodGltZXpvbmVbMTpwb3NdKSo2MCtpbnQodGltZXpvbmVbcG9zKzE6XSkpKjYwCi0gICAgIyBT
ZXQgc2Vjb25kcyBhbmQgbmFub3MKLSAgICBzZWxmLnNlY29uZHMgPSBpbnQoc2Vjb25kcykKLSAg
ICBzZWxmLm5hbm9zID0gaW50KG5hbm9zKQotCi0gIGRlZiBHZXRDdXJyZW50VGltZShzZWxmKToK
LSAgICAiIiJHZXQgdGhlIGN1cnJlbnQgVVRDIGludG8gVGltZXN0YW1wLiIiIgotICAgIHNlbGYu
RnJvbURhdGV0aW1lKGRhdGV0aW1lLnV0Y25vdygpKQotCi0gIGRlZiBUb05hbm9zZWNvbmRzKHNl
bGYpOgotICAgICIiIkNvbnZlcnRzIFRpbWVzdGFtcCB0byBuYW5vc2Vjb25kcyBzaW5jZSBlcG9j
aC4iIiIKLSAgICByZXR1cm4gc2VsZi5zZWNvbmRzICogX05BTk9TX1BFUl9TRUNPTkQgKyBzZWxm
Lm5hbm9zCi0KLSAgZGVmIFRvTWljcm9zZWNvbmRzKHNlbGYpOgotICAgICIiIkNvbnZlcnRzIFRp
bWVzdGFtcCB0byBtaWNyb3NlY29uZHMgc2luY2UgZXBvY2guIiIiCi0gICAgcmV0dXJuIChzZWxm
LnNlY29uZHMgKiBfTUlDUk9TX1BFUl9TRUNPTkQgKwotICAgICAgICAgICAgc2VsZi5uYW5vcyAv
LyBfTkFOT1NfUEVSX01JQ1JPU0VDT05EKQotCi0gIGRlZiBUb01pbGxpc2Vjb25kcyhzZWxmKToK
LSAgICAiIiJDb252ZXJ0cyBUaW1lc3RhbXAgdG8gbWlsbGlzZWNvbmRzIHNpbmNlIGVwb2NoLiIi
IgotICAgIHJldHVybiAoc2VsZi5zZWNvbmRzICogX01JTExJU19QRVJfU0VDT05EICsKLSAgICAg
ICAgICAgIHNlbGYubmFub3MgLy8gX05BTk9TX1BFUl9NSUxMSVNFQ09ORCkKLQotICBkZWYgVG9T
ZWNvbmRzKHNlbGYpOgotICAgICIiIkNvbnZlcnRzIFRpbWVzdGFtcCB0byBzZWNvbmRzIHNpbmNl
IGVwb2NoLiIiIgotICAgIHJldHVybiBzZWxmLnNlY29uZHMKLQotICBkZWYgRnJvbU5hbm9zZWNv
bmRzKHNlbGYsIG5hbm9zKToKLSAgICAiIiJDb252ZXJ0cyBuYW5vc2Vjb25kcyBzaW5jZSBlcG9j
aCB0byBUaW1lc3RhbXAuIiIiCi0gICAgc2VsZi5zZWNvbmRzID0gbmFub3MgLy8gX05BTk9TX1BF
Ul9TRUNPTkQKLSAgICBzZWxmLm5hbm9zID0gbmFub3MgJSBfTkFOT1NfUEVSX1NFQ09ORAotCi0g
IGRlZiBGcm9tTWljcm9zZWNvbmRzKHNlbGYsIG1pY3Jvcyk6Ci0gICAgIiIiQ29udmVydHMgbWlj
cm9zZWNvbmRzIHNpbmNlIGVwb2NoIHRvIFRpbWVzdGFtcC4iIiIKLSAgICBzZWxmLnNlY29uZHMg
PSBtaWNyb3MgLy8gX01JQ1JPU19QRVJfU0VDT05ECi0gICAgc2VsZi5uYW5vcyA9IChtaWNyb3Mg
JSBfTUlDUk9TX1BFUl9TRUNPTkQpICogX05BTk9TX1BFUl9NSUNST1NFQ09ORAotCi0gIGRlZiBG
cm9tTWlsbGlzZWNvbmRzKHNlbGYsIG1pbGxpcyk6Ci0gICAgIiIiQ29udmVydHMgbWlsbGlzZWNv
bmRzIHNpbmNlIGVwb2NoIHRvIFRpbWVzdGFtcC4iIiIKLSAgICBzZWxmLnNlY29uZHMgPSBtaWxs
aXMgLy8gX01JTExJU19QRVJfU0VDT05ECi0gICAgc2VsZi5uYW5vcyA9IChtaWxsaXMgJSBfTUlM
TElTX1BFUl9TRUNPTkQpICogX05BTk9TX1BFUl9NSUxMSVNFQ09ORAotCi0gIGRlZiBGcm9tU2Vj
b25kcyhzZWxmLCBzZWNvbmRzKToKLSAgICAiIiJDb252ZXJ0cyBzZWNvbmRzIHNpbmNlIGVwb2No
IHRvIFRpbWVzdGFtcC4iIiIKLSAgICBzZWxmLnNlY29uZHMgPSBzZWNvbmRzCi0gICAgc2VsZi5u
YW5vcyA9IDAKLQotICBkZWYgVG9EYXRldGltZShzZWxmKToKLSAgICAiIiJDb252ZXJ0cyBUaW1l
c3RhbXAgdG8gZGF0ZXRpbWUuIiIiCi0gICAgcmV0dXJuIGRhdGV0aW1lLnV0Y2Zyb210aW1lc3Rh
bXAoCi0gICAgICAgIHNlbGYuc2Vjb25kcyArIHNlbGYubmFub3MgLyBmbG9hdChfTkFOT1NfUEVS
X1NFQ09ORCkpCi0KLSAgZGVmIEZyb21EYXRldGltZShzZWxmLCBkdCk6Ci0gICAgIiIiQ29udmVy
dHMgZGF0ZXRpbWUgdG8gVGltZXN0YW1wLiIiIgotICAgIHRkID0gZHQgLSBkYXRldGltZSgxOTcw
LCAxLCAxKQotICAgIHNlbGYuc2Vjb25kcyA9IHRkLnNlY29uZHMgKyB0ZC5kYXlzICogX1NFQ09O
RFNfUEVSX0RBWQotICAgIHNlbGYubmFub3MgPSB0ZC5taWNyb3NlY29uZHMgKiBfTkFOT1NfUEVS
X01JQ1JPU0VDT05ECi0KLQotY2xhc3MgRHVyYXRpb24ob2JqZWN0KToKLSAgIiIiQ2xhc3MgZm9y
IER1cmF0aW9uIG1lc3NhZ2UgdHlwZS4iIiIKLQotICBkZWYgVG9Kc29uU3RyaW5nKHNlbGYpOgot
ICAgICIiIkNvbnZlcnRzIER1cmF0aW9uIHRvIHN0cmluZyBmb3JtYXQuCi0KLSAgICBSZXR1cm5z
OgotICAgICAgQSBzdHJpbmcgY29udmVydGVkIGZyb20gc2VsZi4gVGhlIHN0cmluZyBmb3JtYXQg
d2lsbCBjb250YWlucwotICAgICAgMywgNiwgb3IgOSBmcmFjdGlvbmFsIGRpZ2l0cyBkZXBlbmRp
bmcgb24gdGhlIHByZWNpc2lvbiByZXF1aXJlZCB0bwotICAgICAgcmVwcmVzZW50IHRoZSBleGFj
dCBEdXJhdGlvbiB2YWx1ZS4gRm9yIGV4YW1wbGU6ICIxcyIsICIxLjAxMHMiLAotICAgICAgIjEu
MDAwMDAwMTAwcyIsICItMy4xMDBzIgotICAgICIiIgotICAgIGlmIHNlbGYuc2Vjb25kcyA8IDAg
b3Igc2VsZi5uYW5vcyA8IDA6Ci0gICAgICByZXN1bHQgPSAnLScKLSAgICAgIHNlY29uZHMgPSAt
IHNlbGYuc2Vjb25kcyArIGludCgoMCAtIHNlbGYubmFub3MpIC8vIDFlOSkKLSAgICAgIG5hbm9z
ID0gKDAgLSBzZWxmLm5hbm9zKSAlIDFlOQotICAgIGVsc2U6Ci0gICAgICByZXN1bHQgPSAnJwot
ICAgICAgc2Vjb25kcyA9IHNlbGYuc2Vjb25kcyArIGludChzZWxmLm5hbm9zIC8vIDFlOSkKLSAg
ICAgIG5hbm9zID0gc2VsZi5uYW5vcyAlIDFlOQotICAgIHJlc3VsdCArPSAnJWQnICUgc2Vjb25k
cwotICAgIGlmIChuYW5vcyAlIDFlOSkgPT0gMDoKLSAgICAgICMgSWYgdGhlcmUgYXJlIDAgZnJh
Y3Rpb25hbCBkaWdpdHMsIHRoZSBmcmFjdGlvbmFsCi0gICAgICAjIHBvaW50ICcuJyBzaG91bGQg
YmUgb21pdHRlZCB3aGVuIHNlcmlhbGl6aW5nLgotICAgICAgcmV0dXJuIHJlc3VsdCArICdzJwot
ICAgIGlmIChuYW5vcyAlIDFlNikgPT0gMDoKLSAgICAgICMgU2VyaWFsaXplIDMgZnJhY3Rpb25h
bCBkaWdpdHMuCi0gICAgICByZXR1cm4gcmVzdWx0ICsgJy4lMDNkcycgJSAobmFub3MgLyAxZTYp
Ci0gICAgaWYgKG5hbm9zICUgMWUzKSA9PSAwOgotICAgICAgIyBTZXJpYWxpemUgNiBmcmFjdGlv
bmFsIGRpZ2l0cy4KLSAgICAgIHJldHVybiByZXN1bHQgKyAnLiUwNmRzJyAlIChuYW5vcyAvIDFl
MykKLSAgICAjIFNlcmlhbGl6ZSA5IGZyYWN0aW9uYWwgZGlnaXRzLgotICAgIHJldHVybiByZXN1
bHQgKyAnLiUwOWRzJyAlIG5hbm9zCi0KLSAgZGVmIEZyb21Kc29uU3RyaW5nKHNlbGYsIHZhbHVl
KToKLSAgICAiIiJDb252ZXJ0cyBhIHN0cmluZyB0byBEdXJhdGlvbi4KLQotICAgIEFyZ3M6Ci0g
ICAgICB2YWx1ZTogQSBzdHJpbmcgdG8gYmUgY29udmVydGVkLiBUaGUgc3RyaW5nIG11c3QgZW5k
IHdpdGggJ3MnLiBBbnkKLSAgICAgICAgICBmcmFjdGlvbmFsIGRpZ2l0cyAob3Igbm9uZSkgYXJl
IGFjY2VwdGVkIGFzIGxvbmcgYXMgdGhleSBmaXQgaW50bwotICAgICAgICAgIHByZWNpc2lvbi4g
Rm9yIGV4YW1wbGU6ICIxcyIsICIxLjAxcyIsICIxLjAwMDAwMDFzIiwgIi0zLjEwMHMKLQotICAg
IFJhaXNlczoKLSAgICAgIFBhcnNlRXJyb3I6IE9uIHBhcnNpbmcgcHJvYmxlbXMuCi0gICAgIiIi
Ci0gICAgaWYgbGVuKHZhbHVlKSA8IDEgb3IgdmFsdWVbLTFdICE9ICdzJzoKLSAgICAgIHJhaXNl
IFBhcnNlRXJyb3IoCi0gICAgICAgICAgJ0R1cmF0aW9uIG11c3QgZW5kIHdpdGggbGV0dGVyICJz
IjogezB9LicuZm9ybWF0KHZhbHVlKSkKLSAgICB0cnk6Ci0gICAgICBwb3MgPSB2YWx1ZS5maW5k
KCcuJykKLSAgICAgIGlmIHBvcyA9PSAtMToKLSAgICAgICAgc2VsZi5zZWNvbmRzID0gaW50KHZh
bHVlWzotMV0pCi0gICAgICAgIHNlbGYubmFub3MgPSAwCi0gICAgICBlbHNlOgotICAgICAgICBz
ZWxmLnNlY29uZHMgPSBpbnQodmFsdWVbOnBvc10pCi0gICAgICAgIGlmIHZhbHVlWzBdID09ICct
JzoKLSAgICAgICAgICBzZWxmLm5hbm9zID0gaW50KHJvdW5kKGZsb2F0KCctMHswfScuZm9ybWF0
KHZhbHVlW3BvczogLTFdKSkgKjFlOSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgc2VsZi5u
YW5vcyA9IGludChyb3VuZChmbG9hdCgnMHswfScuZm9ybWF0KHZhbHVlW3BvczogLTFdKSkgKjFl
OSkpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICByYWlzZSBQYXJzZUVycm9yKAotICAg
ICAgICAgICdDb3VsZG5cJ3QgcGFyc2UgZHVyYXRpb246IHswfS4nLmZvcm1hdCh2YWx1ZSkpCi0K
LSAgZGVmIFRvTmFub3NlY29uZHMoc2VsZik6Ci0gICAgIiIiQ29udmVydHMgYSBEdXJhdGlvbiB0
byBuYW5vc2Vjb25kcy4iIiIKLSAgICByZXR1cm4gc2VsZi5zZWNvbmRzICogX05BTk9TX1BFUl9T
RUNPTkQgKyBzZWxmLm5hbm9zCi0KLSAgZGVmIFRvTWljcm9zZWNvbmRzKHNlbGYpOgotICAgICIi
IkNvbnZlcnRzIGEgRHVyYXRpb24gdG8gbWljcm9zZWNvbmRzLiIiIgotICAgIG1pY3JvcyA9IF9S
b3VuZFRvd2FyZFplcm8oc2VsZi5uYW5vcywgX05BTk9TX1BFUl9NSUNST1NFQ09ORCkKLSAgICBy
ZXR1cm4gc2VsZi5zZWNvbmRzICogX01JQ1JPU19QRVJfU0VDT05EICsgbWljcm9zCi0KLSAgZGVm
IFRvTWlsbGlzZWNvbmRzKHNlbGYpOgotICAgICIiIkNvbnZlcnRzIGEgRHVyYXRpb24gdG8gbWls
bGlzZWNvbmRzLiIiIgotICAgIG1pbGxpcyA9IF9Sb3VuZFRvd2FyZFplcm8oc2VsZi5uYW5vcywg
X05BTk9TX1BFUl9NSUxMSVNFQ09ORCkKLSAgICByZXR1cm4gc2VsZi5zZWNvbmRzICogX01JTExJ
U19QRVJfU0VDT05EICsgbWlsbGlzCi0KLSAgZGVmIFRvU2Vjb25kcyhzZWxmKToKLSAgICAiIiJD
b252ZXJ0cyBhIER1cmF0aW9uIHRvIHNlY29uZHMuIiIiCi0gICAgcmV0dXJuIHNlbGYuc2Vjb25k
cwotCi0gIGRlZiBGcm9tTmFub3NlY29uZHMoc2VsZiwgbmFub3MpOgotICAgICIiIkNvbnZlcnRz
IG5hbm9zZWNvbmRzIHRvIER1cmF0aW9uLiIiIgotICAgIHNlbGYuX05vcm1hbGl6ZUR1cmF0aW9u
KG5hbm9zIC8vIF9OQU5PU19QRVJfU0VDT05ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5hbm9zICUgX05BTk9TX1BFUl9TRUNPTkQpCi0KLSAgZGVmIEZyb21NaWNyb3NlY29uZHMoc2Vs
ZiwgbWljcm9zKToKLSAgICAiIiJDb252ZXJ0cyBtaWNyb3NlY29uZHMgdG8gRHVyYXRpb24uIiIi
Ci0gICAgc2VsZi5fTm9ybWFsaXplRHVyYXRpb24oCi0gICAgICAgIG1pY3JvcyAvLyBfTUlDUk9T
X1BFUl9TRUNPTkQsCi0gICAgICAgIChtaWNyb3MgJSBfTUlDUk9TX1BFUl9TRUNPTkQpICogX05B
Tk9TX1BFUl9NSUNST1NFQ09ORCkKLQotICBkZWYgRnJvbU1pbGxpc2Vjb25kcyhzZWxmLCBtaWxs
aXMpOgotICAgICIiIkNvbnZlcnRzIG1pbGxpc2Vjb25kcyB0byBEdXJhdGlvbi4iIiIKLSAgICBz
ZWxmLl9Ob3JtYWxpemVEdXJhdGlvbigKLSAgICAgICAgbWlsbGlzIC8vIF9NSUxMSVNfUEVSX1NF
Q09ORCwKLSAgICAgICAgKG1pbGxpcyAlIF9NSUxMSVNfUEVSX1NFQ09ORCkgKiBfTkFOT1NfUEVS
X01JTExJU0VDT05EKQotCi0gIGRlZiBGcm9tU2Vjb25kcyhzZWxmLCBzZWNvbmRzKToKLSAgICAi
IiJDb252ZXJ0cyBzZWNvbmRzIHRvIER1cmF0aW9uLiIiIgotICAgIHNlbGYuc2Vjb25kcyA9IHNl
Y29uZHMKLSAgICBzZWxmLm5hbm9zID0gMAotCi0gIGRlZiBUb1RpbWVkZWx0YShzZWxmKToKLSAg
ICAiIiJDb252ZXJ0cyBEdXJhdGlvbiB0byB0aW1lZGVsdGEuIiIiCi0gICAgcmV0dXJuIHRpbWVk
ZWx0YSgKLSAgICAgICAgc2Vjb25kcz1zZWxmLnNlY29uZHMsIG1pY3Jvc2Vjb25kcz1fUm91bmRU
b3dhcmRaZXJvKAotICAgICAgICAgICAgc2VsZi5uYW5vcywgX05BTk9TX1BFUl9NSUNST1NFQ09O
RCkpCi0KLSAgZGVmIEZyb21UaW1lZGVsdGEoc2VsZiwgdGQpOgotICAgICIiIkNvbnZlcnRkIHRp
bWVkZWx0YSB0byBEdXJhdGlvbi4iIiIKLSAgICBzZWxmLl9Ob3JtYWxpemVEdXJhdGlvbih0ZC5z
ZWNvbmRzICsgdGQuZGF5cyAqIF9TRUNPTkRTX1BFUl9EQVksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGQubWljcm9zZWNvbmRzICogX05BTk9TX1BFUl9NSUNST1NFQ09ORCkKLQotICBk
ZWYgX05vcm1hbGl6ZUR1cmF0aW9uKHNlbGYsIHNlY29uZHMsIG5hbm9zKToKLSAgICAiIiJTZXQg
RHVyYXRpb24gYnkgc2Vjb25kcyBhbmQgbm9uYXMuIiIiCi0gICAgIyBGb3JjZSBuYW5vcyB0byBi
ZSBuZWdhdGl2ZSBpZiB0aGUgZHVyYXRpb24gaXMgbmVnYXRpdmUuCi0gICAgaWYgc2Vjb25kcyA8
IDAgYW5kIG5hbm9zID4gMDoKLSAgICAgIHNlY29uZHMgKz0gMQotICAgICAgbmFub3MgLT0gX05B
Tk9TX1BFUl9TRUNPTkQKLSAgICBzZWxmLnNlY29uZHMgPSBzZWNvbmRzCi0gICAgc2VsZi5uYW5v
cyA9IG5hbm9zCi0KLQotZGVmIF9Sb3VuZFRvd2FyZFplcm8odmFsdWUsIGRpdmlkZXIpOgotICAi
IiJUcnVuY2F0ZXMgdGhlIHJlbWFpbmRlciBwYXJ0IGFmdGVyIGRpdmlzaW9uLiIiIgotICAjIEZv
ciBzb21lIGxhbmd1YW5nZXMsIHRoZSBzaWduIG9mIHRoZSByZW1haW5kZXIgaXMgaW1wbGVtZW50
YXRpb24KLSAgIyBkZXBlbmRlbnQgaWYgYW55IG9mIHRoZSBvcGVyYW5kcyBpcyBuZWdhdGl2ZS4g
SGVyZSB3ZSBlbmZvcmNlCi0gICMgInJvdW5kZWQgdG93YXJkIHplcm8iIHNlbWFudGljcy4gRm9y
IGV4YW1wbGUsIGZvciAoLTUpIC8gMiBhbgotICAjIGltcGxlbWVudGF0aW9uIG1heSBnaXZlIC0z
IGFzIHRoZSByZXN1bHQgd2l0aCB0aGUgcmVtYWluZGVyIGJlaW5nCi0gICMgMS4gVGhpcyBmdW5j
dGlvbiBlbnN1cmVzIHdlIGFsd2F5cyByZXR1cm4gLTIgKGNsb3NlciB0byB6ZXJvKS4KLSAgcmVz
dWx0ID0gdmFsdWUgLy8gZGl2aWRlcgotICByZW1haW5kZXIgPSB2YWx1ZSAlIGRpdmlkZXIKLSAg
aWYgcmVzdWx0IDwgMCBhbmQgcmVtYWluZGVyID4gMDoKLSAgICByZXR1cm4gcmVzdWx0ICsgMQot
ICBlbHNlOgotICAgIHJldHVybiByZXN1bHQKLQotCi1jbGFzcyBGaWVsZE1hc2sob2JqZWN0KToK
LSAgIiIiQ2xhc3MgZm9yIEZpZWxkTWFzayBtZXNzYWdlIHR5cGUuIiIiCi0KLSAgZGVmIFRvSnNv
blN0cmluZyhzZWxmKToKLSAgICAiIiJDb252ZXJ0cyBGaWVsZE1hc2sgdG8gc3RyaW5nIGFjY29y
ZGluZyB0byBwcm90bzMgSlNPTiBzcGVjLiIiIgotICAgIHJldHVybiAnLCcuam9pbihzZWxmLnBh
dGhzKQotCi0gIGRlZiBGcm9tSnNvblN0cmluZyhzZWxmLCB2YWx1ZSk6Ci0gICAgIiIiQ29udmVy
dHMgc3RyaW5nIHRvIEZpZWxkTWFzayBhY2NvcmRpbmcgdG8gcHJvdG8zIEpTT04gc3BlYy4iIiIK
LSAgICBzZWxmLkNsZWFyKCkKLSAgICBmb3IgcGF0aCBpbiB2YWx1ZS5zcGxpdCgnLCcpOgotICAg
ICAgc2VsZi5wYXRocy5hcHBlbmQocGF0aCkKLQotICBkZWYgSXNWYWxpZEZvckRlc2NyaXB0b3Io
c2VsZiwgbWVzc2FnZV9kZXNjcmlwdG9yKToKLSAgICAiIiJDaGVja3Mgd2hldGhlciB0aGUgRmll
bGRNYXNrIGlzIHZhbGlkIGZvciBNZXNzYWdlIERlc2NyaXB0b3IuIiIiCi0gICAgZm9yIHBhdGgg
aW4gc2VsZi5wYXRoczoKLSAgICAgIGlmIG5vdCBfSXNWYWxpZFBhdGgobWVzc2FnZV9kZXNjcmlw
dG9yLCBwYXRoKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgcmV0dXJuIFRydWUKLQotICBk
ZWYgQWxsRmllbGRzRnJvbURlc2NyaXB0b3Ioc2VsZiwgbWVzc2FnZV9kZXNjcmlwdG9yKToKLSAg
ICAiIiJHZXRzIGFsbCBkaXJlY3QgZmllbGRzIG9mIE1lc3NhZ2UgRGVzY3JpcHRvciB0byBGaWVs
ZE1hc2suIiIiCi0gICAgc2VsZi5DbGVhcigpCi0gICAgZm9yIGZpZWxkIGluIG1lc3NhZ2VfZGVz
Y3JpcHRvci5maWVsZHM6Ci0gICAgICBzZWxmLnBhdGhzLmFwcGVuZChmaWVsZC5uYW1lKQotCi0g
IGRlZiBDYW5vbmljYWxGb3JtRnJvbU1hc2soc2VsZiwgbWFzayk6Ci0gICAgIiIiQ29udmVydHMg
YSBGaWVsZE1hc2sgdG8gdGhlIGNhbm9uaWNhbCBmb3JtLgotCi0gICAgUmVtb3ZlcyBwYXRocyB0
aGF0IGFyZSBjb3ZlcmVkIGJ5IGFub3RoZXIgcGF0aC4gRm9yIGV4YW1wbGUsCi0gICAgImZvby5i
YXIiIGlzIGNvdmVyZWQgYnkgImZvbyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpZiAiZm9vIgotICAg
IGlzIGFsc28gaW4gdGhlIEZpZWxkTWFzay4gVGhlbiBzb3J0cyBhbGwgcGF0aHMgaW4gYWxwaGFi
ZXRpY2FsIG9yZGVyLgotCi0gICAgQXJnczoKLSAgICAgIG1hc2s6IFRoZSBvcmlnaW5hbCBGaWVs
ZE1hc2sgdG8gYmUgY29udmVydGVkLgotICAgICIiIgotICAgIHRyZWUgPSBfRmllbGRNYXNrVHJl
ZShtYXNrKQotICAgIHRyZWUuVG9GaWVsZE1hc2soc2VsZikKLQotICBkZWYgVW5pb24oc2VsZiwg
bWFzazEsIG1hc2syKToKLSAgICAiIiJNZXJnZXMgbWFzazEgYW5kIG1hc2syIGludG8gdGhpcyBG
aWVsZE1hc2suIiIiCi0gICAgX0NoZWNrRmllbGRNYXNrTWVzc2FnZShtYXNrMSkKLSAgICBfQ2hl
Y2tGaWVsZE1hc2tNZXNzYWdlKG1hc2syKQotICAgIHRyZWUgPSBfRmllbGRNYXNrVHJlZShtYXNr
MSkKLSAgICB0cmVlLk1lcmdlRnJvbUZpZWxkTWFzayhtYXNrMikKLSAgICB0cmVlLlRvRmllbGRN
YXNrKHNlbGYpCi0KLSAgZGVmIEludGVyc2VjdChzZWxmLCBtYXNrMSwgbWFzazIpOgotICAgICIi
IkludGVyc2VjdHMgbWFzazEgYW5kIG1hc2syIGludG8gdGhpcyBGaWVsZE1hc2suIiIiCi0gICAg
X0NoZWNrRmllbGRNYXNrTWVzc2FnZShtYXNrMSkKLSAgICBfQ2hlY2tGaWVsZE1hc2tNZXNzYWdl
KG1hc2syKQotICAgIHRyZWUgPSBfRmllbGRNYXNrVHJlZShtYXNrMSkKLSAgICBpbnRlcnNlY3Rp
b24gPSBfRmllbGRNYXNrVHJlZSgpCi0gICAgZm9yIHBhdGggaW4gbWFzazIucGF0aHM6Ci0gICAg
ICB0cmVlLkludGVyc2VjdFBhdGgocGF0aCwgaW50ZXJzZWN0aW9uKQotICAgIGludGVyc2VjdGlv
bi5Ub0ZpZWxkTWFzayhzZWxmKQotCi0gIGRlZiBNZXJnZU1lc3NhZ2UoCi0gICAgICBzZWxmLCBz
b3VyY2UsIGRlc3RpbmF0aW9uLAotICAgICAgcmVwbGFjZV9tZXNzYWdlX2ZpZWxkPUZhbHNlLCBy
ZXBsYWNlX3JlcGVhdGVkX2ZpZWxkPUZhbHNlKToKLSAgICAiIiJNZXJnZXMgZmllbGRzIHNwZWNp
ZmllZCBpbiBGaWVsZE1hc2sgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24uCi0KLSAgICBBcmdz
OgotICAgICAgc291cmNlOiBTb3VyY2UgbWVzc2FnZS4KLSAgICAgIGRlc3RpbmF0aW9uOiBUaGUg
ZGVzdGluYXRpb24gbWVzc2FnZSB0byBiZSBtZXJnZWQgaW50by4KLSAgICAgIHJlcGxhY2VfbWVz
c2FnZV9maWVsZDogUmVwbGFjZSBtZXNzYWdlIGZpZWxkIGlmIFRydWUuIE1lcmdlIG1lc3NhZ2UK
LSAgICAgICAgICBmaWVsZCBpZiBGYWxzZS4KLSAgICAgIHJlcGxhY2VfcmVwZWF0ZWRfZmllbGQ6
IFJlcGxhY2UgcmVwZWF0ZWQgZmllbGQgaWYgVHJ1ZS4gQXBwZW5kCi0gICAgICAgICAgZWxlbWVu
dHMgb2YgcmVwZWF0ZWQgZmllbGQgaWYgRmFsc2UuCi0gICAgIiIiCi0gICAgdHJlZSA9IF9GaWVs
ZE1hc2tUcmVlKHNlbGYpCi0gICAgdHJlZS5NZXJnZU1lc3NhZ2UoCi0gICAgICAgIHNvdXJjZSwg
ZGVzdGluYXRpb24sIHJlcGxhY2VfbWVzc2FnZV9maWVsZCwgcmVwbGFjZV9yZXBlYXRlZF9maWVs
ZCkKLQotCi1kZWYgX0lzVmFsaWRQYXRoKG1lc3NhZ2VfZGVzY3JpcHRvciwgcGF0aCk6Ci0gICIi
IkNoZWNrcyB3aGV0aGVyIHRoZSBwYXRoIGlzIHZhbGlkIGZvciBNZXNzYWdlIERlc2NyaXB0b3Iu
IiIiCi0gIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpCi0gIGxhc3QgPSBwYXJ0cy5wb3AoKQotICBm
b3IgbmFtZSBpbiBwYXJ0czoKLSAgICBmaWVsZCA9IG1lc3NhZ2VfZGVzY3JpcHRvci5maWVsZHNf
YnlfbmFtZVtuYW1lXQotICAgIGlmIChmaWVsZCBpcyBOb25lIG9yCi0gICAgICAgIGZpZWxkLmxh
YmVsID09IEZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBFQVRFRCBvcgotICAgICAgICBmaWVsZC50
eXBlICE9IEZpZWxkRGVzY3JpcHRvci5UWVBFX01FU1NBR0UpOgotICAgICAgcmV0dXJuIEZhbHNl
Ci0gICAgbWVzc2FnZV9kZXNjcmlwdG9yID0gZmllbGQubWVzc2FnZV90eXBlCi0gIHJldHVybiBs
YXN0IGluIG1lc3NhZ2VfZGVzY3JpcHRvci5maWVsZHNfYnlfbmFtZQotCi0KLWRlZiBfQ2hlY2tG
aWVsZE1hc2tNZXNzYWdlKG1lc3NhZ2UpOgotICAiIiJSYWlzZXMgVmFsdWVFcnJvciBpZiBtZXNz
YWdlIGlzIG5vdCBhIEZpZWxkTWFzay4iIiIKLSAgbWVzc2FnZV9kZXNjcmlwdG9yID0gbWVzc2Fn
ZS5ERVNDUklQVE9SCi0gIGlmIChtZXNzYWdlX2Rlc2NyaXB0b3IubmFtZSAhPSAnRmllbGRNYXNr
JyBvcgotICAgICAgbWVzc2FnZV9kZXNjcmlwdG9yLmZpbGUubmFtZSAhPSAnZ29vZ2xlL3Byb3Rv
YnVmL2ZpZWxkX21hc2sucHJvdG8nKToKLSAgICByYWlzZSBWYWx1ZUVycm9yKCdNZXNzYWdlIHsw
fSBpcyBub3QgYSBGaWVsZE1hc2suJy5mb3JtYXQoCi0gICAgICAgIG1lc3NhZ2VfZGVzY3JpcHRv
ci5mdWxsX25hbWUpKQotCi0KLWNsYXNzIF9GaWVsZE1hc2tUcmVlKG9iamVjdCk6Ci0gICIiIlJl
cHJlc2VudHMgYSBGaWVsZE1hc2sgaW4gYSB0cmVlIHN0cnVjdHVyZS4KLQotICBGb3IgZXhhbXBs
ZSwgZ2l2ZW4gYSBGaWVsZE1hc2sgImZvby5iYXIsZm9vLmJheixiYXIuYmF6IiwKLSAgdGhlIEZp
ZWxkTWFza1RyZWUgd2lsbCBiZToKLSAgICAgIFtfcm9vdF0gLSstIGZvbyAtKy0gYmFyCi0gICAg
ICAgICAgICB8ICAgICAgIHwKLSAgICAgICAgICAgIHwgICAgICAgKy0gYmF6Ci0gICAgICAgICAg
ICB8Ci0gICAgICAgICAgICArLSBiYXIgLS0tIGJhegotICBJbiB0aGUgdHJlZSwgZWFjaCBsZWFm
IG5vZGUgcmVwcmVzZW50cyBhIGZpZWxkIHBhdGguCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhz
ZWxmLCBmaWVsZF9tYXNrPU5vbmUpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSB0cmVlIGJ5IEZp
ZWxkTWFzay4iIiIKLSAgICBzZWxmLl9yb290ID0ge30KLSAgICBpZiBmaWVsZF9tYXNrOgotICAg
ICAgc2VsZi5NZXJnZUZyb21GaWVsZE1hc2soZmllbGRfbWFzaykKLQotICBkZWYgTWVyZ2VGcm9t
RmllbGRNYXNrKHNlbGYsIGZpZWxkX21hc2spOgotICAgICIiIk1lcmdlcyBhIEZpZWxkTWFzayB0
byB0aGUgdHJlZS4iIiIKLSAgICBmb3IgcGF0aCBpbiBmaWVsZF9tYXNrLnBhdGhzOgotICAgICAg
c2VsZi5BZGRQYXRoKHBhdGgpCi0KLSAgZGVmIEFkZFBhdGgoc2VsZiwgcGF0aCk6Ci0gICAgIiIi
QWRkcyBhIGZpZWxkIHBhdGggaW50byB0aGUgdHJlZS4KLQotICAgIElmIHRoZSBmaWVsZCBwYXRo
IHRvIGFkZCBpcyBhIHN1Yi1wYXRoIG9mIGFuIGV4aXN0aW5nIGZpZWxkIHBhdGgKLSAgICBpbiB0
aGUgdHJlZSAoaS5lLiwgYSBsZWFmIG5vZGUpLCBpdCBtZWFucyB0aGUgdHJlZSBhbHJlYWR5IG1h
dGNoZXMKLSAgICB0aGUgZ2l2ZW4gcGF0aCBzbyBub3RoaW5nIHdpbGwgYmUgYWRkZWQgdG8gdGhl
IHRyZWUuIElmIHRoZSBwYXRoCi0gICAgbWF0Y2hlcyBhbiBleGlzdGluZyBub24tbGVhZiBub2Rl
IGluIHRoZSB0cmVlLCB0aGF0IG5vbi1sZWFmIG5vZGUKLSAgICB3aWxsIGJlIHR1cm5lZCBpbnRv
IGEgbGVhZiBub2RlIHdpdGggYWxsIGl0cyBjaGlsZHJlbiByZW1vdmVkIGJlY2F1c2UKLSAgICB0
aGUgcGF0aCBtYXRjaGVzIGFsbCB0aGUgbm9kZSdzIGNoaWxkcmVuLiBPdGhlcndpc2UsIGEgbmV3
IHBhdGggd2lsbAotICAgIGJlIGFkZGVkLgotCi0gICAgQXJnczoKLSAgICAgIHBhdGg6IFRoZSBm
aWVsZCBwYXRoIHRvIGFkZC4KLSAgICAiIiIKLSAgICBub2RlID0gc2VsZi5fcm9vdAotICAgIGZv
ciBuYW1lIGluIHBhdGguc3BsaXQoJy4nKToKLSAgICAgIGlmIG5hbWUgbm90IGluIG5vZGU6Ci0g
ICAgICAgIG5vZGVbbmFtZV0gPSB7fQotICAgICAgZWxpZiBub3Qgbm9kZVtuYW1lXToKLSAgICAg
ICAgIyBQcmUtZXhpc3RpbmcgZW1wdHkgbm9kZSBpbXBsaWVzIHdlIGFscmVhZHkgaGF2ZSB0aGlz
IGVudGlyZSB0cmVlLgotICAgICAgICByZXR1cm4KLSAgICAgIG5vZGUgPSBub2RlW25hbWVdCi0g
ICAgIyBSZW1vdmUgYW55IHN1Yi10cmVlcyB3ZSBtaWdodCBoYXZlIGhhZC4KLSAgICBub2RlLmNs
ZWFyKCkKLQotICBkZWYgVG9GaWVsZE1hc2soc2VsZiwgZmllbGRfbWFzayk6Ci0gICAgIiIiQ29u
dmVydHMgdGhlIHRyZWUgdG8gYSBGaWVsZE1hc2suIiIiCi0gICAgZmllbGRfbWFzay5DbGVhcigp
Ci0gICAgX0FkZEZpZWxkUGF0aHMoc2VsZi5fcm9vdCwgJycsIGZpZWxkX21hc2spCi0KLSAgZGVm
IEludGVyc2VjdFBhdGgoc2VsZiwgcGF0aCwgaW50ZXJzZWN0aW9uKToKLSAgICAiIiJDYWxjdWxh
dGVzIHRoZSBpbnRlcnNlY3Rpb24gcGFydCBvZiBhIGZpZWxkIHBhdGggd2l0aCB0aGlzIHRyZWUu
Ci0KLSAgICBBcmdzOgotICAgICAgcGF0aDogVGhlIGZpZWxkIHBhdGggdG8gY2FsY3VsYXRlcy4K
LSAgICAgIGludGVyc2VjdGlvbjogVGhlIG91dCB0cmVlIHRvIHJlY29yZCB0aGUgaW50ZXJzZWN0
aW9uIHBhcnQuCi0gICAgIiIiCi0gICAgbm9kZSA9IHNlbGYuX3Jvb3QKLSAgICBmb3IgbmFtZSBp
biBwYXRoLnNwbGl0KCcuJyk6Ci0gICAgICBpZiBuYW1lIG5vdCBpbiBub2RlOgotICAgICAgICBy
ZXR1cm4KLSAgICAgIGVsaWYgbm90IG5vZGVbbmFtZV06Ci0gICAgICAgIGludGVyc2VjdGlvbi5B
ZGRQYXRoKHBhdGgpCi0gICAgICAgIHJldHVybgotICAgICAgbm9kZSA9IG5vZGVbbmFtZV0KLSAg
ICBpbnRlcnNlY3Rpb24uQWRkTGVhZk5vZGVzKHBhdGgsIG5vZGUpCi0KLSAgZGVmIEFkZExlYWZO
b2RlcyhzZWxmLCBwcmVmaXgsIG5vZGUpOgotICAgICIiIkFkZHMgbGVhZiBub2RlcyBiZWdpbiB3
aXRoIHByZWZpeCB0byB0aGlzIHRyZWUuIiIiCi0gICAgaWYgbm90IG5vZGU6Ci0gICAgICBzZWxm
LkFkZFBhdGgocHJlZml4KQotICAgIGZvciBuYW1lIGluIG5vZGU6Ci0gICAgICBjaGlsZF9wYXRo
ID0gcHJlZml4ICsgJy4nICsgbmFtZQotICAgICAgc2VsZi5BZGRMZWFmTm9kZXMoY2hpbGRfcGF0
aCwgbm9kZVtuYW1lXSkKLQotICBkZWYgTWVyZ2VNZXNzYWdlKAotICAgICAgc2VsZiwgc291cmNl
LCBkZXN0aW5hdGlvbiwKLSAgICAgIHJlcGxhY2VfbWVzc2FnZSwgcmVwbGFjZV9yZXBlYXRlZCk6
Ci0gICAgIiIiTWVyZ2UgYWxsIGZpZWxkcyBzcGVjaWZpZWQgYnkgdGhpcyB0cmVlIGZyb20gc291
cmNlIHRvIGRlc3RpbmF0aW9uLiIiIgotICAgIF9NZXJnZU1lc3NhZ2UoCi0gICAgICAgIHNlbGYu
X3Jvb3QsIHNvdXJjZSwgZGVzdGluYXRpb24sIHJlcGxhY2VfbWVzc2FnZSwgcmVwbGFjZV9yZXBl
YXRlZCkKLQotCi1kZWYgX1N0ckNvbnZlcnQodmFsdWUpOgotICAiIiJDb252ZXJ0cyB2YWx1ZSB0
byBzdHIgaWYgaXQgaXMgbm90LiIiIgotICAjIFRoaXMgZmlsZSBpcyBpbXBvcnRlZCBieSBjIGV4
dGVuc2lvbiBhbmQgc29tZSBtZXRob2RzIGxpa2UgQ2xlYXJGaWVsZAotICAjIHJlcXVpcmVzIHN0
cmluZyBmb3IgdGhlIGZpZWxkIG5hbWUuIHB5Mi9weTMgaGFzIGRpZmZlcmVudCB0ZXh0Ci0gICMg
dHlwZSBhbmQgbWF5IHVzZSB1bmljb2RlLgotICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgc3Ry
KToKLSAgICByZXR1cm4gdmFsdWUuZW5jb2RlKCd1dGYtOCcpCi0gIHJldHVybiB2YWx1ZQotCi0K
LWRlZiBfTWVyZ2VNZXNzYWdlKAotICAgIG5vZGUsIHNvdXJjZSwgZGVzdGluYXRpb24sIHJlcGxh
Y2VfbWVzc2FnZSwgcmVwbGFjZV9yZXBlYXRlZCk6Ci0gICIiIk1lcmdlIGFsbCBmaWVsZHMgc3Bl
Y2lmaWVkIGJ5IGEgc3ViLXRyZWUgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24uIiIiCi0gIHNv
dXJjZV9kZXNjcmlwdG9yID0gc291cmNlLkRFU0NSSVBUT1IKLSAgZm9yIG5hbWUgaW4gbm9kZToK
LSAgICBjaGlsZCA9IG5vZGVbbmFtZV0KLSAgICBmaWVsZCA9IHNvdXJjZV9kZXNjcmlwdG9yLmZp
ZWxkc19ieV9uYW1lW25hbWVdCi0gICAgaWYgZmllbGQgaXMgTm9uZToKLSAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ0Vycm9yOiBDYW5cJ3QgZmluZCBmaWVsZCB7MH0gaW4gbWVzc2FnZSB7MX0uJy5m
b3JtYXQoCi0gICAgICAgICAgbmFtZSwgc291cmNlX2Rlc2NyaXB0b3IuZnVsbF9uYW1lKSkKLSAg
ICBpZiBjaGlsZDoKLSAgICAgICMgU3ViLXBhdGhzIGFyZSBvbmx5IGFsbG93ZWQgZm9yIHNpbmd1
bGFyIG1lc3NhZ2UgZmllbGRzLgotICAgICAgaWYgKGZpZWxkLmxhYmVsID09IEZpZWxkRGVzY3Jp
cHRvci5MQUJFTF9SRVBFQVRFRCBvcgotICAgICAgICAgIGZpZWxkLmNwcF90eXBlICE9IEZpZWxk
RGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0UpOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdF
cnJvcjogRmllbGQgezB9IGluIG1lc3NhZ2UgezF9IGlzIG5vdCBhIHNpbmd1bGFyICcKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSBmaWVsZCBhbmQgY2Fubm90IGhhdmUgc3ViLWZp
ZWxkcy4nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc291cmNl
X2Rlc2NyaXB0b3IuZnVsbF9uYW1lKSkKLSAgICAgIF9NZXJnZU1lc3NhZ2UoCi0gICAgICAgICAg
Y2hpbGQsIGdldGF0dHIoc291cmNlLCBuYW1lKSwgZ2V0YXR0cihkZXN0aW5hdGlvbiwgbmFtZSks
Ci0gICAgICAgICAgcmVwbGFjZV9tZXNzYWdlLCByZXBsYWNlX3JlcGVhdGVkKQotICAgICAgY29u
dGludWUKLSAgICBpZiBmaWVsZC5sYWJlbCA9PSBGaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFU
RUQ6Ci0gICAgICBpZiByZXBsYWNlX3JlcGVhdGVkOgotICAgICAgICBkZXN0aW5hdGlvbi5DbGVh
ckZpZWxkKF9TdHJDb252ZXJ0KG5hbWUpKQotICAgICAgcmVwZWF0ZWRfc291cmNlID0gZ2V0YXR0
cihzb3VyY2UsIG5hbWUpCi0gICAgICByZXBlYXRlZF9kZXN0aW5hdGlvbiA9IGdldGF0dHIoZGVz
dGluYXRpb24sIG5hbWUpCi0gICAgICBpZiBmaWVsZC5jcHBfdHlwZSA9PSBGaWVsZERlc2NyaXB0
b3IuQ1BQVFlQRV9NRVNTQUdFOgotICAgICAgICBmb3IgaXRlbSBpbiByZXBlYXRlZF9zb3VyY2U6
Ci0gICAgICAgICAgcmVwZWF0ZWRfZGVzdGluYXRpb24uYWRkKCkuTWVyZ2VGcm9tKGl0ZW0pCi0g
ICAgICBlbHNlOgotICAgICAgICByZXBlYXRlZF9kZXN0aW5hdGlvbi5leHRlbmQocmVwZWF0ZWRf
c291cmNlKQotICAgIGVsc2U6Ci0gICAgICBpZiBmaWVsZC5jcHBfdHlwZSA9PSBGaWVsZERlc2Ny
aXB0b3IuQ1BQVFlQRV9NRVNTQUdFOgotICAgICAgICBpZiByZXBsYWNlX21lc3NhZ2U6Ci0gICAg
ICAgICAgZGVzdGluYXRpb24uQ2xlYXJGaWVsZChfU3RyQ29udmVydChuYW1lKSkKLSAgICAgICAg
aWYgc291cmNlLkhhc0ZpZWxkKG5hbWUpOgotICAgICAgICAgIGdldGF0dHIoZGVzdGluYXRpb24s
IG5hbWUpLk1lcmdlRnJvbShnZXRhdHRyKHNvdXJjZSwgbmFtZSkpCi0gICAgICBlbHNlOgotICAg
ICAgICBzZXRhdHRyKGRlc3RpbmF0aW9uLCBuYW1lLCBnZXRhdHRyKHNvdXJjZSwgbmFtZSkpCi0K
LQotZGVmIF9BZGRGaWVsZFBhdGhzKG5vZGUsIHByZWZpeCwgZmllbGRfbWFzayk6Ci0gICIiIkFk
ZHMgdGhlIGZpZWxkIHBhdGhzIGRlc2NlbmRlZCBmcm9tIG5vZGUgdG8gZmllbGRfbWFzay4iIiIK
LSAgaWYgbm90IG5vZGU6Ci0gICAgZmllbGRfbWFzay5wYXRocy5hcHBlbmQocHJlZml4KQotICAg
IHJldHVybgotICBmb3IgbmFtZSBpbiBzb3J0ZWQobm9kZSk6Ci0gICAgaWYgcHJlZml4OgotICAg
ICAgY2hpbGRfcGF0aCA9IHByZWZpeCArICcuJyArIG5hbWUKLSAgICBlbHNlOgotICAgICAgY2hp
bGRfcGF0aCA9IG5hbWUKLSAgICBfQWRkRmllbGRQYXRocyhub2RlW25hbWVdLCBjaGlsZF9wYXRo
LCBmaWVsZF9tYXNrKQotCi0KLV9JTlRfT1JfRkxPQVQgPSBzaXguaW50ZWdlcl90eXBlcyArIChm
bG9hdCwpCi0KLQotZGVmIF9TZXRTdHJ1Y3RWYWx1ZShzdHJ1Y3RfdmFsdWUsIHZhbHVlKToKLSAg
aWYgdmFsdWUgaXMgTm9uZToKLSAgICBzdHJ1Y3RfdmFsdWUubnVsbF92YWx1ZSA9IDAKLSAgZWxp
ZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKLSAgICAjIE5vdGU6IHRoaXMgY2hlY2sgbXVzdCBj
b21lIGJlZm9yZSB0aGUgbnVtYmVyIGNoZWNrIGJlY2F1c2UgaW4gUHl0aG9uCi0gICAgIyBUcnVl
IGFuZCBGYWxzZSBhcmUgYWxzbyBjb25zaWRlcmVkIG51bWJlcnMuCi0gICAgc3RydWN0X3ZhbHVl
LmJvb2xfdmFsdWUgPSB2YWx1ZQotICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIHNpeC5zdHJpbmdf
dHlwZXMpOgotICAgIHN0cnVjdF92YWx1ZS5zdHJpbmdfdmFsdWUgPSB2YWx1ZQotICBlbGlmIGlz
aW5zdGFuY2UodmFsdWUsIF9JTlRfT1JfRkxPQVQpOgotICAgIHN0cnVjdF92YWx1ZS5udW1iZXJf
dmFsdWUgPSB2YWx1ZQotICBlbHNlOgotICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuZXhwZWN0ZWQg
dHlwZScpCi0KLQotZGVmIF9HZXRTdHJ1Y3RWYWx1ZShzdHJ1Y3RfdmFsdWUpOgotICB3aGljaCA9
IHN0cnVjdF92YWx1ZS5XaGljaE9uZW9mKCdraW5kJykKLSAgaWYgd2hpY2ggPT0gJ3N0cnVjdF92
YWx1ZSc6Ci0gICAgcmV0dXJuIHN0cnVjdF92YWx1ZS5zdHJ1Y3RfdmFsdWUKLSAgZWxpZiB3aGlj
aCA9PSAnbnVsbF92YWx1ZSc6Ci0gICAgcmV0dXJuIE5vbmUKLSAgZWxpZiB3aGljaCA9PSAnbnVt
YmVyX3ZhbHVlJzoKLSAgICByZXR1cm4gc3RydWN0X3ZhbHVlLm51bWJlcl92YWx1ZQotICBlbGlm
IHdoaWNoID09ICdzdHJpbmdfdmFsdWUnOgotICAgIHJldHVybiBzdHJ1Y3RfdmFsdWUuc3RyaW5n
X3ZhbHVlCi0gIGVsaWYgd2hpY2ggPT0gJ2Jvb2xfdmFsdWUnOgotICAgIHJldHVybiBzdHJ1Y3Rf
dmFsdWUuYm9vbF92YWx1ZQotICBlbGlmIHdoaWNoID09ICdsaXN0X3ZhbHVlJzoKLSAgICByZXR1
cm4gc3RydWN0X3ZhbHVlLmxpc3RfdmFsdWUKLSAgZWxpZiB3aGljaCBpcyBOb25lOgotICAgIHJh
aXNlIFZhbHVlRXJyb3IoJ1ZhbHVlIG5vdCBzZXQnKQotCi0KLWNsYXNzIFN0cnVjdChvYmplY3Qp
OgotICAiIiJDbGFzcyBmb3IgU3RydWN0IG1lc3NhZ2UgdHlwZS4iIiIKLQotICBfX3Nsb3RzX18g
PSBbXQotCi0gIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgIHJldHVybiBfR2V0U3Ry
dWN0VmFsdWUoc2VsZi5maWVsZHNba2V5XSkKLQotICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5
LCB2YWx1ZSk6Ci0gICAgX1NldFN0cnVjdFZhbHVlKHNlbGYuZmllbGRzW2tleV0sIHZhbHVlKQot
Ci0gIGRlZiBnZXRfb3JfY3JlYXRlX2xpc3Qoc2VsZiwga2V5KToKLSAgICAiIiJSZXR1cm5zIGEg
bGlzdCBmb3IgdGhpcyBrZXksIGNyZWF0aW5nIGlmIGl0IGRpZG4ndCBleGlzdCBhbHJlYWR5LiIi
IgotICAgIHJldHVybiBzZWxmLmZpZWxkc1trZXldLmxpc3RfdmFsdWUKLQotICBkZWYgZ2V0X29y
X2NyZWF0ZV9zdHJ1Y3Qoc2VsZiwga2V5KToKLSAgICAiIiJSZXR1cm5zIGEgc3RydWN0IGZvciB0
aGlzIGtleSwgY3JlYXRpbmcgaWYgaXQgZGlkbid0IGV4aXN0IGFscmVhZHkuIiIiCi0gICAgcmV0
dXJuIHNlbGYuZmllbGRzW2tleV0uc3RydWN0X3ZhbHVlCi0KLSAgIyBUT0RPKGhhYmVybWFuKTog
YWxsb3cgY29uc3RydWN0aW5nL21lcmdpbmcgZnJvbSBkaWN0LgotCi0KLWNsYXNzIExpc3RWYWx1
ZShvYmplY3QpOgotICAiIiJDbGFzcyBmb3IgTGlzdFZhbHVlIG1lc3NhZ2UgdHlwZS4iIiIKLQot
ICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICByZXR1cm4gbGVuKHNlbGYudmFsdWVzKQotCi0gIGRl
ZiBhcHBlbmQoc2VsZiwgdmFsdWUpOgotICAgIF9TZXRTdHJ1Y3RWYWx1ZShzZWxmLnZhbHVlcy5h
ZGQoKSwgdmFsdWUpCi0KLSAgZGVmIGV4dGVuZChzZWxmLCBlbGVtX3NlcSk6Ci0gICAgZm9yIHZh
bHVlIGluIGVsZW1fc2VxOgotICAgICAgc2VsZi5hcHBlbmQodmFsdWUpCi0KLSAgZGVmIF9fZ2V0
aXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAiIiJSZXRyaWV2ZXMgaXRlbSBieSB0aGUgc3BlY2lm
aWVkIGluZGV4LiIiIgotICAgIHJldHVybiBfR2V0U3RydWN0VmFsdWUoc2VsZi52YWx1ZXMuX19n
ZXRpdGVtX18oaW5kZXgpKQotCi0gIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgdmFsdWUp
OgotICAgIF9TZXRTdHJ1Y3RWYWx1ZShzZWxmLnZhbHVlcy5fX2dldGl0ZW1fXyhpbmRleCksIHZh
bHVlKQotCi0gIGRlZiBpdGVtcyhzZWxmKToKLSAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZikp
OgotICAgICAgeWllbGQgc2VsZltpXQotCi0gIGRlZiBhZGRfc3RydWN0KHNlbGYpOgotICAgICIi
IkFwcGVuZHMgYW5kIHJldHVybnMgYSBzdHJ1Y3QgdmFsdWUgYXMgdGhlIG5leHQgdmFsdWUgaW4g
dGhlIGxpc3QuIiIiCi0gICAgcmV0dXJuIHNlbGYudmFsdWVzLmFkZCgpLnN0cnVjdF92YWx1ZQot
Ci0gIGRlZiBhZGRfbGlzdChzZWxmKToKLSAgICAiIiJBcHBlbmRzIGFuZCByZXR1cm5zIGEgbGlz
dCB2YWx1ZSBhcyB0aGUgbmV4dCB2YWx1ZSBpbiB0aGUgbGlzdC4iIiIKLSAgICByZXR1cm4gc2Vs
Zi52YWx1ZXMuYWRkKCkubGlzdF92YWx1ZQotCi0KLVdLVEJBU0VTID0gewotICAgICdnb29nbGUu
cHJvdG9idWYuQW55JzogQW55LAotICAgICdnb29nbGUucHJvdG9idWYuRHVyYXRpb24nOiBEdXJh
dGlvbiwKLSAgICAnZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzayc6IEZpZWxkTWFzaywKLSAgICAn
Z29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSc6IExpc3RWYWx1ZSwKLSAgICAnZ29vZ2xlLnByb3Rv
YnVmLlN0cnVjdCc6IFN0cnVjdCwKLSAgICAnZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCc6IFRp
bWVzdGFtcCwKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC93
ZWxsX2tub3duX3R5cGVzX3Rlc3QucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwv
d2VsbF9rbm93bl90eXBlc190ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
ZjMyYWM5OTQxZDg4OWFlNjhmNjRhOWEzZmEzOTgyMjdlZmFkYTJmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRl
cm5hbC93ZWxsX2tub3duX3R5cGVzX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2NDQgKzAs
MCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJUZXN0IGZvciBnb29n
bGUucHJvdG9idWYuaW50ZXJuYWwud2VsbF9rbm93bl90eXBlcy4iIiIKLQotX19hdXRob3JfXyA9
ICdqaWVsdW9AZ29vZ2xlLmNvbSAoSmllIEx1byknCi0KLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRh
dGV0aW1lCi0KLXRyeToKLSAgaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdCAgI1BZMjYKLWV4
Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZ29vZ2xlLnByb3Rv
YnVmIGltcG9ydCBhbnlfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZHVyYXRpb25f
cGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZmllbGRfbWFza19wYjIKLWZyb20gZ29v
Z2xlLnByb3RvYnVmIGltcG9ydCBzdHJ1Y3RfcGIyCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBv
cnQgdGltZXN0YW1wX3BiMgotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHVuaXR0ZXN0X3Bi
MgotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IGFueV90ZXN0X3BiMgotZnJv
bSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IHRlc3RfdXRpbAotZnJvbSBnb29nbGUu
cHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IHdlbGxfa25vd25fdHlwZXMKLWZyb20gZ29vZ2xlLnBy
b3RvYnVmIGltcG9ydCBkZXNjcmlwdG9yCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdGV4
dF9mb3JtYXQKLQotCi1jbGFzcyBUaW1lVXRpbFRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToK
LQotICBkZWYgQ2hlY2tUaW1lc3RhbXBDb252ZXJzaW9uKHNlbGYsIG1lc3NhZ2UsIHRleHQpOgot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgbWVzc2FnZS5Ub0pzb25TdHJpbmcoKSkKLSAgICBw
YXJzZWRfbWVzc2FnZSA9IHRpbWVzdGFtcF9wYjIuVGltZXN0YW1wKCkKLSAgICBwYXJzZWRfbWVz
c2FnZS5Gcm9tSnNvblN0cmluZyh0ZXh0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwg
cGFyc2VkX21lc3NhZ2UpCi0KLSAgZGVmIENoZWNrRHVyYXRpb25Db252ZXJzaW9uKHNlbGYsIG1l
c3NhZ2UsIHRleHQpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgbWVzc2FnZS5Ub0pzb25T
dHJpbmcoKSkKLSAgICBwYXJzZWRfbWVzc2FnZSA9IGR1cmF0aW9uX3BiMi5EdXJhdGlvbigpCi0g
ICAgcGFyc2VkX21lc3NhZ2UuRnJvbUpzb25TdHJpbmcodGV4dCkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKG1lc3NhZ2UsIHBhcnNlZF9tZXNzYWdlKQotCi0KLWNsYXNzIFRpbWVVdGlsVGVzdChUaW1l
VXRpbFRlc3RCYXNlKToKLQotICBkZWYgdGVzdFRpbWVzdGFtcFNlcmlhbGl6ZUFuZFBhcnNlKHNl
bGYpOgotICAgIG1lc3NhZ2UgPSB0aW1lc3RhbXBfcGIyLlRpbWVzdGFtcCgpCi0gICAgIyBHZW5l
cmF0ZWQgb3V0cHV0IHNob3VsZCBjb250YWluIDMsIDYsIG9yIDkgZnJhY3Rpb25hbCBkaWdpdHMu
Ci0gICAgbWVzc2FnZS5zZWNvbmRzID0gMAotICAgIG1lc3NhZ2UubmFub3MgPSAwCi0gICAgc2Vs
Zi5DaGVja1RpbWVzdGFtcENvbnZlcnNpb24obWVzc2FnZSwgJzE5NzAtMDEtMDFUMDA6MDA6MDBa
JykKLSAgICBtZXNzYWdlLm5hbm9zID0gMTAwMDAwMDAKLSAgICBzZWxmLkNoZWNrVGltZXN0YW1w
Q29udmVyc2lvbihtZXNzYWdlLCAnMTk3MC0wMS0wMVQwMDowMDowMC4wMTBaJykKLSAgICBtZXNz
YWdlLm5hbm9zID0gMTAwMDAKLSAgICBzZWxmLkNoZWNrVGltZXN0YW1wQ29udmVyc2lvbihtZXNz
YWdlLCAnMTk3MC0wMS0wMVQwMDowMDowMC4wMDAwMTBaJykKLSAgICBtZXNzYWdlLm5hbm9zID0g
MTAKLSAgICBzZWxmLkNoZWNrVGltZXN0YW1wQ29udmVyc2lvbihtZXNzYWdlLCAnMTk3MC0wMS0w
MVQwMDowMDowMC4wMDAwMDAwMTBaJykKLSAgICAjIFRlc3QgbWluIHRpbWVzdGFtcHMuCi0gICAg
bWVzc2FnZS5zZWNvbmRzID0gLTYyMTM1NTk2ODAwCi0gICAgbWVzc2FnZS5uYW5vcyA9IDAKLSAg
ICBzZWxmLkNoZWNrVGltZXN0YW1wQ29udmVyc2lvbihtZXNzYWdlLCAnMDAwMS0wMS0wMVQwMDow
MDowMFonKQotICAgICMgVGVzdCBtYXggdGltZXN0YW1wcy4KLSAgICBtZXNzYWdlLnNlY29uZHMg
PSAyNTM0MDIzMDA3OTkKLSAgICBtZXNzYWdlLm5hbm9zID0gOTk5OTk5OTk5Ci0gICAgc2VsZi5D
aGVja1RpbWVzdGFtcENvbnZlcnNpb24obWVzc2FnZSwgJzk5OTktMTItMzFUMjM6NTk6NTkuOTk5
OTk5OTk5WicpCi0gICAgIyBUZXN0IG5lZ2F0aXZlIHRpbWVzdGFtcHMuCi0gICAgbWVzc2FnZS5z
ZWNvbmRzID0gLTEKLSAgICBzZWxmLkNoZWNrVGltZXN0YW1wQ29udmVyc2lvbihtZXNzYWdlLCAn
MTk2OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5OTlaJykKLQotICAgICMgUGFyc2luZyBhY2NlcHRz
IGFuIGZyYWN0aW9uYWwgZGlnaXRzIGFzIGxvbmcgYXMgdGhleSBmaXQgaW50byBuYW5vCi0gICAg
IyBwcmVjaXNpb24uCi0gICAgbWVzc2FnZS5Gcm9tSnNvblN0cmluZygnMTk3MC0wMS0wMVQwMDow
MDowMC4xWicpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtZXNzYWdlLnNlY29uZHMpCi0gICAg
c2VsZi5hc3NlcnRFcXVhbCgxMDAwMDAwMDAsIG1lc3NhZ2UubmFub3MpCi0gICAgIyBQYXJzaW5n
IGFjY3BldHMgb2Zmc2V0cy4KLSAgICBtZXNzYWdlLkZyb21Kc29uU3RyaW5nKCcxOTcwLTAxLTAx
VDAwOjAwOjAwLTA4OjAwJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKDggKiAzNjAwLCBtZXNzYWdl
LnNlY29uZHMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtZXNzYWdlLm5hbm9zKQotCi0gIGRl
ZiB0ZXN0RHVyYXRpb25TZXJpYWxpemVBbmRQYXJzZShzZWxmKToKLSAgICBtZXNzYWdlID0gZHVy
YXRpb25fcGIyLkR1cmF0aW9uKCkKLSAgICAjIEdlbmVyYXRlZCBvdXRwdXQgc2hvdWxkIGNvbnRh
aW4gMywgNiwgb3IgOSBmcmFjdGlvbmFsIGRpZ2l0cy4KLSAgICBtZXNzYWdlLnNlY29uZHMgPSAw
Ci0gICAgbWVzc2FnZS5uYW5vcyA9IDAKLSAgICBzZWxmLkNoZWNrRHVyYXRpb25Db252ZXJzaW9u
KG1lc3NhZ2UsICcwcycpCi0gICAgbWVzc2FnZS5uYW5vcyA9IDEwMDAwMDAwCi0gICAgc2VsZi5D
aGVja0R1cmF0aW9uQ29udmVyc2lvbihtZXNzYWdlLCAnMC4wMTBzJykKLSAgICBtZXNzYWdlLm5h
bm9zID0gMTAwMDAKLSAgICBzZWxmLkNoZWNrRHVyYXRpb25Db252ZXJzaW9uKG1lc3NhZ2UsICcw
LjAwMDAxMHMnKQotICAgIG1lc3NhZ2UubmFub3MgPSAxMAotICAgIHNlbGYuQ2hlY2tEdXJhdGlv
bkNvbnZlcnNpb24obWVzc2FnZSwgJzAuMDAwMDAwMDEwcycpCi0KLSAgICAjIFRlc3QgbWluIGFu
ZCBtYXgKLSAgICBtZXNzYWdlLnNlY29uZHMgPSAzMTU1NzYwMDAwMDAKLSAgICBtZXNzYWdlLm5h
bm9zID0gOTk5OTk5OTk5Ci0gICAgc2VsZi5DaGVja0R1cmF0aW9uQ29udmVyc2lvbihtZXNzYWdl
LCAnMzE1NTc2MDAwMDAwLjk5OTk5OTk5OXMnKQotICAgIG1lc3NhZ2Uuc2Vjb25kcyA9IC0zMTU1
NzYwMDAwMDAKLSAgICBtZXNzYWdlLm5hbm9zID0gLTk5OTk5OTk5OQotICAgIHNlbGYuQ2hlY2tE
dXJhdGlvbkNvbnZlcnNpb24obWVzc2FnZSwgJy0zMTU1NzYwMDAwMDAuOTk5OTk5OTk5cycpCi0K
LSAgICAjIFBhcnNpbmcgYWNjZXB0cyBhbiBmcmFjdGlvbmFsIGRpZ2l0cyBhcyBsb25nIGFzIHRo
ZXkgZml0IGludG8gbmFubwotICAgICMgcHJlY2lzaW9uLgotICAgIG1lc3NhZ2UuRnJvbUpzb25T
dHJpbmcoJzAuMXMnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAwMDAwMDAwLCBtZXNzYWdlLm5h
bm9zKQotICAgIG1lc3NhZ2UuRnJvbUpzb25TdHJpbmcoJzAuMDAwMDAwMXMnKQotICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMTAwLCBtZXNzYWdlLm5hbm9zKQotCi0gIGRlZiB0ZXN0VGltZXN0YW1wSW50
ZWdlckNvbnZlcnNpb24oc2VsZik6Ci0gICAgbWVzc2FnZSA9IHRpbWVzdGFtcF9wYjIuVGltZXN0
YW1wKCkKLSAgICBtZXNzYWdlLkZyb21OYW5vc2Vjb25kcygxKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJzE5NzAtMDEtMDFUMDA6MDA6MDAuMDAwMDAwMDAxWicsCi0gICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlLlRvSnNvblN0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbWVzc2Fn
ZS5Ub05hbm9zZWNvbmRzKCkpCi0KLSAgICBtZXNzYWdlLkZyb21OYW5vc2Vjb25kcygtMSkKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKCcxOTY5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTk5OVonLAotICAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZS5Ub0pzb25TdHJpbmcoKSkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKC0xLCBtZXNzYWdlLlRvTmFub3NlY29uZHMoKSkKLQotICAgIG1lc3NhZ2UuRnJvbU1p
Y3Jvc2Vjb25kcygxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzE5NzAtMDEtMDFUMDA6MDA6MDAu
MDAwMDAxWicsCi0gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLlRvSnNvblN0cmluZygpKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbWVzc2FnZS5Ub01pY3Jvc2Vjb25kcygpKQotCi0gICAg
bWVzc2FnZS5Gcm9tTWljcm9zZWNvbmRzKC0xKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzE5Njkt
MTItMzFUMjM6NTk6NTkuOTk5OTk5WicsCi0gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLlRv
SnNvblN0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIG1lc3NhZ2UuVG9NaWNyb3Nl
Y29uZHMoKSkKLQotICAgIG1lc3NhZ2UuRnJvbU1pbGxpc2Vjb25kcygxKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJzE5NzAtMDEtMDFUMDA6MDA6MDAuMDAxWicsCi0gICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlLlRvSnNvblN0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbWVzc2Fn
ZS5Ub01pbGxpc2Vjb25kcygpKQotCi0gICAgbWVzc2FnZS5Gcm9tTWlsbGlzZWNvbmRzKC0xKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzE5NjktMTItMzFUMjM6NTk6NTkuOTk5WicsCi0gICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlLlRvSnNvblN0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoLTEsIG1lc3NhZ2UuVG9NaWxsaXNlY29uZHMoKSkKLQotICAgIG1lc3NhZ2UuRnJvbVNlY29u
ZHMoMSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCcxOTcwLTAxLTAxVDAwOjAwOjAxWicsCi0gICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlLlRvSnNvblN0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMSwgbWVzc2FnZS5Ub1NlY29uZHMoKSkKLQotICAgIG1lc3NhZ2UuRnJvbVNlY29uZHMo
LTEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnMTk2OS0xMi0zMVQyMzo1OTo1OVonLAotICAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZS5Ub0pzb25TdHJpbmcoKSkKLSAgICBzZWxmLmFzc2VydEVx
dWFsKC0xLCBtZXNzYWdlLlRvU2Vjb25kcygpKQotCi0gICAgbWVzc2FnZS5Gcm9tTmFub3NlY29u
ZHMoMTk5OSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIG1lc3NhZ2UuVG9NaWNyb3NlY29uZHMo
KSkKLSAgICAjIEZvciBuZWdhdGl2ZSB2YWx1ZXMsIFRpbWVzdGFtcCB3aWxsIGJlIHJvdW5kZWQg
ZG93bi4KLSAgICAjIEZvciBleGFtcGxlLCAiMTk2OS0xMi0zMVQyMzo1OTo1OS41WiIgKGkuZS4s
IC0wLjVzKSByb3VuZGVkIHRvIHNlY29uZHMKLSAgICAjIHdpbGwgYmUgIjE5NjktMTItMzFUMjM6
NTk6NTlaIiAoaS5lLiwgLTFzKSByYXRoZXIgdGhhbgotICAgICMgIjE5NzAtMDEtMDFUMDA6MDA6
MDBaIiAoaS5lLiwgMHMpLgotICAgIG1lc3NhZ2UuRnJvbU5hbm9zZWNvbmRzKC0xOTk5KQotICAg
IHNlbGYuYXNzZXJ0RXF1YWwoLTIsIG1lc3NhZ2UuVG9NaWNyb3NlY29uZHMoKSkKLQotICBkZWYg
dGVzdER1cmF0aW9uSW50ZWdlckNvbnZlcnNpb24oc2VsZik6Ci0gICAgbWVzc2FnZSA9IGR1cmF0
aW9uX3BiMi5EdXJhdGlvbigpCi0gICAgbWVzc2FnZS5Gcm9tTmFub3NlY29uZHMoMSkKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKCcwLjAwMDAwMDAwMXMnLAotICAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZS5Ub0pzb25TdHJpbmcoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIG1lc3NhZ2UuVG9O
YW5vc2Vjb25kcygpKQotCi0gICAgbWVzc2FnZS5Gcm9tTmFub3NlY29uZHMoLTEpCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnLTAuMDAwMDAwMDAxcycsCi0gICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlLlRvSnNvblN0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIG1lc3NhZ2UuVG9O
YW5vc2Vjb25kcygpKQotCi0gICAgbWVzc2FnZS5Gcm9tTWljcm9zZWNvbmRzKDEpCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnMC4wMDAwMDFzJywKLSAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uu
VG9Kc29uU3RyaW5nKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtZXNzYWdlLlRvTWljcm9z
ZWNvbmRzKCkpCi0KLSAgICBtZXNzYWdlLkZyb21NaWNyb3NlY29uZHMoLTEpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbCgnLTAuMDAwMDAxcycsCi0gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLlRv
SnNvblN0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIG1lc3NhZ2UuVG9NaWNyb3Nl
Y29uZHMoKSkKLQotICAgIG1lc3NhZ2UuRnJvbU1pbGxpc2Vjb25kcygxKQotICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJzAuMDAxcycsCi0gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLlRvSnNvblN0
cmluZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbWVzc2FnZS5Ub01pbGxpc2Vjb25kcygp
KQotCi0gICAgbWVzc2FnZS5Gcm9tTWlsbGlzZWNvbmRzKC0xKQotICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJy0wLjAwMXMnLAotICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5Ub0pzb25TdHJpbmco
KSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBtZXNzYWdlLlRvTWlsbGlzZWNvbmRzKCkpCi0K
LSAgICBtZXNzYWdlLkZyb21TZWNvbmRzKDEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnMXMnLCBt
ZXNzYWdlLlRvSnNvblN0cmluZygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbWVzc2FnZS5U
b1NlY29uZHMoKSkKLQotICAgIG1lc3NhZ2UuRnJvbVNlY29uZHMoLTEpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbCgnLTFzJywKLSAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuVG9Kc29uU3RyaW5n
KCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgbWVzc2FnZS5Ub1NlY29uZHMoKSkKLQotICAg
ICMgVGVzdCB0cnVuY2F0aW9uIGJlaGF2aW9yLgotICAgIG1lc3NhZ2UuRnJvbU5hbm9zZWNvbmRz
KDE5OTkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtZXNzYWdlLlRvTWljcm9zZWNvbmRzKCkp
Ci0KLSAgICAjIEZvciBuZWdhdGl2ZSB2YWx1ZXMsIER1cmF0aW9uIHdpbGwgYmUgcm91bmRlZCB0
b3dhcmRzIDAuCi0gICAgbWVzc2FnZS5Gcm9tTmFub3NlY29uZHMoLTE5OTkpCi0gICAgc2VsZi5h
c3NlcnRFcXVhbCgtMSwgbWVzc2FnZS5Ub01pY3Jvc2Vjb25kcygpKQotCi0gIGRlZiB0ZXN0RGF0
ZXRpbWVDb252ZXJpc29uKHNlbGYpOgotICAgIG1lc3NhZ2UgPSB0aW1lc3RhbXBfcGIyLlRpbWVz
dGFtcCgpCi0gICAgZHQgPSBkYXRldGltZSgxOTcwLCAxLCAxKQotICAgIG1lc3NhZ2UuRnJvbURh
dGV0aW1lKGR0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIG1lc3NhZ2UuVG9EYXRldGltZSgp
KQotCi0gICAgbWVzc2FnZS5Gcm9tTWlsbGlzZWNvbmRzKDE5OTkpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbChkYXRldGltZSgxOTcwLCAxLCAxLCAwLCAwLCAxLCA5OTkwMDApLAotICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZS5Ub0RhdGV0aW1lKCkpCi0KLSAgZGVmIHRlc3RUaW1lZGVsdGFDb252
ZXJzaW9uKHNlbGYpOgotICAgIG1lc3NhZ2UgPSBkdXJhdGlvbl9wYjIuRHVyYXRpb24oKQotICAg
IG1lc3NhZ2UuRnJvbU5hbm9zZWNvbmRzKDE5OTk5OTk5OTkpCi0gICAgdGQgPSBtZXNzYWdlLlRv
VGltZWRlbHRhKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHRkLnNlY29uZHMpCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbCg5OTk5OTksIHRkLm1pY3Jvc2Vjb25kcykKLQotICAgIG1lc3NhZ2UuRnJv
bU5hbm9zZWNvbmRzKC0xOTk5OTk5OTk5KQotICAgIHRkID0gbWVzc2FnZS5Ub1RpbWVkZWx0YSgp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgdGQuZGF5cykKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDg2Mzk4LCB0ZC5zZWNvbmRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdGQubWljcm9zZWNv
bmRzKQotCi0gICAgbWVzc2FnZS5Gcm9tTWljcm9zZWNvbmRzKC0xKQotICAgIHRkID0gbWVzc2Fn
ZS5Ub1RpbWVkZWx0YSgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgdGQuZGF5cykKLSAgICBz
ZWxmLmFzc2VydEVxdWFsKDg2Mzk5LCB0ZC5zZWNvbmRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwo
OTk5OTk5LCB0ZC5taWNyb3NlY29uZHMpCi0gICAgY29udmVydGVkX21lc3NhZ2UgPSBkdXJhdGlv
bl9wYjIuRHVyYXRpb24oKQotICAgIGNvbnZlcnRlZF9tZXNzYWdlLkZyb21UaW1lZGVsdGEodGQp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCBjb252ZXJ0ZWRfbWVzc2FnZSkKLQotICBk
ZWYgdGVzdEludmFsaWRUaW1lc3RhbXAoc2VsZik6Ci0gICAgbWVzc2FnZSA9IHRpbWVzdGFtcF9w
YjIuVGltZXN0YW1wKCkKLSAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKLSAgICAgICAgVmFs
dWVFcnJvciwKLSAgICAgICAgJ3RpbWUgZGF0YSBcJzEwMDAwLTAxLTAxVDAwOjAwOjAwXCcgZG9l
cyBub3QgbWF0Y2gnCi0gICAgICAgICcgZm9ybWF0IFwnJVktJW0tJWRUJUg6JU06JVNcJycsCi0g
ICAgICAgIG1lc3NhZ2UuRnJvbUpzb25TdHJpbmcsICcxMDAwMC0wMS0wMVQwMDowMDowMC4wMFon
KQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAotICAgICAgICB3ZWxsX2tub3duX3R5cGVz
LlBhcnNlRXJyb3IsCi0gICAgICAgICduYW5vcyAwMTIzNDU2Nzg5MDEyIG1vcmUgdGhhbiA5IGZy
YWN0aW9uYWwgZGlnaXRzLicsCi0gICAgICAgIG1lc3NhZ2UuRnJvbUpzb25TdHJpbmcsCi0gICAg
ICAgICcxOTcwLTAxLTAxVDAwOjAwOjAwLjAxMjM0NTY3ODkwMTJaJykKLSAgICBzZWxmLmFzc2Vy
dFJhaXNlc1JlZ2V4cCgKLSAgICAgICAgd2VsbF9rbm93bl90eXBlcy5QYXJzZUVycm9yLAotICAg
ICAgICAocidJbnZhbGlkIHRpbWV6b25lIG9mZnNldCB2YWx1ZTogXCswOC4nKSwKLSAgICAgICAg
bWVzc2FnZS5Gcm9tSnNvblN0cmluZywKLSAgICAgICAgJzE5NzItMDEtMDFUMDE6MDA6MDAuMDEr
MDgnLCkKLSAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKLSAgICAgICAgVmFsdWVFcnJvciwK
LSAgICAgICAgJ3llYXIgaXMgb3V0IG9mIHJhbmdlJywKLSAgICAgICAgbWVzc2FnZS5Gcm9tSnNv
blN0cmluZywKLSAgICAgICAgJzAwMDAtMDEtMDFUMDA6MDA6MDBaJykKLSAgICBtZXNzYWdlLnNl
Y29uZHMgPSAyNTM0MDIzMDA4MDAKLSAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKLSAgICAg
ICAgT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgJ2RhdGUgdmFsdWUgb3V0IG9mIHJhbmdlJywKLSAg
ICAgICAgbWVzc2FnZS5Ub0pzb25TdHJpbmcpCi0KLSAgZGVmIHRlc3RJbnZhbGlkRHVyYXRpb24o
c2VsZik6Ci0gICAgbWVzc2FnZSA9IGR1cmF0aW9uX3BiMi5EdXJhdGlvbigpCi0gICAgc2VsZi5h
c3NlcnRSYWlzZXNSZWdleHAoCi0gICAgICAgIHdlbGxfa25vd25fdHlwZXMuUGFyc2VFcnJvciwK
LSAgICAgICAgJ0R1cmF0aW9uIG11c3QgZW5kIHdpdGggbGV0dGVyICJzIjogMS4nLAotICAgICAg
ICBtZXNzYWdlLkZyb21Kc29uU3RyaW5nLCAnMScpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdl
eHAoCi0gICAgICAgIHdlbGxfa25vd25fdHlwZXMuUGFyc2VFcnJvciwKLSAgICAgICAgJ0NvdWxk
blwndCBwYXJzZSBkdXJhdGlvbjogMS4uLjJzLicsCi0gICAgICAgIG1lc3NhZ2UuRnJvbUpzb25T
dHJpbmcsICcxLi4uMnMnKQotCi0KLWNsYXNzIEZpZWxkTWFza1Rlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgotCi0gIGRlZiB0ZXN0U3RyaW5nRm9ybWF0KHNlbGYpOgotICAgIG1hc2sgPSBmaWVsZF9t
YXNrX3BiMi5GaWVsZE1hc2soKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIG1hc2suVG9Kc29u
U3RyaW5nKCkpCi0gICAgbWFzay5wYXRocy5hcHBlbmQoJ2ZvbycpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbCgnZm9vJywgbWFzay5Ub0pzb25TdHJpbmcoKSkKLSAgICBtYXNrLnBhdGhzLmFwcGVuZCgn
YmFyJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28sYmFyJywgbWFzay5Ub0pzb25TdHJpbmco
KSkKLQotICAgIG1hc2suRnJvbUpzb25TdHJpbmcoJycpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgn
JywgbWFzay5Ub0pzb25TdHJpbmcoKSkKLSAgICBtYXNrLkZyb21Kc29uU3RyaW5nKCdmb28nKQot
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydmb28nXSwgbWFzay5wYXRocykKLSAgICBtYXNrLkZyb21K
c29uU3RyaW5nKCdmb28sYmFyJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKFsnZm9vJywgJ2Jhcidd
LCBtYXNrLnBhdGhzKQotCi0gIGRlZiB0ZXN0RGVzY3JpcHRvclRvRmllbGRNYXNrKHNlbGYpOgot
ICAgIG1hc2sgPSBmaWVsZF9tYXNrX3BiMi5GaWVsZE1hc2soKQotICAgIG1zZ19kZXNjcmlwdG9y
ID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcy5ERVNDUklQVE9SCi0gICAgbWFzay5BbGxGaWVs
ZHNGcm9tRGVzY3JpcHRvcihtc2dfZGVzY3JpcHRvcikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDc1
LCBsZW4obWFzay5wYXRocykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG1hc2suSXNWYWxpZEZvckRl
c2NyaXB0b3IobXNnX2Rlc2NyaXB0b3IpKQotICAgIGZvciBmaWVsZCBpbiBtc2dfZGVzY3JpcHRv
ci5maWVsZHM6Ci0gICAgICBzZWxmLmFzc2VydFRydWUoZmllbGQubmFtZSBpbiBtYXNrLnBhdGhz
KQotICAgIG1hc2sucGF0aHMuYXBwZW5kKCdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5iYicpCi0g
ICAgc2VsZi5hc3NlcnRUcnVlKG1hc2suSXNWYWxpZEZvckRlc2NyaXB0b3IobXNnX2Rlc2NyaXB0
b3IpKQotICAgIG1hc2sucGF0aHMuYXBwZW5kKCdyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZS5iYicp
Ci0gICAgc2VsZi5hc3NlcnRGYWxzZShtYXNrLklzVmFsaWRGb3JEZXNjcmlwdG9yKG1zZ19kZXNj
cmlwdG9yKSkKLQotICBkZWYgdGVzdENhbm9uaWNhbEZyb20oc2VsZik6Ci0gICAgbWFzayA9IGZp
ZWxkX21hc2tfcGIyLkZpZWxkTWFzaygpCi0gICAgb3V0X21hc2sgPSBmaWVsZF9tYXNrX3BiMi5G
aWVsZE1hc2soKQotICAgICMgUGF0aHMgd2lsbCBiZSBzb3J0ZWQuCi0gICAgbWFzay5Gcm9tSnNv
blN0cmluZygnYmF6LnF1eixiYXIsZm9vJykKLSAgICBvdXRfbWFzay5DYW5vbmljYWxGb3JtRnJv
bU1hc2sobWFzaykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdiYXIsYmF6LnF1eixmb28nLCBvdXRf
bWFzay5Ub0pzb25TdHJpbmcoKSkKLSAgICAjIER1cGxpY2F0ZWQgcGF0aHMgd2lsbCBiZSByZW1v
dmVkLgotICAgIG1hc2suRnJvbUpzb25TdHJpbmcoJ2ZvbyxiYXIsZm9vJykKLSAgICBvdXRfbWFz
ay5DYW5vbmljYWxGb3JtRnJvbU1hc2sobWFzaykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdiYXIs
Zm9vJywgb3V0X21hc2suVG9Kc29uU3RyaW5nKCkpCi0gICAgIyBTdWItcGF0aHMgb2Ygb3RoZXIg
cGF0aHMgd2lsbCBiZSByZW1vdmVkLgotICAgIG1hc2suRnJvbUpzb25TdHJpbmcoJ2Zvby5iMSxi
YXIuYjEsZm9vLmIyLGJhcicpCi0gICAgb3V0X21hc2suQ2Fub25pY2FsRm9ybUZyb21NYXNrKG1h
c2spCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFyLGZvby5iMSxmb28uYjInLCBvdXRfbWFzay5U
b0pzb25TdHJpbmcoKSkKLQotICAgICMgVGVzdCBtb3JlIGRlZXBseSBuZXN0ZWQgY2FzZXMuCi0g
ICAgbWFzay5Gcm9tSnNvblN0cmluZygKLSAgICAgICAgJ2Zvby5iYXIuYmF6MSxmb28uYmFyLmJh
ejIucXV6LGZvby5iYXIuYmF6MicpCi0gICAgb3V0X21hc2suQ2Fub25pY2FsRm9ybUZyb21NYXNr
KG1hc2spCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vLmJhci5iYXoxLGZvby5iYXIuYmF6Mics
Ci0gICAgICAgICAgICAgICAgICAgICBvdXRfbWFzay5Ub0pzb25TdHJpbmcoKSkKLSAgICBtYXNr
LkZyb21Kc29uU3RyaW5nKAotICAgICAgICAnZm9vLmJhci5iYXoxLGZvby5iYXIuYmF6Mixmb28u
YmFyLmJhejIucXV6JykKLSAgICBvdXRfbWFzay5DYW5vbmljYWxGb3JtRnJvbU1hc2sobWFzaykK
LSAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28uYmFyLmJhejEsZm9vLmJhci5iYXoyJywKLSAgICAg
ICAgICAgICAgICAgICAgIG91dF9tYXNrLlRvSnNvblN0cmluZygpKQotICAgIG1hc2suRnJvbUpz
b25TdHJpbmcoCi0gICAgICAgICdmb28uYmFyLmJhejEsZm9vLmJhci5iYXoyLGZvby5iYXIuYmF6
Mi5xdXosZm9vLmJhcicpCi0gICAgb3V0X21hc2suQ2Fub25pY2FsRm9ybUZyb21NYXNrKG1hc2sp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vLmJhcicsIG91dF9tYXNrLlRvSnNvblN0cmluZygp
KQotICAgIG1hc2suRnJvbUpzb25TdHJpbmcoCi0gICAgICAgICdmb28uYmFyLmJhejEsZm9vLmJh
ci5iYXoyLGZvby5iYXIuYmF6Mi5xdXosZm9vJykKLSAgICBvdXRfbWFzay5DYW5vbmljYWxGb3Jt
RnJvbU1hc2sobWFzaykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28nLCBvdXRfbWFzay5Ub0pz
b25TdHJpbmcoKSkKLQotICBkZWYgdGVzdFVuaW9uKHNlbGYpOgotICAgIG1hc2sxID0gZmllbGRf
bWFza19wYjIuRmllbGRNYXNrKCkKLSAgICBtYXNrMiA9IGZpZWxkX21hc2tfcGIyLkZpZWxkTWFz
aygpCi0gICAgb3V0X21hc2sgPSBmaWVsZF9tYXNrX3BiMi5GaWVsZE1hc2soKQotICAgIG1hc2sx
LkZyb21Kc29uU3RyaW5nKCdmb28sYmF6JykKLSAgICBtYXNrMi5Gcm9tSnNvblN0cmluZygnYmFy
LHF1eicpCi0gICAgb3V0X21hc2suVW5pb24obWFzazEsIG1hc2syKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ2JhcixiYXosZm9vLHF1eicsIG91dF9tYXNrLlRvSnNvblN0cmluZygpKQotICAgICMg
T3ZlcmxhcCB3aXRoIGR1cGxpY2F0ZWQgcGF0aHMuCi0gICAgbWFzazEuRnJvbUpzb25TdHJpbmco
J2ZvbyxiYXouYmInKQotICAgIG1hc2syLkZyb21Kc29uU3RyaW5nKCdiYXouYmIscXV6JykKLSAg
ICBvdXRfbWFzay5VbmlvbihtYXNrMSwgbWFzazIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnYmF6
LmJiLGZvbyxxdXonLCBvdXRfbWFzay5Ub0pzb25TdHJpbmcoKSkKLSAgICAjIE92ZXJsYXAgd2l0
aCBwYXRocyBjb3ZlcmluZyBzb21lIG90aGVyIHBhdGhzLgotICAgIG1hc2sxLkZyb21Kc29uU3Ry
aW5nKCdmb28uYmFyLmJheixxdXonKQotICAgIG1hc2syLkZyb21Kc29uU3RyaW5nKCdmb28uYmFy
LGJhcicpCi0gICAgb3V0X21hc2suVW5pb24obWFzazEsIG1hc2syKQotICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ2Jhcixmb28uYmFyLHF1eicsIG91dF9tYXNrLlRvSnNvblN0cmluZygpKQotCi0gIGRl
ZiB0ZXN0SW50ZXJzZWN0KHNlbGYpOgotICAgIG1hc2sxID0gZmllbGRfbWFza19wYjIuRmllbGRN
YXNrKCkKLSAgICBtYXNrMiA9IGZpZWxkX21hc2tfcGIyLkZpZWxkTWFzaygpCi0gICAgb3V0X21h
c2sgPSBmaWVsZF9tYXNrX3BiMi5GaWVsZE1hc2soKQotICAgICMgVGVzdCBjYXNlcyB3aXRob3V0
IG92ZXJsYXBwaW5nLgotICAgIG1hc2sxLkZyb21Kc29uU3RyaW5nKCdmb28sYmF6JykKLSAgICBt
YXNrMi5Gcm9tSnNvblN0cmluZygnYmFyLHF1eicpCi0gICAgb3V0X21hc2suSW50ZXJzZWN0KG1h
c2sxLCBtYXNrMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBvdXRfbWFzay5Ub0pzb25TdHJp
bmcoKSkKLSAgICAjIE92ZXJsYXAgd2l0aCBkdXBsaWNhdGVkIHBhdGhzLgotICAgIG1hc2sxLkZy
b21Kc29uU3RyaW5nKCdmb28sYmF6LmJiJykKLSAgICBtYXNrMi5Gcm9tSnNvblN0cmluZygnYmF6
LmJiLHF1eicpCi0gICAgb3V0X21hc2suSW50ZXJzZWN0KG1hc2sxLCBtYXNrMikKLSAgICBzZWxm
LmFzc2VydEVxdWFsKCdiYXouYmInLCBvdXRfbWFzay5Ub0pzb25TdHJpbmcoKSkKLSAgICAjIE92
ZXJsYXAgd2l0aCBwYXRocyBjb3ZlcmluZyBzb21lIG90aGVyIHBhdGhzLgotICAgIG1hc2sxLkZy
b21Kc29uU3RyaW5nKCdmb28uYmFyLmJheixxdXonKQotICAgIG1hc2syLkZyb21Kc29uU3RyaW5n
KCdmb28uYmFyLGJhcicpCi0gICAgb3V0X21hc2suSW50ZXJzZWN0KG1hc2sxLCBtYXNrMikKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKCdmb28uYmFyLmJheicsIG91dF9tYXNrLlRvSnNvblN0cmluZygp
KQotICAgIG1hc2sxLkZyb21Kc29uU3RyaW5nKCdmb28uYmFyLGJhcicpCi0gICAgbWFzazIuRnJv
bUpzb25TdHJpbmcoJ2Zvby5iYXIuYmF6LHF1eicpCi0gICAgb3V0X21hc2suSW50ZXJzZWN0KG1h
c2sxLCBtYXNrMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28uYmFyLmJheicsIG91dF9tYXNr
LlRvSnNvblN0cmluZygpKQotCi0gIGRlZiB0ZXN0TWVyZ2VNZXNzYWdlKHNlbGYpOgotICAgICMg
VGVzdCBtZXJnZSBvbmUgZmllbGQuCi0gICAgc3JjID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBl
cygpCi0gICAgdGVzdF91dGlsLlNldEFsbEZpZWxkcyhzcmMpCi0gICAgZm9yIGZpZWxkIGluIHNy
Yy5ERVNDUklQVE9SLmZpZWxkczoKLSAgICAgIGlmIGZpZWxkLmNvbnRhaW5pbmdfb25lb2Y6Ci0g
ICAgICAgIGNvbnRpbnVlCi0gICAgICBmaWVsZF9uYW1lID0gZmllbGQubmFtZQotICAgICAgZHN0
ID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgICAjIE9ubHkgc2V0IG9uZSBwYXRo
IHRvIG1hc2suCi0gICAgICBtYXNrID0gZmllbGRfbWFza19wYjIuRmllbGRNYXNrKCkKLSAgICAg
IG1hc2sucGF0aHMuYXBwZW5kKGZpZWxkX25hbWUpCi0gICAgICBtYXNrLk1lcmdlTWVzc2FnZShz
cmMsIGRzdCkKLSAgICAgICMgVGhlIGV4cGVjdGVkIHJlc3VsdCBtZXNzYWdlLgotICAgICAgbXNn
ID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgICBpZiBmaWVsZC5sYWJlbCA9PSBk
ZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBFQVRFRDoKLSAgICAgICAgcmVwZWF0
ZWRfc3JjID0gZ2V0YXR0cihzcmMsIGZpZWxkX25hbWUpCi0gICAgICAgIHJlcGVhdGVkX21zZyA9
IGdldGF0dHIobXNnLCBmaWVsZF9uYW1lKQotICAgICAgICBpZiBmaWVsZC5jcHBfdHlwZSA9PSBk
ZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgICAgZm9y
IGl0ZW0gaW4gcmVwZWF0ZWRfc3JjOgotICAgICAgICAgICAgcmVwZWF0ZWRfbXNnLmFkZCgpLkNv
cHlGcm9tKGl0ZW0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcmVwZWF0ZWRfbXNnLmV4dGVu
ZChyZXBlYXRlZF9zcmMpCi0gICAgICBlbGlmIGZpZWxkLmNwcF90eXBlID09IGRlc2NyaXB0b3Iu
RmllbGREZXNjcmlwdG9yLkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgZ2V0YXR0cihtc2csIGZp
ZWxkX25hbWUpLkNvcHlGcm9tKGdldGF0dHIoc3JjLCBmaWVsZF9uYW1lKSkKLSAgICAgIGVsc2U6
Ci0gICAgICAgIHNldGF0dHIobXNnLCBmaWVsZF9uYW1lLCBnZXRhdHRyKHNyYywgZmllbGRfbmFt
ZSkpCi0gICAgICAjIE9ubHkgZmllbGQgc3BlY2lmaWVkIGluIG1hc2sgaXMgbWVyZ2VkLgotICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGRzdCkKLQotICAgICMgVGVzdCBtZXJnZSBuZXN0ZWQg
ZmllbGRzLgotICAgIG5lc3RlZF9zcmMgPSB1bml0dGVzdF9wYjIuTmVzdGVkVGVzdEFsbFR5cGVz
KCkKLSAgICBuZXN0ZWRfZHN0ID0gdW5pdHRlc3RfcGIyLk5lc3RlZFRlc3RBbGxUeXBlcygpCi0g
ICAgbmVzdGVkX3NyYy5jaGlsZC5wYXlsb2FkLm9wdGlvbmFsX2ludDMyID0gMTIzNAotICAgIG5l
c3RlZF9zcmMuY2hpbGQuY2hpbGQucGF5bG9hZC5vcHRpb25hbF9pbnQzMiA9IDU2NzgKLSAgICBt
YXNrID0gZmllbGRfbWFza19wYjIuRmllbGRNYXNrKCkKLSAgICBtYXNrLkZyb21Kc29uU3RyaW5n
KCdjaGlsZC5wYXlsb2FkJykKLSAgICBtYXNrLk1lcmdlTWVzc2FnZShuZXN0ZWRfc3JjLCBuZXN0
ZWRfZHN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTIzNCwgbmVzdGVkX2RzdC5jaGlsZC5wYXls
b2FkLm9wdGlvbmFsX2ludDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbmVzdGVkX2RzdC5j
aGlsZC5jaGlsZC5wYXlsb2FkLm9wdGlvbmFsX2ludDMyKQotCi0gICAgbWFzay5Gcm9tSnNvblN0
cmluZygnY2hpbGQuY2hpbGQucGF5bG9hZCcpCi0gICAgbWFzay5NZXJnZU1lc3NhZ2UobmVzdGVk
X3NyYywgbmVzdGVkX2RzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEyMzQsIG5lc3RlZF9kc3Qu
Y2hpbGQucGF5bG9hZC5vcHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDU2Nzgs
IG5lc3RlZF9kc3QuY2hpbGQuY2hpbGQucGF5bG9hZC5vcHRpb25hbF9pbnQzMikKLQotICAgIG5l
c3RlZF9kc3QuQ2xlYXIoKQotICAgIG1hc2suRnJvbUpzb25TdHJpbmcoJ2NoaWxkLmNoaWxkLnBh
eWxvYWQnKQotICAgIG1hc2suTWVyZ2VNZXNzYWdlKG5lc3RlZF9zcmMsIG5lc3RlZF9kc3QpCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBuZXN0ZWRfZHN0LmNoaWxkLnBheWxvYWQub3B0aW9uYWxf
aW50MzIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCg1Njc4LCBuZXN0ZWRfZHN0LmNoaWxkLmNoaWxk
LnBheWxvYWQub3B0aW9uYWxfaW50MzIpCi0KLSAgICBuZXN0ZWRfZHN0LkNsZWFyKCkKLSAgICBt
YXNrLkZyb21Kc29uU3RyaW5nKCdjaGlsZCcpCi0gICAgbWFzay5NZXJnZU1lc3NhZ2UobmVzdGVk
X3NyYywgbmVzdGVkX2RzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEyMzQsIG5lc3RlZF9kc3Qu
Y2hpbGQucGF5bG9hZC5vcHRpb25hbF9pbnQzMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKDU2Nzgs
IG5lc3RlZF9kc3QuY2hpbGQuY2hpbGQucGF5bG9hZC5vcHRpb25hbF9pbnQzMikKLQotICAgICMg
VGVzdCBNZXJnZU9wdGlvbnMuCi0gICAgbmVzdGVkX2RzdC5DbGVhcigpCi0gICAgbmVzdGVkX2Rz
dC5jaGlsZC5wYXlsb2FkLm9wdGlvbmFsX2ludDY0ID0gNDMyMQotICAgICMgTWVzc2FnZSBmaWVs
ZHMgd2lsbCBiZSBtZXJnZWQgYnkgZGVmYXVsdC4KLSAgICBtYXNrLkZyb21Kc29uU3RyaW5nKCdj
aGlsZC5wYXlsb2FkJykKLSAgICBtYXNrLk1lcmdlTWVzc2FnZShuZXN0ZWRfc3JjLCBuZXN0ZWRf
ZHN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTIzNCwgbmVzdGVkX2RzdC5jaGlsZC5wYXlsb2Fk
Lm9wdGlvbmFsX2ludDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDMyMSwgbmVzdGVkX2RzdC5j
aGlsZC5wYXlsb2FkLm9wdGlvbmFsX2ludDY0KQotICAgICMgQ2hhbmdlIHRoZSBiZWhhdmlvciB0
byByZXBsYWNlIG1lc3NhZ2UgZmllbGRzLgotICAgIG1hc2suRnJvbUpzb25TdHJpbmcoJ2NoaWxk
LnBheWxvYWQnKQotICAgIG1hc2suTWVyZ2VNZXNzYWdlKG5lc3RlZF9zcmMsIG5lc3RlZF9kc3Qs
IFRydWUsIEZhbHNlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTIzNCwgbmVzdGVkX2RzdC5jaGls
ZC5wYXlsb2FkLm9wdGlvbmFsX2ludDMyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbmVzdGVk
X2RzdC5jaGlsZC5wYXlsb2FkLm9wdGlvbmFsX2ludDY0KQotCi0gICAgIyBCeSBkZWZhdWx0LCBm
aWVsZHMgbWlzc2luZyBpbiBzb3VyY2UgYXJlIG5vdCBjbGVhcmVkIGluIGRlc3RpbmF0aW9uLgot
ICAgIG5lc3RlZF9kc3QucGF5bG9hZC5vcHRpb25hbF9pbnQzMiA9IDEyMzQKLSAgICBzZWxmLmFz
c2VydFRydWUobmVzdGVkX2RzdC5IYXNGaWVsZCgncGF5bG9hZCcpKQotICAgIG1hc2suRnJvbUpz
b25TdHJpbmcoJ3BheWxvYWQnKQotICAgIG1hc2suTWVyZ2VNZXNzYWdlKG5lc3RlZF9zcmMsIG5l
c3RlZF9kc3QpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG5lc3RlZF9kc3QuSGFzRmllbGQoJ3BheWxv
YWQnKSkKLSAgICAjIEJ1dCB0aGV5IGFyZSBjbGVhcmVkIHdoZW4gcmVwbGFjaW5nIG1lc3NhZ2Ug
ZmllbGRzLgotICAgIG5lc3RlZF9kc3QuQ2xlYXIoKQotICAgIG5lc3RlZF9kc3QucGF5bG9hZC5v
cHRpb25hbF9pbnQzMiA9IDEyMzQKLSAgICBtYXNrLkZyb21Kc29uU3RyaW5nKCdwYXlsb2FkJykK
LSAgICBtYXNrLk1lcmdlTWVzc2FnZShuZXN0ZWRfc3JjLCBuZXN0ZWRfZHN0LCBUcnVlLCBGYWxz
ZSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKG5lc3RlZF9kc3QuSGFzRmllbGQoJ3BheWxvYWQnKSkK
LQotICAgIG5lc3RlZF9zcmMucGF5bG9hZC5yZXBlYXRlZF9pbnQzMi5hcHBlbmQoMTIzNCkKLSAg
ICBuZXN0ZWRfZHN0LnBheWxvYWQucmVwZWF0ZWRfaW50MzIuYXBwZW5kKDU2NzgpCi0gICAgIyBS
ZXBlYXRlZCBmaWVsZHMgd2lsbCBiZSBhcHBlbmRlZCBieSBkZWZhdWx0LgotICAgIG1hc2suRnJv
bUpzb25TdHJpbmcoJ3BheWxvYWQucmVwZWF0ZWRfaW50MzInKQotICAgIG1hc2suTWVyZ2VNZXNz
YWdlKG5lc3RlZF9zcmMsIG5lc3RlZF9kc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4o
bmVzdGVkX2RzdC5wYXlsb2FkLnJlcGVhdGVkX2ludDMyKSkKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDU2NzgsIG5lc3RlZF9kc3QucGF5bG9hZC5yZXBlYXRlZF9pbnQzMlswXSkKLSAgICBzZWxmLmFz
c2VydEVxdWFsKDEyMzQsIG5lc3RlZF9kc3QucGF5bG9hZC5yZXBlYXRlZF9pbnQzMlsxXSkKLSAg
ICAjIENoYW5nZSB0aGUgYmVoYXZpb3IgdG8gcmVwbGFjZSByZXBlYXRlZCBmaWVsZHMuCi0gICAg
bWFzay5Gcm9tSnNvblN0cmluZygncGF5bG9hZC5yZXBlYXRlZF9pbnQzMicpCi0gICAgbWFzay5N
ZXJnZU1lc3NhZ2UobmVzdGVkX3NyYywgbmVzdGVkX2RzdCwgRmFsc2UsIFRydWUpCi0gICAgc2Vs
Zi5hc3NlcnRFcXVhbCgxLCBsZW4obmVzdGVkX2RzdC5wYXlsb2FkLnJlcGVhdGVkX2ludDMyKSkK
LSAgICBzZWxmLmFzc2VydEVxdWFsKDEyMzQsIG5lc3RlZF9kc3QucGF5bG9hZC5yZXBlYXRlZF9p
bnQzMlswXSkKLQotCi1jbGFzcyBTdHJ1Y3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBk
ZWYgdGVzdFN0cnVjdChzZWxmKToKLSAgICBzdHJ1Y3QgPSBzdHJ1Y3RfcGIyLlN0cnVjdCgpCi0g
ICAgc3RydWN0X2NsYXNzID0gc3RydWN0Ll9fY2xhc3NfXwotCi0gICAgc3RydWN0WydrZXkxJ10g
PSA1Ci0gICAgc3RydWN0WydrZXkyJ10gPSAnYWJjJwotICAgIHN0cnVjdFsna2V5MyddID0gVHJ1
ZQotICAgIHN0cnVjdC5nZXRfb3JfY3JlYXRlX3N0cnVjdCgna2V5NCcpWydzdWJrZXknXSA9IDEx
LjAKLSAgICBzdHJ1Y3RfbGlzdCA9IHN0cnVjdC5nZXRfb3JfY3JlYXRlX2xpc3QoJ2tleTUnKQot
ICAgIHN0cnVjdF9saXN0LmV4dGVuZChbNiwgJ3NldmVuJywgVHJ1ZSwgRmFsc2UsIE5vbmVdKQot
ICAgIHN0cnVjdF9saXN0LmFkZF9zdHJ1Y3QoKVsnc3Via2V5MiddID0gOQotCi0gICAgc2VsZi5h
c3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3RydWN0LCB3ZWxsX2tub3duX3R5cGVzLlN0cnVjdCkpCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbHMoNSwgc3RydWN0WydrZXkxJ10pCi0gICAgc2VsZi5hc3NlcnRF
cXVhbHMoJ2FiYycsIHN0cnVjdFsna2V5MiddKQotICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgc3Ry
dWN0WydrZXkzJ10pCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMTEsIHN0cnVjdFsna2V5NCddWydz
dWJrZXknXSkKLSAgICBpbm5lcl9zdHJ1Y3QgPSBzdHJ1Y3RfY2xhc3MoKQotICAgIGlubmVyX3N0
cnVjdFsnc3Via2V5MiddID0gOQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFs2LCAnc2V2ZW4nLCBU
cnVlLCBGYWxzZSwgTm9uZSwgaW5uZXJfc3RydWN0XSwKLSAgICAgICAgICAgICAgICAgICAgICBs
aXN0KHN0cnVjdFsna2V5NSddLml0ZW1zKCkpKQotCi0gICAgc2VyaWFsaXplZCA9IHN0cnVjdC5T
ZXJpYWxpemVUb1N0cmluZygpCi0KLSAgICBzdHJ1Y3QyID0gc3RydWN0X3BiMi5TdHJ1Y3QoKQot
ICAgIHN0cnVjdDIuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQpCi0KLSAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzdHJ1Y3QsIHN0cnVjdDIpCi0KLSAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5j
ZShzdHJ1Y3QyLCB3ZWxsX2tub3duX3R5cGVzLlN0cnVjdCkpCi0gICAgc2VsZi5hc3NlcnRFcXVh
bHMoNSwgc3RydWN0Mlsna2V5MSddKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdhYmMnLCBzdHJ1
Y3QyWydrZXkyJ10pCi0gICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBzdHJ1Y3QyWydrZXkzJ10pCi0g
ICAgc2VsZi5hc3NlcnRFcXVhbHMoMTEsIHN0cnVjdDJbJ2tleTQnXVsnc3Via2V5J10pCi0gICAg
c2VsZi5hc3NlcnRFcXVhbHMoWzYsICdzZXZlbicsIFRydWUsIEZhbHNlLCBOb25lLCBpbm5lcl9z
dHJ1Y3RdLAotICAgICAgICAgICAgICAgICAgICAgIGxpc3Qoc3RydWN0Mlsna2V5NSddLml0ZW1z
KCkpKQotCi0gICAgc3RydWN0X2xpc3QgPSBzdHJ1Y3QyWydrZXk1J10KLSAgICBzZWxmLmFzc2Vy
dEVxdWFscyg2LCBzdHJ1Y3RfbGlzdFswXSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygnc2V2ZW4n
LCBzdHJ1Y3RfbGlzdFsxXSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBzdHJ1Y3RfbGlz
dFsyXSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgc3RydWN0X2xpc3RbM10pCi0gICAg
c2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc3RydWN0X2xpc3RbNF0pCi0gICAgc2VsZi5hc3NlcnRF
cXVhbHMoaW5uZXJfc3RydWN0LCBzdHJ1Y3RfbGlzdFs1XSkKLQotICAgIHN0cnVjdF9saXN0WzFd
ID0gNwotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDcsIHN0cnVjdF9saXN0WzFdKQotCi0gICAgc3Ry
dWN0X2xpc3QuYWRkX2xpc3QoKS5leHRlbmQoWzEsICd0d28nLCBUcnVlLCBGYWxzZSwgTm9uZV0p
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoWzEsICd0d28nLCBUcnVlLCBGYWxzZSwgTm9uZV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgbGlzdChzdHJ1Y3RfbGlzdFs2XS5pdGVtcygpKSkKLQotICAg
IHRleHRfc2VyaWFsaXplZCA9IHN0cihzdHJ1Y3QpCi0gICAgc3RydWN0MyA9IHN0cnVjdF9wYjIu
U3RydWN0KCkKLSAgICB0ZXh0X2Zvcm1hdC5NZXJnZSh0ZXh0X3NlcmlhbGl6ZWQsIHN0cnVjdDMp
Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RydWN0LCBzdHJ1Y3QzKQotCi0gICAgc3RydWN0Lmdl
dF9vcl9jcmVhdGVfc3RydWN0KCdrZXkzJylbJ3JlcGxhY2UnXSA9IDEyCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbHMoMTIsIHN0cnVjdFsna2V5MyddWydyZXBsYWNlJ10pCi0KLQotY2xhc3MgQW55VGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RBbnlNZXNzYWdlKHNlbGYpOgotICAg
ICMgQ3JlYXRlcyBhbmQgc2V0cyBtZXNzYWdlLgotICAgIG1zZyA9IGFueV90ZXN0X3BiMi5UZXN0
QW55KCkKLSAgICBtc2dfZGVzY3JpcHRvciA9IG1zZy5ERVNDUklQVE9SCi0gICAgYWxsX3R5cGVz
ID0gdW5pdHRlc3RfcGIyLlRlc3RBbGxUeXBlcygpCi0gICAgYWxsX2Rlc2NyaXB0b3IgPSBhbGxf
dHlwZXMuREVTQ1JJUFRPUgotICAgIGFsbF90eXBlcy5yZXBlYXRlZF9zdHJpbmcuYXBwZW5kKHUn
XHUwMGZjXHVhNzFmJykKLSAgICAjIFBhY2tzIHRvIEFueS4KLSAgICBtc2cudmFsdWUuUGFjayhh
bGxfdHlwZXMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtc2cudmFsdWUudHlwZV91cmwsCi0gICAg
ICAgICAgICAgICAgICAgICAndHlwZS5nb29nbGVhcGlzLmNvbS8lcycgJSBhbGxfZGVzY3JpcHRv
ci5mdWxsX25hbWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChtc2cudmFsdWUudmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICBhbGxfdHlwZXMuU2VyaWFsaXplVG9TdHJpbmcoKSkKLSAgICAjIFRl
c3RzIElzKCkgbWV0aG9kLgotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cudmFsdWUuSXMoYWxsX2Rl
c2NyaXB0b3IpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UobXNnLnZhbHVlLklzKG1zZ19kZXNjcmlw
dG9yKSkKLSAgICAjIFVucGFja3MgQW55LgotICAgIHVucGFja2VkX21lc3NhZ2UgPSB1bml0dGVz
dF9wYjIuVGVzdEFsbFR5cGVzKCkKLSAgICBzZWxmLmFzc2VydFRydWUobXNnLnZhbHVlLlVucGFj
ayh1bnBhY2tlZF9tZXNzYWdlKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGFsbF90eXBlcywgdW5w
YWNrZWRfbWVzc2FnZSkKLSAgICAjIFVucGFja3MgdG8gZGlmZmVyZW50IHR5cGUuCi0gICAgc2Vs
Zi5hc3NlcnRGYWxzZShtc2cudmFsdWUuVW5wYWNrKG1zZykpCi0gICAgIyBPbmx5IEFueSBtZXNz
YWdlcyBoYXZlIFBhY2sgbWV0aG9kLgotICAgIHRyeToKLSAgICAgIG1zZy5QYWNrKGFsbF90eXBl
cykKLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICBwYXNzCi0gICAgZWxzZToKLSAg
ICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCclcyBzaG91bGQgbm90IGhhdmUgUGFjayBtZXRob2Qu
JyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfZGVzY3JpcHRvci5mdWxsX25hbWUp
Ci0KLSAgZGVmIHRlc3RNZXNzYWdlTmFtZShzZWxmKToKLSAgICAjIENyZWF0ZXMgYW5kIHNldHMg
bWVzc2FnZS4KLSAgICBzdWJtZXNzYWdlID0gYW55X3Rlc3RfcGIyLlRlc3RBbnkoKQotICAgIHN1
Ym1lc3NhZ2UuaW50X3ZhbHVlID0gMTIzNDUKLSAgICBtc2cgPSBhbnlfcGIyLkFueSgpCi0gICAg
bXNnLlBhY2soc3VibWVzc2FnZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5UeXBlTmFtZSgp
LCAnZ29vZ2xlLnByb3RvYnVmLmludGVybmFsLlRlc3RBbnknKQotCi0gIGRlZiB0ZXN0UGFja1dp
dGhDdXN0b21UeXBlVXJsKHNlbGYpOgotICAgIHN1Ym1lc3NhZ2UgPSBhbnlfdGVzdF9wYjIuVGVz
dEFueSgpCi0gICAgc3VibWVzc2FnZS5pbnRfdmFsdWUgPSAxMjM0NQotICAgIG1zZyA9IGFueV9w
YjIuQW55KCkKLSAgICAjIFBhY2sgd2l0aCBhIGN1c3RvbSB0eXBlIFVSTCBwcmVmaXguCi0gICAg
bXNnLlBhY2soc3VibWVzc2FnZSwgJ3R5cGUubXlzZXJ2aWNlLmNvbScpCi0gICAgc2VsZi5hc3Nl
cnRFcXVhbChtc2cudHlwZV91cmwsCi0gICAgICAgICAgICAgICAgICAgICAndHlwZS5teXNlcnZp
Y2UuY29tLyVzJyAlIHN1Ym1lc3NhZ2UuREVTQ1JJUFRPUi5mdWxsX25hbWUpCi0gICAgIyBQYWNr
IHdpdGggYSBjdXN0b20gdHlwZSBVUkwgcHJlZml4IGVuZGluZyB3aXRoICcvJy4KLSAgICBtc2cu
UGFjayhzdWJtZXNzYWdlLCAndHlwZS5teXNlcnZpY2UuY29tLycpCi0gICAgc2VsZi5hc3NlcnRF
cXVhbChtc2cudHlwZV91cmwsCi0gICAgICAgICAgICAgICAgICAgICAndHlwZS5teXNlcnZpY2Uu
Y29tLyVzJyAlIHN1Ym1lc3NhZ2UuREVTQ1JJUFRPUi5mdWxsX25hbWUpCi0gICAgIyBQYWNrIHdp
dGggYW4gZW1wdHkgdHlwZSBVUkwgcHJlZml4LgotICAgIG1zZy5QYWNrKHN1Ym1lc3NhZ2UsICcn
KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLnR5cGVfdXJsLAotICAgICAgICAgICAgICAgICAg
ICAgJy8lcycgJSBzdWJtZXNzYWdlLkRFU0NSSVBUT1IuZnVsbF9uYW1lKQotICAgICMgVGVzdCB1
bnBhY2tpbmcgdGhlIHR5cGUuCi0gICAgdW5wYWNrZWRfbWVzc2FnZSA9IGFueV90ZXN0X3BiMi5U
ZXN0QW55KCkKLSAgICBzZWxmLmFzc2VydFRydWUobXNnLlVucGFjayh1bnBhY2tlZF9tZXNzYWdl
KSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHN1Ym1lc3NhZ2UsIHVucGFja2VkX21lc3NhZ2UpCi0K
LQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvd2lyZV9mb3JtYXQucHkgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhv
bi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvd2lyZV9mb3JtYXQucHkKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDg4M2Y1MjU1ODUxMzk0OTM0MzhjM2M4OTIyYmJiODJjZjFiMDA4NGUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29v
Z2xlL3Byb3RvYnVmL2ludGVybmFsL3dpcmVfZm9ybWF0LnB5CisrKyAvZGV2L251bGwKQEAgLTEs
MjY4ICswLDAgQEAKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9u
LgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQ29uc3RhbnRzIGFuZCBzdGF0aWMgZnVuY3Rpb25zIHRv
IHN1cHBvcnQgcHJvdG9jb2wgYnVmZmVyIHdpcmUgZm9ybWF0LiIiIgotCi1fX2F1dGhvcl9fID0g
J3JvYmluc29uQGdvb2dsZS5jb20gKFdpbGwgUm9iaW5zb24pJwotCi1pbXBvcnQgc3RydWN0Ci1m
cm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcgotZnJvbSBnb29nbGUucHJvdG9i
dWYgaW1wb3J0IG1lc3NhZ2UKLQotCi1UQUdfVFlQRV9CSVRTID0gMyAgIyBOdW1iZXIgb2YgYml0
cyB1c2VkIHRvIGhvbGQgdHlwZSBpbmZvIGluIGEgcHJvdG8gdGFnLgotVEFHX1RZUEVfTUFTSyA9
ICgxIDw8IFRBR19UWVBFX0JJVFMpIC0gMSAgIyAweDcKLQotIyBUaGVzZSBudW1iZXJzIGlkZW50
aWZ5IHRoZSB3aXJlIHR5cGUgb2YgYSBwcm90b2NvbCBidWZmZXIgdmFsdWUuCi0jIFdlIHVzZSB0
aGUgbGVhc3Qtc2lnbmlmaWNhbnQgVEFHX1RZUEVfQklUUyBiaXRzIG9mIHRoZSB2YXJpbnQtZW5j
b2RlZAotIyB0YWctYW5kLXR5cGUgdG8gc3RvcmUgb25lIG9mIHRoZXNlIFdJUkVUWVBFXyogY29u
c3RhbnRzLgotIyBUaGVzZSB2YWx1ZXMgbXVzdCBtYXRjaCBXaXJlVHlwZSBlbnVtIGluIGdvb2ds
ZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oLgotV0lSRVRZUEVfVkFSSU5UID0gMAotV0lSRVRZUEVf
RklYRUQ2NCA9IDEKLVdJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQgPSAyCi1XSVJFVFlQRV9TVEFS
VF9HUk9VUCA9IDMKLVdJUkVUWVBFX0VORF9HUk9VUCA9IDQKLVdJUkVUWVBFX0ZJWEVEMzIgPSA1
Ci1fV0lSRVRZUEVfTUFYID0gNQotCi0KLSMgQm91bmRzIGZvciB2YXJpb3VzIGludGVnZXIgdHlw
ZXMuCi1JTlQzMl9NQVggPSBpbnQoKDEgPDwgMzEpIC0gMSkKLUlOVDMyX01JTiA9IGludCgtKDEg
PDwgMzEpKQotVUlOVDMyX01BWCA9ICgxIDw8IDMyKSAtIDEKLQotSU5UNjRfTUFYID0gKDEgPDwg
NjMpIC0gMQotSU5UNjRfTUlOID0gLSgxIDw8IDYzKQotVUlOVDY0X01BWCA9ICgxIDw8IDY0KSAt
IDEKLQotIyAic3RydWN0IiBmb3JtYXQgc3RyaW5ncyB0aGF0IHdpbGwgZW5jb2RlL2RlY29kZSB0
aGUgc3BlY2lmaWVkIGZvcm1hdHMuCi1GT1JNQVRfVUlOVDMyX0xJVFRMRV9FTkRJQU4gPSAnPEkn
Ci1GT1JNQVRfVUlOVDY0X0xJVFRMRV9FTkRJQU4gPSAnPFEnCi1GT1JNQVRfRkxPQVRfTElUVExF
X0VORElBTiA9ICc8ZicKLUZPUk1BVF9ET1VCTEVfTElUVExFX0VORElBTiA9ICc8ZCcKLQotCi0j
IFdlJ2xsIGhhdmUgdG8gcHJvdmlkZSBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zIG9mIEFwcGVu
ZExpdHRsZUVuZGlhbiooKSBvbgotIyBhbnkgYXJjaGl0ZWN0dXJlcyB3aGVyZSB0aGVzZSBjaGVj
a3MgZmFpbC4KLWlmIHN0cnVjdC5jYWxjc2l6ZShGT1JNQVRfVUlOVDMyX0xJVFRMRV9FTkRJQU4p
ICE9IDQ6Ci0gIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGb3JtYXQgIkkiIGlzIG5vdCBhIDMyLWJp
dCBudW1iZXIuJykKLWlmIHN0cnVjdC5jYWxjc2l6ZShGT1JNQVRfVUlOVDY0X0xJVFRMRV9FTkRJ
QU4pICE9IDg6Ci0gIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGb3JtYXQgIlEiIGlzIG5vdCBhIDY0
LWJpdCBudW1iZXIuJykKLQotCi1kZWYgUGFja1RhZyhmaWVsZF9udW1iZXIsIHdpcmVfdHlwZSk6
Ci0gICIiIlJldHVybnMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgdGhhdCBlbmNvZGVzIHRo
ZSBmaWVsZCBudW1iZXIgYW5kCi0gIHdpcmUgdHlwZSBpbmZvcm1hdGlvbiBpbiBzdGFuZGFyZCBw
cm90b2NvbCBtZXNzYWdlIHdpcmUgZm9ybWF0LgotCi0gIEFyZ3M6Ci0gICAgZmllbGRfbnVtYmVy
OiBFeHBlY3RlZCB0byBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBbMSwgMSA8PCAyOSkKLSAg
ICB3aXJlX3R5cGU6IE9uZSBvZiB0aGUgV0lSRVRZUEVfKiBjb25zdGFudHMuCi0gICIiIgotICBp
ZiBub3QgMCA8PSB3aXJlX3R5cGUgPD0gX1dJUkVUWVBFX01BWDoKLSAgICByYWlzZSBtZXNzYWdl
LkVuY29kZUVycm9yKCdVbmtub3duIHdpcmUgdHlwZTogJWQnICUgd2lyZV90eXBlKQotICByZXR1
cm4gKGZpZWxkX251bWJlciA8PCBUQUdfVFlQRV9CSVRTKSB8IHdpcmVfdHlwZQotCi0KLWRlZiBV
bnBhY2tUYWcodGFnKToKLSAgIiIiVGhlIGludmVyc2Ugb2YgUGFja1RhZygpLiAgR2l2ZW4gYW4g
dW5zaWduZWQgMzItYml0IG51bWJlciwKLSAgcmV0dXJucyBhIChmaWVsZF9udW1iZXIsIHdpcmVf
dHlwZSkgdHVwbGUuCi0gICIiIgotICByZXR1cm4gKHRhZyA+PiBUQUdfVFlQRV9CSVRTKSwgKHRh
ZyAmIFRBR19UWVBFX01BU0spCi0KLQotZGVmIFppZ1phZ0VuY29kZSh2YWx1ZSk6Ci0gICIiIlpp
Z1phZyBUcmFuc2Zvcm06ICBFbmNvZGVzIHNpZ25lZCBpbnRlZ2VycyBzbyB0aGF0IHRoZXkgY2Fu
IGJlCi0gIGVmZmVjdGl2ZWx5IHVzZWQgd2l0aCB2YXJpbnQgZW5jb2RpbmcuICBTZWUgd2lyZV9m
b3JtYXQuaCBmb3IKLSAgbW9yZSBkZXRhaWxzLgotICAiIiIKLSAgaWYgdmFsdWUgPj0gMDoKLSAg
ICByZXR1cm4gdmFsdWUgPDwgMQotICByZXR1cm4gKHZhbHVlIDw8IDEpIF4gKH4wKQotCi0KLWRl
ZiBaaWdaYWdEZWNvZGUodmFsdWUpOgotICAiIiJJbnZlcnNlIG9mIFppZ1phZ0VuY29kZSgpLiIi
IgotICBpZiBub3QgdmFsdWUgJiAweDE6Ci0gICAgcmV0dXJuIHZhbHVlID4+IDEKLSAgcmV0dXJu
ICh2YWx1ZSA+PiAxKSBeICh+MCkKLQotCi0KLSMgVGhlICpCeXRlU2l6ZSgpIGZ1bmN0aW9ucyBi
ZWxvdyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0bwotIyBzZXJpYWxpemUg
ImZpZWxkIG51bWJlciArIHR5cGUiIGluZm9ybWF0aW9uIGFuZCB0aGVuIHNlcmlhbGl6ZSB0aGUg
dmFsdWUuCi0KLQotZGVmIEludDMyQnl0ZVNpemUoZmllbGRfbnVtYmVyLCBpbnQzMik6Ci0gIHJl
dHVybiBJbnQ2NEJ5dGVTaXplKGZpZWxkX251bWJlciwgaW50MzIpCi0KLQotZGVmIEludDMyQnl0
ZVNpemVOb1RhZyhpbnQzMik6Ci0gIHJldHVybiBfVmFyVUludDY0Qnl0ZVNpemVOb1RhZygweGZm
ZmZmZmZmZmZmZmZmZmYgJiBpbnQzMikKLQotCi1kZWYgSW50NjRCeXRlU2l6ZShmaWVsZF9udW1i
ZXIsIGludDY0KToKLSAgIyBIYXZlIHRvIGNvbnZlcnQgdG8gdWludCBiZWZvcmUgY2FsbGluZyBV
SW50NjRCeXRlU2l6ZSgpLgotICByZXR1cm4gVUludDY0Qnl0ZVNpemUoZmllbGRfbnVtYmVyLCAw
eGZmZmZmZmZmZmZmZmZmZmYgJiBpbnQ2NCkKLQotCi1kZWYgVUludDMyQnl0ZVNpemUoZmllbGRf
bnVtYmVyLCB1aW50MzIpOgotICByZXR1cm4gVUludDY0Qnl0ZVNpemUoZmllbGRfbnVtYmVyLCB1
aW50MzIpCi0KLQotZGVmIFVJbnQ2NEJ5dGVTaXplKGZpZWxkX251bWJlciwgdWludDY0KToKLSAg
cmV0dXJuIFRhZ0J5dGVTaXplKGZpZWxkX251bWJlcikgKyBfVmFyVUludDY0Qnl0ZVNpemVOb1Rh
Zyh1aW50NjQpCi0KLQotZGVmIFNJbnQzMkJ5dGVTaXplKGZpZWxkX251bWJlciwgaW50MzIpOgot
ICByZXR1cm4gVUludDMyQnl0ZVNpemUoZmllbGRfbnVtYmVyLCBaaWdaYWdFbmNvZGUoaW50MzIp
KQotCi0KLWRlZiBTSW50NjRCeXRlU2l6ZShmaWVsZF9udW1iZXIsIGludDY0KToKLSAgcmV0dXJu
IFVJbnQ2NEJ5dGVTaXplKGZpZWxkX251bWJlciwgWmlnWmFnRW5jb2RlKGludDY0KSkKLQotCi1k
ZWYgRml4ZWQzMkJ5dGVTaXplKGZpZWxkX251bWJlciwgZml4ZWQzMik6Ci0gIHJldHVybiBUYWdC
eXRlU2l6ZShmaWVsZF9udW1iZXIpICsgNAotCi0KLWRlZiBGaXhlZDY0Qnl0ZVNpemUoZmllbGRf
bnVtYmVyLCBmaXhlZDY0KToKLSAgcmV0dXJuIFRhZ0J5dGVTaXplKGZpZWxkX251bWJlcikgKyA4
Ci0KLQotZGVmIFNGaXhlZDMyQnl0ZVNpemUoZmllbGRfbnVtYmVyLCBzZml4ZWQzMik6Ci0gIHJl
dHVybiBUYWdCeXRlU2l6ZShmaWVsZF9udW1iZXIpICsgNAotCi0KLWRlZiBTRml4ZWQ2NEJ5dGVT
aXplKGZpZWxkX251bWJlciwgc2ZpeGVkNjQpOgotICByZXR1cm4gVGFnQnl0ZVNpemUoZmllbGRf
bnVtYmVyKSArIDgKLQotCi1kZWYgRmxvYXRCeXRlU2l6ZShmaWVsZF9udW1iZXIsIGZsdCk6Ci0g
IHJldHVybiBUYWdCeXRlU2l6ZShmaWVsZF9udW1iZXIpICsgNAotCi0KLWRlZiBEb3VibGVCeXRl
U2l6ZShmaWVsZF9udW1iZXIsIGRvdWJsZSk6Ci0gIHJldHVybiBUYWdCeXRlU2l6ZShmaWVsZF9u
dW1iZXIpICsgOAotCi0KLWRlZiBCb29sQnl0ZVNpemUoZmllbGRfbnVtYmVyLCBiKToKLSAgcmV0
dXJuIFRhZ0J5dGVTaXplKGZpZWxkX251bWJlcikgKyAxCi0KLQotZGVmIEVudW1CeXRlU2l6ZShm
aWVsZF9udW1iZXIsIGVudW0pOgotICByZXR1cm4gVUludDMyQnl0ZVNpemUoZmllbGRfbnVtYmVy
LCBlbnVtKQotCi0KLWRlZiBTdHJpbmdCeXRlU2l6ZShmaWVsZF9udW1iZXIsIHN0cmluZyk6Ci0g
IHJldHVybiBCeXRlc0J5dGVTaXplKGZpZWxkX251bWJlciwgc3RyaW5nLmVuY29kZSgndXRmLTgn
KSkKLQotCi1kZWYgQnl0ZXNCeXRlU2l6ZShmaWVsZF9udW1iZXIsIGIpOgotICByZXR1cm4gKFRh
Z0J5dGVTaXplKGZpZWxkX251bWJlcikKLSAgICAgICAgICArIF9WYXJVSW50NjRCeXRlU2l6ZU5v
VGFnKGxlbihiKSkKLSAgICAgICAgICArIGxlbihiKSkKLQotCi1kZWYgR3JvdXBCeXRlU2l6ZShm
aWVsZF9udW1iZXIsIG1lc3NhZ2UpOgotICByZXR1cm4gKDIgKiBUYWdCeXRlU2l6ZShmaWVsZF9u
dW1iZXIpICAjIFNUQVJUIGFuZCBFTkQgZ3JvdXAuCi0gICAgICAgICAgKyBtZXNzYWdlLkJ5dGVT
aXplKCkpCi0KLQotZGVmIE1lc3NhZ2VCeXRlU2l6ZShmaWVsZF9udW1iZXIsIG1lc3NhZ2UpOgot
ICByZXR1cm4gKFRhZ0J5dGVTaXplKGZpZWxkX251bWJlcikKLSAgICAgICAgICArIF9WYXJVSW50
NjRCeXRlU2l6ZU5vVGFnKG1lc3NhZ2UuQnl0ZVNpemUoKSkKLSAgICAgICAgICArIG1lc3NhZ2Uu
Qnl0ZVNpemUoKSkKLQotCi1kZWYgTWVzc2FnZVNldEl0ZW1CeXRlU2l6ZShmaWVsZF9udW1iZXIs
IG1zZyk6Ci0gICMgRmlyc3QgY29tcHV0ZSB0aGUgc2l6ZXMgb2YgdGhlIHRhZ3MuCi0gICMgVGhl
cmUgYXJlIDIgdGFncyBmb3IgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIG9mIHRoZSByZXBlYXRl
ZCBncm91cCwgdGhhdAotICAjIGlzIGZpZWxkIG51bWJlciAxLCBvbmUgd2l0aCBmaWVsZCBudW1i
ZXIgMiAodHlwZV9pZCkgYW5kIG9uZSB3aXRoIGZpZWxkCi0gICMgbnVtYmVyIDMgKG1lc3NhZ2Up
LgotICB0b3RhbF9zaXplID0gKDIgKiBUYWdCeXRlU2l6ZSgxKSArIFRhZ0J5dGVTaXplKDIpICsg
VGFnQnl0ZVNpemUoMykpCi0KLSAgIyBBZGQgdGhlIG51bWJlciBvZiBieXRlcyBmb3IgdHlwZV9p
ZC4KLSAgdG90YWxfc2l6ZSArPSBfVmFyVUludDY0Qnl0ZVNpemVOb1RhZyhmaWVsZF9udW1iZXIp
Ci0KLSAgbWVzc2FnZV9zaXplID0gbXNnLkJ5dGVTaXplKCkKLQotICAjIFRoZSBudW1iZXIgb2Yg
Ynl0ZXMgZm9yIGVuY29kaW5nIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UuCi0gIHRvdGFsX3Np
emUgKz0gX1ZhclVJbnQ2NEJ5dGVTaXplTm9UYWcobWVzc2FnZV9zaXplKQotCi0gICMgVGhlIHNp
emUgb2YgdGhlIG1lc3NhZ2UuCi0gIHRvdGFsX3NpemUgKz0gbWVzc2FnZV9zaXplCi0gIHJldHVy
biB0b3RhbF9zaXplCi0KLQotZGVmIFRhZ0J5dGVTaXplKGZpZWxkX251bWJlcik6Ci0gICIiIlJl
dHVybnMgdGhlIGJ5dGVzIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBhIHRhZyB3aXRoIHRoaXMgZmll
bGQgbnVtYmVyLiIiIgotICAjIEp1c3QgcGFzcyBpbiB0eXBlIDAsIHNpbmNlIHRoZSB0eXBlIHdv
bid0IGFmZmVjdCB0aGUgdGFnK3R5cGUgc2l6ZS4KLSAgcmV0dXJuIF9WYXJVSW50NjRCeXRlU2l6
ZU5vVGFnKFBhY2tUYWcoZmllbGRfbnVtYmVyLCAwKSkKLQotCi0jIFByaXZhdGUgaGVscGVyIGZ1
bmN0aW9uIGZvciB0aGUgKkJ5dGVTaXplKCkgZnVuY3Rpb25zIGFib3ZlLgotCi1kZWYgX1ZhclVJ
bnQ2NEJ5dGVTaXplTm9UYWcodWludDY0KToKLSAgIiIiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5
dGVzIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBhIHNpbmdsZSB2YXJpbnQKLSAgdXNpbmcgYm91bmRh
cnkgdmFsdWUgY29tcGFyaXNvbnMuICh1bnJvbGxlZCBsb29wIG9wdGltaXphdGlvbiAtV1BpZXJj
ZSkKLSAgdWludDY0IG11c3QgYmUgdW5zaWduZWQuCi0gICIiIgotICBpZiB1aW50NjQgPD0gMHg3
ZjogcmV0dXJuIDEKLSAgaWYgdWludDY0IDw9IDB4M2ZmZjogcmV0dXJuIDIKLSAgaWYgdWludDY0
IDw9IDB4MWZmZmZmOiByZXR1cm4gMwotICBpZiB1aW50NjQgPD0gMHhmZmZmZmZmOiByZXR1cm4g
NAotICBpZiB1aW50NjQgPD0gMHg3ZmZmZmZmZmY6IHJldHVybiA1Ci0gIGlmIHVpbnQ2NCA8PSAw
eDNmZmZmZmZmZmZmOiByZXR1cm4gNgotICBpZiB1aW50NjQgPD0gMHgxZmZmZmZmZmZmZmZmOiBy
ZXR1cm4gNwotICBpZiB1aW50NjQgPD0gMHhmZmZmZmZmZmZmZmZmZjogcmV0dXJuIDgKLSAgaWYg
dWludDY0IDw9IDB4N2ZmZmZmZmZmZmZmZmZmZjogcmV0dXJuIDkKLSAgaWYgdWludDY0ID4gVUlO
VDY0X01BWDoKLSAgICByYWlzZSBtZXNzYWdlLkVuY29kZUVycm9yKCdWYWx1ZSBvdXQgb2YgcmFu
Z2U6ICVkJyAlIHVpbnQ2NCkKLSAgcmV0dXJuIDEwCi0KLQotTk9OX1BBQ0tBQkxFX1RZUEVTID0g
KAotICBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX1NUUklORywKLSAgZGVzY3JpcHRv
ci5GaWVsZERlc2NyaXB0b3IuVFlQRV9HUk9VUCwKLSAgZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0
b3IuVFlQRV9NRVNTQUdFLAotICBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX0JZVEVT
Ci0pCi0KLQotZGVmIElzVHlwZVBhY2thYmxlKGZpZWxkX3R5cGUpOgotICAiIiJSZXR1cm4gdHJ1
ZSBpZmYgcGFja2FibGUgPSB0cnVlIGlzIHZhbGlkIGZvciBmaWVsZHMgb2YgdGhpcyB0eXBlLgot
Ci0gIEFyZ3M6Ci0gICAgZmllbGRfdHlwZTogYSBGaWVsZERlc2NyaXB0b3I6OlR5cGUgdmFsdWUu
Ci0KLSAgUmV0dXJuczoKLSAgICBUcnVlIGlmZiBmaWVsZHMgb2YgdGhpcyB0eXBlIGFyZSBwYWNr
YWJsZS4KLSAgIiIiCi0gIHJldHVybiBmaWVsZF90eXBlIG5vdCBpbiBOT05fUEFDS0FCTEVfVFlQ
RVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC93aXJlX2Zvcm1h
dF90ZXN0LnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3dpcmVfZm9ybWF0X3Rl
c3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRhMTIwZjMzNjExM2E3MDI4ZDdk
NmFkOWJkYzliNDBlOWYzMDc5NmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3dpcmVfZm9ybWF0X3Rl
c3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5
dGhvbgotIwotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0j
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0iIiJUZXN0IGZvciBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwud2ly
ZV9mb3JtYXQuIiIiCi0KLV9fYXV0aG9yX18gPSAncm9iaW5zb25AZ29vZ2xlLmNvbSAoV2lsbCBS
b2JpbnNvbiknCi0KLXRyeToKLSAgaW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdCAgI1BZMjYK
LWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZ29vZ2xlLnBy
b3RvYnVmIGltcG9ydCBtZXNzYWdlCi1mcm9tIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbCBpbXBv
cnQgd2lyZV9mb3JtYXQKLQotCi1jbGFzcyBXaXJlRm9ybWF0VGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6Ci0KLSAgZGVmIHRlc3RQYWNrVGFnKHNlbGYpOgotICAgIGZpZWxkX251bWJlciA9IDB4YWJj
Ci0gICAgdGFnX3R5cGUgPSAyCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgoZmllbGRfbnVtYmVyIDw8
IDMpIHwgdGFnX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICB3aXJlX2Zvcm1hdC5QYWNrVGFn
KGZpZWxkX251bWJlciwgdGFnX3R5cGUpKQotICAgIFBhY2tUYWcgPSB3aXJlX2Zvcm1hdC5QYWNr
VGFnCi0gICAgIyBOdW1iZXIgdG9vIGhpZ2guCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMobWVzc2Fn
ZS5FbmNvZGVFcnJvciwgUGFja1RhZywgZmllbGRfbnVtYmVyLCA2KQotICAgICMgTnVtYmVyIHRv
byBsb3cuCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMobWVzc2FnZS5FbmNvZGVFcnJvciwgUGFja1Rh
ZywgZmllbGRfbnVtYmVyLCAtMSkKLQotICBkZWYgdGVzdFVucGFja1RhZyhzZWxmKToKLSAgICAj
IFRlc3QgZmllbGQgbnVtYmVycyB0aGF0IHdpbGwgcmVxdWlyZSB2YXJpb3VzIHZhcmludCBzaXpl
cy4KLSAgICBmb3IgZXhwZWN0ZWRfZmllbGRfbnVtYmVyIGluICgxLCAxNSwgMTYsIDIwNDcsIDIw
NDgpOgotICAgICAgZm9yIGV4cGVjdGVkX3dpcmVfdHlwZSBpbiByYW5nZSg2KTogICMgSGlnaGVz
dC1udW1iZXJlZCB3aXJldHlwZSBpcyA1LgotICAgICAgICBmaWVsZF9udW1iZXIsIHdpcmVfdHlw
ZSA9IHdpcmVfZm9ybWF0LlVucGFja1RhZygKLSAgICAgICAgICAgIHdpcmVfZm9ybWF0LlBhY2tU
YWcoZXhwZWN0ZWRfZmllbGRfbnVtYmVyLCBleHBlY3RlZF93aXJlX3R5cGUpKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpZWxkX251bWJlciwgZmllbGRfbnVtYmVyKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3dpcmVfdHlwZSwgd2lyZV90eXBlKQotCi0g
ICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aXJlX2Zvcm1hdC5VbnBhY2tUYWcsIE5v
bmUpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aXJlX2Zvcm1hdC5VbnBhY2tU
YWcsICdhYmMnKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2lyZV9mb3JtYXQu
VW5wYWNrVGFnLCAwLjApCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aXJlX2Zv
cm1hdC5VbnBhY2tUYWcsIG9iamVjdCgpKQotCi0gIGRlZiB0ZXN0WmlnWmFnRW5jb2RlKHNlbGYp
OgotICAgIFogPSB3aXJlX2Zvcm1hdC5aaWdaYWdFbmNvZGUKLSAgICBzZWxmLmFzc2VydEVxdWFs
KDAsIFooMCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBaKC0xKSkKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDIsIFooMSkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBaKC0yKSkKLSAgICBzZWxm
LmFzc2VydEVxdWFsKDQsIFooMikpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgweGZmZmZmZmZlLCBa
KDB4N2ZmZmZmZmYpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmZmZmZmZmZiwgWigtMHg4MDAw
MDAwMCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgweGZmZmZmZmZmZmZmZmZmZmUsIFooMHg3ZmZm
ZmZmZmZmZmZmZmZmKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmZmZmZmZmZmZmZmZmZmZiwg
WigtMHg4MDAwMDAwMDAwMDAwMDAwKSkKLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJv
ciwgWiwgTm9uZSkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFosICdhYmNkJykK
LSAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFosIDAuMCkKLSAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhUeXBlRXJyb3IsIFosIG9iamVjdCgpKQotCi0gIGRlZiB0ZXN0WmlnWmFnRGVjb2Rl
KHNlbGYpOgotICAgIFogPSB3aXJlX2Zvcm1hdC5aaWdaYWdEZWNvZGUKLSAgICBzZWxmLmFzc2Vy
dEVxdWFsKDAsIFooMCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgWigxKSkKLSAgICBzZWxm
LmFzc2VydEVxdWFsKDEsIFooMikpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgtMiwgWigzKSkKLSAg
ICBzZWxmLmFzc2VydEVxdWFsKDIsIFooNCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgweDdmZmZm
ZmZmLCBaKDB4ZmZmZmZmZmUpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTB4ODAwMDAwMDAsIFoo
MHhmZmZmZmZmZikpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgweDdmZmZmZmZmZmZmZmZmZmYsIFoo
MHhmZmZmZmZmZmZmZmZmZmZlKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKC0weDgwMDAwMDAwMDAw
MDAwMDAsIFooMHhmZmZmZmZmZmZmZmZmZmZmKSkKLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5
cGVFcnJvciwgWiwgTm9uZSkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFosICdh
YmNkJykKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFosIDAuMCkKLSAgICBzZWxm
LmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFosIG9iamVjdCgpKQotCi0gIGRlZiBOdW1lcmljQnl0
ZVNpemVUZXN0SGVscGVyKHNlbGYsIGJ5dGVfc2l6ZV9mbiwgdmFsdWUsIGV4cGVjdGVkX3ZhbHVl
X3NpemUpOgotICAgICMgVXNlIGZpZWxkIG51bWJlcnMgdGhhdCBjYXVzZSB2YXJpb3VzIGJ5dGUg
c2l6ZXMgZm9yIHRoZSB0YWcgaW5mb3JtYXRpb24uCi0gICAgZm9yIGZpZWxkX251bWJlciwgdGFn
X2J5dGVzIGluICgoMTUsIDEpLCAoMTYsIDIpLCAoMjA0NywgMiksICgyMDQ4LCAzKSk6Ci0gICAg
ICBleHBlY3RlZF9zaXplID0gZXhwZWN0ZWRfdmFsdWVfc2l6ZSArIHRhZ19ieXRlcwotICAgICAg
YWN0dWFsX3NpemUgPSBieXRlX3NpemVfZm4oZmllbGRfbnVtYmVyLCB2YWx1ZSkKLSAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfc2l6ZSwgYWN0dWFsX3NpemUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICdieXRlX3NpemVfZm46ICVzLCBmaWVsZF9udW1iZXI6ICVkLCB2YWx1ZTogJXJc
bicKLSAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkOiAlZCwgQWN0dWFsOiAlZCclICgK
LSAgICAgICAgICBieXRlX3NpemVfZm4sIGZpZWxkX251bWJlciwgdmFsdWUsIGV4cGVjdGVkX3Np
emUsIGFjdHVhbF9zaXplKSkKLQotICBkZWYgdGVzdEJ5dGVTaXplRnVuY3Rpb25zKHNlbGYpOgot
ICAgICMgVGVzdCBhbGwgbnVtZXJpYyAqQnl0ZVNpemUoKSBmdW5jdGlvbnMuCi0gICAgTlVNRVJJ
Q19BUkdTID0gWwotICAgICAgICAjIEludDMyQnl0ZVNpemUoKS4KLSAgICAgICAgW3dpcmVfZm9y
bWF0LkludDMyQnl0ZVNpemUsIDAsIDFdLAotICAgICAgICBbd2lyZV9mb3JtYXQuSW50MzJCeXRl
U2l6ZSwgMTI3LCAxXSwKLSAgICAgICAgW3dpcmVfZm9ybWF0LkludDMyQnl0ZVNpemUsIDEyOCwg
Ml0sCi0gICAgICAgIFt3aXJlX2Zvcm1hdC5JbnQzMkJ5dGVTaXplLCAtMSwgMTBdLAotICAgICAg
ICAjIEludDY0Qnl0ZVNpemUoKS4KLSAgICAgICAgW3dpcmVfZm9ybWF0LkludDY0Qnl0ZVNpemUs
IDAsIDFdLAotICAgICAgICBbd2lyZV9mb3JtYXQuSW50NjRCeXRlU2l6ZSwgMTI3LCAxXSwKLSAg
ICAgICAgW3dpcmVfZm9ybWF0LkludDY0Qnl0ZVNpemUsIDEyOCwgMl0sCi0gICAgICAgIFt3aXJl
X2Zvcm1hdC5JbnQ2NEJ5dGVTaXplLCAtMSwgMTBdLAotICAgICAgICAjIFVJbnQzMkJ5dGVTaXpl
KCkuCi0gICAgICAgIFt3aXJlX2Zvcm1hdC5VSW50MzJCeXRlU2l6ZSwgMCwgMV0sCi0gICAgICAg
IFt3aXJlX2Zvcm1hdC5VSW50MzJCeXRlU2l6ZSwgMTI3LCAxXSwKLSAgICAgICAgW3dpcmVfZm9y
bWF0LlVJbnQzMkJ5dGVTaXplLCAxMjgsIDJdLAotICAgICAgICBbd2lyZV9mb3JtYXQuVUludDMy
Qnl0ZVNpemUsIHdpcmVfZm9ybWF0LlVJTlQzMl9NQVgsIDVdLAotICAgICAgICAjIFVJbnQ2NEJ5
dGVTaXplKCkuCi0gICAgICAgIFt3aXJlX2Zvcm1hdC5VSW50NjRCeXRlU2l6ZSwgMCwgMV0sCi0g
ICAgICAgIFt3aXJlX2Zvcm1hdC5VSW50NjRCeXRlU2l6ZSwgMTI3LCAxXSwKLSAgICAgICAgW3dp
cmVfZm9ybWF0LlVJbnQ2NEJ5dGVTaXplLCAxMjgsIDJdLAotICAgICAgICBbd2lyZV9mb3JtYXQu
VUludDY0Qnl0ZVNpemUsIHdpcmVfZm9ybWF0LlVJTlQ2NF9NQVgsIDEwXSwKLSAgICAgICAgIyBT
SW50MzJCeXRlU2l6ZSgpLgotICAgICAgICBbd2lyZV9mb3JtYXQuU0ludDMyQnl0ZVNpemUsIDAs
IDFdLAotICAgICAgICBbd2lyZV9mb3JtYXQuU0ludDMyQnl0ZVNpemUsIC0xLCAxXSwKLSAgICAg
ICAgW3dpcmVfZm9ybWF0LlNJbnQzMkJ5dGVTaXplLCAxLCAxXSwKLSAgICAgICAgW3dpcmVfZm9y
bWF0LlNJbnQzMkJ5dGVTaXplLCAtNjMsIDFdLAotICAgICAgICBbd2lyZV9mb3JtYXQuU0ludDMy
Qnl0ZVNpemUsIDYzLCAxXSwKLSAgICAgICAgW3dpcmVfZm9ybWF0LlNJbnQzMkJ5dGVTaXplLCAt
NjQsIDFdLAotICAgICAgICBbd2lyZV9mb3JtYXQuU0ludDMyQnl0ZVNpemUsIDY0LCAyXSwKLSAg
ICAgICAgIyBTSW50NjRCeXRlU2l6ZSgpLgotICAgICAgICBbd2lyZV9mb3JtYXQuU0ludDY0Qnl0
ZVNpemUsIDAsIDFdLAotICAgICAgICBbd2lyZV9mb3JtYXQuU0ludDY0Qnl0ZVNpemUsIC0xLCAx
XSwKLSAgICAgICAgW3dpcmVfZm9ybWF0LlNJbnQ2NEJ5dGVTaXplLCAxLCAxXSwKLSAgICAgICAg
W3dpcmVfZm9ybWF0LlNJbnQ2NEJ5dGVTaXplLCAtNjMsIDFdLAotICAgICAgICBbd2lyZV9mb3Jt
YXQuU0ludDY0Qnl0ZVNpemUsIDYzLCAxXSwKLSAgICAgICAgW3dpcmVfZm9ybWF0LlNJbnQ2NEJ5
dGVTaXplLCAtNjQsIDFdLAotICAgICAgICBbd2lyZV9mb3JtYXQuU0ludDY0Qnl0ZVNpemUsIDY0
LCAyXSwKLSAgICAgICAgIyBGaXhlZDMyQnl0ZVNpemUoKS4KLSAgICAgICAgW3dpcmVfZm9ybWF0
LkZpeGVkMzJCeXRlU2l6ZSwgMCwgNF0sCi0gICAgICAgIFt3aXJlX2Zvcm1hdC5GaXhlZDMyQnl0
ZVNpemUsIHdpcmVfZm9ybWF0LlVJTlQzMl9NQVgsIDRdLAotICAgICAgICAjIEZpeGVkNjRCeXRl
U2l6ZSgpLgotICAgICAgICBbd2lyZV9mb3JtYXQuRml4ZWQ2NEJ5dGVTaXplLCAwLCA4XSwKLSAg
ICAgICAgW3dpcmVfZm9ybWF0LkZpeGVkNjRCeXRlU2l6ZSwgd2lyZV9mb3JtYXQuVUlOVDY0X01B
WCwgOF0sCi0gICAgICAgICMgU0ZpeGVkMzJCeXRlU2l6ZSgpLgotICAgICAgICBbd2lyZV9mb3Jt
YXQuU0ZpeGVkMzJCeXRlU2l6ZSwgMCwgNF0sCi0gICAgICAgIFt3aXJlX2Zvcm1hdC5TRml4ZWQz
MkJ5dGVTaXplLCB3aXJlX2Zvcm1hdC5JTlQzMl9NSU4sIDRdLAotICAgICAgICBbd2lyZV9mb3Jt
YXQuU0ZpeGVkMzJCeXRlU2l6ZSwgd2lyZV9mb3JtYXQuSU5UMzJfTUFYLCA0XSwKLSAgICAgICAg
IyBTRml4ZWQ2NEJ5dGVTaXplKCkuCi0gICAgICAgIFt3aXJlX2Zvcm1hdC5TRml4ZWQ2NEJ5dGVT
aXplLCAwLCA4XSwKLSAgICAgICAgW3dpcmVfZm9ybWF0LlNGaXhlZDY0Qnl0ZVNpemUsIHdpcmVf
Zm9ybWF0LklOVDY0X01JTiwgOF0sCi0gICAgICAgIFt3aXJlX2Zvcm1hdC5TRml4ZWQ2NEJ5dGVT
aXplLCB3aXJlX2Zvcm1hdC5JTlQ2NF9NQVgsIDhdLAotICAgICAgICAjIEZsb2F0Qnl0ZVNpemUo
KS4KLSAgICAgICAgW3dpcmVfZm9ybWF0LkZsb2F0Qnl0ZVNpemUsIDAuMCwgNF0sCi0gICAgICAg
IFt3aXJlX2Zvcm1hdC5GbG9hdEJ5dGVTaXplLCAxMDAwMDAwMDAwLjAsIDRdLAotICAgICAgICBb
d2lyZV9mb3JtYXQuRmxvYXRCeXRlU2l6ZSwgLTEwMDAwMDAwMDAuMCwgNF0sCi0gICAgICAgICMg
RG91YmxlQnl0ZVNpemUoKS4KLSAgICAgICAgW3dpcmVfZm9ybWF0LkRvdWJsZUJ5dGVTaXplLCAw
LjAsIDhdLAotICAgICAgICBbd2lyZV9mb3JtYXQuRG91YmxlQnl0ZVNpemUsIDEwMDAwMDAwMDAu
MCwgOF0sCi0gICAgICAgIFt3aXJlX2Zvcm1hdC5Eb3VibGVCeXRlU2l6ZSwgLTEwMDAwMDAwMDAu
MCwgOF0sCi0gICAgICAgICMgQm9vbEJ5dGVTaXplKCkuCi0gICAgICAgIFt3aXJlX2Zvcm1hdC5C
b29sQnl0ZVNpemUsIEZhbHNlLCAxXSwKLSAgICAgICAgW3dpcmVfZm9ybWF0LkJvb2xCeXRlU2l6
ZSwgVHJ1ZSwgMV0sCi0gICAgICAgICMgRW51bUJ5dGVTaXplKCkuCi0gICAgICAgIFt3aXJlX2Zv
cm1hdC5FbnVtQnl0ZVNpemUsIDAsIDFdLAotICAgICAgICBbd2lyZV9mb3JtYXQuRW51bUJ5dGVT
aXplLCAxMjcsIDFdLAotICAgICAgICBbd2lyZV9mb3JtYXQuRW51bUJ5dGVTaXplLCAxMjgsIDJd
LAotICAgICAgICBbd2lyZV9mb3JtYXQuRW51bUJ5dGVTaXplLCB3aXJlX2Zvcm1hdC5VSU5UMzJf
TUFYLCA1XSwKLSAgICAgICAgXQotICAgIGZvciBhcmdzIGluIE5VTUVSSUNfQVJHUzoKLSAgICAg
IHNlbGYuTnVtZXJpY0J5dGVTaXplVGVzdEhlbHBlcigqYXJncykKLQotICAgICMgVGVzdCBzdHJp
bmdzIGFuZCBieXRlcy4KLSAgICBmb3IgYnl0ZV9zaXplX2ZuIGluICh3aXJlX2Zvcm1hdC5TdHJp
bmdCeXRlU2l6ZSwgd2lyZV9mb3JtYXQuQnl0ZXNCeXRlU2l6ZSk6Ci0gICAgICAjIDEgYnl0ZSBm
b3IgdGFnLCAxIGJ5dGUgZm9yIGxlbmd0aCwgMyBieXRlcyBmb3IgY29udGVudHMuCi0gICAgICBz
ZWxmLmFzc2VydEVxdWFsKDUsIGJ5dGVfc2l6ZV9mbigxMCwgJ2FiYycpKQotICAgICAgIyAyIGJ5
dGVzIGZvciB0YWcsIDEgYnl0ZSBmb3IgbGVuZ3RoLCAzIGJ5dGVzIGZvciBjb250ZW50cy4KLSAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoNiwgYnl0ZV9zaXplX2ZuKDE2LCAnYWJjJykpCi0gICAgICAj
IDIgYnl0ZXMgZm9yIHRhZywgMiBieXRlcyBmb3IgbGVuZ3RoLCAxMjggYnl0ZXMgZm9yIGNvbnRl
bnRzLgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMzIsIGJ5dGVfc2l6ZV9mbigxNiwgJ2EnICog
MTI4KSkKLQotICAgICMgVGVzdCBVVEYtOCBzdHJpbmcgYnl0ZSBzaXplIGNhbGN1bGF0aW9uLgot
ICAgICMgMSBieXRlIGZvciB0YWcsIDEgYnl0ZSBmb3IgbGVuZ3RoLCA4IGJ5dGVzIGZvciBjb250
ZW50LgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAsIHdpcmVfZm9ybWF0LlN0cmluZ0J5dGVTaXpl
KAotICAgICAgICA1LCBiJ1x4ZDBceGEyXHhkMFx4YjVceGQxXHg4MVx4ZDFceDgyJy5kZWNvZGUo
J3V0Zi04JykpKQotCi0gICAgY2xhc3MgTW9ja01lc3NhZ2Uob2JqZWN0KToKLSAgICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBieXRlX3NpemUpOgotICAgICAgICBzZWxmLmJ5dGVfc2l6ZSA9IGJ5dGVf
c2l6ZQotICAgICAgZGVmIEJ5dGVTaXplKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5ieXRl
X3NpemUKLQotICAgIG1lc3NhZ2VfYnl0ZV9zaXplID0gMTAKLSAgICBtb2NrX21lc3NhZ2UgPSBN
b2NrTWVzc2FnZShieXRlX3NpemU9bWVzc2FnZV9ieXRlX3NpemUpCi0gICAgIyBUZXN0IGdyb3Vw
cy4KLSAgICAjICgyICogMSkgYnl0ZXMgZm9yIGJlZ2luIGFuZCBlbmQgdGFncywgcGx1cyBtZXNz
YWdlX2J5dGVfc2l6ZS4KLSAgICBzZWxmLmFzc2VydEVxdWFsKDIgKyBtZXNzYWdlX2J5dGVfc2l6
ZSwKLSAgICAgICAgICAgICAgICAgICAgIHdpcmVfZm9ybWF0Lkdyb3VwQnl0ZVNpemUoMSwgbW9j
a19tZXNzYWdlKSkKLSAgICAjICgyICogMikgYnl0ZXMgZm9yIGJlZ2luIGFuZCBlbmQgdGFncywg
cGx1cyBtZXNzYWdlX2J5dGVfc2l6ZS4KLSAgICBzZWxmLmFzc2VydEVxdWFsKDQgKyBtZXNzYWdl
X2J5dGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIHdpcmVfZm9ybWF0Lkdyb3VwQnl0ZVNp
emUoMTYsIG1vY2tfbWVzc2FnZSkpCi0KLSAgICAjIFRlc3QgbWVzc2FnZXMuCi0gICAgIyAxIGJ5
dGUgZm9yIHRhZywgcGx1cyAxIGJ5dGUgZm9yIGxlbmd0aCwgcGx1cyBjb250ZW50cy4KLSAgICBz
ZWxmLmFzc2VydEVxdWFsKDIgKyBtb2NrX21lc3NhZ2UuYnl0ZV9zaXplLAotICAgICAgICAgICAg
ICAgICAgICAgd2lyZV9mb3JtYXQuTWVzc2FnZUJ5dGVTaXplKDEsIG1vY2tfbWVzc2FnZSkpCi0g
ICAgIyAyIGJ5dGVzIGZvciB0YWcsIHBsdXMgMSBieXRlIGZvciBsZW5ndGgsIHBsdXMgY29udGVu
dHMuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgzICsgbW9ja19tZXNzYWdlLmJ5dGVfc2l6ZSwKLSAg
ICAgICAgICAgICAgICAgICAgIHdpcmVfZm9ybWF0Lk1lc3NhZ2VCeXRlU2l6ZSgxNiwgbW9ja19t
ZXNzYWdlKSkKLSAgICAjIDIgYnl0ZXMgZm9yIHRhZywgcGx1cyAyIGJ5dGVzIGZvciBsZW5ndGgs
IHBsdXMgY29udGVudHMuCi0gICAgbW9ja19tZXNzYWdlLmJ5dGVfc2l6ZSA9IDEyOAotICAgIHNl
bGYuYXNzZXJ0RXF1YWwoNCArIG1vY2tfbWVzc2FnZS5ieXRlX3NpemUsCi0gICAgICAgICAgICAg
ICAgICAgICB3aXJlX2Zvcm1hdC5NZXNzYWdlQnl0ZVNpemUoMTYsIG1vY2tfbWVzc2FnZSkpCi0K
LQotICAgICMgVGVzdCBtZXNzYWdlIHNldCBpdGVtIGJ5dGUgc2l6ZS4KLSAgICAjIDQgYnl0ZXMg
Zm9yIHRhZ3MsIHBsdXMgMSBieXRlIGZvciBsZW5ndGgsIHBsdXMgMSBieXRlIGZvciB0eXBlX2lk
LAotICAgICMgcGx1cyBjb250ZW50cy4KLSAgICBtb2NrX21lc3NhZ2UuYnl0ZV9zaXplID0gMTAK
LSAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfbWVzc2FnZS5ieXRlX3NpemUgKyA2LAotICAgICAg
ICAgICAgICAgICAgICAgd2lyZV9mb3JtYXQuTWVzc2FnZVNldEl0ZW1CeXRlU2l6ZSgxLCBtb2Nr
X21lc3NhZ2UpKQotCi0gICAgIyA0IGJ5dGVzIGZvciB0YWdzLCBwbHVzIDIgYnl0ZXMgZm9yIGxl
bmd0aCwgcGx1cyAxIGJ5dGUgZm9yIHR5cGVfaWQsCi0gICAgIyBwbHVzIGNvbnRlbnRzLgotICAg
IG1vY2tfbWVzc2FnZS5ieXRlX3NpemUgPSAxMjgKLSAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tf
bWVzc2FnZS5ieXRlX3NpemUgKyA3LAotICAgICAgICAgICAgICAgICAgICAgd2lyZV9mb3JtYXQu
TWVzc2FnZVNldEl0ZW1CeXRlU2l6ZSgxLCBtb2NrX21lc3NhZ2UpKQotCi0gICAgIyA0IGJ5dGVz
IGZvciB0YWdzLCBwbHVzIDIgYnl0ZXMgZm9yIGxlbmd0aCwgcGx1cyAyIGJ5dGUgZm9yIHR5cGVf
aWQsCi0gICAgIyBwbHVzIGNvbnRlbnRzLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19tZXNz
YWdlLmJ5dGVfc2l6ZSArIDgsCi0gICAgICAgICAgICAgICAgICAgICB3aXJlX2Zvcm1hdC5NZXNz
YWdlU2V0SXRlbUJ5dGVTaXplKDEyOCwgbW9ja19tZXNzYWdlKSkKLQotICAgICMgVG9vLWxvbmcg
dmFyaW50LgotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1lc3NhZ2UuRW5jb2RlRXJyb3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgd2lyZV9mb3JtYXQuVUludDY0Qnl0ZVNpemUsIDEsIDEgPDwgMTI4
KQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL2pzb25fZm9ybWF0LnB5IGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29v
Z2xlL3Byb3RvYnVmL2pzb25fZm9ybWF0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3OTIxNTU2ZTY2OGQzNWYzYmUxZDljZDE0YzIxMDkzMjc3MWE2ZTBjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9q
c29uX2Zvcm1hdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDY0NSArMCwwIEBACi0jIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBDb3B5cmlnaHQg
MjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIi
IkNvbnRhaW5zIHJvdXRpbmVzIGZvciBwcmludGluZyBwcm90b2NvbCBtZXNzYWdlcyBpbiBKU09O
IGZvcm1hdC4KLQotU2ltcGxlIHVzYWdlIGV4YW1wbGU6Ci0KLSAgIyBDcmVhdGUgYSBwcm90byBv
YmplY3QgYW5kIHNlcmlhbGl6ZSBpdCB0byBhIGpzb24gZm9ybWF0IHN0cmluZy4KLSAgbWVzc2Fn
ZSA9IG15X3Byb3RvX3BiMi5NeU1lc3NhZ2UoZm9vPSdiYXInKQotICBqc29uX3N0cmluZyA9IGpz
b25fZm9ybWF0Lk1lc3NhZ2VUb0pzb24obWVzc2FnZSkKLQotICAjIFBhcnNlIGEganNvbiBmb3Jt
YXQgc3RyaW5nIHRvIHByb3RvIG9iamVjdC4KLSAgbWVzc2FnZSA9IGpzb25fZm9ybWF0LlBhcnNl
KGpzb25fc3RyaW5nLCBteV9wcm90b19wYjIuTXlNZXNzYWdlKCkpCi0iIiIKLQotX19hdXRob3Jf
XyA9ICdqaWVsdW9AZ29vZ2xlLmNvbSAoSmllIEx1byknCi0KLWltcG9ydCBiYXNlNjQKLWltcG9y
dCBqc29uCi1pbXBvcnQgbWF0aAotaW1wb3J0IHNpeAotaW1wb3J0IHN5cwotCi1mcm9tIGdvb2ds
ZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcgotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0
IHN5bWJvbF9kYXRhYmFzZQotCi1fVElNRVNUQU1QRk9NQVQgPSAnJVktJW0tJWRUJUg6JU06JVMn
Ci1fSU5UX1RZUEVTID0gZnJvemVuc2V0KFtkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBU
WVBFX0lOVDMyLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5GaWVsZERlc2Ny
aXB0b3IuQ1BQVFlQRV9VSU5UMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
LkZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX0lOVDY0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9VSU5UNjRdKQotX0lOVDY0X1RZUEVT
ID0gZnJvemVuc2V0KFtkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX0lOVDY0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBU
WVBFX1VJTlQ2NF0pCi1fRkxPQVRfVFlQRVMgPSBmcm96ZW5zZXQoW2Rlc2NyaXB0b3IuRmllbGRE
ZXNjcmlwdG9yLkNQUFRZUEVfRkxPQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Ny
aXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfRE9VQkxFXSkKLV9JTkZJTklUWSA9ICdJbmZp
bml0eScKLV9ORUdfSU5GSU5JVFkgPSAnLUluZmluaXR5JwotX05BTiA9ICdOYU4nCi0KLQotY2xh
c3MgRXJyb3IoRXhjZXB0aW9uKToKLSAgIiIiVG9wLWxldmVsIG1vZHVsZSBlcnJvciBmb3IganNv
bl9mb3JtYXQuIiIiCi0KLQotY2xhc3MgU2VyaWFsaXplVG9Kc29uRXJyb3IoRXJyb3IpOgotICAi
IiJUaHJvd24gaWYgc2VyaWFsaXphdGlvbiB0byBKU09OIGZhaWxzLiIiIgotCi0KLWNsYXNzIFBh
cnNlRXJyb3IoRXJyb3IpOgotICAiIiJUaHJvd24gaW4gY2FzZSBvZiBwYXJzaW5nIGVycm9yLiIi
IgotCi0KLWRlZiBNZXNzYWdlVG9Kc29uKG1lc3NhZ2UsIGluY2x1ZGluZ19kZWZhdWx0X3ZhbHVl
X2ZpZWxkcz1GYWxzZSk6Ci0gICIiIkNvbnZlcnRzIHByb3RvYnVmIG1lc3NhZ2UgdG8gSlNPTiBm
b3JtYXQuCi0KLSAgQXJnczoKLSAgICBtZXNzYWdlOiBUaGUgcHJvdG9jb2wgYnVmZmVycyBtZXNz
YWdlIGluc3RhbmNlIHRvIHNlcmlhbGl6ZS4KLSAgICBpbmNsdWRpbmdfZGVmYXVsdF92YWx1ZV9m
aWVsZHM6IElmIFRydWUsIHNpbmd1bGFyIHByaW1pdGl2ZSBmaWVsZHMsCi0gICAgICAgIHJlcGVh
dGVkIGZpZWxkcywgYW5kIG1hcCBmaWVsZHMgd2lsbCBhbHdheXMgYmUgc2VyaWFsaXplZC4gIElm
Ci0gICAgICAgIEZhbHNlLCBvbmx5IHNlcmlhbGl6ZSBub24tZW1wdHkgZmllbGRzLiAgU2luZ3Vs
YXIgbWVzc2FnZSBmaWVsZHMKLSAgICAgICAgYW5kIG9uZW9mIGZpZWxkcyBhcmUgbm90IGFmZmVj
dGVkIGJ5IHRoaXMgb3B0aW9uLgotCi0gIFJldHVybnM6Ci0gICAgQSBzdHJpbmcgY29udGFpbmlu
ZyB0aGUgSlNPTiBmb3JtYXR0ZWQgcHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2UuCi0gICIiIgotICBq
cyA9IF9NZXNzYWdlVG9Kc29uT2JqZWN0KG1lc3NhZ2UsIGluY2x1ZGluZ19kZWZhdWx0X3ZhbHVl
X2ZpZWxkcykKLSAgcmV0dXJuIGpzb24uZHVtcHMoanMsIGluZGVudD0yKQotCi0KLWRlZiBfTWVz
c2FnZVRvSnNvbk9iamVjdChtZXNzYWdlLCBpbmNsdWRpbmdfZGVmYXVsdF92YWx1ZV9maWVsZHMp
OgotICAiIiJDb252ZXJ0cyBtZXNzYWdlIHRvIGFuIG9iamVjdCBhY2NvcmRpbmcgdG8gUHJvdG8z
IEpTT04gU3BlY2lmaWNhdGlvbi4iIiIKLSAgbWVzc2FnZV9kZXNjcmlwdG9yID0gbWVzc2FnZS5E
RVNDUklQVE9SCi0gIGZ1bGxfbmFtZSA9IG1lc3NhZ2VfZGVzY3JpcHRvci5mdWxsX25hbWUKLSAg
aWYgX0lzV3JhcHBlck1lc3NhZ2UobWVzc2FnZV9kZXNjcmlwdG9yKToKLSAgICByZXR1cm4gX1dy
YXBwZXJNZXNzYWdlVG9Kc29uT2JqZWN0KG1lc3NhZ2UpCi0gIGlmIGZ1bGxfbmFtZSBpbiBfV0tU
SlNPTk1FVEhPRFM6Ci0gICAgcmV0dXJuIF9XS1RKU09OTUVUSE9EU1tmdWxsX25hbWVdWzBdKAot
ICAgICAgICBtZXNzYWdlLCBpbmNsdWRpbmdfZGVmYXVsdF92YWx1ZV9maWVsZHMpCi0gIGpzID0g
e30KLSAgcmV0dXJuIF9SZWd1bGFyTWVzc2FnZVRvSnNvbk9iamVjdCgKLSAgICAgIG1lc3NhZ2Us
IGpzLCBpbmNsdWRpbmdfZGVmYXVsdF92YWx1ZV9maWVsZHMpCi0KLQotZGVmIF9Jc01hcEVudHJ5
KGZpZWxkKToKLSAgcmV0dXJuIChmaWVsZC50eXBlID09IGRlc2NyaXB0b3IuRmllbGREZXNjcmlw
dG9yLlRZUEVfTUVTU0FHRSBhbmQKLSAgICAgICAgICBmaWVsZC5tZXNzYWdlX3R5cGUuaGFzX29w
dGlvbnMgYW5kCi0gICAgICAgICAgZmllbGQubWVzc2FnZV90eXBlLkdldE9wdGlvbnMoKS5tYXBf
ZW50cnkpCi0KLQotZGVmIF9SZWd1bGFyTWVzc2FnZVRvSnNvbk9iamVjdChtZXNzYWdlLCBqcywg
aW5jbHVkaW5nX2RlZmF1bHRfdmFsdWVfZmllbGRzKToKLSAgIiIiQ29udmVydHMgbm9ybWFsIG1l
c3NhZ2UgYWNjb3JkaW5nIHRvIFByb3RvMyBKU09OIFNwZWNpZmljYXRpb24uIiIiCi0gIGZpZWxk
cyA9IG1lc3NhZ2UuTGlzdEZpZWxkcygpCi0gIGluY2x1ZGVfZGVmYXVsdCA9IGluY2x1ZGluZ19k
ZWZhdWx0X3ZhbHVlX2ZpZWxkcwotCi0gIHRyeToKLSAgICBmb3IgZmllbGQsIHZhbHVlIGluIGZp
ZWxkczoKLSAgICAgIG5hbWUgPSBmaWVsZC5jYW1lbGNhc2VfbmFtZQotICAgICAgaWYgX0lzTWFw
RW50cnkoZmllbGQpOgotICAgICAgICAjIENvbnZlcnQgYSBtYXAgZmllbGQuCi0gICAgICAgIHZf
ZmllbGQgPSBmaWVsZC5tZXNzYWdlX3R5cGUuZmllbGRzX2J5X25hbWVbJ3ZhbHVlJ10KLSAgICAg
ICAganNfbWFwID0ge30KLSAgICAgICAgZm9yIGtleSBpbiB2YWx1ZToKLSAgICAgICAgICBpZiBp
c2luc3RhbmNlKGtleSwgYm9vbCk6Ci0gICAgICAgICAgICBpZiBrZXk6Ci0gICAgICAgICAgICAg
IHJlY29yZGVkX2tleSA9ICd0cnVlJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
cmVjb3JkZWRfa2V5ID0gJ2ZhbHNlJwotICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWNv
cmRlZF9rZXkgPSBrZXkKLSAgICAgICAgICBqc19tYXBbcmVjb3JkZWRfa2V5XSA9IF9GaWVsZFRv
SnNvbk9iamVjdCgKLSAgICAgICAgICAgICAgdl9maWVsZCwgdmFsdWVba2V5XSwgaW5jbHVkaW5n
X2RlZmF1bHRfdmFsdWVfZmllbGRzKQotICAgICAgICBqc1tuYW1lXSA9IGpzX21hcAotICAgICAg
ZWxpZiBmaWVsZC5sYWJlbCA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBF
QVRFRDoKLSAgICAgICAgIyBDb252ZXJ0IGEgcmVwZWF0ZWQgZmllbGQuCi0gICAgICAgIGpzW25h
bWVdID0gW19GaWVsZFRvSnNvbk9iamVjdChmaWVsZCwgaywgaW5jbHVkZV9kZWZhdWx0KQotICAg
ICAgICAgICAgICAgICAgICBmb3IgayBpbiB2YWx1ZV0KLSAgICAgIGVsc2U6Ci0gICAgICAgIGpz
W25hbWVdID0gX0ZpZWxkVG9Kc29uT2JqZWN0KGZpZWxkLCB2YWx1ZSwgaW5jbHVkZV9kZWZhdWx0
KQotCi0gICAgIyBTZXJpYWxpemUgZGVmYXVsdCB2YWx1ZSBpZiBpbmNsdWRpbmdfZGVmYXVsdF92
YWx1ZV9maWVsZHMgaXMgVHJ1ZS4KLSAgICBpZiBpbmNsdWRpbmdfZGVmYXVsdF92YWx1ZV9maWVs
ZHM6Ci0gICAgICBtZXNzYWdlX2Rlc2NyaXB0b3IgPSBtZXNzYWdlLkRFU0NSSVBUT1IKLSAgICAg
IGZvciBmaWVsZCBpbiBtZXNzYWdlX2Rlc2NyaXB0b3IuZmllbGRzOgotICAgICAgICAjIFNpbmd1
bGFyIG1lc3NhZ2UgZmllbGRzIGFuZCBvbmVvZiBmaWVsZHMgd2lsbCBub3QgYmUgYWZmZWN0ZWQu
Ci0gICAgICAgIGlmICgoZmllbGQubGFiZWwgIT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3Iu
TEFCRUxfUkVQRUFURUQgYW5kCi0gICAgICAgICAgICAgZmllbGQuY3BwX3R5cGUgPT0gZGVzY3Jp
cHRvci5GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9NRVNTQUdFKSBvcgotICAgICAgICAgICAgZmll
bGQuY29udGFpbmluZ19vbmVvZik6Ci0gICAgICAgICAgY29udGludWUKLSAgICAgICAgbmFtZSA9
IGZpZWxkLmNhbWVsY2FzZV9uYW1lCi0gICAgICAgIGlmIG5hbWUgaW4ganM6Ci0gICAgICAgICAg
IyBTa2lwIHRoZSBmaWVsZCB3aGljaCBoYXMgYmVlbiBzZXJhaWxpemVkIGFscmVhZHkuCi0gICAg
ICAgICAgY29udGludWUKLSAgICAgICAgaWYgX0lzTWFwRW50cnkoZmllbGQpOgotICAgICAgICAg
IGpzW25hbWVdID0ge30KLSAgICAgICAgZWxpZiBmaWVsZC5sYWJlbCA9PSBkZXNjcmlwdG9yLkZp
ZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBFQVRFRDoKLSAgICAgICAgICBqc1tuYW1lXSA9IFtdCi0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAganNbbmFtZV0gPSBfRmllbGRUb0pzb25PYmplY3QoZmll
bGQsIGZpZWxkLmRlZmF1bHRfdmFsdWUpCi0KLSAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKLSAg
ICByYWlzZSBTZXJpYWxpemVUb0pzb25FcnJvcigKLSAgICAgICAgJ0ZhaWxlZCB0byBzZXJpYWxp
emUgezB9IGZpZWxkOiB7MX0uJy5mb3JtYXQoZmllbGQubmFtZSwgZSkpCi0KLSAgcmV0dXJuIGpz
Ci0KLQotZGVmIF9GaWVsZFRvSnNvbk9iamVjdCgKLSAgICBmaWVsZCwgdmFsdWUsIGluY2x1ZGlu
Z19kZWZhdWx0X3ZhbHVlX2ZpZWxkcz1GYWxzZSk6Ci0gICIiIkNvbnZlcnRzIGZpZWxkIHZhbHVl
IGFjY29yZGluZyB0byBQcm90bzMgSlNPTiBTcGVjaWZpY2F0aW9uLiIiIgotICBpZiBmaWVsZC5j
cHBfdHlwZSA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0U6Ci0g
ICAgcmV0dXJuIF9NZXNzYWdlVG9Kc29uT2JqZWN0KHZhbHVlLCBpbmNsdWRpbmdfZGVmYXVsdF92
YWx1ZV9maWVsZHMpCi0gIGVsaWYgZmllbGQuY3BwX3R5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERl
c2NyaXB0b3IuQ1BQVFlQRV9FTlVNOgotICAgIGVudW1fdmFsdWUgPSBmaWVsZC5lbnVtX3R5cGUu
dmFsdWVzX2J5X251bWJlci5nZXQodmFsdWUsIE5vbmUpCi0gICAgaWYgZW51bV92YWx1ZSBpcyBu
b3QgTm9uZToKLSAgICAgIHJldHVybiBlbnVtX3ZhbHVlLm5hbWUKLSAgICBlbHNlOgotICAgICAg
cmFpc2UgU2VyaWFsaXplVG9Kc29uRXJyb3IoJ0VudW0gZmllbGQgY29udGFpbnMgYW4gaW50ZWdl
ciB2YWx1ZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hpY2ggY2FuIG5v
dCBtYXBwZWQgdG8gYW4gZW51bSB2YWx1ZS4nKQotICBlbGlmIGZpZWxkLmNwcF90eXBlID09IGRl
c2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfU1RSSU5HOgotICAgIGlmIGZpZWxkLnR5
cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9CWVRFUzoKLSAgICAgICMgVXNl
IGJhc2U2NCBEYXRhIGVuY29kaW5nIGZvciBieXRlcwotICAgICAgcmV0dXJuIGJhc2U2NC5iNjRl
bmNvZGUodmFsdWUpLmRlY29kZSgndXRmLTgnKQotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gdmFs
dWUKLSAgZWxpZiBmaWVsZC5jcHBfdHlwZSA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5D
UFBUWVBFX0JPT0w6Ci0gICAgcmV0dXJuIGJvb2wodmFsdWUpCi0gIGVsaWYgZmllbGQuY3BwX3R5
cGUgaW4gX0lOVDY0X1RZUEVTOgotICAgIHJldHVybiBzdHIodmFsdWUpCi0gIGVsaWYgZmllbGQu
Y3BwX3R5cGUgaW4gX0ZMT0FUX1RZUEVTOgotICAgIGlmIG1hdGguaXNpbmYodmFsdWUpOgotICAg
ICAgaWYgdmFsdWUgPCAwLjA6Ci0gICAgICAgIHJldHVybiBfTkVHX0lORklOSVRZCi0gICAgICBl
bHNlOgotICAgICAgICByZXR1cm4gX0lORklOSVRZCi0gICAgaWYgbWF0aC5pc25hbih2YWx1ZSk6
Ci0gICAgICByZXR1cm4gX05BTgotICByZXR1cm4gdmFsdWUKLQotCi1kZWYgX0FueU1lc3NhZ2VU
b0pzb25PYmplY3QobWVzc2FnZSwgaW5jbHVkaW5nX2RlZmF1bHQpOgotICAiIiJDb252ZXJ0cyBB
bnkgbWVzc2FnZSBhY2NvcmRpbmcgdG8gUHJvdG8zIEpTT04gU3BlY2lmaWNhdGlvbi4iIiIKLSAg
aWYgbm90IG1lc3NhZ2UuTGlzdEZpZWxkcygpOgotICAgIHJldHVybiB7fQotICBqcyA9IHt9Ci0g
IHR5cGVfdXJsID0gbWVzc2FnZS50eXBlX3VybAotICBqc1snQHR5cGUnXSA9IHR5cGVfdXJsCi0g
IHN1Yl9tZXNzYWdlID0gX0NyZWF0ZU1lc3NhZ2VGcm9tVHlwZVVybCh0eXBlX3VybCkKLSAgc3Vi
X21lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKG1lc3NhZ2UudmFsdWUpCi0gIG1lc3NhZ2VfZGVzY3Jp
cHRvciA9IHN1Yl9tZXNzYWdlLkRFU0NSSVBUT1IKLSAgZnVsbF9uYW1lID0gbWVzc2FnZV9kZXNj
cmlwdG9yLmZ1bGxfbmFtZQotICBpZiBfSXNXcmFwcGVyTWVzc2FnZShtZXNzYWdlX2Rlc2NyaXB0
b3IpOgotICAgIGpzWyd2YWx1ZSddID0gX1dyYXBwZXJNZXNzYWdlVG9Kc29uT2JqZWN0KHN1Yl9t
ZXNzYWdlKQotICAgIHJldHVybiBqcwotICBpZiBmdWxsX25hbWUgaW4gX1dLVEpTT05NRVRIT0RT
OgotICAgIGpzWyd2YWx1ZSddID0gX1dLVEpTT05NRVRIT0RTW2Z1bGxfbmFtZV1bMF0oc3ViX21l
c3NhZ2UsIGluY2x1ZGluZ19kZWZhdWx0KQotICAgIHJldHVybiBqcwotICByZXR1cm4gX1JlZ3Vs
YXJNZXNzYWdlVG9Kc29uT2JqZWN0KHN1Yl9tZXNzYWdlLCBqcywgaW5jbHVkaW5nX2RlZmF1bHQp
Ci0KLQotZGVmIF9DcmVhdGVNZXNzYWdlRnJvbVR5cGVVcmwodHlwZV91cmwpOgotICAjIFRPRE8o
amllbHVvKTogU2hvdWxkIGFkZCBhIHdheSB0aGF0IHVzZXJzIGNhbiByZWdpc3RlciB0aGUgdHlw
ZSByZXNvbHZlcgotICAjIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lLgotICBkYiA9IHN5bWJv
bF9kYXRhYmFzZS5EZWZhdWx0KCkKLSAgdHlwZV9uYW1lID0gdHlwZV91cmwuc3BsaXQoJy8nKVst
MV0KLSAgdHJ5OgotICAgIG1lc3NhZ2VfZGVzY3JpcHRvciA9IGRiLnBvb2wuRmluZE1lc3NhZ2VU
eXBlQnlOYW1lKHR5cGVfbmFtZSkKLSAgZXhjZXB0IEtleUVycm9yOgotICAgIHJhaXNlIFR5cGVF
cnJvcigKLSAgICAgICAgJ0NhbiBub3QgZmluZCBtZXNzYWdlIGRlc2NyaXB0b3IgYnkgdHlwZV91
cmw6IHswfS4nLmZvcm1hdCh0eXBlX3VybCkpCi0gIG1lc3NhZ2VfY2xhc3MgPSBkYi5HZXRQcm90
b3R5cGUobWVzc2FnZV9kZXNjcmlwdG9yKQotICByZXR1cm4gbWVzc2FnZV9jbGFzcygpCi0KLQot
ZGVmIF9HZW5lcmljTWVzc2FnZVRvSnNvbk9iamVjdChtZXNzYWdlLCB1bnVzZWRfaW5jbHVkaW5n
X2RlZmF1bHQpOgotICAiIiJDb252ZXJ0cyBtZXNzYWdlIGJ5IFRvSnNvblN0cmluZyBhY2NvcmRp
bmcgdG8gUHJvdG8zIEpTT04gU3BlY2lmaWNhdGlvbi4iIiIKLSAgIyBEdXJhdGlvbiwgVGltZXN0
YW1wIGFuZCBGaWVsZE1hc2sgaGF2ZSBUb0pzb25TdHJpbmcgbWV0aG9kIHRvIGRvIHRoZQotICAj
IGNvbnZlcnQuIFVzZXJzIGNhbiBhbHNvIGNhbGwgdGhlIG1ldGhvZCBkaXJlY3RseS4KLSAgcmV0
dXJuIG1lc3NhZ2UuVG9Kc29uU3RyaW5nKCkKLQotCi1kZWYgX1ZhbHVlTWVzc2FnZVRvSnNvbk9i
amVjdChtZXNzYWdlLCB1bnVzZWRfaW5jbHVkaW5nX2RlZmF1bHQ9RmFsc2UpOgotICAiIiJDb252
ZXJ0cyBWYWx1ZSBtZXNzYWdlIGFjY29yZGluZyB0byBQcm90bzMgSlNPTiBTcGVjaWZpY2F0aW9u
LiIiIgotICB3aGljaCA9IG1lc3NhZ2UuV2hpY2hPbmVvZigna2luZCcpCi0gICMgSWYgdGhlIFZh
bHVlIG1lc3NhZ2UgaXMgbm90IHNldCB0cmVhdCBhcyBudWxsX3ZhbHVlIHdoZW4gc2VyaWFsaXpl
Ci0gICMgdG8gSlNPTi4gVGhlIHBhcnNlIGJhY2sgcmVzdWx0IHdpbGwgYmUgZGlmZmVyZW50IGZy
b20gb3JpZ2luYWwgbWVzc2FnZS4KLSAgaWYgd2hpY2ggaXMgTm9uZSBvciB3aGljaCA9PSAnbnVs
bF92YWx1ZSc6Ci0gICAgcmV0dXJuIE5vbmUKLSAgaWYgd2hpY2ggPT0gJ2xpc3RfdmFsdWUnOgot
ICAgIHJldHVybiBfTGlzdFZhbHVlTWVzc2FnZVRvSnNvbk9iamVjdChtZXNzYWdlLmxpc3RfdmFs
dWUpCi0gIGlmIHdoaWNoID09ICdzdHJ1Y3RfdmFsdWUnOgotICAgIHZhbHVlID0gbWVzc2FnZS5z
dHJ1Y3RfdmFsdWUKLSAgZWxzZToKLSAgICB2YWx1ZSA9IGdldGF0dHIobWVzc2FnZSwgd2hpY2gp
Ci0gIG9uZW9mX2Rlc2NyaXB0b3IgPSBtZXNzYWdlLkRFU0NSSVBUT1IuZmllbGRzX2J5X25hbWVb
d2hpY2hdCi0gIHJldHVybiBfRmllbGRUb0pzb25PYmplY3Qob25lb2ZfZGVzY3JpcHRvciwgdmFs
dWUpCi0KLQotZGVmIF9MaXN0VmFsdWVNZXNzYWdlVG9Kc29uT2JqZWN0KG1lc3NhZ2UsIHVudXNl
ZF9pbmNsdWRpbmdfZGVmYXVsdD1GYWxzZSk6Ci0gICIiIkNvbnZlcnRzIExpc3RWYWx1ZSBtZXNz
YWdlIGFjY29yZGluZyB0byBQcm90bzMgSlNPTiBTcGVjaWZpY2F0aW9uLiIiIgotICByZXR1cm4g
W19WYWx1ZU1lc3NhZ2VUb0pzb25PYmplY3QodmFsdWUpCi0gICAgICAgICAgZm9yIHZhbHVlIGlu
IG1lc3NhZ2UudmFsdWVzXQotCi0KLWRlZiBfU3RydWN0TWVzc2FnZVRvSnNvbk9iamVjdChtZXNz
YWdlLCB1bnVzZWRfaW5jbHVkaW5nX2RlZmF1bHQ9RmFsc2UpOgotICAiIiJDb252ZXJ0cyBTdHJ1
Y3QgbWVzc2FnZSBhY2NvcmRpbmcgdG8gUHJvdG8zIEpTT04gU3BlY2lmaWNhdGlvbi4iIiIKLSAg
ZmllbGRzID0gbWVzc2FnZS5maWVsZHMKLSAgcmV0ID0ge30KLSAgZm9yIGtleSBpbiBmaWVsZHM6
Ci0gICAgcmV0W2tleV0gPSBfVmFsdWVNZXNzYWdlVG9Kc29uT2JqZWN0KGZpZWxkc1trZXldKQot
ICByZXR1cm4gcmV0Ci0KLQotZGVmIF9Jc1dyYXBwZXJNZXNzYWdlKG1lc3NhZ2VfZGVzY3JpcHRv
cik6Ci0gIHJldHVybiBtZXNzYWdlX2Rlc2NyaXB0b3IuZmlsZS5uYW1lID09ICdnb29nbGUvcHJv
dG9idWYvd3JhcHBlcnMucHJvdG8nCi0KLQotZGVmIF9XcmFwcGVyTWVzc2FnZVRvSnNvbk9iamVj
dChtZXNzYWdlKToKLSAgcmV0dXJuIF9GaWVsZFRvSnNvbk9iamVjdCgKLSAgICAgIG1lc3NhZ2Uu
REVTQ1JJUFRPUi5maWVsZHNfYnlfbmFtZVsndmFsdWUnXSwgbWVzc2FnZS52YWx1ZSkKLQotCi1k
ZWYgX0R1cGxpY2F0ZUNoZWNrZXIoanMpOgotICByZXN1bHQgPSB7fQotICBmb3IgbmFtZSwgdmFs
dWUgaW4ganM6Ci0gICAgaWYgbmFtZSBpbiByZXN1bHQ6Ci0gICAgICByYWlzZSBQYXJzZUVycm9y
KCdGYWlsZWQgdG8gbG9hZCBKU09OOiBkdXBsaWNhdGUga2V5IHswfS4nLmZvcm1hdChuYW1lKSkK
LSAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZQotICByZXR1cm4gcmVzdWx0Ci0KLQotZGVmIFBhcnNl
KHRleHQsIG1lc3NhZ2UpOgotICAiIiJQYXJzZXMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEg
cHJvdG9jb2wgbWVzc2FnZSBpbnRvIGEgbWVzc2FnZS4KLQotICBBcmdzOgotICAgIHRleHQ6IE1l
c3NhZ2UgSlNPTiByZXByZXNlbnRhdGlvbi4KLSAgICBtZXNzYWdlOiBBIHByb3RvY29sIGJlZmZl
ciBtZXNzYWdlIHRvIG1lcmdlIGludG8uCi0KLSAgUmV0dXJuczoKLSAgICBUaGUgc2FtZSBtZXNz
YWdlIHBhc3NlZCBhcyBhcmd1bWVudC4KLQotICBSYWlzZXM6OgotICAgIFBhcnNlRXJyb3I6IE9u
IEpTT04gcGFyc2luZyBwcm9ibGVtcy4KLSAgIiIiCi0gIGlmIG5vdCBpc2luc3RhbmNlKHRleHQs
IHNpeC50ZXh0X3R5cGUpOiB0ZXh0ID0gdGV4dC5kZWNvZGUoJ3V0Zi04JykKLSAgdHJ5OgotICAg
IGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNyk6Ci0gICAgICAjIG9iamVjdF9wYWlyX2hvb2sg
aXMgbm90IHN1cHBvcnRlZCBiZWZvcmUgcHl0aG9uMi43Ci0gICAgICBqcyA9IGpzb24ubG9hZHMo
dGV4dCkKLSAgICBlbHNlOgotICAgICAganMgPSBqc29uLmxvYWRzKHRleHQsIG9iamVjdF9wYWly
c19ob29rPV9EdXBsaWNhdGVDaGVja2VyKQotICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgotICAg
IHJhaXNlIFBhcnNlRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIEpTT046IHswfS4nLmZvcm1hdChzdHIo
ZSkpKQotICBfQ29udmVydE1lc3NhZ2UoanMsIG1lc3NhZ2UpCi0gIHJldHVybiBtZXNzYWdlCi0K
LQotZGVmIF9Db252ZXJ0RmllbGRWYWx1ZVBhaXIoanMsIG1lc3NhZ2UpOgotICAiIiJDb252ZXJ0
IGZpZWxkIHZhbHVlIHBhaXJzIGludG8gcmVndWxhciBtZXNzYWdlLgotCi0gIEFyZ3M6Ci0gICAg
anM6IEEgSlNPTiBvYmplY3QgdG8gY29udmVydCB0aGUgZmllbGQgdmFsdWUgcGFpcnMuCi0gICAg
bWVzc2FnZTogQSByZWd1bGFyIHByb3RvY29sIG1lc3NhZ2UgdG8gcmVjb3JkIHRoZSBkYXRhLgot
Ci0gIFJhaXNlczoKLSAgICBQYXJzZUVycm9yOiBJbiBjYXNlIG9mIHByb2JsZW1zIGNvbnZlcnRp
bmcuCi0gICIiIgotICBuYW1lcyA9IFtdCi0gIG1lc3NhZ2VfZGVzY3JpcHRvciA9IG1lc3NhZ2Uu
REVTQ1JJUFRPUgotICBmb3IgbmFtZSBpbiBqczoKLSAgICB0cnk6Ci0gICAgICBmaWVsZCA9IG1l
c3NhZ2VfZGVzY3JpcHRvci5maWVsZHNfYnlfY2FtZWxjYXNlX25hbWUuZ2V0KG5hbWUsIE5vbmUp
Ci0gICAgICBpZiBub3QgZmllbGQ6Ci0gICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoCi0gICAgICAg
ICAgICAnTWVzc2FnZSB0eXBlICJ7MH0iIGhhcyBubyBmaWVsZCBuYW1lZCAiezF9Ii4nLmZvcm1h
dCgKLSAgICAgICAgICAgICAgICBtZXNzYWdlX2Rlc2NyaXB0b3IuZnVsbF9uYW1lLCBuYW1lKSkK
LSAgICAgIGlmIG5hbWUgaW4gbmFtZXM6Ci0gICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoCi0gICAg
ICAgICAgICAnTWVzc2FnZSB0eXBlICJ7MH0iIHNob3VsZCBub3QgaGF2ZSBtdWx0aXBsZSAiezF9
IiBmaWVsZHMuJy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgbWVzc2FnZS5ERVNDUklQVE9SLmZ1
bGxfbmFtZSwgbmFtZSkpCi0gICAgICBuYW1lcy5hcHBlbmQobmFtZSkKLSAgICAgICMgQ2hlY2sg
bm8gb3RoZXIgb25lb2YgZmllbGQgaXMgcGFyc2VkLgotICAgICAgaWYgZmllbGQuY29udGFpbmlu
Z19vbmVvZiBpcyBub3QgTm9uZToKLSAgICAgICAgb25lb2ZfbmFtZSA9IGZpZWxkLmNvbnRhaW5p
bmdfb25lb2YubmFtZQotICAgICAgICBpZiBvbmVvZl9uYW1lIGluIG5hbWVzOgotICAgICAgICAg
IHJhaXNlIFBhcnNlRXJyb3IoJ01lc3NhZ2UgdHlwZSAiezB9IiBzaG91bGQgbm90IGhhdmUgbXVs
dGlwbGUgInsxfSIgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uZW9mIGZpZWxkcy4n
LmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLkRFU0NSSVBU
T1IuZnVsbF9uYW1lLCBvbmVvZl9uYW1lKSkKLSAgICAgICAgbmFtZXMuYXBwZW5kKG9uZW9mX25h
bWUpCi0KLSAgICAgIHZhbHVlID0ganNbbmFtZV0KLSAgICAgIGlmIHZhbHVlIGlzIE5vbmU6Ci0g
ICAgICAgIG1lc3NhZ2UuQ2xlYXJGaWVsZChmaWVsZC5uYW1lKQotICAgICAgICBjb250aW51ZQot
Ci0gICAgICAjIFBhcnNlIGZpZWxkIHZhbHVlLgotICAgICAgaWYgX0lzTWFwRW50cnkoZmllbGQp
OgotICAgICAgICBtZXNzYWdlLkNsZWFyRmllbGQoZmllbGQubmFtZSkKLSAgICAgICAgX0NvbnZl
cnRNYXBGaWVsZFZhbHVlKHZhbHVlLCBtZXNzYWdlLCBmaWVsZCkKLSAgICAgIGVsaWYgZmllbGQu
bGFiZWwgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQ6Ci0gICAg
ICAgIG1lc3NhZ2UuQ2xlYXJGaWVsZChmaWVsZC5uYW1lKQotICAgICAgICBpZiBub3QgaXNpbnN0
YW5jZSh2YWx1ZSwgbGlzdCk6Ci0gICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigncmVwZWF0ZWQg
ZmllbGQgezB9IG11c3QgYmUgaW4gW10gd2hpY2ggaXMgJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3sxfS4nLmZvcm1hdChuYW1lLCB2YWx1ZSkpCi0gICAgICAgIGlmIGZpZWxkLmNwcF90
eXBlID09IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfTUVTU0FHRToKLSAgICAg
ICAgICAjIFJlcGVhdGVkIG1lc3NhZ2UgZmllbGQuCi0gICAgICAgICAgZm9yIGl0ZW0gaW4gdmFs
dWU6Ci0gICAgICAgICAgICBzdWJfbWVzc2FnZSA9IGdldGF0dHIobWVzc2FnZSwgZmllbGQubmFt
ZSkuYWRkKCkKLSAgICAgICAgICAgICMgTm9uZSBpcyBhIG51bGxfdmFsdWUgaW4gVmFsdWUuCi0g
ICAgICAgICAgICBpZiAoaXRlbSBpcyBOb25lIGFuZAotICAgICAgICAgICAgICAgIHN1Yl9tZXNz
YWdlLkRFU0NSSVBUT1IuZnVsbF9uYW1lICE9ICdnb29nbGUucHJvdG9idWYuVmFsdWUnKToKLSAg
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcignbnVsbCBpcyBub3QgYWxsb3dlZCB0byBiZSB1
c2VkIGFzIGFuIGVsZW1lbnQnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpbiBh
IHJlcGVhdGVkIGZpZWxkLicpCi0gICAgICAgICAgICBfQ29udmVydE1lc3NhZ2UoaXRlbSwgc3Vi
X21lc3NhZ2UpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgIyBSZXBlYXRlZCBzY2FsYXIgZmll
bGQuCi0gICAgICAgICAgZm9yIGl0ZW0gaW4gdmFsdWU6Ci0gICAgICAgICAgICBpZiBpdGVtIGlz
IE5vbmU6Ci0gICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoJ251bGwgaXMgbm90IGFsbG93
ZWQgdG8gYmUgdXNlZCBhcyBhbiBlbGVtZW50JwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcgaW4gYSByZXBlYXRlZCBmaWVsZC4nKQotICAgICAgICAgICAgZ2V0YXR0cihtZXNzYWdl
LCBmaWVsZC5uYW1lKS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgX0NvbnZlcnRTY2FsYXJGaWVs
ZFZhbHVlKGl0ZW0sIGZpZWxkKSkKLSAgICAgIGVsaWYgZmllbGQuY3BwX3R5cGUgPT0gZGVzY3Jp
cHRvci5GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9NRVNTQUdFOgotICAgICAgICBzdWJfbWVzc2Fn
ZSA9IGdldGF0dHIobWVzc2FnZSwgZmllbGQubmFtZSkKLSAgICAgICAgX0NvbnZlcnRNZXNzYWdl
KHZhbHVlLCBzdWJfbWVzc2FnZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHNldGF0dHIobWVzc2Fn
ZSwgZmllbGQubmFtZSwgX0NvbnZlcnRTY2FsYXJGaWVsZFZhbHVlKHZhbHVlLCBmaWVsZCkpCi0g
ICAgZXhjZXB0IFBhcnNlRXJyb3IgYXMgZToKLSAgICAgIGlmIGZpZWxkIGFuZCBmaWVsZC5jb250
YWluaW5nX29uZW9mIGlzIE5vbmU6Ci0gICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoJ0ZhaWxlZCB0
byBwYXJzZSB7MH0gZmllbGQ6IHsxfScuZm9ybWF0KG5hbWUsIGUpKQotICAgICAgZWxzZToKLSAg
ICAgICAgcmFpc2UgUGFyc2VFcnJvcihzdHIoZSkpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMg
ZToKLSAgICAgIHJhaXNlIFBhcnNlRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB7MH0gZmllbGQ6IHsx
fS4nLmZvcm1hdChuYW1lLCBlKSkKLSAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6Ci0gICAgICBy
YWlzZSBQYXJzZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgezB9IGZpZWxkOiB7MX0uJy5mb3JtYXQo
bmFtZSwgZSkpCi0KLQotZGVmIF9Db252ZXJ0TWVzc2FnZSh2YWx1ZSwgbWVzc2FnZSk6Ci0gICIi
IkNvbnZlcnQgYSBKU09OIG9iamVjdCBpbnRvIGEgbWVzc2FnZS4KLQotICBBcmdzOgotICAgIHZh
bHVlOiBBIEpTT04gb2JqZWN0LgotICAgIG1lc3NhZ2U6IEEgV0tUIG9yIHJlZ3VsYXIgcHJvdG9j
b2wgbWVzc2FnZSB0byByZWNvcmQgdGhlIGRhdGEuCi0KLSAgUmFpc2VzOgotICAgIFBhcnNlRXJy
b3I6IEluIGNhc2Ugb2YgY29udmVydCBwcm9ibGVtcy4KLSAgIiIiCi0gIG1lc3NhZ2VfZGVzY3Jp
cHRvciA9IG1lc3NhZ2UuREVTQ1JJUFRPUgotICBmdWxsX25hbWUgPSBtZXNzYWdlX2Rlc2NyaXB0
b3IuZnVsbF9uYW1lCi0gIGlmIF9Jc1dyYXBwZXJNZXNzYWdlKG1lc3NhZ2VfZGVzY3JpcHRvcik6
Ci0gICAgX0NvbnZlcnRXcmFwcGVyTWVzc2FnZSh2YWx1ZSwgbWVzc2FnZSkKLSAgZWxpZiBmdWxs
X25hbWUgaW4gX1dLVEpTT05NRVRIT0RTOgotICAgIF9XS1RKU09OTUVUSE9EU1tmdWxsX25hbWVd
WzFdKHZhbHVlLCBtZXNzYWdlKQotICBlbHNlOgotICAgIF9Db252ZXJ0RmllbGRWYWx1ZVBhaXIo
dmFsdWUsIG1lc3NhZ2UpCi0KLQotZGVmIF9Db252ZXJ0QW55TWVzc2FnZSh2YWx1ZSwgbWVzc2Fn
ZSk6Ci0gICIiIkNvbnZlcnQgYSBKU09OIHJlcHJlc2VudGF0aW9uIGludG8gQW55IG1lc3NhZ2Uu
IiIiCi0gIGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpIGFuZCBub3QgdmFsdWU6Ci0gICAgcmV0
dXJuCi0gIHRyeToKLSAgICB0eXBlX3VybCA9IHZhbHVlWydAdHlwZSddCi0gIGV4Y2VwdCBLZXlF
cnJvcjoKLSAgICByYWlzZSBQYXJzZUVycm9yKCdAdHlwZSBpcyBtaXNzaW5nIHdoZW4gcGFyc2lu
ZyBhbnkgbWVzc2FnZS4nKQotCi0gIHN1Yl9tZXNzYWdlID0gX0NyZWF0ZU1lc3NhZ2VGcm9tVHlw
ZVVybCh0eXBlX3VybCkKLSAgbWVzc2FnZV9kZXNjcmlwdG9yID0gc3ViX21lc3NhZ2UuREVTQ1JJ
UFRPUgotICBmdWxsX25hbWUgPSBtZXNzYWdlX2Rlc2NyaXB0b3IuZnVsbF9uYW1lCi0gIGlmIF9J
c1dyYXBwZXJNZXNzYWdlKG1lc3NhZ2VfZGVzY3JpcHRvcik6Ci0gICAgX0NvbnZlcnRXcmFwcGVy
TWVzc2FnZSh2YWx1ZVsndmFsdWUnXSwgc3ViX21lc3NhZ2UpCi0gIGVsaWYgZnVsbF9uYW1lIGlu
IF9XS1RKU09OTUVUSE9EUzoKLSAgICBfV0tUSlNPTk1FVEhPRFNbZnVsbF9uYW1lXVsxXSh2YWx1
ZVsndmFsdWUnXSwgc3ViX21lc3NhZ2UpCi0gIGVsc2U6Ci0gICAgZGVsIHZhbHVlWydAdHlwZSdd
Ci0gICAgX0NvbnZlcnRGaWVsZFZhbHVlUGFpcih2YWx1ZSwgc3ViX21lc3NhZ2UpCi0gICMgU2V0
cyBBbnkgbWVzc2FnZQotICBtZXNzYWdlLnZhbHVlID0gc3ViX21lc3NhZ2UuU2VyaWFsaXplVG9T
dHJpbmcoKQotICBtZXNzYWdlLnR5cGVfdXJsID0gdHlwZV91cmwKLQotCi1kZWYgX0NvbnZlcnRH
ZW5lcmljTWVzc2FnZSh2YWx1ZSwgbWVzc2FnZSk6Ci0gICIiIkNvbnZlcnQgYSBKU09OIHJlcHJl
c2VudGF0aW9uIGludG8gbWVzc2FnZSB3aXRoIEZyb21Kc29uU3RyaW5nLiIiIgotICAjIER1cmFu
dGlvbiwgVGltZXN0YW1wLCBGaWVsZE1hc2sgaGF2ZSBGcm9tSnNvblN0cmluZyBtZXRob2QgdG8g
ZG8gdGhlCi0gICMgY29udmVydC4gVXNlcnMgY2FuIGFsc28gY2FsbCB0aGUgbWV0aG9kIGRpcmVj
dGx5LgotICBtZXNzYWdlLkZyb21Kc29uU3RyaW5nKHZhbHVlKQotCi0KLV9JTlRfT1JfRkxPQVQg
PSBzaXguaW50ZWdlcl90eXBlcyArIChmbG9hdCwpCi0KLQotZGVmIF9Db252ZXJ0VmFsdWVNZXNz
YWdlKHZhbHVlLCBtZXNzYWdlKToKLSAgIiIiQ29udmVydCBhIEpTT04gcmVwcmVzZW50YXRpb24g
aW50byBWYWx1ZSBtZXNzYWdlLiIiIgotICBpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKLSAg
ICBfQ29udmVydFN0cnVjdE1lc3NhZ2UodmFsdWUsIG1lc3NhZ2Uuc3RydWN0X3ZhbHVlKQotICBl
bGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgotICAgIF9Db252ZXJ0TGlzdFZhbHVlTWVzc2Fn
ZSh2YWx1ZSwgbWVzc2FnZS5saXN0X3ZhbHVlKQotICBlbGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAg
bWVzc2FnZS5udWxsX3ZhbHVlID0gMAotICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgot
ICAgIG1lc3NhZ2UuYm9vbF92YWx1ZSA9IHZhbHVlCi0gIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwg
c2l4LnN0cmluZ190eXBlcyk6Ci0gICAgbWVzc2FnZS5zdHJpbmdfdmFsdWUgPSB2YWx1ZQotICBl
bGlmIGlzaW5zdGFuY2UodmFsdWUsIF9JTlRfT1JfRkxPQVQpOgotICAgIG1lc3NhZ2UubnVtYmVy
X3ZhbHVlID0gdmFsdWUKLSAgZWxzZToKLSAgICByYWlzZSBQYXJzZUVycm9yKCdVbmV4cGVjdGVk
IHR5cGUgZm9yIFZhbHVlIG1lc3NhZ2UuJykKLQotCi1kZWYgX0NvbnZlcnRMaXN0VmFsdWVNZXNz
YWdlKHZhbHVlLCBtZXNzYWdlKToKLSAgIiIiQ29udmVydCBhIEpTT04gcmVwcmVzZW50YXRpb24g
aW50byBMaXN0VmFsdWUgbWVzc2FnZS4iIiIKLSAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGxp
c3QpOgotICAgIHJhaXNlIFBhcnNlRXJyb3IoCi0gICAgICAgICdMaXN0VmFsdWUgbXVzdCBiZSBp
biBbXSB3aGljaCBpcyB7MH0uJy5mb3JtYXQodmFsdWUpKQotICBtZXNzYWdlLkNsZWFyRmllbGQo
J3ZhbHVlcycpCi0gIGZvciBpdGVtIGluIHZhbHVlOgotICAgIF9Db252ZXJ0VmFsdWVNZXNzYWdl
KGl0ZW0sIG1lc3NhZ2UudmFsdWVzLmFkZCgpKQotCi0KLWRlZiBfQ29udmVydFN0cnVjdE1lc3Nh
Z2UodmFsdWUsIG1lc3NhZ2UpOgotICAiIiJDb252ZXJ0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBp
bnRvIFN0cnVjdCBtZXNzYWdlLiIiIgotICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6
Ci0gICAgcmFpc2UgUGFyc2VFcnJvcigKLSAgICAgICAgJ1N0cnVjdCBtdXN0IGJlIGluIGEgZGlj
dCB3aGljaCBpcyB7MH0uJy5mb3JtYXQodmFsdWUpKQotICBmb3Iga2V5IGluIHZhbHVlOgotICAg
IF9Db252ZXJ0VmFsdWVNZXNzYWdlKHZhbHVlW2tleV0sIG1lc3NhZ2UuZmllbGRzW2tleV0pCi0g
IHJldHVybgotCi0KLWRlZiBfQ29udmVydFdyYXBwZXJNZXNzYWdlKHZhbHVlLCBtZXNzYWdlKToK
LSAgIiIiQ29udmVydCBhIEpTT04gcmVwcmVzZW50YXRpb24gaW50byBXcmFwcGVyIG1lc3NhZ2Uu
IiIiCi0gIGZpZWxkID0gbWVzc2FnZS5ERVNDUklQVE9SLmZpZWxkc19ieV9uYW1lWyd2YWx1ZSdd
Ci0gIHNldGF0dHIobWVzc2FnZSwgJ3ZhbHVlJywgX0NvbnZlcnRTY2FsYXJGaWVsZFZhbHVlKHZh
bHVlLCBmaWVsZCkpCi0KLQotZGVmIF9Db252ZXJ0TWFwRmllbGRWYWx1ZSh2YWx1ZSwgbWVzc2Fn
ZSwgZmllbGQpOgotICAiIiJDb252ZXJ0IG1hcCBmaWVsZCB2YWx1ZSBmb3IgYSBtZXNzYWdlIG1h
cCBmaWVsZC4KLQotICBBcmdzOgotICAgIHZhbHVlOiBBIEpTT04gb2JqZWN0IHRvIGNvbnZlcnQg
dGhlIG1hcCBmaWVsZCB2YWx1ZS4KLSAgICBtZXNzYWdlOiBBIHByb3RvY29sIG1lc3NhZ2UgdG8g
cmVjb3JkIHRoZSBjb252ZXJ0ZWQgZGF0YS4KLSAgICBmaWVsZDogVGhlIGRlc2NyaXB0b3Igb2Yg
dGhlIG1hcCBmaWVsZCB0byBiZSBjb252ZXJ0ZWQuCi0KLSAgUmFpc2VzOgotICAgIFBhcnNlRXJy
b3I6IEluIGNhc2Ugb2YgY29udmVydCBwcm9ibGVtcy4KLSAgIiIiCi0gIGlmIG5vdCBpc2luc3Rh
bmNlKHZhbHVlLCBkaWN0KToKLSAgICByYWlzZSBQYXJzZUVycm9yKAotICAgICAgICAnTWFwIGZp
ZWxkIHswfSBtdXN0IGJlIGluIGEgZGljdCB3aGljaCBpcyB7MX0uJy5mb3JtYXQoCi0gICAgICAg
ICAgICBmaWVsZC5uYW1lLCB2YWx1ZSkpCi0gIGtleV9maWVsZCA9IGZpZWxkLm1lc3NhZ2VfdHlw
ZS5maWVsZHNfYnlfbmFtZVsna2V5J10KLSAgdmFsdWVfZmllbGQgPSBmaWVsZC5tZXNzYWdlX3R5
cGUuZmllbGRzX2J5X25hbWVbJ3ZhbHVlJ10KLSAgZm9yIGtleSBpbiB2YWx1ZToKLSAgICBrZXlf
dmFsdWUgPSBfQ29udmVydFNjYWxhckZpZWxkVmFsdWUoa2V5LCBrZXlfZmllbGQsIFRydWUpCi0g
ICAgaWYgdmFsdWVfZmllbGQuY3BwX3R5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3Iu
Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgX0NvbnZlcnRNZXNzYWdlKHZhbHVlW2tleV0sIGdldGF0
dHIobWVzc2FnZSwgZmllbGQubmFtZSlba2V5X3ZhbHVlXSkKLSAgICBlbHNlOgotICAgICAgZ2V0
YXR0cihtZXNzYWdlLCBmaWVsZC5uYW1lKVtrZXlfdmFsdWVdID0gX0NvbnZlcnRTY2FsYXJGaWVs
ZFZhbHVlKAotICAgICAgICAgIHZhbHVlW2tleV0sIHZhbHVlX2ZpZWxkKQotCi0KLWRlZiBfQ29u
dmVydFNjYWxhckZpZWxkVmFsdWUodmFsdWUsIGZpZWxkLCByZXF1aXJlX3N0cj1GYWxzZSk6Ci0g
ICIiIkNvbnZlcnQgYSBzaW5nbGUgc2NhbGFyIGZpZWxkIHZhbHVlLgotCi0gIEFyZ3M6Ci0gICAg
dmFsdWU6IEEgc2NhbGFyIHZhbHVlIHRvIGNvbnZlcnQgdGhlIHNjYWxhciBmaWVsZCB2YWx1ZS4K
LSAgICBmaWVsZDogVGhlIGRlc2NyaXB0b3Igb2YgdGhlIGZpZWxkIHRvIGNvbnZlcnQuCi0gICAg
cmVxdWlyZV9zdHI6IElmIFRydWUsIHRoZSBmaWVsZCB2YWx1ZSBtdXN0IGJlIGEgc3RyLgotCi0g
IFJldHVybnM6Ci0gICAgVGhlIGNvbnZlcnRlZCBzY2FsYXIgZmllbGQgdmFsdWUKLQotICBSYWlz
ZXM6Ci0gICAgUGFyc2VFcnJvcjogSW4gY2FzZSBvZiBjb252ZXJ0IHByb2JsZW1zLgotICAiIiIK
LSAgaWYgZmllbGQuY3BwX3R5cGUgaW4gX0lOVF9UWVBFUzoKLSAgICByZXR1cm4gX0NvbnZlcnRJ
bnRlZ2VyKHZhbHVlKQotICBlbGlmIGZpZWxkLmNwcF90eXBlIGluIF9GTE9BVF9UWVBFUzoKLSAg
ICByZXR1cm4gX0NvbnZlcnRGbG9hdCh2YWx1ZSkKLSAgZWxpZiBmaWVsZC5jcHBfdHlwZSA9PSBk
ZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX0JPT0w6Ci0gICAgcmV0dXJuIF9Db252
ZXJ0Qm9vbCh2YWx1ZSwgcmVxdWlyZV9zdHIpCi0gIGVsaWYgZmllbGQuY3BwX3R5cGUgPT0gZGVz
Y3JpcHRvci5GaWVsZERlc2NyaXB0b3IuQ1BQVFlQRV9TVFJJTkc6Ci0gICAgaWYgZmllbGQudHlw
ZSA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX0JZVEVTOgotICAgICAgcmV0dXJu
IGJhc2U2NC5iNjRkZWNvZGUodmFsdWUpCi0gICAgZWxzZToKLSAgICAgIHJldHVybiB2YWx1ZQot
ICBlbGlmIGZpZWxkLmNwcF90eXBlID09IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZ
UEVfRU5VTToKLSAgICAjIENvbnZlcnQgYW4gZW51bSB2YWx1ZS4KLSAgICBlbnVtX3ZhbHVlID0g
ZmllbGQuZW51bV90eXBlLnZhbHVlc19ieV9uYW1lLmdldCh2YWx1ZSwgTm9uZSkKLSAgICBpZiBl
bnVtX3ZhbHVlIGlzIE5vbmU6Ci0gICAgICByYWlzZSBQYXJzZUVycm9yKAotICAgICAgICAgICdF
bnVtIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgbGl0ZXJhbCB3aXRoIGRvdWJsZSBxdW90ZXMuICcK
LSAgICAgICAgICAnVHlwZSAiezB9IiBoYXMgbm8gdmFsdWUgbmFtZWQgezF9LicuZm9ybWF0KAot
ICAgICAgICAgICAgICBmaWVsZC5lbnVtX3R5cGUuZnVsbF9uYW1lLCB2YWx1ZSkpCi0gICAgcmV0
dXJuIGVudW1fdmFsdWUubnVtYmVyCi0KLQotZGVmIF9Db252ZXJ0SW50ZWdlcih2YWx1ZSk6Ci0g
ICIiIkNvbnZlcnQgYW4gaW50ZWdlci4KLQotICBBcmdzOgotICAgIHZhbHVlOiBBIHNjYWxhciB2
YWx1ZSB0byBjb252ZXJ0LgotCi0gIFJldHVybnM6Ci0gICAgVGhlIGludGVnZXIgdmFsdWUuCi0K
LSAgUmFpc2VzOgotICAgIFBhcnNlRXJyb3I6IElmIGFuIGludGVnZXIgY291bGRuJ3QgYmUgY29u
c3VtZWQuCi0gICIiIgotICBpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgcmFpc2Ug
UGFyc2VFcnJvcignQ291bGRuXCd0IHBhcnNlIGludGVnZXI6IHswfS4nLmZvcm1hdCh2YWx1ZSkp
Ci0KLSAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc2l4LnRleHRfdHlwZSkgYW5kIHZhbHVlLmZpbmQo
JyAnKSAhPSAtMToKLSAgICByYWlzZSBQYXJzZUVycm9yKCdDb3VsZG5cJ3QgcGFyc2UgaW50ZWdl
cjogInswfSIuJy5mb3JtYXQodmFsdWUpKQotCi0gIHJldHVybiBpbnQodmFsdWUpCi0KLQotZGVm
IF9Db252ZXJ0RmxvYXQodmFsdWUpOgotICAiIiJDb252ZXJ0IGFuIGZsb2F0aW5nIHBvaW50IG51
bWJlci4iIiIKLSAgaWYgdmFsdWUgPT0gJ25hbic6Ci0gICAgcmFpc2UgUGFyc2VFcnJvcignQ291
bGRuXCd0IHBhcnNlIGZsb2F0ICJuYW4iLCB1c2UgIk5hTiIgaW5zdGVhZC4nKQotICB0cnk6Ci0g
ICAgIyBBc3N1bWUgUHl0aG9uIGNvbXBhdGlibGUgc3ludGF4LgotICAgIHJldHVybiBmbG9hdCh2
YWx1ZSkKLSAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgIyBDaGVjayBhbHRlcm5hdGl2ZSBzcGVs
bGluZ3MuCi0gICAgaWYgdmFsdWUgPT0gX05FR19JTkZJTklUWToKLSAgICAgIHJldHVybiBmbG9h
dCgnLWluZicpCi0gICAgZWxpZiB2YWx1ZSA9PSBfSU5GSU5JVFk6Ci0gICAgICByZXR1cm4gZmxv
YXQoJ2luZicpCi0gICAgZWxpZiB2YWx1ZSA9PSBfTkFOOgotICAgICAgcmV0dXJuIGZsb2F0KCdu
YW4nKQotICAgIGVsc2U6Ci0gICAgICByYWlzZSBQYXJzZUVycm9yKCdDb3VsZG5cJ3QgcGFyc2Ug
ZmxvYXQ6IHswfS4nLmZvcm1hdCh2YWx1ZSkpCi0KLQotZGVmIF9Db252ZXJ0Qm9vbCh2YWx1ZSwg
cmVxdWlyZV9zdHIpOgotICAiIiJDb252ZXJ0IGEgYm9vbGVhbiB2YWx1ZS4KLQotICBBcmdzOgot
ICAgIHZhbHVlOiBBIHNjYWxhciB2YWx1ZSB0byBjb252ZXJ0LgotICAgIHJlcXVpcmVfc3RyOiBJ
ZiBUcnVlLCB2YWx1ZSBtdXN0IGJlIGEgc3RyLgotCi0gIFJldHVybnM6Ci0gICAgVGhlIGJvb2wg
cGFyc2VkLgotCi0gIFJhaXNlczoKLSAgICBQYXJzZUVycm9yOiBJZiBhIGJvb2xlYW4gdmFsdWUg
Y291bGRuJ3QgYmUgY29uc3VtZWQuCi0gICIiIgotICBpZiByZXF1aXJlX3N0cjoKLSAgICBpZiB2
YWx1ZSA9PSAndHJ1ZSc6Ci0gICAgICByZXR1cm4gVHJ1ZQotICAgIGVsaWYgdmFsdWUgPT0gJ2Zh
bHNlJzoKLSAgICAgIHJldHVybiBGYWxzZQotICAgIGVsc2U6Ci0gICAgICByYWlzZSBQYXJzZUVy
cm9yKCdFeHBlY3RlZCAidHJ1ZSIgb3IgImZhbHNlIiwgbm90IHswfS4nLmZvcm1hdCh2YWx1ZSkp
Ci0KLSAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgotICAgIHJhaXNlIFBhcnNlRXJy
b3IoJ0V4cGVjdGVkIHRydWUgb3IgZmFsc2Ugd2l0aG91dCBxdW90ZXMuJykKLSAgcmV0dXJuIHZh
bHVlCi0KLV9XS1RKU09OTUVUSE9EUyA9IHsKLSAgICAnZ29vZ2xlLnByb3RvYnVmLkFueSc6IFtf
QW55TWVzc2FnZVRvSnNvbk9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29u
dmVydEFueU1lc3NhZ2VdLAotICAgICdnb29nbGUucHJvdG9idWYuRHVyYXRpb24nOiBbX0dlbmVy
aWNNZXNzYWdlVG9Kc29uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0NvbnZlcnRHZW5lcmljTWVzc2FnZV0sCi0gICAgJ2dvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sn
OiBbX0dlbmVyaWNNZXNzYWdlVG9Kc29uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db252ZXJ0R2VuZXJpY01lc3NhZ2VdLAotICAgICdnb29nbGUucHJvdG9idWYu
TGlzdFZhbHVlJzogW19MaXN0VmFsdWVNZXNzYWdlVG9Kc29uT2JqZWN0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Db252ZXJ0TGlzdFZhbHVlTWVzc2FnZV0sCi0gICAgJ2dv
b2dsZS5wcm90b2J1Zi5TdHJ1Y3QnOiBbX1N0cnVjdE1lc3NhZ2VUb0pzb25PYmplY3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbnZlcnRTdHJ1Y3RNZXNzYWdlXSwKLSAgICAn
Z29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCc6IFtfR2VuZXJpY01lc3NhZ2VUb0pzb25PYmplY3Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbnZlcnRHZW5lcmljTWVzc2Fn
ZV0sCi0gICAgJ2dvb2dsZS5wcm90b2J1Zi5WYWx1ZSc6IFtfVmFsdWVNZXNzYWdlVG9Kc29uT2Jq
ZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbnZlcnRWYWx1ZU1lc3NhZ2Vd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvbWVzc2FnZS5weSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9u
L2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCA2MDZmNzM1ZjNlOTVlNzk4MGFkMTc0ZjY4OTFlMzJlZGIwYjg1MjIxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9t
ZXNzYWdlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLSMgUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyBUT0RP
KHJvYmluc29uKTogV2Ugc2hvdWxkIGp1c3QgbWFrZSB0aGVzZSBtZXRob2RzIGFsbCAicHVyZS12
aXJ0dWFsIiBhbmQgbW92ZQotIyBhbGwgaW1wbGVtZW50YXRpb24gb3V0LCBpbnRvIHJlZmxlY3Rp
b24ucHkgZm9yIG5vdy4KLQotCi0iIiJDb250YWlucyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZv
ciBwcm90b2NvbCBtZXNzYWdlcy4iIiIKLQotX19hdXRob3JfXyA9ICdyb2JpbnNvbkBnb29nbGUu
Y29tIChXaWxsIFJvYmluc29uKScKLQotY2xhc3MgRXJyb3IoRXhjZXB0aW9uKTogcGFzcwotY2xh
c3MgRGVjb2RlRXJyb3IoRXJyb3IpOiBwYXNzCi1jbGFzcyBFbmNvZGVFcnJvcihFcnJvcik6IHBh
c3MKLQotCi1jbGFzcyBNZXNzYWdlKG9iamVjdCk6Ci0KLSAgIiIiQWJzdHJhY3QgYmFzZSBjbGFz
cyBmb3IgcHJvdG9jb2wgbWVzc2FnZXMuCi0KLSAgUHJvdG9jb2wgbWVzc2FnZSBjbGFzc2VzIGFy
ZSBhbG1vc3QgYWx3YXlzIGdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wKLSAgY29tcGlsZXIuICBU
aGVzZSBnZW5lcmF0ZWQgdHlwZXMgc3ViY2xhc3MgTWVzc2FnZSBhbmQgaW1wbGVtZW50IHRoZSBt
ZXRob2RzCi0gIHNob3duIGJlbG93LgotCi0gIFRPRE8ocm9iaW5zb24pOiBMaW5rIHRvIGFuIEhU
TUwgZG9jdW1lbnQgaGVyZS4KLQotICBUT0RPKHJvYmluc29uKTogRG9jdW1lbnQgdGhhdCBpbnN0
YW5jZXMgb2YgdGhpcyBjbGFzcyB3aWxsIGFsc28KLSAgaGF2ZSBhbiBFeHRlbnNpb25zIGF0dHJp
YnV0ZSB3aXRoIF9fZ2V0aXRlbV9fIGFuZCBfX3NldGl0ZW1fXy4KLSAgQWdhaW4sIG5vdCBzdXJl
IGhvdyB0byBiZXN0IGNvbnZleSB0aGlzLgotCi0gIFRPRE8ocm9iaW5zb24pOiBEb2N1bWVudCB0
aGF0IHRoZSBjbGFzcyBtdXN0IGFsc28gaGF2ZSBhIHN0YXRpYwotICAgIFJlZ2lzdGVyRXh0ZW5z
aW9uKGV4dGVuc2lvbl9maWVsZCkgbWV0aG9kLgotICAgIE5vdCBzdXJlIGhvdyB0byBiZXN0IGV4
cHJlc3MgYXQgdGhpcyBwb2ludC4KLSAgIiIiCi0KLSAgIyBUT0RPKHJvYmluc29uKTogRG9jdW1l
bnQgdGhlc2UgZmllbGRzIGFuZCBtZXRob2RzLgotCi0gIF9fc2xvdHNfXyA9IFtdCi0KLSAgREVT
Q1JJUFRPUiA9IE5vbmUKLQotICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW89Tm9uZSk6Ci0g
ICAgY2xvbmUgPSB0eXBlKHNlbGYpKCkKLSAgICBjbG9uZS5NZXJnZUZyb20oc2VsZikKLSAgICBy
ZXR1cm4gY2xvbmUKLQotICBkZWYgX19lcV9fKHNlbGYsIG90aGVyX21zZyk6Ci0gICAgIiIiUmVj
dXJzaXZlbHkgY29tcGFyZXMgdHdvIG1lc3NhZ2VzIGJ5IHZhbHVlIGFuZCBzdHJ1Y3R1cmUuIiIi
Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBfX25lX18oc2VsZiwgb3Ro
ZXJfbXNnKToKLSAgICAjIENhbid0IGp1c3Qgc2F5IHNlbGYgIT0gb3RoZXJfbXNnLCBzaW5jZSB0
aGF0IHdvdWxkIGluZmluaXRlbHkgcmVjdXJzZS4gOikKLSAgICByZXR1cm4gbm90IHNlbGYgPT0g
b3RoZXJfbXNnCi0KLSAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgIHJhaXNlIFR5cGVFcnJvcign
dW5oYXNoYWJsZSBvYmplY3QnKQotCi0gIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICIiIk91dHB1
dHMgYSBodW1hbi1yZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZS4iIiIKLSAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgot
ICAgICIiIk91dHB1dHMgYSBodW1hbi1yZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVz
c2FnZS4iIiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgZGVmIE1lcmdlRnJv
bShzZWxmLCBvdGhlcl9tc2cpOgotICAgICIiIk1lcmdlcyB0aGUgY29udGVudHMgb2YgdGhlIHNw
ZWNpZmllZCBtZXNzYWdlIGludG8gY3VycmVudCBtZXNzYWdlLgotCi0gICAgVGhpcyBtZXRob2Qg
bWVyZ2VzIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UgaW50byB0aGUgY3Vy
cmVudAotICAgIG1lc3NhZ2UuIFNpbmd1bGFyIGZpZWxkcyB0aGF0IGFyZSBzZXQgaW4gdGhlIHNw
ZWNpZmllZCBtZXNzYWdlIG92ZXJ3cml0ZQotICAgIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBp
biB0aGUgY3VycmVudCBtZXNzYWdlLiBSZXBlYXRlZCBmaWVsZHMgYXJlCi0gICAgYXBwZW5kZWQu
IFNpbmd1bGFyIHN1Yi1tZXNzYWdlcyBhbmQgZ3JvdXBzIGFyZSByZWN1cnNpdmVseSBtZXJnZWQu
Ci0KLSAgICBBcmdzOgotICAgICAgb3RoZXJfbXNnOiBNZXNzYWdlIHRvIG1lcmdlIGludG8gdGhl
IGN1cnJlbnQgbWVzc2FnZS4KLSAgICAiIiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
Ci0KLSAgZGVmIENvcHlGcm9tKHNlbGYsIG90aGVyX21zZyk6Ci0gICAgIiIiQ29waWVzIHRoZSBj
b250ZW50IG9mIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSBpbnRvIHRoZSBjdXJyZW50IG1lc3NhZ2Uu
Ci0KLSAgICBUaGUgbWV0aG9kIGNsZWFycyB0aGUgY3VycmVudCBtZXNzYWdlIGFuZCB0aGVuIG1l
cmdlcyB0aGUgc3BlY2lmaWVkCi0gICAgbWVzc2FnZSB1c2luZyBNZXJnZUZyb20uCi0KLSAgICBB
cmdzOgotICAgICAgb3RoZXJfbXNnOiBNZXNzYWdlIHRvIGNvcHkgaW50byB0aGUgY3VycmVudCBv
bmUuCi0gICAgIiIiCi0gICAgaWYgc2VsZiBpcyBvdGhlcl9tc2c6Ci0gICAgICByZXR1cm4KLSAg
ICBzZWxmLkNsZWFyKCkKLSAgICBzZWxmLk1lcmdlRnJvbShvdGhlcl9tc2cpCi0KLSAgZGVmIENs
ZWFyKHNlbGYpOgotICAgICIiIkNsZWFycyBhbGwgZGF0YSB0aGF0IHdhcyBzZXQgaW4gdGhlIG1l
c3NhZ2UuIiIiCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBTZXRJblBh
cmVudChzZWxmKToKLSAgICAiIiJNYXJrIHRoaXMgYXMgcHJlc2VudCBpbiB0aGUgcGFyZW50Lgot
Ci0gICAgVGhpcyBub3JtYWxseSBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgYXNzaWdu
IGEgZmllbGQgb2YgYQotICAgIHN1Yi1tZXNzYWdlLCBidXQgc29tZXRpbWVzIHlvdSB3YW50IHRv
IG1ha2UgdGhlIHN1Yi1tZXNzYWdlCi0gICAgcHJlc2VudCB3aGlsZSBrZWVwaW5nIGl0IGVtcHR5
LiAgSWYgeW91IGZpbmQgeW91cnNlbGYgdXNpbmcgdGhpcywKLSAgICB5b3UgbWF5IHdhbnQgdG8g
cmVjb25zaWRlciB5b3VyIGRlc2lnbi4iIiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
Ci0KLSAgZGVmIElzSW5pdGlhbGl6ZWQoc2VsZik6Ci0gICAgIiIiQ2hlY2tzIGlmIHRoZSBtZXNz
YWdlIGlzIGluaXRpYWxpemVkLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBtZXRob2QgcmV0
dXJucyBUcnVlIGlmIHRoZSBtZXNzYWdlIGlzIGluaXRpYWxpemVkIChpLmUuIGFsbCBvZiBpdHMK
LSAgICAgIHJlcXVpcmVkIGZpZWxkcyBhcmUgc2V0KS4KLSAgICAiIiIKLSAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCi0KLSAgIyBUT0RPKHJvYmluc29uKTogTWVyZ2VGcm9tU3RyaW5nKCkg
c2hvdWxkIHByb2JhYmx5IHJldHVybiBOb25lIGFuZCBiZQotICAjIGltcGxlbWVudGVkIGluIHRl
cm1zIG9mIGEgaGVscGVyIHRoYXQgcmV0dXJucyB0aGUgIyBvZiBieXRlcyByZWFkLiAgT3VyCi0g
ICMgZGVzZXJpYWxpemF0aW9uIHJvdXRpbmVzIHdvdWxkIHVzZSB0aGUgaGVscGVyIHdoZW4gcmVj
dXJzaXZlbHkKLSAgIyBkZXNlcmlhbGl6aW5nLCBidXQgdGhlIGVuZCB1c2VyIHdvdWxkIGFsbW9z
dCBhbHdheXMganVzdCB3YW50IHRoZSBuby1yZXR1cm4KLSAgIyBNZXJnZUZyb21TdHJpbmcoKS4K
LQotICBkZWYgTWVyZ2VGcm9tU3RyaW5nKHNlbGYsIHNlcmlhbGl6ZWQpOgotICAgICIiIk1lcmdl
cyBzZXJpYWxpemVkIHByb3RvY29sIGJ1ZmZlciBkYXRhIGludG8gdGhpcyBtZXNzYWdlLgotCi0g
ICAgV2hlbiB3ZSBmaW5kIGEgZmllbGQgaW4gfHNlcmlhbGl6ZWR8IHRoYXQgaXMgYWxyZWFkeSBw
cmVzZW50Ci0gICAgaW4gdGhpcyBtZXNzYWdlOgotICAgICAgLSBJZiBpdCdzIGEgInJlcGVhdGVk
IiBmaWVsZCwgd2UgYXBwZW5kIHRvIHRoZSBlbmQgb2Ygb3VyIGxpc3QuCi0gICAgICAtIEVsc2Us
IGlmIGl0J3MgYSBzY2FsYXIsIHdlIG92ZXJ3cml0ZSBvdXIgZmllbGQuCi0gICAgICAtIEVsc2Us
IChpdCdzIGEgbm9ucmVwZWF0ZWQgY29tcG9zaXRlKSwgd2UgcmVjdXJzaXZlbHkgbWVyZ2UKLSAg
ICAgICAgaW50byB0aGUgZXhpc3RpbmcgY29tcG9zaXRlLgotCi0gICAgVE9ETyhyb2JpbnNvbik6
IERvY3VtZW50IGhhbmRsaW5nIG9mIHVua25vd24gZmllbGRzLgotCi0gICAgQXJnczoKLSAgICAg
IHNlcmlhbGl6ZWQ6IEFueSBvYmplY3QgdGhhdCBhbGxvd3MgdXMgdG8gY2FsbCBidWZmZXIoc2Vy
aWFsaXplZCkKLSAgICAgICAgdG8gYWNjZXNzIGEgc3RyaW5nIG9mIGJ5dGVzIHVzaW5nIHRoZSBi
dWZmZXIgaW50ZXJmYWNlLgotCi0gICAgVE9ETyhyb2JpbnNvbik6IFdoZW4gd2Ugc3dpdGNoIHRv
IGEgaGVscGVyLCB0aGlzIHdpbGwgcmV0dXJuIE5vbmUuCi0KLSAgICBSZXR1cm5zOgotICAgICAg
VGhlIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gfHNlcmlhbGl6ZWR8LgotICAgICAgRm9yIG5v
bi1ncm91cCBtZXNzYWdlcywgdGhpcyB3aWxsIGFsd2F5cyBiZSBsZW4oc2VyaWFsaXplZCksCi0g
ICAgICBidXQgZm9yIG1lc3NhZ2VzIHdoaWNoIGFyZSBhY3R1YWxseSBncm91cHMsIHRoaXMgd2ls
bAotICAgICAgZ2VuZXJhbGx5IGJlIGxlc3MgdGhhbiBsZW4oc2VyaWFsaXplZCksIHNpbmNlIHdl
IG11c3QKLSAgICAgIHN0b3Agd2hlbiB3ZSByZWFjaCBhbiBFTkRfR1JPVVAgdGFnLiAgTm90ZSB0
aGF0IGlmCi0gICAgICB3ZSAqZG8qIHN0b3AgYmVjYXVzZSBvZiBhbiBFTkRfR1JPVVAgdGFnLCB0
aGUgbnVtYmVyCi0gICAgICBvZiBieXRlcyByZXR1cm5lZCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBi
eXRlcwotICAgICAgZm9yIHRoZSBFTkRfR1JPVVAgdGFnIGluZm9ybWF0aW9uLgotICAgICIiIgot
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICBkZWYgUGFyc2VGcm9tU3RyaW5nKHNl
bGYsIHNlcmlhbGl6ZWQpOgotICAgICIiIlBhcnNlIHNlcmlhbGl6ZWQgcHJvdG9jb2wgYnVmZmVy
IGRhdGEgaW50byB0aGlzIG1lc3NhZ2UuCi0KLSAgICBMaWtlIE1lcmdlRnJvbVN0cmluZygpLCBl
eGNlcHQgd2UgY2xlYXIgdGhlIG9iamVjdCBmaXJzdCBhbmQKLSAgICBkbyBub3QgcmV0dXJuIHRo
ZSB2YWx1ZSB0aGF0IE1lcmdlRnJvbVN0cmluZyByZXR1cm5zLgotICAgICIiIgotICAgIHNlbGYu
Q2xlYXIoKQotICAgIHNlbGYuTWVyZ2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQpCi0KLSAgZGVmIFNl
cmlhbGl6ZVRvU3RyaW5nKHNlbGYpOgotICAgICIiIlNlcmlhbGl6ZXMgdGhlIHByb3RvY29sIG1l
c3NhZ2UgdG8gYSBiaW5hcnkgc3RyaW5nLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgYmluYXJ5
IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBpZiBhbGwgb2YgdGhlIHJlcXVp
cmVkCi0gICAgICBmaWVsZHMgaW4gdGhlIG1lc3NhZ2UgYXJlIHNldCAoaS5lLiB0aGUgbWVzc2Fn
ZSBpcyBpbml0aWFsaXplZCkuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBtZXNzYWdlLkVuY29kZUVy
cm9yIGlmIHRoZSBtZXNzYWdlIGlzbid0IGluaXRpYWxpemVkLgotICAgICIiIgotICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKLQotICBkZWYgU2VyaWFsaXplUGFydGlhbFRvU3RyaW5nKHNl
bGYpOgotICAgICIiIlNlcmlhbGl6ZXMgdGhlIHByb3RvY29sIG1lc3NhZ2UgdG8gYSBiaW5hcnkg
c3RyaW5nLgotCi0gICAgVGhpcyBtZXRob2QgaXMgc2ltaWxhciB0byBTZXJpYWxpemVUb1N0cmlu
ZyBidXQgZG9lc24ndCBjaGVjayBpZiB0aGUKLSAgICBtZXNzYWdlIGlzIGluaXRpYWxpemVkLgot
Ci0gICAgUmV0dXJuczoKLSAgICAgIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXJ0
aWFsIG1lc3NhZ2UuCi0gICAgIiIiCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0g
ICMgVE9ETyhyb2JpbnNvbik6IERlY2lkZSB3aGV0aGVyIHdlIGxpa2UgdGhlc2UgYmV0dGVyCi0g
ICMgdGhhbiBhdXRvLWdlbmVyYXRlZCBoYXNfZm9vKCkgYW5kIGNsZWFyX2ZvbygpIG1ldGhvZHMK
LSAgIyBvbiB0aGUgaW5zdGFuY2VzIHRoZW1zZWx2ZXMuICBUaGlzIHdheSBpcyBsZXNzIGNvbnNp
c3RlbnQKLSAgIyB3aXRoIEMrKywgYnV0IGl0IG1ha2VzIHJlZmxlY3Rpb24tdHlwZSBhY2Nlc3Mg
ZWFzaWVyIGFuZAotICAjIHJlZHVjZXMgdGhlIG51bWJlciBvZiBtYWdpY2FsbHkgYXV0b2dlbmVy
YXRlZCB0aGluZ3MuCi0gICMKLSAgIyBUT0RPKHJvYmluc29uKTogQmUgc3VyZSB0byBkb2N1bWVu
dCAoYW5kIHRlc3QpIGV4YWN0bHkKLSAgIyB3aGljaCBmaWVsZCBuYW1lcyBhcmUgYWNjZXB0ZWQg
aGVyZS4gIEFyZSB3ZSBjYXNlLXNlbnNpdGl2ZT8KLSAgIyBXaGF0IGRvIHdlIGRvIHdpdGggZmll
bGRzIHRoYXQgc2hhcmUgbmFtZXMgd2l0aCBQeXRob24ga2V5d29yZHMKLSAgIyBsaWtlICdsYW1i
ZGEnIGFuZCAneWllbGQnPwotICAjCi0gICMgbm5vcndpdHogc2F5czoKLSAgIyAiIiIKLSAgIyBU
eXBpY2FsbHkgKGluIHB5dGhvbiksIGFuIHVuZGVyc2NvcmUgaXMgYXBwZW5kZWQgdG8gbmFtZXMg
dGhhdCBhcmUKLSAgIyBrZXl3b3Jkcy4gU28gdGhleSB3b3VsZCBiZWNvbWUgbGFtYmRhXyBvciB5
aWVsZF8uCi0gICMgIiIiCi0gIGRlZiBMaXN0RmllbGRzKHNlbGYpOgotICAgICIiIlJldHVybnMg
YSBsaXN0IG9mIChGaWVsZERlc2NyaXB0b3IsIHZhbHVlKSB0dXBsZXMgZm9yIGFsbAotICAgIGZp
ZWxkcyBpbiB0aGUgbWVzc2FnZSB3aGljaCBhcmUgbm90IGVtcHR5LiAgQSBzaW5ndWxhciBmaWVs
ZCBpcyBub24tZW1wdHkKLSAgICBpZiBIYXNGaWVsZCgpIHdvdWxkIHJldHVybiB0cnVlLCBhbmQg
YSByZXBlYXRlZCBmaWVsZCBpcyBub24tZW1wdHkgaWYKLSAgICBpdCBjb250YWlucyBhdCBsZWFz
dCBvbmUgZWxlbWVudC4gIFRoZSBmaWVsZHMgYXJlIG9yZGVyZWQgYnkgZmllbGQKLSAgICBudW1i
ZXIiIiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgZGVmIEhhc0ZpZWxkKHNl
bGYsIGZpZWxkX25hbWUpOgotICAgICIiIkNoZWNrcyBpZiBhIGNlcnRhaW4gZmllbGQgaXMgc2V0
IGZvciB0aGUgbWVzc2FnZSwgb3IgaWYgYW55IGZpZWxkIGluc2lkZQotICAgIGEgb25lb2YgZ3Jv
dXAgaXMgc2V0LiAgTm90ZSB0aGF0IGlmIHRoZSBmaWVsZF9uYW1lIGlzIG5vdCBkZWZpbmVkIGlu
IHRoZQotICAgIG1lc3NhZ2UgZGVzY3JpcHRvciwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4i
IiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgZGVmIENsZWFyRmllbGQoc2Vs
ZiwgZmllbGRfbmFtZSk6Ci0gICAgIiIiQ2xlYXJzIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIGZp
ZWxkLCBvciB0aGUgZmllbGQgc2V0IGluc2lkZSBhIG9uZW9mCi0gICAgZ3JvdXAuICBJZiB0aGUg
bmFtZSBuZWl0aGVyIHJlZmVycyB0byBhIGRlZmluZWQgZmllbGQgb3Igb25lb2YgZ3JvdXAsCi0g
ICAgVmFsdWVFcnJvciBpcyByYWlzZWQuIiIiCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cgotCi0gIGRlZiBXaGljaE9uZW9mKHNlbGYsIG9uZW9mX2dyb3VwKToKLSAgICAiIiJSZXR1cm5z
IHRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0aGF0IGlzIHNldCBpbnNpZGUgYSBvbmVvZiBncm91cCwg
b3IKLSAgICBOb25lIGlmIG5vIGZpZWxkIGlzIHNldC4gIElmIG5vIGdyb3VwIHdpdGggdGhlIGdp
dmVuIG5hbWUgZXhpc3RzLCBWYWx1ZUVycm9yCi0gICAgd2lsbCBiZSByYWlzZWQuIiIiCi0gICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBIYXNFeHRlbnNpb24oc2VsZiwgZXh0
ZW5zaW9uX2hhbmRsZSk6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBD
bGVhckV4dGVuc2lvbihzZWxmLCBleHRlbnNpb25faGFuZGxlKToKLSAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yCi0KLSAgZGVmIERpc2NhcmRVbmtub3duRmllbGRzKHNlbGYpOgotICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICBkZWYgQnl0ZVNpemUoc2VsZik6Ci0gICAgIiIi
UmV0dXJucyB0aGUgc2VyaWFsaXplZCBzaXplIG9mIHRoaXMgbWVzc2FnZS4KLSAgICBSZWN1cnNp
dmVseSBjYWxscyBCeXRlU2l6ZSgpIG9uIGFsbCBjb250YWluZWQgbWVzc2FnZXMuCi0gICAgIiIi
Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBfU2V0TGlzdGVuZXIoc2Vs
ZiwgbWVzc2FnZV9saXN0ZW5lcik6Ci0gICAgIiIiSW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgdGhl
IHByb3RvY29sIG1lc3NhZ2UgaW1wbGVtZW50YXRpb24uCi0gICAgQ2xpZW50cyBzaG91bGQgbm90
IGNhbGwgdGhpcyBkaXJlY3RseS4KLQotICAgIFNldHMgYSBsaXN0ZW5lciB0aGF0IHRoaXMgbWVz
c2FnZSB3aWxsIGNhbGwgb24gY2VydGFpbiBzdGF0ZSB0cmFuc2l0aW9ucy4KLQotICAgIFRoZSBw
dXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIHJlZ2lzdGVyIGJhY2stZWRnZXMgZnJvbSBjaGls
ZHJlbiB0bwotICAgIHBhcmVudHMgYXQgcnVudGltZSwgZm9yIHRoZSBwdXJwb3NlIG9mIHNldHRp
bmcgImhhcyIgYml0cyBhbmQKLSAgICBieXRlLXNpemUtZGlydHkgYml0cyBpbiB0aGUgcGFyZW50
IGFuZCBhbmNlc3RvciBvYmplY3RzIHdoZW5ldmVyIGEgY2hpbGQgb3IKLSAgICBkZXNjZW5kYW50
IG9iamVjdCBpcyBtb2RpZmllZC4KLQotICAgIElmIHRoZSBjbGllbnQgd2FudHMgdG8gZGlzY29u
bmVjdCB0aGlzIE1lc3NhZ2UgZnJvbSB0aGUgb2JqZWN0IHRyZWUsIHNoZQotICAgIGV4cGxpY2l0
bHkgc2V0cyBjYWxsYmFjayB0byBOb25lLgotCi0gICAgSWYgbWVzc2FnZV9saXN0ZW5lciBpcyBO
b25lLCB1bnJlZ2lzdGVycyBhbnkgZXhpc3RpbmcgbGlzdGVuZXIuICBPdGhlcndpc2UsCi0gICAg
bWVzc2FnZV9saXN0ZW5lciBtdXN0IGltcGxlbWVudCB0aGUgTWVzc2FnZUxpc3RlbmVyIGludGVy
ZmFjZSBpbgotICAgIGludGVybmFsL21lc3NhZ2VfbGlzdGVuZXIucHksIGFuZCB3ZSBkaXNjYXJk
IGFueSBsaXN0ZW5lciByZWdpc3RlcmVkCi0gICAgdmlhIGEgcHJldmlvdXMgX1NldExpc3RlbmVy
KCkgY2FsbC4KLSAgICAiIiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgZGVm
IF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAiIiJTdXBwb3J0IHRoZSBwaWNrbGUgcHJvdG9jb2wu
IiIiCi0gICAgcmV0dXJuIGRpY3Qoc2VyaWFsaXplZD1zZWxmLlNlcmlhbGl6ZVBhcnRpYWxUb1N0
cmluZygpKQotCi0gIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgotICAgICIiIlN1cHBv
cnQgdGhlIHBpY2tsZSBwcm90b2NvbC4iIiIKLSAgICBzZWxmLl9faW5pdF9fKCkKLSAgICBzZWxm
LlBhcnNlRnJvbVN0cmluZyhzdGF0ZVsnc2VyaWFsaXplZCddKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24v
Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2VfZmFjdG9yeS5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1
Zi9tZXNzYWdlX2ZhY3RvcnkucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMDU5
ZDEzMGI1YWI2YWI0YWRhMWEwODc3MjNkYzFkMzNjOTRjNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2Vf
ZmFjdG9yeS5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0jIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
IwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlBy
b3ZpZGVzIGEgZmFjdG9yeSBjbGFzcyBmb3IgZ2VuZXJhdGluZyBkeW5hbWljIG1lc3NhZ2VzLgot
Ci1UaGUgZWFzaWVzdCB3YXkgdG8gdXNlIHRoaXMgY2xhc3MgaXMgaWYgeW91IGhhdmUgYWNjZXNz
IHRvIHRoZSBGaWxlRGVzY3JpcHRvcgotcHJvdG9zIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2VzIHlv
dSB3YW50IHRvIGNyZWF0ZSB5b3UgY2FuIGp1c3QgZG8gdGhlIGZvbGxvd2luZzoKLQotbWVzc2Fn
ZV9jbGFzc2VzID0gbWVzc2FnZV9mYWN0b3J5LkdldE1lc3NhZ2VzKGl0ZXJhYmxlX29mX2ZpbGVf
ZGVzY3JpcHRvcnMpCi1teV9wcm90b19pbnN0YW5jZSA9IG1lc3NhZ2VfY2xhc3Nlc1snc29tZS5w
cm90by5wYWNrYWdlLk1lc3NhZ2VOYW1lJ10oKQotIiIiCi0KLV9fYXV0aG9yX18gPSAnbWF0dGhl
d3RvaWFAZ29vZ2xlLmNvbSAoTWF0dCBUb2lhKScKLQotZnJvbSBnb29nbGUucHJvdG9idWYgaW1w
b3J0IGRlc2NyaXB0b3JfcG9vbAotZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IG1lc3NhZ2UK
LWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCByZWZsZWN0aW9uCi0KLQotY2xhc3MgTWVzc2Fn
ZUZhY3Rvcnkob2JqZWN0KToKLSAgIiIiRmFjdG9yeSBmb3IgY3JlYXRpbmcgUHJvdG8yIG1lc3Nh
Z2VzIGZyb20gZGVzY3JpcHRvcnMgaW4gYSBwb29sLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxm
LCBwb29sPU5vbmUpOgotICAgICIiIkluaXRpYWxpemVzIGEgbmV3IGZhY3RvcnkuIiIiCi0gICAg
c2VsZi5wb29sID0gcG9vbCBvciBkZXNjcmlwdG9yX3Bvb2wuRGVzY3JpcHRvclBvb2woKQotCi0g
ICAgIyBsb2NhbCBjYWNoZSBvZiBhbGwgY2xhc3NlcyBidWlsdCBmcm9tIHByb3RvYnVmIGRlc2Ny
aXB0b3JzCi0gICAgc2VsZi5fY2xhc3NlcyA9IHt9Ci0KLSAgZGVmIEdldFByb3RvdHlwZShzZWxm
LCBkZXNjcmlwdG9yKToKLSAgICAiIiJCdWlsZHMgYSBwcm90bzIgbWVzc2FnZSBjbGFzcyBiYXNl
ZCBvbiB0aGUgcGFzc2VkIGluIGRlc2NyaXB0b3IuCi0KLSAgICBQYXNzaW5nIGEgZGVzY3JpcHRv
ciB3aXRoIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUgbWF0Y2hpbmcgYSBwcmV2aW91cwotICAgIGlu
dm9jYXRpb24gd2lsbCBjYXVzZSB0aGUgc2FtZSBjbGFzcyB0byBiZSByZXR1cm5lZC4KLQotICAg
IEFyZ3M6Ci0gICAgICBkZXNjcmlwdG9yOiBUaGUgZGVzY3JpcHRvciB0byBidWlsZCBmcm9tLgot
Ci0gICAgUmV0dXJuczoKLSAgICAgIEEgY2xhc3MgZGVzY3JpYmluZyB0aGUgcGFzc2VkIGluIGRl
c2NyaXB0b3IuCi0gICAgIiIiCi0gICAgaWYgZGVzY3JpcHRvci5mdWxsX25hbWUgbm90IGluIHNl
bGYuX2NsYXNzZXM6Ci0gICAgICBkZXNjcmlwdG9yX25hbWUgPSBkZXNjcmlwdG9yLm5hbWUKLSAg
ICAgIGlmIHN0ciBpcyBieXRlczogICMgUFkyCi0gICAgICAgIGRlc2NyaXB0b3JfbmFtZSA9IGRl
c2NyaXB0b3IubmFtZS5lbmNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpCi0gICAgICByZXN1bHRfY2xh
c3MgPSByZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoCi0gICAgICAgICAg
ZGVzY3JpcHRvcl9uYW1lLAotICAgICAgICAgIChtZXNzYWdlLk1lc3NhZ2UsKSwKLSAgICAgICAg
ICB7J0RFU0NSSVBUT1InOiBkZXNjcmlwdG9yLCAnX19tb2R1bGVfXyc6IE5vbmV9KQotICAgICAg
ICAgICMgSWYgbW9kdWxlIG5vdCBzZXQsIGl0IHdyb25nbHkgcG9pbnRzIHRvIHRoZSByZWZsZWN0
aW9uLnB5IG1vZHVsZS4KLSAgICAgIHNlbGYuX2NsYXNzZXNbZGVzY3JpcHRvci5mdWxsX25hbWVd
ID0gcmVzdWx0X2NsYXNzCi0gICAgICBmb3IgZmllbGQgaW4gZGVzY3JpcHRvci5maWVsZHM6Ci0g
ICAgICAgIGlmIGZpZWxkLm1lc3NhZ2VfdHlwZToKLSAgICAgICAgICBzZWxmLkdldFByb3RvdHlw
ZShmaWVsZC5tZXNzYWdlX3R5cGUpCi0gICAgICBmb3IgZXh0ZW5zaW9uIGluIHJlc3VsdF9jbGFz
cy5ERVNDUklQVE9SLmV4dGVuc2lvbnM6Ci0gICAgICAgIGlmIGV4dGVuc2lvbi5jb250YWluaW5n
X3R5cGUuZnVsbF9uYW1lIG5vdCBpbiBzZWxmLl9jbGFzc2VzOgotICAgICAgICAgIHNlbGYuR2V0
UHJvdG90eXBlKGV4dGVuc2lvbi5jb250YWluaW5nX3R5cGUpCi0gICAgICAgIGV4dGVuZGVkX2Ns
YXNzID0gc2VsZi5fY2xhc3Nlc1tleHRlbnNpb24uY29udGFpbmluZ190eXBlLmZ1bGxfbmFtZV0K
LSAgICAgICAgZXh0ZW5kZWRfY2xhc3MuUmVnaXN0ZXJFeHRlbnNpb24oZXh0ZW5zaW9uKQotICAg
IHJldHVybiBzZWxmLl9jbGFzc2VzW2Rlc2NyaXB0b3IuZnVsbF9uYW1lXQotCi0gIGRlZiBHZXRN
ZXNzYWdlcyhzZWxmLCBmaWxlcyk6Ci0gICAgIiIiR2V0cyBhbGwgdGhlIG1lc3NhZ2VzIGZyb20g
YSBzcGVjaWZpZWQgZmlsZS4KLQotICAgIFRoaXMgd2lsbCBmaW5kIGFuZCByZXNvbHZlIGRlcGVu
ZGVuY2llcywgZmFpbGluZyBpZiB0aGUgZGVzY3JpcHRvcgotICAgIHBvb2wgY2Fubm90IHNhdGlz
ZnkgdGhlbS4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlczogVGhlIGZpbGUgbmFtZXMgdG8gZXh0
cmFjdCBtZXNzYWdlcyBmcm9tLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgZGljdGlvbmFyeSBt
YXBwaW5nIHByb3RvIG5hbWVzIHRvIHRoZSBtZXNzYWdlIGNsYXNzZXMuIFRoaXMgd2lsbCBpbmNs
dWRlCi0gICAgICBhbnkgZGVwZW5kZW50IG1lc3NhZ2VzIGFzIHdlbGwgYXMgYW55IG1lc3NhZ2Vz
IGRlZmluZWQgaW4gdGhlIHNhbWUgZmlsZSBhcwotICAgICAgYSBzcGVjaWZpZWQgbWVzc2FnZS4K
LSAgICAiIiIKLSAgICByZXN1bHQgPSB7fQotICAgIGZvciBmaWxlX25hbWUgaW4gZmlsZXM6Ci0g
ICAgICBmaWxlX2Rlc2MgPSBzZWxmLnBvb2wuRmluZEZpbGVCeU5hbWUoZmlsZV9uYW1lKQotICAg
ICAgZm9yIG5hbWUsIG1zZyBpbiBmaWxlX2Rlc2MubWVzc2FnZV90eXBlc19ieV9uYW1lLml0ZW1z
KCk6Ci0gICAgICAgIGlmIGZpbGVfZGVzYy5wYWNrYWdlOgotICAgICAgICAgIGZ1bGxfbmFtZSA9
ICcuJy5qb2luKFtmaWxlX2Rlc2MucGFja2FnZSwgbmFtZV0pCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgZnVsbF9uYW1lID0gbXNnLm5hbWUKLSAgICAgICAgcmVzdWx0W2Z1bGxfbmFtZV0gPSBz
ZWxmLkdldFByb3RvdHlwZSgKLSAgICAgICAgICAgIHNlbGYucG9vbC5GaW5kTWVzc2FnZVR5cGVC
eU5hbWUoZnVsbF9uYW1lKSkKLQotICAgICAgIyBXaGlsZSB0aGUgZXh0ZW5zaW9uIEZpZWxkRGVz
Y3JpcHRvcnMgYXJlIGNyZWF0ZWQgYnkgdGhlIGRlc2NyaXB0b3IgcG9vbCwKLSAgICAgICMgdGhl
IHB5dGhvbiBjbGFzc2VzIGNyZWF0ZWQgaW4gdGhlIGZhY3RvcnkgbmVlZCB0aGVtIHRvIGJlIHJl
Z2lzdGVyZWQKLSAgICAgICMgZXhwbGljaXRseSwgd2hpY2ggaXMgZG9uZSBiZWxvdy4KLSAgICAg
ICMKLSAgICAgICMgVGhlIGNhbGwgdG8gUmVnaXN0ZXJFeHRlbnNpb24gd2lsbCBzcGVjaWZpY2Fs
bHkgY2hlY2sgaWYgdGhlCi0gICAgICAjIGV4dGVuc2lvbiB3YXMgYWxyZWFkeSByZWdpc3RlcmVk
IG9uIHRoZSBvYmplY3QgYW5kIGVpdGhlcgotICAgICAgIyBpZ25vcmUgdGhlIHJlZ2lzdHJhdGlv
biBpZiB0aGUgb3JpZ2luYWwgd2FzIHRoZSBzYW1lLCBvciByYWlzZQotICAgICAgIyBhbiBlcnJv
ciBpZiB0aGV5IHdlcmUgZGlmZmVyZW50LgotCi0gICAgICBmb3IgbmFtZSwgZXh0ZW5zaW9uIGlu
IGZpbGVfZGVzYy5leHRlbnNpb25zX2J5X25hbWUuaXRlbXMoKToKLSAgICAgICAgaWYgZXh0ZW5z
aW9uLmNvbnRhaW5pbmdfdHlwZS5mdWxsX25hbWUgbm90IGluIHNlbGYuX2NsYXNzZXM6Ci0gICAg
ICAgICAgc2VsZi5HZXRQcm90b3R5cGUoZXh0ZW5zaW9uLmNvbnRhaW5pbmdfdHlwZSkKLSAgICAg
ICAgZXh0ZW5kZWRfY2xhc3MgPSBzZWxmLl9jbGFzc2VzW2V4dGVuc2lvbi5jb250YWluaW5nX3R5
cGUuZnVsbF9uYW1lXQotICAgICAgICBleHRlbmRlZF9jbGFzcy5SZWdpc3RlckV4dGVuc2lvbihl
eHRlbnNpb24pCi0gICAgcmV0dXJuIHJlc3VsdAotCi0KLV9GQUNUT1JZID0gTWVzc2FnZUZhY3Rv
cnkoKQotCi0KLWRlZiBHZXRNZXNzYWdlcyhmaWxlX3Byb3Rvcyk6Ci0gICIiIkJ1aWxkcyBhIGRp
Y3Rpb25hcnkgb2YgYWxsIHRoZSBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYSBzZXQgb2YgZmlsZXMu
Ci0KLSAgQXJnczoKLSAgICBmaWxlX3Byb3RvczogQSBzZXF1ZW5jZSBvZiBmaWxlIHByb3RvcyB0
byBidWlsZCBtZXNzYWdlcyBvdXQgb2YuCi0KLSAgUmV0dXJuczoKLSAgICBBIGRpY3Rpb25hcnkg
bWFwcGluZyBwcm90byBuYW1lcyB0byB0aGUgbWVzc2FnZSBjbGFzc2VzLiBUaGlzIHdpbGwgaW5j
bHVkZQotICAgIGFueSBkZXBlbmRlbnQgbWVzc2FnZXMgYXMgd2VsbCBhcyBhbnkgbWVzc2FnZXMg
ZGVmaW5lZCBpbiB0aGUgc2FtZSBmaWxlIGFzCi0gICAgYSBzcGVjaWZpZWQgbWVzc2FnZS4KLSAg
IiIiCi0gIGZvciBmaWxlX3Byb3RvIGluIGZpbGVfcHJvdG9zOgotICAgIF9GQUNUT1JZLnBvb2wu
QWRkKGZpbGVfcHJvdG8pCi0gIHJldHVybiBfRkFDVE9SWS5HZXRNZXNzYWdlcyhbZmlsZV9wcm90
by5uYW1lIGZvciBmaWxlX3Byb3RvIGluIGZpbGVfcHJvdG9zXSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9u
L2dvb2dsZS9wcm90b2J1Zi9wcm90b19idWlsZGVyLnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVm
L3Byb3RvX2J1aWxkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNmNhZWQz
ODU5NDdjNWMwYzQ0NmI4NmE0ZDk1OTI1NzFkMzMzMjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3Byb3RvX2J1aWxk
ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotIyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJEeW5hbWlj
IFByb3RvYnVmIGNsYXNzIGNyZWF0b3IuIiIiCi0KLXRyeToKLSAgICBmcm9tIGNvbGxlY3Rpb25z
IGltcG9ydCBPcmRlcmVkRGljdAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZyb20gb3JkZXJl
ZGRpY3QgaW1wb3J0IE9yZGVyZWREaWN0ICAjUFkyNgotaW1wb3J0IGhhc2hsaWIKLWltcG9ydCBv
cwotCi1mcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wYjIKLWZyb20gZ29v
Z2xlLnByb3RvYnVmIGltcG9ydCBtZXNzYWdlX2ZhY3RvcnkKLQotCi1kZWYgX0dldE1lc3NhZ2VG
cm9tRmFjdG9yeShmYWN0b3J5LCBmdWxsX25hbWUpOgotICAiIiJHZXQgYSBwcm90byBjbGFzcyBm
cm9tIHRoZSBNZXNzYWdlRmFjdG9yeSBieSBuYW1lLgotCi0gIEFyZ3M6Ci0gICAgZmFjdG9yeTog
YSBNZXNzYWdlRmFjdG9yeSBpbnN0YW5jZS4KLSAgICBmdWxsX25hbWU6IHN0ciwgdGhlIGZ1bGx5
IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBwcm90byB0eXBlLgotICBSZXR1cm5zOgotICAgIEEgY2xh
c3MsIGZvciB0aGUgdHlwZSBpZGVudGlmaWVkIGJ5IGZ1bGxfbmFtZS4KLSAgUmFpc2VzOgotICAg
IEtleUVycm9yLCBpZiB0aGUgcHJvdG8gaXMgbm90IGZvdW5kIGluIHRoZSBmYWN0b3J5J3MgZGVz
Y3JpcHRvciBwb29sLgotICAiIiIKLSAgcHJvdG9fZGVzY3JpcHRvciA9IGZhY3RvcnkucG9vbC5G
aW5kTWVzc2FnZVR5cGVCeU5hbWUoZnVsbF9uYW1lKQotICBwcm90b19jbHMgPSBmYWN0b3J5Lkdl
dFByb3RvdHlwZShwcm90b19kZXNjcmlwdG9yKQotICByZXR1cm4gcHJvdG9fY2xzCi0KLQotZGVm
IE1ha2VTaW1wbGVQcm90b0NsYXNzKGZpZWxkcywgZnVsbF9uYW1lPU5vbmUsIHBvb2w9Tm9uZSk6
Ci0gICIiIkNyZWF0ZSBhIFByb3RvYnVmIGNsYXNzIHdob3NlIGZpZWxkcyBhcmUgYmFzaWMgdHlw
ZXMuCi0KLSAgTm90ZTogdGhpcyBkb2Vzbid0IHZhbGlkYXRlIGZpZWxkIG5hbWVzIQotCi0gIEFy
Z3M6Ci0gICAgZmllbGRzOiBkaWN0IG9mIHtuYW1lOiBmaWVsZF90eXBlfSBtYXBwaW5ncyBmb3Ig
ZWFjaCBmaWVsZCBpbiB0aGUgcHJvdG8uIElmCi0gICAgICAgIHRoaXMgaXMgYW4gT3JkZXJlZERp
Y3QgdGhlIG9yZGVyIHdpbGwgYmUgbWFpbnRhaW5lZCwgb3RoZXJ3aXNlIHRoZQotICAgICAgICBm
aWVsZHMgd2lsbCBiZSBzb3J0ZWQgYnkgbmFtZS4KLSAgICBmdWxsX25hbWU6IG9wdGlvbmFsIHN0
ciwgdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBwcm90byB0eXBlLgotICAgIHBvb2w6
IG9wdGlvbmFsIERlc2NyaXB0b3JQb29sIGluc3RhbmNlLgotICBSZXR1cm5zOgotICAgIGEgY2xh
c3MsIHRoZSBuZXcgcHJvdG9idWYgY2xhc3Mgd2l0aCBhIEZpbGVEZXNjcmlwdG9yLgotICAiIiIK
LSAgZmFjdG9yeSA9IG1lc3NhZ2VfZmFjdG9yeS5NZXNzYWdlRmFjdG9yeShwb29sPXBvb2wpCi0K
LSAgaWYgZnVsbF9uYW1lIGlzIG5vdCBOb25lOgotICAgIHRyeToKLSAgICAgIHByb3RvX2NscyA9
IF9HZXRNZXNzYWdlRnJvbUZhY3RvcnkoZmFjdG9yeSwgZnVsbF9uYW1lKQotICAgICAgcmV0dXJu
IHByb3RvX2NscwotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICMgVGhlIGZhY3RvcnkncyBE
ZXNjcmlwdG9yUG9vbCBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyBjbGFzcyB5ZXQuCi0gICAgICBw
YXNzCi0KLSAgIyBHZXQgYSBsaXN0IG9mIChuYW1lLCBmaWVsZF90eXBlKSB0dXBsZXMgZnJvbSB0
aGUgZmllbGRzIGRpY3QuIElmIGZpZWxkcyB3YXMKLSAgIyBhbiBPcmRlcmVkRGljdCB3ZSBrZWVw
IHRoZSBvcmRlciwgYnV0IG90aGVyd2lzZSB3ZSBzb3J0IHRoZSBmaWVsZCB0byBlbnN1cmUKLSAg
IyBjb25zaXN0ZW50IG9yZGVyaW5nLgotICBmaWVsZF9pdGVtcyA9IGZpZWxkcy5pdGVtcygpCi0g
IGlmIG5vdCBpc2luc3RhbmNlKGZpZWxkcywgT3JkZXJlZERpY3QpOgotICAgIGZpZWxkX2l0ZW1z
ID0gc29ydGVkKGZpZWxkX2l0ZW1zKQotCi0gICMgVXNlIGEgY29uc2lzdGVudCBmaWxlIG5hbWUg
dGhhdCBpcyB1bmxpa2VseSB0byBjb25mbGljdCB3aXRoIGFueSBpbXBvcnRlZAotICAjIHByb3Rv
IGZpbGVzLgotICBmaWVsZHNfaGFzaCA9IGhhc2hsaWIuc2hhMSgpCi0gIGZvciBmX25hbWUsIGZf
dHlwZSBpbiBmaWVsZF9pdGVtczoKLSAgICBmaWVsZHNfaGFzaC51cGRhdGUoZl9uYW1lLmVuY29k
ZSgndXRmLTgnKSkKLSAgICBmaWVsZHNfaGFzaC51cGRhdGUoc3RyKGZfdHlwZSkuZW5jb2RlKCd1
dGYtOCcpKQotICBwcm90b19maWxlX25hbWUgPSBmaWVsZHNfaGFzaC5oZXhkaWdlc3QoKSArICcu
cHJvdG8nCi0KLSAgIyBJZiB0aGUgcHJvdG8gaXMgYW5vbnltb3VzLCB1c2UgdGhlIHNhbWUgaGFz
aCB0byBuYW1lIGl0LgotICBpZiBmdWxsX25hbWUgaXMgTm9uZToKLSAgICBmdWxsX25hbWUgPSAo
J25ldC5wcm90bzIucHl0aG9uLnB1YmxpYy5wcm90b19idWlsZGVyLkFub255bW91c1Byb3RvXycg
KwotICAgICAgICAgICAgICAgICBmaWVsZHNfaGFzaC5oZXhkaWdlc3QoKSkKLSAgICB0cnk6Ci0g
ICAgICBwcm90b19jbHMgPSBfR2V0TWVzc2FnZUZyb21GYWN0b3J5KGZhY3RvcnksIGZ1bGxfbmFt
ZSkKLSAgICAgIHJldHVybiBwcm90b19jbHMKLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAj
IFRoZSBmYWN0b3J5J3MgRGVzY3JpcHRvclBvb2wgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgY2xh
c3MgeWV0LgotICAgICAgcGFzcwotCi0gICMgVGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBzZWUg
dGhpcyBwcm90bzogYWRkIGEgbmV3IGRlc2NyaXB0b3IgdG8gdGhlIHBvb2wuCi0gIGZhY3Rvcnku
cG9vbC5BZGQoCi0gICAgICBfTWFrZUZpbGVEZXNjcmlwdG9yUHJvdG8ocHJvdG9fZmlsZV9uYW1l
LCBmdWxsX25hbWUsIGZpZWxkX2l0ZW1zKSkKLSAgcmV0dXJuIF9HZXRNZXNzYWdlRnJvbUZhY3Rv
cnkoZmFjdG9yeSwgZnVsbF9uYW1lKQotCi0KLWRlZiBfTWFrZUZpbGVEZXNjcmlwdG9yUHJvdG8o
cHJvdG9fZmlsZV9uYW1lLCBmdWxsX25hbWUsIGZpZWxkX2l0ZW1zKToKLSAgIiIiUG9wdWxhdGUg
RmlsZURlc2NyaXB0b3JQcm90byBmb3IgTWVzc2FnZUZhY3RvcnkncyBEZXNjcmlwdG9yUG9vbC4i
IiIKLSAgcGFja2FnZSwgbmFtZSA9IGZ1bGxfbmFtZS5yc3BsaXQoJy4nLCAxKQotICBmaWxlX3By
b3RvID0gZGVzY3JpcHRvcl9wYjIuRmlsZURlc2NyaXB0b3JQcm90bygpCi0gIGZpbGVfcHJvdG8u
bmFtZSA9IG9zLnBhdGguam9pbihwYWNrYWdlLnJlcGxhY2UoJy4nLCAnLycpLCBwcm90b19maWxl
X25hbWUpCi0gIGZpbGVfcHJvdG8ucGFja2FnZSA9IHBhY2thZ2UKLSAgZGVzY19wcm90byA9IGZp
bGVfcHJvdG8ubWVzc2FnZV90eXBlLmFkZCgpCi0gIGRlc2NfcHJvdG8ubmFtZSA9IG5hbWUKLSAg
Zm9yIGZfbnVtYmVyLCAoZl9uYW1lLCBmX3R5cGUpIGluIGVudW1lcmF0ZShmaWVsZF9pdGVtcywg
MSk6Ci0gICAgZmllbGRfcHJvdG8gPSBkZXNjX3Byb3RvLmZpZWxkLmFkZCgpCi0gICAgZmllbGRf
cHJvdG8ubmFtZSA9IGZfbmFtZQotICAgIGZpZWxkX3Byb3RvLm51bWJlciA9IGZfbnVtYmVyCi0g
ICAgZmllbGRfcHJvdG8ubGFiZWwgPSBkZXNjcmlwdG9yX3BiMi5GaWVsZERlc2NyaXB0b3JQcm90
by5MQUJFTF9PUFRJT05BTAotICAgIGZpZWxkX3Byb3RvLnR5cGUgPSBmX3R5cGUKLSAgcmV0dXJu
IGZpbGVfcHJvdG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9SRUFE
TUUgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2ZDYxY2I0NWJmOWM2MzA2ZjEyNTc1MWQ1NjkxY2M5MThiYWM5YmUzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2ds
ZS9wcm90b2J1Zi9weWV4dC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVRo
aXMgaXMgdGhlICd2MicgQysrIGltcGxlbWVudGF0aW9uIGZvciBweXRob24gcHJvdG8yLgotCi1J
dCBpcyBhY3RpdmUgd2hlbjoKLQotUFJPVE9DT0xfQlVGRkVSU19QWVRIT05fSU1QTEVNRU5UQVRJ
T049Y3BwCi1QUk9UT0NPTF9CVUZGRVJTX1BZVEhPTl9JTVBMRU1FTlRBVElPTl9WRVJTSU9OPTIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9fX2luaXRfXy5weSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTU4NTYxNDEyMjk5NzBkYTAxN2MyZGRkNTY3MTFlNzI2ODczOWZkZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUv
cHJvdG9idWYvcHlleHQvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAK
LXRyeToKLSAgX19pbXBvcnRfXygncGtnX3Jlc291cmNlcycpLmRlY2xhcmVfbmFtZXNwYWNlKF9f
bmFtZV9fKQotZXhjZXB0IEltcG9ydEVycm9yOgotICBfX3BhdGhfXyA9IF9faW1wb3J0X18oJ3Br
Z3V0aWwnKS5leHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhv
bi9nb29nbGUvcHJvdG9idWYvcHlleHQvY3BwX21lc3NhZ2UucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJv
dG9idWYvcHlleHQvY3BwX21lc3NhZ2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGIyMTUyMTFlZTU4MWYyYmZhNGZhOGQwNmNmM2NhM2ZjMjc5NDFmNTYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5
ZXh0L2NwcF9tZXNzYWdlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotIyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0j
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0iIiJQcm90b2NvbCBtZXNzYWdlIGltcGxlbWVudGF0aW9uIGhvb2tzIGZvciBDKysgaW1wbGVt
ZW50YXRpb24uCi0KLUNvbnRhaW5zIGhlbHBlciBmdW5jdGlvbnMgdXNlZCB0byBjcmVhdGUgcHJv
dG9jb2wgbWVzc2FnZSBjbGFzc2VzIGZyb20KLURlc2NyaXB0b3Igb2JqZWN0cyBhdCBydW50aW1l
IGJhY2tlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIEMrKyBBUEkuCi0iIiIKLQotX19hdXRob3Jf
XyA9ICd0aWJlbGxAZ29vZ2xlLmNvbSAoSm9oYW4gVGliZWxsKScKLQotZnJvbSBnb29nbGUucHJv
dG9idWYucHlleHQgaW1wb3J0IF9tZXNzYWdlCi0KLQotY2xhc3MgR2VuZXJhdGVkUHJvdG9jb2xN
ZXNzYWdlVHlwZShfbWVzc2FnZS5NZXNzYWdlTWV0YSk6Ci0KLSAgIiIiTWV0YWNsYXNzIGZvciBw
cm90b2NvbCBtZXNzYWdlIGNsYXNzZXMgY3JlYXRlZCBhdCBydW50aW1lIGZyb20gRGVzY3JpcHRv
cnMuCi0KLSAgVGhlIHByb3RvY29sIGNvbXBpbGVyIGN1cnJlbnRseSB1c2VzIHRoaXMgbWV0YWNs
YXNzIHRvIGNyZWF0ZSBwcm90b2NvbAotICBtZXNzYWdlIGNsYXNzZXMgYXQgcnVudGltZS4gIENs
aWVudHMgY2FuIGFsc28gbWFudWFsbHkgY3JlYXRlIHRoZWlyIG93bgotICBjbGFzc2VzIGF0IHJ1
bnRpbWUsIGFzIGluIHRoaXMgZXhhbXBsZToKLQotICBteWRlc2NyaXB0b3IgPSBEZXNjcmlwdG9y
KC4uLi4uKQotICBjbGFzcyBNeVByb3RvQ2xhc3MoTWVzc2FnZSk6Ci0gICAgX19tZXRhY2xhc3Nf
XyA9IEdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUKLSAgICBERVNDUklQVE9SID0gbXlkZXNj
cmlwdG9yCi0gIG15cHJvdG9faW5zdGFuY2UgPSBNeVByb3RvQ2xhc3MoKQotICBteXByb3RvLmZv
b19maWVsZCA9IDIzCi0gIC4uLgotCi0gIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgbm90IHdvcmsg
Zm9yIG5lc3RlZCB0eXBlcy4gSWYgeW91IHdpc2ggdG8gaW5jbHVkZSB0aGVtLAotICB1c2UgcmVm
bGVjdGlvbi5NYWtlQ2xhc3MoKSBpbnN0ZWFkIG9mIG1hbnVhbGx5IGluc3RhbnRpYXRpbmcgdGhl
IGNsYXNzIGluCi0gIG9yZGVyIHRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgY2xhc3Mgc3RydWN0
dXJlLgotICAiIiIKLQotICAjIE11c3QgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBwcm90b2NvbC1j
b21waWxlciBjb2RlIGluCi0gICMgcHJvdG8yL2NvbXBpbGVyL2ludGVybmFsL2dlbmVyYXRvci4q
LgotICBfREVTQ1JJUFRPUl9LRVkgPSAnREVTQ1JJUFRPUicKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dv
b2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVm
L3B5ZXh0L2Rlc2NyaXB0b3IuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNTU3
NTM4OWE1ZjBjZGZhNTI5MTEzZDY1ODY3YzZiZDJkNmQwYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rl
c2NyaXB0b3IuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNTg0ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IHBldGFyQGdvb2dsZS5jb20gKFBl
dGFyIFBldHJvdikKLQotI2luY2x1ZGUgPFB5dGhvbi5oPgotI2luY2x1ZGUgPGZyYW1lb2JqZWN0
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2Nv
ZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfY29udGFpbmVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yX3Bvb2wuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvcHlleHQvbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9zY29w
ZWRfcHlvYmplY3RfcHRyLmg+Ci0KLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLSAgI2RlZmlu
ZSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUK
LSAgI2RlZmluZSBQeVN0cmluZ19DaGVjayBQeVVuaWNvZGVfQ2hlY2sKLSAgI2RlZmluZSBQeVN0
cmluZ19JbnRlcm5Gcm9tU3RyaW5nIFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nCi0gICNkZWZp
bmUgUHlJbnRfRnJvbUxvbmcgUHlMb25nX0Zyb21Mb25nCi0gICNkZWZpbmUgUHlJbnRfRnJvbVNp
emVfdCBQeUxvbmdfRnJvbVNpemVfdAotICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDMwMDAw
Ci0gICAgI2Vycm9yICJQeXRob24gMy4wIC0gMy4yIGFyZSBub3Qgc3VwcG9ydGVkLiIKLSAgI2Vu
ZGlmCi0gICNkZWZpbmUgUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKG9iLCBjaGFycHAsIHNpemVw
KSBcCi0gICAgKFB5VW5pY29kZV9DaGVjayhvYik/IFwKLSAgICAgICAoKCooY2hhcnBwKSA9IFB5
VW5pY29kZV9Bc1VURjhBbmRTaXplKG9iLCAoc2l6ZXApKSkgPT0gTlVMTD8gLTE6IDApOiBcCi0g
ICAgICAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUob2IsIChjaGFycHApLCAoc2l6ZXApKSkKLSNl
bmRpZgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3Bh
Y2UgcHl0aG9uIHsKLQotLy8gU3RvcmUgaW50ZXJuZWQgZGVzY3JpcHRvcnMsIHNvIHRoYXQgdGhl
IHNhbWUgQysrIGRlc2NyaXB0b3IgeWllbGRzIHRoZSBzYW1lCi0vLyBQeXRob24gb2JqZWN0LiBP
YmplY3RzIGFyZSBub3QgaW1tb3J0YWw6IHRoaXMgbWFwIGRvZXMgbm90IG93biB0aGUKLS8vIHJl
ZmVyZW5jZXMsIGFuZCBpdGVtcyBhcmUgZGVsZXRlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0
byB0aGUgb2JqZWN0IGlzCi0vLyByZWxlYXNlZC4KLS8vIFRoaXMgaXMgZW5vdWdoIHRvIHN1cHBv
cnQgdGhlICJpcyIgb3BlcmF0b3Igb24gbGl2ZSBvYmplY3RzLgotLy8gQWxsIGRlc2NyaXB0b3Jz
IGFyZSBzdG9yZWQgaGVyZS4KLWhhc2hfbWFwPGNvbnN0IHZvaWQqLCBQeU9iamVjdCo+IGludGVy
bmVkX2Rlc2NyaXB0b3JzOwotCi1QeU9iamVjdCogUHlTdHJpbmdfRnJvbUNwcFN0cmluZyhjb25z
dCBzdHJpbmcmIHN0cikgewotICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoc3Ry
LmNfc3RyKCksIHN0ci5zaXplKCkpOwotfQotCi0vLyBDaGVjayB0aGF0IHRoZSBjYWxsaW5nIFB5
dGhvbiBjb2RlIGlzIHRoZSBnbG9iYWwgc2NvcGUgb2YgYSBfcGIyLnB5IG1vZHVsZS4KLS8vIFRo
aXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdXBwb3J0IHRoZSBjdXJyZW50IGNvZGUgZ2VuZXJhdGVk
IGJ5IHRoZSBwcm90bwotLy8gY29tcGlsZXIsIHdoaWNoIGNyZWF0ZXMgZGVzY3JpcHRvcnMsIHRo
ZW4gdXBkYXRlIHNvbWUgcHJvcGVydGllcy4KLS8vIEZvciBleGFtcGxlOgotLy8gICBtZXNzYWdl
X2Rlc2NyaXB0b3IgPSBEZXNjcmlwdG9yKAotLy8gICAgICAgbmFtZT0nTWVzc2FnZScsCi0vLyAg
ICAgICBmaWVsZHMgPSBbRmllbGREZXNjcmlwdG9yKG5hbWU9J2ZpZWxkJyldCi0vLyAgIG1lc3Nh
Z2VfZGVzY3JpcHRvci5maWVsZHNbMF0uY29udGFpbmluZ190eXBlID0gbWVzc2FnZV9kZXNjcmlw
dG9yCi0vLwotLy8gVGhpcyBjb2RlIGlzIHN0aWxsIGV4ZWN1dGVkLCBidXQgdGhlIGRlc2NyaXB0
b3JzIG5vdyBoYXZlIG5vIG90aGVyIHN0b3JhZ2UKLS8vIHRoYW4gdGhlIChjb25zdCkgQysrIHBv
aW50ZXIsIGFuZCBhcmUgaW1tdXRhYmxlLgotLy8gU28gd2UgbGV0IHRoaXMgY29kZSBwYXNzLCBi
eSBzaW1wbHkgaWdub3JpbmcgdGhlIG5ldyB2YWx1ZS4KLS8vCi0vLyBGcm9tIHVzZXIgY29kZSwg
ZGVzY3JpcHRvcnMgc3RpbGwgbG9vayBpbW11dGFibGUuCi0vLwotLy8gVE9ETyhhbWF1cnlmYSk6
IENoYW5nZSB0aGUgcHJvdG8yIGNvbXBpbGVyIHRvIHJlbW92ZSB0aGUgYXNzaWdubWVudHMsIGFu
ZAotLy8gcmVtb3ZlIHRoaXMgaGFjay4KLWJvb2wgX0NhbGxlZEZyb21HZW5lcmF0ZWRGaWxlKGlu
dCBzdGFja2xldmVsKSB7Ci0jaWZuZGVmIFBZUFlfVkVSU0lPTgotICAvLyBUaGlzIGNoZWNrIGlz
IG5vdCBjcml0aWNhbCBhbmQgaXMgc29tZXdoYXQgZGlmZmljdWx0IHRvIGltcGxlbWVudCBjb3Jy
ZWN0bHkKLSAgLy8gaW4gUHlQeS4KLSAgUHlGcmFtZU9iamVjdCogZnJhbWUgPSBQeUV2YWxfR2V0
RnJhbWUoKTsKLSAgaWYgKGZyYW1lID09IE5VTEwpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LSAgd2hpbGUgKHN0YWNrbGV2ZWwtLSA+IDApIHsKLSAgICBmcmFtZSA9IGZyYW1lLT5mX2JhY2s7
Ci0gICAgaWYgKGZyYW1lID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
IH0KLSAgaWYgKGZyYW1lLT5mX2dsb2JhbHMgIT0gZnJhbWUtPmZfbG9jYWxzKSB7Ci0gICAgLy8g
Tm90IGF0IGdsb2JhbCBtb2R1bGUgc2NvcGUKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBp
ZiAoZnJhbWUtPmZfY29kZS0+Y29fZmlsZW5hbWUgPT0gTlVMTCkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICBjaGFyKiBmaWxlbmFtZTsKLSAgUHlfc3NpemVfdCBmaWxlbmFtZV9zaXplOwot
ICBpZiAoUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKGZyYW1lLT5mX2NvZGUtPmNvX2ZpbGVuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlbmFtZSwgJmZpbGVuYW1lX3Np
emUpIDwgMCkgewotICAgIC8vIGZpbGVuYW1lIGlzIG5vdCBhIHN0cmluZy4KLSAgICBQeUVycl9D
bGVhcigpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoZmlsZW5hbWVfc2l6ZSA8IDcp
IHsKLSAgICAvLyBmaWxlbmFtZSBpcyB0b28gc2hvcnQuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0gIGlmIChzdHJjbXAoJmZpbGVuYW1lW2ZpbGVuYW1lX3NpemUgLSA3XSwgIl9wYjIucHkiKSAh
PSAwKSB7Ci0gICAgLy8gRmlsZW5hbWUgaXMgbm90IGVuZGluZyB3aXRoIF9wYjIuCi0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0jZW5kaWYKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIElmIHRoZSBj
YWxsaW5nIGNvZGUgaXMgbm90IGEgX3BiMi5weSBmaWxlLCByYWlzZSBBdHRyaWJ1dGVFcnJvci4K
LS8vIFRvIGJlIHVzZWQgaW4gYXR0cmlidXRlIHNldHRlcnMuCi1zdGF0aWMgaW50IENoZWNrQ2Fs
bGVkRnJvbUdlbmVyYXRlZEZpbGUoY29uc3QgY2hhciogYXR0cl9uYW1lKSB7Ci0gIGlmIChfQ2Fs
bGVkRnJvbUdlbmVyYXRlZEZpbGUoMCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBQeUVycl9G
b3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCi0gICAgICAgICAgICAgICAiYXR0cmlidXRlIGlz
IG5vdCB3cml0YWJsZTogJXMiLCBhdHRyX25hbWUpOwotICByZXR1cm4gLTE7Ci19Ci0KLQotI2lm
bmRlZiBQeVZhck9iamVjdF9IRUFEX0lOSVQKLSNkZWZpbmUgUHlWYXJPYmplY3RfSEVBRF9JTklU
KHR5cGUsIHNpemUpIFB5T2JqZWN0X0hFQURfSU5JVCh0eXBlKSBzaXplLAotI2VuZGlmCi0jaWZu
ZGVmIFB5X1RZUEUKLSNkZWZpbmUgUHlfVFlQRShvYikgKCgoUHlPYmplY3QqKShvYikpLT5vYl90
eXBlKQotI2VuZGlmCi0KLQotLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgZGVzY3JpcHRvciBvYmpl
Y3RzLgotCi0vLyBBIHNldCBvZiB0ZW1wbGF0ZXMgdG8gcmV0cmlldmUgdGhlIEMrKyBGaWxlRGVz
Y3JpcHRvciBvZiBhbnkgZGVzY3JpcHRvci4KLXRlbXBsYXRlPGNsYXNzIERlc2NyaXB0b3JDbGFz
cz4KLWNvbnN0IEZpbGVEZXNjcmlwdG9yKiBHZXRGaWxlRGVzY3JpcHRvcihjb25zdCBEZXNjcmlw
dG9yQ2xhc3MqIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2NyaXB0b3ItPmZpbGUoKTsKLX0K
LXRlbXBsYXRlPD4KLWNvbnN0IEZpbGVEZXNjcmlwdG9yKiBHZXRGaWxlRGVzY3JpcHRvcihjb25z
dCBGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICByZXR1cm4gZGVzY3JpcHRvcjsKLX0K
LXRlbXBsYXRlPD4KLWNvbnN0IEZpbGVEZXNjcmlwdG9yKiBHZXRGaWxlRGVzY3JpcHRvcihjb25z
dCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9y
LT50eXBlKCktPmZpbGUoKTsKLX0KLXRlbXBsYXRlPD4KLWNvbnN0IEZpbGVEZXNjcmlwdG9yKiBH
ZXRGaWxlRGVzY3JpcHRvcihjb25zdCBPbmVvZkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAg
cmV0dXJuIGRlc2NyaXB0b3ItPmNvbnRhaW5pbmdfdHlwZSgpLT5maWxlKCk7Ci19Ci0KLS8vIENv
bnZlcnRzIG9wdGlvbnMgaW50byBhIFB5dGhvbiBwcm90b2J1ZiwgYW5kIGNhY2hlIHRoZSByZXN1
bHQuCi0vLwotLy8gVGhpcyBpcyBhIGJpdCB0cmlja3kgYmVjYXVzZSBvcHRpb25zIGNhbiBjb250
YWluIGV4dGVuc2lvbiBmaWVsZHMgZGVmaW5lZCBpbgotLy8gdGhlIHNhbWUgcHJvdG8gZmlsZS4g
SW4gdGhpcyBjYXNlIHRoZSBvcHRpb25zIHBhcnNlZCBmcm9tIHRoZSBzZXJpYWxpemVkX3BiCi0v
LyBoYXZlIHVua293biBmaWVsZHMsIGFuZCB3ZSBuZWVkIHRvIHBhcnNlIHRoZW0gYWdhaW4uCi0v
LwotLy8gQWx3YXlzIHJldHVybnMgYSBuZXcgcmVmZXJlbmNlLgotdGVtcGxhdGU8Y2xhc3MgRGVz
Y3JpcHRvckNsYXNzPgotc3RhdGljIFB5T2JqZWN0KiBHZXRPckJ1aWxkT3B0aW9ucyhjb25zdCBE
ZXNjcmlwdG9yQ2xhc3MgKmRlc2NyaXB0b3IpIHsKLSAgLy8gT3B0aW9ucyAoYW5kIHRoZWlyIGV4
dGVuc2lvbnMpIGFyZSBjb21wbGV0ZWx5IHJlc29sdmVkIGluIHRoZSBwcm90byBmaWxlCi0gIC8v
IGNvbnRhaW5pbmcgdGhlIGRlc2NyaXB0b3IuCi0gIFB5RGVzY3JpcHRvclBvb2wqIHBvb2wgPSBH
ZXREZXNjcmlwdG9yUG9vbF9Gcm9tUG9vbCgKLSAgICAgIEdldEZpbGVEZXNjcmlwdG9yKGRlc2Ny
aXB0b3IpLT5wb29sKCkpOwotCi0gIGhhc2hfbWFwPGNvbnN0IHZvaWQqLCBQeU9iamVjdCo+KiBk
ZXNjcmlwdG9yX29wdGlvbnMgPQotICAgICAgcG9vbC0+ZGVzY3JpcHRvcl9vcHRpb25zOwotICAv
LyBGaXJzdCBzZWFyY2ggaW4gdGhlIGNhY2hlLgotICBpZiAoZGVzY3JpcHRvcl9vcHRpb25zLT5m
aW5kKGRlc2NyaXB0b3IpICE9IGRlc2NyaXB0b3Jfb3B0aW9ucy0+ZW5kKCkpIHsKLSAgICBQeU9i
amVjdCAqdmFsdWUgPSAoKmRlc2NyaXB0b3Jfb3B0aW9ucylbZGVzY3JpcHRvcl07Ci0gICAgUHlf
SU5DUkVGKHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICAvLyBCdWlsZCB0aGUg
T3B0aW9ucyBvYmplY3Q6IGdldCBpdHMgUHl0aG9uIGNsYXNzLCBhbmQgbWFrZSBhIGNvcHkgb2Yg
dGhlIEMrKwotICAvLyByZWFkLW9ubHkgaW5zdGFuY2UuCi0gIGNvbnN0IE1lc3NhZ2UmIG9wdGlv
bnMoZGVzY3JpcHRvci0+b3B0aW9ucygpKTsKLSAgY29uc3QgRGVzY3JpcHRvciAqbWVzc2FnZV90
eXBlID0gb3B0aW9ucy5HZXREZXNjcmlwdG9yKCk7Ci0gIENNZXNzYWdlQ2xhc3MqIG1lc3NhZ2Vf
Y2xhc3MoCi0gICAgICBjZGVzY3JpcHRvcl9wb29sOjpHZXRNZXNzYWdlQ2xhc3MocG9vbCwgbWVz
c2FnZV90eXBlKSk7Ci0gIGlmIChtZXNzYWdlX2NsYXNzID09IE5VTEwpIHsKLSAgICAvLyBUaGUg
T3B0aW9ucyBtZXNzYWdlIHdhcyBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgRGVzY3JpcHRvclBv
b2wuCi0gICAgLy8gSW4gdGhpcyBjYXNlLCB0aGVyZSBjYW5ub3QgYmUgZXh0ZW5zaW9ucyB0byB0
aGVzZSBvcHRpb25zLCBhbmQgd2UgY2FuCi0gICAgLy8gdHJ5IHRvIHVzZSB0aGUgYmFzaWMgcG9v
bCBpbnN0ZWFkLgotICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgbWVzc2FnZV9jbGFzcyA9IGNkZXNj
cmlwdG9yX3Bvb2w6OkdldE1lc3NhZ2VDbGFzcygKLSAgICAgIEdldERlZmF1bHREZXNjcmlwdG9y
UG9vbCgpLCBtZXNzYWdlX3R5cGUpOwotICB9Ci0gIGlmIChtZXNzYWdlX2NsYXNzID09IE5VTEwp
IHsKLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiQ291bGQgbm90IHJldHJpZXZl
IGNsYXNzIGZvciBPcHRpb25zOiAlcyIsCi0gICAgICAgICAgICAgICAgIG1lc3NhZ2VfdHlwZS0+
ZnVsbF9uYW1lKCkuY19zdHIoKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgU2NvcGVkUHlP
YmplY3RQdHIgdmFsdWUoCi0gICAgICBQeUV2YWxfQ2FsbE9iamVjdChtZXNzYWdlX2NsYXNzLT5B
c1B5T2JqZWN0KCksIE5VTEwpKTsKLSAgaWYgKHZhbHVlID09IE5VTEwpIHsKLSAgICByZXR1cm4g
TlVMTDsKLSAgfQotICBpZiAoIVB5T2JqZWN0X1R5cGVDaGVjayh2YWx1ZS5nZXQoKSwgJkNNZXNz
YWdlX1R5cGUpKSB7Ci0gICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiSW52YWxp
ZCBjbGFzcyBmb3IgJXM6ICVzIiwKLSAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3R5cGUtPmZ1
bGxfbmFtZSgpLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgUHlfVFlQRSh2YWx1ZS5nZXQo
KSktPnRwX25hbWUpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgQ01lc3NhZ2UqIGNtc2cg
PSByZWludGVycHJldF9jYXN0PENNZXNzYWdlKj4odmFsdWUuZ2V0KCkpOwotCi0gIGNvbnN0IFJl
ZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBvcHRpb25zLkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3Qg
VW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcyhyZWZsZWN0aW9uLT5HZXRVbmtub3duRmll
bGRzKG9wdGlvbnMpKTsKLSAgaWYgKHVua25vd25fZmllbGRzLmVtcHR5KCkpIHsKLSAgICBjbXNn
LT5tZXNzYWdlLT5Db3B5RnJvbShvcHRpb25zKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBSZXBhcnNl
IG9wdGlvbnMgc3RyaW5nISAgWFhYIGNhbGwgY21lc3NhZ2U6Ok1lcmdlRnJvbVN0cmluZwotICAg
IHN0cmluZyBzZXJpYWxpemVkOwotICAgIG9wdGlvbnMuU2VyaWFsaXplVG9TdHJpbmcoJnNlcmlh
bGl6ZWQpOwotICAgIGlvOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KAotICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4oc2VyaWFsaXplZC5jX3N0cigpKSwgc2VyaWFsaXplZC5z
aXplKCkpOwotICAgIGlucHV0LlNldEV4dGVuc2lvblJlZ2lzdHJ5KHBvb2wtPnBvb2wsIHBvb2wt
Pm1lc3NhZ2VfZmFjdG9yeSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gY21zZy0+bWVzc2FnZS0+TWVy
Z2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKCZpbnB1dCk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0g
ICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkVycm9yIHBhcnNpbmcgT3B0aW9u
cyBtZXNzYWdlIik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gIH0KLQotICAvLyBDYWNo
ZSB0aGUgcmVzdWx0LgotICBQeV9JTkNSRUYodmFsdWUuZ2V0KCkpOwotICAoKnBvb2wtPmRlc2Ny
aXB0b3Jfb3B0aW9ucylbZGVzY3JpcHRvcl0gPSB2YWx1ZS5nZXQoKTsKLQotICByZXR1cm4gdmFs
dWUucmVsZWFzZSgpOwotfQotCi0vLyBDb3B5IHRoZSBDKysgZGVzY3JpcHRvciB0byBhIFB5dGhv
biBtZXNzYWdlLgotLy8gVGhlIFB5dGhvbiBtZXNzYWdlIGlzIGFuIGluc3RhbmNlIG9mIGRlc2Ny
aXB0b3JfcGIyLkRlc2NyaXB0b3JQcm90bwotLy8gb3Igc2ltaWxhci4KLXRlbXBsYXRlPGNsYXNz
IERlc2NyaXB0b3JQcm90b0NsYXNzLCBjbGFzcyBEZXNjcmlwdG9yQ2xhc3M+Ci1zdGF0aWMgUHlP
YmplY3QqIENvcHlUb1B5dGhvblByb3RvKGNvbnN0IERlc2NyaXB0b3JDbGFzcyAqZGVzY3JpcHRv
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRhcmdldCkg
ewotICBjb25zdCBEZXNjcmlwdG9yKiBzZWxmX2Rlc2NyaXB0b3IgPQotICAgICAgRGVzY3JpcHRv
clByb3RvQ2xhc3M6OmRlZmF1bHRfaW5zdGFuY2UoKS5HZXREZXNjcmlwdG9yKCk7Ci0gIENNZXNz
YWdlKiBtZXNzYWdlID0gcmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+KHRhcmdldCk7Ci0gIGlm
ICghUHlPYmplY3RfVHlwZUNoZWNrKHRhcmdldCwgJkNNZXNzYWdlX1R5cGUpIHx8Ci0gICAgICBt
ZXNzYWdlLT5tZXNzYWdlLT5HZXREZXNjcmlwdG9yKCkgIT0gc2VsZl9kZXNjcmlwdG9yKSB7Ci0g
ICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIk5vdCBhICVzIG1lc3NhZ2UiLAotICAg
ICAgICAgICAgICAgICBzZWxmX2Rlc2NyaXB0b3ItPmZ1bGxfbmFtZSgpLmNfc3RyKCkpOwotICAg
IHJldHVybiBOVUxMOwotICB9Ci0gIGNtZXNzYWdlOjpBc3N1cmVXcml0YWJsZShtZXNzYWdlKTsK
LSAgRGVzY3JpcHRvclByb3RvQ2xhc3MqIGRlc2NyaXB0b3JfbWVzc2FnZSA9Ci0gICAgICBzdGF0
aWNfY2FzdDxEZXNjcmlwdG9yUHJvdG9DbGFzcyo+KG1lc3NhZ2UtPm1lc3NhZ2UpOwotICBkZXNj
cmlwdG9yLT5Db3B5VG8oZGVzY3JpcHRvcl9tZXNzYWdlKTsKLSAgUHlfUkVUVVJOX05PTkU7Ci19
Ci0KLS8vIEFsbCBEZXNjcmlwdG9ycyBjbGFzc2VzIHNoYXJlIHRoZSBzYW1lIG1lbW9yeSBsYXlv
dXQuCi10eXBlZGVmIHN0cnVjdCBQeUJhc2VEZXNjcmlwdG9yIHsKLSAgUHlPYmplY3RfSEVBRAot
Ci0gIC8vIFBvaW50ZXIgdG8gdGhlIEMrKyBwcm90bzIgZGVzY3JpcHRvci4KLSAgLy8gTGlrZSBh
bGwgZGVzY3JpcHRvcnMsIGl0IGlzIG93bmVkIGJ5IHRoZSBnbG9iYWwgRGVzY3JpcHRvclBvb2wu
Ci0gIGNvbnN0IHZvaWQqIGRlc2NyaXB0b3I7Ci0KLSAgLy8gT3duZWQgcmVmZXJlbmNlIHRvIHRo
ZSBEZXNjcmlwdG9yUG9vbCwgdG8gZW5zdXJlIGl0IGlzIGtlcHQgYWxpdmUuCi0gIFB5RGVzY3Jp
cHRvclBvb2wqIHBvb2w7Ci19IFB5QmFzZURlc2NyaXB0b3I7Ci0KLQotLy8gRmlsZURlc2NyaXB0
b3Igc3RydWN0dXJlICJpbmhlcml0cyIgZnJvbSB0aGUgYmFzZSBkZXNjcmlwdG9yLgotdHlwZWRl
ZiBzdHJ1Y3QgUHlGaWxlRGVzY3JpcHRvciB7Ci0gIFB5QmFzZURlc2NyaXB0b3IgYmFzZTsKLQot
ICAvLyBUaGUgY2FjaGVkIHZlcnNpb24gb2Ygc2VyaWFsaXplZCBwYi4gRWl0aGVyIE5VTEwsIG9y
IGEgQnl0ZXMgc3RyaW5nLgotICAvLyBXZSBvd24gdGhlIHJlZmVyZW5jZS4KLSAgUHlPYmplY3Qg
KnNlcmlhbGl6ZWRfcGI7Ci19IFB5RmlsZURlc2NyaXB0b3I7Ci0KLQotbmFtZXNwYWNlIGRlc2Ny
aXB0b3IgewotCi0vLyBDcmVhdGVzIG9yIHJldHJpZXZlIGEgUHl0aG9uIGRlc2NyaXB0b3Igb2Yg
dGhlIHNwZWNpZmllZCB0eXBlLgotLy8gT2JqZWN0cyBhcmUgaW50ZXJuZWQ6IHRoZSBzYW1lIGRl
c2NyaXB0b3Igd2lsbCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IGlmIGl0Ci0vLyB3YXMga2VwdCBh
bGl2ZS4KLS8vICd3YXNfY3JlYXRlZCcgaXMgYW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIGJvb2ws
IGFuZCBpcyBzZXQgdG8gdHJ1ZSBpZiBhIG5ldwotLy8gb2JqZWN0IHdhcyBhbGxvY2F0ZWQuCi0v
LyBBbHdheXMgcmV0dXJuIGEgbmV3IHJlZmVyZW5jZS4KLXRlbXBsYXRlPGNsYXNzIERlc2NyaXB0
b3JDbGFzcz4KLVB5T2JqZWN0KiBOZXdJbnRlcm5lZERlc2NyaXB0b3IoUHlUeXBlT2JqZWN0KiB0
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9yQ2xh
c3MqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHdh
c19jcmVhdGVkKSB7Ci0gIGlmICh3YXNfY3JlYXRlZCkgewotICAgICp3YXNfY3JlYXRlZCA9IGZh
bHNlOwotICB9Ci0gIGlmIChkZXNjcmlwdG9yID09IE5VTEwpIHsKLSAgICBQeUVycl9CYWRJbnRl
cm5hbENhbGwoKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8vIFNlZSBpZiB0aGUgb2Jq
ZWN0IGlzIGluIHRoZSBtYXAgb2YgaW50ZXJuZWQgZGVzY3JpcHRvcnMKLSAgaGFzaF9tYXA8Y29u
c3Qgdm9pZCosIFB5T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0KLSAgICAgIGludGVybmVkX2Rlc2Ny
aXB0b3JzLmZpbmQoZGVzY3JpcHRvcik7Ci0gIGlmIChpdCAhPSBpbnRlcm5lZF9kZXNjcmlwdG9y
cy5lbmQoKSkgewotICAgIEdPT0dMRV9EQ0hFQ0soUHlfVFlQRShpdC0+c2Vjb25kKSA9PSB0eXBl
KTsKLSAgICBQeV9JTkNSRUYoaXQtPnNlY29uZCk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci0g
IH0KLSAgLy8gQ3JlYXRlIGEgbmV3IGRlc2NyaXB0b3Igb2JqZWN0Ci0gIFB5QmFzZURlc2NyaXB0
b3IqIHB5X2Rlc2NyaXB0b3IgPSBQeU9iamVjdF9OZXcoCi0gICAgICBQeUJhc2VEZXNjcmlwdG9y
LCB0eXBlKTsKLSAgaWYgKHB5X2Rlc2NyaXB0b3IgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxM
OwotICB9Ci0gIHB5X2Rlc2NyaXB0b3ItPmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwotCi0gIC8v
IGFuZCBjYWNoZSBpdC4KLSAgaW50ZXJuZWRfZGVzY3JpcHRvcnMuaW5zZXJ0KAotICAgICAgc3Rk
OjptYWtlX3BhaXIoZGVzY3JpcHRvciwgcmVpbnRlcnByZXRfY2FzdDxQeU9iamVjdCo+KHB5X2Rl
c2NyaXB0b3IpKSk7Ci0KLSAgLy8gRW5zdXJlcyB0aGF0IHRoZSBEZXNjcmlwdG9yUG9vbCBzdGF5
cyBhbGl2ZS4KLSAgUHlEZXNjcmlwdG9yUG9vbCogcG9vbCA9IEdldERlc2NyaXB0b3JQb29sX0Zy
b21Qb29sKAotICAgICAgR2V0RmlsZURlc2NyaXB0b3IoZGVzY3JpcHRvciktPnBvb2woKSk7Ci0g
IGlmIChwb29sID09IE5VTEwpIHsKLSAgICAvLyBEb24ndCBERUNSRUYsIHRoZSBvYmplY3QgaXMg
bm90IGZ1bGx5IGluaXRpYWxpemVkLgotICAgIFB5T2JqZWN0X0RlbChweV9kZXNjcmlwdG9yKTsK
LSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBQeV9JTkNSRUYocG9vbCk7Ci0gIHB5X2Rlc2NyaXB0
b3ItPnBvb2wgPSBwb29sOwotCi0gIGlmICh3YXNfY3JlYXRlZCkgewotICAgICp3YXNfY3JlYXRl
ZCA9IHRydWU7Ci0gIH0KLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihweV9k
ZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgRGVhbGxvYyhQeUJhc2VEZXNjcmlwdG9yKiBz
ZWxmKSB7Ci0gIC8vIFJlbW92ZSBmcm9tIGludGVybmVkIGRpY3Rpb25hcnkKLSAgaW50ZXJuZWRf
ZGVzY3JpcHRvcnMuZXJhc2Uoc2VsZi0+ZGVzY3JpcHRvcik7Ci0gIFB5X0NMRUFSKHNlbGYtPnBv
b2wpOwotICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3Qq
PihzZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeUdldFNldERlZiBHZXR0ZXJzW10gPSB7Ci0gIHtOVUxM
fQotfTsKLQotUHlUeXBlT2JqZWN0IFB5QmFzZURlc2NyaXB0b3JfVHlwZSA9IHsKLSAgUHlWYXJP
YmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKLSAgRlVMTF9NT0RVTEVfTkFNRSAiLkRl
c2NyaXB0b3JCYXNlIiwgICAvLyB0cF9uYW1lCi0gIHNpemVvZihQeUJhc2VEZXNjcmlwdG9yKSwg
ICAgICAgICAgICAgLy8gdHBfYmFzaWNzaXplCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdHBfaXRlbXNpemUKLSAgKGRlc3RydWN0b3IpRGVhbGxvYywgICAgICAg
ICAgICAgICAgICAvLyB0cF9kZWFsbG9jCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdHBfcHJpbnQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF9nZXRhdHRyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHBfc2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRwX2NvbXBhcmUKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0cF9yZXByCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
YXNfbnVtYmVyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
YXNfc2VxdWVuY2UKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
cF9hc19tYXBwaW5nCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dHBfaGFzaAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2Nh
bGwKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9zdHIKLSAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9nZXRhdHRybwotICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3NldGF0dHJvCi0gIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfYXNfYnVmZmVyCi0gIFB5
X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgLy8gdHBfZmxhZ3MKLSAgIkRlc2Ny
aXB0b3JzIGJhc2UgY2xhc3MiLCAgICAgICAgICAgICAvLyB0cF9kb2MKLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF90cmF2ZXJzZQotICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2NsZWFyCi0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHBfcmljaGNvbXBhcmUKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF93ZWFrbGlzdG9mZnNldAotICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2l0ZXIKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVybmV4dAotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX21ldGhvZHMKLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0cF9tZW1iZXJzCi0gIEdldHRlcnMsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfZ2V0c2V0Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgZGVz
Y3JpcHRvcgotCi1jb25zdCB2b2lkKiBQeURlc2NyaXB0b3JfQXNWb2lkUHRyKFB5T2JqZWN0KiBv
YmopIHsKLSAgaWYgKCFQeU9iamVjdF9UeXBlQ2hlY2sob2JqLCAmZGVzY3JpcHRvcjo6UHlCYXNl
RGVzY3JpcHRvcl9UeXBlKSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is
ICJOb3QgYSBCYXNlRGVzY3JpcHRvciIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVy
biByZWludGVycHJldF9jYXN0PFB5QmFzZURlc2NyaXB0b3IqPihvYmopLT5kZXNjcmlwdG9yOwot
fQotCi1uYW1lc3BhY2UgbWVzc2FnZV9kZXNjcmlwdG9yIHsKLQotLy8gVW5jaGVja2VkIGFjY2Vz
c29yIHRvIHRoZSBDKysgcG9pbnRlci4KLXN0YXRpYyBjb25zdCBEZXNjcmlwdG9yKiBfR2V0RGVz
Y3JpcHRvcihQeUJhc2VEZXNjcmlwdG9yKiBzZWxmKSB7Ci0gIHJldHVybiByZWludGVycHJldF9j
YXN0PGNvbnN0IERlc2NyaXB0b3IqPihzZWxmLT5kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIFB5
T2JqZWN0KiBHZXROYW1lKFB5QmFzZURlc2NyaXB0b3IqIHNlbGYsIHZvaWQgKmNsb3N1cmUpIHsK
LSAgcmV0dXJuIFB5U3RyaW5nX0Zyb21DcHBTdHJpbmcoX0dldERlc2NyaXB0b3Ioc2VsZiktPm5h
bWUoKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0RnVsbE5hbWUoUHlCYXNlRGVzY3JpcHRv
ciogc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gUHlTdHJpbmdfRnJvbUNwcFN0cmlu
ZyhfR2V0RGVzY3JpcHRvcihzZWxmKS0+ZnVsbF9uYW1lKCkpOwotfQotCi1zdGF0aWMgUHlPYmpl
Y3QqIEdldEZpbGUoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICBy
ZXR1cm4gUHlGaWxlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihfR2V0RGVzY3JpcHRvcihzZWxm
KS0+ZmlsZSgpKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBHZXRDb25jcmV0ZUNsYXNzKFB5QmFz
ZURlc2NyaXB0b3IqIHNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgLy8gUmV0dW5zIHRoZSBjYW5v
bmljYWwgY2xhc3MgZm9yIHRoZSBnaXZlbiBkZXNjcmlwdG9yLgotICAvLyBUaGlzIGlzIHRoZSBj
bGFzcyB0aGF0IHdhcyByZWdpc3RlcmVkIHdpdGggdGhlIHByaW1hcnkgZGVzY3JpcHRvciBwb29s
Ci0gIC8vIHdoaWNoIGNvbnRhaW5zIHRoaXMgZGVzY3JpcHRvci4KLSAgLy8gVGhpcyBtaWdodCBu
b3QgYmUgdGhlIG9uZSB5b3UgZXhwZWN0ISBGb3IgZXhhbXBsZSB0aGUgcmV0dXJuZWQgb2JqZWN0
IGRvZXMKLSAgLy8gbm90IGtub3cgYWJvdXQgZXh0ZW5zaW9ucyBkZWZpbmVkIGluIGEgY3VzdG9t
IHBvb2wuCi0gIENNZXNzYWdlQ2xhc3MqIGNvbmNyZXRlX2NsYXNzKGNkZXNjcmlwdG9yX3Bvb2w6
OkdldE1lc3NhZ2VDbGFzcygKLSAgICAgIEdldERlc2NyaXB0b3JQb29sX0Zyb21Qb29sKF9HZXRE
ZXNjcmlwdG9yKHNlbGYpLT5maWxlKCktPnBvb2woKSksCi0gICAgICBfR2V0RGVzY3JpcHRvcihz
ZWxmKSkpOwotICBQeV9YSU5DUkVGKGNvbmNyZXRlX2NsYXNzKTsKLSAgcmV0dXJuIGNvbmNyZXRl
X2NsYXNzLT5Bc1B5T2JqZWN0KCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0RmllbGRzQnlO
YW1lKFB5QmFzZURlc2NyaXB0b3IqIHNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJuIE5l
d01lc3NhZ2VGaWVsZHNCeU5hbWUoX0dldERlc2NyaXB0b3Ioc2VsZikpOwotfQotCi1zdGF0aWMg
UHlPYmplY3QqIEdldEZpZWxkc0J5Q2FtZWxjYXNlTmFtZShQeUJhc2VEZXNjcmlwdG9yKiBzZWxm
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3Vy
ZSkgewotICByZXR1cm4gTmV3TWVzc2FnZUZpZWxkc0J5Q2FtZWxjYXNlTmFtZShfR2V0RGVzY3Jp
cHRvcihzZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0RmllbGRzQnlOdW1iZXIoUHlC
YXNlRGVzY3JpcHRvciogc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gTmV3TWVzc2Fn
ZUZpZWxkc0J5TnVtYmVyKF9HZXREZXNjcmlwdG9yKHNlbGYpKTsKLX0KLQotc3RhdGljIFB5T2Jq
ZWN0KiBHZXRGaWVsZHNTZXEoUHlCYXNlRGVzY3JpcHRvciogc2VsZiwgdm9pZCAqY2xvc3VyZSkg
ewotICByZXR1cm4gTmV3TWVzc2FnZUZpZWxkc1NlcShfR2V0RGVzY3JpcHRvcihzZWxmKSk7Ci19
Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0TmVzdGVkVHlwZXNCeU5hbWUoUHlCYXNlRGVzY3JpcHRv
ciogc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gTmV3TWVzc2FnZU5lc3RlZFR5cGVz
QnlOYW1lKF9HZXREZXNjcmlwdG9yKHNlbGYpKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBHZXRO
ZXN0ZWRUeXBlc1NlcShQeUJhc2VEZXNjcmlwdG9yKiBzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0g
IHJldHVybiBOZXdNZXNzYWdlTmVzdGVkVHlwZXNTZXEoX0dldERlc2NyaXB0b3Ioc2VsZikpOwot
fQotCi1zdGF0aWMgUHlPYmplY3QqIEdldEV4dGVuc2lvbnNCeU5hbWUoUHlCYXNlRGVzY3JpcHRv
ciogc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gTmV3TWVzc2FnZUV4dGVuc2lvbnNC
eU5hbWUoX0dldERlc2NyaXB0b3Ioc2VsZikpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldEV4
dGVuc2lvbnMoUHlCYXNlRGVzY3JpcHRvciogc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1
cm4gTmV3TWVzc2FnZUV4dGVuc2lvbnNTZXEoX0dldERlc2NyaXB0b3Ioc2VsZikpOwotfQotCi1z
dGF0aWMgUHlPYmplY3QqIEdldEVudW1zU2VxKFB5QmFzZURlc2NyaXB0b3IqIHNlbGYsIHZvaWQg
KmNsb3N1cmUpIHsKLSAgcmV0dXJuIE5ld01lc3NhZ2VFbnVtc1NlcShfR2V0RGVzY3JpcHRvcihz
ZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0RW51bVR5cGVzQnlOYW1lKFB5QmFzZURl
c2NyaXB0b3IqIHNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJuIE5ld01lc3NhZ2VFbnVt
c0J5TmFtZShfR2V0RGVzY3JpcHRvcihzZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0
RW51bVZhbHVlc0J5TmFtZShQeUJhc2VEZXNjcmlwdG9yKiBzZWxmLCB2b2lkICpjbG9zdXJlKSB7
Ci0gIHJldHVybiBOZXdNZXNzYWdlRW51bVZhbHVlc0J5TmFtZShfR2V0RGVzY3JpcHRvcihzZWxm
KSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0T25lb2ZzQnlOYW1lKFB5QmFzZURlc2NyaXB0
b3IqIHNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJuIE5ld01lc3NhZ2VPbmVvZnNCeU5h
bWUoX0dldERlc2NyaXB0b3Ioc2VsZikpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldE9uZW9m
c1NlcShQeUJhc2VEZXNjcmlwdG9yKiBzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBO
ZXdNZXNzYWdlT25lb2ZzU2VxKF9HZXREZXNjcmlwdG9yKHNlbGYpKTsKLX0KLQotc3RhdGljIFB5
T2JqZWN0KiBJc0V4dGVuZGFibGUoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3Vy
ZSkgewotICBpZiAoX0dldERlc2NyaXB0b3Ioc2VsZiktPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgp
ID4gMCkgewotICAgIFB5X1JFVFVSTl9UUlVFOwotICB9IGVsc2UgewotICAgIFB5X1JFVFVSTl9G
QUxTRTsKLSAgfQotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldEV4dGVuc2lvblJhbmdlcyhQeUJh
c2VEZXNjcmlwdG9yICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIGNvbnN0IERlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IgPSBfR2V0RGVzY3JpcHRvcihzZWxmKTsKLSAgUHlPYmplY3QqIHJhbmdlX2xp
c3QgPSBQeUxpc3RfTmV3KGRlc2NyaXB0b3ItPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgpKTsKLQot
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgp
OyBpKyspIHsKLSAgICBjb25zdCBEZXNjcmlwdG9yOjpFeHRlbnNpb25SYW5nZSogcmFuZ2UgPSBk
ZXNjcmlwdG9yLT5leHRlbnNpb25fcmFuZ2UoaSk7Ci0gICAgUHlPYmplY3QqIHN0YXJ0ID0gUHlJ
bnRfRnJvbUxvbmcocmFuZ2UtPnN0YXJ0KTsKLSAgICBQeU9iamVjdCogZW5kID0gUHlJbnRfRnJv
bUxvbmcocmFuZ2UtPmVuZCk7Ci0gICAgUHlMaXN0X1NldEl0ZW0ocmFuZ2VfbGlzdCwgaSwgUHlU
dXBsZV9QYWNrKDIsIHN0YXJ0LCBlbmQpKTsKLSAgfQotCi0gIHJldHVybiByYW5nZV9saXN0Owot
fQotCi1zdGF0aWMgUHlPYmplY3QqIEdldENvbnRhaW5pbmdUeXBlKFB5QmFzZURlc2NyaXB0b3Ig
KnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgY29uc3QgRGVzY3JpcHRvciogY29udGFpbmluZ190
eXBlID0KLSAgICAgIF9HZXREZXNjcmlwdG9yKHNlbGYpLT5jb250YWluaW5nX3R5cGUoKTsKLSAg
aWYgKGNvbnRhaW5pbmdfdHlwZSkgewotICAgIHJldHVybiBQeU1lc3NhZ2VEZXNjcmlwdG9yX0Zy
b21EZXNjcmlwdG9yKGNvbnRhaW5pbmdfdHlwZSk7Ci0gIH0gZWxzZSB7Ci0gICAgUHlfUkVUVVJO
X05PTkU7Ci0gIH0KLX0KLQotc3RhdGljIGludCBTZXRDb250YWluaW5nVHlwZShQeUJhc2VEZXNj
cmlwdG9yICpzZWxmLCBQeU9iamVjdCAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJuIENoZWNrQ2FsbGVkRnJvbUdlbmVyYXRlZEZp
bGUoImNvbnRhaW5pbmdfdHlwZSIpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldEhhc09wdGlv
bnMoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICBjb25zdCBNZXNz
YWdlT3B0aW9ucyYgb3B0aW9ucyhfR2V0RGVzY3JpcHRvcihzZWxmKS0+b3B0aW9ucygpKTsKLSAg
aWYgKCZvcHRpb25zICE9ICZNZXNzYWdlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpKSB7Ci0g
ICAgUHlfUkVUVVJOX1RSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgUHlfUkVUVVJOX0ZBTFNFOwotICB9
Ci19Ci1zdGF0aWMgaW50IFNldEhhc09wdGlvbnMoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgUHlP
YmplY3QgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJl
KSB7Ci0gIHJldHVybiBDaGVja0NhbGxlZEZyb21HZW5lcmF0ZWRGaWxlKCJoYXNfb3B0aW9ucyIp
OwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldE9wdGlvbnMoUHlCYXNlRGVzY3JpcHRvciAqc2Vs
ZikgewotICByZXR1cm4gR2V0T3JCdWlsZE9wdGlvbnMoX0dldERlc2NyaXB0b3Ioc2VsZikpOwot
fQotCi1zdGF0aWMgaW50IFNldE9wdGlvbnMoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgUHlPYmpl
Y3QgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0
dXJuIENoZWNrQ2FsbGVkRnJvbUdlbmVyYXRlZEZpbGUoIl9vcHRpb25zIik7Ci19Ci0KLXN0YXRp
YyBQeU9iamVjdCogQ29weVRvUHJvdG8oUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgUHlPYmplY3Qg
KnRhcmdldCkgewotICByZXR1cm4gQ29weVRvUHl0aG9uUHJvdG88RGVzY3JpcHRvclByb3RvPihf
R2V0RGVzY3JpcHRvcihzZWxmKSwgdGFyZ2V0KTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBFbnVt
VmFsdWVOYW1lKFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSB7Ci0gIGNv
bnN0IGNoYXIgKmVudW1fbmFtZTsKLSAgaW50IG51bWJlcjsKLSAgaWYgKCFQeUFyZ19QYXJzZVR1
cGxlKGFyZ3MsICJzaSIsICZlbnVtX25hbWUsICZudW1iZXIpKQotICAgIHJldHVybiBOVUxMOwot
ICBjb25zdCBFbnVtRGVzY3JpcHRvciAqZW51bV90eXBlID0KLSAgICAgIF9HZXREZXNjcmlwdG9y
KHNlbGYpLT5GaW5kRW51bVR5cGVCeU5hbWUoZW51bV9uYW1lKTsKLSAgaWYgKGVudW1fdHlwZSA9
PSBOVUxMKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0tleUVycm9yLCBlbnVtX25hbWUp
OwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IgKmVu
dW1fdmFsdWUgPQotICAgICAgZW51bV90eXBlLT5GaW5kVmFsdWVCeU51bWJlcihudW1iZXIpOwot
ICBpZiAoZW51bV92YWx1ZSA9PSBOVUxMKSB7Ci0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX0tleUVy
cm9yLCAiJWQiLCBudW1iZXIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBQeVN0
cmluZ19Gcm9tQ3BwU3RyaW5nKGVudW1fdmFsdWUtPm5hbWUoKSk7Ci19Ci0KLXN0YXRpYyBQeU9i
amVjdCogR2V0U3ludGF4KFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsK
LSAgcmV0dXJuIFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoCi0gICAgICBGaWxlRGVzY3JpcHRv
cjo6U3ludGF4TmFtZShfR2V0RGVzY3JpcHRvcihzZWxmKS0+ZmlsZSgpLT5zeW50YXgoKSkpOwot
fQotCi1zdGF0aWMgUHlHZXRTZXREZWYgR2V0dGVyc1tdID0gewotICB7ICJuYW1lIiwgKGdldHRl
cilHZXROYW1lLCBOVUxMLCAiTGFzdCBuYW1lIn0sCi0gIHsgImZ1bGxfbmFtZSIsIChnZXR0ZXIp
R2V0RnVsbE5hbWUsIE5VTEwsICJGdWxsIG5hbWUifSwKLSAgeyAiX2NvbmNyZXRlX2NsYXNzIiwg
KGdldHRlcilHZXRDb25jcmV0ZUNsYXNzLCBOVUxMLCAiY29uY3JldGUgY2xhc3MifSwKLSAgeyAi
ZmlsZSIsIChnZXR0ZXIpR2V0RmlsZSwgTlVMTCwgIkZpbGUgZGVzY3JpcHRvciJ9LAotCi0gIHsg
ImZpZWxkcyIsIChnZXR0ZXIpR2V0RmllbGRzU2VxLCBOVUxMLCAiRmllbGRzIHNlcXVlbmNlIn0s
Ci0gIHsgImZpZWxkc19ieV9uYW1lIiwgKGdldHRlcilHZXRGaWVsZHNCeU5hbWUsIE5VTEwsICJG
aWVsZHMgYnkgbmFtZSJ9LAotICB7ICJmaWVsZHNfYnlfY2FtZWxjYXNlX25hbWUiLCAoZ2V0dGVy
KUdldEZpZWxkc0J5Q2FtZWxjYXNlTmFtZSwgTlVMTCwKLSAgICAiRmllbGRzIGJ5IGNhbWVsQ2Fz
ZSBuYW1lIn0sCi0gIHsgImZpZWxkc19ieV9udW1iZXIiLCAoZ2V0dGVyKUdldEZpZWxkc0J5TnVt
YmVyLCBOVUxMLCAiRmllbGRzIGJ5IG51bWJlciJ9LAotICB7ICJuZXN0ZWRfdHlwZXMiLCAoZ2V0
dGVyKUdldE5lc3RlZFR5cGVzU2VxLCBOVUxMLCAiTmVzdGVkIHR5cGVzIHNlcXVlbmNlIn0sCi0g
IHsgIm5lc3RlZF90eXBlc19ieV9uYW1lIiwgKGdldHRlcilHZXROZXN0ZWRUeXBlc0J5TmFtZSwg
TlVMTCwKLSAgICAiTmVzdGVkIHR5cGVzIGJ5IG5hbWUifSwKLSAgeyAiZXh0ZW5zaW9ucyIsIChn
ZXR0ZXIpR2V0RXh0ZW5zaW9ucywgTlVMTCwgIkV4dGVuc2lvbnMgU2VxdWVuY2UifSwKLSAgeyAi
ZXh0ZW5zaW9uc19ieV9uYW1lIiwgKGdldHRlcilHZXRFeHRlbnNpb25zQnlOYW1lLCBOVUxMLAot
ICAgICJFeHRlbnNpb25zIGJ5IG5hbWUifSwKLSAgeyAiZXh0ZW5zaW9uX3JhbmdlcyIsIChnZXR0
ZXIpR2V0RXh0ZW5zaW9uUmFuZ2VzLCBOVUxMLCAiRXh0ZW5zaW9uIHJhbmdlcyJ9LAotICB7ICJl
bnVtX3R5cGVzIiwgKGdldHRlcilHZXRFbnVtc1NlcSwgTlVMTCwgIkVudW0gc2VxdWVuY2UifSwK
LSAgeyAiZW51bV90eXBlc19ieV9uYW1lIiwgKGdldHRlcilHZXRFbnVtVHlwZXNCeU5hbWUsIE5V
TEwsCi0gICAgIkVudW0gdHlwZXMgYnkgbmFtZSJ9LAotICB7ICJlbnVtX3ZhbHVlc19ieV9uYW1l
IiwgKGdldHRlcilHZXRFbnVtVmFsdWVzQnlOYW1lLCBOVUxMLAotICAgICJFbnVtIHZhbHVlcyBi
eSBuYW1lIn0sCi0gIHsgIm9uZW9mc19ieV9uYW1lIiwgKGdldHRlcilHZXRPbmVvZnNCeU5hbWUs
IE5VTEwsICJPbmVvZnMgYnkgbmFtZSJ9LAotICB7ICJvbmVvZnMiLCAoZ2V0dGVyKUdldE9uZW9m
c1NlcSwgTlVMTCwgIk9uZW9mcyBieSBuYW1lIn0sCi0gIHsgImNvbnRhaW5pbmdfdHlwZSIsIChn
ZXR0ZXIpR2V0Q29udGFpbmluZ1R5cGUsIChzZXR0ZXIpU2V0Q29udGFpbmluZ1R5cGUsCi0gICAg
IkNvbnRhaW5pbmcgdHlwZSJ9LAotICB7ICJpc19leHRlbmRhYmxlIiwgKGdldHRlcilJc0V4dGVu
ZGFibGUsIChzZXR0ZXIpTlVMTH0sCi0gIHsgImhhc19vcHRpb25zIiwgKGdldHRlcilHZXRIYXNP
cHRpb25zLCAoc2V0dGVyKVNldEhhc09wdGlvbnMsICJIYXMgT3B0aW9ucyJ9LAotICB7ICJfb3B0
aW9ucyIsIChnZXR0ZXIpTlVMTCwgKHNldHRlcilTZXRPcHRpb25zLCAiT3B0aW9ucyJ9LAotICB7
ICJzeW50YXgiLCAoZ2V0dGVyKUdldFN5bnRheCwgKHNldHRlcilOVUxMLCAiU3ludGF4In0sCi0g
IHtOVUxMfQotfTsKLQotc3RhdGljIFB5TWV0aG9kRGVmIE1ldGhvZHNbXSA9IHsKLSAgeyAiR2V0
T3B0aW9ucyIsIChQeUNGdW5jdGlvbilHZXRPcHRpb25zLCBNRVRIX05PQVJHUywgfSwKLSAgeyAi
Q29weVRvUHJvdG8iLCAoUHlDRnVuY3Rpb24pQ29weVRvUHJvdG8sIE1FVEhfTywgfSwKLSAgeyAi
RW51bVZhbHVlTmFtZSIsIChQeUNGdW5jdGlvbilFbnVtVmFsdWVOYW1lLCBNRVRIX1ZBUkFSR1Ms
IH0sCi0gIHtOVUxMfQotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lc3NhZ2VfZGVzY3JpcHRvcgot
Ci1QeVR5cGVPYmplY3QgUHlNZXNzYWdlRGVzY3JpcHRvcl9UeXBlID0gewotICBQeVZhck9iamVj
dF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICBGVUxMX01PRFVMRV9OQU1FICIuTWVzc2Fn
ZURlc2NyaXB0b3IiLCAgLy8gdHBfbmFtZQotICBzaXplb2YoUHlCYXNlRGVzY3JpcHRvciksICAg
ICAgICAgICAgIC8vIHRwX2Jhc2ljc2l6ZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRwX2l0ZW1zaXplCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdHBfZGVhbGxvYwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRwX3ByaW50Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHBfZ2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRwX3NldGF0dHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0cF9jb21wYXJlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dHBfcmVwcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2Fz
X251bWJlcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2Fz
X3NlcXVlbmNlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
YXNfbWFwcGluZwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRw
X2hhc2gKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9jYWxs
Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfc3RyCi0gIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZ2V0YXR0cm8KLSAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9zZXRhdHRybwotICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2FzX2J1ZmZlcgotICBQeV9U
UEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgIC8vIHRwX2ZsYWdzCi0gICJBIE1lc3Nh
Z2UgRGVzY3JpcHRvciIsICAgICAgICAgICAgICAgLy8gdHBfZG9jCi0gIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfdHJhdmVyc2UKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9jbGVhcgotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRwX3JpY2hjb21wYXJlCi0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHBfd2Vha2xpc3RvZmZzZXQKLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVyCi0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHBfaXRlcm5leHQKLSAgbWVzc2FnZV9kZXNjcmlwdG9y
OjpNZXRob2RzLCAgICAgICAgICAvLyB0cF9tZXRob2RzCi0gIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfbWVtYmVycwotICBtZXNzYWdlX2Rlc2NyaXB0b3I6Okdl
dHRlcnMsICAgICAgICAgIC8vIHRwX2dldHNldAotICAmZGVzY3JpcHRvcjo6UHlCYXNlRGVzY3Jp
cHRvcl9UeXBlLCAgIC8vIHRwX2Jhc2UKLX07Ci0KLVB5T2JqZWN0KiBQeU1lc3NhZ2VEZXNjcmlw
dG9yX0Zyb21EZXNjcmlwdG9yKAotICAgIGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2VfZGVzY3Jp
cHRvcikgewotICByZXR1cm4gZGVzY3JpcHRvcjo6TmV3SW50ZXJuZWREZXNjcmlwdG9yKAotICAg
ICAgJlB5TWVzc2FnZURlc2NyaXB0b3JfVHlwZSwgbWVzc2FnZV9kZXNjcmlwdG9yLCBOVUxMKTsK
LX0KLQotY29uc3QgRGVzY3JpcHRvciogUHlNZXNzYWdlRGVzY3JpcHRvcl9Bc0Rlc2NyaXB0b3Io
UHlPYmplY3QqIG9iaikgewotICBpZiAoIVB5T2JqZWN0X1R5cGVDaGVjayhvYmosICZQeU1lc3Nh
Z2VEZXNjcmlwdG9yX1R5cGUpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv
ciwgIk5vdCBhIE1lc3NhZ2VEZXNjcmlwdG9yIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVzY3JpcHRvcio+KAotICAgICAgcmVpbnRl
cnByZXRfY2FzdDxQeUJhc2VEZXNjcmlwdG9yKj4ob2JqKS0+ZGVzY3JpcHRvcik7Ci19Ci0KLW5h
bWVzcGFjZSBmaWVsZF9kZXNjcmlwdG9yIHsKLQotLy8gVW5jaGVja2VkIGFjY2Vzc29yIHRvIHRo
ZSBDKysgcG9pbnRlci4KLXN0YXRpYyBjb25zdCBGaWVsZERlc2NyaXB0b3IqIF9HZXREZXNjcmlw
dG9yKAotICAgIFB5QmFzZURlc2NyaXB0b3IgKnNlbGYpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4oc2VsZi0+ZGVzY3JpcHRvcik7Ci19Ci0KLXN0
YXRpYyBQeU9iamVjdCogR2V0RnVsbE5hbWUoUHlCYXNlRGVzY3JpcHRvciogc2VsZiwgdm9pZCAq
Y2xvc3VyZSkgewotICByZXR1cm4gUHlTdHJpbmdfRnJvbUNwcFN0cmluZyhfR2V0RGVzY3JpcHRv
cihzZWxmKS0+ZnVsbF9uYW1lKCkpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldE5hbWUoUHlC
YXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gUHlTdHJpbmdf
RnJvbUNwcFN0cmluZyhfR2V0RGVzY3JpcHRvcihzZWxmKS0+bmFtZSgpKTsKLX0KLQotc3RhdGlj
IFB5T2JqZWN0KiBHZXRDYW1lbGNhc2VOYW1lKFB5QmFzZURlc2NyaXB0b3IqIHNlbGYsIHZvaWQg
KmNsb3N1cmUpIHsKLSAgcmV0dXJuIFB5U3RyaW5nX0Zyb21DcHBTdHJpbmcoX0dldERlc2NyaXB0
b3Ioc2VsZiktPmNhbWVsY2FzZV9uYW1lKCkpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldFR5
cGUoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gUHlJ
bnRfRnJvbUxvbmcoX0dldERlc2NyaXB0b3Ioc2VsZiktPnR5cGUoKSk7Ci19Ci0KLXN0YXRpYyBQ
eU9iamVjdCogR2V0Q3BwVHlwZShQeUJhc2VEZXNjcmlwdG9yICpzZWxmLCB2b2lkICpjbG9zdXJl
KSB7Ci0gIHJldHVybiBQeUludF9Gcm9tTG9uZyhfR2V0RGVzY3JpcHRvcihzZWxmKS0+Y3BwX3R5
cGUoKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0TGFiZWwoUHlCYXNlRGVzY3JpcHRvciAq
c2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoX0dldERlc2Ny
aXB0b3Ioc2VsZiktPmxhYmVsKCkpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldE51bWJlcihQ
eUJhc2VEZXNjcmlwdG9yICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBQeUludF9G
cm9tTG9uZyhfR2V0RGVzY3JpcHRvcihzZWxmKS0+bnVtYmVyKCkpOwotfQotCi1zdGF0aWMgUHlP
YmplY3QqIEdldEluZGV4KFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsK
LSAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKF9HZXREZXNjcmlwdG9yKHNlbGYpLT5pbmRleCgpKTsK
LX0KLQotc3RhdGljIFB5T2JqZWN0KiBHZXRJRChQeUJhc2VEZXNjcmlwdG9yICpzZWxmLCB2b2lk
ICpjbG9zdXJlKSB7Ci0gIHJldHVybiBQeUxvbmdfRnJvbVZvaWRQdHIoc2VsZik7Ci19Ci0KLXN0
YXRpYyBQeU9iamVjdCogSXNFeHRlbnNpb24oUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAq
Y2xvc3VyZSkgewotICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKF9HZXREZXNjcmlwdG9yKHNlbGYp
LT5pc19leHRlbnNpb24oKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogSGFzRGVmYXVsdFZhbHVl
KFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJuIFB5Qm9v
bF9Gcm9tTG9uZyhfR2V0RGVzY3JpcHRvcihzZWxmKS0+aGFzX2RlZmF1bHRfdmFsdWUoKSk7Ci19
Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0RGVmYXVsdFZhbHVlKFB5QmFzZURlc2NyaXB0b3IgKnNl
bGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgUHlPYmplY3QgKnJlc3VsdDsKLQotICBzd2l0Y2ggKF9H
ZXREZXNjcmlwdG9yKHNlbGYpLT5jcHBfdHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfSU5UMzI6IHsKLSAgICAgIGludDMyIHZhbHVlID0gX0dldERlc2NyaXB0b3Io
c2VsZiktPmRlZmF1bHRfdmFsdWVfaW50MzIoKTsKLSAgICAgIHJlc3VsdCA9IFB5SW50X0Zyb21M
b25nKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9JTlQ2NDogewotICAgICAgaW50NjQgdmFsdWUgPSBfR2V0RGVzY3JpcHRvcihz
ZWxmKS0+ZGVmYXVsdF92YWx1ZV9pbnQ2NCgpOwotICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21M
b25nTG9uZyh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfVUlOVDMyOiB7Ci0gICAgICB1aW50MzIgdmFsdWUgPSBfR2V0RGVzY3Jp
cHRvcihzZWxmKS0+ZGVmYXVsdF92YWx1ZV91aW50MzIoKTsKLSAgICAgIHJlc3VsdCA9IFB5SW50
X0Zyb21TaXplX3QodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NDogewotICAgICAgdWludDY0IHZhbHVlID0gX0dldERl
c2NyaXB0b3Ioc2VsZiktPmRlZmF1bHRfdmFsdWVfdWludDY0KCk7Ci0gICAgICByZXN1bHQgPSBQ
eUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FUOiB7Ci0gICAgICBmbG9hdCB2
YWx1ZSA9IF9HZXREZXNjcmlwdG9yKHNlbGYpLT5kZWZhdWx0X3ZhbHVlX2Zsb2F0KCk7Ci0gICAg
ICByZXN1bHQgPSBQeUZsb2F0X0Zyb21Eb3VibGUodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRTogewotICAgICAgZG91
YmxlIHZhbHVlID0gX0dldERlc2NyaXB0b3Ioc2VsZiktPmRlZmF1bHRfdmFsdWVfZG91YmxlKCk7
Ci0gICAgICByZXN1bHQgPSBQeUZsb2F0X0Zyb21Eb3VibGUodmFsdWUpOwotICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0w6IHsKLSAgICAg
IGJvb2wgdmFsdWUgPSBfR2V0RGVzY3JpcHRvcihzZWxmKS0+ZGVmYXVsdF92YWx1ZV9ib29sKCk7
Ci0gICAgICByZXN1bHQgPSBQeUJvb2xfRnJvbUxvbmcodmFsdWUpOwotICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzogewotICAgICAg
c3RyaW5nIHZhbHVlID0gX0dldERlc2NyaXB0b3Ioc2VsZiktPmRlZmF1bHRfdmFsdWVfc3RyaW5n
KCk7Ci0gICAgICByZXN1bHQgPSBUb1N0cmluZ09iamVjdChfR2V0RGVzY3JpcHRvcihzZWxmKSwg
dmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX0VOVU06IHsKLSAgICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIHZhbHVlID0K
LSAgICAgICAgICBfR2V0RGVzY3JpcHRvcihzZWxmKS0+ZGVmYXVsdF92YWx1ZV9lbnVtKCk7Ci0g
ICAgICByZXN1bHQgPSBQeUludF9Gcm9tTG9uZyh2YWx1ZS0+bnVtYmVyKCkpOwotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTm90SW1w
bGVtZW50ZWRFcnJvciwgImRlZmF1bHQgdmFsdWUgZm9yICVzIiwKLSAgICAgICAgICAgICAgICAg
ICBfR2V0RGVzY3JpcHRvcihzZWxmKS0+ZnVsbF9uYW1lKCkuY19zdHIoKSk7Ci0gICAgICByZXR1
cm4gTlVMTDsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdl
dENEZXNjcmlwdG9yKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIFB5X0lOQ1JF
RihzZWxmKTsKLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqR2V0RW51bVR5
cGUoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICBjb25zdCBFbnVt
RGVzY3JpcHRvciogZW51bV90eXBlID0gX0dldERlc2NyaXB0b3Ioc2VsZiktPmVudW1fdHlwZSgp
OwotICBpZiAoZW51bV90eXBlKSB7Ci0gICAgcmV0dXJuIFB5RW51bURlc2NyaXB0b3JfRnJvbURl
c2NyaXB0b3IoZW51bV90eXBlKTsKLSAgfSBlbHNlIHsKLSAgICBQeV9SRVRVUk5fTk9ORTsKLSAg
fQotfQotCi1zdGF0aWMgaW50IFNldEVudW1UeXBlKFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIFB5
T2JqZWN0ICp2YWx1ZSwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gQ2hlY2tDYWxsZWRGcm9t
R2VuZXJhdGVkRmlsZSgiZW51bV90eXBlIik7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqR2V0TWVz
c2FnZVR5cGUoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICBjb25z
dCBEZXNjcmlwdG9yKiBtZXNzYWdlX3R5cGUgPSBfR2V0RGVzY3JpcHRvcihzZWxmKS0+bWVzc2Fn
ZV90eXBlKCk7Ci0gIGlmIChtZXNzYWdlX3R5cGUpIHsKLSAgICByZXR1cm4gUHlNZXNzYWdlRGVz
Y3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihtZXNzYWdlX3R5cGUpOwotICB9IGVsc2UgewotICAgIFB5
X1JFVFVSTl9OT05FOwotICB9Ci19Ci0KLXN0YXRpYyBpbnQgU2V0TWVzc2FnZVR5cGUoUHlCYXNl
RGVzY3JpcHRvciAqc2VsZiwgUHlPYmplY3QgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBDaGVja0NhbGxlZEZyb21HZW5lcmF0ZWRG
aWxlKCJtZXNzYWdlX3R5cGUiKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBHZXRDb250YWluaW5n
VHlwZShQeUJhc2VEZXNjcmlwdG9yICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIGNvbnN0IERl
c2NyaXB0b3IqIGNvbnRhaW5pbmdfdHlwZSA9Ci0gICAgICBfR2V0RGVzY3JpcHRvcihzZWxmKS0+
Y29udGFpbmluZ190eXBlKCk7Ci0gIGlmIChjb250YWluaW5nX3R5cGUpIHsKLSAgICByZXR1cm4g
UHlNZXNzYWdlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihjb250YWluaW5nX3R5cGUpOwotICB9
IGVsc2UgewotICAgIFB5X1JFVFVSTl9OT05FOwotICB9Ci19Ci0KLXN0YXRpYyBpbnQgU2V0Q29u
dGFpbmluZ1R5cGUoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgUHlPYmplY3QgKnZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBDaGVj
a0NhbGxlZEZyb21HZW5lcmF0ZWRGaWxlKCJjb250YWluaW5nX3R5cGUiKTsKLX0KLQotc3RhdGlj
IFB5T2JqZWN0KiBHZXRFeHRlbnNpb25TY29wZShQeUJhc2VEZXNjcmlwdG9yICpzZWxmLCB2b2lk
ICpjbG9zdXJlKSB7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGV4dGVuc2lvbl9zY29wZSA9Ci0gICAg
ICBfR2V0RGVzY3JpcHRvcihzZWxmKS0+ZXh0ZW5zaW9uX3Njb3BlKCk7Ci0gIGlmIChleHRlbnNp
b25fc2NvcGUpIHsKLSAgICByZXR1cm4gUHlNZXNzYWdlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRv
cihleHRlbnNpb25fc2NvcGUpOwotICB9IGVsc2UgewotICAgIFB5X1JFVFVSTl9OT05FOwotICB9
Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0Q29udGFpbmluZ09uZW9mKFB5QmFzZURlc2NyaXB0
b3IgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBjb250
YWluaW5nX29uZW9mID0KLSAgICAgIF9HZXREZXNjcmlwdG9yKHNlbGYpLT5jb250YWluaW5nX29u
ZW9mKCk7Ci0gIGlmIChjb250YWluaW5nX29uZW9mKSB7Ci0gICAgcmV0dXJuIFB5T25lb2ZEZXNj
cmlwdG9yX0Zyb21EZXNjcmlwdG9yKGNvbnRhaW5pbmdfb25lb2YpOwotICB9IGVsc2UgewotICAg
IFB5X1JFVFVSTl9OT05FOwotICB9Ci19Ci0KLXN0YXRpYyBpbnQgU2V0Q29udGFpbmluZ09uZW9m
KFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIFB5T2JqZWN0ICp2YWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJuIENoZWNrQ2FsbGVkRnJv
bUdlbmVyYXRlZEZpbGUoImNvbnRhaW5pbmdfb25lb2YiKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0
KiBHZXRIYXNPcHRpb25zKFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsK
LSAgY29uc3QgRmllbGRPcHRpb25zJiBvcHRpb25zKF9HZXREZXNjcmlwdG9yKHNlbGYpLT5vcHRp
b25zKCkpOwotICBpZiAoJm9wdGlvbnMgIT0gJkZpZWxkT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5j
ZSgpKSB7Ci0gICAgUHlfUkVUVVJOX1RSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgUHlfUkVUVVJOX0ZB
TFNFOwotICB9Ci19Ci1zdGF0aWMgaW50IFNldEhhc09wdGlvbnMoUHlCYXNlRGVzY3JpcHRvciAq
c2VsZiwgUHlPYmplY3QgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNs
b3N1cmUpIHsKLSAgcmV0dXJuIENoZWNrQ2FsbGVkRnJvbUdlbmVyYXRlZEZpbGUoImhhc19vcHRp
b25zIik7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0T3B0aW9ucyhQeUJhc2VEZXNjcmlwdG9y
ICpzZWxmKSB7Ci0gIHJldHVybiBHZXRPckJ1aWxkT3B0aW9ucyhfR2V0RGVzY3JpcHRvcihzZWxm
KSk7Ci19Ci0KLXN0YXRpYyBpbnQgU2V0T3B0aW9ucyhQeUJhc2VEZXNjcmlwdG9yICpzZWxmLCBQ
eU9iamVjdCAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgewot
ICByZXR1cm4gQ2hlY2tDYWxsZWRGcm9tR2VuZXJhdGVkRmlsZSgiX29wdGlvbnMiKTsKLX0KLQot
Ci1zdGF0aWMgUHlHZXRTZXREZWYgR2V0dGVyc1tdID0gewotICB7ICJmdWxsX25hbWUiLCAoZ2V0
dGVyKUdldEZ1bGxOYW1lLCBOVUxMLCAiRnVsbCBuYW1lIn0sCi0gIHsgIm5hbWUiLCAoZ2V0dGVy
KUdldE5hbWUsIE5VTEwsICJVbnF1YWxpZmllZCBuYW1lIn0sCi0gIHsgImNhbWVsY2FzZV9uYW1l
IiwgKGdldHRlcilHZXRDYW1lbGNhc2VOYW1lLCBOVUxMLCAiQ2FtZWxjYXNlIG5hbWUifSwKLSAg
eyAidHlwZSIsIChnZXR0ZXIpR2V0VHlwZSwgTlVMTCwgIkMrKyBUeXBlIn0sCi0gIHsgImNwcF90
eXBlIiwgKGdldHRlcilHZXRDcHBUeXBlLCBOVUxMLCAiQysrIFR5cGUifSwKLSAgeyAibGFiZWwi
LCAoZ2V0dGVyKUdldExhYmVsLCBOVUxMLCAiTGFiZWwifSwKLSAgeyAibnVtYmVyIiwgKGdldHRl
cilHZXROdW1iZXIsIE5VTEwsICJOdW1iZXIifSwKLSAgeyAiaW5kZXgiLCAoZ2V0dGVyKUdldElu
ZGV4LCBOVUxMLCAiSW5kZXgifSwKLSAgeyAiZGVmYXVsdF92YWx1ZSIsIChnZXR0ZXIpR2V0RGVm
YXVsdFZhbHVlLCBOVUxMLCAiRGVmYXVsdCBWYWx1ZSJ9LAotICB7ICJoYXNfZGVmYXVsdF92YWx1
ZSIsIChnZXR0ZXIpSGFzRGVmYXVsdFZhbHVlfSwKLSAgeyAiaXNfZXh0ZW5zaW9uIiwgKGdldHRl
cilJc0V4dGVuc2lvbiwgTlVMTCwgIklEIn0sCi0gIHsgImlkIiwgKGdldHRlcilHZXRJRCwgTlVM
TCwgIklEIn0sCi0gIHsgIl9jZGVzY3JpcHRvciIsIChnZXR0ZXIpR2V0Q0Rlc2NyaXB0b3IsIE5V
TEwsICJIQUFDSyBSRU1PVkUgTUUifSwKLQotICB7ICJtZXNzYWdlX3R5cGUiLCAoZ2V0dGVyKUdl
dE1lc3NhZ2VUeXBlLCAoc2V0dGVyKVNldE1lc3NhZ2VUeXBlLAotICAgICJNZXNzYWdlIHR5cGUi
fSwKLSAgeyAiZW51bV90eXBlIiwgKGdldHRlcilHZXRFbnVtVHlwZSwgKHNldHRlcilTZXRFbnVt
VHlwZSwgIkVudW0gdHlwZSJ9LAotICB7ICJjb250YWluaW5nX3R5cGUiLCAoZ2V0dGVyKUdldENv
bnRhaW5pbmdUeXBlLCAoc2V0dGVyKVNldENvbnRhaW5pbmdUeXBlLAotICAgICJDb250YWluaW5n
IHR5cGUifSwKLSAgeyAiZXh0ZW5zaW9uX3Njb3BlIiwgKGdldHRlcilHZXRFeHRlbnNpb25TY29w
ZSwgKHNldHRlcilOVUxMLAotICAgICJFeHRlbnNpb24gc2NvcGUifSwKLSAgeyAiY29udGFpbmlu
Z19vbmVvZiIsIChnZXR0ZXIpR2V0Q29udGFpbmluZ09uZW9mLCAoc2V0dGVyKVNldENvbnRhaW5p
bmdPbmVvZiwKLSAgICAiQ29udGFpbmluZyBvbmVvZiJ9LAotICB7ICJoYXNfb3B0aW9ucyIsIChn
ZXR0ZXIpR2V0SGFzT3B0aW9ucywgKHNldHRlcilTZXRIYXNPcHRpb25zLCAiSGFzIE9wdGlvbnMi
fSwKLSAgeyAiX29wdGlvbnMiLCAoZ2V0dGVyKU5VTEwsIChzZXR0ZXIpU2V0T3B0aW9ucywgIk9w
dGlvbnMifSwKLSAge05VTEx9Ci19OwotCi1zdGF0aWMgUHlNZXRob2REZWYgTWV0aG9kc1tdID0g
ewotICB7ICJHZXRPcHRpb25zIiwgKFB5Q0Z1bmN0aW9uKUdldE9wdGlvbnMsIE1FVEhfTk9BUkdT
LCB9LAotICB7TlVMTH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBmaWVsZF9kZXNjcmlwdG9yCi0K
LVB5VHlwZU9iamVjdCBQeUZpZWxkRGVzY3JpcHRvcl9UeXBlID0gewotICBQeVZhck9iamVjdF9I
RUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICBGVUxMX01PRFVMRV9OQU1FICIuRmllbGREZXNj
cmlwdG9yIiwgIC8vIHRwX25hbWUKLSAgc2l6ZW9mKFB5QmFzZURlc2NyaXB0b3IpLCAgICAgICAg
ICAgICAvLyB0cF9iYXNpY3NpemUKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF9pdGVtc2l6ZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRwX2RlYWxsb2MKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0cF9wcmludAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRwX2dldGF0dHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
cF9zZXRhdHRyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
Y29tcGFyZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3Jl
cHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9hc19udW1i
ZXIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9hc19zZXF1
ZW5jZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2FzX21h
cHBpbmcKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9oYXNo
Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfY2FsbAotICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3N0cgotICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2dldGF0dHJvCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfc2V0YXR0cm8KLSAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9hc19idWZmZXIKLSAgUHlfVFBGTEFH
U19ERUZBVUxULCAgICAgICAgICAgICAgICAgICAvLyB0cF9mbGFncwotICAiQSBGaWVsZCBEZXNj
cmlwdG9yIiwgICAgICAgICAgICAgICAgIC8vIHRwX2RvYwotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRwX3RyYXZlcnNlCi0gIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfY2xlYXIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0cF9yaWNoY29tcGFyZQotICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRwX3dlYWtsaXN0b2Zmc2V0Ci0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHBfaXRlcgotICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRwX2l0ZXJuZXh0Ci0gIGZpZWxkX2Rlc2NyaXB0b3I6Ok1ldGhv
ZHMsICAgICAgICAgICAgLy8gdHBfbWV0aG9kcwotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRwX21lbWJlcnMKLSAgZmllbGRfZGVzY3JpcHRvcjo6R2V0dGVycywg
ICAgICAgICAgICAvLyB0cF9nZXRzZXQKLSAgJmRlc2NyaXB0b3I6OlB5QmFzZURlc2NyaXB0b3Jf
VHlwZSwgICAvLyB0cF9iYXNlCi19OwotCi1QeU9iamVjdCogUHlGaWVsZERlc2NyaXB0b3JfRnJv
bURlc2NyaXB0b3IoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlwdG9y
KSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yOjpOZXdJbnRlcm5lZERlc2NyaXB0b3IoCi0gICAgICAm
UHlGaWVsZERlc2NyaXB0b3JfVHlwZSwgZmllbGRfZGVzY3JpcHRvciwgTlVMTCk7Ci19Ci0KLWNv
bnN0IEZpZWxkRGVzY3JpcHRvciogUHlGaWVsZERlc2NyaXB0b3JfQXNEZXNjcmlwdG9yKFB5T2Jq
ZWN0KiBvYmopIHsKLSAgaWYgKCFQeU9iamVjdF9UeXBlQ2hlY2sob2JqLCAmUHlGaWVsZERlc2Ny
aXB0b3JfVHlwZSkpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiTm90
IGEgRmllbGREZXNjcmlwdG9yIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4oCi0gICAgICByZWludGVycHJl
dF9jYXN0PFB5QmFzZURlc2NyaXB0b3IqPihvYmopLT5kZXNjcmlwdG9yKTsKLX0KLQotbmFtZXNw
YWNlIGVudW1fZGVzY3JpcHRvciB7Ci0KLS8vIFVuY2hlY2tlZCBhY2Nlc3NvciB0byB0aGUgQysr
IHBvaW50ZXIuCi1zdGF0aWMgY29uc3QgRW51bURlc2NyaXB0b3IqIF9HZXREZXNjcmlwdG9yKAot
ICAgIFB5QmFzZURlc2NyaXB0b3IgKnNlbGYpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgRW51bURlc2NyaXB0b3IqPihzZWxmLT5kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIFB5
T2JqZWN0KiBHZXRGdWxsTmFtZShQeUJhc2VEZXNjcmlwdG9yKiBzZWxmLCB2b2lkICpjbG9zdXJl
KSB7Ci0gIHJldHVybiBQeVN0cmluZ19Gcm9tQ3BwU3RyaW5nKF9HZXREZXNjcmlwdG9yKHNlbGYp
LT5mdWxsX25hbWUoKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0TmFtZShQeUJhc2VEZXNj
cmlwdG9yICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBQeVN0cmluZ19Gcm9tQ3Bw
U3RyaW5nKF9HZXREZXNjcmlwdG9yKHNlbGYpLT5uYW1lKCkpOwotfQotCi1zdGF0aWMgUHlPYmpl
Y3QqIEdldEZpbGUoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICBy
ZXR1cm4gUHlGaWxlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihfR2V0RGVzY3JpcHRvcihzZWxm
KS0+ZmlsZSgpKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBHZXRFbnVtdmFsdWVzQnlOYW1lKFB5
QmFzZURlc2NyaXB0b3IqIHNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJuIE5ld0VudW1W
YWx1ZXNCeU5hbWUoX0dldERlc2NyaXB0b3Ioc2VsZikpOwotfQotCi1zdGF0aWMgUHlPYmplY3Qq
IEdldEVudW12YWx1ZXNCeU51bWJlcihQeUJhc2VEZXNjcmlwdG9yKiBzZWxmLCB2b2lkICpjbG9z
dXJlKSB7Ci0gIHJldHVybiBOZXdFbnVtVmFsdWVzQnlOdW1iZXIoX0dldERlc2NyaXB0b3Ioc2Vs
ZikpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldEVudW12YWx1ZXNTZXEoUHlCYXNlRGVzY3Jp
cHRvciogc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gTmV3RW51bVZhbHVlc1NlcShf
R2V0RGVzY3JpcHRvcihzZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0Q29udGFpbmlu
Z1R5cGUoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICBjb25zdCBE
ZXNjcmlwdG9yKiBjb250YWluaW5nX3R5cGUgPQotICAgICAgX0dldERlc2NyaXB0b3Ioc2VsZikt
PmNvbnRhaW5pbmdfdHlwZSgpOwotICBpZiAoY29udGFpbmluZ190eXBlKSB7Ci0gICAgcmV0dXJu
IFB5TWVzc2FnZURlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoY29udGFpbmluZ190eXBlKTsKLSAg
fSBlbHNlIHsKLSAgICBQeV9SRVRVUk5fTk9ORTsKLSAgfQotfQotCi1zdGF0aWMgaW50IFNldENv
bnRhaW5pbmdUeXBlKFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIFB5T2JqZWN0ICp2YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gQ2hl
Y2tDYWxsZWRGcm9tR2VuZXJhdGVkRmlsZSgiY29udGFpbmluZ190eXBlIik7Ci19Ci0KLQotc3Rh
dGljIFB5T2JqZWN0KiBHZXRIYXNPcHRpb25zKFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIHZvaWQg
KmNsb3N1cmUpIHsKLSAgY29uc3QgRW51bU9wdGlvbnMmIG9wdGlvbnMoX0dldERlc2NyaXB0b3Io
c2VsZiktPm9wdGlvbnMoKSk7Ci0gIGlmICgmb3B0aW9ucyAhPSAmRW51bU9wdGlvbnM6OmRlZmF1
bHRfaW5zdGFuY2UoKSkgewotICAgIFB5X1JFVFVSTl9UUlVFOwotICB9IGVsc2UgewotICAgIFB5
X1JFVFVSTl9GQUxTRTsKLSAgfQotfQotc3RhdGljIGludCBTZXRIYXNPcHRpb25zKFB5QmFzZURl
c2NyaXB0b3IgKnNlbGYsIFB5T2JqZWN0ICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBDaGVja0NhbGxlZEZyb21HZW5lcmF0ZWRGaWxl
KCJoYXNfb3B0aW9ucyIpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldE9wdGlvbnMoUHlCYXNl
RGVzY3JpcHRvciAqc2VsZikgewotICByZXR1cm4gR2V0T3JCdWlsZE9wdGlvbnMoX0dldERlc2Ny
aXB0b3Ioc2VsZikpOwotfQotCi1zdGF0aWMgaW50IFNldE9wdGlvbnMoUHlCYXNlRGVzY3JpcHRv
ciAqc2VsZiwgUHlPYmplY3QgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNs
b3N1cmUpIHsKLSAgcmV0dXJuIENoZWNrQ2FsbGVkRnJvbUdlbmVyYXRlZEZpbGUoIl9vcHRpb25z
Iik7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogQ29weVRvUHJvdG8oUHlCYXNlRGVzY3JpcHRvciAq
c2VsZiwgUHlPYmplY3QgKnRhcmdldCkgewotICByZXR1cm4gQ29weVRvUHl0aG9uUHJvdG88RW51
bURlc2NyaXB0b3JQcm90bz4oX0dldERlc2NyaXB0b3Ioc2VsZiksIHRhcmdldCk7Ci19Ci0KLXN0
YXRpYyBQeU1ldGhvZERlZiBNZXRob2RzW10gPSB7Ci0gIHsgIkdldE9wdGlvbnMiLCAoUHlDRnVu
Y3Rpb24pR2V0T3B0aW9ucywgTUVUSF9OT0FSR1MsIH0sCi0gIHsgIkNvcHlUb1Byb3RvIiwgKFB5
Q0Z1bmN0aW9uKUNvcHlUb1Byb3RvLCBNRVRIX08sIH0sCi0gIHtOVUxMfQotfTsKLQotc3RhdGlj
IFB5R2V0U2V0RGVmIEdldHRlcnNbXSA9IHsKLSAgeyAiZnVsbF9uYW1lIiwgKGdldHRlcilHZXRG
dWxsTmFtZSwgTlVMTCwgIkZ1bGwgbmFtZSJ9LAotICB7ICJuYW1lIiwgKGdldHRlcilHZXROYW1l
LCBOVUxMLCAibGFzdCBuYW1lIn0sCi0gIHsgImZpbGUiLCAoZ2V0dGVyKUdldEZpbGUsIE5VTEws
ICJGaWxlIGRlc2NyaXB0b3IifSwKLSAgeyAidmFsdWVzIiwgKGdldHRlcilHZXRFbnVtdmFsdWVz
U2VxLCBOVUxMLCAidmFsdWVzIn0sCi0gIHsgInZhbHVlc19ieV9uYW1lIiwgKGdldHRlcilHZXRF
bnVtdmFsdWVzQnlOYW1lLCBOVUxMLAotICAgICJFbnVtIHZhbHVlcyBieSBuYW1lIn0sCi0gIHsg
InZhbHVlc19ieV9udW1iZXIiLCAoZ2V0dGVyKUdldEVudW12YWx1ZXNCeU51bWJlciwgTlVMTCwK
LSAgICAiRW51bSB2YWx1ZXMgYnkgbnVtYmVyIn0sCi0KLSAgeyAiY29udGFpbmluZ190eXBlIiwg
KGdldHRlcilHZXRDb250YWluaW5nVHlwZSwgKHNldHRlcilTZXRDb250YWluaW5nVHlwZSwKLSAg
ICAiQ29udGFpbmluZyB0eXBlIn0sCi0gIHsgImhhc19vcHRpb25zIiwgKGdldHRlcilHZXRIYXNP
cHRpb25zLCAoc2V0dGVyKVNldEhhc09wdGlvbnMsICJIYXMgT3B0aW9ucyJ9LAotICB7ICJfb3B0
aW9ucyIsIChnZXR0ZXIpTlVMTCwgKHNldHRlcilTZXRPcHRpb25zLCAiT3B0aW9ucyJ9LAotICB7
TlVMTH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBlbnVtX2Rlc2NyaXB0b3IKLQotUHlUeXBlT2Jq
ZWN0IFB5RW51bURlc2NyaXB0b3JfVHlwZSA9IHsKLSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQ
eVR5cGVfVHlwZSwgMCkKLSAgRlVMTF9NT0RVTEVfTkFNRSAiLkVudW1EZXNjcmlwdG9yIiwgICAv
LyB0cF9uYW1lCi0gIHNpemVvZihQeUJhc2VEZXNjcmlwdG9yKSwgICAgICAgICAgICAgLy8gdHBf
YmFzaWNzaXplCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
aXRlbXNpemUKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9k
ZWFsbG9jCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfcHJp
bnQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9nZXRhdHRy
Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfc2V0YXR0cgot
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2NvbXBhcmUKLSAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9yZXByCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfYXNfbnVtYmVyCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfYXNfc2VxdWVuY2UKLSAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9hc19tYXBwaW5nCi0gIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfaGFzaAotICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2NhbGwKLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9zdHIKLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0cF9nZXRhdHRybwotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRwX3NldGF0dHJvCi0gIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfYXNfYnVmZmVyCi0gIFB5X1RQRkxBR1NfREVGQVVMVCwg
ICAgICAgICAgICAgICAgICAgLy8gdHBfZmxhZ3MKLSAgIkEgRW51bSBEZXNjcmlwdG9yIiwgICAg
ICAgICAgICAgICAgICAvLyB0cF9kb2MKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0cF90cmF2ZXJzZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRwX2NsZWFyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHBfcmljaGNvbXBhcmUKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF93ZWFrbGlzdG9mZnNldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRwX2l0ZXIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF9pdGVybmV4dAotICBlbnVtX2Rlc2NyaXB0b3I6Ok1ldGhvZHMsICAgICAgICAg
ICAgIC8vIHRwX2dldHNldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRwX21lbWJlcnMKLSAgZW51bV9kZXNjcmlwdG9yOjpHZXR0ZXJzLCAgICAgICAgICAgICAv
LyB0cF9nZXRzZXQKLSAgJmRlc2NyaXB0b3I6OlB5QmFzZURlc2NyaXB0b3JfVHlwZSwgICAvLyB0
cF9iYXNlCi19OwotCi1QeU9iamVjdCogUHlFbnVtRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcigK
LSAgICBjb25zdCBFbnVtRGVzY3JpcHRvciogZW51bV9kZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBk
ZXNjcmlwdG9yOjpOZXdJbnRlcm5lZERlc2NyaXB0b3IoCi0gICAgICAmUHlFbnVtRGVzY3JpcHRv
cl9UeXBlLCBlbnVtX2Rlc2NyaXB0b3IsIE5VTEwpOwotfQotCi1jb25zdCBFbnVtRGVzY3JpcHRv
ciogUHlFbnVtRGVzY3JpcHRvcl9Bc0Rlc2NyaXB0b3IoUHlPYmplY3QqIG9iaikgewotICBpZiAo
IVB5T2JqZWN0X1R5cGVDaGVjayhvYmosICZQeUVudW1EZXNjcmlwdG9yX1R5cGUpKSB7Ci0gICAg
UHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIk5vdCBhbiBFbnVtRGVzY3JpcHRvciIp
OwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0
IEVudW1EZXNjcmlwdG9yKj4oCi0gICAgICByZWludGVycHJldF9jYXN0PFB5QmFzZURlc2NyaXB0
b3IqPihvYmopLT5kZXNjcmlwdG9yKTsKLX0KLQotbmFtZXNwYWNlIGVudW12YWx1ZV9kZXNjcmlw
dG9yIHsKLQotLy8gVW5jaGVja2VkIGFjY2Vzc29yIHRvIHRoZSBDKysgcG9pbnRlci4KLXN0YXRp
YyBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBfR2V0RGVzY3JpcHRvcigKLSAgICBQeUJhc2VE
ZXNjcmlwdG9yICpzZWxmKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEVudW1W
YWx1ZURlc2NyaXB0b3IqPihzZWxmLT5kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0
KiBHZXROYW1lKFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0
dXJuIFB5U3RyaW5nX0Zyb21DcHBTdHJpbmcoX0dldERlc2NyaXB0b3Ioc2VsZiktPm5hbWUoKSk7
Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0TnVtYmVyKFB5QmFzZURlc2NyaXB0b3IgKnNlbGYs
IHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKF9HZXREZXNjcmlwdG9y
KHNlbGYpLT5udW1iZXIoKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0SW5kZXgoUHlCYXNl
RGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gUHlJbnRfRnJvbUxv
bmcoX0dldERlc2NyaXB0b3Ioc2VsZiktPmluZGV4KCkpOwotfQotCi1zdGF0aWMgUHlPYmplY3Qq
IEdldFR5cGUoUHlCYXNlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1
cm4gUHlFbnVtRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihfR2V0RGVzY3JpcHRvcihzZWxmKS0+
dHlwZSgpKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBHZXRIYXNPcHRpb25zKFB5QmFzZURlc2Ny
aXB0b3IgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgY29uc3QgRW51bVZhbHVlT3B0aW9ucyYg
b3B0aW9ucyhfR2V0RGVzY3JpcHRvcihzZWxmKS0+b3B0aW9ucygpKTsKLSAgaWYgKCZvcHRpb25z
ICE9ICZFbnVtVmFsdWVPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlKCkpIHsKLSAgICBQeV9SRVRV
Uk5fVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBQeV9SRVRVUk5fRkFMU0U7Ci0gIH0KLX0KLXN0YXRp
YyBpbnQgU2V0SGFzT3B0aW9ucyhQeUJhc2VEZXNjcmlwdG9yICpzZWxmLCBQeU9iamVjdCAqdmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4g
Q2hlY2tDYWxsZWRGcm9tR2VuZXJhdGVkRmlsZSgiaGFzX29wdGlvbnMiKTsKLX0KLQotc3RhdGlj
IFB5T2JqZWN0KiBHZXRPcHRpb25zKFB5QmFzZURlc2NyaXB0b3IgKnNlbGYpIHsKLSAgcmV0dXJu
IEdldE9yQnVpbGRPcHRpb25zKF9HZXREZXNjcmlwdG9yKHNlbGYpKTsKLX0KLQotc3RhdGljIGlu
dCBTZXRPcHRpb25zKFB5QmFzZURlc2NyaXB0b3IgKnNlbGYsIFB5T2JqZWN0ICp2YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBDaGVja0NhbGxl
ZEZyb21HZW5lcmF0ZWRGaWxlKCJfb3B0aW9ucyIpOwotfQotCi0KLXN0YXRpYyBQeUdldFNldERl
ZiBHZXR0ZXJzW10gPSB7Ci0gIHsgIm5hbWUiLCAoZ2V0dGVyKUdldE5hbWUsIE5VTEwsICJuYW1l
In0sCi0gIHsgIm51bWJlciIsIChnZXR0ZXIpR2V0TnVtYmVyLCBOVUxMLCAibnVtYmVyIn0sCi0g
IHsgImluZGV4IiwgKGdldHRlcilHZXRJbmRleCwgTlVMTCwgImluZGV4In0sCi0gIHsgInR5cGUi
LCAoZ2V0dGVyKUdldFR5cGUsIE5VTEwsICJpbmRleCJ9LAotCi0gIHsgImhhc19vcHRpb25zIiwg
KGdldHRlcilHZXRIYXNPcHRpb25zLCAoc2V0dGVyKVNldEhhc09wdGlvbnMsICJIYXMgT3B0aW9u
cyJ9LAotICB7ICJfb3B0aW9ucyIsIChnZXR0ZXIpTlVMTCwgKHNldHRlcilTZXRPcHRpb25zLCAi
T3B0aW9ucyJ9LAotICB7TlVMTH0KLX07Ci0KLXN0YXRpYyBQeU1ldGhvZERlZiBNZXRob2RzW10g
PSB7Ci0gIHsgIkdldE9wdGlvbnMiLCAoUHlDRnVuY3Rpb24pR2V0T3B0aW9ucywgTUVUSF9OT0FS
R1MsIH0sCi0gIHtOVUxMfQotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGVudW12YWx1ZV9kZXNjcmlw
dG9yCi0KLVB5VHlwZU9iamVjdCBQeUVudW1WYWx1ZURlc2NyaXB0b3JfVHlwZSA9IHsKLSAgUHlW
YXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKLSAgRlVMTF9NT0RVTEVfTkFNRSAi
LkVudW1WYWx1ZURlc2NyaXB0b3IiLCAgLy8gdHBfbmFtZQotICBzaXplb2YoUHlCYXNlRGVzY3Jp
cHRvciksICAgICAgICAgICAgIC8vIHRwX2Jhc2ljc2l6ZQotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRwX2l0ZW1zaXplCi0gIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfZGVhbGxvYwotICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRwX3ByaW50Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdHBfZ2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRwX3NldGF0dHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0cF9jb21wYXJlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfcmVwcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRwX2FzX251bWJlcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRwX2FzX3NlcXVlbmNlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHBfYXNfbWFwcGluZwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRwX2hhc2gKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0cF9jYWxsCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
c3RyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZ2V0YXR0
cm8KLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9zZXRhdHRy
bwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2FzX2J1ZmZl
cgotICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgIC8vIHRwX2ZsYWdzCi0g
ICJBIEVudW1WYWx1ZSBEZXNjcmlwdG9yIiwgICAgICAgICAgICAgLy8gdHBfZG9jCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfdHJhdmVyc2UKLSAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9jbGVhcgotICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3JpY2hjb21wYXJlCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfd2Vha2xpc3RvZmZzZXQKLSAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVyCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfaXRlcm5leHQKLSAgZW51bXZhbHVl
X2Rlc2NyaXB0b3I6Ok1ldGhvZHMsICAgICAgICAvLyB0cF9tZXRob2RzCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfbWVtYmVycwotICBlbnVtdmFsdWVfZGVz
Y3JpcHRvcjo6R2V0dGVycywgICAgICAgIC8vIHRwX2dldHNldAotICAmZGVzY3JpcHRvcjo6UHlC
YXNlRGVzY3JpcHRvcl9UeXBlLCAgIC8vIHRwX2Jhc2UKLX07Ci0KLVB5T2JqZWN0KiBQeUVudW1W
YWx1ZURlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoCi0gICAgY29uc3QgRW51bVZhbHVlRGVzY3Jp
cHRvciogZW51bXZhbHVlX2Rlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2NyaXB0b3I6Ok5ld0lu
dGVybmVkRGVzY3JpcHRvcigKLSAgICAgICZQeUVudW1WYWx1ZURlc2NyaXB0b3JfVHlwZSwgZW51
bXZhbHVlX2Rlc2NyaXB0b3IsIE5VTEwpOwotfQotCi1uYW1lc3BhY2UgZmlsZV9kZXNjcmlwdG9y
IHsKLQotLy8gVW5jaGVja2VkIGFjY2Vzc29yIHRvIHRoZSBDKysgcG9pbnRlci4KLXN0YXRpYyBj
b25zdCBGaWxlRGVzY3JpcHRvciogX0dldERlc2NyaXB0b3IoUHlGaWxlRGVzY3JpcHRvciAqc2Vs
ZikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGaWxlRGVzY3JpcHRvcio+KHNl
bGYtPmJhc2UuZGVzY3JpcHRvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIERlYWxsb2MoUHlGaWxlRGVz
Y3JpcHRvciogc2VsZikgewotICBQeV9YREVDUkVGKHNlbGYtPnNlcmlhbGl6ZWRfcGIpOwotICBk
ZXNjcmlwdG9yOjpEZWFsbG9jKCZzZWxmLT5iYXNlKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBH
ZXRQb29sKFB5RmlsZURlc2NyaXB0b3IgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgUHlPYmpl
Y3QqIHBvb2wgPSByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oCi0gICAgICBHZXREZXNjcmlw
dG9yUG9vbF9Gcm9tUG9vbChfR2V0RGVzY3JpcHRvcihzZWxmKS0+cG9vbCgpKSk7Ci0gIFB5X1hJ
TkNSRUYocG9vbCk7Ci0gIHJldHVybiBwb29sOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldE5h
bWUoUHlGaWxlRGVzY3JpcHRvciAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gUHlT
dHJpbmdfRnJvbUNwcFN0cmluZyhfR2V0RGVzY3JpcHRvcihzZWxmKS0+bmFtZSgpKTsKLX0KLQot
c3RhdGljIFB5T2JqZWN0KiBHZXRQYWNrYWdlKFB5RmlsZURlc2NyaXB0b3IgKnNlbGYsIHZvaWQg
KmNsb3N1cmUpIHsKLSAgcmV0dXJuIFB5U3RyaW5nX0Zyb21DcHBTdHJpbmcoX0dldERlc2NyaXB0
b3Ioc2VsZiktPnBhY2thZ2UoKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0U2VyaWFsaXpl
ZFBiKFB5RmlsZURlc2NyaXB0b3IgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgUHlPYmplY3Qg
KnNlcmlhbGl6ZWRfcGIgPSBzZWxmLT5zZXJpYWxpemVkX3BiOwotICBpZiAoc2VyaWFsaXplZF9w
YiAhPSBOVUxMKSB7Ci0gICAgUHlfSU5DUkVGKHNlcmlhbGl6ZWRfcGIpOwotICAgIHJldHVybiBz
ZXJpYWxpemVkX3BiOwotICB9Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAg
X0dldERlc2NyaXB0b3Ioc2VsZiktPkNvcHlUbygmZmlsZV9wcm90byk7Ci0gIHN0cmluZyBjb250
ZW50czsKLSAgZmlsZV9wcm90by5TZXJpYWxpemVQYXJ0aWFsVG9TdHJpbmcoJmNvbnRlbnRzKTsK
LSAgc2VsZi0+c2VyaWFsaXplZF9wYiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoCi0gICAg
ICBjb250ZW50cy5jX3N0cigpLCBjb250ZW50cy5zaXplKCkpOwotICBpZiAoc2VsZi0+c2VyaWFs
aXplZF9wYiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgUHlfSU5DUkVGKHNl
bGYtPnNlcmlhbGl6ZWRfcGIpOwotICByZXR1cm4gc2VsZi0+c2VyaWFsaXplZF9wYjsKLX0KLQot
c3RhdGljIFB5T2JqZWN0KiBHZXRNZXNzYWdlVHlwZXNCeU5hbWUoUHlGaWxlRGVzY3JpcHRvciog
c2VsZiwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gTmV3RmlsZU1lc3NhZ2VUeXBlc0J5TmFt
ZShfR2V0RGVzY3JpcHRvcihzZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0RW51bVR5
cGVzQnlOYW1lKFB5RmlsZURlc2NyaXB0b3IqIHNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0
dXJuIE5ld0ZpbGVFbnVtVHlwZXNCeU5hbWUoX0dldERlc2NyaXB0b3Ioc2VsZikpOwotfQotCi1z
dGF0aWMgUHlPYmplY3QqIEdldEV4dGVuc2lvbnNCeU5hbWUoUHlGaWxlRGVzY3JpcHRvciogc2Vs
Ziwgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gTmV3RmlsZUV4dGVuc2lvbnNCeU5hbWUoX0dl
dERlc2NyaXB0b3Ioc2VsZikpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldERlcGVuZGVuY2ll
cyhQeUZpbGVEZXNjcmlwdG9yKiBzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBOZXdG
aWxlRGVwZW5kZW5jaWVzKF9HZXREZXNjcmlwdG9yKHNlbGYpKTsKLX0KLQotc3RhdGljIFB5T2Jq
ZWN0KiBHZXRQdWJsaWNEZXBlbmRlbmNpZXMoUHlGaWxlRGVzY3JpcHRvciogc2VsZiwgdm9pZCAq
Y2xvc3VyZSkgewotICByZXR1cm4gTmV3RmlsZVB1YmxpY0RlcGVuZGVuY2llcyhfR2V0RGVzY3Jp
cHRvcihzZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0SGFzT3B0aW9ucyhQeUZpbGVE
ZXNjcmlwdG9yICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIGNvbnN0IEZpbGVPcHRpb25zJiBv
cHRpb25zKF9HZXREZXNjcmlwdG9yKHNlbGYpLT5vcHRpb25zKCkpOwotICBpZiAoJm9wdGlvbnMg
IT0gJkZpbGVPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlKCkpIHsKLSAgICBQeV9SRVRVUk5fVFJV
RTsKLSAgfSBlbHNlIHsKLSAgICBQeV9SRVRVUk5fRkFMU0U7Ci0gIH0KLX0KLXN0YXRpYyBpbnQg
U2V0SGFzT3B0aW9ucyhQeUZpbGVEZXNjcmlwdG9yICpzZWxmLCBQeU9iamVjdCAqdmFsdWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgewotICByZXR1cm4gQ2hlY2tD
YWxsZWRGcm9tR2VuZXJhdGVkRmlsZSgiaGFzX29wdGlvbnMiKTsKLX0KLQotc3RhdGljIFB5T2Jq
ZWN0KiBHZXRPcHRpb25zKFB5RmlsZURlc2NyaXB0b3IgKnNlbGYpIHsKLSAgcmV0dXJuIEdldE9y
QnVpbGRPcHRpb25zKF9HZXREZXNjcmlwdG9yKHNlbGYpKTsKLX0KLQotc3RhdGljIGludCBTZXRP
cHRpb25zKFB5RmlsZURlc2NyaXB0b3IgKnNlbGYsIFB5T2JqZWN0ICp2YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBDaGVja0NhbGxlZEZyb21H
ZW5lcmF0ZWRGaWxlKCJfb3B0aW9ucyIpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldFN5bnRh
eChQeUZpbGVEZXNjcmlwdG9yICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBQeVN0
cmluZ19JbnRlcm5Gcm9tU3RyaW5nKAotICAgICAgRmlsZURlc2NyaXB0b3I6OlN5bnRheE5hbWUo
X0dldERlc2NyaXB0b3Ioc2VsZiktPnN5bnRheCgpKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCog
Q29weVRvUHJvdG8oUHlGaWxlRGVzY3JpcHRvciAqc2VsZiwgUHlPYmplY3QgKnRhcmdldCkgewot
ICByZXR1cm4gQ29weVRvUHl0aG9uUHJvdG88RmlsZURlc2NyaXB0b3JQcm90bz4oX0dldERlc2Ny
aXB0b3Ioc2VsZiksIHRhcmdldCk7Ci19Ci0KLXN0YXRpYyBQeUdldFNldERlZiBHZXR0ZXJzW10g
PSB7Ci0gIHsgInBvb2wiLCAoZ2V0dGVyKUdldFBvb2wsIE5VTEwsICJwb29sIn0sCi0gIHsgIm5h
bWUiLCAoZ2V0dGVyKUdldE5hbWUsIE5VTEwsICJuYW1lIn0sCi0gIHsgInBhY2thZ2UiLCAoZ2V0
dGVyKUdldFBhY2thZ2UsIE5VTEwsICJwYWNrYWdlIn0sCi0gIHsgInNlcmlhbGl6ZWRfcGIiLCAo
Z2V0dGVyKUdldFNlcmlhbGl6ZWRQYn0sCi0gIHsgIm1lc3NhZ2VfdHlwZXNfYnlfbmFtZSIsIChn
ZXR0ZXIpR2V0TWVzc2FnZVR5cGVzQnlOYW1lLCBOVUxMLAotICAgICJNZXNzYWdlcyBieSBuYW1l
In0sCi0gIHsgImVudW1fdHlwZXNfYnlfbmFtZSIsIChnZXR0ZXIpR2V0RW51bVR5cGVzQnlOYW1l
LCBOVUxMLCAiRW51bXMgYnkgbmFtZSJ9LAotICB7ICJleHRlbnNpb25zX2J5X25hbWUiLCAoZ2V0
dGVyKUdldEV4dGVuc2lvbnNCeU5hbWUsIE5VTEwsCi0gICAgIkV4dGVuc2lvbnMgYnkgbmFtZSJ9
LAotICB7ICJkZXBlbmRlbmNpZXMiLCAoZ2V0dGVyKUdldERlcGVuZGVuY2llcywgTlVMTCwgIkRl
cGVuZGVuY2llcyJ9LAotICB7ICJwdWJsaWNfZGVwZW5kZW5jaWVzIiwgKGdldHRlcilHZXRQdWJs
aWNEZXBlbmRlbmNpZXMsIE5VTEwsICJEZXBlbmRlbmNpZXMifSwKLQotICB7ICJoYXNfb3B0aW9u
cyIsIChnZXR0ZXIpR2V0SGFzT3B0aW9ucywgKHNldHRlcilTZXRIYXNPcHRpb25zLCAiSGFzIE9w
dGlvbnMifSwKLSAgeyAiX29wdGlvbnMiLCAoZ2V0dGVyKU5VTEwsIChzZXR0ZXIpU2V0T3B0aW9u
cywgIk9wdGlvbnMifSwKLSAgeyAic3ludGF4IiwgKGdldHRlcilHZXRTeW50YXgsIChzZXR0ZXIp
TlVMTCwgIlN5bnRheCJ9LAotICB7TlVMTH0KLX07Ci0KLXN0YXRpYyBQeU1ldGhvZERlZiBNZXRo
b2RzW10gPSB7Ci0gIHsgIkdldE9wdGlvbnMiLCAoUHlDRnVuY3Rpb24pR2V0T3B0aW9ucywgTUVU
SF9OT0FSR1MsIH0sCi0gIHsgIkNvcHlUb1Byb3RvIiwgKFB5Q0Z1bmN0aW9uKUNvcHlUb1Byb3Rv
LCBNRVRIX08sIH0sCi0gIHtOVUxMfQotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGZpbGVfZGVzY3Jp
cHRvcgotCi1QeVR5cGVPYmplY3QgUHlGaWxlRGVzY3JpcHRvcl9UeXBlID0gewotICBQeVZhck9i
amVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICBGVUxMX01PRFVMRV9OQU1FICIuRmls
ZURlc2NyaXB0b3IiLCAgIC8vIHRwX25hbWUKLSAgc2l6ZW9mKFB5RmlsZURlc2NyaXB0b3IpLCAg
ICAgICAgICAgICAvLyB0cF9iYXNpY3NpemUKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0cF9pdGVtc2l6ZQotICAoZGVzdHJ1Y3RvcilmaWxlX2Rlc2NyaXB0b3I6
OkRlYWxsb2MsICAvLyB0cF9kZWFsbG9jCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdHBfcHJpbnQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF9nZXRhdHRyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHBfc2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRwX2NvbXBhcmUKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0cF9yZXByCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
YXNfbnVtYmVyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
YXNfc2VxdWVuY2UKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
cF9hc19tYXBwaW5nCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dHBfaGFzaAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2Nh
bGwKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9zdHIKLSAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9nZXRhdHRybwotICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3NldGF0dHJvCi0gIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfYXNfYnVmZmVyCi0gIFB5
X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgLy8gdHBfZmxhZ3MKLSAgIkEgRmls
ZSBEZXNjcmlwdG9yIiwgICAgICAgICAgICAgICAgICAvLyB0cF9kb2MKLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF90cmF2ZXJzZQotICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2NsZWFyCi0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHBfcmljaGNvbXBhcmUKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF93ZWFrbGlzdG9mZnNldAotICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2l0ZXIKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVybmV4dAotICBmaWxlX2Rlc2NyaXB0b3I6
Ok1ldGhvZHMsICAgICAgICAgICAgIC8vIHRwX21ldGhvZHMKLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0cF9tZW1iZXJzCi0gIGZpbGVfZGVzY3JpcHRvcjo6R2V0
dGVycywgICAgICAgICAgICAgLy8gdHBfZ2V0c2V0Ci0gICZkZXNjcmlwdG9yOjpQeUJhc2VEZXNj
cmlwdG9yX1R5cGUsICAgLy8gdHBfYmFzZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRwX2RpY3QKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF9kZXNjcl9nZXQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF9kZXNjcl9zZXQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF9kaWN0b2Zmc2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfaW5pdAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRwX2FsbG9jCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dHBfbmV3Ci0gIFB5T2JqZWN0X0RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZnJl
ZQotfTsKLQotUHlPYmplY3QqIFB5RmlsZURlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoCi0gICAg
Y29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGVfZGVzY3JpcHRvcikgewotICByZXR1cm4gUHlGaWxl
RGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcldpdGhTZXJpYWxpemVkUGIoZmlsZV9kZXNjcmlwdG9y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7Ci19Ci0KLVB5T2JqZWN0KiBQeUZpbGVEZXNjcmlwdG9yX0Zyb21EZXNjcmlwdG9y
V2l0aFNlcmlhbGl6ZWRQYigKLSAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZV9kZXNjcmlw
dG9yLCBQeU9iamVjdCAqc2VyaWFsaXplZF9wYikgewotICBib29sIHdhc19jcmVhdGVkOwotICBQ
eU9iamVjdCogcHlfZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I6Ok5ld0ludGVybmVkRGVzY3JpcHRv
cigKLSAgICAgICZQeUZpbGVEZXNjcmlwdG9yX1R5cGUsIGZpbGVfZGVzY3JpcHRvciwgJndhc19j
cmVhdGVkKTsKLSAgaWYgKHB5X2Rlc2NyaXB0b3IgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxM
OwotICB9Ci0gIGlmICh3YXNfY3JlYXRlZCkgewotICAgIFB5RmlsZURlc2NyaXB0b3IqIGNmaWxl
X2Rlc2NyaXB0b3IgPQotICAgICAgICByZWludGVycHJldF9jYXN0PFB5RmlsZURlc2NyaXB0b3Iq
PihweV9kZXNjcmlwdG9yKTsKLSAgICBQeV9YSU5DUkVGKHNlcmlhbGl6ZWRfcGIpOwotICAgIGNm
aWxlX2Rlc2NyaXB0b3ItPnNlcmlhbGl6ZWRfcGIgPSBzZXJpYWxpemVkX3BiOwotICB9Ci0gIC8v
IFRPRE8oYW1hdXJ5ZmEpOiBJbiB0aGUgY2FzZSBvZiBhIGNhY2hlZCBvYmplY3QsIGNoZWNrIHRo
YXQgc2VyaWFsaXplZF9wYgotICAvLyBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuCi0KLSAgcmV0dXJu
IHB5X2Rlc2NyaXB0b3I7Ci19Ci0KLWNvbnN0IEZpbGVEZXNjcmlwdG9yKiBQeUZpbGVEZXNjcmlw
dG9yX0FzRGVzY3JpcHRvcihQeU9iamVjdCogb2JqKSB7Ci0gIGlmICghUHlPYmplY3RfVHlwZUNo
ZWNrKG9iaiwgJlB5RmlsZURlc2NyaXB0b3JfVHlwZSkpIHsKLSAgICBQeUVycl9TZXRTdHJpbmco
UHlFeGNfVHlwZUVycm9yLCAiTm90IGEgRmlsZURlc2NyaXB0b3IiKTsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGaWxlRGVzY3JpcHRvcio+
KAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxQeUJhc2VEZXNjcmlwdG9yKj4ob2JqKS0+ZGVzY3Jp
cHRvcik7Ci19Ci0KLW5hbWVzcGFjZSBvbmVvZl9kZXNjcmlwdG9yIHsKLQotLy8gVW5jaGVja2Vk
IGFjY2Vzc29yIHRvIHRoZSBDKysgcG9pbnRlci4KLXN0YXRpYyBjb25zdCBPbmVvZkRlc2NyaXB0
b3IqIF9HZXREZXNjcmlwdG9yKAotICAgIFB5QmFzZURlc2NyaXB0b3IgKnNlbGYpIHsKLSAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT25lb2ZEZXNjcmlwdG9yKj4oc2VsZi0+ZGVzY3Jp
cHRvcik7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0TmFtZShQeUJhc2VEZXNjcmlwdG9yKiBz
ZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBQeVN0cmluZ19Gcm9tQ3BwU3RyaW5nKF9H
ZXREZXNjcmlwdG9yKHNlbGYpLT5uYW1lKCkpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEdldEZ1
bGxOYW1lKFB5QmFzZURlc2NyaXB0b3IqIHNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJu
IFB5U3RyaW5nX0Zyb21DcHBTdHJpbmcoX0dldERlc2NyaXB0b3Ioc2VsZiktPmZ1bGxfbmFtZSgp
KTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBHZXRJbmRleChQeUJhc2VEZXNjcmlwdG9yICpzZWxm
LCB2b2lkICpjbG9zdXJlKSB7Ci0gIHJldHVybiBQeUludF9Gcm9tTG9uZyhfR2V0RGVzY3JpcHRv
cihzZWxmKS0+aW5kZXgoKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0RmllbGRzKFB5QmFz
ZURlc2NyaXB0b3IqIHNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKLSAgcmV0dXJuIE5ld09uZW9mRmll
bGRzU2VxKF9HZXREZXNjcmlwdG9yKHNlbGYpKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBHZXRD
b250YWluaW5nVHlwZShQeUJhc2VEZXNjcmlwdG9yICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7Ci0g
IGNvbnN0IERlc2NyaXB0b3IqIGNvbnRhaW5pbmdfdHlwZSA9Ci0gICAgICBfR2V0RGVzY3JpcHRv
cihzZWxmKS0+Y29udGFpbmluZ190eXBlKCk7Ci0gIGlmIChjb250YWluaW5nX3R5cGUpIHsKLSAg
ICByZXR1cm4gUHlNZXNzYWdlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihjb250YWluaW5nX3R5
cGUpOwotICB9IGVsc2UgewotICAgIFB5X1JFVFVSTl9OT05FOwotICB9Ci19Ci0KLXN0YXRpYyBQ
eUdldFNldERlZiBHZXR0ZXJzW10gPSB7Ci0gIHsgIm5hbWUiLCAoZ2V0dGVyKUdldE5hbWUsIE5V
TEwsICJOYW1lIn0sCi0gIHsgImZ1bGxfbmFtZSIsIChnZXR0ZXIpR2V0RnVsbE5hbWUsIE5VTEws
ICJGdWxsIG5hbWUifSwKLSAgeyAiaW5kZXgiLCAoZ2V0dGVyKUdldEluZGV4LCBOVUxMLCAiSW5k
ZXgifSwKLQotICB7ICJjb250YWluaW5nX3R5cGUiLCAoZ2V0dGVyKUdldENvbnRhaW5pbmdUeXBl
LCBOVUxMLCAiQ29udGFpbmluZyB0eXBlIn0sCi0gIHsgImZpZWxkcyIsIChnZXR0ZXIpR2V0Rmll
bGRzLCBOVUxMLCAiRmllbGRzIn0sCi0gIHtOVUxMfQotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG9u
ZW9mX2Rlc2NyaXB0b3IKLQotUHlUeXBlT2JqZWN0IFB5T25lb2ZEZXNjcmlwdG9yX1R5cGUgPSB7
Ci0gIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCi0gIEZVTExfTU9EVUxF
X05BTUUgIi5PbmVvZkRlc2NyaXB0b3IiLCAgLy8gdHBfbmFtZQotICBzaXplb2YoUHlCYXNlRGVz
Y3JpcHRvciksICAgICAgICAgICAgIC8vIHRwX2Jhc2ljc2l6ZQotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2l0ZW1zaXplCi0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZGVhbGxvYwotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRwX3ByaW50Ci0gIDAsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdHBfZ2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRwX3NldGF0dHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0cF9jb21wYXJlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdHBfcmVwcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRwX2FzX251bWJlcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRwX2FzX3NlcXVlbmNlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfYXNfbWFwcGluZwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRwX2hhc2gKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0cF9jYWxsCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dHBfc3RyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZ2V0
YXR0cm8KLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9zZXRh
dHRybwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2FzX2J1
ZmZlcgotICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgIC8vIHRwX2ZsYWdz
Ci0gICJBIE9uZW9mIERlc2NyaXB0b3IiLCAgICAgICAgICAgICAgICAgLy8gdHBfZG9jCi0gIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfdHJhdmVyc2UKLSAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9jbGVhcgotICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3JpY2hjb21wYXJlCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfd2Vha2xpc3RvZmZzZXQKLSAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVyCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfaXRlcm5leHQKLSAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9tZXRob2RzCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfbWVtYmVycwotICBvbmVvZl9kZXNj
cmlwdG9yOjpHZXR0ZXJzLCAgICAgICAgICAgIC8vIHRwX2dldHNldAotICAmZGVzY3JpcHRvcjo6
UHlCYXNlRGVzY3JpcHRvcl9UeXBlLCAgIC8vIHRwX2Jhc2UKLX07Ci0KLVB5T2JqZWN0KiBQeU9u
ZW9mRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcigKLSAgICBjb25zdCBPbmVvZkRlc2NyaXB0b3Iq
IG9uZW9mX2Rlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2NyaXB0b3I6Ok5ld0ludGVybmVkRGVz
Y3JpcHRvcigKLSAgICAgICZQeU9uZW9mRGVzY3JpcHRvcl9UeXBlLCBvbmVvZl9kZXNjcmlwdG9y
LCBOVUxMKTsKLX0KLQotLy8gQWRkIGEgZW51bSB2YWx1ZXMgdG8gYSB0eXBlIGRpY3Rpb25hcnku
Ci1zdGF0aWMgYm9vbCBBZGRFbnVtVmFsdWVzKFB5VHlwZU9iamVjdCAqdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRW51bURlc2NyaXB0b3IqIGVudW1fZGVzY3JpcHRvcikg
ewotICBmb3IgKGludCBpID0gMDsgaSA8IGVudW1fZGVzY3JpcHRvci0+dmFsdWVfY291bnQoKTsg
KytpKSB7Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWUgPSBlbnVtX2Rlc2Ny
aXB0b3ItPnZhbHVlKGkpOwotICAgIFNjb3BlZFB5T2JqZWN0UHRyIG9iaihQeUludF9Gcm9tTG9u
Zyh2YWx1ZS0+bnVtYmVyKCkpKTsKLSAgICBpZiAob2JqID09IE5VTEwpIHsKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKHR5cGUtPnRwX2Rp
Y3QsIHZhbHVlLT5uYW1lKCkuY19zdHIoKSwgb2JqLmdldCgpKSA8Ci0gICAgICAgIDApIHsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBib29sIEFkZEludENvbnN0YW50KFB5VHlwZU9iamVjdCAqdHlwZSwgY29uc3QgY2hhciogbmFt
ZSwgaW50IHZhbHVlKSB7Ci0gIFNjb3BlZFB5T2JqZWN0UHRyIG9iaihQeUludF9Gcm9tTG9uZyh2
YWx1ZSkpOwotICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgbmFtZSwg
b2JqLmdldCgpKSA8IDApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLQotYm9vbCBJbml0RGVzY3JpcHRvcigpIHsKLSAgaWYgKFB5VHlwZV9SZWFkeSgmUHlN
ZXNzYWdlRGVzY3JpcHRvcl9UeXBlKSA8IDApCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGlmIChQ
eVR5cGVfUmVhZHkoJlB5RmllbGREZXNjcmlwdG9yX1R5cGUpIDwgMCkKLSAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgaWYgKCFBZGRFbnVtVmFsdWVzKCZQeUZpZWxkRGVzY3JpcHRvcl9UeXBlLAotICAg
ICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxhYmVsX2Rlc2NyaXB0b3Io
KSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKCFBZGRFbnVtVmFsdWVzKCZQeUZp
ZWxkRGVzY3JpcHRvcl9UeXBlLAotICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9y
UHJvdG86OlR5cGVfZGVzY3JpcHRvcigpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotI2Rl
ZmluZSBBRERfRklFTERERVNDX0NPTlNUQU5UKE5BTUUpIEFkZEludENvbnN0YW50KCBcCi0gICAg
JlB5RmllbGREZXNjcmlwdG9yX1R5cGUsICNOQU1FLCBGaWVsZERlc2NyaXB0b3I6Ok5BTUUpCi0g
IGlmICghQUREX0ZJRUxEREVTQ19DT05TVEFOVChDUFBUWVBFX0lOVDMyKSB8fAotICAgICAgIUFE
RF9GSUVMRERFU0NfQ09OU1RBTlQoQ1BQVFlQRV9JTlQ2NCkgfHwKLSAgICAgICFBRERfRklFTERE
RVNDX0NPTlNUQU5UKENQUFRZUEVfVUlOVDMyKSB8fAotICAgICAgIUFERF9GSUVMRERFU0NfQ09O
U1RBTlQoQ1BQVFlQRV9VSU5UNjQpIHx8Ci0gICAgICAhQUREX0ZJRUxEREVTQ19DT05TVEFOVChD
UFBUWVBFX0RPVUJMRSkgfHwKLSAgICAgICFBRERfRklFTERERVNDX0NPTlNUQU5UKENQUFRZUEVf
RkxPQVQpIHx8Ci0gICAgICAhQUREX0ZJRUxEREVTQ19DT05TVEFOVChDUFBUWVBFX0JPT0wpIHx8
Ci0gICAgICAhQUREX0ZJRUxEREVTQ19DT05TVEFOVChDUFBUWVBFX0VOVU0pIHx8Ci0gICAgICAh
QUREX0ZJRUxEREVTQ19DT05TVEFOVChDUFBUWVBFX1NUUklORykgfHwKLSAgICAgICFBRERfRklF
TERERVNDX0NPTlNUQU5UKENQUFRZUEVfTUVTU0FHRSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0KLSN1bmRlZiBBRERfRklFTERERVNDX0NPTlNUQU5UCi0KLSAgaWYgKFB5VHlwZV9SZWFkeSgm
UHlFbnVtRGVzY3JpcHRvcl9UeXBlKSA8IDApCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGlmIChQ
eVR5cGVfUmVhZHkoJlB5RW51bVZhbHVlRGVzY3JpcHRvcl9UeXBlKSA8IDApCi0gICAgcmV0dXJu
IGZhbHNlOwotCi0gIGlmIChQeVR5cGVfUmVhZHkoJlB5RmlsZURlc2NyaXB0b3JfVHlwZSkgPCAw
KQotICAgIHJldHVybiBmYWxzZTsKLQotICBpZiAoUHlUeXBlX1JlYWR5KCZQeU9uZW9mRGVzY3Jp
cHRvcl9UeXBlKSA8IDApCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGlmICghSW5pdERlc2NyaXB0
b3JNYXBwaW5nVHlwZXMoKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBweXRob24KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAg
Ly8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5
ZXh0L2Rlc2NyaXB0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9y
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViOTlkZjE4MmU3OWE0MDNlZGExZDk4
ODBkZGUxMmVhM2NjMmU1NGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3IuaAorKysgL2Rl
di9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyBBdXRob3I6IHBldGFyQGdvb2dsZS5jb20gKFBldGFyIFBldHJvdikKLQotI2lmbmRl
ZiBHT09HTEVfUFJPVE9CVUZfUFlUSE9OX0NQUF9ERVNDUklQVE9SX0hfXwotI2RlZmluZSBHT09H
TEVfUFJPVE9CVUZfUFlUSE9OX0NQUF9ERVNDUklQVE9SX0hfXwotCi0jaW5jbHVkZSA8UHl0aG9u
Lmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgcHl0aG9uIHsKLQot
ZXh0ZXJuIFB5VHlwZU9iamVjdCBQeU1lc3NhZ2VEZXNjcmlwdG9yX1R5cGU7Ci1leHRlcm4gUHlU
eXBlT2JqZWN0IFB5RmllbGREZXNjcmlwdG9yX1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFB5
RW51bURlc2NyaXB0b3JfVHlwZTsKLWV4dGVybiBQeVR5cGVPYmplY3QgUHlFbnVtVmFsdWVEZXNj
cmlwdG9yX1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFB5RmlsZURlc2NyaXB0b3JfVHlwZTsK
LWV4dGVybiBQeVR5cGVPYmplY3QgUHlPbmVvZkRlc2NyaXB0b3JfVHlwZTsKLQotLy8gV3JhcHMg
YSBEZXNjcmlwdG9yIGluIGEgUHl0aG9uIG9iamVjdC4KLS8vIFRoZSBDKysgcG9pbnRlciBpcyB1
c3VhbGx5IGJvcnJvd2VkIGZyb20gdGhlIGdsb2JhbCBEZXNjcmlwdG9yUG9vbC4KLS8vIEluIGFu
eSBjYXNlLCBpdCBtdXN0IHN0YXkgYWxpdmUgYXMgbG9uZyBhcyB0aGUgUHl0aG9uIG9iamVjdC4K
LS8vIFJldHVybnMgYSBuZXcgcmVmZXJlbmNlLgotUHlPYmplY3QqIFB5TWVzc2FnZURlc2NyaXB0
b3JfRnJvbURlc2NyaXB0b3IoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci1QeU9iamVj
dCogUHlGaWVsZERlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yKTsKLVB5T2JqZWN0KiBQeUVudW1EZXNjcmlwdG9yX0Zyb21EZXNjcmlwdG9y
KGNvbnN0IEVudW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLVB5T2JqZWN0KiBQeUVudW1WYWx1
ZURlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoCi0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRv
ciogZGVzY3JpcHRvcik7Ci1QeU9iamVjdCogUHlPbmVvZkRlc2NyaXB0b3JfRnJvbURlc2NyaXB0
b3IoY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLVB5T2JqZWN0KiBQeUZpbGVE
ZXNjcmlwdG9yX0Zyb21EZXNjcmlwdG9yKAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxl
X2Rlc2NyaXB0b3IpOwotCi0vLyBBbHRlcm5hdGUgY29uc3RydWN0b3Igb2YgUHlGaWxlRGVzY3Jp
cHRvciwgdXNlZCB3aGVuIHdlIGFscmVhZHkgaGF2ZSBhCi0vLyBzZXJpYWxpemVkIEZpbGVEZXNj
cmlwdG9yUHJvdG8gdGhhdCBjYW4gYmUgY2FjaGVkLgotLy8gUmV0dXJucyBhIG5ldyByZWZlcmVu
Y2UuCi1QeU9iamVjdCogUHlGaWxlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcldpdGhTZXJpYWxp
emVkUGIoCi0gICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGVfZGVzY3JpcHRvciwgUHlPYmpl
Y3QqIHNlcmlhbGl6ZWRfcGIpOwotCi0vLyBSZXR1cm4gdGhlIEMrKyBkZXNjcmlwdG9yIHBvaW50
ZXIuCi0vLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcGFyYW1ldGVyIHR5cGU7IG9uIGVycm9y
LCByZXR1cm4gTlVMTCB3aXRoIGEgUHl0aG9uCi0vLyBleGNlcHRpb24gc2V0LgotY29uc3QgRGVz
Y3JpcHRvciogUHlNZXNzYWdlRGVzY3JpcHRvcl9Bc0Rlc2NyaXB0b3IoUHlPYmplY3QqIG9iaik7
Ci1jb25zdCBGaWVsZERlc2NyaXB0b3IqIFB5RmllbGREZXNjcmlwdG9yX0FzRGVzY3JpcHRvcihQ
eU9iamVjdCogb2JqKTsKLWNvbnN0IEVudW1EZXNjcmlwdG9yKiBQeUVudW1EZXNjcmlwdG9yX0Fz
RGVzY3JpcHRvcihQeU9iamVjdCogb2JqKTsKLWNvbnN0IEZpbGVEZXNjcmlwdG9yKiBQeUZpbGVE
ZXNjcmlwdG9yX0FzRGVzY3JpcHRvcihQeU9iamVjdCogb2JqKTsKLQotLy8gUmV0dXJucyB0aGUg
cmF3IEMrKyBwb2ludGVyLgotY29uc3Qgdm9pZCogUHlEZXNjcmlwdG9yX0FzVm9pZFB0cihQeU9i
amVjdCogb2JqKTsKLQotLy8gQ2hlY2sgdGhhdCB0aGUgY2FsbGluZyBQeXRob24gY29kZSBpcyB0
aGUgZ2xvYmFsIHNjb3BlIG9mIGEgX3BiMi5weSBtb2R1bGUuCi0vLyBUaGlzIGZ1bmN0aW9uIGlz
IHVzZWQgdG8gc3VwcG9ydCB0aGUgY3VycmVudCBjb2RlIGdlbmVyYXRlZCBieSB0aGUgcHJvdG8K
LS8vIGNvbXBpbGVyLCB3aGljaCBpbnNpc3RzIG9uIG1vZGlmeWluZyBkZXNjcmlwdG9ycyBhZnRl
ciB0aGV5IGhhdmUgYmVlbgotLy8gY3JlYXRlZC4KLS8vCi0vLyBzdGFja2xldmVsIGluZGljYXRl
cyB3aGljaCBQeXRob24gZnJhbWUgc2hvdWxkIGJlIHRoZSBfcGIyLnB5IG1vZHVsZS4KLS8vCi0v
LyBEb24ndCB1c2UgdGhpcyBmdW5jdGlvbiBvdXRzaWRlIGRlc2NyaXB0b3IgY2xhc3Nlcy4KLWJv
b2wgX0NhbGxlZEZyb21HZW5lcmF0ZWRGaWxlKGludCBzdGFja2xldmVsKTsKLQotYm9vbCBJbml0
RGVzY3JpcHRvcigpOwotCi19ICAvLyBuYW1lc3BhY2UgcHl0aG9uCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJP
VE9CVUZfUFlUSE9OX0NQUF9ERVNDUklQVE9SX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xl
L3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfY29udGFpbmVycy5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9w
cm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yX2NvbnRhaW5lcnMuY2MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGU1MDVkODEyMmM0NTQyMDJmOTJjOTViNDU3ODA2Yjk1MTRiZDZmN2QuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xl
L3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfY29udGFpbmVycy5jYworKysgL2Rldi9udWxsCkBA
IC0xLDE2NTIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8v
IE1hcHBpbmdzIGFuZCBTZXF1ZW5jZXMgb2YgZGVzY3JpcHRvcnMuCi0vLyBVc2VkIGJ5IERlc2Ny
aXB0b3IuZmllbGRzX2J5X25hbWUsIEVudW1EZXNjcmlwdG9yLnZhbHVlcy4uLgotLy8KLS8vIFRo
ZXkgYXZvaWQgdGhlIGFsbG9jYXRpb24gb2YgYSBmdWxsIGRpY3Rpb25hcnkgb3IgYSBmdWxsIGxp
c3Q6IHRoZXkgc2ltcGx5Ci0vLyBzdG9yZSBhIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBkZXNjcmlw
dG9yLCB1c2UgdGhlIEMrKyBEZXNjcmlwdG9yIG1ldGhvZHMgKHNlZQotLy8gZ29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IuaCkgdG8gcmV0cmlldmUgb3RoZXIgZGVzY3JpcHRvcnMsIGFuZCBjcmVh
dGUKLS8vIFB5dGhvbiBvYmplY3RzIG9uIHRoZSBmbHkuCi0vLwotLy8gVGhlIGNvbnRhaW5lcnMg
ZnVsbHkgY29uZm9ybSB0byBhYmMuTWFwcGluZyBhbmQgYWJjLlNlcXVlbmNlLCBhbmQgYmVoYXZl
IGp1c3QKLS8vIGxpa2UgcmVhZC1vbmx5IGRpY3Rpb25hcmllcyBhbmQgbGlzdHMuCi0vLwotLy8g
QmVjYXVzZSB0aGUgaW50ZXJmYWNlIG9mIEMrKyBEZXNjcmlwdG9ycyBpcyBxdWl0ZSByZWd1bGFy
LCB0aGlzIGZpbGUgYWN0dWFsbHkKLS8vIGRlZmluZXMgb25seSB0aHJlZSB0eXBlcywgdGhlIGV4
YWN0IGJlaGF2aW9yIG9mIGEgY29udGFpbmVyIGlzIGNvbnRyb2xsZWQgYnkKLS8vIGEgRGVzY3Jp
cHRvckNvbnRhaW5lckRlZiBzdHJ1Y3R1cmUsIHdoaWNoIGNvbnRhaW5zIGZ1bmN0aW9ucyB0aGF0
IHVzZXMgdGhlCi0vLyBwdWJsaWMgRGVzY3JpcHRvciBBUEkuCi0vLwotLy8gTm90ZTogVGhpcyBE
ZXNjcmlwdG9yQ29udGFpbmVyRGVmIGlzIHNpbWlsYXIgdG8gdGhlICJ2aXJ0dWFsIG1ldGhvZHMg
dGFibGUiCi0vLyB0aGF0IGEgQysrIGNvbXBpbGVyIGdlbmVyYXRlcyBmb3IgYSBjbGFzcy4gV2Ug
aGF2ZSB0byBtYWtlIGl0IGV4cGxpY2l0Ci0vLyBiZWNhdXNlIHRoZSBQeXRob24gQVBJIGlzIGJh
c2VkIG9uIEMsIGFuZCBkb2VzIG5vdCBwbGF5IHdlbGwgd2l0aCBDKysKLS8vIGluaGVyaXRhbmNl
LgotCi0jaW5jbHVkZSA8UHl0aG9uLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yX2Nv
bnRhaW5lcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQvZGVzY3JpcHRvcl9w
b29sLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3IuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQvc2NvcGVkX3B5b2JqZWN0X3B0ci5oPgotCi0j
aWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0gICNkZWZpbmUgUHlTdHJpbmdfRnJvbVN0cmluZ0Fu
ZFNpemUgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplCi0gICNkZWZpbmUgUHlTdHJpbmdfRnJv
bUZvcm1hdCBQeVVuaWNvZGVfRnJvbUZvcm1hdAotICAjZGVmaW5lIFB5SW50X0Zyb21Mb25nIFB5
TG9uZ19Gcm9tTG9uZwotICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDMwMDAwCi0gICAgI2Vy
cm9yICJQeXRob24gMy4wIC0gMy4yIGFyZSBub3Qgc3VwcG9ydGVkLiIKLSAgI2VuZGlmCi0gICNk
ZWZpbmUgUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKG9iLCBjaGFycHAsIHNpemVwKSBcCi0gICAg
KFB5VW5pY29kZV9DaGVjayhvYik/IFwKLSAgICAgICAoKCooY2hhcnBwKSA9IFB5VW5pY29kZV9B
c1VURjhBbmRTaXplKG9iLCAoc2l6ZXApKSkgPT0gTlVMTD8gLTE6IDApOiBcCi0gICAgICAgUHlC
eXRlc19Bc1N0cmluZ0FuZFNpemUob2IsIChjaGFycHApLCAoc2l6ZXApKSkKLSNlbmRpZgotCi1u
YW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgcHl0aG9u
IHsKLQotc3RydWN0IFB5Q29udGFpbmVyOwotCi10eXBlZGVmIGludCAoKkNvdW50TWV0aG9kKShQ
eUNvbnRhaW5lciogc2VsZik7Ci10eXBlZGVmIGNvbnN0IHZvaWQqICgqR2V0QnlJbmRleE1ldGhv
ZCkoUHlDb250YWluZXIqIHNlbGYsIGludCBpbmRleCk7Ci10eXBlZGVmIGNvbnN0IHZvaWQqICgq
R2V0QnlOYW1lTWV0aG9kKShQeUNvbnRhaW5lciogc2VsZiwgY29uc3Qgc3RyaW5nJiBuYW1lKTsK
LXR5cGVkZWYgY29uc3Qgdm9pZCogKCpHZXRCeUNhbWVsY2FzZU5hbWVNZXRob2QpKFB5Q29udGFp
bmVyKiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RyaW5nJiBuYW1lKTsKLXR5cGVkZWYgY29uc3Qgdm9pZCogKCpHZXRCeU51bWJl
ck1ldGhvZCkoUHlDb250YWluZXIqIHNlbGYsIGludCBpbmRleCk7Ci10eXBlZGVmIFB5T2JqZWN0
KiAoKk5ld09iamVjdEZyb21JdGVtTWV0aG9kKShjb25zdCB2b2lkKiBkZXNjcmlwdG9yKTsKLXR5
cGVkZWYgY29uc3Qgc3RyaW5nJiAoKkdldEl0ZW1OYW1lTWV0aG9kKShjb25zdCB2b2lkKiBkZXNj
cmlwdG9yKTsKLXR5cGVkZWYgY29uc3Qgc3RyaW5nJiAoKkdldEl0ZW1DYW1lbGNhc2VOYW1lTWV0
aG9kKShjb25zdCB2b2lkKiBkZXNjcmlwdG9yKTsKLXR5cGVkZWYgaW50ICgqR2V0SXRlbU51bWJl
ck1ldGhvZCkoY29uc3Qgdm9pZCogZGVzY3JpcHRvcik7Ci10eXBlZGVmIGludCAoKkdldEl0ZW1J
bmRleE1ldGhvZCkoY29uc3Qgdm9pZCogZGVzY3JpcHRvcik7Ci0KLXN0cnVjdCBEZXNjcmlwdG9y
Q29udGFpbmVyRGVmIHsKLSAgY29uc3QgY2hhciogbWFwcGluZ19uYW1lOwotICAvLyBSZXR1cm5z
IHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNvbnRhaW5lci4KLSAgQ291bnRNZXRob2QgY291
bnRfZm47Ci0gIC8vIFJldHJpZXZlIGl0ZW0gYnkgaW5kZXggKHVzdWFsbHkgdGhlIG9yZGVyIG9m
IGRlY2xhcmF0aW9uIGluIHRoZSBwcm90byBmaWxlKQotICAvLyBVc2VkIGJ5IHNlcXVlbmNlcywg
YnV0IGFsc28gaXRlcmF0b3JzLiAwIDw9IGluZGV4IDwgQ291bnQoKS4KLSAgR2V0QnlJbmRleE1l
dGhvZCBnZXRfYnlfaW5kZXhfZm47Ci0gIC8vIFJldHJpZXZlIGl0ZW0gYnkgbmFtZSAodXN1YWxs
eSBhIGNhbGwgdG8gc29tZSAnRmluZEJ5TmFtZScgbWV0aG9kKS4KLSAgLy8gVXNlZCBieSAiYnlf
bmFtZSIgbWFwcGluZ3MuCi0gIEdldEJ5TmFtZU1ldGhvZCBnZXRfYnlfbmFtZV9mbjsKLSAgLy8g
UmV0cmlldmUgaXRlbSBieSBjYW1lbGNhc2UgbmFtZSAodXN1YWxseSBhIGNhbGwgdG8gc29tZQot
ICAvLyAnRmluZEJ5Q2FtZWxjYXNlTmFtZScgbWV0aG9kKS4gVXNlZCBieSAiYnlfY2FtZWxjYXNl
X25hbWUiIG1hcHBpbmdzLgotICBHZXRCeUNhbWVsY2FzZU5hbWVNZXRob2QgZ2V0X2J5X2NhbWVs
Y2FzZV9uYW1lX2ZuOwotICAvLyBSZXRyaWV2ZSBpdGVtIGJ5IGRlY2xhcmVkIG51bWJlciAoZmll
bGQgdGFnLCBvciBlbnVtIHZhbHVlKS4KLSAgLy8gVXNlZCBieSAiYnlfbnVtYmVyIiBtYXBwaW5n
cy4KLSAgR2V0QnlOdW1iZXJNZXRob2QgZ2V0X2J5X251bWJlcl9mbjsKLSAgLy8gQ29udmVydHMg
YSBpdGVtIEMrKyBkZXNjcmlwdG9yIHRvIGEgUHl0aG9uIG9iamVjdC4gUmV0dXJucyBhIG5ldyBy
ZWZlcmVuY2UuCi0gIE5ld09iamVjdEZyb21JdGVtTWV0aG9kIG5ld19vYmplY3RfZnJvbV9pdGVt
X2ZuOwotICAvLyBSZXRyaWV2ZSB0aGUgbmFtZSBvZiBhbiBpdGVtLiBVc2VkIGJ5IGl0ZXJhdG9y
cyBvbiAiYnlfbmFtZSIgbWFwcGluZ3MuCi0gIEdldEl0ZW1OYW1lTWV0aG9kIGdldF9pdGVtX25h
bWVfZm47Ci0gIC8vIFJldHJpZXZlIHRoZSBjYW1lbGNhc2UgbmFtZSBvZiBhbiBpdGVtLiBVc2Vk
IGJ5IGl0ZXJhdG9ycyBvbgotICAvLyAiYnlfY2FtZWxjYXNlX25hbWUiIG1hcHBpbmdzLgotICBH
ZXRJdGVtQ2FtZWxjYXNlTmFtZU1ldGhvZCBnZXRfaXRlbV9jYW1lbGNhc2VfbmFtZV9mbjsKLSAg
Ly8gUmV0cmlldmUgdGhlIG51bWJlciBvZiBhbiBpdGVtLiBVc2VkIGJ5IGl0ZXJhdG9ycyBvbiAi
YnlfbnVtYmVyIiBtYXBwaW5ncy4KLSAgR2V0SXRlbU51bWJlck1ldGhvZCBnZXRfaXRlbV9udW1i
ZXJfZm47Ci0gIC8vIFJldHJpZXZlIHRoZSBpbmRleCBvZiBhbiBpdGVtIGZvciB0aGUgY29udGFp
bmVyIHR5cGUuCi0gIC8vIFVzZWQgYnkgIl9fY29udGFpbnNfXyIuCi0gIC8vIElmIG5vdCBzZXQs
ICJ4IGluIHNlcXVlbmNlIiB3aWxsIGRvIGEgbGluZWFyIHNlYXJjaC4KLSAgR2V0SXRlbUluZGV4
TWV0aG9kIGdldF9pdGVtX2luZGV4X2ZuOwotfTsKLQotc3RydWN0IFB5Q29udGFpbmVyIHsKLSAg
UHlPYmplY3RfSEVBRAotCi0gIC8vIFRoZSBwcm90bzIgZGVzY3JpcHRvciB0aGlzIGNvbnRhaW5l
ciBiZWxvbmdzIHRvIHRoZSBnbG9iYWwgRGVzY3JpcHRvclBvb2wuCi0gIGNvbnN0IHZvaWQqIGRl
c2NyaXB0b3I7Ci0KLSAgLy8gQSBwb2ludGVyIHRvIGEgc3RhdGljIHN0cnVjdHVyZSB3aXRoIGZ1
bmN0aW9uIHBvaW50ZXJzIHRoYXQgY29udHJvbCB0aGUKLSAgLy8gYmVoYXZpb3Igb2YgdGhlIGNv
bnRhaW5lci4gVmVyeSBzaW1pbGFyIHRvIHRoZSB0YWJsZSBvZiB2aXJ0dWFsIGZ1bmN0aW9ucwot
ICAvLyBvZiBhIEMrKyBjbGFzcy4KLSAgY29uc3QgRGVzY3JpcHRvckNvbnRhaW5lckRlZiogY29u
dGFpbmVyX2RlZjsKLQotICAvLyBUaGUga2luZCBvZiBjb250YWluZXI6IGxpc3QsIG9yIGRpY3Qg
YnkgbmFtZSBvciB2YWx1ZS4KLSAgZW51bSBDb250YWluZXJLaW5kIHsKLSAgICBLSU5EX1NFUVVF
TkNFLAotICAgIEtJTkRfQllOQU1FLAotICAgIEtJTkRfQllDQU1FTENBU0VOQU1FLAotICAgIEtJ
TkRfQllOVU1CRVIsCi0gIH0ga2luZDsKLX07Ci0KLXN0cnVjdCBQeUNvbnRhaW5lckl0ZXJhdG9y
IHsKLSAgUHlPYmplY3RfSEVBRAotCi0gIC8vIFRoZSBjb250YWluZXIgd2UgYXJlIGl0ZXJhdGlu
ZyBvdmVyLiBPd24gYSByZWZlcmVuY2UuCi0gIFB5Q29udGFpbmVyKiBjb250YWluZXI7Ci0KLSAg
Ly8gVGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdG9yLgotICBpbnQgaW5kZXg7Ci0KLSAg
Ly8gVGhlIGtpbmQgb2YgY29udGFpbmVyOiBsaXN0LCBvciBkaWN0IGJ5IG5hbWUgb3IgdmFsdWUu
Ci0gIGVudW0gSXRlcktpbmQgewotICAgIEtJTkRfSVRFUktFWSwKLSAgICBLSU5EX0lURVJWQUxV
RSwKLSAgICBLSU5EX0lURVJJVEVNLAotICAgIEtJTkRfSVRFUlZBTFVFX1JFVkVSU0VELCAgLy8g
Rm9yIHNlcXVlbmNlcwotICB9IGtpbmQ7Ci19OwotCi1uYW1lc3BhY2UgZGVzY3JpcHRvciB7Ci0K
LS8vIFJldHVybnMgdGhlIEMrKyBpdGVtIGRlc2NyaXB0b3IgZm9yIGEgZ2l2ZW4gUHl0aG9uIGtl
eS4KLS8vIFdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgZm91bmQsIHJldHVybiB0cnVlIGFuZCBzZXQg
Kml0ZW0uCi0vLyBXaGVuIHRoZSBkZXNjcmlwdG9yIGlzIG5vdCBmb3VuZCwgcmV0dXJuIHRydWUs
IGJ1dCBzZXQgKml0ZW0gdG8gTlVMTC4KLS8vIE9uIGVycm9yLCByZXR1cm5zIGZhbHNlIHdpdGgg
YW4gZXhjZXB0aW9uIHNldC4KLXN0YXRpYyBib29sIF9HZXRJdGVtQnlLZXkoUHlDb250YWluZXIq
IHNlbGYsIFB5T2JqZWN0KiBrZXksIGNvbnN0IHZvaWQqKiBpdGVtKSB7Ci0gIHN3aXRjaCAoc2Vs
Zi0+a2luZCkgewotICAgIGNhc2UgUHlDb250YWluZXI6OktJTkRfQllOQU1FOgotICAgICAgewot
ICAgICAgICBjaGFyKiBuYW1lOwotICAgICAgICBQeV9zc2l6ZV90IG5hbWVfc2l6ZTsKLSAgICAg
ICAgaWYgKFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZShrZXksICZuYW1lLCAmbmFtZV9zaXplKSA8
IDApIHsKLSAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJy
b3IpKSB7Ci0gICAgICAgICAgICAvLyBOb3QgYSBzdHJpbmcsIGNhbm5vdCBiZSBpbiB0aGUgY29u
dGFpbmVyLgotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICppdGVtID0g
TlVMTDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgKml0ZW0gPSBzZWxmLT5jb250YWluZXJf
ZGVmLT5nZXRfYnlfbmFtZV9mbigKLSAgICAgICAgICAgIHNlbGYsIHN0cmluZyhuYW1lLCBuYW1l
X3NpemUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgY2FzZSBQeUNvbnRh
aW5lcjo6S0lORF9CWUNBTUVMQ0FTRU5BTUU6Ci0gICAgICB7Ci0gICAgICAgIGNoYXIqIGNhbWVs
Y2FzZV9uYW1lOwotICAgICAgICBQeV9zc2l6ZV90IG5hbWVfc2l6ZTsKLSAgICAgICAgaWYgKFB5
U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZShrZXksICZjYW1lbGNhc2VfbmFtZSwgJm5hbWVfc2l6ZSkg
PCAwKSB7Ci0gICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVy
cm9yKSkgewotICAgICAgICAgICAgLy8gTm90IGEgc3RyaW5nLCBjYW5ub3QgYmUgaW4gdGhlIGNv
bnRhaW5lci4KLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAqaXRlbSA9
IE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgICppdGVtID0gc2VsZi0+Y29udGFpbmVy
X2RlZi0+Z2V0X2J5X2NhbWVsY2FzZV9uYW1lX2ZuKAotICAgICAgICAgICAgc2VsZiwgc3RyaW5n
KGNhbWVsY2FzZV9uYW1lLCBuYW1lX3NpemUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICB9Ci0gICAgY2FzZSBQeUNvbnRhaW5lcjo6S0lORF9CWU5VTUJFUjoKLSAgICAgIHsKLSAgICAg
ICAgUHlfc3NpemVfdCBudW1iZXIgPSBQeU51bWJlcl9Bc1NzaXplX3Qoa2V5LCBOVUxMKTsKLSAg
ICAgICAgaWYgKG51bWJlciA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAg
aWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkgewotICAgICAgICAg
ICAgLy8gTm90IGEgbnVtYmVyLCBjYW5ub3QgYmUgaW4gdGhlIGNvbnRhaW5lci4KLSAgICAgICAg
ICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAqaXRlbSA9IE5VTEw7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgICppdGVtID0gc2VsZi0+Y29udGFpbmVyX2RlZi0+Z2V0X2J5X251bWJl
cl9mbihzZWxmLCBudW1iZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICBk
ZWZhdWx0OgotICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yKTsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBrZXkgb2YgdGhl
IG9iamVjdCBhdCB0aGUgZ2l2ZW4gaW5kZXguCi0vLyBVc2VkIHdoZW4gaXRlcmF0aW5nIG92ZXIg
bWFwcGluZ3MuCi1zdGF0aWMgUHlPYmplY3QqIF9OZXdLZXlfQnlJbmRleChQeUNvbnRhaW5lciog
c2VsZiwgUHlfc3NpemVfdCBpbmRleCkgewotICBjb25zdCB2b2lkKiBpdGVtID0gc2VsZi0+Y29u
dGFpbmVyX2RlZi0+Z2V0X2J5X2luZGV4X2ZuKHNlbGYsIGluZGV4KTsKLSAgc3dpdGNoIChzZWxm
LT5raW5kKSB7Ci0gICAgY2FzZSBQeUNvbnRhaW5lcjo6S0lORF9CWU5BTUU6Ci0gICAgICB7Ci0g
ICAgICAgIGNvbnN0IHN0cmluZyYgbmFtZShzZWxmLT5jb250YWluZXJfZGVmLT5nZXRfaXRlbV9u
YW1lX2ZuKGl0ZW0pKTsKLSAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXpl
KG5hbWUuY19zdHIoKSwgbmFtZS5zaXplKCkpOwotICAgICAgfQotICAgIGNhc2UgUHlDb250YWlu
ZXI6OktJTkRfQllDQU1FTENBU0VOQU1FOgotICAgICAgewotICAgICAgICBjb25zdCBzdHJpbmcm
IG5hbWUoCi0gICAgICAgICAgICBzZWxmLT5jb250YWluZXJfZGVmLT5nZXRfaXRlbV9jYW1lbGNh
c2VfbmFtZV9mbihpdGVtKSk7Ci0gICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5k
U2l6ZShuYW1lLmNfc3RyKCksIG5hbWUuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICBjYXNlIFB5Q29u
dGFpbmVyOjpLSU5EX0JZTlVNQkVSOgotICAgICAgewotICAgICAgICBpbnQgdmFsdWUgPSBzZWxm
LT5jb250YWluZXJfZGVmLT5nZXRfaXRlbV9udW1iZXJfZm4oaXRlbSk7Ci0gICAgICAgIHJldHVy
biBQeUludF9Gcm9tTG9uZyh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIFB5
RXJyX1NldE5vbmUoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcik7Ci0gICAgICByZXR1cm4gTlVM
TDsKLSAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBvYmplY3QgYXQgdGhlIGdpdmVuIGluZGV4Lgot
Ly8gQWxzbyB1c2VkIHdoZW4gaXRlcmF0aW5nIG92ZXIgbWFwcGluZ3MuCi1zdGF0aWMgUHlPYmpl
Y3QqIF9OZXdPYmpfQnlJbmRleChQeUNvbnRhaW5lciogc2VsZiwgUHlfc3NpemVfdCBpbmRleCkg
ewotICByZXR1cm4gc2VsZi0+Y29udGFpbmVyX2RlZi0+bmV3X29iamVjdF9mcm9tX2l0ZW1fZm4o
Ci0gICAgICBzZWxmLT5jb250YWluZXJfZGVmLT5nZXRfYnlfaW5kZXhfZm4oc2VsZiwgaW5kZXgp
KTsKLX0KLQotc3RhdGljIFB5X3NzaXplX3QgTGVuZ3RoKFB5Q29udGFpbmVyKiBzZWxmKSB7Ci0g
IHJldHVybiBzZWxmLT5jb250YWluZXJfZGVmLT5jb3VudF9mbihzZWxmKTsKLX0KLQotLy8gVGhl
IERlc2NyaXB0b3JNYXBwaW5nIHR5cGUuCi0KLXN0YXRpYyBQeU9iamVjdCogU3Vic2NyaXB0KFB5
Q29udGFpbmVyKiBzZWxmLCBQeU9iamVjdCoga2V5KSB7Ci0gIGNvbnN0IHZvaWQqIGl0ZW0gPSBO
VUxMOwotICBpZiAoIV9HZXRJdGVtQnlLZXkoc2VsZiwga2V5LCAmaXRlbSkpIHsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotICBpZiAoIWl0ZW0pIHsKLSAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNf
S2V5RXJyb3IsIGtleSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHNlbGYtPmNv
bnRhaW5lcl9kZWYtPm5ld19vYmplY3RfZnJvbV9pdGVtX2ZuKGl0ZW0pOwotfQotCi1zdGF0aWMg
aW50IEFzc1N1YnNjcmlwdChQeUNvbnRhaW5lciogc2VsZiwgUHlPYmplY3QqIGtleSwgUHlPYmpl
Y3QqIHZhbHVlKSB7Ci0gIGlmIChfQ2FsbGVkRnJvbUdlbmVyYXRlZEZpbGUoMCkpIHsKLSAgICBy
ZXR1cm4gMDsKLSAgfQotICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAg
ICAgICAgIiclLjIwMHMnIG9iamVjdCBkb2VzIG5vdCBzdXBwb3J0IGl0ZW0gYXNzaWdubWVudCIs
Ci0gICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKLSAgcmV0dXJuIC0xOwot
fQotCi1zdGF0aWMgUHlNYXBwaW5nTWV0aG9kcyBNYXBwaW5nTWFwcGluZ01ldGhvZHMgPSB7Ci0g
IChsZW5mdW5jKUxlbmd0aCwgICAgICAgICAgICAgICAvLyBtcF9sZW5ndGgKLSAgKGJpbmFyeWZ1
bmMpU3Vic2NyaXB0LCAgICAgICAgIC8vIG1wX3N1YnNjcmlwdAotICAob2Jqb2JqYXJncHJvYylB
c3NTdWJzY3JpcHQsICAgLy8gbXBfYXNzX3N1YnNjcmlwdAotfTsKLQotc3RhdGljIGludCBDb250
YWlucyhQeUNvbnRhaW5lciogc2VsZiwgUHlPYmplY3QqIGtleSkgewotICBjb25zdCB2b2lkKiBp
dGVtID0gTlVMTDsKLSAgaWYgKCFfR2V0SXRlbUJ5S2V5KHNlbGYsIGtleSwgJml0ZW0pKSB7Ci0g
ICAgcmV0dXJuIC0xOwotICB9Ci0gIGlmIChpdGVtKSB7Ci0gICAgcmV0dXJuIDE7Ci0gIH0gZWxz
ZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3RhdGljIFB5T2JqZWN0KiBDb250YWluZXJS
ZXByKFB5Q29udGFpbmVyKiBzZWxmKSB7Ci0gIGNvbnN0IGNoYXIqIGtpbmQgPSAiIjsKLSAgc3dp
dGNoIChzZWxmLT5raW5kKSB7Ci0gICAgY2FzZSBQeUNvbnRhaW5lcjo6S0lORF9TRVFVRU5DRToK
LSAgICAgIGtpbmQgPSAic2VxdWVuY2UiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQeUNvbnRh
aW5lcjo6S0lORF9CWU5BTUU6Ci0gICAgICBraW5kID0gIm1hcHBpbmcgYnkgbmFtZSI7Ci0gICAg
ICBicmVhazsKLSAgICBjYXNlIFB5Q29udGFpbmVyOjpLSU5EX0JZQ0FNRUxDQVNFTkFNRToKLSAg
ICAgIGtpbmQgPSAibWFwcGluZyBieSBjYW1lbENhc2UgbmFtZSI7Ci0gICAgICBicmVhazsKLSAg
ICBjYXNlIFB5Q29udGFpbmVyOjpLSU5EX0JZTlVNQkVSOgotICAgICAga2luZCA9ICJtYXBwaW5n
IGJ5IG51bWJlciI7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gUHlTdHJpbmdfRnJvbUZv
cm1hdCgKLSAgICAgICI8JXMgJXM+Iiwgc2VsZi0+Y29udGFpbmVyX2RlZi0+bWFwcGluZ19uYW1l
LCBraW5kKTsKLX0KLQotZXh0ZXJuIFB5VHlwZU9iamVjdCBEZXNjcmlwdG9yTWFwcGluZ19UeXBl
OwotZXh0ZXJuIFB5VHlwZU9iamVjdCBEZXNjcmlwdG9yU2VxdWVuY2VfVHlwZTsKLQotLy8gQSBz
ZXF1ZW5jZSBjb250YWluZXIgY2FuIG9ubHkgYmUgZXF1YWwgdG8gYW5vdGhlciBzZXF1ZW5jZSBj
b250YWluZXIsIG9yIChmb3IKLS8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIHRvIGEgbGlzdCBj
b250YWluaW5nIHRoZSBzYW1lIGl0ZW1zLgotLy8gUmV0dXJucyAxIGlmIGVxdWFsLCAwIGlmIHVu
ZXF1YWwsIC0xIG9uIGVycm9yLgotc3RhdGljIGludCBEZXNjcmlwdG9yU2VxdWVuY2VfRXF1YWwo
UHlDb250YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBvdGhlcikgewotICAvLyBDaGVjayB0aGUgaWRl
bnRpdHkgb2YgQysrIHBvaW50ZXJzLgotICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKG90aGVyLCAm
RGVzY3JpcHRvclNlcXVlbmNlX1R5cGUpKSB7Ci0gICAgUHlDb250YWluZXIqIG90aGVyX2NvbnRh
aW5lciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHlDb250YWluZXIqPihvdGhlcik7Ci0gICAgaWYgKHNl
bGYtPmRlc2NyaXB0b3IgPT0gb3RoZXJfY29udGFpbmVyLT5kZXNjcmlwdG9yICYmCi0gICAgICAg
IHNlbGYtPmNvbnRhaW5lcl9kZWYgPT0gb3RoZXJfY29udGFpbmVyLT5jb250YWluZXJfZGVmICYm
Ci0gICAgICAgIHNlbGYtPmtpbmQgPT0gb3RoZXJfY29udGFpbmVyLT5raW5kKSB7Ci0gICAgICBy
ZXR1cm4gMTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gSWYgb3RoZXIgaXMgYSBsaXN0Ci0gIGlmIChQeUxpc3RfQ2hlY2sob3RoZXIpKSB7Ci0gICAg
Ly8gcmV0dXJuIGxpc3Qoc2VsZikgPT0gb3RoZXIKLSAgICBpbnQgc2l6ZSA9IExlbmd0aChzZWxm
KTsKLSAgICBpZiAoc2l6ZSAhPSBQeUxpc3RfU2l6ZShvdGhlcikpIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7IGluZGV4
KyspIHsKLSAgICAgIFNjb3BlZFB5T2JqZWN0UHRyIHZhbHVlMShfTmV3T2JqX0J5SW5kZXgoc2Vs
ZiwgaW5kZXgpKTsKLSAgICAgIGlmICh2YWx1ZTEgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4g
LTE7Ci0gICAgICB9Ci0gICAgICBQeU9iamVjdCogdmFsdWUyID0gUHlMaXN0X0dldEl0ZW0ob3Ro
ZXIsIGluZGV4KTsKLSAgICAgIGlmICh2YWx1ZTIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4g
LTE7Ci0gICAgICB9Ci0gICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHZh
bHVlMS5nZXQoKSwgdmFsdWUyLCBQeV9FUSk7Ci0gICAgICBpZiAoY21wICE9IDEpICAvLyBlcnJv
ciBvciBub3QgZXF1YWwKLSAgICAgICAgICByZXR1cm4gY21wOwotICAgIH0KLSAgICAvLyBBbGwg
aXRlbXMgd2VyZSBmb3VuZCBhbmQgZXF1YWwKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIC8vIEFu
eSBvdGhlciBvYmplY3QgaXMgZGlmZmVyZW50LgotICByZXR1cm4gMDsKLX0KLQotLy8gQSBtYXBw
aW5nIGNvbnRhaW5lciBjYW4gb25seSBiZSBlcXVhbCB0byBhbm90aGVyIG1hcHBpbmcgY29udGFp
bmVyLCBvciAoZm9yCi0vLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSB0byBhIGRpY3QgY29udGFp
bmluZyB0aGUgc2FtZSBpdGVtcy4KLS8vIFJldHVybnMgMSBpZiBlcXVhbCwgMCBpZiB1bmVxdWFs
LCAtMSBvbiBlcnJvci4KLXN0YXRpYyBpbnQgRGVzY3JpcHRvck1hcHBpbmdfRXF1YWwoUHlDb250
YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBvdGhlcikgewotICAvLyBDaGVjayB0aGUgaWRlbnRpdHkg
b2YgQysrIHBvaW50ZXJzLgotICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKG90aGVyLCAmRGVzY3Jp
cHRvck1hcHBpbmdfVHlwZSkpIHsKLSAgICBQeUNvbnRhaW5lciogb3RoZXJfY29udGFpbmVyID0g
cmVpbnRlcnByZXRfY2FzdDxQeUNvbnRhaW5lcio+KG90aGVyKTsKLSAgICBpZiAoc2VsZi0+ZGVz
Y3JpcHRvciA9PSBvdGhlcl9jb250YWluZXItPmRlc2NyaXB0b3IgJiYKLSAgICAgICAgc2VsZi0+
Y29udGFpbmVyX2RlZiA9PSBvdGhlcl9jb250YWluZXItPmNvbnRhaW5lcl9kZWYgJiYKLSAgICAg
ICAgc2VsZi0+a2luZCA9PSBvdGhlcl9jb250YWluZXItPmtpbmQpIHsKLSAgICAgIHJldHVybiAx
OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICAvLyBJZiBv
dGhlciBpcyBhIGRpY3QKLSAgaWYgKFB5RGljdF9DaGVjayhvdGhlcikpIHsKLSAgICAvLyBlcXVp
dmFsZW50IHRvIGRpY3Qoc2VsZi5pdGVtcygpKSA9PSBvdGhlcgotICAgIGludCBzaXplID0gTGVu
Z3RoKHNlbGYpOwotICAgIGlmIChzaXplICE9IFB5RGljdF9TaXplKG90aGVyKSkgewotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgc2l6
ZTsgaW5kZXgrKykgewotICAgICAgU2NvcGVkUHlPYmplY3RQdHIga2V5KF9OZXdLZXlfQnlJbmRl
eChzZWxmLCBpbmRleCkpOwotICAgICAgaWYgKGtleSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVy
biAtMTsKLSAgICAgIH0KLSAgICAgIFNjb3BlZFB5T2JqZWN0UHRyIHZhbHVlMShfTmV3T2JqX0J5
SW5kZXgoc2VsZiwgaW5kZXgpKTsKLSAgICAgIGlmICh2YWx1ZTEgPT0gTlVMTCkgewotICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgICB9Ci0gICAgICBQeU9iamVjdCogdmFsdWUyID0gUHlEaWN0X0dl
dEl0ZW0ob3RoZXIsIGtleS5nZXQoKSk7Ci0gICAgICBpZiAodmFsdWUyID09IE5VTEwpIHsKLSAg
ICAgICAgLy8gTm90IGZvdW5kIGluIHRoZSBvdGhlciBkaWN0aW9uYXJ5Ci0gICAgICAgIHJldHVy
biAwOwotICAgICAgfQotICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh2
YWx1ZTEuZ2V0KCksIHZhbHVlMiwgUHlfRVEpOwotICAgICAgaWYgKGNtcCAhPSAxKSAgLy8gZXJy
b3Igb3Igbm90IGVxdWFsCi0gICAgICAgICAgcmV0dXJuIGNtcDsKLSAgICB9Ci0gICAgLy8gQWxs
IGl0ZW1zIHdlcmUgZm91bmQgYW5kIGVxdWFsCi0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICAvLyBB
bnkgb3RoZXIgb2JqZWN0IGlzIGRpZmZlcmVudC4KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBQ
eU9iamVjdCogUmljaENvbXBhcmUoUHlDb250YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBvdGhlciwg
aW50IG9waWQpIHsKLSAgaWYgKG9waWQgIT0gUHlfRVEgJiYgb3BpZCAhPSBQeV9ORSkgewotICAg
IFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7Ci0gICAgcmV0dXJuIFB5X05vdEltcGxlbWVu
dGVkOwotICB9Ci0KLSAgaW50IHJlc3VsdDsKLQotICBpZiAoc2VsZi0+a2luZCA9PSBQeUNvbnRh
aW5lcjo6S0lORF9TRVFVRU5DRSkgewotICAgIHJlc3VsdCA9IERlc2NyaXB0b3JTZXF1ZW5jZV9F
cXVhbChzZWxmLCBvdGhlcik7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0ID0gRGVzY3JpcHRvck1h
cHBpbmdfRXF1YWwoc2VsZiwgb3RoZXIpOwotICB9Ci0gIGlmIChyZXN1bHQgPCAwKSB7Ci0gICAg
cmV0dXJuIE5VTEw7Ci0gIH0KLSAgaWYgKHJlc3VsdCBeIChvcGlkID09IFB5X05FKSkgewotICAg
IFB5X1JFVFVSTl9UUlVFOwotICB9IGVsc2UgewotICAgIFB5X1JFVFVSTl9GQUxTRTsKLSAgfQot
fQotCi1zdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgTWFwcGluZ1NlcXVlbmNlTWV0aG9kcyA9IHsK
LSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvLyBzcV9sZW5ndGgKLSAgICAwLCAgICAgICAg
ICAgICAgICAgICAgICAvLyBzcV9jb25jYXQKLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAv
LyBzcV9yZXBlYXQKLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvLyBzcV9pdGVtCi0gICAg
MCwgICAgICAgICAgICAgICAgICAgICAgLy8gc3Ffc2xpY2UKLSAgICAwLCAgICAgICAgICAgICAg
ICAgICAgICAvLyBzcV9hc3NfaXRlbQotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8vIHNx
X2Fzc19zbGljZQotICAgIChvYmpvYmpwcm9jKUNvbnRhaW5zLCAgIC8vIHNxX2NvbnRhaW5zCi19
OwotCi1zdGF0aWMgUHlPYmplY3QqIEdldChQeUNvbnRhaW5lciogc2VsZiwgUHlPYmplY3QqIGFy
Z3MpIHsKLSAgUHlPYmplY3QqIGtleTsKLSAgUHlPYmplY3QqIGRlZmF1bHRfdmFsdWUgPSBQeV9O
b25lOwotICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJnZXQiLCAxLCAyLCAma2V5LCAm
ZGVmYXVsdF92YWx1ZSkpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGNvbnN0IHZvaWQq
IGl0ZW07Ci0gIGlmICghX0dldEl0ZW1CeUtleShzZWxmLCBrZXksICZpdGVtKSkgewotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0gIGlmIChpdGVtID09IE5VTEwpIHsKLSAgICBQeV9JTkNSRUYoZGVm
YXVsdF92YWx1ZSk7Ci0gICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7Ci0gIH0KLSAgcmV0dXJuIHNl
bGYtPmNvbnRhaW5lcl9kZWYtPm5ld19vYmplY3RfZnJvbV9pdGVtX2ZuKGl0ZW0pOwotfQotCi1z
dGF0aWMgUHlPYmplY3QqIEtleXMoUHlDb250YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKSB7
Ci0gIFB5X3NzaXplX3QgY291bnQgPSBMZW5ndGgoc2VsZik7Ci0gIFNjb3BlZFB5T2JqZWN0UHRy
IGxpc3QoUHlMaXN0X05ldyhjb3VudCkpOwotICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0KLSAgZm9yIChQeV9zc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBjb3Vu
dDsgKytpbmRleCkgewotICAgIFB5T2JqZWN0KiBrZXkgPSBfTmV3S2V5X0J5SW5kZXgoc2VsZiwg
aW5kZXgpOwotICAgIGlmIChrZXkgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAg
fQotICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LmdldCgpLCBpbmRleCwga2V5KTsKLSAgfQotICBy
ZXR1cm4gbGlzdC5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogVmFsdWVzKFB5Q29u
dGFpbmVyKiBzZWxmLCBQeU9iamVjdCogYXJncykgewotICBQeV9zc2l6ZV90IGNvdW50ID0gTGVu
Z3RoKHNlbGYpOwotICBTY29wZWRQeU9iamVjdFB0ciBsaXN0KFB5TGlzdF9OZXcoY291bnQpKTsK
LSAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGZvciAoUHlf
c3NpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKLSAgICBQeU9iamVj
dCogdmFsdWUgPSBfTmV3T2JqX0J5SW5kZXgoc2VsZiwgaW5kZXgpOwotICAgIGlmICh2YWx1ZSA9
PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlMaXN0X1NFVF9JVEVN
KGxpc3QuZ2V0KCksIGluZGV4LCB2YWx1ZSk7Ci0gIH0KLSAgcmV0dXJuIGxpc3QucmVsZWFzZSgp
OwotfQotCi1zdGF0aWMgUHlPYmplY3QqIEl0ZW1zKFB5Q29udGFpbmVyKiBzZWxmLCBQeU9iamVj
dCogYXJncykgewotICBQeV9zc2l6ZV90IGNvdW50ID0gTGVuZ3RoKHNlbGYpOwotICBTY29wZWRQ
eU9iamVjdFB0ciBsaXN0KFB5TGlzdF9OZXcoY291bnQpKTsKLSAgaWYgKGxpc3QgPT0gTlVMTCkg
ewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGZvciAoUHlfc3NpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKLSAgICBTY29wZWRQeU9iamVjdFB0ciBvYmooUHlUdXBs
ZV9OZXcoMikpOwotICAgIGlmIChvYmogPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotICAgIFB5T2JqZWN0KiBrZXkgPSBfTmV3S2V5X0J5SW5kZXgoc2VsZiwgaW5kZXgpOwot
ICAgIGlmIChrZXkgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIFB5
VHVwbGVfU0VUX0lURU0ob2JqLmdldCgpLCAwLCBrZXkpOwotICAgIFB5T2JqZWN0KiB2YWx1ZSA9
IF9OZXdPYmpfQnlJbmRleChzZWxmLCBpbmRleCk7Ci0gICAgaWYgKHZhbHVlID09IE5VTEwpIHsK
LSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBQeVR1cGxlX1NFVF9JVEVNKG9iai5nZXQo
KSwgMSwgdmFsdWUpOwotICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LmdldCgpLCBpbmRleCwgb2Jq
LnJlbGVhc2UoKSk7Ci0gIH0KLSAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwotfQotCi1zdGF0aWMg
UHlPYmplY3QqIE5ld0NvbnRhaW5lckl0ZXJhdG9yKFB5Q29udGFpbmVyKiBtYXBwaW5nLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbnRhaW5lckl0ZXJhdG9yOjpJ
dGVyS2luZCBraW5kKTsKLQotc3RhdGljIFB5T2JqZWN0KiBJdGVyKFB5Q29udGFpbmVyKiBzZWxm
KSB7Ci0gIHJldHVybiBOZXdDb250YWluZXJJdGVyYXRvcihzZWxmLCBQeUNvbnRhaW5lckl0ZXJh
dG9yOjpLSU5EX0lURVJLRVkpOwotfQotc3RhdGljIFB5T2JqZWN0KiBJdGVyS2V5cyhQeUNvbnRh
aW5lciogc2VsZiwgUHlPYmplY3QqIGFyZ3MpIHsKLSAgcmV0dXJuIE5ld0NvbnRhaW5lckl0ZXJh
dG9yKHNlbGYsIFB5Q29udGFpbmVySXRlcmF0b3I6OktJTkRfSVRFUktFWSk7Ci19Ci1zdGF0aWMg
UHlPYmplY3QqIEl0ZXJWYWx1ZXMoUHlDb250YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKSB7
Ci0gIHJldHVybiBOZXdDb250YWluZXJJdGVyYXRvcihzZWxmLCBQeUNvbnRhaW5lckl0ZXJhdG9y
OjpLSU5EX0lURVJWQUxVRSk7Ci19Ci1zdGF0aWMgUHlPYmplY3QqIEl0ZXJJdGVtcyhQeUNvbnRh
aW5lciogc2VsZiwgUHlPYmplY3QqIGFyZ3MpIHsKLSAgcmV0dXJuIE5ld0NvbnRhaW5lckl0ZXJh
dG9yKHNlbGYsIFB5Q29udGFpbmVySXRlcmF0b3I6OktJTkRfSVRFUklURU0pOwotfQotCi1zdGF0
aWMgUHlNZXRob2REZWYgTWFwcGluZ01ldGhvZHNbXSA9IHsKLSAgeyAiZ2V0IiwgKFB5Q0Z1bmN0
aW9uKUdldCwgTUVUSF9WQVJBUkdTLCB9LAotICB7ICJrZXlzIiwgKFB5Q0Z1bmN0aW9uKUtleXMs
IE1FVEhfTk9BUkdTLCB9LAotICB7ICJ2YWx1ZXMiLCAoUHlDRnVuY3Rpb24pVmFsdWVzLCBNRVRI
X05PQVJHUywgfSwKLSAgeyAiaXRlbXMiLCAoUHlDRnVuY3Rpb24pSXRlbXMsIE1FVEhfTk9BUkdT
LCB9LAotICB7ICJpdGVya2V5cyIsIChQeUNGdW5jdGlvbilJdGVyS2V5cywgTUVUSF9OT0FSR1Ms
IH0sCi0gIHsgIml0ZXJ2YWx1ZXMiLCAoUHlDRnVuY3Rpb24pSXRlclZhbHVlcywgTUVUSF9OT0FS
R1MsIH0sCi0gIHsgIml0ZXJpdGVtcyIsIChQeUNGdW5jdGlvbilJdGVySXRlbXMsIE1FVEhfTk9B
UkdTLCB9LAotICB7TlVMTH0KLX07Ci0KLVB5VHlwZU9iamVjdCBEZXNjcmlwdG9yTWFwcGluZ19U
eXBlID0gewotICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICAiRGVz
Y3JpcHRvck1hcHBpbmciLCAgICAgICAgICAgICAgICAgIC8vIHRwX25hbWUKLSAgc2l6ZW9mKFB5
Q29udGFpbmVyKSwgICAgICAgICAgICAgICAgICAvLyB0cF9iYXNpY3NpemUKLSAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVtc2l6ZQotICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2RlYWxsb2MKLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9wcmludAotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2dldGF0dHIKLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0cF9zZXRhdHRyCi0gIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfY29tcGFyZQotICAocmVwcmZ1bmMpQ29udGFpbmVyUmVw
ciwgICAgICAgICAgICAgIC8vIHRwX3JlcHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0cF9hc19udW1iZXIKLSAgJk1hcHBpbmdTZXF1ZW5jZU1ldGhvZHMsICAg
ICAgICAgICAgICAvLyB0cF9hc19zZXF1ZW5jZQotICAmTWFwcGluZ01hcHBpbmdNZXRob2RzLCAg
ICAgICAgICAgICAgIC8vIHRwX2FzX21hcHBpbmcKLSAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0cF9oYXNoCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdHBfY2FsbAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRwX3N0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRwX2dldGF0dHJvCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dHBfc2V0YXR0cm8KLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
cF9hc19idWZmZXIKLSAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgICAvLyB0
cF9mbGFncwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2Rv
YwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3RyYXZlcnNl
Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfY2xlYXIKLSAg
KHJpY2hjbXBmdW5jKVJpY2hDb21wYXJlLCAgICAgICAgICAgICAvLyB0cF9yaWNoY29tcGFyZQot
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3dlYWtsaXN0b2Zm
c2V0Ci0gIChnZXRpdGVyZnVuYylJdGVyLCAgICAgICAgICAgICAgICAgICAgLy8gdHBfaXRlcgot
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2l0ZXJuZXh0Ci0g
IE1hcHBpbmdNZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfbWV0aG9kcwotICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX21lbWJlcnMKLSAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9nZXRzZXQKLSAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9iYXNlCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZGljdAotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2Rlc2NyX2dldAotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2Rlc2NyX3NldAotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2RpY3RvZmZzZXQKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pbml0Ci0gIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfYWxsb2MKLSAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0cF9uZXcKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0cF9mcmVlCi19OwotCi0vLyBUaGUgRGVzY3JpcHRvclNlcXVlbmNlIHR5cGUu
Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0SXRlbShQeUNvbnRhaW5lciogc2VsZiwgUHlfc3NpemVf
dCBpbmRleCkgewotICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgaW5kZXggKz0gTGVuZ3RoKHNlbGYp
OwotICB9Ci0gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gTGVuZ3RoKHNlbGYpKSB7Ci0gICAg
UHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsK
LSAgICByZXR1cm4gTlVMTDsKLSAgfQotICByZXR1cm4gX05ld09ial9CeUluZGV4KHNlbGYsIGlu
ZGV4KTsKLX0KLQotLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGl0ZW0gaW4gdGhlIHNl
cXVlbmNlLCBvZiAtMSBpZiBub3QgZm91bmQuCi0vLyBUaGlzIGZ1bmN0aW9uIG5ldmVyIGZhaWxz
LgotaW50IEZpbmQoUHlDb250YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBpdGVtKSB7Ci0gIC8vIFRo
ZSBpdGVtIGNhbiBvbmx5IGJlIGluIG9uZSBwb3NpdGlvbjogaXRlbS5pbmRleC4KLSAgLy8gQ2hl
Y2sgdGhhdCBzZWxmW2l0ZW0uaW5kZXhdID09IGl0ZW0sIGl0J3MgZmFzdGVyIHRoYW4gYSBsaW5l
YXIgc2VhcmNoLgotICAvLwotICAvLyBUaGlzIGFzc3VtZXMgdGhhdCBzZXF1ZW5jZXMgYXJlIG9u
bHkgZGVmaW5lZCBieSBzeW50YXggb2YgdGhlIC5wcm90byBmaWxlOgotICAvLyBhIHNwZWNpZmlj
IGl0ZW0gYmVsb25ncyB0byBvbmx5IG9uZSBzZXF1ZW5jZSwgZGVwZW5kaW5nIG9uIGl0cyBwb3Np
dGlvbiBpbgotICAvLyB0aGUgLnByb3RvIGZpbGUgZGVmaW5pdGlvbi4KLSAgY29uc3Qgdm9pZCog
ZGVzY3JpcHRvcl9wdHIgPSBQeURlc2NyaXB0b3JfQXNWb2lkUHRyKGl0ZW0pOwotICBpZiAoZGVz
Y3JpcHRvcl9wdHIgPT0gTlVMTCkgewotICAgIC8vIE5vdCBhIGRlc2NyaXB0b3IsIGl0IGNhbm5v
dCBiZSBpbiB0aGUgbGlzdC4KLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaWYgKHNlbGYtPmNvbnRh
aW5lcl9kZWYtPmdldF9pdGVtX2luZGV4X2ZuKSB7Ci0gICAgaW50IGluZGV4ID0gc2VsZi0+Y29u
dGFpbmVyX2RlZi0+Z2V0X2l0ZW1faW5kZXhfZm4oZGVzY3JpcHRvcl9wdHIpOwotICAgIGlmIChp
bmRleCA8IDAgfHwgaW5kZXggPj0gTGVuZ3RoKHNlbGYpKSB7Ci0gICAgICAvLyBUaGlzIGluZGV4
IGlzIG5vdCBmcm9tIHRoaXMgY29sbGVjdGlvbi4KLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0g
ICAgaWYgKHNlbGYtPmNvbnRhaW5lcl9kZWYtPmdldF9ieV9pbmRleF9mbihzZWxmLCBpbmRleCkg
IT0gZGVzY3JpcHRvcl9wdHIpIHsKLSAgICAgIC8vIFRoZSBkZXNjcmlwdG9yIGF0IHRoaXMgaW5k
ZXggaXMgbm90IHRoZSBzYW1lLgotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICAvLyBzZWxm
W2l0ZW0uaW5kZXhdID09IGl0ZW0sIHNvIHJldHVybiB0aGUgaW5kZXguCi0gICAgcmV0dXJuIGlu
ZGV4OwotICB9IGVsc2UgewotICAgIC8vIEZhbGwgYmFjayB0byBsaW5lYXIgc2VhcmNoLgotICAg
IGludCBsZW5ndGggPSBMZW5ndGgoc2VsZik7Ci0gICAgZm9yIChpbnQgaW5kZXg9MDsgaW5kZXgg
PCBsZW5ndGg7IGluZGV4KyspIHsKLSAgICAgIGlmIChzZWxmLT5jb250YWluZXJfZGVmLT5nZXRf
YnlfaW5kZXhfZm4oc2VsZiwgaW5kZXgpID09IGRlc2NyaXB0b3JfcHRyKSB7Ci0gICAgICAgIHJl
dHVybiBpbmRleDsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gTm90IGZvdW5kCi0gICAgcmV0dXJu
IC0xOwotICB9Ci19Ci0KLS8vIEltcGxlbWVudHMgbGlzdC5pbmRleCgpOiB0aGUgcG9zaXRpb24g
b2YgdGhlIGl0ZW0gaXMgaW4gdGhlIHNlcXVlbmNlLgotc3RhdGljIFB5T2JqZWN0KiBJbmRleChQ
eUNvbnRhaW5lciogc2VsZiwgUHlPYmplY3QqIGl0ZW0pIHsKLSAgaW50IHBvc2l0aW9uID0gRmlu
ZChzZWxmLCBpdGVtKTsKLSAgaWYgKHBvc2l0aW9uIDwgMCkgewotICAgIC8vIE5vdCBmb3VuZAot
ICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfVmFsdWVFcnJvcik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0gZWxzZSB7Ci0gICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKHBvc2l0aW9uKTsKLSAgfQotfQot
Ly8gSW1wbGVtZW50cyAibGlzdC5fX2NvbnRhaW5zX18oKSI6IGlzIHRoZSBvYmplY3QgaW4gdGhl
IHNlcXVlbmNlLgotc3RhdGljIGludCBTZXFDb250YWlucyhQeUNvbnRhaW5lciogc2VsZiwgUHlP
YmplY3QqIGl0ZW0pIHsKLSAgaW50IHBvc2l0aW9uID0gRmluZChzZWxmLCBpdGVtKTsKLSAgaWYg
KHBvc2l0aW9uIDwgMCkgewotICAgIHJldHVybiAwOwotICB9IGVsc2UgewotICAgIHJldHVybiAx
OwotICB9Ci19Ci0KLS8vIEltcGxlbWVudHMgbGlzdC5jb3VudCgpOiBudW1iZXIgb2Ygb2NjdXJy
ZW5jZXMgb2YgdGhlIGl0ZW0gaW4gdGhlIHNlcXVlbmNlLgotLy8gQW4gaXRlbSBjYW4gb25seSBh
cHBlYXIgb25jZSBpbiBhIHNlcXVlbmNlLiBJZiBpdCBleGlzdHMsIHJldHVybiAxLgotc3RhdGlj
IFB5T2JqZWN0KiBDb3VudChQeUNvbnRhaW5lciogc2VsZiwgUHlPYmplY3QqIGl0ZW0pIHsKLSAg
aW50IHBvc2l0aW9uID0gRmluZChzZWxmLCBpdGVtKTsKLSAgaWYgKHBvc2l0aW9uIDwgMCkgewot
ICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygwKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gUHlJ
bnRfRnJvbUxvbmcoMSk7Ci0gIH0KLX0KLQotc3RhdGljIFB5T2JqZWN0KiBBcHBlbmQoUHlDb250
YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKSB7Ci0gIGlmIChfQ2FsbGVkRnJvbUdlbmVyYXRl
ZEZpbGUoMCkpIHsKLSAgICBQeV9SRVRVUk5fTk9ORTsKLSAgfQotICBQeUVycl9Gb3JtYXQoUHlF
eGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgIiclLjIwMHMnIG9iamVjdCBpcyBub3QgYSBt
dXRhYmxlIHNlcXVlbmNlIiwKLSAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUp
OwotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBSZXZlcnNlZChQeUNvbnRh
aW5lciogc2VsZiwgUHlPYmplY3QqIGFyZ3MpIHsKLSAgcmV0dXJuIE5ld0NvbnRhaW5lckl0ZXJh
dG9yKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbnRhaW5lckl0ZXJh
dG9yOjpLSU5EX0lURVJWQUxVRV9SRVZFUlNFRCk7Ci19Ci0KLXN0YXRpYyBQeU1ldGhvZERlZiBT
ZXFNZXRob2RzW10gPSB7Ci0gIHsgImluZGV4IiwgKFB5Q0Z1bmN0aW9uKUluZGV4LCBNRVRIX08s
IH0sCi0gIHsgImNvdW50IiwgKFB5Q0Z1bmN0aW9uKUNvdW50LCBNRVRIX08sIH0sCi0gIHsgImFw
cGVuZCIsIChQeUNGdW5jdGlvbilBcHBlbmQsIE1FVEhfTywgfSwKLSAgeyAiX19yZXZlcnNlZF9f
IiwgKFB5Q0Z1bmN0aW9uKVJldmVyc2VkLCBNRVRIX05PQVJHUywgfSwKLSAge05VTEx9Ci19Owot
Ci1zdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgU2VxU2VxdWVuY2VNZXRob2RzID0gewotICAgIChs
ZW5mdW5jKUxlbmd0aCwgICAgICAgICAgLy8gc3FfbGVuZ3RoCi0gICAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBzcV9jb25jYXQKLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNxX3JlcGVhdAotICAgIChzc2l6ZWFyZ2Z1bmMpR2V0SXRlbSwgICAgLy8gc3FfaXRlbQotICAg
IDAsICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Ffc2xpY2UKLSAgICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHNxX2Fzc19pdGVtCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBzcV9hc3Nfc2xpY2UKLSAgICAob2Jqb2JqcHJvYylTZXFDb250YWlucywgIC8vIHNxX2Nv
bnRhaW5zCi19OwotCi1QeVR5cGVPYmplY3QgRGVzY3JpcHRvclNlcXVlbmNlX1R5cGUgPSB7Ci0g
IFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCi0gICJEZXNjcmlwdG9yU2Vx
dWVuY2UiLCAgICAgICAgICAgICAgICAgLy8gdHBfbmFtZQotICBzaXplb2YoUHlDb250YWluZXIp
LCAgICAgICAgICAgICAgICAgIC8vIHRwX2Jhc2ljc2l6ZQotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRwX2l0ZW1zaXplCi0gIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfZGVhbGxvYwotICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRwX3ByaW50Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdHBfZ2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRwX3NldGF0dHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0cF9jb21wYXJlCi0gIChyZXByZnVuYylDb250YWluZXJSZXByLCAgICAgICAg
ICAgICAgLy8gdHBfcmVwcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRwX2FzX251bWJlcgotICAmU2VxU2VxdWVuY2VNZXRob2RzLCAgICAgICAgICAgICAgICAg
IC8vIHRwX2FzX3NlcXVlbmNlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHBfYXNfbWFwcGluZwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRwX2hhc2gKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0cF9jYWxsCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
c3RyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZ2V0YXR0
cm8KLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9zZXRhdHRy
bwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2FzX2J1ZmZl
cgotICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgIC8vIHRwX2ZsYWdzCi0g
IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZG9jCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfdHJhdmVyc2UKLSAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9jbGVhcgotICAocmljaGNtcGZ1
bmMpUmljaENvbXBhcmUsICAgICAgICAgICAgIC8vIHRwX3JpY2hjb21wYXJlCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfd2Vha2xpc3RvZmZzZXQKLSAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVyCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfaXRlcm5leHQKLSAgU2VxTWV0aG9k
cywgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9tZXRob2RzCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfbWVtYmVycwotICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2dldHNldAotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2Jhc2UKLSAgMCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0cF9kaWN0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdHBfZGVzY3JfZ2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdHBfZGVzY3Jfc2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdHBfZGljdG9mZnNldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRwX2luaXQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0cF9hbGxvYwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRwX25ldwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRwX2ZyZWUKLX07Ci0KLXN0YXRpYyBQeU9iamVjdCogTmV3TWFwcGluZ0J5TmFtZSgKLSAgICBE
ZXNjcmlwdG9yQ29udGFpbmVyRGVmKiBjb250YWluZXJfZGVmLCBjb25zdCB2b2lkKiBkZXNjcmlw
dG9yKSB7Ci0gIFB5Q29udGFpbmVyKiBzZWxmID0gUHlPYmplY3RfTmV3KFB5Q29udGFpbmVyLCAm
RGVzY3JpcHRvck1hcHBpbmdfVHlwZSk7Ci0gIGlmIChzZWxmID09IE5VTEwpIHsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotICBzZWxmLT5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgc2VsZi0+
Y29udGFpbmVyX2RlZiA9IGNvbnRhaW5lcl9kZWY7Ci0gIHNlbGYtPmtpbmQgPSBQeUNvbnRhaW5l
cjo6S0lORF9CWU5BTUU7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oc2Vs
Zik7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogTmV3TWFwcGluZ0J5Q2FtZWxjYXNlTmFtZSgKLSAg
ICBEZXNjcmlwdG9yQ29udGFpbmVyRGVmKiBjb250YWluZXJfZGVmLCBjb25zdCB2b2lkKiBkZXNj
cmlwdG9yKSB7Ci0gIFB5Q29udGFpbmVyKiBzZWxmID0gUHlPYmplY3RfTmV3KFB5Q29udGFpbmVy
LCAmRGVzY3JpcHRvck1hcHBpbmdfVHlwZSk7Ci0gIGlmIChzZWxmID09IE5VTEwpIHsKLSAgICBy
ZXR1cm4gTlVMTDsKLSAgfQotICBzZWxmLT5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgc2Vs
Zi0+Y29udGFpbmVyX2RlZiA9IGNvbnRhaW5lcl9kZWY7Ci0gIHNlbGYtPmtpbmQgPSBQeUNvbnRh
aW5lcjo6S0lORF9CWUNBTUVMQ0FTRU5BTUU7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFB5
T2JqZWN0Kj4oc2VsZik7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogTmV3TWFwcGluZ0J5TnVtYmVy
KAotICAgIERlc2NyaXB0b3JDb250YWluZXJEZWYqIGNvbnRhaW5lcl9kZWYsIGNvbnN0IHZvaWQq
IGRlc2NyaXB0b3IpIHsKLSAgaWYgKGNvbnRhaW5lcl9kZWYtPmdldF9ieV9udW1iZXJfZm4gPT0g
TlVMTCB8fAotICAgICAgY29udGFpbmVyX2RlZi0+Z2V0X2l0ZW1fbnVtYmVyX2ZuID09IE5VTEwp
IHsKLSAgICBQeUVycl9TZXROb25lKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IpOwotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0gIFB5Q29udGFpbmVyKiBzZWxmID0gUHlPYmplY3RfTmV3KFB5Q29u
dGFpbmVyLCAmRGVzY3JpcHRvck1hcHBpbmdfVHlwZSk7Ci0gIGlmIChzZWxmID09IE5VTEwpIHsK
LSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBzZWxmLT5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsK
LSAgc2VsZi0+Y29udGFpbmVyX2RlZiA9IGNvbnRhaW5lcl9kZWY7Ci0gIHNlbGYtPmtpbmQgPSBQ
eUNvbnRhaW5lcjo6S0lORF9CWU5VTUJFUjsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHlP
YmplY3QqPihzZWxmKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBOZXdTZXF1ZW5jZSgKLSAgICBE
ZXNjcmlwdG9yQ29udGFpbmVyRGVmKiBjb250YWluZXJfZGVmLCBjb25zdCB2b2lkKiBkZXNjcmlw
dG9yKSB7Ci0gIFB5Q29udGFpbmVyKiBzZWxmID0gUHlPYmplY3RfTmV3KFB5Q29udGFpbmVyLCAm
RGVzY3JpcHRvclNlcXVlbmNlX1R5cGUpOwotICBpZiAoc2VsZiA9PSBOVUxMKSB7Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0KLSAgc2VsZi0+ZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gIHNlbGYt
PmNvbnRhaW5lcl9kZWYgPSBjb250YWluZXJfZGVmOwotICBzZWxmLT5raW5kID0gUHlDb250YWlu
ZXI6OktJTkRfU0VRVUVOQ0U7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4o
c2VsZik7Ci19Ci0KLS8vIEltcGxlbWVudCBpdGVyYXRvcnMgb3ZlciBQeUNvbnRhaW5lcnMuCi0K
LXN0YXRpYyB2b2lkIEl0ZXJhdG9yX0RlYWxsb2MoUHlDb250YWluZXJJdGVyYXRvciogc2VsZikg
ewotICBQeV9DTEVBUihzZWxmLT5jb250YWluZXIpOwotICBQeV9UWVBFKHNlbGYpLT50cF9mcmVl
KHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihzZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVj
dCogSXRlcmF0b3JfTmV4dChQeUNvbnRhaW5lckl0ZXJhdG9yKiBzZWxmKSB7Ci0gIGludCBjb3Vu
dCA9IHNlbGYtPmNvbnRhaW5lci0+Y29udGFpbmVyX2RlZi0+Y291bnRfZm4oc2VsZi0+Y29udGFp
bmVyKTsKLSAgaWYgKHNlbGYtPmluZGV4ID49IGNvdW50KSB7Ci0gICAgLy8gUmV0dXJuIE5VTEwg
d2l0aCBubyBleGNlcHRpb24gdG8gaW5kaWNhdGUgdGhlIGVuZC4KLSAgICByZXR1cm4gTlVMTDsK
LSAgfQotICBpbnQgaW5kZXggPSBzZWxmLT5pbmRleDsKLSAgc2VsZi0+aW5kZXggKz0gMTsKLSAg
c3dpdGNoIChzZWxmLT5raW5kKSB7Ci0gICAgY2FzZSBQeUNvbnRhaW5lckl0ZXJhdG9yOjpLSU5E
X0lURVJLRVk6Ci0gICAgICByZXR1cm4gX05ld0tleV9CeUluZGV4KHNlbGYtPmNvbnRhaW5lciwg
aW5kZXgpOwotICAgIGNhc2UgUHlDb250YWluZXJJdGVyYXRvcjo6S0lORF9JVEVSVkFMVUU6Ci0g
ICAgICByZXR1cm4gX05ld09ial9CeUluZGV4KHNlbGYtPmNvbnRhaW5lciwgaW5kZXgpOwotICAg
IGNhc2UgUHlDb250YWluZXJJdGVyYXRvcjo6S0lORF9JVEVSVkFMVUVfUkVWRVJTRUQ6Ci0gICAg
ICByZXR1cm4gX05ld09ial9CeUluZGV4KHNlbGYtPmNvbnRhaW5lciwgY291bnQgLSBpbmRleCAt
IDEpOwotICAgIGNhc2UgUHlDb250YWluZXJJdGVyYXRvcjo6S0lORF9JVEVSSVRFTToKLSAgICAg
IHsKLSAgICAgICAgUHlPYmplY3QqIG9iaiA9IFB5VHVwbGVfTmV3KDIpOwotICAgICAgICBpZiAo
b2JqID09IE5VTEwpIHsKLSAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAg
ICBQeU9iamVjdCoga2V5ID0gX05ld0tleV9CeUluZGV4KHNlbGYtPmNvbnRhaW5lciwgaW5kZXgp
OwotICAgICAgICBpZiAoa2V5ID09IE5VTEwpIHsKLSAgICAgICAgICBQeV9ERUNSRUYob2JqKTsK
LSAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeVR1cGxlX1NFVF9J
VEVNKG9iaiwgMCwga2V5KTsKLSAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX05ld09ial9CeUlu
ZGV4KHNlbGYtPmNvbnRhaW5lciwgaW5kZXgpOwotICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkg
ewotICAgICAgICAgIFB5X0RFQ1JFRihvYmopOwotICAgICAgICAgIHJldHVybiBOVUxMOwotICAg
ICAgICB9Ci0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob2JqLCAxLCB2YWx1ZSk7Ci0gICAgICAg
IHJldHVybiBvYmo7Ci0gICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIFB5RXJyX1NldE5vbmUo
UHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgfQotfQot
Ci1zdGF0aWMgUHlUeXBlT2JqZWN0IENvbnRhaW5lckl0ZXJhdG9yX1R5cGUgPSB7Ci0gIFB5VmFy
T2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCi0gICJEZXNjcmlwdG9yQ29udGFpbmVy
SXRlcmF0b3IiLCAgICAgICAgLy8gdHBfbmFtZQotICBzaXplb2YoUHlDb250YWluZXJJdGVyYXRv
ciksICAgICAgICAgIC8vIHRwX2Jhc2ljc2l6ZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRwX2l0ZW1zaXplCi0gIChkZXN0cnVjdG9yKUl0ZXJhdG9yX0RlYWxs
b2MsICAgICAgICAgLy8gdHBfZGVhbGxvYwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRwX3ByaW50Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfZ2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRwX3NldGF0dHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0cF9jb21wYXJlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdHBfcmVwcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRw
X2FzX251bWJlcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRw
X2FzX3NlcXVlbmNlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dHBfYXNfbWFwcGluZwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRwX2hhc2gKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9j
YWxsCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfc3RyCi0g
IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZ2V0YXR0cm8KLSAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9zZXRhdHRybwotICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2FzX2J1ZmZlcgotICBQ
eV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgIC8vIHRwX2ZsYWdzCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZG9jCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfdHJhdmVyc2UKLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9jbGVhcgotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3JpY2hjb21wYXJlCi0gIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfd2Vha2xpc3RvZmZzZXQKLSAgUHlPYmplY3Rf
U2VsZkl0ZXIsICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVyCi0gIChpdGVybmV4dGZ1bmMp
SXRlcmF0b3JfTmV4dCwgICAgICAgICAgLy8gdHBfaXRlcm5leHQKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9tZXRob2RzCi0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHBfbWVtYmVycwotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRwX2dldHNldAotICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRwX2Jhc2UKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0cF9kaWN0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfZGVzY3JfZ2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfZGVzY3Jfc2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfZGljdG9mZnNldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRwX2luaXQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0cF9hbGxvYwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRwX25ldwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2Zy
ZWUKLX07Ci0KLXN0YXRpYyBQeU9iamVjdCogTmV3Q29udGFpbmVySXRlcmF0b3IoUHlDb250YWlu
ZXIqIGNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlD
b250YWluZXJJdGVyYXRvcjo6SXRlcktpbmQga2luZCkgewotICBQeUNvbnRhaW5lckl0ZXJhdG9y
KiBzZWxmID0gUHlPYmplY3RfTmV3KFB5Q29udGFpbmVySXRlcmF0b3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbnRhaW5lckl0ZXJhdG9yX1R5cGUpOwot
ICBpZiAoc2VsZiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgUHlfSU5DUkVG
KGNvbnRhaW5lcik7Ci0gIHNlbGYtPmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKLSAgc2VsZi0+a2lu
ZCA9IGtpbmQ7Ci0gIHNlbGYtPmluZGV4ID0gMDsKLQotICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxQeU9iamVjdCo+KHNlbGYpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgZGVzY3JpcHRvcgotCi0v
LyBOb3cgZGVmaW5lIHRoZSByZWFsIGNvbGxlY3Rpb25zIQotCi1uYW1lc3BhY2UgbWVzc2FnZV9k
ZXNjcmlwdG9yIHsKLQotdHlwZWRlZiBjb25zdCBEZXNjcmlwdG9yKiBQYXJlbnREZXNjcmlwdG9y
OwotCi1zdGF0aWMgUGFyZW50RGVzY3JpcHRvciBHZXREZXNjcmlwdG9yKFB5Q29udGFpbmVyKiBz
ZWxmKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFBhcmVudERlc2NyaXB0b3I+KHNlbGYt
PmRlc2NyaXB0b3IpOwotfQotCi1uYW1lc3BhY2UgZmllbGRzIHsKLQotdHlwZWRlZiBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIEl0ZW1EZXNjcmlwdG9yOwotCi1zdGF0aWMgaW50IENvdW50KFB5Q29u
dGFpbmVyKiBzZWxmKSB7Ci0gIHJldHVybiBHZXREZXNjcmlwdG9yKHNlbGYpLT5maWVsZF9jb3Vu
dCgpOwotfQotCi1zdGF0aWMgSXRlbURlc2NyaXB0b3IgR2V0QnlOYW1lKFB5Q29udGFpbmVyKiBz
ZWxmLCBjb25zdCBzdHJpbmcmIG5hbWUpIHsKLSAgcmV0dXJuIEdldERlc2NyaXB0b3Ioc2VsZikt
PkZpbmRGaWVsZEJ5TmFtZShuYW1lKTsKLX0KLQotc3RhdGljIEl0ZW1EZXNjcmlwdG9yIEdldEJ5
Q2FtZWxjYXNlTmFtZShQeUNvbnRhaW5lciogc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIHJldHVybiBHZXREZXNj
cmlwdG9yKHNlbGYpLT5GaW5kRmllbGRCeUNhbWVsY2FzZU5hbWUobmFtZSk7Ci19Ci0KLXN0YXRp
YyBJdGVtRGVzY3JpcHRvciBHZXRCeU51bWJlcihQeUNvbnRhaW5lciogc2VsZiwgaW50IG51bWJl
cikgewotICByZXR1cm4gR2V0RGVzY3JpcHRvcihzZWxmKS0+RmluZEZpZWxkQnlOdW1iZXIobnVt
YmVyKTsKLX0KLQotc3RhdGljIEl0ZW1EZXNjcmlwdG9yIEdldEJ5SW5kZXgoUHlDb250YWluZXIq
IHNlbGYsIGludCBpbmRleCkgewotICByZXR1cm4gR2V0RGVzY3JpcHRvcihzZWxmKS0+ZmllbGQo
aW5kZXgpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIE5ld09iamVjdEZyb21JdGVtKEl0ZW1EZXNj
cmlwdG9yIGl0ZW0pIHsKLSAgcmV0dXJuIFB5RmllbGREZXNjcmlwdG9yX0Zyb21EZXNjcmlwdG9y
KGl0ZW0pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RyaW5nJiBHZXRJdGVtTmFtZShJdGVtRGVzY3Jp
cHRvciBpdGVtKSB7Ci0gIHJldHVybiBpdGVtLT5uYW1lKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBz
dHJpbmcmIEdldEl0ZW1DYW1lbGNhc2VOYW1lKEl0ZW1EZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0
dXJuIGl0ZW0tPmNhbWVsY2FzZV9uYW1lKCk7Ci19Ci0KLXN0YXRpYyBpbnQgR2V0SXRlbU51bWJl
cihJdGVtRGVzY3JpcHRvciBpdGVtKSB7Ci0gIHJldHVybiBpdGVtLT5udW1iZXIoKTsKLX0KLQot
c3RhdGljIGludCBHZXRJdGVtSW5kZXgoSXRlbURlc2NyaXB0b3IgaXRlbSkgewotICByZXR1cm4g
aXRlbS0+aW5kZXgoKTsKLX0KLQotc3RhdGljIERlc2NyaXB0b3JDb250YWluZXJEZWYgQ29udGFp
bmVyRGVmID0gewotICAiTWVzc2FnZUZpZWxkcyIsCi0gIChDb3VudE1ldGhvZClDb3VudCwKLSAg
KEdldEJ5SW5kZXhNZXRob2QpR2V0QnlJbmRleCwKLSAgKEdldEJ5TmFtZU1ldGhvZClHZXRCeU5h
bWUsCi0gIChHZXRCeUNhbWVsY2FzZU5hbWVNZXRob2QpR2V0QnlDYW1lbGNhc2VOYW1lLAotICAo
R2V0QnlOdW1iZXJNZXRob2QpR2V0QnlOdW1iZXIsCi0gIChOZXdPYmplY3RGcm9tSXRlbU1ldGhv
ZClOZXdPYmplY3RGcm9tSXRlbSwKLSAgKEdldEl0ZW1OYW1lTWV0aG9kKUdldEl0ZW1OYW1lLAot
ICAoR2V0SXRlbUNhbWVsY2FzZU5hbWVNZXRob2QpR2V0SXRlbUNhbWVsY2FzZU5hbWUsCi0gIChH
ZXRJdGVtTnVtYmVyTWV0aG9kKUdldEl0ZW1OdW1iZXIsCi0gIChHZXRJdGVtSW5kZXhNZXRob2Qp
R2V0SXRlbUluZGV4LAotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGZpZWxkcwotCi1QeU9iamVjdCog
TmV3TWVzc2FnZUZpZWxkc0J5TmFtZShQYXJlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAg
cmV0dXJuIGRlc2NyaXB0b3I6Ok5ld01hcHBpbmdCeU5hbWUoJmZpZWxkczo6Q29udGFpbmVyRGVm
LCBkZXNjcmlwdG9yKTsKLX0KLQotUHlPYmplY3QqIE5ld01lc3NhZ2VGaWVsZHNCeUNhbWVsY2Fz
ZU5hbWUoUGFyZW50RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9y
OjpOZXdNYXBwaW5nQnlDYW1lbGNhc2VOYW1lKCZmaWVsZHM6OkNvbnRhaW5lckRlZiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcik7Ci19
Ci0KLVB5T2JqZWN0KiBOZXdNZXNzYWdlRmllbGRzQnlOdW1iZXIoUGFyZW50RGVzY3JpcHRvciBk
ZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yOjpOZXdNYXBwaW5nQnlOdW1iZXIoJmZp
ZWxkczo6Q29udGFpbmVyRGVmLCBkZXNjcmlwdG9yKTsKLX0KLQotUHlPYmplY3QqIE5ld01lc3Nh
Z2VGaWVsZHNTZXEoUGFyZW50RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNj
cmlwdG9yOjpOZXdTZXF1ZW5jZSgmZmllbGRzOjpDb250YWluZXJEZWYsIGRlc2NyaXB0b3IpOwot
fQotCi1uYW1lc3BhY2UgbmVzdGVkX3R5cGVzIHsKLQotdHlwZWRlZiBjb25zdCBEZXNjcmlwdG9y
KiBJdGVtRGVzY3JpcHRvcjsKLQotc3RhdGljIGludCBDb3VudChQeUNvbnRhaW5lciogc2VsZikg
ewotICByZXR1cm4gR2V0RGVzY3JpcHRvcihzZWxmKS0+bmVzdGVkX3R5cGVfY291bnQoKTsKLX0K
LQotc3RhdGljIEl0ZW1EZXNjcmlwdG9yIEdldEJ5TmFtZShQeUNvbnRhaW5lciogc2VsZiwgY29u
c3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIHJldHVybiBHZXREZXNjcmlwdG9yKHNlbGYpLT5GaW5kTmVz
dGVkVHlwZUJ5TmFtZShuYW1lKTsKLX0KLQotc3RhdGljIEl0ZW1EZXNjcmlwdG9yIEdldEJ5SW5k
ZXgoUHlDb250YWluZXIqIHNlbGYsIGludCBpbmRleCkgewotICByZXR1cm4gR2V0RGVzY3JpcHRv
cihzZWxmKS0+bmVzdGVkX3R5cGUoaW5kZXgpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIE5ld09i
amVjdEZyb21JdGVtKEl0ZW1EZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0dXJuIFB5TWVzc2FnZURl
c2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoaXRlbSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJpbmcm
IEdldEl0ZW1OYW1lKEl0ZW1EZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0dXJuIGl0ZW0tPm5hbWUo
KTsKLX0KLQotc3RhdGljIGludCBHZXRJdGVtSW5kZXgoSXRlbURlc2NyaXB0b3IgaXRlbSkgewot
ICByZXR1cm4gaXRlbS0+aW5kZXgoKTsKLX0KLQotc3RhdGljIERlc2NyaXB0b3JDb250YWluZXJE
ZWYgQ29udGFpbmVyRGVmID0gewotICAiTWVzc2FnZU5lc3RlZFR5cGVzIiwKLSAgKENvdW50TWV0
aG9kKUNvdW50LAotICAoR2V0QnlJbmRleE1ldGhvZClHZXRCeUluZGV4LAotICAoR2V0QnlOYW1l
TWV0aG9kKUdldEJ5TmFtZSwKLSAgKEdldEJ5Q2FtZWxjYXNlTmFtZU1ldGhvZClOVUxMLAotICAo
R2V0QnlOdW1iZXJNZXRob2QpTlVMTCwKLSAgKE5ld09iamVjdEZyb21JdGVtTWV0aG9kKU5ld09i
amVjdEZyb21JdGVtLAotICAoR2V0SXRlbU5hbWVNZXRob2QpR2V0SXRlbU5hbWUsCi0gIChHZXRJ
dGVtQ2FtZWxjYXNlTmFtZU1ldGhvZClOVUxMLAotICAoR2V0SXRlbU51bWJlck1ldGhvZClOVUxM
LAotICAoR2V0SXRlbUluZGV4TWV0aG9kKUdldEl0ZW1JbmRleCwKLX07Ci0KLX0gIC8vIG5hbWVz
cGFjZSBuZXN0ZWRfdHlwZXMKLQotUHlPYmplY3QqIE5ld01lc3NhZ2VOZXN0ZWRUeXBlc1NlcShQ
YXJlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2NyaXB0b3I6Ok5ld1Nl
cXVlbmNlKCZuZXN0ZWRfdHlwZXM6OkNvbnRhaW5lckRlZiwgZGVzY3JpcHRvcik7Ci19Ci0KLVB5
T2JqZWN0KiBOZXdNZXNzYWdlTmVzdGVkVHlwZXNCeU5hbWUoUGFyZW50RGVzY3JpcHRvciBkZXNj
cmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yOjpOZXdNYXBwaW5nQnlOYW1lKCZuZXN0ZWRf
dHlwZXM6OkNvbnRhaW5lckRlZiwgZGVzY3JpcHRvcik7Ci19Ci0KLW5hbWVzcGFjZSBlbnVtcyB7
Ci0KLXR5cGVkZWYgY29uc3QgRW51bURlc2NyaXB0b3IqIEl0ZW1EZXNjcmlwdG9yOwotCi1zdGF0
aWMgaW50IENvdW50KFB5Q29udGFpbmVyKiBzZWxmKSB7Ci0gIHJldHVybiBHZXREZXNjcmlwdG9y
KHNlbGYpLT5lbnVtX3R5cGVfY291bnQoKTsKLX0KLQotc3RhdGljIEl0ZW1EZXNjcmlwdG9yIEdl
dEJ5TmFtZShQeUNvbnRhaW5lciogc2VsZiwgY29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIHJldHVy
biBHZXREZXNjcmlwdG9yKHNlbGYpLT5GaW5kRW51bVR5cGVCeU5hbWUobmFtZSk7Ci19Ci0KLXN0
YXRpYyBJdGVtRGVzY3JpcHRvciBHZXRCeUluZGV4KFB5Q29udGFpbmVyKiBzZWxmLCBpbnQgaW5k
ZXgpIHsKLSAgcmV0dXJuIEdldERlc2NyaXB0b3Ioc2VsZiktPmVudW1fdHlwZShpbmRleCk7Ci19
Ci0KLXN0YXRpYyBQeU9iamVjdCogTmV3T2JqZWN0RnJvbUl0ZW0oSXRlbURlc2NyaXB0b3IgaXRl
bSkgewotICByZXR1cm4gUHlFbnVtRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihpdGVtKTsKLX0K
LQotc3RhdGljIGNvbnN0IHN0cmluZyYgR2V0SXRlbU5hbWUoSXRlbURlc2NyaXB0b3IgaXRlbSkg
ewotICByZXR1cm4gaXRlbS0+bmFtZSgpOwotfQotCi1zdGF0aWMgaW50IEdldEl0ZW1JbmRleChJ
dGVtRGVzY3JpcHRvciBpdGVtKSB7Ci0gIHJldHVybiBpdGVtLT5pbmRleCgpOwotfQotCi1zdGF0
aWMgRGVzY3JpcHRvckNvbnRhaW5lckRlZiBDb250YWluZXJEZWYgPSB7Ci0gICJNZXNzYWdlTmVz
dGVkRW51bXMiLAotICAoQ291bnRNZXRob2QpQ291bnQsCi0gIChHZXRCeUluZGV4TWV0aG9kKUdl
dEJ5SW5kZXgsCi0gIChHZXRCeU5hbWVNZXRob2QpR2V0QnlOYW1lLAotICAoR2V0QnlDYW1lbGNh
c2VOYW1lTWV0aG9kKU5VTEwsCi0gIChHZXRCeU51bWJlck1ldGhvZClOVUxMLAotICAoTmV3T2Jq
ZWN0RnJvbUl0ZW1NZXRob2QpTmV3T2JqZWN0RnJvbUl0ZW0sCi0gIChHZXRJdGVtTmFtZU1ldGhv
ZClHZXRJdGVtTmFtZSwKLSAgKEdldEl0ZW1DYW1lbGNhc2VOYW1lTWV0aG9kKU5VTEwsCi0gIChH
ZXRJdGVtTnVtYmVyTWV0aG9kKU5VTEwsCi0gIChHZXRJdGVtSW5kZXhNZXRob2QpR2V0SXRlbUlu
ZGV4LAotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGVudW1zCi0KLVB5T2JqZWN0KiBOZXdNZXNzYWdl
RW51bXNCeU5hbWUoUGFyZW50RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNj
cmlwdG9yOjpOZXdNYXBwaW5nQnlOYW1lKCZlbnVtczo6Q29udGFpbmVyRGVmLCBkZXNjcmlwdG9y
KTsKLX0KLQotUHlPYmplY3QqIE5ld01lc3NhZ2VFbnVtc1NlcShQYXJlbnREZXNjcmlwdG9yIGRl
c2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2NyaXB0b3I6Ok5ld1NlcXVlbmNlKCZlbnVtczo6Q29u
dGFpbmVyRGVmLCBkZXNjcmlwdG9yKTsKLX0KLQotbmFtZXNwYWNlIGVudW12YWx1ZXMgewotCi0v
LyBUaGlzIGlzIHRoZSAiZW51bV92YWx1ZXNfYnlfbmFtZSIgbWFwcGluZywgd2hpY2ggY29sbGVj
dHMgdmFsdWVzIGZyb20gYWxsCi0vLyBlbnVtIHR5cGVzIGluIGEgbWVzc2FnZS4KLS8vCi0vLyBO
b3RlIHRoYXQgdGhlIGJlaGF2aW9yIG9mIHRoZSBDKysgZGVzY3JpcHRvciBpcyBkaWZmZXJlbnQ6
IGl0IHdpbGwgc2VhcmNoIGFuZAotLy8gcmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB0aGF0IG1hdGNo
ZXMgdGhlIG5hbWUsIHdoZXJlYXMgdGhlIFB5dGhvbgotLy8gaW1wbGVtZW50YXRpb24gcmV0cmll
dmVzIHRoZSBsYXN0IG9uZS4KLQotdHlwZWRlZiBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBJ
dGVtRGVzY3JpcHRvcjsKLQotc3RhdGljIGludCBDb3VudChQeUNvbnRhaW5lciogc2VsZikgewot
ICBpbnQgY291bnQgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IEdldERlc2NyaXB0b3Ioc2Vs
ZiktPmVudW1fdHlwZV9jb3VudCgpOyArK2kpIHsKLSAgICBjb3VudCArPSBHZXREZXNjcmlwdG9y
KHNlbGYpLT5lbnVtX3R5cGUoaSktPnZhbHVlX2NvdW50KCk7Ci0gIH0KLSAgcmV0dXJuIGNvdW50
OwotfQotCi1zdGF0aWMgSXRlbURlc2NyaXB0b3IgR2V0QnlOYW1lKFB5Q29udGFpbmVyKiBzZWxm
LCBjb25zdCBzdHJpbmcmIG5hbWUpIHsKLSAgcmV0dXJuIEdldERlc2NyaXB0b3Ioc2VsZiktPkZp
bmRFbnVtVmFsdWVCeU5hbWUobmFtZSk7Ci19Ci0KLXN0YXRpYyBJdGVtRGVzY3JpcHRvciBHZXRC
eUluZGV4KFB5Q29udGFpbmVyKiBzZWxmLCBpbnQgaW5kZXgpIHsKLSAgLy8gVGhpcyBpcyBub3Qg
b3B0aW1hbCwgYnV0IHRoZSBudW1iZXIgb2YgZW51bXMgKnR5cGVzKiBpbiBhIGdpdmVuIG1lc3Nh
Z2UKLSAgLy8gaXMgc21hbGwuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCB3aGVuIGl0ZXJh
dGluZyBvdmVyIHRoZSBtYXBwaW5nLgotICBjb25zdCBFbnVtRGVzY3JpcHRvciogZW51bV90eXBl
ID0gTlVMTDsKLSAgaW50IGVudW1fdHlwZV9jb3VudCA9IEdldERlc2NyaXB0b3Ioc2VsZiktPmVu
dW1fdHlwZV9jb3VudCgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGVudW1fdHlwZV9jb3VudDsg
KytpKSB7Ci0gICAgZW51bV90eXBlID0gR2V0RGVzY3JpcHRvcihzZWxmKS0+ZW51bV90eXBlKGkp
OwotICAgIGludCBlbnVtX3ZhbHVlX2NvdW50ID0gZW51bV90eXBlLT52YWx1ZV9jb3VudCgpOwot
ICAgIGlmIChpbmRleCA8IGVudW1fdmFsdWVfY291bnQpIHsKLSAgICAgIC8vIEZvdW5kIGl0IQot
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGluZGV4IC09IGVudW1fdmFsdWVfY291bnQ7Ci0gIH0K
LSAgLy8gVGhlIG5leHQgc3RhdGVtZW50IGNhbm5vdCBvdmVyZmxvdywgYmVjYXVzZSB0aGlzIGZ1
bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGJ5Ci0gIC8vIGludGVybmFsIGl0ZXJhdG9ycyB3aGljaCBl
bnN1cmUgdGhhdCAwIDw9IGluZGV4IDwgQ291bnQoKS4KLSAgcmV0dXJuIGVudW1fdHlwZS0+dmFs
dWUoaW5kZXgpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIE5ld09iamVjdEZyb21JdGVtKEl0ZW1E
ZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0dXJuIFB5RW51bVZhbHVlRGVzY3JpcHRvcl9Gcm9tRGVz
Y3JpcHRvcihpdGVtKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cmluZyYgR2V0SXRlbU5hbWUoSXRl
bURlc2NyaXB0b3IgaXRlbSkgewotICByZXR1cm4gaXRlbS0+bmFtZSgpOwotfQotCi1zdGF0aWMg
RGVzY3JpcHRvckNvbnRhaW5lckRlZiBDb250YWluZXJEZWYgPSB7Ci0gICJNZXNzYWdlRW51bVZh
bHVlcyIsCi0gIChDb3VudE1ldGhvZClDb3VudCwKLSAgKEdldEJ5SW5kZXhNZXRob2QpR2V0QnlJ
bmRleCwKLSAgKEdldEJ5TmFtZU1ldGhvZClHZXRCeU5hbWUsCi0gIChHZXRCeUNhbWVsY2FzZU5h
bWVNZXRob2QpTlVMTCwKLSAgKEdldEJ5TnVtYmVyTWV0aG9kKU5VTEwsCi0gIChOZXdPYmplY3RG
cm9tSXRlbU1ldGhvZClOZXdPYmplY3RGcm9tSXRlbSwKLSAgKEdldEl0ZW1OYW1lTWV0aG9kKUdl
dEl0ZW1OYW1lLAotICAoR2V0SXRlbUNhbWVsY2FzZU5hbWVNZXRob2QpTlVMTCwKLSAgKEdldEl0
ZW1OdW1iZXJNZXRob2QpTlVMTCwKLSAgKEdldEl0ZW1JbmRleE1ldGhvZClOVUxMLAotfTsKLQot
fSAgLy8gbmFtZXNwYWNlIGVudW12YWx1ZXMKLQotUHlPYmplY3QqIE5ld01lc3NhZ2VFbnVtVmFs
dWVzQnlOYW1lKFBhcmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICByZXR1cm4gZGVzY3Jp
cHRvcjo6TmV3TWFwcGluZ0J5TmFtZSgmZW51bXZhbHVlczo6Q29udGFpbmVyRGVmLCBkZXNjcmlw
dG9yKTsKLX0KLQotbmFtZXNwYWNlIGV4dGVuc2lvbnMgewotCi10eXBlZGVmIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogSXRlbURlc2NyaXB0b3I7Ci0KLXN0YXRpYyBpbnQgQ291bnQoUHlDb250YWlu
ZXIqIHNlbGYpIHsKLSAgcmV0dXJuIEdldERlc2NyaXB0b3Ioc2VsZiktPmV4dGVuc2lvbl9jb3Vu
dCgpOwotfQotCi1zdGF0aWMgSXRlbURlc2NyaXB0b3IgR2V0QnlOYW1lKFB5Q29udGFpbmVyKiBz
ZWxmLCBjb25zdCBzdHJpbmcmIG5hbWUpIHsKLSAgcmV0dXJuIEdldERlc2NyaXB0b3Ioc2VsZikt
PkZpbmRFeHRlbnNpb25CeU5hbWUobmFtZSk7Ci19Ci0KLXN0YXRpYyBJdGVtRGVzY3JpcHRvciBH
ZXRCeUluZGV4KFB5Q29udGFpbmVyKiBzZWxmLCBpbnQgaW5kZXgpIHsKLSAgcmV0dXJuIEdldERl
c2NyaXB0b3Ioc2VsZiktPmV4dGVuc2lvbihpbmRleCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCog
TmV3T2JqZWN0RnJvbUl0ZW0oSXRlbURlc2NyaXB0b3IgaXRlbSkgewotICByZXR1cm4gUHlGaWVs
ZERlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoaXRlbSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJp
bmcmIEdldEl0ZW1OYW1lKEl0ZW1EZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0dXJuIGl0ZW0tPm5h
bWUoKTsKLX0KLQotc3RhdGljIGludCBHZXRJdGVtSW5kZXgoSXRlbURlc2NyaXB0b3IgaXRlbSkg
ewotICByZXR1cm4gaXRlbS0+aW5kZXgoKTsKLX0KLQotc3RhdGljIERlc2NyaXB0b3JDb250YWlu
ZXJEZWYgQ29udGFpbmVyRGVmID0gewotICAiTWVzc2FnZUV4dGVuc2lvbnMiLAotICAoQ291bnRN
ZXRob2QpQ291bnQsCi0gIChHZXRCeUluZGV4TWV0aG9kKUdldEJ5SW5kZXgsCi0gIChHZXRCeU5h
bWVNZXRob2QpR2V0QnlOYW1lLAotICAoR2V0QnlDYW1lbGNhc2VOYW1lTWV0aG9kKU5VTEwsCi0g
IChHZXRCeU51bWJlck1ldGhvZClOVUxMLAotICAoTmV3T2JqZWN0RnJvbUl0ZW1NZXRob2QpTmV3
T2JqZWN0RnJvbUl0ZW0sCi0gIChHZXRJdGVtTmFtZU1ldGhvZClHZXRJdGVtTmFtZSwKLSAgKEdl
dEl0ZW1DYW1lbGNhc2VOYW1lTWV0aG9kKU5VTEwsCi0gIChHZXRJdGVtTnVtYmVyTWV0aG9kKU5V
TEwsCi0gIChHZXRJdGVtSW5kZXhNZXRob2QpR2V0SXRlbUluZGV4LAotfTsKLQotfSAgLy8gbmFt
ZXNwYWNlIGV4dGVuc2lvbnMKLQotUHlPYmplY3QqIE5ld01lc3NhZ2VFeHRlbnNpb25zQnlOYW1l
KFBhcmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICByZXR1cm4gZGVzY3JpcHRvcjo6TmV3
TWFwcGluZ0J5TmFtZSgmZXh0ZW5zaW9uczo6Q29udGFpbmVyRGVmLCBkZXNjcmlwdG9yKTsKLX0K
LQotUHlPYmplY3QqIE5ld01lc3NhZ2VFeHRlbnNpb25zU2VxKFBhcmVudERlc2NyaXB0b3IgZGVz
Y3JpcHRvcikgewotICByZXR1cm4gZGVzY3JpcHRvcjo6TmV3U2VxdWVuY2UoJmV4dGVuc2lvbnM6
OkNvbnRhaW5lckRlZiwgZGVzY3JpcHRvcik7Ci19Ci0KLW5hbWVzcGFjZSBvbmVvZnMgewotCi10
eXBlZGVmIGNvbnN0IE9uZW9mRGVzY3JpcHRvciogSXRlbURlc2NyaXB0b3I7Ci0KLXN0YXRpYyBp
bnQgQ291bnQoUHlDb250YWluZXIqIHNlbGYpIHsKLSAgcmV0dXJuIEdldERlc2NyaXB0b3Ioc2Vs
ZiktPm9uZW9mX2RlY2xfY291bnQoKTsKLX0KLQotc3RhdGljIEl0ZW1EZXNjcmlwdG9yIEdldEJ5
TmFtZShQeUNvbnRhaW5lciogc2VsZiwgY29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIHJldHVybiBH
ZXREZXNjcmlwdG9yKHNlbGYpLT5GaW5kT25lb2ZCeU5hbWUobmFtZSk7Ci19Ci0KLXN0YXRpYyBJ
dGVtRGVzY3JpcHRvciBHZXRCeUluZGV4KFB5Q29udGFpbmVyKiBzZWxmLCBpbnQgaW5kZXgpIHsK
LSAgcmV0dXJuIEdldERlc2NyaXB0b3Ioc2VsZiktPm9uZW9mX2RlY2woaW5kZXgpOwotfQotCi1z
dGF0aWMgUHlPYmplY3QqIE5ld09iamVjdEZyb21JdGVtKEl0ZW1EZXNjcmlwdG9yIGl0ZW0pIHsK
LSAgcmV0dXJuIFB5T25lb2ZEZXNjcmlwdG9yX0Zyb21EZXNjcmlwdG9yKGl0ZW0pOwotfQotCi1z
dGF0aWMgY29uc3Qgc3RyaW5nJiBHZXRJdGVtTmFtZShJdGVtRGVzY3JpcHRvciBpdGVtKSB7Ci0g
IHJldHVybiBpdGVtLT5uYW1lKCk7Ci19Ci0KLXN0YXRpYyBpbnQgR2V0SXRlbUluZGV4KEl0ZW1E
ZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0dXJuIGl0ZW0tPmluZGV4KCk7Ci19Ci0KLXN0YXRpYyBE
ZXNjcmlwdG9yQ29udGFpbmVyRGVmIENvbnRhaW5lckRlZiA9IHsKLSAgIk1lc3NhZ2VPbmVvZnMi
LAotICAoQ291bnRNZXRob2QpQ291bnQsCi0gIChHZXRCeUluZGV4TWV0aG9kKUdldEJ5SW5kZXgs
Ci0gIChHZXRCeU5hbWVNZXRob2QpR2V0QnlOYW1lLAotICAoR2V0QnlDYW1lbGNhc2VOYW1lTWV0
aG9kKU5VTEwsCi0gIChHZXRCeU51bWJlck1ldGhvZClOVUxMLAotICAoTmV3T2JqZWN0RnJvbUl0
ZW1NZXRob2QpTmV3T2JqZWN0RnJvbUl0ZW0sCi0gIChHZXRJdGVtTmFtZU1ldGhvZClHZXRJdGVt
TmFtZSwKLSAgKEdldEl0ZW1DYW1lbGNhc2VOYW1lTWV0aG9kKU5VTEwsCi0gIChHZXRJdGVtTnVt
YmVyTWV0aG9kKU5VTEwsCi0gIChHZXRJdGVtSW5kZXhNZXRob2QpR2V0SXRlbUluZGV4LAotfTsK
LQotfSAgLy8gbmFtZXNwYWNlIG9uZW9mcwotCi1QeU9iamVjdCogTmV3TWVzc2FnZU9uZW9mc0J5
TmFtZShQYXJlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2NyaXB0b3I6
Ok5ld01hcHBpbmdCeU5hbWUoJm9uZW9mczo6Q29udGFpbmVyRGVmLCBkZXNjcmlwdG9yKTsKLX0K
LQotUHlPYmplY3QqIE5ld01lc3NhZ2VPbmVvZnNTZXEoUGFyZW50RGVzY3JpcHRvciBkZXNjcmlw
dG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yOjpOZXdTZXF1ZW5jZSgmb25lb2ZzOjpDb250YWlu
ZXJEZWYsIGRlc2NyaXB0b3IpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVzc2FnZV9kZXNjcmlw
dG9yCi0KLW5hbWVzcGFjZSBlbnVtX2Rlc2NyaXB0b3IgewotCi10eXBlZGVmIGNvbnN0IEVudW1E
ZXNjcmlwdG9yKiBQYXJlbnREZXNjcmlwdG9yOwotCi1zdGF0aWMgUGFyZW50RGVzY3JpcHRvciBH
ZXREZXNjcmlwdG9yKFB5Q29udGFpbmVyKiBzZWxmKSB7Ci0gIHJldHVybiByZWludGVycHJldF9j
YXN0PFBhcmVudERlc2NyaXB0b3I+KHNlbGYtPmRlc2NyaXB0b3IpOwotfQotCi1uYW1lc3BhY2Ug
ZW51bXZhbHVlcyB7Ci0KLXR5cGVkZWYgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogSXRlbURl
c2NyaXB0b3I7Ci0KLXN0YXRpYyBpbnQgQ291bnQoUHlDb250YWluZXIqIHNlbGYpIHsKLSAgcmV0
dXJuIEdldERlc2NyaXB0b3Ioc2VsZiktPnZhbHVlX2NvdW50KCk7Ci19Ci0KLXN0YXRpYyBJdGVt
RGVzY3JpcHRvciBHZXRCeUluZGV4KFB5Q29udGFpbmVyKiBzZWxmLCBpbnQgaW5kZXgpIHsKLSAg
cmV0dXJuIEdldERlc2NyaXB0b3Ioc2VsZiktPnZhbHVlKGluZGV4KTsKLX0KLQotc3RhdGljIEl0
ZW1EZXNjcmlwdG9yIEdldEJ5TmFtZShQeUNvbnRhaW5lciogc2VsZiwgY29uc3Qgc3RyaW5nJiBu
YW1lKSB7Ci0gIHJldHVybiBHZXREZXNjcmlwdG9yKHNlbGYpLT5GaW5kVmFsdWVCeU5hbWUobmFt
ZSk7Ci19Ci0KLXN0YXRpYyBJdGVtRGVzY3JpcHRvciBHZXRCeU51bWJlcihQeUNvbnRhaW5lciog
c2VsZiwgaW50IG51bWJlcikgewotICByZXR1cm4gR2V0RGVzY3JpcHRvcihzZWxmKS0+RmluZFZh
bHVlQnlOdW1iZXIobnVtYmVyKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBOZXdPYmplY3RGcm9t
SXRlbShJdGVtRGVzY3JpcHRvciBpdGVtKSB7Ci0gIHJldHVybiBQeUVudW1WYWx1ZURlc2NyaXB0
b3JfRnJvbURlc2NyaXB0b3IoaXRlbSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJpbmcmIEdldEl0
ZW1OYW1lKEl0ZW1EZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0dXJuIGl0ZW0tPm5hbWUoKTsKLX0K
LQotc3RhdGljIGludCBHZXRJdGVtTnVtYmVyKEl0ZW1EZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0
dXJuIGl0ZW0tPm51bWJlcigpOwotfQotCi1zdGF0aWMgaW50IEdldEl0ZW1JbmRleChJdGVtRGVz
Y3JpcHRvciBpdGVtKSB7Ci0gIHJldHVybiBpdGVtLT5pbmRleCgpOwotfQotCi1zdGF0aWMgRGVz
Y3JpcHRvckNvbnRhaW5lckRlZiBDb250YWluZXJEZWYgPSB7Ci0gICJFbnVtVmFsdWVzIiwKLSAg
KENvdW50TWV0aG9kKUNvdW50LAotICAoR2V0QnlJbmRleE1ldGhvZClHZXRCeUluZGV4LAotICAo
R2V0QnlOYW1lTWV0aG9kKUdldEJ5TmFtZSwKLSAgKEdldEJ5Q2FtZWxjYXNlTmFtZU1ldGhvZClO
VUxMLAotICAoR2V0QnlOdW1iZXJNZXRob2QpR2V0QnlOdW1iZXIsCi0gIChOZXdPYmplY3RGcm9t
SXRlbU1ldGhvZClOZXdPYmplY3RGcm9tSXRlbSwKLSAgKEdldEl0ZW1OYW1lTWV0aG9kKUdldEl0
ZW1OYW1lLAotICAoR2V0SXRlbUNhbWVsY2FzZU5hbWVNZXRob2QpTlVMTCwKLSAgKEdldEl0ZW1O
dW1iZXJNZXRob2QpR2V0SXRlbU51bWJlciwKLSAgKEdldEl0ZW1JbmRleE1ldGhvZClHZXRJdGVt
SW5kZXgsCi19OwotCi19ICAvLyBuYW1lc3BhY2UgZW51bXZhbHVlcwotCi1QeU9iamVjdCogTmV3
RW51bVZhbHVlc0J5TmFtZShQYXJlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJu
IGRlc2NyaXB0b3I6Ok5ld01hcHBpbmdCeU5hbWUoJmVudW12YWx1ZXM6OkNvbnRhaW5lckRlZiwg
ZGVzY3JpcHRvcik7Ci19Ci0KLVB5T2JqZWN0KiBOZXdFbnVtVmFsdWVzQnlOdW1iZXIoUGFyZW50
RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yOjpOZXdNYXBwaW5n
QnlOdW1iZXIoJmVudW12YWx1ZXM6OkNvbnRhaW5lckRlZiwgZGVzY3JpcHRvcik7Ci19Ci0KLVB5
T2JqZWN0KiBOZXdFbnVtVmFsdWVzU2VxKFBhcmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcikgewot
ICByZXR1cm4gZGVzY3JpcHRvcjo6TmV3U2VxdWVuY2UoJmVudW12YWx1ZXM6OkNvbnRhaW5lckRl
ZiwgZGVzY3JpcHRvcik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBlbnVtX2Rlc2NyaXB0b3IKLQot
bmFtZXNwYWNlIG9uZW9mX2Rlc2NyaXB0b3IgewotCi10eXBlZGVmIGNvbnN0IE9uZW9mRGVzY3Jp
cHRvciogUGFyZW50RGVzY3JpcHRvcjsKLQotc3RhdGljIFBhcmVudERlc2NyaXB0b3IgR2V0RGVz
Y3JpcHRvcihQeUNvbnRhaW5lciogc2VsZikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQ
YXJlbnREZXNjcmlwdG9yPihzZWxmLT5kZXNjcmlwdG9yKTsKLX0KLQotbmFtZXNwYWNlIGZpZWxk
cyB7Ci0KLXR5cGVkZWYgY29uc3QgRmllbGREZXNjcmlwdG9yKiBJdGVtRGVzY3JpcHRvcjsKLQot
c3RhdGljIGludCBDb3VudChQeUNvbnRhaW5lciogc2VsZikgewotICByZXR1cm4gR2V0RGVzY3Jp
cHRvcihzZWxmKS0+ZmllbGRfY291bnQoKTsKLX0KLQotc3RhdGljIEl0ZW1EZXNjcmlwdG9yIEdl
dEJ5SW5kZXgoUHlDb250YWluZXIqIHNlbGYsIGludCBpbmRleCkgewotICByZXR1cm4gR2V0RGVz
Y3JpcHRvcihzZWxmKS0+ZmllbGQoaW5kZXgpOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIE5ld09i
amVjdEZyb21JdGVtKEl0ZW1EZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0dXJuIFB5RmllbGREZXNj
cmlwdG9yX0Zyb21EZXNjcmlwdG9yKGl0ZW0pOwotfQotCi1zdGF0aWMgaW50IEdldEl0ZW1JbmRl
eChJdGVtRGVzY3JpcHRvciBpdGVtKSB7Ci0gIHJldHVybiBpdGVtLT5pbmRleF9pbl9vbmVvZigp
OwotfQotCi1zdGF0aWMgRGVzY3JpcHRvckNvbnRhaW5lckRlZiBDb250YWluZXJEZWYgPSB7Ci0g
ICJPbmVvZkZpZWxkcyIsCi0gIChDb3VudE1ldGhvZClDb3VudCwKLSAgKEdldEJ5SW5kZXhNZXRo
b2QpR2V0QnlJbmRleCwKLSAgKEdldEJ5TmFtZU1ldGhvZClOVUxMLAotICAoR2V0QnlDYW1lbGNh
c2VOYW1lTWV0aG9kKU5VTEwsCi0gIChHZXRCeU51bWJlck1ldGhvZClOVUxMLAotICAoTmV3T2Jq
ZWN0RnJvbUl0ZW1NZXRob2QpTmV3T2JqZWN0RnJvbUl0ZW0sCi0gIChHZXRJdGVtTmFtZU1ldGhv
ZClOVUxMLAotICAoR2V0SXRlbUNhbWVsY2FzZU5hbWVNZXRob2QpTlVMTCwKLSAgKEdldEl0ZW1O
dW1iZXJNZXRob2QpTlVMTCwKLSAgKEdldEl0ZW1JbmRleE1ldGhvZClHZXRJdGVtSW5kZXgsCi19
OwotCi19ICAvLyBuYW1lc3BhY2UgZmllbGRzCi0KLVB5T2JqZWN0KiBOZXdPbmVvZkZpZWxkc1Nl
cShQYXJlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2NyaXB0b3I6Ok5l
d1NlcXVlbmNlKCZmaWVsZHM6OkNvbnRhaW5lckRlZiwgZGVzY3JpcHRvcik7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBvbmVvZl9kZXNjcmlwdG9yCi0KLW5hbWVzcGFjZSBmaWxlX2Rlc2NyaXB0b3Ig
ewotCi10eXBlZGVmIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBQYXJlbnREZXNjcmlwdG9yOwotCi1z
dGF0aWMgUGFyZW50RGVzY3JpcHRvciBHZXREZXNjcmlwdG9yKFB5Q29udGFpbmVyKiBzZWxmKSB7
Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFBhcmVudERlc2NyaXB0b3I+KHNlbGYtPmRlc2Ny
aXB0b3IpOwotfQotCi1uYW1lc3BhY2UgbWVzc2FnZXMgewotCi10eXBlZGVmIGNvbnN0IERlc2Ny
aXB0b3IqIEl0ZW1EZXNjcmlwdG9yOwotCi1zdGF0aWMgaW50IENvdW50KFB5Q29udGFpbmVyKiBz
ZWxmKSB7Ci0gIHJldHVybiBHZXREZXNjcmlwdG9yKHNlbGYpLT5tZXNzYWdlX3R5cGVfY291bnQo
KTsKLX0KLQotc3RhdGljIEl0ZW1EZXNjcmlwdG9yIEdldEJ5TmFtZShQeUNvbnRhaW5lciogc2Vs
ZiwgY29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIHJldHVybiBHZXREZXNjcmlwdG9yKHNlbGYpLT5G
aW5kTWVzc2FnZVR5cGVCeU5hbWUobmFtZSk7Ci19Ci0KLXN0YXRpYyBJdGVtRGVzY3JpcHRvciBH
ZXRCeUluZGV4KFB5Q29udGFpbmVyKiBzZWxmLCBpbnQgaW5kZXgpIHsKLSAgcmV0dXJuIEdldERl
c2NyaXB0b3Ioc2VsZiktPm1lc3NhZ2VfdHlwZShpbmRleCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVj
dCogTmV3T2JqZWN0RnJvbUl0ZW0oSXRlbURlc2NyaXB0b3IgaXRlbSkgewotICByZXR1cm4gUHlN
ZXNzYWdlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihpdGVtKTsKLX0KLQotc3RhdGljIGNvbnN0
IHN0cmluZyYgR2V0SXRlbU5hbWUoSXRlbURlc2NyaXB0b3IgaXRlbSkgewotICByZXR1cm4gaXRl
bS0+bmFtZSgpOwotfQotCi1zdGF0aWMgaW50IEdldEl0ZW1JbmRleChJdGVtRGVzY3JpcHRvciBp
dGVtKSB7Ci0gIHJldHVybiBpdGVtLT5pbmRleCgpOwotfQotCi1zdGF0aWMgRGVzY3JpcHRvckNv
bnRhaW5lckRlZiBDb250YWluZXJEZWYgPSB7Ci0gICJGaWxlTWVzc2FnZXMiLAotICAoQ291bnRN
ZXRob2QpQ291bnQsCi0gIChHZXRCeUluZGV4TWV0aG9kKUdldEJ5SW5kZXgsCi0gIChHZXRCeU5h
bWVNZXRob2QpR2V0QnlOYW1lLAotICAoR2V0QnlDYW1lbGNhc2VOYW1lTWV0aG9kKU5VTEwsCi0g
IChHZXRCeU51bWJlck1ldGhvZClOVUxMLAotICAoTmV3T2JqZWN0RnJvbUl0ZW1NZXRob2QpTmV3
T2JqZWN0RnJvbUl0ZW0sCi0gIChHZXRJdGVtTmFtZU1ldGhvZClHZXRJdGVtTmFtZSwKLSAgKEdl
dEl0ZW1DYW1lbGNhc2VOYW1lTWV0aG9kKU5VTEwsCi0gIChHZXRJdGVtTnVtYmVyTWV0aG9kKU5V
TEwsCi0gIChHZXRJdGVtSW5kZXhNZXRob2QpR2V0SXRlbUluZGV4LAotfTsKLQotfSAgLy8gbmFt
ZXNwYWNlIG1lc3NhZ2VzCi0KLVB5T2JqZWN0KiBOZXdGaWxlTWVzc2FnZVR5cGVzQnlOYW1lKGNv
bnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yOjpO
ZXdNYXBwaW5nQnlOYW1lKCZtZXNzYWdlczo6Q29udGFpbmVyRGVmLCBkZXNjcmlwdG9yKTsKLX0K
LQotbmFtZXNwYWNlIGVudW1zIHsKLQotdHlwZWRlZiBjb25zdCBFbnVtRGVzY3JpcHRvciogSXRl
bURlc2NyaXB0b3I7Ci0KLXN0YXRpYyBpbnQgQ291bnQoUHlDb250YWluZXIqIHNlbGYpIHsKLSAg
cmV0dXJuIEdldERlc2NyaXB0b3Ioc2VsZiktPmVudW1fdHlwZV9jb3VudCgpOwotfQotCi1zdGF0
aWMgSXRlbURlc2NyaXB0b3IgR2V0QnlOYW1lKFB5Q29udGFpbmVyKiBzZWxmLCBjb25zdCBzdHJp
bmcmIG5hbWUpIHsKLSAgcmV0dXJuIEdldERlc2NyaXB0b3Ioc2VsZiktPkZpbmRFbnVtVHlwZUJ5
TmFtZShuYW1lKTsKLX0KLQotc3RhdGljIEl0ZW1EZXNjcmlwdG9yIEdldEJ5SW5kZXgoUHlDb250
YWluZXIqIHNlbGYsIGludCBpbmRleCkgewotICByZXR1cm4gR2V0RGVzY3JpcHRvcihzZWxmKS0+
ZW51bV90eXBlKGluZGV4KTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBOZXdPYmplY3RGcm9tSXRl
bShJdGVtRGVzY3JpcHRvciBpdGVtKSB7Ci0gIHJldHVybiBQeUVudW1EZXNjcmlwdG9yX0Zyb21E
ZXNjcmlwdG9yKGl0ZW0pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RyaW5nJiBHZXRJdGVtTmFtZShJ
dGVtRGVzY3JpcHRvciBpdGVtKSB7Ci0gIHJldHVybiBpdGVtLT5uYW1lKCk7Ci19Ci0KLXN0YXRp
YyBpbnQgR2V0SXRlbUluZGV4KEl0ZW1EZXNjcmlwdG9yIGl0ZW0pIHsKLSAgcmV0dXJuIGl0ZW0t
PmluZGV4KCk7Ci19Ci0KLXN0YXRpYyBEZXNjcmlwdG9yQ29udGFpbmVyRGVmIENvbnRhaW5lckRl
ZiA9IHsKLSAgIkZpbGVFbnVtcyIsCi0gIChDb3VudE1ldGhvZClDb3VudCwKLSAgKEdldEJ5SW5k
ZXhNZXRob2QpR2V0QnlJbmRleCwKLSAgKEdldEJ5TmFtZU1ldGhvZClHZXRCeU5hbWUsCi0gIChH
ZXRCeUNhbWVsY2FzZU5hbWVNZXRob2QpTlVMTCwKLSAgKEdldEJ5TnVtYmVyTWV0aG9kKU5VTEws
Ci0gIChOZXdPYmplY3RGcm9tSXRlbU1ldGhvZClOZXdPYmplY3RGcm9tSXRlbSwKLSAgKEdldEl0
ZW1OYW1lTWV0aG9kKUdldEl0ZW1OYW1lLAotICAoR2V0SXRlbUNhbWVsY2FzZU5hbWVNZXRob2Qp
TlVMTCwKLSAgKEdldEl0ZW1OdW1iZXJNZXRob2QpTlVMTCwKLSAgKEdldEl0ZW1JbmRleE1ldGhv
ZClHZXRJdGVtSW5kZXgsCi19OwotCi19ICAvLyBuYW1lc3BhY2UgZW51bXMKLQotUHlPYmplY3Qq
IE5ld0ZpbGVFbnVtVHlwZXNCeU5hbWUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2NyaXB0b3Ip
IHsKLSAgcmV0dXJuIGRlc2NyaXB0b3I6Ok5ld01hcHBpbmdCeU5hbWUoJmVudW1zOjpDb250YWlu
ZXJEZWYsIGRlc2NyaXB0b3IpOwotfQotCi1uYW1lc3BhY2UgZXh0ZW5zaW9ucyB7Ci0KLXR5cGVk
ZWYgY29uc3QgRmllbGREZXNjcmlwdG9yKiBJdGVtRGVzY3JpcHRvcjsKLQotc3RhdGljIGludCBD
b3VudChQeUNvbnRhaW5lciogc2VsZikgewotICByZXR1cm4gR2V0RGVzY3JpcHRvcihzZWxmKS0+
ZXh0ZW5zaW9uX2NvdW50KCk7Ci19Ci0KLXN0YXRpYyBJdGVtRGVzY3JpcHRvciBHZXRCeU5hbWUo
UHlDb250YWluZXIqIHNlbGYsIGNvbnN0IHN0cmluZyYgbmFtZSkgewotICByZXR1cm4gR2V0RGVz
Y3JpcHRvcihzZWxmKS0+RmluZEV4dGVuc2lvbkJ5TmFtZShuYW1lKTsKLX0KLQotc3RhdGljIEl0
ZW1EZXNjcmlwdG9yIEdldEJ5SW5kZXgoUHlDb250YWluZXIqIHNlbGYsIGludCBpbmRleCkgewot
ICByZXR1cm4gR2V0RGVzY3JpcHRvcihzZWxmKS0+ZXh0ZW5zaW9uKGluZGV4KTsKLX0KLQotc3Rh
dGljIFB5T2JqZWN0KiBOZXdPYmplY3RGcm9tSXRlbShJdGVtRGVzY3JpcHRvciBpdGVtKSB7Ci0g
IHJldHVybiBQeUZpZWxkRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihpdGVtKTsKLX0KLQotc3Rh
dGljIGNvbnN0IHN0cmluZyYgR2V0SXRlbU5hbWUoSXRlbURlc2NyaXB0b3IgaXRlbSkgewotICBy
ZXR1cm4gaXRlbS0+bmFtZSgpOwotfQotCi1zdGF0aWMgaW50IEdldEl0ZW1JbmRleChJdGVtRGVz
Y3JpcHRvciBpdGVtKSB7Ci0gIHJldHVybiBpdGVtLT5pbmRleCgpOwotfQotCi1zdGF0aWMgRGVz
Y3JpcHRvckNvbnRhaW5lckRlZiBDb250YWluZXJEZWYgPSB7Ci0gICJGaWxlRXh0ZW5zaW9ucyIs
Ci0gIChDb3VudE1ldGhvZClDb3VudCwKLSAgKEdldEJ5SW5kZXhNZXRob2QpR2V0QnlJbmRleCwK
LSAgKEdldEJ5TmFtZU1ldGhvZClHZXRCeU5hbWUsCi0gIChHZXRCeUNhbWVsY2FzZU5hbWVNZXRo
b2QpTlVMTCwKLSAgKEdldEJ5TnVtYmVyTWV0aG9kKU5VTEwsCi0gIChOZXdPYmplY3RGcm9tSXRl
bU1ldGhvZClOZXdPYmplY3RGcm9tSXRlbSwKLSAgKEdldEl0ZW1OYW1lTWV0aG9kKUdldEl0ZW1O
YW1lLAotICAoR2V0SXRlbUNhbWVsY2FzZU5hbWVNZXRob2QpTlVMTCwKLSAgKEdldEl0ZW1OdW1i
ZXJNZXRob2QpTlVMTCwKLSAgKEdldEl0ZW1JbmRleE1ldGhvZClHZXRJdGVtSW5kZXgsCi19Owot
Ci19ICAvLyBuYW1lc3BhY2UgZXh0ZW5zaW9ucwotCi1QeU9iamVjdCogTmV3RmlsZUV4dGVuc2lv
bnNCeU5hbWUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRl
c2NyaXB0b3I6Ok5ld01hcHBpbmdCeU5hbWUoJmV4dGVuc2lvbnM6OkNvbnRhaW5lckRlZiwgZGVz
Y3JpcHRvcik7Ci19Ci0KLW5hbWVzcGFjZSBkZXBlbmRlbmNpZXMgewotCi10eXBlZGVmIGNvbnN0
IEZpbGVEZXNjcmlwdG9yKiBJdGVtRGVzY3JpcHRvcjsKLQotc3RhdGljIGludCBDb3VudChQeUNv
bnRhaW5lciogc2VsZikgewotICByZXR1cm4gR2V0RGVzY3JpcHRvcihzZWxmKS0+ZGVwZW5kZW5j
eV9jb3VudCgpOwotfQotCi1zdGF0aWMgSXRlbURlc2NyaXB0b3IgR2V0QnlJbmRleChQeUNvbnRh
aW5lciogc2VsZiwgaW50IGluZGV4KSB7Ci0gIHJldHVybiBHZXREZXNjcmlwdG9yKHNlbGYpLT5k
ZXBlbmRlbmN5KGluZGV4KTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBOZXdPYmplY3RGcm9tSXRl
bShJdGVtRGVzY3JpcHRvciBpdGVtKSB7Ci0gIHJldHVybiBQeUZpbGVEZXNjcmlwdG9yX0Zyb21E
ZXNjcmlwdG9yKGl0ZW0pOwotfQotCi1zdGF0aWMgRGVzY3JpcHRvckNvbnRhaW5lckRlZiBDb250
YWluZXJEZWYgPSB7Ci0gICJGaWxlRGVwZW5kZW5jaWVzIiwKLSAgKENvdW50TWV0aG9kKUNvdW50
LAotICAoR2V0QnlJbmRleE1ldGhvZClHZXRCeUluZGV4LAotICAoR2V0QnlOYW1lTWV0aG9kKU5V
TEwsCi0gIChHZXRCeUNhbWVsY2FzZU5hbWVNZXRob2QpTlVMTCwKLSAgKEdldEJ5TnVtYmVyTWV0
aG9kKU5VTEwsCi0gIChOZXdPYmplY3RGcm9tSXRlbU1ldGhvZClOZXdPYmplY3RGcm9tSXRlbSwK
LSAgKEdldEl0ZW1OYW1lTWV0aG9kKU5VTEwsCi0gIChHZXRJdGVtQ2FtZWxjYXNlTmFtZU1ldGhv
ZClOVUxMLAotICAoR2V0SXRlbU51bWJlck1ldGhvZClOVUxMLAotICAoR2V0SXRlbUluZGV4TWV0
aG9kKU5VTEwsCi19OwotCi19ICAvLyBuYW1lc3BhY2UgZGVwZW5kZW5jaWVzCi0KLVB5T2JqZWN0
KiBOZXdGaWxlRGVwZW5kZW5jaWVzKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7
Ci0gIHJldHVybiBkZXNjcmlwdG9yOjpOZXdTZXF1ZW5jZSgmZGVwZW5kZW5jaWVzOjpDb250YWlu
ZXJEZWYsIGRlc2NyaXB0b3IpOwotfQotCi1uYW1lc3BhY2UgcHVibGljX2RlcGVuZGVuY2llcyB7
Ci0KLXR5cGVkZWYgY29uc3QgRmlsZURlc2NyaXB0b3IqIEl0ZW1EZXNjcmlwdG9yOwotCi1zdGF0
aWMgaW50IENvdW50KFB5Q29udGFpbmVyKiBzZWxmKSB7Ci0gIHJldHVybiBHZXREZXNjcmlwdG9y
KHNlbGYpLT5wdWJsaWNfZGVwZW5kZW5jeV9jb3VudCgpOwotfQotCi1zdGF0aWMgSXRlbURlc2Ny
aXB0b3IgR2V0QnlJbmRleChQeUNvbnRhaW5lciogc2VsZiwgaW50IGluZGV4KSB7Ci0gIHJldHVy
biBHZXREZXNjcmlwdG9yKHNlbGYpLT5wdWJsaWNfZGVwZW5kZW5jeShpbmRleCk7Ci19Ci0KLXN0
YXRpYyBQeU9iamVjdCogTmV3T2JqZWN0RnJvbUl0ZW0oSXRlbURlc2NyaXB0b3IgaXRlbSkgewot
ICByZXR1cm4gUHlGaWxlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihpdGVtKTsKLX0KLQotc3Rh
dGljIERlc2NyaXB0b3JDb250YWluZXJEZWYgQ29udGFpbmVyRGVmID0gewotICAiRmlsZVB1Ymxp
Y0RlcGVuZGVuY2llcyIsCi0gIChDb3VudE1ldGhvZClDb3VudCwKLSAgKEdldEJ5SW5kZXhNZXRo
b2QpR2V0QnlJbmRleCwKLSAgKEdldEJ5TmFtZU1ldGhvZClOVUxMLAotICAoR2V0QnlDYW1lbGNh
c2VOYW1lTWV0aG9kKU5VTEwsCi0gIChHZXRCeU51bWJlck1ldGhvZClOVUxMLAotICAoTmV3T2Jq
ZWN0RnJvbUl0ZW1NZXRob2QpTmV3T2JqZWN0RnJvbUl0ZW0sCi0gIChHZXRJdGVtTmFtZU1ldGhv
ZClOVUxMLAotICAoR2V0SXRlbUNhbWVsY2FzZU5hbWVNZXRob2QpTlVMTCwKLSAgKEdldEl0ZW1O
dW1iZXJNZXRob2QpTlVMTCwKLSAgKEdldEl0ZW1JbmRleE1ldGhvZClOVUxMLAotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIHB1YmxpY19kZXBlbmRlbmNpZXMKLQotUHlPYmplY3QqIE5ld0ZpbGVQdWJs
aWNEZXBlbmRlbmNpZXMoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgcmV0
dXJuIGRlc2NyaXB0b3I6Ok5ld1NlcXVlbmNlKCZwdWJsaWNfZGVwZW5kZW5jaWVzOjpDb250YWlu
ZXJEZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yKTsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlIGZpbGVfZGVzY3JpcHRvcgotCi0KLS8vIFJlZ2lzdGVyIGFsbCBp
bXBsZW1lbnRhdGlvbnMKLQotYm9vbCBJbml0RGVzY3JpcHRvck1hcHBpbmdUeXBlcygpIHsKLSAg
aWYgKFB5VHlwZV9SZWFkeSgmZGVzY3JpcHRvcjo6RGVzY3JpcHRvck1hcHBpbmdfVHlwZSkgPCAw
KQotICAgIHJldHVybiBmYWxzZTsKLSAgaWYgKFB5VHlwZV9SZWFkeSgmZGVzY3JpcHRvcjo6RGVz
Y3JpcHRvclNlcXVlbmNlX1R5cGUpIDwgMCkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmIChQeVR5
cGVfUmVhZHkoJmRlc2NyaXB0b3I6OkNvbnRhaW5lckl0ZXJhdG9yX1R5cGUpIDwgMCkKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHl0aG9u
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yX2NvbnRhaW5lcnMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yX2NvbnRhaW5lcnMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U0MDc0N2Q1N2ExYzA2NWZiMWUyNzliYjRk
ZDU1ZWQyYjFmZjAyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvZGVzY3JpcHRvcl9jb250YWluZXJzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1BZVEhPTl9DUFBfREVTQ1JJUFRP
Ul9DT05UQUlORVJTX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfUFlUSE9OX0NQUF9ERVND
UklQVE9SX0NPTlRBSU5FUlNfSF9fCi0KLS8vIE1hcHBpbmdzIGFuZCBTZXF1ZW5jZXMgb2YgZGVz
Y3JpcHRvcnMuCi0vLyBUaGV5IGltcGxlbWVudCBjb250YWluZXJzIGxpa2UgZmllbGRzX2J5X25h
bWUsIEVudW1EZXNjcmlwdG9yLnZhbHVlcy4uLgotLy8gU2VlIGRlc2NyaXB0b3JfY29udGFpbmVy
cy5jYyBmb3IgbW9yZSBkZXNjcmlwdGlvbi4KLSNpbmNsdWRlIDxQeXRob24uaD4KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1jbGFzcyBEZXNjcmlwdG9yOwot
Y2xhc3MgRmlsZURlc2NyaXB0b3I7Ci1jbGFzcyBFbnVtRGVzY3JpcHRvcjsKLWNsYXNzIE9uZW9m
RGVzY3JpcHRvcjsKLQotbmFtZXNwYWNlIHB5dGhvbiB7Ci0KLS8vIEluaXRpYWxpemUgdGhlIHZh
cmlvdXMgdHlwZXMgYW5kIG9iamVjdHMuCi1ib29sIEluaXREZXNjcmlwdG9yTWFwcGluZ1R5cGVz
KCk7Ci0KLS8vIEVhY2ggZnVuY3Rpb24gYmVsb3cgcmV0dXJucyBhIE1hcHBpbmcsIG9yIGEgU2Vx
dWVuY2Ugb2YgZGVzY3JpcHRvcnMuCi0vLyBUaGV5IGFsbCByZXR1cm4gYSBuZXcgcmVmZXJlbmNl
LgotCi1uYW1lc3BhY2UgbWVzc2FnZV9kZXNjcmlwdG9yIHsKLVB5T2JqZWN0KiBOZXdNZXNzYWdl
RmllbGRzQnlOYW1lKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotUHlPYmplY3QqIE5l
d01lc3NhZ2VGaWVsZHNCeUNhbWVsY2FzZU5hbWUoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRv
cik7Ci1QeU9iamVjdCogTmV3TWVzc2FnZUZpZWxkc0J5TnVtYmVyKGNvbnN0IERlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IpOwotUHlPYmplY3QqIE5ld01lc3NhZ2VGaWVsZHNTZXEoY29uc3QgRGVzY3Jp
cHRvciogZGVzY3JpcHRvcik7Ci0KLVB5T2JqZWN0KiBOZXdNZXNzYWdlTmVzdGVkVHlwZXNTZXEo
Y29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci1QeU9iamVjdCogTmV3TWVzc2FnZU5lc3Rl
ZFR5cGVzQnlOYW1lKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotCi1QeU9iamVjdCog
TmV3TWVzc2FnZUVudW1zQnlOYW1lKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotUHlP
YmplY3QqIE5ld01lc3NhZ2VFbnVtc1NlcShjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsK
LVB5T2JqZWN0KiBOZXdNZXNzYWdlRW51bVZhbHVlc0J5TmFtZShjb25zdCBEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yKTsKLQotUHlPYmplY3QqIE5ld01lc3NhZ2VFeHRlbnNpb25zQnlOYW1lKGNvbnN0
IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotUHlPYmplY3QqIE5ld01lc3NhZ2VFeHRlbnNpb25z
U2VxKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotCi1QeU9iamVjdCogTmV3TWVzc2Fn
ZU9uZW9mc0J5TmFtZShjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLVB5T2JqZWN0KiBO
ZXdNZXNzYWdlT25lb2ZzU2VxKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotfSAgLy8g
bmFtZXNwYWNlIG1lc3NhZ2VfZGVzY3JpcHRvcgotCi1uYW1lc3BhY2UgZW51bV9kZXNjcmlwdG9y
IHsKLVB5T2JqZWN0KiBOZXdFbnVtVmFsdWVzQnlOYW1lKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yKTsKLVB5T2JqZWN0KiBOZXdFbnVtVmFsdWVzQnlOdW1iZXIoY29uc3QgRW51bURl
c2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotUHlPYmplY3QqIE5ld0VudW1WYWx1ZXNTZXEoY29uc3Qg
RW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotfSAgLy8gbmFtZXNwYWNlIGVudW1fZGVzY3Jp
cHRvcgotCi1uYW1lc3BhY2Ugb25lb2ZfZGVzY3JpcHRvciB7Ci1QeU9iamVjdCogTmV3T25lb2ZG
aWVsZHNTZXEoY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLX0gIC8vIG5hbWVz
cGFjZSBvbmVvZl9kZXNjcmlwdG9yCi0KLW5hbWVzcGFjZSBmaWxlX2Rlc2NyaXB0b3IgewotUHlP
YmplY3QqIE5ld0ZpbGVNZXNzYWdlVHlwZXNCeU5hbWUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRl
c2NyaXB0b3IpOwotCi1QeU9iamVjdCogTmV3RmlsZUVudW1UeXBlc0J5TmFtZShjb25zdCBGaWxl
RGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLVB5T2JqZWN0KiBOZXdGaWxlRXh0ZW5zaW9uc0J5
TmFtZShjb25zdCBGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLVB5T2JqZWN0KiBOZXdG
aWxlRGVwZW5kZW5jaWVzKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLVB5T2Jq
ZWN0KiBOZXdGaWxlUHVibGljRGVwZW5kZW5jaWVzKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNj
cmlwdG9yKTsKLX0gIC8vIG5hbWVzcGFjZSBmaWxlX2Rlc2NyaXB0b3IKLQotCi19ICAvLyBuYW1l
c3BhY2UgcHl0aG9uCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNl
IGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfUFlUSE9OX0NQUF9ERVNDUklQVE9S
X0NPTlRBSU5FUlNfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQv
ZGVzY3JpcHRvcl9kYXRhYmFzZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNj
cmlwdG9yX2RhdGFiYXNlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWE0MGNj
NzIwYWM5MDEwMjgxMDZmODE3MDU0NWJkN2RmNDRjNDM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNj
cmlwdG9yX2RhdGFiYXNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlzIGZpbGUgZGVmaW5lcyBhIEMr
KyBEZXNjcmlwdG9yRGF0YWJhc2UsIHdoaWNoIHdyYXBzIGEgUHl0aG9uIERhdGFiYXNlCi0vLyBh
bmQgZGVsZWdhdGUgYWxsIGl0cyBvcGVyYXRpb25zIHRvIFB5dGhvbiBtZXRob2RzLgotCi0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfZGF0YWJhc2UuaD4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNj
cmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L21lc3NhZ2UuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQvc2NvcGVkX3B5b2JqZWN0X3B0ci5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgcHl0
aG9uIHsKLQotUHlEZXNjcmlwdG9yRGF0YWJhc2U6OlB5RGVzY3JpcHRvckRhdGFiYXNlKFB5T2Jq
ZWN0KiBweV9kYXRhYmFzZSkKLSAgICA6IHB5X2RhdGFiYXNlXyhweV9kYXRhYmFzZSkgewotICBQ
eV9JTkNSRUYocHlfZGF0YWJhc2VfKTsKLX0KLQotUHlEZXNjcmlwdG9yRGF0YWJhc2U6On5QeURl
c2NyaXB0b3JEYXRhYmFzZSgpIHsgUHlfREVDUkVGKHB5X2RhdGFiYXNlXyk7IH0KLQotLy8gQ29u
dmVydCBhIFB5dGhvbiBvYmplY3QgdG8gYSBGaWxlRGVzY3JpcHRvclByb3RvIHBvaW50ZXIuCi0v
LyBIYW5kbGVzIGFsbCBraW5kcyBvZiBQeXRob24gZXJyb3JzLCB3aGljaCBhcmUgc2ltcGx5IGxv
Z2dlZC4KLXN0YXRpYyBib29sIEdldEZpbGVEZXNjcmlwdG9yUHJvdG8oUHlPYmplY3QqIHB5X2Rl
c2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVEZXNjcmlw
dG9yUHJvdG8qIG91dHB1dCkgewotICBpZiAocHlfZGVzY3JpcHRvciA9PSBOVUxMKSB7Ci0gICAg
aWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKSB7Ci0gICAgICAvLyBF
eHBlY3RlZCBlcnJvcjogaXRlbSB3YXMgc2ltcGx5IG5vdCBmb3VuZC4KLSAgICAgIFB5RXJyX0Ns
ZWFyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdPT0dMRV9MT0coRVJST1IpIDw8ICJEZXNjcmlw
dG9yRGF0YWJhc2UgbWV0aG9kIHJhaXNlZCBhbiBlcnJvciI7Ci0gICAgICBQeUVycl9QcmludCgp
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKHB5X2Rlc2NyaXB0b3IgPT0g
UHlfTm9uZSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBjb25zdCBEZXNjcmlwdG9yKiBm
aWxlZGVzY3JpcHRvcl9kZXNjcmlwdG9yID0KLSAgICAgIEZpbGVEZXNjcmlwdG9yUHJvdG86OmRl
ZmF1bHRfaW5zdGFuY2UoKS5HZXREZXNjcmlwdG9yKCk7Ci0gIENNZXNzYWdlKiBtZXNzYWdlID0g
cmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+KHB5X2Rlc2NyaXB0b3IpOwotICBpZiAoUHlPYmpl
Y3RfVHlwZUNoZWNrKHB5X2Rlc2NyaXB0b3IsICZDTWVzc2FnZV9UeXBlKSAmJgotICAgICAgbWVz
c2FnZS0+bWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpID09IGZpbGVkZXNjcmlwdG9yX2Rlc2NyaXB0
b3IpIHsKLSAgICAvLyBGYXN0IHBhdGg6IEp1c3QgdXNlIHRoZSBwb2ludGVyLgotICAgIEZpbGVE
ZXNjcmlwdG9yUHJvdG8qIGZpbGVfcHJvdG8gPQotICAgICAgICBzdGF0aWNfY2FzdDxGaWxlRGVz
Y3JpcHRvclByb3RvKj4obWVzc2FnZS0+bWVzc2FnZSk7Ci0gICAgKm91dHB1dCA9ICpmaWxlX3By
b3RvOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIC8vIFNsb3cgcGF0aDogc2Vy
aWFsaXplIHRoZSBtZXNzYWdlLiBUaGlzIGFsbG93cyB0byB1c2UgZGF0YWJhc2VzIHdoaWNoCi0g
ICAgLy8gdXNlIGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIG9mIEZpbGVEZXNjcmlwdG9yUHJv
dG8uCi0gICAgU2NvcGVkUHlPYmplY3RQdHIgc2VyaWFsaXplZF9wYigKLSAgICAgICAgUHlPYmpl
Y3RfQ2FsbE1ldGhvZChweV9kZXNjcmlwdG9yLCAiU2VyaWFsaXplVG9TdHJpbmciLCBOVUxMKSk7
Ci0gICAgaWYgKHNlcmlhbGl6ZWRfcGIgPT0gTlVMTCkgewotICAgICAgR09PR0xFX0xPRyhFUlJP
UikKLSAgICAgICAgICA8PCAiRGVzY3JpcHRvckRhdGFiYXNlIG1ldGhvZCBkaWQgbm90IHJldHVy
biBhIEZpbGVEZXNjcmlwdG9yUHJvdG8iOwotICAgICAgUHlFcnJfUHJpbnQoKTsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2hhciogc3RyOwotICAgIFB5X3NzaXplX3QgbGVuOwot
ICAgIGlmIChQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShzZXJpYWxpemVkX3BiLmdldCgpLCAmc3Ry
LCAmbGVuKSA8IDApIHsKLSAgICAgIEdPT0dMRV9MT0coRVJST1IpCi0gICAgICAgICAgPDwgIkRl
c2NyaXB0b3JEYXRhYmFzZSBtZXRob2QgZGlkIG5vdCByZXR1cm4gYSBGaWxlRGVzY3JpcHRvclBy
b3RvIjsKLSAgICAgIFB5RXJyX1ByaW50KCk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgICBpZiAoIWZpbGVfcHJvdG8u
UGFyc2VGcm9tQXJyYXkoc3RyLCBsZW4pKSB7Ci0gICAgICBHT09HTEVfTE9HKEVSUk9SKQotICAg
ICAgICAgIDw8ICJEZXNjcmlwdG9yRGF0YWJhc2UgbWV0aG9kIGRpZCBub3QgcmV0dXJuIGEgRmls
ZURlc2NyaXB0b3JQcm90byI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgICpvdXRw
dXQgPSBmaWxlX3Byb3RvOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19Ci0KLS8vIEZpbmQgYSBm
aWxlIGJ5IGZpbGUgbmFtZS4KLWJvb2wgUHlEZXNjcmlwdG9yRGF0YWJhc2U6OkZpbmRGaWxlQnlO
YW1lKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgU2NvcGVkUHlP
YmplY3RQdHIgcHlfZGVzY3JpcHRvcihQeU9iamVjdF9DYWxsTWV0aG9kKAotICAgICAgcHlfZGF0
YWJhc2VfLCAiRmluZEZpbGVCeU5hbWUiLCAicyMiLCBmaWxlbmFtZS5jX3N0cigpLCBmaWxlbmFt
ZS5zaXplKCkpKTsKLSAgcmV0dXJuIEdldEZpbGVEZXNjcmlwdG9yUHJvdG8ocHlfZGVzY3JpcHRv
ci5nZXQoKSwgb3V0cHV0KTsKLX0KLQotLy8gRmluZCB0aGUgZmlsZSB0aGF0IGRlY2xhcmVzIHRo
ZSBnaXZlbiBmdWxseS1xdWFsaWZpZWQgc3ltYm9sIG5hbWUuCi1ib29sIFB5RGVzY3JpcHRvckRh
dGFiYXNlOjpGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woCi0gICAgY29uc3Qgc3RyaW5nJiBzeW1i
b2xfbmFtZSwgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gIFNjb3BlZFB5T2JqZWN0
UHRyIHB5X2Rlc2NyaXB0b3IoCi0gICAgICBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X2RhdGFiYXNl
XywgIkZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbCIsICJzIyIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHN5bWJvbF9uYW1lLmNfc3RyKCksIHN5bWJvbF9uYW1lLnNpemUoKSkpOwotICByZXR1
cm4gR2V0RmlsZURlc2NyaXB0b3JQcm90byhweV9kZXNjcmlwdG9yLmdldCgpLCBvdXRwdXQpOwot
fQotCi0vLyBGaW5kIHRoZSBmaWxlIHdoaWNoIGRlZmluZXMgYW4gZXh0ZW5zaW9uIGV4dGVuZGlu
ZyB0aGUgZ2l2ZW4gbWVzc2FnZSB0eXBlCi0vLyB3aXRoIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIu
Ci0vLyBQeXRob24gRGVzY3JpcHRvckRhdGFiYXNlcyBhcmUgbm90IHJlcXVpcmVkIHRvIGltcGxl
bWVudCB0aGlzIG1ldGhvZC4KLWJvb2wgUHlEZXNjcmlwdG9yRGF0YWJhc2U6OkZpbmRGaWxlQ29u
dGFpbmluZ0V4dGVuc2lvbigKLSAgICBjb25zdCBzdHJpbmcmIGNvbnRhaW5pbmdfdHlwZSwgaW50
IGZpZWxkX251bWJlciwKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgU2Nv
cGVkUHlPYmplY3RQdHIgcHlfbWV0aG9kKAotICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhw
eV9kYXRhYmFzZV8sICJGaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24iKSk7Ci0gIGlmIChweV9t
ZXRob2QgPT0gTlVMTCkgewotICAgIC8vIFRoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCwg
cmV0dXJucyB3aXRob3V0IGVycm9yLgotICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotICB9Ci0gIFNjb3BlZFB5T2JqZWN0UHRyIHB5X2Rlc2NyaXB0b3IoCi0gICAgICBQeU9i
amVjdF9DYWxsRnVuY3Rpb24ocHlfbWV0aG9kLmdldCgpLCAicyNpIiwgY29udGFpbmluZ190eXBl
LmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlLnNp
emUoKSwgZmllbGRfbnVtYmVyKSk7Ci0gIHJldHVybiBHZXRGaWxlRGVzY3JpcHRvclByb3RvKHB5
X2Rlc2NyaXB0b3IuZ2V0KCksIG91dHB1dCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBweXRob24K
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfZGF0YWJhc2UuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
cHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yX2RhdGFiYXNlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNzFjNGJjYjBiNTYzOGI5YjQ4NjI0MGI1YjE0YTE3
YzA4MzVmYmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9w
eXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfZGF0YWJhc2UuaAorKysgL2Rl
di9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9QWVRIT05fQ1BQX0RFU0NSSVBUT1JfREFUQUJB
U0VfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9QWVRIT05fQ1BQX0RFU0NSSVBUT1JfREFU
QUJBU0VfSF9fCi0KLSNpbmNsdWRlIDxQeXRob24uaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9kZXNjcmlwdG9yX2RhdGFiYXNlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNw
YWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBweXRob24gewotCi1jbGFzcyBQeURlc2NyaXB0b3JE
YXRhYmFzZSA6IHB1YmxpYyBEZXNjcmlwdG9yRGF0YWJhc2UgewotIHB1YmxpYzoKLSAgZXhwbGlj
aXQgUHlEZXNjcmlwdG9yRGF0YWJhc2UoUHlPYmplY3QqIHB5X2RhdGFiYXNlKTsKLSAgflB5RGVz
Y3JpcHRvckRhdGFiYXNlKCk7Ci0KLSAgLy8gSW1wbGVtZW50IHRoZSBhYnN0cmFjdCBpbnRlcmZh
Y2UuIEFsbCB0aGVzZSBmdW5jdGlvbnMgZmlsbCB0aGUgb3V0cHV0Ci0gIC8vIHdpdGggYSBjb3B5
IG9mIEZpbGVEZXNjcmlwdG9yUHJvdG8uCi0KLSAgLy8gRmluZCBhIGZpbGUgYnkgZmlsZSBuYW1l
LgotICBib29sIEZpbmRGaWxlQnlOYW1lKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KTsKLQotICAvLyBGaW5k
IHRoZSBmaWxlIHRoYXQgZGVjbGFyZXMgdGhlIGdpdmVuIGZ1bGx5LXF1YWxpZmllZCBzeW1ib2wg
bmFtZS4KLSAgYm9vbCBGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woY29uc3Qgc3RyaW5nJiBzeW1i
b2xfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQ
cm90byogb3V0cHV0KTsKLQotICAvLyBGaW5kIHRoZSBmaWxlIHdoaWNoIGRlZmluZXMgYW4gZXh0
ZW5zaW9uIGV4dGVuZGluZyB0aGUgZ2l2ZW4gbWVzc2FnZSB0eXBlCi0gIC8vIHdpdGggdGhlIGdp
dmVuIGZpZWxkIG51bWJlci4KLSAgLy8gQ29udGFpbmluZ190eXBlIG11c3QgYmUgYSBmdWxseS1x
dWFsaWZpZWQgdHlwZSBuYW1lLgotICAvLyBQeXRob24gb2JqZWN0cyBhcmUgbm90IHJlcXVpcmVk
IHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgYm9vbCBGaW5kRmlsZUNvbnRhaW5pbmdFeHRl
bnNpb24oY29uc3Qgc3RyaW5nJiBjb250YWluaW5nX3R5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBmaWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8qIG91dHB1dCk7Ci0KLSBwcml2YXRlOgot
ICAvLyBUaGUgcHl0aG9uIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGRhdGFiYXNlLiBUaGUg
cmVmZXJlbmNlIGlzIG93bmVkLgotICBQeU9iamVjdCogcHlfZGF0YWJhc2VfOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIHB5dGhvbgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1BZVEhPTl9DUFBfREVT
Q1JJUFRPUl9EQVRBQkFTRV9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9w
eWV4dC9kZXNjcmlwdG9yX3Bvb2wuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvZGVz
Y3JpcHRvcl9wb29sLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmFmZjk2YmMy
ZTQ0YzQwYTNhYThkYTA1NTBmOTQ3Y2Q2N2I0MGRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlw
dG9yX3Bvb2wuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1OTMgKzAsMCBAQAotLy8gUHJvdG9jb2wg
QnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQg
MjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxv
cGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEltcGxlbWVudHMgdGhlIERlc2NyaXB0b3JQb29s
LCB3aGljaCBjb2xsZWN0cyBhbGwgZGVzY3JpcHRvcnMuCi0KLSNpbmNsdWRlIDxQeXRob24uaD4K
LQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9weWV4dC9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0
L2Rlc2NyaXB0b3JfZGF0YWJhc2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQv
ZGVzY3JpcHRvcl9wb29sLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L21lc3Nh
Z2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQvc2NvcGVkX3B5b2JqZWN0X3B0
ci5oPgotCi0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0gICNkZWZpbmUgUHlTdHJpbmdfRnJv
bVN0cmluZ0FuZFNpemUgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplCi0gICNpZiBQWV9WRVJT
SU9OX0hFWCA8IDB4MDMwMzAwMDAKLSAgICAjZXJyb3IgIlB5dGhvbiAzLjAgLSAzLjIgYXJlIG5v
dCBzdXBwb3J0ZWQuIgotICAjZW5kaWYKLSAgI2RlZmluZSBQeVN0cmluZ19Bc1N0cmluZ0FuZFNp
emUob2IsIGNoYXJwcCwgc2l6ZXApIFwKLSAgICAoUHlVbmljb2RlX0NoZWNrKG9iKT8gXAotICAg
ICAgICgoKihjaGFycHApID0gUHlVbmljb2RlX0FzVVRGOEFuZFNpemUob2IsIChzaXplcCkpKSA9
PSBOVUxMPyAtMTogMCk6IFwKLSAgICAgICBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShvYiwgKGNo
YXJwcCksIChzaXplcCkpKQotI2VuZGlmCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLW5hbWVzcGFjZSBweXRob24gewotCi0vLyBBIG1hcCB0byBjYWNoZSBQeXRo
b24gUG9vbHMgcGVyIEMrKyBwb2ludGVyLgotLy8gUG9pbnRlcnMgYXJlIG5vdCBvd25lZCBoZXJl
LCBhbmQgYmVsb25nIHRvIHRoZSBQeURlc2NyaXB0b3JQb29sLgotc3RhdGljIGhhc2hfbWFwPGNv
bnN0IERlc2NyaXB0b3JQb29sKiwgUHlEZXNjcmlwdG9yUG9vbCo+IGRlc2NyaXB0b3JfcG9vbF9t
YXA7Ci0KLW5hbWVzcGFjZSBjZGVzY3JpcHRvcl9wb29sIHsKLQotLy8gQ3JlYXRlIGEgUHl0aG9u
IERlc2NyaXB0b3JQb29sIG9iamVjdCwgYnV0IGRvZXMgbm90IGZpbGwgdGhlICJwb29sIgotLy8g
YXR0cmlidXRlLgotc3RhdGljIFB5RGVzY3JpcHRvclBvb2wqIF9DcmVhdGVEZXNjcmlwdG9yUG9v
bCgpIHsKLSAgUHlEZXNjcmlwdG9yUG9vbCogY3Bvb2wgPSBQeU9iamVjdF9OZXcoCi0gICAgICBQ
eURlc2NyaXB0b3JQb29sLCAmUHlEZXNjcmlwdG9yUG9vbF9UeXBlKTsKLSAgaWYgKGNwb29sID09
IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGNwb29sLT51bmRlcmxheSA9IE5V
TEw7Ci0gIGNwb29sLT5kYXRhYmFzZSA9IE5VTEw7Ci0KLSAgRHluYW1pY01lc3NhZ2VGYWN0b3J5
KiBtZXNzYWdlX2ZhY3RvcnkgPSBuZXcgRHluYW1pY01lc3NhZ2VGYWN0b3J5KCk7Ci0gIC8vIFRo
aXMgb3B0aW9uIG1pZ2h0IGJlIHRoZSBkZWZhdWx0IHNvbWUgZGF5LgotICBtZXNzYWdlX2ZhY3Rv
cnktPlNldERlbGVnYXRlVG9HZW5lcmF0ZWRGYWN0b3J5KHRydWUpOwotICBjcG9vbC0+bWVzc2Fn
ZV9mYWN0b3J5ID0gbWVzc2FnZV9mYWN0b3J5OwotCi0gIC8vIFRPRE8oYW1hdXJ5ZmEpOiBSZXdy
aXRlIHRoZSBTeW1ib2xEYXRhYmFzZSBpbiBDIHNvIHRoYXQgaXQgdXNlcyB0aGUgc2FtZQotICAv
LyBzdG9yYWdlLgotICBjcG9vbC0+Y2xhc3Nlc19ieV9kZXNjcmlwdG9yID0KLSAgICAgIG5ldyBQ
eURlc2NyaXB0b3JQb29sOjpDbGFzc2VzQnlNZXNzYWdlTWFwKCk7Ci0gIGNwb29sLT5kZXNjcmlw
dG9yX29wdGlvbnMgPQotICAgICAgbmV3IGhhc2hfbWFwPGNvbnN0IHZvaWQqLCBQeU9iamVjdCAq
PigpOwotCi0gIHJldHVybiBjcG9vbDsKLX0KLQotLy8gQ3JlYXRlIGEgUHl0aG9uIERlc2NyaXB0
b3JQb29sLCB1c2luZyB0aGUgZ2l2ZW4gcG9vbCBhcyBhbiB1bmRlcmxheToKLS8vIG5ldyBtZXNz
YWdlcyB3aWxsIGJlIGFkZGVkIHRvIGEgY3VzdG9tIHBvb2wsIG5vdCB0byB0aGUgdW5kZXJsYXku
Ci0vLwotLy8gT3duZXJzaGlwIG9mIHRoZSB1bmRlcmxheSBpcyBub3QgdHJhbnNmZXJyZWQsIGl0
cyBwb2ludGVyIHNob3VsZAotLy8gc3RheSBhbGl2ZS4KLXN0YXRpYyBQeURlc2NyaXB0b3JQb29s
KiBQeURlc2NyaXB0b3JQb29sX05ld1dpdGhVbmRlcmxheSgKLSAgICBjb25zdCBEZXNjcmlwdG9y
UG9vbCogdW5kZXJsYXkpIHsKLSAgUHlEZXNjcmlwdG9yUG9vbCogY3Bvb2wgPSBfQ3JlYXRlRGVz
Y3JpcHRvclBvb2woKTsKLSAgaWYgKGNwb29sID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsK
LSAgfQotICBjcG9vbC0+cG9vbCA9IG5ldyBEZXNjcmlwdG9yUG9vbCh1bmRlcmxheSk7Ci0gIGNw
b29sLT51bmRlcmxheSA9IHVuZGVybGF5OwotCi0gIGlmICghZGVzY3JpcHRvcl9wb29sX21hcC5p
bnNlcnQoCi0gICAgICBzdGQ6Om1ha2VfcGFpcihjcG9vbC0+cG9vbCwgY3Bvb2wpKS5zZWNvbmQp
IHsKLSAgICAvLyBTaG91bGQgbmV2ZXIgaGFwcGVuIC0tIHdvdWxkIGluZGljYXRlIGFuIGludGVy
bmFsIGVycm9yIC8gYnVnLgotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAi
RGVzY3JpcHRvclBvb2wgYWxyZWFkeSByZWdpc3RlcmVkIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLQotICByZXR1cm4gY3Bvb2w7Ci19Ci0KLXN0YXRpYyBQeURlc2NyaXB0b3JQb29sKiBQeURl
c2NyaXB0b3JQb29sX05ld1dpdGhEYXRhYmFzZSgKLSAgICBEZXNjcmlwdG9yRGF0YWJhc2UqIGRh
dGFiYXNlKSB7Ci0gIFB5RGVzY3JpcHRvclBvb2wqIGNwb29sID0gX0NyZWF0ZURlc2NyaXB0b3JQ
b29sKCk7Ci0gIGlmIChjcG9vbCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAg
aWYgKGRhdGFiYXNlICE9IE5VTEwpIHsKLSAgICBjcG9vbC0+cG9vbCA9IG5ldyBEZXNjcmlwdG9y
UG9vbChkYXRhYmFzZSk7Ci0gICAgY3Bvb2wtPmRhdGFiYXNlID0gZGF0YWJhc2U7Ci0gIH0gZWxz
ZSB7Ci0gICAgY3Bvb2wtPnBvb2wgPSBuZXcgRGVzY3JpcHRvclBvb2woKTsKLSAgfQotCi0gIGlm
ICghZGVzY3JpcHRvcl9wb29sX21hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoY3Bvb2wtPnBvb2ws
IGNwb29sKSkuc2Vjb25kKSB7Ci0gICAgLy8gU2hvdWxkIG5ldmVyIGhhcHBlbiAtLSB3b3VsZCBp
bmRpY2F0ZSBhbiBpbnRlcm5hbCBlcnJvciAvIGJ1Zy4KLSAgICBQeUVycl9TZXRTdHJpbmcoUHlF
eGNfVmFsdWVFcnJvciwgIkRlc2NyaXB0b3JQb29sIGFscmVhZHkgcmVnaXN0ZXJlZCIpOwotICAg
IHJldHVybiBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIGNwb29sOwotfQotCi0vLyBUaGUgcHVibGlj
IERlc2NyaXB0b3JQb29sIGNvbnN0cnVjdG9yLgotc3RhdGljIFB5T2JqZWN0KiBOZXcoUHlUeXBl
T2JqZWN0KiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QqIGFyZ3MsIFB5T2Jq
ZWN0KiBrd2FyZ3MpIHsKLSAgc3RhdGljIGNoYXIqIGt3bGlzdFtdID0geyJkZXNjcmlwdG9yX2Ri
IiwgMH07Ci0gIFB5T2JqZWN0KiBweV9kYXRhYmFzZSA9IE5VTEw7Ci0gIGlmICghUHlBcmdfUGFy
c2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPIiwga3dsaXN0LCAmcHlfZGF0YWJh
c2UpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgRGVzY3JpcHRvckRhdGFiYXNlKiBkYXRh
YmFzZSA9IE5VTEw7Ci0gIGlmIChweV9kYXRhYmFzZSAmJiBweV9kYXRhYmFzZSAhPSBQeV9Ob25l
KSB7Ci0gICAgZGF0YWJhc2UgPSBuZXcgUHlEZXNjcmlwdG9yRGF0YWJhc2UocHlfZGF0YWJhc2Up
OwotICB9Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oCi0gICAgICBQeURl
c2NyaXB0b3JQb29sX05ld1dpdGhEYXRhYmFzZShkYXRhYmFzZSkpOwotfQotCi1zdGF0aWMgdm9p
ZCBEZWFsbG9jKFB5RGVzY3JpcHRvclBvb2wqIHNlbGYpIHsKLSAgdHlwZWRlZiBQeURlc2NyaXB0
b3JQb29sOjpDbGFzc2VzQnlNZXNzYWdlTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKLSAgZGVzY3Jp
cHRvcl9wb29sX21hcC5lcmFzZShzZWxmLT5wb29sKTsKLSAgZm9yIChpdGVyYXRvciBpdCA9IHNl
bGYtPmNsYXNzZXNfYnlfZGVzY3JpcHRvci0+YmVnaW4oKTsKLSAgICAgICBpdCAhPSBzZWxmLT5j
bGFzc2VzX2J5X2Rlc2NyaXB0b3ItPmVuZCgpOyArK2l0KSB7Ci0gICAgUHlfREVDUkVGKGl0LT5z
ZWNvbmQpOwotICB9Ci0gIGRlbGV0ZSBzZWxmLT5jbGFzc2VzX2J5X2Rlc2NyaXB0b3I7Ci0gIGZv
ciAoaGFzaF9tYXA8Y29uc3Qgdm9pZCosIFB5T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0KLSAgICAg
ICAgICAgc2VsZi0+ZGVzY3JpcHRvcl9vcHRpb25zLT5iZWdpbigpOwotICAgICAgIGl0ICE9IHNl
bGYtPmRlc2NyaXB0b3Jfb3B0aW9ucy0+ZW5kKCk7ICsraXQpIHsKLSAgICBQeV9ERUNSRUYoaXQt
PnNlY29uZCk7Ci0gIH0KLSAgZGVsZXRlIHNlbGYtPmRlc2NyaXB0b3Jfb3B0aW9uczsKLSAgZGVs
ZXRlIHNlbGYtPm1lc3NhZ2VfZmFjdG9yeTsKLSAgZGVsZXRlIHNlbGYtPmRhdGFiYXNlOwotICBk
ZWxldGUgc2VsZi0+cG9vbDsKLSAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZShyZWludGVycHJldF9j
YXN0PFB5T2JqZWN0Kj4oc2VsZikpOwotfQotCi1QeU9iamVjdCogRmluZE1lc3NhZ2VCeU5hbWUo
UHlEZXNjcmlwdG9yUG9vbCogc2VsZiwgUHlPYmplY3QqIGFyZykgewotICBQeV9zc2l6ZV90IG5h
bWVfc2l6ZTsKLSAgY2hhciogbmFtZTsKLSAgaWYgKFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZShh
cmcsICZuYW1lLCAmbmFtZV9zaXplKSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0g
IGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2VfZGVzY3JpcHRvciA9Ci0gICAgICBzZWxmLT5wb29s
LT5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoc3RyaW5nKG5hbWUsIG5hbWVfc2l6ZSkpOwotCi0gIGlm
IChtZXNzYWdlX2Rlc2NyaXB0b3IgPT0gTlVMTCkgewotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19L
ZXlFcnJvciwgIkNvdWxkbid0IGZpbmQgbWVzc2FnZSAlLjIwMHMiLCBuYW1lKTsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiBQeU1lc3NhZ2VEZXNjcmlwdG9yX0Zyb21EZXNjcmlw
dG9yKG1lc3NhZ2VfZGVzY3JpcHRvcik7Ci19Ci0KLS8vIEFkZCBhIG1lc3NhZ2UgY2xhc3MgdG8g
b3VyIGRhdGFiYXNlLgotaW50IFJlZ2lzdGVyTWVzc2FnZUNsYXNzKFB5RGVzY3JpcHRvclBvb2wq
IHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogbWVzc2Fn
ZV9kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIENNZXNzYWdlQ2xhc3MqIG1l
c3NhZ2VfY2xhc3MpIHsKLSAgUHlfSU5DUkVGKG1lc3NhZ2VfY2xhc3MpOwotICB0eXBlZGVmIFB5
RGVzY3JpcHRvclBvb2w6OkNsYXNzZXNCeU1lc3NhZ2VNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwot
ICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IHJldCA9IHNlbGYtPmNsYXNzZXNfYnlfZGVzY3Jp
cHRvci0+aW5zZXJ0KAotICAgICAgc3RkOjptYWtlX3BhaXIobWVzc2FnZV9kZXNjcmlwdG9yLCBt
ZXNzYWdlX2NsYXNzKSk7Ci0gIGlmICghcmV0LnNlY29uZCkgewotICAgIC8vIFVwZGF0ZSBjYXNl
OiBERUNSRUYgdGhlIHByZXZpb3VzIHZhbHVlLgotICAgIFB5X0RFQ1JFRihyZXQuZmlyc3QtPnNl
Y29uZCk7Ci0gICAgcmV0LmZpcnN0LT5zZWNvbmQgPSBtZXNzYWdlX2NsYXNzOwotICB9Ci0gIHJl
dHVybiAwOwotfQotCi0vLyBSZXRyaWV2ZSB0aGUgbWVzc2FnZSBjbGFzcyBhZGRlZCB0byBvdXIg
ZGF0YWJhc2UuCi1DTWVzc2FnZUNsYXNzKiBHZXRNZXNzYWdlQ2xhc3MoUHlEZXNjcmlwdG9yUG9v
bCogc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9y
KiBtZXNzYWdlX2Rlc2NyaXB0b3IpIHsKLSAgdHlwZWRlZiBQeURlc2NyaXB0b3JQb29sOjpDbGFz
c2VzQnlNZXNzYWdlTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKLSAgaXRlcmF0b3IgcmV0ID0gc2Vs
Zi0+Y2xhc3Nlc19ieV9kZXNjcmlwdG9yLT5maW5kKG1lc3NhZ2VfZGVzY3JpcHRvcik7Ci0gIGlm
IChyZXQgPT0gc2VsZi0+Y2xhc3Nlc19ieV9kZXNjcmlwdG9yLT5lbmQoKSkgewotICAgIFB5RXJy
X0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJObyBtZXNzYWdlIGNsYXNzIHJlZ2lzdGVyZWQgZm9y
ICclcyciLAotICAgICAgICAgICAgICAgICBtZXNzYWdlX2Rlc2NyaXB0b3ItPmZ1bGxfbmFtZSgp
LmNfc3RyKCkpOwotICAgIHJldHVybiBOVUxMOwotICB9IGVsc2UgewotICAgIHJldHVybiByZXQt
PnNlY29uZDsKLSAgfQotfQotCi1QeU9iamVjdCogRmluZEZpbGVCeU5hbWUoUHlEZXNjcmlwdG9y
UG9vbCogc2VsZiwgUHlPYmplY3QqIGFyZykgewotICBQeV9zc2l6ZV90IG5hbWVfc2l6ZTsKLSAg
Y2hhciogbmFtZTsKLSAgaWYgKFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZShhcmcsICZuYW1lLCAm
bmFtZV9zaXplKSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGNvbnN0IEZpbGVE
ZXNjcmlwdG9yKiBmaWxlX2Rlc2NyaXB0b3IgPQotICAgICAgc2VsZi0+cG9vbC0+RmluZEZpbGVC
eU5hbWUoc3RyaW5nKG5hbWUsIG5hbWVfc2l6ZSkpOwotICBpZiAoZmlsZV9kZXNjcmlwdG9yID09
IE5VTEwpIHsKLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3IsICJDb3VsZG4ndCBmaW5k
IGZpbGUgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLQotICByZXR1cm4gUHlGaWxlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihmaWxlX2Rl
c2NyaXB0b3IpOwotfQotCi1QeU9iamVjdCogRmluZEZpZWxkQnlOYW1lKFB5RGVzY3JpcHRvclBv
b2wqIHNlbGYsIFB5T2JqZWN0KiBhcmcpIHsKLSAgUHlfc3NpemVfdCBuYW1lX3NpemU7Ci0gIGNo
YXIqIG5hbWU7Ci0gIGlmIChQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemUoYXJnLCAmbmFtZSwgJm5h
bWVfc2l6ZSkgPCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IgPQotICAgICAgc2VsZi0+cG9vbC0+RmluZEZpZWxk
QnlOYW1lKHN0cmluZyhuYW1lLCBuYW1lX3NpemUpKTsKLSAgaWYgKGZpZWxkX2Rlc2NyaXB0b3Ig
PT0gTlVMTCkgewotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19LZXlFcnJvciwgIkNvdWxkbid0IGZp
bmQgZmllbGQgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0KLQotICByZXR1cm4gUHlGaWVsZERlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoZmll
bGRfZGVzY3JpcHRvcik7Ci19Ci0KLVB5T2JqZWN0KiBGaW5kRXh0ZW5zaW9uQnlOYW1lKFB5RGVz
Y3JpcHRvclBvb2wqIHNlbGYsIFB5T2JqZWN0KiBhcmcpIHsKLSAgUHlfc3NpemVfdCBuYW1lX3Np
emU7Ci0gIGNoYXIqIG5hbWU7Ci0gIGlmIChQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemUoYXJnLCAm
bmFtZSwgJm5hbWVfc2l6ZSkgPCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IgPQotICAgICAgc2VsZi0+cG9vbC0+
RmluZEV4dGVuc2lvbkJ5TmFtZShzdHJpbmcobmFtZSwgbmFtZV9zaXplKSk7Ci0gIGlmIChmaWVs
ZF9kZXNjcmlwdG9yID09IE5VTEwpIHsKLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3Is
ICJDb3VsZG4ndCBmaW5kIGV4dGVuc2lvbiBmaWVsZCAlLjIwMHMiLCBuYW1lKTsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiBQeUZpZWxkRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRv
cihmaWVsZF9kZXNjcmlwdG9yKTsKLX0KLQotUHlPYmplY3QqIEZpbmRFbnVtVHlwZUJ5TmFtZShQ
eURlc2NyaXB0b3JQb29sKiBzZWxmLCBQeU9iamVjdCogYXJnKSB7Ci0gIFB5X3NzaXplX3QgbmFt
ZV9zaXplOwotICBjaGFyKiBuYW1lOwotICBpZiAoUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKGFy
ZywgJm5hbWUsICZuYW1lX3NpemUpIDwgMCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAg
Y29uc3QgRW51bURlc2NyaXB0b3IqIGVudW1fZGVzY3JpcHRvciA9Ci0gICAgICBzZWxmLT5wb29s
LT5GaW5kRW51bVR5cGVCeU5hbWUoc3RyaW5nKG5hbWUsIG5hbWVfc2l6ZSkpOwotICBpZiAoZW51
bV9kZXNjcmlwdG9yID09IE5VTEwpIHsKLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3Is
ICJDb3VsZG4ndCBmaW5kIGVudW0gJS4yMDBzIiwgbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLQotICByZXR1cm4gUHlFbnVtRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihlbnVtX2Rlc2Ny
aXB0b3IpOwotfQotCi1QeU9iamVjdCogRmluZE9uZW9mQnlOYW1lKFB5RGVzY3JpcHRvclBvb2wq
IHNlbGYsIFB5T2JqZWN0KiBhcmcpIHsKLSAgUHlfc3NpemVfdCBuYW1lX3NpemU7Ci0gIGNoYXIq
IG5hbWU7Ci0gIGlmIChQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemUoYXJnLCAmbmFtZSwgJm5hbWVf
c2l6ZSkgPCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBjb25zdCBPbmVvZkRlc2Ny
aXB0b3IqIG9uZW9mX2Rlc2NyaXB0b3IgPQotICAgICAgc2VsZi0+cG9vbC0+RmluZE9uZW9mQnlO
YW1lKHN0cmluZyhuYW1lLCBuYW1lX3NpemUpKTsKLSAgaWYgKG9uZW9mX2Rlc2NyaXB0b3IgPT0g
TlVMTCkgewotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19LZXlFcnJvciwgIkNvdWxkbid0IGZpbmQg
b25lb2YgJS4yMDBzIiwgbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1cm4g
UHlPbmVvZkRlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3Iob25lb2ZfZGVzY3JpcHRvcik7Ci19Ci0K
LVB5T2JqZWN0KiBGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woUHlEZXNjcmlwdG9yUG9vbCogc2Vs
ZiwgUHlPYmplY3QqIGFyZykgewotICBQeV9zc2l6ZV90IG5hbWVfc2l6ZTsKLSAgY2hhciogbmFt
ZTsKLSAgaWYgKFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZShhcmcsICZuYW1lLCAmbmFtZV9zaXpl
KSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGNvbnN0IEZpbGVEZXNjcmlwdG9y
KiBmaWxlX2Rlc2NyaXB0b3IgPQotICAgICAgc2VsZi0+cG9vbC0+RmluZEZpbGVDb250YWluaW5n
U3ltYm9sKHN0cmluZyhuYW1lLCBuYW1lX3NpemUpKTsKLSAgaWYgKGZpbGVfZGVzY3JpcHRvciA9
PSBOVUxMKSB7Ci0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX0tleUVycm9yLCAiQ291bGRuJ3QgZmlu
ZCBzeW1ib2wgJS4yMDBzIiwgbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1
cm4gUHlGaWxlRGVzY3JpcHRvcl9Gcm9tRGVzY3JpcHRvcihmaWxlX2Rlc2NyaXB0b3IpOwotfQot
Ci0vLyBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBleGlzdCAtLSB0aGUgb25seSB2YWxpZCB3
YXkgdG8gY3JlYXRlCi0vLyBkZXNjcmlwdG9ycyBpcyB0byBjYWxsIEFkZCgpIG9yIEFkZFNlcmlh
bGl6ZWRGaWxlKCkuCi0vLyBCdXQgdGhlc2UgQWRkRGVzY3JpcHRvcigpIGZ1bmN0aW9ucyB3ZXJl
IGNyZWF0ZWQgaW4gUHl0aG9uIGFuZCBzb21lIHBlb3BsZQotLy8gY2FsbCB0aGVtLCBzbyB3ZSBz
dXBwb3J0IHRoZW0gZm9yIG5vdyBmb3IgY29tcGF0aWJpbGl0eS4KLS8vIEhvd2V2ZXIgd2UgZG8g
Y2hlY2sgdGhhdCB0aGUgZXhpc3RpbmcgZGVzY3JpcHRvciBhbHJlYWR5IGV4aXN0cyBpbiB0aGUg
cG9vbCwKLS8vIHdoaWNoIGFwcGVhcnMgdG8gYWx3YXlzIGJlIHRydWUgZm9yIGV4aXN0aW5nIGNh
bGxzIC0tIGJ1dCB0aGVuIHdoeSBkbyBwZW9wbGUKLS8vIGNhbGwgYSBmdW5jdGlvbiB0aGF0IHdp
bGwganVzdCBiZSBhIG5vLW9wPwotLy8gVE9ETyhhbWF1cnlmYSk6IE5lZWQgdG8gaW52ZXN0aWdh
dGUgZnVydGhlci4KLQotUHlPYmplY3QqIEFkZEZpbGVEZXNjcmlwdG9yKFB5RGVzY3JpcHRvclBv
b2wqIHNlbGYsIFB5T2JqZWN0KiBkZXNjcmlwdG9yKSB7Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9y
KiBmaWxlX2Rlc2NyaXB0b3IgPQotICAgICAgUHlGaWxlRGVzY3JpcHRvcl9Bc0Rlc2NyaXB0b3Io
ZGVzY3JpcHRvcik7Ci0gIGlmICghZmlsZV9kZXNjcmlwdG9yKSB7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLSAgaWYgKGZpbGVfZGVzY3JpcHRvciAhPQotICAgICAgc2VsZi0+cG9vbC0+RmluZEZp
bGVCeU5hbWUoZmlsZV9kZXNjcmlwdG9yLT5uYW1lKCkpKSB7Ci0gICAgUHlFcnJfRm9ybWF0KFB5
RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJUaGUgZmlsZSBkZXNjcmlwdG9yICVz
IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIHBvb2wiLAotICAgICAgICAgICAgICAgICBmaWxlX2Rl
c2NyaXB0b3ItPm5hbWUoKS5jX3N0cigpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBQeV9S
RVRVUk5fTk9ORTsKLX0KLQotUHlPYmplY3QqIEFkZERlc2NyaXB0b3IoUHlEZXNjcmlwdG9yUG9v
bCogc2VsZiwgUHlPYmplY3QqIGRlc2NyaXB0b3IpIHsKLSAgY29uc3QgRGVzY3JpcHRvciogbWVz
c2FnZV9kZXNjcmlwdG9yID0KLSAgICAgIFB5TWVzc2FnZURlc2NyaXB0b3JfQXNEZXNjcmlwdG9y
KGRlc2NyaXB0b3IpOwotICBpZiAoIW1lc3NhZ2VfZGVzY3JpcHRvcikgewotICAgIHJldHVybiBO
VUxMOwotICB9Ci0gIGlmIChtZXNzYWdlX2Rlc2NyaXB0b3IgIT0KLSAgICAgIHNlbGYtPnBvb2wt
PkZpbmRNZXNzYWdlVHlwZUJ5TmFtZShtZXNzYWdlX2Rlc2NyaXB0b3ItPmZ1bGxfbmFtZSgpKSkg
ewotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAi
VGhlIG1lc3NhZ2UgZGVzY3JpcHRvciAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBwb29sIiwK
LSAgICAgICAgICAgICAgICAgbWVzc2FnZV9kZXNjcmlwdG9yLT5mdWxsX25hbWUoKS5jX3N0cigp
KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBQeV9SRVRVUk5fTk9ORTsKLX0KLQotUHlPYmpl
Y3QqIEFkZEVudW1EZXNjcmlwdG9yKFB5RGVzY3JpcHRvclBvb2wqIHNlbGYsIFB5T2JqZWN0KiBk
ZXNjcmlwdG9yKSB7Ci0gIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBlbnVtX2Rlc2NyaXB0b3IgPQot
ICAgICAgUHlFbnVtRGVzY3JpcHRvcl9Bc0Rlc2NyaXB0b3IoZGVzY3JpcHRvcik7Ci0gIGlmICgh
ZW51bV9kZXNjcmlwdG9yKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgaWYgKGVudW1fZGVz
Y3JpcHRvciAhPQotICAgICAgc2VsZi0+cG9vbC0+RmluZEVudW1UeXBlQnlOYW1lKGVudW1fZGVz
Y3JpcHRvci0+ZnVsbF9uYW1lKCkpKSB7Ci0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJy
b3IsCi0gICAgICAgICAgICAgICAgICJUaGUgZW51bSBkZXNjcmlwdG9yICVzIGRvZXMgbm90IGJl
bG9uZyB0byB0aGlzIHBvb2wiLAotICAgICAgICAgICAgICAgICBlbnVtX2Rlc2NyaXB0b3ItPmZ1
bGxfbmFtZSgpLmNfc3RyKCkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIFB5X1JFVFVSTl9O
T05FOwotfQotCi0vLyBUaGUgY29kZSBiZWxvdyBsb2FkcyBuZXcgRGVzY3JpcHRvcnMgZnJvbSBh
IHNlcmlhbGl6ZWQgRmlsZURlc2NyaXB0b3JQcm90by4KLQotCi0vLyBDb2xsZWN0cyBlcnJvcnMg
dGhhdCBvY2N1ciBkdXJpbmcgcHJvdG8gZmlsZSBidWlsZGluZyB0byBhbGxvdyB0aGVtIHRvIGJl
Ci0vLyBwcm9wYWdhdGVkIGluIHRoZSBweXRob24gZXhjZXB0aW9uIGluc3RlYWQgb2Ygb25seSBs
aXZpbmcgaW4gRVJST1IgbG9ncy4KLWNsYXNzIEJ1aWxkRmlsZUVycm9yQ29sbGVjdG9yIDogcHVi
bGljIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3RvciB7Ci0gcHVibGljOgotICBCdWlsZEZp
bGVFcnJvckNvbGxlY3RvcigpIDogZXJyb3JfbWVzc2FnZSgiIiksIGhhZF9lcnJvcnMoZmFsc2Up
IHt9Ci0KLSAgdm9pZCBBZGRFcnJvcihjb25zdCBzdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBzdHJp
bmcmIGVsZW1lbnRfbmFtZSwKLSAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlKiBkZXNjcmlw
dG9yLCBFcnJvckxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgIGNvbnN0IHN0cmlu
ZyYgbWVzc2FnZSkgewotICAgIC8vIFJlcGxpY2F0ZXMgdGhlIGxvZ2dpbmcgYmVoYXZpb3IgdGhh
dCBoYXBwZW5zIGluIHRoZSBDKysgaW1wbGVtZW50YXRpb24KLSAgICAvLyB3aGVuIGFuIGVycm9y
IGNvbGxlY3RvciBpcyBub3QgcGFzc2VkIGluLgotICAgIGlmICghaGFkX2Vycm9ycykgewotICAg
ICAgZXJyb3JfbWVzc2FnZSArPQotICAgICAgICAgICgiSW52YWxpZCBwcm90byBkZXNjcmlwdG9y
IGZvciBmaWxlIFwiIiArIGZpbGVuYW1lICsgIlwiOlxuIik7Ci0gICAgICBoYWRfZXJyb3JzID0g
dHJ1ZTsKLSAgICB9Ci0gICAgLy8gQXMgdGhpcyBvbmx5IGhhcHBlbnMgb24gZmFpbHVyZSBhbmQg
d2lsbCByZXN1bHQgaW4gdGhlIHByb2dyYW0gbm90Ci0gICAgLy8gcnVubmluZyBhdCBhbGwsIG5v
IGVmZm9ydCBpcyBtYWRlIHRvIG9wdGltaXplIHRoaXMgc3RyaW5nIG1hbmlwdWxhdGlvbi4KLSAg
ICBlcnJvcl9tZXNzYWdlICs9ICgiICAiICsgZWxlbWVudF9uYW1lICsgIjogIiArIG1lc3NhZ2Ug
KyAiXG4iKTsKLSAgfQotCi0gIHN0cmluZyBlcnJvcl9tZXNzYWdlOwotICBib29sIGhhZF9lcnJv
cnM7Ci19OwotCi1QeU9iamVjdCogQWRkU2VyaWFsaXplZEZpbGUoUHlEZXNjcmlwdG9yUG9vbCog
c2VsZiwgUHlPYmplY3QqIHNlcmlhbGl6ZWRfcGIpIHsKLSAgY2hhciogbWVzc2FnZV90eXBlOwot
ICBQeV9zc2l6ZV90IG1lc3NhZ2VfbGVuOwotCi0gIGlmIChzZWxmLT5kYXRhYmFzZSAhPSBOVUxM
KSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAotICAg
ICAgICAiQ2Fubm90IGNhbGwgQWRkIG9uIGEgRGVzY3JpcHRvclBvb2wgdGhhdCB1c2VzIGEgRGVz
Y3JpcHRvckRhdGFiYXNlLiAiCi0gICAgICAgICJBZGQgeW91ciBmaWxlIHRvIHRoZSB1bmRlcmx5
aW5nIGRhdGFiYXNlLiIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKFB5Qnl0ZXNf
QXNTdHJpbmdBbmRTaXplKHNlcmlhbGl6ZWRfcGIsICZtZXNzYWdlX3R5cGUsICZtZXNzYWdlX2xl
bikgPCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBGaWxlRGVzY3JpcHRvclByb3Rv
IGZpbGVfcHJvdG87Ci0gIGlmICghZmlsZV9wcm90by5QYXJzZUZyb21BcnJheShtZXNzYWdlX3R5
cGUsIG1lc3NhZ2VfbGVuKSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is
ICJDb3VsZG4ndCBwYXJzZSBmaWxlIGNvbnRlbnQhIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0K
LQotICAvLyBJZiB0aGUgZmlsZSB3YXMgYWxyZWFkeSBwYXJ0IG9mIGEgQysrIGxpYnJhcnksIGFs
bCBpdHMgZGVzY3JpcHRvcnMgYXJlIGluCi0gIC8vIHRoZSB1bmRlcmx5aW5nIHBvb2wuICBObyBu
ZWVkIHRvIGRvIGFueXRoaW5nIGVsc2UuCi0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBnZW5lcmF0
ZWRfZmlsZSA9IE5VTEw7Ci0gIGlmIChzZWxmLT51bmRlcmxheSkgewotICAgIGdlbmVyYXRlZF9m
aWxlID0gc2VsZi0+dW5kZXJsYXktPkZpbmRGaWxlQnlOYW1lKGZpbGVfcHJvdG8ubmFtZSgpKTsK
LSAgfQotICBpZiAoZ2VuZXJhdGVkX2ZpbGUgIT0gTlVMTCkgewotICAgIHJldHVybiBQeUZpbGVE
ZXNjcmlwdG9yX0Zyb21EZXNjcmlwdG9yV2l0aFNlcmlhbGl6ZWRQYigKLSAgICAgICAgZ2VuZXJh
dGVkX2ZpbGUsIHNlcmlhbGl6ZWRfcGIpOwotICB9Ci0KLSAgQnVpbGRGaWxlRXJyb3JDb2xsZWN0
b3IgZXJyb3JfY29sbGVjdG9yOwotICBjb25zdCBGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9
Ci0gICAgICBzZWxmLT5wb29sLT5CdWlsZEZpbGVDb2xsZWN0aW5nRXJyb3JzKGZpbGVfcHJvdG8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcl9jb2xs
ZWN0b3IpOwotICBpZiAoZGVzY3JpcHRvciA9PSBOVUxMKSB7Ci0gICAgUHlFcnJfRm9ybWF0KFB5
RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGJ1aWxkIHByb3RvIGZp
bGUgaW50byBkZXNjcmlwdG9yIHBvb2whXG4lcyIsCi0gICAgICAgICAgICAgICAgIGVycm9yX2Nv
bGxlY3Rvci5lcnJvcl9tZXNzYWdlLmNfc3RyKCkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0K
LSAgcmV0dXJuIFB5RmlsZURlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3JXaXRoU2VyaWFsaXplZFBi
KAotICAgICAgZGVzY3JpcHRvciwgc2VyaWFsaXplZF9wYik7Ci19Ci0KLVB5T2JqZWN0KiBBZGQo
UHlEZXNjcmlwdG9yUG9vbCogc2VsZiwgUHlPYmplY3QqIGZpbGVfZGVzY3JpcHRvcl9wcm90bykg
ewotICBTY29wZWRQeU9iamVjdFB0ciBzZXJpYWxpemVkX3BiKAotICAgICAgUHlPYmplY3RfQ2Fs
bE1ldGhvZChmaWxlX2Rlc2NyaXB0b3JfcHJvdG8sICJTZXJpYWxpemVUb1N0cmluZyIsIE5VTEwp
KTsKLSAgaWYgKHNlcmlhbGl6ZWRfcGIgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9
Ci0gIHJldHVybiBBZGRTZXJpYWxpemVkRmlsZShzZWxmLCBzZXJpYWxpemVkX3BiLmdldCgpKTsK
LX0KLQotc3RhdGljIFB5TWV0aG9kRGVmIE1ldGhvZHNbXSA9IHsKLSAgeyAiQWRkIiwgKFB5Q0Z1
bmN0aW9uKUFkZCwgTUVUSF9PLAotICAgICJBZGRzIHRoZSBGaWxlRGVzY3JpcHRvclByb3RvIGFu
ZCBpdHMgdHlwZXMgdG8gdGhpcyBwb29sLiIgfSwKLSAgeyAiQWRkU2VyaWFsaXplZEZpbGUiLCAo
UHlDRnVuY3Rpb24pQWRkU2VyaWFsaXplZEZpbGUsIE1FVEhfTywKLSAgICAiQWRkcyBhIHNlcmlh
bGl6ZWQgRmlsZURlc2NyaXB0b3JQcm90byB0byB0aGlzIHBvb2wuIiB9LAotCi0gIC8vIFRPRE8o
YW1hdXJ5ZmEpOiBVbmRlcnN0YW5kIHdoeSB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGRpZmZl
cnMgZnJvbQotICAvLyB0aGlzIG9uZSwgYXNrIHVzZXJzIHRvIHVzZSBhbm90aGVyIEFQSSBhbmQg
ZGVwcmVjYXRlIHRoZXNlIGZ1bmN0aW9ucy4KLSAgeyAiQWRkRmlsZURlc2NyaXB0b3IiLCAoUHlD
RnVuY3Rpb24pQWRkRmlsZURlc2NyaXB0b3IsIE1FVEhfTywKLSAgICAiTm8tb3AuIEFkZCgpIG11
c3QgaGF2ZSBiZWVuIGNhbGxlZCBiZWZvcmUuIiB9LAotICB7ICJBZGREZXNjcmlwdG9yIiwgKFB5
Q0Z1bmN0aW9uKUFkZERlc2NyaXB0b3IsIE1FVEhfTywKLSAgICAiTm8tb3AuIEFkZCgpIG11c3Qg
aGF2ZSBiZWVuIGNhbGxlZCBiZWZvcmUuIiB9LAotICB7ICJBZGRFbnVtRGVzY3JpcHRvciIsIChQ
eUNGdW5jdGlvbilBZGRFbnVtRGVzY3JpcHRvciwgTUVUSF9PLAotICAgICJOby1vcC4gQWRkKCkg
bXVzdCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZS4iIH0sCi0KLSAgeyAiRmluZEZpbGVCeU5hbWUi
LCAoUHlDRnVuY3Rpb24pRmluZEZpbGVCeU5hbWUsIE1FVEhfTywKLSAgICAiU2VhcmNoZXMgZm9y
IGEgZmlsZSBkZXNjcmlwdG9yIGJ5IGl0cyAucHJvdG8gbmFtZS4iIH0sCi0gIHsgIkZpbmRNZXNz
YWdlVHlwZUJ5TmFtZSIsIChQeUNGdW5jdGlvbilGaW5kTWVzc2FnZUJ5TmFtZSwgTUVUSF9PLAot
ICAgICJTZWFyY2hlcyBmb3IgYSBtZXNzYWdlIGRlc2NyaXB0b3IgYnkgZnVsbCBuYW1lLiIgfSwK
LSAgeyAiRmluZEZpZWxkQnlOYW1lIiwgKFB5Q0Z1bmN0aW9uKUZpbmRGaWVsZEJ5TmFtZSwgTUVU
SF9PLAotICAgICJTZWFyY2hlcyBmb3IgYSBmaWVsZCBkZXNjcmlwdG9yIGJ5IGZ1bGwgbmFtZS4i
IH0sCi0gIHsgIkZpbmRFeHRlbnNpb25CeU5hbWUiLCAoUHlDRnVuY3Rpb24pRmluZEV4dGVuc2lv
bkJ5TmFtZSwgTUVUSF9PLAotICAgICJTZWFyY2hlcyBmb3IgZXh0ZW5zaW9uIGRlc2NyaXB0b3Ig
YnkgZnVsbCBuYW1lLiIgfSwKLSAgeyAiRmluZEVudW1UeXBlQnlOYW1lIiwgKFB5Q0Z1bmN0aW9u
KUZpbmRFbnVtVHlwZUJ5TmFtZSwgTUVUSF9PLAotICAgICJTZWFyY2hlcyBmb3IgZW51bSB0eXBl
IGRlc2NyaXB0b3IgYnkgZnVsbCBuYW1lLiIgfSwKLSAgeyAiRmluZE9uZW9mQnlOYW1lIiwgKFB5
Q0Z1bmN0aW9uKUZpbmRPbmVvZkJ5TmFtZSwgTUVUSF9PLAotICAgICJTZWFyY2hlcyBmb3Igb25l
b2YgZGVzY3JpcHRvciBieSBmdWxsIG5hbWUuIiB9LAotCi0gIHsgIkZpbmRGaWxlQ29udGFpbmlu
Z1N5bWJvbCIsIChQeUNGdW5jdGlvbilGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2wsIE1FVEhfTywK
LSAgICAiR2V0cyB0aGUgRmlsZURlc2NyaXB0b3IgY29udGFpbmluZyB0aGUgc3BlY2lmaWVkIHN5
bWJvbC4iIH0sCi0gIHtOVUxMfQotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNkZXNjcmlwdG9yX3Bv
b2wKLQotUHlUeXBlT2JqZWN0IFB5RGVzY3JpcHRvclBvb2xfVHlwZSA9IHsKLSAgUHlWYXJPYmpl
Y3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKLSAgRlVMTF9NT0RVTEVfTkFNRSAiLkRlc2Ny
aXB0b3JQb29sIiwgIC8vIHRwX25hbWUKLSAgc2l6ZW9mKFB5RGVzY3JpcHRvclBvb2wpLCAgICAg
ICAgICAgIC8vIHRwX2Jhc2ljc2l6ZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfaXRlbXNpemUKLSAgKGRlc3RydWN0b3IpY2Rlc2NyaXB0b3JfcG9vbDo6RGVh
bGxvYywgIC8vIHRwX2RlYWxsb2MKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRwX3ByaW50Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0cF9nZXRhdHRyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
cF9zZXRhdHRyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9j
b21wYXJlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9yZXBy
Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9hc19udW1iZXIK
LSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2FzX3NlcXVlbmNl
Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9hc19tYXBwaW5n
Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9oYXNoCi0gIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9jYWxsCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9zdHIKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2dldGF0dHJvCi0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0cF9zZXRhdHRybwotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfYXNfYnVmZmVyCi0gIFB5X1RQRkxBR1NfREVGQVVMVCwg
ICAgICAgICAgICAgICAgICAvLyB0cF9mbGFncwotICAiQSBEZXNjcmlwdG9yIFBvb2wiLCAgICAg
ICAgICAgICAgICAgLy8gdHBfZG9jCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF90cmF2ZXJzZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHBfY2xlYXIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRwX3JpY2hjb21wYXJlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0cF93ZWFrbGlzdG9mZnNldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHBfaXRlcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dHBfaXRlcm5leHQKLSAgY2Rlc2NyaXB0b3JfcG9vbDo6TWV0aG9kcywgICAgICAgICAgIC8vIHRw
X21ldGhvZHMKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX21l
bWJlcnMKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2dldHNl
dAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfYmFzZQotICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZGljdAotICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZGVzY3JfZ2V0Ci0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9kZXNjcl9zZXQKLSAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2RpY3RvZmZzZXQKLSAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2luaXQKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2FsbG9jCi0gIGNkZXNjcmlwdG9yX3Bvb2w6Ok5l
dywgICAgICAgICAgICAgICAvLyB0cF9uZXcKLSAgUHlPYmplY3RfRGVsLCAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRwX2ZyZWUKLX07Ci0KLS8vIFRoaXMgaXMgdGhlIERlc2NyaXB0b3JQb29s
IHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgZGVmaW5pdGlvbnMgZnJvbSB0aGUKLS8vIGdlbmVyYXRl
ZCBfcGIyLnB5IG1vZHVsZXMuCi1zdGF0aWMgUHlEZXNjcmlwdG9yUG9vbCogcHl0aG9uX2dlbmVy
YXRlZF9wb29sID0gTlVMTDsKLQotYm9vbCBJbml0RGVzY3JpcHRvclBvb2woKSB7Ci0gIGlmIChQ
eVR5cGVfUmVhZHkoJlB5RGVzY3JpcHRvclBvb2xfVHlwZSkgPCAwKQotICAgIHJldHVybiBmYWxz
ZTsKLQotICAvLyBUaGUgUG9vbCBvZiBtZXNzYWdlcyBkZWNsYXJlZCBpbiBQeXRob24gbGlicmFy
aWVzLgotICAvLyBnZW5lcmF0ZWRfcG9vbCgpIGNvbnRhaW5zIGFsbCBtZXNzYWdlcyBhbHJlYWR5
IGxpbmtlZCBpbiBDKysgbGlicmFyaWVzLCBhbmQKLSAgLy8gaXMgdXNlZCBhcyB1bmRlcmxheS4K
LSAgcHl0aG9uX2dlbmVyYXRlZF9wb29sID0gY2Rlc2NyaXB0b3JfcG9vbDo6UHlEZXNjcmlwdG9y
UG9vbF9OZXdXaXRoVW5kZXJsYXkoCi0gICAgICBEZXNjcmlwdG9yUG9vbDo6Z2VuZXJhdGVkX3Bv
b2woKSk7Ci0gIGlmIChweXRob25fZ2VuZXJhdGVkX3Bvb2wgPT0gTlVMTCkgewotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotICAvLyBSZWdpc3RlciB0aGlzIHBvb2wgdG8gYmUgZm91bmQgZm9yIEMr
Ky1nZW5lcmF0ZWQgZGVzY3JpcHRvcnMuCi0gIGRlc2NyaXB0b3JfcG9vbF9tYXAuaW5zZXJ0KAot
ICAgICAgc3RkOjptYWtlX3BhaXIoRGVzY3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCksCi0g
ICAgICAgICAgICAgICAgICAgICBweXRob25fZ2VuZXJhdGVkX3Bvb2wpKTsKLQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gVGhlIGRlZmF1bHQgRGVzY3JpcHRvclBvb2wgdXNlZCBldmVyeXdoZXJl
IGluIHRoaXMgbW9kdWxlLgotLy8gVG9kYXkgaXQncyB0aGUgcHl0aG9uX2dlbmVyYXRlZF9wb29s
LgotLy8gVE9ETyhhbWF1cnlmYSk6IFJlbW92ZSBhbGwgdXNhZ2VzIG9mIHRoaXMgZnVuY3Rpb246
IHRoZSBwb29sIHNob3VsZCBiZQotLy8gZGVyaXZlZCBmcm9tIHRoZSBjb250ZXh0LgotUHlEZXNj
cmlwdG9yUG9vbCogR2V0RGVmYXVsdERlc2NyaXB0b3JQb29sKCkgewotICByZXR1cm4gcHl0aG9u
X2dlbmVyYXRlZF9wb29sOwotfQotCi1QeURlc2NyaXB0b3JQb29sKiBHZXREZXNjcmlwdG9yUG9v
bF9Gcm9tUG9vbChjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbCkgewotICAvLyBGYXN0IHBhdGgg
Zm9yIHN0YW5kYXJkIGRlc2NyaXB0b3JzLgotICBpZiAocG9vbCA9PSBweXRob25fZ2VuZXJhdGVk
X3Bvb2wtPnBvb2wgfHwKLSAgICAgIHBvb2wgPT0gRGVzY3JpcHRvclBvb2w6OmdlbmVyYXRlZF9w
b29sKCkpIHsKLSAgICByZXR1cm4gcHl0aG9uX2dlbmVyYXRlZF9wb29sOwotICB9Ci0gIGhhc2hf
bWFwPGNvbnN0IERlc2NyaXB0b3JQb29sKiwgUHlEZXNjcmlwdG9yUG9vbCo+OjppdGVyYXRvciBp
dCA9Ci0gICAgICBkZXNjcmlwdG9yX3Bvb2xfbWFwLmZpbmQocG9vbCk7Ci0gIGlmIChpdCA9PSBk
ZXNjcmlwdG9yX3Bvb2xfbWFwLmVuZCgpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0tl
eUVycm9yLCAiVW5rbm93biBkZXNjcmlwdG9yIHBvb2wiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAg
fQotICByZXR1cm4gaXQtPnNlY29uZDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHB5dGhvbgotfSAg
Ly8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvZGVzY3JpcHRvcl9wb29sLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9n
b29nbGUvcHJvdG9idWYvcHlleHQvZGVzY3JpcHRvcl9wb29sLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJhNDJjMTEyNjI2OTQ0NTFhYzBhMzJmYjdiOWZhZmQxZWRlMzQzOTIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xl
L3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfcG9vbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdP
T0dMRV9QUk9UT0JVRl9QWVRIT05fQ1BQX0RFU0NSSVBUT1JfUE9PTF9IX18KLSNkZWZpbmUgR09P
R0xFX1BST1RPQlVGX1BZVEhPTl9DUFBfREVTQ1JJUFRPUl9QT09MX0hfXwotCi0jaW5jbHVkZSA8
UHl0aG9uLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLWNsYXNzIE1lc3NhZ2VGYWN0b3J5OwotCi1uYW1lc3Bh
Y2UgcHl0aG9uIHsKLQotLy8gVGhlIChtZXRhKSB0eXBlIG9mIGFsbCBNZXNzYWdlcyBjbGFzc2Vz
Lgotc3RydWN0IENNZXNzYWdlQ2xhc3M7Ci0KLS8vIFdyYXBzIG9wZXJhdGlvbnMgdG8gdGhlIGds
b2JhbCBEZXNjcmlwdG9yUG9vbCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbgotLy8gYWJvdXQg
YWxsIG1lc3NhZ2VzIGFuZCBmaWVsZHMuCi0vLwotLy8gVGhlcmUgaXMgbm9ybWFsbHkgb25lIHBv
b2wgcGVyIHByb2Nlc3MuIFdlIG1ha2UgaXQgYSBQeXRob24gb2JqZWN0IG9ubHkKLS8vIGJlY2F1
c2UgaXQgY29udGFpbnMgbWFueSBQeXRob24gcmVmZXJlbmNlcy4KLS8vIFRPRE8oYW1hdXJ5ZmEp
OiBTZWUgd2hldGhlciBzdWNoIG9iamVjdHMgY2FuIGFwcGVhciBpbiByZWZlcmVuY2UgY3ljbGVz
LCBhbmQKLS8vIGNvbnNpZGVyIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgY3ljbGljIEdDLgotLy8K
LS8vICJNZXRob2RzIiB0aGF0IGludGVyYWN0cyB3aXRoIHRoaXMgRGVzY3JpcHRvclBvb2wgYXJl
IGluIHRoZSBjZGVzY3JpcHRvcl9wb29sCi0vLyBuYW1lc3BhY2UuCi10eXBlZGVmIHN0cnVjdCBQ
eURlc2NyaXB0b3JQb29sIHsKLSAgUHlPYmplY3RfSEVBRAotCi0gIC8vIFRoZSBDKysgcG9vbCBj
b250YWluaW5nIERlc2NyaXB0b3JzLgotICBEZXNjcmlwdG9yUG9vbCogcG9vbDsKLQotICAvLyBU
aGUgQysrIHBvb2wgYWN0aW5nIGFzIGFuIHVuZGVybGF5LiBDYW4gYmUgTlVMTC4KLSAgLy8gVGhp
cyBwb2ludGVyIGlzIG5vdCBvd25lZCBhbmQgbXVzdCBzdGF5IGFsaXZlLgotICBjb25zdCBEZXNj
cmlwdG9yUG9vbCogdW5kZXJsYXk7Ci0KLSAgLy8gVGhlIEMrKyBkZXNjcmlwdG9yIGRhdGFiYXNl
IHVzZWQgdG8gZmV0Y2ggdW5rbm93biBwcm90b3MuIENhbiBiZSBOVUxMLgotICAvLyBUaGlzIHBv
aW50ZXIgaXMgb3duZWQuCi0gIGNvbnN0IERlc2NyaXB0b3JEYXRhYmFzZSogZGF0YWJhc2U7Ci0K
LSAgLy8gRHluYW1pY01lc3NhZ2VGYWN0b3J5IHVzZWQgdG8gY3JlYXRlIEMrKyBpbnN0YW5jZXMg
b2YgbWVzc2FnZXMuCi0gIC8vIFRoaXMgb2JqZWN0IGNhY2hlIHRoZSBkZXNjcmlwdG9ycyB0aGF0
IHdlcmUgdXNlZCwgc28gdGhlIERlc2NyaXB0b3JQb29sCi0gIC8vIG5lZWRzIHRvIGdldCByaWQg
b2YgaXQgYmVmb3JlIGl0IGNhbiBkZWxldGUgaXRzZWxmLgotICAvLwotICAvLyBOb3RlOiBBIEMr
KyBNZXNzYWdlRmFjdG9yeSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgUHl0aG9uIE1lc3NhZ2VGYWN0
b3J5LgotICAvLyBUaGUgQysrIG9uZSBjcmVhdGVzIG1lc3NhZ2VzLCB3aGVuIHRoZSBQeXRob24g
b25lIGNyZWF0ZXMgY2xhc3Nlcy4KLSAgTWVzc2FnZUZhY3RvcnkqIG1lc3NhZ2VfZmFjdG9yeTsK
LQotICAvLyBNYWtlIG91ciBvd24gbWFwcGluZyB0byByZXRyaWV2ZSBQeXRob24gY2xhc3NlcyBm
cm9tIEMrKyBkZXNjcmlwdG9ycy4KLSAgLy8KLSAgLy8gRGVzY3JpcHRvciBwb2ludGVycyBzdG9y
ZWQgaGVyZSBhcmUgb3duZWQgYnkgdGhlIERlc2NyaXB0b3JQb29sIGFib3ZlLgotICAvLyBQeXRo
b24gcmVmZXJlbmNlcyB0byBjbGFzc2VzIGFyZSBvd25lZCBieSB0aGlzIFB5RGVzY3JpcHRvclBv
b2wuCi0gIHR5cGVkZWYgaGFzaF9tYXA8Y29uc3QgRGVzY3JpcHRvciosIENNZXNzYWdlQ2xhc3Mq
PiBDbGFzc2VzQnlNZXNzYWdlTWFwOwotICBDbGFzc2VzQnlNZXNzYWdlTWFwKiBjbGFzc2VzX2J5
X2Rlc2NyaXB0b3I7Ci0KLSAgLy8gQ2FjaGUgdGhlIG9wdGlvbnMgZm9yIGFueSBraW5kIG9mIGRl
c2NyaXB0b3IuCi0gIC8vIERlc2NyaXB0b3IgcG9pbnRlcnMgYXJlIG93bmVkIGJ5IHRoZSBEZXNj
cmlwdG9yUG9vbCBhYm92ZS4KLSAgLy8gUHl0aG9uIG9iamVjdHMgYXJlIG93bmVkIGJ5IHRoZSBt
YXAuCi0gIGhhc2hfbWFwPGNvbnN0IHZvaWQqLCBQeU9iamVjdCo+KiBkZXNjcmlwdG9yX29wdGlv
bnM7Ci19IFB5RGVzY3JpcHRvclBvb2w7Ci0KLQotZXh0ZXJuIFB5VHlwZU9iamVjdCBQeURlc2Ny
aXB0b3JQb29sX1R5cGU7Ci0KLW5hbWVzcGFjZSBjZGVzY3JpcHRvcl9wb29sIHsKLQotLy8gTG9v
a3MgdXAgYSBtZXNzYWdlIGJ5IG5hbWUuCi0vLyBSZXR1cm5zIGEgbWVzc2FnZSBEZXNjcmlwdG9y
LCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KLWNvbnN0IERlc2NyaXB0b3IqIEZpbmRNZXNzYWdlVHlw
ZUJ5TmFtZShQeURlc2NyaXB0b3JQb29sKiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbmFtZSk7Ci0KLS8vIFJlZ2lzdGVycyBhIG5l
dyBQeXRob24gY2xhc3MgZm9yIHRoZSBnaXZlbiBtZXNzYWdlIGRlc2NyaXB0b3IuCi0vLyBPbiBl
cnJvciwgcmV0dXJucyAtMSB3aXRoIGEgUHl0aG9uIGV4Y2VwdGlvbiBzZXQuCi1pbnQgUmVnaXN0
ZXJNZXNzYWdlQ2xhc3MoUHlEZXNjcmlwdG9yUG9vbCogc2VsZiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBEZXNjcmlwdG9yKiBtZXNzYWdlX2Rlc2NyaXB0b3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgQ01lc3NhZ2VDbGFzcyogbWVzc2FnZV9jbGFzcyk7Ci0KLS8vIFJldHJp
ZXZlcyB0aGUgUHl0aG9uIGNsYXNzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSBk
ZXNjcmlwdG9yLgotLy8KLS8vIFJldHVybnMgYSAqYm9ycm93ZWQqIHJlZmVyZW5jZSBpZiBmb3Vu
ZCwgb3RoZXJ3aXNlIHJldHVybnMgTlVMTCB3aXRoIGFuCi0vLyBleGNlcHRpb24gc2V0LgotQ01l
c3NhZ2VDbGFzcyogR2V0TWVzc2FnZUNsYXNzKFB5RGVzY3JpcHRvclBvb2wqIHNlbGYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogbWVzc2FnZV9kZXNj
cmlwdG9yKTsKLQotLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgYWxzbyBleHBvc2VkIGFzIG1l
dGhvZHMgb2YgdGhlIERlc2NyaXB0b3JQb29sIHR5cGUuCi0KLS8vIExvb2tzIHVwIGEgbWVzc2Fn
ZSBieSBuYW1lLiBSZXR1cm5zIGEgUHlNZXNzYWdlRGVzY3JpcHRvciBjb3JyZXNwb25kaW5nIHRv
Ci0vLyB0aGUgZmllbGQgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgotLy8KLS8vIFJl
dHVybnMgYSBuZXcgcmVmZXJlbmNlLgotUHlPYmplY3QqIEZpbmRNZXNzYWdlQnlOYW1lKFB5RGVz
Y3JpcHRvclBvb2wqIHNlbGYsIFB5T2JqZWN0KiBuYW1lKTsKLQotLy8gTG9va3MgdXAgYSBmaWVs
ZCBieSBuYW1lLiBSZXR1cm5zIGEgUHlGaWVsZERlc2NyaXB0b3IgY29ycmVzcG9uZGluZyB0bwot
Ly8gdGhlIGZpZWxkIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS4KLS8vCi0vLyBSZXR1
cm5zIGEgbmV3IHJlZmVyZW5jZS4KLVB5T2JqZWN0KiBGaW5kRmllbGRCeU5hbWUoUHlEZXNjcmlw
dG9yUG9vbCogc2VsZiwgUHlPYmplY3QqIG5hbWUpOwotCi0vLyBMb29rcyB1cCBhbiBleHRlbnNp
b24gYnkgbmFtZS4gUmV0dXJucyBhIFB5RmllbGREZXNjcmlwdG9yIGNvcnJlc3BvbmRpbmcKLS8v
IHRvIHRoZSBmaWVsZCBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuCi0vLwotLy8gUmV0
dXJucyBhIG5ldyByZWZlcmVuY2UuCi1QeU9iamVjdCogRmluZEV4dGVuc2lvbkJ5TmFtZShQeURl
c2NyaXB0b3JQb29sKiBzZWxmLCBQeU9iamVjdCogYXJnKTsKLQotLy8gTG9va3MgdXAgYW4gZW51
bSB0eXBlIGJ5IG5hbWUuIFJldHVybnMgYSBQeUVudW1EZXNjcmlwdG9yIGNvcnJlc3BvbmRpbmcK
LS8vIHRvIHRoZSBmaWVsZCBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuCi0vLwotLy8g
UmV0dXJucyBhIG5ldyByZWZlcmVuY2UuCi1QeU9iamVjdCogRmluZEVudW1UeXBlQnlOYW1lKFB5
RGVzY3JpcHRvclBvb2wqIHNlbGYsIFB5T2JqZWN0KiBhcmcpOwotCi0vLyBMb29rcyB1cCBhIG9u
ZW9mIGJ5IG5hbWUuIFJldHVybnMgYSBDT25lb2ZEZXNjcmlwdG9yIGNvcnJlc3BvbmRpbmcKLS8v
IHRvIHRoZSBvbmVvZiBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuCi0vLwotLy8gUmV0
dXJucyBhIG5ldyByZWZlcmVuY2UuCi1QeU9iamVjdCogRmluZE9uZW9mQnlOYW1lKFB5RGVzY3Jp
cHRvclBvb2wqIHNlbGYsIFB5T2JqZWN0KiBhcmcpOwotCi19ICAvLyBuYW1lc3BhY2UgY2Rlc2Ny
aXB0b3JfcG9vbAotCi0vLyBSZXRyaWV2ZSB0aGUgZ2xvYmFsIGRlc2NyaXB0b3IgcG9vbCBvd25l
ZCBieSB0aGUgX21lc3NhZ2UgbW9kdWxlLgotLy8gVGhpcyBpcyB0aGUgb25lIHVzZWQgYnkgcGIy
LnB5IGdlbmVyYXRlZCBtb2R1bGVzLgotLy8gUmV0dXJucyBhICpib3Jyb3dlZCogcmVmZXJlbmNl
LgotLy8gIkRlZmF1bHQiIHBvb2wgdXNlZCB0byByZWdpc3RlciBtZXNzYWdlcyBmcm9tIF9wYjIu
cHkgbW9kdWxlcy4KLVB5RGVzY3JpcHRvclBvb2wqIEdldERlZmF1bHREZXNjcmlwdG9yUG9vbCgp
OwotCi0vLyBSZXRyaWV2ZSB0aGUgcHl0aG9uIGRlc2NyaXB0b3IgcG9vbCBvd25pbmcgYSBDKysg
ZGVzY3JpcHRvciBwb29sLgotLy8gUmV0dXJucyBhICpib3Jyb3dlZCogcmVmZXJlbmNlLgotUHlE
ZXNjcmlwdG9yUG9vbCogR2V0RGVzY3JpcHRvclBvb2xfRnJvbVBvb2woY29uc3QgRGVzY3JpcHRv
clBvb2wqIHBvb2wpOwotCi0vLyBJbml0aWFsaXplIG9iamVjdHMgdXNlZCBieSB0aGlzIG1vZHVs
ZS4KLWJvb2wgSW5pdERlc2NyaXB0b3JQb29sKCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBweXRob24K
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5k
aWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9QWVRIT05fQ1BQX0RFU0NSSVBUT1JfUE9PTF9IX18KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9leHRlbnNpb25fZGljdC5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
cHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9leHRlbnNpb25fZGljdC5jYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjFiYmI4YzJiMWQzZDdlMGYyMDczZjViZjNiNGUwNzI3MTZm
YTM3Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhv
bi9nb29nbGUvcHJvdG9idWYvcHlleHQvZXh0ZW5zaW9uX2RpY3QuY2MKKysrIC9kZXYvbnVsbApA
QCAtMSwzMzcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8v
IEF1dGhvcjogYW51cmFhZ0Bnb29nbGUuY29tIChBbnVyYWFnIEFncmF3YWwpCi0vLyBBdXRob3I6
IHRpYmVsbEBnb29nbGUuY29tIChKb2hhbiBUaWJlbGwpCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvcHlleHQvZXh0ZW5zaW9uX2RpY3QuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1v
bi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0
b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQvZGVzY3JpcHRvcl9wb29sLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvcHlleHQvcmVwZWF0ZWRfY29tcG9zaXRlX2NvbnRhaW5lci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9yZXBlYXRlZF9zY2FsYXJfY29udGFpbmVyLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L3Njb3BlZF9weW9iamVjdF9wdHIuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgcHl0aG9uIHsKLQot
bmFtZXNwYWNlIGV4dGVuc2lvbl9kaWN0IHsKLQotUHlPYmplY3QqIGxlbihFeHRlbnNpb25EaWN0
KiBzZWxmKSB7Ci0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0gIHJldHVybiBQeUxvbmdfRnJv
bUxvbmcoUHlEaWN0X1NpemUoc2VsZi0+dmFsdWVzKSk7Ci0jZWxzZQotICByZXR1cm4gUHlJbnRf
RnJvbUxvbmcoUHlEaWN0X1NpemUoc2VsZi0+dmFsdWVzKSk7Ci0jZW5kaWYKLX0KLQotLy8gVE9E
Tyh0aWJlbGwpOiBVc2UgVmlzaXRDb21wb3NpdGVGaWVsZC4KLWludCBSZWxlYXNlRXh0ZW5zaW9u
KEV4dGVuc2lvbkRpY3QqIHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogZXh0
ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNj
cmlwdG9yKSB7Ci0gIGlmIChkZXNjcmlwdG9yLT5sYWJlbCgpID09IEZpZWxkRGVzY3JpcHRvcjo6
TEFCRUxfUkVQRUFURUQpIHsKLSAgICBpZiAoZGVzY3JpcHRvci0+Y3BwX3R5cGUoKSA9PSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAgICAgaWYgKHJlcGVhdGVkX2NvbXBv
c2l0ZV9jb250YWluZXI6OlJlbGVhc2UoCi0gICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
UmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIqPigKLSAgICAgICAgICAgICAgICAgIGV4dGVuc2lv
bikpIDwgMCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIGlmIChyZXBlYXRlZF9zY2FsYXJfY29udGFpbmVyOjpSZWxlYXNlKAotICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyKj4oCi0gICAgICAgICAg
ICAgICAgICBleHRlbnNpb24pKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQot
ICAgIH0KLSAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSB7Ci0gICAgaWYgKGNtZXNzYWdlOjpSZWxlYXNlU3ViTWVz
c2FnZSgKLSAgICAgICAgICAgIHNlbGYtPnBhcmVudCwgZGVzY3JpcHRvciwKLSAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8Q01lc3NhZ2UqPihleHRlbnNpb24pKSA8IDApIHsKLSAgICAgIHJl
dHVybiAtMTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotUHlPYmplY3QqIHN1YnNj
cmlwdChFeHRlbnNpb25EaWN0KiBzZWxmLCBQeU9iamVjdCoga2V5KSB7Ci0gIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGNtZXNzYWdlOjpHZXRFeHRlbnNpb25EZXNjcmlwdG9y
KGtleSk7Ci0gIGlmIChkZXNjcmlwdG9yID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAg
fQotICBpZiAoIUNoZWNrRmllbGRCZWxvbmdzVG9NZXNzYWdlKGRlc2NyaXB0b3IsIHNlbGYtPm1l
c3NhZ2UpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoZGVzY3JpcHRvci0+bGFi
ZWwoKSAhPSBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX1JFUEVBVEVEICYmCi0gICAgICBkZXNjcmlw
dG9yLT5jcHBfdHlwZSgpICE9IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSB7Ci0g
ICAgcmV0dXJuIGNtZXNzYWdlOjpJbnRlcm5hbEdldFNjYWxhcihzZWxmLT5tZXNzYWdlLCBkZXNj
cmlwdG9yKTsKLSAgfQotCi0gIFB5T2JqZWN0KiB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKHNlbGYt
PnZhbHVlcywga2V5KTsKLSAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICBQeV9JTkNSRUYodmFs
dWUpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotCi0gIGlmIChzZWxmLT5wYXJlbnQgPT0gTlVM
TCkgewotICAgIC8vIFdlIGFyZSBpbiAiZGV0YWNoZWQiIHN0YXRlLiBEb24ndCBhbGxvdyBmdXJ0
aGVyIG1vZGlmaWNhdGlvbnMuCi0gICAgLy8gVE9ETyhhbWF1cnlmYSk6IFN1cHBvcnQgYWRkaW5n
IG5vbi1zY2FsYXJzIHRvIGEgZGV0YWNoZWQgZXh0ZW5zaW9uIGRpY3QuCi0gICAgLy8gVGhpcyBw
cm9iYWJseSByZXF1aXJlcyB0byBzdG9yZSB0aGUgdHlwZSBvZiB0aGUgbWFpbiBtZXNzYWdlLgot
ICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQotCi0gIGlmIChkZXNjcmlwdG9yLT5sYWJlbCgpICE9IEZpZWxkRGVzY3JpcHRvcjo6
TEFCRUxfUkVQRUFURUQgJiYKLSAgICAgIGRlc2NyaXB0b3ItPmNwcF90eXBlKCkgPT0gRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICBQeU9iamVjdCogc3ViX21lc3NhZ2Ug
PSBjbWVzc2FnZTo6SW50ZXJuYWxHZXRTdWJNZXNzYWdlKAotICAgICAgICBzZWxmLT5wYXJlbnQs
IGRlc2NyaXB0b3IpOwotICAgIGlmIChzdWJfbWVzc2FnZSA9PSBOVUxMKSB7Ci0gICAgICByZXR1
cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlEaWN0X1NldEl0ZW0oc2VsZi0+dmFsdWVzLCBrZXksIHN1
Yl9tZXNzYWdlKTsKLSAgICByZXR1cm4gc3ViX21lc3NhZ2U7Ci0gIH0KLQotICBpZiAoZGVzY3Jp
cHRvci0+bGFiZWwoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX1JFUEVBVEVEKSB7Ci0gICAg
aWYgKGRlc2NyaXB0b3ItPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01F
U1NBR0UpIHsKLSAgICAgIENNZXNzYWdlQ2xhc3MqIG1lc3NhZ2VfY2xhc3MgPSBjZGVzY3JpcHRv
cl9wb29sOjpHZXRNZXNzYWdlQ2xhc3MoCi0gICAgICAgICAgY21lc3NhZ2U6OkdldERlc2NyaXB0
b3JQb29sRm9yTWVzc2FnZShzZWxmLT5wYXJlbnQpLAotICAgICAgICAgIGRlc2NyaXB0b3ItPm1l
c3NhZ2VfdHlwZSgpKTsKLSAgICAgIGlmIChtZXNzYWdlX2NsYXNzID09IE5VTEwpIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgICB9Ci0gICAgICBQeU9iamVjdCogcHlfY29udGFpbmVyID0g
cmVwZWF0ZWRfY29tcG9zaXRlX2NvbnRhaW5lcjo6TmV3Q29udGFpbmVyKAotICAgICAgICAgIHNl
bGYtPnBhcmVudCwgZGVzY3JpcHRvciwgbWVzc2FnZV9jbGFzcyk7Ci0gICAgICBpZiAocHlfY29u
dGFpbmVyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICB9Ci0gICAgICBQ
eURpY3RfU2V0SXRlbShzZWxmLT52YWx1ZXMsIGtleSwgcHlfY29udGFpbmVyKTsKLSAgICAgIHJl
dHVybiBweV9jb250YWluZXI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFB5T2JqZWN0KiBweV9jb250
YWluZXIgPSByZXBlYXRlZF9zY2FsYXJfY29udGFpbmVyOjpOZXdDb250YWluZXIoCi0gICAgICAg
ICAgc2VsZi0+cGFyZW50LCBkZXNjcmlwdG9yKTsKLSAgICAgIGlmIChweV9jb250YWluZXIgPT0g
TlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgIH0KLSAgICAgIFB5RGljdF9TZXRJ
dGVtKHNlbGYtPnZhbHVlcywga2V5LCBweV9jb250YWluZXIpOwotICAgICAgcmV0dXJuIHB5X2Nv
bnRhaW5lcjsKLSAgICB9Ci0gIH0KLSAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3Is
ICJjb250cm9sIHJlYWNoZWQgdW5leHBlY3RlZCBsaW5lIik7Ci0gIHJldHVybiBOVUxMOwotfQot
Ci1pbnQgYXNzX3N1YnNjcmlwdChFeHRlbnNpb25EaWN0KiBzZWxmLCBQeU9iamVjdCoga2V5LCBQ
eU9iamVjdCogdmFsdWUpIHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0g
Y21lc3NhZ2U6OkdldEV4dGVuc2lvbkRlc2NyaXB0b3Ioa2V5KTsKLSAgaWYgKGRlc2NyaXB0b3Ig
PT0gTlVMTCkgewotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoIUNoZWNrRmllbGRCZWxvbmdz
VG9NZXNzYWdlKGRlc2NyaXB0b3IsIHNlbGYtPm1lc3NhZ2UpKSB7Ci0gICAgcmV0dXJuIC0xOwot
ICB9Ci0KLSAgaWYgKGRlc2NyaXB0b3ItPmxhYmVsKCkgIT0gRmllbGREZXNjcmlwdG9yOjpMQUJF
TF9PUFRJT05BTCB8fAotICAgICAgZGVzY3JpcHRvci0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBl
RXJyb3IsICJFeHRlbnNpb24gaXMgcmVwZWF0ZWQgYW5kL29yIGNvbXBvc2l0ZSAiCi0gICAgICAg
ICAgICAgICAgICAgICJ0eXBlIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIGlmIChzZWxmLT5w
YXJlbnQpIHsKLSAgICBjbWVzc2FnZTo6QXNzdXJlV3JpdGFibGUoc2VsZi0+cGFyZW50KTsKLSAg
ICBpZiAoY21lc3NhZ2U6OkludGVybmFsU2V0U2NhbGFyKHNlbGYtPnBhcmVudCwgZGVzY3JpcHRv
ciwgdmFsdWUpIDwgMCkgewotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotICAvLyBUT0RP
KHRpYmVsbCk6IFdlIHNob3VsZG4ndCB3cml0ZSBzY2FsYXJzIHRvIHRoZSBjYWNoZS4KLSAgUHlE
aWN0X1NldEl0ZW0oc2VsZi0+dmFsdWVzLCBrZXksIHZhbHVlKTsKLSAgcmV0dXJuIDA7Ci19Ci0K
LVB5T2JqZWN0KiBDbGVhckV4dGVuc2lvbihFeHRlbnNpb25EaWN0KiBzZWxmLCBQeU9iamVjdCog
ZXh0ZW5zaW9uKSB7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciA9Ci0gICAg
ICBjbWVzc2FnZTo6R2V0RXh0ZW5zaW9uRGVzY3JpcHRvcihleHRlbnNpb24pOwotICBpZiAoZGVz
Y3JpcHRvciA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgUHlPYmplY3QqIHZh
bHVlID0gUHlEaWN0X0dldEl0ZW0oc2VsZi0+dmFsdWVzLCBleHRlbnNpb24pOwotICBpZiAoc2Vs
Zi0+cGFyZW50KSB7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgIGlmIChSZWxlYXNl
RXh0ZW5zaW9uKHNlbGYsIHZhbHVlLCBkZXNjcmlwdG9yKSA8IDApIHsKLSAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChTY29wZWRQeU9iamVjdFB0cihjbWVzc2Fn
ZTo6Q2xlYXJGaWVsZEJ5RGVzY3JpcHRvcigKLSAgICAgICAgICAgIHNlbGYtPnBhcmVudCwgZGVz
Y3JpcHRvcikpID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgfQotICBp
ZiAoUHlEaWN0X0RlbEl0ZW0oc2VsZi0+dmFsdWVzLCBleHRlbnNpb24pIDwgMCkgewotICAgIFB5
RXJyX0NsZWFyKCk7Ci0gIH0KLSAgUHlfUkVUVVJOX05PTkU7Ci19Ci0KLVB5T2JqZWN0KiBIYXNF
eHRlbnNpb24oRXh0ZW5zaW9uRGljdCogc2VsZiwgUHlPYmplY3QqIGV4dGVuc2lvbikgewotICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPQotICAgICAgY21lc3NhZ2U6OkdldEV4
dGVuc2lvbkRlc2NyaXB0b3IoZXh0ZW5zaW9uKTsKLSAgaWYgKGRlc2NyaXB0b3IgPT0gTlVMTCkg
ewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGlmIChzZWxmLT5wYXJlbnQpIHsKLSAgICByZXR1
cm4gY21lc3NhZ2U6Okhhc0ZpZWxkQnlEZXNjcmlwdG9yKHNlbGYtPnBhcmVudCwgZGVzY3JpcHRv
cik7Ci0gIH0gZWxzZSB7Ci0gICAgaW50IGV4aXN0cyA9IFB5RGljdF9Db250YWlucyhzZWxmLT52
YWx1ZXMsIGV4dGVuc2lvbik7Ci0gICAgaWYgKGV4aXN0cyA8IDApIHsKLSAgICAgIHJldHVybiBO
VUxMOwotICAgIH0KLSAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGV4aXN0cyk7Ci0gIH0KLX0K
LQotUHlPYmplY3QqIF9GaW5kRXh0ZW5zaW9uQnlOYW1lKEV4dGVuc2lvbkRpY3QqIHNlbGYsIFB5
T2JqZWN0KiBuYW1lKSB7Ci0gIFNjb3BlZFB5T2JqZWN0UHRyIGV4dGVuc2lvbnNfYnlfbmFtZShQ
eU9iamVjdF9HZXRBdHRyU3RyaW5nKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxQeU9iamVjdCo+
KHNlbGYtPnBhcmVudCksICJfZXh0ZW5zaW9uc19ieV9uYW1lIikpOwotICBpZiAoZXh0ZW5zaW9u
c19ieV9uYW1lID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBQeU9iamVjdCog
cmVzdWx0ID0gUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9uc19ieV9uYW1lLmdldCgpLCBuYW1lKTsK
LSAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAgUHlfUkVUVVJOX05PTkU7Ci0gIH0gZWxzZSB7
Ci0gICAgUHlfSU5DUkVGKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi1Q
eU9iamVjdCogX0ZpbmRFeHRlbnNpb25CeU51bWJlcihFeHRlbnNpb25EaWN0KiBzZWxmLCBQeU9i
amVjdCogbnVtYmVyKSB7Ci0gIFNjb3BlZFB5T2JqZWN0UHRyIGV4dGVuc2lvbnNfYnlfbnVtYmVy
KFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoCi0gICAgICByZWludGVycHJldF9jYXN0PFB5T2JqZWN0
Kj4oc2VsZi0+cGFyZW50KSwgIl9leHRlbnNpb25zX2J5X251bWJlciIpKTsKLSAgaWYgKGV4dGVu
c2lvbnNfYnlfbnVtYmVyID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBQeU9i
amVjdCogcmVzdWx0ID0gUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9uc19ieV9udW1iZXIuZ2V0KCks
IG51bWJlcik7Ci0gIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgIFB5X1JFVFVSTl9OT05FOwot
ICB9IGVsc2UgewotICAgIFB5X0lOQ1JFRihyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci0g
IH0KLX0KLQotRXh0ZW5zaW9uRGljdCogTmV3RXh0ZW5zaW9uRGljdChDTWVzc2FnZSAqcGFyZW50
KSB7Ci0gIEV4dGVuc2lvbkRpY3QqIHNlbGYgPSByZWludGVycHJldF9jYXN0PEV4dGVuc2lvbkRp
Y3QqPigKLSAgICAgIFB5VHlwZV9HZW5lcmljQWxsb2MoJkV4dGVuc2lvbkRpY3RfVHlwZSwgMCkp
OwotICBpZiAoc2VsZiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBzZWxm
LT5wYXJlbnQgPSBwYXJlbnQ7ICAvLyBTdG9yZSBhIGJvcnJvd2VkIHJlZmVyZW5jZS4KLSAgc2Vs
Zi0+bWVzc2FnZSA9IHBhcmVudC0+bWVzc2FnZTsKLSAgc2VsZi0+b3duZXIgPSBwYXJlbnQtPm93
bmVyOwotICBzZWxmLT52YWx1ZXMgPSBQeURpY3RfTmV3KCk7Ci0gIHJldHVybiBzZWxmOwotfQot
Ci12b2lkIGRlYWxsb2MoRXh0ZW5zaW9uRGljdCogc2VsZikgewotICBQeV9DTEVBUihzZWxmLT52
YWx1ZXMpOwotICBzZWxmLT5vd25lci5yZXNldCgpOwotICBQeV9UWVBFKHNlbGYpLT50cF9mcmVl
KHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihzZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeU1hcHBp
bmdNZXRob2RzIE1wTWV0aG9kcyA9IHsKLSAgKGxlbmZ1bmMpbGVuLCAgICAgICAgICAgICAgIC8q
IG1wX2xlbmd0aCAqLwotICAoYmluYXJ5ZnVuYylzdWJzY3JpcHQsICAgICAgLyogbXBfc3Vic2Ny
aXB0ICovCi0gIChvYmpvYmphcmdwcm9jKWFzc19zdWJzY3JpcHQsLyogbXBfYXNzX3N1YnNjcmlw
dCAqLwotfTsKLQotI2RlZmluZSBFRE1FVEhPRChuYW1lLCBhcmdzLCBkb2MpIHsgI25hbWUsIChQ
eUNGdW5jdGlvbiluYW1lLCBhcmdzLCBkb2MgfQotc3RhdGljIFB5TWV0aG9kRGVmIE1ldGhvZHNb
XSA9IHsKLSAgRURNRVRIT0QoQ2xlYXJFeHRlbnNpb24sIE1FVEhfTywgIkNsZWFycyBhbiBleHRl
bnNpb24gZnJvbSB0aGUgb2JqZWN0LiIpLAotICBFRE1FVEhPRChIYXNFeHRlbnNpb24sIE1FVEhf
TywgIkNoZWNrcyBpZiB0aGUgb2JqZWN0IGhhcyBhbiBleHRlbnNpb24uIiksCi0gIEVETUVUSE9E
KF9GaW5kRXh0ZW5zaW9uQnlOYW1lLCBNRVRIX08sCi0gICAgICAgICAgICJGaW5kcyBhbiBleHRl
bnNpb24gYnkgbmFtZS4iKSwKLSAgRURNRVRIT0QoX0ZpbmRFeHRlbnNpb25CeU51bWJlciwgTUVU
SF9PLAotICAgICAgICAgICAiRmluZHMgYW4gZXh0ZW5zaW9uIGJ5IGZpZWxkIG51bWJlci4iKSwK
LSAgeyBOVUxMLCBOVUxMIH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBleHRlbnNpb25fZGljdAot
Ci1QeVR5cGVPYmplY3QgRXh0ZW5zaW9uRGljdF9UeXBlID0gewotICBQeVZhck9iamVjdF9IRUFE
X0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICBGVUxMX01PRFVMRV9OQU1FICIuRXh0ZW5zaW9uRGlj
dCIsICAgLy8gdHBfbmFtZQotICBzaXplb2YoRXh0ZW5zaW9uRGljdCksICAgICAgICAgICAgICAg
Ly8gdHBfYmFzaWNzaXplCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgdHBfaXRlbXNpemUKLSAgKGRlc3RydWN0b3IpZXh0ZW5zaW9uX2RpY3Q6OmRlYWxsb2MsICAv
LyAgdHBfZGVhbGxvYwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
IHRwX3ByaW50Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBf
Z2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX3Nl
dGF0dHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9jb21w
YXJlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfcmVwcgot
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2FzX251bWJlcgot
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2FzX3NlcXVlbmNl
Ci0gICZleHRlbnNpb25fZGljdDo6TXBNZXRob2RzLCAgICAgICAgICAvLyAgdHBfYXNfbWFwcGlu
ZwotICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQsICAgICAgICAgLy8gIHRwX2hhc2gKLSAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9jYWxsCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfc3RyCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfZ2V0YXR0cm8KLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9zZXRhdHRybwotICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2FzX2J1ZmZlcgotICBQeV9UUEZMQUdTX0RF
RkFVTFQsICAgICAgICAgICAgICAgICAgLy8gIHRwX2ZsYWdzCi0gICJBbiBleHRlbnNpb24gZGlj
dCIsICAgICAgICAgICAgICAgICAvLyAgdHBfZG9jCi0gIDAsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgdHBfdHJhdmVyc2UKLSAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICB0cF9jbGVhcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gIHRwX3JpY2hjb21wYXJlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgdHBfd2Vha2xpc3RvZmZzZXQKLSAgMCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICB0cF9pdGVyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgdHBfaXRlcm5leHQKLSAgZXh0ZW5zaW9uX2RpY3Q6Ok1ldGhvZHMsICAg
ICAgICAgICAgIC8vICB0cF9tZXRob2RzCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgdHBfbWVtYmVycwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gIHRwX2dldHNldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gIHRwX2Jhc2UKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICB0cF9kaWN0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBf
ZGVzY3JfZ2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBf
ZGVzY3Jfc2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBf
ZGljdG9mZnNldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRw
X2luaXQKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBweXRob24KLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3By
b3RvYnVmL3B5ZXh0L2V4dGVuc2lvbl9kaWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHll
eHQvZXh0ZW5zaW9uX2RpY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1NmVk
YTFlNjFjNTZhYTQ3MWQ1MTk0MzA1OTU4NzY5MWUyMWJjMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvZXh0
ZW5zaW9uX2RpY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBhbnVyYWFnQGdvb2dsZS5jb20g
KEFudXJhYWcgQWdyYXdhbCkKLS8vIEF1dGhvcjogdGliZWxsQGdvb2dsZS5jb20gKEpvaGFuIFRp
YmVsbCkKLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfUFlUSE9OX0NQUF9FWFRFTlNJT05fRElD
VF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1BZVEhPTl9DUFBfRVhURU5TSU9OX0RJQ1Rf
SF9fCi0KLSNpbmNsdWRlIDxQeXRob24uaD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYg
X1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRy
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewot
Ci1jbGFzcyBNZXNzYWdlOwotY2xhc3MgRmllbGREZXNjcmlwdG9yOwotCi0jaWZkZWYgX1NIQVJF
RF9QVFJfSAotdXNpbmcgc3RkOjpzaGFyZWRfcHRyOwotI2Vsc2UKLXVzaW5nIGludGVybmFsOjpz
aGFyZWRfcHRyOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBweXRob24gewotCi1zdHJ1Y3QgQ01lc3Nh
Z2U7Ci0KLXR5cGVkZWYgc3RydWN0IEV4dGVuc2lvbkRpY3QgewotICBQeU9iamVjdF9IRUFEOwot
Ci0gIC8vIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBDKysgTWVzc2FnZSBvYmplY3QgdGhhdCBvd25z
IHRoZSB3aG9sZQotICAvLyBwcm90byB0cmVlLiAgRXZlcnkgUHl0aG9uIGNvbnRhaW5lciBjbGFz
cyBob2xkcyBhCi0gIC8vIHJlZmVyZW5jZSB0byBpdCBpbiBvcmRlciB0byBrZWVwIGl0IGFsaXZl
IGFzIGxvbmcgYXMgdGhlcmUncyBhCi0gIC8vIFB5dGhvbiBvYmplY3QgdGhhdCByZWZlcmVuY2Vz
IGFueSBwYXJ0IG9mIHRoZSB0cmVlLgotICBzaGFyZWRfcHRyPE1lc3NhZ2U+IG93bmVyOwotCi0g
IC8vIFdlYWsgcmVmZXJlbmNlIHRvIHBhcmVudCBtZXNzYWdlLiBVc2VkIHRvIG1ha2Ugc3VyZQot
ICAvLyB0aGUgcGFyZW50IGlzIHdyaXRhYmxlIHdoZW4gYW4gZXh0ZW5zaW9uIGZpZWxkIGlzIG1v
ZGlmaWVkLgotICBDTWVzc2FnZSogcGFyZW50OwotCi0gIC8vIFBvaW50ZXIgdG8gdGhlIEMrKyBN
ZXNzYWdlIHRoYXQgdGhpcyBFeHRlbnNpb25EaWN0IGV4dGVuZHMuCi0gIC8vIE5vdCBvd25lZCBi
eSB1cy4KLSAgTWVzc2FnZSogbWVzc2FnZTsKLQotICAvLyBBIGRpY3Qgb2YgY2hpbGQgbWVzc2Fn
ZXMsIGluZGV4ZWQgYnkgRXh0ZW5zaW9uIGRlc2NyaXB0b3JzLgotICAvLyBTaW1pbGFyIHRvIENN
ZXNzYWdlOjpjb21wb3NpdGVfZmllbGRzLgotICBQeU9iamVjdCogdmFsdWVzOwotfSBFeHRlbnNp
b25EaWN0OwotCi1leHRlcm4gUHlUeXBlT2JqZWN0IEV4dGVuc2lvbkRpY3RfVHlwZTsKLQotbmFt
ZXNwYWNlIGV4dGVuc2lvbl9kaWN0IHsKLQotLy8gQnVpbGRzIGFuIEV4dGVuc2lvbnMgZGljdCBm
b3IgYSBzcGVjaWZpYyBtZXNzYWdlLgotRXh0ZW5zaW9uRGljdCogTmV3RXh0ZW5zaW9uRGljdChD
TWVzc2FnZSAqcGFyZW50KTsKLQotLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGV4dGVuc2lvbiB2YWx1
ZXMgaW4gdGhpcyBFeHRlbnNpb25EaWN0IGFzIGEgcHl0aG9uIG9iamVjdC4KLS8vCi0vLyBSZXR1
cm5zIGEgbmV3IHJlZmVyZW5jZS4KLVB5T2JqZWN0KiBsZW4oRXh0ZW5zaW9uRGljdCogc2VsZik7
Ci0KLS8vIFJlbGVhc2VzIGV4dGVuc2lvbnMgcmVmZXJlbmNlZCBvdXRzaWRlIHRoaXMgZGljdGlv
bmFyeSB0byBrZWVwIG91dHNpZGUKLS8vIHJlZmVyZW5jZXMgYWxpdmUuCi0vLwotLy8gUmV0dXJu
cyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi1pbnQgUmVsZWFzZUV4dGVuc2lvbihFeHRl
bnNpb25EaWN0KiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QqIGV4dGVuc2lv
biwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRv
cik7Ci0KLS8vIEdldHMgYW4gZXh0ZW5zaW9uIGZyb20gdGhlIGRpY3QgZm9yIHRoZSBnaXZlbiBl
eHRlbnNpb24gZGVzY3JpcHRvci4KLS8vCi0vLyBSZXR1cm5zIGEgbmV3IHJlZmVyZW5jZS4KLVB5
T2JqZWN0KiBzdWJzY3JpcHQoRXh0ZW5zaW9uRGljdCogc2VsZiwgUHlPYmplY3QqIGtleSk7Ci0K
LS8vIEFzc2lnbnMgYSB2YWx1ZSB0byBhbiBleHRlbnNpb24gaW4gdGhlIGRpY3QuIENhbiBvbmx5
IGJlIHVzZWQgZm9yIHNpbmd1bGFyCi0vLyBzaW1wbGUgdHlwZXMuCi0vLwotLy8gUmV0dXJucyAw
IG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi1pbnQgYXNzX3N1YnNjcmlwdChFeHRlbnNpb25E
aWN0KiBzZWxmLCBQeU9iamVjdCoga2V5LCBQeU9iamVjdCogdmFsdWUpOwotCi0vLyBDbGVhcnMg
YW4gZXh0ZW5zaW9uIGZyb20gdGhlIGRpY3QuIFdpbGwgcmVsZWFzZSB0aGUgZXh0ZW5zaW9uIGlm
IHRoZXJlCi0vLyBpcyBzdGlsbCBhbiBleHRlcm5hbCByZWZlcmVuY2UgbGVmdCB0byBpdC4KLS8v
Ci0vLyBSZXR1cm5zIE5vbmUgb24gc3VjY2Vzcy4KLVB5T2JqZWN0KiBDbGVhckV4dGVuc2lvbihF
eHRlbnNpb25EaWN0KiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUHlPYmplY3QqIGV4dGVuc2lvbik7Ci0KLS8vIEdldHMgYW4gZXh0ZW5zaW9uIGZyb20gdGhl
IGRpY3QgZ2l2ZW4gdGhlIGV4dGVuc2lvbiBuYW1lIGFzIG9wcG9zZWQgdG8KLS8vIGRlc2NyaXB0
b3IuCi0vLwotLy8gUmV0dXJucyBhIG5ldyByZWZlcmVuY2UuCi1QeU9iamVjdCogX0ZpbmRFeHRl
bnNpb25CeU5hbWUoRXh0ZW5zaW9uRGljdCogc2VsZiwgUHlPYmplY3QqIG5hbWUpOwotCi0vLyBH
ZXRzIGFuIGV4dGVuc2lvbiBmcm9tIHRoZSBkaWN0IGdpdmVuIHRoZSBleHRlbnNpb24gZmllbGQg
bnVtYmVyIGFzCi0vLyBvcHBvc2VkIHRvIGRlc2NyaXB0b3IuCi0vLwotLy8gUmV0dXJucyBhIG5l
dyByZWZlcmVuY2UuCi1QeU9iamVjdCogX0ZpbmRFeHRlbnNpb25CeU51bWJlcihFeHRlbnNpb25E
aWN0KiBzZWxmLCBQeU9iamVjdCogbnVtYmVyKTsKLQotfSAgLy8gbmFtZXNwYWNlIGV4dGVuc2lv
bl9kaWN0Ci19ICAvLyBuYW1lc3BhY2UgcHl0aG9uCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYK
LQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfUFlU
SE9OX0NQUF9FWFRFTlNJT05fRElDVF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90
b2J1Zi9weWV4dC9tYXBfY29udGFpbmVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0
L21hcF9jb250YWluZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMjI0MDZk
MTFmMDQwMGExMmIwMWYxMDcyNzczYzRjZjM4MTNmMDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L21hcF9j
b250YWluZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw5NzAgKzAsMCBAQAotLy8gUHJvdG9jb2wg
QnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQg
MjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxv
cGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogaGFiZXJtYW5AZ29vZ2xlLmNvbSAo
Sm9zaCBIYWJlcm1hbikKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9tYXBfY29u
dGFpbmVyLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvc2NvcGVkX3B0ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGQuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFwLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQvbWVzc2FnZS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9zY29wZWRfcHlvYmplY3RfcHRyLmg+
Ci0KLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLSAgI2RlZmluZSBQeUludF9Gcm9tTG9uZyBQ
eUxvbmdfRnJvbUxvbmcKLSAgI2RlZmluZSBQeUludF9Gcm9tU2l6ZV90IFB5TG9uZ19Gcm9tU2l6
ZV90Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewot
bmFtZXNwYWNlIHB5dGhvbiB7Ci0KLS8vIEZ1bmN0aW9ucyB0aGF0IG5lZWQgYWNjZXNzIHRvIG1h
cCByZWZsZWN0aW9uIGZ1bmN0aW9uYWxpdHkuCi0vLyBUaGV5IG5lZWQgdG8gYmUgY29udGFpbmVk
IGluIHRoaXMgY2xhc3MgYmVjYXVzZSBpdCBpcyBmcmllbmRlZC4KLWNsYXNzIE1hcFJlZmxlY3Rp
b25GcmllbmQgewotIHB1YmxpYzoKLSAgLy8gTWV0aG9kcyB0aGF0IGFyZSBpbiBjb21tb24gYmV0
d2VlbiB0aGUgbWFwIHR5cGVzLgotICBzdGF0aWMgUHlPYmplY3QqIENvbnRhaW5zKFB5T2JqZWN0
KiBfc2VsZiwgUHlPYmplY3QqIGtleSk7Ci0gIHN0YXRpYyBQeV9zc2l6ZV90IExlbmd0aChQeU9i
amVjdCogX3NlbGYpOwotICBzdGF0aWMgUHlPYmplY3QqIEdldEl0ZXJhdG9yKFB5T2JqZWN0ICpf
c2VsZik7Ci0gIHN0YXRpYyBQeU9iamVjdCogSXRlck5leHQoUHlPYmplY3QqIF9zZWxmKTsKLQot
ICAvLyBNZXRob2RzIHRoYXQgZGlmZmVyIGJldHdlZW4gdGhlIG1hcCB0eXBlcy4KLSAgc3RhdGlj
IFB5T2JqZWN0KiBTY2FsYXJNYXBHZXRJdGVtKFB5T2JqZWN0KiBfc2VsZiwgUHlPYmplY3QqIGtl
eSk7Ci0gIHN0YXRpYyBQeU9iamVjdCogTWVzc2FnZU1hcEdldEl0ZW0oUHlPYmplY3QqIF9zZWxm
LCBQeU9iamVjdCoga2V5KTsKLSAgc3RhdGljIGludCBTY2FsYXJNYXBTZXRJdGVtKFB5T2JqZWN0
KiBfc2VsZiwgUHlPYmplY3QqIGtleSwgUHlPYmplY3QqIHYpOwotICBzdGF0aWMgaW50IE1lc3Nh
Z2VNYXBTZXRJdGVtKFB5T2JqZWN0KiBfc2VsZiwgUHlPYmplY3QqIGtleSwgUHlPYmplY3QqIHYp
OwotfTsKLQotc3RydWN0IE1hcEl0ZXJhdG9yIHsKLSAgUHlPYmplY3RfSEVBRDsKLQotICBnb29n
bGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1hcEl0ZXJhdG9y
PiBpdGVyOwotCi0gIC8vIEEgcG9pbnRlciBiYWNrIHRvIHRoZSBjb250YWluZXIsIHNvIHdlIGNh
biBub3RpY2UgY2hhbmdlcyB0byB0aGUgdmVyc2lvbi4KLSAgLy8gV2Ugb3duIGEgcmVmIG9uIHRo
aXMuCi0gIE1hcENvbnRhaW5lciogY29udGFpbmVyOwotCi0gIC8vIFdlIG5lZWQgdG8ga2VlcCBh
IHJlZiBvbiB0aGUgTWVzc2FnZSogdG9vLCBiZWNhdXNlCi0gIC8vIE1hcEl0ZXJhdG9yOjp+TWFw
SXRlcmF0b3IoKSBhY2Nlc3NlcyBpdC4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgb2sgYmVjYXVz
ZQotICAvLyB0aGUgcmVmIG9uIGNvbnRhaW5lciAoYWJvdmUpIHdvdWxkIGd1YXJhbnRlZSBvdXRs
aXZlIHNlbWFudGljcy4gIEhvd2V2ZXIgaW4KLSAgLy8gdGhlIGNhc2Ugb2YgQ2xlYXJGaWVsZCgp
LCBJbml0aWFsaXplQW5kQ29weVRvUGFyZW50Q29udGFpbmVyKCkgcmVzZXRzIHRoZQotICAvLyBt
ZXNzYWdlIHBvaW50ZXIgKGFuZCB0aGUgb3duZXIpIHRvIGEgZGlmZmVyZW50IG1lc3NhZ2UsIGEg
Y29weSBvZiB0aGUKLSAgLy8gb3JpZ2luYWwuICBCdXQgb3VyIGl0ZXJhdG9yIHN0aWxsIHBvaW50
cyB0byB0aGUgb3JpZ2luYWwsIHdoaWNoIGNvdWxkIG5vdwotICAvLyBnZXQgZGVsZXRlZCBiZWZv
cmUgdXMuCi0gIC8vCi0gIC8vIFRvIHByZXZlbnQgdGhpcywgd2UgZW5zdXJlIHRoYXQgdGhlIE1l
c3NhZ2Ugd2lsbCBhbHdheXMgc3RheSBhbGl2ZSBhcyBsb25nCi0gIC8vIGFzIHRoaXMgaXRlcmF0
b3IgZG9lcy4gIFRoaXMgaXMgc29sZWx5IGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgTWFwSXRlcmF0
b3IKLSAgLy8gZGVzdHJ1Y3RvciAtLSB3ZSBzaG91bGQgbmV2ZXIgYWN0dWFsbHkgYWNjZXNzIHRo
ZSBpdGVyYXRvciBpbiB0aGlzIHN0YXRlCi0gIC8vIGV4Y2VwdCB0byBkZWxldGUgaXQuCi0gIHNo
YXJlZF9wdHI8TWVzc2FnZT4gb3duZXI7Ci0KLSAgLy8gVGhlIHZlcnNpb24gb2YgdGhlIG1hcCB3
aGVuIHdlIHRvb2sgdGhlIGl0ZXJhdG9yIHRvIGl0LgotICAvLwotICAvLyBXZSBzdG9yZSB0aGlz
IHNvIHRoYXQgaWYgdGhlIG1hcCBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uIHdlIGNhbiB0
aHJvdwotICAvLyBhbiBlcnJvci4KLSAgdWludDY0IHZlcnNpb247Ci0KLSAgLy8gVHJ1ZSBpZiB0
aGUgY29udGFpbmVyIGlzIGVtcHR5LiAgV2Ugc2lnbmFsIHRoaXMgc2VwYXJhdGVseSB0byBhdm9p
ZCBjYWxsaW5nCi0gIC8vIGFueSBvZiB0aGUgaXRlcmF0aW9uIG1ldGhvZHMsIHdoaWNoIGFyZSBu
b24tY29uc3QuCi0gIGJvb2wgZW1wdHk7Ci19OwotCi1NZXNzYWdlKiBNYXBDb250YWluZXI6Okdl
dE11dGFibGVNZXNzYWdlKCkgewotICBjbWVzc2FnZTo6QXNzdXJlV3JpdGFibGUocGFyZW50KTsK
LSAgcmV0dXJuIGNvbnN0X2Nhc3Q8TWVzc2FnZSo+KG1lc3NhZ2UpOwotfQotCi0vLyBDb25zdW1l
cyBhIHJlZmVyZW5jZSBvbiB0aGUgUHl0aG9uIHN0cmluZyBvYmplY3QuCi1zdGF0aWMgYm9vbCBQ
eVN0cmluZ1RvU1RMKFB5T2JqZWN0KiBweV9zdHJpbmcsIHN0cmluZyogc3RsX3N0cmluZykgewot
ICBjaGFyICp2YWx1ZTsKLSAgUHlfc3NpemVfdCB2YWx1ZV9sZW47Ci0KLSAgaWYgKCFweV9zdHJp
bmcpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKFB5Qnl0ZXNfQXNTdHJpbmdBbmRT
aXplKHB5X3N0cmluZywgJnZhbHVlLCAmdmFsdWVfbGVuKSA8IDApIHsKLSAgICBQeV9ERUNSRUYo
cHlfc3RyaW5nKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0gZWxzZSB7Ci0gICAgc3RsX3N0cmlu
Zy0+YXNzaWduKHZhbHVlLCB2YWx1ZV9sZW4pOwotICAgIFB5X0RFQ1JFRihweV9zdHJpbmcpOwot
ICAgIHJldHVybiB0cnVlOwotICB9Ci19Ci0KLXN0YXRpYyBib29sIFB5dGhvblRvTWFwS2V5KFB5
T2JqZWN0KiBvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBNYXBL
ZXkqIGtleSkgewotICBzd2l0Y2ggKGZpZWxkX2Rlc2NyaXB0b3ItPmNwcF90eXBlKCkpIHsKLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQzMjogewotICAgICAgR09PR0xFX0NI
RUNLX0dFVF9JTlQzMihvYmosIHZhbHVlLCBmYWxzZSk7Ci0gICAgICBrZXktPlNldEludDMyVmFs
dWUodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpDUFBUWVBFX0lOVDY0OiB7Ci0gICAgICBHT09HTEVfQ0hFQ0tfR0VUX0lOVDY0KG9iaiwgdmFs
dWUsIGZhbHNlKTsKLSAgICAgIGtleS0+U2V0SW50NjRWYWx1ZSh2YWx1ZSk7Ci0gICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMyOiB7Ci0g
ICAgICBHT09HTEVfQ0hFQ0tfR0VUX1VJTlQzMihvYmosIHZhbHVlLCBmYWxzZSk7Ci0gICAgICBr
ZXktPlNldFVJbnQzMlZhbHVlKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UNjQ6IHsKLSAgICAgIEdPT0dMRV9DSEVDS19H
RVRfVUlOVDY0KG9iaiwgdmFsdWUsIGZhbHNlKTsKLSAgICAgIGtleS0+U2V0VUludDY0VmFsdWUo
dmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX0JPT0w6IHsKLSAgICAgIEdPT0dMRV9DSEVDS19HRVRfQk9PTChvYmosIHZhbHVlLCBm
YWxzZSk7Ci0gICAgICBrZXktPlNldEJvb2xWYWx1ZSh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOiB7Ci0gICAgICBz
dHJpbmcgc3RyOwotICAgICAgaWYgKCFQeVN0cmluZ1RvU1RMKENoZWNrU3RyaW5nKG9iaiwgZmll
bGRfZGVzY3JpcHRvciksICZzdHIpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0K
LSAgICAgIGtleS0+U2V0U3RyaW5nVmFsdWUoc3RyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBkZWZhdWx0OgotICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgIFB5RXhjX1N5c3RlbUVy
cm9yLCAiVHlwZSAlZCBjYW5ub3QgYmUgYSBtYXAga2V5IiwKLSAgICAgICAgICBmaWVsZF9kZXNj
cmlwdG9yLT5jcHBfdHlwZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBNYXBLZXlUb1B5dGhvbihjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IE1hcEtleSYga2V5KSB7Ci0gIHN3aXRjaCAoZmllbGRfZGVzY3JpcHRvci0+Y3Bw
X3R5cGUoKSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyOgotICAg
ICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKGtleS5HZXRJbnQzMlZhbHVlKCkpOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OgotICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9t
TG9uZ0xvbmcoa2V5LkdldEludDY0VmFsdWUoKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfVUlOVDMyOgotICAgICAgcmV0dXJuIFB5SW50X0Zyb21TaXplX3Qoa2V5LkdldFVJ
bnQzMlZhbHVlKCkpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NDoK
LSAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoa2V5LkdldFVJbnQ2NFZh
bHVlKCkpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0w6Ci0gICAgICBy
ZXR1cm4gUHlCb29sX0Zyb21Mb25nKGtleS5HZXRCb29sVmFsdWUoKSk7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgcmV0dXJuIFRvU3RyaW5nT2JqZWN0
KGZpZWxkX2Rlc2NyaXB0b3IsIGtleS5HZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yLCAiQ291bGRu
J3QgY29udmVydCB0eXBlICVkIHRvIHZhbHVlIiwKLSAgICAgICAgICBmaWVsZF9kZXNjcmlwdG9y
LT5jcHBfdHlwZSgpKTsKLSAgICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLS8vIFRoaXMgaXMg
b25seSB1c2VkIGZvciBTY2FsYXJNYXAsIHNvIHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRoZQot
Ly8gQ1BQVFlQRV9NRVNTQUdFIGNhc2UuCi1QeU9iamVjdCogTWFwVmFsdWVSZWZUb1B5dGhvbihj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNYXBWYWx1ZVJlZiogdmFsdWUpIHsKLSAgc3dpdGNoIChmaWVsZF9kZXNj
cmlwdG9yLT5jcHBfdHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
SU5UMzI6Ci0gICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcodmFsdWUtPkdldEludDMyVmFsdWUo
KSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UNjQ6Ci0gICAgICByZXR1
cm4gUHlMb25nX0Zyb21Mb25nTG9uZyh2YWx1ZS0+R2V0SW50NjRWYWx1ZSgpKTsKLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UMzI6Ci0gICAgICByZXR1cm4gUHlJbnRfRnJv
bVNpemVfdCh2YWx1ZS0+R2V0VUludDMyVmFsdWUoKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfVUlOVDY0OgotICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25n
TG9uZyh2YWx1ZS0+R2V0VUludDY0VmFsdWUoKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfRkxPQVQ6Ci0gICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHZhbHVlLT5H
ZXRGbG9hdFZhbHVlKCkpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJM
RToKLSAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUodmFsdWUtPkdldERvdWJsZVZhbHVl
KCkpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0w6Ci0gICAgICByZXR1
cm4gUHlCb29sX0Zyb21Mb25nKHZhbHVlLT5HZXRCb29sVmFsdWUoKSk7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgcmV0dXJuIFRvU3RyaW5nT2JqZWN0
KGZpZWxkX2Rlc2NyaXB0b3IsIHZhbHVlLT5HZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNOgotICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25n
KHZhbHVlLT5HZXRFbnVtVmFsdWUoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgIFB5RXJyX0Zvcm1h
dCgKLSAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwgIkNvdWxkbid0IGNvbnZlcnQgdHlwZSAl
ZCB0byB2YWx1ZSIsCi0gICAgICAgICAgZmllbGRfZGVzY3JpcHRvci0+Y3BwX3R5cGUoKSk7Ci0g
ICAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vLyBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgU2Nh
bGFyTWFwLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGhhbmRsZSB0aGUKLS8vIENQUFRZUEVfTUVTU0FH
RSBjYXNlLgotc3RhdGljIGJvb2wgUHl0aG9uVG9NYXBWYWx1ZVJlZihQeU9iamVjdCogb2JqLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkX2Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxs
b3dfdW5rbm93bl9lbnVtX3ZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWFwVmFsdWVSZWYqIHZhbHVlX3JlZikgewotICBzd2l0Y2ggKGZpZWxkX2Rlc2NyaXB0b3ItPmNw
cF90eXBlKCkpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQzMjogewot
ICAgICAgR09PR0xFX0NIRUNLX0dFVF9JTlQzMihvYmosIHZhbHVlLCBmYWxzZSk7Ci0gICAgICB2
YWx1ZV9yZWYtPlNldEludDMyVmFsdWUodmFsdWUpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OiB7Ci0gICAgICBHT09H
TEVfQ0hFQ0tfR0VUX0lOVDY0KG9iaiwgdmFsdWUsIGZhbHNlKTsKLSAgICAgIHZhbHVlX3JlZi0+
U2V0SW50NjRWYWx1ZSh2YWx1ZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2Fz
ZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMyOiB7Ci0gICAgICBHT09HTEVfQ0hFQ0tf
R0VUX1VJTlQzMihvYmosIHZhbHVlLCBmYWxzZSk7Ci0gICAgICB2YWx1ZV9yZWYtPlNldFVJbnQz
MlZhbHVlKHZhbHVlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UNjQ6IHsKLSAgICAgIEdPT0dMRV9DSEVDS19HRVRfVUlO
VDY0KG9iaiwgdmFsdWUsIGZhbHNlKTsKLSAgICAgIHZhbHVlX3JlZi0+U2V0VUludDY0VmFsdWUo
dmFsdWUpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX0ZMT0FUOiB7Ci0gICAgICBHT09HTEVfQ0hFQ0tfR0VUX0ZMT0FUKG9iaiwg
dmFsdWUsIGZhbHNlKTsKLSAgICAgIHZhbHVlX3JlZi0+U2V0RmxvYXRWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfRE9VQkxFOiB7Ci0gICAgICBHT09HTEVfQ0hFQ0tfR0VUX0RPVUJMRShvYmosIHZhbHVlLCBm
YWxzZSk7Ci0gICAgICB2YWx1ZV9yZWYtPlNldERvdWJsZVZhbHVlKHZhbHVlKTsKLSAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9CT09M
OiB7Ci0gICAgICBHT09HTEVfQ0hFQ0tfR0VUX0JPT0wob2JqLCB2YWx1ZSwgZmFsc2UpOwotICAg
ICAgdmFsdWVfcmVmLT5TZXRCb29sVmFsdWUodmFsdWUpOwotICAgICAgcmV0dXJuIHRydWU7Owot
ICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6IHsKLSAgICAg
IHN0cmluZyBzdHI7Ci0gICAgICBpZiAoIVB5U3RyaW5nVG9TVEwoQ2hlY2tTdHJpbmcob2JqLCBm
aWVsZF9kZXNjcmlwdG9yKSwgJnN0cikpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotICAgICAgdmFsdWVfcmVmLT5TZXRTdHJpbmdWYWx1ZShzdHIpOwotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06IHsKLSAg
ICAgIEdPT0dMRV9DSEVDS19HRVRfSU5UMzIob2JqLCB2YWx1ZSwgZmFsc2UpOwotICAgICAgaWYg
KGFsbG93X3Vua25vd25fZW51bV92YWx1ZXMpIHsKLSAgICAgICAgdmFsdWVfcmVmLT5TZXRFbnVt
VmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBlbnVtX2Rlc2NyaXB0b3IgPSBmaWVsZF9kZXNjcmlw
dG9yLT5lbnVtX3R5cGUoKTsKLSAgICAgICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogZW51
bV92YWx1ZSA9Ci0gICAgICAgICAgICBlbnVtX2Rlc2NyaXB0b3ItPkZpbmRWYWx1ZUJ5TnVtYmVy
KHZhbHVlKTsKLSAgICAgICAgaWYgKGVudW1fdmFsdWUgIT0gTlVMTCkgewotICAgICAgICAgIHZh
bHVlX3JlZi0+U2V0RW51bVZhbHVlKHZhbHVlKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwg
IlVua25vd24gZW51bSB2YWx1ZTogJWQiLCB2YWx1ZSk7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoK
LSAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwgIlNldHRp
bmcgdmFsdWUgdG8gYSBmaWVsZCBvZiB1bmtub3duIHR5cGUgJWQiLAotICAgICAgICAgIGZpZWxk
X2Rlc2NyaXB0b3ItPmNwcF90eXBlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0K
LS8vIE1hcCBtZXRob2RzIGNvbW1vbiB0byBTY2FsYXJNYXAgYW5kIE1lc3NhZ2VNYXAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLXN0YXRpYyBNYXBDb250YWluZXIqIEdldE1hcChQ
eU9iamVjdCogb2JqKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PE1hcENvbnRhaW5lcio+
KG9iaik7Ci19Ci0KLVB5X3NzaXplX3QgTWFwUmVmbGVjdGlvbkZyaWVuZDo6TGVuZ3RoKFB5T2Jq
ZWN0KiBfc2VsZikgewotICBNYXBDb250YWluZXIqIHNlbGYgPSBHZXRNYXAoX3NlbGYpOwotICBj
b25zdCBnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKiBtZXNzYWdlID0gc2VsZi0+bWVzc2FnZTsK
LSAgcmV0dXJuIG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+TWFwU2l6ZSgqbWVzc2FnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5wYXJlbnRfZmll
bGRfZGVzY3JpcHRvcik7Ci19Ci0KLVB5T2JqZWN0KiBDbGVhcihQeU9iamVjdCogX3NlbGYpIHsK
LSAgTWFwQ29udGFpbmVyKiBzZWxmID0gR2V0TWFwKF9zZWxmKTsKLSAgTWVzc2FnZSogbWVzc2Fn
ZSA9IHNlbGYtPkdldE11dGFibGVNZXNzYWdlKCk7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxl
Y3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgcmVmbGVjdGlvbi0+Q2xlYXJG
aWVsZChtZXNzYWdlLCBzZWxmLT5wYXJlbnRfZmllbGRfZGVzY3JpcHRvcik7Ci0KLSAgUHlfUkVU
VVJOX05PTkU7Ci19Ci0KLVB5T2JqZWN0KiBNYXBSZWZsZWN0aW9uRnJpZW5kOjpDb250YWlucyhQ
eU9iamVjdCogX3NlbGYsIFB5T2JqZWN0KiBrZXkpIHsKLSAgTWFwQ29udGFpbmVyKiBzZWxmID0g
R2V0TWFwKF9zZWxmKTsKLQotICBjb25zdCBNZXNzYWdlKiBtZXNzYWdlID0gc2VsZi0+bWVzc2Fn
ZTsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rp
b24oKTsKLSAgTWFwS2V5IG1hcF9rZXk7Ci0KLSAgaWYgKCFQeXRob25Ub01hcEtleShrZXksIHNl
bGYtPmtleV9maWVsZF9kZXNjcmlwdG9yLCAmbWFwX2tleSkpIHsKLSAgICByZXR1cm4gTlVMTDsK
LSAgfQotCi0gIGlmIChyZWZsZWN0aW9uLT5Db250YWluc01hcEtleSgqbWVzc2FnZSwgc2VsZi0+
cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXBfa2V5KSkgewotICAgIFB5X1JFVFVSTl9UUlVFOwotICB9IGVsc2UgewotICAgIFB5X1JF
VFVSTl9GQUxTRTsKLSAgfQotfQotCi0vLyBJbml0aWFsaXplcyB0aGUgdW5kZXJseWluZyBNZXNz
YWdlIG9iamVjdCBvZiAidG8iIHNvIGl0IGJlY29tZXMgYSBuZXcgcGFyZW50Ci0vLyByZXBlYXRl
ZCBzY2FsYXIsIGFuZCBjb3BpZXMgYWxsIHRoZSB2YWx1ZXMgZnJvbSAiZnJvbSIgdG8gaXQuIEEg
Y2hpbGQgc2NhbGFyCi0vLyBjb250YWluZXIgY2FuIGJlIHJlbGVhc2VkIGJ5IHBhc3NpbmcgaXQg
YXMgYm90aCBmcm9tIGFuZCB0byAoZS5nLiBtYWtpbmcgaXQKLS8vIHRoZSByZWNpcGllbnQgb2Yg
dGhlIG5ldyBwYXJlbnQgbWVzc2FnZSBhbmQgY29weWluZyB0aGUgdmFsdWVzIGZyb20gaXRzZWxm
KS4KLXN0YXRpYyBpbnQgSW5pdGlhbGl6ZUFuZENvcHlUb1BhcmVudENvbnRhaW5lcihNYXBDb250
YWluZXIqIGZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTWFwQ29udGFpbmVyKiB0bykgewotICAvLyBGb3Igbm93IHdlIHJlcXVpcmUgZnJvbSA9PSB0
bywgcmUtZXZhbHVhdGUgaWYgd2Ugd2FudCB0byBzdXBwb3J0IGRlZXAgY29weQotICAvLyBhcyBp
biByZXBlYXRlZF9zY2FsYXJfY29udGFpbmVyLmNjLgotICBHT09HTEVfRENIRUNLKGZyb20gPT0g
dG8pOwotICBNZXNzYWdlKiBuZXdfbWVzc2FnZSA9IGZyb20tPm1lc3NhZ2UtPk5ldygpOwotCi0g
IGlmIChNYXBSZWZsZWN0aW9uRnJpZW5kOjpMZW5ndGgocmVpbnRlcnByZXRfY2FzdDxQeU9iamVj
dCo+KGZyb20pKSA+IDApIHsKLSAgICAvLyBBIHNvbWV3aGF0IHJvdW5kYWJvdXQgd2F5IG9mIGNv
cHlpbmcganVzdCBvbmUgZmllbGQgZnJvbSBvbGRfbWVzc2FnZSB0bwotICAgIC8vIG5ld19tZXNz
YWdlLiAgVGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8gd2l0aCB3aGF0IFJlZmxlY3Rpb24gZ2l2
ZXMgdXMuCi0gICAgTWVzc2FnZSogbXV0YWJsZV9vbGQgPSBmcm9tLT5HZXRNdXRhYmxlTWVzc2Fn
ZSgpOwotICAgIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gICAgZmll
bGRzLnB1c2hfYmFjayhmcm9tLT5wYXJlbnRfZmllbGRfZGVzY3JpcHRvcik7Ci0KLSAgICAvLyBN
b3ZlIHRoZSBtYXAgZmllbGQgaW50byB0aGUgbmV3IG1lc3NhZ2UuCi0gICAgbXV0YWJsZV9vbGQt
PkdldFJlZmxlY3Rpb24oKS0+U3dhcEZpZWxkcyhtdXRhYmxlX29sZCwgbmV3X21lc3NhZ2UsIGZp
ZWxkcyk7Ci0KLSAgICAvLyBJZi93aGVuIHdlIHN1cHBvcnQgZnJvbSAhPSB0bywgdGhpcyB3aWxs
IGJlIHJlcXVpcmVkIGFsc28gdG8gY29weSB0aGUKLSAgICAvLyBtYXAgZmllbGQgYmFjayBpbnRv
IHRoZSBleGlzdGluZyBtZXNzYWdlOgotICAgIC8vIG11dGFibGVfb2xkLT5NZXJnZUZyb20oKm5l
d19tZXNzYWdlKTsKLSAgfQotCi0gIC8vIElmIGZyb20gPT0gdG8gdGhpcyBjb3VsZCBkZWxldGUg
b2xkX21lc3NhZ2UuCi0gIHRvLT5vd25lci5yZXNldChuZXdfbWVzc2FnZSk7Ci0KLSAgdG8tPnBh
cmVudCA9IE5VTEw7Ci0gIHRvLT5wYXJlbnRfZmllbGRfZGVzY3JpcHRvciA9IGZyb20tPnBhcmVu
dF9maWVsZF9kZXNjcmlwdG9yOwotICB0by0+bWVzc2FnZSA9IG5ld19tZXNzYWdlOwotCi0gIC8v
IEludmFsaWRhdGUgaXRlcmF0b3JzLCBzaW5jZSB0aGV5IHBvaW50IHRvIHRoZSBvbGQgY29weSBv
ZiB0aGUgZmllbGQuCi0gIHRvLT52ZXJzaW9uKys7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBN
YXBDb250YWluZXI6OlJlbGVhc2UoKSB7Ci0gIHJldHVybiBJbml0aWFsaXplQW5kQ29weVRvUGFy
ZW50Q29udGFpbmVyKHRoaXMsIHRoaXMpOwotfQotCi0KLS8vIFNjYWxhck1hcCAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0KLVB5T2JqZWN0ICpOZXdTY2FsYXJNYXBDb250YWluZXIoCi0gICAgQ01lc3NhZ2UqIHBhcmVu
dCwgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBwYXJlbnRfZmllbGRf
ZGVzY3JpcHRvcikgewotICBpZiAoIUNoZWNrRmllbGRCZWxvbmdzVG9NZXNzYWdlKHBhcmVudF9m
aWVsZF9kZXNjcmlwdG9yLCBwYXJlbnQtPm1lc3NhZ2UpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLQotI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotICBTY29wZWRQeU9iamVjdFB0ciBvYmoo
UHlUeXBlX0dlbmVyaWNBbGxvYygKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxQeVR5cGVPYmpl
Y3QgKj4oU2NhbGFyTWFwQ29udGFpbmVyX1R5cGUpLCAwKSk7Ci0jZWxzZQotICBTY29wZWRQeU9i
amVjdFB0ciBvYmooUHlUeXBlX0dlbmVyaWNBbGxvYygmU2NhbGFyTWFwQ29udGFpbmVyX1R5cGUs
IDApKTsKLSNlbmRpZgotICBpZiAob2JqLmdldCgpID09IE5VTEwpIHsKLSAgICByZXR1cm4gUHlF
cnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJD
b3VsZCBub3QgYWxsb2NhdGUgbmV3IGNvbnRhaW5lci4iKTsKLSAgfQotCi0gIE1hcENvbnRhaW5l
ciogc2VsZiA9IEdldE1hcChvYmouZ2V0KCkpOwotCi0gIHNlbGYtPm1lc3NhZ2UgPSBwYXJlbnQt
Pm1lc3NhZ2U7Ci0gIHNlbGYtPnBhcmVudCA9IHBhcmVudDsKLSAgc2VsZi0+cGFyZW50X2ZpZWxk
X2Rlc2NyaXB0b3IgPSBwYXJlbnRfZmllbGRfZGVzY3JpcHRvcjsKLSAgc2VsZi0+b3duZXIgPSBw
YXJlbnQtPm93bmVyOwotICBzZWxmLT52ZXJzaW9uID0gMDsKLQotICBzZWxmLT5rZXlfZmllbGRf
ZGVzY3JpcHRvciA9Ci0gICAgICBwYXJlbnRfZmllbGRfZGVzY3JpcHRvci0+bWVzc2FnZV90eXBl
KCktPkZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gIHNlbGYtPnZhbHVlX2ZpZWxkX2Rlc2NyaXB0
b3IgPQotICAgICAgcGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5k
RmllbGRCeU5hbWUoInZhbHVlIik7Ci0KLSAgaWYgKHNlbGYtPmtleV9maWVsZF9kZXNjcmlwdG9y
ID09IE5VTEwgfHwKLSAgICAgIHNlbGYtPnZhbHVlX2ZpZWxkX2Rlc2NyaXB0b3IgPT0gTlVMTCkg
ewotICAgIHJldHVybiBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAiTWFwIGVudHJ5IGRlc2NyaXB0b3IgZGlkIG5vdCBoYXZlIGtleS92YWx1ZSBm
aWVsZHMiKTsKLSAgfQotCi0gIHJldHVybiBvYmoucmVsZWFzZSgpOwotfQotCi1QeU9iamVjdCog
TWFwUmVmbGVjdGlvbkZyaWVuZDo6U2NhbGFyTWFwR2V0SXRlbShQeU9iamVjdCogX3NlbGYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCog
a2V5KSB7Ci0gIE1hcENvbnRhaW5lciogc2VsZiA9IEdldE1hcChfc2VsZik7Ci0KLSAgTWVzc2Fn
ZSogbWVzc2FnZSA9IHNlbGYtPkdldE11dGFibGVNZXNzYWdlKCk7Ci0gIGNvbnN0IFJlZmxlY3Rp
b24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0gIE1hcEtleSBtYXBf
a2V5OwotICBNYXBWYWx1ZVJlZiB2YWx1ZTsKLQotICBpZiAoIVB5dGhvblRvTWFwS2V5KGtleSwg
c2VsZi0+a2V5X2ZpZWxkX2Rlc2NyaXB0b3IsICZtYXBfa2V5KSkgewotICAgIHJldHVybiBOVUxM
OwotICB9Ci0KLSAgaWYgKHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUobWVzc2Fn
ZSwgc2VsZi0+cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcF9rZXksICZ2YWx1ZSkpIHsKLSAgICBzZWxmLT52ZXJzaW9u
Kys7Ci0gIH0KLQotICByZXR1cm4gTWFwVmFsdWVSZWZUb1B5dGhvbihzZWxmLT52YWx1ZV9maWVs
ZF9kZXNjcmlwdG9yLCAmdmFsdWUpOwotfQotCi1pbnQgTWFwUmVmbGVjdGlvbkZyaWVuZDo6U2Nh
bGFyTWFwU2V0SXRlbShQeU9iamVjdCogX3NlbGYsIFB5T2JqZWN0KiBrZXksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogdikgewotICBNYXBDb250
YWluZXIqIHNlbGYgPSBHZXRNYXAoX3NlbGYpOwotCi0gIE1lc3NhZ2UqIG1lc3NhZ2UgPSBzZWxm
LT5HZXRNdXRhYmxlTWVzc2FnZSgpOwotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0g
bWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotICBNYXBLZXkgbWFwX2tleTsKLSAgTWFwVmFsdWVS
ZWYgdmFsdWU7Ci0KLSAgaWYgKCFQeXRob25Ub01hcEtleShrZXksIHNlbGYtPmtleV9maWVsZF9k
ZXNjcmlwdG9yLCAmbWFwX2tleSkpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBzZWxmLT52
ZXJzaW9uKys7Ci0KLSAgaWYgKHYpIHsKLSAgICAvLyBTZXQgaXRlbSB0byB2LgotICAgIHJlZmxl
Y3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUobWVzc2FnZSwgc2VsZi0+cGFyZW50X2ZpZWxk
X2Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBf
a2V5LCAmdmFsdWUpOwotCi0gICAgcmV0dXJuIFB5dGhvblRvTWFwVmFsdWVSZWYodiwgc2VsZi0+
dmFsdWVfZmllbGRfZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWZsZWN0aW9uLT5TdXBwb3J0c1Vua25vd25FbnVtVmFsdWVzKCksICZ2YWx1ZSkKLSAgICAgICAg
ICAgICAgID8gMAotICAgICAgICAgICAgICAgOiAtMTsKLSAgfSBlbHNlIHsKLSAgICAvLyBEZWxl
dGUga2V5IGZyb20gbWFwLgotICAgIGlmIChyZWZsZWN0aW9uLT5EZWxldGVNYXBWYWx1ZShtZXNz
YWdlLCBzZWxmLT5wYXJlbnRfZmllbGRfZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFwX2tleSkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSB7
Ci0gICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3IsICJLZXkgbm90IHByZXNlbnQgaW4g
bWFwIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBQeU9iamVj
dCogU2NhbGFyTWFwR2V0KFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykgewotICBQeU9i
amVjdCoga2V5OwotICBQeU9iamVjdCogZGVmYXVsdF92YWx1ZSA9IE5VTEw7Ci0gIGlmIChQeUFy
Z19QYXJzZVR1cGxlKGFyZ3MsICJPfE8iLCAma2V5LCAmZGVmYXVsdF92YWx1ZSkgPCAwKSB7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBTY29wZWRQeU9iamVjdFB0ciBpc19wcmVzZW50KE1h
cFJlZmxlY3Rpb25GcmllbmQ6OkNvbnRhaW5zKHNlbGYsIGtleSkpOwotICBpZiAoaXNfcHJlc2Vu
dC5nZXQoKSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoUHlPYmpl
Y3RfSXNUcnVlKGlzX3ByZXNlbnQuZ2V0KCkpKSB7Ci0gICAgcmV0dXJuIE1hcFJlZmxlY3Rpb25G
cmllbmQ6OlNjYWxhck1hcEdldEl0ZW0oc2VsZiwga2V5KTsKLSAgfSBlbHNlIHsKLSAgICBpZiAo
ZGVmYXVsdF92YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7
Ci0gICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAgUHlfUkVU
VVJOX05PTkU7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIFNjYWxhck1hcERlYWxsb2Mo
UHlPYmplY3QqIF9zZWxmKSB7Ci0gIE1hcENvbnRhaW5lciogc2VsZiA9IEdldE1hcChfc2VsZik7
Ci0gIHNlbGYtPm93bmVyLnJlc2V0KCk7Ci0gIFB5X1RZUEUoX3NlbGYpLT50cF9mcmVlKF9zZWxm
KTsKLX0KLQotc3RhdGljIFB5TWV0aG9kRGVmIFNjYWxhck1hcE1ldGhvZHNbXSA9IHsKLSAgeyAi
X19jb250YWluc19fIiwgTWFwUmVmbGVjdGlvbkZyaWVuZDo6Q29udGFpbnMsIE1FVEhfTywKLSAg
ICAiVGVzdHMgd2hldGhlciBhIGtleSBpcyBhIG1lbWJlciBvZiB0aGUgbWFwLiIgfSwKLSAgeyAi
Y2xlYXIiLCAoUHlDRnVuY3Rpb24pQ2xlYXIsIE1FVEhfTk9BUkdTLAotICAgICJSZW1vdmVzIGFs
bCBlbGVtZW50cyBmcm9tIHRoZSBtYXAuIiB9LAotICB7ICJnZXQiLCBTY2FsYXJNYXBHZXQsIE1F
VEhfVkFSQVJHUywKLSAgICAiR2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBrZXkgaWYgcHJl
c2VudCwgb3Igb3RoZXJ3aXNlIGEgZGVmYXVsdCIgfSwKLSAgLyoKLSAgeyAiX19kZWVwY29weV9f
IiwgKFB5Q0Z1bmN0aW9uKURlZXBDb3B5LCBNRVRIX1ZBUkFSR1MsCi0gICAgIk1ha2VzIGEgZGVl
cCBjb3B5IG9mIHRoZSBjbGFzcy4iIH0sCi0gIHsgIl9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24p
UmVkdWNlLCBNRVRIX05PQVJHUywKLSAgICAiT3V0cHV0cyBwaWNrbGFibGUgcmVwcmVzZW50YXRp
b24gb2YgdGhlIHJlcGVhdGVkIGZpZWxkLiIgfSwKLSAgKi8KLSAge05VTEwsIE5VTEx9LAotfTsK
LQotI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotICBzdGF0aWMgUHlUeXBlX1Nsb3QgU2NhbGFy
TWFwQ29udGFpbmVyX1R5cGVfc2xvdHNbXSA9IHsKLSAgICAgIHtQeV90cF9kZWFsbG9jLCAodm9p
ZCAqKVNjYWxhck1hcERlYWxsb2N9LAotICAgICAge1B5X21wX2xlbmd0aCwgKHZvaWQgKilNYXBS
ZWZsZWN0aW9uRnJpZW5kOjpMZW5ndGh9LAotICAgICAge1B5X21wX3N1YnNjcmlwdCwgKHZvaWQg
KilNYXBSZWZsZWN0aW9uRnJpZW5kOjpTY2FsYXJNYXBHZXRJdGVtfSwKLSAgICAgIHtQeV9tcF9h
c3Nfc3Vic2NyaXB0LCAodm9pZCAqKU1hcFJlZmxlY3Rpb25GcmllbmQ6OlNjYWxhck1hcFNldEl0
ZW19LAotICAgICAge1B5X3RwX21ldGhvZHMsICh2b2lkICopU2NhbGFyTWFwTWV0aG9kc30sCi0g
ICAgICB7UHlfdHBfaXRlciwgKHZvaWQgKilNYXBSZWZsZWN0aW9uRnJpZW5kOjpHZXRJdGVyYXRv
cn0sCi0gICAgICB7MCwgMH0sCi0gIH07Ci0KLSAgUHlUeXBlX1NwZWMgU2NhbGFyTWFwQ29udGFp
bmVyX1R5cGVfc3BlYyA9IHsKLSAgICAgIEZVTExfTU9EVUxFX05BTUUgIi5TY2FsYXJNYXBDb250
YWluZXIiLAotICAgICAgc2l6ZW9mKE1hcENvbnRhaW5lciksCi0gICAgICAwLAotICAgICAgUHlf
VFBGTEFHU19ERUZBVUxULAotICAgICAgU2NhbGFyTWFwQ29udGFpbmVyX1R5cGVfc2xvdHMKLSAg
fTsKLSAgUHlPYmplY3QgKlNjYWxhck1hcENvbnRhaW5lcl9UeXBlOwotI2Vsc2UKLSAgc3RhdGlj
IFB5TWFwcGluZ01ldGhvZHMgU2NhbGFyTWFwTWFwcGluZ01ldGhvZHMgPSB7Ci0gICAgTWFwUmVm
bGVjdGlvbkZyaWVuZDo6TGVuZ3RoLCAgICAgICAgICAgICAvLyBtcF9sZW5ndGgKLSAgICBNYXBS
ZWZsZWN0aW9uRnJpZW5kOjpTY2FsYXJNYXBHZXRJdGVtLCAgIC8vIG1wX3N1YnNjcmlwdAotICAg
IE1hcFJlZmxlY3Rpb25GcmllbmQ6OlNjYWxhck1hcFNldEl0ZW0sICAgLy8gbXBfYXNzX3N1YnNj
cmlwdAotICB9OwotCi0gIFB5VHlwZU9iamVjdCBTY2FsYXJNYXBDb250YWluZXJfVHlwZSA9IHsK
LSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICAgIEZVTExfTU9E
VUxFX05BTUUgIi5TY2FsYXJNYXBDb250YWluZXIiLCAgLy8gIHRwX25hbWUKLSAgICBzaXplb2Yo
TWFwQ29udGFpbmVyKSwgICAgICAgICAgICAgICAgLy8gIHRwX2Jhc2ljc2l6ZQotICAgIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaXRlbXNpemUKLSAgICBTY2Fs
YXJNYXBEZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2RlYWxsb2MKLSAgICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX3ByaW50Ci0gICAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9nZXRhdHRyCi0gICAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9zZXRhdHRyCi0gICAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9jb21wYXJlCi0gICAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9yZXByCi0gICAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9hc19udW1iZXIKLSAgICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2FzX3NlcXVlbmNlCi0gICAgJlNj
YWxhck1hcE1hcHBpbmdNZXRob2RzLCAgICAgICAgICAgIC8vICB0cF9hc19tYXBwaW5nCi0gICAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9oYXNoCi0gICAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9jYWxsCi0gICAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9zdHIKLSAgICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2dldGF0dHJvCi0gICAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9zZXRhdHRybwotICAgIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfYXNfYnVmZmVyCi0gICAgUHlfVFBG
TEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgIC8vICB0cF9mbGFncwotICAgICJBIHNjYWxh
ciBtYXAgY29udGFpbmVyIiwgICAgICAgICAgICAvLyAgdHBfZG9jCi0gICAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF90cmF2ZXJzZQotICAgIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfY2xlYXIKLSAgICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX3JpY2hjb21wYXJlCi0gICAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF93ZWFrbGlzdG9mZnNldAotICAgIE1h
cFJlZmxlY3Rpb25GcmllbmQ6OkdldEl0ZXJhdG9yLCAgICAvLyAgdHBfaXRlcgotICAgIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaXRlcm5leHQKLSAgICBTY2Fs
YXJNYXBNZXRob2RzLCAgICAgICAgICAgICAgICAgICAgLy8gIHRwX21ldGhvZHMKLSAgICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX21lbWJlcnMKLSAgICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2dldHNldAotICAgIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfYmFzZQotICAgIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfZGljdAotICAgIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfZGVzY3JfZ2V0Ci0gICAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9kZXNjcl9zZXQKLSAgICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2RpY3RvZmZzZXQKLSAgICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2luaXQKLSAgfTsKLSNlbmRp
ZgotCi0KLS8vIE1lc3NhZ2VNYXAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLXN0YXRpYyBNZXNzYWdlTWFwQ29udGFp
bmVyKiBHZXRNZXNzYWdlTWFwKFB5T2JqZWN0KiBvYmopIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8TWVzc2FnZU1hcENvbnRhaW5lcio+KG9iaik7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCog
R2V0Q01lc3NhZ2UoTWVzc2FnZU1hcENvbnRhaW5lciogc2VsZiwgTWVzc2FnZSogbWVzc2FnZSkg
ewotICAvLyBHZXQgb3IgY3JlYXRlIHRoZSBDTWVzc2FnZSBvYmplY3QgY29ycmVzcG9uZGluZyB0
byB0aGlzIG1lc3NhZ2UuCi0gIFNjb3BlZFB5T2JqZWN0UHRyIGtleShQeUxvbmdfRnJvbVZvaWRQ
dHIobWVzc2FnZSkpOwotICBQeU9iamVjdCogcmV0ID0gUHlEaWN0X0dldEl0ZW0oc2VsZi0+bWVz
c2FnZV9kaWN0LCBrZXkuZ2V0KCkpOwotCi0gIGlmIChyZXQgPT0gTlVMTCkgewotICAgIENNZXNz
YWdlKiBjbXNnID0gY21lc3NhZ2U6Ok5ld0VtcHR5TWVzc2FnZShzZWxmLT5tZXNzYWdlX2NsYXNz
KTsKLSAgICByZXQgPSByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oY21zZyk7Ci0KLSAgICBp
ZiAoY21zZyA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgY21zZy0+
b3duZXIgPSBzZWxmLT5vd25lcjsKLSAgICBjbXNnLT5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBj
bXNnLT5wYXJlbnQgPSBzZWxmLT5wYXJlbnQ7Ci0KLSAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2Vs
Zi0+bWVzc2FnZV9kaWN0LCBrZXkuZ2V0KCksIHJldCkgPCAwKSB7Ci0gICAgICBQeV9ERUNSRUYo
cmV0KTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBQeV9JTkNS
RUYocmV0KTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLVB5T2JqZWN0KiBOZXdNZXNzYWdl
TWFwQ29udGFpbmVyKAotICAgIENNZXNzYWdlKiBwYXJlbnQsIGNvbnN0IGdvb2dsZTo6cHJvdG9i
dWY6OkZpZWxkRGVzY3JpcHRvciogcGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3IsCi0gICAgQ01lc3Nh
Z2VDbGFzcyogbWVzc2FnZV9jbGFzcykgewotICBpZiAoIUNoZWNrRmllbGRCZWxvbmdzVG9NZXNz
YWdlKHBhcmVudF9maWVsZF9kZXNjcmlwdG9yLCBwYXJlbnQtPm1lc3NhZ2UpKSB7Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0KLQotI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotICBQeU9iamVjdCog
b2JqID0gUHlUeXBlX0dlbmVyaWNBbGxvYygKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxQeVR5
cGVPYmplY3QgKj4oTWVzc2FnZU1hcENvbnRhaW5lcl9UeXBlKSwgMCk7Ci0jZWxzZQotICBQeU9i
amVjdCogb2JqID0gUHlUeXBlX0dlbmVyaWNBbGxvYygmTWVzc2FnZU1hcENvbnRhaW5lcl9UeXBl
LCAwKTsKLSNlbmRpZgotICBpZiAob2JqID09IE5VTEwpIHsKLSAgICByZXR1cm4gUHlFcnJfRm9y
bWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBu
b3QgYWxsb2NhdGUgbmV3IGNvbnRhaW5lci4iKTsKLSAgfQotCi0gIE1lc3NhZ2VNYXBDb250YWlu
ZXIqIHNlbGYgPSBHZXRNZXNzYWdlTWFwKG9iaik7Ci0KLSAgc2VsZi0+bWVzc2FnZSA9IHBhcmVu
dC0+bWVzc2FnZTsKLSAgc2VsZi0+cGFyZW50ID0gcGFyZW50OwotICBzZWxmLT5wYXJlbnRfZmll
bGRfZGVzY3JpcHRvciA9IHBhcmVudF9maWVsZF9kZXNjcmlwdG9yOwotICBzZWxmLT5vd25lciA9
IHBhcmVudC0+b3duZXI7Ci0gIHNlbGYtPnZlcnNpb24gPSAwOwotCi0gIHNlbGYtPmtleV9maWVs
ZF9kZXNjcmlwdG9yID0KLSAgICAgIHBhcmVudF9maWVsZF9kZXNjcmlwdG9yLT5tZXNzYWdlX3R5
cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgc2VsZi0+dmFsdWVfZmllbGRfZGVzY3Jp
cHRvciA9Ci0gICAgICBwYXJlbnRfZmllbGRfZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCktPkZp
bmRGaWVsZEJ5TmFtZSgidmFsdWUiKTsKLQotICBzZWxmLT5tZXNzYWdlX2RpY3QgPSBQeURpY3Rf
TmV3KCk7Ci0gIGlmIChzZWxmLT5tZXNzYWdlX2RpY3QgPT0gTlVMTCkgewotICAgIHJldHVybiBQ
eUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
IkNvdWxkIG5vdCBhbGxvY2F0ZSBtZXNzYWdlIGRpY3QuIik7Ci0gIH0KLQotICBQeV9JTkNSRUYo
bWVzc2FnZV9jbGFzcyk7Ci0gIHNlbGYtPm1lc3NhZ2VfY2xhc3MgPSBtZXNzYWdlX2NsYXNzOwot
Ci0gIGlmIChzZWxmLT5rZXlfZmllbGRfZGVzY3JpcHRvciA9PSBOVUxMIHx8Ci0gICAgICBzZWxm
LT52YWx1ZV9maWVsZF9kZXNjcmlwdG9yID09IE5VTEwpIHsKLSAgICBQeV9ERUNSRUYob2JqKTsK
LSAgICByZXR1cm4gUHlFcnJfRm9ybWF0KFB5RXhjX0tleUVycm9yLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIk1hcCBlbnRyeSBkZXNjcmlwdG9yIGRpZCBub3QgaGF2ZSBrZXkvdmFsdWUgZmll
bGRzIik7Ci0gIH0KLQotICByZXR1cm4gb2JqOwotfQotCi1pbnQgTWFwUmVmbGVjdGlvbkZyaWVu
ZDo6TWVzc2FnZU1hcFNldEl0ZW0oUHlPYmplY3QqIF9zZWxmLCBQeU9iamVjdCoga2V5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiB2KSB7Ci0g
IGlmICh2KSB7Ci0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAg
ICAgICAgICJEaXJlY3QgYXNzaWdubWVudCBvZiBzdWJtZXNzYWdlIG5vdCBhbGxvd2VkIik7Ci0g
ICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLy8gTm93IHdlIGtub3cgdGhhdCB0aGlzIGlzIGEgZGVs
ZXRlLCBub3QgYSBzZXQuCi0KLSAgTWVzc2FnZU1hcENvbnRhaW5lciogc2VsZiA9IEdldE1lc3Nh
Z2VNYXAoX3NlbGYpOwotICBNZXNzYWdlKiBtZXNzYWdlID0gc2VsZi0+R2V0TXV0YWJsZU1lc3Nh
Z2UoKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxl
Y3Rpb24oKTsKLSAgTWFwS2V5IG1hcF9rZXk7Ci0gIE1hcFZhbHVlUmVmIHZhbHVlOwotCi0gIHNl
bGYtPnZlcnNpb24rKzsKLQotICBpZiAoIVB5dGhvblRvTWFwS2V5KGtleSwgc2VsZi0+a2V5X2Zp
ZWxkX2Rlc2NyaXB0b3IsICZtYXBfa2V5KSkgewotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8v
IERlbGV0ZSBrZXkgZnJvbSBtYXAuCi0gIGlmIChyZWZsZWN0aW9uLT5EZWxldGVNYXBWYWx1ZSht
ZXNzYWdlLCBzZWxmLT5wYXJlbnRfZmllbGRfZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcF9rZXkpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0gZWxzZSB7Ci0g
ICAgUHlFcnJfRm9ybWF0KFB5RXhjX0tleUVycm9yLCAiS2V5IG5vdCBwcmVzZW50IGluIG1hcCIp
OwotICAgIHJldHVybiAtMTsKLSAgfQotfQotCi1QeU9iamVjdCogTWFwUmVmbGVjdGlvbkZyaWVu
ZDo6TWVzc2FnZU1hcEdldEl0ZW0oUHlPYmplY3QqIF9zZWxmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBrZXkpIHsKLSAgTWVzc2Fn
ZU1hcENvbnRhaW5lciogc2VsZiA9IEdldE1lc3NhZ2VNYXAoX3NlbGYpOwotCi0gIE1lc3NhZ2Uq
IG1lc3NhZ2UgPSBzZWxmLT5HZXRNdXRhYmxlTWVzc2FnZSgpOwotICBjb25zdCBSZWZsZWN0aW9u
KiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotICBNYXBLZXkgbWFwX2tl
eTsKLSAgTWFwVmFsdWVSZWYgdmFsdWU7Ci0KLSAgaWYgKCFQeXRob25Ub01hcEtleShrZXksIHNl
bGYtPmtleV9maWVsZF9kZXNjcmlwdG9yLCAmbWFwX2tleSkpIHsKLSAgICByZXR1cm4gTlVMTDsK
LSAgfQotCi0gIGlmIChyZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1hcFZhbHVlKG1lc3NhZ2Us
IHNlbGYtPnBhcmVudF9maWVsZF9kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXBfa2V5LCAmdmFsdWUpKSB7Ci0gICAgc2VsZi0+dmVyc2lvbisr
OwotICB9Ci0KLSAgcmV0dXJuIEdldENNZXNzYWdlKHNlbGYsIHZhbHVlLk11dGFibGVNZXNzYWdl
VmFsdWUoKSk7Ci19Ci0KLVB5T2JqZWN0KiBNZXNzYWdlTWFwR2V0KFB5T2JqZWN0KiBzZWxmLCBQ
eU9iamVjdCogYXJncykgewotICBQeU9iamVjdCoga2V5OwotICBQeU9iamVjdCogZGVmYXVsdF92
YWx1ZSA9IE5VTEw7Ci0gIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfE8iLCAma2V5LCAm
ZGVmYXVsdF92YWx1ZSkgPCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBTY29wZWRQ
eU9iamVjdFB0ciBpc19wcmVzZW50KE1hcFJlZmxlY3Rpb25GcmllbmQ6OkNvbnRhaW5zKHNlbGYs
IGtleSkpOwotICBpZiAoaXNfcHJlc2VudC5nZXQoKSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0KLQotICBpZiAoUHlPYmplY3RfSXNUcnVlKGlzX3ByZXNlbnQuZ2V0KCkpKSB7Ci0g
ICAgcmV0dXJuIE1hcFJlZmxlY3Rpb25GcmllbmQ6Ok1lc3NhZ2VNYXBHZXRJdGVtKHNlbGYsIGtl
eSk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGRlZmF1bHRfdmFsdWUgIT0gTlVMTCkgewotICAgICAg
UHlfSU5DUkVGKGRlZmF1bHRfdmFsdWUpOwotICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIFB5X1JFVFVSTl9OT05FOwotICAgIH0KLSAgfQotfQotCi1zdGF0
aWMgdm9pZCBNZXNzYWdlTWFwRGVhbGxvYyhQeU9iamVjdCogX3NlbGYpIHsKLSAgTWVzc2FnZU1h
cENvbnRhaW5lciogc2VsZiA9IEdldE1lc3NhZ2VNYXAoX3NlbGYpOwotICBzZWxmLT5vd25lci5y
ZXNldCgpOwotICBQeV9ERUNSRUYoc2VsZi0+bWVzc2FnZV9kaWN0KTsKLSAgUHlfREVDUkVGKHNl
bGYtPm1lc3NhZ2VfY2xhc3MpOwotICBQeV9UWVBFKF9zZWxmKS0+dHBfZnJlZShfc2VsZik7Ci19
Ci0KLXN0YXRpYyBQeU1ldGhvZERlZiBNZXNzYWdlTWFwTWV0aG9kc1tdID0gewotICB7ICJfX2Nv
bnRhaW5zX18iLCAoUHlDRnVuY3Rpb24pTWFwUmVmbGVjdGlvbkZyaWVuZDo6Q29udGFpbnMsIE1F
VEhfTywKLSAgICAiVGVzdHMgd2hldGhlciB0aGUgbWFwIGNvbnRhaW5zIHRoaXMgZWxlbWVudC4i
fSwKLSAgeyAiY2xlYXIiLCAoUHlDRnVuY3Rpb24pQ2xlYXIsIE1FVEhfTk9BUkdTLAotICAgICJS
ZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIHRoZSBtYXAuIn0sCi0gIHsgImdldCIsIE1lc3NhZ2VN
YXBHZXQsIE1FVEhfVkFSQVJHUywKLSAgICAiR2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBr
ZXkgaWYgcHJlc2VudCwgb3Igb3RoZXJ3aXNlIGEgZGVmYXVsdCIgfSwKLSAgeyAiZ2V0X29yX2Ny
ZWF0ZSIsIE1hcFJlZmxlY3Rpb25GcmllbmQ6Ok1lc3NhZ2VNYXBHZXRJdGVtLCBNRVRIX08sCi0g
ICAgIkFsaWFzIGZvciBnZXRpdGVtLCB1c2VmdWwgdG8gbWFrZSBleHBsaWNpdCB0aGF0IHRoZSBt
YXAgaXMgbXV0YXRlZC4iIH0sCi0gIC8qCi0gIHsgIl9fZGVlcGNvcHlfXyIsIChQeUNGdW5jdGlv
bilEZWVwQ29weSwgTUVUSF9WQVJBUkdTLAotICAgICJNYWtlcyBhIGRlZXAgY29weSBvZiB0aGUg
Y2xhc3MuIiB9LAotICB7ICJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKVJlZHVjZSwgTUVUSF9O
T0FSR1MsCi0gICAgIk91dHB1dHMgcGlja2xhYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXBl
YXRlZCBmaWVsZC4iIH0sCi0gICovCi0gIHtOVUxMLCBOVUxMfSwKLX07Ci0KLSNpZiBQWV9NQUpP
Ul9WRVJTSU9OID49IDMKLSAgc3RhdGljIFB5VHlwZV9TbG90IE1lc3NhZ2VNYXBDb250YWluZXJf
VHlwZV9zbG90c1tdID0gewotICAgICAge1B5X3RwX2RlYWxsb2MsICh2b2lkICopTWVzc2FnZU1h
cERlYWxsb2N9LAotICAgICAge1B5X21wX2xlbmd0aCwgKHZvaWQgKilNYXBSZWZsZWN0aW9uRnJp
ZW5kOjpMZW5ndGh9LAotICAgICAge1B5X21wX3N1YnNjcmlwdCwgKHZvaWQgKilNYXBSZWZsZWN0
aW9uRnJpZW5kOjpNZXNzYWdlTWFwR2V0SXRlbX0sCi0gICAgICB7UHlfbXBfYXNzX3N1YnNjcmlw
dCwgKHZvaWQgKilNYXBSZWZsZWN0aW9uRnJpZW5kOjpNZXNzYWdlTWFwU2V0SXRlbX0sCi0gICAg
ICB7UHlfdHBfbWV0aG9kcywgKHZvaWQgKilNZXNzYWdlTWFwTWV0aG9kc30sCi0gICAgICB7UHlf
dHBfaXRlciwgKHZvaWQgKilNYXBSZWZsZWN0aW9uRnJpZW5kOjpHZXRJdGVyYXRvcn0sCi0gICAg
ICB7MCwgMH0KLSAgfTsKLQotICBQeVR5cGVfU3BlYyBNZXNzYWdlTWFwQ29udGFpbmVyX1R5cGVf
c3BlYyA9IHsKLSAgICAgIEZVTExfTU9EVUxFX05BTUUgIi5NZXNzYWdlTWFwQ29udGFpbmVyIiwK
LSAgICAgIHNpemVvZihNZXNzYWdlTWFwQ29udGFpbmVyKSwKLSAgICAgIDAsCi0gICAgICBQeV9U
UEZMQUdTX0RFRkFVTFQsCi0gICAgICBNZXNzYWdlTWFwQ29udGFpbmVyX1R5cGVfc2xvdHMKLSAg
fTsKLQotICBQeU9iamVjdCAqTWVzc2FnZU1hcENvbnRhaW5lcl9UeXBlOwotI2Vsc2UKLSAgc3Rh
dGljIFB5TWFwcGluZ01ldGhvZHMgTWVzc2FnZU1hcE1hcHBpbmdNZXRob2RzID0gewotICAgIE1h
cFJlZmxlY3Rpb25GcmllbmQ6Okxlbmd0aCwgICAgICAgICAgICAgIC8vIG1wX2xlbmd0aAotICAg
IE1hcFJlZmxlY3Rpb25GcmllbmQ6Ok1lc3NhZ2VNYXBHZXRJdGVtLCAgIC8vIG1wX3N1YnNjcmlw
dAotICAgIE1hcFJlZmxlY3Rpb25GcmllbmQ6Ok1lc3NhZ2VNYXBTZXRJdGVtLCAgIC8vIG1wX2Fz
c19zdWJzY3JpcHQKLSAgfTsKLQotICBQeVR5cGVPYmplY3QgTWVzc2FnZU1hcENvbnRhaW5lcl9U
eXBlID0gewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCi0gICAg
RlVMTF9NT0RVTEVfTkFNRSAiLk1lc3NhZ2VNYXBDb250YWluZXIiLCAgLy8gIHRwX25hbWUKLSAg
ICBzaXplb2YoTWVzc2FnZU1hcENvbnRhaW5lciksICAgICAgICAgLy8gIHRwX2Jhc2ljc2l6ZQot
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaXRlbXNpemUK
LSAgICBNZXNzYWdlTWFwRGVhbGxvYywgICAgICAgICAgICAgICAgICAgLy8gIHRwX2RlYWxsb2MK
LSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX3ByaW50Ci0g
ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9nZXRhdHRyCi0g
ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9zZXRhdHRyCi0g
ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9jb21wYXJlCi0g
ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9yZXByCi0gICAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9hc19udW1iZXIKLSAg
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2FzX3NlcXVlbmNl
Ci0gICAgJk1lc3NhZ2VNYXBNYXBwaW5nTWV0aG9kcywgICAgICAgICAgIC8vICB0cF9hc19tYXBw
aW5nCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9oYXNo
Ci0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9jYWxsCi0g
ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9zdHIKLSAgICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2dldGF0dHJvCi0gICAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9zZXRhdHRybwotICAg
IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfYXNfYnVmZmVyCi0g
ICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgIC8vICB0cF9mbGFncwotICAg
ICJBIG1hcCBjb250YWluZXIgZm9yIG1lc3NhZ2UiLCAgICAgICAvLyAgdHBfZG9jCi0gICAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF90cmF2ZXJzZQotICAgIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfY2xlYXIKLSAgICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX3JpY2hjb21wYXJlCi0gICAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF93ZWFrbGlzdG9mZnNl
dAotICAgIE1hcFJlZmxlY3Rpb25GcmllbmQ6OkdldEl0ZXJhdG9yLCAgICAvLyAgdHBfaXRlcgot
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaXRlcm5leHQK
LSAgICBNZXNzYWdlTWFwTWV0aG9kcywgICAgICAgICAgICAgICAgICAgLy8gIHRwX21ldGhvZHMK
LSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX21lbWJlcnMK
LSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2dldHNldAot
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfYmFzZQotICAg
IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfZGljdAotICAgIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfZGVzY3JfZ2V0Ci0gICAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9kZXNjcl9zZXQKLSAg
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2RpY3RvZmZzZXQK
LSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2luaXQKLSAg
fTsKLSNlbmRpZgotCi0vLyBNYXBJdGVyYXRvciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1zdGF0aWMgTWFwSXRlcmF0
b3IqIEdldEl0ZXIoUHlPYmplY3QqIG9iaikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxN
YXBJdGVyYXRvcio+KG9iaik7Ci19Ci0KLVB5T2JqZWN0KiBNYXBSZWZsZWN0aW9uRnJpZW5kOjpH
ZXRJdGVyYXRvcihQeU9iamVjdCAqX3NlbGYpIHsKLSAgTWFwQ29udGFpbmVyKiBzZWxmID0gR2V0
TWFwKF9zZWxmKTsKLQotICBTY29wZWRQeU9iamVjdFB0ciBvYmooUHlUeXBlX0dlbmVyaWNBbGxv
YygmTWFwSXRlcmF0b3JfVHlwZSwgMCkpOwotICBpZiAob2JqID09IE5VTEwpIHsKLSAgICByZXR1
cm4gUHlFcnJfRm9ybWF0KFB5RXhjX0tleUVycm9yLCAiQ291bGQgbm90IGFsbG9jYXRlIGl0ZXJh
dG9yIik7Ci0gIH0KLQotICBNYXBJdGVyYXRvciogaXRlciA9IEdldEl0ZXIob2JqLmdldCgpKTsK
LQotICBQeV9JTkNSRUYoc2VsZik7Ci0gIGl0ZXItPmNvbnRhaW5lciA9IHNlbGY7Ci0gIGl0ZXIt
PnZlcnNpb24gPSBzZWxmLT52ZXJzaW9uOwotICBpdGVyLT5vd25lciA9IHNlbGYtPm93bmVyOwot
Ci0gIGlmIChNYXBSZWZsZWN0aW9uRnJpZW5kOjpMZW5ndGgoX3NlbGYpID4gMCkgewotICAgIE1l
c3NhZ2UqIG1lc3NhZ2UgPSBzZWxmLT5HZXRNdXRhYmxlTWVzc2FnZSgpOwotICAgIGNvbnN0IFJl
ZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgICBp
dGVyLT5pdGVyLnJlc2V0KG5ldyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1hcEl0ZXJhdG9yKAotICAg
ICAgICByZWZsZWN0aW9uLT5NYXBCZWdpbihtZXNzYWdlLCBzZWxmLT5wYXJlbnRfZmllbGRfZGVz
Y3JpcHRvcikpKTsKLSAgfQotCi0gIHJldHVybiBvYmoucmVsZWFzZSgpOwotfQotCi1QeU9iamVj
dCogTWFwUmVmbGVjdGlvbkZyaWVuZDo6SXRlck5leHQoUHlPYmplY3QqIF9zZWxmKSB7Ci0gIE1h
cEl0ZXJhdG9yKiBzZWxmID0gR2V0SXRlcihfc2VsZik7Ci0KLSAgLy8gVGhpcyB3b24ndCBjYXRj
aCBtdXRhdGlvbnMgdG8gdGhlIG1hcCBwZXJmb3JtZWQgYnkgTWVyZ2VGcm9tKCk7IG5vIGVhc3kg
d2F5Ci0gIC8vIHRvIGFkZHJlc3MgdGhhdC4KLSAgaWYgKHNlbGYtPnZlcnNpb24gIT0gc2VsZi0+
Y29udGFpbmVyLT52ZXJzaW9uKSB7Ci0gICAgcmV0dXJuIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50
aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiTWFwIG1vZGlmaWVkIGR1cmluZyBp
dGVyYXRpb24uIik7Ci0gIH0KLQotICBpZiAoc2VsZi0+aXRlci5nZXQoKSA9PSBOVUxMKSB7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBNZXNzYWdlKiBtZXNzYWdlID0gc2VsZi0+Y29udGFp
bmVyLT5HZXRNdXRhYmxlTWVzc2FnZSgpOwotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9u
ID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotCi0gIGlmICgqc2VsZi0+aXRlciA9PQotICAg
ICAgcmVmbGVjdGlvbi0+TWFwRW5kKG1lc3NhZ2UsIHNlbGYtPmNvbnRhaW5lci0+cGFyZW50X2Zp
ZWxkX2Rlc2NyaXB0b3IpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBQeU9iamVjdCog
cmV0ID0gTWFwS2V5VG9QeXRob24oc2VsZi0+Y29udGFpbmVyLT5rZXlfZmllbGRfZGVzY3JpcHRv
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPml0ZXItPkdldEtleSgp
KTsKLQotICArKygqc2VsZi0+aXRlcik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZv
aWQgRGVhbGxvY01hcEl0ZXJhdG9yKFB5T2JqZWN0KiBfc2VsZikgewotICBNYXBJdGVyYXRvciog
c2VsZiA9IEdldEl0ZXIoX3NlbGYpOwotICBzZWxmLT5pdGVyLnJlc2V0KCk7Ci0gIHNlbGYtPm93
bmVyLnJlc2V0KCk7Ci0gIFB5X1hERUNSRUYoc2VsZi0+Y29udGFpbmVyKTsKLSAgUHlfVFlQRShf
c2VsZiktPnRwX2ZyZWUoX3NlbGYpOwotfQotCi1QeVR5cGVPYmplY3QgTWFwSXRlcmF0b3JfVHlw
ZSA9IHsKLSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKLSAgRlVMTF9N
T0RVTEVfTkFNRSAiLk1hcEl0ZXJhdG9yIiwgICAgIC8vICB0cF9uYW1lCi0gIHNpemVvZihNYXBJ
dGVyYXRvciksICAgICAgICAgICAgICAgICAvLyAgdHBfYmFzaWNzaXplCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaXRlbXNpemUKLSAgRGVhbGxvY01hcEl0
ZXJhdG9yLCAgICAgICAgICAgICAgICAgIC8vICB0cF9kZWFsbG9jCi0gIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfcHJpbnQKLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICB0cF9nZXRhdHRyCi0gIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgdHBfc2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gIHRwX2NvbXBhcmUKLSAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICB0cF9yZXByCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgdHBfYXNfbnVtYmVyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgdHBfYXNfc2VxdWVuY2UKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICB0cF9hc19tYXBwaW5nCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgdHBfaGFzaAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gIHRwX2NhbGwKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vICB0cF9zdHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0
cF9nZXRhdHRybwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRw
X3NldGF0dHJvCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBf
YXNfYnVmZmVyCi0gIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAvLyAgdHBf
ZmxhZ3MKLSAgIkEgc2NhbGFyIG1hcCBpdGVyYXRvciIsICAgICAgICAgICAgIC8vICB0cF9kb2MK
LSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF90cmF2ZXJzZQot
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2NsZWFyCi0gIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfcmljaGNvbXBhcmUKLSAg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF93ZWFrbGlzdG9mZnNl
dAotICBQeU9iamVjdF9TZWxmSXRlciwgICAgICAgICAgICAgICAgICAgLy8gIHRwX2l0ZXIKLSAg
TWFwUmVmbGVjdGlvbkZyaWVuZDo6SXRlck5leHQsICAgICAgIC8vICB0cF9pdGVybmV4dAotICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX21ldGhvZHMKLSAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9tZW1iZXJzCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfZ2V0c2V0Ci0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfYmFzZQotICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2RpY3QKLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICB0cF9kZXNjcl9nZXQKLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICB0cF9kZXNjcl9zZXQKLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICB0cF9kaWN0b2Zmc2V0Ci0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaW5pdAotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHB5
dGhvbgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvbWFwX2NvbnRhaW5lci5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9w
eXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L21hcF9jb250YWluZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZmJkNjcxM2Y3MzE5ZGE3M2U3YzQ1ZTc5Yzc5NDBmMDBiYjg5NTI2
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9n
b29nbGUvcHJvdG9idWYvcHlleHQvbWFwX2NvbnRhaW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTQyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVm
IEdPT0dMRV9QUk9UT0JVRl9QWVRIT05fQ1BQX01BUF9DT05UQUlORVJfSF9fCi0jZGVmaW5lIEdP
T0dMRV9QUk9UT0JVRl9QWVRIT05fQ1BQX01BUF9DT05UQUlORVJfSF9fCi0KLSNpbmNsdWRlIDxQ
eXRob24uaD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL21lc3NhZ2UuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9i
dWYgewotCi1jbGFzcyBNZXNzYWdlOwotCi0jaWZkZWYgX1NIQVJFRF9QVFJfSAotdXNpbmcgc3Rk
OjpzaGFyZWRfcHRyOwotI2Vsc2UKLXVzaW5nIGludGVybmFsOjpzaGFyZWRfcHRyOwotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBweXRob24gewotCi1zdHJ1Y3QgQ01lc3NhZ2U7Ci1zdHJ1Y3QgQ01lc3Nh
Z2VDbGFzczsKLQotLy8gVGhpcyBzdHJ1Y3QgaXMgdXNlZCBkaXJlY3RseSBmb3IgU2NhbGFyTWFw
LCBhbmQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YKLS8vIE1lc3NhZ2VNYXBDb250YWluZXIsIHdoaWNo
IGlzIHVzZWQgZm9yIE1lc3NhZ2VNYXAuCi1zdHJ1Y3QgTWFwQ29udGFpbmVyIHsKLSAgUHlPYmpl
Y3RfSEVBRDsKLQotICAvLyBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgQysrIE1lc3NhZ2Ugb2JqZWN0
IHRoYXQgb3ducyB0aGUgd2hvbGUKLSAgLy8gcHJvdG8gdHJlZS4gIEV2ZXJ5IFB5dGhvbiBNYXBD
b250YWluZXIgaG9sZHMgYQotICAvLyByZWZlcmVuY2UgdG8gaXQgaW4gb3JkZXIgdG8ga2VlcCBp
dCBhbGl2ZSBhcyBsb25nIGFzIHRoZXJlJ3MgYQotICAvLyBQeXRob24gb2JqZWN0IHRoYXQgcmVm
ZXJlbmNlcyBhbnkgcGFydCBvZiB0aGUgdHJlZS4KLSAgc2hhcmVkX3B0cjxNZXNzYWdlPiBvd25l
cjsKLQotICAvLyBQb2ludGVyIHRvIHRoZSBDKysgTWVzc2FnZSB0aGF0IGNvbnRhaW5zIHRoaXMg
Y29udGFpbmVyLiAgVGhlCi0gIC8vIE1hcENvbnRhaW5lciBkb2VzIG5vdCBvd24gdGhpcyBwb2lu
dGVyLgotICBjb25zdCBNZXNzYWdlKiBtZXNzYWdlOwotCi0gIC8vIFVzZSB0byBnZXQgYSBtdXRh
YmxlIG1lc3NhZ2Ugd2hlbiBuZWNlc3NhcnkuCi0gIE1lc3NhZ2UqIEdldE11dGFibGVNZXNzYWdl
KCk7Ci0KLSAgLy8gV2VhayByZWZlcmVuY2UgdG8gYSBwYXJlbnQgQ01lc3NhZ2Ugb2JqZWN0IChp
LmUuIG1heSBiZSBOVUxMLikKLSAgLy8KLSAgLy8gVXNlZCB0byBtYWtlIHN1cmUgYWxsIGFuY2Vz
dG9ycyBhcmUgYWxzbyBtdXRhYmxlIHdoZW4gZmlyc3QKLSAgLy8gbW9kaWZ5aW5nIHRoZSBjb250
YWluZXIuCi0gIENNZXNzYWdlKiBwYXJlbnQ7Ci0KLSAgLy8gUG9pbnRlciB0byB0aGUgcGFyZW50
J3MgZGVzY3JpcHRvciB0aGF0IGRlc2NyaWJlcyB0aGlzCi0gIC8vIGZpZWxkLiAgVXNlZCB0b2dl
dGhlciB3aXRoIHRoZSBwYXJlbnQncyBtZXNzYWdlIHdoZW4gbWFraW5nIGEKLSAgLy8gZGVmYXVs
dCBtZXNzYWdlIGluc3RhbmNlIG11dGFibGUuCi0gIC8vIFRoZSBwb2ludGVyIGlzIG93bmVkIGJ5
IHRoZSBnbG9iYWwgRGVzY3JpcHRvclBvb2wuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogcGFy
ZW50X2ZpZWxkX2Rlc2NyaXB0b3I7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioga2V5X2ZpZWxk
X2Rlc2NyaXB0b3I7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdmFsdWVfZmllbGRfZGVzY3Jp
cHRvcjsKLQotICAvLyBXZSBidW1wIHRoaXMgd2hlbmV2ZXIgd2UgcGVyZm9ybSBhIG11dGF0aW9u
LCB0byBpbnZhbGlkYXRlIGV4aXN0aW5nCi0gIC8vIGl0ZXJhdG9ycy4KLSAgdWludDY0IHZlcnNp
b247Ci0KLSAgLy8gUmVsZWFzZXMgdGhlIG1lc3NhZ2VzIGluIHRoZSBjb250YWluZXIgdG8gYSBu
ZXcgbWVzc2FnZS4KLSAgLy8KLSAgLy8gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1
cmUuCi0gIGludCBSZWxlYXNlKCk7Ci0KLSAgLy8gU2V0IHRoZSBvd25lciBmaWVsZCBvZiBzZWxm
IGFuZCBhbnkgY2hpbGRyZW4gb2Ygc2VsZi4KLSAgdm9pZCBTZXRPd25lcihjb25zdCBzaGFyZWRf
cHRyPE1lc3NhZ2U+JiBuZXdfb3duZXIpIHsKLSAgICBvd25lciA9IG5ld19vd25lcjsKLSAgfQot
fTsKLQotc3RydWN0IE1lc3NhZ2VNYXBDb250YWluZXIgOiBwdWJsaWMgTWFwQ29udGFpbmVyIHsK
LSAgLy8gVGhlIHR5cGUgdXNlZCB0byBjcmVhdGUgbmV3IGNoaWxkIG1lc3NhZ2VzLgotICBDTWVz
c2FnZUNsYXNzKiBtZXNzYWdlX2NsYXNzOwotCi0gIC8vIEEgZGljdCBtYXBwaW5nIE1lc3NhZ2Uq
IC0+IENNZXNzYWdlLgotICBQeU9iamVjdCogbWVzc2FnZV9kaWN0OwotfTsKLQotI2lmIFBZX01B
Sk9SX1ZFUlNJT04gPj0gMwotICBleHRlcm4gUHlPYmplY3QgKk1lc3NhZ2VNYXBDb250YWluZXJf
VHlwZTsKLSAgZXh0ZXJuIFB5VHlwZV9TcGVjIE1lc3NhZ2VNYXBDb250YWluZXJfVHlwZV9zcGVj
OwotICBleHRlcm4gUHlPYmplY3QgKlNjYWxhck1hcENvbnRhaW5lcl9UeXBlOwotICBleHRlcm4g
UHlUeXBlX1NwZWMgU2NhbGFyTWFwQ29udGFpbmVyX1R5cGVfc3BlYzsKLSNlbHNlCi0gIGV4dGVy
biBQeVR5cGVPYmplY3QgTWVzc2FnZU1hcENvbnRhaW5lcl9UeXBlOwotICBleHRlcm4gUHlUeXBl
T2JqZWN0IFNjYWxhck1hcENvbnRhaW5lcl9UeXBlOwotI2VuZGlmCi0KLWV4dGVybiBQeVR5cGVP
YmplY3QgTWFwSXRlcmF0b3JfVHlwZTsgIC8vIEJvdGggbWFwIHR5cGVzIHVzZSB0aGUgc2FtZSBp
dGVyYXRvci4KLQotLy8gQnVpbGRzIGEgTWFwQ29udGFpbmVyIG9iamVjdCwgZnJvbSBhIHBhcmVu
dCBtZXNzYWdlIGFuZCBhCi0vLyBmaWVsZCBkZXNjcmlwdG9yLgotZXh0ZXJuIFB5T2JqZWN0KiBO
ZXdTY2FsYXJNYXBDb250YWluZXIoCi0gICAgQ01lc3NhZ2UqIHBhcmVudCwgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBwYXJlbnRfZmllbGRfZGVzY3JpcHRvcik7Ci0KLS8vIEJ1aWxkcyBhIE1lc3Nh
Z2VNYXAgb2JqZWN0LCBmcm9tIGEgcGFyZW50IG1lc3NhZ2UgYW5kIGEKLS8vIGZpZWxkIGRlc2Ny
aXB0b3IuCi1leHRlcm4gUHlPYmplY3QqIE5ld01lc3NhZ2VNYXBDb250YWluZXIoCi0gICAgQ01l
c3NhZ2UqIHBhcmVudCwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBwYXJlbnRfZmllbGRfZGVzY3Jp
cHRvciwKLSAgICBDTWVzc2FnZUNsYXNzKiBtZXNzYWdlX2NsYXNzKTsKLQotfSAgLy8gbmFtZXNw
YWNlIHB5dGhvbgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1BZVEhPTl9DUFBfTUFQX0NPTlRBSU5F
Ul9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9tZXNzYWdlLmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L21lc3NhZ2UuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDgzYzE1MWZmNjI2YWFiYWIyODdlOGJmZTM5YjRiOGI4MGU5OTc5MWYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29v
Z2xlL3Byb3RvYnVmL3B5ZXh0L21lc3NhZ2UuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMTMzICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGFu
dXJhYWdAZ29vZ2xlLmNvbSAoQW51cmFhZyBBZ3Jhd2FsKQotLy8gQXV0aG9yOiB0aWJlbGxAZ29v
Z2xlLmNvbSAoSm9oYW4gVGliZWxsKQotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0
L21lc3NhZ2UuaD4KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVm
IF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0
ci5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNs
dWRlIDxzdHJ1Y3RtZW1iZXIuaD4gIC8vIEEgUHl0aG9uIGhlYWRlciBmaWxlLgotCi0jaWZuZGVm
IFB5VmFyT2JqZWN0X0hFQURfSU5JVAotI2RlZmluZSBQeVZhck9iamVjdF9IRUFEX0lOSVQodHlw
ZSwgc2l6ZSkgUHlPYmplY3RfSEVBRF9JTklUKHR5cGUpIHNpemUsCi0jZW5kaWYKLSNpZm5kZWYg
UHlfVFlQRQotI2RlZmluZSBQeV9UWVBFKG9iKSAoKChQeU9iamVjdCopKG9iKSktPm9iX3R5cGUp
Ci0jZW5kaWYKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9j
b2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9tZXNzYWdlX2Rp
ZmZlcmVuY2VyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi90ZXh0X2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bmtub3duX2Zp
ZWxkX3NldC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNjcmlwdG9yLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfcG9vbC5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9leHRlbnNpb25fZGljdC5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9weWV4dC9yZXBlYXRlZF9jb21wb3NpdGVfY29udGFpbmVyLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L3JlcGVhdGVkX3NjYWxhcl9jb250YWluZXIu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQvbWFwX2NvbnRhaW5lci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9zY29wZWRfcHlvYmplY3RfcHRyLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotI2lmIFBZX01BSk9SX1ZF
UlNJT04gPj0gMwotICAjZGVmaW5lIFB5SW50X0NoZWNrIFB5TG9uZ19DaGVjawotICAjZGVmaW5l
IFB5SW50X0FzTG9uZyBQeUxvbmdfQXNMb25nCi0gICNkZWZpbmUgUHlJbnRfRnJvbUxvbmcgUHlM
b25nX0Zyb21Mb25nCi0gICNkZWZpbmUgUHlJbnRfRnJvbVNpemVfdCBQeUxvbmdfRnJvbVNpemVf
dAotICAjZGVmaW5lIFB5U3RyaW5nX0NoZWNrIFB5VW5pY29kZV9DaGVjawotICAjZGVmaW5lIFB5
U3RyaW5nX0Zyb21TdHJpbmcgUHlVbmljb2RlX0Zyb21TdHJpbmcKLSAgI2RlZmluZSBQeVN0cmlu
Z19Gcm9tU3RyaW5nQW5kU2l6ZSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUKLSAgI2lmIFBZ
X1ZFUlNJT05fSEVYIDwgMHgwMzAzMDAwMAotICAgICNlcnJvciAiUHl0aG9uIDMuMCAtIDMuMiBh
cmUgbm90IHN1cHBvcnRlZC4iCi0gICNlbHNlCi0gICNkZWZpbmUgUHlTdHJpbmdfQXNTdHJpbmco
b2IpIFwKLSAgICAoUHlVbmljb2RlX0NoZWNrKG9iKT8gUHlVbmljb2RlX0FzVVRGOChvYik6IFB5
Qnl0ZXNfQXNTdHJpbmcob2IpKQotICAjZGVmaW5lIFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZShv
YiwgY2hhcnBwLCBzaXplcCkgXAotICAgIChQeVVuaWNvZGVfQ2hlY2sob2IpPyBcCi0gICAgICAg
KCgqKGNoYXJwcCkgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZShvYiwgKHNpemVwKSkpID09IE5V
TEw/IC0xOiAwKTogXAotICAgICAgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKG9iLCAoY2hhcnBw
KSwgKHNpemVwKSkpCi0gICNlbmRpZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFt
ZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBweXRob24gewotCi1zdGF0aWMgUHlPYmplY3Qq
IGtERVNDUklQVE9SOwotc3RhdGljIFB5T2JqZWN0KiBrX2V4dGVuc2lvbnNfYnlfbmFtZTsKLXN0
YXRpYyBQeU9iamVjdCoga19leHRlbnNpb25zX2J5X251bWJlcjsKLVB5T2JqZWN0KiBFbnVtVHlw
ZVdyYXBwZXJfY2xhc3M7Ci1zdGF0aWMgUHlPYmplY3QqIFB5dGhvbk1lc3NhZ2VfY2xhc3M7Ci1z
dGF0aWMgUHlPYmplY3QqIGtFbXB0eVdlYWtyZWY7Ci1zdGF0aWMgUHlPYmplY3QqIFdLVF9jbGFz
c2VzID0gTlVMTDsKLQotbmFtZXNwYWNlIG1lc3NhZ2VfbWV0YSB7Ci0KLXN0YXRpYyBpbnQgSW5z
ZXJ0RW1wdHlXZWFrcmVmKFB5VHlwZU9iamVjdCogYmFzZSk7Ci0KLS8vIEFkZCB0aGUgbnVtYmVy
IG9mIGEgZmllbGQgZGVzY3JpcHRvciB0byB0aGUgY29udGFpbmluZyBtZXNzYWdlIGNsYXNzLgot
Ly8gRXF1aXZhbGVudCB0bzoKLS8vICAgX2Nscy48ZmllbGQ+X0ZJRUxEX05VTUJFUiA9IDxudW1i
ZXI+Ci1zdGF0aWMgYm9vbCBBZGRGaWVsZE51bWJlclRvQ2xhc3MoCi0gICAgUHlPYmplY3QqIGNs
cywgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlwdG9yKSB7Ci0gIHN0cmluZyBj
b25zdGFudF9uYW1lID0gZmllbGRfZGVzY3JpcHRvci0+bmFtZSgpICsgIl9GSUVMRF9OVU1CRVIi
OwotICBVcHBlclN0cmluZygmY29uc3RhbnRfbmFtZSk7Ci0gIFNjb3BlZFB5T2JqZWN0UHRyIGF0
dHJfbmFtZShQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgKLSAgICAgIGNvbnN0YW50X25hbWUu
Y19zdHIoKSwgY29uc3RhbnRfbmFtZS5zaXplKCkpKTsKLSAgaWYgKGF0dHJfbmFtZSA9PSBOVUxM
KSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIFNjb3BlZFB5T2JqZWN0UHRyIG51bWJlcihQ
eUludF9Gcm9tTG9uZyhmaWVsZF9kZXNjcmlwdG9yLT5udW1iZXIoKSkpOwotICBpZiAobnVtYmVy
ID09IE5VTEwpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKFB5T2JqZWN0X1NldEF0
dHIoY2xzLCBhdHRyX25hbWUuZ2V0KCksIG51bWJlci5nZXQoKSkgPT0gLTEpIHsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLy8gRmluYWxpemUgdGhlIGNy
ZWF0aW9uIG9mIHRoZSBNZXNzYWdlIGNsYXNzLgotc3RhdGljIGludCBBZGREZXNjcmlwdG9ycyhQ
eU9iamVjdCogY2xzLCBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIC8vIElmIHRo
ZXJlIGFyZSBleHRlbnNpb25fcmFuZ2VzLCB0aGUgbWVzc2FnZSBpcyAiZXh0ZW5kYWJsZSIsIGFu
ZCBleHRlbnNpb24KLSAgLy8gY2xhc3NlcyB3aWxsIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgaW4gdGhp
cyBjbGFzcy4KLSAgaWYgKGRlc2NyaXB0b3ItPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgpID4gMCkg
ewotICAgIFNjb3BlZFB5T2JqZWN0UHRyIGJ5X25hbWUoUHlEaWN0X05ldygpKTsKLSAgICBpZiAo
UHlPYmplY3RfU2V0QXR0cihjbHMsIGtfZXh0ZW5zaW9uc19ieV9uYW1lLCBieV9uYW1lLmdldCgp
KSA8IDApIHsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgU2NvcGVkUHlPYmplY3RQdHIg
YnlfbnVtYmVyKFB5RGljdF9OZXcoKSk7Ci0gICAgaWYgKFB5T2JqZWN0X1NldEF0dHIoY2xzLCBr
X2V4dGVuc2lvbnNfYnlfbnVtYmVyLCBieV9udW1iZXIuZ2V0KCkpIDwgMCkgewotICAgICAgcmV0
dXJuIC0xOwotICAgIH0KLSAgfQotCi0gIC8vIEZvciBlYWNoIGZpZWxkIHNldDogY2xzLjxmaWVs
ZD5fRklFTERfTlVNQkVSID0gPG51bWJlcj4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlw
dG9yLT5maWVsZF9jb3VudCgpOyArK2kpIHsKLSAgICBpZiAoIUFkZEZpZWxkTnVtYmVyVG9DbGFz
cyhjbHMsIGRlc2NyaXB0b3ItPmZpZWxkKGkpKSkgewotICAgICAgcmV0dXJuIC0xOwotICAgIH0K
LSAgfQotCi0gIC8vIEZvciBlYWNoIGVudW0gc2V0IGNscy48ZW51bSBuYW1lPiA9IEVudW1UeXBl
V3JhcHBlcig8ZW51bSBkZXNjcmlwdG9yPikuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3Jp
cHRvci0+ZW51bV90eXBlX2NvdW50KCk7ICsraSkgewotICAgIGNvbnN0IEVudW1EZXNjcmlwdG9y
KiBlbnVtX2Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLT5lbnVtX3R5cGUoaSk7Ci0gICAgU2NvcGVk
UHlPYmplY3RQdHIgZW51bV90eXBlKAotICAgICAgICBQeUVudW1EZXNjcmlwdG9yX0Zyb21EZXNj
cmlwdG9yKGVudW1fZGVzY3JpcHRvcikpOwotICAgIGlmIChlbnVtX3R5cGUgPT0gTlVMTCkgewot
ICAgICAgcmV0dXJuIC0xOwotICAgICB9Ci0gICAgLy8gQWRkIHdyYXBwZWQgZW51bSB0eXBlIHRv
IG1lc3NhZ2UgY2xhc3MuCi0gICAgU2NvcGVkUHlPYmplY3RQdHIgd3JhcHBlZChQeU9iamVjdF9D
YWxsRnVuY3Rpb25PYmpBcmdzKAotICAgICAgICBFbnVtVHlwZVdyYXBwZXJfY2xhc3MsIGVudW1f
dHlwZS5nZXQoKSwgTlVMTCkpOwotICAgIGlmICh3cmFwcGVkID09IE5VTEwpIHsKLSAgICAgIHJl
dHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoCi0gICAgICAg
ICAgICBjbHMsIGVudW1fZGVzY3JpcHRvci0+bmFtZSgpLmNfc3RyKCksIHdyYXBwZWQuZ2V0KCkp
ID09IC0xKSB7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgLy8gRm9yIGVhY2ggZW51
bSB2YWx1ZSBhZGQgY2xzLjxuYW1lPiA9IDxudW1iZXI+Ci0gICAgZm9yIChpbnQgaiA9IDA7IGog
PCBlbnVtX2Rlc2NyaXB0b3ItPnZhbHVlX2NvdW50KCk7ICsraikgewotICAgICAgY29uc3QgRW51
bVZhbHVlRGVzY3JpcHRvciogZW51bV92YWx1ZV9kZXNjcmlwdG9yID0KLSAgICAgICAgICBlbnVt
X2Rlc2NyaXB0b3ItPnZhbHVlKGopOwotICAgICAgU2NvcGVkUHlPYmplY3RQdHIgdmFsdWVfbnVt
YmVyKFB5SW50X0Zyb21Mb25nKAotICAgICAgICAgIGVudW1fdmFsdWVfZGVzY3JpcHRvci0+bnVt
YmVyKCkpKTsKLSAgICAgIGlmICh2YWx1ZV9udW1iZXIgPT0gTlVMTCkgewotICAgICAgICByZXR1
cm4gLTE7Ci0gICAgICB9Ci0gICAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhjbHMsIGVu
dW1fdmFsdWVfZGVzY3JpcHRvci0+bmFtZSgpLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZV9udW1iZXIuZ2V0KCkpID09IC0xKSB7Ci0gICAgICAgIHJldHVy
biAtMTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBGb3IgZWFjaCBleHRlbnNpb24gc2V0
IGNscy48ZXh0ZW5zaW9uIG5hbWU+ID0gPGV4dGVuc2lvbiBkZXNjcmlwdG9yPi4KLSAgLy8KLSAg
Ly8gRXh0ZW5zaW9uIGRlc2NyaXB0b3JzIGNvbWUgZnJvbQotICAvLyA8bWVzc2FnZSBkZXNjcmlw
dG9yPi5leHRlbnNpb25zX2J5X25hbWVbbmFtZV0KLSAgLy8gd2hpY2ggd2FzIGRlZmluZWQgcHJl
dmlvdXNseS4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5leHRlbnNpb25fY291
bnQoKTsgKytpKSB7Ci0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9y
KiBmaWVsZCA9IGRlc2NyaXB0b3ItPmV4dGVuc2lvbihpKTsKLSAgICBTY29wZWRQeU9iamVjdFB0
ciBleHRlbnNpb25fZmllbGQoUHlGaWVsZERlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoZmllbGQp
KTsKLSAgICBpZiAoZXh0ZW5zaW9uX2ZpZWxkID09IE5VTEwpIHsKLSAgICAgIHJldHVybiAtMTsK
LSAgICB9Ci0KLSAgICAvLyBBZGQgdGhlIGV4dGVuc2lvbiBmaWVsZCB0byB0aGUgbWVzc2FnZSBj
bGFzcy4KLSAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZygKLSAgICAgICAgICAgIGNscywg
ZmllbGQtPm5hbWUoKS5jX3N0cigpLCBleHRlbnNpb25fZmllbGQuZ2V0KCkpID09IC0xKSB7Ci0g
ICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgLy8gRm9yIGVhY2ggZXh0ZW5zaW9uIHNldCBj
bHMuPGV4dGVuc2lvbiBuYW1lPl9GSUVMRF9OVU1CRVIgPSA8bnVtYmVyPi4KLSAgICBpZiAoIUFk
ZEZpZWxkTnVtYmVyVG9DbGFzcyhjbHMsIGZpZWxkKSkgewotICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLSAgfQotCi0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIE5ldyhQeVR5cGVP
YmplY3QqIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogYXJncywgUHlPYmpl
Y3QqIGt3YXJncykgewotICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im5hbWUiLCAiYmFzZXMi
LCAiZGljdCIsIDB9OwotICBQeU9iamVjdCAqYmFzZXMsICpkaWN0OwotICBjb25zdCBjaGFyKiBu
YW1lOwotCi0gIC8vIENoZWNrIGFyZ3VtZW50czogKG5hbWUsIGJhc2VzLCBkaWN0KQotICBpZiAo
IVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzTyFPITp0eXBlIiwg
a3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VHVwbGVfVHlwZSwgJmJhc2VzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlEaWN0X1R5cGUsICZkaWN0KSkgewot
ICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgLy8gQ2hlY2sgYmFzZXM6IG9ubHkgKCksIG9yICht
ZXNzYWdlLk1lc3NhZ2UsKSBhcmUgYWxsb3dlZAotICBpZiAoIShQeVR1cGxlX0dFVF9TSVpFKGJh
c2VzKSA9PSAwIHx8Ci0gICAgICAgIChQeVR1cGxlX0dFVF9TSVpFKGJhc2VzKSA9PSAxICYmCi0g
ICAgICAgICBQeVR1cGxlX0dFVF9JVEVNKGJhc2VzLCAwKSA9PSBQeXRob25NZXNzYWdlX2NsYXNz
KSkpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAg
ICAgICAgICAiQSBNZXNzYWdlIGNsYXNzIGNhbiBvbmx5IGluaGVyaXQgZnJvbSBNZXNzYWdlIik7
Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAvLyBDaGVjayBkaWN0WydERVNDUklQVE9SJ10K
LSAgUHlPYmplY3QqIHB5X2Rlc2NyaXB0b3IgPSBQeURpY3RfR2V0SXRlbShkaWN0LCBrREVTQ1JJ
UFRPUik7Ci0gIGlmIChweV9kZXNjcmlwdG9yID09IE5VTEwpIHsKLSAgICBQeUVycl9TZXRTdHJp
bmcoUHlFeGNfVHlwZUVycm9yLCAiTWVzc2FnZSBjbGFzcyBoYXMgbm8gREVTQ1JJUFRPUiIpOwot
ICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGlmICghUHlPYmplY3RfVHlwZUNoZWNrKHB5X2Rlc2Ny
aXB0b3IsICZQeU1lc3NhZ2VEZXNjcmlwdG9yX1R5cGUpKSB7Ci0gICAgUHlFcnJfRm9ybWF0KFB5
RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkIGEgbWVzc2FnZSBEZXNjcmlwdG9yLCBnb3QgJXMiLAot
ICAgICAgICAgICAgICAgICBweV9kZXNjcmlwdG9yLT5vYl90eXBlLT50cF9uYW1lKTsKLSAgICBy
ZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8vIEJ1aWxkIHRoZSBhcmd1bWVudHMgdG8gdGhlIGJhc2Ug
bWV0YWNsYXNzLgotICAvLyBXZSBjaGFuZ2UgdGhlIF9fYmFzZXNfXyBjbGFzc2VzLgotICBTY29w
ZWRQeU9iamVjdFB0ciBuZXdfYXJnczsKLSAgY29uc3QgRGVzY3JpcHRvciogbWVzc2FnZV9kZXNj
cmlwdG9yID0KLSAgICAgIFB5TWVzc2FnZURlc2NyaXB0b3JfQXNEZXNjcmlwdG9yKHB5X2Rlc2Ny
aXB0b3IpOwotICBpZiAobWVzc2FnZV9kZXNjcmlwdG9yID09IE5VTEwpIHsKLSAgICByZXR1cm4g
TlVMTDsKLSAgfQotCi0gIGlmIChXS1RfY2xhc3NlcyA9PSBOVUxMKSB7Ci0gICAgU2NvcGVkUHlP
YmplY3RQdHIgd2VsbF9rbm93bl90eXBlcyhQeUltcG9ydF9JbXBvcnRNb2R1bGUoCi0gICAgICAg
ICJnb29nbGUucHJvdG9idWYuaW50ZXJuYWwud2VsbF9rbm93bl90eXBlcyIpKTsKLSAgICBHT09H
TEVfRENIRUNLKHdlbGxfa25vd25fdHlwZXMgIT0gTlVMTCk7Ci0KLSAgICBXS1RfY2xhc3NlcyA9
IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcod2VsbF9rbm93bl90eXBlcy5nZXQoKSwgIldLVEJBU0VT
Iik7Ci0gICAgR09PR0xFX0RDSEVDSyhXS1RfY2xhc3NlcyAhPSBOVUxMKTsKLSAgfQotCi0gIFB5
T2JqZWN0KiB3ZWxsX2tub3duX2NsYXNzID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoCi0gICAgICBX
S1RfY2xhc3NlcywgbWVzc2FnZV9kZXNjcmlwdG9yLT5mdWxsX25hbWUoKS5jX3N0cigpKTsKLSAg
aWYgKHdlbGxfa25vd25fY2xhc3MgPT0gTlVMTCkgewotICAgIG5ld19hcmdzLnJlc2V0KFB5X0J1
aWxkVmFsdWUoInMoT08pTyIsIG5hbWUsICZDTWVzc2FnZV9UeXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUHl0aG9uTWVzc2FnZV9jbGFzcywgZGljdCkpOwotICB9IGVsc2Ug
ewotICAgIG5ld19hcmdzLnJlc2V0KFB5X0J1aWxkVmFsdWUoInMoT09PKU8iLCBuYW1lLCAmQ01l
c3NhZ2VfVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbk1lc3Nh
Z2VfY2xhc3MsIHdlbGxfa25vd25fY2xhc3MsIGRpY3QpKTsKLSAgfQotCi0gIGlmIChuZXdfYXJn
cyA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgLy8gQ2FsbCB0aGUgYmFzZSBt
ZXRhY2xhc3MuCi0gIFNjb3BlZFB5T2JqZWN0UHRyIHJlc3VsdChQeVR5cGVfVHlwZS50cF9uZXco
dHlwZSwgbmV3X2FyZ3MuZ2V0KCksIE5VTEwpKTsKLSAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgQ01lc3NhZ2VDbGFzcyogbmV3dHlwZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Q01lc3NhZ2VDbGFzcyo+KHJlc3VsdC5nZXQoKSk7Ci0KLSAgLy8gSW5zZXJ0IHRo
ZSBlbXB0eSB3ZWFrcmVmIGludG8gdGhlIGJhc2UgY2xhc3Nlcy4KLSAgaWYgKEluc2VydEVtcHR5
V2Vha3JlZigKLSAgICAgICAgICByZWludGVycHJldF9jYXN0PFB5VHlwZU9iamVjdCo+KFB5dGhv
bk1lc3NhZ2VfY2xhc3MpKSA8IDAgfHwKLSAgICAgIEluc2VydEVtcHR5V2Vha3JlZigmQ01lc3Nh
Z2VfVHlwZSkgPCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAvLyBDYWNoZSB0aGUg
ZGVzY3JpcHRvciwgYm90aCBhcyBQeXRob24gb2JqZWN0IGFuZCBhcyBDKysgcG9pbnRlci4KLSAg
Y29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9Ci0gICAgICBQeU1lc3NhZ2VEZXNjcmlwdG9y
X0FzRGVzY3JpcHRvcihweV9kZXNjcmlwdG9yKTsKLSAgaWYgKGRlc2NyaXB0b3IgPT0gTlVMTCkg
ewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIFB5X0lOQ1JFRihweV9kZXNjcmlwdG9yKTsKLSAg
bmV3dHlwZS0+cHlfbWVzc2FnZV9kZXNjcmlwdG9yID0gcHlfZGVzY3JpcHRvcjsKLSAgbmV3dHlw
ZS0+bWVzc2FnZV9kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgLy8gVE9ETyhhbWF1cnlmYSk6
IERvbid0IGFsd2F5cyB1c2UgdGhlIGNhbm9uaWNhbCBwb29sIG9mIHRoZSBkZXNjcmlwdG9yLAot
ICAvLyB1c2UgdGhlIE1lc3NhZ2VGYWN0b3J5IG9wdGlvbmFsbHkgcGFzc2VkIGluIHRoZSBjbGFz
cyBkaWN0LgotICBuZXd0eXBlLT5weV9kZXNjcmlwdG9yX3Bvb2wgPSBHZXREZXNjcmlwdG9yUG9v
bF9Gcm9tUG9vbCgKLSAgICAgIGRlc2NyaXB0b3ItPmZpbGUoKS0+cG9vbCgpKTsKLSAgaWYgKG5l
d3R5cGUtPnB5X2Rlc2NyaXB0b3JfcG9vbCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLSAgUHlfSU5DUkVGKG5ld3R5cGUtPnB5X2Rlc2NyaXB0b3JfcG9vbCk7Ci0KLSAgLy8gQWRk
IHRoZSBtZXNzYWdlIHRvIHRoZSBEZXNjcmlwdG9yUG9vbC4KLSAgaWYgKGNkZXNjcmlwdG9yX3Bv
b2w6OlJlZ2lzdGVyTWVzc2FnZUNsYXNzKG5ld3R5cGUtPnB5X2Rlc2NyaXB0b3JfcG9vbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IsIG5l
d3R5cGUpIDwgMCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgLy8gQ29udGludWUgd2l0
aCB0eXBlIGluaXRpYWxpemF0aW9uOiBhZGQgb3RoZXIgZGVzY3JpcHRvcnMsIGVudW0gdmFsdWVz
Li4uCi0gIGlmIChBZGREZXNjcmlwdG9ycyhyZXN1bHQuZ2V0KCksIGRlc2NyaXB0b3IpIDwgMCkg
ewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQot
Ci1zdGF0aWMgdm9pZCBEZWFsbG9jKENNZXNzYWdlQ2xhc3MgKnNlbGYpIHsKLSAgUHlfREVDUkVG
KHNlbGYtPnB5X21lc3NhZ2VfZGVzY3JpcHRvcik7Ci0gIFB5X0RFQ1JFRihzZWxmLT5weV9kZXNj
cmlwdG9yX3Bvb2wpOwotICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8
UHlPYmplY3QqPihzZWxmKSk7Ci19Ci0KLQotLy8gVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGFuZCBl
bXB0eSB3ZWFrcmVmIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3Qgb2YKLS8vIHN1YmNsYXNzZXMgZm9y
IHRoZSBtYWluIHByb3RvY29sIGJ1ZmZlciBNZXNzYWdlIGNsYXNzLgotLy8KLS8vIFRoaXMgZWxp
bWluYXRlcyBhIE8obl4yKSBiZWhhdmlvdXIgaW4gdGhlIGludGVybmFsIGFkZF9zdWJjbGFzcwot
Ly8gcm91dGluZS4KLXN0YXRpYyBpbnQgSW5zZXJ0RW1wdHlXZWFrcmVmKFB5VHlwZU9iamVjdCAq
YmFzZV90eXBlKSB7Ci0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0gIC8vIFB5dGhvbiAzLjQg
aGFzIGFscmVhZHkgaW5jbHVkZWQgdGhlIGZpeCBmb3IgdGhlIGlzc3VlIHRoYXQgdGhpcwotICAv
LyBoYWNrIGFkZHJlc3Nlcy4gRm9yIGZ1cnRoZXIgYmFja2dyb3VuZCBhbmQgdGhlIGZpeCBwbGVh
c2Ugc2VlCi0gIC8vIGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTc5MzYuCi0gIHJldHVy
biAwOwotI2Vsc2UKLSAgUHlPYmplY3QgKnN1YmNsYXNzZXMgPSBiYXNlX3R5cGUtPnRwX3N1YmNs
YXNzZXM7Ci0gIGlmIChzdWJjbGFzc2VzICYmIFB5TGlzdF9DaGVja0V4YWN0KHN1YmNsYXNzZXMp
KSB7Ci0gICAgcmV0dXJuIFB5TGlzdF9BcHBlbmQoc3ViY2xhc3Nlcywga0VtcHR5V2Vha3JlZik7
Ci0gIH0KLSAgcmV0dXJuIDA7Ci0jZW5kaWYgIC8vIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgbWVzc2FnZV9tZXRhCi0KLVB5VHlwZU9iamVjdCBDTWVzc2FnZUNs
YXNzX1R5cGUgPSB7Ci0gIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCi0g
IEZVTExfTU9EVUxFX05BTUUgIi5NZXNzYWdlTWV0YSIsICAgICAvLyB0cF9uYW1lCi0gIHNpemVv
ZihDTWVzc2FnZUNsYXNzKSwgICAgICAgICAgICAgICAvLyB0cF9iYXNpY3NpemUKLSAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2l0ZW1zaXplCi0gIChkZXN0cnVj
dG9yKW1lc3NhZ2VfbWV0YTo6RGVhbGxvYywgICAvLyB0cF9kZWFsbG9jCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9wcmludAotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHBfZ2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfc2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdHBfY29tcGFyZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdHBfcmVwcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfYXNfbnVtYmVyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cF9hc19zZXF1ZW5jZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfYXNfbWFwcGluZwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdHBfaGFzaAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdHBfY2FsbAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
c3RyCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9nZXRhdHRy
bwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfc2V0YXR0cm8K
LSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX2FzX2J1ZmZlcgot
ICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLy8gdHBfZmxhZ3MK
LSAgIlRoZSBtZXRhY2xhc3Mgb2YgUHJvdG9jb2xNZXNzYWdlcyIsICAvLyB0cF9kb2MKLSAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3RyYXZlcnNlCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9jbGVhcgotICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfcmljaGNvbXBhcmUKLSAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRwX3dlYWtsaXN0b2Zmc2V0Ci0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVyCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cF9pdGVybmV4dAotICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBfbWV0aG9kcwotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHBfbWVtYmVycwotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdHBfZ2V0c2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0cF9iYXNlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0cF9kaWN0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0cF9kZXNjcl9nZXQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRwX2Rlc2NyX3NldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdHBfZGljdG9mZnNldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdHBfaW5pdAotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHBf
YWxsb2MKLSAgbWVzc2FnZV9tZXRhOjpOZXcsICAgICAgICAgICAgICAgICAgIC8vIHRwX25ldwot
fTsKLQotc3RhdGljIENNZXNzYWdlQ2xhc3MqIENoZWNrTWVzc2FnZUNsYXNzKFB5VHlwZU9iamVj
dCogY2xzKSB7Ci0gIGlmICghUHlPYmplY3RfVHlwZUNoZWNrKGNscywgJkNNZXNzYWdlQ2xhc3Nf
VHlwZSkpIHsKLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiQ2xhc3MgJXMgaXMg
bm90IGEgTWVzc2FnZSIsIGNscy0+dHBfbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q01lc3NhZ2VDbGFzcyo+KGNscyk7Ci19Ci0KLXN0YXRp
YyBjb25zdCBEZXNjcmlwdG9yKiBHZXRNZXNzYWdlRGVzY3JpcHRvcihQeVR5cGVPYmplY3QqIGNs
cykgewotICBDTWVzc2FnZUNsYXNzKiB0eXBlID0gQ2hlY2tNZXNzYWdlQ2xhc3MoY2xzKTsKLSAg
aWYgKHR5cGUgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiB0eXBl
LT5tZXNzYWdlX2Rlc2NyaXB0b3I7Ci19Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zCi1uYW1l
c3BhY2UgY21lc3NhZ2UgewotaW50IEludGVybmFsUmVsZWFzZUZpZWxkQnlEZXNjcmlwdG9yKAot
ICAgIENNZXNzYWdlKiBzZWxmLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGRfZGVz
Y3JpcHRvciwKLSAgICBQeU9iamVjdCogY29tcG9zaXRlX2ZpZWxkKTsKLX0gIC8vIG5hbWVzcGFj
ZSBjbWVzc2FnZQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFZpc2l0aW5nIHRoZSBjb21wb3NpdGUg
Y2hpbGRyZW4gb2YgYSBDTWVzc2FnZQotCi1zdHJ1Y3QgQ2hpbGRWaXNpdG9yIHsKLSAgLy8gUmV0
dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi0gIGludCBWaXNpdFJlcGVhdGVkQ29t
cG9zaXRlQ29udGFpbmVyKFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKiBjb250YWluZXIpIHsK
LSAgICByZXR1cm4gMDsKLSAgfQotCi0gIC8vIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBm
YWlsdXJlLgotICBpbnQgVmlzaXRSZXBlYXRlZFNjYWxhckNvbnRhaW5lcihSZXBlYXRlZFNjYWxh
ckNvbnRhaW5lciogY29udGFpbmVyKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvLyBSZXR1
cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLSAgaW50IFZpc2l0Q01lc3NhZ2UoQ01l
c3NhZ2UqIGNtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkX2Rlc2NyaXB0b3IpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotfTsKLQotLy8gQXBw
bHkgYSBmdW5jdGlvbiB0byBhIGNvbXBvc2l0ZSBmaWVsZC4gIERvZXMgbm90aGluZyBpZiBjaGls
ZCBpcyBvZgotLy8gbm9uLWNvbXBvc2l0ZSB0eXBlLgotdGVtcGxhdGU8Y2xhc3MgVmlzaXRvcj4K
LXN0YXRpYyBpbnQgVmlzaXRDb21wb3NpdGVGaWVsZChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QqIGNoaWxk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IgdmlzaXRvcikgewotICBp
ZiAoZGVzY3JpcHRvci0+bGFiZWwoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX1JFUEVBVEVE
KSB7Ci0gICAgaWYgKGRlc2NyaXB0b3ItPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX01FU1NBR0UpIHsKLSAgICAgIGlmIChkZXNjcmlwdG9yLT5pc19tYXAoKSkgewotICAg
ICAgICBNYXBDb250YWluZXIqIGNvbnRhaW5lciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWFwQ29udGFp
bmVyKj4oY2hpbGQpOwotICAgICAgICBpZiAodmlzaXRvci5WaXNpdE1hcENvbnRhaW5lcihjb250
YWluZXIpID09IC0xKSB7Ci0gICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lciogY29udGFpbmVyID0K
LSAgICAgICAgICByZWludGVycHJldF9jYXN0PFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKj4o
Y2hpbGQpOwotICAgICAgICBpZiAodmlzaXRvci5WaXNpdFJlcGVhdGVkQ29tcG9zaXRlQ29udGFp
bmVyKGNvbnRhaW5lcikgPT0gLTEpCi0gICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICBSZXBlYXRlZFNjYWxhckNvbnRhaW5lciogY29udGFpbmVyID0KLSAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxSZXBlYXRlZFNjYWxhckNvbnRhaW5lcio+KGNoaWxkKTsK
LSAgICAgIGlmICh2aXNpdG9yLlZpc2l0UmVwZWF0ZWRTY2FsYXJDb250YWluZXIoY29udGFpbmVy
KSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfSBlbHNlIGlmIChkZXNjcmlw
dG9yLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSB7Ci0g
ICAgQ01lc3NhZ2UqIGNtc2cgPSByZWludGVycHJldF9jYXN0PENNZXNzYWdlKj4oY2hpbGQpOwot
ICAgIGlmICh2aXNpdG9yLlZpc2l0Q01lc3NhZ2UoY21zZywgZGVzY3JpcHRvcikgPT0gLTEpCi0g
ICAgICByZXR1cm4gLTE7Ci0gIH0KLSAgLy8gVGhlIEV4dGVuc2lvbkRpY3QgbWlnaHQgY29udGFp
biBub24tY29tcG9zaXRlIGZpZWxkcywgd2hpY2ggd2UKLSAgLy8gc2tpcCBoZXJlLgotICByZXR1
cm4gMDsKLX0KLQotLy8gVmlzaXQgZWFjaCBjb21wb3NpdGUgZmllbGQgYW5kIGV4dGVuc2lvbiBm
aWVsZCBvZiB0aGlzIENNZXNzYWdlLgotLy8gUmV0dXJucyAtMSBvbiBlcnJvciBhbmQgMCBvbiBz
dWNjZXNzLgotdGVtcGxhdGU8Y2xhc3MgVmlzaXRvcj4KLWludCBGb3JFYWNoQ29tcG9zaXRlRmll
bGQoQ01lc3NhZ2UqIHNlbGYsIFZpc2l0b3IgdmlzaXRvcikgewotICBQeV9zc2l6ZV90IHBvcyA9
IDA7Ci0gIFB5T2JqZWN0KiBrZXk7Ci0gIFB5T2JqZWN0KiBmaWVsZDsKLQotICAvLyBWaXNpdCBu
b3JtYWwgZmllbGRzLgotICBpZiAoc2VsZi0+Y29tcG9zaXRlX2ZpZWxkcykgewotICAgIC8vIE5l
dmVyIHVzZSBzZWxmLT5tZXNzYWdlIGluIHRoaXMgZnVuY3Rpb24sIGl0IG1heSBiZSBhbHJlYWR5
IGZyZWVkLgotICAgIGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2VfZGVzY3JpcHRvciA9Ci0gICAg
ICAgIEdldE1lc3NhZ2VEZXNjcmlwdG9yKFB5X1RZUEUoc2VsZikpOwotICAgIHdoaWxlIChQeURp
Y3RfTmV4dChzZWxmLT5jb21wb3NpdGVfZmllbGRzLCAmcG9zLCAma2V5LCAmZmllbGQpKSB7Ci0g
ICAgICBQeV9zc2l6ZV90IGtleV9zdHJfc2l6ZTsKLSAgICAgIGNoYXIgKmtleV9zdHJfZGF0YTsK
LSAgICAgIGlmIChQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemUoa2V5LCAma2V5X3N0cl9kYXRhLCAm
a2V5X3N0cl9zaXplKSAhPSAwKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICBjb25zdCBzdHJp
bmcga2V5X3N0cihrZXlfc3RyX2RhdGEsIGtleV9zdHJfc2l6ZSk7Ci0gICAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPQotICAgICAgICBtZXNzYWdlX2Rlc2NyaXB0b3ItPkZp
bmRGaWVsZEJ5TmFtZShrZXlfc3RyKTsKLSAgICAgIGlmIChkZXNjcmlwdG9yICE9IE5VTEwpIHsK
LSAgICAgICAgaWYgKFZpc2l0Q29tcG9zaXRlRmllbGQoZGVzY3JpcHRvciwgZmllbGQsIHZpc2l0
b3IpID09IC0xKQotICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICAvLyBWaXNpdCBleHRlbnNpb24gZmllbGRzLgotICBpZiAoc2VsZi0+ZXh0ZW5zaW9ucyAhPSBO
VUxMKSB7Ci0gICAgcG9zID0gMDsKLSAgICB3aGlsZSAoUHlEaWN0X05leHQoc2VsZi0+ZXh0ZW5z
aW9ucy0+dmFsdWVzLCAmcG9zLCAma2V5LCAmZmllbGQpKSB7Ci0gICAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBjbWVzc2FnZTo6R2V0RXh0ZW5zaW9uRGVzY3JpcHRvcihr
ZXkpOwotICAgICAgaWYgKGRlc2NyaXB0b3IgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwot
ICAgICAgaWYgKFZpc2l0Q29tcG9zaXRlRmllbGQoZGVzY3JpcHRvciwgZmllbGQsIHZpc2l0b3Ip
ID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIDA7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBDb25zdGFudHMgdXNlZCBmb3IgaW50ZWdlciB0eXBl
IHJhbmdlIGNoZWNraW5nLgotUHlPYmplY3QqIGtQeXRob25aZXJvOwotUHlPYmplY3QqIGtpbnQz
Mm1pbl9weTsKLVB5T2JqZWN0KiBraW50MzJtYXhfcHk7Ci1QeU9iamVjdCoga3VpbnQzMm1heF9w
eTsKLVB5T2JqZWN0KiBraW50NjRtaW5fcHk7Ci1QeU9iamVjdCoga2ludDY0bWF4X3B5OwotUHlP
YmplY3QqIGt1aW50NjRtYXhfcHk7Ci0KLVB5T2JqZWN0KiBFbmNvZGVFcnJvcl9jbGFzczsKLVB5
T2JqZWN0KiBEZWNvZGVFcnJvcl9jbGFzczsKLVB5T2JqZWN0KiBQaWNrbGVFcnJvcl9jbGFzczsK
LQotLy8gQ29uc3RhbnQgUHlTdHJpbmcgdmFsdWVzIHVzZWQgZm9yIEdldEF0dHIvR2V0SXRlbS4K
LXN0YXRpYyBQeU9iamVjdCoga19jZGVzY3JpcHRvcjsKLXN0YXRpYyBQeU9iamVjdCoga2Z1bGxf
bmFtZTsKLQotLyogSXMgNjRiaXQgKi8KLXZvaWQgRm9ybWF0VHlwZUVycm9yKFB5T2JqZWN0KiBh
cmcsIGNoYXIqIGV4cGVjdGVkX3R5cGVzKSB7Ci0gIFB5T2JqZWN0KiByZXByID0gUHlPYmplY3Rf
UmVwcihhcmcpOwotICBpZiAocmVwcikgewotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJy
b3IsCi0gICAgICAgICAgICAgICAgICIlLjEwMHMgaGFzIHR5cGUgJS4xMDBzLCBidXQgZXhwZWN0
ZWQgb25lIG9mOiAlcyIsCi0gICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKHJlcHIp
LAotICAgICAgICAgICAgICAgICBQeV9UWVBFKGFyZyktPnRwX25hbWUsCi0gICAgICAgICAgICAg
ICAgIGV4cGVjdGVkX3R5cGVzKTsKLSAgICBQeV9ERUNSRUYocmVwcik7Ci0gIH0KLX0KLQotdGVt
cGxhdGU8Y2xhc3MgVD4KLWJvb2wgQ2hlY2tBbmRHZXRJbnRlZ2VyKAotICAgIFB5T2JqZWN0KiBh
cmcsIFQqIHZhbHVlLCBQeU9iamVjdCogbWluLCBQeU9iamVjdCogbWF4KSB7Ci0gIGJvb2wgaXNf
bG9uZyA9IFB5TG9uZ19DaGVjayhhcmcpOwotI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0gIGlm
ICghUHlJbnRfQ2hlY2soYXJnKSAmJiAhaXNfbG9uZykgewotICAgIEZvcm1hdFR5cGVFcnJvcihh
cmcsICJpbnQsIGxvbmciKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKFB5T2JqZWN0
X0NvbXBhcmUobWluLCBhcmcpID4gMCB8fCBQeU9iamVjdF9Db21wYXJlKG1heCwgYXJnKSA8IDAp
IHsKLSNlbHNlCi0gIGlmICghaXNfbG9uZykgewotICAgIEZvcm1hdFR5cGVFcnJvcihhcmcsICJp
bnQiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKFB5T2JqZWN0X1JpY2hDb21wYXJl
Qm9vbChtaW4sIGFyZywgUHlfTEUpICE9IDEgfHwKLSAgICAgIFB5T2JqZWN0X1JpY2hDb21wYXJl
Qm9vbChtYXgsIGFyZywgUHlfR0UpICE9IDEpIHsKLSNlbmRpZgotICAgIGlmICghUHlFcnJfT2Nj
dXJyZWQoKSkgewotICAgICAgUHlPYmplY3QgKnMgPSBQeU9iamVjdF9TdHIoYXJnKTsKLSAgICAg
IGlmIChzKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAg
ICAgICAgICAgICAgICAgIlZhbHVlIG91dCBvZiByYW5nZTogJXMiLAotICAgICAgICAgICAgICAg
ICAgICAgUHlTdHJpbmdfQXNTdHJpbmcocykpOwotICAgICAgICBQeV9ERUNSRUYocyk7Ci0gICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotI2lmIFBZX01BSk9SX1ZFUlNJT04g
PCAzCi0gIGlmICghaXNfbG9uZykgewotICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PFQ+KFB5SW50
X0FzTG9uZyhhcmcpKTsKLSAgfSBlbHNlICAvLyBOT0xJTlQKLSNlbmRpZgotICB7Ci0gICAgaWYg
KG1pbiA9PSBrUHl0aG9uWmVybykgewotICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8VD4oUHlM
b25nX0FzVW5zaWduZWRMb25nTG9uZyhhcmcpKTsKLSAgICB9IGVsc2UgewotICAgICAgKnZhbHVl
ID0gc3RhdGljX2Nhc3Q8VD4oUHlMb25nX0FzTG9uZ0xvbmcoYXJnKSk7Ci0gICAgfQotICB9Ci0g
IHJldHVybiB0cnVlOwotfQotCi0vLyBUaGVzZSBhcmUgcmVmZXJlbmNlZCBieSByZXBlYXRlZF9z
Y2FsYXJfY29udGFpbmVyLCBhbmQgbXVzdAotLy8gYmUgZXhwbGljaXRseSBpbnN0YW50aWF0ZWQu
Ci10ZW1wbGF0ZSBib29sIENoZWNrQW5kR2V0SW50ZWdlcjxpbnQzMj4oCi0gICAgUHlPYmplY3Qq
LCBpbnQzMiosIFB5T2JqZWN0KiwgUHlPYmplY3QqKTsKLXRlbXBsYXRlIGJvb2wgQ2hlY2tBbmRH
ZXRJbnRlZ2VyPGludDY0PigKLSAgICBQeU9iamVjdCosIGludDY0KiwgUHlPYmplY3QqLCBQeU9i
amVjdCopOwotdGVtcGxhdGUgYm9vbCBDaGVja0FuZEdldEludGVnZXI8dWludDMyPigKLSAgICBQ
eU9iamVjdCosIHVpbnQzMiosIFB5T2JqZWN0KiwgUHlPYmplY3QqKTsKLXRlbXBsYXRlIGJvb2wg
Q2hlY2tBbmRHZXRJbnRlZ2VyPHVpbnQ2ND4oCi0gICAgUHlPYmplY3QqLCB1aW50NjQqLCBQeU9i
amVjdCosIFB5T2JqZWN0Kik7Ci0KLWJvb2wgQ2hlY2tBbmRHZXREb3VibGUoUHlPYmplY3QqIGFy
ZywgZG91YmxlKiB2YWx1ZSkgewotICBpZiAoIVB5SW50X0NoZWNrKGFyZykgJiYgIVB5TG9uZ19D
aGVjayhhcmcpICYmCi0gICAgICAhUHlGbG9hdF9DaGVjayhhcmcpKSB7Ci0gICAgRm9ybWF0VHlw
ZUVycm9yKGFyZywgImludCwgbG9uZywgZmxvYXQiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LSAgKnZhbHVlID0gUHlGbG9hdF9Bc0RvdWJsZShhcmcpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBDaGVja0FuZEdldEZsb2F0KFB5T2JqZWN0KiBhcmcsIGZsb2F0KiB2YWx1ZSkgewotICBk
b3VibGUgZG91YmxlX3ZhbHVlOwotICBpZiAoIUNoZWNrQW5kR2V0RG91YmxlKGFyZywgJmRvdWJs
ZV92YWx1ZSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgKnZhbHVlID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGRvdWJsZV92YWx1ZSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIENoZWNr
QW5kR2V0Qm9vbChQeU9iamVjdCogYXJnLCBib29sKiB2YWx1ZSkgewotICBpZiAoIVB5SW50X0No
ZWNrKGFyZykgJiYgIVB5Qm9vbF9DaGVjayhhcmcpICYmICFQeUxvbmdfQ2hlY2soYXJnKSkgewot
ICAgIEZvcm1hdFR5cGVFcnJvcihhcmcsICJpbnQsIGxvbmcsIGJvb2wiKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLSAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Ym9vbD4oUHlJbnRfQXNMb25nKGFy
ZykpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIG9i
amVjdCAod2hpY2ggbXVzdCBiZSAiYnl0ZXMiIG9yICJ1bmljb2RlIikgY29udGFpbnMKLS8vIHZh
bGlkIFVURi04LgotYm9vbCBJc1ZhbGlkVVRGOChQeU9iamVjdCogb2JqKSB7Ci0gIGlmIChQeUJ5
dGVzX0NoZWNrKG9iaikpIHsKLSAgICBQeU9iamVjdCogdW5pY29kZSA9IFB5VW5pY29kZV9Gcm9t
RW5jb2RlZE9iamVjdChvYmosICJ1dGYtOCIsIE5VTEwpOwotCi0gICAgLy8gQ2xlYXIgdGhlIGVy
cm9yIGluZGljYXRvcjsgd2UgcmVwb3J0IG91ciBvd24gZXJyb3Igd2hlbiBkZXNpcmVkLgotICAg
IFB5RXJyX0NsZWFyKCk7Ci0KLSAgICBpZiAodW5pY29kZSkgewotICAgICAgUHlfREVDUkVGKHVu
aWNvZGUpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gVW5pY29kZSBvYmplY3QsIGtub3duIHRv
IGJlIHZhbGlkIFVURi04LgotICAgIHJldHVybiB0cnVlOwotICB9Ci19Ci0KLWJvb2wgQWxsb3dJ
bnZhbGlkVVRGOChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7IHJldHVybiBmYWxzZTsg
fQotCi1QeU9iamVjdCogQ2hlY2tTdHJpbmcoUHlPYmplY3QqIGFyZywgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIEdPT0dMRV9EQ0hFQ0soZGVzY3JpcHRvci0+dHlwZSgp
ID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcgfHwKLSAgICAgICAgIGRlc2NyaXB0b3It
PnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMpOwotICBpZiAoZGVzY3JpcHRv
ci0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcpIHsKLSAgICBpZiAoIVB5
Qnl0ZXNfQ2hlY2soYXJnKSAmJiAhUHlVbmljb2RlX0NoZWNrKGFyZykpIHsKLSAgICAgIEZvcm1h
dFR5cGVFcnJvcihhcmcsICJieXRlcywgdW5pY29kZSIpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKCFJc1ZhbGlkVVRGOChhcmcpICYmICFBbGxvd0ludmFsaWRVVEY4KGRl
c2NyaXB0b3IpKSB7Ci0gICAgICBQeU9iamVjdCogcmVwciA9IFB5T2JqZWN0X1JlcHIoYXJnKTsK
LSAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAg
ICIlcyBoYXMgdHlwZSBzdHIsIGJ1dCBpc24ndCB2YWxpZCBVVEYtOCAiCi0gICAgICAgICAgICAg
ICAgICAgImVuY29kaW5nLiBOb24tVVRGLTggc3RyaW5ncyBtdXN0IGJlIGNvbnZlcnRlZCB0byAi
Ci0gICAgICAgICAgICAgICAgICAgInVuaWNvZGUgb2JqZWN0cyBiZWZvcmUgYmVpbmcgYWRkZWQu
IiwKLSAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhyZXByKSk7Ci0gICAgICBQ
eV9ERUNSRUYocmVwcik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gIH0gZWxzZSBpZiAo
IVB5Qnl0ZXNfQ2hlY2soYXJnKSkgewotICAgIEZvcm1hdFR5cGVFcnJvcihhcmcsICJieXRlcyIp
OwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgUHlPYmplY3QqIGVuY29kZWRfc3RyaW5nID0g
TlVMTDsKLSAgaWYgKGRlc2NyaXB0b3ItPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
U1RSSU5HKSB7Ci0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2soYXJnKSkgewotICAgICAgLy8gVGhlIGJ5
dGVzIHdlcmUgYWxyZWFkeSB2YWxpZGF0ZWQgYXMgY29ycmVjdGx5IGVuY29kZWQgVVRGLTggYWJv
dmUuCi0gICAgICBlbmNvZGVkX3N0cmluZyA9IGFyZzsgIC8vIEFscmVhZHkgZW5jb2RlZC4KLSAg
ICAgIFB5X0lOQ1JFRihlbmNvZGVkX3N0cmluZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVuY29k
ZWRfc3RyaW5nID0gUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdChhcmcsICJ1dGYtOCIsIE5VTEwp
OwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvLyBJbiB0aGlzIGNhc2UgZmllbGQgdHlwZSBpcyAi
Ynl0ZXMiLgotICAgIGVuY29kZWRfc3RyaW5nID0gYXJnOwotICAgIFB5X0lOQ1JFRihlbmNvZGVk
X3N0cmluZyk7Ci0gIH0KLQotICByZXR1cm4gZW5jb2RlZF9zdHJpbmc7Ci19Ci0KLWJvb2wgQ2hl
Y2tBbmRTZXRTdHJpbmcoCi0gICAgUHlPYmplY3QqIGFyZywgTWVzc2FnZSogbWVzc2FnZSwKLSAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgY29uc3QgUmVmbGVjdGlv
biogcmVmbGVjdGlvbiwKLSAgICBib29sIGFwcGVuZCwKLSAgICBpbnQgaW5kZXgpIHsKLSAgU2Nv
cGVkUHlPYmplY3RQdHIgZW5jb2RlZF9zdHJpbmcoQ2hlY2tTdHJpbmcoYXJnLCBkZXNjcmlwdG9y
KSk7Ci0KLSAgaWYgKGVuY29kZWRfc3RyaW5nLmdldCgpID09IE5VTEwpIHsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICBjaGFyKiB2YWx1ZTsKLSAgUHlfc3NpemVfdCB2YWx1ZV9sZW47Ci0g
IGlmIChQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShlbmNvZGVkX3N0cmluZy5nZXQoKSwgJnZhbHVl
LCAmdmFsdWVfbGVuKSA8IDApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBzdHJpbmcg
dmFsdWVfc3RyaW5nKHZhbHVlLCB2YWx1ZV9sZW4pOwotICBpZiAoYXBwZW5kKSB7Ci0gICAgcmVm
bGVjdGlvbi0+QWRkU3RyaW5nKG1lc3NhZ2UsIGRlc2NyaXB0b3IsIHZhbHVlX3N0cmluZyk7Ci0g
IH0gZWxzZSBpZiAoaW5kZXggPCAwKSB7Ci0gICAgcmVmbGVjdGlvbi0+U2V0U3RyaW5nKG1lc3Nh
Z2UsIGRlc2NyaXB0b3IsIHZhbHVlX3N0cmluZyk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVmbGVjdGlv
bi0+U2V0UmVwZWF0ZWRTdHJpbmcobWVzc2FnZSwgZGVzY3JpcHRvciwgaW5kZXgsIHZhbHVlX3N0
cmluZyk7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLVB5T2JqZWN0KiBUb1N0cmluZ09iamVj
dChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIHN0cmluZyB2YWx1ZSkgewotICBp
ZiAoZGVzY3JpcHRvci0+dHlwZSgpICE9IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcpIHsK
LSAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2YWx1ZS5jX3N0cigpLCB2YWx1
ZS5sZW5ndGgoKSk7Ci0gIH0KLQotICBQeU9iamVjdCogcmVzdWx0ID0gUHlVbmljb2RlX0RlY29k
ZVVURjgodmFsdWUuY19zdHIoKSwgdmFsdWUubGVuZ3RoKCksIE5VTEwpOwotICAvLyBJZiB0aGUg
c3RyaW5nIGNhbid0IGJlIGRlY29kZWQgaW4gVVRGLTgsIGp1c3QgcmV0dXJuIGEgc3RyaW5nIG9i
amVjdCB0aGF0Ci0gIC8vIGNvbnRhaW5zIHRoZSByYXcgYnl0ZXMuIFRoaXMgY2FuJ3QgaGFwcGVu
IGlmIHRoZSB2YWx1ZSB3YXMgYXNzaWduZWQgdXNpbmcKLSAgLy8gdGhlIG1lbWJlcnMgb2YgdGhl
IFB5dGhvbiBtZXNzYWdlIG9iamVjdCwgYnV0IGNhbiBoYXBwZW4gaWYgdGhlIHZhbHVlcyB3ZXJl
Ci0gIC8vIHBhcnNlZCBmcm9tIHRoZSB3aXJlIChiaW5hcnkpLgotICBpZiAocmVzdWx0ID09IE5V
TEwpIHsKLSAgICBQeUVycl9DbGVhcigpOwotICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmlu
Z0FuZFNpemUodmFsdWUuY19zdHIoKSwgdmFsdWUubGVuZ3RoKCkpOwotICB9Ci0gIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLWJvb2wgQ2hlY2tGaWVsZEJlbG9uZ3NUb01lc3NhZ2UoY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBNZXNzYWdlKiBtZXNzYWdlKSB7Ci0gIGlmIChtZXNzYWdlLT5HZXREZXNjcmlw
dG9yKCkgPT0gZmllbGRfZGVzY3JpcHRvci0+Y29udGFpbmluZ190eXBlKCkpIHsKLSAgICByZXR1
cm4gdHJ1ZTsKLSAgfQotICBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3IsICJGaWVsZCAnJXMn
IGRvZXMgbm90IGJlbG9uZyB0byBtZXNzYWdlICclcyciLAotICAgICAgICAgICAgICAgZmllbGRf
ZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICAgICAgIG1lc3NhZ2Ut
PkdldERlc2NyaXB0b3IoKS0+ZnVsbF9uYW1lKCkuY19zdHIoKSk7Ci0gIHJldHVybiBmYWxzZTsK
LX0KLQotbmFtZXNwYWNlIGNtZXNzYWdlIHsKLQotUHlEZXNjcmlwdG9yUG9vbCogR2V0RGVzY3Jp
cHRvclBvb2xGb3JNZXNzYWdlKENNZXNzYWdlKiBtZXNzYWdlKSB7Ci0gIC8vIE5vIG5lZWQgdG8g
Y2hlY2sgdGhlIHR5cGU6IHRoZSB0eXBlIG9mIGluc3RhbmNlcyBvZiBDTWVzc2FnZSBpcyBhbHdh
eXMKLSAgLy8gYW4gaW5zdGFuY2Ugb2YgQ01lc3NhZ2VDbGFzcy4gTGV0J3MgcHJvdmUgaXQgd2l0
aCBhIGRlYnVnLW9ubHkgY2hlY2suCi0gIEdPT0dMRV9EQ0hFQ0soUHlPYmplY3RfVHlwZUNoZWNr
KG1lc3NhZ2UsICZDTWVzc2FnZV9UeXBlKSk7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PENN
ZXNzYWdlQ2xhc3MqPihQeV9UWVBFKG1lc3NhZ2UpKS0+cHlfZGVzY3JpcHRvcl9wb29sOwotfQot
Ci1NZXNzYWdlRmFjdG9yeSogR2V0RmFjdG9yeUZvck1lc3NhZ2UoQ01lc3NhZ2UqIG1lc3NhZ2Up
IHsKLSAgcmV0dXJuIEdldERlc2NyaXB0b3JQb29sRm9yTWVzc2FnZShtZXNzYWdlKS0+bWVzc2Fn
ZV9mYWN0b3J5OwotfQotCi1zdGF0aWMgaW50IE1heWJlUmVsZWFzZU92ZXJsYXBwaW5nT25lb2ZG
aWVsZCgKLSAgICBDTWVzc2FnZSogY21lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCkgewotI2lmZGVmIEdPT0dMRV9QUk9UT0JVRl9IQVNfT05FT0YKLSAgTWVzc2FnZSog
bWVzc2FnZSA9IGNtZXNzYWdlLT5tZXNzYWdlOwotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0
aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotICBpZiAoIWZpZWxkLT5jb250YWluaW5n
X29uZW9mKCkgfHwKLSAgICAgICFyZWZsZWN0aW9uLT5IYXNPbmVvZigqbWVzc2FnZSwgZmllbGQt
PmNvbnRhaW5pbmdfb25lb2YoKSkgfHwKLSAgICAgIHJlZmxlY3Rpb24tPkhhc0ZpZWxkKCptZXNz
YWdlLCBmaWVsZCkpIHsKLSAgICAvLyBObyBvdGhlciBmaWVsZCBpbiB0aGlzIG9uZW9mLCBubyBu
ZWVkIHRvIHJlbGVhc2UuCi0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBjb25zdCBPbmVvZkRlc2Ny
aXB0b3IqIG9uZW9mID0gZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKTsKLSAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBleGlzdGluZ19maWVsZCA9Ci0gICAgICByZWZsZWN0aW9uLT5HZXRPbmVvZkZp
ZWxkRGVzY3JpcHRvcigqbWVzc2FnZSwgb25lb2YpOwotICBpZiAoZXhpc3RpbmdfZmllbGQtPmNw
cF90eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICAvLyBO
b24tbWVzc2FnZSBmaWVsZHMgZG9uJ3QgbmVlZCB0byBiZSByZWxlYXNlZC4KLSAgICByZXR1cm4g
MDsKLSAgfQotICBjb25zdCBjaGFyKiBmaWVsZF9uYW1lID0gZXhpc3RpbmdfZmllbGQtPm5hbWUo
KS5jX3N0cigpOwotICBQeU9iamVjdCogY2hpbGRfbWVzc2FnZSA9IGNtZXNzYWdlLT5jb21wb3Np
dGVfZmllbGRzID8KLSAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKGNtZXNzYWdlLT5jb21wb3Np
dGVfZmllbGRzLCBmaWVsZF9uYW1lKSA6IE5VTEw7Ci0gIGlmIChjaGlsZF9tZXNzYWdlID09IE5V
TEwpIHsKLSAgICAvLyBObyBweXRob24gcmVmZXJlbmNlIHRvIHRoaXMgZmllbGQgc28gbm8gbmVl
ZCB0byByZWxlYXNlLgotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKEludGVybmFsUmVsZWFz
ZUZpZWxkQnlEZXNjcmlwdG9yKAotICAgICAgICAgIGNtZXNzYWdlLCBleGlzdGluZ19maWVsZCwg
Y2hpbGRfbWVzc2FnZSkgPCAwKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIHJldHVybiBQeURp
Y3RfRGVsSXRlbVN0cmluZyhjbWVzc2FnZS0+Y29tcG9zaXRlX2ZpZWxkcywgZmllbGRfbmFtZSk7
Ci0jZWxzZQotICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1h
a2luZyBhIG1lc3NhZ2Ugd3JpdGFibGUKLQotc3RhdGljIE1lc3NhZ2UqIEdldE11dGFibGVNZXNz
YWdlKAotICAgIENNZXNzYWdlKiBwYXJlbnQsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBw
YXJlbnRfZmllbGQpIHsKLSAgTWVzc2FnZSogcGFyZW50X21lc3NhZ2UgPSBwYXJlbnQtPm1lc3Nh
Z2U7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBwYXJlbnRfbWVzc2FnZS0+R2V0
UmVmbGVjdGlvbigpOwotICBpZiAoTWF5YmVSZWxlYXNlT3ZlcmxhcHBpbmdPbmVvZkZpZWxkKHBh
cmVudCwgcGFyZW50X2ZpZWxkKSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICByZXR1
cm4gcmVmbGVjdGlvbi0+TXV0YWJsZU1lc3NhZ2UoCi0gICAgICBwYXJlbnRfbWVzc2FnZSwgcGFy
ZW50X2ZpZWxkLCBHZXRGYWN0b3J5Rm9yTWVzc2FnZShwYXJlbnQpKTsKLX0KLQotc3RydWN0IEZp
eHVwTWVzc2FnZVJlZmVyZW5jZSA6IHB1YmxpYyBDaGlsZFZpc2l0b3IgewotICAvLyBtZXNzYWdl
IG11c3Qgb3V0bGl2ZSB0aGlzIG9iamVjdC4KLSAgZXhwbGljaXQgRml4dXBNZXNzYWdlUmVmZXJl
bmNlKE1lc3NhZ2UqIG1lc3NhZ2UpIDoKLSAgICAgIG1lc3NhZ2VfKG1lc3NhZ2UpIHt9Ci0KLSAg
aW50IFZpc2l0UmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIoUmVwZWF0ZWRDb21wb3NpdGVDb250
YWluZXIqIGNvbnRhaW5lcikgewotICAgIGNvbnRhaW5lci0+bWVzc2FnZSA9IG1lc3NhZ2VfOwot
ICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50IFZpc2l0UmVwZWF0ZWRTY2FsYXJDb250YWluZXIo
UmVwZWF0ZWRTY2FsYXJDb250YWluZXIqIGNvbnRhaW5lcikgewotICAgIGNvbnRhaW5lci0+bWVz
c2FnZSA9IG1lc3NhZ2VfOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50IFZpc2l0TWFwQ29u
dGFpbmVyKE1hcENvbnRhaW5lciogY29udGFpbmVyKSB7Ci0gICAgY29udGFpbmVyLT5tZXNzYWdl
ID0gbWVzc2FnZV87Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIE1lc3NhZ2Uq
IG1lc3NhZ2VfOwotfTsKLQotaW50IEFzc3VyZVdyaXRhYmxlKENNZXNzYWdlKiBzZWxmKSB7Ci0g
IGlmIChzZWxmID09IE5VTEwgfHwgIXNlbGYtPnJlYWRfb25seSkgewotICAgIHJldHVybiAwOwot
ICB9Ci0KLSAgaWYgKHNlbGYtPnBhcmVudCA9PSBOVUxMKSB7Ci0gICAgLy8gSWYgcGFyZW50IGlz
IE5VTEwgYnV0IHdlIGFyZSB0cnlpbmcgdG8gbW9kaWZ5IGEgcmVhZC1vbmx5IG1lc3NhZ2UsIHRo
aXMKLSAgICAvLyBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0YW50IGRlZmF1bHQgaW5zdGFuY2Ug
dGhhdCBuZWVkcyB0byBiZSByZXBsYWNlZAotICAgIC8vIHdpdGggYSBtdXRhYmxlIHRvcC1sZXZl
bCBtZXNzYWdlLgotICAgIHNlbGYtPm1lc3NhZ2UgPSBzZWxmLT5tZXNzYWdlLT5OZXcoKTsKLSAg
ICBzZWxmLT5vd25lci5yZXNldChzZWxmLT5tZXNzYWdlKTsKLSAgICAvLyBDYXNjYWRlIHRoZSBu
ZXcgb3duZXIgdG8gZXZlbnR1YWwgY2hpbGRyZW46IGV2ZW4gaWYgdGhpcyBtZXNzYWdlIGlzCi0g
ICAgLy8gZW1wdHksIHNvbWUgc3VibWVzc2FnZXMgb3IgcmVwZWF0ZWQgY29udGFpbmVycyBtaWdo
dCBleGlzdCBhbHJlYWR5LgotICAgIFNldE93bmVyKHNlbGYsIHNlbGYtPm93bmVyKTsKLSAgfSBl
bHNlIHsKLSAgICAvLyBPdGhlcndpc2UsIHdlIG5lZWQgYSBtdXRhYmxlIGNoaWxkIG1lc3NhZ2Uu
Ci0gICAgaWYgKEFzc3VyZVdyaXRhYmxlKHNlbGYtPnBhcmVudCkgPT0gLTEpCi0gICAgICByZXR1
cm4gLTE7Ci0KLSAgICAvLyBNYWtlIHNlbGYtPm1lc3NhZ2Ugd3JpdGFibGUuCi0gICAgTWVzc2Fn
ZSogbXV0YWJsZV9tZXNzYWdlID0gR2V0TXV0YWJsZU1lc3NhZ2UoCi0gICAgICAgIHNlbGYtPnBh
cmVudCwKLSAgICAgICAgc2VsZi0+cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3IpOwotICAgIGlmICht
dXRhYmxlX21lc3NhZ2UgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBz
ZWxmLT5tZXNzYWdlID0gbXV0YWJsZV9tZXNzYWdlOwotICB9Ci0gIHNlbGYtPnJlYWRfb25seSA9
IGZhbHNlOwotCi0gIC8vIFdoZW4gYSBDTWVzc2FnZSBpcyBtYWRlIHdyaXRhYmxlIGl0cyBNZXNz
YWdlIHBvaW50ZXIgaXMgdXBkYXRlZAotICAvLyB0byBwb2ludCB0byBhIG5ldyBtdXRhYmxlIE1l
c3NhZ2UuICBXaGVuIHRoYXQgaGFwcGVucyB3ZSBuZWVkIHRvCi0gIC8vIHVwZGF0ZSBhbnkgcmVm
ZXJlbmNlcyB0byB0aGUgb2xkLCByZWFkLW9ubHkgQ01lc3NhZ2UuICBUaGVyZSBhcmUKLSAgLy8g
Zm91ciBwbGFjZXMgc3VjaCByZWZlcmVuY2VzIG9jY3VyOiBSZXBlYXRlZFNjYWxhckNvbnRhaW5l
ciwKLSAgLy8gUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIsIE1hcENvbnRhaW5lciwgYW5kIEV4
dGVuc2lvbkRpY3QuCi0gIGlmIChzZWxmLT5leHRlbnNpb25zICE9IE5VTEwpCi0gICAgc2VsZi0+
ZXh0ZW5zaW9ucy0+bWVzc2FnZSA9IHNlbGYtPm1lc3NhZ2U7Ci0gIGlmIChGb3JFYWNoQ29tcG9z
aXRlRmllbGQoc2VsZiwgRml4dXBNZXNzYWdlUmVmZXJlbmNlKHNlbGYtPm1lc3NhZ2UpKSA9PSAt
MSkKLSAgICByZXR1cm4gLTE7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8vIC0tLSBHbG9iYWxzOgot
Ci0vLyBSZXRyaWV2ZSBhIEMrKyBGaWVsZERlc2NyaXB0b3IgZm9yIGEgbWVzc2FnZSBhdHRyaWJ1
dGUuCi0vLyBUaGUgQysrIG1lc3NhZ2UgbXVzdCBiZSB2YWxpZC4KLS8vIFRPRE8oYW1hdXJ5ZmEp
OiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzdGF5IGludGVybmFsLCBiZWNhdXNlIGV4Y2VwdGlvbgot
Ly8gaGFuZGxpbmcgaXMgbm90IGNvbnNpc3RlbnQuCi1zdGF0aWMgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBHZXRGaWVsZERlc2NyaXB0b3IoCi0gICAgQ01lc3NhZ2UqIHNlbGYsIFB5T2JqZWN0KiBu
YW1lKSB7Ci0gIGNvbnN0IERlc2NyaXB0b3IgKm1lc3NhZ2VfZGVzY3JpcHRvciA9IHNlbGYtPm1l
c3NhZ2UtPkdldERlc2NyaXB0b3IoKTsKLSAgY2hhciogZmllbGRfbmFtZTsKLSAgUHlfc3NpemVf
dCBzaXplOwotICBpZiAoUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKG5hbWUsICZmaWVsZF9uYW1l
LCAmc2l6ZSkgPCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgY29uc3QgRmllbGREZXNj
cmlwdG9yICpmaWVsZF9kZXNjcmlwdG9yID0KLSAgICAgIG1lc3NhZ2VfZGVzY3JpcHRvci0+Rmlu
ZEZpZWxkQnlOYW1lKHN0cmluZyhmaWVsZF9uYW1lLCBzaXplKSk7Ci0gIGlmIChmaWVsZF9kZXNj
cmlwdG9yID09IE5VTEwpIHsKLSAgICAvLyBOb3RlOiBObyBleGNlcHRpb24gaXMgc2V0IQotICAg
IHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBmaWVsZF9kZXNjcmlwdG9yOwotfQotCi0vLyBS
ZXRyaWV2ZSBhIEMrKyBGaWVsZERlc2NyaXB0b3IgZm9yIGFuIGV4dGVuc2lvbiBoYW5kbGUuCi1j
b25zdCBGaWVsZERlc2NyaXB0b3IqIEdldEV4dGVuc2lvbkRlc2NyaXB0b3IoUHlPYmplY3QqIGV4
dGVuc2lvbikgewotICBTY29wZWRQeU9iamVjdFB0ciBjZGVzY3JpcHRvcjsKLSAgaWYgKCFQeU9i
amVjdF9UeXBlQ2hlY2soZXh0ZW5zaW9uLCAmUHlGaWVsZERlc2NyaXB0b3JfVHlwZSkpIHsKLSAg
ICAvLyBNb3N0IGNhbGxlcnMgY29uc2lkZXIgZXh0ZW5zaW9ucyBhcyBhIHBsYWluIGRpY3Rpb25h
cnkuICBXZSBzaG91bGQKLSAgICAvLyBhbGxvdyBpbnB1dCB3aGljaCBpcyBub3QgYSBmaWVsZCBk
ZXNjcmlwdG9yLCBhbmQgc2ltcGx5IHByZXRlbmQgaXQgZG9lcwotICAgIC8vIG5vdCBleGlzdC4K
LSAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIGV4dGVuc2lvbik7Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJuIFB5RmllbGREZXNjcmlwdG9yX0FzRGVzY3JpcHRvcihl
eHRlbnNpb24pOwotfQotCi0vLyBJZiB2YWx1ZSBpcyBhIHN0cmluZywgY29udmVydCBpdCBpbnRv
IGFuIGVudW0gdmFsdWUgYmFzZWQgb24gdGhlIGxhYmVscyBpbgotLy8gZGVzY3JpcHRvciwgb3Ro
ZXJ3aXNlIHNpbXBseSByZXR1cm4gdmFsdWUuICBBbHdheXMgcmV0dXJucyBhIG5ldyByZWZlcmVu
Y2UuCi1zdGF0aWMgUHlPYmplY3QqIEdldEludGVnZXJFbnVtVmFsdWUoY29uc3QgRmllbGREZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFB5T2JqZWN0KiB2YWx1ZSkgewotICBpZiAoUHlTdHJpbmdfQ2hlY2sodmFsdWUpIHx8IFB5VW5p
Y29kZV9DaGVjayh2YWx1ZSkpIHsKLSAgICBjb25zdCBFbnVtRGVzY3JpcHRvciogZW51bV9kZXNj
cmlwdG9yID0gZGVzY3JpcHRvci5lbnVtX3R5cGUoKTsKLSAgICBpZiAoZW51bV9kZXNjcmlwdG9y
ID09IE5VTEwpIHsKLSAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3Qg
YW4gZW51bSBmaWVsZCIpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGNoYXIqIGVu
dW1fbGFiZWw7Ci0gICAgUHlfc3NpemVfdCBzaXplOwotICAgIGlmIChQeVN0cmluZ19Bc1N0cmlu
Z0FuZFNpemUodmFsdWUsICZlbnVtX2xhYmVsLCAmc2l6ZSkgPCAwKSB7Ci0gICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogZW51bV92YWx1ZV9k
ZXNjcmlwdG9yID0KLSAgICAgICAgZW51bV9kZXNjcmlwdG9yLT5GaW5kVmFsdWVCeU5hbWUoc3Ry
aW5nKGVudW1fbGFiZWwsIHNpemUpKTsKLSAgICBpZiAoZW51bV92YWx1ZV9kZXNjcmlwdG9yID09
IE5VTEwpIHsKLSAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5rbm93
biBlbnVtIGxhYmVsIik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIFB5
SW50X0Zyb21Mb25nKGVudW1fdmFsdWVfZGVzY3JpcHRvci0+bnVtYmVyKCkpOwotICB9Ci0gIFB5
X0lOQ1JFRih2YWx1ZSk7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotLy8gSWYgY21lc3NhZ2VfbGlz
dCBpcyBub3QgTlVMTCwgdGhpcyBmdW5jdGlvbiByZWxlYXNlcyB2YWx1ZXMgaW50byB0aGUKLS8v
IGNvbnRhaW5lciBDTWVzc2FnZXMgaW5zdGVhZCBvZiBqdXN0IHJlbW92aW5nLiBSZXBlYXRlZCBj
b21wb3NpdGUgY29udGFpbmVyCi0vLyBuZWVkcyB0byBkbyB0aGlzIHRvIG1ha2Ugc3VyZSBDTWVz
c2FnZXMgc3RheSBhbGl2ZSBpZiB0aGV5J3JlIHN0aWxsCi0vLyByZWZlcmVuY2VkIGFmdGVyIGRl
bGV0aW9uLiBSZXBlYXRlZCBzY2FsYXIgY29udGFpbmVyIGRvZXNuJ3QgbmVlZCB0byB3b3JyeS4K
LWludCBJbnRlcm5hbERlbGV0ZVJlcGVhdGVkRmllbGQoCi0gICAgQ01lc3NhZ2UqIHNlbGYsCi0g
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlwdG9yLAotICAgIFB5T2JqZWN0
KiBzbGljZSwKLSAgICBQeU9iamVjdCogY21lc3NhZ2VfbGlzdCkgewotICBNZXNzYWdlKiBtZXNz
YWdlID0gc2VsZi0+bWVzc2FnZTsKLSAgUHlfc3NpemVfdCBsZW5ndGgsIGZyb20sIHRvLCBzdGVw
LCBzbGljZV9sZW5ndGg7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdl
LT5HZXRSZWZsZWN0aW9uKCk7Ci0gIGludCBtaW4sIG1heDsKLSAgbGVuZ3RoID0gcmVmbGVjdGlv
bi0+RmllbGRTaXplKCptZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yKTsKLQotICBpZiAoUHlJbnRf
Q2hlY2soc2xpY2UpIHx8IFB5TG9uZ19DaGVjayhzbGljZSkpIHsKLSAgICBmcm9tID0gdG8gPSBQ
eUxvbmdfQXNMb25nKHNsaWNlKTsKLSAgICBpZiAoZnJvbSA8IDApIHsKLSAgICAgIGZyb20gPSB0
byA9IGxlbmd0aCArIGZyb207Ci0gICAgfQotICAgIHN0ZXAgPSAxOwotICAgIG1pbiA9IG1heCA9
IGZyb207Ci0KLSAgICAvLyBSYW5nZSBjaGVjay4KLSAgICBpZiAoZnJvbSA8IDAgfHwgZnJvbSA+
PSBsZW5ndGgpIHsKLSAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbmRleEVycm9yLCAibGlzdCBh
c3NpZ25tZW50IGluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0K
LSAgfSBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKHNsaWNlKSkgewotICAgIGZyb20gPSB0byA9IHN0
ZXAgPSBzbGljZV9sZW5ndGggPSAwOwotICAgIFB5U2xpY2VfR2V0SW5kaWNlc0V4KAotI2lmIFBZ
X01BSk9SX1ZFUlNJT04gPCAzCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UHlTbGljZU9iamVj
dCo+KHNsaWNlKSwKLSNlbHNlCi0gICAgICAgIHNsaWNlLAotI2VuZGlmCi0gICAgICAgIGxlbmd0
aCwgJmZyb20sICZ0bywgJnN0ZXAsICZzbGljZV9sZW5ndGgpOwotICAgIGlmIChmcm9tIDwgdG8p
IHsKLSAgICAgIG1pbiA9IGZyb207Ci0gICAgICBtYXggPSB0byAtIDE7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIG1pbiA9IHRvICsgMTsKLSAgICAgIG1heCA9IGZyb207Ci0gICAgfQotICB9IGVsc2Ug
ewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJsaXN0IGluZGljZXMgbXVz
dCBiZSBpbnRlZ2VycyIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIFB5X3NzaXplX3QgaSA9
IGZyb207Ci0gIHN0ZDo6dmVjdG9yPGJvb2w+IHRvX2RlbGV0ZShsZW5ndGgsIGZhbHNlKTsKLSAg
d2hpbGUgKGkgPj0gbWluICYmIGkgPD0gbWF4KSB7Ci0gICAgdG9fZGVsZXRlW2ldID0gdHJ1ZTsK
LSAgICBpICs9IHN0ZXA7Ci0gIH0KLQotICB0byA9IDA7Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgIGlmICghdG9fZGVsZXRlW2ldKSB7Ci0gICAgICBpZiAoaSAhPSB0bykg
ewotICAgICAgICByZWZsZWN0aW9uLT5Td2FwRWxlbWVudHMobWVzc2FnZSwgZmllbGRfZGVzY3Jp
cHRvciwgaSwgdG8pOwotICAgICAgICBpZiAoY21lc3NhZ2VfbGlzdCAhPSBOVUxMKSB7Ci0gICAg
ICAgICAgLy8gSWYgYSBsaXN0IG9mIGNtZXNzYWdlcyBpcyBwYXNzZWQgaW4gKGkuZS4gZnJvbSBh
IHJlcGVhdGVkCi0gICAgICAgICAgLy8gY29tcG9zaXRlIGNvbnRhaW5lciksIHN3YXAgdGhvc2Ug
YXMgd2VsbCB0byBjb3JyZXNwb25kIHRvIHRoZQotICAgICAgICAgIC8vIHN3YXBzIGluIHRoZSB1
bmRlcmx5aW5nIG1lc3NhZ2Ugc28gdGhleSdyZSBpbiB0aGUgcmlnaHQgb3JkZXIKLSAgICAgICAg
ICAvLyB3aGVuIHdlIHN0YXJ0IHJlbGVhc2luZy4KLSAgICAgICAgICBQeU9iamVjdCogdG1wID0g
UHlMaXN0X0dFVF9JVEVNKGNtZXNzYWdlX2xpc3QsIGkpOwotICAgICAgICAgIFB5TGlzdF9TRVRf
SVRFTShjbWVzc2FnZV9saXN0LCBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3Rf
R0VUX0lURU0oY21lc3NhZ2VfbGlzdCwgdG8pKTsKLSAgICAgICAgICBQeUxpc3RfU0VUX0lURU0o
Y21lc3NhZ2VfbGlzdCwgdG8sIHRtcCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICsrdG87
Ci0gICAgfQotICB9Ci0KLSAgd2hpbGUgKGkgPiB0bykgewotICAgIGlmIChjbWVzc2FnZV9saXN0
ID09IE5VTEwpIHsKLSAgICAgIHJlZmxlY3Rpb24tPlJlbW92ZUxhc3QobWVzc2FnZSwgZmllbGRf
ZGVzY3JpcHRvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIENNZXNzYWdlKiBsYXN0X2NtZXNzYWdl
ID0gcmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+KAotICAgICAgICAgIFB5TGlzdF9HRVRfSVRF
TShjbWVzc2FnZV9saXN0LCBQeUxpc3RfR0VUX1NJWkUoY21lc3NhZ2VfbGlzdCkgLSAxKSk7Ci0g
ICAgICByZXBlYXRlZF9jb21wb3NpdGVfY29udGFpbmVyOjpSZWxlYXNlTGFzdFRvKAotICAgICAg
ICAgIHNlbGYsIGZpZWxkX2Rlc2NyaXB0b3IsIGxhc3RfY21lc3NhZ2UpOwotICAgICAgaWYgKFB5
U2VxdWVuY2VfRGVsSXRlbShjbWVzc2FnZV9saXN0LCAtMSkgPCAwKSB7Ci0gICAgICAgIHJldHVy
biAtMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLS1pOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0K
LS8vIEluaXRpYWxpemVzIGZpZWxkcyBvZiBhIG1lc3NhZ2UuIFVzZWQgaW4gY29uc3RydWN0b3Jz
LgotaW50IEluaXRBdHRyaWJ1dGVzKENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCoga3dhcmdzKSB7
Ci0gIGlmIChrd2FyZ3MgPT0gTlVMTCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgUHlfc3Np
emVfdCBwb3MgPSAwOwotICBQeU9iamVjdCogbmFtZTsKLSAgUHlPYmplY3QqIHZhbHVlOwotICB3
aGlsZSAoUHlEaWN0X05leHQoa3dhcmdzLCAmcG9zLCAmbmFtZSwgJnZhbHVlKSkgewotICAgIGlm
ICghUHlTdHJpbmdfQ2hlY2sobmFtZSkpIHsKLSAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19W
YWx1ZUVycm9yLCAiRmllbGQgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIik7Ci0gICAgICByZXR1cm4g
LTE7Ci0gICAgfQotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IEdldEZp
ZWxkRGVzY3JpcHRvcihzZWxmLCBuYW1lKTsKLSAgICBpZiAoZGVzY3JpcHRvciA9PSBOVUxMKSB7
Ci0gICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIlByb3RvY29sIG1lc3NhZ2Ug
JXMgaGFzIG5vIFwiJXNcIiBmaWVsZC4iLAotICAgICAgICAgICAgICAgICAgIHNlbGYtPm1lc3Nh
Z2UtPkdldERlc2NyaXB0b3IoKS0+bmFtZSgpLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAg
UHlTdHJpbmdfQXNTdHJpbmcobmFtZSkpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBp
ZiAodmFsdWUgPT0gUHlfTm9uZSkgewotICAgICAgLy8gZmllbGQ9Tm9uZSBpcyB0aGUgc2FtZSBh
cyBubyBmaWVsZCBhdCBhbGwuCi0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYgKGRlc2Ny
aXB0b3ItPmlzX21hcCgpKSB7Ci0gICAgICBTY29wZWRQeU9iamVjdFB0ciBtYXAoR2V0QXR0cihz
ZWxmLCBuYW1lKSk7Ci0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbHVlX2Rlc2NyaXB0
b3IgPQotICAgICAgICAgIGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5h
bWUoInZhbHVlIik7Ci0gICAgICBpZiAodmFsdWVfZGVzY3JpcHRvci0+Y3BwX3R5cGUoKSA9PSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAgICAgICBQeV9zc2l6ZV90IG1h
cF9wb3MgPSAwOwotICAgICAgICBQeU9iamVjdCogbWFwX2tleTsKLSAgICAgICAgUHlPYmplY3Qq
IG1hcF92YWx1ZTsKLSAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KHZhbHVlLCAmbWFwX3Bvcywg
Jm1hcF9rZXksICZtYXBfdmFsdWUpKSB7Ci0gICAgICAgICAgU2NvcGVkUHlPYmplY3RQdHIgZnVu
Y3Rpb25fcmV0dXJuOwotICAgICAgICAgIGZ1bmN0aW9uX3JldHVybi5yZXNldChQeU9iamVjdF9H
ZXRJdGVtKG1hcC5nZXQoKSwgbWFwX2tleSkpOwotICAgICAgICAgIGlmIChmdW5jdGlvbl9yZXR1
cm4uZ2V0KCkgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgIH0K
LSAgICAgICAgICBTY29wZWRQeU9iamVjdFB0ciBvayhQeU9iamVjdF9DYWxsTWV0aG9kKAotICAg
ICAgICAgICAgICBmdW5jdGlvbl9yZXR1cm4uZ2V0KCksICJNZXJnZUZyb20iLCAiTyIsIG1hcF92
YWx1ZSkpOwotICAgICAgICAgIGlmIChvay5nZXQoKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBTY29wZWRQeU9iamVjdFB0ciBmdW5jdGlvbl9yZXR1cm47Ci0gICAgICAgIGZ1bmN0aW9uX3Jl
dHVybi5yZXNldCgKLSAgICAgICAgICAgIFB5T2JqZWN0X0NhbGxNZXRob2QobWFwLmdldCgpLCAi
dXBkYXRlIiwgIk8iLCB2YWx1ZSkpOwotICAgICAgICBpZiAoZnVuY3Rpb25fcmV0dXJuLmdldCgp
ID09IE5VTEwpIHsKLSAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKGRlc2NyaXB0b3ItPmxhYmVsKCkgPT0gRmllbGREZXNjcmlwdG9yOjpMQUJF
TF9SRVBFQVRFRCkgewotICAgICAgU2NvcGVkUHlPYmplY3RQdHIgY29udGFpbmVyKEdldEF0dHIo
c2VsZiwgbmFtZSkpOwotICAgICAgaWYgKGNvbnRhaW5lciA9PSBOVUxMKSB7Ci0gICAgICAgIHJl
dHVybiAtMTsKLSAgICAgIH0KLSAgICAgIGlmIChkZXNjcmlwdG9yLT5jcHBfdHlwZSgpID09IEZp
ZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSB7Ci0gICAgICAgIFJlcGVhdGVkQ29tcG9z
aXRlQ29udGFpbmVyKiByY19jb250YWluZXIgPQotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lcio+KGNvbnRhaW5lci5nZXQoKSk7Ci0gICAgICAg
IFNjb3BlZFB5T2JqZWN0UHRyIGl0ZXIoUHlPYmplY3RfR2V0SXRlcih2YWx1ZSkpOwotICAgICAg
ICBpZiAoaXRlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5
cGVFcnJvciwgIlZhbHVlIG11c3QgYmUgaXRlcmFibGUiKTsKLSAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICAgIH0KLSAgICAgICAgU2NvcGVkUHlPYmplY3RQdHIgbmV4dDsKLSAgICAgICAgd2hp
bGUgKChuZXh0LnJlc2V0KFB5SXRlcl9OZXh0KGl0ZXIuZ2V0KCkpKSkgIT0gTlVMTCkgewotICAg
ICAgICAgIFB5T2JqZWN0KiBrd2FyZ3MgPSAoUHlEaWN0X0NoZWNrKG5leHQuZ2V0KCkpID8gbmV4
dC5nZXQoKSA6IE5VTEwpOwotICAgICAgICAgIFNjb3BlZFB5T2JqZWN0UHRyIG5ld19tc2coCi0g
ICAgICAgICAgICAgIHJlcGVhdGVkX2NvbXBvc2l0ZV9jb250YWluZXI6OkFkZChyY19jb250YWlu
ZXIsIE5VTEwsIGt3YXJncykpOwotICAgICAgICAgIGlmIChuZXdfbXNnID09IE5VTEwpIHsKLSAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGt3YXJncyA9
PSBOVUxMKSB7Ci0gICAgICAgICAgICAvLyBuZXh0IHdhcyBub3QgYSBkaWN0LCBpdCdzIGEgbWVz
c2FnZSB3ZSBuZWVkIHRvIG1lcmdlCi0gICAgICAgICAgICBTY29wZWRQeU9iamVjdFB0ciBtZXJn
ZWQoTWVyZ2VGcm9tKAotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q01lc3NhZ2Uq
PihuZXdfbXNnLmdldCgpKSwgbmV4dC5nZXQoKSkpOwotICAgICAgICAgICAgaWYgKG1lcmdlZC5n
ZXQoKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsK
LSAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaG93IFB5SXRlcl9OZXh0KCkgZXhpdGVkLgotICAg
ICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9y
LT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNKSB7Ci0gICAgICAg
IFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyKiByc19jb250YWluZXIgPQotICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxSZXBlYXRlZFNjYWxhckNvbnRhaW5lcio+KGNvbnRhaW5lci5nZXQoKSk7
Ci0gICAgICAgIFNjb3BlZFB5T2JqZWN0UHRyIGl0ZXIoUHlPYmplY3RfR2V0SXRlcih2YWx1ZSkp
OwotICAgICAgICBpZiAoaXRlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgUHlFcnJfU2V0U3RyaW5n
KFB5RXhjX1R5cGVFcnJvciwgIlZhbHVlIG11c3QgYmUgaXRlcmFibGUiKTsKLSAgICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgU2NvcGVkUHlPYmplY3RQdHIgbmV4dDsKLSAg
ICAgICAgd2hpbGUgKChuZXh0LnJlc2V0KFB5SXRlcl9OZXh0KGl0ZXIuZ2V0KCkpKSkgIT0gTlVM
TCkgewotICAgICAgICAgIFNjb3BlZFB5T2JqZWN0UHRyIGVudW1fdmFsdWUoCi0gICAgICAgICAg
ICAgIEdldEludGVnZXJFbnVtVmFsdWUoKmRlc2NyaXB0b3IsIG5leHQuZ2V0KCkpKTsKLSAgICAg
ICAgICBpZiAoZW51bV92YWx1ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIFNjb3BlZFB5T2JqZWN0UHRyIG5ld19tc2cocmVwZWF0ZWRf
c2NhbGFyX2NvbnRhaW5lcjo6QXBwZW5kKAotICAgICAgICAgICAgICByc19jb250YWluZXIsIGVu
dW1fdmFsdWUuZ2V0KCkpKTsKLSAgICAgICAgICBpZiAobmV3X21zZyA9PSBOVUxMKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChQ
eUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGhvdyBQeUl0ZXJf
TmV4dCgpIGV4aXRlZC4KLSAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChTY29wZWRQeU9iamVjdFB0cihyZXBlYXRlZF9zY2FsYXJfY29u
dGFpbmVyOjpFeHRlbmQoCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxSZXBlYXRl
ZFNjYWxhckNvbnRhaW5lcio+KGNvbnRhaW5lci5nZXQoKSksCi0gICAgICAgICAgICAgICAgdmFs
dWUpKSA9PQotICAgICAgICAgICAgTlVMTCkgewotICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci0+Y3BwX3R5cGUoKSA9PSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAgICAgU2NvcGVkUHlPYmplY3RQ
dHIgbWVzc2FnZShHZXRBdHRyKHNlbGYsIG5hbWUpKTsKLSAgICAgIGlmIChtZXNzYWdlID09IE5V
TEwpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotICAgICAgQ01lc3NhZ2UqIGNtZXNz
YWdlID0gcmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+KG1lc3NhZ2UuZ2V0KCkpOwotICAgICAg
aWYgKFB5RGljdF9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKEluaXRBdHRyaWJ1dGVzKGNt
ZXNzYWdlLCB2YWx1ZSkgPCAwKSB7Ci0gICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICBTY29wZWRQeU9iamVjdFB0ciBtZXJnZWQoTWVyZ2VGcm9t
KGNtZXNzYWdlLCB2YWx1ZSkpOwotICAgICAgICBpZiAobWVyZ2VkID09IE5VTEwpIHsKLSAgICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
U2NvcGVkUHlPYmplY3RQdHIgbmV3X3ZhbDsKLSAgICAgIGlmIChkZXNjcmlwdG9yLT5jcHBfdHlw
ZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNKSB7Ci0gICAgICAgIG5ld192YWwu
cmVzZXQoR2V0SW50ZWdlckVudW1WYWx1ZSgqZGVzY3JpcHRvciwgdmFsdWUpKTsKLSAgICAgICAg
aWYgKG5ld192YWwgPT0gTlVMTCkgewotICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgaWYgKFNldEF0dHIoc2VsZiwgbmFtZSwgKG5ld192YWwuZ2V0KCkgPT0g
TlVMTCkgPyB2YWx1ZSA6IG5ld192YWwuZ2V0KCkpIDwKLSAgICAgICAgICAwKSB7Ci0gICAgICAg
IHJldHVybiAtMTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8vIEFs
bG9jYXRlcyBhbiBpbmNvbXBsZXRlIFB5dGhvbiBNZXNzYWdlOiB0aGUgY2FsbGVyIG11c3QgZmls
bCBzZWxmLT5tZXNzYWdlLAotLy8gc2VsZi0+b3duZXIgYW5kIGV2ZW50dWFsbHkgc2VsZi0+cGFy
ZW50LgotQ01lc3NhZ2UqIE5ld0VtcHR5TWVzc2FnZShDTWVzc2FnZUNsYXNzKiB0eXBlKSB7Ci0g
IENNZXNzYWdlKiBzZWxmID0gcmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+KAotICAgICAgUHlU
eXBlX0dlbmVyaWNBbGxvYygmdHlwZS0+c3VwZXIuaHRfdHlwZSwgMCkpOwotICBpZiAoc2VsZiA9
PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBzZWxmLT5tZXNzYWdlID0gTlVM
TDsKLSAgc2VsZi0+cGFyZW50ID0gTlVMTDsKLSAgc2VsZi0+cGFyZW50X2ZpZWxkX2Rlc2NyaXB0
b3IgPSBOVUxMOwotICBzZWxmLT5yZWFkX29ubHkgPSBmYWxzZTsKLSAgc2VsZi0+ZXh0ZW5zaW9u
cyA9IE5VTEw7Ci0KLSAgc2VsZi0+Y29tcG9zaXRlX2ZpZWxkcyA9IE5VTEw7Ci0KLSAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS8vIFRoZSBfX25ld19fIG1ldGhvZCBvZiBNZXNzYWdlIGNsYXNzZXMuCi0v
LyBDcmVhdGVzIGEgbmV3IEMrKyBtZXNzYWdlIGFuZCB0YWtlcyBvd25lcnNoaXAuCi1zdGF0aWMg
UHlPYmplY3QqIE5ldyhQeVR5cGVPYmplY3QqIGNscywKLSAgICAgICAgICAgICAgICAgICAgIFB5
T2JqZWN0KiB1bnVzZWRfYXJncywgUHlPYmplY3QqIHVudXNlZF9rd2FyZ3MpIHsKLSAgQ01lc3Nh
Z2VDbGFzcyogdHlwZSA9IENoZWNrTWVzc2FnZUNsYXNzKGNscyk7Ci0gIGlmICh0eXBlID09IE5V
TEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICAvLyBSZXRyaWV2ZSB0aGUgbWVzc2FnZSBk
ZXNjcmlwdG9yIGFuZCB0aGUgZGVmYXVsdCBpbnN0YW5jZSAoPXByb3RvdHlwZSkuCi0gIGNvbnN0
IERlc2NyaXB0b3IqIG1lc3NhZ2VfZGVzY3JpcHRvciA9IHR5cGUtPm1lc3NhZ2VfZGVzY3JpcHRv
cjsKLSAgaWYgKG1lc3NhZ2VfZGVzY3JpcHRvciA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLSAgY29uc3QgTWVzc2FnZSogZGVmYXVsdF9tZXNzYWdlID0gdHlwZS0+cHlfZGVzY3Jp
cHRvcl9wb29sLT5tZXNzYWdlX2ZhY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLT5HZXRQcm90b3R5cGUobWVzc2FnZV9kZXNjcmlwdG9yKTsKLSAgaWYgKGRlZmF1bHRf
bWVzc2FnZSA9PSBOVUxMKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwg
bWVzc2FnZV9kZXNjcmlwdG9yLT5mdWxsX25hbWUoKS5jX3N0cigpKTsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQotCi0gIENNZXNzYWdlKiBzZWxmID0gTmV3RW1wdHlNZXNzYWdlKHR5cGUpOwotICBp
ZiAoc2VsZiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgc2VsZi0+bWVzc2Fn
ZSA9IGRlZmF1bHRfbWVzc2FnZS0+TmV3KCk7Ci0gIHNlbGYtPm93bmVyLnJlc2V0KHNlbGYtPm1l
c3NhZ2UpOwotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQeU9iamVjdCo+KHNlbGYpOwotfQot
Ci0vLyBUaGUgX19pbml0X18gbWV0aG9kIG9mIE1lc3NhZ2UgY2xhc3Nlcy4KLS8vIEl0IGluaXRp
YWxpemVzIGZpZWxkcyBmcm9tIGtleXdvcmRzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCi1z
dGF0aWMgaW50IEluaXQoQ01lc3NhZ2UqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCog
a3dhcmdzKSB7Ci0gIGlmIChQeVR1cGxlX1NpemUoYXJncykgIT0gMCkgewotICAgIFB5RXJyX1Nl
dFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJObyBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhbGxvd2Vk
Iik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgcmV0dXJuIEluaXRBdHRyaWJ1dGVzKHNlbGYs
IGt3YXJncyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVhbGxvY2F0aW5nIGEgQ01lc3Nh
Z2UKLS8vCi0vLyBEZWFsbG9jYXRpbmcgYSBDTWVzc2FnZSByZXF1aXJlcyB0aGF0IHdlIGNsZWFy
IGFueSB3ZWFrIHJlZmVyZW5jZXMKLS8vIGZyb20gY2hpbGRyZW4gdG8gdGhlIG1lc3NhZ2UgYmVp
bmcgZGVhbGxvY2F0ZWQuCi0KLS8vIENsZWFyIHRoZSB3ZWFrIHJlZmVyZW5jZSBmcm9tIHRoZSBj
aGlsZCB0byB0aGUgcGFyZW50Lgotc3RydWN0IENsZWFyV2Vha1JlZmVyZW5jZXMgOiBwdWJsaWMg
Q2hpbGRWaXNpdG9yIHsKLSAgaW50IFZpc2l0UmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIoUmVw
ZWF0ZWRDb21wb3NpdGVDb250YWluZXIqIGNvbnRhaW5lcikgewotICAgIGNvbnRhaW5lci0+cGFy
ZW50ID0gTlVMTDsKLSAgICAvLyBUaGUgZWxlbWVudHMgaW4gdGhlIGNvbnRhaW5lciBoYXZlIHRo
ZSBzYW1lIHBhcmVudCBhcyB0aGUKLSAgICAvLyBjb250YWluZXIgaXRzZWxmLCBzbyBOVUxMIG91
dCB0aGF0IHBvaW50ZXIgYXMgd2VsbC4KLSAgICBjb25zdCBQeV9zc2l6ZV90IG4gPSBQeUxpc3Rf
R0VUX1NJWkUoY29udGFpbmVyLT5jaGlsZF9tZXNzYWdlcyk7Ci0gICAgZm9yIChQeV9zc2l6ZV90
IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgICBDTWVzc2FnZSogY2hpbGRfY21lc3NhZ2UgPSBy
ZWludGVycHJldF9jYXN0PENNZXNzYWdlKj4oCi0gICAgICAgICAgUHlMaXN0X0dFVF9JVEVNKGNv
bnRhaW5lci0+Y2hpbGRfbWVzc2FnZXMsIGkpKTsKLSAgICAgIGNoaWxkX2NtZXNzYWdlLT5wYXJl
bnQgPSBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludCBWaXNpdFJlcGVh
dGVkU2NhbGFyQ29udGFpbmVyKFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyKiBjb250YWluZXIpIHsK
LSAgICBjb250YWluZXItPnBhcmVudCA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBp
bnQgVmlzaXRNYXBDb250YWluZXIoTWFwQ29udGFpbmVyKiBjb250YWluZXIpIHsKLSAgICBjb250
YWluZXItPnBhcmVudCA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQgVmlzaXRD
TWVzc2FnZShDTWVzc2FnZSogY21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGRfZGVzY3JpcHRvcikgewotICAgIGNtZXNzYWdlLT5wYXJlbnQg
PSBOVUxMOwotICAgIHJldHVybiAwOwotICB9Ci19OwotCi1zdGF0aWMgdm9pZCBEZWFsbG9jKENN
ZXNzYWdlKiBzZWxmKSB7Ci0gIC8vIE51bGwgb3V0IGFsbCB3ZWFrIHJlZmVyZW5jZXMgZnJvbSBj
aGlsZHJlbiB0byB0aGlzIG1lc3NhZ2UuCi0gIEdPT0dMRV9DSEVDS19FUSgwLCBGb3JFYWNoQ29t
cG9zaXRlRmllbGQoc2VsZiwgQ2xlYXJXZWFrUmVmZXJlbmNlcygpKSk7Ci0gIGlmIChzZWxmLT5l
eHRlbnNpb25zKSB7Ci0gICAgc2VsZi0+ZXh0ZW5zaW9ucy0+cGFyZW50ID0gTlVMTDsKLSAgfQot
Ci0gIFB5X0NMRUFSKHNlbGYtPmV4dGVuc2lvbnMpOwotICBQeV9DTEVBUihzZWxmLT5jb21wb3Np
dGVfZmllbGRzKTsKLSAgc2VsZi0+b3duZXIucmVzZXQoKTsKLSAgUHlfVFlQRShzZWxmKS0+dHBf
ZnJlZShyZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oc2VsZikpOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotCi1QeU9iamVjdCogSXNJbml0aWFsaXplZChDTWVzc2FnZSogc2VsZiwgUHlPYmpl
Y3QqIGFyZ3MpIHsKLSAgUHlPYmplY3QqIGVycm9ycyA9IE5VTEw7Ci0gIGlmIChQeUFyZ19QYXJz
ZVR1cGxlKGFyZ3MsICJ8TyIsICZlcnJvcnMpIDwgMCkgewotICAgIHJldHVybiBOVUxMOwotICB9
Ci0gIGlmIChzZWxmLT5tZXNzYWdlLT5Jc0luaXRpYWxpemVkKCkpIHsKLSAgICBQeV9SRVRVUk5f
VFJVRTsKLSAgfQotICBpZiAoZXJyb3JzICE9IE5VTEwpIHsKLSAgICBTY29wZWRQeU9iamVjdFB0
ciBpbml0aWFsaXphdGlvbl9lcnJvcnMoCi0gICAgICAgIEZpbmRJbml0aWFsaXphdGlvbkVycm9y
cyhzZWxmKSk7Ci0gICAgaWYgKGluaXRpYWxpemF0aW9uX2Vycm9ycyA9PSBOVUxMKSB7Ci0gICAg
ICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgU2NvcGVkUHlPYmplY3RQdHIgZXh0ZW5kX25hbWUo
UHlTdHJpbmdfRnJvbVN0cmluZygiZXh0ZW5kIikpOwotICAgIGlmIChleHRlbmRfbmFtZSA9PSBO
VUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgU2NvcGVkUHlPYmplY3RQdHIg
cmVzdWx0KFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKAotICAgICAgICBlcnJvcnMsCi0gICAg
ICAgIGV4dGVuZF9uYW1lLmdldCgpLAotICAgICAgICBpbml0aWFsaXphdGlvbl9lcnJvcnMuZ2V0
KCksCi0gICAgICAgIE5VTEwpKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLSAgfQotICBQeV9SRVRVUk5fRkFMU0U7Ci19Ci0KLVB5T2JqZWN0
KiBIYXNGaWVsZEJ5RGVzY3JpcHRvcigKLSAgICBDTWVzc2FnZSogc2VsZiwgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlwdG9yKSB7Ci0gIE1lc3NhZ2UqIG1lc3NhZ2UgPSBzZWxm
LT5tZXNzYWdlOwotICBpZiAoIUNoZWNrRmllbGRCZWxvbmdzVG9NZXNzYWdlKGZpZWxkX2Rlc2Ny
aXB0b3IsIG1lc3NhZ2UpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgaWYgKGZpZWxkX2Rl
c2NyaXB0b3ItPmxhYmVsKCkgPT0gRmllbGREZXNjcmlwdG9yOjpMQUJFTF9SRVBFQVRFRCkgewot
ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19LZXlFcnJvciwKLSAgICAgICAgICAgICAgICAgICAg
IkZpZWxkIGlzIHJlcGVhdGVkLiBBIHNpbmd1bGFyIG1ldGhvZCBpcyByZXF1aXJlZC4iKTsKLSAg
ICByZXR1cm4gTlVMTDsKLSAgfQotICBib29sIGhhc19maWVsZCA9Ci0gICAgICBtZXNzYWdlLT5H
ZXRSZWZsZWN0aW9uKCktPkhhc0ZpZWxkKCptZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yKTsKLSAg
cmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhoYXNfZmllbGQgPyAxIDogMCk7Ci19Ci0KLWNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogRmluZEZpZWxkV2l0aE9uZW9mcygKLSAgICBjb25zdCBNZXNzYWdlKiBt
ZXNzYWdlLCBjb25zdCBzdHJpbmcmIGZpZWxkX25hbWUsIGJvb2wqIGluX29uZW9mKSB7Ci0gICpp
bl9vbmVvZiA9IGZhbHNlOwotICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gbWVzc2Fn
ZS0+R2V0RGVzY3JpcHRvcigpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2Ny
aXB0b3IgPQotICAgICAgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKGZpZWxkX25hbWUpOwot
ICBpZiAoZmllbGRfZGVzY3JpcHRvciAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuIGZpZWxkX2Rlc2Ny
aXB0b3I7Ci0gIH0KLSAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZl9kZXNjID0KLSAgICAg
IGRlc2NyaXB0b3ItPkZpbmRPbmVvZkJ5TmFtZShmaWVsZF9uYW1lKTsKLSAgaWYgKG9uZW9mX2Rl
c2MgIT0gTlVMTCkgewotICAgICppbl9vbmVvZiA9IHRydWU7Ci0gICAgcmV0dXJuIG1lc3NhZ2Ut
PkdldFJlZmxlY3Rpb24oKS0+R2V0T25lb2ZGaWVsZERlc2NyaXB0b3IoKm1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b25lb2ZfZGVzYyk7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWJvb2wgQ2hlY2tIYXNQcmVz
ZW5jZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IsIGJvb2wgaW5fb25l
b2YpIHsKLSAgaWYgKGZpZWxkX2Rlc2NyaXB0b3ItPmxhYmVsKCkgPT0gRmllbGREZXNjcmlwdG9y
OjpMQUJFTF9SRVBFQVRFRCkgewotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAot
ICAgICAgICAgICAgICAgICAiUHJvdG9jb2wgbWVzc2FnZSBoYXMgbm8gc2luZ3VsYXIgXCIlc1wi
IGZpZWxkLiIsCi0gICAgICAgICAgICAgICAgIGZpZWxkX2Rlc2NyaXB0b3ItPm5hbWUoKS5jX3N0
cigpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAoZmllbGRfZGVzY3JpcHRvci0+
ZmlsZSgpLT5zeW50YXgoKSA9PSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFYX1BST1RPMykgewotICAg
IC8vIEhhc0ZpZWxkKCkgZm9yIGEgb25lb2YgKml0c2VsZiogaXNuJ3Qgc3VwcG9ydGVkLgotICAg
IGlmIChpbl9vbmVvZikgewotICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0g
ICAgICAgICAgICAgICAgICAgIkNhbid0IHRlc3Qgb25lb2YgZmllbGQgXCIlc1wiIGZvciBwcmVz
ZW5jZSBpbiBwcm90bzMsIHVzZSAiCi0gICAgICAgICAgICAgICAgICAgIldoaWNoT25lb2YgaW5z
dGVhZC4iLAotICAgICAgICAgICAgICAgICAgIGZpZWxkX2Rlc2NyaXB0b3ItPmNvbnRhaW5pbmdf
b25lb2YoKS0+bmFtZSgpLmNfc3RyKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIC4uLmJ1dCBIYXNGaWVsZCgpIGZvciBmaWVsZHMgKmluKiBhIG9uZW9mIGlzIHN1cHBv
cnRlZC4KLSAgICBpZiAoZmllbGRfZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVvZigpICE9IE5V
TEwpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChmaWVsZF9kZXNjcmlw
dG9yLT5jcHBfdHlwZSgpICE9IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSB7Ci0g
ICAgICBQeUVycl9Gb3JtYXQoCi0gICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAg
ICAiQ2FuJ3QgdGVzdCBub24tc3VibWVzc2FnZSBmaWVsZCBcIiVzXCIgZm9yIHByZXNlbmNlIGlu
IHByb3RvMy4iLAotICAgICAgICAgIGZpZWxkX2Rlc2NyaXB0b3ItPm5hbWUoKS5jX3N0cigpKTsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQot
UHlPYmplY3QqIEhhc0ZpZWxkKENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCogYXJnKSB7Ci0gIGNo
YXIqIGZpZWxkX25hbWU7Ci0gIFB5X3NzaXplX3Qgc2l6ZTsKLSNpZiBQWV9NQUpPUl9WRVJTSU9O
IDwgMwotICBpZiAoUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKGFyZywgJmZpZWxkX25hbWUsICZz
aXplKSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotI2Vsc2UKLSAgZmllbGRfbmFtZSA9
IFB5VW5pY29kZV9Bc1VURjhBbmRTaXplKGFyZywgJnNpemUpOwotICBpZiAoIWZpZWxkX25hbWUp
IHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotI2VuZGlmCi0KLSAgTWVzc2FnZSogbWVzc2FnZSA9
IHNlbGYtPm1lc3NhZ2U7Ci0gIGJvb2wgaXNfaW5fb25lb2Y7Ci0gIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGRfZGVzY3JpcHRvciA9Ci0gICAgICBGaW5kRmllbGRXaXRoT25lb2ZzKG1lc3Nh
Z2UsIHN0cmluZyhmaWVsZF9uYW1lLCBzaXplKSwgJmlzX2luX29uZW9mKTsKLSAgaWYgKGZpZWxk
X2Rlc2NyaXB0b3IgPT0gTlVMTCkgewotICAgIGlmICghaXNfaW5fb25lb2YpIHsKLSAgICAgIFB5
RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiVW5rbm93biBmaWVsZCAlcy4iLCBmaWVsZF9u
YW1lKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICBQeV9SRVRVUk5f
RkFMU0U7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFDaGVja0hhc1ByZXNlbmNlKGZpZWxkX2Rlc2Ny
aXB0b3IsIGlzX2luX29uZW9mKSkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKG1l
c3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+SGFzRmllbGQoKm1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0
b3IpKSB7Ci0gICAgUHlfUkVUVVJOX1RSVUU7Ci0gIH0KLSAgaWYgKCFtZXNzYWdlLT5HZXRSZWZs
ZWN0aW9uKCktPlN1cHBvcnRzVW5rbm93bkVudW1WYWx1ZXMoKSAmJgotICAgICAgZmllbGRfZGVz
Y3JpcHRvci0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTSkgewot
ICAgIC8vIFNwZWNpYWwgY2FzZTogUHl0aG9uIEhhc0ZpZWxkKCkgZGlmZmVycyBpbiBzZW1hbnRp
Y3MgZnJvbSBDKysKLSAgICAvLyBzbGlnaHRseTogd2UgcmV0dXJuIEhhc0ZpZWxkKCdlbnVtX2Zp
ZWxkJykgPT0gdHJ1ZSBpZiB0aGVyZSBpcwotICAgIC8vIGFuIHVua25vd24gZW51bSB2YWx1ZSBw
cmVzZW50LiBUbyBpbXBsZW1lbnQgdGhpcyB3ZSBoYXZlIHRvCi0gICAgLy8gbG9vayBpbiB0aGUg
VW5rbm93bkZpZWxkU2V0LgotICAgIGNvbnN0IFVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVs
ZF9zZXQgPQotICAgICAgICBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldFVua25vd25GaWVs
ZHMoKm1lc3NhZ2UpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdW5rbm93bl9maWVsZF9zZXQu
ZmllbGRfY291bnQoKTsgKytpKSB7Ci0gICAgICBpZiAodW5rbm93bl9maWVsZF9zZXQuZmllbGQo
aSkubnVtYmVyKCkgPT0gZmllbGRfZGVzY3JpcHRvci0+bnVtYmVyKCkpIHsKLSAgICAgICAgUHlf
UkVUVVJOX1RSVUU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIFB5X1JFVFVSTl9GQUxTRTsKLX0K
LQotUHlPYmplY3QqIENsZWFyRXh0ZW5zaW9uKENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCogZXh0
ZW5zaW9uKSB7Ci0gIGlmIChzZWxmLT5leHRlbnNpb25zICE9IE5VTEwpIHsKLSAgICByZXR1cm4g
ZXh0ZW5zaW9uX2RpY3Q6OkNsZWFyRXh0ZW5zaW9uKHNlbGYtPmV4dGVuc2lvbnMsIGV4dGVuc2lv
bik7Ci0gIH0gZWxzZSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0g
R2V0RXh0ZW5zaW9uRGVzY3JpcHRvcihleHRlbnNpb24pOwotICAgIGlmIChkZXNjcmlwdG9yID09
IE5VTEwpIHsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoU2NvcGVkUHlPYmpl
Y3RQdHIoQ2xlYXJGaWVsZEJ5RGVzY3JpcHRvcihzZWxmLCBkZXNjcmlwdG9yKSkgPT0gTlVMTCkg
ewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICB9Ci0gIFB5X1JFVFVSTl9OT05FOwotfQot
Ci1QeU9iamVjdCogSGFzRXh0ZW5zaW9uKENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCogZXh0ZW5z
aW9uKSB7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IEdldEV4dGVuc2lv
bkRlc2NyaXB0b3IoZXh0ZW5zaW9uKTsKLSAgaWYgKGRlc2NyaXB0b3IgPT0gTlVMTCkgewotICAg
IHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBIYXNGaWVsZEJ5RGVzY3JpcHRvcihzZWxmLCBk
ZXNjcmlwdG9yKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZWxlYXNpbmcgbWVzc2FnZXMK
LS8vCi0vLyBUaGUgUHl0aG9uIEFQSSdzIENsZWFyRmllbGQoKSBhbmQgQ2xlYXIoKSBtZXRob2Rz
IGJlaGF2ZQotLy8gZGlmZmVyZW50bHkgdGhhbiB0aGVpciBDKysgY291bnRlcnBhcnRzLiAgV2hp
bGUgdGhlIEMrKyB2ZXJzaW9ucwotLy8gY2xlYXJzIHRoZSBjaGlsZHJlbiB0aGUgUHl0aG9uIHZl
cnNpb25zIGRldGFjaGVzIHRoZSBjaGlsZHJlbiwKLS8vIHdpdGhvdXQgdG91Y2hpbmcgdGhlaXIg
Y29udGVudC4gIFRoaXMgaW1wZWRhbmNlIG1pc21hdGNoIGNhdXNlcwotLy8gc29tZSBjb21wbGV4
aXR5IGluIHRoZSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgY2FwdHVyZWQgaW4gdGhpcwotLy8g
c2VjdGlvbi4KLS8vCi0vLyBXaGVuIGEgQ01lc3NhZ2UgZmllbGQgaXMgY2xlYXJlZCB3ZSBuZWVk
IHRvOgotLy8KLS8vICogUmVsZWFzZSB0aGUgTWVzc2FnZSB1c2VkIGFzIHRoZSBiYWNraW5nIHN0
b3JlIGZvciB0aGUgQ01lc3NhZ2UKLS8vICAgZnJvbSBpdHMgcGFyZW50LgotLy8KLS8vICogQ2hh
bmdlIHRoZSBvd25lciBmaWVsZCBvZiB0aGUgcmVsZWFzZWQgQ01lc3NhZ2UgYW5kIGFsbCBvZiBp
dHMKLS8vICAgY2hpbGRyZW4gdG8gcG9pbnQgdG8gdGhlIG5ld2x5IHJlbGVhc2VkIE1lc3NhZ2Uu
Ci0vLwotLy8gKiBDbGVhciB0aGUgd2VhayByZWZlcmVuY2VzIGZyb20gdGhlIHJlbGVhc2VkIENN
ZXNzYWdlIHRvIHRoZQotLy8gICBwYXJlbnQuCi0vLwotLy8gV2hlbiBhIFJlcGVhdGVkQ29tcG9z
aXRlQ29udGFpbmVyIGZpZWxkIGlzIGNsZWFyZWQgd2UgbmVlZCB0bzoKLS8vCi0vLyAqIFJlbGVh
c2UgYWxsIHRoZSBNZXNzYWdlIHVzZWQgYXMgdGhlIGJhY2tpbmcgc3RvcmUgZm9yIHRoZQotLy8g
ICBDTWVzc2FnZXMgc3RvcmVkIGluIHRoZSBjb250YWluZXIuCi0vLwotLy8gKiBDaGFuZ2UgdGhl
IG93bmVyIGZpZWxkIG9mIGFsbCB0aGUgcmVsZWFzZWQgQ01lc3NhZ2UgYW5kIGFsbCBvZgotLy8g
ICB0aGVpciBjaGlsZHJlbiB0byBwb2ludCB0byB0aGUgbmV3bHkgcmVsZWFzZWQgTWVzc2FnZXMu
Ci0vLwotLy8gKiBDbGVhciB0aGUgd2VhayByZWZlcmVuY2VzIGZyb20gdGhlIHJlbGVhc2VkIGNv
bnRhaW5lciB0byB0aGUKLS8vICAgcGFyZW50LgotCi1zdHJ1Y3QgU2V0T3duZXJWaXNpdG9yIDog
cHVibGljIENoaWxkVmlzaXRvciB7Ci0gIC8vIG5ld19vd25lciBtdXN0IG91dGxpdmUgdGhpcyBv
YmplY3QuCi0gIGV4cGxpY2l0IFNldE93bmVyVmlzaXRvcihjb25zdCBzaGFyZWRfcHRyPE1lc3Nh
Z2U+JiBuZXdfb3duZXIpCi0gICAgICA6IG5ld19vd25lcl8obmV3X293bmVyKSB7fQotCi0gIGlu
dCBWaXNpdFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKFJlcGVhdGVkQ29tcG9zaXRlQ29udGFp
bmVyKiBjb250YWluZXIpIHsKLSAgICByZXBlYXRlZF9jb21wb3NpdGVfY29udGFpbmVyOjpTZXRP
d25lcihjb250YWluZXIsIG5ld19vd25lcl8pOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50
IFZpc2l0UmVwZWF0ZWRTY2FsYXJDb250YWluZXIoUmVwZWF0ZWRTY2FsYXJDb250YWluZXIqIGNv
bnRhaW5lcikgewotICAgIHJlcGVhdGVkX3NjYWxhcl9jb250YWluZXI6OlNldE93bmVyKGNvbnRh
aW5lciwgbmV3X293bmVyXyk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQgVmlzaXRNYXBD
b250YWluZXIoTWFwQ29udGFpbmVyKiBjb250YWluZXIpIHsKLSAgICBjb250YWluZXItPlNldE93
bmVyKG5ld19vd25lcl8pOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50IFZpc2l0Q01lc3Nh
Z2UoQ01lc3NhZ2UqIGNtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IpIHsKLSAgICByZXR1cm4gU2V0T3duZXIoY21lc3Nh
Z2UsIG5ld19vd25lcl8pOwotICB9Ci0KLSBwcml2YXRlOgotICBjb25zdCBzaGFyZWRfcHRyPE1l
c3NhZ2U+JiBuZXdfb3duZXJfOwotfTsKLQotLy8gQ2hhbmdlIHRoZSBvd25lciBvZiB0aGlzIENN
ZXNzYWdlIGFuZCBhbGwgaXRzIGNoaWxkcmVuLCByZWN1cnNpdmVseS4KLWludCBTZXRPd25lcihD
TWVzc2FnZSogc2VsZiwgY29uc3Qgc2hhcmVkX3B0cjxNZXNzYWdlPiYgbmV3X293bmVyKSB7Ci0g
IHNlbGYtPm93bmVyID0gbmV3X293bmVyOwotICBpZiAoRm9yRWFjaENvbXBvc2l0ZUZpZWxkKHNl
bGYsIFNldE93bmVyVmlzaXRvcihuZXdfb3duZXIpKSA9PSAtMSkKLSAgICByZXR1cm4gLTE7Ci0g
IHJldHVybiAwOwotfQotCi0vLyBSZWxlYXNlcyB0aGUgbWVzc2FnZSBzcGVjaWZpZWQgYnkgJ2Zp
ZWxkJyBhbmQgcmV0dXJucyB0aGUKLS8vIHBvaW50ZXIuIElmIHRoZSBmaWVsZCBkb2VzIG5vdCBl
eGlzdCBhIG5ldyBtZXNzYWdlIGlzIGNyZWF0ZWQgdXNpbmcKLS8vICdkZXNjcmlwdG9yJy4gVGhl
IGNhbGxlciB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHJldHVybmVkIHBvaW50ZXIuCi1NZXNzYWdl
KiBSZWxlYXNlTWVzc2FnZShDTWVzc2FnZSogc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IpIHsKLSAgTWVzc2FnZUZhY3Rv
cnkqIG1lc3NhZ2VfZmFjdG9yeSA9IEdldEZhY3RvcnlGb3JNZXNzYWdlKHNlbGYpOwotICBNZXNz
YWdlKiByZWxlYXNlZF9tZXNzYWdlID0gc2VsZi0+bWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5S
ZWxlYXNlTWVzc2FnZSgKLSAgICAgIHNlbGYtPm1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IsIG1l
c3NhZ2VfZmFjdG9yeSk7Ci0gIC8vIFJlbGVhc2VNZXNzYWdlIHdpbGwgcmV0dXJuIE5VTEwgd2hp
Y2ggZGlmZmVycyBmcm9tCi0gIC8vIGNoaWxkX2NtZXNzYWdlLT5tZXNzYWdlLCBpZiB0aGUgZmll
bGQgZG9lcyBub3QgZXhpc3QuICBJbiB0aGlzIGNhc2UsCi0gIC8vIHRoZSBsYXR0ZXIgcG9pbnRz
IHRvIHRoZSBkZWZhdWx0IGluc3RhbmNlIHZpYSBhIGNvbnN0X2Nhc3Q8Piwgc28gd2UKLSAgLy8g
aGF2ZSB0byByZXNldCBpdCB0byBhIG5ldyBtdXRhYmxlIG9iamVjdCBzaW5jZSB3ZSBhcmUgdGFr
aW5nIG93bmVyc2hpcC4KLSAgaWYgKHJlbGVhc2VkX21lc3NhZ2UgPT0gTlVMTCkgewotICAgIGNv
bnN0IE1lc3NhZ2UqIHByb3RvdHlwZSA9IG1lc3NhZ2VfZmFjdG9yeS0+R2V0UHJvdG90eXBlKGRl
c2NyaXB0b3IpOwotICAgIEdPT0dMRV9EQ0hFQ0socHJvdG90eXBlICE9IE5VTEwpOwotICAgIHJl
bGVhc2VkX21lc3NhZ2UgPSBwcm90b3R5cGUtPk5ldygpOwotICB9Ci0KLSAgcmV0dXJuIHJlbGVh
c2VkX21lc3NhZ2U7Ci19Ci0KLWludCBSZWxlYXNlU3ViTWVzc2FnZShDTWVzc2FnZSogc2VsZiwK
LSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2Ny
aXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgQ01lc3NhZ2UqIGNoaWxkX2NtZXNzYWdlKSB7
Ci0gIC8vIFJlbGVhc2UgdGhlIE1lc3NhZ2UKLSAgc2hhcmVkX3B0cjxNZXNzYWdlPiByZWxlYXNl
ZF9tZXNzYWdlKFJlbGVhc2VNZXNzYWdlKAotICAgICAgc2VsZiwgY2hpbGRfY21lc3NhZ2UtPm1l
c3NhZ2UtPkdldERlc2NyaXB0b3IoKSwgZmllbGRfZGVzY3JpcHRvcikpOwotICBjaGlsZF9jbWVz
c2FnZS0+bWVzc2FnZSA9IHJlbGVhc2VkX21lc3NhZ2UuZ2V0KCk7Ci0gIGNoaWxkX2NtZXNzYWdl
LT5vd25lci5zd2FwKHJlbGVhc2VkX21lc3NhZ2UpOwotICBjaGlsZF9jbWVzc2FnZS0+cGFyZW50
ID0gTlVMTDsKLSAgY2hpbGRfY21lc3NhZ2UtPnBhcmVudF9maWVsZF9kZXNjcmlwdG9yID0gTlVM
TDsKLSAgY2hpbGRfY21lc3NhZ2UtPnJlYWRfb25seSA9IGZhbHNlOwotICByZXR1cm4gRm9yRWFj
aENvbXBvc2l0ZUZpZWxkKGNoaWxkX2NtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNldE93bmVyVmlzaXRvcihjaGlsZF9jbWVzc2FnZS0+b3duZXIpKTsKLX0KLQotc3Ry
dWN0IFJlbGVhc2VDaGlsZCA6IHB1YmxpYyBDaGlsZFZpc2l0b3IgewotICAvLyBtZXNzYWdlIG11
c3Qgb3V0bGl2ZSB0aGlzIG9iamVjdC4KLSAgZXhwbGljaXQgUmVsZWFzZUNoaWxkKENNZXNzYWdl
KiBwYXJlbnQpIDoKLSAgICAgIHBhcmVudF8ocGFyZW50KSB7fQotCi0gIGludCBWaXNpdFJlcGVh
dGVkQ29tcG9zaXRlQ29udGFpbmVyKFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKiBjb250YWlu
ZXIpIHsKLSAgICByZXR1cm4gcmVwZWF0ZWRfY29tcG9zaXRlX2NvbnRhaW5lcjo6UmVsZWFzZSgK
LSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lcio+KGNv
bnRhaW5lcikpOwotICB9Ci0KLSAgaW50IFZpc2l0UmVwZWF0ZWRTY2FsYXJDb250YWluZXIoUmVw
ZWF0ZWRTY2FsYXJDb250YWluZXIqIGNvbnRhaW5lcikgewotICAgIHJldHVybiByZXBlYXRlZF9z
Y2FsYXJfY29udGFpbmVyOjpSZWxlYXNlKAotICAgICAgICByZWludGVycHJldF9jYXN0PFJlcGVh
dGVkU2NhbGFyQ29udGFpbmVyKj4oY29udGFpbmVyKSk7Ci0gIH0KLQotICBpbnQgVmlzaXRNYXBD
b250YWluZXIoTWFwQ29udGFpbmVyKiBjb250YWluZXIpIHsKLSAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxNYXBDb250YWluZXIqPihjb250YWluZXIpLT5SZWxlYXNlKCk7Ci0gIH0KLQotICBp
bnQgVmlzaXRDTWVzc2FnZShDTWVzc2FnZSogY21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGRfZGVzY3JpcHRvcikgewotICAgIHJldHVybiBS
ZWxlYXNlU3ViTWVzc2FnZShwYXJlbnRfLCBmaWVsZF9kZXNjcmlwdG9yLAotICAgICAgICByZWlu
dGVycHJldF9jYXN0PENNZXNzYWdlKj4oY21lc3NhZ2UpKTsKLSAgfQotCi0gIENNZXNzYWdlKiBw
YXJlbnRfOwotfTsKLQotaW50IEludGVybmFsUmVsZWFzZUZpZWxkQnlEZXNjcmlwdG9yKAotICAg
IENNZXNzYWdlKiBzZWxmLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGRfZGVzY3Jp
cHRvciwKLSAgICBQeU9iamVjdCogY29tcG9zaXRlX2ZpZWxkKSB7Ci0gIHJldHVybiBWaXNpdENv
bXBvc2l0ZUZpZWxkKAotICAgICAgZmllbGRfZGVzY3JpcHRvciwKLSAgICAgIGNvbXBvc2l0ZV9m
aWVsZCwKLSAgICAgIFJlbGVhc2VDaGlsZChzZWxmKSk7Ci19Ci0KLVB5T2JqZWN0KiBDbGVhckZp
ZWxkQnlEZXNjcmlwdG9yKAotICAgIENNZXNzYWdlKiBzZWxmLAotICAgIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZGVzY3JpcHRvcikgewotICBpZiAoIUNoZWNrRmllbGRCZWxvbmdzVG9NZXNzYWdl
KGRlc2NyaXB0b3IsIHNlbGYtPm1lc3NhZ2UpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAg
QXNzdXJlV3JpdGFibGUoc2VsZik7Ci0gIHNlbGYtPm1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+
Q2xlYXJGaWVsZChzZWxmLT5tZXNzYWdlLCBkZXNjcmlwdG9yKTsKLSAgUHlfUkVUVVJOX05PTkU7
Ci19Ci0KLVB5T2JqZWN0KiBDbGVhckZpZWxkKENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCogYXJn
KSB7Ci0gIGlmICghUHlTdHJpbmdfQ2hlY2soYXJnKSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQ
eUV4Y19UeXBlRXJyb3IsICJmaWVsZCBuYW1lIG11c3QgYmUgYSBzdHJpbmciKTsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0gIGNvbnN0IGNoYXIqIGZp
ZWxkX25hbWUgPSBQeVN0cmluZ19BU19TVFJJTkcoYXJnKTsKLSAgUHlfc3NpemVfdCBzaXplID0g
UHlTdHJpbmdfR0VUX1NJWkUoYXJnKTsKLSNlbHNlCi0gIFB5X3NzaXplX3Qgc2l6ZTsKLSAgY29u
c3QgY2hhciogZmllbGRfbmFtZSA9IFB5VW5pY29kZV9Bc1VURjhBbmRTaXplKGFyZywgJnNpemUp
OwotI2VuZGlmCi0gIEFzc3VyZVdyaXRhYmxlKHNlbGYpOwotICBNZXNzYWdlKiBtZXNzYWdlID0g
c2VsZi0+bWVzc2FnZTsKLSAgU2NvcGVkUHlPYmplY3RQdHIgYXJnX2luX29uZW9mOwotICBib29s
IGlzX2luX29uZW9mOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3Ig
PQotICAgICAgRmluZEZpZWxkV2l0aE9uZW9mcyhtZXNzYWdlLCBzdHJpbmcoZmllbGRfbmFtZSwg
c2l6ZSksICZpc19pbl9vbmVvZik7Ci0gIGlmIChmaWVsZF9kZXNjcmlwdG9yID09IE5VTEwpIHsK
LSAgICBpZiAoIWlzX2luX29uZW9mKSB7Ci0gICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVF
cnJvciwKLSAgICAgICAgICAgICAgICAgICAiUHJvdG9jb2wgbWVzc2FnZSBoYXMgbm8gXCIlc1wi
IGZpZWxkLiIsIGZpZWxkX25hbWUpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIFB5X1JFVFVSTl9OT05FOwotICAgIH0KLSAgfSBlbHNlIGlmIChpc19pbl9vbmVvZikg
ewotICAgIGNvbnN0IHN0cmluZyYgbmFtZSA9IGZpZWxkX2Rlc2NyaXB0b3ItPm5hbWUoKTsKLSAg
ICBhcmdfaW5fb25lb2YucmVzZXQoUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUobmFtZS5jX3N0
cigpLCBuYW1lLnNpemUoKSkpOwotICAgIGFyZyA9IGFyZ19pbl9vbmVvZi5nZXQoKTsKLSAgfQot
Ci0gIFB5T2JqZWN0KiBjb21wb3NpdGVfZmllbGQgPSBzZWxmLT5jb21wb3NpdGVfZmllbGRzID8K
LSAgICAgIFB5RGljdF9HZXRJdGVtKHNlbGYtPmNvbXBvc2l0ZV9maWVsZHMsIGFyZykgOiBOVUxM
OwotCi0gIC8vIE9ubHkgcmVsZWFzZSB0aGUgZmllbGQgaWYgdGhlcmUncyBhIHBvc3NpYmlsaXR5
IHRoYXQgdGhlcmUgYXJlCi0gIC8vIHJlZmVyZW5jZXMgdG8gaXQuCi0gIGlmIChjb21wb3NpdGVf
ZmllbGQgIT0gTlVMTCkgewotICAgIGlmIChJbnRlcm5hbFJlbGVhc2VGaWVsZEJ5RGVzY3JpcHRv
cihzZWxmLCBmaWVsZF9kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wb3NpdGVfZmllbGQpIDwgMCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotICAgIFB5RGljdF9EZWxJdGVtKHNlbGYtPmNvbXBvc2l0ZV9maWVsZHMsIGFyZyk7Ci0g
IH0KLSAgbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5DbGVhckZpZWxkKG1lc3NhZ2UsIGZpZWxk
X2Rlc2NyaXB0b3IpOwotICBpZiAoZmllbGRfZGVzY3JpcHRvci0+Y3BwX3R5cGUoKSA9PSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTSAmJgotICAgICAgIW1lc3NhZ2UtPkdldFJlZmxlY3Rp
b24oKS0+U3VwcG9ydHNVbmtub3duRW51bVZhbHVlcygpKSB7Ci0gICAgVW5rbm93bkZpZWxkU2V0
KiB1bmtub3duX2ZpZWxkX3NldCA9Ci0gICAgICAgIG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+
TXV0YWJsZVVua25vd25GaWVsZHMobWVzc2FnZSk7Ci0gICAgdW5rbm93bl9maWVsZF9zZXQtPkRl
bGV0ZUJ5TnVtYmVyKGZpZWxkX2Rlc2NyaXB0b3ItPm51bWJlcigpKTsKLSAgfQotCi0gIFB5X1JF
VFVSTl9OT05FOwotfQotCi1QeU9iamVjdCogQ2xlYXIoQ01lc3NhZ2UqIHNlbGYpIHsKLSAgQXNz
dXJlV3JpdGFibGUoc2VsZik7Ci0gIGlmIChGb3JFYWNoQ29tcG9zaXRlRmllbGQoc2VsZiwgUmVs
ZWFzZUNoaWxkKHNlbGYpKSA9PSAtMSkKLSAgICByZXR1cm4gTlVMTDsKLSAgUHlfQ0xFQVIoc2Vs
Zi0+ZXh0ZW5zaW9ucyk7Ci0gIGlmIChzZWxmLT5jb21wb3NpdGVfZmllbGRzKSB7Ci0gICAgUHlE
aWN0X0NsZWFyKHNlbGYtPmNvbXBvc2l0ZV9maWVsZHMpOwotICB9Ci0gIHNlbGYtPm1lc3NhZ2Ut
PkNsZWFyKCk7Ci0gIFB5X1JFVFVSTl9OT05FOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3Rh
dGljIHN0cmluZyBHZXRNZXNzYWdlTmFtZShDTWVzc2FnZSogc2VsZikgewotICBpZiAoc2VsZi0+
cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3IgIT0gTlVMTCkgewotICAgIHJldHVybiBzZWxmLT5wYXJl
bnRfZmllbGRfZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJu
IHNlbGYtPm1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKS0+ZnVsbF9uYW1lKCk7Ci0gIH0KLX0KLQot
c3RhdGljIFB5T2JqZWN0KiBTZXJpYWxpemVUb1N0cmluZyhDTWVzc2FnZSogc2VsZiwgUHlPYmpl
Y3QqIGFyZ3MpIHsKLSAgaWYgKCFzZWxmLT5tZXNzYWdlLT5Jc0luaXRpYWxpemVkKCkpIHsKLSAg
ICBTY29wZWRQeU9iamVjdFB0ciBlcnJvcnMoRmluZEluaXRpYWxpemF0aW9uRXJyb3JzKHNlbGYp
KTsKLSAgICBpZiAoZXJyb3JzID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0K
LSAgICBTY29wZWRQeU9iamVjdFB0ciBjb21tYShQeVN0cmluZ19Gcm9tU3RyaW5nKCIsIikpOwot
ICAgIGlmIChjb21tYSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAg
U2NvcGVkUHlPYmplY3RQdHIgam9pbmVkKAotICAgICAgICBQeU9iamVjdF9DYWxsTWV0aG9kKGNv
bW1hLmdldCgpLCAiam9pbiIsICJPIiwgZXJyb3JzLmdldCgpKSk7Ci0gICAgaWYgKGpvaW5lZCA9
PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvLyBUT0RPKGhhYmVy
bWFuKTogdGhpcyBpcyBhIChob3BlZnVsbHkgdGVtcG9yYXJ5KSBoYWNrLiAgVGhlIHVuaXQgdGVz
dGluZwotICAgIC8vIGluZnJhc3RydWN0dXJlIHJlbG9hZHMgYWxsIHB1cmUtUHl0aG9uIG1vZHVs
ZXMgZm9yIGV2ZXJ5IHRlc3QsIGJ1dCBub3QKLSAgICAvLyBDKysgbW9kdWxlcyAoYmVjYXVzZSB0
aGF0J3MgZ2VuZXJhbGx5IGltcG9zc2libGU6Ci0gICAgLy8gaHR0cDovL2J1Z3MucHl0aG9uLm9y
Zy9pc3N1ZTExNDQyNjMpLiAgQnV0IGlmIHdlIGNhY2hlIEVuY29kZUVycm9yLCB3ZSdsbAotICAg
IC8vIHJldHVybiB0aGUgRW5jb2RlRXJyb3IgZnJvbSBhIHByZXZpb3VzIGxvYWQgb2YgdGhlIG1v
ZHVsZSwgd2hpY2ggd29uJ3QKLSAgICAvLyBtYXRjaCBhIHVzZXIncyBhdHRlbXB0IHRvIGNhdGNo
IEVuY29kZUVycm9yLiAgU28gd2UgaGF2ZSB0byBsb29rIGl0IHVwCi0gICAgLy8gYWdhaW4gZXZl
cnkgdGltZS4KLSAgICBTY29wZWRQeU9iamVjdFB0ciBtZXNzYWdlX21vZHVsZShQeUltcG9ydF9J
bXBvcnRNb2R1bGUoCi0gICAgICAgICJnb29nbGUucHJvdG9idWYubWVzc2FnZSIpKTsKLSAgICBp
ZiAobWVzc2FnZV9tb2R1bGUuZ2V0KCkgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgU2NvcGVkUHlPYmplY3RQdHIgZW5jb2RlX2Vycm9yKAotICAgICAgICBQeU9i
amVjdF9HZXRBdHRyU3RyaW5nKG1lc3NhZ2VfbW9kdWxlLmdldCgpLCAiRW5jb2RlRXJyb3IiKSk7
Ci0gICAgaWYgKGVuY29kZV9lcnJvci5nZXQoKSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVM
TDsKLSAgICB9Ci0gICAgUHlFcnJfRm9ybWF0KGVuY29kZV9lcnJvci5nZXQoKSwKLSAgICAgICAg
ICAgICAgICAgIk1lc3NhZ2UgJXMgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHM6ICVzIiwKLSAg
ICAgICAgICAgICAgICAgR2V0TWVzc2FnZU5hbWUoc2VsZikuY19zdHIoKSwgUHlTdHJpbmdfQXNT
dHJpbmcoam9pbmVkLmdldCgpKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgaW50IHNpemUg
PSBzZWxmLT5tZXNzYWdlLT5CeXRlU2l6ZSgpOwotICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgcmV0
dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygiIik7Ci0gIH0KLSAgUHlPYmplY3QqIHJlc3VsdCA9IFB5
Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSk7Ci0gIGlmIChyZXN1bHQgPT0gTlVM
TCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGNoYXIqIGJ1ZmZlciA9IFB5Qnl0ZXNfQVNf
U1RSSU5HKHJlc3VsdCk7Ci0gIHNlbGYtPm1lc3NhZ2UtPlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXpl
c1RvQXJyYXkoCi0gICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oYnVmZmVyKSk7Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogU2VyaWFsaXplUGFydGlhbFRvU3Ry
aW5nKENNZXNzYWdlKiBzZWxmKSB7Ci0gIHN0cmluZyBjb250ZW50czsKLSAgc2VsZi0+bWVzc2Fn
ZS0+U2VyaWFsaXplUGFydGlhbFRvU3RyaW5nKCZjb250ZW50cyk7Ci0gIHJldHVybiBQeUJ5dGVz
X0Zyb21TdHJpbmdBbmRTaXplKGNvbnRlbnRzLmNfc3RyKCksIGNvbnRlbnRzLnNpemUoKSk7Ci19
Ci0KLS8vIEZvcm1hdHMgcHJvdG8gZmllbGRzIGZvciBhc2NpaSBkdW1wcyB1c2luZyBweXRob24g
Zm9ybWF0dGluZyBmdW5jdGlvbnMgd2hlcmUKLS8vIGFwcHJvcHJpYXRlLgotY2xhc3MgUHl0aG9u
RmllbGRWYWx1ZVByaW50ZXIgOiBwdWJsaWMgVGV4dEZvcm1hdDo6RmllbGRWYWx1ZVByaW50ZXIg
ewotIHB1YmxpYzoKLSAgLy8gUHl0aG9uIGhhcyBzb21lIGRpZmZlcmVuY2VzIGZyb20gQysrIHdo
ZW4gcHJpbnRpbmcgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4KLSAgLy8KLSAgLy8gMSkgVHJhaWxp
bmcgLjAgaXMgYWx3YXlzIHByaW50ZWQuCi0gIC8vIDIpIChQeXRob24yKSBPdXRwdXQgaXMgcm91
bmRlZCB0byAxMiBkaWdpdHMuCi0gIC8vIDMpIChQeXRob24zKSBUaGUgZnVsbCBwcmVjaXNpb24g
b2YgdGhlIGRvdWJsZSBpcyBwcmVzZXJ2ZWQgKGFuZCBQeXRob24gdXNlcwotICAvLyAgICBEYXZp
ZCBNLiBHYXkncyBkdG9hKCksIHdoZW4gdGhlIEMrKyBjb2RlIHVzZXMgU2ltcGxlRHRvYS4gVGhl
cmUgYXJlIHNvbWUKLSAgLy8gICAgZGlmZmVyZW5jZXMsIGJ1dCB0aGV5IHJhcmVseSBoYXBwZW4p
Ci0gIC8vCi0gIC8vIFdlIG92ZXJyaWRlIGZsb2F0aW5nIHBvaW50IHByaW50aW5nIHdpdGggdGhl
IEMtQVBJIGZ1bmN0aW9uIGZvciBwcmludGluZwotICAvLyBQeXRob24gZmxvYXRzIHRvIGVuc3Vy
ZSBjb25zaXN0ZW5jeS4KLSAgc3RyaW5nIFByaW50RmxvYXQoZmxvYXQgdmFsdWUpIGNvbnN0IHsg
cmV0dXJuIFByaW50RG91YmxlKHZhbHVlKTsgfQotICBzdHJpbmcgUHJpbnREb3VibGUoZG91Ymxl
IHZhbHVlKSBjb25zdCB7Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgaGlnaGx5
IG9wdGltaXplZCAoaXQgYWxsb2NhdGVzIHR3byB0ZW1wb3JhcnkKLSAgICAvLyBQeXRob24gb2Jq
ZWN0cykgYnV0IGl0IGlzIHNpbXBsZSBhbmQgcG9ydGFibGUuICBJZiB0aGlzIGlzIHNob3duIHRv
IGJlIGEKLSAgICAvLyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCB3ZSBjYW4gb3B0aW1pemUgaXQs
IGJ1dCB0aGUgcmVzdWx0cyB3aWxsIGxpa2VseQotICAgIC8vIGJlIG1vcmUgY29tcGxpY2F0ZWQg
dG8gYWNjb21tb2RhdGUgdGhlIGRpZmZlcmluZyBiZWhhdmlvciBvZiBkb3VibGUKLSAgICAvLyBm
b3JtYXR0aW5nIGJldHdlZW4gUHl0aG9uIDIgYW5kIFB5dGhvbiAzLgotICAgIC8vCi0gICAgLy8g
KFRob3VnaCBhIHZhbGlkIHF1ZXN0aW9uIGlzOiBkbyB3ZSByZWFsbHkgd2FudCB0byBtYWtlIG91
dCBvdXRwdXQKLSAgICAvLyBkZXBlbmRlbnQgb24gdGhlIFB5dGhvbiB2ZXJzaW9uPykKLSAgICBT
Y29wZWRQeU9iamVjdFB0ciBweV92YWx1ZShQeUZsb2F0X0Zyb21Eb3VibGUodmFsdWUpKTsKLSAg
ICBpZiAoIXB5X3ZhbHVlLmdldCgpKSB7Ci0gICAgICByZXR1cm4gc3RyaW5nKCk7Ci0gICAgfQot
Ci0gICAgU2NvcGVkUHlPYmplY3RQdHIgcHlfc3RyKFB5T2JqZWN0X1N0cihweV92YWx1ZS5nZXQo
KSkpOwotICAgIGlmICghcHlfc3RyLmdldCgpKSB7Ci0gICAgICByZXR1cm4gc3RyaW5nKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHN0cmluZyhQeVN0cmluZ19Bc1N0cmluZyhweV9zdHIuZ2V0KCkp
KTsKLSAgfQotfTsKLQotc3RhdGljIFB5T2JqZWN0KiBUb1N0cihDTWVzc2FnZSogc2VsZikgewot
ICBUZXh0Rm9ybWF0OjpQcmludGVyIHByaW50ZXI7Ci0gIC8vIFBhc3NlcyBvd25lcnNoaXAKLSAg
cHJpbnRlci5TZXREZWZhdWx0RmllbGRWYWx1ZVByaW50ZXIobmV3IFB5dGhvbkZpZWxkVmFsdWVQ
cmludGVyKCkpOwotICBwcmludGVyLlNldEhpZGVVbmtub3duRmllbGRzKHRydWUpOwotICBzdHJp
bmcgb3V0cHV0OwotICBpZiAoIXByaW50ZXIuUHJpbnRUb1N0cmluZygqc2VsZi0+bWVzc2FnZSwg
Jm91dHB1dCkpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIlVuYWJs
ZSB0byBjb252ZXJ0IG1lc3NhZ2UgdG8gc3RyIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAg
cmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcob3V0cHV0LmNfc3RyKCkpOwotfQotCi1QeU9iamVj
dCogTWVyZ2VGcm9tKENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCogYXJnKSB7Ci0gIENNZXNzYWdl
KiBvdGhlcl9tZXNzYWdlOwotICBpZiAoIVB5T2JqZWN0X1R5cGVDaGVjayhhcmcsICZDTWVzc2Fn
ZV9UeXBlKSkgewotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAg
ICAgICAgICJQYXJhbWV0ZXIgdG8gTWVyZ2VGcm9tKCkgbXVzdCBiZSBpbnN0YW5jZSBvZiBzYW1l
IGNsYXNzOiAiCi0gICAgICAgICAgICAgICAgICJleHBlY3RlZCAlcyBnb3QgJXMuIiwKLSAgICAg
ICAgICAgICAgICAgc2VsZi0+bWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpLT5mdWxsX25hbWUoKS5j
X3N0cigpLAotICAgICAgICAgICAgICAgICBQeV9UWVBFKGFyZyktPnRwX25hbWUpOwotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0KLSAgb3RoZXJfbWVzc2FnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q01l
c3NhZ2UqPihhcmcpOwotICBpZiAob3RoZXJfbWVzc2FnZS0+bWVzc2FnZS0+R2V0RGVzY3JpcHRv
cigpICE9Ci0gICAgICBzZWxmLT5tZXNzYWdlLT5HZXREZXNjcmlwdG9yKCkpIHsKLSAgICBQeUVy
cl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAiUGFyYW1ldGVyIHRv
IE1lcmdlRnJvbSgpIG11c3QgYmUgaW5zdGFuY2Ugb2Ygc2FtZSBjbGFzczogIgotICAgICAgICAg
ICAgICAgICAiZXhwZWN0ZWQgJXMgZ290ICVzLiIsCi0gICAgICAgICAgICAgICAgIHNlbGYtPm1l
c3NhZ2UtPkdldERlc2NyaXB0b3IoKS0+ZnVsbF9uYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICAg
ICAgICAgb3RoZXJfbWVzc2FnZS0+bWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpLT5mdWxsX25hbWUo
KS5jX3N0cigpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBBc3N1cmVXcml0YWJsZShzZWxm
KTsKLQotICAvLyBUT0RPKHRpYmVsbCk6IE1lc3NhZ2U6Ok1lcmdlRnJvbSBtaWdodCB0dXJuIHNv
bWUgY2hpbGQgTWVzc2FnZXMKLSAgLy8gaW50byBtdXRhYmxlIG1lc3NhZ2VzLCBpbnZhbGlkYXRp
bmcgdGhlIG1lc3NhZ2UgZmllbGQgaW4gdGhlCi0gIC8vIGNvcnJlc3BvbmRpbmcgQ01lc3NhZ2Vz
LiAgV2Ugc2hvdWxkIHJ1biBhIEZpeHVwTWVzc2FnZVJlZmVyZW5jZXMKLSAgLy8gcGFzcyBoZXJl
LgotCi0gIHNlbGYtPm1lc3NhZ2UtPk1lcmdlRnJvbSgqb3RoZXJfbWVzc2FnZS0+bWVzc2FnZSk7
Ci0gIFB5X1JFVFVSTl9OT05FOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIENvcHlGcm9tKENNZXNz
YWdlKiBzZWxmLCBQeU9iamVjdCogYXJnKSB7Ci0gIENNZXNzYWdlKiBvdGhlcl9tZXNzYWdlOwot
ICBpZiAoIVB5T2JqZWN0X1R5cGVDaGVjayhhcmcsICZDTWVzc2FnZV9UeXBlKSkgewotICAgIFB5
RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJQYXJhbWV0ZXIg
dG8gQ29weUZyb20oKSBtdXN0IGJlIGluc3RhbmNlIG9mIHNhbWUgY2xhc3M6ICIKLSAgICAgICAg
ICAgICAgICAgImV4cGVjdGVkICVzIGdvdCAlcy4iLAotICAgICAgICAgICAgICAgICBzZWxmLT5t
ZXNzYWdlLT5HZXREZXNjcmlwdG9yKCktPmZ1bGxfbmFtZSgpLmNfc3RyKCksCi0gICAgICAgICAg
ICAgICAgIFB5X1RZUEUoYXJnKS0+dHBfbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQot
ICBvdGhlcl9tZXNzYWdlID0gcmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+KGFyZyk7Ci0KLSAg
aWYgKHNlbGYgPT0gb3RoZXJfbWVzc2FnZSkgewotICAgIFB5X1JFVFVSTl9OT05FOwotICB9Ci0K
LSAgaWYgKG90aGVyX21lc3NhZ2UtPm1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKSAhPQotICAgICAg
c2VsZi0+bWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpKSB7Ci0gICAgUHlFcnJfRm9ybWF0KFB5RXhj
X1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgIlBhcmFtZXRlciB0byBDb3B5RnJvbSgpIG11
c3QgYmUgaW5zdGFuY2Ugb2Ygc2FtZSBjbGFzczogIgotICAgICAgICAgICAgICAgICAiZXhwZWN0
ZWQgJXMgZ290ICVzLiIsCi0gICAgICAgICAgICAgICAgIHNlbGYtPm1lc3NhZ2UtPkdldERlc2Ny
aXB0b3IoKS0+ZnVsbF9uYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgb3RoZXJfbWVz
c2FnZS0+bWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpLT5mdWxsX25hbWUoKS5jX3N0cigpKTsKLSAg
ICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIEFzc3VyZVdyaXRhYmxlKHNlbGYpOwotCi0gIC8vIENv
cHlGcm9tIG9uIHRoZSBtZXNzYWdlIHdpbGwgbm90IGNsZWFuIHVwIHNlbGYtPmNvbXBvc2l0ZV9m
aWVsZHMsCi0gIC8vIHdoaWNoIGNhbiBsZWF2ZSB1cyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUs
IHNvIGNsZWFyIGl0IG91dCBoZXJlLgotICAodm9pZClTY29wZWRQeU9iamVjdFB0cihDbGVhcihz
ZWxmKSk7Ci0KLSAgc2VsZi0+bWVzc2FnZS0+Q29weUZyb20oKm90aGVyX21lc3NhZ2UtPm1lc3Nh
Z2UpOwotCi0gIFB5X1JFVFVSTl9OT05FOwotfQotCi0vLyBQcm90b2J1ZiBoYXMgYSA2NE1CIGxp
bWl0IGJ1aWx0IGluLCB0aGlzIHZhcmlhYmxlIHdpbGwgb3ZlcnJpZGUgdGhpcy4gUGxlYXNlCi0v
LyBkbyBub3QgZW5hYmxlIHRoaXMgdW5sZXNzIHlvdSBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBs
aWNhdGlvbnM6IHByb3RvYnVmcwotLy8gbXVzdCBhbGwgYmUga2VwdCBpbiBtZW1vcnkgYXQgdGhl
IHNhbWUgdGltZSwgc28gaWYgdGhleSBncm93IHRvbyBiaWcgeW91IG1heQotLy8gZ2V0IE9PTSBl
cnJvcnMuIFRoZSBwcm90b2J1ZiBBUElzIGRvIG5vdCBwcm92aWRlIGFueSB0b29scyBmb3IgcHJv
Y2Vzc2luZwotLy8gcHJvdG9idWZzIGluIGNodW5rcy4gIElmIHlvdSBoYXZlIHByb3RvcyB0aGlz
IGJpZyB5b3Ugc2hvdWxkIGJyZWFrIHRoZW0gdXAgaWYKLS8vIGl0IGlzIGF0IGFsbCBjb252ZW5p
ZW50IHRvIGRvIHNvLgotc3RhdGljIGJvb2wgYWxsb3dfb3ZlcnNpemVfcHJvdG9zID0gZmFsc2U7
Ci0KLS8vIFByb3ZpZGUgYSBtZXRob2QgaW4gdGhlIG1vZHVsZSB0byBzZXQgYWxsb3dfb3ZlcnNp
emVfcHJvdG9zIHRvIGEgYm9vbGVhbgotLy8gdmFsdWUuIFRoaXMgbWV0aG9kIHJldHVybnMgdGhl
IG5ld2x5IHZhbHVlIG9mIGFsbG93X292ZXJzaXplX3Byb3Rvcy4KLXN0YXRpYyBQeU9iamVjdCog
U2V0QWxsb3dPdmVyc2l6ZVByb3RvcyhQeU9iamVjdCogbSwgUHlPYmplY3QqIGFyZykgewotICBp
ZiAoIWFyZyB8fCAhUHlCb29sX0NoZWNrKGFyZykpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlF
eGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgdG8gU2V0QWxsb3dP
dmVyc2l6ZVByb3RvcyBtdXN0IGJlIGJvb2xlYW4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQot
ICBhbGxvd19vdmVyc2l6ZV9wcm90b3MgPSBQeU9iamVjdF9Jc1RydWUoYXJnKTsKLSAgaWYgKGFs
bG93X292ZXJzaXplX3Byb3RvcykgewotICAgIFB5X1JFVFVSTl9UUlVFOwotICB9IGVsc2Ugewot
ICAgIFB5X1JFVFVSTl9GQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgUHlPYmplY3QqIE1lcmdlRnJv
bVN0cmluZyhDTWVzc2FnZSogc2VsZiwgUHlPYmplY3QqIGFyZykgewotICBjb25zdCB2b2lkKiBk
YXRhOwotICBQeV9zc2l6ZV90IGRhdGFfbGVuZ3RoOwotICBpZiAoUHlPYmplY3RfQXNSZWFkQnVm
ZmVyKGFyZywgJmRhdGEsICZkYXRhX2xlbmd0aCkgPCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLQotICBBc3N1cmVXcml0YWJsZShzZWxmKTsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0gaW5w
dXQoCi0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4oZGF0YSksIGRhdGFfbGVu
Z3RoKTsKLSAgaWYgKGFsbG93X292ZXJzaXplX3Byb3RvcykgewotICAgIGlucHV0LlNldFRvdGFs
Qnl0ZXNMaW1pdChJTlRfTUFYLCBJTlRfTUFYKTsKLSAgfQotICBQeURlc2NyaXB0b3JQb29sKiBw
b29sID0gR2V0RGVzY3JpcHRvclBvb2xGb3JNZXNzYWdlKHNlbGYpOwotICBpbnB1dC5TZXRFeHRl
bnNpb25SZWdpc3RyeShwb29sLT5wb29sLCBwb29sLT5tZXNzYWdlX2ZhY3RvcnkpOwotICBib29s
IHN1Y2Nlc3MgPSBzZWxmLT5tZXNzYWdlLT5NZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oJmlu
cHV0KTsKLSAgaWYgKHN1Y2Nlc3MpIHsKLSAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoaW5wdXQu
Q3VycmVudFBvc2l0aW9uKCkpOwotICB9IGVsc2UgewotICAgIFB5RXJyX0Zvcm1hdChEZWNvZGVF
cnJvcl9jbGFzcywgIkVycm9yIHBhcnNpbmcgbWVzc2FnZSIpOwotICAgIHJldHVybiBOVUxMOwot
ICB9Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogUGFyc2VGcm9tU3RyaW5nKENNZXNzYWdlKiBzZWxm
LCBQeU9iamVjdCogYXJnKSB7Ci0gIGlmIChTY29wZWRQeU9iamVjdFB0cihDbGVhcihzZWxmKSkg
PT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBNZXJnZUZyb21TdHJp
bmcoc2VsZiwgYXJnKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBCeXRlU2l6ZShDTWVzc2FnZSog
c2VsZiwgUHlPYmplY3QqIGFyZ3MpIHsKLSAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5t
ZXNzYWdlLT5CeXRlU2l6ZSgpKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBSZWdpc3RlckV4dGVu
c2lvbihQeU9iamVjdCogY2xzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
eU9iamVjdCogZXh0ZW5zaW9uX2hhbmRsZSkgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IgPQotICAgICAgR2V0RXh0ZW5zaW9uRGVzY3JpcHRvcihleHRlbnNpb25faGFuZGxl
KTsKLSAgaWYgKGRlc2NyaXB0b3IgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0K
LSAgU2NvcGVkUHlPYmplY3RQdHIgZXh0ZW5zaW9uc19ieV9uYW1lKAotICAgICAgUHlPYmplY3Rf
R2V0QXR0cihjbHMsIGtfZXh0ZW5zaW9uc19ieV9uYW1lKSk7Ci0gIGlmIChleHRlbnNpb25zX2J5
X25hbWUgPT0gTlVMTCkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJu
byBleHRlbnNpb25zX2J5X25hbWUgb24gY2xhc3MiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQot
ICBTY29wZWRQeU9iamVjdFB0ciBmdWxsX25hbWUoUHlPYmplY3RfR2V0QXR0cihleHRlbnNpb25f
aGFuZGxlLCBrZnVsbF9uYW1lKSk7Ci0gIGlmIChmdWxsX25hbWUgPT0gTlVMTCkgewotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0KLSAgLy8gSWYgdGhlIGV4dGVuc2lvbiB3YXMgYWxyZWFkeSByZWdp
c3RlcmVkLCBjaGVjayB0aGF0IGl0IGlzIHRoZSBzYW1lLgotICBQeU9iamVjdCogZXhpc3Rpbmdf
ZXh0ZW5zaW9uID0KLSAgICAgIFB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbnNfYnlfbmFtZS5nZXQo
KSwgZnVsbF9uYW1lLmdldCgpKTsKLSAgaWYgKGV4aXN0aW5nX2V4dGVuc2lvbiAhPSBOVUxMKSB7
Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBleGlzdGluZ19leHRlbnNpb25fZGVzY3JpcHRv
ciA9Ci0gICAgICAgIEdldEV4dGVuc2lvbkRlc2NyaXB0b3IoZXhpc3RpbmdfZXh0ZW5zaW9uKTsK
LSAgICBpZiAoZXhpc3RpbmdfZXh0ZW5zaW9uX2Rlc2NyaXB0b3IgIT0gZGVzY3JpcHRvcikgewot
ICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJEb3VibGUgcmVnaXN0cmF0
aW9uIG9mIEV4dGVuc2lvbnMiKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICAvLyBO
b3RoaW5nIGVsc2UgdG8gZG8uCi0gICAgUHlfUkVUVVJOX05PTkU7Ci0gIH0KLQotICBpZiAoUHlE
aWN0X1NldEl0ZW0oZXh0ZW5zaW9uc19ieV9uYW1lLmdldCgpLCBmdWxsX25hbWUuZ2V0KCksCi0g
ICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25faGFuZGxlKSA8IDApIHsKLSAgICByZXR1cm4g
TlVMTDsKLSAgfQotCi0gIC8vIEFsc28gc3RvcmUgYSBtYXBwaW5nIGZyb20gZXh0ZW5zaW9uIG51
bWJlciB0byBpbXBsZW1lbnRpbmcgY2xhc3MuCi0gIFNjb3BlZFB5T2JqZWN0UHRyIGV4dGVuc2lv
bnNfYnlfbnVtYmVyKAotICAgICAgUHlPYmplY3RfR2V0QXR0cihjbHMsIGtfZXh0ZW5zaW9uc19i
eV9udW1iZXIpKTsKLSAgaWYgKGV4dGVuc2lvbnNfYnlfbnVtYmVyID09IE5VTEwpIHsKLSAgICBQ
eUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm8gZXh0ZW5zaW9uc19ieV9udW1iZXIg
b24gY2xhc3MiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIFNjb3BlZFB5T2JqZWN0UHRy
IG51bWJlcihQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGV4dGVuc2lvbl9oYW5kbGUsICJudW1iZXIi
KSk7Ci0gIGlmIChudW1iZXIgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAg
Ly8gSWYgdGhlIGV4dGVuc2lvbiB3YXMgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IG51bWJlciwgY2hl
Y2sgdGhhdCBpdCBpcyB0aGUKLSAgLy8gc2FtZS4KLSAgZXhpc3RpbmdfZXh0ZW5zaW9uID0gUHlE
aWN0X0dldEl0ZW0oZXh0ZW5zaW9uc19ieV9udW1iZXIuZ2V0KCksIG51bWJlci5nZXQoKSk7Ci0g
IGlmIChleGlzdGluZ19leHRlbnNpb24gIT0gTlVMTCkgewotICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZXhpc3RpbmdfZXh0ZW5zaW9uX2Rlc2NyaXB0b3IgPQotICAgICAgICBHZXRFeHRlbnNp
b25EZXNjcmlwdG9yKGV4aXN0aW5nX2V4dGVuc2lvbik7Ci0gICAgaWYgKGV4aXN0aW5nX2V4dGVu
c2lvbl9kZXNjcmlwdG9yICE9IGRlc2NyaXB0b3IpIHsKLSAgICAgIGNvbnN0IERlc2NyaXB0b3Iq
IG1zZ19kZXNjID0gR2V0TWVzc2FnZURlc2NyaXB0b3IoCi0gICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxQeVR5cGVPYmplY3QqPihjbHMpKTsKLSAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAg
ICBQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICJFeHRlbnNpb25zIFwiJXNcIiBhbmQgXCIl
c1wiIGJvdGggdHJ5IHRvIGV4dGVuZCBtZXNzYWdlIHR5cGUgIgotICAgICAgICAgICJcIiVzXCIg
d2l0aCBmaWVsZCBudW1iZXIgJWxkLiIsCi0gICAgICAgICAgZXhpc3RpbmdfZXh0ZW5zaW9uX2Rl
c2NyaXB0b3ItPmZ1bGxfbmFtZSgpLmNfc3RyKCksCi0gICAgICAgICAgZGVzY3JpcHRvci0+ZnVs
bF9uYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICBtc2dfZGVzYy0+ZnVsbF9uYW1lKCkuY19zdHIo
KSwKLSAgICAgICAgICBQeUludF9Bc0xvbmcobnVtYmVyLmdldCgpKSk7Ci0gICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0gICAgLy8gTm90aGluZyBlbHNlIHRvIGRvLgotICAgIFB5X1JFVFVSTl9O
T05FOwotICB9Ci0gIGlmIChQeURpY3RfU2V0SXRlbShleHRlbnNpb25zX2J5X251bWJlci5nZXQo
KSwgbnVtYmVyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX2hhbmRsZSkg
PCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAvLyBDaGVjayBpZiBpdCdzIGEgbWVz
c2FnZSBzZXQKLSAgaWYgKGRlc2NyaXB0b3ItPmlzX2V4dGVuc2lvbigpICYmCi0gICAgICBkZXNj
cmlwdG9yLT5jb250YWluaW5nX3R5cGUoKS0+b3B0aW9ucygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9y
bWF0KCkgJiYKLSAgICAgIGRlc2NyaXB0b3ItPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfTUVTU0FHRSAmJgotICAgICAgZGVzY3JpcHRvci0+bGFiZWwoKSA9PSBGaWVsZERlc2NyaXB0
b3I6OkxBQkVMX09QVElPTkFMKSB7Ci0gICAgU2NvcGVkUHlPYmplY3RQdHIgbWVzc2FnZV9uYW1l
KFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKAotICAgICAgICBkZXNjcmlwdG9yLT5tZXNzYWdl
X3R5cGUoKS0+ZnVsbF9uYW1lKCkuY19zdHIoKSwKLSAgICAgICAgZGVzY3JpcHRvci0+bWVzc2Fn
ZV90eXBlKCktPmZ1bGxfbmFtZSgpLnNpemUoKSkpOwotICAgIGlmIChtZXNzYWdlX25hbWUgPT0g
TlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIFB5RGljdF9TZXRJdGVtKGV4
dGVuc2lvbnNfYnlfbmFtZS5nZXQoKSwgbWVzc2FnZV9uYW1lLmdldCgpLAotICAgICAgICAgICAg
ICAgICAgIGV4dGVuc2lvbl9oYW5kbGUpOwotICB9Ci0KLSAgUHlfUkVUVVJOX05PTkU7Ci19Ci0K
LXN0YXRpYyBQeU9iamVjdCogU2V0SW5QYXJlbnQoQ01lc3NhZ2UqIHNlbGYsIFB5T2JqZWN0KiBh
cmdzKSB7Ci0gIEFzc3VyZVdyaXRhYmxlKHNlbGYpOwotICBQeV9SRVRVUk5fTk9ORTsKLX0KLQot
c3RhdGljIFB5T2JqZWN0KiBXaGljaE9uZW9mKENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCogYXJn
KSB7Ci0gIFB5X3NzaXplX3QgbmFtZV9zaXplOwotICBjaGFyICpuYW1lX2RhdGE7Ci0gIGlmIChQ
eVN0cmluZ19Bc1N0cmluZ0FuZFNpemUoYXJnLCAmbmFtZV9kYXRhLCAmbmFtZV9zaXplKSA8IDAp
Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIHN0cmluZyBvbmVvZl9uYW1lID0gc3RyaW5nKG5hbWVfZGF0
YSwgbmFtZV9zaXplKTsKLSAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZl9kZXNjID0KLSAg
ICAgIHNlbGYtPm1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKS0+RmluZE9uZW9mQnlOYW1lKG9uZW9m
X25hbWUpOwotICBpZiAob25lb2ZfZGVzYyA9PSBOVUxMKSB7Ci0gICAgUHlFcnJfRm9ybWF0KFB5
RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJQcm90b2NvbCBtZXNzYWdlIGhhcyBu
byBvbmVvZiBcIiVzXCIgZmllbGQuIiwKLSAgICAgICAgICAgICAgICAgb25lb2ZfbmFtZS5jX3N0
cigpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkX2luX29uZW9mID0KLSAgICAgIHNlbGYtPm1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0
T25lb2ZGaWVsZERlc2NyaXB0b3IoCi0gICAgICAgICAgKnNlbGYtPm1lc3NhZ2UsIG9uZW9mX2Rl
c2MpOwotICBpZiAoZmllbGRfaW5fb25lb2YgPT0gTlVMTCkgewotICAgIFB5X1JFVFVSTl9OT05F
OwotICB9IGVsc2UgewotICAgIGNvbnN0IHN0cmluZyYgbmFtZSA9IGZpZWxkX2luX29uZW9mLT5u
YW1lKCk7Ci0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKG5hbWUuY19zdHIo
KSwgbmFtZS5zaXplKCkpOwotICB9Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogR2V0RXh0ZW5zaW9u
RGljdChDTWVzc2FnZSogc2VsZiwgdm9pZCAqY2xvc3VyZSk7Ci0KLXN0YXRpYyBQeU9iamVjdCog
TGlzdEZpZWxkcyhDTWVzc2FnZSogc2VsZikgewotICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlw
dG9yKj4gZmllbGRzOwotICBzZWxmLT5tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkxpc3RGaWVs
ZHMoKnNlbGYtPm1lc3NhZ2UsICZmaWVsZHMpOwotCi0gIC8vIE5vcm1hbGx5LCB0aGUgbGlzdCB3
aWxsIGJlIGV4YWN0bHkgdGhlIHNpemUgb2YgdGhlIGZpZWxkcy4KLSAgU2NvcGVkUHlPYmplY3RQ
dHIgYWxsX2ZpZWxkcyhQeUxpc3RfTmV3KGZpZWxkcy5zaXplKCkpKTsKLSAgaWYgKGFsbF9maWVs
ZHMgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgLy8gV2hlbiB0aGVyZSBh
cmUgdW5rbm93biBleHRlbnNpb25zLCB0aGUgcHkgbGlzdCB3aWxsICpub3QqIGNvbnRhaW4KLSAg
Ly8gdGhlIGZpZWxkIGluZm9ybWF0aW9uLiAgVGh1cyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIHB5
IGxpc3Qgd2lsbCBiZQotICAvLyBzbWFsbGVyIHRoYW4gdGhlIHNpemUgb2YgZmllbGRzLiAgU2V0
IHRoZSBhY3R1YWwgc2l6ZSBhdCB0aGUgZW5kLgotICBQeV9zc2l6ZV90IGFjdHVhbF9zaXplID0g
MDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICBT
Y29wZWRQeU9iamVjdFB0ciB0KFB5VHVwbGVfTmV3KDIpKTsKLSAgICBpZiAodCA9PSBOVUxMKSB7
Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoZmllbGRzW2ldLT5pc19leHRl
bnNpb24oKSkgewotICAgICAgU2NvcGVkUHlPYmplY3RQdHIgZXh0ZW5zaW9uX2ZpZWxkKAotICAg
ICAgICAgIFB5RmllbGREZXNjcmlwdG9yX0Zyb21EZXNjcmlwdG9yKGZpZWxkc1tpXSkpOwotICAg
ICAgaWYgKGV4dGVuc2lvbl9maWVsZCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgICAgfQotICAgICAgLy8gV2l0aCBDKysgZGVzY3JpcHRvcnMsIHRoZSBmaWVsZCBjYW4gYWx3
YXlzIGJlIHJldHJpZXZlZCwgYnV0IGZvcgotICAgICAgLy8gdW5rbm93biBleHRlbnNpb25zIHdo
aWNoIGhhdmUgbm90IGJlZW4gaW1wb3J0ZWQgaW4gUHl0aG9uIGNvZGUsIHRoZXJlCi0gICAgICAv
LyBpcyBubyBtZXNzYWdlIGNsYXNzIGFuZCB3ZSBjYW5ub3QgcmV0cmlldmUgdGhlIHZhbHVlLgot
ICAgICAgLy8gVE9ETyhhbWF1cnlmYSk6IGNvbnNpZGVyIGJ1aWxkaW5nIHRoZSBjbGFzcyBvbiB0
aGUgZmx5IQotICAgICAgaWYgKGZpZWxkc1tpXS0+bWVzc2FnZV90eXBlKCkgIT0gTlVMTCAmJgot
ICAgICAgICAgIGNkZXNjcmlwdG9yX3Bvb2w6OkdldE1lc3NhZ2VDbGFzcygKLSAgICAgICAgICAg
ICAgR2V0RGVzY3JpcHRvclBvb2xGb3JNZXNzYWdlKHNlbGYpLAotICAgICAgICAgICAgICBmaWVs
ZHNbaV0tPm1lc3NhZ2VfdHlwZSgpKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7
Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgU2NvcGVkUHlPYmplY3RQdHIgZXh0
ZW5zaW9ucyhHZXRFeHRlbnNpb25EaWN0KHNlbGYsIE5VTEwpKTsKLSAgICAgIGlmIChleHRlbnNp
b25zID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICB9Ci0gICAgICAvLyAn
ZXh0ZW5zaW9uJyByZWZlcmVuY2UgbGF0ZXIgc3RvbGVuIGJ5IFB5VHVwbGVfU0VUX0lURU0uCi0g
ICAgICBQeU9iamVjdCogZXh0ZW5zaW9uID0gUHlPYmplY3RfR2V0SXRlbSgKLSAgICAgICAgICBl
eHRlbnNpb25zLmdldCgpLCBleHRlbnNpb25fZmllbGQuZ2V0KCkpOwotICAgICAgaWYgKGV4dGVu
c2lvbiA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotICAgICAgUHlU
dXBsZV9TRVRfSVRFTSh0LmdldCgpLCAwLCBleHRlbnNpb25fZmllbGQucmVsZWFzZSgpKTsKLSAg
ICAgIC8vIFN0ZWFscyByZWZlcmVuY2UgdG8gJ2V4dGVuc2lvbicKLSAgICAgIFB5VHVwbGVfU0VU
X0lURU0odC5nZXQoKSwgMSwgZXh0ZW5zaW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gTm9y
bWFsIGZpZWxkCi0gICAgICBjb25zdCBzdHJpbmcmIGZpZWxkX25hbWUgPSBmaWVsZHNbaV0tPm5h
bWUoKTsKLSAgICAgIFNjb3BlZFB5T2JqZWN0UHRyIHB5X2ZpZWxkX25hbWUoUHlTdHJpbmdfRnJv
bVN0cmluZ0FuZFNpemUoCi0gICAgICAgICAgZmllbGRfbmFtZS5jX3N0cigpLCBmaWVsZF9uYW1l
Lmxlbmd0aCgpKSk7Ci0gICAgICBpZiAocHlfZmllbGRfbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAg
IFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIHN0cmluZyIpOwotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICAgIH0KLSAgICAgIFNjb3BlZFB5T2JqZWN0UHRyIGZpZWxkX2Rl
c2NyaXB0b3IoCi0gICAgICAgICAgUHlGaWVsZERlc2NyaXB0b3JfRnJvbURlc2NyaXB0b3IoZmll
bGRzW2ldKSk7Ci0gICAgICBpZiAoZmllbGRfZGVzY3JpcHRvciA9PSBOVUxMKSB7Ci0gICAgICAg
IHJldHVybiBOVUxMOwotICAgICAgfQotCi0gICAgICBQeU9iamVjdCogZmllbGRfdmFsdWUgPSBH
ZXRBdHRyKHNlbGYsIHB5X2ZpZWxkX25hbWUuZ2V0KCkpOwotICAgICAgaWYgKGZpZWxkX3ZhbHVl
ID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1ZhbHVlRXJyb3IsIHB5
X2ZpZWxkX25hbWUuZ2V0KCkpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgIH0KLSAgICAg
IFB5VHVwbGVfU0VUX0lURU0odC5nZXQoKSwgMCwgZmllbGRfZGVzY3JpcHRvci5yZWxlYXNlKCkp
OwotICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0LmdldCgpLCAxLCBmaWVsZF92YWx1ZSk7Ci0gICAg
fQotICAgIFB5TGlzdF9TRVRfSVRFTShhbGxfZmllbGRzLmdldCgpLCBhY3R1YWxfc2l6ZSwgdC5y
ZWxlYXNlKCkpOwotICAgICsrYWN0dWFsX3NpemU7Ci0gIH0KLSAgaWYgKHN0YXRpY19jYXN0PHNp
emVfdD4oYWN0dWFsX3NpemUpICE9IGZpZWxkcy5zaXplKCkgJiYKLSAgICAgIChQeUxpc3RfU2V0
U2xpY2UoYWxsX2ZpZWxkcy5nZXQoKSwgYWN0dWFsX3NpemUsIGZpZWxkcy5zaXplKCksIE5VTEwp
IDwKLSAgICAgICAwKSkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBhbGxfZmll
bGRzLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBEaXNjYXJkVW5rbm93bkZpZWxk
cyhDTWVzc2FnZSogc2VsZikgewotICBBc3N1cmVXcml0YWJsZShzZWxmKTsKLSAgc2VsZi0+bWVz
c2FnZS0+RGlzY2FyZFVua25vd25GaWVsZHMoKTsKLSAgUHlfUkVUVVJOX05PTkU7Ci19Ci0KLVB5
T2JqZWN0KiBGaW5kSW5pdGlhbGl6YXRpb25FcnJvcnMoQ01lc3NhZ2UqIHNlbGYpIHsKLSAgTWVz
c2FnZSogbWVzc2FnZSA9IHNlbGYtPm1lc3NhZ2U7Ci0gIHZlY3RvcjxzdHJpbmc+IGVycm9yczsK
LSAgbWVzc2FnZS0+RmluZEluaXRpYWxpemF0aW9uRXJyb3JzKCZlcnJvcnMpOwotCi0gIFB5T2Jq
ZWN0KiBlcnJvcl9saXN0ID0gUHlMaXN0X05ldyhlcnJvcnMuc2l6ZSgpKTsKLSAgaWYgKGVycm9y
X2xpc3QgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZXJyb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgY29uc3Qgc3RyaW5nJiBlcnJvciA9
IGVycm9yc1tpXTsKLSAgICBQeU9iamVjdCogZXJyb3Jfc3RyaW5nID0gUHlTdHJpbmdfRnJvbVN0
cmluZ0FuZFNpemUoCi0gICAgICAgIGVycm9yLmNfc3RyKCksIGVycm9yLmxlbmd0aCgpKTsKLSAg
ICBpZiAoZXJyb3Jfc3RyaW5nID09IE5VTEwpIHsKLSAgICAgIFB5X0RFQ1JFRihlcnJvcl9saXN0
KTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBQeUxpc3RfU0VUX0lURU0oZXJyb3Jf
bGlzdCwgaSwgZXJyb3Jfc3RyaW5nKTsKLSAgfQotICByZXR1cm4gZXJyb3JfbGlzdDsKLX0KLQot
c3RhdGljIFB5T2JqZWN0KiBSaWNoQ29tcGFyZShDTWVzc2FnZSogc2VsZiwgUHlPYmplY3QqIG90
aGVyLCBpbnQgb3BpZCkgewotICAvLyBPbmx5IGVxdWFsaXR5IGNvbXBhcmlzb25zIGFyZSBpbXBs
ZW1lbnRlZC4KLSAgaWYgKG9waWQgIT0gUHlfRVEgJiYgb3BpZCAhPSBQeV9ORSkgewotICAgIFB5
X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7Ci0gICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVk
OwotICB9Ci0gIGJvb2wgZXF1YWxzID0gdHJ1ZTsKLSAgLy8gSWYgb3RoZXIgaXMgbm90IGEgbWVz
c2FnZSwgaXQgY2Fubm90IGJlIGVxdWFsLgotICBpZiAoIVB5T2JqZWN0X1R5cGVDaGVjayhvdGhl
ciwgJkNNZXNzYWdlX1R5cGUpKSB7Ci0gICAgZXF1YWxzID0gZmFsc2U7Ci0gIH0KLSAgY29uc3Qg
Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSogb3RoZXJfbWVzc2FnZSA9Ci0gICAgICByZWludGVy
cHJldF9jYXN0PENNZXNzYWdlKj4ob3RoZXIpLT5tZXNzYWdlOwotICAvLyBJZiBtZXNzYWdlcyBk
b24ndCBoYXZlIHRoZSBzYW1lIGRlc2NyaXB0b3JzLCB0aGV5IGFyZSBub3QgZXF1YWwuCi0gIGlm
IChlcXVhbHMgJiYKLSAgICAgIHNlbGYtPm1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKSAhPSBvdGhl
cl9tZXNzYWdlLT5HZXREZXNjcmlwdG9yKCkpIHsKLSAgICBlcXVhbHMgPSBmYWxzZTsKLSAgfQot
ICAvLyBDaGVjayB0aGUgbWVzc2FnZSBjb250ZW50cy4KLSAgaWYgKGVxdWFscyAmJiAhZ29vZ2xl
Ojpwcm90b2J1Zjo6dXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVhbHMoCi0gICAgICAgICAg
KnNlbGYtPm1lc3NhZ2UsCi0gICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q01lc3NhZ2UqPihv
dGhlciktPm1lc3NhZ2UpKSB7Ci0gICAgZXF1YWxzID0gZmFsc2U7Ci0gIH0KLSAgaWYgKGVxdWFs
cyBeIChvcGlkID09IFB5X0VRKSkgewotICAgIFB5X1JFVFVSTl9GQUxTRTsKLSAgfSBlbHNlIHsK
LSAgICBQeV9SRVRVUk5fVFJVRTsKLSAgfQotfQotCi1QeU9iamVjdCogSW50ZXJuYWxHZXRTY2Fs
YXIoY29uc3QgTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IpIHsKLSAgY29uc3QgUmVmbGVj
dGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLQotICBpZiAoIUNo
ZWNrRmllbGRCZWxvbmdzVG9NZXNzYWdlKGZpZWxkX2Rlc2NyaXB0b3IsIG1lc3NhZ2UpKSB7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBQeU9iamVjdCogcmVzdWx0ID0gTlVMTDsKLSAgc3dp
dGNoIChmaWVsZF9kZXNjcmlwdG9yLT5jcHBfdHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfSU5UMzI6IHsKLSAgICAgIGludDMyIHZhbHVlID0gcmVmbGVjdGlvbi0+
R2V0SW50MzIoKm1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IpOwotICAgICAgcmVzdWx0ID0gUHlJ
bnRfRnJvbUxvbmcodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OiB7Ci0gICAgICBpbnQ2NCB2YWx1ZSA9IHJlZmxlY3Rp
b24tPkdldEludDY0KCptZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yKTsKLSAgICAgIHJlc3VsdCA9
IFB5TG9uZ19Gcm9tTG9uZ0xvbmcodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQzMjogewotICAgICAgdWludDMyIHZhbHVl
ID0gcmVmbGVjdGlvbi0+R2V0VUludDMyKCptZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yKTsKLSAg
ICAgIHJlc3VsdCA9IFB5SW50X0Zyb21TaXplX3QodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NDogewotICAgICAgdWlu
dDY0IHZhbHVlID0gcmVmbGVjdGlvbi0+R2V0VUludDY0KCptZXNzYWdlLCBmaWVsZF9kZXNjcmlw
dG9yKTsKLSAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZyh2YWx1ZSk7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
RkxPQVQ6IHsKLSAgICAgIGZsb2F0IHZhbHVlID0gcmVmbGVjdGlvbi0+R2V0RmxvYXQoKm1lc3Nh
Z2UsIGZpZWxkX2Rlc2NyaXB0b3IpOwotICAgICAgcmVzdWx0ID0gUHlGbG9hdF9Gcm9tRG91Ymxl
KHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9ET1VCTEU6IHsKLSAgICAgIGRvdWJsZSB2YWx1ZSA9IHJlZmxlY3Rpb24tPkdldERv
dWJsZSgqbWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvcik7Ci0gICAgICByZXN1bHQgPSBQeUZsb2F0
X0Zyb21Eb3VibGUodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0w6IHsKLSAgICAgIGJvb2wgdmFsdWUgPSByZWZsZWN0aW9u
LT5HZXRCb29sKCptZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yKTsKLSAgICAgIHJlc3VsdCA9IFB5
Qm9vbF9Gcm9tTG9uZyh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOiB7Ci0gICAgICBzdHJpbmcgdmFsdWUgPSByZWZs
ZWN0aW9uLT5HZXRTdHJpbmcoKm1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IpOwotICAgICAgcmVz
dWx0ID0gVG9TdHJpbmdPYmplY3QoZmllbGRfZGVzY3JpcHRvciwgdmFsdWUpOwotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06IHsKLSAg
ICAgIGlmICghbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TdXBwb3J0c1Vua25vd25FbnVtVmFs
dWVzKCkgJiYKLSAgICAgICAgICAhbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5IYXNGaWVsZCgq
bWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvcikpIHsKLSAgICAgICAgLy8gTG9vayBmb3IgdGhlIHZh
bHVlIGluIHRoZSB1bmtub3duIGZpZWxkcy4KLSAgICAgICAgY29uc3QgVW5rbm93bkZpZWxkU2V0
JiB1bmtub3duX2ZpZWxkX3NldCA9Ci0gICAgICAgICAgICBtZXNzYWdlLT5HZXRSZWZsZWN0aW9u
KCktPkdldFVua25vd25GaWVsZHMoKm1lc3NhZ2UpOwotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHVua25vd25fZmllbGRfc2V0LmZpZWxkX2NvdW50KCk7ICsraSkgewotICAgICAgICAgIGlm
ICh1bmtub3duX2ZpZWxkX3NldC5maWVsZChpKS5udW1iZXIoKSA9PQotICAgICAgICAgICAgICBm
aWVsZF9kZXNjcmlwdG9yLT5udW1iZXIoKSAmJgotICAgICAgICAgICAgICB1bmtub3duX2ZpZWxk
X3NldC5maWVsZChpKS50eXBlKCkgPT0KLSAgICAgICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6
VW5rbm93bkZpZWxkOjpUWVBFX1ZBUklOVCkgewotICAgICAgICAgICAgcmVzdWx0ID0gUHlJbnRf
RnJvbUxvbmcodW5rbm93bl9maWVsZF9zZXQuZmllbGQoaSkudmFyaW50KCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChy
ZXN1bHQgPT0gTlVMTCkgewotICAgICAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBlbnVt
X3ZhbHVlID0KLSAgICAgICAgICAgIG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0RW51bSgq
bWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvcik7Ci0gICAgICAgIHJlc3VsdCA9IFB5SW50X0Zyb21M
b25nKGVudW1fdmFsdWUtPm51bWJlcigpKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBkZWZhdWx0OgotICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgIFB5RXhjX1N5c3Rl
bUVycm9yLCAiR2V0dGluZyBhIHZhbHVlIGZyb20gYSBmaWVsZCBvZiB1bmtub3duIHR5cGUgJWQi
LAotICAgICAgICAgIGZpZWxkX2Rlc2NyaXB0b3ItPmNwcF90eXBlKCkpOwotICB9Ci0KLSAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotUHlPYmplY3QqIEludGVybmFsR2V0U3ViTWVzc2FnZSgKLSAgICBD
TWVzc2FnZSogc2VsZiwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlwdG9yKSB7
Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBzZWxmLT5tZXNzYWdlLT5HZXRSZWZs
ZWN0aW9uKCk7Ci0gIFB5RGVzY3JpcHRvclBvb2wqIHBvb2wgPSBHZXREZXNjcmlwdG9yUG9vbEZv
ck1lc3NhZ2Uoc2VsZik7Ci0gIGNvbnN0IE1lc3NhZ2UmIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlv
bi0+R2V0TWVzc2FnZSgKLSAgICAgICpzZWxmLT5tZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yLCBw
b29sLT5tZXNzYWdlX2ZhY3RvcnkpOwotCi0gIENNZXNzYWdlQ2xhc3MqIG1lc3NhZ2VfY2xhc3Mg
PSBjZGVzY3JpcHRvcl9wb29sOjpHZXRNZXNzYWdlQ2xhc3MoCi0gICAgICBwb29sLCBmaWVsZF9k
ZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKSk7Ci0gIGlmIChtZXNzYWdlX2NsYXNzID09IE5VTEwp
IHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIENNZXNzYWdlKiBjbXNnID0gY21lc3NhZ2U6
Ok5ld0VtcHR5TWVzc2FnZShtZXNzYWdlX2NsYXNzKTsKLSAgaWYgKGNtc2cgPT0gTlVMTCkgewot
ICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgY21zZy0+b3duZXIgPSBzZWxmLT5vd25lcjsKLSAg
Y21zZy0+cGFyZW50ID0gc2VsZjsKLSAgY21zZy0+cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3IgPSBm
aWVsZF9kZXNjcmlwdG9yOwotICBjbXNnLT5yZWFkX29ubHkgPSAhcmVmbGVjdGlvbi0+SGFzRmll
bGQoKnNlbGYtPm1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IpOwotICBjbXNnLT5tZXNzYWdlID0g
Y29uc3RfY2FzdDxNZXNzYWdlKj4oJnN1Yl9tZXNzYWdlKTsKLQotICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxQeU9iamVjdCo+KGNtc2cpOwotfQotCi1pbnQgSW50ZXJuYWxTZXROb25PbmVvZlNj
YWxhcigKLSAgICBNZXNzYWdlKiBtZXNzYWdlLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGRfZGVzY3JpcHRvciwKLSAgICBQeU9iamVjdCogYXJnKSB7Ci0gIGNvbnN0IFJlZmxlY3Rp
b24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgaWYgKCFDaGVj
a0ZpZWxkQmVsb25nc1RvTWVzc2FnZShmaWVsZF9kZXNjcmlwdG9yLCBtZXNzYWdlKSkgewotICAg
IHJldHVybiAtMTsKLSAgfQotCi0gIHN3aXRjaCAoZmllbGRfZGVzY3JpcHRvci0+Y3BwX3R5cGUo
KSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyOiB7Ci0gICAgICBH
T09HTEVfQ0hFQ0tfR0VUX0lOVDMyKGFyZywgdmFsdWUsIC0xKTsKLSAgICAgIHJlZmxlY3Rpb24t
PlNldEludDMyKG1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IsIHZhbHVlKTsKLSAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQ2NDogewotICAg
ICAgR09PR0xFX0NIRUNLX0dFVF9JTlQ2NChhcmcsIHZhbHVlLCAtMSk7Ci0gICAgICByZWZsZWN0
aW9uLT5TZXRJbnQ2NChtZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yLCB2YWx1ZSk7Ci0gICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMyOiB7
Ci0gICAgICBHT09HTEVfQ0hFQ0tfR0VUX1VJTlQzMihhcmcsIHZhbHVlLCAtMSk7Ci0gICAgICBy
ZWZsZWN0aW9uLT5TZXRVSW50MzIobWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwgdmFsdWUpOwot
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJ
TlQ2NDogewotICAgICAgR09PR0xFX0NIRUNLX0dFVF9VSU5UNjQoYXJnLCB2YWx1ZSwgLTEpOwot
ICAgICAgcmVmbGVjdGlvbi0+U2V0VUludDY0KG1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IsIHZh
bHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQ
VFlQRV9GTE9BVDogewotICAgICAgR09PR0xFX0NIRUNLX0dFVF9GTE9BVChhcmcsIHZhbHVlLCAt
MSk7Ci0gICAgICByZWZsZWN0aW9uLT5TZXRGbG9hdChtZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9y
LCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfRE9VQkxFOiB7Ci0gICAgICBHT09HTEVfQ0hFQ0tfR0VUX0RPVUJMRShhcmcsIHZh
bHVlLCAtMSk7Ci0gICAgICByZWZsZWN0aW9uLT5TZXREb3VibGUobWVzc2FnZSwgZmllbGRfZGVz
Y3JpcHRvciwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFX0JPT0w6IHsKLSAgICAgIEdPT0dMRV9DSEVDS19HRVRfQk9PTChhcmcs
IHZhbHVlLCAtMSk7Ci0gICAgICByZWZsZWN0aW9uLT5TZXRCb29sKG1lc3NhZ2UsIGZpZWxkX2Rl
c2NyaXB0b3IsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6IHsKLSAgICAgIGlmICghQ2hlY2tBbmRTZXRTdHJpbmco
Ci0gICAgICAgICAgYXJnLCBtZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yLCByZWZsZWN0aW9uLCBm
YWxzZSwgLTEpKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNOiB7Ci0gICAgICBH
T09HTEVfQ0hFQ0tfR0VUX0lOVDMyKGFyZywgdmFsdWUsIC0xKTsKLSAgICAgIGlmIChyZWZsZWN0
aW9uLT5TdXBwb3J0c1Vua25vd25FbnVtVmFsdWVzKCkpIHsKLSAgICAgICAgcmVmbGVjdGlvbi0+
U2V0RW51bVZhbHVlKG1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IsIHZhbHVlKTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBlbnVtX2Rlc2NyaXB0b3IgPSBm
aWVsZF9kZXNjcmlwdG9yLT5lbnVtX3R5cGUoKTsKLSAgICAgICAgY29uc3QgRW51bVZhbHVlRGVz
Y3JpcHRvciogZW51bV92YWx1ZSA9Ci0gICAgICAgICAgICBlbnVtX2Rlc2NyaXB0b3ItPkZpbmRW
YWx1ZUJ5TnVtYmVyKHZhbHVlKTsKLSAgICAgICAgaWYgKGVudW1fdmFsdWUgIT0gTlVMTCkgewot
ICAgICAgICAgIHJlZmxlY3Rpb24tPlNldEVudW0obWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwg
ZW51bV92YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgUHlFcnJfRm9ybWF0KFB5
RXhjX1ZhbHVlRXJyb3IsICJVbmtub3duIGVudW0gdmFsdWU6ICVkIiwgdmFsdWUpOwotICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICBQeUVycl9Gb3JtYXQoCi0gICAgICAgICAgUHlFeGNfU3lzdGVt
RXJyb3IsICJTZXR0aW5nIHZhbHVlIHRvIGEgZmllbGQgb2YgdW5rbm93biB0eXBlICVkIiwKLSAg
ICAgICAgICBmaWVsZF9kZXNjcmlwdG9yLT5jcHBfdHlwZSgpKTsKLSAgICAgIHJldHVybiAtMTsK
LSAgfQotCi0gIHJldHVybiAwOwotfQotCi1pbnQgSW50ZXJuYWxTZXRTY2FsYXIoCi0gICAgQ01l
c3NhZ2UqIHNlbGYsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlwdG9y
LAotICAgIFB5T2JqZWN0KiBhcmcpIHsKLSAgaWYgKCFDaGVja0ZpZWxkQmVsb25nc1RvTWVzc2Fn
ZShmaWVsZF9kZXNjcmlwdG9yLCBzZWxmLT5tZXNzYWdlKSkgewotICAgIHJldHVybiAtMTsKLSAg
fQotCi0gIGlmIChNYXliZVJlbGVhc2VPdmVybGFwcGluZ09uZW9mRmllbGQoc2VsZiwgZmllbGRf
ZGVzY3JpcHRvcikgPCAwKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgcmV0dXJuIEludGVy
bmFsU2V0Tm9uT25lb2ZTY2FsYXIoc2VsZi0+bWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwgYXJn
KTsKLX0KLQotUHlPYmplY3QqIEZyb21TdHJpbmcoUHlUeXBlT2JqZWN0KiBjbHMsIFB5T2JqZWN0
KiBzZXJpYWxpemVkKSB7Ci0gIFB5T2JqZWN0KiBweV9jbXNnID0gUHlPYmplY3RfQ2FsbE9iamVj
dCgKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihjbHMpLCBOVUxMKTsKLSAgaWYg
KHB5X2Ntc2cgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIENNZXNzYWdlKiBj
bXNnID0gcmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+KHB5X2Ntc2cpOwotCi0gIFNjb3BlZFB5
T2JqZWN0UHRyIHB5X2xlbmd0aChNZXJnZUZyb21TdHJpbmcoY21zZywgc2VyaWFsaXplZCkpOwot
ICBpZiAocHlfbGVuZ3RoID09IE5VTEwpIHsKLSAgICBQeV9ERUNSRUYocHlfY21zZyk7Ci0gICAg
cmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1cm4gcHlfY21zZzsKLX0KLQotUHlPYmplY3QqIERl
ZXBDb3B5KENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCogYXJnKSB7Ci0gIFB5T2JqZWN0KiBjbG9u
ZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QoCi0gICAgICByZWludGVycHJldF9jYXN0PFB5T2JqZWN0
Kj4oUHlfVFlQRShzZWxmKSksIE5VTEwpOwotICBpZiAoY2xvbmUgPT0gTlVMTCkgewotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0gIGlmICghUHlPYmplY3RfVHlwZUNoZWNrKGNsb25lLCAmQ01lc3Nh
Z2VfVHlwZSkpIHsKLSAgICBQeV9ERUNSRUYoY2xvbmUpOwotICAgIHJldHVybiBOVUxMOwotICB9
Ci0gIGlmIChTY29wZWRQeU9iamVjdFB0cihNZXJnZUZyb20oCi0gICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxDTWVzc2FnZSo+KGNsb25lKSwKLSAgICAgICAgICByZWludGVycHJldF9jYXN0PFB5
T2JqZWN0Kj4oc2VsZikpKSA9PSBOVUxMKSB7Ci0gICAgUHlfREVDUkVGKGNsb25lKTsKLSAgICBy
ZXR1cm4gTlVMTDsKLSAgfQotICByZXR1cm4gY2xvbmU7Ci19Ci0KLVB5T2JqZWN0KiBUb1VuaWNv
ZGUoQ01lc3NhZ2UqIHNlbGYpIHsKLSAgLy8gTGF6eSBpbXBvcnQgdG8gcHJldmVudCBjaXJjdWxh
ciBkZXBlbmRlbmNpZXMKLSAgU2NvcGVkUHlPYmplY3RQdHIgdGV4dF9mb3JtYXQoCi0gICAgICBQ
eUltcG9ydF9JbXBvcnRNb2R1bGUoImdvb2dsZS5wcm90b2J1Zi50ZXh0X2Zvcm1hdCIpKTsKLSAg
aWYgKHRleHRfZm9ybWF0ID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBTY29w
ZWRQeU9iamVjdFB0ciBtZXRob2RfbmFtZShQeVN0cmluZ19Gcm9tU3RyaW5nKCJNZXNzYWdlVG9T
dHJpbmciKSk7Ci0gIGlmIChtZXRob2RfbmFtZSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLSAgUHlfSU5DUkVGKFB5X1RydWUpOwotICBTY29wZWRQeU9iamVjdFB0ciBlbmNvZGVk
KFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKAotICAgICAgdGV4dF9mb3JtYXQuZ2V0KCksIG1l
dGhvZF9uYW1lLmdldCgpLCBzZWxmLCBQeV9UcnVlLCBOVUxMKSk7Ci0gIFB5X0RFQ1JFRihQeV9U
cnVlKTsKLSAgaWYgKGVuY29kZWQgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0j
aWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSAgUHlPYmplY3QqIGRlY29kZWQgPSBQeVN0cmluZ19B
c0RlY29kZWRPYmplY3QoZW5jb2RlZC5nZXQoKSwgInV0Zi04IiwgTlVMTCk7Ci0jZWxzZQotICBQ
eU9iamVjdCogZGVjb2RlZCA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChlbmNvZGVkLmdl
dCgpLCAidXRmLTgiLCBOVUxMKTsKLSNlbmRpZgotICBpZiAoZGVjb2RlZCA9PSBOVUxMKSB7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJuIGRlY29kZWQ7Ci19Ci0KLVB5T2JqZWN0KiBS
ZWR1Y2UoQ01lc3NhZ2UqIHNlbGYpIHsKLSAgU2NvcGVkUHlPYmplY3RQdHIgY29uc3RydWN0b3Io
cmVpbnRlcnByZXRfY2FzdDxQeU9iamVjdCo+KFB5X1RZUEUoc2VsZikpKTsKLSAgY29uc3RydWN0
b3IuaW5jKCk7Ci0gIFNjb3BlZFB5T2JqZWN0UHRyIGFyZ3MoUHlUdXBsZV9OZXcoMCkpOwotICBp
ZiAoYXJncyA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgU2NvcGVkUHlPYmpl
Y3RQdHIgc3RhdGUoUHlEaWN0X05ldygpKTsKLSAgaWYgKHN0YXRlID09IE5VTEwpIHsKLSAgICBy
ZXR1cm4gIE5VTEw7Ci0gIH0KLSAgU2NvcGVkUHlPYmplY3RQdHIgc2VyaWFsaXplZChTZXJpYWxp
emVQYXJ0aWFsVG9TdHJpbmcoc2VsZikpOwotICBpZiAoc2VyaWFsaXplZCA9PSBOVUxMKSB7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKHN0YXRlLmdl
dCgpLCAic2VyaWFsaXplZCIsIHNlcmlhbGl6ZWQuZ2V0KCkpIDwgMCkgewotICAgIHJldHVybiBO
VUxMOwotICB9Ci0gIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPT08iLCBjb25zdHJ1Y3Rvci5nZXQo
KSwgYXJncy5nZXQoKSwgc3RhdGUuZ2V0KCkpOwotfQotCi1QeU9iamVjdCogU2V0U3RhdGUoQ01l
c3NhZ2UqIHNlbGYsIFB5T2JqZWN0KiBzdGF0ZSkgewotICBpZiAoIVB5RGljdF9DaGVjayhzdGF0
ZSkpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic3RhdGUgbm90IGEg
ZGljdCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIFB5T2JqZWN0KiBzZXJpYWxpemVkID0g
UHlEaWN0X0dldEl0ZW1TdHJpbmcoc3RhdGUsICJzZXJpYWxpemVkIik7Ci0gIGlmIChzZXJpYWxp
emVkID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBpZiAoU2NvcGVkUHlPYmpl
Y3RQdHIoUGFyc2VGcm9tU3RyaW5nKHNlbGYsIHNlcmlhbGl6ZWQpKSA9PSBOVUxMKSB7Ci0gICAg
cmV0dXJuIE5VTEw7Ci0gIH0KLSAgUHlfUkVUVVJOX05PTkU7Ci19Ci0KLS8vIENNZXNzYWdlIHN0
YXRpYyBtZXRob2RzOgotUHlPYmplY3QqIF9DaGVja0NhbGxlZEZyb21HZW5lcmF0ZWRGaWxlKFB5
T2JqZWN0KiB1bnVzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UHlPYmplY3QqIHVudXNlZF9hcmcpIHsKLSAgaWYgKCFfQ2FsbGVkRnJvbUdlbmVyYXRlZEZpbGUo
MSkpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAg
ICAgICAgICAiRGVzY3JpcHRvcnMgc2hvdWxkIG5vdCBiZSBjcmVhdGVkIGRpcmVjdGx5LCAiCi0g
ICAgICAgICAgICAgICAgICAgICJidXQgb25seSByZXRyaWV2ZWQgZnJvbSB0aGVpciBwYXJlbnQu
Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgUHlfUkVUVVJOX05PTkU7Ci19Ci0KLXN0YXRp
YyBQeU9iamVjdCogR2V0RXh0ZW5zaW9uRGljdChDTWVzc2FnZSogc2VsZiwgdm9pZCAqY2xvc3Vy
ZSkgewotICBpZiAoc2VsZi0+ZXh0ZW5zaW9ucykgIHsKLSAgICBQeV9JTkNSRUYoc2VsZi0+ZXh0
ZW5zaW9ucyk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihzZWxmLT5l
eHRlbnNpb25zKTsKLSAgfQotCi0gIC8vIElmIHRoZXJlIGFyZSBleHRlbnNpb25fcmFuZ2VzLCB0
aGUgbWVzc2FnZSBpcyAiZXh0ZW5kYWJsZSIuIEFsbG9jYXRlIGEKLSAgLy8gZGljdGlvbmFyeSB0
byBzdG9yZSB0aGUgZXh0ZW5zaW9uIGZpZWxkcy4KLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3Jp
cHRvciA9IEdldE1lc3NhZ2VEZXNjcmlwdG9yKFB5X1RZUEUoc2VsZikpOwotICBpZiAoZGVzY3Jp
cHRvci0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCkgPiAwKSB7Ci0gICAgRXh0ZW5zaW9uRGljdCog
ZXh0ZW5zaW9uX2RpY3QgPSBleHRlbnNpb25fZGljdDo6TmV3RXh0ZW5zaW9uRGljdChzZWxmKTsK
LSAgICBpZiAoZXh0ZW5zaW9uX2RpY3QgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotICAgIHNlbGYtPmV4dGVuc2lvbnMgPSBleHRlbnNpb25fZGljdDsKLSAgICBQeV9JTkNS
RUYoc2VsZi0+ZXh0ZW5zaW9ucyk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmpl
Y3QqPihzZWxmLT5leHRlbnNpb25zKTsKLSAgfQotCi0gIFB5RXJyX1NldE5vbmUoUHlFeGNfQXR0
cmlidXRlRXJyb3IpOwotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIFB5R2V0U2V0RGVmIEdl
dHRlcnNbXSA9IHsKLSAgeyJFeHRlbnNpb25zIiwgKGdldHRlcilHZXRFeHRlbnNpb25EaWN0LCBO
VUxMLCAiRXh0ZW5zaW9uIGRpY3QifSwKLSAge05VTEx9Ci19OwotCi1zdGF0aWMgUHlNZXRob2RE
ZWYgTWV0aG9kc1tdID0gewotICB7ICJfX2RlZXBjb3B5X18iLCAoUHlDRnVuY3Rpb24pRGVlcENv
cHksIE1FVEhfVkFSQVJHUywKLSAgICAiTWFrZXMgYSBkZWVwIGNvcHkgb2YgdGhlIGNsYXNzLiIg
fSwKLSAgeyAiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilSZWR1Y2UsIE1FVEhfTk9BUkdTLAot
ICAgICJPdXRwdXRzIHBpY2tsYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZS4iIH0s
Ci0gIHsgIl9fc2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilTZXRTdGF0ZSwgTUVUSF9PLAotICAg
ICJJbnB1dHMgcGlja2xhYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlLiIgfSwKLSAg
eyAiX191bmljb2RlX18iLCAoUHlDRnVuY3Rpb24pVG9Vbmljb2RlLCBNRVRIX05PQVJHUywKLSAg
ICAiT3V0cHV0cyBhIHVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UuIiB9LAot
ICB7ICJCeXRlU2l6ZSIsIChQeUNGdW5jdGlvbilCeXRlU2l6ZSwgTUVUSF9OT0FSR1MsCi0gICAg
IlJldHVybnMgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UgaW4gYnl0ZXMuIiB9LAotICB7ICJDbGVh
ciIsIChQeUNGdW5jdGlvbilDbGVhciwgTUVUSF9OT0FSR1MsCi0gICAgIkNsZWFycyB0aGUgbWVz
c2FnZS4iIH0sCi0gIHsgIkNsZWFyRXh0ZW5zaW9uIiwgKFB5Q0Z1bmN0aW9uKUNsZWFyRXh0ZW5z
aW9uLCBNRVRIX08sCi0gICAgIkNsZWFycyBhIG1lc3NhZ2UgZmllbGQuIiB9LAotICB7ICJDbGVh
ckZpZWxkIiwgKFB5Q0Z1bmN0aW9uKUNsZWFyRmllbGQsIE1FVEhfTywKLSAgICAiQ2xlYXJzIGEg
bWVzc2FnZSBmaWVsZC4iIH0sCi0gIHsgIkNvcHlGcm9tIiwgKFB5Q0Z1bmN0aW9uKUNvcHlGcm9t
LCBNRVRIX08sCi0gICAgIkNvcGllcyBhIHByb3RvY29sIG1lc3NhZ2UgaW50byB0aGUgY3VycmVu
dCBtZXNzYWdlLiIgfSwKLSAgeyAiRGlzY2FyZFVua25vd25GaWVsZHMiLCAoUHlDRnVuY3Rpb24p
RGlzY2FyZFVua25vd25GaWVsZHMsIE1FVEhfTk9BUkdTLAotICAgICJEaXNjYXJkcyB0aGUgdW5r
bm93biBmaWVsZHMuIiB9LAotICB7ICJGaW5kSW5pdGlhbGl6YXRpb25FcnJvcnMiLCAoUHlDRnVu
Y3Rpb24pRmluZEluaXRpYWxpemF0aW9uRXJyb3JzLAotICAgIE1FVEhfTk9BUkdTLAotICAgICJG
aW5kcyB1bnNldCByZXF1aXJlZCBmaWVsZHMuIiB9LAotICB7ICJGcm9tU3RyaW5nIiwgKFB5Q0Z1
bmN0aW9uKUZyb21TdHJpbmcsIE1FVEhfTyB8IE1FVEhfQ0xBU1MsCi0gICAgIkNyZWF0ZXMgbmV3
IG1ldGhvZCBpbnN0YW5jZSBmcm9tIGdpdmVuIHNlcmlhbGl6ZWQgZGF0YS4iIH0sCi0gIHsgIkhh
c0V4dGVuc2lvbiIsIChQeUNGdW5jdGlvbilIYXNFeHRlbnNpb24sIE1FVEhfTywKLSAgICAiQ2hl
Y2tzIGlmIGEgbWVzc2FnZSBmaWVsZCBpcyBzZXQuIiB9LAotICB7ICJIYXNGaWVsZCIsIChQeUNG
dW5jdGlvbilIYXNGaWVsZCwgTUVUSF9PLAotICAgICJDaGVja3MgaWYgYSBtZXNzYWdlIGZpZWxk
IGlzIHNldC4iIH0sCi0gIHsgIklzSW5pdGlhbGl6ZWQiLCAoUHlDRnVuY3Rpb24pSXNJbml0aWFs
aXplZCwgTUVUSF9WQVJBUkdTLAotICAgICJDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGZpZWxkcyBv
ZiBhIHByb3RvY29sIG1lc3NhZ2UgYXJlIHNldC4iIH0sCi0gIHsgIkxpc3RGaWVsZHMiLCAoUHlD
RnVuY3Rpb24pTGlzdEZpZWxkcywgTUVUSF9OT0FSR1MsCi0gICAgIkxpc3RzIGFsbCBzZXQgZmll
bGRzIG9mIGEgbWVzc2FnZS4iIH0sCi0gIHsgIk1lcmdlRnJvbSIsIChQeUNGdW5jdGlvbilNZXJn
ZUZyb20sIE1FVEhfTywKLSAgICAiTWVyZ2VzIGEgcHJvdG9jb2wgbWVzc2FnZSBpbnRvIHRoZSBj
dXJyZW50IG1lc3NhZ2UuIiB9LAotICB7ICJNZXJnZUZyb21TdHJpbmciLCAoUHlDRnVuY3Rpb24p
TWVyZ2VGcm9tU3RyaW5nLCBNRVRIX08sCi0gICAgIk1lcmdlcyBhIHNlcmlhbGl6ZWQgbWVzc2Fn
ZSBpbnRvIHRoZSBjdXJyZW50IG1lc3NhZ2UuIiB9LAotICB7ICJQYXJzZUZyb21TdHJpbmciLCAo
UHlDRnVuY3Rpb24pUGFyc2VGcm9tU3RyaW5nLCBNRVRIX08sCi0gICAgIlBhcnNlcyBhIHNlcmlh
bGl6ZWQgbWVzc2FnZSBpbnRvIHRoZSBjdXJyZW50IG1lc3NhZ2UuIiB9LAotICB7ICJSZWdpc3Rl
ckV4dGVuc2lvbiIsIChQeUNGdW5jdGlvbilSZWdpc3RlckV4dGVuc2lvbiwgTUVUSF9PIHwgTUVU
SF9DTEFTUywKLSAgICAiUmVnaXN0ZXJzIGFuIGV4dGVuc2lvbiB3aXRoIHRoZSBjdXJyZW50IG1l
c3NhZ2UuIiB9LAotICB7ICJTZXJpYWxpemVQYXJ0aWFsVG9TdHJpbmciLCAoUHlDRnVuY3Rpb24p
U2VyaWFsaXplUGFydGlhbFRvU3RyaW5nLAotICAgIE1FVEhfTk9BUkdTLAotICAgICJTZXJpYWxp
emVzIHRoZSBtZXNzYWdlIHRvIGEgc3RyaW5nLCBldmVuIGlmIGl0IGlzbid0IGluaXRpYWxpemVk
LiIgfSwKLSAgeyAiU2VyaWFsaXplVG9TdHJpbmciLCAoUHlDRnVuY3Rpb24pU2VyaWFsaXplVG9T
dHJpbmcsIE1FVEhfTk9BUkdTLAotICAgICJTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHRvIGEgc3Ry
aW5nLCBvbmx5IGZvciBpbml0aWFsaXplZCBtZXNzYWdlcy4iIH0sCi0gIHsgIlNldEluUGFyZW50
IiwgKFB5Q0Z1bmN0aW9uKVNldEluUGFyZW50LCBNRVRIX05PQVJHUywKLSAgICAiU2V0cyB0aGUg
aGFzIGJpdCBvZiB0aGUgZ2l2ZW4gZmllbGQgaW4gaXRzIHBhcmVudCBtZXNzYWdlLiIgfSwKLSAg
eyAiV2hpY2hPbmVvZiIsIChQeUNGdW5jdGlvbilXaGljaE9uZW9mLCBNRVRIX08sCi0gICAgIlJl
dHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHNldCBpbnNpZGUgYSBvbmVvZiwgIgotICAgICJv
ciBOb25lIGlmIG5vIGZpZWxkIGlzIHNldC4iIH0sCi0KLSAgLy8gU3RhdGljIE1ldGhvZHMuCi0g
IHsgIl9DaGVja0NhbGxlZEZyb21HZW5lcmF0ZWRGaWxlIiwgKFB5Q0Z1bmN0aW9uKV9DaGVja0Nh
bGxlZEZyb21HZW5lcmF0ZWRGaWxlLAotICAgIE1FVEhfTk9BUkdTIHwgTUVUSF9TVEFUSUMsCi0g
ICAgIlJhaXNlcyBUeXBlRXJyb3IgaWYgdGhlIGNhbGxlciBpcyBub3QgaW4gYSBfcGIyLnB5IGZp
bGUuIn0sCi0gIHsgTlVMTCwgTlVMTH0KLX07Ci0KLXN0YXRpYyBib29sIFNldENvbXBvc2l0ZUZp
ZWxkKAotICAgIENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCogbmFtZSwgUHlPYmplY3QqIHZhbHVl
KSB7Ci0gIGlmIChzZWxmLT5jb21wb3NpdGVfZmllbGRzID09IE5VTEwpIHsKLSAgICBzZWxmLT5j
b21wb3NpdGVfZmllbGRzID0gUHlEaWN0X05ldygpOwotICAgIGlmIChzZWxmLT5jb21wb3NpdGVf
ZmllbGRzID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgcmV0
dXJuIFB5RGljdF9TZXRJdGVtKHNlbGYtPmNvbXBvc2l0ZV9maWVsZHMsIG5hbWUsIHZhbHVlKSA9
PSAwOwotfQotCi1QeU9iamVjdCogR2V0QXR0cihDTWVzc2FnZSogc2VsZiwgUHlPYmplY3QqIG5h
bWUpIHsKLSAgUHlPYmplY3QqIHZhbHVlID0gc2VsZi0+Y29tcG9zaXRlX2ZpZWxkcyA/Ci0gICAg
ICBQeURpY3RfR2V0SXRlbShzZWxmLT5jb21wb3NpdGVfZmllbGRzLCBuYW1lKSA6IE5VTEw7Ci0g
IGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgUHlfSU5DUkVGKHZhbHVlKTsKLSAgICByZXR1cm4g
dmFsdWU7Ci0gIH0KLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3Ig
PSBHZXRGaWVsZERlc2NyaXB0b3Ioc2VsZiwgbmFtZSk7Ci0gIGlmIChmaWVsZF9kZXNjcmlwdG9y
ID09IE5VTEwpIHsKLSAgICByZXR1cm4gQ01lc3NhZ2VfVHlwZS50cF9iYXNlLT50cF9nZXRhdHRy
bygKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxQeU9iamVjdCo+KHNlbGYpLCBuYW1lKTsKLSAg
fQotCi0gIGlmIChmaWVsZF9kZXNjcmlwdG9yLT5pc19tYXAoKSkgewotICAgIFB5T2JqZWN0KiBw
eV9jb250YWluZXIgPSBOVUxMOwotICAgIGNvbnN0IERlc2NyaXB0b3IqIGVudHJ5X3R5cGUgPSBm
aWVsZF9kZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKTsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIHZhbHVlX3R5cGUgPSBlbnRyeV90eXBlLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0g
ICAgaWYgKHZhbHVlX3R5cGUtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X01FU1NBR0UpIHsKLSAgICAgIENNZXNzYWdlQ2xhc3MqIHZhbHVlX2NsYXNzID0gY2Rlc2NyaXB0
b3JfcG9vbDo6R2V0TWVzc2FnZUNsYXNzKAotICAgICAgICAgIEdldERlc2NyaXB0b3JQb29sRm9y
TWVzc2FnZShzZWxmKSwgdmFsdWVfdHlwZS0+bWVzc2FnZV90eXBlKCkpOwotICAgICAgaWYgKHZh
bHVlX2NsYXNzID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICB9Ci0gICAg
ICBweV9jb250YWluZXIgPQotICAgICAgICAgIE5ld01lc3NhZ2VNYXBDb250YWluZXIoc2VsZiwg
ZmllbGRfZGVzY3JpcHRvciwgdmFsdWVfY2xhc3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICBweV9j
b250YWluZXIgPSBOZXdTY2FsYXJNYXBDb250YWluZXIoc2VsZiwgZmllbGRfZGVzY3JpcHRvcik7
Ci0gICAgfQotICAgIGlmIChweV9jb250YWluZXIgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotICAgIGlmICghU2V0Q29tcG9zaXRlRmllbGQoc2VsZiwgbmFtZSwgcHlfY29u
dGFpbmVyKSkgewotICAgICAgUHlfREVDUkVGKHB5X2NvbnRhaW5lcik7Ci0gICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIHB5X2NvbnRhaW5lcjsKLSAgfQotCi0gIGlmIChmaWVs
ZF9kZXNjcmlwdG9yLT5sYWJlbCgpID09IEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfUkVQRUFURUQp
IHsKLSAgICBQeU9iamVjdCogcHlfY29udGFpbmVyID0gTlVMTDsKLSAgICBpZiAoZmllbGRfZGVz
Y3JpcHRvci0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkg
ewotICAgICAgQ01lc3NhZ2VDbGFzcyogbWVzc2FnZV9jbGFzcyA9IGNkZXNjcmlwdG9yX3Bvb2w6
OkdldE1lc3NhZ2VDbGFzcygKLSAgICAgICAgICBHZXREZXNjcmlwdG9yUG9vbEZvck1lc3NhZ2Uo
c2VsZiksIGZpZWxkX2Rlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpKTsKLSAgICAgIGlmIChtZXNz
YWdlX2NsYXNzID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICB9Ci0gICAg
ICBweV9jb250YWluZXIgPSByZXBlYXRlZF9jb21wb3NpdGVfY29udGFpbmVyOjpOZXdDb250YWlu
ZXIoCi0gICAgICAgICAgc2VsZiwgZmllbGRfZGVzY3JpcHRvciwgbWVzc2FnZV9jbGFzcyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHB5X2NvbnRhaW5lciA9IHJlcGVhdGVkX3NjYWxhcl9jb250YWlu
ZXI6Ok5ld0NvbnRhaW5lcigKLSAgICAgICAgICBzZWxmLCBmaWVsZF9kZXNjcmlwdG9yKTsKLSAg
ICB9Ci0gICAgaWYgKHB5X2NvbnRhaW5lciA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0gICAgaWYgKCFTZXRDb21wb3NpdGVGaWVsZChzZWxmLCBuYW1lLCBweV9jb250YWlu
ZXIpKSB7Ci0gICAgICBQeV9ERUNSRUYocHlfY29udGFpbmVyKTsKLSAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLSAgICByZXR1cm4gcHlfY29udGFpbmVyOwotICB9Ci0KLSAgaWYgKGZpZWxkX2Rl
c2NyaXB0b3ItPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0Up
IHsKLSAgICBQeU9iamVjdCogc3ViX21lc3NhZ2UgPSBJbnRlcm5hbEdldFN1Yk1lc3NhZ2Uoc2Vs
ZiwgZmllbGRfZGVzY3JpcHRvcik7Ci0gICAgaWYgKHN1Yl9tZXNzYWdlID09IE5VTEwpIHsKLSAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoIVNldENvbXBvc2l0ZUZpZWxkKHNlbGYs
IG5hbWUsIHN1Yl9tZXNzYWdlKSkgewotICAgICAgUHlfREVDUkVGKHN1Yl9tZXNzYWdlKTsKLSAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gc3ViX21lc3NhZ2U7Ci0gIH0KLQot
ICByZXR1cm4gSW50ZXJuYWxHZXRTY2FsYXIoc2VsZi0+bWVzc2FnZSwgZmllbGRfZGVzY3JpcHRv
cik7Ci19Ci0KLWludCBTZXRBdHRyKENNZXNzYWdlKiBzZWxmLCBQeU9iamVjdCogbmFtZSwgUHlP
YmplY3QqIHZhbHVlKSB7Ci0gIGlmIChzZWxmLT5jb21wb3NpdGVfZmllbGRzICYmIFB5RGljdF9D
b250YWlucyhzZWxmLT5jb21wb3NpdGVfZmllbGRzLCBuYW1lKSkgewotICAgIFB5RXJyX1NldFN0
cmluZyhQeUV4Y19UeXBlRXJyb3IsICJDYW4ndCBzZXQgY29tcG9zaXRlIGZpZWxkIik7Ci0gICAg
cmV0dXJuIC0xOwotICB9Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlw
dG9yID0gR2V0RmllbGREZXNjcmlwdG9yKHNlbGYsIG5hbWUpOwotICBpZiAoZmllbGRfZGVzY3Jp
cHRvciAhPSBOVUxMKSB7Ci0gICAgQXNzdXJlV3JpdGFibGUoc2VsZik7Ci0gICAgaWYgKGZpZWxk
X2Rlc2NyaXB0b3ItPmxhYmVsKCkgPT0gRmllbGREZXNjcmlwdG9yOjpMQUJFTF9SRVBFQVRFRCkg
ewotICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiQXNzaWdubWVudCBu
b3QgYWxsb3dlZCB0byByZXBlYXRlZCAiCi0gICAgICAgICAgICAgICAgICAgImZpZWxkIFwiJXNc
IiBpbiBwcm90b2NvbCBtZXNzYWdlIG9iamVjdC4iLAotICAgICAgICAgICAgICAgICAgIGZpZWxk
X2Rlc2NyaXB0b3ItPm5hbWUoKS5jX3N0cigpKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9IGVs
c2UgewotICAgICAgaWYgKGZpZWxkX2Rlc2NyaXB0b3ItPmNwcF90eXBlKCkgPT0gRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0
dHJpYnV0ZUVycm9yLCAiQXNzaWdubWVudCBub3QgYWxsb3dlZCB0byAiCi0gICAgICAgICAgICAg
ICAgICAgICAiZmllbGQgXCIlc1wiIGluIHByb3RvY29sIG1lc3NhZ2Ugb2JqZWN0LiIsCi0gICAg
ICAgICAgICAgICAgICAgICBmaWVsZF9kZXNjcmlwdG9yLT5uYW1lKCkuY19zdHIoKSk7Ci0gICAg
ICAgIHJldHVybiAtMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBJbnRlcm5hbFNl
dFNjYWxhcihzZWxmLCBmaWVsZF9kZXNjcmlwdG9yLCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAotICAgICAgICAgICAg
ICAgIkFzc2lnbm1lbnQgbm90IGFsbG93ZWQgIgotICAgICAgICAgICAgICAgIihubyBmaWVsZCBc
IiVzXCIgaW4gcHJvdG9jb2wgbWVzc2FnZSBvYmplY3QpLiIsCi0gICAgICAgICAgICAgICBQeVN0
cmluZ19Bc1N0cmluZyhuYW1lKSk7Ci0gIHJldHVybiAtMTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
IGNtZXNzYWdlCi0KLVB5VHlwZU9iamVjdCBDTWVzc2FnZV9UeXBlID0gewotICBQeVZhck9iamVj
dF9IRUFEX0lOSVQoJkNNZXNzYWdlQ2xhc3NfVHlwZSwgMCkKLSAgRlVMTF9NT0RVTEVfTkFNRSAi
LkNNZXNzYWdlIiwgICAgICAgIC8vIHRwX25hbWUKLSAgc2l6ZW9mKENNZXNzYWdlKSwgICAgICAg
ICAgICAgICAgICAgIC8vIHRwX2Jhc2ljc2l6ZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gIHRwX2l0ZW1zaXplCi0gIChkZXN0cnVjdG9yKWNtZXNzYWdlOjpEZWFs
bG9jLCAgICAgICAvLyAgdHBfZGVhbGxvYwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gIHRwX3ByaW50Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgdHBfZ2V0YXR0cgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gIHRwX3NldGF0dHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vICB0cF9jb21wYXJlCi0gIChyZXByZnVuYyljbWVzc2FnZTo6VG9TdHIsICAgICAgICAgICAv
LyAgdHBfcmVwcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRw
X2FzX251bWJlcgotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRw
X2FzX3NlcXVlbmNlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
dHBfYXNfbWFwcGluZwotICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQsICAgICAgICAgLy8g
IHRwX2hhc2gKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9j
YWxsCi0gIChyZXByZnVuYyljbWVzc2FnZTo6VG9TdHIsICAgICAgICAgICAvLyAgdHBfc3RyCi0g
IChnZXRhdHRyb2Z1bmMpY21lc3NhZ2U6OkdldEF0dHIsICAgICAvLyAgdHBfZ2V0YXR0cm8KLSAg
KHNldGF0dHJvZnVuYyljbWVzc2FnZTo6U2V0QXR0ciwgICAgIC8vICB0cF9zZXRhdHRybwotICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2FzX2J1ZmZlcgotICBQ
eV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLy8gIHRwX2ZsYWdzCi0g
ICJBIFByb3RvY29sTWVzc2FnZSIsICAgICAgICAgICAgICAgICAvLyAgdHBfZG9jCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfdHJhdmVyc2UKLSAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9jbGVhcgotICAocmljaGNtcGZ1
bmMpY21lc3NhZ2U6OlJpY2hDb21wYXJlLCAgLy8gIHRwX3JpY2hjb21wYXJlCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfd2Vha2xpc3RvZmZzZXQKLSAgMCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9pdGVyCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaXRlcm5leHQKLSAgY21lc3NhZ2U6
Ok1ldGhvZHMsICAgICAgICAgICAgICAgICAgIC8vICB0cF9tZXRob2RzCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfbWVtYmVycwotICBjbWVzc2FnZTo6R2V0
dGVycywgICAgICAgICAgICAgICAgICAgLy8gIHRwX2dldHNldAotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2Jhc2UKLSAgMCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICB0cF9kaWN0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgdHBfZGVzY3JfZ2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgdHBfZGVzY3Jfc2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgdHBfZGljdG9mZnNldAotICAoaW5pdHByb2MpY21lc3NhZ2U6OkluaXQs
ICAgICAgICAgICAgLy8gIHRwX2luaXQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICB0cF9hbGxvYwotICBjbWVzc2FnZTo6TmV3LCAgICAgICAgICAgICAgICAgICAg
ICAgLy8gIHRwX25ldwotfTsKLQotLy8gLS0tIEV4cG9zaW5nIHRoZSBDIHByb3RvIGxpdmluZyBp
bnNpZGUgUHl0aG9uIHByb3RvIHRvIEMgY29kZToKLQotY29uc3QgTWVzc2FnZSogKCpHZXRDUHJv
dG9JbnNpZGVQeVByb3RvUHRyKShQeU9iamVjdCogbXNnKTsKLU1lc3NhZ2UqICgqTXV0YWJsZUNQ
cm90b0luc2lkZVB5UHJvdG9QdHIpKFB5T2JqZWN0KiBtc2cpOwotCi1zdGF0aWMgY29uc3QgTWVz
c2FnZSogR2V0Q1Byb3RvSW5zaWRlUHlQcm90b0ltcGwoUHlPYmplY3QqIG1zZykgewotICBpZiAo
IVB5T2JqZWN0X1R5cGVDaGVjayhtc2csICZDTWVzc2FnZV9UeXBlKSkgewotICAgIHJldHVybiBO
VUxMOwotICB9Ci0gIENNZXNzYWdlKiBjbXNnID0gcmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+
KG1zZyk7Ci0gIHJldHVybiBjbXNnLT5tZXNzYWdlOwotfQotCi1zdGF0aWMgTWVzc2FnZSogTXV0
YWJsZUNQcm90b0luc2lkZVB5UHJvdG9JbXBsKFB5T2JqZWN0KiBtc2cpIHsKLSAgaWYgKCFQeU9i
amVjdF9UeXBlQ2hlY2sobXNnLCAmQ01lc3NhZ2VfVHlwZSkpIHsKLSAgICByZXR1cm4gTlVMTDsK
LSAgfQotICBDTWVzc2FnZSogY21zZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q01lc3NhZ2UqPihtc2cp
OwotICBpZiAoKGNtc2ctPmNvbXBvc2l0ZV9maWVsZHMgJiYgUHlEaWN0X1NpemUoY21zZy0+Y29t
cG9zaXRlX2ZpZWxkcykgIT0gMCkgfHwKLSAgICAgIChjbXNnLT5leHRlbnNpb25zICE9IE5VTEwg
JiYKLSAgICAgICBQeURpY3RfU2l6ZShjbXNnLT5leHRlbnNpb25zLT52YWx1ZXMpICE9IDApKSB7
Ci0gICAgLy8gVGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSBvZiBhY2N1cmF0ZWx5IHN5bmNpbmcg
YXJiaXRyYXJ5IGNoYW5nZXMgdG8KLSAgICAvLyB0aGUgdW5kZXJseWluZyBDKysgbWVzc2FnZSBi
YWNrIHRvIHRoZSBDTWVzc2FnZSAoZS5nLiByZW1vdmVkIHJlcGVhdGVkCi0gICAgLy8gY29tcG9z
aXRlIGNvbnRhaW5lcnMpLiBXZSBvbmx5IGFsbG93IGRpcmVjdCBtdXRhdGlvbiBvZiB0aGUgdW5k
ZXJseWluZwotICAgIC8vIEMrKyBtZXNzYWdlIGlmIHRoZXJlIGlzIG5vIGNoaWxkIGRhdGEgaW4g
dGhlIENNZXNzYWdlLgotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGNtZXNzYWdlOjpBc3N1cmVX
cml0YWJsZShjbXNnKTsKLSAgcmV0dXJuIGNtc2ctPm1lc3NhZ2U7Ci19Ci0KLXN0YXRpYyBjb25z
dCBjaGFyIG1vZHVsZV9kb2NzdHJpbmdbXSA9Ci0icHl0aG9uLXByb3RvMiBpcyBhIG1vZHVsZSB0
aGF0IGNhbiBiZSB1c2VkIHRvIGVuaGFuY2UgcHJvdG8yIFB5dGhvbiBBUElcbiIKLSJwZXJmb3Jt
YW5jZS5cbiIKLSJcbiIKLSJJdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHByb3RvY29sIGJ1ZmZl
cnMgQysrIHJlZmxlY3Rpb24gQVBJIHRoYXRcbiIKLSJpbXBsZW1lbnRzIHRoZSBiYXNpYyBwcm90
b2NvbCBidWZmZXIgZnVuY3Rpb25zLiI7Ci0KLXZvaWQgSW5pdEdsb2JhbHMoKSB7Ci0gIC8vIFRP
RE8oZ3BzKTogQ2hlY2sgYWxsIHJldHVybiB2YWx1ZXMgaW4gdGhpcyBmdW5jdGlvbiBmb3IgTlVM
TCBhbmQgcHJvcGFnYXRlCi0gIC8vIHRoZSBlcnJvciAoTWVtb3J5RXJyb3IpIG9uIHVwIHRvIHJl
c3VsdCBpbiBhbiBpbXBvcnQgZmFpbHVyZS4gIFRoZXNlIHNob3VsZAotICAvLyBhbHNvIGJlIGZy
ZWVkIGFuZCByZXNldCB0byBOVUxMIGR1cmluZyBmaW5hbGl6YXRpb24uCi0gIGtQeXRob25aZXJv
ID0gUHlJbnRfRnJvbUxvbmcoMCk7Ci0gIGtpbnQzMm1pbl9weSA9IFB5SW50X0Zyb21Mb25nKGtp
bnQzMm1pbik7Ci0gIGtpbnQzMm1heF9weSA9IFB5SW50X0Zyb21Mb25nKGtpbnQzMm1heCk7Ci0g
IGt1aW50MzJtYXhfcHkgPSBQeUxvbmdfRnJvbUxvbmdMb25nKGt1aW50MzJtYXgpOwotICBraW50
NjRtaW5fcHkgPSBQeUxvbmdfRnJvbUxvbmdMb25nKGtpbnQ2NG1pbik7Ci0gIGtpbnQ2NG1heF9w
eSA9IFB5TG9uZ19Gcm9tTG9uZ0xvbmcoa2ludDY0bWF4KTsKLSAga3VpbnQ2NG1heF9weSA9IFB5
TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZyhrdWludDY0bWF4KTsKLQotICBrREVTQ1JJUFRPUiA9
IFB5U3RyaW5nX0Zyb21TdHJpbmcoIkRFU0NSSVBUT1IiKTsKLSAga19jZGVzY3JpcHRvciA9IFB5
U3RyaW5nX0Zyb21TdHJpbmcoIl9jZGVzY3JpcHRvciIpOwotICBrZnVsbF9uYW1lID0gUHlTdHJp
bmdfRnJvbVN0cmluZygiZnVsbF9uYW1lIik7Ci0gIGtfZXh0ZW5zaW9uc19ieV9uYW1lID0gUHlT
dHJpbmdfRnJvbVN0cmluZygiX2V4dGVuc2lvbnNfYnlfbmFtZSIpOwotICBrX2V4dGVuc2lvbnNf
YnlfbnVtYmVyID0gUHlTdHJpbmdfRnJvbVN0cmluZygiX2V4dGVuc2lvbnNfYnlfbnVtYmVyIik7
Ci0KLSAgUHlPYmplY3QgKmR1bW15X29iaiA9IFB5U2V0X05ldyhOVUxMKTsKLSAga0VtcHR5V2Vh
a3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoZHVtbXlfb2JqLCBOVUxMKTsKLSAgUHlfREVDUkVGKGR1
bW15X29iaik7Ci19Ci0KLWJvb2wgSW5pdFByb3RvMk1lc3NhZ2VNb2R1bGUoUHlPYmplY3QgKm0p
IHsKLSAgLy8gSW5pdGlhbGl6ZSB0eXBlcyBhbmQgZ2xvYmFscyBpbiBkZXNjcmlwdG9yLmNjCi0g
IGlmICghSW5pdERlc2NyaXB0b3IoKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8v
IEluaXRpYWxpemUgdHlwZXMgYW5kIGdsb2JhbHMgaW4gZGVzY3JpcHRvcl9wb29sLmNjCi0gIGlm
ICghSW5pdERlc2NyaXB0b3JQb29sKCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAv
LyBJbml0aWFsaXplIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoaXMgZmlsZS4KLSAgSW5pdEdsb2Jh
bHMoKTsKLQotICBDTWVzc2FnZUNsYXNzX1R5cGUudHBfYmFzZSA9ICZQeVR5cGVfVHlwZTsKLSAg
aWYgKFB5VHlwZV9SZWFkeSgmQ01lc3NhZ2VDbGFzc19UeXBlKSA8IDApIHsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLSAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJNZXNzYWdlTWV0YSIsCi0gICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oJkNNZXNzYWdlQ2xh
c3NfVHlwZSkpOwotCi0gIGlmIChQeVR5cGVfUmVhZHkoJkNNZXNzYWdlX1R5cGUpIDwgMCkgewot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIERFU0NSSVBUT1IgaXMgc2V0IG9uIGVhY2gg
cHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2UgY2xhc3MgZWxzZXdoZXJlLCBidXQgc2V0Ci0gIC8vIGl0
IGhlcmUgYXMgd2VsbCB0byBkb2N1bWVudCB0aGF0IHN1YmNsYXNzZXMgbmVlZCB0byBzZXQgaXQu
Ci0gIFB5RGljdF9TZXRJdGVtKENNZXNzYWdlX1R5cGUudHBfZGljdCwga0RFU0NSSVBUT1IsIFB5
X05vbmUpOwotICAvLyBTdWJjbGFzc2VzIHdpdGggbWVzc2FnZSBleHRlbnNpb25zIHdpbGwgb3Zl
cnJpZGUgX2V4dGVuc2lvbnNfYnlfbmFtZSBhbmQKLSAgLy8gX2V4dGVuc2lvbnNfYnlfbnVtYmVy
IHdpdGggZnJlc2ggbXV0YWJsZSBkaWN0aW9uYXJpZXMgaW4gQWRkRGVzY3JpcHRvcnMuCi0gIC8v
IEFsbCBvdGhlciBjbGFzc2VzIGNhbiBzaGFyZSB0aGlzIHNhbWUgaW1tdXRhYmxlIG1hcHBpbmcu
Ci0gIFNjb3BlZFB5T2JqZWN0UHRyIGVtcHR5X2RpY3QoUHlEaWN0X05ldygpKTsKLSAgaWYgKGVt
cHR5X2RpY3QgPT0gTlVMTCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBTY29wZWRQeU9i
amVjdFB0ciBpbW11dGFibGVfZGljdChQeURpY3RQcm94eV9OZXcoZW1wdHlfZGljdC5nZXQoKSkp
OwotICBpZiAoaW1tdXRhYmxlX2RpY3QgPT0gTlVMTCkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotICBpZiAoUHlEaWN0X1NldEl0ZW0oQ01lc3NhZ2VfVHlwZS50cF9kaWN0LAotICAgICAgICAg
ICAgICAgICAgICAga19leHRlbnNpb25zX2J5X25hbWUsIGltbXV0YWJsZV9kaWN0LmdldCgpKSA8
IDApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKFB5RGljdF9TZXRJdGVtKENNZXNz
YWdlX1R5cGUudHBfZGljdCwKLSAgICAgICAgICAgICAgICAgICAgIGtfZXh0ZW5zaW9uc19ieV9u
dW1iZXIsIGltbXV0YWJsZV9kaWN0LmdldCgpKSA8IDApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0KLQotICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIk1lc3NhZ2UiLCByZWludGVycHJldF9jYXN0
PFB5T2JqZWN0Kj4oJkNNZXNzYWdlX1R5cGUpKTsKLQotICAvLyBJbml0aWFsaXplIFJlcGVhdGVk
IGNvbnRhaW5lciB0eXBlcy4KLSAgewotICAgIGlmIChQeVR5cGVfUmVhZHkoJlJlcGVhdGVkU2Nh
bGFyQ29udGFpbmVyX1R5cGUpIDwgMCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUmVwZWF0ZWRTY2FsYXJDb250YWluZXIiLAotICAg
ICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAmUmVwZWF0ZWRTY2FsYXJDb250YWluZXJfVHlwZSkpOwotCi0g
ICAgaWYgKFB5VHlwZV9SZWFkeSgmUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXJfVHlwZSkgPCAw
KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgUHlNb2R1bGVfQWRkT2JqZWN0
KAotICAgICAgICBtLCAiUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIiLAotICAgICAgICByZWlu
dGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oCi0gICAgICAgICAgICAmUmVwZWF0ZWRDb21wb3NpdGVD
b250YWluZXJfVHlwZSkpOwotCi0gICAgLy8gUmVnaXN0ZXIgdGhlbSBhcyBjb2xsZWN0aW9ucy5T
ZXF1ZW5jZQotICAgIFNjb3BlZFB5T2JqZWN0UHRyIGNvbGxlY3Rpb25zKFB5SW1wb3J0X0ltcG9y
dE1vZHVsZSgiY29sbGVjdGlvbnMiKSk7Ci0gICAgaWYgKGNvbGxlY3Rpb25zID09IE5VTEwpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgU2NvcGVkUHlPYmplY3RQdHIgbXV0YWJs
ZV9zZXF1ZW5jZSgKLSAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb2xsZWN0aW9ucy5n
ZXQoKSwgIk11dGFibGVTZXF1ZW5jZSIpKTsKLSAgICBpZiAobXV0YWJsZV9zZXF1ZW5jZSA9PSBO
VUxMKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChTY29wZWRQeU9iamVj
dFB0cigKLSAgICAgICAgICAgIFB5T2JqZWN0X0NhbGxNZXRob2QobXV0YWJsZV9zZXF1ZW5jZS5n
ZXQoKSwgInJlZ2lzdGVyIiwgIk8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
UmVwZWF0ZWRTY2FsYXJDb250YWluZXJfVHlwZSkpID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgaWYgKFNjb3BlZFB5T2JqZWN0UHRyKAotICAgICAgICAgICAgUHlP
YmplY3RfQ2FsbE1ldGhvZChtdXRhYmxlX3NlcXVlbmNlLmdldCgpLCAicmVnaXN0ZXIiLCAiTyIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXBlYXRlZENvbXBvc2l0ZUNvbnRh
aW5lcl9UeXBlKSkgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQot
Ci0gIC8vIEluaXRpYWxpemUgTWFwIGNvbnRhaW5lciB0eXBlcy4KLSAgewotICAgIC8vIFNjYWxh
ck1hcENvbnRhaW5lcl9UeXBlIGRlcml2ZXMgZnJvbSBvdXIgTXV0YWJsZU1hcHBpbmcgdHlwZS4K
LSAgICBTY29wZWRQeU9iamVjdFB0ciBjb250YWluZXJzKFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgK
LSAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbC5jb250YWluZXJzIikpOwotICAgIGlm
IChjb250YWluZXJzID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBTY29wZWRQeU9iamVjdFB0ciBtdXRhYmxlX21hcHBpbmcoCi0gICAgICAgIFB5T2JqZWN0X0dl
dEF0dHJTdHJpbmcoY29udGFpbmVycy5nZXQoKSwgIk11dGFibGVNYXBwaW5nIikpOwotICAgIGlm
IChtdXRhYmxlX21hcHBpbmcgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlmICghUHlPYmplY3RfVHlwZUNoZWNrKG11dGFibGVfbWFwcGluZy5nZXQoKSwgJlB5
VHlwZV9UeXBlKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFB5X0lOQ1JF
RihtdXRhYmxlX21hcHBpbmcuZ2V0KCkpOwotI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotICAg
IFB5T2JqZWN0KiBiYXNlcyA9IFB5VHVwbGVfTmV3KDEpOwotICAgIFB5VHVwbGVfU0VUX0lURU0o
YmFzZXMsIDAsIG11dGFibGVfbWFwcGluZy5nZXQoKSk7Ci0KLSAgICBTY2FsYXJNYXBDb250YWlu
ZXJfVHlwZSA9IAotICAgICAgICBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMoJlNjYWxhck1hcENv
bnRhaW5lcl9UeXBlX3NwZWMsIGJhc2VzKTsKLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNj
YWxhck1hcENvbnRhaW5lciIsIFNjYWxhck1hcENvbnRhaW5lcl9UeXBlKTsKLSNlbHNlCi0gICAg
U2NhbGFyTWFwQ29udGFpbmVyX1R5cGUudHBfYmFzZSA9Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8UHlUeXBlT2JqZWN0Kj4obXV0YWJsZV9tYXBwaW5nLmdldCgpKTsKLQotICAgIGlmIChQeVR5
cGVfUmVhZHkoJlNjYWxhck1hcENvbnRhaW5lcl9UeXBlKSA8IDApIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNjYWxhck1hcENvbnRh
aW5lciIsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3Qq
PigmU2NhbGFyTWFwQ29udGFpbmVyX1R5cGUpKTsKLSNlbmRpZgotCi0gICAgaWYgKFB5VHlwZV9S
ZWFkeSgmTWFwSXRlcmF0b3JfVHlwZSkgPCAwKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJNYXBJdGVyYXRvciIsCi0gICAgICAgICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPigmTWFwSXRlcmF0b3JfVHlw
ZSkpOwotCi0KLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLSAgICBNZXNzYWdlTWFwQ29udGFp
bmVyX1R5cGUgPSAKLSAgICAgICAgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzKCZNZXNzYWdlTWFw
Q29udGFpbmVyX1R5cGVfc3BlYywgYmFzZXMpOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAi
TWVzc2FnZU1hcENvbnRhaW5lciIsIE1lc3NhZ2VNYXBDb250YWluZXJfVHlwZSk7Ci0jZWxzZQot
ICAgIFB5X0lOQ1JFRihtdXRhYmxlX21hcHBpbmcuZ2V0KCkpOwotICAgIE1lc3NhZ2VNYXBDb250
YWluZXJfVHlwZS50cF9iYXNlID0KLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxQeVR5cGVPYmpl
Y3QqPihtdXRhYmxlX21hcHBpbmcuZ2V0KCkpOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmTWVz
c2FnZU1hcENvbnRhaW5lcl9UeXBlKSA8IDApIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIk1lc3NhZ2VNYXBDb250YWluZXIiLAotICAg
ICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oJk1lc3NhZ2VN
YXBDb250YWluZXJfVHlwZSkpOwotI2VuZGlmCi0gIH0KLQotICBpZiAoUHlUeXBlX1JlYWR5KCZF
eHRlbnNpb25EaWN0X1R5cGUpIDwgMCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBQeU1v
ZHVsZV9BZGRPYmplY3QoCi0gICAgICBtLCAiRXh0ZW5zaW9uRGljdCIsCi0gICAgICByZWludGVy
cHJldF9jYXN0PFB5T2JqZWN0Kj4oJkV4dGVuc2lvbkRpY3RfVHlwZSkpOwotCi0gIC8vIEV4cG9z
ZSB0aGUgRGVzY3JpcHRvclBvb2wgdXNlZCB0byBob2xkIGFsbCBkZXNjcmlwdG9ycyBhZGRlZCBm
cm9tIGdlbmVyYXRlZAotICAvLyBwYjIucHkgZmlsZXMuCi0gIC8vIFB5TW9kdWxlX0FkZE9iamVj
dCBzdGVhbHMgYSByZWZlcmVuY2UuCi0gIFB5X0lOQ1JFRihHZXREZWZhdWx0RGVzY3JpcHRvclBv
b2woKSk7Ci0gIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZGVmYXVsdF9wb29sIiwKLSAgICAgICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihHZXREZWZhdWx0RGVzY3Jp
cHRvclBvb2woKSkpOwotCi0gIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiRGVzY3JpcHRvclBvb2wi
LCByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oCi0gICAgICAmUHlEZXNjcmlwdG9yUG9vbF9U
eXBlKSk7Ci0KLSAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBmdWxsIERlc2NyaXB0
b3IgdHlwZXMsIHdlIGFkdmVydGlzZSBpdCBzbyB0aGF0Ci0gIC8vIGRlc2NyaXB0b3IucHkgY2Fu
IHVzZSB0aGVtIGluIHJlcGxhY2VtZW50IG9mIHRoZSBQeXRob24gY2xhc3Nlcy4KLSAgUHlNb2R1
bGVfQWRkSW50Q29uc3RhbnQobSwgIl9VU0VfQ19ERVNDUklQVE9SUyIsIDEpOwotCi0gIFB5TW9k
dWxlX0FkZE9iamVjdChtLCAiRGVzY3JpcHRvciIsIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3Qq
PigKLSAgICAgICZQeU1lc3NhZ2VEZXNjcmlwdG9yX1R5cGUpKTsKLSAgUHlNb2R1bGVfQWRkT2Jq
ZWN0KG0sICJGaWVsZERlc2NyaXB0b3IiLCByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oCi0g
ICAgICAmUHlGaWVsZERlc2NyaXB0b3JfVHlwZSkpOwotICBQeU1vZHVsZV9BZGRPYmplY3QobSwg
IkVudW1EZXNjcmlwdG9yIiwgcmVpbnRlcnByZXRfY2FzdDxQeU9iamVjdCo+KAotICAgICAgJlB5
RW51bURlc2NyaXB0b3JfVHlwZSkpOwotICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkVudW1WYWx1
ZURlc2NyaXB0b3IiLCByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oCi0gICAgICAmUHlFbnVt
VmFsdWVEZXNjcmlwdG9yX1R5cGUpKTsKLSAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJGaWxlRGVz
Y3JpcHRvciIsIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPigKLSAgICAgICZQeUZpbGVEZXNj
cmlwdG9yX1R5cGUpKTsKLSAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJPbmVvZkRlc2NyaXB0b3Ii
LCByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oCi0gICAgICAmUHlPbmVvZkRlc2NyaXB0b3Jf
VHlwZSkpOwotCi0gIFB5T2JqZWN0KiBlbnVtX3R5cGVfd3JhcHBlciA9IFB5SW1wb3J0X0ltcG9y
dE1vZHVsZSgKLSAgICAgICJnb29nbGUucHJvdG9idWYuaW50ZXJuYWwuZW51bV90eXBlX3dyYXBw
ZXIiKTsKLSAgaWYgKGVudW1fdHlwZV93cmFwcGVyID09IE5VTEwpIHsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLSAgRW51bVR5cGVXcmFwcGVyX2NsYXNzID0KLSAgICAgIFB5T2JqZWN0X0dldEF0
dHJTdHJpbmcoZW51bV90eXBlX3dyYXBwZXIsICJFbnVtVHlwZVdyYXBwZXIiKTsKLSAgUHlfREVD
UkVGKGVudW1fdHlwZV93cmFwcGVyKTsKLQotICBQeU9iamVjdCogbWVzc2FnZV9tb2R1bGUgPSBQ
eUltcG9ydF9JbXBvcnRNb2R1bGUoCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLm1lc3NhZ2UiKTsK
LSAgaWYgKG1lc3NhZ2VfbW9kdWxlID09IE5VTEwpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LSAgRW5jb2RlRXJyb3JfY2xhc3MgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG1lc3NhZ2VfbW9k
dWxlLCAiRW5jb2RlRXJyb3IiKTsKLSAgRGVjb2RlRXJyb3JfY2xhc3MgPSBQeU9iamVjdF9HZXRB
dHRyU3RyaW5nKG1lc3NhZ2VfbW9kdWxlLCAiRGVjb2RlRXJyb3IiKTsKLSAgUHl0aG9uTWVzc2Fn
ZV9jbGFzcyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobWVzc2FnZV9tb2R1bGUsICJNZXNzYWdl
Iik7Ci0gIFB5X0RFQ1JFRihtZXNzYWdlX21vZHVsZSk7Ci0KLSAgUHlPYmplY3QqIHBpY2tsZV9t
b2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInBpY2tsZSIpOwotICBpZiAocGlja2xlX21v
ZHVsZSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIFBpY2tsZUVycm9yX2Ns
YXNzID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhwaWNrbGVfbW9kdWxlLCAiUGlja2xlRXJyb3Ii
KTsKLSAgUHlfREVDUkVGKHBpY2tsZV9tb2R1bGUpOwotCi0gIC8vIE92ZXJyaWRlIHtHZXQsTXV0
YWJsZX1DUHJvdG9JbnNpZGVQeVByb3RvLgotICBHZXRDUHJvdG9JbnNpZGVQeVByb3RvUHRyID0g
R2V0Q1Byb3RvSW5zaWRlUHlQcm90b0ltcGw7Ci0gIE11dGFibGVDUHJvdG9JbnNpZGVQeVByb3Rv
UHRyID0gTXV0YWJsZUNQcm90b0luc2lkZVB5UHJvdG9JbXBsOwotCi0gIHJldHVybiB0cnVlOwot
fQotCi19ICAvLyBuYW1lc3BhY2UgcHl0aG9uCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQot
c3RhdGljIFB5TWV0aG9kRGVmIE1vZHVsZU1ldGhvZHNbXSA9IHsKLSAgeyJTZXRBbGxvd092ZXJz
aXplUHJvdG9zIiwKLSAgICAoUHlDRnVuY3Rpb24pZ29vZ2xlOjpwcm90b2J1Zjo6cHl0aG9uOjpj
bWVzc2FnZTo6U2V0QWxsb3dPdmVyc2l6ZVByb3RvcywKLSAgICBNRVRIX08sICJFbmFibGUvZGlz
YWJsZSBvdmVyc2l6ZSBwcm90byBwYXJzaW5nLiJ9LAotICB7IE5VTEwsIE5VTEx9Ci19OwotCi0j
aWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi1zdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9tb2R1
bGUgPSB7Ci0gIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgIl9tZXNzYWdlIiwKLSAgZ29vZ2xl
Ojpwcm90b2J1Zjo6cHl0aG9uOjptb2R1bGVfZG9jc3RyaW5nLAotICAtMSwKLSAgTW9kdWxlTWV0
aG9kcywgIC8qIG1fbWV0aG9kcyAqLwotICBOVUxMLAotICBOVUxMLAotICBOVUxMLAotICBOVUxM
Ci19OwotI2RlZmluZSBJTklURlVOQyBQeUluaXRfX21lc3NhZ2UKLSNkZWZpbmUgSU5JVEZVTkNf
RVJST1JWQUwgTlVMTAotI2Vsc2UgIC8vIFB5dGhvbiAyCi0jZGVmaW5lIElOSVRGVU5DIGluaXRf
bWVzc2FnZQotI2RlZmluZSBJTklURlVOQ19FUlJPUlZBTAotI2VuZGlmCi0KLWV4dGVybiAiQyIg
ewotICBQeU1PRElOSVRfRlVOQyBJTklURlVOQyh2b2lkKSB7Ci0gICAgUHlPYmplY3QqIG07Ci0j
aWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0gICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX21vZHVs
ZSk7Ci0jZWxzZQotICAgIG0gPSBQeV9Jbml0TW9kdWxlMygiX21lc3NhZ2UiLCBNb2R1bGVNZXRo
b2RzLAotICAgICAgICAgICAgICAgICAgICAgICBnb29nbGU6OnByb3RvYnVmOjpweXRob246Om1v
ZHVsZV9kb2NzdHJpbmcpOwotI2VuZGlmCi0gICAgaWYgKG0gPT0gTlVMTCkgewotICAgICAgcmV0
dXJuIElOSVRGVU5DX0VSUk9SVkFMOwotICAgIH0KLQotICAgIGlmICghZ29vZ2xlOjpwcm90b2J1
Zjo6cHl0aG9uOjpJbml0UHJvdG8yTWVzc2FnZU1vZHVsZShtKSkgewotICAgICAgUHlfREVDUkVG
KG0pOwotICAgICAgcmV0dXJuIElOSVRGVU5DX0VSUk9SVkFMOwotICAgIH0KLQotI2lmIFBZX01B
Sk9SX1ZFUlNJT04gPj0gMwotICAgIHJldHVybiBtOwotI2VuZGlmCi0gIH0KLX0KLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9t
ZXNzYWdlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvbWVzc2FnZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTRiZWM4MWM5ZDUwNDQ4OWI4MWNmMzRmZmI3MDFkYWFm
NDQ2MzY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0
aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9tZXNzYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
NjEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhv
cjogYW51cmFhZ0Bnb29nbGUuY29tIChBbnVyYWFnIEFncmF3YWwpCi0vLyBBdXRob3I6IHRpYmVs
bEBnb29nbGUuY29tIChKb2hhbiBUaWJlbGwpCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1BZ
VEhPTl9DUFBfTUVTU0FHRV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1BZVEhPTl9DUFBf
TUVTU0FHRV9IX18KLQotI2luY2x1ZGUgPFB5dGhvbi5oPgotCi0jaW5jbHVkZSA8bWVtb3J5Pgot
I2lmbmRlZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3No
YXJlZF9wdHIuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFtZXNwYWNlIGdvb2ds
ZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1jbGFzcyBNZXNzYWdlOwotY2xhc3MgUmVmbGVj
dGlvbjsKLWNsYXNzIEZpZWxkRGVzY3JpcHRvcjsKLWNsYXNzIERlc2NyaXB0b3I7Ci1jbGFzcyBE
ZXNjcmlwdG9yUG9vbDsKLWNsYXNzIE1lc3NhZ2VGYWN0b3J5OwotCi0jaWZkZWYgX1NIQVJFRF9Q
VFJfSAotdXNpbmcgc3RkOjpzaGFyZWRfcHRyOwotdXNpbmcgOjpzdGQ6OnN0cmluZzsKLSNlbHNl
Ci11c2luZyBpbnRlcm5hbDo6c2hhcmVkX3B0cjsKLSNlbmRpZgotCi1uYW1lc3BhY2UgcHl0aG9u
IHsKLQotc3RydWN0IEV4dGVuc2lvbkRpY3Q7Ci1zdHJ1Y3QgUHlEZXNjcmlwdG9yUG9vbDsKLQot
dHlwZWRlZiBzdHJ1Y3QgQ01lc3NhZ2UgewotICBQeU9iamVjdF9IRUFEOwotCi0gIC8vIFRoaXMg
aXMgdGhlIHRvcC1sZXZlbCBDKysgTWVzc2FnZSBvYmplY3QgdGhhdCBvd25zIHRoZSB3aG9sZQot
ICAvLyBwcm90byB0cmVlLiAgRXZlcnkgUHl0aG9uIENNZXNzYWdlIGhvbGRzIGEgcmVmZXJlbmNl
IHRvIGl0IGluCi0gIC8vIG9yZGVyIHRvIGtlZXAgaXQgYWxpdmUgYXMgbG9uZyBhcyB0aGVyZSdz
IGEgUHl0aG9uIG9iamVjdCB0aGF0Ci0gIC8vIHJlZmVyZW5jZXMgYW55IHBhcnQgb2YgdGhlIHRy
ZWUuCi0gIHNoYXJlZF9wdHI8TWVzc2FnZT4gb3duZXI7Ci0KLSAgLy8gV2VhayByZWZlcmVuY2Ug
dG8gYSBwYXJlbnQgQ01lc3NhZ2Ugb2JqZWN0LiBUaGlzIGlzIE5VTEwgZm9yIGFueSB0b3AtbGV2
ZWwKLSAgLy8gbWVzc2FnZSBhbmQgaXMgc2V0IGZvciBhbnkgY2hpbGQgbWVzc2FnZSAoaS5lLiBh
IGNoaWxkIHN1Ym1lc3NhZ2Ugb3IgYQotICAvLyBwYXJ0IG9mIGEgcmVwZWF0ZWQgY29tcG9zaXRl
IGZpZWxkKS4KLSAgLy8KLSAgLy8gVXNlZCB0byBtYWtlIHN1cmUgYWxsIGFuY2VzdG9ycyBhcmUg
YWxzbyBtdXRhYmxlIHdoZW4gZmlyc3QgbW9kaWZ5aW5nCi0gIC8vIGEgY2hpbGQgc3VibWVzc2Fn
ZSAoaW4gb3RoZXIgd29yZHMsIHR1cm5pbmcgYSBkZWZhdWx0IG1lc3NhZ2UgaW5zdGFuY2UKLSAg
Ly8gaW50byBhIG11dGFibGUgb25lKS4KLSAgLy8KLSAgLy8gSWYgYSBzdWJtZXNzYWdlIGlzIHJl
bGVhc2VkIChiZWNvbWVzIGEgbmV3IHRvcC1sZXZlbCBtZXNzYWdlKSwgdGhpcyBmaWVsZAotICAv
LyBNVVNUIGJlIHNldCB0byBOVUxMLiBUaGUgcGFyZW50IG1heSBnZXQgZGVhbGxvY2F0ZWQgYW5k
IGZ1cnRoZXIgYXR0ZW1wdHMKLSAgLy8gdG8gdXNlIHRoaXMgcG9pbnRlciB3aWxsIHJlc3VsdCBp
biBhIGNyYXNoLgotICBzdHJ1Y3QgQ01lc3NhZ2UqIHBhcmVudDsKLQotICAvLyBQb2ludGVyIHRv
IHRoZSBwYXJlbnQncyBkZXNjcmlwdG9yIHRoYXQgZGVzY3JpYmVzIHRoaXMgc3VibWVzc2FnZS4K
LSAgLy8gVXNlZCB0b2dldGhlciB3aXRoIHRoZSBwYXJlbnQncyBtZXNzYWdlIHdoZW4gbWFraW5n
IGEgZGVmYXVsdCBtZXNzYWdlCi0gIC8vIGluc3RhbmNlIG11dGFibGUuCi0gIC8vIFRoZSBwb2lu
dGVyIGlzIG93bmVkIGJ5IHRoZSBnbG9iYWwgRGVzY3JpcHRvclBvb2wuCi0gIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogcGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3I7Ci0KLSAgLy8gUG9pbnRlciB0byB0
aGUgQysrIE1lc3NhZ2Ugb2JqZWN0IGZvciB0aGlzIENNZXNzYWdlLiAgVGhlCi0gIC8vIENNZXNz
YWdlIGRvZXMgbm90IG93biB0aGlzIHBvaW50ZXIuCi0gIE1lc3NhZ2UqIG1lc3NhZ2U7Ci0KLSAg
Ly8gSW5kaWNhdGVzIHRoaXMgc3VibWVzc2FnZSBpcyBwb2ludGluZyB0byBhIGRlZmF1bHQgaW5z
dGFuY2Ugb2YgYSBtZXNzYWdlLgotICAvLyBTdWJtZXNzYWdlcyBhcmUgYWx3YXlzIGZpcnN0IGNy
ZWF0ZWQgYXMgcmVhZCBvbmx5IG1lc3NhZ2VzIGFuZCBhcmUgdGhlbgotICAvLyBtYWRlIHdyaXRh
YmxlLCBhdCB3aGljaCBwb2ludCB0aGlzIGZpZWxkIGlzIHNldCB0byBmYWxzZS4KLSAgYm9vbCBy
ZWFkX29ubHk7Ci0KLSAgLy8gQSByZWZlcmVuY2UgdG8gYSBQeXRob24gZGljdGlvbmFyeSBjb250
YWluaW5nIENNZXNzYWdlLAotICAvLyBSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lciwgYW5kIFJl
cGVhdGVkU2NhbGFyQ29udGFpbmVyCi0gIC8vIG9iamVjdHMuIFVzZWQgYXMgYSBjYWNoZSB0byBt
YWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSB0byBtYWtlIGEKLSAgLy8gUHl0aG9uIHdyYXBwZXIgZm9y
IHRoZSBDKysgTWVzc2FnZSBvYmplY3RzIG9uIGV2ZXJ5IGFjY2Vzcywgb3IKLSAgLy8gZGVhbCB3
aXRoIHRoZSBzeW5jaHJvbml6YXRpb24gbmlnaHRtYXJlIHRoYXQgY291bGQgY3JlYXRlLgotICBQ
eU9iamVjdCogY29tcG9zaXRlX2ZpZWxkczsKLQotICAvLyBBIHJlZmVyZW5jZSB0byB0aGUgZGlj
dGlvbmFyeSBjb250YWluaW5nIHRoZSBtZXNzYWdlJ3MgZXh0ZW5zaW9ucy4KLSAgLy8gU2ltaWxh
ciB0byBjb21wb3NpdGVfZmllbGRzLCBhY3RpbmcgYXMgYSBjYWNoZSwgYnV0IGFsc28gY29udGFp
bnMgdGhlCi0gIC8vIHJlcXVpcmVkIGV4dGVuc2lvbiBkaWN0IGxvZ2ljLgotICBFeHRlbnNpb25E
aWN0KiBleHRlbnNpb25zOwotfSBDTWVzc2FnZTsKLQotZXh0ZXJuIFB5VHlwZU9iamVjdCBDTWVz
c2FnZV9UeXBlOwotCi0KLS8vIFRoZSAobWV0YSkgdHlwZSBvZiBhbGwgTWVzc2FnZXMgY2xhc3Nl
cy4KLS8vIEl0IGFsbG93cyB1cyB0byBjYWNoZSBzb21lIEMrKyBwb2ludGVycyBpbiB0aGUgY2xh
c3Mgb2JqZWN0IGl0c2VsZiwgdGhleSBhcmUKLS8vIGZhc3RlciB0byBleHRyYWN0IHRoYW4gZnJv
bSB0aGUgdHlwZSdzIGRpY3Rpb25hcnkuCi0KLXN0cnVjdCBDTWVzc2FnZUNsYXNzIHsKLSAgLy8g
VGhpcyBpcyBob3cgQ1B5dGhvbiBzdWJjbGFzc2VzIEMgc3RydWN0dXJlczogdGhlIGJhc2Ugc3Ry
dWN0dXJlIG11c3QgYmUKLSAgLy8gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgb2JqZWN0LgotICBQ
eUhlYXBUeXBlT2JqZWN0IHN1cGVyOwotCi0gIC8vIEMrKyBkZXNjcmlwdG9yIG9mIHRoaXMgbWVz
c2FnZS4KLSAgY29uc3QgRGVzY3JpcHRvciogbWVzc2FnZV9kZXNjcmlwdG9yOwotCi0gIC8vIE93
bmVkIHJlZmVyZW5jZSwgdXNlZCB0byBrZWVwIHRoZSBwb2ludGVyIGFib3ZlIGFsaXZlLgotICBQ
eU9iamVjdCogcHlfbWVzc2FnZV9kZXNjcmlwdG9yOwotCi0gIC8vIFRoZSBQeXRob24gRGVzY3Jp
cHRvclBvb2wgdXNlZCB0byBjcmVhdGUgdGhlIGNsYXNzLiBJdCBpcyBuZWVkZWQgdG8gcmVzb2x2
ZQotICAvLyBmaWVsZHMgZGVzY3JpcHRvcnMsIGluY2x1ZGluZyBleHRlbnNpb25zIGZpZWxkczsg
aXRzIEMrKyBNZXNzYWdlRmFjdG9yeSBpcwotICAvLyB1c2VkIHRvIGluc3RhbnRpYXRlIHN1Ym1l
c3NhZ2VzLgotICAvLyBUaGlzIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSBERVNDUklQVE9SLmZpbGUu
cG9vbCwgaW4gdGhlIGNhc2Ugb2YgYSBjdXN0b20KLSAgLy8gRGVzY3JpcHRvclBvb2wgd2hpY2gg
ZGVmaW5lcyBuZXcgZXh0ZW5zaW9ucy4KLSAgLy8gV2Ugb3duIHRoZSByZWZlcmVuY2UsIGJlY2F1
c2UgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgZGVzY3JpcHRvcnMgYW5kCi0gIC8vIGZhY3Rv
cnkgYWxpdmUuCi0gIFB5RGVzY3JpcHRvclBvb2wqIHB5X2Rlc2NyaXB0b3JfcG9vbDsKLQotICBQ
eU9iamVjdCogQXNQeU9iamVjdCgpIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQeU9i
amVjdCo+KHRoaXMpOwotICB9Ci19OwotCi0KLW5hbWVzcGFjZSBjbWVzc2FnZSB7Ci0KLS8vIElu
dGVybmFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBlbXB0eSBNZXNzYWdlIFB5dGhvbiBvYmpl
Y3QsIGJ1dCB3aXRoIGVtcHR5Ci0vLyBwb2ludGVycyB0byB0aGUgQysrIG9iamVjdHMuCi0vLyBU
aGUgY2FsbGVyIG11c3QgZmlsbCBzZWxmLT5tZXNzYWdlLCBzZWxmLT5vd25lciBhbmQgZXZlbnR1
YWxseSBzZWxmLT5wYXJlbnQuCi1DTWVzc2FnZSogTmV3RW1wdHlNZXNzYWdlKENNZXNzYWdlQ2xh
c3MqIHR5cGUpOwotCi0vLyBSZWxlYXNlIGEgc3VibWVzc2FnZSBmcm9tIGl0cyBwcm90byB0cmVl
LCBtYWtpbmcgaXQgYSBuZXcgdG9wLWxldmVsIG1lc3NnYWUuCi0vLyBBIG5ldyBtZXNzYWdlIHdp
bGwgYmUgY3JlYXRlZCBpZiB0aGlzIGlzIGEgcmVhZC1vbmx5IGRlZmF1bHQgaW5zdGFuY2UuCi0v
LwotLy8gQ29ycmVzcG9uZHMgdG8gcmVmbGVjdGlvbiBhcGkgbWV0aG9kIFJlbGVhc2VNZXNzYWdl
LgotaW50IFJlbGVhc2VTdWJNZXNzYWdlKENNZXNzYWdlKiBzZWxmLAotICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGRfZGVzY3JpcHRvciwKLSAgICAgICAg
ICAgICAgICAgICAgICBDTWVzc2FnZSogY2hpbGRfY21lc3NhZ2UpOwotCi0vLyBSZXRyaWV2ZXMg
dGhlIEMrKyBkZXNjcmlwdG9yIG9mIGEgUHl0aG9uIEV4dGVuc2lvbiBkZXNjcmlwdG9yLgotLy8g
T24gZXJyb3IsIHJldHVybiBOVUxMIHdpdGggYW4gZXhjZXB0aW9uIHNldC4KLWNvbnN0IEZpZWxk
RGVzY3JpcHRvciogR2V0RXh0ZW5zaW9uRGVzY3JpcHRvcihQeU9iamVjdCogZXh0ZW5zaW9uKTsK
LQotLy8gSW5pdGlhbGl6ZXMgYSBuZXcgQ01lc3NhZ2UgaW5zdGFuY2UgZm9yIGEgc3VibWVzc2Fn
ZS4gT25seSBjYWxsZWQgb25jZSBwZXIKLS8vIHN1Ym1lc3NhZ2UgYXMgdGhlIHJlc3VsdCBpcyBj
YWNoZWQgaW4gY29tcG9zaXRlX2ZpZWxkcy4KLS8vCi0vLyBDb3JyZXNwb25kcyB0byByZWZsZWN0
aW9uIGFwaSBtZXRob2QgR2V0TWVzc2FnZS4KLVB5T2JqZWN0KiBJbnRlcm5hbEdldFN1Yk1lc3Nh
Z2UoCi0gICAgQ01lc3NhZ2UqIHNlbGYsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGRfZGVz
Y3JpcHRvcik7Ci0KLS8vIERlbGV0ZXMgYSByYW5nZSBvZiBDKysgc3VibWVzc2FnZXMgaW4gYSBy
ZXBlYXRlZCBmaWVsZCAoZm9sbG93aW5nIGEKLS8vIHJlbW92YWwgaW4gYSBSZXBlYXRlZENvbXBv
c2l0ZUNvbnRhaW5lcikuCi0vLwotLy8gUmVsZWFzZXMgbWVzc2FnZXMgdG8gdGhlIHByb3ZpZGVk
IGNtZXNzYWdlX2xpc3QgaWYgaXQgaXMgbm90IE5VTEwgcmF0aGVyCi0vLyB0aGFuIGp1c3QgcmVt
b3ZpbmcgdGhlbSBmcm9tIHRoZSB1bmRlcmx5aW5nIHByb3RvLiBUaGlzIGNtZXNzYWdlX2xpc3Qg
bXVzdAotLy8gaGF2ZSBhIENNZXNzYWdlIGZvciBlYWNoIHVuZGVybHlpbmcgc3VibWVzc2FnZS4g
VGhlIENNZXNzYWdlcyByZWZlcnJlZCB0bwotLy8gYnkgc2xpY2Ugd2lsbCBiZSByZW1vdmVkIGZy
b20gY21lc3NhZ2VfbGlzdCBieSB0aGlzIGZ1bmN0aW9uLgotLy8KLS8vIENvcnJlc3BvbmRzIHRv
IHJlZmxlY3Rpb24gYXBpIG1ldGhvZCBSZW1vdmVMYXN0LgotaW50IEludGVybmFsRGVsZXRlUmVw
ZWF0ZWRGaWVsZChDTWVzc2FnZSogc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlwdG9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogc2xpY2UsIFB5T2JqZWN0KiBjbWVzc2FnZV9s
aXN0KTsKLQotLy8gU2V0cyB0aGUgc3BlY2lmaWVkIHNjYWxhciB2YWx1ZSB0byB0aGUgbWVzc2Fn
ZS4KLWludCBJbnRlcm5hbFNldFNjYWxhcihDTWVzc2FnZSogc2VsZiwKLSAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IsCi0gICAgICAg
ICAgICAgICAgICAgICAgUHlPYmplY3QqIHZhbHVlKTsKLQotLy8gU2V0cyB0aGUgc3BlY2lmaWVk
IHNjYWxhciB2YWx1ZSB0byB0aGUgbWVzc2FnZS4gIFJlcXVpcmVzIGl0IGlzIG5vdCBhIE9uZW9m
LgotaW50IEludGVybmFsU2V0Tm9uT25lb2ZTY2FsYXIoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGRfZGVz
Y3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBhcmcpOwot
Ci0vLyBSZXRyaWV2ZXMgdGhlIHNwZWNpZmllZCBzY2FsYXIgdmFsdWUgZnJvbSB0aGUgbWVzc2Fn
ZS4KLS8vCi0vLyBSZXR1cm5zIGEgbmV3IHB5dGhvbiByZWZlcmVuY2UuCi1QeU9iamVjdCogSW50
ZXJuYWxHZXRTY2FsYXIoY29uc3QgTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IpOwotCi0v
LyBDbGVhcnMgdGhlIG1lc3NhZ2UsIHJlbW92aW5nIGFsbCBjb250YWluZWQgZGF0YS4gRXh0ZW5z
aW9uIGRpY3Rpb25hcnkgYW5kCi0vLyBzdWJtZXNzYWdlcyBhcmUgcmVsZWFzZWQgZmlyc3QgaWYg
dGhlcmUgYXJlIHJlbWFpbmluZyBleHRlcm5hbCByZWZlcmVuY2VzLgotLy8KLS8vIENvcnJlc3Bv
bmRzIHRvIG1lc3NhZ2UgYXBpIG1ldGhvZCBDbGVhci4KLVB5T2JqZWN0KiBDbGVhcihDTWVzc2Fn
ZSogc2VsZik7Ci0KLS8vIENsZWFycyB0aGUgZGF0YSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIGRl
c2NyaXB0b3IuIFVzZWQgdG8gY2xlYXIgZXh0ZW5zaW9ucwotLy8gKHdoaWNoIGRvbid0IGhhdmUg
bmFtZXMpLiBFeHRlbnNpb24gcmVsZWFzZSBpcyBoYW5kbGVkIGJ5IEV4dGVuc2lvbkRpY3QKLS8v
IGNsYXNzLCBub3QgdGhpcyBmdW5jdGlvbi4KLS8vIFRPRE8oYW51cmFhZyk6IFRyeSB0byBtYWtl
IHRoaXMgZGlzY3JlcGFuY3kgaW4gcmVsZWFzZSBzZW1hbnRpY3Mgd2l0aAotLy8gICAgICAgICAg
ICAgICAgQ2xlYXJGaWVsZCBsZXNzIGNvbmZ1c2luZy4KLS8vCi0vLyBDb3JyZXNwb25kcyB0byBy
ZWZsZWN0aW9uIGFwaSBtZXRob2QgQ2xlYXJGaWVsZC4KLVB5T2JqZWN0KiBDbGVhckZpZWxkQnlE
ZXNjcmlwdG9yKAotICAgIENNZXNzYWdlKiBzZWxmLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IpOwotCi0vLyBDbGVhcnMgdGhlIGRhdGEgZm9yIHRoZSBnaXZlbiBmaWVsZCBuYW1l
LiBUaGUgbWVzc2FnZSBpcyByZWxlYXNlZCBpZiB0aGVyZQotLy8gYXJlIGFueSBleHRlcm5hbCBy
ZWZlcmVuY2VzLgotLy8KLS8vIENvcnJlc3BvbmRzIHRvIHJlZmxlY3Rpb24gYXBpIG1ldGhvZCBD
bGVhckZpZWxkLgotUHlPYmplY3QqIENsZWFyRmllbGQoQ01lc3NhZ2UqIHNlbGYsIFB5T2JqZWN0
KiBhcmcpOwotCi0vLyBDaGVja3MgaWYgdGhlIG1lc3NhZ2UgaGFzIHRoZSBmaWVsZCBkZXNjcmli
ZWQgYnkgdGhlIGRlc2NyaXB0b3IuIFVzZWQgZm9yCi0vLyBleHRlbnNpb25zICh3aGljaCBoYXZl
IG5vIG5hbWUpLgotLy8KLS8vIENvcnJlc3BvbmRzIHRvIHJlZmxlY3Rpb24gYXBpIG1ldGhvZCBI
YXNGaWVsZAotUHlPYmplY3QqIEhhc0ZpZWxkQnlEZXNjcmlwdG9yKAotICAgIENNZXNzYWdlKiBz
ZWxmLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IpOwotCi0vLyBDaGVj
a3MgaWYgdGhlIG1lc3NhZ2UgaGFzIHRoZSBuYW1lZCBmaWVsZC4KLS8vCi0vLyBDb3JyZXNwb25k
cyB0byByZWZsZWN0aW9uIGFwaSBtZXRob2QgSGFzRmllbGQuCi1QeU9iamVjdCogSGFzRmllbGQo
Q01lc3NhZ2UqIHNlbGYsIFB5T2JqZWN0KiBhcmcpOwotCi0vLyBJbml0aWFsaXplcyB2YWx1ZXMg
b2YgZmllbGRzIG9uIGEgbmV3bHkgY29uc3RydWN0ZWQgbWVzc2FnZS4KLWludCBJbml0QXR0cmli
dXRlcyhDTWVzc2FnZSogc2VsZiwgUHlPYmplY3QqIGt3YXJncyk7Ci0KLVB5T2JqZWN0KiBNZXJn
ZUZyb20oQ01lc3NhZ2UqIHNlbGYsIFB5T2JqZWN0KiBhcmcpOwotCi0vLyBSZXRyaWV2ZXMgYW4g
YXR0cmlidXRlIG5hbWVkICduYW1lJyBmcm9tIENNZXNzYWdlICdzZWxmJy4gUmV0dXJucwotLy8g
dGhlIGF0dHJpYnV0ZSB2YWx1ZSBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuCi0vLwot
Ly8gUmV0dXJucyBhIG5ldyByZWZlcmVuY2UuCi1QeU9iamVjdCogR2V0QXR0cihDTWVzc2FnZSog
c2VsZiwgUHlPYmplY3QqIG5hbWUpOwotCi0vLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1
dGUgbmFtZWQgJ25hbWUnLCBmb3IgQ01lc3NhZ2UgJ3NlbGYnLAotLy8gdG8gdGhlIHZhbHVlICd2
YWx1ZScuIFJldHVybnMgLTEgb24gZmFpbHVyZS4KLWludCBTZXRBdHRyKENNZXNzYWdlKiBzZWxm
LCBQeU9iamVjdCogbmFtZSwgUHlPYmplY3QqIHZhbHVlKTsKLQotUHlPYmplY3QqIEZpbmRJbml0
aWFsaXphdGlvbkVycm9ycyhDTWVzc2FnZSogc2VsZik7Ci0KLS8vIFNldCB0aGUgb3duZXIgZmll
bGQgb2Ygc2VsZiBhbmQgYW55IGNoaWxkcmVuIG9mIHNlbGYsIHJlY3Vyc2l2ZWx5LgotLy8gVXNl
ZCB3aGVuIHNlbGYgaXMgYmVpbmcgcmVsZWFzZWQgYW5kIHRodXMgaGFzIGEgbmV3IG93bmVyICh0
aGUKLS8vIHJlbGVhc2VkIE1lc3NhZ2UuKQotaW50IFNldE93bmVyKENNZXNzYWdlKiBzZWxmLCBj
b25zdCBzaGFyZWRfcHRyPE1lc3NhZ2U+JiBuZXdfb3duZXIpOwotCi1pbnQgQXNzdXJlV3JpdGFi
bGUoQ01lc3NhZ2UqIHNlbGYpOwotCi0vLyBSZXR1cm5zIHRoZSAiYmVzdCIgRGVzY3JpcHRvclBv
b2wgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLgotLy8gVGhpcyBpcyBvZnRlbiBlcXVpdmFsZW50IHRv
IG1lc3NhZ2UuREVTQ1JJUFRPUi5wb29sLCBidXQgbm90IGFsd2F5cywgd2hlbgotLy8gdGhlIG1l
c3NhZ2UgY2xhc3Mgd2FzIGNyZWF0ZWQgZnJvbSBhIE1lc3NhZ2VGYWN0b3J5IHVzaW5nIGEgY3Vz
dG9tIHBvb2wgd2hpY2gKLS8vIHVzZXMgdGhlIGdlbmVyYXRlZCBwb29sIGFzIGFuIHVuZGVybGF5
LgotLy8KLS8vIFRoZSByZXR1cm5lZCBwb29sIGlzIHN1aXRhYmxlIGZvciBmaW5kaW5nIGZpZWxk
cyBhbmQgYnVpbGRpbmcgc3VibWVzc2FnZXMsCi0vLyBldmVuIGluIHRoZSBjYXNlIG9mIGV4dGVu
c2lvbnMuCi1QeURlc2NyaXB0b3JQb29sKiBHZXREZXNjcmlwdG9yUG9vbEZvck1lc3NhZ2UoQ01l
c3NhZ2UqIG1lc3NhZ2UpOwotCi19ICAvLyBuYW1lc3BhY2UgY21lc3NhZ2UKLQotCi0vKiBJcyA2
NGJpdCAqLwotI2RlZmluZSBJU182NEJJVCAoU0laRU9GX0xPTkcgPT0gOCkKLQotI2RlZmluZSBG
SUVMRF9JU19SRVBFQVRFRChmaWVsZF9kZXNjcmlwdG9yKSAgICAgICAgICAgICAgICAgXAotICAg
ICgoZmllbGRfZGVzY3JpcHRvciktPmxhYmVsKCkgPT0gRmllbGREZXNjcmlwdG9yOjpMQUJFTF9S
RVBFQVRFRCkKLQotI2RlZmluZSBHT09HTEVfQ0hFQ0tfR0VUX0lOVDMyKGFyZywgdmFsdWUsIGVy
cikgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaW50MzIgdmFsdWU7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCFDaGVja0FuZEdldElu
dGVnZXIoYXJnLCAmdmFsdWUsIGtpbnQzMm1pbl9weSwga2ludDMybWF4X3B5KSkgeyBcCi0gICAg
ICByZXR1cm4gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB9Ci0KLSNkZWZpbmUgR09PR0xFX0NIRUNLX0dFVF9JTlQ2NChhcmcsIHZhbHVlLCBlcnIp
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGludDY0IHZhbHVlOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghQ2hlY2tBbmRHZXRJbnRl
Z2VyKGFyZywgJnZhbHVlLCBraW50NjRtaW5fcHksIGtpbnQ2NG1heF9weSkpIHsgXAotICAgICAg
cmV0dXJuIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgfQotCi0jZGVmaW5lIEdPT0dMRV9DSEVDS19HRVRfVUlOVDMyKGFyZywgdmFsdWUsIGVycikg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1aW50MzIgdmFsdWU7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIUNoZWNrQW5kR2V0SW50ZWdl
cihhcmcsICZ2YWx1ZSwga1B5dGhvblplcm8sIGt1aW50MzJtYXhfcHkpKSB7IFwKLSAgICAgIHJl
dHVybiBlcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IH0KLQotI2RlZmluZSBHT09HTEVfQ0hFQ0tfR0VUX1VJTlQ2NChhcmcsIHZhbHVlLCBlcnIpICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgdWludDY0IHZhbHVlOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCFDaGVja0FuZEdldEludGVnZXIo
YXJnLCAmdmFsdWUsIGtQeXRob25aZXJvLCBrdWludDY0bWF4X3B5KSkgeyBcCi0gICAgICByZXR1
cm4gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9
Ci0KLSNkZWZpbmUgR09PR0xFX0NIRUNLX0dFVF9GTE9BVChhcmcsIHZhbHVlLCBlcnIpICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGZsb2F0IHZhbHVlOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghQ2hlY2tBbmRHZXRGbG9hdChhcmcs
ICZ2YWx1ZSkpIHsgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGVycjsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0KLSNkZWZpbmUgR09P
R0xFX0NIRUNLX0dFVF9ET1VCTEUoYXJnLCB2YWx1ZSwgZXJyKSAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGRvdWJsZSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGlmICghQ2hlY2tBbmRHZXREb3VibGUoYXJnLCAmdmFsdWUpKSB7ICAg
ICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGVycjsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIEdPT0dMRV9DSEVDS19HRVRf
Qk9PTChhcmcsIHZhbHVlLCBlcnIpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBib29s
IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBpZiAoIUNoZWNrQW5kR2V0Qm9vbChhcmcsICZ2YWx1ZSkpIHsgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIHJldHVybiBlcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0KLQotCi1leHRlcm4gUHlPYmplY3QqIGtQeXRob25aZXJvOwotZXh0ZXJu
IFB5T2JqZWN0KiBraW50MzJtaW5fcHk7Ci1leHRlcm4gUHlPYmplY3QqIGtpbnQzMm1heF9weTsK
LWV4dGVybiBQeU9iamVjdCoga3VpbnQzMm1heF9weTsKLWV4dGVybiBQeU9iamVjdCoga2ludDY0
bWluX3B5OwotZXh0ZXJuIFB5T2JqZWN0KiBraW50NjRtYXhfcHk7Ci1leHRlcm4gUHlPYmplY3Qq
IGt1aW50NjRtYXhfcHk7Ci0KLSNkZWZpbmUgRlVMTF9NT0RVTEVfTkFNRSAiZ29vZ2xlLnByb3Rv
YnVmLnB5ZXh0Ll9tZXNzYWdlIgotCi12b2lkIEZvcm1hdFR5cGVFcnJvcihQeU9iamVjdCogYXJn
LCBjaGFyKiBleHBlY3RlZF90eXBlcyk7Ci10ZW1wbGF0ZTxjbGFzcyBUPgotYm9vbCBDaGVja0Fu
ZEdldEludGVnZXIoCi0gICAgUHlPYmplY3QqIGFyZywgVCogdmFsdWUsIFB5T2JqZWN0KiBtaW4s
IFB5T2JqZWN0KiBtYXgpOwotYm9vbCBDaGVja0FuZEdldERvdWJsZShQeU9iamVjdCogYXJnLCBk
b3VibGUqIHZhbHVlKTsKLWJvb2wgQ2hlY2tBbmRHZXRGbG9hdChQeU9iamVjdCogYXJnLCBmbG9h
dCogdmFsdWUpOwotYm9vbCBDaGVja0FuZEdldEJvb2woUHlPYmplY3QqIGFyZywgYm9vbCogdmFs
dWUpOwotUHlPYmplY3QqIENoZWNrU3RyaW5nKFB5T2JqZWN0KiBhcmcsIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZGVzY3JpcHRvcik7Ci1ib29sIENoZWNrQW5kU2V0U3RyaW5nKAotICAgIFB5T2Jq
ZWN0KiBhcmcsIE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yLAotICAgIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24sCi0gICAgYm9vbCBh
cHBlbmQsCi0gICAgaW50IGluZGV4KTsKLVB5T2JqZWN0KiBUb1N0cmluZ09iamVjdChjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIHN0cmluZyB2YWx1ZSk7Ci0KLS8vIENoZWNrIGlm
IHRoZSBwYXNzZWQgZmllbGQgZGVzY3JpcHRvciBiZWxvbmdzIHRvIHRoZSBnaXZlbiBtZXNzYWdl
LgotLy8gSWYgbm90LCByZXR1cm4gZmFsc2UgYW5kIHNldCBhIFB5dGhvbiBleGNlcHRpb24gKGEg
S2V5RXJyb3IpCi1ib29sIENoZWNrRmllbGRCZWxvbmdzVG9NZXNzYWdlKGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGRfZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTWVzc2FnZSogbWVzc2FnZSk7Ci0KLWV4dGVybiBQeU9iamVjdCogUGlja2xlRXJy
b3JfY2xhc3M7Ci0KLX0gIC8vIG5hbWVzcGFjZSBweXRob24KLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JV
Rl9QWVRIT05fQ1BQX01FU1NBR0VfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9i
dWYvcHlleHQvcHJvdG8yX2FwaV90ZXN0LnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5
ZXh0L3Byb3RvMl9hcGlfdGVzdC5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MThhZWNmYjdkNjIwMjI1NjM5MTVhYTQ0N2M2ZDQxZDMxZmNiNmFhOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHll
eHQvcHJvdG8yX2FwaV90ZXN0LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9ICJwcm90bzIiOwot
Ci1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9jcHAvcHJvdG8xX2FwaV90ZXN0LnBy
b3RvIjsKLQotcGFja2FnZSBnb29nbGUucHJvdG9idWYucHl0aG9uLmludGVybmFsOwotCi1tZXNz
YWdlIFRlc3ROZXN0ZWRQcm90bzFBUElNZXNzYWdlIHsKLSAgb3B0aW9uYWwgaW50MzIgYSA9IDE7
Ci0gIG9wdGlvbmFsIFRlc3RNZXNzYWdlLk5lc3RlZE1lc3NhZ2UgYiA9IDI7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvcHl0aG9uLnByb3RvIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29v
Z2xlL3Byb3RvYnVmL3B5ZXh0L3B5dGhvbi5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2NlNjQ1ZDcxYWQ5ZDVlNGFjZmZiN2FkOGViYzhkMmZlYmM1ZjVmMi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9i
dWYvcHlleHQvcHl0aG9uLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogdGliZWxsQGdvb2ds
ZS5jb20gKEpvaGFuIFRpYmVsbCkKLS8vCi0vLyBUaGVzZSBtZXNzYWdlIGRlZmluaXRpb25zIGFy
ZSB1c2VkIHRvIGV4ZXJjaXNlcyBrbm93biBjb3JuZXIgY2FzZXMKLS8vIGluIHRoZSBDKysgaW1w
bGVtZW50YXRpb24gb2YgdGhlIFB5dGhvbiBBUEkuCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi1w
YWNrYWdlIGdvb2dsZS5wcm90b2J1Zi5weXRob24uaW50ZXJuYWw7Ci0KLS8vIFByb3RvcyBvcHRp
bWl6ZWQgZm9yIFNQRUVEIHVzZSBhIHN0cmljdCBzdXBlcnNldCBvZiB0aGUgZ2VuZXJhdGVkIGNv
ZGUKLS8vIG9mIGVxdWl2YWxlbnQgb25lcyBvcHRpbWl6ZWQgZm9yIENPREVfU0laRSwgc28gd2Ug
c2hvdWxkIG9wdGltaXplIGFsbCBvdXIKLS8vIHRlc3RzIGZvciBzcGVlZCB1bmxlc3MgZXhwbGlj
aXRseSB0ZXN0aW5nIGNvZGUgc2l6ZSBvcHRpbWl6YXRpb24uCi1vcHRpb24gb3B0aW1pemVfZm9y
ID0gU1BFRUQ7Ci0KLW1lc3NhZ2UgVGVzdEFsbFR5cGVzIHsKLSAgbWVzc2FnZSBOZXN0ZWRNZXNz
YWdlIHsKLSAgICBvcHRpb25hbCBpbnQzMiBiYiA9IDE7Ci0gICAgb3B0aW9uYWwgRm9yZWlnbk1l
c3NhZ2UgY2MgPSAyOwotICB9Ci0KLSAgcmVwZWF0ZWQgTmVzdGVkTWVzc2FnZSByZXBlYXRlZF9u
ZXN0ZWRfbWVzc2FnZSA9IDE7Ci0gIG9wdGlvbmFsIE5lc3RlZE1lc3NhZ2Ugb3B0aW9uYWxfbmVz
dGVkX21lc3NhZ2UgPSAyOwotICBvcHRpb25hbCBpbnQzMiBvcHRpb25hbF9pbnQzMiA9IDM7Ci19
Ci0KLW1lc3NhZ2UgRm9yZWlnbk1lc3NhZ2UgewotICBvcHRpb25hbCBpbnQzMiBjID0gMTsKLSAg
cmVwZWF0ZWQgaW50MzIgZCA9IDI7Ci19Ci0KLW1lc3NhZ2UgVGVzdEFsbEV4dGVuc2lvbnMgewot
ICBleHRlbnNpb25zIDEgdG8gbWF4OwotfQotCi1leHRlbmQgVGVzdEFsbEV4dGVuc2lvbnMgewot
ICBvcHRpb25hbCBUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZSBvcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZV9leHRlbnNpb24gPSAxOwotICByZXBlYXRlZCBUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2Fn
ZSByZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24gPSAyOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9w
eXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L3B5dGhvbl9wcm90b2J1Zi5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29v
Z2xlL3Byb3RvYnVmL3B5ZXh0L3B5dGhvbl9wcm90b2J1Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiZWI2ZTQ2MDRhNmY0ZDNkZGQyZWYwOWJjM2E3NzE3MWM1NDk3ZmI2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9w
cm90b2J1Zi9weWV4dC9weXRob25fcHJvdG9idWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IHFy
Y3pha0Bnb29nbGUuY29tIChNYXJjaW4gS293YWxjenlrKQotLy8KLS8vIFRoaXMgbW9kdWxlIGV4
cG9zZXMgdGhlIEMgcHJvdG8gaW5zaWRlIHRoZSBnaXZlbiBQeXRob24gcHJvdG8sIGluCi0vLyBj
YXNlIHRoZSBQeXRob24gcHJvdG8gaXMgaW1wbGVtZW50ZWQgd2l0aCBhIEMgcHJvdG8uCi0KLSNp
Zm5kZWYgR09PR0xFX1BST1RPQlVGX1BZVEhPTl9QWVRIT05fUFJPVE9CVUZfSF9fCi0jZGVmaW5l
IEdPT0dMRV9QUk9UT0JVRl9QWVRIT05fUFlUSE9OX1BST1RPQlVGX0hfXwotCi0jaW5jbHVkZSA8
UHl0aG9uLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQot
Y2xhc3MgTWVzc2FnZTsKLQotbmFtZXNwYWNlIHB5dGhvbiB7Ci0KLS8vIFJldHVybiB0aGUgcG9p
bnRlciB0byB0aGUgQyBwcm90byBpbnNpZGUgdGhlIGdpdmVuIFB5dGhvbiBwcm90bywKLS8vIG9y
IE5VTEwgd2hlbiB0aGlzIGlzIG5vdCBhIFB5dGhvbiBwcm90byBpbXBsZW1lbnRlZCB3aXRoIGEg
QyBwcm90by4KLWNvbnN0IE1lc3NhZ2UqIEdldENQcm90b0luc2lkZVB5UHJvdG8oUHlPYmplY3Qq
IG1zZyk7Ci1NZXNzYWdlKiBNdXRhYmxlQ1Byb3RvSW5zaWRlUHlQcm90byhQeU9iamVjdCogbXNn
KTsKLQotfSAgLy8gbmFtZXNwYWNlIHB5dGhvbgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0K
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1BZVEhP
Tl9QWVRIT05fUFJPVE9CVUZfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYv
cHlleHQvcmVwZWF0ZWRfY29tcG9zaXRlX2NvbnRhaW5lci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90
b2J1Zi9weWV4dC9yZXBlYXRlZF9jb21wb3NpdGVfY29udGFpbmVyLmNjCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0ZjMzOWU3NzIzNTQxM2UyNzhlMzA3NGJiZTBkZWIzNDdiMTI5MWJh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dv
b2dsZS9wcm90b2J1Zi9weWV4dC9yZXBlYXRlZF9jb21wb3NpdGVfY29udGFpbmVyLmNjCisrKyAv
ZGV2L251bGwKQEAgLTEsNjEyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0vLyBBdXRob3I6IGFudXJhYWdAZ29vZ2xlLmNvbSAoQW51cmFhZyBBZ3Jhd2FsKQot
Ly8gQXV0aG9yOiB0aWJlbGxAZ29vZ2xlLmNvbSAoSm9oYW4gVGliZWxsKQotCi0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L3JlcGVhdGVkX2NvbXBvc2l0ZV9jb250YWluZXIuaD4KLQot
I2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0
L2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQvZGVzY3JpcHRv
cl9wb29sLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L21lc3NhZ2UuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcHlleHQvc2NvcGVkX3B5b2JqZWN0X3B0ci5oPgotCi0j
aWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0gICNkZWZpbmUgUHlJbnRfQ2hlY2sgUHlMb25nX0No
ZWNrCi0gICNkZWZpbmUgUHlJbnRfQXNMb25nIFB5TG9uZ19Bc0xvbmcKLSAgI2RlZmluZSBQeUlu
dF9Gcm9tTG9uZyBQeUxvbmdfRnJvbUxvbmcKLSNlbmRpZgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgcHl0aG9uIHsKLQotbmFtZXNwYWNlIHJl
cGVhdGVkX2NvbXBvc2l0ZV9jb250YWluZXIgewotCi0vLyBUT0RPKHRpYmVsbCk6IFdlIG1pZ2h0
IGFsc28gd2FudCB0byBjaGVjazoKLS8vICAgR09PR0xFX0NIRUNLX05PVE5VTEwoKHNlbGYpLT5v
d25lci5nZXQoKSk7Ci0jZGVmaW5lIEdPT0dMRV9DSEVDS19BVFRBQ0hFRChzZWxmKSAgICAgICAg
ICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBH
T09HTEVfQ0hFQ0tfTk9UTlVMTCgoc2VsZiktPm1lc3NhZ2UpOyAgICAgIFwKLSAgICBHT09HTEVf
Q0hFQ0tfTk9UTlVMTCgoc2VsZiktPnBhcmVudF9maWVsZF9kZXNjcmlwdG9yKTsgXAotICB9IHdo
aWxlICgwKTsKLQotI2RlZmluZSBHT09HTEVfQ0hFQ0tfUkVMRUFTRUQoc2VsZikgICAgICAgICAg
ICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR09P
R0xFX0NIRUNLKChzZWxmKS0+b3duZXIuZ2V0KCkgPT0gTlVMTCk7ICBcCi0gICAgR09PR0xFX0NI
RUNLKChzZWxmKS0+bWVzc2FnZSA9PSBOVUxMKTsgICAgICBcCi0gICAgR09PR0xFX0NIRUNLKChz
ZWxmKS0+cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3IgPT0gTlVMTCk7IFwKLSAgICBHT09HTEVfQ0hF
Q0soKHNlbGYpLT5wYXJlbnQgPT0gTlVMTCk7ICAgICAgIFwKLSAgfSB3aGlsZSAoMCk7Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gbGVuKCkKLQotc3RhdGljIFB5X3NzaXplX3QgTGVuZ3RoKFJlcGVh
dGVkQ29tcG9zaXRlQ29udGFpbmVyKiBzZWxmKSB7Ci0gIE1lc3NhZ2UqIG1lc3NhZ2UgPSBzZWxm
LT5tZXNzYWdlOwotICBpZiAobWVzc2FnZSAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuIG1lc3NhZ2Ut
PkdldFJlZmxlY3Rpb24oKS0+RmllbGRTaXplKCptZXNzYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5wYXJlbnRfZmllbGRfZGVzY3JpcHRv
cik7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gVGhlIGNvbnRhaW5lciBoYXMgYmVlbiByZWxlYXNlZCAo
aS5lLiBieSBhIGNhbGwgdG8gQ2xlYXIoKSBvcgotICAgIC8vIENsZWFyRmllbGQoKSBvbiB0aGUg
cGFyZW50KSBhbmQgdGh1cyB0aGVyZSdzIG5vIG1lc3NhZ2UuCi0gICAgcmV0dXJuIFB5TGlzdF9H
RVRfU0laRShzZWxmLT5jaGlsZF9tZXNzYWdlcyk7Ci0gIH0KLX0KLQotLy8gUmV0dXJucyAwIGlm
IHN1Y2Nlc3NmdWw7IHJldHVybnMgLTEgYW5kIHNldHMgYW4gZXhjZXB0aW9uIGlmCi0vLyB1bnN1
Y2Nlc3NmdWwuCi1zdGF0aWMgaW50IFVwZGF0ZUNoaWxkTWVzc2FnZXMoUmVwZWF0ZWRDb21wb3Np
dGVDb250YWluZXIqIHNlbGYpIHsKLSAgaWYgKHNlbGYtPm1lc3NhZ2UgPT0gTlVMTCkKLSAgICBy
ZXR1cm4gMDsKLQotICAvLyBBIE1lcmdlRnJvbSBvbiBhIHBhcmVudCBtZXNzYWdlIGNvdWxkIGhh
dmUgY2F1c2VkIGV4dHJhIG1lc3NhZ2VzIHRvIGJlCi0gIC8vIGFkZGVkIGluIHRoZSB1bmRlcmx5
aW5nIHByb3RvYnVmIHNvIGFkZCB0aGVtIHRvIG91ciBsaXN0LiBUaGV5IGNhbiBuZXZlcgotICAv
LyBiZSByZW1vdmVkIGluIHN1Y2ggYSB3YXkgc28gdGhlcmUncyBubyBuZWVkIHRvIHdvcnJ5IGFi
b3V0IHRoYXQuCi0gIFB5X3NzaXplX3QgbWVzc2FnZV9sZW5ndGggPSBMZW5ndGgoc2VsZik7Ci0g
IFB5X3NzaXplX3QgY2hpbGRfbGVuZ3RoID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPmNoaWxkX21l
c3NhZ2VzKTsKLSAgTWVzc2FnZSogbWVzc2FnZSA9IHNlbGYtPm1lc3NhZ2U7Ci0gIGNvbnN0IFJl
ZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0gIGZvciAo
UHlfc3NpemVfdCBpID0gY2hpbGRfbGVuZ3RoOyBpIDwgbWVzc2FnZV9sZW5ndGg7ICsraSkgewot
ICAgIGNvbnN0IE1lc3NhZ2UmIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRN
ZXNzYWdlKAotICAgICAgICAqKHNlbGYtPm1lc3NhZ2UpLCBzZWxmLT5wYXJlbnRfZmllbGRfZGVz
Y3JpcHRvciwgaSk7Ci0gICAgQ01lc3NhZ2UqIGNtc2cgPSBjbWVzc2FnZTo6TmV3RW1wdHlNZXNz
YWdlKHNlbGYtPmNoaWxkX21lc3NhZ2VfY2xhc3MpOwotICAgIFNjb3BlZFB5T2JqZWN0UHRyIHB5
X2Ntc2cocmVpbnRlcnByZXRfY2FzdDxQeU9iamVjdCo+KGNtc2cpKTsKLSAgICBpZiAoY21zZyA9
PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGNtc2ctPm93bmVyID0gc2Vs
Zi0+b3duZXI7Ci0gICAgY21zZy0+bWVzc2FnZSA9IGNvbnN0X2Nhc3Q8TWVzc2FnZSo+KCZzdWJf
bWVzc2FnZSk7Ci0gICAgY21zZy0+cGFyZW50ID0gc2VsZi0+cGFyZW50OwotICAgIGlmIChQeUxp
c3RfQXBwZW5kKHNlbGYtPmNoaWxkX21lc3NhZ2VzLCBweV9jbXNnLmdldCgpKSA8IDApIHsKLSAg
ICAgIHJldHVybiAtMTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gYWRkKCkKLQotc3RhdGljIFB5T2JqZWN0KiBBZGRUb0F0dGFjaGVkKFJlcGVhdGVk
Q29tcG9zaXRlQ29udGFpbmVyKiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFB5T2JqZWN0KiBhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0
KiBrd2FyZ3MpIHsKLSAgR09PR0xFX0NIRUNLX0FUVEFDSEVEKHNlbGYpOwotCi0gIGlmIChVcGRh
dGVDaGlsZE1lc3NhZ2VzKHNlbGYpIDwgMCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGlm
IChjbWVzc2FnZTo6QXNzdXJlV3JpdGFibGUoc2VsZi0+cGFyZW50KSA9PSAtMSkKLSAgICByZXR1
cm4gTlVMTDsKLSAgTWVzc2FnZSogbWVzc2FnZSA9IHNlbGYtPm1lc3NhZ2U7Ci0gIE1lc3NhZ2Uq
IHN1Yl9tZXNzYWdlID0KLSAgICAgIG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+QWRkTWVzc2Fn
ZShtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYtPnBhcmVudF9maWVsZF9kZXNjcmlwdG9yKTsKLSAgQ01lc3NhZ2UqIGNtc2cgPSBjbWVzc2Fn
ZTo6TmV3RW1wdHlNZXNzYWdlKHNlbGYtPmNoaWxkX21lc3NhZ2VfY2xhc3MpOwotICBpZiAoY21z
ZyA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIGNtc2ctPm93bmVyID0gc2VsZi0+b3du
ZXI7Ci0gIGNtc2ctPm1lc3NhZ2UgPSBzdWJfbWVzc2FnZTsKLSAgY21zZy0+cGFyZW50ID0gc2Vs
Zi0+cGFyZW50OwotICBpZiAoY21lc3NhZ2U6OkluaXRBdHRyaWJ1dGVzKGNtc2csIGt3YXJncykg
PCAwKSB7Ci0gICAgUHlfREVDUkVGKGNtc2cpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAg
UHlPYmplY3QqIHB5X2Ntc2cgPSByZWludGVycHJldF9jYXN0PFB5T2JqZWN0Kj4oY21zZyk7Ci0g
IGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPmNoaWxkX21lc3NhZ2VzLCBweV9jbXNnKSA8IDApIHsK
LSAgICBQeV9ERUNSRUYocHlfY21zZyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJu
IHB5X2Ntc2c7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogQWRkVG9SZWxlYXNlZChSZXBlYXRlZENv
bXBvc2l0ZUNvbnRhaW5lciogc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
eU9iamVjdCogYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCog
a3dhcmdzKSB7Ci0gIEdPT0dMRV9DSEVDS19SRUxFQVNFRChzZWxmKTsKLQotICAvLyBDcmVhdGUg
YSBuZXcgTWVzc2FnZSBkZXRhY2hlZCBmcm9tIHRoZSByZXN0LgotICBQeU9iamVjdCogcHlfY21z
ZyA9IFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzKAotICAgICAgc2VsZi0+Y2hpbGRfbWVz
c2FnZV9jbGFzcy0+QXNQeU9iamVjdCgpLCBOVUxMLCBrd2FyZ3MpOwotICBpZiAocHlfY21zZyA9
PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPmNo
aWxkX21lc3NhZ2VzLCBweV9jbXNnKSA8IDApIHsKLSAgICBQeV9ERUNSRUYocHlfY21zZyk7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHB5X2Ntc2c7Ci19Ci0KLVB5T2JqZWN0KiBB
ZGQoUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIqIHNlbGYsCi0gICAgICAgICAgICAgIFB5T2Jq
ZWN0KiBhcmdzLAotICAgICAgICAgICAgICBQeU9iamVjdCoga3dhcmdzKSB7Ci0gIGlmIChzZWxm
LT5tZXNzYWdlID09IE5VTEwpCi0gICAgcmV0dXJuIEFkZFRvUmVsZWFzZWQoc2VsZiwgYXJncywg
a3dhcmdzKTsKLSAgZWxzZQotICAgIHJldHVybiBBZGRUb0F0dGFjaGVkKHNlbGYsIGFyZ3MsIGt3
YXJncyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZXh0ZW5kKCkKLQotUHlPYmplY3QqIEV4
dGVuZChSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lciogc2VsZiwgUHlPYmplY3QqIHZhbHVlKSB7
Ci0gIGNtZXNzYWdlOjpBc3N1cmVXcml0YWJsZShzZWxmLT5wYXJlbnQpOwotICBpZiAoVXBkYXRl
Q2hpbGRNZXNzYWdlcyhzZWxmKSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBTY29w
ZWRQeU9iamVjdFB0ciBpdGVyKFB5T2JqZWN0X0dldEl0ZXIodmFsdWUpKTsKLSAgaWYgKGl0ZXIg
PT0gTlVMTCkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJWYWx1ZSBt
dXN0IGJlIGl0ZXJhYmxlIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgU2NvcGVkUHlPYmpl
Y3RQdHIgbmV4dDsKLSAgd2hpbGUgKChuZXh0LnJlc2V0KFB5SXRlcl9OZXh0KGl0ZXIuZ2V0KCkp
KSkgIT0gTlVMTCkgewotICAgIGlmICghUHlPYmplY3RfVHlwZUNoZWNrKG5leHQuZ2V0KCksICZD
TWVzc2FnZV9UeXBlKSkgewotICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwg
Ik5vdCBhIGNtZXNzYWdlIik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgU2NvcGVk
UHlPYmplY3RQdHIgbmV3X21lc3NhZ2UoQWRkKHNlbGYsIE5VTEwsIE5VTEwpKTsKLSAgICBpZiAo
bmV3X21lc3NhZ2UgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIENN
ZXNzYWdlKiBuZXdfY21lc3NhZ2UgPSByZWludGVycHJldF9jYXN0PENNZXNzYWdlKj4obmV3X21l
c3NhZ2UuZ2V0KCkpOwotICAgIGlmIChTY29wZWRQeU9iamVjdFB0cihjbWVzc2FnZTo6TWVyZ2VG
cm9tKG5ld19jbWVzc2FnZSwgbmV4dC5nZXQoKSkpID09Ci0gICAgICAgIE5VTEwpIHsKLSAgICAg
IHJldHVybiBOVUxMOwotICAgIH0KLSAgfQotICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAg
IHJldHVybiBOVUxMOwotICB9Ci0gIFB5X1JFVFVSTl9OT05FOwotfQotCi1QeU9iamVjdCogTWVy
Z2VGcm9tKFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKiBzZWxmLCBQeU9iamVjdCogb3RoZXIp
IHsKLSAgaWYgKFVwZGF0ZUNoaWxkTWVzc2FnZXMoc2VsZikgPCAwKSB7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0KLSAgcmV0dXJuIEV4dGVuZChzZWxmLCBvdGhlcik7Ci19Ci0KLVB5T2JqZWN0KiBT
dWJzY3JpcHQoUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBzbGlj
ZSkgewotICBpZiAoVXBkYXRlQ2hpbGRNZXNzYWdlcyhzZWxmKSA8IDApIHsKLSAgICByZXR1cm4g
TlVMTDsKLSAgfQotICAvLyBKdXN0IGZvcndhcmQgdGhlIGNhbGwgdG8gdGhlIHN1YnNjcmlwdC1o
YW5kbGluZyBmdW5jdGlvbiBvZiB0aGUKLSAgLy8gbGlzdCBjb250YWluaW5nIHRoZSBjaGlsZCBt
ZXNzYWdlcy4KLSAgcmV0dXJuIFB5T2JqZWN0X0dldEl0ZW0oc2VsZi0+Y2hpbGRfbWVzc2FnZXMs
IHNsaWNlKTsKLX0KLQotaW50IEFzc2lnblN1YnNjcmlwdChSZXBlYXRlZENvbXBvc2l0ZUNvbnRh
aW5lciogc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QqIHNsaWNlLAotICAgICAg
ICAgICAgICAgICAgICBQeU9iamVjdCogdmFsdWUpIHsKLSAgaWYgKFVwZGF0ZUNoaWxkTWVzc2Fn
ZXMoc2VsZikgPCAwKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIGlmICh2YWx1ZSAhPSBOVUxM
KSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImRvZXMgbm90IHN1cHBv
cnQgYXNzaWdubWVudCIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8vIERlbGV0ZSBmcm9t
IHRoZSB1bmRlcmx5aW5nIE1lc3NhZ2UsIGlmIGFueS4KLSAgaWYgKHNlbGYtPnBhcmVudCAhPSBO
VUxMKSB7Ci0gICAgaWYgKGNtZXNzYWdlOjpJbnRlcm5hbERlbGV0ZVJlcGVhdGVkRmllbGQoc2Vs
Zi0+cGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYtPnBhcmVudF9maWVsZF9kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNsaWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYtPmNoaWxkX21lc3NhZ2VzKSA8IDApIHsKLSAgICAgIHJl
dHVybiAtMTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgUHlfc3NpemVfdCBmcm9tOwotICAgIFB5
X3NzaXplX3QgdG87Ci0gICAgUHlfc3NpemVfdCBzdGVwOwotICAgIFB5X3NzaXplX3QgbGVuZ3Ro
ID0gTGVuZ3RoKHNlbGYpOwotICAgIFB5X3NzaXplX3Qgc2xpY2VsZW5ndGg7Ci0gICAgaWYgKFB5
U2xpY2VfQ2hlY2soc2xpY2UpKSB7Ci0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0gICAgICBp
ZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoc2xpY2UsCi0jZWxzZQotICAgICAgaWYgKFB5U2xpY2Vf
R2V0SW5kaWNlc0V4KHJlaW50ZXJwcmV0X2Nhc3Q8UHlTbGljZU9iamVjdCo+KHNsaWNlKSwKLSNl
bmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgJmZyb20sICZ0bywg
JnN0ZXAsICZzbGljZWxlbmd0aCkgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAg
fQotICAgICAgcmV0dXJuIFB5U2VxdWVuY2VfRGVsU2xpY2Uoc2VsZi0+Y2hpbGRfbWVzc2FnZXMs
IGZyb20sIHRvKTsKLSAgICB9IGVsc2UgaWYgKFB5SW50X0NoZWNrKHNsaWNlKSB8fCBQeUxvbmdf
Q2hlY2soc2xpY2UpKSB7Ci0gICAgICBmcm9tID0gdG8gPSBQeUxvbmdfQXNMb25nKHNsaWNlKTsK
LSAgICAgIGlmIChmcm9tIDwgMCkgewotICAgICAgICBmcm9tID0gdG8gPSBsZW5ndGggKyBmcm9t
OwotICAgICAgfQotICAgICAgcmV0dXJuIFB5U2VxdWVuY2VfRGVsSXRlbShzZWxmLT5jaGlsZF9t
ZXNzYWdlcywgZnJvbSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBQ
eU9iamVjdCogUmVtb3ZlKFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKiBzZWxmLCBQeU9iamVj
dCogdmFsdWUpIHsKLSAgaWYgKFVwZGF0ZUNoaWxkTWVzc2FnZXMoc2VsZikgPCAwKSB7Ci0gICAg
cmV0dXJuIE5VTEw7Ci0gIH0KLSAgUHlfc3NpemVfdCBpbmRleCA9IFB5U2VxdWVuY2VfSW5kZXgo
c2VsZi0+Y2hpbGRfbWVzc2FnZXMsIHZhbHVlKTsKLSAgaWYgKGluZGV4ID09IC0xKSB7Ci0gICAg
cmV0dXJuIE5VTEw7Ci0gIH0KLSAgU2NvcGVkUHlPYmplY3RQdHIgcHlfaW5kZXgoUHlMb25nX0Zy
b21Mb25nKGluZGV4KSk7Ci0gIGlmIChBc3NpZ25TdWJzY3JpcHQoc2VsZiwgcHlfaW5kZXguZ2V0
KCksIE5VTEwpIDwgMCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIFB5X1JFVFVSTl9OT05F
OwotfQotCi1zdGF0aWMgUHlPYmplY3QqIFJpY2hDb21wYXJlKFJlcGVhdGVkQ29tcG9zaXRlQ29u
dGFpbmVyKiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogb3Ro
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcGlkKSB7Ci0gIGlmIChVcGRh
dGVDaGlsZE1lc3NhZ2VzKHNlbGYpIDwgMCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGlm
ICghUHlPYmplY3RfVHlwZUNoZWNrKG90aGVyLCAmUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXJf
VHlwZSkpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAg
ICAgICAgICAgICAiQ2FuIG9ubHkgY29tcGFyZSByZXBlYXRlZCBjb21wb3NpdGUgZmllbGRzICIK
LSAgICAgICAgICAgICAgICAgICAgImFnYWluc3Qgb3RoZXIgcmVwZWF0ZWQgY29tcG9zaXRlIGZp
ZWxkcy4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBpZiAob3BpZCA9PSBQeV9FUSB8fCBv
cGlkID09IFB5X05FKSB7Ci0gICAgLy8gVE9ETyhhbnVyYWFnKTogRG9uJ3QgbWFrZSBuZXcgbGlz
dHMganVzdCBmb3IgdGhpcy4uLgotICAgIFNjb3BlZFB5T2JqZWN0UHRyIGZ1bGxfc2xpY2UoUHlT
bGljZV9OZXcoTlVMTCwgTlVMTCwgTlVMTCkpOwotICAgIGlmIChmdWxsX3NsaWNlID09IE5VTEwp
IHsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBTY29wZWRQeU9iamVjdFB0ciBsaXN0
KFN1YnNjcmlwdChzZWxmLCBmdWxsX3NsaWNlLmdldCgpKSk7Ci0gICAgaWYgKGxpc3QgPT0gTlVM
TCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIFNjb3BlZFB5T2JqZWN0UHRyIG90
aGVyX2xpc3QoCi0gICAgICAgIFN1YnNjcmlwdChyZWludGVycHJldF9jYXN0PFJlcGVhdGVkQ29t
cG9zaXRlQ29udGFpbmVyKj4ob3RoZXIpLAotICAgICAgICAgICAgICAgICAgZnVsbF9zbGljZS5n
ZXQoKSkpOwotICAgIGlmIChvdGhlcl9saXN0ID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLSAgICByZXR1cm4gUHlPYmplY3RfUmljaENvbXBhcmUobGlzdC5nZXQoKSwgb3Ro
ZXJfbGlzdC5nZXQoKSwgb3BpZCk7Ci0gIH0gZWxzZSB7Ci0gICAgUHlfSU5DUkVGKFB5X05vdElt
cGxlbWVudGVkKTsKLSAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7Ci0gIH0KLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBzb3J0KCkKLQotc3RhdGljIHZvaWQgUmVvcmRlckF0dGFjaGVkKFJl
cGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKiBzZWxmKSB7Ci0gIE1lc3NhZ2UqIG1lc3NhZ2UgPSBz
ZWxmLT5tZXNzYWdlOwotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+
R2V0UmVmbGVjdGlvbigpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBz
ZWxmLT5wYXJlbnRfZmllbGRfZGVzY3JpcHRvcjsKLSAgY29uc3QgUHlfc3NpemVfdCBsZW5ndGgg
PSBMZW5ndGgoc2VsZik7Ci0KLSAgLy8gU2luY2UgUHl0aG9uIHByb3RvYnVmIG9iamVjdHMgYXJl
IG5ldmVyIGFyZW5hLWFsbG9jYXRlZCwgYWRkaW5nIGFuZAotICAvLyByZW1vdmluZyBtZXNzYWdl
IHBvaW50ZXJzIHRvIHRoZSB1bmRlcmx5aW5nIGFycmF5IGlzIGp1c3QgdXBkYXRpbmcKLSAgLy8g
cG9pbnRlcnMuCi0gIGZvciAoUHlfc3NpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAg
IHJlZmxlY3Rpb24tPlJlbGVhc2VMYXN0KG1lc3NhZ2UsIGRlc2NyaXB0b3IpOwotCi0gIGZvciAo
UHlfc3NpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgQ01lc3NhZ2UqIHB5X2Nt
c2cgPSByZWludGVycHJldF9jYXN0PENNZXNzYWdlKj4oCi0gICAgICAgIFB5TGlzdF9HRVRfSVRF
TShzZWxmLT5jaGlsZF9tZXNzYWdlcywgaSkpOwotICAgIHJlZmxlY3Rpb24tPkFkZEFsbG9jYXRl
ZE1lc3NhZ2UobWVzc2FnZSwgZGVzY3JpcHRvciwgcHlfY21zZy0+bWVzc2FnZSk7Ci0gIH0KLX0K
LQotLy8gUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWw7IHJldHVybnMgLTEgYW5kIHNldHMgYW4gZXhj
ZXB0aW9uIGlmCi0vLyB1bnN1Y2Nlc3NmdWwuCi1zdGF0aWMgaW50IFNvcnRQeXRob25NZXNzYWdl
cyhSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lciogc2VsZiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQeU9iamVjdCogYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQeU9iamVjdCoga3dkcykgewotICBTY29wZWRQeU9iamVjdFB0ciBtKFB5T2JqZWN0X0dldEF0
dHJTdHJpbmcoc2VsZi0+Y2hpbGRfbWVzc2FnZXMsICJzb3J0IikpOwotICBpZiAobSA9PSBOVUxM
KQotICAgIHJldHVybiAtMTsKLSAgaWYgKFB5T2JqZWN0X0NhbGwobS5nZXQoKSwgYXJncywga3dk
cykgPT0gTlVMTCkKLSAgICByZXR1cm4gLTE7Ci0gIGlmIChzZWxmLT5tZXNzYWdlICE9IE5VTEwp
IHsKLSAgICBSZW9yZGVyQXR0YWNoZWQoc2VsZik7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0
YXRpYyBQeU9iamVjdCogU29ydChSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lciogc2VsZiwKLSAg
ICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogYXJncywKLSAgICAgICAgICAgICAgICAgICAg
ICBQeU9iamVjdCoga3dkcykgewotICAvLyBTdXBwb3J0IHRoZSBvbGQgc29ydF9mdW5jdGlvbiBh
cmd1bWVudCBmb3IgYmFja3dhcmRzCi0gIC8vIGNvbXBhdGliaWxpdHkuCi0gIGlmIChrd2RzICE9
IE5VTEwpIHsKLSAgICBQeU9iamVjdCogc29ydF9mdW5jID0gUHlEaWN0X0dldEl0ZW1TdHJpbmco
a3dkcywgInNvcnRfZnVuY3Rpb24iKTsKLSAgICBpZiAoc29ydF9mdW5jICE9IE5VTEwpIHsKLSAg
ICAgIC8vIE11c3Qgc2V0IGJlZm9yZSBkZWxldGluZyBhcyBzb3J0X2Z1bmMgaXMgYSBib3Jyb3dl
ZCByZWZlcmVuY2UKLSAgICAgIC8vIGFuZCBrd2RzIG1pZ2h0IGJlIHRoZSBvbmx5IHRoaW5nIGtl
ZXBpbmcgaXQgYWxpdmUuCi0gICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAiY21wIiwg
c29ydF9mdW5jKTsKLSAgICAgIFB5RGljdF9EZWxJdGVtU3RyaW5nKGt3ZHMsICJzb3J0X2Z1bmN0
aW9uIik7Ci0gICAgfQotICB9Ci0KLSAgaWYgKFVwZGF0ZUNoaWxkTWVzc2FnZXMoc2VsZikgPCAw
KSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgaWYgKFNvcnRQeXRob25NZXNzYWdlcyhzZWxm
LCBhcmdzLCBrd2RzKSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBQeV9SRVRVUk5f
Tk9ORTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBQeU9iamVjdCogSXRlbShSZXBl
YXRlZENvbXBvc2l0ZUNvbnRhaW5lciogc2VsZiwgUHlfc3NpemVfdCBpbmRleCkgewotICBpZiAo
VXBkYXRlQ2hpbGRNZXNzYWdlcyhzZWxmKSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQot
ICBQeV9zc2l6ZV90IGxlbmd0aCA9IExlbmd0aChzZWxmKTsKLSAgaWYgKGluZGV4IDwgMCkgewot
ICAgIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7Ci0gIH0KLSAgUHlPYmplY3QqIGl0ZW0gPSBQeUxp
c3RfR2V0SXRlbShzZWxmLT5jaGlsZF9tZXNzYWdlcywgaW5kZXgpOwotICBpZiAoaXRlbSA9PSBO
VUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgUHlfSU5DUkVGKGl0ZW0pOwotICByZXR1
cm4gaXRlbTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBQb3AoUmVwZWF0ZWRDb21wb3NpdGVDb250
YWluZXIqIHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogYXJncykgewotICBQ
eV9zc2l6ZV90IGluZGV4ID0gLTE7Ci0gIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG4i
LCAmaW5kZXgpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgUHlPYmplY3QqIGl0ZW0gPSBJ
dGVtKHNlbGYsIGluZGV4KTsKLSAgaWYgKGl0ZW0gPT0gTlVMTCkgewotICAgIFB5RXJyX0Zvcm1h
dChQeUV4Y19JbmRleEVycm9yLAotICAgICAgICAgICAgICAgICAibGlzdCBpbmRleCAoJXpkKSBv
dXQgb2YgcmFuZ2UiLAotICAgICAgICAgICAgICAgICBpbmRleCk7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLSAgU2NvcGVkUHlPYmplY3RQdHIgcHlfaW5kZXgoUHlMb25nX0Zyb21Tc2l6ZV90KGlu
ZGV4KSk7Ci0gIGlmIChBc3NpZ25TdWJzY3JpcHQoc2VsZiwgcHlfaW5kZXguZ2V0KCksIE5VTEwp
IDwgMCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBpdGVtOwotfQotCi0vLyBS
ZWxlYXNlIGZpZWxkIG9mIHBhcmVudCBtZXNzYWdlIGFuZCB0cmFuc2ZlciB0aGUgb3duZXJzaGlw
IHRvIHRhcmdldC4KLXZvaWQgUmVsZWFzZUxhc3RUbyhDTWVzc2FnZSogcGFyZW50LAotICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAg
ICAgICAgQ01lc3NhZ2UqIHRhcmdldCkgewotICBHT09HTEVfQ0hFQ0tfTk9UTlVMTChwYXJlbnQp
OwotICBHT09HTEVfQ0hFQ0tfTk9UTlVMTChmaWVsZCk7Ci0gIEdPT0dMRV9DSEVDS19OT1ROVUxM
KHRhcmdldCk7Ci0KLSAgc2hhcmVkX3B0cjxNZXNzYWdlPiByZWxlYXNlZF9tZXNzYWdlKAotICAg
ICAgcGFyZW50LT5tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlJlbGVhc2VMYXN0KHBhcmVudC0+
bWVzc2FnZSwgZmllbGQpKTsKLSAgLy8gVE9ETyh0aWJlbGwpOiBEZWFsIHdpdGggcHJvdG8xLgot
Ci0gIHRhcmdldC0+cGFyZW50ID0gTlVMTDsKLSAgdGFyZ2V0LT5wYXJlbnRfZmllbGRfZGVzY3Jp
cHRvciA9IE5VTEw7Ci0gIHRhcmdldC0+bWVzc2FnZSA9IHJlbGVhc2VkX21lc3NhZ2UuZ2V0KCk7
Ci0gIHRhcmdldC0+cmVhZF9vbmx5ID0gZmFsc2U7Ci0gIGNtZXNzYWdlOjpTZXRPd25lcih0YXJn
ZXQsIHJlbGVhc2VkX21lc3NhZ2UpOwotfQotCi0vLyBDYWxsZWQgdG8gcmVsZWFzZSBhIGNvbnRh
aW5lciB1c2luZwotLy8gQ2xlYXJGaWVsZCgnY29udGFpbmVyX2ZpZWxkX25hbWUnKSBvbiB0aGUg
cGFyZW50LgotaW50IFJlbGVhc2UoUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIqIHNlbGYpIHsK
LSAgaWYgKFVwZGF0ZUNoaWxkTWVzc2FnZXMoc2VsZikgPCAwKSB7Ci0gICAgUHlFcnJfV3JpdGVV
bnJhaXNhYmxlKFB5Qnl0ZXNfRnJvbVN0cmluZygiRmFpbGVkIHRvIHVwZGF0ZSByZWxlYXNlZCAi
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVzc2FnZXMi
KSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgTWVzc2FnZSogbWVzc2FnZSA9IHNlbGYtPm1l
c3NhZ2U7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBzZWxmLT5wYXJlbnRfZmll
bGRfZGVzY3JpcHRvcjsKLQotICAvLyBUaGUgcmVmbGVjdGlvbiBBUEkgb25seSBsZXRzIHVzIHJl
bGVhc2UgdGhlIGxhc3QgbWVzc2FnZSBpbiBhCi0gIC8vIHJlcGVhdGVkIGZpZWxkLiAgVGhlcmVm
b3JlIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4KLSAgLy8gc3RhcnRpbmcgd2l0aCB0
aGUgbGFzdCBvbmUuCi0gIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZSA9IFB5TGlzdF9HRVRfU0laRShz
ZWxmLT5jaGlsZF9tZXNzYWdlcyk7Ci0gIEdPT0dMRV9EQ0hFQ0tfRVEoc2l6ZSwgbWVzc2FnZS0+
R2V0UmVmbGVjdGlvbigpLT5GaWVsZFNpemUoKm1lc3NhZ2UsIGZpZWxkKSk7Ci0gIGZvciAoUHlf
c3NpemVfdCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgQ01lc3NhZ2UqIGNoaWxk
X2NtZXNzYWdlID0gcmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+KAotICAgICAgICBQeUxpc3Rf
R0VUX0lURU0oc2VsZi0+Y2hpbGRfbWVzc2FnZXMsIGkpKTsKLSAgICBSZWxlYXNlTGFzdFRvKHNl
bGYtPnBhcmVudCwgZmllbGQsIGNoaWxkX2NtZXNzYWdlKTsKLSAgfQotCi0gIC8vIERldGFjaCBm
cm9tIGNvbnRhaW5pbmcgbWVzc2FnZS4KLSAgc2VsZi0+cGFyZW50ID0gTlVMTDsKLSAgc2VsZi0+
cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3IgPSBOVUxMOwotICBzZWxmLT5tZXNzYWdlID0gTlVMTDsK
LSAgc2VsZi0+b3duZXIucmVzZXQoKTsKLQotICByZXR1cm4gMDsKLX0KLQotaW50IFNldE93bmVy
KFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKiBzZWxmLAotICAgICAgICAgICAgIGNvbnN0IHNo
YXJlZF9wdHI8TWVzc2FnZT4mIG5ld19vd25lcikgewotICBHT09HTEVfQ0hFQ0tfQVRUQUNIRUQo
c2VsZik7Ci0KLSAgc2VsZi0+b3duZXIgPSBuZXdfb3duZXI7Ci0gIGNvbnN0IFB5X3NzaXplX3Qg
biA9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5jaGlsZF9tZXNzYWdlcyk7Ci0gIGZvciAoUHlfc3Np
emVfdCBpID0gMDsgaSA8IG47ICsraSkgewotICAgIFB5T2JqZWN0KiBtc2cgPSBQeUxpc3RfR0VU
X0lURU0oc2VsZi0+Y2hpbGRfbWVzc2FnZXMsIGkpOwotICAgIGlmIChjbWVzc2FnZTo6U2V0T3du
ZXIocmVpbnRlcnByZXRfY2FzdDxDTWVzc2FnZSo+KG1zZyksIG5ld19vd25lcikgPT0gLTEpIHsK
LSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRoZSBw
cml2YXRlIGNvbnN0cnVjdG9yIG9mIFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyIG9iamVjdHMu
Ci1QeU9iamVjdCAqTmV3Q29udGFpbmVyKAotICAgIENNZXNzYWdlKiBwYXJlbnQsCi0gICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBwYXJlbnRfZmllbGRfZGVzY3JpcHRvciwKLSAgICBDTWVzc2Fn
ZUNsYXNzKiBjb25jcmV0ZV9jbGFzcykgewotICBpZiAoIUNoZWNrRmllbGRCZWxvbmdzVG9NZXNz
YWdlKHBhcmVudF9maWVsZF9kZXNjcmlwdG9yLCBwYXJlbnQtPm1lc3NhZ2UpKSB7Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0KLQotICBSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lciogc2VsZiA9Ci0g
ICAgICByZWludGVycHJldF9jYXN0PFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKj4oCi0gICAg
ICAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYygmUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXJfVHlw
ZSwgMCkpOwotICBpZiAoc2VsZiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQot
ICBzZWxmLT5tZXNzYWdlID0gcGFyZW50LT5tZXNzYWdlOwotICBzZWxmLT5wYXJlbnQgPSBwYXJl
bnQ7Ci0gIHNlbGYtPnBhcmVudF9maWVsZF9kZXNjcmlwdG9yID0gcGFyZW50X2ZpZWxkX2Rlc2Ny
aXB0b3I7Ci0gIHNlbGYtPm93bmVyID0gcGFyZW50LT5vd25lcjsKLSAgUHlfSU5DUkVGKGNvbmNy
ZXRlX2NsYXNzKTsKLSAgc2VsZi0+Y2hpbGRfbWVzc2FnZV9jbGFzcyA9IGNvbmNyZXRlX2NsYXNz
OwotICBzZWxmLT5jaGlsZF9tZXNzYWdlcyA9IFB5TGlzdF9OZXcoMCk7Ci0KLSAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihzZWxmKTsKLX0KLQotc3RhdGljIHZvaWQgRGVhbGxv
YyhSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lciogc2VsZikgewotICBQeV9DTEVBUihzZWxmLT5j
aGlsZF9tZXNzYWdlcyk7Ci0gIFB5X0NMRUFSKHNlbGYtPmNoaWxkX21lc3NhZ2VfY2xhc3MpOwot
ICAvLyBUT0RPKHRpYmVsbCk6IERvIHdlIG5lZWQgdG8gY2FsbCBkZWxldGUgb24gdGhlc2Ugb2Jq
ZWN0cyB0byBtYWtlCi0gIC8vIHN1cmUgdGhlaXIgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZD8KLSAg
c2VsZi0+b3duZXIucmVzZXQoKTsKLQotICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHJlaW50ZXJw
cmV0X2Nhc3Q8UHlPYmplY3QqPihzZWxmKSk7Ci19Ci0KLXN0YXRpYyBQeVNlcXVlbmNlTWV0aG9k
cyBTcU1ldGhvZHMgPSB7Ci0gIChsZW5mdW5jKUxlbmd0aCwgICAgICAgIC8qIHNxX2xlbmd0aCAq
LwotICAwLCAvKiBzcV9jb25jYXQgKi8KLSAgMCwgLyogc3FfcmVwZWF0ICovCi0gIChzc2l6ZWFy
Z2Z1bmMpSXRlbSAvKiBzcV9pdGVtICovCi19OwotCi1zdGF0aWMgUHlNYXBwaW5nTWV0aG9kcyBN
cE1ldGhvZHMgPSB7Ci0gIChsZW5mdW5jKUxlbmd0aCwgICAgICAgICAgICAgICAvKiBtcF9sZW5n
dGggKi8KLSAgKGJpbmFyeWZ1bmMpU3Vic2NyaXB0LCAgICAgIC8qIG1wX3N1YnNjcmlwdCAqLwot
ICAob2Jqb2JqYXJncHJvYylBc3NpZ25TdWJzY3JpcHQsLyogbXBfYXNzX3N1YnNjcmlwdCAqLwot
fTsKLQotc3RhdGljIFB5TWV0aG9kRGVmIE1ldGhvZHNbXSA9IHsKLSAgeyAiYWRkIiwgKFB5Q0Z1
bmN0aW9uKSBBZGQsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgIkFkZHMgYW4g
b2JqZWN0IHRvIHRoZSByZXBlYXRlZCBjb250YWluZXIuIiB9LAotICB7ICJleHRlbmQiLCAoUHlD
RnVuY3Rpb24pIEV4dGVuZCwgTUVUSF9PLAotICAgICJBZGRzIG9iamVjdHMgdG8gdGhlIHJlcGVh
dGVkIGNvbnRhaW5lci4iIH0sCi0gIHsgInBvcCIsIChQeUNGdW5jdGlvbilQb3AsIE1FVEhfVkFS
QVJHUywKLSAgICAiUmVtb3ZlcyBhbiBvYmplY3QgZnJvbSB0aGUgcmVwZWF0ZWQgY29udGFpbmVy
IGFuZCByZXR1cm5zIGl0LiIgfSwKLSAgeyAicmVtb3ZlIiwgKFB5Q0Z1bmN0aW9uKSBSZW1vdmUs
IE1FVEhfTywKLSAgICAiUmVtb3ZlcyBhbiBvYmplY3QgZnJvbSB0aGUgcmVwZWF0ZWQgY29udGFp
bmVyLiIgfSwKLSAgeyAic29ydCIsIChQeUNGdW5jdGlvbikgU29ydCwgTUVUSF9WQVJBUkdTIHwg
TUVUSF9LRVlXT1JEUywKLSAgICAiU29ydHMgdGhlIHJlcGVhdGVkIGNvbnRhaW5lci4iIH0sCi0g
IHsgIk1lcmdlRnJvbSIsIChQeUNGdW5jdGlvbikgTWVyZ2VGcm9tLCBNRVRIX08sCi0gICAgIkFk
ZHMgb2JqZWN0cyB0byB0aGUgcmVwZWF0ZWQgY29udGFpbmVyLiIgfSwKLSAgeyBOVUxMLCBOVUxM
IH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSByZXBlYXRlZF9jb21wb3NpdGVfY29udGFpbmVyCi0K
LVB5VHlwZU9iamVjdCBSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lcl9UeXBlID0gewotICBQeVZh
ck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICBGVUxMX01PRFVMRV9OQU1FICIu
UmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIiLCAgLy8gdHBfbmFtZQotICBzaXplb2YoUmVwZWF0
ZWRDb21wb3NpdGVDb250YWluZXIpLCAgLy8gdHBfYmFzaWNzaXplCi0gIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaXRlbXNpemUKLSAgKGRlc3RydWN0b3IpcmVw
ZWF0ZWRfY29tcG9zaXRlX2NvbnRhaW5lcjo6RGVhbGxvYywgIC8vICB0cF9kZWFsbG9jCi0gIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfcHJpbnQKLSAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9nZXRhdHRyCi0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfc2V0YXR0cgotICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2NvbXBhcmUKLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9yZXByCi0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgdHBfYXNfbnVtYmVyCi0gICZyZXBlYXRlZF9jb21wb3Np
dGVfY29udGFpbmVyOjpTcU1ldGhvZHMsICAgLy8gIHRwX2FzX3NlcXVlbmNlCi0gICZyZXBlYXRl
ZF9jb21wb3NpdGVfY29udGFpbmVyOjpNcE1ldGhvZHMsICAgLy8gIHRwX2FzX21hcHBpbmcKLSAg
UHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkLCAgICAgICAgIC8vICB0cF9oYXNoCi0gIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfY2FsbAotICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX3N0cgotICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2dldGF0dHJvCi0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgdHBfc2V0YXR0cm8KLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICB0cF9hc19idWZmZXIKLSAgUHlfVFBGTEFHU19ERUZBVUxU
LCAgICAgICAgICAgICAgICAgIC8vICB0cF9mbGFncwotICAiQSBSZXBlYXRlZCBzY2FsYXIgY29u
dGFpbmVyIiwgICAgICAgLy8gIHRwX2RvYwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gIHRwX3RyYXZlcnNlCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgdHBfY2xlYXIKLSAgKHJpY2hjbXBmdW5jKXJlcGVhdGVkX2NvbXBvc2l0ZV9j
b250YWluZXI6OlJpY2hDb21wYXJlLCAgLy8gIHRwX3JpY2hjb21wYXJlCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfd2Vha2xpc3RvZmZzZXQKLSAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9pdGVyCi0gIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaXRlcm5leHQKLSAgcmVwZWF0ZWRfY29t
cG9zaXRlX2NvbnRhaW5lcjo6TWV0aG9kcywgICAvLyAgdHBfbWV0aG9kcwotICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX21lbWJlcnMKLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9nZXRzZXQKLSAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9iYXNlCi0gIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgdHBfZGljdAotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gIHRwX2Rlc2NyX2dldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gIHRwX2Rlc2NyX3NldAotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gIHRwX2RpY3RvZmZzZXQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICB0cF9pbml0Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHl0aG9uCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9yZXBlYXRlZF9jb21wb3NpdGVfY29udGFp
bmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvcmVwZWF0ZWRfY29tcG9zaXRlX2Nv
bnRhaW5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2I1NmI2MWIzNjNkMzZl
YjY1MmFiN2ZkNzk1ZTRmYzA3ZWZhZTBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9yZXBlYXRlZF9jb21w
b3NpdGVfY29udGFpbmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogYW51cmFhZ0Bnb29nbGUu
Y29tIChBbnVyYWFnIEFncmF3YWwpCi0vLyBBdXRob3I6IHRpYmVsbEBnb29nbGUuY29tIChKb2hh
biBUaWJlbGwpCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1BZVEhPTl9DUFBfUkVQRUFURURf
Q09NUE9TSVRFX0NPTlRBSU5FUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1BZVEhPTl9D
UFBfUkVQRUFURURfQ09NUE9TSVRFX0NPTlRBSU5FUl9IX18KLQotI2luY2x1ZGUgPFB5dGhvbi5o
PgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0
cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLQotY2xhc3MgRmllbGREZXNjcmlwdG9yOwotY2xhc3MgTWVzc2FnZTsKLQot
I2lmZGVmIF9TSEFSRURfUFRSX0gKLXVzaW5nIHN0ZDo6c2hhcmVkX3B0cjsKLSNlbHNlCi11c2lu
ZyBpbnRlcm5hbDo6c2hhcmVkX3B0cjsKLSNlbmRpZgotCi1uYW1lc3BhY2UgcHl0aG9uIHsKLQot
c3RydWN0IENNZXNzYWdlOwotc3RydWN0IENNZXNzYWdlQ2xhc3M7Ci0KLS8vIEEgUmVwZWF0ZWRD
b21wb3NpdGVDb250YWluZXIgY2FuIGJlIGluIG9uZSBvZiB0d28gc3RhdGVzOiBhdHRhY2hlZAot
Ly8gb3IgcmVsZWFzZWQuCi0vLwotLy8gV2hlbiBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgYWxsIG1v
ZGlmaWNhdGlvbnMgdG8gdGhlIGNvbnRhaW5lciBhcmUKLS8vIGRvbmUgYm90aCBvbiB0aGUgJ21l
c3NhZ2UnIGFuZCBvbiB0aGUgJ2NoaWxkX21lc3NhZ2VzJwotLy8gbGlzdC4gIEluIHRoaXMgc3Rh
dGUgYWxsIE1lc3NhZ2VzIHJlZmVycmVkIHRvIGJ5IHRoZSBjaGlsZHJlbiBpbgotLy8gJ2NoaWxk
X21lc3NhZ2VzJyBhcmUgb3duZXIgYnkgdGhlICdvd25lcicuCi0vLwotLy8gV2hlbiBpbiB0aGUg
cmVsZWFzZWQgc3RhdGUgJ21lc3NhZ2UnLCAnb3duZXInLCAncGFyZW50JywgYW5kCi0vLyAncGFy
ZW50X2ZpZWxkX2Rlc2NyaXB0b3InIGFyZSBOVUxMLgotdHlwZWRlZiBzdHJ1Y3QgUmVwZWF0ZWRD
b21wb3NpdGVDb250YWluZXIgewotICBQeU9iamVjdF9IRUFEOwotCi0gIC8vIFRoaXMgaXMgdGhl
IHRvcC1sZXZlbCBDKysgTWVzc2FnZSBvYmplY3QgdGhhdCBvd25zIHRoZSB3aG9sZQotICAvLyBw
cm90byB0cmVlLiAgRXZlcnkgUHl0aG9uIFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyIGhvbGRz
IGEKLSAgLy8gcmVmZXJlbmNlIHRvIGl0IGluIG9yZGVyIHRvIGtlZXAgaXQgYWxpdmUgYXMgbG9u
ZyBhcyB0aGVyZSdzIGEKLSAgLy8gUHl0aG9uIG9iamVjdCB0aGF0IHJlZmVyZW5jZXMgYW55IHBh
cnQgb2YgdGhlIHRyZWUuCi0gIHNoYXJlZF9wdHI8TWVzc2FnZT4gb3duZXI7Ci0KLSAgLy8gV2Vh
ayByZWZlcmVuY2UgdG8gcGFyZW50IG9iamVjdC4gTWF5IGJlIE5VTEwuIFVzZWQgdG8gbWFrZSBz
dXJlCi0gIC8vIHRoZSBwYXJlbnQgaXMgd3JpdGFibGUgYmVmb3JlIG1vZGlmeWluZyB0aGUKLSAg
Ly8gUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIuCi0gIENNZXNzYWdlKiBwYXJlbnQ7Ci0KLSAg
Ly8gQSBkZXNjcmlwdG9yIHVzZWQgdG8gbW9kaWZ5IHRoZSB1bmRlcmx5aW5nICdtZXNzYWdlJy4K
LSAgLy8gVGhlIHBvaW50ZXIgaXMgb3duZWQgYnkgdGhlIGdsb2JhbCBEZXNjcmlwdG9yUG9vbC4K
LSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBwYXJlbnRfZmllbGRfZGVzY3JpcHRvcjsKLQotICAv
LyBQb2ludGVyIHRvIHRoZSBDKysgTWVzc2FnZSB0aGF0IGNvbnRhaW5zIHRoaXMgY29udGFpbmVy
LiAgVGhlCi0gIC8vIFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyIGRvZXMgbm90IG93biB0aGlz
IHBvaW50ZXIuCi0gIC8vCi0gIC8vIElmIE5VTEwsIHRoaXMgbWVzc2FnZSBoYXMgYmVlbiByZWxl
YXNlZCBmcm9tIGl0cyBwYXJlbnQgKGJ5Ci0gIC8vIGNhbGxpbmcgQ2xlYXIoKSBvciBDbGVhckZp
ZWxkKCkgb24gdGhlIHBhcmVudC4KLSAgTWVzc2FnZSogbWVzc2FnZTsKLQotICAvLyBUaGUgdHlw
ZSB1c2VkIHRvIGNyZWF0ZSBuZXcgY2hpbGQgbWVzc2FnZXMuCi0gIENNZXNzYWdlQ2xhc3MqIGNo
aWxkX21lc3NhZ2VfY2xhc3M7Ci0KLSAgLy8gQSBsaXN0IG9mIGNoaWxkIG1lc3NhZ2VzLgotICBQ
eU9iamVjdCogY2hpbGRfbWVzc2FnZXM7Ci19IFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyOwot
Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyX1R5cGU7Ci0K
LW5hbWVzcGFjZSByZXBlYXRlZF9jb21wb3NpdGVfY29udGFpbmVyIHsKLQotLy8gQnVpbGRzIGEg
UmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIgb2JqZWN0LCBmcm9tIGEgcGFyZW50IG1lc3NhZ2Ug
YW5kIGEKLS8vIGZpZWxkIGRlc2NyaXB0b3IuCi1QeU9iamVjdCAqTmV3Q29udGFpbmVyKAotICAg
IENNZXNzYWdlKiBwYXJlbnQsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBwYXJlbnRfZmll
bGRfZGVzY3JpcHRvciwKLSAgICBDTWVzc2FnZUNsYXNzICpjaGlsZF9tZXNzYWdlX2NsYXNzKTsK
LQotLy8gQXBwZW5kcyBhIG5ldyBDTWVzc2FnZSB0byB0aGUgY29udGFpbmVyIGFuZCByZXR1cm5z
IGl0LiAgVGhlCi0vLyBDTWVzc2FnZSBpcyBpbml0aWFsaXplZCB1c2luZyB0aGUgY29udGVudCBv
ZiBrd2FyZ3MuCi0vLwotLy8gUmV0dXJucyBhIG5ldyByZWZlcmVuY2UgaWYgc3VjY2Vzc2Z1bDsg
cmV0dXJucyBOVUxMIGFuZCBzZXRzIGFuCi0vLyBleGNlcHRpb24gaWYgdW5zdWNjZXNzZnVsLgot
UHlPYmplY3QqIEFkZChSZXBlYXRlZENvbXBvc2l0ZUNvbnRhaW5lciogc2VsZiwKLSAgICAgICAg
ICAgICAgUHlPYmplY3QqIGFyZ3MsCi0gICAgICAgICAgICAgIFB5T2JqZWN0KiBrd2FyZ3MpOwot
Ci0vLyBBcHBlbmRzIGFsbCB0aGUgQ01lc3NhZ2VzIGluIHRoZSBpbnB1dCBpdGVyYXRvciB0byB0
aGUgY29udGFpbmVyLgotLy8KLS8vIFJldHVybnMgTm9uZSBpZiBzdWNjZXNzZnVsOyByZXR1cm5z
IE5VTEwgYW5kIHNldHMgYW4gZXhjZXB0aW9uIGlmCi0vLyB1bnN1Y2Nlc3NmdWwuCi1QeU9iamVj
dCogRXh0ZW5kKFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKiBzZWxmLCBQeU9iamVjdCogdmFs
dWUpOwotCi0vLyBBcHBlbmRzIGEgbmV3IG1lc3NhZ2UgdG8gdGhlIGNvbnRhaW5lciBmb3IgZWFj
aCBtZXNzYWdlIGluIHRoZQotLy8gaW5wdXQgaXRlcmF0b3IsIG1lcmdpbmcgZWFjaCBkYXRhIGVs
ZW1lbnQgaW4uIEVxdWl2YWxlbnQgdG8gZXh0ZW5kLgotLy8KLS8vIFJldHVybnMgTm9uZSBpZiBz
dWNjZXNzZnVsOyByZXR1cm5zIE5VTEwgYW5kIHNldHMgYW4gZXhjZXB0aW9uIGlmCi0vLyB1bnN1
Y2Nlc3NmdWwuCi1QeU9iamVjdCogTWVyZ2VGcm9tKFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVy
KiBzZWxmLCBQeU9iamVjdCogb3RoZXIpOwotCi0vLyBBY2Nlc3NlcyBtZXNzYWdlcyBpbiB0aGUg
Y29udGFpbmVyLgotLy8KLS8vIFJldHVybnMgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdl
IGZvciBhbiBpbnRlZ2VyIHBhcmFtZXRlci4KLS8vIFJldHVybnMgYSBuZXcgcmVmZXJlbmNlIHRv
IGEgbGlzdCBvZiBtZXNzYWdlcyBmb3IgYSBzbGljZS4KLVB5T2JqZWN0KiBTdWJzY3JpcHQoUmVw
ZWF0ZWRDb21wb3NpdGVDb250YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBzbGljZSk7Ci0KLS8vIERl
bGV0ZXMgaXRlbXMgZnJvbSB0aGUgY29udGFpbmVyIChjYW5ub3QgYmUgdXNlZCBmb3IgYXNzaWdu
bWVudCkuCi0vLwotLy8gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi1pbnQg
QXNzaWduU3Vic2NyaXB0KFJlcGVhdGVkQ29tcG9zaXRlQ29udGFpbmVyKiBzZWxmLAotICAgICAg
ICAgICAgICAgICAgICBQeU9iamVjdCogc2xpY2UsCi0gICAgICAgICAgICAgICAgICAgIFB5T2Jq
ZWN0KiB2YWx1ZSk7Ci0KLS8vIFJlbGVhc2VzIHRoZSBtZXNzYWdlcyBpbiB0aGUgY29udGFpbmVy
IHRvIHRoZSBnaXZlbiBtZXNzYWdlLgotLy8KLS8vIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBv
biBmYWlsdXJlLgotaW50IFJlbGVhc2VUb01lc3NhZ2UoUmVwZWF0ZWRDb21wb3NpdGVDb250YWlu
ZXIqIHNlbGYsIE1lc3NhZ2UqIG5ld19tZXNzYWdlKTsKLQotLy8gUmVsZWFzZXMgdGhlIG1lc3Nh
Z2VzIGluIHRoZSBjb250YWluZXIgdG8gYSBuZXcgbWVzc2FnZS4KLS8vCi0vLyBSZXR1cm5zIDAg
b24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLWludCBSZWxlYXNlKFJlcGVhdGVkQ29tcG9zaXRl
Q29udGFpbmVyKiBzZWxmKTsKLQotLy8gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1
cmUuCi1pbnQgU2V0T3duZXIoUmVwZWF0ZWRDb21wb3NpdGVDb250YWluZXIqIHNlbGYsCi0gICAg
ICAgICAgICAgY29uc3Qgc2hhcmVkX3B0cjxNZXNzYWdlPiYgbmV3X293bmVyKTsKLQotLy8gUmVt
b3ZlcyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSByZXBlYXRlZCBtZXNzYWdlIGZpZWxkICdmaWVs
ZCcgb24KLS8vIHRoZSBNZXNzYWdlICdwYXJlbnQnLCBhbmQgdHJhbnNmZXJzIHRoZSBvd25lcnNo
aXAgb2YgdGhlIHJlbGVhc2VkCi0vLyBNZXNzYWdlIHRvICd0YXJnZXQnLgotLy8KLS8vIENvcnJl
c3BvbmRzIHRvIHJlZmxlY3Rpb24gYXBpIG1ldGhvZCBSZWxlYXNlTWVzc2FnZS4KLXZvaWQgUmVs
ZWFzZUxhc3RUbyhDTWVzc2FnZSogcGFyZW50LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgQ01lc3NhZ2UqIHRhcmdl
dCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSByZXBlYXRlZF9jb21wb3NpdGVfY29udGFpbmVyCi19ICAv
LyBuYW1lc3BhY2UgcHl0aG9uCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFt
ZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfUFlUSE9OX0NQUF9SRVBF
QVRFRF9DT01QT1NJVEVfQ09OVEFJTkVSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3By
b3RvYnVmL3B5ZXh0L3JlcGVhdGVkX3NjYWxhcl9jb250YWluZXIuY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUv
cHJvdG9idWYvcHlleHQvcmVwZWF0ZWRfc2NhbGFyX2NvbnRhaW5lci5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTVkYTg1Zjg3YmI0N2UxNzc2YzA2N2YyMzY0NjgzZmJiZDY4NWU5
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9n
b29nbGUvcHJvdG9idWYvcHlleHQvcmVwZWF0ZWRfc2NhbGFyX2NvbnRhaW5lci5jYworKysgL2Rl
di9udWxsCkBAIC0xLDgxMiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotLy8gQXV0aG9yOiBhbnVyYWFnQGdvb2dsZS5jb20gKEFudXJhYWcgQWdyYXdhbCkKLS8v
IEF1dGhvcjogdGliZWxsQGdvb2dsZS5jb20gKEpvaGFuIFRpYmVsbCkKLQotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9weWV4dC9yZXBlYXRlZF9zY2FsYXJfY29udGFpbmVyLmg+Ci0KLSNpbmNs
dWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xv
Z2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9keW5hbWljX21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9kZXNj
cmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L2Rlc2NyaXB0b3JfcG9v
bC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9weWV4dC9tZXNzYWdlLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L3Njb3BlZF9weW9iamVjdF9wdHIuaD4KLQotI2lmIFBZ
X01BSk9SX1ZFUlNJT04gPj0gMwotICAjZGVmaW5lIFB5SW50X0Zyb21Mb25nIFB5TG9uZ19Gcm9t
TG9uZwotICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDMwMDAwCi0gICAgI2Vycm9yICJQeXRo
b24gMy4wIC0gMy4yIGFyZSBub3Qgc3VwcG9ydGVkLiIKLSAgI2Vsc2UKLSAgI2RlZmluZSBQeVN0
cmluZ19Bc1N0cmluZyhvYikgXAotICAgIChQeVVuaWNvZGVfQ2hlY2sob2IpPyBQeVVuaWNvZGVf
QXNVVEY4KG9iKTogUHlCeXRlc19Bc1N0cmluZyhvYikpCi0gICNlbmRpZgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBweXRob24g
ewotCi1uYW1lc3BhY2UgcmVwZWF0ZWRfc2NhbGFyX2NvbnRhaW5lciB7Ci0KLXN0YXRpYyBpbnQg
SW50ZXJuYWxBc3NpZ25SZXBlYXRlZEZpZWxkKAotICAgIFJlcGVhdGVkU2NhbGFyQ29udGFpbmVy
KiBzZWxmLCBQeU9iamVjdCogbGlzdCkgewotICBzZWxmLT5tZXNzYWdlLT5HZXRSZWZsZWN0aW9u
KCktPkNsZWFyRmllbGQoc2VsZi0+bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYtPnBhcmVudF9maWVsZF9kZXNjcmlwdG9yKTsKLSAgZm9y
IChQeV9zc2l6ZV90IGkgPSAwOyBpIDwgUHlMaXN0X0dFVF9TSVpFKGxpc3QpOyArK2kpIHsKLSAg
ICBQeU9iamVjdCogdmFsdWUgPSBQeUxpc3RfR0VUX0lURU0obGlzdCwgaSk7Ci0gICAgaWYgKFNj
b3BlZFB5T2JqZWN0UHRyKEFwcGVuZChzZWxmLCB2YWx1ZSkpID09IE5VTEwpIHsKLSAgICAgIHJl
dHVybiAtMTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBQeV9zc2l6ZV90
IExlbihSZXBlYXRlZFNjYWxhckNvbnRhaW5lciogc2VsZikgewotICBNZXNzYWdlKiBtZXNzYWdl
ID0gc2VsZi0+bWVzc2FnZTsKLSAgcmV0dXJuIG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+Rmll
bGRTaXplKCptZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi0+cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3IpOwotfQotCi1zdGF0aWMgaW50IEFz
c2lnbkl0ZW0oUmVwZWF0ZWRTY2FsYXJDb250YWluZXIqIHNlbGYsCi0gICAgICAgICAgICAgICAg
ICAgICAgUHlfc3NpemVfdCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCog
YXJnKSB7Ci0gIGNtZXNzYWdlOjpBc3N1cmVXcml0YWJsZShzZWxmLT5wYXJlbnQpOwotICBNZXNz
YWdlKiBtZXNzYWdlID0gc2VsZi0+bWVzc2FnZTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZF9kZXNjcmlwdG9yID0gc2VsZi0+cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3I7Ci0KLSAgY29u
c3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLSAg
aW50IGZpZWxkX3NpemUgPSByZWZsZWN0aW9uLT5GaWVsZFNpemUoKm1lc3NhZ2UsIGZpZWxkX2Rl
c2NyaXB0b3IpOwotICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgaW5kZXggPSBmaWVsZF9zaXplICsg
aW5kZXg7Ci0gIH0KLSAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBmaWVsZF9zaXplKSB7Ci0g
ICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsCi0gICAgICAgICAgICAgICAgICJsaXN0
IGFzc2lnbm1lbnQgaW5kZXggKCVkKSBvdXQgb2YgcmFuZ2UiLAotICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KGluZGV4KSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaWYgKGFy
ZyA9PSBOVUxMKSB7Ci0gICAgU2NvcGVkUHlPYmplY3RQdHIgcHlfaW5kZXgoUHlMb25nX0Zyb21M
b25nKGluZGV4KSk7Ci0gICAgcmV0dXJuIGNtZXNzYWdlOjpJbnRlcm5hbERlbGV0ZVJlcGVhdGVk
RmllbGQoc2VsZi0+cGFyZW50LCBmaWVsZF9kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5X2luZGV4LmdldCgpLCBOVUxMKTsKLSAg
fQotCi0gIGlmIChQeVNlcXVlbmNlX0NoZWNrKGFyZykgJiYgIShQeUJ5dGVzX0NoZWNrKGFyZykg
fHwgUHlVbmljb2RlX0NoZWNrKGFyZykpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5
cGVFcnJvciwgIlZhbHVlIG11c3QgYmUgc2NhbGFyIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0K
LSAgc3dpdGNoIChmaWVsZF9kZXNjcmlwdG9yLT5jcHBfdHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UMzI6IHsKLSAgICAgIEdPT0dMRV9DSEVDS19HRVRfSU5U
MzIoYXJnLCB2YWx1ZSwgLTEpOwotICAgICAgcmVmbGVjdGlvbi0+U2V0UmVwZWF0ZWRJbnQzMiht
ZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yLCBpbmRleCwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OiB7Ci0gICAgICBH
T09HTEVfQ0hFQ0tfR0VUX0lOVDY0KGFyZywgdmFsdWUsIC0xKTsKLSAgICAgIHJlZmxlY3Rpb24t
PlNldFJlcGVhdGVkSW50NjQobWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwgaW5kZXgsIHZhbHVl
KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9VSU5UMzI6IHsKLSAgICAgIEdPT0dMRV9DSEVDS19HRVRfVUlOVDMyKGFyZywgdmFsdWUsIC0x
KTsKLSAgICAgIHJlZmxlY3Rpb24tPlNldFJlcGVhdGVkVUludDMyKG1lc3NhZ2UsIGZpZWxkX2Rl
c2NyaXB0b3IsIGluZGV4LCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDY0OiB7Ci0gICAgICBHT09HTEVfQ0hFQ0tfR0VU
X1VJTlQ2NChhcmcsIHZhbHVlLCAtMSk7Ci0gICAgICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZFVJ
bnQ2NChtZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yLCBpbmRleCwgdmFsdWUpOwotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FUOiB7Ci0g
ICAgICBHT09HTEVfQ0hFQ0tfR0VUX0ZMT0FUKGFyZywgdmFsdWUsIC0xKTsKLSAgICAgIHJlZmxl
Y3Rpb24tPlNldFJlcGVhdGVkRmxvYXQobWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwgaW5kZXgs
IHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9ET1VCTEU6IHsKLSAgICAgIEdPT0dMRV9DSEVDS19HRVRfRE9VQkxFKGFyZywgdmFs
dWUsIC0xKTsKLSAgICAgIHJlZmxlY3Rpb24tPlNldFJlcGVhdGVkRG91YmxlKG1lc3NhZ2UsIGZp
ZWxkX2Rlc2NyaXB0b3IsIGluZGV4LCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTDogewotICAgICAgR09PR0xFX0NIRUNL
X0dFVF9CT09MKGFyZywgdmFsdWUsIC0xKTsKLSAgICAgIHJlZmxlY3Rpb24tPlNldFJlcGVhdGVk
Qm9vbChtZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yLCBpbmRleCwgdmFsdWUpOwotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzogewot
ICAgICAgaWYgKCFDaGVja0FuZFNldFN0cmluZygKLSAgICAgICAgICBhcmcsIG1lc3NhZ2UsIGZp
ZWxkX2Rlc2NyaXB0b3IsIHJlZmxlY3Rpb24sIGZhbHNlLCBpbmRleCkpIHsKLSAgICAgICAgcmV0
dXJuIC0xOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFX0VOVU06IHsKLSAgICAgIEdPT0dMRV9DSEVDS19HRVRfSU5UMzIoYXJn
LCB2YWx1ZSwgLTEpOwotICAgICAgaWYgKHJlZmxlY3Rpb24tPlN1cHBvcnRzVW5rbm93bkVudW1W
YWx1ZXMoKSkgewotICAgICAgICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZEVudW1WYWx1ZShtZXNz
YWdlLCBmaWVsZF9kZXNjcmlwdG9yLCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgRW51
bURlc2NyaXB0b3IqIGVudW1fZGVzY3JpcHRvciA9IGZpZWxkX2Rlc2NyaXB0b3ItPmVudW1fdHlw
ZSgpOwotICAgICAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBlbnVtX3ZhbHVlID0KLSAg
ICAgICAgICAgIGVudW1fZGVzY3JpcHRvci0+RmluZFZhbHVlQnlOdW1iZXIodmFsdWUpOwotICAg
ICAgICBpZiAoZW51bV92YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgcmVmbGVjdGlvbi0+U2V0
UmVwZWF0ZWRFbnVtKG1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IsIGluZGV4LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX3ZhbHVlKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICBTY29wZWRQeU9iamVjdFB0ciBzKFB5T2JqZWN0X1N0cihhcmcpKTsKLSAg
ICAgICAgICBpZiAocyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNf
VmFsdWVFcnJvciwgIlVua25vd24gZW51bSB2YWx1ZTogJXMiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKHMuZ2V0KCkpKTsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAgICBQeUV4Y19TeXN0ZW1F
cnJvciwgIkFkZGluZyB2YWx1ZSB0byBhIGZpZWxkIG9mIHVua25vd24gdHlwZSAlZCIsCi0gICAg
ICAgICAgZmllbGRfZGVzY3JpcHRvci0+Y3BwX3R5cGUoKSk7Ci0gICAgICByZXR1cm4gLTE7Ci0g
IH0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCogSXRlbShSZXBlYXRlZFNjYWxh
ckNvbnRhaW5lciogc2VsZiwgUHlfc3NpemVfdCBpbmRleCkgewotICBNZXNzYWdlKiBtZXNzYWdl
ID0gc2VsZi0+bWVzc2FnZTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlw
dG9yID0gc2VsZi0+cGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3I7Ci0gIGNvbnN0IFJlZmxlY3Rpb24q
IHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgaW50IGZpZWxkX3Np
emUgPSByZWZsZWN0aW9uLT5GaWVsZFNpemUoKm1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IpOwot
ICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgaW5kZXggPSBmaWVsZF9zaXplICsgaW5kZXg7Ci0gIH0K
LSAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBmaWVsZF9zaXplKSB7Ci0gICAgUHlFcnJfRm9y
bWF0KFB5RXhjX0luZGV4RXJyb3IsCi0gICAgICAgICAgICAgICAgICJsaXN0IGluZGV4ICglemQp
IG91dCBvZiByYW5nZSIsCi0gICAgICAgICAgICAgICAgIGluZGV4KTsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQotCi0gIFB5T2JqZWN0KiByZXN1bHQgPSBOVUxMOwotICBzd2l0Y2ggKGZpZWxkX2Rl
c2NyaXB0b3ItPmNwcF90eXBlKCkpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9JTlQzMjogewotICAgICAgaW50MzIgdmFsdWUgPSByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZElu
dDMyKAotICAgICAgICAgICptZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yLCBpbmRleCk7Ci0gICAg
ICByZXN1bHQgPSBQeUludF9Gcm9tTG9uZyh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UNjQ6IHsKLSAgICAgIGludDY0IHZh
bHVlID0gcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRJbnQ2NCgKLSAgICAgICAgICAqbWVzc2FnZSwg
ZmllbGRfZGVzY3JpcHRvciwgaW5kZXgpOwotICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Mb25n
TG9uZyh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfVUlOVDMyOiB7Ci0gICAgICB1aW50MzIgdmFsdWUgPSByZWZsZWN0aW9uLT5H
ZXRSZXBlYXRlZFVJbnQzMigKLSAgICAgICAgICAqbWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwg
aW5kZXgpOwotICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Mb25nTG9uZyh2YWx1ZSk7Ci0gICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDY0
OiB7Ci0gICAgICB1aW50NjQgdmFsdWUgPSByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZFVJbnQ2NCgK
LSAgICAgICAgICAqbWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwgaW5kZXgpOwotICAgICAgcmVz
dWx0ID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKHZhbHVlKTsKLSAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9GTE9BVDogewotICAgICAg
ZmxvYXQgdmFsdWUgPSByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEZsb2F0KAotICAgICAgICAgICpt
ZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yLCBpbmRleCk7Ci0gICAgICByZXN1bHQgPSBQeUZsb2F0
X0Zyb21Eb3VibGUodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRTogewotICAgICAgZG91YmxlIHZhbHVlID0gcmVmbGVj
dGlvbi0+R2V0UmVwZWF0ZWREb3VibGUoCi0gICAgICAgICAgKm1lc3NhZ2UsIGZpZWxkX2Rlc2Ny
aXB0b3IsIGluZGV4KTsKLSAgICAgIHJlc3VsdCA9IFB5RmxvYXRfRnJvbURvdWJsZSh2YWx1ZSk7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
Qk9PTDogewotICAgICAgYm9vbCB2YWx1ZSA9IHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkQm9vbCgK
LSAgICAgICAgICAqbWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwgaW5kZXgpOwotICAgICAgcmVz
dWx0ID0gUHlCb29sX0Zyb21Mb25nKHZhbHVlID8gMSA6IDApOwotICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06IHsKLSAgICAgIGNvbnN0
IEVudW1WYWx1ZURlc2NyaXB0b3IqIGVudW1fdmFsdWUgPQotICAgICAgICAgIG1lc3NhZ2UtPkdl
dFJlZmxlY3Rpb24oKS0+R2V0UmVwZWF0ZWRFbnVtKAotICAgICAgICAgICAgICAqbWVzc2FnZSwg
ZmllbGRfZGVzY3JpcHRvciwgaW5kZXgpOwotICAgICAgcmVzdWx0ID0gUHlJbnRfRnJvbUxvbmco
ZW51bV92YWx1ZS0+bnVtYmVyKCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzogewotICAgICAgc3RyaW5nIHZhbHVlID0gcmVm
bGVjdGlvbi0+R2V0UmVwZWF0ZWRTdHJpbmcoCi0gICAgICAgICAgKm1lc3NhZ2UsIGZpZWxkX2Rl
c2NyaXB0b3IsIGluZGV4KTsKLSAgICAgIHJlc3VsdCA9IFRvU3RyaW5nT2JqZWN0KGZpZWxkX2Rl
c2NyaXB0b3IsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOiB7Ci0gICAgICBQeU9iamVjdCogcHlfY21zZyA9IFB5
T2JqZWN0X0NhbGxPYmplY3QocmVpbnRlcnByZXRfY2FzdDxQeU9iamVjdCo+KAotICAgICAgICAg
ICZDTWVzc2FnZV9UeXBlKSwgTlVMTCk7Ci0gICAgICBpZiAocHlfY21zZyA9PSBOVUxMKSB7Ci0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotICAgICAgQ01lc3NhZ2UqIGNtc2cgPSByZWlu
dGVycHJldF9jYXN0PENNZXNzYWdlKj4ocHlfY21zZyk7Ci0gICAgICBjb25zdCBNZXNzYWdlJiBt
c2cgPSByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2UoCi0gICAgICAgICAgKm1lc3NhZ2Us
IGZpZWxkX2Rlc2NyaXB0b3IsIGluZGV4KTsKLSAgICAgIGNtc2ctPm93bmVyID0gc2VsZi0+b3du
ZXI7Ci0gICAgICBjbXNnLT5wYXJlbnQgPSBzZWxmLT5wYXJlbnQ7Ci0gICAgICBjbXNnLT5tZXNz
YWdlID0gY29uc3RfY2FzdDxNZXNzYWdlKj4oJm1zZyk7Ci0gICAgICBjbXNnLT5yZWFkX29ubHkg
PSBmYWxzZTsKLSAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihweV9j
bXNnKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgUHlFcnJfRm9y
bWF0KAotICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICJHZXR0aW5nIHZh
bHVlIGZyb20gYSByZXBlYXRlZCBmaWVsZCBvZiB1bmtub3duIHR5cGUgJWQiLAotICAgICAgICAg
IGZpZWxkX2Rlc2NyaXB0b3ItPmNwcF90eXBlKCkpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIFB5T2JqZWN0KiBTdWJzY3JpcHQoUmVwZWF0ZWRTY2FsYXJDb250YWluZXIq
IHNlbGYsIFB5T2JqZWN0KiBzbGljZSkgewotICBQeV9zc2l6ZV90IGZyb207Ci0gIFB5X3NzaXpl
X3QgdG87Ci0gIFB5X3NzaXplX3Qgc3RlcDsKLSAgUHlfc3NpemVfdCBsZW5ndGg7Ci0gIFB5X3Nz
aXplX3Qgc2xpY2VsZW5ndGg7Ci0gIGJvb2wgcmV0dXJuX2xpc3QgPSBmYWxzZTsKLSNpZiBQWV9N
QUpPUl9WRVJTSU9OIDwgMwotICBpZiAoUHlJbnRfQ2hlY2soc2xpY2UpKSB7Ci0gICAgZnJvbSA9
IHRvID0gUHlJbnRfQXNMb25nKHNsaWNlKTsKLSAgfSBlbHNlICAvLyBOT0xJTlQKLSNlbmRpZgot
ICBpZiAoUHlMb25nX0NoZWNrKHNsaWNlKSkgewotICAgIGZyb20gPSB0byA9IFB5TG9uZ19Bc0xv
bmcoc2xpY2UpOwotICB9IGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soc2xpY2UpKSB7Ci0gICAgbGVu
Z3RoID0gTGVuKHNlbGYpOwotI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotICAgIGlmIChQeVNs
aWNlX0dldEluZGljZXNFeChzbGljZSwKLSNlbHNlCi0gICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNl
c0V4KHJlaW50ZXJwcmV0X2Nhc3Q8UHlTbGljZU9iamVjdCo+KHNsaWNlKSwKLSNlbmRpZgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsICZmcm9tLCAmdG8sICZzdGVwLCAmc2xp
Y2VsZW5ndGgpID09IC0xKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJu
X2xpc3QgPSB0cnVlOwotICB9IGVsc2UgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBl
RXJyb3IsICJsaXN0IGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyIpOwotICAgIHJldHVybiBOVUxM
OwotICB9Ci0KLSAgaWYgKCFyZXR1cm5fbGlzdCkgewotICAgIHJldHVybiBJdGVtKHNlbGYsIGZy
b20pOwotICB9Ci0KLSAgUHlPYmplY3QqIGxpc3QgPSBQeUxpc3RfTmV3KDApOwotICBpZiAobGlz
dCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgaWYgKGZyb20gPD0gdG8pIHsK
LSAgICBpZiAoc3RlcCA8IDApIHsKLSAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLSAgICBmb3Ig
KFB5X3NzaXplX3QgaW5kZXggPSBmcm9tOyBpbmRleCA8IHRvOyBpbmRleCArPSBzdGVwKSB7Ci0g
ICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewotICAgICAgICBicmVhazsK
LSAgICAgIH0KLSAgICAgIFNjb3BlZFB5T2JqZWN0UHRyIHMoSXRlbShzZWxmLCBpbmRleCkpOwot
ICAgICAgUHlMaXN0X0FwcGVuZChsaXN0LCBzLmdldCgpKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0g
ICAgaWYgKHN0ZXAgPiAwKSB7Ci0gICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0gICAgZm9yIChQ
eV9zc2l6ZV90IGluZGV4ID0gZnJvbTsgaW5kZXggPiB0bzsgaW5kZXggKz0gc3RlcCkgewotICAg
ICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0gICAgICBTY29wZWRQeU9iamVjdFB0ciBzKEl0ZW0oc2VsZiwgaW5kZXgpKTsKLSAg
ICAgIFB5TGlzdF9BcHBlbmQobGlzdCwgcy5nZXQoKSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBs
aXN0OwotfQotCi1QeU9iamVjdCogQXBwZW5kKFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyKiBzZWxm
LCBQeU9iamVjdCogaXRlbSkgewotICBjbWVzc2FnZTo6QXNzdXJlV3JpdGFibGUoc2VsZi0+cGFy
ZW50KTsKLSAgTWVzc2FnZSogbWVzc2FnZSA9IHNlbGYtPm1lc3NhZ2U7Ci0gIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZmllbGRfZGVzY3JpcHRvciA9IHNlbGYtPnBhcmVudF9maWVsZF9kZXNjcmlw
dG9yOwotCi0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZs
ZWN0aW9uKCk7Ci0gIHN3aXRjaCAoZmllbGRfZGVzY3JpcHRvci0+Y3BwX3R5cGUoKSkgewotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyOiB7Ci0gICAgICBHT09HTEVfQ0hF
Q0tfR0VUX0lOVDMyKGl0ZW0sIHZhbHVlLCBOVUxMKTsKLSAgICAgIHJlZmxlY3Rpb24tPkFkZElu
dDMyKG1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3IsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQ2NDogewotICAgICAgR09P
R0xFX0NIRUNLX0dFVF9JTlQ2NChpdGVtLCB2YWx1ZSwgTlVMTCk7Ci0gICAgICByZWZsZWN0aW9u
LT5BZGRJbnQ2NChtZXNzYWdlLCBmaWVsZF9kZXNjcmlwdG9yLCB2YWx1ZSk7Ci0gICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMyOiB7Ci0g
ICAgICBHT09HTEVfQ0hFQ0tfR0VUX1VJTlQzMihpdGVtLCB2YWx1ZSwgTlVMTCk7Ci0gICAgICBy
ZWZsZWN0aW9uLT5BZGRVSW50MzIobWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwgdmFsdWUpOwot
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJ
TlQ2NDogewotICAgICAgR09PR0xFX0NIRUNLX0dFVF9VSU5UNjQoaXRlbSwgdmFsdWUsIE5VTEwp
OwotICAgICAgcmVmbGVjdGlvbi0+QWRkVUludDY0KG1lc3NhZ2UsIGZpZWxkX2Rlc2NyaXB0b3Is
IHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9GTE9BVDogewotICAgICAgR09PR0xFX0NIRUNLX0dFVF9GTE9BVChpdGVtLCB2YWx1
ZSwgTlVMTCk7Ci0gICAgICByZWZsZWN0aW9uLT5BZGRGbG9hdChtZXNzYWdlLCBmaWVsZF9kZXNj
cmlwdG9yLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfRE9VQkxFOiB7Ci0gICAgICBHT09HTEVfQ0hFQ0tfR0VUX0RPVUJMRShp
dGVtLCB2YWx1ZSwgTlVMTCk7Ci0gICAgICByZWZsZWN0aW9uLT5BZGREb3VibGUobWVzc2FnZSwg
ZmllbGRfZGVzY3JpcHRvciwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0w6IHsKLSAgICAgIEdPT0dMRV9DSEVDS19HRVRf
Qk9PTChpdGVtLCB2YWx1ZSwgTlVMTCk7Ci0gICAgICByZWZsZWN0aW9uLT5BZGRCb29sKG1lc3Nh
Z2UsIGZpZWxkX2Rlc2NyaXB0b3IsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6IHsKLSAgICAgIGlmICghQ2hlY2tB
bmRTZXRTdHJpbmcoCi0gICAgICAgICAgaXRlbSwgbWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwg
cmVmbGVjdGlvbiwgdHJ1ZSwgLTEpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQot
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VO
VU06IHsKLSAgICAgIEdPT0dMRV9DSEVDS19HRVRfSU5UMzIoaXRlbSwgdmFsdWUsIE5VTEwpOwot
ICAgICAgaWYgKHJlZmxlY3Rpb24tPlN1cHBvcnRzVW5rbm93bkVudW1WYWx1ZXMoKSkgewotICAg
ICAgICByZWZsZWN0aW9uLT5BZGRFbnVtVmFsdWUobWVzc2FnZSwgZmllbGRfZGVzY3JpcHRvciwg
dmFsdWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgRW51bURlc2NyaXB0b3IqIGVu
dW1fZGVzY3JpcHRvciA9IGZpZWxkX2Rlc2NyaXB0b3ItPmVudW1fdHlwZSgpOwotICAgICAgICBj
b25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBlbnVtX3ZhbHVlID0KLSAgICAgICAgICAgIGVudW1f
ZGVzY3JpcHRvci0+RmluZFZhbHVlQnlOdW1iZXIodmFsdWUpOwotICAgICAgICBpZiAoZW51bV92
YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgcmVmbGVjdGlvbi0+QWRkRW51bShtZXNzYWdlLCBm
aWVsZF9kZXNjcmlwdG9yLCBlbnVtX3ZhbHVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBTY29wZWRQeU9iamVjdFB0ciBzKFB5T2JqZWN0X1N0cihpdGVtKSk7Ci0gICAgICAgICAgaWYg
KHMgIT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3Is
ICJVbmtub3duIGVudW0gdmFsdWU6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0
cmluZ19Bc1N0cmluZyhzLmdldCgpKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBO
VUxMOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVs
dDoKLSAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwgIkFk
ZGluZyB2YWx1ZSB0byBhIGZpZWxkIG9mIHVua25vd24gdHlwZSAlZCIsCi0gICAgICAgICAgZmll
bGRfZGVzY3JpcHRvci0+Y3BwX3R5cGUoKSk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0g
IFB5X1JFVFVSTl9OT05FOwotfQotCi1zdGF0aWMgaW50IEFzc1N1YnNjcmlwdChSZXBlYXRlZFNj
YWxhckNvbnRhaW5lciogc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBz
bGljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSkgewotICBQeV9z
c2l6ZV90IGZyb207Ci0gIFB5X3NzaXplX3QgdG87Ci0gIFB5X3NzaXplX3Qgc3RlcDsKLSAgUHlf
c3NpemVfdCBsZW5ndGg7Ci0gIFB5X3NzaXplX3Qgc2xpY2VsZW5ndGg7Ci0gIGJvb2wgY3JlYXRl
X2xpc3QgPSBmYWxzZTsKLQotICBjbWVzc2FnZTo6QXNzdXJlV3JpdGFibGUoc2VsZi0+cGFyZW50
KTsKLSAgTWVzc2FnZSogbWVzc2FnZSA9IHNlbGYtPm1lc3NhZ2U7Ci0gIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGRfZGVzY3JpcHRvciA9Ci0gICAgICBzZWxmLT5wYXJlbnRfZmllbGRfZGVz
Y3JpcHRvcjsKLQotI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0gIGlmIChQeUludF9DaGVjayhz
bGljZSkpIHsKLSAgICBmcm9tID0gdG8gPSBQeUludF9Bc0xvbmcoc2xpY2UpOwotICB9IGVsc2UK
LSNlbmRpZgotICBpZiAoUHlMb25nX0NoZWNrKHNsaWNlKSkgewotICAgIGZyb20gPSB0byA9IFB5
TG9uZ19Bc0xvbmcoc2xpY2UpOwotICB9IGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soc2xpY2UpKSB7
Ci0gICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rp
b24oKTsKLSAgICBsZW5ndGggPSByZWZsZWN0aW9uLT5GaWVsZFNpemUoKm1lc3NhZ2UsIGZpZWxk
X2Rlc2NyaXB0b3IpOwotI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotICAgIGlmIChQeVNsaWNl
X0dldEluZGljZXNFeChzbGljZSwKLSNlbHNlCi0gICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4
KHJlaW50ZXJwcmV0X2Nhc3Q8UHlTbGljZU9iamVjdCo+KHNsaWNlKSwKLSNlbmRpZgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsICZmcm9tLCAmdG8sICZzdGVwLCAmc2xpY2Vs
ZW5ndGgpID09IC0xKSB7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGNyZWF0ZV9saXN0
ID0gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9y
LCAibGlzdCBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0K
LQotICBpZiAodmFsdWUgPT0gTlVMTCkgewotICAgIHJldHVybiBjbWVzc2FnZTo6SW50ZXJuYWxE
ZWxldGVSZXBlYXRlZEZpZWxkKAotICAgICAgICBzZWxmLT5wYXJlbnQsIGZpZWxkX2Rlc2NyaXB0
b3IsIHNsaWNlLCBOVUxMKTsKLSAgfQotCi0gIGlmICghY3JlYXRlX2xpc3QpIHsKLSAgICByZXR1
cm4gQXNzaWduSXRlbShzZWxmLCBmcm9tLCB2YWx1ZSk7Ci0gIH0KLQotICBTY29wZWRQeU9iamVj
dFB0ciBmdWxsX3NsaWNlKFB5U2xpY2VfTmV3KE5VTEwsIE5VTEwsIE5VTEwpKTsKLSAgaWYgKGZ1
bGxfc2xpY2UgPT0gTlVMTCkgewotICAgIHJldHVybiAtMTsKLSAgfQotICBTY29wZWRQeU9iamVj
dFB0ciBuZXdfbGlzdChTdWJzY3JpcHQoc2VsZiwgZnVsbF9zbGljZS5nZXQoKSkpOwotICBpZiAo
bmV3X2xpc3QgPT0gTlVMTCkgewotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoUHlTZXF1ZW5j
ZV9TZXRTbGljZShuZXdfbGlzdC5nZXQoKSwgZnJvbSwgdG8sIHZhbHVlKSA8IDApIHsKLSAgICBy
ZXR1cm4gLTE7Ci0gIH0KLQotICByZXR1cm4gSW50ZXJuYWxBc3NpZ25SZXBlYXRlZEZpZWxkKHNl
bGYsIG5ld19saXN0LmdldCgpKTsKLX0KLQotUHlPYmplY3QqIEV4dGVuZChSZXBlYXRlZFNjYWxh
ckNvbnRhaW5lciogc2VsZiwgUHlPYmplY3QqIHZhbHVlKSB7Ci0gIGNtZXNzYWdlOjpBc3N1cmVX
cml0YWJsZShzZWxmLT5wYXJlbnQpOwotCi0gIC8vIFRPRE8ocHR1Y2tlcik6IERlcHJlY2F0ZSB0
aGlzIGJlaGF2aW9yLiBiLzE4NDEzODYyCi0gIGlmICh2YWx1ZSA9PSBQeV9Ob25lKSB7Ci0gICAg
UHlfUkVUVVJOX05PTkU7Ci0gIH0KLSAgaWYgKChQeV9UWVBFKHZhbHVlKS0+dHBfYXNfc2VxdWVu
Y2UgPT0gTlVMTCkgJiYgUHlPYmplY3RfTm90KHZhbHVlKSkgewotICAgIFB5X1JFVFVSTl9OT05F
OwotICB9Ci0KLSAgU2NvcGVkUHlPYmplY3RQdHIgaXRlcihQeU9iamVjdF9HZXRJdGVyKHZhbHVl
KSk7Ci0gIGlmIChpdGVyID09IE5VTEwpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw
ZUVycm9yLCAiVmFsdWUgbXVzdCBiZSBpdGVyYWJsZSIpOwotICAgIHJldHVybiBOVUxMOwotICB9
Ci0gIFNjb3BlZFB5T2JqZWN0UHRyIG5leHQ7Ci0gIHdoaWxlICgobmV4dC5yZXNldChQeUl0ZXJf
TmV4dChpdGVyLmdldCgpKSkpICE9IE5VTEwpIHsKLSAgICBpZiAoU2NvcGVkUHlPYmplY3RQdHIo
QXBwZW5kKHNlbGYsIG5leHQuZ2V0KCkpKSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0gIH0KLSAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICByZXR1cm4gTlVMTDsK
LSAgfQotICBQeV9SRVRVUk5fTk9ORTsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBJbnNlcnQoUmVw
ZWF0ZWRTY2FsYXJDb250YWluZXIqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKSB7Ci0gIFB5X3NzaXpl
X3QgaW5kZXg7Ci0gIFB5T2JqZWN0KiB2YWx1ZTsKLSAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFy
Z3MsICJsTyIsICZpbmRleCwgJnZhbHVlKSkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIFNj
b3BlZFB5T2JqZWN0UHRyIGZ1bGxfc2xpY2UoUHlTbGljZV9OZXcoTlVMTCwgTlVMTCwgTlVMTCkp
OwotICBTY29wZWRQeU9iamVjdFB0ciBuZXdfbGlzdChTdWJzY3JpcHQoc2VsZiwgZnVsbF9zbGlj
ZS5nZXQoKSkpOwotICBpZiAoUHlMaXN0X0luc2VydChuZXdfbGlzdC5nZXQoKSwgaW5kZXgsIHZh
bHVlKSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBpbnQgcmV0ID0gSW50ZXJuYWxB
c3NpZ25SZXBlYXRlZEZpZWxkKHNlbGYsIG5ld19saXN0LmdldCgpKTsKLSAgaWYgKHJldCA8IDAp
IHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBQeV9SRVRVUk5fTk9ORTsKLX0KLQotc3RhdGlj
IFB5T2JqZWN0KiBSZW1vdmUoUmVwZWF0ZWRTY2FsYXJDb250YWluZXIqIHNlbGYsIFB5T2JqZWN0
KiB2YWx1ZSkgewotICBQeV9zc2l6ZV90IG1hdGNoX2luZGV4ID0gLTE7Ci0gIGZvciAoUHlfc3Np
emVfdCBpID0gMDsgaSA8IExlbihzZWxmKTsgKytpKSB7Ci0gICAgU2NvcGVkUHlPYmplY3RQdHIg
ZWxlbShJdGVtKHNlbGYsIGkpKTsKLSAgICBpZiAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGVs
ZW0uZ2V0KCksIHZhbHVlLCBQeV9FUSkpIHsKLSAgICAgIG1hdGNoX2luZGV4ID0gaTsKLSAgICAg
IGJyZWFrOwotICAgIH0KLSAgfQotICBpZiAobWF0Y2hfaW5kZXggPT0gLTEpIHsKLSAgICBQeUVy
cl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInJlbW92ZSh4KTogeCBub3QgaW4gY29udGFp
bmVyIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgaWYgKEFzc2lnbkl0ZW0oc2VsZiwgbWF0
Y2hfaW5kZXgsIE5VTEwpIDwgMCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIFB5X1JFVFVS
Tl9OT05FOwotfQotCi1zdGF0aWMgUHlPYmplY3QqIFJpY2hDb21wYXJlKFJlcGVhdGVkU2NhbGFy
Q29udGFpbmVyKiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCog
b3RoZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcGlkKSB7Ci0gIGlmIChv
cGlkICE9IFB5X0VRICYmIG9waWQgIT0gUHlfTkUpIHsKLSAgICBQeV9JTkNSRUYoUHlfTm90SW1w
bGVtZW50ZWQpOwotICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKLSAgfQotCi0gIC8vIENv
cHkgdGhlIGNvbnRlbnRzIG9mIHRoaXMgcmVwZWF0ZWQgc2NhbGFyIGNvbnRhaW5lciwgYW5kIG90
aGVyIGlmIGl0IGlzCi0gIC8vIGFsc28gYSByZXBlYXRlZCBzY2FsYXIgY29udGFpbmVyLCBpbnRv
IFB5dGhvbiBsaXN0cyBzbyB3ZSBjYW4gZGVsZWdhdGUKLSAgLy8gdG8gdGhlIGxpc3QncyBjb21w
YXJlIG1ldGhvZC4KLQotICBTY29wZWRQeU9iamVjdFB0ciBmdWxsX3NsaWNlKFB5U2xpY2VfTmV3
KE5VTEwsIE5VTEwsIE5VTEwpKTsKLSAgaWYgKGZ1bGxfc2xpY2UgPT0gTlVMTCkgewotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0KLSAgU2NvcGVkUHlPYmplY3RQdHIgb3RoZXJfbGlzdF9kZWxldGVy
OwotICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKG90aGVyLCAmUmVwZWF0ZWRTY2FsYXJDb250YWlu
ZXJfVHlwZSkpIHsKLSAgICBvdGhlcl9saXN0X2RlbGV0ZXIucmVzZXQoU3Vic2NyaXB0KAotICAg
ICAgICByZWludGVycHJldF9jYXN0PFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyKj4ob3RoZXIpLCBm
dWxsX3NsaWNlLmdldCgpKSk7Ci0gICAgb3RoZXIgPSBvdGhlcl9saXN0X2RlbGV0ZXIuZ2V0KCk7
Ci0gIH0KLQotICBTY29wZWRQeU9iamVjdFB0ciBsaXN0KFN1YnNjcmlwdChzZWxmLCBmdWxsX3Ns
aWNlLmdldCgpKSk7Ci0gIGlmIChsaXN0ID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAg
fQotICByZXR1cm4gUHlPYmplY3RfUmljaENvbXBhcmUobGlzdC5nZXQoKSwgb3RoZXIsIG9waWQp
OwotfQotCi1QeU9iamVjdCogUmVkdWNlKFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyKiB1bnVzZWRf
c2VsZikgewotICBQeUVycl9Gb3JtYXQoCi0gICAgICBQaWNrbGVFcnJvcl9jbGFzcywKLSAgICAg
ICJjYW4ndCBwaWNrbGUgcmVwZWF0ZWQgbWVzc2FnZSBmaWVsZHMsIGNvbnZlcnQgdG8gbGlzdCBm
aXJzdCIpOwotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIFB5T2JqZWN0KiBTb3J0KFJlcGVh
dGVkU2NhbGFyQ29udGFpbmVyKiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0
KiBhcmdzLAotICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBrd2RzKSB7Ci0gIC8vIFN1
cHBvcnQgdGhlIG9sZCBzb3J0X2Z1bmN0aW9uIGFyZ3VtZW50IGZvciBiYWNrd2FyZHMKLSAgLy8g
Y29tcGF0aWJpbGl0eS4KLSAgaWYgKGt3ZHMgIT0gTlVMTCkgewotICAgIFB5T2JqZWN0KiBzb3J0
X2Z1bmMgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhrd2RzLCAic29ydF9mdW5jdGlvbiIpOwotICAg
IGlmIChzb3J0X2Z1bmMgIT0gTlVMTCkgewotICAgICAgLy8gTXVzdCBzZXQgYmVmb3JlIGRlbGV0
aW5nIGFzIHNvcnRfZnVuYyBpcyBhIGJvcnJvd2VkIHJlZmVyZW5jZQotICAgICAgLy8gYW5kIGt3
ZHMgbWlnaHQgYmUgdGhlIG9ubHkgdGhpbmcga2VlcGluZyBpdCBhbGl2ZS4KLSAgICAgIGlmIChQ
eURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAiY21wIiwgc29ydF9mdW5jKSA9PSAtMSkKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgICBpZiAoUHlEaWN0X0RlbEl0ZW1TdHJpbmcoa3dkcywgInNv
cnRfZnVuY3Rpb24iKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICB9Ci0K
LSAgU2NvcGVkUHlPYmplY3RQdHIgZnVsbF9zbGljZShQeVNsaWNlX05ldyhOVUxMLCBOVUxMLCBO
VUxMKSk7Ci0gIGlmIChmdWxsX3NsaWNlID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAg
fQotICBTY29wZWRQeU9iamVjdFB0ciBsaXN0KFN1YnNjcmlwdChzZWxmLCBmdWxsX3NsaWNlLmdl
dCgpKSk7Ci0gIGlmIChsaXN0ID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBT
Y29wZWRQeU9iamVjdFB0ciBtKFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobGlzdC5nZXQoKSwgInNv
cnQiKSk7Ci0gIGlmIChtID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBTY29w
ZWRQeU9iamVjdFB0ciByZXMoUHlPYmplY3RfQ2FsbChtLmdldCgpLCBhcmdzLCBrd2RzKSk7Ci0g
IGlmIChyZXMgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGludCByZXQgPSBJ
bnRlcm5hbEFzc2lnblJlcGVhdGVkRmllbGQoc2VsZiwgbGlzdC5nZXQoKSk7Ci0gIGlmIChyZXQg
PCAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgUHlfUkVUVVJOX05PTkU7Ci19Ci0KLXN0
YXRpYyBQeU9iamVjdCogUG9wKFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyKiBzZWxmLAotICAgICAg
ICAgICAgICAgICAgICAgUHlPYmplY3QqIGFyZ3MpIHsKLSAgUHlfc3NpemVfdCBpbmRleCA9IC0x
OwotICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuIiwgJmluZGV4KSkgewotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0gIFB5T2JqZWN0KiBpdGVtID0gSXRlbShzZWxmLCBpbmRleCk7Ci0g
IGlmIChpdGVtID09IE5VTEwpIHsKLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW5kZXhFcnJvciwK
LSAgICAgICAgICAgICAgICAgImxpc3QgaW5kZXggKCV6ZCkgb3V0IG9mIHJhbmdlIiwKLSAgICAg
ICAgICAgICAgICAgaW5kZXgpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGlmIChBc3NpZ25J
dGVtKHNlbGYsIGluZGV4LCBOVUxMKSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBy
ZXR1cm4gaXRlbTsKLX0KLQotLy8gVGhlIHByaXZhdGUgY29uc3RydWN0b3Igb2YgUmVwZWF0ZWRT
Y2FsYXJDb250YWluZXIgb2JqZWN0cy4KLVB5T2JqZWN0ICpOZXdDb250YWluZXIoCi0gICAgQ01l
c3NhZ2UqIHBhcmVudCwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBwYXJlbnRfZmllbGRfZGVzY3Jp
cHRvcikgewotICBpZiAoIUNoZWNrRmllbGRCZWxvbmdzVG9NZXNzYWdlKHBhcmVudF9maWVsZF9k
ZXNjcmlwdG9yLCBwYXJlbnQtPm1lc3NhZ2UpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQot
ICBSZXBlYXRlZFNjYWxhckNvbnRhaW5lciogc2VsZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVwZWF0
ZWRTY2FsYXJDb250YWluZXIqPigKLSAgICAgIFB5VHlwZV9HZW5lcmljQWxsb2MoJlJlcGVhdGVk
U2NhbGFyQ29udGFpbmVyX1R5cGUsIDApKTsKLSAgaWYgKHNlbGYgPT0gTlVMTCkgewotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0KLSAgc2VsZi0+bWVzc2FnZSA9IHBhcmVudC0+bWVzc2FnZTsKLSAg
c2VsZi0+cGFyZW50ID0gcGFyZW50OwotICBzZWxmLT5wYXJlbnRfZmllbGRfZGVzY3JpcHRvciA9
IHBhcmVudF9maWVsZF9kZXNjcmlwdG9yOwotICBzZWxmLT5vd25lciA9IHBhcmVudC0+b3duZXI7
Ci0KLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihzZWxmKTsKLX0KLQotLy8g
SW5pdGlhbGl6ZXMgdGhlIHVuZGVybHlpbmcgTWVzc2FnZSBvYmplY3Qgb2YgInRvIiBzbyBpdCBi
ZWNvbWVzIGEgbmV3IHBhcmVudAotLy8gcmVwZWF0ZWQgc2NhbGFyLCBhbmQgY29waWVzIGFsbCB0
aGUgdmFsdWVzIGZyb20gImZyb20iIHRvIGl0LiBBIGNoaWxkIHNjYWxhcgotLy8gY29udGFpbmVy
IGNhbiBiZSByZWxlYXNlZCBieSBwYXNzaW5nIGl0IGFzIGJvdGggZnJvbSBhbmQgdG8gKGUuZy4g
bWFraW5nIGl0Ci0vLyB0aGUgcmVjaXBpZW50IG9mIHRoZSBuZXcgcGFyZW50IG1lc3NhZ2UgYW5k
IGNvcHlpbmcgdGhlIHZhbHVlcyBmcm9tIGl0c2VsZikuCi1zdGF0aWMgaW50IEluaXRpYWxpemVB
bmRDb3B5VG9QYXJlbnRDb250YWluZXIoCi0gICAgUmVwZWF0ZWRTY2FsYXJDb250YWluZXIqIGZy
b20sCi0gICAgUmVwZWF0ZWRTY2FsYXJDb250YWluZXIqIHRvKSB7Ci0gIFNjb3BlZFB5T2JqZWN0
UHRyIGZ1bGxfc2xpY2UoUHlTbGljZV9OZXcoTlVMTCwgTlVMTCwgTlVMTCkpOwotICBpZiAoZnVs
bF9zbGljZSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIFNjb3BlZFB5T2JqZWN0
UHRyIHZhbHVlcyhTdWJzY3JpcHQoZnJvbSwgZnVsbF9zbGljZS5nZXQoKSkpOwotICBpZiAodmFs
dWVzID09IE5VTEwpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgTWVzc2FnZSogbmV3X21lc3Nh
Z2UgPSBmcm9tLT5tZXNzYWdlLT5OZXcoKTsKLSAgdG8tPnBhcmVudCA9IE5VTEw7Ci0gIHRvLT5w
YXJlbnRfZmllbGRfZGVzY3JpcHRvciA9IGZyb20tPnBhcmVudF9maWVsZF9kZXNjcmlwdG9yOwot
ICB0by0+bWVzc2FnZSA9IG5ld19tZXNzYWdlOwotICB0by0+b3duZXIucmVzZXQobmV3X21lc3Nh
Z2UpOwotICBpZiAoSW50ZXJuYWxBc3NpZ25SZXBlYXRlZEZpZWxkKHRvLCB2YWx1ZXMuZ2V0KCkp
IDwgMCkgewotICAgIHJldHVybiAtMTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotaW50IFJlbGVh
c2UoUmVwZWF0ZWRTY2FsYXJDb250YWluZXIqIHNlbGYpIHsKLSAgcmV0dXJuIEluaXRpYWxpemVB
bmRDb3B5VG9QYXJlbnRDb250YWluZXIoc2VsZiwgc2VsZik7Ci19Ci0KLVB5T2JqZWN0KiBEZWVw
Q29weShSZXBlYXRlZFNjYWxhckNvbnRhaW5lciogc2VsZiwgUHlPYmplY3QqIGFyZykgewotICBS
ZXBlYXRlZFNjYWxhckNvbnRhaW5lciogY2xvbmUgPSByZWludGVycHJldF9jYXN0PFJlcGVhdGVk
U2NhbGFyQ29udGFpbmVyKj4oCi0gICAgICBQeVR5cGVfR2VuZXJpY0FsbG9jKCZSZXBlYXRlZFNj
YWxhckNvbnRhaW5lcl9UeXBlLCAwKSk7Ci0gIGlmIChjbG9uZSA9PSBOVUxMKSB7Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoSW5pdGlhbGl6ZUFuZENvcHlUb1BhcmVudENvbnRhaW5l
cihzZWxmLCBjbG9uZSkgPCAwKSB7Ci0gICAgUHlfREVDUkVGKGNsb25lKTsKLSAgICByZXR1cm4g
TlVMTDsKLSAgfQotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQeU9iamVjdCo+KGNsb25lKTsK
LX0KLQotc3RhdGljIHZvaWQgRGVhbGxvYyhSZXBlYXRlZFNjYWxhckNvbnRhaW5lciogc2VsZikg
ewotICBzZWxmLT5vd25lci5yZXNldCgpOwotICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHJlaW50
ZXJwcmV0X2Nhc3Q8UHlPYmplY3QqPihzZWxmKSk7Ci19Ci0KLXZvaWQgU2V0T3duZXIoUmVwZWF0
ZWRTY2FsYXJDb250YWluZXIqIHNlbGYsCi0gICAgICAgICAgICAgIGNvbnN0IHNoYXJlZF9wdHI8
TWVzc2FnZT4mIG5ld19vd25lcikgewotICBzZWxmLT5vd25lciA9IG5ld19vd25lcjsKLX0KLQot
c3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIFNxTWV0aG9kcyA9IHsKLSAgKGxlbmZ1bmMpTGVuLCAg
ICAgICAgICAgLyogc3FfbGVuZ3RoICovCi0gIDAsIC8qIHNxX2NvbmNhdCAqLwotICAwLCAvKiBz
cV9yZXBlYXQgKi8KLSAgKHNzaXplYXJnZnVuYylJdGVtLCAvKiBzcV9pdGVtICovCi0gIDAsIC8q
IHNxX3NsaWNlICovCi0gIChzc2l6ZW9iamFyZ3Byb2MpQXNzaWduSXRlbSAvKiBzcV9hc3NfaXRl
bSAqLwotfTsKLQotc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgTXBNZXRob2RzID0gewotICAobGVu
ZnVuYylMZW4sICAgICAgICAgICAgICAgLyogbXBfbGVuZ3RoICovCi0gIChiaW5hcnlmdW5jKVN1
YnNjcmlwdCwgICAgICAvKiBtcF9zdWJzY3JpcHQgKi8KLSAgKG9iam9iamFyZ3Byb2MpQXNzU3Vi
c2NyaXB0LCAvKiBtcF9hc3Nfc3Vic2NyaXB0ICovCi19OwotCi1zdGF0aWMgUHlNZXRob2REZWYg
TWV0aG9kc1tdID0gewotICB7ICJfX2RlZXBjb3B5X18iLCAoUHlDRnVuY3Rpb24pRGVlcENvcHks
IE1FVEhfVkFSQVJHUywKLSAgICAiTWFrZXMgYSBkZWVwIGNvcHkgb2YgdGhlIGNsYXNzLiIgfSwK
LSAgeyAiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilSZWR1Y2UsIE1FVEhfTk9BUkdTLAotICAg
ICJPdXRwdXRzIHBpY2tsYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVwZWF0ZWQgZmllbGQu
IiB9LAotICB7ICJhcHBlbmQiLCAoUHlDRnVuY3Rpb24pQXBwZW5kLCBNRVRIX08sCi0gICAgIkFw
cGVuZHMgYW4gb2JqZWN0IHRvIHRoZSByZXBlYXRlZCBjb250YWluZXIuIiB9LAotICB7ICJleHRl
bmQiLCAoUHlDRnVuY3Rpb24pRXh0ZW5kLCBNRVRIX08sCi0gICAgIkFwcGVuZHMgb2JqZWN0cyB0
byB0aGUgcmVwZWF0ZWQgY29udGFpbmVyLiIgfSwKLSAgeyAiaW5zZXJ0IiwgKFB5Q0Z1bmN0aW9u
KUluc2VydCwgTUVUSF9WQVJBUkdTLAotICAgICJBcHBlbmRzIG9iamVjdHMgdG8gdGhlIHJlcGVh
dGVkIGNvbnRhaW5lci4iIH0sCi0gIHsgInBvcCIsIChQeUNGdW5jdGlvbilQb3AsIE1FVEhfVkFS
QVJHUywKLSAgICAiUmVtb3ZlcyBhbiBvYmplY3QgZnJvbSB0aGUgcmVwZWF0ZWQgY29udGFpbmVy
IGFuZCByZXR1cm5zIGl0LiIgfSwKLSAgeyAicmVtb3ZlIiwgKFB5Q0Z1bmN0aW9uKVJlbW92ZSwg
TUVUSF9PLAotICAgICJSZW1vdmVzIGFuIG9iamVjdCBmcm9tIHRoZSByZXBlYXRlZCBjb250YWlu
ZXIuIiB9LAotICB7ICJzb3J0IiwgKFB5Q0Z1bmN0aW9uKVNvcnQsIE1FVEhfVkFSQVJHUyB8IE1F
VEhfS0VZV09SRFMsCi0gICAgIlNvcnRzIHRoZSByZXBlYXRlZCBjb250YWluZXIuIn0sCi0gIHsg
TlVMTCwgTlVMTCB9Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcmVwZWF0ZWRfc2NhbGFyX2NvbnRh
aW5lcgotCi1QeVR5cGVPYmplY3QgUmVwZWF0ZWRTY2FsYXJDb250YWluZXJfVHlwZSA9IHsKLSAg
UHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKLSAgRlVMTF9NT0RVTEVfTkFN
RSAiLlJlcGVhdGVkU2NhbGFyQ29udGFpbmVyIiwgIC8vIHRwX25hbWUKLSAgc2l6ZW9mKFJlcGVh
dGVkU2NhbGFyQ29udGFpbmVyKSwgICAgIC8vIHRwX2Jhc2ljc2l6ZQotICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2l0ZW1zaXplCi0gIChkZXN0cnVjdG9yKXJl
cGVhdGVkX3NjYWxhcl9jb250YWluZXI6OkRlYWxsb2MsICAvLyAgdHBfZGVhbGxvYwotICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX3ByaW50Ci0gIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfZ2V0YXR0cgotICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX3NldGF0dHIKLSAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICB0cF9jb21wYXJlCi0gIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgdHBfcmVwcgotICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gIHRwX2FzX251bWJlcgotICAmcmVwZWF0ZWRfc2NhbGFyX2Nv
bnRhaW5lcjo6U3FNZXRob2RzLCAgIC8vICB0cF9hc19zZXF1ZW5jZQotICAmcmVwZWF0ZWRfc2Nh
bGFyX2NvbnRhaW5lcjo6TXBNZXRob2RzLCAgIC8vICB0cF9hc19tYXBwaW5nCi0gIFB5T2JqZWN0
X0hhc2hOb3RJbXBsZW1lbnRlZCwgICAgICAgICAvLyAgdHBfaGFzaAotICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHRwX2NhbGwKLSAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICB0cF9zdHIKLSAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICB0cF9nZXRhdHRybwotICAwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gIHRwX3NldGF0dHJvCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgdHBfYXNfYnVmZmVyCi0gIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAg
ICAgICAgICAgICAvLyAgdHBfZmxhZ3MKLSAgIkEgUmVwZWF0ZWQgc2NhbGFyIGNvbnRhaW5lciIs
ICAgICAgIC8vICB0cF9kb2MKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vICB0cF90cmF2ZXJzZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gIHRwX2NsZWFyCi0gIChyaWNoY21wZnVuYylyZXBlYXRlZF9zY2FsYXJfY29udGFpbmVyOjpS
aWNoQ29tcGFyZSwgIC8vICB0cF9yaWNoY29tcGFyZQotICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gIHRwX3dlYWtsaXN0b2Zmc2V0Ci0gIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgdHBfaXRlcgotICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gIHRwX2l0ZXJuZXh0Ci0gIHJlcGVhdGVkX3NjYWxhcl9jb250YWlu
ZXI6Ok1ldGhvZHMsICAgICAgLy8gIHRwX21ldGhvZHMKLSAgMCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICB0cF9tZW1iZXJzCi0gIDAsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgdHBfZ2V0c2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgdHBfYmFzZQotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gIHRwX2RpY3QKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vICB0cF9kZXNjcl9nZXQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vICB0cF9kZXNjcl9zZXQKLSAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vICB0cF9kaWN0b2Zmc2V0Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgdHBfaW5pdAotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHB5dGhvbgotfSAgLy8gbmFtZXNw
YWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9n
b29nbGUvcHJvdG9idWYvcHlleHQvcmVwZWF0ZWRfc2NhbGFyX2NvbnRhaW5lci5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24v
Z29vZ2xlL3Byb3RvYnVmL3B5ZXh0L3JlcGVhdGVkX3NjYWxhcl9jb250YWluZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1ZTYyMWM5YmY3MTNmNDk1OGNkYTkwMDgzMzdlZWYx
MzkyNzQxNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5
dGhvbi9nb29nbGUvcHJvdG9idWYvcHlleHQvcmVwZWF0ZWRfc2NhbGFyX2NvbnRhaW5lci5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0vLyBBdXRob3I6IGFudXJhYWdAZ29vZ2xlLmNvbSAoQW51cmFhZyBBZ3Jhd2Fs
KQotLy8gQXV0aG9yOiB0aWJlbGxAZ29vZ2xlLmNvbSAoSm9oYW4gVGliZWxsKQotCi0jaWZuZGVm
IEdPT0dMRV9QUk9UT0JVRl9QWVRIT05fQ1BQX1JFUEVBVEVEX1NDQUxBUl9DT05UQUlORVJfSF9f
Ci0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9QWVRIT05fQ1BQX1JFUEVBVEVEX1NDQUxBUl9DT05U
QUlORVJfSF9fCi0KLSNpbmNsdWRlIDxQeXRob24uaD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNp
Zm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFy
ZWRfcHRyLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotY2xhc3Mg
TWVzc2FnZTsKLQotI2lmZGVmIF9TSEFSRURfUFRSX0gKLXVzaW5nIHN0ZDo6c2hhcmVkX3B0cjsK
LSNlbHNlCi11c2luZyBpbnRlcm5hbDo6c2hhcmVkX3B0cjsKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
cHl0aG9uIHsKLQotc3RydWN0IENNZXNzYWdlOwotCi10eXBlZGVmIHN0cnVjdCBSZXBlYXRlZFNj
YWxhckNvbnRhaW5lciB7Ci0gIFB5T2JqZWN0X0hFQUQ7Ci0KLSAgLy8gVGhpcyBpcyB0aGUgdG9w
LWxldmVsIEMrKyBNZXNzYWdlIG9iamVjdCB0aGF0IG93bnMgdGhlIHdob2xlCi0gIC8vIHByb3Rv
IHRyZWUuICBFdmVyeSBQeXRob24gUmVwZWF0ZWRTY2FsYXJDb250YWluZXIgaG9sZHMgYQotICAv
LyByZWZlcmVuY2UgdG8gaXQgaW4gb3JkZXIgdG8ga2VlcCBpdCBhbGl2ZSBhcyBsb25nIGFzIHRo
ZXJlJ3MgYQotICAvLyBQeXRob24gb2JqZWN0IHRoYXQgcmVmZXJlbmNlcyBhbnkgcGFydCBvZiB0
aGUgdHJlZS4KLSAgc2hhcmVkX3B0cjxNZXNzYWdlPiBvd25lcjsKLQotICAvLyBQb2ludGVyIHRv
IHRoZSBDKysgTWVzc2FnZSB0aGF0IGNvbnRhaW5zIHRoaXMgY29udGFpbmVyLiAgVGhlCi0gIC8v
IFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyIGRvZXMgbm90IG93biB0aGlzIHBvaW50ZXIuCi0gIE1l
c3NhZ2UqIG1lc3NhZ2U7Ci0KLSAgLy8gV2VhayByZWZlcmVuY2UgdG8gYSBwYXJlbnQgQ01lc3Nh
Z2Ugb2JqZWN0IChpLmUuIG1heSBiZSBOVUxMLikKLSAgLy8KLSAgLy8gVXNlZCB0byBtYWtlIHN1
cmUgYWxsIGFuY2VzdG9ycyBhcmUgYWxzbyBtdXRhYmxlIHdoZW4gZmlyc3QKLSAgLy8gbW9kaWZ5
aW5nIHRoZSBjb250YWluZXIuCi0gIENNZXNzYWdlKiBwYXJlbnQ7Ci0KLSAgLy8gUG9pbnRlciB0
byB0aGUgcGFyZW50J3MgZGVzY3JpcHRvciB0aGF0IGRlc2NyaWJlcyB0aGlzCi0gIC8vIGZpZWxk
LiAgVXNlZCB0b2dldGhlciB3aXRoIHRoZSBwYXJlbnQncyBtZXNzYWdlIHdoZW4gbWFraW5nIGEK
LSAgLy8gZGVmYXVsdCBtZXNzYWdlIGluc3RhbmNlIG11dGFibGUuCi0gIC8vIFRoZSBwb2ludGVy
IGlzIG93bmVkIGJ5IHRoZSBnbG9iYWwgRGVzY3JpcHRvclBvb2wuCi0gIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogcGFyZW50X2ZpZWxkX2Rlc2NyaXB0b3I7Ci19IFJlcGVhdGVkU2NhbGFyQ29udGFp
bmVyOwotCi1leHRlcm4gUHlUeXBlT2JqZWN0IFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyX1R5cGU7
Ci0KLW5hbWVzcGFjZSByZXBlYXRlZF9zY2FsYXJfY29udGFpbmVyIHsKLQotLy8gQnVpbGRzIGEg
UmVwZWF0ZWRTY2FsYXJDb250YWluZXIgb2JqZWN0LCBmcm9tIGEgcGFyZW50IG1lc3NhZ2UgYW5k
IGEKLS8vIGZpZWxkIGRlc2NyaXB0b3IuCi1leHRlcm4gUHlPYmplY3QgKk5ld0NvbnRhaW5lcigK
LSAgICBDTWVzc2FnZSogcGFyZW50LCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHBhcmVudF9maWVs
ZF9kZXNjcmlwdG9yKTsKLQotLy8gQXBwZW5kcyB0aGUgc2NhbGFyICdpdGVtJyB0byB0aGUgZW5k
IG9mIHRoZSBjb250YWluZXIgJ3NlbGYnLgotLy8KLS8vIFJldHVybnMgTm9uZSBpZiBzdWNjZXNz
ZnVsOyByZXR1cm5zIE5VTEwgYW5kIHNldHMgYW4gZXhjZXB0aW9uIGlmCi0vLyB1bnN1Y2Nlc3Nm
dWwuCi1QeU9iamVjdCogQXBwZW5kKFJlcGVhdGVkU2NhbGFyQ29udGFpbmVyKiBzZWxmLCBQeU9i
amVjdCogaXRlbSk7Ci0KLS8vIFJlbGVhc2VzIHRoZSBtZXNzYWdlcyBpbiB0aGUgY29udGFpbmVy
IHRvIGEgbmV3IG1lc3NhZ2UuCi0vLwotLy8gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZh
aWx1cmUuCi1pbnQgUmVsZWFzZShSZXBlYXRlZFNjYWxhckNvbnRhaW5lciogc2VsZik7Ci0KLS8v
IEFwcGVuZHMgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgaW5wdXQgaXRlcmF0b3IgdG8gdGhlIGNv
bnRhaW5lci4KLS8vCi0vLyBSZXR1cm5zIE5vbmUgaWYgc3VjY2Vzc2Z1bDsgcmV0dXJucyBOVUxM
IGFuZCBzZXRzIGFuIGV4Y2VwdGlvbiBpZgotLy8gdW5zdWNjZXNzZnVsLgotUHlPYmplY3QqIEV4
dGVuZChSZXBlYXRlZFNjYWxhckNvbnRhaW5lciogc2VsZiwgUHlPYmplY3QqIHZhbHVlKTsKLQot
Ly8gU2V0IHRoZSBvd25lciBmaWVsZCBvZiBzZWxmIGFuZCBhbnkgY2hpbGRyZW4gb2Ygc2VsZi4K
LXZvaWQgU2V0T3duZXIoUmVwZWF0ZWRTY2FsYXJDb250YWluZXIqIHNlbGYsCi0gICAgICAgICAg
ICAgIGNvbnN0IHNoYXJlZF9wdHI8TWVzc2FnZT4mIG5ld19vd25lcik7Ci0KLX0gIC8vIG5hbWVz
cGFjZSByZXBlYXRlZF9zY2FsYXJfY29udGFpbmVyCi19ICAvLyBuYW1lc3BhY2UgcHl0aG9uCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlm
ICAvLyBHT09HTEVfUFJPVE9CVUZfUFlUSE9OX0NQUF9SRVBFQVRFRF9TQ0FMQVJfQ09OVEFJTkVS
X0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L3Njb3BlZF9weW9i
amVjdF9wdHIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9weWV4dC9zY29wZWRfcHlvYmplY3Rf
cHRyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMjhjZDRjNjE4MmM5YTFmYmYz
YTJjNTdlNjUyOTJmNDk0OGNkZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0L3Njb3BlZF9weW9iamVjdF9w
dHIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IHRpYmVsbEBnb29nbGUuY29tIChKb2hhbiBUaWJl
bGwpCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1BZVEhPTl9DUFBfU0NPUEVEX1BZT0JKRUNU
X1BUUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1BZVEhPTl9DUFBfU0NPUEVEX1BZT0JK
RUNUX1BUUl9IX18KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4K
LQotI2luY2x1ZGUgPFB5dGhvbi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLWNsYXNzIFNjb3Bl
ZFB5T2JqZWN0UHRyIHsKLSBwdWJsaWM6Ci0gIC8vIENvbnN0cnVjdG9yLiAgRGVmYXVsdHMgdG8g
aW5pdGlhbGl6aW5nIHdpdGggTlVMTC4KLSAgLy8gVGhlcmUgaXMgbm8gd2F5IHRvIGNyZWF0ZSBh
biB1bmluaXRpYWxpemVkIFNjb3BlZFB5T2JqZWN0UHRyLgotICBleHBsaWNpdCBTY29wZWRQeU9i
amVjdFB0cihQeU9iamVjdCogcCA9IE5VTEwpIDogcHRyXyhwKSB7IH0KLQotICAvLyBEZXN0cnVj
dG9yLiAgSWYgdGhlcmUgaXMgYSBQeU9iamVjdCBvYmplY3QsIGRlbGV0ZSBpdC4KLSAgflNjb3Bl
ZFB5T2JqZWN0UHRyKCkgewotICAgIFB5X1hERUNSRUYocHRyXyk7Ci0gIH0KLQotICAvLyBSZXNl
dC4gIERlbGV0ZXMgdGhlIGN1cnJlbnQgb3duZWQgb2JqZWN0LCBpZiBhbnkuCi0gIC8vIFRoZW4g
dGFrZXMgb3duZXJzaGlwIG9mIGEgbmV3IG9iamVjdCwgaWYgZ2l2ZW4uCi0gIC8vIFRoaXMgZnVu
Y3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHJlZmVyZW5jZSB0aGF0IHlvdSBvd24uCi0gIC8v
ICAgdGhpcy0+cmVzZXQodGhpcy0+Z2V0KCkpIGlzIHdyb25nIQotICAvLyAgIHRoaXMtPnJlc2V0
KHRoaXMtPnJlbGVhc2UoKSkgaXMgT0suCi0gIFB5T2JqZWN0KiByZXNldChQeU9iamVjdCogcCA9
IE5VTEwpIHsKLSAgICBQeV9YREVDUkVGKHB0cl8pOwotICAgIHB0cl8gPSBwOwotICAgIHJldHVy
biBwdHJfOwotICB9Ci0KLSAgLy8gUmVsZWFzZXMgb3duZXJzaGlwIG9mIHRoZSBvYmplY3QuCi0g
IC8vIFRoZSBjYWxsZXIgbm93IG93bnMgdGhlIHJldHVybmVkIHJlZmVyZW5jZS4KLSAgUHlPYmpl
Y3QqIHJlbGVhc2UoKSB7Ci0gICAgUHlPYmplY3QqIHAgPSBwdHJfOwotICAgIHB0cl8gPSBOVUxM
OwotICAgIHJldHVybiBwOwotICB9Ci0KLSAgUHlPYmplY3QqIG9wZXJhdG9yLT4oKSBjb25zdCAg
ewotICAgIGFzc2VydChwdHJfICE9IE5VTEwpOwotICAgIHJldHVybiBwdHJfOwotICB9Ci0KLSAg
UHlPYmplY3QqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHB0cl87IH0KLQotICBQeV9zc2l6ZV90IHJl
ZmNudCgpIGNvbnN0IHsgcmV0dXJuIFB5X1JFRkNOVChwdHJfKTsgfQotCi0gIHZvaWQgaW5jKCkg
Y29uc3QgeyBQeV9JTkNSRUYocHRyXyk7IH0KLQotICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4K
LSAgLy8gVGhlc2UgcmV0dXJuIHdoZXRoZXIgYSBTY29wZWRQeU9iamVjdFB0ciBhbmQgYSByYXcg
cG9pbnRlcgotICAvLyByZWZlciB0byB0aGUgc2FtZSBvYmplY3QsIG5vdCBqdXN0IHRvIHR3byBk
aWZmZXJlbnQgYnV0IGVxdWFsCi0gIC8vIG9iamVjdHMuCi0gIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQeU9iamVjdCogcCkgY29uc3QgeyByZXR1cm4gcHRyXyA9PSBwOyB9Ci0gIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBQeU9iamVjdCogcCkgY29uc3QgeyByZXR1cm4gcHRyXyAhPSBwOyB9Ci0KLSBw
cml2YXRlOgotICBQeU9iamVjdCogcHRyXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05T
VFJVQ1RPUlMoU2NvcGVkUHlPYmplY3RQdHIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2ds
ZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfUFlUSE9OX0NQUF9TQ09QRURfUFlPQkpFQ1Rf
UFRSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb24ucHkg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMGM3NTcyNjRmNDQwZmRjYjU5ZTM2ZjFjYmZjNTk2ZmZkYTUyNjAzYi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUv
cHJvdG9idWYvcmVmbGVjdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0j
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSMgVGhpcyBjb2RlIGlzIG1lYW50IHRvIHdvcmsgb24gUHl0aG9uIDIuNCBhbmQgYWJv
dmUgb25seS4KLQotIiIiQ29udGFpbnMgYSBtZXRhY2xhc3MgYW5kIGhlbHBlciBmdW5jdGlvbnMg
dXNlZCB0byBjcmVhdGUKLXByb3RvY29sIG1lc3NhZ2UgY2xhc3NlcyBmcm9tIERlc2NyaXB0b3Ig
b2JqZWN0cyBhdCBydW50aW1lLgotCi1SZWNhbGwgdGhhdCBhIG1ldGFjbGFzcyBpcyB0aGUgInR5
cGUiIG9mIGEgY2xhc3MuCi0oQSBjbGFzcyBpcyB0byBhIG1ldGFjbGFzcyB3aGF0IGFuIGluc3Rh
bmNlIGlzIHRvIGEgY2xhc3MuKQotCi1JbiB0aGlzIGNhc2UsIHdlIHVzZSB0aGUgR2VuZXJhdGVk
UHJvdG9jb2xNZXNzYWdlVHlwZSBtZXRhY2xhc3MKLXRvIGluamVjdCBhbGwgdGhlIHVzZWZ1bCBm
dW5jdGlvbmFsaXR5IGludG8gdGhlIGNsYXNzZXMKLW91dHB1dCBieSB0aGUgcHJvdG9jb2wgY29t
cGlsZXIgYXQgY29tcGlsZS10aW1lLgotCi1UaGUgdXBzaG90IG9mIGFsbCB0aGlzIGlzIHRoYXQg
dGhlIHJlYWwgaW1wbGVtZW50YXRpb24KLWRldGFpbHMgZm9yIEFMTCBwdXJlLVB5dGhvbiBwcm90
b2NvbCBidWZmZXJzIGFyZSAqaGVyZSBpbgotdGhpcyBmaWxlKi4KLSIiIgotCi1fX2F1dGhvcl9f
ID0gJ3JvYmluc29uQGdvb2dsZS5jb20gKFdpbGwgUm9iaW5zb24pJwotCi0KLWZyb20gZ29vZ2xl
LnByb3RvYnVmLmludGVybmFsIGltcG9ydCBhcGlfaW1wbGVtZW50YXRpb24KLWZyb20gZ29vZ2xl
LnByb3RvYnVmIGltcG9ydCBtZXNzYWdlCi0KLQotaWYgYXBpX2ltcGxlbWVudGF0aW9uLlR5cGUo
KSA9PSAnY3BwJzoKLSAgZnJvbSBnb29nbGUucHJvdG9idWYucHlleHQgaW1wb3J0IGNwcF9tZXNz
YWdlIGFzIG1lc3NhZ2VfaW1wbAotZWxzZToKLSAgZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJu
YWwgaW1wb3J0IHB5dGhvbl9tZXNzYWdlIGFzIG1lc3NhZ2VfaW1wbAotCi0jIFRoZSB0eXBlIG9m
IGFsbCBNZXNzYWdlIGNsYXNzZXMuCi0jIFBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuCi0j
Ci0jIFVzZWQgYnkgZ2VuZXJhdGVkIGZpbGVzLCBidXQgY2xpZW50cyBjYW4gYWxzbyB1c2UgaXQg
YXQgcnVudGltZToKLSMgICBteWRlc2NyaXB0b3IgPSBwb29sLkZpbmREZXNjcmlwdG9yKC4uLi4u
KQotIyAgIGNsYXNzIE15UHJvdG9DbGFzcyhNZXNzYWdlKToKLSMgICAgIF9fbWV0YWNsYXNzX18g
PSBHZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBlCi0jICAgICBERVNDUklQVE9SID0gbXlkZXNj
cmlwdG9yCi1HZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBlID0gbWVzc2FnZV9pbXBsLkdlbmVy
YXRlZFByb3RvY29sTWVzc2FnZVR5cGUKLQotCi1kZWYgUGFyc2VNZXNzYWdlKGRlc2NyaXB0b3Is
IGJ5dGVfc3RyKToKLSAgIiIiR2VuZXJhdGUgYSBuZXcgTWVzc2FnZSBpbnN0YW5jZSBmcm9tIHRo
aXMgRGVzY3JpcHRvciBhbmQgYSBieXRlIHN0cmluZy4KLQotICBBcmdzOgotICAgIGRlc2NyaXB0
b3I6IFByb3RvYnVmIERlc2NyaXB0b3Igb2JqZWN0Ci0gICAgYnl0ZV9zdHI6IFNlcmlhbGl6ZWQg
cHJvdG9jb2wgYnVmZmVyIGJ5dGUgc3RyaW5nCi0KLSAgUmV0dXJuczoKLSAgICBOZXdseSBjcmVh
dGVkIHByb3RvYnVmIE1lc3NhZ2Ugb2JqZWN0LgotICAiIiIKLSAgcmVzdWx0X2NsYXNzID0gTWFr
ZUNsYXNzKGRlc2NyaXB0b3IpCi0gIG5ld19tc2cgPSByZXN1bHRfY2xhc3MoKQotICBuZXdfbXNn
LlBhcnNlRnJvbVN0cmluZyhieXRlX3N0cikKLSAgcmV0dXJuIG5ld19tc2cKLQotCi1kZWYgTWFr
ZUNsYXNzKGRlc2NyaXB0b3IpOgotICAiIiJDb25zdHJ1Y3QgYSBjbGFzcyBvYmplY3QgZm9yIGEg
cHJvdG9idWYgZGVzY3JpYmVkIGJ5IGRlc2NyaXB0b3IuCi0KLSAgQ29tcG9zaXRlIGRlc2NyaXB0
b3JzIGFyZSBoYW5kbGVkIGJ5IGRlZmluaW5nIHRoZSBuZXcgY2xhc3MgYXMgYSBtZW1iZXIgb2Yg
dGhlCi0gIHBhcmVudCBjbGFzcywgcmVjdXJzaW5nIGFzIGRlZXAgYXMgbmVjZXNzYXJ5LgotICBU
aGlzIGlzIHRoZSBkeW5hbWljIGVxdWl2YWxlbnQgdG86Ci0KLSAgY2xhc3MgUGFyZW50KG1lc3Nh
Z2UuTWVzc2FnZSk6Ci0gICAgX19tZXRhY2xhc3NfXyA9IEdlbmVyYXRlZFByb3RvY29sTWVzc2Fn
ZVR5cGUKLSAgICBERVNDUklQVE9SID0gZGVzY3JpcHRvcgotICAgIGNsYXNzIENoaWxkKG1lc3Nh
Z2UuTWVzc2FnZSk6Ci0gICAgICBfX21ldGFjbGFzc19fID0gR2VuZXJhdGVkUHJvdG9jb2xNZXNz
YWdlVHlwZQotICAgICAgREVTQ1JJUFRPUiA9IGRlc2NyaXB0b3IubmVzdGVkX3R5cGVzWzBdCi0K
LSAgU2FtcGxlIHVzYWdlOgotICAgIGZpbGVfZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JfcGIyLkZp
bGVEZXNjcmlwdG9yUHJvdG8oKQotICAgIGZpbGVfZGVzY3JpcHRvci5QYXJzZUZyb21TdHJpbmco
cHJvdG8yX3N0cmluZykKLSAgICBtc2dfZGVzY3JpcHRvciA9IGRlc2NyaXB0b3IuTWFrZURlc2Ny
aXB0b3IoZmlsZV9kZXNjcmlwdG9yLm1lc3NhZ2VfdHlwZVswXSkKLSAgICBtc2dfY2xhc3MgPSBy
ZWZsZWN0aW9uLk1ha2VDbGFzcyhtc2dfZGVzY3JpcHRvcikKLSAgICBtc2cgPSBtc2dfY2xhc3Mo
KQotCi0gIEFyZ3M6Ci0gICAgZGVzY3JpcHRvcjogQSBkZXNjcmlwdG9yLkRlc2NyaXB0b3Igb2Jq
ZWN0IGRlc2NyaWJpbmcgdGhlIHByb3RvYnVmLgotICBSZXR1cm5zOgotICAgIFRoZSBNZXNzYWdl
IGNsYXNzIG9iamVjdCBkZXNjcmliZWQgYnkgdGhlIGRlc2NyaXB0b3IuCi0gICIiIgotICBhdHRy
aWJ1dGVzID0ge30KLSAgZm9yIG5hbWUsIG5lc3RlZF90eXBlIGluIGRlc2NyaXB0b3IubmVzdGVk
X3R5cGVzX2J5X25hbWUuaXRlbXMoKToKLSAgICBhdHRyaWJ1dGVzW25hbWVdID0gTWFrZUNsYXNz
KG5lc3RlZF90eXBlKQotCi0gIGF0dHJpYnV0ZXNbR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlw
ZS5fREVTQ1JJUFRPUl9LRVldID0gZGVzY3JpcHRvcgotCi0gIHJldHVybiBHZW5lcmF0ZWRQcm90
b2NvbE1lc3NhZ2VUeXBlKHN0cihkZXNjcmlwdG9yLm5hbWUpLCAobWVzc2FnZS5NZXNzYWdlLCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvc2VydmljZS5weSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9w
cm90b2J1Zi9zZXJ2aWNlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5ZTAwZGU3
MDQyNTdkOTQ1ZDg0NGJkMmI1NDQ1MTI5OGNkOWNmMTlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9zZXJ2aWNlLnB5
CisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBt
ZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiREVQUkVDQVRFRDog
IERlY2xhcmVzIHRoZSBSUEMgc2VydmljZSBpbnRlcmZhY2VzLgotCi1UaGlzIG1vZHVsZSBkZWNs
YXJlcyB0aGUgYWJzdHJhY3QgaW50ZXJmYWNlcyB1bmRlcmx5aW5nIHByb3RvMiBSUEMKLXNlcnZp
Y2VzLiAgVGhlc2UgYXJlIGludGVuZGVkIHRvIGJlIGluZGVwZW5kZW50IG9mIGFueSBwYXJ0aWN1
bGFyIFJQQwotaW1wbGVtZW50YXRpb24sIHNvIHRoYXQgcHJvdG8yIHNlcnZpY2VzIGNhbiBiZSB1
c2VkIG9uIHRvcCBvZiBhIHZhcmlldHkKLW9mIGltcGxlbWVudGF0aW9ucy4gIFN0YXJ0aW5nIHdp
dGggdmVyc2lvbiAyLjMuMCwgUlBDIGltcGxlbWVudGF0aW9ucyBzaG91bGQKLW5vdCB0cnkgdG8g
YnVpbGQgb24gdGhlc2UsIGJ1dCBzaG91bGQgaW5zdGVhZCBwcm92aWRlIGNvZGUgZ2VuZXJhdG9y
IHBsdWdpbnMKLXdoaWNoIGdlbmVyYXRlIGNvZGUgc3BlY2lmaWMgdG8gdGhlIHBhcnRpY3VsYXIg
UlBDIGltcGxlbWVudGF0aW9uLiAgVGhpcyB3YXkKLXRoZSBnZW5lcmF0ZWQgY29kZSBjYW4gYmUg
bW9yZSBhcHByb3ByaWF0ZSBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGluIHVzZQotYW5kIGNhbiBh
dm9pZCB1bm5lY2Vzc2FyeSBsYXllcnMgb2YgaW5kaXJlY3Rpb24uCi0iIiIKLQotX19hdXRob3Jf
XyA9ICdwZXRhckBnb29nbGUuY29tIChQZXRhciBQZXRyb3YpJwotCi0KLWNsYXNzIFJwY0V4Y2Vw
dGlvbihFeGNlcHRpb24pOgotICAiIiJFeGNlcHRpb24gcmFpc2VkIG9uIGZhaWxlZCBibG9ja2lu
ZyBSUEMgbWV0aG9kIGNhbGwuIiIiCi0gIHBhc3MKLQotCi1jbGFzcyBTZXJ2aWNlKG9iamVjdCk6
Ci0KLSAgIiIiQWJzdHJhY3QgYmFzZSBpbnRlcmZhY2UgZm9yIHByb3RvY29sLWJ1ZmZlci1iYXNl
ZCBSUEMgc2VydmljZXMuCi0KLSAgU2VydmljZXMgdGhlbXNlbHZlcyBhcmUgYWJzdHJhY3QgY2xh
c3NlcyAoaW1wbGVtZW50ZWQgZWl0aGVyIGJ5IHNlcnZlcnMgb3IgYXMKLSAgc3R1YnMpLCBidXQg
dGhleSBzdWJjbGFzcyB0aGlzIGJhc2UgaW50ZXJmYWNlLiBUaGUgbWV0aG9kcyBvZiB0aGlzCi0g
IGludGVyZmFjZSBjYW4gYmUgdXNlZCB0byBjYWxsIHRoZSBtZXRob2RzIG9mIHRoZSBzZXJ2aWNl
IHdpdGhvdXQga25vd2luZwotICBpdHMgZXhhY3QgdHlwZSBhdCBjb21waWxlIHRpbWUgKGFuYWxv
Z291cyB0byB0aGUgTWVzc2FnZSBpbnRlcmZhY2UpLgotICAiIiIKLQotICBkZWYgR2V0RGVzY3Jp
cHRvcigpOgotICAgICIiIlJldHJpZXZlcyB0aGlzIHNlcnZpY2UncyBkZXNjcmlwdG9yLiIiIgot
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICBkZWYgQ2FsbE1ldGhvZChzZWxmLCBt
ZXRob2RfZGVzY3JpcHRvciwgcnBjX2NvbnRyb2xsZXIsCi0gICAgICAgICAgICAgICAgIHJlcXVl
c3QsIGRvbmUpOgotICAgICIiIkNhbGxzIGEgbWV0aG9kIG9mIHRoZSBzZXJ2aWNlIHNwZWNpZmll
ZCBieSBtZXRob2RfZGVzY3JpcHRvci4KLQotICAgIElmICJkb25lIiBpcyBOb25lIHRoZW4gdGhl
IGNhbGwgaXMgYmxvY2tpbmcgYW5kIHRoZSByZXNwb25zZQotICAgIG1lc3NhZ2Ugd2lsbCBiZSBy
ZXR1cm5lZCBkaXJlY3RseS4gIE90aGVyd2lzZSB0aGUgY2FsbCBpcyBhc3luY2hyb25vdXMKLSAg
ICBhbmQgImRvbmUiIHdpbGwgbGF0ZXIgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3BvbnNlIHZhbHVl
LgotCi0gICAgSW4gdGhlIGJsb2NraW5nIGNhc2UsIFJwY0V4Y2VwdGlvbiB3aWxsIGJlIHJhaXNl
ZCBvbiBlcnJvci4KLQotICAgIFByZWNvbmRpdGlvbnM6Ci0gICAgKiBtZXRob2RfZGVzY3JpcHRv
ci5zZXJ2aWNlID09IEdldERlc2NyaXB0b3IKLSAgICAqIHJlcXVlc3QgaXMgb2YgdGhlIGV4YWN0
IHNhbWUgY2xhc3NlcyBhcyByZXR1cm5lZCBieQotICAgICAgR2V0UmVxdWVzdENsYXNzKG1ldGhv
ZCkuCi0gICAgKiBBZnRlciB0aGUgY2FsbCBoYXMgc3RhcnRlZCwgdGhlIHJlcXVlc3QgbXVzdCBu
b3QgYmUgbW9kaWZpZWQuCi0gICAgKiAicnBjX2NvbnRyb2xsZXIiIGlzIG9mIHRoZSBjb3JyZWN0
IHR5cGUgZm9yIHRoZSBSUEMgaW1wbGVtZW50YXRpb24gYmVpbmcKLSAgICAgIHVzZWQgYnkgdGhp
cyBTZXJ2aWNlLiAgRm9yIHN0dWJzLCB0aGUgImNvcnJlY3QgdHlwZSIgZGVwZW5kcyBvbiB0aGUK
LSAgICAgIFJwY0NoYW5uZWwgd2hpY2ggdGhlIHN0dWIgaXMgdXNpbmcuCi0KLSAgICBQb3N0Y29u
ZGl0aW9uczoKLSAgICAqICJkb25lIiB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBtZXRob2QgaXMg
Y29tcGxldGUuICBUaGlzIG1heSBiZQotICAgICAgYmVmb3JlIENhbGxNZXRob2QoKSByZXR1cm5z
IG9yIGl0IG1heSBiZSBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCi0gICAgKiBJZiB0aGUg
UlBDIGZhaWxlZCwgdGhlIHJlc3BvbnNlIHZhbHVlIHBhc3NlZCB0byAiZG9uZSIgd2lsbCBiZSBO
b25lLgotICAgICAgRnVydGhlciBkZXRhaWxzIGFib3V0IHRoZSBmYWlsdXJlIGNhbiBiZSBmb3Vu
ZCBieSBxdWVyeWluZyB0aGUKLSAgICAgIFJwY0NvbnRyb2xsZXIuCi0gICAgIiIiCi0gICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBHZXRSZXF1ZXN0Q2xhc3Moc2VsZiwgbWV0
aG9kX2Rlc2NyaXB0b3IpOgotICAgICIiIlJldHVybnMgdGhlIGNsYXNzIG9mIHRoZSByZXF1ZXN0
IG1lc3NhZ2UgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kLgotCi0gICAgQ2FsbE1ldGhvZCgpIHJl
cXVpcmVzIHRoYXQgdGhlIHJlcXVlc3QgaXMgb2YgYSBwYXJ0aWN1bGFyIHN1YmNsYXNzIG9mCi0g
ICAgTWVzc2FnZS4gR2V0UmVxdWVzdENsYXNzKCkgZ2V0cyB0aGUgZGVmYXVsdCBpbnN0YW5jZSBv
ZiB0aGlzIHJlcXVpcmVkCi0gICAgdHlwZS4KLQotICAgIEV4YW1wbGU6Ci0gICAgICBtZXRob2Qg
PSBzZXJ2aWNlLkdldERlc2NyaXB0b3IoKS5GaW5kTWV0aG9kQnlOYW1lKCJGb28iKQotICAgICAg
cmVxdWVzdCA9IHN0dWIuR2V0UmVxdWVzdENsYXNzKG1ldGhvZCkoKQotICAgICAgcmVxdWVzdC5Q
YXJzZUZyb21TdHJpbmcoaW5wdXQpCi0gICAgICBzZXJ2aWNlLkNhbGxNZXRob2QobWV0aG9kLCBy
ZXF1ZXN0LCBjYWxsYmFjaykKLSAgICAiIiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
Ci0KLSAgZGVmIEdldFJlc3BvbnNlQ2xhc3Moc2VsZiwgbWV0aG9kX2Rlc2NyaXB0b3IpOgotICAg
ICIiIlJldHVybnMgdGhlIGNsYXNzIG9mIHRoZSByZXNwb25zZSBtZXNzYWdlIGZvciB0aGUgc3Bl
Y2lmaWVkIG1ldGhvZC4KLQotICAgIFRoaXMgbWV0aG9kIGlzbid0IHJlYWxseSBuZWVkZWQsIGFz
IHRoZSBScGNDaGFubmVsJ3MgQ2FsbE1ldGhvZCBjb25zdHJ1Y3RzCi0gICAgdGhlIHJlc3BvbnNl
IHByb3RvY29sIG1lc3NhZ2UuIEl0J3MgcHJvdmlkZWQgYW55d2F5IGluIGNhc2UgaXQgaXMgdXNl
ZnVsCi0gICAgZm9yIHRoZSBjYWxsZXIgdG8ga25vdyB0aGUgcmVzcG9uc2UgdHlwZSBpbiBhZHZh
bmNlLgotICAgICIiIgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotCi1jbGFzcyBS
cGNDb250cm9sbGVyKG9iamVjdCk6Ci0KLSAgIiIiQW4gUnBjQ29udHJvbGxlciBtZWRpYXRlcyBh
IHNpbmdsZSBtZXRob2QgY2FsbC4KLQotICBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoZSBjb250
cm9sbGVyIGlzIHRvIHByb3ZpZGUgYSB3YXkgdG8gbWFuaXB1bGF0ZQotICBzZXR0aW5ncyBzcGVj
aWZpYyB0byB0aGUgUlBDIGltcGxlbWVudGF0aW9uIGFuZCB0byBmaW5kIG91dCBhYm91dCBSUEMt
bGV2ZWwKLSAgZXJyb3JzLiBUaGUgbWV0aG9kcyBwcm92aWRlZCBieSB0aGUgUnBjQ29udHJvbGxl
ciBpbnRlcmZhY2UgYXJlIGludGVuZGVkCi0gIHRvIGJlIGEgImxlYXN0IGNvbW1vbiBkZW5vbWlu
YXRvciIgc2V0IG9mIGZlYXR1cmVzIHdoaWNoIHdlIGV4cGVjdCBhbGwKLSAgaW1wbGVtZW50YXRp
b25zIHRvIHN1cHBvcnQuICBTcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgbWF5IHByb3ZpZGUgbW9y
ZQotICBhZHZhbmNlZCBmZWF0dXJlcyAoZS5nLiBkZWFkbGluZSBwcm9wYWdhdGlvbikuCi0gICIi
IgotCi0gICMgQ2xpZW50LXNpZGUgbWV0aG9kcyBiZWxvdwotCi0gIGRlZiBSZXNldChzZWxmKToK
LSAgICAiIiJSZXNldHMgdGhlIFJwY0NvbnRyb2xsZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuCi0K
LSAgICBBZnRlciB0aGUgUnBjQ29udHJvbGxlciBoYXMgYmVlbiByZXNldCwgaXQgbWF5IGJlIHJl
dXNlZCBpbgotICAgIGEgbmV3IGNhbGwuIE11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSBhbiBSUEMg
aXMgaW4gcHJvZ3Jlc3MuCi0gICAgIiIiCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgot
Ci0gIGRlZiBGYWlsZWQoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsIGZh
aWxlZC4KLQotICAgIEFmdGVyIGEgY2FsbCBoYXMgZmluaXNoZWQsIHJldHVybnMgdHJ1ZSBpZiB0
aGUgY2FsbCBmYWlsZWQuICBUaGUgcG9zc2libGUKLSAgICByZWFzb25zIGZvciBmYWlsdXJlIGRl
cGVuZCBvbiB0aGUgUlBDIGltcGxlbWVudGF0aW9uLiAgRmFpbGVkKCkgbXVzdCBub3QKLSAgICBi
ZSBjYWxsZWQgYmVmb3JlIGEgY2FsbCBoYXMgZmluaXNoZWQuICBJZiBGYWlsZWQoKSByZXR1cm5z
IHRydWUsIHRoZQotICAgIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSBtZXNzYWdlIGFyZSB1bmRl
ZmluZWQuCi0gICAgIiIiCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBF
cnJvclRleHQoc2VsZik6Ci0gICAgIiIiSWYgRmFpbGVkIGlzIHRydWUsIHJldHVybnMgYSBodW1h
bi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IuIiIiCi0gICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcgotCi0gIGRlZiBTdGFydENhbmNlbChzZWxmKToKLSAgICAiIiJJbml0aWF0
ZSBjYW5jZWxsYXRpb24uCi0KLSAgICBBZHZpc2VzIHRoZSBSUEMgc3lzdGVtIHRoYXQgdGhlIGNh
bGxlciBkZXNpcmVzIHRoYXQgdGhlIFJQQyBjYWxsIGJlCi0gICAgY2FuY2VsZWQuICBUaGUgUlBD
IHN5c3RlbSBtYXkgY2FuY2VsIGl0IGltbWVkaWF0ZWx5LCBtYXkgd2FpdCBhd2hpbGUgYW5kCi0g
ICAgdGhlbiBjYW5jZWwgaXQsIG9yIG1heSBub3QgZXZlbiBjYW5jZWwgdGhlIGNhbGwgYXQgYWxs
LiAgSWYgdGhlIGNhbGwgaXMKLSAgICBjYW5jZWxlZCwgdGhlICJkb25lIiBjYWxsYmFjayB3aWxs
IHN0aWxsIGJlIGNhbGxlZCBhbmQgdGhlIFJwY0NvbnRyb2xsZXIKLSAgICB3aWxsIGluZGljYXRl
IHRoYXQgdGhlIGNhbGwgZmFpbGVkIGF0IHRoYXQgdGltZS4KLSAgICAiIiIKLSAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgIyBTZXJ2ZXItc2lkZSBtZXRob2RzIGJlbG93Ci0KLSAg
ZGVmIFNldEZhaWxlZChzZWxmLCByZWFzb24pOgotICAgICIiIlNldHMgYSBmYWlsdXJlIHJlYXNv
bi4KLQotICAgIENhdXNlcyBGYWlsZWQoKSB0byByZXR1cm4gdHJ1ZSBvbiB0aGUgY2xpZW50IHNp
ZGUuICAicmVhc29uIiB3aWxsIGJlCi0gICAgaW5jb3Jwb3JhdGVkIGludG8gdGhlIG1lc3NhZ2Ug
cmV0dXJuZWQgYnkgRXJyb3JUZXh0KCkuICBJZiB5b3UgZmluZAotICAgIHlvdSBuZWVkIHRvIHJl
dHVybiBtYWNoaW5lLXJlYWRhYmxlIGluZm9ybWF0aW9uIGFib3V0IGZhaWx1cmVzLCB5b3UKLSAg
ICBzaG91bGQgaW5jb3Jwb3JhdGUgaXQgaW50byB5b3VyIHJlc3BvbnNlIHByb3RvY29sIGJ1ZmZl
ciBhbmQgc2hvdWxkCi0gICAgTk9UIGNhbGwgU2V0RmFpbGVkKCkuCi0gICAgIiIiCi0gICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBJc0NhbmNlbGVkKHNlbGYpOgotICAgICIi
IkNoZWNrcyBpZiB0aGUgY2xpZW50IGNhbmNlbGxlZCB0aGUgUlBDLgotCi0gICAgSWYgdHJ1ZSwg
aW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBjYW5jZWxlZCB0aGUgUlBDLCBzbyB0aGUgc2VydmVy
IG1heQotICAgIGFzIHdlbGwgZ2l2ZSB1cCBvbiByZXBseWluZyB0byBpdC4gIFRoZSBzZXJ2ZXIg
c2hvdWxkIHN0aWxsIGNhbGwgdGhlCi0gICAgZmluYWwgImRvbmUiIGNhbGxiYWNrLgotICAgICIi
IgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICBkZWYgTm90aWZ5T25DYW5jZWwo
c2VsZiwgY2FsbGJhY2spOgotICAgICIiIlNldHMgYSBjYWxsYmFjayB0byBpbnZva2Ugb24gY2Fu
Y2VsLgotCi0gICAgQXNrcyB0aGF0IHRoZSBnaXZlbiBjYWxsYmFjayBiZSBjYWxsZWQgd2hlbiB0
aGUgUlBDIGlzIGNhbmNlbGVkLiAgVGhlCi0gICAgY2FsbGJhY2sgd2lsbCBhbHdheXMgYmUgY2Fs
bGVkIGV4YWN0bHkgb25jZS4gIElmIHRoZSBSUEMgY29tcGxldGVzIHdpdGhvdXQKLSAgICBiZWlu
ZyBjYW5jZWxlZCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNvbXBsZXRpb24u
ICBJZiB0aGUgUlBDCi0gICAgaGFzIGFscmVhZHkgYmVlbiBjYW5jZWxlZCB3aGVuIE5vdGlmeU9u
Q2FuY2VsKCkgaXMgY2FsbGVkLCB0aGUgY2FsbGJhY2sKLSAgICB3aWxsIGJlIGNhbGxlZCBpbW1l
ZGlhdGVseS4KLQotICAgIE5vdGlmeU9uQ2FuY2VsKCkgbXVzdCBiZSBjYWxsZWQgbm8gbW9yZSB0
aGFuIG9uY2UgcGVyIHJlcXVlc3QuCi0gICAgIiIiCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcgotCi0KLWNsYXNzIFJwY0NoYW5uZWwob2JqZWN0KToKLQotICAiIiJBYnN0cmFjdCBpbnRl
cmZhY2UgZm9yIGFuIFJQQyBjaGFubmVsLgotCi0gIEFuIFJwY0NoYW5uZWwgcmVwcmVzZW50cyBh
IGNvbW11bmljYXRpb24gbGluZSB0byBhIHNlcnZpY2Ugd2hpY2ggY2FuIGJlIHVzZWQKLSAgdG8g
Y2FsbCB0aGF0IHNlcnZpY2UncyBtZXRob2RzLiAgVGhlIHNlcnZpY2UgbWF5IGJlIHJ1bm5pbmcg
b24gYW5vdGhlcgotICBtYWNoaW5lLiBOb3JtYWxseSwgeW91IHNob3VsZCBub3QgdXNlIGFuIFJw
Y0NoYW5uZWwgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkCi0gIGNvbnN0cnVjdCBhIHN0dWIge0BsaW5r
IFNlcnZpY2V9IHdyYXBwaW5nIGl0LiAgRXhhbXBsZToKLQotICBFeGFtcGxlOgotICAgIFJwY0No
YW5uZWwgY2hhbm5lbCA9IHJwY0ltcGwuQ2hhbm5lbCgicmVtb3RlaG9zdC5leGFtcGxlLmNvbTox
MjM0IikKLSAgICBScGNDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBycGNJbXBsLkNvbnRyb2xsZXIo
KQotICAgIE15U2VydmljZSBzZXJ2aWNlID0gTXlTZXJ2aWNlX1N0dWIoY2hhbm5lbCkKLSAgICBz
ZXJ2aWNlLk15TWV0aG9kKGNvbnRyb2xsZXIsIHJlcXVlc3QsIGNhbGxiYWNrKQotICAiIiIKLQot
ICBkZWYgQ2FsbE1ldGhvZChzZWxmLCBtZXRob2RfZGVzY3JpcHRvciwgcnBjX2NvbnRyb2xsZXIs
Ci0gICAgICAgICAgICAgICAgIHJlcXVlc3QsIHJlc3BvbnNlX2NsYXNzLCBkb25lKToKLSAgICAi
IiJDYWxscyB0aGUgbWV0aG9kIGlkZW50aWZpZWQgYnkgdGhlIGRlc2NyaXB0b3IuCi0KLSAgICBD
YWxsIHRoZSBnaXZlbiBtZXRob2Qgb2YgdGhlIHJlbW90ZSBzZXJ2aWNlLiAgVGhlIHNpZ25hdHVy
ZSBvZiB0aGlzCi0gICAgcHJvY2VkdXJlIGxvb2tzIHRoZSBzYW1lIGFzIFNlcnZpY2UuQ2FsbE1l
dGhvZCgpLCBidXQgdGhlIHJlcXVpcmVtZW50cwotICAgIGFyZSBsZXNzIHN0cmljdCBpbiBvbmUg
aW1wb3J0YW50IHdheTogIHRoZSByZXF1ZXN0IG9iamVjdCBkb2Vzbid0IGhhdmUgdG8KLSAgICBi
ZSBvZiBhbnkgc3BlY2lmaWMgY2xhc3MgYXMgbG9uZyBhcyBpdHMgZGVzY3JpcHRvciBpcyBtZXRo
b2QuaW5wdXRfdHlwZS4KLSAgICAiIiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvc2VydmljZV9yZWZsZWN0aW9uLnB5IGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9w
eXRob24vZ29vZ2xlL3Byb3RvYnVmL3NlcnZpY2VfcmVmbGVjdGlvbi5weQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMWMzNjM2YWZlMDQ3MjZhNDkwMzcxOTBlMmUzZTY2OWVlOWIxNjA1
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9n
b29nbGUvcHJvdG9idWYvc2VydmljZV9yZWZsZWN0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEs
Mjg0ICswLDAgQEAKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9u
LgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQ29udGFpbnMgbWV0YWNsYXNzZXMgdXNlZCB0byBjcmVh
dGUgcHJvdG9jb2wgc2VydmljZSBhbmQgc2VydmljZSBzdHViCi1jbGFzc2VzIGZyb20gU2Vydmlj
ZURlc2NyaXB0b3Igb2JqZWN0cyBhdCBydW50aW1lLgotCi1UaGUgR2VuZXJhdGVkU2VydmljZVR5
cGUgYW5kIEdlbmVyYXRlZFNlcnZpY2VTdHViVHlwZSBtZXRhY2xhc3NlcyBhcmUgdXNlZCB0bwot
aW5qZWN0IGFsbCB1c2VmdWwgZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSBjbGFzc2VzIG91dHB1dCBi
eSB0aGUgcHJvdG9jb2wKLWNvbXBpbGVyIGF0IGNvbXBpbGUtdGltZS4KLSIiIgotCi1fX2F1dGhv
cl9fID0gJ3BldGFyQGdvb2dsZS5jb20gKFBldGFyIFBldHJvdiknCi0KLQotY2xhc3MgR2VuZXJh
dGVkU2VydmljZVR5cGUodHlwZSk6Ci0KLSAgIiIiTWV0YWNsYXNzIGZvciBzZXJ2aWNlIGNsYXNz
ZXMgY3JlYXRlZCBhdCBydW50aW1lIGZyb20gU2VydmljZURlc2NyaXB0b3JzLgotCi0gIEltcGxl
bWVudGF0aW9ucyBmb3IgYWxsIG1ldGhvZHMgZGVzY3JpYmVkIGluIHRoZSBTZXJ2aWNlIGNsYXNz
IGFyZSBhZGRlZCBoZXJlCi0gIGJ5IHRoaXMgY2xhc3MuIFdlIGFsc28gY3JlYXRlIHByb3BlcnRp
ZXMgdG8gYWxsb3cgZ2V0dGluZy9zZXR0aW5nIGFsbCBmaWVsZHMKLSAgaW4gdGhlIHByb3RvY29s
IG1lc3NhZ2UuCi0KLSAgVGhlIHByb3RvY29sIGNvbXBpbGVyIGN1cnJlbnRseSB1c2VzIHRoaXMg
bWV0YWNsYXNzIHRvIGNyZWF0ZSBwcm90b2NvbCBzZXJ2aWNlCi0gIGNsYXNzZXMgYXQgcnVudGlt
ZS4gQ2xpZW50cyBjYW4gYWxzbyBtYW51YWxseSBjcmVhdGUgdGhlaXIgb3duIGNsYXNzZXMgYXQK
LSAgcnVudGltZSwgYXMgaW4gdGhpcyBleGFtcGxlOgotCi0gIG15ZGVzY3JpcHRvciA9IFNlcnZp
Y2VEZXNjcmlwdG9yKC4uLi4uKQotICBjbGFzcyBNeVByb3RvU2VydmljZShzZXJ2aWNlLlNlcnZp
Y2UpOgotICAgIF9fbWV0YWNsYXNzX18gPSBHZW5lcmF0ZWRTZXJ2aWNlVHlwZQotICAgIERFU0NS
SVBUT1IgPSBteWRlc2NyaXB0b3IKLSAgbXlzZXJ2aWNlX2luc3RhbmNlID0gTXlQcm90b1NlcnZp
Y2UoKQotICAuLi4KLSAgIiIiCi0KLSAgX0RFU0NSSVBUT1JfS0VZID0gJ0RFU0NSSVBUT1InCi0K
LSAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGRpY3Rpb25hcnkpOgotICAgICIiIkNy
ZWF0ZXMgYSBtZXNzYWdlIHNlcnZpY2UgY2xhc3MuCi0KLSAgICBBcmdzOgotICAgICAgbmFtZTog
TmFtZSBvZiB0aGUgY2xhc3MgKGlnbm9yZWQsIGJ1dCByZXF1aXJlZCBieSB0aGUgbWV0YWNsYXNz
Ci0gICAgICAgIHByb3RvY29sKS4KLSAgICAgIGJhc2VzOiBCYXNlIGNsYXNzZXMgb2YgdGhlIGNs
YXNzIGJlaW5nIGNvbnN0cnVjdGVkLgotICAgICAgZGljdGlvbmFyeTogVGhlIGNsYXNzIGRpY3Rp
b25hcnkgb2YgdGhlIGNsYXNzIGJlaW5nIGNvbnN0cnVjdGVkLgotICAgICAgICBkaWN0aW9uYXJ5
W19ERVNDUklQVE9SX0tFWV0gbXVzdCBjb250YWluIGEgU2VydmljZURlc2NyaXB0b3Igb2JqZWN0
Ci0gICAgICAgIGRlc2NyaWJpbmcgdGhpcyBwcm90b2NvbCBzZXJ2aWNlIHR5cGUuCi0gICAgIiIi
Ci0gICAgIyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGlzIGNsYXNzIGRvZXNuJ3QgaGF2ZSBhIGRl
c2NyaXB0b3IuIFRoaXMgaGFwcGVucwotICAgICMgd2hlbiBhIHNlcnZpY2UgY2xhc3MgaXMgc3Vi
Y2xhc3NlZC4KLSAgICBpZiBHZW5lcmF0ZWRTZXJ2aWNlVHlwZS5fREVTQ1JJUFRPUl9LRVkgbm90
IGluIGRpY3Rpb25hcnk6Ci0gICAgICByZXR1cm4KLSAgICBkZXNjcmlwdG9yID0gZGljdGlvbmFy
eVtHZW5lcmF0ZWRTZXJ2aWNlVHlwZS5fREVTQ1JJUFRPUl9LRVldCi0gICAgc2VydmljZV9idWls
ZGVyID0gX1NlcnZpY2VCdWlsZGVyKGRlc2NyaXB0b3IpCi0gICAgc2VydmljZV9idWlsZGVyLkJ1
aWxkU2VydmljZShjbHMpCi0KLQotY2xhc3MgR2VuZXJhdGVkU2VydmljZVN0dWJUeXBlKEdlbmVy
YXRlZFNlcnZpY2VUeXBlKToKLQotICAiIiJNZXRhY2xhc3MgZm9yIHNlcnZpY2Ugc3R1YnMgY3Jl
YXRlZCBhdCBydW50aW1lIGZyb20gU2VydmljZURlc2NyaXB0b3JzLgotCi0gIFRoaXMgY2xhc3Mg
aGFzIHNpbWlsYXIgcmVzcG9uc2liaWxpdGllcyBhcyBHZW5lcmF0ZWRTZXJ2aWNlVHlwZSwgZXhj
ZXB0IHRoYXQKLSAgaXQgY3JlYXRlcyB0aGUgc2VydmljZSBzdHViIGNsYXNzZXMuCi0gICIiIgot
Ci0gIF9ERVNDUklQVE9SX0tFWSA9ICdERVNDUklQVE9SJwotCi0gIGRlZiBfX2luaXRfXyhjbHMs
IG5hbWUsIGJhc2VzLCBkaWN0aW9uYXJ5KToKLSAgICAiIiJDcmVhdGVzIGEgbWVzc2FnZSBzZXJ2
aWNlIHN0dWIgY2xhc3MuCi0KLSAgICBBcmdzOgotICAgICAgbmFtZTogTmFtZSBvZiB0aGUgY2xh
c3MgKGlnbm9yZWQsIGhlcmUpLgotICAgICAgYmFzZXM6IEJhc2UgY2xhc3NlcyBvZiB0aGUgY2xh
c3MgYmVpbmcgY29uc3RydWN0ZWQuCi0gICAgICBkaWN0aW9uYXJ5OiBUaGUgY2xhc3MgZGljdGlv
bmFyeSBvZiB0aGUgY2xhc3MgYmVpbmcgY29uc3RydWN0ZWQuCi0gICAgICAgIGRpY3Rpb25hcnlb
X0RFU0NSSVBUT1JfS0VZXSBtdXN0IGNvbnRhaW4gYSBTZXJ2aWNlRGVzY3JpcHRvciBvYmplY3QK
LSAgICAgICAgZGVzY3JpYmluZyB0aGlzIHByb3RvY29sIHNlcnZpY2UgdHlwZS4KLSAgICAiIiIK
LSAgICBzdXBlcihHZW5lcmF0ZWRTZXJ2aWNlU3R1YlR5cGUsIGNscykuX19pbml0X18obmFtZSwg
YmFzZXMsIGRpY3Rpb25hcnkpCi0gICAgIyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGlzIGNsYXNz
IGRvZXNuJ3QgaGF2ZSBhIGRlc2NyaXB0b3IuIFRoaXMgaGFwcGVucwotICAgICMgd2hlbiBhIHNl
cnZpY2Ugc3R1YiBpcyBzdWJjbGFzc2VkLgotICAgIGlmIEdlbmVyYXRlZFNlcnZpY2VTdHViVHlw
ZS5fREVTQ1JJUFRPUl9LRVkgbm90IGluIGRpY3Rpb25hcnk6Ci0gICAgICByZXR1cm4KLSAgICBk
ZXNjcmlwdG9yID0gZGljdGlvbmFyeVtHZW5lcmF0ZWRTZXJ2aWNlU3R1YlR5cGUuX0RFU0NSSVBU
T1JfS0VZXQotICAgIHNlcnZpY2Vfc3R1Yl9idWlsZGVyID0gX1NlcnZpY2VTdHViQnVpbGRlcihk
ZXNjcmlwdG9yKQotICAgIHNlcnZpY2Vfc3R1Yl9idWlsZGVyLkJ1aWxkU2VydmljZVN0dWIoY2xz
KQotCi0KLWNsYXNzIF9TZXJ2aWNlQnVpbGRlcihvYmplY3QpOgotCi0gICIiIlRoaXMgY2xhc3Mg
Y29uc3RydWN0cyBhIHByb3RvY29sIHNlcnZpY2UgY2xhc3MgdXNpbmcgYSBzZXJ2aWNlIGRlc2Ny
aXB0b3IuCi0KLSAgR2l2ZW4gYSBzZXJ2aWNlIGRlc2NyaXB0b3IsIHRoaXMgY2xhc3MgY29uc3Ry
dWN0cyBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cwotICB0aGUgc3BlY2lmaWVkIHNlcnZpY2UgZGVz
Y3JpcHRvci4gT25lIHNlcnZpY2UgYnVpbGRlciBpbnN0YW5jZSBjb25zdHJ1Y3RzCi0gIGV4YWN0
bHkgb25lIHNlcnZpY2UgY2xhc3MuIFRoYXQgbWVhbnMgYWxsIGluc3RhbmNlcyBvZiB0aGF0IGNs
YXNzIHNoYXJlIHRoZQotICBzYW1lIGJ1aWxkZXIuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhz
ZWxmLCBzZXJ2aWNlX2Rlc2NyaXB0b3IpOgotICAgICIiIkluaXRpYWxpemVzIGFuIGluc3RhbmNl
IG9mIHRoZSBzZXJ2aWNlIGNsYXNzIGJ1aWxkZXIuCi0KLSAgICBBcmdzOgotICAgICAgc2Vydmlj
ZV9kZXNjcmlwdG9yOiBTZXJ2aWNlRGVzY3JpcHRvciB0byB1c2Ugd2hlbiBjb25zdHJ1Y3Rpbmcg
dGhlCi0gICAgICAgIHNlcnZpY2UgY2xhc3MuCi0gICAgIiIiCi0gICAgc2VsZi5kZXNjcmlwdG9y
ID0gc2VydmljZV9kZXNjcmlwdG9yCi0KLSAgZGVmIEJ1aWxkU2VydmljZShzZWxmLCBjbHMpOgot
ICAgICIiIkNvbnN0cnVjdHMgdGhlIHNlcnZpY2UgY2xhc3MuCi0KLSAgICBBcmdzOgotICAgICAg
Y2xzOiBUaGUgY2xhc3MgdGhhdCB3aWxsIGJlIGNvbnN0cnVjdGVkLgotICAgICIiIgotCi0gICAg
IyBDYWxsTWV0aG9kIG5lZWRzIHRvIG9wZXJhdGUgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGUgU2Vy
dmljZSBjbGFzcy4gVGhpcwotICAgICMgaW50ZXJuYWwgd3JhcHBlciBmdW5jdGlvbiBleGlzdHMg
b25seSB0byBiZSBhYmxlIHRvIHBhc3MgdGhlIHNlcnZpY2UKLSAgICAjIGluc3RhbmNlIHRvIHRo
ZSBtZXRob2QgdGhhdCBkb2VzIHRoZSByZWFsIENhbGxNZXRob2Qgd29yay4KLSAgICBkZWYgX1dy
YXBDYWxsTWV0aG9kKHNydmMsIG1ldGhvZF9kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAg
ICAgICAgcnBjX2NvbnRyb2xsZXIsIHJlcXVlc3QsIGNhbGxiYWNrKToKLSAgICAgIHJldHVybiBz
ZWxmLl9DYWxsTWV0aG9kKHNydmMsIG1ldGhvZF9kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAg
ICAgICAgICBycGNfY29udHJvbGxlciwgcmVxdWVzdCwgY2FsbGJhY2spCi0gICAgc2VsZi5jbHMg
PSBjbHMKLSAgICBjbHMuQ2FsbE1ldGhvZCA9IF9XcmFwQ2FsbE1ldGhvZAotICAgIGNscy5HZXRE
ZXNjcmlwdG9yID0gc3RhdGljbWV0aG9kKGxhbWJkYTogc2VsZi5kZXNjcmlwdG9yKQotICAgIGNs
cy5HZXREZXNjcmlwdG9yLl9fZG9jX18gPSAiUmV0dXJucyB0aGUgc2VydmljZSBkZXNjcmlwdG9y
LiIKLSAgICBjbHMuR2V0UmVxdWVzdENsYXNzID0gc2VsZi5fR2V0UmVxdWVzdENsYXNzCi0gICAg
Y2xzLkdldFJlc3BvbnNlQ2xhc3MgPSBzZWxmLl9HZXRSZXNwb25zZUNsYXNzCi0gICAgZm9yIG1l
dGhvZCBpbiBzZWxmLmRlc2NyaXB0b3IubWV0aG9kczoKLSAgICAgIHNldGF0dHIoY2xzLCBtZXRo
b2QubmFtZSwgc2VsZi5fR2VuZXJhdGVOb25JbXBsZW1lbnRlZE1ldGhvZChtZXRob2QpKQotCi0g
IGRlZiBfQ2FsbE1ldGhvZChzZWxmLCBzcnZjLCBtZXRob2RfZGVzY3JpcHRvciwKLSAgICAgICAg
ICAgICAgICAgIHJwY19jb250cm9sbGVyLCByZXF1ZXN0LCBjYWxsYmFjayk6Ci0gICAgIiIiQ2Fs
bHMgdGhlIG1ldGhvZCBkZXNjcmliZWQgYnkgYSBnaXZlbiBtZXRob2QgZGVzY3JpcHRvci4KLQot
ICAgIEFyZ3M6Ci0gICAgICBzcnZjOiBJbnN0YW5jZSBvZiB0aGUgc2VydmljZSBmb3Igd2hpY2gg
dGhpcyBtZXRob2QgaXMgY2FsbGVkLgotICAgICAgbWV0aG9kX2Rlc2NyaXB0b3I6IERlc2NyaXB0
b3IgdGhhdCByZXByZXNlbnQgdGhlIG1ldGhvZCB0byBjYWxsLgotICAgICAgcnBjX2NvbnRyb2xs
ZXI6IFJQQyBjb250cm9sbGVyIHRvIHVzZSBmb3IgdGhpcyBtZXRob2QncyBleGVjdXRpb24uCi0g
ICAgICByZXF1ZXN0OiBSZXF1ZXN0IHByb3RvY29sIG1lc3NhZ2UuCi0gICAgICBjYWxsYmFjazog
QSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlIG1ldGhvZCBoYXMgY29tcGxldGVkLgotICAg
ICIiIgotICAgIGlmIG1ldGhvZF9kZXNjcmlwdG9yLmNvbnRhaW5pbmdfc2VydmljZSAhPSBzZWxm
LmRlc2NyaXB0b3I6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgJ0NhbGxN
ZXRob2QoKSBnaXZlbiBtZXRob2QgZGVzY3JpcHRvciBmb3Igd3Jvbmcgc2VydmljZSB0eXBlLicp
Ci0gICAgbWV0aG9kID0gZ2V0YXR0cihzcnZjLCBtZXRob2RfZGVzY3JpcHRvci5uYW1lKQotICAg
IHJldHVybiBtZXRob2QocnBjX2NvbnRyb2xsZXIsIHJlcXVlc3QsIGNhbGxiYWNrKQotCi0gIGRl
ZiBfR2V0UmVxdWVzdENsYXNzKHNlbGYsIG1ldGhvZF9kZXNjcmlwdG9yKToKLSAgICAiIiJSZXR1
cm5zIHRoZSBjbGFzcyBvZiB0aGUgcmVxdWVzdCBwcm90b2NvbCBtZXNzYWdlLgotCi0gICAgQXJn
czoKLSAgICAgIG1ldGhvZF9kZXNjcmlwdG9yOiBEZXNjcmlwdG9yIG9mIHRoZSBtZXRob2QgZm9y
IHdoaWNoIHRvIHJldHVybiB0aGUKLSAgICAgICAgcmVxdWVzdCBwcm90b2NvbCBtZXNzYWdlIGNs
YXNzLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgY2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBp
bnB1dCBwcm90b2NvbCBtZXNzYWdlIG9mIHRoZSBzcGVjaWZpZWQKLSAgICAgIG1ldGhvZC4KLSAg
ICAiIiIKLSAgICBpZiBtZXRob2RfZGVzY3JpcHRvci5jb250YWluaW5nX3NlcnZpY2UgIT0gc2Vs
Zi5kZXNjcmlwdG9yOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICdHZXRS
ZXF1ZXN0Q2xhc3MoKSBnaXZlbiBtZXRob2QgZGVzY3JpcHRvciBmb3Igd3Jvbmcgc2VydmljZSB0
eXBlLicpCi0gICAgcmV0dXJuIG1ldGhvZF9kZXNjcmlwdG9yLmlucHV0X3R5cGUuX2NvbmNyZXRl
X2NsYXNzCi0KLSAgZGVmIF9HZXRSZXNwb25zZUNsYXNzKHNlbGYsIG1ldGhvZF9kZXNjcmlwdG9y
KToKLSAgICAiIiJSZXR1cm5zIHRoZSBjbGFzcyBvZiB0aGUgcmVzcG9uc2UgcHJvdG9jb2wgbWVz
c2FnZS4KLQotICAgIEFyZ3M6Ci0gICAgICBtZXRob2RfZGVzY3JpcHRvcjogRGVzY3JpcHRvciBv
ZiB0aGUgbWV0aG9kIGZvciB3aGljaCB0byByZXR1cm4gdGhlCi0gICAgICAgIHJlc3BvbnNlIHBy
b3RvY29sIG1lc3NhZ2UgY2xhc3MuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBjbGFzcyB0aGF0
IHJlcHJlc2VudHMgdGhlIG91dHB1dCBwcm90b2NvbCBtZXNzYWdlIG9mIHRoZSBzcGVjaWZpZWQK
LSAgICAgIG1ldGhvZC4KLSAgICAiIiIKLSAgICBpZiBtZXRob2RfZGVzY3JpcHRvci5jb250YWlu
aW5nX3NlcnZpY2UgIT0gc2VsZi5kZXNjcmlwdG9yOgotICAgICAgcmFpc2UgUnVudGltZUVycm9y
KAotICAgICAgICAgICdHZXRSZXNwb25zZUNsYXNzKCkgZ2l2ZW4gbWV0aG9kIGRlc2NyaXB0b3Ig
Zm9yIHdyb25nIHNlcnZpY2UgdHlwZS4nKQotICAgIHJldHVybiBtZXRob2RfZGVzY3JpcHRvci5v
dXRwdXRfdHlwZS5fY29uY3JldGVfY2xhc3MKLQotICBkZWYgX0dlbmVyYXRlTm9uSW1wbGVtZW50
ZWRNZXRob2Qoc2VsZiwgbWV0aG9kKToKLSAgICAiIiJHZW5lcmF0ZXMgYW5kIHJldHVybnMgYSBt
ZXRob2QgdGhhdCBjYW4gYmUgc2V0IGZvciBhIHNlcnZpY2UgbWV0aG9kcy4KLQotICAgIEFyZ3M6
Ci0gICAgICBtZXRob2Q6IERlc2NyaXB0b3Igb2YgdGhlIHNlcnZpY2UgbWV0aG9kIGZvciB3aGlj
aCBhIG1ldGhvZCBpcyB0byBiZQotICAgICAgICBnZW5lcmF0ZWQuCi0KLSAgICBSZXR1cm5zOgot
ICAgICAgQSBtZXRob2QgdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlcnZpY2UgY2xhc3MuCi0g
ICAgIiIiCi0gICAgcmV0dXJuIGxhbWJkYSBpbnN0LCBycGNfY29udHJvbGxlciwgcmVxdWVzdCwg
Y2FsbGJhY2s6ICgKLSAgICAgICAgc2VsZi5fTm9uSW1wbGVtZW50ZWRNZXRob2QobWV0aG9kLm5h
bWUsIHJwY19jb250cm9sbGVyLCBjYWxsYmFjaykpCi0KLSAgZGVmIF9Ob25JbXBsZW1lbnRlZE1l
dGhvZChzZWxmLCBtZXRob2RfbmFtZSwgcnBjX2NvbnRyb2xsZXIsIGNhbGxiYWNrKToKLSAgICAi
IiJUaGUgYm9keSBvZiBhbGwgbWV0aG9kcyBpbiB0aGUgZ2VuZXJhdGVkIHNlcnZpY2UgY2xhc3Mu
Ci0KLSAgICBBcmdzOgotICAgICAgbWV0aG9kX25hbWU6IE5hbWUgb2YgdGhlIG1ldGhvZCBiZWlu
ZyBleGVjdXRlZC4KLSAgICAgIHJwY19jb250cm9sbGVyOiBSUEMgY29udHJvbGxlciB1c2VkIHRv
IGV4ZWN1dGUgdGhpcyBtZXRob2QuCi0gICAgICBjYWxsYmFjazogQSBjYWxsYmFjayB3aGljaCB3
aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgbWV0aG9kIGZpbmlzaGVzLgotICAgICIiIgotICAgIHJw
Y19jb250cm9sbGVyLlNldEZhaWxlZCgnTWV0aG9kICVzIG5vdCBpbXBsZW1lbnRlZC4nICUgbWV0
aG9kX25hbWUpCi0gICAgY2FsbGJhY2soTm9uZSkKLQotCi1jbGFzcyBfU2VydmljZVN0dWJCdWls
ZGVyKG9iamVjdCk6Ci0KLSAgIiIiQ29uc3RydWN0cyBhIHByb3RvY29sIHNlcnZpY2Ugc3R1YiBj
bGFzcyB1c2luZyBhIHNlcnZpY2UgZGVzY3JpcHRvci4KLQotICBHaXZlbiBhIHNlcnZpY2UgZGVz
Y3JpcHRvciwgdGhpcyBjbGFzcyBjb25zdHJ1Y3RzIGEgc3VpdGFibGUgc3R1YiBjbGFzcy4KLSAg
QSBzdHViIGlzIGp1c3QgYSB0eXBlLXNhZmUgd3JhcHBlciBhcm91bmQgYW4gUnBjQ2hhbm5lbCB3
aGljaCBlbXVsYXRlcyBhCi0gIGxvY2FsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXJ2aWNlLgot
Ci0gIE9uZSBzZXJ2aWNlIHN0dWIgYnVpbGRlciBpbnN0YW5jZSBjb25zdHJ1Y3RzIGV4YWN0bHkg
b25lIGNsYXNzLiBJdCBtZWFucyBhbGwKLSAgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3Mgc2hhcmUg
dGhlIHNhbWUgc2VydmljZSBzdHViIGJ1aWxkZXIuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhz
ZWxmLCBzZXJ2aWNlX2Rlc2NyaXB0b3IpOgotICAgICIiIkluaXRpYWxpemVzIGFuIGluc3RhbmNl
IG9mIHRoZSBzZXJ2aWNlIHN0dWIgY2xhc3MgYnVpbGRlci4KLQotICAgIEFyZ3M6Ci0gICAgICBz
ZXJ2aWNlX2Rlc2NyaXB0b3I6IFNlcnZpY2VEZXNjcmlwdG9yIHRvIHVzZSB3aGVuIGNvbnN0cnVj
dGluZyB0aGUKLSAgICAgICAgc3R1YiBjbGFzcy4KLSAgICAiIiIKLSAgICBzZWxmLmRlc2NyaXB0
b3IgPSBzZXJ2aWNlX2Rlc2NyaXB0b3IKLQotICBkZWYgQnVpbGRTZXJ2aWNlU3R1YihzZWxmLCBj
bHMpOgotICAgICIiIkNvbnN0cnVjdHMgdGhlIHN0dWIgY2xhc3MuCi0KLSAgICBBcmdzOgotICAg
ICAgY2xzOiBUaGUgY2xhc3MgdGhhdCB3aWxsIGJlIGNvbnN0cnVjdGVkLgotICAgICIiIgotCi0g
ICAgZGVmIF9TZXJ2aWNlU3R1YkluaXQoc3R1YiwgcnBjX2NoYW5uZWwpOgotICAgICAgc3R1Yi5y
cGNfY2hhbm5lbCA9IHJwY19jaGFubmVsCi0gICAgc2VsZi5jbHMgPSBjbHMKLSAgICBjbHMuX19p
bml0X18gPSBfU2VydmljZVN0dWJJbml0Ci0gICAgZm9yIG1ldGhvZCBpbiBzZWxmLmRlc2NyaXB0
b3IubWV0aG9kczoKLSAgICAgIHNldGF0dHIoY2xzLCBtZXRob2QubmFtZSwgc2VsZi5fR2VuZXJh
dGVTdHViTWV0aG9kKG1ldGhvZCkpCi0KLSAgZGVmIF9HZW5lcmF0ZVN0dWJNZXRob2Qoc2VsZiwg
bWV0aG9kKToKLSAgICByZXR1cm4gKGxhbWJkYSBpbnN0LCBycGNfY29udHJvbGxlciwgcmVxdWVz
dCwgY2FsbGJhY2s9Tm9uZToKLSAgICAgICAgc2VsZi5fU3R1Yk1ldGhvZChpbnN0LCBtZXRob2Qs
IHJwY19jb250cm9sbGVyLCByZXF1ZXN0LCBjYWxsYmFjaykpCi0KLSAgZGVmIF9TdHViTWV0aG9k
KHNlbGYsIHN0dWIsIG1ldGhvZF9kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgcnBjX2Nv
bnRyb2xsZXIsIHJlcXVlc3QsIGNhbGxiYWNrKToKLSAgICAiIiJUaGUgYm9keSBvZiBhbGwgc2Vy
dmljZSBtZXRob2RzIGluIHRoZSBnZW5lcmF0ZWQgc3R1YiBjbGFzcy4KLQotICAgIEFyZ3M6Ci0g
ICAgICBzdHViOiBTdHViIGluc3RhbmNlLgotICAgICAgbWV0aG9kX2Rlc2NyaXB0b3I6IERlc2Ny
aXB0b3Igb2YgdGhlIGludm9rZWQgbWV0aG9kLgotICAgICAgcnBjX2NvbnRyb2xsZXI6IFJwYyBj
b250cm9sbGVyIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZC4KLSAgICAgIHJlcXVlc3Q6IFJlcXVlc3Qg
cHJvdG9jb2wgbWVzc2FnZS4KLSAgICAgIGNhbGxiYWNrOiBBIGNhbGxiYWNrIHRvIGV4ZWN1dGUg
d2hlbiB0aGUgbWV0aG9kIGZpbmlzaGVzLgotICAgIFJldHVybnM6Ci0gICAgICBSZXNwb25zZSBt
ZXNzYWdlIChpbiBjYXNlIG9mIGJsb2NraW5nIGNhbGwpLgotICAgICIiIgotICAgIHJldHVybiBz
dHViLnJwY19jaGFubmVsLkNhbGxNZXRob2QoCi0gICAgICAgIG1ldGhvZF9kZXNjcmlwdG9yLCBy
cGNfY29udHJvbGxlciwgcmVxdWVzdCwKLSAgICAgICAgbWV0aG9kX2Rlc2NyaXB0b3Iub3V0cHV0
X3R5cGUuX2NvbmNyZXRlX2NsYXNzLCBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2ds
ZS9wcm90b2J1Zi9zeW1ib2xfZGF0YWJhc2UucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvc3lt
Ym9sX2RhdGFiYXNlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzc2MGYyNjMw
NDNkMzFlMmU5NmU0MWQxNjIzOWJkYjg1MTZhNTdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9zeW1ib2xfZGF0YWJh
c2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotIyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJBIGRhdGFi
YXNlIG9mIFB5dGhvbiBwcm90b2NvbCBidWZmZXIgZ2VuZXJhdGVkIHN5bWJvbHMuCi0KLVN5bWJv
bERhdGFiYXNlIG1ha2VzIGl0IGVhc3kgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZXMgb2YgYSByZWdp
c3RlcmVkIHR5cGUsIGdpdmVuCi1vbmx5IHRoZSB0eXBlJ3MgcHJvdG9jb2wgYnVmZmVyIHN5bWJv
bCBuYW1lLiBPbmNlIGFsbCBzeW1ib2xzIGFyZSByZWdpc3RlcmVkLAotdGhleSBjYW4gYmUgYWNj
ZXNzZWQgdXNpbmcgZWl0aGVyIHRoZSBNZXNzYWdlRmFjdG9yeSBpbnRlcmZhY2Ugd2hpY2gKLVN5
bWJvbERhdGFiYXNlIGV4cG9zZXMsIG9yIHRoZSBEZXNjcmlwdG9yUG9vbCBpbnRlcmZhY2Ugb2Yg
dGhlIHVuZGVybHlpbmcKLXBvb2wuCi0KLUV4YW1wbGUgdXNhZ2U6Ci0KLSAgZGIgPSBzeW1ib2xf
ZGF0YWJhc2UuU3ltYm9sRGF0YWJhc2UoKQotCi0gICMgUmVnaXN0ZXIgc3ltYm9scyBvZiBpbnRl
cmVzdCwgZnJvbSBvbmUgb3IgbXVsdGlwbGUgZmlsZXMuCi0gIGRiLlJlZ2lzdGVyRmlsZURlc2Ny
aXB0b3IobXlfcHJvdG9fcGIyLkRFU0NSSVBUT1IpCi0gIGRiLlJlZ2lzdGVyTWVzc2FnZShteV9w
cm90b19wYjIuTXlNZXNzYWdlKQotICBkYi5SZWdpc3RlckVudW1EZXNjcmlwdG9yKG15X3Byb3Rv
X3BiMi5NeUVudW0uREVTQ1JJUFRPUikKLQotICAjIFRoZSBkYXRhYmFzZSBjYW4gYmUgdXNlZCBh
cyBhIE1lc3NhZ2VGYWN0b3J5LCB0byBnZW5lcmF0ZSB0eXBlcyBiYXNlZCBvbgotICAjIHRoZWly
IG5hbWU6Ci0gIHR5cGVzID0gZGIuR2V0TWVzc2FnZXMoWydteV9wcm90by5wcm90byddKQotICBt
eV9tZXNzYWdlX2luc3RhbmNlID0gdHlwZXNbJ015TWVzc2FnZSddKCkKLQotICAjIFRoZSBkYXRh
YmFzZSdzIHVuZGVybHlpbmcgZGVzY3JpcHRvciBwb29sIGNhbiBiZSBxdWVyaWVkLCBzbyBpdCdz
IG5vdAotICAjIG5lY2Vzc2FyeSB0byBrbm93IGEgdHlwZSdzIGZpbGVuYW1lIHRvIGJlIGFibGUg
dG8gZ2VuZXJhdGUgaXQ6Ci0gIGZpbGVuYW1lID0gZGIucG9vbC5GaW5kRmlsZUNvbnRhaW5pbmdT
eW1ib2woJ015TWVzc2FnZScpCi0gIG15X21lc3NhZ2VfaW5zdGFuY2UgPSBkYi5HZXRNZXNzYWdl
cyhbZmlsZW5hbWVdKVsnTXlNZXNzYWdlJ10oKQotCi0gICMgVGhpcyBmdW5jdGlvbmFsaXR5IGlz
IGFsc28gcHJvdmlkZWQgZGlyZWN0bHkgdmlhIGEgY29udmVuaWVuY2UgbWV0aG9kOgotICBteV9t
ZXNzYWdlX2luc3RhbmNlID0gZGIuR2V0U3ltYm9sKCdNeU1lc3NhZ2UnKSgpCi0iIiIKLQotCi1m
cm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgZGVzY3JpcHRvcl9wb29sCi0KLQotY2xhc3MgU3lt
Ym9sRGF0YWJhc2Uob2JqZWN0KToKLSAgIiIiQSBkYXRhYmFzZSBvZiBQeXRob24gZ2VuZXJhdGVk
IHN5bWJvbHMuCi0KLSAgU3ltYm9sRGF0YWJhc2UgYWxzbyBtb2RlbHMgbWVzc2FnZV9mYWN0b3J5
Lk1lc3NhZ2VGYWN0b3J5LgotCi0gIFRoZSBzeW1ib2wgZGF0YWJhc2UgY2FuIGJlIHVzZWQgdG8g
a2VlcCBhIGdsb2JhbCByZWdpc3RyeSBvZiBhbGwgcHJvdG9jb2wKLSAgYnVmZmVyIHR5cGVzIHVz
ZWQgd2l0aGluIGEgcHJvZ3JhbS4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHBvb2w9
Tm9uZSk6Ci0gICAgIiIiQ29uc3RydWN0b3IuIiIiCi0KLSAgICBzZWxmLl9zeW1ib2xzID0ge30K
LSAgICBzZWxmLl9zeW1ib2xzX2J5X2ZpbGUgPSB7fQotICAgIHNlbGYucG9vbCA9IHBvb2wgb3Ig
ZGVzY3JpcHRvcl9wb29sLkRlZmF1bHQoKQotCi0gIGRlZiBSZWdpc3Rlck1lc3NhZ2Uoc2VsZiwg
bWVzc2FnZSk6Ci0gICAgIiIiUmVnaXN0ZXJzIHRoZSBnaXZlbiBtZXNzYWdlIHR5cGUgaW4gdGhl
IGxvY2FsIGRhdGFiYXNlLgotCi0gICAgQXJnczoKLSAgICAgIG1lc3NhZ2U6IGEgbWVzc2FnZS5N
ZXNzYWdlLCB0byBiZSByZWdpc3RlcmVkLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBwcm92
aWRlZCBtZXNzYWdlLgotICAgICIiIgotCi0gICAgZGVzYyA9IG1lc3NhZ2UuREVTQ1JJUFRPUgot
ICAgIHNlbGYuX3N5bWJvbHNbZGVzYy5mdWxsX25hbWVdID0gbWVzc2FnZQotICAgIGlmIGRlc2Mu
ZmlsZS5uYW1lIG5vdCBpbiBzZWxmLl9zeW1ib2xzX2J5X2ZpbGU6Ci0gICAgICBzZWxmLl9zeW1i
b2xzX2J5X2ZpbGVbZGVzYy5maWxlLm5hbWVdID0ge30KLSAgICBzZWxmLl9zeW1ib2xzX2J5X2Zp
bGVbZGVzYy5maWxlLm5hbWVdW2Rlc2MuZnVsbF9uYW1lXSA9IG1lc3NhZ2UKLSAgICBzZWxmLnBv
b2wuQWRkRGVzY3JpcHRvcihkZXNjKQotICAgIHJldHVybiBtZXNzYWdlCi0KLSAgZGVmIFJlZ2lz
dGVyRW51bURlc2NyaXB0b3Ioc2VsZiwgZW51bV9kZXNjcmlwdG9yKToKLSAgICAiIiJSZWdpc3Rl
cnMgdGhlIGdpdmVuIGVudW0gZGVzY3JpcHRvciBpbiB0aGUgbG9jYWwgZGF0YWJhc2UuCi0KLSAg
ICBBcmdzOgotICAgICAgZW51bV9kZXNjcmlwdG9yOiBhIGRlc2NyaXB0b3IuRW51bURlc2NyaXB0
b3IuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIHByb3ZpZGVkIGRlc2NyaXB0b3IuCi0gICAg
IiIiCi0gICAgc2VsZi5wb29sLkFkZEVudW1EZXNjcmlwdG9yKGVudW1fZGVzY3JpcHRvcikKLSAg
ICByZXR1cm4gZW51bV9kZXNjcmlwdG9yCi0KLSAgZGVmIFJlZ2lzdGVyRmlsZURlc2NyaXB0b3Io
c2VsZiwgZmlsZV9kZXNjcmlwdG9yKToKLSAgICAiIiJSZWdpc3RlcnMgdGhlIGdpdmVuIGZpbGUg
ZGVzY3JpcHRvciBpbiB0aGUgbG9jYWwgZGF0YWJhc2UuCi0KLSAgICBBcmdzOgotICAgICAgZmls
ZV9kZXNjcmlwdG9yOiBhIGRlc2NyaXB0b3IuRmlsZURlc2NyaXB0b3IuCi0KLSAgICBSZXR1cm5z
OgotICAgICAgVGhlIHByb3ZpZGVkIGRlc2NyaXB0b3IuCi0gICAgIiIiCi0gICAgc2VsZi5wb29s
LkFkZEZpbGVEZXNjcmlwdG9yKGZpbGVfZGVzY3JpcHRvcikKLQotICBkZWYgR2V0U3ltYm9sKHNl
bGYsIHN5bWJvbCk6Ci0gICAgIiIiVHJpZXMgdG8gZmluZCBhIHN5bWJvbCBpbiB0aGUgbG9jYWwg
ZGF0YWJhc2UuCi0KLSAgICBDdXJyZW50bHksIHRoaXMgbWV0aG9kIG9ubHkgcmV0dXJucyBtZXNz
YWdlLk1lc3NhZ2UgaW5zdGFuY2VzLCBob3dldmVyLCBpZgotICAgIG1heSBiZSBleHRlbmRlZCBp
biBmdXR1cmUgdG8gc3VwcG9ydCBvdGhlciBzeW1ib2wgdHlwZXMuCi0KLSAgICBBcmdzOgotICAg
ICAgc3ltYm9sOiBBIHN0ciwgYSBwcm90b2NvbCBidWZmZXIgc3ltYm9sLgotCi0gICAgUmV0dXJu
czoKLSAgICAgIEEgUHl0aG9uIGNsYXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5bWJvbC4KLQot
ICAgIFJhaXNlczoKLSAgICAgIEtleUVycm9yOiBpZiB0aGUgc3ltYm9sIGNvdWxkIG5vdCBiZSBm
b3VuZC4KLSAgICAiIiIKLQotICAgIHJldHVybiBzZWxmLl9zeW1ib2xzW3N5bWJvbF0KLQotICBk
ZWYgR2V0UHJvdG90eXBlKHNlbGYsIGRlc2NyaXB0b3IpOgotICAgICIiIkJ1aWxkcyBhIHByb3Rv
MiBtZXNzYWdlIGNsYXNzIGJhc2VkIG9uIHRoZSBwYXNzZWQgaW4gZGVzY3JpcHRvci4KLQotICAg
IFBhc3NpbmcgYSBkZXNjcmlwdG9yIHdpdGggYSBmdWxseSBxdWFsaWZpZWQgbmFtZSBtYXRjaGlu
ZyBhIHByZXZpb3VzCi0gICAgaW52b2NhdGlvbiB3aWxsIGNhdXNlIHRoZSBzYW1lIGNsYXNzIHRv
IGJlIHJldHVybmVkLgotCi0gICAgQXJnczoKLSAgICAgIGRlc2NyaXB0b3I6IFRoZSBkZXNjcmlw
dG9yIHRvIGJ1aWxkIGZyb20uCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBjbGFzcyBkZXNjcmli
aW5nIHRoZSBwYXNzZWQgaW4gZGVzY3JpcHRvci4KLSAgICAiIiIKLQotICAgIHJldHVybiBzZWxm
LkdldFN5bWJvbChkZXNjcmlwdG9yLmZ1bGxfbmFtZSkKLQotICBkZWYgR2V0TWVzc2FnZXMoc2Vs
ZiwgZmlsZXMpOgotICAgICIiIkdldHMgYWxsIHRoZSBtZXNzYWdlcyBmcm9tIGEgc3BlY2lmaWVk
IGZpbGUuCi0KLSAgICBUaGlzIHdpbGwgZmluZCBhbmQgcmVzb2x2ZSBkZXBlbmRlbmNpZXMsIGZh
aWxpbmcgaWYgdGhleSBhcmUgbm90IHJlZ2lzdGVyZWQKLSAgICBpbiB0aGUgc3ltYm9sIGRhdGFi
YXNlLgotCi0KLSAgICBBcmdzOgotICAgICAgZmlsZXM6IFRoZSBmaWxlIG5hbWVzIHRvIGV4dHJh
Y3QgbWVzc2FnZXMgZnJvbS4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIGRpY3Rpb25hcnkgbWFw
cGluZyBwcm90byBuYW1lcyB0byB0aGUgbWVzc2FnZSBjbGFzc2VzLiBUaGlzIHdpbGwgaW5jbHVk
ZQotICAgICAgYW55IGRlcGVuZGVudCBtZXNzYWdlcyBhcyB3ZWxsIGFzIGFueSBtZXNzYWdlcyBk
ZWZpbmVkIGluIHRoZSBzYW1lIGZpbGUgYXMKLSAgICAgIGEgc3BlY2lmaWVkIG1lc3NhZ2UuCi0K
LSAgICBSYWlzZXM6Ci0gICAgICBLZXlFcnJvcjogaWYgYSBmaWxlIGNvdWxkIG5vdCBiZSBmb3Vu
ZC4KLSAgICAiIiIKLQotICAgIHJlc3VsdCA9IHt9Ci0gICAgZm9yIGYgaW4gZmlsZXM6Ci0gICAg
ICByZXN1bHQudXBkYXRlKHNlbGYuX3N5bWJvbHNfYnlfZmlsZVtmXSkKLSAgICByZXR1cm4gcmVz
dWx0Ci0KLV9ERUZBVUxUID0gU3ltYm9sRGF0YWJhc2UocG9vbD1kZXNjcmlwdG9yX3Bvb2wuRGVm
YXVsdCgpKQotCi0KLWRlZiBEZWZhdWx0KCk6Ci0gICIiIlJldHVybnMgdGhlIGRlZmF1bHQgU3lt
Ym9sRGF0YWJhc2UuIiIiCi0gIHJldHVybiBfREVGQVVMVApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vZ29v
Z2xlL3Byb3RvYnVmL3RleHRfZW5jb2RpbmcucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvdGV4
dF9lbmNvZGluZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg5OTU2MzgyNTdl
ODU5NGM1ZGVmYjIxZDE2NTk2YmNiOWU0NzVjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvdGV4dF9lbmNvZGluZy5w
eQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0jIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIkVuY29kaW5nIHJl
bGF0ZWQgdXRpbGl0aWVzLiIiIgotaW1wb3J0IHJlCi0KLWltcG9ydCBzaXgKLQotIyBMb29rdXAg
dGFibGUgZm9yIHV0ZjgKLV9jZXNjYXBlX3V0ZjhfdG9fc3RyID0gW2NocihpKSBmb3IgaSBpbiBy
YW5nZSgwLCAyNTYpXQotX2Nlc2NhcGVfdXRmOF90b19zdHJbOV0gPSByJ1x0JyAgIyBvcHRpb25h
bCBlc2NhcGUKLV9jZXNjYXBlX3V0ZjhfdG9fc3RyWzEwXSA9IHInXG4nICAjIG9wdGlvbmFsIGVz
Y2FwZQotX2Nlc2NhcGVfdXRmOF90b19zdHJbMTNdID0gcidccicgICMgb3B0aW9uYWwgZXNjYXBl
Ci1fY2VzY2FwZV91dGY4X3RvX3N0clszOV0gPSByIlwnIiAgIyBvcHRpb25hbCBlc2NhcGUKLQot
X2Nlc2NhcGVfdXRmOF90b19zdHJbMzRdID0gcidcIicgICMgbmVjZXNzYXJ5IGVzY2FwZQotX2Nl
c2NhcGVfdXRmOF90b19zdHJbOTJdID0gcidcXCcgICMgbmVjZXNzYXJ5IGVzY2FwZQotCi0jIExv
b2t1cCB0YWJsZSBmb3Igbm9uLXV0ZjgsIHdpdGggbmVjZXNzYXJ5IGVzY2FwZXMgYXQgKG8gPj0g
MTI3IG9yIG8gPCAzMikKLV9jZXNjYXBlX2J5dGVfdG9fc3RyID0gKFtyJ1wlMDNvJyAlIGkgZm9y
IGkgaW4gcmFuZ2UoMCwgMzIpXSArCi0gICAgICAgICAgICAgICAgICAgICAgICBbY2hyKGkpIGZv
ciBpIGluIHJhbmdlKDMyLCAxMjcpXSArCi0gICAgICAgICAgICAgICAgICAgICAgICBbcidcJTAz
bycgJSBpIGZvciBpIGluIHJhbmdlKDEyNywgMjU2KV0pCi1fY2VzY2FwZV9ieXRlX3RvX3N0cls5
XSA9IHInXHQnICAjIG9wdGlvbmFsIGVzY2FwZQotX2Nlc2NhcGVfYnl0ZV90b19zdHJbMTBdID0g
cidcbicgICMgb3B0aW9uYWwgZXNjYXBlCi1fY2VzY2FwZV9ieXRlX3RvX3N0clsxM10gPSByJ1xy
JyAgIyBvcHRpb25hbCBlc2NhcGUKLV9jZXNjYXBlX2J5dGVfdG9fc3RyWzM5XSA9IHIiXCciICAj
IG9wdGlvbmFsIGVzY2FwZQotCi1fY2VzY2FwZV9ieXRlX3RvX3N0clszNF0gPSByJ1wiJyAgIyBu
ZWNlc3NhcnkgZXNjYXBlCi1fY2VzY2FwZV9ieXRlX3RvX3N0cls5Ml0gPSByJ1xcJyAgIyBuZWNl
c3NhcnkgZXNjYXBlCi0KLQotZGVmIENFc2NhcGUodGV4dCwgYXNfdXRmOCk6Ci0gICIiIkVzY2Fw
ZSBhIGJ5dGVzIHN0cmluZyBmb3IgdXNlIGluIGFuIGFzY2lpIHByb3RvY29sIGJ1ZmZlci4KLQot
ICB0ZXh0LmVuY29kZSgnc3RyaW5nX2VzY2FwZScpIGRvZXMgbm90IHNlZW0gdG8gc2F0aXNmeSBv
dXIgbmVlZHMgYXMgaXQKLSAgZW5jb2RlcyB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIHVzaW5nIHR3
by1kaWdpdCBoZXggZXNjYXBlcyB3aGVyZWFzIG91cgotICBDKysgdW5lc2NhcGluZyBmdW5jdGlv
biBhbGxvd3MgaGV4IGVzY2FwZXMgdG8gYmUgYW55IGxlbmd0aC4gIFNvLAotICAiXDAwMTEiLmVu
Y29kZSgnc3RyaW5nX2VzY2FwZScpIGVuZHMgdXAgYmVpbmcgIlxceDAxMSIsIHdoaWNoIHdpbGwg
YmUKLSAgZGVjb2RlZCBpbiBDKysgYXMgYSBzaW5nbGUtY2hhcmFjdGVyIHN0cmluZyB3aXRoIGNo
YXIgY29kZSAweDExLgotCi0gIEFyZ3M6Ci0gICAgdGV4dDogQSBieXRlIHN0cmluZyB0byBiZSBl
c2NhcGVkCi0gICAgYXNfdXRmODogU3BlY2lmaWVzIGlmIHJlc3VsdCBzaG91bGQgYmUgcmV0dXJu
ZWQgaW4gVVRGLTggZW5jb2RpbmcKLSAgUmV0dXJuczoKLSAgICBFc2NhcGVkIHN0cmluZwotICAi
IiIKLSAgIyBQWTMgaGFjazogbWFrZSBPcmQgd29yayBmb3Igc3RyIGFuZCBieXRlczoKLSAgIyAv
L3BsYXRmb3Jtcy9uZXR3b3JraW5nL2RhdGEgdXNlcyB1bmljb2RlIGhlcmUsIGhlbmNlIGJhc2Vz
dHJpbmcuCi0gIE9yZCA9IG9yZCBpZiBpc2luc3RhbmNlKHRleHQsIHNpeC5zdHJpbmdfdHlwZXMp
IGVsc2UgbGFtYmRhIHg6IHgKLSAgaWYgYXNfdXRmODoKLSAgICByZXR1cm4gJycuam9pbihfY2Vz
Y2FwZV91dGY4X3RvX3N0cltPcmQoYyldIGZvciBjIGluIHRleHQpCi0gIHJldHVybiAnJy5qb2lu
KF9jZXNjYXBlX2J5dGVfdG9fc3RyW09yZChjKV0gZm9yIGMgaW4gdGV4dCkKLQotCi1fQ1VORVND
QVBFX0hFWCA9IHJlLmNvbXBpbGUocicoXFwrKXgoWzAtOWEtZkEtRl0pKD8hWzAtOWEtZkEtRl0p
JykKLV9jZXNjYXBlX2hpZ2hiaXRfdG9fc3RyID0gKFtjaHIoaSkgZm9yIGkgaW4gcmFuZ2UoMCwg
MTI3KV0gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgW3InXCUwM28nICUgaSBmb3IgaSBp
biByYW5nZSgxMjcsIDI1NildKQotCi0KLWRlZiBDVW5lc2NhcGUodGV4dCk6Ci0gICIiIlVuZXNj
YXBlIGEgdGV4dCBzdHJpbmcgd2l0aCBDLXN0eWxlIGVzY2FwZSBzZXF1ZW5jZXMgdG8gVVRGLTgg
Ynl0ZXMuIiIiCi0KLSAgZGVmIFJlcGxhY2VIZXgobSk6Ci0gICAgIyBPbmx5IHJlcGxhY2UgdGhl
IG1hdGNoIGlmIHRoZSBudW1iZXIgb2YgbGVhZGluZyBiYWNrIHNsYXNoZXMgaXMgb2RkLiBpLmUu
Ci0gICAgIyB0aGUgc2xhc2ggaXRzZWxmIGlzIG5vdCBlc2NhcGVkLgotICAgIGlmIGxlbihtLmdy
b3VwKDEpKSAmIDE6Ci0gICAgICByZXR1cm4gbS5ncm91cCgxKSArICd4MCcgKyBtLmdyb3VwKDIp
Ci0gICAgcmV0dXJuIG0uZ3JvdXAoMCkKLQotICAjIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSB0
aGUgJ3N0cmluZ19lc2NhcGUnIGVuY29kaW5nIGRvZXNuJ3QKLSAgIyBhbGxvdyBzaW5nbGUtZGln
aXQgaGV4IGVzY2FwZXMgKGxpa2UgJ1x4ZicpLgotICByZXN1bHQgPSBfQ1VORVNDQVBFX0hFWC5z
dWIoUmVwbGFjZUhleCwgdGV4dCkKLQotICBpZiBzdHIgaXMgYnl0ZXM6ICAjIFBZMgotICAgIHJl
dHVybiByZXN1bHQuZGVjb2RlKCdzdHJpbmdfZXNjYXBlJykKLSAgcmVzdWx0ID0gJycuam9pbihf
Y2VzY2FwZV9oaWdoYml0X3RvX3N0cltvcmQoYyldIGZvciBjIGluIHJlc3VsdCkKLSAgcmV0dXJu
IChyZXN1bHQuZW5jb2RlKCdhc2NpaScpICAjIE1ha2UgaXQgYnl0ZXMgdG8gYWxsb3cgZGVjb2Rl
LgotICAgICAgICAgIC5kZWNvZGUoJ3VuaWNvZGVfZXNjYXBlJykKLSAgICAgICAgICAjIE1ha2Ug
aXQgYnl0ZXMgYWdhaW4gdG8gcmV0dXJuIHRoZSBwcm9wZXIgdHlwZS4KLSAgICAgICAgICAuZW5j
b2RlKCdyYXdfdW5pY29kZV9lc2NhcGUnKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90
b2J1Zi90ZXh0X2Zvcm1hdC5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL2dvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5w
eQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNmYxZTNjOGI3MjVlYTJmOTBiMjdhZDYy
NzE0ZGU0ZDRkZjI0YTk0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3B5dGhvbi9nb29nbGUvcHJvdG9idWYvdGV4dF9mb3JtYXQucHkKKysrIC9kZXYvbnVs
bApAQCAtMSwxMjE5ICswLDAgQEAKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlz
dHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQ29udGFpbnMgcm91dGluZXMgZm9yIHBy
aW50aW5nIHByb3RvY29sIG1lc3NhZ2VzIGluIHRleHQgZm9ybWF0LgotCi1TaW1wbGUgdXNhZ2Ug
ZXhhbXBsZToKLQotICAjIENyZWF0ZSBhIHByb3RvIG9iamVjdCBhbmQgc2VyaWFsaXplIGl0IHRv
IGEgdGV4dCBwcm90byBzdHJpbmcuCi0gIG1lc3NhZ2UgPSBteV9wcm90b19wYjIuTXlNZXNzYWdl
KGZvbz0nYmFyJykKLSAgdGV4dF9wcm90byA9IHRleHRfZm9ybWF0Lk1lc3NhZ2VUb1N0cmluZyht
ZXNzYWdlKQotCi0gICMgUGFyc2UgYSB0ZXh0IHByb3RvIHN0cmluZy4KLSAgbWVzc2FnZSA9IHRl
eHRfZm9ybWF0LlBhcnNlKHRleHRfcHJvdG8sIG15X3Byb3RvX3BiMi5NeU1lc3NhZ2UoKSkKLSIi
IgotCi1fX2F1dGhvcl9fID0gJ2tlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpJwotCi1p
bXBvcnQgaW8KLWltcG9ydCByZQotCi1pbXBvcnQgc2l4Ci0KLWlmIHNpeC5QWTM6Ci0gIGxvbmcg
PSBpbnQKLQotZnJvbSBnb29nbGUucHJvdG9idWYuaW50ZXJuYWwgaW1wb3J0IHR5cGVfY2hlY2tl
cnMKLWZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBkZXNjcmlwdG9yCi1mcm9tIGdvb2dsZS5w
cm90b2J1ZiBpbXBvcnQgdGV4dF9lbmNvZGluZwotCi1fX2FsbF9fID0gWydNZXNzYWdlVG9TdHJp
bmcnLCAnUHJpbnRNZXNzYWdlJywgJ1ByaW50RmllbGQnLAotICAgICAgICAgICAnUHJpbnRGaWVs
ZFZhbHVlJywgJ01lcmdlJ10KLQotCi1fSU5URUdFUl9DSEVDS0VSUyA9ICh0eXBlX2NoZWNrZXJz
LlVpbnQzMlZhbHVlQ2hlY2tlcigpLAotICAgICAgICAgICAgICAgICAgICAgdHlwZV9jaGVja2Vy
cy5JbnQzMlZhbHVlQ2hlY2tlcigpLAotICAgICAgICAgICAgICAgICAgICAgdHlwZV9jaGVja2Vy
cy5VaW50NjRWYWx1ZUNoZWNrZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgIHR5cGVfY2hlY2tl
cnMuSW50NjRWYWx1ZUNoZWNrZXIoKSkKLV9GTE9BVF9JTkZJTklUWSA9IHJlLmNvbXBpbGUoJy0/
aW5mKD86aW5pdHkpP2Y/JywgcmUuSUdOT1JFQ0FTRSkKLV9GTE9BVF9OQU4gPSByZS5jb21waWxl
KCduYW5mPycsIHJlLklHTk9SRUNBU0UpCi1fRkxPQVRfVFlQRVMgPSBmcm96ZW5zZXQoW2Rlc2Ny
aXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfRkxPQVQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfRE9VQkxFXSkKLV9RVU9U
RVMgPSBmcm96ZW5zZXQoKCInIiwgJyInKSkKLQotCi1jbGFzcyBFcnJvcihFeGNlcHRpb24pOgot
ICAiIiJUb3AtbGV2ZWwgbW9kdWxlIGVycm9yIGZvciB0ZXh0X2Zvcm1hdC4iIiIKLQotCi1jbGFz
cyBQYXJzZUVycm9yKEVycm9yKToKLSAgIiIiVGhyb3duIGluIGNhc2Ugb2YgdGV4dCBwYXJzaW5n
IGVycm9yLiIiIgotCi0KLWNsYXNzIFRleHRXcml0ZXIob2JqZWN0KToKLSAgZGVmIF9faW5pdF9f
KHNlbGYsIGFzX3V0ZjgpOgotICAgIGlmIHNpeC5QWTI6Ci0gICAgICBzZWxmLl93cml0ZXIgPSBp
by5CeXRlc0lPKCkKLSAgICBlbHNlOgotICAgICAgc2VsZi5fd3JpdGVyID0gaW8uU3RyaW5nSU8o
KQotCi0gIGRlZiB3cml0ZShzZWxmLCB2YWwpOgotICAgIGlmIHNpeC5QWTI6Ci0gICAgICBpZiBp
c2luc3RhbmNlKHZhbCwgc2l4LnRleHRfdHlwZSk6Ci0gICAgICAgIHZhbCA9IHZhbC5lbmNvZGUo
J3V0Zi04JykKLSAgICByZXR1cm4gc2VsZi5fd3JpdGVyLndyaXRlKHZhbCkKLQotICBkZWYgY2xv
c2Uoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3dyaXRlci5jbG9zZSgpCi0KLSAgZGVmIGdldHZh
bHVlKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl93cml0ZXIuZ2V0dmFsdWUoKQotCi0KLWRlZiBN
ZXNzYWdlVG9TdHJpbmcobWVzc2FnZSwgYXNfdXRmOD1GYWxzZSwgYXNfb25lX2xpbmU9RmFsc2Us
Ci0gICAgICAgICAgICAgICAgICAgIHBvaW50eV9icmFja2V0cz1GYWxzZSwgdXNlX2luZGV4X29y
ZGVyPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICBmbG9hdF9mb3JtYXQ9Tm9uZSwgdXNlX2Zp
ZWxkX251bWJlcj1GYWxzZSk6Ci0gICIiIkNvbnZlcnQgcHJvdG9idWYgbWVzc2FnZSB0byB0ZXh0
IGZvcm1hdC4KLQotICBGbG9hdGluZyBwb2ludCB2YWx1ZXMgY2FuIGJlIGZvcm1hdHRlZCBjb21w
YWN0bHkgd2l0aCAxNSBkaWdpdHMgb2YKLSAgcHJlY2lzaW9uICh3aGljaCBpcyB0aGUgbW9zdCB0
aGF0IElFRUUgNzU0ICJkb3VibGUiIGNhbiBndWFyYW50ZWUpCi0gIHVzaW5nIGZsb2F0X2Zvcm1h
dD0nLjE1ZycuIFRvIGVuc3VyZSB0aGF0IGNvbnZlcnRpbmcgdG8gdGV4dCBhbmQgYmFjayB0byBh
Ci0gIHByb3RvIHdpbGwgcmVzdWx0IGluIGFuIGlkZW50aWNhbCB2YWx1ZSwgZmxvYXRfZm9ybWF0
PScuMTdnJyBzaG91bGQgYmUgdXNlZC4KLQotICBBcmdzOgotICAgIG1lc3NhZ2U6IFRoZSBwcm90
b2NvbCBidWZmZXJzIG1lc3NhZ2UuCi0gICAgYXNfdXRmODogUHJvZHVjZSB0ZXh0IG91dHB1dCBp
biBVVEY4IGZvcm1hdC4KLSAgICBhc19vbmVfbGluZTogRG9uJ3QgaW50cm9kdWNlIG5ld2xpbmVz
IGJldHdlZW4gZmllbGRzLgotICAgIHBvaW50eV9icmFja2V0czogSWYgVHJ1ZSwgdXNlIGFuZ2xl
IGJyYWNrZXRzIGluc3RlYWQgb2YgY3VybHkgYnJhY2VzIGZvcgotICAgICAgbmVzdGluZy4KLSAg
ICB1c2VfaW5kZXhfb3JkZXI6IElmIFRydWUsIHByaW50IGZpZWxkcyBvZiBhIHByb3RvIG1lc3Nh
Z2UgdXNpbmcgdGhlIG9yZGVyCi0gICAgICBkZWZpbmVkIGluIHNvdXJjZSBjb2RlIGluc3RlYWQg
b2YgdGhlIGZpZWxkIG51bWJlci4gQnkgZGVmYXVsdCwgdXNlIHRoZQotICAgICAgZmllbGQgbnVt
YmVyIG9yZGVyLgotICAgIGZsb2F0X2Zvcm1hdDogSWYgc2V0LCB1c2UgdGhpcyB0byBzcGVjaWZ5
IGZsb2F0aW5nIHBvaW50IG51bWJlciBmb3JtYXR0aW5nCi0gICAgICAocGVyIHRoZSAiRm9ybWF0
IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSIpOyBvdGhlcndpc2UsIHN0cigpIGlzIHVzZWQu
Ci0gICAgdXNlX2ZpZWxkX251bWJlcjogSWYgVHJ1ZSwgcHJpbnQgZmllbGQgbnVtYmVycyBpbnN0
ZWFkIG9mIG5hbWVzLgotCi0gIFJldHVybnM6Ci0gICAgQSBzdHJpbmcgb2YgdGhlIHRleHQgZm9y
bWF0dGVkIHByb3RvY29sIGJ1ZmZlciBtZXNzYWdlLgotICAiIiIKLSAgb3V0ID0gVGV4dFdyaXRl
cihhc191dGY4KQotICBwcmludGVyID0gX1ByaW50ZXIob3V0LCAwLCBhc191dGY4LCBhc19vbmVf
bGluZSwKLSAgICAgICAgICAgICAgICAgICAgIHBvaW50eV9icmFja2V0cywgdXNlX2luZGV4X29y
ZGVyLCBmbG9hdF9mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICB1c2VfZmllbGRfbnVtYmVy
KQotICBwcmludGVyLlByaW50TWVzc2FnZShtZXNzYWdlKQotICByZXN1bHQgPSBvdXQuZ2V0dmFs
dWUoKQotICBvdXQuY2xvc2UoKQotICBpZiBhc19vbmVfbGluZToKLSAgICByZXR1cm4gcmVzdWx0
LnJzdHJpcCgpCi0gIHJldHVybiByZXN1bHQKLQotCi1kZWYgX0lzTWFwRW50cnkoZmllbGQpOgot
ICByZXR1cm4gKGZpZWxkLnR5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9N
RVNTQUdFIGFuZAotICAgICAgICAgIGZpZWxkLm1lc3NhZ2VfdHlwZS5oYXNfb3B0aW9ucyBhbmQK
LSAgICAgICAgICBmaWVsZC5tZXNzYWdlX3R5cGUuR2V0T3B0aW9ucygpLm1hcF9lbnRyeSkKLQot
Ci1kZWYgUHJpbnRNZXNzYWdlKG1lc3NhZ2UsIG91dCwgaW5kZW50PTAsIGFzX3V0Zjg9RmFsc2Us
IGFzX29uZV9saW5lPUZhbHNlLAotICAgICAgICAgICAgICAgICBwb2ludHlfYnJhY2tldHM9RmFs
c2UsIHVzZV9pbmRleF9vcmRlcj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgZmxvYXRfZm9ybWF0
PU5vbmUsIHVzZV9maWVsZF9udW1iZXI9RmFsc2UpOgotICBwcmludGVyID0gX1ByaW50ZXIob3V0
LCBpbmRlbnQsIGFzX3V0ZjgsIGFzX29uZV9saW5lLAotICAgICAgICAgICAgICAgICAgICAgcG9p
bnR5X2JyYWNrZXRzLCB1c2VfaW5kZXhfb3JkZXIsIGZsb2F0X2Zvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgIHVzZV9maWVsZF9udW1iZXIpCi0gIHByaW50ZXIuUHJpbnRNZXNzYWdlKG1lc3Nh
Z2UpCi0KLQotZGVmIFByaW50RmllbGQoZmllbGQsIHZhbHVlLCBvdXQsIGluZGVudD0wLCBhc191
dGY4PUZhbHNlLCBhc19vbmVfbGluZT1GYWxzZSwKLSAgICAgICAgICAgICAgIHBvaW50eV9icmFj
a2V0cz1GYWxzZSwgdXNlX2luZGV4X29yZGVyPUZhbHNlLCBmbG9hdF9mb3JtYXQ9Tm9uZSk6Ci0g
ICIiIlByaW50IGEgc2luZ2xlIGZpZWxkIG5hbWUvdmFsdWUgcGFpci4iIiIKLSAgcHJpbnRlciA9
IF9QcmludGVyKG91dCwgaW5kZW50LCBhc191dGY4LCBhc19vbmVfbGluZSwKLSAgICAgICAgICAg
ICAgICAgICAgIHBvaW50eV9icmFja2V0cywgdXNlX2luZGV4X29yZGVyLCBmbG9hdF9mb3JtYXQp
Ci0gIHByaW50ZXIuUHJpbnRGaWVsZChmaWVsZCwgdmFsdWUpCi0KLQotZGVmIFByaW50RmllbGRW
YWx1ZShmaWVsZCwgdmFsdWUsIG91dCwgaW5kZW50PTAsIGFzX3V0Zjg9RmFsc2UsCi0gICAgICAg
ICAgICAgICAgICAgIGFzX29uZV9saW5lPUZhbHNlLCBwb2ludHlfYnJhY2tldHM9RmFsc2UsCi0g
ICAgICAgICAgICAgICAgICAgIHVzZV9pbmRleF9vcmRlcj1GYWxzZSwKLSAgICAgICAgICAgICAg
ICAgICAgZmxvYXRfZm9ybWF0PU5vbmUpOgotICAiIiJQcmludCBhIHNpbmdsZSBmaWVsZCB2YWx1
ZSAobm90IGluY2x1ZGluZyBuYW1lKS4iIiIKLSAgcHJpbnRlciA9IF9QcmludGVyKG91dCwgaW5k
ZW50LCBhc191dGY4LCBhc19vbmVfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgIHBvaW50eV9i
cmFja2V0cywgdXNlX2luZGV4X29yZGVyLCBmbG9hdF9mb3JtYXQpCi0gIHByaW50ZXIuUHJpbnRG
aWVsZFZhbHVlKGZpZWxkLCB2YWx1ZSkKLQotCi1jbGFzcyBfUHJpbnRlcihvYmplY3QpOgotICAi
IiJUZXh0IGZvcm1hdCBwcmludGVyIGZvciBwcm90b2NvbCBtZXNzYWdlLiIiIgotCi0gIGRlZiBf
X2luaXRfXyhzZWxmLCBvdXQsIGluZGVudD0wLCBhc191dGY4PUZhbHNlLCBhc19vbmVfbGluZT1G
YWxzZSwKLSAgICAgICAgICAgICAgIHBvaW50eV9icmFja2V0cz1GYWxzZSwgdXNlX2luZGV4X29y
ZGVyPUZhbHNlLCBmbG9hdF9mb3JtYXQ9Tm9uZSwKLSAgICAgICAgICAgICAgIHVzZV9maWVsZF9u
dW1iZXI9RmFsc2UpOgotICAgICIiIkluaXRpYWxpemUgdGhlIFByaW50ZXIuCi0KLSAgICBGbG9h
dGluZyBwb2ludCB2YWx1ZXMgY2FuIGJlIGZvcm1hdHRlZCBjb21wYWN0bHkgd2l0aCAxNSBkaWdp
dHMgb2YKLSAgICBwcmVjaXNpb24gKHdoaWNoIGlzIHRoZSBtb3N0IHRoYXQgSUVFRSA3NTQgImRv
dWJsZSIgY2FuIGd1YXJhbnRlZSkKLSAgICB1c2luZyBmbG9hdF9mb3JtYXQ9Jy4xNWcnLiBUbyBl
bnN1cmUgdGhhdCBjb252ZXJ0aW5nIHRvIHRleHQgYW5kIGJhY2sgdG8gYQotICAgIHByb3RvIHdp
bGwgcmVzdWx0IGluIGFuIGlkZW50aWNhbCB2YWx1ZSwgZmxvYXRfZm9ybWF0PScuMTdnJyBzaG91
bGQgYmUgdXNlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBvdXQ6IFRvIHJlY29yZCB0aGUgdGV4dCBm
b3JtYXQgcmVzdWx0LgotICAgICAgaW5kZW50OiBUaGUgaW5kZW50IGxldmVsIGZvciBwcmV0dHkg
cHJpbnQuCi0gICAgICBhc191dGY4OiBQcm9kdWNlIHRleHQgb3V0cHV0IGluIFVURjggZm9ybWF0
LgotICAgICAgYXNfb25lX2xpbmU6IERvbid0IGludHJvZHVjZSBuZXdsaW5lcyBiZXR3ZWVuIGZp
ZWxkcy4KLSAgICAgIHBvaW50eV9icmFja2V0czogSWYgVHJ1ZSwgdXNlIGFuZ2xlIGJyYWNrZXRz
IGluc3RlYWQgb2YgY3VybHkgYnJhY2VzIGZvcgotICAgICAgICBuZXN0aW5nLgotICAgICAgdXNl
X2luZGV4X29yZGVyOiBJZiBUcnVlLCBwcmludCBmaWVsZHMgb2YgYSBwcm90byBtZXNzYWdlIHVz
aW5nIHRoZSBvcmRlcgotICAgICAgICBkZWZpbmVkIGluIHNvdXJjZSBjb2RlIGluc3RlYWQgb2Yg
dGhlIGZpZWxkIG51bWJlci4gQnkgZGVmYXVsdCwgdXNlIHRoZQotICAgICAgICBmaWVsZCBudW1i
ZXIgb3JkZXIuCi0gICAgICBmbG9hdF9mb3JtYXQ6IElmIHNldCwgdXNlIHRoaXMgdG8gc3BlY2lm
eSBmbG9hdGluZyBwb2ludCBudW1iZXIgZm9ybWF0dGluZwotICAgICAgICAocGVyIHRoZSAiRm9y
bWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSIpOyBvdGhlcndpc2UsIHN0cigpIGlzCi0g
ICAgICAgIHVzZWQuCi0gICAgICB1c2VfZmllbGRfbnVtYmVyOiBJZiBUcnVlLCBwcmludCBmaWVs
ZCBudW1iZXJzIGluc3RlYWQgb2YgbmFtZXMuCi0gICAgIiIiCi0gICAgc2VsZi5vdXQgPSBvdXQK
LSAgICBzZWxmLmluZGVudCA9IGluZGVudAotICAgIHNlbGYuYXNfdXRmOCA9IGFzX3V0ZjgKLSAg
ICBzZWxmLmFzX29uZV9saW5lID0gYXNfb25lX2xpbmUKLSAgICBzZWxmLnBvaW50eV9icmFja2V0
cyA9IHBvaW50eV9icmFja2V0cwotICAgIHNlbGYudXNlX2luZGV4X29yZGVyID0gdXNlX2luZGV4
X29yZGVyCi0gICAgc2VsZi5mbG9hdF9mb3JtYXQgPSBmbG9hdF9mb3JtYXQKLSAgICBzZWxmLnVz
ZV9maWVsZF9udW1iZXIgPSB1c2VfZmllbGRfbnVtYmVyCi0KLSAgZGVmIFByaW50TWVzc2FnZShz
ZWxmLCBtZXNzYWdlKToKLSAgICAiIiJDb252ZXJ0IHByb3RvYnVmIG1lc3NhZ2UgdG8gdGV4dCBm
b3JtYXQuCi0KLSAgICBBcmdzOgotICAgICAgbWVzc2FnZTogVGhlIHByb3RvY29sIGJ1ZmZlcnMg
bWVzc2FnZS4KLSAgICAiIiIKLSAgICBmaWVsZHMgPSBtZXNzYWdlLkxpc3RGaWVsZHMoKQotICAg
IGlmIHNlbGYudXNlX2luZGV4X29yZGVyOgotICAgICAgZmllbGRzLnNvcnQoa2V5PWxhbWJkYSB4
OiB4WzBdLmluZGV4KQotICAgIGZvciBmaWVsZCwgdmFsdWUgaW4gZmllbGRzOgotICAgICAgaWYg
X0lzTWFwRW50cnkoZmllbGQpOgotICAgICAgICBmb3Iga2V5IGluIHNvcnRlZCh2YWx1ZSk6Ci0g
ICAgICAgICAgIyBUaGlzIGlzIHNsb3cgZm9yIG1hcHMgd2l0aCBzdWJtZXNzYWdlIGVudGlyZXMg
YmVjYXVzZSBpdCBjb3BpZXMgdGhlCi0gICAgICAgICAgIyBlbnRpcmUgdHJlZS4gIFVuZm9ydHVu
YXRlbHkgdGhpcyB3b3VsZCB0YWtlIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nCi0gICAgICAgICAg
IyBvZiB0aGlzIGZpbGUgdG8gd29yayBhcm91bmQuCi0gICAgICAgICAgIwotICAgICAgICAgICMg
VE9ETyhoYWJlcm1hbik6IHJlZmFjdG9yIGFuZCBvcHRpbWl6ZSBpZiB0aGlzIGJlY29tZXMgYW4g
aXNzdWUuCi0gICAgICAgICAgZW50cnlfc3VibXNnID0gZmllbGQubWVzc2FnZV90eXBlLl9jb25j
cmV0ZV9jbGFzcygKLSAgICAgICAgICAgICAga2V5PWtleSwgdmFsdWU9dmFsdWVba2V5XSkKLSAg
ICAgICAgICBzZWxmLlByaW50RmllbGQoZmllbGQsIGVudHJ5X3N1Ym1zZykKLSAgICAgIGVsaWYg
ZmllbGQubGFiZWwgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQ6
Ci0gICAgICAgIGZvciBlbGVtZW50IGluIHZhbHVlOgotICAgICAgICAgIHNlbGYuUHJpbnRGaWVs
ZChmaWVsZCwgZWxlbWVudCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHNlbGYuUHJpbnRGaWVsZChm
aWVsZCwgdmFsdWUpCi0KLSAgZGVmIFByaW50RmllbGQoc2VsZiwgZmllbGQsIHZhbHVlKToKLSAg
ICAiIiJQcmludCBhIHNpbmdsZSBmaWVsZCBuYW1lL3ZhbHVlIHBhaXIuIiIiCi0gICAgb3V0ID0g
c2VsZi5vdXQKLSAgICBvdXQud3JpdGUoJyAnICogc2VsZi5pbmRlbnQpCi0gICAgaWYgc2VsZi51
c2VfZmllbGRfbnVtYmVyOgotICAgICAgb3V0LndyaXRlKHN0cihmaWVsZC5udW1iZXIpKQotICAg
IGVsc2U6Ci0gICAgICBpZiBmaWVsZC5pc19leHRlbnNpb246Ci0gICAgICAgIG91dC53cml0ZSgn
WycpCi0gICAgICAgIGlmIChmaWVsZC5jb250YWluaW5nX3R5cGUuR2V0T3B0aW9ucygpLm1lc3Nh
Z2Vfc2V0X3dpcmVfZm9ybWF0IGFuZAotICAgICAgICAgICAgZmllbGQudHlwZSA9PSBkZXNjcmlw
dG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX01FU1NBR0UgYW5kCi0gICAgICAgICAgICBmaWVsZC5s
YWJlbCA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5MQUJFTF9PUFRJT05BTCk6Ci0gICAg
ICAgICAgb3V0LndyaXRlKGZpZWxkLm1lc3NhZ2VfdHlwZS5mdWxsX25hbWUpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgb3V0LndyaXRlKGZpZWxkLmZ1bGxfbmFtZSkKLSAgICAgICAgb3V0Lndy
aXRlKCddJykKLSAgICAgIGVsaWYgZmllbGQudHlwZSA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3Jp
cHRvci5UWVBFX0dST1VQOgotICAgICAgICAjIEZvciBncm91cHMsIHVzZSB0aGUgY2FwaXRhbGl6
ZWQgbmFtZS4KLSAgICAgICAgb3V0LndyaXRlKGZpZWxkLm1lc3NhZ2VfdHlwZS5uYW1lKQotICAg
ICAgZWxzZToKLSAgICAgICAgb3V0LndyaXRlKGZpZWxkLm5hbWUpCi0KLSAgICBpZiBmaWVsZC5j
cHBfdHlwZSAhPSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0U6Ci0g
ICAgICAjIFRoZSBjb2xvbiBpcyBvcHRpb25hbCBpbiB0aGlzIGNhc2UsIGJ1dCBvdXIgY3Jvc3Mt
bGFuZ3VhZ2UgZ29sZGVuIGZpbGVzCi0gICAgICAjIGRvbid0IGluY2x1ZGUgaXQuCi0gICAgICBv
dXQud3JpdGUoJzogJykKLQotICAgIHNlbGYuUHJpbnRGaWVsZFZhbHVlKGZpZWxkLCB2YWx1ZSkK
LSAgICBpZiBzZWxmLmFzX29uZV9saW5lOgotICAgICAgb3V0LndyaXRlKCcgJykKLSAgICBlbHNl
OgotICAgICAgb3V0LndyaXRlKCdcbicpCi0KLSAgZGVmIFByaW50RmllbGRWYWx1ZShzZWxmLCBm
aWVsZCwgdmFsdWUpOgotICAgICIiIlByaW50IGEgc2luZ2xlIGZpZWxkIHZhbHVlIChub3QgaW5j
bHVkaW5nIG5hbWUpLgotCi0gICAgRm9yIHJlcGVhdGVkIGZpZWxkcywgdGhlIHZhbHVlIHNob3Vs
ZCBiZSBhIHNpbmdsZSBlbGVtZW50LgotCi0gICAgQXJnczoKLSAgICAgIGZpZWxkOiBUaGUgZGVz
Y3JpcHRvciBvZiB0aGUgZmllbGQgdG8gYmUgcHJpbnRlZC4KLSAgICAgIHZhbHVlOiBUaGUgdmFs
dWUgb2YgdGhlIGZpZWxkLgotICAgICIiIgotICAgIG91dCA9IHNlbGYub3V0Ci0gICAgaWYgc2Vs
Zi5wb2ludHlfYnJhY2tldHM6Ci0gICAgICBvcGVuYiA9ICc8JwotICAgICAgY2xvc2ViID0gJz4n
Ci0gICAgZWxzZToKLSAgICAgIG9wZW5iID0gJ3snCi0gICAgICBjbG9zZWIgPSAnfScKLQotICAg
IGlmIGZpZWxkLmNwcF90eXBlID09IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZUEVf
TUVTU0FHRToKLSAgICAgIGlmIHNlbGYuYXNfb25lX2xpbmU6Ci0gICAgICAgIG91dC53cml0ZSgn
ICVzICcgJSBvcGVuYikKLSAgICAgICAgc2VsZi5QcmludE1lc3NhZ2UodmFsdWUpCi0gICAgICAg
IG91dC53cml0ZShjbG9zZWIpCi0gICAgICBlbHNlOgotICAgICAgICBvdXQud3JpdGUoJyAlc1xu
JyAlIG9wZW5iKQotICAgICAgICBzZWxmLmluZGVudCArPSAyCi0gICAgICAgIHNlbGYuUHJpbnRN
ZXNzYWdlKHZhbHVlKQotICAgICAgICBzZWxmLmluZGVudCAtPSAyCi0gICAgICAgIG91dC53cml0
ZSgnICcgKiBzZWxmLmluZGVudCArIGNsb3NlYikKLSAgICBlbGlmIGZpZWxkLmNwcF90eXBlID09
IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLkNQUFRZUEVfRU5VTToKLSAgICAgIGVudW1fdmFs
dWUgPSBmaWVsZC5lbnVtX3R5cGUudmFsdWVzX2J5X251bWJlci5nZXQodmFsdWUsIE5vbmUpCi0g
ICAgICBpZiBlbnVtX3ZhbHVlIGlzIG5vdCBOb25lOgotICAgICAgICBvdXQud3JpdGUoZW51bV92
YWx1ZS5uYW1lKQotICAgICAgZWxzZToKLSAgICAgICAgb3V0LndyaXRlKHN0cih2YWx1ZSkpCi0g
ICAgZWxpZiBmaWVsZC5jcHBfdHlwZSA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBU
WVBFX1NUUklORzoKLSAgICAgIG91dC53cml0ZSgnXCInKQotICAgICAgaWYgaXNpbnN0YW5jZSh2
YWx1ZSwgc2l4LnRleHRfdHlwZSk6Ci0gICAgICAgIG91dF92YWx1ZSA9IHZhbHVlLmVuY29kZSgn
dXRmLTgnKQotICAgICAgZWxzZToKLSAgICAgICAgb3V0X3ZhbHVlID0gdmFsdWUKLSAgICAgIGlm
IGZpZWxkLnR5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9CWVRFUzoKLSAg
ICAgICAgIyBXZSBuZWVkIHRvIGVzY2FwZSBub24tVVRGOCBjaGFycyBpbiBUWVBFX0JZVEVTIGZp
ZWxkLgotICAgICAgICBvdXRfYXNfdXRmOCA9IEZhbHNlCi0gICAgICBlbHNlOgotICAgICAgICBv
dXRfYXNfdXRmOCA9IHNlbGYuYXNfdXRmOAotICAgICAgb3V0LndyaXRlKHRleHRfZW5jb2Rpbmcu
Q0VzY2FwZShvdXRfdmFsdWUsIG91dF9hc191dGY4KSkKLSAgICAgIG91dC53cml0ZSgnXCInKQot
ICAgIGVsaWYgZmllbGQuY3BwX3R5cGUgPT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuQ1BQ
VFlQRV9CT09MOgotICAgICAgaWYgdmFsdWU6Ci0gICAgICAgIG91dC53cml0ZSgndHJ1ZScpCi0g
ICAgICBlbHNlOgotICAgICAgICBvdXQud3JpdGUoJ2ZhbHNlJykKLSAgICBlbGlmIGZpZWxkLmNw
cF90eXBlIGluIF9GTE9BVF9UWVBFUyBhbmQgc2VsZi5mbG9hdF9mb3JtYXQgaXMgbm90IE5vbmU6
Ci0gICAgICBvdXQud3JpdGUoJ3sxOnswfX0nLmZvcm1hdChzZWxmLmZsb2F0X2Zvcm1hdCwgdmFs
dWUpKQotICAgIGVsc2U6Ci0gICAgICBvdXQud3JpdGUoc3RyKHZhbHVlKSkKLQotCi1kZWYgUGFy
c2UodGV4dCwgbWVzc2FnZSwKLSAgICAgICAgICBhbGxvd191bmtub3duX2V4dGVuc2lvbj1GYWxz
ZSwgYWxsb3dfZmllbGRfbnVtYmVyPUZhbHNlKToKLSAgIiIiUGFyc2VzIGFuIHRleHQgcmVwcmVz
ZW50YXRpb24gb2YgYSBwcm90b2NvbCBtZXNzYWdlIGludG8gYSBtZXNzYWdlLgotCi0gIEFyZ3M6
Ci0gICAgdGV4dDogTWVzc2FnZSB0ZXh0IHJlcHJlc2VudGF0aW9uLgotICAgIG1lc3NhZ2U6IEEg
cHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2UgdG8gbWVyZ2UgaW50by4KLSAgICBhbGxvd191bmtub3du
X2V4dGVuc2lvbjogaWYgVHJ1ZSwgc2tpcCBvdmVyIG1pc3NpbmcgZXh0ZW5zaW9ucyBhbmQga2Vl
cAotICAgICAgcGFyc2luZwotICAgIGFsbG93X2ZpZWxkX251bWJlcjogaWYgVHJ1ZSwgYm90aCBm
aWVsZCBudW1iZXIgYW5kIGZpZWxkIG5hbWUgYXJlIGFsbG93ZWQuCi0KLSAgUmV0dXJuczoKLSAg
ICBUaGUgc2FtZSBtZXNzYWdlIHBhc3NlZCBhcyBhcmd1bWVudC4KLQotICBSYWlzZXM6Ci0gICAg
UGFyc2VFcnJvcjogT24gdGV4dCBwYXJzaW5nIHByb2JsZW1zLgotICAiIiIKLSAgaWYgbm90IGlz
aW5zdGFuY2UodGV4dCwgc3RyKToKLSAgICB0ZXh0ID0gdGV4dC5kZWNvZGUoJ3V0Zi04JykKLSAg
cmV0dXJuIFBhcnNlTGluZXModGV4dC5zcGxpdCgnXG4nKSwgbWVzc2FnZSwgYWxsb3dfdW5rbm93
bl9leHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICAgIGFsbG93X2ZpZWxkX251bWJlcikKLQot
Ci1kZWYgTWVyZ2UodGV4dCwgbWVzc2FnZSwgYWxsb3dfdW5rbm93bl9leHRlbnNpb249RmFsc2Us
Ci0gICAgICAgICAgYWxsb3dfZmllbGRfbnVtYmVyPUZhbHNlKToKLSAgIiIiUGFyc2VzIGFuIHRl
eHQgcmVwcmVzZW50YXRpb24gb2YgYSBwcm90b2NvbCBtZXNzYWdlIGludG8gYSBtZXNzYWdlLgot
Ci0gIExpa2UgUGFyc2UoKSwgYnV0IGFsbG93cyByZXBlYXRlZCB2YWx1ZXMgZm9yIGEgbm9uLXJl
cGVhdGVkIGZpZWxkLCBhbmQgdXNlcwotICB0aGUgbGFzdCBvbmUuCi0KLSAgQXJnczoKLSAgICB0
ZXh0OiBNZXNzYWdlIHRleHQgcmVwcmVzZW50YXRpb24uCi0gICAgbWVzc2FnZTogQSBwcm90b2Nv
bCBidWZmZXIgbWVzc2FnZSB0byBtZXJnZSBpbnRvLgotICAgIGFsbG93X3Vua25vd25fZXh0ZW5z
aW9uOiBpZiBUcnVlLCBza2lwIG92ZXIgbWlzc2luZyBleHRlbnNpb25zIGFuZCBrZWVwCi0gICAg
ICBwYXJzaW5nCi0gICAgYWxsb3dfZmllbGRfbnVtYmVyOiBpZiBUcnVlLCBib3RoIGZpZWxkIG51
bWJlciBhbmQgZmllbGQgbmFtZSBhcmUgYWxsb3dlZC4KLQotICBSZXR1cm5zOgotICAgIFRoZSBz
YW1lIG1lc3NhZ2UgcGFzc2VkIGFzIGFyZ3VtZW50LgotCi0gIFJhaXNlczoKLSAgICBQYXJzZUVy
cm9yOiBPbiB0ZXh0IHBhcnNpbmcgcHJvYmxlbXMuCi0gICIiIgotICByZXR1cm4gTWVyZ2VMaW5l
cyh0ZXh0LnNwbGl0KCdcbicpLCBtZXNzYWdlLCBhbGxvd191bmtub3duX2V4dGVuc2lvbiwKLSAg
ICAgICAgICAgICAgICAgICAgYWxsb3dfZmllbGRfbnVtYmVyKQotCi0KLWRlZiBQYXJzZUxpbmVz
KGxpbmVzLCBtZXNzYWdlLCBhbGxvd191bmtub3duX2V4dGVuc2lvbj1GYWxzZSwKLSAgICAgICAg
ICAgICAgIGFsbG93X2ZpZWxkX251bWJlcj1GYWxzZSk6Ci0gICIiIlBhcnNlcyBhbiB0ZXh0IHJl
cHJlc2VudGF0aW9uIG9mIGEgcHJvdG9jb2wgbWVzc2FnZSBpbnRvIGEgbWVzc2FnZS4KLQotICBB
cmdzOgotICAgIGxpbmVzOiBBbiBpdGVyYWJsZSBvZiBsaW5lcyBvZiBhIG1lc3NhZ2UncyB0ZXh0
IHJlcHJlc2VudGF0aW9uLgotICAgIG1lc3NhZ2U6IEEgcHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2Ug
dG8gbWVyZ2UgaW50by4KLSAgICBhbGxvd191bmtub3duX2V4dGVuc2lvbjogaWYgVHJ1ZSwgc2tp
cCBvdmVyIG1pc3NpbmcgZXh0ZW5zaW9ucyBhbmQga2VlcAotICAgICAgcGFyc2luZwotICAgIGFs
bG93X2ZpZWxkX251bWJlcjogaWYgVHJ1ZSwgYm90aCBmaWVsZCBudW1iZXIgYW5kIGZpZWxkIG5h
bWUgYXJlIGFsbG93ZWQuCi0KLSAgUmV0dXJuczoKLSAgICBUaGUgc2FtZSBtZXNzYWdlIHBhc3Nl
ZCBhcyBhcmd1bWVudC4KLQotICBSYWlzZXM6Ci0gICAgUGFyc2VFcnJvcjogT24gdGV4dCBwYXJz
aW5nIHByb2JsZW1zLgotICAiIiIKLSAgcGFyc2VyID0gX1BhcnNlcihhbGxvd191bmtub3duX2V4
dGVuc2lvbiwgYWxsb3dfZmllbGRfbnVtYmVyKQotICByZXR1cm4gcGFyc2VyLlBhcnNlTGluZXMo
bGluZXMsIG1lc3NhZ2UpCi0KLQotZGVmIE1lcmdlTGluZXMobGluZXMsIG1lc3NhZ2UsIGFsbG93
X3Vua25vd25fZXh0ZW5zaW9uPUZhbHNlLAotICAgICAgICAgICAgICAgYWxsb3dfZmllbGRfbnVt
YmVyPUZhbHNlKToKLSAgIiIiUGFyc2VzIGFuIHRleHQgcmVwcmVzZW50YXRpb24gb2YgYSBwcm90
b2NvbCBtZXNzYWdlIGludG8gYSBtZXNzYWdlLgotCi0gIEFyZ3M6Ci0gICAgbGluZXM6IEFuIGl0
ZXJhYmxlIG9mIGxpbmVzIG9mIGEgbWVzc2FnZSdzIHRleHQgcmVwcmVzZW50YXRpb24uCi0gICAg
bWVzc2FnZTogQSBwcm90b2NvbCBidWZmZXIgbWVzc2FnZSB0byBtZXJnZSBpbnRvLgotICAgIGFs
bG93X3Vua25vd25fZXh0ZW5zaW9uOiBpZiBUcnVlLCBza2lwIG92ZXIgbWlzc2luZyBleHRlbnNp
b25zIGFuZCBrZWVwCi0gICAgICBwYXJzaW5nCi0gICAgYWxsb3dfZmllbGRfbnVtYmVyOiBpZiBU
cnVlLCBib3RoIGZpZWxkIG51bWJlciBhbmQgZmllbGQgbmFtZSBhcmUgYWxsb3dlZC4KLQotICBS
ZXR1cm5zOgotICAgIFRoZSBzYW1lIG1lc3NhZ2UgcGFzc2VkIGFzIGFyZ3VtZW50LgotCi0gIFJh
aXNlczoKLSAgICBQYXJzZUVycm9yOiBPbiB0ZXh0IHBhcnNpbmcgcHJvYmxlbXMuCi0gICIiIgot
ICBwYXJzZXIgPSBfUGFyc2VyKGFsbG93X3Vua25vd25fZXh0ZW5zaW9uLCBhbGxvd19maWVsZF9u
dW1iZXIpCi0gIHJldHVybiBwYXJzZXIuTWVyZ2VMaW5lcyhsaW5lcywgbWVzc2FnZSkKLQotCi1j
bGFzcyBfUGFyc2VyKG9iamVjdCk6Ci0gICIiIlRleHQgZm9ybWF0IHBhcnNlciBmb3IgcHJvdG9j
b2wgbWVzc2FnZS4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgYWxsb3dfdW5rbm93bl9leHRl
bnNpb249RmFsc2UsIGFsbG93X2ZpZWxkX251bWJlcj1GYWxzZSk6Ci0gICAgc2VsZi5hbGxvd191
bmtub3duX2V4dGVuc2lvbiA9IGFsbG93X3Vua25vd25fZXh0ZW5zaW9uCi0gICAgc2VsZi5hbGxv
d19maWVsZF9udW1iZXIgPSBhbGxvd19maWVsZF9udW1iZXIKLQotICBkZWYgUGFyc2VGcm9tU3Ry
aW5nKHNlbGYsIHRleHQsIG1lc3NhZ2UpOgotICAgICIiIlBhcnNlcyBhbiB0ZXh0IHJlcHJlc2Vu
dGF0aW9uIG9mIGEgcHJvdG9jb2wgbWVzc2FnZSBpbnRvIGEgbWVzc2FnZS4iIiIKLSAgICBpZiBu
b3QgaXNpbnN0YW5jZSh0ZXh0LCBzdHIpOgotICAgICAgdGV4dCA9IHRleHQuZGVjb2RlKCd1dGYt
OCcpCi0gICAgcmV0dXJuIHNlbGYuUGFyc2VMaW5lcyh0ZXh0LnNwbGl0KCdcbicpLCBtZXNzYWdl
KQotCi0gIGRlZiBQYXJzZUxpbmVzKHNlbGYsIGxpbmVzLCBtZXNzYWdlKToKLSAgICAiIiJQYXJz
ZXMgYW4gdGV4dCByZXByZXNlbnRhdGlvbiBvZiBhIHByb3RvY29sIG1lc3NhZ2UgaW50byBhIG1l
c3NhZ2UuIiIiCi0gICAgc2VsZi5fYWxsb3dfbXVsdGlwbGVfc2NhbGFycyA9IEZhbHNlCi0gICAg
c2VsZi5fUGFyc2VPck1lcmdlKGxpbmVzLCBtZXNzYWdlKQotICAgIHJldHVybiBtZXNzYWdlCi0K
LSAgZGVmIE1lcmdlRnJvbVN0cmluZyhzZWxmLCB0ZXh0LCBtZXNzYWdlKToKLSAgICAiIiJNZXJn
ZXMgYW4gdGV4dCByZXByZXNlbnRhdGlvbiBvZiBhIHByb3RvY29sIG1lc3NhZ2UgaW50byBhIG1l
c3NhZ2UuIiIiCi0gICAgcmV0dXJuIHNlbGYuX01lcmdlTGluZXModGV4dC5zcGxpdCgnXG4nKSwg
bWVzc2FnZSkKLQotICBkZWYgTWVyZ2VMaW5lcyhzZWxmLCBsaW5lcywgbWVzc2FnZSk6Ci0gICAg
IiIiTWVyZ2VzIGFuIHRleHQgcmVwcmVzZW50YXRpb24gb2YgYSBwcm90b2NvbCBtZXNzYWdlIGlu
dG8gYSBtZXNzYWdlLiIiIgotICAgIHNlbGYuX2FsbG93X211bHRpcGxlX3NjYWxhcnMgPSBUcnVl
Ci0gICAgc2VsZi5fUGFyc2VPck1lcmdlKGxpbmVzLCBtZXNzYWdlKQotICAgIHJldHVybiBtZXNz
YWdlCi0KLSAgZGVmIF9QYXJzZU9yTWVyZ2Uoc2VsZiwgbGluZXMsIG1lc3NhZ2UpOgotICAgICIi
IkNvbnZlcnRzIGFuIHRleHQgcmVwcmVzZW50YXRpb24gb2YgYSBwcm90b2NvbCBtZXNzYWdlIGlu
dG8gYSBtZXNzYWdlLgotCi0gICAgQXJnczoKLSAgICAgIGxpbmVzOiBMaW5lcyBvZiBhIG1lc3Nh
Z2UncyB0ZXh0IHJlcHJlc2VudGF0aW9uLgotICAgICAgbWVzc2FnZTogQSBwcm90b2NvbCBidWZm
ZXIgbWVzc2FnZSB0byBtZXJnZSBpbnRvLgotCi0gICAgUmFpc2VzOgotICAgICAgUGFyc2VFcnJv
cjogT24gdGV4dCBwYXJzaW5nIHByb2JsZW1zLgotICAgICIiIgotICAgIHRva2VuaXplciA9IF9U
b2tlbml6ZXIobGluZXMpCi0gICAgd2hpbGUgbm90IHRva2VuaXplci5BdEVuZCgpOgotICAgICAg
c2VsZi5fTWVyZ2VGaWVsZCh0b2tlbml6ZXIsIG1lc3NhZ2UpCi0KLSAgZGVmIF9NZXJnZUZpZWxk
KHNlbGYsIHRva2VuaXplciwgbWVzc2FnZSk6Ci0gICAgIiIiTWVyZ2VzIGEgc2luZ2xlIHByb3Rv
Y29sIG1lc3NhZ2UgZmllbGQgaW50byBhIG1lc3NhZ2UuCi0KLSAgICBBcmdzOgotICAgICAgdG9r
ZW5pemVyOiBBIHRva2VuaXplciB0byBwYXJzZSB0aGUgZmllbGQgbmFtZSBhbmQgdmFsdWVzLgot
ICAgICAgbWVzc2FnZTogQSBwcm90b2NvbCBtZXNzYWdlIHRvIHJlY29yZCB0aGUgZGF0YS4KLQot
ICAgIFJhaXNlczoKLSAgICAgIFBhcnNlRXJyb3I6IEluIGNhc2Ugb2YgdGV4dCBwYXJzaW5nIHBy
b2JsZW1zLgotICAgICIiIgotICAgIG1lc3NhZ2VfZGVzY3JpcHRvciA9IG1lc3NhZ2UuREVTQ1JJ
UFRPUgotICAgIGlmIChoYXNhdHRyKG1lc3NhZ2VfZGVzY3JpcHRvciwgJ3N5bnRheCcpIGFuZAot
ICAgICAgICBtZXNzYWdlX2Rlc2NyaXB0b3Iuc3ludGF4ID09ICdwcm90bzMnKToKLSAgICAgICMg
UHJvdG8zIGRvZXNuJ3QgcmVwcmVzZW50IHByZXNlbmNlIHNvIHdlIGNhbid0IHRlc3QgaWYgbXVs
dGlwbGUKLSAgICAgICMgc2NhbGFycyBoYXZlIG9jY3VycmVkLiAgV2UgaGF2ZSB0byBhbGxvdyB0
aGVtLgotICAgICAgc2VsZi5fYWxsb3dfbXVsdGlwbGVfc2NhbGFycyA9IFRydWUKLSAgICBpZiB0
b2tlbml6ZXIuVHJ5Q29uc3VtZSgnWycpOgotICAgICAgbmFtZSA9IFt0b2tlbml6ZXIuQ29uc3Vt
ZUlkZW50aWZpZXIoKV0KLSAgICAgIHdoaWxlIHRva2VuaXplci5UcnlDb25zdW1lKCcuJyk6Ci0g
ICAgICAgIG5hbWUuYXBwZW5kKHRva2VuaXplci5Db25zdW1lSWRlbnRpZmllcigpKQotICAgICAg
bmFtZSA9ICcuJy5qb2luKG5hbWUpCi0KLSAgICAgIGlmIG5vdCBtZXNzYWdlX2Rlc2NyaXB0b3Iu
aXNfZXh0ZW5kYWJsZToKLSAgICAgICAgcmFpc2UgdG9rZW5pemVyLlBhcnNlRXJyb3JQcmV2aW91
c1Rva2VuKAotICAgICAgICAgICAgJ01lc3NhZ2UgdHlwZSAiJXMiIGRvZXMgbm90IGhhdmUgZXh0
ZW5zaW9ucy4nICUKLSAgICAgICAgICAgIG1lc3NhZ2VfZGVzY3JpcHRvci5mdWxsX25hbWUpCi0g
ICAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgICBmaWVsZCA9IG1l
c3NhZ2UuRXh0ZW5zaW9ucy5fRmluZEV4dGVuc2lvbkJ5TmFtZShuYW1lKQotICAgICAgIyBweWxp
bnQ6IGVuYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgICBpZiBub3QgZmllbGQ6Ci0gICAgICAg
IGlmIHNlbGYuYWxsb3dfdW5rbm93bl9leHRlbnNpb246Ci0gICAgICAgICAgZmllbGQgPSBOb25l
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcmFpc2UgdG9rZW5pemVyLlBhcnNlRXJyb3JQcmV2
aW91c1Rva2VuKAotICAgICAgICAgICAgICAnRXh0ZW5zaW9uICIlcyIgbm90IHJlZ2lzdGVyZWQu
JyAlIG5hbWUpCi0gICAgICBlbGlmIG1lc3NhZ2VfZGVzY3JpcHRvciAhPSBmaWVsZC5jb250YWlu
aW5nX3R5cGU6Ci0gICAgICAgIHJhaXNlIHRva2VuaXplci5QYXJzZUVycm9yUHJldmlvdXNUb2tl
bigKLSAgICAgICAgICAgICdFeHRlbnNpb24gIiVzIiBkb2VzIG5vdCBleHRlbmQgbWVzc2FnZSB0
eXBlICIlcyIuJyAlICgKLSAgICAgICAgICAgICAgICBuYW1lLCBtZXNzYWdlX2Rlc2NyaXB0b3Iu
ZnVsbF9uYW1lKSkKLQotICAgICAgdG9rZW5pemVyLkNvbnN1bWUoJ10nKQotCi0gICAgZWxzZToK
LSAgICAgIG5hbWUgPSB0b2tlbml6ZXIuQ29uc3VtZUlkZW50aWZpZXIoKQotICAgICAgaWYgc2Vs
Zi5hbGxvd19maWVsZF9udW1iZXIgYW5kIG5hbWUuaXNkaWdpdCgpOgotICAgICAgICBudW1iZXIg
PSBQYXJzZUludGVnZXIobmFtZSwgVHJ1ZSwgVHJ1ZSkKLSAgICAgICAgZmllbGQgPSBtZXNzYWdl
X2Rlc2NyaXB0b3IuZmllbGRzX2J5X251bWJlci5nZXQobnVtYmVyLCBOb25lKQotICAgICAgICBp
ZiBub3QgZmllbGQgYW5kIG1lc3NhZ2VfZGVzY3JpcHRvci5pc19leHRlbmRhYmxlOgotICAgICAg
ICAgIGZpZWxkID0gbWVzc2FnZS5FeHRlbnNpb25zLl9GaW5kRXh0ZW5zaW9uQnlOdW1iZXIobnVt
YmVyKQotICAgICAgZWxzZToKLSAgICAgICAgZmllbGQgPSBtZXNzYWdlX2Rlc2NyaXB0b3IuZmll
bGRzX2J5X25hbWUuZ2V0KG5hbWUsIE5vbmUpCi0KLSAgICAgICAgIyBHcm91cCBuYW1lcyBhcmUg
ZXhwZWN0ZWQgdG8gYmUgY2FwaXRhbGl6ZWQgYXMgdGhleSBhcHBlYXIgaW4gdGhlCi0gICAgICAg
ICMgLnByb3RvIGZpbGUsIHdoaWNoIGFjdHVhbGx5IG1hdGNoZXMgdGhlaXIgdHlwZSBuYW1lcywg
bm90IHRoZWlyIGZpZWxkCi0gICAgICAgICMgbmFtZXMuCi0gICAgICAgIGlmIG5vdCBmaWVsZDoK
LSAgICAgICAgICBmaWVsZCA9IG1lc3NhZ2VfZGVzY3JpcHRvci5maWVsZHNfYnlfbmFtZS5nZXQo
bmFtZS5sb3dlcigpLCBOb25lKQotICAgICAgICAgIGlmIGZpZWxkIGFuZCBmaWVsZC50eXBlICE9
IGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfR1JPVVA6Ci0gICAgICAgICAgICBmaWVs
ZCA9IE5vbmUKLQotICAgICAgICBpZiAoZmllbGQgYW5kIGZpZWxkLnR5cGUgPT0gZGVzY3JpcHRv
ci5GaWVsZERlc2NyaXB0b3IuVFlQRV9HUk9VUCBhbmQKLSAgICAgICAgICAgIGZpZWxkLm1lc3Nh
Z2VfdHlwZS5uYW1lICE9IG5hbWUpOgotICAgICAgICAgIGZpZWxkID0gTm9uZQotCi0gICAgICBp
ZiBub3QgZmllbGQ6Ci0gICAgICAgIHJhaXNlIHRva2VuaXplci5QYXJzZUVycm9yUHJldmlvdXNU
b2tlbigKLSAgICAgICAgICAgICdNZXNzYWdlIHR5cGUgIiVzIiBoYXMgbm8gZmllbGQgbmFtZWQg
IiVzIi4nICUgKAotICAgICAgICAgICAgICAgIG1lc3NhZ2VfZGVzY3JpcHRvci5mdWxsX25hbWUs
IG5hbWUpKQotCi0gICAgaWYgZmllbGQ6Ci0gICAgICBpZiBub3Qgc2VsZi5fYWxsb3dfbXVsdGlw
bGVfc2NhbGFycyBhbmQgZmllbGQuY29udGFpbmluZ19vbmVvZjoKLSAgICAgICAgIyBDaGVjayBp
ZiB0aGVyZSdzIGEgZGlmZmVyZW50IGZpZWxkIHNldCBpbiB0aGlzIG9uZW9mLgotICAgICAgICAj
IE5vdGUgdGhhdCB3ZSBpZ25vcmUgdGhlIGNhc2UgaWYgdGhlIHNhbWUgZmllbGQgd2FzIHNldCBi
ZWZvcmUsIGFuZCB3ZQotICAgICAgICAjIGFwcGx5IF9hbGxvd19tdWx0aXBsZV9zY2FsYXJzIHRv
IG5vbi1zY2FsYXIgZmllbGRzIGFzIHdlbGwuCi0gICAgICAgIHdoaWNoX29uZW9mID0gbWVzc2Fn
ZS5XaGljaE9uZW9mKGZpZWxkLmNvbnRhaW5pbmdfb25lb2YubmFtZSkKLSAgICAgICAgaWYgd2hp
Y2hfb25lb2YgaXMgbm90IE5vbmUgYW5kIHdoaWNoX29uZW9mICE9IGZpZWxkLm5hbWU6Ci0gICAg
ICAgICAgcmFpc2UgdG9rZW5pemVyLlBhcnNlRXJyb3JQcmV2aW91c1Rva2VuKAotICAgICAgICAg
ICAgICAnRmllbGQgIiVzIiBpcyBzcGVjaWZpZWQgYWxvbmcgd2l0aCBmaWVsZCAiJXMiLCBhbm90
aGVyIG1lbWJlciAnCi0gICAgICAgICAgICAgICdvZiBvbmVvZiAiJXMiIGZvciBtZXNzYWdlIHR5
cGUgIiVzIi4nICUgKAotICAgICAgICAgICAgICAgICAgZmllbGQubmFtZSwgd2hpY2hfb25lb2Ys
IGZpZWxkLmNvbnRhaW5pbmdfb25lb2YubmFtZSwKLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vf
ZGVzY3JpcHRvci5mdWxsX25hbWUpKQotCi0gICAgICBpZiBmaWVsZC5jcHBfdHlwZSA9PSBkZXNj
cmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgIHRva2VuaXpl
ci5UcnlDb25zdW1lKCc6JykKLSAgICAgICAgbWVyZ2VyID0gc2VsZi5fTWVyZ2VNZXNzYWdlRmll
bGQKLSAgICAgIGVsc2U6Ci0gICAgICAgIHRva2VuaXplci5Db25zdW1lKCc6JykKLSAgICAgICAg
bWVyZ2VyID0gc2VsZi5fTWVyZ2VTY2FsYXJGaWVsZAotCi0gICAgICBpZiAoZmllbGQubGFiZWwg
PT0gZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQKLSAgICAgICAgICBh
bmQgdG9rZW5pemVyLlRyeUNvbnN1bWUoJ1snKSk6Ci0gICAgICAgICMgU2hvcnQgcmVwZWF0ZWQg
Zm9ybWF0LCBlLmcuICJmb286IFsxLCAyLCAzXSIKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAg
ICAgICBtZXJnZXIodG9rZW5pemVyLCBtZXNzYWdlLCBmaWVsZCkKLSAgICAgICAgICBpZiB0b2tl
bml6ZXIuVHJ5Q29uc3VtZSgnXScpOiBicmVhawotICAgICAgICAgIHRva2VuaXplci5Db25zdW1l
KCcsJykKLQotICAgICAgZWxzZToKLSAgICAgICAgbWVyZ2VyKHRva2VuaXplciwgbWVzc2FnZSwg
ZmllbGQpCi0KLSAgICBlbHNlOiAgIyBQcm90byBmaWVsZCBpcyB1bmtub3duLgotICAgICAgYXNz
ZXJ0IHNlbGYuYWxsb3dfdW5rbm93bl9leHRlbnNpb24KLSAgICAgIF9Ta2lwRmllbGRDb250ZW50
cyh0b2tlbml6ZXIpCi0KLSAgICAjIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGZpZWxkcyBtYXkg
b3B0aW9uYWxseSBiZSBzZXBhcmF0ZWQgYnkgY29tbWFzIG9yCi0gICAgIyBzZW1pY29sb25zLgot
ICAgIGlmIG5vdCB0b2tlbml6ZXIuVHJ5Q29uc3VtZSgnLCcpOgotICAgICAgdG9rZW5pemVyLlRy
eUNvbnN1bWUoJzsnKQotCi0gIGRlZiBfTWVyZ2VNZXNzYWdlRmllbGQoc2VsZiwgdG9rZW5pemVy
LCBtZXNzYWdlLCBmaWVsZCk6Ci0gICAgIiIiTWVyZ2VzIGEgc2luZ2xlIHNjYWxhciBmaWVsZCBp
bnRvIGEgbWVzc2FnZS4KLQotICAgIEFyZ3M6Ci0gICAgICB0b2tlbml6ZXI6IEEgdG9rZW5pemVy
IHRvIHBhcnNlIHRoZSBmaWVsZCB2YWx1ZS4KLSAgICAgIG1lc3NhZ2U6IFRoZSBtZXNzYWdlIG9m
IHdoaWNoIGZpZWxkIGlzIGEgbWVtYmVyLgotICAgICAgZmllbGQ6IFRoZSBkZXNjcmlwdG9yIG9m
IHRoZSBmaWVsZCB0byBiZSBtZXJnZWQuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBQYXJzZUVycm9y
OiBJbiBjYXNlIG9mIHRleHQgcGFyc2luZyBwcm9ibGVtcy4KLSAgICAiIiIKLSAgICBpc19tYXBf
ZW50cnkgPSBfSXNNYXBFbnRyeShmaWVsZCkKLQotICAgIGlmIHRva2VuaXplci5UcnlDb25zdW1l
KCc8Jyk6Ci0gICAgICBlbmRfdG9rZW4gPSAnPicKLSAgICBlbHNlOgotICAgICAgdG9rZW5pemVy
LkNvbnN1bWUoJ3snKQotICAgICAgZW5kX3Rva2VuID0gJ30nCi0KLSAgICBpZiBmaWVsZC5sYWJl
bCA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5MQUJFTF9SRVBFQVRFRDoKLSAgICAgIGlm
IGZpZWxkLmlzX2V4dGVuc2lvbjoKLSAgICAgICAgc3ViX21lc3NhZ2UgPSBtZXNzYWdlLkV4dGVu
c2lvbnNbZmllbGRdLmFkZCgpCi0gICAgICBlbGlmIGlzX21hcF9lbnRyeToKLSAgICAgICAgIyBw
eWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwotICAgICAgICBzdWJfbWVzc2FnZSA9IGZp
ZWxkLm1lc3NhZ2VfdHlwZS5fY29uY3JldGVfY2xhc3MoKQotICAgICAgZWxzZToKLSAgICAgICAg
c3ViX21lc3NhZ2UgPSBnZXRhdHRyKG1lc3NhZ2UsIGZpZWxkLm5hbWUpLmFkZCgpCi0gICAgZWxz
ZToKLSAgICAgIGlmIGZpZWxkLmlzX2V4dGVuc2lvbjoKLSAgICAgICAgc3ViX21lc3NhZ2UgPSBt
ZXNzYWdlLkV4dGVuc2lvbnNbZmllbGRdCi0gICAgICBlbHNlOgotICAgICAgICBzdWJfbWVzc2Fn
ZSA9IGdldGF0dHIobWVzc2FnZSwgZmllbGQubmFtZSkKLSAgICAgIHN1Yl9tZXNzYWdlLlNldElu
UGFyZW50KCkKLQotICAgIHdoaWxlIG5vdCB0b2tlbml6ZXIuVHJ5Q29uc3VtZShlbmRfdG9rZW4p
OgotICAgICAgaWYgdG9rZW5pemVyLkF0RW5kKCk6Ci0gICAgICAgIHJhaXNlIHRva2VuaXplci5Q
YXJzZUVycm9yUHJldmlvdXNUb2tlbignRXhwZWN0ZWQgIiVzIi4nICUgKGVuZF90b2tlbiwpKQot
ICAgICAgc2VsZi5fTWVyZ2VGaWVsZCh0b2tlbml6ZXIsIHN1Yl9tZXNzYWdlKQotCi0gICAgaWYg
aXNfbWFwX2VudHJ5OgotICAgICAgdmFsdWVfY3BwdHlwZSA9IGZpZWxkLm1lc3NhZ2VfdHlwZS5m
aWVsZHNfYnlfbmFtZVsndmFsdWUnXS5jcHBfdHlwZQotICAgICAgaWYgdmFsdWVfY3BwdHlwZSA9
PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5DUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgIHZh
bHVlID0gZ2V0YXR0cihtZXNzYWdlLCBmaWVsZC5uYW1lKVtzdWJfbWVzc2FnZS5rZXldCi0gICAg
ICAgIHZhbHVlLk1lcmdlRnJvbShzdWJfbWVzc2FnZS52YWx1ZSkKLSAgICAgIGVsc2U6Ci0gICAg
ICAgIGdldGF0dHIobWVzc2FnZSwgZmllbGQubmFtZSlbc3ViX21lc3NhZ2Uua2V5XSA9IHN1Yl9t
ZXNzYWdlLnZhbHVlCi0KLSAgZGVmIF9NZXJnZVNjYWxhckZpZWxkKHNlbGYsIHRva2VuaXplciwg
bWVzc2FnZSwgZmllbGQpOgotICAgICIiIk1lcmdlcyBhIHNpbmdsZSBzY2FsYXIgZmllbGQgaW50
byBhIG1lc3NhZ2UuCi0KLSAgICBBcmdzOgotICAgICAgdG9rZW5pemVyOiBBIHRva2VuaXplciB0
byBwYXJzZSB0aGUgZmllbGQgdmFsdWUuCi0gICAgICBtZXNzYWdlOiBBIHByb3RvY29sIG1lc3Nh
Z2UgdG8gcmVjb3JkIHRoZSBkYXRhLgotICAgICAgZmllbGQ6IFRoZSBkZXNjcmlwdG9yIG9mIHRo
ZSBmaWVsZCB0byBiZSBtZXJnZWQuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBQYXJzZUVycm9yOiBJ
biBjYXNlIG9mIHRleHQgcGFyc2luZyBwcm9ibGVtcy4KLSAgICAgIFJ1bnRpbWVFcnJvcjogT24g
cnVudGltZSBlcnJvcnMuCi0gICAgIiIiCi0gICAgXyA9IHNlbGYuYWxsb3dfdW5rbm93bl9leHRl
bnNpb24KLSAgICB2YWx1ZSA9IE5vbmUKLQotICAgIGlmIGZpZWxkLnR5cGUgaW4gKGRlc2NyaXB0
b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfSU5UMzIsCi0gICAgICAgICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9TSU5UMzIsCi0gICAgICAgICAgICAgICAgICAg
ICAgZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9TRklYRUQzMik6Ci0gICAgICB2YWx1
ZSA9IHRva2VuaXplci5Db25zdW1lSW50MzIoKQotICAgIGVsaWYgZmllbGQudHlwZSBpbiAoZGVz
Y3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9JTlQ2NCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfU0lOVDY0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9TRklYRUQ2NCk6Ci0g
ICAgICB2YWx1ZSA9IHRva2VuaXplci5Db25zdW1lSW50NjQoKQotICAgIGVsaWYgZmllbGQudHlw
ZSBpbiAoZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IuVFlQRV9VSU5UMzIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX0ZJWEVEMzIpOgot
ICAgICAgdmFsdWUgPSB0b2tlbml6ZXIuQ29uc3VtZVVpbnQzMigpCi0gICAgZWxpZiBmaWVsZC50
eXBlIGluIChkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX1VJTlQ2NCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfRklYRUQ2NCk6
Ci0gICAgICB2YWx1ZSA9IHRva2VuaXplci5Db25zdW1lVWludDY0KCkKLSAgICBlbGlmIGZpZWxk
LnR5cGUgaW4gKGRlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfRkxPQVQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX0RPVUJMRSk6
Ci0gICAgICB2YWx1ZSA9IHRva2VuaXplci5Db25zdW1lRmxvYXQoKQotICAgIGVsaWYgZmllbGQu
dHlwZSA9PSBkZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvci5UWVBFX0JPT0w6Ci0gICAgICB2YWx1
ZSA9IHRva2VuaXplci5Db25zdW1lQm9vbCgpCi0gICAgZWxpZiBmaWVsZC50eXBlID09IGRlc2Ny
aXB0b3IuRmllbGREZXNjcmlwdG9yLlRZUEVfU1RSSU5HOgotICAgICAgdmFsdWUgPSB0b2tlbml6
ZXIuQ29uc3VtZVN0cmluZygpCi0gICAgZWxpZiBmaWVsZC50eXBlID09IGRlc2NyaXB0b3IuRmll
bGREZXNjcmlwdG9yLlRZUEVfQllURVM6Ci0gICAgICB2YWx1ZSA9IHRva2VuaXplci5Db25zdW1l
Qnl0ZVN0cmluZygpCi0gICAgZWxpZiBmaWVsZC50eXBlID09IGRlc2NyaXB0b3IuRmllbGREZXNj
cmlwdG9yLlRZUEVfRU5VTToKLSAgICAgIHZhbHVlID0gdG9rZW5pemVyLkNvbnN1bWVFbnVtKGZp
ZWxkKQotICAgIGVsc2U6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1Vua25vd24gZmllbGQg
dHlwZSAlZCcgJSBmaWVsZC50eXBlKQotCi0gICAgaWYgZmllbGQubGFiZWwgPT0gZGVzY3JpcHRv
ci5GaWVsZERlc2NyaXB0b3IuTEFCRUxfUkVQRUFURUQ6Ci0gICAgICBpZiBmaWVsZC5pc19leHRl
bnNpb246Ci0gICAgICAgIG1lc3NhZ2UuRXh0ZW5zaW9uc1tmaWVsZF0uYXBwZW5kKHZhbHVlKQot
ICAgICAgZWxzZToKLSAgICAgICAgZ2V0YXR0cihtZXNzYWdlLCBmaWVsZC5uYW1lKS5hcHBlbmQo
dmFsdWUpCi0gICAgZWxzZToKLSAgICAgIGlmIGZpZWxkLmlzX2V4dGVuc2lvbjoKLSAgICAgICAg
aWYgbm90IHNlbGYuX2FsbG93X211bHRpcGxlX3NjYWxhcnMgYW5kIG1lc3NhZ2UuSGFzRXh0ZW5z
aW9uKGZpZWxkKToKLSAgICAgICAgICByYWlzZSB0b2tlbml6ZXIuUGFyc2VFcnJvclByZXZpb3Vz
VG9rZW4oCi0gICAgICAgICAgICAgICdNZXNzYWdlIHR5cGUgIiVzIiBzaG91bGQgbm90IGhhdmUg
bXVsdGlwbGUgIiVzIiBleHRlbnNpb25zLicgJQotICAgICAgICAgICAgICAobWVzc2FnZS5ERVND
UklQVE9SLmZ1bGxfbmFtZSwgZmllbGQuZnVsbF9uYW1lKSkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICBtZXNzYWdlLkV4dGVuc2lvbnNbZmllbGRdID0gdmFsdWUKLSAgICAgIGVsc2U6Ci0gICAg
ICAgIGlmIG5vdCBzZWxmLl9hbGxvd19tdWx0aXBsZV9zY2FsYXJzIGFuZCBtZXNzYWdlLkhhc0Zp
ZWxkKGZpZWxkLm5hbWUpOgotICAgICAgICAgIHJhaXNlIHRva2VuaXplci5QYXJzZUVycm9yUHJl
dmlvdXNUb2tlbigKLSAgICAgICAgICAgICAgJ01lc3NhZ2UgdHlwZSAiJXMiIHNob3VsZCBub3Qg
aGF2ZSBtdWx0aXBsZSAiJXMiIGZpZWxkcy4nICUKLSAgICAgICAgICAgICAgKG1lc3NhZ2UuREVT
Q1JJUFRPUi5mdWxsX25hbWUsIGZpZWxkLm5hbWUpKQotICAgICAgICBlbHNlOgotICAgICAgICAg
IHNldGF0dHIobWVzc2FnZSwgZmllbGQubmFtZSwgdmFsdWUpCi0KLQotZGVmIF9Ta2lwRmllbGRD
b250ZW50cyh0b2tlbml6ZXIpOgotICAiIiJTa2lwcyBvdmVyIGNvbnRlbnRzICh2YWx1ZSBvciBt
ZXNzYWdlKSBvZiBhIGZpZWxkLgotCi0gIEFyZ3M6Ci0gICAgdG9rZW5pemVyOiBBIHRva2VuaXpl
ciB0byBwYXJzZSB0aGUgZmllbGQgbmFtZSBhbmQgdmFsdWVzLgotICAiIiIKLSAgIyBUcnkgdG8g
Z3Vlc3MgdGhlIHR5cGUgb2YgdGhpcyBmaWVsZC4KLSAgIyBJZiB0aGlzIGZpZWxkIGlzIG5vdCBh
IG1lc3NhZ2UsIHRoZXJlIHNob3VsZCBiZSBhICI6IiBiZXR3ZWVuIHRoZQotICAjIGZpZWxkIG5h
bWUgYW5kIHRoZSBmaWVsZCB2YWx1ZSBhbmQgYWxzbyB0aGUgZmllbGQgdmFsdWUgc2hvdWxkIG5v
dAotICAjIHN0YXJ0IHdpdGggInsiIG9yICI8IiB3aGljaCBpbmRpY2F0ZXMgdGhlIGJlZ2lubmlu
ZyBvZiBhIG1lc3NhZ2UgYm9keS4KLSAgIyBJZiB0aGVyZSBpcyBubyAiOiIgb3IgdGhlcmUgaXMg
YSAieyIgb3IgIjwiIGFmdGVyICI6IiwgdGhpcyBmaWVsZCBoYXMKLSAgIyB0byBiZSBhIG1lc3Nh
Z2Ugb3IgdGhlIGlucHV0IGlzIGlsbC1mb3JtZWQuCi0gIGlmIHRva2VuaXplci5UcnlDb25zdW1l
KCc6JykgYW5kIG5vdCB0b2tlbml6ZXIuTG9va2luZ0F0KAotICAgICAgJ3snKSBhbmQgbm90IHRv
a2VuaXplci5Mb29raW5nQXQoJzwnKToKLSAgICBfU2tpcEZpZWxkVmFsdWUodG9rZW5pemVyKQot
ICBlbHNlOgotICAgIF9Ta2lwRmllbGRNZXNzYWdlKHRva2VuaXplcikKLQotCi1kZWYgX1NraXBG
aWVsZCh0b2tlbml6ZXIpOgotICAiIiJTa2lwcyBvdmVyIGEgY29tcGxldGUgZmllbGQgKG5hbWUg
YW5kIHZhbHVlL21lc3NhZ2UpLgotCi0gIEFyZ3M6Ci0gICAgdG9rZW5pemVyOiBBIHRva2VuaXpl
ciB0byBwYXJzZSB0aGUgZmllbGQgbmFtZSBhbmQgdmFsdWVzLgotICAiIiIKLSAgaWYgdG9rZW5p
emVyLlRyeUNvbnN1bWUoJ1snKToKLSAgICAjIENvbnN1bWUgZXh0ZW5zaW9uIG5hbWUuCi0gICAg
dG9rZW5pemVyLkNvbnN1bWVJZGVudGlmaWVyKCkKLSAgICB3aGlsZSB0b2tlbml6ZXIuVHJ5Q29u
c3VtZSgnLicpOgotICAgICAgdG9rZW5pemVyLkNvbnN1bWVJZGVudGlmaWVyKCkKLSAgICB0b2tl
bml6ZXIuQ29uc3VtZSgnXScpCi0gIGVsc2U6Ci0gICAgdG9rZW5pemVyLkNvbnN1bWVJZGVudGlm
aWVyKCkKLQotICBfU2tpcEZpZWxkQ29udGVudHModG9rZW5pemVyKQotCi0gICMgRm9yIGhpc3Rv
cmljYWwgcmVhc29ucywgZmllbGRzIG1heSBvcHRpb25hbGx5IGJlIHNlcGFyYXRlZCBieSBjb21t
YXMgb3IKLSAgIyBzZW1pY29sb25zLgotICBpZiBub3QgdG9rZW5pemVyLlRyeUNvbnN1bWUoJywn
KToKLSAgICB0b2tlbml6ZXIuVHJ5Q29uc3VtZSgnOycpCi0KLQotZGVmIF9Ta2lwRmllbGRNZXNz
YWdlKHRva2VuaXplcik6Ci0gICIiIlNraXBzIG92ZXIgYSBmaWVsZCBtZXNzYWdlLgotCi0gIEFy
Z3M6Ci0gICAgdG9rZW5pemVyOiBBIHRva2VuaXplciB0byBwYXJzZSB0aGUgZmllbGQgbmFtZSBh
bmQgdmFsdWVzLgotICAiIiIKLQotICBpZiB0b2tlbml6ZXIuVHJ5Q29uc3VtZSgnPCcpOgotICAg
IGRlbGltaXRlciA9ICc+JwotICBlbHNlOgotICAgIHRva2VuaXplci5Db25zdW1lKCd7JykKLSAg
ICBkZWxpbWl0ZXIgPSAnfScKLQotICB3aGlsZSBub3QgdG9rZW5pemVyLkxvb2tpbmdBdCgnPicp
IGFuZCBub3QgdG9rZW5pemVyLkxvb2tpbmdBdCgnfScpOgotICAgIF9Ta2lwRmllbGQodG9rZW5p
emVyKQotCi0gIHRva2VuaXplci5Db25zdW1lKGRlbGltaXRlcikKLQotCi1kZWYgX1NraXBGaWVs
ZFZhbHVlKHRva2VuaXplcik6Ci0gICIiIlNraXBzIG92ZXIgYSBmaWVsZCB2YWx1ZS4KLQotICBB
cmdzOgotICAgIHRva2VuaXplcjogQSB0b2tlbml6ZXIgdG8gcGFyc2UgdGhlIGZpZWxkIG5hbWUg
YW5kIHZhbHVlcy4KLQotICBSYWlzZXM6Ci0gICAgUGFyc2VFcnJvcjogSW4gY2FzZSBhbiBpbnZh
bGlkIGZpZWxkIHZhbHVlIGlzIGZvdW5kLgotICAiIiIKLSAgIyBTdHJpbmcvYnl0ZXMgdG9rZW5z
IGNhbiBjb21lIGluIG11bHRpcGxlIGFkamFjZW50IHN0cmluZyBsaXRlcmFscy4KLSAgIyBJZiB3
ZSBjYW4gY29uc3VtZSBvbmUsIGNvbnN1bWUgYXMgbWFueSBhcyB3ZSBjYW4uCi0gIGlmIHRva2Vu
aXplci5UcnlDb25zdW1lQnl0ZVN0cmluZygpOgotICAgIHdoaWxlIHRva2VuaXplci5UcnlDb25z
dW1lQnl0ZVN0cmluZygpOgotICAgICAgcGFzcwotICAgIHJldHVybgotCi0gIGlmIChub3QgdG9r
ZW5pemVyLlRyeUNvbnN1bWVJZGVudGlmaWVyKCkgYW5kCi0gICAgICBub3QgdG9rZW5pemVyLlRy
eUNvbnN1bWVJbnQ2NCgpIGFuZAotICAgICAgbm90IHRva2VuaXplci5UcnlDb25zdW1lVWludDY0
KCkgYW5kCi0gICAgICBub3QgdG9rZW5pemVyLlRyeUNvbnN1bWVGbG9hdCgpKToKLSAgICByYWlz
ZSBQYXJzZUVycm9yKCdJbnZhbGlkIGZpZWxkIHZhbHVlOiAnICsgdG9rZW5pemVyLnRva2VuKQot
Ci0KLWNsYXNzIF9Ub2tlbml6ZXIob2JqZWN0KToKLSAgIiIiUHJvdG9jb2wgYnVmZmVyIHRleHQg
cmVwcmVzZW50YXRpb24gdG9rZW5pemVyLgotCi0gIFRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgbG93
ZXIgbGV2ZWwgc3RyaW5nIHBhcnNpbmcgYnkgc3BsaXR0aW5nIGl0IGludG8KLSAgbWVhbmluZ2Z1
bCB0b2tlbnMuCi0KLSAgSXQgd2FzIGRpcmVjdGx5IHBvcnRlZCBmcm9tIHRoZSBKYXZhIHByb3Rv
Y29sIGJ1ZmZlciBBUEkuCi0gICIiIgotCi0gIF9XSElURVNQQUNFID0gcmUuY29tcGlsZSgnKFxc
c3woIy4qJCkpKycsIHJlLk1VTFRJTElORSkKLSAgX1RPS0VOID0gcmUuY29tcGlsZSgnfCcuam9p
bihbCi0gICAgICByJ1thLXpBLVpfXVswLTlhLXpBLVpfKy1dKicsICAgICAgICAgICAgICMgYW4g
aWRlbnRpZmllcgotICAgICAgcicoWzAtOSstXXwoXC5bMC05XSkpWzAtOWEtekEtWl8uKy1dKics
ICAjIGEgbnVtYmVyCi0gIF0gKyBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICMgcXVvdGVkIHN0ciBmb3IgZWFjaCBxdW90ZSBtYXJrCi0gICAgICByJ3txdH0oW157cXR9
XG5cXF18XFwuKSooe3F0fXxcXD8kKScuZm9ybWF0KHF0PW1hcmspIGZvciBtYXJrIGluIF9RVU9U
RVMKLSAgXSkpCi0KLSAgX0lERU5USUZJRVIgPSByZS5jb21waWxlKHInXHcrJykKLQotICBkZWYg
X19pbml0X18oc2VsZiwgbGluZXMpOgotICAgIHNlbGYuX3Bvc2l0aW9uID0gMAotICAgIHNlbGYu
X2xpbmUgPSAtMQotICAgIHNlbGYuX2NvbHVtbiA9IDAKLSAgICBzZWxmLl90b2tlbl9zdGFydCA9
IE5vbmUKLSAgICBzZWxmLnRva2VuID0gJycKLSAgICBzZWxmLl9saW5lcyA9IGl0ZXIobGluZXMp
Ci0gICAgc2VsZi5fY3VycmVudF9saW5lID0gJycKLSAgICBzZWxmLl9wcmV2aW91c19saW5lID0g
MAotICAgIHNlbGYuX3ByZXZpb3VzX2NvbHVtbiA9IDAKLSAgICBzZWxmLl9tb3JlX2xpbmVzID0g
VHJ1ZQotICAgIHNlbGYuX1NraXBXaGl0ZXNwYWNlKCkKLSAgICBzZWxmLk5leHRUb2tlbigpCi0K
LSAgZGVmIExvb2tpbmdBdChzZWxmLCB0b2tlbik6Ci0gICAgcmV0dXJuIHNlbGYudG9rZW4gPT0g
dG9rZW4KLQotICBkZWYgQXRFbmQoc2VsZik6Ci0gICAgIiIiQ2hlY2tzIHRoZSBlbmQgb2YgdGhl
IHRleHQgd2FzIHJlYWNoZWQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZmYgdGhlIGVu
ZCB3YXMgcmVhY2hlZC4KLSAgICAiIiIKLSAgICByZXR1cm4gbm90IHNlbGYudG9rZW4KLQotICBk
ZWYgX1BvcExpbmUoc2VsZik6Ci0gICAgd2hpbGUgbGVuKHNlbGYuX2N1cnJlbnRfbGluZSkgPD0g
c2VsZi5fY29sdW1uOgotICAgICAgdHJ5OgotICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUgPSBu
ZXh0KHNlbGYuX2xpbmVzKQotICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgIHNl
bGYuX2N1cnJlbnRfbGluZSA9ICcnCi0gICAgICAgIHNlbGYuX21vcmVfbGluZXMgPSBGYWxzZQot
ICAgICAgICByZXR1cm4KLSAgICAgIGVsc2U6Ci0gICAgICAgIHNlbGYuX2xpbmUgKz0gMQotICAg
ICAgICBzZWxmLl9jb2x1bW4gPSAwCi0KLSAgZGVmIF9Ta2lwV2hpdGVzcGFjZShzZWxmKToKLSAg
ICB3aGlsZSBUcnVlOgotICAgICAgc2VsZi5fUG9wTGluZSgpCi0gICAgICBtYXRjaCA9IHNlbGYu
X1dISVRFU1BBQ0UubWF0Y2goc2VsZi5fY3VycmVudF9saW5lLCBzZWxmLl9jb2x1bW4pCi0gICAg
ICBpZiBub3QgbWF0Y2g6Ci0gICAgICAgIGJyZWFrCi0gICAgICBsZW5ndGggPSBsZW4obWF0Y2gu
Z3JvdXAoMCkpCi0gICAgICBzZWxmLl9jb2x1bW4gKz0gbGVuZ3RoCi0KLSAgZGVmIFRyeUNvbnN1
bWUoc2VsZiwgdG9rZW4pOgotICAgICIiIlRyaWVzIHRvIGNvbnN1bWUgYSBnaXZlbiBwaWVjZSBv
ZiB0ZXh0LgotCi0gICAgQXJnczoKLSAgICAgIHRva2VuOiBUZXh0IHRvIGNvbnN1bWUuCi0KLSAg
ICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZmYgdGhlIHRleHQgd2FzIGNvbnN1bWVkLgotICAgICIi
IgotICAgIGlmIHNlbGYudG9rZW4gPT0gdG9rZW46Ci0gICAgICBzZWxmLk5leHRUb2tlbigpCi0g
ICAgICByZXR1cm4gVHJ1ZQotICAgIHJldHVybiBGYWxzZQotCi0gIGRlZiBDb25zdW1lKHNlbGYs
IHRva2VuKToKLSAgICAiIiJDb25zdW1lcyBhIHBpZWNlIG9mIHRleHQuCi0KLSAgICBBcmdzOgot
ICAgICAgdG9rZW46IFRleHQgdG8gY29uc3VtZS4KLQotICAgIFJhaXNlczoKLSAgICAgIFBhcnNl
RXJyb3I6IElmIHRoZSB0ZXh0IGNvdWxkbid0IGJlIGNvbnN1bWVkLgotICAgICIiIgotICAgIGlm
IG5vdCBzZWxmLlRyeUNvbnN1bWUodG9rZW4pOgotICAgICAgcmFpc2Ugc2VsZi5fUGFyc2VFcnJv
cignRXhwZWN0ZWQgIiVzIi4nICUgdG9rZW4pCi0KLSAgZGVmIFRyeUNvbnN1bWVJZGVudGlmaWVy
KHNlbGYpOgotICAgIHRyeToKLSAgICAgIHNlbGYuQ29uc3VtZUlkZW50aWZpZXIoKQotICAgICAg
cmV0dXJuIFRydWUKLSAgICBleGNlcHQgUGFyc2VFcnJvcjoKLSAgICAgIHJldHVybiBGYWxzZQot
Ci0gIGRlZiBDb25zdW1lSWRlbnRpZmllcihzZWxmKToKLSAgICAiIiJDb25zdW1lcyBwcm90b2Nv
bCBtZXNzYWdlIGZpZWxkIGlkZW50aWZpZXIuCi0KLSAgICBSZXR1cm5zOgotICAgICAgSWRlbnRp
ZmllciBzdHJpbmcuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBQYXJzZUVycm9yOiBJZiBhbiBpZGVu
dGlmaWVyIGNvdWxkbid0IGJlIGNvbnN1bWVkLgotICAgICIiIgotICAgIHJlc3VsdCA9IHNlbGYu
dG9rZW4KLSAgICBpZiBub3Qgc2VsZi5fSURFTlRJRklFUi5tYXRjaChyZXN1bHQpOgotICAgICAg
cmFpc2Ugc2VsZi5fUGFyc2VFcnJvcignRXhwZWN0ZWQgaWRlbnRpZmllci4nKQotICAgIHNlbGYu
TmV4dFRva2VuKCkKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIENvbnN1bWVJbnQzMihzZWxm
KToKLSAgICAiIiJDb25zdW1lcyBhIHNpZ25lZCAzMmJpdCBpbnRlZ2VyIG51bWJlci4KLQotICAg
IFJldHVybnM6Ci0gICAgICBUaGUgaW50ZWdlciBwYXJzZWQuCi0KLSAgICBSYWlzZXM6Ci0gICAg
ICBQYXJzZUVycm9yOiBJZiBhIHNpZ25lZCAzMmJpdCBpbnRlZ2VyIGNvdWxkbid0IGJlIGNvbnN1
bWVkLgotICAgICIiIgotICAgIHRyeToKLSAgICAgIHJlc3VsdCA9IFBhcnNlSW50ZWdlcihzZWxm
LnRva2VuLCBpc19zaWduZWQ9VHJ1ZSwgaXNfbG9uZz1GYWxzZSkKLSAgICBleGNlcHQgVmFsdWVF
cnJvciBhcyBlOgotICAgICAgcmFpc2Ugc2VsZi5fUGFyc2VFcnJvcihzdHIoZSkpCi0gICAgc2Vs
Zi5OZXh0VG9rZW4oKQotICAgIHJldHVybiByZXN1bHQKLQotICBkZWYgQ29uc3VtZVVpbnQzMihz
ZWxmKToKLSAgICAiIiJDb25zdW1lcyBhbiB1bnNpZ25lZCAzMmJpdCBpbnRlZ2VyIG51bWJlci4K
LQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgaW50ZWdlciBwYXJzZWQuCi0KLSAgICBSYWlzZXM6
Ci0gICAgICBQYXJzZUVycm9yOiBJZiBhbiB1bnNpZ25lZCAzMmJpdCBpbnRlZ2VyIGNvdWxkbid0
IGJlIGNvbnN1bWVkLgotICAgICIiIgotICAgIHRyeToKLSAgICAgIHJlc3VsdCA9IFBhcnNlSW50
ZWdlcihzZWxmLnRva2VuLCBpc19zaWduZWQ9RmFsc2UsIGlzX2xvbmc9RmFsc2UpCi0gICAgZXhj
ZXB0IFZhbHVlRXJyb3IgYXMgZToKLSAgICAgIHJhaXNlIHNlbGYuX1BhcnNlRXJyb3Ioc3RyKGUp
KQotICAgIHNlbGYuTmV4dFRva2VuKCkKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIFRyeUNv
bnN1bWVJbnQ2NChzZWxmKToKLSAgICB0cnk6Ci0gICAgICBzZWxmLkNvbnN1bWVJbnQ2NCgpCi0g
ICAgICByZXR1cm4gVHJ1ZQotICAgIGV4Y2VwdCBQYXJzZUVycm9yOgotICAgICAgcmV0dXJuIEZh
bHNlCi0KLSAgZGVmIENvbnN1bWVJbnQ2NChzZWxmKToKLSAgICAiIiJDb25zdW1lcyBhIHNpZ25l
ZCA2NGJpdCBpbnRlZ2VyIG51bWJlci4KLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgaW50ZWdl
ciBwYXJzZWQuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBQYXJzZUVycm9yOiBJZiBhIHNpZ25lZCA2
NGJpdCBpbnRlZ2VyIGNvdWxkbid0IGJlIGNvbnN1bWVkLgotICAgICIiIgotICAgIHRyeToKLSAg
ICAgIHJlc3VsdCA9IFBhcnNlSW50ZWdlcihzZWxmLnRva2VuLCBpc19zaWduZWQ9VHJ1ZSwgaXNf
bG9uZz1UcnVlKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6Ci0gICAgICByYWlzZSBzZWxm
Ll9QYXJzZUVycm9yKHN0cihlKSkKLSAgICBzZWxmLk5leHRUb2tlbigpCi0gICAgcmV0dXJuIHJl
c3VsdAotCi0gIGRlZiBUcnlDb25zdW1lVWludDY0KHNlbGYpOgotICAgIHRyeToKLSAgICAgIHNl
bGYuQ29uc3VtZVVpbnQ2NCgpCi0gICAgICByZXR1cm4gVHJ1ZQotICAgIGV4Y2VwdCBQYXJzZUVy
cm9yOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIENvbnN1bWVVaW50NjQoc2VsZik6Ci0g
ICAgIiIiQ29uc3VtZXMgYW4gdW5zaWduZWQgNjRiaXQgaW50ZWdlciBudW1iZXIuCi0KLSAgICBS
ZXR1cm5zOgotICAgICAgVGhlIGludGVnZXIgcGFyc2VkLgotCi0gICAgUmFpc2VzOgotICAgICAg
UGFyc2VFcnJvcjogSWYgYW4gdW5zaWduZWQgNjRiaXQgaW50ZWdlciBjb3VsZG4ndCBiZSBjb25z
dW1lZC4KLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICByZXN1bHQgPSBQYXJzZUludGVnZXIoc2Vs
Zi50b2tlbiwgaXNfc2lnbmVkPUZhbHNlLCBpc19sb25nPVRydWUpCi0gICAgZXhjZXB0IFZhbHVl
RXJyb3IgYXMgZToKLSAgICAgIHJhaXNlIHNlbGYuX1BhcnNlRXJyb3Ioc3RyKGUpKQotICAgIHNl
bGYuTmV4dFRva2VuKCkKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIFRyeUNvbnN1bWVGbG9h
dChzZWxmKToKLSAgICB0cnk6Ci0gICAgICBzZWxmLkNvbnN1bWVGbG9hdCgpCi0gICAgICByZXR1
cm4gVHJ1ZQotICAgIGV4Y2VwdCBQYXJzZUVycm9yOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAg
ZGVmIENvbnN1bWVGbG9hdChzZWxmKToKLSAgICAiIiJDb25zdW1lcyBhbiBmbG9hdGluZyBwb2lu
dCBudW1iZXIuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIG51bWJlciBwYXJzZWQuCi0KLSAg
ICBSYWlzZXM6Ci0gICAgICBQYXJzZUVycm9yOiBJZiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBj
b3VsZG4ndCBiZSBjb25zdW1lZC4KLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICByZXN1bHQgPSBQ
YXJzZUZsb2F0KHNlbGYudG9rZW4pCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKLSAgICAg
IHJhaXNlIHNlbGYuX1BhcnNlRXJyb3Ioc3RyKGUpKQotICAgIHNlbGYuTmV4dFRva2VuKCkKLSAg
ICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIENvbnN1bWVCb29sKHNlbGYpOgotICAgICIiIkNvbnN1
bWVzIGEgYm9vbGVhbiB2YWx1ZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgYm9vbCBwYXJz
ZWQuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBQYXJzZUVycm9yOiBJZiBhIGJvb2xlYW4gdmFsdWUg
Y291bGRuJ3QgYmUgY29uc3VtZWQuCi0gICAgIiIiCi0gICAgdHJ5OgotICAgICAgcmVzdWx0ID0g
UGFyc2VCb29sKHNlbGYudG9rZW4pCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKLSAgICAg
IHJhaXNlIHNlbGYuX1BhcnNlRXJyb3Ioc3RyKGUpKQotICAgIHNlbGYuTmV4dFRva2VuKCkKLSAg
ICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIFRyeUNvbnN1bWVCeXRlU3RyaW5nKHNlbGYpOgotICAg
IHRyeToKLSAgICAgIHNlbGYuQ29uc3VtZUJ5dGVTdHJpbmcoKQotICAgICAgcmV0dXJuIFRydWUK
LSAgICBleGNlcHQgUGFyc2VFcnJvcjoKLSAgICAgIHJldHVybiBGYWxzZQotCi0gIGRlZiBDb25z
dW1lU3RyaW5nKHNlbGYpOgotICAgICIiIkNvbnN1bWVzIGEgc3RyaW5nIHZhbHVlLgotCi0gICAg
UmV0dXJuczoKLSAgICAgIFRoZSBzdHJpbmcgcGFyc2VkLgotCi0gICAgUmFpc2VzOgotICAgICAg
UGFyc2VFcnJvcjogSWYgYSBzdHJpbmcgdmFsdWUgY291bGRuJ3QgYmUgY29uc3VtZWQuCi0gICAg
IiIiCi0gICAgdGhlX2J5dGVzID0gc2VsZi5Db25zdW1lQnl0ZVN0cmluZygpCi0gICAgdHJ5Ogot
ICAgICAgcmV0dXJuIHNpeC50ZXh0X3R5cGUodGhlX2J5dGVzLCAndXRmLTgnKQotICAgIGV4Y2Vw
dCBVbmljb2RlRGVjb2RlRXJyb3IgYXMgZToKLSAgICAgIHJhaXNlIHNlbGYuX1N0cmluZ1BhcnNl
RXJyb3IoZSkKLQotICBkZWYgQ29uc3VtZUJ5dGVTdHJpbmcoc2VsZik6Ci0gICAgIiIiQ29uc3Vt
ZXMgYSBieXRlIGFycmF5IHZhbHVlLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBhcnJheSBw
YXJzZWQgKGFzIGEgc3RyaW5nKS4KLQotICAgIFJhaXNlczoKLSAgICAgIFBhcnNlRXJyb3I6IElm
IGEgYnl0ZSBhcnJheSB2YWx1ZSBjb3VsZG4ndCBiZSBjb25zdW1lZC4KLSAgICAiIiIKLSAgICB0
aGVfbGlzdCA9IFtzZWxmLl9Db25zdW1lU2luZ2xlQnl0ZVN0cmluZygpXQotICAgIHdoaWxlIHNl
bGYudG9rZW4gYW5kIHNlbGYudG9rZW5bMF0gaW4gX1FVT1RFUzoKLSAgICAgIHRoZV9saXN0LmFw
cGVuZChzZWxmLl9Db25zdW1lU2luZ2xlQnl0ZVN0cmluZygpKQotICAgIHJldHVybiBiJycuam9p
bih0aGVfbGlzdCkKLQotICBkZWYgX0NvbnN1bWVTaW5nbGVCeXRlU3RyaW5nKHNlbGYpOgotICAg
ICIiIkNvbnN1bWUgb25lIHRva2VuIG9mIGEgc3RyaW5nIGxpdGVyYWwuCi0KLSAgICBTdHJpbmcg
bGl0ZXJhbHMgKHdoZXRoZXIgYnl0ZXMgb3IgdGV4dCkgY2FuIGNvbWUgaW4gbXVsdGlwbGUgYWRq
YWNlbnQKLSAgICB0b2tlbnMgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgY29uY2F0ZW5hdGVkLCBs
aWtlIGluIEMgb3IgUHl0aG9uLiAgVGhpcwotICAgIG1ldGhvZCBvbmx5IGNvbnN1bWVzIG9uZSB0
b2tlbi4KLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgdG9rZW4gcGFyc2VkLgotICAgIFJhaXNl
czoKLSAgICAgIFBhcnNlRXJyb3I6IFdoZW4gdGhlIHdyb25nIGZvcm1hdCBkYXRhIGlzIGZvdW5k
LgotICAgICIiIgotICAgIHRleHQgPSBzZWxmLnRva2VuCi0gICAgaWYgbGVuKHRleHQpIDwgMSBv
ciB0ZXh0WzBdIG5vdCBpbiBfUVVPVEVTOgotICAgICAgcmFpc2Ugc2VsZi5fUGFyc2VFcnJvcign
RXhwZWN0ZWQgc3RyaW5nIGJ1dCBmb3VuZDogJXInICUgKHRleHQsKSkKLQotICAgIGlmIGxlbih0
ZXh0KSA8IDIgb3IgdGV4dFstMV0gIT0gdGV4dFswXToKLSAgICAgIHJhaXNlIHNlbGYuX1BhcnNl
RXJyb3IoJ1N0cmluZyBtaXNzaW5nIGVuZGluZyBxdW90ZTogJXInICUgKHRleHQsKSkKLQotICAg
IHRyeToKLSAgICAgIHJlc3VsdCA9IHRleHRfZW5jb2RpbmcuQ1VuZXNjYXBlKHRleHRbMTotMV0p
Ci0gICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKLSAgICAgIHJhaXNlIHNlbGYuX1BhcnNlRXJy
b3Ioc3RyKGUpKQotICAgIHNlbGYuTmV4dFRva2VuKCkKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAg
ZGVmIENvbnN1bWVFbnVtKHNlbGYsIGZpZWxkKToKLSAgICB0cnk6Ci0gICAgICByZXN1bHQgPSBQ
YXJzZUVudW0oZmllbGQsIHNlbGYudG9rZW4pCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToK
LSAgICAgIHJhaXNlIHNlbGYuX1BhcnNlRXJyb3Ioc3RyKGUpKQotICAgIHNlbGYuTmV4dFRva2Vu
KCkKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIFBhcnNlRXJyb3JQcmV2aW91c1Rva2VuKHNl
bGYsIG1lc3NhZ2UpOgotICAgICIiIkNyZWF0ZXMgYW5kICpyZXR1cm5zKiBhIFBhcnNlRXJyb3Ig
Zm9yIHRoZSBwcmV2aW91c2x5IHJlYWQgdG9rZW4uCi0KLSAgICBBcmdzOgotICAgICAgbWVzc2Fn
ZTogQSBtZXNzYWdlIHRvIHNldCBmb3IgdGhlIGV4Y2VwdGlvbi4KLQotICAgIFJldHVybnM6Ci0g
ICAgICBBIFBhcnNlRXJyb3IgaW5zdGFuY2UuCi0gICAgIiIiCi0gICAgcmV0dXJuIFBhcnNlRXJy
b3IoJyVkOiVkIDogJXMnICUgKAotICAgICAgICBzZWxmLl9wcmV2aW91c19saW5lICsgMSwgc2Vs
Zi5fcHJldmlvdXNfY29sdW1uICsgMSwgbWVzc2FnZSkpCi0KLSAgZGVmIF9QYXJzZUVycm9yKHNl
bGYsIG1lc3NhZ2UpOgotICAgICIiIkNyZWF0ZXMgYW5kICpyZXR1cm5zKiBhIFBhcnNlRXJyb3Ig
Zm9yIHRoZSBjdXJyZW50IHRva2VuLiIiIgotICAgIHJldHVybiBQYXJzZUVycm9yKCclZDolZCA6
ICVzJyAlICgKLSAgICAgICAgc2VsZi5fbGluZSArIDEsIHNlbGYuX2NvbHVtbiArIDEsIG1lc3Nh
Z2UpKQotCi0gIGRlZiBfU3RyaW5nUGFyc2VFcnJvcihzZWxmLCBlKToKLSAgICByZXR1cm4gc2Vs
Zi5fUGFyc2VFcnJvcignQ291bGRuXCd0IHBhcnNlIHN0cmluZzogJyArIHN0cihlKSkKLQotICBk
ZWYgTmV4dFRva2VuKHNlbGYpOgotICAgICIiIlJlYWRzIHRoZSBuZXh0IG1lYW5pbmdmdWwgdG9r
ZW4uIiIiCi0gICAgc2VsZi5fcHJldmlvdXNfbGluZSA9IHNlbGYuX2xpbmUKLSAgICBzZWxmLl9w
cmV2aW91c19jb2x1bW4gPSBzZWxmLl9jb2x1bW4KLQotICAgIHNlbGYuX2NvbHVtbiArPSBsZW4o
c2VsZi50b2tlbikKLSAgICBzZWxmLl9Ta2lwV2hpdGVzcGFjZSgpCi0KLSAgICBpZiBub3Qgc2Vs
Zi5fbW9yZV9saW5lczoKLSAgICAgIHNlbGYudG9rZW4gPSAnJwotICAgICAgcmV0dXJuCi0KLSAg
ICBtYXRjaCA9IHNlbGYuX1RPS0VOLm1hdGNoKHNlbGYuX2N1cnJlbnRfbGluZSwgc2VsZi5fY29s
dW1uKQotICAgIGlmIG1hdGNoOgotICAgICAgdG9rZW4gPSBtYXRjaC5ncm91cCgwKQotICAgICAg
c2VsZi50b2tlbiA9IHRva2VuCi0gICAgZWxzZToKLSAgICAgIHNlbGYudG9rZW4gPSBzZWxmLl9j
dXJyZW50X2xpbmVbc2VsZi5fY29sdW1uXQotCi0KLWRlZiBQYXJzZUludGVnZXIodGV4dCwgaXNf
c2lnbmVkPUZhbHNlLCBpc19sb25nPUZhbHNlKToKLSAgIiIiUGFyc2VzIGFuIGludGVnZXIuCi0K
LSAgQXJnczoKLSAgICB0ZXh0OiBUaGUgdGV4dCB0byBwYXJzZS4KLSAgICBpc19zaWduZWQ6IFRy
dWUgaWYgYSBzaWduZWQgaW50ZWdlciBtdXN0IGJlIHBhcnNlZC4KLSAgICBpc19sb25nOiBUcnVl
IGlmIGEgbG9uZyBpbnRlZ2VyIG11c3QgYmUgcGFyc2VkLgotCi0gIFJldHVybnM6Ci0gICAgVGhl
IGludGVnZXIgdmFsdWUuCi0KLSAgUmFpc2VzOgotICAgIFZhbHVlRXJyb3I6IFRocm93biBJZmYg
dGhlIHRleHQgaXMgbm90IGEgdmFsaWQgaW50ZWdlci4KLSAgIiIiCi0gICMgRG8gdGhlIGFjdHVh
bCBwYXJzaW5nLiBFeGNlcHRpb24gaGFuZGxpbmcgaXMgcHJvcGFnYXRlZCB0byBjYWxsZXIuCi0g
IHRyeToKLSAgICAjIFdlIGZvcmNlIDMyLWJpdCB2YWx1ZXMgdG8gaW50IGFuZCA2NC1iaXQgdmFs
dWVzIHRvIGxvbmcgdG8gbWFrZQotICAgICMgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9ucyB3aGVy
ZSB0aGUgZGlzdGluY3Rpb24gaXMgbW9yZSBzaWduaWZpY2FudAotICAgICMgKGUuZy4gdGhlIEMr
KyBpbXBsZW1lbnRhdGlvbikgc2ltcGxlci4KLSAgICBpZiBpc19sb25nOgotICAgICAgcmVzdWx0
ID0gbG9uZyh0ZXh0LCAwKQotICAgIGVsc2U6Ci0gICAgICByZXN1bHQgPSBpbnQodGV4dCwgMCkK
LSAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcignQ291bGRuXCd0IHBh
cnNlIGludGVnZXI6ICVzJyAlIHRleHQpCi0KLSAgIyBDaGVjayBpZiB0aGUgaW50ZWdlciBpcyBz
YW5lLiBFeGNlcHRpb25zIGhhbmRsZWQgYnkgY2FsbGVycy4KLSAgY2hlY2tlciA9IF9JTlRFR0VS
X0NIRUNLRVJTWzIgKiBpbnQoaXNfbG9uZykgKyBpbnQoaXNfc2lnbmVkKV0KLSAgY2hlY2tlci5D
aGVja1ZhbHVlKHJlc3VsdCkKLSAgcmV0dXJuIHJlc3VsdAotCi0KLWRlZiBQYXJzZUZsb2F0KHRl
eHQpOgotICAiIiJQYXJzZSBhIGZsb2F0aW5nIHBvaW50IG51bWJlci4KLQotICBBcmdzOgotICAg
IHRleHQ6IFRleHQgdG8gcGFyc2UuCi0KLSAgUmV0dXJuczoKLSAgICBUaGUgbnVtYmVyIHBhcnNl
ZC4KLQotICBSYWlzZXM6Ci0gICAgVmFsdWVFcnJvcjogSWYgYSBmbG9hdGluZyBwb2ludCBudW1i
ZXIgY291bGRuJ3QgYmUgcGFyc2VkLgotICAiIiIKLSAgdHJ5OgotICAgICMgQXNzdW1lIFB5dGhv
biBjb21wYXRpYmxlIHN5bnRheC4KLSAgICByZXR1cm4gZmxvYXQodGV4dCkKLSAgZXhjZXB0IFZh
bHVlRXJyb3I6Ci0gICAgIyBDaGVjayBhbHRlcm5hdGl2ZSBzcGVsbGluZ3MuCi0gICAgaWYgX0ZM
T0FUX0lORklOSVRZLm1hdGNoKHRleHQpOgotICAgICAgaWYgdGV4dFswXSA9PSAnLSc6Ci0gICAg
ICAgIHJldHVybiBmbG9hdCgnLWluZicpCi0gICAgICBlbHNlOgotICAgICAgICByZXR1cm4gZmxv
YXQoJ2luZicpCi0gICAgZWxpZiBfRkxPQVRfTkFOLm1hdGNoKHRleHQpOgotICAgICAgcmV0dXJu
IGZsb2F0KCduYW4nKQotICAgIGVsc2U6Ci0gICAgICAjIGFzc3VtZSAnMS4wZicgZm9ybWF0Ci0g
ICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBmbG9hdCh0ZXh0LnJzdHJpcCgnZicpKQotICAgICAg
ZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NvdWxkblwndCBw
YXJzZSBmbG9hdDogJXMnICUgdGV4dCkKLQotCi1kZWYgUGFyc2VCb29sKHRleHQpOgotICAiIiJQ
YXJzZSBhIGJvb2xlYW4gdmFsdWUuCi0KLSAgQXJnczoKLSAgICB0ZXh0OiBUZXh0IHRvIHBhcnNl
LgotCi0gIFJldHVybnM6Ci0gICAgQm9vbGVhbiB2YWx1ZXMgcGFyc2VkCi0KLSAgUmFpc2VzOgot
ICAgIFZhbHVlRXJyb3I6IElmIHRleHQgaXMgbm90IGEgdmFsaWQgYm9vbGVhbi4KLSAgIiIiCi0g
IGlmIHRleHQgaW4gKCd0cnVlJywgJ3QnLCAnMScpOgotICAgIHJldHVybiBUcnVlCi0gIGVsaWYg
dGV4dCBpbiAoJ2ZhbHNlJywgJ2YnLCAnMCcpOgotICAgIHJldHVybiBGYWxzZQotICBlbHNlOgot
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0V4cGVjdGVkICJ0cnVlIiBvciAiZmFsc2UiLicpCi0KLQot
ZGVmIFBhcnNlRW51bShmaWVsZCwgdmFsdWUpOgotICAiIiJQYXJzZSBhbiBlbnVtIHZhbHVlLgot
Ci0gIFRoZSB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IGEgbnVtYmVyICh0aGUgZW51bSB2YWx1
ZSksIG9yIGJ5Ci0gIGEgc3RyaW5nIGxpdGVyYWwgKHRoZSBlbnVtIG5hbWUpLgotCi0gIEFyZ3M6
Ci0gICAgZmllbGQ6IEVudW0gZmllbGQgZGVzY3JpcHRvci4KLSAgICB2YWx1ZTogU3RyaW5nIHZh
bHVlLgotCi0gIFJldHVybnM6Ci0gICAgRW51bSB2YWx1ZSBudW1iZXIuCi0KLSAgUmFpc2VzOgot
ICAgIFZhbHVlRXJyb3I6IElmIHRoZSBlbnVtIHZhbHVlIGNvdWxkIG5vdCBiZSBwYXJzZWQuCi0g
ICIiIgotICBlbnVtX2Rlc2NyaXB0b3IgPSBmaWVsZC5lbnVtX3R5cGUKLSAgdHJ5OgotICAgIG51
bWJlciA9IGludCh2YWx1ZSwgMCkKLSAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgIyBJZGVudGlm
aWVyLgotICAgIGVudW1fdmFsdWUgPSBlbnVtX2Rlc2NyaXB0b3IudmFsdWVzX2J5X25hbWUuZ2V0
KHZhbHVlLCBOb25lKQotICAgIGlmIGVudW1fdmFsdWUgaXMgTm9uZToKLSAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoCi0gICAgICAgICAgJ0VudW0gdHlwZSAiJXMiIGhhcyBubyB2YWx1ZSBuYW1lZCAl
cy4nICUgKAotICAgICAgICAgICAgICBlbnVtX2Rlc2NyaXB0b3IuZnVsbF9uYW1lLCB2YWx1ZSkp
Ci0gIGVsc2U6Ci0gICAgIyBOdW1lcmljIHZhbHVlLgotICAgIGVudW1fdmFsdWUgPSBlbnVtX2Rl
c2NyaXB0b3IudmFsdWVzX2J5X251bWJlci5nZXQobnVtYmVyLCBOb25lKQotICAgIGlmIGVudW1f
dmFsdWUgaXMgTm9uZToKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCi0gICAgICAgICAgJ0VudW0g
dHlwZSAiJXMiIGhhcyBubyB2YWx1ZSB3aXRoIG51bWJlciAlZC4nICUgKAotICAgICAgICAgICAg
ICBlbnVtX2Rlc2NyaXB0b3IuZnVsbF9uYW1lLCBudW1iZXIpKQotICByZXR1cm4gZW51bV92YWx1
ZS5udW1iZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL21veC5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL21veC5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMjU3NDY4ZTUyZDcyODU0NjY3ZTZjODQ4MDYwZTFmNjhl
NmE3YjI1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5
dGhvbi9tb3gucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAxICswLDAgQEAKLSMhL3Vzci9iaW4v
cHl0aG9uMi40Ci0jCi0jIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCi0jCi0jIExpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwot
IyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwot
IyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0j
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSBpcyB1c2VkIGZv
ciB0ZXN0aW5nLiAgVGhlIG9yaWdpbmFsIGlzIGF0OgotIyAgIGh0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9weW1veC8KLQotIiIiTW94LCBhbiBvYmplY3QtbW9ja2luZyBmcmFtZXdvcmsgZm9yIFB5
dGhvbi4KLQotTW94IHdvcmtzIGluIHRoZSByZWNvcmQtcmVwbGF5LXZlcmlmeSBwYXJhZGlnbS4g
IFdoZW4geW91IGZpcnN0IGNyZWF0ZQotYSBtb2NrIG9iamVjdCwgaXQgaXMgaW4gcmVjb3JkIG1v
ZGUuICBZb3UgdGhlbiBwcm9ncmFtbWF0aWNhbGx5IHNldAotdGhlIGV4cGVjdGVkIGJlaGF2aW9y
IG9mIHRoZSBtb2NrIG9iamVjdCAod2hhdCBtZXRob2RzIGFyZSB0byBiZQotY2FsbGVkIG9uIGl0
LCB3aXRoIHdoYXQgcGFyYW1ldGVycywgd2hhdCB0aGV5IHNob3VsZCByZXR1cm4sIGFuZCBpbgot
d2hhdCBvcmRlcikuCi0KLU9uY2UgeW91IGhhdmUgc2V0IHVwIHRoZSBleHBlY3RlZCBtb2NrIGJl
aGF2aW9yLCB5b3UgcHV0IGl0IGluIHJlcGxheQotbW9kZS4gIE5vdyB0aGUgbW9jayByZXNwb25k
cyB0byBtZXRob2QgY2FsbHMganVzdCBhcyB5b3UgdG9sZCBpdCB0by4KLUlmIGFuIHVuZXhwZWN0
ZWQgbWV0aG9kIChvciBhbiBleHBlY3RlZCBtZXRob2Qgd2l0aCB1bmV4cGVjdGVkCi1wYXJhbWV0
ZXJzKSBpcyBjYWxsZWQsIHRoZW4gYW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLgotCi1PbmNl
IHlvdSBhcmUgZG9uZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBtb2NrLCB5b3UgbmVlZCB0byB2ZXJp
ZnkgdGhhdAotYWxsIHRoZSBleHBlY3RlZCBpbnRlcmFjdGlvbnMgb2NjdXJyZWQuICAoTWF5YmUg
eW91ciBjb2RlIGV4aXRlZAotcHJlbWF0dXJlbHkgd2l0aG91dCBjYWxsaW5nIHNvbWUgY2xlYW51
cCBtZXRob2QhKSAgVGhlIHZlcmlmeSBwaGFzZQotZW5zdXJlcyB0aGF0IGV2ZXJ5IGV4cGVjdGVk
IG1ldGhvZCB3YXMgY2FsbGVkOyBvdGhlcndpc2UsIGFuIGV4Y2VwdGlvbgotd2lsbCBiZSByYWlz
ZWQuCi0KLVN1Z2dlc3RlZCB1c2FnZSAvIHdvcmtmbG93OgotCi0gICMgQ3JlYXRlIE1veCBmYWN0
b3J5Ci0gIG15X21veCA9IE1veCgpCi0KLSAgIyBDcmVhdGUgYSBtb2NrIGRhdGEgYWNjZXNzIG9i
amVjdAotICBtb2NrX2RhbyA9IG15X21veC5DcmVhdGVNb2NrKERBT0NsYXNzKQotCi0gICMgU2V0
IHVwIGV4cGVjdGVkIGJlaGF2aW9yCi0gIG1vY2tfZGFvLlJldHJpZXZlUGVyc29uV2l0aElkZW50
aWZpZXIoJzEnKS5BbmRSZXR1cm4ocGVyc29uKQotICBtb2NrX2Rhby5EZWxldGVQZXJzb24ocGVy
c29uKQotCi0gICMgUHV0IG1vY2tzIGluIHJlcGxheSBtb2RlCi0gIG15X21veC5SZXBsYXlBbGwo
KQotCi0gICMgSW5qZWN0IG1vY2sgb2JqZWN0IGFuZCBydW4gdGVzdAotICBjb250cm9sbGVyLlNl
dERhbyhtb2NrX2RhbykKLSAgY29udHJvbGxlci5EZWxldGVQZXJzb25CeUlkKCcxJykKLQotICAj
IFZlcmlmeSBhbGwgbWV0aG9kcyB3ZXJlIGNhbGxlZCBhcyBleHBlY3RlZAotICBteV9tb3guVmVy
aWZ5QWxsKCkKLSIiIgotCi1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQotaW1wb3J0IHJl
Ci1pbXBvcnQgdHlwZXMKLWltcG9ydCB1bml0dGVzdAotCi1pbXBvcnQgc3R1Ym91dAotCi1jbGFz
cyBFcnJvcihBc3NlcnRpb25FcnJvcik6Ci0gICIiIkJhc2UgZXhjZXB0aW9uIGZvciB0aGlzIG1v
ZHVsZS4iIiIKLQotICBwYXNzCi0KLQotY2xhc3MgRXhwZWN0ZWRNZXRob2RDYWxsc0Vycm9yKEVy
cm9yKToKLSAgIiIiUmFpc2VkIHdoZW4gVmVyaWZ5KCkgaXMgY2FsbGVkIGJlZm9yZSBhbGwgZXhw
ZWN0ZWQgbWV0aG9kcyBoYXZlIGJlZW4gY2FsbGVkCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhz
ZWxmLCBleHBlY3RlZF9tZXRob2RzKToKLSAgICAiIiJJbml0IGV4Y2VwdGlvbi4KLQotICAgIEFy
Z3M6Ci0gICAgICAjIGV4cGVjdGVkX21ldGhvZHM6IEEgc2VxdWVuY2Ugb2YgTW9ja01ldGhvZCBv
YmplY3RzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbgotICAgICAgIyAgIGNhbGxlZC4KLSAgICAgIGV4
cGVjdGVkX21ldGhvZHM6IFtNb2NrTWV0aG9kXQotCi0gICAgUmFpc2VzOgotICAgICAgVmFsdWVF
cnJvcjogaWYgZXhwZWN0ZWRfbWV0aG9kcyBjb250YWlucyBubyBtZXRob2RzLgotICAgICIiIgot
Ci0gICAgaWYgbm90IGV4cGVjdGVkX21ldGhvZHM6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCJU
aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBleHBlY3RlZCBtZXRob2QiKQotICAgIEVycm9yLl9f
aW5pdF9fKHNlbGYpCi0gICAgc2VsZi5fZXhwZWN0ZWRfbWV0aG9kcyA9IGV4cGVjdGVkX21ldGhv
ZHMKLQotICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICBjYWxscyA9ICJcbiIuam9pbihbIiUzZC4g
ICVzIiAlIChpLCBtKQotICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSwgbSBpbiBlbnVtZXJh
dGUoc2VsZi5fZXhwZWN0ZWRfbWV0aG9kcyldKQotICAgIHJldHVybiAiVmVyaWZ5OiBFeHBlY3Rl
ZCBtZXRob2RzIG5ldmVyIGNhbGxlZDpcbiVzIiAlIChjYWxscywpCi0KLQotY2xhc3MgVW5leHBl
Y3RlZE1ldGhvZENhbGxFcnJvcihFcnJvcik6Ci0gICIiIlJhaXNlZCB3aGVuIGFuIHVuZXhwZWN0
ZWQgbWV0aG9kIGlzIGNhbGxlZC4KLQotICBUaGlzIGNhbiBvY2N1ciBpZiBhIG1ldGhvZCBpcyBj
YWxsZWQgd2l0aCBpbmNvcnJlY3QgcGFyYW1ldGVycywgb3Igb3V0IG9mIHRoZQotICBzcGVjaWZp
ZWQgb3JkZXIuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB1bmV4cGVjdGVkX21ldGhv
ZCwgZXhwZWN0ZWQpOgotICAgICIiIkluaXQgZXhjZXB0aW9uLgotCi0gICAgQXJnczoKLSAgICAg
ICMgdW5leHBlY3RlZF9tZXRob2Q6IE1vY2tNZXRob2QgdGhhdCB3YXMgY2FsbGVkIGJ1dCB3YXMg
bm90IGF0IHRoZSBoZWFkIG9mCi0gICAgICAjICAgdGhlIGV4cGVjdGVkX21ldGhvZCBxdWV1ZS4K
LSAgICAgICMgZXhwZWN0ZWQ6IE1vY2tNZXRob2Qgb3IgVW5vcmRlcmVkR3JvdXAgdGhlIG1ldGhv
ZCBzaG91bGQgaGF2ZQotICAgICAgIyAgIGJlZW4gaW4uCi0gICAgICB1bmV4cGVjdGVkX21ldGhv
ZDogTW9ja01ldGhvZAotICAgICAgZXhwZWN0ZWQ6IE1vY2tNZXRob2Qgb3IgVW5vcmRlcmVkR3Jv
dXAKLSAgICAiIiIKLQotICAgIEVycm9yLl9faW5pdF9fKHNlbGYpCi0gICAgc2VsZi5fdW5leHBl
Y3RlZF9tZXRob2QgPSB1bmV4cGVjdGVkX21ldGhvZAotICAgIHNlbGYuX2V4cGVjdGVkID0gZXhw
ZWN0ZWQKLQotICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICByZXR1cm4gIlVuZXhwZWN0ZWQgbWV0
aG9kIGNhbGw6ICVzLiAgRXhwZWN0aW5nOiAlcyIgJSBcCi0gICAgICAoc2VsZi5fdW5leHBlY3Rl
ZF9tZXRob2QsIHNlbGYuX2V4cGVjdGVkKQotCi0KLWNsYXNzIFVua25vd25NZXRob2RDYWxsRXJy
b3IoRXJyb3IpOgotICAiIiJSYWlzZWQgaWYgYW4gdW5rbm93biBtZXRob2QgaXMgcmVxdWVzdGVk
IG9mIHRoZSBtb2NrIG9iamVjdC4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgdW5rbm93bl9t
ZXRob2RfbmFtZSk6Ci0gICAgIiIiSW5pdCBleGNlcHRpb24uCi0KLSAgICBBcmdzOgotICAgICAg
IyB1bmtub3duX21ldGhvZF9uYW1lOiBNZXRob2QgY2FsbCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRo
ZSBtb2NrZWQgY2xhc3MncwotICAgICAgIyAgIHB1YmxpYyBpbnRlcmZhY2UuCi0gICAgICB1bmtu
b3duX21ldGhvZF9uYW1lOiBzdHIKLSAgICAiIiIKLQotICAgIEVycm9yLl9faW5pdF9fKHNlbGYp
Ci0gICAgc2VsZi5fdW5rbm93bl9tZXRob2RfbmFtZSA9IHVua25vd25fbWV0aG9kX25hbWUKLQot
ICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICByZXR1cm4gIk1ldGhvZCBjYWxsZWQgaXMgbm90IGEg
bWVtYmVyIG9mIHRoZSBvYmplY3Q6ICVzIiAlIFwKLSAgICAgIHNlbGYuX3Vua25vd25fbWV0aG9k
X25hbWUKLQotCi1jbGFzcyBNb3gob2JqZWN0KToKLSAgIiIiTW94OiBhIGZhY3RvcnkgZm9yIGNy
ZWF0aW5nIG1vY2sgb2JqZWN0cy4iIiIKLQotICAjIEEgbGlzdCBvZiB0eXBlcyB0aGF0IHNob3Vs
ZCBiZSBzdHViYmVkIG91dCB3aXRoIE1vY2tPYmplY3RzIChhcwotICAjIG9wcG9zZWQgdG8gTW9j
a0FueXRoaW5ncykuCi0gIF9VU0VfTU9DS19PQkpFQ1QgPSBbdHlwZXMuQ2xhc3NUeXBlLCB0eXBl
cy5JbnN0YW5jZVR5cGUsIHR5cGVzLk1vZHVsZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
dHlwZXMuT2JqZWN0VHlwZSwgdHlwZXMuVHlwZVR5cGVdCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYp
OgotICAgICIiIkluaXRpYWxpemUgYSBuZXcgTW94LiIiIgotCi0gICAgc2VsZi5fbW9ja19vYmpl
Y3RzID0gW10KLSAgICBzZWxmLnN0dWJzID0gc3R1Ym91dC5TdHViT3V0Rm9yVGVzdGluZygpCi0K
LSAgZGVmIENyZWF0ZU1vY2soc2VsZiwgY2xhc3NfdG9fbW9jayk6Ci0gICAgIiIiQ3JlYXRlIGEg
bmV3IG1vY2sgb2JqZWN0LgotCi0gICAgQXJnczoKLSAgICAgICMgY2xhc3NfdG9fbW9jazogdGhl
IGNsYXNzIHRvIGJlIG1vY2tlZAotICAgICAgY2xhc3NfdG9fbW9jazogY2xhc3MKLQotICAgIFJl
dHVybnM6Ci0gICAgICBNb2NrT2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlIGNsYXNzX3Rv
X21vY2sgd291bGQgYmUuCi0gICAgIiIiCi0KLSAgICBuZXdfbW9jayA9IE1vY2tPYmplY3QoY2xh
c3NfdG9fbW9jaykKLSAgICBzZWxmLl9tb2NrX29iamVjdHMuYXBwZW5kKG5ld19tb2NrKQotICAg
IHJldHVybiBuZXdfbW9jawotCi0gIGRlZiBDcmVhdGVNb2NrQW55dGhpbmcoc2VsZik6Ci0gICAg
IiIiQ3JlYXRlIGEgbW9jayB0aGF0IHdpbGwgYWNjZXB0IGFueSBtZXRob2QgY2FsbHMuCi0KLSAg
ICBUaGlzIGRvZXMgbm90IGVuZm9yY2UgYW4gaW50ZXJmYWNlLgotICAgICIiIgotCi0gICAgbmV3
X21vY2sgPSBNb2NrQW55dGhpbmcoKQotICAgIHNlbGYuX21vY2tfb2JqZWN0cy5hcHBlbmQobmV3
X21vY2spCi0gICAgcmV0dXJuIG5ld19tb2NrCi0KLSAgZGVmIFJlcGxheUFsbChzZWxmKToKLSAg
ICAiIiJTZXQgYWxsIG1vY2sgb2JqZWN0cyB0byByZXBsYXkgbW9kZS4iIiIKLQotICAgIGZvciBt
b2NrX29iaiBpbiBzZWxmLl9tb2NrX29iamVjdHM6Ci0gICAgICBtb2NrX29iai5fUmVwbGF5KCkK
LQotCi0gIGRlZiBWZXJpZnlBbGwoc2VsZik6Ci0gICAgIiIiQ2FsbCB2ZXJpZnkgb24gYWxsIG1v
Y2sgb2JqZWN0cyBjcmVhdGVkLiIiIgotCi0gICAgZm9yIG1vY2tfb2JqIGluIHNlbGYuX21vY2tf
b2JqZWN0czoKLSAgICAgIG1vY2tfb2JqLl9WZXJpZnkoKQotCi0gIGRlZiBSZXNldEFsbChzZWxm
KToKLSAgICAiIiJDYWxsIHJlc2V0IG9uIGFsbCBtb2NrIG9iamVjdHMuICBUaGlzIGRvZXMgbm90
IHVuc2V0IHN0dWJzLiIiIgotCi0gICAgZm9yIG1vY2tfb2JqIGluIHNlbGYuX21vY2tfb2JqZWN0
czoKLSAgICAgIG1vY2tfb2JqLl9SZXNldCgpCi0KLSAgZGVmIFN0dWJPdXRXaXRoTW9jayhzZWxm
LCBvYmosIGF0dHJfbmFtZSwgdXNlX21vY2tfYW55dGhpbmc9RmFsc2UpOgotICAgICIiIlJlcGxh
Y2UgYSBtZXRob2QsIGF0dHJpYnV0ZSwgZXRjLiB3aXRoIGEgTW9jay4KLQotICAgIFRoaXMgd2ls
bCByZXBsYWNlIGEgY2xhc3Mgb3IgbW9kdWxlIHdpdGggYSBNb2NrT2JqZWN0LCBhbmQgZXZlcnl0
aGluZyBlbHNlCi0gICAgKG1ldGhvZCwgZnVuY3Rpb24sIGV0Yykgd2l0aCBhIE1vY2tBbnl0aGlu
Zy4gIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdG8KLSAgICBhbHdheXMgdXNlIGEgTW9ja0FueXRo
aW5nIGJ5IHNldHRpbmcgdXNlX21vY2tfYW55dGhpbmcgdG8gVHJ1ZS4KLQotICAgIEFyZ3M6Ci0g
ICAgICBvYmo6IEEgUHl0aG9uIG9iamVjdCAoY2xhc3MsIG1vZHVsZSwgaW5zdGFuY2UsIGNhbGxh
YmxlKS4KLSAgICAgIGF0dHJfbmFtZTogc3RyLiAgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0
byByZXBsYWNlIHdpdGggYSBtb2NrLgotICAgICAgdXNlX21vY2tfYW55dGhpbmc6IGJvb2wuIFRy
dWUgaWYgYSBNb2NrQW55dGhpbmcgc2hvdWxkIGJlIHVzZWQgcmVnYXJkbGVzcwotICAgICAgICBv
ZiB0aGUgdHlwZSBvZiBhdHRyaWJ1dGUuCi0gICAgIiIiCi0KLSAgICBhdHRyX3RvX3JlcGxhY2Ug
PSBnZXRhdHRyKG9iaiwgYXR0cl9uYW1lKQotICAgIGlmIHR5cGUoYXR0cl90b19yZXBsYWNlKSBp
biBzZWxmLl9VU0VfTU9DS19PQkpFQ1QgYW5kIG5vdCB1c2VfbW9ja19hbnl0aGluZzoKLSAgICAg
IHN0dWIgPSBzZWxmLkNyZWF0ZU1vY2soYXR0cl90b19yZXBsYWNlKQotICAgIGVsc2U6Ci0gICAg
ICBzdHViID0gc2VsZi5DcmVhdGVNb2NrQW55dGhpbmcoKQotCi0gICAgc2VsZi5zdHVicy5TZXQo
b2JqLCBhdHRyX25hbWUsIHN0dWIpCi0KLSAgZGVmIFVuc2V0U3R1YnMoc2VsZik6Ci0gICAgIiIi
UmVzdG9yZSBzdHVicyB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZS4iIiIKLQotICAgIHNlbGYuc3R1
YnMuVW5zZXRBbGwoKQotCi1kZWYgUmVwbGF5KCphcmdzKToKLSAgIiIiUHV0IG1vY2tzIGludG8g
UmVwbGF5IG1vZGUuCi0KLSAgQXJnczoKLSAgICAjIGFyZ3MgaXMgYW55IG51bWJlciBvZiBtb2Nr
cyB0byBwdXQgaW50byByZXBsYXkgbW9kZS4KLSAgIiIiCi0KLSAgZm9yIG1vY2sgaW4gYXJnczoK
LSAgICBtb2NrLl9SZXBsYXkoKQotCi0KLWRlZiBWZXJpZnkoKmFyZ3MpOgotICAiIiJWZXJpZnkg
bW9ja3MuCi0KLSAgQXJnczoKLSAgICAjIGFyZ3MgaXMgYW55IG51bWJlciBvZiBtb2NrcyB0byBi
ZSB2ZXJpZmllZC4KLSAgIiIiCi0KLSAgZm9yIG1vY2sgaW4gYXJnczoKLSAgICBtb2NrLl9WZXJp
ZnkoKQotCi0KLWRlZiBSZXNldCgqYXJncyk6Ci0gICIiIlJlc2V0IG1vY2tzLgotCi0gIEFyZ3M6
Ci0gICAgIyBhcmdzIGlzIGFueSBudW1iZXIgb2YgbW9ja3MgdG8gYmUgcmVzZXQuCi0gICIiIgot
Ci0gIGZvciBtb2NrIGluIGFyZ3M6Ci0gICAgbW9jay5fUmVzZXQoKQotCi0KLWNsYXNzIE1vY2tB
bnl0aGluZzoKLSAgIiIiQSBtb2NrIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9jayBhbnl0aGluZy4K
LQotICBUaGlzIGlzIGhlbHBmdWwgZm9yIG1vY2tpbmcgY2xhc3NlcyB0aGF0IGRvIG5vdCBwcm92
aWRlIGEgcHVibGljIGludGVyZmFjZS4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYpOgot
ICAgICIiIiAiIiIKLSAgICBzZWxmLl9SZXNldCgpCi0KLSAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYs
IG1ldGhvZF9uYW1lKToKLSAgICAiIiJJbnRlcmNlcHQgbWV0aG9kIGNhbGxzIG9uIHRoaXMgb2Jq
ZWN0LgotCi0gICAgIEEgbmV3IE1vY2tNZXRob2QgaXMgcmV0dXJuZWQgdGhhdCBpcyBhd2FyZSBv
ZiB0aGUgTW9ja0FueXRoaW5nJ3MKLSAgICAgc3RhdGUgKHJlY29yZCBvciByZXBsYXkpLiAgVGhl
IGNhbGwgd2lsbCBiZSByZWNvcmRlZCBvciByZXBsYXllZAotICAgICBieSB0aGUgTW9ja01ldGhv
ZCdzIF9fY2FsbF9fLgotCi0gICAgQXJnczoKLSAgICAgICMgbWV0aG9kIG5hbWU6IHRoZSBuYW1l
IG9mIHRoZSBtZXRob2QgYmVpbmcgY2FsbGVkLgotICAgICAgbWV0aG9kX25hbWU6IHN0cgotCi0g
ICAgUmV0dXJuczoKLSAgICAgIEEgbmV3IE1vY2tNZXRob2QgYXdhcmUgb2YgTW9ja0FueXRoaW5n
J3Mgc3RhdGUgKHJlY29yZCBvciByZXBsYXkpLgotICAgICIiIgotCi0gICAgcmV0dXJuIHNlbGYu
X0NyZWF0ZU1vY2tNZXRob2QobWV0aG9kX25hbWUpCi0KLSAgZGVmIF9DcmVhdGVNb2NrTWV0aG9k
KHNlbGYsIG1ldGhvZF9uYW1lKToKLSAgICAiIiJDcmVhdGUgYSBuZXcgbW9jayBtZXRob2QgY2Fs
bCBhbmQgcmV0dXJuIGl0LgotCi0gICAgQXJnczoKLSAgICAgICMgbWV0aG9kIG5hbWU6IHRoZSBu
YW1lIG9mIHRoZSBtZXRob2QgYmVpbmcgY2FsbGVkLgotICAgICAgbWV0aG9kX25hbWU6IHN0cgot
Ci0gICAgUmV0dXJuczoKLSAgICAgIEEgbmV3IE1vY2tNZXRob2QgYXdhcmUgb2YgTW9ja0FueXRo
aW5nJ3Mgc3RhdGUgKHJlY29yZCBvciByZXBsYXkpLgotICAgICIiIgotCi0gICAgcmV0dXJuIE1v
Y2tNZXRob2QobWV0aG9kX25hbWUsIHNlbGYuX2V4cGVjdGVkX2NhbGxzX3F1ZXVlLAotICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3JlcGxheV9tb2RlKQotCi0gIGRlZiBfX25vbnplcm9fXyhz
ZWxmKToKLSAgICAiIiJSZXR1cm4gMSBmb3Igbm9uemVybyBzbyB0aGUgbW9jayBjYW4gYmUgdXNl
ZCBhcyBhIGNvbmRpdGlvbmFsLiIiIgotCi0gICAgcmV0dXJuIDEKLQotICBkZWYgX19lcV9fKHNl
bGYsIHJocyk6Ci0gICAgIiIiUHJvdmlkZSBjdXN0b20gbG9naWMgdG8gY29tcGFyZSBvYmplY3Rz
LiIiIgotCi0gICAgcmV0dXJuIChpc2luc3RhbmNlKHJocywgTW9ja0FueXRoaW5nKSBhbmQKLSAg
ICAgICAgICAgIHNlbGYuX3JlcGxheV9tb2RlID09IHJocy5fcmVwbGF5X21vZGUgYW5kCi0gICAg
ICAgICAgICBzZWxmLl9leHBlY3RlZF9jYWxsc19xdWV1ZSA9PSByaHMuX2V4cGVjdGVkX2NhbGxz
X3F1ZXVlKQotCi0gIGRlZiBfX25lX18oc2VsZiwgcmhzKToKLSAgICAiIiJQcm92aWRlIGN1c3Rv
bSBsb2dpYyB0byBjb21wYXJlIG9iamVjdHMuIiIiCi0KLSAgICByZXR1cm4gbm90IHNlbGYgPT0g
cmhzCi0KLSAgZGVmIF9SZXBsYXkoc2VsZik6Ci0gICAgIiIiU3RhcnQgcmVwbGF5aW5nIGV4cGVj
dGVkIG1ldGhvZCBjYWxscy4iIiIKLQotICAgIHNlbGYuX3JlcGxheV9tb2RlID0gVHJ1ZQotCi0g
IGRlZiBfVmVyaWZ5KHNlbGYpOgotICAgICIiIlZlcmlmeSB0aGF0IGFsbCBvZiB0aGUgZXhwZWN0
ZWQgY2FsbHMgaGF2ZSBiZWVuIG1hZGUuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBFeHBlY3RlZE1l
dGhvZENhbGxzRXJyb3I6IGlmIHRoZXJlIGFyZSBzdGlsbCBtb3JlIG1ldGhvZCBjYWxscyBpbiB0
aGUKLSAgICAgICAgZXhwZWN0ZWQgcXVldWUuCi0gICAgIiIiCi0KLSAgICAjIElmIHRoZSBsaXN0
IG9mIGV4cGVjdGVkIGNhbGxzIGlzIG5vdCBlbXB0eSwgcmFpc2UgYW4gZXhjZXB0aW9uCi0gICAg
aWYgc2VsZi5fZXhwZWN0ZWRfY2FsbHNfcXVldWU6Ci0gICAgICAjIFRoZSBsYXN0IE11bHRpcGxl
VGltZXNHcm91cCBpcyBub3QgcG9wcGVkIGZyb20gdGhlIHF1ZXVlLgotICAgICAgaWYgKGxlbihz
ZWxmLl9leHBlY3RlZF9jYWxsc19xdWV1ZSkgPT0gMSBhbmQKLSAgICAgICAgICBpc2luc3RhbmNl
KHNlbGYuX2V4cGVjdGVkX2NhbGxzX3F1ZXVlWzBdLCBNdWx0aXBsZVRpbWVzR3JvdXApIGFuZAot
ICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2NhbGxzX3F1ZXVlWzBdLklzU2F0aXNmaWVkKCkpOgot
ICAgICAgICBwYXNzCi0gICAgICBlbHNlOgotICAgICAgICByYWlzZSBFeHBlY3RlZE1ldGhvZENh
bGxzRXJyb3Ioc2VsZi5fZXhwZWN0ZWRfY2FsbHNfcXVldWUpCi0KLSAgZGVmIF9SZXNldChzZWxm
KToKLSAgICAiIiJSZXNldCB0aGUgc3RhdGUgb2YgdGhpcyBtb2NrIHRvIHJlY29yZCBtb2RlIHdp
dGggYW4gZW1wdHkgcXVldWUuIiIiCi0KLSAgICAjIE1haW50YWluIGEgbGlzdCBvZiBtZXRob2Qg
Y2FsbHMgd2UgYXJlIGV4cGVjdGluZwotICAgIHNlbGYuX2V4cGVjdGVkX2NhbGxzX3F1ZXVlID0g
ZGVxdWUoKQotCi0gICAgIyBNYWtlIHN1cmUgd2UgYXJlIGluIHNldHVwIG1vZGUsIG5vdCByZXBs
YXkgbW9kZQotICAgIHNlbGYuX3JlcGxheV9tb2RlID0gRmFsc2UKLQotCi1jbGFzcyBNb2NrT2Jq
ZWN0KE1vY2tBbnl0aGluZywgb2JqZWN0KToKLSAgIiIiQSBtb2NrIG9iamVjdCB0aGF0IHNpbXVs
YXRlcyB0aGUgcHVibGljL3Byb3RlY3RlZCBpbnRlcmZhY2Ugb2YgYSBjbGFzcy4iIiIKLQotICBk
ZWYgX19pbml0X18oc2VsZiwgY2xhc3NfdG9fbW9jayk6Ci0gICAgIiIiSW5pdGlhbGl6ZSBhIG1v
Y2sgb2JqZWN0LgotCi0gICAgVGhpcyBkZXRlcm1pbmVzIHRoZSBtZXRob2RzIGFuZCBwcm9wZXJ0
aWVzIG9mIHRoZSBjbGFzcyBhbmQgc3RvcmVzIHRoZW0uCi0KLSAgICBBcmdzOgotICAgICAgIyBj
bGFzc190b19tb2NrOiBjbGFzcyB0byBiZSBtb2NrZWQKLSAgICAgIGNsYXNzX3RvX21vY2s6IGNs
YXNzCi0gICAgIiIiCi0KLSAgICAjIFRoaXMgaXMgdXNlZCB0byBoYWNrIGFyb3VuZCB0aGUgbWl4
aW4vaW5oZXJpdGFuY2Ugb2YgTW9ja0FueXRoaW5nLCB3aGljaAotICAgICMgaXMgbm90IGEgcHJv
cGVyIG9iamVjdCAoaXQgY2FuIGJlIGFueXRoaW5nLiA6LSkKLSAgICBNb2NrQW55dGhpbmcuX19k
aWN0X19bJ19faW5pdF9fJ10oc2VsZikKLQotICAgICMgR2V0IGEgbGlzdCBvZiBhbGwgdGhlIHB1
YmxpYyBhbmQgc3BlY2lhbCBtZXRob2RzIHdlIHNob3VsZCBtb2NrLgotICAgIHNlbGYuX2tub3du
X21ldGhvZHMgPSBzZXQoKQotICAgIHNlbGYuX2tub3duX3ZhcnMgPSBzZXQoKQotICAgIHNlbGYu
X2NsYXNzX3RvX21vY2sgPSBjbGFzc190b19tb2NrCi0gICAgZm9yIG1ldGhvZCBpbiBkaXIoY2xh
c3NfdG9fbW9jayk6Ci0gICAgICBpZiBjYWxsYWJsZShnZXRhdHRyKGNsYXNzX3RvX21vY2ssIG1l
dGhvZCkpOgotICAgICAgICBzZWxmLl9rbm93bl9tZXRob2RzLmFkZChtZXRob2QpCi0gICAgICBl
bHNlOgotICAgICAgICBzZWxmLl9rbm93bl92YXJzLmFkZChtZXRob2QpCi0KLSAgZGVmIF9fZ2V0
YXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICIiIkludGVyY2VwdCBhdHRyaWJ1dGUgcmVxdWVzdCBv
biB0aGlzIG9iamVjdC4KLQotICAgIElmIHRoZSBhdHRyaWJ1dGUgaXMgYSBwdWJsaWMgY2xhc3Mg
dmFyaWFibGUsIGl0IHdpbGwgYmUgcmV0dXJuZWQgYW5kIG5vdAotICAgIHJlY29yZGVkIGFzIGEg
Y2FsbC4KLQotICAgIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGEgdmFyaWFibGUsIGl0IGlzIGhh
bmRsZWQgbGlrZSBhIG1ldGhvZAotICAgIGNhbGwuIFRoZSBtZXRob2QgbmFtZSBpcyBjaGVja2Vk
IGFnYWluc3QgdGhlIHNldCBvZiBtb2NrYWJsZQotICAgIG1ldGhvZHMsIGFuZCBhIG5ldyBNb2Nr
TWV0aG9kIGlzIHJldHVybmVkIHRoYXQgaXMgYXdhcmUgb2YgdGhlCi0gICAgTW9ja09iamVjdCdz
IHN0YXRlIChyZWNvcmQgb3IgcmVwbGF5KS4gIFRoZSBjYWxsIHdpbGwgYmUgcmVjb3JkZWQKLSAg
ICBvciByZXBsYXllZCBieSB0aGUgTW9ja01ldGhvZCdzIF9fY2FsbF9fLgotCi0gICAgQXJnczoK
LSAgICAgICMgbmFtZTogdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyByZXF1ZXN0ZWQu
Ci0gICAgICBuYW1lOiBzdHIKLQotICAgIFJldHVybnM6Ci0gICAgICBFaXRoZXIgYSBjbGFzcyB2
YXJpYWJsZSBvciBhIG5ldyBNb2NrTWV0aG9kIHRoYXQgaXMgYXdhcmUgb2YgdGhlIHN0YXRlCi0g
ICAgICBvZiB0aGUgbW9jayAocmVjb3JkIG9yIHJlcGxheSkuCi0KLSAgICBSYWlzZXM6Ci0gICAg
ICBVbmtub3duTWV0aG9kQ2FsbEVycm9yIGlmIHRoZSBNb2NrT2JqZWN0IGRvZXMgbm90IG1vY2sg
dGhlIHJlcXVlc3RlZAotICAgICAgICAgIG1ldGhvZC4KLSAgICAiIiIKLQotICAgIGlmIG5hbWUg
aW4gc2VsZi5fa25vd25fdmFyczoKLSAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX2NsYXNzX3Rv
X21vY2ssIG5hbWUpCi0KLSAgICBpZiBuYW1lIGluIHNlbGYuX2tub3duX21ldGhvZHM6Ci0gICAg
ICByZXR1cm4gc2VsZi5fQ3JlYXRlTW9ja01ldGhvZChuYW1lKQotCi0gICAgcmFpc2UgVW5rbm93
bk1ldGhvZENhbGxFcnJvcihuYW1lKQotCi0gIGRlZiBfX2VxX18oc2VsZiwgcmhzKToKLSAgICAi
IiJQcm92aWRlIGN1c3RvbSBsb2dpYyB0byBjb21wYXJlIG9iamVjdHMuIiIiCi0KLSAgICByZXR1
cm4gKGlzaW5zdGFuY2UocmhzLCBNb2NrT2JqZWN0KSBhbmQKLSAgICAgICAgICAgIHNlbGYuX2Ns
YXNzX3RvX21vY2sgPT0gcmhzLl9jbGFzc190b19tb2NrIGFuZAotICAgICAgICAgICAgc2VsZi5f
cmVwbGF5X21vZGUgPT0gcmhzLl9yZXBsYXlfbW9kZSBhbmQKLSAgICAgICAgICAgIHNlbGYuX2V4
cGVjdGVkX2NhbGxzX3F1ZXVlID09IHJocy5fZXhwZWN0ZWRfY2FsbHNfcXVldWUpCi0KLSAgZGVm
IF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICIiIlByb3ZpZGUgY3VzdG9tIGxv
Z2ljIGZvciBtb2NraW5nIGNsYXNzZXMgdGhhdCBzdXBwb3J0IGl0ZW0gYXNzaWdubWVudC4KLQot
ICAgIEFyZ3M6Ci0gICAgICBrZXk6IEtleSB0byBzZXQgdGhlIHZhbHVlIGZvci4KLSAgICAgIHZh
bHVlOiBWYWx1ZSB0byBzZXQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgRXhwZWN0ZWQgcmV0dXJu
IHZhbHVlIGluIHJlcGxheSBtb2RlLiAgQSBNb2NrTWV0aG9kIG9iamVjdCBmb3IgdGhlCi0gICAg
ICBfX3NldGl0ZW1fXyBtZXRob2QgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBpZiBub3Qg
aW4gcmVwbGF5IG1vZGUuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBUeXBlRXJyb3IgaWYgdGhlIHVu
ZGVybHlpbmcgY2xhc3MgZG9lcyBub3Qgc3VwcG9ydCBpdGVtIGFzc2lnbm1lbnQuCi0gICAgICBV
bmV4cGVjdGVkTWV0aG9kQ2FsbEVycm9yIGlmIHRoZSBvYmplY3QgZG9lcyBub3QgZXhwZWN0IHRo
ZSBjYWxsIHRvCi0gICAgICAgIF9fc2V0aXRlbV9fLgotCi0gICAgIiIiCi0gICAgc2V0aXRlbSA9
IHNlbGYuX2NsYXNzX3RvX21vY2suX19kaWN0X18uZ2V0KCdfX3NldGl0ZW1fXycsIE5vbmUpCi0K
LSAgICAjIFZlcmlmeSB0aGUgY2xhc3Mgc3VwcG9ydHMgaXRlbSBhc3NpZ25tZW50LgotICAgIGlm
IHNldGl0ZW0gaXMgTm9uZToKLSAgICAgIHJhaXNlIFR5cGVFcnJvcignb2JqZWN0IGRvZXMgbm90
IHN1cHBvcnQgaXRlbSBhc3NpZ25tZW50JykKLQotICAgICMgSWYgd2UgYXJlIGluIHJlcGxheSBt
b2RlIHRoZW4gc2ltcGx5IGNhbGwgdGhlIG1vY2sgX19zZXRpdGVtX18gbWV0aG9kLgotICAgIGlm
IHNlbGYuX3JlcGxheV9tb2RlOgotICAgICAgcmV0dXJuIE1vY2tNZXRob2QoJ19fc2V0aXRlbV9f
Jywgc2VsZi5fZXhwZWN0ZWRfY2FsbHNfcXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9yZXBsYXlfbW9kZSkoa2V5LCB2YWx1ZSkKLQotCi0gICAgIyBPdGhlcndpc2UsIGNyZWF0
ZSBhIG1vY2sgbWV0aG9kIF9fc2V0aXRlbV9fLgotICAgIHJldHVybiBzZWxmLl9DcmVhdGVNb2Nr
TWV0aG9kKCdfX3NldGl0ZW1fXycpKGtleSwgdmFsdWUpCi0KLSAgZGVmIF9fZ2V0aXRlbV9fKHNl
bGYsIGtleSk6Ci0gICAgIiIiUHJvdmlkZSBjdXN0b20gbG9naWMgZm9yIG1vY2tpbmcgY2xhc3Nl
cyB0aGF0IGFyZSBzdWJzY3JpcHRhYmxlLgotCi0gICAgQXJnczoKLSAgICAgIGtleTogS2V5IHRv
IHJldHVybiB0aGUgdmFsdWUgZm9yLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEV4cGVjdGVkIHJl
dHVybiB2YWx1ZSBpbiByZXBsYXkgbW9kZS4gIEEgTW9ja01ldGhvZCBvYmplY3QgZm9yIHRoZQot
ICAgICAgX19nZXRpdGVtX18gbWV0aG9kIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgaWYg
bm90IGluIHJlcGxheSBtb2RlLgotCi0gICAgUmFpc2VzOgotICAgICAgVHlwZUVycm9yIGlmIHRo
ZSB1bmRlcmx5aW5nIGNsYXNzIGlzIG5vdCBzdWJzY3JpcHRhYmxlLgotICAgICAgVW5leHBlY3Rl
ZE1ldGhvZENhbGxFcnJvciBpZiB0aGUgb2JqZWN0IGRvZXMgbm90IGV4cGVjdCB0aGUgY2FsbCB0
bwotICAgICAgICBfX3NldGl0ZW1fXy4KLQotICAgICIiIgotICAgIGdldGl0ZW0gPSBzZWxmLl9j
bGFzc190b19tb2NrLl9fZGljdF9fLmdldCgnX19nZXRpdGVtX18nLCBOb25lKQotCi0gICAgIyBW
ZXJpZnkgdGhlIGNsYXNzIHN1cHBvcnRzIGl0ZW0gYXNzaWdubWVudC4KLSAgICBpZiBnZXRpdGVt
IGlzIE5vbmU6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IoJ3Vuc3Vic2NyaXB0YWJsZSBvYmplY3Qn
KQotCi0gICAgIyBJZiB3ZSBhcmUgaW4gcmVwbGF5IG1vZGUgdGhlbiBzaW1wbHkgY2FsbCB0aGUg
bW9jayBfX2dldGl0ZW1fXyBtZXRob2QuCi0gICAgaWYgc2VsZi5fcmVwbGF5X21vZGU6Ci0gICAg
ICByZXR1cm4gTW9ja01ldGhvZCgnX19nZXRpdGVtX18nLCBzZWxmLl9leHBlY3RlZF9jYWxsc19x
dWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlcGxheV9tb2RlKShrZXkpCi0K
LQotICAgICMgT3RoZXJ3aXNlLCBjcmVhdGUgYSBtb2NrIG1ldGhvZCBfX2dldGl0ZW1fXy4KLSAg
ICByZXR1cm4gc2VsZi5fQ3JlYXRlTW9ja01ldGhvZCgnX19nZXRpdGVtX18nKShrZXkpCi0KLSAg
ZGVmIF9fY2FsbF9fKHNlbGYsICpwYXJhbXMsICoqbmFtZWRfcGFyYW1zKToKLSAgICAiIiJQcm92
aWRlIGN1c3RvbSBsb2dpYyBmb3IgbW9ja2luZyBjbGFzc2VzIHRoYXQgYXJlIGNhbGxhYmxlLiIi
IgotCi0gICAgIyBWZXJpZnkgdGhlIGNsYXNzIHdlIGFyZSBtb2NraW5nIGlzIGNhbGxhYmxlCi0g
ICAgY2FsbGFibGUgPSBzZWxmLl9jbGFzc190b19tb2NrLl9fZGljdF9fLmdldCgnX19jYWxsX18n
LCBOb25lKQotICAgIGlmIGNhbGxhYmxlIGlzIE5vbmU6Ci0gICAgICByYWlzZSBUeXBlRXJyb3Io
J05vdCBjYWxsYWJsZScpCi0KLSAgICAjIEJlY2F1c2UgdGhlIGNhbGwgaXMgaGFwcGVuaW5nIGRp
cmVjdGx5IG9uIHRoaXMgb2JqZWN0IGluc3RlYWQgb2YgYSBtZXRob2QsCi0gICAgIyB0aGUgY2Fs
bCBvbiB0aGUgbW9jayBtZXRob2QgaXMgbWFkZSByaWdodCBoZXJlCi0gICAgbW9ja19tZXRob2Qg
PSBzZWxmLl9DcmVhdGVNb2NrTWV0aG9kKCdfX2NhbGxfXycpCi0gICAgcmV0dXJuIG1vY2tfbWV0
aG9kKCpwYXJhbXMsICoqbmFtZWRfcGFyYW1zKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgX19jbGFz
c19fKHNlbGYpOgotICAgICIiIlJldHVybiB0aGUgY2xhc3MgdGhhdCBpcyBiZWluZyBtb2NrZWQu
IiIiCi0KLSAgICByZXR1cm4gc2VsZi5fY2xhc3NfdG9fbW9jawotCi0KLWNsYXNzIE1vY2tNZXRo
b2Qob2JqZWN0KToKLSAgIiIiQ2FsbGFibGUgbW9jayBtZXRob2QuCi0KLSAgQSBNb2NrTWV0aG9k
IHNob3VsZCBhY3QgZXhhY3RseSBsaWtlIHRoZSBtZXRob2QgaXQgbW9ja3MsIGFjY2VwdGluZyBw
YXJhbWV0ZXJzCi0gIGFuZCByZXR1cm5pbmcgYSB2YWx1ZSwgb3IgdGhyb3dpbmcgYW4gZXhjZXB0
aW9uIChhcyBzcGVjaWZpZWQpLiAgV2hlbiB0aGlzCi0gIG1ldGhvZCBpcyBjYWxsZWQsIGl0IGNh
biBvcHRpb25hbGx5IHZlcmlmeSB3aGV0aGVyIHRoZSBjYWxsZWQgbWV0aG9kIChuYW1lIGFuZAot
ICBzaWduYXR1cmUpIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG1ldGhvZC4KLSAgIiIiCi0KLSAgZGVm
IF9faW5pdF9fKHNlbGYsIG1ldGhvZF9uYW1lLCBjYWxsX3F1ZXVlLCByZXBsYXlfbW9kZSk6Ci0g
ICAgIiIiQ29uc3RydWN0IGEgbmV3IG1vY2sgbWV0aG9kLgotCi0gICAgQXJnczoKLSAgICAgICMg
bWV0aG9kX25hbWU6IHRoZSBuYW1lIG9mIHRoZSBtZXRob2QKLSAgICAgICMgY2FsbF9xdWV1ZTog
ZGVxdWUgb2YgY2FsbHMsIHZlcmlmeSB0aGlzIGNhbGwgYWdhaW5zdCB0aGUgaGVhZCwgb3IgYWRk
Ci0gICAgICAjICAgICB0aGlzIGNhbGwgdG8gdGhlIHF1ZXVlLgotICAgICAgIyByZXBsYXlfbW9k
ZTogRmFsc2UgaWYgd2UgYXJlIHJlY29yZGluZywgVHJ1ZSBpZiB3ZSBhcmUgdmVyaWZ5aW5nIGNh
bGxzCi0gICAgICAjICAgICBhZ2FpbnN0IHRoZSBjYWxsIHF1ZXVlLgotICAgICAgbWV0aG9kX25h
bWU6IHN0cgotICAgICAgY2FsbF9xdWV1ZTogbGlzdCBvciBkZXF1ZQotICAgICAgcmVwbGF5X21v
ZGU6IGJvb2wKLSAgICAiIiIKLQotICAgIHNlbGYuX25hbWUgPSBtZXRob2RfbmFtZQotICAgIHNl
bGYuX2NhbGxfcXVldWUgPSBjYWxsX3F1ZXVlCi0gICAgaWYgbm90IGlzaW5zdGFuY2UoY2FsbF9x
dWV1ZSwgZGVxdWUpOgotICAgICAgc2VsZi5fY2FsbF9xdWV1ZSA9IGRlcXVlKHNlbGYuX2NhbGxf
cXVldWUpCi0gICAgc2VsZi5fcmVwbGF5X21vZGUgPSByZXBsYXlfbW9kZQotCi0gICAgc2VsZi5f
cGFyYW1zID0gTm9uZQotICAgIHNlbGYuX25hbWVkX3BhcmFtcyA9IE5vbmUKLSAgICBzZWxmLl9y
ZXR1cm5fdmFsdWUgPSBOb25lCi0gICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQotICAgIHNlbGYu
X3NpZGVfZWZmZWN0cyA9IE5vbmUKLQotICBkZWYgX19jYWxsX18oc2VsZiwgKnBhcmFtcywgKipu
YW1lZF9wYXJhbXMpOgotICAgICIiIkxvZyBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdGhlIHNwZWNp
ZmllZCByZXR1cm4gdmFsdWUuCi0KLSAgICBJZiB0aGUgTW9jayhBbnl0aGluZy9PYmplY3QpIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIGNhbGwgaXMgaW4gcmVjb3JkIG1vZGUsCi0gICAgdGhpcyBNb2Nr
TWV0aG9kIHdpbGwgYmUgcHVzaGVkIG9udG8gdGhlIGV4cGVjdGVkIGNhbGwgcXVldWUuICBJZiB0
aGUgbW9jawotICAgIGlzIGluIHJlcGxheSBtb2RlLCB0aGlzIHdpbGwgcG9wIGEgTW9ja01ldGhv
ZCBvZmYgdGhlIHRvcCBvZiB0aGUgcXVldWUgYW5kCi0gICAgdmVyaWZ5IHRoaXMgY2FsbCBpcyBl
cXVhbCB0byB0aGUgZXhwZWN0ZWQgY2FsbC4KLQotICAgIFJhaXNlczoKLSAgICAgIFVuZXhwZWN0
ZWRNZXRob2RDYWxsIGlmIHRoaXMgY2FsbCBpcyBzdXBwb3NlZCB0byBtYXRjaCBhbiBleHBlY3Rl
ZCBtZXRob2QKLSAgICAgICAgY2FsbCBhbmQgaXQgZG9lcyBub3QuCi0gICAgIiIiCi0KLSAgICBz
ZWxmLl9wYXJhbXMgPSBwYXJhbXMKLSAgICBzZWxmLl9uYW1lZF9wYXJhbXMgPSBuYW1lZF9wYXJh
bXMKLQotICAgIGlmIG5vdCBzZWxmLl9yZXBsYXlfbW9kZToKLSAgICAgIHNlbGYuX2NhbGxfcXVl
dWUuYXBwZW5kKHNlbGYpCi0gICAgICByZXR1cm4gc2VsZgotCi0gICAgZXhwZWN0ZWRfbWV0aG9k
ID0gc2VsZi5fVmVyaWZ5TWV0aG9kQ2FsbCgpCi0KLSAgICBpZiBleHBlY3RlZF9tZXRob2QuX3Np
ZGVfZWZmZWN0czoKLSAgICAgIGV4cGVjdGVkX21ldGhvZC5fc2lkZV9lZmZlY3RzKCpwYXJhbXMs
ICoqbmFtZWRfcGFyYW1zKQotCi0gICAgaWYgZXhwZWN0ZWRfbWV0aG9kLl9leGNlcHRpb246Ci0g
ICAgICByYWlzZSBleHBlY3RlZF9tZXRob2QuX2V4Y2VwdGlvbgotCi0gICAgcmV0dXJuIGV4cGVj
dGVkX21ldGhvZC5fcmV0dXJuX3ZhbHVlCi0KLSAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUp
OgotICAgICIiIlJhaXNlIGFuIEF0dHJpYnV0ZUVycm9yIHdpdGggYSBoZWxwZnVsIG1lc3NhZ2Uu
IiIiCi0KLSAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignTW9ja01ldGhvZCBoYXMgbm8gYXR0cmli
dXRlICIlcyIuICcKLSAgICAgICAgJ0RpZCB5b3UgcmVtZW1iZXIgdG8gcHV0IHlvdXIgbW9ja3Mg
aW4gcmVwbGF5IG1vZGU/JyAlIG5hbWUpCi0KLSAgZGVmIF9Qb3BOZXh0TWV0aG9kKHNlbGYpOgot
ICAgICIiIlBvcCB0aGUgbmV4dCBtZXRob2QgZnJvbSBvdXIgY2FsbCBxdWV1ZS4iIiIKLSAgICB0
cnk6Ci0gICAgICByZXR1cm4gc2VsZi5fY2FsbF9xdWV1ZS5wb3BsZWZ0KCkKLSAgICBleGNlcHQg
SW5kZXhFcnJvcjoKLSAgICAgIHJhaXNlIFVuZXhwZWN0ZWRNZXRob2RDYWxsRXJyb3Ioc2VsZiwg
Tm9uZSkKLQotICBkZWYgX1ZlcmlmeU1ldGhvZENhbGwoc2VsZik6Ci0gICAgIiIiVmVyaWZ5IHRo
ZSBjYWxsZWQgbWV0aG9kIGlzIGV4cGVjdGVkLgotCi0gICAgVGhpcyBjYW4gYmUgYW4gb3JkZXJl
ZCBtZXRob2QsIG9yIHBhcnQgb2YgYW4gdW5vcmRlcmVkIHNldC4KLQotICAgIFJldHVybnM6Ci0g
ICAgICBUaGUgZXhwZWN0ZWQgbW9jayBtZXRob2QuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBVbmV4
cGVjdGVkTWV0aG9kQ2FsbCBpZiB0aGUgbWV0aG9kIGNhbGxlZCB3YXMgbm90IGV4cGVjdGVkLgot
ICAgICIiIgotCi0gICAgZXhwZWN0ZWQgPSBzZWxmLl9Qb3BOZXh0TWV0aG9kKCkKLQotICAgICMg
TG9vcCBoZXJlLCBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgYSBNZXRob2RHcm91cCBmb2xsb3dlZCBi
eSBhbm90aGVyCi0gICAgIyBncm91cC4KLSAgICB3aGlsZSBpc2luc3RhbmNlKGV4cGVjdGVkLCBN
ZXRob2RHcm91cCk6Ci0gICAgICBleHBlY3RlZCwgbWV0aG9kID0gZXhwZWN0ZWQuTWV0aG9kQ2Fs
bGVkKHNlbGYpCi0gICAgICBpZiBtZXRob2QgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJldHVybiBt
ZXRob2QKLQotICAgICMgVGhpcyBpcyBhIG1vY2sgbWV0aG9kLCBzbyBqdXN0IGNoZWNrIGVxdWFs
aXR5LgotICAgIGlmIGV4cGVjdGVkICE9IHNlbGY6Ci0gICAgICByYWlzZSBVbmV4cGVjdGVkTWV0
aG9kQ2FsbEVycm9yKHNlbGYsIGV4cGVjdGVkKQotCi0gICAgcmV0dXJuIGV4cGVjdGVkCi0KLSAg
ZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgcGFyYW1zID0gJywgJy5qb2luKAotICAgICAgICBbcmVw
cihwKSBmb3IgcCBpbiBzZWxmLl9wYXJhbXMgb3IgW11dICsKLSAgICAgICAgWyclcz0lcicgJSB4
IGZvciB4IGluIHNvcnRlZCgoc2VsZi5fbmFtZWRfcGFyYW1zIG9yIHt9KS5pdGVtcygpKV0pCi0g
ICAgZGVzYyA9ICIlcyglcykgLT4gJXIiICUgKHNlbGYuX25hbWUsIHBhcmFtcywgc2VsZi5fcmV0
dXJuX3ZhbHVlKQotICAgIHJldHVybiBkZXNjCi0KLSAgZGVmIF9fZXFfXyhzZWxmLCByaHMpOgot
ICAgICIiIlRlc3Qgd2hldGhlciB0aGlzIE1vY2tNZXRob2QgaXMgZXF1aXZhbGVudCB0byBhbm90
aGVyIE1vY2tNZXRob2QuCi0KLSAgICBBcmdzOgotICAgICAgIyByaHM6IHRoZSByaWdodCBoYW5k
IHNpZGUgb2YgdGhlIHRlc3QKLSAgICAgIHJoczogTW9ja01ldGhvZAotICAgICIiIgotCi0gICAg
cmV0dXJuIChpc2luc3RhbmNlKHJocywgTW9ja01ldGhvZCkgYW5kCi0gICAgICAgICAgICBzZWxm
Ll9uYW1lID09IHJocy5fbmFtZSBhbmQKLSAgICAgICAgICAgIHNlbGYuX3BhcmFtcyA9PSByaHMu
X3BhcmFtcyBhbmQKLSAgICAgICAgICAgIHNlbGYuX25hbWVkX3BhcmFtcyA9PSByaHMuX25hbWVk
X3BhcmFtcykKLQotICBkZWYgX19uZV9fKHNlbGYsIHJocyk6Ci0gICAgIiIiVGVzdCB3aGV0aGVy
IHRoaXMgTW9ja01ldGhvZCBpcyBub3QgZXF1aXZhbGVudCB0byBhbm90aGVyIE1vY2tNZXRob2Qu
Ci0KLSAgICBBcmdzOgotICAgICAgIyByaHM6IHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIHRl
c3QKLSAgICAgIHJoczogTW9ja01ldGhvZAotICAgICIiIgotCi0gICAgcmV0dXJuIG5vdCBzZWxm
ID09IHJocwotCi0gIGRlZiBHZXRQb3NzaWJsZUdyb3VwKHNlbGYpOgotICAgICIiIlJldHVybnMg
YSBwb3NzaWJsZSBncm91cCBmcm9tIHRoZSBlbmQgb2YgdGhlIGNhbGwgcXVldWUgb3IgTm9uZSBp
ZiBubwotICAgIG90aGVyIG1ldGhvZHMgYXJlIG9uIHRoZSBzdGFjay4KLSAgICAiIiIKLQotICAg
ICMgUmVtb3ZlIHRoaXMgbWV0aG9kIGZyb20gdGhlIHRhaWwgb2YgdGhlIHF1ZXVlIHNvIHdlIGNh
biBhZGQgaXQgdG8gYSBncm91cC4KLSAgICB0aGlzX21ldGhvZCA9IHNlbGYuX2NhbGxfcXVldWUu
cG9wKCkKLSAgICBhc3NlcnQgdGhpc19tZXRob2QgPT0gc2VsZgotCi0gICAgIyBEZXRlcm1pbmUg
aWYgdGhlIHRhaWwgb2YgdGhlIHF1ZXVlIGlzIGEgZ3JvdXAsIG9yIGp1c3QgYSByZWd1bGFyIG9y
ZGVyZWQKLSAgICAjIG1vY2sgbWV0aG9kLgotICAgIGdyb3VwID0gTm9uZQotICAgIHRyeToKLSAg
ICAgIGdyb3VwID0gc2VsZi5fY2FsbF9xdWV1ZVstMV0KLSAgICBleGNlcHQgSW5kZXhFcnJvcjoK
LSAgICAgIHBhc3MKLQotICAgIHJldHVybiBncm91cAotCi0gIGRlZiBfQ2hlY2tBbmRDcmVhdGVO
ZXdHcm91cChzZWxmLCBncm91cF9uYW1lLCBncm91cF9jbGFzcyk6Ci0gICAgIiIiQ2hlY2tzIGlm
IHRoZSBsYXN0IG1ldGhvZCAoYSBwb3NzaWJsZSBncm91cCkgaXMgYW4gaW5zdGFuY2Ugb2Ygb3Vy
Ci0gICAgZ3JvdXBfY2xhc3MuIEFkZHMgdGhlIGN1cnJlbnQgbWV0aG9kIHRvIHRoaXMgZ3JvdXAg
b3IgY3JlYXRlcyBhIG5ldyBvbmUuCi0KLSAgICBBcmdzOgotCi0gICAgICBncm91cF9uYW1lOiB0
aGUgbmFtZSBvZiB0aGUgZ3JvdXAuCi0gICAgICBncm91cF9jbGFzczogdGhlIGNsYXNzIHVzZWQg
dG8gY3JlYXRlIGluc3RhbmNlIG9mIHRoaXMgbmV3IGdyb3VwCi0gICAgIiIiCi0gICAgZ3JvdXAg
PSBzZWxmLkdldFBvc3NpYmxlR3JvdXAoKQotCi0gICAgIyBJZiB0aGlzIGlzIGEgZ3JvdXAsIGFu
ZCBpdCBpcyB0aGUgY29ycmVjdCBncm91cCwgYWRkIHRoZSBtZXRob2QuCi0gICAgaWYgaXNpbnN0
YW5jZShncm91cCwgZ3JvdXBfY2xhc3MpIGFuZCBncm91cC5ncm91cF9uYW1lKCkgPT0gZ3JvdXBf
bmFtZToKLSAgICAgIGdyb3VwLkFkZE1ldGhvZChzZWxmKQotICAgICAgcmV0dXJuIHNlbGYKLQot
ICAgICMgQ3JlYXRlIGEgbmV3IGdyb3VwIGFuZCBhZGQgdGhlIG1ldGhvZC4KLSAgICBuZXdfZ3Jv
dXAgPSBncm91cF9jbGFzcyhncm91cF9uYW1lKQotICAgIG5ld19ncm91cC5BZGRNZXRob2Qoc2Vs
ZikKLSAgICBzZWxmLl9jYWxsX3F1ZXVlLmFwcGVuZChuZXdfZ3JvdXApCi0gICAgcmV0dXJuIHNl
bGYKLQotICBkZWYgSW5BbnlPcmRlcihzZWxmLCBncm91cF9uYW1lPSJkZWZhdWx0Iik6Ci0gICAg
IiIiTW92ZSB0aGlzIG1ldGhvZCBpbnRvIGEgZ3JvdXAgb2YgdW5vcmRlcmVkIGNhbGxzLgotCi0g
ICAgQSBncm91cCBvZiB1bm9yZGVyZWQgY2FsbHMgbXVzdCBiZSBkZWZpbmVkIHRvZ2V0aGVyLCBh
bmQgbXVzdCBiZSBleGVjdXRlZAotICAgIGluIGZ1bGwgYmVmb3JlIHRoZSBuZXh0IGV4cGVjdGVk
IG1ldGhvZCBjYW4gYmUgY2FsbGVkLiAgVGhlcmUgY2FuIGJlCi0gICAgbXVsdGlwbGUgZ3JvdXBz
IHRoYXQgYXJlIGV4cGVjdGVkIHNlcmlhbGx5LCBpZiB0aGV5IGFyZSBnaXZlbgotICAgIGRpZmZl
cmVudCBncm91cCBuYW1lcy4gIFRoZSBzYW1lIGdyb3VwIG5hbWUgY2FuIGJlIHJldXNlZCBpZiB0
aGVyZSBpcyBhCi0gICAgc3RhbmRhcmQgbWV0aG9kIGNhbGwsIG9yIGEgZ3JvdXAgd2l0aCBhIGRp
ZmZlcmVudCBuYW1lLCBzcGxpY2VkIGJldHdlZW4KLSAgICB1c2FnZXMuCi0KLSAgICBBcmdzOgot
ICAgICAgZ3JvdXBfbmFtZTogdGhlIG5hbWUgb2YgdGhlIHVub3JkZXJlZCBncm91cC4KLQotICAg
IFJldHVybnM6Ci0gICAgICBzZWxmCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuX0NoZWNrQW5k
Q3JlYXRlTmV3R3JvdXAoZ3JvdXBfbmFtZSwgVW5vcmRlcmVkR3JvdXApCi0KLSAgZGVmIE11bHRp
cGxlVGltZXMoc2VsZiwgZ3JvdXBfbmFtZT0iZGVmYXVsdCIpOgotICAgICIiIk1vdmUgdGhpcyBt
ZXRob2QgaW50byBncm91cCBvZiBjYWxscyB3aGljaCBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRp
bWVzLgotCi0gICAgQSBncm91cCBvZiByZXBlYXRpbmcgY2FsbHMgbXVzdCBiZSBkZWZpbmVkIHRv
Z2V0aGVyLCBhbmQgbXVzdCBiZSBleGVjdXRlZCBpbgotICAgIGZ1bGwgYmVmb3JlIHRoZSBuZXh0
IGV4cGVjdGVkIG1laHRvZCBjYW4gYmUgY2FsbGVkLgotCi0gICAgQXJnczoKLSAgICAgIGdyb3Vw
X25hbWU6IHRoZSBuYW1lIG9mIHRoZSB1bm9yZGVyZWQgZ3JvdXAuCi0KLSAgICBSZXR1cm5zOgot
ICAgICAgc2VsZgotICAgICIiIgotICAgIHJldHVybiBzZWxmLl9DaGVja0FuZENyZWF0ZU5ld0dy
b3VwKGdyb3VwX25hbWUsIE11bHRpcGxlVGltZXNHcm91cCkKLQotICBkZWYgQW5kUmV0dXJuKHNl
bGYsIHJldHVybl92YWx1ZSk6Ci0gICAgIiIiU2V0IHRoZSB2YWx1ZSB0byByZXR1cm4gd2hlbiB0
aGlzIG1ldGhvZCBpcyBjYWxsZWQuCi0KLSAgICBBcmdzOgotICAgICAgIyByZXR1cm5fdmFsdWUg
Y2FuIGJlIGFueXRoaW5nLgotICAgICIiIgotCi0gICAgc2VsZi5fcmV0dXJuX3ZhbHVlID0gcmV0
dXJuX3ZhbHVlCi0gICAgcmV0dXJuIHJldHVybl92YWx1ZQotCi0gIGRlZiBBbmRSYWlzZShzZWxm
LCBleGNlcHRpb24pOgotICAgICIiIlNldCB0aGUgZXhjZXB0aW9uIHRvIHJhaXNlIHdoZW4gdGhp
cyBtZXRob2QgaXMgY2FsbGVkLgotCi0gICAgQXJnczoKLSAgICAgICMgZXhjZXB0aW9uOiB0aGUg
ZXhjZXB0aW9uIHRvIHJhaXNlIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgotICAgICAgZXhj
ZXB0aW9uOiBFeGNlcHRpb24KLSAgICAiIiIKLQotICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4Y2Vw
dGlvbgotCi0gIGRlZiBXaXRoU2lkZUVmZmVjdHMoc2VsZiwgc2lkZV9lZmZlY3RzKToKLSAgICAi
IiJTZXQgdGhlIHNpZGUgZWZmZWN0cyB0aGF0IGFyZSBzaW11bGF0ZWQgd2hlbiB0aGlzIG1ldGhv
ZCBpcyBjYWxsZWQuCi0KLSAgICBBcmdzOgotICAgICAgc2lkZV9lZmZlY3RzOiBBIGNhbGxhYmxl
IHdoaWNoIG1vZGlmaWVzIHRoZSBwYXJhbWV0ZXJzIG9yIG90aGVyIHJlbGV2YW50Ci0gICAgICAg
IHN0YXRlIHdoaWNoIGEgZ2l2ZW4gdGVzdCBjYXNlIGRlcGVuZHMgb24uCi0KLSAgICBSZXR1cm5z
OgotICAgICAgU2VsZiBmb3IgY2hhaW5pbmcgd2l0aCBBbmRSZXR1cm4gYW5kIEFuZFJhaXNlLgot
ICAgICIiIgotICAgIHNlbGYuX3NpZGVfZWZmZWN0cyA9IHNpZGVfZWZmZWN0cwotICAgIHJldHVy
biBzZWxmCi0KLWNsYXNzIENvbXBhcmF0b3I6Ci0gICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBNb3gg
Y29tcGFyYXRvcnMuCi0KLSAgQSBDb21wYXJhdG9yIGNhbiBiZSB1c2VkIGFzIGEgcGFyYW1ldGVy
IHRvIGEgbW9ja2VkIG1ldGhvZCB3aGVuIHRoZSBleGFjdAotICB2YWx1ZSBpcyBub3Qga25vd24u
ICBGb3IgZXhhbXBsZSwgdGhlIGNvZGUgeW91IGFyZSB0ZXN0aW5nIG1pZ2h0IGJ1aWxkIHVwIGEK
LSAgbG9uZyBTUUwgc3RyaW5nIHRoYXQgaXMgcGFzc2VkIHRvIHlvdXIgbW9jayBEQU8uIFlvdSdy
ZSBvbmx5IGludGVyZXN0ZWQgdGhhdAotICB0aGUgSU4gY2xhdXNlIGNvbnRhaW5zIHRoZSBwcm9w
ZXIgcHJpbWFyeSBrZXlzLCBzbyB5b3UgY2FuIHNldCB5b3VyIG1vY2sKLSAgdXAgYXMgZm9sbG93
czoKLQotICBtb2NrX2Rhby5SdW5RdWVyeShTdHJDb250YWlucygnSU4gKDEsIDIsIDQsIDUpJykp
LkFuZFJldHVybihtb2NrX3Jlc3VsdCkKLQotICBOb3cgd2hhdGV2ZXIgcXVlcnkgaXMgcGFzc2Vk
IGluIG11c3QgY29udGFpbiB0aGUgc3RyaW5nICdJTiAoMSwgMiwgNCwgNSknLgotCi0gIEEgQ29t
cGFyYXRvciBtYXkgcmVwbGFjZSBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzLCBmb3IgZXhhbXBsZToK
LSAgIyByZXR1cm4gYXQgbW9zdCAxMCByb3dzCi0gIG1vY2tfZGFvLlJ1blF1ZXJ5KFN0ckNvbnRh
aW5zKCdTRUxFQ1QnKSwgMTApCi0KLSAgb3IKLQotICAjIFJldHVybiBzb21lIG5vbi1kZXRlcm1p
bmlzdGljIG51bWJlciBvZiByb3dzCi0gIG1vY2tfZGFvLlJ1blF1ZXJ5KFN0ckNvbnRhaW5zKCdT
RUxFQ1QnKSwgSXNBKGludCkpCi0gICIiIgotCi0gIGRlZiBlcXVhbHMoc2VsZiwgcmhzKToKLSAg
ICAiIiJTcGVjaWFsIGVxdWFscyBtZXRob2QgdGhhdCBhbGwgY29tcGFyYXRvcnMgbXVzdCBpbXBs
ZW1lbnQuCi0KLSAgICBBcmdzOgotICAgICAgcmhzOiBhbnkgcHl0aG9uIG9iamVjdAotICAgICIi
IgotCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgJ21ldGhvZCBtdXN0IGJlIGltcGxl
bWVudGVkIGJ5IGEgc3ViY2xhc3MuJwotCi0gIGRlZiBfX2VxX18oc2VsZiwgcmhzKToKLSAgICBy
ZXR1cm4gc2VsZi5lcXVhbHMocmhzKQotCi0gIGRlZiBfX25lX18oc2VsZiwgcmhzKToKLSAgICBy
ZXR1cm4gbm90IHNlbGYuZXF1YWxzKHJocykKLQotCi1jbGFzcyBJc0EoQ29tcGFyYXRvcik6Ci0g
ICIiIlRoaXMgY2xhc3Mgd3JhcHMgYSBiYXNpYyBQeXRob24gdHlwZSBvciBjbGFzcy4gIEl0IGlz
IHVzZWQgdG8gdmVyaWZ5Ci0gIHRoYXQgYSBwYXJhbWV0ZXIgaXMgb2YgdGhlIGdpdmVuIHR5cGUg
b3IgY2xhc3MuCi0KLSAgRXhhbXBsZToKLSAgbW9ja19kYW8uQ29ubmVjdChJc0EoRGJDb25uZWN0
SW5mbykpCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBjbGFzc19uYW1lKToKLSAgICAi
IiJJbml0aWFsaXplIElzQQotCi0gICAgQXJnczoKLSAgICAgIGNsYXNzX25hbWU6IGJhc2ljIHB5
dGhvbiB0eXBlIG9yIGEgY2xhc3MKLSAgICAiIiIKLQotICAgIHNlbGYuX2NsYXNzX25hbWUgPSBj
bGFzc19uYW1lCi0KLSAgZGVmIGVxdWFscyhzZWxmLCByaHMpOgotICAgICIiIkNoZWNrIHRvIHNl
ZSBpZiB0aGUgUkhTIGlzIGFuIGluc3RhbmNlIG9mIGNsYXNzX25hbWUuCi0KLSAgICBBcmdzOgot
ICAgICAgIyByaHM6IHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIHRlc3QKLSAgICAgIHJoczog
b2JqZWN0Ci0KLSAgICBSZXR1cm5zOgotICAgICAgYm9vbAotICAgICIiIgotCi0gICAgdHJ5Ogot
ICAgICAgcmV0dXJuIGlzaW5zdGFuY2UocmhzLCBzZWxmLl9jbGFzc19uYW1lKQotICAgIGV4Y2Vw
dCBUeXBlRXJyb3I6Ci0gICAgICAjIENoZWNrIHJhdyB0eXBlcyBpZiB0aGVyZSB3YXMgYSB0eXBl
IGVycm9yLiAgVGhpcyBpcyBoZWxwZnVsIGZvcgotICAgICAgIyB0aGluZ3MgbGlrZSBjU3RyaW5n
SU8uU3RyaW5nSU8uCi0gICAgICByZXR1cm4gdHlwZShyaHMpID09IHR5cGUoc2VsZi5fY2xhc3Nf
bmFtZSkKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuIHN0cihzZWxmLl9jbGFz
c19uYW1lKQotCi1jbGFzcyBJc0FsbW9zdChDb21wYXJhdG9yKToKLSAgIiIiQ29tcGFyaXNvbiBj
bGFzcyB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYSBwYXJhbWV0ZXIgaXMgbmVhcmx5IGVxdWFsCi0g
IHRvIGEgZ2l2ZW4gdmFsdWUuICBHZW5lcmFsbHkgdXNlZnVsIGZvciBmbG9hdGluZyBwb2ludCBu
dW1iZXJzLgotCi0gIEV4YW1wbGUgbW9ja19kYW8uU2V0VGltZW91dCgoSXNBbG1vc3QoMy45KSkp
Ci0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBmbG9hdF92YWx1ZSwgcGxhY2VzPTcpOgot
ICAgICIiIkluaXRpYWxpemUgSXNBbG1vc3QuCi0KLSAgICBBcmdzOgotICAgICAgZmxvYXRfdmFs
dWU6IFRoZSB2YWx1ZSBmb3IgbWFraW5nIHRoZSBjb21wYXJpc29uLgotICAgICAgcGxhY2VzOiBU
aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHJvdW5kIHRvLgotICAgICIiIgotCi0gICAg
c2VsZi5fZmxvYXRfdmFsdWUgPSBmbG9hdF92YWx1ZQotICAgIHNlbGYuX3BsYWNlcyA9IHBsYWNl
cwotCi0gIGRlZiBlcXVhbHMoc2VsZiwgcmhzKToKLSAgICAiIiJDaGVjayB0byBzZWUgaWYgUkhT
IGlzIGFsbW9zdCBlcXVhbCB0byBmbG9hdF92YWx1ZQotCi0gICAgQXJnczoKLSAgICAgIHJoczog
dGhlIHZhbHVlIHRvIGNvbXBhcmUgdG8gZmxvYXRfdmFsdWUKLQotICAgIFJldHVybnM6Ci0gICAg
ICBib29sCi0gICAgIiIiCi0KLSAgICB0cnk6Ci0gICAgICByZXR1cm4gcm91bmQocmhzLXNlbGYu
X2Zsb2F0X3ZhbHVlLCBzZWxmLl9wbGFjZXMpID09IDAKLSAgICBleGNlcHQgVHlwZUVycm9yOgot
ICAgICAgIyBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgZWl0aGVyIGZsb2F0X3ZhbHVlIG9yIHJo
cyBpcyBub3QgYSBudW1iZXIuCi0gICAgICByZXR1cm4gRmFsc2UKLQotICBkZWYgX19yZXByX18o
c2VsZik6Ci0gICAgcmV0dXJuIHN0cihzZWxmLl9mbG9hdF92YWx1ZSkKLQotY2xhc3MgU3RyQ29u
dGFpbnMoQ29tcGFyYXRvcik6Ci0gICIiIkNvbXBhcmlzb24gY2xhc3MgdXNlZCB0byBjaGVjayB3
aGV0aGVyIGEgc3Vic3RyaW5nIGV4aXN0cyBpbiBhCi0gIHN0cmluZyBwYXJhbWV0ZXIuICBUaGlz
IGNhbiBiZSB1c2VmdWwgaW4gbW9ja2luZyBhIGRhdGFiYXNlIHdpdGggU1FMCi0gIHBhc3NlZCBp
biBhcyBhIHN0cmluZyBwYXJhbWV0ZXIsIGZvciBleGFtcGxlLgotCi0gIEV4YW1wbGU6Ci0gIG1v
Y2tfZGFvLlJ1blF1ZXJ5KFN0ckNvbnRhaW5zKCdJTiAoMSwgMiwgNCwgNSknKSkuQW5kUmV0dXJu
KG1vY2tfcmVzdWx0KQotICAiIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgc2VhcmNoX3N0cmlu
Zyk6Ci0gICAgIiIiSW5pdGlhbGl6ZS4KLQotICAgIEFyZ3M6Ci0gICAgICAjIHNlYXJjaF9zdHJp
bmc6IHRoZSBzdHJpbmcgeW91IGFyZSBzZWFyY2hpbmcgZm9yCi0gICAgICBzZWFyY2hfc3RyaW5n
OiBzdHIKLSAgICAiIiIKLQotICAgIHNlbGYuX3NlYXJjaF9zdHJpbmcgPSBzZWFyY2hfc3RyaW5n
Ci0KLSAgZGVmIGVxdWFscyhzZWxmLCByaHMpOgotICAgICIiIkNoZWNrIHRvIHNlZSBpZiB0aGUg
c2VhcmNoX3N0cmluZyBpcyBjb250YWluZWQgaW4gdGhlIHJocyBzdHJpbmcuCi0KLSAgICBBcmdz
OgotICAgICAgIyByaHM6IHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIHRlc3QKLSAgICAgIHJo
czogb2JqZWN0Ci0KLSAgICBSZXR1cm5zOgotICAgICAgYm9vbAotICAgICIiIgotCi0gICAgdHJ5
OgotICAgICAgcmV0dXJuIHJocy5maW5kKHNlbGYuX3NlYXJjaF9zdHJpbmcpID4gLTEKLSAgICBl
eGNlcHQgRXhjZXB0aW9uOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIF9fcmVwcl9fKHNl
bGYpOgotICAgIHJldHVybiAnPHN0ciBjb250YWluaW5nIFwnJXNcJz4nICUgc2VsZi5fc2VhcmNo
X3N0cmluZwotCi0KLWNsYXNzIFJlZ2V4KENvbXBhcmF0b3IpOgotICAiIiJDaGVja3MgaWYgYSBz
dHJpbmcgbWF0Y2hlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KLQotICBUaGlzIHVzZXMgYSBnaXZl
biByZWd1bGFyIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGVxdWFsaXR5LgotICAiIiIKLQotICBk
ZWYgX19pbml0X18oc2VsZiwgcGF0dGVybiwgZmxhZ3M9MCk6Ci0gICAgIiIiSW5pdGlhbGl6ZS4K
LQotICAgIEFyZ3M6Ci0gICAgICAjIHBhdHRlcm4gaXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0
byBzZWFyY2ggZm9yCi0gICAgICBwYXR0ZXJuOiBzdHIKLSAgICAgICMgZmxhZ3MgcGFzc2VkIHRv
IHJlLmNvbXBpbGUgZnVuY3Rpb24gYXMgdGhlIHNlY29uZCBhcmd1bWVudAotICAgICAgZmxhZ3M6
IGludAotICAgICIiIgotCi0gICAgc2VsZi5yZWdleCA9IHJlLmNvbXBpbGUocGF0dGVybiwgZmxh
Z3M9ZmxhZ3MpCi0KLSAgZGVmIGVxdWFscyhzZWxmLCByaHMpOgotICAgICIiIkNoZWNrIHRvIHNl
ZSBpZiByaHMgbWF0Y2hlcyByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KLQotICAgIFJldHVy
bnM6Ci0gICAgICBib29sCi0gICAgIiIiCi0KLSAgICByZXR1cm4gc2VsZi5yZWdleC5zZWFyY2go
cmhzKSBpcyBub3QgTm9uZQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICBzID0gJzxyZWd1
bGFyIGV4cHJlc3Npb24gXCclc1wnJyAlIHNlbGYucmVnZXgucGF0dGVybgotICAgIGlmIHNlbGYu
cmVnZXguZmxhZ3M6Ci0gICAgICBzICs9ICcsIGZsYWdzPSVkJyAlIHNlbGYucmVnZXguZmxhZ3MK
LSAgICBzICs9ICc+JwotICAgIHJldHVybiBzCi0KLQotY2xhc3MgSW4oQ29tcGFyYXRvcik6Ci0g
ICIiIkNoZWNrcyB3aGV0aGVyIGFuIGl0ZW0gKG9yIGtleSkgaXMgaW4gYSBsaXN0IChvciBkaWN0
KSBwYXJhbWV0ZXIuCi0KLSAgRXhhbXBsZToKLSAgbW9ja19kYW8uR2V0VXNlcnNJbmZvKEluKCdl
eHBlY3RlZFVzZXJOYW1lJykpLkFuZFJldHVybihtb2NrX3Jlc3VsdCkKLSAgIiIiCi0KLSAgZGVm
IF9faW5pdF9fKHNlbGYsIGtleSk6Ci0gICAgIiIiSW5pdGlhbGl6ZS4KLQotICAgIEFyZ3M6Ci0g
ICAgICAjIGtleSBpcyBhbnkgdGhpbmcgdGhhdCBjb3VsZCBiZSBpbiBhIGxpc3Qgb3IgYSBrZXkg
aW4gYSBkaWN0Ci0gICAgIiIiCi0KLSAgICBzZWxmLl9rZXkgPSBrZXkKLQotICBkZWYgZXF1YWxz
KHNlbGYsIHJocyk6Ci0gICAgIiIiQ2hlY2sgdG8gc2VlIHdoZXRoZXIga2V5IGlzIGluIHJocy4K
LQotICAgIEFyZ3M6Ci0gICAgICByaHM6IGRpY3QKLQotICAgIFJldHVybnM6Ci0gICAgICBib29s
Ci0gICAgIiIiCi0KLSAgICByZXR1cm4gc2VsZi5fa2V5IGluIHJocwotCi0gIGRlZiBfX3JlcHJf
XyhzZWxmKToKLSAgICByZXR1cm4gJzxzZXF1ZW5jZSBvciBtYXAgY29udGFpbmluZyBcJyVzXCc+
JyAlIHNlbGYuX2tleQotCi0KLWNsYXNzIENvbnRhaW5zS2V5VmFsdWUoQ29tcGFyYXRvcik6Ci0g
ICIiIkNoZWNrcyB3aGV0aGVyIGEga2V5L3ZhbHVlIHBhaXIgaXMgaW4gYSBkaWN0IHBhcmFtZXRl
ci4KLQotICBFeGFtcGxlOgotICBtb2NrX2Rhby5VcGRhdGVVc2VycyhDb250YWluc0tleVZhbHVl
KCdzdGV2ZXBtJywgc3RldmVwbV91c2VyX2luZm8pKQotICAiIiIKLQotICBkZWYgX19pbml0X18o
c2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgIiIiSW5pdGlhbGl6ZS4KLQotICAgIEFyZ3M6Ci0gICAg
ICAjIGtleTogYSBrZXkgaW4gYSBkaWN0Ci0gICAgICAjIHZhbHVlOiB0aGUgY29ycmVzcG9uZGlu
ZyB2YWx1ZQotICAgICIiIgotCi0gICAgc2VsZi5fa2V5ID0ga2V5Ci0gICAgc2VsZi5fdmFsdWUg
PSB2YWx1ZQotCi0gIGRlZiBlcXVhbHMoc2VsZiwgcmhzKToKLSAgICAiIiJDaGVjayB3aGV0aGVy
IHRoZSBnaXZlbiBrZXkvdmFsdWUgcGFpciBpcyBpbiB0aGUgcmhzIGRpY3QuCi0KLSAgICBSZXR1
cm5zOgotICAgICAgYm9vbAotICAgICIiIgotCi0gICAgdHJ5OgotICAgICAgcmV0dXJuIHJoc1tz
ZWxmLl9rZXldID09IHNlbGYuX3ZhbHVlCi0gICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgIHJl
dHVybiBGYWxzZQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gJzxtYXAgY29u
dGFpbmluZyB0aGUgZW50cnkgXCclczogJXNcJz4nICUgKHNlbGYuX2tleSwgc2VsZi5fdmFsdWUp
Ci0KLQotY2xhc3MgU2FtZUVsZW1lbnRzQXMoQ29tcGFyYXRvcik6Ci0gICIiIkNoZWNrcyB3aGV0
aGVyIGl0ZXJhYmxlcyBjb250YWluIHRoZSBzYW1lIGVsZW1lbnRzIChpZ25vcmluZyBvcmRlciku
Ci0KLSAgRXhhbXBsZToKLSAgbW9ja19kYW8uUHJvY2Vzc1VzZXJzKFNhbWVFbGVtZW50c0FzKCdz
dGV2ZXBtJywgJ3NhbG9tYWtpJykpCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBleHBl
Y3RlZF9zZXEpOgotICAgICIiIkluaXRpYWxpemUuCi0KLSAgICBBcmdzOgotICAgICAgZXhwZWN0
ZWRfc2VxOiBhIHNlcXVlbmNlCi0gICAgIiIiCi0KLSAgICBzZWxmLl9leHBlY3RlZF9zZXEgPSBl
eHBlY3RlZF9zZXEKLQotICBkZWYgZXF1YWxzKHNlbGYsIGFjdHVhbF9zZXEpOgotICAgICIiIkNo
ZWNrIHRvIHNlZSB3aGV0aGVyIGFjdHVhbF9zZXEgaGFzIHNhbWUgZWxlbWVudHMgYXMgZXhwZWN0
ZWRfc2VxLgotCi0gICAgQXJnczoKLSAgICAgIGFjdHVhbF9zZXE6IHNlcXVlbmNlCi0KLSAgICBS
ZXR1cm5zOgotICAgICAgYm9vbAotICAgICIiIgotCi0gICAgdHJ5OgotICAgICAgZXhwZWN0ZWQg
PSBkaWN0KFsoZWxlbWVudCwgTm9uZSkgZm9yIGVsZW1lbnQgaW4gc2VsZi5fZXhwZWN0ZWRfc2Vx
XSkKLSAgICAgIGFjdHVhbCA9IGRpY3QoWyhlbGVtZW50LCBOb25lKSBmb3IgZWxlbWVudCBpbiBh
Y3R1YWxfc2VxXSkKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgIyBGYWxsIGJhY2sgdG8g
c2xvd2VyIGxpc3QtY29tcGFyZSBpZiBhbnkgb2YgdGhlIG9iamVjdHMgYXJlIHVuaGFzaGFibGUu
Ci0gICAgICBleHBlY3RlZCA9IGxpc3Qoc2VsZi5fZXhwZWN0ZWRfc2VxKQotICAgICAgYWN0dWFs
ID0gbGlzdChhY3R1YWxfc2VxKQotICAgICAgZXhwZWN0ZWQuc29ydCgpCi0gICAgICBhY3R1YWwu
c29ydCgpCi0gICAgcmV0dXJuIGV4cGVjdGVkID09IGFjdHVhbAotCi0gIGRlZiBfX3JlcHJfXyhz
ZWxmKToKLSAgICByZXR1cm4gJzxzZXF1ZW5jZSB3aXRoIHNhbWUgZWxlbWVudHMgYXMgXCclc1wn
PicgJSBzZWxmLl9leHBlY3RlZF9zZXEKLQotCi1jbGFzcyBBbmQoQ29tcGFyYXRvcik6Ci0gICIi
IkV2YWx1YXRlcyBvbmUgb3IgbW9yZSBDb21wYXJhdG9ycyBvbiBSSFMgYW5kIHJldHVybnMgYW4g
QU5EIG9mIHRoZSByZXN1bHRzLgotICAiIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3Mp
OgotICAgICIiIkluaXRpYWxpemUuCi0KLSAgICBBcmdzOgotICAgICAgKmFyZ3M6IE9uZSBvciBt
b3JlIENvbXBhcmF0b3IKLSAgICAiIiIKLQotICAgIHNlbGYuX2NvbXBhcmF0b3JzID0gYXJncwot
Ci0gIGRlZiBlcXVhbHMoc2VsZiwgcmhzKToKLSAgICAiIiJDaGVja3Mgd2hldGhlciBhbGwgQ29t
cGFyYXRvcnMgYXJlIGVxdWFsIHRvIHJocy4KLQotICAgIEFyZ3M6Ci0gICAgICAjIHJoczogY2Fu
IGJlIGFueXRoaW5nCi0KLSAgICBSZXR1cm5zOgotICAgICAgYm9vbAotICAgICIiIgotCi0gICAg
Zm9yIGNvbXBhcmF0b3IgaW4gc2VsZi5fY29tcGFyYXRvcnM6Ci0gICAgICBpZiBub3QgY29tcGFy
YXRvci5lcXVhbHMocmhzKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICByZXR1cm4gVHJ1
ZQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gJzxBTkQgJXM+JyAlIHN0cihz
ZWxmLl9jb21wYXJhdG9ycykKLQotCi1jbGFzcyBPcihDb21wYXJhdG9yKToKLSAgIiIiRXZhbHVh
dGVzIG9uZSBvciBtb3JlIENvbXBhcmF0b3JzIG9uIFJIUyBhbmQgcmV0dXJucyBhbiBPUiBvZiB0
aGUgcmVzdWx0cy4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKLSAgICAi
IiJJbml0aWFsaXplLgotCi0gICAgQXJnczoKLSAgICAgICphcmdzOiBPbmUgb3IgbW9yZSBNb3gg
Y29tcGFyYXRvcnMKLSAgICAiIiIKLQotICAgIHNlbGYuX2NvbXBhcmF0b3JzID0gYXJncwotCi0g
IGRlZiBlcXVhbHMoc2VsZiwgcmhzKToKLSAgICAiIiJDaGVja3Mgd2hldGhlciBhbnkgQ29tcGFy
YXRvciBpcyBlcXVhbCB0byByaHMuCi0KLSAgICBBcmdzOgotICAgICAgIyByaHM6IGNhbiBiZSBh
bnl0aGluZwotCi0gICAgUmV0dXJuczoKLSAgICAgIGJvb2wKLSAgICAiIiIKLQotICAgIGZvciBj
b21wYXJhdG9yIGluIHNlbGYuX2NvbXBhcmF0b3JzOgotICAgICAgaWYgY29tcGFyYXRvci5lcXVh
bHMocmhzKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIHJldHVybiBGYWxzZQotCi0gIGRl
ZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gJzxPUiAlcz4nICUgc3RyKHNlbGYuX2NvbXBh
cmF0b3JzKQotCi0KLWNsYXNzIEZ1bmMoQ29tcGFyYXRvcik6Ci0gICIiIkNhbGwgYSBmdW5jdGlv
biB0aGF0IHNob3VsZCB2ZXJpZnkgdGhlIHBhcmFtZXRlciBwYXNzZWQgaW4gaXMgY29ycmVjdC4K
LQotICBZb3UgbWF5IG5lZWQgdGhlIGFiaWxpdHkgdG8gcGVyZm9ybSBtb3JlIGFkdmFuY2VkIG9w
ZXJhdGlvbnMgb24gdGhlIHBhcmFtZXRlcgotICBpbiBvcmRlciB0byB2YWxpZGF0ZSBpdC4gIFlv
dSBjYW4gdXNlIHRoaXMgdG8gaGF2ZSBhIGNhbGxhYmxlIHZhbGlkYXRlIGFueQotICBwYXJhbWV0
ZXIuIFRoZSBjYWxsYWJsZSBzaG91bGQgcmV0dXJuIGVpdGhlciBUcnVlIG9yIEZhbHNlLgotCi0K
LSAgRXhhbXBsZToKLQotICBkZWYgbXlQYXJhbVZhbGlkYXRvcihwYXJhbSk6Ci0gICAgIyBBZHZh
bmNlZCBsb2dpYyBoZXJlCi0gICAgcmV0dXJuIFRydWUKLQotICBtb2NrX2Rhby5Eb1NvbWV0aGlu
ZyhGdW5jKG15UGFyYW1WYWxpZGF0b3IpLCB0cnVlKQotICAiIiIKLQotICBkZWYgX19pbml0X18o
c2VsZiwgZnVuYyk6Ci0gICAgIiIiSW5pdGlhbGl6ZS4KLQotICAgIEFyZ3M6Ci0gICAgICBmdW5j
OiBjYWxsYWJsZSB0aGF0IHRha2VzIG9uZSBwYXJhbWV0ZXIgYW5kIHJldHVybnMgYSBib29sCi0g
ICAgIiIiCi0KLSAgICBzZWxmLl9mdW5jID0gZnVuYwotCi0gIGRlZiBlcXVhbHMoc2VsZiwgcmhz
KToKLSAgICAiIiJUZXN0IHdoZXRoZXIgcmhzIHBhc3NlcyB0aGUgZnVuY3Rpb24gdGVzdC4KLQot
ICAgIHJocyBpcyBwYXNzZWQgaW50byBmdW5jLgotCi0gICAgQXJnczoKLSAgICAgIHJoczogYW55
IHB5dGhvbiBvYmplY3QKLQotICAgIFJldHVybnM6Ci0gICAgICB0aGUgcmVzdWx0IG9mIGZ1bmMo
cmhzKQotICAgICIiIgotCi0gICAgcmV0dXJuIHNlbGYuX2Z1bmMocmhzKQotCi0gIGRlZiBfX3Jl
cHJfXyhzZWxmKToKLSAgICByZXR1cm4gc3RyKHNlbGYuX2Z1bmMpCi0KLQotY2xhc3MgSWdub3Jl
QXJnKENvbXBhcmF0b3IpOgotICAiIiJJZ25vcmUgYW4gYXJndW1lbnQuCi0KLSAgVGhpcyBjYW4g
YmUgdXNlZCB3aGVuIHdlIGRvbid0IGNhcmUgYWJvdXQgYW4gYXJndW1lbnQgb2YgYSBtZXRob2Qg
Y2FsbC4KLQotICBFeGFtcGxlOgotICAjIENoZWNrIGlmIENhc3RNYWdpYyBpcyBjYWxsZWQgd2l0
aCAzIGFzIGZpcnN0IGFyZyBhbmQgJ2Rpc2FwcGVhcicgYXMgdGhpcmQuCi0gIG15bW9jay5DYXN0
TWFnaWMoMywgSWdub3JlQXJnKCksICdkaXNhcHBlYXInKQotICAiIiIKLQotICBkZWYgZXF1YWxz
KHNlbGYsIHVudXNlZF9yaHMpOgotICAgICIiIklnbm9yZXMgYXJndW1lbnRzIGFuZCByZXR1cm5z
IFRydWUuCi0KLSAgICBBcmdzOgotICAgICAgdW51c2VkX3JoczogYW55IHB5dGhvbiBvYmplY3QK
LQotICAgIFJldHVybnM6Ci0gICAgICBhbHdheXMgcmV0dXJucyBUcnVlCi0gICAgIiIiCi0KLSAg
ICByZXR1cm4gVHJ1ZQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gJzxJZ25v
cmVBcmc+JwotCi0KLWNsYXNzIE1ldGhvZEdyb3VwKG9iamVjdCk6Ci0gICIiIkJhc2UgY2xhc3Mg
Y29udGFpbmluZyBjb21tb24gYmVoYXZpb3VyIGZvciBNZXRob2RHcm91cHMuIiIiCi0KLSAgZGVm
IF9faW5pdF9fKHNlbGYsIGdyb3VwX25hbWUpOgotICAgIHNlbGYuX2dyb3VwX25hbWUgPSBncm91
cF9uYW1lCi0KLSAgZGVmIGdyb3VwX25hbWUoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2dyb3Vw
X25hbWUKLQotICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICByZXR1cm4gJzwlcyAiJXMiPicgJSAo
c2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX2dyb3VwX25hbWUpCi0KLSAgZGVmIEFkZE1l
dGhvZChzZWxmLCBtb2NrX21ldGhvZCk6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgot
Ci0gIGRlZiBNZXRob2RDYWxsZWQoc2VsZiwgbW9ja19tZXRob2QpOgotICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKLQotICBkZWYgSXNTYXRpc2ZpZWQoc2VsZik6Ci0gICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcgotCi1jbGFzcyBVbm9yZGVyZWRHcm91cChNZXRob2RHcm91cCk6Ci0g
ICIiIlVub3JkZXJlZEdyb3VwIGhvbGRzIGEgc2V0IG9mIG1ldGhvZCBjYWxscyB0aGF0IG1heSBv
Y2N1ciBpbiBhbnkgb3JkZXIuCi0KLSAgVGhpcyBjb25zdHJ1Y3QgaXMgaGVscGZ1bCBmb3Igbm9u
LWRldGVybWluaXN0aWMgZXZlbnRzLCBzdWNoIGFzIGl0ZXJhdGluZwotICBvdmVyIHRoZSBrZXlz
IG9mIGEgZGljdC4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGdyb3VwX25hbWUpOgot
ICAgIHN1cGVyKFVub3JkZXJlZEdyb3VwLCBzZWxmKS5fX2luaXRfXyhncm91cF9uYW1lKQotICAg
IHNlbGYuX21ldGhvZHMgPSBbXQotCi0gIGRlZiBBZGRNZXRob2Qoc2VsZiwgbW9ja19tZXRob2Qp
OgotICAgICIiIkFkZCBhIG1ldGhvZCB0byB0aGlzIGdyb3VwLgotCi0gICAgQXJnczoKLSAgICAg
IG1vY2tfbWV0aG9kOiBBIG1vY2sgbWV0aG9kIHRvIGJlIGFkZGVkIHRvIHRoaXMgZ3JvdXAuCi0g
ICAgIiIiCi0KLSAgICBzZWxmLl9tZXRob2RzLmFwcGVuZChtb2NrX21ldGhvZCkKLQotICBkZWYg
TWV0aG9kQ2FsbGVkKHNlbGYsIG1vY2tfbWV0aG9kKToKLSAgICAiIiJSZW1vdmUgYSBtZXRob2Qg
Y2FsbCBmcm9tIHRoZSBncm91cC4KLQotICAgIElmIHRoZSBtZXRob2QgaXMgbm90IGluIHRoZSBz
ZXQsIGFuIFVuZXhwZWN0ZWRNZXRob2RDYWxsRXJyb3Igd2lsbCBiZQotICAgIHJhaXNlZC4KLQot
ICAgIEFyZ3M6Ci0gICAgICBtb2NrX21ldGhvZDogYSBtb2NrIG1ldGhvZCB0aGF0IHNob3VsZCBi
ZSBlcXVhbCB0byBhIG1ldGhvZCBpbiB0aGUgZ3JvdXAuCi0KLSAgICBSZXR1cm5zOgotICAgICAg
VGhlIG1vY2sgbWV0aG9kIGZyb20gdGhlIGdyb3VwCi0KLSAgICBSYWlzZXM6Ci0gICAgICBVbmV4
cGVjdGVkTWV0aG9kQ2FsbEVycm9yIGlmIHRoZSBtb2NrX21ldGhvZCB3YXMgbm90IGluIHRoZSBn
cm91cC4KLSAgICAiIiIKLQotICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoaXMgbWV0aG9kIGV4aXN0
cywgYW5kIGlmIHNvLCByZW1vdmUgaXQgZnJvbSB0aGUgc2V0Ci0gICAgIyBhbmQgcmV0dXJuIGl0
LgotICAgIGZvciBtZXRob2QgaW4gc2VsZi5fbWV0aG9kczoKLSAgICAgIGlmIG1ldGhvZCA9PSBt
b2NrX21ldGhvZDoKLSAgICAgICAgIyBSZW1vdmUgdGhlIGNhbGxlZCBtb2NrX21ldGhvZCBpbnN0
ZWFkIG9mIHRoZSBtZXRob2QgaW4gdGhlIGdyb3VwLgotICAgICAgICAjIFRoZSBjYWxsZWQgbWV0
aG9kIHdpbGwgbWF0Y2ggYW55IGNvbXBhcmF0b3JzIHdoZW4gZXF1YWxpdHkgaXMgY2hlY2tlZAot
ICAgICAgICAjIGR1cmluZyByZW1vdmFsLiAgVGhlIG1ldGhvZCBpbiB0aGUgZ3JvdXAgY291bGQg
cGFzcyBhIGNvbXBhcmF0b3IgdG8KLSAgICAgICAgIyBhbm90aGVyIGNvbXBhcmF0b3IgZHVyaW5n
IHRoZSBlcXVhbGl0eSBjaGVjay4KLSAgICAgICAgc2VsZi5fbWV0aG9kcy5yZW1vdmUobW9ja19t
ZXRob2QpCi0KLSAgICAgICAgIyBJZiB0aGlzIGdyb3VwIGlzIG5vdCBlbXB0eSwgcHV0IGl0IGJh
Y2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgotICAgICAgICBpZiBub3Qgc2VsZi5Jc1NhdGlz
ZmllZCgpOgotICAgICAgICAgIG1vY2tfbWV0aG9kLl9jYWxsX3F1ZXVlLmFwcGVuZGxlZnQoc2Vs
ZikKLQotICAgICAgICByZXR1cm4gc2VsZiwgbWV0aG9kCi0KLSAgICByYWlzZSBVbmV4cGVjdGVk
TWV0aG9kQ2FsbEVycm9yKG1vY2tfbWV0aG9kLCBzZWxmKQotCi0gIGRlZiBJc1NhdGlzZmllZChz
ZWxmKToKLSAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGVyZSBhcmUgbm90IGFueSBtZXRob2RzIGlu
IHRoaXMgZ3JvdXAuIiIiCi0KLSAgICByZXR1cm4gbGVuKHNlbGYuX21ldGhvZHMpID09IDAKLQot
Ci1jbGFzcyBNdWx0aXBsZVRpbWVzR3JvdXAoTWV0aG9kR3JvdXApOgotICAiIiJNdWx0aXBsZVRp
bWVzR3JvdXAgaG9sZHMgbWV0aG9kcyB0aGF0IG1heSBiZSBjYWxsZWQgYW55IG51bWJlciBvZiB0
aW1lcy4KLQotICBOb3RlOiBFYWNoIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNl
LgotCi0gIFRoaXMgaXMgaGVscGZ1bCwgaWYgeW91IGRvbid0IGtub3cgb3IgY2FyZSBob3cgbWFu
eSB0aW1lcyBhIG1ldGhvZCBpcyBjYWxsZWQuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxm
LCBncm91cF9uYW1lKToKLSAgICBzdXBlcihNdWx0aXBsZVRpbWVzR3JvdXAsIHNlbGYpLl9faW5p
dF9fKGdyb3VwX25hbWUpCi0gICAgc2VsZi5fbWV0aG9kcyA9IHNldCgpCi0gICAgc2VsZi5fbWV0
aG9kc19jYWxsZWQgPSBzZXQoKQotCi0gIGRlZiBBZGRNZXRob2Qoc2VsZiwgbW9ja19tZXRob2Qp
OgotICAgICIiIkFkZCBhIG1ldGhvZCB0byB0aGlzIGdyb3VwLgotCi0gICAgQXJnczoKLSAgICAg
IG1vY2tfbWV0aG9kOiBBIG1vY2sgbWV0aG9kIHRvIGJlIGFkZGVkIHRvIHRoaXMgZ3JvdXAuCi0g
ICAgIiIiCi0KLSAgICBzZWxmLl9tZXRob2RzLmFkZChtb2NrX21ldGhvZCkKLQotICBkZWYgTWV0
aG9kQ2FsbGVkKHNlbGYsIG1vY2tfbWV0aG9kKToKLSAgICAiIiJSZW1vdmUgYSBtZXRob2QgY2Fs
bCBmcm9tIHRoZSBncm91cC4KLQotICAgIElmIHRoZSBtZXRob2QgaXMgbm90IGluIHRoZSBzZXQs
IGFuIFVuZXhwZWN0ZWRNZXRob2RDYWxsRXJyb3Igd2lsbCBiZQotICAgIHJhaXNlZC4KLQotICAg
IEFyZ3M6Ci0gICAgICBtb2NrX21ldGhvZDogYSBtb2NrIG1ldGhvZCB0aGF0IHNob3VsZCBiZSBl
cXVhbCB0byBhIG1ldGhvZCBpbiB0aGUgZ3JvdXAuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhl
IG1vY2sgbWV0aG9kIGZyb20gdGhlIGdyb3VwCi0KLSAgICBSYWlzZXM6Ci0gICAgICBVbmV4cGVj
dGVkTWV0aG9kQ2FsbEVycm9yIGlmIHRoZSBtb2NrX21ldGhvZCB3YXMgbm90IGluIHRoZSBncm91
cC4KLSAgICAiIiIKLQotICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoaXMgbWV0aG9kIGV4aXN0cywg
YW5kIGlmIHNvIGFkZCBpdCB0byB0aGUgc2V0IG9mCi0gICAgIyBjYWxsZWQgbWV0aG9kcy4KLQot
ICAgIGZvciBtZXRob2QgaW4gc2VsZi5fbWV0aG9kczoKLSAgICAgIGlmIG1ldGhvZCA9PSBtb2Nr
X21ldGhvZDoKLSAgICAgICAgc2VsZi5fbWV0aG9kc19jYWxsZWQuYWRkKG1vY2tfbWV0aG9kKQot
ICAgICAgICAjIEFsd2F5cyBwdXQgdGhpcyBncm91cCBiYWNrIG9uIHRvcCBvZiB0aGUgcXVldWUs
IGJlY2F1c2Ugd2UgZG9uJ3Qga25vdwotICAgICAgICAjIHdoZW4gd2UgYXJlIGRvbmUuCi0gICAg
ICAgIG1vY2tfbWV0aG9kLl9jYWxsX3F1ZXVlLmFwcGVuZGxlZnQoc2VsZikKLSAgICAgICAgcmV0
dXJuIHNlbGYsIG1ldGhvZAotCi0gICAgaWYgc2VsZi5Jc1NhdGlzZmllZCgpOgotICAgICAgbmV4
dF9tZXRob2QgPSBtb2NrX21ldGhvZC5fUG9wTmV4dE1ldGhvZCgpOwotICAgICAgcmV0dXJuIG5l
eHRfbWV0aG9kLCBOb25lCi0gICAgZWxzZToKLSAgICAgIHJhaXNlIFVuZXhwZWN0ZWRNZXRob2RD
YWxsRXJyb3IobW9ja19tZXRob2QsIHNlbGYpCi0KLSAgZGVmIElzU2F0aXNmaWVkKHNlbGYpOgot
ICAgICIiIlJldHVybiBUcnVlIGlmIGFsbCBtZXRob2RzIGluIHRoaXMgZ3JvdXAgYXJlIGNhbGxl
ZCBhdCBsZWFzdCBvbmNlLiIiIgotICAgICMgTk9URShwc3ljaG8pOiBXZSBjYW4ndCB1c2UgdGhl
IHNpbXBsZSBzZXQgZGlmZmVyZW5jZSBoZXJlIGJlY2F1c2Ugd2Ugd2FudAotICAgICMgdG8gbWF0
Y2ggZGlmZmVyZW50IHBhcmFtZXRlcnMgd2hpY2ggYXJlIGNvbnNpZGVyZWQgdGhlIHNhbWUgZS5n
LiBJc0Eoc3RyKQotICAgICMgYW5kIHNvbWUgc3RyaW5nLiBUaGlzIHNvbHV0aW9uIGlzIE8obl4y
KSBidXQgbiBzaG91bGQgYmUgc21hbGwuCi0gICAgdG1wID0gc2VsZi5fbWV0aG9kcy5jb3B5KCkK
LSAgICBmb3IgY2FsbGVkIGluIHNlbGYuX21ldGhvZHNfY2FsbGVkOgotICAgICAgZm9yIGV4cGVj
dGVkIGluIHRtcDoKLSAgICAgICAgaWYgY2FsbGVkID09IGV4cGVjdGVkOgotICAgICAgICAgIHRt
cC5yZW1vdmUoZXhwZWN0ZWQpCi0gICAgICAgICAgaWYgbm90IHRtcDoKLSAgICAgICAgICAgIHJl
dHVybiBUcnVlCi0gICAgICAgICAgYnJlYWsKLSAgICByZXR1cm4gRmFsc2UKLQotCi1jbGFzcyBN
b3hNZXRhVGVzdEJhc2UodHlwZSk6Ci0gICIiIk1ldGFjbGFzcyB0byBhZGQgbW94IGNsZWFudXAg
YW5kIHZlcmlmaWNhdGlvbiB0byBldmVyeSB0ZXN0LgotCi0gIEFzIHRoZSBtb3ggdW5pdCB0ZXN0
aW5nIGNsYXNzIGlzIGJlaW5nIGNvbnN0cnVjdGVkIChNb3hUZXN0QmFzZSBvciBhCi0gIHN1YmNs
YXNzKSwgdGhpcyBtZXRhY2xhc3Mgd2lsbCBtb2RpZnkgYWxsIHRlc3QgZnVuY3Rpb25zIHRvIGNh
bGwgdGhlCi0gIENsZWFuVXBNb3ggbWV0aG9kIG9mIHRoZSB0ZXN0IGNsYXNzIGFmdGVyIHRoZXkg
ZmluaXNoLiBUaGlzIG1lYW5zIHRoYXQKLSAgdW5zdHViYmluZyBhbmQgdmVyaWZ5aW5nIHdpbGwg
aGFwcGVuIGZvciBldmVyeSB0ZXN0IHdpdGggbm8gYWRkaXRpb25hbCBjb2RlLAotICBhbmQgYW55
IGZhaWx1cmVzIHdpbGwgcmVzdWx0IGluIHRlc3QgZmFpbHVyZXMgYXMgb3Bwb3NlZCB0byBlcnJv
cnMuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBkKToKLSAgICB0
eXBlLl9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGQpCi0KLSAgICAjIGFsc28gZ2V0IGFsbCB0
aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBiYXNlIGNsYXNzZXMgdG8gYWNjb3VudAotICAgICMgZm9y
IGEgY2FzZSB3aGVuIHRlc3QgY2xhc3MgaXMgbm90IHRoZSBpbW1lZGlhdGUgY2hpbGQgb2YgTW94
VGVzdEJhc2UKLSAgICBmb3IgYmFzZSBpbiBiYXNlczoKLSAgICAgIGZvciBhdHRyX25hbWUgaW4g
ZGlyKGJhc2UpOgotICAgICAgICBkW2F0dHJfbmFtZV0gPSBnZXRhdHRyKGJhc2UsIGF0dHJfbmFt
ZSkKLQotICAgIGZvciBmdW5jX25hbWUsIGZ1bmMgaW4gZC5pdGVtcygpOgotICAgICAgaWYgZnVu
Y19uYW1lLnN0YXJ0c3dpdGgoJ3Rlc3QnKSBhbmQgY2FsbGFibGUoZnVuYyk6Ci0gICAgICAgIHNl
dGF0dHIoY2xzLCBmdW5jX25hbWUsIE1veE1ldGFUZXN0QmFzZS5DbGVhblVwVGVzdChjbHMsIGZ1
bmMpKQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIENsZWFuVXBUZXN0KGNscywgZnVuYyk6Ci0g
ICAgIiIiQWRkcyBNb3ggY2xlYW51cCBjb2RlIHRvIGFueSBNb3hUZXN0QmFzZSBtZXRob2QuCi0K
LSAgICBBbHdheXMgdW5zZXRzIHN0dWJzIGFmdGVyIGEgdGVzdC4gV2lsbCB2ZXJpZnkgYWxsIG1v
Y2tzIGZvciB0ZXN0cyB0aGF0Ci0gICAgb3RoZXJ3aXNlIHBhc3MuCi0KLSAgICBBcmdzOgotICAg
ICAgY2xzOiBNb3hUZXN0QmFzZSBvciBzdWJjbGFzczsgdGhlIGNsYXNzIHdob3NlIHRlc3QgbWV0
aG9kIHdlIGFyZSBhbHRlcmluZy4KLSAgICAgIGZ1bmM6IG1ldGhvZDsgdGhlIG1ldGhvZCBvZiB0
aGUgTW94VGVzdEJhc2UgdGVzdCBjbGFzcyB3ZSB3aXNoIHRvIGFsdGVyLgotCi0gICAgUmV0dXJu
czoKLSAgICAgIFRoZSBtb2RpZmllZCBtZXRob2QuCi0gICAgIiIiCi0gICAgZGVmIG5ld19tZXRo
b2Qoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgIG1veF9vYmogPSBnZXRhdHRyKHNlbGYs
ICdtb3gnLCBOb25lKQotICAgICAgY2xlYW51cF9tb3ggPSBGYWxzZQotICAgICAgaWYgbW94X29i
aiBhbmQgaXNpbnN0YW5jZShtb3hfb2JqLCBNb3gpOgotICAgICAgICBjbGVhbnVwX21veCA9IFRy
dWUKLSAgICAgIHRyeToKLSAgICAgICAgZnVuYyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCi0gICAg
ICBmaW5hbGx5OgotICAgICAgICBpZiBjbGVhbnVwX21veDoKLSAgICAgICAgICBtb3hfb2JqLlVu
c2V0U3R1YnMoKQotICAgICAgaWYgY2xlYW51cF9tb3g6Ci0gICAgICAgIG1veF9vYmouVmVyaWZ5
QWxsKCkKLSAgICBuZXdfbWV0aG9kLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXwotICAgIG5ld19t
ZXRob2QuX19kb2NfXyA9IGZ1bmMuX19kb2NfXwotICAgIG5ld19tZXRob2QuX19tb2R1bGVfXyA9
IGZ1bmMuX19tb2R1bGVfXwotICAgIHJldHVybiBuZXdfbWV0aG9kCi0KLQotY2xhc3MgTW94VGVz
dEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAiIiJDb252ZW5pZW5jZSB0ZXN0IGNsYXNzIHRv
IG1ha2Ugc3R1YmJpbmcgZWFzaWVyLgotCi0gIFNldHMgdXAgYSAibW94IiBhdHRyaWJ1dGUgd2hp
Y2ggaXMgYW4gaW5zdGFuY2Ugb2YgTW94IC0gYW55IG1veCB0ZXN0cyB3aWxsCi0gIHdhbnQgdGhp
cy4gQWxzbyBhdXRvbWF0aWNhbGx5IHVuc2V0cyBhbnkgc3R1YnMgYW5kIHZlcmlmaWVzIHRoYXQg
YWxsIG1vY2sKLSAgbWV0aG9kcyBoYXZlIGJlZW4gY2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCB0
ZXN0LCBlbGltaW5hdGluZyBib2lsZXJwbGF0ZQotICBjb2RlLgotICAiIiIKLQotICBfX21ldGFj
bGFzc19fID0gTW94TWV0YVRlc3RCYXNlCi0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYu
bW94ID0gTW94KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL3NldHVwLnB5IGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9weXRob24vc2V0dXAucHkK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDBmNGI1M2M0YWI3YjNlNGMyNWUwYjRhOTA3
OWJjZTE3YzQzZjcxMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9weXRob24vc2V0dXAucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotIyEg
L3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBTZWUgUkVBRE1FIGZvciB1c2FnZSBpbnN0cnVjdGlv
bnMuCi1pbXBvcnQgZ2xvYgotaW1wb3J0IG9zCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5
cwotCi0jIFdlIG11c3QgdXNlIHNldHVwdG9vbHMsIG5vdCBkaXN0dXRpbHMsIGJlY2F1c2Ugd2Ug
bmVlZCB0byB1c2UgdGhlCi0jIG5hbWVzcGFjZV9wYWNrYWdlcyBvcHRpb24gZm9yIHRoZSAiZ29v
Z2xlIiBwYWNrYWdlLgotZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgRXh0ZW5zaW9uLCBm
aW5kX3BhY2thZ2VzCi0KLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuY2xlYW4gaW1wb3J0IGNsZWFu
IGFzIF9jbGVhbgotCi1pZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDM6Ci0gICMgUHl0aG9uIDMK
LSAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weSBpbXBvcnQgYnVpbGRfcHlfMnRvMyBh
cyBfYnVpbGRfcHkKLWVsc2U6Ci0gICMgUHl0aG9uIDIKLSAgZnJvbSBkaXN0dXRpbHMuY29tbWFu
ZC5idWlsZF9weSBpbXBvcnQgYnVpbGRfcHkgYXMgX2J1aWxkX3B5Ci1mcm9tIGRpc3R1dGlscy5z
cGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCi0KLSMgRmluZCB0aGUgUHJvdG9jb2wgQ29tcGls
ZXIuCi1pZiAnUFJPVE9DJyBpbiBvcy5lbnZpcm9uIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5lbnZp
cm9uWydQUk9UT0MnXSk6Ci0gIHByb3RvYyA9IG9zLmVudmlyb25bJ1BST1RPQyddCi1lbGlmIG9z
LnBhdGguZXhpc3RzKCIuLi9zcmMvcHJvdG9jIik6Ci0gIHByb3RvYyA9ICIuLi9zcmMvcHJvdG9j
IgotZWxpZiBvcy5wYXRoLmV4aXN0cygiLi4vc3JjL3Byb3RvYy5leGUiKToKLSAgcHJvdG9jID0g
Ii4uL3NyYy9wcm90b2MuZXhlIgotZWxpZiBvcy5wYXRoLmV4aXN0cygiLi4vdnNwcm9qZWN0cy9E
ZWJ1Zy9wcm90b2MuZXhlIik6Ci0gIHByb3RvYyA9ICIuLi92c3Byb2plY3RzL0RlYnVnL3Byb3Rv
Yy5leGUiCi1lbGlmIG9zLnBhdGguZXhpc3RzKCIuLi92c3Byb2plY3RzL1JlbGVhc2UvcHJvdG9j
LmV4ZSIpOgotICBwcm90b2MgPSAiLi4vdnNwcm9qZWN0cy9SZWxlYXNlL3Byb3RvYy5leGUiCi1l
bHNlOgotICBwcm90b2MgPSBmaW5kX2V4ZWN1dGFibGUoInByb3RvYyIpCi0KLQotZGVmIEdldFZl
cnNpb24oKToKLSAgIiIiR2V0cyB0aGUgdmVyc2lvbiBmcm9tIGdvb2dsZS9wcm90b2J1Zi9fX2lu
aXRfXy5weQotCi0gIERvIG5vdCBpbXBvcnQgZ29vZ2xlLnByb3RvYnVmLl9faW5pdF9fIGRpcmVj
dGx5LCBiZWNhdXNlIGFuIGluc3RhbGxlZAotICBwcm90b2J1ZiBsaWJyYXJ5IG1heSBiZSBsb2Fk
ZWQgaW5zdGVhZC4iIiIKLQotICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdnb29nbGUnLCAncHJv
dG9idWYnLCAnX19pbml0X18ucHknKSkgYXMgdmVyc2lvbl9maWxlOgotICAgIGV4ZWModmVyc2lv
bl9maWxlLnJlYWQoKSwgZ2xvYmFscygpKQotICAgIHJldHVybiBfX3ZlcnNpb25fXwotCi0KLWRl
ZiBnZW5lcmF0ZV9wcm90byhzb3VyY2UsIHJlcXVpcmUgPSBUcnVlKToKLSAgIiIiSW52b2tlcyB0
aGUgUHJvdG9jb2wgQ29tcGlsZXIgdG8gZ2VuZXJhdGUgYSBfcGIyLnB5IGZyb20gdGhlIGdpdmVu
Ci0gIC5wcm90byBmaWxlLiAgRG9lcyBub3RoaW5nIGlmIHRoZSBvdXRwdXQgYWxyZWFkeSBleGlz
dHMgYW5kIGlzIG5ld2VyIHRoYW4KLSAgdGhlIGlucHV0LiIiIgotCi0gIGlmIG5vdCByZXF1aXJl
IGFuZCBub3Qgb3MucGF0aC5leGlzdHMoc291cmNlKToKLSAgICByZXR1cm4KLQotICBvdXRwdXQg
PSBzb3VyY2UucmVwbGFjZSgiLnByb3RvIiwgIl9wYjIucHkiKS5yZXBsYWNlKCIuLi9zcmMvIiwg
IiIpCi0KLSAgaWYgKG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwdXQpIG9yCi0gICAgICAob3MucGF0
aC5leGlzdHMoc291cmNlKSBhbmQKLSAgICAgICBvcy5wYXRoLmdldG10aW1lKHNvdXJjZSkgPiBv
cy5wYXRoLmdldG10aW1lKG91dHB1dCkpKToKLSAgICBwcmludCgiR2VuZXJhdGluZyAlcy4uLiIg
JSBvdXRwdXQpCi0KLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc291cmNlKToKLSAgICAgIHN5
cy5zdGRlcnIud3JpdGUoIkNhbid0IGZpbmQgcmVxdWlyZWQgZmlsZTogJXNcbiIgJSBzb3VyY2Up
Ci0gICAgICBzeXMuZXhpdCgtMSkKLQotICAgIGlmIHByb3RvYyBpcyBOb25lOgotICAgICAgc3lz
LnN0ZGVyci53cml0ZSgKLSAgICAgICAgICAicHJvdG9jIGlzIG5vdCBpbnN0YWxsZWQgbm9yIGZv
dW5kIGluIC4uL3NyYy4gIFBsZWFzZSBjb21waWxlIGl0ICIKLSAgICAgICAgICAib3IgaW5zdGFs
bCB0aGUgYmluYXJ5IHBhY2thZ2UuXG4iKQotICAgICAgc3lzLmV4aXQoLTEpCi0KLSAgICBwcm90
b2NfY29tbWFuZCA9IFsgcHJvdG9jLCAiLUkuLi9zcmMiLCAiLUkuIiwgIi0tcHl0aG9uX291dD0u
Iiwgc291cmNlIF0KLSAgICBpZiBzdWJwcm9jZXNzLmNhbGwocHJvdG9jX2NvbW1hbmQpICE9IDA6
Ci0gICAgICBzeXMuZXhpdCgtMSkKLQotZGVmIEdlbmVyYXRlVW5pdHRlc3RQcm90b3MoKToKLSAg
Z2VuZXJhdGVfcHJvdG8oIi4uL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX3VuaXR0ZXN0LnByb3Rv
IiwgRmFsc2UpCi0gIGdlbmVyYXRlX3Byb3RvKCIuLi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0
ZXN0X2FyZW5hLnByb3RvIiwgRmFsc2UpCi0gIGdlbmVyYXRlX3Byb3RvKCIuLi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0X25vX2FyZW5hLnByb3RvIiwgRmFsc2UpCi0gIGdlbmVyYXRlX3By
b3RvKCIuLi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X25vX2FyZW5hX2ltcG9ydC5wcm90
byIsIEZhbHNlKQotICBnZW5lcmF0ZV9wcm90bygiLi4vc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0
dGVzdC5wcm90byIsIEZhbHNlKQotICBnZW5lcmF0ZV9wcm90bygiLi4vc3JjL2dvb2dsZS9wcm90
b2J1Zi91bml0dGVzdF9jdXN0b21fb3B0aW9ucy5wcm90byIsIEZhbHNlKQotICBnZW5lcmF0ZV9w
cm90bygiLi4vc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnQucHJvdG8iLCBGYWxz
ZSkKLSAgZ2VuZXJhdGVfcHJvdG8oIi4uL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1w
b3J0X3B1YmxpYy5wcm90byIsIEZhbHNlKQotICBnZW5lcmF0ZV9wcm90bygiLi4vc3JjL2dvb2ds
ZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0LnByb3RvIiwgRmFsc2UpCi0gIGdlbmVyYXRlX3Byb3Rv
KCIuLi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X21zZXRfd2lyZV9mb3JtYXQucHJvdG8i
LCBGYWxzZSkKLSAgZ2VuZXJhdGVfcHJvdG8oIi4uL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRl
c3Rfbm9fZ2VuZXJpY19zZXJ2aWNlcy5wcm90byIsIEZhbHNlKQotICBnZW5lcmF0ZV9wcm90bygi
Li4vc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcm90bzNfYXJlbmEucHJvdG8iLCBGYWxz
ZSkKLSAgZ2VuZXJhdGVfcHJvdG8oIi4uL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX2Zv
cm1hdF9wcm90bzMucHJvdG8iLCBGYWxzZSkKLSAgZ2VuZXJhdGVfcHJvdG8oImdvb2dsZS9wcm90
b2J1Zi9pbnRlcm5hbC9hbnlfdGVzdC5wcm90byIsIEZhbHNlKQotICBnZW5lcmF0ZV9wcm90bygi
Z29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2Rlc2NyaXB0b3JfcG9vbF90ZXN0MS5wcm90byIsIEZh
bHNlKQotICBnZW5lcmF0ZV9wcm90bygiZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2Rlc2NyaXB0
b3JfcG9vbF90ZXN0Mi5wcm90byIsIEZhbHNlKQotICBnZW5lcmF0ZV9wcm90bygiZ29vZ2xlL3By
b3RvYnVmL2ludGVybmFsL2ZhY3RvcnlfdGVzdDEucHJvdG8iLCBGYWxzZSkKLSAgZ2VuZXJhdGVf
cHJvdG8oImdvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9mYWN0b3J5X3Rlc3QyLnByb3RvIiwgRmFs
c2UpCi0gIGdlbmVyYXRlX3Byb3RvKCJnb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvaW1wb3J0X3Rl
c3RfcGFja2FnZS9pbm5lci5wcm90byIsIEZhbHNlKQotICBnZW5lcmF0ZV9wcm90bygiZ29vZ2xl
L3Byb3RvYnVmL2ludGVybmFsL2ltcG9ydF90ZXN0X3BhY2thZ2Uvb3V0ZXIucHJvdG8iLCBGYWxz
ZSkKLSAgZ2VuZXJhdGVfcHJvdG8oImdvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9taXNzaW5nX2Vu
dW1fdmFsdWVzLnByb3RvIiwgRmFsc2UpCi0gIGdlbmVyYXRlX3Byb3RvKCJnb29nbGUvcHJvdG9i
dWYvaW50ZXJuYWwvbWVzc2FnZV9zZXRfZXh0ZW5zaW9ucy5wcm90byIsIEZhbHNlKQotICBnZW5l
cmF0ZV9wcm90bygiZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL21vcmVfZXh0ZW5zaW9ucy5wcm90
byIsIEZhbHNlKQotICBnZW5lcmF0ZV9wcm90bygiZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL21v
cmVfZXh0ZW5zaW9uc19keW5hbWljLnByb3RvIiwgRmFsc2UpCi0gIGdlbmVyYXRlX3Byb3RvKCJn
b29nbGUvcHJvdG9idWYvaW50ZXJuYWwvbW9yZV9tZXNzYWdlcy5wcm90byIsIEZhbHNlKQotICBn
ZW5lcmF0ZV9wcm90bygiZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL3BhY2tlZF9maWVsZF90ZXN0
LnByb3RvIiwgRmFsc2UpCi0gIGdlbmVyYXRlX3Byb3RvKCJnb29nbGUvcHJvdG9idWYvaW50ZXJu
YWwvdGVzdF9iYWRfaWRlbnRpZmllcnMucHJvdG8iLCBGYWxzZSkKLSAgZ2VuZXJhdGVfcHJvdG8o
Imdvb2dsZS9wcm90b2J1Zi9weWV4dC9weXRob24ucHJvdG8iLCBGYWxzZSkKLQotCi1jbGFzcyBj
bGVhbihfY2xlYW4pOgotICBkZWYgcnVuKHNlbGYpOgotICAgICMgRGVsZXRlIGdlbmVyYXRlZCBm
aWxlcyBpbiB0aGUgY29kZSB0cmVlLgotICAgIGZvciAoZGlycGF0aCwgZGlybmFtZXMsIGZpbGVu
YW1lcykgaW4gb3Mud2FsaygiLiIpOgotICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoK
LSAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZmlsZW5hbWUpCi0gICAg
ICAgIGlmIGZpbGVwYXRoLmVuZHN3aXRoKCJfcGIyLnB5Iikgb3IgZmlsZXBhdGguZW5kc3dpdGgo
Ii5weWMiKSBvciBcCi0gICAgICAgICAgZmlsZXBhdGguZW5kc3dpdGgoIi5zbyIpIG9yIGZpbGVw
YXRoLmVuZHN3aXRoKCIubyIpIG9yIFwKLSAgICAgICAgICBmaWxlcGF0aC5lbmRzd2l0aCgnZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL19faW5pdF9fLnB5Jykgb3IgXAotICAgICAgICAgIGZpbGVw
YXRoLmVuZHN3aXRoKCdnb29nbGUvcHJvdG9idWYvdXRpbC9fX2luaXRfXy5weScpOgotICAgICAg
ICAgIG9zLnJlbW92ZShmaWxlcGF0aCkKLSAgICAjIF9jbGVhbiBpcyBhbiBvbGQtc3R5bGUgY2xh
c3MsIHNvIHN1cGVyKCkgZG9lc24ndCB3b3JrLgotICAgIF9jbGVhbi5ydW4oc2VsZikKLQotY2xh
c3MgYnVpbGRfcHkoX2J1aWxkX3B5KToKLSAgZGVmIHJ1bihzZWxmKToKLSAgICAjIEdlbmVyYXRl
IG5lY2Vzc2FyeSAucHJvdG8gZmlsZSBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICAgIGdlbmVyYXRl
X3Byb3RvKCIuLi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8iKQotICAgIGdl
bmVyYXRlX3Byb3RvKCIuLi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wcm90
byIpCi0gICAgZ2VuZXJhdGVfcHJvdG8oIi4uL3NyYy9nb29nbGUvcHJvdG9idWYvYW55LnByb3Rv
IikKLSAgICBnZW5lcmF0ZV9wcm90bygiLi4vc3JjL2dvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8i
KQotICAgIGdlbmVyYXRlX3Byb3RvKCIuLi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnBy
b3RvIikKLSAgICBnZW5lcmF0ZV9wcm90bygiLi4vc3JjL2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5w
cm90byIpCi0gICAgZ2VuZXJhdGVfcHJvdG8oIi4uL3NyYy9nb29nbGUvcHJvdG9idWYvZmllbGRf
bWFzay5wcm90byIpCi0gICAgZ2VuZXJhdGVfcHJvdG8oIi4uL3NyYy9nb29nbGUvcHJvdG9idWYv
c291cmNlX2NvbnRleHQucHJvdG8iKQotICAgIGdlbmVyYXRlX3Byb3RvKCIuLi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3N0cnVjdC5wcm90byIpCi0gICAgZ2VuZXJhdGVfcHJvdG8oIi4uL3NyYy9nb29n
bGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvIikKLSAgICBnZW5lcmF0ZV9wcm90bygiLi4vc3Jj
L2dvb2dsZS9wcm90b2J1Zi90eXBlLnByb3RvIikKLSAgICBnZW5lcmF0ZV9wcm90bygiLi4vc3Jj
L2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90byIpCi0gICAgR2VuZXJhdGVVbml0dGVzdFBy
b3RvcygpCi0KLSAgICAjIE1ha2Ugc3VyZSBnb29nbGUucHJvdG9idWYvKiogYXJlIHZhbGlkIHBh
Y2thZ2VzLgotICAgIGZvciBwYXRoIGluIFsnJywgJ2ludGVybmFsLycsICdjb21waWxlci8nLCAn
cHlleHQvJywgJ3V0aWwvJ106Ci0gICAgICB0cnk6Ci0gICAgICAgIG9wZW4oJ2dvb2dsZS9wcm90
b2J1Zi8lc19faW5pdF9fLnB5JyAlIHBhdGgsICdhJykuY2xvc2UoKQotICAgICAgZXhjZXB0IEVu
dmlyb25tZW50RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICAjIF9idWlsZF9weSBpcyBhbiBvbGQt
c3R5bGUgY2xhc3MsIHNvIHN1cGVyKCkgZG9lc24ndCB3b3JrLgotICAgIF9idWlsZF9weS5ydW4o
c2VsZikKLQotY2xhc3MgdGVzdF9jb25mb3JtYW5jZShfYnVpbGRfcHkpOgotICB0YXJnZXQgPSAn
dGVzdF9weXRob24nCi0gIGRlZiBydW4oc2VsZik6Ci0gICAgaWYgc3lzLnZlcnNpb25faW5mbyA+
PSAoMiwgNyk6Ci0gICAgICAjIFB5dGhvbiAyLjYgZG9kZ2VzIHRoZXNlIGV4dHJhIGZhaWx1cmVz
LgotICAgICAgb3MuZW52aXJvblsiQ09ORk9STUFOQ0VfUFlUSE9OX0VYVFJBX0ZBSUxVUkVTIl0g
PSAoCi0gICAgICAgICAgIi0tZmFpbHVyZV9saXN0IGZhaWx1cmVfbGlzdF9weXRob24tcG9zdDI2
LnR4dCIpCi0gICAgY21kID0gJ2NkIC4uL2NvbmZvcm1hbmNlICYmIG1ha2UgJXMnICUgKHRlc3Rf
Y29uZm9ybWFuY2UudGFyZ2V0KQotICAgIHN0YXR1cyA9IHN1YnByb2Nlc3MuY2hlY2tfY2FsbChj
bWQsIHNoZWxsPVRydWUpCi0KLQotZGVmIGdldF9vcHRpb25fZnJvbV9zeXNfYXJndihvcHRpb25f
c3RyKToKLSAgaWYgb3B0aW9uX3N0ciBpbiBzeXMuYXJndjoKLSAgICBzeXMuYXJndi5yZW1vdmUo
b3B0aW9uX3N0cikKLSAgICByZXR1cm4gVHJ1ZQotICByZXR1cm4gRmFsc2UKLQotCi1pZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgotICBleHRfbW9kdWxlX2xpc3QgPSBbXQotICB3YXJuaW5nc19h
c19lcnJvcnMgPSAnLS13YXJuaW5nc19hc19lcnJvcnMnCi0gIGlmIGdldF9vcHRpb25fZnJvbV9z
eXNfYXJndignLS1jcHBfaW1wbGVtZW50YXRpb24nKToKLSAgICAjIExpbmsgbGlicHJvdG9idWYu
YSBhbmQgbGlicHJvdG9idWYtbGl0ZS5hIHN0YXRpY2FsbHkgd2l0aCB0aGUKLSAgICAjIGV4dGVu
c2lvbi4gTm90ZSB0aGF0IHRob3NlIGxpYnJhcmllcyBoYXZlIHRvIGJlIGNvbXBpbGVkIHdpdGgK
LSAgICAjIC1mUElDIGZvciB0aGlzIHRvIHdvcmsuCi0gICAgY29tcGlsZV9zdGF0aWNfZXh0ID0g
Z2V0X29wdGlvbl9mcm9tX3N5c19hcmd2KCctLWNvbXBpbGVfc3RhdGljX2V4dGVuc2lvbicpCi0g
ICAgZXh0cmFfY29tcGlsZV9hcmdzID0gWyctV25vLXdyaXRlLXN0cmluZ3MnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAnLVduby1pbnZhbGlkLW9mZnNldG9mJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgJy1Xbm8tc2lnbi1jb21wYXJlJ10KLSAgICBsaWJyYXJpZXMgPSBbJ3Byb3Rv
YnVmJ10KLSAgICBleHRyYV9vYmplY3RzID0gTm9uZQotICAgIGlmIGNvbXBpbGVfc3RhdGljX2V4
dDoKLSAgICAgIGxpYnJhcmllcyA9IE5vbmUKLSAgICAgIGV4dHJhX29iamVjdHMgPSBbJy4uL3Ny
Yy8ubGlicy9saWJwcm90b2J1Zi5hJywKLSAgICAgICAgICAgICAgICAgICAgICAgJy4uL3NyYy8u
bGlicy9saWJwcm90b2J1Zi1saXRlLmEnXQotICAgIHRlc3RfY29uZm9ybWFuY2UudGFyZ2V0ID0g
J3Rlc3RfcHl0aG9uX2NwcCcKLQotICAgIGlmICJjbGFuZyIgaW4gb3MucG9wZW4oJyRDQyAtLXZl
cnNpb24gMj4gL2Rldi9udWxsJykucmVhZCgpOgotICAgICAgZXh0cmFfY29tcGlsZV9hcmdzLmFw
cGVuZCgnLVduby1zaG9ydGVuLTY0LXRvLTMyJykKLQotICAgIGlmIHdhcm5pbmdzX2FzX2Vycm9y
cyBpbiBzeXMuYXJndjoKLSAgICAgIGV4dHJhX2NvbXBpbGVfYXJncy5hcHBlbmQoJy1XZXJyb3In
KQotICAgICAgc3lzLmFyZ3YucmVtb3ZlKHdhcm5pbmdzX2FzX2Vycm9ycykKLQotICAgICMgQysr
IGltcGxlbWVudGF0aW9uIGV4dGVuc2lvbgotICAgIGV4dF9tb2R1bGVfbGlzdC5leHRlbmQoWwot
ICAgICAgICBFeHRlbnNpb24oCi0gICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLnB5ZXh0Ll9t
ZXNzYWdlIiwKLSAgICAgICAgICAgIGdsb2IuZ2xvYignZ29vZ2xlL3Byb3RvYnVmL3B5ZXh0Lyou
Y2MnKSwKLSAgICAgICAgICAgIGluY2x1ZGVfZGlycz1bIi4iLCAiLi4vc3JjIl0sCi0gICAgICAg
ICAgICBsaWJyYXJpZXM9bGlicmFyaWVzLAotICAgICAgICAgICAgZXh0cmFfb2JqZWN0cz1leHRy
YV9vYmplY3RzLAotICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnLi4vc3JjLy5saWJzJ10sCi0g
ICAgICAgICAgICBleHRyYV9jb21waWxlX2FyZ3M9ZXh0cmFfY29tcGlsZV9hcmdzLAotICAgICAg
ICApLAotICAgICAgICBFeHRlbnNpb24oCi0gICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLmlu
dGVybmFsLl9hcGlfaW1wbGVtZW50YXRpb24iLAotICAgICAgICAgICAgZ2xvYi5nbG9iKCdnb29n
bGUvcHJvdG9idWYvaW50ZXJuYWwvYXBpX2ltcGxlbWVudGF0aW9uLmNjJyksCi0gICAgICAgICAg
ICBleHRyYV9jb21waWxlX2FyZ3M9WyctRFBZVEhPTl9QUk9UTzJfQ1BQX0lNUExfVjInXSwKLSAg
ICAgICAgKSwKLSAgICBdKQotICAgIG9zLmVudmlyb25bJ1BST1RPQ09MX0JVRkZFUlNfUFlUSE9O
X0lNUExFTUVOVEFUSU9OJ10gPSAnY3BwJwotCi0gICMgS2VlcCB0aGlzIGxpc3Qgb2YgZGVwZW5k
ZW5jaWVzIGluIHN5bmMgd2l0aCB0b3guaW5pLgotICBpbnN0YWxsX3JlcXVpcmVzID0gWydzaXg+
PTEuOScsICdzZXR1cHRvb2xzJ10KLSAgaWYgc3lzLnZlcnNpb25faW5mbyA8PSAoMiw3KToKLSAg
ICBpbnN0YWxsX3JlcXVpcmVzLmFwcGVuZCgnb3JkZXJlZGRpY3QnKQotICAgIGluc3RhbGxfcmVx
dWlyZXMuYXBwZW5kKCd1bml0dGVzdDInKQotCi0gIHNldHVwKAotICAgICAgbmFtZT0ncHJvdG9i
dWYnLAotICAgICAgdmVyc2lvbj1HZXRWZXJzaW9uKCksCi0gICAgICBkZXNjcmlwdGlvbj0nUHJv
dG9jb2wgQnVmZmVycycsCi0gICAgICBsb25nX2Rlc2NyaXB0aW9uPSJQcm90b2NvbCBCdWZmZXJz
IGFyZSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdCIsCi0gICAgICB1cmw9J2h0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvJywKLSAgICAgIG1haW50
YWluZXI9J3Byb3RvYnVmQGdvb2dsZWdyb3Vwcy5jb20nLAotICAgICAgbWFpbnRhaW5lcl9lbWFp
bD0ncHJvdG9idWZAZ29vZ2xlZ3JvdXBzLmNvbScsCi0gICAgICBsaWNlbnNlPSdOZXcgQlNEIExp
Y2Vuc2UnLAotICAgICAgY2xhc3NpZmllcnM9WwotICAgICAgICAiUHJvZ3JhbW1pbmcgTGFuZ3Vh
Z2UgOjogUHl0aG9uIiwKLSAgICAgICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6
OiAyIiwKLSAgICAgICAgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYiLAot
ICAgICAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNyIsCi0gICAgICAg
ICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMyIsCi0gICAgICAgICJQcm9ncmFt
bWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy4zIiwKLSAgICAgICAgIlByb2dyYW1taW5nIExh
bmd1YWdlIDo6IFB5dGhvbiA6OiAzLjQiLAotICAgICAgICBdLAotICAgICAgbmFtZXNwYWNlX3Bh
Y2thZ2VzPVsnZ29vZ2xlJ10sCi0gICAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKAotICAgICAg
ICAgIGV4Y2x1ZGU9WwotICAgICAgICAgICAgICAnaW1wb3J0X3Rlc3RfcGFja2FnZScsCi0gICAg
ICAgICAgXSwKLSAgICAgICksCi0gICAgICB0ZXN0X3N1aXRlPSdnb29nbGUucHJvdG9idWYuaW50
ZXJuYWwnLAotICAgICAgY21kY2xhc3M9ewotICAgICAgICAgICdjbGVhbic6IGNsZWFuLAotICAg
ICAgICAgICdidWlsZF9weSc6IGJ1aWxkX3B5LAotICAgICAgICAgICd0ZXN0X2NvbmZvcm1hbmNl
JzogdGVzdF9jb25mb3JtYW5jZSwKLSAgICAgIH0sCi0gICAgICBpbnN0YWxsX3JlcXVpcmVzPWlu
c3RhbGxfcmVxdWlyZXMsCi0gICAgICBleHRfbW9kdWxlcz1leHRfbW9kdWxlX2xpc3QsCi0gICkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcHl0aG9uL3N0dWJvdXQucHkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi9zdHVib3V0LnB5CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhZWU0ZjJkYTIwZGMwNDk1YTQ2M2RhNjlkZTk3YmRiYWM4
MmQxZTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0
aG9uL3N0dWJvdXQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotIyEvdXNyL2Jp
bi9weXRob24yLjQKLSMKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KLSMKLSMgTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0j
Ci0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0j
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
LSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIGlzIHVzZWQg
Zm9yIHRlc3RpbmcuICBUaGUgb3JpZ2luYWwgaXMgYXQ6Ci0jICAgaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL3B5bW94LwotCi1jbGFzcyBTdHViT3V0Rm9yVGVzdGluZzoKLSAgIiIiU2FtcGxlIFVz
YWdlOgotICAgICBZb3Ugd2FudCBvcy5wYXRoLmV4aXN0cygpIHRvIGFsd2F5cyByZXR1cm4gdHJ1
ZSBkdXJpbmcgdGVzdGluZy4KLQotICAgICBzdHVicyA9IFN0dWJPdXRGb3JUZXN0aW5nKCkKLSAg
ICAgc3R1YnMuU2V0KG9zLnBhdGgsICdleGlzdHMnLCBsYW1iZGEgeDogMSkKLSAgICAgICAuLi4K
LSAgICAgc3R1YnMuVW5zZXRBbGwoKQotCi0gICAgIFRoZSBhYm92ZSBjaGFuZ2VzIG9zLnBhdGgu
ZXhpc3RzIGludG8gYSBsYW1iZGEgdGhhdCByZXR1cm5zIDEuICBPbmNlCi0gICAgIHRoZSAuLi4g
cGFydCBvZiB0aGUgY29kZSBmaW5pc2hlcywgdGhlIFVuc2V0QWxsKCkgbG9va3MgdXAgdGhlIG9s
ZCB2YWx1ZQotICAgICBvZiBvcy5wYXRoLmV4aXN0cyBhbmQgcmVzdG9yZXMgaXQuCi0KLSAgIiIi
Ci0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICBzZWxmLmNhY2hlID0gW10KLSAgICBzZWxmLnN0
dWJzID0gW10KLQotICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICBzZWxmLlNtYXJ0VW5zZXRBbGwo
KQotICAgIHNlbGYuVW5zZXRBbGwoKQotCi0gIGRlZiBTbWFydFNldChzZWxmLCBvYmosIGF0dHJf
bmFtZSwgbmV3X2F0dHIpOgotICAgICIiIlJlcGxhY2Ugb2JqLmF0dHJfbmFtZSB3aXRoIG5ld19h
dHRyLiBUaGlzIG1ldGhvZCBpcyBzbWFydCBhbmQgd29ya3MKLSAgICAgICBhdCB0aGUgbW9kdWxl
LCBjbGFzcywgYW5kIGluc3RhbmNlIGxldmVsIHdoaWxlIHByZXNlcnZpbmcgcHJvcGVyCi0gICAg
ICAgaW5oZXJpdGFuY2UuIEl0IHdpbGwgbm90IHN0dWIgb3V0IEMgdHlwZXMgaG93ZXZlciB1bmxl
c3MgdGhhdCBoYXMgYmVlbgotICAgICAgIGV4cGxpY2l0bHkgYWxsb3dlZCBieSB0aGUgdHlwZS4K
LQotICAgICAgIFRoaXMgbWV0aG9kIHN1cHBvcnRzIHRoZSBjYXNlIHdoZXJlIGF0dHJfbmFtZSBp
cyBhIHN0YXRpY21ldGhvZCBvciBhCi0gICAgICAgY2xhc3NtZXRob2Qgb2Ygb2JqLgotCi0gICAg
ICAgTm90ZXM6Ci0gICAgICAtIElmIG9iaiBpcyBhbiBpbnN0YW5jZSwgdGhlbiBpdCBpcyBpdHMg
Y2xhc3MgdGhhdCB3aWxsIGFjdHVhbGx5IGJlCi0gICAgICAgIHN0dWJiZWQuIE5vdGUgdGhhdCB0
aGUgbWV0aG9kIFNldCgpIGRvZXMgbm90IGRvIHRoYXQ6IGlmIG9iaiBpcwotICAgICAgICBhbiBp
bnN0YW5jZSwgaXQgKGFuZCBub3QgaXRzIGNsYXNzKSB3aWxsIGJlIHN0dWJiZWQuCi0gICAgICAt
IFRoZSBzdHViYmluZyBpcyB1c2luZyB0aGUgYnVpbHRpbiBnZXRhdHRyIGFuZCBzZXRhdHRyLiBT
bywgdGhlIF9fZ2V0X18KLSAgICAgICAgYW5kIF9fc2V0X18gd2lsbCBiZSBjYWxsZWQgd2hlbiBz
dHViYmluZyAoVE9ETzogQSBiZXR0ZXIgaWRlYSB3b3VsZAotICAgICAgICBwcm9iYWJseSBiZSB0
byBtYW5pcHVsYXRlIG9iai5fX2RpY3RfXyBpbnN0ZWFkIG9mIGdldGF0dHIoKSBhbmQKLSAgICAg
ICAgc2V0YXR0cigpKS4KLQotICAgICAgIFJhaXNlcyBBdHRyaWJ1dGVFcnJvciBpZiB0aGUgYXR0
cmlidXRlIGNhbm5vdCBiZSBmb3VuZC4KLSAgICAiIiIKLSAgICBpZiAoaW5zcGVjdC5pc21vZHVs
ZShvYmopIG9yCi0gICAgICAgIChub3QgaW5zcGVjdC5pc2NsYXNzKG9iaikgYW5kIG9iai5fX2Rp
Y3RfXy5oYXNfa2V5KGF0dHJfbmFtZSkpKToKLSAgICAgIG9yaWdfb2JqID0gb2JqCi0gICAgICBv
cmlnX2F0dHIgPSBnZXRhdHRyKG9iaiwgYXR0cl9uYW1lKQotCi0gICAgZWxzZToKLSAgICAgIGlm
IG5vdCBpbnNwZWN0LmlzY2xhc3Mob2JqKToKLSAgICAgICAgbXJvID0gbGlzdChpbnNwZWN0Lmdl
dG1ybyhvYmouX19jbGFzc19fKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIG1ybyA9IGxpc3QoaW5z
cGVjdC5nZXRtcm8ob2JqKSkKLQotICAgICAgbXJvLnJldmVyc2UoKQotCi0gICAgICBvcmlnX2F0
dHIgPSBOb25lCi0KLSAgICAgIGZvciBjbHMgaW4gbXJvOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgb3JpZ19vYmogPSBjbHMKLSAgICAgICAgICBvcmlnX2F0dHIgPSBnZXRhdHRyKG9iaiwgYXR0
cl9uYW1lKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgY29udGlu
dWUKLQotICAgIGlmIG9yaWdfYXR0ciBpcyBOb25lOgotICAgICAgcmFpc2UgQXR0cmlidXRlRXJy
b3IoIkF0dHJpYnV0ZSBub3QgZm91bmQuIikKLQotICAgICMgQ2FsbGluZyBnZXRhdHRyKCkgb24g
YSBzdGF0aWNtZXRob2QgdHJhbnNmb3JtcyBpdCB0byBhICdub3JtYWwnIGZ1bmN0aW9uLgotICAg
ICMgV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBwdXQgaXQgYmFjayBhcyBhIHN0YXRpY21ldGhv
ZC4KLSAgICBvbGRfYXR0cmlidXRlID0gb2JqLl9fZGljdF9fLmdldChhdHRyX25hbWUpCi0gICAg
aWYgb2xkX2F0dHJpYnV0ZSBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShvbGRfYXR0cmlidXRl
LCBzdGF0aWNtZXRob2QpOgotICAgICAgb3JpZ19hdHRyID0gc3RhdGljbWV0aG9kKG9yaWdfYXR0
cikKLQotICAgIHNlbGYuc3R1YnMuYXBwZW5kKChvcmlnX29iaiwgYXR0cl9uYW1lLCBvcmlnX2F0
dHIpKQotICAgIHNldGF0dHIob3JpZ19vYmosIGF0dHJfbmFtZSwgbmV3X2F0dHIpCi0KLSAgZGVm
IFNtYXJ0VW5zZXRBbGwoc2VsZik6Ci0gICAgIiIiUmV2ZXJzZXMgYWxsIHRoZSBTbWFydFNldCgp
IGNhbGxzLCByZXN0b3JpbmcgdGhpbmdzIHRvIHRoZWlyIG9yaWdpbmFsCi0gICAgZGVmaW5pdGlv
bi4gIEl0cyBva2F5IHRvIGNhbGwgU21hcnRVbnNldEFsbCgpIHJlcGVhdGVkbHksIGFzIGxhdGVy
IGNhbGxzCi0gICAgaGF2ZSBubyBlZmZlY3QgaWYgbm8gU21hcnRTZXQoKSBjYWxscyBoYXZlIGJl
ZW4gbWFkZS4KLQotICAgICIiIgotICAgIHNlbGYuc3R1YnMucmV2ZXJzZSgpCi0KLSAgICBmb3Ig
YXJncyBpbiBzZWxmLnN0dWJzOgotICAgICAgc2V0YXR0cigqYXJncykKLQotICAgIHNlbGYuc3R1
YnMgPSBbXQotCi0gIGRlZiBTZXQoc2VsZiwgcGFyZW50LCBjaGlsZF9uYW1lLCBuZXdfY2hpbGQp
OgotICAgICIiIlJlcGxhY2UgY2hpbGRfbmFtZSdzIG9sZCBkZWZpbml0aW9uIHdpdGggbmV3X2No
aWxkLCBpbiB0aGUgY29udGV4dAotICAgIG9mIHRoZSBnaXZlbiBwYXJlbnQuICBUaGUgcGFyZW50
IGNvdWxkIGJlIGEgbW9kdWxlIHdoZW4gdGhlIGNoaWxkIGlzIGEKLSAgICBmdW5jdGlvbiBhdCBt
b2R1bGUgc2NvcGUuICBPciB0aGUgcGFyZW50IGNvdWxkIGJlIGEgY2xhc3Mgd2hlbiBhIGNsYXNz
JwotICAgIG1ldGhvZCBpcyBiZWluZyByZXBsYWNlZC4gIFRoZSBuYW1lZCBjaGlsZCBpcyBzZXQg
dG8gbmV3X2NoaWxkLCB3aGlsZQotICAgIHRoZSBwcmlvciBkZWZpbml0aW9uIGlzIHNhdmVkIGF3
YXkgZm9yIGxhdGVyLCB3aGVuIFVuc2V0QWxsKCkgaXMgY2FsbGVkLgotCi0gICAgVGhpcyBtZXRo
b2Qgc3VwcG9ydHMgdGhlIGNhc2Ugd2hlcmUgY2hpbGRfbmFtZSBpcyBhIHN0YXRpY21ldGhvZCBv
ciBhCi0gICAgY2xhc3NtZXRob2Qgb2YgcGFyZW50LgotICAgICIiIgotICAgIG9sZF9jaGlsZCA9
IGdldGF0dHIocGFyZW50LCBjaGlsZF9uYW1lKQotCi0gICAgb2xkX2F0dHJpYnV0ZSA9IHBhcmVu
dC5fX2RpY3RfXy5nZXQoY2hpbGRfbmFtZSkKLSAgICBpZiBvbGRfYXR0cmlidXRlIGlzIG5vdCBO
b25lIGFuZCBpc2luc3RhbmNlKG9sZF9hdHRyaWJ1dGUsIHN0YXRpY21ldGhvZCk6Ci0gICAgICBv
bGRfY2hpbGQgPSBzdGF0aWNtZXRob2Qob2xkX2NoaWxkKQotCi0gICAgc2VsZi5jYWNoZS5hcHBl
bmQoKHBhcmVudCwgb2xkX2NoaWxkLCBjaGlsZF9uYW1lKSkKLSAgICBzZXRhdHRyKHBhcmVudCwg
Y2hpbGRfbmFtZSwgbmV3X2NoaWxkKQotCi0gIGRlZiBVbnNldEFsbChzZWxmKToKLSAgICAiIiJS
ZXZlcnNlcyBhbGwgdGhlIFNldCgpIGNhbGxzLCByZXN0b3JpbmcgdGhpbmdzIHRvIHRoZWlyIG9y
aWdpbmFsCi0gICAgZGVmaW5pdGlvbi4gIEl0cyBva2F5IHRvIGNhbGwgVW5zZXRBbGwoKSByZXBl
YXRlZGx5LCBhcyBsYXRlciBjYWxscyBoYXZlCi0gICAgbm8gZWZmZWN0IGlmIG5vIFNldCgpIGNh
bGxzIGhhdmUgYmVlbiBtYWRlLgotCi0gICAgIiIiCi0gICAgIyBVbmRvIGNhbGxzIHRvIFNldCgp
IGluIHJldmVyc2Ugb3JkZXIsIGluIGNhc2UgU2V0KCkgd2FzIGNhbGxlZCBvbiB0aGUKLSAgICAj
IHNhbWUgYXJndW1lbnRzIHJlcGVhdGVkbHkgKHdhbnQgdGhlIG9yaWdpbmFsIGNhbGwgdG8gYmUg
bGFzdCBvbmUgdW5kb25lKQotICAgIHNlbGYuY2FjaGUucmV2ZXJzZSgpCi0KLSAgICBmb3IgKHBh
cmVudCwgb2xkX2NoaWxkLCBjaGlsZF9uYW1lKSBpbiBzZWxmLmNhY2hlOgotICAgICAgc2V0YXR0
cihwYXJlbnQsIGNoaWxkX25hbWUsIG9sZF9jaGlsZCkKLSAgICBzZWxmLmNhY2hlID0gW10KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvcHl0aG9uL3RveC5pbmkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3B5dGhvbi90b3guaW5pCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjZjhkNTQwMTY4NTExMGI1NjUyZTQyZWQ2ZWVlNzNlNzcyODU1YWRmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcHl0aG9uL3RveC5p
bmkKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1bdG94XQotZW52bGlzdCA9Ci0gICAg
cHl7MjYsMjcsMzMsMzR9LXtjcHAscHl0aG9ufQotCi1bdGVzdGVudl0KLXVzZWRldmVsb3A9dHJ1
ZQotcGFzc2VudiA9IENDCi1zZXRlbnYgPQotICAgIGNwcDogTERfTElCUkFSWV9QQVRIPXt0b3hp
bmlkaXJ9Ly4uL3NyYy8ubGlicwotICAgIGNwcDogRFlMRF9MSUJSQVJZX1BBVEg9e3RveGluaWRp
cn0vLi4vc3JjLy5saWJzCi0gICAgY3BwOiBQUk9UT0NPTF9CVUZGRVJTX1BZVEhPTl9JTVBMRU1F
TlRBVElPTj1jcHAKLWNvbW1hbmRzID0KLSAgICBweXRob24gc2V0dXAucHkgLXEgYnVpbGRfcHkK
LSAgICBweXRob246IHB5dGhvbiBzZXR1cC5weSAtcSBidWlsZAotICAgIGNwcDogcHl0aG9uIHNl
dHVwLnB5IC1xIGJ1aWxkIC0tY3BwX2ltcGxlbWVudGF0aW9uIC0td2FybmluZ3NfYXNfZXJyb3Jz
Ci0gICAgcHl0aG9uOiBweXRob24gc2V0dXAucHkgLXEgdGVzdCAtcQotICAgIGNwcDogcHl0aG9u
IHNldHVwLnB5IC1xIHRlc3QgLXEgLS1jcHBfaW1wbGVtZW50YXRpb24KLSAgICBweXRob246IHB5
dGhvbiBzZXR1cC5weSAtcSB0ZXN0X2NvbmZvcm1hbmNlCi0gICAgY3BwOiBweXRob24gc2V0dXAu
cHkgLXEgdGVzdF9jb25mb3JtYW5jZSAtLWNwcF9pbXBsZW1lbnRhdGlvbgotZGVwcyA9Ci0gICAg
IyBLZWVwIHRoaXMgbGlzdCBvZiBkZXBlbmRlbmNpZXMgaW4gc3luYyB3aXRoIHNldHVwLnB5Lgot
ICAgIHNpeD49MS45Ci0gICAgcHkyNjogb3JkZXJlZGRpY3QKLSAgICBweTI2OiB1bml0dGVzdDIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcnVieS9HZW1maWxlIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L0dlbWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGZhNzVkZjE1NjMyMzA1ZjliYWRiOWE3YWMwMDI4ZTRiMmVmNGQyMjEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L0dlbWZpbGUK
KysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLXNvdXJjZSAnaHR0cHM6Ly9ydWJ5Z2Vtcy5v
cmcnCi0KLWdlbXNwZWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9HZW1maWxlLmxvY2sgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvR2VtZmls
ZS5sb2NrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGViOWNjNDIxYjhjNDVhMGYz
NmZhMmUwN2UwMWIxOWNjMjhiNWExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcnVieS9HZW1maWxlLmxvY2sKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCww
IEBACi1QQVRICi0gIHJlbW90ZTogLgotICBzcGVjczoKLSAgICBnb29nbGUtcHJvdG9idWYgKDMu
MC4wLmFscGhhLjUuMC41KQotCi1HRU0KLSAgcmVtb3RlOiBodHRwczovL3J1YnlnZW1zLm9yZy8K
LSAgc3BlY3M6Ci0gICAgcG93ZXJfYXNzZXJ0ICgwLjIuMikKLSAgICByYWtlICgxMC40LjIpCi0g
ICAgcmFrZS1jb21waWxlciAoMC45LjUpCi0gICAgICByYWtlCi0gICAgcmFrZS1jb21waWxlci1k
b2NrICgwLjUuMSkKLSAgICBydWJ5Z2Vtcy10YXNrcyAoMC4yLjQpCi0gICAgdGVzdC11bml0ICgz
LjAuOSkKLSAgICAgIHBvd2VyX2Fzc2VydAotCi1QTEFURk9STVMKLSAgamF2YQotICBydWJ5Ci0K
LURFUEVOREVOQ0lFUwotICBnb29nbGUtcHJvdG9idWYhCi0gIHJha2UtY29tcGlsZXIKLSAgcmFr
ZS1jb21waWxlci1kb2NrCi0gIHJ1YnlnZW1zLXRhc2tzCi0gIHRlc3QtdW5pdAotCi1CVU5ETEVE
IFdJVEgKLSAgIDEuMTEuMgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L1JFQURNRS5tZCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9SRUFETUUu
bWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOGUwNWE3MmI4ZjQ1Mzg5NGU3MTEz
MTEyMjFhN2Y4Y2EzMTdhZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9ydWJ5L1JFQURNRS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi1U
aGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgUnVieSBleHRlbnNpb24gdGhhdCBpbXBsZW1lbnRz
IFByb3RvY29sIEJ1ZmZlcnMKLWZ1bmN0aW9uYWxpdHkgaW4gUnVieS4KLQotVGhlIFJ1YnkgZXh0
ZW5zaW9uIG1ha2VzIHVzZSBvZiBnZW5lcmF0ZWQgUnVieSBjb2RlIHRoYXQgZGVmaW5lcyBtZXNz
YWdlIGFuZAotZW51bSB0eXBlcyBpbiBhIFJ1YnkgRFNMLiBZb3UgbWF5IHdyaXRlIGRlZmluaXRp
b25zIGluIHRoaXMgRFNMIGRpcmVjdGx5LCBidXQKLXdlIHJlY29tbWVuZCB1c2luZyBwcm90b2Mn
cyBSdWJ5IGdlbmVyYXRpb24gc3VwcG9ydCB3aXRoIC5wcm90byBmaWxlcy4gVGhlCi1idWlsZCBw
cm9jZXNzIGluIHRoaXMgZGlyZWN0b3J5IG9ubHkgaW5zdGFsbHMgdGhlIGV4dGVuc2lvbjsgeW91
IG5lZWQgdG8KLWluc3RhbGwgcHJvdG9jIGFzIHdlbGwgdG8gaGF2ZSBSdWJ5IGNvZGUgZ2VuZXJh
dGlvbiBmdW5jdGlvbmFsaXR5LgotCi1JbnN0YWxsYXRpb24gZnJvbSBHZW0KLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1XaGVuIHdlIHJlbGVhc2UgYSB2ZXJzaW9uIG9mIFByb3RvY29sIEJ1ZmZl
cnMsIHdlIHdpbGwgdXBsb2FkIGEgR2VtIHRvCi1bUnVieUdlbXNdKGh0dHBzOi8vd3d3LnJ1Ynln
ZW1zLm9yZy8pLiBUbyB1c2UgdGhpcyBwcmUtcGFja2FnZWQgZ2VtLCBzaW1wbHkKLWluc3RhbGwg
aXQgYXMgeW91IHdvdWxkIGFueSBvdGhlciBnZW06Ci0KLSAgICAkIGdlbSBpbnN0YWxsIFstLXBy
ZXJlbGVhc2VdIGdvb2dsZS1wcm90b2J1ZgotCi1UaGUgYC0tcHJlYCBmbGFnIGlzIG5lY2Vzc2Fy
eSBpZiB3ZSBoYXZlIG5vdCB5ZXQgbWFkZSBhIG5vbi1hbHBoYS9iZXRhIHJlbGVhc2UKLW9mIHRo
ZSBSdWJ5IGV4dGVuc2lvbjsgaXQgYWxsb3dzIGBnZW1gIHRvIGNvbnNpZGVyIHRoZXNlICJwcmUt
cmVsZWFzZSIKLWFscGhhL2JldGEgdmVyc2lvbnMuCi0KLU9uY2UgdGhlIGdlbSBpcyBpbnN0YWxs
ZWQsIHlvdSBtYXkgb3IgbWF5IG5vdCBuZWVkIGBwcm90b2NgLiBJZiB5b3Ugd3JpdGUgeW91cgot
bWVzc2FnZSB0eXBlIGRlc2NyaXB0aW9ucyBkaXJlY3RseSBpbiB0aGUgUnVieSBEU0wsIHlvdSBk
byBub3QgbmVlZCBpdC4KLUhvd2V2ZXIsIGlmIHlvdSB3aXNoIHRvIGdlbmVyYXRlIHRoZSBSdWJ5
IERTTCBmcm9tIGEgYC5wcm90b2AgZmlsZSwgeW91IHdpbGwKLWFsc28gd2FudCB0byBpbnN0YWxs
IFByb3RvY29sIEJ1ZmZlcnMgaXRzZWxmLCBhcyBkZXNjcmliZWQgaW4gdGhpcyByZXBvc2l0b3J5
J3MKLW1haW4gYFJFQURNRWAgZmlsZS4gVGhlIHZlcnNpb24gb2YgYHByb3RvY2AgaW5jbHVkZWQg
aW4gdGhlIGxhdGVzdCByZWxlYXNlCi1zdXBwb3J0cyB0aGUgYC0tcnVieV9vdXRgIG9wdGlvbiB0
byBnZW5lcmF0ZSBSdWJ5IGNvZGUuCi0KLUEgc2ltcGxlIGV4YW1wbGUgb2YgdXNpbmcgdGhlIFJ1
YnkgZXh0ZW5zaW9uIGZvbGxvd3MuIE1vcmUgZXh0ZW5zaXZlCi1kb2N1bWVudGF0aW9uIG1heSBi
ZSBmb3VuZCBpbiB0aGUgUnVieURvYyBjb21tZW50cyAoYGNhbGwtc2VxYCB0YWdzKSBpbiB0aGUK
LXNvdXJjZSwgYW5kIHdlIHBsYW4gdG8gcmVsZWFzZSBzZXBhcmF0ZSwgbW9yZSBkZXRhaWxlZCwg
ZG9jdW1lbnRhdGlvbiBhdCBhCi1sYXRlciBkYXRlLgotCi1gYGBydWJ5Ci1yZXF1aXJlICdnb29n
bGUvcHJvdG9idWYnCi0KLSMgZ2VuZXJhdGVkIGZyb20gbXlfcHJvdG9fdHlwZXMucHJvdG8gd2l0
aCBwcm90b2M6Ci0jICAkIHByb3RvYyAtLXJ1Ynlfb3V0PS4gbXlfcHJvdG9fdHlwZXMucHJvdG8K
LXJlcXVpcmUgJ215X3Byb3RvX3R5cGVzJwotCi1teW1lc3NhZ2UgPSBNeVRlc3RNZXNzYWdlLm5l
dyg6ZmllbGQxID0+IDQyLCA6ZmllbGQyID0+IFsiYSIsICJiIiwgImMiXSkKLW15bWVzc2FnZS5m
aWVsZDEgPSA0MwotbXltZXNzYWdlLmZpZWxkMi5wdXNoKCJkIikKLW15bWVzc2FnZS5maWVsZDMg
PSBTdWJNZXNzYWdlLm5ldyg6Zm9vID0+IDEwMCkKLQotZW5jb2RlZF9kYXRhID0gTXlUZXN0TWVz
c2FnZS5lbmNvZGUobXltZXNzYWdlKQotZGVjb2RlZCA9IE15VGVzdE1lc3NhZ2UuZGVjb2RlKGVu
Y29kZWRfZGF0YSkKLWFzc2VydCBkZWNvZGVkID09IG15bWVzc2FnZQotCi1wdXRzICJKU09OOiIK
LXB1dHMgTXlUZXN0TWVzc2FnZS5lbmNvZGVfanNvbihteW1lc3NhZ2UpCi1gYGAKLQotSW5zdGFs
bGF0aW9uIGZyb20gU291cmNlIChCdWlsZGluZyBHZW0pCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gYnVpbGQgdGhpcyBSdWJ5IGV4dGVuc2lvbiwgeW91IHdp
bGwgbmVlZDoKLQotKiBSYWtlCi0qIEJ1bmRsZXIKLSogUnVieSBkZXZlbG9wbWVudCBoZWFkZXJz
Ci0qIGEgQyBjb21waWxlcgotCi1UbyBCdWlsZCB0aGUgSlJ1YnkgZXh0ZW5zaW9uLCB5b3Ugd2ls
bCBuZWVkOgotCi0qIE1hdmVuCi0qIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcHJvdG9idWYg
amF2YSBsaWJyYXJ5IChzZWUgLi4vamF2YS9SRUFETUUubWQpCi0qIEluc3RhbGwgSlJ1Ynkgdmlh
IHJiZW52IG9yIFJWTQotCi1GaXJzdCBzd2l0Y2ggdG8gdGhlIGRlc2lyZWQgcGxhdGZvcm0gd2l0
aCByYmVudiBvciBSVk0uCi0KLVRoZW4gaW5zdGFsbCB0aGUgcmVxdWlyZWQgUnVieSBnZW1zOgot
Ci0gICAgJCBnZW0gaW5zdGFsbCBidW5kbGVyCi0gICAgJCBidW5kbGUKLQotVGhlbiBidWlsZCB0
aGUgR2VtOgotCi0gICAgJCByYWtlCi0gICAgJCByYWtlIGNsb2JiZXJfcGFja2FnZSBnZW0KLSAg
ICAkIGdlbSBpbnN0YWxsIGBscyBwa2cvZ29vZ2xlLXByb3RvYnVmLSouZ2VtYAotCi1UbyBydW4g
dGhlIHNwZWNzOgotCi0gICAgJCByYWtlIHRlc3QKLQotVGhpcyBnZW0gaW5jbHVkZXMgdGhlIHVw
YiBwYXJzaW5nIGFuZCBzZXJpYWxpemF0aW9uIGxpYnJhcnkgYXMgYSBzaW5nbGUtZmlsZQotYW1h
bGdhbWF0aW9uLiBJdCBpcyB1cC10by1kYXRlIHdpdGggdXBiIGdpdCBjb21taXQKLWA1MzViYzJm
ZTJmMmI0NjdmNTkzNDdmZmM5NDQ5ZTExZTQ3NzkxMjU3YC4KLQotVmVyc2lvbiBOdW1iZXIgU2No
ZW1lCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2UgYXJlIHVzaW5nIGEgdmVyc2lvbiBudW1i
ZXIgc2NoZW1lIHRoYXQgaXMgYSBoeWJyaWQgb2YgUHJvdG9jb2wgQnVmZmVycycKLW92ZXJhbGwg
dmVyc2lvbiBudW1iZXIgYW5kIHNvbWUgUnVieS1zcGVjaWZpYyBydWxlcy4gR2VtIGRvZXMgbm90
IGFsbG93Ci1yZS11cGxvYWRzIG9mIGEgZ2VtIHdpdGggdGhlIHNhbWUgdmVyc2lvbiBudW1iZXIs
IHNvIHdlIGFkZCBhIHNlcXVlbmNlIG51bWJlcgotKCJ1cGxvYWQgdmVyc2lvbiIpIHRvIHRoZSB2
ZXJzaW9uLiBXZSBhbHNvIGZvcm1hdCBhbHBoYWJldGljYWwgdGFncyAoYWxwaGEsCi1wcmUsIC4u
Likgc2xpZ2h0bHkgZGlmZmVyZW50bHksIGFuZCB3ZSBhdm9pZCBoeXBoZW5zLiBJbiBtb3JlIGRl
dGFpbDoKLQotKiBGaXJzdCwgd2UgZGV0ZXJtaW5lIHRoZSBwcmVmaXg6IGEgUHJvdG9jb2wgQnVm
ZmVycyB2ZXJzaW9uICIzLjAuMC1hbHBoYS0yIgotICBiZWNvbWVzICIzLjAuMC5hbHBoYS4yIi4g
V2hlbiB3ZSByZWxlYXNlIDMuMC4wLCB0aGlzIHByZWZpeCB3aWxsIGJlIHNpbXBseQotICAiMy4w
LjAiLgotKiBXZSB0aGVuIGFwcGVuZCB0aGUgdXBsb2FkIHZlcnNpb246ICIzLjAuMC5hbHBoYS4y
LjAiIG9yICIzLjAuMC4wIi4gSWYgd2UgbmVlZAotICB0byB1cGxvYWQgYSBuZXcgdmVyc2lvbiBv
ZiB0aGUgZ2VtIHRvIGZpeCBhbiBpc3N1ZSwgdGhlIHZlcnNpb24gYmVjb21lcwotICAiMy4wLjAu
YWxwaGEuMi4xIiBvciAiMy4wLjAuMSIuCi0qIElmIHdlIGFyZSB3b3JraW5nIG9uIGEgcHJlcmVs
ZWFzZSB2ZXJzaW9uLCB3ZSBhcHBlbmQgYSBwcmVyZWxlYXNlIHRhZzoKLSAgIjMuMC4wLmFscGhh
LjMuMC5wcmUiLiBUaGUgcHJlcmVsZWFzZSB0YWcgY29tZXMgYXQgdGhlIGVuZCBzbyB0aGF0IHdo
ZW4KLSAgdmVyc2lvbiBudW1iZXJzIGFyZSBzb3J0ZWQsIGFueSBwcmVyZWxlYXNlIGJ1aWxkcyBh
cmUgb3JkZXJlZCBiZXR3ZWVuIHRoZQotICBwcmlvciB2ZXJzaW9uIGFuZCBjdXJyZW50IHZlcnNp
b24uCi0KLVRoZXNlIHJ1bGVzIGFyZSBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIHNvcnRpbmcg
cnVsZXMgZm9yCi1bR2VtOjpWZXJzaW9uXShodHRwOi8vcnVieS1kb2Mub3JnL3N0ZGxpYi0yLjAv
bGliZG9jL3J1YnlnZW1zL3Jkb2MvR2VtL1ZlcnNpb24uaHRtbCk6Ci1yZWxlYXNlIG51bWJlcnMg
c2hvdWxkIHNvcnQgaW4gYWN0dWFsIHJlbGVhc2Ugb3JkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvUmFr
ZWZpbGUgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3J1YnkvUmFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMjlj
MzE1MWZhNmIwNmNlNmFiMWRlYTFkNDIwZmEyNmZlODlkODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L1Jha2VmaWxlCisrKyAvZGV2L251bGwKQEAg
LTEsMTAzICswLDAgQEAKLXJlcXVpcmUgInJ1YnlnZW1zIgotcmVxdWlyZSAicnVieWdlbXMvcGFj
a2FnZV90YXNrIgotcmVxdWlyZSAicmFrZS9leHRlbnNpb250YXNrIiB1bmxlc3MgUlVCWV9QTEFU
Rk9STSA9PSAiamF2YSIKLXJlcXVpcmUgInJha2UvdGVzdHRhc2siCi0KLXNwZWMgPSBHZW06OlNw
ZWNpZmljYXRpb24ubG9hZCgiZ29vZ2xlLXByb3RvYnVmLmdlbXNwZWMiKQotCi13ZWxsX2tub3du
X3Byb3RvcyA9ICV3WwotICBnb29nbGUvcHJvdG9idWYvYW55LnByb3RvCi0gIGdvb2dsZS9wcm90
b2J1Zi9hcGkucHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvCi0gIGdvb2ds
ZS9wcm90b2J1Zi9lbXB0eS5wcm90bwotICBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90
bwotICBnb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucHJvdG8KLSAgZ29vZ2xlL3Byb3Rv
YnVmL3N0cnVjdC5wcm90bwotICBnb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvCi0gIGdv
b2dsZS9wcm90b2J1Zi90eXBlLnByb3RvCi0gIGdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90
bwotXQotCi0jIFRoZXNlIGFyZSBvbWl0dGVkIGZvciBub3cgYmVjYXVzZSB3ZSBkb24ndCBzdXBw
b3J0IHByb3RvMi4KLXByb3RvMl9wcm90b3MgPSAld1sKLSAgZ29vZ2xlL3Byb3RvYnVmL2Rlc2Ny
aXB0b3IucHJvdG8KLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wcm90bwotXQot
Ci1nZW5wcm90b19vdXRwdXQgPSBbXQotCi0jIFdlIHdvbid0IGhhdmUgYWNjZXNzIHRvIC4uIGZy
b20gd2l0aGluIGRvY2tlciwgYnV0IHRoZSBwcm90byBmaWxlcwotIyB3aWxsIGJlIHRoZXJlLCB0
aGFua3MgdG8gdGhlIDpnZW5wcm90byBydWxlIGRlcGVuZGVuY3kgZm9yIGdlbTpuYXRpdmUuCi11
bmxlc3MgRU5WWydJTl9ET0NLRVInXSA9PSAndHJ1ZScKLSAgd2VsbF9rbm93bl9wcm90b3MuZWFj
aCBkbyB8cHJvdG9fZmlsZXwKLSAgICBpbnB1dF9maWxlID0gIi4uL3NyYy8iICsgcHJvdG9fZmls
ZQotICAgIG91dHB1dF9maWxlID0gImxpYi8iICsgcHJvdG9fZmlsZS5zdWIoL1wucHJvdG8kLywg
Ii5yYiIpCi0gICAgZ2VucHJvdG9fb3V0cHV0IDw8IG91dHB1dF9maWxlCi0gICAgZmlsZSBvdXRw
dXRfZmlsZSA9PiBpbnB1dF9maWxlIGRvIHxmaWxlX3Rhc2t8Ci0gICAgICBzaCAiLi4vc3JjL3By
b3RvYyAtSS4uL3NyYyAtLXJ1Ynlfb3V0PWxpYiAje2lucHV0X2ZpbGV9IgotICAgIGVuZAotICBl
bmQKLWVuZAotCi1pZiBSVUJZX1BMQVRGT1JNID09ICJqYXZhIgotICBpZiBgd2hpY2ggbXZuYCA9
PSAnJwotICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICJtYXZlbiBuZWVkcyB0byBiZSBpbnN0YWxs
ZWQiCi0gIGVuZAotICB0YXNrIDpjbGVhbiBkbwotICAgIHN5c3RlbSgibXZuIGNsZWFuIikKLSAg
ZW5kCi0KLSAgdGFzayA6Y29tcGlsZSBkbwotICAgIHN5c3RlbSgibXZuIHBhY2thZ2UiKQotICBl
bmQKLWVsc2UKLSAgUmFrZTo6RXh0ZW5zaW9uVGFzay5uZXcoInByb3RvYnVmX2MiLCBzcGVjKSBk
byB8ZXh0fAotICAgIGV4dC5leHRfZGlyID0gImV4dC9nb29nbGUvcHJvdG9idWZfYyIKLSAgICBl
eHQubGliX2RpciA9ICJsaWIvZ29vZ2xlIgotICAgIGV4dC5jcm9zc19jb21waWxlID0gdHJ1ZQot
ICAgIGV4dC5jcm9zc19wbGF0Zm9ybSA9IFsKLSAgICAgICd4ODYtbWluZ3czMicsICd4NjQtbWlu
Z3czMicsCi0gICAgICAneDg2XzY0LWxpbnV4JywgJ3g4Ni1saW51eCcsCi0gICAgICAndW5pdmVy
c2FsLWRhcndpbicKLSAgICBdCi0gIGVuZAotCi0gIHRhc2sgJ2dlbTp3aW5kb3dzJyBkbwotICAg
IHJlcXVpcmUgJ3Jha2VfY29tcGlsZXJfZG9jaycKLSAgICBSYWtlQ29tcGlsZXJEb2NrLnNoICJi
dW5kbGUgJiYgSU5fRE9DS0VSPXRydWUgcmFrZSBjcm9zcyBuYXRpdmUgZ2VtIFJVQllfQ0NfVkVS
U0lPTj0yLjMuMDoyLjIuMjoyLjEuNToyLjAuMCIKLSAgZW5kCi0KLSAgaWYgUlVCWV9QTEFURk9S
TSA9fiAvZGFyd2luLwotICAgIHRhc2sgJ2dlbTpuYXRpdmUnIGRvCi0gICAgICBzeXN0ZW0gInJh
a2UgZ2VucHJvdG8iCi0gICAgICBzeXN0ZW0gInJha2UgY3Jvc3MgbmF0aXZlIGdlbSBSVUJZX0ND
X1ZFUlNJT049Mi4zLjA6Mi4yLjI6Mi4xLjU6Mi4wLjAiCi0gICAgZW5kCi0gIGVsc2UKLSAgICB0
YXNrICdnZW06bmF0aXZlJyA9PiBbOmdlbnByb3RvLCAnZ2VtOndpbmRvd3MnXQotICBlbmQKLWVu
ZAotCi0KLSMgUHJvdG8gZm9yIHRlc3RzLgotZ2VucHJvdG9fb3V0cHV0IDw8ICJ0ZXN0cy9nZW5l
cmF0ZWRfY29kZS5yYiIKLWZpbGUgInRlc3RzL2dlbmVyYXRlZF9jb2RlLnJiIiA9PiAidGVzdHMv
Z2VuZXJhdGVkX2NvZGUucHJvdG8iIGRvIHxmaWxlX3Rhc2t8Ci0gIHNoICIuLi9zcmMvcHJvdG9j
IC0tcnVieV9vdXQ9LiB0ZXN0cy9nZW5lcmF0ZWRfY29kZS5wcm90byIKLWVuZAotCi10YXNrIDpn
ZW5wcm90byA9PiBnZW5wcm90b19vdXRwdXQKLQotdGFzayA6Y2xlYW4gZG8KLSAgc2ggInJtIC1m
ICN7Z2VucHJvdG9fb3V0cHV0LmpvaW4oJyAnKX0iCi1lbmQKLQotR2VtOjpQYWNrYWdlVGFzay5u
ZXcoc3BlYykgZG8gfHBrZ3wKLWVuZAotCi1SYWtlOjpUZXN0VGFzay5uZXcoOnRlc3QgPT4gOmJ1
aWxkKSBkbyB8dHwKLSAgdC50ZXN0X2ZpbGVzID0gRmlsZUxpc3RbInRlc3RzLyoucmIiXQotZW5k
Ci0KLXRhc2sgOmJ1aWxkID0+IFs6Y2xlYW4sIDpjb21waWxlLCA6Z2VucHJvdG9dCi10YXNrIDpk
ZWZhdWx0ID0+IFs6YnVpbGRdCi0KLSMgdmltOnN3PTI6ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9leHQv
Z29vZ2xlL3Byb3RvYnVmX2MvZGVmcy5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy9kZWZz
LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOTNiYWZiMzNjNGEzYjE1NzQ2NDkx
ZDc0ZjkxNjNhMDQ5ZTI3MjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9ydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy9kZWZzLmMKKysrIC9kZXYvbnVsbApA
QCAtMSwxNzYzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0j
aW5jbHVkZSAicHJvdG9idWYuaCIKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbW1v
biB1dGlsaXRpZXMuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgY29uc3QgY2hh
ciogZ2V0X3N0cihWQUxVRSBzdHIpIHsKLSAgQ2hlY2tfVHlwZShzdHIsIFRfU1RSSU5HKTsKLSAg
cmV0dXJuIFJTVFJJTkdfUFRSKHN0cik7Ci19Ci0KLXN0YXRpYyBWQUxVRSByYl9zdHJfbWF5YmVf
bnVsbChjb25zdCBjaGFyKiBzKSB7Ci0gIGlmIChzID09IE5VTEwpIHsKLSAgICBzID0gIiI7Ci0g
IH0KLSAgcmV0dXJuIHJiX3N0cl9uZXcyKHMpOwotfQotCi1zdGF0aWMgdXBiX2RlZiogY2hlY2tf
bm90ZnJvemVuKGNvbnN0IHVwYl9kZWYqIGRlZikgewotICBpZiAodXBiX2RlZl9pc2Zyb3plbihk
ZWYpKSB7Ci0gICAgcmJfcmFpc2UocmJfZVJ1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAiQXR0
ZW1wdCB0byBtb2RpZnkgYSBmcm96ZW4gZGVzY3JpcHRvci4gT25jZSBkZXNjcmlwdG9ycyBhcmUg
IgotICAgICAgICAgICAgICJhZGRlZCB0byB0aGUgZGVzY3JpcHRvciBwb29sLCB0aGV5IG1heSBu
b3QgYmUgbW9kaWZpZWQuIik7Ci0gIH0KLSAgcmV0dXJuICh1cGJfZGVmKilkZWY7Ci19Ci0KLXN0
YXRpYyB1cGJfbXNnZGVmKiBjaGVja19tc2dfbm90ZnJvemVuKGNvbnN0IHVwYl9tc2dkZWYqIGRl
ZikgewotICByZXR1cm4gdXBiX2Rvd25jYXN0X21zZ2RlZl9tdXRhYmxlKGNoZWNrX25vdGZyb3pl
bigoY29uc3QgdXBiX2RlZiopZGVmKSk7Ci19Ci0KLXN0YXRpYyB1cGJfZmllbGRkZWYqIGNoZWNr
X2ZpZWxkX25vdGZyb3plbihjb25zdCB1cGJfZmllbGRkZWYqIGRlZikgewotICByZXR1cm4gdXBi
X2Rvd25jYXN0X2ZpZWxkZGVmX211dGFibGUoY2hlY2tfbm90ZnJvemVuKChjb25zdCB1cGJfZGVm
KilkZWYpKTsKLX0KLQotc3RhdGljIHVwYl9vbmVvZmRlZiogY2hlY2tfb25lb2Zfbm90ZnJvemVu
KGNvbnN0IHVwYl9vbmVvZmRlZiogZGVmKSB7Ci0gIHJldHVybiAodXBiX29uZW9mZGVmKiljaGVj
a19ub3Rmcm96ZW4oKGNvbnN0IHVwYl9kZWYqKWRlZik7Ci19Ci0KLXN0YXRpYyB1cGJfZW51bWRl
ZiogY2hlY2tfZW51bV9ub3Rmcm96ZW4oY29uc3QgdXBiX2VudW1kZWYqIGRlZikgewotICByZXR1
cm4gKHVwYl9lbnVtZGVmKiljaGVja19ub3Rmcm96ZW4oKGNvbnN0IHVwYl9kZWYqKWRlZik7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEZXNjcmlwdG9yUG9vbC4KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgREVGSU5FX0NMQVNTKG5hbWUsIHN0cmluZ19uYW1l
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFZBTFVFIGMgIyMgbmFtZTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY29uc3Qg
cmJfZGF0YV90eXBlX3QgXyAjIyBuYW1lICMjIF90eXBlID0geyAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIHN0cmluZ19uYW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgeyBuYW1lICMjIF9tYXJrLCBuYW1lICMjIF9mcmVlLCBO
VUxMIH0sICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBuYW1lKiBy
dWJ5X3RvXyAjIyBuYW1lKFZBTFVFIHZhbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgbmFtZSogcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBUeXBlZERhdGFfR2V0X1N0cnVjdCh2YWwsIG5hbWUsICZf
ICMjIG5hbWUgIyMgX3R5cGUsIHJldCk7ICAgIFwKLSAgICAgIHJldHVybiByZXQ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0KLSNkZWZpbmUgREVGSU5FX1NFTEYodHlwZSwgdmFyLCByYl92YXIpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHR5cGUqIHZhciA9IHJ1YnlfdG9fICMjIHR5cGUocmJfdmFy
KQotCi0vLyBHbG9iYWwgc2luZ2xldG9uIERlc2NyaXB0b3JQb29sLiBUaGUgdXNlciBpcyBmcmVl
IHRvIGNyZWF0ZSBvdGhlcnMsIGJ1dCB0aGlzCi0vLyBpcyB1c2VkIGJ5IGdlbmVyYXRlZCBjb2Rl
LgotVkFMVUUgZ2VuZXJhdGVkX3Bvb2w7Ci0KLURFRklORV9DTEFTUyhEZXNjcmlwdG9yUG9vbCwg
Ikdvb2dsZTo6UHJvdG9idWY6OkRlc2NyaXB0b3JQb29sIik7Ci0KLXZvaWQgRGVzY3JpcHRvclBv
b2xfbWFyayh2b2lkKiBfc2VsZikgewotfQotCi12b2lkIERlc2NyaXB0b3JQb29sX2ZyZWUodm9p
ZCogX3NlbGYpIHsKLSAgRGVzY3JpcHRvclBvb2wqIHNlbGYgPSBfc2VsZjsKLSAgdXBiX3N5bXRh
Yl91bnJlZihzZWxmLT5zeW10YWIsICZzZWxmLT5zeW10YWIpOwotICB4ZnJlZShzZWxmKTsKLX0K
LQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIERlc2NyaXB0b3JQb29sLm5ldyA9PiBwb29sCi0g
KgotICogQ3JlYXRlcyBhIG5ldywgZW1wdHksIGRlc2NyaXB0b3IgcG9vbC4KLSAqLwotVkFMVUUg
RGVzY3JpcHRvclBvb2xfYWxsb2MoVkFMVUUga2xhc3MpIHsKLSAgRGVzY3JpcHRvclBvb2wqIHNl
bGYgPSBBTExPQyhEZXNjcmlwdG9yUG9vbCk7Ci0gIHNlbGYtPnN5bXRhYiA9IHVwYl9zeW10YWJf
bmV3KCZzZWxmLT5zeW10YWIpOwotICByZXR1cm4gVHlwZWREYXRhX1dyYXBfU3RydWN0KGtsYXNz
LCAmX0Rlc2NyaXB0b3JQb29sX3R5cGUsIHNlbGYpOwotfQotCi12b2lkIERlc2NyaXB0b3JQb29s
X3JlZ2lzdGVyKFZBTFVFIG1vZHVsZSkgewotICBWQUxVRSBrbGFzcyA9IHJiX2RlZmluZV9jbGFz
c191bmRlcigKLSAgICAgIG1vZHVsZSwgIkRlc2NyaXB0b3JQb29sIiwgcmJfY09iamVjdCk7Ci0g
IHJiX2RlZmluZV9hbGxvY19mdW5jKGtsYXNzLCBEZXNjcmlwdG9yUG9vbF9hbGxvYyk7Ci0gIHJi
X2RlZmluZV9tZXRob2Qoa2xhc3MsICJhZGQiLCBEZXNjcmlwdG9yUG9vbF9hZGQsIDEpOwotICBy
Yl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiYnVpbGQiLCBEZXNjcmlwdG9yUG9vbF9idWlsZCwgMCk7
Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJsb29rdXAiLCBEZXNjcmlwdG9yUG9vbF9sb29r
dXAsIDEpOwotICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChrbGFzcywgImdlbmVyYXRlZF9w
b29sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2xfZ2VuZXJh
dGVkX3Bvb2wsIDApOwotICBjRGVzY3JpcHRvclBvb2wgPSBrbGFzczsKLSAgcmJfZ2NfcmVnaXN0
ZXJfYWRkcmVzcygmY0Rlc2NyaXB0b3JQb29sKTsKLQotICBnZW5lcmF0ZWRfcG9vbCA9IHJiX2Ns
YXNzX25ld19pbnN0YW5jZSgwLCBOVUxMLCBrbGFzcyk7Ci0gIHJiX2djX3JlZ2lzdGVyX2FkZHJl
c3MoJmdlbmVyYXRlZF9wb29sKTsKLX0KLQotc3RhdGljIHZvaWQgYWRkX2Rlc2NyaXB0b3JfdG9f
cG9vbChEZXNjcmlwdG9yUG9vbCogc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBDSEVDS19VUEIoCi0gICAgICB1cGJf
c3ltdGFiX2FkZChzZWxmLT5zeW10YWIsICh1cGJfZGVmKiopJmRlc2NyaXB0b3ItPm1zZ2RlZiwg
MSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZzdGF0dXMpLAotICAgICAgIkFkZGluZyBE
ZXNjcmlwdG9yIHRvIERlc2NyaXB0b3JQb29sIGZhaWxlZCIpOwotfQotCi1zdGF0aWMgdm9pZCBh
ZGRfZW51bWRlc2NfdG9fcG9vbChEZXNjcmlwdG9yUG9vbCogc2VsZiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVudW1EZXNjcmlwdG9yKiBlbnVtZGVzYykgewotICBDSEVDS19V
UEIoCi0gICAgICB1cGJfc3ltdGFiX2FkZChzZWxmLT5zeW10YWIsICh1cGJfZGVmKiopJmVudW1k
ZXNjLT5lbnVtZGVmLCAxLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJnN0YXR1cyksCi0g
ICAgICAiQWRkaW5nIEVudW1EZXNjcmlwdG9yIHRvIERlc2NyaXB0b3JQb29sIGZhaWxlZCIpOwot
fQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRGVzY3JpcHRvclBvb2wuYWRkKGRlc2NyaXB0
b3IpCi0gKgotICogQWRkcyB0aGUgZ2l2ZW4gRGVzY3JpcHRvciBvciBFbnVtRGVzY3JpcHRvciB0
byB0aGlzIHBvb2wuIEFsbCByZWZlcmVuY2VzIHRvCi0gKiBvdGhlciB0eXBlcyBpbiBhIERlc2Ny
aXB0b3IncyBmaWVsZHMgbXVzdCBiZSByZXNvbHZhYmxlIHdpdGhpbiB0aGlzIHBvb2wgb3IKLSAq
IGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC4KLSAqLwotVkFMVUUgRGVzY3JpcHRvclBvb2xf
YWRkKFZBTFVFIF9zZWxmLCBWQUxVRSBkZWYpIHsKLSAgREVGSU5FX1NFTEYoRGVzY3JpcHRvclBv
b2wsIHNlbGYsIF9zZWxmKTsKLSAgVkFMVUUgZGVmX2tsYXNzID0gcmJfb2JqX2NsYXNzKGRlZik7
Ci0gIGlmIChkZWZfa2xhc3MgPT0gY0Rlc2NyaXB0b3IpIHsKLSAgICBhZGRfZGVzY3JpcHRvcl90
b19wb29sKHNlbGYsIHJ1YnlfdG9fRGVzY3JpcHRvcihkZWYpKTsKLSAgfSBlbHNlIGlmIChkZWZf
a2xhc3MgPT0gY0VudW1EZXNjcmlwdG9yKSB7Ci0gICAgYWRkX2VudW1kZXNjX3RvX3Bvb2woc2Vs
ZiwgcnVieV90b19FbnVtRGVzY3JpcHRvcihkZWYpKTsKLSAgfSBlbHNlIHsKLSAgICByYl9yYWlz
ZShyYl9lQXJnRXJyb3IsCi0gICAgICAgICAgICAgIlNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEg
RGVzY3JpcHRvciBvciBFbnVtRGVzY3JpcHRvci4iKTsKLSAgfQotICByZXR1cm4gUW5pbDsKLX0K
LQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIERlc2NyaXB0b3JQb29sLmJ1aWxkKCZibG9jaykK
LSAqCi0gKiBJbnZva2VzIHRoZSBibG9jayB3aXRoIGEgQnVpbGRlciBpbnN0YW5jZSBhcyBzZWxm
LiBBbGwgbWVzc2FnZSBhbmQgZW51bSB0eXBlcwotICogYWRkZWQgd2l0aGluIHRoZSBibG9jayBh
cmUgY29tbWl0dGVkIHRvIHRoZSBwb29sIGF0b21pY2FsbHksIGFuZCBtYXkgcmVmZXIKLSAqIChj
bylyZWN1cnNpdmVseSB0byBlYWNoIG90aGVyLiBUaGUgdXNlciBzaG91bGQgY2FsbCBCdWlsZGVy
I2FkZF9tZXNzYWdlIGFuZAotICogQnVpbGRlciNhZGRfZW51bSB3aXRoaW4gdGhlIGJsb2NrIGFz
IGFwcHJvcHJpYXRlLiAgVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQsCi0gKiBpZGlvbWF0aWMgd2F5
IHRvIGRlZmluZSBuZXcgbWVzc2FnZSBhbmQgZW51bSB0eXBlcy4KLSAqLwotVkFMVUUgRGVzY3Jp
cHRvclBvb2xfYnVpbGQoVkFMVUUgX3NlbGYpIHsKLSAgVkFMVUUgY3R4ID0gcmJfY2xhc3NfbmV3
X2luc3RhbmNlKDAsIE5VTEwsIGNCdWlsZGVyKTsKLSAgVkFMVUUgYmxvY2sgPSByYl9ibG9ja19w
cm9jKCk7Ci0gIHJiX2Z1bmNhbGxfd2l0aF9ibG9jayhjdHgsIHJiX2ludGVybigiaW5zdGFuY2Vf
ZXZhbCIpLCAwLCBOVUxMLCBibG9jayk7Ci0gIHJiX2Z1bmNhbGwoY3R4LCByYl9pbnRlcm4oImZp
bmFsaXplX3RvX3Bvb2wiKSwgMSwgX3NlbGYpOwotICByZXR1cm4gUW5pbDsKLX0KLQotLyoKLSAq
IGNhbGwtc2VxOgotICogICAgIERlc2NyaXB0b3JQb29sLmxvb2t1cChuYW1lKSA9PiBkZXNjcmlw
dG9yCi0gKgotICogRmluZHMgYSBEZXNjcmlwdG9yIG9yIEVudW1EZXNjcmlwdG9yIGJ5IG5hbWUg
YW5kIHJldHVybnMgaXQsIG9yIG5pbCBpZiBub25lCi0gKiBleGlzdHMgd2l0aCB0aGUgZ2l2ZW4g
bmFtZS4KLSAqLwotVkFMVUUgRGVzY3JpcHRvclBvb2xfbG9va3VwKFZBTFVFIF9zZWxmLCBWQUxV
RSBuYW1lKSB7Ci0gIERFRklORV9TRUxGKERlc2NyaXB0b3JQb29sLCBzZWxmLCBfc2VsZik7Ci0g
IGNvbnN0IGNoYXIqIG5hbWVfc3RyID0gZ2V0X3N0cihuYW1lKTsKLSAgY29uc3QgdXBiX2RlZiog
ZGVmID0gdXBiX3N5bXRhYl9sb29rdXAoc2VsZi0+c3ltdGFiLCBuYW1lX3N0cik7Ci0gIGlmICgh
ZGVmKSB7Ci0gICAgcmV0dXJuIFFuaWw7Ci0gIH0KLSAgcmV0dXJuIGdldF9kZWZfb2JqKGRlZik7
Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBEZXNjcmlwdG9yUG9vbC5nZW5lcmF0ZWRf
cG9vbCA9PiBkZXNjcmlwdG9yX3Bvb2wKLSAqCi0gKiBDbGFzcyBtZXRob2QgdGhhdCByZXR1cm5z
IHRoZSBnbG9iYWwgRGVzY3JpcHRvclBvb2wuIFRoaXMgaXMgYSBzaW5nbGV0b24gaW50bwotICog
d2hpY2ggZ2VuZXJhdGVkLWNvZGUgbWVzc2FnZSBhbmQgZW51bSB0eXBlcyBhcmUgcmVnaXN0ZXJl
ZC4gVGhlIHVzZXIgbWF5IGFsc28KLSAqIHJlZ2lzdGVyIHR5cGVzIGluIHRoaXMgcG9vbCBmb3Ig
Y29udmVuaWVuY2Ugc28gdGhhdCB0aGV5IGRvIG5vdCBoYXZlIHRvIGhvbGQKLSAqIGEgcmVmZXJl
bmNlIHRvIGEgcHJpdmF0ZSBwb29sIGluc3RhbmNlLgotICovCi1WQUxVRSBEZXNjcmlwdG9yUG9v
bF9nZW5lcmF0ZWRfcG9vbChWQUxVRSBfc2VsZikgewotICByZXR1cm4gZ2VuZXJhdGVkX3Bvb2w7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEZXNjcmlwdG9yLgotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotREVGSU5FX0NMQVNTKERlc2NyaXB0b3IsICJHb29nbGU6OlByb3Rv
YnVmOjpEZXNjcmlwdG9yIik7Ci0KLXZvaWQgRGVzY3JpcHRvcl9tYXJrKHZvaWQqIF9zZWxmKSB7
Ci0gIERlc2NyaXB0b3IqIHNlbGYgPSBfc2VsZjsKLSAgcmJfZ2NfbWFyayhzZWxmLT5rbGFzcyk7
Ci0gIHJiX2djX21hcmsoc2VsZi0+dHlwZWNsYXNzX3JlZmVyZW5jZXMpOwotfQotCi12b2lkIERl
c2NyaXB0b3JfZnJlZSh2b2lkKiBfc2VsZikgewotICBEZXNjcmlwdG9yKiBzZWxmID0gX3NlbGY7
Ci0gIHVwYl9tc2dkZWZfdW5yZWYoc2VsZi0+bXNnZGVmLCAmc2VsZi0+bXNnZGVmKTsKLSAgaWYg
KHNlbGYtPmxheW91dCkgewotICAgIGZyZWVfbGF5b3V0KHNlbGYtPmxheW91dCk7Ci0gIH0KLSAg
aWYgKHNlbGYtPmZpbGxfaGFuZGxlcnMpIHsKLSAgICB1cGJfaGFuZGxlcnNfdW5yZWYoc2VsZi0+
ZmlsbF9oYW5kbGVycywgJnNlbGYtPmZpbGxfaGFuZGxlcnMpOwotICB9Ci0gIGlmIChzZWxmLT5m
aWxsX21ldGhvZCkgewotICAgIHVwYl9wYmRlY29kZXJtZXRob2RfdW5yZWYoc2VsZi0+ZmlsbF9t
ZXRob2QsICZzZWxmLT5maWxsX21ldGhvZCk7Ci0gIH0KLSAgaWYgKHNlbGYtPmpzb25fZmlsbF9t
ZXRob2QpIHsKLSAgICB1cGJfanNvbl9wYXJzZXJtZXRob2RfdW5yZWYoc2VsZi0+anNvbl9maWxs
X21ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlbGYtPmpzb25fZmls
bF9tZXRob2QpOwotICB9Ci0gIGlmIChzZWxmLT5wYl9zZXJpYWxpemVfaGFuZGxlcnMpIHsKLSAg
ICB1cGJfaGFuZGxlcnNfdW5yZWYoc2VsZi0+cGJfc2VyaWFsaXplX2hhbmRsZXJzLAotICAgICAg
ICAgICAgICAgICAgICAgICAmc2VsZi0+cGJfc2VyaWFsaXplX2hhbmRsZXJzKTsKLSAgfQotICBp
ZiAoc2VsZi0+anNvbl9zZXJpYWxpemVfaGFuZGxlcnMpIHsKLSAgICB1cGJfaGFuZGxlcnNfdW5y
ZWYoc2VsZi0+anNvbl9zZXJpYWxpemVfaGFuZGxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICZzZWxmLT5qc29uX3NlcmlhbGl6ZV9oYW5kbGVycyk7Ci0gIH0KLSAgaWYgKHNlbGYtPmpzb25f
c2VyaWFsaXplX2hhbmRsZXJzX3ByZXNlcnZlKSB7Ci0gICAgdXBiX2hhbmRsZXJzX3VucmVmKHNl
bGYtPmpzb25fc2VyaWFsaXplX2hhbmRsZXJzX3ByZXNlcnZlLAotICAgICAgICAgICAgICAgICAg
ICAgICAmc2VsZi0+anNvbl9zZXJpYWxpemVfaGFuZGxlcnNfcHJlc2VydmUpOwotICB9Ci0gIHhm
cmVlKHNlbGYpOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRGVzY3JpcHRvci5uZXcg
PT4gZGVzY3JpcHRvcgotICoKLSAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5LCBtZXNzYWdlIHR5cGUg
ZGVzY3JpcHRvci4gQXQgYSBtaW5pbXVtLCBpdHMgbmFtZSBtdXN0IGJlCi0gKiBzZXQgYmVmb3Jl
IGl0IGlzIGFkZGVkIHRvIGEgcG9vbC4gSXQgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRlIG1lc3Nh
Z2VzIHVudGlsCi0gKiBpdCBpcyBhZGRlZCB0byBhIHBvb2wsIGFmdGVyIHdoaWNoIGl0IGJlY29t
ZXMgaW1tdXRhYmxlIChhcyBwYXJ0IG9mIGEKLSAqIGZpbmFsaXphdGlvbiBwcm9jZXNzKS4KLSAq
LwotVkFMVUUgRGVzY3JpcHRvcl9hbGxvYyhWQUxVRSBrbGFzcykgewotICBEZXNjcmlwdG9yKiBz
ZWxmID0gQUxMT0MoRGVzY3JpcHRvcik7Ci0gIFZBTFVFIHJldCA9IFR5cGVkRGF0YV9XcmFwX1N0
cnVjdChrbGFzcywgJl9EZXNjcmlwdG9yX3R5cGUsIHNlbGYpOwotICBzZWxmLT5tc2dkZWYgPSB1
cGJfbXNnZGVmX25ldygmc2VsZi0+bXNnZGVmKTsKLSAgc2VsZi0+a2xhc3MgPSBRbmlsOwotICBz
ZWxmLT5sYXlvdXQgPSBOVUxMOwotICBzZWxmLT5maWxsX2hhbmRsZXJzID0gTlVMTDsKLSAgc2Vs
Zi0+ZmlsbF9tZXRob2QgPSBOVUxMOwotICBzZWxmLT5qc29uX2ZpbGxfbWV0aG9kID0gTlVMTDsK
LSAgc2VsZi0+cGJfc2VyaWFsaXplX2hhbmRsZXJzID0gTlVMTDsKLSAgc2VsZi0+anNvbl9zZXJp
YWxpemVfaGFuZGxlcnMgPSBOVUxMOwotICBzZWxmLT5qc29uX3NlcmlhbGl6ZV9oYW5kbGVyc19w
cmVzZXJ2ZSA9IE5VTEw7Ci0gIHNlbGYtPnR5cGVjbGFzc19yZWZlcmVuY2VzID0gcmJfYXJ5X25l
dygpOwotICByZXR1cm4gcmV0OwotfQotCi12b2lkIERlc2NyaXB0b3JfcmVnaXN0ZXIoVkFMVUUg
bW9kdWxlKSB7Ci0gIFZBTFVFIGtsYXNzID0gcmJfZGVmaW5lX2NsYXNzX3VuZGVyKAotICAgICAg
bW9kdWxlLCAiRGVzY3JpcHRvciIsIHJiX2NPYmplY3QpOwotICByYl9kZWZpbmVfYWxsb2NfZnVu
YyhrbGFzcywgRGVzY3JpcHRvcl9hbGxvYyk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJl
YWNoIiwgRGVzY3JpcHRvcl9lYWNoLCAwKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgImxv
b2t1cCIsIERlc2NyaXB0b3JfbG9va3VwLCAxKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywg
ImFkZF9maWVsZCIsIERlc2NyaXB0b3JfYWRkX2ZpZWxkLCAxKTsKLSAgcmJfZGVmaW5lX21ldGhv
ZChrbGFzcywgImFkZF9vbmVvZiIsIERlc2NyaXB0b3JfYWRkX29uZW9mLCAxKTsKLSAgcmJfZGVm
aW5lX21ldGhvZChrbGFzcywgImVhY2hfb25lb2YiLCBEZXNjcmlwdG9yX2VhY2hfb25lb2YsIDAp
OwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAibG9va3VwX29uZW9mIiwgRGVzY3JpcHRvcl9s
b29rdXBfb25lb2YsIDEpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAibXNnY2xhc3MiLCBE
ZXNjcmlwdG9yX21zZ2NsYXNzLCAwKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgIm5hbWUi
LCBEZXNjcmlwdG9yX25hbWUsIDApOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAibmFtZT0i
LCBEZXNjcmlwdG9yX25hbWVfc2V0LCAxKTsKLSAgcmJfaW5jbHVkZV9tb2R1bGUoa2xhc3MsIHJi
X21FbnVtZXJhYmxlKTsKLSAgY0Rlc2NyaXB0b3IgPSBrbGFzczsKLSAgcmJfZ2NfcmVnaXN0ZXJf
YWRkcmVzcygmY0Rlc2NyaXB0b3IpOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRGVz
Y3JpcHRvci5uYW1lID0+IG5hbWUKLSAqCi0gKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgbWVz
c2FnZSB0eXBlIGFzIGEgZnVsbHktcXVhbGZpZWQgc3RyaW5nIChlLmcuLAotICogTXkuUGFja2Fn
ZS5NZXNzYWdlVHlwZSkuCi0gKi8KLVZBTFVFIERlc2NyaXB0b3JfbmFtZShWQUxVRSBfc2VsZikg
ewotICBERUZJTkVfU0VMRihEZXNjcmlwdG9yLCBzZWxmLCBfc2VsZik7Ci0gIHJldHVybiByYl9z
dHJfbWF5YmVfbnVsbCh1cGJfbXNnZGVmX2Z1bGxuYW1lKHNlbGYtPm1zZ2RlZikpOwotfQotCi0v
KgotICogY2FsbC1zZXE6Ci0gKiAgICBEZXNjcmlwdG9yLm5hbWUgPSBuYW1lCi0gKgotICogQXNz
aWducyBhIG5hbWUgdG8gdGhpcyBtZXNzYWdlIHR5cGUuIFRoZSBkZXNjcmlwdG9yIG11c3Qgbm90
IGhhdmUgYmVlbiBhZGRlZAotICogdG8gYSBwb29sIHlldC4KLSAqLwotVkFMVUUgRGVzY3JpcHRv
cl9uYW1lX3NldChWQUxVRSBfc2VsZiwgVkFMVUUgc3RyKSB7Ci0gIERFRklORV9TRUxGKERlc2Ny
aXB0b3IsIHNlbGYsIF9zZWxmKTsKLSAgdXBiX21zZ2RlZiogbXV0X2RlZiA9IGNoZWNrX21zZ19u
b3Rmcm96ZW4oc2VsZi0+bXNnZGVmKTsKLSAgY29uc3QgY2hhciogbmFtZSA9IGdldF9zdHIoc3Ry
KTsKLSAgQ0hFQ0tfVVBCKAotICAgICAgdXBiX21zZ2RlZl9zZXRmdWxsbmFtZShtdXRfZGVmLCBu
YW1lLCAmc3RhdHVzKSwKLSAgICAgICJFcnJvciBzZXR0aW5nIERlc2NyaXB0b3IgbmFtZSIpOwot
ICByZXR1cm4gUW5pbDsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIERlc2NyaXB0b3Iu
ZWFjaCgmYmxvY2spCi0gKgotICogSXRlcmF0ZXMgb3ZlciBmaWVsZHMgaW4gdGhpcyBtZXNzYWdl
IHR5cGUsIHlpZWxkaW5nIHRvIHRoZSBibG9jayBvbiBlYWNoIG9uZS4KLSAqLwotVkFMVUUgRGVz
Y3JpcHRvcl9lYWNoKFZBTFVFIF9zZWxmKSB7Ci0gIERFRklORV9TRUxGKERlc2NyaXB0b3IsIHNl
bGYsIF9zZWxmKTsKLQotICB1cGJfbXNnX2ZpZWxkX2l0ZXIgaXQ7Ci0gIGZvciAodXBiX21zZ19m
aWVsZF9iZWdpbigmaXQsIHNlbGYtPm1zZ2RlZik7Ci0gICAgICAgIXVwYl9tc2dfZmllbGRfZG9u
ZSgmaXQpOwotICAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaXQpKSB7Ci0gICAgY29uc3QgdXBi
X2ZpZWxkZGVmKiBmaWVsZCA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaXQpOwotICAgIFZBTFVFIG9i
aiA9IGdldF9kZWZfb2JqKGZpZWxkKTsKLSAgICByYl95aWVsZChvYmopOwotICB9Ci0gIHJldHVy
biBRbmlsOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRGVzY3JpcHRvci5sb29rdXAo
bmFtZSkgPT4gRmllbGREZXNjcmlwdG9yCi0gKgotICogUmV0dXJucyB0aGUgZmllbGQgZGVzY3Jp
cHRvciBmb3IgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUsIGlmIHByZXNlbnQsCi0gKiBv
ciBuaWwgaWYgbm9uZS4KLSAqLwotVkFMVUUgRGVzY3JpcHRvcl9sb29rdXAoVkFMVUUgX3NlbGYs
IFZBTFVFIG5hbWUpIHsKLSAgREVGSU5FX1NFTEYoRGVzY3JpcHRvciwgc2VsZiwgX3NlbGYpOwot
ICBjb25zdCBjaGFyKiBzID0gZ2V0X3N0cihuYW1lKTsKLSAgY29uc3QgdXBiX2ZpZWxkZGVmKiBm
aWVsZCA9IHVwYl9tc2dkZWZfbnRvZnooc2VsZi0+bXNnZGVmLCBzKTsKLSAgaWYgKGZpZWxkID09
IE5VTEwpIHsKLSAgICByZXR1cm4gUW5pbDsKLSAgfQotICByZXR1cm4gZ2V0X2RlZl9vYmooZmll
bGQpOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRGVzY3JpcHRvci5hZGRfZmllbGQo
ZmllbGQpID0+IG5pbAotICoKLSAqIEFkZHMgdGhlIGdpdmVuIEZpZWxkRGVzY3JpcHRvciB0byB0
aGlzIG1lc3NhZ2UgdHlwZS4gVGhpcyBkZXNjcmlwdG9yIG11c3Qgbm90Ci0gKiBoYXZlIGJlZW4g
YWRkZWQgdG8gYSBwb29sIHlldC4gUmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiBhIGZpZWxkIHdpdGgg
dGhlIHNhbWUKLSAqIG5hbWUgb3IgbnVtYmVyIGFscmVhZHkgZXhpc3RzLiBTdWItdHlwZSByZWZl
cmVuY2VzIChlLmcuIGZvciBmaWVsZHMgb2YgdHlwZQotICogbWVzc2FnZSkgYXJlIG5vdCByZXNv
bHZlZCBhdCB0aGlzIHBvaW50LgotICovCi1WQUxVRSBEZXNjcmlwdG9yX2FkZF9maWVsZChWQUxV
RSBfc2VsZiwgVkFMVUUgb2JqKSB7Ci0gIERFRklORV9TRUxGKERlc2NyaXB0b3IsIHNlbGYsIF9z
ZWxmKTsKLSAgdXBiX21zZ2RlZiogbXV0X2RlZiA9IGNoZWNrX21zZ19ub3Rmcm96ZW4oc2VsZi0+
bXNnZGVmKTsKLSAgRmllbGREZXNjcmlwdG9yKiBkZWYgPSBydWJ5X3RvX0ZpZWxkRGVzY3JpcHRv
cihvYmopOwotICB1cGJfZmllbGRkZWYqIG11dF9maWVsZF9kZWYgPSBjaGVja19maWVsZF9ub3Rm
cm96ZW4oZGVmLT5maWVsZGRlZik7Ci0gIENIRUNLX1VQQigKLSAgICAgIHVwYl9tc2dkZWZfYWRk
ZmllbGQobXV0X2RlZiwgbXV0X2ZpZWxkX2RlZiwgTlVMTCwgJnN0YXR1cyksCi0gICAgICAiQWRk
aW5nIGZpZWxkIHRvIERlc2NyaXB0b3IgZmFpbGVkIik7Ci0gIGFkZF9kZWZfb2JqKGRlZi0+Zmll
bGRkZWYsIG9iaik7Ci0gIHJldHVybiBRbmlsOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAg
ICAgRGVzY3JpcHRvci5hZGRfb25lb2Yob25lb2YpID0+IG5pbAotICoKLSAqIEFkZHMgdGhlIGdp
dmVuIE9uZW9mRGVzY3JpcHRvciB0byB0aGlzIG1lc3NhZ2UgdHlwZS4gVGhpcyBkZXNjcmlwdG9y
IG11c3Qgbm90Ci0gKiBoYXZlIGJlZW4gYWRkZWQgdG8gYSBwb29sIHlldC4gUmFpc2VzIGFuIGV4
Y2VwdGlvbiBpZiBhIG9uZW9mIHdpdGggdGhlIHNhbWUKLSAqIG5hbWUgYWxyZWFkeSBleGlzdHMs
IG9yIGlmIGFueSBvZiB0aGUgb25lb2YncyBmaWVsZHMnIG5hbWVzIG9yIG51bWJlcnMKLSAqIGNv
bmZsaWN0IHdpdGggYW4gZXhpc3RpbmcgZmllbGQgaW4gdGhpcyBtZXNzYWdlIHR5cGUuIEFsbCBm
aWVsZHMgaW4gdGhlIG9uZW9mCi0gKiBhcmUgYWRkZWQgdG8gdGhlIG1lc3NhZ2UgZGVzY3JpcHRv
ci4gU3ViLXR5cGUgcmVmZXJlbmNlcyAoZS5nLiBmb3IgZmllbGRzIG9mCi0gKiB0eXBlIG1lc3Nh
Z2UpIGFyZSBub3QgcmVzb2x2ZWQgYXQgdGhpcyBwb2ludC4KLSAqLwotVkFMVUUgRGVzY3JpcHRv
cl9hZGRfb25lb2YoVkFMVUUgX3NlbGYsIFZBTFVFIG9iaikgewotICBERUZJTkVfU0VMRihEZXNj
cmlwdG9yLCBzZWxmLCBfc2VsZik7Ci0gIHVwYl9tc2dkZWYqIG11dF9kZWYgPSBjaGVja19tc2df
bm90ZnJvemVuKHNlbGYtPm1zZ2RlZik7Ci0gIE9uZW9mRGVzY3JpcHRvciogZGVmID0gcnVieV90
b19PbmVvZkRlc2NyaXB0b3Iob2JqKTsKLSAgdXBiX29uZW9mZGVmKiBtdXRfb25lb2ZfZGVmID0g
Y2hlY2tfb25lb2Zfbm90ZnJvemVuKGRlZi0+b25lb2ZkZWYpOwotICBDSEVDS19VUEIoCi0gICAg
ICB1cGJfbXNnZGVmX2FkZG9uZW9mKG11dF9kZWYsIG11dF9vbmVvZl9kZWYsIE5VTEwsICZzdGF0
dXMpLAotICAgICAgIkFkZGluZyBvbmVvZiB0byBEZXNjcmlwdG9yIGZhaWxlZCIpOwotICBhZGRf
ZGVmX29iaihkZWYtPm9uZW9mZGVmLCBvYmopOwotICByZXR1cm4gUW5pbDsKLX0KLQotLyoKLSAq
IGNhbGwtc2VxOgotICogICAgIERlc2NyaXB0b3IuZWFjaF9vbmVvZigmYmxvY2spID0+IG5pbAot
ICoKLSAqIEludm9rZXMgdGhlIGdpdmVuIGJsb2NrIGZvciBlYWNoIG9uZW9mIGluIHRoaXMgbWVz
c2FnZSB0eXBlLCBwYXNzaW5nIHRoZQotICogY29ycmVzcG9uZGluZyBPbmVvZkRlc2NyaXB0b3Iu
Ci0gKi8KLVZBTFVFIERlc2NyaXB0b3JfZWFjaF9vbmVvZihWQUxVRSBfc2VsZikgewotICBERUZJ
TkVfU0VMRihEZXNjcmlwdG9yLCBzZWxmLCBfc2VsZik7Ci0KLSAgdXBiX21zZ19vbmVvZl9pdGVy
IGl0OwotICBmb3IgKHVwYl9tc2dfb25lb2ZfYmVnaW4oJml0LCBzZWxmLT5tc2dkZWYpOwotICAg
ICAgICF1cGJfbXNnX29uZW9mX2RvbmUoJml0KTsKLSAgICAgICB1cGJfbXNnX29uZW9mX25leHQo
Jml0KSkgewotICAgIGNvbnN0IHVwYl9vbmVvZmRlZiogb25lb2YgPSB1cGJfbXNnX2l0ZXJfb25l
b2YoJml0KTsKLSAgICBWQUxVRSBvYmogPSBnZXRfZGVmX29iaihvbmVvZik7Ci0gICAgcmJfeWll
bGQob2JqKTsKLSAgfQotICByZXR1cm4gUW5pbDsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICog
ICAgIERlc2NyaXB0b3IubG9va3VwX29uZW9mKG5hbWUpID0+IE9uZW9mRGVzY3JpcHRvcgotICoK
LSAqIFJldHVybnMgdGhlIG9uZW9mIGRlc2NyaXB0b3IgZm9yIHRoZSBvbmVvZiB3aXRoIHRoZSBn
aXZlbiBuYW1lLCBpZiBwcmVzZW50LAotICogb3IgbmlsIGlmIG5vbmUuCi0gKi8KLVZBTFVFIERl
c2NyaXB0b3JfbG9va3VwX29uZW9mKFZBTFVFIF9zZWxmLCBWQUxVRSBuYW1lKSB7Ci0gIERFRklO
RV9TRUxGKERlc2NyaXB0b3IsIHNlbGYsIF9zZWxmKTsKLSAgY29uc3QgY2hhciogcyA9IGdldF9z
dHIobmFtZSk7Ci0gIGNvbnN0IHVwYl9vbmVvZmRlZiogb25lb2YgPSB1cGJfbXNnZGVmX250b296
KHNlbGYtPm1zZ2RlZiwgcyk7Ci0gIGlmIChvbmVvZiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIFFu
aWw7Ci0gIH0KLSAgcmV0dXJuIGdldF9kZWZfb2JqKG9uZW9mKTsKLX0KLQotLyoKLSAqIGNhbGwt
c2VxOgotICogICAgIERlc2NyaXB0b3IubXNnY2xhc3MgPT4gbWVzc2FnZV9rbGFzcwotICoKLSAq
IFJldHVybnMgdGhlIFJ1YnkgY2xhc3MgY3JlYXRlZCBmb3IgdGhpcyBtZXNzYWdlIHR5cGUuIFZh
bGlkIG9ubHkgb25jZSB0aGUKLSAqIG1lc3NhZ2UgdHlwZSBoYXMgYmVlbiBhZGRlZCB0byBhIHBv
b2wuCi0gKi8KLVZBTFVFIERlc2NyaXB0b3JfbXNnY2xhc3MoVkFMVUUgX3NlbGYpIHsKLSAgREVG
SU5FX1NFTEYoRGVzY3JpcHRvciwgc2VsZiwgX3NlbGYpOwotICBpZiAoIXVwYl9kZWZfaXNmcm96
ZW4oKGNvbnN0IHVwYl9kZWYqKXNlbGYtPm1zZ2RlZikpIHsKLSAgICByYl9yYWlzZShyYl9lUnVu
dGltZUVycm9yLAotICAgICAgICAgICAgICJDYW5ub3QgZmV0Y2ggbWVzc2FnZSBjbGFzcyBmcm9t
IGEgRGVzY3JpcHRvciBub3QgeWV0IGluIGEgcG9vbC4iKTsKLSAgfQotICBpZiAoc2VsZi0+a2xh
c3MgPT0gUW5pbCkgewotICAgIHNlbGYtPmtsYXNzID0gYnVpbGRfY2xhc3NfZnJvbV9kZXNjcmlw
dG9yKHNlbGYpOwotICB9Ci0gIHJldHVybiBzZWxmLT5rbGFzczsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vIEZpZWxkRGVzY3JpcHRvci4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLURFRklORV9DTEFTUyhGaWVsZERlc2NyaXB0b3IsICJHb29nbGU6OlByb3RvYnVmOjpGaWVs
ZERlc2NyaXB0b3IiKTsKLQotdm9pZCBGaWVsZERlc2NyaXB0b3JfbWFyayh2b2lkKiBfc2VsZikg
ewotfQotCi12b2lkIEZpZWxkRGVzY3JpcHRvcl9mcmVlKHZvaWQqIF9zZWxmKSB7Ci0gIEZpZWxk
RGVzY3JpcHRvciogc2VsZiA9IF9zZWxmOwotICB1cGJfZmllbGRkZWZfdW5yZWYoc2VsZi0+Zmll
bGRkZWYsICZzZWxmLT5maWVsZGRlZik7Ci0gIHhmcmVlKHNlbGYpOwotfQotCi0vKgotICogY2Fs
bC1zZXE6Ci0gKiAgICAgRmllbGREZXNjcmlwdG9yLm5ldyA9PiBmaWVsZAotICoKLSAqIFJldHVy
bnMgYSBuZXcgZmllbGQgZGVzY3JpcHRvci4gSXRzIG5hbWUsIHR5cGUsIGV0Yy4gbXVzdCBiZSBz
ZXQgYmVmb3JlIGl0IGlzCi0gKiBhZGRlZCB0byBhIG1lc3NhZ2UgdHlwZS4KLSAqLwotVkFMVUUg
RmllbGREZXNjcmlwdG9yX2FsbG9jKFZBTFVFIGtsYXNzKSB7Ci0gIEZpZWxkRGVzY3JpcHRvciog
c2VsZiA9IEFMTE9DKEZpZWxkRGVzY3JpcHRvcik7Ci0gIFZBTFVFIHJldCA9IFR5cGVkRGF0YV9X
cmFwX1N0cnVjdChrbGFzcywgJl9GaWVsZERlc2NyaXB0b3JfdHlwZSwgc2VsZik7Ci0gIHVwYl9m
aWVsZGRlZiogZmllbGRkZWYgPSB1cGJfZmllbGRkZWZfbmV3KCZzZWxmLT5maWVsZGRlZik7Ci0g
IHVwYl9maWVsZGRlZl9zZXRwYWNrZWQoZmllbGRkZWYsIGZhbHNlKTsKLSAgc2VsZi0+ZmllbGRk
ZWYgPSBmaWVsZGRlZjsKLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBGaWVsZERlc2NyaXB0b3Jf
cmVnaXN0ZXIoVkFMVUUgbW9kdWxlKSB7Ci0gIFZBTFVFIGtsYXNzID0gcmJfZGVmaW5lX2NsYXNz
X3VuZGVyKAotICAgICAgbW9kdWxlLCAiRmllbGREZXNjcmlwdG9yIiwgcmJfY09iamVjdCk7Ci0g
IHJiX2RlZmluZV9hbGxvY19mdW5jKGtsYXNzLCBGaWVsZERlc2NyaXB0b3JfYWxsb2MpOwotICBy
Yl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAibmFtZSIsIEZpZWxkRGVzY3JpcHRvcl9uYW1lLCAwKTsK
LSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgIm5hbWU9IiwgRmllbGREZXNjcmlwdG9yX25hbWVf
c2V0LCAxKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgInR5cGUiLCBGaWVsZERlc2NyaXB0
b3JfdHlwZSwgMCk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJ0eXBlPSIsIEZpZWxkRGVz
Y3JpcHRvcl90eXBlX3NldCwgMSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJsYWJlbCIs
IEZpZWxkRGVzY3JpcHRvcl9sYWJlbCwgMCk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJs
YWJlbD0iLCBGaWVsZERlc2NyaXB0b3JfbGFiZWxfc2V0LCAxKTsKLSAgcmJfZGVmaW5lX21ldGhv
ZChrbGFzcywgIm51bWJlciIsIEZpZWxkRGVzY3JpcHRvcl9udW1iZXIsIDApOwotICByYl9kZWZp
bmVfbWV0aG9kKGtsYXNzLCAibnVtYmVyPSIsIEZpZWxkRGVzY3JpcHRvcl9udW1iZXJfc2V0LCAx
KTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgInN1Ym1zZ19uYW1lIiwgRmllbGREZXNjcmlw
dG9yX3N1Ym1zZ19uYW1lLCAwKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgInN1Ym1zZ19u
YW1lPSIsIEZpZWxkRGVzY3JpcHRvcl9zdWJtc2dfbmFtZV9zZXQsIDEpOwotICByYl9kZWZpbmVf
bWV0aG9kKGtsYXNzLCAic3VidHlwZSIsIEZpZWxkRGVzY3JpcHRvcl9zdWJ0eXBlLCAwKTsKLSAg
cmJfZGVmaW5lX21ldGhvZChrbGFzcywgImdldCIsIEZpZWxkRGVzY3JpcHRvcl9nZXQsIDEpOwot
ICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAic2V0IiwgRmllbGREZXNjcmlwdG9yX3NldCwgMik7
Ci0gIGNGaWVsZERlc2NyaXB0b3IgPSBrbGFzczsKLSAgcmJfZ2NfcmVnaXN0ZXJfYWRkcmVzcygm
Y0ZpZWxkRGVzY3JpcHRvcik7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBGaWVsZERl
c2NyaXB0b3IubmFtZSA9PiBuYW1lCi0gKgotICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIGZp
ZWxkLgotICovCi1WQUxVRSBGaWVsZERlc2NyaXB0b3JfbmFtZShWQUxVRSBfc2VsZikgewotICBE
RUZJTkVfU0VMRihGaWVsZERlc2NyaXB0b3IsIHNlbGYsIF9zZWxmKTsKLSAgcmV0dXJuIHJiX3N0
cl9tYXliZV9udWxsKHVwYl9maWVsZGRlZl9uYW1lKHNlbGYtPmZpZWxkZGVmKSk7Ci19Ci0KLS8q
Ci0gKiBjYWxsLXNlcToKLSAqICAgICBGaWVsZERlc2NyaXB0b3IubmFtZSA9IG5hbWUKLSAqCi0g
KiBTZXRzIHRoZSBuYW1lIG9mIHRoaXMgZmllbGQuIENhbm5vdCBiZSBjYWxsZWQgb25jZSB0aGUg
Y29udGFpbmluZyBtZXNzYWdlCi0gKiB0eXBlLCBpZiBhbnksIGlzIGFkZGVkIHRvIGEgcG9vbC4K
LSAqLwotVkFMVUUgRmllbGREZXNjcmlwdG9yX25hbWVfc2V0KFZBTFVFIF9zZWxmLCBWQUxVRSBz
dHIpIHsKLSAgREVGSU5FX1NFTEYoRmllbGREZXNjcmlwdG9yLCBzZWxmLCBfc2VsZik7Ci0gIHVw
Yl9maWVsZGRlZiogbXV0X2RlZiA9IGNoZWNrX2ZpZWxkX25vdGZyb3plbihzZWxmLT5maWVsZGRl
Zik7Ci0gIGNvbnN0IGNoYXIqIG5hbWUgPSBnZXRfc3RyKHN0cik7Ci0gIENIRUNLX1VQQih1cGJf
ZmllbGRkZWZfc2V0bmFtZShtdXRfZGVmLCBuYW1lLCAmc3RhdHVzKSwKLSAgICAgICAgICAgICJF
cnJvciBzZXR0aW5nIEZpZWxkRGVzY3JpcHRvciBuYW1lIik7Ci0gIHJldHVybiBRbmlsOwotfQot
Ci11cGJfZmllbGR0eXBlX3QgcnVieV90b19maWVsZHR5cGUoVkFMVUUgdHlwZSkgewotICBpZiAo
VFlQRSh0eXBlKSAhPSBUX1NZTUJPTCkgewotICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkV4
cGVjdGVkIHN5bWJvbCBmb3IgZmllbGQgdHlwZS4iKTsKLSAgfQotCi0jZGVmaW5lIENPTlZFUlQo
dXBiLCBydWJ5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGlmIChTWU0ySUQodHlwZSkgPT0gcmJfaW50ZXJuKCAjIHJ1YnkgKSkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgcmV0dXJuIFVQQl9UWVBFXyAjIyB1cGI7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotICBDT05WRVJUKEZMT0FULCBmbG9h
dCk7Ci0gIENPTlZFUlQoRE9VQkxFLCBkb3VibGUpOwotICBDT05WRVJUKEJPT0wsIGJvb2wpOwot
ICBDT05WRVJUKFNUUklORywgc3RyaW5nKTsKLSAgQ09OVkVSVChCWVRFUywgYnl0ZXMpOwotICBD
T05WRVJUKE1FU1NBR0UsIG1lc3NhZ2UpOwotICBDT05WRVJUKEVOVU0sIGVudW0pOwotICBDT05W
RVJUKElOVDMyLCBpbnQzMik7Ci0gIENPTlZFUlQoSU5UNjQsIGludDY0KTsKLSAgQ09OVkVSVChV
SU5UMzIsIHVpbnQzMik7Ci0gIENPTlZFUlQoVUlOVDY0LCB1aW50NjQpOwotCi0jdW5kZWYgQ09O
VkVSVAotCi0gIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIlVua25vd24gZmllbGQgdHlwZS4iKTsK
LSAgcmV0dXJuIDA7Ci19Ci0KLVZBTFVFIGZpZWxkdHlwZV90b19ydWJ5KHVwYl9maWVsZHR5cGVf
dCB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotI2RlZmluZSBDT05WRVJUKHVwYiwgcnVieSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgVVBC
X1RZUEVfICMjIHVwYiA6IHJldHVybiBJRDJTWU0ocmJfaW50ZXJuKCAjIHJ1YnkgKSk7Ci0gICAg
Q09OVkVSVChGTE9BVCwgZmxvYXQpOwotICAgIENPTlZFUlQoRE9VQkxFLCBkb3VibGUpOwotICAg
IENPTlZFUlQoQk9PTCwgYm9vbCk7Ci0gICAgQ09OVkVSVChTVFJJTkcsIHN0cmluZyk7Ci0gICAg
Q09OVkVSVChCWVRFUywgYnl0ZXMpOwotICAgIENPTlZFUlQoTUVTU0FHRSwgbWVzc2FnZSk7Ci0g
ICAgQ09OVkVSVChFTlVNLCBlbnVtKTsKLSAgICBDT05WRVJUKElOVDMyLCBpbnQzMik7Ci0gICAg
Q09OVkVSVChJTlQ2NCwgaW50NjQpOwotICAgIENPTlZFUlQoVUlOVDMyLCB1aW50MzIpOwotICAg
IENPTlZFUlQoVUlOVDY0LCB1aW50NjQpOwotI3VuZGVmIENPTlZFUlQKLSAgfQotICByZXR1cm4g
UW5pbDsKLX0KLQotdXBiX2Rlc2NyaXB0b3J0eXBlX3QgcnVieV90b19kZXNjcmlwdG9ydHlwZShW
QUxVRSB0eXBlKSB7Ci0gIGlmIChUWVBFKHR5cGUpICE9IFRfU1lNQk9MKSB7Ci0gICAgcmJfcmFp
c2UocmJfZUFyZ0Vycm9yLCAiRXhwZWN0ZWQgc3ltYm9sIGZvciBmaWVsZCB0eXBlLiIpOwotICB9
Ci0KLSNkZWZpbmUgQ09OVkVSVCh1cGIsIHJ1YnkpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgaWYgKFNZTTJJRCh0eXBlKSA9PSByYl9pbnRlcm4oICMgcnVi
eSApKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gVVBCX0RFU0NSSVBU
T1JfVFlQRV8gIyMgdXBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0g
IENPTlZFUlQoRkxPQVQsIGZsb2F0KTsKLSAgQ09OVkVSVChET1VCTEUsIGRvdWJsZSk7Ci0gIENP
TlZFUlQoQk9PTCwgYm9vbCk7Ci0gIENPTlZFUlQoU1RSSU5HLCBzdHJpbmcpOwotICBDT05WRVJU
KEJZVEVTLCBieXRlcyk7Ci0gIENPTlZFUlQoTUVTU0FHRSwgbWVzc2FnZSk7Ci0gIENPTlZFUlQo
R1JPVVAsIGdyb3VwKTsKLSAgQ09OVkVSVChFTlVNLCBlbnVtKTsKLSAgQ09OVkVSVChJTlQzMiwg
aW50MzIpOwotICBDT05WRVJUKElOVDY0LCBpbnQ2NCk7Ci0gIENPTlZFUlQoVUlOVDMyLCB1aW50
MzIpOwotICBDT05WRVJUKFVJTlQ2NCwgdWludDY0KTsKLSAgQ09OVkVSVChTSU5UMzIsIHNpbnQz
Mik7Ci0gIENPTlZFUlQoU0lOVDY0LCBzaW50NjQpOwotICBDT05WRVJUKEZJWEVEMzIsIGZpeGVk
MzIpOwotICBDT05WRVJUKEZJWEVENjQsIGZpeGVkNjQpOwotICBDT05WRVJUKFNGSVhFRDMyLCBz
Zml4ZWQzMik7Ci0gIENPTlZFUlQoU0ZJWEVENjQsIHNmaXhlZDY0KTsKLQotI3VuZGVmIENPTlZF
UlQKLQotICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJVbmtub3duIGZpZWxkIHR5cGUuIik7Ci0g
IHJldHVybiAwOwotfQotCi1WQUxVRSBkZXNjcmlwdG9ydHlwZV90b19ydWJ5KHVwYl9kZXNjcmlw
dG9ydHlwZV90IHR5cGUpIHsKLSAgc3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIENPTlZFUlQodXBi
LCBydWJ5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Y2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFXyAjIyB1cGIgOiByZXR1cm4gSUQyU1lNKHJiX2ludGVy
biggIyBydWJ5ICkpOwotICAgIENPTlZFUlQoRkxPQVQsIGZsb2F0KTsKLSAgICBDT05WRVJUKERP
VUJMRSwgZG91YmxlKTsKLSAgICBDT05WRVJUKEJPT0wsIGJvb2wpOwotICAgIENPTlZFUlQoU1RS
SU5HLCBzdHJpbmcpOwotICAgIENPTlZFUlQoQllURVMsIGJ5dGVzKTsKLSAgICBDT05WRVJUKE1F
U1NBR0UsIG1lc3NhZ2UpOwotICAgIENPTlZFUlQoR1JPVVAsIGdyb3VwKTsKLSAgICBDT05WRVJU
KEVOVU0sIGVudW0pOwotICAgIENPTlZFUlQoSU5UMzIsIGludDMyKTsKLSAgICBDT05WRVJUKElO
VDY0LCBpbnQ2NCk7Ci0gICAgQ09OVkVSVChVSU5UMzIsIHVpbnQzMik7Ci0gICAgQ09OVkVSVChV
SU5UNjQsIHVpbnQ2NCk7Ci0gICAgQ09OVkVSVChTSU5UMzIsIHNpbnQzMik7Ci0gICAgQ09OVkVS
VChTSU5UNjQsIHNpbnQ2NCk7Ci0gICAgQ09OVkVSVChGSVhFRDMyLCBmaXhlZDMyKTsKLSAgICBD
T05WRVJUKEZJWEVENjQsIGZpeGVkNjQpOwotICAgIENPTlZFUlQoU0ZJWEVEMzIsIHNmaXhlZDMy
KTsKLSAgICBDT05WRVJUKFNGSVhFRDY0LCBzZml4ZWQ2NCk7Ci0jdW5kZWYgQ09OVkVSVAotICB9
Ci0gIHJldHVybiBRbmlsOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRmllbGREZXNj
cmlwdG9yLnR5cGUgPT4gdHlwZQotICoKLSAqIFJldHVybnMgdGhpcyBmaWVsZCdzIHR5cGUsIGFz
IGEgUnVieSBzeW1ib2wsIG9yIG5pbCBpZiBub3QgeWV0IHNldC4KLSAqCi0gKiBWYWxpZCBmaWVs
ZCB0eXBlcyBhcmU6Ci0gKiAgICAgOmludDMyLCA6aW50NjQsIDp1aW50MzIsIDp1aW50NjQsIDpm
bG9hdCwgOmRvdWJsZSwgOmJvb2wsIDpzdHJpbmcsCi0gKiAgICAgOmJ5dGVzLCA6bWVzc2FnZS4K
LSAqLwotVkFMVUUgRmllbGREZXNjcmlwdG9yX3R5cGUoVkFMVUUgX3NlbGYpIHsKLSAgREVGSU5F
X1NFTEYoRmllbGREZXNjcmlwdG9yLCBzZWxmLCBfc2VsZik7Ci0gIGlmICghdXBiX2ZpZWxkZGVm
X3R5cGVpc3NldChzZWxmLT5maWVsZGRlZikpIHsKLSAgICByZXR1cm4gUW5pbDsKLSAgfQotICBy
ZXR1cm4gZGVzY3JpcHRvcnR5cGVfdG9fcnVieSh1cGJfZmllbGRkZWZfZGVzY3JpcHRvcnR5cGUo
c2VsZi0+ZmllbGRkZWYpKTsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIEZpZWxkRGVz
Y3JpcHRvci50eXBlID0gdHlwZQotICoKLSAqIFNldHMgdGhpcyBmaWVsZCdzIHR5cGUuIENhbm5v
dCBiZSBjYWxsZWQgaWYgZmllbGQgaXMgcGFydCBvZiBhIG1lc3NhZ2UgdHlwZQotICogYWxyZWFk
eSBpbiBhIHBvb2wuCi0gKi8KLVZBTFVFIEZpZWxkRGVzY3JpcHRvcl90eXBlX3NldChWQUxVRSBf
c2VsZiwgVkFMVUUgdHlwZSkgewotICBERUZJTkVfU0VMRihGaWVsZERlc2NyaXB0b3IsIHNlbGYs
IF9zZWxmKTsKLSAgdXBiX2ZpZWxkZGVmKiBtdXRfZGVmID0gY2hlY2tfZmllbGRfbm90ZnJvemVu
KHNlbGYtPmZpZWxkZGVmKTsKLSAgdXBiX2ZpZWxkZGVmX3NldGRlc2NyaXB0b3J0eXBlKG11dF9k
ZWYsIHJ1YnlfdG9fZGVzY3JpcHRvcnR5cGUodHlwZSkpOwotICByZXR1cm4gUW5pbDsKLX0KLQot
LyoKLSAqIGNhbGwtc2VxOgotICogICAgIEZpZWxkRGVzY3JpcHRvci5sYWJlbCA9PiBsYWJlbAot
ICoKLSAqIFJldHVybnMgdGhpcyBmaWVsZCdzIGxhYmVsIChpLmUuLCBwbHVyYWxpdHkpLCBhcyBh
IFJ1Ynkgc3ltYm9sLgotICoKLSAqIFZhbGlkIGZpZWxkIGxhYmVscyBhcmU6Ci0gKiAgICAgOm9w
dGlvbmFsLCA6cmVwZWF0ZWQKLSAqLwotVkFMVUUgRmllbGREZXNjcmlwdG9yX2xhYmVsKFZBTFVF
IF9zZWxmKSB7Ci0gIERFRklORV9TRUxGKEZpZWxkRGVzY3JpcHRvciwgc2VsZiwgX3NlbGYpOwot
ICBzd2l0Y2ggKHVwYl9maWVsZGRlZl9sYWJlbChzZWxmLT5maWVsZGRlZikpIHsKLSNkZWZpbmUg
Q09OVkVSVCh1cGIsIHJ1YnkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBjYXNlIFVQQl9MQUJFTF8gIyMgdXBiIDogcmV0dXJuIElEMlNZTShyYl9pbnRl
cm4oICMgcnVieSApKTsKLQotICAgIENPTlZFUlQoT1BUSU9OQUwsIG9wdGlvbmFsKTsKLSAgICBD
T05WRVJUKFJFUVVJUkVELCByZXF1aXJlZCk7Ci0gICAgQ09OVkVSVChSRVBFQVRFRCwgcmVwZWF0
ZWQpOwotCi0jdW5kZWYgQ09OVkVSVAotICB9Ci0KLSAgcmV0dXJuIFFuaWw7Ci19Ci0KLS8qCi0g
KiBjYWxsLXNlcToKLSAqICAgICBGaWVsZERlc2NyaXB0b3IubGFiZWwgPSBsYWJlbAotICoKLSAq
IFNldHMgdGhlIGxhYmVsIG9uIHRoaXMgZmllbGQuIENhbm5vdCBiZSBjYWxsZWQgaWYgZmllbGQg
aXMgcGFydCBvZiBhIG1lc3NhZ2UKLSAqIHR5cGUgYWxyZWFkeSBpbiBhIHBvb2wuCi0gKi8KLVZB
TFVFIEZpZWxkRGVzY3JpcHRvcl9sYWJlbF9zZXQoVkFMVUUgX3NlbGYsIFZBTFVFIGxhYmVsKSB7
Ci0gIERFRklORV9TRUxGKEZpZWxkRGVzY3JpcHRvciwgc2VsZiwgX3NlbGYpOwotICB1cGJfZmll
bGRkZWYqIG11dF9kZWYgPSBjaGVja19maWVsZF9ub3Rmcm96ZW4oc2VsZi0+ZmllbGRkZWYpOwot
ICB1cGJfbGFiZWxfdCB1cGJfbGFiZWwgPSAtMTsKLSAgYm9vbCBjb252ZXJ0ZWQgPSBmYWxzZTsK
LQotICBpZiAoVFlQRShsYWJlbCkgIT0gVF9TWU1CT0wpIHsKLSAgICByYl9yYWlzZShyYl9lQXJn
RXJyb3IsICJFeHBlY3RlZCBzeW1ib2wgZm9yIGZpZWxkIGxhYmVsLiIpOwotICB9Ci0KLSNkZWZp
bmUgQ09OVkVSVCh1cGIsIHJ1YnkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgaWYgKFNZTTJJRChsYWJlbCkgPT0gcmJfaW50ZXJuKCAjIHJ1YnkgKSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1cGJfbGFiZWwgPSBVUEJfTEFCRUxfICMjIHVw
YjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjb252ZXJ0ZWQgPSB0
cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
fQotCi0gIENPTlZFUlQoT1BUSU9OQUwsIG9wdGlvbmFsKTsKLSAgQ09OVkVSVChSRVFVSVJFRCwg
cmVxdWlyZWQpOwotICBDT05WRVJUKFJFUEVBVEVELCByZXBlYXRlZCk7Ci0KLSN1bmRlZiBDT05W
RVJUCi0KLSAgaWYgKCFjb252ZXJ0ZWQpIHsKLSAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJV
bmtub3duIGZpZWxkIGxhYmVsLiIpOwotICB9Ci0KLSAgdXBiX2ZpZWxkZGVmX3NldGxhYmVsKG11
dF9kZWYsIHVwYl9sYWJlbCk7Ci0KLSAgcmV0dXJuIFFuaWw7Ci19Ci0KLS8qCi0gKiBjYWxsLXNl
cToKLSAqICAgICBGaWVsZERlc2NyaXB0b3IubnVtYmVyID0+IG51bWJlcgotICoKLSAqIFJldHVy
bnMgdGhlIHRhZyBudW1iZXIgZm9yIHRoaXMgZmllbGQuCi0gKi8KLVZBTFVFIEZpZWxkRGVzY3Jp
cHRvcl9udW1iZXIoVkFMVUUgX3NlbGYpIHsKLSAgREVGSU5FX1NFTEYoRmllbGREZXNjcmlwdG9y
LCBzZWxmLCBfc2VsZik7Ci0gIHJldHVybiBJTlQyTlVNKHVwYl9maWVsZGRlZl9udW1iZXIoc2Vs
Zi0+ZmllbGRkZWYpKTsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIEZpZWxkRGVzY3Jp
cHRvci5udW1iZXIgPSBudW1iZXIKLSAqCi0gKiBTZXRzIHRoZSB0YWcgbnVtYmVyIGZvciB0aGlz
IGZpZWxkLiBDYW5ub3QgYmUgY2FsbGVkIGlmIGZpZWxkIGlzIHBhcnQgb2YgYQotICogbWVzc2Fn
ZSB0eXBlIGFscmVhZHkgaW4gYSBwb29sLgotICovCi1WQUxVRSBGaWVsZERlc2NyaXB0b3JfbnVt
YmVyX3NldChWQUxVRSBfc2VsZiwgVkFMVUUgbnVtYmVyKSB7Ci0gIERFRklORV9TRUxGKEZpZWxk
RGVzY3JpcHRvciwgc2VsZiwgX3NlbGYpOwotICB1cGJfZmllbGRkZWYqIG11dF9kZWYgPSBjaGVj
a19maWVsZF9ub3Rmcm96ZW4oc2VsZi0+ZmllbGRkZWYpOwotICBDSEVDS19VUEIodXBiX2ZpZWxk
ZGVmX3NldG51bWJlcihtdXRfZGVmLCBOVU0ySU5UKG51bWJlciksICZzdGF0dXMpLAotICAgICAg
ICAgICAgIkVycm9yIHNldHRpbmcgZmllbGQgbnVtYmVyIik7Ci0gIHJldHVybiBRbmlsOwotfQot
Ci0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRmllbGREZXNjcmlwdG9yLnN1Ym1zZ19uYW1lID0+
IHN1Ym1zZ19uYW1lCi0gKgotICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBvciBl
bnVtIHR5cGUgY29ycmVzcG9uZGluZyB0byB0aGlzIGZpZWxkLCBpZgotICogaXQgaXMgYSBtZXNz
YWdlIG9yIGVudW0gZmllbGQgKHJlc3BlY3RpdmVseSksIG9yIG5pbCBvdGhlcndpc2UuIFRoaXMg
dHlwZQotICogbmFtZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUg
cG9vbCB0byB3aGljaCB0aGUgY29udGFpbmluZwotICogbWVzc2FnZSB0eXBlIGlzIGFkZGVkLgot
ICovCi1WQUxVRSBGaWVsZERlc2NyaXB0b3Jfc3VibXNnX25hbWUoVkFMVUUgX3NlbGYpIHsKLSAg
REVGSU5FX1NFTEYoRmllbGREZXNjcmlwdG9yLCBzZWxmLCBfc2VsZik7Ci0gIGlmICghdXBiX2Zp
ZWxkZGVmX2hhc3N1YmRlZihzZWxmLT5maWVsZGRlZikpIHsKLSAgICByZXR1cm4gUW5pbDsKLSAg
fQotICByZXR1cm4gcmJfc3RyX21heWJlX251bGwodXBiX2ZpZWxkZGVmX3N1YmRlZm5hbWUoc2Vs
Zi0+ZmllbGRkZWYpKTsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIEZpZWxkRGVzY3Jp
cHRvci5zdWJtc2dfbmFtZSA9IHN1Ym1zZ19uYW1lCi0gKgotICogU2V0cyB0aGUgbmFtZSBvZiB0
aGUgbWVzc2FnZSBvciBlbnVtIHR5cGUgY29ycmVzcG9uZGluZyB0byB0aGlzIGZpZWxkLCBpZiBp
dAotICogaXMgYSBtZXNzYWdlIG9yIGVudW0gZmllbGQgKHJlc3BlY3RpdmVseSkuIFRoaXMgdHlw
ZSBuYW1lIHdpbGwgYmUgcmVzb2x2ZWQKLSAqIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgcG9v
bCB0byB3aGljaCB0aGUgY29udGFpbmluZyBtZXNzYWdlIHR5cGUgaXMgYWRkZWQuCi0gKiBDYW5u
b3QgYmUgY2FsbGVkIG9uIGZpZWxkIHRoYXQgYXJlIG5vdCBvZiBtZXNzYWdlIG9yIGVudW0gdHlw
ZSwgb3Igb24gZmllbGRzCi0gKiB0aGF0IGFyZSBwYXJ0IG9mIGEgbWVzc2FnZSB0eXBlIGFscmVh
ZHkgYWRkZWQgdG8gYSBwb29sLgotICovCi1WQUxVRSBGaWVsZERlc2NyaXB0b3Jfc3VibXNnX25h
bWVfc2V0KFZBTFVFIF9zZWxmLCBWQUxVRSB2YWx1ZSkgewotICBERUZJTkVfU0VMRihGaWVsZERl
c2NyaXB0b3IsIHNlbGYsIF9zZWxmKTsKLSAgdXBiX2ZpZWxkZGVmKiBtdXRfZGVmID0gY2hlY2tf
ZmllbGRfbm90ZnJvemVuKHNlbGYtPmZpZWxkZGVmKTsKLSAgY29uc3QgY2hhciogc3RyID0gZ2V0
X3N0cih2YWx1ZSk7Ci0gIGlmICghdXBiX2ZpZWxkZGVmX2hhc3N1YmRlZihzZWxmLT5maWVsZGRl
ZikpIHsKLSAgICByYl9yYWlzZShyYl9lVHlwZUVycm9yLCAiRmllbGREZXNjcmlwdG9yIGRvZXMg
bm90IGhhdmUgc3ViZGVmLiIpOwotICB9Ci0gIENIRUNLX1VQQih1cGJfZmllbGRkZWZfc2V0c3Vi
ZGVmbmFtZShtdXRfZGVmLCBzdHIsICZzdGF0dXMpLAotICAgICAgICAgICAgIkVycm9yIHNldHRp
bmcgc3VibWVzc2FnZSBuYW1lIik7Ci0gIHJldHVybiBRbmlsOwotfQotCi0vKgotICogY2FsbC1z
ZXE6Ci0gKiAgICAgRmllbGREZXNjcmlwdG9yLnN1YnR5cGUgPT4gbWVzc2FnZV9vcl9lbnVtX2Rl
c2NyaXB0b3IKLSAqCi0gKiBSZXR1cm5zIHRoZSBtZXNzYWdlIG9yIGVudW0gZGVzY3JpcHRvciBj
b3JyZXNwb25kaW5nIHRvIHRoaXMgZmllbGQncyB0eXBlIGlmCi0gKiBpdCBpcyBhIG1lc3NhZ2Ug
b3IgZW51bSBmaWVsZCwgcmVzcGVjdGl2ZWx5LCBvciBuaWwgb3RoZXJ3aXNlLiBDYW5ub3QgYmUK
LSAqIGNhbGxlZCAqdW50aWwqIHRoZSBjb250YWluaW5nIG1lc3NhZ2UgdHlwZSBpcyBhZGRlZCB0
byBhIHBvb2wgKGFuZCB0aHVzCi0gKiByZXNvbHZlZCkuCi0gKi8KLVZBTFVFIEZpZWxkRGVzY3Jp
cHRvcl9zdWJ0eXBlKFZBTFVFIF9zZWxmKSB7Ci0gIERFRklORV9TRUxGKEZpZWxkRGVzY3JpcHRv
ciwgc2VsZiwgX3NlbGYpOwotICBjb25zdCB1cGJfZGVmKiBkZWY7Ci0KLSAgaWYgKCF1cGJfZmll
bGRkZWZfaGFzc3ViZGVmKHNlbGYtPmZpZWxkZGVmKSkgewotICAgIHJldHVybiBRbmlsOwotICB9
Ci0gIGRlZiA9IHVwYl9maWVsZGRlZl9zdWJkZWYoc2VsZi0+ZmllbGRkZWYpOwotICBpZiAoZGVm
ID09IE5VTEwpIHsKLSAgICByZXR1cm4gUW5pbDsKLSAgfQotICByZXR1cm4gZ2V0X2RlZl9vYmoo
ZGVmKTsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIEZpZWxkRGVzY3JpcHRvci5nZXQo
bWVzc2FnZSkgPT4gdmFsdWUKLSAqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBzZXQgZm9yIHRoaXMg
ZmllbGQgb24gdGhlIGdpdmVuIG1lc3NhZ2UuIFJhaXNlcyBhbgotICogZXhjZXB0aW9uIGlmIG1l
c3NhZ2UgaXMgb2YgdGhlIHdyb25nIHR5cGUuCi0gKi8KLVZBTFVFIEZpZWxkRGVzY3JpcHRvcl9n
ZXQoVkFMVUUgX3NlbGYsIFZBTFVFIG1zZ19yYikgewotICBERUZJTkVfU0VMRihGaWVsZERlc2Ny
aXB0b3IsIHNlbGYsIF9zZWxmKTsKLSAgTWVzc2FnZUhlYWRlciogbXNnOwotICBUeXBlZERhdGFf
R2V0X1N0cnVjdChtc2dfcmIsIE1lc3NhZ2VIZWFkZXIsICZNZXNzYWdlX3R5cGUsIG1zZyk7Ci0g
IGlmIChtc2ctPmRlc2NyaXB0b3ItPm1zZ2RlZiAhPSB1cGJfZmllbGRkZWZfY29udGFpbmluZ3R5
cGUoc2VsZi0+ZmllbGRkZWYpKSB7Ci0gICAgcmJfcmFpc2UocmJfZVR5cGVFcnJvciwgImdldCBt
ZXRob2QgY2FsbGVkIG9uIHdyb25nIG1lc3NhZ2UgdHlwZSIpOwotICB9Ci0gIHJldHVybiBsYXlv
dXRfZ2V0KG1zZy0+ZGVzY3JpcHRvci0+bGF5b3V0LCBNZXNzYWdlX2RhdGEobXNnKSwgc2VsZi0+
ZmllbGRkZWYpOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRmllbGREZXNjcmlwdG9y
LnNldChtZXNzYWdlLCB2YWx1ZSkKLSAqCi0gKiBTZXRzIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5n
IHRvIHRoaXMgZmllbGQgdG8gdGhlIGdpdmVuIHZhbHVlIG9uIHRoZSBnaXZlbgotICogbWVzc2Fn
ZS4gUmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiBtZXNzYWdlIGlzIG9mIHRoZSB3cm9uZyB0eXBlLiBQ
ZXJmb3JtcyB0aGUKLSAqIG9yZGluYXJ5IHR5cGUtY2hlY2tzIGZvciBmaWVsZCBzZXR0aW5nLgot
ICovCi1WQUxVRSBGaWVsZERlc2NyaXB0b3Jfc2V0KFZBTFVFIF9zZWxmLCBWQUxVRSBtc2dfcmIs
IFZBTFVFIHZhbHVlKSB7Ci0gIERFRklORV9TRUxGKEZpZWxkRGVzY3JpcHRvciwgc2VsZiwgX3Nl
bGYpOwotICBNZXNzYWdlSGVhZGVyKiBtc2c7Ci0gIFR5cGVkRGF0YV9HZXRfU3RydWN0KG1zZ19y
YiwgTWVzc2FnZUhlYWRlciwgJk1lc3NhZ2VfdHlwZSwgbXNnKTsKLSAgaWYgKG1zZy0+ZGVzY3Jp
cHRvci0+bXNnZGVmICE9IHVwYl9maWVsZGRlZl9jb250YWluaW5ndHlwZShzZWxmLT5maWVsZGRl
ZikpIHsKLSAgICByYl9yYWlzZShyYl9lVHlwZUVycm9yLCAic2V0IG1ldGhvZCBjYWxsZWQgb24g
d3JvbmcgbWVzc2FnZSB0eXBlIik7Ci0gIH0KLSAgbGF5b3V0X3NldChtc2ctPmRlc2NyaXB0b3It
PmxheW91dCwgTWVzc2FnZV9kYXRhKG1zZyksIHNlbGYtPmZpZWxkZGVmLCB2YWx1ZSk7Ci0gIHJl
dHVybiBRbmlsOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gT25lb2ZEZXNjcmlw
dG9yLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotREVGSU5FX0NMQVNTKE9uZW9mRGVzY3Jp
cHRvciwgIkdvb2dsZTo6UHJvdG9idWY6Ok9uZW9mRGVzY3JpcHRvciIpOwotCi12b2lkIE9uZW9m
RGVzY3JpcHRvcl9tYXJrKHZvaWQqIF9zZWxmKSB7Ci19Ci0KLXZvaWQgT25lb2ZEZXNjcmlwdG9y
X2ZyZWUodm9pZCogX3NlbGYpIHsKLSAgT25lb2ZEZXNjcmlwdG9yKiBzZWxmID0gX3NlbGY7Ci0g
IHVwYl9vbmVvZmRlZl91bnJlZihzZWxmLT5vbmVvZmRlZiwgJnNlbGYtPm9uZW9mZGVmKTsKLSAg
eGZyZWUoc2VsZik7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBPbmVvZkRlc2NyaXB0
b3IubmV3ID0+IG9uZW9mX2Rlc2NyaXB0b3IKLSAqCi0gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSwg
b25lb2YgZGVzY3JpcHRvci4gVGhlIG9uZW9mIG1heSBvbmx5IGJlIG1vZGlmaWVkIHByaW9yCi0g
KiB0byBiZWluZyBhZGRlZCB0byBhIG1lc3NhZ2UgZGVzY3JpcHRvciB3aGljaCBpcyBzdWJzZXF1
ZW50bHkgYWRkZWQgdG8gYSBwb29sLgotICovCi1WQUxVRSBPbmVvZkRlc2NyaXB0b3JfYWxsb2Mo
VkFMVUUga2xhc3MpIHsKLSAgT25lb2ZEZXNjcmlwdG9yKiBzZWxmID0gQUxMT0MoT25lb2ZEZXNj
cmlwdG9yKTsKLSAgVkFMVUUgcmV0ID0gVHlwZWREYXRhX1dyYXBfU3RydWN0KGtsYXNzLCAmX09u
ZW9mRGVzY3JpcHRvcl90eXBlLCBzZWxmKTsKLSAgc2VsZi0+b25lb2ZkZWYgPSB1cGJfb25lb2Zk
ZWZfbmV3KCZzZWxmLT5vbmVvZmRlZik7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXZvaWQgT25lb2ZE
ZXNjcmlwdG9yX3JlZ2lzdGVyKFZBTFVFIG1vZHVsZSkgewotICBWQUxVRSBrbGFzcyA9IHJiX2Rl
ZmluZV9jbGFzc191bmRlcigKLSAgICAgIG1vZHVsZSwgIk9uZW9mRGVzY3JpcHRvciIsIHJiX2NP
YmplY3QpOwotICByYl9kZWZpbmVfYWxsb2NfZnVuYyhrbGFzcywgT25lb2ZEZXNjcmlwdG9yX2Fs
bG9jKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgIm5hbWUiLCBPbmVvZkRlc2NyaXB0b3Jf
bmFtZSwgMCk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJuYW1lPSIsIE9uZW9mRGVzY3Jp
cHRvcl9uYW1lX3NldCwgMSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJhZGRfZmllbGQi
LCBPbmVvZkRlc2NyaXB0b3JfYWRkX2ZpZWxkLCAxKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFz
cywgImVhY2giLCBPbmVvZkRlc2NyaXB0b3JfZWFjaCwgMCk7Ci0gIHJiX2luY2x1ZGVfbW9kdWxl
KGtsYXNzLCByYl9tRW51bWVyYWJsZSk7Ci0gIGNPbmVvZkRlc2NyaXB0b3IgPSBrbGFzczsKLSAg
cmJfZ2NfcmVnaXN0ZXJfYWRkcmVzcygmY09uZW9mRGVzY3JpcHRvcik7Ci19Ci0KLS8qCi0gKiBj
YWxsLXNlcToKLSAqICAgICBPbmVvZkRlc2NyaXB0b3IubmFtZSA9PiBuYW1lCi0gKgotICogUmV0
dXJucyB0aGUgbmFtZSBvZiB0aGlzIG9uZW9mLgotICovCi1WQUxVRSBPbmVvZkRlc2NyaXB0b3Jf
bmFtZShWQUxVRSBfc2VsZikgewotICBERUZJTkVfU0VMRihPbmVvZkRlc2NyaXB0b3IsIHNlbGYs
IF9zZWxmKTsKLSAgcmV0dXJuIHJiX3N0cl9tYXliZV9udWxsKHVwYl9vbmVvZmRlZl9uYW1lKHNl
bGYtPm9uZW9mZGVmKSk7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBPbmVvZkRlc2Ny
aXB0b3IubmFtZSA9IG5hbWUKLSAqCi0gKiBTZXRzIGEgbmV3IG5hbWUgZm9yIHRoaXMgb25lb2Yu
IFRoZSBvbmVvZiBtdXN0IG5vdCBoYXZlIGJlZW4gYWRkZWQgdG8gYQotICogbWVzc2FnZSBkZXNj
cmlwdG9yIHlldC4KLSAqLwotVkFMVUUgT25lb2ZEZXNjcmlwdG9yX25hbWVfc2V0KFZBTFVFIF9z
ZWxmLCBWQUxVRSB2YWx1ZSkgewotICBERUZJTkVfU0VMRihPbmVvZkRlc2NyaXB0b3IsIHNlbGYs
IF9zZWxmKTsKLSAgdXBiX29uZW9mZGVmKiBtdXRfZGVmID0gY2hlY2tfb25lb2Zfbm90ZnJvemVu
KHNlbGYtPm9uZW9mZGVmKTsKLSAgY29uc3QgY2hhciogc3RyID0gZ2V0X3N0cih2YWx1ZSk7Ci0g
IENIRUNLX1VQQih1cGJfb25lb2ZkZWZfc2V0bmFtZShtdXRfZGVmLCBzdHIsICZzdGF0dXMpLAot
ICAgICAgICAgICAgIkVycm9yIHNldHRpbmcgb25lb2YgbmFtZSIpOwotICByZXR1cm4gUW5pbDsK
LX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIE9uZW9mRGVzY3JpcHRvci5hZGRfZmllbGQo
ZmllbGQpID0+IG5pbAotICoKLSAqIEFkZHMgYSBmaWVsZCB0byB0aGlzIG9uZW9mLiBUaGUgZmll
bGQgbWF5IGhhdmUgYmVlbiBhZGRlZCB0byB0aGlzIG9uZW9mIGluCi0gKiB0aGUgcGFzdCwgb3Ig
dGhlIG1lc3NhZ2UgdG8gd2hpY2ggdGhpcyBvbmVvZiBiZWxvbmdzIChpZiBhbnkpLCBidXQgbWF5
IG5vdAotICogaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYW55IG90aGVyIG9uZW9mIG9yIG1l
c3NhZ2UuIE90aGVyd2lzZSwgYW4KLSAqIGV4Y2VwdGlvbiBpcyByYWlzZWQuCi0gKgotICogQWxs
IGZpZWxkcyBhZGRlZCB0byB0aGUgb25lb2YgdmlhIHRoaXMgbWV0aG9kIHdpbGwgYmUgYXV0b21h
dGljYWxseSBhZGRlZCB0bwotICogdGhlIG1lc3NhZ2UgdG8gd2hpY2ggdGhpcyBvbmVvZiBiZWxv
bmdzLCBpZiBpdCBiZWxvbmdzIHRvIG9uZSBjdXJyZW50bHksIG9yCi0gKiBlbHNlIHdpbGwgYmUg
YWRkZWQgdG8gYW55IG1lc3NhZ2UgdG8gd2hpY2ggdGhlIG9uZW9mIGlzIGxhdGVyIGFkZGVkIGF0
IHRoZQotICogdGltZSB0aGF0IGl0IGlzIGFkZGVkLgotICovCi1WQUxVRSBPbmVvZkRlc2NyaXB0
b3JfYWRkX2ZpZWxkKFZBTFVFIF9zZWxmLCBWQUxVRSBvYmopIHsKLSAgREVGSU5FX1NFTEYoT25l
b2ZEZXNjcmlwdG9yLCBzZWxmLCBfc2VsZik7Ci0gIHVwYl9vbmVvZmRlZiogbXV0X2RlZiA9IGNo
ZWNrX29uZW9mX25vdGZyb3plbihzZWxmLT5vbmVvZmRlZik7Ci0gIEZpZWxkRGVzY3JpcHRvciog
ZGVmID0gcnVieV90b19GaWVsZERlc2NyaXB0b3Iob2JqKTsKLSAgdXBiX2ZpZWxkZGVmKiBtdXRf
ZmllbGRfZGVmID0gY2hlY2tfZmllbGRfbm90ZnJvemVuKGRlZi0+ZmllbGRkZWYpOwotICBDSEVD
S19VUEIoCi0gICAgICB1cGJfb25lb2ZkZWZfYWRkZmllbGQobXV0X2RlZiwgbXV0X2ZpZWxkX2Rl
ZiwgTlVMTCwgJnN0YXR1cyksCi0gICAgICAiQWRkaW5nIGZpZWxkIHRvIE9uZW9mRGVzY3JpcHRv
ciBmYWlsZWQiKTsKLSAgYWRkX2RlZl9vYmooZGVmLT5maWVsZGRlZiwgb2JqKTsKLSAgcmV0dXJu
IFFuaWw7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBPbmVvZkRlc2NyaXB0b3IuZWFj
aCgmYmxvY2spID0+IG5pbAotICoKLSAqIEl0ZXJhdGVzIHRocm91Z2ggZmllbGRzIGluIHRoaXMg
b25lb2YsIHlpZWxkaW5nIHRvIHRoZSBibG9jayBvbiBlYWNoIG9uZS4KLSAqLwotVkFMVUUgT25l
b2ZEZXNjcmlwdG9yX2VhY2goVkFMVUUgX3NlbGYsIFZBTFVFIGZpZWxkKSB7Ci0gIERFRklORV9T
RUxGKE9uZW9mRGVzY3JpcHRvciwgc2VsZiwgX3NlbGYpOwotICB1cGJfb25lb2ZfaXRlciBpdDsK
LSAgZm9yICh1cGJfb25lb2ZfYmVnaW4oJml0LCBzZWxmLT5vbmVvZmRlZik7Ci0gICAgICAgIXVw
Yl9vbmVvZl9kb25lKCZpdCk7Ci0gICAgICAgdXBiX29uZW9mX25leHQoJml0KSkgewotICAgIGNv
bnN0IHVwYl9maWVsZGRlZiogZiA9IHVwYl9vbmVvZl9pdGVyX2ZpZWxkKCZpdCk7Ci0gICAgVkFM
VUUgb2JqID0gZ2V0X2RlZl9vYmooZik7Ci0gICAgcmJfeWllbGQob2JqKTsKLSAgfQotICByZXR1
cm4gUW5pbDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEVudW1EZXNjcmlwdG9y
LgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotREVGSU5FX0NMQVNTKEVudW1EZXNjcmlwdG9y
LCAiR29vZ2xlOjpQcm90b2J1Zjo6RW51bURlc2NyaXB0b3IiKTsKLQotdm9pZCBFbnVtRGVzY3Jp
cHRvcl9tYXJrKHZvaWQqIF9zZWxmKSB7Ci0gIEVudW1EZXNjcmlwdG9yKiBzZWxmID0gX3NlbGY7
Ci0gIHJiX2djX21hcmsoc2VsZi0+bW9kdWxlKTsKLX0KLQotdm9pZCBFbnVtRGVzY3JpcHRvcl9m
cmVlKHZvaWQqIF9zZWxmKSB7Ci0gIEVudW1EZXNjcmlwdG9yKiBzZWxmID0gX3NlbGY7Ci0gIHVw
Yl9lbnVtZGVmX3VucmVmKHNlbGYtPmVudW1kZWYsICZzZWxmLT5lbnVtZGVmKTsKLSAgeGZyZWUo
c2VsZik7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBFbnVtRGVzY3JpcHRvci5uZXcg
PT4gZW51bV9kZXNjcmlwdG9yCi0gKgotICogQ3JlYXRlcyBhIG5ldywgZW1wdHksIGVudW0gZGVz
Y3JpcHRvci4gTXVzdCBiZSBhZGRlZCB0byBhIHBvb2wgYmVmb3JlIHRoZQotICogZW51bSB0eXBl
IGNhbiBiZSB1c2VkLiBUaGUgZW51bSB0eXBlIG1heSBvbmx5IGJlIG1vZGlmaWVkIHByaW9yIHRv
IGFkZGluZyB0bwotICogYSBwb29sLgotICovCi1WQUxVRSBFbnVtRGVzY3JpcHRvcl9hbGxvYyhW
QUxVRSBrbGFzcykgewotICBFbnVtRGVzY3JpcHRvciogc2VsZiA9IEFMTE9DKEVudW1EZXNjcmlw
dG9yKTsKLSAgVkFMVUUgcmV0ID0gVHlwZWREYXRhX1dyYXBfU3RydWN0KGtsYXNzLCAmX0VudW1E
ZXNjcmlwdG9yX3R5cGUsIHNlbGYpOwotICBzZWxmLT5lbnVtZGVmID0gdXBiX2VudW1kZWZfbmV3
KCZzZWxmLT5lbnVtZGVmKTsKLSAgc2VsZi0+bW9kdWxlID0gUW5pbDsKLSAgcmV0dXJuIHJldDsK
LX0KLQotdm9pZCBFbnVtRGVzY3JpcHRvcl9yZWdpc3RlcihWQUxVRSBtb2R1bGUpIHsKLSAgVkFM
VUUga2xhc3MgPSByYl9kZWZpbmVfY2xhc3NfdW5kZXIoCi0gICAgICBtb2R1bGUsICJFbnVtRGVz
Y3JpcHRvciIsIHJiX2NPYmplY3QpOwotICByYl9kZWZpbmVfYWxsb2NfZnVuYyhrbGFzcywgRW51
bURlc2NyaXB0b3JfYWxsb2MpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAibmFtZSIsIEVu
dW1EZXNjcmlwdG9yX25hbWUsIDApOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAibmFtZT0i
LCBFbnVtRGVzY3JpcHRvcl9uYW1lX3NldCwgMSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3Ms
ICJhZGRfdmFsdWUiLCBFbnVtRGVzY3JpcHRvcl9hZGRfdmFsdWUsIDIpOwotICByYl9kZWZpbmVf
bWV0aG9kKGtsYXNzLCAibG9va3VwX25hbWUiLCBFbnVtRGVzY3JpcHRvcl9sb29rdXBfbmFtZSwg
MSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJsb29rdXBfdmFsdWUiLCBFbnVtRGVzY3Jp
cHRvcl9sb29rdXBfdmFsdWUsIDEpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiZWFjaCIs
IEVudW1EZXNjcmlwdG9yX2VhY2gsIDApOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiZW51
bW1vZHVsZSIsIEVudW1EZXNjcmlwdG9yX2VudW1tb2R1bGUsIDApOwotICByYl9pbmNsdWRlX21v
ZHVsZShrbGFzcywgcmJfbUVudW1lcmFibGUpOwotICBjRW51bURlc2NyaXB0b3IgPSBrbGFzczsK
LSAgcmJfZ2NfcmVnaXN0ZXJfYWRkcmVzcygmY0VudW1EZXNjcmlwdG9yKTsKLX0KLQotLyoKLSAq
IGNhbGwtc2VxOgotICogICAgIEVudW1EZXNjcmlwdG9yLm5hbWUgPT4gbmFtZQotICoKLSAqIFJl
dHVybnMgdGhlIG5hbWUgb2YgdGhpcyBlbnVtIHR5cGUuCi0gKi8KLVZBTFVFIEVudW1EZXNjcmlw
dG9yX25hbWUoVkFMVUUgX3NlbGYpIHsKLSAgREVGSU5FX1NFTEYoRW51bURlc2NyaXB0b3IsIHNl
bGYsIF9zZWxmKTsKLSAgcmV0dXJuIHJiX3N0cl9tYXliZV9udWxsKHVwYl9lbnVtZGVmX2Z1bGxu
YW1lKHNlbGYtPmVudW1kZWYpKTsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIEVudW1E
ZXNjcmlwdG9yLm5hbWUgPSBuYW1lCi0gKgotICogU2V0cyB0aGUgbmFtZSBvZiB0aGlzIGVudW0g
dHlwZS4gQ2Fubm90IGJlIGNhbGxlZCBpZiB0aGUgZW51bSB0eXBlIGhhcwotICogYWxyZWFkeSBi
ZWVuIGFkZGVkIHRvIGEgcG9vbC4KLSAqLwotVkFMVUUgRW51bURlc2NyaXB0b3JfbmFtZV9zZXQo
VkFMVUUgX3NlbGYsIFZBTFVFIHN0cikgewotICBERUZJTkVfU0VMRihFbnVtRGVzY3JpcHRvciwg
c2VsZiwgX3NlbGYpOwotICB1cGJfZW51bWRlZiogbXV0X2RlZiA9IGNoZWNrX2VudW1fbm90ZnJv
emVuKHNlbGYtPmVudW1kZWYpOwotICBjb25zdCBjaGFyKiBuYW1lID0gZ2V0X3N0cihzdHIpOwot
ICBDSEVDS19VUEIodXBiX2VudW1kZWZfc2V0ZnVsbG5hbWUobXV0X2RlZiwgbmFtZSwgJnN0YXR1
cyksCi0gICAgICAgICAgICAiRXJyb3Igc2V0dGluZyBFbnVtRGVzY3JpcHRvciBuYW1lIik7Ci0g
IHJldHVybiBRbmlsOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRW51bURlc2NyaXB0
b3IuYWRkX3ZhbHVlKGtleSwgdmFsdWUpCi0gKgotICogQWRkcyBhIG5ldyBrZXkgPT4gdmFsdWUg
bWFwcGluZyB0byB0aGlzIGVudW0gdHlwZS4gS2V5IG11c3QgYmUgZ2l2ZW4gYXMgYQotICogUnVi
eSBzeW1ib2wuIENhbm5vdCBiZSBjYWxsZWQgaWYgdGhlIGVudW0gdHlwZSBoYXMgYWxyZWFkeSBi
ZWVuIGFkZGVkIHRvIGEKLSAqIHBvb2wuIFdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBr
ZXkgb3IgdmFsdWUgaXMgYWxyZWFkeSBpbiB1c2UuCi0gKi8KLVZBTFVFIEVudW1EZXNjcmlwdG9y
X2FkZF92YWx1ZShWQUxVRSBfc2VsZiwgVkFMVUUgbmFtZSwgVkFMVUUgbnVtYmVyKSB7Ci0gIERF
RklORV9TRUxGKEVudW1EZXNjcmlwdG9yLCBzZWxmLCBfc2VsZik7Ci0gIHVwYl9lbnVtZGVmKiBt
dXRfZGVmID0gY2hlY2tfZW51bV9ub3Rmcm96ZW4oc2VsZi0+ZW51bWRlZik7Ci0gIGNvbnN0IGNo
YXIqIG5hbWVfc3RyID0gcmJfaWQybmFtZShTWU0ySUQobmFtZSkpOwotICBpbnQzMl90IHZhbCA9
IE5VTTJJTlQobnVtYmVyKTsKLSAgQ0hFQ0tfVVBCKHVwYl9lbnVtZGVmX2FkZHZhbChtdXRfZGVm
LCBuYW1lX3N0ciwgdmFsLCAmc3RhdHVzKSwKLSAgICAgICAgICAgICJFcnJvciBhZGRpbmcgdmFs
dWUgdG8gZW51bSIpOwotICByZXR1cm4gUW5pbDsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICog
ICAgIEVudW1EZXNjcmlwdG9yLmxvb2t1cF9uYW1lKG5hbWUpID0+IHZhbHVlCi0gKgotICogUmV0
dXJucyB0aGUgbnVtZXJpYyB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBrZXkgbmFt
ZSAoYXMgYSBSdWJ5Ci0gKiBzeW1ib2wpLCBvciBuaWwgaWYgbm9uZS4KLSAqLwotVkFMVUUgRW51
bURlc2NyaXB0b3JfbG9va3VwX25hbWUoVkFMVUUgX3NlbGYsIFZBTFVFIG5hbWUpIHsKLSAgREVG
SU5FX1NFTEYoRW51bURlc2NyaXB0b3IsIHNlbGYsIF9zZWxmKTsKLSAgY29uc3QgY2hhciogbmFt
ZV9zdHI9IHJiX2lkMm5hbWUoU1lNMklEKG5hbWUpKTsKLSAgaW50MzJfdCB2YWwgPSAwOwotICBp
ZiAodXBiX2VudW1kZWZfbnRvaXooc2VsZi0+ZW51bWRlZiwgbmFtZV9zdHIsICZ2YWwpKSB7Ci0g
ICAgcmV0dXJuIElOVDJOVU0odmFsKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gUW5pbDsKLSAg
fQotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgRW51bURlc2NyaXB0b3IubG9va3VwX3Zh
bHVlKG5hbWUpID0+IHZhbHVlCi0gKgotICogUmV0dXJucyB0aGUga2V5IG5hbWUgKGFzIGEgUnVi
eSBzeW1ib2wpIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludGVnZXIgdmFsdWUsCi0gKiBvciBuaWwg
aWYgbm9uZS4KLSAqLwotVkFMVUUgRW51bURlc2NyaXB0b3JfbG9va3VwX3ZhbHVlKFZBTFVFIF9z
ZWxmLCBWQUxVRSBudW1iZXIpIHsKLSAgREVGSU5FX1NFTEYoRW51bURlc2NyaXB0b3IsIHNlbGYs
IF9zZWxmKTsKLSAgaW50MzJfdCB2YWwgPSBOVU0ySU5UKG51bWJlcik7Ci0gIGNvbnN0IGNoYXIq
IG5hbWUgPSB1cGJfZW51bWRlZl9pdG9uKHNlbGYtPmVudW1kZWYsIHZhbCk7Ci0gIGlmIChuYW1l
ICE9IE5VTEwpIHsKLSAgICByZXR1cm4gSUQyU1lNKHJiX2ludGVybihuYW1lKSk7Ci0gIH0gZWxz
ZSB7Ci0gICAgcmV0dXJuIFFuaWw7Ci0gIH0KLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAg
IEVudW1EZXNjcmlwdG9yLmVhY2goJmJsb2NrKQotICoKLSAqIEl0ZXJhdGVzIG92ZXIga2V5ID0+
IHZhbHVlIG1hcHBpbmdzIGluIHRoaXMgZW51bSdzIGRlZmluaXRpb24sIHlpZWxkaW5nIHRvCi0g
KiB0aGUgYmxvY2sgd2l0aCAoa2V5LCB2YWx1ZSkgYXJndW1lbnRzIGZvciBlYWNoIG9uZS4KLSAq
LwotVkFMVUUgRW51bURlc2NyaXB0b3JfZWFjaChWQUxVRSBfc2VsZikgewotICBERUZJTkVfU0VM
RihFbnVtRGVzY3JpcHRvciwgc2VsZiwgX3NlbGYpOwotCi0gIHVwYl9lbnVtX2l0ZXIgaXQ7Ci0g
IGZvciAodXBiX2VudW1fYmVnaW4oJml0LCBzZWxmLT5lbnVtZGVmKTsKLSAgICAgICAhdXBiX2Vu
dW1fZG9uZSgmaXQpOwotICAgICAgIHVwYl9lbnVtX25leHQoJml0KSkgewotICAgIFZBTFVFIGtl
eSA9IElEMlNZTShyYl9pbnRlcm4odXBiX2VudW1faXRlcl9uYW1lKCZpdCkpKTsKLSAgICBWQUxV
RSBudW1iZXIgPSBJTlQyTlVNKHVwYl9lbnVtX2l0ZXJfbnVtYmVyKCZpdCkpOwotICAgIHJiX3lp
ZWxkX3ZhbHVlcygyLCBrZXksIG51bWJlcik7Ci0gIH0KLQotICByZXR1cm4gUW5pbDsKLX0KLQot
LyoKLSAqIGNhbGwtc2VxOgotICogICAgIEVudW1EZXNjcmlwdG9yLmVudW1tb2R1bGUgPT4gbW9k
dWxlCi0gKgotICogUmV0dXJucyB0aGUgUnVieSBtb2R1bGUgY29ycmVzcG9uZGluZyB0byB0aGlz
IGVudW0gdHlwZS4gQ2Fubm90IGJlIGNhbGxlZAotICogdW50aWwgdGhlIGVudW0gZGVzY3JpcHRv
ciBoYXMgYmVlbiBhZGRlZCB0byBhIHBvb2wuCi0gKi8KLVZBTFVFIEVudW1EZXNjcmlwdG9yX2Vu
dW1tb2R1bGUoVkFMVUUgX3NlbGYpIHsKLSAgREVGSU5FX1NFTEYoRW51bURlc2NyaXB0b3IsIHNl
bGYsIF9zZWxmKTsKLSAgaWYgKCF1cGJfZGVmX2lzZnJvemVuKChjb25zdCB1cGJfZGVmKilzZWxm
LT5lbnVtZGVmKSkgewotICAgIHJiX3JhaXNlKHJiX2VSdW50aW1lRXJyb3IsCi0gICAgICAgICAg
ICAgIkNhbm5vdCBmZXRjaCBlbnVtIG1vZHVsZSBmcm9tIGFuIEVudW1EZXNjcmlwdG9yIG5vdCB5
ZXQgIgotICAgICAgICAgICAgICJpbiBhIHBvb2wuIik7Ci0gIH0KLSAgaWYgKHNlbGYtPm1vZHVs
ZSA9PSBRbmlsKSB7Ci0gICAgc2VsZi0+bW9kdWxlID0gYnVpbGRfbW9kdWxlX2Zyb21fZW51bWRl
c2Moc2VsZik7Ci0gIH0KLSAgcmV0dXJuIHNlbGYtPm1vZHVsZTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vIE1lc3NhZ2VCdWlsZGVyQ29udGV4dC4KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLURFRklORV9DTEFTUyhNZXNzYWdlQnVpbGRlckNvbnRleHQsCi0gICAgIkdvb2ds
ZTo6UHJvdG9idWY6OkludGVybmFsOjpNZXNzYWdlQnVpbGRlckNvbnRleHQiKTsKLQotdm9pZCBN
ZXNzYWdlQnVpbGRlckNvbnRleHRfbWFyayh2b2lkKiBfc2VsZikgewotICBNZXNzYWdlQnVpbGRl
ckNvbnRleHQqIHNlbGYgPSBfc2VsZjsKLSAgcmJfZ2NfbWFyayhzZWxmLT5kZXNjcmlwdG9yKTsK
LSAgcmJfZ2NfbWFyayhzZWxmLT5idWlsZGVyKTsKLX0KLQotdm9pZCBNZXNzYWdlQnVpbGRlckNv
bnRleHRfZnJlZSh2b2lkKiBfc2VsZikgewotICBNZXNzYWdlQnVpbGRlckNvbnRleHQqIHNlbGYg
PSBfc2VsZjsKLSAgeGZyZWUoc2VsZik7Ci19Ci0KLVZBTFVFIE1lc3NhZ2VCdWlsZGVyQ29udGV4
dF9hbGxvYyhWQUxVRSBrbGFzcykgewotICBNZXNzYWdlQnVpbGRlckNvbnRleHQqIHNlbGYgPSBB
TExPQyhNZXNzYWdlQnVpbGRlckNvbnRleHQpOwotICBWQUxVRSByZXQgPSBUeXBlZERhdGFfV3Jh
cF9TdHJ1Y3QoCi0gICAgICBrbGFzcywgJl9NZXNzYWdlQnVpbGRlckNvbnRleHRfdHlwZSwgc2Vs
Zik7Ci0gIHNlbGYtPmRlc2NyaXB0b3IgPSBRbmlsOwotICBzZWxmLT5idWlsZGVyID0gUW5pbDsK
LSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBNZXNzYWdlQnVpbGRlckNvbnRleHRfcmVnaXN0ZXIo
VkFMVUUgbW9kdWxlKSB7Ci0gIFZBTFVFIGtsYXNzID0gcmJfZGVmaW5lX2NsYXNzX3VuZGVyKAot
ICAgICAgbW9kdWxlLCAiTWVzc2FnZUJ1aWxkZXJDb250ZXh0IiwgcmJfY09iamVjdCk7Ci0gIHJi
X2RlZmluZV9hbGxvY19mdW5jKGtsYXNzLCBNZXNzYWdlQnVpbGRlckNvbnRleHRfYWxsb2MpOwot
ICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiaW5pdGlhbGl6ZSIsCi0gICAgICAgICAgICAgICAg
ICAgTWVzc2FnZUJ1aWxkZXJDb250ZXh0X2luaXRpYWxpemUsIDIpOwotICByYl9kZWZpbmVfbWV0
aG9kKGtsYXNzLCAib3B0aW9uYWwiLCBNZXNzYWdlQnVpbGRlckNvbnRleHRfb3B0aW9uYWwsIC0x
KTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgInJlcXVpcmVkIiwgTWVzc2FnZUJ1aWxkZXJD
b250ZXh0X3JlcXVpcmVkLCAtMSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJyZXBlYXRl
ZCIsIE1lc3NhZ2VCdWlsZGVyQ29udGV4dF9yZXBlYXRlZCwgLTEpOwotICByYl9kZWZpbmVfbWV0
aG9kKGtsYXNzLCAibWFwIiwgTWVzc2FnZUJ1aWxkZXJDb250ZXh0X21hcCwgLTEpOwotICByYl9k
ZWZpbmVfbWV0aG9kKGtsYXNzLCAib25lb2YiLCBNZXNzYWdlQnVpbGRlckNvbnRleHRfb25lb2Ys
IDEpOwotICBjTWVzc2FnZUJ1aWxkZXJDb250ZXh0ID0ga2xhc3M7Ci0gIHJiX2djX3JlZ2lzdGVy
X2FkZHJlc3MoJmNNZXNzYWdlQnVpbGRlckNvbnRleHQpOwotfQotCi0vKgotICogY2FsbC1zZXE6
Ci0gKiAgICAgTWVzc2FnZUJ1aWxkZXJDb250ZXh0Lm5ldyhkZXNjLCBidWlsZGVyKSA9PiBjb250
ZXh0Ci0gKgotICogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UgYnVpbGRlciBjb250ZXh0IGFyb3VuZCB0
aGUgZ2l2ZW4gbWVzc2FnZSBkZXNjcmlwdG9yIGFuZAotICogYnVpbGRlciBjb250ZXh0LiBUaGlz
IGNsYXNzIGlzIGludGVuZGVkIHRvIHNlcnZlIGFzIGEgRFNMIGNvbnRleHQgdG8gYmUgdXNlZAot
ICogd2l0aCAjaW5zdGFuY2VfZXZhbC4KLSAqLwotVkFMVUUgTWVzc2FnZUJ1aWxkZXJDb250ZXh0
X2luaXRpYWxpemUoVkFMVUUgX3NlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxVRSBtc2dkZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxVRSBidWlsZGVyKSB7Ci0gIERFRklORV9TRUxGKE1lc3NhZ2VCdWlsZGVyQ29udGV4
dCwgc2VsZiwgX3NlbGYpOwotICBzZWxmLT5kZXNjcmlwdG9yID0gbXNnZGVmOwotICBzZWxmLT5i
dWlsZGVyID0gYnVpbGRlcjsKLSAgcmV0dXJuIFFuaWw7Ci19Ci0KLXN0YXRpYyBWQUxVRSBtc2dk
ZWZfYWRkX2ZpZWxkKFZBTFVFIG1zZ2RlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGxhYmVsLCBWQUxVRSBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMVUUgdHlwZSwgVkFMVUUgbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMVUUgdHlwZV9jbGFzcykgewotICBWQUxVRSBmaWVsZGRlZiA9IHJiX2NsYXNzX25l
d19pbnN0YW5jZSgwLCBOVUxMLCBjRmllbGREZXNjcmlwdG9yKTsKLSAgVkFMVUUgbmFtZV9zdHIg
PSByYl9zdHJfbmV3MihyYl9pZDJuYW1lKFNZTTJJRChuYW1lKSkpOwotCi0gIHJiX2Z1bmNhbGwo
ZmllbGRkZWYsIHJiX2ludGVybigibGFiZWw9IiksIDEsIElEMlNZTShyYl9pbnRlcm4obGFiZWwp
KSk7Ci0gIHJiX2Z1bmNhbGwoZmllbGRkZWYsIHJiX2ludGVybigibmFtZT0iKSwgMSwgbmFtZV9z
dHIpOwotICByYl9mdW5jYWxsKGZpZWxkZGVmLCByYl9pbnRlcm4oInR5cGU9IiksIDEsIHR5cGUp
OwotICByYl9mdW5jYWxsKGZpZWxkZGVmLCByYl9pbnRlcm4oIm51bWJlcj0iKSwgMSwgbnVtYmVy
KTsKLQotICBpZiAodHlwZV9jbGFzcyAhPSBRbmlsKSB7Ci0gICAgaWYgKFRZUEUodHlwZV9jbGFz
cykgIT0gVF9TVFJJTkcpIHsKLSAgICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkV4cGVjdGVk
IHN0cmluZyBmb3IgdHlwZSBjbGFzcyIpOwotICAgIH0KLSAgICAvLyBNYWtlIGl0IGFuIGFic29s
dXRlIHR5cGUgbmFtZSBieSBwcmVwZW5kaW5nIGEgZG90LgotICAgIHR5cGVfY2xhc3MgPSByYl9z
dHJfYXBwZW5kKHJiX3N0cl9uZXcyKCIuIiksIHR5cGVfY2xhc3MpOwotICAgIHJiX2Z1bmNhbGwo
ZmllbGRkZWYsIHJiX2ludGVybigic3VibXNnX25hbWU9IiksIDEsIHR5cGVfY2xhc3MpOwotICB9
Ci0KLSAgcmJfZnVuY2FsbChtc2dkZWYsIHJiX2ludGVybigiYWRkX2ZpZWxkIiksIDEsIGZpZWxk
ZGVmKTsKLSAgcmV0dXJuIGZpZWxkZGVmOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAg
TWVzc2FnZUJ1aWxkZXJDb250ZXh0Lm9wdGlvbmFsKG5hbWUsIHR5cGUsIG51bWJlciwgdHlwZV9j
bGFzcyA9IG5pbCkKLSAqCi0gKiBEZWZpbmVzIGEgbmV3IG9wdGlvbmFsIGZpZWxkIG9uIHRoaXMg
bWVzc2FnZSB0eXBlIHdpdGggdGhlIGdpdmVuIHR5cGUsIHRhZwotICogbnVtYmVyLCBhbmQgdHlw
ZSBjbGFzcyAoZm9yIG1lc3NhZ2UgYW5kIGVudW0gZmllbGRzKS4gVGhlIHR5cGUgbXVzdCBiZSBh
IFJ1YnkKLSAqIHN5bWJvbCAoYXMgYWNjZXB0ZWQgYnkgRmllbGREZXNjcmlwdG9yI3R5cGU9KSBh
bmQgdGhlIHR5cGVfY2xhc3MgbXVzdCBiZSBhCi0gKiBzdHJpbmcsIGlmIHByZXNlbnQgKGFzIGFj
Y2VwdGVkIGJ5IEZpZWxkRGVzY3JpcHRvciNzdWJtc2dfbmFtZT0pLgotICovCi1WQUxVRSBNZXNz
YWdlQnVpbGRlckNvbnRleHRfb3B0aW9uYWwoaW50IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBf
c2VsZikgewotICBERUZJTkVfU0VMRihNZXNzYWdlQnVpbGRlckNvbnRleHQsIHNlbGYsIF9zZWxm
KTsKLSAgVkFMVUUgbmFtZSwgdHlwZSwgbnVtYmVyLCB0eXBlX2NsYXNzOwotCi0gIGlmIChhcmdj
IDwgMykgewotICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkV4cGVjdGVkIGF0IGxlYXN0IDMg
YXJndW1lbnRzLiIpOwotICB9Ci0gIG5hbWUgPSBhcmd2WzBdOwotICB0eXBlID0gYXJndlsxXTsK
LSAgbnVtYmVyID0gYXJndlsyXTsKLSAgdHlwZV9jbGFzcyA9IChhcmdjID4gMykgPyBhcmd2WzNd
IDogUW5pbDsKLQotICByZXR1cm4gbXNnZGVmX2FkZF9maWVsZChzZWxmLT5kZXNjcmlwdG9yLCAi
b3B0aW9uYWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0eXBlLCBudW1iZXIs
IHR5cGVfY2xhc3MpOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgTWVzc2FnZUJ1aWxk
ZXJDb250ZXh0LnJlcXVpcmVkKG5hbWUsIHR5cGUsIG51bWJlciwgdHlwZV9jbGFzcyA9IG5pbCkK
LSAqCi0gKiBEZWZpbmVzIGEgbmV3IHJlcXVpcmVkIGZpZWxkIG9uIHRoaXMgbWVzc2FnZSB0eXBl
IHdpdGggdGhlIGdpdmVuIHR5cGUsIHRhZwotICogbnVtYmVyLCBhbmQgdHlwZSBjbGFzcyAoZm9y
IG1lc3NhZ2UgYW5kIGVudW0gZmllbGRzKS4gVGhlIHR5cGUgbXVzdCBiZSBhIFJ1YnkKLSAqIHN5
bWJvbCAoYXMgYWNjZXB0ZWQgYnkgRmllbGREZXNjcmlwdG9yI3R5cGU9KSBhbmQgdGhlIHR5cGVf
Y2xhc3MgbXVzdCBiZSBhCi0gKiBzdHJpbmcsIGlmIHByZXNlbnQgKGFzIGFjY2VwdGVkIGJ5IEZp
ZWxkRGVzY3JpcHRvciNzdWJtc2dfbmFtZT0pLgotICoKLSAqIFByb3RvMyBkb2VzIG5vdCBoYXZl
IHJlcXVpcmVkIGZpZWxkcywgYnV0IHRoaXMgbWV0aG9kIGV4aXN0cyBmb3IKLSAqIGNvbXBsZXRl
bmVzcy4gQW55IGF0dGVtcHQgdG8gYWRkIGEgbWVzc2FnZSB0eXBlIHdpdGggcmVxdWlyZWQgZmll
bGRzIHRvIGEKLSAqIHBvb2wgd2lsbCBjdXJyZW50bHkgcmVzdWx0IGluIGFuIGVycm9yLgotICov
Ci1WQUxVRSBNZXNzYWdlQnVpbGRlckNvbnRleHRfcmVxdWlyZWQoaW50IGFyZ2MsIFZBTFVFKiBh
cmd2LCBWQUxVRSBfc2VsZikgewotICBERUZJTkVfU0VMRihNZXNzYWdlQnVpbGRlckNvbnRleHQs
IHNlbGYsIF9zZWxmKTsKLSAgVkFMVUUgbmFtZSwgdHlwZSwgbnVtYmVyLCB0eXBlX2NsYXNzOwot
Ci0gIGlmIChhcmdjIDwgMykgewotICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkV4cGVjdGVk
IGF0IGxlYXN0IDMgYXJndW1lbnRzLiIpOwotICB9Ci0gIG5hbWUgPSBhcmd2WzBdOwotICB0eXBl
ID0gYXJndlsxXTsKLSAgbnVtYmVyID0gYXJndlsyXTsKLSAgdHlwZV9jbGFzcyA9IChhcmdjID4g
MykgPyBhcmd2WzNdIDogUW5pbDsKLQotICByZXR1cm4gbXNnZGVmX2FkZF9maWVsZChzZWxmLT5k
ZXNjcmlwdG9yLCAicmVxdWlyZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0
eXBlLCBudW1iZXIsIHR5cGVfY2xhc3MpOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAg
TWVzc2FnZUJ1aWxkZXJDb250ZXh0LnJlcGVhdGVkKG5hbWUsIHR5cGUsIG51bWJlciwgdHlwZV9j
bGFzcyA9IG5pbCkKLSAqCi0gKiBEZWZpbmVzIGEgbmV3IHJlcGVhdGVkIGZpZWxkIG9uIHRoaXMg
bWVzc2FnZSB0eXBlIHdpdGggdGhlIGdpdmVuIHR5cGUsIHRhZwotICogbnVtYmVyLCBhbmQgdHlw
ZSBjbGFzcyAoZm9yIG1lc3NhZ2UgYW5kIGVudW0gZmllbGRzKS4gVGhlIHR5cGUgbXVzdCBiZSBh
IFJ1YnkKLSAqIHN5bWJvbCAoYXMgYWNjZXB0ZWQgYnkgRmllbGREZXNjcmlwdG9yI3R5cGU9KSBh
bmQgdGhlIHR5cGVfY2xhc3MgbXVzdCBiZSBhCi0gKiBzdHJpbmcsIGlmIHByZXNlbnQgKGFzIGFj
Y2VwdGVkIGJ5IEZpZWxkRGVzY3JpcHRvciNzdWJtc2dfbmFtZT0pLgotICovCi1WQUxVRSBNZXNz
YWdlQnVpbGRlckNvbnRleHRfcmVwZWF0ZWQoaW50IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBf
c2VsZikgewotICBERUZJTkVfU0VMRihNZXNzYWdlQnVpbGRlckNvbnRleHQsIHNlbGYsIF9zZWxm
KTsKLSAgVkFMVUUgbmFtZSwgdHlwZSwgbnVtYmVyLCB0eXBlX2NsYXNzOwotCi0gIGlmIChhcmdj
IDwgMykgewotICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkV4cGVjdGVkIGF0IGxlYXN0IDMg
YXJndW1lbnRzLiIpOwotICB9Ci0gIG5hbWUgPSBhcmd2WzBdOwotICB0eXBlID0gYXJndlsxXTsK
LSAgbnVtYmVyID0gYXJndlsyXTsKLSAgdHlwZV9jbGFzcyA9IChhcmdjID4gMykgPyBhcmd2WzNd
IDogUW5pbDsKLQotICByZXR1cm4gbXNnZGVmX2FkZF9maWVsZChzZWxmLT5kZXNjcmlwdG9yLCAi
cmVwZWF0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0eXBlLCBudW1iZXIs
IHR5cGVfY2xhc3MpOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgTWVzc2FnZUJ1aWxk
ZXJDb250ZXh0Lm1hcChuYW1lLCBrZXlfdHlwZSwgdmFsdWVfdHlwZSwgbnVtYmVyLAotICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZV9jbGFzcyA9IG5pbCkKLSAqCi0g
KiBEZWZpbmVzIGEgbmV3IG1hcCBmaWVsZCBvbiB0aGlzIG1lc3NhZ2UgdHlwZSB3aXRoIHRoZSBn
aXZlbiBrZXkgYW5kIHZhbHVlCi0gKiB0eXBlcywgdGFnIG51bWJlciwgYW5kIHR5cGUgY2xhc3Mg
KGZvciBtZXNzYWdlIGFuZCBlbnVtIHZhbHVlIHR5cGVzKS4gVGhlIGtleQotICogdHlwZSBtdXN0
IGJlIDppbnQzMi86dWludDMyLzppbnQ2NC86dWludDY0LCA6Ym9vbCwgb3IgOnN0cmluZy4gVGhl
IHZhbHVlIHR5cGUKLSAqIHR5cGUgbXVzdCBiZSBhIFJ1Ynkgc3ltYm9sIChhcyBhY2NlcHRlZCBi
eSBGaWVsZERlc2NyaXB0b3IjdHlwZT0pIGFuZCB0aGUKLSAqIHR5cGVfY2xhc3MgbXVzdCBiZSBh
IHN0cmluZywgaWYgcHJlc2VudCAoYXMgYWNjZXB0ZWQgYnkKLSAqIEZpZWxkRGVzY3JpcHRvciNz
dWJtc2dfbmFtZT0pLgotICovCi1WQUxVRSBNZXNzYWdlQnVpbGRlckNvbnRleHRfbWFwKGludCBh
cmdjLCBWQUxVRSogYXJndiwgVkFMVUUgX3NlbGYpIHsKLSAgREVGSU5FX1NFTEYoTWVzc2FnZUJ1
aWxkZXJDb250ZXh0LCBzZWxmLCBfc2VsZik7Ci0gIFZBTFVFIG5hbWUsIGtleV90eXBlLCB2YWx1
ZV90eXBlLCBudW1iZXIsIHR5cGVfY2xhc3M7Ci0gIFZBTFVFIG1hcGVudHJ5X2Rlc2MsIG1hcGVu
dHJ5X2Rlc2NfbmFtZTsKLQotICBpZiAoYXJnYyA8IDQpIHsKLSAgICByYl9yYWlzZShyYl9lQXJn
RXJyb3IsICJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cy4iKTsKLSAgfQotICBuYW1lID0g
YXJndlswXTsKLSAga2V5X3R5cGUgPSBhcmd2WzFdOwotICB2YWx1ZV90eXBlID0gYXJndlsyXTsK
LSAgbnVtYmVyID0gYXJndlszXTsKLSAgdHlwZV9jbGFzcyA9IChhcmdjID4gNCkgPyBhcmd2WzRd
IDogUW5pbDsKLQotICAvLyBWYWxpZGF0ZSB0aGUga2V5IHR5cGUuIFdlIGNhbid0IGFjY2VwdCBl
bnVtcywgbWVzc2FnZXMsIG9yIGZsb2F0cy9kb3VibGVzCi0gIC8vIGFzIG1hcCBrZXlzLiAoV2Ug
ZXhjbHVkZSB0aGVzZSBleHBsaWNpdGx5LCBhbmQgdGhlIGZpZWxkLWRlc2NyaXB0b3Igc2V0dGVy
Ci0gIC8vIGJlbG93IHRoZW4gZW5zdXJlcyB0aGF0IHRoZSB0eXBlIGlzIG9uZSBvZiB0aGUgcmVt
YWluaW5nIHZhbGlkIG9wdGlvbnMuKQotICBpZiAoU1lNMklEKGtleV90eXBlKSA9PSByYl9pbnRl
cm4oImZsb2F0IikgfHwKLSAgICAgIFNZTTJJRChrZXlfdHlwZSkgPT0gcmJfaW50ZXJuKCJkb3Vi
bGUiKSB8fAotICAgICAgU1lNMklEKGtleV90eXBlKSA9PSByYl9pbnRlcm4oImVudW0iKSB8fAot
ICAgICAgU1lNMklEKGtleV90eXBlKSA9PSByYl9pbnRlcm4oIm1lc3NhZ2UiKSkgewotICAgIHJi
X3JhaXNlKHJiX2VBcmdFcnJvciwKLSAgICAgICAgICAgICAiQ2Fubm90IGFkZCBhIG1hcCBmaWVs
ZCB3aXRoIGEgZmxvYXQsIGRvdWJsZSwgZW51bSwgb3IgbWVzc2FnZSAiCi0gICAgICAgICAgICAg
InR5cGUuIik7Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBuZXcgbWVzc2FnZSBkZXNjcmlwdG9yIGZv
ciB0aGUgbWFwIGVudHJ5IG1lc3NhZ2UsIGFuZCBjcmVhdGUgYQotICAvLyByZXBlYXRlZCBzdWJt
ZXNzYWdlIGZpZWxkIGhlcmUgd2l0aCB0aGF0IHR5cGUuCi0gIG1hcGVudHJ5X2Rlc2MgPSByYl9j
bGFzc19uZXdfaW5zdGFuY2UoMCwgTlVMTCwgY0Rlc2NyaXB0b3IpOwotICBtYXBlbnRyeV9kZXNj
X25hbWUgPSByYl9mdW5jYWxsKHNlbGYtPmRlc2NyaXB0b3IsIHJiX2ludGVybigibmFtZSIpLCAw
KTsKLSAgbWFwZW50cnlfZGVzY19uYW1lID0gcmJfc3RyX2NhdDIobWFwZW50cnlfZGVzY19uYW1l
LCAiX01hcEVudHJ5XyIpOwotICBtYXBlbnRyeV9kZXNjX25hbWUgPSByYl9zdHJfY2F0MihtYXBl
bnRyeV9kZXNjX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX2lk
Mm5hbWUoU1lNMklEKG5hbWUpKSk7Ci0gIERlc2NyaXB0b3JfbmFtZV9zZXQobWFwZW50cnlfZGVz
YywgbWFwZW50cnlfZGVzY19uYW1lKTsKLQotICB7Ci0gICAgLy8gVGhlICdtYXBlbnRyeScgYXR0
cmlidXRlIGhhcyBubyBSdWJ5IHNldHRlciBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRoZQotICAg
IC8vIHVzZXIgYXR0ZW1wdGluZyB0byBESVkgdGhlIHNldHVwIGJlbG93OyB3ZSB3YW50IHRvIGVu
c3VyZSB0aGF0IHRoZSBmaWVsZHMKLSAgICAvLyBhcmUgY29ycmVjdC4gU28gd2UgcmVhY2ggaW50
byB0aGUgbXNnZGVmIGhlcmUgdG8gc2V0IHRoZSBiaXQgbWFudWFsbHkuCi0gICAgRGVzY3JpcHRv
ciogbWFwZW50cnlfZGVzY19zZWxmID0gcnVieV90b19EZXNjcmlwdG9yKG1hcGVudHJ5X2Rlc2Mp
OwotICAgIHVwYl9tc2dkZWZfc2V0bWFwZW50cnkoKHVwYl9tc2dkZWYqKW1hcGVudHJ5X2Rlc2Nf
c2VsZi0+bXNnZGVmLCB0cnVlKTsKLSAgfQotCi0gIHsKLSAgICAvLyBvcHRpb25hbCA8dHlwZT4g
a2V5ID0gMTsKLSAgICBWQUxVRSBrZXlfZmllbGQgPSByYl9jbGFzc19uZXdfaW5zdGFuY2UoMCwg
TlVMTCwgY0ZpZWxkRGVzY3JpcHRvcik7Ci0gICAgRmllbGREZXNjcmlwdG9yX25hbWVfc2V0KGtl
eV9maWVsZCwgcmJfc3RyX25ldzIoImtleSIpKTsKLSAgICBGaWVsZERlc2NyaXB0b3JfbGFiZWxf
c2V0KGtleV9maWVsZCwgSUQyU1lNKHJiX2ludGVybigib3B0aW9uYWwiKSkpOwotICAgIEZpZWxk
RGVzY3JpcHRvcl9udW1iZXJfc2V0KGtleV9maWVsZCwgSU5UMk5VTSgxKSk7Ci0gICAgRmllbGRE
ZXNjcmlwdG9yX3R5cGVfc2V0KGtleV9maWVsZCwga2V5X3R5cGUpOwotICAgIERlc2NyaXB0b3Jf
YWRkX2ZpZWxkKG1hcGVudHJ5X2Rlc2MsIGtleV9maWVsZCk7Ci0gIH0KLQotICB7Ci0gICAgLy8g
b3B0aW9uYWwgPHR5cGU+IHZhbHVlID0gMjsKLSAgICBWQUxVRSB2YWx1ZV9maWVsZCA9IHJiX2Ns
YXNzX25ld19pbnN0YW5jZSgwLCBOVUxMLCBjRmllbGREZXNjcmlwdG9yKTsKLSAgICBGaWVsZERl
c2NyaXB0b3JfbmFtZV9zZXQodmFsdWVfZmllbGQsIHJiX3N0cl9uZXcyKCJ2YWx1ZSIpKTsKLSAg
ICBGaWVsZERlc2NyaXB0b3JfbGFiZWxfc2V0KHZhbHVlX2ZpZWxkLCBJRDJTWU0ocmJfaW50ZXJu
KCJvcHRpb25hbCIpKSk7Ci0gICAgRmllbGREZXNjcmlwdG9yX251bWJlcl9zZXQodmFsdWVfZmll
bGQsIElOVDJOVU0oMikpOwotICAgIEZpZWxkRGVzY3JpcHRvcl90eXBlX3NldCh2YWx1ZV9maWVs
ZCwgdmFsdWVfdHlwZSk7Ci0gICAgaWYgKHR5cGVfY2xhc3MgIT0gUW5pbCkgewotICAgICAgVkFM
VUUgc3VibXNnX25hbWUgPSByYl9zdHJfbmV3MigiLiIpOyAvLyBwcmVwZW5kICcuJyB0byBtYWtl
IGFic29sdXRlLgotICAgICAgc3VibXNnX25hbWUgPSByYl9zdHJfYXBwZW5kKHN1Ym1zZ19uYW1l
LCB0eXBlX2NsYXNzKTsKLSAgICAgIEZpZWxkRGVzY3JpcHRvcl9zdWJtc2dfbmFtZV9zZXQodmFs
dWVfZmllbGQsIHN1Ym1zZ19uYW1lKTsKLSAgICB9Ci0gICAgRGVzY3JpcHRvcl9hZGRfZmllbGQo
bWFwZW50cnlfZGVzYywgdmFsdWVfZmllbGQpOwotICB9Ci0KLSAgewotICAgIC8vIEFkZCB0aGUg
bWFwLWVudHJ5IG1lc3NhZ2UgdHlwZSB0byB0aGUgY3VycmVudCBidWlsZGVyLCBhbmQgdXNlIHRo
ZSB0eXBlCi0gICAgLy8gdG8gY3JlYXRlIHRoZSBtYXAgZmllbGQgaXRzZWxmLgotICAgIEJ1aWxk
ZXIqIGJ1aWxkZXJfc2VsZiA9IHJ1YnlfdG9fQnVpbGRlcihzZWxmLT5idWlsZGVyKTsKLSAgICBy
Yl9hcnlfcHVzaChidWlsZGVyX3NlbGYtPnBlbmRpbmdfbGlzdCwgbWFwZW50cnlfZGVzYyk7Ci0g
IH0KLQotICB7Ci0gICAgVkFMVUUgbWFwX2ZpZWxkID0gcmJfY2xhc3NfbmV3X2luc3RhbmNlKDAs
IE5VTEwsIGNGaWVsZERlc2NyaXB0b3IpOwotICAgIFZBTFVFIG5hbWVfc3RyID0gcmJfc3RyX25l
dzIocmJfaWQybmFtZShTWU0ySUQobmFtZSkpKTsKLSAgICBWQUxVRSBzdWJtc2dfbmFtZTsKLQot
ICAgIEZpZWxkRGVzY3JpcHRvcl9uYW1lX3NldChtYXBfZmllbGQsIG5hbWVfc3RyKTsKLSAgICBG
aWVsZERlc2NyaXB0b3JfbnVtYmVyX3NldChtYXBfZmllbGQsIG51bWJlcik7Ci0gICAgRmllbGRE
ZXNjcmlwdG9yX2xhYmVsX3NldChtYXBfZmllbGQsIElEMlNZTShyYl9pbnRlcm4oInJlcGVhdGVk
IikpKTsKLSAgICBGaWVsZERlc2NyaXB0b3JfdHlwZV9zZXQobWFwX2ZpZWxkLCBJRDJTWU0ocmJf
aW50ZXJuKCJtZXNzYWdlIikpKTsKLSAgICBzdWJtc2dfbmFtZSA9IHJiX3N0cl9uZXcyKCIuIik7
IC8vIHByZXBlbmQgJy4nIHRvIG1ha2UgbmFtZSBhYnNvbHV0ZS4KLSAgICBzdWJtc2dfbmFtZSA9
IHJiX3N0cl9hcHBlbmQoc3VibXNnX25hbWUsIG1hcGVudHJ5X2Rlc2NfbmFtZSk7Ci0gICAgRmll
bGREZXNjcmlwdG9yX3N1Ym1zZ19uYW1lX3NldChtYXBfZmllbGQsIHN1Ym1zZ19uYW1lKTsKLSAg
ICBEZXNjcmlwdG9yX2FkZF9maWVsZChzZWxmLT5kZXNjcmlwdG9yLCBtYXBfZmllbGQpOwotICB9
Ci0KLSAgcmV0dXJuIFFuaWw7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBNZXNzYWdl
QnVpbGRlckNvbnRleHQub25lb2YobmFtZSwgJmJsb2NrKSA9PiBuaWwKLSAqCi0gKiBDcmVhdGVz
IGEgbmV3IE9uZW9mRGVzY3JpcHRvciB3aXRoIHRoZSBnaXZlbiBuYW1lLCBjcmVhdGVzIGEKLSAq
IE9uZW9mQnVpbGRlckNvbnRleHQgYXR0YWNoZWQgdG8gdGhhdCBPbmVvZkRlc2NyaXB0b3IsIGV2
YWx1YXRlcyB0aGUgZ2l2ZW4KLSAqIGJsb2NrIGluIHRoZSBjb250ZXh0IG9mIHRoYXQgT25lb2ZC
dWlsZGVyQ29udGV4dCB3aXRoICNpbnN0YW5jZV9ldmFsLCBhbmQKLSAqIHRoZW4gYWRkcyB0aGUg
b25lb2YgdG8gdGhlIG1lc3NhZ2UuCi0gKgotICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQsIGlk
aW9tYXRpYyB3YXkgdG8gYnVpbGQgb25lb2YgZGVmaW5pdGlvbnMuCi0gKi8KLVZBTFVFIE1lc3Nh
Z2VCdWlsZGVyQ29udGV4dF9vbmVvZihWQUxVRSBfc2VsZiwgVkFMVUUgbmFtZSkgewotICBERUZJ
TkVfU0VMRihNZXNzYWdlQnVpbGRlckNvbnRleHQsIHNlbGYsIF9zZWxmKTsKLSAgVkFMVUUgb25l
b2ZkZWYgPSByYl9jbGFzc19uZXdfaW5zdGFuY2UoMCwgTlVMTCwgY09uZW9mRGVzY3JpcHRvcik7
Ci0gIFZBTFVFIGFyZ3NbMl0gPSB7IG9uZW9mZGVmLCBzZWxmLT5idWlsZGVyIH07Ci0gIFZBTFVF
IGN0eCA9IHJiX2NsYXNzX25ld19pbnN0YW5jZSgyLCBhcmdzLCBjT25lb2ZCdWlsZGVyQ29udGV4
dCk7Ci0gIFZBTFVFIGJsb2NrID0gcmJfYmxvY2tfcHJvYygpOwotICBWQUxVRSBuYW1lX3N0ciA9
IHJiX3N0cl9uZXcyKHJiX2lkMm5hbWUoU1lNMklEKG5hbWUpKSk7Ci0gIHJiX2Z1bmNhbGwob25l
b2ZkZWYsIHJiX2ludGVybigibmFtZT0iKSwgMSwgbmFtZV9zdHIpOwotICByYl9mdW5jYWxsX3dp
dGhfYmxvY2soY3R4LCByYl9pbnRlcm4oImluc3RhbmNlX2V2YWwiKSwgMCwgTlVMTCwgYmxvY2sp
OwotICBEZXNjcmlwdG9yX2FkZF9vbmVvZihzZWxmLT5kZXNjcmlwdG9yLCBvbmVvZmRlZik7Ci0K
LSAgcmV0dXJuIFFuaWw7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBPbmVvZkJ1
aWxkZXJDb250ZXh0LgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotREVGSU5FX0NMQVNTKE9u
ZW9mQnVpbGRlckNvbnRleHQsCi0gICAgIkdvb2dsZTo6UHJvdG9idWY6OkludGVybmFsOjpPbmVv
ZkJ1aWxkZXJDb250ZXh0Iik7Ci0KLXZvaWQgT25lb2ZCdWlsZGVyQ29udGV4dF9tYXJrKHZvaWQq
IF9zZWxmKSB7Ci0gIE9uZW9mQnVpbGRlckNvbnRleHQqIHNlbGYgPSBfc2VsZjsKLSAgcmJfZ2Nf
bWFyayhzZWxmLT5kZXNjcmlwdG9yKTsKLSAgcmJfZ2NfbWFyayhzZWxmLT5idWlsZGVyKTsKLX0K
LQotdm9pZCBPbmVvZkJ1aWxkZXJDb250ZXh0X2ZyZWUodm9pZCogX3NlbGYpIHsKLSAgT25lb2ZC
dWlsZGVyQ29udGV4dCogc2VsZiA9IF9zZWxmOwotICB4ZnJlZShzZWxmKTsKLX0KLQotVkFMVUUg
T25lb2ZCdWlsZGVyQ29udGV4dF9hbGxvYyhWQUxVRSBrbGFzcykgewotICBPbmVvZkJ1aWxkZXJD
b250ZXh0KiBzZWxmID0gQUxMT0MoT25lb2ZCdWlsZGVyQ29udGV4dCk7Ci0gIFZBTFVFIHJldCA9
IFR5cGVkRGF0YV9XcmFwX1N0cnVjdCgKLSAgICAgIGtsYXNzLCAmX09uZW9mQnVpbGRlckNvbnRl
eHRfdHlwZSwgc2VsZik7Ci0gIHNlbGYtPmRlc2NyaXB0b3IgPSBRbmlsOwotICBzZWxmLT5idWls
ZGVyID0gUW5pbDsKLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBPbmVvZkJ1aWxkZXJDb250ZXh0
X3JlZ2lzdGVyKFZBTFVFIG1vZHVsZSkgewotICBWQUxVRSBrbGFzcyA9IHJiX2RlZmluZV9jbGFz
c191bmRlcigKLSAgICAgIG1vZHVsZSwgIk9uZW9mQnVpbGRlckNvbnRleHQiLCByYl9jT2JqZWN0
KTsKLSAgcmJfZGVmaW5lX2FsbG9jX2Z1bmMoa2xhc3MsIE9uZW9mQnVpbGRlckNvbnRleHRfYWxs
b2MpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiaW5pdGlhbGl6ZSIsCi0gICAgICAgICAg
ICAgICAgICAgT25lb2ZCdWlsZGVyQ29udGV4dF9pbml0aWFsaXplLCAyKTsKLSAgcmJfZGVmaW5l
X21ldGhvZChrbGFzcywgIm9wdGlvbmFsIiwgT25lb2ZCdWlsZGVyQ29udGV4dF9vcHRpb25hbCwg
LTEpOwotICBjT25lb2ZCdWlsZGVyQ29udGV4dCA9IGtsYXNzOwotICByYl9nY19yZWdpc3Rlcl9h
ZGRyZXNzKCZjT25lb2ZCdWlsZGVyQ29udGV4dCk7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAq
ICAgICBPbmVvZkJ1aWxkZXJDb250ZXh0Lm5ldyhkZXNjLCBidWlsZGVyKSA9PiBjb250ZXh0Ci0g
KgotICogQ3JlYXRlIGEgbmV3IG9uZW9mIGJ1aWxkZXIgY29udGV4dCBhcm91bmQgdGhlIGdpdmVu
IG9uZW9mIGRlc2NyaXB0b3IgYW5kCi0gKiBidWlsZGVyIGNvbnRleHQuIFRoaXMgY2xhc3MgaXMg
aW50ZW5kZWQgdG8gc2VydmUgYXMgYSBEU0wgY29udGV4dCB0byBiZSB1c2VkCi0gKiB3aXRoICNp
bnN0YW5jZV9ldmFsLgotICovCi1WQUxVRSBPbmVvZkJ1aWxkZXJDb250ZXh0X2luaXRpYWxpemUo
VkFMVUUgX3NlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUUg
b25lb2ZkZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUUgYnVp
bGRlcikgewotICBERUZJTkVfU0VMRihPbmVvZkJ1aWxkZXJDb250ZXh0LCBzZWxmLCBfc2VsZik7
Ci0gIHNlbGYtPmRlc2NyaXB0b3IgPSBvbmVvZmRlZjsKLSAgc2VsZi0+YnVpbGRlciA9IGJ1aWxk
ZXI7Ci0gIHJldHVybiBRbmlsOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgT25lb2ZC
dWlsZGVyQ29udGV4dC5vcHRpb25hbChuYW1lLCB0eXBlLCBudW1iZXIsIHR5cGVfY2xhc3MgPSBu
aWwpCi0gKgotICogRGVmaW5lcyBhIG5ldyBvcHRpb25hbCBmaWVsZCBpbiB0aGlzIG9uZW9mIHdp
dGggdGhlIGdpdmVuIHR5cGUsIHRhZyBudW1iZXIsCi0gKiBhbmQgdHlwZSBjbGFzcyAoZm9yIG1l
c3NhZ2UgYW5kIGVudW0gZmllbGRzKS4gVGhlIHR5cGUgbXVzdCBiZSBhIFJ1Ynkgc3ltYm9sCi0g
KiAoYXMgYWNjZXB0ZWQgYnkgRmllbGREZXNjcmlwdG9yI3R5cGU9KSBhbmQgdGhlIHR5cGVfY2xh
c3MgbXVzdCBiZSBhIHN0cmluZywKLSAqIGlmIHByZXNlbnQgKGFzIGFjY2VwdGVkIGJ5IEZpZWxk
RGVzY3JpcHRvciNzdWJtc2dfbmFtZT0pLgotICovCi1WQUxVRSBPbmVvZkJ1aWxkZXJDb250ZXh0
X29wdGlvbmFsKGludCBhcmdjLCBWQUxVRSogYXJndiwgVkFMVUUgX3NlbGYpIHsKLSAgREVGSU5F
X1NFTEYoT25lb2ZCdWlsZGVyQ29udGV4dCwgc2VsZiwgX3NlbGYpOwotICBWQUxVRSBuYW1lLCB0
eXBlLCBudW1iZXIsIHR5cGVfY2xhc3M7Ci0KLSAgaWYgKGFyZ2MgPCAzKSB7Ci0gICAgcmJfcmFp
c2UocmJfZUFyZ0Vycm9yLCAiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMuIik7Ci0gIH0K
LSAgbmFtZSA9IGFyZ3ZbMF07Ci0gIHR5cGUgPSBhcmd2WzFdOwotICBudW1iZXIgPSBhcmd2WzJd
OwotICB0eXBlX2NsYXNzID0gKGFyZ2MgPiAzKSA/IGFyZ3ZbM10gOiBRbmlsOwotCi0gIHJldHVy
biBtc2dkZWZfYWRkX2ZpZWxkKHNlbGYtPmRlc2NyaXB0b3IsICJvcHRpb25hbCIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWUsIHR5cGUsIG51bWJlciwgdHlwZV9jbGFzcyk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBFbnVtQnVpbGRlckNvbnRleHQuCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1ERUZJTkVfQ0xBU1MoRW51bUJ1aWxkZXJDb250ZXh0LAotICAg
ICJHb29nbGU6OlByb3RvYnVmOjpJbnRlcm5hbDo6RW51bUJ1aWxkZXJDb250ZXh0Iik7Ci0KLXZv
aWQgRW51bUJ1aWxkZXJDb250ZXh0X21hcmsodm9pZCogX3NlbGYpIHsKLSAgRW51bUJ1aWxkZXJD
b250ZXh0KiBzZWxmID0gX3NlbGY7Ci0gIHJiX2djX21hcmsoc2VsZi0+ZW51bWRlc2MpOwotfQot
Ci12b2lkIEVudW1CdWlsZGVyQ29udGV4dF9mcmVlKHZvaWQqIF9zZWxmKSB7Ci0gIEVudW1CdWls
ZGVyQ29udGV4dCogc2VsZiA9IF9zZWxmOwotICB4ZnJlZShzZWxmKTsKLX0KLQotVkFMVUUgRW51
bUJ1aWxkZXJDb250ZXh0X2FsbG9jKFZBTFVFIGtsYXNzKSB7Ci0gIEVudW1CdWlsZGVyQ29udGV4
dCogc2VsZiA9IEFMTE9DKEVudW1CdWlsZGVyQ29udGV4dCk7Ci0gIFZBTFVFIHJldCA9IFR5cGVk
RGF0YV9XcmFwX1N0cnVjdCgKLSAgICAgIGtsYXNzLCAmX0VudW1CdWlsZGVyQ29udGV4dF90eXBl
LCBzZWxmKTsKLSAgc2VsZi0+ZW51bWRlc2MgPSBRbmlsOwotICByZXR1cm4gcmV0OwotfQotCi12
b2lkIEVudW1CdWlsZGVyQ29udGV4dF9yZWdpc3RlcihWQUxVRSBtb2R1bGUpIHsKLSAgVkFMVUUg
a2xhc3MgPSByYl9kZWZpbmVfY2xhc3NfdW5kZXIoCi0gICAgICBtb2R1bGUsICJFbnVtQnVpbGRl
ckNvbnRleHQiLCByYl9jT2JqZWN0KTsKLSAgcmJfZGVmaW5lX2FsbG9jX2Z1bmMoa2xhc3MsIEVu
dW1CdWlsZGVyQ29udGV4dF9hbGxvYyk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJpbml0
aWFsaXplIiwKLSAgICAgICAgICAgICAgICAgICBFbnVtQnVpbGRlckNvbnRleHRfaW5pdGlhbGl6
ZSwgMSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJ2YWx1ZSIsIEVudW1CdWlsZGVyQ29u
dGV4dF92YWx1ZSwgMik7Ci0gIGNFbnVtQnVpbGRlckNvbnRleHQgPSBrbGFzczsKLSAgcmJfZ2Nf
cmVnaXN0ZXJfYWRkcmVzcygmY0VudW1CdWlsZGVyQ29udGV4dCk7Ci19Ci0KLS8qCi0gKiBjYWxs
LXNlcToKLSAqICAgICBFbnVtQnVpbGRlckNvbnRleHQubmV3KGVudW1kZXNjKSA9PiBjb250ZXh0
Ci0gKgotICogQ3JlYXRlIGEgbmV3IGJ1aWxkZXIgY29udGV4dCBhcm91bmQgdGhlIGdpdmVuIGVu
dW0gZGVzY3JpcHRvci4gVGhpcyBjbGFzcyBpcwotICogaW50ZW5kZWQgdG8gc2VydmUgYXMgYSBE
U0wgY29udGV4dCB0byBiZSB1c2VkIHdpdGggI2luc3RhbmNlX2V2YWwuCi0gKi8KLVZBTFVFIEVu
dW1CdWlsZGVyQ29udGV4dF9pbml0aWFsaXplKFZBTFVFIF9zZWxmLCBWQUxVRSBlbnVtZGVmKSB7
Ci0gIERFRklORV9TRUxGKEVudW1CdWlsZGVyQ29udGV4dCwgc2VsZiwgX3NlbGYpOwotICBzZWxm
LT5lbnVtZGVzYyA9IGVudW1kZWY7Ci0gIHJldHVybiBRbmlsOwotfQotCi1zdGF0aWMgVkFMVUUg
ZW51bWRlZl9hZGRfdmFsdWUoVkFMVUUgZW51bWRlZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxVRSBuYW1lLCBWQUxVRSBudW1iZXIpIHsKLSAgcmJfZnVuY2FsbChlbnVtZGVm
LCByYl9pbnRlcm4oImFkZF92YWx1ZSIpLCAyLCBuYW1lLCBudW1iZXIpOwotICByZXR1cm4gUW5p
bDsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIEVudW1CdWlsZGVyLmFkZF92YWx1ZShu
YW1lLCBudW1iZXIpCi0gKgotICogQWRkcyB0aGUgZ2l2ZW4gbmFtZSA9PiBudW1iZXIgbWFwcGlu
ZyB0byB0aGUgZW51bSB0eXBlLiBOYW1lIG11c3QgYmUgYSBSdWJ5Ci0gKiBzeW1ib2wuCi0gKi8K
LVZBTFVFIEVudW1CdWlsZGVyQ29udGV4dF92YWx1ZShWQUxVRSBfc2VsZiwgVkFMVUUgbmFtZSwg
VkFMVUUgbnVtYmVyKSB7Ci0gIERFRklORV9TRUxGKEVudW1CdWlsZGVyQ29udGV4dCwgc2VsZiwg
X3NlbGYpOwotICByZXR1cm4gZW51bWRlZl9hZGRfdmFsdWUoc2VsZi0+ZW51bWRlc2MsIG5hbWUs
IG51bWJlcik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBCdWlsZGVyLgotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotREVGSU5FX0NMQVNTKEJ1aWxkZXIsICJHb29nbGU6OlBy
b3RvYnVmOjpJbnRlcm5hbDo6QnVpbGRlciIpOwotCi12b2lkIEJ1aWxkZXJfbWFyayh2b2lkKiBf
c2VsZikgewotICBCdWlsZGVyKiBzZWxmID0gX3NlbGY7Ci0gIHJiX2djX21hcmsoc2VsZi0+cGVu
ZGluZ19saXN0KTsKLX0KLQotdm9pZCBCdWlsZGVyX2ZyZWUodm9pZCogX3NlbGYpIHsKLSAgQnVp
bGRlciogc2VsZiA9IF9zZWxmOwotICB4ZnJlZShzZWxmLT5kZWZzKTsKLSAgeGZyZWUoc2VsZik7
Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBCdWlsZGVyLm5ldyA9PiBidWlsZGVyCi0g
KgotICogQ3JlYXRlcyBhIG5ldyBCdWlsZGVyLiBBIEJ1aWxkZXIgY2FuIGFjY3VtdWxhdGUgYSBz
ZXQgb2YgbmV3IG1lc3NhZ2UgYW5kIGVudW0KLSAqIGRlc2NyaXB0b3JzIGFuZCBhdG9taWNhbGx5
IHJlZ2lzdGVyIHRoZW0gaW50byBhIHBvb2wgaW4gYSB3YXkgdGhhdCBhbGxvd3MgZm9yCi0gKiAo
Y28pcmVjdXJzaXZlIHR5cGUgcmVmZXJlbmNlcy4KLSAqLwotVkFMVUUgQnVpbGRlcl9hbGxvYyhW
QUxVRSBrbGFzcykgewotICBCdWlsZGVyKiBzZWxmID0gQUxMT0MoQnVpbGRlcik7Ci0gIFZBTFVF
IHJldCA9IFR5cGVkRGF0YV9XcmFwX1N0cnVjdCgKLSAgICAgIGtsYXNzLCAmX0J1aWxkZXJfdHlw
ZSwgc2VsZik7Ci0gIHNlbGYtPnBlbmRpbmdfbGlzdCA9IHJiX2FyeV9uZXcoKTsKLSAgc2VsZi0+
ZGVmcyA9IE5VTEw7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXZvaWQgQnVpbGRlcl9yZWdpc3RlcihW
QUxVRSBtb2R1bGUpIHsKLSAgVkFMVUUga2xhc3MgPSByYl9kZWZpbmVfY2xhc3NfdW5kZXIobW9k
dWxlLCAiQnVpbGRlciIsIHJiX2NPYmplY3QpOwotICByYl9kZWZpbmVfYWxsb2NfZnVuYyhrbGFz
cywgQnVpbGRlcl9hbGxvYyk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJhZGRfbWVzc2Fn
ZSIsIEJ1aWxkZXJfYWRkX21lc3NhZ2UsIDEpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAi
YWRkX2VudW0iLCBCdWlsZGVyX2FkZF9lbnVtLCAxKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFz
cywgImZpbmFsaXplX3RvX3Bvb2wiLCBCdWlsZGVyX2ZpbmFsaXplX3RvX3Bvb2wsIDEpOwotICBj
QnVpbGRlciA9IGtsYXNzOwotICByYl9nY19yZWdpc3Rlcl9hZGRyZXNzKCZjQnVpbGRlcik7Ci19
Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBCdWlsZGVyLmFkZF9tZXNzYWdlKG5hbWUsICZi
bG9jaykKLSAqCi0gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSBkZXNjcmlwdG9yIHdpdGggdGhlIGdp
dmVuIG5hbWUsIGFuZCBpbnZva2VzIHRoZSBibG9jayBpbgotICogdGhlIGNvbnRleHQgb2YgYSBN
ZXNzYWdlQnVpbGRlckNvbnRleHQgb24gdGhhdCBkZXNjcmlwdG9yLiBUaGUgYmxvY2sgY2FuIHRo
ZW4KLSAqIGNhbGwsIGUuZy4sIE1lc3NhZ2VCdWlsZGVyQ29udGV4dCNvcHRpb25hbCBhbmQgTWVz
c2FnZUJ1aWxkZXJDb250ZXh0I3JlcGVhdGVkCi0gKiBtZXRob2RzIHRvIGRlZmluZSB0aGUgbWVz
c2FnZSBmaWVsZHMuCi0gKgotICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQsIGlkaW9tYXRpYyB3
YXkgdG8gYnVpbGQgbWVzc2FnZSBkZWZpbml0aW9ucy4KLSAqLwotVkFMVUUgQnVpbGRlcl9hZGRf
bWVzc2FnZShWQUxVRSBfc2VsZiwgVkFMVUUgbmFtZSkgewotICBERUZJTkVfU0VMRihCdWlsZGVy
LCBzZWxmLCBfc2VsZik7Ci0gIFZBTFVFIG1zZ2RlZiA9IHJiX2NsYXNzX25ld19pbnN0YW5jZSgw
LCBOVUxMLCBjRGVzY3JpcHRvcik7Ci0gIFZBTFVFIGFyZ3NbMl0gPSB7IG1zZ2RlZiwgX3NlbGYg
fTsKLSAgVkFMVUUgY3R4ID0gcmJfY2xhc3NfbmV3X2luc3RhbmNlKDIsIGFyZ3MsIGNNZXNzYWdl
QnVpbGRlckNvbnRleHQpOwotICBWQUxVRSBibG9jayA9IHJiX2Jsb2NrX3Byb2MoKTsKLSAgcmJf
ZnVuY2FsbChtc2dkZWYsIHJiX2ludGVybigibmFtZT0iKSwgMSwgbmFtZSk7Ci0gIHJiX2Z1bmNh
bGxfd2l0aF9ibG9jayhjdHgsIHJiX2ludGVybigiaW5zdGFuY2VfZXZhbCIpLCAwLCBOVUxMLCBi
bG9jayk7Ci0gIHJiX2FyeV9wdXNoKHNlbGYtPnBlbmRpbmdfbGlzdCwgbXNnZGVmKTsKLSAgcmV0
dXJuIFFuaWw7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBCdWlsZGVyLmFkZF9lbnVt
KG5hbWUsICZibG9jaykKLSAqCi0gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSBlbnVtIGRlc2NyaXB0
b3Igd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYW5kIGludm9rZXMgdGhlCi0gKiBibG9jayBpbiB0aGUg
Y29udGV4dCBvZiBhbiBFbnVtQnVpbGRlckNvbnRleHQgb24gdGhhdCBkZXNjcmlwdG9yLiBUaGUg
YmxvY2sKLSAqIGNhbiB0aGVuIGNhbGwgRW51bUJ1aWxkZXJDb250ZXh0I2FkZF92YWx1ZSB0byBk
ZWZpbmUgdGhlIGVudW0gdmFsdWVzLgotICoKLSAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkLCBp
ZGlvbWF0aWMgd2F5IHRvIGJ1aWxkIGVudW0gZGVmaW5pdGlvbnMuCi0gKi8KLVZBTFVFIEJ1aWxk
ZXJfYWRkX2VudW0oVkFMVUUgX3NlbGYsIFZBTFVFIG5hbWUpIHsKLSAgREVGSU5FX1NFTEYoQnVp
bGRlciwgc2VsZiwgX3NlbGYpOwotICBWQUxVRSBlbnVtZGVmID0gcmJfY2xhc3NfbmV3X2luc3Rh
bmNlKDAsIE5VTEwsIGNFbnVtRGVzY3JpcHRvcik7Ci0gIFZBTFVFIGN0eCA9IHJiX2NsYXNzX25l
d19pbnN0YW5jZSgxLCAmZW51bWRlZiwgY0VudW1CdWlsZGVyQ29udGV4dCk7Ci0gIFZBTFVFIGJs
b2NrID0gcmJfYmxvY2tfcHJvYygpOwotICByYl9mdW5jYWxsKGVudW1kZWYsIHJiX2ludGVybigi
bmFtZT0iKSwgMSwgbmFtZSk7Ci0gIHJiX2Z1bmNhbGxfd2l0aF9ibG9jayhjdHgsIHJiX2ludGVy
bigiaW5zdGFuY2VfZXZhbCIpLCAwLCBOVUxMLCBibG9jayk7Ci0gIHJiX2FyeV9wdXNoKHNlbGYt
PnBlbmRpbmdfbGlzdCwgZW51bWRlZik7Ci0gIHJldHVybiBRbmlsOwotfQotCi1zdGF0aWMgdm9p
ZCB2YWxpZGF0ZV9tc2dkZWYoY29uc3QgdXBiX21zZ2RlZiogbXNnZGVmKSB7Ci0gIC8vIFZlcmlm
eSB0aGF0IG5vIHJlcXVpcmVkIGZpZWxkcyBleGlzdC4gcHJvdG8zIGRvZXMgbm90IHN1cHBvcnQg
dGhlc2UuCi0gIHVwYl9tc2dfZmllbGRfaXRlciBpdDsKLSAgZm9yICh1cGJfbXNnX2ZpZWxkX2Jl
Z2luKCZpdCwgbXNnZGVmKTsKLSAgICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpdCk7Ci0gICAg
ICAgdXBiX21zZ19maWVsZF9uZXh0KCZpdCkpIHsKLSAgICBjb25zdCB1cGJfZmllbGRkZWYqIGZp
ZWxkID0gdXBiX21zZ19pdGVyX2ZpZWxkKCZpdCk7Ci0gICAgaWYgKHVwYl9maWVsZGRlZl9sYWJl
bChmaWVsZCkgPT0gVVBCX0xBQkVMX1JFUVVJUkVEKSB7Ci0gICAgICByYl9yYWlzZShyYl9lVHlw
ZUVycm9yLCAiUmVxdWlyZWQgZmllbGRzIGFyZSB1bnN1cHBvcnRlZCBpbiBwcm90bzMuIik7Ci0g
ICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGlkYXRlX2VudW1kZWYoY29uc3QgdXBiX2Vu
dW1kZWYqIGVudW1kZWYpIHsKLSAgLy8gVmVyaWZ5IHRoYXQgYW4gZW50cnkgZXhpc3RzIHdpdGgg
aW50ZWdlciB2YWx1ZSAwLiAoVGhpcyBpcyB0aGUgZGVmYXVsdAotICAvLyB2YWx1ZS4pCi0gIGNv
bnN0IGNoYXIqIGxvb2t1cCA9IHVwYl9lbnVtZGVmX2l0b24oZW51bWRlZiwgMCk7Ci0gIGlmIChs
b29rdXAgPT0gTlVMTCkgewotICAgIHJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsCi0gICAgICAgICAg
ICAgIkVudW0gZGVmaW5pdGlvbiBkb2VzIG5vdCBjb250YWluIGEgdmFsdWUgZm9yICcwJy4iKTsK
LSAgfQotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgQnVpbGRlci5maW5hbGl6ZV90b19w
b29sKHBvb2wpCi0gKgotICogQWRkcyBhbGwgYWNjdW11bGF0ZWQgbWVzc2FnZSBhbmQgZW51bSBk
ZXNjcmlwdG9ycyBjcmVhdGVkIGluIHRoaXMgYnVpbGRlcgotICogY29udGV4dCB0byB0aGUgZ2l2
ZW4gcG9vbC4gVGhlIG9wZXJhdGlvbiBvY2N1cnMgYXRvbWljYWxseSwgYW5kIGFsbAotICogZGVz
Y3JpcHRvcnMgY2FuIHJlZmVyIHRvIGVhY2ggb3RoZXIgKGluY2x1ZGluZyBpbiBjeWNsZXMpLiBU
aGlzIGlzIHRoZSBvbmx5Ci0gKiB3YXkgdG8gYnVpbGQgKGNvKXJlY3Vyc2l2ZSBtZXNzYWdlIGRl
ZmluaXRpb25zLgotICoKLSAqIFRoaXMgbWV0aG9kIGlzIHVzdWFsbHkgY2FsbGVkIGF1dG9tYXRp
Y2FsbHkgYnkgRGVzY3JpcHRvclBvb2wjYnVpbGQgYWZ0ZXIgaXQKLSAqIGludm9rZXMgdGhlIGdp
dmVuIHVzZXIgYmxvY2sgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJ1aWxkZXIuIFRoZSB1c2VyIHNo
b3VsZAotICogbm90IG5vcm1hbGx5IG5lZWQgdG8gY2FsbCB0aGlzIG1hbnVhbGx5IGJlY2F1c2Ug
YSBCdWlsZGVyIGlzIG5vdCBub3JtYWxseQotICogY3JlYXRlZCBtYW51YWxseS4KLSAqLwotVkFM
VUUgQnVpbGRlcl9maW5hbGl6ZV90b19wb29sKFZBTFVFIF9zZWxmLCBWQUxVRSBwb29sX3JiKSB7
Ci0gIERFRklORV9TRUxGKEJ1aWxkZXIsIHNlbGYsIF9zZWxmKTsKLQotICBEZXNjcmlwdG9yUG9v
bCogcG9vbCA9IHJ1YnlfdG9fRGVzY3JpcHRvclBvb2wocG9vbF9yYik7Ci0KLSAgUkVBTExPQ19O
KHNlbGYtPmRlZnMsIHVwYl9kZWYqLCBSQVJSQVlfTEVOKHNlbGYtPnBlbmRpbmdfbGlzdCkpOwot
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgUkFSUkFZX0xFTihzZWxmLT5wZW5kaW5nX2xpc3QpOyBp
KyspIHsKLSAgICBWQUxVRSBkZWZfcmIgPSByYl9hcnlfZW50cnkoc2VsZi0+cGVuZGluZ19saXN0
LCBpKTsKLSAgICBpZiAoQ0xBU1NfT0YoZGVmX3JiKSA9PSBjRGVzY3JpcHRvcikgewotICAgICAg
c2VsZi0+ZGVmc1tpXSA9ICh1cGJfZGVmKilydWJ5X3RvX0Rlc2NyaXB0b3IoZGVmX3JiKS0+bXNn
ZGVmOwotICAgICAgdmFsaWRhdGVfbXNnZGVmKChjb25zdCB1cGJfbXNnZGVmKilzZWxmLT5kZWZz
W2ldKTsKLSAgICB9IGVsc2UgaWYgKENMQVNTX09GKGRlZl9yYikgPT0gY0VudW1EZXNjcmlwdG9y
KSB7Ci0gICAgICBzZWxmLT5kZWZzW2ldID0gKHVwYl9kZWYqKXJ1YnlfdG9fRW51bURlc2NyaXB0
b3IoZGVmX3JiKS0+ZW51bWRlZjsKLSAgICAgIHZhbGlkYXRlX2VudW1kZWYoKGNvbnN0IHVwYl9l
bnVtZGVmKilzZWxmLT5kZWZzW2ldKTsKLSAgICB9Ci0gIH0KLQotICBDSEVDS19VUEIodXBiX3N5
bXRhYl9hZGQocG9vbC0+c3ltdGFiLCAodXBiX2RlZioqKXNlbGYtPmRlZnMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBSQVJSQVlfTEVOKHNlbGYtPnBlbmRpbmdfbGlzdCksIE5VTEwsICZz
dGF0dXMpLAotICAgICAgICAgICAgIlVuYWJsZSB0byBhZGQgZGVmcyB0byBEZXNjcmlwdG9yUG9v
bCIpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgUkFSUkFZX0xFTihzZWxmLT5wZW5kaW5nX2xp
c3QpOyBpKyspIHsKLSAgICBWQUxVRSBkZWZfcmIgPSByYl9hcnlfZW50cnkoc2VsZi0+cGVuZGlu
Z19saXN0LCBpKTsKLSAgICBhZGRfZGVmX29iaihzZWxmLT5kZWZzW2ldLCBkZWZfcmIpOwotICB9
Ci0KLSAgc2VsZi0+cGVuZGluZ19saXN0ID0gcmJfYXJ5X25ldygpOwotICByZXR1cm4gUW5pbDsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvcnVieS9leHQvZ29vZ2xlL3Byb3RvYnVmX2MvZW5jb2RlX2RlY29kZS5j
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9ydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy9lbmNvZGVfZGVjb2RlLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGY2YmVhNTBmMzk2NjY1MmE5M2YwY2U1NmIxMzNmYTRjZDczNjMz
YWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4
dC9nb29nbGUvcHJvdG9idWZfYy9lbmNvZGVfZGVjb2RlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjMzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVk
ZSAicHJvdG9idWYuaCIKLQotLy8gVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHJiX3N0
cl9jYXQoKSwgYnV0IHVubGlrZSB0aGUgcmVhbAotLy8gcmJfc3RyX2NhdCgpLCBpdCBkb2Vzbid0
IGxlYWsgbWVtb3J5IGluIHNvbWUgdmVyc2lvbnMgb2YgUnVieS4KLS8vIEZvciBtb3JlIGluZm9y
bWF0aW9uLCBzZWU6Ci0vLyAgIGh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xMTMy
OAotVkFMVUUgbm9sZWFrX3JiX3N0cl9jYXQoVkFMVUUgcmJfc3RyLCBjb25zdCBjaGFyICpzdHIs
IGxvbmcgbGVuKSB7Ci0gIGNoYXIgKnA7Ci0gIHNpemVfdCBvbGRsZW4gPSBSU1RSSU5HX0xFTihy
Yl9zdHIpOwotICByYl9zdHJfbW9kaWZ5X2V4cGFuZChyYl9zdHIsIGxlbik7Ci0gIHAgPSBSU1RS
SU5HX1BUUihyYl9zdHIpOwotICBtZW1jcHkocCArIG9sZGxlbiwgc3RyLCBsZW4pOwotICByYl9z
dHJfc2V0X2xlbihyYl9zdHIsIG9sZGxlbiArIGxlbik7Ci0gIHJldHVybiByYl9zdHI7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQYXJzaW5nLgotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotI2RlZmluZSBERVJFRihtc2csIG9mcywgdHlwZSkgKih0eXBlKikoKCh1aW50OF90
ICopbXNnKSArIG9mcykKLQotLy8gQ3JlYXRlcyBhIGhhbmRsZXJkYXRhIHRoYXQgc2ltcGx5IGNv
bnRhaW5zIHRoZSBvZmZzZXQgZm9yIHRoaXMgZmllbGQuCi1zdGF0aWMgY29uc3Qgdm9pZCogbmV3
aGFuZGxlcmRhdGEodXBiX2hhbmRsZXJzKiBoLCB1aW50MzJfdCBvZnMpIHsKLSAgc2l6ZV90KiBo
ZF9vZnMgPSBBTExPQyhzaXplX3QpOwotICAqaGRfb2ZzID0gb2ZzOwotICB1cGJfaGFuZGxlcnNf
YWRkY2xlYW51cChoLCBoZF9vZnMsIGZyZWUpOwotICByZXR1cm4gaGRfb2ZzOwotfQotCi10eXBl
ZGVmIHN0cnVjdCB7Ci0gIHNpemVfdCBvZnM7Ci0gIGNvbnN0IHVwYl9tc2dkZWYgKm1kOwotfSBz
dWJtc2dfaGFuZGxlcmRhdGFfdDsKLQotLy8gQ3JlYXRlcyBhIGhhbmRsZXJkYXRhIHRoYXQgY29u
dGFpbnMgb2Zmc2V0IGFuZCBzdWJtZXNzYWdlIHR5cGUgaW5mb3JtYXRpb24uCi1zdGF0aWMgY29u
c3Qgdm9pZCAqbmV3c3VibXNnaGFuZGxlcmRhdGEodXBiX2hhbmRsZXJzKiBoLCB1aW50MzJfdCBv
ZnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX2Zp
ZWxkZGVmKiBmKSB7Ci0gIHN1Ym1zZ19oYW5kbGVyZGF0YV90ICpoZCA9IEFMTE9DKHN1Ym1zZ19o
YW5kbGVyZGF0YV90KTsKLSAgaGQtPm9mcyA9IG9mczsKLSAgaGQtPm1kID0gdXBiX2ZpZWxkZGVm
X21zZ3N1YmRlZihmKTsKLSAgdXBiX2hhbmRsZXJzX2FkZGNsZWFudXAoaCwgaGQsIGZyZWUpOwot
ICByZXR1cm4gaGQ7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgc2l6ZV90IG9mczsgICAgICAg
ICAgICAgIC8vIHVuaW9uIGRhdGEgc2xvdAotICBzaXplX3QgY2FzZV9vZnM7ICAgICAgICAgLy8g
b25lb2ZfY2FzZSBmaWVsZAotICB1aW50MzJfdCBvbmVvZl9jYXNlX251bTsgLy8gb25lb2YtY2Fz
ZSBudW1iZXIgdG8gcGxhY2UgaW4gb25lb2ZfY2FzZSBmaWVsZAotICBjb25zdCB1cGJfbXNnZGVm
ICptZDsgICAgLy8gbXNnZGVmLCBmb3Igb25lb2Ygc3VibWVzc2FnZSBoYW5kbGVyCi19IG9uZW9m
X2hhbmRsZXJkYXRhX3Q7Ci0KLXN0YXRpYyBjb25zdCB2b2lkICpuZXdvbmVvZmhhbmRsZXJkYXRh
KHVwYl9oYW5kbGVycyAqaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IG9mcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGNhc2Vfb2ZzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIG9uZW9mX2hhbmRsZXJkYXRhX3QgKmhkID0gQUxM
T0Mob25lb2ZfaGFuZGxlcmRhdGFfdCk7Ci0gIGhkLT5vZnMgPSBvZnM7Ci0gIGhkLT5jYXNlX29m
cyA9IGNhc2Vfb2ZzOwotICAvLyBXZSByZXVzZSB0aGUgZmllbGQgdGFnIG51bWJlciBhcyBhIG9u
ZW9mIHVuaW9uIGRpc2NyaW1pbmFudCB0YWcuIE5vdGUgdGhhdAotICAvLyB3ZSBkb24ndCBleHBv
c2UgdGhlc2UgbnVtYmVycyB0byB0aGUgdXNlciwgc28gdGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMg
dGhhdAotICAvLyB3ZSBoYXZlIHNvbWUgdW5pcXVlIElEIGZvciBlYWNoIHVuaW9uIGNhc2UvcG9z
c2liaWxpdHkuIFRoZSBmaWVsZCB0YWcKLSAgLy8gbnVtYmVycyBhcmUgYWxyZWFkeSBwcmVzZW50
IGFuZCBhcmUgZWFzeSB0byB1c2Ugc28gdGhlcmUncyBubyByZWFzb24gdG8KLSAgLy8gY3JlYXRl
IGEgc2VwYXJhdGUgSUQgc3BhY2UuIEluIGFkZGl0aW9uLCB1c2luZyB0aGUgZmllbGQgdGFnIG51
bWJlciBoZXJlCi0gIC8vIGxldHMgdXMgZWFzaWx5IGxvb2sgdXAgdGhlIGZpZWxkIGluIHRoZSBv
bmVvZiBhY2Nlc3Nvci4KLSAgaGQtPm9uZW9mX2Nhc2VfbnVtID0gdXBiX2ZpZWxkZGVmX251bWJl
cihmKTsKLSAgaWYgKHVwYl9maWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX01FU1NBR0UpIHsK
LSAgICBoZC0+bWQgPSB1cGJfZmllbGRkZWZfbXNnc3ViZGVmKGYpOwotICB9IGVsc2UgewotICAg
IGhkLT5tZCA9IE5VTEw7Ci0gIH0KLSAgdXBiX2hhbmRsZXJzX2FkZGNsZWFudXAoaCwgaGQsIGZy
ZWUpOwotICByZXR1cm4gaGQ7Ci19Ci0KLS8vIEEgaGFuZGxlciB0aGF0IHN0YXJ0cyBhIHJlcGVh
dGVkIGZpZWxkLiAgR2V0cyB0aGUgUmVwZWF0ZWQqRmllbGQgaW5zdGFuY2UgZm9yCi0vLyB0aGlz
IGZpZWxkIChzdWNoIGFuIGluc3RhbmNlIGFsd2F5cyBleGlzdHMgZXZlbiBpbiBhbiBlbXB0eSBt
ZXNzYWdlKS4KLXN0YXRpYyB2b2lkICpzdGFydHNlcV9oYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNv
bnN0IHZvaWQqIGhkKSB7Ci0gIE1lc3NhZ2VIZWFkZXIqIG1zZyA9IGNsb3N1cmU7Ci0gIGNvbnN0
IHNpemVfdCAqb2ZzID0gaGQ7Ci0gIHJldHVybiAodm9pZCopREVSRUYobXNnLCAqb2ZzLCBWQUxV
RSk7Ci19Ci0KLS8vIEhhbmRsZXJzIHRoYXQgYXBwZW5kIHByaW1pdGl2ZSB2YWx1ZXMgdG8gYSBy
ZXBlYXRlZCBmaWVsZC4KLSNkZWZpbmUgREVGSU5FX0FQUEVORF9IQU5ETEVSKHR5cGUsIGN0eXBl
KSAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgYm9vbCBhcHBlbmQjI3R5cGUjI19oYW5kbGVy
KHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkLCBcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3R5cGUgdmFsKSB7ICAgICAgICAgICAgICAgICAgIFwKLSAgICBWQUxV
RSBhcnkgPSAoVkFMVUUpY2xvc3VyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIFJlcGVhdGVkRmllbGRfcHVzaF9uYXRpdmUoYXJ5LCAmdmFsKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi1ERUZJTkVfQVBQRU5EX0hB
TkRMRVIoYm9vbCwgICBib29sKQotREVGSU5FX0FQUEVORF9IQU5ETEVSKGludDMyLCAgaW50MzJf
dCkKLURFRklORV9BUFBFTkRfSEFORExFUih1aW50MzIsIHVpbnQzMl90KQotREVGSU5FX0FQUEVO
RF9IQU5ETEVSKGZsb2F0LCAgZmxvYXQpCi1ERUZJTkVfQVBQRU5EX0hBTkRMRVIoaW50NjQsICBp
bnQ2NF90KQotREVGSU5FX0FQUEVORF9IQU5ETEVSKHVpbnQ2NCwgdWludDY0X3QpCi1ERUZJTkVf
QVBQRU5EX0hBTkRMRVIoZG91YmxlLCBkb3VibGUpCi0KLS8vIEFwcGVuZHMgYSBzdHJpbmcgdG8g
YSByZXBlYXRlZCBmaWVsZC4KLXN0YXRpYyB2b2lkKiBhcHBlbmRzdHJfaGFuZGxlcih2b2lkICpj
bG9zdXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmhkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplX2hpbnQpIHsKLSAgVkFM
VUUgYXJ5ID0gKFZBTFVFKWNsb3N1cmU7Ci0gIFZBTFVFIHN0ciA9IHJiX3N0cl9uZXcyKCIiKTsK
LSAgcmJfZW5jX2Fzc29jaWF0ZShzdHIsIGtSdWJ5U3RyaW5nVXRmOEVuY29kaW5nKTsKLSAgUmVw
ZWF0ZWRGaWVsZF9wdXNoKGFyeSwgc3RyKTsKLSAgcmV0dXJuICh2b2lkKilzdHI7Ci19Ci0KLS8v
IEFwcGVuZHMgYSAnYnl0ZXMnIHN0cmluZyB0byBhIHJlcGVhdGVkIGZpZWxkLgotc3RhdGljIHZv
aWQqIGFwcGVuZGJ5dGVzX2hhbmRsZXIodm9pZCAqY2xvc3VyZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmhkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHNpemVfaGludCkgewotICBWQUxVRSBhcnkgPSAoVkFMVUUpY2xvc3Vy
ZTsKLSAgVkFMVUUgc3RyID0gcmJfc3RyX25ldzIoIiIpOwotICByYl9lbmNfYXNzb2NpYXRlKHN0
ciwga1J1YnlTdHJpbmc4Yml0RW5jb2RpbmcpOwotICBSZXBlYXRlZEZpZWxkX3B1c2goYXJ5LCBz
dHIpOwotICByZXR1cm4gKHZvaWQqKXN0cjsKLX0KLQotLy8gU2V0cyBhIG5vbi1yZXBlYXRlZCBz
dHJpbmcgZmllbGQgaW4gYSBtZXNzYWdlLgotc3RhdGljIHZvaWQqIHN0cl9oYW5kbGVyKHZvaWQg
KmNsb3N1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaGQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVfaGludCkgewotICBNZXNzYWdlSGVhZGVy
KiBtc2cgPSBjbG9zdXJlOwotICBjb25zdCBzaXplX3QgKm9mcyA9IGhkOwotICBWQUxVRSBzdHIg
PSByYl9zdHJfbmV3MigiIik7Ci0gIHJiX2VuY19hc3NvY2lhdGUoc3RyLCBrUnVieVN0cmluZ1V0
ZjhFbmNvZGluZyk7Ci0gIERFUkVGKG1zZywgKm9mcywgVkFMVUUpID0gc3RyOwotICByZXR1cm4g
KHZvaWQqKXN0cjsKLX0KLQotLy8gU2V0cyBhIG5vbi1yZXBlYXRlZCAnYnl0ZXMnIGZpZWxkIGlu
IGEgbWVzc2FnZS4KLXN0YXRpYyB2b2lkKiBieXRlc19oYW5kbGVyKHZvaWQgKmNsb3N1cmUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpoZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBzaXplX2hpbnQpIHsKLSAgTWVzc2FnZUhlYWRlciogbXNnID0g
Y2xvc3VyZTsKLSAgY29uc3Qgc2l6ZV90ICpvZnMgPSBoZDsKLSAgVkFMVUUgc3RyID0gcmJfc3Ry
X25ldzIoIiIpOwotICByYl9lbmNfYXNzb2NpYXRlKHN0ciwga1J1YnlTdHJpbmc4Yml0RW5jb2Rp
bmcpOwotICBERVJFRihtc2csICpvZnMsIFZBTFVFKSA9IHN0cjsKLSAgcmV0dXJuICh2b2lkKilz
dHI7Ci19Ci0KLXN0YXRpYyBzaXplX3Qgc3RyaW5nZGF0YV9oYW5kbGVyKHZvaWQqIGNsb3N1cmUs
IGNvbnN0IHZvaWQqIGhkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogc3RyLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdXBiX2J1ZmhhbmRsZSogaGFuZGxlKSB7Ci0gIFZBTFVFIHJiX3N0ciA9IChWQUxVRSlj
bG9zdXJlOwotICBub2xlYWtfcmJfc3RyX2NhdChyYl9zdHIsIHN0ciwgbGVuKTsKLSAgcmV0dXJu
IGxlbjsKLX0KLQotLy8gQXBwZW5kcyBhIHN1Ym1lc3NhZ2UgdG8gYSByZXBlYXRlZCBmaWVsZCAo
YSByZWd1bGFyIFJ1YnkgYXJyYXkgZm9yIG5vdykuCi1zdGF0aWMgdm9pZCAqYXBwZW5kc3VibXNn
X2hhbmRsZXIodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQpIHsKLSAgVkFMVUUgYXJ5ID0g
KFZBTFVFKWNsb3N1cmU7Ci0gIGNvbnN0IHN1Ym1zZ19oYW5kbGVyZGF0YV90ICpzdWJtc2dkYXRh
ID0gaGQ7Ci0gIFZBTFVFIHN1YmRlc2MgPQotICAgICAgZ2V0X2RlZl9vYmooKHZvaWQqKXN1Ym1z
Z2RhdGEtPm1kKTsKLSAgVkFMVUUgc3Via2xhc3MgPSBEZXNjcmlwdG9yX21zZ2NsYXNzKHN1YmRl
c2MpOwotICBNZXNzYWdlSGVhZGVyKiBzdWJtc2c7Ci0KLSAgVkFMVUUgc3VibXNnX3JiID0gcmJf
Y2xhc3NfbmV3X2luc3RhbmNlKDAsIE5VTEwsIHN1YmtsYXNzKTsKLSAgUmVwZWF0ZWRGaWVsZF9w
dXNoKGFyeSwgc3VibXNnX3JiKTsKLQotICBUeXBlZERhdGFfR2V0X1N0cnVjdChzdWJtc2dfcmIs
IE1lc3NhZ2VIZWFkZXIsICZNZXNzYWdlX3R5cGUsIHN1Ym1zZyk7Ci0gIHJldHVybiBzdWJtc2c7
Ci19Ci0KLS8vIFNldHMgYSBub24tcmVwZWF0ZWQgc3VibWVzc2FnZSBmaWVsZCBpbiBhIG1lc3Nh
Z2UuCi1zdGF0aWMgdm9pZCAqc3VibXNnX2hhbmRsZXIodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9p
ZCAqaGQpIHsKLSAgTWVzc2FnZUhlYWRlciogbXNnID0gY2xvc3VyZTsKLSAgY29uc3Qgc3VibXNn
X2hhbmRsZXJkYXRhX3QqIHN1Ym1zZ2RhdGEgPSBoZDsKLSAgVkFMVUUgc3ViZGVzYyA9Ci0gICAg
ICBnZXRfZGVmX29iaigodm9pZCopc3VibXNnZGF0YS0+bWQpOwotICBWQUxVRSBzdWJrbGFzcyA9
IERlc2NyaXB0b3JfbXNnY2xhc3Moc3ViZGVzYyk7Ci0gIFZBTFVFIHN1Ym1zZ19yYjsKLSAgTWVz
c2FnZUhlYWRlciogc3VibXNnOwotCi0gIGlmIChERVJFRihtc2csIHN1Ym1zZ2RhdGEtPm9mcywg
VkFMVUUpID09IFFuaWwpIHsKLSAgICBERVJFRihtc2csIHN1Ym1zZ2RhdGEtPm9mcywgVkFMVUUp
ID0KLSAgICAgICAgcmJfY2xhc3NfbmV3X2luc3RhbmNlKDAsIE5VTEwsIHN1YmtsYXNzKTsKLSAg
fQotCi0gIHN1Ym1zZ19yYiA9IERFUkVGKG1zZywgc3VibXNnZGF0YS0+b2ZzLCBWQUxVRSk7Ci0g
IFR5cGVkRGF0YV9HZXRfU3RydWN0KHN1Ym1zZ19yYiwgTWVzc2FnZUhlYWRlciwgJk1lc3NhZ2Vf
dHlwZSwgc3VibXNnKTsKLSAgcmV0dXJuIHN1Ym1zZzsKLX0KLQotLy8gSGFuZGxlciBkYXRhIGZv
ciBzdGFydG1hcC9lbmRtYXAgaGFuZGxlcnMuCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHNpemVfdCBv
ZnM7Ci0gIHVwYl9maWVsZHR5cGVfdCBrZXlfZmllbGRfdHlwZTsKLSAgdXBiX2ZpZWxkdHlwZV90
IHZhbHVlX2ZpZWxkX3R5cGU7Ci0KLSAgLy8gV2Uga25vdyB0aGF0IHdlIGNhbiBob2xkIHRoaXMg
cmVmZXJlbmNlIGJlY2F1c2UgdGhlIGhhbmRsZXJkYXRhIGhhcyB0aGUKLSAgLy8gc2FtZSBsaWZl
dGltZSBhcyB0aGUgdXBiX2hhbmRsZXJzIHN0cnVjdCwgYW5kIHRoZSB1cGJfaGFuZGxlcnMgc3Ry
dWN0IGhvbGRzCi0gIC8vIGEgcmVmZXJlbmNlIHRvIHRoZSB1cGJfbXNnZGVmLCB3aGljaCBpbiB0
dXJuIGhhcyByZWZlcmVuY2VzIHRvIGl0cyBzdWJkZWZzLgotICBjb25zdCB1cGJfZGVmKiB2YWx1
ZV9maWVsZF9zdWJkZWY7Ci19IG1hcF9oYW5kbGVyZGF0YV90OwotCi0vLyBUZW1wb3JhcnkgZnJh
bWUgZm9yIG1hcCBwYXJzaW5nOiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbWFwIGVudHJ5IG1lc3Nh
Z2UsIGEKLS8vIHN1Ym1zZyBoYW5kbGVyIGFsbG9jYXRlcyBhIGZyYW1lIHRvIGhvbGQgKGkpIGEg
cmVmZXJlbmNlIHRvIHRoZSBNYXAgb2JqZWN0Ci0vLyBpbnRvIHdoaWNoIHRoaXMgbWVzc2FnZSB3
aWxsIGJlIGluc2VydGVkIGFuZCAoaWkpIHN0b3JhZ2Ugc2xvdHMgdG8KLS8vIHRlbXBvcmFyaWx5
IGhvbGQgdGhlIGtleSBhbmQgdmFsdWUgZm9yIHRoaXMgbWFwIGVudHJ5IHVudGlsIHRoZSBlbmQg
b2YgdGhlCi0vLyBzdWJtZXNzYWdlLiBXaGVuIHRoZSBzdWJtZXNzYWdlIGVuZHMsIGFub3RoZXIg
aGFuZGxlciBpcyBjYWxsZWQgdG8gaW5zZXJ0IHRoZQotLy8gdmFsdWUgaW50byB0aGUgbWFwLgot
dHlwZWRlZiBzdHJ1Y3QgewotICBWQUxVRSBtYXA7Ci0gIGNoYXIga2V5X3N0b3JhZ2VbTkFUSVZF
X1NMT1RfTUFYX1NJWkVdOwotICBjaGFyIHZhbHVlX3N0b3JhZ2VbTkFUSVZFX1NMT1RfTUFYX1NJ
WkVdOwotfSBtYXBfcGFyc2VfZnJhbWVfdDsKLQotLy8gSGFuZGxlciB0byBiZWdpbiBhIG1hcCBl
bnRyeTogYWxsb2NhdGVzIGEgdGVtcG9yYXJ5IGZyYW1lLiBUaGlzIGlzIHRoZQotLy8gJ3N0YXJ0
c3VibXNnJyBoYW5kbGVyIG9uIHRoZSBtc2dkZWYgdGhhdCBjb250YWlucyB0aGUgbWFwIGZpZWxk
Lgotc3RhdGljIHZvaWQgKnN0YXJ0bWFwZW50cnlfaGFuZGxlcih2b2lkICpjbG9zdXJlLCBjb25z
dCB2b2lkICpoZCkgewotICBNZXNzYWdlSGVhZGVyKiBtc2cgPSBjbG9zdXJlOwotICBjb25zdCBt
YXBfaGFuZGxlcmRhdGFfdCogbWFwZGF0YSA9IGhkOwotICBWQUxVRSBtYXBfcmIgPSBERVJFRiht
c2csIG1hcGRhdGEtPm9mcywgVkFMVUUpOwotCi0gIG1hcF9wYXJzZV9mcmFtZV90KiBmcmFtZSA9
IEFMTE9DKG1hcF9wYXJzZV9mcmFtZV90KTsKLSAgZnJhbWUtPm1hcCA9IG1hcF9yYjsKLQotICBu
YXRpdmVfc2xvdF9pbml0KG1hcGRhdGEtPmtleV9maWVsZF90eXBlLCAmZnJhbWUtPmtleV9zdG9y
YWdlKTsKLSAgbmF0aXZlX3Nsb3RfaW5pdChtYXBkYXRhLT52YWx1ZV9maWVsZF90eXBlLCAmZnJh
bWUtPnZhbHVlX3N0b3JhZ2UpOwotCi0gIHJldHVybiBmcmFtZTsKLX0KLQotLy8gSGFuZGxlciB0
byBlbmQgYSBtYXAgZW50cnk6IGluc2VydHMgdGhlIHZhbHVlIGRlZmluZWQgZHVyaW5nIHRoZSBt
ZXNzYWdlIGludG8KLS8vIHRoZSBtYXAuIFRoaXMgaXMgdGhlICdlbmRtc2cnIGhhbmRsZXIgb24g
dGhlIG1hcCBlbnRyeSBtc2dkZWYuCi1zdGF0aWMgYm9vbCBlbmRtYXBfaGFuZGxlcih2b2lkICpj
bG9zdXJlLCBjb25zdCB2b2lkICpoZCwgdXBiX3N0YXR1cyogcykgewotICBtYXBfcGFyc2VfZnJh
bWVfdCogZnJhbWUgPSBjbG9zdXJlOwotICBjb25zdCBtYXBfaGFuZGxlcmRhdGFfdCogbWFwZGF0
YSA9IGhkOwotCi0gIFZBTFVFIGtleSA9IG5hdGl2ZV9zbG90X2dldCgKLSAgICAgIG1hcGRhdGEt
PmtleV9maWVsZF90eXBlLCBRbmlsLAotICAgICAgJmZyYW1lLT5rZXlfc3RvcmFnZSk7Ci0KLSAg
VkFMVUUgdmFsdWVfZmllbGRfdHlwZWNsYXNzID0gUW5pbDsKLSAgVkFMVUUgdmFsdWU7Ci0KLSAg
aWYgKG1hcGRhdGEtPnZhbHVlX2ZpZWxkX3R5cGUgPT0gVVBCX1RZUEVfTUVTU0FHRSB8fAotICAg
ICAgbWFwZGF0YS0+dmFsdWVfZmllbGRfdHlwZSA9PSBVUEJfVFlQRV9FTlVNKSB7Ci0gICAgdmFs
dWVfZmllbGRfdHlwZWNsYXNzID0gZ2V0X2RlZl9vYmoobWFwZGF0YS0+dmFsdWVfZmllbGRfc3Vi
ZGVmKTsKLSAgfQotCi0gIHZhbHVlID0gbmF0aXZlX3Nsb3RfZ2V0KAotICAgICAgbWFwZGF0YS0+
dmFsdWVfZmllbGRfdHlwZSwgdmFsdWVfZmllbGRfdHlwZWNsYXNzLAotICAgICAgJmZyYW1lLT52
YWx1ZV9zdG9yYWdlKTsKLQotICBNYXBfaW5kZXhfc2V0KGZyYW1lLT5tYXAsIGtleSwgdmFsdWUp
OwotICBmcmVlKGZyYW1lKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQWxsb2NhdGVzIGEg
bmV3IG1hcF9oYW5kbGVyZGF0YV90IGdpdmVuIHRoZSBtYXAgZW50cnkgbWVzc2FnZSBkZWZpbml0
aW9uLiBJZgotLy8gdGhlIG9mZnNldCBvZiB0aGUgZmllbGQgd2l0aGluIHRoZSBwYXJlbnQgbWVz
c2FnZSBpcyBhbHNvIGdpdmVuLCB0aGF0IGlzCi0vLyBhZGRlZCB0byB0aGUgaGFuZGxlciBkYXRh
IGFzIHdlbGwuIE5vdGUgdGhhdCB0aGlzIGlzIGNhbGxlZCAqdHdpY2UqIHBlciBtYXAKLS8vIGZp
ZWxkOiBvbmNlIGluIHRoZSBwYXJlbnQgbWVzc2FnZSBoYW5kbGVyIHNldHVwIHdoZW4gc2V0dGlu
ZyB0aGUgc3RhcnRzdWJtc2cKLS8vIGhhbmRsZXIgYW5kIG9uY2UgaW4gdGhlIG1hcCBlbnRyeSBt
ZXNzYWdlIGhhbmRsZXIgc2V0dXAgd2hlbiBzZXR0aW5nIHRoZQotLy8ga2V5L3ZhbHVlIGFuZCBl
bmRtc2cgaGFuZGxlcnMuIFRoZSByZWFzb24gaXMgdGhhdCB0aGVyZSBpcyBubyBlYXN5IHdheSB0
bwotLy8gcGFzcyB0aGUgaGFuZGxlcmRhdGEgZG93biB0byB0aGUgc3ViLW1lc3NhZ2UgaGFuZGxl
ciBzZXR1cC4KLXN0YXRpYyBtYXBfaGFuZGxlcmRhdGFfdCogbmV3X21hcF9oYW5kbGVyZGF0YSgK
LSAgICBzaXplX3Qgb2ZzLAotICAgIGNvbnN0IHVwYl9tc2dkZWYqIG1hcGVudHJ5X2RlZiwKLSAg
ICBEZXNjcmlwdG9yKiBkZXNjKSB7Ci0gIGNvbnN0IHVwYl9maWVsZGRlZioga2V5X2ZpZWxkOwot
ICBjb25zdCB1cGJfZmllbGRkZWYqIHZhbHVlX2ZpZWxkOwotICBtYXBfaGFuZGxlcmRhdGFfdCog
aGQgPSBBTExPQyhtYXBfaGFuZGxlcmRhdGFfdCk7Ci0gIGhkLT5vZnMgPSBvZnM7Ci0gIGtleV9m
aWVsZCA9IHVwYl9tc2dkZWZfaXRvZihtYXBlbnRyeV9kZWYsIE1BUF9LRVlfRklFTEQpOwotICBh
c3NlcnQoa2V5X2ZpZWxkICE9IE5VTEwpOwotICBoZC0+a2V5X2ZpZWxkX3R5cGUgPSB1cGJfZmll
bGRkZWZfdHlwZShrZXlfZmllbGQpOwotICB2YWx1ZV9maWVsZCA9IHVwYl9tc2dkZWZfaXRvZiht
YXBlbnRyeV9kZWYsIE1BUF9WQUxVRV9GSUVMRCk7Ci0gIGFzc2VydCh2YWx1ZV9maWVsZCAhPSBO
VUxMKTsKLSAgaGQtPnZhbHVlX2ZpZWxkX3R5cGUgPSB1cGJfZmllbGRkZWZfdHlwZSh2YWx1ZV9m
aWVsZCk7Ci0gIGhkLT52YWx1ZV9maWVsZF9zdWJkZWYgPSB1cGJfZmllbGRkZWZfc3ViZGVmKHZh
bHVlX2ZpZWxkKTsKLQotICByZXR1cm4gaGQ7Ci19Ci0KLS8vIEhhbmRsZXJzIHRoYXQgc2V0IHBy
aW1pdGl2ZSB2YWx1ZXMgaW4gb25lb2ZzLgotI2RlZmluZSBERUZJTkVfT05FT0ZfSEFORExFUih0
eXBlLCBjdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0YXRpYyBib29sIG9u
ZW9mIyN0eXBlIyNfaGFuZGxlcih2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZSB2YWwpIHsgICAgICAgICAg
ICAgICAgICAgXAotICAgIGNvbnN0IG9uZW9mX2hhbmRsZXJkYXRhX3QgKm9uZW9mZGF0YSA9IGhk
OyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgREVSRUYoY2xvc3VyZSwgb25lb2ZkYXRhLT5j
YXNlX29mcywgdWludDMyX3QpID0gICAgICAgICAgICAgICAgIFwKLSAgICAgICAgb25lb2ZkYXRh
LT5vbmVvZl9jYXNlX251bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IERFUkVGKGNsb3N1cmUsIG9uZW9mZGF0YS0+b2ZzLCBjdHlwZSkgPSB2YWw7ICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi1ERUZJTkVfT05FT0ZfSEFORExFUihib29s
LCAgIGJvb2wpCi1ERUZJTkVfT05FT0ZfSEFORExFUihpbnQzMiwgIGludDMyX3QpCi1ERUZJTkVf
T05FT0ZfSEFORExFUih1aW50MzIsIHVpbnQzMl90KQotREVGSU5FX09ORU9GX0hBTkRMRVIoZmxv
YXQsICBmbG9hdCkKLURFRklORV9PTkVPRl9IQU5ETEVSKGludDY0LCAgaW50NjRfdCkKLURFRklO
RV9PTkVPRl9IQU5ETEVSKHVpbnQ2NCwgdWludDY0X3QpCi1ERUZJTkVfT05FT0ZfSEFORExFUihk
b3VibGUsIGRvdWJsZSkKLQotI3VuZGVmIERFRklORV9PTkVPRl9IQU5ETEVSCi0KLS8vIEhhbmRs
ZXJzIGZvciBzdHJpbmdzIGluIGEgb25lb2YuCi1zdGF0aWMgdm9pZCAqb25lb2ZzdHJfaGFuZGxl
cih2b2lkICpjbG9zdXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqaGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZV9oaW50KSB7
Ci0gIE1lc3NhZ2VIZWFkZXIqIG1zZyA9IGNsb3N1cmU7Ci0gIGNvbnN0IG9uZW9mX2hhbmRsZXJk
YXRhX3QgKm9uZW9mZGF0YSA9IGhkOwotICBWQUxVRSBzdHIgPSByYl9zdHJfbmV3MigiIik7Ci0g
IHJiX2VuY19hc3NvY2lhdGUoc3RyLCBrUnVieVN0cmluZ1V0ZjhFbmNvZGluZyk7Ci0gIERFUkVG
KG1zZywgb25lb2ZkYXRhLT5jYXNlX29mcywgdWludDMyX3QpID0KLSAgICAgIG9uZW9mZGF0YS0+
b25lb2ZfY2FzZV9udW07Ci0gIERFUkVGKG1zZywgb25lb2ZkYXRhLT5vZnMsIFZBTFVFKSA9IHN0
cjsKLSAgcmV0dXJuICh2b2lkKilzdHI7Ci19Ci0KLXN0YXRpYyB2b2lkICpvbmVvZmJ5dGVzX2hh
bmRsZXIodm9pZCAqY2xvc3VyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdm9pZCAqaGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXpl
X2hpbnQpIHsKLSAgTWVzc2FnZUhlYWRlciogbXNnID0gY2xvc3VyZTsKLSAgY29uc3Qgb25lb2Zf
aGFuZGxlcmRhdGFfdCAqb25lb2ZkYXRhID0gaGQ7Ci0gIFZBTFVFIHN0ciA9IHJiX3N0cl9uZXcy
KCIiKTsKLSAgcmJfZW5jX2Fzc29jaWF0ZShzdHIsIGtSdWJ5U3RyaW5nOGJpdEVuY29kaW5nKTsK
LSAgREVSRUYobXNnLCBvbmVvZmRhdGEtPmNhc2Vfb2ZzLCB1aW50MzJfdCkgPQotICAgICAgb25l
b2ZkYXRhLT5vbmVvZl9jYXNlX251bTsKLSAgREVSRUYobXNnLCBvbmVvZmRhdGEtPm9mcywgVkFM
VUUpID0gc3RyOwotICByZXR1cm4gKHZvaWQqKXN0cjsKLX0KLQotLy8gSGFuZGxlciBmb3IgYSBz
dWJtZXNzYWdlIGZpZWxkIGluIGEgb25lb2YuCi1zdGF0aWMgdm9pZCAqb25lb2ZzdWJtc2dfaGFu
ZGxlcih2b2lkICpjbG9zdXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdm9pZCAqaGQpIHsKLSAgTWVzc2FnZUhlYWRlciogbXNnID0gY2xvc3VyZTsKLSAgY29uc3Qg
b25lb2ZfaGFuZGxlcmRhdGFfdCAqb25lb2ZkYXRhID0gaGQ7Ci0gIHVpbnQzMl90IG9sZGNhc2Ug
PSBERVJFRihtc2csIG9uZW9mZGF0YS0+Y2FzZV9vZnMsIHVpbnQzMl90KTsKLQotICBWQUxVRSBz
dWJkZXNjID0KLSAgICAgIGdldF9kZWZfb2JqKCh2b2lkKilvbmVvZmRhdGEtPm1kKTsKLSAgVkFM
VUUgc3Via2xhc3MgPSBEZXNjcmlwdG9yX21zZ2NsYXNzKHN1YmRlc2MpOwotICBWQUxVRSBzdWJt
c2dfcmI7Ci0gIE1lc3NhZ2VIZWFkZXIqIHN1Ym1zZzsKLQotICBpZiAob2xkY2FzZSAhPSBvbmVv
ZmRhdGEtPm9uZW9mX2Nhc2VfbnVtIHx8Ci0gICAgICBERVJFRihtc2csIG9uZW9mZGF0YS0+b2Zz
LCBWQUxVRSkgPT0gUW5pbCkgewotICAgIERFUkVGKG1zZywgb25lb2ZkYXRhLT5vZnMsIFZBTFVF
KSA9Ci0gICAgICAgIHJiX2NsYXNzX25ld19pbnN0YW5jZSgwLCBOVUxMLCBzdWJrbGFzcyk7Ci0g
IH0KLSAgLy8gU2V0IHRoZSBvbmVvZiBjYXNlICphZnRlciogYWxsb2NhdGluZyB0aGUgbmV3IGNs
YXNzIGluc3RhbmNlIC0tIG90aGVyd2lzZSwKLSAgLy8gaWYgdGhlIFJ1YnkgR0MgaXMgaW52b2tl
ZCBhcyBwYXJ0IG9mIGEgY2FsbCBpbnRvIHRoZSBWTSwgaXQgbWlnaHQgaW52b2tlCi0gIC8vIG91
ciBtYXJrIHJvdXRpbmVzLCBhbmQgb3VyIG1hcmsgcm91dGluZXMgbWlnaHQgc2VlIHRoZSBjYXNl
IHZhbHVlCi0gIC8vIGluZGljYXRpbmcgYSBWQUxVRSBpcyBwcmVzZW50IGFuZCBleHBlY3QgYSB2
YWxpZCBWQUxVRS4gU2VlIGNvbW1lbnQgaW4KLSAgLy8gbGF5b3V0X3NldCgpIGZvciBtb3JlIGRl
dGFpbDogYmFzaWNhbGx5LCB0aGUgY2hhbmdlIHRvIHRoZSB2YWx1ZSBhbmQgdGhlCi0gIC8vIGNh
c2UgbXVzdCBiZSBhdG9taWMgdy5yLnQuIHRoZSBSdWJ5IFZNLgotICBERVJFRihtc2csIG9uZW9m
ZGF0YS0+Y2FzZV9vZnMsIHVpbnQzMl90KSA9Ci0gICAgICBvbmVvZmRhdGEtPm9uZW9mX2Nhc2Vf
bnVtOwotCi0gIHN1Ym1zZ19yYiA9IERFUkVGKG1zZywgb25lb2ZkYXRhLT5vZnMsIFZBTFVFKTsK
LSAgVHlwZWREYXRhX0dldF9TdHJ1Y3Qoc3VibXNnX3JiLCBNZXNzYWdlSGVhZGVyLCAmTWVzc2Fn
ZV90eXBlLCBzdWJtc2cpOwotICByZXR1cm4gc3VibXNnOwotfQotCi0vLyBTZXQgdXAgaGFuZGxl
cnMgZm9yIGEgcmVwZWF0ZWQgZmllbGQuCi1zdGF0aWMgdm9pZCBhZGRfaGFuZGxlcnNfZm9yX3Jl
cGVhdGVkX2ZpZWxkKHVwYl9oYW5kbGVycyAqaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0KSB7Ci0gIHVwYl9oYW5k
bGVyYXR0ciBhdHRyID0gVVBCX0hBTkRMRVJBVFRSX0lOSVRJQUxJWkVSOwotICB1cGJfaGFuZGxl
cmF0dHJfc2V0aGFuZGxlcmRhdGEoJmF0dHIsIG5ld2hhbmRsZXJkYXRhKGgsIG9mZnNldCkpOwot
ICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzZXEoaCwgZiwgc3RhcnRzZXFfaGFuZGxlciwgJmF0dHIp
OwotICB1cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZhdHRyKTsKLQotICBzd2l0Y2ggKHVwYl9maWVs
ZGRlZl90eXBlKGYpKSB7Ci0KLSNkZWZpbmUgU0VUX0hBTkRMRVIodXR5cGUsIGx0eXBlKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY2FzZSB1dHlwZTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1cGJfaGFuZGxl
cnNfc2V0IyNsdHlwZShoLCBmLCBhcHBlbmQjI2x0eXBlIyNfaGFuZGxlciwgTlVMTCk7IFwKLSAg
ICBicmVhazsKLQotICAgIFNFVF9IQU5ETEVSKFVQQl9UWVBFX0JPT0wsICAgYm9vbCk7Ci0gICAg
U0VUX0hBTkRMRVIoVVBCX1RZUEVfSU5UMzIsICBpbnQzMik7Ci0gICAgU0VUX0hBTkRMRVIoVVBC
X1RZUEVfVUlOVDMyLCB1aW50MzIpOwotICAgIFNFVF9IQU5ETEVSKFVQQl9UWVBFX0VOVU0sICAg
aW50MzIpOwotICAgIFNFVF9IQU5ETEVSKFVQQl9UWVBFX0ZMT0FULCAgZmxvYXQpOwotICAgIFNF
VF9IQU5ETEVSKFVQQl9UWVBFX0lOVDY0LCAgaW50NjQpOwotICAgIFNFVF9IQU5ETEVSKFVQQl9U
WVBFX1VJTlQ2NCwgdWludDY0KTsKLSAgICBTRVRfSEFORExFUihVUEJfVFlQRV9ET1VCTEUsIGRv
dWJsZSk7Ci0KLSN1bmRlZiBTRVRfSEFORExFUgotCi0gICAgY2FzZSBVUEJfVFlQRV9TVFJJTkc6
Ci0gICAgY2FzZSBVUEJfVFlQRV9CWVRFUzogewotICAgICAgYm9vbCBpc19ieXRlcyA9IHVwYl9m
aWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX0JZVEVTOwotICAgICAgdXBiX2hhbmRsZXJzX3Nl
dHN0YXJ0c3RyKGgsIGYsIGlzX2J5dGVzID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRieXRlc19oYW5kbGVyIDogYXBwZW5kc3RyX2hhbmRsZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0c3RyaW5nKGgs
IGYsIHN0cmluZ2RhdGFfaGFuZGxlciwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBVUEJfVFlQRV9NRVNTQUdFOiB7Ci0gICAgICB1cGJfaGFuZGxlcmF0dHIgYXR0ciA9IFVQ
Ql9IQU5ETEVSQVRUUl9JTklUSUFMSVpFUjsKLSAgICAgIHVwYl9oYW5kbGVyYXR0cl9zZXRoYW5k
bGVyZGF0YSgmYXR0ciwgbmV3c3VibXNnaGFuZGxlcmRhdGEoaCwgMCwgZikpOwotICAgICAgdXBi
X2hhbmRsZXJzX3NldHN0YXJ0c3VibXNnKGgsIGYsIGFwcGVuZHN1Ym1zZ19oYW5kbGVyLCAmYXR0
cik7Ci0gICAgICB1cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZhdHRyKTsKLSAgICAgIGJyZWFrOwot
ICAgIH0KLSAgfQotfQotCi0vLyBTZXQgdXAgaGFuZGxlcnMgZm9yIGEgc2luZ3VsYXIgZmllbGQu
Ci1zdGF0aWMgdm9pZCBhZGRfaGFuZGxlcnNfZm9yX3Npbmd1bGFyX2ZpZWxkKHVwYl9oYW5kbGVy
cyAqaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgb2Zmc2V0KSB7Ci0gIHN3aXRjaCAodXBiX2ZpZWxkZGVmX3R5cGUoZikpIHsK
LSAgICBjYXNlIFVQQl9UWVBFX0JPT0w6Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQzMjoKLSAgICBj
YXNlIFVQQl9UWVBFX1VJTlQzMjoKLSAgICBjYXNlIFVQQl9UWVBFX0VOVU06Ci0gICAgY2FzZSBV
UEJfVFlQRV9GTE9BVDoKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDY0OgotICAgIGNhc2UgVVBCX1RZ
UEVfVUlOVDY0OgotICAgIGNhc2UgVVBCX1RZUEVfRE9VQkxFOgotICAgICAgdXBiX3NoaW1fc2V0
KGgsIGYsIG9mZnNldCwgLTEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9TVFJJ
Tkc6Ci0gICAgY2FzZSBVUEJfVFlQRV9CWVRFUzogewotICAgICAgYm9vbCBpc19ieXRlcyA9IHVw
Yl9maWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX0JZVEVTOwotICAgICAgdXBiX2hhbmRsZXJh
dHRyIGF0dHIgPSBVUEJfSEFORExFUkFUVFJfSU5JVElBTElaRVI7Ci0gICAgICB1cGJfaGFuZGxl
cmF0dHJfc2V0aGFuZGxlcmRhdGEoJmF0dHIsIG5ld2hhbmRsZXJkYXRhKGgsIG9mZnNldCkpOwot
ICAgICAgdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3RyKGgsIGYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNfYnl0ZXMgPyBieXRlc19oYW5kbGVyIDogc3RyX2hhbmRsZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0dHIpOwotICAgICAgdXBiX2hhbmRsZXJzX3Nl
dHN0cmluZyhoLCBmLCBzdHJpbmdkYXRhX2hhbmRsZXIsICZhdHRyKTsKLSAgICAgIHVwYl9oYW5k
bGVyYXR0cl91bmluaXQoJmF0dHIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVVBC
X1RZUEVfTUVTU0FHRTogewotICAgICAgdXBiX2hhbmRsZXJhdHRyIGF0dHIgPSBVUEJfSEFORExF
UkFUVFJfSU5JVElBTElaRVI7Ci0gICAgICB1cGJfaGFuZGxlcmF0dHJfc2V0aGFuZGxlcmRhdGEo
JmF0dHIsIG5ld3N1Ym1zZ2hhbmRsZXJkYXRhKGgsIG9mZnNldCwgZikpOwotICAgICAgdXBiX2hh
bmRsZXJzX3NldHN0YXJ0c3VibXNnKGgsIGYsIHN1Ym1zZ19oYW5kbGVyLCAmYXR0cik7Ci0gICAg
ICB1cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZhdHRyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAg
fQotfQotCi0vLyBBZGRzIGhhbmRsZXJzIHRvIGEgbWFwIGZpZWxkLgotc3RhdGljIHZvaWQgYWRk
X2hhbmRsZXJzX2Zvcl9tYXBmaWVsZCh1cGJfaGFuZGxlcnMqIGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGRkZWYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3IqIGRlc2MpIHsKLSAgY29u
c3QgdXBiX21zZ2RlZiogbWFwX21zZ2RlZiA9IHVwYl9maWVsZGRlZl9tc2dzdWJkZWYoZmllbGRk
ZWYpOwotICBtYXBfaGFuZGxlcmRhdGFfdCogaGQgPSBuZXdfbWFwX2hhbmRsZXJkYXRhKG9mZnNl
dCwgbWFwX21zZ2RlZiwgZGVzYyk7Ci0gIHVwYl9oYW5kbGVyYXR0ciBhdHRyID0gVVBCX0hBTkRM
RVJBVFRSX0lOSVRJQUxJWkVSOwotCi0gIHVwYl9oYW5kbGVyc19hZGRjbGVhbnVwKGgsIGhkLCBm
cmVlKTsKLSAgdXBiX2hhbmRsZXJhdHRyX3NldGhhbmRsZXJkYXRhKCZhdHRyLCBoZCk7Ci0gIHVw
Yl9oYW5kbGVyc19zZXRzdGFydHN1Ym1zZyhoLCBmaWVsZGRlZiwgc3RhcnRtYXBlbnRyeV9oYW5k
bGVyLCAmYXR0cik7Ci0gIHVwYl9oYW5kbGVyYXR0cl91bmluaXQoJmF0dHIpOwotfQotCi0vLyBB
ZGRzIGhhbmRsZXJzIHRvIGEgbWFwLWVudHJ5IG1zZ2RlZi4KLXN0YXRpYyB2b2lkIGFkZF9oYW5k
bGVyc19mb3JfbWFwZW50cnkoY29uc3QgdXBiX21zZ2RlZiogbXNnZGVmLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxlcnMqIGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3IqIGRlc2MpIHsKLSAgY29uc3QgdXBi
X2ZpZWxkZGVmKiBrZXlfZmllbGQgPSBtYXBfZW50cnlfa2V5KG1zZ2RlZik7Ci0gIGNvbnN0IHVw
Yl9maWVsZGRlZiogdmFsdWVfZmllbGQgPSBtYXBfZW50cnlfdmFsdWUobXNnZGVmKTsKLSAgbWFw
X2hhbmRsZXJkYXRhX3QqIGhkID0gbmV3X21hcF9oYW5kbGVyZGF0YSgwLCBtc2dkZWYsIGRlc2Mp
OwotICB1cGJfaGFuZGxlcmF0dHIgYXR0ciA9IFVQQl9IQU5ETEVSQVRUUl9JTklUSUFMSVpFUjsK
LQotICB1cGJfaGFuZGxlcnNfYWRkY2xlYW51cChoLCBoZCwgZnJlZSk7Ci0gIHVwYl9oYW5kbGVy
YXR0cl9zZXRoYW5kbGVyZGF0YSgmYXR0ciwgaGQpOwotICB1cGJfaGFuZGxlcnNfc2V0ZW5kbXNn
KGgsIGVuZG1hcF9oYW5kbGVyLCAmYXR0cik7Ci0KLSAgYWRkX2hhbmRsZXJzX2Zvcl9zaW5ndWxh
cl9maWVsZCgKLSAgICAgIGgsIGtleV9maWVsZCwKLSAgICAgIG9mZnNldG9mKG1hcF9wYXJzZV9m
cmFtZV90LCBrZXlfc3RvcmFnZSkpOwotICBhZGRfaGFuZGxlcnNfZm9yX3Npbmd1bGFyX2ZpZWxk
KAotICAgICAgaCwgdmFsdWVfZmllbGQsCi0gICAgICBvZmZzZXRvZihtYXBfcGFyc2VfZnJhbWVf
dCwgdmFsdWVfc3RvcmFnZSkpOwotfQotCi0vLyBTZXQgdXAgaGFuZGxlcnMgZm9yIGEgb25lb2Yg
ZmllbGQuCi1zdGF0aWMgdm9pZCBhZGRfaGFuZGxlcnNfZm9yX29uZW9mX2ZpZWxkKHVwYl9oYW5k
bGVycyAqaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgb25lb2ZfY2FzZV9vZmZzZXQpIHsKLQotICB1cGJfaGFuZGxlcmF0dHIgYXR0ciA9
IFVQQl9IQU5ETEVSQVRUUl9JTklUSUFMSVpFUjsKLSAgdXBiX2hhbmRsZXJhdHRyX3NldGhhbmRs
ZXJkYXRhKAotICAgICAgJmF0dHIsIG5ld29uZW9maGFuZGxlcmRhdGEoaCwgb2Zmc2V0LCBvbmVv
Zl9jYXNlX29mZnNldCwgZikpOwotCi0gIHN3aXRjaCAodXBiX2ZpZWxkZGVmX3R5cGUoZikpIHsK
LQotI2RlZmluZSBTRVRfSEFORExFUih1dHlwZSwgbHR5cGUpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBjYXNlIHV0eXBlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHVwYl9oYW5kbGVyc19zZXQjI2x0eXBlKGgs
IGYsIG9uZW9mIyNsdHlwZSMjX2hhbmRsZXIsICZhdHRyKTsgXAotICAgIGJyZWFrOwotCi0gICAg
U0VUX0hBTkRMRVIoVVBCX1RZUEVfQk9PTCwgICBib29sKTsKLSAgICBTRVRfSEFORExFUihVUEJf
VFlQRV9JTlQzMiwgIGludDMyKTsKLSAgICBTRVRfSEFORExFUihVUEJfVFlQRV9VSU5UMzIsIHVp
bnQzMik7Ci0gICAgU0VUX0hBTkRMRVIoVVBCX1RZUEVfRU5VTSwgICBpbnQzMik7Ci0gICAgU0VU
X0hBTkRMRVIoVVBCX1RZUEVfRkxPQVQsICBmbG9hdCk7Ci0gICAgU0VUX0hBTkRMRVIoVVBCX1RZ
UEVfSU5UNjQsICBpbnQ2NCk7Ci0gICAgU0VUX0hBTkRMRVIoVVBCX1RZUEVfVUlOVDY0LCB1aW50
NjQpOwotICAgIFNFVF9IQU5ETEVSKFVQQl9UWVBFX0RPVUJMRSwgZG91YmxlKTsKLQotI3VuZGVm
IFNFVF9IQU5ETEVSCi0KLSAgICBjYXNlIFVQQl9UWVBFX1NUUklORzoKLSAgICBjYXNlIFVQQl9U
WVBFX0JZVEVTOiB7Ci0gICAgICBib29sIGlzX2J5dGVzID0gdXBiX2ZpZWxkZGVmX3R5cGUoZikg
PT0gVVBCX1RZUEVfQllURVM7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzdHIoaCwgZiwg
aXNfYnl0ZXMgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZW9mYnl0ZXNfaGFu
ZGxlciA6IG9uZW9mc3RyX2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JmF0dHIpOwotICAgICAgdXBiX2hhbmRsZXJzX3NldHN0cmluZyhoLCBmLCBzdHJpbmdkYXRhX2hh
bmRsZXIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVVBCX1RZUEVfTUVT
U0FHRTogewotICAgICAgdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3VibXNnKGgsIGYsIG9uZW9mc3Vi
bXNnX2hhbmRsZXIsICZhdHRyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHVwYl9o
YW5kbGVyYXR0cl91bmluaXQoJmF0dHIpOwotfQotCi0KLXN0YXRpYyB2b2lkIGFkZF9oYW5kbGVy
c19mb3JfbWVzc2FnZShjb25zdCB2b2lkICpjbG9zdXJlLCB1cGJfaGFuZGxlcnMgKmgpIHsKLSAg
Y29uc3QgdXBiX21zZ2RlZiogbXNnZGVmID0gdXBiX2hhbmRsZXJzX21zZ2RlZihoKTsKLSAgRGVz
Y3JpcHRvciogZGVzYyA9IHJ1YnlfdG9fRGVzY3JpcHRvcihnZXRfZGVmX29iaigodm9pZCopbXNn
ZGVmKSk7Ci0gIHVwYl9tc2dfZmllbGRfaXRlciBpOwotCi0gIC8vIElmIHRoaXMgaXMgYSBtYXBl
bnRyeSBtZXNzYWdlIHR5cGUsIHNldCB1cCBhIHNwZWNpYWwgc2V0IG9mIGhhbmRsZXJzIGFuZAot
ICAvLyBiYWlsIG91dCBvZiB0aGUgbm9ybWFsICh1c2VyLWRlZmluZWQpIG1lc3NhZ2UgdHlwZSBo
YW5kbGluZy4KLSAgaWYgKHVwYl9tc2dkZWZfbWFwZW50cnkobXNnZGVmKSkgewotICAgIGFkZF9o
YW5kbGVyc19mb3JfbWFwZW50cnkobXNnZGVmLCBoLCBkZXNjKTsKLSAgICByZXR1cm47Ci0gIH0K
LQotICAvLyBFbnN1cmUgbGF5b3V0IGV4aXN0cy4gV2UgbWF5IGJlIGludm9rZWQgdG8gY3JlYXRl
IGhhbmRsZXJzIGZvciBhIGdpdmVuCi0gIC8vIG1lc3NhZ2UgaWYgd2UgYXJlIGluY2x1ZGVkIGFz
IGEgc3VibXNnIG9mIGFub3RoZXIgbWVzc2FnZSB0eXBlIGJlZm9yZSBvdXIKLSAgLy8gY2xhc3Mg
aXMgYWN0dWFsbHkgYnVpbHQsIHNvIHRvIHdvcmsgYXJvdW5kIHRoaXMsIHdlIGp1c3QgY3JlYXRl
IHRoZSBsYXlvdXQKLSAgLy8gKGFuZCBoYW5kbGVycywgaW4gdGhlIGNsYXNzLWJ1aWxkaW5nIGZ1
bmN0aW9uKSBvbi1kZW1hbmQuCi0gIGlmIChkZXNjLT5sYXlvdXQgPT0gTlVMTCkgewotICAgIGRl
c2MtPmxheW91dCA9IGNyZWF0ZV9sYXlvdXQoZGVzYy0+bXNnZGVmKTsKLSAgfQotCi0gIGZvciAo
dXBiX21zZ19maWVsZF9iZWdpbigmaSwgZGVzYy0+bXNnZGVmKTsKLSAgICAgICAhdXBiX21zZ19m
aWVsZF9kb25lKCZpKTsKLSAgICAgICB1cGJfbXNnX2ZpZWxkX25leHQoJmkpKSB7Ci0gICAgY29u
c3QgdXBiX2ZpZWxkZGVmICpmID0gdXBiX21zZ19pdGVyX2ZpZWxkKCZpKTsKLSAgICBzaXplX3Qg
b2Zmc2V0ID0gZGVzYy0+bGF5b3V0LT5maWVsZHNbdXBiX2ZpZWxkZGVmX2luZGV4KGYpXS5vZmZz
ZXQgKwotICAgICAgICBzaXplb2YoTWVzc2FnZUhlYWRlcik7Ci0KLSAgICBpZiAodXBiX2ZpZWxk
ZGVmX2NvbnRhaW5pbmdvbmVvZihmKSkgewotICAgICAgc2l6ZV90IG9uZW9mX2Nhc2Vfb2Zmc2V0
ID0KLSAgICAgICAgICBkZXNjLT5sYXlvdXQtPmZpZWxkc1t1cGJfZmllbGRkZWZfaW5kZXgoZild
LmNhc2Vfb2Zmc2V0ICsKLSAgICAgICAgICBzaXplb2YoTWVzc2FnZUhlYWRlcik7Ci0gICAgICBh
ZGRfaGFuZGxlcnNfZm9yX29uZW9mX2ZpZWxkKGgsIGYsIG9mZnNldCwgb25lb2ZfY2FzZV9vZmZz
ZXQpOwotICAgIH0gZWxzZSBpZiAoaXNfbWFwX2ZpZWxkKGYpKSB7Ci0gICAgICBhZGRfaGFuZGxl
cnNfZm9yX21hcGZpZWxkKGgsIGYsIG9mZnNldCwgZGVzYyk7Ci0gICAgfSBlbHNlIGlmICh1cGJf
ZmllbGRkZWZfaXNzZXEoZikpIHsKLSAgICAgIGFkZF9oYW5kbGVyc19mb3JfcmVwZWF0ZWRfZmll
bGQoaCwgZiwgb2Zmc2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgYWRkX2hhbmRsZXJzX2Zvcl9z
aW5ndWxhcl9maWVsZChoLCBmLCBvZmZzZXQpOwotICAgIH0KLSAgfQotfQotCi0vLyBDcmVhdGVz
IHVwYiBoYW5kbGVycyBmb3IgcG9wdWxhdGluZyBhIG1lc3NhZ2UuCi1zdGF0aWMgY29uc3QgdXBi
X2hhbmRsZXJzICpuZXdfZmlsbF9oYW5kbGVycyhEZXNjcmlwdG9yKiBkZXNjLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogb3duZXIpIHsK
LSAgLy8gVE9ETyhjZmFsbGluLCBoYWJlcm1hbik6IG9uY2UgdXBiIGdldHMgYSBjYWNoaW5nL21l
bW9pemF0aW9uIGxheWVyIGZvcgotICAvLyBoYW5kbGVycywgcmV1c2Ugc3ViZGVmIGhhbmRsZXJz
IHNvIHRoYXQgZS5nLiBpZiB3ZSBhbHJlYWR5IHBhcnNlCi0gIC8vIEItd2l0aC1maWVsZC1vZi10
eXBlLUMsIHdlIGRvbid0IGhhdmUgdG8gcmVidWlsZCB0aGUgd2hvbGUgaGllcmFyY2h5IHRvCi0g
IC8vIHBhcnNlIEEtd2l0aC1maWVsZC1vZi10eXBlLUItd2l0aC1maWVsZC1vZi10eXBlLUMuCi0g
IHJldHVybiB1cGJfaGFuZGxlcnNfbmV3ZnJvemVuKGRlc2MtPm1zZ2RlZiwgb3duZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9oYW5kbGVyc19mb3JfbWVzc2FnZSwgTlVM
TCk7Ci19Ci0KLS8vIENvbnN0cnVjdHMgdGhlIGhhbmRsZXJzIGZvciBmaWxsaW5nIGEgbWVzc2Fn
ZSdzIGRhdGEgaW50byBhbiBpbi1tZW1vcnkKLS8vIG9iamVjdC4KLWNvbnN0IHVwYl9oYW5kbGVy
cyogZ2V0X2ZpbGxfaGFuZGxlcnMoRGVzY3JpcHRvciogZGVzYykgewotICBpZiAoIWRlc2MtPmZp
bGxfaGFuZGxlcnMpIHsKLSAgICBkZXNjLT5maWxsX2hhbmRsZXJzID0KLSAgICAgICAgbmV3X2Zp
bGxfaGFuZGxlcnMoZGVzYywgJmRlc2MtPmZpbGxfaGFuZGxlcnMpOwotICB9Ci0gIHJldHVybiBk
ZXNjLT5maWxsX2hhbmRsZXJzOwotfQotCi0vLyBDb25zdHJ1Y3RzIHRoZSB1cGIgZGVjb2RlciBt
ZXRob2QgZm9yIHBhcnNpbmcgbWVzc2FnZXMgb2YgdGhpcyB0eXBlLgotLy8gVGhpcyBpcyBjYWxs
ZWQgZnJvbSB0aGUgbWVzc2FnZSBjbGFzcyBjcmVhdGlvbiBjb2RlLgotY29uc3QgdXBiX3BiZGVj
b2Rlcm1ldGhvZCAqbmV3X2ZpbGxtc2dfZGVjb2Rlcm1ldGhvZChEZXNjcmlwdG9yKiBkZXNjLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkKiBvd25lcikgewotICBjb25zdCB1cGJfaGFuZGxlcnMqIGhhbmRsZXJzID0gZ2V0X2Zp
bGxfaGFuZGxlcnMoZGVzYyk7Ci0gIHVwYl9wYmRlY29kZXJtZXRob2RvcHRzIG9wdHM7Ci0gIHVw
Yl9wYmRlY29kZXJtZXRob2RvcHRzX2luaXQoJm9wdHMsIGhhbmRsZXJzKTsKLQotICByZXR1cm4g
dXBiX3BiZGVjb2Rlcm1ldGhvZF9uZXcoJm9wdHMsIG93bmVyKTsKLX0KLQotc3RhdGljIGNvbnN0
IHVwYl9wYmRlY29kZXJtZXRob2QgKm1zZ2RlZl9kZWNvZGVybWV0aG9kKERlc2NyaXB0b3IqIGRl
c2MpIHsKLSAgaWYgKGRlc2MtPmZpbGxfbWV0aG9kID09IE5VTEwpIHsKLSAgICBkZXNjLT5maWxs
X21ldGhvZCA9IG5ld19maWxsbXNnX2RlY29kZXJtZXRob2QoCi0gICAgICAgIGRlc2MsICZkZXNj
LT5maWxsX21ldGhvZCk7Ci0gIH0KLSAgcmV0dXJuIGRlc2MtPmZpbGxfbWV0aG9kOwotfQotCi1z
dGF0aWMgY29uc3QgdXBiX2pzb25fcGFyc2VybWV0aG9kICptc2dkZWZfanNvbnBhcnNlcm1ldGhv
ZChEZXNjcmlwdG9yKiBkZXNjKSB7Ci0gIGlmIChkZXNjLT5qc29uX2ZpbGxfbWV0aG9kID09IE5V
TEwpIHsKLSAgICBkZXNjLT5qc29uX2ZpbGxfbWV0aG9kID0KLSAgICAgICAgdXBiX2pzb25fcGFy
c2VybWV0aG9kX25ldyhkZXNjLT5tc2dkZWYsICZkZXNjLT5qc29uX2ZpbGxfbWV0aG9kKTsKLSAg
fQotICByZXR1cm4gZGVzYy0+anNvbl9maWxsX21ldGhvZDsKLX0KLQotCi0vLyBTdGFjay1hbGxv
Y2F0ZWQgY29udGV4dCBkdXJpbmcgYW4gZW5jb2RlL2RlY29kZSBvcGVyYXRpb24uIENvbnRhaW5z
IHRoZSB1cGIKLS8vIGVudmlyb25tZW50IGFuZCBpdHMgc3RhY2stYmFzZWQgYWxsb2NhdG9yLCBh
biBpbml0aWFsIGJ1ZmZlciBmb3IgYWxsb2NhdGlvbnMKLS8vIHRvIGF2b2lkIG1hbGxvYygpIHdo
ZW4gcG9zc2libGUsIGFuZCBhIHRlbXBsYXRlIGZvciBSdWJ5IGV4Y2VwdGlvbiBtZXNzYWdlcwot
Ly8gaWYgYW55IGVycm9yIG9jY3Vycy4KLSNkZWZpbmUgU1RBQ0tfRU5WX1NUQUNLQllURVMgNDA5
NgotdHlwZWRlZiBzdHJ1Y3QgewotICB1cGJfZW52IGVudjsKLSAgY29uc3QgY2hhciogcnVieV9l
cnJvcl90ZW1wbGF0ZTsKLSAgY2hhciBhbGxvY2J1ZltTVEFDS19FTlZfU1RBQ0tCWVRFU107Ci19
IHN0YWNrZW52OwotCi1zdGF0aWMgdm9pZCBzdGFja2Vudl9pbml0KHN0YWNrZW52KiBzZSwgY29u
c3QgY2hhciogZXJybXNnKTsKLXN0YXRpYyB2b2lkIHN0YWNrZW52X3VuaW5pdChzdGFja2Vudiog
c2UpOwotCi0vLyBDYWxsYmFjayBpbnZva2VkIGJ5IHVwYiBpZiBhbnkgZXJyb3Igb2NjdXJzIGR1
cmluZyBwYXJzaW5nIG9yIHNlcmlhbGl6YXRpb24uCi1zdGF0aWMgYm9vbCBlbnZfZXJyb3JfZnVu
Yyh2b2lkKiB1ZCwgY29uc3QgdXBiX3N0YXR1cyogc3RhdHVzKSB7Ci0gIHN0YWNrZW52KiBzZSA9
IHVkOwotICAvLyBGcmVlIHRoZSBlbnYgLS0gcmJfcmFpc2Ugd2lsbCBsb25nam1wIHVwIHRoZSBz
dGFjayBwYXN0IHRoZSBlbmNvZGUvZGVjb2RlCi0gIC8vIGZ1bmN0aW9uIHNvIGl0IHdvdWxkIG5v
dCBvdGhlcndpc2UgaGF2ZSBiZWVuIGZyZWVkLgotICBzdGFja2Vudl91bmluaXQoc2UpOwotCi0g
IC8vIFRPRE8oaGFiZXJtYW4pOiBoYXZlIGEgd2F5IHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgYWN0
dWFsbHkgYSBwYXJzZSBlcnJvciwKLSAgLy8gaW5zdGVhZCBvZiBqdXN0IHRocm93aW5nICJwYXJz
ZSBlcnJvciIgdW5jb25kaXRpb25hbGx5LgotICByYl9yYWlzZShjUGFyc2VFcnJvciwgc2UtPnJ1
YnlfZXJyb3JfdGVtcGxhdGUsIHVwYl9zdGF0dXNfZXJybXNnKHN0YXR1cykpOwotICAvLyBOZXZl
ciByZWFjaGVkOiByYl9yYWlzZSgpIGFsd2F5cyBsb25nam1wKClzIHVwIHRoZSBzdGFjaywgcGFz
dCBhbGwgb2Ygb3VyCi0gIC8vIGNvZGUsIGJhY2sgdG8gUnVieS4KLSAgcmV0dXJuIGZhbHNlOwot
fQotCi1zdGF0aWMgdm9pZCBzdGFja2Vudl9pbml0KHN0YWNrZW52KiBzZSwgY29uc3QgY2hhciog
ZXJybXNnKSB7Ci0gIHNlLT5ydWJ5X2Vycm9yX3RlbXBsYXRlID0gZXJybXNnOwotICB1cGJfZW52
X2luaXQyKCZzZS0+ZW52LCBzZS0+YWxsb2NidWYsIHNpemVvZihzZS0+YWxsb2NidWYpLCBOVUxM
KTsKLSAgdXBiX2Vudl9zZXRlcnJvcmZ1bmMoJnNlLT5lbnYsIGVudl9lcnJvcl9mdW5jLCBzZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWNrZW52X3VuaW5pdChzdGFja2Vudiogc2UpIHsKLSAgdXBi
X2Vudl91bmluaXQoJnNlLT5lbnYpOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgTWVz
c2FnZUNsYXNzLmRlY29kZShkYXRhKSA9PiBtZXNzYWdlCi0gKgotICogRGVjb2RlcyB0aGUgZ2l2
ZW4gZGF0YSAoYXMgYSBzdHJpbmcgY29udGFpbmluZyBieXRlcyBpbiBwcm90b2NvbCBidWZmZXJz
IHdpcmUKLSAqIGZvcm1hdCkgdW5kZXIgdGhlIGludGVycHJldHJhdGlvbiBnaXZlbiBieSB0aGlz
IG1lc3NhZ2UgY2xhc3MncyBkZWZpbml0aW9uCi0gKiBhbmQgcmV0dXJucyBhIG1lc3NhZ2Ugb2Jq
ZWN0IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgdmFsdWVzLgotICovCi1WQUxVRSBNZXNz
YWdlX2RlY29kZShWQUxVRSBrbGFzcywgVkFMVUUgZGF0YSkgewotICBWQUxVRSBkZXNjcmlwdG9y
ID0gcmJfaXZhcl9nZXQoa2xhc3MsIGRlc2NyaXB0b3JfaW5zdGFuY2V2YXJfaW50ZXJuZWQpOwot
ICBEZXNjcmlwdG9yKiBkZXNjID0gcnVieV90b19EZXNjcmlwdG9yKGRlc2NyaXB0b3IpOwotICBW
QUxVRSBtc2drbGFzcyA9IERlc2NyaXB0b3JfbXNnY2xhc3MoZGVzY3JpcHRvcik7Ci0gIFZBTFVF
IG1zZ19yYjsKLSAgTWVzc2FnZUhlYWRlciogbXNnOwotCi0gIGlmIChUWVBFKGRhdGEpICE9IFRf
U1RSSU5HKSB7Ci0gICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiRXhwZWN0ZWQgc3RyaW5nIGZv
ciBiaW5hcnkgcHJvdG9idWYgZGF0YS4iKTsKLSAgfQotCi0gIG1zZ19yYiA9IHJiX2NsYXNzX25l
d19pbnN0YW5jZSgwLCBOVUxMLCBtc2drbGFzcyk7Ci0gIFR5cGVkRGF0YV9HZXRfU3RydWN0KG1z
Z19yYiwgTWVzc2FnZUhlYWRlciwgJk1lc3NhZ2VfdHlwZSwgbXNnKTsKLQotICB7Ci0gICAgY29u
c3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCogbWV0aG9kID0gbXNnZGVmX2RlY29kZXJtZXRob2QoZGVz
Yyk7Ci0gICAgY29uc3QgdXBiX2hhbmRsZXJzKiBoID0gdXBiX3BiZGVjb2Rlcm1ldGhvZF9kZXN0
aGFuZGxlcnMobWV0aG9kKTsKLSAgICBzdGFja2VudiBzZTsKLSAgICB1cGJfc2luayBzaW5rOwot
ICAgIHVwYl9wYmRlY29kZXIqIGRlY29kZXI7Ci0gICAgc3RhY2tlbnZfaW5pdCgmc2UsICJFcnJv
ciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZzogJXMiKTsKLQotICAgIHVwYl9zaW5rX3Jlc2V0KCZz
aW5rLCBoLCBtc2cpOwotICAgIGRlY29kZXIgPSB1cGJfcGJkZWNvZGVyX2NyZWF0ZSgmc2UuZW52
LCBtZXRob2QsICZzaW5rKTsKLSAgICB1cGJfYnVmc3JjX3B1dGJ1ZihSU1RSSU5HX1BUUihkYXRh
KSwgUlNUUklOR19MRU4oZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgdXBiX3BiZGVjb2Rl
cl9pbnB1dChkZWNvZGVyKSk7Ci0KLSAgICBzdGFja2Vudl91bmluaXQoJnNlKTsKLSAgfQotCi0g
IHJldHVybiBtc2dfcmI7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBNZXNzYWdlQ2xh
c3MuZGVjb2RlX2pzb24oZGF0YSkgPT4gbWVzc2FnZQotICoKLSAqIERlY29kZXMgdGhlIGdpdmVu
IGRhdGEgKGFzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYnl0ZXMgaW4gcHJvdG9jb2wgYnVmZmVycyB3
aXJlCi0gKiBmb3JtYXQpIHVuZGVyIHRoZSBpbnRlcnByZXRyYXRpb24gZ2l2ZW4gYnkgdGhpcyBt
ZXNzYWdlIGNsYXNzJ3MgZGVmaW5pdGlvbgotICogYW5kIHJldHVybnMgYSBtZXNzYWdlIG9iamVj
dCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHZhbHVlcy4KLSAqLwotVkFMVUUgTWVzc2Fn
ZV9kZWNvZGVfanNvbihWQUxVRSBrbGFzcywgVkFMVUUgZGF0YSkgewotICBWQUxVRSBkZXNjcmlw
dG9yID0gcmJfaXZhcl9nZXQoa2xhc3MsIGRlc2NyaXB0b3JfaW5zdGFuY2V2YXJfaW50ZXJuZWQp
OwotICBEZXNjcmlwdG9yKiBkZXNjID0gcnVieV90b19EZXNjcmlwdG9yKGRlc2NyaXB0b3IpOwot
ICBWQUxVRSBtc2drbGFzcyA9IERlc2NyaXB0b3JfbXNnY2xhc3MoZGVzY3JpcHRvcik7Ci0gIFZB
TFVFIG1zZ19yYjsKLSAgTWVzc2FnZUhlYWRlciogbXNnOwotCi0gIGlmIChUWVBFKGRhdGEpICE9
IFRfU1RSSU5HKSB7Ci0gICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiRXhwZWN0ZWQgc3RyaW5n
IGZvciBKU09OIGRhdGEuIik7Ci0gIH0KLSAgLy8gVE9ETyhjZmFsbGluKTogQ2hlY2sgYW5kIHJl
c3BlY3Qgc3RyaW5nIGVuY29kaW5nLiBJZiBub3QgVVRGLTgsIHdlIG5lZWQgdG8KLSAgLy8gY29u
dmVydCwgYmVjYXVzZSBzdHJpbmcgaGFuZGxlcnMgcGFzcyBkYXRhIGRpcmVjdGx5IHRvIG1lc3Nh
Z2Ugc3RyaW5nCi0gIC8vIGZpZWxkcy4KLQotICBtc2dfcmIgPSByYl9jbGFzc19uZXdfaW5zdGFu
Y2UoMCwgTlVMTCwgbXNna2xhc3MpOwotICBUeXBlZERhdGFfR2V0X1N0cnVjdChtc2dfcmIsIE1l
c3NhZ2VIZWFkZXIsICZNZXNzYWdlX3R5cGUsIG1zZyk7Ci0KLSAgewotICAgIGNvbnN0IHVwYl9q
c29uX3BhcnNlcm1ldGhvZCogbWV0aG9kID0gbXNnZGVmX2pzb25wYXJzZXJtZXRob2QoZGVzYyk7
Ci0gICAgc3RhY2tlbnYgc2U7Ci0gICAgdXBiX3Npbmsgc2luazsKLSAgICB1cGJfanNvbl9wYXJz
ZXIqIHBhcnNlcjsKLSAgICBzdGFja2Vudl9pbml0KCZzZSwgIkVycm9yIG9jY3VycmVkIGR1cmlu
ZyBwYXJzaW5nOiAlcyIpOwotCi0gICAgdXBiX3NpbmtfcmVzZXQoJnNpbmssIGdldF9maWxsX2hh
bmRsZXJzKGRlc2MpLCBtc2cpOwotICAgIHBhcnNlciA9IHVwYl9qc29uX3BhcnNlcl9jcmVhdGUo
JnNlLmVudiwgbWV0aG9kLCAmc2luayk7Ci0gICAgdXBiX2J1ZnNyY19wdXRidWYoUlNUUklOR19Q
VFIoZGF0YSksIFJTVFJJTkdfTEVOKGRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgIHVwYl9q
c29uX3BhcnNlcl9pbnB1dChwYXJzZXIpKTsKLQotICAgIHN0YWNrZW52X3VuaW5pdCgmc2UpOwot
ICB9Ci0KLSAgcmV0dXJuIG1zZ19yYjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFNlcmlhbGl6aW5nLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBUaGUgY29kZSBi
ZWxvdyBhbHNvIGNvbWVzIGZyb20gdXBiJ3MgcHJvdG90eXBlIFJ1YnkgYmluZGluZywgZGV2ZWxv
cGVkIGJ5Ci0vLyBoYWJlcm1hbkAuCi0KLS8qIHN0cmluZ3NpbmsgKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8vIFRo
aXMgc2hvdWxkIHByb2JhYmx5IGJlIGZhY3RvcmVkIGludG8gYSBjb21tb24gdXBiIGNvbXBvbmVu
dC4KLQotdHlwZWRlZiBzdHJ1Y3QgewotICB1cGJfYnl0ZXNoYW5kbGVyIGhhbmRsZXI7Ci0gIHVw
Yl9ieXRlc3Npbmsgc2luazsKLSAgY2hhciAqcHRyOwotICBzaXplX3QgbGVuLCBzaXplOwotfSBz
dHJpbmdzaW5rOwotCi1zdGF0aWMgdm9pZCAqc3RyaW5nc2lua19zdGFydCh2b2lkICpfc2luaywg
Y29uc3Qgdm9pZCAqaGQsIHNpemVfdCBzaXplX2hpbnQpIHsKLSAgc3RyaW5nc2luayAqc2luayA9
IF9zaW5rOwotICBzaW5rLT5sZW4gPSAwOwotICByZXR1cm4gc2luazsKLX0KLQotc3RhdGljIHNp
emVfdCBzdHJpbmdzaW5rX3N0cmluZyh2b2lkICpfc2luaywgY29uc3Qgdm9pZCAqaGQsIGNvbnN0
IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwg
Y29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIHN0cmluZ3NpbmsgKnNpbmsgPSBfc2lu
azsKLSAgc2l6ZV90IG5ld19zaXplID0gc2luay0+c2l6ZTsKLQotICBVUEJfVU5VU0VEKGhkKTsK
LSAgVVBCX1VOVVNFRChoYW5kbGUpOwotCi0gIHdoaWxlIChzaW5rLT5sZW4gKyBsZW4gPiBuZXdf
c2l6ZSkgewotICAgIG5ld19zaXplICo9IDI7Ci0gIH0KLQotICBpZiAobmV3X3NpemUgIT0gc2lu
ay0+c2l6ZSkgewotICAgIHNpbmstPnB0ciA9IHJlYWxsb2Moc2luay0+cHRyLCBuZXdfc2l6ZSk7
Ci0gICAgc2luay0+c2l6ZSA9IG5ld19zaXplOwotICB9Ci0KLSAgbWVtY3B5KHNpbmstPnB0ciAr
IHNpbmstPmxlbiwgcHRyLCBsZW4pOwotICBzaW5rLT5sZW4gKz0gbGVuOwotCi0gIHJldHVybiBs
ZW47Ci19Ci0KLXZvaWQgc3RyaW5nc2lua19pbml0KHN0cmluZ3NpbmsgKnNpbmspIHsKLSAgdXBi
X2J5dGVzaGFuZGxlcl9pbml0KCZzaW5rLT5oYW5kbGVyKTsKLSAgdXBiX2J5dGVzaGFuZGxlcl9z
ZXRzdGFydHN0cigmc2luay0+aGFuZGxlciwgc3RyaW5nc2lua19zdGFydCwgTlVMTCk7Ci0gIHVw
Yl9ieXRlc2hhbmRsZXJfc2V0c3RyaW5nKCZzaW5rLT5oYW5kbGVyLCBzdHJpbmdzaW5rX3N0cmlu
ZywgTlVMTCk7Ci0KLSAgdXBiX2J5dGVzc2lua19yZXNldCgmc2luay0+c2luaywgJnNpbmstPmhh
bmRsZXIsIHNpbmspOwotCi0gIHNpbmstPnNpemUgPSAzMjsKLSAgc2luay0+cHRyID0gbWFsbG9j
KHNpbmstPnNpemUpOwotICBzaW5rLT5sZW4gPSAwOwotfQotCi12b2lkIHN0cmluZ3NpbmtfdW5p
bml0KHN0cmluZ3NpbmsgKnNpbmspIHsKLSAgZnJlZShzaW5rLT5wdHIpOwotfQotCi0vKiBtc2d2
aXNpdG9yICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi0vLyBUT0RPOiBJZi93aGVuIHdlIHN1cHBvcnQgcHJvdG8yIHNl
bWFudGljcyBpbiBhZGRpdGlvbiB0byB0aGUgY3VycmVudCBwcm90bzMKLS8vIHNlbWFudGljcywg
d2hpY2ggbWVhbnMgdGhhdCB3ZSBoYXZlIHRydWUgZmllbGQgcHJlc2VuY2UsIHdlIHdpbGwgd2Fu
dCB0bwotLy8gbW9kaWZ5IG1zZ3Zpc2l0b3Igc28gdGhhdCBpdCBlbWl0cyBhbGwgcHJlc2VudCBm
aWVsZHMgcmF0aGVyIHRoYW4gYWxsCi0vLyBub24tZGVmYXVsdC12YWx1ZSBmaWVsZHMuCi0vLwot
Ly8gTGlrZXdpc2UsIHdoZW4gaW1wbGVtZW50aW5nIEpTT04gc2VyaWFsaXphdGlvbiwgd2UgbWF5
IG5lZWQgdG8gaGF2ZSBhCi0vLyAndmVyYm9zZScgbW9kZSB0aGF0IG91dHB1dHMgYWxsIGZpZWxk
cyBhbmQgYSAnY29uY2lzZScgbW9kZSB0aGF0IG91dHB1dHMgb25seQotLy8gdGhvc2Ugd2l0aCBu
b24tZGVmYXVsdCB2YWx1ZXMuCi0KLXN0YXRpYyB2b2lkIHB1dG1zZyhWQUxVRSBtc2csIGNvbnN0
IERlc2NyaXB0b3IqIGRlc2MsCi0gICAgICAgICAgICAgICAgICAgdXBiX3NpbmsgKnNpbmssIGlu
dCBkZXB0aCk7Ci0KLXN0YXRpYyB1cGJfc2VsZWN0b3JfdCBnZXRzZWwoY29uc3QgdXBiX2ZpZWxk
ZGVmICpmLCB1cGJfaGFuZGxlcnR5cGVfdCB0eXBlKSB7Ci0gIHVwYl9zZWxlY3Rvcl90IHJldDsK
LSAgYm9vbCBvayA9IHVwYl9oYW5kbGVyc19nZXRzZWxlY3RvcihmLCB0eXBlLCAmcmV0KTsKLSAg
VVBCX0FTU0VSVF9WQVIob2ssIG9rKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQg
cHV0c3RyKFZBTFVFIHN0ciwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLCB1cGJfc2luayAqc2luaykg
ewotICB1cGJfc2luayBzdWJzaW5rOwotCi0gIGlmIChzdHIgPT0gUW5pbCkgcmV0dXJuOwotCi0g
IGFzc2VydChCVUlMVElOX1RZUEUoc3RyKSA9PSBSVUJZX1RfU1RSSU5HKTsKLQotICAvLyBFbnN1
cmUgdGhhdCB0aGUgc3RyaW5nIGhhcyB0aGUgY29ycmVjdCBlbmNvZGluZy4gV2UgYWxzbyBjaGVj
ayBhdCBmaWVsZC1zZXQKLSAgLy8gdGltZSwgYnV0IHRoZSB1c2VyIG1heSBoYXZlIG11dGF0ZWQg
dGhlIHN0cmluZyBvYmplY3Qgc2luY2UgdGhlbi4KLSAgbmF0aXZlX3Nsb3RfdmFsaWRhdGVfc3Ry
aW5nX2VuY29kaW5nKHVwYl9maWVsZGRlZl90eXBlKGYpLCBzdHIpOwotCi0gIHVwYl9zaW5rX3N0
YXJ0c3RyKHNpbmssIGdldHNlbChmLCBVUEJfSEFORExFUl9TVEFSVFNUUiksIFJTVFJJTkdfTEVO
KHN0ciksCi0gICAgICAgICAgICAgICAgICAgICZzdWJzaW5rKTsKLSAgdXBiX3NpbmtfcHV0c3Ry
aW5nKCZzdWJzaW5rLCBnZXRzZWwoZiwgVVBCX0hBTkRMRVJfU1RSSU5HKSwgUlNUUklOR19QVFIo
c3RyKSwKLSAgICAgICAgICAgICAgICAgICAgIFJTVFJJTkdfTEVOKHN0ciksIE5VTEwpOwotICB1
cGJfc2lua19lbmRzdHIoc2luaywgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX0VORFNUUikpOwotfQot
Ci1zdGF0aWMgdm9pZCBwdXRzdWJtc2coVkFMVUUgc3VibXNnLCBjb25zdCB1cGJfZmllbGRkZWYg
KmYsIHVwYl9zaW5rICpzaW5rLAotICAgICAgICAgICAgICAgICAgICAgIGludCBkZXB0aCkgewot
ICB1cGJfc2luayBzdWJzaW5rOwotICBWQUxVRSBkZXNjcmlwdG9yOwotICBEZXNjcmlwdG9yKiBz
dWJkZXNjOwotCi0gIGlmIChzdWJtc2cgPT0gUW5pbCkgcmV0dXJuOwotCi0gIGRlc2NyaXB0b3Ig
PSByYl9pdmFyX2dldChzdWJtc2csIGRlc2NyaXB0b3JfaW5zdGFuY2V2YXJfaW50ZXJuZWQpOwot
ICBzdWJkZXNjID0gcnVieV90b19EZXNjcmlwdG9yKGRlc2NyaXB0b3IpOwotCi0gIHVwYl9zaW5r
X3N0YXJ0c3VibXNnKHNpbmssIGdldHNlbChmLCBVUEJfSEFORExFUl9TVEFSVFNVQk1TRyksICZz
dWJzaW5rKTsKLSAgcHV0bXNnKHN1Ym1zZywgc3ViZGVzYywgJnN1YnNpbmssIGRlcHRoICsgMSk7
Ci0gIHVwYl9zaW5rX2VuZHN1Ym1zZyhzaW5rLCBnZXRzZWwoZiwgVVBCX0hBTkRMRVJfRU5EU1VC
TVNHKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dGFyeShWQUxVRSBhcnksIGNvbnN0IHVwYl9maWVs
ZGRlZiAqZiwgdXBiX3NpbmsgKnNpbmssCi0gICAgICAgICAgICAgICAgICAgaW50IGRlcHRoKSB7
Ci0gIHVwYl9zaW5rIHN1YnNpbms7Ci0gIHVwYl9maWVsZHR5cGVfdCB0eXBlID0gdXBiX2ZpZWxk
ZGVmX3R5cGUoZik7Ci0gIHVwYl9zZWxlY3Rvcl90IHNlbCA9IDA7Ci0gIGludCBzaXplOwotCi0g
IGlmIChhcnkgPT0gUW5pbCkgcmV0dXJuOwotCi0gIHVwYl9zaW5rX3N0YXJ0c2VxKHNpbmssIGdl
dHNlbChmLCBVUEJfSEFORExFUl9TVEFSVFNFUSksICZzdWJzaW5rKTsKLQotICBpZiAodXBiX2Zp
ZWxkZGVmX2lzcHJpbWl0aXZlKGYpKSB7Ci0gICAgc2VsID0gZ2V0c2VsKGYsIHVwYl9oYW5kbGVy
c19nZXRwcmltaXRpdmVoYW5kbGVydHlwZShmKSk7Ci0gIH0KLQotICBzaXplID0gTlVNMklOVChS
ZXBlYXRlZEZpZWxkX2xlbmd0aChhcnkpKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICB2b2lkKiBtZW1vcnkgPSBSZXBlYXRlZEZpZWxkX2luZGV4X25hdGl2ZShhcnks
IGkpOwotICAgIHN3aXRjaCAodHlwZSkgewotI2RlZmluZSBUKHVwYnR5cGVjb25zdCwgdXBidHlw
ZSwgY3R5cGUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY2FzZSB1cGJ0eXBlY29uc3Q6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdXBiX3Np
bmtfcHV0IyN1cGJ0eXBlKCZzdWJzaW5rLCBzZWwsICooKGN0eXBlICopbWVtb3J5KSk7ICAgXAot
ICAgIGJyZWFrOwotCi0gICAgICBUKFVQQl9UWVBFX0ZMT0FULCAgZmxvYXQsICBmbG9hdCkKLSAg
ICAgIFQoVVBCX1RZUEVfRE9VQkxFLCBkb3VibGUsIGRvdWJsZSkKLSAgICAgIFQoVVBCX1RZUEVf
Qk9PTCwgICBib29sLCAgIGludDhfdCkKLSAgICAgIGNhc2UgVVBCX1RZUEVfRU5VTToKLSAgICAg
IFQoVVBCX1RZUEVfSU5UMzIsICBpbnQzMiwgIGludDMyX3QpCi0gICAgICBUKFVQQl9UWVBFX1VJ
TlQzMiwgdWludDMyLCB1aW50MzJfdCkKLSAgICAgIFQoVVBCX1RZUEVfSU5UNjQsICBpbnQ2NCwg
IGludDY0X3QpCi0gICAgICBUKFVQQl9UWVBFX1VJTlQ2NCwgdWludDY0LCB1aW50NjRfdCkKLQot
ICAgICAgY2FzZSBVUEJfVFlQRV9TVFJJTkc6Ci0gICAgICBjYXNlIFVQQl9UWVBFX0JZVEVTOgot
ICAgICAgICBwdXRzdHIoKigoVkFMVUUgKiltZW1vcnkpLCBmLCAmc3Vic2luayk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9NRVNTQUdFOgotICAgICAgICBwdXRzdWJtc2co
KigoVkFMVUUgKiltZW1vcnkpLCBmLCAmc3Vic2luaywgZGVwdGgpOwotICAgICAgICBicmVhazsK
LQotI3VuZGVmIFQKLQotICAgIH0KLSAgfQotICB1cGJfc2lua19lbmRzZXEoc2luaywgZ2V0c2Vs
KGYsIFVQQl9IQU5ETEVSX0VORFNFUSkpOwotfQotCi1zdGF0aWMgdm9pZCBwdXRfcnVieV92YWx1
ZShWQUxVRSB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVs
ZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFIHR5cGVfY2xhc3MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVwdGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGJfc2luayAqc2luaykgewotICB1cGJfc2VsZWN0b3JfdCBzZWwgPSAwOwotICBp
ZiAodXBiX2ZpZWxkZGVmX2lzcHJpbWl0aXZlKGYpKSB7Ci0gICAgc2VsID0gZ2V0c2VsKGYsIHVw
Yl9oYW5kbGVyc19nZXRwcmltaXRpdmVoYW5kbGVydHlwZShmKSk7Ci0gIH0KLQotICBzd2l0Y2gg
KHVwYl9maWVsZGRlZl90eXBlKGYpKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQzMjoKLSAgICAg
IHVwYl9zaW5rX3B1dGludDMyKHNpbmssIHNlbCwgTlVNMklOVCh2YWx1ZSkpOwotICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQ2NDoKLSAgICAgIHVwYl9zaW5rX3B1dGludDY0KHNp
bmssIHNlbCwgTlVNMkxMKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBF
X1VJTlQzMjoKLSAgICAgIHVwYl9zaW5rX3B1dHVpbnQzMihzaW5rLCBzZWwsIE5VTTJVSU5UKHZh
bHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX1VJTlQ2NDoKLSAgICAgIHVw
Yl9zaW5rX3B1dHVpbnQ2NChzaW5rLCBzZWwsIE5VTTJVTEwodmFsdWUpKTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgVVBCX1RZUEVfRkxPQVQ6Ci0gICAgICB1cGJfc2lua19wdXRmbG9hdChzaW5r
LCBzZWwsIE5VTTJEQkwodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVf
RE9VQkxFOgotICAgICAgdXBiX3NpbmtfcHV0ZG91YmxlKHNpbmssIHNlbCwgTlVNMkRCTCh2YWx1
ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9FTlVNOiB7Ci0gICAgICBpZiAo
VFlQRSh2YWx1ZSkgPT0gVF9TWU1CT0wpIHsKLSAgICAgICAgdmFsdWUgPSByYl9mdW5jYWxsKHR5
cGVfY2xhc3MsIHJiX2ludGVybigicmVzb2x2ZSIpLCAxLCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAg
ICB1cGJfc2lua19wdXRpbnQzMihzaW5rLCBzZWwsIE5VTTJJTlQodmFsdWUpKTsKLSAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFVQQl9UWVBFX0JPT0w6Ci0gICAgICB1cGJfc2lua19wdXRi
b29sKHNpbmssIHNlbCwgdmFsdWUgPT0gUXRydWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBV
UEJfVFlQRV9TVFJJTkc6Ci0gICAgY2FzZSBVUEJfVFlQRV9CWVRFUzoKLSAgICAgIHB1dHN0cih2
YWx1ZSwgZiwgc2luayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX01FU1NBR0U6
Ci0gICAgICBwdXRzdWJtc2codmFsdWUsIGYsIHNpbmssIGRlcHRoKTsKLSAgfQotfQotCi1zdGF0
aWMgdm9pZCBwdXRtYXAoVkFMVUUgbWFwLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsIHVwYl9zaW5r
ICpzaW5rLAotICAgICAgICAgICAgICAgICAgIGludCBkZXB0aCkgewotICBNYXAqIHNlbGY7Ci0g
IHVwYl9zaW5rIHN1YnNpbms7Ci0gIGNvbnN0IHVwYl9maWVsZGRlZioga2V5X2ZpZWxkOwotICBj
b25zdCB1cGJfZmllbGRkZWYqIHZhbHVlX2ZpZWxkOwotICBNYXBfaXRlciBpdDsKLQotICBpZiAo
bWFwID09IFFuaWwpIHJldHVybjsKLSAgc2VsZiA9IHJ1YnlfdG9fTWFwKG1hcCk7Ci0KLSAgdXBi
X3Npbmtfc3RhcnRzZXEoc2luaywgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX1NUQVJUU0VRKSwgJnN1
YnNpbmspOwotCi0gIGFzc2VydCh1cGJfZmllbGRkZWZfdHlwZShmKSA9PSBVUEJfVFlQRV9NRVNT
QUdFKTsKLSAga2V5X2ZpZWxkID0gbWFwX2ZpZWxkX2tleShmKTsKLSAgdmFsdWVfZmllbGQgPSBt
YXBfZmllbGRfdmFsdWUoZik7Ci0KLSAgZm9yIChNYXBfYmVnaW4obWFwLCAmaXQpOyAhTWFwX2Rv
bmUoJml0KTsgTWFwX25leHQoJml0KSkgewotICAgIFZBTFVFIGtleSA9IE1hcF9pdGVyX2tleSgm
aXQpOwotICAgIFZBTFVFIHZhbHVlID0gTWFwX2l0ZXJfdmFsdWUoJml0KTsKLSAgICB1cGJfc3Rh
dHVzIHN0YXR1czsKLQotICAgIHVwYl9zaW5rIGVudHJ5X3Npbms7Ci0gICAgdXBiX3Npbmtfc3Rh
cnRzdWJtc2coJnN1YnNpbmssIGdldHNlbChmLCBVUEJfSEFORExFUl9TVEFSVFNVQk1TRyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5X3NpbmspOwotICAgIHVwYl9zaW5rX3N0YXJ0
bXNnKCZlbnRyeV9zaW5rKTsKLQotICAgIHB1dF9ydWJ5X3ZhbHVlKGtleSwga2V5X2ZpZWxkLCBR
bmlsLCBkZXB0aCArIDEsICZlbnRyeV9zaW5rKTsKLSAgICBwdXRfcnVieV92YWx1ZSh2YWx1ZSwg
dmFsdWVfZmllbGQsIHNlbGYtPnZhbHVlX3R5cGVfY2xhc3MsIGRlcHRoICsgMSwKLSAgICAgICAg
ICAgICAgICAgICAmZW50cnlfc2luayk7Ci0KLSAgICB1cGJfc2lua19lbmRtc2coJmVudHJ5X3Np
bmssICZzdGF0dXMpOwotICAgIHVwYl9zaW5rX2VuZHN1Ym1zZygmc3Vic2luaywgZ2V0c2VsKGYs
IFVQQl9IQU5ETEVSX0VORFNVQk1TRykpOwotICB9Ci0KLSAgdXBiX3NpbmtfZW5kc2VxKHNpbmss
IGdldHNlbChmLCBVUEJfSEFORExFUl9FTkRTRVEpKTsKLX0KLQotc3RhdGljIHZvaWQgcHV0bXNn
KFZBTFVFIG1zZ19yYiwgY29uc3QgRGVzY3JpcHRvciogZGVzYywKLSAgICAgICAgICAgICAgICAg
ICB1cGJfc2luayAqc2luaywgaW50IGRlcHRoKSB7Ci0gIE1lc3NhZ2VIZWFkZXIqIG1zZzsKLSAg
dXBiX21zZ19maWVsZF9pdGVyIGk7Ci0gIHVwYl9zdGF0dXMgc3RhdHVzOwotCi0gIHVwYl9zaW5r
X3N0YXJ0bXNnKHNpbmspOwotCi0gIC8vIFByb3RlY3QgYWdhaW5zdCBjeWNsZXMgKHBvc3NpYmxl
IGJlY2F1c2UgdXNlcnMgbWF5IGZyZWVseSByZWFzc2lnbiBtZXNzYWdlCi0gIC8vIGFuZCByZXBl
YXRlZCBmaWVsZHMpIGJ5IGltcG9zaW5nIGEgbWF4aW11bSByZWN1cnNpb24gZGVwdGguCi0gIGlm
IChkZXB0aCA+IEVOQ09ERV9NQVhfTkVTVElORykgewotICAgIHJiX3JhaXNlKHJiX2VSdW50aW1l
RXJyb3IsCi0gICAgICAgICAgICAgIk1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIGR1
cmluZyBlbmNvZGluZy4iKTsKLSAgfQotCi0gIFR5cGVkRGF0YV9HZXRfU3RydWN0KG1zZ19yYiwg
TWVzc2FnZUhlYWRlciwgJk1lc3NhZ2VfdHlwZSwgbXNnKTsKLQotICBmb3IgKHVwYl9tc2dfZmll
bGRfYmVnaW4oJmksIGRlc2MtPm1zZ2RlZik7Ci0gICAgICAgIXVwYl9tc2dfZmllbGRfZG9uZSgm
aSk7Ci0gICAgICAgdXBiX21zZ19maWVsZF9uZXh0KCZpKSkgewotICAgIHVwYl9maWVsZGRlZiAq
ZiA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaSk7Ci0gICAgYm9vbCBpc19tYXRjaGluZ19vbmVvZiA9
IGZhbHNlOwotICAgIHVpbnQzMl90IG9mZnNldCA9Ci0gICAgICAgIGRlc2MtPmxheW91dC0+Zmll
bGRzW3VwYl9maWVsZGRlZl9pbmRleChmKV0ub2Zmc2V0ICsKLSAgICAgICAgc2l6ZW9mKE1lc3Nh
Z2VIZWFkZXIpOwotCi0gICAgaWYgKHVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YoZikpIHsK
LSAgICAgIHVpbnQzMl90IG9uZW9mX2Nhc2Vfb2Zmc2V0ID0KLSAgICAgICAgICBkZXNjLT5sYXlv
dXQtPmZpZWxkc1t1cGJfZmllbGRkZWZfaW5kZXgoZildLmNhc2Vfb2Zmc2V0ICsKLSAgICAgICAg
ICBzaXplb2YoTWVzc2FnZUhlYWRlcik7Ci0gICAgICAvLyBGb3IgYSBvbmVvZiwgY2hlY2sgdGhh
dCB0aGlzIGZpZWxkIGlzIGFjdHVhbGx5IHByZXNlbnQgLS0gc2tpcCBhbGwgdGhlCi0gICAgICAv
LyBiZWxvdyBpZiBub3QuCi0gICAgICBpZiAoREVSRUYobXNnLCBvbmVvZl9jYXNlX29mZnNldCwg
dWludDMyX3QpICE9Ci0gICAgICAgICAgdXBiX2ZpZWxkZGVmX251bWJlcihmKSkgewotICAgICAg
ICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIC8vIE90aGVyd2lzZSwgZmFsbCB0aHJvdWdoIHRv
IHRoZSBhcHByb3ByaWF0ZSBzaW5ndWxhci1maWVsZCBoYW5kbGVyCi0gICAgICAvLyBiZWxvdy4K
LSAgICAgIGlzX21hdGNoaW5nX29uZW9mID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNfbWFw
X2ZpZWxkKGYpKSB7Ci0gICAgICBWQUxVRSBtYXAgPSBERVJFRihtc2csIG9mZnNldCwgVkFMVUUp
OwotICAgICAgaWYgKG1hcCAhPSBRbmlsKSB7Ci0gICAgICAgIHB1dG1hcChtYXAsIGYsIHNpbmss
IGRlcHRoKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHVwYl9maWVsZGRlZl9pc3NlcShmKSkg
ewotICAgICAgVkFMVUUgYXJ5ID0gREVSRUYobXNnLCBvZmZzZXQsIFZBTFVFKTsKLSAgICAgIGlm
IChhcnkgIT0gUW5pbCkgewotICAgICAgICBwdXRhcnkoYXJ5LCBmLCBzaW5rLCBkZXB0aCk7Ci0g
ICAgICB9Ci0gICAgfSBlbHNlIGlmICh1cGJfZmllbGRkZWZfaXNzdHJpbmcoZikpIHsKLSAgICAg
IFZBTFVFIHN0ciA9IERFUkVGKG1zZywgb2Zmc2V0LCBWQUxVRSk7Ci0gICAgICBpZiAoaXNfbWF0
Y2hpbmdfb25lb2YgfHwgUlNUUklOR19MRU4oc3RyKSA+IDApIHsKLSAgICAgICAgcHV0c3RyKHN0
ciwgZiwgc2luayk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmICh1cGJfZmllbGRkZWZfaXNzdWJt
c2coZikpIHsKLSAgICAgIHB1dHN1Ym1zZyhERVJFRihtc2csIG9mZnNldCwgVkFMVUUpLCBmLCBz
aW5rLCBkZXB0aCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHVwYl9zZWxlY3Rvcl90IHNlbCA9IGdl
dHNlbChmLCB1cGJfaGFuZGxlcnNfZ2V0cHJpbWl0aXZlaGFuZGxlcnR5cGUoZikpOwotCi0jZGVm
aW5lIFQodXBidHlwZWNvbnN0LCB1cGJ0eXBlLCBjdHlwZSwgZGVmYXVsdF92YWx1ZSkgICAgICAg
ICAgICAgICAgXAotICBjYXNlIHVwYnR5cGVjb25zdDogeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGN0eXBlIHZhbHVlID0gREVSRUYobXNn
LCBvZmZzZXQsIGN0eXBlKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoaXNf
bWF0Y2hpbmdfb25lb2YgfHwgdmFsdWUgIT0gZGVmYXVsdF92YWx1ZSkgeyAgICAgICAgICAgICAg
XAotICAgICAgICB1cGJfc2lua19wdXQjI3VwYnR5cGUoc2luaywgc2VsLCB2YWx1ZSk7ICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGJy
ZWFrOwotCi0gICAgICBzd2l0Y2ggKHVwYl9maWVsZGRlZl90eXBlKGYpKSB7Ci0gICAgICAgIFQo
VVBCX1RZUEVfRkxPQVQsICBmbG9hdCwgIGZsb2F0LCAwLjApCi0gICAgICAgIFQoVVBCX1RZUEVf
RE9VQkxFLCBkb3VibGUsIGRvdWJsZSwgMC4wKQotICAgICAgICBUKFVQQl9UWVBFX0JPT0wsICAg
Ym9vbCwgICB1aW50OF90LCAwKQotICAgICAgICBjYXNlIFVQQl9UWVBFX0VOVU06Ci0gICAgICAg
IFQoVVBCX1RZUEVfSU5UMzIsICBpbnQzMiwgIGludDMyX3QsIDApCi0gICAgICAgIFQoVVBCX1RZ
UEVfVUlOVDMyLCB1aW50MzIsIHVpbnQzMl90LCAwKQotICAgICAgICBUKFVQQl9UWVBFX0lOVDY0
LCAgaW50NjQsICBpbnQ2NF90LCAwKQotICAgICAgICBUKFVQQl9UWVBFX1VJTlQ2NCwgdWludDY0
LCB1aW50NjRfdCwgMCkKLQotICAgICAgICBjYXNlIFVQQl9UWVBFX1NUUklORzoKLSAgICAgICAg
Y2FzZSBVUEJfVFlQRV9CWVRFUzoKLSAgICAgICAgY2FzZSBVUEJfVFlQRV9NRVNTQUdFOiByYl9y
YWlzZShyYl9lUnVudGltZUVycm9yLCAiSW50ZXJuYWwgZXJyb3IuIik7Ci0gICAgICB9Ci0KLSN1
bmRlZiBUCi0KLSAgICB9Ci0gIH0KLQotICB1cGJfc2lua19lbmRtc2coc2luaywgJnN0YXR1cyk7
Ci19Ci0KLXN0YXRpYyBjb25zdCB1cGJfaGFuZGxlcnMqIG1zZ2RlZl9wYl9zZXJpYWxpemVfaGFu
ZGxlcnMoRGVzY3JpcHRvciogZGVzYykgewotICBpZiAoZGVzYy0+cGJfc2VyaWFsaXplX2hhbmRs
ZXJzID09IE5VTEwpIHsKLSAgICBkZXNjLT5wYl9zZXJpYWxpemVfaGFuZGxlcnMgPQotICAgICAg
ICB1cGJfcGJfZW5jb2Rlcl9uZXdoYW5kbGVycyhkZXNjLT5tc2dkZWYsICZkZXNjLT5wYl9zZXJp
YWxpemVfaGFuZGxlcnMpOwotICB9Ci0gIHJldHVybiBkZXNjLT5wYl9zZXJpYWxpemVfaGFuZGxl
cnM7Ci19Ci0KLXN0YXRpYyBjb25zdCB1cGJfaGFuZGxlcnMqIG1zZ2RlZl9qc29uX3NlcmlhbGl6
ZV9oYW5kbGVycygKLSAgICBEZXNjcmlwdG9yKiBkZXNjLCBib29sIHByZXNlcnZlX3Byb3RvX2Zp
ZWxkbmFtZXMpIHsKLSAgaWYgKHByZXNlcnZlX3Byb3RvX2ZpZWxkbmFtZXMpIHsKLSAgICBpZiAo
ZGVzYy0+anNvbl9zZXJpYWxpemVfaGFuZGxlcnMgPT0gTlVMTCkgewotICAgICAgZGVzYy0+anNv
bl9zZXJpYWxpemVfaGFuZGxlcnMgPQotICAgICAgICAgIHVwYl9qc29uX3ByaW50ZXJfbmV3aGFu
ZGxlcnMoCi0gICAgICAgICAgICAgIGRlc2MtPm1zZ2RlZiwgdHJ1ZSwgJmRlc2MtPmpzb25fc2Vy
aWFsaXplX2hhbmRsZXJzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlc2MtPmpzb25fc2VyaWFsaXpl
X2hhbmRsZXJzOwotICB9IGVsc2UgewotICAgIGlmIChkZXNjLT5qc29uX3NlcmlhbGl6ZV9oYW5k
bGVyc19wcmVzZXJ2ZSA9PSBOVUxMKSB7Ci0gICAgICBkZXNjLT5qc29uX3NlcmlhbGl6ZV9oYW5k
bGVyc19wcmVzZXJ2ZSA9Ci0gICAgICAgICAgdXBiX2pzb25fcHJpbnRlcl9uZXdoYW5kbGVycygK
LSAgICAgICAgICAgICAgZGVzYy0+bXNnZGVmLCBmYWxzZSwgJmRlc2MtPmpzb25fc2VyaWFsaXpl
X2hhbmRsZXJzX3ByZXNlcnZlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlc2MtPmpzb25fc2VyaWFs
aXplX2hhbmRsZXJzX3ByZXNlcnZlOwotICB9Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAg
ICBNZXNzYWdlQ2xhc3MuZW5jb2RlKG1zZykgPT4gYnl0ZXMKLSAqCi0gKiBFbmNvZGVzIHRoZSBn
aXZlbiBtZXNzYWdlIG9iamVjdCB0byBpdHMgc2VyaWFsaXplZCBmb3JtIGluIHByb3RvY29sIGJ1
ZmZlcnMKLSAqIHdpcmUgZm9ybWF0LgotICovCi1WQUxVRSBNZXNzYWdlX2VuY29kZShWQUxVRSBr
bGFzcywgVkFMVUUgbXNnX3JiKSB7Ci0gIFZBTFVFIGRlc2NyaXB0b3IgPSByYl9pdmFyX2dldChr
bGFzcywgZGVzY3JpcHRvcl9pbnN0YW5jZXZhcl9pbnRlcm5lZCk7Ci0gIERlc2NyaXB0b3IqIGRl
c2MgPSBydWJ5X3RvX0Rlc2NyaXB0b3IoZGVzY3JpcHRvcik7Ci0KLSAgc3RyaW5nc2luayBzaW5r
OwotICBzdHJpbmdzaW5rX2luaXQoJnNpbmspOwotCi0gIHsKLSAgICBjb25zdCB1cGJfaGFuZGxl
cnMqIHNlcmlhbGl6ZV9oYW5kbGVycyA9Ci0gICAgICAgIG1zZ2RlZl9wYl9zZXJpYWxpemVfaGFu
ZGxlcnMoZGVzYyk7Ci0KLSAgICBzdGFja2VudiBzZTsKLSAgICB1cGJfcGJfZW5jb2RlciogZW5j
b2RlcjsKLSAgICBWQUxVRSByZXQ7Ci0KLSAgICBzdGFja2Vudl9pbml0KCZzZSwgIkVycm9yIG9j
Y3VycmVkIGR1cmluZyBlbmNvZGluZzogJXMiKTsKLSAgICBlbmNvZGVyID0gdXBiX3BiX2VuY29k
ZXJfY3JlYXRlKCZzZS5lbnYsIHNlcmlhbGl6ZV9oYW5kbGVycywgJnNpbmsuc2luayk7Ci0KLSAg
ICBwdXRtc2cobXNnX3JiLCBkZXNjLCB1cGJfcGJfZW5jb2Rlcl9pbnB1dChlbmNvZGVyKSwgMCk7
Ci0KLSAgICByZXQgPSByYl9zdHJfbmV3KHNpbmsucHRyLCBzaW5rLmxlbik7Ci0KLSAgICBzdGFj
a2Vudl91bmluaXQoJnNlKTsKLSAgICBzdHJpbmdzaW5rX3VuaW5pdCgmc2luayk7Ci0KLSAgICBy
ZXR1cm4gcmV0OwotICB9Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBNZXNzYWdlQ2xh
c3MuZW5jb2RlX2pzb24obXNnKSA9PiBqc29uX3N0cmluZwotICoKLSAqIEVuY29kZXMgdGhlIGdp
dmVuIG1lc3NhZ2Ugb2JqZWN0IGludG8gaXRzIHNlcmlhbGl6ZWQgSlNPTiByZXByZXNlbnRhdGlv
bi4KLSAqLwotVkFMVUUgTWVzc2FnZV9lbmNvZGVfanNvbihpbnQgYXJnYywgVkFMVUUqIGFyZ3Ys
IFZBTFVFIGtsYXNzKSB7Ci0gIFZBTFVFIGRlc2NyaXB0b3IgPSByYl9pdmFyX2dldChrbGFzcywg
ZGVzY3JpcHRvcl9pbnN0YW5jZXZhcl9pbnRlcm5lZCk7Ci0gIERlc2NyaXB0b3IqIGRlc2MgPSBy
dWJ5X3RvX0Rlc2NyaXB0b3IoZGVzY3JpcHRvcik7Ci0gIFZBTFVFIG1zZ19yYjsKLSAgVkFMVUUg
cHJlc2VydmVfcHJvdG9fZmllbGRuYW1lcyA9IFFmYWxzZTsKLSAgc3RyaW5nc2luayBzaW5rOwot
Ci0gIGlmIChhcmdjIDwgMSB8fCBhcmdjID4gMikgewotICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJv
ciwgIkV4cGVjdGVkIDEgb3IgMiBhcmd1bWVudHMuIik7Ci0gIH0KLQotICBtc2dfcmIgPSBhcmd2
WzBdOwotCi0gIGlmIChhcmdjID09IDIpIHsKLSAgICBWQUxVRSBoYXNoX2FyZ3MgPSBhcmd2WzFd
OwotICAgIGlmIChUWVBFKGhhc2hfYXJncykgIT0gVF9IQVNIKSB7Ci0gICAgICByYl9yYWlzZShy
Yl9lQXJnRXJyb3IsICJFeHBlY3RlZCBoYXNoIGFyZ3VtZW50cy4iKTsKLSAgICB9Ci0gICAgcHJl
c2VydmVfcHJvdG9fZmllbGRuYW1lcyA9IHJiX2hhc2hfbG9va3VwMigKLSAgICAgICAgaGFzaF9h
cmdzLCBJRDJTWU0ocmJfaW50ZXJuKCJwcmVzZXJ2ZV9wcm90b19maWVsZG5hbWVzIikpLCBRZmFs
c2UpOwotICB9Ci0KLSAgc3RyaW5nc2lua19pbml0KCZzaW5rKTsKLQotICB7Ci0gICAgY29uc3Qg
dXBiX2hhbmRsZXJzKiBzZXJpYWxpemVfaGFuZGxlcnMgPQotICAgICAgICBtc2dkZWZfanNvbl9z
ZXJpYWxpemVfaGFuZGxlcnMoZGVzYywgUlRFU1QocHJlc2VydmVfcHJvdG9fZmllbGRuYW1lcykp
OwotICAgIHVwYl9qc29uX3ByaW50ZXIqIHByaW50ZXI7Ci0gICAgc3RhY2tlbnYgc2U7Ci0gICAg
VkFMVUUgcmV0OwotCi0gICAgc3RhY2tlbnZfaW5pdCgmc2UsICJFcnJvciBvY2N1cnJlZCBkdXJp
bmcgZW5jb2Rpbmc6ICVzIik7Ci0gICAgcHJpbnRlciA9IHVwYl9qc29uX3ByaW50ZXJfY3JlYXRl
KCZzZS5lbnYsIHNlcmlhbGl6ZV9oYW5kbGVycywgJnNpbmsuc2luayk7Ci0KLSAgICBwdXRtc2co
bXNnX3JiLCBkZXNjLCB1cGJfanNvbl9wcmludGVyX2lucHV0KHByaW50ZXIpLCAwKTsKLQotICAg
IHJldCA9IHJiX2VuY19zdHJfbmV3KHNpbmsucHRyLCBzaW5rLmxlbiwgcmJfdXRmOF9lbmNvZGlu
ZygpKTsKLQotICAgIHN0YWNrZW52X3VuaW5pdCgmc2UpOwotICAgIHN0cmluZ3NpbmtfdW5pbml0
KCZzaW5rKTsKLQotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4
dC9nb29nbGUvcHJvdG9idWZfYy9leHRjb25mLnJiIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZf
Yy9leHRjb25mLnJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzY4ZGNjNmM3NDMw
MzMxZDhlZjUzMzU2MGEzYWZlMDJkMTgyZTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvcnVieS9leHQvZ29vZ2xlL3Byb3RvYnVmX2MvZXh0Y29uZi5yYgor
KysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMhL3Vzci9iaW4vcnVieQotCi1yZXF1aXJl
ICdta21mJwotCi0kQ0ZMQUdTICs9ICIgLXN0ZD1jOTkgLU8zIC1ETkRFQlVHIgotCi0kb2JqcyA9
IFsicHJvdG9idWYubyIsICJkZWZzLm8iLCAic3RvcmFnZS5vIiwgIm1lc3NhZ2UubyIsCi0gICAg
ICAgICAicmVwZWF0ZWRfZmllbGQubyIsICJtYXAubyIsICJlbmNvZGVfZGVjb2RlLm8iLCAidXBi
Lm8iXQotCi1jcmVhdGVfbWFrZWZpbGUoImdvb2dsZS9wcm90b2J1Zl9jIikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
cnVieS9leHQvZ29vZ2xlL3Byb3RvYnVmX2MvbWFwLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvZXh0L2dvb2dsZS9wcm90b2J1
Zl9jL21hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmZjNzI4NjY2ZTkzMzc5
M2E3NmNiZTFhMTQzNzUyOGRmZTQ3NWE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvcnVieS9leHQvZ29vZ2xlL3Byb3RvYnVmX2MvbWFwLmMKKysrIC9kZXYv
bnVsbApAQCAtMSw4MDggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLSNpbmNsdWRlICJwcm90b2J1Zi5oIgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
QmFzaWMgbWFwIG9wZXJhdGlvbnMgb24gdG9wIG9mIHVwYidzIHN0cnRhYmxlLgotLy8KLS8vIE5v
dGUgdGhhdCB3ZSByb2xsIG91ciBvd24gYE1hcGAgY29udGFpbmVyIGhlcmUgYmVjYXVzZSwgYXMg
Zm9yCi0vLyBgUmVwZWF0ZWRGaWVsZGAsIHdlIHdhbnQgYSBzdHJvbmdseS10eXBlZCBjb250YWlu
ZXIuIFRoaXMgaXMgc28gdGhhdCBhbnkgdXNlcgotLy8gZXJyb3JzIGR1ZSB0byBpbmNvcnJlY3Qg
bWFwIGtleSBvciB2YWx1ZSB0eXBlcyBhcmUgcmFpc2VkIGFzIGNsb3NlIGFzCi0vLyBwb3NzaWJs
ZSB0byB0aGUgZXJyb3Igc2l0ZSwgcmF0aGVyIHRoYW4gYXQgc29tZSBkZWZlcnJlZCBwb2ludCAo
ZS5nLiwKLS8vIHNlcmlhbGl6YXRpb24pLgotLy8KLS8vIFdlIGJ1aWxkIG91ciBgTWFwYCBvbiB0
b3Agb2YgdXBiX3N0cnRhYmxlIHNvIHRoYXQgd2UncmUgYWJsZSB0byB0YWtlCi0vLyBhZHZhbnRh
Z2Ugb2YgdGhlIG5hdGl2ZV9zbG90IHN0b3JhZ2UgYWJzdHJhY3Rpb24sIGFzIFJlcGVhdGVkRmll
bGQgZG9lcy4KLS8vIChUaGlzIGlzIG5vdCBxdWl0ZSBhIHBlcmZlY3QgbWFwcGluZyAtLSBzZWUg
dGhlIGtleSBjb252ZXJzaW9ucyBiZWxvdyAtLSBidXQKLS8vIGdpdmVzIHVzIGZ1bGwgc3VwcG9y
dCBhbmQgZXJyb3ItY2hlY2tpbmcgZm9yIGFsbCB2YWx1ZSB0eXBlcyBmb3IgZnJlZS4pCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBNYXAgdmFsdWVzIGFyZSBzdG9yZWQgdXNpbmcgdGhl
IG5hdGl2ZV9zbG90IGFic3RyYWN0aW9uIChhcyB3aXRoIHJlcGVhdGVkCi0vLyBmaWVsZCB2YWx1
ZXMpLCBidXQga2V5cyBhcmUgYSBiaXQgc3BlY2lhbC4gU2luY2Ugd2UgdXNlIGEgc3RydGFibGUs
IHdlIG5lZWQKLS8vIHRvIHN0b3JlIGtleXMgYXMgc2VxdWVuY2VzIG9mIGJ5dGVzIHN1Y2ggdGhh
dCBlcXVhbGl0eSBvZiB0aG9zZSBieXRlcyBtYXBzCi0vLyBvbmUtdG8tb25lIHRvIGVxdWFsaXR5
IG9mIGtleXMuIFdlIHN0b3JlIHN0cmluZ3MgZGlyZWN0bHkgKGkuZS4sIHRoZXkgbWFwIHRvCi0v
LyB0aGVpciBvd24gYnl0ZXMpIGFuZCBpbnRlZ2VycyBhcyBuYXRpdmUgaW50ZWdlcnMgKHVzaW5n
IHRoZSBuYXRpdmVfc2xvdAotLy8gYWJzdHJhY3Rpb24pLgotCi0vLyBOb3RlIHRoYXQgdGhlcmUg
aXMgYW5vdGhlciB0cmFkZW9mZiBoZXJlIGluIGtlZXBpbmcgc3RyaW5nIGtleXMgYXMgbmF0aXZl
Ci0vLyBzdHJpbmdzIHJhdGhlciB0aGFuIFJ1Ynkgc3RyaW5nczogdHJhdmVyc2luZyB0aGUgTWFw
IHJlcXVpcmVzIGNvbnZlcnNpb24gdG8KLS8vIFJ1Ynkgc3RyaW5nIHZhbHVlcyBvbiBldmVyeSB0
cmF2ZXJzYWwsIHBvdGVudGlhbGx5IGNyZWF0aW5nIG1vcmUgZ2FyYmFnZS4gV2UKLS8vIHNob3Vs
ZCBjb25zaWRlciB3YXlzIHRvIGNhY2hlIGEgUnVieSB2ZXJzaW9uIG9mIHRoZSBrZXkgaWYgdGhp
cyBiZWNvbWVzIGFuCi0vLyBpc3N1ZSBsYXRlci4KLQotLy8gRm9ybXMgYSBrZXkgdG8gdXNlIHdp
dGggdGhlIHVuZGVybHlpbmcgc3RydGFibGUgZnJvbSBhIFJ1Ynkga2V5IHZhbHVlLiB8YnVmfAot
Ly8gbXVzdCBwb2ludCB0byBUQUJMRV9LRVlfQlVGX0xFTkdUSCBieXRlcyBvZiB0ZW1wb3Jhcnkg
c3BhY2UsIHVzZWQgdG8KLS8vIGNvbnN0cnVjdCBhIGtleSBieXRlIHNlcXVlbmNlIGlmIG5lZWRl
ZC4gfG91dF9rZXl8IGFuZCB8b3V0X2xlbmd0aHwgcHJvdmlkZQotLy8gdGhlIHJlc3VsdGluZyBr
ZXkgZGF0YS9sZW5ndGguCi0jZGVmaW5lIFRBQkxFX0tFWV9CVUZfTEVOR1RIIDggIC8vIHNpemVv
Zih1aW50NjRfdCkKLXN0YXRpYyB2b2lkIHRhYmxlX2tleShNYXAqIHNlbGYsIFZBTFVFIGtleSwK
LSAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBidWYsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhcioqIG91dF9rZXksCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiBvdXRf
bGVuZ3RoKSB7Ci0gIHN3aXRjaCAoc2VsZi0+a2V5X3R5cGUpIHsKLSAgICBjYXNlIFVQQl9UWVBF
X0JZVEVTOgotICAgIGNhc2UgVVBCX1RZUEVfU1RSSU5HOgotICAgICAgLy8gU3RyaW5nczogdXNl
IHN0cmluZyBjb250ZW50IGRpcmVjdGx5LgotICAgICAgQ2hlY2tfVHlwZShrZXksIFRfU1RSSU5H
KTsKLSAgICAgIG5hdGl2ZV9zbG90X3ZhbGlkYXRlX3N0cmluZ19lbmNvZGluZyhzZWxmLT5rZXlf
dHlwZSwga2V5KTsKLSAgICAgICpvdXRfa2V5ID0gUlNUUklOR19QVFIoa2V5KTsKLSAgICAgICpv
dXRfbGVuZ3RoID0gUlNUUklOR19MRU4oa2V5KTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBV
UEJfVFlQRV9CT09MOgotICAgIGNhc2UgVVBCX1RZUEVfSU5UMzI6Ci0gICAgY2FzZSBVUEJfVFlQ
RV9JTlQ2NDoKLSAgICBjYXNlIFVQQl9UWVBFX1VJTlQzMjoKLSAgICBjYXNlIFVQQl9UWVBFX1VJ
TlQ2NDoKLSAgICAgIG5hdGl2ZV9zbG90X3NldChzZWxmLT5rZXlfdHlwZSwgUW5pbCwgYnVmLCBr
ZXkpOwotICAgICAgKm91dF9rZXkgPSBidWY7Ci0gICAgICAqb3V0X2xlbmd0aCA9IG5hdGl2ZV9z
bG90X3NpemUoc2VsZi0+a2V5X3R5cGUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgLy8gTWFwIGNvbnN0cnVjdG9yIHNob3VsZCBub3QgYWxsb3cgYSBNYXAgd2l0aCBhbm90
aGVyIGtleSB0eXBlIHRvIGJlCi0gICAgICAvLyBjb25zdHJ1Y3RlZC4KLSAgICAgIGFzc2VydChm
YWxzZSk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgVkFMVUUgdGFibGVfa2V5X3Rv
X3J1YnkoTWFwKiBzZWxmLCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW5ndGgpIHsKLSAgc3dp
dGNoIChzZWxmLT5rZXlfdHlwZSkgewotICAgIGNhc2UgVVBCX1RZUEVfQllURVM6Ci0gICAgY2Fz
ZSBVUEJfVFlQRV9TVFJJTkc6IHsKLSAgICAgIFZBTFVFIHJldCA9IHJiX3N0cl9uZXcoYnVmLCBs
ZW5ndGgpOwotICAgICAgcmJfZW5jX2Fzc29jaWF0ZShyZXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgIChzZWxmLT5rZXlfdHlwZSA9PSBVUEJfVFlQRV9CWVRFUykgPwotICAgICAgICAgICAgICAg
ICAgICAgICBrUnVieVN0cmluZzhiaXRFbmNvZGluZyA6IGtSdWJ5U3RyaW5nVXRmOEVuY29kaW5n
KTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgY2FzZSBVUEJfVFlQRV9CT09MOgot
ICAgIGNhc2UgVVBCX1RZUEVfSU5UMzI6Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQ2NDoKLSAgICBj
YXNlIFVQQl9UWVBFX1VJTlQzMjoKLSAgICBjYXNlIFVQQl9UWVBFX1VJTlQ2NDoKLSAgICAgIHJl
dHVybiBuYXRpdmVfc2xvdF9nZXQoc2VsZi0+a2V5X3R5cGUsIFFuaWwsIGJ1Zik7Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgIHJldHVybiBRbmlsOwotICB9Ci19
Ci0KLXN0YXRpYyB2b2lkKiB2YWx1ZV9tZW1vcnkodXBiX3ZhbHVlKiB2KSB7Ci0gIHJldHVybiAo
dm9pZCopKCZ2LT52YWwpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWFwIGNv
bnRhaW5lciB0eXBlLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY29uc3QgcmJfZGF0YV90
eXBlX3QgTWFwX3R5cGUgPSB7Ci0gICJHb29nbGU6OlByb3RvYnVmOjpNYXAiLAotICB7IE1hcF9t
YXJrLCBNYXBfZnJlZSwgTlVMTCB9LAotfTsKLQotVkFMVUUgY01hcDsKLQotTWFwKiBydWJ5X3Rv
X01hcChWQUxVRSBfc2VsZikgewotICBNYXAqIHNlbGY7Ci0gIFR5cGVkRGF0YV9HZXRfU3RydWN0
KF9zZWxmLCBNYXAsICZNYXBfdHlwZSwgc2VsZik7Ci0gIHJldHVybiBzZWxmOwotfQotCi12b2lk
IE1hcF9tYXJrKHZvaWQqIF9zZWxmKSB7Ci0gIE1hcCogc2VsZiA9IF9zZWxmOwotCi0gIHJiX2dj
X21hcmsoc2VsZi0+dmFsdWVfdHlwZV9jbGFzcyk7Ci0KLSAgaWYgKHNlbGYtPnZhbHVlX3R5cGUg
PT0gVVBCX1RZUEVfU1RSSU5HIHx8Ci0gICAgICBzZWxmLT52YWx1ZV90eXBlID09IFVQQl9UWVBF
X0JZVEVTIHx8Ci0gICAgICBzZWxmLT52YWx1ZV90eXBlID09IFVQQl9UWVBFX01FU1NBR0UpIHsK
LSAgICB1cGJfc3RydGFibGVfaXRlciBpdDsKLSAgICBmb3IgKHVwYl9zdHJ0YWJsZV9iZWdpbigm
aXQsICZzZWxmLT50YWJsZSk7Ci0gICAgICAgICAhdXBiX3N0cnRhYmxlX2RvbmUoJml0KTsKLSAg
ICAgICAgIHVwYl9zdHJ0YWJsZV9uZXh0KCZpdCkpIHsKLSAgICAgIHVwYl92YWx1ZSB2ID0gdXBi
X3N0cnRhYmxlX2l0ZXJfdmFsdWUoJml0KTsKLSAgICAgIHZvaWQqIG1lbSA9IHZhbHVlX21lbW9y
eSgmdik7Ci0gICAgICBuYXRpdmVfc2xvdF9tYXJrKHNlbGYtPnZhbHVlX3R5cGUsIG1lbSk7Ci0g
ICAgfQotICB9Ci19Ci0KLXZvaWQgTWFwX2ZyZWUodm9pZCogX3NlbGYpIHsKLSAgTWFwKiBzZWxm
ID0gX3NlbGY7Ci0gIHVwYl9zdHJ0YWJsZV91bmluaXQoJnNlbGYtPnRhYmxlKTsKLSAgeGZyZWUo
c2VsZik7Ci19Ci0KLVZBTFVFIE1hcF9hbGxvYyhWQUxVRSBrbGFzcykgewotICBNYXAqIHNlbGYg
PSBBTExPQyhNYXApOwotICBtZW1zZXQoc2VsZiwgMCwgc2l6ZW9mKE1hcCkpOwotICBzZWxmLT52
YWx1ZV90eXBlX2NsYXNzID0gUW5pbDsKLSAgcmV0dXJuIFR5cGVkRGF0YV9XcmFwX1N0cnVjdChr
bGFzcywgJk1hcF90eXBlLCBzZWxmKTsKLX0KLQotc3RhdGljIGJvb2wgbmVlZHNfdHlwZWNsYXNz
KHVwYl9maWVsZHR5cGVfdCB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVVBC
X1RZUEVfTUVTU0FHRToKLSAgICBjYXNlIFVQQl9UWVBFX0VOVU06Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLS8qCi0gKiBj
YWxsLXNlcToKLSAqICAgICBNYXAubmV3KGtleV90eXBlLCB2YWx1ZV90eXBlLCB2YWx1ZV90eXBl
Y2xhc3MgPSBuaWwsIGluaXRfaGFzaG1hcCA9IHt9KQotICogICAgID0+IG5ldyBtYXAKLSAqCi0g
KiBBbGxvY2F0ZXMgYSBuZXcgTWFwIGNvbnRhaW5lci4gVGhpcyBjb25zdHJ1Y3RvciBtYXkgYmUg
Y2FsbGVkIHdpdGggMiwgMywgb3IgNAotICogYXJndW1lbnRzLiBUaGUgZmlyc3QgdHdvIGFyZ3Vt
ZW50cyBhcmUgYWx3YXlzIHByZXNlbnQgYW5kIGFyZSBzeW1ib2xzICh0YWtpbmcKLSAqIG9uIHRo
ZSBzYW1lIHZhbHVlcyBhcyBmaWVsZC10eXBlIHN5bWJvbHMgaW4gbWVzc2FnZSBkZXNjcmlwdG9y
cykgdGhhdAotICogaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIG1hcCBrZXkgYW5kIHZhbHVlIGZp
ZWxkcy4KLSAqCi0gKiBUaGUgc3VwcG9ydGVkIGtleSB0eXBlcyBhcmU6IDppbnQzMiwgOmludDY0
LCA6dWludDMyLCA6dWludDY0LCA6Ym9vbCwKLSAqIDpzdHJpbmcsIDpieXRlcy4KLSAqCi0gKiBU
aGUgc3VwcG9ydGVkIHZhbHVlIHR5cGVzIGFyZTogOmludDMyLCA6aW50NjQsIDp1aW50MzIsIDp1
aW50NjQsIDpib29sLAotICogOnN0cmluZywgOmJ5dGVzLCA6ZW51bSwgOm1lc3NhZ2UuCi0gKgot
ICogVGhlIHRoaXJkIGFyZ3VtZW50LCB2YWx1ZV90eXBlY2xhc3MsIG11c3QgYmUgcHJlc2VudCBp
ZiB2YWx1ZV90eXBlIGlzIDplbnVtCi0gKiBvciA6bWVzc2FnZS4gQXMgaW4gUmVwZWF0ZWRGaWVs
ZCNuZXcsIHRoaXMgYXJndW1lbnQgbXVzdCBiZSBhIG1lc3NhZ2UgY2xhc3MKLSAqIChmb3IgOm1l
c3NhZ2UpIG9yIGVudW0gbW9kdWxlIChmb3IgOmVudW0pLgotICoKLSAqIFRoZSBsYXN0IGFyZ3Vt
ZW50LCBpZiBwcmVzZW50LCBwcm92aWRlcyBpbml0aWFsIGNvbnRlbnQgZm9yIG1hcC4gTm90ZSB0
aGF0Ci0gKiB0aGlzIG1heSBiZSBhbiBvcmRpbmFyeSBSdWJ5IGhhc2htYXAgb3IgYW5vdGhlciBN
YXAgaW5zdGFuY2Ugd2l0aCBpZGVudGljYWwKLSAqIGtleSBhbmQgdmFsdWUgdHlwZXMuIEFsc28g
bm90ZSB0aGF0IHRoaXMgYXJndW1lbnQgbWF5IGJlIHByZXNlbnQgd2hldGhlciBvcgotICogbm90
IHZhbHVlX3R5cGVjbGFzcyBpcyBwcmVzZW50IChhbmQgaXQgaXMgdW5hbWJpZ3VvdXNseSBzZXBh
cmF0ZSBmcm9tCi0gKiB2YWx1ZV90eXBlY2xhc3MgYmVjYXVzZSB2YWx1ZV90eXBlY2xhc3MncyBw
cmVzZW5jZSBpcyBzdHJpY3RseSBkZXRlcm1pbmVkIGJ5Ci0gKiB2YWx1ZV90eXBlKS4gVGhlIGNv
bnRlbnRzIG9mIHRoaXMgaW5pdGlhbCBoYXNobWFwIG9yIE1hcCBpbnN0YW5jZSBhcmUKLSAqIHNo
YWxsb3ctY29waWVkIGludG8gdGhlIG5ldyBNYXA6IHRoZSBvcmlnaW5hbCBtYXAgaXMgdW5tb2Rp
ZmllZCwgYnV0Ci0gKiByZWZlcmVuY2VzIHRvIHVuZGVybHlpbmcgb2JqZWN0cyB3aWxsIGJlIHNo
YXJlZCBpZiB0aGUgdmFsdWUgdHlwZSBpcyBhCi0gKiBtZXNzYWdlIHR5cGUuCi0gKi8KLVZBTFVF
IE1hcF9pbml0KGludCBhcmdjLCBWQUxVRSogYXJndiwgVkFMVUUgX3NlbGYpIHsKLSAgTWFwKiBz
ZWxmID0gcnVieV90b19NYXAoX3NlbGYpOwotICBpbnQgaW5pdF92YWx1ZV9hcmc7Ci0KLSAgLy8g
V2UgdGFrZSBlaXRoZXIgdHdvIGFyZ3MgKDprZXlfdHlwZSwgOnZhbHVlX3R5cGUpLCB0aHJlZSBh
cmdzICg6a2V5X3R5cGUsCi0gIC8vIDp2YWx1ZV90eXBlLCAiVmFsdWVNZXNzYWdlVHlwZSIpLCBv
ciBmb3VyIGFyZ3MgKHRoZSBhYm92ZSBwbHVzIGFuIGluaXRpYWwKLSAgLy8gaGFzaG1hcCkuCi0g
IGlmIChhcmdjIDwgMiB8fCBhcmdjID4gNCkgewotICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwg
Ik1hcCBjb25zdHJ1Y3RvciBleHBlY3RzIDIsIDMgb3IgNCBhcmd1bWVudHMuIik7Ci0gIH0KLQot
ICBzZWxmLT5rZXlfdHlwZSA9IHJ1YnlfdG9fZmllbGR0eXBlKGFyZ3ZbMF0pOwotICBzZWxmLT52
YWx1ZV90eXBlID0gcnVieV90b19maWVsZHR5cGUoYXJndlsxXSk7Ci0KLSAgLy8gQ2hlY2sgdGhh
dCB0aGUga2V5IHR5cGUgaXMgYW4gYWxsb3dlZCB0eXBlLgotICBzd2l0Y2ggKHNlbGYtPmtleV90
eXBlKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQzMjoKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDY0
OgotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDMyOgotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDY0Ogot
ICAgIGNhc2UgVVBCX1RZUEVfQk9PTDoKLSAgICBjYXNlIFVQQl9UWVBFX1NUUklORzoKLSAgICBj
YXNlIFVQQl9UWVBFX0JZVEVTOgotICAgICAgLy8gVGhlc2UgYXJlIE9LLgotICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkludmFsaWQga2V5
IHR5cGUgZm9yIG1hcC4iKTsKLSAgfQotCi0gIGluaXRfdmFsdWVfYXJnID0gMjsKLSAgaWYgKG5l
ZWRzX3R5cGVjbGFzcyhzZWxmLT52YWx1ZV90eXBlKSAmJiBhcmdjID4gMikgewotICAgIHNlbGYt
PnZhbHVlX3R5cGVfY2xhc3MgPSBhcmd2WzJdOwotICAgIHZhbGlkYXRlX3R5cGVfY2xhc3Moc2Vs
Zi0+dmFsdWVfdHlwZSwgc2VsZi0+dmFsdWVfdHlwZV9jbGFzcyk7Ci0gICAgaW5pdF92YWx1ZV9h
cmcgPSAzOwotICB9Ci0KLSAgLy8gVGFibGUgdmFsdWUgdHlwZSBpcyBhbHdheXMgVUlOVDY0OiB0
aGlzIGVuc3VyZXMgZW5vdWdoIHNwYWNlIHRvIHN0b3JlIHRoZQotICAvLyBuYXRpdmVfc2xvdCB2
YWx1ZS4KLSAgaWYgKCF1cGJfc3RydGFibGVfaW5pdCgmc2VsZi0+dGFibGUsIFVQQl9DVFlQRV9V
SU5UNjQpKSB7Ci0gICAgcmJfcmFpc2UocmJfZVJ1bnRpbWVFcnJvciwgIkNvdWxkIG5vdCBhbGxv
Y2F0ZSB0YWJsZS4iKTsKLSAgfQotCi0gIGlmIChhcmdjID4gaW5pdF92YWx1ZV9hcmcpIHsKLSAg
ICBNYXBfbWVyZ2VfaW50b19zZWxmKF9zZWxmLCBhcmd2W2luaXRfdmFsdWVfYXJnXSk7Ci0gIH0K
LQotICByZXR1cm4gUW5pbDsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIE1hcC5lYWNo
KCZibG9jaykKLSAqCi0gKiBJbnZva2VzICZibG9jayBvbiBlYWNoIHxrZXksIHZhbHVlfCBwYWly
IGluIHRoZSBtYXAsIGluIHVuc3BlY2lmaWVkIG9yZGVyLgotICogTm90ZSB0aGF0IE1hcCBhbHNv
IGluY2x1ZGVzIEVudW1lcmFibGU7IG1hcCB0aHVzIGFjdHMgbGlrZSBhIG5vcm1hbCBSdWJ5Ci0g
KiBzZXF1ZW5jZS4KLSAqLwotVkFMVUUgTWFwX2VhY2goVkFMVUUgX3NlbGYpIHsKLSAgTWFwKiBz
ZWxmID0gcnVieV90b19NYXAoX3NlbGYpOwotCi0gIHVwYl9zdHJ0YWJsZV9pdGVyIGl0OwotICBm
b3IgKHVwYl9zdHJ0YWJsZV9iZWdpbigmaXQsICZzZWxmLT50YWJsZSk7Ci0gICAgICAgIXVwYl9z
dHJ0YWJsZV9kb25lKCZpdCk7Ci0gICAgICAgdXBiX3N0cnRhYmxlX25leHQoJml0KSkgewotCi0g
ICAgVkFMVUUga2V5ID0gdGFibGVfa2V5X3RvX3J1YnkoCi0gICAgICAgIHNlbGYsIHVwYl9zdHJ0
YWJsZV9pdGVyX2tleSgmaXQpLCB1cGJfc3RydGFibGVfaXRlcl9rZXlsZW5ndGgoJml0KSk7Ci0K
LSAgICB1cGJfdmFsdWUgdiA9IHVwYl9zdHJ0YWJsZV9pdGVyX3ZhbHVlKCZpdCk7Ci0gICAgdm9p
ZCogbWVtID0gdmFsdWVfbWVtb3J5KCZ2KTsKLSAgICBWQUxVRSB2YWx1ZSA9IG5hdGl2ZV9zbG90
X2dldChzZWxmLT52YWx1ZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYtPnZhbHVlX3R5cGVfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVtKTsKLQotICAgIHJiX3lpZWxkX3ZhbHVlcygyLCBrZXksIHZhbHVlKTsKLSAgfQotCi0g
IHJldHVybiBRbmlsOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgTWFwLmtleXMgPT4g
W2xpc3Rfb2Zfa2V5c10KLSAqCi0gKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGtleXMgY29udGFpbmVk
IGluIHRoZSBtYXAsIGluIHVuc3BlY2lmaWVkIG9yZGVyLgotICovCi1WQUxVRSBNYXBfa2V5cyhW
QUxVRSBfc2VsZikgewotICBNYXAqIHNlbGYgPSBydWJ5X3RvX01hcChfc2VsZik7Ci0KLSAgVkFM
VUUgcmV0ID0gcmJfYXJ5X25ldygpOwotICB1cGJfc3RydGFibGVfaXRlciBpdDsKLSAgZm9yICh1
cGJfc3RydGFibGVfYmVnaW4oJml0LCAmc2VsZi0+dGFibGUpOwotICAgICAgICF1cGJfc3RydGFi
bGVfZG9uZSgmaXQpOwotICAgICAgIHVwYl9zdHJ0YWJsZV9uZXh0KCZpdCkpIHsKLQotICAgIFZB
TFVFIGtleSA9IHRhYmxlX2tleV90b19ydWJ5KAotICAgICAgICBzZWxmLCB1cGJfc3RydGFibGVf
aXRlcl9rZXkoJml0KSwgdXBiX3N0cnRhYmxlX2l0ZXJfa2V5bGVuZ3RoKCZpdCkpOwotCi0gICAg
cmJfYXJ5X3B1c2gocmV0LCBrZXkpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoKLSAq
IGNhbGwtc2VxOgotICogICAgIE1hcC52YWx1ZXMgPT4gW2xpc3Rfb2ZfdmFsdWVzXQotICoKLSAq
IFJldHVybnMgdGhlIGxpc3Qgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgbWFwLCBpbiB1bnNw
ZWNpZmllZCBvcmRlci4KLSAqLwotVkFMVUUgTWFwX3ZhbHVlcyhWQUxVRSBfc2VsZikgewotICBN
YXAqIHNlbGYgPSBydWJ5X3RvX01hcChfc2VsZik7Ci0KLSAgVkFMVUUgcmV0ID0gcmJfYXJ5X25l
dygpOwotICB1cGJfc3RydGFibGVfaXRlciBpdDsKLSAgZm9yICh1cGJfc3RydGFibGVfYmVnaW4o
Jml0LCAmc2VsZi0+dGFibGUpOwotICAgICAgICF1cGJfc3RydGFibGVfZG9uZSgmaXQpOwotICAg
ICAgIHVwYl9zdHJ0YWJsZV9uZXh0KCZpdCkpIHsKLQotICAgIHVwYl92YWx1ZSB2ID0gdXBiX3N0
cnRhYmxlX2l0ZXJfdmFsdWUoJml0KTsKLSAgICB2b2lkKiBtZW0gPSB2YWx1ZV9tZW1vcnkoJnYp
OwotICAgIFZBTFVFIHZhbHVlID0gbmF0aXZlX3Nsb3RfZ2V0KHNlbGYtPnZhbHVlX3R5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+dmFsdWVfdHlwZV9jbGFzcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW0pOwotCi0gICAgcmJfYXJ5X3B1
c2gocmV0LCB2YWx1ZSk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKgotICogY2FsbC1z
ZXE6Ci0gKiAgICAgTWFwLltdKGtleSkgPT4gdmFsdWUKLSAqCi0gKiBBY2Nlc3NlcyB0aGUgZWxl
bWVudCBhdCB0aGUgZ2l2ZW4ga2V5LiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBrZXkgdHlw
ZSBpcwotICogaW5jb3JyZWN0LiBSZXR1cm5zIG5pbCB3aGVuIHRoZSBrZXkgaXMgbm90IHByZXNl
bnQgaW4gdGhlIG1hcC4KLSAqLwotVkFMVUUgTWFwX2luZGV4KFZBTFVFIF9zZWxmLCBWQUxVRSBr
ZXkpIHsKLSAgTWFwKiBzZWxmID0gcnVieV90b19NYXAoX3NlbGYpOwotCi0gIGNoYXIga2V5YnVm
W1RBQkxFX0tFWV9CVUZfTEVOR1RIXTsKLSAgY29uc3QgY2hhcioga2V5dmFsID0gTlVMTDsKLSAg
c2l6ZV90IGxlbmd0aCA9IDA7Ci0gIHVwYl92YWx1ZSB2OwotICB0YWJsZV9rZXkoc2VsZiwga2V5
LCBrZXlidWYsICZrZXl2YWwsICZsZW5ndGgpOwotCi0gIGlmICh1cGJfc3RydGFibGVfbG9va3Vw
Migmc2VsZi0+dGFibGUsIGtleXZhbCwgbGVuZ3RoLCAmdikpIHsKLSAgICB2b2lkKiBtZW0gPSB2
YWx1ZV9tZW1vcnkoJnYpOwotICAgIHJldHVybiBuYXRpdmVfc2xvdF9nZXQoc2VsZi0+dmFsdWVf
dHlwZSwgc2VsZi0+dmFsdWVfdHlwZV9jbGFzcywgbWVtKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gUW5pbDsKLSAgfQotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgTWFwLltdPShrZXks
IHZhbHVlKSA9PiB2YWx1ZQotICoKLSAqIEluc2VydHMgb3Igb3ZlcndyaXRlcyB0aGUgdmFsdWUg
YXQgdGhlIGdpdmVuIGtleSB3aXRoIHRoZSBnaXZlbiBuZXcgdmFsdWUuCi0gKiBUaHJvd3MgYW4g
ZXhjZXB0aW9uIGlmIHRoZSBrZXkgdHlwZSBpcyBpbmNvcnJlY3QuIFJldHVybnMgdGhlIG5ldyB2
YWx1ZSB0aGF0Ci0gKiB3YXMganVzdCBpbnNlcnRlZC4KLSAqLwotVkFMVUUgTWFwX2luZGV4X3Nl
dChWQUxVRSBfc2VsZiwgVkFMVUUga2V5LCBWQUxVRSB2YWx1ZSkgewotICBNYXAqIHNlbGYgPSBy
dWJ5X3RvX01hcChfc2VsZik7Ci0KLSAgY2hhciBrZXlidWZbVEFCTEVfS0VZX0JVRl9MRU5HVEhd
OwotICBjb25zdCBjaGFyKiBrZXl2YWwgPSBOVUxMOwotICBzaXplX3QgbGVuZ3RoID0gMDsKLSAg
dXBiX3ZhbHVlIHY7Ci0gIHZvaWQqIG1lbTsKLSAgdGFibGVfa2V5KHNlbGYsIGtleSwga2V5YnVm
LCAma2V5dmFsLCAmbGVuZ3RoKTsKLQotICBtZW0gPSB2YWx1ZV9tZW1vcnkoJnYpOwotICBuYXRp
dmVfc2xvdF9zZXQoc2VsZi0+dmFsdWVfdHlwZSwgc2VsZi0+dmFsdWVfdHlwZV9jbGFzcywgbWVt
LCB2YWx1ZSk7Ci0KLSAgLy8gUmVwbGFjZSBhbnkgZXhpc3RpbmcgdmFsdWUgYnkgaXNzdWluZyBh
ICdyZW1vdmUnIG9wZXJhdGlvbiBmaXJzdC4KLSAgdXBiX3N0cnRhYmxlX3JlbW92ZTIoJnNlbGYt
PnRhYmxlLCBrZXl2YWwsIGxlbmd0aCwgTlVMTCk7Ci0gIGlmICghdXBiX3N0cnRhYmxlX2luc2Vy
dDIoJnNlbGYtPnRhYmxlLCBrZXl2YWwsIGxlbmd0aCwgdikpIHsKLSAgICByYl9yYWlzZShyYl9l
UnVudGltZUVycm9yLCAiQ291bGQgbm90IGluc2VydCBpbnRvIHRhYmxlIik7Ci0gIH0KLQotICAv
LyBSdWJ5IGhhc2htYXAncyA6W109IG1ldGhvZCBhbHNvIHJldHVybnMgdGhlIGluc2VydGVkIHZh
bHVlLgotICByZXR1cm4gdmFsdWU7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBNYXAu
aGFzX2tleT8oa2V5KSA9PiBib29sCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBr
ZXkgaXMgcHJlc2VudCBpbiB0aGUgbWFwLiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmCi0gKiB0aGUg
a2V5IGhhcyB0aGUgd3JvbmcgdHlwZS4KLSAqLwotVkFMVUUgTWFwX2hhc19rZXkoVkFMVUUgX3Nl
bGYsIFZBTFVFIGtleSkgewotICBNYXAqIHNlbGYgPSBydWJ5X3RvX01hcChfc2VsZik7Ci0KLSAg
Y2hhciBrZXlidWZbVEFCTEVfS0VZX0JVRl9MRU5HVEhdOwotICBjb25zdCBjaGFyKiBrZXl2YWwg
PSBOVUxMOwotICBzaXplX3QgbGVuZ3RoID0gMDsKLSAgdGFibGVfa2V5KHNlbGYsIGtleSwga2V5
YnVmLCAma2V5dmFsLCAmbGVuZ3RoKTsKLQotICBpZiAodXBiX3N0cnRhYmxlX2xvb2t1cDIoJnNl
bGYtPnRhYmxlLCBrZXl2YWwsIGxlbmd0aCwgTlVMTCkpIHsKLSAgICByZXR1cm4gUXRydWU7Ci0g
IH0gZWxzZSB7Ci0gICAgcmV0dXJuIFFmYWxzZTsKLSAgfQotfQotCi0vKgotICogY2FsbC1zZXE6
Ci0gKiAgICAgTWFwLmRlbGV0ZShrZXkpID0+IG9sZF92YWx1ZQotICoKLSAqIERlbGV0ZXMgdGhl
IHZhbHVlIGF0IHRoZSBnaXZlbiBrZXksIGlmIGFueSwgcmV0dXJuaW5nIGVpdGhlciB0aGUgb2xk
IHZhbHVlIG9yCi0gKiBuaWwgaWYgbm9uZSB3YXMgcHJlc2VudC4gVGhyb3dzIGFuIGV4Y2VwdGlv
biBpZiB0aGUga2V5IGlzIG9mIHRoZSB3cm9uZyB0eXBlLgotICovCi1WQUxVRSBNYXBfZGVsZXRl
KFZBTFVFIF9zZWxmLCBWQUxVRSBrZXkpIHsKLSAgTWFwKiBzZWxmID0gcnVieV90b19NYXAoX3Nl
bGYpOwotCi0gIGNoYXIga2V5YnVmW1RBQkxFX0tFWV9CVUZfTEVOR1RIXTsKLSAgY29uc3QgY2hh
cioga2V5dmFsID0gTlVMTDsKLSAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0gIHVwYl92YWx1ZSB2Owot
ICB0YWJsZV9rZXkoc2VsZiwga2V5LCBrZXlidWYsICZrZXl2YWwsICZsZW5ndGgpOwotCi0gIGlm
ICh1cGJfc3RydGFibGVfcmVtb3ZlMigmc2VsZi0+dGFibGUsIGtleXZhbCwgbGVuZ3RoLCAmdikp
IHsKLSAgICB2b2lkKiBtZW0gPSB2YWx1ZV9tZW1vcnkoJnYpOwotICAgIHJldHVybiBuYXRpdmVf
c2xvdF9nZXQoc2VsZi0+dmFsdWVfdHlwZSwgc2VsZi0+dmFsdWVfdHlwZV9jbGFzcywgbWVtKTsK
LSAgfSBlbHNlIHsKLSAgICByZXR1cm4gUW5pbDsKLSAgfQotfQotCi0vKgotICogY2FsbC1zZXE6
Ci0gKiAgICAgTWFwLmNsZWFyCi0gKgotICogUmVtb3ZlcyBhbGwgZW50cmllcyBmcm9tIHRoZSBt
YXAuCi0gKi8KLVZBTFVFIE1hcF9jbGVhcihWQUxVRSBfc2VsZikgewotICBNYXAqIHNlbGYgPSBy
dWJ5X3RvX01hcChfc2VsZik7Ci0KLSAgLy8gVW5pbml0IGFuZCByZWluaXQgdGhlIHRhYmxlIC0t
IHRoaXMgaXMgZmFzdGVyIHRoYW4gaXRlcmF0aW5nIGFuZCBkb2luZyBhCi0gIC8vIGRlbGV0ZS1s
b29rdXAgb24gZWFjaCBrZXkuCi0gIHVwYl9zdHJ0YWJsZV91bmluaXQoJnNlbGYtPnRhYmxlKTsK
LSAgaWYgKCF1cGJfc3RydGFibGVfaW5pdCgmc2VsZi0+dGFibGUsIFVQQl9DVFlQRV9JTlQ2NCkp
IHsKLSAgICByYl9yYWlzZShyYl9lUnVudGltZUVycm9yLCAiVW5hYmxlIHRvIHJlLWluaXRpYWxp
emUgdGFibGUiKTsKLSAgfQotICByZXR1cm4gUW5pbDsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgot
ICogICAgIE1hcC5sZW5ndGgKLSAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyAo
a2V5LXZhbHVlIHBhaXJzKSBpbiB0aGUgbWFwLgotICovCi1WQUxVRSBNYXBfbGVuZ3RoKFZBTFVF
IF9zZWxmKSB7Ci0gIE1hcCogc2VsZiA9IHJ1YnlfdG9fTWFwKF9zZWxmKTsKLSAgcmV0dXJuIFVM
TDJOVU0odXBiX3N0cnRhYmxlX2NvdW50KCZzZWxmLT50YWJsZSkpOwotfQotCi1zdGF0aWMgVkFM
VUUgTWFwX25ld190aGlzX3R5cGUoVkFMVUUgX3NlbGYpIHsKLSAgTWFwKiBzZWxmID0gcnVieV90
b19NYXAoX3NlbGYpOwotICBWQUxVRSBuZXdfbWFwID0gUW5pbDsKLSAgVkFMVUUga2V5X3R5cGUg
PSBmaWVsZHR5cGVfdG9fcnVieShzZWxmLT5rZXlfdHlwZSk7Ci0gIFZBTFVFIHZhbHVlX3R5cGUg
PSBmaWVsZHR5cGVfdG9fcnVieShzZWxmLT52YWx1ZV90eXBlKTsKLSAgaWYgKHNlbGYtPnZhbHVl
X3R5cGVfY2xhc3MgIT0gUW5pbCkgewotICAgIG5ld19tYXAgPSByYl9mdW5jYWxsKENMQVNTX09G
KF9zZWxmKSwgcmJfaW50ZXJuKCJuZXciKSwgMywKLSAgICAgICAgICAgICAgICAgICAgICAgICBr
ZXlfdHlwZSwgdmFsdWVfdHlwZSwgc2VsZi0+dmFsdWVfdHlwZV9jbGFzcyk7Ci0gIH0gZWxzZSB7
Ci0gICAgbmV3X21hcCA9IHJiX2Z1bmNhbGwoQ0xBU1NfT0YoX3NlbGYpLCByYl9pbnRlcm4oIm5l
dyIpLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgIGtleV90eXBlLCB2YWx1ZV90eXBlKTsK
LSAgfQotICByZXR1cm4gbmV3X21hcDsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIE1h
cC5kdXAgPT4gbmV3X21hcAotICoKLSAqIER1cGxpY2F0ZXMgdGhpcyBtYXAgd2l0aCBhIHNoYWxs
b3cgY29weS4gUmVmZXJlbmNlcyB0byBhbGwgbm9uLXByaW1pdGl2ZQotICogZWxlbWVudCBvYmpl
Y3RzIChlLmcuLCBzdWJtZXNzYWdlcykgYXJlIHNoYXJlZC4KLSAqLwotVkFMVUUgTWFwX2R1cChW
QUxVRSBfc2VsZikgewotICBNYXAqIHNlbGYgPSBydWJ5X3RvX01hcChfc2VsZik7Ci0gIFZBTFVF
IG5ld19tYXAgPSBNYXBfbmV3X3RoaXNfdHlwZShfc2VsZik7Ci0gIE1hcCogbmV3X3NlbGYgPSBy
dWJ5X3RvX01hcChuZXdfbWFwKTsKLQotICB1cGJfc3RydGFibGVfaXRlciBpdDsKLSAgZm9yICh1
cGJfc3RydGFibGVfYmVnaW4oJml0LCAmc2VsZi0+dGFibGUpOwotICAgICAgICF1cGJfc3RydGFi
bGVfZG9uZSgmaXQpOwotICAgICAgIHVwYl9zdHJ0YWJsZV9uZXh0KCZpdCkpIHsKLQotICAgIHVw
Yl92YWx1ZSB2ID0gdXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoJml0KTsKLSAgICB2b2lkKiBtZW0g
PSB2YWx1ZV9tZW1vcnkoJnYpOwotICAgIHVwYl92YWx1ZSBkdXA7Ci0gICAgdm9pZCogZHVwX21l
bSA9IHZhbHVlX21lbW9yeSgmZHVwKTsKLSAgICBuYXRpdmVfc2xvdF9kdXAoc2VsZi0+dmFsdWVf
dHlwZSwgZHVwX21lbSwgbWVtKTsKLQotICAgIGlmICghdXBiX3N0cnRhYmxlX2luc2VydDIoJm5l
d19zZWxmLT50YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdHJ0YWJs
ZV9pdGVyX2tleSgmaXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0cnRh
YmxlX2l0ZXJfa2V5bGVuZ3RoKCZpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
dXApKSB7Ci0gICAgICByYl9yYWlzZShyYl9lUnVudGltZUVycm9yLCAiRXJyb3IgaW5zZXJ0aW5n
IHZhbHVlIGludG8gbmV3IHRhYmxlIik7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIG5ld19tYXA7
Ci19Ci0KLS8vIFVzZWQgYnkgR29vZ2xlOjpQcm90b2J1Zi5kZWVwX2NvcHkgYnV0IG5vdCBleHBv
c2VkIGRpcmVjdGx5LgotVkFMVUUgTWFwX2RlZXBfY29weShWQUxVRSBfc2VsZikgewotICBNYXAq
IHNlbGYgPSBydWJ5X3RvX01hcChfc2VsZik7Ci0gIFZBTFVFIG5ld19tYXAgPSBNYXBfbmV3X3Ro
aXNfdHlwZShfc2VsZik7Ci0gIE1hcCogbmV3X3NlbGYgPSBydWJ5X3RvX01hcChuZXdfbWFwKTsK
LQotICB1cGJfc3RydGFibGVfaXRlciBpdDsKLSAgZm9yICh1cGJfc3RydGFibGVfYmVnaW4oJml0
LCAmc2VsZi0+dGFibGUpOwotICAgICAgICF1cGJfc3RydGFibGVfZG9uZSgmaXQpOwotICAgICAg
IHVwYl9zdHJ0YWJsZV9uZXh0KCZpdCkpIHsKLQotICAgIHVwYl92YWx1ZSB2ID0gdXBiX3N0cnRh
YmxlX2l0ZXJfdmFsdWUoJml0KTsKLSAgICB2b2lkKiBtZW0gPSB2YWx1ZV9tZW1vcnkoJnYpOwot
ICAgIHVwYl92YWx1ZSBkdXA7Ci0gICAgdm9pZCogZHVwX21lbSA9IHZhbHVlX21lbW9yeSgmZHVw
KTsKLSAgICBuYXRpdmVfc2xvdF9kZWVwX2NvcHkoc2VsZi0+dmFsdWVfdHlwZSwgZHVwX21lbSwg
bWVtKTsKLQotICAgIGlmICghdXBiX3N0cnRhYmxlX2luc2VydDIoJm5ld19zZWxmLT50YWJsZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdHJ0YWJsZV9pdGVyX2tleSgmaXQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0cnRhYmxlX2l0ZXJfa2V5bGVu
Z3RoKCZpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXApKSB7Ci0gICAgICBy
Yl9yYWlzZShyYl9lUnVudGltZUVycm9yLCAiRXJyb3IgaW5zZXJ0aW5nIHZhbHVlIGludG8gbmV3
IHRhYmxlIik7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIG5ld19tYXA7Ci19Ci0KLS8qCi0gKiBj
YWxsLXNlcToKLSAqICAgICBNYXAuPT0ob3RoZXIpID0+IGJvb2xlYW4KLSAqCi0gKiBDb21wYXJl
cyB0aGlzIG1hcCB0byBhbm90aGVyLiBNYXBzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgaWRlbnRp
Y2FsIGtleSBzZXRzLAotICogYW5kIGZvciBlYWNoIGtleSwgdGhlIHZhbHVlcyBpbiBib3RoIG1h
cHMgY29tcGFyZSBlcXVhbC4gRWxlbWVudHMgYXJlCi0gKiBjb21wYXJlZCBhcyBwZXIgbm9ybWFs
IFJ1Ynkgc2VtYW50aWNzLCBieSBjYWxsaW5nIHRoZWlyIDo9PSBtZXRob2RzIChvcgotICogcGVy
Zm9ybWluZyBhIG1vcmUgZWZmaWNpZW50IGNvbXBhcmlzb24gZm9yIHByaW1pdGl2ZSB0eXBlcyku
Ci0gKgotICogTWFwcyB3aXRoIGRpc3NpbWlsYXIga2V5IHR5cGVzIG9yIHZhbHVlIHR5cGVzL3R5
cGVjbGFzc2VzIGFyZSBuZXZlciBlcXVhbCwKLSAqIGV2ZW4gaWYgdmFsdWUgY29tcGFyaXNvbiAo
Zm9yIGV4YW1wbGUsIGJldHdlZW4gaW50ZWdlcnMgYW5kIGZsb2F0cykgd291bGQKLSAqIGhhdmUg
b3RoZXJ3aXNlIGluZGljYXRlZCB0aGF0IGV2ZXJ5IGVsZW1lbnQgaGFzIGVxdWFsIHZhbHVlLgot
ICovCi1WQUxVRSBNYXBfZXEoVkFMVUUgX3NlbGYsIFZBTFVFIF9vdGhlcikgewotICBNYXAqIHNl
bGYgPSBydWJ5X3RvX01hcChfc2VsZik7Ci0gIE1hcCogb3RoZXI7Ci0gIHVwYl9zdHJ0YWJsZV9p
dGVyIGl0OwotCi0gIC8vIEFsbG93IGNvbXBhcmlzb25zIHRvIFJ1YnkgaGFzaG1hcHMgYnkgY29u
dmVydGluZyB0byBhIHRlbXBvcmFyeSBNYXAKLSAgLy8gaW5zdGFuY2UuIFNsb3csIGJ1dCB3b3Jr
YWJsZS4KLSAgaWYgKFRZUEUoX290aGVyKSA9PSBUX0hBU0gpIHsKLSAgICBWQUxVRSBvdGhlcl9t
YXAgPSBNYXBfbmV3X3RoaXNfdHlwZShfc2VsZik7Ci0gICAgTWFwX21lcmdlX2ludG9fc2VsZihv
dGhlcl9tYXAsIF9vdGhlcik7Ci0gICAgX290aGVyID0gb3RoZXJfbWFwOwotICB9Ci0KLSAgb3Ro
ZXIgPSBydWJ5X3RvX01hcChfb3RoZXIpOwotCi0gIGlmIChzZWxmID09IG90aGVyKSB7Ci0gICAg
cmV0dXJuIFF0cnVlOwotICB9Ci0gIGlmIChzZWxmLT5rZXlfdHlwZSAhPSBvdGhlci0+a2V5X3R5
cGUgfHwKLSAgICAgIHNlbGYtPnZhbHVlX3R5cGUgIT0gb3RoZXItPnZhbHVlX3R5cGUgfHwKLSAg
ICAgIHNlbGYtPnZhbHVlX3R5cGVfY2xhc3MgIT0gb3RoZXItPnZhbHVlX3R5cGVfY2xhc3MpIHsK
LSAgICByZXR1cm4gUWZhbHNlOwotICB9Ci0gIGlmICh1cGJfc3RydGFibGVfY291bnQoJnNlbGYt
PnRhYmxlKSAhPSB1cGJfc3RydGFibGVfY291bnQoJm90aGVyLT50YWJsZSkpIHsKLSAgICByZXR1
cm4gUWZhbHNlOwotICB9Ci0KLSAgLy8gRm9yIGVhY2ggbWVtYmVyIG9mIHNlbGYsIGNoZWNrIHRo
YXQgYW4gZXF1YWwgbWVtYmVyIGV4aXN0cyBhdCB0aGUgc2FtZSBrZXkKLSAgLy8gaW4gb3RoZXIu
Ci0gIGZvciAodXBiX3N0cnRhYmxlX2JlZ2luKCZpdCwgJnNlbGYtPnRhYmxlKTsKLSAgICAgICAh
dXBiX3N0cnRhYmxlX2RvbmUoJml0KTsKLSAgICAgICB1cGJfc3RydGFibGVfbmV4dCgmaXQpKSB7
Ci0KLSAgICB1cGJfdmFsdWUgdiA9IHVwYl9zdHJ0YWJsZV9pdGVyX3ZhbHVlKCZpdCk7Ci0gICAg
dm9pZCogbWVtID0gdmFsdWVfbWVtb3J5KCZ2KTsKLSAgICB1cGJfdmFsdWUgb3RoZXJfdjsKLSAg
ICB2b2lkKiBvdGhlcl9tZW0gPSB2YWx1ZV9tZW1vcnkoJm90aGVyX3YpOwotCi0gICAgaWYgKCF1
cGJfc3RydGFibGVfbG9va3VwMigmb3RoZXItPnRhYmxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXBiX3N0cnRhYmxlX2l0ZXJfa2V5KCZpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cGJfc3RydGFibGVfaXRlcl9rZXlsZW5ndGgoJml0KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZvdGhlcl92KSkgewotICAgICAgLy8gTm90IHByZXNlbnQgaW4g
b3RoZXIgbWFwLgotICAgICAgcmV0dXJuIFFmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW5hdGl2
ZV9zbG90X2VxKHNlbGYtPnZhbHVlX3R5cGUsIG1lbSwgb3RoZXJfbWVtKSkgewotICAgICAgLy8g
UHJlc2VudCwgYnV0IHZhbHVlIG5vdCBlcXVhbC4KLSAgICAgIHJldHVybiBRZmFsc2U7Ci0gICAg
fQotICB9Ci0KLSAgcmV0dXJuIFF0cnVlOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAg
TWFwLmhhc2ggPT4gaGFzaF92YWx1ZQotICoKLSAqIFJldHVybnMgYSBoYXNoIHZhbHVlIGJhc2Vk
IG9uIHRoaXMgbWFwJ3MgY29udGVudHMuCi0gKi8KLVZBTFVFIE1hcF9oYXNoKFZBTFVFIF9zZWxm
KSB7Ci0gIE1hcCogc2VsZiA9IHJ1YnlfdG9fTWFwKF9zZWxmKTsKLQotICBzdF9pbmRleF90IGgg
PSByYl9oYXNoX3N0YXJ0KDApOwotICBWQUxVRSBoYXNoX3N5bSA9IHJiX2ludGVybigiaGFzaCIp
OwotCi0gIHVwYl9zdHJ0YWJsZV9pdGVyIGl0OwotICBmb3IgKHVwYl9zdHJ0YWJsZV9iZWdpbigm
aXQsICZzZWxmLT50YWJsZSk7Ci0gICAgICAgIXVwYl9zdHJ0YWJsZV9kb25lKCZpdCk7Ci0gICAg
ICAgdXBiX3N0cnRhYmxlX25leHQoJml0KSkgewotICAgIFZBTFVFIGtleSA9IHRhYmxlX2tleV90
b19ydWJ5KAotICAgICAgICBzZWxmLCB1cGJfc3RydGFibGVfaXRlcl9rZXkoJml0KSwgdXBiX3N0
cnRhYmxlX2l0ZXJfa2V5bGVuZ3RoKCZpdCkpOwotCi0gICAgdXBiX3ZhbHVlIHYgPSB1cGJfc3Ry
dGFibGVfaXRlcl92YWx1ZSgmaXQpOwotICAgIHZvaWQqIG1lbSA9IHZhbHVlX21lbW9yeSgmdik7
Ci0gICAgVkFMVUUgdmFsdWUgPSBuYXRpdmVfc2xvdF9nZXQoc2VsZi0+dmFsdWVfdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52YWx1ZV90eXBlX2NsYXNzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbSk7Ci0KLSAgICBoID0gcmJfaGFz
aF91aW50KGgsIE5VTTJMT05HKHJiX2Z1bmNhbGwoa2V5LCBoYXNoX3N5bSwgMCkpKTsKLSAgICBo
ID0gcmJfaGFzaF91aW50KGgsIE5VTTJMT05HKHJiX2Z1bmNhbGwodmFsdWUsIGhhc2hfc3ltLCAw
KSkpOwotICB9Ci0KLSAgcmV0dXJuIElOVDJGSVgoaCk7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToK
LSAqICAgICBNYXAuaW5zcGVjdCA9PiBzdHJpbmcKLSAqCi0gKiBSZXR1cm5zIGEgc3RyaW5nIHJl
cHJlc2VudGluZyB0aGlzIG1hcCdzIGVsZW1lbnRzLiBJdCB3aWxsIGJlIGZvcm1hdHRlZCBhcwot
ICogIntrZXkgPT4gdmFsdWUsIGtleSA9PiB2YWx1ZSwgLi4ufSIsIHdpdGggZWFjaCBrZXkgYW5k
IHZhbHVlIHN0cmluZwotICogcmVwcmVzZW50YXRpb24gY29tcHV0ZWQgYnkgaXRzIG93biAjaW5z
cGVjdCBtZXRob2QuCi0gKi8KLVZBTFVFIE1hcF9pbnNwZWN0KFZBTFVFIF9zZWxmKSB7Ci0gIE1h
cCogc2VsZiA9IHJ1YnlfdG9fTWFwKF9zZWxmKTsKLQotICBWQUxVRSBzdHIgPSByYl9zdHJfbmV3
MigieyIpOwotCi0gIGJvb2wgZmlyc3QgPSB0cnVlOwotICBWQUxVRSBpbnNwZWN0X3N5bSA9IHJi
X2ludGVybigiaW5zcGVjdCIpOwotCi0gIHVwYl9zdHJ0YWJsZV9pdGVyIGl0OwotICBmb3IgKHVw
Yl9zdHJ0YWJsZV9iZWdpbigmaXQsICZzZWxmLT50YWJsZSk7Ci0gICAgICAgIXVwYl9zdHJ0YWJs
ZV9kb25lKCZpdCk7Ci0gICAgICAgdXBiX3N0cnRhYmxlX25leHQoJml0KSkgewotICAgIFZBTFVF
IGtleSA9IHRhYmxlX2tleV90b19ydWJ5KAotICAgICAgICBzZWxmLCB1cGJfc3RydGFibGVfaXRl
cl9rZXkoJml0KSwgdXBiX3N0cnRhYmxlX2l0ZXJfa2V5bGVuZ3RoKCZpdCkpOwotCi0gICAgdXBi
X3ZhbHVlIHYgPSB1cGJfc3RydGFibGVfaXRlcl92YWx1ZSgmaXQpOwotICAgIHZvaWQqIG1lbSA9
IHZhbHVlX21lbW9yeSgmdik7Ci0gICAgVkFMVUUgdmFsdWUgPSBuYXRpdmVfc2xvdF9nZXQoc2Vs
Zi0+dmFsdWVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52
YWx1ZV90eXBlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbSk7
Ci0KLSAgICBpZiAoIWZpcnN0KSB7Ci0gICAgICBzdHIgPSByYl9zdHJfY2F0MihzdHIsICIsICIp
OwotICAgIH0gZWxzZSB7Ci0gICAgICBmaXJzdCA9IGZhbHNlOwotICAgIH0KLSAgICBzdHIgPSBy
Yl9zdHJfYXBwZW5kKHN0ciwgcmJfZnVuY2FsbChrZXksIGluc3BlY3Rfc3ltLCAwKSk7Ci0gICAg
c3RyID0gcmJfc3RyX2NhdDIoc3RyLCAiPT4iKTsKLSAgICBzdHIgPSByYl9zdHJfYXBwZW5kKHN0
ciwgcmJfZnVuY2FsbCh2YWx1ZSwgaW5zcGVjdF9zeW0sIDApKTsKLSAgfQotCi0gIHN0ciA9IHJi
X3N0cl9jYXQyKHN0ciwgIn0iKTsKLSAgcmV0dXJuIHN0cjsKLX0KLQotLyoKLSAqIGNhbGwtc2Vx
OgotICogICAgIE1hcC5tZXJnZShvdGhlcl9tYXApID0+IG1hcAotICoKLSAqIENvcGllcyBrZXkv
dmFsdWUgcGFpcnMgZnJvbSBvdGhlcl9tYXAgaW50byBhIGNvcHkgb2YgdGhpcyBtYXAuIElmIGEg
a2V5IGlzCi0gKiBzZXQgaW4gb3RoZXJfbWFwIGFuZCB0aGlzIG1hcCwgdGhlIHZhbHVlIGZyb20g
b3RoZXJfbWFwIG92ZXJ3cml0ZXMgdGhlIHZhbHVlCi0gKiBpbiB0aGUgbmV3IGNvcHkgb2YgdGhp
cyBtYXAuIFJldHVybnMgdGhlIG5ldyBjb3B5IG9mIHRoaXMgbWFwIHdpdGggbWVyZ2VkCi0gKiBj
b250ZW50cy4KLSAqLwotVkFMVUUgTWFwX21lcmdlKFZBTFVFIF9zZWxmLCBWQUxVRSBoYXNobWFw
KSB7Ci0gIFZBTFVFIGR1cHBlZCA9IE1hcF9kdXAoX3NlbGYpOwotICByZXR1cm4gTWFwX21lcmdl
X2ludG9fc2VsZihkdXBwZWQsIGhhc2htYXApOwotfQotCi1zdGF0aWMgaW50IG1lcmdlX2ludG9f
c2VsZl9jYWxsYmFjayhWQUxVRSBrZXksIFZBTFVFIHZhbHVlLCBWQUxVRSBzZWxmKSB7Ci0gIE1h
cF9pbmRleF9zZXQoc2VsZiwga2V5LCB2YWx1ZSk7Ci0gIHJldHVybiBTVF9DT05USU5VRTsKLX0K
LQotLy8gVXNlZCBvbmx5IGludGVybmFsbHkgLS0gc2hhcmVkIGJ5ICNtZXJnZSBhbmQgI2luaXRp
YWxpemUuCi1WQUxVRSBNYXBfbWVyZ2VfaW50b19zZWxmKFZBTFVFIF9zZWxmLCBWQUxVRSBoYXNo
bWFwKSB7Ci0gIGlmIChUWVBFKGhhc2htYXApID09IFRfSEFTSCkgewotICAgIHJiX2hhc2hfZm9y
ZWFjaChoYXNobWFwLCBtZXJnZV9pbnRvX3NlbGZfY2FsbGJhY2ssIF9zZWxmKTsKLSAgfSBlbHNl
IGlmIChSQl9UWVBFX1AoaGFzaG1hcCwgVF9EQVRBKSAmJiBSVFlQRUREQVRBX1AoaGFzaG1hcCkg
JiYKLSAgICAgICAgICAgICBSVFlQRUREQVRBX1RZUEUoaGFzaG1hcCkgPT0gJk1hcF90eXBlKSB7
Ci0KLSAgICBNYXAqIHNlbGYgPSBydWJ5X3RvX01hcChfc2VsZik7Ci0gICAgTWFwKiBvdGhlciA9
IHJ1YnlfdG9fTWFwKGhhc2htYXApOwotICAgIHVwYl9zdHJ0YWJsZV9pdGVyIGl0OwotCi0gICAg
aWYgKHNlbGYtPmtleV90eXBlICE9IG90aGVyLT5rZXlfdHlwZSB8fAotICAgICAgICBzZWxmLT52
YWx1ZV90eXBlICE9IG90aGVyLT52YWx1ZV90eXBlIHx8Ci0gICAgICAgIHNlbGYtPnZhbHVlX3R5
cGVfY2xhc3MgIT0gb3RoZXItPnZhbHVlX3R5cGVfY2xhc3MpIHsKLSAgICAgIHJiX3JhaXNlKHJi
X2VBcmdFcnJvciwgIkF0dGVtcHQgdG8gbWVyZ2UgTWFwIHdpdGggbWlzbWF0Y2hpbmcgdHlwZXMi
KTsKLSAgICB9Ci0KLSAgICBmb3IgKHVwYl9zdHJ0YWJsZV9iZWdpbigmaXQsICZvdGhlci0+dGFi
bGUpOwotICAgICAgICAgIXVwYl9zdHJ0YWJsZV9kb25lKCZpdCk7Ci0gICAgICAgICB1cGJfc3Ry
dGFibGVfbmV4dCgmaXQpKSB7Ci0KLSAgICAgIC8vIFJlcGxhY2UgYW55IGV4aXN0aW5nIHZhbHVl
IGJ5IGlzc3VpbmcgYSAncmVtb3ZlJyBvcGVyYXRpb24gZmlyc3QuCi0gICAgICB1cGJfdmFsdWUg
djsKLSAgICAgIHVwYl92YWx1ZSBvbGR2OwotICAgICAgdXBiX3N0cnRhYmxlX3JlbW92ZTIoJnNl
bGYtPnRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0cnRhYmxlX2l0ZXJf
a2V5KCZpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3RydGFibGVfaXRlcl9r
ZXlsZW5ndGgoJml0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGR2KTsKLQotICAg
ICAgdiA9IHVwYl9zdHJ0YWJsZV9pdGVyX3ZhbHVlKCZpdCk7Ci0gICAgICB1cGJfc3RydGFibGVf
aW5zZXJ0Migmc2VsZi0+dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3Ry
dGFibGVfaXRlcl9rZXkoJml0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdHJ0
YWJsZV9pdGVyX2tleWxlbmd0aCgmaXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdik7
Ci0gICAgfQotICB9IGVsc2UgewotICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIlVua25vd24g
dHlwZSBtZXJnaW5nIGludG8gTWFwIik7Ci0gIH0KLSAgcmV0dXJuIF9zZWxmOwotfQotCi0vLyBJ
bnRlcm5hbCBtZXRob2Q6IG1hcCBpdGVyYXRvciBpbml0aWFsaXphdGlvbiAodXNlZCBmb3Igc2Vy
aWFsaXphdGlvbikuCi12b2lkIE1hcF9iZWdpbihWQUxVRSBfc2VsZiwgTWFwX2l0ZXIqIGl0ZXIp
IHsKLSAgTWFwKiBzZWxmID0gcnVieV90b19NYXAoX3NlbGYpOwotICBpdGVyLT5zZWxmID0gc2Vs
ZjsKLSAgdXBiX3N0cnRhYmxlX2JlZ2luKCZpdGVyLT5pdCwgJnNlbGYtPnRhYmxlKTsKLX0KLQot
dm9pZCBNYXBfbmV4dChNYXBfaXRlciogaXRlcikgewotICB1cGJfc3RydGFibGVfbmV4dCgmaXRl
ci0+aXQpOwotfQotCi1ib29sIE1hcF9kb25lKE1hcF9pdGVyKiBpdGVyKSB7Ci0gIHJldHVybiB1
cGJfc3RydGFibGVfZG9uZSgmaXRlci0+aXQpOwotfQotCi1WQUxVRSBNYXBfaXRlcl9rZXkoTWFw
X2l0ZXIqIGl0ZXIpIHsKLSAgcmV0dXJuIHRhYmxlX2tleV90b19ydWJ5KAotICAgICAgaXRlci0+
c2VsZiwKLSAgICAgIHVwYl9zdHJ0YWJsZV9pdGVyX2tleSgmaXRlci0+aXQpLAotICAgICAgdXBi
X3N0cnRhYmxlX2l0ZXJfa2V5bGVuZ3RoKCZpdGVyLT5pdCkpOwotfQotCi1WQUxVRSBNYXBfaXRl
cl92YWx1ZShNYXBfaXRlciogaXRlcikgewotICB1cGJfdmFsdWUgdiA9IHVwYl9zdHJ0YWJsZV9p
dGVyX3ZhbHVlKCZpdGVyLT5pdCk7Ci0gIHZvaWQqIG1lbSA9IHZhbHVlX21lbW9yeSgmdik7Ci0g
IHJldHVybiBuYXRpdmVfc2xvdF9nZXQoaXRlci0+c2VsZi0+dmFsdWVfdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVyLT5zZWxmLT52YWx1ZV90eXBlX2NsYXNzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIG1lbSk7Ci19Ci0KLXZvaWQgTWFwX3JlZ2lzdGVyKFZBTFVFIG1vZHVs
ZSkgewotICBWQUxVRSBrbGFzcyA9IHJiX2RlZmluZV9jbGFzc191bmRlcihtb2R1bGUsICJNYXAi
LCByYl9jT2JqZWN0KTsKLSAgcmJfZGVmaW5lX2FsbG9jX2Z1bmMoa2xhc3MsIE1hcF9hbGxvYyk7
Ci0gIGNNYXAgPSBrbGFzczsKLSAgcmJfZ2NfcmVnaXN0ZXJfYWRkcmVzcygmY01hcCk7Ci0KLSAg
cmJfZGVmaW5lX21ldGhvZChrbGFzcywgImluaXRpYWxpemUiLCBNYXBfaW5pdCwgLTEpOwotICBy
Yl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiZWFjaCIsIE1hcF9lYWNoLCAwKTsKLSAgcmJfZGVmaW5l
X21ldGhvZChrbGFzcywgImtleXMiLCBNYXBfa2V5cywgMCk7Ci0gIHJiX2RlZmluZV9tZXRob2Qo
a2xhc3MsICJ2YWx1ZXMiLCBNYXBfdmFsdWVzLCAwKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFz
cywgIltdIiwgTWFwX2luZGV4LCAxKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgIltdPSIs
IE1hcF9pbmRleF9zZXQsIDIpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiaGFzX2tleT8i
LCBNYXBfaGFzX2tleSwgMSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJkZWxldGUiLCBN
YXBfZGVsZXRlLCAxKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgImNsZWFyIiwgTWFwX2Ns
ZWFyLCAwKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgImxlbmd0aCIsIE1hcF9sZW5ndGgs
IDApOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiZHVwIiwgTWFwX2R1cCwgMCk7Ci0gIHJi
X2RlZmluZV9tZXRob2Qoa2xhc3MsICI9PSIsIE1hcF9lcSwgMSk7Ci0gIHJiX2RlZmluZV9tZXRo
b2Qoa2xhc3MsICJoYXNoIiwgTWFwX2hhc2gsIDApOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNz
LCAiaW5zcGVjdCIsIE1hcF9pbnNwZWN0LCAwKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywg
Im1lcmdlIiwgTWFwX21lcmdlLCAxKTsKLSAgcmJfaW5jbHVkZV9tb2R1bGUoa2xhc3MsIHJiX21F
bnVtZXJhYmxlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9leHQvZ29vZ2xlL3Byb3RvYnVmX2MvbWVz
c2FnZS5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9ydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy9tZXNzYWdlLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGUxNjI1MGYzYjA3ZWRkZmNlNDRkMTc2ZmI5NDFlNDllZmVmOTVj
MjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4
dC9nb29nbGUvcHJvdG9idWZfYy9tZXNzYWdlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzggKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICJwcm90
b2J1Zi5oIgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ2xhc3MvbW9kdWxlIGNyZWF0
aW9uIGZyb20gbXNnZGVmcyBhbmQgZW51bWRlZnMsIHJlc3BlY3RpdmVseS4KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLXZvaWQqIE1lc3NhZ2VfZGF0YSh2b2lkKiBtc2cpIHsKLSAgcmV0dXJu
ICgodWludDhfdCAqKW1zZykgKyBzaXplb2YoTWVzc2FnZUhlYWRlcik7Ci19Ci0KLXZvaWQgTWVz
c2FnZV9tYXJrKHZvaWQqIF9zZWxmKSB7Ci0gIE1lc3NhZ2VIZWFkZXIqIHNlbGYgPSAoTWVzc2Fn
ZUhlYWRlciAqKV9zZWxmOwotICBsYXlvdXRfbWFyayhzZWxmLT5kZXNjcmlwdG9yLT5sYXlvdXQs
IE1lc3NhZ2VfZGF0YShzZWxmKSk7Ci19Ci0KLXZvaWQgTWVzc2FnZV9mcmVlKHZvaWQqIHNlbGYp
IHsKLSAgeGZyZWUoc2VsZik7Ci19Ci0KLXJiX2RhdGFfdHlwZV90IE1lc3NhZ2VfdHlwZSA9IHsK
LSAgIk1lc3NhZ2UiLAotICB7IE1lc3NhZ2VfbWFyaywgTWVzc2FnZV9mcmVlLCBOVUxMIH0sCi19
OwotCi1WQUxVRSBNZXNzYWdlX2FsbG9jKFZBTFVFIGtsYXNzKSB7Ci0gIFZBTFVFIGRlc2NyaXB0
b3IgPSByYl9pdmFyX2dldChrbGFzcywgZGVzY3JpcHRvcl9pbnN0YW5jZXZhcl9pbnRlcm5lZCk7
Ci0gIERlc2NyaXB0b3IqIGRlc2MgPSBydWJ5X3RvX0Rlc2NyaXB0b3IoZGVzY3JpcHRvcik7Ci0g
IE1lc3NhZ2VIZWFkZXIqIG1zZyA9IChNZXNzYWdlSGVhZGVyKilBTExPQ19OKAotICAgICAgdWlu
dDhfdCwgc2l6ZW9mKE1lc3NhZ2VIZWFkZXIpICsgZGVzYy0+bGF5b3V0LT5zaXplKTsKLSAgVkFM
VUUgcmV0OwotCi0gIG1lbXNldChNZXNzYWdlX2RhdGEobXNnKSwgMCwgZGVzYy0+bGF5b3V0LT5z
aXplKTsKLQotICAvLyBXZSB3cmFwIGZpcnN0IHNvIHRoYXQgZXZlcnl0aGluZyBpbiB0aGUgbWVz
c2FnZSBvYmplY3QgaXMgR0Mtcm9vdGVkIGluIGNhc2UKLSAgLy8gYSBjb2xsZWN0aW9uIGhhcHBl
bnMgZHVyaW5nIG9iamVjdCBjcmVhdGlvbiBpbiBsYXlvdXRfaW5pdCgpLgotICByZXQgPSBUeXBl
ZERhdGFfV3JhcF9TdHJ1Y3Qoa2xhc3MsICZNZXNzYWdlX3R5cGUsIG1zZyk7Ci0gIG1zZy0+ZGVz
Y3JpcHRvciA9IGRlc2M7Ci0gIHJiX2l2YXJfc2V0KHJldCwgZGVzY3JpcHRvcl9pbnN0YW5jZXZh
cl9pbnRlcm5lZCwgZGVzY3JpcHRvcik7Ci0KLSAgbGF5b3V0X2luaXQoZGVzYy0+bGF5b3V0LCBN
ZXNzYWdlX2RhdGEobXNnKSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIFZBTFVFIHdo
aWNoX29uZW9mX2ZpZWxkKE1lc3NhZ2VIZWFkZXIqIHNlbGYsIGNvbnN0IHVwYl9vbmVvZmRlZiog
bykgewotICB1cGJfb25lb2ZfaXRlciBpdDsKLSAgc2l6ZV90IGNhc2Vfb2ZzOwotICB1aW50MzJf
dCBvbmVvZl9jYXNlOwotICBjb25zdCB1cGJfZmllbGRkZWYqIGZpcnN0X2ZpZWxkOwotICBjb25z
dCB1cGJfZmllbGRkZWYqIGY7Ci0KLSAgLy8gSWYgbm8gZmllbGRzIGluIHRoZSBvbmVvZiwgYWx3
YXlzIG5pbC4KLSAgaWYgKHVwYl9vbmVvZmRlZl9udW1maWVsZHMobykgPT0gMCkgewotICAgIHJl
dHVybiBRbmlsOwotICB9Ci0gIC8vIEdyYWIgdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBvbmVvZiBz
byB3ZSBjYW4gZ2V0IGl0cyBsYXlvdXQgaW5mbyB0byBmaW5kIHRoZQotICAvLyBvbmVvZl9jYXNl
IGZpZWxkLgotICB1cGJfb25lb2ZfYmVnaW4oJml0LCBvKTsKLSAgYXNzZXJ0KCF1cGJfb25lb2Zf
ZG9uZSgmaXQpKTsKLSAgZmlyc3RfZmllbGQgPSB1cGJfb25lb2ZfaXRlcl9maWVsZCgmaXQpOwot
ICBhc3NlcnQodXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmdvbmVvZihmaXJzdF9maWVsZCkgIT0gTlVM
TCk7Ci0KLSAgY2FzZV9vZnMgPQotICAgICAgc2VsZi0+ZGVzY3JpcHRvci0+bGF5b3V0LT4KLSAg
ICAgIGZpZWxkc1t1cGJfZmllbGRkZWZfaW5kZXgoZmlyc3RfZmllbGQpXS5jYXNlX29mZnNldDsK
LSAgb25lb2ZfY2FzZSA9ICooKHVpbnQzMl90KikoKGNoYXIqKU1lc3NhZ2VfZGF0YShzZWxmKSAr
IGNhc2Vfb2ZzKSk7Ci0KLSAgaWYgKG9uZW9mX2Nhc2UgPT0gT05FT0ZfQ0FTRV9OT05FKSB7Ci0g
ICAgcmV0dXJuIFFuaWw7Ci0gIH0KLQotICAvLyBvbmVvZl9jYXNlIGlzIGEgZmllbGQgaW5kZXgs
IHNvIGZpbmQgdGhhdCBmaWVsZC4KLSAgZiA9IHVwYl9vbmVvZmRlZl9pdG9mKG8sIG9uZW9mX2Nh
c2UpOwotICBhc3NlcnQoZiAhPSBOVUxMKTsKLQotICByZXR1cm4gSUQyU1lNKHJiX2ludGVybih1
cGJfZmllbGRkZWZfbmFtZShmKSkpOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgTWVz
c2FnZS5tZXRob2RfbWlzc2luZygqYXJncykKLSAqCi0gKiBQcm92aWRlcyBhY2Nlc3NvcnMgYW5k
IHNldHRlcnMgZm9yIG1lc3NhZ2UgZmllbGRzIGFjY29yZGluZyB0byB0aGVpciBmaWVsZAotICog
bmFtZXMuIEZvciBhbnkgZmllbGQgd2hvc2UgbmFtZSBkb2VzIG5vdCBjb25mbGljdCB3aXRoIGEg
YnVpbHQtaW4gbWV0aG9kLCBhbgotICogYWNjZXNzb3IgaXMgcHJvdmlkZWQgd2l0aCB0aGUgc2Ft
ZSBuYW1lIGFzIHRoZSBmaWVsZCwgYW5kIGEgc2V0dGVyIGlzCi0gKiBwcm92aWRlZCB3aXRoIHRo
ZSBuYW1lIG9mIHRoZSBmaWVsZCBwbHVzIHRoZSAnPScgc3VmZml4LiBUaHVzLCBnaXZlbiBhCi0g
KiBtZXNzYWdlIGluc3RhbmNlICdtc2cnIHdpdGggZmllbGQgJ2ZvbycsIHRoZSBmb2xsb3dpbmcg
Y29kZSBpcyB2YWxpZDoKLSAqCi0gKiAgICAgbXNnLmZvbyA9IDQyCi0gKiAgICAgcHV0cyBtc2cu
Zm9vCi0gKgotICogVGhpcyBtZXRob2QgYWxzbyBwcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzb3Jz
IGZvciBvbmVvZnMuIElmIGEgb25lb2YgZXhpc3RzCi0gKiB3aXRoIG5hbWUgJ215X29uZW9mJywg
dGhlbiBtc2cubXlfb25lb2Ygd2lsbCByZXR1cm4gYSBSdWJ5IHN5bWJvbCBlcXVhbCB0bwotICog
dGhlIG5hbWUgb2YgdGhlIGZpZWxkIGluIHRoYXQgb25lb2YgdGhhdCBpcyBjdXJyZW50bHkgc2V0
LCBvciBuaWwgaWYgbm9uZS4KLSAqLwotVkFMVUUgTWVzc2FnZV9tZXRob2RfbWlzc2luZyhpbnQg
YXJnYywgVkFMVUUqIGFyZ3YsIFZBTFVFIF9zZWxmKSB7Ci0gIE1lc3NhZ2VIZWFkZXIqIHNlbGY7
Ci0gIFZBTFVFIG1ldGhvZF9uYW1lLCBtZXRob2Rfc3RyOwotICBjaGFyKiBuYW1lOwotICBzaXpl
X3QgbmFtZV9sZW47Ci0gIGJvb2wgc2V0dGVyOwotICBjb25zdCB1cGJfb25lb2ZkZWYqIG87Ci0g
IGNvbnN0IHVwYl9maWVsZGRlZiogZjsKLQotICBUeXBlZERhdGFfR2V0X1N0cnVjdChfc2VsZiwg
TWVzc2FnZUhlYWRlciwgJk1lc3NhZ2VfdHlwZSwgc2VsZik7Ci0gIGlmIChhcmdjIDwgMSkgewot
ICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkV4cGVjdGVkIG1ldGhvZCBuYW1lIGFzIGZpcnN0
IGFyZ3VtZW50LiIpOwotICB9Ci0gIG1ldGhvZF9uYW1lID0gYXJndlswXTsKLSAgaWYgKCFTWU1C
T0xfUChtZXRob2RfbmFtZSkpIHsKLSAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJFeHBlY3Rl
ZCBzeW1ib2wgYXMgbWV0aG9kIG5hbWUuIik7Ci0gIH0KLSAgbWV0aG9kX3N0ciA9IHJiX2lkMnN0
cihTWU0ySUQobWV0aG9kX25hbWUpKTsKLSAgbmFtZSA9IFJTVFJJTkdfUFRSKG1ldGhvZF9zdHIp
OwotICBuYW1lX2xlbiA9IFJTVFJJTkdfTEVOKG1ldGhvZF9zdHIpOwotICBzZXR0ZXIgPSBmYWxz
ZTsKLQotICAvLyBTZXR0ZXJzIGhhdmUgbmFtZXMgdGhhdCBlbmQgaW4gJz0nLgotICBpZiAobmFt
ZVtuYW1lX2xlbiAtIDFdID09ICc9JykgewotICAgIHNldHRlciA9IHRydWU7Ci0gICAgbmFtZV9s
ZW4tLTsKLSAgfQotCi0gIC8vIFNlZSBpZiB0aGlzIG5hbWUgY29ycmVzcG9uZHMgdG8gZWl0aGVy
IGEgb25lb2Ygb3IgZmllbGQgaW4gdGhpcyBtZXNzYWdlLgotICBpZiAoIXVwYl9tc2dkZWZfbG9v
a3VwbmFtZShzZWxmLT5kZXNjcmlwdG9yLT5tc2dkZWYsIG5hbWUsIG5hbWVfbGVuLCAmZiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm8pKSB7Ci0gICAgcmV0dXJuIHJiX2NhbGxfc3Vw
ZXIoYXJnYywgYXJndik7Ci0gIH0KLQotICBpZiAobyAhPSBOVUxMKSB7Ci0gICAgLy8gVGhpcyBp
cyBhIG9uZW9mIC0tIHJldHVybiB3aGljaCBmaWVsZCBpbnNpZGUgdGhlIG9uZW9mIGlzIHNldC4K
LSAgICBpZiAoc2V0dGVyKSB7Ci0gICAgICByYl9yYWlzZShyYl9lUnVudGltZUVycm9yLCAiT25l
b2YgYWNjZXNzb3JzIGFyZSByZWFkLW9ubHkuIik7Ci0gICAgfQotICAgIHJldHVybiB3aGljaF9v
bmVvZl9maWVsZChzZWxmLCBvKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBUaGlzIGlzIGEgZmllbGQg
LS0gZ2V0IG9yIHNldCB0aGUgZmllbGQncyB2YWx1ZS4KLSAgICBhc3NlcnQoZik7Ci0gICAgaWYg
KHNldHRlcikgewotICAgICAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgICAgIHJiX3JhaXNlKHJiX2VB
cmdFcnJvciwgIk5vIHZhbHVlIHByb3ZpZGVkIHRvIHNldHRlci4iKTsKLSAgICAgIH0KLSAgICAg
IGxheW91dF9zZXQoc2VsZi0+ZGVzY3JpcHRvci0+bGF5b3V0LCBNZXNzYWdlX2RhdGEoc2VsZiks
IGYsIGFyZ3ZbMV0pOwotICAgICAgcmV0dXJuIFFuaWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJl
dHVybiBsYXlvdXRfZ2V0KHNlbGYtPmRlc2NyaXB0b3ItPmxheW91dCwgTWVzc2FnZV9kYXRhKHNl
bGYpLCBmKTsKLSAgICB9Ci0gIH0KLX0KLQotaW50IE1lc3NhZ2VfaW5pdGlhbGl6ZV9rd2FyZyhW
QUxVRSBrZXksIFZBTFVFIHZhbCwgVkFMVUUgX3NlbGYpIHsKLSAgTWVzc2FnZUhlYWRlciogc2Vs
ZjsKLSAgVkFMVUUgbWV0aG9kX3N0cjsKLSAgY2hhciogbmFtZTsKLSAgY29uc3QgdXBiX2ZpZWxk
ZGVmKiBmOwotICBUeXBlZERhdGFfR2V0X1N0cnVjdChfc2VsZiwgTWVzc2FnZUhlYWRlciwgJk1l
c3NhZ2VfdHlwZSwgc2VsZik7Ci0KLSAgaWYgKCFTWU1CT0xfUChrZXkpKSB7Ci0gICAgcmJfcmFp
c2UocmJfZUFyZ0Vycm9yLAotICAgICAgICAgICAgICJFeHBlY3RlZCBzeW1ib2xzIGFzIGhhc2gg
a2V5cyBpbiBpbml0aWFsaXphdGlvbiBtYXAuIik7Ci0gIH0KLQotICBtZXRob2Rfc3RyID0gcmJf
aWQyc3RyKFNZTTJJRChrZXkpKTsKLSAgbmFtZSA9IFJTVFJJTkdfUFRSKG1ldGhvZF9zdHIpOwot
ICBmID0gdXBiX21zZ2RlZl9udG9meihzZWxmLT5kZXNjcmlwdG9yLT5tc2dkZWYsIG5hbWUpOwot
ICBpZiAoZiA9PSBOVUxMKSB7Ci0gICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLAotICAgICAgICAg
ICAgICJVbmtub3duIGZpZWxkIG5hbWUgJyVzJyBpbiBpbml0aWFsaXphdGlvbiBtYXAgZW50cnku
IiwgbmFtZSk7Ci0gIH0KLQotICBpZiAoaXNfbWFwX2ZpZWxkKGYpKSB7Ci0gICAgVkFMVUUgbWFw
OwotCi0gICAgaWYgKFRZUEUodmFsKSAhPSBUX0hBU0gpIHsKLSAgICAgIHJiX3JhaXNlKHJiX2VB
cmdFcnJvciwKLSAgICAgICAgICAgICAgICJFeHBlY3RlZCBIYXNoIG9iamVjdCBhcyBpbml0aWFs
aXplciB2YWx1ZSBmb3IgbWFwIGZpZWxkICclcycuIiwgbmFtZSk7Ci0gICAgfQotICAgIG1hcCA9
IGxheW91dF9nZXQoc2VsZi0+ZGVzY3JpcHRvci0+bGF5b3V0LCBNZXNzYWdlX2RhdGEoc2VsZiks
IGYpOwotICAgIE1hcF9tZXJnZV9pbnRvX3NlbGYobWFwLCB2YWwpOwotICB9IGVsc2UgaWYgKHVw
Yl9maWVsZGRlZl9sYWJlbChmKSA9PSBVUEJfTEFCRUxfUkVQRUFURUQpIHsKLSAgICBWQUxVRSBh
cnk7Ci0KLSAgICBpZiAoVFlQRSh2YWwpICE9IFRfQVJSQVkpIHsKLSAgICAgIHJiX3JhaXNlKHJi
X2VBcmdFcnJvciwKLSAgICAgICAgICAgICAgICJFeHBlY3RlZCBhcnJheSBhcyBpbml0aWFsaXpl
ciB2YWx1ZSBmb3IgcmVwZWF0ZWQgZmllbGQgJyVzJy4iLCBuYW1lKTsKLSAgICB9Ci0gICAgYXJ5
ID0gbGF5b3V0X2dldChzZWxmLT5kZXNjcmlwdG9yLT5sYXlvdXQsIE1lc3NhZ2VfZGF0YShzZWxm
KSwgZik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBSQVJSQVlfTEVOKHZhbCk7IGkrKykgewot
ICAgICAgUmVwZWF0ZWRGaWVsZF9wdXNoKGFyeSwgcmJfYXJ5X2VudHJ5KHZhbCwgaSkpOwotICAg
IH0KLSAgfSBlbHNlIHsKLSAgICBsYXlvdXRfc2V0KHNlbGYtPmRlc2NyaXB0b3ItPmxheW91dCwg
TWVzc2FnZV9kYXRhKHNlbGYpLCBmLCB2YWwpOwotICB9Ci0gIHJldHVybiAwOwotfQotCi0vKgot
ICogY2FsbC1zZXE6Ci0gKiAgICAgTWVzc2FnZS5uZXcoa3dhcmdzKSA9PiBuZXdfbWVzc2FnZQot
ICoKLSAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIG1lc3NhZ2UgY2xhc3Mu
IEtleXdvcmQgYXJndW1lbnRzIG1heSBiZQotICogcHJvdmlkZWQgd2l0aCBrZXl3b3JkcyBjb3Jy
ZXNwb25kaW5nIHRvIGZpZWxkIG5hbWVzLgotICoKLSAqIE5vdGUgdGhhdCBubyBsaXRlcmFsIE1l
c3NhZ2UgY2xhc3MgZXhpc3RzLiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgcGVyIG1lc3NhZ2UKLSAq
IHR5cGUgZXhpc3QsIGFzIHByb3ZpZGVkIGJ5IHRoZSAjbXNnY2xhc3MgbWV0aG9kIG9uIERlc2Ny
aXB0b3JzIGFmdGVyIHRoZXkKLSAqIGhhdmUgYmVlbiBhZGRlZCB0byBhIHBvb2wuIFRoZSBtZXRo
b2QgZGVmaW5pdGlvbnMgZGVzY3JpYmVkIGhlcmUgb24gdGhlCi0gKiBNZXNzYWdlIGNsYXNzIGFy
ZSBwcm92aWRlZCBvbiBlYWNoIGNvbmNyZXRlIG1lc3NhZ2UgY2xhc3MuCi0gKi8KLVZBTFVFIE1l
c3NhZ2VfaW5pdGlhbGl6ZShpbnQgYXJnYywgVkFMVUUqIGFyZ3YsIFZBTFVFIF9zZWxmKSB7Ci0g
IFZBTFVFIGhhc2hfYXJnczsKLQotICBpZiAoYXJnYyA9PSAwKSB7Ci0gICAgcmV0dXJuIFFuaWw7
Ci0gIH0KLSAgaWYgKGFyZ2MgIT0gMSkgewotICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkV4
cGVjdGVkIDAgb3IgMSBhcmd1bWVudHMuIik7Ci0gIH0KLSAgaGFzaF9hcmdzID0gYXJndlswXTsK
LSAgaWYgKFRZUEUoaGFzaF9hcmdzKSAhPSBUX0hBU0gpIHsKLSAgICByYl9yYWlzZShyYl9lQXJn
RXJyb3IsICJFeHBlY3RlZCBoYXNoIGFyZ3VtZW50cy4iKTsKLSAgfQotCi0gIHJiX2hhc2hfZm9y
ZWFjaChoYXNoX2FyZ3MsIE1lc3NhZ2VfaW5pdGlhbGl6ZV9rd2FyZywgX3NlbGYpOwotICByZXR1
cm4gUW5pbDsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIE1lc3NhZ2UuZHVwID0+IG5l
d19tZXNzYWdlCi0gKgotICogUGVyZm9ybXMgYSBzaGFsbG93IGNvcHkgb2YgdGhpcyBtZXNzYWdl
IGFuZCByZXR1cm5zIHRoZSBuZXcgY29weS4KLSAqLwotVkFMVUUgTWVzc2FnZV9kdXAoVkFMVUUg
X3NlbGYpIHsKLSAgTWVzc2FnZUhlYWRlciogc2VsZjsKLSAgVkFMVUUgbmV3X21zZzsKLSAgTWVz
c2FnZUhlYWRlciogbmV3X21zZ19zZWxmOwotICBUeXBlZERhdGFfR2V0X1N0cnVjdChfc2VsZiwg
TWVzc2FnZUhlYWRlciwgJk1lc3NhZ2VfdHlwZSwgc2VsZik7Ci0KLSAgbmV3X21zZyA9IHJiX2Ns
YXNzX25ld19pbnN0YW5jZSgwLCBOVUxMLCBDTEFTU19PRihfc2VsZikpOwotICBUeXBlZERhdGFf
R2V0X1N0cnVjdChuZXdfbXNnLCBNZXNzYWdlSGVhZGVyLCAmTWVzc2FnZV90eXBlLCBuZXdfbXNn
X3NlbGYpOwotCi0gIGxheW91dF9kdXAoc2VsZi0+ZGVzY3JpcHRvci0+bGF5b3V0LAotICAgICAg
ICAgICAgIE1lc3NhZ2VfZGF0YShuZXdfbXNnX3NlbGYpLAotICAgICAgICAgICAgIE1lc3NhZ2Vf
ZGF0YShzZWxmKSk7Ci0KLSAgcmV0dXJuIG5ld19tc2c7Ci19Ci0KLS8vIEludGVybmFsIG9ubHk7
IHVzZWQgYnkgR29vZ2xlOjpQcm90b2J1Zi5kZWVwX2NvcHkuCi1WQUxVRSBNZXNzYWdlX2RlZXBf
Y29weShWQUxVRSBfc2VsZikgewotICBNZXNzYWdlSGVhZGVyKiBzZWxmOwotICBNZXNzYWdlSGVh
ZGVyKiBuZXdfbXNnX3NlbGY7Ci0gIFZBTFVFIG5ld19tc2c7Ci0gIFR5cGVkRGF0YV9HZXRfU3Ry
dWN0KF9zZWxmLCBNZXNzYWdlSGVhZGVyLCAmTWVzc2FnZV90eXBlLCBzZWxmKTsKLQotICBuZXdf
bXNnID0gcmJfY2xhc3NfbmV3X2luc3RhbmNlKDAsIE5VTEwsIENMQVNTX09GKF9zZWxmKSk7Ci0g
IFR5cGVkRGF0YV9HZXRfU3RydWN0KG5ld19tc2csIE1lc3NhZ2VIZWFkZXIsICZNZXNzYWdlX3R5
cGUsIG5ld19tc2dfc2VsZik7Ci0KLSAgbGF5b3V0X2RlZXBfY29weShzZWxmLT5kZXNjcmlwdG9y
LT5sYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgTWVzc2FnZV9kYXRhKG5ld19tc2dfc2VsZiks
Ci0gICAgICAgICAgICAgICAgICAgTWVzc2FnZV9kYXRhKHNlbGYpKTsKLQotICByZXR1cm4gbmV3
X21zZzsKLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIE1lc3NhZ2UuPT0ob3RoZXIpID0+
IGJvb2xlYW4KLSAqCi0gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBvZiB0aGlzIG1lc3Nh
Z2Ugd2l0aCBhbm90aGVyLiBNZXNzYWdlcyBhcmUgZXF1YWwKLSAqIGlmIHRoZXkgaGF2ZSB0aGUg
c2FtZSB0eXBlIGFuZCBpZiBlYWNoIGZpZWxkIGlzIGVxdWFsIGFjY29yZGluZyB0byB0aGUgOj09
Ci0gKiBtZXRob2QncyBzZW1hbnRpY3MgKGEgbW9yZSBlZmZpY2llbnQgY29tcGFyaXNvbiBtYXkg
YWN0dWFsbHkgYmUgZG9uZSBpZiB0aGUKLSAqIGZpZWxkIGlzIG9mIGEgcHJpbWl0aXZlIHR5cGUp
LgotICovCi1WQUxVRSBNZXNzYWdlX2VxKFZBTFVFIF9zZWxmLCBWQUxVRSBfb3RoZXIpIHsKLSAg
TWVzc2FnZUhlYWRlciogc2VsZjsKLSAgTWVzc2FnZUhlYWRlciogb3RoZXI7Ci0gIFR5cGVkRGF0
YV9HZXRfU3RydWN0KF9zZWxmLCBNZXNzYWdlSGVhZGVyLCAmTWVzc2FnZV90eXBlLCBzZWxmKTsK
LSAgVHlwZWREYXRhX0dldF9TdHJ1Y3QoX290aGVyLCBNZXNzYWdlSGVhZGVyLCAmTWVzc2FnZV90
eXBlLCBvdGhlcik7Ci0KLSAgaWYgKHNlbGYtPmRlc2NyaXB0b3IgIT0gb3RoZXItPmRlc2NyaXB0
b3IpIHsKLSAgICByZXR1cm4gUWZhbHNlOwotICB9Ci0KLSAgcmV0dXJuIGxheW91dF9lcShzZWxm
LT5kZXNjcmlwdG9yLT5sYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgTWVzc2FnZV9kYXRhKHNl
bGYpLAotICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VfZGF0YShvdGhlcikpOwotfQotCi0vKgot
ICogY2FsbC1zZXE6Ci0gKiAgICAgTWVzc2FnZS5oYXNoID0+IGhhc2hfdmFsdWUKLSAqCi0gKiBS
ZXR1cm5zIGEgaGFzaCB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhpcyBtZXNzYWdlJ3MgZmllbGQg
dmFsdWVzLgotICovCi1WQUxVRSBNZXNzYWdlX2hhc2goVkFMVUUgX3NlbGYpIHsKLSAgTWVzc2Fn
ZUhlYWRlciogc2VsZjsKLSAgVHlwZWREYXRhX0dldF9TdHJ1Y3QoX3NlbGYsIE1lc3NhZ2VIZWFk
ZXIsICZNZXNzYWdlX3R5cGUsIHNlbGYpOwotCi0gIHJldHVybiBsYXlvdXRfaGFzaChzZWxmLT5k
ZXNjcmlwdG9yLT5sYXlvdXQsIE1lc3NhZ2VfZGF0YShzZWxmKSk7Ci19Ci0KLS8qCi0gKiBjYWxs
LXNlcToKLSAqICAgICBNZXNzYWdlLmluc3BlY3QgPT4gc3RyaW5nCi0gKgotICogUmV0dXJucyBh
IGh1bWFuLXJlYWRhYmxlIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBtZXNzYWdlLiBJdCB3aWxs
IGJlCi0gKiBmb3JtYXR0ZWQgYXMgIjxNZXNzYWdlVHlwZTogZmllbGQxOiB2YWx1ZTEsIGZpZWxk
MjogdmFsdWUyLCAuLi4+Ii4gRWFjaAotICogZmllbGQncyB2YWx1ZSBpcyByZXByZXNlbnRlZCBh
Y2NvcmRpbmcgdG8gaXRzIG93biAjaW5zcGVjdCBtZXRob2QuCi0gKi8KLVZBTFVFIE1lc3NhZ2Vf
aW5zcGVjdChWQUxVRSBfc2VsZikgewotICBNZXNzYWdlSGVhZGVyKiBzZWxmOwotICBWQUxVRSBz
dHI7Ci0gIFR5cGVkRGF0YV9HZXRfU3RydWN0KF9zZWxmLCBNZXNzYWdlSGVhZGVyLCAmTWVzc2Fn
ZV90eXBlLCBzZWxmKTsKLQotICBzdHIgPSByYl9zdHJfbmV3MigiPCIpOwotICBzdHIgPSByYl9z
dHJfYXBwZW5kKHN0ciwgcmJfc3RyX25ldzIocmJfY2xhc3MybmFtZShDTEFTU19PRihfc2VsZikp
KSk7Ci0gIHN0ciA9IHJiX3N0cl9jYXQyKHN0ciwgIjogIik7Ci0gIHN0ciA9IHJiX3N0cl9hcHBl
bmQoc3RyLCBsYXlvdXRfaW5zcGVjdCgKLSAgICAgIHNlbGYtPmRlc2NyaXB0b3ItPmxheW91dCwg
TWVzc2FnZV9kYXRhKHNlbGYpKSk7Ci0gIHN0ciA9IHJiX3N0cl9jYXQyKHN0ciwgIj4iKTsKLSAg
cmV0dXJuIHN0cjsKLX0KLQotCi1WQUxVRSBNZXNzYWdlX3RvX2goVkFMVUUgX3NlbGYpIHsKLSAg
TWVzc2FnZUhlYWRlciogc2VsZjsKLSAgVkFMVUUgaGFzaDsKLSAgdXBiX21zZ19maWVsZF9pdGVy
IGl0OwotICBUeXBlZERhdGFfR2V0X1N0cnVjdChfc2VsZiwgTWVzc2FnZUhlYWRlciwgJk1lc3Nh
Z2VfdHlwZSwgc2VsZik7Ci0KLSAgaGFzaCA9IHJiX2hhc2hfbmV3KCk7Ci0KLSAgZm9yICh1cGJf
bXNnX2ZpZWxkX2JlZ2luKCZpdCwgc2VsZi0+ZGVzY3JpcHRvci0+bXNnZGVmKTsKLSAgICAgICAh
dXBiX21zZ19maWVsZF9kb25lKCZpdCk7Ci0gICAgICAgdXBiX21zZ19maWVsZF9uZXh0KCZpdCkp
IHsKLSAgICBjb25zdCB1cGJfZmllbGRkZWYqIGZpZWxkID0gdXBiX21zZ19pdGVyX2ZpZWxkKCZp
dCk7Ci0gICAgVkFMVUUgbXNnX3ZhbHVlID0gbGF5b3V0X2dldChzZWxmLT5kZXNjcmlwdG9yLT5s
YXlvdXQsIE1lc3NhZ2VfZGF0YShzZWxmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpZWxkKTsKLSAgICBWQUxVRSBtc2dfa2V5ICAgPSBJRDJTWU0ocmJfaW50ZXJuKHVwYl9m
aWVsZGRlZl9uYW1lKGZpZWxkKSkpOwotICAgIGlmICh1cGJfZmllbGRkZWZfbGFiZWwoZmllbGQp
ID09IFVQQl9MQUJFTF9SRVBFQVRFRCkgewotICAgICAgbXNnX3ZhbHVlID0gUmVwZWF0ZWRGaWVs
ZF90b19hcnkobXNnX3ZhbHVlKTsKLSAgICB9Ci0gICAgcmJfaGFzaF9hc2V0KGhhc2gsIG1zZ19r
ZXksIG1zZ192YWx1ZSk7Ci0gIH0KLSAgcmV0dXJuIGhhc2g7Ci19Ci0KLQotCi0vKgotICogY2Fs
bC1zZXE6Ci0gKiAgICAgTWVzc2FnZS5bXShpbmRleCkgPT4gdmFsdWUKLSAqCi0gKiBBY2Nlc3Nl
cyBhIGZpZWxkJ3MgdmFsdWUgYnkgZmllbGQgbmFtZS4gVGhlIHByb3ZpZGVkIGZpZWxkIG5hbWUg
c2hvdWxkIGJlIGEKLSAqIHN0cmluZy4KLSAqLwotVkFMVUUgTWVzc2FnZV9pbmRleChWQUxVRSBf
c2VsZiwgVkFMVUUgZmllbGRfbmFtZSkgewotICBNZXNzYWdlSGVhZGVyKiBzZWxmOwotICBjb25z
dCB1cGJfZmllbGRkZWYqIGZpZWxkOwotICBUeXBlZERhdGFfR2V0X1N0cnVjdChfc2VsZiwgTWVz
c2FnZUhlYWRlciwgJk1lc3NhZ2VfdHlwZSwgc2VsZik7Ci0gIENoZWNrX1R5cGUoZmllbGRfbmFt
ZSwgVF9TVFJJTkcpOwotICBmaWVsZCA9IHVwYl9tc2dkZWZfbnRvZnooc2VsZi0+ZGVzY3JpcHRv
ci0+bXNnZGVmLCBSU1RSSU5HX1BUUihmaWVsZF9uYW1lKSk7Ci0gIGlmIChmaWVsZCA9PSBOVUxM
KSB7Ci0gICAgcmV0dXJuIFFuaWw7Ci0gIH0KLSAgcmV0dXJuIGxheW91dF9nZXQoc2VsZi0+ZGVz
Y3JpcHRvci0+bGF5b3V0LCBNZXNzYWdlX2RhdGEoc2VsZiksIGZpZWxkKTsKLX0KLQotLyoKLSAq
IGNhbGwtc2VxOgotICogICAgIE1lc3NhZ2UuW109KGluZGV4LCB2YWx1ZSkKLSAqCi0gKiBTZXRz
IGEgZmllbGQncyB2YWx1ZSBieSBmaWVsZCBuYW1lLiBUaGUgcHJvdmlkZWQgZmllbGQgbmFtZSBz
aG91bGQgYmUgYQotICogc3RyaW5nLgotICovCi1WQUxVRSBNZXNzYWdlX2luZGV4X3NldChWQUxV
RSBfc2VsZiwgVkFMVUUgZmllbGRfbmFtZSwgVkFMVUUgdmFsdWUpIHsKLSAgTWVzc2FnZUhlYWRl
ciogc2VsZjsKLSAgY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZDsKLSAgVHlwZWREYXRhX0dldF9T
dHJ1Y3QoX3NlbGYsIE1lc3NhZ2VIZWFkZXIsICZNZXNzYWdlX3R5cGUsIHNlbGYpOwotICBDaGVj
a19UeXBlKGZpZWxkX25hbWUsIFRfU1RSSU5HKTsKLSAgZmllbGQgPSB1cGJfbXNnZGVmX250b2Z6
KHNlbGYtPmRlc2NyaXB0b3ItPm1zZ2RlZiwgUlNUUklOR19QVFIoZmllbGRfbmFtZSkpOwotICBp
ZiAoZmllbGQgPT0gTlVMTCkgewotICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIlVua25vd24g
ZmllbGQ6ICVzIiwgUlNUUklOR19QVFIoZmllbGRfbmFtZSkpOwotICB9Ci0gIGxheW91dF9zZXQo
c2VsZi0+ZGVzY3JpcHRvci0+bGF5b3V0LCBNZXNzYWdlX2RhdGEoc2VsZiksIGZpZWxkLCB2YWx1
ZSk7Ci0gIHJldHVybiBRbmlsOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgTWVzc2Fn
ZS5kZXNjcmlwdG9yID0+IGRlc2NyaXB0b3IKLSAqCi0gKiBDbGFzcyBtZXRob2QgdGhhdCByZXR1
cm5zIHRoZSBEZXNjcmlwdG9yIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcwotICogbWVz
c2FnZSBjbGFzcydzIHR5cGUuCi0gKi8KLVZBTFVFIE1lc3NhZ2VfZGVzY3JpcHRvcihWQUxVRSBr
bGFzcykgewotICByZXR1cm4gcmJfaXZhcl9nZXQoa2xhc3MsIGRlc2NyaXB0b3JfaW5zdGFuY2V2
YXJfaW50ZXJuZWQpOwotfQotCi1WQUxVRSBidWlsZF9jbGFzc19mcm9tX2Rlc2NyaXB0b3IoRGVz
Y3JpcHRvciogZGVzYykgewotICBjb25zdCBjaGFyICpuYW1lOwotICBWQUxVRSBrbGFzczsKLQot
ICBpZiAoZGVzYy0+bGF5b3V0ID09IE5VTEwpIHsKLSAgICBkZXNjLT5sYXlvdXQgPSBjcmVhdGVf
bGF5b3V0KGRlc2MtPm1zZ2RlZik7Ci0gIH0KLSAgaWYgKGRlc2MtPmZpbGxfbWV0aG9kID09IE5V
TEwpIHsKLSAgICBkZXNjLT5maWxsX21ldGhvZCA9IG5ld19maWxsbXNnX2RlY29kZXJtZXRob2Qo
ZGVzYywgJmRlc2MtPmZpbGxfbWV0aG9kKTsKLSAgfQotCi0gIG5hbWUgPSB1cGJfbXNnZGVmX2Z1
bGxuYW1lKGRlc2MtPm1zZ2RlZik7Ci0gIGlmIChuYW1lID09IE5VTEwpIHsKLSAgICByYl9yYWlz
ZShyYl9lUnVudGltZUVycm9yLCAiRGVzY3JpcHRvciBkb2VzIG5vdCBoYXZlIGFzc2lnbmVkIG5h
bWUuIik7Ci0gIH0KLQotICBrbGFzcyA9IHJiX2RlZmluZV9jbGFzc19pZCgKLSAgICAgIC8vIERv
Y3Mgc2F5IHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIFVzZXIgd2lsbCBhc3NpZ24gcmV0dXJu
IHZhbHVlIHRvCi0gICAgICAvLyB0aGVpciBvd24gdG9wbGV2ZWwgY29uc3RhbnQgY2xhc3MgbmFt
ZS4KLSAgICAgIHJiX2ludGVybigiTWVzc2FnZSIpLAotICAgICAgcmJfY09iamVjdCk7Ci0gIHJi
X2l2YXJfc2V0KGtsYXNzLCBkZXNjcmlwdG9yX2luc3RhbmNldmFyX2ludGVybmVkLAotICAgICAg
ICAgICAgICBnZXRfZGVmX29iaihkZXNjLT5tc2dkZWYpKTsKLSAgcmJfZGVmaW5lX2FsbG9jX2Z1
bmMoa2xhc3MsIE1lc3NhZ2VfYWxsb2MpOwotICByYl9yZXF1aXJlKCJnb29nbGUvcHJvdG9idWYv
bWVzc2FnZV9leHRzIik7Ci0gIHJiX2luY2x1ZGVfbW9kdWxlKGtsYXNzLCByYl9ldmFsX3N0cmlu
ZygiR29vZ2xlOjpQcm90b2J1Zjo6TWVzc2FnZUV4dHMiKSk7Ci0gIHJiX2V4dGVuZF9vYmplY3Qo
Ci0gICAgICBrbGFzcywgcmJfZXZhbF9zdHJpbmcoIkdvb2dsZTo6UHJvdG9idWY6Ok1lc3NhZ2VF
eHRzOjpDbGFzc01ldGhvZHMiKSk7Ci0KLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgIm1ldGhv
ZF9taXNzaW5nIiwKLSAgICAgICAgICAgICAgICAgICBNZXNzYWdlX21ldGhvZF9taXNzaW5nLCAt
MSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJpbml0aWFsaXplIiwgTWVzc2FnZV9pbml0
aWFsaXplLCAtMSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJkdXAiLCBNZXNzYWdlX2R1
cCwgMCk7Ci0gIC8vIEFsc28gZGVmaW5lICNjbG9uZSBzbyB0aGF0IHdlIGRvbid0IGluaGVyaXQg
T2JqZWN0I2Nsb25lLgotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiY2xvbmUiLCBNZXNzYWdl
X2R1cCwgMCk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICI9PSIsIE1lc3NhZ2VfZXEsIDEp
OwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiaGFzaCIsIE1lc3NhZ2VfaGFzaCwgMCk7Ci0g
IHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJ0b19oIiwgTWVzc2FnZV90b19oLCAwKTsKLSAgcmJf
ZGVmaW5lX21ldGhvZChrbGFzcywgInRvX2hhc2giLCBNZXNzYWdlX3RvX2gsIDApOwotICByYl9k
ZWZpbmVfbWV0aG9kKGtsYXNzLCAiaW5zcGVjdCIsIE1lc3NhZ2VfaW5zcGVjdCwgMCk7Ci0gIHJi
X2RlZmluZV9tZXRob2Qoa2xhc3MsICJbXSIsIE1lc3NhZ2VfaW5kZXgsIDEpOwotICByYl9kZWZp
bmVfbWV0aG9kKGtsYXNzLCAiW109IiwgTWVzc2FnZV9pbmRleF9zZXQsIDIpOwotICByYl9kZWZp
bmVfc2luZ2xldG9uX21ldGhvZChrbGFzcywgImRlY29kZSIsIE1lc3NhZ2VfZGVjb2RlLCAxKTsK
LSAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2Qoa2xhc3MsICJlbmNvZGUiLCBNZXNzYWdlX2Vu
Y29kZSwgMSk7Ci0gIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGtsYXNzLCAiZGVjb2RlX2pz
b24iLCBNZXNzYWdlX2RlY29kZV9qc29uLCAxKTsKLSAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRo
b2Qoa2xhc3MsICJlbmNvZGVfanNvbiIsIE1lc3NhZ2VfZW5jb2RlX2pzb24sIC0xKTsKLSAgcmJf
ZGVmaW5lX3NpbmdsZXRvbl9tZXRob2Qoa2xhc3MsICJkZXNjcmlwdG9yIiwgTWVzc2FnZV9kZXNj
cmlwdG9yLCAwKTsKLQotICByZXR1cm4ga2xhc3M7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAq
ICAgICBFbnVtLmxvb2t1cChudW1iZXIpID0+IG5hbWUKLSAqCi0gKiBUaGlzIG1vZHVsZSBtZXRo
b2QsIHByb3ZpZGVkIG9uIGVhY2ggZ2VuZXJhdGVkIGVudW0gbW9kdWxlLCBsb29rcyB1cCBhbiBl
bnVtCi0gKiB2YWx1ZSBieSBudW1iZXIgYW5kIHJldHVybnMgaXRzIG5hbWUgYXMgYSBSdWJ5IHN5
bWJvbCwgb3IgbmlsIGlmIG5vdCBmb3VuZC4KLSAqLwotVkFMVUUgZW51bV9sb29rdXAoVkFMVUUg
c2VsZiwgVkFMVUUgbnVtYmVyKSB7Ci0gIGludDMyX3QgbnVtID0gTlVNMklOVChudW1iZXIpOwot
ICBWQUxVRSBkZXNjID0gcmJfaXZhcl9nZXQoc2VsZiwgZGVzY3JpcHRvcl9pbnN0YW5jZXZhcl9p
bnRlcm5lZCk7Ci0gIEVudW1EZXNjcmlwdG9yKiBlbnVtZGVzYyA9IHJ1YnlfdG9fRW51bURlc2Ny
aXB0b3IoZGVzYyk7Ci0KLSAgY29uc3QgY2hhciogbmFtZSA9IHVwYl9lbnVtZGVmX2l0b24oZW51
bWRlc2MtPmVudW1kZWYsIG51bSk7Ci0gIGlmIChuYW1lID09IE5VTEwpIHsKLSAgICByZXR1cm4g
UW5pbDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gSUQyU1lNKHJiX2ludGVybihuYW1lKSk7Ci0g
IH0KLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIEVudW0ucmVzb2x2ZShuYW1lKSA9PiBu
dW1iZXIKLSAqCi0gKiBUaGlzIG1vZHVsZSBtZXRob2QsIHByb3ZpZGVkIG9uIGVhY2ggZ2VuZXJh
dGVkIGVudW0gbW9kdWxlLCBsb29rcyB1cCBhbiBlbnVtCi0gKiB2YWx1ZSBieSBuYW1lIChhcyBh
IFJ1Ynkgc3ltYm9sKSBhbmQgcmV0dXJucyBpdHMgbmFtZSwgb3IgbmlsIGlmIG5vdCBmb3VuZC4K
LSAqLwotVkFMVUUgZW51bV9yZXNvbHZlKFZBTFVFIHNlbGYsIFZBTFVFIHN5bSkgewotICBjb25z
dCBjaGFyKiBuYW1lID0gcmJfaWQybmFtZShTWU0ySUQoc3ltKSk7Ci0gIFZBTFVFIGRlc2MgPSBy
Yl9pdmFyX2dldChzZWxmLCBkZXNjcmlwdG9yX2luc3RhbmNldmFyX2ludGVybmVkKTsKLSAgRW51
bURlc2NyaXB0b3IqIGVudW1kZXNjID0gcnVieV90b19FbnVtRGVzY3JpcHRvcihkZXNjKTsKLQot
ICBpbnQzMl90IG51bSA9IDA7Ci0gIGJvb2wgZm91bmQgPSB1cGJfZW51bWRlZl9udG9peihlbnVt
ZGVzYy0+ZW51bWRlZiwgbmFtZSwgJm51bSk7Ci0gIGlmICghZm91bmQpIHsKLSAgICByZXR1cm4g
UW5pbDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gSU5UMk5VTShudW0pOwotICB9Ci19Ci0KLS8q
Ci0gKiBjYWxsLXNlcToKLSAqICAgICBFbnVtLmRlc2NyaXB0b3IKLSAqCi0gKiBUaGlzIG1vZHVs
ZSBtZXRob2QsIHByb3ZpZGVkIG9uIGVhY2ggZ2VuZXJhdGVkIGVudW0gbW9kdWxlLCByZXR1cm5z
IHRoZQotICogRW51bURlc2NyaXB0b3IgY29ycmVzcG9uZGluZyB0byB0aGlzIGVudW0gdHlwZS4K
LSAqLwotVkFMVUUgZW51bV9kZXNjcmlwdG9yKFZBTFVFIHNlbGYpIHsKLSAgcmV0dXJuIHJiX2l2
YXJfZ2V0KHNlbGYsIGRlc2NyaXB0b3JfaW5zdGFuY2V2YXJfaW50ZXJuZWQpOwotfQotCi1WQUxV
RSBidWlsZF9tb2R1bGVfZnJvbV9lbnVtZGVzYyhFbnVtRGVzY3JpcHRvciogZW51bWRlc2MpIHsK
LSAgVkFMVUUgbW9kID0gcmJfZGVmaW5lX21vZHVsZV9pZCgKLSAgICAgIHJiX2ludGVybih1cGJf
ZW51bWRlZl9mdWxsbmFtZShlbnVtZGVzYy0+ZW51bWRlZikpKTsKLQotICB1cGJfZW51bV9pdGVy
IGl0OwotICBmb3IgKHVwYl9lbnVtX2JlZ2luKCZpdCwgZW51bWRlc2MtPmVudW1kZWYpOwotICAg
ICAgICF1cGJfZW51bV9kb25lKCZpdCk7Ci0gICAgICAgdXBiX2VudW1fbmV4dCgmaXQpKSB7Ci0g
ICAgY29uc3QgY2hhciogbmFtZSA9IHVwYl9lbnVtX2l0ZXJfbmFtZSgmaXQpOwotICAgIGludDMy
X3QgdmFsdWUgPSB1cGJfZW51bV9pdGVyX251bWJlcigmaXQpOwotICAgIGlmIChuYW1lWzBdIDwg
J0EnIHx8IG5hbWVbMF0gPiAnWicpIHsKLSAgICAgIHJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsCi0g
ICAgICAgICAgICAgICAiRW51bSB2YWx1ZSAnJXMnIGRvZXMgbm90IHN0YXJ0IHdpdGggYW4gdXBw
ZXJjYXNlIGxldHRlciAiCi0gICAgICAgICAgICAgICAiYXMgaXMgcmVxdWlyZWQgZm9yIFJ1Ynkg
Y29uc3RhbnRzLiIsCi0gICAgICAgICAgICAgICBuYW1lKTsKLSAgICB9Ci0gICAgcmJfZGVmaW5l
X2NvbnN0KG1vZCwgbmFtZSwgSU5UMk5VTSh2YWx1ZSkpOwotICB9Ci0KLSAgcmJfZGVmaW5lX3Np
bmdsZXRvbl9tZXRob2QobW9kLCAibG9va3VwIiwgZW51bV9sb29rdXAsIDEpOwotICByYl9kZWZp
bmVfc2luZ2xldG9uX21ldGhvZChtb2QsICJyZXNvbHZlIiwgZW51bV9yZXNvbHZlLCAxKTsKLSAg
cmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QobW9kLCAiZGVzY3JpcHRvciIsIGVudW1fZGVzY3Jp
cHRvciwgMCk7Ci0gIHJiX2l2YXJfc2V0KG1vZCwgZGVzY3JpcHRvcl9pbnN0YW5jZXZhcl9pbnRl
cm5lZCwKLSAgICAgICAgICAgICAgZ2V0X2RlZl9vYmooZW51bWRlc2MtPmVudW1kZWYpKTsKLQot
ICByZXR1cm4gbW9kOwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgR29vZ2xlOjpQcm90
b2J1Zi5kZWVwX2NvcHkob2JqKSA9PiBjb3B5X29mX29iagotICoKLSAqIFBlcmZvcm1zIGEgZGVl
cCBjb3B5IG9mIGEgUmVwZWF0ZWRGaWVsZCBpbnN0YW5jZSwgYSBNYXAgaW5zdGFuY2UsIG9yIGEK
LSAqIG1lc3NhZ2Ugb2JqZWN0LCByZWN1cnNpdmVseSBjb3B5aW5nIGl0cyBtZW1iZXJzLgotICov
Ci1WQUxVRSBHb29nbGVfUHJvdG9idWZfZGVlcF9jb3B5KFZBTFVFIHNlbGYsIFZBTFVFIG9iaikg
ewotICBWQUxVRSBrbGFzcyA9IENMQVNTX09GKG9iaik7Ci0gIGlmIChrbGFzcyA9PSBjUmVwZWF0
ZWRGaWVsZCkgewotICAgIHJldHVybiBSZXBlYXRlZEZpZWxkX2RlZXBfY29weShvYmopOwotICB9
IGVsc2UgaWYgKGtsYXNzID09IGNNYXApIHsKLSAgICByZXR1cm4gTWFwX2RlZXBfY29weShvYmop
OwotICB9IGVsc2UgewotICAgIHJldHVybiBNZXNzYWdlX2RlZXBfY29weShvYmopOwotICB9Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3J1YnkvZXh0L2dvb2dsZS9wcm90b2J1Zl9jL3Byb3RvYnVmLmMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkv
ZXh0L2dvb2dsZS9wcm90b2J1Zl9jL3Byb3RvYnVmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDdjZGU0YWVjMmM5YWQwMWI3NWJkZmE1ZTA4MThmODMzYzZjOTUxMzYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4dC9nb29nbGUvcHJv
dG9idWZfYy9wcm90b2J1Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAicHJvdG9idWYuaCIKLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEdsb2JhbCBtYXAgZnJvbSB1cGIge21zZyxlbnVt
fWRlZnMgdG8gd3JhcHBlciBEZXNjcmlwdG9yL0VudW1EZXNjcmlwdG9yCi0vLyBpbnN0YW5jZXMu
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBUaGlzIGlzIGEgaGFzaCB0YWJsZSBmcm9t
IGRlZiBvYmplY3RzIChlbmNvZGVkIGJ5IGNvbnZlcnRpbmcgcG9pbnRlcnMgdG8KLS8vIFJ1Ynkg
aW50ZWdlcnMpIHRvIE1lc3NhZ2VEZWYvRW51bURlZiBpbnN0YW5jZXMgKGFzIFJ1YnkgdmFsdWVz
KS4KLVZBTFVFIHVwYl9kZWZfdG9fcnVieV9vYmpfbWFwOwotCi1WQUxVRSBjRXJyb3I7Ci1WQUxV
RSBjUGFyc2VFcnJvcjsKLQotdm9pZCBhZGRfZGVmX29iaihjb25zdCB2b2lkKiBkZWYsIFZBTFVF
IHZhbHVlKSB7Ci0gIHJiX2hhc2hfYXNldCh1cGJfZGVmX3RvX3J1Ynlfb2JqX21hcCwgVUxMMk5V
TSgoaW50cHRyX3QpZGVmKSwgdmFsdWUpOwotfQotCi1WQUxVRSBnZXRfZGVmX29iaihjb25zdCB2
b2lkKiBkZWYpIHsKLSAgcmV0dXJuIHJiX2hhc2hfYXJlZih1cGJfZGVmX3RvX3J1Ynlfb2JqX21h
cCwgVUxMMk5VTSgoaW50cHRyX3QpZGVmKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0vLyBVdGlsaXRpZXMuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSYWlzZXMgYSBS
dWJ5IGVycm9yIGlmIHxzdGF0dXN8IGlzIG5vdCBPSywgdXNpbmcgaXRzIGVycm9yIG1lc3NhZ2Uu
Ci12b2lkIGNoZWNrX3VwYl9zdGF0dXMoY29uc3QgdXBiX3N0YXR1cyogc3RhdHVzLCBjb25zdCBj
aGFyKiBtc2cpIHsKLSAgaWYgKCF1cGJfb2soc3RhdHVzKSkgewotICAgIHJiX3JhaXNlKHJiX2VS
dW50aW1lRXJyb3IsICIlczogJXNcbiIsIG1zZywgdXBiX3N0YXR1c19lcnJtc2coc3RhdHVzKSk7
Ci0gIH0KLX0KLQotLy8gU3RyaW5nIGVuY29kaW5nczogd2UgbG9vayB0aGVzZSB1cCBvbmNlLCBh
dCBsb2FkIHRpbWUsIGFuZCB0aGVuIGNhY2hlIHRoZW0KLS8vIGhlcmUuCi1yYl9lbmNvZGluZyog
a1J1YnlTdHJpbmdVdGY4RW5jb2Rpbmc7Ci1yYl9lbmNvZGluZyoga1J1YnlTdHJpbmdBU0NJSUVu
Y29kaW5nOwotcmJfZW5jb2RpbmcqIGtSdWJ5U3RyaW5nOGJpdEVuY29kaW5nOwotCi0vLyBSdWJ5
LWludGVybmVkIHN0cmluZzogImRlc2NyaXB0b3IiLiBXZSB1c2UgdGhpcyBpZGVudGlmaWVyIHRv
IHN0b3JlIGFuCi0vLyBpbnN0YW5jZSB2YXJpYWJsZSBvbiBtZXNzYWdlIGNsYXNzZXMgd2UgY3Jl
YXRlIGluIG9yZGVyIHRvIGxpbmsgdGhlbSBiYWNrIHRvCi0vLyB0aGVpciBkZXNjcmlwdG9ycy4K
LS8vCi0vLyBXZSBpbnRlcm4gdGhpcyBvbmNlIGF0IG1vZHVsZSBsb2FkIHRpbWUgdGhlbiB1c2Ug
dGhlIGludGVybmVkIGlkZW50aWZpZXIgYXQKLS8vIHJ1bnRpbWUgaW4gb3JkZXIgdG8gYXZvaWQg
dGhlIGNvc3Qgb2YgcmVwZWF0ZWRseSBpbnRlcm5pbmcgaW4gaG90IHBhdGhzLgotY29uc3QgY2hh
cioga0Rlc2NyaXB0b3JJbnN0YW5jZVZhciA9ICJkZXNjcmlwdG9yIjsKLUlEIGRlc2NyaXB0b3Jf
aW5zdGFuY2V2YXJfaW50ZXJuZWQ7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbml0
aWFsaXphdGlvbi9lbnRyeSBwb2ludC4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRo
aXMgbXVzdCBiZSBuYW1lZCAiSW5pdF9wcm90b2J1Zl9jIiBiZWNhdXNlIHRoZSBSdWJ5IG1vZHVs
ZSBpcyBuYW1lZAotLy8gInByb3RvYnVmX2MiIC0tIHRoZSBWTSBsb29rcyBmb3IgdGhpcyBzeW1i
b2wgaW4gb3VyIC5zby4KLXZvaWQgSW5pdF9wcm90b2J1Zl9jKCkgewotICBWQUxVRSBnb29nbGUg
PSByYl9kZWZpbmVfbW9kdWxlKCJHb29nbGUiKTsKLSAgVkFMVUUgcHJvdG9idWYgPSByYl9kZWZp
bmVfbW9kdWxlX3VuZGVyKGdvb2dsZSwgIlByb3RvYnVmIik7Ci0gIFZBTFVFIGludGVybmFsID0g
cmJfZGVmaW5lX21vZHVsZV91bmRlcihwcm90b2J1ZiwgIkludGVybmFsIik7Ci0KLSAgZGVzY3Jp
cHRvcl9pbnN0YW5jZXZhcl9pbnRlcm5lZCA9IHJiX2ludGVybihrRGVzY3JpcHRvckluc3RhbmNl
VmFyKTsKLSAgRGVzY3JpcHRvclBvb2xfcmVnaXN0ZXIocHJvdG9idWYpOwotICBEZXNjcmlwdG9y
X3JlZ2lzdGVyKHByb3RvYnVmKTsKLSAgRmllbGREZXNjcmlwdG9yX3JlZ2lzdGVyKHByb3RvYnVm
KTsKLSAgT25lb2ZEZXNjcmlwdG9yX3JlZ2lzdGVyKHByb3RvYnVmKTsKLSAgRW51bURlc2NyaXB0
b3JfcmVnaXN0ZXIocHJvdG9idWYpOwotICBNZXNzYWdlQnVpbGRlckNvbnRleHRfcmVnaXN0ZXIo
aW50ZXJuYWwpOwotICBPbmVvZkJ1aWxkZXJDb250ZXh0X3JlZ2lzdGVyKGludGVybmFsKTsKLSAg
RW51bUJ1aWxkZXJDb250ZXh0X3JlZ2lzdGVyKGludGVybmFsKTsKLSAgQnVpbGRlcl9yZWdpc3Rl
cihpbnRlcm5hbCk7Ci0gIFJlcGVhdGVkRmllbGRfcmVnaXN0ZXIocHJvdG9idWYpOwotICBNYXBf
cmVnaXN0ZXIocHJvdG9idWYpOwotCi0gIGNFcnJvciA9IHJiX2NvbnN0X2dldChwcm90b2J1Ziwg
cmJfaW50ZXJuKCJFcnJvciIpKTsKLSAgY1BhcnNlRXJyb3IgPSByYl9jb25zdF9nZXQocHJvdG9i
dWYsIHJiX2ludGVybigiUGFyc2VFcnJvciIpKTsKLQotICByYl9kZWZpbmVfc2luZ2xldG9uX21l
dGhvZChwcm90b2J1ZiwgImRlZXBfY29weSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdvb2dsZV9Qcm90b2J1Zl9kZWVwX2NvcHksIDEpOwotCi0gIGtSdWJ5U3RyaW5nVXRmOEVuY29k
aW5nID0gcmJfdXRmOF9lbmNvZGluZygpOwotICBrUnVieVN0cmluZ0FTQ0lJRW5jb2RpbmcgPSBy
Yl91c2FzY2lpX2VuY29kaW5nKCk7Ci0gIGtSdWJ5U3RyaW5nOGJpdEVuY29kaW5nID0gcmJfYXNj
aWk4Yml0X2VuY29kaW5nKCk7Ci0KLSAgdXBiX2RlZl90b19ydWJ5X29ial9tYXAgPSByYl9oYXNo
X25ldygpOwotICByYl9nY19yZWdpc3Rlcl9hZGRyZXNzKCZ1cGJfZGVmX3RvX3J1Ynlfb2JqX21h
cCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvZXh0L2dvb2dsZS9wcm90b2J1Zl9jL3Byb3RvYnVmLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3J1YnkvZXh0L2dvb2dsZS9wcm90b2J1Zl9jL3Byb3RvYnVmLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI4MzRjODk0NGE2MzM1YjEwOTY0YjIzOTI0ZjQxMmJjMTlhMTk2NzEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4dC9nb29n
bGUvcHJvdG9idWZfYy9wcm90b2J1Zi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTM4ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIF9fR09PR0xFX1BS
T1RPQlVGX1JVQllfUFJPVE9CVUZfSF9fCi0jZGVmaW5lIF9fR09PR0xFX1BST1RPQlVGX1JVQllf
UFJPVE9CVUZfSF9fCi0KLSNpbmNsdWRlIDxydWJ5L3J1YnkuaD4KLSNpbmNsdWRlIDxydWJ5L3Zt
Lmg+Ci0jaW5jbHVkZSA8cnVieS9lbmNvZGluZy5oPgotCi0jaW5jbHVkZSAidXBiLmgiCi0KLS8v
IEZvcndhcmQgZGVjbHMuCi1zdHJ1Y3QgRGVzY3JpcHRvclBvb2w7Ci1zdHJ1Y3QgRGVzY3JpcHRv
cjsKLXN0cnVjdCBGaWVsZERlc2NyaXB0b3I7Ci1zdHJ1Y3QgRW51bURlc2NyaXB0b3I7Ci1zdHJ1
Y3QgTWVzc2FnZUxheW91dDsKLXN0cnVjdCBNZXNzYWdlRmllbGQ7Ci1zdHJ1Y3QgTWVzc2FnZUhl
YWRlcjsKLXN0cnVjdCBNZXNzYWdlQnVpbGRlckNvbnRleHQ7Ci1zdHJ1Y3QgRW51bUJ1aWxkZXJD
b250ZXh0Owotc3RydWN0IEJ1aWxkZXI7Ci0KLXR5cGVkZWYgc3RydWN0IERlc2NyaXB0b3JQb29s
IERlc2NyaXB0b3JQb29sOwotdHlwZWRlZiBzdHJ1Y3QgRGVzY3JpcHRvciBEZXNjcmlwdG9yOwot
dHlwZWRlZiBzdHJ1Y3QgRmllbGREZXNjcmlwdG9yIEZpZWxkRGVzY3JpcHRvcjsKLXR5cGVkZWYg
c3RydWN0IE9uZW9mRGVzY3JpcHRvciBPbmVvZkRlc2NyaXB0b3I7Ci10eXBlZGVmIHN0cnVjdCBF
bnVtRGVzY3JpcHRvciBFbnVtRGVzY3JpcHRvcjsKLXR5cGVkZWYgc3RydWN0IE1lc3NhZ2VMYXlv
dXQgTWVzc2FnZUxheW91dDsKLXR5cGVkZWYgc3RydWN0IE1lc3NhZ2VGaWVsZCBNZXNzYWdlRmll
bGQ7Ci10eXBlZGVmIHN0cnVjdCBNZXNzYWdlSGVhZGVyIE1lc3NhZ2VIZWFkZXI7Ci10eXBlZGVm
IHN0cnVjdCBNZXNzYWdlQnVpbGRlckNvbnRleHQgTWVzc2FnZUJ1aWxkZXJDb250ZXh0OwotdHlw
ZWRlZiBzdHJ1Y3QgT25lb2ZCdWlsZGVyQ29udGV4dCBPbmVvZkJ1aWxkZXJDb250ZXh0OwotdHlw
ZWRlZiBzdHJ1Y3QgRW51bUJ1aWxkZXJDb250ZXh0IEVudW1CdWlsZGVyQ29udGV4dDsKLXR5cGVk
ZWYgc3RydWN0IEJ1aWxkZXIgQnVpbGRlcjsKLQotLyoKLSBJdCBjYW4gYmUgYSBiaXQgY29uZnVz
aW5nIGhvdyB0aGUgQyBzdHJ1Y3RzIGRlZmluZWQgYmVsb3cgYW5kIHRoZSBSdWJ5Ci0gb2JqZWN0
cyBpbnRlcmFjdCBhbmQgaG9sZCByZWZlcmVuY2VzIHRvIGVhY2ggb3RoZXIuIEZpcnN0LCBhIGZl
dyBwcmluY2lwbGVzOgotCi0gLSBSdWJ5J3MgIlR5cGVkRGF0YSIgYWJzdHJhY3Rpb24gbGV0cyBh
IFJ1YnkgVkFMVUUgaG9sZCBhIHBvaW50ZXIgdG8gYSBDCi0gICBzdHJ1Y3QgKG9yIGFyYml0cmFy
eSBtZW1vcnkgY2h1bmspLCBvd24gaXQsIGFuZCBmcmVlIGl0IHdoZW4gY29sbGVjdGVkLgotICAg
VGh1cywgZWFjaCBzdHJ1Y3QgYmVsb3cgd2lsbCBoYXZlIGEgY29ycmVzcG9uZGluZyBSdWJ5IG9i
amVjdAotICAgd3JhcHBpbmcvb3duaW5nIGl0LgotCi0gLSBUbyBnZXQgYmFjayBmcm9tIGFuIHVu
ZGVybHlpbmcgdXBiIHttc2csZW51bX1kZWYgdG8gdGhlIFJ1Ynkgb2JqZWN0LCB3ZQotICAga2Vl
cCBhIGdsb2JhbCBoYXNobWFwLCBhY2Nlc3NlZCBieSBnZXRfZGVmX29iai9hZGRfZGVmX29iaiBi
ZWxvdy4KLQotIFRoZSBpbi1tZW1vcnkgc3RydWN0dXJlIGlzIHRoZW4gc29tZXRoaW5nIGxpa2U6
Ci0KLSAgIFJ1YnkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgdXBiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfAotICAgRGVzY3JpcHRvclBvb2wgIC0tLS0tLS0tLS0tLXwt
LS0tLS0tLS0tLT4gdXBiX3N5bXRhYl9fX19fX19fX19fX19fX19fX19fCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8IChtZXNzYWdlIHR5cGVzKSAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB2
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgRGVzY3JpcHRvciAgIC0tLS0tLS0tLS0t
LS0tLXwtLS0tLS0tLS0tLT4gdXBiX21zZ2RlZiAgICAgICAgIChlbnVtIHR5cGVzKXwKLSAgICB8
LS0+IG1zZ2NsYXNzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgICBeICAgICAgICAg
ICAgICAgICAgICAgICB8Ci0gICAgfCAgICAoZHluYW1pY2FsbHkgYnVpbHQpICAgfCAgICAgICAg
ICAgICAgICB8ICAgfCAoc3VibXNnIGZpZWxkcykgICAgICAgfAotICAgIHwtLT4gTWVzc2FnZUxh
eW91dCAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICAgICAgICAgICAgICAg
IC8KLSAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18PiBkZWNvZGVyIG1ldGhvZHwgICB8
ICAgICAgICAgICAgICAgICAgICAgIC8KLSAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18
PiBzZXJpYWxpemUgICAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgIGhhbmRsZXJzICAgICAgdiAgIHwgICAgICAgICAgICAgICAg
ICAgIC8KLSAgIEZpZWxkRGVzY3JpcHRvciAgLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0+IHVwYl9m
aWVsZGRlZiAgICAgICAgICAgICAgIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHYgKGVudW0gZmllbGRzKSAgIC8K
LSAgIEVudW1EZXNjcmlwdG9yICAtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0+IHVwYl9lbnVtZGVm
ICA8LS0tLS0tLS0tLScKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICBcX19fLwotICAgICAgICAgICAgICAgYC0tLS0tLS0tLS0tLS0tLXwt
LS0tLS0tLS0tLS0tLS0tLScgICAgKGdldF9kZWZfb2JqIG1hcCkKLSAqLwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gUnVieSBjbGFzcyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdHJ1Y3QgRGVzY3JpcHRvclBvb2wgewotICB1cGJfc3lt
dGFiKiBzeW10YWI7Ci19OwotCi1zdHJ1Y3QgRGVzY3JpcHRvciB7Ci0gIGNvbnN0IHVwYl9tc2dk
ZWYqIG1zZ2RlZjsKLSAgTWVzc2FnZUxheW91dCogbGF5b3V0OwotICBWQUxVRSBrbGFzczsgIC8v
IGJlZ2lucyBhcyBuaWwKLSAgY29uc3QgdXBiX2hhbmRsZXJzKiBmaWxsX2hhbmRsZXJzOwotICBj
b25zdCB1cGJfcGJkZWNvZGVybWV0aG9kKiBmaWxsX21ldGhvZDsKLSAgY29uc3QgdXBiX2pzb25f
cGFyc2VybWV0aG9kKiBqc29uX2ZpbGxfbWV0aG9kOwotICBjb25zdCB1cGJfaGFuZGxlcnMqIHBi
X3NlcmlhbGl6ZV9oYW5kbGVyczsKLSAgY29uc3QgdXBiX2hhbmRsZXJzKiBqc29uX3NlcmlhbGl6
ZV9oYW5kbGVyczsKLSAgY29uc3QgdXBiX2hhbmRsZXJzKiBqc29uX3NlcmlhbGl6ZV9oYW5kbGVy
c19wcmVzZXJ2ZTsKLSAgLy8gSGFuZGxlcnMgaG9sZCB0eXBlIGNsYXNzIHJlZmVyZW5jZXMgZm9y
IHN1Yi1tZXNzYWdlIGZpZWxkcyBkaXJlY3RseSBpbiBzb21lCi0gIC8vIGNhc2VzLiBXZSBuZWVk
IHRvIGtlZXAgdGhlc2Ugcm9vdGVkIGJlY2F1c2UgdGhleSBtaWdodCBvdGhlcndpc2UgYmUKLSAg
Ly8gY29sbGVjdGVkLgotICBWQUxVRSB0eXBlY2xhc3NfcmVmZXJlbmNlczsKLX07Ci0KLXN0cnVj
dCBGaWVsZERlc2NyaXB0b3IgewotICBjb25zdCB1cGJfZmllbGRkZWYqIGZpZWxkZGVmOwotfTsK
LQotc3RydWN0IE9uZW9mRGVzY3JpcHRvciB7Ci0gIGNvbnN0IHVwYl9vbmVvZmRlZiogb25lb2Zk
ZWY7Ci19OwotCi1zdHJ1Y3QgRW51bURlc2NyaXB0b3IgewotICBjb25zdCB1cGJfZW51bWRlZiog
ZW51bWRlZjsKLSAgVkFMVUUgbW9kdWxlOyAgLy8gYmVnaW5zIGFzIG5pbAotfTsKLQotc3RydWN0
IE1lc3NhZ2VCdWlsZGVyQ29udGV4dCB7Ci0gIFZBTFVFIGRlc2NyaXB0b3I7Ci0gIFZBTFVFIGJ1
aWxkZXI7Ci19OwotCi1zdHJ1Y3QgT25lb2ZCdWlsZGVyQ29udGV4dCB7Ci0gIFZBTFVFIGRlc2Ny
aXB0b3I7Ci0gIFZBTFVFIGJ1aWxkZXI7Ci19OwotCi1zdHJ1Y3QgRW51bUJ1aWxkZXJDb250ZXh0
IHsKLSAgVkFMVUUgZW51bWRlc2M7Ci19OwotCi1zdHJ1Y3QgQnVpbGRlciB7Ci0gIFZBTFVFIHBl
bmRpbmdfbGlzdDsKLSAgdXBiX2RlZioqIGRlZnM7ICAvLyB1c2VkIG9ubHkgd2hpbGUgZmluYWxp
emluZwotfTsKLQotZXh0ZXJuIFZBTFVFIGNEZXNjcmlwdG9yUG9vbDsKLWV4dGVybiBWQUxVRSBj
RGVzY3JpcHRvcjsKLWV4dGVybiBWQUxVRSBjRmllbGREZXNjcmlwdG9yOwotZXh0ZXJuIFZBTFVF
IGNFbnVtRGVzY3JpcHRvcjsKLWV4dGVybiBWQUxVRSBjTWVzc2FnZUJ1aWxkZXJDb250ZXh0Owot
ZXh0ZXJuIFZBTFVFIGNPbmVvZkJ1aWxkZXJDb250ZXh0OwotZXh0ZXJuIFZBTFVFIGNFbnVtQnVp
bGRlckNvbnRleHQ7Ci1leHRlcm4gVkFMVUUgY0J1aWxkZXI7Ci0KLWV4dGVybiBWQUxVRSBjRXJy
b3I7Ci1leHRlcm4gVkFMVUUgY1BhcnNlRXJyb3I7Ci0KLS8vIFdlIGZvcndhcmQtZGVjbGFyZSBh
bGwgb2YgdGhlIFJ1YnkgbWV0aG9kIGltcGxlbWVudGF0aW9ucyBoZXJlIGJlY2F1c2Ugd2UKLS8v
IHNvbWV0aW1lcyBjYWxsIHRoZSBtZXRob2RzIGRpcmVjdGx5IGFjcm9zcyAuYyBmaWxlcywgcmF0
aGVyIHRoYW4gZ29pbmcKLS8vIHRocm91Z2ggUnVieSdzIG1ldGhvZCBkaXNwYXRjaGluZyAoZS5n
LiBkdXJpbmcgbWVzc2FnZSBwYXJzZSkuIEl0J3MgY2xlYW5lcgotLy8gdG8ga2VlcCB0aGUgbGlz
dCBvZiBvYmplY3QgbWV0aG9kcyB0b2dldGhlciB0aGFuIHRvIHNwbGl0IHRoZW0gYmV0d2Vlbgot
Ly8gc3RhdGljLWluLWZpbGUgZGVmaW5pdGlvbnMgYW5kIGhlYWRlciBkZWNsYXJhdGlvbnMuCi0K
LXZvaWQgRGVzY3JpcHRvclBvb2xfbWFyayh2b2lkKiBfc2VsZik7Ci12b2lkIERlc2NyaXB0b3JQ
b29sX2ZyZWUodm9pZCogX3NlbGYpOwotVkFMVUUgRGVzY3JpcHRvclBvb2xfYWxsb2MoVkFMVUUg
a2xhc3MpOwotdm9pZCBEZXNjcmlwdG9yUG9vbF9yZWdpc3RlcihWQUxVRSBtb2R1bGUpOwotRGVz
Y3JpcHRvclBvb2wqIHJ1YnlfdG9fRGVzY3JpcHRvclBvb2woVkFMVUUgdmFsdWUpOwotVkFMVUUg
RGVzY3JpcHRvclBvb2xfYWRkKFZBTFVFIF9zZWxmLCBWQUxVRSBkZWYpOwotVkFMVUUgRGVzY3Jp
cHRvclBvb2xfYnVpbGQoVkFMVUUgX3NlbGYpOwotVkFMVUUgRGVzY3JpcHRvclBvb2xfbG9va3Vw
KFZBTFVFIF9zZWxmLCBWQUxVRSBuYW1lKTsKLVZBTFVFIERlc2NyaXB0b3JQb29sX2dlbmVyYXRl
ZF9wb29sKFZBTFVFIF9zZWxmKTsKLQotdm9pZCBEZXNjcmlwdG9yX21hcmsodm9pZCogX3NlbGYp
Owotdm9pZCBEZXNjcmlwdG9yX2ZyZWUodm9pZCogX3NlbGYpOwotVkFMVUUgRGVzY3JpcHRvcl9h
bGxvYyhWQUxVRSBrbGFzcyk7Ci12b2lkIERlc2NyaXB0b3JfcmVnaXN0ZXIoVkFMVUUgbW9kdWxl
KTsKLURlc2NyaXB0b3IqIHJ1YnlfdG9fRGVzY3JpcHRvcihWQUxVRSB2YWx1ZSk7Ci1WQUxVRSBE
ZXNjcmlwdG9yX25hbWUoVkFMVUUgX3NlbGYpOwotVkFMVUUgRGVzY3JpcHRvcl9uYW1lX3NldChW
QUxVRSBfc2VsZiwgVkFMVUUgc3RyKTsKLVZBTFVFIERlc2NyaXB0b3JfZWFjaChWQUxVRSBfc2Vs
Zik7Ci1WQUxVRSBEZXNjcmlwdG9yX2xvb2t1cChWQUxVRSBfc2VsZiwgVkFMVUUgbmFtZSk7Ci1W
QUxVRSBEZXNjcmlwdG9yX2FkZF9maWVsZChWQUxVRSBfc2VsZiwgVkFMVUUgb2JqKTsKLVZBTFVF
IERlc2NyaXB0b3JfYWRkX29uZW9mKFZBTFVFIF9zZWxmLCBWQUxVRSBvYmopOwotVkFMVUUgRGVz
Y3JpcHRvcl9lYWNoX29uZW9mKFZBTFVFIF9zZWxmKTsKLVZBTFVFIERlc2NyaXB0b3JfbG9va3Vw
X29uZW9mKFZBTFVFIF9zZWxmLCBWQUxVRSBuYW1lKTsKLVZBTFVFIERlc2NyaXB0b3JfbXNnY2xh
c3MoVkFMVUUgX3NlbGYpOwotZXh0ZXJuIGNvbnN0IHJiX2RhdGFfdHlwZV90IF9EZXNjcmlwdG9y
X3R5cGU7Ci0KLXZvaWQgRmllbGREZXNjcmlwdG9yX21hcmsodm9pZCogX3NlbGYpOwotdm9pZCBG
aWVsZERlc2NyaXB0b3JfZnJlZSh2b2lkKiBfc2VsZik7Ci1WQUxVRSBGaWVsZERlc2NyaXB0b3Jf
YWxsb2MoVkFMVUUga2xhc3MpOwotdm9pZCBGaWVsZERlc2NyaXB0b3JfcmVnaXN0ZXIoVkFMVUUg
bW9kdWxlKTsKLUZpZWxkRGVzY3JpcHRvciogcnVieV90b19GaWVsZERlc2NyaXB0b3IoVkFMVUUg
dmFsdWUpOwotVkFMVUUgRmllbGREZXNjcmlwdG9yX25hbWUoVkFMVUUgX3NlbGYpOwotVkFMVUUg
RmllbGREZXNjcmlwdG9yX25hbWVfc2V0KFZBTFVFIF9zZWxmLCBWQUxVRSBzdHIpOwotVkFMVUUg
RmllbGREZXNjcmlwdG9yX3R5cGUoVkFMVUUgX3NlbGYpOwotVkFMVUUgRmllbGREZXNjcmlwdG9y
X3R5cGVfc2V0KFZBTFVFIF9zZWxmLCBWQUxVRSB0eXBlKTsKLVZBTFVFIEZpZWxkRGVzY3JpcHRv
cl9sYWJlbChWQUxVRSBfc2VsZik7Ci1WQUxVRSBGaWVsZERlc2NyaXB0b3JfbGFiZWxfc2V0KFZB
TFVFIF9zZWxmLCBWQUxVRSBsYWJlbCk7Ci1WQUxVRSBGaWVsZERlc2NyaXB0b3JfbnVtYmVyKFZB
TFVFIF9zZWxmKTsKLVZBTFVFIEZpZWxkRGVzY3JpcHRvcl9udW1iZXJfc2V0KFZBTFVFIF9zZWxm
LCBWQUxVRSBudW1iZXIpOwotVkFMVUUgRmllbGREZXNjcmlwdG9yX3N1Ym1zZ19uYW1lKFZBTFVF
IF9zZWxmKTsKLVZBTFVFIEZpZWxkRGVzY3JpcHRvcl9zdWJtc2dfbmFtZV9zZXQoVkFMVUUgX3Nl
bGYsIFZBTFVFIHZhbHVlKTsKLVZBTFVFIEZpZWxkRGVzY3JpcHRvcl9zdWJ0eXBlKFZBTFVFIF9z
ZWxmKTsKLVZBTFVFIEZpZWxkRGVzY3JpcHRvcl9nZXQoVkFMVUUgX3NlbGYsIFZBTFVFIG1zZ19y
Yik7Ci1WQUxVRSBGaWVsZERlc2NyaXB0b3Jfc2V0KFZBTFVFIF9zZWxmLCBWQUxVRSBtc2dfcmIs
IFZBTFVFIHZhbHVlKTsKLXVwYl9maWVsZHR5cGVfdCBydWJ5X3RvX2ZpZWxkdHlwZShWQUxVRSB0
eXBlKTsKLVZBTFVFIGZpZWxkdHlwZV90b19ydWJ5KHVwYl9maWVsZHR5cGVfdCB0eXBlKTsKLQot
dm9pZCBPbmVvZkRlc2NyaXB0b3JfbWFyayh2b2lkKiBfc2VsZik7Ci12b2lkIE9uZW9mRGVzY3Jp
cHRvcl9mcmVlKHZvaWQqIF9zZWxmKTsKLVZBTFVFIE9uZW9mRGVzY3JpcHRvcl9hbGxvYyhWQUxV
RSBrbGFzcyk7Ci12b2lkIE9uZW9mRGVzY3JpcHRvcl9yZWdpc3RlcihWQUxVRSBtb2R1bGUpOwot
T25lb2ZEZXNjcmlwdG9yKiBydWJ5X3RvX09uZW9mRGVzY3JpcHRvcihWQUxVRSB2YWx1ZSk7Ci1W
QUxVRSBPbmVvZkRlc2NyaXB0b3JfbmFtZShWQUxVRSBfc2VsZik7Ci1WQUxVRSBPbmVvZkRlc2Ny
aXB0b3JfbmFtZV9zZXQoVkFMVUUgX3NlbGYsIFZBTFVFIHZhbHVlKTsKLVZBTFVFIE9uZW9mRGVz
Y3JpcHRvcl9hZGRfZmllbGQoVkFMVUUgX3NlbGYsIFZBTFVFIGZpZWxkKTsKLVZBTFVFIE9uZW9m
RGVzY3JpcHRvcl9lYWNoKFZBTFVFIF9zZWxmLCBWQUxVRSBmaWVsZCk7Ci0KLXZvaWQgRW51bURl
c2NyaXB0b3JfbWFyayh2b2lkKiBfc2VsZik7Ci12b2lkIEVudW1EZXNjcmlwdG9yX2ZyZWUodm9p
ZCogX3NlbGYpOwotVkFMVUUgRW51bURlc2NyaXB0b3JfYWxsb2MoVkFMVUUga2xhc3MpOwotdm9p
ZCBFbnVtRGVzY3JpcHRvcl9yZWdpc3RlcihWQUxVRSBtb2R1bGUpOwotRW51bURlc2NyaXB0b3Iq
IHJ1YnlfdG9fRW51bURlc2NyaXB0b3IoVkFMVUUgdmFsdWUpOwotVkFMVUUgRW51bURlc2NyaXB0
b3JfbmFtZShWQUxVRSBfc2VsZik7Ci1WQUxVRSBFbnVtRGVzY3JpcHRvcl9uYW1lX3NldChWQUxV
RSBfc2VsZiwgVkFMVUUgc3RyKTsKLVZBTFVFIEVudW1EZXNjcmlwdG9yX2FkZF92YWx1ZShWQUxV
RSBfc2VsZiwgVkFMVUUgbmFtZSwgVkFMVUUgbnVtYmVyKTsKLVZBTFVFIEVudW1EZXNjcmlwdG9y
X2xvb2t1cF9uYW1lKFZBTFVFIF9zZWxmLCBWQUxVRSBuYW1lKTsKLVZBTFVFIEVudW1EZXNjcmlw
dG9yX2xvb2t1cF92YWx1ZShWQUxVRSBfc2VsZiwgVkFMVUUgbnVtYmVyKTsKLVZBTFVFIEVudW1E
ZXNjcmlwdG9yX2VhY2goVkFMVUUgX3NlbGYpOwotVkFMVUUgRW51bURlc2NyaXB0b3JfZW51bW1v
ZHVsZShWQUxVRSBfc2VsZik7Ci1leHRlcm4gY29uc3QgcmJfZGF0YV90eXBlX3QgX0VudW1EZXNj
cmlwdG9yX3R5cGU7Ci0KLXZvaWQgTWVzc2FnZUJ1aWxkZXJDb250ZXh0X21hcmsodm9pZCogX3Nl
bGYpOwotdm9pZCBNZXNzYWdlQnVpbGRlckNvbnRleHRfZnJlZSh2b2lkKiBfc2VsZik7Ci1WQUxV
RSBNZXNzYWdlQnVpbGRlckNvbnRleHRfYWxsb2MoVkFMVUUga2xhc3MpOwotdm9pZCBNZXNzYWdl
QnVpbGRlckNvbnRleHRfcmVnaXN0ZXIoVkFMVUUgbW9kdWxlKTsKLU1lc3NhZ2VCdWlsZGVyQ29u
dGV4dCogcnVieV90b19NZXNzYWdlQnVpbGRlckNvbnRleHQoVkFMVUUgdmFsdWUpOwotVkFMVUUg
TWVzc2FnZUJ1aWxkZXJDb250ZXh0X2luaXRpYWxpemUoVkFMVUUgX3NlbGYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRSBkZXNjcmlwdG9yLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUUgYnVpbGRlcik7Ci1WQUxVRSBNZXNz
YWdlQnVpbGRlckNvbnRleHRfb3B0aW9uYWwoaW50IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBf
c2VsZik7Ci1WQUxVRSBNZXNzYWdlQnVpbGRlckNvbnRleHRfcmVxdWlyZWQoaW50IGFyZ2MsIFZB
TFVFKiBhcmd2LCBWQUxVRSBfc2VsZik7Ci1WQUxVRSBNZXNzYWdlQnVpbGRlckNvbnRleHRfcmVw
ZWF0ZWQoaW50IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBfc2VsZik7Ci1WQUxVRSBNZXNzYWdl
QnVpbGRlckNvbnRleHRfbWFwKGludCBhcmdjLCBWQUxVRSogYXJndiwgVkFMVUUgX3NlbGYpOwot
VkFMVUUgTWVzc2FnZUJ1aWxkZXJDb250ZXh0X29uZW9mKFZBTFVFIF9zZWxmLCBWQUxVRSBuYW1l
KTsKLQotdm9pZCBPbmVvZkJ1aWxkZXJDb250ZXh0X21hcmsodm9pZCogX3NlbGYpOwotdm9pZCBP
bmVvZkJ1aWxkZXJDb250ZXh0X2ZyZWUodm9pZCogX3NlbGYpOwotVkFMVUUgT25lb2ZCdWlsZGVy
Q29udGV4dF9hbGxvYyhWQUxVRSBrbGFzcyk7Ci12b2lkIE9uZW9mQnVpbGRlckNvbnRleHRfcmVn
aXN0ZXIoVkFMVUUgbW9kdWxlKTsKLU9uZW9mQnVpbGRlckNvbnRleHQqIHJ1YnlfdG9fT25lb2ZC
dWlsZGVyQ29udGV4dChWQUxVRSB2YWx1ZSk7Ci1WQUxVRSBPbmVvZkJ1aWxkZXJDb250ZXh0X2lu
aXRpYWxpemUoVkFMVUUgX3NlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMVUUgZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxVRSBidWlsZGVyKTsKLVZBTFVFIE9uZW9mQnVpbGRlckNvbnRleHRfb3B0aW9uYWwoaW50
IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBfc2VsZik7Ci0KLXZvaWQgRW51bUJ1aWxkZXJDb250
ZXh0X21hcmsodm9pZCogX3NlbGYpOwotdm9pZCBFbnVtQnVpbGRlckNvbnRleHRfZnJlZSh2b2lk
KiBfc2VsZik7Ci1WQUxVRSBFbnVtQnVpbGRlckNvbnRleHRfYWxsb2MoVkFMVUUga2xhc3MpOwot
dm9pZCBFbnVtQnVpbGRlckNvbnRleHRfcmVnaXN0ZXIoVkFMVUUgbW9kdWxlKTsKLUVudW1CdWls
ZGVyQ29udGV4dCogcnVieV90b19FbnVtQnVpbGRlckNvbnRleHQoVkFMVUUgdmFsdWUpOwotVkFM
VUUgRW51bUJ1aWxkZXJDb250ZXh0X2luaXRpYWxpemUoVkFMVUUgX3NlbGYsIFZBTFVFIGVudW1k
ZXNjKTsKLVZBTFVFIEVudW1CdWlsZGVyQ29udGV4dF92YWx1ZShWQUxVRSBfc2VsZiwgVkFMVUUg
bmFtZSwgVkFMVUUgbnVtYmVyKTsKLQotdm9pZCBCdWlsZGVyX21hcmsodm9pZCogX3NlbGYpOwot
dm9pZCBCdWlsZGVyX2ZyZWUodm9pZCogX3NlbGYpOwotVkFMVUUgQnVpbGRlcl9hbGxvYyhWQUxV
RSBrbGFzcyk7Ci12b2lkIEJ1aWxkZXJfcmVnaXN0ZXIoVkFMVUUgbW9kdWxlKTsKLUJ1aWxkZXIq
IHJ1YnlfdG9fQnVpbGRlcihWQUxVRSB2YWx1ZSk7Ci1WQUxVRSBCdWlsZGVyX2FkZF9tZXNzYWdl
KFZBTFVFIF9zZWxmLCBWQUxVRSBuYW1lKTsKLVZBTFVFIEJ1aWxkZXJfYWRkX2VudW0oVkFMVUUg
X3NlbGYsIFZBTFVFIG5hbWUpOwotVkFMVUUgQnVpbGRlcl9maW5hbGl6ZV90b19wb29sKFZBTFVF
IF9zZWxmLCBWQUxVRSBwb29sX3JiKTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE5h
dGl2ZSBzbG90IHN0b3JhZ2UgYWJzdHJhY3Rpb24uCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0jZGVmaW5lIE5BVElWRV9TTE9UX01BWF9TSVpFIHNpemVvZih1aW50NjRfdCkKLQotc2l6ZV90
IG5hdGl2ZV9zbG90X3NpemUodXBiX2ZpZWxkdHlwZV90IHR5cGUpOwotdm9pZCBuYXRpdmVfc2xv
dF9zZXQodXBiX2ZpZWxkdHlwZV90IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBWQUxVRSB0
eXBlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCogbWVtb3J5LAotICAgICAgICAg
ICAgICAgICAgICAgVkFMVUUgdmFsdWUpOwotLy8gQXRvbWljYWxseSAod2l0aCByZXNwZWN0IHRv
IFJ1YnkgVk0gY2FsbHMpIGVpdGhlciB1cGRhdGUgdGhlIHZhbHVlIGFuZCBzZXQgYQotLy8gb25l
b2YgY2FzZSwgb3IgZG8gbmVpdGhlci4gSWYgfGNhc2VfbWVtb3J5fCBpcyBudWxsLCB0aGVuIG5v
IGNhc2UgdmFsdWUgaXMKLS8vIHNldC4KLXZvaWQgbmF0aXZlX3Nsb3Rfc2V0X3ZhbHVlX2FuZF9j
YXNlKHVwYl9maWVsZHR5cGVfdCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMVUUgdHlwZV9jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQqIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZB
TFVFIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qq
IGNhc2VfbWVtb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgY2FzZV9udW1iZXIpOwotVkFMVUUgbmF0aXZlX3Nsb3RfZ2V0KHVwYl9maWVsZHR5cGVfdCB0
eXBlLAotICAgICAgICAgICAgICAgICAgICAgIFZBTFVFIHR5cGVfY2xhc3MsCi0gICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCogbWVtb3J5KTsKLXZvaWQgbmF0aXZlX3Nsb3RfaW5pdCh1
cGJfZmllbGR0eXBlX3QgdHlwZSwgdm9pZCogbWVtb3J5KTsKLXZvaWQgbmF0aXZlX3Nsb3RfbWFy
ayh1cGJfZmllbGR0eXBlX3QgdHlwZSwgdm9pZCogbWVtb3J5KTsKLXZvaWQgbmF0aXZlX3Nsb3Rf
ZHVwKHVwYl9maWVsZHR5cGVfdCB0eXBlLCB2b2lkKiB0bywgdm9pZCogZnJvbSk7Ci12b2lkIG5h
dGl2ZV9zbG90X2RlZXBfY29weSh1cGJfZmllbGR0eXBlX3QgdHlwZSwgdm9pZCogdG8sIHZvaWQq
IGZyb20pOwotYm9vbCBuYXRpdmVfc2xvdF9lcSh1cGJfZmllbGR0eXBlX3QgdHlwZSwgdm9pZCog
bWVtMSwgdm9pZCogbWVtMik7Ci0KLXZvaWQgbmF0aXZlX3Nsb3RfdmFsaWRhdGVfc3RyaW5nX2Vu
Y29kaW5nKHVwYl9maWVsZHR5cGVfdCB0eXBlLCBWQUxVRSB2YWx1ZSk7Ci12b2lkIG5hdGl2ZV9z
bG90X2NoZWNrX2ludF9yYW5nZV9wcmVjaXNpb24odXBiX2ZpZWxkdHlwZV90IHR5cGUsIFZBTFVF
IHZhbHVlKTsKLQotZXh0ZXJuIHJiX2VuY29kaW5nKiBrUnVieVN0cmluZ1V0ZjhFbmNvZGluZzsK
LWV4dGVybiByYl9lbmNvZGluZyoga1J1YnlTdHJpbmdBU0NJSUVuY29kaW5nOwotZXh0ZXJuIHJi
X2VuY29kaW5nKiBrUnVieVN0cmluZzhiaXRFbmNvZGluZzsKLQotVkFMVUUgZmllbGRfdHlwZV9j
bGFzcyhjb25zdCB1cGJfZmllbGRkZWYqIGZpZWxkKTsKLQotI2RlZmluZSBNQVBfS0VZX0ZJRUxE
IDEKLSNkZWZpbmUgTUFQX1ZBTFVFX0ZJRUxEIDIKLQotLy8gT25lb2YgY2FzZSBzbG90IHZhbHVl
IHRvIGluZGljYXRlIHRoYXQgbm8gb25lb2YgY2FzZSBpcyBzZXQuIFRoZSB2YWx1ZSBgMGAgaXMK
LS8vIHNhZmUgYmVjYXVzZSBmaWVsZCBudW1iZXJzIGFyZSB1c2VkIGFzIGNhc2UgaWRlbnRpZmll
cnMsIGFuZCBubyBmaWVsZCBjYW4KLS8vIGhhdmUgYSBudW1iZXIgb2YgMC4KLSNkZWZpbmUgT05F
T0ZfQ0FTRV9OT05FIDAKLQotLy8gVGhlc2Ugb3BlcmF0ZSBvbiBhIG1hcCBmaWVsZCAoaS5lLiwg
YSByZXBlYXRlZCBmaWVsZCBvZiBzdWJtZXNzYWdlcyB3aG9zZQotLy8gc3VibWVzc2FnZSB0eXBl
IGlzIGEgbWFwLWVudHJ5IG1zZ2RlZikuCi1ib29sIGlzX21hcF9maWVsZChjb25zdCB1cGJfZmll
bGRkZWYqIGZpZWxkKTsKLWNvbnN0IHVwYl9maWVsZGRlZiogbWFwX2ZpZWxkX2tleShjb25zdCB1
cGJfZmllbGRkZWYqIGZpZWxkKTsKLWNvbnN0IHVwYl9maWVsZGRlZiogbWFwX2ZpZWxkX3ZhbHVl
KGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQpOwotCi0vLyBUaGVzZSBvcGVyYXRlIG9uIGEgbWFw
LWVudHJ5IG1zZ2RlZi4KLWNvbnN0IHVwYl9maWVsZGRlZiogbWFwX2VudHJ5X2tleShjb25zdCB1
cGJfbXNnZGVmKiBtc2dkZWYpOwotY29uc3QgdXBiX2ZpZWxkZGVmKiBtYXBfZW50cnlfdmFsdWUo
Y29uc3QgdXBiX21zZ2RlZiogbXNnZGVmKTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFJlcGVhdGVkIGZpZWxkIGNvbnRhaW5lciB0eXBlLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotdHlwZWRlZiBzdHJ1Y3QgewotICB1cGJfZmllbGR0eXBlX3QgZmllbGRfdHlwZTsKLSAgVkFM
VUUgZmllbGRfdHlwZV9jbGFzczsKLSAgdm9pZCogZWxlbWVudHM7Ci0gIGludCBzaXplOwotICBp
bnQgY2FwYWNpdHk7Ci19IFJlcGVhdGVkRmllbGQ7Ci0KLXZvaWQgUmVwZWF0ZWRGaWVsZF9tYXJr
KHZvaWQqIHNlbGYpOwotdm9pZCBSZXBlYXRlZEZpZWxkX2ZyZWUodm9pZCogc2VsZik7Ci1WQUxV
RSBSZXBlYXRlZEZpZWxkX2FsbG9jKFZBTFVFIGtsYXNzKTsKLVZBTFVFIFJlcGVhdGVkRmllbGRf
aW5pdChpbnQgYXJnYywgVkFMVUUqIGFyZ3YsIFZBTFVFIHNlbGYpOwotdm9pZCBSZXBlYXRlZEZp
ZWxkX3JlZ2lzdGVyKFZBTFVFIG1vZHVsZSk7Ci0KLWV4dGVybiBjb25zdCByYl9kYXRhX3R5cGVf
dCBSZXBlYXRlZEZpZWxkX3R5cGU7Ci1leHRlcm4gVkFMVUUgY1JlcGVhdGVkRmllbGQ7Ci0KLVJl
cGVhdGVkRmllbGQqIHJ1YnlfdG9fUmVwZWF0ZWRGaWVsZChWQUxVRSB2YWx1ZSk7Ci0KLVZBTFVF
IFJlcGVhdGVkRmllbGRfZWFjaChWQUxVRSBfc2VsZik7Ci1WQUxVRSBSZXBlYXRlZEZpZWxkX2lu
ZGV4KGludCBhcmdjLCBWQUxVRSogYXJndiwgVkFMVUUgX3NlbGYpOwotdm9pZCogUmVwZWF0ZWRG
aWVsZF9pbmRleF9uYXRpdmUoVkFMVUUgX3NlbGYsIGludCBpbmRleCk7Ci1WQUxVRSBSZXBlYXRl
ZEZpZWxkX2luZGV4X3NldChWQUxVRSBfc2VsZiwgVkFMVUUgX2luZGV4LCBWQUxVRSB2YWwpOwot
dm9pZCBSZXBlYXRlZEZpZWxkX3Jlc2VydmUoUmVwZWF0ZWRGaWVsZCogc2VsZiwgaW50IG5ld19z
aXplKTsKLVZBTFVFIFJlcGVhdGVkRmllbGRfcHVzaChWQUxVRSBfc2VsZiwgVkFMVUUgdmFsKTsK
LXZvaWQgUmVwZWF0ZWRGaWVsZF9wdXNoX25hdGl2ZShWQUxVRSBfc2VsZiwgdm9pZCogZGF0YSk7
Ci1WQUxVRSBSZXBlYXRlZEZpZWxkX3BvcF9vbmUoVkFMVUUgX3NlbGYpOwotVkFMVUUgUmVwZWF0
ZWRGaWVsZF9pbnNlcnQoaW50IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBfc2VsZik7Ci1WQUxV
RSBSZXBlYXRlZEZpZWxkX3JlcGxhY2UoVkFMVUUgX3NlbGYsIFZBTFVFIGxpc3QpOwotVkFMVUUg
UmVwZWF0ZWRGaWVsZF9jbGVhcihWQUxVRSBfc2VsZik7Ci1WQUxVRSBSZXBlYXRlZEZpZWxkX2xl
bmd0aChWQUxVRSBfc2VsZik7Ci1WQUxVRSBSZXBlYXRlZEZpZWxkX2R1cChWQUxVRSBfc2VsZik7
Ci1WQUxVRSBSZXBlYXRlZEZpZWxkX2RlZXBfY29weShWQUxVRSBfc2VsZik7Ci1WQUxVRSBSZXBl
YXRlZEZpZWxkX3RvX2FyeShWQUxVRSBfc2VsZik7Ci1WQUxVRSBSZXBlYXRlZEZpZWxkX2VxKFZB
TFVFIF9zZWxmLCBWQUxVRSBfb3RoZXIpOwotVkFMVUUgUmVwZWF0ZWRGaWVsZF9oYXNoKFZBTFVF
IF9zZWxmKTsKLVZBTFVFIFJlcGVhdGVkRmllbGRfaW5zcGVjdChWQUxVRSBfc2VsZik7Ci1WQUxV
RSBSZXBlYXRlZEZpZWxkX3BsdXMoVkFMVUUgX3NlbGYsIFZBTFVFIGxpc3QpOwotCi0vLyBEZWZp
bmVkIGluIHJlcGVhdGVkX2ZpZWxkLmM7IGFsc28gdXNlZCBieSBNYXAuCi12b2lkIHZhbGlkYXRl
X3R5cGVfY2xhc3ModXBiX2ZpZWxkdHlwZV90IHR5cGUsIFZBTFVFIGtsYXNzKTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1hcCBjb250YWluZXIgdHlwZS4KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdXBiX2ZpZWxkdHlwZV90IGtleV90eXBl
OwotICB1cGJfZmllbGR0eXBlX3QgdmFsdWVfdHlwZTsKLSAgVkFMVUUgdmFsdWVfdHlwZV9jbGFz
czsKLSAgdXBiX3N0cnRhYmxlIHRhYmxlOwotfSBNYXA7Ci0KLXZvaWQgTWFwX21hcmsodm9pZCog
c2VsZik7Ci12b2lkIE1hcF9mcmVlKHZvaWQqIHNlbGYpOwotVkFMVUUgTWFwX2FsbG9jKFZBTFVF
IGtsYXNzKTsKLVZBTFVFIE1hcF9pbml0KGludCBhcmdjLCBWQUxVRSogYXJndiwgVkFMVUUgc2Vs
Zik7Ci12b2lkIE1hcF9yZWdpc3RlcihWQUxVRSBtb2R1bGUpOwotCi1leHRlcm4gY29uc3QgcmJf
ZGF0YV90eXBlX3QgTWFwX3R5cGU7Ci1leHRlcm4gVkFMVUUgY01hcDsKLQotTWFwKiBydWJ5X3Rv
X01hcChWQUxVRSB2YWx1ZSk7Ci0KLVZBTFVFIE1hcF9lYWNoKFZBTFVFIF9zZWxmKTsKLVZBTFVF
IE1hcF9rZXlzKFZBTFVFIF9zZWxmKTsKLVZBTFVFIE1hcF92YWx1ZXMoVkFMVUUgX3NlbGYpOwot
VkFMVUUgTWFwX2luZGV4KFZBTFVFIF9zZWxmLCBWQUxVRSBrZXkpOwotVkFMVUUgTWFwX2luZGV4
X3NldChWQUxVRSBfc2VsZiwgVkFMVUUga2V5LCBWQUxVRSB2YWx1ZSk7Ci1WQUxVRSBNYXBfaGFz
X2tleShWQUxVRSBfc2VsZiwgVkFMVUUga2V5KTsKLVZBTFVFIE1hcF9kZWxldGUoVkFMVUUgX3Nl
bGYsIFZBTFVFIGtleSk7Ci1WQUxVRSBNYXBfY2xlYXIoVkFMVUUgX3NlbGYpOwotVkFMVUUgTWFw
X2xlbmd0aChWQUxVRSBfc2VsZik7Ci1WQUxVRSBNYXBfZHVwKFZBTFVFIF9zZWxmKTsKLVZBTFVF
IE1hcF9kZWVwX2NvcHkoVkFMVUUgX3NlbGYpOwotVkFMVUUgTWFwX2VxKFZBTFVFIF9zZWxmLCBW
QUxVRSBfb3RoZXIpOwotVkFMVUUgTWFwX2hhc2goVkFMVUUgX3NlbGYpOwotVkFMVUUgTWFwX2lu
c3BlY3QoVkFMVUUgX3NlbGYpOwotVkFMVUUgTWFwX21lcmdlKFZBTFVFIF9zZWxmLCBWQUxVRSBo
YXNobWFwKTsKLVZBTFVFIE1hcF9tZXJnZV9pbnRvX3NlbGYoVkFMVUUgX3NlbGYsIFZBTFVFIGhh
c2htYXApOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIE1hcCogc2VsZjsKLSAgdXBiX3N0cnRhYmxl
X2l0ZXIgaXQ7Ci19IE1hcF9pdGVyOwotCi12b2lkIE1hcF9iZWdpbihWQUxVRSBfc2VsZiwgTWFw
X2l0ZXIqIGl0ZXIpOwotdm9pZCBNYXBfbmV4dChNYXBfaXRlciogaXRlcik7Ci1ib29sIE1hcF9k
b25lKE1hcF9pdGVyKiBpdGVyKTsKLVZBTFVFIE1hcF9pdGVyX2tleShNYXBfaXRlciogaXRlcik7
Ci1WQUxVRSBNYXBfaXRlcl92YWx1ZShNYXBfaXRlciogaXRlcik7Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBNZXNzYWdlIGxheW91dCAvIHN0b3JhZ2UuCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0jZGVmaW5lIE1FU1NBR0VfRklFTERfTk9fQ0FTRSAoKHNpemVfdCktMSkKLQot
c3RydWN0IE1lc3NhZ2VGaWVsZCB7Ci0gIHNpemVfdCBvZmZzZXQ7Ci0gIHNpemVfdCBjYXNlX29m
ZnNldDsgIC8vIGZvciBvbmVvZnMsIGEgdWludDMyLiBFbHNlLCBNRVNTQUdFX0ZJRUxEX05PX0NB
U0UuCi19OwotCi1zdHJ1Y3QgTWVzc2FnZUxheW91dCB7Ci0gIGNvbnN0IHVwYl9tc2dkZWYqIG1z
Z2RlZjsKLSAgTWVzc2FnZUZpZWxkKiBmaWVsZHM7Ci0gIHNpemVfdCBzaXplOwotfTsKLQotTWVz
c2FnZUxheW91dCogY3JlYXRlX2xheW91dChjb25zdCB1cGJfbXNnZGVmKiBtc2dkZWYpOwotdm9p
ZCBmcmVlX2xheW91dChNZXNzYWdlTGF5b3V0KiBsYXlvdXQpOwotVkFMVUUgbGF5b3V0X2dldChN
ZXNzYWdlTGF5b3V0KiBsYXlvdXQsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIHN0b3Jh
Z2UsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQpOwotdm9pZCBs
YXlvdXRfc2V0KE1lc3NhZ2VMYXlvdXQqIGxheW91dCwKLSAgICAgICAgICAgICAgICB2b2lkKiBz
dG9yYWdlLAotICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQsCi0gICAg
ICAgICAgICAgICAgVkFMVUUgdmFsKTsKLXZvaWQgbGF5b3V0X2luaXQoTWVzc2FnZUxheW91dCog
bGF5b3V0LCB2b2lkKiBzdG9yYWdlKTsKLXZvaWQgbGF5b3V0X21hcmsoTWVzc2FnZUxheW91dCog
bGF5b3V0LCB2b2lkKiBzdG9yYWdlKTsKLXZvaWQgbGF5b3V0X2R1cChNZXNzYWdlTGF5b3V0KiBs
YXlvdXQsIHZvaWQqIHRvLCB2b2lkKiBmcm9tKTsKLXZvaWQgbGF5b3V0X2RlZXBfY29weShNZXNz
YWdlTGF5b3V0KiBsYXlvdXQsIHZvaWQqIHRvLCB2b2lkKiBmcm9tKTsKLVZBTFVFIGxheW91dF9l
cShNZXNzYWdlTGF5b3V0KiBsYXlvdXQsIHZvaWQqIG1zZzEsIHZvaWQqIG1zZzIpOwotVkFMVUUg
bGF5b3V0X2hhc2goTWVzc2FnZUxheW91dCogbGF5b3V0LCB2b2lkKiBzdG9yYWdlKTsKLVZBTFVF
IGxheW91dF9pbnNwZWN0KE1lc3NhZ2VMYXlvdXQqIGxheW91dCwgdm9pZCogc3RvcmFnZSk7Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNZXNzYWdlIGNsYXNzIGNyZWF0aW9uLgotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RydWN0IE1lc3NhZ2VIZWFkZXIgewotICBEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yOyAgLy8ga2VwdCBhbGl2ZSBieSBzZWxmLmNsYXNzLmRlc2NyaXB0b3Ig
cmVmZXJlbmNlLgotICAvLyBEYXRhIGNvbWVzIGFmdGVyIHRoaXMuCi19OwotCi1leHRlcm4gcmJf
ZGF0YV90eXBlX3QgTWVzc2FnZV90eXBlOwotCi1WQUxVRSBidWlsZF9jbGFzc19mcm9tX2Rlc2Ny
aXB0b3IoRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci12b2lkKiBNZXNzYWdlX2RhdGEodm9pZCog
bXNnKTsKLXZvaWQgTWVzc2FnZV9tYXJrKHZvaWQqIHNlbGYpOwotdm9pZCBNZXNzYWdlX2ZyZWUo
dm9pZCogc2VsZik7Ci1WQUxVRSBNZXNzYWdlX2FsbG9jKFZBTFVFIGtsYXNzKTsKLVZBTFVFIE1l
c3NhZ2VfbWV0aG9kX21pc3NpbmcoaW50IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBfc2VsZik7
Ci1WQUxVRSBNZXNzYWdlX2luaXRpYWxpemUoaW50IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBf
c2VsZik7Ci1WQUxVRSBNZXNzYWdlX2R1cChWQUxVRSBfc2VsZik7Ci1WQUxVRSBNZXNzYWdlX2Rl
ZXBfY29weShWQUxVRSBfc2VsZik7Ci1WQUxVRSBNZXNzYWdlX2VxKFZBTFVFIF9zZWxmLCBWQUxV
RSBfb3RoZXIpOwotVkFMVUUgTWVzc2FnZV9oYXNoKFZBTFVFIF9zZWxmKTsKLVZBTFVFIE1lc3Nh
Z2VfaW5zcGVjdChWQUxVRSBfc2VsZik7Ci1WQUxVRSBNZXNzYWdlX2luZGV4KFZBTFVFIF9zZWxm
LCBWQUxVRSBmaWVsZF9uYW1lKTsKLVZBTFVFIE1lc3NhZ2VfaW5kZXhfc2V0KFZBTFVFIF9zZWxm
LCBWQUxVRSBmaWVsZF9uYW1lLCBWQUxVRSB2YWx1ZSk7Ci1WQUxVRSBNZXNzYWdlX2Rlc2NyaXB0
b3IoVkFMVUUga2xhc3MpOwotVkFMVUUgTWVzc2FnZV9kZWNvZGUoVkFMVUUga2xhc3MsIFZBTFVF
IGRhdGEpOwotVkFMVUUgTWVzc2FnZV9lbmNvZGUoVkFMVUUga2xhc3MsIFZBTFVFIG1zZ19yYik7
Ci1WQUxVRSBNZXNzYWdlX2RlY29kZV9qc29uKFZBTFVFIGtsYXNzLCBWQUxVRSBkYXRhKTsKLVZB
TFVFIE1lc3NhZ2VfZW5jb2RlX2pzb24oaW50IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBrbGFz
cyk7Ci0KLVZBTFVFIEdvb2dsZV9Qcm90b2J1Zl9kZWVwX2NvcHkoVkFMVUUgc2VsZiwgVkFMVUUg
b2JqKTsKLQotVkFMVUUgYnVpbGRfbW9kdWxlX2Zyb21fZW51bWRlc2MoRW51bURlc2NyaXB0b3Iq
IGVudW1kZWYpOwotVkFMVUUgZW51bV9sb29rdXAoVkFMVUUgc2VsZiwgVkFMVUUgbnVtYmVyKTsK
LVZBTFVFIGVudW1fcmVzb2x2ZShWQUxVRSBzZWxmLCBWQUxVRSBzeW0pOwotCi1jb25zdCB1cGJf
cGJkZWNvZGVybWV0aG9kICpuZXdfZmlsbG1zZ19kZWNvZGVybWV0aG9kKAotICAgIERlc2NyaXB0
b3IqIGRlc2NyaXB0b3IsIGNvbnN0IHZvaWQgKm93bmVyKTsKLQotLy8gTWF4aW11bSBkZXB0aCBh
bGxvd2VkIGR1cmluZyBlbmNvZGluZywgdG8gYXZvaWQgc3RhY2sgb3ZlcmZsb3dzIGR1ZSB0bwot
Ly8gY3ljbGVzLgotI2RlZmluZSBFTkNPREVfTUFYX05FU1RJTkcgNjMKLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vIEdsb2JhbCBtYXAgZnJvbSB1cGIge21zZyxlbnVtfWRlZnMgdG8gd3Jh
cHBlciBEZXNjcmlwdG9yL0VudW1EZXNjcmlwdG9yCi0vLyBpbnN0YW5jZXMuCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotdm9pZCBhZGRfZGVmX29iaihjb25zdCB2b2lkKiBkZWYsIFZBTFVFIHZh
bHVlKTsKLVZBTFVFIGdldF9kZWZfb2JqKGNvbnN0IHZvaWQqIGRlZik7Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBVdGlsaXRpZXMuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12
b2lkIGNoZWNrX3VwYl9zdGF0dXMoY29uc3QgdXBiX3N0YXR1cyogc3RhdHVzLCBjb25zdCBjaGFy
KiBtc2cpOwotCi0jZGVmaW5lIENIRUNLX1VQQihjb2RlLCBtc2cpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdXBiX3N0YXR1cyBzdGF0dXMg
PSBVUEJfU1RBVFVTX0lOSVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2hlY2tfdXBiX3N0YXR1cygmc3RhdHVzLCBt
c2cpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxl
ICgwKQotCi1leHRlcm4gSUQgZGVzY3JpcHRvcl9pbnN0YW5jZXZhcl9pbnRlcm5lZDsKLQotI2Vu
ZGlmICAvLyBfX0dPT0dMRV9QUk9UT0JVRl9SVUJZX1BST1RPQlVGX0hfXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9y
dWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy9yZXBlYXRlZF9maWVsZC5jIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4dC9nb29n
bGUvcHJvdG9idWZfYy9yZXBlYXRlZF9maWVsZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4M2FmYmM5MTVkYjQ2YzM5NjI2ZTc5YTNkMjk1YTcwZDlkYTZkZjU0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9leHQvZ29vZ2xlL3Byb3Rv
YnVmX2MvcmVwZWF0ZWRfZmllbGQuYworKysgL2Rldi9udWxsCkBAIC0xLDY1MSArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgInByb3RvYnVmLmgi
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZXBlYXRlZCBmaWVsZCBjb250YWluZXIg
dHlwZS4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNvbnN0IHJiX2RhdGFfdHlwZV90IFJl
cGVhdGVkRmllbGRfdHlwZSA9IHsKLSAgIkdvb2dsZTo6UHJvdG9idWY6OlJlcGVhdGVkRmllbGQi
LAotICB7IFJlcGVhdGVkRmllbGRfbWFyaywgUmVwZWF0ZWRGaWVsZF9mcmVlLCBOVUxMIH0sCi19
OwotCi1WQUxVRSBjUmVwZWF0ZWRGaWVsZDsKLQotUmVwZWF0ZWRGaWVsZCogcnVieV90b19SZXBl
YXRlZEZpZWxkKFZBTFVFIF9zZWxmKSB7Ci0gIFJlcGVhdGVkRmllbGQqIHNlbGY7Ci0gIFR5cGVk
RGF0YV9HZXRfU3RydWN0KF9zZWxmLCBSZXBlYXRlZEZpZWxkLCAmUmVwZWF0ZWRGaWVsZF90eXBl
LCBzZWxmKTsKLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLXZvaWQqIFJlcGVhdGVkRmllbGRfbWVtb3J5
YXQoUmVwZWF0ZWRGaWVsZCogc2VsZiwgaW50IGluZGV4LCBpbnQgZWxlbWVudF9zaXplKSB7Ci0g
IHJldHVybiAoKHVpbnQ4X3QgKilzZWxmLT5lbGVtZW50cykgKyBpbmRleCAqIGVsZW1lbnRfc2l6
ZTsKLX0KLQotc3RhdGljIGludCBpbmRleF9wb3NpdGlvbihWQUxVRSBfaW5kZXgsIFJlcGVhdGVk
RmllbGQqIHJlcGVhdGVkX2ZpZWxkKSB7Ci0gIGludCBpbmRleCA9IE5VTTJJTlQoX2luZGV4KTsK
LSAgaWYgKGluZGV4IDwgMCAmJiByZXBlYXRlZF9maWVsZC0+c2l6ZSA+IDApIHsKLSAgICBpbmRl
eCA9IHJlcGVhdGVkX2ZpZWxkLT5zaXplICsgaW5kZXg7Ci0gIH0KLSAgcmV0dXJuIGluZGV4Owot
fQotCi1WQUxVRSBSZXBlYXRlZEZpZWxkX3N1YmFycmF5KFZBTFVFIF9zZWxmLCBsb25nIGJlZywg
bG9uZyBsZW4pIHsKLSAgUmVwZWF0ZWRGaWVsZCogc2VsZiA9IHJ1YnlfdG9fUmVwZWF0ZWRGaWVs
ZChfc2VsZik7Ci0gIGludCBlbGVtZW50X3NpemUgPSBuYXRpdmVfc2xvdF9zaXplKHNlbGYtPmZp
ZWxkX3R5cGUpOwotICB1cGJfZmllbGR0eXBlX3QgZmllbGRfdHlwZSA9IHNlbGYtPmZpZWxkX3R5
cGU7Ci0gIFZBTFVFIGZpZWxkX3R5cGVfY2xhc3MgPSBzZWxmLT5maWVsZF90eXBlX2NsYXNzOwot
Ci0gIHNpemVfdCBvZmYgPSBiZWcgKiBlbGVtZW50X3NpemU7Ci0gIFZBTFVFIGFyeSA9IHJiX2Fy
eV9uZXcyKGxlbik7Ci0gIGZvciAoaW50IGkgPSBiZWc7IGkgPCBiZWcgKyBsZW47IGkrKywgb2Zm
ICs9IGVsZW1lbnRfc2l6ZSkgewotICAgIHZvaWQqIG1lbSA9ICgodWludDhfdCAqKXNlbGYtPmVs
ZW1lbnRzKSArIG9mZjsKLSAgICBWQUxVRSBlbGVtID0gbmF0aXZlX3Nsb3RfZ2V0KGZpZWxkX3R5
cGUsIGZpZWxkX3R5cGVfY2xhc3MsIG1lbSk7Ci0gICAgcmJfYXJ5X3B1c2goYXJ5LCBlbGVtKTsK
LSAgfQotICByZXR1cm4gYXJ5OwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgUmVwZWF0
ZWRGaWVsZC5lYWNoKCZibG9jaykKLSAqCi0gKiBJbnZva2VzIHRoZSBibG9jayBvbmNlIGZvciBl
YWNoIGVsZW1lbnQgb2YgdGhlIHJlcGVhdGVkIGZpZWxkLiBSZXBlYXRlZEZpZWxkCi0gKiBhbHNv
IGluY2x1ZGVzIEVudW1lcmFibGU7IGNvbWJpbmVkIHdpdGggdGhpcyBtZXRob2QsIHRoZSByZXBl
YXRlZCBmaWVsZCB0aHVzCi0gKiBhY3RzIGxpa2UgYW4gb3JkaW5hcnkgUnVieSBzZXF1ZW5jZS4K
LSAqLwotVkFMVUUgUmVwZWF0ZWRGaWVsZF9lYWNoKFZBTFVFIF9zZWxmKSB7Ci0gIFJlcGVhdGVk
RmllbGQqIHNlbGYgPSBydWJ5X3RvX1JlcGVhdGVkRmllbGQoX3NlbGYpOwotICB1cGJfZmllbGR0
eXBlX3QgZmllbGRfdHlwZSA9IHNlbGYtPmZpZWxkX3R5cGU7Ci0gIFZBTFVFIGZpZWxkX3R5cGVf
Y2xhc3MgPSBzZWxmLT5maWVsZF90eXBlX2NsYXNzOwotICBpbnQgZWxlbWVudF9zaXplID0gbmF0
aXZlX3Nsb3Rfc2l6ZShmaWVsZF90eXBlKTsKLQotICBzaXplX3Qgb2ZmID0gMDsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzZWxmLT5zaXplOyBpKyssIG9mZiArPSBlbGVtZW50X3NpemUpIHsKLSAg
ICB2b2lkKiBtZW1vcnkgPSAodm9pZCAqKSAoKCh1aW50OF90ICopc2VsZi0+ZWxlbWVudHMpICsg
b2ZmKTsKLSAgICBWQUxVRSB2YWwgPSBuYXRpdmVfc2xvdF9nZXQoZmllbGRfdHlwZSwgZmllbGRf
dHlwZV9jbGFzcywgbWVtb3J5KTsKLSAgICByYl95aWVsZCh2YWwpOwotICB9Ci0gIHJldHVybiBf
c2VsZjsKLX0KLQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgUmVwZWF0ZWRGaWVsZC5bXShp
bmRleCkgPT4gdmFsdWUKLSAqCi0gKiBBY2Nlc3NlcyB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4g
aW5kZXguIFJldHVybnMgbmlsIG9uIG91dC1vZi1ib3VuZHMKLSAqLwotVkFMVUUgUmVwZWF0ZWRG
aWVsZF9pbmRleChpbnQgYXJnYywgVkFMVUUqIGFyZ3YsIFZBTFVFIF9zZWxmKSB7Ci0gIFJlcGVh
dGVkRmllbGQqIHNlbGYgPSBydWJ5X3RvX1JlcGVhdGVkRmllbGQoX3NlbGYpOwotICBpbnQgZWxl
bWVudF9zaXplID0gbmF0aXZlX3Nsb3Rfc2l6ZShzZWxmLT5maWVsZF90eXBlKTsKLSAgdXBiX2Zp
ZWxkdHlwZV90IGZpZWxkX3R5cGUgPSBzZWxmLT5maWVsZF90eXBlOwotICBWQUxVRSBmaWVsZF90
eXBlX2NsYXNzID0gc2VsZi0+ZmllbGRfdHlwZV9jbGFzczsKLQotICBWQUxVRSBhcmcgPSBhcmd2
WzBdOwotICBsb25nIGJlZywgbGVuOwotCi0gIGlmIChhcmdjID09IDEpewotICAgIGlmIChGSVhO
VU1fUChhcmcpKSB7Ci0gICAgICAvKiBzdGFuZGFyZCBjYXNlICovCi0gICAgICB2b2lkKiBtZW1v
cnk7Ci0gICAgICBpbnQgaW5kZXggPSBpbmRleF9wb3NpdGlvbihhcmd2WzBdLCBzZWxmKTsKLSAg
ICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc2VsZi0+c2l6ZSkgewotICAgICAgICByZXR1
cm4gUW5pbDsKLSAgICAgIH0KLSAgICAgIG1lbW9yeSA9IFJlcGVhdGVkRmllbGRfbWVtb3J5YXQo
c2VsZiwgaW5kZXgsIGVsZW1lbnRfc2l6ZSk7Ci0gICAgICByZXR1cm4gbmF0aXZlX3Nsb3RfZ2V0
KGZpZWxkX3R5cGUsIGZpZWxkX3R5cGVfY2xhc3MsIG1lbW9yeSk7Ci0gICAgfWVsc2V7Ci0gICAg
ICAvKiBjaGVjayBpZiBpZHggaXMgUmFuZ2UgKi8KLSAgICAgIHN3aXRjaCAocmJfcmFuZ2VfYmVn
X2xlbihhcmcsICZiZWcsICZsZW4sIHNlbGYtPnNpemUsIDApKSB7Ci0gICAgICAgIGNhc2UgUWZh
bHNlOgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFuaWw6Ci0gICAgICAgICAgcmV0
dXJuIFFuaWw7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmV0dXJuIFJlcGVhdGVkRmll
bGRfc3ViYXJyYXkoX3NlbGYsIGJlZywgbGVuKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLyog
YXNzdW1lIDIgYXJndW1lbnRzICovCi0gIGJlZyA9IE5VTTJMT05HKGFyZ3ZbMF0pOwotICBsZW4g
PSBOVU0yTE9ORyhhcmd2WzFdKTsKLSAgaWYgKGJlZyA8IDApIHsKLSAgICBiZWcgKz0gc2VsZi0+
c2l6ZTsKLSAgfQotICBpZiAoYmVnID49IHNlbGYtPnNpemUpIHsKLSAgICByZXR1cm4gUW5pbDsK
LSAgfQotICByZXR1cm4gUmVwZWF0ZWRGaWVsZF9zdWJhcnJheShfc2VsZiwgYmVnLCBsZW4pOwot
fQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgUmVwZWF0ZWRGaWVsZC5bXT0oaW5kZXgsIHZh
bHVlKQotICoKLSAqIFNldHMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4LiBPbiBvdXQt
b2YtYm91bmRzIGFzc2lnbm1lbnRzLCBleHRlbmRzCi0gKiB0aGUgYXJyYXkgYW5kIGZpbGxzIHRo
ZSBob2xlIChpZiBhbnkpIHdpdGggZGVmYXVsdCB2YWx1ZXMuCi0gKi8KLVZBTFVFIFJlcGVhdGVk
RmllbGRfaW5kZXhfc2V0KFZBTFVFIF9zZWxmLCBWQUxVRSBfaW5kZXgsIFZBTFVFIHZhbCkgewot
ICBSZXBlYXRlZEZpZWxkKiBzZWxmID0gcnVieV90b19SZXBlYXRlZEZpZWxkKF9zZWxmKTsKLSAg
dXBiX2ZpZWxkdHlwZV90IGZpZWxkX3R5cGUgPSBzZWxmLT5maWVsZF90eXBlOwotICBWQUxVRSBm
aWVsZF90eXBlX2NsYXNzID0gc2VsZi0+ZmllbGRfdHlwZV9jbGFzczsKLSAgaW50IGVsZW1lbnRf
c2l6ZSA9IG5hdGl2ZV9zbG90X3NpemUoZmllbGRfdHlwZSk7Ci0gIHZvaWQqIG1lbW9yeTsKLQot
ICBpbnQgaW5kZXggPSBpbmRleF9wb3NpdGlvbihfaW5kZXgsIHNlbGYpOwotICBpZiAoaW5kZXgg
PCAwIHx8IGluZGV4ID49IChJTlRfTUFYIC0gMSkpIHsKLSAgICByZXR1cm4gUW5pbDsKLSAgfQot
ICBpZiAoaW5kZXggPj0gc2VsZi0+c2l6ZSkgewotICAgIHVwYl9maWVsZHR5cGVfdCBmaWVsZF90
eXBlID0gc2VsZi0+ZmllbGRfdHlwZTsKLSAgICBpbnQgZWxlbWVudF9zaXplID0gbmF0aXZlX3Ns
b3Rfc2l6ZShmaWVsZF90eXBlKTsKLSAgICBSZXBlYXRlZEZpZWxkX3Jlc2VydmUoc2VsZiwgaW5k
ZXggKyAxKTsKLSAgICBmb3IgKGludCBpID0gc2VsZi0+c2l6ZTsgaSA8PSBpbmRleDsgaSsrKSB7
Ci0gICAgICB2b2lkKiBlbGVtID0gUmVwZWF0ZWRGaWVsZF9tZW1vcnlhdChzZWxmLCBpLCBlbGVt
ZW50X3NpemUpOwotICAgICAgbmF0aXZlX3Nsb3RfaW5pdChmaWVsZF90eXBlLCBlbGVtKTsKLSAg
ICB9Ci0gICAgc2VsZi0+c2l6ZSA9IGluZGV4ICsgMTsKLSAgfQotCi0gIG1lbW9yeSA9IFJlcGVh
dGVkRmllbGRfbWVtb3J5YXQoc2VsZiwgaW5kZXgsIGVsZW1lbnRfc2l6ZSk7Ci0gIG5hdGl2ZV9z
bG90X3NldChmaWVsZF90eXBlLCBmaWVsZF90eXBlX2NsYXNzLCBtZW1vcnksIHZhbCk7Ci0gIHJl
dHVybiBRbmlsOwotfQotCi1zdGF0aWMgaW50IGtJbml0aWFsU2l6ZSA9IDg7Ci0KLXZvaWQgUmVw
ZWF0ZWRGaWVsZF9yZXNlcnZlKFJlcGVhdGVkRmllbGQqIHNlbGYsIGludCBuZXdfc2l6ZSkgewot
ICB2b2lkKiBvbGRfZWxlbXMgPSBzZWxmLT5lbGVtZW50czsKLSAgaW50IGVsZW1fc2l6ZSA9IG5h
dGl2ZV9zbG90X3NpemUoc2VsZi0+ZmllbGRfdHlwZSk7Ci0gIGlmIChuZXdfc2l6ZSA8PSBzZWxm
LT5jYXBhY2l0eSkgewotICAgIHJldHVybjsKLSAgfQotICBpZiAoc2VsZi0+Y2FwYWNpdHkgPT0g
MCkgewotICAgIHNlbGYtPmNhcGFjaXR5ID0ga0luaXRpYWxTaXplOwotICB9Ci0gIHdoaWxlIChz
ZWxmLT5jYXBhY2l0eSA8IG5ld19zaXplKSB7Ci0gICAgc2VsZi0+Y2FwYWNpdHkgKj0gMjsKLSAg
fQotICBzZWxmLT5lbGVtZW50cyA9IEFMTE9DX04odWludDhfdCwgZWxlbV9zaXplICogc2VsZi0+
Y2FwYWNpdHkpOwotICBpZiAob2xkX2VsZW1zICE9IE5VTEwpIHsKLSAgICBtZW1jcHkoc2VsZi0+
ZWxlbWVudHMsIG9sZF9lbGVtcywgc2VsZi0+c2l6ZSAqIGVsZW1fc2l6ZSk7Ci0gICAgeGZyZWUo
b2xkX2VsZW1zKTsKLSAgfQotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgUmVwZWF0ZWRG
aWVsZC5wdXNoKHZhbHVlKQotICoKLSAqIEFkZHMgYSBuZXcgZWxlbWVudCB0byB0aGUgcmVwZWF0
ZWQgZmllbGQuCi0gKi8KLVZBTFVFIFJlcGVhdGVkRmllbGRfcHVzaChWQUxVRSBfc2VsZiwgVkFM
VUUgdmFsKSB7Ci0gIFJlcGVhdGVkRmllbGQqIHNlbGYgPSBydWJ5X3RvX1JlcGVhdGVkRmllbGQo
X3NlbGYpOwotICB1cGJfZmllbGR0eXBlX3QgZmllbGRfdHlwZSA9IHNlbGYtPmZpZWxkX3R5cGU7
Ci0gIGludCBlbGVtZW50X3NpemUgPSBuYXRpdmVfc2xvdF9zaXplKGZpZWxkX3R5cGUpOwotICB2
b2lkKiBtZW1vcnk7Ci0KLSAgUmVwZWF0ZWRGaWVsZF9yZXNlcnZlKHNlbGYsIHNlbGYtPnNpemUg
KyAxKTsKLSAgbWVtb3J5ID0gKHZvaWQgKikgKCgodWludDhfdCAqKXNlbGYtPmVsZW1lbnRzKSAr
IHNlbGYtPnNpemUgKiBlbGVtZW50X3NpemUpOwotICBuYXRpdmVfc2xvdF9zZXQoZmllbGRfdHlw
ZSwgc2VsZi0+ZmllbGRfdHlwZV9jbGFzcywgbWVtb3J5LCB2YWwpOwotICAvLyBuYXRpdmVfc2xv
dF9zZXQgbWF5IHJhaXNlIGFuIGVycm9yOyBidW1wIHNpemUgb25seSBhZnRlciBzZXQuCi0gIHNl
bGYtPnNpemUrKzsKLSAgcmV0dXJuIF9zZWxmOwotfQotCi0KLS8vIFVzZWQgYnkgcGFyc2luZyBo
YW5kbGVycy4KLXZvaWQgUmVwZWF0ZWRGaWVsZF9wdXNoX25hdGl2ZShWQUxVRSBfc2VsZiwgdm9p
ZCogZGF0YSkgewotICBSZXBlYXRlZEZpZWxkKiBzZWxmID0gcnVieV90b19SZXBlYXRlZEZpZWxk
KF9zZWxmKTsKLSAgdXBiX2ZpZWxkdHlwZV90IGZpZWxkX3R5cGUgPSBzZWxmLT5maWVsZF90eXBl
OwotICBpbnQgZWxlbWVudF9zaXplID0gbmF0aXZlX3Nsb3Rfc2l6ZShmaWVsZF90eXBlKTsKLSAg
dm9pZCogbWVtb3J5OwotCi0gIFJlcGVhdGVkRmllbGRfcmVzZXJ2ZShzZWxmLCBzZWxmLT5zaXpl
ICsgMSk7Ci0gIG1lbW9yeSA9ICh2b2lkICopICgoKHVpbnQ4X3QgKilzZWxmLT5lbGVtZW50cykg
KyBzZWxmLT5zaXplICogZWxlbWVudF9zaXplKTsKLSAgbWVtY3B5KG1lbW9yeSwgZGF0YSwgZWxl
bWVudF9zaXplKTsKLSAgc2VsZi0+c2l6ZSsrOwotfQotCi12b2lkKiBSZXBlYXRlZEZpZWxkX2lu
ZGV4X25hdGl2ZShWQUxVRSBfc2VsZiwgaW50IGluZGV4KSB7Ci0gIFJlcGVhdGVkRmllbGQqIHNl
bGYgPSBydWJ5X3RvX1JlcGVhdGVkRmllbGQoX3NlbGYpOwotICB1cGJfZmllbGR0eXBlX3QgZmll
bGRfdHlwZSA9IHNlbGYtPmZpZWxkX3R5cGU7Ci0gIGludCBlbGVtZW50X3NpemUgPSBuYXRpdmVf
c2xvdF9zaXplKGZpZWxkX3R5cGUpOwotICByZXR1cm4gUmVwZWF0ZWRGaWVsZF9tZW1vcnlhdChz
ZWxmLCBpbmRleCwgZWxlbWVudF9zaXplKTsKLX0KLQotLyoKLSAqIFByaXZhdGUgcnVieSBtZXRo
b2QsIHVzZWQgYnkgUmVwZWF0ZWRGaWVsZC5wb3AKLSAqLwotVkFMVUUgUmVwZWF0ZWRGaWVsZF9w
b3Bfb25lKFZBTFVFIF9zZWxmKSB7Ci0gIFJlcGVhdGVkRmllbGQqIHNlbGYgPSBydWJ5X3RvX1Jl
cGVhdGVkRmllbGQoX3NlbGYpOwotICB1cGJfZmllbGR0eXBlX3QgZmllbGRfdHlwZSA9IHNlbGYt
PmZpZWxkX3R5cGU7Ci0gIFZBTFVFIGZpZWxkX3R5cGVfY2xhc3MgPSBzZWxmLT5maWVsZF90eXBl
X2NsYXNzOwotICBpbnQgZWxlbWVudF9zaXplID0gbmF0aXZlX3Nsb3Rfc2l6ZShmaWVsZF90eXBl
KTsKLSAgaW50IGluZGV4OwotICB2b2lkKiBtZW1vcnk7Ci0gIFZBTFVFIHJldDsKLQotICBpZiAo
c2VsZi0+c2l6ZSA9PSAwKSB7Ci0gICAgcmV0dXJuIFFuaWw7Ci0gIH0KLSAgaW5kZXggPSBzZWxm
LT5zaXplIC0gMTsKLSAgbWVtb3J5ID0gUmVwZWF0ZWRGaWVsZF9tZW1vcnlhdChzZWxmLCBpbmRl
eCwgZWxlbWVudF9zaXplKTsKLSAgcmV0ID0gbmF0aXZlX3Nsb3RfZ2V0KGZpZWxkX3R5cGUsIGZp
ZWxkX3R5cGVfY2xhc3MsIG1lbW9yeSk7Ci0gIHNlbGYtPnNpemUtLTsKLSAgcmV0dXJuIHJldDsK
LX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIFJlcGVhdGVkRmllbGQucmVwbGFjZShsaXN0
KQotICoKLSAqIFJlcGxhY2VzIHRoZSBjb250ZW50cyBvZiB0aGUgcmVwZWF0ZWQgZmllbGQgd2l0
aCB0aGUgZ2l2ZW4gbGlzdCBvZiBlbGVtZW50cy4KLSAqLwotVkFMVUUgUmVwZWF0ZWRGaWVsZF9y
ZXBsYWNlKFZBTFVFIF9zZWxmLCBWQUxVRSBsaXN0KSB7Ci0gIFJlcGVhdGVkRmllbGQqIHNlbGYg
PSBydWJ5X3RvX1JlcGVhdGVkRmllbGQoX3NlbGYpOwotICBDaGVja19UeXBlKGxpc3QsIFRfQVJS
QVkpOwotICBzZWxmLT5zaXplID0gMDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBSQVJSQVlfTEVO
KGxpc3QpOyBpKyspIHsKLSAgICBSZXBlYXRlZEZpZWxkX3B1c2goX3NlbGYsIHJiX2FyeV9lbnRy
eShsaXN0LCBpKSk7Ci0gIH0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToK
LSAqICAgICBSZXBlYXRlZEZpZWxkLmNsZWFyCi0gKgotICogQ2xlYXJzIChyZW1vdmVzIGFsbCBl
bGVtZW50cyBmcm9tKSB0aGlzIHJlcGVhdGVkIGZpZWxkLgotICovCi1WQUxVRSBSZXBlYXRlZEZp
ZWxkX2NsZWFyKFZBTFVFIF9zZWxmKSB7Ci0gIFJlcGVhdGVkRmllbGQqIHNlbGYgPSBydWJ5X3Rv
X1JlcGVhdGVkRmllbGQoX3NlbGYpOwotICBzZWxmLT5zaXplID0gMDsKLSAgcmV0dXJuIF9zZWxm
OwotfQotCi0vKgotICogY2FsbC1zZXE6Ci0gKiAgICAgUmVwZWF0ZWRGaWVsZC5sZW5ndGgKLSAq
Ci0gKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhpcyByZXBlYXRlZCBmaWVsZC4KLSAqLwotVkFM
VUUgUmVwZWF0ZWRGaWVsZF9sZW5ndGgoVkFMVUUgX3NlbGYpIHsKLSAgUmVwZWF0ZWRGaWVsZCog
c2VsZiA9IHJ1YnlfdG9fUmVwZWF0ZWRGaWVsZChfc2VsZik7Ci0gIHJldHVybiBJTlQyTlVNKHNl
bGYtPnNpemUpOwotfQotCi1zdGF0aWMgVkFMVUUgUmVwZWF0ZWRGaWVsZF9uZXdfdGhpc190eXBl
KFZBTFVFIF9zZWxmKSB7Ci0gIFJlcGVhdGVkRmllbGQqIHNlbGYgPSBydWJ5X3RvX1JlcGVhdGVk
RmllbGQoX3NlbGYpOwotICBWQUxVRSBuZXdfcnB0ZmllbGQgPSBRbmlsOwotICBWQUxVRSBlbGVt
ZW50X3R5cGUgPSBmaWVsZHR5cGVfdG9fcnVieShzZWxmLT5maWVsZF90eXBlKTsKLSAgaWYgKHNl
bGYtPmZpZWxkX3R5cGVfY2xhc3MgIT0gUW5pbCkgewotICAgIG5ld19ycHRmaWVsZCA9IHJiX2Z1
bmNhbGwoQ0xBU1NfT0YoX3NlbGYpLCByYl9pbnRlcm4oIm5ldyIpLCAyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudF90eXBlLCBzZWxmLT5maWVsZF90eXBlX2NsYXNzKTsK
LSAgfSBlbHNlIHsKLSAgICBuZXdfcnB0ZmllbGQgPSByYl9mdW5jYWxsKENMQVNTX09GKF9zZWxm
KSwgcmJfaW50ZXJuKCJuZXciKSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnRfdHlwZSk7Ci0gIH0KLSAgcmV0dXJuIG5ld19ycHRmaWVsZDsKLX0KLQotLyoKLSAqIGNh
bGwtc2VxOgotICogICAgIFJlcGVhdGVkRmllbGQuZHVwID0+IHJlcGVhdGVkX2ZpZWxkCi0gKgot
ICogRHVwbGljYXRlcyB0aGlzIHJlcGVhdGVkIGZpZWxkIHdpdGggYSBzaGFsbG93IGNvcHkuIFJl
ZmVyZW5jZXMgdG8gYWxsCi0gKiBub24tcHJpbWl0aXZlIGVsZW1lbnQgb2JqZWN0cyAoZS5nLiwg
c3VibWVzc2FnZXMpIGFyZSBzaGFyZWQuCi0gKi8KLVZBTFVFIFJlcGVhdGVkRmllbGRfZHVwKFZB
TFVFIF9zZWxmKSB7Ci0gIFJlcGVhdGVkRmllbGQqIHNlbGYgPSBydWJ5X3RvX1JlcGVhdGVkRmll
bGQoX3NlbGYpOwotICBWQUxVRSBuZXdfcnB0ZmllbGQgPSBSZXBlYXRlZEZpZWxkX25ld190aGlz
X3R5cGUoX3NlbGYpOwotICBSZXBlYXRlZEZpZWxkKiBuZXdfcnB0ZmllbGRfc2VsZiA9IHJ1Ynlf
dG9fUmVwZWF0ZWRGaWVsZChuZXdfcnB0ZmllbGQpOwotICB1cGJfZmllbGR0eXBlX3QgZmllbGRf
dHlwZSA9IHNlbGYtPmZpZWxkX3R5cGU7Ci0gIHNpemVfdCBlbGVtX3NpemUgPSBuYXRpdmVfc2xv
dF9zaXplKGZpZWxkX3R5cGUpOwotICBzaXplX3Qgb2ZmID0gMDsKLSAgUmVwZWF0ZWRGaWVsZF9y
ZXNlcnZlKG5ld19ycHRmaWVsZF9zZWxmLCBzZWxmLT5zaXplKTsKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzZWxmLT5zaXplOyBpKyssIG9mZiArPSBlbGVtX3NpemUpIHsKLSAgICB2b2lkKiB0b19t
ZW0gPSAodWludDhfdCAqKW5ld19ycHRmaWVsZF9zZWxmLT5lbGVtZW50cyArIG9mZjsKLSAgICB2
b2lkKiBmcm9tX21lbSA9ICh1aW50OF90ICopc2VsZi0+ZWxlbWVudHMgKyBvZmY7Ci0gICAgbmF0
aXZlX3Nsb3RfZHVwKGZpZWxkX3R5cGUsIHRvX21lbSwgZnJvbV9tZW0pOwotICAgIG5ld19ycHRm
aWVsZF9zZWxmLT5zaXplKys7Ci0gIH0KLQotICByZXR1cm4gbmV3X3JwdGZpZWxkOwotfQotCi0v
LyBJbnRlcm5hbCBvbmx5OiB1c2VkIGJ5IEdvb2dsZTo6UHJvdG9idWYuZGVlcF9jb3B5LgotVkFM
VUUgUmVwZWF0ZWRGaWVsZF9kZWVwX2NvcHkoVkFMVUUgX3NlbGYpIHsKLSAgUmVwZWF0ZWRGaWVs
ZCogc2VsZiA9IHJ1YnlfdG9fUmVwZWF0ZWRGaWVsZChfc2VsZik7Ci0gIFZBTFVFIG5ld19ycHRm
aWVsZCA9IFJlcGVhdGVkRmllbGRfbmV3X3RoaXNfdHlwZShfc2VsZik7Ci0gIFJlcGVhdGVkRmll
bGQqIG5ld19ycHRmaWVsZF9zZWxmID0gcnVieV90b19SZXBlYXRlZEZpZWxkKG5ld19ycHRmaWVs
ZCk7Ci0gIHVwYl9maWVsZHR5cGVfdCBmaWVsZF90eXBlID0gc2VsZi0+ZmllbGRfdHlwZTsKLSAg
c2l6ZV90IGVsZW1fc2l6ZSA9IG5hdGl2ZV9zbG90X3NpemUoZmllbGRfdHlwZSk7Ci0gIHNpemVf
dCBvZmYgPSAwOwotICBSZXBlYXRlZEZpZWxkX3Jlc2VydmUobmV3X3JwdGZpZWxkX3NlbGYsIHNl
bGYtPnNpemUpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHNlbGYtPnNpemU7IGkrKywgb2ZmICs9
IGVsZW1fc2l6ZSkgewotICAgIHZvaWQqIHRvX21lbSA9ICh1aW50OF90ICopbmV3X3JwdGZpZWxk
X3NlbGYtPmVsZW1lbnRzICsgb2ZmOwotICAgIHZvaWQqIGZyb21fbWVtID0gKHVpbnQ4X3QgKilz
ZWxmLT5lbGVtZW50cyArIG9mZjsKLSAgICBuYXRpdmVfc2xvdF9kZWVwX2NvcHkoZmllbGRfdHlw
ZSwgdG9fbWVtLCBmcm9tX21lbSk7Ci0gICAgbmV3X3JwdGZpZWxkX3NlbGYtPnNpemUrKzsKLSAg
fQotCi0gIHJldHVybiBuZXdfcnB0ZmllbGQ7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAg
ICBSZXBlYXRlZEZpZWxkLnRvX2FyeSA9PiBhcnJheQotICoKLSAqIFVzZWQgd2hlbiBjb252ZXJ0
ZWQgaW1wbGljaXRseSBpbnRvIGFycmF5LCBlLmcuIGNvbXBhcmVkIHRvIGFuIEFycmF5LgotICog
QWxzbyBjYWxsZWQgYXMgYSBmYWxsYmFjayBvZiBPYmplY3QjdG9fYQotICovCi1WQUxVRSBSZXBl
YXRlZEZpZWxkX3RvX2FyeShWQUxVRSBfc2VsZikgewotICBSZXBlYXRlZEZpZWxkKiBzZWxmID0g
cnVieV90b19SZXBlYXRlZEZpZWxkKF9zZWxmKTsKLSAgdXBiX2ZpZWxkdHlwZV90IGZpZWxkX3R5
cGUgPSBzZWxmLT5maWVsZF90eXBlOwotCi0gIHNpemVfdCBlbGVtX3NpemUgPSBuYXRpdmVfc2xv
dF9zaXplKGZpZWxkX3R5cGUpOwotICBzaXplX3Qgb2ZmID0gMDsKLSAgVkFMVUUgYXJ5ID0gcmJf
YXJ5X25ldzIoc2VsZi0+c2l6ZSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZi0+c2l6ZTsg
aSsrLCBvZmYgKz0gZWxlbV9zaXplKSB7Ci0gICAgdm9pZCogbWVtID0gKCh1aW50OF90ICopc2Vs
Zi0+ZWxlbWVudHMpICsgb2ZmOwotICAgIFZBTFVFIGVsZW0gPSBuYXRpdmVfc2xvdF9nZXQoZmll
bGRfdHlwZSwgc2VsZi0+ZmllbGRfdHlwZV9jbGFzcywgbWVtKTsKLSAgICByYl9hcnlfcHVzaChh
cnksIGVsZW0pOwotICB9Ci0gIHJldHVybiBhcnk7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAq
ICAgICBSZXBlYXRlZEZpZWxkLj09KG90aGVyKSA9PiBib29sZWFuCi0gKgotICogQ29tcGFyZXMg
dGhpcyByZXBlYXRlZCBmaWVsZCB0byBhbm90aGVyLiBSZXBlYXRlZCBmaWVsZHMgYXJlIGVxdWFs
IGlmIHRoZWlyCi0gKiBlbGVtZW50IHR5cGVzIGFyZSBlcXVhbCwgdGhlaXIgbGVuZ3RocyBhcmUg
ZXF1YWwsIGFuZCBlYWNoIGVsZW1lbnQgaXMgZXF1YWwuCi0gKiBFbGVtZW50cyBhcmUgY29tcGFy
ZWQgYXMgcGVyIG5vcm1hbCBSdWJ5IHNlbWFudGljcywgYnkgY2FsbGluZyB0aGVpciA6PT0KLSAq
IG1ldGhvZHMgKG9yIHBlcmZvcm1pbmcgYSBtb3JlIGVmZmljaWVudCBjb21wYXJpc29uIGZvciBw
cmltaXRpdmUgdHlwZXMpLgotICoKLSAqIFJlcGVhdGVkIGZpZWxkcyB3aXRoIGRpc3NpbWlsYXIg
ZWxlbWVudCB0eXBlcyBhcmUgbmV2ZXIgZXF1YWwsIGV2ZW4gaWYgdmFsdWUKLSAqIGNvbXBhcmlz
b24gKGZvciBleGFtcGxlLCBiZXR3ZWVuIGludGVnZXJzIGFuZCBmbG9hdHMpIHdvdWxkIGhhdmUg
b3RoZXJ3aXNlCi0gKiBpbmRpY2F0ZWQgdGhhdCBldmVyeSBlbGVtZW50IGhhcyBlcXVhbCB2YWx1
ZS4KLSAqLwotVkFMVUUgUmVwZWF0ZWRGaWVsZF9lcShWQUxVRSBfc2VsZiwgVkFMVUUgX290aGVy
KSB7Ci0gIFJlcGVhdGVkRmllbGQqIHNlbGY7Ci0gIFJlcGVhdGVkRmllbGQqIG90aGVyOwotCi0g
IGlmIChfc2VsZiA9PSBfb3RoZXIpIHsKLSAgICByZXR1cm4gUXRydWU7Ci0gIH0KLQotICBpZiAo
VFlQRShfb3RoZXIpID09IFRfQVJSQVkpIHsKLSAgICBWQUxVRSBzZWxmX2FyeSA9IFJlcGVhdGVk
RmllbGRfdG9fYXJ5KF9zZWxmKTsKLSAgICByZXR1cm4gcmJfZXF1YWwoc2VsZl9hcnksIF9vdGhl
cik7Ci0gIH0KLQotICBzZWxmID0gcnVieV90b19SZXBlYXRlZEZpZWxkKF9zZWxmKTsKLSAgb3Ro
ZXIgPSBydWJ5X3RvX1JlcGVhdGVkRmllbGQoX290aGVyKTsKLSAgaWYgKHNlbGYtPmZpZWxkX3R5
cGUgIT0gb3RoZXItPmZpZWxkX3R5cGUgfHwKLSAgICAgIHNlbGYtPmZpZWxkX3R5cGVfY2xhc3Mg
IT0gb3RoZXItPmZpZWxkX3R5cGVfY2xhc3MgfHwKLSAgICAgIHNlbGYtPnNpemUgIT0gb3RoZXIt
PnNpemUpIHsKLSAgICByZXR1cm4gUWZhbHNlOwotICB9Ci0KLSAgewotICAgIHVwYl9maWVsZHR5
cGVfdCBmaWVsZF90eXBlID0gc2VsZi0+ZmllbGRfdHlwZTsKLSAgICBzaXplX3QgZWxlbV9zaXpl
ID0gbmF0aXZlX3Nsb3Rfc2l6ZShmaWVsZF90eXBlKTsKLSAgICBzaXplX3Qgb2ZmID0gMDsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNlbGYtPnNpemU7IGkrKywgb2ZmICs9IGVsZW1fc2l6ZSkg
ewotICAgICAgdm9pZCogc2VsZl9tZW0gPSAoKHVpbnQ4X3QgKilzZWxmLT5lbGVtZW50cykgKyBv
ZmY7Ci0gICAgICB2b2lkKiBvdGhlcl9tZW0gPSAoKHVpbnQ4X3QgKilvdGhlci0+ZWxlbWVudHMp
ICsgb2ZmOwotICAgICAgaWYgKCFuYXRpdmVfc2xvdF9lcShmaWVsZF90eXBlLCBzZWxmX21lbSwg
b3RoZXJfbWVtKSkgewotICAgICAgICByZXR1cm4gUWZhbHNlOwotICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gUXRydWU7Ci0gIH0KLX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIFJlcGVh
dGVkRmllbGQuaGFzaCA9PiBoYXNoX3ZhbHVlCi0gKgotICogUmV0dXJucyBhIGhhc2ggdmFsdWUg
Y29tcHV0ZWQgZnJvbSB0aGlzIHJlcGVhdGVkIGZpZWxkJ3MgZWxlbWVudHMuCi0gKi8KLVZBTFVF
IFJlcGVhdGVkRmllbGRfaGFzaChWQUxVRSBfc2VsZikgewotICBSZXBlYXRlZEZpZWxkKiBzZWxm
ID0gcnVieV90b19SZXBlYXRlZEZpZWxkKF9zZWxmKTsKLQotICBWQUxVRSBoYXNoID0gTEwyTlVN
KDApOwotCi0gIHVwYl9maWVsZHR5cGVfdCBmaWVsZF90eXBlID0gc2VsZi0+ZmllbGRfdHlwZTsK
LSAgVkFMVUUgZmllbGRfdHlwZV9jbGFzcyA9IHNlbGYtPmZpZWxkX3R5cGVfY2xhc3M7Ci0gIHNp
emVfdCBlbGVtX3NpemUgPSBuYXRpdmVfc2xvdF9zaXplKGZpZWxkX3R5cGUpOwotICBzaXplX3Qg
b2ZmID0gMDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxmLT5zaXplOyBpKyssIG9mZiArPSBl
bGVtX3NpemUpIHsKLSAgICB2b2lkKiBtZW0gPSAoKHVpbnQ4X3QgKilzZWxmLT5lbGVtZW50cykg
KyBvZmY7Ci0gICAgVkFMVUUgZWxlbSA9IG5hdGl2ZV9zbG90X2dldChmaWVsZF90eXBlLCBmaWVs
ZF90eXBlX2NsYXNzLCBtZW0pOwotICAgIGhhc2ggPSByYl9mdW5jYWxsKGhhc2gsIHJiX2ludGVy
bigiPDwiKSwgMSwgSU5UMk5VTSgyKSk7Ci0gICAgaGFzaCA9IHJiX2Z1bmNhbGwoaGFzaCwgcmJf
aW50ZXJuKCJeIiksIDEsCi0gICAgICAgICAgICAgICAgICAgICAgcmJfZnVuY2FsbChlbGVtLCBy
Yl9pbnRlcm4oImhhc2giKSwgMCkpOwotICB9Ci0KLSAgcmV0dXJuIGhhc2g7Ci19Ci0KLS8qCi0g
KiBjYWxsLXNlcToKLSAqICAgICBSZXBlYXRlZEZpZWxkLisob3RoZXIpID0+IHJlcGVhdGVkIGZp
ZWxkCi0gKgotICogUmV0dXJucyBhIG5ldyByZXBlYXRlZCBmaWVsZCB0aGF0IGNvbnRhaW5zIHRo
ZSBjb25jYXRlbmF0ZWQgbGlzdCBvZiB0aGlzCi0gKiByZXBlYXRlZCBmaWVsZCdzIGVsZW1lbnRz
IGFuZCBvdGhlcidzIGVsZW1lbnRzLiBUaGUgb3RoZXIgKHNlY29uZCkgbGlzdCBtYXkKLSAqIGJl
IGVpdGhlciBhbm90aGVyIHJlcGVhdGVkIGZpZWxkIG9yIGEgUnVieSBhcnJheS4KLSAqLwotVkFM
VUUgUmVwZWF0ZWRGaWVsZF9wbHVzKFZBTFVFIF9zZWxmLCBWQUxVRSBsaXN0KSB7Ci0gIFZBTFVF
IGR1cHBlZCA9IFJlcGVhdGVkRmllbGRfZHVwKF9zZWxmKTsKLQotICBpZiAoVFlQRShsaXN0KSA9
PSBUX0FSUkFZKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBSQVJSQVlfTEVOKGxpc3QpOyBp
KyspIHsKLSAgICAgIFZBTFVFIGVsZW0gPSByYl9hcnlfZW50cnkobGlzdCwgaSk7Ci0gICAgICBS
ZXBlYXRlZEZpZWxkX3B1c2goZHVwcGVkLCBlbGVtKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoUkJf
VFlQRV9QKGxpc3QsIFRfREFUQSkgJiYgUlRZUEVEREFUQV9QKGxpc3QpICYmCi0gICAgICAgICAg
ICAgUlRZUEVEREFUQV9UWVBFKGxpc3QpID09ICZSZXBlYXRlZEZpZWxkX3R5cGUpIHsKLSAgICBS
ZXBlYXRlZEZpZWxkKiBzZWxmID0gcnVieV90b19SZXBlYXRlZEZpZWxkKF9zZWxmKTsKLSAgICBS
ZXBlYXRlZEZpZWxkKiBsaXN0X3JwdGZpZWxkID0gcnVieV90b19SZXBlYXRlZEZpZWxkKGxpc3Qp
OwotICAgIGlmIChzZWxmLT5maWVsZF90eXBlICE9IGxpc3RfcnB0ZmllbGQtPmZpZWxkX3R5cGUg
fHwKLSAgICAgICAgc2VsZi0+ZmllbGRfdHlwZV9jbGFzcyAhPSBsaXN0X3JwdGZpZWxkLT5maWVs
ZF90eXBlX2NsYXNzKSB7Ci0gICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsCi0gICAgICAgICAg
ICAgICAiQXR0ZW1wdCB0byBhcHBlbmQgUmVwZWF0ZWRGaWVsZCB3aXRoIGRpZmZlcmVudCBlbGVt
ZW50IHR5cGUuIik7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdF9ycHRmaWVs
ZC0+c2l6ZTsgaSsrKSB7Ci0gICAgICB2b2lkKiBtZW0gPSBSZXBlYXRlZEZpZWxkX2luZGV4X25h
dGl2ZShsaXN0LCBpKTsKLSAgICAgIFJlcGVhdGVkRmllbGRfcHVzaF9uYXRpdmUoZHVwcGVkLCBt
ZW0pOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJVbmtu
b3duIHR5cGUgYXBwZW5kaW5nIHRvIFJlcGVhdGVkRmllbGQiKTsKLSAgfQotCi0gIHJldHVybiBk
dXBwZWQ7Ci19Ci0KLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgICBSZXBlYXRlZEZpZWxkLmNvbmNh
dChvdGhlcikgPT4gc2VsZgotICoKLSAqIGNvbmNhdHMgdGhlIHBhc3NlZCBpbiBhcnJheSB0byBz
ZWxmLiAgUmV0dXJucyBhIFJ1YnkgYXJyYXkuCi0gKi8KLVZBTFVFIFJlcGVhdGVkRmllbGRfY29u
Y2F0KFZBTFVFIF9zZWxmLCBWQUxVRSBsaXN0KSB7Ci0gIENoZWNrX1R5cGUobGlzdCwgVF9BUlJB
WSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgUkFSUkFZX0xFTihsaXN0KTsgaSsrKSB7Ci0gICAg
UmVwZWF0ZWRGaWVsZF9wdXNoKF9zZWxmLCByYl9hcnlfZW50cnkobGlzdCwgaSkpOwotICB9Ci0g
IHJldHVybiBfc2VsZjsKLX0KLQotCi12b2lkIHZhbGlkYXRlX3R5cGVfY2xhc3ModXBiX2ZpZWxk
dHlwZV90IHR5cGUsIFZBTFVFIGtsYXNzKSB7Ci0gIGlmIChyYl9pdmFyX2dldChrbGFzcywgZGVz
Y3JpcHRvcl9pbnN0YW5jZXZhcl9pbnRlcm5lZCkgPT0gUW5pbCkgewotICAgIHJiX3JhaXNlKHJi
X2VBcmdFcnJvciwKLSAgICAgICAgICAgICAiVHlwZSBjbGFzcyBoYXMgbm8gZGVzY3JpcHRvci4g
UGxlYXNlIHBhc3MgYSAiCi0gICAgICAgICAgICAgImNsYXNzIG9yIGVudW0gYXMgcmV0dXJuZWQg
YnkgdGhlIERlc2NyaXB0b3JQb29sLiIpOwotICB9Ci0gIGlmICh0eXBlID09IFVQQl9UWVBFX01F
U1NBR0UpIHsKLSAgICBWQUxVRSBkZXNjID0gcmJfaXZhcl9nZXQoa2xhc3MsIGRlc2NyaXB0b3Jf
aW5zdGFuY2V2YXJfaW50ZXJuZWQpOwotICAgIGlmICghUkJfVFlQRV9QKGRlc2MsIFRfREFUQSkg
fHwgIVJUWVBFRERBVEFfUChkZXNjKSB8fAotICAgICAgICBSVFlQRUREQVRBX1RZUEUoZGVzYykg
IT0gJl9EZXNjcmlwdG9yX3R5cGUpIHsKLSAgICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkRl
c2NyaXB0b3IgaGFzIGFuIGluY29ycmVjdCB0eXBlLiIpOwotICAgIH0KLSAgICBpZiAocmJfZ2V0
X2FsbG9jX2Z1bmMoa2xhc3MpICE9ICZNZXNzYWdlX2FsbG9jKSB7Ci0gICAgICByYl9yYWlzZShy
Yl9lQXJnRXJyb3IsCi0gICAgICAgICAgICAgICAiTWVzc2FnZSBjbGFzcyB3YXMgbm90IHJldHVy
bmVkIGJ5IHRoZSBEZXNjcmlwdG9yUG9vbC4iKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAodHlwZSA9
PSBVUEJfVFlQRV9FTlVNKSB7Ci0gICAgVkFMVUUgZW51bWRlc2MgPSByYl9pdmFyX2dldChrbGFz
cywgZGVzY3JpcHRvcl9pbnN0YW5jZXZhcl9pbnRlcm5lZCk7Ci0gICAgaWYgKCFSQl9UWVBFX1Ao
ZW51bWRlc2MsIFRfREFUQSkgfHwgIVJUWVBFRERBVEFfUChlbnVtZGVzYykgfHwKLSAgICAgICAg
UlRZUEVEREFUQV9UWVBFKGVudW1kZXNjKSAhPSAmX0VudW1EZXNjcmlwdG9yX3R5cGUpIHsKLSAg
ICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIkRlc2NyaXB0b3IgaGFzIGFuIGluY29ycmVjdCB0
eXBlLiIpOwotICAgIH0KLSAgfQotfQotCi12b2lkIFJlcGVhdGVkRmllbGRfaW5pdF9hcmdzKGlu
dCBhcmdjLCBWQUxVRSogYXJndiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUUg
X3NlbGYpIHsKLSAgUmVwZWF0ZWRGaWVsZCogc2VsZiA9IHJ1YnlfdG9fUmVwZWF0ZWRGaWVsZChf
c2VsZik7Ci0gIFZBTFVFIGFyeSA9IFFuaWw7Ci0gIGlmIChhcmdjIDwgMSkgewotICAgIHJiX3Jh
aXNlKHJiX2VBcmdFcnJvciwgIkV4cGVjdGVkIGF0IGxlYXN0IDEgYXJndW1lbnQuIik7Ci0gIH0K
LSAgc2VsZi0+ZmllbGRfdHlwZSA9IHJ1YnlfdG9fZmllbGR0eXBlKGFyZ3ZbMF0pOwotCi0gIGlm
IChzZWxmLT5maWVsZF90eXBlID09IFVQQl9UWVBFX01FU1NBR0UgfHwKLSAgICAgIHNlbGYtPmZp
ZWxkX3R5cGUgPT0gVVBCX1RZUEVfRU5VTSkgewotICAgIGlmIChhcmdjIDwgMikgewotICAgICAg
cmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiRXhwZWN0ZWQgYXQgbGVhc3QgMiBhcmd1bWVudHMgZm9y
IG1lc3NhZ2UvZW51bS4iKTsKLSAgICB9Ci0gICAgc2VsZi0+ZmllbGRfdHlwZV9jbGFzcyA9IGFy
Z3ZbMV07Ci0gICAgaWYgKGFyZ2MgPiAyKSB7Ci0gICAgICBhcnkgPSBhcmd2WzJdOwotICAgIH0K
LSAgICB2YWxpZGF0ZV90eXBlX2NsYXNzKHNlbGYtPmZpZWxkX3R5cGUsIHNlbGYtPmZpZWxkX3R5
cGVfY2xhc3MpOwotICB9IGVsc2UgewotICAgIGlmIChhcmdjID4gMikgewotICAgICAgcmJfcmFp
c2UocmJfZUFyZ0Vycm9yLCAiVG9vIG1hbnkgYXJndW1lbnRzOiBleHBlY3RlZCAxIG9yIDIuIik7
Ci0gICAgfQotICAgIGlmIChhcmdjID4gMSkgewotICAgICAgYXJ5ID0gYXJndlsxXTsKLSAgICB9
Ci0gIH0KLQotICBpZiAoYXJ5ICE9IFFuaWwpIHsKLSAgICBpZiAoIVJCX1RZUEVfUChhcnksIFRf
QVJSQVkpKSB7Ci0gICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJFeHBlY3RlZCBhcnJheSBh
cyBpbml0aWFsaXplIGFyZ3VtZW50Iik7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
UkFSUkFZX0xFTihhcnkpOyBpKyspIHsKLSAgICAgIFJlcGVhdGVkRmllbGRfcHVzaChfc2VsZiwg
cmJfYXJ5X2VudHJ5KGFyeSwgaSkpOwotICAgIH0KLSAgfQotfQotCi0vLyBNYXJrLCBmcmVlLCBh
bGxvYywgaW5pdCBhbmQgY2xhc3Mgc2V0dXAgZnVuY3Rpb25zLgotCi12b2lkIFJlcGVhdGVkRmll
bGRfbWFyayh2b2lkKiBfc2VsZikgewotICBSZXBlYXRlZEZpZWxkKiBzZWxmID0gKFJlcGVhdGVk
RmllbGQqKV9zZWxmOwotICB1cGJfZmllbGR0eXBlX3QgZmllbGRfdHlwZSA9IHNlbGYtPmZpZWxk
X3R5cGU7Ci0gIGludCBlbGVtZW50X3NpemUgPSBuYXRpdmVfc2xvdF9zaXplKGZpZWxkX3R5cGUp
OwotICByYl9nY19tYXJrKHNlbGYtPmZpZWxkX3R5cGVfY2xhc3MpOwotICBmb3IgKGludCBpID0g
MDsgaSA8IHNlbGYtPnNpemU7IGkrKykgewotICAgIHZvaWQqIG1lbW9yeSA9ICgoKHVpbnQ4X3Qg
KilzZWxmLT5lbGVtZW50cykgKyBpICogZWxlbWVudF9zaXplKTsKLSAgICBuYXRpdmVfc2xvdF9t
YXJrKHNlbGYtPmZpZWxkX3R5cGUsIG1lbW9yeSk7Ci0gIH0KLX0KLQotdm9pZCBSZXBlYXRlZEZp
ZWxkX2ZyZWUodm9pZCogX3NlbGYpIHsKLSAgUmVwZWF0ZWRGaWVsZCogc2VsZiA9IChSZXBlYXRl
ZEZpZWxkKilfc2VsZjsKLSAgeGZyZWUoc2VsZi0+ZWxlbWVudHMpOwotICB4ZnJlZShzZWxmKTsK
LX0KLQotLyoKLSAqIGNhbGwtc2VxOgotICogICAgIFJlcGVhdGVkRmllbGQubmV3KHR5cGUsIHR5
cGVfY2xhc3MgPSBuaWwsIGluaXRpYWxfZWxlbXMgPSBbXSkKLSAqCi0gKiBDcmVhdGVzIGEgbmV3
IHJlcGVhdGVkIGZpZWxkLiBUaGUgcHJvdmlkZWQgdHlwZSBtdXN0IGJlIGEgUnVieSBzeW1ib2ws
IGFuZAotICogY2FuIHRha2Ugb24gdGhlIHNhbWUgdmFsdWVzIGFzIHRob3NlIGFjY2VwdGVkIGJ5
IEZpZWxkRGVzY3JpcHRvciN0eXBlPS4gSWYKLSAqIHRoZSB0eXBlIGlzIDptZXNzYWdlIG9yIDpl
bnVtLCB0eXBlX2NsYXNzIG11c3QgYmUgbm9uLW5pbCwgYW5kIG11c3QgYmUgdGhlCi0gKiBSdWJ5
IGNsYXNzIG9yIG1vZHVsZSByZXR1cm5lZCBieSBEZXNjcmlwdG9yI21zZ2NsYXNzIG9yCi0gKiBF
bnVtRGVzY3JpcHRvciNlbnVtbW9kdWxlLCByZXNwZWN0aXZlbHkuIEFuIGluaXRpYWwgbGlzdCBv
ZiBlbGVtZW50cyBtYXkgYWxzbwotICogYmUgcHJvdmlkZWQuCi0gKi8KLVZBTFVFIFJlcGVhdGVk
RmllbGRfYWxsb2MoVkFMVUUga2xhc3MpIHsKLSAgUmVwZWF0ZWRGaWVsZCogc2VsZiA9IEFMTE9D
KFJlcGVhdGVkRmllbGQpOwotICBzZWxmLT5lbGVtZW50cyA9IE5VTEw7Ci0gIHNlbGYtPnNpemUg
PSAwOwotICBzZWxmLT5jYXBhY2l0eSA9IDA7Ci0gIHNlbGYtPmZpZWxkX3R5cGUgPSAtMTsKLSAg
c2VsZi0+ZmllbGRfdHlwZV9jbGFzcyA9IFFuaWw7Ci0gIHJldHVybiBUeXBlZERhdGFfV3JhcF9T
dHJ1Y3Qoa2xhc3MsICZSZXBlYXRlZEZpZWxkX3R5cGUsIHNlbGYpOwotfQotCi1WQUxVRSBSZXBl
YXRlZEZpZWxkX2luaXQoaW50IGFyZ2MsIFZBTFVFKiBhcmd2LCBWQUxVRSBzZWxmKSB7Ci0gIFJl
cGVhdGVkRmllbGRfaW5pdF9hcmdzKGFyZ2MsIGFyZ3YsIHNlbGYpOwotICByZXR1cm4gUW5pbDsK
LX0KLQotdm9pZCBSZXBlYXRlZEZpZWxkX3JlZ2lzdGVyKFZBTFVFIG1vZHVsZSkgewotICBWQUxV
RSBrbGFzcyA9IHJiX2RlZmluZV9jbGFzc191bmRlcigKLSAgICAgIG1vZHVsZSwgIlJlcGVhdGVk
RmllbGQiLCByYl9jT2JqZWN0KTsKLSAgcmJfZGVmaW5lX2FsbG9jX2Z1bmMoa2xhc3MsIFJlcGVh
dGVkRmllbGRfYWxsb2MpOwotICBjUmVwZWF0ZWRGaWVsZCA9IGtsYXNzOwotICByYl9nY19yZWdp
c3Rlcl9hZGRyZXNzKCZjUmVwZWF0ZWRGaWVsZCk7Ci0KLSAgcmJfZGVmaW5lX21ldGhvZChrbGFz
cywgImluaXRpYWxpemUiLAotICAgICAgICAgICAgICAgICAgIFJlcGVhdGVkRmllbGRfaW5pdCwg
LTEpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiZWFjaCIsIFJlcGVhdGVkRmllbGRfZWFj
aCwgMCk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJbXSIsIFJlcGVhdGVkRmllbGRfaW5k
ZXgsIC0xKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgImF0IiwgUmVwZWF0ZWRGaWVsZF9p
bmRleCwgLTEpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiW109IiwgUmVwZWF0ZWRGaWVs
ZF9pbmRleF9zZXQsIDIpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAicHVzaCIsIFJlcGVh
dGVkRmllbGRfcHVzaCwgMSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICI8PCIsIFJlcGVh
dGVkRmllbGRfcHVzaCwgMSk7Ci0gIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChrbGFzcywgInBv
cF9vbmUiLCBSZXBlYXRlZEZpZWxkX3BvcF9vbmUsIDApOwotICByYl9kZWZpbmVfbWV0aG9kKGts
YXNzLCAicmVwbGFjZSIsIFJlcGVhdGVkRmllbGRfcmVwbGFjZSwgMSk7Ci0gIHJiX2RlZmluZV9t
ZXRob2Qoa2xhc3MsICJjbGVhciIsIFJlcGVhdGVkRmllbGRfY2xlYXIsIDApOwotICByYl9kZWZp
bmVfbWV0aG9kKGtsYXNzLCAibGVuZ3RoIiwgUmVwZWF0ZWRGaWVsZF9sZW5ndGgsIDApOwotICBy
Yl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAic2l6ZSIsIFJlcGVhdGVkRmllbGRfbGVuZ3RoLCAwKTsK
LSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgImR1cCIsIFJlcGVhdGVkRmllbGRfZHVwLCAwKTsK
LSAgLy8gQWxzbyBkZWZpbmUgI2Nsb25lIHNvIHRoYXQgd2UgZG9uJ3QgaW5oZXJpdCBPYmplY3Qj
Y2xvbmUuCi0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJjbG9uZSIsIFJlcGVhdGVkRmllbGRf
ZHVwLCAwKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgIj09IiwgUmVwZWF0ZWRGaWVsZF9l
cSwgMSk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJ0b19hcnkiLCBSZXBlYXRlZEZpZWxk
X3RvX2FyeSwgMCk7Ci0gIHJiX2RlZmluZV9tZXRob2Qoa2xhc3MsICJoYXNoIiwgUmVwZWF0ZWRG
aWVsZF9oYXNoLCAwKTsKLSAgcmJfZGVmaW5lX21ldGhvZChrbGFzcywgIisiLCBSZXBlYXRlZEZp
ZWxkX3BsdXMsIDEpOwotICByYl9kZWZpbmVfbWV0aG9kKGtsYXNzLCAiY29uY2F0IiwgUmVwZWF0
ZWRGaWVsZF9jb25jYXQsIDEpOwotICByYl9pbmNsdWRlX21vZHVsZShrbGFzcywgcmJfbUVudW1l
cmFibGUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy9zdG9yYWdl
LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3J1YnkvZXh0L2dvb2dsZS9wcm90b2J1Zl9jL3N0b3JhZ2UuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjFmNjVmNDEzYjUzZDNiNDYwNDdjODNjNDZhNTUxMDNkOTEzNDU5Ni4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvZXh0L2dv
b2dsZS9wcm90b2J1Zl9jL3N0b3JhZ2UuYworKysgL2Rldi9udWxsCkBAIC0xLDg2MyArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgInByb3RvYnVm
LmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxydWJ5L2VuY29kaW5nLmg+Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWJ5IDwtPiBuYXRpdmUgc2xvdCBtYW5hZ2Vt
ZW50LgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBERVJFRihtZW1vcnksIHR5
cGUpICoodHlwZSopKG1lbW9yeSkKLQotc2l6ZV90IG5hdGl2ZV9zbG90X3NpemUodXBiX2ZpZWxk
dHlwZV90IHR5cGUpIHsKLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9GTE9B
VDogICByZXR1cm4gNDsKLSAgICBjYXNlIFVQQl9UWVBFX0RPVUJMRTogIHJldHVybiA4OwotICAg
IGNhc2UgVVBCX1RZUEVfQk9PTDogICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBVUEJfVFlQRV9TVFJJ
Tkc6ICByZXR1cm4gc2l6ZW9mKFZBTFVFKTsKLSAgICBjYXNlIFVQQl9UWVBFX0JZVEVTOiAgIHJl
dHVybiBzaXplb2YoVkFMVUUpOwotICAgIGNhc2UgVVBCX1RZUEVfTUVTU0FHRTogcmV0dXJuIHNp
emVvZihWQUxVRSk7Ci0gICAgY2FzZSBVUEJfVFlQRV9FTlVNOiAgICByZXR1cm4gNDsKLSAgICBj
YXNlIFVQQl9UWVBFX0lOVDMyOiAgIHJldHVybiA0OwotICAgIGNhc2UgVVBCX1RZUEVfSU5UNjQ6
ICAgcmV0dXJuIDg7Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5UMzI6ICByZXR1cm4gNDsKLSAgICBj
YXNlIFVQQl9UWVBFX1VJTlQ2NDogIHJldHVybiA4OwotICAgIGRlZmF1bHQ6IHJldHVybiAwOwot
ICB9Ci19Ci0KLXN0YXRpYyBib29sIGlzX3J1YnlfbnVtKFZBTFVFIHZhbHVlKSB7Ci0gIHJldHVy
biAoVFlQRSh2YWx1ZSkgPT0gVF9GTE9BVCB8fAotICAgICAgICAgIFRZUEUodmFsdWUpID09IFRf
RklYTlVNIHx8Ci0gICAgICAgICAgVFlQRSh2YWx1ZSkgPT0gVF9CSUdOVU0pOwotfQotCi12b2lk
IG5hdGl2ZV9zbG90X2NoZWNrX2ludF9yYW5nZV9wcmVjaXNpb24odXBiX2ZpZWxkdHlwZV90IHR5
cGUsIFZBTFVFIHZhbCkgewotICBpZiAoIWlzX3J1YnlfbnVtKHZhbCkpIHsKLSAgICByYl9yYWlz
ZShyYl9lVHlwZUVycm9yLCAiRXhwZWN0ZWQgbnVtYmVyIHR5cGUgZm9yIGludGVncmFsIGZpZWxk
LiIpOwotICB9Ci0KLSAgLy8gTlVNMntJTlQsVUlOVCxMTCxVTEx9IG1hY3JvcyBkbyB0aGUgYXBw
cm9wcmlhdGUgcmFuZ2UgY2hlY2tzIG9uIHVwcGVyCi0gIC8vIGJvdW5kOyB3ZSBqdXN0IG5lZWQg
dG8gZG8gcHJlY2lzaW9uIGNoZWNrcyAoaS5lLiwgZGlzYWxsb3cgcm91bmRpbmcpIGFuZAotICAv
LyBjaGVjayBmb3IgPCAwIG9uIHVuc2lnbmVkIHR5cGVzLgotICBpZiAoVFlQRSh2YWwpID09IFRf
RkxPQVQpIHsKLSAgICBkb3VibGUgZGJsX3ZhbCA9IE5VTTJEQkwodmFsKTsKLSAgICBpZiAoZmxv
b3IoZGJsX3ZhbCkgIT0gZGJsX3ZhbCkgewotICAgICAgcmJfcmFpc2UocmJfZVJhbmdlRXJyb3Is
Ci0gICAgICAgICAgICAgICAiTm9uLWludGVncmFsIGZsb2F0aW5nIHBvaW50IHZhbHVlIGFzc2ln
bmVkIHRvIGludGVnZXIgZmllbGQuIik7Ci0gICAgfQotICB9Ci0gIGlmICh0eXBlID09IFVQQl9U
WVBFX1VJTlQzMiB8fCB0eXBlID09IFVQQl9UWVBFX1VJTlQ2NCkgewotICAgIGlmIChOVU0yREJM
KHZhbCkgPCAwKSB7Ci0gICAgICByYl9yYWlzZShyYl9lUmFuZ2VFcnJvciwKLSAgICAgICAgICAg
ICAgICJBc3NpZ25pbmcgbmVnYXRpdmUgdmFsdWUgdG8gdW5zaWduZWQgaW50ZWdlciBmaWVsZC4i
KTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBuYXRpdmVfc2xvdF92YWxpZGF0ZV9zdHJpbmdfZW5j
b2RpbmcodXBiX2ZpZWxkdHlwZV90IHR5cGUsIFZBTFVFIHZhbHVlKSB7Ci0gIGJvb2wgYmFkX2Vu
Y29kaW5nID0gZmFsc2U7Ci0gIHJiX2VuY29kaW5nKiBzdHJpbmdfZW5jb2RpbmcgPSByYl9lbmNf
ZnJvbV9pbmRleChFTkNPRElOR19HRVQodmFsdWUpKTsKLSAgaWYgKHR5cGUgPT0gVVBCX1RZUEVf
U1RSSU5HKSB7Ci0gICAgYmFkX2VuY29kaW5nID0KLSAgICAgICAgc3RyaW5nX2VuY29kaW5nICE9
IGtSdWJ5U3RyaW5nVXRmOEVuY29kaW5nICYmCi0gICAgICAgIHN0cmluZ19lbmNvZGluZyAhPSBr
UnVieVN0cmluZ0FTQ0lJRW5jb2Rpbmc7Ci0gIH0gZWxzZSB7Ci0gICAgYmFkX2VuY29kaW5nID0K
LSAgICAgICAgc3RyaW5nX2VuY29kaW5nICE9IGtSdWJ5U3RyaW5nOGJpdEVuY29kaW5nOwotICB9
Ci0gIC8vIENoZWNrIHRoYXQgZW5jb2RpbmcgaXMgVVRGLTggb3IgQVNDSUkgKGZvciBzdHJpbmcg
ZmllbGRzKSBvciBBU0NJSS04QklUCi0gIC8vIChmb3IgYnl0ZXMgZmllbGRzKS4KLSAgaWYgKGJh
ZF9lbmNvZGluZykgewotICAgIHJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsICJFbmNvZGluZyBmb3Ig
JyVzJyBmaWVsZHMgbXVzdCBiZSAlcyAod2FzICVzKSIsCi0gICAgICAgICAgICAgKHR5cGUgPT0g
VVBCX1RZUEVfU1RSSU5HKSA/ICJzdHJpbmciIDogImJ5dGVzIiwKLSAgICAgICAgICAgICAodHlw
ZSA9PSBVUEJfVFlQRV9TVFJJTkcpID8gIlVURi04IG9yIEFTQ0lJIiA6ICJBU0NJSS04QklUIiwK
LSAgICAgICAgICAgICByYl9lbmNfbmFtZShzdHJpbmdfZW5jb2RpbmcpKTsKLSAgfQotfQotCi12
b2lkIG5hdGl2ZV9zbG90X3NldCh1cGJfZmllbGR0eXBlX3QgdHlwZSwgVkFMVUUgdHlwZV9jbGFz
cywKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQqIG1lbW9yeSwgVkFMVUUgdmFsdWUpIHsKLSAg
bmF0aXZlX3Nsb3Rfc2V0X3ZhbHVlX2FuZF9jYXNlKHR5cGUsIHR5cGVfY2xhc3MsIG1lbW9yeSwg
dmFsdWUsIE5VTEwsIDApOwotfQotCi12b2lkIG5hdGl2ZV9zbG90X3NldF92YWx1ZV9hbmRfY2Fz
ZSh1cGJfZmllbGR0eXBlX3QgdHlwZSwgVkFMVUUgdHlwZV9jbGFzcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIG1lbW9yeSwgVkFMVUUgdmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogY2FzZV9tZW1vcnksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjYXNlX251bWJlcikgewot
ICAvLyBOb3RlIHRoYXQgaW4gb3JkZXIgdG8gYXRvbWljYWxseSBjaGFuZ2UgdGhlIHZhbHVlIGlu
IG1lbW9yeSBhbmQgdGhlIGNhc2UKLSAgLy8gdmFsdWUgKHcuci50LiBSdWJ5IFZNIGNhbGxzKSwg
d2UgbXVzdCBzZXQgdGhlIHZhbHVlIGF0IHxtZW1vcnl8IG9ubHkgYWZ0ZXIKLSAgLy8gYWxsIFJ1
YnkgVk0gY2FsbHMgYXJlIGNvbXBsZXRlLiBUaGUgY2FzZSBpcyB0aGVuIHNldCBhdCB0aGUgYm90
dG9tIG9mIHRoaXMKLSAgLy8gZnVuY3Rpb24uCi0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Ug
VVBCX1RZUEVfRkxPQVQ6Ci0gICAgICBpZiAoIWlzX3J1YnlfbnVtKHZhbHVlKSkgewotICAgICAg
ICByYl9yYWlzZShyYl9lVHlwZUVycm9yLCAiRXhwZWN0ZWQgbnVtYmVyIHR5cGUgZm9yIGZsb2F0
IGZpZWxkLiIpOwotICAgICAgfQotICAgICAgREVSRUYobWVtb3J5LCBmbG9hdCkgPSBOVU0yREJM
KHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfRE9VQkxFOgotICAgICAg
aWYgKCFpc19ydWJ5X251bSh2YWx1ZSkpIHsKLSAgICAgICAgcmJfcmFpc2UocmJfZVR5cGVFcnJv
ciwgIkV4cGVjdGVkIG51bWJlciB0eXBlIGZvciBkb3VibGUgZmllbGQuIik7Ci0gICAgICB9Ci0g
ICAgICBERVJFRihtZW1vcnksIGRvdWJsZSkgPSBOVU0yREJMKHZhbHVlKTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgVVBCX1RZUEVfQk9PTDogewotICAgICAgaW50OF90IHZhbCA9IC0xOwotICAg
ICAgaWYgKHZhbHVlID09IFF0cnVlKSB7Ci0gICAgICAgIHZhbCA9IDE7Ci0gICAgICB9IGVsc2Ug
aWYgKHZhbHVlID09IFFmYWxzZSkgewotICAgICAgICB2YWwgPSAwOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmJfcmFpc2UocmJfZVR5cGVFcnJvciwgIkludmFsaWQgYXJndW1lbnQgZm9yIGJv
b2xlYW4gZmllbGQuIik7Ci0gICAgICB9Ci0gICAgICBERVJFRihtZW1vcnksIGludDhfdCkgPSB2
YWw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVUEJfVFlQRV9TVFJJTkc6Ci0gICAg
Y2FzZSBVUEJfVFlQRV9CWVRFUzogewotICAgICAgaWYgKENMQVNTX09GKHZhbHVlKSAhPSByYl9j
U3RyaW5nKSB7Ci0gICAgICAgIHJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsICJJbnZhbGlkIGFyZ3Vt
ZW50IGZvciBzdHJpbmcgZmllbGQuIik7Ci0gICAgICB9Ci0gICAgICBuYXRpdmVfc2xvdF92YWxp
ZGF0ZV9zdHJpbmdfZW5jb2RpbmcodHlwZSwgdmFsdWUpOwotICAgICAgREVSRUYobWVtb3J5LCBW
QUxVRSkgPSB2YWx1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVQQl9UWVBFX01F
U1NBR0U6IHsKLSAgICAgIGlmIChDTEFTU19PRih2YWx1ZSkgPT0gQ0xBU1NfT0YoUW5pbCkpIHsK
LSAgICAgICAgdmFsdWUgPSBRbmlsOwotICAgICAgfSBlbHNlIGlmIChDTEFTU19PRih2YWx1ZSkg
IT0gdHlwZV9jbGFzcykgewotICAgICAgICByYl9yYWlzZShyYl9lVHlwZUVycm9yLAotICAgICAg
ICAgICAgICAgICAiSW52YWxpZCB0eXBlICVzIHRvIGFzc2lnbiB0byBzdWJtZXNzYWdlIGZpZWxk
LiIsCi0gICAgICAgICAgICAgICAgIHJiX2NsYXNzMm5hbWUoQ0xBU1NfT0YodmFsdWUpKSk7Ci0g
ICAgICB9Ci0gICAgICBERVJFRihtZW1vcnksIFZBTFVFKSA9IHZhbHVlOwotICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgVVBCX1RZUEVfRU5VTTogewotICAgICAgaW50MzJfdCBpbnRfdmFs
ID0gMDsKLSAgICAgIGlmICghaXNfcnVieV9udW0odmFsdWUpICYmIFRZUEUodmFsdWUpICE9IFRf
U1lNQk9MKSB7Ci0gICAgICAgIHJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsCi0gICAgICAgICAgICAg
ICAgICJFeHBlY3RlZCBudW1iZXIgb3Igc3ltYm9sIHR5cGUgZm9yIGVudW0gZmllbGQuIik7Ci0g
ICAgICB9Ci0gICAgICBpZiAoVFlQRSh2YWx1ZSkgPT0gVF9TWU1CT0wpIHsKLSAgICAgICAgLy8g
RW5zdXJlIHRoYXQgdGhlIGdpdmVuIHN5bWJvbCBleGlzdHMgaW4gdGhlIGVudW0gbW9kdWxlLgot
ICAgICAgICBWQUxVRSBsb29rdXAgPSByYl9mdW5jYWxsKHR5cGVfY2xhc3MsIHJiX2ludGVybigi
cmVzb2x2ZSIpLCAxLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsb29rdXAgPT0gUW5pbCkgewotICAg
ICAgICAgIHJiX3JhaXNlKHJiX2VSYW5nZUVycm9yLCAiVW5rbm93biBzeW1ib2wgdmFsdWUgZm9y
IGVudW0gZmllbGQuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaW50X3ZhbCA9IE5V
TTJJTlQobG9va3VwKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbmF0aXZl
X3Nsb3RfY2hlY2tfaW50X3JhbmdlX3ByZWNpc2lvbihVUEJfVFlQRV9JTlQzMiwgdmFsdWUpOwot
ICAgICAgICBpbnRfdmFsID0gTlVNMklOVCh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBERVJFRiht
ZW1vcnksIGludDMyX3QpID0gaW50X3ZhbDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFVQQl9UWVBFX0lOVDMyOgotICAgIGNhc2UgVVBCX1RZUEVfSU5UNjQ6Ci0gICAgY2FzZSBVUEJf
VFlQRV9VSU5UMzI6Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5UNjQ6Ci0gICAgICBuYXRpdmVfc2xv
dF9jaGVja19pbnRfcmFuZ2VfcHJlY2lzaW9uKHR5cGUsIHZhbHVlKTsKLSAgICAgIHN3aXRjaCAo
dHlwZSkgewotICAgICAgY2FzZSBVUEJfVFlQRV9JTlQzMjoKLSAgICAgICAgREVSRUYobWVtb3J5
LCBpbnQzMl90KSA9IE5VTTJJTlQodmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
VVBCX1RZUEVfSU5UNjQ6Ci0gICAgICAgIERFUkVGKG1lbW9yeSwgaW50NjRfdCkgPSBOVU0yTEwo
dmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVVBCX1RZUEVfVUlOVDMyOgotICAg
ICAgICBERVJFRihtZW1vcnksIHVpbnQzMl90KSA9IE5VTTJVSU5UKHZhbHVlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIFVQQl9UWVBFX1VJTlQ2NDoKLSAgICAgICAgREVSRUYobWVtb3J5
LCB1aW50NjRfdCkgPSBOVU0yVUxMKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChjYXNlX21lbW9yeSAhPSBOVUxMKSB7Ci0gICAg
KmNhc2VfbWVtb3J5ID0gY2FzZV9udW1iZXI7Ci0gIH0KLX0KLQotVkFMVUUgbmF0aXZlX3Nsb3Rf
Z2V0KHVwYl9maWVsZHR5cGVfdCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgIFZBTFVFIHR5
cGVfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogbWVtb3J5KSB7Ci0g
IHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVVBCX1RZUEVfRkxPQVQ6Ci0gICAgICByZXR1cm4g
REJMMk5VTShERVJFRihtZW1vcnksIGZsb2F0KSk7Ci0gICAgY2FzZSBVUEJfVFlQRV9ET1VCTEU6
Ci0gICAgICByZXR1cm4gREJMMk5VTShERVJFRihtZW1vcnksIGRvdWJsZSkpOwotICAgIGNhc2Ug
VVBCX1RZUEVfQk9PTDoKLSAgICAgIHJldHVybiBERVJFRihtZW1vcnksIGludDhfdCkgPyBRdHJ1
ZSA6IFFmYWxzZTsKLSAgICBjYXNlIFVQQl9UWVBFX1NUUklORzoKLSAgICBjYXNlIFVQQl9UWVBF
X0JZVEVTOgotICAgIGNhc2UgVVBCX1RZUEVfTUVTU0FHRToKLSAgICAgIHJldHVybiBERVJFRiht
ZW1vcnksIFZBTFVFKTsKLSAgICBjYXNlIFVQQl9UWVBFX0VOVU06IHsKLSAgICAgIGludDMyX3Qg
dmFsID0gREVSRUYobWVtb3J5LCBpbnQzMl90KTsKLSAgICAgIFZBTFVFIHN5bWJvbCA9IGVudW1f
bG9va3VwKHR5cGVfY2xhc3MsIElOVDJOVU0odmFsKSk7Ci0gICAgICBpZiAoc3ltYm9sID09IFFu
aWwpIHsKLSAgICAgICAgcmV0dXJuIElOVDJOVU0odmFsKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHJldHVybiBzeW1ib2w7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhc2UgVVBCX1RZUEVfSU5U
MzI6Ci0gICAgICByZXR1cm4gSU5UMk5VTShERVJFRihtZW1vcnksIGludDMyX3QpKTsKLSAgICBj
YXNlIFVQQl9UWVBFX0lOVDY0OgotICAgICAgcmV0dXJuIExMMk5VTShERVJFRihtZW1vcnksIGlu
dDY0X3QpKTsKLSAgICBjYXNlIFVQQl9UWVBFX1VJTlQzMjoKLSAgICAgIHJldHVybiBVSU5UMk5V
TShERVJFRihtZW1vcnksIHVpbnQzMl90KSk7Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5UNjQ6Ci0g
ICAgICByZXR1cm4gVUxMMk5VTShERVJFRihtZW1vcnksIHVpbnQ2NF90KSk7Ci0gICAgZGVmYXVs
dDoKLSAgICAgIHJldHVybiBRbmlsOwotICB9Ci19Ci0KLXZvaWQgbmF0aXZlX3Nsb3RfaW5pdCh1
cGJfZmllbGR0eXBlX3QgdHlwZSwgdm9pZCogbWVtb3J5KSB7Ci0gIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgVVBCX1RZUEVfRkxPQVQ6Ci0gICAgICBERVJFRihtZW1vcnksIGZsb2F0KSA9IDAu
MDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfRE9VQkxFOgotICAgICAgREVSRUYo
bWVtb3J5LCBkb3VibGUpID0gMC4wOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9C
T09MOgotICAgICAgREVSRUYobWVtb3J5LCBpbnQ4X3QpID0gMDsKLSAgICAgIGJyZWFrOwotICAg
IGNhc2UgVVBCX1RZUEVfU1RSSU5HOgotICAgIGNhc2UgVVBCX1RZUEVfQllURVM6Ci0gICAgICBE
RVJFRihtZW1vcnksIFZBTFVFKSA9IHJiX3N0cl9uZXcyKCIiKTsKLSAgICAgIHJiX2VuY19hc3Nv
Y2lhdGUoREVSRUYobWVtb3J5LCBWQUxVRSksICh0eXBlID09IFVQQl9UWVBFX0JZVEVTKSA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgIGtSdWJ5U3RyaW5nOGJpdEVuY29kaW5nIDoga1J1YnlTdHJp
bmdVdGY4RW5jb2RpbmcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9NRVNTQUdF
OgotICAgICAgREVSRUYobWVtb3J5LCBWQUxVRSkgPSBRbmlsOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBVUEJfVFlQRV9FTlVNOgotICAgIGNhc2UgVVBCX1RZUEVfSU5UMzI6Ci0gICAgICBERVJF
RihtZW1vcnksIGludDMyX3QpID0gMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVf
SU5UNjQ6Ci0gICAgICBERVJFRihtZW1vcnksIGludDY0X3QpID0gMDsKLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgVVBCX1RZUEVfVUlOVDMyOgotICAgICAgREVSRUYobWVtb3J5LCB1aW50MzJfdCkg
PSAwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5UNjQ6Ci0gICAgICBERVJF
RihtZW1vcnksIHVpbnQ2NF90KSA9IDA7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgYnJlYWs7Ci0gIH0KLX0KLQotdm9pZCBuYXRpdmVfc2xvdF9tYXJrKHVwYl9maWVsZHR5cGVf
dCB0eXBlLCB2b2lkKiBtZW1vcnkpIHsKLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBVUEJf
VFlQRV9TVFJJTkc6Ci0gICAgY2FzZSBVUEJfVFlQRV9CWVRFUzoKLSAgICBjYXNlIFVQQl9UWVBF
X01FU1NBR0U6Ci0gICAgICByYl9nY19tYXJrKERFUkVGKG1lbW9yeSwgVkFMVUUpKTsKLSAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi12b2lkIG5hdGl2
ZV9zbG90X2R1cCh1cGJfZmllbGR0eXBlX3QgdHlwZSwgdm9pZCogdG8sIHZvaWQqIGZyb20pIHsK
LSAgbWVtY3B5KHRvLCBmcm9tLCBuYXRpdmVfc2xvdF9zaXplKHR5cGUpKTsKLX0KLQotdm9pZCBu
YXRpdmVfc2xvdF9kZWVwX2NvcHkodXBiX2ZpZWxkdHlwZV90IHR5cGUsIHZvaWQqIHRvLCB2b2lk
KiBmcm9tKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVVBCX1RZUEVfU1RSSU5HOgot
ICAgIGNhc2UgVVBCX1RZUEVfQllURVM6IHsKLSAgICAgIFZBTFVFIGZyb21fdmFsID0gREVSRUYo
ZnJvbSwgVkFMVUUpOwotICAgICAgREVSRUYodG8sIFZBTFVFKSA9IChmcm9tX3ZhbCAhPSBRbmls
KSA/Ci0gICAgICAgICAgcmJfZnVuY2FsbChmcm9tX3ZhbCwgcmJfaW50ZXJuKCJkdXAiKSwgMCkg
OiBRbmlsOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVVBCX1RZUEVfTUVTU0FHRTog
ewotICAgICAgVkFMVUUgZnJvbV92YWwgPSBERVJFRihmcm9tLCBWQUxVRSk7Ci0gICAgICBERVJF
Rih0bywgVkFMVUUpID0gKGZyb21fdmFsICE9IFFuaWwpID8KLSAgICAgICAgICBNZXNzYWdlX2Rl
ZXBfY29weShmcm9tX3ZhbCkgOiBRbmlsOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1
bHQ6Ci0gICAgICBtZW1jcHkodG8sIGZyb20sIG5hdGl2ZV9zbG90X3NpemUodHlwZSkpOwotICB9
Ci19Ci0KLWJvb2wgbmF0aXZlX3Nsb3RfZXEodXBiX2ZpZWxkdHlwZV90IHR5cGUsIHZvaWQqIG1l
bTEsIHZvaWQqIG1lbTIpIHsKLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9T
VFJJTkc6Ci0gICAgY2FzZSBVUEJfVFlQRV9CWVRFUzoKLSAgICBjYXNlIFVQQl9UWVBFX01FU1NB
R0U6IHsKLSAgICAgIFZBTFVFIHZhbDEgPSBERVJFRihtZW0xLCBWQUxVRSk7Ci0gICAgICBWQUxV
RSB2YWwyID0gREVSRUYobWVtMiwgVkFMVUUpOwotICAgICAgVkFMVUUgcmV0ID0gcmJfZnVuY2Fs
bCh2YWwxLCByYl9pbnRlcm4oIj09IiksIDEsIHZhbDIpOwotICAgICAgcmV0dXJuIHJldCA9PSBR
dHJ1ZTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAhbWVtY21wKG1lbTEsIG1l
bTIsIG5hdGl2ZV9zbG90X3NpemUodHlwZSkpOwotICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBNYXAgZmllbGQgdXRpbGl0aWVzLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY29uc3QgdXBiX21zZ2RlZiogdHJ5Z2V0X21hcF9lbnRyeV9tc2dkZWYoY29uc3QgdXBiX2Zp
ZWxkZGVmKiBmaWVsZCkgewotICBjb25zdCB1cGJfbXNnZGVmKiBzdWJkZWY7Ci0gIGlmICh1cGJf
ZmllbGRkZWZfbGFiZWwoZmllbGQpICE9IFVQQl9MQUJFTF9SRVBFQVRFRCB8fAotICAgICAgdXBi
X2ZpZWxkZGVmX3R5cGUoZmllbGQpICE9IFVQQl9UWVBFX01FU1NBR0UpIHsKLSAgICByZXR1cm4g
TlVMTDsKLSAgfQotICBzdWJkZWYgPSB1cGJfZmllbGRkZWZfbXNnc3ViZGVmKGZpZWxkKTsKLSAg
cmV0dXJuIHVwYl9tc2dkZWZfbWFwZW50cnkoc3ViZGVmKSA/IHN1YmRlZiA6IE5VTEw7Ci19Ci0K
LWNvbnN0IHVwYl9tc2dkZWYgKm1hcF9lbnRyeV9tc2dkZWYoY29uc3QgdXBiX2ZpZWxkZGVmKiBm
aWVsZCkgewotICBjb25zdCB1cGJfbXNnZGVmKiBzdWJkZWYgPSB0cnlnZXRfbWFwX2VudHJ5X21z
Z2RlZihmaWVsZCk7Ci0gIGFzc2VydChzdWJkZWYpOwotICByZXR1cm4gc3ViZGVmOwotfQotCi1i
b29sIGlzX21hcF9maWVsZChjb25zdCB1cGJfZmllbGRkZWYgKmZpZWxkKSB7Ci0gIHJldHVybiB0
cnlnZXRfbWFwX2VudHJ5X21zZ2RlZihmaWVsZCkgIT0gTlVMTDsKLX0KLQotY29uc3QgdXBiX2Zp
ZWxkZGVmKiBtYXBfZmllbGRfa2V5KGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQpIHsKLSAgY29u
c3QgdXBiX21zZ2RlZiogc3ViZGVmID0gbWFwX2VudHJ5X21zZ2RlZihmaWVsZCk7Ci0gIHJldHVy
biBtYXBfZW50cnlfa2V5KHN1YmRlZik7Ci19Ci0KLWNvbnN0IHVwYl9maWVsZGRlZiogbWFwX2Zp
ZWxkX3ZhbHVlKGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQpIHsKLSAgY29uc3QgdXBiX21zZ2Rl
Ziogc3ViZGVmID0gbWFwX2VudHJ5X21zZ2RlZihmaWVsZCk7Ci0gIHJldHVybiBtYXBfZW50cnlf
dmFsdWUoc3ViZGVmKTsKLX0KLQotY29uc3QgdXBiX2ZpZWxkZGVmKiBtYXBfZW50cnlfa2V5KGNv
bnN0IHVwYl9tc2dkZWYqIG1zZ2RlZikgewotICBjb25zdCB1cGJfZmllbGRkZWYqIGtleV9maWVs
ZCA9IHVwYl9tc2dkZWZfaXRvZihtc2dkZWYsIE1BUF9LRVlfRklFTEQpOwotICBhc3NlcnQoa2V5
X2ZpZWxkICE9IE5VTEwpOwotICByZXR1cm4ga2V5X2ZpZWxkOwotfQotCi1jb25zdCB1cGJfZmll
bGRkZWYqIG1hcF9lbnRyeV92YWx1ZShjb25zdCB1cGJfbXNnZGVmKiBtc2dkZWYpIHsKLSAgY29u
c3QgdXBiX2ZpZWxkZGVmKiB2YWx1ZV9maWVsZCA9IHVwYl9tc2dkZWZfaXRvZihtc2dkZWYsIE1B
UF9WQUxVRV9GSUVMRCk7Ci0gIGFzc2VydCh2YWx1ZV9maWVsZCAhPSBOVUxMKTsKLSAgcmV0dXJu
IHZhbHVlX2ZpZWxkOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWVtb3J5IGxh
eW91dCBtYW5hZ2VtZW50LgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIHNpemVf
dCBhbGlnbl91cF90byhzaXplX3Qgb2Zmc2V0LCBzaXplX3QgZ3JhbnVsYXJpdHkpIHsKLSAgLy8g
R3JhbnVsYXJpdHkgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KLSAgcmV0dXJuIChvZmZzZXQgKyBn
cmFudWxhcml0eSAtIDEpICYgfihncmFudWxhcml0eSAtIDEpOwotfQotCi1NZXNzYWdlTGF5b3V0
KiBjcmVhdGVfbGF5b3V0KGNvbnN0IHVwYl9tc2dkZWYqIG1zZ2RlZikgewotICBNZXNzYWdlTGF5
b3V0KiBsYXlvdXQgPSBBTExPQyhNZXNzYWdlTGF5b3V0KTsKLSAgaW50IG5maWVsZHMgPSB1cGJf
bXNnZGVmX251bWZpZWxkcyhtc2dkZWYpOwotICB1cGJfbXNnX2ZpZWxkX2l0ZXIgaXQ7Ci0gIHVw
Yl9tc2dfb25lb2ZfaXRlciBvaXQ7Ci0gIHNpemVfdCBvZmYgPSAwOwotCi0gIGxheW91dC0+Zmll
bGRzID0gQUxMT0NfTihNZXNzYWdlRmllbGQsIG5maWVsZHMpOwotCi0gIGZvciAodXBiX21zZ19m
aWVsZF9iZWdpbigmaXQsIG1zZ2RlZik7Ci0gICAgICAgIXVwYl9tc2dfZmllbGRfZG9uZSgmaXQp
OwotICAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaXQpKSB7Ci0gICAgY29uc3QgdXBiX2ZpZWxk
ZGVmKiBmaWVsZCA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaXQpOwotICAgIHNpemVfdCBmaWVsZF9z
aXplOwotCi0gICAgaWYgKHVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YoZmllbGQpKSB7Ci0g
ICAgICAvLyBPbmVvZnMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBiZWxvdy4KLSAgICAgIGNvbnRp
bnVlOwotICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIHxmaWVsZF9zaXplfCBieXRlcyBmb3IgdGhp
cyBmaWVsZCBpbiB0aGUgbGF5b3V0LgotICAgIGZpZWxkX3NpemUgPSAwOwotICAgIGlmICh1cGJf
ZmllbGRkZWZfbGFiZWwoZmllbGQpID09IFVQQl9MQUJFTF9SRVBFQVRFRCkgewotICAgICAgZmll
bGRfc2l6ZSA9IHNpemVvZihWQUxVRSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZpZWxkX3NpemUg
PSBuYXRpdmVfc2xvdF9zaXplKHVwYl9maWVsZGRlZl90eXBlKGZpZWxkKSk7Ci0gICAgfQotICAg
IC8vIEFsaWduIGN1cnJlbnQgb2Zmc2V0IHVwIHRvIHxzaXplfCBncmFudWxhcml0eS4KLSAgICBv
ZmYgPSBhbGlnbl91cF90byhvZmYsIGZpZWxkX3NpemUpOwotICAgIGxheW91dC0+ZmllbGRzW3Vw
Yl9maWVsZGRlZl9pbmRleChmaWVsZCldLm9mZnNldCA9IG9mZjsKLSAgICBsYXlvdXQtPmZpZWxk
c1t1cGJfZmllbGRkZWZfaW5kZXgoZmllbGQpXS5jYXNlX29mZnNldCA9Ci0gICAgICAgIE1FU1NB
R0VfRklFTERfTk9fQ0FTRTsKLSAgICBvZmYgKz0gZmllbGRfc2l6ZTsKLSAgfQotCi0gIC8vIEhh
bmRsZSBvbmVvZnMgbm93IC0tIHdlIGl0ZXJhdGUgb3ZlciBvbmVvZnMgc3BlY2lmaWNhbGx5IGFu
ZCBhbGxvY2F0ZSBvbmx5Ci0gIC8vIG9uZSBzbG90IHBlciBvbmVvZi4KLSAgLy8KLSAgLy8gV2Ug
YXNzaWduIGFsbCB2YWx1ZSBzbG90cyBmaXJzdCwgdGhlbiBwYWNrIHRoZSAnY2FzZScgZmllbGRz
IGF0IHRoZSBlbmQsCi0gIC8vIHNpbmNlIGluIHRoZSBjb21tb24gY2FzZSAobW9kZXJuIDY0LWJp
dCBwbGF0Zm9ybSkgdGhlc2UgYXJlIDggYnl0ZXMgYW5kIDQKLSAgLy8gYnl0ZXMgcmVzcGVjdGl2
ZWx5IGFuZCB3ZSB3YW50IHRvIGF2b2lkIGFsaWdubWVudCBvdmVyaGVhZC4KLSAgLy8KLSAgLy8g
Tm90ZSB0aGF0IHdlIHJlc2VydmUgNCBieXRlcyAoYSB1aW50MzIpIHBlciAnY2FzZScgc2xvdCBi
ZWNhdXNlIHRoZSB2YWx1ZQotICAvLyBzcGFjZSBmb3Igb25lb2YgY2FzZXMgaXMgY29uY2VwdHVh
bGx5IGFzIHdpZGUgYXMgZmllbGQgdGFnIG51bWJlcnMuIEluCi0gIC8vIHByYWN0aWNlLCBpdCdz
IHVubGlrZWx5IHRoYXQgYSBvbmVvZiB3b3VsZCBoYXZlIG1vcmUgdGhhbiBlLmcuIDI1NiBvciA2
NEsKLSAgLy8gbWVtYmVycyAoOCBvciAxNiBiaXRzIHJlc3BlY3RpdmVseSksIHNvIGNvbmNlaXZh
Ymx5IHdlIGNvdWxkIGFzc2lnbgotICAvLyBjb25zZWN1dGl2ZSBjYXNlIG51bWJlcnMgYW5kIHRo
ZW4gcGljayBhIHNtYWxsZXIgb25lb2YgY2FzZSBzbG90IHNpemUsIGJ1dAotICAvLyB0aGUgY29t
cGxleGl0eSB0byBpbXBsZW1lbnQgdGhpcyBpbmRpcmVjdGlvbiBpcyBwcm9iYWJseSBub3Qgd29y
dGh3aGlsZS4KLSAgZm9yICh1cGJfbXNnX29uZW9mX2JlZ2luKCZvaXQsIG1zZ2RlZik7Ci0gICAg
ICAgIXVwYl9tc2dfb25lb2ZfZG9uZSgmb2l0KTsKLSAgICAgICB1cGJfbXNnX29uZW9mX25leHQo
Jm9pdCkpIHsKLSAgICBjb25zdCB1cGJfb25lb2ZkZWYqIG9uZW9mID0gdXBiX21zZ19pdGVyX29u
ZW9mKCZvaXQpOwotICAgIHVwYl9vbmVvZl9pdGVyIGZpdDsKLQotICAgIC8vIEFsd2F5cyBhbGxv
Y2F0ZSBOQVRJVkVfU0xPVF9NQVhfU0laRSBieXRlcywgYnV0IHNoYXJlIHRoZSBzbG90IGJldHdl
ZW4KLSAgICAvLyBhbGwgZmllbGRzLgotICAgIHNpemVfdCBmaWVsZF9zaXplID0gTkFUSVZFX1NM
T1RfTUFYX1NJWkU7Ci0gICAgLy8gQWxpZ24gdGhlIG9mZnNldC4KLSAgICBvZmYgPSBhbGlnbl91
cF90byhvZmYsIGZpZWxkX3NpemUpOwotICAgIC8vIEFzc2lnbiBhbGwgZmllbGRzIGluIHRoZSBv
bmVvZiB0aGlzIHNhbWUgb2Zmc2V0LgotICAgIGZvciAodXBiX29uZW9mX2JlZ2luKCZmaXQsIG9u
ZW9mKTsKLSAgICAgICAgICF1cGJfb25lb2ZfZG9uZSgmZml0KTsKLSAgICAgICAgIHVwYl9vbmVv
Zl9uZXh0KCZmaXQpKSB7Ci0gICAgICBjb25zdCB1cGJfZmllbGRkZWYqIGZpZWxkID0gdXBiX29u
ZW9mX2l0ZXJfZmllbGQoJmZpdCk7Ci0gICAgICBsYXlvdXQtPmZpZWxkc1t1cGJfZmllbGRkZWZf
aW5kZXgoZmllbGQpXS5vZmZzZXQgPSBvZmY7Ci0gICAgfQotICAgIG9mZiArPSBmaWVsZF9zaXpl
OwotICB9Ci0KLSAgLy8gTm93IHRoZSBjYXNlIGZpZWxkcy4KLSAgZm9yICh1cGJfbXNnX29uZW9m
X2JlZ2luKCZvaXQsIG1zZ2RlZik7Ci0gICAgICAgIXVwYl9tc2dfb25lb2ZfZG9uZSgmb2l0KTsK
LSAgICAgICB1cGJfbXNnX29uZW9mX25leHQoJm9pdCkpIHsKLSAgICBjb25zdCB1cGJfb25lb2Zk
ZWYqIG9uZW9mID0gdXBiX21zZ19pdGVyX29uZW9mKCZvaXQpOwotICAgIHVwYl9vbmVvZl9pdGVy
IGZpdDsKLQotICAgIHNpemVfdCBmaWVsZF9zaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAv
LyBBbGlnbiB0aGUgb2Zmc2V0LgotICAgIG9mZiA9IChvZmYgKyBmaWVsZF9zaXplIC0gMSkgJiB+
KGZpZWxkX3NpemUgLSAxKTsKLSAgICAvLyBBc3NpZ24gYWxsIGZpZWxkcyBpbiB0aGUgb25lb2Yg
dGhpcyBzYW1lIG9mZnNldC4KLSAgICBmb3IgKHVwYl9vbmVvZl9iZWdpbigmZml0LCBvbmVvZik7
Ci0gICAgICAgICAhdXBiX29uZW9mX2RvbmUoJmZpdCk7Ci0gICAgICAgICB1cGJfb25lb2ZfbmV4
dCgmZml0KSkgewotICAgICAgY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZCA9IHVwYl9vbmVvZl9p
dGVyX2ZpZWxkKCZmaXQpOwotICAgICAgbGF5b3V0LT5maWVsZHNbdXBiX2ZpZWxkZGVmX2luZGV4
KGZpZWxkKV0uY2FzZV9vZmZzZXQgPSBvZmY7Ci0gICAgfQotICAgIG9mZiArPSBmaWVsZF9zaXpl
OwotICB9Ci0KLSAgbGF5b3V0LT5zaXplID0gb2ZmOwotCi0gIGxheW91dC0+bXNnZGVmID0gbXNn
ZGVmOwotICB1cGJfbXNnZGVmX3JlZihsYXlvdXQtPm1zZ2RlZiwgJmxheW91dC0+bXNnZGVmKTsK
LQotICByZXR1cm4gbGF5b3V0OwotfQotCi12b2lkIGZyZWVfbGF5b3V0KE1lc3NhZ2VMYXlvdXQq
IGxheW91dCkgewotICB4ZnJlZShsYXlvdXQtPmZpZWxkcyk7Ci0gIHVwYl9tc2dkZWZfdW5yZWYo
bGF5b3V0LT5tc2dkZWYsICZsYXlvdXQtPm1zZ2RlZik7Ci0gIHhmcmVlKGxheW91dCk7Ci19Ci0K
LVZBTFVFIGZpZWxkX3R5cGVfY2xhc3MoY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZCkgewotICBW
QUxVRSB0eXBlX2NsYXNzID0gUW5pbDsKLSAgaWYgKHVwYl9maWVsZGRlZl90eXBlKGZpZWxkKSA9
PSBVUEJfVFlQRV9NRVNTQUdFKSB7Ci0gICAgVkFMVUUgc3VibXNnZGVzYyA9Ci0gICAgICAgIGdl
dF9kZWZfb2JqKHVwYl9maWVsZGRlZl9zdWJkZWYoZmllbGQpKTsKLSAgICB0eXBlX2NsYXNzID0g
RGVzY3JpcHRvcl9tc2djbGFzcyhzdWJtc2dkZXNjKTsKLSAgfSBlbHNlIGlmICh1cGJfZmllbGRk
ZWZfdHlwZShmaWVsZCkgPT0gVVBCX1RZUEVfRU5VTSkgewotICAgIFZBTFVFIHN1YmVudW1kZXNj
ID0KLSAgICAgICAgZ2V0X2RlZl9vYmoodXBiX2ZpZWxkZGVmX3N1YmRlZihmaWVsZCkpOwotICAg
IHR5cGVfY2xhc3MgPSBFbnVtRGVzY3JpcHRvcl9lbnVtbW9kdWxlKHN1YmVudW1kZXNjKTsKLSAg
fQotICByZXR1cm4gdHlwZV9jbGFzczsKLX0KLQotc3RhdGljIHZvaWQqIHNsb3RfbWVtb3J5KE1l
c3NhZ2VMYXlvdXQqIGxheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lk
KiBzdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiog
ZmllbGQpIHsKLSAgcmV0dXJuICgodWludDhfdCAqKXN0b3JhZ2UpICsKLSAgICAgIGxheW91dC0+
ZmllbGRzW3VwYl9maWVsZGRlZl9pbmRleChmaWVsZCldLm9mZnNldDsKLX0KLQotc3RhdGljIHVp
bnQzMl90KiBzbG90X29uZW9mX2Nhc2UoTWVzc2FnZUxheW91dCogbGF5b3V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogc3RvcmFnZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQpIHsKLSAgcmV0
dXJuICh1aW50MzJfdCAqKSgoKHVpbnQ4X3QgKilzdG9yYWdlKSArCi0gICAgICBsYXlvdXQtPmZp
ZWxkc1t1cGJfZmllbGRkZWZfaW5kZXgoZmllbGQpXS5jYXNlX29mZnNldCk7Ci19Ci0KLQotVkFM
VUUgbGF5b3V0X2dldChNZXNzYWdlTGF5b3V0KiBsYXlvdXQsCi0gICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQqIHN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiog
ZmllbGQpIHsKLSAgdm9pZCogbWVtb3J5ID0gc2xvdF9tZW1vcnkobGF5b3V0LCBzdG9yYWdlLCBm
aWVsZCk7Ci0gIHVpbnQzMl90KiBvbmVvZl9jYXNlID0gc2xvdF9vbmVvZl9jYXNlKGxheW91dCwg
c3RvcmFnZSwgZmllbGQpOwotCi0gIGlmICh1cGJfZmllbGRkZWZfY29udGFpbmluZ29uZW9mKGZp
ZWxkKSkgewotICAgIGlmICgqb25lb2ZfY2FzZSAhPSB1cGJfZmllbGRkZWZfbnVtYmVyKGZpZWxk
KSkgewotICAgICAgcmV0dXJuIFFuaWw7Ci0gICAgfQotICAgIHJldHVybiBuYXRpdmVfc2xvdF9n
ZXQodXBiX2ZpZWxkZGVmX3R5cGUoZmllbGQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmllbGRfdHlwZV9jbGFzcyhmaWVsZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1v
cnkpOwotICB9IGVsc2UgaWYgKHVwYl9maWVsZGRlZl9sYWJlbChmaWVsZCkgPT0gVVBCX0xBQkVM
X1JFUEVBVEVEKSB7Ci0gICAgcmV0dXJuICooKFZBTFVFICopbWVtb3J5KTsKLSAgfSBlbHNlIHsK
LSAgICByZXR1cm4gbmF0aXZlX3Nsb3RfZ2V0KHVwYl9maWVsZGRlZl90eXBlKGZpZWxkKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX3R5cGVfY2xhc3MoZmllbGQpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWVtb3J5KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBjaGVj
a19yZXBlYXRlZF9maWVsZF90eXBlKFZBTFVFIHZhbCwgY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVs
ZCkgewotICBSZXBlYXRlZEZpZWxkKiBzZWxmOwotICBhc3NlcnQodXBiX2ZpZWxkZGVmX2xhYmVs
KGZpZWxkKSA9PSBVUEJfTEFCRUxfUkVQRUFURUQpOwotCi0gIGlmICghUkJfVFlQRV9QKHZhbCwg
VF9EQVRBKSB8fCAhUlRZUEVEREFUQV9QKHZhbCkgfHwKLSAgICAgIFJUWVBFRERBVEFfVFlQRSh2
YWwpICE9ICZSZXBlYXRlZEZpZWxkX3R5cGUpIHsKLSAgICByYl9yYWlzZShyYl9lVHlwZUVycm9y
LCAiRXhwZWN0ZWQgcmVwZWF0ZWQgZmllbGQgYXJyYXkiKTsKLSAgfQotCi0gIHNlbGYgPSBydWJ5
X3RvX1JlcGVhdGVkRmllbGQodmFsKTsKLSAgaWYgKHNlbGYtPmZpZWxkX3R5cGUgIT0gdXBiX2Zp
ZWxkZGVmX3R5cGUoZmllbGQpKSB7Ci0gICAgcmJfcmFpc2UocmJfZVR5cGVFcnJvciwgIlJlcGVh
dGVkIGZpZWxkIGFycmF5IGhhcyB3cm9uZyBlbGVtZW50IHR5cGUiKTsKLSAgfQotCi0gIGlmIChz
ZWxmLT5maWVsZF90eXBlID09IFVQQl9UWVBFX01FU1NBR0UgfHwKLSAgICAgIHNlbGYtPmZpZWxk
X3R5cGUgPT0gVVBCX1RZUEVfRU5VTSkgewotICAgIGlmIChzZWxmLT5maWVsZF90eXBlX2NsYXNz
ICE9Ci0gICAgICAgIGdldF9kZWZfb2JqKHVwYl9maWVsZGRlZl9zdWJkZWYoZmllbGQpKSkgewot
ICAgICAgcmJfcmFpc2UocmJfZVR5cGVFcnJvciwKLSAgICAgICAgICAgICAgICJSZXBlYXRlZCBm
aWVsZCBhcnJheSBoYXMgd3JvbmcgbWVzc2FnZS9lbnVtIGNsYXNzIik7Ci0gICAgfQotICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIGNoZWNrX21hcF9maWVsZF90eXBlKFZBTFVFIHZhbCwgY29uc3QgdXBi
X2ZpZWxkZGVmKiBmaWVsZCkgewotICBjb25zdCB1cGJfZmllbGRkZWYqIGtleV9maWVsZCA9IG1h
cF9maWVsZF9rZXkoZmllbGQpOwotICBjb25zdCB1cGJfZmllbGRkZWYqIHZhbHVlX2ZpZWxkID0g
bWFwX2ZpZWxkX3ZhbHVlKGZpZWxkKTsKLSAgTWFwKiBzZWxmOwotCi0gIGlmICghUkJfVFlQRV9Q
KHZhbCwgVF9EQVRBKSB8fCAhUlRZUEVEREFUQV9QKHZhbCkgfHwKLSAgICAgIFJUWVBFRERBVEFf
VFlQRSh2YWwpICE9ICZNYXBfdHlwZSkgewotICAgIHJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsICJF
eHBlY3RlZCBNYXAgaW5zdGFuY2UiKTsKLSAgfQotCi0gIHNlbGYgPSBydWJ5X3RvX01hcCh2YWwp
OwotICBpZiAoc2VsZi0+a2V5X3R5cGUgIT0gdXBiX2ZpZWxkZGVmX3R5cGUoa2V5X2ZpZWxkKSkg
ewotICAgIHJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsICJNYXAga2V5IHR5cGUgZG9lcyBub3QgbWF0
Y2ggZmllbGQncyBrZXkgdHlwZSIpOwotICB9Ci0gIGlmIChzZWxmLT52YWx1ZV90eXBlICE9IHVw
Yl9maWVsZGRlZl90eXBlKHZhbHVlX2ZpZWxkKSkgewotICAgIHJiX3JhaXNlKHJiX2VUeXBlRXJy
b3IsICJNYXAgdmFsdWUgdHlwZSBkb2VzIG5vdCBtYXRjaCBmaWVsZCdzIHZhbHVlIHR5cGUiKTsK
LSAgfQotICBpZiAodXBiX2ZpZWxkZGVmX3R5cGUodmFsdWVfZmllbGQpID09IFVQQl9UWVBFX01F
U1NBR0UgfHwKLSAgICAgIHVwYl9maWVsZGRlZl90eXBlKHZhbHVlX2ZpZWxkKSA9PSBVUEJfVFlQ
RV9FTlVNKSB7Ci0gICAgaWYgKHNlbGYtPnZhbHVlX3R5cGVfY2xhc3MgIT0KLSAgICAgICAgZ2V0
X2RlZl9vYmoodXBiX2ZpZWxkZGVmX3N1YmRlZih2YWx1ZV9maWVsZCkpKSB7Ci0gICAgICByYl9y
YWlzZShyYl9lVHlwZUVycm9yLAotICAgICAgICAgICAgICAgIk1hcCB2YWx1ZSB0eXBlIGhhcyB3
cm9uZyBtZXNzYWdlL2VudW0gY2xhc3MiKTsKLSAgICB9Ci0gIH0KLX0KLQotCi12b2lkIGxheW91
dF9zZXQoTWVzc2FnZUxheW91dCogbGF5b3V0LAotICAgICAgICAgICAgICAgIHZvaWQqIHN0b3Jh
Z2UsCi0gICAgICAgICAgICAgICAgY29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZCwKLSAgICAgICAg
ICAgICAgICBWQUxVRSB2YWwpIHsKLSAgdm9pZCogbWVtb3J5ID0gc2xvdF9tZW1vcnkobGF5b3V0
LCBzdG9yYWdlLCBmaWVsZCk7Ci0gIHVpbnQzMl90KiBvbmVvZl9jYXNlID0gc2xvdF9vbmVvZl9j
YXNlKGxheW91dCwgc3RvcmFnZSwgZmllbGQpOwotCi0gIGlmICh1cGJfZmllbGRkZWZfY29udGFp
bmluZ29uZW9mKGZpZWxkKSkgewotICAgIGlmICh2YWwgPT0gUW5pbCkgewotICAgICAgLy8gQXNz
aWduaW5nIG5pbCB0byBhIG9uZW9mIGZpZWxkIGNsZWFycyB0aGUgb25lb2YgY29tcGxldGVseS4K
LSAgICAgICpvbmVvZl9jYXNlID0gT05FT0ZfQ0FTRV9OT05FOwotICAgICAgbWVtc2V0KG1lbW9y
eSwgMCwgTkFUSVZFX1NMT1RfTUFYX1NJWkUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBUaGUg
dHJhbnNpdGlvbiBiZXR3ZWVuIGZpZWxkIHR5cGVzIGZvciBhIHNpbmdsZSBvbmVvZiAodW5pb24p
IHNsb3QgaXMKLSAgICAgIC8vIHNvbWV3aGF0IGNvbXBsZXggYmVjYXVzZSB3ZSBuZWVkIHRvIGVu
c3VyZSB0aGF0IGEgR0MgdHJpZ2dlcmVkIGF0IGFueQotICAgICAgLy8gcG9pbnQgYnkgYSBjYWxs
IGludG8gdGhlIFJ1YnkgVk0gc2VlcyBhIHZhbGlkIHN0YXRlIGZvciB0aGlzIGZpZWxkIGFuZAot
ICAgICAgLy8gZG9lcyBub3QgZWl0aGVyIGdvIG9mZiBpbnRvIHRoZSB3ZWVkcyAoZm9sbG93aW5n
IHdoYXQgaXQgdGhpbmtzIGlzIGEKLSAgICAgIC8vIFZBTFVFIGJ1dCBpcyBhY3R1YWxseSBhIGRp
ZmZlcmVudCBmaWVsZCB0eXBlKSBvciBtaXNzIGFuIG9iamVjdCAoc2VlaW5nCi0gICAgICAvLyB3
aGF0IGl0IHRoaW5rcyBpcyBhIHByaW1pdGl2ZSBmaWVsZCBidXQgaXMgYWN0dWFsbHkgYSBWQUxV
RSBmb3IgdGhlIG5ldwotICAgICAgLy8gZmllbGQgdHlwZSkuCi0gICAgICAvLwotICAgICAgLy8g
SW4gb3JkZXIgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGJlIHNhZmUsIHRoZSBvbmVvZiBjYXNlIHNs
b3QgbXVzdCBiZSBpbgotICAgICAgLy8gc3luYyB3aXRoIHRoZSB2YWx1ZSBzbG90IHdoZW5ldmVy
IHRoZSBSdWJ5IFZNIGhhcyBiZWVuIGNhbGxlZC4gVGh1cywgd2UKLSAgICAgIC8vIHVzZSBuYXRp
dmVfc2xvdF9zZXRfdmFsdWVfYW5kX2Nhc2UoKSwgd2hpY2ggZW5zdXJlcyB0aGF0IGJvdGggdGhl
IHZhbHVlCi0gICAgICAvLyBhbmQgY2FzZSBudW1iZXIgYXJlIGFsdGVyZWQgYXRvbWljYWxseSAo
dy5yLnQuIHRoZSBSdWJ5IFZNKS4KLSAgICAgIG5hdGl2ZV9zbG90X3NldF92YWx1ZV9hbmRfY2Fz
ZSgKLSAgICAgICAgICB1cGJfZmllbGRkZWZfdHlwZShmaWVsZCksIGZpZWxkX3R5cGVfY2xhc3Mo
ZmllbGQpLAotICAgICAgICAgIG1lbW9yeSwgdmFsLAotICAgICAgICAgIG9uZW9mX2Nhc2UsIHVw
Yl9maWVsZGRlZl9udW1iZXIoZmllbGQpKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoaXNfbWFwX2Zp
ZWxkKGZpZWxkKSkgewotICAgIGNoZWNrX21hcF9maWVsZF90eXBlKHZhbCwgZmllbGQpOwotICAg
IERFUkVGKG1lbW9yeSwgVkFMVUUpID0gdmFsOwotICB9IGVsc2UgaWYgKHVwYl9maWVsZGRlZl9s
YWJlbChmaWVsZCkgPT0gVVBCX0xBQkVMX1JFUEVBVEVEKSB7Ci0gICAgY2hlY2tfcmVwZWF0ZWRf
ZmllbGRfdHlwZSh2YWwsIGZpZWxkKTsKLSAgICBERVJFRihtZW1vcnksIFZBTFVFKSA9IHZhbDsK
LSAgfSBlbHNlIHsKLSAgICBuYXRpdmVfc2xvdF9zZXQodXBiX2ZpZWxkZGVmX3R5cGUoZmllbGQp
LCBmaWVsZF90eXBlX2NsYXNzKGZpZWxkKSwKLSAgICAgICAgICAgICAgICAgICAgbWVtb3J5LCB2
YWwpOwotICB9Ci19Ci0KLXZvaWQgbGF5b3V0X2luaXQoTWVzc2FnZUxheW91dCogbGF5b3V0LAot
ICAgICAgICAgICAgICAgICB2b2lkKiBzdG9yYWdlKSB7Ci0gIHVwYl9tc2dfZmllbGRfaXRlciBp
dDsKLSAgZm9yICh1cGJfbXNnX2ZpZWxkX2JlZ2luKCZpdCwgbGF5b3V0LT5tc2dkZWYpOwotICAg
ICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJml0KTsKLSAgICAgICB1cGJfbXNnX2ZpZWxkX25leHQo
Jml0KSkgewotICAgIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQgPSB1cGJfbXNnX2l0ZXJfZmll
bGQoJml0KTsKLSAgICB2b2lkKiBtZW1vcnkgPSBzbG90X21lbW9yeShsYXlvdXQsIHN0b3JhZ2Us
IGZpZWxkKTsKLSAgICB1aW50MzJfdCogb25lb2ZfY2FzZSA9IHNsb3Rfb25lb2ZfY2FzZShsYXlv
dXQsIHN0b3JhZ2UsIGZpZWxkKTsKLQotICAgIGlmICh1cGJfZmllbGRkZWZfY29udGFpbmluZ29u
ZW9mKGZpZWxkKSkgewotICAgICAgbWVtc2V0KG1lbW9yeSwgMCwgTkFUSVZFX1NMT1RfTUFYX1NJ
WkUpOwotICAgICAgKm9uZW9mX2Nhc2UgPSBPTkVPRl9DQVNFX05PTkU7Ci0gICAgfSBlbHNlIGlm
IChpc19tYXBfZmllbGQoZmllbGQpKSB7Ci0gICAgICBWQUxVRSBtYXAgPSBRbmlsOwotCi0gICAg
ICBjb25zdCB1cGJfZmllbGRkZWYqIGtleV9maWVsZCA9IG1hcF9maWVsZF9rZXkoZmllbGQpOwot
ICAgICAgY29uc3QgdXBiX2ZpZWxkZGVmKiB2YWx1ZV9maWVsZCA9IG1hcF9maWVsZF92YWx1ZShm
aWVsZCk7Ci0gICAgICBWQUxVRSB0eXBlX2NsYXNzID0gZmllbGRfdHlwZV9jbGFzcyh2YWx1ZV9m
aWVsZCk7Ci0KLSAgICAgIGlmICh0eXBlX2NsYXNzICE9IFFuaWwpIHsKLSAgICAgICAgVkFMVUUg
YXJnc1szXSA9IHsKLSAgICAgICAgICBmaWVsZHR5cGVfdG9fcnVieSh1cGJfZmllbGRkZWZfdHlw
ZShrZXlfZmllbGQpKSwKLSAgICAgICAgICBmaWVsZHR5cGVfdG9fcnVieSh1cGJfZmllbGRkZWZf
dHlwZSh2YWx1ZV9maWVsZCkpLAotICAgICAgICAgIHR5cGVfY2xhc3MsCi0gICAgICAgIH07Ci0g
ICAgICAgIG1hcCA9IHJiX2NsYXNzX25ld19pbnN0YW5jZSgzLCBhcmdzLCBjTWFwKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIFZBTFVFIGFyZ3NbMl0gPSB7Ci0gICAgICAgICAgZmllbGR0eXBl
X3RvX3J1YnkodXBiX2ZpZWxkZGVmX3R5cGUoa2V5X2ZpZWxkKSksCi0gICAgICAgICAgZmllbGR0
eXBlX3RvX3J1YnkodXBiX2ZpZWxkZGVmX3R5cGUodmFsdWVfZmllbGQpKSwKLSAgICAgICAgfTsK
LSAgICAgICAgbWFwID0gcmJfY2xhc3NfbmV3X2luc3RhbmNlKDIsIGFyZ3MsIGNNYXApOwotICAg
ICAgfQotCi0gICAgICBERVJFRihtZW1vcnksIFZBTFVFKSA9IG1hcDsKLSAgICB9IGVsc2UgaWYg
KHVwYl9maWVsZGRlZl9sYWJlbChmaWVsZCkgPT0gVVBCX0xBQkVMX1JFUEVBVEVEKSB7Ci0gICAg
ICBWQUxVRSBhcnkgPSBRbmlsOwotCi0gICAgICBWQUxVRSB0eXBlX2NsYXNzID0gZmllbGRfdHlw
ZV9jbGFzcyhmaWVsZCk7Ci0KLSAgICAgIGlmICh0eXBlX2NsYXNzICE9IFFuaWwpIHsKLSAgICAg
ICAgVkFMVUUgYXJnc1syXSA9IHsKLSAgICAgICAgICBmaWVsZHR5cGVfdG9fcnVieSh1cGJfZmll
bGRkZWZfdHlwZShmaWVsZCkpLAotICAgICAgICAgIHR5cGVfY2xhc3MsCi0gICAgICAgIH07Ci0g
ICAgICAgIGFyeSA9IHJiX2NsYXNzX25ld19pbnN0YW5jZSgyLCBhcmdzLCBjUmVwZWF0ZWRGaWVs
ZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBWQUxVRSBhcmdzWzFdID0geyBmaWVsZHR5cGVf
dG9fcnVieSh1cGJfZmllbGRkZWZfdHlwZShmaWVsZCkpIH07Ci0gICAgICAgIGFyeSA9IHJiX2Ns
YXNzX25ld19pbnN0YW5jZSgxLCBhcmdzLCBjUmVwZWF0ZWRGaWVsZCk7Ci0gICAgICB9Ci0KLSAg
ICAgIERFUkVGKG1lbW9yeSwgVkFMVUUpID0gYXJ5OwotICAgIH0gZWxzZSB7Ci0gICAgICBuYXRp
dmVfc2xvdF9pbml0KHVwYl9maWVsZGRlZl90eXBlKGZpZWxkKSwgbWVtb3J5KTsKLSAgICB9Ci0g
IH0KLX0KLQotdm9pZCBsYXlvdXRfbWFyayhNZXNzYWdlTGF5b3V0KiBsYXlvdXQsIHZvaWQqIHN0
b3JhZ2UpIHsKLSAgdXBiX21zZ19maWVsZF9pdGVyIGl0OwotICBmb3IgKHVwYl9tc2dfZmllbGRf
YmVnaW4oJml0LCBsYXlvdXQtPm1zZ2RlZik7Ci0gICAgICAgIXVwYl9tc2dfZmllbGRfZG9uZSgm
aXQpOwotICAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaXQpKSB7Ci0gICAgY29uc3QgdXBiX2Zp
ZWxkZGVmKiBmaWVsZCA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaXQpOwotICAgIHZvaWQqIG1lbW9y
eSA9IHNsb3RfbWVtb3J5KGxheW91dCwgc3RvcmFnZSwgZmllbGQpOwotICAgIHVpbnQzMl90KiBv
bmVvZl9jYXNlID0gc2xvdF9vbmVvZl9jYXNlKGxheW91dCwgc3RvcmFnZSwgZmllbGQpOwotCi0g
ICAgaWYgKHVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YoZmllbGQpKSB7Ci0gICAgICBpZiAo
Km9uZW9mX2Nhc2UgPT0gdXBiX2ZpZWxkZGVmX251bWJlcihmaWVsZCkpIHsKLSAgICAgICAgbmF0
aXZlX3Nsb3RfbWFyayh1cGJfZmllbGRkZWZfdHlwZShmaWVsZCksIG1lbW9yeSk7Ci0gICAgICB9
Ci0gICAgfSBlbHNlIGlmICh1cGJfZmllbGRkZWZfbGFiZWwoZmllbGQpID09IFVQQl9MQUJFTF9S
RVBFQVRFRCkgewotICAgICAgcmJfZ2NfbWFyayhERVJFRihtZW1vcnksIFZBTFVFKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIG5hdGl2ZV9zbG90X21hcmsodXBiX2ZpZWxkZGVmX3R5cGUoZmllbGQp
LCBtZW1vcnkpOwotICAgIH0KLSAgfQotfQotCi12b2lkIGxheW91dF9kdXAoTWVzc2FnZUxheW91
dCogbGF5b3V0LCB2b2lkKiB0bywgdm9pZCogZnJvbSkgewotICB1cGJfbXNnX2ZpZWxkX2l0ZXIg
aXQ7Ci0gIGZvciAodXBiX21zZ19maWVsZF9iZWdpbigmaXQsIGxheW91dC0+bXNnZGVmKTsKLSAg
ICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpdCk7Ci0gICAgICAgdXBiX21zZ19maWVsZF9uZXh0
KCZpdCkpIHsKLSAgICBjb25zdCB1cGJfZmllbGRkZWYqIGZpZWxkID0gdXBiX21zZ19pdGVyX2Zp
ZWxkKCZpdCk7Ci0KLSAgICB2b2lkKiB0b19tZW1vcnkgPSBzbG90X21lbW9yeShsYXlvdXQsIHRv
LCBmaWVsZCk7Ci0gICAgdWludDMyX3QqIHRvX29uZW9mX2Nhc2UgPSBzbG90X29uZW9mX2Nhc2Uo
bGF5b3V0LCB0bywgZmllbGQpOwotICAgIHZvaWQqIGZyb21fbWVtb3J5ID0gc2xvdF9tZW1vcnko
bGF5b3V0LCBmcm9tLCBmaWVsZCk7Ci0gICAgdWludDMyX3QqIGZyb21fb25lb2ZfY2FzZSA9IHNs
b3Rfb25lb2ZfY2FzZShsYXlvdXQsIGZyb20sIGZpZWxkKTsKLQotICAgIGlmICh1cGJfZmllbGRk
ZWZfY29udGFpbmluZ29uZW9mKGZpZWxkKSkgewotICAgICAgaWYgKCpmcm9tX29uZW9mX2Nhc2Ug
PT0gdXBiX2ZpZWxkZGVmX251bWJlcihmaWVsZCkpIHsKLSAgICAgICAgKnRvX29uZW9mX2Nhc2Ug
PSAqZnJvbV9vbmVvZl9jYXNlOwotICAgICAgICBuYXRpdmVfc2xvdF9kdXAodXBiX2ZpZWxkZGVm
X3R5cGUoZmllbGQpLCB0b19tZW1vcnksIGZyb21fbWVtb3J5KTsKLSAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGlzX21hcF9maWVsZChmaWVsZCkpIHsKLSAgICAgIERFUkVGKHRvX21lbW9yeSwgVkFM
VUUpID0gTWFwX2R1cChERVJFRihmcm9tX21lbW9yeSwgVkFMVUUpKTsKLSAgICB9IGVsc2UgaWYg
KHVwYl9maWVsZGRlZl9sYWJlbChmaWVsZCkgPT0gVVBCX0xBQkVMX1JFUEVBVEVEKSB7Ci0gICAg
ICBERVJFRih0b19tZW1vcnksIFZBTFVFKSA9IFJlcGVhdGVkRmllbGRfZHVwKERFUkVGKGZyb21f
bWVtb3J5LCBWQUxVRSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBuYXRpdmVfc2xvdF9kdXAodXBi
X2ZpZWxkZGVmX3R5cGUoZmllbGQpLCB0b19tZW1vcnksIGZyb21fbWVtb3J5KTsKLSAgICB9Ci0g
IH0KLX0KLQotdm9pZCBsYXlvdXRfZGVlcF9jb3B5KE1lc3NhZ2VMYXlvdXQqIGxheW91dCwgdm9p
ZCogdG8sIHZvaWQqIGZyb20pIHsKLSAgdXBiX21zZ19maWVsZF9pdGVyIGl0OwotICBmb3IgKHVw
Yl9tc2dfZmllbGRfYmVnaW4oJml0LCBsYXlvdXQtPm1zZ2RlZik7Ci0gICAgICAgIXVwYl9tc2df
ZmllbGRfZG9uZSgmaXQpOwotICAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaXQpKSB7Ci0gICAg
Y29uc3QgdXBiX2ZpZWxkZGVmKiBmaWVsZCA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaXQpOwotCi0g
ICAgdm9pZCogdG9fbWVtb3J5ID0gc2xvdF9tZW1vcnkobGF5b3V0LCB0bywgZmllbGQpOwotICAg
IHVpbnQzMl90KiB0b19vbmVvZl9jYXNlID0gc2xvdF9vbmVvZl9jYXNlKGxheW91dCwgdG8sIGZp
ZWxkKTsKLSAgICB2b2lkKiBmcm9tX21lbW9yeSA9IHNsb3RfbWVtb3J5KGxheW91dCwgZnJvbSwg
ZmllbGQpOwotICAgIHVpbnQzMl90KiBmcm9tX29uZW9mX2Nhc2UgPSBzbG90X29uZW9mX2Nhc2Uo
bGF5b3V0LCBmcm9tLCBmaWVsZCk7Ci0KLSAgICBpZiAodXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmdv
bmVvZihmaWVsZCkpIHsKLSAgICAgIGlmICgqZnJvbV9vbmVvZl9jYXNlID09IHVwYl9maWVsZGRl
Zl9udW1iZXIoZmllbGQpKSB7Ci0gICAgICAgICp0b19vbmVvZl9jYXNlID0gKmZyb21fb25lb2Zf
Y2FzZTsKLSAgICAgICAgbmF0aXZlX3Nsb3RfZGVlcF9jb3B5KHVwYl9maWVsZGRlZl90eXBlKGZp
ZWxkKSwgdG9fbWVtb3J5LCBmcm9tX21lbW9yeSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChp
c19tYXBfZmllbGQoZmllbGQpKSB7Ci0gICAgICBERVJFRih0b19tZW1vcnksIFZBTFVFKSA9Ci0g
ICAgICAgICAgTWFwX2RlZXBfY29weShERVJFRihmcm9tX21lbW9yeSwgVkFMVUUpKTsKLSAgICB9
IGVsc2UgaWYgKHVwYl9maWVsZGRlZl9sYWJlbChmaWVsZCkgPT0gVVBCX0xBQkVMX1JFUEVBVEVE
KSB7Ci0gICAgICBERVJFRih0b19tZW1vcnksIFZBTFVFKSA9Ci0gICAgICAgICAgUmVwZWF0ZWRG
aWVsZF9kZWVwX2NvcHkoREVSRUYoZnJvbV9tZW1vcnksIFZBTFVFKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIG5hdGl2ZV9zbG90X2RlZXBfY29weSh1cGJfZmllbGRkZWZfdHlwZShmaWVsZCksIHRv
X21lbW9yeSwgZnJvbV9tZW1vcnkpOwotICAgIH0KLSAgfQotfQotCi1WQUxVRSBsYXlvdXRfZXEo
TWVzc2FnZUxheW91dCogbGF5b3V0LCB2b2lkKiBtc2cxLCB2b2lkKiBtc2cyKSB7Ci0gIHVwYl9t
c2dfZmllbGRfaXRlciBpdDsKLSAgZm9yICh1cGJfbXNnX2ZpZWxkX2JlZ2luKCZpdCwgbGF5b3V0
LT5tc2dkZWYpOwotICAgICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJml0KTsKLSAgICAgICB1cGJf
bXNnX2ZpZWxkX25leHQoJml0KSkgewotICAgIGNvbnN0IHVwYl9maWVsZGRlZiogZmllbGQgPSB1
cGJfbXNnX2l0ZXJfZmllbGQoJml0KTsKLQotICAgIHZvaWQqIG1zZzFfbWVtb3J5ID0gc2xvdF9t
ZW1vcnkobGF5b3V0LCBtc2cxLCBmaWVsZCk7Ci0gICAgdWludDMyX3QqIG1zZzFfb25lb2ZfY2Fz
ZSA9IHNsb3Rfb25lb2ZfY2FzZShsYXlvdXQsIG1zZzEsIGZpZWxkKTsKLSAgICB2b2lkKiBtc2cy
X21lbW9yeSA9IHNsb3RfbWVtb3J5KGxheW91dCwgbXNnMiwgZmllbGQpOwotICAgIHVpbnQzMl90
KiBtc2cyX29uZW9mX2Nhc2UgPSBzbG90X29uZW9mX2Nhc2UobGF5b3V0LCBtc2cyLCBmaWVsZCk7
Ci0KLSAgICBpZiAodXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmdvbmVvZihmaWVsZCkpIHsKLSAgICAg
IGlmICgqbXNnMV9vbmVvZl9jYXNlICE9ICptc2cyX29uZW9mX2Nhc2UgfHwKLSAgICAgICAgICAo
Km1zZzFfb25lb2ZfY2FzZSA9PSB1cGJfZmllbGRkZWZfbnVtYmVyKGZpZWxkKSAmJgotICAgICAg
ICAgICAhbmF0aXZlX3Nsb3RfZXEodXBiX2ZpZWxkZGVmX3R5cGUoZmllbGQpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXNnMV9tZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBtc2cyX21lbW9yeSkpKSB7Ci0gICAgICAgIHJldHVybiBRZmFsc2U7Ci0gICAgICB9Ci0gICAg
fSBlbHNlIGlmIChpc19tYXBfZmllbGQoZmllbGQpKSB7Ci0gICAgICBpZiAoIU1hcF9lcShERVJF
Rihtc2cxX21lbW9yeSwgVkFMVUUpLAotICAgICAgICAgICAgICAgICAgREVSRUYobXNnMl9tZW1v
cnksIFZBTFVFKSkpIHsKLSAgICAgICAgcmV0dXJuIFFmYWxzZTsKLSAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKHVwYl9maWVsZGRlZl9sYWJlbChmaWVsZCkgPT0gVVBCX0xBQkVMX1JFUEVBVEVEKSB7
Ci0gICAgICBpZiAoIVJlcGVhdGVkRmllbGRfZXEoREVSRUYobXNnMV9tZW1vcnksIFZBTFVFKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVJFRihtc2cyX21lbW9yeSwgVkFMVUUpKSkg
ewotICAgICAgICByZXR1cm4gUWZhbHNlOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBp
ZiAoIW5hdGl2ZV9zbG90X2VxKHVwYl9maWVsZGRlZl90eXBlKGZpZWxkKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXNnMV9tZW1vcnksIG1zZzJfbWVtb3J5KSkgewotICAgICAgICByZXR1
cm4gUWZhbHNlOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gUXRydWU7Ci19Ci0KLVZB
TFVFIGxheW91dF9oYXNoKE1lc3NhZ2VMYXlvdXQqIGxheW91dCwgdm9pZCogc3RvcmFnZSkgewot
ICB1cGJfbXNnX2ZpZWxkX2l0ZXIgaXQ7Ci0gIHN0X2luZGV4X3QgaCA9IHJiX2hhc2hfc3RhcnQo
MCk7Ci0gIFZBTFVFIGhhc2hfc3ltID0gcmJfaW50ZXJuKCJoYXNoIik7Ci0gIGZvciAodXBiX21z
Z19maWVsZF9iZWdpbigmaXQsIGxheW91dC0+bXNnZGVmKTsKLSAgICAgICAhdXBiX21zZ19maWVs
ZF9kb25lKCZpdCk7Ci0gICAgICAgdXBiX21zZ19maWVsZF9uZXh0KCZpdCkpIHsKLSAgICBjb25z
dCB1cGJfZmllbGRkZWYqIGZpZWxkID0gdXBiX21zZ19pdGVyX2ZpZWxkKCZpdCk7Ci0gICAgVkFM
VUUgZmllbGRfdmFsID0gbGF5b3V0X2dldChsYXlvdXQsIHN0b3JhZ2UsIGZpZWxkKTsKLSAgICBo
ID0gcmJfaGFzaF91aW50KGgsIE5VTTJMT05HKHJiX2Z1bmNhbGwoZmllbGRfdmFsLCBoYXNoX3N5
bSwgMCkpKTsKLSAgfQotICBoID0gcmJfaGFzaF9lbmQoaCk7Ci0KLSAgcmV0dXJuIElOVDJGSVgo
aCk7Ci19Ci0KLVZBTFVFIGxheW91dF9pbnNwZWN0KE1lc3NhZ2VMYXlvdXQqIGxheW91dCwgdm9p
ZCogc3RvcmFnZSkgewotICBWQUxVRSBzdHIgPSByYl9zdHJfbmV3MigiIik7Ci0KLSAgdXBiX21z
Z19maWVsZF9pdGVyIGl0OwotICBib29sIGZpcnN0ID0gdHJ1ZTsKLSAgZm9yICh1cGJfbXNnX2Zp
ZWxkX2JlZ2luKCZpdCwgbGF5b3V0LT5tc2dkZWYpOwotICAgICAgICF1cGJfbXNnX2ZpZWxkX2Rv
bmUoJml0KTsKLSAgICAgICB1cGJfbXNnX2ZpZWxkX25leHQoJml0KSkgewotICAgIGNvbnN0IHVw
Yl9maWVsZGRlZiogZmllbGQgPSB1cGJfbXNnX2l0ZXJfZmllbGQoJml0KTsKLSAgICBWQUxVRSBm
aWVsZF92YWwgPSBsYXlvdXRfZ2V0KGxheW91dCwgc3RvcmFnZSwgZmllbGQpOwotCi0gICAgaWYg
KCFmaXJzdCkgewotICAgICAgc3RyID0gcmJfc3RyX2NhdDIoc3RyLCAiLCAiKTsKLSAgICB9IGVs
c2UgewotICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICB9Ci0gICAgc3RyID0gcmJfc3RyX2NhdDIo
c3RyLCB1cGJfZmllbGRkZWZfbmFtZShmaWVsZCkpOwotICAgIHN0ciA9IHJiX3N0cl9jYXQyKHN0
ciwgIjogIik7Ci0KLSAgICBzdHIgPSByYl9zdHJfYXBwZW5kKHN0ciwgcmJfZnVuY2FsbChmaWVs
ZF92YWwsIHJiX2ludGVybigiaW5zcGVjdCIpLCAwKSk7Ci0gIH0KLQotICByZXR1cm4gc3RyOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9ydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy91cGIuYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9leHQv
Z29vZ2xlL3Byb3RvYnVmX2MvdXBiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0
YTJhMWRiMzBhMzI1YTg3Njk1ZGI2NDI4NzAwNDE5ZDI5MmJhNjkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2V4dC9nb29nbGUvcHJvdG9idWZfYy91
cGIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyODEyICswLDAgQEAKLS8vIEFtYWxnYW1hdGVkIHNv
dXJjZSBmaWxlCi0jaW5jbHVkZSAidXBiLmgiCi0KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5j
bHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsK
LSAgc2l6ZV90IGxlbjsKLSAgY2hhciBzdHJbMV07ICAvKiBOdWxsLXRlcm1pbmF0ZWQgc3RyaW5n
IGRhdGEgZm9sbG93cy4gKi8KLX0gc3RyX3Q7Ci0KLXN0YXRpYyBzdHJfdCAqbmV3c3RyKGNvbnN0
IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pIHsKLSAgc3RyX3QgKnJldCA9IHVwYl9nbWFsbG9jKHNp
emVvZigqcmV0KSArIGxlbik7Ci0gIGlmICghcmV0KSByZXR1cm4gTlVMTDsKLSAgcmV0LT5sZW4g
PSBsZW47Ci0gIG1lbWNweShyZXQtPnN0ciwgZGF0YSwgbGVuKTsKLSAgcmV0LT5zdHJbbGVuXSA9
ICdcMCc7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVzdHIoc3RyX3QgKnMp
IHsgdXBiX2dmcmVlKHMpOyB9Ci0KLS8qIGlzYWxwaGEoKSBldGMuIGZyb20gPGN0eXBlLmg+IGFy
ZSBsb2NhbGUtZGVwZW5kZW50LCB3aGljaCB3ZSBkb24ndCB3YW50LiAqLwotc3RhdGljIGJvb2wg
dXBiX2lzYmV0d2VlbihjaGFyIGMsIGNoYXIgbG93LCBjaGFyIGhpZ2gpIHsKLSAgcmV0dXJuIGMg
Pj0gbG93ICYmIGMgPD0gaGlnaDsKLX0KLQotc3RhdGljIGJvb2wgdXBiX2lzbGV0dGVyKGNoYXIg
YykgewotICByZXR1cm4gdXBiX2lzYmV0d2VlbihjLCAnQScsICdaJykgfHwgdXBiX2lzYmV0d2Vl
bihjLCAnYScsICd6JykgfHwgYyA9PSAnXyc7Ci19Ci0KLXN0YXRpYyBib29sIHVwYl9pc2FscGhh
bnVtKGNoYXIgYykgewotICByZXR1cm4gdXBiX2lzbGV0dGVyKGMpIHx8IHVwYl9pc2JldHdlZW4o
YywgJzAnLCAnOScpOwotfQotCi1zdGF0aWMgYm9vbCB1cGJfaXNpZGVudChjb25zdCBjaGFyICpz
dHIsIHNpemVfdCBsZW4sIGJvb2wgZnVsbCwgdXBiX3N0YXR1cyAqcykgewotICBib29sIHN0YXJ0
ID0gdHJ1ZTsKLSAgc2l6ZV90IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAg
IGNoYXIgYyA9IHN0cltpXTsKLSAgICBpZiAoYyA9PSAnLicpIHsKLSAgICAgIGlmIChzdGFydCB8
fCAhZnVsbCkgewotICAgICAgICB1cGJfc3RhdHVzX3NldGVycmYocywgImludmFsaWQgbmFtZTog
dW5leHBlY3RlZCAnLicgKCVzKSIsIHN0cik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
IH0KLSAgICAgIHN0YXJ0ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7Ci0gICAgICBp
ZiAoIXVwYl9pc2xldHRlcihjKSkgewotICAgICAgICB1cGJfc3RhdHVzX3NldGVycmYoCi0gICAg
ICAgICAgICBzLCAiaW52YWxpZCBuYW1lOiBwYXRoIGNvbXBvbmVudHMgbXVzdCBzdGFydCB3aXRo
IGEgbGV0dGVyICglcykiLAotICAgICAgICAgICAgc3RyKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgfQotICAgICAgc3RhcnQgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgaWYg
KCF1cGJfaXNhbHBoYW51bShjKSkgewotICAgICAgICB1cGJfc3RhdHVzX3NldGVycmYocywgImlu
dmFsaWQgbmFtZTogbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXIgKCVzKSIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0gIHJldHVybiAhc3RhcnQ7Ci19Ci0KLXN0YXRpYyBib29sIHVwYl9pc29uZW9m
KGNvbnN0IHVwYl9yZWZjb3VudGVkICpkZWYpIHsKLSAgcmV0dXJuIGRlZi0+dnRibCA9PSAmdXBi
X29uZW9mZGVmX3Z0Ymw7Ci19Ci0KLXN0YXRpYyBib29sIHVwYl9pc2ZpZWxkKGNvbnN0IHVwYl9y
ZWZjb3VudGVkICpkZWYpIHsKLSAgcmV0dXJuIGRlZi0+dnRibCA9PSAmdXBiX2ZpZWxkZGVmX3Z0
Ymw7Ci19Ci0KLXN0YXRpYyBjb25zdCB1cGJfb25lb2ZkZWYgKnVwYl90cnlnZXRvbmVvZihjb25z
dCB1cGJfcmVmY291bnRlZCAqZGVmKSB7Ci0gIHJldHVybiB1cGJfaXNvbmVvZihkZWYpID8gKGNv
bnN0IHVwYl9vbmVvZmRlZiopZGVmIDogTlVMTDsKLX0KLQotc3RhdGljIGNvbnN0IHVwYl9maWVs
ZGRlZiAqdXBiX3RyeWdldGZpZWxkKGNvbnN0IHVwYl9yZWZjb3VudGVkICpkZWYpIHsKLSAgcmV0
dXJuIHVwYl9pc2ZpZWxkKGRlZikgPyAoY29uc3QgdXBiX2ZpZWxkZGVmKilkZWYgOiBOVUxMOwot
fQotCi0KLS8qIHVwYl9kZWYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXVwYl9kZWZ0eXBlX3QgdXBiX2RlZl90
eXBlKGNvbnN0IHVwYl9kZWYgKmQpIHsgcmV0dXJuIGQtPnR5cGU7IH0KLQotY29uc3QgY2hhciAq
dXBiX2RlZl9mdWxsbmFtZShjb25zdCB1cGJfZGVmICpkKSB7IHJldHVybiBkLT5mdWxsbmFtZTsg
fQotCi1jb25zdCBjaGFyICp1cGJfZGVmX25hbWUoY29uc3QgdXBiX2RlZiAqZCkgewotICBjb25z
dCBjaGFyICpwOwotCi0gIGlmIChkLT5mdWxsbmFtZSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0gZWxzZSBpZiAoKHAgPSBzdHJyY2hyKGQtPmZ1bGxuYW1lLCAnLicpKSA9PSBOVUxM
KSB7Ci0gICAgLyogTm8gJy4nIGluIHRoZSBuYW1lLCByZXR1cm4gdGhlIGZ1bGwgc3RyaW5nLiAq
LwotICAgIHJldHVybiBkLT5mdWxsbmFtZTsKLSAgfSBlbHNlIHsKLSAgICAvKiBSZXR1cm4gb25l
IHBhc3QgdGhlIGxhc3QgJy4nLiAqLwotICAgIHJldHVybiBwICsgMTsKLSAgfQotfQotCi1ib29s
IHVwYl9kZWZfc2V0ZnVsbG5hbWUodXBiX2RlZiAqZGVmLCBjb25zdCBjaGFyICpmdWxsbmFtZSwg
dXBiX3N0YXR1cyAqcykgewotICBhc3NlcnQoIXVwYl9kZWZfaXNmcm96ZW4oZGVmKSk7Ci0gIGlm
ICghdXBiX2lzaWRlbnQoZnVsbG5hbWUsIHN0cmxlbihmdWxsbmFtZSksIHRydWUsIHMpKSB7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVsbG5hbWUgPSB1cGJfZ3N0cmR1cChmdWxsbmFt
ZSk7Ci0gIGlmICghZnVsbG5hbWUpIHsKLSAgICB1cGJfdXBiZXJyX3NldG9vbShzKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB1cGJfZ2ZyZWUoKHZvaWQqKWRlZi0+ZnVsbG5hbWUpOwot
ICBkZWYtPmZ1bGxuYW1lID0gZnVsbG5hbWU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1jb25zdCB1
cGJfZmlsZWRlZiAqdXBiX2RlZl9maWxlKGNvbnN0IHVwYl9kZWYgKmQpIHsgcmV0dXJuIGQtPmZp
bGU7IH0KLQotdXBiX2RlZiAqdXBiX2RlZl9kdXAoY29uc3QgdXBiX2RlZiAqZGVmLCBjb25zdCB2
b2lkICpvKSB7Ci0gIHN3aXRjaCAoZGVmLT50eXBlKSB7Ci0gICAgY2FzZSBVUEJfREVGX01TRzoK
LSAgICAgIHJldHVybiB1cGJfbXNnZGVmX3VwY2FzdF9tdXRhYmxlKAotICAgICAgICAgIHVwYl9t
c2dkZWZfZHVwKHVwYl9kb3duY2FzdF9tc2dkZWYoZGVmKSwgbykpOwotICAgIGNhc2UgVVBCX0RF
Rl9GSUVMRDoKLSAgICAgIHJldHVybiB1cGJfZmllbGRkZWZfdXBjYXN0X211dGFibGUoCi0gICAg
ICAgICAgdXBiX2ZpZWxkZGVmX2R1cCh1cGJfZG93bmNhc3RfZmllbGRkZWYoZGVmKSwgbykpOwot
ICAgIGNhc2UgVVBCX0RFRl9FTlVNOgotICAgICAgcmV0dXJuIHVwYl9lbnVtZGVmX3VwY2FzdF9t
dXRhYmxlKAotICAgICAgICAgIHVwYl9lbnVtZGVmX2R1cCh1cGJfZG93bmNhc3RfZW51bWRlZihk
ZWYpLCBvKSk7Ci0gICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIE5VTEw7Ci0gIH0K
LX0KLQotc3RhdGljIGJvb2wgdXBiX2RlZl9pbml0KHVwYl9kZWYgKmRlZiwgdXBiX2RlZnR5cGVf
dCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB1cGJfcmVmY291
bnRlZF92dGJsICp2dGJsLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm93
bmVyKSB7Ci0gIGlmICghdXBiX3JlZmNvdW50ZWRfaW5pdCh1cGJfZGVmX3VwY2FzdF9tdXRhYmxl
KGRlZiksIHZ0YmwsIG93bmVyKSkgcmV0dXJuIGZhbHNlOwotICBkZWYtPnR5cGUgPSB0eXBlOwot
ICBkZWYtPmZ1bGxuYW1lID0gTlVMTDsKLSAgZGVmLT5jYW1lX2Zyb21fdXNlciA9IGZhbHNlOwot
ICBkZWYtPmZpbGUgPSBOVUxMOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgdXBi
X2RlZl91bmluaXQodXBiX2RlZiAqZGVmKSB7Ci0gIHVwYl9nZnJlZSgodm9pZCopZGVmLT5mdWxs
bmFtZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICptc2dkZWZfbmFtZShjb25zdCB1cGJfbXNn
ZGVmICptKSB7Ci0gIGNvbnN0IGNoYXIgKm5hbWUgPSB1cGJfZGVmX2Z1bGxuYW1lKHVwYl9tc2dk
ZWZfdXBjYXN0KG0pKTsKLSAgcmV0dXJuIG5hbWUgPyBuYW1lIDogIihhbm9ueW1vdXMpIjsKLX0K
LQotc3RhdGljIGJvb2wgdXBiX3ZhbGlkYXRlX2ZpZWxkKHVwYl9maWVsZGRlZiAqZiwgdXBiX3N0
YXR1cyAqcykgewotICBpZiAodXBiX2ZpZWxkZGVmX25hbWUoZikgPT0gTlVMTCB8fCB1cGJfZmll
bGRkZWZfbnVtYmVyKGYpID09IDApIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzLCAiZmll
bGRkZWYgbXVzdCBoYXZlIG5hbWUgYW5kIG51bWJlciBzZXQiKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLQotICBpZiAoIWYtPnR5cGVfaXNfc2V0XykgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJy
bXNnKHMsICJmaWVsZGRlZiB0eXBlIHdhcyBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICBpZiAodXBiX2ZpZWxkZGVmX2xhenkoZikgJiYKLSAgICAgIHVwYl9m
aWVsZGRlZl9kZXNjcmlwdG9ydHlwZShmKSAhPSBVUEJfREVTQ1JJUFRPUl9UWVBFX01FU1NBR0Up
IHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICJvbmx5IGxlbmd0aC1kZWxpbWl0ZWQgc3VibWVzc2FnZSBmaWVsZHMgbWF5IGJlIGxhenkiKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAodXBiX2ZpZWxkZGVmX2hhc3N1YmRlZihm
KSkgewotICAgIGNvbnN0IHVwYl9kZWYgKnN1YmRlZjsKLQotICAgIGlmIChmLT5zdWJkZWZfaXNf
c3ltYm9saWMpIHsKLSAgICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzLCAiZmllbGQgJyVzLiVzJyBo
YXMgbm90IGJlZW4gcmVzb2x2ZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2RlZl9u
YW1lKGYtPm1zZy5kZWYpLCB1cGJfZmllbGRkZWZfbmFtZShmKSk7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgc3ViZGVmID0gdXBiX2ZpZWxkZGVmX3N1YmRlZihmKTsKLSAgICBp
ZiAoc3ViZGVmID09IE5VTEwpIHsKLSAgICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzLCAiZmllbGQg
JXMuJXMgaXMgbWlzc2luZyByZXF1aXJlZCBzdWJkZWYiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIG1zZ2RlZl9uYW1lKGYtPm1zZy5kZWYpLCB1cGJfZmllbGRkZWZfbmFtZShmKSk7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF1cGJfZGVmX2lzZnJvemVuKHN1YmRl
ZikgJiYgIXN1YmRlZi0+Y2FtZV9mcm9tX3VzZXIpIHsKLSAgICAgIHVwYl9zdGF0dXNfc2V0ZXJy
ZihzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJkZWYgb2YgZmllbGQgJXMuJXMgaXMg
bm90IGZyb3plbiBvciBiZWluZyBmcm96ZW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1z
Z2RlZl9uYW1lKGYtPm1zZy5kZWYpLCB1cGJfZmllbGRkZWZfbmFtZShmKSk7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHVwYl9maWVsZGRlZl90eXBlKGYpID09IFVQ
Ql9UWVBFX0VOVU0pIHsKLSAgICBib29sIGhhc19kZWZhdWx0X25hbWUgPSB1cGJfZmllbGRkZWZf
ZW51bWhhc2RlZmF1bHRzdHIoZik7Ci0gICAgYm9vbCBoYXNfZGVmYXVsdF9udW1iZXIgPSB1cGJf
ZmllbGRkZWZfZW51bWhhc2RlZmF1bHRpbnQzMihmKTsKLQotICAgIC8qIFByZXZpb3VzbHkgdmVy
aWZpZWQgYnkgdXBiX3ZhbGlkYXRlX2VudW1kZWYoKS4gKi8KLSAgICBhc3NlcnQodXBiX2VudW1k
ZWZfbnVtdmFscyh1cGJfZmllbGRkZWZfZW51bXN1YmRlZihmKSkgPiAwKTsKLQotICAgIC8qIFdl
J3ZlIGFscmVhZHkgdmFsaWRhdGVkIHRoYXQgd2UgaGF2ZSBhbiBhc3NvY2lhdGVkIGVudW1kZWYg
YW5kIHRoYXQgaXQKLSAgICAgKiBoYXMgYXQgbGVhc3Qgb25lIG1lbWJlciwgc28gYXQgbGVhc3Qg
b25lIG9mIHRoZXNlIHNob3VsZCBiZSB0cnVlLgotICAgICAqIEJlY2F1c2UgaWYgdGhlIHVzZXIg
ZGlkbid0IHNldCBhbnl0aGluZywgd2UnbGwgcGljayB1cCB0aGUgZW51bSdzCi0gICAgICogZGVm
YXVsdCwgYnV0IGlmIHRoZSB1c2VyICpkaWQqIHNldCBzb21ldGhpbmcgd2Ugc2hvdWxkIGF0IGxl
YXN0IHBpY2sgdXAKLSAgICAgKiB0aGUgb25lIHRoZXkgc2V0IChpbnQzMiBvciBzdHJpbmcpLiAq
LwotICAgIGFzc2VydChoYXNfZGVmYXVsdF9uYW1lIHx8IGhhc19kZWZhdWx0X251bWJlcik7Ci0K
LSAgICBpZiAoIWhhc19kZWZhdWx0X25hbWUpIHsKLSAgICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICJlbnVtIGRlZmF1bHQgZm9yIGZpZWxkICVzLiVz
ICglZCkgaXMgbm90IGluIHRoZSBlbnVtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtc2dk
ZWZfbmFtZShmLT5tc2cuZGVmKSwgdXBiX2ZpZWxkZGVmX25hbWUoZiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgdXBiX2ZpZWxkZGVmX2RlZmF1bHRpbnQzMihmKSk7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFoYXNfZGVmYXVsdF9udW1iZXIpIHsKLSAgICAgIHVw
Yl9zdGF0dXNfc2V0ZXJyZihzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJlbnVtIGRlZmF1
bHQgZm9yIGZpZWxkICVzLiVzICglcykgaXMgbm90IGluIHRoZSBlbnVtIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBtc2dkZWZfbmFtZShmLT5tc2cuZGVmKSwgdXBiX2ZpZWxkZGVmX25hbWUo
ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2ZpZWxkZGVmX2RlZmF1bHRzdHIoZiwg
TlVMTCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qIExpZnQgdGhlIGVm
ZmVjdGl2ZSBudW1lcmljIGRlZmF1bHQgaW50byB0aGUgZmllbGQncyBkZWZhdWx0IHNsb3QsIGlu
IGNhc2UKLSAgICAgKiB3ZSB3ZXJlIG9ubHkgZ2V0dGluZyBpdCAiYnkgcmVmZXJlbmNlIiBmcm9t
IHRoZSBlbnVtZGVmLiAqLwotICAgIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0aW50MzIoZiwgdXBi
X2ZpZWxkZGVmX2RlZmF1bHRpbnQzMihmKSk7Ci0gIH0KLQotICAvKiBFbnN1cmUgdGhhdCBNYXBF
bnRyeSBzdWJtZXNzYWdlcyBvbmx5IGFwcGVhciBhcyByZXBlYXRlZCBmaWVsZHMsIG5vdAotICAg
KiBvcHRpb25hbC9yZXF1aXJlZCAoc2luZ3VsYXIpIGZpZWxkcy4gKi8KLSAgaWYgKHVwYl9maWVs
ZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX01FU1NBR0UgJiYKLSAgICAgIHVwYl9maWVsZGRlZl9t
c2dzdWJkZWYoZikgIT0gTlVMTCkgewotICAgIGNvbnN0IHVwYl9tc2dkZWYgKnN1YmRlZiA9IHVw
Yl9maWVsZGRlZl9tc2dzdWJkZWYoZik7Ci0gICAgaWYgKHVwYl9tc2dkZWZfbWFwZW50cnkoc3Vi
ZGVmKSAmJiAhdXBiX2ZpZWxkZGVmX2lzc2VxKGYpKSB7Ci0gICAgICB1cGJfc3RhdHVzX3NldGVy
cmYocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiRmllbGQgJXMgcmVmZXJzIHRvIG1hcGVu
dHJ5IG1lc3NhZ2UgYnV0IGlzIG5vdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgImEgcmVw
ZWF0ZWQgZmllbGQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9maWVsZGRlZl9uYW1l
KGYpID8gdXBiX2ZpZWxkZGVmX25hbWUoZikgOgotICAgICAgICAgICAgICAgICAgICAgICAgICIo
dW5uYW1lZCkiKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgdXBiX3ZhbGlkYXRlX2VudW1kZWYoY29uc3QgdXBiX2Vu
dW1kZWYgKmUsIHVwYl9zdGF0dXMgKnMpIHsKLSAgaWYgKHVwYl9lbnVtZGVmX251bXZhbHMoZSkg
PT0gMCkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzLCAiZW51bSAlcyBoYXMgbm8gbWVtYmVy
cyAobXVzdCBoYXZlIGF0IGxlYXN0IG9uZSkiLAotICAgICAgICAgICAgICAgICAgICAgICB1cGJf
ZW51bWRlZl9mdWxsbmFtZShlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLS8qIEFsbCBzdWJtZXNzYWdlIGZpZWxkcyBhcmUgbG93ZXIgdGhhbiBhbGwg
b3RoZXIgZmllbGRzLgotICogU2Vjb25kbHksIGZpZWxkcyBhcmUgaW5jcmVhc2luZyBpbiBvcmRl
ci4gKi8KLXVpbnQzMl90IGZpZWxkX3JhbmsoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHVp
bnQzMl90IHJldCA9IHVwYl9maWVsZGRlZl9udW1iZXIoZik7Ci0gIGNvbnN0IHVpbnQzMl90IGhp
Z2hfYml0ID0gMSA8PCAzMDsKLSAgYXNzZXJ0KHJldCA8IGhpZ2hfYml0KTsKLSAgaWYgKCF1cGJf
ZmllbGRkZWZfaXNzdWJtc2coZikpCi0gICAgcmV0IHw9IGhpZ2hfYml0OwotICByZXR1cm4gcmV0
OwotfQotCi1pbnQgY21wX2ZpZWxkcyhjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpIHsK
LSAgY29uc3QgdXBiX2ZpZWxkZGVmICpmMSA9ICoodXBiX2ZpZWxkZGVmKmNvbnN0KilwMTsKLSAg
Y29uc3QgdXBiX2ZpZWxkZGVmICpmMiA9ICoodXBiX2ZpZWxkZGVmKmNvbnN0KilwMjsKLSAgcmV0
dXJuIGZpZWxkX3JhbmsoZjEpIC0gZmllbGRfcmFuayhmMik7Ci19Ci0KLXN0YXRpYyBib29sIGFz
c2lnbl9tc2dfaW5kaWNlcyh1cGJfbXNnZGVmICptLCB1cGJfc3RhdHVzICpzKSB7Ci0gIC8qIFNv
cnQgZmllbGRzLiAgdXBiIGludGVybmFsbHkgcmVsaWVzIG9uIFVQQl9UWVBFX01FU1NBR0UgZmll
bGRzIGhhdmluZyB0aGUKLSAgICogbG93ZXN0IGluZGV4ZXMsIGJ1dCB3ZSBkbyBub3QgcHVibGlj
bHkgZ3VhcmFudGVlIHRoaXMuICovCi0gIHVwYl9tc2dfZmllbGRfaXRlciBqOwotICBpbnQgaTsK
LSAgdWludDMyX3Qgc2VsZWN0b3I7Ci0gIGludCBuID0gdXBiX21zZ2RlZl9udW1maWVsZHMobSk7
Ci0gIHVwYl9maWVsZGRlZiAqKmZpZWxkczsKLQotICBpZiAobiA9PSAwKSB7Ci0gICAgbS0+c2Vs
ZWN0b3JfY291bnQgPSBVUEJfU1RBVElDX1NFTEVDVE9SX0NPVU5UOwotICAgIG0tPnN1Ym1zZ19m
aWVsZF9jb3VudCA9IDA7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBmaWVsZHMgPSB1cGJf
Z21hbGxvYyhuICogc2l6ZW9mKCpmaWVsZHMpKTsKLSAgaWYgKCFmaWVsZHMpIHsKLSAgICB1cGJf
dXBiZXJyX3NldG9vbShzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBtLT5zdWJtc2df
ZmllbGRfY291bnQgPSAwOwotICBmb3IoaSA9IDAsIHVwYl9tc2dfZmllbGRfYmVnaW4oJmosIG0p
OwotICAgICAgIXVwYl9tc2dfZmllbGRfZG9uZSgmaik7Ci0gICAgICB1cGJfbXNnX2ZpZWxkX25l
eHQoJmopLCBpKyspIHsKLSAgICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmllbGQo
JmopOwotICAgIGFzc2VydChmLT5tc2cuZGVmID09IG0pOwotICAgIGlmICghdXBiX3ZhbGlkYXRl
X2ZpZWxkKGYsIHMpKSB7Ci0gICAgICB1cGJfZ2ZyZWUoZmllbGRzKTsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgaWYgKHVwYl9maWVsZGRlZl9pc3N1Ym1zZyhmKSkgewotICAgICAg
bS0+c3VibXNnX2ZpZWxkX2NvdW50Kys7Ci0gICAgfQotICAgIGZpZWxkc1tpXSA9IGY7Ci0gIH0K
LQotICBxc29ydChmaWVsZHMsIG4sIHNpemVvZigqZmllbGRzKSwgY21wX2ZpZWxkcyk7Ci0KLSAg
c2VsZWN0b3IgPSBVUEJfU1RBVElDX1NFTEVDVE9SX0NPVU5UICsgbS0+c3VibXNnX2ZpZWxkX2Nv
dW50OwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgdXBiX2ZpZWxkZGVmICpmID0g
ZmllbGRzW2ldOwotICAgIGYtPmluZGV4XyA9IGk7Ci0gICAgZi0+c2VsZWN0b3JfYmFzZSA9IHNl
bGVjdG9yICsgdXBiX2hhbmRsZXJzX3NlbGVjdG9yYmFzZW9mZnNldChmKTsKLSAgICBzZWxlY3Rv
ciArPSB1cGJfaGFuZGxlcnNfc2VsZWN0b3Jjb3VudChmKTsKLSAgfQotICBtLT5zZWxlY3Rvcl9j
b3VudCA9IHNlbGVjdG9yOwotCi0jaWZuZGVmIE5ERUJVRwotICB7Ci0gICAgLyogVmVyaWZ5IHRo
YXQgYWxsIHNlbGVjdG9ycyBmb3IgdGhlIG1lc3NhZ2UgYXJlIGRpc3RpbmN0LiAqLwotI2RlZmlu
ZSBUUlkodHlwZSkgXAotICAgIGlmICh1cGJfaGFuZGxlcnNfZ2V0c2VsZWN0b3IoZiwgdHlwZSwg
JnNlbCkpIHVwYl9pbnR0YWJsZV9pbnNlcnQoJnQsIHNlbCwgdik7Ci0KLSAgICB1cGJfaW50dGFi
bGUgdDsKLSAgICB1cGJfdmFsdWUgdjsKLSAgICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0KLSAgICB1
cGJfaW50dGFibGVfaW5pdCgmdCwgVVBCX0NUWVBFX0JPT0wpOwotICAgIHYgPSB1cGJfdmFsdWVf
Ym9vbCh0cnVlKTsKLSAgICB1cGJfaW50dGFibGVfaW5zZXJ0KCZ0LCBVUEJfU1RBUlRNU0dfU0VM
RUNUT1IsIHYpOwotICAgIHVwYl9pbnR0YWJsZV9pbnNlcnQoJnQsIFVQQl9FTkRNU0dfU0VMRUNU
T1IsIHYpOwotICAgIGZvcih1cGJfbXNnX2ZpZWxkX2JlZ2luKCZqLCBtKTsKLSAgICAgICAgIXVw
Yl9tc2dfZmllbGRfZG9uZSgmaik7Ci0gICAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaikpIHsK
LSAgICAgIHVwYl9maWVsZGRlZiAqZiA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaik7Ci0gICAgICAv
KiBUaGVzZSBjYWxscyB3aWxsIGFzc2VydC1mYWlsIGluIHVwYl90YWJsZSBpZiB0aGUgdmFsdWUg
YWxyZWFkeQotICAgICAgICogZXhpc3RzLiAqLwotICAgICAgVFJZKFVQQl9IQU5ETEVSX0lOVDMy
KTsKLSAgICAgIFRSWShVUEJfSEFORExFUl9JTlQ2NCkKLSAgICAgIFRSWShVUEJfSEFORExFUl9V
SU5UMzIpCi0gICAgICBUUlkoVVBCX0hBTkRMRVJfVUlOVDY0KQotICAgICAgVFJZKFVQQl9IQU5E
TEVSX0ZMT0FUKQotICAgICAgVFJZKFVQQl9IQU5ETEVSX0RPVUJMRSkKLSAgICAgIFRSWShVUEJf
SEFORExFUl9CT09MKQotICAgICAgVFJZKFVQQl9IQU5ETEVSX1NUQVJUU1RSKQotICAgICAgVFJZ
KFVQQl9IQU5ETEVSX1NUUklORykKLSAgICAgIFRSWShVUEJfSEFORExFUl9FTkRTVFIpCi0gICAg
ICBUUlkoVVBCX0hBTkRMRVJfU1RBUlRTVUJNU0cpCi0gICAgICBUUlkoVVBCX0hBTkRMRVJfRU5E
U1VCTVNHKQotICAgICAgVFJZKFVQQl9IQU5ETEVSX1NUQVJUU0VRKQotICAgICAgVFJZKFVQQl9I
QU5ETEVSX0VORFNFUSkKLSAgICB9Ci0gICAgdXBiX2ludHRhYmxlX3VuaW5pdCgmdCk7Ci0gIH0K
LSN1bmRlZiBUUlkKLSNlbmRpZgotCi0gIHVwYl9nZnJlZShmaWVsZHMpOwotICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBfdXBiX2RlZl92YWxpZGF0ZSh1cGJfZGVmICpjb25zdCpkZWZzLCBzaXpl
X3QgbiwgdXBiX3N0YXR1cyAqcykgewotICBzaXplX3QgaTsKLQotICAvKiBGaXJzdCBwZXJmb3Jt
IHZhbGlkYXRpb24sIGluIHR3byBwYXNzZXMgc28gd2UgY2FuIGNoZWNrIHRoYXQgd2UgaGF2ZSBh
Ci0gICAqIHRyYW5zaXRpdmUgY2xvc3VyZSB3aXRob3V0IG5lZWRpbmcgdG8gc2VhcmNoLiAqLwot
ICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgdXBiX2RlZiAqZGVmID0gZGVmc1tpXTsK
LSAgICBpZiAodXBiX2RlZl9pc2Zyb3plbihkZWYpKSB7Ci0gICAgICAvKiBDb3VsZCByZWxheCB0
aGlzIHJlcXVpcmVtZW50IGlmIGl0J3MgYW5ub3lpbmcuICovCi0gICAgICB1cGJfc3RhdHVzX3Nl
dGVycm1zZyhzLCAiZGVmIGlzIGFscmVhZHkgZnJvemVuIik7Ci0gICAgICBnb3RvIGVycjsKLSAg
ICB9IGVsc2UgaWYgKGRlZi0+dHlwZSA9PSBVUEJfREVGX0ZJRUxEKSB7Ci0gICAgICB1cGJfc3Rh
dHVzX3NldGVycm1zZyhzLCAic3RhbmRhbG9uZSBmaWVsZGRlZnMgY2FuIG5vdCBiZSBmcm96ZW4i
KTsKLSAgICAgIGdvdG8gZXJyOwotICAgIH0gZWxzZSBpZiAoZGVmLT50eXBlID09IFVQQl9ERUZf
RU5VTSkgewotICAgICAgaWYgKCF1cGJfdmFsaWRhdGVfZW51bWRlZih1cGJfZHluY2FzdF9lbnVt
ZGVmKGRlZiksIHMpKSB7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAvKiBTZXQgbm93IHRvIGRldGVjdCB0cmFuc2l0aXZlIGNsb3N1cmUgaW4gdGhlIHNl
Y29uZCBwYXNzLiAqLwotICAgICAgZGVmLT5jYW1lX2Zyb21fdXNlciA9IHRydWU7Ci0gICAgfQot
ICB9Ci0KLSAgLyogU2Vjb25kIHBhc3Mgb2YgdmFsaWRhdGlvbi4gIEFsc28gYXNzaWduIHNlbGVj
dG9yIGJhc2VzIGFuZCBpbmRleGVzLCBhbmQKLSAgICogY29tcGFjdCB0YWJsZXMuICovCi0gIGZv
ciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICB1cGJfZGVmICpkZWYgPSBkZWZzW2ldOwotICAg
IHVwYl9tc2dkZWYgKm0gPSB1cGJfZHluY2FzdF9tc2dkZWZfbXV0YWJsZShkZWYpOwotICAgIHVw
Yl9lbnVtZGVmICplID0gdXBiX2R5bmNhc3RfZW51bWRlZl9tdXRhYmxlKGRlZik7Ci0gICAgaWYg
KG0pIHsKLSAgICAgIHVwYl9pbnR0YWJsZV9jb21wYWN0KCZtLT5pdG9mKTsKLSAgICAgIGlmICgh
YXNzaWduX21zZ19pbmRpY2VzKG0sIHMpKSB7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoZSkgewotICAgICAgdXBiX2ludHRhYmxlX2NvbXBhY3QoJmUtPml0b24p
OwotICAgIH0KLSAgfQotCi0gIHJldHVybiB0cnVlOwotCi1lcnI6Ci0gIGZvciAoaSA9IDA7IGkg
PCBuOyBpKyspIHsKLSAgICB1cGJfZGVmICpkZWYgPSBkZWZzW2ldOwotICAgIGRlZi0+Y2FtZV9m
cm9tX3VzZXIgPSBmYWxzZTsKLSAgfQotICBhc3NlcnQoIShzICYmIHVwYl9vayhzKSkpOwotICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgdXBiX2RlZl9mcmVlemUodXBiX2RlZiAqY29uc3QqIGRl
ZnMsIHNpemVfdCBuLCB1cGJfc3RhdHVzICpzKSB7Ci0gIC8qIERlZiBncmFwaCBjb250YWlucyBG
aWVsZERlZnMgYmV0d2VlbiBlYWNoIE1lc3NhZ2VEZWYsIHNvIGRvdWJsZSB0aGUKLSAgICogbGlt
aXQuICovCi0gIGNvbnN0IHNpemVfdCBtYXhkZXB0aCA9IFVQQl9NQVhfTUVTU0FHRV9ERVBUSCAq
IDI7Ci0KLSAgaWYgKCFfdXBiX2RlZl92YWxpZGF0ZShkZWZzLCBuLCBzKSkgewotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotCi0KLSAgLyogVmFsaWRhdGlvbiBhbGwgcGFzc2VkOyBmcmVlemUgdGhl
IG9iamVjdHMuICovCi0gIHJldHVybiB1cGJfcmVmY291bnRlZF9mcmVlemUoKHVwYl9yZWZjb3Vu
dGVkICpjb25zdCopZGVmcywgbiwgcywgbWF4ZGVwdGgpOwotfQotCi0KLS8qIHVwYl9lbnVtZGVm
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0KLXN0YXRpYyB2b2lkIHVwYl9lbnVtZGVmX2ZyZWUodXBiX3JlZmNvdW50ZWQg
KnIpIHsKLSAgdXBiX2VudW1kZWYgKmUgPSAodXBiX2VudW1kZWYqKXI7Ci0gIHVwYl9pbnR0YWJs
ZV9pdGVyIGk7Ci0gIHVwYl9pbnR0YWJsZV9iZWdpbigmaSwgJmUtPml0b24pOwotICBmb3IoIDsg
IXVwYl9pbnR0YWJsZV9kb25lKCZpKTsgdXBiX2ludHRhYmxlX25leHQoJmkpKSB7Ci0gICAgLyog
VG8gY2xlYW4gdXAgdGhlIHVwYl9nc3RyZHVwKCkgZnJvbSB1cGJfZW51bWRlZl9hZGR2YWwoKS4g
Ki8KLSAgICB1cGJfZ2ZyZWUodXBiX3ZhbHVlX2dldGNzdHIodXBiX2ludHRhYmxlX2l0ZXJfdmFs
dWUoJmkpKSk7Ci0gIH0KLSAgdXBiX3N0cnRhYmxlX3VuaW5pdCgmZS0+bnRvaSk7Ci0gIHVwYl9p
bnR0YWJsZV91bmluaXQoJmUtPml0b24pOwotICB1cGJfZGVmX3VuaW5pdCh1cGJfZW51bWRlZl91
cGNhc3RfbXV0YWJsZShlKSk7Ci0gIHVwYl9nZnJlZShlKTsKLX0KLQotY29uc3Qgc3RydWN0IHVw
Yl9yZWZjb3VudGVkX3Z0YmwgdXBiX2VudW1kZWZfdnRibCA9IHtOVUxMLCAmdXBiX2VudW1kZWZf
ZnJlZX07Ci0KLXVwYl9lbnVtZGVmICp1cGJfZW51bWRlZl9uZXcoY29uc3Qgdm9pZCAqb3duZXIp
IHsKLSAgdXBiX2VudW1kZWYgKmUgPSB1cGJfZ21hbGxvYyhzaXplb2YoKmUpKTsKLSAgaWYgKCFl
KSByZXR1cm4gTlVMTDsKLQotICBpZiAoIXVwYl9kZWZfaW5pdCh1cGJfZW51bWRlZl91cGNhc3Rf
bXV0YWJsZShlKSwgVVBCX0RFRl9FTlVNLAotICAgICAgICAgICAgICAgICAgICAmdXBiX2VudW1k
ZWZfdnRibCwgb3duZXIpKSB7Ci0gICAgZ290byBlcnIyOwotICB9Ci0KLSAgaWYgKCF1cGJfc3Ry
dGFibGVfaW5pdCgmZS0+bnRvaSwgVVBCX0NUWVBFX0lOVDMyKSkgZ290byBlcnIyOwotICBpZiAo
IXVwYl9pbnR0YWJsZV9pbml0KCZlLT5pdG9uLCBVUEJfQ1RZUEVfQ1NUUikpIGdvdG8gZXJyMTsK
LSAgcmV0dXJuIGU7Ci0KLWVycjE6Ci0gIHVwYl9zdHJ0YWJsZV91bmluaXQoJmUtPm50b2kpOwot
ZXJyMjoKLSAgdXBiX2dmcmVlKGUpOwotICByZXR1cm4gTlVMTDsKLX0KLQotdXBiX2VudW1kZWYg
KnVwYl9lbnVtZGVmX2R1cChjb25zdCB1cGJfZW51bWRlZiAqZSwgY29uc3Qgdm9pZCAqb3duZXIp
IHsKLSAgdXBiX2VudW1faXRlciBpOwotICB1cGJfZW51bWRlZiAqbmV3X2UgPSB1cGJfZW51bWRl
Zl9uZXcob3duZXIpOwotICBpZiAoIW5ld19lKSByZXR1cm4gTlVMTDsKLSAgZm9yKHVwYl9lbnVt
X2JlZ2luKCZpLCBlKTsgIXVwYl9lbnVtX2RvbmUoJmkpOyB1cGJfZW51bV9uZXh0KCZpKSkgewot
ICAgIGJvb2wgc3VjY2VzcyA9IHVwYl9lbnVtZGVmX2FkZHZhbCgKLSAgICAgICAgbmV3X2UsIHVw
Yl9lbnVtX2l0ZXJfbmFtZSgmaSksdXBiX2VudW1faXRlcl9udW1iZXIoJmkpLCBOVUxMKTsKLSAg
ICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgIHVwYl9lbnVtZGVmX3VucmVmKG5ld19lLCBvd25lcik7
Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG5ld19lOwotfQotCi1i
b29sIHVwYl9lbnVtZGVmX2ZyZWV6ZSh1cGJfZW51bWRlZiAqZSwgdXBiX3N0YXR1cyAqc3RhdHVz
KSB7Ci0gIHVwYl9kZWYgKmQgPSB1cGJfZW51bWRlZl91cGNhc3RfbXV0YWJsZShlKTsKLSAgcmV0
dXJuIHVwYl9kZWZfZnJlZXplKCZkLCAxLCBzdGF0dXMpOwotfQotCi1jb25zdCBjaGFyICp1cGJf
ZW51bWRlZl9mdWxsbmFtZShjb25zdCB1cGJfZW51bWRlZiAqZSkgewotICByZXR1cm4gdXBiX2Rl
Zl9mdWxsbmFtZSh1cGJfZW51bWRlZl91cGNhc3QoZSkpOwotfQotCi1jb25zdCBjaGFyICp1cGJf
ZW51bWRlZl9uYW1lKGNvbnN0IHVwYl9lbnVtZGVmICplKSB7Ci0gIHJldHVybiB1cGJfZGVmX25h
bWUodXBiX2VudW1kZWZfdXBjYXN0KGUpKTsKLX0KLQotYm9vbCB1cGJfZW51bWRlZl9zZXRmdWxs
bmFtZSh1cGJfZW51bWRlZiAqZSwgY29uc3QgY2hhciAqZnVsbG5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgcmV0dXJuIHVwYl9kZWZfc2V0ZnVs
bG5hbWUodXBiX2VudW1kZWZfdXBjYXN0X211dGFibGUoZSksIGZ1bGxuYW1lLCBzKTsKLX0KLQot
Ym9vbCB1cGJfZW51bWRlZl9hZGR2YWwodXBiX2VudW1kZWYgKmUsIGNvbnN0IGNoYXIgKm5hbWUs
IGludDMyX3QgbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqc3RhdHVz
KSB7Ci0gIGNoYXIgKm5hbWUyOwotCi0gIGlmICghdXBiX2lzaWRlbnQobmFtZSwgc3RybGVuKG5h
bWUpLCBmYWxzZSwgc3RhdHVzKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICh1
cGJfZW51bWRlZl9udG9peihlLCBuYW1lLCBOVUxMKSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJy
ZihzdGF0dXMsICJuYW1lICclcycgaXMgYWxyZWFkeSBkZWZpbmVkIiwgbmFtZSk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKCF1cGJfc3RydGFibGVfaW5zZXJ0KCZlLT5udG9pLCBu
YW1lLCB1cGJfdmFsdWVfaW50MzIobnVtKSkpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhz
dGF0dXMsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYg
KCF1cGJfaW50dGFibGVfbG9va3VwKCZlLT5pdG9uLCBudW0sIE5VTEwpKSB7Ci0gICAgbmFtZTIg
PSB1cGJfZ3N0cmR1cChuYW1lKTsKLSAgICBpZiAoIW5hbWUyIHx8ICF1cGJfaW50dGFibGVfaW5z
ZXJ0KCZlLT5pdG9uLCBudW0sIHVwYl92YWx1ZV9jc3RyKG5hbWUyKSkpIHsKLSAgICAgIHVwYl9z
dGF0dXNfc2V0ZXJybXNnKHN0YXR1cywgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgIHVwYl9zdHJ0
YWJsZV9yZW1vdmUoJmUtPm50b2ksIG5hbWUsIE5VTEwpOwotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgfQotCi0gIGlmICh1cGJfZW51bWRlZl9udW12YWxzKGUpID09IDEpIHsKLSAgICBi
b29sIG9rID0gdXBiX2VudW1kZWZfc2V0ZGVmYXVsdChlLCBudW0sIE5VTEwpOwotICAgIFVQQl9B
U1NFUlRfVkFSKG9rLCBvayk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50MzJfdCB1
cGJfZW51bWRlZl9kZWZhdWx0KGNvbnN0IHVwYl9lbnVtZGVmICplKSB7Ci0gIGFzc2VydCh1cGJf
ZW51bWRlZl9pdG9uKGUsIGUtPmRlZmF1bHR2YWwpKTsKLSAgcmV0dXJuIGUtPmRlZmF1bHR2YWw7
Ci19Ci0KLWJvb2wgdXBiX2VudW1kZWZfc2V0ZGVmYXVsdCh1cGJfZW51bWRlZiAqZSwgaW50MzJf
dCB2YWwsIHVwYl9zdGF0dXMgKnMpIHsKLSAgYXNzZXJ0KCF1cGJfZW51bWRlZl9pc2Zyb3plbihl
KSk7Ci0gIGlmICghdXBiX2VudW1kZWZfaXRvbihlLCB2YWwpKSB7Ci0gICAgdXBiX3N0YXR1c19z
ZXRlcnJmKHMsICJudW1iZXIgJyVkJyBpcyBub3QgaW4gdGhlIGVudW0uIiwgdmFsKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLSAgZS0+ZGVmYXVsdHZhbCA9IHZhbDsKLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLWludCB1cGJfZW51bWRlZl9udW12YWxzKGNvbnN0IHVwYl9lbnVtZGVmICplKSB7Ci0g
IHJldHVybiB1cGJfc3RydGFibGVfY291bnQoJmUtPm50b2kpOwotfQotCi12b2lkIHVwYl9lbnVt
X2JlZ2luKHVwYl9lbnVtX2l0ZXIgKmksIGNvbnN0IHVwYl9lbnVtZGVmICplKSB7Ci0gIC8qIFdl
IGl0ZXJhdGUgb3ZlciB0aGUgbnRvaSB0YWJsZSwgdG8gYWNjb3VudCBmb3IgZHVwbGljYXRlIG51
bWJlcnMuICovCi0gIHVwYl9zdHJ0YWJsZV9iZWdpbihpLCAmZS0+bnRvaSk7Ci19Ci0KLXZvaWQg
dXBiX2VudW1fbmV4dCh1cGJfZW51bV9pdGVyICppdGVyKSB7IHVwYl9zdHJ0YWJsZV9uZXh0KGl0
ZXIpOyB9Ci1ib29sIHVwYl9lbnVtX2RvbmUodXBiX2VudW1faXRlciAqaXRlcikgeyByZXR1cm4g
dXBiX3N0cnRhYmxlX2RvbmUoaXRlcik7IH0KLQotYm9vbCB1cGJfZW51bWRlZl9udG9pKGNvbnN0
IHVwYl9lbnVtZGVmICpkZWYsIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGxlbiwgaW50MzJfdCAqbnVtKSB7Ci0gIHVwYl92YWx1ZSB2OwotICBpZiAoIXVw
Yl9zdHJ0YWJsZV9sb29rdXAyKCZkZWYtPm50b2ksIG5hbWUsIGxlbiwgJnYpKSB7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0gIGlmIChudW0pICpudW0gPSB1cGJfdmFsdWVfZ2V0aW50MzIodik7
Ci0gIHJldHVybiB0cnVlOwotfQotCi1jb25zdCBjaGFyICp1cGJfZW51bWRlZl9pdG9uKGNvbnN0
IHVwYl9lbnVtZGVmICpkZWYsIGludDMyX3QgbnVtKSB7Ci0gIHVwYl92YWx1ZSB2OwotICByZXR1
cm4gdXBiX2ludHRhYmxlX2xvb2t1cDMyKCZkZWYtPml0b24sIG51bSwgJnYpID8KLSAgICAgIHVw
Yl92YWx1ZV9nZXRjc3RyKHYpIDogTlVMTDsKLX0KLQotY29uc3QgY2hhciAqdXBiX2VudW1faXRl
cl9uYW1lKHVwYl9lbnVtX2l0ZXIgKml0ZXIpIHsKLSAgcmV0dXJuIHVwYl9zdHJ0YWJsZV9pdGVy
X2tleShpdGVyKTsKLX0KLQotaW50MzJfdCB1cGJfZW51bV9pdGVyX251bWJlcih1cGJfZW51bV9p
dGVyICppdGVyKSB7Ci0gIHJldHVybiB1cGJfdmFsdWVfZ2V0aW50MzIodXBiX3N0cnRhYmxlX2l0
ZXJfdmFsdWUoaXRlcikpOwotfQotCi0KLS8qIHVwYl9maWVsZGRlZiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRp
YyB2b2lkIHVwYl9maWVsZGRlZl9pbml0X2RlZmF1bHQodXBiX2ZpZWxkZGVmICpmKTsKLQotc3Rh
dGljIHZvaWQgdXBiX2ZpZWxkZGVmX3VuaW5pdF9kZWZhdWx0KHVwYl9maWVsZGRlZiAqZikgewot
ICBpZiAoZi0+dHlwZV9pc19zZXRfICYmIGYtPmRlZmF1bHRfaXNfc3RyaW5nICYmIGYtPmRlZmF1
bHR2YWwuYnl0ZXMpCi0gICAgZnJlZXN0cihmLT5kZWZhdWx0dmFsLmJ5dGVzKTsKLX0KLQotY29u
c3QgY2hhciAqdXBiX2ZpZWxkZGVmX2Z1bGxuYW1lKGNvbnN0IHVwYl9maWVsZGRlZiAqZSkgewot
ICByZXR1cm4gdXBiX2RlZl9mdWxsbmFtZSh1cGJfZmllbGRkZWZfdXBjYXN0KGUpKTsKLX0KLQot
c3RhdGljIHZvaWQgdmlzaXRmaWVsZChjb25zdCB1cGJfcmVmY291bnRlZCAqciwgdXBiX3JlZmNv
dW50ZWRfdmlzaXQgKnZpc2l0LAotICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJl
KSB7Ci0gIGNvbnN0IHVwYl9maWVsZGRlZiAqZiA9IChjb25zdCB1cGJfZmllbGRkZWYqKXI7Ci0g
IGlmICh1cGJfZmllbGRkZWZfY29udGFpbmluZ3R5cGUoZikpIHsKLSAgICB2aXNpdChyLCB1cGJf
bXNnZGVmX3VwY2FzdDIodXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlKGYpKSwgY2xvc3VyZSk7
Ci0gIH0KLSAgaWYgKHVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YoZikpIHsKLSAgICB2aXNp
dChyLCB1cGJfb25lb2ZkZWZfdXBjYXN0KHVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YoZikp
LCBjbG9zdXJlKTsKLSAgfQotICBpZiAodXBiX2ZpZWxkZGVmX3N1YmRlZihmKSkgewotICAgIHZp
c2l0KHIsIHVwYl9kZWZfdXBjYXN0KHVwYl9maWVsZGRlZl9zdWJkZWYoZikpLCBjbG9zdXJlKTsK
LSAgfQotfQotCi1zdGF0aWMgdm9pZCBmcmVlZmllbGQodXBiX3JlZmNvdW50ZWQgKnIpIHsKLSAg
dXBiX2ZpZWxkZGVmICpmID0gKHVwYl9maWVsZGRlZiopcjsKLSAgdXBiX2ZpZWxkZGVmX3VuaW5p
dF9kZWZhdWx0KGYpOwotICBpZiAoZi0+c3ViZGVmX2lzX3N5bWJvbGljKQotICAgIHVwYl9nZnJl
ZShmLT5zdWIubmFtZSk7Ci0gIHVwYl9kZWZfdW5pbml0KHVwYl9maWVsZGRlZl91cGNhc3RfbXV0
YWJsZShmKSk7Ci0gIHVwYl9nZnJlZShmKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKmVudW1k
ZWZhdWx0c3RyKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICBjb25zdCB1cGJfZW51bWRlZiAq
ZTsKLSAgYXNzZXJ0KGYtPnR5cGVfaXNfc2V0XyAmJiBmLT50eXBlXyA9PSBVUEJfVFlQRV9FTlVN
KTsKLSAgZSA9IHVwYl9maWVsZGRlZl9lbnVtc3ViZGVmKGYpOwotICBpZiAoZi0+ZGVmYXVsdF9p
c19zdHJpbmcgJiYgZi0+ZGVmYXVsdHZhbC5ieXRlcykgewotICAgIC8qIERlZmF1bHQgd2FzIGV4
cGxpY2l0bHkgc2V0IGFzIGEgc3RyaW5nLiAqLwotICAgIHN0cl90ICpzID0gZi0+ZGVmYXVsdHZh
bC5ieXRlczsKLSAgICByZXR1cm4gcy0+c3RyOwotICB9IGVsc2UgaWYgKGUpIHsKLSAgICBpZiAo
IWYtPmRlZmF1bHRfaXNfc3RyaW5nKSB7Ci0gICAgICAvKiBEZWZhdWx0IHdhcyBleHBsaWNpdGx5
IHNldCBhcyBhbiBpbnRlZ2VyOyBsb29rIGl0IHVwIGluIGVudW1kZWYuICovCi0gICAgICBjb25z
dCBjaGFyICpuYW1lID0gdXBiX2VudW1kZWZfaXRvbihlLCBmLT5kZWZhdWx0dmFsLnNpbnQpOwot
ICAgICAgaWYgKG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgIC8qIERlZmF1bHQgaXMgY29tcGxldGVseSB1bnNldDsgcHVsbCBlbnVtZGVm
IGRlZmF1bHQuICovCi0gICAgICBpZiAodXBiX2VudW1kZWZfbnVtdmFscyhlKSA+IDApIHsKLSAg
ICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHVwYl9lbnVtZGVmX2l0b24oZSwgdXBiX2VudW1kZWZf
ZGVmYXVsdChlKSk7Ci0gICAgICAgIGFzc2VydChuYW1lKTsKLSAgICAgICAgcmV0dXJuIG5hbWU7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgYm9vbCBl
bnVtZGVmYXVsdGludDMyKGNvbnN0IHVwYl9maWVsZGRlZiAqZiwgaW50MzJfdCAqdmFsKSB7Ci0g
IGNvbnN0IHVwYl9lbnVtZGVmICplOwotICBhc3NlcnQoZi0+dHlwZV9pc19zZXRfICYmIGYtPnR5
cGVfID09IFVQQl9UWVBFX0VOVU0pOwotICBlID0gdXBiX2ZpZWxkZGVmX2VudW1zdWJkZWYoZik7
Ci0gIGlmICghZi0+ZGVmYXVsdF9pc19zdHJpbmcpIHsKLSAgICAvKiBEZWZhdWx0IHdhcyBleHBs
aWNpdGx5IHNldCBhcyBhbiBpbnRlZ2VyLiAqLwotICAgICp2YWwgPSBmLT5kZWZhdWx0dmFsLnNp
bnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSBpZiAoZSkgewotICAgIGlmIChmLT5kZWZh
dWx0dmFsLmJ5dGVzKSB7Ci0gICAgICAvKiBEZWZhdWx0IHdhcyBleHBsaWNpdGx5IHNldCBhcyBh
IHN0cjsgdHJ5IHRvIGxvb2t1cCBjb3JyZXNwb25kaW5nIGludC4gKi8KLSAgICAgIHN0cl90ICpz
ID0gZi0+ZGVmYXVsdHZhbC5ieXRlczsKLSAgICAgIGlmICh1cGJfZW51bWRlZl9udG9peihlLCBz
LT5zdHIsIHZhbCkpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIC8qIERlZmF1bHQgaXMgdW5zZXQ7IHRyeSB0byBwdWxsIGluIGVudW1kZWYgZGVm
YXVsdC4gKi8KLSAgICAgIGlmICh1cGJfZW51bWRlZl9udW12YWxzKGUpID4gMCkgewotICAgICAg
ICAqdmFsID0gdXBiX2VudW1kZWZfZGVmYXVsdChlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotY29uc3Qgc3RydWN0IHVw
Yl9yZWZjb3VudGVkX3Z0YmwgdXBiX2ZpZWxkZGVmX3Z0YmwgPSB7dmlzaXRmaWVsZCwgZnJlZWZp
ZWxkfTsKLQotdXBiX2ZpZWxkZGVmICp1cGJfZmllbGRkZWZfbmV3KGNvbnN0IHZvaWQgKm8pIHsK
LSAgdXBiX2ZpZWxkZGVmICpmID0gdXBiX2dtYWxsb2Moc2l6ZW9mKCpmKSk7Ci0gIGlmICghZikg
cmV0dXJuIE5VTEw7Ci0gIGlmICghdXBiX2RlZl9pbml0KHVwYl9maWVsZGRlZl91cGNhc3RfbXV0
YWJsZShmKSwgVVBCX0RFRl9GSUVMRCwKLSAgICAgICAgICAgICAgICAgICAgJnVwYl9maWVsZGRl
Zl92dGJsLCBvKSkgewotICAgIHVwYl9nZnJlZShmKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQot
ICBmLT5tc2cuZGVmID0gTlVMTDsKLSAgZi0+c3ViLmRlZiA9IE5VTEw7Ci0gIGYtPm9uZW9mID0g
TlVMTDsKLSAgZi0+c3ViZGVmX2lzX3N5bWJvbGljID0gZmFsc2U7Ci0gIGYtPm1zZ19pc19zeW1i
b2xpYyA9IGZhbHNlOwotICBmLT5sYWJlbF8gPSBVUEJfTEFCRUxfT1BUSU9OQUw7Ci0gIGYtPnR5
cGVfID0gVVBCX1RZUEVfSU5UMzI7Ci0gIGYtPm51bWJlcl8gPSAwOwotICBmLT50eXBlX2lzX3Nl
dF8gPSBmYWxzZTsKLSAgZi0+dGFnZGVsaW0gPSBmYWxzZTsKLSAgZi0+aXNfZXh0ZW5zaW9uXyA9
IGZhbHNlOwotICBmLT5sYXp5XyA9IGZhbHNlOwotICBmLT5wYWNrZWRfID0gdHJ1ZTsKLQotICAv
KiBGb3IgdGhlIG1vbWVudCB3ZSBkZWZhdWx0IHRoaXMgdG8gVVBCX0lOVEZNVF9WQVJJQUJMRSwg
c2luY2UgaXQgd2lsbCB3b3JrCi0gICAqIHdpdGggYWxsIGludGVnZXIgdHlwZXMgYW5kIGlzIGlu
IHNvbWUgc2luY2UgbW9yZSAiZGVmYXVsdCIgc2luY2UgdGhlIG1vc3QKLSAgICogbm9ybWFsLWxv
b2tpbmcgcHJvdG8yIHR5cGVzIGludDMyL2ludDY0L3VpbnQzMi91aW50NjQgdXNlIHZhcmlhYmxl
LgotICAgKgotICAgKiBPdGhlciBvcHRpb25zIHRvIGNvbnNpZGVyOgotICAgKiAtIHRoZXJlIGlz
IG5vIGRlZmF1bHQ7IHVzZXJzIG11c3Qgc2V0IHRoaXMgbWFudWFsbHkgKGxpa2UgdHlwZSkuCi0g
ICAqIC0gZGVmYXVsdCBzaWduZWQgaW50ZWdlcnMgdG8gVVBCX0lOVEZNVF9aSUdaQUcsIHNpbmNl
IGl0J3MgbW9yZSBsaWtlbHkgdG8KLSAgICogICBiZSBhbiBvcHRpbWFsIGRlZmF1bHQgZm9yIHNp
Z25lZCBpbnRlZ2Vycy4gKi8KLSAgZi0+aW50Zm10ID0gVVBCX0lOVEZNVF9WQVJJQUJMRTsKLSAg
cmV0dXJuIGY7Ci19Ci0KLXVwYl9maWVsZGRlZiAqdXBiX2ZpZWxkZGVmX2R1cChjb25zdCB1cGJf
ZmllbGRkZWYgKmYsIGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIGNvbnN0IGNoYXIgKnNyY25hbWU7
Ci0gIHVwYl9maWVsZGRlZiAqbmV3ZiA9IHVwYl9maWVsZGRlZl9uZXcob3duZXIpOwotICBpZiAo
IW5ld2YpIHJldHVybiBOVUxMOwotICB1cGJfZmllbGRkZWZfc2V0dHlwZShuZXdmLCB1cGJfZmll
bGRkZWZfdHlwZShmKSk7Ci0gIHVwYl9maWVsZGRlZl9zZXRsYWJlbChuZXdmLCB1cGJfZmllbGRk
ZWZfbGFiZWwoZikpOwotICB1cGJfZmllbGRkZWZfc2V0bnVtYmVyKG5ld2YsIHVwYl9maWVsZGRl
Zl9udW1iZXIoZiksIE5VTEwpOwotICB1cGJfZmllbGRkZWZfc2V0bmFtZShuZXdmLCB1cGJfZmll
bGRkZWZfbmFtZShmKSwgTlVMTCk7Ci0gIGlmIChmLT5kZWZhdWx0X2lzX3N0cmluZyAmJiBmLT5k
ZWZhdWx0dmFsLmJ5dGVzKSB7Ci0gICAgc3RyX3QgKnMgPSBmLT5kZWZhdWx0dmFsLmJ5dGVzOwot
ICAgIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0c3RyKG5ld2YsIHMtPnN0ciwgcy0+bGVuLCBOVUxM
KTsKLSAgfSBlbHNlIHsKLSAgICBuZXdmLT5kZWZhdWx0X2lzX3N0cmluZyA9IGYtPmRlZmF1bHRf
aXNfc3RyaW5nOwotICAgIG5ld2YtPmRlZmF1bHR2YWwgPSBmLT5kZWZhdWx0dmFsOwotICB9Ci0K
LSAgaWYgKGYtPnN1YmRlZl9pc19zeW1ib2xpYykgewotICAgIHNyY25hbWUgPSBmLT5zdWIubmFt
ZTsgIC8qIE1pZ2h0IGJlIE5VTEwuICovCi0gIH0gZWxzZSB7Ci0gICAgc3JjbmFtZSA9IGYtPnN1
Yi5kZWYgPyB1cGJfZGVmX2Z1bGxuYW1lKGYtPnN1Yi5kZWYpIDogTlVMTDsKLSAgfQotICBpZiAo
c3JjbmFtZSkgewotICAgIGNoYXIgKm5ld25hbWUgPSB1cGJfZ21hbGxvYyhzdHJsZW4oZi0+c3Vi
LmRlZi0+ZnVsbG5hbWUpICsgMik7Ci0gICAgaWYgKCFuZXduYW1lKSB7Ci0gICAgICB1cGJfZmll
bGRkZWZfdW5yZWYobmV3Ziwgb3duZXIpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAg
IHN0cmNweShuZXduYW1lLCAiLiIpOwotICAgIHN0cmNhdChuZXduYW1lLCBmLT5zdWIuZGVmLT5m
dWxsbmFtZSk7Ci0gICAgdXBiX2ZpZWxkZGVmX3NldHN1YmRlZm5hbWUobmV3ZiwgbmV3bmFtZSwg
TlVMTCk7Ci0gICAgdXBiX2dmcmVlKG5ld25hbWUpOwotICB9Ci0KLSAgcmV0dXJuIG5ld2Y7Ci19
Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX3R5cGVpc3NldChjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsK
LSAgcmV0dXJuIGYtPnR5cGVfaXNfc2V0XzsKLX0KLQotdXBiX2ZpZWxkdHlwZV90IHVwYl9maWVs
ZGRlZl90eXBlKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICBhc3NlcnQoZi0+dHlwZV9pc19z
ZXRfKTsKLSAgcmV0dXJuIGYtPnR5cGVfOwotfQotCi11aW50MzJfdCB1cGJfZmllbGRkZWZfaW5k
ZXgoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVybiBmLT5pbmRleF87Ci19Ci0KLXVw
Yl9sYWJlbF90IHVwYl9maWVsZGRlZl9sYWJlbChjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAg
cmV0dXJuIGYtPmxhYmVsXzsKLX0KLQotdXBiX2ludGZtdF90IHVwYl9maWVsZGRlZl9pbnRmbXQo
Y29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVybiBmLT5pbnRmbXQ7Ci19Ci0KLWJvb2wg
dXBiX2ZpZWxkZGVmX2lzdGFnZGVsaW0oY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVy
biBmLT50YWdkZWxpbTsKLX0KLQotdWludDMyX3QgdXBiX2ZpZWxkZGVmX251bWJlcihjb25zdCB1
cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPm51bWJlcl87Ci19Ci0KLWJvb2wgdXBiX2Zp
ZWxkZGVmX2lzZXh0ZW5zaW9uKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICByZXR1cm4gZi0+
aXNfZXh0ZW5zaW9uXzsKLX0KLQotYm9vbCB1cGJfZmllbGRkZWZfbGF6eShjb25zdCB1cGJfZmll
bGRkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPmxhenlfOwotfQotCi1ib29sIHVwYl9maWVsZGRlZl9w
YWNrZWQoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVybiBmLT5wYWNrZWRfOwotfQot
Ci1jb25zdCBjaGFyICp1cGJfZmllbGRkZWZfbmFtZShjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsK
LSAgcmV0dXJuIHVwYl9kZWZfZnVsbG5hbWUodXBiX2ZpZWxkZGVmX3VwY2FzdChmKSk7Ci19Ci0K
LXNpemVfdCB1cGJfZmllbGRkZWZfZ2V0anNvbm5hbWUoY29uc3QgdXBiX2ZpZWxkZGVmICpmLCBj
aGFyICpidWYsIHNpemVfdCBsZW4pIHsKLSAgY29uc3QgY2hhciAqbmFtZSA9IHVwYl9maWVsZGRl
Zl9uYW1lKGYpOwotICBzaXplX3Qgc3JjLCBkc3QgPSAwOwotICBib29sIHVjYXNlX25leHQgPSBm
YWxzZTsKLQotI2RlZmluZSBXUklURShieXRlKSBcCi0gICsrZHN0OyBcCi0gIGlmIChkc3QgPCBs
ZW4pIGJ1Zltkc3QgLSAxXSA9IGJ5dGU7IFwKLSAgZWxzZSBpZiAoZHN0ID09IGxlbikgYnVmW2Rz
dCAtIDFdID0gJ1wwJwotCi0gIGlmICghbmFtZSkgewotICAgIFdSSVRFKCdcMCcpOwotICAgIHJl
dHVybiAwOwotICB9Ci0KLSAgLyogSW1wbGVtZW50IHRoZSB0cmFuc2Zvcm1hdGlvbiBhcyBkZXNj
cmliZWQgaW4gdGhlIHNwZWM6Ci0gICAqICAgMS4gdXBwZXIgY2FzZSBhbGwgbGV0dGVycyBhZnRl
ciBhbiB1bmRlcnNjb3JlLgotICAgKiAgIDIuIHJlbW92ZSBhbGwgdW5kZXJzY29yZXMuCi0gICAq
LwotICBmb3IgKHNyYyA9IDA7IG5hbWVbc3JjXTsgc3JjKyspIHsKLSAgICBpZiAobmFtZVtzcmNd
ID09ICdfJykgewotICAgICAgdWNhc2VfbmV4dCA9IHRydWU7Ci0gICAgICBjb250aW51ZTsKLSAg
ICB9Ci0KLSAgICBpZiAodWNhc2VfbmV4dCkgewotICAgICAgV1JJVEUodG91cHBlcihuYW1lW3Ny
Y10pKTsKLSAgICAgIHVjYXNlX25leHQgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgV1JJ
VEUobmFtZVtzcmNdKTsKLSAgICB9Ci0gIH0KLQotICBXUklURSgnXDAnKTsKLSAgcmV0dXJuIGRz
dDsKLQotI3VuZGVmIFdSSVRFCi19Ci0KLWNvbnN0IHVwYl9tc2dkZWYgKnVwYl9maWVsZGRlZl9j
b250YWluaW5ndHlwZShjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPm1zZ19p
c19zeW1ib2xpYyA/IE5VTEwgOiBmLT5tc2cuZGVmOwotfQotCi1jb25zdCB1cGJfb25lb2ZkZWYg
KnVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0g
IHJldHVybiBmLT5vbmVvZjsKLX0KLQotdXBiX21zZ2RlZiAqdXBiX2ZpZWxkZGVmX2NvbnRhaW5p
bmd0eXBlX211dGFibGUodXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVybiAodXBiX21zZ2RlZiop
dXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlKGYpOwotfQotCi1jb25zdCBjaGFyICp1cGJfZmll
bGRkZWZfY29udGFpbmluZ3R5cGVuYW1lKHVwYl9maWVsZGRlZiAqZikgewotICByZXR1cm4gZi0+
bXNnX2lzX3N5bWJvbGljID8gZi0+bXNnLm5hbWUgOiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBy
ZWxlYXNlX2NvbnRhaW5pbmd0eXBlKHVwYl9maWVsZGRlZiAqZikgewotICBpZiAoZi0+bXNnX2lz
X3N5bWJvbGljKSB1cGJfZ2ZyZWUoZi0+bXNnLm5hbWUpOwotfQotCi1ib29sIHVwYl9maWVsZGRl
Zl9zZXRjb250YWluaW5ndHlwZW5hbWUodXBiX2ZpZWxkZGVmICpmLCBjb25zdCBjaGFyICpuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMp
IHsKLSAgY2hhciAqbmFtZV9jb3B5OwotICBhc3NlcnQoIXVwYl9maWVsZGRlZl9pc2Zyb3plbihm
KSk7Ci0gIGlmICh1cGJfZmllbGRkZWZfY29udGFpbmluZ3R5cGUoZikpIHsKLSAgICB1cGJfc3Rh
dHVzX3NldGVycm1zZyhzLCAiZmllbGQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBhIG1lc3Nh
Z2UuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIC8qIFRPRE86IHZhbGlkYXRlIG5hbWUg
KHVwYl9pc2lkZW50KCkgZG9lc24ndCBxdWl0ZSB3b3JrIGF0bSBiZWNhdXNlIHRoaXMgbmFtZQot
ICAgKiBtYXkgaGF2ZSBhIGxlYWRpbmcgIi4iKS4gKi8KLQotICBuYW1lX2NvcHkgPSB1cGJfZ3N0
cmR1cChuYW1lKTsKLSAgaWYgKCFuYW1lX2NvcHkpIHsKLSAgICB1cGJfdXBiZXJyX3NldG9vbShz
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZWxlYXNlX2NvbnRhaW5pbmd0eXBlKGYp
OwotICBmLT5tc2cubmFtZSA9IG5hbWVfY29weTsKLSAgZi0+bXNnX2lzX3N5bWJvbGljID0gdHJ1
ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX3NldG5hbWUodXBiX2Zp
ZWxkZGVmICpmLCBjb25zdCBjaGFyICpuYW1lLCB1cGJfc3RhdHVzICpzKSB7Ci0gIGlmICh1cGJf
ZmllbGRkZWZfY29udGFpbmluZ3R5cGUoZikgfHwgdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmdvbmVv
ZihmKSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHMsICJBbHJlYWR5IGFkZGVkIHRvIG1l
c3NhZ2Ugb3Igb25lb2YiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHVwYl9k
ZWZfc2V0ZnVsbG5hbWUodXBiX2ZpZWxkZGVmX3VwY2FzdF9tdXRhYmxlKGYpLCBuYW1lLCBzKTsK
LX0KLQotc3RhdGljIHZvaWQgY2hrZGVmYXVsdHR5cGUoY29uc3QgdXBiX2ZpZWxkZGVmICpmLCB1
cGJfZmllbGR0eXBlX3QgdHlwZSkgewotICBVUEJfVU5VU0VEKGYpOwotICBVUEJfVU5VU0VEKHR5
cGUpOwotICBhc3NlcnQoZi0+dHlwZV9pc19zZXRfICYmIHVwYl9maWVsZGRlZl90eXBlKGYpID09
IHR5cGUpOwotfQotCi1pbnQ2NF90IHVwYl9maWVsZGRlZl9kZWZhdWx0aW50NjQoY29uc3QgdXBi
X2ZpZWxkZGVmICpmKSB7Ci0gIGNoa2RlZmF1bHR0eXBlKGYsIFVQQl9UWVBFX0lOVDY0KTsKLSAg
cmV0dXJuIGYtPmRlZmF1bHR2YWwuc2ludDsKLX0KLQotaW50MzJfdCB1cGJfZmllbGRkZWZfZGVm
YXVsdGludDMyKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICBpZiAoZi0+dHlwZV9pc19zZXRf
ICYmIHVwYl9maWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX0VOVU0pIHsKLSAgICBpbnQzMl90
IHZhbDsKLSAgICBib29sIG9rID0gZW51bWRlZmF1bHRpbnQzMihmLCAmdmFsKTsKLSAgICBVUEJf
QVNTRVJUX1ZBUihvaywgb2spOwotICAgIHJldHVybiB2YWw7Ci0gIH0gZWxzZSB7Ci0gICAgY2hr
ZGVmYXVsdHR5cGUoZiwgVVBCX1RZUEVfSU5UMzIpOwotICAgIHJldHVybiBmLT5kZWZhdWx0dmFs
LnNpbnQ7Ci0gIH0KLX0KLQotdWludDY0X3QgdXBiX2ZpZWxkZGVmX2RlZmF1bHR1aW50NjQoY29u
c3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIGNoa2RlZmF1bHR0eXBlKGYsIFVQQl9UWVBFX1VJTlQ2
NCk7Ci0gIHJldHVybiBmLT5kZWZhdWx0dmFsLnVpbnQ7Ci19Ci0KLXVpbnQzMl90IHVwYl9maWVs
ZGRlZl9kZWZhdWx0dWludDMyKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICBjaGtkZWZhdWx0
dHlwZShmLCBVUEJfVFlQRV9VSU5UMzIpOwotICByZXR1cm4gZi0+ZGVmYXVsdHZhbC51aW50Owot
fQotCi1ib29sIHVwYl9maWVsZGRlZl9kZWZhdWx0Ym9vbChjb25zdCB1cGJfZmllbGRkZWYgKmYp
IHsKLSAgY2hrZGVmYXVsdHR5cGUoZiwgVVBCX1RZUEVfQk9PTCk7Ci0gIHJldHVybiBmLT5kZWZh
dWx0dmFsLnVpbnQ7Ci19Ci0KLWZsb2F0IHVwYl9maWVsZGRlZl9kZWZhdWx0ZmxvYXQoY29uc3Qg
dXBiX2ZpZWxkZGVmICpmKSB7Ci0gIGNoa2RlZmF1bHR0eXBlKGYsIFVQQl9UWVBFX0ZMT0FUKTsK
LSAgcmV0dXJuIGYtPmRlZmF1bHR2YWwuZmx0OwotfQotCi1kb3VibGUgdXBiX2ZpZWxkZGVmX2Rl
ZmF1bHRkb3VibGUoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIGNoa2RlZmF1bHR0eXBlKGYs
IFVQQl9UWVBFX0RPVUJMRSk7Ci0gIHJldHVybiBmLT5kZWZhdWx0dmFsLmRibDsKLX0KLQotY29u
c3QgY2hhciAqdXBiX2ZpZWxkZGVmX2RlZmF1bHRzdHIoY29uc3QgdXBiX2ZpZWxkZGVmICpmLCBz
aXplX3QgKmxlbikgewotICBhc3NlcnQoZi0+dHlwZV9pc19zZXRfKTsKLSAgYXNzZXJ0KHVwYl9m
aWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX1NUUklORyB8fAotICAgICAgICAgdXBiX2ZpZWxk
ZGVmX3R5cGUoZikgPT0gVVBCX1RZUEVfQllURVMgfHwKLSAgICAgICAgIHVwYl9maWVsZGRlZl90
eXBlKGYpID09IFVQQl9UWVBFX0VOVU0pOwotCi0gIGlmICh1cGJfZmllbGRkZWZfdHlwZShmKSA9
PSBVUEJfVFlQRV9FTlVNKSB7Ci0gICAgY29uc3QgY2hhciAqcmV0ID0gZW51bWRlZmF1bHRzdHIo
Zik7Ci0gICAgYXNzZXJ0KHJldCk7Ci0gICAgLyogRW51bSBkZWZhdWx0cyBjYW4ndCBoYXZlIGVt
YmVkZGVkIE5VTExzLiAqLwotICAgIGlmIChsZW4pICpsZW4gPSBzdHJsZW4ocmV0KTsKLSAgICBy
ZXR1cm4gcmV0OwotICB9Ci0KLSAgaWYgKGYtPmRlZmF1bHRfaXNfc3RyaW5nKSB7Ci0gICAgc3Ry
X3QgKnN0ciA9IGYtPmRlZmF1bHR2YWwuYnl0ZXM7Ci0gICAgaWYgKGxlbikgKmxlbiA9IHN0ci0+
bGVuOwotICAgIHJldHVybiBzdHItPnN0cjsKLSAgfQotCi0gIHJldHVybiBOVUxMOwotfQotCi1z
dGF0aWMgdm9pZCB1cGJfZmllbGRkZWZfaW5pdF9kZWZhdWx0KHVwYl9maWVsZGRlZiAqZikgewot
ICBmLT5kZWZhdWx0X2lzX3N0cmluZyA9IGZhbHNlOwotICBzd2l0Y2ggKHVwYl9maWVsZGRlZl90
eXBlKGYpKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9ET1VCTEU6IGYtPmRlZmF1bHR2YWwuZGJsID0g
MDsgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9GTE9BVDogZi0+ZGVmYXVsdHZhbC5mbHQgPSAw
OyBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDMyOgotICAgIGNhc2UgVVBCX1RZUEVfSU5U
NjQ6IGYtPmRlZmF1bHR2YWwuc2ludCA9IDA7IGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfVUlO
VDY0OgotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDMyOgotICAgIGNhc2UgVVBCX1RZUEVfQk9PTDog
Zi0+ZGVmYXVsdHZhbC51aW50ID0gMDsgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9TVFJJTkc6
Ci0gICAgY2FzZSBVUEJfVFlQRV9CWVRFUzoKLSAgICAgIGYtPmRlZmF1bHR2YWwuYnl0ZXMgPSBu
ZXdzdHIoIiIsIDApOwotICAgICAgZi0+ZGVmYXVsdF9pc19zdHJpbmcgPSB0cnVlOwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9NRVNTQUdFOiBicmVhazsKLSAgICBjYXNlIFVQQl9U
WVBFX0VOVU06Ci0gICAgICAvKiBUaGlzIGlzIG91ciBzcGVjaWFsIHNlbnRpbmVsIHRoYXQgaW5k
aWNhdGVzICJub3Qgc2V0IiBmb3IgYW4gZW51bS4gKi8KLSAgICAgIGYtPmRlZmF1bHRfaXNfc3Ry
aW5nID0gdHJ1ZTsKLSAgICAgIGYtPmRlZmF1bHR2YWwuYnl0ZXMgPSBOVUxMOwotICAgICAgYnJl
YWs7Ci0gIH0KLX0KLQotY29uc3QgdXBiX2RlZiAqdXBiX2ZpZWxkZGVmX3N1YmRlZihjb25zdCB1
cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPnN1YmRlZl9pc19zeW1ib2xpYyA/IE5VTEwg
OiBmLT5zdWIuZGVmOwotfQotCi1jb25zdCB1cGJfbXNnZGVmICp1cGJfZmllbGRkZWZfbXNnc3Vi
ZGVmKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICBjb25zdCB1cGJfZGVmICpkZWYgPSB1cGJf
ZmllbGRkZWZfc3ViZGVmKGYpOwotICByZXR1cm4gZGVmID8gdXBiX2R5bmNhc3RfbXNnZGVmKGRl
ZikgOiBOVUxMOwotfQotCi1jb25zdCB1cGJfZW51bWRlZiAqdXBiX2ZpZWxkZGVmX2VudW1zdWJk
ZWYoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIGNvbnN0IHVwYl9kZWYgKmRlZiA9IHVwYl9m
aWVsZGRlZl9zdWJkZWYoZik7Ci0gIHJldHVybiBkZWYgPyB1cGJfZHluY2FzdF9lbnVtZGVmKGRl
ZikgOiBOVUxMOwotfQotCi11cGJfZGVmICp1cGJfZmllbGRkZWZfc3ViZGVmX211dGFibGUodXBi
X2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVybiAodXBiX2RlZiopdXBiX2ZpZWxkZGVmX3N1YmRlZihm
KTsKLX0KLQotY29uc3QgY2hhciAqdXBiX2ZpZWxkZGVmX3N1YmRlZm5hbWUoY29uc3QgdXBiX2Zp
ZWxkZGVmICpmKSB7Ci0gIGlmIChmLT5zdWJkZWZfaXNfc3ltYm9saWMpIHsKLSAgICByZXR1cm4g
Zi0+c3ViLm5hbWU7Ci0gIH0gZWxzZSBpZiAoZi0+c3ViLmRlZikgewotICAgIHJldHVybiB1cGJf
ZGVmX2Z1bGxuYW1lKGYtPnN1Yi5kZWYpOwotICB9IGVsc2UgewotICAgIHJldHVybiBOVUxMOwot
ICB9Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX3NldG51bWJlcih1cGJfZmllbGRkZWYgKmYsIHVp
bnQzMl90IG51bWJlciwgdXBiX3N0YXR1cyAqcykgewotICBpZiAodXBiX2ZpZWxkZGVmX2NvbnRh
aW5pbmd0eXBlKGYpKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2coCi0gICAgICAgIHMsICJj
YW5ub3QgY2hhbmdlIGZpZWxkIG51bWJlciBhZnRlciBhZGRpbmcgdG8gYSBtZXNzYWdlIik7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmIChudW1iZXIgPT0gMCB8fCBudW1iZXIgPiBVUEJf
TUFYX0ZJRUxETlVNQkVSKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJmKHMsICJpbnZhbGlkIGZp
ZWxkIG51bWJlciAoJXUpIiwgbnVtYmVyKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgZi0+
bnVtYmVyXyA9IG51bWJlcjsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgdXBiX2ZpZWxkZGVm
X3NldHR5cGUodXBiX2ZpZWxkZGVmICpmLCB1cGJfZmllbGR0eXBlX3QgdHlwZSkgewotICBhc3Nl
cnQoIXVwYl9maWVsZGRlZl9pc2Zyb3plbihmKSk7Ci0gIGFzc2VydCh1cGJfZmllbGRkZWZfY2hl
Y2t0eXBlKHR5cGUpKTsKLSAgdXBiX2ZpZWxkZGVmX3VuaW5pdF9kZWZhdWx0KGYpOwotICBmLT50
eXBlXyA9IHR5cGU7Ci0gIGYtPnR5cGVfaXNfc2V0XyA9IHRydWU7Ci0gIHVwYl9maWVsZGRlZl9p
bml0X2RlZmF1bHQoZik7Ci19Ci0KLXZvaWQgdXBiX2ZpZWxkZGVmX3NldGRlc2NyaXB0b3J0eXBl
KHVwYl9maWVsZGRlZiAqZiwgaW50IHR5cGUpIHsKLSAgYXNzZXJ0KCF1cGJfZmllbGRkZWZfaXNm
cm96ZW4oZikpOwotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFVQQl9ERVNDUklQVE9SX1RZ
UEVfRE9VQkxFOgotICAgICAgdXBiX2ZpZWxkZGVmX3NldHR5cGUoZiwgVVBCX1RZUEVfRE9VQkxF
KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX0RFU0NSSVBUT1JfVFlQRV9GTE9BVDoKLSAg
ICAgIHVwYl9maWVsZGRlZl9zZXR0eXBlKGYsIFVQQl9UWVBFX0ZMT0FUKTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgVVBCX0RFU0NSSVBUT1JfVFlQRV9JTlQ2NDoKLSAgICBjYXNlIFVQQl9ERVND
UklQVE9SX1RZUEVfU0ZJWEVENjQ6Ci0gICAgY2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFX1NJTlQ2
NDoKLSAgICAgIHVwYl9maWVsZGRlZl9zZXR0eXBlKGYsIFVQQl9UWVBFX0lOVDY0KTsKLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgVVBCX0RFU0NSSVBUT1JfVFlQRV9VSU5UNjQ6Ci0gICAgY2FzZSBV
UEJfREVTQ1JJUFRPUl9UWVBFX0ZJWEVENjQ6Ci0gICAgICB1cGJfZmllbGRkZWZfc2V0dHlwZShm
LCBVUEJfVFlQRV9VSU5UNjQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfREVTQ1JJUFRP
Ul9UWVBFX0lOVDMyOgotICAgIGNhc2UgVVBCX0RFU0NSSVBUT1JfVFlQRV9TRklYRUQzMjoKLSAg
ICBjYXNlIFVQQl9ERVNDUklQVE9SX1RZUEVfU0lOVDMyOgotICAgICAgdXBiX2ZpZWxkZGVmX3Nl
dHR5cGUoZiwgVVBCX1RZUEVfSU5UMzIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfREVT
Q1JJUFRPUl9UWVBFX1VJTlQzMjoKLSAgICBjYXNlIFVQQl9ERVNDUklQVE9SX1RZUEVfRklYRUQz
MjoKLSAgICAgIHVwYl9maWVsZGRlZl9zZXR0eXBlKGYsIFVQQl9UWVBFX1VJTlQzMik7Ci0gICAg
ICBicmVhazsKLSAgICBjYXNlIFVQQl9ERVNDUklQVE9SX1RZUEVfQk9PTDoKLSAgICAgIHVwYl9m
aWVsZGRlZl9zZXR0eXBlKGYsIFVQQl9UWVBFX0JPT0wpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBVUEJfREVTQ1JJUFRPUl9UWVBFX1NUUklORzoKLSAgICAgIHVwYl9maWVsZGRlZl9zZXR0eXBl
KGYsIFVQQl9UWVBFX1NUUklORyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9ERVNDUklQ
VE9SX1RZUEVfQllURVM6Ci0gICAgICB1cGJfZmllbGRkZWZfc2V0dHlwZShmLCBVUEJfVFlQRV9C
WVRFUyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9ERVNDUklQVE9SX1RZUEVfR1JPVVA6
Ci0gICAgY2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFX01FU1NBR0U6Ci0gICAgICB1cGJfZmllbGRk
ZWZfc2V0dHlwZShmLCBVUEJfVFlQRV9NRVNTQUdFKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VVBCX0RFU0NSSVBUT1JfVFlQRV9FTlVNOgotICAgICAgdXBiX2ZpZWxkZGVmX3NldHR5cGUoZiwg
VVBCX1RZUEVfRU5VTSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2Up
OwotICB9Ci0KLSAgaWYgKHR5cGUgPT0gVVBCX0RFU0NSSVBUT1JfVFlQRV9GSVhFRDY0IHx8Ci0g
ICAgICB0eXBlID09IFVQQl9ERVNDUklQVE9SX1RZUEVfRklYRUQzMiB8fAotICAgICAgdHlwZSA9
PSBVUEJfREVTQ1JJUFRPUl9UWVBFX1NGSVhFRDY0IHx8Ci0gICAgICB0eXBlID09IFVQQl9ERVND
UklQVE9SX1RZUEVfU0ZJWEVEMzIpIHsKLSAgICB1cGJfZmllbGRkZWZfc2V0aW50Zm10KGYsIFVQ
Ql9JTlRGTVRfRklYRUQpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0gVVBCX0RFU0NSSVBUT1JfVFlQ
RV9TSU5UNjQgfHwKLSAgICAgICAgICAgICB0eXBlID09IFVQQl9ERVNDUklQVE9SX1RZUEVfU0lO
VDMyKSB7Ci0gICAgdXBiX2ZpZWxkZGVmX3NldGludGZtdChmLCBVUEJfSU5URk1UX1pJR1pBRyk7
Ci0gIH0gZWxzZSB7Ci0gICAgdXBiX2ZpZWxkZGVmX3NldGludGZtdChmLCBVUEJfSU5URk1UX1ZB
UklBQkxFKTsKLSAgfQotCi0gIHVwYl9maWVsZGRlZl9zZXR0YWdkZWxpbShmLCB0eXBlID09IFVQ
Ql9ERVNDUklQVE9SX1RZUEVfR1JPVVApOwotfQotCi11cGJfZGVzY3JpcHRvcnR5cGVfdCB1cGJf
ZmllbGRkZWZfZGVzY3JpcHRvcnR5cGUoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHN3aXRj
aCAodXBiX2ZpZWxkZGVmX3R5cGUoZikpIHsKLSAgICBjYXNlIFVQQl9UWVBFX0ZMT0FUOiAgcmV0
dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfRkxPQVQ7Ci0gICAgY2FzZSBVUEJfVFlQRV9ET1VCTEU6
IHJldHVybiBVUEJfREVTQ1JJUFRPUl9UWVBFX0RPVUJMRTsKLSAgICBjYXNlIFVQQl9UWVBFX0JP
T0w6ICAgcmV0dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfQk9PTDsKLSAgICBjYXNlIFVQQl9UWVBF
X1NUUklORzogcmV0dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfU1RSSU5HOwotICAgIGNhc2UgVVBC
X1RZUEVfQllURVM6ICByZXR1cm4gVVBCX0RFU0NSSVBUT1JfVFlQRV9CWVRFUzsKLSAgICBjYXNl
IFVQQl9UWVBFX0VOVU06ICAgcmV0dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfRU5VTTsKLSAgICBj
YXNlIFVQQl9UWVBFX0lOVDMyOgotICAgICAgc3dpdGNoICh1cGJfZmllbGRkZWZfaW50Zm10KGYp
KSB7Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9WQVJJQUJMRTogcmV0dXJuIFVQQl9ERVNDUklQ
VE9SX1RZUEVfSU5UMzI7Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9GSVhFRDogICAgcmV0dXJu
IFVQQl9ERVNDUklQVE9SX1RZUEVfU0ZJWEVEMzI7Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9a
SUdaQUc6ICAgcmV0dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfU0lOVDMyOwotICAgICAgfQotICAg
IGNhc2UgVVBCX1RZUEVfSU5UNjQ6Ci0gICAgICBzd2l0Y2ggKHVwYl9maWVsZGRlZl9pbnRmbXQo
ZikpIHsKLSAgICAgICAgY2FzZSBVUEJfSU5URk1UX1ZBUklBQkxFOiByZXR1cm4gVVBCX0RFU0NS
SVBUT1JfVFlQRV9JTlQ2NDsKLSAgICAgICAgY2FzZSBVUEJfSU5URk1UX0ZJWEVEOiAgICByZXR1
cm4gVVBCX0RFU0NSSVBUT1JfVFlQRV9TRklYRUQ2NDsKLSAgICAgICAgY2FzZSBVUEJfSU5URk1U
X1pJR1pBRzogICByZXR1cm4gVVBCX0RFU0NSSVBUT1JfVFlQRV9TSU5UNjQ7Ci0gICAgICB9Ci0g
ICAgY2FzZSBVUEJfVFlQRV9VSU5UMzI6Ci0gICAgICBzd2l0Y2ggKHVwYl9maWVsZGRlZl9pbnRm
bXQoZikpIHsKLSAgICAgICAgY2FzZSBVUEJfSU5URk1UX1ZBUklBQkxFOiByZXR1cm4gVVBCX0RF
U0NSSVBUT1JfVFlQRV9VSU5UMzI7Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9GSVhFRDogICAg
cmV0dXJuIFVQQl9ERVNDUklQVE9SX1RZUEVfRklYRUQzMjsKLSAgICAgICAgY2FzZSBVUEJfSU5U
Rk1UX1pJR1pBRzogICByZXR1cm4gLTE7Ci0gICAgICB9Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5U
NjQ6Ci0gICAgICBzd2l0Y2ggKHVwYl9maWVsZGRlZl9pbnRmbXQoZikpIHsKLSAgICAgICAgY2Fz
ZSBVUEJfSU5URk1UX1ZBUklBQkxFOiByZXR1cm4gVVBCX0RFU0NSSVBUT1JfVFlQRV9VSU5UNjQ7
Ci0gICAgICAgIGNhc2UgVVBCX0lOVEZNVF9GSVhFRDogICAgcmV0dXJuIFVQQl9ERVNDUklQVE9S
X1RZUEVfRklYRUQ2NDsKLSAgICAgICAgY2FzZSBVUEJfSU5URk1UX1pJR1pBRzogICByZXR1cm4g
LTE7Ci0gICAgICB9Ci0gICAgY2FzZSBVUEJfVFlQRV9NRVNTQUdFOgotICAgICAgcmV0dXJuIHVw
Yl9maWVsZGRlZl9pc3RhZ2RlbGltKGYpID8KLSAgICAgICAgICBVUEJfREVTQ1JJUFRPUl9UWVBF
X0dST1VQIDogVVBCX0RFU0NSSVBUT1JfVFlQRV9NRVNTQUdFOwotICB9Ci0gIHJldHVybiAwOwot
fQotCi12b2lkIHVwYl9maWVsZGRlZl9zZXRpc2V4dGVuc2lvbih1cGJfZmllbGRkZWYgKmYsIGJv
b2wgaXNfZXh0ZW5zaW9uKSB7Ci0gIGFzc2VydCghdXBiX2ZpZWxkZGVmX2lzZnJvemVuKGYpKTsK
LSAgZi0+aXNfZXh0ZW5zaW9uXyA9IGlzX2V4dGVuc2lvbjsKLX0KLQotdm9pZCB1cGJfZmllbGRk
ZWZfc2V0bGF6eSh1cGJfZmllbGRkZWYgKmYsIGJvb2wgbGF6eSkgewotICBhc3NlcnQoIXVwYl9m
aWVsZGRlZl9pc2Zyb3plbihmKSk7Ci0gIGYtPmxhenlfID0gbGF6eTsKLX0KLQotdm9pZCB1cGJf
ZmllbGRkZWZfc2V0cGFja2VkKHVwYl9maWVsZGRlZiAqZiwgYm9vbCBwYWNrZWQpIHsKLSAgYXNz
ZXJ0KCF1cGJfZmllbGRkZWZfaXNmcm96ZW4oZikpOwotICBmLT5wYWNrZWRfID0gcGFja2VkOwot
fQotCi12b2lkIHVwYl9maWVsZGRlZl9zZXRsYWJlbCh1cGJfZmllbGRkZWYgKmYsIHVwYl9sYWJl
bF90IGxhYmVsKSB7Ci0gIGFzc2VydCghdXBiX2ZpZWxkZGVmX2lzZnJvemVuKGYpKTsKLSAgYXNz
ZXJ0KHVwYl9maWVsZGRlZl9jaGVja2xhYmVsKGxhYmVsKSk7Ci0gIGYtPmxhYmVsXyA9IGxhYmVs
OwotfQotCi12b2lkIHVwYl9maWVsZGRlZl9zZXRpbnRmbXQodXBiX2ZpZWxkZGVmICpmLCB1cGJf
aW50Zm10X3QgZm10KSB7Ci0gIGFzc2VydCghdXBiX2ZpZWxkZGVmX2lzZnJvemVuKGYpKTsKLSAg
YXNzZXJ0KHVwYl9maWVsZGRlZl9jaGVja2ludGZtdChmbXQpKTsKLSAgZi0+aW50Zm10ID0gZm10
OwotfQotCi12b2lkIHVwYl9maWVsZGRlZl9zZXR0YWdkZWxpbSh1cGJfZmllbGRkZWYgKmYsIGJv
b2wgdGFnX2RlbGltKSB7Ci0gIGFzc2VydCghdXBiX2ZpZWxkZGVmX2lzZnJvemVuKGYpKTsKLSAg
Zi0+dGFnZGVsaW0gPSB0YWdfZGVsaW07Ci0gIGYtPnRhZ2RlbGltID0gdGFnX2RlbGltOwotfQot
Ci1zdGF0aWMgYm9vbCBjaGVja3NldGRlZmF1bHQodXBiX2ZpZWxkZGVmICpmLCB1cGJfZmllbGR0
eXBlX3QgdHlwZSkgewotICBpZiAoIWYtPnR5cGVfaXNfc2V0XyB8fCB1cGJfZmllbGRkZWZfaXNm
cm96ZW4oZikgfHwKLSAgICAgIHVwYl9maWVsZGRlZl90eXBlKGYpICE9IHR5cGUpIHsKLSAgICBh
c3NlcnQoZmFsc2UpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoZi0+ZGVmYXVsdF9p
c19zdHJpbmcpIHsKLSAgICBzdHJfdCAqcyA9IGYtPmRlZmF1bHR2YWwuYnl0ZXM7Ci0gICAgYXNz
ZXJ0KHMgfHwgdHlwZSA9PSBVUEJfVFlQRV9FTlVNKTsKLSAgICBpZiAocykgZnJlZXN0cihzKTsK
LSAgfQotICBmLT5kZWZhdWx0X2lzX3N0cmluZyA9IGZhbHNlOwotICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGludDY0KHVwYl9maWVsZGRlZiAqZiwgaW50
NjRfdCB2YWx1ZSkgewotICBpZiAoY2hlY2tzZXRkZWZhdWx0KGYsIFVQQl9UWVBFX0lOVDY0KSkK
LSAgICBmLT5kZWZhdWx0dmFsLnNpbnQgPSB2YWx1ZTsKLX0KLQotdm9pZCB1cGJfZmllbGRkZWZf
c2V0ZGVmYXVsdGludDMyKHVwYl9maWVsZGRlZiAqZiwgaW50MzJfdCB2YWx1ZSkgewotICBpZiAo
KHVwYl9maWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX0VOVU0gJiYKLSAgICAgICBjaGVja3Nl
dGRlZmF1bHQoZiwgVVBCX1RZUEVfRU5VTSkpIHx8Ci0gICAgICBjaGVja3NldGRlZmF1bHQoZiwg
VVBCX1RZUEVfSU5UMzIpKSB7Ci0gICAgZi0+ZGVmYXVsdHZhbC5zaW50ID0gdmFsdWU7Ci0gIH0K
LX0KLQotdm9pZCB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdHVpbnQ2NCh1cGJfZmllbGRkZWYgKmYs
IHVpbnQ2NF90IHZhbHVlKSB7Ci0gIGlmIChjaGVja3NldGRlZmF1bHQoZiwgVVBCX1RZUEVfVUlO
VDY0KSkKLSAgICBmLT5kZWZhdWx0dmFsLnVpbnQgPSB2YWx1ZTsKLX0KLQotdm9pZCB1cGJfZmll
bGRkZWZfc2V0ZGVmYXVsdHVpbnQzMih1cGJfZmllbGRkZWYgKmYsIHVpbnQzMl90IHZhbHVlKSB7
Ci0gIGlmIChjaGVja3NldGRlZmF1bHQoZiwgVVBCX1RZUEVfVUlOVDMyKSkKLSAgICBmLT5kZWZh
dWx0dmFsLnVpbnQgPSB2YWx1ZTsKLX0KLQotdm9pZCB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGJv
b2wodXBiX2ZpZWxkZGVmICpmLCBib29sIHZhbHVlKSB7Ci0gIGlmIChjaGVja3NldGRlZmF1bHQo
ZiwgVVBCX1RZUEVfQk9PTCkpCi0gICAgZi0+ZGVmYXVsdHZhbC51aW50ID0gdmFsdWU7Ci19Ci0K
LXZvaWQgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRmbG9hdCh1cGJfZmllbGRkZWYgKmYsIGZsb2F0
IHZhbHVlKSB7Ci0gIGlmIChjaGVja3NldGRlZmF1bHQoZiwgVVBCX1RZUEVfRkxPQVQpKQotICAg
IGYtPmRlZmF1bHR2YWwuZmx0ID0gdmFsdWU7Ci19Ci0KLXZvaWQgdXBiX2ZpZWxkZGVmX3NldGRl
ZmF1bHRkb3VibGUodXBiX2ZpZWxkZGVmICpmLCBkb3VibGUgdmFsdWUpIHsKLSAgaWYgKGNoZWNr
c2V0ZGVmYXVsdChmLCBVUEJfVFlQRV9ET1VCTEUpKQotICAgIGYtPmRlZmF1bHR2YWwuZGJsID0g
dmFsdWU7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRzdHIodXBiX2ZpZWxkZGVm
ICpmLCBjb25zdCB2b2lkICpzdHIsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgc3RyX3QgKnN0cjI7Ci0gIGFzc2VydCh1cGJf
ZmllbGRkZWZfaXNzdHJpbmcoZikgfHwgZi0+dHlwZV8gPT0gVVBCX1RZUEVfRU5VTSk7Ci0gIGlm
IChmLT50eXBlXyA9PSBVUEJfVFlQRV9FTlVNICYmICF1cGJfaXNpZGVudChzdHIsIGxlbiwgZmFs
c2UsIHMpKQotICAgIHJldHVybiBmYWxzZTsKLQotICBpZiAoZi0+ZGVmYXVsdF9pc19zdHJpbmcp
IHsKLSAgICBzdHJfdCAqcyA9IGYtPmRlZmF1bHR2YWwuYnl0ZXM7Ci0gICAgYXNzZXJ0KHMgfHwg
Zi0+dHlwZV8gPT0gVVBCX1RZUEVfRU5VTSk7Ci0gICAgaWYgKHMpIGZyZWVzdHIocyk7Ci0gIH0g
ZWxzZSB7Ci0gICAgYXNzZXJ0KGYtPnR5cGVfID09IFVQQl9UWVBFX0VOVU0pOwotICB9Ci0KLSAg
c3RyMiA9IG5ld3N0cihzdHIsIGxlbik7Ci0gIGYtPmRlZmF1bHR2YWwuYnl0ZXMgPSBzdHIyOwot
ICBmLT5kZWZhdWx0X2lzX3N0cmluZyA9IHRydWU7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lk
IHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0Y3N0cih1cGJfZmllbGRkZWYgKmYsIGNvbnN0IGNoYXIg
KnN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpIHsK
LSAgYXNzZXJ0KGYtPnR5cGVfaXNfc2V0Xyk7Ci0gIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0c3Ry
KGYsIHN0ciwgc3RyID8gc3RybGVuKHN0cikgOiAwLCBzKTsKLX0KLQotYm9vbCB1cGJfZmllbGRk
ZWZfZW51bWhhc2RlZmF1bHRpbnQzMihjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgaW50MzJf
dCB2YWw7Ci0gIGFzc2VydChmLT50eXBlX2lzX3NldF8gJiYgZi0+dHlwZV8gPT0gVVBCX1RZUEVf
RU5VTSk7Ci0gIHJldHVybiBlbnVtZGVmYXVsdGludDMyKGYsICZ2YWwpOwotfQotCi1ib29sIHVw
Yl9maWVsZGRlZl9lbnVtaGFzZGVmYXVsdHN0cihjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAg
YXNzZXJ0KGYtPnR5cGVfaXNfc2V0XyAmJiBmLT50eXBlXyA9PSBVUEJfVFlQRV9FTlVNKTsKLSAg
cmV0dXJuIGVudW1kZWZhdWx0c3RyKGYpICE9IE5VTEw7Ci19Ci0KLXN0YXRpYyBib29sIHVwYl9z
dWJkZWZfdHlwZWNoZWNrKHVwYl9maWVsZGRlZiAqZiwgY29uc3QgdXBiX2RlZiAqc3ViZGVmLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcykgewotICBpZiAo
Zi0+dHlwZV8gPT0gVVBCX1RZUEVfTUVTU0FHRSkgewotICAgIGlmICh1cGJfZHluY2FzdF9tc2dk
ZWYoc3ViZGVmKSkgcmV0dXJuIHRydWU7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgImlu
dmFsaWQgc3ViZGVmIHR5cGUgZm9yIHRoaXMgc3VibWVzc2FnZSBmaWVsZCIpOwotICAgIHJldHVy
biBmYWxzZTsKLSAgfSBlbHNlIGlmIChmLT50eXBlXyA9PSBVUEJfVFlQRV9FTlVNKSB7Ci0gICAg
aWYgKHVwYl9keW5jYXN0X2VudW1kZWYoc3ViZGVmKSkgcmV0dXJuIHRydWU7Ci0gICAgdXBiX3N0
YXR1c19zZXRlcnJtc2cocywgImludmFsaWQgc3ViZGVmIHR5cGUgZm9yIHRoaXMgZW51bSBmaWVs
ZCIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIHsKLSAgICB1cGJfc3RhdHVzX3NldGVy
cm1zZyhzLCAib25seSBtZXNzYWdlIGFuZCBlbnVtIGZpZWxkcyBjYW4gaGF2ZSBhIHN1YmRlZiIp
OwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX3N1YmRl
Zih1cGJfZmllbGRkZWYgKmYpIHsKLSAgaWYgKGYtPnN1YmRlZl9pc19zeW1ib2xpYykgewotICAg
IHVwYl9nZnJlZShmLT5zdWIubmFtZSk7Ci0gIH0gZWxzZSBpZiAoZi0+c3ViLmRlZikgewotICAg
IHVwYl91bnJlZjIoZi0+c3ViLmRlZiwgZik7Ci0gIH0KLX0KLQotYm9vbCB1cGJfZmllbGRkZWZf
c2V0c3ViZGVmKHVwYl9maWVsZGRlZiAqZiwgY29uc3QgdXBiX2RlZiAqc3ViZGVmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgYXNzZXJ0KCF1cGJfZmll
bGRkZWZfaXNmcm96ZW4oZikpOwotICBhc3NlcnQodXBiX2ZpZWxkZGVmX2hhc3N1YmRlZihmKSk7
Ci0gIGlmIChzdWJkZWYgJiYgIXVwYl9zdWJkZWZfdHlwZWNoZWNrKGYsIHN1YmRlZiwgcykpIHJl
dHVybiBmYWxzZTsKLSAgcmVsZWFzZV9zdWJkZWYoZik7Ci0gIGYtPnN1Yi5kZWYgPSBzdWJkZWY7
Ci0gIGYtPnN1YmRlZl9pc19zeW1ib2xpYyA9IGZhbHNlOwotICBpZiAoZi0+c3ViLmRlZikgdXBi
X3JlZjIoZi0+c3ViLmRlZiwgZik7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIHVwYl9maWVs
ZGRlZl9zZXRtc2dzdWJkZWYodXBiX2ZpZWxkZGVmICpmLCBjb25zdCB1cGJfbXNnZGVmICpzdWJk
ZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcykgewotICBy
ZXR1cm4gdXBiX2ZpZWxkZGVmX3NldHN1YmRlZihmLCB1cGJfbXNnZGVmX3VwY2FzdChzdWJkZWYp
LCBzKTsKLX0KLQotYm9vbCB1cGJfZmllbGRkZWZfc2V0ZW51bXN1YmRlZih1cGJfZmllbGRkZWYg
KmYsIGNvbnN0IHVwYl9lbnVtZGVmICpzdWJkZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9zZXRzdWJkZWYo
ZiwgdXBiX2VudW1kZWZfdXBjYXN0KHN1YmRlZiksIHMpOwotfQotCi1ib29sIHVwYl9maWVsZGRl
Zl9zZXRzdWJkZWZuYW1lKHVwYl9maWVsZGRlZiAqZiwgY29uc3QgY2hhciAqbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcykgewotICBjaGFyICpuYW1l
X2NvcHk7Ci0gIGFzc2VydCghdXBiX2ZpZWxkZGVmX2lzZnJvemVuKGYpKTsKLSAgaWYgKCF1cGJf
ZmllbGRkZWZfaGFzc3ViZGVmKGYpKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgImZp
ZWxkIHR5cGUgZG9lcyBub3QgYWNjZXB0IGEgc3ViZGVmIik7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0KLSAgbmFtZV9jb3B5ID0gdXBiX2dzdHJkdXAobmFtZSk7Ci0gIGlmICghbmFtZV9jb3B5
KSB7Ci0gICAgdXBiX3VwYmVycl9zZXRvb20ocyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0K
LSAgLyogVE9ETzogdmFsaWRhdGUgbmFtZSAodXBiX2lzaWRlbnQoKSBkb2Vzbid0IHF1aXRlIHdv
cmsgYXRtIGJlY2F1c2UgdGhpcyBuYW1lCi0gICAqIG1heSBoYXZlIGEgbGVhZGluZyAiLiIpLiAq
LwotICByZWxlYXNlX3N1YmRlZihmKTsKLSAgZi0+c3ViLm5hbWUgPSBuYW1lX2NvcHk7Ci0gIGYt
PnN1YmRlZl9pc19zeW1ib2xpYyA9IHRydWU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIHVw
Yl9maWVsZGRlZl9pc3N1Ym1zZyhjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIHVw
Yl9maWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX01FU1NBR0U7Ci19Ci0KLWJvb2wgdXBiX2Zp
ZWxkZGVmX2lzc3RyaW5nKGNvbnN0IHVwYl9maWVsZGRlZiAqZikgewotICByZXR1cm4gdXBiX2Zp
ZWxkZGVmX3R5cGUoZikgPT0gVVBCX1RZUEVfU1RSSU5HIHx8Ci0gICAgICAgICB1cGJfZmllbGRk
ZWZfdHlwZShmKSA9PSBVUEJfVFlQRV9CWVRFUzsKLX0KLQotYm9vbCB1cGJfZmllbGRkZWZfaXNz
ZXEoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfbGFiZWwo
ZikgPT0gVVBCX0xBQkVMX1JFUEVBVEVEOwotfQotCi1ib29sIHVwYl9maWVsZGRlZl9pc3ByaW1p
dGl2ZShjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuICF1cGJfZmllbGRkZWZfaXNz
dHJpbmcoZikgJiYgIXVwYl9maWVsZGRlZl9pc3N1Ym1zZyhmKTsKLX0KLQotYm9vbCB1cGJfZmll
bGRkZWZfaXNtYXAoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHJldHVybiB1cGJfZmllbGRk
ZWZfaXNzZXEoZikgJiYgdXBiX2ZpZWxkZGVmX2lzc3VibXNnKGYpICYmCi0gICAgICAgICB1cGJf
bXNnZGVmX21hcGVudHJ5KHVwYl9maWVsZGRlZl9tc2dzdWJkZWYoZikpOwotfQotCi1ib29sIHVw
Yl9maWVsZGRlZl9oYXNwcmVzZW5jZShjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgaWYgKHVw
Yl9maWVsZGRlZl9pc3NlcShmKSkgcmV0dXJuIGZhbHNlOwotICBpZiAodXBiX2ZpZWxkZGVmX2lz
c3VibXNnKGYpKSByZXR1cm4gdHJ1ZTsKLQotICAvKiBQcmltaXRpdmUgZmllbGQ6IHJldHVybiB0
cnVlIHVubGVzcyB0aGVyZSBpcyBhIG1lc3NhZ2UgdGhhdCBzcGVjaWZpZXMKLSAgICogcHJlc2Vu
Y2Ugc2hvdWxkIG5vdCBleGlzdC4gKi8KLSAgaWYgKGYtPm1zZ19pc19zeW1ib2xpYyB8fCAhZi0+
bXNnLmRlZikgcmV0dXJuIHRydWU7Ci0gIHJldHVybiBmLT5tc2cuZGVmLT5zeW50YXggPT0gVVBC
X1NZTlRBWF9QUk9UTzI7Ci19Ci0KLWJvb2wgdXBiX2ZpZWxkZGVmX2hhc3N1YmRlZihjb25zdCB1
cGJfZmllbGRkZWYgKmYpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9pc3N1Ym1zZyhmKSB8fCB1
cGJfZmllbGRkZWZfdHlwZShmKSA9PSBVUEJfVFlQRV9FTlVNOwotfQotCi1zdGF0aWMgYm9vbCBi
ZXR3ZWVuKGludDMyX3QgeCwgaW50MzJfdCBsb3csIGludDMyX3QgaGlnaCkgewotICByZXR1cm4g
eCA+PSBsb3cgJiYgeCA8PSBoaWdoOwotfQotCi1ib29sIHVwYl9maWVsZGRlZl9jaGVja2xhYmVs
KGludDMyX3QgbGFiZWwpIHsgcmV0dXJuIGJldHdlZW4obGFiZWwsIDEsIDMpOyB9Ci1ib29sIHVw
Yl9maWVsZGRlZl9jaGVja3R5cGUoaW50MzJfdCB0eXBlKSB7IHJldHVybiBiZXR3ZWVuKHR5cGUs
IDEsIDExKTsgfQotYm9vbCB1cGJfZmllbGRkZWZfY2hlY2tpbnRmbXQoaW50MzJfdCBmbXQpIHsg
cmV0dXJuIGJldHdlZW4oZm10LCAxLCAzKTsgfQotCi1ib29sIHVwYl9maWVsZGRlZl9jaGVja2Rl
c2NyaXB0b3J0eXBlKGludDMyX3QgdHlwZSkgewotICByZXR1cm4gYmV0d2Vlbih0eXBlLCAxLCAx
OCk7Ci19Ci0KLS8qIHVwYl9tc2dkZWYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIHZpc2l0bXNn
KGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLCB1cGJfcmVmY291bnRlZF92aXNpdCAqdmlzaXQsCi0g
ICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIHVwYl9tc2dfb25lb2ZfaXRl
ciBvOwotICBjb25zdCB1cGJfbXNnZGVmICptID0gKGNvbnN0IHVwYl9tc2dkZWYqKXI7Ci0gIHVw
Yl9tc2dfZmllbGRfaXRlciBpOwotICBmb3IodXBiX21zZ19maWVsZF9iZWdpbigmaSwgbSk7Ci0g
ICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgm
aSkpIHsKLSAgICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmllbGQoJmkpOwotICAg
IHZpc2l0KHIsIHVwYl9maWVsZGRlZl91cGNhc3QyKGYpLCBjbG9zdXJlKTsKLSAgfQotICBmb3Io
dXBiX21zZ19vbmVvZl9iZWdpbigmbywgbSk7Ci0gICAgICAhdXBiX21zZ19vbmVvZl9kb25lKCZv
KTsKLSAgICAgIHVwYl9tc2dfb25lb2ZfbmV4dCgmbykpIHsKLSAgICB1cGJfb25lb2ZkZWYgKmYg
PSB1cGJfbXNnX2l0ZXJfb25lb2YoJm8pOwotICAgIHZpc2l0KHIsIHVwYl9vbmVvZmRlZl91cGNh
c3QoZiksIGNsb3N1cmUpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVtc2codXBiX3JlZmNv
dW50ZWQgKnIpIHsKLSAgdXBiX21zZ2RlZiAqbSA9ICh1cGJfbXNnZGVmKilyOwotICB1cGJfc3Ry
dGFibGVfdW5pbml0KCZtLT5udG9mKTsKLSAgdXBiX2ludHRhYmxlX3VuaW5pdCgmbS0+aXRvZik7
Ci0gIHVwYl9kZWZfdW5pbml0KHVwYl9tc2dkZWZfdXBjYXN0X211dGFibGUobSkpOwotICB1cGJf
Z2ZyZWUobSk7Ci19Ci0KLWNvbnN0IHN0cnVjdCB1cGJfcmVmY291bnRlZF92dGJsIHVwYl9tc2dk
ZWZfdnRibCA9IHt2aXNpdG1zZywgZnJlZW1zZ307Ci0KLXVwYl9tc2dkZWYgKnVwYl9tc2dkZWZf
bmV3KGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIHVwYl9tc2dkZWYgKm0gPSB1cGJfZ21hbGxvYyhz
aXplb2YoKm0pKTsKLSAgaWYgKCFtKSByZXR1cm4gTlVMTDsKLQotICBpZiAoIXVwYl9kZWZfaW5p
dCh1cGJfbXNnZGVmX3VwY2FzdF9tdXRhYmxlKG0pLCBVUEJfREVGX01TRywgJnVwYl9tc2dkZWZf
dnRibCwKLSAgICAgICAgICAgICAgICAgICAgb3duZXIpKSB7Ci0gICAgZ290byBlcnIyOwotICB9
Ci0KLSAgaWYgKCF1cGJfaW50dGFibGVfaW5pdCgmbS0+aXRvZiwgVVBCX0NUWVBFX1BUUikpIGdv
dG8gZXJyMjsKLSAgaWYgKCF1cGJfc3RydGFibGVfaW5pdCgmbS0+bnRvZiwgVVBCX0NUWVBFX1BU
UikpIGdvdG8gZXJyMTsKLSAgbS0+bWFwX2VudHJ5ID0gZmFsc2U7Ci0gIG0tPnN5bnRheCA9IFVQ
Ql9TWU5UQVhfUFJPVE8yOwotICByZXR1cm4gbTsKLQotZXJyMToKLSAgdXBiX2ludHRhYmxlX3Vu
aW5pdCgmbS0+aXRvZik7Ci1lcnIyOgotICB1cGJfZ2ZyZWUobSk7Ci0gIHJldHVybiBOVUxMOwot
fQotCi11cGJfbXNnZGVmICp1cGJfbXNnZGVmX2R1cChjb25zdCB1cGJfbXNnZGVmICptLCBjb25z
dCB2b2lkICpvd25lcikgewotICBib29sIG9rOwotICB1cGJfbXNnX2ZpZWxkX2l0ZXIgaTsKLSAg
dXBiX21zZ19vbmVvZl9pdGVyIG87Ci0KLSAgdXBiX21zZ2RlZiAqbmV3bSA9IHVwYl9tc2dkZWZf
bmV3KG93bmVyKTsKLSAgaWYgKCFuZXdtKSByZXR1cm4gTlVMTDsKLSAgb2sgPSB1cGJfZGVmX3Nl
dGZ1bGxuYW1lKHVwYl9tc2dkZWZfdXBjYXN0X211dGFibGUobmV3bSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cGJfZGVmX2Z1bGxuYW1lKHVwYl9tc2dkZWZfdXBjYXN0KG0pKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICBuZXdtLT5tYXBfZW50cnkgPSBtLT5t
YXBfZW50cnk7Ci0gIG5ld20tPnN5bnRheCA9IG0tPnN5bnRheDsKLSAgVVBCX0FTU0VSVF9WQVIo
b2ssIG9rKTsKLSAgZm9yKHVwYl9tc2dfZmllbGRfYmVnaW4oJmksIG0pOwotICAgICAgIXVwYl9t
c2dfZmllbGRfZG9uZSgmaSk7Ci0gICAgICB1cGJfbXNnX2ZpZWxkX25leHQoJmkpKSB7Ci0gICAg
dXBiX2ZpZWxkZGVmICpmID0gdXBiX2ZpZWxkZGVmX2R1cCh1cGJfbXNnX2l0ZXJfZmllbGQoJmkp
LCAmZik7Ci0gICAgLyogRmllbGRzIGluIG9uZW9mcyBhcmUgZHVwJ2QgYmVsb3cuICovCi0gICAg
aWYgKHVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YoZikpIGNvbnRpbnVlOwotICAgIGlmICgh
ZiB8fCAhdXBiX21zZ2RlZl9hZGRmaWVsZChuZXdtLCBmLCAmZiwgTlVMTCkpIHsKLSAgICAgIHVw
Yl9tc2dkZWZfdW5yZWYobmV3bSwgb3duZXIpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
ICB9Ci0gIGZvcih1cGJfbXNnX29uZW9mX2JlZ2luKCZvLCBtKTsKLSAgICAgICF1cGJfbXNnX29u
ZW9mX2RvbmUoJm8pOwotICAgICAgdXBiX21zZ19vbmVvZl9uZXh0KCZvKSkgewotICAgIHVwYl9v
bmVvZmRlZiAqZiA9IHVwYl9vbmVvZmRlZl9kdXAodXBiX21zZ19pdGVyX29uZW9mKCZvKSwgJmYp
OwotICAgIGlmICghZiB8fCAhdXBiX21zZ2RlZl9hZGRvbmVvZihuZXdtLCBmLCAmZiwgTlVMTCkp
IHsKLSAgICAgIHVwYl9tc2dkZWZfdW5yZWYobmV3bSwgb3duZXIpOwotICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotICB9Ci0gIHJldHVybiBuZXdtOwotfQotCi1ib29sIHVwYl9tc2dkZWZfZnJl
ZXplKHVwYl9tc2dkZWYgKm0sIHVwYl9zdGF0dXMgKnN0YXR1cykgewotICB1cGJfZGVmICpkID0g
dXBiX21zZ2RlZl91cGNhc3RfbXV0YWJsZShtKTsKLSAgcmV0dXJuIHVwYl9kZWZfZnJlZXplKCZk
LCAxLCBzdGF0dXMpOwotfQotCi1jb25zdCBjaGFyICp1cGJfbXNnZGVmX2Z1bGxuYW1lKGNvbnN0
IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIHVwYl9kZWZfZnVsbG5hbWUodXBiX21zZ2RlZl91
cGNhc3QobSkpOwotfQotCi1jb25zdCBjaGFyICp1cGJfbXNnZGVmX25hbWUoY29uc3QgdXBiX21z
Z2RlZiAqbSkgewotICByZXR1cm4gdXBiX2RlZl9uYW1lKHVwYl9tc2dkZWZfdXBjYXN0KG0pKTsK
LX0KLQotYm9vbCB1cGJfbXNnZGVmX3NldGZ1bGxuYW1lKHVwYl9tc2dkZWYgKm0sIGNvbnN0IGNo
YXIgKmZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMp
IHsKLSAgcmV0dXJuIHVwYl9kZWZfc2V0ZnVsbG5hbWUodXBiX21zZ2RlZl91cGNhc3RfbXV0YWJs
ZShtKSwgZnVsbG5hbWUsIHMpOwotfQotCi1ib29sIHVwYl9tc2dkZWZfc2V0c3ludGF4KHVwYl9t
c2dkZWYgKm0sIHVwYl9zeW50YXhfdCBzeW50YXgpIHsKLSAgaWYgKHN5bnRheCAhPSBVUEJfU1lO
VEFYX1BST1RPMiAmJiBzeW50YXggIT0gVVBCX1NZTlRBWF9QUk9UTzMpIHsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICBtLT5zeW50YXggPSBzeW50YXg7Ci0gIHJldHVybiB0cnVlOwotfQot
Ci11cGJfc3ludGF4X3QgdXBiX21zZ2RlZl9zeW50YXgoY29uc3QgdXBiX21zZ2RlZiAqbSkgewot
ICByZXR1cm4gbS0+c3ludGF4OwotfQotCi0vKiBIZWxwZXI6IGNoZWNrIHRoYXQgdGhlIGZpZWxk
IHxmfCBpcyBzYWZlIHRvIGFkZCB0byBtc2dkZWYgfG18LiBTZXQgYW4gZXJyb3IKLSAqIG9uIHN0
YXR1cyB8c3wgYW5kIHJldHVybiBmYWxzZSBpZiBub3QuICovCi1zdGF0aWMgYm9vbCBjaGVja19m
aWVsZF9hZGQoY29uc3QgdXBiX21zZ2RlZiAqbSwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgaWYgKHVwYl9maWVs
ZGRlZl9jb250YWluaW5ndHlwZShmKSAhPSBOVUxMKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJt
c2cocywgImZpZWxkZGVmIGFscmVhZHkgYmVsb25ncyB0byBhIG1lc3NhZ2UiKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0gZWxzZSBpZiAodXBiX2ZpZWxkZGVmX25hbWUoZikgPT0gTlVMTCB8fCB1
cGJfZmllbGRkZWZfbnVtYmVyKGYpID09IDApIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhz
LCAiZmllbGQgbmFtZSBvciBudW1iZXIgd2VyZSBub3Qgc2V0Iik7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9IGVsc2UgaWYgKHVwYl9tc2dkZWZfaXRvZihtLCB1cGJfZmllbGRkZWZfbnVtYmVyKGYp
KSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHMsICJkdXBsaWNhdGUgZmllbGQgbnVtYmVy
Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgaWYgKHVwYl9zdHJ0YWJsZV9sb29rdXAo
Jm0tPm50b2YsIHVwYl9maWVsZGRlZl9uYW1lKGYpLCBOVUxMKSkgewotICAgIHVwYl9zdGF0dXNf
c2V0ZXJybXNnKHMsICJuYW1lIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGZpZWxkIG9yIG9uZW9m
Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
dm9pZCBhZGRfZmllbGQodXBiX21zZ2RlZiAqbSwgdXBiX2ZpZWxkZGVmICpmLCBjb25zdCB2b2lk
ICpyZWZfZG9ub3IpIHsKLSAgcmVsZWFzZV9jb250YWluaW5ndHlwZShmKTsKLSAgZi0+bXNnLmRl
ZiA9IG07Ci0gIGYtPm1zZ19pc19zeW1ib2xpYyA9IGZhbHNlOwotICB1cGJfaW50dGFibGVfaW5z
ZXJ0KCZtLT5pdG9mLCB1cGJfZmllbGRkZWZfbnVtYmVyKGYpLCB1cGJfdmFsdWVfcHRyKGYpKTsK
LSAgdXBiX3N0cnRhYmxlX2luc2VydCgmbS0+bnRvZiwgdXBiX2ZpZWxkZGVmX25hbWUoZiksIHVw
Yl92YWx1ZV9wdHIoZikpOwotICB1cGJfcmVmMihmLCBtKTsKLSAgdXBiX3JlZjIobSwgZik7Ci0g
IGlmIChyZWZfZG9ub3IpIHVwYl9maWVsZGRlZl91bnJlZihmLCByZWZfZG9ub3IpOwotfQotCi1i
b29sIHVwYl9tc2dkZWZfYWRkZmllbGQodXBiX21zZ2RlZiAqbSwgdXBiX2ZpZWxkZGVmICpmLCBj
b25zdCB2b2lkICpyZWZfZG9ub3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1
cyAqcykgewotICAvKiBUT0RPOiBleHRlbnNpb25zIG5lZWQgdG8gaGF2ZSBhIHNlcGFyYXRlIG5h
bWVzcGFjZSwgYmVjYXVzZSBwcm90bzIgYWxsb3dzIGEKLSAgICogdG9wLWxldmVsIGV4dGVuc2lv
biAoaWUuIG9uZSBub3QgaW4gYW55IHBhY2thZ2UpIHRvIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBh
Ci0gICAqIGZpZWxkIGZyb20gdGhlIG1lc3NhZ2UuCi0gICAqCi0gICAqIFRoaXMgYWxzbyBpbXBs
aWVzIHRoYXQgdGhlcmUgbmVlZHMgdG8gYmUgYSBzZXBhcmF0ZSBsb29rdXAtYnktbmFtZSBtZXRo
b2QKLSAgICogZm9yIGV4dGVuc2lvbnMuICBJdCBzZWVtcyBkZXNpcmFibGUgZm9yIGl0ZXJhdGlv
biB0byByZXR1cm4gYm90aCBleHRlbnNpb25zCi0gICAqIGFuZCBub24tZXh0ZW5zaW9ucyB0aG91
Z2guCi0gICAqCi0gICAqIFdlIGFsc28gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWVsZCBu
dW1iZXIgaXMgaW4gYW4gZXh0ZW5zaW9uIHJhbmdlIGlmZgotICAgKiBpdCBpcyBhbiBleHRlbnNp
b24uCi0gICAqCi0gICAqIFRoaXMgbWV0aG9kIGlzIGlkZW1wb3RlbnQuIENoZWNrIGlmIHxmfCBp
cyBhbHJlYWR5IHBhcnQgb2YgdGhpcyBtc2dkZWYgYW5kCi0gICAqIHJldHVybiBpbW1lZGlhdGVs
eSBpZiBzby4gKi8KLSAgaWYgKHVwYl9maWVsZGRlZl9jb250YWluaW5ndHlwZShmKSA9PSBtKSB7
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKiBDaGVjayBjb25zdHJhaW50cyBmb3IgYWxs
IGZpZWxkcyBiZWZvcmUgcGVyZm9ybWluZyBhbnkgYWN0aW9uLiAqLwotICBpZiAoIWNoZWNrX2Zp
ZWxkX2FkZChtLCBmLCBzKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlmICh1cGJf
ZmllbGRkZWZfY29udGFpbmluZ29uZW9mKGYpICE9IE5VTEwpIHsKLSAgICAvKiBGaWVsZHMgaW4g
YSBvbmVvZiBjYW4gb25seSBiZSBhZGRlZCBieSBhZGRpbmcgdGhlIG9uZW9mIHRvIHRoZSBtc2dk
ZWYuICovCi0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgImZpZWxkZGVmIGlzIHBhcnQgb2Yg
YSBvbmVvZiIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qIENvbnN0cmFpbnQgY2hl
Y2tzIG9rLCBwZXJmb3JtIHRoZSBhY3Rpb24uICovCi0gIGFkZF9maWVsZChtLCBmLCByZWZfZG9u
b3IpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB1cGJfbXNnZGVmX2FkZG9uZW9mKHVwYl9t
c2dkZWYgKm0sIHVwYl9vbmVvZmRlZiAqbywgY29uc3Qgdm9pZCAqcmVmX2Rvbm9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgdXBiX29uZW9mX2l0ZXIgaXQ7
Ci0KLSAgLyogQ2hlY2sgdmFyaW91cyBjb25kaXRpb25zIHRoYXQgd291bGQgcHJldmVudCB0aGlz
IG9uZW9mIGZyb20gYmVpbmcgYWRkZWQuICovCi0gIGlmICh1cGJfb25lb2ZkZWZfY29udGFpbmlu
Z3R5cGUobykpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzLCAib25lb2ZkZWYgYWxyZWFk
eSBiZWxvbmdzIHRvIGEgbWVzc2FnZSIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlm
ICh1cGJfb25lb2ZkZWZfbmFtZShvKSA9PSBOVUxMKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJt
c2cocywgIm9uZW9mZGVmIG5hbWUgd2FzIG5vdCBzZXQiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0gZWxzZSBpZiAodXBiX3N0cnRhYmxlX2xvb2t1cCgmbS0+bnRvZiwgdXBiX29uZW9mZGVmX25h
bWUobyksIE5VTEwpKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgIm5hbWUgY29uZmxp
Y3RzIHdpdGggZXhpc3RpbmcgZmllbGQgb3Igb25lb2YiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0KLQotICAvKiBDaGVjayB0aGF0IGFsbCBvZiB0aGUgb25lb2YncyBmaWVsZHMgZG8gbm90IGNv
bmZsaWN0IHdpdGggbmFtZXMgb3IgbnVtYmVycwotICAgKiBvZiBmaWVsZHMgYWxyZWFkeSBpbiB0
aGUgbWVzc2FnZS4gKi8KLSAgZm9yICh1cGJfb25lb2ZfYmVnaW4oJml0LCBvKTsgIXVwYl9vbmVv
Zl9kb25lKCZpdCk7IHVwYl9vbmVvZl9uZXh0KCZpdCkpIHsKLSAgICBjb25zdCB1cGJfZmllbGRk
ZWYgKmYgPSB1cGJfb25lb2ZfaXRlcl9maWVsZCgmaXQpOwotICAgIGlmICghY2hlY2tfZmllbGRf
YWRkKG0sIGYsIHMpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLyog
RXZlcnl0aGluZyBjaGVja3Mgb3V0IC0tIGNvbW1pdCBub3cuICovCi0KLSAgLyogQWRkIG9uZW9m
IGl0c2VsZiBmaXJzdC4gKi8KLSAgby0+cGFyZW50ID0gbTsKLSAgdXBiX3N0cnRhYmxlX2luc2Vy
dCgmbS0+bnRvZiwgdXBiX29uZW9mZGVmX25hbWUobyksIHVwYl92YWx1ZV9wdHIobykpOwotICB1
cGJfcmVmMihvLCBtKTsKLSAgdXBiX3JlZjIobSwgbyk7Ci0KLSAgLyogQWRkIGVhY2ggZmllbGQg
b2YgdGhlIG9uZW9mIGRpcmVjdGx5IHRvIHRoZSBtc2dkZWYuICovCi0gIGZvciAodXBiX29uZW9m
X2JlZ2luKCZpdCwgbyk7ICF1cGJfb25lb2ZfZG9uZSgmaXQpOyB1cGJfb25lb2ZfbmV4dCgmaXQp
KSB7Ci0gICAgdXBiX2ZpZWxkZGVmICpmID0gdXBiX29uZW9mX2l0ZXJfZmllbGQoJml0KTsKLSAg
ICBhZGRfZmllbGQobSwgZiwgTlVMTCk7Ci0gIH0KLQotICBpZiAocmVmX2Rvbm9yKSB1cGJfb25l
b2ZkZWZfdW5yZWYobywgcmVmX2Rvbm9yKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3Qg
dXBiX2ZpZWxkZGVmICp1cGJfbXNnZGVmX2l0b2YoY29uc3QgdXBiX21zZ2RlZiAqbSwgdWludDMy
X3QgaSkgewotICB1cGJfdmFsdWUgdmFsOwotICByZXR1cm4gdXBiX2ludHRhYmxlX2xvb2t1cDMy
KCZtLT5pdG9mLCBpLCAmdmFsKSA/Ci0gICAgICB1cGJfdmFsdWVfZ2V0cHRyKHZhbCkgOiBOVUxM
OwotfQotCi1jb25zdCB1cGJfZmllbGRkZWYgKnVwYl9tc2dkZWZfbnRvZihjb25zdCB1cGJfbXNn
ZGVmICptLCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGxlbikgewotICB1cGJfdmFsdWUgdmFsOwotCi0gIGlmICghdXBiX3N0cnRh
YmxlX2xvb2t1cDIoJm0tPm50b2YsIG5hbWUsIGxlbiwgJnZhbCkpIHsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQotCi0gIHJldHVybiB1cGJfdHJ5Z2V0ZmllbGQodXBiX3ZhbHVlX2dldHB0cih2YWwp
KTsKLX0KLQotY29uc3QgdXBiX29uZW9mZGVmICp1cGJfbXNnZGVmX250b28oY29uc3QgdXBiX21z
Z2RlZiAqbSwgY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBsZW4pIHsKLSAgdXBiX3ZhbHVlIHZhbDsKLQotICBpZiAoIXVwYl9zdHJ0
YWJsZV9sb29rdXAyKCZtLT5udG9mLCBuYW1lLCBsZW4sICZ2YWwpKSB7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0KLQotICByZXR1cm4gdXBiX3RyeWdldG9uZW9mKHVwYl92YWx1ZV9nZXRwdHIodmFs
KSk7Ci19Ci0KLWJvb2wgdXBiX21zZ2RlZl9sb29rdXBuYW1lKGNvbnN0IHVwYl9tc2dkZWYgKm0s
IGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1cGJfZmllbGRkZWYgKipmLCBjb25zdCB1cGJfb25lb2ZkZWYgKipvKSB7Ci0gIHVw
Yl92YWx1ZSB2YWw7Ci0KLSAgaWYgKCF1cGJfc3RydGFibGVfbG9va3VwMigmbS0+bnRvZiwgbmFt
ZSwgbGVuLCAmdmFsKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gICpvID0gdXBiX3Ry
eWdldG9uZW9mKHVwYl92YWx1ZV9nZXRwdHIodmFsKSk7Ci0gICpmID0gdXBiX3RyeWdldGZpZWxk
KHVwYl92YWx1ZV9nZXRwdHIodmFsKSk7Ci0gIGFzc2VydCgoKm8gIT0gTlVMTCkgXiAoKmYgIT0g
TlVMTCkpOyAgLyogRXhhY3RseSBvbmUgb2YgdGhlIHR3byBzaG91bGQgYmUgc2V0LiAqLwotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotaW50IHVwYl9tc2dkZWZfbnVtZmllbGRzKGNvbnN0IHVwYl9tc2dk
ZWYgKm0pIHsKLSAgLyogVGhlIG51bWJlciB0YWJsZSBjb250YWlucyBvbmx5IGZpZWxkcy4gKi8K
LSAgcmV0dXJuIHVwYl9pbnR0YWJsZV9jb3VudCgmbS0+aXRvZik7Ci19Ci0KLWludCB1cGJfbXNn
ZGVmX251bW9uZW9mcyhjb25zdCB1cGJfbXNnZGVmICptKSB7Ci0gIC8qIFRoZSBuYW1lIHRhYmxl
IGluY2x1ZGVzIG9uZW9mcywgYW5kIHRoZSBudW1iZXIgdGFibGUgZG9lcyBub3QuICovCi0gIHJl
dHVybiB1cGJfc3RydGFibGVfY291bnQoJm0tPm50b2YpIC0gdXBiX2ludHRhYmxlX2NvdW50KCZt
LT5pdG9mKTsKLX0KLQotdm9pZCB1cGJfbXNnZGVmX3NldG1hcGVudHJ5KHVwYl9tc2dkZWYgKm0s
IGJvb2wgbWFwX2VudHJ5KSB7Ci0gIGFzc2VydCghdXBiX21zZ2RlZl9pc2Zyb3plbihtKSk7Ci0g
IG0tPm1hcF9lbnRyeSA9IG1hcF9lbnRyeTsKLX0KLQotYm9vbCB1cGJfbXNnZGVmX21hcGVudHJ5
KGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIG0tPm1hcF9lbnRyeTsKLX0KLQotdm9p
ZCB1cGJfbXNnX2ZpZWxkX2JlZ2luKHVwYl9tc2dfZmllbGRfaXRlciAqaXRlciwgY29uc3QgdXBi
X21zZ2RlZiAqbSkgewotICB1cGJfaW50dGFibGVfYmVnaW4oaXRlciwgJm0tPml0b2YpOwotfQot
Ci12b2lkIHVwYl9tc2dfZmllbGRfbmV4dCh1cGJfbXNnX2ZpZWxkX2l0ZXIgKml0ZXIpIHsgdXBi
X2ludHRhYmxlX25leHQoaXRlcik7IH0KLQotYm9vbCB1cGJfbXNnX2ZpZWxkX2RvbmUoY29uc3Qg
dXBiX21zZ19maWVsZF9pdGVyICppdGVyKSB7Ci0gIHJldHVybiB1cGJfaW50dGFibGVfZG9uZShp
dGVyKTsKLX0KLQotdXBiX2ZpZWxkZGVmICp1cGJfbXNnX2l0ZXJfZmllbGQoY29uc3QgdXBiX21z
Z19maWVsZF9pdGVyICppdGVyKSB7Ci0gIHJldHVybiAodXBiX2ZpZWxkZGVmKil1cGJfdmFsdWVf
Z2V0cHRyKHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVlKGl0ZXIpKTsKLX0KLQotdm9pZCB1cGJfbXNn
X2ZpZWxkX2l0ZXJfc2V0ZG9uZSh1cGJfbXNnX2ZpZWxkX2l0ZXIgKml0ZXIpIHsKLSAgdXBiX2lu
dHRhYmxlX2l0ZXJfc2V0ZG9uZShpdGVyKTsKLX0KLQotdm9pZCB1cGJfbXNnX29uZW9mX2JlZ2lu
KHVwYl9tc2dfb25lb2ZfaXRlciAqaXRlciwgY29uc3QgdXBiX21zZ2RlZiAqbSkgewotICB1cGJf
c3RydGFibGVfYmVnaW4oaXRlciwgJm0tPm50b2YpOwotICAvKiBXZSBuZWVkIHRvIHNraXAgcGFz
dCBhbnkgaW5pdGlhbCBmaWVsZHMuICovCi0gIHdoaWxlICghdXBiX3N0cnRhYmxlX2RvbmUoaXRl
cikgJiYKLSAgICAgICAgICF1cGJfaXNvbmVvZih1cGJfdmFsdWVfZ2V0cHRyKHVwYl9zdHJ0YWJs
ZV9pdGVyX3ZhbHVlKGl0ZXIpKSkpIHsKLSAgICB1cGJfc3RydGFibGVfbmV4dChpdGVyKTsKLSAg
fQotfQotCi12b2lkIHVwYl9tc2dfb25lb2ZfbmV4dCh1cGJfbXNnX29uZW9mX2l0ZXIgKml0ZXIp
IHsKLSAgLyogV2UgbmVlZCB0byBza2lwIHBhc3QgZmllbGRzIHRvIHJldHVybiBvbmx5IG9uZW9m
cy4gKi8KLSAgZG8gewotICAgIHVwYl9zdHJ0YWJsZV9uZXh0KGl0ZXIpOwotICB9IHdoaWxlICgh
dXBiX3N0cnRhYmxlX2RvbmUoaXRlcikgJiYKLSAgICAgICAgICAgIXVwYl9pc29uZW9mKHVwYl92
YWx1ZV9nZXRwdHIodXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoaXRlcikpKSk7Ci19Ci0KLWJvb2wg
dXBiX21zZ19vbmVvZl9kb25lKGNvbnN0IHVwYl9tc2dfb25lb2ZfaXRlciAqaXRlcikgewotICBy
ZXR1cm4gdXBiX3N0cnRhYmxlX2RvbmUoaXRlcik7Ci19Ci0KLXVwYl9vbmVvZmRlZiAqdXBiX21z
Z19pdGVyX29uZW9mKGNvbnN0IHVwYl9tc2dfb25lb2ZfaXRlciAqaXRlcikgewotICByZXR1cm4g
KHVwYl9vbmVvZmRlZiopdXBiX3ZhbHVlX2dldHB0cih1cGJfc3RydGFibGVfaXRlcl92YWx1ZShp
dGVyKSk7Ci19Ci0KLXZvaWQgdXBiX21zZ19vbmVvZl9pdGVyX3NldGRvbmUodXBiX21zZ19vbmVv
Zl9pdGVyICppdGVyKSB7Ci0gIHVwYl9zdHJ0YWJsZV9pdGVyX3NldGRvbmUoaXRlcik7Ci19Ci0K
LS8qIHVwYl9vbmVvZmRlZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIHZpc2l0b25lb2YoY29uc3Qg
dXBiX3JlZmNvdW50ZWQgKnIsIHVwYl9yZWZjb3VudGVkX3Zpc2l0ICp2aXNpdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgewotICBjb25zdCB1cGJfb25lb2ZkZWYgKm8g
PSAoY29uc3QgdXBiX29uZW9mZGVmKilyOwotICB1cGJfb25lb2ZfaXRlciBpOwotICBmb3IgKHVw
Yl9vbmVvZl9iZWdpbigmaSwgbyk7ICF1cGJfb25lb2ZfZG9uZSgmaSk7IHVwYl9vbmVvZl9uZXh0
KCZpKSkgewotICAgIGNvbnN0IHVwYl9maWVsZGRlZiAqZiA9IHVwYl9vbmVvZl9pdGVyX2ZpZWxk
KCZpKTsKLSAgICB2aXNpdChyLCB1cGJfZmllbGRkZWZfdXBjYXN0MihmKSwgY2xvc3VyZSk7Ci0g
IH0KLSAgaWYgKG8tPnBhcmVudCkgewotICAgIHZpc2l0KHIsIHVwYl9tc2dkZWZfdXBjYXN0Mihv
LT5wYXJlbnQpLCBjbG9zdXJlKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBmcmVlb25lb2YodXBi
X3JlZmNvdW50ZWQgKnIpIHsKLSAgdXBiX29uZW9mZGVmICpvID0gKHVwYl9vbmVvZmRlZiopcjsK
LSAgdXBiX3N0cnRhYmxlX3VuaW5pdCgmby0+bnRvZik7Ci0gIHVwYl9pbnR0YWJsZV91bmluaXQo
Jm8tPml0b2YpOwotICB1cGJfZ2ZyZWUoKHZvaWQqKW8tPm5hbWUpOwotICB1cGJfZ2ZyZWUobyk7
Ci19Ci0KLWNvbnN0IHN0cnVjdCB1cGJfcmVmY291bnRlZF92dGJsIHVwYl9vbmVvZmRlZl92dGJs
ID0ge3Zpc2l0b25lb2YsIGZyZWVvbmVvZn07Ci0KLXVwYl9vbmVvZmRlZiAqdXBiX29uZW9mZGVm
X25ldyhjb25zdCB2b2lkICpvd25lcikgewotICB1cGJfb25lb2ZkZWYgKm8gPSB1cGJfZ21hbGxv
YyhzaXplb2YoKm8pKTsKLQotICBpZiAoIW8pIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0g
IG8tPnBhcmVudCA9IE5VTEw7Ci0gIG8tPm5hbWUgPSBOVUxMOwotCi0gIGlmICghdXBiX3JlZmNv
dW50ZWRfaW5pdCh1cGJfb25lb2ZkZWZfdXBjYXN0X211dGFibGUobyksICZ1cGJfb25lb2ZkZWZf
dnRibCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyKSkgewotICAgIGdvdG8gZXJy
MjsKLSAgfQotCi0gIGlmICghdXBiX2ludHRhYmxlX2luaXQoJm8tPml0b2YsIFVQQl9DVFlQRV9Q
VFIpKSBnb3RvIGVycjI7Ci0gIGlmICghdXBiX3N0cnRhYmxlX2luaXQoJm8tPm50b2YsIFVQQl9D
VFlQRV9QVFIpKSBnb3RvIGVycjE7Ci0KLSAgcmV0dXJuIG87Ci0KLWVycjE6Ci0gIHVwYl9pbnR0
YWJsZV91bmluaXQoJm8tPml0b2YpOwotZXJyMjoKLSAgdXBiX2dmcmVlKG8pOwotICByZXR1cm4g
TlVMTDsKLX0KLQotdXBiX29uZW9mZGVmICp1cGJfb25lb2ZkZWZfZHVwKGNvbnN0IHVwYl9vbmVv
ZmRlZiAqbywgY29uc3Qgdm9pZCAqb3duZXIpIHsKLSAgYm9vbCBvazsKLSAgdXBiX29uZW9mX2l0
ZXIgaTsKLSAgdXBiX29uZW9mZGVmICpuZXdvID0gdXBiX29uZW9mZGVmX25ldyhvd25lcik7Ci0g
IGlmICghbmV3bykgcmV0dXJuIE5VTEw7Ci0gIG9rID0gdXBiX29uZW9mZGVmX3NldG5hbWUobmV3
bywgdXBiX29uZW9mZGVmX25hbWUobyksIE5VTEwpOwotICBVUEJfQVNTRVJUX1ZBUihvaywgb2sp
OwotICBmb3IgKHVwYl9vbmVvZl9iZWdpbigmaSwgbyk7ICF1cGJfb25lb2ZfZG9uZSgmaSk7IHVw
Yl9vbmVvZl9uZXh0KCZpKSkgewotICAgIHVwYl9maWVsZGRlZiAqZiA9IHVwYl9maWVsZGRlZl9k
dXAodXBiX29uZW9mX2l0ZXJfZmllbGQoJmkpLCAmZik7Ci0gICAgaWYgKCFmIHx8ICF1cGJfb25l
b2ZkZWZfYWRkZmllbGQobmV3bywgZiwgJmYsIE5VTEwpKSB7Ci0gICAgICB1cGJfb25lb2ZkZWZf
dW5yZWYobmV3bywgb3duZXIpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICB9Ci0gIHJl
dHVybiBuZXdvOwotfQotCi1jb25zdCBjaGFyICp1cGJfb25lb2ZkZWZfbmFtZShjb25zdCB1cGJf
b25lb2ZkZWYgKm8pIHsgcmV0dXJuIG8tPm5hbWU7IH0KLQotYm9vbCB1cGJfb25lb2ZkZWZfc2V0
bmFtZSh1cGJfb25lb2ZkZWYgKm8sIGNvbnN0IGNoYXIgKm5hbWUsIHVwYl9zdGF0dXMgKnMpIHsK
LSAgYXNzZXJ0KCF1cGJfb25lb2ZkZWZfaXNmcm96ZW4obykpOwotICBpZiAodXBiX29uZW9mZGVm
X2NvbnRhaW5pbmd0eXBlKG8pKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgIm9uZW9m
IGFscmVhZHkgYWRkZWQgdG8gYSBtZXNzYWdlIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0K
LSAgaWYgKCF1cGJfaXNpZGVudChuYW1lLCBzdHJsZW4obmFtZSksIHRydWUsIHMpKSB7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgbmFtZSA9IHVwYl9nc3RyZHVwKG5hbWUpOwotICBpZiAo
IW5hbWUpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzLCAiT25lIG9mIG1lbW9yeSIpOwot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHVwYl9nZnJlZSgodm9pZCopby0+bmFtZSk7Ci0g
IG8tPm5hbWUgPSBuYW1lOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3QgdXBiX21zZ2RlZiAq
dXBiX29uZW9mZGVmX2NvbnRhaW5pbmd0eXBlKGNvbnN0IHVwYl9vbmVvZmRlZiAqbykgewotICBy
ZXR1cm4gby0+cGFyZW50OwotfQotCi1pbnQgdXBiX29uZW9mZGVmX251bWZpZWxkcyhjb25zdCB1
cGJfb25lb2ZkZWYgKm8pIHsKLSAgcmV0dXJuIHVwYl9zdHJ0YWJsZV9jb3VudCgmby0+bnRvZik7
Ci19Ci0KLWJvb2wgdXBiX29uZW9mZGVmX2FkZGZpZWxkKHVwYl9vbmVvZmRlZiAqbywgdXBiX2Zp
ZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmVmX2Rv
bm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcykgewotICBhc3Nl
cnQoIXVwYl9vbmVvZmRlZl9pc2Zyb3plbihvKSk7Ci0gIGFzc2VydCghby0+cGFyZW50IHx8ICF1
cGJfbXNnZGVmX2lzZnJvemVuKG8tPnBhcmVudCkpOwotCi0gIC8qIFRoaXMgbWV0aG9kIGlzIGlk
ZW1wb3RlbnQuIENoZWNrIGlmIHxmfCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhpcyBvbmVvZmRlZgot
ICAgKiBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHNvLiAqLwotICBpZiAodXBiX2ZpZWxkZGVm
X2NvbnRhaW5pbmdvbmVvZihmKSA9PSBvKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAv
KiBUaGUgZmllbGQgbXVzdCBoYXZlIGFuIE9QVElPTkFMIGxhYmVsLiAqLwotICBpZiAodXBiX2Zp
ZWxkZGVmX2xhYmVsKGYpICE9IFVQQl9MQUJFTF9PUFRJT05BTCkgewotICAgIHVwYl9zdGF0dXNf
c2V0ZXJybXNnKHMsICJmaWVsZHMgaW4gb25lb2YgbXVzdCBoYXZlIE9QVElPTkFMIGxhYmVsIik7
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyogQ2hlY2sgdGhhdCBubyBmaWVsZCB3aXRo
IHRoaXMgbmFtZSBvciBudW1iZXIgZXhpc3RzIGFscmVhZHkgaW4gdGhlIG9uZW9mLgotICAgKiBB
bHNvIGNoZWNrIHRoYXQgdGhlIGZpZWxkIGlzIG5vdCBhbHJlYWR5IHBhcnQgb2YgYSBvbmVvZi4g
Ki8KLSAgaWYgKHVwYl9maWVsZGRlZl9uYW1lKGYpID09IE5VTEwgfHwgdXBiX2ZpZWxkZGVmX251
bWJlcihmKSA9PSAwKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgImZpZWxkIG5hbWUg
b3IgbnVtYmVyIHdlcmUgbm90IHNldCIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlm
ICh1cGJfb25lb2ZkZWZfaXRvZihvLCB1cGJfZmllbGRkZWZfbnVtYmVyKGYpKSB8fAotICAgICAg
ICAgICAgIHVwYl9vbmVvZmRlZl9udG9meihvLCB1cGJfZmllbGRkZWZfbmFtZShmKSkpIHsKLSAg
ICB1cGJfc3RhdHVzX3NldGVycm1zZyhzLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgb3IgbnVtYmVy
Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgaWYgKHVwYl9maWVsZGRlZl9jb250YWlu
aW5nb25lb2YoZikgIT0gTlVMTCkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHMsICJmaWVs
ZGRlZiBhbHJlYWR5IGJlbG9uZ3MgdG8gYSBvbmVvZiIpOwotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIC8qIFdlIGFsbG93IGFkZGluZyBhIGZpZWxkIHRvIHRoZSBvbmVvZiBlaXRoZXIgaWYg
dGhlIGZpZWxkIGlzIG5vdCBwYXJ0IG9mIGEKLSAgICogbXNnZGVmLCBvciBpZiBpdCBpcyBhbmQg
d2UgYXJlIGFsc28gcGFydCBvZiB0aGUgc2FtZSBtc2dkZWYuICovCi0gIGlmIChvLT5wYXJlbnQg
PT0gTlVMTCkgewotICAgIC8qIElmIHdlJ3JlIG5vdCBpbiBhIG1zZ2RlZiwgdGhlIGZpZWxkIGNh
bm5vdCBiZSBlaXRoZXIuIE90aGVyd2lzZSB3ZSB3b3VsZAotICAgICAqIG5lZWQgdG8gbWFnaWNh
bGx5IGFkZCB0aGlzIG9uZW9mIHRvIGEgbXNnZGVmIHRvIHJlbWFpbiBjb25zaXN0ZW50LCB3aGlj
aAotICAgICAqIGlzIHN1cnByaXNpbmcgYmVoYXZpb3IuICovCi0gICAgaWYgKHVwYl9maWVsZGRl
Zl9jb250YWluaW5ndHlwZShmKSAhPSBOVUxMKSB7Ci0gICAgICB1cGJfc3RhdHVzX3NldGVycm1z
ZyhzLCAiZmllbGRkZWYgYWxyZWFkeSBiZWxvbmdzIHRvIGEgbWVzc2FnZSwgYnV0ICIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJvbmVvZiBkb2VzIG5vdCIpOwotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBJZiB3ZSdyZSBpbiBhIG1zZ2RlZiwg
dGhlIHVzZXIgY2FuIGFkZCBmaWVsZHMgdGhhdCBlaXRoZXIgYXJlbid0IGluIGFueQotICAgICAq
IG1zZ2RlZiAoaW4gd2hpY2ggY2FzZSB0aGV5J3JlIGFkZGVkIHRvIG91ciBtc2dkZWYpIG9yIGFs
cmVhZHkgYSBwYXJ0IG9mCi0gICAgICogb3VyIG1zZ2RlZi4gKi8KLSAgICBpZiAodXBiX2ZpZWxk
ZGVmX2NvbnRhaW5pbmd0eXBlKGYpICE9IE5VTEwgJiYKLSAgICAgICAgdXBiX2ZpZWxkZGVmX2Nv
bnRhaW5pbmd0eXBlKGYpICE9IG8tPnBhcmVudCkgewotICAgICAgdXBiX3N0YXR1c19zZXRlcnJt
c2cocywgImZpZWxkZGVmIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgbWVzc2FnZSAiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGhhbiBvbmVvZiIpOwotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgfQotCi0gIC8qIENvbW1pdCBwaGFzZS4gRmlyc3QgYWRkIHRoZSBmaWVsZCB0
byBvdXIgcGFyZW50IG1zZ2RlZiwgaWYgYW55LCBiZWNhdXNlCi0gICAqIHRoYXQgbWF5IGZhaWw7
IHRoZW4gYWRkIHRoZSBmaWVsZCB0byBvdXIgb3duIHRhYmxlcy4gKi8KLQotICBpZiAoby0+cGFy
ZW50ICE9IE5VTEwgJiYgdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlKGYpID09IE5VTEwpIHsK
LSAgICBpZiAoIXVwYl9tc2dkZWZfYWRkZmllbGQoKHVwYl9tc2dkZWYqKW8tPnBhcmVudCwgZiwg
TlVMTCwgcykpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICByZWxlYXNl
X2NvbnRhaW5pbmd0eXBlKGYpOwotICBmLT5vbmVvZiA9IG87Ci0gIHVwYl9pbnR0YWJsZV9pbnNl
cnQoJm8tPml0b2YsIHVwYl9maWVsZGRlZl9udW1iZXIoZiksIHVwYl92YWx1ZV9wdHIoZikpOwot
ICB1cGJfc3RydGFibGVfaW5zZXJ0KCZvLT5udG9mLCB1cGJfZmllbGRkZWZfbmFtZShmKSwgdXBi
X3ZhbHVlX3B0cihmKSk7Ci0gIHVwYl9yZWYyKGYsIG8pOwotICB1cGJfcmVmMihvLCBmKTsKLSAg
aWYgKHJlZl9kb25vcikgdXBiX2ZpZWxkZGVmX3VucmVmKGYsIHJlZl9kb25vcik7Ci0KLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLWNvbnN0IHVwYl9maWVsZGRlZiAqdXBiX29uZW9mZGVmX250b2YoY29u
c3QgdXBiX29uZW9mZGVmICpvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuZ3RoKSB7Ci0gIHVwYl92YWx1ZSB2YWw7Ci0g
IHJldHVybiB1cGJfc3RydGFibGVfbG9va3VwMigmby0+bnRvZiwgbmFtZSwgbGVuZ3RoLCAmdmFs
KSA/Ci0gICAgICB1cGJfdmFsdWVfZ2V0cHRyKHZhbCkgOiBOVUxMOwotfQotCi1jb25zdCB1cGJf
ZmllbGRkZWYgKnVwYl9vbmVvZmRlZl9pdG9mKGNvbnN0IHVwYl9vbmVvZmRlZiAqbywgdWludDMy
X3QgbnVtKSB7Ci0gIHVwYl92YWx1ZSB2YWw7Ci0gIHJldHVybiB1cGJfaW50dGFibGVfbG9va3Vw
MzIoJm8tPml0b2YsIG51bSwgJnZhbCkgPwotICAgICAgdXBiX3ZhbHVlX2dldHB0cih2YWwpIDog
TlVMTDsKLX0KLQotdm9pZCB1cGJfb25lb2ZfYmVnaW4odXBiX29uZW9mX2l0ZXIgKml0ZXIsIGNv
bnN0IHVwYl9vbmVvZmRlZiAqbykgewotICB1cGJfaW50dGFibGVfYmVnaW4oaXRlciwgJm8tPml0
b2YpOwotfQotCi12b2lkIHVwYl9vbmVvZl9uZXh0KHVwYl9vbmVvZl9pdGVyICppdGVyKSB7Ci0g
IHVwYl9pbnR0YWJsZV9uZXh0KGl0ZXIpOwotfQotCi1ib29sIHVwYl9vbmVvZl9kb25lKHVwYl9v
bmVvZl9pdGVyICppdGVyKSB7Ci0gIHJldHVybiB1cGJfaW50dGFibGVfZG9uZShpdGVyKTsKLX0K
LQotdXBiX2ZpZWxkZGVmICp1cGJfb25lb2ZfaXRlcl9maWVsZChjb25zdCB1cGJfb25lb2ZfaXRl
ciAqaXRlcikgewotICByZXR1cm4gKHVwYl9maWVsZGRlZiopdXBiX3ZhbHVlX2dldHB0cih1cGJf
aW50dGFibGVfaXRlcl92YWx1ZShpdGVyKSk7Ci19Ci0KLXZvaWQgdXBiX29uZW9mX2l0ZXJfc2V0
ZG9uZSh1cGJfb25lb2ZfaXRlciAqaXRlcikgewotICB1cGJfaW50dGFibGVfaXRlcl9zZXRkb25l
KGl0ZXIpOwotfQotCi0vKiB1cGJfZmlsZWRlZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCB2aXNp
dGZpbGVkZWYoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIHVwYl9yZWZjb3VudGVkX3Zpc2l0ICp2
aXNpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIGNvbnN0
IHVwYl9maWxlZGVmICpmID0gKGNvbnN0IHVwYl9maWxlZGVmKilyOwotICBzaXplX3QgaTsKLQot
ICBmb3IoaSA9IDA7IGkgPCB1cGJfZmlsZWRlZl9kZWZjb3VudChmKTsgaSsrKSB7Ci0gICAgdmlz
aXQociwgdXBiX2RlZl91cGNhc3QodXBiX2ZpbGVkZWZfZGVmKGYsIGkpKSwgY2xvc3VyZSk7Ci0g
IH0KLX0KLQotc3RhdGljIHZvaWQgZnJlZWZpbGVkZWYodXBiX3JlZmNvdW50ZWQgKnIpIHsKLSAg
dXBiX2ZpbGVkZWYgKmYgPSAodXBiX2ZpbGVkZWYqKXI7Ci0gIHNpemVfdCBpOwotCi0gIGZvcihp
ID0gMDsgaSA8IHVwYl9maWxlZGVmX2RlcGNvdW50KGYpOyBpKyspIHsKLSAgICB1cGJfZmlsZWRl
Zl91bnJlZih1cGJfZmlsZWRlZl9kZXAoZiwgaSksIGYpOwotICB9Ci0KLSAgdXBiX2ludHRhYmxl
X3VuaW5pdCgmZi0+ZGVmcyk7Ci0gIHVwYl9pbnR0YWJsZV91bmluaXQoJmYtPmRlcHMpOwotICB1
cGJfZ2ZyZWUoKHZvaWQqKWYtPm5hbWUpOwotICB1cGJfZ2ZyZWUoKHZvaWQqKWYtPnBhY2thZ2Up
OwotICB1cGJfZ2ZyZWUoZik7Ci19Ci0KLWNvbnN0IHN0cnVjdCB1cGJfcmVmY291bnRlZF92dGJs
IHVwYl9maWxlZGVmX3Z0YmwgPSB7dmlzaXRmaWxlZGVmLCBmcmVlZmlsZWRlZn07Ci0KLXVwYl9m
aWxlZGVmICp1cGJfZmlsZWRlZl9uZXcoY29uc3Qgdm9pZCAqb3duZXIpIHsKLSAgdXBiX2ZpbGVk
ZWYgKmYgPSB1cGJfZ21hbGxvYyhzaXplb2YoKmYpKTsKLQotICBpZiAoIWYpIHsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotCi0gIGYtPnBhY2thZ2UgPSBOVUxMOwotICBmLT5uYW1lID0gTlVMTDsK
LSAgZi0+c3ludGF4ID0gVVBCX1NZTlRBWF9QUk9UTzI7Ci0KLSAgaWYgKCF1cGJfcmVmY291bnRl
ZF9pbml0KHVwYl9maWxlZGVmX3VwY2FzdF9tdXRhYmxlKGYpLCAmdXBiX2ZpbGVkZWZfdnRibCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyKSkgewotICAgIGdvdG8gZXJyOwotICB9
Ci0KLSAgaWYgKCF1cGJfaW50dGFibGVfaW5pdCgmZi0+ZGVmcywgVVBCX0NUWVBFX0NPTlNUUFRS
KSkgewotICAgIGdvdG8gZXJyOwotICB9Ci0KLSAgaWYgKCF1cGJfaW50dGFibGVfaW5pdCgmZi0+
ZGVwcywgVVBCX0NUWVBFX0NPTlNUUFRSKSkgewotICAgIGdvdG8gZXJyMjsKLSAgfQotCi0gIHJl
dHVybiBmOwotCi0KLWVycjI6Ci0gIHVwYl9pbnR0YWJsZV91bmluaXQoJmYtPmRlZnMpOwotCi1l
cnI6Ci0gIHVwYl9nZnJlZShmKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWNvbnN0IGNoYXIgKnVw
Yl9maWxlZGVmX25hbWUoY29uc3QgdXBiX2ZpbGVkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPm5hbWU7
Ci19Ci0KLWNvbnN0IGNoYXIgKnVwYl9maWxlZGVmX3BhY2thZ2UoY29uc3QgdXBiX2ZpbGVkZWYg
KmYpIHsKLSAgcmV0dXJuIGYtPnBhY2thZ2U7Ci19Ci0KLXVwYl9zeW50YXhfdCB1cGJfZmlsZWRl
Zl9zeW50YXgoY29uc3QgdXBiX2ZpbGVkZWYgKmYpIHsKLSAgcmV0dXJuIGYtPnN5bnRheDsKLX0K
LQotc2l6ZV90IHVwYl9maWxlZGVmX2RlZmNvdW50KGNvbnN0IHVwYl9maWxlZGVmICpmKSB7Ci0g
IHJldHVybiB1cGJfaW50dGFibGVfY291bnQoJmYtPmRlZnMpOwotfQotCi1zaXplX3QgdXBiX2Zp
bGVkZWZfZGVwY291bnQoY29uc3QgdXBiX2ZpbGVkZWYgKmYpIHsKLSAgcmV0dXJuIHVwYl9pbnR0
YWJsZV9jb3VudCgmZi0+ZGVwcyk7Ci19Ci0KLWNvbnN0IHVwYl9kZWYgKnVwYl9maWxlZGVmX2Rl
Zihjb25zdCB1cGJfZmlsZWRlZiAqZiwgc2l6ZV90IGkpIHsKLSAgdXBiX3ZhbHVlIHY7Ci0KLSAg
aWYgKHVwYl9pbnR0YWJsZV9sb29rdXAzMigmZi0+ZGVmcywgaSwgJnYpKSB7Ci0gICAgcmV0dXJu
IHVwYl92YWx1ZV9nZXRjb25zdHB0cih2KTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gTlVMTDsK
LSAgfQotfQotCi1jb25zdCB1cGJfZmlsZWRlZiAqdXBiX2ZpbGVkZWZfZGVwKGNvbnN0IHVwYl9m
aWxlZGVmICpmLCBzaXplX3QgaSkgewotICB1cGJfdmFsdWUgdjsKLQotICBpZiAodXBiX2ludHRh
YmxlX2xvb2t1cDMyKCZmLT5kZXBzLCBpLCAmdikpIHsKLSAgICByZXR1cm4gdXBiX3ZhbHVlX2dl
dGNvbnN0cHRyKHYpOwotICB9IGVsc2UgewotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLWJv
b2wgdXBiX2ZpbGVkZWZfc2V0bmFtZSh1cGJfZmlsZWRlZiAqZiwgY29uc3QgY2hhciAqbmFtZSwg
dXBiX3N0YXR1cyAqcykgewotICBuYW1lID0gdXBiX2dzdHJkdXAobmFtZSk7Ci0gIGlmICghbmFt
ZSkgewotICAgIHVwYl91cGJlcnJfc2V0b29tKHMpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICB1cGJfZ2ZyZWUoKHZvaWQqKWYtPm5hbWUpOwotICBmLT5uYW1lID0gbmFtZTsKLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgdXBiX2ZpbGVkZWZfc2V0cGFja2FnZSh1cGJfZmlsZWRlZiAqZiwg
Y29uc3QgY2hhciAqcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3Rh
dHVzICpzKSB7Ci0gIGlmICghdXBiX2lzaWRlbnQocGFja2FnZSwgc3RybGVuKHBhY2thZ2UpLCB0
cnVlLCBzKSkgcmV0dXJuIGZhbHNlOwotICBwYWNrYWdlID0gdXBiX2dzdHJkdXAocGFja2FnZSk7
Ci0gIGlmICghcGFja2FnZSkgewotICAgIHVwYl91cGJlcnJfc2V0b29tKHMpOwotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotICB1cGJfZ2ZyZWUoKHZvaWQqKWYtPnBhY2thZ2UpOwotICBmLT5wYWNr
YWdlID0gcGFja2FnZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdXBiX2ZpbGVkZWZfc2V0
c3ludGF4KHVwYl9maWxlZGVmICpmLCB1cGJfc3ludGF4X3Qgc3ludGF4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcykgewotICBVUEJfVU5VU0VEKHMpOwotICBpZiAo
c3ludGF4ICE9IFVQQl9TWU5UQVhfUFJPVE8yICYmCi0gICAgICBzeW50YXggIT0gVVBCX1NZTlRB
WF9QUk9UTzMpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzLCAiVW5rbm93biBzeW50YXgg
dmFsdWUuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGYtPnN5bnRheCA9IHN5bnRheDsK
LQotICB7Ci0gICAgLyogU2V0IGFsbCBtZXNzYWdlcyBpbiB0aGlzIGZpbGUgdG8gbWF0Y2guICov
Ci0gICAgc2l6ZV90IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHVwYl9maWxlZGVmX2RlZmNvdW50
KGYpOyBpKyspIHsKLSAgICAgIC8qIENhc3RpbmcgY29uc3QgYXdheSBpcyBzYWZlIHNpbmNlIGFs
bCBkZWZzIGluIG11dGFibGUgZmlsZWRlZiBtdXN0Ci0gICAgICAgKiBhbHNvIGJlIG11dGFibGUu
ICovCi0gICAgICB1cGJfZGVmICpkZWYgPSAodXBiX2RlZiopdXBiX2ZpbGVkZWZfZGVmKGYsIGkp
OwotCi0gICAgICB1cGJfbXNnZGVmICptID0gdXBiX2R5bmNhc3RfbXNnZGVmX211dGFibGUoZGVm
KTsKLSAgICAgIGlmIChtKSB7Ci0gICAgICAgIG0tPnN5bnRheCA9IHN5bnRheDsKLSAgICAgIH0K
LSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB1cGJfZmlsZWRlZl9hZGRk
ZWYodXBiX2ZpbGVkZWYgKmYsIHVwYl9kZWYgKmRlZiwgY29uc3Qgdm9pZCAqcmVmX2Rvbm9yLAot
ICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcykgewotICBpZiAoZGVmLT5maWxl
KSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2cocywgIkRlZiBpcyBhbHJlYWR5IHBhcnQgb2Yg
YW5vdGhlciBmaWxlZGVmLiIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICh1cGJf
aW50dGFibGVfcHVzaCgmZi0+ZGVmcywgdXBiX3ZhbHVlX2NvbnN0cHRyKGRlZikpKSB7Ci0gICAg
ZGVmLT5maWxlID0gZjsKLSAgICB1cGJfcmVmMihkZWYsIGYpOwotICAgIGlmIChyZWZfZG9ub3Ip
IHVwYl9kZWZfdW5yZWYoZGVmLCByZWZfZG9ub3IpOwotICAgIGlmIChkZWYtPnR5cGUgPT0gVVBC
X0RFRl9NU0cpIHsKLSAgICAgIHVwYl9kb3duY2FzdF9tc2dkZWZfbXV0YWJsZShkZWYpLT5zeW50
YXggPSBmLT5zeW50YXg7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAg
IHVwYl91cGJlcnJfc2V0b29tKHMpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1ib29s
IHVwYl9maWxlZGVmX2FkZGRlcCh1cGJfZmlsZWRlZiAqZiwgY29uc3QgdXBiX2ZpbGVkZWYgKmRl
cCkgewotICBpZiAodXBiX2ludHRhYmxlX3B1c2goJmYtPmRlcHMsIHVwYl92YWx1ZV9jb25zdHB0
cihkZXApKSkgewotICAgIC8qIFJlZ3VsYXIgcmVmIGluc3RlYWQgb2YgcmVmMiBiZWNhdXNlIGZp
bGVzIGNhbid0IGZvcm0gY3ljbGVzLiAqLwotICAgIHVwYl9maWxlZGVmX3JlZihkZXAsIGYpOwot
ICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQot
LyoKLSoqIFRPRE8oaGFiZXJtYW4pOiBpdCdzIHVuY2xlYXIgd2hldGhlciBhIGxvdCBvZiB0aGUg
Y29uc2lzdGVuY3kgY2hlY2tzIHNob3VsZAotKiogYXNzZXJ0KCkgb3IgcmV0dXJuIGZhbHNlLgot
Ki8KLQotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLQotc3RhdGljIHZvaWQgKnVwYl9jYWxsb2Mo
c2l6ZV90IHNpemUpIHsKLSAgdm9pZCAqbWVtID0gdXBiX2dtYWxsb2Moc2l6ZSk7Ci0gIGlmICht
ZW0pIHsKLSAgICBtZW1zZXQobWVtLCAwLCBzaXplKTsKLSAgfQotICByZXR1cm4gbWVtOwotfQot
Ci0vKiBEZWZpbmVkIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGhhdmluZyBhIHVuaXF1ZSBwb2lu
dGVyIHZhbHVlIGZvcgotICogVVBCX05PX0NMT1NVUkUuICovCi1jaGFyIF91cGJfbm9jbG9zdXJl
OwotCi1zdGF0aWMgdm9pZCBmcmVlaGFuZGxlcnModXBiX3JlZmNvdW50ZWQgKnIpIHsKLSAgdXBi
X2hhbmRsZXJzICpoID0gKHVwYl9oYW5kbGVycyopcjsKLQotICB1cGJfaW50dGFibGVfaXRlciBp
OwotICB1cGJfaW50dGFibGVfYmVnaW4oJmksICZoLT5jbGVhbnVwXyk7Ci0gIGZvcig7ICF1cGJf
aW50dGFibGVfZG9uZSgmaSk7IHVwYl9pbnR0YWJsZV9uZXh0KCZpKSkgewotICAgIHZvaWQgKnZh
bCA9ICh2b2lkKil1cGJfaW50dGFibGVfaXRlcl9rZXkoJmkpOwotICAgIHVwYl92YWx1ZSBmdW5j
X3ZhbCA9IHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVlKCZpKTsKLSAgICB1cGJfaGFuZGxlcmZyZWUg
KmZ1bmMgPSB1cGJfdmFsdWVfZ2V0ZnB0cihmdW5jX3ZhbCk7Ci0gICAgZnVuYyh2YWwpOwotICB9
Ci0KLSAgdXBiX2ludHRhYmxlX3VuaW5pdCgmaC0+Y2xlYW51cF8pOwotICB1cGJfbXNnZGVmX3Vu
cmVmKGgtPm1zZywgaCk7Ci0gIHVwYl9nZnJlZShoLT5zdWIpOwotICB1cGJfZ2ZyZWUoaCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHZpc2l0aGFuZGxlcnMoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIHVw
Yl9yZWZjb3VudGVkX3Zpc2l0ICp2aXNpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqY2xvc3VyZSkgewotICBjb25zdCB1cGJfaGFuZGxlcnMgKmggPSAoY29uc3QgdXBiX2hhbmRs
ZXJzKilyOwotICB1cGJfbXNnX2ZpZWxkX2l0ZXIgaTsKLSAgZm9yKHVwYl9tc2dfZmllbGRfYmVn
aW4oJmksIGgtPm1zZyk7Ci0gICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVw
Yl9tc2dfZmllbGRfbmV4dCgmaSkpIHsKLSAgICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0
ZXJfZmllbGQoJmkpOwotICAgIGNvbnN0IHVwYl9oYW5kbGVycyAqc3ViOwotICAgIGlmICghdXBi
X2ZpZWxkZGVmX2lzc3VibXNnKGYpKSBjb250aW51ZTsKLSAgICBzdWIgPSB1cGJfaGFuZGxlcnNf
Z2V0c3ViaGFuZGxlcnMoaCwgZik7Ci0gICAgaWYgKHN1YikgdmlzaXQociwgdXBiX2hhbmRsZXJz
X3VwY2FzdChzdWIpLCBjbG9zdXJlKTsKLSAgfQotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVw
Yl9yZWZjb3VudGVkX3Z0YmwgdnRibCA9IHt2aXNpdGhhbmRsZXJzLCBmcmVlaGFuZGxlcnN9Owot
Ci10eXBlZGVmIHN0cnVjdCB7Ci0gIHVwYl9pbnR0YWJsZSB0YWI7ICAvKiBtYXBzIHVwYl9tc2dk
ZWYqIC0+IHVwYl9oYW5kbGVycyouICovCi0gIHVwYl9oYW5kbGVyc19jYWxsYmFjayAqY2FsbGJh
Y2s7Ci0gIGNvbnN0IHZvaWQgKmNsb3N1cmU7Ci19IGRmc19zdGF0ZTsKLQotLyogVE9ETyhoYWJl
cm1hbik6IGRpc2NhcmQgdXBiX2hhbmRsZXJzKiBvYmplY3RzIHRoYXQgZG8gbm90IGFjdHVhbGx5
IGhhdmUgYW55Ci0gKiBoYW5kbGVycyBzZXQgYW5kIGNhbm5vdCByZWFjaCBhbnkgdXBiX2hhbmRs
ZXJzKiBvYmplY3QgdGhhdCBkb2VzLiAgVGhpcyBpcwotICogc2xpZ2h0bHkgdHJpY2t5IHRvIGRv
IGNvcnJlY3RseS4gKi8KLXN0YXRpYyB1cGJfaGFuZGxlcnMgKm5ld2Zvcm1zZyhjb25zdCB1cGJf
bXNnZGVmICptLCBjb25zdCB2b2lkICpvd25lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZnNfc3RhdGUgKnMpIHsKLSAgdXBiX21zZ19maWVsZF9pdGVyIGk7Ci0gIHVwYl9oYW5k
bGVycyAqaCA9IHVwYl9oYW5kbGVyc19uZXcobSwgb3duZXIpOwotICBpZiAoIWgpIHJldHVybiBO
VUxMOwotICBpZiAoIXVwYl9pbnR0YWJsZV9pbnNlcnRwdHIoJnMtPnRhYiwgbSwgdXBiX3ZhbHVl
X3B0cihoKSkpIGdvdG8gb29tOwotCi0gIHMtPmNhbGxiYWNrKHMtPmNsb3N1cmUsIGgpOwotCi0g
IC8qIEZvciBlYWNoIHN1Ym1lc3NhZ2UgZmllbGQsIGdldCBvciBjcmVhdGUgYSBoYW5kbGVycyBv
YmplY3QgYW5kIHNldCBpdCBhcwotICAgKiB0aGUgc3ViaGFuZGxlcnMuICovCi0gIGZvcih1cGJf
bXNnX2ZpZWxkX2JlZ2luKCZpLCBtKTsKLSAgICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJmkpOwot
ICAgICAgdXBiX21zZ19maWVsZF9uZXh0KCZpKSkgewotICAgIHVwYl9maWVsZGRlZiAqZiA9IHVw
Yl9tc2dfaXRlcl9maWVsZCgmaSk7Ci0gICAgY29uc3QgdXBiX21zZ2RlZiAqc3ViZGVmOwotICAg
IHVwYl92YWx1ZSBzdWJtX2VudDsKLQotICAgIGlmICghdXBiX2ZpZWxkZGVmX2lzc3VibXNnKGYp
KSBjb250aW51ZTsKLQotICAgIHN1YmRlZiA9IHVwYl9kb3duY2FzdF9tc2dkZWYodXBiX2ZpZWxk
ZGVmX3N1YmRlZihmKSk7Ci0gICAgaWYgKHVwYl9pbnR0YWJsZV9sb29rdXBwdHIoJnMtPnRhYiwg
c3ViZGVmLCAmc3VibV9lbnQpKSB7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0c3ViaGFuZGxlcnMo
aCwgZiwgdXBiX3ZhbHVlX2dldHB0cihzdWJtX2VudCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICB1
cGJfaGFuZGxlcnMgKnN1Yl9taCA9IG5ld2Zvcm1zZyhzdWJkZWYsICZzdWJfbWgsIHMpOwotICAg
ICAgaWYgKCFzdWJfbWgpIGdvdG8gb29tOwotICAgICAgdXBiX2hhbmRsZXJzX3NldHN1YmhhbmRs
ZXJzKGgsIGYsIHN1Yl9taCk7Ci0gICAgICB1cGJfaGFuZGxlcnNfdW5yZWYoc3ViX21oLCAmc3Vi
X21oKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGg7Ci0KLW9vbToKLSAgdXBiX2hhbmRsZXJzX3Vu
cmVmKGgsIG93bmVyKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIEdpdmVuIGEgc2VsZWN0b3Ig
Zm9yIGEgU1RBUlRTVUJNU0cgaGFuZGxlciwgcmVzb2x2ZXMgdG8gYSBwb2ludGVyIHRvIHRoZQot
ICogc3ViaGFuZGxlcnMgZm9yIHRoaXMgc3VibWVzc2FnZSBmaWVsZC4gKi8KLSNkZWZpbmUgU1VC
SChoLCBzZWxlY3RvcikgKGgtPnN1YltzZWxlY3Rvcl0pCi0KLS8qIFRoZSBzZWxlY3RvciBmb3Ig
YSBzdWJtZXNzYWdlIGZpZWxkIGlzIHRoZSBmaWVsZCBpbmRleC4gKi8KLSNkZWZpbmUgU1VCSF9G
KGgsIGYpIFNVQkgoaCwgZi0+aW5kZXhfKQotCi1zdGF0aWMgaW50MzJfdCB0cnlnZXRzZWwodXBi
X2hhbmRsZXJzICpoLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgdXBiX2hhbmRsZXJ0eXBlX3QgdHlwZSkgewotICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0g
IGFzc2VydCghdXBiX2hhbmRsZXJzX2lzZnJvemVuKGgpKTsKLSAgaWYgKHVwYl9oYW5kbGVyc19t
c2dkZWYoaCkgIT0gdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlKGYpKSB7Ci0gICAgdXBiX3N0
YXR1c19zZXRlcnJmKAotICAgICAgICAmaC0+c3RhdHVzXywgInR5cGUgbWlzbWF0Y2g6IGZpZWxk
ICVzIGRvZXMgbm90IGJlbG9uZyB0byBtZXNzYWdlICVzIiwKLSAgICAgICAgdXBiX2ZpZWxkZGVm
X25hbWUoZiksIHVwYl9tc2dkZWZfZnVsbG5hbWUodXBiX2hhbmRsZXJzX21zZ2RlZihoKSkpOwot
ICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoIXVwYl9oYW5kbGVyc19nZXRzZWxlY3RvcihmLCB0
eXBlLCAmc2VsKSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZigKLSAgICAgICAgJmgtPnN0YXR1
c18sCi0gICAgICAgICJ0eXBlIG1pc21hdGNoOiBjYW5ub3QgcmVnaXN0ZXIgaGFuZGxlciB0eXBl
ICVkIGZvciBmaWVsZCAlcyIsCi0gICAgICAgIHR5cGUsIHVwYl9maWVsZGRlZl9uYW1lKGYpKTsK
LSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgcmV0dXJuIHNlbDsKLX0KLQotc3RhdGljIHVwYl9zZWxl
Y3Rvcl90IGhhbmRsZXJzX2dldHNlbCh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRl
ZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJ0eXBlX3QgdHlw
ZSkgewotICBpbnQzMl90IHNlbCA9IHRyeWdldHNlbChoLCBmLCB0eXBlKTsKLSAgYXNzZXJ0KHNl
bCA+PSAwKTsKLSAgcmV0dXJuIHNlbDsKLX0KLQotc3RhdGljIGNvbnN0IHZvaWQgKipyZXR1cm50
eXBlKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVydHlwZV90IHR5cGUpIHsKLSAgcmV0dXJuICZo
LT50YWJsZVtoYW5kbGVyc19nZXRzZWwoaCwgZiwgdHlwZSldLmF0dHIucmV0dXJuX2Nsb3N1cmVf
dHlwZV87Ci19Ci0KLXN0YXRpYyBib29sIGRvc2V0KHVwYl9oYW5kbGVycyAqaCwgaW50MzJfdCBz
ZWwsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVy
dHlwZV90IHR5cGUsIHVwYl9mdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAgdXBiX2hhbmRs
ZXJhdHRyICphdHRyKSB7Ci0gIHVwYl9oYW5kbGVyYXR0ciBzZXRfYXR0ciA9IFVQQl9IQU5ETEVS
QVRUUl9JTklUSUFMSVpFUjsKLSAgY29uc3Qgdm9pZCAqY2xvc3VyZV90eXBlOwotICBjb25zdCB2
b2lkICoqY29udGV4dF9jbG9zdXJlX3R5cGU7Ci0KLSAgYXNzZXJ0KCF1cGJfaGFuZGxlcnNfaXNm
cm96ZW4oaCkpOwotCi0gIGlmIChzZWwgPCAwKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2co
JmgtPnN0YXR1c18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgImluY29ycmVjdCBoYW5kbGVy
IHR5cGUgZm9yIHRoaXMgZmllbGQuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYg
KGgtPnRhYmxlW3NlbF0uZnVuYykgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKCZoLT5zdGF0
dXNfLAotICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY2hhbmdlIGhhbmRsZXIgb25j
ZSBpdCBoYXMgYmVlbiBzZXQuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKGF0
dHIpIHsKLSAgICBzZXRfYXR0ciA9ICphdHRyOwotICB9Ci0KLSAgLyogQ2hlY2sgdGhhdCB0aGUg
Z2l2ZW4gY2xvc3VyZSB0eXBlIG1hdGNoZXMgdGhlIGNsb3N1cmUgdHlwZSB0aGF0IGhhcyBiZWVu
Ci0gICAqIGVzdGFibGlzaGVkIGZvciB0aGlzIGNvbnRleHQgKGlmIGFueSkuICovCi0gIGNsb3N1
cmVfdHlwZSA9IHVwYl9oYW5kbGVyYXR0cl9jbG9zdXJldHlwZSgmc2V0X2F0dHIpOwotCi0gIGlm
ICh0eXBlID09IFVQQl9IQU5ETEVSX1NUUklORykgewotICAgIGNvbnRleHRfY2xvc3VyZV90eXBl
ID0gcmV0dXJudHlwZShoLCBmLCBVUEJfSEFORExFUl9TVEFSVFNUUik7Ci0gIH0gZWxzZSBpZiAo
ZiAmJiB1cGJfZmllbGRkZWZfaXNzZXEoZikgJiYKLSAgICAgICAgICAgICB0eXBlICE9IFVQQl9I
QU5ETEVSX1NUQVJUU0VRICYmCi0gICAgICAgICAgICAgdHlwZSAhPSBVUEJfSEFORExFUl9FTkRT
RVEpIHsKLSAgICBjb250ZXh0X2Nsb3N1cmVfdHlwZSA9IHJldHVybnR5cGUoaCwgZiwgVVBCX0hB
TkRMRVJfU1RBUlRTRVEpOwotICB9IGVsc2UgewotICAgIGNvbnRleHRfY2xvc3VyZV90eXBlID0g
JmgtPnRvcF9jbG9zdXJlX3R5cGU7Ci0gIH0KLQotICBpZiAoY2xvc3VyZV90eXBlICYmICpjb250
ZXh0X2Nsb3N1cmVfdHlwZSAmJgotICAgICAgY2xvc3VyZV90eXBlICE9ICpjb250ZXh0X2Nsb3N1
cmVfdHlwZSkgewotICAgIC8qIFRPRE8oaGFiZXJtYW4pOiBiZXR0ZXIgbWVzc2FnZSBmb3IgZGVi
dWdnaW5nLiAqLwotICAgIGlmIChmKSB7Ci0gICAgICB1cGJfc3RhdHVzX3NldGVycmYoJmgtPnN0
YXR1c18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgImNsb3N1cmUgdHlwZSBkb2VzIG5vdCBt
YXRjaCBmb3IgZmllbGQgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9maWVsZGRl
Zl9uYW1lKGYpKTsKLSAgICB9IGVsc2UgewotICAgICAgdXBiX3N0YXR1c19zZXRlcnJtc2coCi0g
ICAgICAgICAgJmgtPnN0YXR1c18sICJjbG9zdXJlIHR5cGUgZG9lcyBub3QgbWF0Y2ggZm9yIG1l
c3NhZ2UtbGV2ZWwgaGFuZGxlciIpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQot
ICBpZiAoY2xvc3VyZV90eXBlKQotICAgICpjb250ZXh0X2Nsb3N1cmVfdHlwZSA9IGNsb3N1cmVf
dHlwZTsKLQotICAvKiBJZiB0aGlzIGlzIGEgU1RBUlRTRVEgb3IgU1RBUlRTVFIgaGFuZGxlciwg
Y2hlY2sgdGhhdCB0aGUgcmV0dXJuZWQgcG9pbnRlcgotICAgKiBtYXRjaGVzIGFueSBwcmUtZXhp
c3RpbmcgZXhwZWN0YXRpb25zIGFib3V0IHdoYXQgdHlwZSBpcyBleHBlY3RlZC4gKi8KLSAgaWYg
KHR5cGUgPT0gVVBCX0hBTkRMRVJfU1RBUlRTRVEgfHwgdHlwZSA9PSBVUEJfSEFORExFUl9TVEFS
VFNUUikgewotICAgIGNvbnN0IHZvaWQgKnJldHVybl90eXBlID0gdXBiX2hhbmRsZXJhdHRyX3Jl
dHVybmNsb3N1cmV0eXBlKCZzZXRfYXR0cik7Ci0gICAgY29uc3Qgdm9pZCAqdGFibGVfcmV0dXJu
X3R5cGUgPQotICAgICAgICB1cGJfaGFuZGxlcmF0dHJfcmV0dXJuY2xvc3VyZXR5cGUoJmgtPnRh
YmxlW3NlbF0uYXR0cik7Ci0gICAgaWYgKHJldHVybl90eXBlICYmIHRhYmxlX3JldHVybl90eXBl
ICYmIHJldHVybl90eXBlICE9IHRhYmxlX3JldHVybl90eXBlKSB7Ci0gICAgICB1cGJfc3RhdHVz
X3NldGVycm1zZygmaC0+c3RhdHVzXywgImNsb3N1cmUgcmV0dXJuIHR5cGUgZG9lcyBub3QgbWF0
Y2giKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodGFibGVfcmV0dXJu
X3R5cGUgJiYgIXJldHVybl90eXBlKQotICAgICAgdXBiX2hhbmRsZXJhdHRyX3NldHJldHVybmNs
b3N1cmV0eXBlKCZzZXRfYXR0ciwgdGFibGVfcmV0dXJuX3R5cGUpOwotICB9Ci0KLSAgaC0+dGFi
bGVbc2VsXS5mdW5jID0gKHVwYl9mdW5jKilmdW5jOwotICBoLT50YWJsZVtzZWxdLmF0dHIgPSBz
ZXRfYXR0cjsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qIFJldHVybnMgdGhlIGVmZmVjdGl2ZSBj
bG9zdXJlIHR5cGUgZm9yIHRoaXMgaGFuZGxlciAod2hpY2ggd2lsbCBwcm9wYWdhdGUKLSAqIGZy
b20gb3V0ZXIgZnJhbWVzIGlmIHRoaXMgZnJhbWUgaGFzIG5vIFNUQVJUKiBoYW5kbGVyKS4gIE5v
dCBpbXBsZW1lbnRlZCBmb3IKLSAqIFVQQl9IQU5ETEVSX1NUUklORyBhdCB0aGUgbW9tZW50IHNp
bmNlIHRoaXMgaXMgbm90IG5lZWRlZC4gIFJldHVybnMgTlVMTCBpcwotICogdGhlIGVmZmVjdGl2
ZSBjbG9zdXJlIHR5cGUgaXMgdW5zcGVjaWZpZWQgKGVpdGhlciBubyBoYW5kbGVyIHdhcyByZWdp
c3RlcmVkCi0gKiB0byBzcGVjaWZ5IGl0IG9yIHRoZSBoYW5kbGVyIHRoYXQgd2FzIHJlZ2lzdGVy
ZWQgZGlkIG5vdCBzcGVjaWZ5IHRoZSBjbG9zdXJlCi0gKiB0eXBlKS4gKi8KLWNvbnN0IHZvaWQg
KmVmZmVjdGl2ZV9jbG9zdXJlX3R5cGUodXBiX2hhbmRsZXJzICpoLCBjb25zdCB1cGJfZmllbGRk
ZWYgKmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVydHlw
ZV90IHR5cGUpIHsKLSAgY29uc3Qgdm9pZCAqcmV0OwotICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0K
LSAgYXNzZXJ0KHR5cGUgIT0gVVBCX0hBTkRMRVJfU1RSSU5HKTsKLSAgcmV0ID0gaC0+dG9wX2Ns
b3N1cmVfdHlwZTsKLQotICBpZiAodXBiX2ZpZWxkZGVmX2lzc2VxKGYpICYmCi0gICAgICB0eXBl
ICE9IFVQQl9IQU5ETEVSX1NUQVJUU0VRICYmCi0gICAgICB0eXBlICE9IFVQQl9IQU5ETEVSX0VO
RFNFUSAmJgotICAgICAgaC0+dGFibGVbc2VsID0gaGFuZGxlcnNfZ2V0c2VsKGgsIGYsIFVQQl9I
QU5ETEVSX1NUQVJUU0VRKV0uZnVuYykgewotICAgIHJldCA9IHVwYl9oYW5kbGVyYXR0cl9yZXR1
cm5jbG9zdXJldHlwZSgmaC0+dGFibGVbc2VsXS5hdHRyKTsKLSAgfQotCi0gIGlmICh0eXBlID09
IFVQQl9IQU5ETEVSX1NUUklORyAmJgotICAgICAgaC0+dGFibGVbc2VsID0gaGFuZGxlcnNfZ2V0
c2VsKGgsIGYsIFVQQl9IQU5ETEVSX1NUQVJUU1RSKV0uZnVuYykgewotICAgIHJldCA9IHVwYl9o
YW5kbGVyYXR0cl9yZXR1cm5jbG9zdXJldHlwZSgmaC0+dGFibGVbc2VsXS5hdHRyKTsKLSAgfQot
Ci0gIC8qIFRoZSBlZmZlY3RpdmUgdHlwZSBvZiB0aGUgc3VibWVzc2FnZTsgbm90IHVzZWQgeWV0
LgotICAgKiBpZiAodHlwZSA9PSBTVUJNRVNTQUdFICYmCi0gICAqICAgICBoLT50YWJsZVtzZWwg
PSBoYW5kbGVyc19nZXRzZWwoaCwgZiwgVVBCX0hBTkRMRVJfU1RBUlRTVUJNU0cpXS5mdW5jKSB7
Ci0gICAqICAgcmV0ID0gdXBiX2hhbmRsZXJhdHRyX3JldHVybmNsb3N1cmV0eXBlKCZoLT50YWJs
ZVtzZWxdLmF0dHIpOwotICAgKiB9ICovCi0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogQ2hlY2tz
IHdoZXRoZXIgdGhlIFNUQVJUKiBoYW5kbGVyIHNwZWNpZmllZCBieSBmICYgdHlwZSBpcyBtaXNz
aW5nIGV2ZW4KLSAqIHRob3VnaCBpdCBpcyByZXF1aXJlZCB0byBjb252ZXJ0IHRoZSBlc3RhYmxp
c2hlZCB0eXBlIG9mIGFuIG91dGVyIGZyYW1lCi0gKiAoImNsb3N1cmVfdHlwZSIpIGludG8gdGhl
IGVzdGFibGlzaGVkIHR5cGUgb2YgYW4gaW5uZXIgZnJhbWUgKHJlcHJlc2VudGVkIGluCi0gKiB0
aGUgcmV0dXJuIGNsb3N1cmUgdHlwZSBvZiB0aGlzIGhhbmRsZXIncyBhdHRyLiAqLwotYm9vbCBj
aGVja3N0YXJ0KHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLCB1cGJfaGFu
ZGxlcnR5cGVfdCB0eXBlLAotICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnN0YXR1cykgewot
ICBjb25zdCB2b2lkICpjbG9zdXJlX3R5cGU7Ci0gIGNvbnN0IHVwYl9oYW5kbGVyYXR0ciAqYXR0
cjsKLSAgY29uc3Qgdm9pZCAqcmV0dXJuX2Nsb3N1cmVfdHlwZTsKLQotICB1cGJfc2VsZWN0b3Jf
dCBzZWwgPSBoYW5kbGVyc19nZXRzZWwoaCwgZiwgdHlwZSk7Ci0gIGlmIChoLT50YWJsZVtzZWxd
LmZ1bmMpIHJldHVybiB0cnVlOwotICBjbG9zdXJlX3R5cGUgPSBlZmZlY3RpdmVfY2xvc3VyZV90
eXBlKGgsIGYsIHR5cGUpOwotICBhdHRyID0gJmgtPnRhYmxlW3NlbF0uYXR0cjsKLSAgcmV0dXJu
X2Nsb3N1cmVfdHlwZSA9IHVwYl9oYW5kbGVyYXR0cl9yZXR1cm5jbG9zdXJldHlwZShhdHRyKTsK
LSAgaWYgKGNsb3N1cmVfdHlwZSAmJiByZXR1cm5fY2xvc3VyZV90eXBlICYmCi0gICAgICBjbG9z
dXJlX3R5cGUgIT0gcmV0dXJuX2Nsb3N1cmVfdHlwZSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJy
ZihzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBzdGFydCBoYW5kbGVy
IHRvIHJldHVybiBzdWIgdHlwZSBmb3IgZmllbGQgJWYiLAotICAgICAgICAgICAgICAgICAgICAg
ICB1cGJfZmllbGRkZWZfbmFtZShmKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVy
biB0cnVlOwotfQotCi0vKiBQdWJsaWMgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi11cGJfaGFuZGxlcnMgKnVw
Yl9oYW5kbGVyc19uZXcoY29uc3QgdXBiX21zZ2RlZiAqbWQsIGNvbnN0IHZvaWQgKm93bmVyKSB7
Ci0gIGludCBleHRyYTsKLSAgdXBiX2hhbmRsZXJzICpoOwotCi0gIGFzc2VydCh1cGJfbXNnZGVm
X2lzZnJvemVuKG1kKSk7Ci0KLSAgZXh0cmEgPSBzaXplb2YodXBiX2hhbmRsZXJzX3RhYmVudCkg
KiAobWQtPnNlbGVjdG9yX2NvdW50IC0gMSk7Ci0gIGggPSB1cGJfY2FsbG9jKHNpemVvZigqaCkg
KyBleHRyYSk7Ci0gIGlmICghaCkgcmV0dXJuIE5VTEw7Ci0KLSAgaC0+bXNnID0gbWQ7Ci0gIHVw
Yl9tc2dkZWZfcmVmKGgtPm1zZywgaCk7Ci0gIHVwYl9zdGF0dXNfY2xlYXIoJmgtPnN0YXR1c18p
OwotCi0gIGlmIChtZC0+c3VibXNnX2ZpZWxkX2NvdW50ID4gMCkgewotICAgIGgtPnN1YiA9IHVw
Yl9jYWxsb2MobWQtPnN1Ym1zZ19maWVsZF9jb3VudCAqIHNpemVvZigqaC0+c3ViKSk7Ci0gICAg
aWYgKCFoLT5zdWIpIGdvdG8gb29tOwotICB9IGVsc2UgewotICAgIGgtPnN1YiA9IDA7Ci0gIH0K
LQotICBpZiAoIXVwYl9yZWZjb3VudGVkX2luaXQodXBiX2hhbmRsZXJzX3VwY2FzdF9tdXRhYmxl
KGgpLCAmdnRibCwgb3duZXIpKQotICAgIGdvdG8gb29tOwotICBpZiAoIXVwYl9pbnR0YWJsZV9p
bml0KCZoLT5jbGVhbnVwXywgVVBCX0NUWVBFX0ZQVFIpKSBnb3RvIG9vbTsKLQotICAvKiBjYWxs
b2MoKSBhYm92ZSBpbml0aWFsaXplZCBhbGwgaGFuZGxlcnMgdG8gTlVMTC4gKi8KLSAgcmV0dXJu
IGg7Ci0KLW9vbToKLSAgZnJlZWhhbmRsZXJzKHVwYl9oYW5kbGVyc191cGNhc3RfbXV0YWJsZSho
KSk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1jb25zdCB1cGJfaGFuZGxlcnMgKnVwYl9oYW5kbGVy
c19uZXdmcm96ZW4oY29uc3QgdXBiX21zZ2RlZiAqbSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpvd25lciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxlcnNfY2FsbGJhY2sgKmNhbGxiYWNr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg
KmNsb3N1cmUpIHsKLSAgZGZzX3N0YXRlIHN0YXRlOwotICB1cGJfaGFuZGxlcnMgKnJldDsKLSAg
Ym9vbCBvazsKLSAgdXBiX3JlZmNvdW50ZWQgKnI7Ci0KLSAgc3RhdGUuY2FsbGJhY2sgPSBjYWxs
YmFjazsKLSAgc3RhdGUuY2xvc3VyZSA9IGNsb3N1cmU7Ci0gIGlmICghdXBiX2ludHRhYmxlX2lu
aXQoJnN0YXRlLnRhYiwgVVBCX0NUWVBFX1BUUikpIHJldHVybiBOVUxMOwotCi0gIHJldCA9IG5l
d2Zvcm1zZyhtLCBvd25lciwgJnN0YXRlKTsKLQotICB1cGJfaW50dGFibGVfdW5pbml0KCZzdGF0
ZS50YWIpOwotICBpZiAoIXJldCkgcmV0dXJuIE5VTEw7Ci0KLSAgciA9IHVwYl9oYW5kbGVyc191
cGNhc3RfbXV0YWJsZShyZXQpOwotICBvayA9IHVwYl9yZWZjb3VudGVkX2ZyZWV6ZSgmciwgMSwg
TlVMTCwgVVBCX01BWF9IQU5ETEVSX0RFUFRIKTsKLSAgVVBCX0FTU0VSVF9WQVIob2ssIG9rKTsK
LQotICByZXR1cm4gcmV0OwotfQotCi1jb25zdCB1cGJfc3RhdHVzICp1cGJfaGFuZGxlcnNfc3Rh
dHVzKHVwYl9oYW5kbGVycyAqaCkgewotICBhc3NlcnQoIXVwYl9oYW5kbGVyc19pc2Zyb3plbiho
KSk7Ci0gIHJldHVybiAmaC0+c3RhdHVzXzsKLX0KLQotdm9pZCB1cGJfaGFuZGxlcnNfY2xlYXJl
cnIodXBiX2hhbmRsZXJzICpoKSB7Ci0gIGFzc2VydCghdXBiX2hhbmRsZXJzX2lzZnJvemVuKGgp
KTsKLSAgdXBiX3N0YXR1c19jbGVhcigmaC0+c3RhdHVzXyk7Ci19Ci0KLSNkZWZpbmUgU0VUVEVS
KG5hbWUsIGhhbmRsZXJjdHlwZSwgaGFuZGxlcnR5cGUpIFwKLSAgYm9vbCB1cGJfaGFuZGxlcnNf
c2V0ICMjIG5hbWUodXBiX2hhbmRsZXJzICpoLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcmN0eXBlIGZ1bmMsIHVwYl9oYW5k
bGVyYXR0ciAqYXR0cikgeyBcCi0gICAgaW50MzJfdCBzZWwgPSB0cnlnZXRzZWwoaCwgZiwgaGFu
ZGxlcnR5cGUpOyBcCi0gICAgcmV0dXJuIGRvc2V0KGgsIHNlbCwgZiwgaGFuZGxlcnR5cGUsICh1
cGJfZnVuYyopZnVuYywgYXR0cik7IFwKLSAgfQotCi1TRVRURVIoaW50MzIsICAgICAgIHVwYl9p
bnQzMl9oYW5kbGVyZnVuYyosICAgICAgIFVQQl9IQU5ETEVSX0lOVDMyKQotU0VUVEVSKGludDY0
LCAgICAgICB1cGJfaW50NjRfaGFuZGxlcmZ1bmMqLCAgICAgICBVUEJfSEFORExFUl9JTlQ2NCkK
LVNFVFRFUih1aW50MzIsICAgICAgdXBiX3VpbnQzMl9oYW5kbGVyZnVuYyosICAgICAgVVBCX0hB
TkRMRVJfVUlOVDMyKQotU0VUVEVSKHVpbnQ2NCwgICAgICB1cGJfdWludDY0X2hhbmRsZXJmdW5j
KiwgICAgICBVUEJfSEFORExFUl9VSU5UNjQpCi1TRVRURVIoZmxvYXQsICAgICAgIHVwYl9mbG9h
dF9oYW5kbGVyZnVuYyosICAgICAgIFVQQl9IQU5ETEVSX0ZMT0FUKQotU0VUVEVSKGRvdWJsZSwg
ICAgICB1cGJfZG91YmxlX2hhbmRsZXJmdW5jKiwgICAgICBVUEJfSEFORExFUl9ET1VCTEUpCi1T
RVRURVIoYm9vbCwgICAgICAgIHVwYl9ib29sX2hhbmRsZXJmdW5jKiwgICAgICAgIFVQQl9IQU5E
TEVSX0JPT0wpCi1TRVRURVIoc3RhcnRzdHIsICAgIHVwYl9zdGFydHN0cl9oYW5kbGVyZnVuYyos
ICAgIFVQQl9IQU5ETEVSX1NUQVJUU1RSKQotU0VUVEVSKHN0cmluZywgICAgICB1cGJfc3RyaW5n
X2hhbmRsZXJmdW5jKiwgICAgICBVUEJfSEFORExFUl9TVFJJTkcpCi1TRVRURVIoZW5kc3RyLCAg
ICAgIHVwYl9lbmRmaWVsZF9oYW5kbGVyZnVuYyosICAgIFVQQl9IQU5ETEVSX0VORFNUUikKLVNF
VFRFUihzdGFydHNlcSwgICAgdXBiX3N0YXJ0ZmllbGRfaGFuZGxlcmZ1bmMqLCAgVVBCX0hBTkRM
RVJfU1RBUlRTRVEpCi1TRVRURVIoc3RhcnRzdWJtc2csIHVwYl9zdGFydGZpZWxkX2hhbmRsZXJm
dW5jKiwgIFVQQl9IQU5ETEVSX1NUQVJUU1VCTVNHKQotU0VUVEVSKGVuZHN1Ym1zZywgICB1cGJf
ZW5kZmllbGRfaGFuZGxlcmZ1bmMqLCAgICBVUEJfSEFORExFUl9FTkRTVUJNU0cpCi1TRVRURVIo
ZW5kc2VxLCAgICAgIHVwYl9lbmRmaWVsZF9oYW5kbGVyZnVuYyosICAgIFVQQl9IQU5ETEVSX0VO
RFNFUSkKLQotI3VuZGVmIFNFVFRFUgotCi1ib29sIHVwYl9oYW5kbGVyc19zZXRzdGFydG1zZyh1
cGJfaGFuZGxlcnMgKmgsIHVwYl9zdGFydG1zZ19oYW5kbGVyZnVuYyAqZnVuYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0cikgewotICByZXR1cm4g
ZG9zZXQoaCwgVVBCX1NUQVJUTVNHX1NFTEVDVE9SLCBOVUxMLCBVUEJfSEFORExFUl9JTlQzMiwK
LSAgICAgICAgICAgICAgICh1cGJfZnVuYyAqKWZ1bmMsIGF0dHIpOwotfQotCi1ib29sIHVwYl9o
YW5kbGVyc19zZXRlbmRtc2codXBiX2hhbmRsZXJzICpoLCB1cGJfZW5kbXNnX2hhbmRsZXJmdW5j
ICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0
cikgewotICBhc3NlcnQoIXVwYl9oYW5kbGVyc19pc2Zyb3plbihoKSk7Ci0gIHJldHVybiBkb3Nl
dChoLCBVUEJfRU5ETVNHX1NFTEVDVE9SLCBOVUxMLCBVUEJfSEFORExFUl9JTlQzMiwKLSAgICAg
ICAgICAgICAgICh1cGJfZnVuYyAqKWZ1bmMsIGF0dHIpOwotfQotCi1ib29sIHVwYl9oYW5kbGVy
c19zZXRzdWJoYW5kbGVycyh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9oYW5kbGVycyAqc3Vi
KSB7Ci0gIGFzc2VydChzdWIpOwotICBhc3NlcnQoIXVwYl9oYW5kbGVyc19pc2Zyb3plbihoKSk7
Ci0gIGFzc2VydCh1cGJfZmllbGRkZWZfaXNzdWJtc2coZikpOwotICBpZiAoU1VCSF9GKGgsIGYp
KSByZXR1cm4gZmFsc2U7ICAvKiBDYW4ndCByZXNldC4gKi8KLSAgaWYgKHVwYl9tc2dkZWZfdXBj
YXN0KHVwYl9oYW5kbGVyc19tc2dkZWYoc3ViKSkgIT0gdXBiX2ZpZWxkZGVmX3N1YmRlZihmKSkg
ewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBTVUJIX0YoaCwgZikgPSBzdWI7Ci0gIHVwYl9y
ZWYyKHN1YiwgaCk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1jb25zdCB1cGJfaGFuZGxlcnMgKnVw
Yl9oYW5kbGVyc19nZXRzdWJoYW5kbGVycyhjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfZmllbGRk
ZWYgKmYpIHsKLSAgYXNzZXJ0KHVwYl9maWVsZGRlZl9pc3N1Ym1zZyhmKSk7Ci0gIHJldHVybiBT
VUJIX0YoaCwgZik7Ci19Ci0KLWJvb2wgdXBiX2hhbmRsZXJzX2dldGF0dHIoY29uc3QgdXBiX2hh
bmRsZXJzICpoLCB1cGJfc2VsZWN0b3JfdCBzZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHVwYl9oYW5kbGVyYXR0ciAqYXR0cikgewotICBpZiAoIXVwYl9oYW5kbGVyc19nZXRoYW5kbGVy
KGgsIHNlbCkpCi0gICAgcmV0dXJuIGZhbHNlOwotICAqYXR0ciA9IGgtPnRhYmxlW3NlbF0uYXR0
cjsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBiX2hhbmRsZXJz
X2dldHN1YmhhbmRsZXJzX3NlbChjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3NlbGVjdG9yX3Qgc2Vs
KSB7Ci0gIC8qIFNUQVJUU1VCTVNHIHNlbGVjdG9yIGluIHNlbCBpcyB0aGUgZmllbGQncyBzZWxl
Y3RvciBiYXNlLiAqLwotICByZXR1cm4gU1VCSChoLCBzZWwgLSBVUEJfU1RBVElDX1NFTEVDVE9S
X0NPVU5UKTsKLX0KLQotY29uc3QgdXBiX21zZ2RlZiAqdXBiX2hhbmRsZXJzX21zZ2RlZihjb25z
dCB1cGJfaGFuZGxlcnMgKmgpIHsgcmV0dXJuIGgtPm1zZzsgfQotCi1ib29sIHVwYl9oYW5kbGVy
c19hZGRjbGVhbnVwKHVwYl9oYW5kbGVycyAqaCwgdm9pZCAqcCwgdXBiX2hhbmRsZXJmcmVlICpm
dW5jKSB7Ci0gIGJvb2wgb2s7Ci0gIGlmICh1cGJfaW50dGFibGVfbG9va3VwcHRyKCZoLT5jbGVh
bnVwXywgcCwgTlVMTCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgb2sgPSB1cGJfaW50
dGFibGVfaW5zZXJ0cHRyKCZoLT5jbGVhbnVwXywgcCwgdXBiX3ZhbHVlX2ZwdHIoZnVuYykpOwot
ICBVUEJfQVNTRVJUX1ZBUihvaywgb2spOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0vKiAiU3Rh
dGljIiBtZXRob2RzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi1ib29sIHVwYl9oYW5kbGVyc19mcmVlemUodXBiX2hhbmRsZXJz
ICpjb25zdCpoYW5kbGVycywgaW50IG4sIHVwYl9zdGF0dXMgKnMpIHsKLSAgLyogVE9ETzogdmVy
aWZ5IHdlIGhhdmUgYSB0cmFuc2l0aXZlIGNsb3N1cmUuICovCi0gIGludCBpOwotICBmb3IgKGkg
PSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgdXBiX21zZ19maWVsZF9pdGVyIGo7Ci0gICAgdXBiX2hh
bmRsZXJzICpoID0gaGFuZGxlcnNbaV07Ci0KLSAgICBpZiAoIXVwYl9vaygmaC0+c3RhdHVzXykp
IHsKLSAgICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzLCAiaGFuZGxlcnMgZm9yIG1lc3NhZ2UgJXMg
aGFkIGVycm9yIHN0YXR1czogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9tc2dk
ZWZfZnVsbG5hbWUodXBiX2hhbmRsZXJzX21zZ2RlZihoKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgdXBiX3N0YXR1c19lcnJtc2coJmgtPnN0YXR1c18pKTsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRoZXJlIGFyZSBubyBjbG9zdXJlIG1pc21h
dGNoZXMgZHVlIHRvIG1pc3NpbmcgU3RhcnQqIGhhbmRsZXJzCi0gICAgICogb3Igc3ViaGFuZGxl
cnMgd2l0aCBkaWZmZXJlbnQgdHlwZS1sZXZlbCB0eXBlcy4gKi8KLSAgICBmb3IodXBiX21zZ19m
aWVsZF9iZWdpbigmaiwgaC0+bXNnKTsKLSAgICAgICAgIXVwYl9tc2dfZmllbGRfZG9uZSgmaik7
Ci0gICAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaikpIHsKLQotICAgICAgY29uc3QgdXBiX2Zp
ZWxkZGVmICpmID0gdXBiX21zZ19pdGVyX2ZpZWxkKCZqKTsKLSAgICAgIGlmICh1cGJfZmllbGRk
ZWZfaXNzZXEoZikpIHsKLSAgICAgICAgaWYgKCFjaGVja3N0YXJ0KGgsIGYsIFVQQl9IQU5ETEVS
X1NUQVJUU0VRLCBzKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAg
IGlmICh1cGJfZmllbGRkZWZfaXNzdHJpbmcoZikpIHsKLSAgICAgICAgaWYgKCFjaGVja3N0YXJ0
KGgsIGYsIFVQQl9IQU5ETEVSX1NUQVJUU1RSLCBzKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICB9Ci0KLSAgICAgIGlmICh1cGJfZmllbGRkZWZfaXNzdWJtc2coZikpIHsKLSAgICAg
ICAgYm9vbCBoYXNoYW5kbGVyID0gZmFsc2U7Ci0gICAgICAgIGlmICh1cGJfaGFuZGxlcnNfZ2V0
aGFuZGxlcigKLSAgICAgICAgICAgICAgICBoLCBoYW5kbGVyc19nZXRzZWwoaCwgZiwgVVBCX0hB
TkRMRVJfU1RBUlRTVUJNU0cpKSB8fAotICAgICAgICAgICAgdXBiX2hhbmRsZXJzX2dldGhhbmRs
ZXIoCi0gICAgICAgICAgICAgICAgaCwgaGFuZGxlcnNfZ2V0c2VsKGgsIGYsIFVQQl9IQU5ETEVS
X0VORFNVQk1TRykpKSB7Ci0gICAgICAgICAgaGFzaGFuZGxlciA9IHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAodXBiX2ZpZWxkZGVmX2lzc2VxKGYpICYmCi0gICAgICAgICAgICAodXBi
X2hhbmRsZXJzX2dldGhhbmRsZXIoCi0gICAgICAgICAgICAgICAgIGgsIGhhbmRsZXJzX2dldHNl
bChoLCBmLCBVUEJfSEFORExFUl9TVEFSVFNFUSkpIHx8Ci0gICAgICAgICAgICAgdXBiX2hhbmRs
ZXJzX2dldGhhbmRsZXIoCi0gICAgICAgICAgICAgICAgIGgsIGhhbmRsZXJzX2dldHNlbChoLCBm
LCBVUEJfSEFORExFUl9FTkRTRVEpKSkpIHsKLSAgICAgICAgICBoYXNoYW5kbGVyID0gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChoYXNoYW5kbGVyICYmICF1cGJfaGFuZGxlcnNfZ2V0
c3ViaGFuZGxlcnMoaCwgZikpIHsKLSAgICAgICAgICAvKiBGb3Igbm93IHdlIGFkZCBhbiBlbXB0
eSBzdWJoYW5kbGVycyBpbiB0aGlzIGNhc2UuICBJdCBtYWtlcyB0aGUKLSAgICAgICAgICAgKiBk
ZWNvZGVyIGNvZGUgZ2VuZXJhdG9yIHNpbXBsZXIsIGJlY2F1c2UgaXQgb25seSBoYXMgdG8gaGFu
ZGxlIHR3bwotICAgICAgICAgICAqIGNhc2VzIChzdWJtZXNzYWdlIGhhcyBoYW5kbGVycyBvciBu
b3QpIGFzIG9wcG9zZWQgdG8gdGhyZWUKLSAgICAgICAgICAgKiAoc3VibWVzc2FnZSBoYXMgaGFu
ZGxlcnMgaW4gZW5jbG9zaW5nIG1lc3NhZ2UgYnV0IG5vIHN1YmhhbmRsZXJzKS4KLSAgICAgICAg
ICAgKgotICAgICAgICAgICAqIFRoaXMgbWFrZXMgcGFyc2luZyBsZXNzIGVmZmljaWVudCBpbiB0
aGUgY2FzZSB0aGF0IHdlIHdhbnQgdG8KLSAgICAgICAgICAgKiBub3RpY2UgYSBzdWJtZXNzYWdl
IGJ1dCBza2lwIGl0cyBjb250ZW50cyAobGlrZSBpZiB3ZSdyZSB0ZXN0aW5nCi0gICAgICAgICAg
ICogZm9yIHN1Ym1lc3NhZ2UgcHJlc2VuY2Ugb3IgY291bnRpbmcgdGhlIG51bWJlciBvZiByZXBl
YXRlZAotICAgICAgICAgICAqIHN1Ym1lc3NhZ2VzKS4gIEluIHRoaXMgY2FzZSB3ZSB3aWxsIGVu
ZCB1cCBwYXJzaW5nIHRoZSBzdWJtZXNzYWdlCi0gICAgICAgICAgICogZmllbGQgYnkgZmllbGQg
YW5kIHRocm93aW5nIGF3YXkgdGhlIHJlc3VsdHMgZm9yIGVhY2gsIGluc3RlYWQgb2YKLSAgICAg
ICAgICAgKiBza2lwcGluZyB0aGUgd2hvbGUgZGVsaW1pdGVkIHRoaW5nIGF0IG9uY2UuICBJZiB0
aGlzIGlzIGFuIGlzc3VlIHdlCi0gICAgICAgICAgICogY2FuIHJldmlzaXQgaXQsIGJ1dCBkbyBy
ZW1lbWJlciB0aGF0IHRoaXMgb25seSBhcmlzZXMgd2hlbiB5b3UgaGF2ZQotICAgICAgICAgICAq
IGhhbmRsZXJzIChzdGFydHNlcS9zdGFydHN1Ym1zZy9lbmRzdWJtc2cvZW5kc2VxKSBzZXQgZm9y
IHRoZQotICAgICAgICAgICAqIHN1Ym1lc3NhZ2UgYnV0IG5vIHN1YmhhbmRsZXJzLiAgVGhlIHVz
ZXMgY2FzZXMgZm9yIHRoaXMgYXJlCi0gICAgICAgICAgICogbGltaXRlZC4gKi8KLSAgICAgICAg
ICB1cGJfaGFuZGxlcnMgKnN1YiA9IHVwYl9oYW5kbGVyc19uZXcodXBiX2ZpZWxkZGVmX21zZ3N1
YmRlZihmKSwgJnN1Yik7Ci0gICAgICAgICAgdXBiX2hhbmRsZXJzX3NldHN1YmhhbmRsZXJzKGgs
IGYsIHN1Yik7Ci0gICAgICAgICAgdXBiX2hhbmRsZXJzX3VucmVmKHN1YiwgJnN1Yik7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvKiBUT0RPKGhhYmVybWFuKTogY2hlY2sgdHlwZSBvZiBzdWJtZXNz
YWdlLgotICAgICAgICAgKiBUaGlzIGlzIHNsaWdodGx5IHRyaWNreTsgYWxzbyBjb25zaWRlciB3
aGV0aGVyIHdlIHNob3VsZCBjaGVjayB0aGF0Ci0gICAgICAgICAqIHRoZXkgbWF0Y2ggYXQgc2V0
c3ViaGFuZGxlcnMgdGltZS4gKi8KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoIXVwYl9y
ZWZjb3VudGVkX2ZyZWV6ZSgodXBiX3JlZmNvdW50ZWQqY29uc3QqKWhhbmRsZXJzLCBuLCBzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUEJfTUFYX0hBTkRMRVJfREVQVEgpKSB7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXVwYl9oYW5kbGVy
dHlwZV90IHVwYl9oYW5kbGVyc19nZXRwcmltaXRpdmVoYW5kbGVydHlwZShjb25zdCB1cGJfZmll
bGRkZWYgKmYpIHsKLSAgc3dpdGNoICh1cGJfZmllbGRkZWZfdHlwZShmKSkgewotICAgIGNhc2Ug
VVBCX1RZUEVfSU5UMzI6Ci0gICAgY2FzZSBVUEJfVFlQRV9FTlVNOiByZXR1cm4gVVBCX0hBTkRM
RVJfSU5UMzI7Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQ2NDogcmV0dXJuIFVQQl9IQU5ETEVSX0lO
VDY0OwotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDMyOiByZXR1cm4gVVBCX0hBTkRMRVJfVUlOVDMy
OwotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDY0OiByZXR1cm4gVVBCX0hBTkRMRVJfVUlOVDY0Owot
ICAgIGNhc2UgVVBCX1RZUEVfRkxPQVQ6IHJldHVybiBVUEJfSEFORExFUl9GTE9BVDsKLSAgICBj
YXNlIFVQQl9UWVBFX0RPVUJMRTogcmV0dXJuIFVQQl9IQU5ETEVSX0RPVUJMRTsKLSAgICBjYXNl
IFVQQl9UWVBFX0JPT0w6IHJldHVybiBVUEJfSEFORExFUl9CT09MOwotICAgIGRlZmF1bHQ6IGFz
c2VydChmYWxzZSk7IHJldHVybiAtMTsgIC8qIEludmFsaWQgaW5wdXQuICovCi0gIH0KLX0KLQot
Ym9vbCB1cGJfaGFuZGxlcnNfZ2V0c2VsZWN0b3IoY29uc3QgdXBiX2ZpZWxkZGVmICpmLCB1cGJf
aGFuZGxlcnR5cGVfdCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3Nl
bGVjdG9yX3QgKnMpIHsKLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBVUEJfSEFORExFUl9J
TlQzMjoKLSAgICBjYXNlIFVQQl9IQU5ETEVSX0lOVDY0OgotICAgIGNhc2UgVVBCX0hBTkRMRVJf
VUlOVDMyOgotICAgIGNhc2UgVVBCX0hBTkRMRVJfVUlOVDY0OgotICAgIGNhc2UgVVBCX0hBTkRM
RVJfRkxPQVQ6Ci0gICAgY2FzZSBVUEJfSEFORExFUl9ET1VCTEU6Ci0gICAgY2FzZSBVUEJfSEFO
RExFUl9CT09MOgotICAgICAgaWYgKCF1cGJfZmllbGRkZWZfaXNwcmltaXRpdmUoZikgfHwKLSAg
ICAgICAgICB1cGJfaGFuZGxlcnNfZ2V0cHJpbWl0aXZlaGFuZGxlcnR5cGUoZikgIT0gdHlwZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgKnMgPSBmLT5zZWxlY3Rvcl9iYXNlOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfSEFORExFUl9TVFJJTkc6Ci0gICAgICBpZiAodXBiX2Zp
ZWxkZGVmX2lzc3RyaW5nKGYpKSB7Ci0gICAgICAgICpzID0gZi0+c2VsZWN0b3JfYmFzZTsKLSAg
ICAgIH0gZWxzZSBpZiAodXBiX2ZpZWxkZGVmX2xhenkoZikpIHsKLSAgICAgICAgKnMgPSBmLT5z
ZWxlY3Rvcl9iYXNlICsgMzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX0hBTkRMRVJfU1RBUlRTVFI6Ci0g
ICAgICBpZiAodXBiX2ZpZWxkZGVmX2lzc3RyaW5nKGYpIHx8IHVwYl9maWVsZGRlZl9sYXp5KGYp
KSB7Ci0gICAgICAgICpzID0gZi0+c2VsZWN0b3JfYmFzZSArIDE7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQ
Ql9IQU5ETEVSX0VORFNUUjoKLSAgICAgIGlmICh1cGJfZmllbGRkZWZfaXNzdHJpbmcoZikgfHwg
dXBiX2ZpZWxkZGVmX2xhenkoZikpIHsKLSAgICAgICAgKnMgPSBmLT5zZWxlY3Rvcl9iYXNlICsg
MjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgVVBCX0hBTkRMRVJfU1RBUlRTRVE6Ci0gICAgICBpZiAoIXVwYl9m
aWVsZGRlZl9pc3NlcShmKSkgcmV0dXJuIGZhbHNlOwotICAgICAgKnMgPSBmLT5zZWxlY3Rvcl9i
YXNlIC0gMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX0hBTkRMRVJfRU5EU0VROgotICAg
ICAgaWYgKCF1cGJfZmllbGRkZWZfaXNzZXEoZikpIHJldHVybiBmYWxzZTsKLSAgICAgICpzID0g
Zi0+c2VsZWN0b3JfYmFzZSAtIDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9IQU5ETEVS
X1NUQVJUU1VCTVNHOgotICAgICAgaWYgKCF1cGJfZmllbGRkZWZfaXNzdWJtc2coZikpIHJldHVy
biBmYWxzZTsKLSAgICAgIC8qIFNlbGVjdG9ycyBmb3IgU1RBUlRTVUJNU0cgYXJlIGF0IHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIHRhYmxlIHNvIHRoYXQgdGhlCi0gICAgICAgKiBzZWxlY3RvciBjYW4g
YWxzbyBiZSB1c2VkIGFzIGFuIGluZGV4IGludG8gdGhlICJzdWIiIGFycmF5IG9mCi0gICAgICAg
KiBzdWJoYW5kbGVycy4gIFRoZSBpbmRleGVzIGZvciB0aGUgdHdvIGludG8gdGhlc2UgdHdvIHRh
YmxlcyBhcmUgdGhlCi0gICAgICAgKiBzYW1lLCBleGNlcHQgdGhhdCBpbiB0aGUgaGFuZGxlciB0
YWJsZSB0aGUgc3RhdGljIHNlbGVjdG9ycyBjb21lIGZpcnN0LiAqLwotICAgICAgKnMgPSBmLT5p
bmRleF8gKyBVUEJfU1RBVElDX1NFTEVDVE9SX0NPVU5UOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBVUEJfSEFORExFUl9FTkRTVUJNU0c6Ci0gICAgICBpZiAoIXVwYl9maWVsZGRlZl9pc3N1Ym1z
ZyhmKSkgcmV0dXJuIGZhbHNlOwotICAgICAgKnMgPSBmLT5zZWxlY3Rvcl9iYXNlOwotICAgICAg
YnJlYWs7Ci0gIH0KLSAgYXNzZXJ0KChzaXplX3QpKnMgPCB1cGJfZmllbGRkZWZfY29udGFpbmlu
Z3R5cGUoZiktPnNlbGVjdG9yX2NvdW50KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXVpbnQzMl90
IHVwYl9oYW5kbGVyc19zZWxlY3RvcmJhc2VvZmZzZXQoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7
Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfaXNzZXEoZikgPyAyIDogMDsKLX0KLQotdWludDMyX3Qg
dXBiX2hhbmRsZXJzX3NlbGVjdG9yY291bnQoY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIHVp
bnQzMl90IHJldCA9IDE7Ci0gIGlmICh1cGJfZmllbGRkZWZfaXNzZXEoZikpIHJldCArPSAyOyAg
ICAvKiBTVEFSVFNFUS9FTkRTRVEgKi8KLSAgaWYgKHVwYl9maWVsZGRlZl9pc3N0cmluZyhmKSkg
cmV0ICs9IDI7IC8qIFtTVFJJTkddL1NUQVJUU1RSL0VORFNUUiAqLwotICBpZiAodXBiX2ZpZWxk
ZGVmX2lzc3VibXNnKGYpKSB7Ci0gICAgLyogRU5EU1VCTVNHIChTVEFSVFNVQk1TRyBpcyBhdCB0
YWJsZSBiZWdpbm5pbmcpICovCi0gICAgcmV0ICs9IDA7Ci0gICAgaWYgKHVwYl9maWVsZGRlZl9s
YXp5KGYpKSB7Ci0gICAgICAvKiBTVEFSVFNUUi9FTkRTVFIvU1RSSU5HIChmb3IgbGF6eSkgKi8K
LSAgICAgIHJldCArPSAzOwotICAgIH0KLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0KLS8qIHVw
Yl9oYW5kbGVyYXR0ciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLXZvaWQgdXBiX2hhbmRsZXJhdHRyX2luaXQodXBiX2hhbmRs
ZXJhdHRyICphdHRyKSB7Ci0gIHVwYl9oYW5kbGVyYXR0ciBmcm9tID0gVVBCX0hBTkRMRVJBVFRS
X0lOSVRJQUxJWkVSOwotICBtZW1jcHkoYXR0ciwgJmZyb20sIHNpemVvZigqYXR0cikpOwotfQot
Ci12b2lkIHVwYl9oYW5kbGVyYXR0cl91bmluaXQodXBiX2hhbmRsZXJhdHRyICphdHRyKSB7Ci0g
IFVQQl9VTlVTRUQoYXR0cik7Ci19Ci0KLWJvb2wgdXBiX2hhbmRsZXJhdHRyX3NldGhhbmRsZXJk
YXRhKHVwYl9oYW5kbGVyYXR0ciAqYXR0ciwgY29uc3Qgdm9pZCAqaGQpIHsKLSAgYXR0ci0+aGFu
ZGxlcl9kYXRhXyA9IGhkOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB1cGJfaGFuZGxlcmF0
dHJfc2V0Y2xvc3VyZXR5cGUodXBiX2hhbmRsZXJhdHRyICphdHRyLCBjb25zdCB2b2lkICp0eXBl
KSB7Ci0gIGF0dHItPmNsb3N1cmVfdHlwZV8gPSB0eXBlOwotICByZXR1cm4gdHJ1ZTsKLX0KLQot
Y29uc3Qgdm9pZCAqdXBiX2hhbmRsZXJhdHRyX2Nsb3N1cmV0eXBlKGNvbnN0IHVwYl9oYW5kbGVy
YXR0ciAqYXR0cikgewotICByZXR1cm4gYXR0ci0+Y2xvc3VyZV90eXBlXzsKLX0KLQotYm9vbCB1
cGJfaGFuZGxlcmF0dHJfc2V0cmV0dXJuY2xvc3VyZXR5cGUodXBiX2hhbmRsZXJhdHRyICphdHRy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAq
dHlwZSkgewotICBhdHRyLT5yZXR1cm5fY2xvc3VyZV90eXBlXyA9IHR5cGU7Ci0gIHJldHVybiB0
cnVlOwotfQotCi1jb25zdCB2b2lkICp1cGJfaGFuZGxlcmF0dHJfcmV0dXJuY2xvc3VyZXR5cGUo
Y29uc3QgdXBiX2hhbmRsZXJhdHRyICphdHRyKSB7Ci0gIHJldHVybiBhdHRyLT5yZXR1cm5fY2xv
c3VyZV90eXBlXzsKLX0KLQotYm9vbCB1cGJfaGFuZGxlcmF0dHJfc2V0YWx3YXlzb2sodXBiX2hh
bmRsZXJhdHRyICphdHRyLCBib29sIGFsd2F5c29rKSB7Ci0gIGF0dHItPmFsd2F5c29rXyA9IGFs
d2F5c29rOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB1cGJfaGFuZGxlcmF0dHJfYWx3YXlz
b2soY29uc3QgdXBiX2hhbmRsZXJhdHRyICphdHRyKSB7Ci0gIHJldHVybiBhdHRyLT5hbHdheXNv
a187Ci19Ci0KLS8qIHVwYl9idWZoYW5kbGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXNpemVfdCB1cGJfYnVmaGFuZGxl
X29iam9mcyhjb25zdCB1cGJfYnVmaGFuZGxlICpoKSB7Ci0gIHJldHVybiBoLT5vYmpvZnNfOwot
fQotCi0vKiB1cGJfYnl0ZXNoYW5kbGVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIHVwYl9ieXRlc2hhbmRsZXJfaW5p
dCh1cGJfYnl0ZXNoYW5kbGVyKiBoKSB7Ci0gIG1lbXNldChoLCAwLCBzaXplb2YoKmgpKTsKLX0K
LQotLyogRm9yIHdoZW4gd2Ugc3VwcG9ydCBoYW5kbGVyZnJlZSBjYWxsYmFja3MuICovCi12b2lk
IHVwYl9ieXRlc2hhbmRsZXJfdW5pbml0KHVwYl9ieXRlc2hhbmRsZXIqIGgpIHsKLSAgVVBCX1VO
VVNFRChoKTsKLX0KLQotYm9vbCB1cGJfYnl0ZXNoYW5kbGVyX3NldHN0YXJ0c3RyKHVwYl9ieXRl
c2hhbmRsZXIgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXJ0
c3RyX2hhbmRsZXJmdW5jICpmdW5jLCB2b2lkICpkKSB7Ci0gIGgtPnRhYmxlW1VQQl9TVEFSVFNU
Ul9TRUxFQ1RPUl0uZnVuYyA9ICh1cGJfZnVuYyopZnVuYzsKLSAgaC0+dGFibGVbVVBCX1NUQVJU
U1RSX1NFTEVDVE9SXS5hdHRyLmhhbmRsZXJfZGF0YV8gPSBkOwotICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCB1cGJfYnl0ZXNoYW5kbGVyX3NldHN0cmluZyh1cGJfYnl0ZXNoYW5kbGVyICpoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3RyaW5nX2hhbmRsZXJmdW5jICpm
dW5jLCB2b2lkICpkKSB7Ci0gIGgtPnRhYmxlW1VQQl9TVFJJTkdfU0VMRUNUT1JdLmZ1bmMgPSAo
dXBiX2Z1bmMqKWZ1bmM7Ci0gIGgtPnRhYmxlW1VQQl9TVFJJTkdfU0VMRUNUT1JdLmF0dHIuaGFu
ZGxlcl9kYXRhXyA9IGQ7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIHVwYl9ieXRlc2hhbmRs
ZXJfc2V0ZW5kc3RyKHVwYl9ieXRlc2hhbmRsZXIgKmgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwYl9lbmRmaWVsZF9oYW5kbGVyZnVuYyAqZnVuYywgdm9pZCAqZCkgewotICBo
LT50YWJsZVtVUEJfRU5EU1RSX1NFTEVDVE9SXS5mdW5jID0gKHVwYl9mdW5jKilmdW5jOwotICBo
LT50YWJsZVtVUEJfRU5EU1RSX1NFTEVDVE9SXS5hdHRyLmhhbmRsZXJfZGF0YV8gPSBkOwotICBy
ZXR1cm4gdHJ1ZTsKLX0KLS8qCi0qKiB1cGI6OlJlZkNvdW50ZWQgSW1wbGVtZW50YXRpb24KLSoq
Ci0qKiBPdXIga2V5IGludmFyaWFudHMgYXJlOgotKiogMS4gcmVmZXJlbmNlIGN5Y2xlcyBuZXZl
ciBzcGFuIGdyb3VwcwotKiogMi4gZm9yIHJlZjIodG8sIGZyb20pLCB3ZSBpbmNyZW1lbnQgdG8n
cyBjb3VudCBpZmYgZ3JvdXAoZnJvbSkgIT0gZ3JvdXAodG8pCi0qKgotKiogVGhlIHByZXZpb3Vz
IHR3byBhcmUgaG93IHdlIGF2b2lkIGxlYWtpbmcgY3ljbGVzLiAgT3RoZXIgaW1wb3J0YW50Ci0q
KiBpbnZhcmlhbnRzIGFyZToKLSoqIDMuIGZvciBtdXRhYmxlIG9iamVjdHMgImZyb20iIGFuZCAi
dG8iLCBpZiB0aGVyZSBleGlzdHMgYSByZWYyKHRvLCBmcm9tKQotKiogICAgdGhpcyBpbXBsaWVz
IGdyb3VwKGZyb20pID09IGdyb3VwKHRvKS4gIChJbiBwcmFjdGljZSwgd2hhdCB3ZSBpbXBsZW1l
bnQKLSoqICAgIGlzIGV2ZW4gc3Ryb25nZXI7ICJmcm9tIiBhbmQgInRvIiB3aWxsIHNoYXJlIGEg
Z3JvdXAgaWYgdGhlcmUgaGFzICpldmVyKgotKiogICAgYmVlbiBhIHJlZjIodG8sIGZyb20pLCBi
dXQgYWxsIHRoYXQgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcyBpcyB0aGUKLSoqICAgIHdl
YWtlciBvbmUpLgotKiogNC4gbXV0YWJsZSBhbmQgaW1tdXRhYmxlIG9iamVjdHMgYXJlIG5ldmVy
IGluIHRoZSBzYW1lIGdyb3VwLgotKi8KLQotCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0KLXN0YXRp
YyB2b2lkIGZyZWVvYmoodXBiX3JlZmNvdW50ZWQgKm8pOwotCi1jb25zdCBjaGFyIHVudHJhY2tl
ZF92YWw7Ci1jb25zdCB2b2lkICpVUEJfVU5UUkFDS0VEX1JFRiA9ICZ1bnRyYWNrZWRfdmFsOwot
Ci0vKiBhcmNoLXNwZWNpZmljIGF0b21pYyBwcmltaXRpdmVzICAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgVVBCX1RIUkVBRF9VTlNBRkUgLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1z
dGF0aWMgdm9pZCBhdG9taWNfaW5jKHVpbnQzMl90ICphKSB7ICgqYSkrKzsgfQotc3RhdGljIGJv
b2wgYXRvbWljX2RlYyh1aW50MzJfdCAqYSkgeyByZXR1cm4gLS0oKmEpID09IDA7IH0KLQotI2Vs
aWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX2NsYW5nX18pIC8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHZvaWQgYXRvbWljX2luYyh1aW50MzJfdCAq
YSkgeyBfX3N5bmNfZmV0Y2hfYW5kX2FkZChhLCAxKTsgfQotc3RhdGljIGJvb2wgYXRvbWljX2Rl
Yyh1aW50MzJfdCAqYSkgeyByZXR1cm4gX19zeW5jX3N1Yl9hbmRfZmV0Y2goYSwgMSkgPT0gMDsg
fQotCi0jZWxpZiBkZWZpbmVkKFdJTjMyKSAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaW5jbHVkZSA8V2luZG93cy5oPgotCi1z
dGF0aWMgdm9pZCBhdG9taWNfaW5jKHVwYl9hdG9taWNfdCAqYSkgeyBJbnRlcmxvY2tlZEluY3Jl
bWVudCgmYS0+dmFsKTsgfQotc3RhdGljIGJvb2wgYXRvbWljX2RlYyh1cGJfYXRvbWljX3QgKmEp
IHsKLSAgcmV0dXJuIEludGVybG9ja2VkRGVjcmVtZW50KCZhLT52YWwpID09IDA7Ci19Ci0KLSNl
bHNlCi0jZXJyb3IgQXRvbWljIHByaW1pdGl2ZXMgbm90IGRlZmluZWQgZm9yIHlvdXIgcGxhdGZv
cm0vQ1BVLiAgXAotICAgICAgIEltcGxlbWVudCB0aGVtIG9yIGNvbXBpbGUgd2l0aCBVUEJfVEhS
RUFEX1VOU0FGRS4KLSNlbmRpZgotCi0vKiBBbGwgc3RhdGljIG9iamVjdHMgcG9pbnQgdG8gdGhp
cyByZWZjb3VudC4KLSAqIEl0IGlzIHNwZWNpYWwtY2FzZWQgaW4gcmVmL3VucmVmIGJlbG93LiAg
Ki8KLXVpbnQzMl90IHN0YXRpY19yZWZjb3VudCA9IC0xOwotCi0vKiBXZSBjYW4gYXZvaWQgYXRv
bWljIG9wcyBmb3Igc3RhdGljYWxseS1kZWNsYXJlZCBvYmplY3RzLgotICogVGhpcyBpcyBhIG1p
bm9yIG9wdGltaXphdGlvbiBidXQgbmljZSBzaW5jZSB3ZSBjYW4gYXZvaWQgZGVncmFkaW5nIHVu
ZGVyCi0gKiBjb250ZW50aW9uIGluIHRoaXMgY2FzZS4gKi8KLQotc3RhdGljIHZvaWQgcmVmZ3Jv
dXAodWludDMyX3QgKmdyb3VwKSB7Ci0gIGlmIChncm91cCAhPSAmc3RhdGljX3JlZmNvdW50KQot
ICAgIGF0b21pY19pbmMoZ3JvdXApOwotfQotCi1zdGF0aWMgYm9vbCB1bnJlZmdyb3VwKHVpbnQz
Ml90ICpncm91cCkgewotICBpZiAoZ3JvdXAgPT0gJnN0YXRpY19yZWZjb3VudCkgewotICAgIHJl
dHVybiBmYWxzZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gYXRvbWljX2RlYyhncm91cCk7Ci0g
IH0KLX0KLQotCi0vKiBSZWZlcmVuY2UgdHJhY2tpbmcgKGRlYnVnIG9ubHkpICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgVVBCX0RFQlVHX1JF
RlMKLQotI2lmZGVmIFVQQl9USFJFQURfVU5TQUZFCi0KLXN0YXRpYyB2b2lkIHVwYl9sb2NrKCkg
e30KLXN0YXRpYyB2b2lkIHVwYl91bmxvY2soKSB7fQotCi0jZWxzZQotCi0vKiBVc2VyIG11c3Qg
ZGVmaW5lIGZ1bmN0aW9ucyB0aGF0IGxvY2svdW5sb2NrIGEgZ2xvYmFsIG11dGV4IGFuZCBsaW5r
IHRoaXMKLSAqIGZpbGUgYWdhaW5zdCB0aGVtLiAqLwotdm9pZCB1cGJfbG9jaygpOwotdm9pZCB1
cGJfdW5sb2NrKCk7Ci0KLSNlbmRpZgotCi0vKiBVUEJfREVCVUdfUkVGUyBtb2RlIGNvdW50cyBv
biBiZWluZyBhYmxlIHRvIG1hbGxvYygpIG1lbW9yeSBpbiBzb21lCi0gKiBjb2RlLXBhdGhzIHRo
YXQgY2FuIG5vcm1hbGx5IG5ldmVyIGZhaWwsIGxpa2UgdXBiX3JlZmNvdW50ZWRfcmVmKCkuICBT
aW5jZQotICogd2UgaGF2ZSBubyB3YXkgdG8gcHJvcGFnYWdlIG91dC1vZi1tZW1vcnkgZXJyb3Jz
IGJhY2sgdG8gdGhlIHVzZXIsIGFuZCBzaW5jZQotICogdGhlc2UgZXJyb3JzIGNhbiBvbmx5IG9j
Y3VyIGluIFVQQl9ERUJVR19SRUZTIG1vZGUsIHdlIHVzZSBhbiBhbGxvY2F0b3IgdGhhdAotICog
aW1tZWRpYXRlbHkgYWJvcnRzIG9uIGZhaWx1cmUgKGF2b2lkaW5nIHRoZSBnbG9iYWwgYWxsb2Nh
dG9yLCB3aGljaCBtaWdodAotICogaW5qZWN0IGZhaWx1cmVzKS4gKi8KLQotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotCi1zdGF0aWMgdm9pZCAqdXBiX2RlYnVncmVmc19hbGxvY2Z1bmModXBiX2FsbG9j
ICphbGxvYywgdm9pZCAqcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBvbGRzaXplLCBzaXplX3Qgc2l6ZSkgewotICBVUEJfVU5VU0VEKGFsbG9jKTsKLSAg
VVBCX1VOVVNFRChvbGRzaXplKTsKLSAgaWYgKHNpemUgPT0gMCkgewotICAgIGZyZWUocHRyKTsK
LSAgICByZXR1cm4gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICB2b2lkICpyZXQgPSByZWFsbG9jKHB0
ciwgc2l6ZSk7Ci0KLSAgICBpZiAoIXJldCkgewotICAgICAgYWJvcnQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLXVwYl9hbGxvYyB1cGJfYWxsb2NfZGVidWdyZWZzID0g
eyZ1cGJfZGVidWdyZWZzX2FsbG9jZnVuY307Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgaW50IGNv
dW50OyAgLyogSG93IG1hbnkgcmVmcyB0aGVyZSBhcmUgKGR1cGxpY2F0ZXMgb25seSBhbGxvd2Vk
IGZvciByZWYyKS4gKi8KLSAgYm9vbCBpc19yZWYyOwotfSB0cmFja2VkcmVmOwotCi1zdGF0aWMg
dHJhY2tlZHJlZiAqdHJhY2tlZHJlZl9uZXcoYm9vbCBpc19yZWYyKSB7Ci0gIHRyYWNrZWRyZWYg
KnJldCA9IHVwYl9tYWxsb2MoJnVwYl9hbGxvY19kZWJ1Z3JlZnMsIHNpemVvZigqcmV0KSk7Ci0g
IHJldC0+Y291bnQgPSAxOwotICByZXQtPmlzX3JlZjIgPSBpc19yZWYyOwotICByZXR1cm4gcmV0
OwotfQotCi1zdGF0aWMgdm9pZCB0cmFjayhjb25zdCB1cGJfcmVmY291bnRlZCAqciwgY29uc3Qg
dm9pZCAqb3duZXIsIGJvb2wgcmVmMikgewotICB1cGJfdmFsdWUgdjsKLQotICBhc3NlcnQob3du
ZXIpOwotICBpZiAob3duZXIgPT0gVVBCX1VOVFJBQ0tFRF9SRUYpIHJldHVybjsKLQotICB1cGJf
bG9jaygpOwotICBpZiAodXBiX2ludHRhYmxlX2xvb2t1cHB0cihyLT5yZWZzLCBvd25lciwgJnYp
KSB7Ci0gICAgdHJhY2tlZHJlZiAqcmVmID0gdXBiX3ZhbHVlX2dldHB0cih2KTsKLSAgICAvKiBT
aW5jZSB3ZSBhbGxvdyBtdWx0aXBsZSByZWYyJ3MgZm9yIHRoZSBzYW1lIHRvL2Zyb20gcGFpciB3
aXRob3V0Ci0gICAgICogYWxsb2NhdGluZyBzZXBhcmF0ZSBtZW1vcnkgZm9yIGVhY2ggb25lLCB3
ZSBsb3NlIHRoZSBmaW5lLWdyYWluZWQKLSAgICAgKiB0cmFja2luZyBiZWhhdmlvciB3ZSBnZXQg
d2l0aCByZWd1bGFyIHJlZnMuICBTaW5jZSByZWYycyBvbmx5IGhhcHBlbgotICAgICAqIGluc2lk
ZSB1cGIsIHdlJ2xsIGFjY2VwdCB0aGlzIGxpbWl0YXRpb24gdW50aWwvdW5sZXNzIHRoZXJlIGlz
IGEgcmVhbGx5Ci0gICAgICogZGlmZmljdWx0IHVwYi1pbnRlcm5hbCBidWcgdGhhdCBjYW4ndCBi
ZSBmaWd1cmVkIG91dCB3aXRob3V0IGl0LiAqLwotICAgIGFzc2VydChyZWYyKTsKLSAgICBhc3Nl
cnQocmVmLT5pc19yZWYyKTsKLSAgICByZWYtPmNvdW50Kys7Ci0gIH0gZWxzZSB7Ci0gICAgdHJh
Y2tlZHJlZiAqcmVmID0gdHJhY2tlZHJlZl9uZXcocmVmMik7Ci0gICAgdXBiX2ludHRhYmxlX2lu
c2VydHB0cjIoci0+cmVmcywgb3duZXIsIHVwYl92YWx1ZV9wdHIocmVmKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmdXBiX2FsbG9jX2RlYnVncmVmcyk7Ci0gICAgaWYgKHJlZjIpIHsK
LSAgICAgIC8qIFdlIGtub3cgdGhpcyBjYXN0IGlzIHNhZmUgd2hlbiBpdCBpcyBhIHJlZjIsIGJl
Y2F1c2UgaXQncyBjb21pbmcgZnJvbQotICAgICAgICogYW5vdGhlciByZWZjb3VudGVkIG9iamVj
dC4gKi8KLSAgICAgIGNvbnN0IHVwYl9yZWZjb3VudGVkICpmcm9tID0gb3duZXI7Ci0gICAgICBh
c3NlcnQoIXVwYl9pbnR0YWJsZV9sb29rdXBwdHIoZnJvbS0+cmVmMnMsIHIsIE5VTEwpKTsKLSAg
ICAgIHVwYl9pbnR0YWJsZV9pbnNlcnRwdHIyKGZyb20tPnJlZjJzLCByLCB1cGJfdmFsdWVfcHRy
KE5VTEwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVwYl9hbGxvY19kZWJ1Z3Jl
ZnMpOwotICAgIH0KLSAgfQotICB1cGJfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVudHJh
Y2soY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIGNvbnN0IHZvaWQgKm93bmVyLCBib29sIHJlZjIp
IHsKLSAgdXBiX3ZhbHVlIHY7Ci0gIGJvb2wgZm91bmQ7Ci0gIHRyYWNrZWRyZWYgKnJlZjsKLQot
ICBhc3NlcnQob3duZXIpOwotICBpZiAob3duZXIgPT0gVVBCX1VOVFJBQ0tFRF9SRUYpIHJldHVy
bjsKLQotICB1cGJfbG9jaygpOwotICBmb3VuZCA9IHVwYl9pbnR0YWJsZV9sb29rdXBwdHIoci0+
cmVmcywgb3duZXIsICZ2KTsKLSAgLyogVGhpcyBhc3NlcnQgd2lsbCBmYWlsIGlmIGFuIG93bmVy
IGF0dGVtcHRzIHRvIHJlbGVhc2UgYSByZWYgaXQgZGlkbid0IGhhdmUuICovCi0gIFVQQl9BU1NF
UlRfVkFSKGZvdW5kLCBmb3VuZCk7Ci0gIHJlZiA9IHVwYl92YWx1ZV9nZXRwdHIodik7Ci0gIGFz
c2VydChyZWYtPmlzX3JlZjIgPT0gcmVmMik7Ci0gIGlmICgtLXJlZi0+Y291bnQgPT0gMCkgewot
ICAgIGZyZWUocmVmKTsKLSAgICB1cGJfaW50dGFibGVfcmVtb3ZlcHRyKHItPnJlZnMsIG93bmVy
LCBOVUxMKTsKLSAgICBpZiAocmVmMikgewotICAgICAgLyogV2Uga25vdyB0aGlzIGNhc3QgaXMg
c2FmZSB3aGVuIGl0IGlzIGEgcmVmMiwgYmVjYXVzZSBpdCdzIGNvbWluZyBmcm9tCi0gICAgICAg
KiBhbm90aGVyIHJlZmNvdW50ZWQgb2JqZWN0LiAqLwotICAgICAgY29uc3QgdXBiX3JlZmNvdW50
ZWQgKmZyb20gPSBvd25lcjsKLSAgICAgIGJvb2wgcmVtb3ZlZCA9IHVwYl9pbnR0YWJsZV9yZW1v
dmVwdHIoZnJvbS0+cmVmMnMsIHIsIE5VTEwpOwotICAgICAgYXNzZXJ0KHJlbW92ZWQpOwotICAg
IH0KLSAgfQotICB1cGJfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrcmVmKGNvbnN0
IHVwYl9yZWZjb3VudGVkICpyLCBjb25zdCB2b2lkICpvd25lciwgYm9vbCByZWYyKSB7Ci0gIHVw
Yl92YWx1ZSB2OwotICBib29sIGZvdW5kOwotICB0cmFja2VkcmVmICpyZWY7Ci0KLSAgdXBiX2xv
Y2soKTsKLSAgZm91bmQgPSB1cGJfaW50dGFibGVfbG9va3VwcHRyKHItPnJlZnMsIG93bmVyLCAm
dik7Ci0gIFVQQl9BU1NFUlRfVkFSKGZvdW5kLCBmb3VuZCk7Ci0gIHJlZiA9IHVwYl92YWx1ZV9n
ZXRwdHIodik7Ci0gIGFzc2VydChyZWYtPmlzX3JlZjIgPT0gcmVmMik7Ci0gIHVwYl91bmxvY2so
KTsKLX0KLQotLyogUG9wdWxhdGVzIHRoZSBnaXZlbiBVUEJfQ1RZUEVfSU5UMzIgaW50dGFibGUg
d2l0aCBjb3VudHMgb2YgcmVmMidzIHRoYXQKLSAqIG9yaWdpbmF0ZSBmcm9tIHRoZSBnaXZlbiBv
d25lci4gKi8KLXN0YXRpYyB2b2lkIGdldHJlZjJzKGNvbnN0IHVwYl9yZWZjb3VudGVkICpvd25l
ciwgdXBiX2ludHRhYmxlICp0YWIpIHsKLSAgdXBiX2ludHRhYmxlX2l0ZXIgaTsKLQotICB1cGJf
bG9jaygpOwotICB1cGJfaW50dGFibGVfYmVnaW4oJmksIG93bmVyLT5yZWYycyk7Ci0gIGZvcig7
ICF1cGJfaW50dGFibGVfZG9uZSgmaSk7IHVwYl9pbnR0YWJsZV9uZXh0KCZpKSkgewotICAgIHVw
Yl92YWx1ZSB2OwotICAgIHVwYl92YWx1ZSBjb3VudDsKLSAgICB0cmFja2VkcmVmICpyZWY7Ci0g
ICAgYm9vbCBmb3VuZDsKLQotICAgIHVwYl9yZWZjb3VudGVkICp0byA9ICh1cGJfcmVmY291bnRl
ZCopdXBiX2ludHRhYmxlX2l0ZXJfa2V5KCZpKTsKLQotICAgIC8qIFRvIGdldCB0aGUgY291bnQg
d2UgbmVlZCB0byBsb29rIGluIHRoZSB0YXJnZXQncyB0YWJsZS4gKi8KLSAgICBmb3VuZCA9IHVw
Yl9pbnR0YWJsZV9sb29rdXBwdHIodG8tPnJlZnMsIG93bmVyLCAmdik7Ci0gICAgYXNzZXJ0KGZv
dW5kKTsKLSAgICByZWYgPSB1cGJfdmFsdWVfZ2V0cHRyKHYpOwotICAgIGNvdW50ID0gdXBiX3Zh
bHVlX2ludDMyKHJlZi0+Y291bnQpOwotCi0gICAgdXBiX2ludHRhYmxlX2luc2VydHB0cjIodGFi
LCB0bywgY291bnQsICZ1cGJfYWxsb2NfZGVidWdyZWZzKTsKLSAgfQotICB1cGJfdW5sb2NrKCk7
Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdXBiX2ludHRhYmxlIHJlZjI7Ci0gIGNvbnN0IHVw
Yl9yZWZjb3VudGVkICpvYmo7Ci19IGNoZWNrX3N0YXRlOwotCi1zdGF0aWMgdm9pZCB2aXNpdF9j
aGVjayhjb25zdCB1cGJfcmVmY291bnRlZCAqb2JqLCBjb25zdCB1cGJfcmVmY291bnRlZCAqc3Vi
b2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgewotICBjaGVja19z
dGF0ZSAqcyA9IGNsb3N1cmU7Ci0gIHVwYl9pbnR0YWJsZSAqcmVmMiA9ICZzLT5yZWYyOwotICB1
cGJfdmFsdWUgdjsKLSAgYm9vbCByZW1vdmVkOwotICBpbnQzMl90IG5ld2NvdW50OwotCi0gIGFz
c2VydChvYmogPT0gcy0+b2JqKTsKLSAgYXNzZXJ0KHN1Ym9iaik7Ci0gIHJlbW92ZWQgPSB1cGJf
aW50dGFibGVfcmVtb3ZlcHRyKHJlZjIsIHN1Ym9iaiwgJnYpOwotICAvKiBUaGUgZm9sbG93aW5n
IGFzc2VydGlvbiB3aWxsIGZhaWwgaWYgdGhlIHZpc2l0KCkgZnVuY3Rpb24gdmlzaXRzIGEgc3Vi
b2JqCi0gICAqIHRoYXQgaXQgZGlkIG5vdCBoYXZlIGEgcmVmMiBvbiwgb3IgdmlzaXRzIHRoZSBz
YW1lIHN1Ym9iaiB0b28gbWFueSB0aW1lcy4gKi8KLSAgYXNzZXJ0KHJlbW92ZWQpOwotICBuZXdj
b3VudCA9IHVwYl92YWx1ZV9nZXRpbnQzMih2KSAtIDE7Ci0gIGlmIChuZXdjb3VudCA+IDApIHsK
LSAgICB1cGJfaW50dGFibGVfaW5zZXJ0MihyZWYyLCAodWludHB0cl90KXN1Ym9iaiwgdXBiX3Zh
bHVlX2ludDMyKG5ld2NvdW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmdXBiX2FsbG9j
X2RlYnVncmVmcyk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgdmlzaXQoY29uc3QgdXBiX3JlZmNv
dW50ZWQgKnIsIHVwYl9yZWZjb3VudGVkX3Zpc2l0ICp2LAotICAgICAgICAgICAgICAgICAgdm9p
ZCAqY2xvc3VyZSkgewotICAvKiBJbiBERUJVR19SRUZTIG1vZGUgd2Uga25vdyB3aGF0IGV4aXN0
aW5nIHJlZjIgcmVmcyB0aGVyZSBhcmUsIHNvIHdlIGtub3cKLSAgICogZXhhY3RseSB0aGUgc2V0
IG9mIG5vZGVzIHRoYXQgdmlzaXQoKSBzaG91bGQgdmlzaXQuICBTbyB3ZSB2ZXJpZnkgdmlzaXQo
KSdzCi0gICAqIGNvcnJlY3RuZXNzIGhlcmUuICovCi0gIGNoZWNrX3N0YXRlIHN0YXRlOwotICBz
dGF0ZS5vYmogPSByOwotICB1cGJfaW50dGFibGVfaW5pdDIoJnN0YXRlLnJlZjIsIFVQQl9DVFlQ
RV9JTlQzMiwgJnVwYl9hbGxvY19kZWJ1Z3JlZnMpOwotICBnZXRyZWYycyhyLCAmc3RhdGUucmVm
Mik7Ci0KLSAgLyogVGhpcyBzaG91bGQgdmlzaXQgYW55IGNoaWxkcmVuIGluIHRoZSByZWYyIHRh
YmxlLiAqLwotICBpZiAoci0+dnRibC0+dmlzaXQpIHItPnZ0YmwtPnZpc2l0KHIsIHZpc2l0X2No
ZWNrLCAmc3RhdGUpOwotCi0gIC8qIFRoaXMgYXNzZXJ0aW9uIHdpbGwgZmFpbCBpZiB0aGUgdmlz
aXQoKSBmdW5jdGlvbiBtaXNzZWQgYW55IGNoaWxkcmVuLiAqLwotICBhc3NlcnQodXBiX2ludHRh
YmxlX2NvdW50KCZzdGF0ZS5yZWYyKSA9PSAwKTsKLSAgdXBiX2ludHRhYmxlX3VuaW5pdDIoJnN0
YXRlLnJlZjIsICZ1cGJfYWxsb2NfZGVidWdyZWZzKTsKLSAgaWYgKHItPnZ0YmwtPnZpc2l0KSBy
LT52dGJsLT52aXNpdChyLCB2LCBjbG9zdXJlKTsKLX0KLQotc3RhdGljIHZvaWQgdHJhY2tpbml0
KHVwYl9yZWZjb3VudGVkICpyKSB7Ci0gIHItPnJlZnMgPSB1cGJfbWFsbG9jKCZ1cGJfYWxsb2Nf
ZGVidWdyZWZzLCBzaXplb2YoKnItPnJlZnMpKTsKLSAgci0+cmVmMnMgPSB1cGJfbWFsbG9jKCZ1
cGJfYWxsb2NfZGVidWdyZWZzLCBzaXplb2YoKnItPnJlZjJzKSk7Ci0gIHVwYl9pbnR0YWJsZV9p
bml0MihyLT5yZWZzLCBVUEJfQ1RZUEVfUFRSLCAmdXBiX2FsbG9jX2RlYnVncmVmcyk7Ci0gIHVw
Yl9pbnR0YWJsZV9pbml0MihyLT5yZWYycywgVVBCX0NUWVBFX1BUUiwgJnVwYl9hbGxvY19kZWJ1
Z3JlZnMpOwotfQotCi1zdGF0aWMgdm9pZCB0cmFja2ZyZWUoY29uc3QgdXBiX3JlZmNvdW50ZWQg
KnIpIHsKLSAgdXBiX2ludHRhYmxlX3VuaW5pdDIoci0+cmVmcywgJnVwYl9hbGxvY19kZWJ1Z3Jl
ZnMpOwotICB1cGJfaW50dGFibGVfdW5pbml0MihyLT5yZWYycywgJnVwYl9hbGxvY19kZWJ1Z3Jl
ZnMpOwotICB1cGJfZnJlZSgmdXBiX2FsbG9jX2RlYnVncmVmcywgci0+cmVmcyk7Ci0gIHVwYl9m
cmVlKCZ1cGJfYWxsb2NfZGVidWdyZWZzLCByLT5yZWYycyk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRp
YyB2b2lkIHRyYWNrKGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLCBjb25zdCB2b2lkICpvd25lciwg
Ym9vbCByZWYyKSB7Ci0gIFVQQl9VTlVTRUQocik7Ci0gIFVQQl9VTlVTRUQob3duZXIpOwotICBV
UEJfVU5VU0VEKHJlZjIpOwotfQotCi1zdGF0aWMgdm9pZCB1bnRyYWNrKGNvbnN0IHVwYl9yZWZj
b3VudGVkICpyLCBjb25zdCB2b2lkICpvd25lciwgYm9vbCByZWYyKSB7Ci0gIFVQQl9VTlVTRUQo
cik7Ci0gIFVQQl9VTlVTRUQob3duZXIpOwotICBVUEJfVU5VU0VEKHJlZjIpOwotfQotCi1zdGF0
aWMgdm9pZCBjaGVja3JlZihjb25zdCB1cGJfcmVmY291bnRlZCAqciwgY29uc3Qgdm9pZCAqb3du
ZXIsIGJvb2wgcmVmMikgewotICBVUEJfVU5VU0VEKHIpOwotICBVUEJfVU5VU0VEKG93bmVyKTsK
LSAgVVBCX1VOVVNFRChyZWYyKTsKLX0KLQotc3RhdGljIHZvaWQgdHJhY2tpbml0KHVwYl9yZWZj
b3VudGVkICpyKSB7Ci0gIFVQQl9VTlVTRUQocik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyYWNrZnJl
ZShjb25zdCB1cGJfcmVmY291bnRlZCAqcikgewotICBVUEJfVU5VU0VEKHIpOwotfQotCi1zdGF0
aWMgdm9pZCB2aXNpdChjb25zdCB1cGJfcmVmY291bnRlZCAqciwgdXBiX3JlZmNvdW50ZWRfdmlz
aXQgKnYsCi0gICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIGlmIChyLT52dGJs
LT52aXNpdCkgci0+dnRibC0+dmlzaXQociwgdiwgY2xvc3VyZSk7Ci19Ci0KLSNlbmRpZiAgLyog
VVBCX0RFQlVHX1JFRlMgKi8KLQotCi0vKiBmcmVlemUoKSAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGUg
ZnJlZXplKCkgb3BlcmF0aW9uIGlzIGJ5IGZhciB0aGUgbW9zdCBjb21wbGljYXRlZCBwYXJ0IG9m
IHRoaXMgc2NoZW1lLgotICogV2UgY29tcHV0ZSBzdHJvbmdseS1jb25uZWN0ZWQgY29tcG9uZW50
cyBhbmQgdGhlbiBtdXRhdGUgdGhlIGdyYXBoIHN1Y2ggdGhhdAotICogd2UgcHJlc2VydmUgdGhl
IGludmFyaWFudHMgZG9jdW1lbnRlZCBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4gIEFuZCB3ZSBt
dXN0Ci0gKiBoYW5kbGUgb3V0LW9mLW1lbW9yeSBlcnJvcnMgZ3JhY2VmdWxseSAod2l0aG91dCBs
ZWF2aW5nIHRoZSBncmFwaAotICogaW5jb25zaXN0ZW50KSwgd2hpY2ggYWRkcyB0byB0aGUgZnVu
LiAqLwotCi0vKiBUaGUgc3RhdGUgdXNlZCBieSB0aGUgZnJlZXplIG9wZXJhdGlvbiAoc2hhcmVk
IGFjcm9zcyBtYW55IGZ1bmN0aW9ucykuICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGludCBkZXB0
aDsKLSAgaW50IG1heGRlcHRoOwotICB1aW50NjRfdCBpbmRleDsKLSAgLyogTWFwcyB1cGJfcmVm
Y291bnRlZCogLT4gYXR0cmlidXRlcyAoY29sb3IsIGV0YykuICBhdHRyIGxheW91dCB2YXJpZXMg
YnkKLSAgICogY29sb3IuICovCi0gIHVwYl9pbnR0YWJsZSBvYmphdHRyOwotICB1cGJfaW50dGFi
bGUgc3RhY2s7ICAgLyogc3RhY2sgb2YgdXBiX3JlZmNvdW50ZWQqIGZvciBUYXJqYW4ncyBhbGdv
cml0aG0uICovCi0gIHVwYl9pbnR0YWJsZSBncm91cHM7ICAvKiBhcnJheSBvZiB1aW50MzJfdCos
IG1hbGxvYydkIHJlZmNvdW50cyBmb3IgbmV3IGdyb3VwcyAqLwotICB1cGJfc3RhdHVzICpzdGF0
dXM7Ci0gIGptcF9idWYgZXJyOwotfSB0YXJqYW47Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VfcmVm
Mihjb25zdCB1cGJfcmVmY291bnRlZCAqb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVwYl9yZWZjb3VudGVkICpzdWJvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqY2xvc3VyZSk7Ci0KLS8qIE5vZGUgYXR0cmlidXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEFmdGVyIG91ciBh
bmFseXNpcyBwaGFzZSBhbGwgbm9kZXMgd2lsbCBiZSBlaXRoZXIgR1JBWSBvciBXSElURS4gKi8K
LQotdHlwZWRlZiBlbnVtIHsKLSAgQkxBQ0sgPSAwLCAgLyogT2JqZWN0IGhhcyBub3QgYmVlbiBz
ZWVuLiAqLwotICBHUkFZLCAgIC8qIE9iamVjdCBoYXMgYmVlbiBmb3VuZCB2aWEgYSByZWZncm91
cCBidXQgbWF5IG5vdCBiZSByZWFjaGFibGUuICovCi0gIEdSRUVOLCAgLyogT2JqZWN0IGlzIHJl
YWNoYWJsZSBhbmQgaXMgY3VycmVudGx5IG9uIHRoZSBUYXJqYW4gc3RhY2suICovCi0gIFdISVRF
ICAgLyogT2JqZWN0IGlzIHJlYWNoYWJsZSBhbmQgaGFzIGJlZW4gYXNzaWduZWQgYSBncm91cCAo
U0NDKS4gKi8KLX0gY29sb3JfdDsKLQotVVBCX05PUkVUVVJOIHN0YXRpYyB2b2lkIGVycih0YXJq
YW4gKnQpIHsgbG9uZ2ptcCh0LT5lcnIsIDEpOyB9Ci1VUEJfTk9SRVRVUk4gc3RhdGljIHZvaWQg
b29tKHRhcmphbiAqdCkgewotICB1cGJfc3RhdHVzX3NldGVycm1zZyh0LT5zdGF0dXMsICJvdXQg
b2YgbWVtb3J5Iik7Ci0gIGVycih0KTsKLX0KLQotc3RhdGljIHVpbnQ2NF90IHRyeWdldGF0dHIo
Y29uc3QgdGFyamFuICp0LCBjb25zdCB1cGJfcmVmY291bnRlZCAqcikgewotICB1cGJfdmFsdWUg
djsKLSAgcmV0dXJuIHVwYl9pbnR0YWJsZV9sb29rdXBwdHIoJnQtPm9iamF0dHIsIHIsICZ2KSA/
Ci0gICAgICB1cGJfdmFsdWVfZ2V0dWludDY0KHYpIDogMDsKLX0KLQotc3RhdGljIHVpbnQ2NF90
IGdldGF0dHIoY29uc3QgdGFyamFuICp0LCBjb25zdCB1cGJfcmVmY291bnRlZCAqcikgewotICB1
cGJfdmFsdWUgdjsKLSAgYm9vbCBmb3VuZCA9IHVwYl9pbnR0YWJsZV9sb29rdXBwdHIoJnQtPm9i
amF0dHIsIHIsICZ2KTsKLSAgVVBCX0FTU0VSVF9WQVIoZm91bmQsIGZvdW5kKTsKLSAgcmV0dXJu
IHVwYl92YWx1ZV9nZXR1aW50NjQodik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGF0dHIodGFyamFu
ICp0LCBjb25zdCB1cGJfcmVmY291bnRlZCAqciwgdWludDY0X3QgYXR0cikgewotICB1cGJfaW50
dGFibGVfcmVtb3ZlcHRyKCZ0LT5vYmphdHRyLCByLCBOVUxMKTsKLSAgdXBiX2ludHRhYmxlX2lu
c2VydHB0cigmdC0+b2JqYXR0ciwgciwgdXBiX3ZhbHVlX3VpbnQ2NChhdHRyKSk7Ci19Ci0KLXN0
YXRpYyBjb2xvcl90IGNvbG9yKHRhcmphbiAqdCwgY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIpIHsK
LSAgcmV0dXJuIHRyeWdldGF0dHIodCwgcikgJiAweDM7ICAvKiBDb2xvciBpcyBhbHdheXMgc3Rv
cmVkIGluIHRoZSBsb3cgMiBiaXRzLiAqLwotfQotCi1zdGF0aWMgdm9pZCBzZXRfZ3JheSh0YXJq
YW4gKnQsIGNvbnN0IHVwYl9yZWZjb3VudGVkICpyKSB7Ci0gIGFzc2VydChjb2xvcih0LCByKSA9
PSBCTEFDSyk7Ci0gIHNldGF0dHIodCwgciwgR1JBWSk7Ci19Ci0KLS8qIFB1c2hlcyBhbiBvYmog
b250byB0aGUgVGFyamFuIHN0YWNrIGFuZCBzZXRzIGl0IHRvIEdSRUVOLiAqLwotc3RhdGljIHZv
aWQgcHVzaCh0YXJqYW4gKnQsIGNvbnN0IHVwYl9yZWZjb3VudGVkICpyKSB7Ci0gIGFzc2VydChj
b2xvcih0LCByKSA9PSBCTEFDSyB8fCBjb2xvcih0LCByKSA9PSBHUkFZKTsKLSAgLyogVGhpcyBk
ZWZpbmVzIHRoZSBhdHRyIGxheW91dCBmb3IgdGhlIEdSRUVOIHN0YXRlLiAgImluZGV4IiBhbmQg
Imxvd2xpbmsiCi0gICAqIGdldCAzMSBiaXRzLCB3aGljaCBpcyBwbGVudHkgKGxpbWl0IG9mIDJC
IG9iamVjdHMgZnJvemVuIGF0IGEgdGltZSkuICovCi0gIHNldGF0dHIodCwgciwgR1JFRU4gfCAo
dC0+aW5kZXggPDwgMikgfCAodC0+aW5kZXggPDwgMzMpKTsKLSAgaWYgKCsrdC0+aW5kZXggPT0g
MHg4MDAwMDAwMCkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHQtPnN0YXR1cywgInRvbyBt
YW55IG9iamVjdHMgdG8gZnJlZXplIik7Ci0gICAgZXJyKHQpOwotICB9Ci0gIHVwYl9pbnR0YWJs
ZV9wdXNoKCZ0LT5zdGFjaywgdXBiX3ZhbHVlX3B0cigodm9pZCopcikpOwotfQotCi0vKiBQb3Bz
IGFuIG9iaiBmcm9tIHRoZSBUYXJqYW4gc3RhY2sgYW5kIHNldHMgaXQgdG8gV0hJVEUsIHdpdGgg
YSBwdHIgdG8gaXRzCi0gKiBTQ0MgZ3JvdXAuICovCi1zdGF0aWMgdXBiX3JlZmNvdW50ZWQgKnBv
cCh0YXJqYW4gKnQpIHsKLSAgdXBiX3JlZmNvdW50ZWQgKnIgPSB1cGJfdmFsdWVfZ2V0cHRyKHVw
Yl9pbnR0YWJsZV9wb3AoJnQtPnN0YWNrKSk7Ci0gIGFzc2VydChjb2xvcih0LCByKSA9PSBHUkVF
Tik7Ci0gIC8qIFRoaXMgZGVmaW5lcyB0aGUgYXR0ciBsYXlvdXQgZm9yIG5vZGVzIGluIHRoZSBX
SElURSBzdGF0ZS4KLSAgICogVG9wIG9mIGdyb3VwIHN0YWNrIGlzIFtncm91cCwgTlVMTF07IHdl
IHBvaW50IGF0IGdyb3VwLiAqLwotICBzZXRhdHRyKHQsIHIsIFdISVRFIHwgKHVwYl9pbnR0YWJs
ZV9jb3VudCgmdC0+Z3JvdXBzKSAtIDIpIDw8IDgpOwotICByZXR1cm4gcjsKLX0KLQotc3RhdGlj
IHZvaWQgdGFyamFuX25ld2dyb3VwKHRhcmphbiAqdCkgewotICB1aW50MzJfdCAqZ3JvdXAgPSB1
cGJfZ21hbGxvYyhzaXplb2YoKmdyb3VwKSk7Ci0gIGlmICghZ3JvdXApIG9vbSh0KTsKLSAgLyog
UHVzaCBncm91cCBhbmQgZW1wdHkgZ3JvdXAgbGVhZGVyICh3ZSdsbCBmaWxsIGluIGxlYWRlciBs
YXRlcikuICovCi0gIGlmICghdXBiX2ludHRhYmxlX3B1c2goJnQtPmdyb3VwcywgdXBiX3ZhbHVl
X3B0cihncm91cCkpIHx8Ci0gICAgICAhdXBiX2ludHRhYmxlX3B1c2goJnQtPmdyb3VwcywgdXBi
X3ZhbHVlX3B0cihOVUxMKSkpIHsKLSAgICB1cGJfZ2ZyZWUoZ3JvdXApOwotICAgIG9vbSh0KTsK
LSAgfQotICAqZ3JvdXAgPSAwOwotfQotCi1zdGF0aWMgdWludDMyX3QgaWR4KHRhcmphbiAqdCwg
Y29uc3QgdXBiX3JlZmNvdW50ZWQgKnIpIHsKLSAgYXNzZXJ0KGNvbG9yKHQsIHIpID09IEdSRUVO
KTsKLSAgcmV0dXJuIChnZXRhdHRyKHQsIHIpID4+IDIpICYgMHg3RkZGRkZGRjsKLX0KLQotc3Rh
dGljIHVpbnQzMl90IGxvd2xpbmsodGFyamFuICp0LCBjb25zdCB1cGJfcmVmY291bnRlZCAqcikg
ewotICBpZiAoY29sb3IodCwgcikgPT0gR1JFRU4pIHsKLSAgICByZXR1cm4gZ2V0YXR0cih0LCBy
KSA+PiAzMzsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gVUlOVDMyX01BWDsKLSAgfQotfQotCi1z
dGF0aWMgdm9pZCBzZXRfbG93bGluayh0YXJqYW4gKnQsIGNvbnN0IHVwYl9yZWZjb3VudGVkICpy
LCB1aW50MzJfdCBsb3dsaW5rKSB7Ci0gIGFzc2VydChjb2xvcih0LCByKSA9PSBHUkVFTik7Ci0g
IHNldGF0dHIodCwgciwgKCh1aW50NjRfdClsb3dsaW5rIDw8IDMzKSB8IChnZXRhdHRyKHQsIHIp
ICYgMHgxRkZGRkZGRkYpKTsKLX0KLQotc3RhdGljIHVpbnQzMl90ICpncm91cCh0YXJqYW4gKnQs
IHVwYl9yZWZjb3VudGVkICpyKSB7Ci0gIHVpbnQ2NF90IGdyb3VwbnVtOwotICB1cGJfdmFsdWUg
djsKLSAgYm9vbCBmb3VuZDsKLQotICBhc3NlcnQoY29sb3IodCwgcikgPT0gV0hJVEUpOwotICBn
cm91cG51bSA9IGdldGF0dHIodCwgcikgPj4gODsKLSAgZm91bmQgPSB1cGJfaW50dGFibGVfbG9v
a3VwKCZ0LT5ncm91cHMsIGdyb3VwbnVtLCAmdik7Ci0gIFVQQl9BU1NFUlRfVkFSKGZvdW5kLCBm
b3VuZCk7Ci0gIHJldHVybiB1cGJfdmFsdWVfZ2V0cHRyKHYpOwotfQotCi0vKiBJZiB0aGUgZ3Jv
dXAgbGVhZGVyIGZvciB0aGlzIG9iamVjdCdzIGdyb3VwIGhhcyBub3QgcHJldmlvdXNseSBiZWVu
IHNldCwKLSAqIHRoZSBnaXZlbiBvYmplY3QgaXMgYXNzaWduZWQgdG8gYmUgaXRzIGxlYWRlci4g
Ki8KLXN0YXRpYyB1cGJfcmVmY291bnRlZCAqZ3JvdXBsZWFkZXIodGFyamFuICp0LCB1cGJfcmVm
Y291bnRlZCAqcikgewotICB1aW50NjRfdCBsZWFkZXJfc2xvdDsKLSAgdXBiX3ZhbHVlIHY7Ci0g
IGJvb2wgZm91bmQ7Ci0KLSAgYXNzZXJ0KGNvbG9yKHQsIHIpID09IFdISVRFKTsKLSAgbGVhZGVy
X3Nsb3QgPSAoZ2V0YXR0cih0LCByKSA+PiA4KSArIDE7Ci0gIGZvdW5kID0gdXBiX2ludHRhYmxl
X2xvb2t1cCgmdC0+Z3JvdXBzLCBsZWFkZXJfc2xvdCwgJnYpOwotICBVUEJfQVNTRVJUX1ZBUihm
b3VuZCwgZm91bmQpOwotICBpZiAodXBiX3ZhbHVlX2dldHB0cih2KSkgewotICAgIHJldHVybiB1
cGJfdmFsdWVfZ2V0cHRyKHYpOwotICB9IGVsc2UgewotICAgIHVwYl9pbnR0YWJsZV9yZW1vdmUo
JnQtPmdyb3VwcywgbGVhZGVyX3Nsb3QsIE5VTEwpOwotICAgIHVwYl9pbnR0YWJsZV9pbnNlcnQo
JnQtPmdyb3VwcywgbGVhZGVyX3Nsb3QsIHVwYl92YWx1ZV9wdHIocikpOwotICAgIHJldHVybiBy
OwotICB9Ci19Ci0KLQotLyogVGFyamFuJ3MgYWxnb3JpdGhtIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogU2VlOgotICogICBo
dHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RhcmphbiUyN3Nfc3Ryb25nbHlfY29ubmVjdGVk
X2NvbXBvbmVudHNfYWxnb3JpdGhtICovCi1zdGF0aWMgdm9pZCBkb190YXJqYW4oY29uc3QgdXBi
X3JlZmNvdW50ZWQgKm9iaiwgdGFyamFuICp0KTsKLQotc3RhdGljIHZvaWQgdGFyamFuX3Zpc2l0
KGNvbnN0IHVwYl9yZWZjb3VudGVkICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdXBiX3JlZmNvdW50ZWQgKnN1Ym9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpjbG9zdXJlKSB7Ci0gIHRhcmphbiAqdCA9IGNsb3N1cmU7Ci0gIGlmICgrK3QtPmRlcHRoID4g
dC0+bWF4ZGVwdGgpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycmYodC0+c3RhdHVzLCAiZ3JhcGgg
dG9vIGRlZXAgdG8gZnJlZXplICglZCkiLCB0LT5tYXhkZXB0aCk7Ci0gICAgZXJyKHQpOwotICB9
IGVsc2UgaWYgKHN1Ym9iai0+aXNfZnJvemVuIHx8IGNvbG9yKHQsIHN1Ym9iaikgPT0gV0hJVEUp
IHsKLSAgICAvKiBEbyBub3RoaW5nOiB3ZSBkb24ndCB3YW50IHRvIHZpc2l0IG9yIGNvbG9yIGFs
cmVhZHktZnJvemVuIG5vZGVzLAotICAgICAqIGFuZCBXSElURSBub2RlcyBoYXZlIGFscmVhZHkg
YmVlbiBhc3NpZ25lZCBhIFNDQy4gKi8KLSAgfSBlbHNlIGlmIChjb2xvcih0LCBzdWJvYmopIDwg
R1JFRU4pIHsKLSAgICAvKiBTdWJkZWYgaGFzIG5vdCB5ZXQgYmVlbiB2aXNpdGVkOyByZWN1cnNl
IG9uIGl0LiAqLwotICAgIGRvX3RhcmphbihzdWJvYmosIHQpOwotICAgIHNldF9sb3dsaW5rKHQs
IG9iaiwgVVBCX01JTihsb3dsaW5rKHQsIG9iaiksIGxvd2xpbmsodCwgc3Vib2JqKSkpOwotICB9
IGVsc2UgaWYgKGNvbG9yKHQsIHN1Ym9iaikgPT0gR1JFRU4pIHsKLSAgICAvKiBTdWJkZWYgaXMg
aW4gdGhlIHN0YWNrIGFuZCBoZW5jZSBpbiB0aGUgY3VycmVudCBTQ0MuICovCi0gICAgc2V0X2xv
d2xpbmsodCwgb2JqLCBVUEJfTUlOKGxvd2xpbmsodCwgb2JqKSwgaWR4KHQsIHN1Ym9iaikpKTsK
LSAgfQotICAtLXQtPmRlcHRoOwotfQotCi1zdGF0aWMgdm9pZCBkb190YXJqYW4oY29uc3QgdXBi
X3JlZmNvdW50ZWQgKm9iaiwgdGFyamFuICp0KSB7Ci0gIGlmIChjb2xvcih0LCBvYmopID09IEJM
QUNLKSB7Ci0gICAgLyogV2UgaGF2ZW4ndCBzZWVuIHRoaXMgb2JqZWN0J3MgZ3JvdXA7IG1hcmsg
dGhlIHdob2xlIGdyb3VwIEdSQVkuICovCi0gICAgY29uc3QgdXBiX3JlZmNvdW50ZWQgKm8gPSBv
Ymo7Ci0gICAgZG8geyBzZXRfZ3JheSh0LCBvKTsgfSB3aGlsZSAoKG8gPSBvLT5uZXh0KSAhPSBv
YmopOwotICB9Ci0KLSAgcHVzaCh0LCBvYmopOwotICB2aXNpdChvYmosIHRhcmphbl92aXNpdCwg
dCk7Ci0gIGlmIChsb3dsaW5rKHQsIG9iaikgPT0gaWR4KHQsIG9iaikpIHsKLSAgICB0YXJqYW5f
bmV3Z3JvdXAodCk7Ci0gICAgd2hpbGUgKHBvcCh0KSAhPSBvYmopCi0gICAgICA7Ci0gIH0KLX0K
LQotCi0vKiBmcmVlemUoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZCBjcm9zc3JlZihjb25z
dCB1cGJfcmVmY291bnRlZCAqciwgY29uc3QgdXBiX3JlZmNvdW50ZWQgKnN1Ym9iaiwKLSAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKl90KSB7Ci0gIHRhcmphbiAqdCA9IF90OwotICBhc3NlcnQo
Y29sb3IodCwgcikgPiBCTEFDSyk7Ci0gIGlmIChjb2xvcih0LCBzdWJvYmopID4gQkxBQ0sgJiYg
ci0+Z3JvdXAgIT0gc3Vib2JqLT5ncm91cCkgewotICAgIC8qIFByZXZpb3VzbHkgdGhpcyByZWYg
d2FzIG5vdCByZWZsZWN0ZWQgaW4gc3Vib2JqLT5ncm91cCBiZWNhdXNlIHRoZXkKLSAgICAgKiB3
ZXJlIGluIHRoZSBzYW1lIGdyb3VwOyBub3cgdGhhdCB0aGV5IGFyZSBzcGxpdCBhIHJlZiBtdXN0
IGJlIHRha2VuLiAqLwotICAgIHJlZmdyb3VwKHN1Ym9iai0+Z3JvdXApOwotICB9Ci19Ci0KLXN0
YXRpYyBib29sIGZyZWV6ZSh1cGJfcmVmY291bnRlZCAqY29uc3Qqcm9vdHMsIGludCBuLCB1cGJf
c3RhdHVzICpzLAotICAgICAgICAgICAgICAgICAgIGludCBtYXhkZXB0aCkgewotICB2b2xhdGls
ZSBib29sIHJldCA9IGZhbHNlOwotICBpbnQgaTsKLSAgdXBiX2ludHRhYmxlX2l0ZXIgaXRlcjsK
LQotICAvKiBXZSBydW4gaW4gdHdvIHBhc3NlcyBzbyB0aGF0IHdlIGNhbiBhbGxvY2F0ZSBhbGwg
bWVtb3J5IGJlZm9yZSBwZXJmb3JtaW5nCi0gICAqIGFueSBtdXRhdGlvbiBvZiB0aGUgaW5wdXQg
LS0gdGhpcyBhbGxvd3MgdXMgdG8gbGVhdmUgdGhlIGlucHV0IHVuY2hhbmdlZAotICAgKiBpbiB0
aGUgY2FzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiAqLwotICB0YXJqYW4gdDsKLSAg
dC5pbmRleCA9IDA7Ci0gIHQuZGVwdGggPSAwOwotICB0Lm1heGRlcHRoID0gbWF4ZGVwdGg7Ci0g
IHQuc3RhdHVzID0gczsKLSAgaWYgKCF1cGJfaW50dGFibGVfaW5pdCgmdC5vYmphdHRyLCBVUEJf
Q1RZUEVfVUlOVDY0KSkgZ290byBlcnIxOwotICBpZiAoIXVwYl9pbnR0YWJsZV9pbml0KCZ0LnN0
YWNrLCBVUEJfQ1RZUEVfUFRSKSkgZ290byBlcnIyOwotICBpZiAoIXVwYl9pbnR0YWJsZV9pbml0
KCZ0Lmdyb3VwcywgVVBCX0NUWVBFX1BUUikpIGdvdG8gZXJyMzsKLSAgaWYgKHNldGptcCh0LmVy
cikgIT0gMCkgZ290byBlcnI0OwotCi0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAg
IGlmIChjb2xvcigmdCwgcm9vdHNbaV0pIDwgR1JFRU4pIHsKLSAgICAgIGRvX3Rhcmphbihyb290
c1tpXSwgJnQpOwotICAgIH0KLSAgfQotCi0gIC8qIElmIHdlJ3ZlIG1hZGUgaXQgdGhpcyBmYXIs
IG5vIGZ1cnRoZXIgZXJyb3JzIGFyZSBwb3NzaWJsZSBzbyBpdCdzIHNhZmUgdG8KLSAgICogbXV0
YXRlIHRoZSBvYmplY3RzIHdpdGhvdXQgcmlzayBvZiBsZWF2aW5nIHRoZW0gaW4gYW4gaW5jb25z
aXN0ZW50IHN0YXRlLiAqLwotICByZXQgPSB0cnVlOwotCi0gIC8qIFRoZSB0cmFuc2Zvcm1hdGlv
biB0aGF0IGZvbGxvd3MgcmVxdWlyZXMgY2FyZS4gIFRoZSBwcmVjb25kaXRpb25zIGFyZToKLSAg
ICogLSBhbGwgb2JqZWN0cyBpbiBhdHRyIG1hcCBhcmUgV0hJVEUgb3IgR1JBWSwgYW5kIGFyZSBp
biBtdXRhYmxlIGdyb3VwcwotICAgKiAgIChncm91cHMgb2YgYWxsIG11dGFibGUgb2JqcykKLSAg
ICogLSBubyByZWYyKHRvLCBmcm9tKSByZWZzIGhhdmUgaW5jcmVtZW50ZWQgY291bnQodG8pIGlm
IGJvdGggInRvIiBhbmQKLSAgICogICAiZnJvbSIgYXJlIGluIG91ciBhdHRyIG1hcCAodGhpcyBm
b2xsb3dzIGZyb20gaW52YXJpYW50cyAoMikgYW5kICgzKSkgKi8KLQotICAvKiBQYXNzIDE6IHdl
IHJlbW92ZSBXSElURSBvYmplY3RzIGZyb20gdGhlaXIgbXV0YWJsZSBncm91cHMsIGFuZCBhZGQg
dGhlbSB0bwotICAgKiBuZXcgZ3JvdXBzICBhY2NvcmRpbmcgdG8gdGhlIFNDQydzIHdlIGNvbXB1
dGVkLiAgVGhlc2UgbmV3IGdyb3VwcyB3aWxsCi0gICAqIGNvbnNpc3Qgb2Ygb25seSBmcm96ZW4g
b2JqZWN0cy4gIE5vbmUgd2lsbCBiZSBpbW1lZGlhdGVseSBjb2xsZWN0aWJsZSwKLSAgICogYmVj
YXVzZSBXSElURSBvYmplY3RzIGFyZSBieSBkZWZpbml0aW9uIHJlYWNoYWJsZSBmcm9tIG9uZSBv
ZiAicm9vdHMiLAotICAgKiB3aGljaCB0aGUgY2FsbGVyIG11c3Qgb3duIHJlZnMgb24uICovCi0g
IHVwYl9pbnR0YWJsZV9iZWdpbigmaXRlciwgJnQub2JqYXR0cik7Ci0gIGZvcig7ICF1cGJfaW50
dGFibGVfZG9uZSgmaXRlcik7IHVwYl9pbnR0YWJsZV9uZXh0KCZpdGVyKSkgewotICAgIHVwYl9y
ZWZjb3VudGVkICpvYmogPSAodXBiX3JlZmNvdW50ZWQqKXVwYl9pbnR0YWJsZV9pdGVyX2tleSgm
aXRlcik7Ci0gICAgLyogU2luY2UgcmVtb3ZhbCBmcm9tIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHJl
cXVpcmVzIGFjY2VzcyB0byB0aGUgb2JqZWN0J3MKLSAgICAgKiBwcmVkZWNlc3Nvciwgd2UgY29u
c2lkZXIgb2JqLT5uZXh0IGluc3RlYWQgb2Ygb2JqIGZvciBtb3ZpbmcuICBXaXRoIHRoZQotICAg
ICAqIHdoaWxlKCkgbG9vcCB3ZSBndWFyYW50ZWUgdGhhdCB3ZSB3aWxsIHZpc2l0IGV2ZXJ5IG5v
ZGUncyBwcmVkZWNlc3Nvci4KLSAgICAgKiBQcm9vZjoKLSAgICAgKiAgMS4gZXZlcnkgbm9kZSdz
IHByZWRlY2Vzc29yIGlzIGluIG91ciBhdHRyIG1hcC4KLSAgICAgKiAgMi4gdGhvdWdoIHRoZSBs
b29wIGJvZHkgbWF5IGNoYW5nZSBhIG5vZGUncyBwcmVkZWNlc3NvciwgaXQgd2lsbCBvbmx5Ci0g
ICAgICogICAgIGNoYW5nZSBpdCB0byBiZSB0aGUgbm9kZSB3ZSBhcmUgY3VycmVudGx5IG9wZXJh
dGluZyBvbiwgc28gd2l0aCBhCi0gICAgICogICAgIHdoaWxlKCkgbG9vcCB3ZSBndWFyYW50ZWUg
b3Vyc2VsdmVzIHRoZSBjaGFuY2UgdG8gcmVtb3ZlIGVhY2ggbm9kZS4gKi8KLSAgICB3aGlsZSAo
Y29sb3IoJnQsIG9iai0+bmV4dCkgPT0gV0hJVEUgJiYKLSAgICAgICAgICAgZ3JvdXAoJnQsIG9i
ai0+bmV4dCkgIT0gb2JqLT5uZXh0LT5ncm91cCkgewotICAgICAgdXBiX3JlZmNvdW50ZWQgKmxl
YWRlcjsKLQotICAgICAgLyogUmVtb3ZlIGZyb20gb2xkIGdyb3VwLiAqLwotICAgICAgdXBiX3Jl
ZmNvdW50ZWQgKm1vdmUgPSBvYmotPm5leHQ7Ci0gICAgICBpZiAob2JqID09IG1vdmUpIHsKLSAg
ICAgICAgLyogUmVtb3ZpbmcgdGhlIGxhc3Qgb2JqZWN0IGZyb20gYSBncm91cC4gKi8KLSAgICAg
ICAgYXNzZXJ0KCpvYmotPmdyb3VwID09IG9iai0+aW5kaXZpZHVhbF9jb3VudCk7Ci0gICAgICAg
IHVwYl9nZnJlZShvYmotPmdyb3VwKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG9iai0+bmV4
dCA9IG1vdmUtPm5leHQ7Ci0gICAgICAgIC8qIFRoaXMgbWF5IGRlY3JlYXNlIHRvIHplcm87IHdl
J2xsIGNvbGxlY3QgR1JBWSBvYmplY3RzIChpZiBhbnkpIHRoYXQKLSAgICAgICAgICogcmVtYWlu
IGluIHRoZSBncm91cCBpbiB0aGUgdGhpcmQgcGFzcy4gKi8KLSAgICAgICAgYXNzZXJ0KCptb3Zl
LT5ncm91cCA+PSBtb3ZlLT5pbmRpdmlkdWFsX2NvdW50KTsKLSAgICAgICAgKm1vdmUtPmdyb3Vw
IC09IG1vdmUtPmluZGl2aWR1YWxfY291bnQ7Ci0gICAgICB9Ci0KLSAgICAgIC8qIEFkZCB0byBu
ZXcgZ3JvdXAuICovCi0gICAgICBsZWFkZXIgPSBncm91cGxlYWRlcigmdCwgbW92ZSk7Ci0gICAg
ICBpZiAobW92ZSA9PSBsZWFkZXIpIHsKLSAgICAgICAgLyogRmlyc3Qgb2JqZWN0IGFkZGVkIHRv
IG5ldyBncm91cCBpcyBpdHMgbGVhZGVyLiAqLwotICAgICAgICBtb3ZlLT5ncm91cCA9IGdyb3Vw
KCZ0LCBtb3ZlKTsKLSAgICAgICAgbW92ZS0+bmV4dCA9IG1vdmU7Ci0gICAgICAgICptb3ZlLT5n
cm91cCA9IG1vdmUtPmluZGl2aWR1YWxfY291bnQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAv
KiBHcm91cCBhbHJlYWR5IGhhcyBhdCBsZWFzdCBvbmUgb2JqZWN0IGluIGl0LiAqLwotICAgICAg
ICBhc3NlcnQobGVhZGVyLT5ncm91cCA9PSBncm91cCgmdCwgbW92ZSkpOwotICAgICAgICBtb3Zl
LT5ncm91cCA9IGdyb3VwKCZ0LCBtb3ZlKTsKLSAgICAgICAgbW92ZS0+bmV4dCA9IGxlYWRlci0+
bmV4dDsKLSAgICAgICAgbGVhZGVyLT5uZXh0ID0gbW92ZTsKLSAgICAgICAgKm1vdmUtPmdyb3Vw
ICs9IG1vdmUtPmluZGl2aWR1YWxfY291bnQ7Ci0gICAgICB9Ci0KLSAgICAgIG1vdmUtPmlzX2Zy
b3plbiA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgLyogUGFzcyAyOiBHUkFZIGFuZCBXSElURSBv
YmplY3RzICJvYmoiIHdpdGggcmVmMih0bywgb2JqKSByZWZlcmVuY2VzIG11c3QKLSAgICogaW5j
cmVtZW50IGNvdW50KHRvKSBpZiBncm91cChvYmopICE9IGdyb3VwKHRvKSAod2hpY2ggY291bGQg
bm93IGJlIHRoZQotICAgKiBjYXNlIGlmICJ0byIgd2FzIGp1c3QgZnJvemVuKS4gKi8KLSAgdXBi
X2ludHRhYmxlX2JlZ2luKCZpdGVyLCAmdC5vYmphdHRyKTsKLSAgZm9yKDsgIXVwYl9pbnR0YWJs
ZV9kb25lKCZpdGVyKTsgdXBiX2ludHRhYmxlX25leHQoJml0ZXIpKSB7Ci0gICAgdXBiX3JlZmNv
dW50ZWQgKm9iaiA9ICh1cGJfcmVmY291bnRlZCopdXBiX2ludHRhYmxlX2l0ZXJfa2V5KCZpdGVy
KTsKLSAgICB2aXNpdChvYmosIGNyb3NzcmVmLCAmdCk7Ci0gIH0KLQotICAvKiBQYXNzIDM6IEdS
QVkgb2JqZWN0cyBhcmUgY29sbGVjdGVkIGlmIHRoZWlyIGdyb3VwJ3MgcmVmY291bnQgZHJvcHBl
ZCB0bwotICAgKiB6ZXJvIHdoZW4gd2UgcmVtb3ZlZCBpdHMgd2hpdGUgbm9kZXMuICBUaGlzIGNh
biBoYXBwZW4gaWYgdGhleSBoYWQgb25seQotICAgKiBiZWVuIGtlcHQgYWxpdmUgYnkgdmlydHVl
IG9mIHNoYXJpbmcgYSBncm91cCB3aXRoIGFuIG9iamVjdCB0aGF0IHdhcyBqdXN0Ci0gICAqIGZy
b3plbi4KLSAgICoKLSAgICogSXQgaXMgaW1wb3J0YW50IHRoYXQgd2UgZG8gdGhpcyBsYXN0LCBz
aW5jZSB0aGUgR1JBWSBvYmplY3QncyBmcmVlKCkKLSAgICogZnVuY3Rpb24gY291bGQgY2FsbCB1
bnJlZjIoKSBvbiBqdXN0LWZyb3plbiBvYmplY3RzLCB3aGljaCB3aWxsIGRlY3JlbWVudAotICAg
KiByZWZzIHRoYXQgd2VyZSBhZGRlZCBpbiBwYXNzIDIuICovCi0gIHVwYl9pbnR0YWJsZV9iZWdp
bigmaXRlciwgJnQub2JqYXR0cik7Ci0gIGZvcig7ICF1cGJfaW50dGFibGVfZG9uZSgmaXRlcik7
IHVwYl9pbnR0YWJsZV9uZXh0KCZpdGVyKSkgewotICAgIHVwYl9yZWZjb3VudGVkICpvYmogPSAo
dXBiX3JlZmNvdW50ZWQqKXVwYl9pbnR0YWJsZV9pdGVyX2tleSgmaXRlcik7Ci0gICAgaWYgKG9i
ai0+Z3JvdXAgPT0gTlVMTCB8fCAqb2JqLT5ncm91cCA9PSAwKSB7Ci0gICAgICBpZiAob2JqLT5n
cm91cCkgewotICAgICAgICB1cGJfcmVmY291bnRlZCAqbzsKLQotICAgICAgICAvKiBXZSBlYWdl
cmx5IGZyZWUoKSB0aGUgZ3JvdXAncyBjb3VudCAoc2luY2Ugd2UgY2FuJ3QgZWFzaWx5IGRldGVy
bWluZQotICAgICAgICAgKiB0aGUgZ3JvdXAncyByZW1haW5pbmcgc2l6ZSBpdCdzIHRoZSBlYXNp
ZXN0IHdheSB0byBlbnN1cmUgaXQgZ2V0cwotICAgICAgICAgKiBkb25lKS4gKi8KLSAgICAgICAg
dXBiX2dmcmVlKG9iai0+Z3JvdXApOwotCi0gICAgICAgIC8qIFZpc2l0IHRvIHJlbGVhc2UgcmVm
MidzIChkb25lIGluIGEgc2VwYXJhdGUgcGFzcyBzaW5jZSByZWxlYXNlX3JlZjIKLSAgICAgICAg
ICogZGVwZW5kcyBvbiBvLT5ncm91cCBiZWluZyB1bm1vZGlmaWVkIHNvIGl0IGNhbiB0ZXN0IG1l
cmdlZCgpKS4gKi8KLSAgICAgICAgbyA9IG9iajsKLSAgICAgICAgZG8geyB2aXNpdChvLCByZWxl
YXNlX3JlZjIsIE5VTEwpOyB9IHdoaWxlICgobyA9IG8tPm5leHQpICE9IG9iaik7Ci0KLSAgICAg
ICAgLyogTWFyayAiZ3JvdXAiIGZpZWxkcyBhcyBOVUxMIHNvIHdlIGtub3cgdG8gZnJlZSB0aGUg
b2JqZWN0cyBsYXRlciBpbgotICAgICAgICAgKiB0aGlzIGxvb3AsIGJ1dCBhbHNvIGRvbid0IHRy
eSB0byBkZWxldGUgdGhlIGdyb3VwIHR3aWNlLiAqLwotICAgICAgICBvID0gb2JqOwotICAgICAg
ICBkbyB7IG8tPmdyb3VwID0gTlVMTDsgfSB3aGlsZSAoKG8gPSBvLT5uZXh0KSAhPSBvYmopOwot
ICAgICAgfQotICAgICAgZnJlZW9iaihvYmopOwotICAgIH0KLSAgfQotCi1lcnI0OgotICBpZiAo
IXJldCkgewotICAgIHVwYl9pbnR0YWJsZV9iZWdpbigmaXRlciwgJnQuZ3JvdXBzKTsKLSAgICBm
b3IoOyAhdXBiX2ludHRhYmxlX2RvbmUoJml0ZXIpOyB1cGJfaW50dGFibGVfbmV4dCgmaXRlcikp
Ci0gICAgICB1cGJfZ2ZyZWUodXBiX3ZhbHVlX2dldHB0cih1cGJfaW50dGFibGVfaXRlcl92YWx1
ZSgmaXRlcikpKTsKLSAgfQotICB1cGJfaW50dGFibGVfdW5pbml0KCZ0Lmdyb3Vwcyk7Ci1lcnIz
OgotICB1cGJfaW50dGFibGVfdW5pbml0KCZ0LnN0YWNrKTsKLWVycjI6Ci0gIHVwYl9pbnR0YWJs
ZV91bmluaXQoJnQub2JqYXR0cik7Ci1lcnIxOgotICByZXR1cm4gcmV0OwotfQotCi0KLS8qIE1p
c2MgaW50ZXJuYWwgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBib29sIG1lcmdlZChjb25zdCB1cGJfcmVmY291
bnRlZCAqciwgY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIyKSB7Ci0gIHJldHVybiByLT5ncm91cCA9
PSByMi0+Z3JvdXA7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lcmdlKHVwYl9yZWZjb3VudGVkICpyLCB1
cGJfcmVmY291bnRlZCAqZnJvbSkgewotICB1cGJfcmVmY291bnRlZCAqYmFzZTsKLSAgdXBiX3Jl
ZmNvdW50ZWQgKnRtcDsKLQotICBpZiAobWVyZ2VkKHIsIGZyb20pKSByZXR1cm47Ci0gICpyLT5n
cm91cCArPSAqZnJvbS0+Z3JvdXA7Ci0gIHVwYl9nZnJlZShmcm9tLT5ncm91cCk7Ci0gIGJhc2Ug
PSBmcm9tOwotCi0gIC8qIFNldCBhbGwgcmVmY291bnQgcG9pbnRlcnMgaW4gdGhlICJmcm9tIiBj
aGFpbiB0byB0aGUgbWVyZ2VkIHJlZmNvdW50LgotICAgKgotICAgKiBUT0RPKGhhYmVybWFuKTog
dGhpcyBsaW5lYXIgYWxnb3JpdGhtIGNhbiByZXN1bHQgaW4gYW4gb3ZlcmFsbCBPKG5eMikgYm91
bmQKLSAgICogaWYgdGhlIHVzZXIgY29udGludW91c2x5IGV4dGVuZHMgYSBncm91cCBieSBvbmUg
b2JqZWN0LiAgUHJldmVudCB0aGlzIGJ5Ci0gICAqIHVzaW5nIG9uZSBvZiB0aGUgdGVjaG5pcXVl
cyBpbiB0aGlzIHBhcGVyOgotICAgKiAgICAgZnRwOi8vd3d3Lm5jZWRjLm9yZy9vdXRnb2luZy9n
ZW9tb3JwaC9kaW5vL29yYWxzL3AyNDUtdGFyamFuLnBkZiAqLwotICBkbyB7IGZyb20tPmdyb3Vw
ID0gci0+Z3JvdXA7IH0gd2hpbGUgKChmcm9tID0gZnJvbS0+bmV4dCkgIT0gYmFzZSk7Ci0KLSAg
LyogTWVyZ2UgdGhlIHR3byBjaXJjdWxhcmx5IGxpbmtlZCBsaXN0cyBieSBzd2FwcGluZyB0aGVp
ciBuZXh0IHBvaW50ZXJzLiAqLwotICB0bXAgPSByLT5uZXh0OwotICByLT5uZXh0ID0gYmFzZS0+
bmV4dDsKLSAgYmFzZS0+bmV4dCA9IHRtcDsKLX0KLQotc3RhdGljIHZvaWQgdW5yZWYoY29uc3Qg
dXBiX3JlZmNvdW50ZWQgKnIpOwotCi1zdGF0aWMgdm9pZCByZWxlYXNlX3JlZjIoY29uc3QgdXBi
X3JlZmNvdW50ZWQgKm9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfcmVm
Y291bnRlZCAqc3Vib2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUp
IHsKLSAgVVBCX1VOVVNFRChjbG9zdXJlKTsKLSAgdW50cmFjayhzdWJvYmosIG9iaiwgdHJ1ZSk7
Ci0gIGlmICghbWVyZ2VkKG9iaiwgc3Vib2JqKSkgewotICAgIGFzc2VydChzdWJvYmotPmlzX2Zy
b3plbik7Ci0gICAgdW5yZWYoc3Vib2JqKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCB1bnJlZihj
b25zdCB1cGJfcmVmY291bnRlZCAqcikgewotICBpZiAodW5yZWZncm91cChyLT5ncm91cCkpIHsK
LSAgICBjb25zdCB1cGJfcmVmY291bnRlZCAqbzsKLQotICAgIHVwYl9nZnJlZShyLT5ncm91cCk7
Ci0KLSAgICAvKiBJbiB0d28gcGFzc2VzLCBzaW5jZSByZWxlYXNlX3JlZjIgbmVlZHMgYSBndWFy
YW50ZWUgdGhhdCBhbnkgc3Vib2JqcwotICAgICAqIGFyZSBhbGl2ZS4gKi8KLSAgICBvID0gcjsK
LSAgICBkbyB7IHZpc2l0KG8sIHJlbGVhc2VfcmVmMiwgTlVMTCk7IH0gd2hpbGUoKG8gPSBvLT5u
ZXh0KSAhPSByKTsKLQotICAgIG8gPSByOwotICAgIGRvIHsKLSAgICAgIGNvbnN0IHVwYl9yZWZj
b3VudGVkICpuZXh0ID0gby0+bmV4dDsKLSAgICAgIGFzc2VydChvLT5pc19mcm96ZW4gfHwgby0+
aW5kaXZpZHVhbF9jb3VudCA9PSAwKTsKLSAgICAgIGZyZWVvYmooKHVwYl9yZWZjb3VudGVkKilv
KTsKLSAgICAgIG8gPSBuZXh0OwotICAgIH0gd2hpbGUobyAhPSByKTsKLSAgfQotfQotCi1zdGF0
aWMgdm9pZCBmcmVlb2JqKHVwYl9yZWZjb3VudGVkICpvKSB7Ci0gIHRyYWNrZnJlZShvKTsKLSAg
by0+dnRibC0+ZnJlZSgodXBiX3JlZmNvdW50ZWQqKW8pOwotfQotCi0KLS8qIFB1YmxpYyBpbnRl
cmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0KLWJvb2wgdXBiX3JlZmNvdW50ZWRfaW5pdCh1cGJfcmVmY291bnRlZCAqciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdXBiX3JlZmNvdW50ZWRfdnRi
bCAqdnRibCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpvd25lcikgewot
I2lmbmRlZiBOREVCVUcKLSAgLyogRW5kaWFubmVzcyBjaGVjay4gIFRoaXMgaXMgdW5yZWxhdGVk
IHRvIHVwYl9yZWZjb3VudGVkLCBpdCdzIGp1c3QgYQotICAgKiBjb252ZW5pZW50IHBsYWNlIHRv
IHB1dCB0aGUgY2hlY2sgdGhhdCB3ZSBjYW4gYmUgYXNzdXJlZCB3aWxsIHJ1biBmb3IKLSAgICog
YmFzaWNhbGx5IGV2ZXJ5IHByb2dyYW0gdXNpbmcgdXBiLiAqLwotICBjb25zdCBpbnQgeCA9IDE7
Ci0jaWZkZWYgVVBCX0JJR19FTkRJQU4KLSAgYXNzZXJ0KCooY2hhciopJnggIT0gMSk7Ci0jZWxz
ZQotICBhc3NlcnQoKihjaGFyKikmeCA9PSAxKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgci0+bmV4
dCA9IHI7Ci0gIHItPnZ0YmwgPSB2dGJsOwotICByLT5pbmRpdmlkdWFsX2NvdW50ID0gMDsKLSAg
ci0+aXNfZnJvemVuID0gZmFsc2U7Ci0gIHItPmdyb3VwID0gdXBiX2dtYWxsb2Moc2l6ZW9mKCpy
LT5ncm91cCkpOwotICBpZiAoIXItPmdyb3VwKSByZXR1cm4gZmFsc2U7Ci0gICpyLT5ncm91cCA9
IDA7Ci0gIHRyYWNraW5pdChyKTsKLSAgdXBiX3JlZmNvdW50ZWRfcmVmKHIsIG93bmVyKTsKLSAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdXBiX3JlZmNvdW50ZWRfaXNmcm96ZW4oY29uc3QgdXBi
X3JlZmNvdW50ZWQgKnIpIHsKLSAgcmV0dXJuIHItPmlzX2Zyb3plbjsKLX0KLQotdm9pZCB1cGJf
cmVmY291bnRlZF9yZWYoY29uc3QgdXBiX3JlZmNvdW50ZWQgKnIsIGNvbnN0IHZvaWQgKm93bmVy
KSB7Ci0gIHRyYWNrKHIsIG93bmVyLCBmYWxzZSk7Ci0gIGlmICghci0+aXNfZnJvemVuKQotICAg
ICgodXBiX3JlZmNvdW50ZWQqKXIpLT5pbmRpdmlkdWFsX2NvdW50Kys7Ci0gIHJlZmdyb3VwKHIt
Pmdyb3VwKTsKLX0KLQotdm9pZCB1cGJfcmVmY291bnRlZF91bnJlZihjb25zdCB1cGJfcmVmY291
bnRlZCAqciwgY29uc3Qgdm9pZCAqb3duZXIpIHsKLSAgdW50cmFjayhyLCBvd25lciwgZmFsc2Up
OwotICBpZiAoIXItPmlzX2Zyb3plbikKLSAgICAoKHVwYl9yZWZjb3VudGVkKilyKS0+aW5kaXZp
ZHVhbF9jb3VudC0tOwotICB1bnJlZihyKTsKLX0KLQotdm9pZCB1cGJfcmVmY291bnRlZF9yZWYy
KGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLCB1cGJfcmVmY291bnRlZCAqZnJvbSkgewotICBhc3Nl
cnQoIWZyb20tPmlzX2Zyb3plbik7ICAvKiBOb24tY29uc3QgcG9pbnRlciBpbXBsaWVzIHRoaXMu
ICovCi0gIHRyYWNrKHIsIGZyb20sIHRydWUpOwotICBpZiAoci0+aXNfZnJvemVuKSB7Ci0gICAg
cmVmZ3JvdXAoci0+Z3JvdXApOwotICB9IGVsc2UgewotICAgIG1lcmdlKCh1cGJfcmVmY291bnRl
ZCopciwgZnJvbSk7Ci0gIH0KLX0KLQotdm9pZCB1cGJfcmVmY291bnRlZF91bnJlZjIoY29uc3Qg
dXBiX3JlZmNvdW50ZWQgKnIsIHVwYl9yZWZjb3VudGVkICpmcm9tKSB7Ci0gIGFzc2VydCghZnJv
bS0+aXNfZnJvemVuKTsgIC8qIE5vbi1jb25zdCBwb2ludGVyIGltcGxpZXMgdGhpcy4gKi8KLSAg
dW50cmFjayhyLCBmcm9tLCB0cnVlKTsKLSAgaWYgKHItPmlzX2Zyb3plbikgewotICAgIHVucmVm
KHIpOwotICB9IGVsc2UgewotICAgIGFzc2VydChtZXJnZWQociwgZnJvbSkpOwotICB9Ci19Ci0K
LXZvaWQgdXBiX3JlZmNvdW50ZWRfZG9uYXRlcmVmKAotICAgIGNvbnN0IHVwYl9yZWZjb3VudGVk
ICpyLCBjb25zdCB2b2lkICpmcm9tLCBjb25zdCB2b2lkICp0bykgewotICBhc3NlcnQoZnJvbSAh
PSB0byk7Ci0gIGlmICh0byAhPSBOVUxMKQotICAgIHVwYl9yZWZjb3VudGVkX3JlZihyLCB0byk7
Ci0gIGlmIChmcm9tICE9IE5VTEwpCi0gICAgdXBiX3JlZmNvdW50ZWRfdW5yZWYociwgZnJvbSk7
Ci19Ci0KLXZvaWQgdXBiX3JlZmNvdW50ZWRfY2hlY2tyZWYoY29uc3QgdXBiX3JlZmNvdW50ZWQg
KnIsIGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIGNoZWNrcmVmKHIsIG93bmVyLCBmYWxzZSk7Ci19
Ci0KLWJvb2wgdXBiX3JlZmNvdW50ZWRfZnJlZXplKHVwYl9yZWZjb3VudGVkICpjb25zdCpyb290
cywgaW50IG4sIHVwYl9zdGF0dXMgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bWF4ZGVwdGgpIHsKLSAgaW50IGk7Ci0gIGJvb2wgcmV0OwotICBmb3IgKGkgPSAwOyBpIDwgbjsg
aSsrKSB7Ci0gICAgYXNzZXJ0KCFyb290c1tpXS0+aXNfZnJvemVuKTsKLSAgfQotICByZXQgPSBm
cmVlemUocm9vdHMsIG4sIHMsIG1heGRlcHRoKTsKLSAgYXNzZXJ0KCFzIHx8IHJldCA9PSB1cGJf
b2socykpOwotICByZXR1cm4gcmV0OwotfQotCi0KLS8qIEZhbGxiYWNrIGltcGxlbWVudGF0aW9u
IGlmIHRoZSBzaGltIGlzIG5vdCBzcGVjaWFsaXplZCBieSB0aGUgSklULiAqLwotI2RlZmluZSBT
SElNX1dSSVRFUih0eXBlLCBjdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBib29sIHVwYl9zaGltX3NldCAjIyB0eXBlICh2b2lkICpjLCBjb25z
dCB2b2lkICpoZCwgY3R5cGUgdmFsKSB7ICAgICAgICAgICAgXAotICAgIHVpbnQ4X3QgKm0gPSBj
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGNvbnN0IHVwYl9zaGltX2RhdGEgKmQgPSBoZDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChkLT5oYXNiaXQgPiAwKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgKih1aW50OF90KikmbVtkLT5oYXNiaXQgLyA4XSB8PSAxIDw8IChkLT5oYXNiaXQgJSA4KTsg
ICAgICAgICAgICAgICAgICAgXAotICAgICooY3R5cGUqKSZtW2QtPm9mZnNldF0gPSB2YWw7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiB0
cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCi1TSElNX1dSSVRFUihkb3VibGUs
IGRvdWJsZSkKLVNISU1fV1JJVEVSKGZsb2F0LCAgZmxvYXQpCi1TSElNX1dSSVRFUihpbnQzMiwg
IGludDMyX3QpCi1TSElNX1dSSVRFUihpbnQ2NCwgIGludDY0X3QpCi1TSElNX1dSSVRFUih1aW50
MzIsIHVpbnQzMl90KQotU0hJTV9XUklURVIodWludDY0LCB1aW50NjRfdCkKLVNISU1fV1JJVEVS
KGJvb2wsICAgYm9vbCkKLSN1bmRlZiBTSElNX1dSSVRFUgotCi1ib29sIHVwYl9zaGltX3NldCh1
cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwgc2l6ZV90IG9mZnNldCwKLSAg
ICAgICAgICAgICAgICAgIGludDMyX3QgaGFzYml0KSB7Ci0gIHVwYl9oYW5kbGVyYXR0ciBhdHRy
ID0gVVBCX0hBTkRMRVJBVFRSX0lOSVRJQUxJWkVSOwotICBib29sIG9rOwotCi0gIHVwYl9zaGlt
X2RhdGEgKmQgPSB1cGJfZ21hbGxvYyhzaXplb2YoKmQpKTsKLSAgaWYgKCFkKSByZXR1cm4gZmFs
c2U7Ci0gIGQtPm9mZnNldCA9IG9mZnNldDsKLSAgZC0+aGFzYml0ID0gaGFzYml0OwotCi0gIHVw
Yl9oYW5kbGVyYXR0cl9zZXRoYW5kbGVyZGF0YSgmYXR0ciwgZCk7Ci0gIHVwYl9oYW5kbGVyYXR0
cl9zZXRhbHdheXNvaygmYXR0ciwgdHJ1ZSk7Ci0gIHVwYl9oYW5kbGVyc19hZGRjbGVhbnVwKGgs
IGQsIHVwYl9nZnJlZSk7Ci0KLSNkZWZpbmUgVFlQRSh1LCBsKSBcCi0gIGNhc2UgVVBCX1RZUEVf
IyN1OiBcCi0gICAgb2sgPSB1cGJfaGFuZGxlcnNfc2V0IyNsKGgsIGYsIHVwYl9zaGltX3NldCMj
bCwgJmF0dHIpOyBicmVhazsKLQotICBvayA9IGZhbHNlOwotCi0gIHN3aXRjaCAodXBiX2ZpZWxk
ZGVmX3R5cGUoZikpIHsKLSAgICBUWVBFKElOVDY0LCAgaW50NjQpOwotICAgIFRZUEUoSU5UMzIs
ICBpbnQzMik7Ci0gICAgVFlQRShFTlVNLCAgIGludDMyKTsKLSAgICBUWVBFKFVJTlQ2NCwgdWlu
dDY0KTsKLSAgICBUWVBFKFVJTlQzMiwgdWludDMyKTsKLSAgICBUWVBFKERPVUJMRSwgZG91Ymxl
KTsKLSAgICBUWVBFKEZMT0FULCAgZmxvYXQpOwotICAgIFRZUEUoQk9PTCwgICBib29sKTsKLSAg
ICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UpOyBicmVhazsKLSAgfQotI3VuZGVmIFRZUEUKLQotICB1
cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZhdHRyKTsKLSAgcmV0dXJuIG9rOwotfQotCi1jb25zdCB1
cGJfc2hpbV9kYXRhICp1cGJfc2hpbV9nZXRkYXRhKGNvbnN0IHVwYl9oYW5kbGVycyAqaCwgdXBi
X3NlbGVjdG9yX3QgcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBi
X2ZpZWxkdHlwZV90ICp0eXBlKSB7Ci0gIHVwYl9mdW5jICpmID0gdXBiX2hhbmRsZXJzX2dldGhh
bmRsZXIoaCwgcyk7Ci0KLSAgaWYgKCh1cGJfaW50NjRfaGFuZGxlcmZ1bmMqKWYgPT0gdXBiX3No
aW1fc2V0aW50NjQpIHsKLSAgICAqdHlwZSA9IFVQQl9UWVBFX0lOVDY0OwotICB9IGVsc2UgaWYg
KCh1cGJfaW50MzJfaGFuZGxlcmZ1bmMqKWYgPT0gdXBiX3NoaW1fc2V0aW50MzIpIHsKLSAgICAq
dHlwZSA9IFVQQl9UWVBFX0lOVDMyOwotICB9IGVsc2UgaWYgKCh1cGJfdWludDY0X2hhbmRsZXJm
dW5jKilmID09IHVwYl9zaGltX3NldHVpbnQ2NCkgewotICAgICp0eXBlID0gVVBCX1RZUEVfVUlO
VDY0OwotICB9IGVsc2UgaWYgKCh1cGJfdWludDMyX2hhbmRsZXJmdW5jKilmID09IHVwYl9zaGlt
X3NldHVpbnQzMikgewotICAgICp0eXBlID0gVVBCX1RZUEVfVUlOVDMyOwotICB9IGVsc2UgaWYg
KCh1cGJfZG91YmxlX2hhbmRsZXJmdW5jKilmID09IHVwYl9zaGltX3NldGRvdWJsZSkgewotICAg
ICp0eXBlID0gVVBCX1RZUEVfRE9VQkxFOwotICB9IGVsc2UgaWYgKCh1cGJfZmxvYXRfaGFuZGxl
cmZ1bmMqKWYgPT0gdXBiX3NoaW1fc2V0ZmxvYXQpIHsKLSAgICAqdHlwZSA9IFVQQl9UWVBFX0ZM
T0FUOwotICB9IGVsc2UgaWYgKCh1cGJfYm9vbF9oYW5kbGVyZnVuYyopZiA9PSB1cGJfc2hpbV9z
ZXRib29sKSB7Ci0gICAgKnR5cGUgPSBVUEJfVFlQRV9CT09MOwotICB9IGVsc2UgewotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIChjb25zdCB1cGJfc2hpbV9kYXRhKil1cGJfaGFu
ZGxlcnNfZ2V0aGFuZGxlcmRhdGEoaCwgcyk7Ci19Ci0KLQotI2luY2x1ZGUgPHN0cmluZy5oPgot
Ci1zdGF0aWMgdm9pZCB1cGJfc3ltdGFiX2ZyZWUodXBiX3JlZmNvdW50ZWQgKnIpIHsKLSAgdXBi
X3N5bXRhYiAqcyA9ICh1cGJfc3ltdGFiKilyOwotICB1cGJfc3RydGFibGVfaXRlciBpOwotICB1
cGJfc3RydGFibGVfYmVnaW4oJmksICZzLT5zeW10YWIpOwotICBmb3IgKDsgIXVwYl9zdHJ0YWJs
ZV9kb25lKCZpKTsgdXBiX3N0cnRhYmxlX25leHQoJmkpKSB7Ci0gICAgY29uc3QgdXBiX2RlZiAq
ZGVmID0gdXBiX3ZhbHVlX2dldHB0cih1cGJfc3RydGFibGVfaXRlcl92YWx1ZSgmaSkpOwotICAg
IHVwYl9kZWZfdW5yZWYoZGVmLCBzKTsKLSAgfQotICB1cGJfc3RydGFibGVfdW5pbml0KCZzLT5z
eW10YWIpOwotICB1cGJfZ2ZyZWUocyk7Ci19Ci0KLXVwYl9zeW10YWIgKnVwYl9zeW10YWJfbmV3
KGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXBiX3JlZmNvdW50
ZWRfdnRibCB2dGJsID0ge05VTEwsICZ1cGJfc3ltdGFiX2ZyZWV9OwotCi0gIHVwYl9zeW10YWIg
KnMgPSB1cGJfZ21hbGxvYyhzaXplb2YoKnMpKTsKLSAgaWYgKCFzKSB7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0KLQotICB1cGJfcmVmY291bnRlZF9pbml0KHVwYl9zeW10YWJfdXBjYXN0X211dGFi
bGUocyksICZ2dGJsLCBvd25lcik7Ci0gIHVwYl9zdHJ0YWJsZV9pbml0KCZzLT5zeW10YWIsIFVQ
Ql9DVFlQRV9QVFIpOwotICByZXR1cm4gczsKLX0KLQotdm9pZCB1cGJfc3ltdGFiX2ZyZWV6ZSh1
cGJfc3ltdGFiICpzKSB7Ci0gIHVwYl9yZWZjb3VudGVkICpyOwotICBib29sIG9rOwotCi0gIGFz
c2VydCghdXBiX3N5bXRhYl9pc2Zyb3plbihzKSk7Ci0gIHIgPSB1cGJfc3ltdGFiX3VwY2FzdF9t
dXRhYmxlKHMpOwotICAvKiBUaGUgc3ltdGFiIGRvZXMgbm90IHRha2UgcmVmMidzIChzZWUgcmVm
Y291bnRlZC5oKSBvbiB0aGUgZGVmcywgYmVjYXVzZQotICAgKiBkZWZzIGNhbm5vdCByZWZlciBi
YWNrIHRvIHRoZSB0YWJsZSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjcmVhdGUgY3ljbGVzLiAgU28K
LSAgICogMCB3aWxsIHN1ZmZpY2UgZm9yIG1heGRlcHRoIGhlcmUuICovCi0gIG9rID0gdXBiX3Jl
ZmNvdW50ZWRfZnJlZXplKCZyLCAxLCBOVUxMLCAwKTsKLSAgVVBCX0FTU0VSVF9WQVIob2ssIG9r
KTsKLX0KLQotY29uc3QgdXBiX2RlZiAqdXBiX3N5bXRhYl9sb29rdXAoY29uc3QgdXBiX3N5bXRh
YiAqcywgY29uc3QgY2hhciAqc3ltKSB7Ci0gIHVwYl92YWx1ZSB2OwotICB1cGJfZGVmICpyZXQg
PSB1cGJfc3RydGFibGVfbG9va3VwKCZzLT5zeW10YWIsIHN5bSwgJnYpID8KLSAgICAgIHVwYl92
YWx1ZV9nZXRwdHIodikgOiBOVUxMOwotICByZXR1cm4gcmV0OwotfQotCi1jb25zdCB1cGJfbXNn
ZGVmICp1cGJfc3ltdGFiX2xvb2t1cG1zZyhjb25zdCB1cGJfc3ltdGFiICpzLCBjb25zdCBjaGFy
ICpzeW0pIHsKLSAgdXBiX3ZhbHVlIHY7Ci0gIHVwYl9kZWYgKmRlZiA9IHVwYl9zdHJ0YWJsZV9s
b29rdXAoJnMtPnN5bXRhYiwgc3ltLCAmdikgPwotICAgICAgdXBiX3ZhbHVlX2dldHB0cih2KSA6
IE5VTEw7Ci0gIHJldHVybiBkZWYgPyB1cGJfZHluY2FzdF9tc2dkZWYoZGVmKSA6IE5VTEw7Ci19
Ci0KLWNvbnN0IHVwYl9lbnVtZGVmICp1cGJfc3ltdGFiX2xvb2t1cGVudW0oY29uc3QgdXBiX3N5
bXRhYiAqcywgY29uc3QgY2hhciAqc3ltKSB7Ci0gIHVwYl92YWx1ZSB2OwotICB1cGJfZGVmICpk
ZWYgPSB1cGJfc3RydGFibGVfbG9va3VwKCZzLT5zeW10YWIsIHN5bSwgJnYpID8KLSAgICAgIHVw
Yl92YWx1ZV9nZXRwdHIodikgOiBOVUxMOwotICByZXR1cm4gZGVmID8gdXBiX2R5bmNhc3RfZW51
bWRlZihkZWYpIDogTlVMTDsKLX0KLQotLyogR2l2ZW4gYSBzeW1ib2wgYW5kIHRoZSBiYXNlIHN5
bWJvbCBpbnNpZGUgd2hpY2ggaXQgaXMgZGVmaW5lZCwgZmluZCB0aGUKLSAqIHN5bWJvbCdzIGRl
ZmluaXRpb24gaW4gdC4gKi8KLXN0YXRpYyB1cGJfZGVmICp1cGJfcmVzb2x2ZW5hbWUoY29uc3Qg
dXBiX3N0cnRhYmxlICp0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpiYXNlLCBjb25zdCBjaGFyICpzeW0pIHsKLSAgaWYoc3RybGVuKHN5bSkgPT0gMCkgcmV0
dXJuIE5VTEw7Ci0gIGlmKHN5bVswXSA9PSAnLicpIHsKLSAgICAvKiBTeW1ib2xzIHN0YXJ0aW5n
IHdpdGggJy4nIGFyZSBhYnNvbHV0ZSwgc28gd2UgZG8gYSBzaW5nbGUgbG9va3VwLgotICAgICAq
IFNsaWNlIHRvIG9taXQgdGhlIGxlYWRpbmcgJy4nICovCi0gICAgdXBiX3ZhbHVlIHY7Ci0gICAg
cmV0dXJuIHVwYl9zdHJ0YWJsZV9sb29rdXAodCwgc3ltICsgMSwgJnYpID8gdXBiX3ZhbHVlX2dl
dHB0cih2KSA6IE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgLyogUmVtb3ZlIGNvbXBvbmVudHMgZnJv
bSBiYXNlIHVudGlsIHdlIGZpbmQgYW4gZW50cnkgb3IgcnVuIG91dC4KLSAgICAgKiBUT0RPOiBU
aGlzIGJyYW5jaCBpcyB0b3RhbGx5IGJyb2tlbiwgYnV0IGN1cnJlbnRseSBub3QgdXNlZC4gKi8K
LSAgICAodm9pZCliYXNlOwotICAgIGFzc2VydChmYWxzZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLX0KLQotY29uc3QgdXBiX2RlZiAqdXBiX3N5bXRhYl9yZXNvbHZlKGNvbnN0IHVwYl9zeW10
YWIgKnMsIGNvbnN0IGNoYXIgKmJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqc3ltKSB7Ci0gIHVwYl9kZWYgKnJldCA9IHVwYl9yZXNvbHZlbmFtZSgm
cy0+c3ltdGFiLCBiYXNlLCBzeW0pOwotICByZXR1cm4gcmV0OwotfQotCi0vKiBTdGFydHMgYSBk
ZXB0aC1maXJzdCB0cmF2ZXJzYWwgYXQgImRlZiIsIHJlY3Vyc2luZyBpbnRvIGFueSBzdWJkZWZz
Ci0gKiAoaWUuIHN1Ym1lc3NhZ2UgdHlwZXMpLiAgQWRkcyBkdXBsaWNhdGVzIG9mIGV4aXN0aW5n
IGRlZnMgdG8gYWRkdGFiCi0gKiB3aGVyZXZlciBuZWNlc3NhcnksIHNvIHRoYXQgdGhlIHJlc3Vs
dGluZyBzeW10YWIgd2lsbCBiZSBjb25zaXN0ZW50IG9uY2UKLSAqIGFkZHRhYiBpcyBhZGRlZC4K
LSAqCi0gKiBNb3JlIHNwZWNpZmljYWxseSwgaWYgYW55IGRlZiBEIGlzIGZvdW5kIGluIHRoZSBE
RlMgdGhhdDoKLSAqCi0gKiAgIDEuIGNhbiByZWFjaCBhIGRlZiB0aGF0IGlzIGJlaW5nIHJlcGxh
Y2VkIGJ5IHNvbWV0aGluZyBpbiBhZGR0YWIsIEFORAotICoKLSAqICAgMi4gaXMgbm90IGl0c2Vs
ZiBiZWluZyByZXBsYWNlZCBhbHJlYWR5IChpZS4gdGhpcyBuYW1lIGRvZXNuJ3QgYWxyZWFkeQot
ICogICAgICBleGlzdCBpbiBhZGR0YWIpCi0gKgotICogLi4udGhlbiBhIGR1cGxpY2F0ZSAobmV3
IGNvcHkpIG9mIEQgd2lsbCBiZSBhZGRlZCB0byBhZGR0YWIuCi0gKgotICogUmV0dXJucyB0cnVl
IGlmIHRoaXMgaGFwcGVuZWQgZm9yIGFueSBkZWYgcmVhY2hhYmxlIGZyb20gImRlZi4iCi0gKgot
ICogSXQgaXMgc2xpZ2h0bHkgdHJpY2t5IHRvIGRvIHRoaXMgY29ycmVjdGx5IGluIHRoZSBwcmVz
ZW5jZSBvZiBjeWNsZXMuICBJZiB3ZQotICogZGV0ZWN0IHRoYXQgb3VyIERGUyBoYXMgaGl0IGEg
Y3ljbGUsIHdlIG1pZ2h0IG5vdCB5ZXQga25vdyBpZiBhbnkgU0NDcyBvbgotICogb3VyIHN0YWNr
IGNhbiByZWFjaCBhIGRlZiBpbiBhZGR0YWIgb3Igbm90LiAgT25jZSB3ZSBmaWd1cmUgdGhpcyBv
dXQsIHRoYXQKLSAqIGFuc3dlciBuZWVkcyB0byBhcHBseSB0byAqYWxsKiBkZWZzIGluIHRoZXNl
IFNDQ3MsIGV2ZW4gaWYgd2UgdmlzaXRlZCB0aGVtCi0gKiBhbHJlYWR5LiAgU28gYSBzdHJhaWdo
dCB1cCBvbmUtcGFzcyBjeWNsZS1kZXRlY3RpbmcgREZTIHdvbid0IHdvcmsuCi0gKgotICogVG8g
d29yayBhcm91bmQgdGhpcyBwcm9ibGVtLCB3ZSB0cmF2ZXJzZSBlYWNoIFNDQyAod2hpY2ggd2Ug
YWxyZWFkeQotICogY29tcHV0ZWQsIHNpbmNlIHRoZXNlIGRlZnMgYXJlIGZyb3plbikgYXMgYSBz
aW5nbGUgbm9kZS4gIFdlIGZpcnN0IGNvbXB1dGUKLSAqIHdoZXRoZXIgdGhlIFNDQyBhcyBhIHdo
b2xlIGNhbiByZWFjaCBhbnkgZGVmIGluIGFkZHRhYiwgdGhlbiB3ZSBkdXAgKG9yIG5vdCkKLSAq
IHRoZSBlbnRpcmUgU0NDLiAgVGhpcyByZXF1aXJlcyBicmVha2luZyB0aGUgZW5jYXBzdWxhdGlv
biBvZiB1cGJfcmVmY291bnRlZCwKLSAqIHNpbmNlIHRoYXQgaXMgd2hlcmUgd2UgZ2V0IHRoZSBk
YXRhIGFib3V0IHdoYXQgU0NDIHdlIGFyZSBpbi4gKi8KLXN0YXRpYyBib29sIHVwYl9yZXNvbHZl
X2Rmcyhjb25zdCB1cGJfZGVmICpkZWYsIHVwYl9zdHJ0YWJsZSAqYWRkdGFiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm5ld19vd25lciwgdXBiX2ludHRhYmxlICpz
ZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpIHsKLSAgdXBi
X3ZhbHVlIHY7Ci0gIGJvb2wgbmVlZF9kdXA7Ci0gIGNvbnN0IHVwYl9kZWYgKmJhc2U7Ci0gIGNv
bnN0IHZvaWQqIG1lbW9pemVfa2V5OwotCi0gIC8qIE1lbW9pemUgcmVzdWx0cyBvZiB0aGlzIGZ1
bmN0aW9uIGZvciBlZmZpY2llbmN5IChzaW5jZSB3ZSdyZSB0cmF2ZXJzaW5nIGEKLSAgICogREFH
IHRoaXMgaXMgbm90IG5lZWRlZCB0byBsaW1pdCB0aGUgZGVwdGggb2YgdGhlIHNlYXJjaCkuCi0g
ICAqCi0gICAqIFdlIG1lbW9pemUgYnkgU0NDIGluc3RlYWQgb2YgYnkgaW5kaXZpZHVhbCBkZWYu
ICovCi0gIG1lbW9pemVfa2V5ID0gZGVmLT5iYXNlLmdyb3VwOwotCi0gIGlmICh1cGJfaW50dGFi
bGVfbG9va3VwcHRyKHNlZW4sIG1lbW9pemVfa2V5LCAmdikpCi0gICAgcmV0dXJuIHVwYl92YWx1
ZV9nZXRib29sKHYpOwotCi0gIC8qIFZpc2l0IHN1Ym1lc3NhZ2VzIGZvciBhbGwgbWVzc2FnZXMg
aW4gdGhlIFNDQy4gKi8KLSAgbmVlZF9kdXAgPSBmYWxzZTsKLSAgYmFzZSA9IGRlZjsKLSAgZG8g
ewotICAgIHVwYl92YWx1ZSB2OwotICAgIGNvbnN0IHVwYl9tc2dkZWYgKm07Ci0KLSAgICBhc3Nl
cnQodXBiX2RlZl9pc2Zyb3plbihkZWYpKTsKLSAgICBpZiAoZGVmLT50eXBlID09IFVQQl9ERUZf
RklFTEQpIGNvbnRpbnVlOwotICAgIGlmICh1cGJfc3RydGFibGVfbG9va3VwKGFkZHRhYiwgdXBi
X2RlZl9mdWxsbmFtZShkZWYpLCAmdikpIHsKLSAgICAgIG5lZWRfZHVwID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvKiBGb3IgbWVzc2FnZXMsIGNvbnRpbnVlIHRoZSByZWN1cnNpb24gYnkgdmlzaXRp
bmcgYWxsIHN1YmRlZnMsIGJ1dCBvbmx5Ci0gICAgICogb25lcyBpbiBkaWZmZXJlbnQgU0NDcy4g
Ki8KLSAgICBtID0gdXBiX2R5bmNhc3RfbXNnZGVmKGRlZik7Ci0gICAgaWYgKG0pIHsKLSAgICAg
IHVwYl9tc2dfZmllbGRfaXRlciBpOwotICAgICAgZm9yKHVwYl9tc2dfZmllbGRfYmVnaW4oJmks
IG0pOwotICAgICAgICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJmkpOwotICAgICAgICAgIHVwYl9t
c2dfZmllbGRfbmV4dCgmaSkpIHsKLSAgICAgICAgdXBiX2ZpZWxkZGVmICpmID0gdXBiX21zZ19p
dGVyX2ZpZWxkKCZpKTsKLSAgICAgICAgY29uc3QgdXBiX2RlZiAqc3ViZGVmOwotCi0gICAgICAg
IGlmICghdXBiX2ZpZWxkZGVmX2hhc3N1YmRlZihmKSkgY29udGludWU7Ci0gICAgICAgIHN1YmRl
ZiA9IHVwYl9maWVsZGRlZl9zdWJkZWYoZik7Ci0KLSAgICAgICAgLyogU2tpcCBzdWJkZWZzIGlu
IHRoaXMgU0NDLiAqLwotICAgICAgICBpZiAoZGVmLT5iYXNlLmdyb3VwID09IHN1YmRlZi0+YmFz
ZS5ncm91cCkgY29udGludWU7Ci0KLSAgICAgICAgLyogfD0gdG8gYXZvaWQgc2hvcnQtY2lyY3Vp
dDsgd2UgbmVlZCBpdHMgc2lkZS1lZmZlY3RzLiAqLwotICAgICAgICBuZWVkX2R1cCB8PSB1cGJf
cmVzb2x2ZV9kZnMoc3ViZGVmLCBhZGR0YWIsIG5ld19vd25lciwgc2Vlbiwgcyk7Ci0gICAgICAg
IGlmICghdXBiX29rKHMpKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxl
ICgoZGVmID0gKHVwYl9kZWYqKWRlZi0+YmFzZS5uZXh0KSAhPSBiYXNlKTsKLQotICBpZiAobmVl
ZF9kdXApIHsKLSAgICAvKiBEdXAgYWxsIGRlZnMgaW4gdGhpcyBTQ0MgdGhhdCBkb24ndCBhbHJl
YWR5IGhhdmUgZW50cmllcyBpbiBhZGR0YWIuICovCi0gICAgZGVmID0gYmFzZTsKLSAgICBkbyB7
Ci0gICAgICBjb25zdCBjaGFyICpuYW1lOwotCi0gICAgICBpZiAoZGVmLT50eXBlID09IFVQQl9E
RUZfRklFTEQpIGNvbnRpbnVlOwotICAgICAgbmFtZSA9IHVwYl9kZWZfZnVsbG5hbWUoZGVmKTsK
LSAgICAgIGlmICghdXBiX3N0cnRhYmxlX2xvb2t1cChhZGR0YWIsIG5hbWUsIE5VTEwpKSB7Ci0g
ICAgICAgIHVwYl9kZWYgKm5ld2RlZiA9IHVwYl9kZWZfZHVwKGRlZiwgbmV3X293bmVyKTsKLSAg
ICAgICAgaWYgKCFuZXdkZWYpIGdvdG8gb29tOwotICAgICAgICBuZXdkZWYtPmNhbWVfZnJvbV91
c2VyID0gZmFsc2U7Ci0gICAgICAgIGlmICghdXBiX3N0cnRhYmxlX2luc2VydChhZGR0YWIsIG5h
bWUsIHVwYl92YWx1ZV9wdHIobmV3ZGVmKSkpCi0gICAgICAgICAgZ290byBvb207Ci0gICAgICB9
Ci0gICAgfSB3aGlsZSAoKGRlZiA9ICh1cGJfZGVmKilkZWYtPmJhc2UubmV4dCkgIT0gYmFzZSk7
Ci0gIH0KLQotICB1cGJfaW50dGFibGVfaW5zZXJ0cHRyKHNlZW4sIG1lbW9pemVfa2V5LCB1cGJf
dmFsdWVfYm9vbChuZWVkX2R1cCkpOwotICByZXR1cm4gbmVlZF9kdXA7Ci0KLW9vbToKLSAgdXBi
X3N0YXR1c19zZXRlcnJtc2cocywgIm91dCBvZiBtZW1vcnkiKTsKLSAgcmV0dXJuIGZhbHNlOwot
fQotCi0vKiBUT0RPKGhhYmVybWFuKTogd2UgbmVlZCBhIGxvdCBtb3JlIHRlc3Rpbmcgb2YgZXJy
b3IgY29uZGl0aW9ucy4KLSAqIFRoZSBjYW1lX2Zyb21fdXNlciBzdHVmZiBpbiBwYXJ0aWN1bGFy
IGlzIG5vdCB0ZXN0ZWQuICovCi1zdGF0aWMgYm9vbCBzeW10YWJfYWRkKHVwYl9zeW10YWIgKnMs
IHVwYl9kZWYgKmNvbnN0KmRlZnMsIHNpemVfdCBuLAotICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpyZWZfZG9ub3IsIHVwYl9yZWZjb3VudGVkICpmcmVlemVfYWxzbywKLSAgICAgICAgICAg
ICAgICAgICAgICAgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0gIHNpemVfdCBpOwotICBzaXplX3Qg
YWRkX247Ci0gIHNpemVfdCBmcmVlemVfbjsKLSAgdXBiX3N0cnRhYmxlX2l0ZXIgaXRlcjsKLSAg
dXBiX3JlZmNvdW50ZWQgKiphZGRfb2JqcyA9IE5VTEw7Ci0gIHVwYl9kZWYgKiphZGRfZGVmcyA9
IE5VTEw7Ci0gIHNpemVfdCBhZGRfb2Jqc19zaXplOwotICB1cGJfc3RydGFibGUgYWRkdGFiOwot
ICB1cGJfaW50dGFibGUgc2VlbjsKLQotICBpZiAobiA9PSAwICYmICFmcmVlemVfYWxzbykgewot
ICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgYXNzZXJ0KCF1cGJfc3ltdGFiX2lzZnJvemVuKHMp
KTsKLSAgaWYgKCF1cGJfc3RydGFibGVfaW5pdCgmYWRkdGFiLCBVUEJfQ1RZUEVfUFRSKSkgewot
ICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHN0YXR1cywgIm91dCBvZiBtZW1vcnkiKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvKiBBZGQgbmV3IGRlZnMgdG8gb3VyICJhZGQiIHNldC4g
Ki8KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIHVwYl9kZWYgKmRlZiA9IGRlZnNb
aV07Ci0gICAgY29uc3QgY2hhciAqZnVsbG5hbWU7Ci0gICAgdXBiX2ZpZWxkZGVmICpmOwotCi0g
ICAgaWYgKHVwYl9kZWZfaXNmcm96ZW4oZGVmKSkgewotICAgICAgdXBiX3N0YXR1c19zZXRlcnJt
c2coc3RhdHVzLCAiYWRkZWQgZGVmcyBtdXN0IGJlIG11dGFibGUiKTsKLSAgICAgIGdvdG8gZXJy
OwotICAgIH0KLSAgICBhc3NlcnQoIXVwYl9kZWZfaXNmcm96ZW4oZGVmKSk7Ci0gICAgZnVsbG5h
bWUgPSB1cGJfZGVmX2Z1bGxuYW1lKGRlZik7Ci0gICAgaWYgKCFmdWxsbmFtZSkgewotICAgICAg
dXBiX3N0YXR1c19zZXRlcnJtc2coCi0gICAgICAgICAgc3RhdHVzLCAiQW5vbnltb3VzIGRlZnMg
Y2Fubm90IGJlIGFkZGVkIHRvIGEgc3ltdGFiIik7Ci0gICAgICBnb3RvIGVycjsKLSAgICB9Ci0K
LSAgICBmID0gdXBiX2R5bmNhc3RfZmllbGRkZWZfbXV0YWJsZShkZWYpOwotCi0gICAgaWYgKGYp
IHsKLSAgICAgIGlmICghdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlbmFtZShmKSkgewotICAg
ICAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJTdGFuZGFsb25lIGZpZWxkZGVmcyBtdXN0IGhhdmUgYSBjb250YWluaW5nIHR5cGUg
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGV4dGVuZGVlKSBuYW1lIHNldCIpOwot
ICAgICAgICBnb3RvIGVycjsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKHVwYl9z
dHJ0YWJsZV9sb29rdXAoJmFkZHRhYiwgZnVsbG5hbWUsIE5VTEwpKSB7Ci0gICAgICAgIHVwYl9z
dGF0dXNfc2V0ZXJyZihzdGF0dXMsICJDb25mbGljdGluZyBkZWZzIG5hbWVkICclcyciLCBmdWxs
bmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgICAgfQotICAgICAgLyogV2UgbmVlZCB0aGlz
IHRvIGJhY2sgb3V0IHByb3Blcmx5LCBiZWNhdXNlIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSB3ZQot
ICAgICAgICogbmVlZCB0byBkb25hdGUgdGhlIHJlZiBiYWNrIHRvIHRoZSBjYWxsZXIuICovCi0g
ICAgICBkZWYtPmNhbWVfZnJvbV91c2VyID0gdHJ1ZTsKLSAgICAgIHVwYl9kZWZfZG9uYXRlcmVm
KGRlZiwgcmVmX2Rvbm9yLCBzKTsKLSAgICAgIGlmICghdXBiX3N0cnRhYmxlX2luc2VydCgmYWRk
dGFiLCBmdWxsbmFtZSwgdXBiX3ZhbHVlX3B0cihkZWYpKSkKLSAgICAgICAgZ290byBvb21fZXJy
OwotICAgIH0KLSAgfQotCi0gIC8qIEFkZCBzdGFuZGFsb25lIGZpZWxkZGVmcyAoaWUuIGV4dGVu
c2lvbnMpIHRvIHRoZSBhcHByb3ByaWF0ZSBtZXNzYWdlcy4KLSAgICogSWYgdGhlIGFwcHJvcHJp
YXRlIG1lc3NhZ2Ugb25seSBleGlzdHMgaW4gdGhlIGV4aXN0aW5nIHN5bXRhYiwgZHVwbGljYXRl
Ci0gICAqIGl0IHNvIHdlIGhhdmUgYSBtdXRhYmxlIGNvcHkgd2UgY2FuIGFkZCB0aGUgZmllbGRz
IHRvLiAqLwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgdXBiX2RlZiAqZGVmID0g
ZGVmc1tpXTsKLSAgICB1cGJfZmllbGRkZWYgKmYgPSB1cGJfZHluY2FzdF9maWVsZGRlZl9tdXRh
YmxlKGRlZik7Ci0gICAgY29uc3QgY2hhciAqbXNnbmFtZTsKLSAgICB1cGJfdmFsdWUgdjsKLSAg
ICB1cGJfbXNnZGVmICptOwotCi0gICAgaWYgKCFmKSBjb250aW51ZTsKLSAgICBtc2duYW1lID0g
dXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlbmFtZShmKTsKLSAgICAvKiBXZSB2YWxpZGF0ZWQg
dGhpcyBlYXJsaWVyIGluIHRoaXMgZnVuY3Rpb24uICovCi0gICAgYXNzZXJ0KG1zZ25hbWUpOwot
Ci0gICAgLyogSWYgdGhlIGV4dGVuZGVlIG5hbWUgaXMgYWJzb2x1dGVseSBxdWFsaWZpZWQsIG1v
dmUgcGFzdCB0aGUgaW5pdGlhbCAiLiIuCi0gICAgICogVE9ETyhoYWJlcm1hbik6IGl0IGlzIG5v
dCBvYnZpb3VzIHdoYXQgaXQgd291bGQgbWVhbiBpZiB0aGlzIHdhcyBub3QKLSAgICAgKiBhYnNv
bHV0ZWx5IHF1YWxpZmllZC4gKi8KLSAgICBpZiAobXNnbmFtZVswXSA9PSAnLicpIHsKLSAgICAg
IG1zZ25hbWUrKzsKLSAgICB9Ci0KLSAgICBpZiAodXBiX3N0cnRhYmxlX2xvb2t1cCgmYWRkdGFi
LCBtc2duYW1lLCAmdikpIHsKLSAgICAgIC8qIEV4dGVuZGVlIGlzIGluIHRoZSBzZXQgb2YgZGVm
cyB0aGUgdXNlciBhc2tlZCB1cyB0byBhZGQuICovCi0gICAgICBtID0gdXBiX3ZhbHVlX2dldHB0
cih2KTsKLSAgICB9IGVsc2UgewotICAgICAgLyogTmVlZCB0byBmaW5kIGFuZCBkdXAgdGhlIGV4
dGVuZGVlIGZyb20gdGhlIGV4aXN0aW5nIHN5bXRhYi4gKi8KLSAgICAgIGNvbnN0IHVwYl9tc2dk
ZWYgKmZyb3plbl9tID0gdXBiX3N5bXRhYl9sb29rdXBtc2cocywgbXNnbmFtZSk7Ci0gICAgICBp
ZiAoIWZyb3plbl9tKSB7Ci0gICAgICAgIHVwYl9zdGF0dXNfc2V0ZXJyZihzdGF0dXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAiVHJpZWQgdG8gZXh0ZW5kIG1lc3NhZ2UgJXMgdGhhdCBk
b2VzIG5vdCBleGlzdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gdGhpcyBTeW1i
b2xUYWJsZS4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnbmFtZSk7Ci0gICAgICAg
IGdvdG8gZXJyOwotICAgICAgfQotICAgICAgbSA9IHVwYl9tc2dkZWZfZHVwKGZyb3plbl9tLCBz
KTsKLSAgICAgIGlmICghbSkgZ290byBvb21fZXJyOwotICAgICAgaWYgKCF1cGJfc3RydGFibGVf
aW5zZXJ0KCZhZGR0YWIsIG1zZ25hbWUsIHVwYl92YWx1ZV9wdHIobSkpKSB7Ci0gICAgICAgIHVw
Yl9tc2dkZWZfdW5yZWYobSwgcyk7Ci0gICAgICAgIGdvdG8gb29tX2VycjsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoIXVwYl9tc2dkZWZfYWRkZmllbGQobSwgZiwgcmVmX2Rvbm9yLCBzdGF0
dXMpKSB7Ci0gICAgICBnb3RvIGVycjsKLSAgICB9Ci0gIH0KLQotICAvKiBBZGQgZHVwcyBvZiBh
bnkgZXhpc3RpbmcgZGVmIHRoYXQgY2FuIHJlYWNoIGEgZGVmIHdpdGggdGhlIHNhbWUgbmFtZSBh
cwotICAgKiBhbnl0aGluZyBpbiBvdXIgImFkZCIgc2V0LiAqLwotICBpZiAoIXVwYl9pbnR0YWJs
ZV9pbml0KCZzZWVuLCBVUEJfQ1RZUEVfQk9PTCkpIGdvdG8gb29tX2VycjsKLSAgdXBiX3N0cnRh
YmxlX2JlZ2luKCZpdGVyLCAmcy0+c3ltdGFiKTsKLSAgZm9yICg7ICF1cGJfc3RydGFibGVfZG9u
ZSgmaXRlcik7IHVwYl9zdHJ0YWJsZV9uZXh0KCZpdGVyKSkgewotICAgIHVwYl9kZWYgKmRlZiA9
IHVwYl92YWx1ZV9nZXRwdHIodXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoJml0ZXIpKTsKLSAgICB1
cGJfcmVzb2x2ZV9kZnMoZGVmLCAmYWRkdGFiLCBzLCAmc2Vlbiwgc3RhdHVzKTsKLSAgICBpZiAo
IXVwYl9vayhzdGF0dXMpKSBnb3RvIGVycjsKLSAgfQotICB1cGJfaW50dGFibGVfdW5pbml0KCZz
ZWVuKTsKLQotICAvKiBOb3cgdXNpbmcgdGhlIHRhYmxlLCByZXNvbHZlIHN5bWJvbGljIHJlZmVy
ZW5jZXMgZm9yIHN1YmRlZnMuICovCi0gIHVwYl9zdHJ0YWJsZV9iZWdpbigmaXRlciwgJmFkZHRh
Yik7Ci0gIGZvciAoOyAhdXBiX3N0cnRhYmxlX2RvbmUoJml0ZXIpOyB1cGJfc3RydGFibGVfbmV4
dCgmaXRlcikpIHsKLSAgICBjb25zdCBjaGFyICpiYXNlOwotICAgIHVwYl9kZWYgKmRlZiA9IHVw
Yl92YWx1ZV9nZXRwdHIodXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoJml0ZXIpKTsKLSAgICB1cGJf
bXNnZGVmICptID0gdXBiX2R5bmNhc3RfbXNnZGVmX211dGFibGUoZGVmKTsKLSAgICB1cGJfbXNn
X2ZpZWxkX2l0ZXIgajsKLQotICAgIGlmICghbSkgY29udGludWU7Ci0gICAgLyogVHlwZSBuYW1l
cyBhcmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8gdGhlIG1lc3NhZ2UgaW4gd2hpY2ggdGhleSBhcHBl
YXIuICovCi0gICAgYmFzZSA9IHVwYl9tc2dkZWZfZnVsbG5hbWUobSk7Ci0KLSAgICBmb3IodXBi
X21zZ19maWVsZF9iZWdpbigmaiwgbSk7Ci0gICAgICAgICF1cGJfbXNnX2ZpZWxkX2RvbmUoJmop
OwotICAgICAgICB1cGJfbXNnX2ZpZWxkX25leHQoJmopKSB7Ci0gICAgICB1cGJfZmllbGRkZWYg
KmYgPSB1cGJfbXNnX2l0ZXJfZmllbGQoJmopOwotICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHVw
Yl9maWVsZGRlZl9zdWJkZWZuYW1lKGYpOwotICAgICAgaWYgKG5hbWUgJiYgIXVwYl9maWVsZGRl
Zl9zdWJkZWYoZikpIHsKLSAgICAgICAgLyogVHJ5IHRoZSBsb29rdXAgaW4gdGhlIGN1cnJlbnQg
c2V0IG9mIHRvLWJlLWFkZGVkIGRlZnMgZmlyc3QuIElmIG5vdAotICAgICAgICAgKiB0aGVyZSwg
dHJ5IGV4aXN0aW5nIGRlZnMuICovCi0gICAgICAgIHVwYl9kZWYgKnN1YmRlZiA9IHVwYl9yZXNv
bHZlbmFtZSgmYWRkdGFiLCBiYXNlLCBuYW1lKTsKLSAgICAgICAgaWYgKHN1YmRlZiA9PSBOVUxM
KSB7Ci0gICAgICAgICAgc3ViZGVmID0gdXBiX3Jlc29sdmVuYW1lKCZzLT5zeW10YWIsIGJhc2Us
IG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdWJkZWYgPT0gTlVMTCkgewotICAgICAg
ICAgIHVwYl9zdGF0dXNfc2V0ZXJyZigKLSAgICAgICAgICAgICAgc3RhdHVzLCAiY291bGRuJ3Qg
cmVzb2x2ZSBuYW1lICclcycgaW4gbWVzc2FnZSAnJXMnIiwgbmFtZSwgYmFzZSk7Ci0gICAgICAg
ICAgZ290byBlcnI7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXVwYl9maWVsZGRlZl9zZXRzdWJkZWYo
Ziwgc3ViZGVmLCBzdGF0dXMpKSB7Ci0gICAgICAgICAgZ290byBlcnI7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBXZSBuZWVkIGFuIGFycmF5IG9mIHRoZSBkZWZzIGlu
IGFkZHRhYiwgZm9yIHBhc3NpbmcgdG8KLSAgICogdXBiX3JlZmNvdW50ZWRfZnJlZXplKCkuICov
Ci0gIGFkZF9vYmpzX3NpemUgPSB1cGJfc3RydGFibGVfY291bnQoJmFkZHRhYik7Ci0gIGlmIChm
cmVlemVfYWxzbykgewotICAgIGFkZF9vYmpzX3NpemUrKzsKLSAgfQotCi0gIGFkZF9kZWZzID0g
dXBiX2dtYWxsb2Moc2l6ZW9mKHZvaWQqKSAqIGFkZF9vYmpzX3NpemUpOwotICBpZiAoYWRkX2Rl
ZnMgPT0gTlVMTCkgZ290byBvb21fZXJyOwotICB1cGJfc3RydGFibGVfYmVnaW4oJml0ZXIsICZh
ZGR0YWIpOwotICBmb3IgKGFkZF9uID0gMDsgIXVwYl9zdHJ0YWJsZV9kb25lKCZpdGVyKTsgdXBi
X3N0cnRhYmxlX25leHQoJml0ZXIpKSB7Ci0gICAgYWRkX2RlZnNbYWRkX24rK10gPSB1cGJfdmFs
dWVfZ2V0cHRyKHVwYl9zdHJ0YWJsZV9pdGVyX3ZhbHVlKCZpdGVyKSk7Ci0gIH0KLQotICAvKiBW
YWxpZGF0ZSBkZWZzLiAqLwotICBpZiAoIV91cGJfZGVmX3ZhbGlkYXRlKGFkZF9kZWZzLCBhZGRf
biwgc3RhdHVzKSkgewotICAgIGdvdG8gZXJyOwotICB9Ci0KLSAgLyogQ2hlYXQgYSBsaXR0bGUg
YW5kIGdpdmUgdGhlIGFycmF5IGEgbmV3IHR5cGUuCi0gICAqIFRoaXMgaXMgcHJvYmFibHkgdW5k
ZWZpbmVkIGJlaGF2aW9yLCBidXQgdGhpcyBjb2RlIHdpbGwgYmUgZGVsZXRlZCBzb29uLiAqLwot
ICBhZGRfb2JqcyA9ICh1cGJfcmVmY291bnRlZCoqKWFkZF9kZWZzOwotCi0gIGZyZWV6ZV9uID0g
YWRkX247Ci0gIGlmIChmcmVlemVfYWxzbykgewotICAgIGFkZF9vYmpzW2ZyZWV6ZV9uKytdID0g
ZnJlZXplX2Fsc287Ci0gIH0KLQotICBpZiAoIXVwYl9yZWZjb3VudGVkX2ZyZWV6ZShhZGRfb2Jq
cywgZnJlZXplX24sIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBCX01B
WF9NRVNTQUdFX0RFUFRIICogMikpIHsKLSAgICBnb3RvIGVycjsKLSAgfQotCi0gIC8qIFRoaXMg
bXVzdCBiZSBkZWxheWVkIHVudGlsIGFsbCBlcnJvcnMgaGF2ZSBiZWVuIGRldGVjdGVkLCBzaW5j
ZSBlcnJvcgotICAgKiByZWNvdmVyeSBjb2RlIHVzZXMgdGhpcyB0YWJsZSB0byBjbGVhbnVwIGRl
ZnMuICovCi0gIHVwYl9zdHJ0YWJsZV91bmluaXQoJmFkZHRhYik7Ci0KLSAgLyogVE9ETyhoYWJl
cm1hbikgd2UgZG9uJ3QgcHJvcGVybHkgaGFuZGxlIGVycm9ycyBhZnRlciB0aGlzIHBvaW50IChs
aWtlCi0gICAqIE9PTSBpbiB1cGJfc3RydGFibGVfaW5zZXJ0KCkgYmVsb3cpLiAqLwotICBmb3Ig
KGkgPSAwOyBpIDwgYWRkX247IGkrKykgewotICAgIHVwYl9kZWYgKmRlZiA9ICh1cGJfZGVmKilh
ZGRfb2Jqc1tpXTsKLSAgICBjb25zdCBjaGFyICpuYW1lID0gdXBiX2RlZl9mdWxsbmFtZShkZWYp
OwotICAgIHVwYl92YWx1ZSB2OwotICAgIGJvb2wgc3VjY2VzczsKLQotICAgIGlmICh1cGJfc3Ry
dGFibGVfcmVtb3ZlKCZzLT5zeW10YWIsIG5hbWUsICZ2KSkgewotICAgICAgY29uc3QgdXBiX2Rl
ZiAqZGVmID0gdXBiX3ZhbHVlX2dldHB0cih2KTsKLSAgICAgIHVwYl9kZWZfdW5yZWYoZGVmLCBz
KTsKLSAgICB9Ci0gICAgc3VjY2VzcyA9IHVwYl9zdHJ0YWJsZV9pbnNlcnQoJnMtPnN5bXRhYiwg
bmFtZSwgdXBiX3ZhbHVlX3B0cihkZWYpKTsKLSAgICBVUEJfQVNTRVJUX1ZBUihzdWNjZXNzLCBz
dWNjZXNzID09IHRydWUpOwotICB9Ci0gIHVwYl9nZnJlZShhZGRfZGVmcyk7Ci0gIHJldHVybiB0
cnVlOwotCi1vb21fZXJyOgotICB1cGJfc3RhdHVzX3NldGVycm1zZyhzdGF0dXMsICJvdXQgb2Yg
bWVtb3J5Iik7Ci1lcnI6IHsKLSAgICAvKiBGb3IgZGVmcyB0aGUgdXNlciBwYXNzZWQgaW4sIHdl
IG5lZWQgdG8gZG9uYXRlIHRoZSByZWZzIGJhY2suICBGb3IgZGVmcwotICAgICAqIHdlIGR1cCdk
LCB3ZSBuZWVkIHRvIGp1c3QgdW5yZWYgdGhlbS4gKi8KLSAgICB1cGJfc3RydGFibGVfYmVnaW4o
Jml0ZXIsICZhZGR0YWIpOwotICAgIGZvciAoOyAhdXBiX3N0cnRhYmxlX2RvbmUoJml0ZXIpOyB1
cGJfc3RydGFibGVfbmV4dCgmaXRlcikpIHsKLSAgICAgIHVwYl9kZWYgKmRlZiA9IHVwYl92YWx1
ZV9nZXRwdHIodXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoJml0ZXIpKTsKLSAgICAgIGJvb2wgY2Ft
ZV9mcm9tX3VzZXIgPSBkZWYtPmNhbWVfZnJvbV91c2VyOwotICAgICAgZGVmLT5jYW1lX2Zyb21f
dXNlciA9IGZhbHNlOwotICAgICAgaWYgKGNhbWVfZnJvbV91c2VyKSB7Ci0gICAgICAgIHVwYl9k
ZWZfZG9uYXRlcmVmKGRlZiwgcywgcmVmX2Rvbm9yKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHVwYl9kZWZfdW5yZWYoZGVmLCBzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgdXBiX3N0cnRh
YmxlX3VuaW5pdCgmYWRkdGFiKTsKLSAgdXBiX2dmcmVlKGFkZF9kZWZzKTsKLSAgYXNzZXJ0KCF1
cGJfb2soc3RhdHVzKSk7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCB1cGJfc3ltdGFiX2Fk
ZCh1cGJfc3ltdGFiICpzLCB1cGJfZGVmICpjb25zdCpkZWZzLCBzaXplX3QgbiwKLSAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqcmVmX2Rvbm9yLCB1cGJfc3RhdHVzICpzdGF0dXMpIHsKLSAgcmV0
dXJuIHN5bXRhYl9hZGQocywgZGVmcywgbiwgcmVmX2Rvbm9yLCBOVUxMLCBzdGF0dXMpOwotfQot
Ci1ib29sIHVwYl9zeW10YWJfYWRkZmlsZSh1cGJfc3ltdGFiICpzLCB1cGJfZmlsZWRlZiAqZmls
ZSwgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0gIHNpemVfdCBuOwotICBzaXplX3QgaTsKLSAgdXBi
X2RlZiAqKmRlZnM7Ci0gIGJvb2wgcmV0OwotCi0gIG4gPSB1cGJfZmlsZWRlZl9kZWZjb3VudChm
aWxlKTsKLSAgZGVmcyA9IHVwYl9nbWFsbG9jKHNpemVvZigqZGVmcykgKiBuKTsKLQotICBpZiAo
ZGVmcyA9PSBOVUxMKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2coc3RhdHVzLCAiT3V0IG9m
IG1lbW9yeSIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBu
OyBpKyspIHsKLSAgICBkZWZzW2ldID0gdXBiX2ZpbGVkZWZfbXV0YWJsZWRlZihmaWxlLCBpKTsK
LSAgfQotCi0gIHJldCA9IHN5bXRhYl9hZGQocywgZGVmcywgbiwgTlVMTCwgdXBiX2ZpbGVkZWZf
dXBjYXN0X211dGFibGUoZmlsZSksIHN0YXR1cyk7Ci0KLSAgdXBiX2dmcmVlKGRlZnMpOwotICBy
ZXR1cm4gcmV0OwotfQotCi0vKiBJdGVyYXRpb24uICovCi0KLXN0YXRpYyB2b2lkIGFkdmFuY2Vf
dG9fbWF0Y2hpbmcodXBiX3N5bXRhYl9pdGVyICppdGVyKSB7Ci0gIGlmIChpdGVyLT50eXBlID09
IFVQQl9ERUZfQU5ZKQotICAgIHJldHVybjsKLQotICB3aGlsZSAoIXVwYl9zdHJ0YWJsZV9kb25l
KCZpdGVyLT5pdGVyKSAmJgotICAgICAgICAgaXRlci0+dHlwZSAhPSB1cGJfc3ltdGFiX2l0ZXJf
ZGVmKGl0ZXIpLT50eXBlKSB7Ci0gICAgdXBiX3N0cnRhYmxlX25leHQoJml0ZXItPml0ZXIpOwot
ICB9Ci19Ci0KLXZvaWQgdXBiX3N5bXRhYl9iZWdpbih1cGJfc3ltdGFiX2l0ZXIgKml0ZXIsIGNv
bnN0IHVwYl9zeW10YWIgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgdXBiX2RlZnR5cGVfdCB0
eXBlKSB7Ci0gIHVwYl9zdHJ0YWJsZV9iZWdpbigmaXRlci0+aXRlciwgJnMtPnN5bXRhYik7Ci0g
IGl0ZXItPnR5cGUgPSB0eXBlOwotICBhZHZhbmNlX3RvX21hdGNoaW5nKGl0ZXIpOwotfQotCi12
b2lkIHVwYl9zeW10YWJfbmV4dCh1cGJfc3ltdGFiX2l0ZXIgKml0ZXIpIHsKLSAgdXBiX3N0cnRh
YmxlX25leHQoJml0ZXItPml0ZXIpOwotICBhZHZhbmNlX3RvX21hdGNoaW5nKGl0ZXIpOwotfQot
Ci1ib29sIHVwYl9zeW10YWJfZG9uZShjb25zdCB1cGJfc3ltdGFiX2l0ZXIgKml0ZXIpIHsKLSAg
cmV0dXJuIHVwYl9zdHJ0YWJsZV9kb25lKCZpdGVyLT5pdGVyKTsKLX0KLQotY29uc3QgdXBiX2Rl
ZiAqdXBiX3N5bXRhYl9pdGVyX2RlZihjb25zdCB1cGJfc3ltdGFiX2l0ZXIgKml0ZXIpIHsKLSAg
cmV0dXJuIHVwYl92YWx1ZV9nZXRwdHIodXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoJml0ZXItPml0
ZXIpKTsKLX0KLS8qCi0qKiB1cGJfdGFibGUgSW1wbGVtZW50YXRpb24KLSoqCi0qKiBJbXBsZW1l
bnRhdGlvbiBpcyBoZWF2aWx5IGluc3BpcmVkIGJ5IEx1YSdzIGx0YWJsZS5jLgotKi8KLQotCi0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNkZWZpbmUgVVBCX01BWEFSUlNJWkUgMTYgIC8qIDY0ay4g
Ki8KLQotLyogRnJvbSBDaHJvbWl1bS4gKi8KLSNkZWZpbmUgQVJSQVlfU0laRSh4KSBcCi0gICAg
KChzaXplb2YoeCkvc2l6ZW9mKDBbeF0pKSAvICgoc2l6ZV90KSghKHNpemVvZih4KSAlIHNpemVv
ZigwW3hdKSkpKSkKLQotI2lmZGVmIE5ERUJVRwotc3RhdGljIHZvaWQgdXBiX2NoZWNrX2FsbG9j
KHVwYl90YWJsZSAqdCwgdXBiX2FsbG9jICphKSB7Ci0gIFVQQl9VTlVTRUQodCk7Ci0gIFVQQl9V
TlVTRUQoYSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgdXBiX2NoZWNrX2FsbG9jKHVwYl90YWJs
ZSAqdCwgdXBiX2FsbG9jICphKSB7Ci0gIGFzc2VydCh0LT5hbGxvYyA9PSBhKTsKLX0KLSNlbmRp
ZgotCi1zdGF0aWMgY29uc3QgZG91YmxlIE1BWF9MT0FEID0gMC44NTsKLQotLyogVGhlIG1pbmlt
dW0gdXRpbGl6YXRpb24gb2YgdGhlIGFycmF5IHBhcnQgb2YgYSBtaXhlZCBoYXNoL2FycmF5IHRh
YmxlLiAgVGhpcwotICogaXMgYSBzcGVlZC9tZW1vcnktdXNhZ2UgdHJhZGVvZmYgKHRob3VnaCBp
dCdzIG5vdCBzdHJhaWdodGZvcndhcmQgYmVjYXVzZSBvZgotICogY2FjaGUgZWZmZWN0cykuICBU
aGUgbG93ZXIgdGhpcyBpcywgdGhlIG1vcmUgbWVtb3J5IHdlJ2xsIHVzZS4gKi8KLXN0YXRpYyBj
b25zdCBkb3VibGUgTUlOX0RFTlNJVFkgPSAwLjE7Ci0KLWJvb2wgaXNfcG93Mih1aW50NjRfdCB2
KSB7IHJldHVybiB2ID09IDAgfHwgKHYgJiAodiAtIDEpKSA9PSAwOyB9Ci0KLWludCBsb2cyY2Vp
bCh1aW50NjRfdCB2KSB7Ci0gIGludCByZXQgPSAwOwotICBib29sIHBvdzIgPSBpc19wb3cyKHYp
OwotICB3aGlsZSAodiA+Pj0gMSkgcmV0Kys7Ci0gIHJldCA9IHBvdzIgPyByZXQgOiByZXQgKyAx
OyAgLyogQ2VpbGluZy4gKi8KLSAgcmV0dXJuIFVQQl9NSU4oVVBCX01BWEFSUlNJWkUsIHJldCk7
Ci19Ci0KLWNoYXIgKnVwYl9zdHJkdXAoY29uc3QgY2hhciAqcywgdXBiX2FsbG9jICphKSB7Ci0g
IHJldHVybiB1cGJfc3RyZHVwMihzLCBzdHJsZW4ocyksIGEpOwotfQotCi1jaGFyICp1cGJfc3Ry
ZHVwMihjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuLCB1cGJfYWxsb2MgKmEpIHsKLSAgc2l6ZV90
IG47Ci0gIGNoYXIgKnA7Ci0KLSAgLyogUHJldmVudCBvdmVyZmxvdyBlcnJvcnMuICovCi0gIGlm
IChsZW4gPT0gU0laRV9NQVgpIHJldHVybiBOVUxMOwotICAvKiBBbHdheXMgbnVsbC10ZXJtaW5h
dGUsIGV2ZW4gaWYgYmluYXJ5IGRhdGE7IGJ1dCBkb24ndCByZWx5IG9uIHRoZSBpbnB1dCB0bwot
ICAgKiBoYXZlIGEgbnVsbC10ZXJtaW5hdGluZyBieXRlIHNpbmNlIGl0IG1heSBiZSBhIHJhdyBi
aW5hcnkgYnVmZmVyLiAqLwotICBuID0gbGVuICsgMTsKLSAgcCA9IHVwYl9tYWxsb2MoYSwgbik7
Ci0gIGlmIChwKSB7Ci0gICAgbWVtY3B5KHAsIHMsIGxlbik7Ci0gICAgcFtsZW5dID0gMDsKLSAg
fQotICByZXR1cm4gcDsKLX0KLQotLyogQSB0eXBlIHRvIHJlcHJlc2VudCB0aGUgbG9va3VwIGtl
eSBvZiBlaXRoZXIgYSBzdHJ0YWJsZSBvciBhbiBpbnR0YWJsZS4gKi8KLXR5cGVkZWYgdW5pb24g
ewotICB1aW50cHRyX3QgbnVtOwotICBzdHJ1Y3QgewotICAgIGNvbnN0IGNoYXIgKnN0cjsKLSAg
ICBzaXplX3QgbGVuOwotICB9IHN0cjsKLX0gbG9va3Vwa2V5X3Q7Ci0KLXN0YXRpYyBsb29rdXBr
ZXlfdCBzdHJrZXkyKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikgewotICBsb29rdXBrZXlf
dCBrOwotICBrLnN0ci5zdHIgPSBzdHI7Ci0gIGsuc3RyLmxlbiA9IGxlbjsKLSAgcmV0dXJuIGs7
Ci19Ci0KLXN0YXRpYyBsb29rdXBrZXlfdCBpbnRrZXkodWludHB0cl90IGtleSkgewotICBsb29r
dXBrZXlfdCBrOwotICBrLm51bSA9IGtleTsKLSAgcmV0dXJuIGs7Ci19Ci0KLXR5cGVkZWYgdWlu
dDMyX3QgaGFzaGZ1bmNfdCh1cGJfdGFia2V5IGtleSk7Ci10eXBlZGVmIGJvb2wgZXFsZnVuY190
KHVwYl90YWJrZXkgazEsIGxvb2t1cGtleV90IGsyKTsKLQotLyogQmFzZSB0YWJsZSAoc2hhcmVk
IGNvZGUpICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLQotLyogRm9yIHdoZW4gd2UgbmVlZCB0byBjYXN0IGF3YXkgY29uc3QuICovCi1zdGF0aWMg
dXBiX3RhYmVudCAqbXV0YWJsZV9lbnRyaWVzKHVwYl90YWJsZSAqdCkgewotICByZXR1cm4gKHVw
Yl90YWJlbnQqKXQtPmVudHJpZXM7Ci19Ci0KLXN0YXRpYyBib29sIGlzZnVsbCh1cGJfdGFibGUg
KnQpIHsKLSAgaWYgKHVwYl90YWJsZV9zaXplKHQpID09IDApIHsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfSBlbHNlIHsKLSAgICByZXR1cm4gKChkb3VibGUpKHQtPmNvdW50ICsgMSkgLyB1cGJfdGFi
bGVfc2l6ZSh0KSkgPiBNQVhfTE9BRDsKLSAgfQotfQotCi1zdGF0aWMgYm9vbCBpbml0KHVwYl90
YWJsZSAqdCwgdXBiX2N0eXBlX3QgY3R5cGUsIHVpbnQ4X3Qgc2l6ZV9sZzIsCi0gICAgICAgICAg
ICAgICAgIHVwYl9hbGxvYyAqYSkgewotICBzaXplX3QgYnl0ZXM7Ci0KLSAgdC0+Y291bnQgPSAw
OwotICB0LT5jdHlwZSA9IGN0eXBlOwotICB0LT5zaXplX2xnMiA9IHNpemVfbGcyOwotICB0LT5t
YXNrID0gdXBiX3RhYmxlX3NpemUodCkgPyB1cGJfdGFibGVfc2l6ZSh0KSAtIDEgOiAwOwotI2lm
bmRlZiBOREVCVUcKLSAgdC0+YWxsb2MgPSBhOwotI2VuZGlmCi0gIGJ5dGVzID0gdXBiX3RhYmxl
X3NpemUodCkgKiBzaXplb2YodXBiX3RhYmVudCk7Ci0gIGlmIChieXRlcyA+IDApIHsKLSAgICB0
LT5lbnRyaWVzID0gdXBiX21hbGxvYyhhLCBieXRlcyk7Ci0gICAgaWYgKCF0LT5lbnRyaWVzKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgbWVtc2V0KG11dGFibGVfZW50cmllcyh0KSwgMCwgYnl0ZXMpOwot
ICB9IGVsc2UgewotICAgIHQtPmVudHJpZXMgPSBOVUxMOwotICB9Ci0gIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgdm9pZCB1bmluaXQodXBiX3RhYmxlICp0LCB1cGJfYWxsb2MgKmEpIHsKLSAg
dXBiX2NoZWNrX2FsbG9jKHQsIGEpOwotICB1cGJfZnJlZShhLCBtdXRhYmxlX2VudHJpZXModCkp
OwotfQotCi1zdGF0aWMgdXBiX3RhYmVudCAqZW1wdHllbnQodXBiX3RhYmxlICp0KSB7Ci0gIHVw
Yl90YWJlbnQgKmUgPSBtdXRhYmxlX2VudHJpZXModCkgKyB1cGJfdGFibGVfc2l6ZSh0KTsKLSAg
d2hpbGUgKDEpIHsgaWYgKHVwYl90YWJlbnRfaXNlbXB0eSgtLWUpKSByZXR1cm4gZTsgYXNzZXJ0
KGUgPiB0LT5lbnRyaWVzKTsgfQotfQotCi1zdGF0aWMgdXBiX3RhYmVudCAqZ2V0ZW50cnlfbXV0
YWJsZSh1cGJfdGFibGUgKnQsIHVpbnQzMl90IGhhc2gpIHsKLSAgcmV0dXJuICh1cGJfdGFiZW50
Kil1cGJfZ2V0ZW50cnkodCwgaGFzaCk7Ci19Ci0KLXN0YXRpYyBjb25zdCB1cGJfdGFiZW50ICpm
aW5kZW50cnkoY29uc3QgdXBiX3RhYmxlICp0LCBsb29rdXBrZXlfdCBrZXksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhhc2gsIGVxbGZ1bmNfdCAqZXFsKSB7
Ci0gIGNvbnN0IHVwYl90YWJlbnQgKmU7Ci0KLSAgaWYgKHQtPnNpemVfbGcyID09IDApIHJldHVy
biBOVUxMOwotICBlID0gdXBiX2dldGVudHJ5KHQsIGhhc2gpOwotICBpZiAodXBiX3RhYmVudF9p
c2VtcHR5KGUpKSByZXR1cm4gTlVMTDsKLSAgd2hpbGUgKDEpIHsKLSAgICBpZiAoZXFsKGUtPmtl
eSwga2V5KSkgcmV0dXJuIGU7Ci0gICAgaWYgKChlID0gZS0+bmV4dCkgPT0gTlVMTCkgcmV0dXJu
IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHVwYl90YWJlbnQgKmZpbmRlbnRyeV9tdXRhYmxlKHVw
Yl90YWJsZSAqdCwgbG9va3Vwa2V5X3Qga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGhhc2gsIGVxbGZ1bmNfdCAqZXFsKSB7Ci0gIHJldHVybiAodXBi
X3RhYmVudCopZmluZGVudHJ5KHQsIGtleSwgaGFzaCwgZXFsKTsKLX0KLQotc3RhdGljIGJvb2wg
bG9va3VwKGNvbnN0IHVwYl90YWJsZSAqdCwgbG9va3Vwa2V5X3Qga2V5LCB1cGJfdmFsdWUgKnYs
Ci0gICAgICAgICAgICAgICAgICAgdWludDMyX3QgaGFzaCwgZXFsZnVuY190ICplcWwpIHsKLSAg
Y29uc3QgdXBiX3RhYmVudCAqZSA9IGZpbmRlbnRyeSh0LCBrZXksIGhhc2gsIGVxbCk7Ci0gIGlm
IChlKSB7Ci0gICAgaWYgKHYpIHsKLSAgICAgIF91cGJfdmFsdWVfc2V0dmFsKHYsIGUtPnZhbC52
YWwsIHQtPmN0eXBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLS8qIFRoZSBnaXZlbiBrZXkgbXVzdCBub3QgYWxyZWFk
eSBleGlzdCBpbiB0aGUgdGFibGUuICovCi1zdGF0aWMgdm9pZCBpbnNlcnQodXBiX3RhYmxlICp0
LCBsb29rdXBrZXlfdCBrZXksIHVwYl90YWJrZXkgdGFia2V5LAotICAgICAgICAgICAgICAgICAg
IHVwYl92YWx1ZSB2YWwsIHVpbnQzMl90IGhhc2gsCi0gICAgICAgICAgICAgICAgICAgaGFzaGZ1
bmNfdCAqaGFzaGZ1bmMsIGVxbGZ1bmNfdCAqZXFsKSB7Ci0gIHVwYl90YWJlbnQgKm1haW5wb3Nf
ZTsKLSAgdXBiX3RhYmVudCAqb3VyX2U7Ci0KLSAgVVBCX1VOVVNFRChlcWwpOwotICBVUEJfVU5V
U0VEKGtleSk7Ci0gIGFzc2VydChmaW5kZW50cnkodCwga2V5LCBoYXNoLCBlcWwpID09IE5VTEwp
OwotICBhc3NlcnQodmFsLmN0eXBlID09IHQtPmN0eXBlKTsKLQotICB0LT5jb3VudCsrOwotICBt
YWlucG9zX2UgPSBnZXRlbnRyeV9tdXRhYmxlKHQsIGhhc2gpOwotICBvdXJfZSA9IG1haW5wb3Nf
ZTsKLQotICBpZiAodXBiX3RhYmVudF9pc2VtcHR5KG1haW5wb3NfZSkpIHsKLSAgICAvKiBPdXIg
bWFpbiBwb3NpdGlvbiBpcyBlbXB0eTsgdXNlIGl0LiAqLwotICAgIG91cl9lLT5uZXh0ID0gTlVM
TDsKLSAgfSBlbHNlIHsKLSAgICAvKiBDb2xsaXNpb24uICovCi0gICAgdXBiX3RhYmVudCAqbmV3
X2UgPSBlbXB0eWVudCh0KTsKLSAgICAvKiBIZWFkIG9mIGNvbGxpZGVyJ3MgY2hhaW4uICovCi0g
ICAgdXBiX3RhYmVudCAqY2hhaW4gPSBnZXRlbnRyeV9tdXRhYmxlKHQsIGhhc2hmdW5jKG1haW5w
b3NfZS0+a2V5KSk7Ci0gICAgaWYgKGNoYWluID09IG1haW5wb3NfZSkgewotICAgICAgLyogRXhp
c3RpbmcgZW50IGlzIGluIGl0cyBtYWluIHBvc2lzaXRvbiAoaXQgaGFzIHRoZSBzYW1lIGhhc2gg
YXMgdXMsIGFuZAotICAgICAgICogaXMgdGhlIGhlYWQgb2Ygb3VyIGNoYWluKS4gIEluc2VydCB0
byBuZXcgZW50IGFuZCBhcHBlbmQgdG8gdGhpcyBjaGFpbi4gKi8KLSAgICAgIG5ld19lLT5uZXh0
ID0gbWFpbnBvc19lLT5uZXh0OwotICAgICAgbWFpbnBvc19lLT5uZXh0ID0gbmV3X2U7Ci0gICAg
ICBvdXJfZSA9IG5ld19lOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBFeGlzdGluZyBlbnQgaXMg
bm90IGluIGl0cyBtYWluIHBvc2l0aW9uIChpdCBpcyBhIG5vZGUgaW4gc29tZSBvdGhlcgotICAg
ICAgICogY2hhaW4pLiAgVGhpcyBpbXBsaWVzIHRoYXQgbm8gZXhpc3RpbmcgZW50IGluIHRoZSB0
YWJsZSBoYXMgb3VyIGhhc2guCi0gICAgICAgKiBFdmljdCBpdCAodXBkYXRpbmcgaXRzIGNoYWlu
KSBhbmQgdXNlIGl0cyBlbnQgZm9yIGhlYWQgb2Ygb3VyIGNoYWluLiAqLwotICAgICAgKm5ld19l
ID0gKm1haW5wb3NfZTsgIC8qIGNvcGllcyBuZXh0LiAqLwotICAgICAgd2hpbGUgKGNoYWluLT5u
ZXh0ICE9IG1haW5wb3NfZSkgewotICAgICAgICBjaGFpbiA9ICh1cGJfdGFiZW50KiljaGFpbi0+
bmV4dDsKLSAgICAgICAgYXNzZXJ0KGNoYWluKTsKLSAgICAgIH0KLSAgICAgIGNoYWluLT5uZXh0
ID0gbmV3X2U7Ci0gICAgICBvdXJfZSA9IG1haW5wb3NfZTsKLSAgICAgIG91cl9lLT5uZXh0ID0g
TlVMTDsKLSAgICB9Ci0gIH0KLSAgb3VyX2UtPmtleSA9IHRhYmtleTsKLSAgb3VyX2UtPnZhbC52
YWwgPSB2YWwudmFsOwotICBhc3NlcnQoZmluZGVudHJ5KHQsIGtleSwgaGFzaCwgZXFsKSA9PSBv
dXJfZSk7Ci19Ci0KLXN0YXRpYyBib29sIHJtKHVwYl90YWJsZSAqdCwgbG9va3Vwa2V5X3Qga2V5
LCB1cGJfdmFsdWUgKnZhbCwKLSAgICAgICAgICAgICAgIHVwYl90YWJrZXkgKnJlbW92ZWQsIHVp
bnQzMl90IGhhc2gsIGVxbGZ1bmNfdCAqZXFsKSB7Ci0gIHVwYl90YWJlbnQgKmNoYWluID0gZ2V0
ZW50cnlfbXV0YWJsZSh0LCBoYXNoKTsKLSAgaWYgKHVwYl90YWJlbnRfaXNlbXB0eShjaGFpbikp
IHJldHVybiBmYWxzZTsKLSAgaWYgKGVxbChjaGFpbi0+a2V5LCBrZXkpKSB7Ci0gICAgLyogRWxl
bWVudCB0byByZW1vdmUgaXMgYXQgdGhlIGhlYWQgb2YgaXRzIGNoYWluLiAqLwotICAgIHQtPmNv
dW50LS07Ci0gICAgaWYgKHZhbCkgewotICAgICAgX3VwYl92YWx1ZV9zZXR2YWwodmFsLCBjaGFp
bi0+dmFsLnZhbCwgdC0+Y3R5cGUpOwotICAgIH0KLSAgICBpZiAoY2hhaW4tPm5leHQpIHsKLSAg
ICAgIHVwYl90YWJlbnQgKm1vdmUgPSAodXBiX3RhYmVudCopY2hhaW4tPm5leHQ7Ci0gICAgICAq
Y2hhaW4gPSAqbW92ZTsKLSAgICAgIGlmIChyZW1vdmVkKSAqcmVtb3ZlZCA9IG1vdmUtPmtleTsK
LSAgICAgIG1vdmUtPmtleSA9IDA7ICAvKiBNYWtlIHRoZSBzbG90IGVtcHR5LiAqLwotICAgIH0g
ZWxzZSB7Ci0gICAgICBpZiAocmVtb3ZlZCkgKnJlbW92ZWQgPSBjaGFpbi0+a2V5OwotICAgICAg
Y2hhaW4tPmtleSA9IDA7ICAvKiBNYWtlIHRoZSBzbG90IGVtcHR5LiAqLwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICAvKiBFbGVtZW50IHRvIHJlbW92ZSBpcyBlaXRo
ZXIgaW4gYSBub24taGVhZCBwb3NpdGlvbiBvciBub3QgaW4gdGhlCi0gICAgICogdGFibGUuICov
Ci0gICAgd2hpbGUgKGNoYWluLT5uZXh0ICYmICFlcWwoY2hhaW4tPm5leHQtPmtleSwga2V5KSkK
LSAgICAgIGNoYWluID0gKHVwYl90YWJlbnQqKWNoYWluLT5uZXh0OwotICAgIGlmIChjaGFpbi0+
bmV4dCkgewotICAgICAgLyogRm91bmQgZWxlbWVudCB0byByZW1vdmUuICovCi0gICAgICB1cGJf
dGFiZW50ICpybTsKLQotICAgICAgaWYgKHZhbCkgewotICAgICAgICBfdXBiX3ZhbHVlX3NldHZh
bCh2YWwsIGNoYWluLT5uZXh0LT52YWwudmFsLCB0LT5jdHlwZSk7Ci0gICAgICB9Ci0gICAgICBy
bSA9ICh1cGJfdGFiZW50KiljaGFpbi0+bmV4dDsKLSAgICAgIGlmIChyZW1vdmVkKSAqcmVtb3Zl
ZCA9IHJtLT5rZXk7Ci0gICAgICBybS0+a2V5ID0gMDsKLSAgICAgIGNoYWluLT5uZXh0ID0gcm0t
Pm5leHQ7Ci0gICAgICB0LT5jb3VudC0tOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHNpemVfdCBu
ZXh0KGNvbnN0IHVwYl90YWJsZSAqdCwgc2l6ZV90IGkpIHsKLSAgZG8gewotICAgIGlmICgrK2kg
Pj0gdXBiX3RhYmxlX3NpemUodCkpCi0gICAgICByZXR1cm4gU0laRV9NQVg7Ci0gIH0gd2hpbGUo
dXBiX3RhYmVudF9pc2VtcHR5KCZ0LT5lbnRyaWVzW2ldKSk7Ci0KLSAgcmV0dXJuIGk7Ci19Ci0K
LXN0YXRpYyBzaXplX3QgYmVnaW4oY29uc3QgdXBiX3RhYmxlICp0KSB7Ci0gIHJldHVybiBuZXh0
KHQsIC0xKTsKLX0KLQotCi0vKiB1cGJfc3RydGFibGUgKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBBIHNpbXBsZSAi
c3ViY2xhc3MiIG9mIHVwYl90YWJsZSB0aGF0IG9ubHkgYWRkcyBhIGhhc2ggZnVuY3Rpb24gZm9y
IHN0cmluZ3MuICovCi0KLXN0YXRpYyB1cGJfdGFia2V5IHN0cmNvcHkobG9va3Vwa2V5X3QgazIs
IHVwYl9hbGxvYyAqYSkgewotICBjaGFyICpzdHIgPSB1cGJfbWFsbG9jKGEsIGsyLnN0ci5sZW4g
KyBzaXplb2YodWludDMyX3QpICsgMSk7Ci0gIGlmIChzdHIgPT0gTlVMTCkgcmV0dXJuIDA7Ci0g
IG1lbWNweShzdHIsICZrMi5zdHIubGVuLCBzaXplb2YodWludDMyX3QpKTsKLSAgbWVtY3B5KHN0
ciArIHNpemVvZih1aW50MzJfdCksIGsyLnN0ci5zdHIsIGsyLnN0ci5sZW4gKyAxKTsKLSAgcmV0
dXJuICh1aW50cHRyX3Qpc3RyOwotfQotCi1zdGF0aWMgdWludDMyX3Qgc3RyaGFzaCh1cGJfdGFi
a2V5IGtleSkgewotICB1aW50MzJfdCBsZW47Ci0gIGNoYXIgKnN0ciA9IHVwYl90YWJzdHIoa2V5
LCAmbGVuKTsKLSAgcmV0dXJuIE11cm11ckhhc2gyKHN0ciwgbGVuLCAwKTsKLX0KLQotc3RhdGlj
IGJvb2wgc3RyZXFsKHVwYl90YWJrZXkgazEsIGxvb2t1cGtleV90IGsyKSB7Ci0gIHVpbnQzMl90
IGxlbjsKLSAgY2hhciAqc3RyID0gdXBiX3RhYnN0cihrMSwgJmxlbik7Ci0gIHJldHVybiBsZW4g
PT0gazIuc3RyLmxlbiAmJiBtZW1jbXAoc3RyLCBrMi5zdHIuc3RyLCBsZW4pID09IDA7Ci19Ci0K
LWJvb2wgdXBiX3N0cnRhYmxlX2luaXQyKHVwYl9zdHJ0YWJsZSAqdCwgdXBiX2N0eXBlX3QgY3R5
cGUsIHVwYl9hbGxvYyAqYSkgewotICByZXR1cm4gaW5pdCgmdC0+dCwgY3R5cGUsIDIsIGEpOwot
fQotCi12b2lkIHVwYl9zdHJ0YWJsZV91bmluaXQyKHVwYl9zdHJ0YWJsZSAqdCwgdXBiX2FsbG9j
ICphKSB7Ci0gIHNpemVfdCBpOwotICBmb3IgKGkgPSAwOyBpIDwgdXBiX3RhYmxlX3NpemUoJnQt
PnQpOyBpKyspCi0gICAgdXBiX2ZyZWUoYSwgKHZvaWQqKXQtPnQuZW50cmllc1tpXS5rZXkpOwot
ICB1bmluaXQoJnQtPnQsIGEpOwotfQotCi1ib29sIHVwYl9zdHJ0YWJsZV9yZXNpemUodXBiX3N0
cnRhYmxlICp0LCBzaXplX3Qgc2l6ZV9sZzIsIHVwYl9hbGxvYyAqYSkgewotICB1cGJfc3RydGFi
bGUgbmV3X3RhYmxlOwotICB1cGJfc3RydGFibGVfaXRlciBpOwotCi0gIHVwYl9jaGVja19hbGxv
YygmdC0+dCwgYSk7Ci0KLSAgaWYgKCFpbml0KCZuZXdfdGFibGUudCwgdC0+dC5jdHlwZSwgc2l6
ZV9sZzIsIGEpKQotICAgIHJldHVybiBmYWxzZTsKLSAgdXBiX3N0cnRhYmxlX2JlZ2luKCZpLCB0
KTsKLSAgZm9yICggOyAhdXBiX3N0cnRhYmxlX2RvbmUoJmkpOyB1cGJfc3RydGFibGVfbmV4dCgm
aSkpIHsKLSAgICB1cGJfc3RydGFibGVfaW5zZXJ0MygKLSAgICAgICAgJm5ld190YWJsZSwKLSAg
ICAgICAgdXBiX3N0cnRhYmxlX2l0ZXJfa2V5KCZpKSwKLSAgICAgICAgdXBiX3N0cnRhYmxlX2l0
ZXJfa2V5bGVuZ3RoKCZpKSwKLSAgICAgICAgdXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoJmkpLAot
ICAgICAgICBhKTsKLSAgfQotICB1cGJfc3RydGFibGVfdW5pbml0Mih0LCBhKTsKLSAgKnQgPSBu
ZXdfdGFibGU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIHVwYl9zdHJ0YWJsZV9pbnNlcnQz
KHVwYl9zdHJ0YWJsZSAqdCwgY29uc3QgY2hhciAqaywgc2l6ZV90IGxlbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXBiX3ZhbHVlIHYsIHVwYl9hbGxvYyAqYSkgewotICBsb29rdXBrZXlf
dCBrZXk7Ci0gIHVwYl90YWJrZXkgdGFia2V5OwotICB1aW50MzJfdCBoYXNoOwotCi0gIHVwYl9j
aGVja19hbGxvYygmdC0+dCwgYSk7Ci0KLSAgaWYgKGlzZnVsbCgmdC0+dCkpIHsKLSAgICAvKiBO
ZWVkIHRvIHJlc2l6ZS4gIE5ldyB0YWJsZSBvZiBkb3VibGUgdGhlIHNpemUsIGFkZCBvbGQgZWxl
bWVudHMgdG8gaXQuICovCi0gICAgaWYgKCF1cGJfc3RydGFibGVfcmVzaXplKHQsIHQtPnQuc2l6
ZV9sZzIgKyAxLCBhKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGtl
eSA9IHN0cmtleTIoaywgbGVuKTsKLSAgdGFia2V5ID0gc3RyY29weShrZXksIGEpOwotICBpZiAo
dGFia2V5ID09IDApIHJldHVybiBmYWxzZTsKLQotICBoYXNoID0gTXVybXVySGFzaDIoa2V5LnN0
ci5zdHIsIGtleS5zdHIubGVuLCAwKTsKLSAgaW5zZXJ0KCZ0LT50LCBrZXksIHRhYmtleSwgdiwg
aGFzaCwgJnN0cmhhc2gsICZzdHJlcWwpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB1cGJf
c3RydGFibGVfbG9va3VwMihjb25zdCB1cGJfc3RydGFibGUgKnQsIGNvbnN0IGNoYXIgKmtleSwg
c2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3ZhbHVlICp2KSB7Ci0g
IHVpbnQzMl90IGhhc2ggPSBNdXJtdXJIYXNoMihrZXksIGxlbiwgMCk7Ci0gIHJldHVybiBsb29r
dXAoJnQtPnQsIHN0cmtleTIoa2V5LCBsZW4pLCB2LCBoYXNoLCAmc3RyZXFsKTsKLX0KLQotYm9v
bCB1cGJfc3RydGFibGVfcmVtb3ZlMyh1cGJfc3RydGFibGUgKnQsIGNvbnN0IGNoYXIgKmtleSwg
c2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfdmFsdWUgKnZhbCwgdXBi
X2FsbG9jICphbGxvYykgewotICB1aW50MzJfdCBoYXNoID0gTXVybXVySGFzaDIoa2V5LCBzdHJs
ZW4oa2V5KSwgMCk7Ci0gIHVwYl90YWJrZXkgdGFia2V5OwotICBpZiAocm0oJnQtPnQsIHN0cmtl
eTIoa2V5LCBsZW4pLCB2YWwsICZ0YWJrZXksIGhhc2gsICZzdHJlcWwpKSB7Ci0gICAgdXBiX2Zy
ZWUoYWxsb2MsICh2b2lkKil0YWJrZXkpOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2Ugewot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi0vKiBJdGVyYXRpb24gKi8KLQotc3RhdGljIGNv
bnN0IHVwYl90YWJlbnQgKnN0cl90YWJlbnQoY29uc3QgdXBiX3N0cnRhYmxlX2l0ZXIgKmkpIHsK
LSAgcmV0dXJuICZpLT50LT50LmVudHJpZXNbaS0+aW5kZXhdOwotfQotCi12b2lkIHVwYl9zdHJ0
YWJsZV9iZWdpbih1cGJfc3RydGFibGVfaXRlciAqaSwgY29uc3QgdXBiX3N0cnRhYmxlICp0KSB7
Ci0gIGktPnQgPSB0OwotICBpLT5pbmRleCA9IGJlZ2luKCZ0LT50KTsKLX0KLQotdm9pZCB1cGJf
c3RydGFibGVfbmV4dCh1cGJfc3RydGFibGVfaXRlciAqaSkgewotICBpLT5pbmRleCA9IG5leHQo
JmktPnQtPnQsIGktPmluZGV4KTsKLX0KLQotYm9vbCB1cGJfc3RydGFibGVfZG9uZShjb25zdCB1
cGJfc3RydGFibGVfaXRlciAqaSkgewotICByZXR1cm4gaS0+aW5kZXggPj0gdXBiX3RhYmxlX3Np
emUoJmktPnQtPnQpIHx8Ci0gICAgICAgICB1cGJfdGFiZW50X2lzZW1wdHkoc3RyX3RhYmVudChp
KSk7Ci19Ci0KLWNvbnN0IGNoYXIgKnVwYl9zdHJ0YWJsZV9pdGVyX2tleShjb25zdCB1cGJfc3Ry
dGFibGVfaXRlciAqaSkgewotICBhc3NlcnQoIXVwYl9zdHJ0YWJsZV9kb25lKGkpKTsKLSAgcmV0
dXJuIHVwYl90YWJzdHIoc3RyX3RhYmVudChpKS0+a2V5LCBOVUxMKTsKLX0KLQotc2l6ZV90IHVw
Yl9zdHJ0YWJsZV9pdGVyX2tleWxlbmd0aChjb25zdCB1cGJfc3RydGFibGVfaXRlciAqaSkgewot
ICB1aW50MzJfdCBsZW47Ci0gIGFzc2VydCghdXBiX3N0cnRhYmxlX2RvbmUoaSkpOwotICB1cGJf
dGFic3RyKHN0cl90YWJlbnQoaSktPmtleSwgJmxlbik7Ci0gIHJldHVybiBsZW47Ci19Ci0KLXVw
Yl92YWx1ZSB1cGJfc3RydGFibGVfaXRlcl92YWx1ZShjb25zdCB1cGJfc3RydGFibGVfaXRlciAq
aSkgewotICBhc3NlcnQoIXVwYl9zdHJ0YWJsZV9kb25lKGkpKTsKLSAgcmV0dXJuIF91cGJfdmFs
dWVfdmFsKHN0cl90YWJlbnQoaSktPnZhbC52YWwsIGktPnQtPnQuY3R5cGUpOwotfQotCi12b2lk
IHVwYl9zdHJ0YWJsZV9pdGVyX3NldGRvbmUodXBiX3N0cnRhYmxlX2l0ZXIgKmkpIHsKLSAgaS0+
aW5kZXggPSBTSVpFX01BWDsKLX0KLQotYm9vbCB1cGJfc3RydGFibGVfaXRlcl9pc2VxdWFsKGNv
bnN0IHVwYl9zdHJ0YWJsZV9pdGVyICppMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1cGJfc3RydGFibGVfaXRlciAqaTIpIHsKLSAgaWYgKHVwYl9zdHJ0YWJsZV9kb25l
KGkxKSAmJiB1cGJfc3RydGFibGVfZG9uZShpMikpCi0gICAgcmV0dXJuIHRydWU7Ci0gIHJldHVy
biBpMS0+dCA9PSBpMi0+dCAmJiBpMS0+aW5kZXggPT0gaTItPmluZGV4OwotfQotCi0KLS8qIHVw
Yl9pbnR0YWJsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLS8qIEZvciBpbnR0YWJsZXMgd2UgdXNlIGEgaHlicmlkIHN0
cnVjdHVyZSB3aGVyZSBzbWFsbCBrZXlzIGFyZSBrZXB0IGluIGFuCi0gKiBhcnJheSBhbmQgbGFy
Z2Uga2V5cyBhcmUgcHV0IGluIHRoZSBoYXNoIHRhYmxlLiAqLwotCi1zdGF0aWMgdWludDMyX3Qg
aW50aGFzaCh1cGJfdGFia2V5IGtleSkgeyByZXR1cm4gdXBiX2ludGhhc2goa2V5KTsgfQotCi1z
dGF0aWMgYm9vbCBpbnRlcWwodXBiX3RhYmtleSBrMSwgbG9va3Vwa2V5X3QgazIpIHsKLSAgcmV0
dXJuIGsxID09IGsyLm51bTsKLX0KLQotc3RhdGljIHVwYl90YWJ2YWwgKm11dGFibGVfYXJyYXko
dXBiX2ludHRhYmxlICp0KSB7Ci0gIHJldHVybiAodXBiX3RhYnZhbCopdC0+YXJyYXk7Ci19Ci0K
LXN0YXRpYyB1cGJfdGFidmFsICppbnR0YWJsZV92YWwodXBiX2ludHRhYmxlICp0LCB1aW50cHRy
X3Qga2V5KSB7Ci0gIGlmIChrZXkgPCB0LT5hcnJheV9zaXplKSB7Ci0gICAgcmV0dXJuIHVwYl9h
cnJoYXModC0+YXJyYXlba2V5XSkgPyAmKG11dGFibGVfYXJyYXkodClba2V5XSkgOiBOVUxMOwot
ICB9IGVsc2UgewotICAgIHVwYl90YWJlbnQgKmUgPQotICAgICAgICBmaW5kZW50cnlfbXV0YWJs
ZSgmdC0+dCwgaW50a2V5KGtleSksIHVwYl9pbnRoYXNoKGtleSksICZpbnRlcWwpOwotICAgIHJl
dHVybiBlID8gJmUtPnZhbCA6IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIGNvbnN0IHVwYl90YWJ2
YWwgKmludHRhYmxlX3ZhbF9jb25zdChjb25zdCB1cGJfaW50dGFibGUgKnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBrZXkpIHsKLSAgcmV0
dXJuIGludHRhYmxlX3ZhbCgodXBiX2ludHRhYmxlKil0LCBrZXkpOwotfQotCi1zaXplX3QgdXBi
X2ludHRhYmxlX2NvdW50KGNvbnN0IHVwYl9pbnR0YWJsZSAqdCkgewotICByZXR1cm4gdC0+dC5j
b3VudCArIHQtPmFycmF5X2NvdW50OwotfQotCi1zdGF0aWMgdm9pZCBjaGVjayh1cGJfaW50dGFi
bGUgKnQpIHsKLSAgVVBCX1VOVVNFRCh0KTsKLSNpZiBkZWZpbmVkKFVQQl9ERUJVR19UQUJMRSkg
JiYgIWRlZmluZWQoTkRFQlVHKQotICB7Ci0gICAgLyogVGhpcyBjaGVjayBpcyB2ZXJ5IGV4cGVu
c2l2ZSAobWFrZXMgaW5zZXJ0cy9kZWxldGVzIE8oTikpLiAqLwotICAgIHNpemVfdCBjb3VudCA9
IDA7Ci0gICAgdXBiX2ludHRhYmxlX2l0ZXIgaTsKLSAgICB1cGJfaW50dGFibGVfYmVnaW4oJmks
IHQpOwotICAgIGZvcig7ICF1cGJfaW50dGFibGVfZG9uZSgmaSk7IHVwYl9pbnR0YWJsZV9uZXh0
KCZpKSwgY291bnQrKykgewotICAgICAgYXNzZXJ0KHVwYl9pbnR0YWJsZV9sb29rdXAodCwgdXBi
X2ludHRhYmxlX2l0ZXJfa2V5KCZpKSwgTlVMTCkpOwotICAgIH0KLSAgICBhc3NlcnQoY291bnQg
PT0gdXBiX2ludHRhYmxlX2NvdW50KHQpKTsKLSAgfQotI2VuZGlmCi19Ci0KLWJvb2wgdXBiX2lu
dHRhYmxlX3NpemVkaW5pdCh1cGJfaW50dGFibGUgKnQsIHVwYl9jdHlwZV90IGN0eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhc2l6ZSwgaW50IGhzaXplX2xnMiwgdXBi
X2FsbG9jICphKSB7Ci0gIHNpemVfdCBhcnJheV9ieXRlczsKLQotICBpZiAoIWluaXQoJnQtPnQs
IGN0eXBlLCBoc2l6ZV9sZzIsIGEpKSByZXR1cm4gZmFsc2U7Ci0gIC8qIEFsd2F5cyBtYWtlIHRo
ZSBhcnJheSBwYXJ0IGF0IGxlYXN0IDEgbG9uZywgc28gdGhhdCB3ZSBrbm93IGtleSAwCi0gICAq
IHdvbid0IGJlIGluIHRoZSBoYXNoIHBhcnQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiAqLwot
ICB0LT5hcnJheV9zaXplID0gVVBCX01BWCgxLCBhc2l6ZSk7Ci0gIHQtPmFycmF5X2NvdW50ID0g
MDsKLSAgYXJyYXlfYnl0ZXMgPSB0LT5hcnJheV9zaXplICogc2l6ZW9mKHVwYl92YWx1ZSk7Ci0g
IHQtPmFycmF5ID0gdXBiX21hbGxvYyhhLCBhcnJheV9ieXRlcyk7Ci0gIGlmICghdC0+YXJyYXkp
IHsKLSAgICB1bmluaXQoJnQtPnQsIGEpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBtZW1z
ZXQobXV0YWJsZV9hcnJheSh0KSwgMHhmZiwgYXJyYXlfYnl0ZXMpOwotICBjaGVjayh0KTsKLSAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdXBiX2ludHRhYmxlX2luaXQyKHVwYl9pbnR0YWJsZSAq
dCwgdXBiX2N0eXBlX3QgY3R5cGUsIHVwYl9hbGxvYyAqYSkgewotICByZXR1cm4gdXBiX2ludHRh
YmxlX3NpemVkaW5pdCh0LCBjdHlwZSwgMCwgNCwgYSk7Ci19Ci0KLXZvaWQgdXBiX2ludHRhYmxl
X3VuaW5pdDIodXBiX2ludHRhYmxlICp0LCB1cGJfYWxsb2MgKmEpIHsKLSAgdW5pbml0KCZ0LT50
LCBhKTsKLSAgdXBiX2ZyZWUoYSwgbXV0YWJsZV9hcnJheSh0KSk7Ci19Ci0KLWJvb2wgdXBiX2lu
dHRhYmxlX2luc2VydDIodXBiX2ludHRhYmxlICp0LCB1aW50cHRyX3Qga2V5LCB1cGJfdmFsdWUg
dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfYWxsb2MgKmEpIHsKLSAgdXBiX3Rh
YnZhbCB0YWJ2YWw7Ci0gIHRhYnZhbC52YWwgPSB2YWwudmFsOwotICBVUEJfVU5VU0VEKHRhYnZh
bCk7Ci0gIGFzc2VydCh1cGJfYXJyaGFzKHRhYnZhbCkpOyAgLyogVGhpcyB3aWxsIHJlamVjdCAo
dWludDY0X3QpLTEuICBGaXggdGhpcy4gKi8KLQotICB1cGJfY2hlY2tfYWxsb2MoJnQtPnQsIGEp
OwotCi0gIGlmIChrZXkgPCB0LT5hcnJheV9zaXplKSB7Ci0gICAgYXNzZXJ0KCF1cGJfYXJyaGFz
KHQtPmFycmF5W2tleV0pKTsKLSAgICB0LT5hcnJheV9jb3VudCsrOwotICAgIG11dGFibGVfYXJy
YXkodClba2V5XS52YWwgPSB2YWwudmFsOwotICB9IGVsc2UgewotICAgIGlmIChpc2Z1bGwoJnQt
PnQpKSB7Ci0gICAgICAvKiBOZWVkIHRvIHJlc2l6ZSB0aGUgaGFzaCBwYXJ0LCBidXQgd2UgcmUt
dXNlIHRoZSBhcnJheSBwYXJ0LiAqLwotICAgICAgc2l6ZV90IGk7Ci0gICAgICB1cGJfdGFibGUg
bmV3X3RhYmxlOwotCi0gICAgICBpZiAoIWluaXQoJm5ld190YWJsZSwgdC0+dC5jdHlwZSwgdC0+
dC5zaXplX2xnMiArIDEsIGEpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQot
ICAgICAgZm9yIChpID0gYmVnaW4oJnQtPnQpOyBpIDwgdXBiX3RhYmxlX3NpemUoJnQtPnQpOyBp
ID0gbmV4dCgmdC0+dCwgaSkpIHsKLSAgICAgICAgY29uc3QgdXBiX3RhYmVudCAqZSA9ICZ0LT50
LmVudHJpZXNbaV07Ci0gICAgICAgIHVpbnQzMl90IGhhc2g7Ci0gICAgICAgIHVwYl92YWx1ZSB2
OwotCi0gICAgICAgIF91cGJfdmFsdWVfc2V0dmFsKCZ2LCBlLT52YWwudmFsLCB0LT50LmN0eXBl
KTsKLSAgICAgICAgaGFzaCA9IHVwYl9pbnRoYXNoKGUtPmtleSk7Ci0gICAgICAgIGluc2VydCgm
bmV3X3RhYmxlLCBpbnRrZXkoZS0+a2V5KSwgZS0+a2V5LCB2LCBoYXNoLCAmaW50aGFzaCwgJmlu
dGVxbCk7Ci0gICAgICB9Ci0KLSAgICAgIGFzc2VydCh0LT50LmNvdW50ID09IG5ld190YWJsZS5j
b3VudCk7Ci0KLSAgICAgIHVuaW5pdCgmdC0+dCwgYSk7Ci0gICAgICB0LT50ID0gbmV3X3RhYmxl
OwotICAgIH0KLSAgICBpbnNlcnQoJnQtPnQsIGludGtleShrZXkpLCBrZXksIHZhbCwgdXBiX2lu
dGhhc2goa2V5KSwgJmludGhhc2gsICZpbnRlcWwpOwotICB9Ci0gIGNoZWNrKHQpOwotICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCB1cGJfaW50dGFibGVfbG9va3VwKGNvbnN0IHVwYl9pbnR0YWJs
ZSAqdCwgdWludHB0cl90IGtleSwgdXBiX3ZhbHVlICp2KSB7Ci0gIGNvbnN0IHVwYl90YWJ2YWwg
KnRhYmxlX3YgPSBpbnR0YWJsZV92YWxfY29uc3QodCwga2V5KTsKLSAgaWYgKCF0YWJsZV92KSBy
ZXR1cm4gZmFsc2U7Ci0gIGlmICh2KSBfdXBiX3ZhbHVlX3NldHZhbCh2LCB0YWJsZV92LT52YWws
IHQtPnQuY3R5cGUpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB1cGJfaW50dGFibGVfcmVw
bGFjZSh1cGJfaW50dGFibGUgKnQsIHVpbnRwdHJfdCBrZXksIHVwYl92YWx1ZSB2YWwpIHsKLSAg
dXBiX3RhYnZhbCAqdGFibGVfdiA9IGludHRhYmxlX3ZhbCh0LCBrZXkpOwotICBpZiAoIXRhYmxl
X3YpIHJldHVybiBmYWxzZTsKLSAgdGFibGVfdi0+dmFsID0gdmFsLnZhbDsKLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgdXBiX2ludHRhYmxlX3JlbW92ZSh1cGJfaW50dGFibGUgKnQsIHVpbnRw
dHJfdCBrZXksIHVwYl92YWx1ZSAqdmFsKSB7Ci0gIGJvb2wgc3VjY2VzczsKLSAgaWYgKGtleSA8
IHQtPmFycmF5X3NpemUpIHsKLSAgICBpZiAodXBiX2Fycmhhcyh0LT5hcnJheVtrZXldKSkgewot
ICAgICAgdXBiX3RhYnZhbCBlbXB0eSA9IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklUOwotICAgICAg
dC0+YXJyYXlfY291bnQtLTsKLSAgICAgIGlmICh2YWwpIHsKLSAgICAgICAgX3VwYl92YWx1ZV9z
ZXR2YWwodmFsLCB0LT5hcnJheVtrZXldLnZhbCwgdC0+dC5jdHlwZSk7Ci0gICAgICB9Ci0gICAg
ICBtdXRhYmxlX2FycmF5KHQpW2tleV0gPSBlbXB0eTsKLSAgICAgIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgfQotICB9IGVsc2Ugewot
ICAgIHVwYl90YWJrZXkgcmVtb3ZlZDsKLSAgICB1aW50MzJfdCBoYXNoID0gdXBiX2ludGhhc2go
a2V5KTsKLSAgICBzdWNjZXNzID0gcm0oJnQtPnQsIGludGtleShrZXkpLCB2YWwsICZyZW1vdmVk
LCBoYXNoLCAmaW50ZXFsKTsKLSAgfQotICBjaGVjayh0KTsKLSAgcmV0dXJuIHN1Y2Nlc3M7Ci19
Ci0KLWJvb2wgdXBiX2ludHRhYmxlX3B1c2gyKHVwYl9pbnR0YWJsZSAqdCwgdXBiX3ZhbHVlIHZh
bCwgdXBiX2FsbG9jICphKSB7Ci0gIHVwYl9jaGVja19hbGxvYygmdC0+dCwgYSk7Ci0gIHJldHVy
biB1cGJfaW50dGFibGVfaW5zZXJ0Mih0LCB1cGJfaW50dGFibGVfY291bnQodCksIHZhbCwgYSk7
Ci19Ci0KLXVwYl92YWx1ZSB1cGJfaW50dGFibGVfcG9wKHVwYl9pbnR0YWJsZSAqdCkgewotICB1
cGJfdmFsdWUgdmFsOwotICBib29sIG9rID0gdXBiX2ludHRhYmxlX3JlbW92ZSh0LCB1cGJfaW50
dGFibGVfY291bnQodCkgLSAxLCAmdmFsKTsKLSAgVVBCX0FTU0VSVF9WQVIob2ssIG9rKTsKLSAg
cmV0dXJuIHZhbDsKLX0KLQotYm9vbCB1cGJfaW50dGFibGVfaW5zZXJ0cHRyMih1cGJfaW50dGFi
bGUgKnQsIGNvbnN0IHZvaWQgKmtleSwgdXBiX3ZhbHVlIHZhbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXBiX2FsbG9jICphKSB7Ci0gIHVwYl9jaGVja19hbGxvYygmdC0+dCwgYSk7
Ci0gIHJldHVybiB1cGJfaW50dGFibGVfaW5zZXJ0Mih0LCAodWludHB0cl90KWtleSwgdmFsLCBh
KTsKLX0KLQotYm9vbCB1cGJfaW50dGFibGVfbG9va3VwcHRyKGNvbnN0IHVwYl9pbnR0YWJsZSAq
dCwgY29uc3Qgdm9pZCAqa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl92YWx1
ZSAqdikgewotICByZXR1cm4gdXBiX2ludHRhYmxlX2xvb2t1cCh0LCAodWludHB0cl90KWtleSwg
dik7Ci19Ci0KLWJvb2wgdXBiX2ludHRhYmxlX3JlbW92ZXB0cih1cGJfaW50dGFibGUgKnQsIGNv
bnN0IHZvaWQgKmtleSwgdXBiX3ZhbHVlICp2YWwpIHsKLSAgcmV0dXJuIHVwYl9pbnR0YWJsZV9y
ZW1vdmUodCwgKHVpbnRwdHJfdClrZXksIHZhbCk7Ci19Ci0KLXZvaWQgdXBiX2ludHRhYmxlX2Nv
bXBhY3QyKHVwYl9pbnR0YWJsZSAqdCwgdXBiX2FsbG9jICphKSB7Ci0gIC8qIEEgcG93ZXItb2Yt
dHdvIGhpc3RvZ3JhbSBvZiB0aGUgdGFibGUga2V5cy4gKi8KLSAgc2l6ZV90IGNvdW50c1tVUEJf
TUFYQVJSU0laRSArIDFdID0gezB9OwotCi0gIC8qIFRoZSBtYXgga2V5IGluIGVhY2ggYnVja2V0
LiAqLwotICB1aW50cHRyX3QgbWF4W1VQQl9NQVhBUlJTSVpFICsgMV0gPSB7MH07Ci0KLSAgdXBi
X2ludHRhYmxlX2l0ZXIgaTsKLSAgc2l6ZV90IGFycl9jb3VudDsKLSAgaW50IHNpemVfbGcyOwot
ICB1cGJfaW50dGFibGUgbmV3X3Q7Ci0KLSAgdXBiX2NoZWNrX2FsbG9jKCZ0LT50LCBhKTsKLQot
ICB1cGJfaW50dGFibGVfYmVnaW4oJmksIHQpOwotICBmb3IgKDsgIXVwYl9pbnR0YWJsZV9kb25l
KCZpKTsgdXBiX2ludHRhYmxlX25leHQoJmkpKSB7Ci0gICAgdWludHB0cl90IGtleSA9IHVwYl9p
bnR0YWJsZV9pdGVyX2tleSgmaSk7Ci0gICAgaW50IGJ1Y2tldCA9IGxvZzJjZWlsKGtleSk7Ci0g
ICAgbWF4W2J1Y2tldF0gPSBVUEJfTUFYKG1heFtidWNrZXRdLCBrZXkpOwotICAgIGNvdW50c1ti
dWNrZXRdKys7Ci0gIH0KLQotICAvKiBGaW5kIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byB0aGF0
IHNhdGlzZmllcyB0aGUgTUlOX0RFTlNJVFkKLSAgICogZGVmaW5pdGlvbiAod2hpbGUgYWN0dWFs
bHkgaGF2aW5nIHNvbWUga2V5cykuICovCi0gIGFycl9jb3VudCA9IHVwYl9pbnR0YWJsZV9jb3Vu
dCh0KTsKLQotICBmb3IgKHNpemVfbGcyID0gQVJSQVlfU0laRShjb3VudHMpIC0gMTsgc2l6ZV9s
ZzIgPiAwOyBzaXplX2xnMi0tKSB7Ci0gICAgaWYgKGNvdW50c1tzaXplX2xnMl0gPT0gMCkgewot
ICAgICAgLyogV2UgY2FuIGhhbHZlIGFnYWluIHdpdGhvdXQgbG9zaW5nIGFueSBlbnRyaWVzLiAq
LwotICAgICAgY29udGludWU7Ci0gICAgfSBlbHNlIGlmIChhcnJfY291bnQgPj0gKDEgPDwgc2l6
ZV9sZzIpICogTUlOX0RFTlNJVFkpIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGFycl9j
b3VudCAtPSBjb3VudHNbc2l6ZV9sZzJdOwotICB9Ci0KLSAgYXNzZXJ0KGFycl9jb3VudCA8PSB1
cGJfaW50dGFibGVfY291bnQodCkpOwotCi0gIHsKLSAgICAvKiBJbnNlcnQgYWxsIGVsZW1lbnRz
IGludG8gbmV3LCBwZXJmZWN0bHktc2l6ZWQgdGFibGUuICovCi0gICAgc2l6ZV90IGFycl9zaXpl
ID0gbWF4W3NpemVfbGcyXSArIDE7ICAvKiArMSBzbyBhcnJbbWF4XSB3aWxsIGZpdC4gKi8KLSAg
ICBzaXplX3QgaGFzaF9jb3VudCA9IHVwYl9pbnR0YWJsZV9jb3VudCh0KSAtIGFycl9jb3VudDsK
LSAgICBzaXplX3QgaGFzaF9zaXplID0gaGFzaF9jb3VudCA/IChoYXNoX2NvdW50IC8gTUFYX0xP
QUQpICsgMSA6IDA7Ci0gICAgc2l6ZV90IGhhc2hzaXplX2xnMiA9IGxvZzJjZWlsKGhhc2hfc2l6
ZSk7Ci0KLSAgICB1cGJfaW50dGFibGVfc2l6ZWRpbml0KCZuZXdfdCwgdC0+dC5jdHlwZSwgYXJy
X3NpemUsIGhhc2hzaXplX2xnMiwgYSk7Ci0gICAgdXBiX2ludHRhYmxlX2JlZ2luKCZpLCB0KTsK
LSAgICBmb3IgKDsgIXVwYl9pbnR0YWJsZV9kb25lKCZpKTsgdXBiX2ludHRhYmxlX25leHQoJmkp
KSB7Ci0gICAgICB1aW50cHRyX3QgayA9IHVwYl9pbnR0YWJsZV9pdGVyX2tleSgmaSk7Ci0gICAg
ICB1cGJfaW50dGFibGVfaW5zZXJ0MigmbmV3X3QsIGssIHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVl
KCZpKSwgYSk7Ci0gICAgfQotICAgIGFzc2VydChuZXdfdC5hcnJheV9zaXplID09IGFycl9zaXpl
KTsKLSAgICBhc3NlcnQobmV3X3QudC5zaXplX2xnMiA9PSBoYXNoc2l6ZV9sZzIpOwotICB9Ci0g
IHVwYl9pbnR0YWJsZV91bmluaXQyKHQsIGEpOwotICAqdCA9IG5ld190OwotfQotCi0vKiBJdGVy
YXRpb24uICovCi0KLXN0YXRpYyBjb25zdCB1cGJfdGFiZW50ICppbnRfdGFiZW50KGNvbnN0IHVw
Yl9pbnR0YWJsZV9pdGVyICppKSB7Ci0gIGFzc2VydCghaS0+YXJyYXlfcGFydCk7Ci0gIHJldHVy
biAmaS0+dC0+dC5lbnRyaWVzW2ktPmluZGV4XTsKLX0KLQotc3RhdGljIHVwYl90YWJ2YWwgaW50
X2FycmVudChjb25zdCB1cGJfaW50dGFibGVfaXRlciAqaSkgewotICBhc3NlcnQoaS0+YXJyYXlf
cGFydCk7Ci0gIHJldHVybiBpLT50LT5hcnJheVtpLT5pbmRleF07Ci19Ci0KLXZvaWQgdXBiX2lu
dHRhYmxlX2JlZ2luKHVwYl9pbnR0YWJsZV9pdGVyICppLCBjb25zdCB1cGJfaW50dGFibGUgKnQp
IHsKLSAgaS0+dCA9IHQ7Ci0gIGktPmluZGV4ID0gLTE7Ci0gIGktPmFycmF5X3BhcnQgPSB0cnVl
OwotICB1cGJfaW50dGFibGVfbmV4dChpKTsKLX0KLQotdm9pZCB1cGJfaW50dGFibGVfbmV4dCh1
cGJfaW50dGFibGVfaXRlciAqaXRlcikgewotICBjb25zdCB1cGJfaW50dGFibGUgKnQgPSBpdGVy
LT50OwotICBpZiAoaXRlci0+YXJyYXlfcGFydCkgewotICAgIHdoaWxlICgrK2l0ZXItPmluZGV4
IDwgdC0+YXJyYXlfc2l6ZSkgewotICAgICAgaWYgKHVwYl9hcnJoYXMoaW50X2FycmVudChpdGVy
KSkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBpdGVyLT5hcnJheV9w
YXJ0ID0gZmFsc2U7Ci0gICAgaXRlci0+aW5kZXggPSBiZWdpbigmdC0+dCk7Ci0gIH0gZWxzZSB7
Ci0gICAgaXRlci0+aW5kZXggPSBuZXh0KCZ0LT50LCBpdGVyLT5pbmRleCk7Ci0gIH0KLX0KLQot
Ym9vbCB1cGJfaW50dGFibGVfZG9uZShjb25zdCB1cGJfaW50dGFibGVfaXRlciAqaSkgewotICBp
ZiAoaS0+YXJyYXlfcGFydCkgewotICAgIHJldHVybiBpLT5pbmRleCA+PSBpLT50LT5hcnJheV9z
aXplIHx8Ci0gICAgICAgICAgICF1cGJfYXJyaGFzKGludF9hcnJlbnQoaSkpOwotICB9IGVsc2Ug
ewotICAgIHJldHVybiBpLT5pbmRleCA+PSB1cGJfdGFibGVfc2l6ZSgmaS0+dC0+dCkgfHwKLSAg
ICAgICAgICAgdXBiX3RhYmVudF9pc2VtcHR5KGludF90YWJlbnQoaSkpOwotICB9Ci19Ci0KLXVp
bnRwdHJfdCB1cGJfaW50dGFibGVfaXRlcl9rZXkoY29uc3QgdXBiX2ludHRhYmxlX2l0ZXIgKmkp
IHsKLSAgYXNzZXJ0KCF1cGJfaW50dGFibGVfZG9uZShpKSk7Ci0gIHJldHVybiBpLT5hcnJheV9w
YXJ0ID8gaS0+aW5kZXggOiBpbnRfdGFiZW50KGkpLT5rZXk7Ci19Ci0KLXVwYl92YWx1ZSB1cGJf
aW50dGFibGVfaXRlcl92YWx1ZShjb25zdCB1cGJfaW50dGFibGVfaXRlciAqaSkgewotICBhc3Nl
cnQoIXVwYl9pbnR0YWJsZV9kb25lKGkpKTsKLSAgcmV0dXJuIF91cGJfdmFsdWVfdmFsKAotICAg
ICAgaS0+YXJyYXlfcGFydCA/IGktPnQtPmFycmF5W2ktPmluZGV4XS52YWwgOiBpbnRfdGFiZW50
KGkpLT52YWwudmFsLAotICAgICAgaS0+dC0+dC5jdHlwZSk7Ci19Ci0KLXZvaWQgdXBiX2ludHRh
YmxlX2l0ZXJfc2V0ZG9uZSh1cGJfaW50dGFibGVfaXRlciAqaSkgewotICBpLT5pbmRleCA9IFNJ
WkVfTUFYOwotICBpLT5hcnJheV9wYXJ0ID0gZmFsc2U7Ci19Ci0KLWJvb2wgdXBiX2ludHRhYmxl
X2l0ZXJfaXNlcXVhbChjb25zdCB1cGJfaW50dGFibGVfaXRlciAqaTEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfaW50dGFibGVfaXRlciAqaTIp
IHsKLSAgaWYgKHVwYl9pbnR0YWJsZV9kb25lKGkxKSAmJiB1cGJfaW50dGFibGVfZG9uZShpMikp
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIHJldHVybiBpMS0+dCA9PSBpMi0+dCAmJiBpMS0+aW5kZXgg
PT0gaTItPmluZGV4ICYmCi0gICAgICAgICBpMS0+YXJyYXlfcGFydCA9PSBpMi0+YXJyYXlfcGFy
dDsKLX0KLQotI2lmZGVmIFVQQl9VTkFMSUdORURfUkVBRFNfT0sKLS8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gKiBNdXJtdXJIYXNoMiwgYnkgQXVzdGluIEFwcGxlYnkgKHJlbGVhc2VkIGFzIHB1
YmxpYyBkb21haW4pLgotICogUmVmb3JtYXR0ZWQgYW5kIEM5OS1pZmllZCBieSBKb3NodWEgSGFi
ZXJtYW4uCi0gKiBOb3RlIC0gVGhpcyBjb2RlIG1ha2VzIGEgZmV3IGFzc3VtcHRpb25zIGFib3V0
IGhvdyB5b3VyIG1hY2hpbmUgYmVoYXZlcyAtCi0gKiAgIDEuIFdlIGNhbiByZWFkIGEgNC1ieXRl
IHZhbHVlIGZyb20gYW55IGFkZHJlc3Mgd2l0aG91dCBjcmFzaGluZwotICogICAyLiBzaXplb2Yo
aW50KSA9PSA0IChpbiB1cGIgdGhpcyBsaW1pdGF0aW9uIGlzIHJlbW92ZWQgYnkgdXNpbmcgdWlu
dDMyX3QKLSAqIEFuZCBpdCBoYXMgYSBmZXcgbGltaXRhdGlvbnMgLQotICogICAxLiBJdCB3aWxs
IG5vdCB3b3JrIGluY3JlbWVudGFsbHkuCi0gKiAgIDIuIEl0IHdpbGwgbm90IHByb2R1Y2UgdGhl
IHNhbWUgcmVzdWx0cyBvbiBsaXR0bGUtZW5kaWFuIGFuZCBiaWctZW5kaWFuCi0gKiAgICAgIG1h
Y2hpbmVzLiAqLwotdWludDMyX3QgTXVybXVySGFzaDIoY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qg
bGVuLCB1aW50MzJfdCBzZWVkKSB7Ci0gIC8qICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3Rh
bnRzIGdlbmVyYXRlZCBvZmZsaW5lLgotICAgKiBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywg
dGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuICovCi0gIGNvbnN0IHVpbnQzMl90IG0gPSAw
eDViZDFlOTk1OwotICBjb25zdCBpbnQzMl90IHIgPSAyNDsKLQotICAvKiBJbml0aWFsaXplIHRo
ZSBoYXNoIHRvIGEgJ3JhbmRvbScgdmFsdWUgKi8KLSAgdWludDMyX3QgaCA9IHNlZWQgXiBsZW47
Ci0KLSAgLyogTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2ggKi8KLSAgY29uc3Qg
dWludDhfdCAqIGRhdGEgPSAoY29uc3QgdWludDhfdCAqKWtleTsKLSAgd2hpbGUobGVuID49IDQp
IHsKLSAgICB1aW50MzJfdCBrID0gKih1aW50MzJfdCAqKWRhdGE7Ci0KLSAgICBrICo9IG07Ci0g
ICAgayBePSBrID4+IHI7Ci0gICAgayAqPSBtOwotCi0gICAgaCAqPSBtOwotICAgIGggXj0gazsK
LQotICAgIGRhdGEgKz0gNDsKLSAgICBsZW4gLT0gNDsKLSAgfQotCi0gIC8qIEhhbmRsZSB0aGUg
bGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5ICovCi0gIHN3aXRjaChsZW4pIHsKLSAg
ICBjYXNlIDM6IGggXj0gZGF0YVsyXSA8PCAxNjsKLSAgICBjYXNlIDI6IGggXj0gZGF0YVsxXSA8
PCA4OwotICAgIGNhc2UgMTogaCBePSBkYXRhWzBdOyBoICo9IG07Ci0gIH07Ci0KLSAgLyogRG8g
YSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZldwotICAg
KiBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuICovCi0gIGggXj0gaCA+PiAxMzsKLSAgaCAq
PSBtOwotICBoIF49IGggPj4gMTU7Ci0KLSAgcmV0dXJuIGg7Ci19Ci0KLSNlbHNlIC8qICFVUEJf
VU5BTElHTkVEX1JFQURTX09LICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBNdXJt
dXJIYXNoQWxpZ25lZDIsIGJ5IEF1c3RpbiBBcHBsZWJ5Ci0gKiBTYW1lIGFsZ29yaXRobSBhcyBN
dXJtdXJIYXNoMiwgYnV0IG9ubHkgZG9lcyBhbGlnbmVkIHJlYWRzIC0gc2hvdWxkIGJlIHNhZmVy
Ci0gKiBvbiBjZXJ0YWluIHBsYXRmb3Jtcy4KLSAqIFBlcmZvcm1hbmNlIHdpbGwgYmUgbG93ZXIg
dGhhbiBNdXJtdXJIYXNoMiAqLwotCi0jZGVmaW5lIE1JWChoLGssbSkgeyBrICo9IG07IGsgXj0g
ayA+PiByOyBrICo9IG07IGggKj0gbTsgaCBePSBrOyB9Ci0KLXVpbnQzMl90IE11cm11ckhhc2gy
KGNvbnN0IHZvaWQgKiBrZXksIHNpemVfdCBsZW4sIHVpbnQzMl90IHNlZWQpIHsKLSAgY29uc3Qg
dWludDMyX3QgbSA9IDB4NWJkMWU5OTU7Ci0gIGNvbnN0IGludDMyX3QgciA9IDI0OwotICBjb25z
dCB1aW50OF90ICogZGF0YSA9IChjb25zdCB1aW50OF90ICopa2V5OwotICB1aW50MzJfdCBoID0g
c2VlZCBeIGxlbjsKLSAgdWludDhfdCBhbGlnbiA9ICh1aW50cHRyX3QpZGF0YSAmIDM7Ci0KLSAg
aWYoYWxpZ24gJiYgKGxlbiA+PSA0KSkgewotICAgIC8qIFByZS1sb2FkIHRoZSB0ZW1wIHJlZ2lz
dGVycyAqLwotICAgIHVpbnQzMl90IHQgPSAwLCBkID0gMDsKLSAgICBpbnQzMl90IHNsOwotICAg
IGludDMyX3Qgc3I7Ci0KLSAgICBzd2l0Y2goYWxpZ24pIHsKLSAgICAgIGNhc2UgMTogdCB8PSBk
YXRhWzJdIDw8IDE2OwotICAgICAgY2FzZSAyOiB0IHw9IGRhdGFbMV0gPDwgODsKLSAgICAgIGNh
c2UgMzogdCB8PSBkYXRhWzBdOwotICAgIH0KLQotICAgIHQgPDw9ICg4ICogYWxpZ24pOwotCi0g
ICAgZGF0YSArPSA0LWFsaWduOwotICAgIGxlbiAtPSA0LWFsaWduOwotCi0gICAgc2wgPSA4ICog
KDQtYWxpZ24pOwotICAgIHNyID0gOCAqIGFsaWduOwotCi0gICAgLyogTWl4ICovCi0KLSAgICB3
aGlsZShsZW4gPj0gNCkgewotICAgICAgdWludDMyX3QgazsKLQotICAgICAgZCA9ICoodWludDMy
X3QgKilkYXRhOwotICAgICAgdCA9ICh0ID4+IHNyKSB8IChkIDw8IHNsKTsKLQotICAgICAgayA9
IHQ7Ci0KLSAgICAgIE1JWChoLGssbSk7Ci0KLSAgICAgIHQgPSBkOwotCi0gICAgICBkYXRhICs9
IDQ7Ci0gICAgICBsZW4gLT0gNDsKLSAgICB9Ci0KLSAgICAvKiBIYW5kbGUgbGVmdG92ZXIgZGF0
YSBpbiB0ZW1wIHJlZ2lzdGVycyAqLwotCi0gICAgZCA9IDA7Ci0KLSAgICBpZihsZW4gPj0gYWxp
Z24pIHsKLSAgICAgIHVpbnQzMl90IGs7Ci0KLSAgICAgIHN3aXRjaChhbGlnbikgewotICAgICAg
ICBjYXNlIDM6IGQgfD0gZGF0YVsyXSA8PCAxNjsKLSAgICAgICAgY2FzZSAyOiBkIHw9IGRhdGFb
MV0gPDwgODsKLSAgICAgICAgY2FzZSAxOiBkIHw9IGRhdGFbMF07Ci0gICAgICB9Ci0KLSAgICAg
IGsgPSAodCA+PiBzcikgfCAoZCA8PCBzbCk7Ci0gICAgICBNSVgoaCxrLG0pOwotCi0gICAgICBk
YXRhICs9IGFsaWduOwotICAgICAgbGVuIC09IGFsaWduOwotCi0gICAgICAvKiAtLS0tLS0tLS0t
Ci0gICAgICAgKiBIYW5kbGUgdGFpbCBieXRlcyAqLwotCi0gICAgICBzd2l0Y2gobGVuKSB7Ci0g
ICAgICAgIGNhc2UgMzogaCBePSBkYXRhWzJdIDw8IDE2OwotICAgICAgICBjYXNlIDI6IGggXj0g
ZGF0YVsxXSA8PCA4OwotICAgICAgICBjYXNlIDE6IGggXj0gZGF0YVswXTsgaCAqPSBtOwotICAg
ICAgfTsKLSAgICB9IGVsc2UgewotICAgICAgc3dpdGNoKGxlbikgewotICAgICAgICBjYXNlIDM6
IGQgfD0gZGF0YVsyXSA8PCAxNjsKLSAgICAgICAgY2FzZSAyOiBkIHw9IGRhdGFbMV0gPDwgODsK
LSAgICAgICAgY2FzZSAxOiBkIHw9IGRhdGFbMF07Ci0gICAgICAgIGNhc2UgMDogaCBePSAodCA+
PiBzcikgfCAoZCA8PCBzbCk7IGggKj0gbTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBoIF49IGgg
Pj4gMTM7Ci0gICAgaCAqPSBtOwotICAgIGggXj0gaCA+PiAxNTsKLQotICAgIHJldHVybiBoOwot
ICB9IGVsc2UgewotICAgIHdoaWxlKGxlbiA+PSA0KSB7Ci0gICAgICB1aW50MzJfdCBrID0gKih1
aW50MzJfdCAqKWRhdGE7Ci0KLSAgICAgIE1JWChoLGssbSk7Ci0KLSAgICAgIGRhdGEgKz0gNDsK
LSAgICAgIGxlbiAtPSA0OwotICAgIH0KLQotICAgIC8qIC0tLS0tLS0tLS0KLSAgICAgKiBIYW5k
bGUgdGFpbCBieXRlcyAqLwotCi0gICAgc3dpdGNoKGxlbikgewotICAgICAgY2FzZSAzOiBoIF49
IGRhdGFbMl0gPDwgMTY7Ci0gICAgICBjYXNlIDI6IGggXj0gZGF0YVsxXSA8PCA4OwotICAgICAg
Y2FzZSAxOiBoIF49IGRhdGFbMF07IGggKj0gbTsKLSAgICB9OwotCi0gICAgaCBePSBoID4+IDEz
OwotICAgIGggKj0gbTsKLSAgICBoIF49IGggPj4gMTU7Ci0KLSAgICByZXR1cm4gaDsKLSAgfQot
fQotI3VuZGVmIE1JWAotCi0jZW5kaWYgLyogVVBCX1VOQUxJR05FRF9SRUFEU19PSyAqLwotCi0j
aW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRkZWYu
aD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1ib29sIHVwYl9kdW1wdG9zdGRlcnIodm9p
ZCAqY2xvc3VyZSwgY29uc3QgdXBiX3N0YXR1cyogc3RhdHVzKSB7Ci0gIFVQQl9VTlVTRUQoY2xv
c3VyZSk7Ci0gIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHVwYl9zdGF0dXNfZXJybXNnKHN0YXR1
cykpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8qIEd1YXJhbnRlZSBudWxsLXRlcm1pbmF0aW9u
IGFuZCBwcm92aWRlIGVsbGlwc2lzIHRydW5jYXRpb24uCi0gKiBJdCBtYXkgYmUgdGVtcHRpbmcg
dG8gIm9wdGltaXplIiB0aGlzIGJ5IGluaXRpYWxpemluZyB0aGVzZSBmaW5hbAotICogZm91ciBi
eXRlcyB1cC1mcm9udCBhbmQgdGhlbiBiZWluZyBjYXJlZnVsIG5ldmVyIHRvIG92ZXJ3cml0ZSB0
aGVtLAotICogdGhpcyBpcyBzYWZlciBhbmQgc2ltcGxlci4gKi8KLXN0YXRpYyB2b2lkIG51bGx6
KHVwYl9zdGF0dXMgKnN0YXR1cykgewotICBjb25zdCBjaGFyICplbGxpcHNpcyA9ICIuLi4iOwot
ICBzaXplX3QgbGVuID0gc3RybGVuKGVsbGlwc2lzKTsKLSAgYXNzZXJ0KHNpemVvZihzdGF0dXMt
Pm1zZykgPiBsZW4pOwotICBtZW1jcHkoc3RhdHVzLT5tc2cgKyBzaXplb2Yoc3RhdHVzLT5tc2cp
IC0gbGVuLCBlbGxpcHNpcywgbGVuKTsKLX0KLQotCi0vKiB1cGJfdXBiZXJyICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ci11cGJfZXJyb3JzcGFjZSB1cGJfdXBiZXJyID0geyJ1cGIgZXJyb3IifTsKLQotdm9pZCB1cGJf
dXBiZXJyX3NldG9vbSh1cGJfc3RhdHVzICpzdGF0dXMpIHsKLSAgc3RhdHVzLT5lcnJvcl9zcGFj
ZV8gPSAmdXBiX3VwYmVycjsKLSAgdXBiX3N0YXR1c19zZXRlcnJtc2coc3RhdHVzLCAiT3V0IG9m
IG1lbW9yeSIpOwotfQotCi0KLS8qIHVwYl9zdGF0dXMgKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgdXBiX3N0
YXR1c19jbGVhcih1cGJfc3RhdHVzICpzdGF0dXMpIHsKLSAgaWYgKCFzdGF0dXMpIHJldHVybjsK
LSAgc3RhdHVzLT5va18gPSB0cnVlOwotICBzdGF0dXMtPmNvZGVfID0gMDsKLSAgc3RhdHVzLT5t
c2dbMF0gPSAnXDAnOwotfQotCi1ib29sIHVwYl9vayhjb25zdCB1cGJfc3RhdHVzICpzdGF0dXMp
IHsgcmV0dXJuIHN0YXR1cy0+b2tfOyB9Ci0KLXVwYl9lcnJvcnNwYWNlICp1cGJfc3RhdHVzX2Vy
cnNwYWNlKGNvbnN0IHVwYl9zdGF0dXMgKnN0YXR1cykgewotICByZXR1cm4gc3RhdHVzLT5lcnJv
cl9zcGFjZV87Ci19Ci0KLWludCB1cGJfc3RhdHVzX2VycmNvZGUoY29uc3QgdXBiX3N0YXR1cyAq
c3RhdHVzKSB7IHJldHVybiBzdGF0dXMtPmNvZGVfOyB9Ci0KLWNvbnN0IGNoYXIgKnVwYl9zdGF0
dXNfZXJybXNnKGNvbnN0IHVwYl9zdGF0dXMgKnN0YXR1cykgeyByZXR1cm4gc3RhdHVzLT5tc2c7
IH0KLQotdm9pZCB1cGJfc3RhdHVzX3NldGVycm1zZyh1cGJfc3RhdHVzICpzdGF0dXMsIGNvbnN0
IGNoYXIgKm1zZykgewotICBpZiAoIXN0YXR1cykgcmV0dXJuOwotICBzdGF0dXMtPm9rXyA9IGZh
bHNlOwotICBzdHJuY3B5KHN0YXR1cy0+bXNnLCBtc2csIHNpemVvZihzdGF0dXMtPm1zZykpOwot
ICBudWxseihzdGF0dXMpOwotfQotCi12b2lkIHVwYl9zdGF0dXNfc2V0ZXJyZih1cGJfc3RhdHVz
ICpzdGF0dXMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFf
c3RhcnQoYXJncywgZm10KTsKLSAgdXBiX3N0YXR1c192c2V0ZXJyZihzdGF0dXMsIGZtdCwgYXJn
cyk7Ci0gIHZhX2VuZChhcmdzKTsKLX0KLQotdm9pZCB1cGJfc3RhdHVzX3ZzZXRlcnJmKHVwYl9z
dGF0dXMgKnN0YXR1cywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpIHsKLSAgaWYgKCFz
dGF0dXMpIHJldHVybjsKLSAgc3RhdHVzLT5va18gPSBmYWxzZTsKLSAgX3VwYl92c25wcmludGYo
c3RhdHVzLT5tc2csIHNpemVvZihzdGF0dXMtPm1zZyksIGZtdCwgYXJncyk7Ci0gIG51bGx6KHN0
YXR1cyk7Ci19Ci0KLXZvaWQgdXBiX3N0YXR1c19jb3B5KHVwYl9zdGF0dXMgKnRvLCBjb25zdCB1
cGJfc3RhdHVzICpmcm9tKSB7Ci0gIGlmICghdG8pIHJldHVybjsKLSAgKnRvID0gKmZyb207Ci19
Ci0KLQotLyogdXBiX2FsbG9jICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgKnVwYl9nbG9iYWxf
YWxsb2NmdW5jKHVwYl9hbGxvYyAqYWxsb2MsIHZvaWQgKnB0ciwgc2l6ZV90IG9sZHNpemUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpIHsKLSAgVVBCX1VO
VVNFRChhbGxvYyk7Ci0gIFVQQl9VTlVTRUQob2xkc2l6ZSk7Ci0gIGlmIChzaXplID09IDApIHsK
LSAgICBmcmVlKHB0cik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJu
IHJlYWxsb2MocHRyLCBzaXplKTsKLSAgfQotfQotCi11cGJfYWxsb2MgdXBiX2FsbG9jX2dsb2Jh
bCA9IHsmdXBiX2dsb2JhbF9hbGxvY2Z1bmN9OwotCi0KLS8qIHVwYl9hcmVuYSAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0KLS8qIEJlIGNvbnNlcnZhdGl2ZSBhbmQgY2hvb3NlIDE2IGluIGNhc2UgYW55b25lIGlzIHVz
aW5nIFNTRS4gKi8KLXN0YXRpYyBjb25zdCBzaXplX3QgbWF4YWxpZ24gPSAxNjsKLQotc3RhdGlj
IHNpemVfdCBhbGlnbl91cChzaXplX3Qgc2l6ZSkgewotICByZXR1cm4gKChzaXplICsgbWF4YWxp
Z24gLSAxKSAvIG1heGFsaWduKSAqIG1heGFsaWduOwotfQotCi10eXBlZGVmIHN0cnVjdCBtZW1f
YmxvY2sgewotICBzdHJ1Y3QgbWVtX2Jsb2NrICpuZXh0OwotICBzaXplX3Qgc2l6ZTsKLSAgc2l6
ZV90IHVzZWQ7Ci0gIGJvb2wgb3duZWQ7Ci0gIC8qIERhdGEgZm9sbG93cy4gKi8KLX0gbWVtX2Js
b2NrOwotCi10eXBlZGVmIHN0cnVjdCBjbGVhbnVwX2VudCB7Ci0gIHN0cnVjdCBjbGVhbnVwX2Vu
dCAqbmV4dDsKLSAgdXBiX2NsZWFudXBfZnVuYyAqY2xlYW51cDsKLSAgdm9pZCAqdWQ7Ci19IGNs
ZWFudXBfZW50OwotCi1zdGF0aWMgdm9pZCB1cGJfYXJlbmFfYWRkYmxvY2sodXBiX2FyZW5hICph
LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgb3duZWQpIHsKLSAgbWVtX2Jsb2NrICpibG9jayA9IHB0cjsKLQotICBibG9jay0+bmV4
dCA9IGEtPmJsb2NrX2hlYWQ7Ci0gIGJsb2NrLT5zaXplID0gc2l6ZTsKLSAgYmxvY2stPnVzZWQg
PSBhbGlnbl91cChzaXplb2YobWVtX2Jsb2NrKSk7Ci0gIGJsb2NrLT5vd25lZCA9IG93bmVkOwot
Ci0gIGEtPmJsb2NrX2hlYWQgPSBibG9jazsKLQotICAvKiBUT0RPKGhhYmVybWFuKTogQVNBTiBw
b2lzb24uICovCi19Ci0KLQotc3RhdGljIG1lbV9ibG9jayAqdXBiX2FyZW5hX2FsbG9jYmxvY2so
dXBiX2FyZW5hICphLCBzaXplX3Qgc2l6ZSkgewotICBzaXplX3QgYmxvY2tfc2l6ZSA9IFVQQl9N
QVgoc2l6ZSwgYS0+bmV4dF9ibG9ja19zaXplKSArIHNpemVvZihtZW1fYmxvY2spOwotICBtZW1f
YmxvY2sgKmJsb2NrID0gdXBiX21hbGxvYyhhLT5ibG9ja19hbGxvYywgYmxvY2tfc2l6ZSk7Ci0K
LSAgaWYgKCFibG9jaykgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgdXBiX2FyZW5hX2Fk
ZGJsb2NrKGEsIGJsb2NrLCBibG9ja19zaXplLCB0cnVlKTsKLSAgYS0+bmV4dF9ibG9ja19zaXpl
ID0gVVBCX01JTihibG9ja19zaXplICogMiwgYS0+bWF4X2Jsb2NrX3NpemUpOwotCi0gIHJldHVy
biBibG9jazsKLX0KLQotc3RhdGljIHZvaWQgKnVwYl9hcmVuYV9kb2FsbG9jKHVwYl9hbGxvYyAq
YWxsb2MsIHZvaWQgKnB0ciwgc2l6ZV90IG9sZHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHNpemUpIHsKLSAgdXBiX2FyZW5hICphID0gKHVwYl9hcmVuYSopYWxs
b2M7ICAvKiB1cGJfYWxsb2MgaXMgaW5pdGlhbCBtZW1iZXIuICovCi0gIG1lbV9ibG9jayAqYmxv
Y2sgPSBhLT5ibG9ja19oZWFkOwotICB2b2lkICpyZXQ7Ci0KLSAgaWYgKHNpemUgPT0gMCkgewot
ICAgIHJldHVybiBOVUxMOyAgLyogV2UgYXJlIGFuIGFyZW5hLCBkb24ndCBuZWVkIGluZGl2aWR1
YWwgZnJlZXMuICovCi0gIH0KLQotICBzaXplID0gYWxpZ25fdXAoc2l6ZSk7Ci0KLSAgLyogVE9E
TyhoYWJlcm1hbik6IHNwZWNpYWwtY2FzZSBpZiB0aGlzIGlzIGEgcmVhbGxvYyBvZiB0aGUgbGFz
dCBhbGxvYz8gKi8KLQotICBpZiAoIWJsb2NrIHx8IGJsb2NrLT5zaXplIC0gYmxvY2stPnVzZWQg
PCBzaXplKSB7Ci0gICAgLyogU2xvdyBwYXRoOiBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IGJsb2Nr
LiAqLwotICAgIGJsb2NrID0gdXBiX2FyZW5hX2FsbG9jYmxvY2soYSwgc2l6ZSk7Ci0KLSAgICBp
ZiAoIWJsb2NrKSB7Ci0gICAgICByZXR1cm4gTlVMTDsgIC8qIE91dCBvZiBtZW1vcnkuICovCi0g
ICAgfQotICB9Ci0KLSAgcmV0ID0gKGNoYXIqKWJsb2NrICsgYmxvY2stPnVzZWQ7Ci0gIGJsb2Nr
LT51c2VkICs9IHNpemU7Ci0KLSAgaWYgKG9sZHNpemUgPiAwKSB7Ci0gICAgbWVtY3B5KHJldCwg
cHRyLCBvbGRzaXplKTsgIC8qIFByZXNlcnZlIGV4aXN0aW5nIGRhdGEuICovCi0gIH0KLQotICAv
KiBUT0RPKGhhYmVybWFuKTogQVNBTiB1bnBvaXNvbi4gKi8KLQotICBhLT5ieXRlc19hbGxvY2F0
ZWQgKz0gc2l6ZTsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyogUHVibGljIEFyZW5hIEFQSSAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
LQotdm9pZCB1cGJfYXJlbmFfaW5pdCh1cGJfYXJlbmEgKmEpIHsKLSAgYS0+YWxsb2MuZnVuYyA9
ICZ1cGJfYXJlbmFfZG9hbGxvYzsKLSAgYS0+YmxvY2tfYWxsb2MgPSAmdXBiX2FsbG9jX2dsb2Jh
bDsKLSAgYS0+Ynl0ZXNfYWxsb2NhdGVkID0gMDsKLSAgYS0+bmV4dF9ibG9ja19zaXplID0gMjU2
OwotICBhLT5tYXhfYmxvY2tfc2l6ZSA9IDE2Mzg0OwotICBhLT5jbGVhbnVwX2hlYWQgPSBOVUxM
OwotICBhLT5ibG9ja19oZWFkID0gTlVMTDsKLX0KLQotdm9pZCB1cGJfYXJlbmFfaW5pdDIodXBi
X2FyZW5hICphLCB2b2lkICptZW0sIHNpemVfdCBzaXplLCB1cGJfYWxsb2MgKmFsbG9jKSB7Ci0g
IHVwYl9hcmVuYV9pbml0KGEpOwotCi0gIGlmIChzaXplID4gc2l6ZW9mKG1lbV9ibG9jaykpIHsK
LSAgICB1cGJfYXJlbmFfYWRkYmxvY2soYSwgbWVtLCBzaXplLCBmYWxzZSk7Ci0gIH0KLQotICBp
ZiAoYWxsb2MpIHsKLSAgICBhLT5ibG9ja19hbGxvYyA9IGFsbG9jOwotICB9Ci19Ci0KLXZvaWQg
dXBiX2FyZW5hX3VuaW5pdCh1cGJfYXJlbmEgKmEpIHsKLSAgY2xlYW51cF9lbnQgKmVudCA9IGEt
PmNsZWFudXBfaGVhZDsKLSAgbWVtX2Jsb2NrICpibG9jayA9IGEtPmJsb2NrX2hlYWQ7Ci0KLSAg
d2hpbGUgKGVudCkgewotICAgIGVudC0+Y2xlYW51cChlbnQtPnVkKTsKLSAgICBlbnQgPSBlbnQt
Pm5leHQ7Ci0gIH0KLQotICAvKiBNdXN0IGRvIHRoaXMgYWZ0ZXIgcnVubmluZyBjbGVhbnVwIGZ1
bmN0aW9ucywgYmVjYXVzZSB0aGlzIHdpbGwgZGVsZXRlCi0gICAqIHRoZSBtZW1vcnkgd2Ugc3Rv
cmUgb3VyIGNsZWFudXAgZW50cmllcyBpbiEgKi8KLSAgd2hpbGUgKGJsb2NrKSB7Ci0gICAgbWVt
X2Jsb2NrICpuZXh0ID0gYmxvY2stPm5leHQ7Ci0KLSAgICBpZiAoYmxvY2stPm93bmVkKSB7Ci0g
ICAgICB1cGJfZnJlZShhLT5ibG9ja19hbGxvYywgYmxvY2spOwotICAgIH0KLQotICAgIGJsb2Nr
ID0gbmV4dDsKLSAgfQotfQotCi1ib29sIHVwYl9hcmVuYV9hZGRjbGVhbnVwKHVwYl9hcmVuYSAq
YSwgdXBiX2NsZWFudXBfZnVuYyAqZnVuYywgdm9pZCAqdWQpIHsKLSAgY2xlYW51cF9lbnQgKmVu
dCA9IHVwYl9tYWxsb2MoJmEtPmFsbG9jLCBzaXplb2YoY2xlYW51cF9lbnQpKTsKLSAgaWYgKCFl
bnQpIHsKLSAgICByZXR1cm4gZmFsc2U7ICAvKiBPdXQgb2YgbWVtb3J5LiAqLwotICB9Ci0KLSAg
ZW50LT5jbGVhbnVwID0gZnVuYzsKLSAgZW50LT51ZCA9IHVkOwotICBlbnQtPm5leHQgPSBhLT5j
bGVhbnVwX2hlYWQ7Ci0gIGEtPmNsZWFudXBfaGVhZCA9IGVudDsKLQotICByZXR1cm4gdHJ1ZTsK
LX0KLQotc2l6ZV90IHVwYl9hcmVuYV9ieXRlc2FsbG9jYXRlZChjb25zdCB1cGJfYXJlbmEgKmEp
IHsKLSAgcmV0dXJuIGEtPmJ5dGVzX2FsbG9jYXRlZDsKLX0KLQotCi0vKiBTdGFuZGFyZCBlcnJv
ciBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwotCi1zdGF0aWMgYm9vbCBkZWZhdWx0X2Vycih2b2lkICp1ZCwgY29uc3QgdXBiX3N0
YXR1cyAqc3RhdHVzKSB7Ci0gIFVQQl9VTlVTRUQodWQpOwotICBVUEJfVU5VU0VEKHN0YXR1cyk7
Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgd3JpdGVfZXJyX3RvKHZvaWQgKnVk
LCBjb25zdCB1cGJfc3RhdHVzICpzdGF0dXMpIHsKLSAgdXBiX3N0YXR1cyAqY29weV90byA9IHVk
OwotICB1cGJfc3RhdHVzX2NvcHkoY29weV90bywgc3RhdHVzKTsKLSAgcmV0dXJuIGZhbHNlOwot
fQotCi0KLS8qIHVwYl9lbnYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgdXBiX2Vudl9pbml0b25seSh1
cGJfZW52ICplKSB7Ci0gIGUtPm9rXyA9IHRydWU7Ci0gIGUtPmVycm9yX2Z1bmNfID0gJmRlZmF1
bHRfZXJyOwotICBlLT5lcnJvcl91ZF8gPSBOVUxMOwotfQotCi12b2lkIHVwYl9lbnZfaW5pdCh1
cGJfZW52ICplKSB7Ci0gIHVwYl9hcmVuYV9pbml0KCZlLT5hcmVuYV8pOwotICB1cGJfZW52X2lu
aXRvbmx5KGUpOwotfQotCi12b2lkIHVwYl9lbnZfaW5pdDIodXBiX2VudiAqZSwgdm9pZCAqbWVt
LCBzaXplX3QgbiwgdXBiX2FsbG9jICphbGxvYykgewotICB1cGJfYXJlbmFfaW5pdDIoJmUtPmFy
ZW5hXywgbWVtLCBuLCBhbGxvYyk7Ci0gIHVwYl9lbnZfaW5pdG9ubHkoZSk7Ci19Ci0KLXZvaWQg
dXBiX2Vudl91bmluaXQodXBiX2VudiAqZSkgewotICB1cGJfYXJlbmFfdW5pbml0KCZlLT5hcmVu
YV8pOwotfQotCi12b2lkIHVwYl9lbnZfc2V0ZXJyb3JmdW5jKHVwYl9lbnYgKmUsIHVwYl9lcnJv
cl9mdW5jICpmdW5jLCB2b2lkICp1ZCkgewotICBlLT5lcnJvcl9mdW5jXyA9IGZ1bmM7Ci0gIGUt
PmVycm9yX3VkXyA9IHVkOwotfQotCi12b2lkIHVwYl9lbnZfcmVwb3J0ZXJyb3JzdG8odXBiX2Vu
diAqZSwgdXBiX3N0YXR1cyAqcykgewotICBlLT5lcnJvcl9mdW5jXyA9ICZ3cml0ZV9lcnJfdG87
Ci0gIGUtPmVycm9yX3VkXyA9IHM7Ci19Ci0KLWJvb2wgdXBiX2Vudl9yZXBvcnRlcnJvcih1cGJf
ZW52ICplLCBjb25zdCB1cGJfc3RhdHVzICpzdGF0dXMpIHsKLSAgZS0+b2tfID0gZmFsc2U7Ci0g
IHJldHVybiBlLT5lcnJvcl9mdW5jXyhlLT5lcnJvcl91ZF8sIHN0YXR1cyk7Ci19Ci0KLXZvaWQg
KnVwYl9lbnZfbWFsbG9jKHVwYl9lbnYgKmUsIHNpemVfdCBzaXplKSB7Ci0gIHJldHVybiB1cGJf
bWFsbG9jKCZlLT5hcmVuYV8uYWxsb2MsIHNpemUpOwotfQotCi12b2lkICp1cGJfZW52X3JlYWxs
b2ModXBiX2VudiAqZSwgdm9pZCAqcHRyLCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUpIHsK
LSAgcmV0dXJuIHVwYl9yZWFsbG9jKCZlLT5hcmVuYV8uYWxsb2MsIHB0ciwgb2xkc2l6ZSwgc2l6
ZSk7Ci19Ci0KLXZvaWQgdXBiX2Vudl9mcmVlKHVwYl9lbnYgKmUsIHZvaWQgKnB0cikgewotICB1
cGJfZnJlZSgmZS0+YXJlbmFfLmFsbG9jLCBwdHIpOwotfQotCi1ib29sIHVwYl9lbnZfYWRkY2xl
YW51cCh1cGJfZW52ICplLCB1cGJfY2xlYW51cF9mdW5jICpmdW5jLCB2b2lkICp1ZCkgewotICBy
ZXR1cm4gdXBiX2FyZW5hX2FkZGNsZWFudXAoJmUtPmFyZW5hXywgZnVuYywgdWQpOwotfQotCi1z
aXplX3QgdXBiX2Vudl9ieXRlc2FsbG9jYXRlZChjb25zdCB1cGJfZW52ICplKSB7Ci0gIHJldHVy
biB1cGJfYXJlbmFfYnl0ZXNhbGxvY2F0ZWQoJmUtPmFyZW5hXyk7Ci19Ci0vKiBUaGlzIGZpbGUg
d2FzIGdlbmVyYXRlZCBieSB1cGJjICh0aGUgdXBiIGNvbXBpbGVyKSBmcm9tIHRoZSBpbnB1dAot
ICogZmlsZToKLSAqCi0gKiAgICAgdXBiL2Rlc2NyaXB0b3IvZGVzY3JpcHRvci5wcm90bwotICoK
LSAqIERvIG5vdCBlZGl0IC0tIHlvdXIgY2hhbmdlcyB3aWxsIGJlIGRpc2NhcmRlZCB3aGVuIHRo
ZSBmaWxlIGlzCi0gKiByZWdlbmVyYXRlZC4gKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0K
LXN0YXRpYyBjb25zdCB1cGJfbXNnZGVmIG1zZ3NbMjJdOwotc3RhdGljIGNvbnN0IHVwYl9maWVs
ZGRlZiBmaWVsZHNbMTA1XTsKLXN0YXRpYyBjb25zdCB1cGJfZW51bWRlZiBlbnVtc1s1XTsKLXN0
YXRpYyBjb25zdCB1cGJfdGFiZW50IHN0cmVudHJpZXNbMjM2XTsKLXN0YXRpYyBjb25zdCB1cGJf
dGFiZW50IGludGVudHJpZXNbMThdOwotc3RhdGljIGNvbnN0IHVwYl90YWJ2YWwgYXJyYXlzWzE4
NF07Ci0KLSNpZmRlZiBVUEJfREVCVUdfUkVGUwotc3RhdGljIHVwYl9pbnR0YWJsZSByZWZ0YWJs
ZXNbMjY0XTsKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgdXBiX21zZ2RlZiBtc2dzWzIyXSA9IHsK
LSAgVVBCX01TR0RFRl9JTklUKCJnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvIiwgNDAs
IDgsIFVQQl9JTlRUQUJMRV9JTklUKDAsIDAsIFVQQl9DVFlQRV9QVFIsIDAsIE5VTEwsICZhcnJh
eXNbMF0sIDExLCAxMCksIFVQQl9TVFJUQUJMRV9JTklUKDEwLCAxNSwgVVBCX0NUWVBFX1BUUiwg
NCwgJnN0cmVudHJpZXNbMF0pLCBmYWxzZSwgVVBCX1NZTlRBWF9QUk9UTzIsICZyZWZ0YWJsZXNb
MF0sICZyZWZ0YWJsZXNbMV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5E
ZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UiLCA0LCAwLCBVUEJfSU5UVEFCTEVfSU5JVCgw
LCAwLCBVUEJfQ1RZUEVfUFRSLCAwLCBOVUxMLCAmYXJyYXlzWzExXSwgMywgMiksIFVQQl9TVFJU
QUJMRV9JTklUKDIsIDMsIFVQQl9DVFlQRV9QVFIsIDIsICZzdHJlbnRyaWVzWzE2XSksIGZhbHNl
LCBVUEJfU1lOVEFYX1BST1RPMiwgJnJlZnRhYmxlc1syXSwgJnJlZnRhYmxlc1szXSksCi0gIFVQ
Ql9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJh
bmdlIiwgNCwgMCwgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgVVBCX0NUWVBFX1BUUiwgMCwgTlVM
TCwgJmFycmF5c1sxNF0sIDMsIDIpLCBVUEJfU1RSVEFCTEVfSU5JVCgyLCAzLCBVUEJfQ1RZUEVf
UFRSLCAyLCAmc3RyZW50cmllc1syMF0pLCBmYWxzZSwgVVBCX1NZTlRBWF9QUk9UTzIsICZyZWZ0
YWJsZXNbNF0sICZyZWZ0YWJsZXNbNV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90
b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvIiwgMTEsIDIsIFVQQl9JTlRUQUJMRV9JTklUKDAsIDAs
IFVQQl9DVFlQRV9QVFIsIDAsIE5VTEwsICZhcnJheXNbMTddLCA0LCAzKSwgVVBCX1NUUlRBQkxF
X0lOSVQoMywgMywgVVBCX0NUWVBFX1BUUiwgMiwgJnN0cmVudHJpZXNbMjRdKSwgZmFsc2UsIFVQ
Ql9TWU5UQVhfUFJPVE8yLCAmcmVmdGFibGVzWzZdLCAmcmVmdGFibGVzWzddKSwKLSAgVVBCX01T
R0RFRl9JTklUKCJnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMiLCA4LCAxLCBVUEJfSU5UVEFC
TEVfSU5JVCgxLCAxLCBVUEJfQ1RZUEVfUFRSLCAxLCAmaW50ZW50cmllc1swXSwgJmFycmF5c1sy
MV0sIDQsIDIpLCBVUEJfU1RSVEFCTEVfSU5JVCgzLCAzLCBVUEJfQ1RZUEVfUFRSLCAyLCAmc3Ry
ZW50cmllc1syOF0pLCBmYWxzZSwgVVBCX1NZTlRBWF9QUk9UTzIsICZyZWZ0YWJsZXNbOF0sICZy
ZWZ0YWJsZXNbOV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5FbnVtVmFs
dWVEZXNjcmlwdG9yUHJvdG8iLCA4LCAxLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZ
UEVfUFRSLCAwLCBOVUxMLCAmYXJyYXlzWzI1XSwgNCwgMyksIFVQQl9TVFJUQUJMRV9JTklUKDMs
IDMsIFVQQl9DVFlQRV9QVFIsIDIsICZzdHJlbnRyaWVzWzMyXSksIGZhbHNlLCBVUEJfU1lOVEFY
X1BST1RPMiwgJnJlZnRhYmxlc1sxMF0sICZyZWZ0YWJsZXNbMTFdKSwKLSAgVVBCX01TR0RFRl9J
TklUKCJnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucyIsIDcsIDEsIFVQQl9JTlRUQUJM
RV9JTklUKDEsIDEsIFVQQl9DVFlQRV9QVFIsIDEsICZpbnRlbnRyaWVzWzJdLCAmYXJyYXlzWzI5
XSwgMiwgMSksIFVQQl9TVFJUQUJMRV9JTklUKDIsIDMsIFVQQl9DVFlQRV9QVFIsIDIsICZzdHJl
bnRyaWVzWzM2XSksIGZhbHNlLCBVUEJfU1lOVEFYX1BST1RPMiwgJnJlZnRhYmxlc1sxMl0sICZy
ZWZ0YWJsZXNbMTNdKSwKLSAgVVBCX01TR0RFRl9JTklUKCJnb29nbGUucHJvdG9idWYuRmllbGRE
ZXNjcmlwdG9yUHJvdG8iLCAyMywgMSwgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgVVBCX0NUWVBF
X1BUUiwgMCwgTlVMTCwgJmFycmF5c1szMV0sIDExLCAxMCksIFVQQl9TVFJUQUJMRV9JTklUKDEw
LCAxNSwgVVBCX0NUWVBFX1BUUiwgNCwgJnN0cmVudHJpZXNbNDBdKSwgZmFsc2UsIFVQQl9TWU5U
QVhfUFJPVE8yLCAmcmVmdGFibGVzWzE0XSwgJnJlZnRhYmxlc1sxNV0pLAotICBVUEJfTVNHREVG
X0lOSVQoImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMiLCAxMiwgMSwgVVBCX0lOVFRBQkxF
X0lOSVQoMSwgMSwgVVBCX0NUWVBFX1BUUiwgMSwgJmludGVudHJpZXNbNF0sICZhcnJheXNbNDJd
LCAxMSwgNiksIFVQQl9TVFJUQUJMRV9JTklUKDcsIDE1LCBVUEJfQ1RZUEVfUFRSLCA0LCAmc3Ry
ZW50cmllc1s1Nl0pLCBmYWxzZSwgVVBCX1NZTlRBWF9QUk9UTzIsICZyZWZ0YWJsZXNbMTZdLCAm
cmVmdGFibGVzWzE3XSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVmLkZpbGVE
ZXNjcmlwdG9yUHJvdG8iLCA0MiwgNiwgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgVVBCX0NUWVBF
X1BUUiwgMCwgTlVMTCwgJmFycmF5c1s1M10sIDEzLCAxMiksIFVQQl9TVFJUQUJMRV9JTklUKDEy
LCAxNSwgVVBCX0NUWVBFX1BUUiwgNCwgJnN0cmVudHJpZXNbNzJdKSwgZmFsc2UsIFVQQl9TWU5U
QVhfUFJPVE8yLCAmcmVmdGFibGVzWzE4XSwgJnJlZnRhYmxlc1sxOV0pLAotICBVUEJfTVNHREVG
X0lOSVQoImdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldCIsIDYsIDEsIFVQQl9JTlRU
QUJMRV9JTklUKDAsIDAsIFVQQl9DVFlQRV9QVFIsIDAsIE5VTEwsICZhcnJheXNbNjZdLCAyLCAx
KSwgVVBCX1NUUlRBQkxFX0lOSVQoMSwgMywgVVBCX0NUWVBFX1BUUiwgMiwgJnN0cmVudHJpZXNb
ODhdKSwgZmFsc2UsIFVQQl9TWU5UQVhfUFJPVE8yLCAmcmVmdGFibGVzWzIwXSwgJnJlZnRhYmxl
c1syMV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucyIs
IDMxLCAxLCBVUEJfSU5UVEFCTEVfSU5JVCgxLCAxLCBVUEJfQ1RZUEVfUFRSLCAxLCAmaW50ZW50
cmllc1s2XSwgJmFycmF5c1s2OF0sIDM5LCAxNSksIFVQQl9TVFJUQUJMRV9JTklUKDE2LCAzMSwg
VVBCX0NUWVBFX1BUUiwgNSwgJnN0cmVudHJpZXNbOTJdKSwgZmFsc2UsIFVQQl9TWU5UQVhfUFJP
VE8yLCAmcmVmdGFibGVzWzIyXSwgJnJlZnRhYmxlc1syM10pLAotICBVUEJfTVNHREVGX0lOSVQo
Imdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucyIsIDEwLCAxLCBVUEJfSU5UVEFCTEVfSU5J
VCgxLCAxLCBVUEJfQ1RZUEVfUFRSLCAxLCAmaW50ZW50cmllc1s4XSwgJmFycmF5c1sxMDddLCA4
LCA0KSwgVVBCX1NUUlRBQkxFX0lOSVQoNSwgNywgVVBCX0NUWVBFX1BUUiwgMywgJnN0cmVudHJp
ZXNbMTI0XSksIGZhbHNlLCBVUEJfU1lOVEFYX1BST1RPMiwgJnJlZnRhYmxlc1syNF0sICZyZWZ0
YWJsZXNbMjVdKSwKLSAgVVBCX01TR0RFRl9JTklUKCJnb29nbGUucHJvdG9idWYuTWV0aG9kRGVz
Y3JpcHRvclByb3RvIiwgMTUsIDEsIFVQQl9JTlRUQUJMRV9JTklUKDAsIDAsIFVQQl9DVFlQRV9Q
VFIsIDAsIE5VTEwsICZhcnJheXNbMTE1XSwgNywgNiksIFVQQl9TVFJUQUJMRV9JTklUKDYsIDcs
IFVQQl9DVFlQRV9QVFIsIDMsICZzdHJlbnRyaWVzWzEzMl0pLCBmYWxzZSwgVVBCX1NZTlRBWF9Q
Uk9UTzIsICZyZWZ0YWJsZXNbMjZdLCAmcmVmdGFibGVzWzI3XSksCi0gIFVQQl9NU0dERUZfSU5J
VCgiZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMiLCA3LCAxLCBVUEJfSU5UVEFCTEVfSU5J
VCgyLCAzLCBVUEJfQ1RZUEVfUFRSLCAyLCAmaW50ZW50cmllc1sxMF0sICZhcnJheXNbMTIyXSwg
MSwgMCksIFVQQl9TVFJUQUJMRV9JTklUKDIsIDMsIFVQQl9DVFlQRV9QVFIsIDIsICZzdHJlbnRy
aWVzWzE0MF0pLCBmYWxzZSwgVVBCX1NZTlRBWF9QUk9UTzIsICZyZWZ0YWJsZXNbMjhdLCAmcmVm
dGFibGVzWzI5XSksCi0gIFVQQl9NU0dERUZfSU5JVCgiZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVz
Y3JpcHRvclByb3RvIiwgNSwgMCwgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgVVBCX0NUWVBFX1BU
UiwgMCwgTlVMTCwgJmFycmF5c1sxMjNdLCAyLCAxKSwgVVBCX1NUUlRBQkxFX0lOSVQoMSwgMywg
VVBCX0NUWVBFX1BUUiwgMiwgJnN0cmVudHJpZXNbMTQ0XSksIGZhbHNlLCBVUEJfU1lOVEFYX1BS
T1RPMiwgJnJlZnRhYmxlc1szMF0sICZyZWZ0YWJsZXNbMzFdKSwKLSAgVVBCX01TR0RFRl9JTklU
KCJnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90byIsIDExLCAyLCBVUEJfSU5U
VEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZUEVfUFRSLCAwLCBOVUxMLCAmYXJyYXlzWzEyNV0sIDQs
IDMpLCBVUEJfU1RSVEFCTEVfSU5JVCgzLCAzLCBVUEJfQ1RZUEVfUFRSLCAyLCAmc3RyZW50cmll
c1sxNDhdKSwgZmFsc2UsIFVQQl9TWU5UQVhfUFJPVE8yLCAmcmVmdGFibGVzWzMyXSwgJnJlZnRh
Ymxlc1szM10pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0
aW9ucyIsIDcsIDEsIFVQQl9JTlRUQUJMRV9JTklUKDIsIDMsIFVQQl9DVFlQRV9QVFIsIDIsICZp
bnRlbnRyaWVzWzE0XSwgJmFycmF5c1sxMjldLCAxLCAwKSwgVVBCX1NUUlRBQkxFX0lOSVQoMiwg
MywgVVBCX0NUWVBFX1BUUiwgMiwgJnN0cmVudHJpZXNbMTUyXSksIGZhbHNlLCBVUEJfU1lOVEFY
X1BST1RPMiwgJnJlZnRhYmxlc1szNF0sICZyZWZ0YWJsZXNbMzVdKSwKLSAgVVBCX01TR0RFRl9J
TklUKCJnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8iLCA2LCAxLCBVUEJfSU5UVEFCTEVf
SU5JVCgwLCAwLCBVUEJfQ1RZUEVfUFRSLCAwLCBOVUxMLCAmYXJyYXlzWzEzMF0sIDIsIDEpLCBV
UEJfU1RSVEFCTEVfSU5JVCgxLCAzLCBVUEJfQ1RZUEVfUFRSLCAyLCAmc3RyZW50cmllc1sxNTZd
KSwgZmFsc2UsIFVQQl9TWU5UQVhfUFJPVE8yLCAmcmVmdGFibGVzWzM2XSwgJnJlZnRhYmxlc1sz
N10pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5M
b2NhdGlvbiIsIDE5LCAwLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZUEVfUFRSLCAw
LCBOVUxMLCAmYXJyYXlzWzEzMl0sIDcsIDUpLCBVUEJfU1RSVEFCTEVfSU5JVCg1LCA3LCBVUEJf
Q1RZUEVfUFRSLCAzLCAmc3RyZW50cmllc1sxNjBdKSwgZmFsc2UsIFVQQl9TWU5UQVhfUFJPVE8y
LCAmcmVmdGFibGVzWzM4XSwgJnJlZnRhYmxlc1szOV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdv
b2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uIiwgMTgsIDEsIFVQQl9JTlRUQUJMRV9J
TklUKDAsIDAsIFVQQl9DVFlQRV9QVFIsIDAsIE5VTEwsICZhcnJheXNbMTM5XSwgOSwgNyksIFVQ
Ql9TVFJUQUJMRV9JTklUKDcsIDE1LCBVUEJfQ1RZUEVfUFRSLCA0LCAmc3RyZW50cmllc1sxNjhd
KSwgZmFsc2UsIFVQQl9TWU5UQVhfUFJPVE8yLCAmcmVmdGFibGVzWzQwXSwgJnJlZnRhYmxlc1s0
MV0pLAotICBVUEJfTVNHREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0
aW9uLk5hbWVQYXJ0IiwgNiwgMCwgVVBCX0lOVFRBQkxFX0lOSVQoMCwgMCwgVVBCX0NUWVBFX1BU
UiwgMCwgTlVMTCwgJmFycmF5c1sxNDhdLCAzLCAyKSwgVVBCX1NUUlRBQkxFX0lOSVQoMiwgMywg
VVBCX0NUWVBFX1BUUiwgMiwgJnN0cmVudHJpZXNbMTg0XSksIGZhbHNlLCBVUEJfU1lOVEFYX1BS
T1RPMiwgJnJlZnRhYmxlc1s0Ml0sICZyZWZ0YWJsZXNbNDNdKSwKLX07Ci0KLXN0YXRpYyBjb25z
dCB1cGJfZmllbGRkZWYgZmllbGRzWzEwNV0gPSB7Ci0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgImFnZ3JlZ2F0ZV92YWx1ZSIsIDgsICZtc2dzWzIwXSwgTlVMTCwgMTUsIDYsIHswfSwm
cmVmdGFibGVzWzQ0XSwgJnJlZnRhYmxlc1s0NV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJf
TEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCAiYWxsb3dfYWxpYXMiLCAyLCAmbXNnc1s0XSwgTlVMTCwgNiwgMSwgezB9LCZyZWZ0YWJs
ZXNbNDZdLCAmcmVmdGFibGVzWzQ3XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9P
UFRJT05BTCwgVVBCX1RZUEVfQk9PTCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJj
Y19lbmFibGVfYXJlbmFzIiwgMzEsICZtc2dzWzExXSwgTlVMTCwgMjMsIDEyLCB7MH0sJnJlZnRh
Ymxlc1s0OF0sICZyZWZ0YWJsZXNbNDldKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVM
X09QVElPTkFMLCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
ImNjX2dlbmVyaWNfc2VydmljZXMiLCAxNiwgJm1zZ3NbMTFdLCBOVUxMLCAxNywgNiwgezB9LCZy
ZWZ0YWJsZXNbNTBdLCAmcmVmdGFibGVzWzUxXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfQk9PTCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsICJjbGllbnRfc3RyZWFtaW5nIiwgNSwgJm1zZ3NbMTNdLCBOVUxMLCAxMywgNCwgezB9LCZy
ZWZ0YWJsZXNbNTJdLCAmcmVmdGFibGVzWzUzXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgImNzaGFycF9uYW1lc3BhY2UiLCAzNywgJm1zZ3NbMTFdLCBOVUxMLCAyNywgMTQsIHsw
fSwmcmVmdGFibGVzWzU0XSwgJnJlZnRhYmxlc1s1NV0pLAotICBVUEJfRklFTERERUZfSU5JVChV
UEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0VOVU0sIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCAiY3R5cGUiLCAxLCAmbXNnc1s4XSwgKGNvbnN0IHVwYl9kZWYqKSgmZW51bXNbMl0p
LCA2LCAxLCB7MH0sJnJlZnRhYmxlc1s1Nl0sICZyZWZ0YWJsZXNbNTddKSwKLSAgVVBCX0ZJRUxE
REVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCAiZGVmYXVsdF92YWx1ZSIsIDcsICZtc2dzWzddLCBOVUxMLCAx
NiwgNywgezB9LCZyZWZ0YWJsZXNbNThdLCAmcmVmdGFibGVzWzU5XSksCi0gIFVQQl9GSUVMRERF
Rl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgImRlcGVuZGVuY3kiLCAzLCAmbXNnc1s5XSwgTlVMTCwgMzAsIDgs
IHswfSwmcmVmdGFibGVzWzYwXSwgJnJlZnRhYmxlc1s2MV0pLAotICBVUEJfRklFTERERUZfSU5J
VChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCAiZGVwcmVjYXRlZCIsIDMsICZtc2dzWzEyXSwgTlVMTCwgOCwgMywgezB9LCZy
ZWZ0YWJsZXNbNjJdLCAmcmVmdGFibGVzWzYzXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfQk9PTCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsICJkZXByZWNhdGVkIiwgMywgJm1zZ3NbOF0sIE5VTEwsIDgsIDMsIHswfSwmcmVmdGFibGVz
WzY0XSwgJnJlZnRhYmxlc1s2NV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BU
SU9OQUwsIFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZGVw
cmVjYXRlZCIsIDMzLCAmbXNnc1sxNF0sIE5VTEwsIDYsIDEsIHswfSwmcmVmdGFibGVzWzY2XSwg
JnJlZnRhYmxlc1s2N10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUws
IFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZGVwcmVjYXRl
ZCIsIDIzLCAmbXNnc1sxMV0sIE5VTEwsIDIxLCAxMCwgezB9LCZyZWZ0YWJsZXNbNjhdLCAmcmVm
dGFibGVzWzY5XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBC
X1RZUEVfQk9PTCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJkZXByZWNhdGVkIiwg
MywgJm1zZ3NbNF0sIE5VTEwsIDcsIDIsIHswfSwmcmVmdGFibGVzWzcwXSwgJnJlZnRhYmxlc1s3
MV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0JP
T0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZGVwcmVjYXRlZCIsIDMzLCAmbXNn
c1sxN10sIE5VTEwsIDYsIDEsIHswfSwmcmVmdGFibGVzWzcyXSwgJnJlZnRhYmxlc1s3M10pLAot
ICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0JPT0wsIDAs
IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZGVwcmVjYXRlZCIsIDEsICZtc2dzWzZdLCBO
VUxMLCA2LCAxLCB7MH0sJnJlZnRhYmxlc1s3NF0sICZyZWZ0YWJsZXNbNzVdKSwKLSAgVVBCX0ZJ
RUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9ET1VCTEUsIDAsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZG91YmxlX3ZhbHVlIiwgNiwgJm1zZ3NbMjBdLCBOVUxM
LCAxMSwgNCwgezB9LCZyZWZ0YWJsZXNbNzZdLCAmcmVmdGFibGVzWzc3XSksCi0gIFVQQl9GSUVM
RERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfSU5UMzIsIFVQQl9JTlRGTVRf
VkFSSUFCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZW5kIiwgMiwgJm1zZ3NbMl0s
IE5VTEwsIDMsIDEsIHswfSwmcmVmdGFibGVzWzc4XSwgJnJlZnRhYmxlc1s3OV0pLAotICBVUEJf
RklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0lOVDMyLCBVUEJfSU5U
Rk1UX1ZBUklBQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImVuZCIsIDIsICZtc2dz
WzFdLCBOVUxMLCAzLCAxLCB7MH0sJnJlZnRhYmxlc1s4MF0sICZyZWZ0YWJsZXNbODFdKSwKLSAg
VVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9NRVNTQUdFLCAw
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImVudW1fdHlwZSIsIDQsICZtc2dzWzBdLCAo
Y29uc3QgdXBiX2RlZiopKCZtc2dzWzNdKSwgMTgsIDIsIHswfSwmcmVmdGFibGVzWzgyXSwgJnJl
ZnRhYmxlc1s4M10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQ
Ql9UWVBFX01FU1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZW51bV90eXBl
IiwgNSwgJm1zZ3NbOV0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbM10pLCAxMywgMSwgezB9LCZy
ZWZ0YWJsZXNbODRdLCAmcmVmdGFibGVzWzg1XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgImV4dGVuZGVlIiwgMiwgJm1zZ3NbN10sIE5VTEwsIDcsIDIsIHswfSwmcmVmdGFibGVz
Wzg2XSwgJnJlZnRhYmxlc1s4N10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQ
RUFURUQsIFVQQl9UWVBFX01FU1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAi
ZXh0ZW5zaW9uIiwgNiwgJm1zZ3NbMF0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbN10pLCAyNCwg
NCwgezB9LCZyZWZ0YWJsZXNbODhdLCAmcmVmdGFibGVzWzg5XSksCi0gIFVQQl9GSUVMRERFRl9J
TklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsICJleHRlbnNpb24iLCA3LCAmbXNnc1s5XSwgKGNvbnN0IHVwYl9kZWYq
KSgmbXNnc1s3XSksIDE5LCAzLCB7MH0sJnJlZnRhYmxlc1s5MF0sICZyZWZ0YWJsZXNbOTFdKSwK
LSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9NRVNTQUdF
LCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImV4dGVuc2lvbl9yYW5nZSIsIDUsICZt
c2dzWzBdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzFdKSwgMjEsIDMsIHswfSwmcmVmdGFibGVz
WzkyXSwgJnJlZnRhYmxlc1s5M10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQ
RUFURUQsIFVQQl9UWVBFX01FU1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAi
ZmllbGQiLCAyLCAmbXNnc1swXSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1s3XSksIDEyLCAwLCB7
MH0sJnJlZnRhYmxlc1s5NF0sICZyZWZ0YWJsZXNbOTVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQo
VVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgImZpbGUiLCAxLCAmbXNnc1sxMF0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3Nb
OV0pLCA1LCAwLCB7MH0sJnJlZnRhYmxlc1s5Nl0sICZyZWZ0YWJsZXNbOTddKSwKLSAgVVBCX0ZJ
RUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiZ29fcGFja2FnZSIsIDExLCAmbXNnc1sxMV0sIE5VTEws
IDE0LCA1LCB7MH0sJnJlZnRhYmxlc1s5OF0sICZyZWZ0YWJsZXNbOTldKSwKLSAgVVBCX0ZJRUxE
REVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCAiaWRlbnRpZmllcl92YWx1ZSIsIDMsICZtc2dzWzIwXSwgTlVM
TCwgNiwgMSwgezB9LCZyZWZ0YWJsZXNbMTAwXSwgJnJlZnRhYmxlc1sxMDFdKSwKLSAgVVBCX0ZJ
RUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiaW5wdXRfdHlwZSIsIDIsICZtc2dzWzEzXSwgTlVMTCwg
NywgMiwgezB9LCZyZWZ0YWJsZXNbMTAyXSwgJnJlZnRhYmxlc1sxMDNdKSwKLSAgVVBCX0ZJRUxE
REVGX0lOSVQoVVBCX0xBQkVMX1JFUVVJUkVELCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgImlzX2V4dGVuc2lvbiIsIDIsICZtc2dzWzIxXSwgTlVMTCwgNSwg
MSwgezB9LCZyZWZ0YWJsZXNbMTA0XSwgJnJlZnRhYmxlc1sxMDVdKSwKLSAgVVBCX0ZJRUxEREVG
X0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgImphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoIiwgMjAsICZtc2dz
WzExXSwgTlVMTCwgMjAsIDksIHswfSwmcmVmdGFibGVzWzEwNl0sICZyZWZ0YWJsZXNbMTA3XSks
Ci0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfQk9PTCwg
MCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJqYXZhX2dlbmVyaWNfc2VydmljZXMiLCAx
NywgJm1zZ3NbMTFdLCBOVUxMLCAxOCwgNywgezB9LCZyZWZ0YWJsZXNbMTA4XSwgJnJlZnRhYmxl
c1sxMDldKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQ
RV9CT09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImphdmFfbXVsdGlwbGVfZmls
ZXMiLCAxMCwgJm1zZ3NbMTFdLCBOVUxMLCAxMywgNCwgezB9LCZyZWZ0YWJsZXNbMTEwXSwgJnJl
ZnRhYmxlc1sxMTFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBV
UEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAiamF2YV9vdXRl
cl9jbGFzc25hbWUiLCA4LCAmbXNnc1sxMV0sIE5VTEwsIDksIDIsIHswfSwmcmVmdGFibGVzWzEx
Ml0sICZyZWZ0YWJsZXNbMTEzXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJ
T05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImph
dmFfcGFja2FnZSIsIDEsICZtc2dzWzExXSwgTlVMTCwgNiwgMSwgezB9LCZyZWZ0YWJsZXNbMTE0
XSwgJnJlZnRhYmxlc1sxMTVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElP
TkFMLCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImphdmFf
c3RyaW5nX2NoZWNrX3V0ZjgiLCAyNywgJm1zZ3NbMTFdLCBOVUxMLCAyMiwgMTEsIHswfSwmcmVm
dGFibGVzWzExNl0sICZyZWZ0YWJsZXNbMTE3XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9M
QUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfQk9PTCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsICJqYXZhbmFub191c2VfZGVwcmVjYXRlZF9wYWNrYWdlIiwgMzgsICZtc2dzWzExXSwgTlVM
TCwgMzAsIDE1LCB7MH0sJnJlZnRhYmxlc1sxMThdLCAmcmVmdGFibGVzWzExOV0pLAotICBVUEJf
RklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX1NUUklORywgMCwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJqc29uX25hbWUiLCAxMCwgJm1zZ3NbN10sIE5VTEws
IDIwLCA5LCB7MH0sJnJlZnRhYmxlc1sxMjBdLCAmcmVmdGFibGVzWzEyMV0pLAotICBVUEJfRklF
TERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0VOVU0sIDAsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCAianN0eXBlIiwgNiwgJm1zZ3NbOF0sIChjb25zdCB1cGJfZGVm
KikoJmVudW1zWzNdKSwgMTAsIDUsIHswfSwmcmVmdGFibGVzWzEyMl0sICZyZWZ0YWJsZXNbMTIz
XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfRU5V
TSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJsYWJlbCIsIDQsICZtc2dzWzddLCAo
Y29uc3QgdXBiX2RlZiopKCZlbnVtc1swXSksIDExLCA0LCB7MH0sJnJlZnRhYmxlc1sxMjRdLCAm
cmVmdGFibGVzWzEyNV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUws
IFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibGF6eSIsIDUs
ICZtc2dzWzhdLCBOVUxMLCA5LCA0LCB7MH0sJnJlZnRhYmxlc1sxMjZdLCAmcmVmdGFibGVzWzEy
N10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX1NU
UklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJsZWFkaW5nX2NvbW1lbnRzIiwg
MywgJm1zZ3NbMTldLCBOVUxMLCA4LCAyLCB7MH0sJnJlZnRhYmxlc1sxMjhdLCAmcmVmdGFibGVz
WzEyOV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBF
X1NUUklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJsZWFkaW5nX2RldGFjaGVk
X2NvbW1lbnRzIiwgNiwgJm1zZ3NbMTldLCBOVUxMLCAxNiwgNCwgezB9LCZyZWZ0YWJsZXNbMTMw
XSwgJnJlZnRhYmxlc1sxMzFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVB
VEVELCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgImxv
Y2F0aW9uIiwgMSwgJm1zZ3NbMThdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzE5XSksIDUsIDAs
IHswfSwmcmVmdGFibGVzWzEzMl0sICZyZWZ0YWJsZXNbMTMzXSksCi0gIFVQQl9GSUVMRERFRl9J
TklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfQk9PTCwgMCwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsICJtYXBfZW50cnkiLCA3LCAmbXNnc1sxMl0sIE5VTEwsIDksIDQsIHswfSwm
cmVmdGFibGVzWzEzNF0sICZyZWZ0YWJsZXNbMTM1XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQ
Ql9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfQk9PTCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsICJtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCIsIDEsICZtc2dzWzEyXSwgTlVMTCwgNiwg
MSwgezB9LCZyZWZ0YWJsZXNbMTM2XSwgJnJlZnRhYmxlc1sxMzddKSwKLSAgVVBCX0ZJRUxEREVG
X0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgIm1lc3NhZ2VfdHlwZSIsIDQsICZtc2dzWzldLCAoY29uc3QgdXBi
X2RlZiopKCZtc2dzWzBdKSwgMTAsIDAsIHswfSwmcmVmdGFibGVzWzEzOF0sICZyZWZ0YWJsZXNb
MTM5XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVf
TUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJtZXRob2QiLCAyLCAmbXNn
c1sxNl0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbMTNdKSwgNiwgMCwgezB9LCZyZWZ0YWJsZXNb
MTQwXSwgJnJlZnRhYmxlc1sxNDFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09Q
VElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAi
bmFtZSIsIDEsICZtc2dzWzNdLCBOVUxMLCA4LCAyLCB7MH0sJnJlZnRhYmxlc1sxNDJdLCAmcmVm
dGFibGVzWzE0M10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQ
Ql9UWVBFX1NUUklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJuYW1lIiwgMSwg
Jm1zZ3NbMTVdLCBOVUxMLCAyLCAwLCB7MH0sJnJlZnRhYmxlc1sxNDRdLCAmcmVmdGFibGVzWzE0
NV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBFX01F
U1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibmFtZSIsIDIsICZtc2dzWzIw
XSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1syMV0pLCA1LCAwLCB7MH0sJnJlZnRhYmxlc1sxNDZd
LCAmcmVmdGFibGVzWzE0N10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9O
QUwsIFVQQl9UWVBFX1NUUklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJuYW1l
IiwgMSwgJm1zZ3NbMF0sIE5VTEwsIDMyLCA4LCB7MH0sJnJlZnRhYmxlc1sxNDhdLCAmcmVmdGFi
bGVzWzE0OV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9U
WVBFX1NUUklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJuYW1lIiwgMSwgJm1z
Z3NbNV0sIE5VTEwsIDQsIDEsIHswfSwmcmVmdGFibGVzWzE1MF0sICZyZWZ0YWJsZXNbMTUxXSks
Ci0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5H
LCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIm5hbWUiLCAxLCAmbXNnc1s5XSwgTlVM
TCwgMjIsIDYsIHswfSwmcmVmdGFibGVzWzE1Ml0sICZyZWZ0YWJsZXNbMTUzXSksCi0gIFVQQl9G
SUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIm5hbWUiLCAxLCAmbXNnc1s3XSwgTlVMTCwgNCwgMSwg
ezB9LCZyZWZ0YWJsZXNbMTU0XSwgJnJlZnRhYmxlc1sxNTVdKSwKLSAgVVBCX0ZJRUxEREVGX0lO
SVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCAibmFtZSIsIDEsICZtc2dzWzEzXSwgTlVMTCwgNCwgMSwgezB9LCZyZWZ0
YWJsZXNbMTU2XSwgJnJlZnRhYmxlc1sxNTddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xB
QkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCAibmFtZSIsIDEsICZtc2dzWzE2XSwgTlVMTCwgOCwgMiwgezB9LCZyZWZ0YWJsZXNbMTU4
XSwgJnJlZnRhYmxlc1sxNTldKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUVVJ
UkVELCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAibmFt
ZV9wYXJ0IiwgMSwgJm1zZ3NbMjFdLCBOVUxMLCAyLCAwLCB7MH0sJnJlZnRhYmxlc1sxNjBdLCAm
cmVmdGFibGVzWzE2MV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUws
IFVQQl9UWVBFX0lOVDY0LCBVUEJfSU5URk1UX1ZBUklBQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgIm5lZ2F0aXZlX2ludF92YWx1ZSIsIDUsICZtc2dzWzIwXSwgTlVMTCwgMTAsIDMs
IHswfSwmcmVmdGFibGVzWzE2Ml0sICZyZWZ0YWJsZXNbMTYzXSksCi0gIFVQQl9GSUVMRERFRl9J
TklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsICJuZXN0ZWRfdHlwZSIsIDMsICZtc2dzWzBdLCAoY29uc3QgdXBiX2Rl
ZiopKCZtc2dzWzBdKSwgMTUsIDEsIHswfSwmcmVmdGFibGVzWzE2NF0sICZyZWZ0YWJsZXNbMTY1
XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfQk9P
TCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJub19zdGFuZGFyZF9kZXNjcmlwdG9y
X2FjY2Vzc29yIiwgMiwgJm1zZ3NbMTJdLCBOVUxMLCA3LCAyLCB7MH0sJnJlZnRhYmxlc1sxNjZd
LCAmcmVmdGFibGVzWzE2N10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9O
QUwsIFVQQl9UWVBFX0lOVDMyLCBVUEJfSU5URk1UX1ZBUklBQkxFLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgIm51bWJlciIsIDIsICZtc2dzWzVdLCBOVUxMLCA3LCAyLCB7MH0sJnJlZnRh
Ymxlc1sxNjhdLCAmcmVmdGFibGVzWzE2OV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFC
RUxfT1BUSU9OQUwsIFVQQl9UWVBFX0lOVDMyLCBVUEJfSU5URk1UX1ZBUklBQkxFLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgIm51bWJlciIsIDMsICZtc2dzWzddLCBOVUxMLCAxMCwgMywg
ezB9LCZyZWZ0YWJsZXNbMTcwXSwgJnJlZnRhYmxlc1sxNzFdKSwKLSAgVVBCX0ZJRUxEREVGX0lO
SVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCAib2JqY19jbGFzc19wcmVmaXgiLCAzNiwgJm1zZ3NbMTFdLCBOVUxMLCAy
NCwgMTMsIHswfSwmcmVmdGFibGVzWzE3Ml0sICZyZWZ0YWJsZXNbMTczXSksCi0gIFVQQl9GSUVM
RERFRl9JTklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgZmFsc2UsICJvbmVvZl9kZWNsIiwgOCwgJm1zZ3NbMF0sIChjb25zdCB1
cGJfZGVmKikoJm1zZ3NbMTVdKSwgMjgsIDYsIHswfSwmcmVmdGFibGVzWzE3NF0sICZyZWZ0YWJs
ZXNbMTc1XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZ
UEVfSU5UMzIsIFVQQl9JTlRGTVRfVkFSSUFCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCAib25lb2ZfaW5kZXgiLCA5LCAmbXNnc1s3XSwgTlVMTCwgMTksIDgsIHswfSwmcmVmdGFibGVz
WzE3Nl0sICZyZWZ0YWJsZXNbMTc3XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9P
UFRJT05BTCwgVVBCX1RZUEVfRU5VTSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJv
cHRpbWl6ZV9mb3IiLCA5LCAmbXNnc1sxMV0sIChjb25zdCB1cGJfZGVmKikoJmVudW1zWzRdKSwg
MTIsIDMsIHswfSwmcmVmdGFibGVzWzE3OF0sICZyZWZ0YWJsZXNbMTc5XSksCi0gIFVQQl9GSUVM
RERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgZmFsc2UsICJvcHRpb25zIiwgNywgJm1zZ3NbMF0sIChjb25zdCB1cGJf
ZGVmKikoJm1zZ3NbMTJdKSwgMjUsIDUsIHswfSwmcmVmdGFibGVzWzE4MF0sICZyZWZ0YWJsZXNb
MTgxXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVf
TUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJvcHRpb25zIiwgOCwgJm1z
Z3NbOV0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbMTFdKSwgMjAsIDQsIHswfSwmcmVmdGFibGVz
WzE4Ml0sICZyZWZ0YWJsZXNbMTgzXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9P
UFRJT05BTCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
ICJvcHRpb25zIiwgNCwgJm1zZ3NbMTNdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzE0XSksIDMs
IDAsIHswfSwmcmVmdGFibGVzWzE4NF0sICZyZWZ0YWJsZXNbMTg1XSksCi0gIFVQQl9GSUVMRERF
Rl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsICJvcHRpb25zIiwgOCwgJm1zZ3NbN10sIChjb25zdCB1cGJfZGVm
KikoJm1zZ3NbOF0pLCAzLCAwLCB7MH0sJnJlZnRhYmxlc1sxODZdLCAmcmVmdGFibGVzWzE4N10p
LAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX01FU1NB
R0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAib3B0aW9ucyIsIDMsICZtc2dzWzE2
XSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1sxN10pLCA3LCAxLCB7MH0sJnJlZnRhYmxlc1sxODhd
LCAmcmVmdGFibGVzWzE4OV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9O
QUwsIFVQQl9UWVBFX01FU1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAib3B0
aW9ucyIsIDMsICZtc2dzWzVdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzZdKSwgMywgMCwgezB9
LCZyZWZ0YWJsZXNbMTkwXSwgJnJlZnRhYmxlc1sxOTFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQo
VVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgIm9wdGlvbnMiLCAzLCAmbXNnc1szXSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNn
c1s0XSksIDcsIDEsIHswfSwmcmVmdGFibGVzWzE5Ml0sICZyZWZ0YWJsZXNbMTkzXSksCi0gIFVQ
Ql9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIm91dHB1dF90eXBlIiwgMywgJm1zZ3NbMTNdLCBO
VUxMLCAxMCwgMywgezB9LCZyZWZ0YWJsZXNbMTk0XSwgJnJlZnRhYmxlc1sxOTVdKSwKLSAgVVBC
X0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAicGFja2FnZSIsIDIsICZtc2dzWzldLCBOVUxMLCAy
NSwgNywgezB9LCZyZWZ0YWJsZXNbMTk2XSwgJnJlZnRhYmxlc1sxOTddKSwKLSAgVVBCX0ZJRUxE
REVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgInBhY2tlZCIsIDIsICZtc2dzWzhdLCBOVUxMLCA3LCAyLCB7MH0s
JnJlZnRhYmxlc1sxOThdLCAmcmVmdGFibGVzWzE5OV0pLAotICBVUEJfRklFTERERUZfSU5JVChV
UEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBFX0lOVDMyLCBVUEJfSU5URk1UX1ZBUklBQkxFLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCAicGF0aCIsIDEsICZtc2dzWzE5XSwgTlVMTCwgNCwg
MCwgezB9LCZyZWZ0YWJsZXNbMjAwXSwgJnJlZnRhYmxlc1syMDFdKSwKLSAgVVBCX0ZJRUxEREVG
X0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQRV9VSU5UNjQsIFVQQl9JTlRGTVRfVkFS
SUFCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAicG9zaXRpdmVfaW50X3ZhbHVlIiwg
NCwgJm1zZ3NbMjBdLCBOVUxMLCA5LCAyLCB7MH0sJnJlZnRhYmxlc1syMDJdLCAmcmVmdGFibGVz
WzIwM10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBF
X0lOVDMyLCBVUEJfSU5URk1UX1ZBUklBQkxFLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
InB1YmxpY19kZXBlbmRlbmN5IiwgMTAsICZtc2dzWzldLCBOVUxMLCAzNSwgOSwgezB9LCZyZWZ0
YWJsZXNbMjA0XSwgJnJlZnRhYmxlc1syMDVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xB
QkVMX09QVElPTkFMLCBVUEJfVFlQRV9CT09MLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgInB5X2dlbmVyaWNfc2VydmljZXMiLCAxOCwgJm1zZ3NbMTFdLCBOVUxMLCAxOSwgOCwgezB9
LCZyZWZ0YWJsZXNbMjA2XSwgJnJlZnRhYmxlc1syMDddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQo
VVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCAicmVzZXJ2ZWRfbmFtZSIsIDEwLCAmbXNnc1swXSwgTlVMTCwgMzcsIDksIHsw
fSwmcmVmdGFibGVzWzIwOF0sICZyZWZ0YWJsZXNbMjA5XSksCi0gIFVQQl9GSUVMRERFRl9JTklU
KFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsICJyZXNlcnZlZF9yYW5nZSIsIDksICZtc2dzWzBdLCAoY29uc3QgdXBiX2Rl
ZiopKCZtc2dzWzJdKSwgMzEsIDcsIHswfSwmcmVmdGFibGVzWzIxMF0sICZyZWZ0YWJsZXNbMjEx
XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfQk9P
TCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJzZXJ2ZXJfc3RyZWFtaW5nIiwgNiwg
Jm1zZ3NbMTNdLCBOVUxMLCAxNCwgNSwgezB9LCZyZWZ0YWJsZXNbMjEyXSwgJnJlZnRhYmxlc1sy
MTNdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9N
RVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInNlcnZpY2UiLCA2LCAmbXNn
c1s5XSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1sxNl0pLCAxNiwgMiwgezB9LCZyZWZ0YWJsZXNb
MjE0XSwgJnJlZnRhYmxlc1syMTVdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09Q
VElPTkFMLCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
InNvdXJjZV9jb2RlX2luZm8iLCA5LCAmbXNnc1s5XSwgKGNvbnN0IHVwYl9kZWYqKSgmbXNnc1sx
OF0pLCAyMSwgNSwgezB9LCZyZWZ0YWJsZXNbMjE2XSwgJnJlZnRhYmxlc1syMTddKSwKLSAgVVBC
X0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9JTlQzMiwgVVBCX0lO
VEZNVF9WQVJJQUJMRSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgInNwYW4iLCAyLCAmbXNn
c1sxOV0sIE5VTEwsIDcsIDEsIHswfSwmcmVmdGFibGVzWzIxOF0sICZyZWZ0YWJsZXNbMjE5XSks
Ci0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwgVVBCX1RZUEVfSU5UMzIs
IFVQQl9JTlRGTVRfVkFSSUFCTEUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAic3RhcnQi
LCAxLCAmbXNnc1syXSwgTlVMTCwgMiwgMCwgezB9LCZyZWZ0YWJsZXNbMjIwXSwgJnJlZnRhYmxl
c1syMjFdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX09QVElPTkFMLCBVUEJfVFlQ
RV9JTlQzMiwgVVBCX0lOVEZNVF9WQVJJQUJMRSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
ICJzdGFydCIsIDEsICZtc2dzWzFdLCBOVUxMLCAyLCAwLCB7MH0sJnJlZnRhYmxlc1syMjJdLCAm
cmVmdGFibGVzWzIyM10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUws
IFVQQl9UWVBFX0JZVEVTLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInN0cmluZ192
YWx1ZSIsIDcsICZtc2dzWzIwXSwgTlVMTCwgMTIsIDUsIHswfSwmcmVmdGFibGVzWzIyNF0sICZy
ZWZ0YWJsZXNbMjI1XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwg
VVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInN5bnRheCIs
IDEyLCAmbXNnc1s5XSwgTlVMTCwgMzksIDExLCB7MH0sJnJlZnRhYmxlc1syMjZdLCAmcmVmdGFi
bGVzWzIyN10pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9U
WVBFX1NUUklORywgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJ0cmFpbGluZ19jb21t
ZW50cyIsIDQsICZtc2dzWzE5XSwgTlVMTCwgMTEsIDMsIHswfSwmcmVmdGFibGVzWzIyOF0sICZy
ZWZ0YWJsZXNbMjI5XSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJFTF9PUFRJT05BTCwg
VVBCX1RZUEVfRU5VTSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICJ0eXBlIiwgNSwg
Jm1zZ3NbN10sIChjb25zdCB1cGJfZGVmKikoJmVudW1zWzFdKSwgMTIsIDUsIHswfSwmcmVmdGFi
bGVzWzIzMF0sICZyZWZ0YWJsZXNbMjMxXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJF
TF9PUFRJT05BTCwgVVBCX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgInR5cGVfbmFtZSIsIDYsICZtc2dzWzddLCBOVUxMLCAxMywgNiwgezB9LCZyZWZ0YWJsZXNb
MjMyXSwgJnJlZnRhYmxlc1syMzNdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JF
UEVBVEVELCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
InVuaW50ZXJwcmV0ZWRfb3B0aW9uIiwgOTk5LCAmbXNnc1sxMV0sIChjb25zdCB1cGJfZGVmKiko
Jm1zZ3NbMjBdKSwgNSwgMCwgezB9LCZyZWZ0YWJsZXNbMjM0XSwgJnJlZnRhYmxlc1syMzVdKSwK
LSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9NRVNTQUdF
LCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiwg
OTk5LCAmbXNnc1sxMl0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbMjBdKSwgNSwgMCwgezB9LCZy
ZWZ0YWJsZXNbMjM2XSwgJnJlZnRhYmxlc1syMzddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBC
X0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiwgOTk5LCAmbXNnc1s2XSwgKGNvbnN0IHVw
Yl9kZWYqKSgmbXNnc1syMF0pLCA1LCAwLCB7MH0sJnJlZnRhYmxlc1syMzhdLCAmcmVmdGFibGVz
WzIzOV0pLAotICBVUEJfRklFTERERUZfSU5JVChVUEJfTEFCRUxfUkVQRUFURUQsIFVQQl9UWVBF
X01FU1NBR0UsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAidW5pbnRlcnByZXRlZF9v
cHRpb24iLCA5OTksICZtc2dzWzRdLCAoY29uc3QgdXBiX2RlZiopKCZtc2dzWzIwXSksIDUsIDAs
IHswfSwmcmVmdGFibGVzWzI0MF0sICZyZWZ0YWJsZXNbMjQxXSksCi0gIFVQQl9GSUVMRERFRl9J
TklUKFVQQl9MQUJFTF9SRVBFQVRFRCwgVVBCX1RZUEVfTUVTU0FHRSwgMCwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsICJ1bmludGVycHJldGVkX29wdGlvbiIsIDk5OSwgJm1zZ3NbOF0sIChj
b25zdCB1cGJfZGVmKikoJm1zZ3NbMjBdKSwgNSwgMCwgezB9LCZyZWZ0YWJsZXNbMjQyXSwgJnJl
ZnRhYmxlc1syNDNdKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBV
UEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInVuaW50ZXJw
cmV0ZWRfb3B0aW9uIiwgOTk5LCAmbXNnc1sxNF0sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbMjBd
KSwgNSwgMCwgezB9LCZyZWZ0YWJsZXNbMjQ0XSwgJnJlZnRhYmxlc1syNDVdKSwKLSAgVVBCX0ZJ
RUxEREVGX0lOSVQoVVBCX0xBQkVMX1JFUEVBVEVELCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiwgOTk5LCAmbXNn
c1sxN10sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbMjBdKSwgNSwgMCwgezB9LCZyZWZ0YWJsZXNb
MjQ2XSwgJnJlZnRhYmxlc1syNDddKSwKLSAgVVBCX0ZJRUxEREVGX0lOSVQoVVBCX0xBQkVMX1JF
UEVBVEVELCBVUEJfVFlQRV9NRVNTQUdFLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
InZhbHVlIiwgMiwgJm1zZ3NbM10sIChjb25zdCB1cGJfZGVmKikoJm1zZ3NbNV0pLCA2LCAwLCB7
MH0sJnJlZnRhYmxlc1syNDhdLCAmcmVmdGFibGVzWzI0OV0pLAotICBVUEJfRklFTERERUZfSU5J
VChVUEJfTEFCRUxfT1BUSU9OQUwsIFVQQl9UWVBFX0JPT0wsIDAsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCAid2VhayIsIDEwLCAmbXNnc1s4XSwgTlVMTCwgMTEsIDYsIHswfSwmcmVmdGFi
bGVzWzI1MF0sICZyZWZ0YWJsZXNbMjUxXSksCi0gIFVQQl9GSUVMRERFRl9JTklUKFVQQl9MQUJF
TF9SRVBFQVRFRCwgVVBCX1RZUEVfSU5UMzIsIFVQQl9JTlRGTVRfVkFSSUFCTEUsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCAid2Vha19kZXBlbmRlbmN5IiwgMTEsICZtc2dzWzldLCBOVUxM
LCAzOCwgMTAsIHswfSwmcmVmdGFibGVzWzI1Ml0sICZyZWZ0YWJsZXNbMjUzXSksCi19OwotCi1z
dGF0aWMgY29uc3QgdXBiX2VudW1kZWYgZW51bXNbNV0gPSB7Ci0gIFVQQl9FTlVNREVGX0lOSVQo
Imdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbCIsIFVQQl9TVFJUQUJM
RV9JTklUKDMsIDMsIFVQQl9DVFlQRV9JTlQzMiwgMiwgJnN0cmVudHJpZXNbMTg4XSksIFVQQl9J
TlRUQUJMRV9JTklUKDAsIDAsIFVQQl9DVFlQRV9DU1RSLCAwLCBOVUxMLCAmYXJyYXlzWzE1MV0s
IDQsIDMpLCAwLCAmcmVmdGFibGVzWzI1NF0sICZyZWZ0YWJsZXNbMjU1XSksCi0gIFVQQl9FTlVN
REVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlIiwgVVBC
X1NUUlRBQkxFX0lOSVQoMTgsIDMxLCBVUEJfQ1RZUEVfSU5UMzIsIDUsICZzdHJlbnRyaWVzWzE5
Ml0pLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZUEVfQ1NUUiwgMCwgTlVMTCwgJmFy
cmF5c1sxNTVdLCAxOSwgMTgpLCAwLCAmcmVmdGFibGVzWzI1Nl0sICZyZWZ0YWJsZXNbMjU3XSks
Ci0gIFVQQl9FTlVNREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGUi
LCBVUEJfU1RSVEFCTEVfSU5JVCgzLCAzLCBVUEJfQ1RZUEVfSU5UMzIsIDIsICZzdHJlbnRyaWVz
WzIyNF0pLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZUEVfQ1NUUiwgMCwgTlVMTCwg
JmFycmF5c1sxNzRdLCAzLCAzKSwgMCwgJnJlZnRhYmxlc1syNThdLCAmcmVmdGFibGVzWzI1OV0p
LAotICBVUEJfRU5VTURFRl9JTklUKCJnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlw
ZSIsIFVQQl9TVFJUQUJMRV9JTklUKDMsIDMsIFVQQl9DVFlQRV9JTlQzMiwgMiwgJnN0cmVudHJp
ZXNbMjI4XSksIFVQQl9JTlRUQUJMRV9JTklUKDAsIDAsIFVQQl9DVFlQRV9DU1RSLCAwLCBOVUxM
LCAmYXJyYXlzWzE3N10sIDMsIDMpLCAwLCAmcmVmdGFibGVzWzI2MF0sICZyZWZ0YWJsZXNbMjYx
XSksCi0gIFVQQl9FTlVNREVGX0lOSVQoImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5PcHRp
bWl6ZU1vZGUiLCBVUEJfU1RSVEFCTEVfSU5JVCgzLCAzLCBVUEJfQ1RZUEVfSU5UMzIsIDIsICZz
dHJlbnRyaWVzWzIzMl0pLCBVUEJfSU5UVEFCTEVfSU5JVCgwLCAwLCBVUEJfQ1RZUEVfQ1NUUiwg
MCwgTlVMTCwgJmFycmF5c1sxODBdLCA0LCAzKSwgMCwgJnJlZnRhYmxlc1syNjJdLCAmcmVmdGFi
bGVzWzI2M10pLAotfTsKLQotc3RhdGljIGNvbnN0IHVwYl90YWJlbnQgc3RyZW50cmllc1syMzZd
ID0gewotICB7VVBCX1RBQktFWV9TVFIoIlwwMTEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAi
ZXh0ZW5zaW9uIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzIyXSksIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX1NUUigiXDAxNSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJyZXNlcnZlZF9u
YW1lIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzgyXSksIE5VTEx9LAotICB7VVBC
X1RBQktFWV9TVFIoIlwwMDQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibmFtZSIpLCBVUEJf
VEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s1Ml0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9O
RSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBV
UEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA1IiwgIlww
MDAiLCAiXDAwMCIsICJcMDAwIiwgImZpZWxkIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmll
bGRzWzI1XSksICZzdHJlbnRyaWVzWzEyXX0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNyIsICJc
MDAwIiwgIlwwMDAiLCAiXDAwMCIsICJleHRlbnNpb25fcmFuZ2UiKSwgVVBCX1RBQlZBTFVFX1BU
Ul9JTklUKCZmaWVsZHNbMjRdKSwgJnN0cmVudHJpZXNbMTRdfSwKLSAge1VQQl9UQUJLRVlfTk9O
RSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlww
MTMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibmVzdGVkX3R5cGUiKSwgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCZmaWVsZHNbNjBdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDE2IiwgIlww
MDAiLCAiXDAwMCIsICJcMDAwIiwgInJlc2VydmVkX3JhbmdlIiksIFVQQl9UQUJWQUxVRV9QVFJf
SU5JVCgmZmllbGRzWzgzXSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDciLCAiXDAw
MCIsICJcMDAwIiwgIlwwMDAiLCAib3B0aW9ucyIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZp
ZWxkc1s2OF0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwgIlwwMDAiLCAiXDAw
MCIsICJcMDAwIiwgIm9uZW9mX2RlY2wiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNb
NjVdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxMSIsICJcMDAwIiwgIlwwMDAiLCAi
XDAwMCIsICJlbnVtX3R5cGUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTldKSwg
JnN0cmVudHJpZXNbMTNdfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA1IiwgIlwwMDAiLCAiXDAw
MCIsICJcMDAwIiwgInN0YXJ0IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzg5XSks
IE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAi
LCAiZW5kIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzE4XSksIE5VTEx9LAotICB7
VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfU1RSKCJcMDA1IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInN0YXJ0IiksIFVQQl9UQUJW
QUxVRV9QVFJfSU5JVCgmZmllbGRzWzg4XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlww
MDMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZW5kIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5J
VCgmZmllbGRzWzE3XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVf
RU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBU
WV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lO
SVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDUiLCAiXDAwMCIsICJcMDAwIiwgIlww
MDAiLCAidmFsdWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTAyXSksIE5VTEx9
LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDciLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAib3B0
aW9ucyIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3NF0pLCBOVUxMfSwKLSAge1VQ
Ql9UQUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm5hbWUiKSwgVVBC
X1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNDldKSwgJnN0cmVudHJpZXNbMjZdfSwKLSAge1VQ
Ql9UQUJLRVlfU1RSKCJcMDI0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInVuaW50ZXJwcmV0
ZWRfb3B0aW9uIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzk4XSksIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9TVFIoIlwwMTIiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZGVwcmVj
YXRlZCIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sxM10pLCBOVUxMfSwKLSAge1VQ
Ql9UQUJLRVlfU1RSKCJcMDEzIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImFsbG93X2FsaWFz
IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzFdKSwgTlVMTH0sCi0gIHtVUEJfVEFC
S0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlf
U1RSKCJcMDA2IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm51bWJlciIpLCBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1s2Ml0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBC
X1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDciLCAi
XDAwMCIsICJcMDAwIiwgIlwwMDAiLCAib3B0aW9ucyIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1s3M10pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAiLCAi
XDAwMCIsICJcMDAwIiwgIm5hbWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTNd
KSwgJnN0cmVudHJpZXNbMzRdfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDI0IiwgIlwwMDAiLCAi
XDAwMCIsICJcMDAwIiwgInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiksIFVQQl9UQUJWQUxVRV9QVFJf
SU5JVCgmZmllbGRzWzk3XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTIiLCAiXDAw
MCIsICJcMDAwIiwgIlwwMDAiLCAiZGVwcmVjYXRlZCIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1sxNV0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VN
UFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlf
SU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxMyIsICJcMDAwIiwgIlwwMDAiLCAi
XDAwMCIsICJvbmVvZl9pbmRleCIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2Nl0p
LCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA1IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAw
IiwgImxhYmVsIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzQwXSksIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX1NUUigiXDAwNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJuYW1lIiksIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzU1XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9O
T05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUs
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBC
X1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNiIsICJcMDAw
IiwgIlwwMDAiLCAiXDAwMCIsICJudW1iZXIiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVs
ZHNbNjNdKSwgJnN0cmVudHJpZXNbNTNdfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTAiLCAiXDAwMCIs
ICJcMDAwIiwgIlwwMDAiLCAiZXh0ZW5kZWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVs
ZHNbMjFdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxMSIsICJcMDAwIiwgIlwwMDAi
LCAiXDAwMCIsICJ0eXBlX25hbWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbOTRd
KSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxMSIsICJcMDAwIiwgIlwwMDAiLCAiXDAw
MCIsICJqc29uX25hbWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMzhdKSwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJ0
eXBlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzkzXSksICZzdHJlbnRyaWVzWzUw
XX0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJk
ZWZhdWx0X3ZhbHVlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzddKSwgTlVMTH0s
Ci0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJvcHRp
b25zIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzcxXSksIE5VTEx9LAotICB7VVBC
X1RBQktFWV9TVFIoIlwwMjQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAidW5pbnRlcnByZXRl
ZF9vcHRpb24iKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbOTldKSwgTlVMTH0sCi0g
IHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQ
Ql9UQUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIndlYWsiKSwgVVBC
X1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTAzXSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9O
T05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUs
IFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBC
X1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNiIsICJcMDAw
IiwgIlwwMDAiLCAiXDAwMCIsICJwYWNrZWQiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVs
ZHNbNzddKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNCIsICJcMDAwIiwgIlwwMDAi
LCAiXDAwMCIsICJsYXp5IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzQxXSksIE5V
TEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0s
Ci0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJjdHlw
ZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2XSksIE5VTEx9LAotICB7VVBCX1RB
QktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZ
X1NUUigiXDAwNiIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJqc3R5cGUiKSwgVVBCX1RBQlZB
TFVFX1BUUl9JTklUKCZmaWVsZHNbMzldKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAx
MiIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJkZXByZWNhdGVkIiksIFVQQl9UQUJWQUxVRV9Q
VFJfSU5JVCgmZmllbGRzWzEwXSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDExIiwgIlwwMDAiLCAi
XDAwMCIsICJcMDAwIiwgImV4dGVuc2lvbiIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxk
c1syM10pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDE3IiwgIlwwMDAiLCAiXDAwMCIs
ICJcMDAwIiwgIndlYWtfZGVwZW5kZW5jeSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxk
c1sxMDRdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9J
TklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAiLCAiXDAwMCIsICJc
MDAwIiwgIm5hbWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTRdKSwgTlVMTH0s
Ci0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJzZXJ2
aWNlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzg1XSksIE5VTEx9LAotICB7VVBC
X1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFC
S0VZX1NUUigiXDAyMCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJzb3VyY2VfY29kZV9pbmZv
IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzg2XSksIE5VTEx9LAotICB7VVBCX1RB
QktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZ
X05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RS
KCJcMDA2IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInN5bnRheCIpLCBVUEJfVEFCVkFMVUVf
UFRSX0lOSVQoJmZpZWxkc1s5MV0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwg
IlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImRlcGVuZGVuY3kiKSwgVVBCX1RBQlZBTFVFX1BUUl9J
TklUKCZmaWVsZHNbOF0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDE0IiwgIlwwMDAi
LCAiXDAwMCIsICJcMDAwIiwgIm1lc3NhZ2VfdHlwZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1s0N10pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA3IiwgIlwwMDAiLCAi
XDAwMCIsICJcMDAwIiwgInBhY2thZ2UiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNb
NzZdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNyIsICJcMDAwIiwgIlwwMDAiLCAi
XDAwMCIsICJvcHRpb25zIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzY5XSksICZz
dHJlbnRyaWVzWzg2XX0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxMSIsICJcMDAwIiwgIlwwMDAi
LCAiXDAwMCIsICJlbnVtX3R5cGUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMjBd
KSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAyMSIsICJcMDAwIiwgIlwwMDAiLCAiXDAw
MCIsICJwdWJsaWNfZGVwZW5kZW5jeSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s4
MF0pLCAmc3RyZW50cmllc1s4NV19LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVf
RU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNCIsICJcMDAwIiwgIlww
MDAiLCAiXDAwMCIsICJmaWxlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzI2XSks
IE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7
VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX1NUUigiXDAyMyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJjY19nZW5lcmljX3Nl
cnZpY2VzIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzNdKSwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX1NUUigiXDAyMCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJjc2hhcnBfbmFt
ZXNwYWNlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzVdKSwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9U
QUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktF
WV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05P
TkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwg
VVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJf
VEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJW
QUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwgIlwwMDAi
LCAiXDAwMCIsICJcMDAwIiwgImdvX3BhY2thZ2UiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZm
aWVsZHNbMjddKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNCIsICJcMDAwIiwgIlww
MDAiLCAiXDAwMCIsICJqYXZhX3BhY2thZ2UiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVs
ZHNbMzVdKSwgJnN0cmVudHJpZXNbMTIwXX0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJW
QUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVF
X0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMjQiLCAiXDAwMCIsICJc
MDAwIiwgIlwwMDAiLCAiamF2YV9vdXRlcl9jbGFzc25hbWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9J
TklUKCZmaWVsZHNbMzRdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAyNCIsICJcMDAw
IiwgIlwwMDAiLCAiXDAwMCIsICJ1bmludGVycHJldGVkX29wdGlvbiIpLCBVUEJfVEFCVkFMVUVf
UFRSX0lOSVQoJmZpZWxkc1s5NV0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RB
QlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFM
VUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9F
TVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDIzIiwgIlwwMDAiLCAiXDAw
MCIsICJcMDAwIiwgImphdmFfbXVsdGlwbGVfZmlsZXMiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklU
KCZmaWVsZHNbMzNdKSwgJnN0cmVudHJpZXNbMTE3XX0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQ
Ql9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDI1Iiwg
IlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImphdmFfZ2VuZXJpY19zZXJ2aWNlcyIpLCBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1szMl0pLCAmc3RyZW50cmllc1sxMThdfSwKLSAge1VQQl9U
QUJLRVlfU1RSKCJcMDM1IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImphdmFfZ2VuZXJhdGVf
ZXF1YWxzX2FuZF9oYXNoIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzMxXSksIE5V
TEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0s
Ci0gIHtVUEJfVEFCS0VZX1NUUigiXDAzNyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJqYXZh
bmFub191c2VfZGVwcmVjYXRlZF9wYWNrYWdlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmll
bGRzWzM3XSksICZzdHJlbnRyaWVzWzEyM119LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMjMiLCAi
XDAwMCIsICJcMDAwIiwgIlwwMDAiLCAicHlfZ2VuZXJpY19zZXJ2aWNlcyIpLCBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1s4MV0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDE0
IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm9wdGltaXplX2ZvciIpLCBVUEJfVEFCVkFMVUVf
UFRSX0lOSVQoJmZpZWxkc1s2N10pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDI2Iiwg
IlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImphdmFfc3RyaW5nX2NoZWNrX3V0ZjgiKSwgVVBCX1RB
QlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMzZdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigi
XDAxMiIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJkZXByZWNhdGVkIiksIFVQQl9UQUJWQUxV
RV9QVFJfSU5JVCgmZmllbGRzWzEyXSksICZzdHJlbnRyaWVzWzExOV19LAotICB7VVBCX1RBQktF
WV9TVFIoIlwwMjEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAib2JqY19jbGFzc19wcmVmaXgi
KSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNjRdKSwgTlVMTH0sCi0gIHtVUEJfVEFC
S0VZX1NUUigiXDAyMCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJjY19lbmFibGVfYXJlbmFz
IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzJdKSwgTlVMTH0sCi0gIHtVUEJfVEFC
S0VZX1NUUigiXDAyNyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJtZXNzYWdlX3NldF93aXJl
X2Zvcm1hdCIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s0Nl0pLCAmc3RyZW50cmll
c1sxMjhdfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5V
TEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0s
Ci0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAg
e1VQQl9UQUJLRVlfU1RSKCJcMDI0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInVuaW50ZXJw
cmV0ZWRfb3B0aW9uIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzk2XSksIE5VTEx9
LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTIiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZGVw
cmVjYXRlZCIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s5XSksIE5VTEx9LAotICB7
VVBCX1RBQktFWV9TVFIoIlwwMTEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibWFwX2VudHJ5
IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzQ1XSksIE5VTEx9LAotICB7VVBCX1RB
QktFWV9TVFIoIlwwMzciLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibm9fc3RhbmRhcmRfZGVz
Y3JpcHRvcl9hY2Nlc3NvciIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2MV0pLCBO
VUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9
LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMjAiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiY2xp
ZW50X3N0cmVhbWluZyIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s0XSksIE5VTEx9
LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMjAiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAic2Vy
dmVyX3N0cmVhbWluZyIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s4NF0pLCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm5h
bWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTZdKSwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX1NUUigiXDAxMiIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJpbnB1dF90eXBlIiks
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzI5XSksIE5VTEx9LAotICB7VVBCX1RBQktF
WV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NU
UigiXDAxMyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJvdXRwdXRfdHlwZSIpLCBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3NV0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJc
MDA3IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm9wdGlvbnMiKSwgVVBCX1RBQlZBTFVFX1BU
Ul9JTklUKCZmaWVsZHNbNzBdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAyNCIsICJc
MDAwIiwgIlwwMDAiLCAiXDAwMCIsICJ1bmludGVycHJldGVkX29wdGlvbiIpLCBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1sxMDBdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAx
MiIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJkZXByZWNhdGVkIiksIFVQQl9UQUJWQUxVRV9Q
VFJfSU5JVCgmZmllbGRzWzExXSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VN
UFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlf
SU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklU
LCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAw
IiwgIm5hbWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTBdKSwgTlVMTH0sCi0g
IHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQ
Ql9UQUJLRVlfU1RSKCJcMDA3IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIm9wdGlvbnMiKSwg
VVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzJdKSwgJnN0cmVudHJpZXNbMTUwXX0sCi0g
IHtVUEJfVEFCS0VZX1NUUigiXDAwNiIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJtZXRob2Qi
KSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNDhdKSwgTlVMTH0sCi0gIHtVUEJfVEFC
S0VZX1NUUigiXDAwNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJuYW1lIiksIFVQQl9UQUJW
QUxVRV9QVFJfSU5JVCgmZmllbGRzWzU3XSksICZzdHJlbnRyaWVzWzE0OV19LAotICB7VVBCX1RB
QktFWV9TVFIoIlwwMjQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAidW5pbnRlcnByZXRlZF9v
cHRpb24iKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTAxXSksIE5VTEx9LAotICB7
VVBCX1RBQktFWV9TVFIoIlwwMTIiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiZGVwcmVjYXRl
ZCIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sxNF0pLCBOVUxMfSwKLSAge1VQQl9U
QUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktF
WV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05P
TkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwg
VVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTAi
LCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibG9jYXRpb24iKSwgVVBCX1RBQlZBTFVFX1BUUl9J
TklUKCZmaWVsZHNbNDRdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VN
UFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlf
SU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklU
LCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDA0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAw
IiwgInNwYW4iKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbODddKSwgJnN0cmVudHJp
ZXNbMTY3XX0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAzMSIsICJcMDAwIiwgIlwwMDAiLCAiXDAw
MCIsICJsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgm
ZmllbGRzWzQzXSksICZzdHJlbnRyaWVzWzE2NV19LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMjEi
LCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAidHJhaWxpbmdfY29tbWVudHMiKSwgVVBCX1RBQlZB
TFVFX1BUUl9JTklUKCZmaWVsZHNbOTJdKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAy
MCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJsZWFkaW5nX2NvbW1lbnRzIiksIFVQQl9UQUJW
QUxVRV9QVFJfSU5JVCgmZmllbGRzWzQyXSksICZzdHJlbnRyaWVzWzE2NF19LAotICB7VVBCX1RB
QktFWV9TVFIoIlwwMDQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAicGF0aCIpLCBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3OF0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJc
MDE0IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImRvdWJsZV92YWx1ZSIpLCBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1sxNl0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBC
X1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAwNCIsICJcMDAw
IiwgIlwwMDAiLCAiXDAwMCIsICJuYW1lIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRz
WzUxXSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5J
VCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBO
VUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9
LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMjIiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibmVn
YXRpdmVfaW50X3ZhbHVlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzU5XSksIE5V
TEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTciLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAi
YWdncmVnYXRlX3ZhbHVlIiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzBdKSwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7
VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfU1RSKCJcMDIyIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgInBvc2l0aXZlX2ludF92YWx1
ZSIpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3OV0pLCBOVUxMfSwKLSAge1VQQl9U
QUJLRVlfU1RSKCJcMDIwIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgImlkZW50aWZpZXJfdmFs
dWUiKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMjhdKSwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX1NUUigiXDAxNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJzdHJpbmdfdmFsdWUi
KSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbOTBdKSwgJnN0cmVudHJpZXNbMTgyXX0s
Ci0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAg
e1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBC
X1RBQktFWV9TVFIoIlwwMTQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiaXNfZXh0ZW5zaW9u
IiksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzMwXSksIE5VTEx9LAotICB7VVBCX1RB
QktFWV9TVFIoIlwwMTEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAibmFtZV9wYXJ0IiksIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzU4XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9T
VFIoIlwwMTYiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiTEFCRUxfUkVRVUlSRUQiKSwgVVBC
X1RBQlZBTFVFX0lOVF9JTklUKDIpLCAmc3RyZW50cmllc1sxOTBdfSwKLSAge1VQQl9UQUJLRVlf
Tk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIo
IlwwMTYiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiTEFCRUxfUkVQRUFURUQiKSwgVVBCX1RB
QlZBTFVFX0lOVF9JTklUKDMpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDE2IiwgIlww
MDAiLCAiXDAwMCIsICJcMDAwIiwgIkxBQkVMX09QVElPTkFMIiksIFVQQl9UQUJWQUxVRV9JTlRf
SU5JVCgxKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNCIsICJcMDAwIiwgIlwwMDAi
LCAiXDAwMCIsICJUWVBFX0ZJWEVENjQiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDYpLCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9U
QUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktF
WV9TVFIoIlwwMTMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiVFlQRV9TVFJJTkciKSwgVVBC
X1RBQlZBTFVFX0lOVF9JTklUKDkpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwg
IlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIlRZUEVfRkxPQVQiKSwgVVBCX1RBQlZBTFVFX0lOVF9J
TklUKDIpLCAmc3RyZW50cmllc1syMjFdfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEzIiwgIlww
MDAiLCAiXDAwMCIsICJcMDAwIiwgIlRZUEVfRE9VQkxFIiksIFVQQl9UQUJWQUxVRV9JTlRfSU5J
VCgxKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklU
LCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwgIlwwMDAiLCAiXDAwMCIsICJcMDAw
IiwgIlRZUEVfSU5UMzIiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDUpLCBOVUxMfSwKLSAge1VQ
Ql9UQUJLRVlfU1RSKCJcMDE1IiwgIlwwMDAiLCAiXDAwMCIsICJcMDAwIiwgIlRZUEVfU0ZJWEVE
MzIiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDE1KSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NU
UigiXDAxNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJUWVBFX0ZJWEVEMzIiKSwgVVBCX1RB
QlZBTFVFX0lOVF9JTklUKDcpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTQiLCAiXDAwMCIs
ICJcMDAwIiwgIlwwMDAiLCAiVFlQRV9NRVNTQUdFIiksIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCgx
MSksICZzdHJlbnRyaWVzWzIyMl19LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVf
RU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBU
WV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwgIlwwMDAiLCAiXDAwMCIs
ICJcMDAwIiwgIlRZUEVfSU5UNjQiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDMpLCAmc3RyZW50
cmllc1syMTldfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQs
IE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwK
LSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7
VVBCX1RBQktFWV9TVFIoIlwwMTEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiVFlQRV9FTlVN
IiksIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCgxNCksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIo
IlwwMTMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiVFlQRV9VSU5UMzIiKSwgVVBCX1RBQlZB
TFVFX0lOVF9JTklUKDEzKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxV
RV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEzIiwgIlwwMDAiLCAi
XDAwMCIsICJcMDAwIiwgIlRZUEVfVUlOVDY0IiksIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCg0KSwg
JnN0cmVudHJpZXNbMjE4XX0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBU
WV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDE1IiwgIlwwMDAiLCAiXDAwMCIs
ICJcMDAwIiwgIlRZUEVfU0ZJWEVENjQiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDE2KSwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxMiIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJU
WVBFX0JZVEVTIiksIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCgxMiksIE5VTEx9LAotICB7VVBCX1RB
QktFWV9TVFIoIlwwMTMiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiVFlQRV9TSU5UNjQiKSwg
VVBCX1RBQlZBTFVFX0lOVF9JTklUKDE4KSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAx
MSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJUWVBFX0JPT0wiKSwgVVBCX1RBQlZBTFVFX0lO
VF9JTklUKDgpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDEyIiwgIlwwMDAiLCAiXDAw
MCIsICJcMDAwIiwgIlRZUEVfR1JPVVAiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDEwKSwgTlVM
TH0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxMyIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJU
WVBFX1NJTlQzMiIpLCBVUEJfVEFCVkFMVUVfSU5UX0lOSVQoMTcpLCBOVUxMfSwKLSAge1VQQl9U
QUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktF
WV9TVFIoIlwwMDQiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiQ09SRCIpLCBVUEJfVEFCVkFM
VUVfSU5UX0lOSVQoMSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMDYiLCAiXDAwMCIs
ICJcMDAwIiwgIlwwMDAiLCAiU1RSSU5HIiksIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCgwKSwgJnN0
cmVudHJpZXNbMjI1XX0sCi0gIHtVUEJfVEFCS0VZX1NUUigiXDAxNCIsICJcMDAwIiwgIlwwMDAi
LCAiXDAwMCIsICJTVFJJTkdfUElFQ0UiKSwgVVBCX1RBQlZBTFVFX0lOVF9JTklUKDIpLCBOVUxM
fSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAot
ICB7VVBCX1RBQktFWV9TVFIoIlwwMTEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAiLCAiSlNfTk9S
TUFMIiksIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCgwKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NU
UigiXDAxMSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJKU19OVU1CRVIiKSwgVVBCX1RBQlZB
TFVFX0lOVF9JTklUKDIpLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfU1RSKCJcMDExIiwgIlwwMDAi
LCAiXDAwMCIsICJcMDAwIiwgIkpTX1NUUklORyIpLCBVUEJfVEFCVkFMVUVfSU5UX0lOSVQoMSks
IE5VTEx9LAotICB7VVBCX1RBQktFWV9TVFIoIlwwMTEiLCAiXDAwMCIsICJcMDAwIiwgIlwwMDAi
LCAiQ09ERV9TSVpFIiksIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCgyKSwgTlVMTH0sCi0gIHtVUEJf
VEFCS0VZX1NUUigiXDAwNSIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJTUEVFRCIpLCBVUEJf
VEFCVkFMVUVfSU5UX0lOSVQoMSksICZzdHJlbnRyaWVzWzIzNV19LAotICB7VVBCX1RBQktFWV9O
T05FLCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX1NUUigi
XDAxNCIsICJcMDAwIiwgIlwwMDAiLCAiXDAwMCIsICJMSVRFX1JVTlRJTUUiKSwgVVBCX1RBQlZB
TFVFX0lOVF9JTklUKDMpLCBOVUxMfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1cGJfdGFiZW50IGlu
dGVudHJpZXNbMThdID0gewotICB7VVBCX1RBQktFWV9OT05FLCBVUEJfVEFCVkFMVUVfRU1QVFlf
SU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05VTSg5OTkpLCBVUEJfVEFCVkFMVUVfUFRSX0lO
SVQoJmZpZWxkc1s5OF0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVF
X0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OVU0oOTk5KSwgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCZmaWVsZHNbOTddKSwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9U
QUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTlVNKDk5OSksIFVQQl9U
QUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzk5XSksIE5VTEx9LAotICB7VVBCX1RBQktFWV9OT05F
LCBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwgTlVMTH0sCi0gIHtVUEJfVEFCS0VZX05VTSg5OTkp
LCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s5NV0pLCBOVUxMfSwKLSAge1VQQl9UQUJL
RVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9O
VU0oOTk5KSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbOTZdKSwgTlVMTH0sCi0gIHtV
UEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAge1VQQl9U
QUJLRVlfTlVNKDMzKSwgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTFdKSwgTlVMTH0s
Ci0gIHtVUEJfVEFCS0VZX05PTkUsIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULCBOVUxMfSwKLSAg
e1VQQl9UQUJLRVlfTlVNKDk5OSksIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzEwMF0p
LCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsIE5V
TEx9LAotICB7VVBCX1RBQktFWV9OVU0oMzMpLCBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxk
c1sxNF0pLCBOVUxMfSwKLSAge1VQQl9UQUJLRVlfTk9ORSwgVVBCX1RBQlZBTFVFX0VNUFRZX0lO
SVQsIE5VTEx9LAotICB7VVBCX1RBQktFWV9OVU0oOTk5KSwgVVBCX1RBQlZBTFVFX1BUUl9JTklU
KCZmaWVsZHNbMTAxXSksIE5VTEx9LAotfTsKLQotc3RhdGljIGNvbnN0IHVwYl90YWJ2YWwgYXJy
YXlzWzE4NF0gPSB7Ci0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVf
UFRSX0lOSVQoJmZpZWxkc1s1Ml0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sy
NV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2MF0pLAotICBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1sxOV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxk
c1syNF0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syMl0pLAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2OF0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZp
ZWxkc1s2NV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s4M10pLAotICBVUEJf
VEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s4Ml0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5J
VCwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbODldKSwKLSAgVVBCX1RBQlZBTFVF
X1BUUl9JTklUKCZmaWVsZHNbMThdKSwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzg4XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5J
VCgmZmllbGRzWzE3XSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1s0OV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxk
c1sxMDJdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzRdKSwKLSAgVVBCX1RB
QlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sxXSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmll
bGRzWzEzXSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRS
X0lOSVQoJmZpZWxkc1s1M10pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2Ml0p
LAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3M10pLAotICBVUEJfVEFCVkFMVUVf
RU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTVdKSwKLSAgVVBC
X1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzU1
XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzIxXSksCi0gIFVQQl9UQUJWQUxV
RV9QVFJfSU5JVCgmZmllbGRzWzYzXSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRz
WzQwXSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzkzXSksCi0gIFVQQl9UQUJW
QUxVRV9QVFJfSU5JVCgmZmllbGRzWzk0XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmll
bGRzWzddKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzFdKSwKLSAgVVBCX1RB
QlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNjZdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZm
aWVsZHNbMzhdKSwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9Q
VFJfSU5JVCgmZmllbGRzWzZdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzdd
KSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMTBdKSwKLSAgVVBCX1RBQlZBTFVF
X0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzQxXSksCi0gIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzM5XSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9J
TklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lO
SVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzEwM10pLAotICBVUEJfVEFCVkFM
VUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTRdKSwKLSAg
VVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNzZdKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9J
TklUKCZmaWVsZHNbOF0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s0N10pLAot
ICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syMF0pLAotICBVUEJfVEFCVkFMVUVfUFRS
X0lOSVQoJmZpZWxkc1s4NV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syM10p
LAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2OV0pLAotICBVUEJfVEFCVkFMVUVf
UFRSX0lOSVQoJmZpZWxkc1s4Nl0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s4
MF0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1sxMDRdKSwKLSAgVVBCX1RBQlZB
TFVFX1BUUl9JTklUKCZmaWVsZHNbOTFdKSwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0g
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzI2XSksCi0gIFVQQl9UQUJWQUxVRV9FTVBU
WV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1szNV0pLAotICBVUEJfVEFC
VkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJW
QUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFM
VUVfUFRSX0lOSVQoJmZpZWxkc1szNF0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxk
c1s2N10pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1szM10pLAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syN10pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwK
LSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAot
ICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVs
ZHNbM10pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1szMl0pLAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s4MV0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwK
LSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbMzFdKSwKLSAgVVBCX1RBQlZBTFVFX0VN
UFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRS
X0lOSVQoJmZpZWxkc1sxMl0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RB
QlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1szNl0pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwK
LSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAot
ICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1syXSksCi0gIFVQQl9UQUJWQUxVRV9FTVBU
WV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZ
X0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lO
SVQoJmZpZWxkc1s2NF0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s1XSksCi0g
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzM3XSksCi0gIFVQQl9UQUJWQUxVRV9FTVBU
WV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s0Nl0pLAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s2MV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZp
ZWxkc1s5XSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1Q
VFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJf
SU5JVCgmZmllbGRzWzQ1XSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s1Nl0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZp
ZWxkc1syOV0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3NV0pLAotICBVUEJf
VEFCVkFMVUVfUFRSX0lOSVQoJmZpZWxkc1s3MF0pLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQo
JmZpZWxkc1s0XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzg0XSksCi0gIFVQ
Ql9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBC
X1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNTBdKSwKLSAgVVBCX1RBQlZBTFVFX0VNUFRZX0lO
SVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzU3XSksCi0gIFVQQl9UQUJWQUxV
RV9QVFJfSU5JVCgmZmllbGRzWzQ4XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRz
WzcyXSksCi0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfRU1QVFlf
SU5JVCwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCZmaWVsZHNbNDRdKSwKLSAgVVBCX1RBQlZB
TFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzc4XSksCi0g
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzg3XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJf
SU5JVCgmZmllbGRzWzQyXSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzkyXSks
Ci0gIFVQQl9UQUJWQUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoJmZp
ZWxkc1s0M10pLAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX0VN
UFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzUxXSksCi0gIFVQQl9U
QUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzI4XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgm
ZmllbGRzWzc5XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzU5XSksCi0gIFVQ
Ql9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzE2XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5J
VCgmZmllbGRzWzkwXSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzBdKSwKLSAg
VVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQsCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRz
WzU4XSksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgmZmllbGRzWzMwXSksCi0gIFVQQl9UQUJW
QUxVRV9FTVBUWV9JTklULAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIkxBQkVMX09QVElPTkFM
IiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiTEFCRUxfUkVRVUlSRUQiKSwKLSAgVVBCX1RB
QlZBTFVFX1BUUl9JTklUKCJMQUJFTF9SRVBFQVRFRCIpLAotICBVUEJfVEFCVkFMVUVfRU1QVFlf
SU5JVCwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCJUWVBFX0RPVUJMRSIpLAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoIlRZUEVfRkxPQVQiKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCJU
WVBFX0lOVDY0IiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiVFlQRV9VSU5UNjQiKSwKLSAg
VVBCX1RBQlZBTFVFX1BUUl9JTklUKCJUWVBFX0lOVDMyIiksCi0gIFVQQl9UQUJWQUxVRV9QVFJf
SU5JVCgiVFlQRV9GSVhFRDY0IiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiVFlQRV9GSVhF
RDMyIiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiVFlQRV9CT09MIiksCi0gIFVQQl9UQUJW
QUxVRV9QVFJfSU5JVCgiVFlQRV9TVFJJTkciKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCJU
WVBFX0dST1VQIiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiVFlQRV9NRVNTQUdFIiksCi0g
IFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiVFlQRV9CWVRFUyIpLAotICBVUEJfVEFCVkFMVUVfUFRS
X0lOSVQoIlRZUEVfVUlOVDMyIiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiVFlQRV9FTlVN
IiksCi0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiVFlQRV9TRklYRUQzMiIpLAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoIlRZUEVfU0ZJWEVENjQiKSwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklU
KCJUWVBFX1NJTlQzMiIpLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIlRZUEVfU0lOVDY0Iiks
Ci0gIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCgiU1RSSU5HIiksCi0gIFVQQl9UQUJWQUxVRV9QVFJf
SU5JVCgiQ09SRCIpLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIlNUUklOR19QSUVDRSIpLAot
ICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIkpTX05PUk1BTCIpLAotICBVUEJfVEFCVkFMVUVfUFRS
X0lOSVQoIkpTX1NUUklORyIpLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIkpTX05VTUJFUiIp
LAotICBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCwKLSAgVVBCX1RBQlZBTFVFX1BUUl9JTklUKCJT
UEVFRCIpLAotICBVUEJfVEFCVkFMVUVfUFRSX0lOSVQoIkNPREVfU0laRSIpLAotICBVUEJfVEFC
VkFMVUVfUFRSX0lOSVQoIkxJVEVfUlVOVElNRSIpLAotfTsKLQotI2lmZGVmIFVQQl9ERUJVR19S
RUZTCi1zdGF0aWMgdXBiX2ludHRhYmxlIHJlZnRhYmxlc1syNjRdID0gewotICBVUEJfRU1QVFlf
SU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQo
VVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIp
LAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklU
KFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRS
KSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBU
WV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5J
VChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BU
UiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1Q
VFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lO
SVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9Q
VFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VN
UFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9J
TklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVf
UFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9F
TVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVf
SU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBF
X1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJf
RU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxF
X0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQ
RV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBC
X0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJM
RV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZ
UEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQ
Ql9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFC
TEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NU
WVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBV
UEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRB
QkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9D
VFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAg
VVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRU
QUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJf
Q1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0g
IFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5U
VEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBC
X0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAot
ICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lO
VFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQ
Ql9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwK
LSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9J
TlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChV
UEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiks
Ci0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlf
SU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQo
VVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIp
LAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklU
KFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRS
KSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBU
WV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5J
VChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BU
UiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1Q
VFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lO
SVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9Q
VFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VN
UFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9J
TklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVf
UFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9F
TVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVf
SU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBF
X1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJf
RU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxF
X0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQ
RV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBC
X0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJM
RV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZ
UEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQ
Ql9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFC
TEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NU
WVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBV
UEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRB
QkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9D
VFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAg
VVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRU
QUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJf
Q1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0g
IFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5U
VEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBC
X0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAot
ICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lO
VFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQ
Ql9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwK
LSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9J
TlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChV
UEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiks
Ci0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlf
SU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQo
VVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIp
LAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklU
KFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRS
KSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBU
WV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5J
VChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BU
UiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1Q
VFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lO
SVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9Q
VFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VN
UFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9J
TklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVf
UFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9F
TVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVf
SU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBF
X1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJf
RU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxF
X0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQ
RV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBC
X0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJM
RV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZ
UEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQ
Ql9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFC
TEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NU
WVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBV
UEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRB
QkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9D
VFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAg
VVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRU
QUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJf
Q1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0g
IFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5U
VEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBC
X0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAot
ICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lO
VFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQ
Ql9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwK
LSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9J
TlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChV
UEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiks
Ci0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlf
SU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQo
VVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIp
LAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklU
KFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRS
KSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBU
WV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5J
VChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BU
UiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1Q
VFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lO
SVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9Q
VFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VN
UFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9J
TklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVf
UFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9F
TVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVf
SU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBF
X1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJf
RU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxF
X0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQ
RV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBC
X0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJM
RV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZ
UEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQ
Ql9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFC
TEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NU
WVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBV
UEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRB
QkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9D
VFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAg
VVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRU
QUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJf
Q1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0g
IFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5U
VEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBC
X0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAot
ICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lO
VFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQ
Ql9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwK
LSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9J
TlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChV
UEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiks
Ci0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlf
SU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQo
VVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIp
LAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZ
X0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklU
KFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRS
KSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBU
WV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5J
VChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BU
UiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1Q
VFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lO
SVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9Q
VFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VN
UFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9J
TklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVf
UFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9F
TVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVf
SU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBF
X1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJf
RU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxF
X0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQ
RV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBC
X0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJM
RV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFCTEVfSU5JVChVUEJfQ1RZ
UEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NUWVBFX1BUUiksCi0gIFVQ
Ql9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotICBVUEJfRU1QVFlfSU5UVEFC
TEVfSU5JVChVUEJfQ1RZUEVfUFRSKSwKLSAgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoVVBCX0NU
WVBFX1BUUiksCi0gIFVQQl9FTVBUWV9JTlRUQUJMRV9JTklUKFVQQl9DVFlQRV9QVFIpLAotfTsK
LSNlbmRpZgotCi1zdGF0aWMgY29uc3QgdXBiX21zZ2RlZiAqcmVmbShjb25zdCB1cGJfbXNnZGVm
ICptLCBjb25zdCB2b2lkICpvd25lcikgewotICB1cGJfbXNnZGVmX3JlZihtLCBvd25lcik7Ci0g
IHJldHVybiBtOwotfQotCi1zdGF0aWMgY29uc3QgdXBiX2VudW1kZWYgKnJlZmUoY29uc3QgdXBi
X2VudW1kZWYgKmUsIGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIHVwYl9lbnVtZGVmX3JlZihlLCBv
d25lcik7Ci0gIHJldHVybiBlOwotfQotCi0vKiBQdWJsaWMgQVBJLiAqLwotY29uc3QgdXBiX21z
Z2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX2dldChjb25zdCB2
b2lkICpvd25lcikgeyByZXR1cm4gcmVmbSgmbXNnc1swXSwgb3duZXIpOyB9Ci1jb25zdCB1cGJf
bXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9u
UmFuZ2VfZ2V0KGNvbnN0IHZvaWQgKm93bmVyKSB7IHJldHVybiByZWZtKCZtc2dzWzFdLCBvd25l
cik7IH0KLWNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0
b3JQcm90b19SZXNlcnZlZFJhbmdlX2dldChjb25zdCB2b2lkICpvd25lcikgeyByZXR1cm4gcmVm
bSgmbXNnc1syXSwgb3duZXIpOyB9Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9w
cm90b2J1Zl9FbnVtRGVzY3JpcHRvclByb3RvX2dldChjb25zdCB2b2lkICpvd25lcikgeyByZXR1
cm4gcmVmbSgmbXNnc1szXSwgb3duZXIpOyB9Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9FbnVtT3B0aW9uc19nZXQoY29uc3Qgdm9pZCAqb3duZXIpIHsgcmV0dXJu
IHJlZm0oJm1zZ3NbNF0sIG93bmVyKTsgfQotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRW51bVZhbHVlRGVzY3JpcHRvclByb3RvX2dldChjb25zdCB2b2lkICpvd25l
cikgeyByZXR1cm4gcmVmbSgmbXNnc1s1XSwgb3duZXIpOyB9Ci1jb25zdCB1cGJfbXNnZGVmICp1
cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtVmFsdWVPcHRpb25zX2dldChjb25zdCB2b2lkICpv
d25lcikgeyByZXR1cm4gcmVmbSgmbXNnc1s2XSwgb3duZXIpOyB9Ci1jb25zdCB1cGJfbXNnZGVm
ICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19nZXQoY29uc3Qg
dm9pZCAqb3duZXIpIHsgcmV0dXJuIHJlZm0oJm1zZ3NbN10sIG93bmVyKTsgfQotY29uc3QgdXBi
X21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX2dldChjb25zdCB2
b2lkICpvd25lcikgeyByZXR1cm4gcmVmbSgmbXNnc1s4XSwgb3duZXIpOyB9Ci1jb25zdCB1cGJf
bXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvX2dldChj
b25zdCB2b2lkICpvd25lcikgeyByZXR1cm4gcmVmbSgmbXNnc1s5XSwgb3duZXIpOyB9Ci1jb25z
dCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclNldF9n
ZXQoY29uc3Qgdm9pZCAqb3duZXIpIHsgcmV0dXJuIHJlZm0oJm1zZ3NbMTBdLCBvd25lcik7IH0K
LWNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2dl
dChjb25zdCB2b2lkICpvd25lcikgeyByZXR1cm4gcmVmbSgmbXNnc1sxMV0sIG93bmVyKTsgfQot
Y29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWVzc2FnZU9wdGlvbnNf
Z2V0KGNvbnN0IHZvaWQgKm93bmVyKSB7IHJldHVybiByZWZtKCZtc2dzWzEyXSwgb3duZXIpOyB9
Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNjcmlw
dG9yUHJvdG9fZ2V0KGNvbnN0IHZvaWQgKm93bmVyKSB7IHJldHVybiByZWZtKCZtc2dzWzEzXSwg
b3duZXIpOyB9Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRo
b2RPcHRpb25zX2dldChjb25zdCB2b2lkICpvd25lcikgeyByZXR1cm4gcmVmbSgmbXNnc1sxNF0s
IG93bmVyKTsgfQotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfT25l
b2ZEZXNjcmlwdG9yUHJvdG9fZ2V0KGNvbnN0IHZvaWQgKm93bmVyKSB7IHJldHVybiByZWZtKCZt
c2dzWzE1XSwgb3duZXIpOyB9Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9TZXJ2aWNlRGVzY3JpcHRvclByb3RvX2dldChjb25zdCB2b2lkICpvd25lcikgeyByZXR1
cm4gcmVmbSgmbXNnc1sxNl0sIG93bmVyKTsgfQotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19n
b29nbGVfcHJvdG9idWZfU2VydmljZU9wdGlvbnNfZ2V0KGNvbnN0IHZvaWQgKm93bmVyKSB7IHJl
dHVybiByZWZtKCZtc2dzWzE3XSwgb3duZXIpOyB9Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VDb2RlSW5mb19nZXQoY29uc3Qgdm9pZCAqb3duZXIpIHsg
cmV0dXJuIHJlZm0oJm1zZ3NbMThdLCBvd25lcik7IH0KLWNvbnN0IHVwYl9tc2dkZWYgKnVwYmRl
ZnNfZ29vZ2xlX3Byb3RvYnVmX1NvdXJjZUNvZGVJbmZvX0xvY2F0aW9uX2dldChjb25zdCB2b2lk
ICpvd25lcikgeyByZXR1cm4gcmVmbSgmbXNnc1sxOV0sIG93bmVyKTsgfQotY29uc3QgdXBiX21z
Z2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlvbl9nZXQoY29u
c3Qgdm9pZCAqb3duZXIpIHsgcmV0dXJuIHJlZm0oJm1zZ3NbMjBdLCBvd25lcik7IH0KLWNvbnN0
IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRpb25f
TmFtZVBhcnRfZ2V0KGNvbnN0IHZvaWQgKm93bmVyKSB7IHJldHVybiByZWZtKCZtc2dzWzIxXSwg
b3duZXIpOyB9Ci0KLWNvbnN0IHVwYl9lbnVtZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9G
aWVsZERlc2NyaXB0b3JQcm90b19MYWJlbF9nZXQoY29uc3Qgdm9pZCAqb3duZXIpIHsgcmV0dXJu
IHJlZmUoJmVudW1zWzBdLCBvd25lcik7IH0KLWNvbnN0IHVwYl9lbnVtZGVmICp1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX2dldChjb25zdCB2b2lkICpv
d25lcikgeyByZXR1cm4gcmVmZSgmZW51bXNbMV0sIG93bmVyKTsgfQotY29uc3QgdXBiX2VudW1k
ZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19DVHlwZV9nZXQoY29uc3Qg
dm9pZCAqb3duZXIpIHsgcmV0dXJuIHJlZmUoJmVudW1zWzJdLCBvd25lcik7IH0KLWNvbnN0IHVw
Yl9lbnVtZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnNfSlNUeXBlX2dl
dChjb25zdCB2b2lkICpvd25lcikgeyByZXR1cm4gcmVmZSgmZW51bXNbM10sIG93bmVyKTsgfQot
Y29uc3QgdXBiX2VudW1kZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX09w
dGltaXplTW9kZV9nZXQoY29uc3Qgdm9pZCAqb3duZXIpIHsgcmV0dXJuIHJlZmUoJmVudW1zWzRd
LCBvd25lcik7IH0KLS8qCi0qKiBYWFg6IFRoZSByb3V0aW5lcyBpbiB0aGlzIGZpbGUgdGhhdCBj
b25zdW1lIGEgc3RyaW5nIGRvIG5vdCBjdXJyZW50bHkKLSoqIHN1cHBvcnQgaGF2aW5nIHRoZSBz
dHJpbmcgc3BhbiBidWZmZXJzLiAgSW4gdGhlIGZ1dHVyZSwgYXMgdXBiX3NpbmsgYW5kCi0qKiBp
dHMgYnVmZmVyaW5nL3NoYXJpbmcgZnVuY3Rpb25hbGl0eSBldm9sdmUgdGhlcmUgc2hvdWxkIGJl
IGFuIGVhc3kgYW5kCi0qKiBpZGlvbWF0aWMgd2F5IG9mIGNvcnJlY3RseSBoYW5kbGluZyB0aGlz
IGNhc2UuICBGb3Igbm93LCB3ZSBhY2NlcHQgdGhpcwotKiogbGltaXRhdGlvbiBzaW5jZSB3ZSBj
dXJyZW50bHkgb25seSBwYXJzZSBkZXNjcmlwdG9ycyBmcm9tIHNpbmdsZSBzdHJpbmdzLgotKi8K
LQotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLQotLyogQ29tcGFyZXMgYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBu
b24tTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4gKi8KLXN0YXRpYyBib29sIHVwYl9zdHJlcShjb25z
dCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pIHsKLSAgcmV0dXJuIHN0cmxl
bihzdHIpID09IG4gJiYgbWVtY21wKHN0ciwgYnVmLCBuKSA9PSAwOwotfQotCi0vKiBXZSBrZWVw
IGEgc3RhY2sgb2YgYWxsIHRoZSBtZXNzYWdlcyBzY29wZXMgd2UgYXJlIGN1cnJlbnRseSBpbiwg
YXMgd2VsbCBhcwotICogdGhlIHRvcC1sZXZlbCBmaWxlIHNjb3BlLiAgVGhpcyBpcyBuZWNlc3Nh
cnkgdG8gY29ycmVjdGx5IHF1YWxpZnkgdGhlCi0gKiBkZWZpbml0aW9ucyB0aGF0IGFyZSBjb250
YWluZWQgaW5zaWRlLiAgIm5hbWUiIHRyYWNrcyB0aGUgbmFtZSBvZiB0aGUKLSAqIG1lc3NhZ2Ug
b3IgcGFja2FnZSAoYSBiYXJlIG5hbWUgLS0gbm90IHF1YWxpZmllZCBieSBhbnkgZW5jbG9zaW5n
IHNjb3BlcykuICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNoYXIgKm5hbWU7Ci0gIC8qIEluZGV4
IG9mIHRoZSBmaXJzdCBkZWYgdGhhdCBpcyB1bmRlciB0aGlzIHNjb3BlLiAgRm9yIG1zZ2RlZnMs
IHRoZQotICAgKiBtc2dkZWYgaXRzZWxmIGlzIGF0IHN0YXJ0LTEuICovCi0gIGludCBzdGFydDsK
LX0gdXBiX2Rlc2NyZWFkZXJfZnJhbWU7Ci0KLS8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBuZXN0
ZWQgZGVjbGFyYXRpb25zIHRoYXQgYXJlIGFsbG93ZWQsIGllLgotICogbWVzc2FnZSBGb28gewot
ICogICBtZXNzYWdlIEJhciB7Ci0gKiAgICAgbWVzc2FnZSBCYXogewotICogICAgIH0KLSAqICAg
fQotICogfQotICoKLSAqIFRoaXMgaXMgYSByZXNvdXJjZSBsaW1pdCB0aGF0IGFmZmVjdHMgaG93
IGJpZyBvdXIgcnVudGltZSBzdGFjayBjYW4gZ3Jvdy4KLSAqIFRPRE86IG1ha2UgdGhpcyBhIHJ1
bnRpbWUtc2V0dGFibGUgcHJvcGVydHkgb2YgdGhlIFJlYWRlciBpbnN0YW5jZS4gKi8KLSNkZWZp
bmUgVVBCX01BWF9NRVNTQUdFX05FU1RJTkcgNjQKLQotc3RydWN0IHVwYl9kZXNjcmVhZGVyIHsK
LSAgdXBiX3Npbmsgc2luazsKLSAgdXBiX2ludHRhYmxlIGZpbGVzOwotICB1cGJfZmlsZWRlZiAq
ZmlsZTsgIC8qIFRoZSBsYXN0IGZpbGUgaW4gZmlsZXMuICovCi0gIHVwYl9kZXNjcmVhZGVyX2Zy
YW1lIHN0YWNrW1VQQl9NQVhfTUVTU0FHRV9ORVNUSU5HXTsKLSAgaW50IHN0YWNrX2xlbjsKLQot
ICB1aW50MzJfdCBudW1iZXI7Ci0gIGNoYXIgKm5hbWU7Ci0gIGJvb2wgc2F3X251bWJlcjsKLSAg
Ym9vbCBzYXdfbmFtZTsKLQotICBjaGFyICpkZWZhdWx0X3N0cmluZzsKLQotICB1cGJfZmllbGRk
ZWYgKmY7Ci19OwotCi1zdGF0aWMgY2hhciAqdXBiX3N0cm5kdXAoY29uc3QgY2hhciAqYnVmLCBz
aXplX3QgbikgewotICBjaGFyICpyZXQgPSB1cGJfZ21hbGxvYyhuICsgMSk7Ci0gIGlmICghcmV0
KSByZXR1cm4gTlVMTDsKLSAgbWVtY3B5KHJldCwgYnVmLCBuKTsKLSAgcmV0W25dID0gJ1wwJzsK
LSAgcmV0dXJuIHJldDsKLX0KLQotLyogUmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcg
dGhhdCBqb2lucyBpbnB1dCBzdHJpbmdzIHRvZ2V0aGVyLCBmb3IKLSAqIGV4YW1wbGU6Ci0gKiAg
IGpvaW4oIkZvby5CYXIiLCAiQmF6IikgLT4gIkZvby5CYXIuQmF6IgotICogICBqb2luKCIiLCAi
QmF6IikgLT4gIkJheiIKLSAqIENhbGxlciBvd25zIGEgcmVmIG9uIHRoZSByZXR1cm5lZCBzdHJp
bmcuICovCi1zdGF0aWMgY2hhciAqdXBiX2pvaW4oY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hh
ciAqbmFtZSkgewotICBpZiAoIWJhc2UgfHwgc3RybGVuKGJhc2UpID09IDApIHsKLSAgICByZXR1
cm4gdXBiX2dzdHJkdXAobmFtZSk7Ci0gIH0gZWxzZSB7Ci0gICAgY2hhciAqcmV0ID0gdXBiX2dt
YWxsb2Moc3RybGVuKGJhc2UpICsgc3RybGVuKG5hbWUpICsgMik7Ci0gICAgaWYgKCFyZXQpIHsK
LSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXRbMF0gPSAnXDAnOwotICAgIHN0cmNh
dChyZXQsIGJhc2UpOwotICAgIHN0cmNhdChyZXQsICIuIik7Ci0gICAgc3RyY2F0KHJldCwgbmFt
ZSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi0vKiBRdWFsaWZ5IHRoZSBkZWZuYW1lIGZv
ciBhbGwgZGVmcyBzdGFydGluZyB3aXRoIG9mZnNldCAic3RhcnQiIHdpdGggInN0ciIuICovCi1z
dGF0aWMgYm9vbCB1cGJfZGVzY3JlYWRlcl9xdWFsaWZ5KHVwYl9maWxlZGVmICpmLCBjaGFyICpz
dHIsIGludDMyX3Qgc3RhcnQpIHsKLSAgc2l6ZV90IGk7Ci0gIGZvciAoaSA9IHN0YXJ0OyBpIDwg
dXBiX2ZpbGVkZWZfZGVmY291bnQoZik7IGkrKykgewotICAgIHVwYl9kZWYgKmRlZiA9IHVwYl9m
aWxlZGVmX211dGFibGVkZWYoZiwgaSk7Ci0gICAgY2hhciAqbmFtZSA9IHVwYl9qb2luKHN0ciwg
dXBiX2RlZl9mdWxsbmFtZShkZWYpKTsKLSAgICBpZiAoIW5hbWUpIHsKLSAgICAgIC8qIE5lZWQg
YmV0dGVyIGxvZ2ljIGhlcmU7IGF0IHRoaXMgcG9pbnQgd2UndmUgcXVhbGlmaWVkIHNvbWUgbmFt
ZXMgYnV0Ci0gICAgICAgKiBub3Qgb3RoZXJzLiAqLwotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICB1cGJfZGVmX3NldGZ1bGxuYW1lKGRlZiwgbmFtZSwgTlVMTCk7Ci0gICAgdXBiX2dm
cmVlKG5hbWUpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0KLS8qIHVwYl9kZXNjcmVhZGVy
ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLXN0YXRpYyB1cGJfbXNnZGVmICp1cGJfZGVzY3JlYWRlcl90b3AodXBiX2Rlc2Ny
ZWFkZXIgKnIpIHsKLSAgaW50IGluZGV4OwotICBhc3NlcnQoci0+c3RhY2tfbGVuID4gMSk7Ci0g
IGluZGV4ID0gci0+c3RhY2tbci0+c3RhY2tfbGVuLTFdLnN0YXJ0IC0gMTsKLSAgYXNzZXJ0KGlu
ZGV4ID49IDApOwotICByZXR1cm4gdXBiX2Rvd25jYXN0X21zZ2RlZl9tdXRhYmxlKHVwYl9maWxl
ZGVmX211dGFibGVkZWYoci0+ZmlsZSwgaW5kZXgpKTsKLX0KLQotc3RhdGljIHVwYl9kZWYgKnVw
Yl9kZXNjcmVhZGVyX2xhc3QodXBiX2Rlc2NyZWFkZXIgKnIpIHsKLSAgcmV0dXJuIHVwYl9maWxl
ZGVmX211dGFibGVkZWYoci0+ZmlsZSwgdXBiX2ZpbGVkZWZfZGVmY291bnQoci0+ZmlsZSkgLSAx
KTsKLX0KLQotLyogU3RhcnQvZW5kIGhhbmRsZXJzIGZvciBGaWxlRGVzY3JpcHRvclByb3RvIGFu
ZCBEZXNjcmlwdG9yUHJvdG8gKHRoZSB0d28KLSAqIGVudGl0aWVzIHRoYXQgaGF2ZSBuYW1lcyBh
bmQgY2FuIGNvbnRhaW4gc3ViLWRlZmluaXRpb25zLiAqLwotdm9pZCB1cGJfZGVzY3JlYWRlcl9z
dGFydGNvbnRhaW5lcih1cGJfZGVzY3JlYWRlciAqcikgewotICB1cGJfZGVzY3JlYWRlcl9mcmFt
ZSAqZiA9ICZyLT5zdGFja1tyLT5zdGFja19sZW4rK107Ci0gIGYtPnN0YXJ0ID0gdXBiX2ZpbGVk
ZWZfZGVmY291bnQoci0+ZmlsZSk7Ci0gIGYtPm5hbWUgPSBOVUxMOwotfQotCi1ib29sIHVwYl9k
ZXNjcmVhZGVyX2VuZGNvbnRhaW5lcih1cGJfZGVzY3JlYWRlciAqcikgewotICB1cGJfZGVzY3Jl
YWRlcl9mcmFtZSAqZiA9ICZyLT5zdGFja1stLXItPnN0YWNrX2xlbl07Ci0gIGlmICghdXBiX2Rl
c2NyZWFkZXJfcXVhbGlmeShyLT5maWxlLCBmLT5uYW1lLCBmLT5zdGFydCkpIHsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLSAgdXBiX2dmcmVlKGYtPm5hbWUpOwotICBmLT5uYW1lID0gTlVMTDsK
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgdXBiX2Rlc2NyZWFkZXJfc2V0c2NvcGVuYW1lKHVw
Yl9kZXNjcmVhZGVyICpyLCBjaGFyICpzdHIpIHsKLSAgdXBiX2Rlc2NyZWFkZXJfZnJhbWUgKmYg
PSAmci0+c3RhY2tbci0+c3RhY2tfbGVuLTFdOwotICB1cGJfZ2ZyZWUoZi0+bmFtZSk7Ci0gIGYt
Pm5hbWUgPSBzdHI7Ci19Ci0KLS8qKiBIYW5kbGVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLkZpbGVE
ZXNjcmlwdG9yU2V0LiAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lk
ICpmaWxlc2V0X3N0YXJ0ZmlsZSh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCkgewotICB1
cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICByLT5maWxl
ID0gdXBiX2ZpbGVkZWZfbmV3KCZyLT5maWxlcyk7Ci0gIHVwYl9pbnR0YWJsZV9wdXNoKCZyLT5m
aWxlcywgdXBiX3ZhbHVlX3B0cihyLT5maWxlKSk7Ci0gIHJldHVybiByOwotfQotCi0vKiogSGFu
ZGxlcnMgZm9yIGdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLiAqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi1zdGF0aWMgYm9vbCBmaWxlX3N0YXJ0KHZvaWQgKmNsb3N1cmUs
IGNvbnN0IHZvaWQgKmhkKSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgVVBC
X1VOVVNFRChoZCk7Ci0gIHVwYl9kZXNjcmVhZGVyX3N0YXJ0Y29udGFpbmVyKHIpOwotICByZXR1
cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZmlsZV9lbmQodm9pZCAqY2xvc3VyZSwgY29uc3Qg
dm9pZCAqaGQsIHVwYl9zdGF0dXMgKnN0YXR1cykgewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNs
b3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKHN0YXR1cyk7Ci0gIHJldHVy
biB1cGJfZGVzY3JlYWRlcl9lbmRjb250YWluZXIocik7Ci19Ci0KLXN0YXRpYyBzaXplX3QgZmls
ZV9vbm5hbWUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4sIGNvbnN0IHVwYl9idWZoYW5kbGUg
KmhhbmRsZSkgewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1cmU7Ci0gIGNoYXIgKm5hbWU7
Ci0gIGJvb2wgb2s7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKGhhbmRsZSk7Ci0K
LSAgbmFtZSA9IHVwYl9zdHJuZHVwKGJ1Ziwgbik7Ci0gIC8qIFhYWDogc2VlIGNvbW1lbnQgYXQg
dGhlIHRvcCBvZiB0aGUgZmlsZS4gKi8KLSAgb2sgPSB1cGJfZmlsZWRlZl9zZXRuYW1lKHItPmZp
bGUsIG5hbWUsIE5VTEwpOwotICB1cGJfZ2ZyZWUobmFtZSk7Ci0gIFVQQl9BU1NFUlRfVkFSKG9r
LCBvayk7Ci0gIHJldHVybiBuOwotfQotCi1zdGF0aWMgc2l6ZV90IGZpbGVfb25wYWNrYWdlKHZv
aWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkLCBjb25zdCBjaGFyICpidWYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBuLCBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUp
IHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBjaGFyICpwYWNrYWdlOwotICBi
b29sIG9rOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgVVBCX1VOVVNFRChoYW5kbGUpOwotCi0gIHBh
Y2thZ2UgPSB1cGJfc3RybmR1cChidWYsIG4pOwotICAvKiBYWFg6IHNlZSBjb21tZW50IGF0IHRo
ZSB0b3Agb2YgdGhlIGZpbGUuICovCi0gIHVwYl9kZXNjcmVhZGVyX3NldHNjb3BlbmFtZShyLCBw
YWNrYWdlKTsKLSAgb2sgPSB1cGJfZmlsZWRlZl9zZXRwYWNrYWdlKHItPmZpbGUsIHBhY2thZ2Us
IE5VTEwpOwotICBVUEJfQVNTRVJUX1ZBUihvaywgb2spOwotICByZXR1cm4gbjsKLX0KLQotc3Rh
dGljIHNpemVfdCBmaWxlX29uc3ludGF4KHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkLCBj
b25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4sIGNv
bnN0IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1
cmU7Ci0gIGJvb2wgb2s7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKGhhbmRsZSk7
Ci0gIC8qIFhYWDogc2VlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4gKi8KLSAgaWYg
KHVwYl9zdHJlcSgicHJvdG8yIiwgYnVmLCBuKSkgewotICAgIG9rID0gdXBiX2ZpbGVkZWZfc2V0
c3ludGF4KHItPmZpbGUsIFVQQl9TWU5UQVhfUFJPVE8yLCBOVUxMKTsKLSAgfSBlbHNlIGlmICh1
cGJfc3RyZXEoInByb3RvMyIsIGJ1ZiwgbikpIHsKLSAgICBvayA9IHVwYl9maWxlZGVmX3NldHN5
bnRheChyLT5maWxlLCBVUEJfU1lOVEFYX1BST1RPMywgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAg
b2sgPSBmYWxzZTsKLSAgfQotCi0gIFVQQl9BU1NFUlRfVkFSKG9rLCBvayk7Ci0gIHJldHVybiBu
OwotfQotCi1zdGF0aWMgdm9pZCAqZmlsZV9zdGFydG1zZyh2b2lkICpjbG9zdXJlLCBjb25zdCB2
b2lkICpoZCkgewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1cmU7Ci0gIHVwYl9tc2dkZWYg
Km0gPSB1cGJfbXNnZGVmX25ldygmbSk7Ci0gIGJvb2wgb2sgPSB1cGJfZmlsZWRlZl9hZGRtc2co
ci0+ZmlsZSwgbSwgJm0sIE5VTEwpOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgVVBCX0FTU0VSVF9W
QVIob2ssIG9rKTsKLSAgcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB2b2lkICpmaWxlX3N0YXJ0ZW51
bSh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCkgewotICB1cGJfZGVzY3JlYWRlciAqciA9
IGNsb3N1cmU7Ci0gIHVwYl9lbnVtZGVmICplID0gdXBiX2VudW1kZWZfbmV3KCZlKTsKLSAgYm9v
bCBvayA9IHVwYl9maWxlZGVmX2FkZGVudW0oci0+ZmlsZSwgZSwgJmUsIE5VTEwpOwotICBVUEJf
VU5VU0VEKGhkKTsKLSAgVVBCX0FTU0VSVF9WQVIob2ssIG9rKTsKLSAgcmV0dXJuIHI7Ci19Ci0K
LXN0YXRpYyB2b2lkICpmaWxlX3N0YXJ0ZXh0KHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhk
KSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgYm9vbCBvazsKLSAgci0+ZiA9
IHVwYl9maWVsZGRlZl9uZXcocik7Ci0gIG9rID0gdXBiX2ZpbGVkZWZfYWRkZXh0KHItPmZpbGUs
IHItPmYsIHIsIE5VTEwpOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgVVBCX0FTU0VSVF9WQVIob2ss
IG9rKTsKLSAgcmV0dXJuIHI7Ci19Ci0KLS8qKiBIYW5kbGVycyBmb3IgZ29vZ2xlLnByb3RvYnVm
LkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by4gKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0
aWMgYm9vbCBlbnVtdmFsX3N0YXJ0bXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkKSB7
Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIHIt
PnNhd19udW1iZXIgPSBmYWxzZTsKLSAgci0+c2F3X25hbWUgPSBmYWxzZTsKLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBzaXplX3QgZW51bXZhbF9vbm5hbWUodm9pZCAqY2xvc3VyZSwgY29u
c3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IG4sIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICB1cGJfZGVzY3Jl
YWRlciAqciA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKGhhbmRs
ZSk7Ci0gIC8qIFhYWDogc2VlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4gKi8KLSAg
dXBiX2dmcmVlKHItPm5hbWUpOwotICByLT5uYW1lID0gdXBiX3N0cm5kdXAoYnVmLCBuKTsKLSAg
ci0+c2F3X25hbWUgPSB0cnVlOwotICByZXR1cm4gbjsKLX0KLQotc3RhdGljIGJvb2wgZW51bXZh
bF9vbm51bWJlcih2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgaW50MzJfdCB2YWwpIHsK
LSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgci0+
bnVtYmVyID0gdmFsOwotICByLT5zYXdfbnVtYmVyID0gdHJ1ZTsKLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBib29sIGVudW12YWxfZW5kbXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQg
KmhkLCB1cGJfc3RhdHVzICpzdGF0dXMpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJl
OwotICB1cGJfZW51bWRlZiAqZTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0KLSAgaWYoIXItPnNhd19u
dW1iZXIgfHwgIXItPnNhd19uYW1lKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2coc3RhdHVz
LCAiRW51bSB2YWx1ZSBtaXNzaW5nIG5hbWUgb3IgbnVtYmVyLiIpOwotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICBlID0gdXBiX2Rvd25jYXN0X2VudW1kZWZfbXV0YWJsZSh1cGJfZGVzY3JlYWRl
cl9sYXN0KHIpKTsKLSAgdXBiX2VudW1kZWZfYWRkdmFsKGUsIHItPm5hbWUsIHItPm51bWJlciwg
c3RhdHVzKTsKLSAgdXBiX2dmcmVlKHItPm5hbWUpOwotICByLT5uYW1lID0gTlVMTDsKLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8qKiBIYW5kbGVycyBmb3IgZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNj
cmlwdG9yUHJvdG8uICoqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBib29sIGVu
dW1fZW5kbXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkLCB1cGJfc3RhdHVzICpzdGF0
dXMpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICB1cGJfZW51bWRlZiAqZTsK
LSAgVVBCX1VOVVNFRChoZCk7Ci0KLSAgZSA9IHVwYl9kb3duY2FzdF9lbnVtZGVmX211dGFibGUo
dXBiX2Rlc2NyZWFkZXJfbGFzdChyKSk7Ci0gIGlmICh1cGJfZGVmX2Z1bGxuYW1lKHVwYl9kZXNj
cmVhZGVyX2xhc3QocikpID09IE5VTEwpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzdGF0
dXMsICJFbnVtIGhhZCBubyBuYW1lLiIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAo
dXBiX2VudW1kZWZfbnVtdmFscyhlKSA9PSAwKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2co
c3RhdHVzLCAiRW51bSBoYWQgbm8gdmFsdWVzLiIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHNpemVfdCBlbnVtX29ubmFtZSh2b2lkICpjbG9z
dXJlLCBjb25zdCB2b2lkICpoZCwgY29uc3QgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgbiwgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIHVwYl9k
ZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgY2hhciAqZnVsbG5hbWUgPSB1cGJfc3RybmR1cChi
dWYsIG4pOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgVVBCX1VOVVNFRChoYW5kbGUpOwotICAvKiBY
WFg6IHNlZSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuICovCi0gIHVwYl9kZWZfc2V0
ZnVsbG5hbWUodXBiX2Rlc2NyZWFkZXJfbGFzdChyKSwgZnVsbG5hbWUsIE5VTEwpOwotICB1cGJf
Z2ZyZWUoZnVsbG5hbWUpOwotICByZXR1cm4gbjsKLX0KLQotLyoqIEhhbmRsZXJzIGZvciBnb29n
bGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8gKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLQotc3RhdGljIGJvb2wgZmllbGRfc3RhcnRtc2codm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9p
ZCAqaGQpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhk
KTsKLSAgYXNzZXJ0KHItPmYpOwotICB1cGJfZ2ZyZWUoci0+ZGVmYXVsdF9zdHJpbmcpOwotICBy
LT5kZWZhdWx0X3N0cmluZyA9IE5VTEw7Ci0KLSAgLyogZmllbGRkZWZzIGRlZmF1bHQgdG8gcGFj
a2VkLCBidXQgZGVzY3JpcHRvcnMgZGVmYXVsdCB0byBub24tcGFja2VkLiAqLwotICB1cGJfZmll
bGRkZWZfc2V0cGFja2VkKHItPmYsIGZhbHNlKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qIENv
bnZlcnRzIHRoZSBkZWZhdWx0IHZhbHVlIGluIHN0cmluZyAic3RyIiBpbnRvICJkIi4gIFBhc3Nl
cyBhIHJlZiBvbiBzdHIuCi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gKi8KLXN0YXRpYyBi
b29sIHBhcnNlX2RlZmF1bHQoY2hhciAqc3RyLCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgYm9vbCBz
dWNjZXNzID0gdHJ1ZTsKLSAgY2hhciAqZW5kOwotICBzd2l0Y2ggKHVwYl9maWVsZGRlZl90eXBl
KGYpKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9JTlQzMjogewotICAgICAgbG9uZyB2YWwgPSBzdHJ0
b2woc3RyLCAmZW5kLCAwKTsKLSAgICAgIGlmICh2YWwgPiBJTlQzMl9NQVggfHwgdmFsIDwgSU5U
MzJfTUlOIHx8IGVycm5vID09IEVSQU5HRSB8fCAqZW5kKQotICAgICAgICBzdWNjZXNzID0gZmFs
c2U7Ci0gICAgICBlbHNlCi0gICAgICAgIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0aW50MzIoZiwg
dmFsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVQQl9UWVBFX0lOVDY0OiB7Ci0g
ICAgICAvKiBYWFg6IE5lZWQgdG8gd3JpdGUgb3VyIG93biBzdHJ0b2xsLCBzaW5jZSBpdCdzIG5v
dCBhdmFpbGFibGUgaW4gYzg5LiAqLwotICAgICAgbG9uZyBsb25nIHZhbCA9IHN0cnRvbChzdHIs
ICZlbmQsIDApOwotICAgICAgaWYgKHZhbCA+IElOVDY0X01BWCB8fCB2YWwgPCBJTlQ2NF9NSU4g
fHwgZXJybm8gPT0gRVJBTkdFIHx8ICplbmQpCi0gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAg
ICAgIGVsc2UKLSAgICAgICAgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRpbnQ2NChmLCB2YWwpOwot
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDMyOiB7Ci0gICAgICB1
bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvdWwoc3RyLCAmZW5kLCAwKTsKLSAgICAgIGlmICh2YWwg
PiBVSU5UMzJfTUFYIHx8IGVycm5vID09IEVSQU5HRSB8fCAqZW5kKQotICAgICAgICBzdWNjZXNz
ID0gZmFsc2U7Ci0gICAgICBlbHNlCi0gICAgICAgIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0dWlu
dDMyKGYsIHZhbCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5U
NjQ6IHsKLSAgICAgIC8qIFhYWDogTmVlZCB0byB3cml0ZSBvdXIgb3duIHN0cnRvdWxsLCBzaW5j
ZSBpdCdzIG5vdCBhdmFpbGFibGUgaW4gYzg5LiAqLwotICAgICAgdW5zaWduZWQgbG9uZyBsb25n
IHZhbCA9IHN0cnRvdWwoc3RyLCAmZW5kLCAwKTsKLSAgICAgIGlmICh2YWwgPiBVSU5UNjRfTUFY
IHx8IGVycm5vID09IEVSQU5HRSB8fCAqZW5kKQotICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0g
ICAgICBlbHNlCi0gICAgICAgIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0dWludDY0KGYsIHZhbCk7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVUEJfVFlQRV9ET1VCTEU6IHsKLSAgICAg
IGRvdWJsZSB2YWwgPSBzdHJ0b2Qoc3RyLCAmZW5kKTsKLSAgICAgIGlmIChlcnJubyA9PSBFUkFO
R0UgfHwgKmVuZCkKLSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgZWxzZQotICAgICAg
ICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGRvdWJsZShmLCB2YWwpOwotICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgVVBCX1RZUEVfRkxPQVQ6IHsKLSAgICAgIC8qIFhYWDogTmVlZCB0byB3
cml0ZSBvdXIgb3duIHN0cnRvZiwgc2luY2UgaXQncyBub3QgYXZhaWxhYmxlIGluIGM4OS4gKi8K
LSAgICAgIGZsb2F0IHZhbCA9IHN0cnRvZChzdHIsICZlbmQpOwotICAgICAgaWYgKGVycm5vID09
IEVSQU5HRSB8fCAqZW5kKQotICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICBlbHNlCi0g
ICAgICAgIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0ZmxvYXQoZiwgdmFsKTsKLSAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFVQQl9UWVBFX0JPT0w6IHsKLSAgICAgIGlmIChzdHJjbXAoc3Ry
LCAiZmFsc2UiKSA9PSAwKQotICAgICAgICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGJvb2woZiwg
ZmFsc2UpOwotICAgICAgZWxzZSBpZiAoc3RyY21wKHN0ciwgInRydWUiKSA9PSAwKQotICAgICAg
ICB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGJvb2woZiwgdHJ1ZSk7Ci0gICAgICBlbHNlCi0gICAg
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OiBh
Ym9ydCgpOwotICB9Ci0gIHJldHVybiBzdWNjZXNzOwotfQotCi1zdGF0aWMgYm9vbCBmaWVsZF9l
bmRtc2codm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIHVwYl9zdGF0dXMgKnN0YXR1cykg
ewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1cmU7Ci0gIHVwYl9maWVsZGRlZiAqZiA9IHIt
PmY7Ci0gIFVQQl9VTlVTRUQoaGQpOwotCi0gIC8qIFRPRE86IHZlcmlmeSB0aGF0IGFsbCByZXF1
aXJlZCBmaWVsZHMgd2VyZSBwcmVzZW50LiAqLwotICBhc3NlcnQodXBiX2ZpZWxkZGVmX251bWJl
cihmKSAhPSAwKTsKLSAgYXNzZXJ0KHVwYl9maWVsZGRlZl9uYW1lKGYpICE9IE5VTEwpOwotICBh
c3NlcnQoKHVwYl9maWVsZGRlZl9zdWJkZWZuYW1lKGYpICE9IE5VTEwpID09IHVwYl9maWVsZGRl
Zl9oYXNzdWJkZWYoZikpOwotCi0gIGlmIChyLT5kZWZhdWx0X3N0cmluZykgewotICAgIGlmICh1
cGJfZmllbGRkZWZfaXNzdWJtc2coZikpIHsKLSAgICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHN0
YXR1cywgIlN1Ym1lc3NhZ2VzIGNhbm5vdCBoYXZlIGRlZmF1bHRzLiIpOwotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBpZiAodXBiX2ZpZWxkZGVmX2lzc3RyaW5nKGYpIHx8IHVwYl9m
aWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX0VOVU0pIHsKLSAgICAgIHVwYl9maWVsZGRlZl9z
ZXRkZWZhdWx0Y3N0cihmLCByLT5kZWZhdWx0X3N0cmluZywgTlVMTCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIGlmIChyLT5kZWZhdWx0X3N0cmluZyAmJiAhcGFyc2VfZGVmYXVsdChyLT5kZWZhdWx0
X3N0cmluZywgZikpIHsKLSAgICAgICAgLyogV2UgZG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQg
Z2l2aW5nIGEgZ3JlYXQgZXJyb3IgbWVzc2FnZSBzaW5jZSB0aGUKLSAgICAgICAgICogY29tcGls
ZXIgc2hvdWxkIGhhdmUgZW5zdXJlZCB0aGlzIHdhcyBjb3JyZWN0LiAqLwotICAgICAgICB1cGJf
c3RhdHVzX3NldGVycm1zZyhzdGF0dXMsICJFcnJvciBjb252ZXJ0aW5nIGRlZmF1bHQgdmFsdWUu
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGZpZWxkX29ubGF6eSh2b2lkICpjbG9zdXJlLCBjb25z
dCB2b2lkICpoZCwgYm9vbCB2YWwpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwot
ICBVUEJfVU5VU0VEKGhkKTsKLQotICB1cGJfZmllbGRkZWZfc2V0bGF6eShyLT5mLCB2YWwpOwot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZmllbGRfb25wYWNrZWQodm9pZCAqY2xv
c3VyZSwgY29uc3Qgdm9pZCAqaGQsIGJvb2wgdmFsKSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0g
Y2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0KLSAgdXBiX2ZpZWxkZGVmX3NldHBhY2tlZChy
LT5mLCB2YWwpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZmllbGRfb250eXBl
KHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkLCBpbnQzMl90IHZhbCkgewotICB1cGJfZGVz
Y3JlYWRlciAqciA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGQpOwotCi0gIHVwYl9maWVsZGRl
Zl9zZXRkZXNjcmlwdG9ydHlwZShyLT5mLCB2YWwpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh
dGljIGJvb2wgZmllbGRfb25sYWJlbCh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgaW50
MzJfdCB2YWwpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VE
KGhkKTsKLQotICB1cGJfZmllbGRkZWZfc2V0bGFiZWwoci0+ZiwgdmFsKTsKLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBib29sIGZpZWxkX29ubnVtYmVyKHZvaWQgKmNsb3N1cmUsIGNvbnN0
IHZvaWQgKmhkLCBpbnQzMl90IHZhbCkgewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1cmU7
Ci0gIGJvb2wgb2s7Ci0gIFVQQl9VTlVTRUQoaGQpOwotCi0gIG9rID0gdXBiX2ZpZWxkZGVmX3Nl
dG51bWJlcihyLT5mLCB2YWwsIE5VTEwpOwotICBVUEJfQVNTRVJUX1ZBUihvaywgb2spOwotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHNpemVfdCBmaWVsZF9vbm5hbWUodm9pZCAqY2xvc3Vy
ZSwgY29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBuLCBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgdXBiX2Rl
c2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBjaGFyICpuYW1lID0gdXBiX3N0cm5kdXAoYnVmLCBu
KTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlKTsKLQotICAvKiBYWFg6
IHNlZSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuICovCi0gIHVwYl9maWVsZGRlZl9z
ZXRuYW1lKHItPmYsIG5hbWUsIE5VTEwpOwotICB1cGJfZ2ZyZWUobmFtZSk7Ci0gIHJldHVybiBu
OwotfQotCi1zdGF0aWMgc2l6ZV90IGZpZWxkX29udHlwZW5hbWUodm9pZCAqY2xvc3VyZSwgY29u
c3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgbiwgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIHVwYl9kZXNj
cmVhZGVyICpyID0gY2xvc3VyZTsKLSAgY2hhciAqbmFtZSA9IHVwYl9zdHJuZHVwKGJ1Ziwgbik7
Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKGhhbmRsZSk7Ci0KLSAgLyogWFhYOiBz
ZWUgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLiAqLwotICB1cGJfZmllbGRkZWZfc2V0
c3ViZGVmbmFtZShyLT5mLCBuYW1lLCBOVUxMKTsKLSAgdXBiX2dmcmVlKG5hbWUpOwotICByZXR1
cm4gbjsKLX0KLQotc3RhdGljIHNpemVfdCBmaWVsZF9vbmV4dGVuZGVlKHZvaWQgKmNsb3N1cmUs
IGNvbnN0IHZvaWQgKmhkLCBjb25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IG4sIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICB1cGJf
ZGVzY3JlYWRlciAqciA9IGNsb3N1cmU7Ci0gIGNoYXIgKm5hbWUgPSB1cGJfc3RybmR1cChidWYs
IG4pOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgVVBCX1VOVVNFRChoYW5kbGUpOwotCi0gIC8qIFhY
WDogc2VlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4gKi8KLSAgdXBiX2ZpZWxkZGVm
X3NldGNvbnRhaW5pbmd0eXBlbmFtZShyLT5mLCBuYW1lLCBOVUxMKTsKLSAgdXBiX2dmcmVlKG5h
bWUpOwotICByZXR1cm4gbjsKLX0KLQotc3RhdGljIHNpemVfdCBmaWVsZF9vbmRlZmF1bHR2YWwo
dm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuLCBjb25zdCB1cGJfYnVmaGFuZGxlICpo
YW5kbGUpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhk
KTsKLSAgVVBCX1VOVVNFRChoYW5kbGUpOwotCi0gIC8qIEhhdmUgdG8gY29udmVydCBmcm9tIHN0
cmluZyB0byB0aGUgY29ycmVjdCB0eXBlLCBidXQgd2UgbWlnaHQgbm90IGtub3cgdGhlCi0gICAq
IHR5cGUgeWV0LCBzbyB3ZSBzYXZlIGl0IGFzIGEgc3RyaW5nIHVudGlsIHRoZSBlbmQgb2YgdGhl
IGZpZWxkLgotICAgKiBYWFg6IHNlZSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuICov
Ci0gIHVwYl9nZnJlZShyLT5kZWZhdWx0X3N0cmluZyk7Ci0gIHItPmRlZmF1bHRfc3RyaW5nID0g
dXBiX3N0cm5kdXAoYnVmLCBuKTsKLSAgcmV0dXJuIG47Ci19Ci0KLS8qKiBIYW5kbGVycyBmb3Ig
Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90byAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLXN0YXRpYyBib29sIG1zZ19zdGFydCh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lk
ICpoZCkgewotICB1cGJfZGVzY3JlYWRlciAqciA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGQp
OwotCi0gIHVwYl9kZXNjcmVhZGVyX3N0YXJ0Y29udGFpbmVyKHIpOwotICByZXR1cm4gdHJ1ZTsK
LX0KLQotc3RhdGljIGJvb2wgbXNnX2VuZCh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwg
dXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAg
dXBiX21zZ2RlZiAqbSA9IHVwYl9kZXNjcmVhZGVyX3RvcChyKTsKLSAgVVBCX1VOVVNFRChoZCk7
Ci0KLSAgaWYoIXVwYl9kZWZfZnVsbG5hbWUodXBiX21zZ2RlZl91cGNhc3RfbXV0YWJsZShtKSkp
IHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZyhzdGF0dXMsICJFbmNvdW50ZXJlZCBtZXNzYWdl
IHdpdGggbm8gbmFtZS4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHVwYl9k
ZXNjcmVhZGVyX2VuZGNvbnRhaW5lcihyKTsKLX0KLQotc3RhdGljIHNpemVfdCBtc2dfbmFtZSh2
b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgY29uc3QgY2hhciAqYnVmLAotICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgbiwgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0g
IHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgdXBiX21zZ2RlZiAqbSA9IHVwYl9kZXNj
cmVhZGVyX3RvcChyKTsKLSAgLyogWFhYOiBzZWUgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBm
aWxlLiAqLwotICBjaGFyICpuYW1lID0gdXBiX3N0cm5kdXAoYnVmLCBuKTsKLSAgVVBCX1VOVVNF
RChoZCk7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlKTsKLQotICB1cGJfZGVmX3NldGZ1bGxuYW1lKHVw
Yl9tc2dkZWZfdXBjYXN0X211dGFibGUobSksIG5hbWUsIE5VTEwpOwotICB1cGJfZGVzY3JlYWRl
cl9zZXRzY29wZW5hbWUociwgbmFtZSk7ICAvKiBQYXNzZXMgb3duZXJzaGlwIG9mIG5hbWUuICov
Ci0gIHJldHVybiBuOwotfQotCi1zdGF0aWMgdm9pZCAqbXNnX3N0YXJ0bXNnKHZvaWQgKmNsb3N1
cmUsIGNvbnN0IHZvaWQgKmhkKSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAg
dXBiX21zZ2RlZiAqbSA9IHVwYl9tc2dkZWZfbmV3KCZtKTsKLSAgYm9vbCBvayA9IHVwYl9maWxl
ZGVmX2FkZG1zZyhyLT5maWxlLCBtLCAmbSwgTlVMTCk7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBV
UEJfQVNTRVJUX1ZBUihvaywgb2spOwotICByZXR1cm4gcjsKLX0KLQotc3RhdGljIHZvaWQgKm1z
Z19zdGFydGV4dCh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCkgewotICB1cGJfZGVzY3Jl
YWRlciAqciA9IGNsb3N1cmU7Ci0gIHVwYl9maWVsZGRlZiAqZiA9IHVwYl9maWVsZGRlZl9uZXco
JmYpOwotICBib29sIG9rID0gdXBiX2ZpbGVkZWZfYWRkZXh0KHItPmZpbGUsIGYsICZmLCBOVUxM
KTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIFVQQl9BU1NFUlRfVkFSKG9rLCBvayk7Ci0gIHJldHVy
biByOwotfQotCi1zdGF0aWMgdm9pZCAqbXNnX3N0YXJ0ZmllbGQodm9pZCAqY2xvc3VyZSwgY29u
c3Qgdm9pZCAqaGQpIHsKLSAgdXBiX2Rlc2NyZWFkZXIgKnIgPSBjbG9zdXJlOwotICByLT5mID0g
dXBiX2ZpZWxkZGVmX25ldygmci0+Zik7Ci0gIC8qIFdlIGNhbid0IGFkZCB0aGUgbmV3IGZpZWxk
IHRvIHRoZSBtZXNzYWdlIHVudGlsIGl0cyBuYW1lL251bWJlciBhcmUKLSAgICogZmlsbGVkIGlu
LiAqLwotICBVUEJfVU5VU0VEKGhkKTsKLSAgcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBib29sIG1z
Z19lbmRmaWVsZCh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCkgewotICB1cGJfZGVzY3Jl
YWRlciAqciA9IGNsb3N1cmU7Ci0gIHVwYl9tc2dkZWYgKm0gPSB1cGJfZGVzY3JlYWRlcl90b3Ao
cik7Ci0gIFVQQl9VTlVTRUQoaGQpOwotCi0gIHVwYl9tc2dkZWZfYWRkZmllbGQobSwgci0+Ziwg
JnItPmYsIE5VTEwpOwotICByLT5mID0gTlVMTDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBib29sIG1zZ19vbm1hcGVudHJ5KHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhkLCBib29s
IG1hcGVudHJ5KSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gY2xvc3VyZTsKLSAgdXBiX21zZ2Rl
ZiAqbSA9IHVwYl9kZXNjcmVhZGVyX3RvcChyKTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0KLSAgdXBi
X21zZ2RlZl9zZXRtYXBlbnRyeShtLCBtYXBlbnRyeSk7Ci0gIHItPmYgPSBOVUxMOwotICByZXR1
cm4gdHJ1ZTsKLX0KLQotCi0KLS8qKiBDb2RlIHRvIHJlZ2lzdGVyIGhhbmRsZXJzICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgRiht
c2csIGZpZWxkKSB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl8gIyMgbXNnICMjIF9mXyAjIyBmaWVs
ZChtKQotCi1zdGF0aWMgdm9pZCByZWdoYW5kbGVycyhjb25zdCB2b2lkICpjbG9zdXJlLCB1cGJf
aGFuZGxlcnMgKmgpIHsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbSA9IHVwYl9oYW5kbGVyc19tc2dk
ZWYoaCk7Ci0gIFVQQl9VTlVTRUQoY2xvc3VyZSk7Ci0KLSAgaWYgKHVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX0ZpbGVEZXNjcmlwdG9yU2V0X2lzKG0pKSB7Ci0gICAgdXBiX2hhbmRsZXJzX3NldHN0
YXJ0c3VibXNnKGgsIEYoRmlsZURlc2NyaXB0b3JTZXQsIGZpbGUpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZmlsZXNldF9zdGFydGZpbGUsIE5VTEwpOwotICB9IGVsc2UgaWYg
KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19pcyhtKSkgewotICAgIHVw
Yl9oYW5kbGVyc19zZXRzdGFydG1zZyhoLCAmbXNnX3N0YXJ0LCBOVUxMKTsKLSAgICB1cGJfaGFu
ZGxlcnNfc2V0ZW5kbXNnKGgsICZtc2dfZW5kLCBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0
c3RyaW5nKGgsIEYoRGVzY3JpcHRvclByb3RvLCBuYW1lKSwgJm1zZ19uYW1lLCBOVUxMKTsKLSAg
ICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzdWJtc2coaCwgRihEZXNjcmlwdG9yUHJvdG8sIGV4dGVu
c2lvbiksICZtc2dfc3RhcnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOwotICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHN1Ym1zZyhoLCBGKERlc2NyaXB0b3JQcm90
bywgbmVzdGVkX3R5cGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXNnX3N0
YXJ0bXNnLCBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzdWJtc2coaCwgRihEZXNj
cmlwdG9yUHJvdG8sIGZpZWxkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1z
Z19zdGFydGZpZWxkLCBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0ZW5kc3VibXNnKGgsIEYo
RGVzY3JpcHRvclByb3RvLCBmaWVsZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
bXNnX2VuZGZpZWxkLCBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzdWJtc2coaCwg
RihEZXNjcmlwdG9yUHJvdG8sIGVudW1fdHlwZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZmaWxlX3N0YXJ0ZW51bSwgTlVMTCk7Ci0gIH0gZWxzZSBpZiAodXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19pcyhtKSkgewotICAgIHVwYl9oYW5kbGVy
c19zZXRzdGFydG1zZyhoLCAmZmlsZV9zdGFydCwgTlVMTCk7Ci0gICAgdXBiX2hhbmRsZXJzX3Nl
dGVuZG1zZyhoLCAmZmlsZV9lbmQsIE5VTEwpOwotICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmco
aCwgRihGaWxlRGVzY3JpcHRvclByb3RvLCBuYW1lKSwgJmZpbGVfb25uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgdXBiX2hhbmRsZXJzX3NldHN0cmluZyhoLCBG
KEZpbGVEZXNjcmlwdG9yUHJvdG8sIHBhY2thZ2UpLCAmZmlsZV9vbnBhY2thZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0c3RyaW5nKGgs
IEYoRmlsZURlc2NyaXB0b3JQcm90bywgc3ludGF4KSwgJmZpbGVfb25zeW50YXgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzdWJt
c2coaCwgRihGaWxlRGVzY3JpcHRvclByb3RvLCBtZXNzYWdlX3R5cGUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmZmlsZV9zdGFydG1zZywgTlVMTCk7Ci0gICAgdXBiX2hhbmRs
ZXJzX3NldHN0YXJ0c3VibXNnKGgsIEYoRmlsZURlc2NyaXB0b3JQcm90bywgZW51bV90eXBlKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVfc3RhcnRlbnVtLCBOVUxMKTsK
LSAgICB1cGJfaGFuZGxlcnNfc2V0c3RhcnRzdWJtc2coaCwgRihGaWxlRGVzY3JpcHRvclByb3Rv
LCBleHRlbnNpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZV9zdGFy
dGV4dCwgTlVMTCk7Ci0gIH0gZWxzZSBpZiAodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZh
bHVlRGVzY3JpcHRvclByb3RvX2lzKG0pKSB7Ci0gICAgdXBiX2hhbmRsZXJzX3NldHN0YXJ0bXNn
KGgsICZlbnVtdmFsX3N0YXJ0bXNnLCBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0ZW5kbXNn
KGgsICZlbnVtdmFsX2VuZG1zZywgTlVMTCk7Ci0gICAgdXBiX2hhbmRsZXJzX3NldHN0cmluZyho
LCBGKEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bywgbmFtZSksICZlbnVtdmFsX29ubmFtZSwgTlVM
TCk7Ci0gICAgdXBiX2hhbmRsZXJzX3NldGludDMyKGgsIEYoRW51bVZhbHVlRGVzY3JpcHRvclBy
b3RvLCBudW1iZXIpLCAmZW51bXZhbF9vbm51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7Ci0gIH0gZWxzZSBpZiAodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bURlc2Ny
aXB0b3JQcm90b19pcyhtKSkgewotICAgIHVwYl9oYW5kbGVyc19zZXRlbmRtc2coaCwgJmVudW1f
ZW5kbXNnLCBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNfc2V0c3RyaW5nKGgsIEYoRW51bURlc2Ny
aXB0b3JQcm90bywgbmFtZSksICZlbnVtX29ubmFtZSwgTlVMTCk7Ci0gIH0gZWxzZSBpZiAodXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9faXMobSkpIHsKLSAgICB1
cGJfaGFuZGxlcnNfc2V0c3RhcnRtc2coaCwgJmZpZWxkX3N0YXJ0bXNnLCBOVUxMKTsKLSAgICB1
cGJfaGFuZGxlcnNfc2V0ZW5kbXNnKGgsICZmaWVsZF9lbmRtc2csIE5VTEwpOwotICAgIHVwYl9o
YW5kbGVyc19zZXRpbnQzMihoLCBGKEZpZWxkRGVzY3JpcHRvclByb3RvLCB0eXBlKSwgJmZpZWxk
X29udHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgdXBiX2hhbmRs
ZXJzX3NldGludDMyKGgsIEYoRmllbGREZXNjcmlwdG9yUHJvdG8sIGxhYmVsKSwgJmZpZWxkX29u
bGFiZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIHVwYl9oYW5kbGVy
c19zZXRpbnQzMihoLCBGKEZpZWxkRGVzY3JpcHRvclByb3RvLCBudW1iZXIpLCAmZmllbGRfb25u
dW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIHVwYl9oYW5kbGVy
c19zZXRzdHJpbmcoaCwgRihGaWVsZERlc2NyaXB0b3JQcm90bywgbmFtZSksICZmaWVsZF9vbm5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICB1cGJfaGFuZGxlcnNf
c2V0c3RyaW5nKGgsIEYoRmllbGREZXNjcmlwdG9yUHJvdG8sIHR5cGVfbmFtZSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAmZmllbGRfb250eXBlbmFtZSwgTlVMTCk7Ci0gICAgdXBiX2hh
bmRsZXJzX3NldHN0cmluZyhoLCBGKEZpZWxkRGVzY3JpcHRvclByb3RvLCBleHRlbmRlZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAmZmllbGRfb25leHRlbmRlZSwgTlVMTCk7Ci0gICAg
dXBiX2hhbmRsZXJzX3NldHN0cmluZyhoLCBGKEZpZWxkRGVzY3JpcHRvclByb3RvLCBkZWZhdWx0
X3ZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWVsZF9vbmRlZmF1bHR2YWws
IE5VTEwpOwotICB9IGVsc2UgaWYgKHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9u
c19pcyhtKSkgewotICAgIHVwYl9oYW5kbGVyc19zZXRib29sKGgsIEYoRmllbGRPcHRpb25zLCBs
YXp5KSwgJmZpZWxkX29ubGF6eSwgTlVMTCk7Ci0gICAgdXBiX2hhbmRsZXJzX3NldGJvb2woaCwg
RihGaWVsZE9wdGlvbnMsIHBhY2tlZCksICZmaWVsZF9vbnBhY2tlZCwgTlVMTCk7Ci0gIH0gZWxz
ZSBpZiAodXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWVzc2FnZU9wdGlvbnNfaXMobSkpIHsKLSAg
ICB1cGJfaGFuZGxlcnNfc2V0Ym9vbChoLCBGKE1lc3NhZ2VPcHRpb25zLCBtYXBfZW50cnkpLCAm
bXNnX29ubWFwZW50cnksIE5VTEwpOwotICB9Ci0KLSAgYXNzZXJ0KHVwYl9vayh1cGJfaGFuZGxl
cnNfc3RhdHVzKGgpKSk7Ci19Ci0KLSN1bmRlZiBGCi0KLXZvaWQgZGVzY3JlYWRlcl9jbGVhbnVw
KHZvaWQgKl9yKSB7Ci0gIHVwYl9kZXNjcmVhZGVyICpyID0gX3I7Ci0gIHNpemVfdCBpOwotCi0g
IGZvciAoaSA9IDA7IGkgPCB1cGJfZGVzY3JlYWRlcl9maWxlY291bnQocik7IGkrKykgewotICAg
IHVwYl9maWxlZGVmX3VucmVmKHVwYl9kZXNjcmVhZGVyX2ZpbGUociwgaSksICZyLT5maWxlcyk7
Ci0gIH0KLQotICB1cGJfZ2ZyZWUoci0+bmFtZSk7Ci0gIHVwYl9pbnR0YWJsZV91bmluaXQoJnIt
PmZpbGVzKTsKLSAgdXBiX2dmcmVlKHItPmRlZmF1bHRfc3RyaW5nKTsKLSAgd2hpbGUgKHItPnN0
YWNrX2xlbiA+IDApIHsKLSAgICB1cGJfZGVzY3JlYWRlcl9mcmFtZSAqZiA9ICZyLT5zdGFja1st
LXItPnN0YWNrX2xlbl07Ci0gICAgdXBiX2dmcmVlKGYtPm5hbWUpOwotICB9Ci19Ci0KLQotLyog
UHVibGljIEFQSSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLQotdXBiX2Rlc2NyZWFkZXIgKnVwYl9kZXNjcmVhZGVyX2Ny
ZWF0ZSh1cGJfZW52ICplLCBjb25zdCB1cGJfaGFuZGxlcnMgKmgpIHsKLSAgdXBiX2Rlc2NyZWFk
ZXIgKnIgPSB1cGJfZW52X21hbGxvYyhlLCBzaXplb2YodXBiX2Rlc2NyZWFkZXIpKTsKLSAgaWYg
KCFyIHx8ICF1cGJfZW52X2FkZGNsZWFudXAoZSwgZGVzY3JlYWRlcl9jbGVhbnVwLCByKSkgewot
ICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgdXBiX2ludHRhYmxlX2luaXQoJnItPmZpbGVzLCBV
UEJfQ1RZUEVfUFRSKTsKLSAgdXBiX3NpbmtfcmVzZXQodXBiX2Rlc2NyZWFkZXJfaW5wdXQociks
IGgsIHIpOwotICByLT5zdGFja19sZW4gPSAwOwotICByLT5uYW1lID0gTlVMTDsKLSAgci0+ZGVm
YXVsdF9zdHJpbmcgPSBOVUxMOwotCi0gIHJldHVybiByOwotfQotCi1zaXplX3QgdXBiX2Rlc2Ny
ZWFkZXJfZmlsZWNvdW50KGNvbnN0IHVwYl9kZXNjcmVhZGVyICpyKSB7Ci0gIHJldHVybiB1cGJf
aW50dGFibGVfY291bnQoJnItPmZpbGVzKTsKLX0KLQotdXBiX2ZpbGVkZWYgKnVwYl9kZXNjcmVh
ZGVyX2ZpbGUoY29uc3QgdXBiX2Rlc2NyZWFkZXIgKnIsIHNpemVfdCBpKSB7Ci0gIHVwYl92YWx1
ZSB2OwotICBpZiAodXBiX2ludHRhYmxlX2xvb2t1cCgmci0+ZmlsZXMsIGksICZ2KSkgewotICAg
IHJldHVybiB1cGJfdmFsdWVfZ2V0cHRyKHYpOwotICB9IGVsc2UgewotICAgIHJldHVybiBOVUxM
OwotICB9Ci19Ci0KLXVwYl9zaW5rICp1cGJfZGVzY3JlYWRlcl9pbnB1dCh1cGJfZGVzY3JlYWRl
ciAqcikgewotICByZXR1cm4gJnItPnNpbms7Ci19Ci0KLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBi
X2Rlc2NyZWFkZXJfbmV3aGFuZGxlcnMoY29uc3Qgdm9pZCAqb3duZXIpIHsKLSAgY29uc3QgdXBi
X21zZ2RlZiAqbSA9IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yU2V0X2dl
dCgmbSk7Ci0gIGNvbnN0IHVwYl9oYW5kbGVycyAqaCA9IHVwYl9oYW5kbGVyc19uZXdmcm96ZW4o
bSwgb3duZXIsIHJlZ2hhbmRsZXJzLCBOVUxMKTsKLSAgdXBiX21zZ2RlZl91bnJlZihtLCAmbSk7
Ci0gIHJldHVybiBoOwotfQotLyoKLSoqIHByb3RvYnVmIGRlY29kZXIgYnl0ZWNvZGUgY29tcGls
ZXIKLSoqCi0qKiBDb2RlIHRvIGNvbXBpbGUgYSB1cGI6OkhhbmRsZXJzIGludG8gYnl0ZWNvZGUg
Zm9yIGRlY29kaW5nIGEgcHJvdG9idWYKLSoqIGFjY29yZGluZyB0byB0aGF0IHNwZWNpZmljIHNj
aGVtYSBhbmQgZGVzdGluYXRpb24gaGFuZGxlcnMuCi0qKgotKiogQ29tcGlsaW5nIHRvIGJ5dGVj
b2RlIGlzIGFsd2F5cyB0aGUgZmlyc3Qgc3RlcC4gIElmIHdlIGFyZSB1c2luZyB0aGUKLSoqIGlu
dGVycHJldGVkIGRlY29kZXIgd2UgbGVhdmUgaXQgYXMgYnl0ZWNvZGUgYW5kIGludGVycHJldCB0
aGF0LiAgSWYgd2UgYXJlCi0qKiB1c2luZyBhIEpJVCBkZWNvZGVyIHdlIHVzZSBhIGNvZGUgZ2Vu
ZXJhdG9yIHRvIHR1cm4gdGhlIGJ5dGVjb2RlIGludG8gbmF0aXZlCi0qKiBjb2RlLCBMTFZNIElS
LCBldGMuCi0qKgotKiogQnl0ZWNvZGUgZGVmaW5pdGlvbiBpcyBpbiBkZWNvZGVyLmludC5oLgot
Ki8KLQotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi0jaWZkZWYgVVBCX0RVTVBfQllURUNPREUKLSNp
bmNsdWRlIDxzdGRpby5oPgotI2VuZGlmCi0KLSNkZWZpbmUgTUFYTEFCRUwgNQotI2RlZmluZSBF
TVBUWUxBQkVMIC0xCi0KLS8qIG1ncm91cCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGZy
ZWVncm91cCh1cGJfcmVmY291bnRlZCAqcikgewotICBtZ3JvdXAgKmcgPSAobWdyb3VwKilyOwot
ICB1cGJfaW50dGFibGVfdW5pbml0KCZnLT5tZXRob2RzKTsKLSNpZmRlZiBVUEJfVVNFX0pJVF9Y
NjQKLSAgdXBiX3BiZGVjb2Rlcl9mcmVlaml0KGcpOwotI2VuZGlmCi0gIHVwYl9nZnJlZShnLT5i
eXRlY29kZSk7Ci0gIHVwYl9nZnJlZShnKTsKLX0KLQotc3RhdGljIHZvaWQgdmlzaXRncm91cChj
b25zdCB1cGJfcmVmY291bnRlZCAqciwgdXBiX3JlZmNvdW50ZWRfdmlzaXQgKnZpc2l0LAotICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIGNvbnN0IG1ncm91cCAqZyA9
IChjb25zdCBtZ3JvdXAqKXI7Ci0gIHVwYl9pbnR0YWJsZV9pdGVyIGk7Ci0gIHVwYl9pbnR0YWJs
ZV9iZWdpbigmaSwgJmctPm1ldGhvZHMpOwotICBmb3IoOyAhdXBiX2ludHRhYmxlX2RvbmUoJmkp
OyB1cGJfaW50dGFibGVfbmV4dCgmaSkpIHsKLSAgICB1cGJfcGJkZWNvZGVybWV0aG9kICptZXRo
b2QgPSB1cGJfdmFsdWVfZ2V0cHRyKHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVlKCZpKSk7Ci0gICAg
dmlzaXQociwgdXBiX3BiZGVjb2Rlcm1ldGhvZF91cGNhc3QobWV0aG9kKSwgY2xvc3VyZSk7Ci0g
IH0KLX0KLQotbWdyb3VwICpuZXdncm91cChjb25zdCB2b2lkICpvd25lcikgewotICBtZ3JvdXAg
KmcgPSB1cGJfZ21hbGxvYyhzaXplb2YoKmcpKTsKLSAgc3RhdGljIGNvbnN0IHN0cnVjdCB1cGJf
cmVmY291bnRlZF92dGJsIHZ0YmwgPSB7dmlzaXRncm91cCwgZnJlZWdyb3VwfTsKLSAgdXBiX3Jl
ZmNvdW50ZWRfaW5pdChtZ3JvdXBfdXBjYXN0X211dGFibGUoZyksICZ2dGJsLCBvd25lcik7Ci0g
IHVwYl9pbnR0YWJsZV9pbml0KCZnLT5tZXRob2RzLCBVUEJfQ1RZUEVfUFRSKTsKLSAgZy0+Ynl0
ZWNvZGUgPSBOVUxMOwotICBnLT5ieXRlY29kZV9lbmQgPSBOVUxMOwotICByZXR1cm4gZzsKLX0K
LQotCi0vKiB1cGJfcGJkZWNvZGVybWV0aG9kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBmcmVlbWV0aG9kKHVw
Yl9yZWZjb3VudGVkICpyKSB7Ci0gIHVwYl9wYmRlY29kZXJtZXRob2QgKm1ldGhvZCA9ICh1cGJf
cGJkZWNvZGVybWV0aG9kKilyOwotCi0gIGlmIChtZXRob2QtPmRlc3RfaGFuZGxlcnNfKSB7Ci0g
ICAgdXBiX2hhbmRsZXJzX3VucmVmKG1ldGhvZC0+ZGVzdF9oYW5kbGVyc18sIG1ldGhvZCk7Ci0g
IH0KLQotICB1cGJfaW50dGFibGVfdW5pbml0KCZtZXRob2QtPmRpc3BhdGNoKTsKLSAgdXBiX2dm
cmVlKG1ldGhvZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZpc2l0bWV0aG9kKGNvbnN0IHVwYl9yZWZj
b3VudGVkICpyLCB1cGJfcmVmY291bnRlZF92aXNpdCAqdmlzaXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKm0g
PSAoY29uc3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCopcjsKLSAgdmlzaXQociwgbS0+Z3JvdXAsIGNs
b3N1cmUpOwotfQotCi1zdGF0aWMgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqbmV3bWV0aG9kKGNvbnN0
IHVwYl9oYW5kbGVycyAqZGVzdF9oYW5kbGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWdyb3VwICpncm91cCkgewotICBzdGF0aWMgY29uc3Qgc3RydWN0IHVwYl9y
ZWZjb3VudGVkX3Z0YmwgdnRibCA9IHt2aXNpdG1ldGhvZCwgZnJlZW1ldGhvZH07Ci0gIHVwYl9w
YmRlY29kZXJtZXRob2QgKnJldCA9IHVwYl9nbWFsbG9jKHNpemVvZigqcmV0KSk7Ci0gIHVwYl9y
ZWZjb3VudGVkX2luaXQodXBiX3BiZGVjb2Rlcm1ldGhvZF91cGNhc3RfbXV0YWJsZShyZXQpLCAm
dnRibCwgJnJldCk7Ci0gIHVwYl9ieXRlc2hhbmRsZXJfaW5pdCgmcmV0LT5pbnB1dF9oYW5kbGVy
Xyk7Ci0KLSAgLyogVGhlIG1ldGhvZCByZWZlcmVuY2VzIHRoZSBncm91cCBhbmQgdmljZS12ZXJz
YSwgaW4gYSBjaXJjdWxhciByZWZlcmVuY2UuICovCi0gIHVwYl9yZWYyKHJldCwgZ3JvdXApOwot
ICB1cGJfcmVmMihncm91cCwgcmV0KTsKLSAgdXBiX2ludHRhYmxlX2luc2VydHB0cigmZ3JvdXAt
Pm1ldGhvZHMsIGRlc3RfaGFuZGxlcnMsIHVwYl92YWx1ZV9wdHIocmV0KSk7Ci0gIHVwYl9wYmRl
Y29kZXJtZXRob2RfdW5yZWYocmV0LCAmcmV0KTsKLQotICByZXQtPmdyb3VwID0gbWdyb3VwX3Vw
Y2FzdF9tdXRhYmxlKGdyb3VwKTsKLSAgcmV0LT5kZXN0X2hhbmRsZXJzXyA9IGRlc3RfaGFuZGxl
cnM7Ci0gIHJldC0+aXNfbmF0aXZlXyA9IGZhbHNlOyAgLyogSWYgd2UgSklULCBpdCB3aWxsIHVw
ZGF0ZSB0aGlzIGxhdGVyLiAqLwotICB1cGJfaW50dGFibGVfaW5pdCgmcmV0LT5kaXNwYXRjaCwg
VVBCX0NUWVBFX1VJTlQ2NCk7Ci0KLSAgaWYgKHJldC0+ZGVzdF9oYW5kbGVyc18pIHsKLSAgICB1
cGJfaGFuZGxlcnNfcmVmKHJldC0+ZGVzdF9oYW5kbGVyc18sIHJldCk7Ci0gIH0KLSAgcmV0dXJu
IHJldDsKLX0KLQotY29uc3QgdXBiX2hhbmRsZXJzICp1cGJfcGJkZWNvZGVybWV0aG9kX2Rlc3Ro
YW5kbGVycygKLSAgICBjb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICptKSB7Ci0gIHJldHVybiBt
LT5kZXN0X2hhbmRsZXJzXzsKLX0KLQotY29uc3QgdXBiX2J5dGVzaGFuZGxlciAqdXBiX3BiZGVj
b2Rlcm1ldGhvZF9pbnB1dGhhbmRsZXIoCi0gICAgY29uc3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCAq
bSkgewotICByZXR1cm4gJm0tPmlucHV0X2hhbmRsZXJfOwotfQotCi1ib29sIHVwYl9wYmRlY29k
ZXJtZXRob2RfaXNuYXRpdmUoY29uc3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqbSkgewotICByZXR1
cm4gbS0+aXNfbmF0aXZlXzsKLX0KLQotY29uc3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqdXBiX3Bi
ZGVjb2Rlcm1ldGhvZF9uZXcoCi0gICAgY29uc3QgdXBiX3BiZGVjb2Rlcm1ldGhvZG9wdHMgKm9w
dHMsIGNvbnN0IHZvaWQgKm93bmVyKSB7Ci0gIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKnJl
dDsKLSAgdXBiX3BiY29kZWNhY2hlIGNhY2hlOwotCi0gIHVwYl9wYmNvZGVjYWNoZV9pbml0KCZj
YWNoZSk7Ci0gIHJldCA9IHVwYl9wYmNvZGVjYWNoZV9nZXRkZWNvZGVybWV0aG9kKCZjYWNoZSwg
b3B0cyk7Ci0gIHVwYl9wYmRlY29kZXJtZXRob2RfcmVmKHJldCwgb3duZXIpOwotICB1cGJfcGJj
b2RlY2FjaGVfdW5pbml0KCZjYWNoZSk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLQotLyogYnl0ZWNv
ZGUgY29tcGlsZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLQotLyogRGF0YSB1c2VkIG9ubHkgYXQgY29tcGlsYXRpb24gdGltZS4g
Ki8KLXR5cGVkZWYgc3RydWN0IHsKLSAgbWdyb3VwICpncm91cDsKLQotICB1aW50MzJfdCAqcGM7
Ci0gIGludCBmd2RfbGFiZWxzW01BWExBQkVMXTsKLSAgaW50IGJhY2tfbGFiZWxzW01BWExBQkVM
XTsKLQotICAvKiBGb3IgZmllbGRzIG1hcmtlZCAibGF6eSIsIHBhcnNlIHRoZW0gbGF6aWx5IG9y
IGVhZ2VybHk/ICovCi0gIGJvb2wgbGF6eTsKLX0gY29tcGlsZXI7Ci0KLXN0YXRpYyBjb21waWxl
ciAqbmV3Y29tcGlsZXIobWdyb3VwICpncm91cCwgYm9vbCBsYXp5KSB7Ci0gIGNvbXBpbGVyICpy
ZXQgPSB1cGJfZ21hbGxvYyhzaXplb2YoKnJldCkpOwotICBpbnQgaTsKLQotICByZXQtPmdyb3Vw
ID0gZ3JvdXA7Ci0gIHJldC0+bGF6eSA9IGxhenk7Ci0gIGZvciAoaSA9IDA7IGkgPCBNQVhMQUJF
TDsgaSsrKSB7Ci0gICAgcmV0LT5md2RfbGFiZWxzW2ldID0gRU1QVFlMQUJFTDsKLSAgICByZXQt
PmJhY2tfbGFiZWxzW2ldID0gRU1QVFlMQUJFTDsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1z
dGF0aWMgdm9pZCBmcmVlY29tcGlsZXIoY29tcGlsZXIgKmMpIHsKLSAgdXBiX2dmcmVlKGMpOwot
fQotCi1jb25zdCBzaXplX3QgcHRyX3dvcmRzID0gc2l6ZW9mKHZvaWQqKSAvIHNpemVvZih1aW50
MzJfdCk7Ci0KLS8qIEhvdyBtYW55IHdvcmRzIGFuIGluc3RydWN0aW9uIGlzLiAqLwotc3RhdGlj
IGludCBpbnN0cnVjdGlvbl9sZW4odWludDMyX3QgaW5zdHIpIHsKLSAgc3dpdGNoIChnZXRvcChp
bnN0cikpIHsKLSAgICBjYXNlIE9QX1NFVERJU1BBVENIOiByZXR1cm4gMSArIHB0cl93b3JkczsK
LSAgICBjYXNlIE9QX1RBR046IHJldHVybiAzOwotICAgIGNhc2UgT1BfU0VUQklHR1JPVVBOVU06
IHJldHVybiAyOwotICAgIGRlZmF1bHQ6IHJldHVybiAxOwotICB9Ci19Ci0KLWJvb2wgb3BfaGFz
X2xvbmdvZnMoaW50MzJfdCBpbnN0cnVjdGlvbikgewotICBzd2l0Y2ggKGdldG9wKGluc3RydWN0
aW9uKSkgewotICAgIGNhc2UgT1BfQ0FMTDoKLSAgICBjYXNlIE9QX0JSQU5DSDoKLSAgICBjYXNl
IE9QX0NIRUNLREVMSU06Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvKiBUaGUgInRhZyIgaW5z
dHJ1Y3Rpb25zIG9ubHkgaGF2ZSA4IGJ5dGVzIGF2YWlsYWJsZSBmb3IgdGhlIGp1bXAgdGFyZ2V0
LAotICAgICAqIGJ1dCB0aGF0IGlzIG9rIGJlY2F1c2UgdGhlc2Ugb3Bjb2RlcyBvbmx5IHJlcXVp
cmUgc2hvcnQganVtcHMuICovCi0gICAgY2FzZSBPUF9UQUcxOgotICAgIGNhc2UgT1BfVEFHMjoK
LSAgICBjYXNlIE9QX1RBR046Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KLQotc3RhdGlj
IGludDMyX3QgZ2V0b2ZzKHVpbnQzMl90IGluc3RydWN0aW9uKSB7Ci0gIGlmIChvcF9oYXNfbG9u
Z29mcyhpbnN0cnVjdGlvbikpIHsKLSAgICByZXR1cm4gKGludDMyX3QpaW5zdHJ1Y3Rpb24gPj4g
ODsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gKGludDhfdCkoaW5zdHJ1Y3Rpb24gPj4gOCk7Ci0g
IH0KLX0KLQotc3RhdGljIHZvaWQgc2V0b2ZzKHVpbnQzMl90ICppbnN0cnVjdGlvbiwgaW50MzJf
dCBvZnMpIHsKLSAgaWYgKG9wX2hhc19sb25nb2ZzKCppbnN0cnVjdGlvbikpIHsKLSAgICAqaW5z
dHJ1Y3Rpb24gPSBnZXRvcCgqaW5zdHJ1Y3Rpb24pIHwgb2ZzIDw8IDg7Ci0gIH0gZWxzZSB7Ci0g
ICAgKmluc3RydWN0aW9uID0gKCppbnN0cnVjdGlvbiAmIH4weGZmMDApIHwgKChvZnMgJiAweGZm
KSA8PCA4KTsKLSAgfQotICBhc3NlcnQoZ2V0b2ZzKCppbnN0cnVjdGlvbikgPT0gb2ZzKTsgIC8q
IFdvdWxkIGZhaWwgaW4gY2FzZXMgb2Ygb3ZlcmZsb3cuICovCi19Ci0KLXN0YXRpYyB1aW50MzJf
dCBwY29mcyhjb21waWxlciAqYykgeyByZXR1cm4gYy0+cGMgLSBjLT5ncm91cC0+Ynl0ZWNvZGU7
IH0KLQotLyogRGVmaW5lcyBhIGxvY2FsIGxhYmVsIGF0IHRoZSBjdXJyZW50IFBDIGxvY2F0aW9u
LiAgQWxsIHByZXZpb3VzIGZvcndhcmQKLSAqIHJlZmVyZW5jZXMgYXJlIHVwZGF0ZWQgdG8gcG9p
bnQgdG8gdGhpcyBsb2NhdGlvbi4gIFRoZSBsb2NhdGlvbiBpcyBub3RlZAotICogZm9yIGFueSBm
dXR1cmUgYmFja3dhcmQgcmVmZXJlbmNlcy4gKi8KLXN0YXRpYyB2b2lkIGxhYmVsKGNvbXBpbGVy
ICpjLCB1bnNpZ25lZCBpbnQgbGFiZWwpIHsKLSAgaW50IHZhbDsKLSAgdWludDMyX3QgKmNvZGVw
OwotCi0gIGFzc2VydChsYWJlbCA8IE1BWExBQkVMKTsKLSAgdmFsID0gYy0+ZndkX2xhYmVsc1ts
YWJlbF07Ci0gIGNvZGVwID0gKHZhbCA9PSBFTVBUWUxBQkVMKSA/IE5VTEwgOiBjLT5ncm91cC0+
Ynl0ZWNvZGUgKyB2YWw7Ci0gIHdoaWxlIChjb2RlcCkgewotICAgIGludCBvZnMgPSBnZXRvZnMo
KmNvZGVwKTsKLSAgICBzZXRvZnMoY29kZXAsIGMtPnBjIC0gY29kZXAgLSBpbnN0cnVjdGlvbl9s
ZW4oKmNvZGVwKSk7Ci0gICAgY29kZXAgPSBvZnMgPyBjb2RlcCArIG9mcyA6IE5VTEw7Ci0gIH0K
LSAgYy0+ZndkX2xhYmVsc1tsYWJlbF0gPSBFTVBUWUxBQkVMOwotICBjLT5iYWNrX2xhYmVsc1ts
YWJlbF0gPSBwY29mcyhjKTsKLX0KLQotLyogQ3JlYXRlcyBhIHJlZmVyZW5jZSB0byBhIG51bWJl
cmVkIGxhYmVsOyBlaXRoZXIgYSBmb3J3YXJkIHJlZmVyZW5jZQotICogKHBvc2l0aXZlIGFyZykg
b3IgYmFja3dhcmQgcmVmZXJlbmNlIChuZWdhdGl2ZSBhcmcpLiAgRm9yIGZvcndhcmQgcmVmZXJl
bmNlcwotICogdGhlIHZhbHVlIHJldHVybmVkIG5vdyBpcyBhY3R1YWxseSBhICJuZXh0IiBwb2lu
dGVyIGludG8gYSBsaW5rZWQgbGlzdCBvZiBhbGwKLSAqIGluc3RydWN0aW9ucyB0aGF0IHVzZSB0
aGlzIGxhYmVsIGFuZCB3aWxsIGJlIHBhdGNoZWQgbGF0ZXIgd2hlbiB0aGUgbGFiZWwgaXMKLSAq
IGRlZmluZWQgd2l0aCBsYWJlbCgpLgotICoKLSAqIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyB0aGUg
b2Zmc2V0IHRoYXQgc2hvdWxkIGJlIHdyaXR0ZW4gaW50byB0aGUgaW5zdHJ1Y3Rpb24uCi0gKi8K
LXN0YXRpYyBpbnQzMl90IGxhYmVscmVmKGNvbXBpbGVyICpjLCBpbnQgbGFiZWwpIHsKLSAgYXNz
ZXJ0KGxhYmVsIDwgTUFYTEFCRUwpOwotICBpZiAobGFiZWwgPT0gTEFCRUxfRElTUEFUQ0gpIHsK
LSAgICAvKiBObyByZXNvbHZpbmcgcmVxdWlyZWQuICovCi0gICAgcmV0dXJuIDA7Ci0gIH0gZWxz
ZSBpZiAobGFiZWwgPCAwKSB7Ci0gICAgLyogQmFja3dhcmQgbG9jYWwgbGFiZWwuICBSZWxhdGl2
ZSB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi4gKi8KLSAgICB1aW50MzJfdCBmcm9tID0gKGMtPnBj
ICsgMSkgLSBjLT5ncm91cC0+Ynl0ZWNvZGU7Ci0gICAgcmV0dXJuIGMtPmJhY2tfbGFiZWxzWy1s
YWJlbF0gLSBmcm9tOwotICB9IGVsc2UgewotICAgIC8qIEZvcndhcmQgbG9jYWwgbGFiZWw6IHBy
ZXBlbmQgdG8gKHBvc3NpYmx5LWVtcHR5KSBsaW5rZWQgbGlzdC4gKi8KLSAgICBpbnQgKmxwdHIg
PSAmYy0+ZndkX2xhYmVsc1tsYWJlbF07Ci0gICAgaW50MzJfdCByZXQgPSAoKmxwdHIgPT0gRU1Q
VFlMQUJFTCkgPyAwIDogKmxwdHIgLSBwY29mcyhjKTsKLSAgICAqbHB0ciA9IHBjb2ZzKGMpOwot
ICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgcHV0MzIoY29tcGlsZXIgKmMs
IHVpbnQzMl90IHYpIHsKLSAgbWdyb3VwICpnID0gYy0+Z3JvdXA7Ci0gIGlmIChjLT5wYyA9PSBn
LT5ieXRlY29kZV9lbmQpIHsKLSAgICBpbnQgb2ZzID0gcGNvZnMoYyk7Ci0gICAgc2l6ZV90IG9s
ZHNpemUgPSBnLT5ieXRlY29kZV9lbmQgLSBnLT5ieXRlY29kZTsKLSAgICBzaXplX3QgbmV3c2l6
ZSA9IFVQQl9NQVgob2xkc2l6ZSAqIDIsIDY0KTsKLSAgICAvKiBUT0RPKGhhYmVybWFuKTogaGFu
ZGxlIE9PTS4gKi8KLSAgICBnLT5ieXRlY29kZSA9IHVwYl9ncmVhbGxvYyhnLT5ieXRlY29kZSwg
b2xkc2l6ZSAqIHNpemVvZih1aW50MzJfdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld3NpemUgKiBzaXplb2YodWludDMyX3QpKTsKLSAgICBnLT5ieXRl
Y29kZV9lbmQgPSBnLT5ieXRlY29kZSArIG5ld3NpemU7Ci0gICAgYy0+cGMgPSBnLT5ieXRlY29k
ZSArIG9mczsKLSAgfQotICAqYy0+cGMrKyA9IHY7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dG9wKGNv
bXBpbGVyICpjLCBvcGNvZGUgb3AsIC4uLikgewotICB2YV9saXN0IGFwOwotICB2YV9zdGFydChh
cCwgb3ApOwotCi0gIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIE9QX1NFVERJU1BBVENIOiB7Ci0g
ICAgICB1aW50cHRyX3QgcHRyID0gKHVpbnRwdHJfdCl2YV9hcmcoYXAsIHZvaWQqKTsKLSAgICAg
IHB1dDMyKGMsIE9QX1NFVERJU1BBVENIKTsKLSAgICAgIHB1dDMyKGMsIHB0cik7Ci0gICAgICBp
ZiAoc2l6ZW9mKHVpbnRwdHJfdCkgPiBzaXplb2YodWludDMyX3QpKQotICAgICAgICBwdXQzMihj
LCAodWludDY0X3QpcHRyID4+IDMyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE9Q
X1NUQVJUTVNHOgotICAgIGNhc2UgT1BfRU5ETVNHOgotICAgIGNhc2UgT1BfUFVTSExFTkRFTElN
OgotICAgIGNhc2UgT1BfUE9QOgotICAgIGNhc2UgT1BfU0VUREVMSU06Ci0gICAgY2FzZSBPUF9I
QUxUOgotICAgIGNhc2UgT1BfUkVUOgotICAgIGNhc2UgT1BfRElTUEFUQ0g6Ci0gICAgICBwdXQz
MihjLCBvcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIE9QX1BBUlNFX0RPVUJMRToKLSAgICBj
YXNlIE9QX1BBUlNFX0ZMT0FUOgotICAgIGNhc2UgT1BfUEFSU0VfSU5UNjQ6Ci0gICAgY2FzZSBP
UF9QQVJTRV9VSU5UNjQ6Ci0gICAgY2FzZSBPUF9QQVJTRV9JTlQzMjoKLSAgICBjYXNlIE9QX1BB
UlNFX0ZJWEVENjQ6Ci0gICAgY2FzZSBPUF9QQVJTRV9GSVhFRDMyOgotICAgIGNhc2UgT1BfUEFS
U0VfQk9PTDoKLSAgICBjYXNlIE9QX1BBUlNFX1VJTlQzMjoKLSAgICBjYXNlIE9QX1BBUlNFX1NG
SVhFRDMyOgotICAgIGNhc2UgT1BfUEFSU0VfU0ZJWEVENjQ6Ci0gICAgY2FzZSBPUF9QQVJTRV9T
SU5UMzI6Ci0gICAgY2FzZSBPUF9QQVJTRV9TSU5UNjQ6Ci0gICAgY2FzZSBPUF9TVEFSVFNFUToK
LSAgICBjYXNlIE9QX0VORFNFUToKLSAgICBjYXNlIE9QX1NUQVJUU1VCTVNHOgotICAgIGNhc2Ug
T1BfRU5EU1VCTVNHOgotICAgIGNhc2UgT1BfU1RBUlRTVFI6Ci0gICAgY2FzZSBPUF9TVFJJTkc6
Ci0gICAgY2FzZSBPUF9FTkRTVFI6Ci0gICAgY2FzZSBPUF9QVVNIVEFHREVMSU06Ci0gICAgICBw
dXQzMihjLCBvcCB8IHZhX2FyZyhhcCwgdXBiX3NlbGVjdG9yX3QpIDw8IDgpOwotICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBPUF9TRVRCSUdHUk9VUE5VTToKLSAgICAgIHB1dDMyKGMsIG9wKTsKLSAg
ICAgIHB1dDMyKGMsIHZhX2FyZyhhcCwgaW50KSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIE9Q
X0NBTEw6IHsKLSAgICAgIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKm1ldGhvZCA9IHZhX2Fy
ZyhhcCwgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqKTsKLSAgICAgIHB1dDMyKGMsIG9wIHwgKG1ldGhv
ZC0+Y29kZV9iYXNlLm9mcyAtIChwY29mcyhjKSArIDEpKSA8PCA4KTsKLSAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIE9QX0NIRUNLREVMSU06Ci0gICAgY2FzZSBPUF9CUkFOQ0g6IHsKLSAg
ICAgIHVpbnQzMl90IGluc3RydWN0aW9uID0gb3A7Ci0gICAgICBpbnQgbGFiZWwgPSB2YV9hcmco
YXAsIGludCk7Ci0gICAgICBzZXRvZnMoJmluc3RydWN0aW9uLCBsYWJlbHJlZihjLCBsYWJlbCkp
OwotICAgICAgcHV0MzIoYywgaW5zdHJ1Y3Rpb24pOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgT1BfVEFHMToKLSAgICBjYXNlIE9QX1RBRzI6IHsKLSAgICAgIGludCBsYWJlbCA9IHZh
X2FyZyhhcCwgaW50KTsKLSAgICAgIHVpbnQ2NF90IHRhZyA9IHZhX2FyZyhhcCwgdWludDY0X3Qp
OwotICAgICAgdWludDMyX3QgaW5zdHJ1Y3Rpb24gPSBvcCB8ICh0YWcgPDwgMTYpOwotICAgICAg
YXNzZXJ0KHRhZyA8PSAweGZmZmYpOwotICAgICAgc2V0b2ZzKCZpbnN0cnVjdGlvbiwgbGFiZWxy
ZWYoYywgbGFiZWwpKTsKLSAgICAgIHB1dDMyKGMsIGluc3RydWN0aW9uKTsKLSAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIE9QX1RBR046IHsKLSAgICAgIGludCBsYWJlbCA9IHZhX2FyZyhh
cCwgaW50KTsKLSAgICAgIHVpbnQ2NF90IHRhZyA9IHZhX2FyZyhhcCwgdWludDY0X3QpOwotICAg
ICAgdWludDMyX3QgaW5zdHJ1Y3Rpb24gPSBvcCB8ICh1cGJfdmFsdWVfc2l6ZSh0YWcpIDw8IDE2
KTsKLSAgICAgIHNldG9mcygmaW5zdHJ1Y3Rpb24sIGxhYmVscmVmKGMsIGxhYmVsKSk7Ci0gICAg
ICBwdXQzMihjLCBpbnN0cnVjdGlvbik7Ci0gICAgICBwdXQzMihjLCB0YWcpOwotICAgICAgcHV0
MzIoYywgdGFnID4+IDMyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHZhX2VuZChh
cCk7Ci19Ci0KLSNpZiBkZWZpbmVkKFVQQl9VU0VfSklUX1g2NCkgfHwgZGVmaW5lZChVUEJfRFVN
UF9CWVRFQ09ERSkKLQotY29uc3QgY2hhciAqdXBiX3BiZGVjb2Rlcl9nZXRvcG5hbWUodW5zaWdu
ZWQgaW50IG9wKSB7Ci0jZGVmaW5lIFFVT1RFKHgpICN4Ci0jZGVmaW5lIEVYUEFORF9BTkRfUVVP
VEUoeCkgUVVPVEUoeCkKLSNkZWZpbmUgT1BOQU1FKHgpIE9QXyMjeAotI2RlZmluZSBPUCh4KSBj
YXNlIE9QTkFNRSh4KTogcmV0dXJuIEVYUEFORF9BTkRfUVVPVEUoT1BOQU1FKHgpKTsKLSNkZWZp
bmUgVCh4KSBPUChQQVJTRV8jI3gpCi0gIC8qIEtlZXAgaW4gc3luYyB3aXRoIGxpc3QgaW4gZGVj
b2Rlci5pbnQuaC4gKi8KLSAgc3dpdGNoICgob3Bjb2RlKW9wKSB7Ci0gICAgVChET1VCTEUpIFQo
RkxPQVQpIFQoSU5UNjQpIFQoVUlOVDY0KSBUKElOVDMyKSBUKEZJWEVENjQpIFQoRklYRUQzMikK
LSAgICBUKEJPT0wpIFQoVUlOVDMyKSBUKFNGSVhFRDMyKSBUKFNGSVhFRDY0KSBUKFNJTlQzMikg
VChTSU5UNjQpCi0gICAgT1AoU1RBUlRNU0cpIE9QKEVORE1TRykgT1AoU1RBUlRTRVEpIE9QKEVO
RFNFUSkgT1AoU1RBUlRTVUJNU0cpCi0gICAgT1AoRU5EU1VCTVNHKSBPUChTVEFSVFNUUikgT1Ao
U1RSSU5HKSBPUChFTkRTVFIpIE9QKENBTEwpIE9QKFJFVCkKLSAgICBPUChQVVNITEVOREVMSU0p
IE9QKFBVU0hUQUdERUxJTSkgT1AoU0VUREVMSU0pIE9QKENIRUNLREVMSU0pCi0gICAgT1AoQlJB
TkNIKSBPUChUQUcxKSBPUChUQUcyKSBPUChUQUdOKSBPUChTRVRESVNQQVRDSCkgT1AoUE9QKQot
ICAgIE9QKFNFVEJJR0dST1VQTlVNKSBPUChESVNQQVRDSCkgT1AoSEFMVCkKLSAgfQotICByZXR1
cm4gIjx1bmtub3duIG9wPiI7Ci0jdW5kZWYgT1AKLSN1bmRlZiBUCi19Ci0KLSNlbmRpZgotCi0j
aWZkZWYgVVBCX0RVTVBfQllURUNPREUKLQotc3RhdGljIHZvaWQgZHVtcGJjKHVpbnQzMl90ICpw
LCB1aW50MzJfdCAqZW5kLCBGSUxFICpmKSB7Ci0KLSAgdWludDMyX3QgKmJlZ2luID0gcDsKLQot
ICB3aGlsZSAocCA8IGVuZCkgewotICAgIGZwcmludGYoZiwgIiVwICAlOHR4IiwgcCwgcCAtIGJl
Z2luKTsKLSAgICB1aW50MzJfdCBpbnN0ciA9ICpwKys7Ci0gICAgdWludDhfdCBvcCA9IGdldG9w
KGluc3RyKTsKLSAgICBmcHJpbnRmKGYsICIgJXMiLCB1cGJfcGJkZWNvZGVyX2dldG9wbmFtZShv
cCkpOwotICAgIHN3aXRjaCAoKG9wY29kZSlvcCkgewotICAgICAgY2FzZSBPUF9TRVRESVNQQVRD
SDogewotICAgICAgICBjb25zdCB1cGJfaW50dGFibGUgKmRpc3BhdGNoOwotICAgICAgICBtZW1j
cHkoJmRpc3BhdGNoLCBwLCBzaXplb2Yodm9pZCopKTsKLSAgICAgICAgcCArPSBwdHJfd29yZHM7
Ci0gICAgICAgIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKm1ldGhvZCA9Ci0gICAgICAgICAg
ICAodm9pZCAqKSgoY2hhciAqKWRpc3BhdGNoIC0KLSAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dG9mKHVwYl9wYmRlY29kZXJtZXRob2QsIGRpc3BhdGNoKSk7Ci0gICAgICAgIGZwcmludGYoZiwg
IiAlcyIsIHVwYl9tc2dkZWZfZnVsbG5hbWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cGJfaGFuZGxlcnNfbXNnZGVmKG1ldGhvZC0+ZGVzdF9oYW5kbGVyc18pKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBPUF9ESVNQQVRDSDoKLSAgICAgIGNhc2UgT1Bf
U1RBUlRNU0c6Ci0gICAgICBjYXNlIE9QX0VORE1TRzoKLSAgICAgIGNhc2UgT1BfUFVTSExFTkRF
TElNOgotICAgICAgY2FzZSBPUF9QT1A6Ci0gICAgICBjYXNlIE9QX1NFVERFTElNOgotICAgICAg
Y2FzZSBPUF9IQUxUOgotICAgICAgY2FzZSBPUF9SRVQ6Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBPUF9QQVJTRV9ET1VCTEU6Ci0gICAgICBjYXNlIE9QX1BBUlNFX0ZMT0FUOgotICAgICAg
Y2FzZSBPUF9QQVJTRV9JTlQ2NDoKLSAgICAgIGNhc2UgT1BfUEFSU0VfVUlOVDY0OgotICAgICAg
Y2FzZSBPUF9QQVJTRV9JTlQzMjoKLSAgICAgIGNhc2UgT1BfUEFSU0VfRklYRUQ2NDoKLSAgICAg
IGNhc2UgT1BfUEFSU0VfRklYRUQzMjoKLSAgICAgIGNhc2UgT1BfUEFSU0VfQk9PTDoKLSAgICAg
IGNhc2UgT1BfUEFSU0VfVUlOVDMyOgotICAgICAgY2FzZSBPUF9QQVJTRV9TRklYRUQzMjoKLSAg
ICAgIGNhc2UgT1BfUEFSU0VfU0ZJWEVENjQ6Ci0gICAgICBjYXNlIE9QX1BBUlNFX1NJTlQzMjoK
LSAgICAgIGNhc2UgT1BfUEFSU0VfU0lOVDY0OgotICAgICAgY2FzZSBPUF9TVEFSVFNFUToKLSAg
ICAgIGNhc2UgT1BfRU5EU0VROgotICAgICAgY2FzZSBPUF9TVEFSVFNVQk1TRzoKLSAgICAgIGNh
c2UgT1BfRU5EU1VCTVNHOgotICAgICAgY2FzZSBPUF9TVEFSVFNUUjoKLSAgICAgIGNhc2UgT1Bf
U1RSSU5HOgotICAgICAgY2FzZSBPUF9FTkRTVFI6Ci0gICAgICBjYXNlIE9QX1BVU0hUQUdERUxJ
TToKLSAgICAgICAgZnByaW50ZihmLCAiICVkIiwgaW5zdHIgPj4gOCk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBPUF9TRVRCSUdHUk9VUE5VTToKLSAgICAgICAgZnByaW50ZihmLCAiICVk
IiwgKnArKyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBPUF9DSEVDS0RFTElNOgotICAg
ICAgY2FzZSBPUF9DQUxMOgotICAgICAgY2FzZSBPUF9CUkFOQ0g6Ci0gICAgICAgIGZwcmludGYo
ZiwgIiA9PjB4JXR4IiwgcCArIGdldG9mcyhpbnN0cikgLSBiZWdpbik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBPUF9UQUcxOgotICAgICAgY2FzZSBPUF9UQUcyOiB7Ci0gICAgICAgIGZw
cmludGYoZiwgIiB0YWc6MHgleCIsIGluc3RyID4+IDE2KTsKLSAgICAgICAgaWYgKGdldG9mcyhp
bnN0cikpIHsKLSAgICAgICAgICBmcHJpbnRmKGYsICIgPT4weCV0eCIsIHAgKyBnZXRvZnMoaW5z
dHIpIC0gYmVnaW4pOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAg
Y2FzZSBPUF9UQUdOOiB7Ci0gICAgICAgIHVpbnQ2NF90IHRhZyA9ICpwKys7Ci0gICAgICAgIHRh
ZyB8PSAodWludDY0X3QpKnArKyA8PCAzMjsKLSAgICAgICAgZnByaW50ZihmLCAiIHRhZzoweCVs
bHgiLCAobG9uZyBsb25nKXRhZyk7Ci0gICAgICAgIGZwcmludGYoZiwgIiBuOiVkIiwgaW5zdHIg
Pj4gMTYpOwotICAgICAgICBpZiAoZ2V0b2ZzKGluc3RyKSkgewotICAgICAgICAgIGZwcmludGYo
ZiwgIiA9PjB4JXR4IiwgcCArIGdldG9mcyhpbnN0cikgLSBiZWdpbik7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGZwdXRzKCJcbiIsIGYpOwotICB9Ci19
Ci0KLSNlbmRpZgotCi1zdGF0aWMgdWludDY0X3QgZ2V0X2VuY29kZWRfdGFnKGNvbnN0IHVwYl9m
aWVsZGRlZiAqZiwgaW50IHdpcmVfdHlwZSkgewotICB1aW50MzJfdCB0YWcgPSAodXBiX2ZpZWxk
ZGVmX251bWJlcihmKSA8PCAzKSB8IHdpcmVfdHlwZTsKLSAgdWludDY0X3QgZW5jb2RlZF90YWcg
PSB1cGJfdmVuY29kZTMyKHRhZyk7Ci0gIC8qIE5vIHRhZyBzaG91bGQgYmUgZ3JlYXRlciB0aGFu
IDUgYnl0ZXMuICovCi0gIGFzc2VydChlbmNvZGVkX3RhZyA8PSAweGZmZmZmZmZmZmYpOwotICBy
ZXR1cm4gZW5jb2RlZF90YWc7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dGNoZWNrdGFnKGNvbXBpbGVy
ICpjLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQg
d2lyZV90eXBlLCBpbnQgZGVzdCkgewotICB1aW50NjRfdCB0YWcgPSBnZXRfZW5jb2RlZF90YWco
Ziwgd2lyZV90eXBlKTsKLSAgc3dpdGNoICh1cGJfdmFsdWVfc2l6ZSh0YWcpKSB7Ci0gICAgY2Fz
ZSAxOgotICAgICAgcHV0b3AoYywgT1BfVEFHMSwgZGVzdCwgdGFnKTsKLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgMjoKLSAgICAgIHB1dG9wKGMsIE9QX1RBRzIsIGRlc3QsIHRhZyk7Ci0gICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcHV0b3AoYywgT1BfVEFHTiwgZGVzdCwgdGFnKTsK
LSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB1cGJfc2VsZWN0b3JfdCBnZXRzZWwoY29u
c3QgdXBiX2ZpZWxkZGVmICpmLCB1cGJfaGFuZGxlcnR5cGVfdCB0eXBlKSB7Ci0gIHVwYl9zZWxl
Y3Rvcl90IHNlbGVjdG9yOwotICBib29sIG9rID0gdXBiX2hhbmRsZXJzX2dldHNlbGVjdG9yKGYs
IHR5cGUsICZzZWxlY3Rvcik7Ci0gIFVQQl9BU1NFUlRfVkFSKG9rLCBvayk7Ci0gIHJldHVybiBz
ZWxlY3RvcjsKLX0KLQotLyogVGFrZXMgYW4gZXhpc3RpbmcsIHByaW1hcnkgZGlzcGF0Y2ggdGFi
bGUgZW50cnkgYW5kIHJlcGFja3MgaXQgd2l0aCBhCi0gKiBkaWZmZXJlbnQgYWx0ZXJuYXRlIHdp
cmUgdHlwZS4gIENhbGxlZCB3aGVuIHdlIGFyZSBpbnNlcnRpbmcgYSBzZWNvbmRhcnkKLSAqIGRp
c3BhdGNoIHRhYmxlIGVudHJ5IGZvciBhbiBhbHRlcm5hdGUgd2lyZSB0eXBlLiAqLwotc3RhdGlj
IHVpbnQ2NF90IHJlcGFjayh1aW50NjRfdCBkaXNwYXRjaCwgaW50IG5ld193dDIpIHsKLSAgdWlu
dDY0X3Qgb2ZzOwotICB1aW50OF90IHd0MTsKLSAgdWludDhfdCBvbGRfd3QyOwotICB1cGJfcGJk
ZWNvZGVyX3VucGFja2Rpc3BhdGNoKGRpc3BhdGNoLCAmb2ZzLCAmd3QxLCAmb2xkX3d0Mik7Ci0g
IGFzc2VydChvbGRfd3QyID09IE5PX1dJUkVfVFlQRSk7ICAvKiB3dDIgc2hvdWxkIG5vdCBiZSBz
ZXQgeWV0LiAqLwotICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9wYWNrZGlzcGF0Y2gob2ZzLCB3dDEs
IG5ld193dDIpOwotfQotCi0vKiBNYXJrcyB0aGUgY3VycmVudCBieXRlY29kZSBwb3NpdGlvbiBh
cyB0aGUgZGlzcGF0Y2ggdGFyZ2V0IGZvciB0aGlzIG1lc3NhZ2UsCi0gKiBmaWVsZCwgYW5kIHdp
cmUgdHlwZS4gKi8KLXN0YXRpYyB2b2lkIGRpc3BhdGNodGFyZ2V0KGNvbXBpbGVyICpjLCB1cGJf
cGJkZWNvZGVybWV0aG9kICptZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1cGJfZmllbGRkZWYgKmYsIGludCB3aXJlX3R5cGUpIHsKLSAgLyogT2Zmc2V0IGlzIHJlbGF0
aXZlIHRvIG1zZyBiYXNlLiAqLwotICB1aW50NjRfdCBvZnMgPSBwY29mcyhjKSAtIG1ldGhvZC0+
Y29kZV9iYXNlLm9mczsKLSAgdWludDMyX3QgZm4gPSB1cGJfZmllbGRkZWZfbnVtYmVyKGYpOwot
ICB1cGJfaW50dGFibGUgKmQgPSAmbWV0aG9kLT5kaXNwYXRjaDsKLSAgdXBiX3ZhbHVlIHY7Ci0g
IGlmICh1cGJfaW50dGFibGVfcmVtb3ZlKGQsIGZuLCAmdikpIHsKLSAgICAvKiBUT0RPOiBwcmlv
cml0aXplIGJhc2VkIG9uIHBhY2tlZCBzZXR0aW5nIGluIC5wcm90byBmaWxlLiAqLwotICAgIHVp
bnQ2NF90IHJlcGFja2VkID0gcmVwYWNrKHVwYl92YWx1ZV9nZXR1aW50NjQodiksIHdpcmVfdHlw
ZSk7Ci0gICAgdXBiX2ludHRhYmxlX2luc2VydChkLCBmbiwgdXBiX3ZhbHVlX3VpbnQ2NChyZXBh
Y2tlZCkpOwotICAgIHVwYl9pbnR0YWJsZV9pbnNlcnQoZCwgZm4gKyBVUEJfTUFYX0ZJRUxETlVN
QkVSLCB1cGJfdmFsdWVfdWludDY0KG9mcykpOwotICB9IGVsc2UgewotICAgIHVpbnQ2NF90IHZh
bCA9IHVwYl9wYmRlY29kZXJfcGFja2Rpc3BhdGNoKG9mcywgd2lyZV90eXBlLCBOT19XSVJFX1RZ
UEUpOwotICAgIHVwYl9pbnR0YWJsZV9pbnNlcnQoZCwgZm4sIHVwYl92YWx1ZV91aW50NjQodmFs
KSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgcHV0cHVzaChjb21waWxlciAqYywgY29uc3QgdXBi
X2ZpZWxkZGVmICpmKSB7Ci0gIGlmICh1cGJfZmllbGRkZWZfZGVzY3JpcHRvcnR5cGUoZikgPT0g
VVBCX0RFU0NSSVBUT1JfVFlQRV9NRVNTQUdFKSB7Ci0gICAgcHV0b3AoYywgT1BfUFVTSExFTkRF
TElNKTsKLSAgfSBlbHNlIHsKLSAgICB1aW50MzJfdCBmbiA9IHVwYl9maWVsZGRlZl9udW1iZXIo
Zik7Ci0gICAgaWYgKGZuID49IDEgPDwgMjQpIHsKLSAgICAgIHB1dG9wKGMsIE9QX1BVU0hUQUdE
RUxJTSwgMCk7Ci0gICAgICBwdXRvcChjLCBPUF9TRVRCSUdHUk9VUE5VTSwgZm4pOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBwdXRvcChjLCBPUF9QVVNIVEFHREVMSU0sIGZuKTsKLSAgICB9Ci0gIH0K
LX0KLQotc3RhdGljIHVwYl9wYmRlY29kZXJtZXRob2QgKmZpbmRfc3VibWV0aG9kKGNvbnN0IGNv
bXBpbGVyICpjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfZmllbGRkZWYgKmYpIHsKLSAgY29uc3QgdXBi
X2hhbmRsZXJzICpzdWIgPQotICAgICAgdXBiX2hhbmRsZXJzX2dldHN1YmhhbmRsZXJzKG1ldGhv
ZC0+ZGVzdF9oYW5kbGVyc18sIGYpOwotICB1cGJfdmFsdWUgdjsKLSAgcmV0dXJuIHVwYl9pbnR0
YWJsZV9sb29rdXBwdHIoJmMtPmdyb3VwLT5tZXRob2RzLCBzdWIsICZ2KQotICAgICAgICAgICAg
ID8gdXBiX3ZhbHVlX2dldHB0cih2KQotICAgICAgICAgICAgIDogTlVMTDsKLX0KLQotc3RhdGlj
IHZvaWQgcHV0c2VsKGNvbXBpbGVyICpjLCBvcGNvZGUgb3AsIHVwYl9zZWxlY3Rvcl90IHNlbCwK
LSAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfaGFuZGxlcnMgKmgpIHsKLSAgaWYgKHVwYl9o
YW5kbGVyc19nZXRoYW5kbGVyKGgsIHNlbCkpIHsKLSAgICBwdXRvcChjLCBvcCwgc2VsKTsKLSAg
fQotfQotCi0vKiBQdXRzIGFuIG9wY29kZSB0byBjYWxsIGEgY2FsbGJhY2ssIGJ1dCBvbmx5IGlm
IGEgY2FsbGJhY2sgYWN0dWFsbHkgZXhpc3RzIGZvcgotICogdGhpcyBmaWVsZCBhbmQgaGFuZGxl
ciB0eXBlLiAqLwotc3RhdGljIHZvaWQgbWF5YmVwdXQoY29tcGlsZXIgKmMsIG9wY29kZSBvcCwg
Y29uc3QgdXBiX2hhbmRsZXJzICpoLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX2Zp
ZWxkZGVmICpmLCB1cGJfaGFuZGxlcnR5cGVfdCB0eXBlKSB7Ci0gIHB1dHNlbChjLCBvcCwgZ2V0
c2VsKGYsIHR5cGUpLCBoKTsKLX0KLQotc3RhdGljIGJvb2wgaGFzbGF6eWhhbmRsZXJzKGNvbnN0
IHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmKSB7Ci0gIGlmICghdXBiX2Zp
ZWxkZGVmX2xhenkoZikpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIHJldHVybiB1cGJfaGFuZGxl
cnNfZ2V0aGFuZGxlcihoLCBnZXRzZWwoZiwgVVBCX0hBTkRMRVJfU1RBUlRTVFIpKSB8fAotICAg
ICAgICAgdXBiX2hhbmRsZXJzX2dldGhhbmRsZXIoaCwgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX1NU
UklORykpIHx8Ci0gICAgICAgICB1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcihoLCBnZXRzZWwoZiwg
VVBCX0hBTkRMRVJfRU5EU1RSKSk7Ci19Ci0KLQotLyogYnl0ZWNvZGUgY29tcGlsZXIgY29kZSBn
ZW5lcmF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
LyogU3ltYm9saWMgbmFtZXMgZm9yIG91ciBsb2NhbCBsYWJlbHMuICovCi0jZGVmaW5lIExBQkVM
X0xPT1BTVEFSVCAxICAvKiBUb3Agb2YgYSByZXBlYXRlZCBmaWVsZCBsb29wLiAqLwotI2RlZmlu
ZSBMQUJFTF9MT09QQlJFQUsgMiAgLyogVG8ganVtcCBvdXQgb2YgYSByZXBlYXRlZCBsb29wICov
Ci0jZGVmaW5lIExBQkVMX0ZJRUxEICAgICAzICAvKiBKdW1wIGJhY2t3YXJkIHRvIGZpbmQgdGhl
IG1vc3QgcmVjZW50IGZpZWxkLiAqLwotI2RlZmluZSBMQUJFTF9FTkRNU0cgICAgNCAgLyogVG8g
cmVhY2ggdGhlIE9QX0VORE1TRyBpbnN0ciBmb3IgdGhpcyBtc2cuICovCi0KLS8qIEdlbmVyYXRl
cyBieXRlY29kZSB0byBwYXJzZSBhIHNpbmdsZSBub24tbGF6eSBtZXNzYWdlIGZpZWxkLiAqLwot
c3RhdGljIHZvaWQgZ2VuZXJhdGVfbXNnZmllbGQoY29tcGlsZXIgKmMsIGNvbnN0IHVwYl9maWVs
ZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9wYmRlY29kZXJtZXRo
b2QgKm1ldGhvZCkgewotICBjb25zdCB1cGJfaGFuZGxlcnMgKmggPSB1cGJfcGJkZWNvZGVybWV0
aG9kX2Rlc3RoYW5kbGVycyhtZXRob2QpOwotICBjb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICpz
dWJfbSA9IGZpbmRfc3VibWV0aG9kKGMsIG1ldGhvZCwgZik7Ci0gIGludCB3aXJlX3R5cGU7Ci0K
LSAgaWYgKCFzdWJfbSkgewotICAgIC8qIERvbid0IGVtaXQgYW55IGNvZGUgZm9yIHRoaXMgZmll
bGQgYXQgYWxsOyBpdCB3aWxsIGJlIHBhcnNlZCBhcyBhbgotICAgICAqIHVua25vd24gZmllbGQu
Ci0gICAgICoKLSAgICAgKiBUT0RPKGhhYmVybWFuKTogd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIHRv
IHBhcnNlIGl0IGFzIGEgc3RyaW5nIGZpZWxkCi0gICAgICogaW5zdGVhZC4gIEl0IHdpbGwgcHJv
YmFibHkgYmUgZmFzdGVyLCBidXQgbW9yZSBpbXBvcnRhbnRseSwgb25jZSB3ZQotICAgICAqIHN0
YXJ0IHZlbmRpbmcgdW5rbm93biBmaWVsZHMsIGEgZmllbGQgc2hvdWxkbid0IGJlIHRyZWF0ZWQg
YXMgdW5rbm93bgotICAgICAqIGp1c3QgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgc3ViaGFuZGxl
cnMgcmVnaXN0ZXJlZC4gKi8KLSAgICByZXR1cm47Ci0gIH0KLQotICBsYWJlbChjLCBMQUJFTF9G
SUVMRCk7Ci0KLSAgd2lyZV90eXBlID0KLSAgICAgICh1cGJfZmllbGRkZWZfZGVzY3JpcHRvcnR5
cGUoZikgPT0gVVBCX0RFU0NSSVBUT1JfVFlQRV9NRVNTQUdFKQotICAgICAgICAgID8gVVBCX1dJ
UkVfVFlQRV9ERUxJTUlURUQKLSAgICAgICAgICA6IFVQQl9XSVJFX1RZUEVfU1RBUlRfR1JPVVA7
Ci0KLSAgaWYgKHVwYl9maWVsZGRlZl9pc3NlcShmKSkgewotICAgIHB1dG9wKGMsIE9QX0NIRUNL
REVMSU0sIExBQkVMX0VORE1TRyk7Ci0gICAgcHV0Y2hlY2t0YWcoYywgZiwgd2lyZV90eXBlLCBM
QUJFTF9ESVNQQVRDSCk7Ci0gICBkaXNwYXRjaHRhcmdldChjLCBtZXRob2QsIGYsIHdpcmVfdHlw
ZSk7Ci0gICAgcHV0b3AoYywgT1BfUFVTSFRBR0RFTElNLCAwKTsKLSAgICBwdXRvcChjLCBPUF9T
VEFSVFNFUSwgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX1NUQVJUU0VRKSk7Ci0gICBsYWJlbChjLCBM
QUJFTF9MT09QU1RBUlQpOwotICAgIHB1dHB1c2goYywgZik7Ci0gICAgcHV0b3AoYywgT1BfU1RB
UlRTVUJNU0csIGdldHNlbChmLCBVUEJfSEFORExFUl9TVEFSVFNVQk1TRykpOwotICAgIHB1dG9w
KGMsIE9QX0NBTEwsIHN1Yl9tKTsKLSAgICBwdXRvcChjLCBPUF9QT1ApOwotICAgIG1heWJlcHV0
KGMsIE9QX0VORFNVQk1TRywgaCwgZiwgVVBCX0hBTkRMRVJfRU5EU1VCTVNHKTsKLSAgICBpZiAo
d2lyZV90eXBlID09IFVQQl9XSVJFX1RZUEVfREVMSU1JVEVEKSB7Ci0gICAgICBwdXRvcChjLCBP
UF9TRVRERUxJTSk7Ci0gICAgfQotICAgIHB1dG9wKGMsIE9QX0NIRUNLREVMSU0sIExBQkVMX0xP
T1BCUkVBSyk7Ci0gICAgcHV0Y2hlY2t0YWcoYywgZiwgd2lyZV90eXBlLCBMQUJFTF9MT09QQlJF
QUspOwotICAgIHB1dG9wKGMsIE9QX0JSQU5DSCwgLUxBQkVMX0xPT1BTVEFSVCk7Ci0gICBsYWJl
bChjLCBMQUJFTF9MT09QQlJFQUspOwotICAgIHB1dG9wKGMsIE9QX1BPUCk7Ci0gICAgbWF5YmVw
dXQoYywgT1BfRU5EU0VRLCBoLCBmLCBVUEJfSEFORExFUl9FTkRTRVEpOwotICB9IGVsc2Ugewot
ICAgIHB1dG9wKGMsIE9QX0NIRUNLREVMSU0sIExBQkVMX0VORE1TRyk7Ci0gICAgcHV0Y2hlY2t0
YWcoYywgZiwgd2lyZV90eXBlLCBMQUJFTF9ESVNQQVRDSCk7Ci0gICBkaXNwYXRjaHRhcmdldChj
LCBtZXRob2QsIGYsIHdpcmVfdHlwZSk7Ci0gICAgcHV0cHVzaChjLCBmKTsKLSAgICBwdXRvcChj
LCBPUF9TVEFSVFNVQk1TRywgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX1NUQVJUU1VCTVNHKSk7Ci0g
ICAgcHV0b3AoYywgT1BfQ0FMTCwgc3ViX20pOwotICAgIHB1dG9wKGMsIE9QX1BPUCk7Ci0gICAg
bWF5YmVwdXQoYywgT1BfRU5EU1VCTVNHLCBoLCBmLCBVUEJfSEFORExFUl9FTkRTVUJNU0cpOwot
ICAgIGlmICh3aXJlX3R5cGUgPT0gVVBCX1dJUkVfVFlQRV9ERUxJTUlURUQpIHsKLSAgICAgIHB1
dG9wKGMsIE9QX1NFVERFTElNKTsKLSAgICB9Ci0gIH0KLX0KLQotLyogR2VuZXJhdGVzIGJ5dGVj
b2RlIHRvIHBhcnNlIGEgc2luZ2xlIHN0cmluZyBvciBsYXp5IHN1Ym1lc3NhZ2UgZmllbGQuICov
Ci1zdGF0aWMgdm9pZCBnZW5lcmF0ZV9kZWxpbWZpZWxkKGNvbXBpbGVyICpjLCBjb25zdCB1cGJf
ZmllbGRkZWYgKmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9wYmRlY29k
ZXJtZXRob2QgKm1ldGhvZCkgewotICBjb25zdCB1cGJfaGFuZGxlcnMgKmggPSB1cGJfcGJkZWNv
ZGVybWV0aG9kX2Rlc3RoYW5kbGVycyhtZXRob2QpOwotCi0gIGxhYmVsKGMsIExBQkVMX0ZJRUxE
KTsKLSAgaWYgKHVwYl9maWVsZGRlZl9pc3NlcShmKSkgewotICAgIHB1dG9wKGMsIE9QX0NIRUNL
REVMSU0sIExBQkVMX0VORE1TRyk7Ci0gICAgcHV0Y2hlY2t0YWcoYywgZiwgVVBCX1dJUkVfVFlQ
RV9ERUxJTUlURUQsIExBQkVMX0RJU1BBVENIKTsKLSAgIGRpc3BhdGNodGFyZ2V0KGMsIG1ldGhv
ZCwgZiwgVVBCX1dJUkVfVFlQRV9ERUxJTUlURUQpOwotICAgIHB1dG9wKGMsIE9QX1BVU0hUQUdE
RUxJTSwgMCk7Ci0gICAgcHV0b3AoYywgT1BfU1RBUlRTRVEsIGdldHNlbChmLCBVUEJfSEFORExF
Ul9TVEFSVFNFUSkpOwotICAgbGFiZWwoYywgTEFCRUxfTE9PUFNUQVJUKTsKLSAgICBwdXRvcChj
LCBPUF9QVVNITEVOREVMSU0pOwotICAgIHB1dG9wKGMsIE9QX1NUQVJUU1RSLCBnZXRzZWwoZiwg
VVBCX0hBTkRMRVJfU1RBUlRTVFIpKTsKLSAgICAvKiBOZWVkIHRvIGVtaXQgZXZlbiBpZiBubyBo
YW5kbGVyIHRvIHNraXAgcGFzdCB0aGUgc3RyaW5nLiAqLwotICAgIHB1dG9wKGMsIE9QX1NUUklO
RywgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX1NUUklORykpOwotICAgIHB1dG9wKGMsIE9QX1BPUCk7
Ci0gICAgbWF5YmVwdXQoYywgT1BfRU5EU1RSLCBoLCBmLCBVUEJfSEFORExFUl9FTkRTVFIpOwot
ICAgIHB1dG9wKGMsIE9QX1NFVERFTElNKTsKLSAgICBwdXRvcChjLCBPUF9DSEVDS0RFTElNLCBM
QUJFTF9MT09QQlJFQUspOwotICAgIHB1dGNoZWNrdGFnKGMsIGYsIFVQQl9XSVJFX1RZUEVfREVM
SU1JVEVELCBMQUJFTF9MT09QQlJFQUspOwotICAgIHB1dG9wKGMsIE9QX0JSQU5DSCwgLUxBQkVM
X0xPT1BTVEFSVCk7Ci0gICBsYWJlbChjLCBMQUJFTF9MT09QQlJFQUspOwotICAgIHB1dG9wKGMs
IE9QX1BPUCk7Ci0gICAgbWF5YmVwdXQoYywgT1BfRU5EU0VRLCBoLCBmLCBVUEJfSEFORExFUl9F
TkRTRVEpOwotICB9IGVsc2UgewotICAgIHB1dG9wKGMsIE9QX0NIRUNLREVMSU0sIExBQkVMX0VO
RE1TRyk7Ci0gICAgcHV0Y2hlY2t0YWcoYywgZiwgVVBCX1dJUkVfVFlQRV9ERUxJTUlURUQsIExB
QkVMX0RJU1BBVENIKTsKLSAgIGRpc3BhdGNodGFyZ2V0KGMsIG1ldGhvZCwgZiwgVVBCX1dJUkVf
VFlQRV9ERUxJTUlURUQpOwotICAgIHB1dG9wKGMsIE9QX1BVU0hMRU5ERUxJTSk7Ci0gICAgcHV0
b3AoYywgT1BfU1RBUlRTVFIsIGdldHNlbChmLCBVUEJfSEFORExFUl9TVEFSVFNUUikpOwotICAg
IHB1dG9wKGMsIE9QX1NUUklORywgZ2V0c2VsKGYsIFVQQl9IQU5ETEVSX1NUUklORykpOwotICAg
IHB1dG9wKGMsIE9QX1BPUCk7Ci0gICAgbWF5YmVwdXQoYywgT1BfRU5EU1RSLCBoLCBmLCBVUEJf
SEFORExFUl9FTkRTVFIpOwotICAgIHB1dG9wKGMsIE9QX1NFVERFTElNKTsKLSAgfQotfQotCi0v
KiBHZW5lcmF0ZXMgYnl0ZWNvZGUgdG8gcGFyc2UgYSBzaW5nbGUgcHJpbWl0aXZlIGZpZWxkLiAq
Lwotc3RhdGljIHZvaWQgZ2VuZXJhdGVfcHJpbWl0aXZlZmllbGQoY29tcGlsZXIgKmMsIGNvbnN0
IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVw
Yl9wYmRlY29kZXJtZXRob2QgKm1ldGhvZCkgewotICBjb25zdCB1cGJfaGFuZGxlcnMgKmggPSB1
cGJfcGJkZWNvZGVybWV0aG9kX2Rlc3RoYW5kbGVycyhtZXRob2QpOwotICB1cGJfZGVzY3JpcHRv
cnR5cGVfdCBkZXNjcmlwdG9yX3R5cGUgPSB1cGJfZmllbGRkZWZfZGVzY3JpcHRvcnR5cGUoZik7
Ci0gIG9wY29kZSBwYXJzZV90eXBlOwotICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0gIGludCB3aXJl
X3R5cGU7Ci0KLSAgbGFiZWwoYywgTEFCRUxfRklFTEQpOwotCi0gIC8qIEZyb20gYSBkZWNvZGlu
ZyBwZXJzcGVjdGl2ZSwgRU5VTSBpcyB0aGUgc2FtZSBhcyBJTlQzMi4gKi8KLSAgaWYgKGRlc2Ny
aXB0b3JfdHlwZSA9PSBVUEJfREVTQ1JJUFRPUl9UWVBFX0VOVU0pCi0gICAgZGVzY3JpcHRvcl90
eXBlID0gVVBCX0RFU0NSSVBUT1JfVFlQRV9JTlQzMjsKLQotICBwYXJzZV90eXBlID0gKG9wY29k
ZSlkZXNjcmlwdG9yX3R5cGU7Ci0KLSAgLyogVE9ETyhoYWJlcm1hbik6IGdlbmVyYXRlIHBhY2tl
ZCBvciBub24tcGFja2VkIGZpcnN0IGRlcGVuZGluZyBvbiAicGFja2VkIgotICAgKiBzZXR0aW5n
IGluIHRoZSBmaWVsZGRlZi4gIFRoaXMgd2lsbCBmYXZvciAoaW4gc3BlZWQpIHdoaWNoZXZlciB3
YXMKLSAgICogc3BlY2lmaWVkLiAqLwotCi0gIGFzc2VydCgoaW50KXBhcnNlX3R5cGUgPj0gMCAm
JiBwYXJzZV90eXBlIDw9IE9QX01BWCk7Ci0gIHNlbCA9IGdldHNlbChmLCB1cGJfaGFuZGxlcnNf
Z2V0cHJpbWl0aXZlaGFuZGxlcnR5cGUoZikpOwotICB3aXJlX3R5cGUgPSB1cGJfcGJfbmF0aXZl
X3dpcmVfdHlwZXNbdXBiX2ZpZWxkZGVmX2Rlc2NyaXB0b3J0eXBlKGYpXTsKLSAgaWYgKHVwYl9m
aWVsZGRlZl9pc3NlcShmKSkgewotICAgIHB1dG9wKGMsIE9QX0NIRUNLREVMSU0sIExBQkVMX0VO
RE1TRyk7Ci0gICAgcHV0Y2hlY2t0YWcoYywgZiwgVVBCX1dJUkVfVFlQRV9ERUxJTUlURUQsIExB
QkVMX0RJU1BBVENIKTsKLSAgIGRpc3BhdGNodGFyZ2V0KGMsIG1ldGhvZCwgZiwgVVBCX1dJUkVf
VFlQRV9ERUxJTUlURUQpOwotICAgIHB1dG9wKGMsIE9QX1BVU0hMRU5ERUxJTSk7Ci0gICAgcHV0
b3AoYywgT1BfU1RBUlRTRVEsIGdldHNlbChmLCBVUEJfSEFORExFUl9TVEFSVFNFUSkpOyAgLyog
UGFja2VkICovCi0gICBsYWJlbChjLCBMQUJFTF9MT09QU1RBUlQpOwotICAgIHB1dG9wKGMsIHBh
cnNlX3R5cGUsIHNlbCk7Ci0gICAgcHV0b3AoYywgT1BfQ0hFQ0tERUxJTSwgTEFCRUxfTE9PUEJS
RUFLKTsKLSAgICBwdXRvcChjLCBPUF9CUkFOQ0gsIC1MQUJFTF9MT09QU1RBUlQpOwotICAgZGlz
cGF0Y2h0YXJnZXQoYywgbWV0aG9kLCBmLCB3aXJlX3R5cGUpOwotICAgIHB1dG9wKGMsIE9QX1BV
U0hUQUdERUxJTSwgMCk7Ci0gICAgcHV0b3AoYywgT1BfU1RBUlRTRVEsIGdldHNlbChmLCBVUEJf
SEFORExFUl9TVEFSVFNFUSkpOyAgLyogTm9uLXBhY2tlZCAqLwotICAgbGFiZWwoYywgTEFCRUxf
TE9PUFNUQVJUKTsKLSAgICBwdXRvcChjLCBwYXJzZV90eXBlLCBzZWwpOwotICAgIHB1dG9wKGMs
IE9QX0NIRUNLREVMSU0sIExBQkVMX0xPT1BCUkVBSyk7Ci0gICAgcHV0Y2hlY2t0YWcoYywgZiwg
d2lyZV90eXBlLCBMQUJFTF9MT09QQlJFQUspOwotICAgIHB1dG9wKGMsIE9QX0JSQU5DSCwgLUxB
QkVMX0xPT1BTVEFSVCk7Ci0gICBsYWJlbChjLCBMQUJFTF9MT09QQlJFQUspOwotICAgIHB1dG9w
KGMsIE9QX1BPUCk7ICAvKiBQYWNrZWQgYW5kIG5vbi1wYWNrZWQgam9pbi4gKi8KLSAgICBtYXli
ZXB1dChjLCBPUF9FTkRTRVEsIGgsIGYsIFVQQl9IQU5ETEVSX0VORFNFUSk7Ci0gICAgcHV0b3Ao
YywgT1BfU0VUREVMSU0pOyAgLyogQ291bGQgcmVtb3ZlIGZvciBub24tcGFja2VkIGJ5IGR1cCBF
TkRTRVEuICovCi0gIH0gZWxzZSB7Ci0gICAgcHV0b3AoYywgT1BfQ0hFQ0tERUxJTSwgTEFCRUxf
RU5ETVNHKTsKLSAgICBwdXRjaGVja3RhZyhjLCBmLCB3aXJlX3R5cGUsIExBQkVMX0RJU1BBVENI
KTsKLSAgIGRpc3BhdGNodGFyZ2V0KGMsIG1ldGhvZCwgZiwgd2lyZV90eXBlKTsKLSAgICBwdXRv
cChjLCBwYXJzZV90eXBlLCBzZWwpOwotICB9Ci19Ci0KLS8qIEFkZHMgYnl0ZWNvZGUgZm9yIHBh
cnNpbmcgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gdGhlIGdpdmVuIGRlY29kZXJwbGFuLAotICogd2hp
bGUgYWRkaW5nIGFsbCBkaXNwYXRjaCB0YXJnZXRzIHRvIHRoaXMgbWVzc2FnZSdzIGRpc3BhdGNo
IHRhYmxlLiAqLwotc3RhdGljIHZvaWQgY29tcGlsZV9tZXRob2QoY29tcGlsZXIgKmMsIHVwYl9w
YmRlY29kZXJtZXRob2QgKm1ldGhvZCkgewotICBjb25zdCB1cGJfaGFuZGxlcnMgKmg7Ci0gIGNv
bnN0IHVwYl9tc2dkZWYgKm1kOwotICB1aW50MzJfdCogc3RhcnRfcGM7Ci0gIHVwYl9tc2dfZmll
bGRfaXRlciBpOwotICB1cGJfdmFsdWUgdmFsOwotCi0gIGFzc2VydChtZXRob2QpOwotCi0gIC8q
IENsZWFyIGFsbCBlbnRyaWVzIGluIHRoZSBkaXNwYXRjaCB0YWJsZS4gKi8KLSAgdXBiX2ludHRh
YmxlX3VuaW5pdCgmbWV0aG9kLT5kaXNwYXRjaCk7Ci0gIHVwYl9pbnR0YWJsZV9pbml0KCZtZXRo
b2QtPmRpc3BhdGNoLCBVUEJfQ1RZUEVfVUlOVDY0KTsKLQotICBoID0gdXBiX3BiZGVjb2Rlcm1l
dGhvZF9kZXN0aGFuZGxlcnMobWV0aG9kKTsKLSAgbWQgPSB1cGJfaGFuZGxlcnNfbXNnZGVmKGgp
OwotCi0gbWV0aG9kLT5jb2RlX2Jhc2Uub2ZzID0gcGNvZnMoYyk7Ci0gIHB1dG9wKGMsIE9QX1NF
VERJU1BBVENILCAmbWV0aG9kLT5kaXNwYXRjaCk7Ci0gIHB1dHNlbChjLCBPUF9TVEFSVE1TRywg
VVBCX1NUQVJUTVNHX1NFTEVDVE9SLCBoKTsKLSBsYWJlbChjLCBMQUJFTF9GSUVMRCk7Ci0gIHN0
YXJ0X3BjID0gYy0+cGM7Ci0gIGZvcih1cGJfbXNnX2ZpZWxkX2JlZ2luKCZpLCBtZCk7Ci0gICAg
ICAhdXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVwYl9tc2dfZmllbGRfbmV4dCgmaSkp
IHsKLSAgICBjb25zdCB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmllbGQoJmkpOwot
ICAgIHVwYl9maWVsZHR5cGVfdCB0eXBlID0gdXBiX2ZpZWxkZGVmX3R5cGUoZik7Ci0KLSAgICBp
ZiAodHlwZSA9PSBVUEJfVFlQRV9NRVNTQUdFICYmICEoaGFzbGF6eWhhbmRsZXJzKGgsIGYpICYm
IGMtPmxhenkpKSB7Ci0gICAgICBnZW5lcmF0ZV9tc2dmaWVsZChjLCBmLCBtZXRob2QpOwotICAg
IH0gZWxzZSBpZiAodHlwZSA9PSBVUEJfVFlQRV9TVFJJTkcgfHwgdHlwZSA9PSBVUEJfVFlQRV9C
WVRFUyB8fAotICAgICAgICAgICAgICAgdHlwZSA9PSBVUEJfVFlQRV9NRVNTQUdFKSB7Ci0gICAg
ICBnZW5lcmF0ZV9kZWxpbWZpZWxkKGMsIGYsIG1ldGhvZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGdlbmVyYXRlX3ByaW1pdGl2ZWZpZWxkKGMsIGYsIG1ldGhvZCk7Ci0gICAgfQotICB9Ci0KLSAg
LyogSWYgdGhlcmUgd2VyZSBubyBmaWVsZHMsIG9yIGlmIG5vIGhhbmRsZXJzIHdlcmUgZGVmaW5l
ZCwgd2UgbmVlZCB0bwotICAgKiBnZW5lcmF0ZSBhIG5vbi1lbXB0eSBsb29wIGJvZHkgc28gdGhh
dCB3ZSBjYW4gYXQgbGVhc3QgZGlzcGF0Y2ggZm9yIHVua25vd24KLSAgICogZmllbGRzIGFuZCBj
aGVjayBmb3IgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZS4gKi8KLSAgaWYgKGMtPnBjID09IHN0YXJ0
X3BjKSB7Ci0gICAgLyogQ2hlY2sgZm9yIGVuZC1vZi1tZXNzYWdlLiAqLwotICAgIHB1dG9wKGMs
IE9QX0NIRUNLREVMSU0sIExBQkVMX0VORE1TRyk7Ci0gICAgLyogVW5jb25kaXRpb25hbGx5IGRp
c3BhdGNoLiAqLwotICAgIHB1dG9wKGMsIE9QX0RJU1BBVENILCAwKTsKLSAgfQotCi0gIC8qIEZv
ciBub3cgd2UganVzdCBsb29wIGJhY2sgdG8gdGhlIGxhc3QgZmllbGQgb2YgdGhlIG1lc3NhZ2Ug
KG9yIGlmIG5vbmUsCi0gICAqIHRoZSBESVNQQVRDSCBvcGNvZGUgZm9yIHRoZSBtZXNzYWdlKS4g
Ki8KLSAgcHV0b3AoYywgT1BfQlJBTkNILCAtTEFCRUxfRklFTEQpOwotCi0gIC8qIEluc2VydCBi
b3RoIGEgbGFiZWwgYW5kIGEgZGlzcGF0Y2ggdGFibGUgZW50cnkgZm9yIHRoaXMgZW5kLW9mLW1z
Zy4gKi8KLSBsYWJlbChjLCBMQUJFTF9FTkRNU0cpOwotICB2YWwgPSB1cGJfdmFsdWVfdWludDY0
KHBjb2ZzKGMpIC0gbWV0aG9kLT5jb2RlX2Jhc2Uub2ZzKTsKLSAgdXBiX2ludHRhYmxlX2luc2Vy
dCgmbWV0aG9kLT5kaXNwYXRjaCwgRElTUEFUQ0hfRU5ETVNHLCB2YWwpOwotCi0gIHB1dHNlbChj
LCBPUF9FTkRNU0csIFVQQl9FTkRNU0dfU0VMRUNUT1IsIGgpOwotICBwdXRvcChjLCBPUF9SRVQp
OwotCi0gIHVwYl9pbnR0YWJsZV9jb21wYWN0KCZtZXRob2QtPmRpc3BhdGNoKTsKLX0KLQotLyog
UG9wdWxhdGUgIm1ldGhvZHMiIHdpdGggbmV3IHVwYl9wYmRlY29kZXJtZXRob2Qgb2JqZWN0cyBy
ZWFjaGFibGUgZnJvbSAiaCIuCi0gKiBSZXR1cm5zIHRoZSBtZXRob2QgZm9yIHRoZXNlIGhhbmRs
ZXJzLgotICoKLSAqIEdlbmVyYXRlcyBhIG5ldyBtZXRob2QgZm9yIGV2ZXJ5IGRlc3RpbmF0aW9u
IGhhbmRsZXJzIHJlYWNoYWJsZSBmcm9tICJoIi4gKi8KLXN0YXRpYyB2b2lkIGZpbmRfbWV0aG9k
cyhjb21waWxlciAqYywgY29uc3QgdXBiX2hhbmRsZXJzICpoKSB7Ci0gIHVwYl92YWx1ZSB2Owot
ICB1cGJfbXNnX2ZpZWxkX2l0ZXIgaTsKLSAgY29uc3QgdXBiX21zZ2RlZiAqbWQ7Ci0KLSAgaWYg
KHVwYl9pbnR0YWJsZV9sb29rdXBwdHIoJmMtPmdyb3VwLT5tZXRob2RzLCBoLCAmdikpCi0gICAg
cmV0dXJuOwotICBuZXdtZXRob2QoaCwgYy0+Z3JvdXApOwotCi0gIC8qIEZpbmQgc3VibWV0aG9k
cy4gKi8KLSAgbWQgPSB1cGJfaGFuZGxlcnNfbXNnZGVmKGgpOwotICBmb3IodXBiX21zZ19maWVs
ZF9iZWdpbigmaSwgbWQpOwotICAgICAgIXVwYl9tc2dfZmllbGRfZG9uZSgmaSk7Ci0gICAgICB1
cGJfbXNnX2ZpZWxkX25leHQoJmkpKSB7Ci0gICAgY29uc3QgdXBiX2ZpZWxkZGVmICpmID0gdXBi
X21zZ19pdGVyX2ZpZWxkKCZpKTsKLSAgICBjb25zdCB1cGJfaGFuZGxlcnMgKnN1Yl9oOwotICAg
IGlmICh1cGJfZmllbGRkZWZfdHlwZShmKSA9PSBVUEJfVFlQRV9NRVNTQUdFICYmCi0gICAgICAg
IChzdWJfaCA9IHVwYl9oYW5kbGVyc19nZXRzdWJoYW5kbGVycyhoLCBmKSkgIT0gTlVMTCkgewot
ICAgICAgLyogV2Ugb25seSBnZW5lcmF0ZSBhIGRlY29kZXIgbWV0aG9kIGZvciBzdWJtZXNzYWdl
cyB3aXRoIGhhbmRsZXJzLgotICAgICAgICogT3RoZXJzIHdpbGwgYmUgcGFyc2VkIGFzIHVua25v
d24gZmllbGRzLiAqLwotICAgICAgZmluZF9tZXRob2RzKGMsIHN1Yl9oKTsKLSAgICB9Ci0gIH0K
LX0KLQotLyogKFJlLSljb21waWxlIGJ5dGVjb2RlIGZvciBhbGwgbWVzc2FnZXMgaW4gIm1zZ3Mu
IgotICogT3ZlcndyaXRlcyBhbnkgZXhpc3RpbmcgYnl0ZWNvZGUgaW4gImMiLiAqLwotc3RhdGlj
IHZvaWQgY29tcGlsZV9tZXRob2RzKGNvbXBpbGVyICpjKSB7Ci0gIHVwYl9pbnR0YWJsZV9pdGVy
IGk7Ci0KLSAgLyogU3RhcnQgb3ZlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBieXRlY29kZS4g
Ki8KLSAgYy0+cGMgPSBjLT5ncm91cC0+Ynl0ZWNvZGU7Ci0KLSAgdXBiX2ludHRhYmxlX2JlZ2lu
KCZpLCAmYy0+Z3JvdXAtPm1ldGhvZHMpOwotICBmb3IoOyAhdXBiX2ludHRhYmxlX2RvbmUoJmkp
OyB1cGJfaW50dGFibGVfbmV4dCgmaSkpIHsKLSAgICB1cGJfcGJkZWNvZGVybWV0aG9kICptZXRo
b2QgPSB1cGJfdmFsdWVfZ2V0cHRyKHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVlKCZpKSk7Ci0gICAg
Y29tcGlsZV9tZXRob2QoYywgbWV0aG9kKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBzZXRfYnl0
ZWNvZGVfaGFuZGxlcnMobWdyb3VwICpnKSB7Ci0gIHVwYl9pbnR0YWJsZV9pdGVyIGk7Ci0gIHVw
Yl9pbnR0YWJsZV9iZWdpbigmaSwgJmctPm1ldGhvZHMpOwotICBmb3IoOyAhdXBiX2ludHRhYmxl
X2RvbmUoJmkpOyB1cGJfaW50dGFibGVfbmV4dCgmaSkpIHsKLSAgICB1cGJfcGJkZWNvZGVybWV0
aG9kICptID0gdXBiX3ZhbHVlX2dldHB0cih1cGJfaW50dGFibGVfaXRlcl92YWx1ZSgmaSkpOwot
ICAgIHVwYl9ieXRlc2hhbmRsZXIgKmggPSAmbS0+aW5wdXRfaGFuZGxlcl87Ci0KLSAgICBtLT5j
b2RlX2Jhc2UucHRyID0gZy0+Ynl0ZWNvZGUgKyBtLT5jb2RlX2Jhc2Uub2ZzOwotCi0gICAgdXBi
X2J5dGVzaGFuZGxlcl9zZXRzdGFydHN0cihoLCB1cGJfcGJkZWNvZGVyX3N0YXJ0YmMsIG0tPmNv
ZGVfYmFzZS5wdHIpOwotICAgIHVwYl9ieXRlc2hhbmRsZXJfc2V0c3RyaW5nKGgsIHVwYl9wYmRl
Y29kZXJfZGVjb2RlLCBnKTsKLSAgICB1cGJfYnl0ZXNoYW5kbGVyX3NldGVuZHN0cihoLCB1cGJf
cGJkZWNvZGVyX2VuZCwgbSk7Ci0gIH0KLX0KLQotCi0vKiBKSVQgc2V0dXAuICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ci0jaWZkZWYgVVBCX1VTRV9KSVRfWDY0Ci0KLXN0YXRpYyB2b2lkIHNldGhhbmRsZXJzKG1ncm91
cCAqZywgYm9vbCBhbGxvd2ppdCkgewotICBnLT5qaXRfY29kZSA9IE5VTEw7Ci0gIGlmIChhbGxv
d2ppdCkgewotICAgIC8qIENvbXBpbGUgYnl0ZS1jb2RlIGludG8gbWFjaGluZSBjb2RlLCBjcmVh
dGUgaGFuZGxlcnMuICovCi0gICAgdXBiX3BiZGVjb2Rlcl9qaXQoZyk7Ci0gIH0gZWxzZSB7Ci0g
ICAgc2V0X2J5dGVjb2RlX2hhbmRsZXJzKGcpOwotICB9Ci19Ci0KLSNlbHNlICAvKiBVUEJfVVNF
X0pJVF9YNjQgKi8KLQotc3RhdGljIHZvaWQgc2V0aGFuZGxlcnMobWdyb3VwICpnLCBib29sIGFs
bG93aml0KSB7Ci0gIC8qIE5vIEpJVCBjb21waWxlZCBpbjsgdXNlIGJ5dGVjb2RlIGhhbmRsZXJz
IHVuY29uZGl0aW9uYWxseS4gKi8KLSAgVVBCX1VOVVNFRChhbGxvd2ppdCk7Ci0gIHNldF9ieXRl
Y29kZV9oYW5kbGVycyhnKTsKLX0KLQotI2VuZGlmICAvKiBVUEJfVVNFX0pJVF9YNjQgKi8KLQot
Ci0vKiBUT0RPKGhhYmVybWFuKTogYWxsb3cgdGhpcyB0byBiZSBjb25zdHJ1Y3RlZCBmb3IgYW4g
YXJiaXRyYXJ5IHNldCBvZiBkZXN0Ci0gKiBoYW5kbGVycyBhbmQgb3RoZXIgbWdyb3VwcyAoYnV0
IHZlcmlmeSB3ZSBoYXZlIGEgdHJhbnNpdGl2ZSBjbG9zdXJlKS4gKi8KLWNvbnN0IG1ncm91cCAq
bWdyb3VwX25ldyhjb25zdCB1cGJfaGFuZGxlcnMgKmRlc3QsIGJvb2wgYWxsb3dqaXQsIGJvb2wg
bGF6eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpvd25lcikgewotICBt
Z3JvdXAgKmc7Ci0gIGNvbXBpbGVyICpjOwotCi0gIFVQQl9VTlVTRUQoYWxsb3dqaXQpOwotICBh
c3NlcnQodXBiX2hhbmRsZXJzX2lzZnJvemVuKGRlc3QpKTsKLQotICBnID0gbmV3Z3JvdXAob3du
ZXIpOwotICBjID0gbmV3Y29tcGlsZXIoZywgbGF6eSk7Ci0gIGZpbmRfbWV0aG9kcyhjLCBkZXN0
KTsKLQotICAvKiBXZSBjb21waWxlIGluIHR3byBwYXNzZXM6Ci0gICAqIDEuIGFsbCBtZXNzYWdl
cyBhcmUgYXNzaWduZWQgcmVsYXRpdmUgb2Zmc2V0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhl
Ci0gICAqICAgIGJ5dGVjb2RlIChzYXZlZCBpbiBtZXRob2QtPmNvZGVfYmFzZSkuCi0gICAqIDIu
IGZvcndhcmRzIE9QX0NBTEwgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBjb3JyZWN0bHkgbGlua2VkIHNp
bmNlIG1lc3NhZ2UKLSAgICogICAgb2Zmc2V0cyBoYXZlIGJlZW4gcHJldmlvdXNseSBhc3NpZ25l
ZC4KLSAgICoKLSAgICogQ291bGQgYXZvaWQgdGhlIHNlY29uZCBwYXNzIGJ5IGxpbmtpbmcgT1Bf
Q0FMTCBpbnN0cnVjdGlvbnMgc29tZWhvdy4gKi8KLSAgY29tcGlsZV9tZXRob2RzKGMpOwotICBj
b21waWxlX21ldGhvZHMoYyk7Ci0gIGctPmJ5dGVjb2RlX2VuZCA9IGMtPnBjOwotICBmcmVlY29t
cGlsZXIoYyk7Ci0KLSNpZmRlZiBVUEJfRFVNUF9CWVRFQ09ERQotICB7Ci0gICAgRklMRSAqZiA9
IGZvcGVuKCIvdG1wL3VwYi1ieXRlY29kZSIsICJ3Iik7Ci0gICAgYXNzZXJ0KGYpOwotICAgIGR1
bXBiYyhnLT5ieXRlY29kZSwgZy0+Ynl0ZWNvZGVfZW5kLCBzdGRlcnIpOwotICAgIGR1bXBiYyhn
LT5ieXRlY29kZSwgZy0+Ynl0ZWNvZGVfZW5kLCBmKTsKLSAgICBmY2xvc2UoZik7Ci0KLSAgICBm
ID0gZm9wZW4oIi90bXAvdXBiLWJ5dGVjb2RlLmJpbiIsICJ3YiIpOwotICAgIGFzc2VydChmKTsK
LSAgICBmd3JpdGUoZy0+Ynl0ZWNvZGUsIDEsIGctPmJ5dGVjb2RlX2VuZCAtIGctPmJ5dGVjb2Rl
LCBmKTsKLSAgICBmY2xvc2UoZik7Ci0gIH0KLSNlbmRpZgotCi0gIHNldGhhbmRsZXJzKGcsIGFs
bG93aml0KTsKLSAgcmV0dXJuIGc7Ci19Ci0KLQotLyogdXBiX3BiY29kZWNhY2hlICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
dm9pZCB1cGJfcGJjb2RlY2FjaGVfaW5pdCh1cGJfcGJjb2RlY2FjaGUgKmMpIHsKLSAgdXBiX2lu
dHRhYmxlX2luaXQoJmMtPmdyb3VwcywgVVBCX0NUWVBFX0NPTlNUUFRSKTsKLSAgYy0+YWxsb3df
aml0XyA9IHRydWU7Ci19Ci0KLXZvaWQgdXBiX3BiY29kZWNhY2hlX3VuaW5pdCh1cGJfcGJjb2Rl
Y2FjaGUgKmMpIHsKLSAgdXBiX2ludHRhYmxlX2l0ZXIgaTsKLSAgdXBiX2ludHRhYmxlX2JlZ2lu
KCZpLCAmYy0+Z3JvdXBzKTsKLSAgZm9yKDsgIXVwYl9pbnR0YWJsZV9kb25lKCZpKTsgdXBiX2lu
dHRhYmxlX25leHQoJmkpKSB7Ci0gICAgY29uc3QgbWdyb3VwICpncm91cCA9IHVwYl92YWx1ZV9n
ZXRjb25zdHB0cih1cGJfaW50dGFibGVfaXRlcl92YWx1ZSgmaSkpOwotICAgIG1ncm91cF91bnJl
Zihncm91cCwgYyk7Ci0gIH0KLSAgdXBiX2ludHRhYmxlX3VuaW5pdCgmYy0+Z3JvdXBzKTsKLX0K
LQotYm9vbCB1cGJfcGJjb2RlY2FjaGVfYWxsb3dqaXQoY29uc3QgdXBiX3BiY29kZWNhY2hlICpj
KSB7Ci0gIHJldHVybiBjLT5hbGxvd19qaXRfOwotfQotCi1ib29sIHVwYl9wYmNvZGVjYWNoZV9z
ZXRhbGxvd2ppdCh1cGJfcGJjb2RlY2FjaGUgKmMsIGJvb2wgYWxsb3cpIHsKLSAgaWYgKHVwYl9p
bnR0YWJsZV9jb3VudCgmYy0+Z3JvdXBzKSA+IDApCi0gICAgcmV0dXJuIGZhbHNlOwotICBjLT5h
bGxvd19qaXRfID0gYWxsb3c7Ci0gIHJldHVybiB0cnVlOwotfQotCi1jb25zdCB1cGJfcGJkZWNv
ZGVybWV0aG9kICp1cGJfcGJjb2RlY2FjaGVfZ2V0ZGVjb2Rlcm1ldGhvZCgKLSAgICB1cGJfcGJj
b2RlY2FjaGUgKmMsIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2RvcHRzICpvcHRzKSB7Ci0gIHVw
Yl92YWx1ZSB2OwotICBib29sIG9rOwotCi0gIC8qIFJpZ2h0IG5vdyB3ZSBidWlsZCBhIG5ldyBE
ZWNvZGVyTWV0aG9kIGV2ZXJ5IHRpbWUuCi0gICAqIFRPRE8oaGFiZXJtYW4pOiBwcm9wZXJseSBj
YWNoZSBtZXRob2RzIGJ5IHRoZWlyIHRydWUga2V5LiAqLwotICBjb25zdCBtZ3JvdXAgKmcgPSBt
Z3JvdXBfbmV3KG9wdHMtPmhhbmRsZXJzLCBjLT5hbGxvd19qaXRfLCBvcHRzLT5sYXp5LCBjKTsK
LSAgdXBiX2ludHRhYmxlX3B1c2goJmMtPmdyb3VwcywgdXBiX3ZhbHVlX2NvbnN0cHRyKGcpKTsK
LQotICBvayA9IHVwYl9pbnR0YWJsZV9sb29rdXBwdHIoJmctPm1ldGhvZHMsIG9wdHMtPmhhbmRs
ZXJzLCAmdik7Ci0gIFVQQl9BU1NFUlRfVkFSKG9rLCBvayk7Ci0gIHJldHVybiB1cGJfdmFsdWVf
Z2V0cHRyKHYpOwotfQotCi0KLS8qIHVwYl9wYmRlY29kZXJtZXRob2RvcHRzICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgdXBiX3Bi
ZGVjb2Rlcm1ldGhvZG9wdHNfaW5pdCh1cGJfcGJkZWNvZGVybWV0aG9kb3B0cyAqb3B0cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfaGFuZGxlcnMgKmgpIHsK
LSAgb3B0cy0+aGFuZGxlcnMgPSBoOwotICBvcHRzLT5sYXp5ID0gZmFsc2U7Ci19Ci0KLXZvaWQg
dXBiX3BiZGVjb2Rlcm1ldGhvZG9wdHNfc2V0bGF6eSh1cGJfcGJkZWNvZGVybWV0aG9kb3B0cyAq
b3B0cywgYm9vbCBsYXp5KSB7Ci0gIG9wdHMtPmxhenkgPSBsYXp5OwotfQotLyoKLSoqIHVwYjo6
RGVjb2RlciAoQnl0ZWNvZGUgRGVjb2RlciBWTSkKLSoqCi0qKiBCeXRlY29kZSBtdXN0IHByZXZp
b3VzbHkgaGF2ZSBiZWVuIGdlbmVyYXRlZCB1c2luZyB0aGUgYnl0ZWNvZGUgY29tcGlsZXIgaW4K
LSoqIGNvbXBpbGVfZGVjb2Rlci5jLiAgVGhpcyBkZWNvZGVyIHRoZW4gd2Fsa3MgdGhyb3VnaCB0
aGUgYnl0ZWNvZGUgb3AtYnktb3AgdG8KLSoqIHBhcnNlIHRoZSBpbnB1dC4KLSoqCi0qKiBEZWNv
ZGluZyBpcyBmdWxseSByZXN1bWFibGU7IHdlIGp1c3Qga2VlcCBhIHBvaW50ZXIgdG8gdGhlIGN1
cnJlbnQgYnl0ZWNvZGUKLSoqIGluc3RydWN0aW9uIGFuZCByZXN1bWUgZnJvbSB0aGVyZS4gIEEg
ZmFpciBhbW91bnQgb2YgdGhlIGxvZ2ljIGhlcmUgaXMgdG8KLSoqIGhhbmRsZSB0aGUgZmFjdCB0
aGF0IHZhbHVlcyBjYW4gc3BhbiBidWZmZXIgc2VhbXMgYW5kIHdlIGhhdmUgdG8gYmUgYWJsZSB0
bwotKiogYmUgY2FwYWJsZSBvZiBzdXNwZW5kaW5nL3Jlc3VtaW5nIGZyb20gYW55IGJ5dGUgaW4g
dGhlIHN0cmVhbS4gIFRoaXMKLSoqIHNvbWV0aW1lcyByZXF1aXJlcyBrZWVwaW5nIGEgZmV3IHRy
YWlsaW5nIGJ5dGVzIGZyb20gdGhlIGxhc3QgYnVmZmVyIGFyb3VuZAotKiogaW4gdGhlICJyZXNp
ZHVhbCIgYnVmZmVyLgotKi8KLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3Rk
ZGVmLmg+Ci0KLSNpZmRlZiBVUEJfRFVNUF9CWVRFQ09ERQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0j
ZW5kaWYKLQotI2RlZmluZSBDSEVDS19TVVNQRU5EKHgpIGlmICghKHgpKSByZXR1cm4gdXBiX3Bi
ZGVjb2Rlcl9zdXNwZW5kKGQpOwotCi0vKiBFcnJvciBtZXNzYWdlcyB0aGF0IGFyZSBzaGFyZWQg
YmV0d2VlbiB0aGUgYnl0ZWNvZGUgYW5kIEpJVCBkZWNvZGVycy4gKi8KLWNvbnN0IGNoYXIgKmtQ
YkRlY29kZXJTdGFja092ZXJmbG93ID0gIk5lc3RpbmcgdG9vIGRlZXAuIjsKLWNvbnN0IGNoYXIg
KmtQYkRlY29kZXJTdWJtZXNzYWdlVG9vTG9uZyA9Ci0gICAgIlN1Ym1lc3NhZ2UgZW5kIGV4dGVu
ZHMgcGFzdCBlbmNsb3Npbmcgc3VibWVzc2FnZS4iOwotCi0vKiBFcnJvciBtZXNzYWdlcyBzaGFy
ZWQgd2l0aGluIHRoaXMgZmlsZS4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICprVW50ZXJtaW5hdGVk
VmFyaW50ID0gIlVudGVybWluYXRlZCB2YXJpbnQuIjsKLQotLyogdXBiX3BiZGVjb2RlciAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLQotc3RhdGljIG9wY29kZSBoYWx0ID0gT1BfSEFMVDsKLQotLyogQSBkdW1teSBjaGFyYWN0
ZXIgd2UgY2FuIHBvaW50IHRvIHdoZW4gdGhlIHVzZXIgcGFzc2VzIHVzIGEgTlVMTCBidWZmZXIu
Ci0gKiBXZSBuZWVkIHRoaXMgYmVjYXVzZSBpbiBDIChOVUxMICsgMCkgYW5kIChOVUxMIC0gTlVM
TCkgYXJlIHVuZGVmaW5lZAotICogYmVoYXZpb3IsIHdoaWNoIHdvdWxkIGludmFsaWRhdGUgZnVu
Y3Rpb25zIGxpa2UgY3VyYnVmbGVmdCgpLiAqLwotc3RhdGljIGNvbnN0IGNoYXIgZHVtbXlfY2hh
cjsKLQotLyogV2hldGhlciBhbiBvcCBjb25zdW1lcyBhbnkgb2YgdGhlIGlucHV0IGJ1ZmZlci4g
Ki8KLXN0YXRpYyBib29sIGNvbnN1bWVzX2lucHV0KG9wY29kZSBvcCkgewotICBzd2l0Y2ggKG9w
KSB7Ci0gICAgY2FzZSBPUF9TRVRESVNQQVRDSDoKLSAgICBjYXNlIE9QX1NUQVJUTVNHOgotICAg
IGNhc2UgT1BfRU5ETVNHOgotICAgIGNhc2UgT1BfU1RBUlRTRVE6Ci0gICAgY2FzZSBPUF9FTkRT
RVE6Ci0gICAgY2FzZSBPUF9TVEFSVFNVQk1TRzoKLSAgICBjYXNlIE9QX0VORFNVQk1TRzoKLSAg
ICBjYXNlIE9QX1NUQVJUU1RSOgotICAgIGNhc2UgT1BfRU5EU1RSOgotICAgIGNhc2UgT1BfUFVT
SFRBR0RFTElNOgotICAgIGNhc2UgT1BfUE9QOgotICAgIGNhc2UgT1BfU0VUREVMSU06Ci0gICAg
Y2FzZSBPUF9TRVRCSUdHUk9VUE5VTToKLSAgICBjYXNlIE9QX0NIRUNLREVMSU06Ci0gICAgY2Fz
ZSBPUF9DQUxMOgotICAgIGNhc2UgT1BfUkVUOgotICAgIGNhc2UgT1BfQlJBTkNIOgotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQot
Ci1zdGF0aWMgc2l6ZV90IHN0YWNrc2l6ZSh1cGJfcGJkZWNvZGVyICpkLCBzaXplX3QgZW50cmll
cykgewotICBVUEJfVU5VU0VEKGQpOwotICByZXR1cm4gZW50cmllcyAqIHNpemVvZih1cGJfcGJk
ZWNvZGVyX2ZyYW1lKTsKLX0KLQotc3RhdGljIHNpemVfdCBjYWxsc3RhY2tzaXplKHVwYl9wYmRl
Y29kZXIgKmQsIHNpemVfdCBlbnRyaWVzKSB7Ci0gIFVQQl9VTlVTRUQoZCk7Ci0KLSNpZmRlZiBV
UEJfVVNFX0pJVF9YNjQKLSAgaWYgKGQtPm1ldGhvZF8tPmlzX25hdGl2ZV8pIHsKLSAgICAvKiBF
YWNoIG5hdGl2ZSBzdGFjayBmcmFtZSBuZWVkcyB0d28gcG9pbnRlcnMsIHBsdXMgd2UgbmVlZCBh
IGZldyBmcmFtZXMgZm9yCi0gICAgICogdGhlIGVudGVyL2V4aXQgdHJhbXBvbGluZXMuICovCi0g
ICAgc2l6ZV90IHJldCA9IGVudHJpZXMgKiBzaXplb2Yodm9pZCopICogMjsKLSAgICByZXQgKz0g
c2l6ZW9mKHZvaWQqKSAqIDEwOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLSNlbmRpZgotCi0gIHJl
dHVybiBlbnRyaWVzICogc2l6ZW9mKHVpbnQzMl90Kik7Ci19Ci0KLQotc3RhdGljIGJvb2wgaW5f
cmVzaWR1YWxfYnVmKGNvbnN0IHVwYl9wYmRlY29kZXIgKmQsIGNvbnN0IGNoYXIgKnApOwotCi0v
KiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgd2UgaGF2ZSB0byBtaWNyby1tYW5hZ2UgdGhlIGNvbXBp
bGVyIHdpdGgKLSAqIFVQQl9GT1JDRUlOTElORSBhbmQgVVBCX05PSU5MSU5FLCBlc3BlY2lhbGx5
IHNpbmNlIHRoaXMgdHVuaW5nIGlzIG5lY2Vzc2FyaWx5Ci0gKiBzcGVjaWZpYyB0byBvbmUgaGFy
ZHdhcmUgY29uZmlndXJhdGlvbi4gIEJ1dCBlbXBpcmljYWxseSBvbiBhIENvcmUgaTcsCi0gKiBw
ZXJmb3JtYW5jZSBpbmNyZWFzZXMgMzAtNTAlIHdpdGggdGhlc2UgYW5ub3RhdGlvbnMuICBFdmVy
eSBpbnN0YW5jZSB3aGVyZQotICogdGhlc2UgYXBwZWFyLCBnY2MgNC4yLjEgbWFkZSB0aGUgd3Jv
bmcgZGVjaXNpb24gYW5kIGRlZ3JhZGVkIHBlcmZvcm1hbmNlIGluCi0gKiBiZW5jaG1hcmtzLiAq
LwotCi1zdGF0aWMgdm9pZCBzZXRlcnIodXBiX3BiZGVjb2RlciAqZCwgY29uc3QgY2hhciAqbXNn
KSB7Ci0gIHVwYl9zdGF0dXMgc3RhdHVzID0gVVBCX1NUQVRVU19JTklUOwotICB1cGJfc3RhdHVz
X3NldGVycm1zZygmc3RhdHVzLCBtc2cpOwotICB1cGJfZW52X3JlcG9ydGVycm9yKGQtPmVudiwg
JnN0YXR1cyk7Ci19Ci0KLXZvaWQgdXBiX3BiZGVjb2Rlcl9zZXRlcnIodXBiX3BiZGVjb2RlciAq
ZCwgY29uc3QgY2hhciAqbXNnKSB7Ci0gIHNldGVycihkLCBtc2cpOwotfQotCi0KLS8qIEJ1ZmZl
cmluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCi0KLS8qIFdlIG9wZXJhdGUgb24gb25lIGJ1ZmZlciBhdCBhIHRpbWUs
IHdoaWNoIGlzIGVpdGhlciB0aGUgdXNlcidzIGJ1ZmZlciBwYXNzZWQKLSAqIHRvIG91ciAiZGVj
b2RlIiBjYWxsYmFjayBvciBzb21lIHJlc2lkdWFsIGJ5dGVzIGZyb20gdGhlIHByZXZpb3VzIGJ1
ZmZlci4gKi8KLQotLyogSG93IG1hbnkgYnl0ZXMgY2FuIGJlIHNhZmVseSByZWFkIGZyb20gZC0+
cHRyIHdpdGhvdXQgcmVhZGluZyBwYXN0IGVuZC1vZi1idWYKLSAqIG9yIHBhc3QgdGhlIGN1cnJl
bnQgZGVsaW1pdGVkIGVuZC4gKi8KLXN0YXRpYyBzaXplX3QgY3VyYnVmbGVmdChjb25zdCB1cGJf
cGJkZWNvZGVyICpkKSB7Ci0gIGFzc2VydChkLT5kYXRhX2VuZCA+PSBkLT5wdHIpOwotICByZXR1
cm4gZC0+ZGF0YV9lbmQgLSBkLT5wdHI7Ci19Ci0KLS8qIEhvdyBtYW55IGJ5dGVzIGFyZSBhdmFp
bGFibGUgYmVmb3JlIGVuZC1vZi1idWZmZXIuICovCi1zdGF0aWMgc2l6ZV90IGJ1ZmxlZnQoY29u
c3QgdXBiX3BiZGVjb2RlciAqZCkgewotICByZXR1cm4gZC0+ZW5kIC0gZC0+cHRyOwotfQotCi0v
KiBPdmVyYWxsIHN0cmVhbSBvZmZzZXQgb2YgZC0+cHRyLiAqLwotdWludDY0X3Qgb2Zmc2V0KGNv
bnN0IHVwYl9wYmRlY29kZXIgKmQpIHsKLSAgcmV0dXJuIGQtPmJ1ZnN0YXJ0X29mcyArIChkLT5w
dHIgLSBkLT5idWYpOwotfQotCi0vKiBIb3cgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9y
ZSB0aGUgZW5kIG9mIHRoaXMgZGVsaW1pdGVkIHJlZ2lvbi4gKi8KLXNpemVfdCBkZWxpbV9yZW1h
aW5pbmcoY29uc3QgdXBiX3BiZGVjb2RlciAqZCkgewotICByZXR1cm4gZC0+dG9wLT5lbmRfb2Zz
IC0gb2Zmc2V0KGQpOwotfQotCi0vKiBBZHZhbmNlcyBkLT5wdHIuICovCi1zdGF0aWMgdm9pZCBh
ZHZhbmNlKHVwYl9wYmRlY29kZXIgKmQsIHNpemVfdCBsZW4pIHsKLSAgYXNzZXJ0KGN1cmJ1Zmxl
ZnQoZCkgPj0gbGVuKTsKLSAgZC0+cHRyICs9IGxlbjsKLX0KLQotc3RhdGljIGJvb2wgaW5fYnVm
KGNvbnN0IGNoYXIgKnAsIGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZW5kKSB7Ci0gIHJl
dHVybiBwID49IGJ1ZiAmJiBwIDw9IGVuZDsKLX0KLQotc3RhdGljIGJvb2wgaW5fcmVzaWR1YWxf
YnVmKGNvbnN0IHVwYl9wYmRlY29kZXIgKmQsIGNvbnN0IGNoYXIgKnApIHsKLSAgcmV0dXJuIGlu
X2J1ZihwLCBkLT5yZXNpZHVhbCwgZC0+cmVzaWR1YWxfZW5kKTsKLX0KLQotLyogQ2FsY3VsYXRl
cyB0aGUgZGVsaW1fZW5kIHZhbHVlLCB3aGljaCBpcyBhZmZlY3RlZCBieSBib3RoIHRoZSBjdXJy
ZW50IGJ1ZmZlcgotICogYW5kIHRoZSBwYXJzaW5nIHN0YWNrLCBzbyBtdXN0IGJlIGNhbGxlZCB3
aGVuZXZlciBlaXRoZXIgaXMgdXBkYXRlZC4gKi8KLXN0YXRpYyB2b2lkIHNldF9kZWxpbV9lbmQo
dXBiX3BiZGVjb2RlciAqZCkgewotICBzaXplX3QgZGVsaW1fb2ZzID0gZC0+dG9wLT5lbmRfb2Zz
IC0gZC0+YnVmc3RhcnRfb2ZzOwotICBpZiAoZGVsaW1fb2ZzIDw9IChzaXplX3QpKGQtPmVuZCAt
IGQtPmJ1ZikpIHsKLSAgICBkLT5kZWxpbV9lbmQgPSBkLT5idWYgKyBkZWxpbV9vZnM7Ci0gICAg
ZC0+ZGF0YV9lbmQgPSBkLT5kZWxpbV9lbmQ7Ci0gIH0gZWxzZSB7Ci0gICAgZC0+ZGF0YV9lbmQg
PSBkLT5lbmQ7Ci0gICAgZC0+ZGVsaW1fZW5kID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9p
ZCBzd2l0Y2h0b2J1Zih1cGJfcGJkZWNvZGVyICpkLCBjb25zdCBjaGFyICpidWYsIGNvbnN0IGNo
YXIgKmVuZCkgewotICBkLT5wdHIgPSBidWY7Ci0gIGQtPmJ1ZiA9IGJ1ZjsKLSAgZC0+ZW5kID0g
ZW5kOwotICBzZXRfZGVsaW1fZW5kKGQpOwotfQotCi1zdGF0aWMgdm9pZCBhZHZhbmNldG9idWYo
dXBiX3BiZGVjb2RlciAqZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKSB7Ci0gIGFzc2Vy
dChjdXJidWZsZWZ0KGQpID09IDApOwotICBkLT5idWZzdGFydF9vZnMgKz0gKGQtPmVuZCAtIGQt
PmJ1Zik7Ci0gIHN3aXRjaHRvYnVmKGQsIGJ1ZiwgYnVmICsgbGVuKTsKLX0KLQotc3RhdGljIHZv
aWQgY2hlY2twb2ludCh1cGJfcGJkZWNvZGVyICpkKSB7Ci0gIC8qIFRoZSBhc3NlcnRpb24gaGVy
ZSBpcyBpbiB0aGUgaW50ZXJlc3RzIG9mIGVmZmljaWVuY3ksIG5vdCBjb3JyZWN0bmVzcy4KLSAg
ICogV2UgYXJlIHRyeWluZyB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBjaGVja3BvaW50KCkgbW9y
ZSBvZnRlbiB0aGFuCi0gICAqIG5lY2Vzc2FyeS4gKi8KLSAgYXNzZXJ0KGQtPmNoZWNrcG9pbnQg
IT0gZC0+cHRyKTsKLSAgZC0+Y2hlY2twb2ludCA9IGQtPnB0cjsKLX0KLQotLyogU2tpcHMgImJ5
dGVzIiBieXRlcyBpbiB0aGUgc3RyZWFtLCB3aGljaCBtYXkgYmUgbW9yZSB0aGFuIGF2YWlsYWJs
ZS4gIElmIHdlCi0gKiBza2lwIG1vcmUgYnl0ZXMgdGhhbiBhcmUgYXZhaWxhYmxlLCB3ZSByZXR1
cm4gYSBsb25nIHJlYWQgY291bnQgdG8gdGhlIGNhbGxlcgotICogaW5kaWNhdGluZyBob3cgbWFu
eSBieXRlcyBjYW4gYmUgc2tpcHBlZCBvdmVyIGJlZm9yZSBwYXNzaW5nIGFjdHVhbCBkYXRhCi0g
KiBhZ2Fpbi4gIFNraXBwZWQgYnl0ZXMgY2FuIHBhc3MgYSBOVUxMIGJ1ZmZlciBhbmQgdGhlIGRl
Y29kZXIgZ3VhcmFudGVlcyB0aGV5Ci0gKiB3b24ndCBhY3R1YWxseSBiZSByZWFkLgotICovCi1z
dGF0aWMgaW50MzJfdCBza2lwKHVwYl9wYmRlY29kZXIgKmQsIHNpemVfdCBieXRlcykgewotICBh
c3NlcnQoIWluX3Jlc2lkdWFsX2J1ZihkLCBkLT5wdHIpIHx8IGQtPnNpemVfcGFyYW0gPT0gMCk7
Ci0gIGFzc2VydChkLT5za2lwID09IDApOwotICBpZiAoYnl0ZXMgPiBkZWxpbV9yZW1haW5pbmco
ZCkpIHsKLSAgICBzZXRlcnIoZCwgIlNraXBwZWQgdmFsdWUgZXh0ZW5kZWQgYmV5b25kIGVuY2xv
c2luZyBzdWJtZXNzYWdlLiIpOwotICAgIHJldHVybiB1cGJfcGJkZWNvZGVyX3N1c3BlbmQoZCk7
Ci0gIH0gZWxzZSBpZiAoYnVmbGVmdChkKSA+PSBieXRlcykgewotICAgIC8qIFNraXBwZWQgZGF0
YSBpcyBhbGwgaW4gY3VycmVudCBidWZmZXIsIGFuZCBtb3JlIGlzIHN0aWxsIGF2YWlsYWJsZS4g
Ki8KLSAgICBhZHZhbmNlKGQsIGJ5dGVzKTsKLSAgICBkLT5za2lwID0gMDsKLSAgICByZXR1cm4g
REVDT0RFX09LOwotICB9IGVsc2UgewotICAgIC8qIFNraXBwZWQgZGF0YSBleHRlbmRzIGJleW9u
ZCBjdXJyZW50bHkgYXZhaWxhYmxlIGJ1ZmZlcnMuICovCi0gICAgZC0+cGMgPSBkLT5sYXN0Owot
ICAgIGQtPnNraXAgPSBieXRlcyAtIGN1cmJ1ZmxlZnQoZCk7Ci0gICAgZC0+YnVmc3RhcnRfb2Zz
ICs9IChkLT5lbmQgLSBkLT5idWYpOwotICAgIGQtPnJlc2lkdWFsX2VuZCA9IGQtPnJlc2lkdWFs
OwotICAgIHN3aXRjaHRvYnVmKGQsIGQtPnJlc2lkdWFsLCBkLT5yZXNpZHVhbF9lbmQpOwotICAg
IHJldHVybiBkLT5zaXplX3BhcmFtICsgZC0+c2tpcDsKLSAgfQotfQotCi0KLS8qIFJlc3VtZXMg
dGhlIGRlY29kZXIgZnJvbSBhbiBpbml0aWFsIHN0YXRlIG9yIGZyb20gYSBwcmV2aW91cyBzdXNw
ZW5kLiAqLwotaW50MzJfdCB1cGJfcGJkZWNvZGVyX3Jlc3VtZSh1cGJfcGJkZWNvZGVyICpkLCB2
b2lkICpwLCBjb25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBzaXplLCBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgVVBCX1VOVVNFRChw
KTsgIC8qIFVzZWxlc3M7IGp1c3QgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBKSVQuICovCi0KLSAg
LyogZC0+c2tpcCBhbmQgZC0+cmVzaWR1YWxfZW5kIGNvdWxkIHByb2JhYmx5IGVsZWdhbnRseSBi
ZSByZXByZXNlbnRlZAotICAgKiBhcyBhIHNpbmdsZSB2YXJpYWJsZSwgdG8gbW9yZSBlYXNpbHkg
cmVwcmVzZW50IHRoaXMgaW52YXJpYW50LiAqLwotICBhc3NlcnQoIShkLT5za2lwICYmIGQtPnJl
c2lkdWFsX2VuZCA+IGQtPnJlc2lkdWFsKSk7Ci0KLSAgLyogV2UgbmVlZCB0byByZW1lbWJlciB0
aGUgb3JpZ2luYWwgc2l6ZV9wYXJhbSwgc28gdGhhdCB0aGUgdmFsdWUgd2UgcmV0dXJuCi0gICAq
IGlzIHJlbGF0aXZlIHRvIGl0LCBldmVuIGlmIHdlIGRvIHNvbWUgc2tpcHBpbmcgZmlyc3QuICov
Ci0gIGQtPnNpemVfcGFyYW0gPSBzaXplOwotICBkLT5oYW5kbGUgPSBoYW5kbGU7Ci0KLSAgLyog
SGF2ZSB0byBoYW5kbGUgdGhpcyBjYXNlIHNwZWNpYWxseSAoaWUuIG5vdCB3aXRoIHNraXAoKSkg
YmVjYXVzZSB0aGUgdXNlcgotICAgKiBpcyBhbGxvd2VkIHRvIHBhc3MgYSBOVUxMIGJ1ZmZlciBo
ZXJlLCB3aGljaCB3b24ndCBhbGxvdyB1cyB0byBzYWZlbHkKLSAgICogY2FsY3VsYXRlIGEgZC0+
ZW5kIG9yIHVzZSBvdXIgbm9ybWFsIGZ1bmN0aW9ucyBsaWtlIGN1cmJ1ZmxlZnQoKS4gKi8KLSAg
aWYgKGQtPnNraXAgJiYgZC0+c2tpcCA+PSBzaXplKSB7Ci0gICAgZC0+c2tpcCAtPSBzaXplOwot
ICAgIGQtPmJ1ZnN0YXJ0X29mcyArPSBzaXplOwotICAgIGJ1ZiA9ICZkdW1teV9jaGFyOwotICAg
IHNpemUgPSAwOwotCi0gICAgLyogV2UgY2FuJ3QganVzdCByZXR1cm4gbm93LCBiZWNhdXNlIHdl
IG1pZ2h0IG5lZWQgdG8gZXhlY3V0ZSBzb21lIG9wcwotICAgICAqIGxpa2UgQ0hFQ0tERUxJTSwg
d2hpY2ggY291bGQgY2FsbCBzb21lIGNhbGxiYWNrcyBhbmQgcG9wIHRoZSBzdGFjay4gKi8KLSAg
fQotCi0gIC8qIFdlIG5lZWQgdG8gcHJldGVuZCB0aGF0IHRoaXMgd2FzIHRoZSBhY3R1YWwgYnVm
ZmVyIHBhcmFtLCBzaW5jZSBzb21lIG9mIHRoZQotICAgKiBjYWxjdWxhdGlvbnMgYXNzdW1lIHRo
YXQgZC0+cHRyL2QtPmJ1ZiBpcyByZWxhdGl2ZSB0byB0aGlzLiAqLwotICBkLT5idWZfcGFyYW0g
PSBidWY7Ci0KLSAgaWYgKCFidWYpIHsKLSAgICAvKiBOVUxMIGJ1ZiBpcyBvayBpZiBpdHMgZW50
aXJlIHNwYW4gaXMgY292ZXJlZCBieSB0aGUgInNraXAiIGFib3ZlLCBidXQKLSAgICAgKiBieSB0
aGlzIHBvaW50IHdlIGtub3cgdGhhdCAic2tpcCIgZG9lc24ndCBjb3ZlciB0aGUgYnVmZmVyLiAq
LwotICAgIHNldGVycihkLCAiUGFzc2VkIE5VTEwgYnVmZmVyIG92ZXIgbm9uLXNraXBwYWJsZSBy
ZWdpb24uIik7Ci0gICAgcmV0dXJuIHVwYl9wYmRlY29kZXJfc3VzcGVuZChkKTsKLSAgfQotCi0g
IGlmIChkLT5yZXNpZHVhbF9lbmQgPiBkLT5yZXNpZHVhbCkgewotICAgIC8qIFdlIGhhdmUgcmVz
aWR1YWwgYnl0ZXMgZnJvbSB0aGUgbGFzdCBidWZmZXIuICovCi0gICAgYXNzZXJ0KGQtPnB0ciA9
PSBkLT5yZXNpZHVhbCk7Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNodG9idWYoZCwgYnVmLCBidWYg
KyBzaXplKTsKLSAgfQotCi0gIGQtPmNoZWNrcG9pbnQgPSBkLT5wdHI7Ci0KLSAgLyogSGFuZGxl
IHNraXBzIHRoYXQgZG9uJ3QgY292ZXIgdGhlIHdob2xlIGJ1ZmZlciAoYXMgYWJvdmUpLiAqLwot
ICBpZiAoZC0+c2tpcCkgewotICAgIHNpemVfdCBza2lwX2J5dGVzID0gZC0+c2tpcDsKLSAgICBk
LT5za2lwID0gMDsKLSAgICBDSEVDS19SRVRVUk4oc2tpcChkLCBza2lwX2J5dGVzKSk7Ci0gICAg
Y2hlY2twb2ludChkKTsKLSAgfQotCi0gIC8qIElmIHdlJ3JlIGluc2lkZSBhbiB1bmtub3duIGdy
b3VwLCBjb250aW51ZSB0byBwYXJzZSB1bmtub3duIHZhbHVlcy4gKi8KLSAgaWYgKGQtPnRvcC0+
Z3JvdXBudW0gPCAwKSB7Ci0gICAgQ0hFQ0tfUkVUVVJOKHVwYl9wYmRlY29kZXJfc2tpcHVua25v
d24oZCwgLTEsIDApKTsKLSAgICBjaGVja3BvaW50KGQpOwotICB9Ci0KLSAgcmV0dXJuIERFQ09E
RV9PSzsKLX0KLQotLyogU3VzcGVuZHMgdGhlIGRlY29kZXIgYXQgdGhlIGxhc3QgY2hlY2twb2lu
dCwgd2l0aG91dCBzYXZpbmcgYW55IHJlc2lkdWFsCi0gKiBieXRlcy4gIElmIHRoZXJlIGFyZSBh
bnkgdW5jb25zdW1lZCBieXRlcywgcmV0dXJucyBhIHNob3J0IGJ5dGUgY291bnQuICovCi1zaXpl
X3QgdXBiX3BiZGVjb2Rlcl9zdXNwZW5kKHVwYl9wYmRlY29kZXIgKmQpIHsKLSAgZC0+cGMgPSBk
LT5sYXN0OwotICBpZiAoZC0+Y2hlY2twb2ludCA9PSBkLT5yZXNpZHVhbCkgewotICAgIC8qIENo
ZWNrcG9pbnQgd2FzIGluIHJlc2lkdWFsIGJ1Zjsgbm8gdXNlciBieXRlcyB3ZXJlIGNvbnN1bWVk
LiAqLwotICAgIGQtPnB0ciA9IGQtPnJlc2lkdWFsOwotICAgIHJldHVybiAwOwotICB9IGVsc2Ug
ewotICAgIHNpemVfdCByZXQgPSBkLT5zaXplX3BhcmFtIC0gKGQtPmVuZCAtIGQtPmNoZWNrcG9p
bnQpOwotICAgIGFzc2VydCghaW5fcmVzaWR1YWxfYnVmKGQsIGQtPmNoZWNrcG9pbnQpKTsKLSAg
ICBhc3NlcnQoZC0+YnVmID09IGQtPmJ1Zl9wYXJhbSB8fCBkLT5idWYgPT0gJmR1bW15X2NoYXIp
OwotCi0gICAgZC0+YnVmc3RhcnRfb2ZzICs9IChkLT5jaGVja3BvaW50IC0gZC0+YnVmKTsKLSAg
ICBkLT5yZXNpZHVhbF9lbmQgPSBkLT5yZXNpZHVhbDsKLSAgICBzd2l0Y2h0b2J1ZihkLCBkLT5y
ZXNpZHVhbCwgZC0+cmVzaWR1YWxfZW5kKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLS8q
IFN1c3BlbmRzIHRoZSBkZWNvZGVyIGF0IHRoZSBsYXN0IGNoZWNrcG9pbnQsIGFuZCBzYXZlcyBh
bnkgdW5jb25zdW1lZAotICogYnl0ZXMgaW4gb3VyIHJlc2lkdWFsIGJ1ZmZlci4gIFRoaXMgaXMg
bmVjZXNzYXJ5IGlmIHdlIG5lZWQgbW9yZSB1c2VyCi0gKiBieXRlcyB0byBmb3JtIGEgY29tcGxl
dGUgdmFsdWUsIHdoaWNoIG1pZ2h0IG5vdCBiZSBjb250aWd1b3VzIGluIHRoZQotICogdXNlcidz
IGJ1ZmZlcnMuICBBbHdheXMgY29uc3VtZXMgYWxsIHVzZXIgYnl0ZXMuICovCi1zdGF0aWMgc2l6
ZV90IHN1c3BlbmRfc2F2ZSh1cGJfcGJkZWNvZGVyICpkKSB7Ci0gIC8qIFdlIGhpdCBlbmQtb2Yt
YnVmZmVyIGJlZm9yZSB3ZSBjb3VsZCBwYXJzZSBhIGZ1bGwgdmFsdWUuCi0gICAqIFNhdmUgYW55
IHVuY29uc3VtZWQgYnl0ZXMgKGlmIGFueSkgdG8gdGhlIHJlc2lkdWFsIGJ1ZmZlci4gKi8KLSAg
ZC0+cGMgPSBkLT5sYXN0OwotCi0gIGlmIChkLT5jaGVja3BvaW50ID09IGQtPnJlc2lkdWFsKSB7
Ci0gICAgLyogQ2hlY2twb2ludCB3YXMgaW4gcmVzaWR1YWwgYnVmOyBhcHBlbmQgdXNlciBieXRl
KHMpIHRvIHJlc2lkdWFsIGJ1Zi4gKi8KLSAgICBhc3NlcnQoKGQtPnJlc2lkdWFsX2VuZCAtIGQt
PnJlc2lkdWFsKSArIGQtPnNpemVfcGFyYW0gPD0KLSAgICAgICAgICAgc2l6ZW9mKGQtPnJlc2lk
dWFsKSk7Ci0gICAgaWYgKCFpbl9yZXNpZHVhbF9idWYoZCwgZC0+cHRyKSkgewotICAgICAgZC0+
YnVmc3RhcnRfb2ZzIC09IChkLT5yZXNpZHVhbF9lbmQgLSBkLT5yZXNpZHVhbCk7Ci0gICAgfQot
ICAgIG1lbWNweShkLT5yZXNpZHVhbF9lbmQsIGQtPmJ1Zl9wYXJhbSwgZC0+c2l6ZV9wYXJhbSk7
Ci0gICAgZC0+cmVzaWR1YWxfZW5kICs9IGQtPnNpemVfcGFyYW07Ci0gIH0gZWxzZSB7Ci0gICAg
LyogQ2hlY2twb2ludCB3YXMgaW4gdXNlciBidWY7IG9sZCByZXNpZHVhbCBieXRlcyBub3QgbmVl
ZGVkLiAqLwotICAgIHNpemVfdCBzYXZlOwotICAgIGFzc2VydCghaW5fcmVzaWR1YWxfYnVmKGQs
IGQtPmNoZWNrcG9pbnQpKTsKLQotICAgIGQtPnB0ciA9IGQtPmNoZWNrcG9pbnQ7Ci0gICAgc2F2
ZSA9IGN1cmJ1ZmxlZnQoZCk7Ci0gICAgYXNzZXJ0KHNhdmUgPD0gc2l6ZW9mKGQtPnJlc2lkdWFs
KSk7Ci0gICAgbWVtY3B5KGQtPnJlc2lkdWFsLCBkLT5wdHIsIHNhdmUpOwotICAgIGQtPnJlc2lk
dWFsX2VuZCA9IGQtPnJlc2lkdWFsICsgc2F2ZTsKLSAgICBkLT5idWZzdGFydF9vZnMgPSBvZmZz
ZXQoZCk7Ci0gIH0KLQotICBzd2l0Y2h0b2J1ZihkLCBkLT5yZXNpZHVhbCwgZC0+cmVzaWR1YWxf
ZW5kKTsKLSAgcmV0dXJuIGQtPnNpemVfcGFyYW07Ci19Ci0KLS8qIENvcGllcyB0aGUgbmV4dCAi
Ynl0ZXMiIGJ5dGVzIGludG8gImJ1ZiIgYW5kIGFkdmFuY2VzIHRoZSBzdHJlYW0uCi0gKiBSZXF1
aXJlcyB0aGF0IHRoaXMgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGJ1
ZmZlci4gKi8KLVVQQl9GT1JDRUlOTElORSBzdGF0aWMgdm9pZCBjb25zdW1lYnl0ZXModXBiX3Bi
ZGVjb2RlciAqZCwgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgYnl0ZXMpIHsKLSAgYXNzZXJ0KGJ5dGVzIDw9IGN1cmJ1ZmxlZnQoZCkp
OwotICBtZW1jcHkoYnVmLCBkLT5wdHIsIGJ5dGVzKTsKLSAgYWR2YW5jZShkLCBieXRlcyk7Ci19
Ci0KLS8qIFNsb3cgcGF0aCBmb3IgZ2V0dGluZyB0aGUgbmV4dCAiYnl0ZXMiIGJ5dGVzLCByZWdh
cmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcmUKLSAqIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBi
dWZmZXIgb3Igbm90LiAgUmV0dXJucyBhIHN0YXR1cyBjb2RlIGFzIGRlc2NyaWJlZAotICogaW4g
ZGVjb2Rlci5pbnQuaC4gKi8KLVVQQl9OT0lOTElORSBzdGF0aWMgaW50MzJfdCBnZXRieXRlc19z
bG93KHVwYl9wYmRlY29kZXIgKmQsIHZvaWQgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBieXRlcykgewotICBjb25zdCBzaXplX3QgYXZhaWwg
PSBjdXJidWZsZWZ0KGQpOwotICBjb25zdW1lYnl0ZXMoZCwgYnVmLCBhdmFpbCk7Ci0gIGJ5dGVz
IC09IGF2YWlsOwotICBhc3NlcnQoYnl0ZXMgPiAwKTsKLSAgaWYgKGluX3Jlc2lkdWFsX2J1Zihk
LCBkLT5wdHIpKSB7Ci0gICAgYWR2YW5jZXRvYnVmKGQsIGQtPmJ1Zl9wYXJhbSwgZC0+c2l6ZV9w
YXJhbSk7Ci0gIH0KLSAgaWYgKGN1cmJ1ZmxlZnQoZCkgPj0gYnl0ZXMpIHsKLSAgICBjb25zdW1l
Ynl0ZXMoZCwgKGNoYXIgKilidWYgKyBhdmFpbCwgYnl0ZXMpOwotICAgIHJldHVybiBERUNPREVf
T0s7Ci0gIH0gZWxzZSBpZiAoZC0+ZGF0YV9lbmQgPT0gZC0+ZGVsaW1fZW5kKSB7Ci0gICAgc2V0
ZXJyKGQsICJTdWJtZXNzYWdlIGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgYSB2YWx1ZSBvciBncm91
cCIpOwotICAgIHJldHVybiB1cGJfcGJkZWNvZGVyX3N1c3BlbmQoZCk7Ci0gIH0gZWxzZSB7Ci0g
ICAgcmV0dXJuIHN1c3BlbmRfc2F2ZShkKTsKLSAgfQotfQotCi0vKiBHZXRzIHRoZSBuZXh0ICJi
eXRlcyIgYnl0ZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGFyZSBhdmFpbGFibGUgaW4g
dGhlCi0gKiBjdXJyZW50IGJ1ZmZlciBvciBub3QuICBSZXR1cm5zIGEgc3RhdHVzIGNvZGUgYXMg
ZGVzY3JpYmVkIGluIGRlY29kZXIuaW50LmguCi0gKi8KLVVQQl9GT1JDRUlOTElORSBzdGF0aWMg
aW50MzJfdCBnZXRieXRlcyh1cGJfcGJkZWNvZGVyICpkLCB2b2lkICpidWYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ5dGVzKSB7Ci0gIGlmIChjdXJi
dWZsZWZ0KGQpID49IGJ5dGVzKSB7Ci0gICAgLyogQnVmZmVyIGhhcyBlbm91Z2ggZGF0YSB0byBz
YXRpc2Z5LiAqLwotICAgIGNvbnN1bWVieXRlcyhkLCBidWYsIGJ5dGVzKTsKLSAgICByZXR1cm4g
REVDT0RFX09LOwotICB9IGVsc2UgewotICAgIHJldHVybiBnZXRieXRlc19zbG93KGQsIGJ1Ziwg
Ynl0ZXMpOwotICB9Ci19Ci0KLVVQQl9OT0lOTElORSBzdGF0aWMgc2l6ZV90IHBlZWtieXRlc19z
bG93KHVwYl9wYmRlY29kZXIgKmQsIHZvaWQgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBieXRlcykgewotICBzaXplX3QgcmV0ID0gY3VyYnVm
bGVmdChkKTsKLSAgbWVtY3B5KGJ1ZiwgZC0+cHRyLCByZXQpOwotICBpZiAoaW5fcmVzaWR1YWxf
YnVmKGQsIGQtPnB0cikpIHsKLSAgICBzaXplX3QgY29weSA9IFVQQl9NSU4oYnl0ZXMgLSByZXQs
IGQtPnNpemVfcGFyYW0pOwotICAgIG1lbWNweSgoY2hhciAqKWJ1ZiArIHJldCwgZC0+YnVmX3Bh
cmFtLCBjb3B5KTsKLSAgICByZXQgKz0gY29weTsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1V
UEJfRk9SQ0VJTkxJTkUgc3RhdGljIHNpemVfdCBwZWVrYnl0ZXModXBiX3BiZGVjb2RlciAqZCwg
dm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBieXRlcykgewotICBpZiAoY3VyYnVmbGVmdChkKSA+PSBieXRlcykgewotICAgIG1lbWNweShi
dWYsIGQtPnB0ciwgYnl0ZXMpOwotICAgIHJldHVybiBieXRlczsKLSAgfSBlbHNlIHsKLSAgICBy
ZXR1cm4gcGVla2J5dGVzX3Nsb3coZCwgYnVmLCBieXRlcyk7Ci0gIH0KLX0KLQotCi0vKiBEZWNv
ZGluZyBvZiB3aXJlIHR5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi0vKiBTbG93IHBhdGggZm9yIGRlY29kaW5nIGEgdmFyaW50IGZy
b20gdGhlIGN1cnJlbnQgYnVmZmVyIHBvc2l0aW9uLgotICogUmV0dXJucyBhIHN0YXR1cyBjb2Rl
IGFzIGRlc2NyaWJlZCBpbiBkZWNvZGVyLmludC5oLiAqLwotVVBCX05PSU5MSU5FIGludDMyX3Qg
dXBiX3BiZGVjb2Rlcl9kZWNvZGVfdmFyaW50X3Nsb3codXBiX3BiZGVjb2RlciAqZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90
ICp1NjQpIHsKLSAgdWludDhfdCBieXRlID0gMHg4MDsKLSAgaW50IGJpdHBvczsKLSAgKnU2NCA9
IDA7Ci0gIGZvcihiaXRwb3MgPSAwOyBiaXRwb3MgPCA3MCAmJiAoYnl0ZSAmIDB4ODApOyBiaXRw
b3MgKz0gNykgewotICAgIENIRUNLX1JFVFVSTihnZXRieXRlcyhkLCAmYnl0ZSwgMSkpOwotICAg
ICp1NjQgfD0gKHVpbnQ2NF90KShieXRlICYgMHg3RikgPDwgYml0cG9zOwotICB9Ci0gIGlmKGJp
dHBvcyA9PSA3MCAmJiAoYnl0ZSAmIDB4ODApKSB7Ci0gICAgc2V0ZXJyKGQsIGtVbnRlcm1pbmF0
ZWRWYXJpbnQpOwotICAgIHJldHVybiB1cGJfcGJkZWNvZGVyX3N1c3BlbmQoZCk7Ci0gIH0KLSAg
cmV0dXJuIERFQ09ERV9PSzsKLX0KLQotLyogRGVjb2RlcyBhIHZhcmludCBmcm9tIHRoZSBjdXJy
ZW50IGJ1ZmZlciBwb3NpdGlvbi4KLSAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBhcyBkZXNjcmli
ZWQgaW4gZGVjb2Rlci5pbnQuaC4gKi8KLVVQQl9GT1JDRUlOTElORSBzdGF0aWMgaW50MzJfdCBk
ZWNvZGVfdmFyaW50KHVwYl9wYmRlY29kZXIgKmQsIHVpbnQ2NF90ICp1NjQpIHsKLSAgaWYgKGN1
cmJ1ZmxlZnQoZCkgPiAwICYmICEoKmQtPnB0ciAmIDB4ODApKSB7Ci0gICAgKnU2NCA9ICpkLT5w
dHI7Ci0gICAgYWR2YW5jZShkLCAxKTsKLSAgICByZXR1cm4gREVDT0RFX09LOwotICB9IGVsc2Ug
aWYgKGN1cmJ1ZmxlZnQoZCkgPj0gMTApIHsKLSAgICAvKiBGYXN0IGNhc2UuICovCi0gICAgdXBi
X2RlY29kZXJldCByID0gdXBiX3ZkZWNvZGVfZmFzdChkLT5wdHIpOwotICAgIGlmIChyLnAgPT0g
TlVMTCkgewotICAgICAgc2V0ZXJyKGQsIGtVbnRlcm1pbmF0ZWRWYXJpbnQpOwotICAgICAgcmV0
dXJuIHVwYl9wYmRlY29kZXJfc3VzcGVuZChkKTsKLSAgICB9Ci0gICAgYWR2YW5jZShkLCByLnAg
LSBkLT5wdHIpOwotICAgICp1NjQgPSByLnZhbDsKLSAgICByZXR1cm4gREVDT0RFX09LOwotICB9
IGVsc2UgewotICAgIC8qIFNsb3cgY2FzZSAtLSB2YXJpbnQgc3BhbnMgYnVmZmVyIHNlYW0uICov
Ci0gICAgcmV0dXJuIHVwYl9wYmRlY29kZXJfZGVjb2RlX3ZhcmludF9zbG93KGQsIHU2NCk7Ci0g
IH0KLX0KLQotLyogRGVjb2RlcyBhIDMyLWJpdCB2YXJpbnQgZnJvbSB0aGUgY3VycmVudCBidWZm
ZXIgcG9zaXRpb24uCi0gKiBSZXR1cm5zIGEgc3RhdHVzIGNvZGUgYXMgZGVzY3JpYmVkIGluIGRl
Y29kZXIuaW50LmguICovCi1VUEJfRk9SQ0VJTkxJTkUgc3RhdGljIGludDMyX3QgZGVjb2RlX3Yz
Mih1cGJfcGJkZWNvZGVyICpkLCB1aW50MzJfdCAqdTMyKSB7Ci0gIHVpbnQ2NF90IHU2NDsKLSAg
aW50MzJfdCByZXQgPSBkZWNvZGVfdmFyaW50KGQsICZ1NjQpOwotICBpZiAocmV0ID49IDApIHJl
dHVybiByZXQ7Ci0gIGlmICh1NjQgPiBVSU5UMzJfTUFYKSB7Ci0gICAgc2V0ZXJyKGQsICJVbnRl
cm1pbmF0ZWQgMzItYml0IHZhcmludCIpOwotICAgIC8qIFRPRE8oaGFiZXJtYW4pIGd1YXJhbnRl
ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJuIGlzID49IDAgc29tZWhvdywKLSAgICAgKiBzbyB3
ZSBrbm93IHRoaXMgcGF0aCB3aWxsIGFsd2F5cyBiZSB0cmVhdGVkIGFzIGVycm9yIGJ5IG91ciBj
YWxsZXIuCi0gICAgICogUmlnaHQgbm93IHRoZSBzaXplX3QgLT4gaW50MzJfdCBjYW4gb3ZlcmZs
b3cgYW5kIHByb2R1Y2UgbmVnYXRpdmUgdmFsdWVzLgotICAgICAqLwotICAgICp1MzIgPSAwOwot
ICAgIHJldHVybiB1cGJfcGJkZWNvZGVyX3N1c3BlbmQoZCk7Ci0gIH0KLSAgKnUzMiA9IHU2NDsK
LSAgcmV0dXJuIERFQ09ERV9PSzsKLX0KLQotLyogRGVjb2RlcyBhIGZpeGVkMzIgZnJvbSB0aGUg
Y3VycmVudCBidWZmZXIgcG9zaXRpb24uCi0gKiBSZXR1cm5zIGEgc3RhdHVzIGNvZGUgYXMgZGVz
Y3JpYmVkIGluIGRlY29kZXIuaW50LmguCi0gKiBUT0RPOiBwcm9wZXIgYnl0ZSBzd2FwcGluZyBm
b3IgYmlnLWVuZGlhbiBtYWNoaW5lcy4gKi8KLVVQQl9GT1JDRUlOTElORSBzdGF0aWMgaW50MzJf
dCBkZWNvZGVfZml4ZWQzMih1cGJfcGJkZWNvZGVyICpkLCB1aW50MzJfdCAqdTMyKSB7Ci0gIHJl
dHVybiBnZXRieXRlcyhkLCB1MzIsIDQpOwotfQotCi0vKiBEZWNvZGVzIGEgZml4ZWQ2NCBmcm9t
IHRoZSBjdXJyZW50IGJ1ZmZlciBwb3NpdGlvbi4KLSAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBh
cyBkZXNjcmliZWQgaW4gZGVjb2Rlci5pbnQuaC4KLSAqIFRPRE86IHByb3BlciBieXRlIHN3YXBw
aW5nIGZvciBiaWctZW5kaWFuIG1hY2hpbmVzLiAqLwotVVBCX0ZPUkNFSU5MSU5FIHN0YXRpYyBp
bnQzMl90IGRlY29kZV9maXhlZDY0KHVwYl9wYmRlY29kZXIgKmQsIHVpbnQ2NF90ICp1NjQpIHsK
LSAgcmV0dXJuIGdldGJ5dGVzKGQsIHU2NCwgOCk7Ci19Ci0KLS8qIE5vbi1zdGF0aWMgdmVyc2lv
bnMgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucy4KLSAqIFRoZXNlIGFyZSBjYWxsZWQgYnkgdGhlIEpJ
VCBmb3IgZmFsbGJhY2sgcGF0aHMuICovCi1pbnQzMl90IHVwYl9wYmRlY29kZXJfZGVjb2RlX2Yz
Mih1cGJfcGJkZWNvZGVyICpkLCB1aW50MzJfdCAqdTMyKSB7Ci0gIHJldHVybiBkZWNvZGVfZml4
ZWQzMihkLCB1MzIpOwotfQotCi1pbnQzMl90IHVwYl9wYmRlY29kZXJfZGVjb2RlX2Y2NCh1cGJf
cGJkZWNvZGVyICpkLCB1aW50NjRfdCAqdTY0KSB7Ci0gIHJldHVybiBkZWNvZGVfZml4ZWQ2NChk
LCB1NjQpOwotfQotCi1zdGF0aWMgZG91YmxlIGFzX2RvdWJsZSh1aW50NjRfdCBuKSB7IGRvdWJs
ZSBkOyBtZW1jcHkoJmQsICZuLCA4KTsgcmV0dXJuIGQ7IH0KLXN0YXRpYyBmbG9hdCAgYXNfZmxv
YXQodWludDMyX3QgbikgIHsgZmxvYXQgIGY7IG1lbWNweSgmZiwgJm4sIDQpOyByZXR1cm4gZjsg
fQotCi0vKiBQdXNoZXMgYSBmcmFtZSBvbnRvIHRoZSBkZWNvZGVyIHN0YWNrLiAqLwotc3RhdGlj
IGJvb2wgZGVjb2Rlcl9wdXNoKHVwYl9wYmRlY29kZXIgKmQsIHVpbnQ2NF90IGVuZCkgewotICB1
cGJfcGJkZWNvZGVyX2ZyYW1lICpmciA9IGQtPnRvcDsKLQotICBpZiAoZW5kID4gZnItPmVuZF9v
ZnMpIHsKLSAgICBzZXRlcnIoZCwga1BiRGVjb2RlclN1Ym1lc3NhZ2VUb29Mb25nKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0gZWxzZSBpZiAoZnIgPT0gZC0+bGltaXQpIHsKLSAgICBzZXRlcnIo
ZCwga1BiRGVjb2RlclN0YWNrT3ZlcmZsb3cpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0g
IGZyKys7Ci0gIGZyLT5lbmRfb2ZzID0gZW5kOwotICBmci0+ZGlzcGF0Y2ggPSBOVUxMOwotICBm
ci0+Z3JvdXBudW0gPSAwOwotICBkLT50b3AgPSBmcjsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyBib29sIHB1c2h0YWdkZWxpbSh1cGJfcGJkZWNvZGVyICpkLCB1aW50MzJfdCBhcmcpIHsK
LSAgLyogV2hpbGUgd2UgZXhwZWN0IHRvIHNlZSBhbiAiZW5kIiB0YWcgKGVpdGhlciBFTkRHUk9V
UCBvciBhIG5vbi1zZXF1ZW5jZQotICAgKiBmaWVsZCBudW1iZXIpIHByaW9yIHRvIGhpdHRpbmcg
YW55IGVuY2xvc2luZyBzdWJtZXNzYWdlIGVuZCwgcHVzaGluZyBvdXIKLSAgICogZXhpc3Rpbmcg
ZGVsaW0gZW5kIHByZXZlbnRzIHVzIGZyb20gY29udGludWluZyB0byBwYXJzZSB2YWx1ZXMgZnJv
bSBhCi0gICAqIGNvcnJ1cHQgcHJvdG8gdGhhdCBkb2Vzbid0IGdpdmUgdXMgYW4gRU5EIHRhZyBp
biB0aW1lLiAqLwotICBpZiAoIWRlY29kZXJfcHVzaChkLCBkLT50b3AtPmVuZF9vZnMpKQotICAg
IHJldHVybiBmYWxzZTsKLSAgZC0+dG9wLT5ncm91cG51bSA9IGFyZzsKLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8qIFBvcHMgYSBmcmFtZSBmcm9tIHRoZSBkZWNvZGVyIHN0YWNrLiAqLwotc3RhdGlj
IHZvaWQgZGVjb2Rlcl9wb3AodXBiX3BiZGVjb2RlciAqZCkgeyBkLT50b3AtLTsgfQotCi1VUEJf
Tk9JTkxJTkUgaW50MzJfdCB1cGJfcGJkZWNvZGVyX2NoZWNrdGFnX3Nsb3codXBiX3BiZGVjb2Rl
ciAqZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50NjRfdCBleHBlY3RlZCkgewotICB1aW50NjRfdCBkYXRhID0gMDsKLSAgc2l6ZV90IGJ5dGVz
ID0gdXBiX3ZhbHVlX3NpemUoZXhwZWN0ZWQpOwotICBzaXplX3QgcmVhZCA9IHBlZWtieXRlcyhk
LCAmZGF0YSwgYnl0ZXMpOwotICBpZiAocmVhZCA9PSBieXRlcyAmJiBkYXRhID09IGV4cGVjdGVk
KSB7Ci0gICAgLyogQWR2YW5jZSBwYXN0IG1hdGNoZWQgYnl0ZXMuICovCi0gICAgaW50MzJfdCBv
ayA9IGdldGJ5dGVzKGQsICZkYXRhLCByZWFkKTsKLSAgICBVUEJfQVNTRVJUX1ZBUihvaywgb2sg
PCAwKTsKLSAgICByZXR1cm4gREVDT0RFX09LOwotICB9IGVsc2UgaWYgKHJlYWQgPCBieXRlcyAm
JiBtZW1jbXAoJmRhdGEsICZleHBlY3RlZCwgcmVhZCkgPT0gMCkgewotICAgIHJldHVybiBzdXNw
ZW5kX3NhdmUoZCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIERFQ09ERV9NSVNNQVRDSDsKLSAg
fQotfQotCi1pbnQzMl90IHVwYl9wYmRlY29kZXJfc2tpcHVua25vd24odXBiX3BiZGVjb2RlciAq
ZCwgaW50MzJfdCBmaWVsZG51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50OF90IHdpcmVfdHlwZSkgewotICBpZiAoZmllbGRudW0gPj0gMCkKLSAgICBnb3RvIGhhdmVf
dGFnOwotCi0gIHdoaWxlICh0cnVlKSB7Ci0gICAgdWludDMyX3QgdGFnOwotICAgIENIRUNLX1JF
VFVSTihkZWNvZGVfdjMyKGQsICZ0YWcpKTsKLSAgICB3aXJlX3R5cGUgPSB0YWcgJiAweDc7Ci0g
ICAgZmllbGRudW0gPSB0YWcgPj4gMzsKLQotaGF2ZV90YWc6Ci0gICAgaWYgKGZpZWxkbnVtID09
IDApIHsKLSAgICAgIHNldGVycihkLCAiU2F3IGludmFsaWQgZmllbGQgbnVtYmVyICgwKSIpOwot
ICAgICAgcmV0dXJuIHVwYl9wYmRlY29kZXJfc3VzcGVuZChkKTsKLSAgICB9Ci0KLSAgICAvKiBU
T0RPOiBkZWxpdmVyIHRvIHVua25vd24gZmllbGQgY2FsbGJhY2suICovCi0gICAgc3dpdGNoICh3
aXJlX3R5cGUpIHsKLSAgICAgIGNhc2UgVVBCX1dJUkVfVFlQRV8zMkJJVDoKLSAgICAgICAgQ0hF
Q0tfUkVUVVJOKHNraXAoZCwgNCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVVBCX1dJ
UkVfVFlQRV82NEJJVDoKLSAgICAgICAgQ0hFQ0tfUkVUVVJOKHNraXAoZCwgOCkpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgVVBCX1dJUkVfVFlQRV9WQVJJTlQ6IHsKLSAgICAgICAgdWlu
dDY0X3QgdTY0OwotICAgICAgICBDSEVDS19SRVRVUk4oZGVjb2RlX3ZhcmludChkLCAmdTY0KSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBVUEJfV0lSRV9UWVBFX0RFTElN
SVRFRDogewotICAgICAgICB1aW50MzJfdCBsZW47Ci0gICAgICAgIENIRUNLX1JFVFVSTihkZWNv
ZGVfdjMyKGQsICZsZW4pKTsKLSAgICAgICAgQ0hFQ0tfUkVUVVJOKHNraXAoZCwgbGVuKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBVUEJfV0lSRV9UWVBFX1NUQVJUX0dS
T1VQOgotICAgICAgICBDSEVDS19TVVNQRU5EKHB1c2h0YWdkZWxpbShkLCAtZmllbGRudW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVQQl9XSVJFX1RZUEVfRU5EX0dST1VQOgotICAg
ICAgICBpZiAoZmllbGRudW0gPT0gLWQtPnRvcC0+Z3JvdXBudW0pIHsKLSAgICAgICAgICBkZWNv
ZGVyX3BvcChkKTsKLSAgICAgICAgfSBlbHNlIGlmIChmaWVsZG51bSA9PSBkLT50b3AtPmdyb3Vw
bnVtKSB7Ci0gICAgICAgICAgcmV0dXJuIERFQ09ERV9FTkRHUk9VUDsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICBzZXRlcnIoZCwgIlVubWF0Y2hlZCBFTkRHUk9VUCB0YWcuIik7Ci0gICAg
ICAgICAgcmV0dXJuIHVwYl9wYmRlY29kZXJfc3VzcGVuZChkKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHNldGVycihkLCAiSW52YWxpZCB3aXJl
IHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIHVwYl9wYmRlY29kZXJfc3VzcGVuZChkKTsKLSAgICB9
Ci0KLSAgICBpZiAoZC0+dG9wLT5ncm91cG51bSA+PSAwKSB7Ci0gICAgICByZXR1cm4gREVDT0RF
X09LOwotICAgIH0KLQotICAgIC8qIFVua25vd24gZ3JvdXAgLS0gY29udGludWUgbG9vcGluZyBv
dmVyIHVua25vd24gZmllbGRzLiAqLwotICAgIGNoZWNrcG9pbnQoZCk7Ci0gIH0KLX0KLQotc3Rh
dGljIHZvaWQgZ290b19lbmRtc2codXBiX3BiZGVjb2RlciAqZCkgewotICB1cGJfdmFsdWUgdjsK
LSAgYm9vbCBmb3VuZCA9IHVwYl9pbnR0YWJsZV9sb29rdXAzMihkLT50b3AtPmRpc3BhdGNoLCBE
SVNQQVRDSF9FTkRNU0csICZ2KTsKLSAgVVBCX0FTU0VSVF9WQVIoZm91bmQsIGZvdW5kKTsKLSAg
ZC0+cGMgPSBkLT50b3AtPmJhc2UgKyB1cGJfdmFsdWVfZ2V0dWludDY0KHYpOwotfQotCi0vKiBQ
YXJzZXMgYSB0YWcgYW5kIGp1bXBzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGVjb2RlIGluc3Ry
dWN0aW9uIGZvciB0aGlzCi0gKiBmaWVsZC4KLSAqCi0gKiBJZiB0aGUgdGFnIGlzIHVua25vd24g
KG9yIHRoZSB3aXJlIHR5cGUgZG9lc24ndCBtYXRjaCksIHBhcnNlcyB0aGUgZmllbGQgYXMKLSAq
IHVua25vd24uICBJZiB0aGUgdGFnIGlzIGEgdmFsaWQgRU5ER1JPVVAgdGFnLCBqdW1wcyB0byB0
aGUgYnl0ZWNvZGUKLSAqIGluc3RydWN0aW9uIGZvciB0aGUgZW5kIG9mIG1lc3NhZ2UuICovCi1z
dGF0aWMgaW50MzJfdCBkaXNwYXRjaCh1cGJfcGJkZWNvZGVyICpkKSB7Ci0gIHVwYl9pbnR0YWJs
ZSAqZGlzcGF0Y2ggPSBkLT50b3AtPmRpc3BhdGNoOwotICB1aW50MzJfdCB0YWc7Ci0gIHVpbnQ4
X3Qgd2lyZV90eXBlOwotICB1aW50MzJfdCBmaWVsZG51bTsKLSAgdXBiX3ZhbHVlIHZhbDsKLSAg
aW50MzJfdCByZXR2YWw7Ci0KLSAgLyogRGVjb2RlIHRhZy4gKi8KLSAgQ0hFQ0tfUkVUVVJOKGRl
Y29kZV92MzIoZCwgJnRhZykpOwotICB3aXJlX3R5cGUgPSB0YWcgJiAweDc7Ci0gIGZpZWxkbnVt
ID0gdGFnID4+IDM7Ci0KLSAgLyogTG9va3VwIHRhZy4gIEJlY2F1c2Ugb2YgcGFja2VkL25vbi1w
YWNrZWQgY29tcGF0aWJpbGl0eSwgd2UgaGF2ZSB0bwotICAgKiBjaGVjayB0aGUgd2lyZSB0eXBl
IGFnYWluc3QgdHdvIHBvc3NpYmlsaXRpZXMuICovCi0gIGlmIChmaWVsZG51bSAhPSBESVNQQVRD
SF9FTkRNU0cgJiYKLSAgICAgIHVwYl9pbnR0YWJsZV9sb29rdXAzMihkaXNwYXRjaCwgZmllbGRu
dW0sICZ2YWwpKSB7Ci0gICAgdWludDY0X3QgdiA9IHVwYl92YWx1ZV9nZXR1aW50NjQodmFsKTsK
LSAgICBpZiAod2lyZV90eXBlID09ICh2ICYgMHhmZikpIHsKLSAgICAgIGQtPnBjID0gZC0+dG9w
LT5iYXNlICsgKHYgPj4gMTYpOwotICAgICAgcmV0dXJuIERFQ09ERV9PSzsKLSAgICB9IGVsc2Ug
aWYgKHdpcmVfdHlwZSA9PSAoKHYgPj4gOCkgJiAweGZmKSkgewotICAgICAgYm9vbCBmb3VuZCA9
Ci0gICAgICAgICAgdXBiX2ludHRhYmxlX2xvb2t1cChkaXNwYXRjaCwgZmllbGRudW0gKyBVUEJf
TUFYX0ZJRUxETlVNQkVSLCAmdmFsKTsKLSAgICAgIFVQQl9BU1NFUlRfVkFSKGZvdW5kLCBmb3Vu
ZCk7Ci0gICAgICBkLT5wYyA9IGQtPnRvcC0+YmFzZSArIHVwYl92YWx1ZV9nZXR1aW50NjQodmFs
KTsKLSAgICAgIHJldHVybiBERUNPREVfT0s7Ci0gICAgfQotICB9Ci0KLSAgLyogV2UgaGF2ZSBz
b21lIHVua25vd24gZmllbGRzIChvciBFTkRHUk9VUCkgdG8gcGFyc2UuICBUaGUgRElTUEFUQ0gg
b3IgVEFHCi0gICAqIGJ5dGVjb2RlIHRoYXQgdHJpZ2dlcmVkIHRoaXMgaXMgcHJlY2VkZWQgYnkg
YSBDSEVDS0RFTElNIGJ5dGVjb2RlIHdoaWNoCi0gICAqIHdlIG5lZWQgdG8gYmFjayB1cCB0bywg
c28gdGhhdCB3aGVuIHdlJ3JlIGRvbmUgc2tpcHBpbmcgdW5rbm93biBkYXRhIHdlCi0gICAqIGNh
biByZS1jaGVjayB0aGUgZGVsaW1pdGVkIGVuZC4gKi8KLSAgZC0+bGFzdC0tOyAgLyogTmVjZXNz
YXJ5IGlmIHdlIGdldCBzdXNwZW5kZWQgKi8KLSAgZC0+cGMgPSBkLT5sYXN0OwotICBhc3NlcnQo
Z2V0b3AoKmQtPmxhc3QpID09IE9QX0NIRUNLREVMSU0pOwotCi0gIC8qIFVua25vd24gZmllbGQg
b3IgRU5ER1JPVVAuICovCi0gIHJldHZhbCA9IHVwYl9wYmRlY29kZXJfc2tpcHVua25vd24oZCwg
ZmllbGRudW0sIHdpcmVfdHlwZSk7Ci0KLSAgQ0hFQ0tfUkVUVVJOKHJldHZhbCk7Ci0KLSAgaWYg
KHJldHZhbCA9PSBERUNPREVfRU5ER1JPVVApIHsKLSAgICBnb3RvX2VuZG1zZyhkKTsKLSAgICBy
ZXR1cm4gREVDT0RFX09LOwotICB9Ci0KLSAgcmV0dXJuIERFQ09ERV9PSzsKLX0KLQotLyogQ2Fs
bGVycyBrbm93IHRoYXQgdGhlIHN0YWNrIGlzIG1vcmUgdGhhbiBvbmUgZGVlcCBiZWNhdXNlIHRo
ZSBvcGNvZGVzIHRoYXQKLSAqIGNhbGwgdGhpcyBvbmx5IG9jY3VyIGFmdGVyIFBVU0ggb3BlcmF0
aW9ucy4gKi8KLXVwYl9wYmRlY29kZXJfZnJhbWUgKm91dGVyX2ZyYW1lKHVwYl9wYmRlY29kZXIg
KmQpIHsKLSAgYXNzZXJ0KGQtPnRvcCAhPSBkLT5zdGFjayk7Ci0gIHJldHVybiBkLT50b3AgLSAx
OwotfQotCi0KLS8qIFRoZSBtYWluIGRlY29kaW5nIGxvb3AgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoZSBtYWluIGRlY29kZXIg
Vk0gZnVuY3Rpb24uICBVc2VzIHRyYWRpdGlvbmFsIGJ5dGVjb2RlIGRpc3BhdGNoIGxvb3Agd2l0
aCBhCi0gKiBzd2l0Y2goKSBzdGF0ZW1lbnQuICovCi1zaXplX3QgcnVuX2RlY29kZXJfdm0odXBi
X3BiZGVjb2RlciAqZCwgY29uc3QgbWdyb3VwICpncm91cCwKLSAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1cGJfYnVmaGFuZGxlKiBoYW5kbGUpIHsKLQotI2RlZmluZSBWTUNBU0Uob3AsIGNv
ZGUpIFwKLSAgY2FzZSBvcDogeyBjb2RlOyBpZiAoY29uc3VtZXNfaW5wdXQob3ApKSBjaGVja3Bv
aW50KGQpOyBicmVhazsgfQotI2RlZmluZSBQUklNSVRJVkVfT1AodHlwZSwgd3QsIG5hbWUsIGNv
bnZmdW5jLCBjdHlwZSkgXAotICBWTUNBU0UoT1BfUEFSU0VfICMjIHR5cGUsIHsgXAotICAgIGN0
eXBlIHZhbDsgXAotICAgIENIRUNLX1JFVFVSTihkZWNvZGVfICMjIHd0KGQsICZ2YWwpKTsgXAot
ICAgIHVwYl9zaW5rX3B1dCAjIyBuYW1lKCZkLT50b3AtPnNpbmssIGFyZywgKGNvbnZmdW5jKSh2
YWwpKTsgXAotICB9KQotCi0gIHdoaWxlKDEpIHsKLSAgICBpbnQzMl90IGluc3RydWN0aW9uOwot
ICAgIG9wY29kZSBvcDsKLSAgICB1aW50MzJfdCBhcmc7Ci0gICAgaW50MzJfdCBsb25nb2ZzOwot
Ci0gICAgZC0+bGFzdCA9IGQtPnBjOwotICAgIGluc3RydWN0aW9uID0gKmQtPnBjKys7Ci0gICAg
b3AgPSBnZXRvcChpbnN0cnVjdGlvbik7Ci0gICAgYXJnID0gaW5zdHJ1Y3Rpb24gPj4gODsKLSAg
ICBsb25nb2ZzID0gYXJnOwotICAgIGFzc2VydChkLT5wdHIgIT0gZC0+cmVzaWR1YWxfZW5kKTsK
LSAgICBVUEJfVU5VU0VEKGdyb3VwKTsKLSNpZmRlZiBVUEJfRFVNUF9CWVRFQ09ERQotICAgIGZw
cmludGYoc3RkZXJyLCAic19vZnM9JWQgYnVmX29mcz0lZCBkYXRhX3JlbT0lZCBidWZfcmVtPSVk
IGRlbGltX3JlbT0lZCAiCi0gICAgICAgICAgICAgICAgICAgICIleCAlcyAoJWQpXG4iLAotICAg
ICAgICAgICAgKGludClvZmZzZXQoZCksCi0gICAgICAgICAgICAoaW50KShkLT5wdHIgLSBkLT5i
dWYpLAotICAgICAgICAgICAgKGludCkoZC0+ZGF0YV9lbmQgLSBkLT5wdHIpLAotICAgICAgICAg
ICAgKGludCkoZC0+ZW5kIC0gZC0+cHRyKSwKLSAgICAgICAgICAgIChpbnQpKChkLT50b3AtPmVu
ZF9vZnMgLSBkLT5idWZzdGFydF9vZnMpIC0gKGQtPnB0ciAtIGQtPmJ1ZikpLAotICAgICAgICAg
ICAgKGludCkoZC0+cGMgLSAxIC0gZ3JvdXAtPmJ5dGVjb2RlKSwKLSAgICAgICAgICAgIHVwYl9w
YmRlY29kZXJfZ2V0b3BuYW1lKG9wKSwKLSAgICAgICAgICAgIGFyZyk7Ci0jZW5kaWYKLSAgICBz
d2l0Y2ggKG9wKSB7Ci0gICAgICAvKiBUZWNobmljYWxseSwgd2UgYXJlIGxvc2luZyBkYXRhIGlm
IHdlIHNlZSBhIDMyLWJpdCB2YXJpbnQgdGhhdCBpcyBub3QKLSAgICAgICAqIHByb3Blcmx5IHNp
Z24tZXh0ZW5kZWQuICBXZSBjb3VsZCBkZXRlY3QgdGhpcyBhbmQgZXJyb3IgYWJvdXQgdGhlIGRh
dGEKLSAgICAgICAqIGxvc3MsIGJ1dCBwcm90bzIgZG9lcyBub3QgZG8gdGhpcywgc28gd2UgcGFz
cy4gKi8KLSAgICAgIFBSSU1JVElWRV9PUChJTlQzMiwgICAgdmFyaW50LCAgaW50MzIsICBpbnQz
Ml90LCAgICAgIHVpbnQ2NF90KQotICAgICAgUFJJTUlUSVZFX09QKElOVDY0LCAgICB2YXJpbnQs
ICBpbnQ2NCwgIGludDY0X3QsICAgICAgdWludDY0X3QpCi0gICAgICBQUklNSVRJVkVfT1AoVUlO
VDMyLCAgIHZhcmludCwgIHVpbnQzMiwgdWludDMyX3QsICAgICB1aW50NjRfdCkKLSAgICAgIFBS
SU1JVElWRV9PUChVSU5UNjQsICAgdmFyaW50LCAgdWludDY0LCB1aW50NjRfdCwgICAgIHVpbnQ2
NF90KQotICAgICAgUFJJTUlUSVZFX09QKEZJWEVEMzIsICBmaXhlZDMyLCB1aW50MzIsIHVpbnQz
Ml90LCAgICAgdWludDMyX3QpCi0gICAgICBQUklNSVRJVkVfT1AoRklYRUQ2NCwgIGZpeGVkNjQs
IHVpbnQ2NCwgdWludDY0X3QsICAgICB1aW50NjRfdCkKLSAgICAgIFBSSU1JVElWRV9PUChTRklY
RUQzMiwgZml4ZWQzMiwgaW50MzIsICBpbnQzMl90LCAgICAgIHVpbnQzMl90KQotICAgICAgUFJJ
TUlUSVZFX09QKFNGSVhFRDY0LCBmaXhlZDY0LCBpbnQ2NCwgIGludDY0X3QsICAgICAgdWludDY0
X3QpCi0gICAgICBQUklNSVRJVkVfT1AoQk9PTCwgICAgIHZhcmludCwgIGJvb2wsICAgYm9vbCwg
ICAgICAgICB1aW50NjRfdCkKLSAgICAgIFBSSU1JVElWRV9PUChET1VCTEUsICAgZml4ZWQ2NCwg
ZG91YmxlLCBhc19kb3VibGUsICAgIHVpbnQ2NF90KQotICAgICAgUFJJTUlUSVZFX09QKEZMT0FU
LCAgICBmaXhlZDMyLCBmbG9hdCwgIGFzX2Zsb2F0LCAgICAgdWludDMyX3QpCi0gICAgICBQUklN
SVRJVkVfT1AoU0lOVDMyLCAgIHZhcmludCwgIGludDMyLCAgdXBiX3p6ZGVjXzMyLCB1aW50NjRf
dCkKLSAgICAgIFBSSU1JVElWRV9PUChTSU5UNjQsICAgdmFyaW50LCAgaW50NjQsICB1cGJfenpk
ZWNfNjQsIHVpbnQ2NF90KQotCi0gICAgICBWTUNBU0UoT1BfU0VURElTUEFUQ0gsCi0gICAgICAg
IGQtPnRvcC0+YmFzZSA9IGQtPnBjIC0gMTsKLSAgICAgICAgbWVtY3B5KCZkLT50b3AtPmRpc3Bh
dGNoLCBkLT5wYywgc2l6ZW9mKHZvaWQqKSk7Ci0gICAgICAgIGQtPnBjICs9IHNpemVvZih2b2lk
KikgLyBzaXplb2YodWludDMyX3QpOwotICAgICAgKQotICAgICAgVk1DQVNFKE9QX1NUQVJUTVNH
LAotICAgICAgICBDSEVDS19TVVNQRU5EKHVwYl9zaW5rX3N0YXJ0bXNnKCZkLT50b3AtPnNpbmsp
KTsKLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9FTkRNU0csCi0gICAgICAgIENIRUNLX1NVU1BF
TkQodXBiX3NpbmtfZW5kbXNnKCZkLT50b3AtPnNpbmssIGQtPnN0YXR1cykpOwotICAgICAgKQot
ICAgICAgVk1DQVNFKE9QX1NUQVJUU0VRLAotICAgICAgICB1cGJfcGJkZWNvZGVyX2ZyYW1lICpv
dXRlciA9IG91dGVyX2ZyYW1lKGQpOwotICAgICAgICBDSEVDS19TVVNQRU5EKHVwYl9zaW5rX3N0
YXJ0c2VxKCZvdXRlci0+c2luaywgYXJnLCAmZC0+dG9wLT5zaW5rKSk7Ci0gICAgICApCi0gICAg
ICBWTUNBU0UoT1BfRU5EU0VRLAotICAgICAgICBDSEVDS19TVVNQRU5EKHVwYl9zaW5rX2VuZHNl
cSgmZC0+dG9wLT5zaW5rLCBhcmcpKTsKLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9TVEFSVFNV
Qk1TRywKLSAgICAgICAgdXBiX3BiZGVjb2Rlcl9mcmFtZSAqb3V0ZXIgPSBvdXRlcl9mcmFtZShk
KTsKLSAgICAgICAgQ0hFQ0tfU1VTUEVORCh1cGJfc2lua19zdGFydHN1Ym1zZygmb3V0ZXItPnNp
bmssIGFyZywgJmQtPnRvcC0+c2luaykpOwotICAgICAgKQotICAgICAgVk1DQVNFKE9QX0VORFNV
Qk1TRywKLSAgICAgICAgQ0hFQ0tfU1VTUEVORCh1cGJfc2lua19lbmRzdWJtc2coJmQtPnRvcC0+
c2luaywgYXJnKSk7Ci0gICAgICApCi0gICAgICBWTUNBU0UoT1BfU1RBUlRTVFIsCi0gICAgICAg
IHVpbnQzMl90IGxlbiA9IGRlbGltX3JlbWFpbmluZyhkKTsKLSAgICAgICAgdXBiX3BiZGVjb2Rl
cl9mcmFtZSAqb3V0ZXIgPSBvdXRlcl9mcmFtZShkKTsKLSAgICAgICAgQ0hFQ0tfU1VTUEVORCh1
cGJfc2lua19zdGFydHN0cigmb3V0ZXItPnNpbmssIGFyZywgbGVuLCAmZC0+dG9wLT5zaW5rKSk7
Ci0gICAgICAgIGlmIChsZW4gPT0gMCkgewotICAgICAgICAgIGQtPnBjKys7ICAvKiBTa2lwIE9Q
X1NUUklORy4gKi8KLSAgICAgICAgfQotICAgICAgKQotICAgICAgVk1DQVNFKE9QX1NUUklORywK
LSAgICAgICAgdWludDMyX3QgbGVuID0gY3VyYnVmbGVmdChkKTsKLSAgICAgICAgc2l6ZV90IG4g
PSB1cGJfc2lua19wdXRzdHJpbmcoJmQtPnRvcC0+c2luaywgYXJnLCBkLT5wdHIsIGxlbiwgaGFu
ZGxlKTsKLSAgICAgICAgaWYgKG4gPiBsZW4pIHsKLSAgICAgICAgICBpZiAobiA+IGRlbGltX3Jl
bWFpbmluZyhkKSkgewotICAgICAgICAgICAgc2V0ZXJyKGQsICJUcmllZCB0byBza2lwIHBhc3Qg
ZW5kIG9mIHN0cmluZy4iKTsKLSAgICAgICAgICAgIHJldHVybiB1cGJfcGJkZWNvZGVyX3N1c3Bl
bmQoZCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludDMyX3QgcmV0ID0gc2tp
cChkLCBuKTsKLSAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkbid0IHJldHVybiBERUNPREVfT0ss
IGJlY2F1c2UgbiA+IGxlbi4gKi8KLSAgICAgICAgICAgIGFzc2VydChyZXQgPj0gMCk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhZHZh
bmNlKGQsIG4pOwotICAgICAgICBpZiAobiA8IGxlbiB8fCBkLT5kZWxpbV9lbmQgPT0gTlVMTCkg
ewotICAgICAgICAgIC8qIFdlIGFyZW4ndCBmaW5pc2hlZCB3aXRoIHRoaXMgc3RyaW5nIHlldC4g
Ki8KLSAgICAgICAgICBkLT5wYy0tOyAgLyogUmVwZWF0IE9QX1NUUklORy4gKi8KLSAgICAgICAg
ICBpZiAobiA+IDApIGNoZWNrcG9pbnQoZCk7Ci0gICAgICAgICAgcmV0dXJuIHVwYl9wYmRlY29k
ZXJfc3VzcGVuZChkKTsKLSAgICAgICAgfQotICAgICAgKQotICAgICAgVk1DQVNFKE9QX0VORFNU
UiwKLSAgICAgICAgQ0hFQ0tfU1VTUEVORCh1cGJfc2lua19lbmRzdHIoJmQtPnRvcC0+c2luaywg
YXJnKSk7Ci0gICAgICApCi0gICAgICBWTUNBU0UoT1BfUFVTSFRBR0RFTElNLAotICAgICAgICBD
SEVDS19TVVNQRU5EKHB1c2h0YWdkZWxpbShkLCBhcmcpKTsKLSAgICAgICkKLSAgICAgIFZNQ0FT
RShPUF9TRVRCSUdHUk9VUE5VTSwKLSAgICAgICAgZC0+dG9wLT5ncm91cG51bSA9ICpkLT5wYysr
OwotICAgICAgKQotICAgICAgVk1DQVNFKE9QX1BPUCwKLSAgICAgICAgYXNzZXJ0KGQtPnRvcCA+
IGQtPnN0YWNrKTsKLSAgICAgICAgZGVjb2Rlcl9wb3AoZCk7Ci0gICAgICApCi0gICAgICBWTUNB
U0UoT1BfUFVTSExFTkRFTElNLAotICAgICAgICB1aW50MzJfdCBsZW47Ci0gICAgICAgIENIRUNL
X1JFVFVSTihkZWNvZGVfdjMyKGQsICZsZW4pKTsKLSAgICAgICAgQ0hFQ0tfU1VTUEVORChkZWNv
ZGVyX3B1c2goZCwgb2Zmc2V0KGQpICsgbGVuKSk7Ci0gICAgICAgIHNldF9kZWxpbV9lbmQoZCk7
Ci0gICAgICApCi0gICAgICBWTUNBU0UoT1BfU0VUREVMSU0sCi0gICAgICAgIHNldF9kZWxpbV9l
bmQoZCk7Ci0gICAgICApCi0gICAgICBWTUNBU0UoT1BfQ0hFQ0tERUxJTSwKLSAgICAgICAgLyog
V2UgYXJlIGd1YXJhbnRlZWQgb2YgdGhpcyBhc3NlcnQgYmVjYXVzZSB3ZSBuZXZlciBhbGxvdyBv
dXJzZWx2ZXMgdG8KLSAgICAgICAgICogY29uc3VtZSBieXRlcyBiZXlvbmQgZGF0YV9lbmQsIHdo
aWNoIGNvdmVycyBkZWxpbV9lbmQgd2hlbiBub24tTlVMTC4KLSAgICAgICAgICovCi0gICAgICAg
IGFzc2VydCghKGQtPmRlbGltX2VuZCAmJiBkLT5wdHIgPiBkLT5kZWxpbV9lbmQpKTsKLSAgICAg
ICAgaWYgKGQtPnB0ciA9PSBkLT5kZWxpbV9lbmQpCi0gICAgICAgICAgZC0+cGMgKz0gbG9uZ29m
czsKLSAgICAgICkKLSAgICAgIFZNQ0FTRShPUF9DQUxMLAotICAgICAgICBkLT5jYWxsc3RhY2tb
ZC0+Y2FsbF9sZW4rK10gPSBkLT5wYzsKLSAgICAgICAgZC0+cGMgKz0gbG9uZ29mczsKLSAgICAg
ICkKLSAgICAgIFZNQ0FTRShPUF9SRVQsCi0gICAgICAgIGFzc2VydChkLT5jYWxsX2xlbiA+IDAp
OwotICAgICAgICBkLT5wYyA9IGQtPmNhbGxzdGFja1stLWQtPmNhbGxfbGVuXTsKLSAgICAgICkK
LSAgICAgIFZNQ0FTRShPUF9CUkFOQ0gsCi0gICAgICAgIGQtPnBjICs9IGxvbmdvZnM7Ci0gICAg
ICApCi0gICAgICBWTUNBU0UoT1BfVEFHMSwKLSAgICAgICAgdWludDhfdCBleHBlY3RlZDsKLSAg
ICAgICAgQ0hFQ0tfU1VTUEVORChjdXJidWZsZWZ0KGQpID4gMCk7Ci0gICAgICAgIGV4cGVjdGVk
ID0gKGFyZyA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgIGlmICgqZC0+cHRyID09IGV4cGVjdGVkKSB7
Ci0gICAgICAgICAgYWR2YW5jZShkLCAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBp
bnQ4X3Qgc2hvcnRvZnM7Ci0gICAgICAgICBiYWR0YWc6Ci0gICAgICAgICAgc2hvcnRvZnMgPSBh
cmc7Ci0gICAgICAgICAgaWYgKHNob3J0b2ZzID09IExBQkVMX0RJU1BBVENIKSB7Ci0gICAgICAg
ICAgICBDSEVDS19SRVRVUk4oZGlzcGF0Y2goZCkpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBkLT5wYyArPSBzaG9ydG9mczsKLSAgICAgICAgICAgIGJyZWFrOyAvKiBBdm9pZCBj
aGVja3BvaW50KCkuICovCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICApCi0gICAgICBW
TUNBU0UoT1BfVEFHMiwKLSAgICAgICAgdWludDE2X3QgZXhwZWN0ZWQ7Ci0gICAgICAgIENIRUNL
X1NVU1BFTkQoY3VyYnVmbGVmdChkKSA+IDApOwotICAgICAgICBleHBlY3RlZCA9IChhcmcgPj4g
OCkgJiAweGZmZmY7Ci0gICAgICAgIGlmIChjdXJidWZsZWZ0KGQpID49IDIpIHsKLSAgICAgICAg
ICB1aW50MTZfdCBhY3R1YWw7Ci0gICAgICAgICAgbWVtY3B5KCZhY3R1YWwsIGQtPnB0ciwgMik7
Ci0gICAgICAgICAgaWYgKGV4cGVjdGVkID09IGFjdHVhbCkgewotICAgICAgICAgICAgYWR2YW5j
ZShkLCAyKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ290byBiYWR0YWc7Ci0g
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGludDMyX3QgcmVzdWx0ID0g
dXBiX3BiZGVjb2Rlcl9jaGVja3RhZ19zbG93KGQsIGV4cGVjdGVkKTsKLSAgICAgICAgICBpZiAo
cmVzdWx0ID09IERFQ09ERV9NSVNNQVRDSCkgZ290byBiYWR0YWc7Ci0gICAgICAgICAgaWYgKHJl
c3VsdCA+PSAwKSByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICApCi0gICAgICBWTUNB
U0UoT1BfVEFHTiwgewotICAgICAgICB1aW50NjRfdCBleHBlY3RlZDsKLSAgICAgICAgaW50MzJf
dCByZXN1bHQ7Ci0gICAgICAgIG1lbWNweSgmZXhwZWN0ZWQsIGQtPnBjLCA4KTsKLSAgICAgICAg
ZC0+cGMgKz0gMjsKLSAgICAgICAgcmVzdWx0ID0gdXBiX3BiZGVjb2Rlcl9jaGVja3RhZ19zbG93
KGQsIGV4cGVjdGVkKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBERUNPREVfTUlTTUFUQ0gpIGdv
dG8gYmFkdGFnOwotICAgICAgICBpZiAocmVzdWx0ID49IDApIHJldHVybiByZXN1bHQ7Ci0gICAg
ICB9KQotICAgICAgVk1DQVNFKE9QX0RJU1BBVENILCB7Ci0gICAgICAgIENIRUNLX1JFVFVSTihk
aXNwYXRjaChkKSk7Ci0gICAgICB9KQotICAgICAgVk1DQVNFKE9QX0hBTFQsIHsKLSAgICAgICAg
cmV0dXJuIGQtPnNpemVfcGFyYW07Ci0gICAgICB9KQotICAgIH0KLSAgfQotfQotCi0KLS8qIEJ5
dGVzSGFuZGxlciBoYW5kbGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLXZvaWQgKnVwYl9wYmRlY29kZXJfc3RhcnRiYyh2b2lkICpj
bG9zdXJlLCBjb25zdCB2b2lkICpwYywgc2l6ZV90IHNpemVfaGludCkgewotICB1cGJfcGJkZWNv
ZGVyICpkID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChzaXplX2hpbnQpOwotICBkLT50b3AtPmVu
ZF9vZnMgPSBVSU5UNjRfTUFYOwotICBkLT5idWZzdGFydF9vZnMgPSAwOwotICBkLT5jYWxsX2xl
biA9IDE7Ci0gIGQtPmNhbGxzdGFja1swXSA9ICZoYWx0OwotICBkLT5wYyA9IHBjOwotICBkLT5z
a2lwID0gMDsKLSAgcmV0dXJuIGQ7Ci19Ci0KLXZvaWQgKnVwYl9wYmRlY29kZXJfc3RhcnRqaXQo
dm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIHNpemVfdCBzaXplX2hpbnQpIHsKLSAgdXBi
X3BiZGVjb2RlciAqZCA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VE
KHNpemVfaGludCk7Ci0gIGQtPnRvcC0+ZW5kX29mcyA9IFVJTlQ2NF9NQVg7Ci0gIGQtPmJ1ZnN0
YXJ0X29mcyA9IDA7Ci0gIGQtPmNhbGxfbGVuID0gMDsKLSAgZC0+c2tpcCA9IDA7Ci0gIHJldHVy
biBkOwotfQotCi1ib29sIHVwYl9wYmRlY29kZXJfZW5kKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZv
aWQgKmhhbmRsZXJfZGF0YSkgewotICB1cGJfcGJkZWNvZGVyICpkID0gY2xvc3VyZTsKLSAgY29u
c3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqbWV0aG9kID0gaGFuZGxlcl9kYXRhOwotICB1aW50NjRf
dCBlbmQ7Ci0gIGNoYXIgZHVtbXk7Ci0KLSAgaWYgKGQtPnJlc2lkdWFsX2VuZCA+IGQtPnJlc2lk
dWFsKSB7Ci0gICAgc2V0ZXJyKGQsICJVbmV4cGVjdGVkIEVPRjogZGVjb2RlciBzdGlsbCBoYXMg
YnVmZmVyZWQgdW5wYXJzZWQgZGF0YSIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlm
IChkLT5za2lwKSB7Ci0gICAgc2V0ZXJyKGQsICJVbmV4cGVjdGVkIEVPRiBpbnNpZGUgc2tpcHBl
ZCBkYXRhIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKGQtPnRvcC0+ZW5kX29m
cyAhPSBVSU5UNjRfTUFYKSB7Ci0gICAgc2V0ZXJyKGQsICJVbmV4cGVjdGVkIEVPRiBpbnNpZGUg
ZGVsaW1pdGVkIHN0cmluZyIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qIFRoZSB1
c2VyJ3MgZW5kKCkgY2FsbCBpbmRpY2F0ZXMgdGhhdCB0aGUgbWVzc2FnZSBlbmRzIGhlcmUuICov
Ci0gIGVuZCA9IG9mZnNldChkKTsKLSAgZC0+dG9wLT5lbmRfb2ZzID0gZW5kOwotCi0jaWZkZWYg
VVBCX1VTRV9KSVRfWDY0Ci0gIGlmIChtZXRob2QtPmlzX25hdGl2ZV8pIHsKLSAgICBjb25zdCBt
Z3JvdXAgKmdyb3VwID0gKGNvbnN0IG1ncm91cCopbWV0aG9kLT5ncm91cDsKLSAgICBpZiAoZC0+
dG9wICE9IGQtPnN0YWNrKQotICAgICAgZC0+c3RhY2stPmVuZF9vZnMgPSAwOwotICAgIGdyb3Vw
LT5qaXRfY29kZShjbG9zdXJlLCBtZXRob2QtPmNvZGVfYmFzZS5wdHIsICZkdW1teSwgMCwgTlVM
TCk7Ci0gIH0gZWxzZQotI2VuZGlmCi0gIHsKLSAgICBjb25zdCB1aW50MzJfdCAqcCA9IGQtPnBj
OwotICAgIGQtPnN0YWNrLT5lbmRfb2ZzID0gZW5kOwotICAgIC8qIENoZWNrIHRoZSBwcmV2aW91
cyBieXRlY29kZSwgYnV0IGd1YXJkIGFnYWluc3QgYmVnaW5uaW5nLiAqLwotICAgIGlmIChwICE9
IG1ldGhvZC0+Y29kZV9iYXNlLnB0cikgcC0tOwotICAgIGlmIChnZXRvcCgqcCkgPT0gT1BfQ0hF
Q0tERUxJTSkgewotICAgICAgLyogUmV3aW5kIGZyb20gT1BfVEFHKiB0byBPUF9DSEVDS0RFTElN
LiAqLwotICAgICAgYXNzZXJ0KGdldG9wKCpkLT5wYykgPT0gT1BfVEFHMSB8fAotICAgICAgICAg
ICAgIGdldG9wKCpkLT5wYykgPT0gT1BfVEFHMiB8fAotICAgICAgICAgICAgIGdldG9wKCpkLT5w
YykgPT0gT1BfVEFHTiB8fAotICAgICAgICAgICAgIGdldG9wKCpkLT5wYykgPT0gT1BfRElTUEFU
Q0gpOwotICAgICAgZC0+cGMgPSBwOwotICAgIH0KLSAgICB1cGJfcGJkZWNvZGVyX2RlY29kZShj
bG9zdXJlLCBoYW5kbGVyX2RhdGEsICZkdW1teSwgMCwgTlVMTCk7Ci0gIH0KLQotICBpZiAoZC0+
Y2FsbF9sZW4gIT0gMCkgewotICAgIHNldGVycihkLCAiVW5leHBlY3RlZCBFT0YgaW5zaWRlIHN1
Ym1lc3NhZ2Ugb3IgZ3JvdXAiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotc2l6ZV90IHVwYl9wYmRlY29kZXJfZGVjb2RlKHZvaWQgKmRlY29kZXIsIGNv
bnN0IHZvaWQgKmdyb3VwLCBjb25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IHNpemUsIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICBpbnQz
Ml90IHJlc3VsdCA9IHVwYl9wYmRlY29kZXJfcmVzdW1lKGRlY29kZXIsIE5VTEwsIGJ1Ziwgc2l6
ZSwgaGFuZGxlKTsKLQotICBpZiAocmVzdWx0ID09IERFQ09ERV9FTkRHUk9VUCkgZ290b19lbmRt
c2coZGVjb2Rlcik7Ci0gIENIRUNLX1JFVFVSTihyZXN1bHQpOwotCi0gIHJldHVybiBydW5fZGVj
b2Rlcl92bShkZWNvZGVyLCBncm91cCwgaGFuZGxlKTsKLX0KLQotCi0vKiBQdWJsaWMgQVBJICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwotCi12b2lkIHVwYl9wYmRlY29kZXJfcmVzZXQodXBiX3BiZGVjb2RlciAqZCkgewot
ICBkLT50b3AgPSBkLT5zdGFjazsKLSAgZC0+dG9wLT5ncm91cG51bSA9IDA7Ci0gIGQtPnB0ciA9
IGQtPnJlc2lkdWFsOwotICBkLT5idWYgPSBkLT5yZXNpZHVhbDsKLSAgZC0+ZW5kID0gZC0+cmVz
aWR1YWw7Ci0gIGQtPnJlc2lkdWFsX2VuZCA9IGQtPnJlc2lkdWFsOwotfQotCi11cGJfcGJkZWNv
ZGVyICp1cGJfcGJkZWNvZGVyX2NyZWF0ZSh1cGJfZW52ICplLCBjb25zdCB1cGJfcGJkZWNvZGVy
bWV0aG9kICptLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3Npbmsg
KnNpbmspIHsKLSAgY29uc3Qgc2l6ZV90IGRlZmF1bHRfbWF4X25lc3RpbmcgPSA2NDsKLSNpZm5k
ZWYgTkRFQlVHCi0gIHNpemVfdCBzaXplX2JlZm9yZSA9IHVwYl9lbnZfYnl0ZXNhbGxvY2F0ZWQo
ZSk7Ci0jZW5kaWYKLQotICB1cGJfcGJkZWNvZGVyICpkID0gdXBiX2Vudl9tYWxsb2MoZSwgc2l6
ZW9mKHVwYl9wYmRlY29kZXIpKTsKLSAgaWYgKCFkKSByZXR1cm4gTlVMTDsKLQotICBkLT5tZXRo
b2RfID0gbTsKLSAgZC0+Y2FsbHN0YWNrID0gdXBiX2Vudl9tYWxsb2MoZSwgY2FsbHN0YWNrc2l6
ZShkLCBkZWZhdWx0X21heF9uZXN0aW5nKSk7Ci0gIGQtPnN0YWNrID0gdXBiX2Vudl9tYWxsb2Mo
ZSwgc3RhY2tzaXplKGQsIGRlZmF1bHRfbWF4X25lc3RpbmcpKTsKLSAgaWYgKCFkLT5zdGFjayB8
fCAhZC0+Y2FsbHN0YWNrKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBkLT5lbnYgPSBl
OwotICBkLT5saW1pdCA9IGQtPnN0YWNrICsgZGVmYXVsdF9tYXhfbmVzdGluZyAtIDE7Ci0gIGQt
PnN0YWNrX3NpemUgPSBkZWZhdWx0X21heF9uZXN0aW5nOwotICBkLT5zdGF0dXMgPSBOVUxMOwot
Ci0gIHVwYl9wYmRlY29kZXJfcmVzZXQoZCk7Ci0gIHVwYl9ieXRlc3NpbmtfcmVzZXQoJmQtPmlu
cHV0XywgJm0tPmlucHV0X2hhbmRsZXJfLCBkKTsKLQotICBhc3NlcnQoc2luayk7Ci0gIGlmIChk
LT5tZXRob2RfLT5kZXN0X2hhbmRsZXJzXykgewotICAgIGlmIChzaW5rLT5oYW5kbGVycyAhPSBk
LT5tZXRob2RfLT5kZXN0X2hhbmRsZXJzXykKLSAgICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHVw
Yl9zaW5rX3Jlc2V0KCZkLT50b3AtPnNpbmssIHNpbmstPmhhbmRsZXJzLCBzaW5rLT5jbG9zdXJl
KTsKLQotICAvKiBJZiB0aGlzIGZhaWxzLCBpbmNyZWFzZSB0aGUgdmFsdWUgaW4gZGVjb2Rlci5o
LiAqLwotICBhc3NlcnQodXBiX2Vudl9ieXRlc2FsbG9jYXRlZChlKSAtIHNpemVfYmVmb3JlIDw9
IFVQQl9QQl9ERUNPREVSX1NJWkUpOwotICByZXR1cm4gZDsKLX0KLQotdWludDY0X3QgdXBiX3Bi
ZGVjb2Rlcl9ieXRlc3BhcnNlZChjb25zdCB1cGJfcGJkZWNvZGVyICpkKSB7Ci0gIHJldHVybiBv
ZmZzZXQoZCk7Ci19Ci0KLWNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKnVwYl9wYmRlY29kZXJf
bWV0aG9kKGNvbnN0IHVwYl9wYmRlY29kZXIgKmQpIHsKLSAgcmV0dXJuIGQtPm1ldGhvZF87Ci19
Ci0KLXVwYl9ieXRlc3NpbmsgKnVwYl9wYmRlY29kZXJfaW5wdXQodXBiX3BiZGVjb2RlciAqZCkg
ewotICByZXR1cm4gJmQtPmlucHV0XzsKLX0KLQotc2l6ZV90IHVwYl9wYmRlY29kZXJfbWF4bmVz
dGluZyhjb25zdCB1cGJfcGJkZWNvZGVyICpkKSB7Ci0gIHJldHVybiBkLT5zdGFja19zaXplOwot
fQotCi1ib29sIHVwYl9wYmRlY29kZXJfc2V0bWF4bmVzdGluZyh1cGJfcGJkZWNvZGVyICpkLCBz
aXplX3QgbWF4KSB7Ci0gIGFzc2VydChkLT50b3AgPj0gZC0+c3RhY2spOwotCi0gIGlmIChtYXgg
PCAoc2l6ZV90KShkLT50b3AgLSBkLT5zdGFjaykpIHsKLSAgICAvKiBDYW4ndCBzZXQgYSBsaW1p
dCBzbWFsbGVyIHRoYW4gd2hhdCB3ZSBhcmUgY3VycmVudGx5IGF0LiAqLwotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotCi0gIGlmIChtYXggPiBkLT5zdGFja19zaXplKSB7Ci0gICAgLyogTmVlZCB0
byByZWFsbG9jYXRlIHN0YWNrIGFuZCBjYWxsc3RhY2sgdG8gYWNjb21tb2RhdGUuICovCi0gICAg
c2l6ZV90IG9sZF9zaXplID0gc3RhY2tzaXplKGQsIGQtPnN0YWNrX3NpemUpOwotICAgIHNpemVf
dCBuZXdfc2l6ZSA9IHN0YWNrc2l6ZShkLCBtYXgpOwotICAgIHZvaWQgKnAgPSB1cGJfZW52X3Jl
YWxsb2MoZC0+ZW52LCBkLT5zdGFjaywgb2xkX3NpemUsIG5ld19zaXplKTsKLSAgICBpZiAoIXAp
IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZC0+c3RhY2sgPSBwOwotCi0gICAg
b2xkX3NpemUgPSBjYWxsc3RhY2tzaXplKGQsIGQtPnN0YWNrX3NpemUpOwotICAgIG5ld19zaXpl
ID0gY2FsbHN0YWNrc2l6ZShkLCBtYXgpOwotICAgIHAgPSB1cGJfZW52X3JlYWxsb2MoZC0+ZW52
LCBkLT5jYWxsc3RhY2ssIG9sZF9zaXplLCBuZXdfc2l6ZSk7Ci0gICAgaWYgKCFwKSB7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGQtPmNhbGxzdGFjayA9IHA7Ci0KLSAgICBkLT5z
dGFja19zaXplID0gbWF4OwotICB9Ci0KLSAgZC0+bGltaXQgPSBkLT5zdGFjayArIG1heCAtIDE7
Ci0gIHJldHVybiB0cnVlOwotfQotLyoKLSoqIHVwYjo6RW5jb2RlcgotKioKLSoqIFNpbmNlIHdl
IGFyZSBpbXBsZW1lbnRpbmcgcHVyZSBoYW5kbGVycyAoaWUuIHdpdGhvdXQgYW55IG91dC1vZi1i
YW5kIGFjY2VzcwotKiogdG8gcHJlLWNvbXB1dGVkIGxlbmd0aHMpLCB3ZSBoYXZlIHRvIGJ1ZmZl
ciBhbGwgc3VibWVzc2FnZXMgYmVmb3JlIHdlIGNhbgotKiogZW1pdCBldmVuIHRoZWlyIGZpcnN0
IGJ5dGUuCi0qKgotKiogTm90IGtub3dpbmcgdGhlIHNpemUgb2Ygc3VibWVzc2FnZXMgYWxzbyBt
ZWFucyB3ZSBjYW4ndCB3cml0ZSBhIHBlcmZlY3QKLSoqIHplcm8tY29weSBpbXBsZW1lbnRhdGlv
biwgZXZlbiB3aXRoIGJ1ZmZlcmluZy4gIExlbmd0aHMgYXJlIHN0b3JlZCBhcwotKiogdmFyaW50
cywgd2hpY2ggbWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IGJ5dGVzIHRvIHJlc2Vy
dmUgZm9yIHRoZQotKiogbGVuZ3RoIHVudGlsIHdlIGtub3cgd2hhdCB0aGUgbGVuZ3RoIGlzLgot
KioKLSoqIFRoaXMgbGVhdmVzIHVzIHdpdGggdGhyZWUgbWFpbiBjaG9pY2VzOgotKioKLSoqIDEu
IGJ1ZmZlciBhbGwgc3VibWVzc2FnZSBkYXRhIGluIGEgdGVtcG9yYXJ5IGJ1ZmZlciwgdGhlbiBj
b3B5IGl0IGV4YWN0bHkKLSoqICAgIG9uY2UgaW50byB0aGUgb3V0cHV0IGJ1ZmZlci4KLSoqCi0q
KiAyLiBhdHRlbXB0IHRvIGJ1ZmZlciBkYXRhIGRpcmVjdGx5IGludG8gdGhlIG91dHB1dCBidWZm
ZXIsIGVzdGltYXRpbmcgaG93Ci0qKiAgICBtYW55IGJ5dGVzIGVhY2ggbGVuZ3RoIHdpbGwgdGFr
ZS4gIFdoZW4gb3VyIGd1ZXNzZXMgYXJlIHdyb25nLCB1c2UKLSoqICAgIG1lbW1vdmUoKSB0byBn
cm93IG9yIHNocmluayB0aGUgYWxsb3R0ZWQgc3BhY2UuCi0qKgotKiogMy4gYnVmZmVyIGRpcmVj
dGx5IGludG8gdGhlIG91dHB1dCBidWZmZXIsIGFsbG9jYXRpbmcgYSBtYXggbGVuZ3RoCi0qKiAg
ICBhaGVhZC1vZi10aW1lIGZvciBlYWNoIHN1Ym1lc3NhZ2UgbGVuZ3RoLiAgSWYgd2Ugb3ZlcmFs
bG9jYXRlZCwgd2Ugd2FzdGUKLSoqICAgIHNwYWNlLCBidXQgbm8gbWVtY3B5KCkgb3IgbWVtbW92
ZSgpIGlzIHJlcXVpcmVkLiAgVGhpcyBhcHByb2FjaCByZXF1aXJlcwotKiogICAgZGVmaW5pbmcg
YSBtYXhpbXVtIHNpemUgZm9yIHN1Ym1lc3NhZ2VzIGFuZCByZWplY3Rpbmcgc3VibWVzc2FnZXMg
dGhhdAotKiogICAgZXhjZWVkIHRoYXQgc2l6ZS4KLSoqCi0qKiAoMikgYW5kICgzKSBoYXZlIHRo
ZSBwb3RlbnRpYWwgdG8gaGF2ZSBiZXR0ZXIgcGVyZm9ybWFuY2UsIGJ1dCB0aGV5IGFyZSBtb3Jl
Ci0qKiBjb21wbGljYXRlZCBhbmQgc3VidGxlIHRvIGltcGxlbWVudDoKLSoqCi0qKiAgICgzKSBy
ZXF1aXJlcyBtYWtpbmcgYW4gYXJiaXRyYXJ5IGNob2ljZSBvZiB0aGUgbWF4aW11bSBtZXNzYWdl
IHNpemU7IGl0Ci0qKiAgICAgICB3YXN0ZXMgc3BhY2Ugd2hlbiBzdWJtZXNzYWdlcyBhcmUgc2hv
cnRlciB0aGFuIHRoaXMgYW5kIGZhaWxzCi0qKiAgICAgICBjb21wbGV0ZWx5IHdoZW4gdGhleSBh
cmUgbG9uZ2VyLiAgVGhpcyBtYWtlcyBpdCBtb3JlIGZpbmlja3kgYW5kCi0qKiAgICAgICByZXF1
aXJlcyBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoZSBpbnB1dC4gIEl0IGFsc28gbWFrZXMgaXQg
aW1wb3NzaWJsZQotKiogICAgICAgdG8gcGVyZmVjdGx5IG1hdGNoIHRoZSBvdXRwdXQgb2YgcmVm
ZXJlbmNlIGVuY29kZXJzIHRoYXQgYWx3YXlzIHVzZSB0aGUKLSoqICAgICAgIG9wdGltYWwgYW1v
dW50IG9mIHNwYWNlIGZvciBlYWNoIGxlbmd0aC4KLSoqCi0qKiAgICgyKSByZXF1aXJlcyBndWVz
c2luZyB0aGUgdGhlIHNpemUgdXBmcm9udCwgYW5kIGlmIG11bHRpcGxlIGxlbmd0aHMgYXJlCi0q
KiAgICAgICBndWVzc2VkIHdyb25nIHRoZSBtaW5pbXVtIHJlcXVpcmVkIG51bWJlciBvZiBtZW1t
b3ZlKCkgb3BlcmF0aW9ucyBtYXkKLSoqICAgICAgIGJlIGNvbXBsaWNhdGVkIHRvIGNvbXB1dGUg
Y29ycmVjdGx5LiAgSW1wbGVtZW50ZWQgcHJvcGVybHksIGl0IG1heSBoYXZlCi0qKiAgICAgICBh
IHVzZWZ1bCBhbW9ydGl6ZWQgb3IgYXZlcmFnZSBjb3N0LCBidXQgbW9yZSBpbnZlc3RpZ2F0aW9u
IGlzIHJlcXVpcmVkCi0qKiAgICAgICB0byBkZXRlcm1pbmUgdGhpcyBhbmQgd2hhdCB0aGUgb3B0
aW1hbCBhbGdvcml0aG0gaXMgdG8gYWNoaWV2ZSBpdC4KLSoqCi0qKiAgICgxKSBtYWtlcyB5b3Ug
YWx3YXlzIHBheSBmb3IgZXhhY3RseSBvbmUgY29weSwgYnV0IGl0cyBpbXBsZW1lbnRhdGlvbiBp
cwotKiogICAgICAgdGhlIHNpbXBsZXN0IGFuZCBpdHMgcGVyZm9ybWFuY2UgaXMgcHJlZGljdGFi
bGUuCi0qKgotKiogU28gZm9yIG5vdywgd2UgaW1wbGVtZW50ICgxKSBvbmx5LiAgSWYgd2Ugd2lz
aCB0byBvcHRpbWl6ZSBsYXRlciwgd2Ugc2hvdWxkCi0qKiBiZSBhYmxlIHRvIGRvIGl0IHdpdGhv
dXQgYWZmZWN0aW5nIHVzZXJzLgotKioKLSoqIFRoZSBzdHJhdGVneSBpcyB0byBidWZmZXIgdGhl
IHNlZ21lbnRzIG9mIGRhdGEgdGhhdCBkbyAqbm90KiBkZXBlbmQgb24KLSoqIHVua25vd24gbGVu
Z3RocyBpbiBvbmUgYnVmZmVyLCBhbmQga2VlcCBhIHNlcGFyYXRlIGJ1ZmZlciBvZiBzZWdtZW50
IHBvaW50ZXJzCi0qKiBhbmQgbGVuZ3Rocy4gIFdoZW4gdGhlIHRvcC1sZXZlbCBzdWJtZXNzYWdl
IGVuZHMsIHdlIGNhbiBnbyBiZWdpbm5pbmcgdG8gZW5kLAotKiogYWx0ZXJuYXRpbmcgdGhlIHdy
aXRpbmcgb2YgbGVuZ3RocyB3aXRoIG1lbWNweSgpIG9mIHRoZSByZXN0IG9mIHRoZSBkYXRhLgot
KiogQXQgdGhlIHRvcCBsZXZlbCB0aG91Z2gsIG5vIGJ1ZmZlcmluZyBpcyByZXF1aXJlZC4KLSov
Ci0KLQotCi0vKiBUaGUgb3V0cHV0IGJ1ZmZlciBpcyBkaXZpZGVkIGludG8gc2VnbWVudHM7IGEg
c2VnbWVudCBpcyBhIHN0cmluZyBvZiBkYXRhCi0gKiB0aGF0IGlzICJyZWFkeSB0byBnbyIgLS0g
aXQgZG9lcyBub3QgbmVlZCBhbnkgdmFyaW50IGxlbmd0aHMgaW5zZXJ0ZWQgaW50bwotICogdGhl
IG1pZGRsZS4gIFRoZSBzZWFtcyBiZXR3ZWVuIHNlZ21lbnRzIGFyZSB3aGVyZSB2YXJpbnRzIHdp
bGwgYmUgaW5zZXJ0ZWQKLSAqIG9uY2UgdGhleSBhcmUga25vd24uCi0gKgotICogV2UgYWxzbyB1
c2UgdGhlIGNvbmNlcHQgb2YgYSAicnVuIiwgd2hpY2ggaXMgYSByYW5nZSBvZiBlbmNvZGVkIGJ5
dGVzIHRoYXQKLSAqIG9jY3VyIGF0IGEgc2luZ2xlIHN1Ym1lc3NhZ2UgbGV2ZWwuICBFdmVyeSBz
ZWdtZW50IGNvbnRhaW5zIG9uZSBvciBtb3JlIHJ1bnMuCi0gKgotICogQSBzZWdtZW50IGNhbiBz
cGFuIG1lc3NhZ2VzLiAgQ29uc2lkZXI6Ci0gKgotICogICAgICAgICAgICAgICAgICAuLS1TdWJt
ZXNzYWdlIGxlbmd0aHMtLS0tLS0tLS0uCi0gKiAgICAgICAgICAgICAgICAgIHwgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgIHwKLSAqICAgICAgICAgICAgICAgICAgfCAgICAgICBWICAgICAg
ICAgICAgICAgICAgICAgVgotICogICAgICAgICAgICAgICAgICBWICAgICAgfCB8LS0tLS0tLS0t
LS0tLS0tICAgIHwgfC0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTdWJtZXNzYWdlczogICAgfCB8LS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRvcC1sZXZl
bCBtc2c6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICoKLSAqIFNlZ21lbnRzOiAgICAgICAgICAtLS0tLSAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0tLQotICogUnVuczogICAgICAgICAgICAgICotLS0t
ICAgKi0tLS0tLS0tLS0tLS0tKi0tLSAgICotLS0tLS0tLS0tLS0tLS0tCi0gKiAoKiBtYXJrcyB0
aGUgc3RhcnQpCi0gKgotICogTm90ZSB0aGF0IHRoZSB0b3AtbGV2ZWwgbWVuc3NhZ2UgaXMgbm90
IGluIGFueSBzZWdtZW50IGJlY2F1c2UgaXQgZG9lcyBub3QKLSAqIGhhdmUgYW55IGxlbmd0aCBw
cmVjZWRpbmcgaXQuCi0gKgotICogQSBzZWdtZW50IGlzIG9ubHkgaW50ZXJydXB0ZWQgd2hlbiBh
bm90aGVyIGxlbmd0aCBuZWVkcyB0byBiZSBpbnNlcnRlZC4gIFNvCi0gKiBvYnNlcnZlIGhvdyB0
aGUgc2Vjb25kIHNlZ21lbnQgc3BhbnMgYm90aCB0aGUgaW5uZXIgc3VibWVzc2FnZSBhbmQgcGFy
dCBvZgotICogdGhlIG5leHQgZW5jbG9zaW5nIG1lc3NhZ2UuICovCi10eXBlZGVmIHN0cnVjdCB7
Ci0gIHVpbnQzMl90IG1zZ2xlbjsgIC8qIFRoZSBsZW5ndGggdG8gdmFyaW50LWVuY29kZSBiZWZv
cmUgdGhpcyBzZWdtZW50LiAqLwotICB1aW50MzJfdCBzZWdsZW47ICAvKiBMZW5ndGggb2YgdGhl
IHNlZ21lbnQuICovCi19IHVwYl9wYl9lbmNvZGVyX3NlZ21lbnQ7Ci0KLXN0cnVjdCB1cGJfcGJf
ZW5jb2RlciB7Ci0gIHVwYl9lbnYgKmVudjsKLQotICAvKiBPdXIgaW5wdXQgYW5kIG91dHB1dC4g
Ki8KLSAgdXBiX3NpbmsgaW5wdXRfOwotICB1cGJfYnl0ZXNzaW5rICpvdXRwdXRfOwotCi0gIC8q
IFRoZSAic3ViY2xvc3VyZSIgLS0gdXNlZCBhcyB0aGUgaW5uZXIgY2xvc3VyZSBhcyBwYXJ0IG9m
IHRoZSBieXRlc3NpbmsKLSAgICogcHJvdG9jb2wuICovCi0gIHZvaWQgKnN1YmM7Ci0KLSAgLyog
VGhlIG91dHB1dCBidWZmZXIgYW5kIGxpbWl0LCBhbmQgb3VyIGN1cnJlbnQgd3JpdGUgcG9zaXRp
b24uICAiYnVmIgotICAgKiBpbml0aWFsbHkgcG9pbnRzIHRvICJpbml0YnVmIiwgYnV0IGlzIGR5
bmFtaWNhbGx5IGFsbG9jYXRlZCBpZiB3ZSBuZWVkIHRvCi0gICAqIGdyb3cgYmV5b25kIHRoZSBp
bml0aWFsIHNpemUuICovCi0gIGNoYXIgKmJ1ZiwgKnB0ciwgKmxpbWl0OwotCi0gIC8qIFRoZSBi
ZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgcnVuLCBvciB1bmRlZmluZWQgaWYgd2UgYXJlIGF0IHRo
ZSB0b3AKLSAgICogbGV2ZWwuICovCi0gIGNoYXIgKnJ1bmJlZ2luOwotCi0gIC8qIFRoZSBsaXN0
IG9mIHNlZ21lbnRzIHdlIGFyZSBhY2N1bXVsYXRpbmcuICovCi0gIHVwYl9wYl9lbmNvZGVyX3Nl
Z21lbnQgKnNlZ2J1ZiwgKnNlZ3B0ciwgKnNlZ2xpbWl0OwotCi0gIC8qIFRoZSBzdGFjayBvZiBl
bmNsb3Npbmcgc3VibWVzc2FnZXMuICBFYWNoIGVudHJ5IGluIHRoZSBzdGFjayBwb2ludHMgdG8g
dGhlCi0gICAqIHNlZ21lbnQgd2hlcmUgdGhpcyBzdWJtZXNzYWdlJ3MgbGVuZ3RoIGlzIGJlaW5n
IGFjY3VtdWxhdGVkLiAqLwotICBpbnQgKnN0YWNrLCAqdG9wLCAqc3RhY2tsaW1pdDsKLQotICAv
KiBEZXB0aCBvZiBzdGFydG1zZy9lbmRtc2cgY2FsbHMuICovCi0gIGludCBkZXB0aDsKLX07Ci0K
LS8qIGxvdy1sZXZlbCBidWZmZXJpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIExvdy1sZXZlbCBmdW5jdGlvbnMgZm9yIGlu
dGVyYWN0aW5nIHdpdGggdGhlIG91dHB1dCBidWZmZXIuICovCi0KLS8qIFRPRE8oaGFiZXJtYW4p
OiBoYW5kbGUgcHVzaGJhY2sgKi8KLXN0YXRpYyB2b2lkIHB1dGJ1Zih1cGJfcGJfZW5jb2RlciAq
ZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKSB7Ci0gIHNpemVfdCBuID0gdXBiX2J5dGVz
c2lua19wdXRidWYoZS0+b3V0cHV0XywgZS0+c3ViYywgYnVmLCBsZW4sIE5VTEwpOwotICBVUEJf
QVNTRVJUX1ZBUihuLCBuID09IGxlbik7Ci19Ci0KLXN0YXRpYyB1cGJfcGJfZW5jb2Rlcl9zZWdt
ZW50ICp0b3AodXBiX3BiX2VuY29kZXIgKmUpIHsKLSAgcmV0dXJuICZlLT5zZWdidWZbKmUtPnRv
cF07Ci19Ci0KLS8qIENhbGwgdG8gZW5zdXJlIHRoYXQgYXQgbGVhc3QgImJ5dGVzIiBieXRlcyBh
cmUgYXZhaWxhYmxlIGZvciB3cml0aW5nIGF0Ci0gKiBlLT5wdHIuICBSZXR1cm5zIGZhbHNlIGlm
IHRoZSBieXRlcyBjb3VsZCBub3QgYmUgYWxsb2NhdGVkLiAqLwotc3RhdGljIGJvb2wgcmVzZXJ2
ZSh1cGJfcGJfZW5jb2RlciAqZSwgc2l6ZV90IGJ5dGVzKSB7Ci0gIGlmICgoc2l6ZV90KShlLT5s
aW1pdCAtIGUtPnB0cikgPCBieXRlcykgewotICAgIC8qIEdyb3cgYnVmZmVyLiAqLwotICAgIGNo
YXIgKm5ld19idWY7Ci0gICAgc2l6ZV90IG5lZWRlZCA9IGJ5dGVzICsgKGUtPnB0ciAtIGUtPmJ1
Zik7Ci0gICAgc2l6ZV90IG9sZF9zaXplID0gZS0+bGltaXQgLSBlLT5idWY7Ci0KLSAgICBzaXpl
X3QgbmV3X3NpemUgPSBvbGRfc2l6ZTsKLQotICAgIHdoaWxlIChuZXdfc2l6ZSA8IG5lZWRlZCkg
ewotICAgICAgbmV3X3NpemUgKj0gMjsKLSAgICB9Ci0KLSAgICBuZXdfYnVmID0gdXBiX2Vudl9y
ZWFsbG9jKGUtPmVudiwgZS0+YnVmLCBvbGRfc2l6ZSwgbmV3X3NpemUpOwotCi0gICAgaWYgKG5l
d19idWYgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGUtPnB0
ciA9IG5ld19idWYgKyAoZS0+cHRyIC0gZS0+YnVmKTsKLSAgICBlLT5ydW5iZWdpbiA9IG5ld19i
dWYgKyAoZS0+cnVuYmVnaW4gLSBlLT5idWYpOwotICAgIGUtPmxpbWl0ID0gbmV3X2J1ZiArIG5l
d19zaXplOwotICAgIGUtPmJ1ZiA9IG5ld19idWY7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0K
LQotLyogQ2FsbCB3aGVuICJieXRlcyIgYnl0ZXMgaGF2ZSBiZWVuIHdyaXR0ZSBhdCBlLT5wdHIu
ICBUaGUgY2FsbGVyICptdXN0KiBoYXZlCi0gKiBwcmV2aW91c2x5IGNhbGxlZCByZXNlcnZlKCkg
d2l0aCBhdCBsZWFzdCB0aGlzIG1hbnkgYnl0ZXMuICovCi1zdGF0aWMgdm9pZCBlbmNvZGVyX2Fk
dmFuY2UodXBiX3BiX2VuY29kZXIgKmUsIHNpemVfdCBieXRlcykgewotICBhc3NlcnQoKHNpemVf
dCkoZS0+bGltaXQgLSBlLT5wdHIpID49IGJ5dGVzKTsKLSAgZS0+cHRyICs9IGJ5dGVzOwotfQot
Ci0vKiBDYWxsIHdoZW4gYWxsIG9mIHRoZSBieXRlcyBmb3IgYSBoYW5kbGVyIGhhdmUgYmVlbiB3
cml0dGVuLiAgRmx1c2hlcyB0aGUKLSAqIGJ5dGVzIGlmIHBvc3NpYmxlIGFuZCBuZWNlc3Nhcnks
IHJldHVybmluZyBmYWxzZSBpZiB0aGlzIGZhaWxlZC4gKi8KLXN0YXRpYyBib29sIGNvbW1pdCh1
cGJfcGJfZW5jb2RlciAqZSkgewotICBpZiAoIWUtPnRvcCkgewotICAgIC8qIFdlIGFyZW4ndCBp
bnNpZGUgYSBkZWxpbWl0ZWQgcmVnaW9uLiAgRmx1c2ggb3VyIGFjY3VtdWxhdGVkIGJ5dGVzIHRv
Ci0gICAgICogdGhlIG91dHB1dC4KLSAgICAgKgotICAgICAqIFRPRE8oaGFiZXJtYW4pOiBpbiB0
aGUgZnV0dXJlIHdlIG1heSB3YW50IHRvIGRlbGF5IGZsdXNoaW5nIGZvcgotICAgICAqIGVmZmlj
aWVuY3kgcmVhc29ucy4gKi8KLSAgICBwdXRidWYoZSwgZS0+YnVmLCBlLT5wdHIgLSBlLT5idWYp
OwotICAgIGUtPnB0ciA9IGUtPmJ1ZjsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi0vKiBX
cml0ZXMgdGhlIGdpdmVuIGJ5dGVzIHRvIHRoZSBidWZmZXIsIGhhbmRsaW5nIHJlc2VydmUvYWR2
YW5jZS4gKi8KLXN0YXRpYyBib29sIGVuY29kZV9ieXRlcyh1cGJfcGJfZW5jb2RlciAqZSwgY29u
c3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikgewotICBpZiAoIXJlc2VydmUoZSwgbGVuKSkgewot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIG1lbWNweShlLT5wdHIsIGRhdGEsIGxlbik7Ci0g
IGVuY29kZXJfYWR2YW5jZShlLCBsZW4pOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotLyogRmluaXNo
IHRoZSBjdXJyZW50IHJ1biBieSBhZGRpbmcgdGhlIHJ1biB0b3RhbHMgdG8gdGhlIHNlZ21lbnQg
YW5kIG1lc3NhZ2UKLSAqIGxlbmd0aC4gKi8KLXN0YXRpYyB2b2lkIGFjY3VtdWxhdGUodXBiX3Bi
X2VuY29kZXIgKmUpIHsKLSAgc2l6ZV90IHJ1bl9sZW47Ci0gIGFzc2VydChlLT5wdHIgPj0gZS0+
cnVuYmVnaW4pOwotICBydW5fbGVuID0gZS0+cHRyIC0gZS0+cnVuYmVnaW47Ci0gIGUtPnNlZ3B0
ci0+c2VnbGVuICs9IHJ1bl9sZW47Ci0gIHRvcChlKS0+bXNnbGVuICs9IHJ1bl9sZW47Ci0gIGUt
PnJ1bmJlZ2luID0gZS0+cHRyOwotfQotCi0vKiBDYWxsIHRvIGluZGljYXRlIHRoZSBzdGFydCBv
ZiBkZWxpbWl0ZWQgcmVnaW9uIGZvciB3aGljaCB0aGUgZnVsbCBsZW5ndGggaXMKLSAqIG5vdCB5
ZXQga25vd24uICBBbGwgZGF0YSB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIHRoZSBsZW5ndGggaXMg
a25vd24uCi0gKiBEZWxpbWl0ZWQgcmVnaW9ucyBtYXkgYmUgbmVzdGVkOyB0aGVpciBsZW5ndGhz
IHdpbGwgYWxsIGJlIHRyYWNrZWQgcHJvcGVybHkuICovCi1zdGF0aWMgYm9vbCBzdGFydF9kZWxp
bSh1cGJfcGJfZW5jb2RlciAqZSkgewotICBpZiAoZS0+dG9wKSB7Ci0gICAgLyogV2UgYXJlIGFs
cmVhZHkgYnVmZmVyaW5nLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHNlZ21lbnQgYW5kIHB1c2ggaXQg
b24gdGhlCi0gICAgICogc3RhY2suICovCi0gICAgYWNjdW11bGF0ZShlKTsKLQotICAgIGlmICgr
K2UtPnRvcCA9PSBlLT5zdGFja2xpbWl0KSB7Ci0gICAgICAvKiBUT0RPKGhhYmVybWFuKTogZ3Jv
dyBzdGFjaz8gKi8KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoKytlLT5z
ZWdwdHIgPT0gZS0+c2VnbGltaXQpIHsKLSAgICAgIC8qIEdyb3cgc2VnbWVudCBidWZmZXIuICov
Ci0gICAgICBzaXplX3Qgb2xkX3NpemUgPQotICAgICAgICAgIChlLT5zZWdsaW1pdCAtIGUtPnNl
Z2J1ZikgKiBzaXplb2YodXBiX3BiX2VuY29kZXJfc2VnbWVudCk7Ci0gICAgICBzaXplX3QgbmV3
X3NpemUgPSBvbGRfc2l6ZSAqIDI7Ci0gICAgICB1cGJfcGJfZW5jb2Rlcl9zZWdtZW50ICpuZXdf
YnVmID0KLSAgICAgICAgICB1cGJfZW52X3JlYWxsb2MoZS0+ZW52LCBlLT5zZWdidWYsIG9sZF9z
aXplLCBuZXdfc2l6ZSk7Ci0KLSAgICAgIGlmIChuZXdfYnVmID09IE5VTEwpIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBlLT5zZWdwdHIgPSBuZXdfYnVmICsgKGUt
PnNlZ3B0ciAtIGUtPnNlZ2J1Zik7Ci0gICAgICBlLT5zZWdsaW1pdCA9IG5ld19idWYgKyAobmV3
X3NpemUgLyBzaXplb2YodXBiX3BiX2VuY29kZXJfc2VnbWVudCkpOwotICAgICAgZS0+c2VnYnVm
ID0gbmV3X2J1ZjsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogV2Ugd2VyZSBwcmV2aW91c2x5
IGF0IHRoZSB0b3AgbGV2ZWwsIHN0YXJ0IGJ1ZmZlcmluZy4gKi8KLSAgICBlLT5zZWdwdHIgPSBl
LT5zZWdidWY7Ci0gICAgZS0+dG9wID0gZS0+c3RhY2s7Ci0gICAgZS0+cnVuYmVnaW4gPSBlLT5w
dHI7Ci0gIH0KLQotICAqZS0+dG9wID0gZS0+c2VncHRyIC0gZS0+c2VnYnVmOwotICBlLT5zZWdw
dHItPnNlZ2xlbiA9IDA7Ci0gIGUtPnNlZ3B0ci0+bXNnbGVuID0gMDsKLQotICByZXR1cm4gdHJ1
ZTsKLX0KLQotLyogQ2FsbCB0byBpbmRpY2F0ZSB0aGUgZW5kIG9mIGEgZGVsaW1pdGVkIHJlZ2lv
bi4gIFdlIG5vdyBrbm93IHRoZSBsZW5ndGggb2YKLSAqIHRoZSBkZWxpbWl0ZWQgcmVnaW9uLiAg
SWYgd2UgYXJlIG5vdCBuZXN0ZWQgaW5zaWRlIGFueSBvdGhlciBkZWxpbWl0ZWQKLSAqIHJlZ2lv
bnMsIHdlIGNhbiBub3cgZW1pdCBhbGwgb2YgdGhlIGJ1ZmZlcmVkIGRhdGEgd2UgYWNjdW11bGF0
ZWQuICovCi1zdGF0aWMgYm9vbCBlbmRfZGVsaW0odXBiX3BiX2VuY29kZXIgKmUpIHsKLSAgc2l6
ZV90IG1zZ2xlbjsKLSAgYWNjdW11bGF0ZShlKTsKLSAgbXNnbGVuID0gdG9wKGUpLT5tc2dsZW47
Ci0KLSAgaWYgKGUtPnRvcCA9PSBlLT5zdGFjaykgewotICAgIC8qIEFsbCBsZW5ndGhzIGFyZSBu
b3cgYXZhaWxhYmxlLCBlbWl0IGFsbCBidWZmZXJlZCBkYXRhLiAqLwotICAgIGNoYXIgYnVmW1VQ
Ql9QQl9WQVJJTlRfTUFYX0xFTl07Ci0gICAgdXBiX3BiX2VuY29kZXJfc2VnbWVudCAqczsKLSAg
ICBjb25zdCBjaGFyICpwdHIgPSBlLT5idWY7Ci0gICAgZm9yIChzID0gZS0+c2VnYnVmOyBzIDw9
IGUtPnNlZ3B0cjsgcysrKSB7Ci0gICAgICBzaXplX3QgbGVuYnl0ZXMgPSB1cGJfdmVuY29kZTY0
KHMtPm1zZ2xlbiwgYnVmKTsKLSAgICAgIHB1dGJ1ZihlLCBidWYsIGxlbmJ5dGVzKTsKLSAgICAg
IHB1dGJ1ZihlLCBwdHIsIHMtPnNlZ2xlbik7Ci0gICAgICBwdHIgKz0gcy0+c2VnbGVuOwotICAg
IH0KLQotICAgIGUtPnB0ciA9IGUtPmJ1ZjsKLSAgICBlLT50b3AgPSBOVUxMOwotICB9IGVsc2Ug
ewotICAgIC8qIE5lZWQgdG8ga2VlcCBidWZmZXJpbmc7IHByb3BhZ2F0ZSBsZW5ndGggaW5mbyBp
bnRvIGVuY2xvc2luZwotICAgICAqIHN1Ym1lc3NhZ2VzLiAqLwotICAgIC0tZS0+dG9wOwotICAg
IHRvcChlKS0+bXNnbGVuICs9IG1zZ2xlbiArIHVwYl92YXJpbnRfc2l6ZShtc2dsZW4pOwotICB9
Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLyogdGFnX3QgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyog
QSBwcmVjb21wdXRlZCAocHJlLWVuY29kZWQpIHRhZyBhbmQgbGVuZ3RoLiAqLwotCi10eXBlZGVm
IHN0cnVjdCB7Ci0gIHVpbnQ4X3QgYnl0ZXM7Ci0gIGNoYXIgdGFnWzddOwotfSB0YWdfdDsKLQot
LyogQWxsb2NhdGVzIGEgbmV3IHRhZyBmb3IgdGhpcyBmaWVsZCwgYW5kIHNldHMgaXQgaW4gdGhl
c2UgaGFuZGxlcmF0dHIuICovCi1zdGF0aWMgdm9pZCBuZXdfdGFnKHVwYl9oYW5kbGVycyAqaCwg
Y29uc3QgdXBiX2ZpZWxkZGVmICpmLCB1cGJfd2lyZXR5cGVfdCB3dCwKLSAgICAgICAgICAgICAg
ICAgICAgdXBiX2hhbmRsZXJhdHRyICphdHRyKSB7Ci0gIHVpbnQzMl90IG4gPSB1cGJfZmllbGRk
ZWZfbnVtYmVyKGYpOwotCi0gIHRhZ190ICp0YWcgPSB1cGJfZ21hbGxvYyhzaXplb2YodGFnX3Qp
KTsKLSAgdGFnLT5ieXRlcyA9IHVwYl92ZW5jb2RlNjQoKG4gPDwgMykgfCB3dCwgdGFnLT50YWcp
OwotCi0gIHVwYl9oYW5kbGVyYXR0cl9pbml0KGF0dHIpOwotICB1cGJfaGFuZGxlcmF0dHJfc2V0
aGFuZGxlcmRhdGEoYXR0ciwgdGFnKTsKLSAgdXBiX2hhbmRsZXJzX2FkZGNsZWFudXAoaCwgdGFn
LCB1cGJfZ2ZyZWUpOwotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVfdGFnKHVwYl9wYl9lbmNvZGVy
ICplLCBjb25zdCB0YWdfdCAqdGFnKSB7Ci0gIHJldHVybiBlbmNvZGVfYnl0ZXMoZSwgdGFnLT50
YWcsIHRhZy0+Ynl0ZXMpOwotfQotCi0KLS8qIGVuY29kaW5nIG9mIHdpcmUgdHlwZXMgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRp
YyBib29sIGVuY29kZV9maXhlZDY0KHVwYl9wYl9lbmNvZGVyICplLCB1aW50NjRfdCB2YWwpIHsK
LSAgLyogVE9ETyhoYWJlcm1hbik6IGJ5dGUtc3dhcCBmb3IgYmlnIGVuZGlhbi4gKi8KLSAgcmV0
dXJuIGVuY29kZV9ieXRlcyhlLCAmdmFsLCBzaXplb2YodWludDY0X3QpKTsKLX0KLQotc3RhdGlj
IGJvb2wgZW5jb2RlX2ZpeGVkMzIodXBiX3BiX2VuY29kZXIgKmUsIHVpbnQzMl90IHZhbCkgewot
ICAvKiBUT0RPKGhhYmVybWFuKTogYnl0ZS1zd2FwIGZvciBiaWcgZW5kaWFuLiAqLwotICByZXR1
cm4gZW5jb2RlX2J5dGVzKGUsICZ2YWwsIHNpemVvZih1aW50MzJfdCkpOwotfQotCi1zdGF0aWMg
Ym9vbCBlbmNvZGVfdmFyaW50KHVwYl9wYl9lbmNvZGVyICplLCB1aW50NjRfdCB2YWwpIHsKLSAg
aWYgKCFyZXNlcnZlKGUsIFVQQl9QQl9WQVJJTlRfTUFYX0xFTikpIHsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLQotICBlbmNvZGVyX2FkdmFuY2UoZSwgdXBiX3ZlbmNvZGU2NCh2YWwsIGUtPnB0
cikpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHVpbnQ2NF90IGRibDJ1aW50NjQoZG91
YmxlIGQpIHsKLSAgdWludDY0X3QgcmV0OwotICBtZW1jcHkoJnJldCwgJmQsIHNpemVvZih1aW50
NjRfdCkpOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdWludDMyX3QgZmx0MnVpbnQzMihm
bG9hdCBkKSB7Ci0gIHVpbnQzMl90IHJldDsKLSAgbWVtY3B5KCZyZXQsICZkLCBzaXplb2YodWlu
dDMyX3QpKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotCi0vKiBlbmNvZGluZyBvZiBwcm90byB0eXBl
cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ci1zdGF0aWMgYm9vbCBzdGFydG1zZyh2b2lkICpjLCBjb25zdCB2b2lkICpoZCkgewotICB1cGJf
cGJfZW5jb2RlciAqZSA9IGM7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBpZiAoZS0+ZGVwdGgrKyA9
PSAwKSB7Ci0gICAgdXBiX2J5dGVzc2lua19zdGFydChlLT5vdXRwdXRfLCAwLCAmZS0+c3ViYyk7
Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGVuZG1zZyh2b2lkICpjLCBj
b25zdCB2b2lkICpoZCwgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0gIHVwYl9wYl9lbmNvZGVyICpl
ID0gYzsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIFVQQl9VTlVTRUQoc3RhdHVzKTsKLSAgaWYgKC0t
ZS0+ZGVwdGggPT0gMCkgewotICAgIHVwYl9ieXRlc3NpbmtfZW5kKGUtPm91dHB1dF8pOwotICB9
Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCAqZW5jb2RlX3N0YXJ0ZGVsaW1maWVs
ZCh2b2lkICpjLCBjb25zdCB2b2lkICpoZCkgewotICBib29sIG9rID0gZW5jb2RlX3RhZyhjLCBo
ZCkgJiYgY29tbWl0KGMpICYmIHN0YXJ0X2RlbGltKGMpOwotICByZXR1cm4gb2sgPyBjIDogVVBC
X0JSRUFLOwotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVfZW5kZGVsaW1maWVsZCh2b2lkICpjLCBj
b25zdCB2b2lkICpoZCkgewotICBVUEJfVU5VU0VEKGhkKTsKLSAgcmV0dXJuIGVuZF9kZWxpbShj
KTsKLX0KLQotc3RhdGljIHZvaWQgKmVuY29kZV9zdGFydGdyb3VwKHZvaWQgKmMsIGNvbnN0IHZv
aWQgKmhkKSB7Ci0gIHJldHVybiAoZW5jb2RlX3RhZyhjLCBoZCkgJiYgY29tbWl0KGMpKSA/IGMg
OiBVUEJfQlJFQUs7Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZV9lbmRncm91cCh2b2lkICpjLCBj
b25zdCB2b2lkICpoZCkgewotICByZXR1cm4gZW5jb2RlX3RhZyhjLCBoZCkgJiYgY29tbWl0KGMp
OwotfQotCi1zdGF0aWMgdm9pZCAqZW5jb2RlX3N0YXJ0c3RyKHZvaWQgKmMsIGNvbnN0IHZvaWQg
KmhkLCBzaXplX3Qgc2l6ZV9oaW50KSB7Ci0gIFVQQl9VTlVTRUQoc2l6ZV9oaW50KTsKLSAgcmV0
dXJuIGVuY29kZV9zdGFydGRlbGltZmllbGQoYywgaGQpOwotfQotCi1zdGF0aWMgc2l6ZV90IGVu
Y29kZV9zdHJidWYodm9pZCAqYywgY29uc3Qgdm9pZCAqaGQsIGNvbnN0IGNoYXIgKmJ1ZiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBjb25zdCB1cGJfYnVmaGFuZGxl
ICpoKSB7Ci0gIFVQQl9VTlVTRUQoaGQpOwotICBVUEJfVU5VU0VEKGgpOwotICByZXR1cm4gZW5j
b2RlX2J5dGVzKGMsIGJ1ZiwgbGVuKSA/IGxlbiA6IDA7Ci19Ci0KLSNkZWZpbmUgVCh0eXBlLCBj
dHlwZSwgY29udmVydCwgZW5jb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIHN0YXRpYyBib29sIGVuY29kZV9zY2FsYXJfIyN0eXBlKHZvaWQgKmUsIGNvbnN0IHZvaWQg
KmhkLCBjdHlwZSB2YWwpIHsgXAotICAgIHJldHVybiBlbmNvZGVfdGFnKGUsIGhkKSAmJiBlbmNv
ZGUoZSwgKGNvbnZlcnQpKHZhbCkpICYmIGNvbW1pdChlKTsgIFwKLSAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIHN0YXRpYyBib29sIGVuY29kZV9wYWNrZWRfIyN0eXBlKHZvaWQgKmUsIGNvbnN0IHZvaWQg
KmhkLCBjdHlwZSB2YWwpIHsgXAotICAgIFVQQl9VTlVTRUQoaGQpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gZW5jb2Rl
KGUsIChjb252ZXJ0KSh2YWwpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIH0KLQotVChkb3VibGUsICAgZG91YmxlLCAgIGRibDJ1aW50NjQsICAgZW5jb2RlX2ZpeGVk
NjQpCi1UKGZsb2F0LCAgICBmbG9hdCwgICAgZmx0MnVpbnQzMiwgICBlbmNvZGVfZml4ZWQzMikK
LVQoaW50NjQsICAgIGludDY0X3QsICB1aW50NjRfdCwgICAgIGVuY29kZV92YXJpbnQpCi1UKGlu
dDMyLCAgICBpbnQzMl90LCAgdWludDMyX3QsICAgICBlbmNvZGVfdmFyaW50KQotVChmaXhlZDY0
LCAgdWludDY0X3QsIHVpbnQ2NF90LCAgICAgZW5jb2RlX2ZpeGVkNjQpCi1UKGZpeGVkMzIsICB1
aW50MzJfdCwgdWludDMyX3QsICAgICBlbmNvZGVfZml4ZWQzMikKLVQoYm9vbCwgICAgIGJvb2ws
ICAgICBib29sLCAgICAgICAgIGVuY29kZV92YXJpbnQpCi1UKHVpbnQzMiwgICB1aW50MzJfdCwg
dWludDMyX3QsICAgICBlbmNvZGVfdmFyaW50KQotVCh1aW50NjQsICAgdWludDY0X3QsIHVpbnQ2
NF90LCAgICAgZW5jb2RlX3ZhcmludCkKLVQoZW51bSwgICAgIGludDMyX3QsICB1aW50MzJfdCwg
ICAgIGVuY29kZV92YXJpbnQpCi1UKHNmaXhlZDMyLCBpbnQzMl90LCAgdWludDMyX3QsICAgICBl
bmNvZGVfZml4ZWQzMikKLVQoc2ZpeGVkNjQsIGludDY0X3QsICB1aW50NjRfdCwgICAgIGVuY29k
ZV9maXhlZDY0KQotVChzaW50MzIsICAgaW50MzJfdCwgIHVwYl96emVuY18zMiwgZW5jb2RlX3Zh
cmludCkKLVQoc2ludDY0LCAgIGludDY0X3QsICB1cGJfenplbmNfNjQsIGVuY29kZV92YXJpbnQp
Ci0KLSN1bmRlZiBUCi0KLQotLyogY29kZSB0byBidWlsZCB0aGUgaGFuZGxlcnMgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQg
bmV3aGFuZGxlcnNfY2FsbGJhY2soY29uc3Qgdm9pZCAqY2xvc3VyZSwgdXBiX2hhbmRsZXJzICpo
KSB7Ci0gIGNvbnN0IHVwYl9tc2dkZWYgKm07Ci0gIHVwYl9tc2dfZmllbGRfaXRlciBpOwotCi0g
IFVQQl9VTlVTRUQoY2xvc3VyZSk7Ci0KLSAgdXBiX2hhbmRsZXJzX3NldHN0YXJ0bXNnKGgsIHN0
YXJ0bXNnLCBOVUxMKTsKLSAgdXBiX2hhbmRsZXJzX3NldGVuZG1zZyhoLCBlbmRtc2csIE5VTEwp
OwotCi0gIG0gPSB1cGJfaGFuZGxlcnNfbXNnZGVmKGgpOwotICBmb3IodXBiX21zZ19maWVsZF9i
ZWdpbigmaSwgbSk7Ci0gICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVwYl9t
c2dfZmllbGRfbmV4dCgmaSkpIHsKLSAgICBjb25zdCB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNn
X2l0ZXJfZmllbGQoJmkpOwotICAgIGJvb2wgcGFja2VkID0gdXBiX2ZpZWxkZGVmX2lzc2VxKGYp
ICYmIHVwYl9maWVsZGRlZl9pc3ByaW1pdGl2ZShmKSAmJgotICAgICAgICAgICAgICAgICAgdXBi
X2ZpZWxkZGVmX3BhY2tlZChmKTsKLSAgICB1cGJfaGFuZGxlcmF0dHIgYXR0cjsKLSAgICB1cGJf
d2lyZXR5cGVfdCB3dCA9Ci0gICAgICAgIHBhY2tlZCA/IFVQQl9XSVJFX1RZUEVfREVMSU1JVEVE
Ci0gICAgICAgICAgICAgICA6IHVwYl9wYl9uYXRpdmVfd2lyZV90eXBlc1t1cGJfZmllbGRkZWZf
ZGVzY3JpcHRvcnR5cGUoZildOwotCi0gICAgLyogUHJlLWVuY29kZSB0aGUgdGFnIGZvciB0aGlz
IGZpZWxkLiAqLwotICAgIG5ld190YWcoaCwgZiwgd3QsICZhdHRyKTsKLQotICAgIGlmIChwYWNr
ZWQpIHsKLSAgICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHNlcShoLCBmLCBlbmNvZGVfc3RhcnRk
ZWxpbWZpZWxkLCAmYXR0cik7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0ZW5kc2VxKGgsIGYsIGVu
Y29kZV9lbmRkZWxpbWZpZWxkLCAmYXR0cik7Ci0gICAgfQotCi0jZGVmaW5lIFQodXBwZXIsIGxv
d2VyLCB1cGJ0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNh
c2UgVVBCX0RFU0NSSVBUT1JfVFlQRV8jI3VwcGVyOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgaWYgKHBhY2tlZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB1cGJfaGFuZGxlcnNfc2V0IyN1cGJ0eXBl
KGgsIGYsIGVuY29kZV9wYWNrZWRfIyNsb3dlciwgJmF0dHIpOyBcCi0gICAgfSBlbHNlIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICB1cGJfaGFuZGxlcnNfc2V0IyN1cGJ0eXBlKGgsIGYsIGVuY29kZV9zY2FsYXJfIyNsb3dl
ciwgJmF0dHIpOyBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKHVw
Yl9maWVsZGRlZl9kZXNjcmlwdG9ydHlwZShmKSkgewotICAgICAgVChET1VCTEUsICAgZG91Ymxl
LCAgIGRvdWJsZSk7Ci0gICAgICBUKEZMT0FULCAgICBmbG9hdCwgICAgZmxvYXQpOwotICAgICAg
VChJTlQ2NCwgICAgaW50NjQsICAgIGludDY0KTsKLSAgICAgIFQoSU5UMzIsICAgIGludDMyLCAg
ICBpbnQzMik7Ci0gICAgICBUKEZJWEVENjQsICBmaXhlZDY0LCAgdWludDY0KTsKLSAgICAgIFQo
RklYRUQzMiwgIGZpeGVkMzIsICB1aW50MzIpOwotICAgICAgVChCT09MLCAgICAgYm9vbCwgICAg
IGJvb2wpOwotICAgICAgVChVSU5UMzIsICAgdWludDMyLCAgIHVpbnQzMik7Ci0gICAgICBUKFVJ
TlQ2NCwgICB1aW50NjQsICAgdWludDY0KTsKLSAgICAgIFQoRU5VTSwgICAgIGVudW0sICAgICBp
bnQzMik7Ci0gICAgICBUKFNGSVhFRDMyLCBzZml4ZWQzMiwgaW50MzIpOwotICAgICAgVChTRklY
RUQ2NCwgc2ZpeGVkNjQsIGludDY0KTsKLSAgICAgIFQoU0lOVDMyLCAgIHNpbnQzMiwgICBpbnQz
Mik7Ci0gICAgICBUKFNJTlQ2NCwgICBzaW50NjQsICAgaW50NjQpOwotICAgICAgY2FzZSBVUEJf
REVTQ1JJUFRPUl9UWVBFX1NUUklORzoKLSAgICAgIGNhc2UgVVBCX0RFU0NSSVBUT1JfVFlQRV9C
WVRFUzoKLSAgICAgICAgdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3RyKGgsIGYsIGVuY29kZV9zdGFy
dHN0ciwgJmF0dHIpOwotICAgICAgICB1cGJfaGFuZGxlcnNfc2V0ZW5kc3RyKGgsIGYsIGVuY29k
ZV9lbmRkZWxpbWZpZWxkLCAmYXR0cik7Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmco
aCwgZiwgZW5jb2RlX3N0cmJ1ZiwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
VVBCX0RFU0NSSVBUT1JfVFlQRV9NRVNTQUdFOgotICAgICAgICB1cGJfaGFuZGxlcnNfc2V0c3Rh
cnRzdWJtc2coaCwgZiwgZW5jb2RlX3N0YXJ0ZGVsaW1maWVsZCwgJmF0dHIpOwotICAgICAgICB1
cGJfaGFuZGxlcnNfc2V0ZW5kc3VibXNnKGgsIGYsIGVuY29kZV9lbmRkZWxpbWZpZWxkLCAmYXR0
cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfREVTQ1JJUFRPUl9UWVBFX0dST1VQ
OiB7Ci0gICAgICAgIC8qIEVuZGdyb3VwIHRha2VzIGEgZGlmZmVyZW50IHRhZyAod2lyZV90eXBl
ID0gRU5EX0dST1VQKS4gKi8KLSAgICAgICAgdXBiX2hhbmRsZXJhdHRyIGF0dHIyOwotICAgICAg
ICBuZXdfdGFnKGgsIGYsIFVQQl9XSVJFX1RZUEVfRU5EX0dST1VQLCAmYXR0cjIpOwotCi0gICAg
ICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHN1Ym1zZyhoLCBmLCBlbmNvZGVfc3RhcnRncm91cCwg
JmF0dHIpOwotICAgICAgICB1cGJfaGFuZGxlcnNfc2V0ZW5kc3VibXNnKGgsIGYsIGVuY29kZV9l
bmRncm91cCwgJmF0dHIyKTsKLQotICAgICAgICB1cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZhdHRy
Mik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotI3VuZGVmIFQKLQotICAgIHVw
Yl9oYW5kbGVyYXR0cl91bmluaXQoJmF0dHIpOwotICB9Ci19Ci0KLXZvaWQgdXBiX3BiX2VuY29k
ZXJfcmVzZXQodXBiX3BiX2VuY29kZXIgKmUpIHsKLSAgZS0+c2VncHRyID0gTlVMTDsKLSAgZS0+
dG9wID0gTlVMTDsKLSAgZS0+ZGVwdGggPSAwOwotfQotCi0KLS8qIHB1YmxpYyBBUEkgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0KLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBiX3BiX2VuY29kZXJfbmV3aGFuZGxlcnMoY29u
c3QgdXBiX21zZ2RlZiAqbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqb3duZXIpIHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyc19uZXdm
cm96ZW4obSwgb3duZXIsIG5ld2hhbmRsZXJzX2NhbGxiYWNrLCBOVUxMKTsKLX0KLQotdXBiX3Bi
X2VuY29kZXIgKnVwYl9wYl9lbmNvZGVyX2NyZWF0ZSh1cGJfZW52ICplbnYsIGNvbnN0IHVwYl9o
YW5kbGVycyAqaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2J5
dGVzc2luayAqb3V0cHV0KSB7Ci0gIGNvbnN0IHNpemVfdCBpbml0aWFsX2J1ZnNpemUgPSAyNTY7
Ci0gIGNvbnN0IHNpemVfdCBpbml0aWFsX3NlZ2J1ZnNpemUgPSAxNjsKLSAgLyogVE9ETyhoYWJl
cm1hbik6IG1ha2UgdGhpcyBjb25maWd1cmFibGUuICovCi0gIGNvbnN0IHNpemVfdCBzdGFja19z
aXplID0gNjQ7Ci0jaWZuZGVmIE5ERUJVRwotICBjb25zdCBzaXplX3Qgc2l6ZV9iZWZvcmUgPSB1
cGJfZW52X2J5dGVzYWxsb2NhdGVkKGVudik7Ci0jZW5kaWYKLQotICB1cGJfcGJfZW5jb2RlciAq
ZSA9IHVwYl9lbnZfbWFsbG9jKGVudiwgc2l6ZW9mKHVwYl9wYl9lbmNvZGVyKSk7Ci0gIGlmICgh
ZSkgcmV0dXJuIE5VTEw7Ci0KLSAgZS0+YnVmID0gdXBiX2Vudl9tYWxsb2MoZW52LCBpbml0aWFs
X2J1ZnNpemUpOwotICBlLT5zZWdidWYgPSB1cGJfZW52X21hbGxvYyhlbnYsIGluaXRpYWxfc2Vn
YnVmc2l6ZSAqIHNpemVvZigqZS0+c2VnYnVmKSk7Ci0gIGUtPnN0YWNrID0gdXBiX2Vudl9tYWxs
b2MoZW52LCBzdGFja19zaXplICogc2l6ZW9mKCplLT5zdGFjaykpOwotCi0gIGlmICghZS0+YnVm
IHx8ICFlLT5zZWdidWYgfHwgIWUtPnN0YWNrKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQot
ICBlLT5saW1pdCA9IGUtPmJ1ZiArIGluaXRpYWxfYnVmc2l6ZTsKLSAgZS0+c2VnbGltaXQgPSBl
LT5zZWdidWYgKyBpbml0aWFsX3NlZ2J1ZnNpemU7Ci0gIGUtPnN0YWNrbGltaXQgPSBlLT5zdGFj
ayArIHN0YWNrX3NpemU7Ci0KLSAgdXBiX3BiX2VuY29kZXJfcmVzZXQoZSk7Ci0gIHVwYl9zaW5r
X3Jlc2V0KCZlLT5pbnB1dF8sIGgsIGUpOwotCi0gIGUtPmVudiA9IGVudjsKLSAgZS0+b3V0cHV0
XyA9IG91dHB1dDsKLSAgZS0+c3ViYyA9IG91dHB1dC0+Y2xvc3VyZTsKLSAgZS0+cHRyID0gZS0+
YnVmOwotCi0gIC8qIElmIHRoaXMgZmFpbHMsIGluY3JlYXNlIHRoZSB2YWx1ZSBpbiBlbmNvZGVy
LmguICovCi0gIGFzc2VydCh1cGJfZW52X2J5dGVzYWxsb2NhdGVkKGVudikgLSBzaXplX2JlZm9y
ZSA8PSBVUEJfUEJfRU5DT0RFUl9TSVpFKTsKLSAgcmV0dXJuIGU7Ci19Ci0KLXVwYl9zaW5rICp1
cGJfcGJfZW5jb2Rlcl9pbnB1dCh1cGJfcGJfZW5jb2RlciAqZSkgeyByZXR1cm4gJmUtPmlucHV0
XzsgfQotCi0KLQotdXBiX2ZpbGVkZWYgKip1cGJfbG9hZGRlc2NyaXB0b3IoY29uc3QgY2hhciAq
YnVmLCBzaXplX3QgbiwgY29uc3Qgdm9pZCAqb3duZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cGJfc3RhdHVzICpzdGF0dXMpIHsKLSAgLyogQ3JlYXRlIGhhbmRsZXJzLiAq
LwotICBjb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICpkZWNvZGVyX207Ci0gIGNvbnN0IHVwYl9o
YW5kbGVycyAqcmVhZGVyX2ggPSB1cGJfZGVzY3JlYWRlcl9uZXdoYW5kbGVycygmcmVhZGVyX2gp
OwotICB1cGJfZW52IGVudjsKLSAgdXBiX3BiZGVjb2Rlcm1ldGhvZG9wdHMgb3B0czsKLSAgdXBi
X3BiZGVjb2RlciAqZGVjb2RlcjsKLSAgdXBiX2Rlc2NyZWFkZXIgKnJlYWRlcjsKLSAgYm9vbCBv
azsKLSAgc2l6ZV90IGk7Ci0gIHVwYl9maWxlZGVmICoqcmV0ID0gTlVMTDsKLQotICB1cGJfcGJk
ZWNvZGVybWV0aG9kb3B0c19pbml0KCZvcHRzLCByZWFkZXJfaCk7Ci0gIGRlY29kZXJfbSA9IHVw
Yl9wYmRlY29kZXJtZXRob2RfbmV3KCZvcHRzLCAmZGVjb2Rlcl9tKTsKLQotICB1cGJfZW52X2lu
aXQoJmVudik7Ci0gIHVwYl9lbnZfcmVwb3J0ZXJyb3JzdG8oJmVudiwgc3RhdHVzKTsKLQotICBy
ZWFkZXIgPSB1cGJfZGVzY3JlYWRlcl9jcmVhdGUoJmVudiwgcmVhZGVyX2gpOwotICBkZWNvZGVy
ID0gdXBiX3BiZGVjb2Rlcl9jcmVhdGUoJmVudiwgZGVjb2Rlcl9tLCB1cGJfZGVzY3JlYWRlcl9p
bnB1dChyZWFkZXIpKTsKLQotICAvKiBQdXNoIGlucHV0IGRhdGEuICovCi0gIG9rID0gdXBiX2J1
ZnNyY19wdXRidWYoYnVmLCBuLCB1cGJfcGJkZWNvZGVyX2lucHV0KGRlY29kZXIpKTsKLQotICBp
ZiAoIW9rKSB7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci0KLSAgcmV0ID0gdXBiX2dtYWxsb2Mo
c2l6ZW9mICgqcmV0KSAqICh1cGJfZGVzY3JlYWRlcl9maWxlY291bnQocmVhZGVyKSArIDEpKTsK
LQotICBpZiAoIXJldCkgewotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIGZvciAoaSA9IDA7
IGkgPCB1cGJfZGVzY3JlYWRlcl9maWxlY291bnQocmVhZGVyKTsgaSsrKSB7Ci0gICAgcmV0W2ld
ID0gdXBiX2Rlc2NyZWFkZXJfZmlsZShyZWFkZXIsIGkpOwotICAgIHVwYl9maWxlZGVmX3JlZihy
ZXRbaV0sIG93bmVyKTsKLSAgfQotCi0gIHJldFtpXSA9IE5VTEw7Ci0KLWNsZWFudXA6Ci0gIHVw
Yl9lbnZfdW5pbml0KCZlbnYpOwotICB1cGJfaGFuZGxlcnNfdW5yZWYocmVhZGVyX2gsICZyZWFk
ZXJfaCk7Ci0gIHVwYl9wYmRlY29kZXJtZXRob2RfdW5yZWYoZGVjb2Rlcl9tLCAmZGVjb2Rlcl9t
KTsKLSAgcmV0dXJuIHJldDsKLX0KLS8qCi0gKiB1cGI6OnBiOjpUZXh0UHJpbnRlcgotICoKLSAq
IE9QVDogVGhpcyBpcyBub3Qgb3B0aW1pemVkIGF0IGFsbC4gIEl0IHVzZXMgcHJpbnRmKCkgd2hp
Y2ggcGFyc2VzIHRoZSBmb3JtYXQKLSAqIHN0cmluZyBldmVyeSB0aW1lLCBhbmQgaXQgYWxsb2Nh
dGVzIG1lbW9yeSBmb3IgZXZlcnkgcHV0LgotICovCi0KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0j
aW5jbHVkZSA8ZmxvYXQuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGFy
Zy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLQotc3RydWN0
IHVwYl90ZXh0cHJpbnRlciB7Ci0gIHVwYl9zaW5rIGlucHV0XzsKLSAgdXBiX2J5dGVzc2luayAq
b3V0cHV0XzsKLSAgaW50IGluZGVudF9kZXB0aF87Ci0gIGJvb2wgc2luZ2xlX2xpbmVfOwotICB2
b2lkICpzdWJjOwotfTsKLQotI2RlZmluZSBDSEVDSyh4KSBpZiAoKHgpIDwgMCkgZ290byBlcnI7
Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpzaG9ydG5hbWUoY29uc3QgY2hhciAqbG9uZ25hbWUpIHsK
LSAgY29uc3QgY2hhciAqbGFzdCA9IHN0cnJjaHIobG9uZ25hbWUsICcuJyk7Ci0gIHJldHVybiBs
YXN0ID8gbGFzdCArIDEgOiBsb25nbmFtZTsKLX0KLQotc3RhdGljIGludCBpbmRlbnQodXBiX3Rl
eHRwcmludGVyICpwKSB7Ci0gIGludCBpOwotICBpZiAoIXAtPnNpbmdsZV9saW5lXykKLSAgICBm
b3IgKGkgPSAwOyBpIDwgcC0+aW5kZW50X2RlcHRoXzsgaSsrKQotICAgICAgdXBiX2J5dGVzc2lu
a19wdXRidWYocC0+b3V0cHV0XywgcC0+c3ViYywgIiAgIiwgMiwgTlVMTCk7Ci0gIHJldHVybiAw
OwotfQotCi1zdGF0aWMgaW50IGVuZGZpZWxkKHVwYl90ZXh0cHJpbnRlciAqcCkgewotICBjb25z
dCBjaGFyIGNoID0gKHAtPnNpbmdsZV9saW5lXyA/ICcgJyA6ICdcbicpOwotICB1cGJfYnl0ZXNz
aW5rX3B1dGJ1ZihwLT5vdXRwdXRfLCBwLT5zdWJjLCAmY2gsIDEsIE5VTEwpOwotICByZXR1cm4g
MDsKLX0KLQotc3RhdGljIGludCBwdXRlc2NhcGVkKHVwYl90ZXh0cHJpbnRlciAqcCwgY29uc3Qg
Y2hhciAqYnVmLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlc2Vy
dmVfdXRmOCkgewotICAvKiBCYXNlZCBvbiBDRXNjYXBlSW50ZXJuYWwoKSBmcm9tIEdvb2dsZSdz
IHByb3RvYnVmIHJlbGVhc2UuICovCi0gIGNoYXIgZHN0YnVmWzQwOTZdLCAqZHN0ID0gZHN0YnVm
LCAqZHN0ZW5kID0gZHN0YnVmICsgc2l6ZW9mKGRzdGJ1Zik7Ci0gIGNvbnN0IGNoYXIgKmVuZCA9
IGJ1ZiArIGxlbjsKLQotICAvKiBJIHRoaW5rIGhleCBpcyBwcmV0dGllciBhbmQgbW9yZSB1c2Vm
dWwsIGJ1dCBwcm90bzIgdXNlcyBvY3RhbDsgc2hvdWxkCi0gICAqIGludmVzdGlnYXRlIHdoZXRo
ZXIgaXQgY2FuIHBhcnNlIGhleCBhbHNvLiAqLwotICBjb25zdCBib29sIHVzZV9oZXggPSBmYWxz
ZTsKLSAgYm9vbCBsYXN0X2hleF9lc2NhcGUgPSBmYWxzZTsgLyogdHJ1ZSBpZiBsYXN0IG91dHB1
dCBjaGFyIHdhcyBceE5OICovCi0KLSAgZm9yICg7IGJ1ZiA8IGVuZDsgYnVmKyspIHsKLSAgICBi
b29sIGlzX2hleF9lc2NhcGU7Ci0KLSAgICBpZiAoZHN0ZW5kIC0gZHN0IDwgNCkgewotICAgICAg
dXBiX2J5dGVzc2lua19wdXRidWYocC0+b3V0cHV0XywgcC0+c3ViYywgZHN0YnVmLCBkc3QgLSBk
c3RidWYsIE5VTEwpOwotICAgICAgZHN0ID0gZHN0YnVmOwotICAgIH0KLQotICAgIGlzX2hleF9l
c2NhcGUgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKCpidWYpIHsKLSAgICAgIGNhc2UgJ1xuJzogKihk
c3QrKykgPSAnXFwnOyAqKGRzdCsrKSA9ICduJzsgIGJyZWFrOwotICAgICAgY2FzZSAnXHInOiAq
KGRzdCsrKSA9ICdcXCc7ICooZHN0KyspID0gJ3InOyAgYnJlYWs7Ci0gICAgICBjYXNlICdcdCc6
ICooZHN0KyspID0gJ1xcJzsgKihkc3QrKykgPSAndCc7ICBicmVhazsKLSAgICAgIGNhc2UgJ1wi
JzogKihkc3QrKykgPSAnXFwnOyAqKGRzdCsrKSA9ICdcIic7IGJyZWFrOwotICAgICAgY2FzZSAn
XCcnOiAqKGRzdCsrKSA9ICdcXCc7ICooZHN0KyspID0gJ1wnJzsgYnJlYWs7Ci0gICAgICBjYXNl
ICdcXCc6ICooZHN0KyspID0gJ1xcJzsgKihkc3QrKykgPSAnXFwnOyBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIC8qIE5vdGUgdGhhdCBpZiB3ZSBlbWl0IFx4Tk4gYW5kIHRoZSBidWYg
Y2hhcmFjdGVyIGFmdGVyIHRoYXQgaXMgYSBoZXgKLSAgICAgICAgICogZGlnaXQgdGhlbiB0aGF0
IGRpZ2l0IG11c3QgYmUgZXNjYXBlZCB0b28gdG8gcHJldmVudCBpdCBiZWluZwotICAgICAgICAg
KiBpbnRlcnByZXRlZCBhcyBwYXJ0IG9mIHRoZSBjaGFyYWN0ZXIgY29kZSBieSBDLiAqLwotICAg
ICAgICBpZiAoKCFwcmVzZXJ2ZV91dGY4IHx8ICh1aW50OF90KSpidWYgPCAweDgwKSAmJgotICAg
ICAgICAgICAgKCFpc3ByaW50KCpidWYpIHx8IChsYXN0X2hleF9lc2NhcGUgJiYgaXN4ZGlnaXQo
KmJ1ZikpKSkgewotICAgICAgICAgIHNwcmludGYoZHN0LCAodXNlX2hleCA/ICJcXHglMDJ4IiA6
ICJcXCUwM28iKSwgKHVpbnQ4X3QpKmJ1Zik7Ci0gICAgICAgICAgaXNfaGV4X2VzY2FwZSA9IHVz
ZV9oZXg7Ci0gICAgICAgICAgZHN0ICs9IDQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
Kihkc3QrKykgPSAqYnVmOyBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBsYXN0X2hleF9l
c2NhcGUgPSBpc19oZXhfZXNjYXBlOwotICB9Ci0gIC8qIEZsdXNoIHJlbWFpbmluZyBkYXRhLiAq
LwotICB1cGJfYnl0ZXNzaW5rX3B1dGJ1ZihwLT5vdXRwdXRfLCBwLT5zdWJjLCBkc3RidWYsIGRz
dCAtIGRzdGJ1ZiwgTlVMTCk7Ci0gIHJldHVybiAwOwotfQotCi1ib29sIHB1dGYodXBiX3RleHRw
cmludGVyICpwLCBjb25zdCBjaGFyICpmbXQsIC4uLikgewotICB2YV9saXN0IGFyZ3M7Ci0gIHZh
X2xpc3QgYXJnc19jb3B5OwotICBjaGFyICpzdHI7Ci0gIGludCB3cml0dGVuOwotICBpbnQgbGVu
OwotICBib29sIG9rOwotCi0gIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0KLSAgLyogUnVuIG9uY2Ug
dG8gZ2V0IHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4gKi8KLSAgX3VwYl92YV9jb3B5KGFyZ3Nf
Y29weSwgYXJncyk7Ci0gIGxlbiA9IF91cGJfdnNucHJpbnRmKE5VTEwsIDAsIGZtdCwgYXJnc19j
b3B5KTsKLSAgdmFfZW5kKGFyZ3NfY29weSk7Ci0KLSAgLyogKyAxIGZvciBOVUxMIHRlcm1pbmF0
b3IgKHZzcHJpbnRmKCkgcmVxdWlyZXMgaXQgZXZlbiBpZiB3ZSBkb24ndCkuICovCi0gIHN0ciA9
IHVwYl9nbWFsbG9jKGxlbiArIDEpOwotICBpZiAoIXN0cikgcmV0dXJuIGZhbHNlOwotICB3cml0
dGVuID0gdnNwcmludGYoc3RyLCBmbXQsIGFyZ3MpOwotICB2YV9lbmQoYXJncyk7Ci0gIFVQQl9B
U1NFUlRfVkFSKHdyaXR0ZW4sIHdyaXR0ZW4gPT0gbGVuKTsKLQotICBvayA9IHVwYl9ieXRlc3Np
bmtfcHV0YnVmKHAtPm91dHB1dF8sIHAtPnN1YmMsIHN0ciwgbGVuLCBOVUxMKTsKLSAgdXBiX2dm
cmVlKHN0cik7Ci0gIHJldHVybiBvazsKLX0KLQotCi0vKiBoYW5kbGVycyAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ci1zdGF0aWMgYm9vbCB0ZXh0cHJpbnRlcl9zdGFydG1zZyh2b2lkICpjLCBjb25zdCB2b2lkICpo
ZCkgewotICB1cGJfdGV4dHByaW50ZXIgKnAgPSBjOwotICBVUEJfVU5VU0VEKGhkKTsKLSAgaWYg
KHAtPmluZGVudF9kZXB0aF8gPT0gMCkgewotICAgIHVwYl9ieXRlc3Npbmtfc3RhcnQocC0+b3V0
cHV0XywgMCwgJnAtPnN1YmMpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9v
bCB0ZXh0cHJpbnRlcl9lbmRtc2codm9pZCAqYywgY29uc3Qgdm9pZCAqaGQsIHVwYl9zdGF0dXMg
KnMpIHsKLSAgdXBiX3RleHRwcmludGVyICpwID0gYzsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIFVQ
Ql9VTlVTRUQocyk7Ci0gIGlmIChwLT5pbmRlbnRfZGVwdGhfID09IDApIHsKLSAgICB1cGJfYnl0
ZXNzaW5rX2VuZChwLT5vdXRwdXRfKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotI2RlZmlu
ZSBUWVBFKG5hbWUsIGN0eXBlLCBmbXQpIFwKLSAgc3RhdGljIGJvb2wgdGV4dHByaW50ZXJfcHV0
ICMjIG5hbWUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhLCBcCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlIHZhbCkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHVwYl90ZXh0cHJpbnRlciAqcCA9IGNsb3N1cmU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjb25zdCB1
cGJfZmllbGRkZWYgKmYgPSBoYW5kbGVyX2RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgQ0hFQ0soaW5kZW50KHApKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHB1dGYocCwgIiVzOiAi
IGZtdCwgdXBiX2ZpZWxkZGVmX25hbWUoZiksIHZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBDSEVDSyhlbmRmaWVsZChwKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIHRydWU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBlcnI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLXN0
YXRpYyBib29sIHRleHRwcmludGVyX3B1dGJvb2wodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAq
aGFuZGxlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHZhbCkg
ewotICB1cGJfdGV4dHByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBjb25zdCB1cGJfZmllbGRkZWYg
KmYgPSBoYW5kbGVyX2RhdGE7Ci0gIENIRUNLKGluZGVudChwKSk7Ci0gIHB1dGYocCwgIiVzOiAl
cyIsIHVwYl9maWVsZGRlZl9uYW1lKGYpLCB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgQ0hF
Q0soZW5kZmllbGQocCkpOwotICByZXR1cm4gdHJ1ZTsKLWVycjoKLSAgcmV0dXJuIGZhbHNlOwot
fQotCi0jZGVmaW5lIFNUUklOR0lGWV9IRUxQRVIoeCkgI3gKLSNkZWZpbmUgU1RSSU5HSUZZX01B
Q1JPVkFMKHgpIFNUUklOR0lGWV9IRUxQRVIoeCkKLQotVFlQRShpbnQzMiwgIGludDMyX3QsICAi
JSIgUFJJZDMyKQotVFlQRShpbnQ2NCwgIGludDY0X3QsICAiJSIgUFJJZDY0KQotVFlQRSh1aW50
MzIsIHVpbnQzMl90LCAiJSIgUFJJdTMyKQotVFlQRSh1aW50NjQsIHVpbnQ2NF90LCAiJSIgUFJJ
dTY0KQotVFlQRShmbG9hdCwgIGZsb2F0LCAgICAiJS4iIFNUUklOR0lGWV9NQUNST1ZBTChGTFRf
RElHKSAiZyIpCi1UWVBFKGRvdWJsZSwgZG91YmxlLCAgICIlLiIgU1RSSU5HSUZZX01BQ1JPVkFM
KERCTF9ESUcpICJnIikKLQotI3VuZGVmIFRZUEUKLQotLyogT3V0cHV0IGEgc3ltYm9saWMgdmFs
dWUgZnJvbSB0aGUgZW51bSBpZiBmb3VuZCwgZWxzZSBqdXN0IHByaW50IGFzIGludDMyLiAqLwot
c3RhdGljIGJvb2wgdGV4dHByaW50ZXJfcHV0ZW51bSh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lk
ICpoYW5kbGVyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
dmFsKSB7Ci0gIHVwYl90ZXh0cHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIGNvbnN0IHVwYl9maWVs
ZGRlZiAqZiA9IGhhbmRsZXJfZGF0YTsKLSAgY29uc3QgdXBiX2VudW1kZWYgKmVudW1fZGVmID0g
dXBiX2Rvd25jYXN0X2VudW1kZWYodXBiX2ZpZWxkZGVmX3N1YmRlZihmKSk7Ci0gIGNvbnN0IGNo
YXIgKmxhYmVsID0gdXBiX2VudW1kZWZfaXRvbihlbnVtX2RlZiwgdmFsKTsKLSAgaWYgKGxhYmVs
KSB7Ci0gICAgaW5kZW50KHApOwotICAgIHB1dGYocCwgIiVzOiAlcyIsIHVwYl9maWVsZGRlZl9u
YW1lKGYpLCBsYWJlbCk7Ci0gICAgZW5kZmllbGQocCk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKCF0
ZXh0cHJpbnRlcl9wdXRpbnQzMihjbG9zdXJlLCBoYW5kbGVyX2RhdGEsIHZhbCkpCi0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkICp0ZXh0
cHJpbnRlcl9zdGFydHN0cih2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVfaGludCkgewotICB1cGJfdGV4dHBy
aW50ZXIgKnAgPSBjbG9zdXJlOwotICBjb25zdCB1cGJfZmllbGRkZWYgKmYgPSBoYW5kbGVyX2Rh
dGE7Ci0gIFVQQl9VTlVTRUQoc2l6ZV9oaW50KTsKLSAgaW5kZW50KHApOwotICBwdXRmKHAsICIl
czogXCIiLCB1cGJfZmllbGRkZWZfbmFtZShmKSk7Ci0gIHJldHVybiBwOwotfQotCi1zdGF0aWMg
Ym9vbCB0ZXh0cHJpbnRlcl9lbmRzdHIodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxl
cl9kYXRhKSB7Ci0gIHVwYl90ZXh0cHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQo
aGFuZGxlcl9kYXRhKTsKLSAgcHV0ZihwLCAiXCIiKTsKLSAgZW5kZmllbGQocCk7Ci0gIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgc2l6ZV90IHRleHRwcmludGVyX3B1dHN0cih2b2lkICpjbG9z
dXJlLCBjb25zdCB2b2lkICpoZCwgY29uc3QgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7
Ci0gIHVwYl90ZXh0cHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIGNvbnN0IHVwYl9maWVsZGRlZiAq
ZiA9IGhkOwotICBVUEJfVU5VU0VEKGhhbmRsZSk7Ci0gIENIRUNLKHB1dGVzY2FwZWQocCwgYnVm
LCBsZW4sIHVwYl9maWVsZGRlZl90eXBlKGYpID09IFVQQl9UWVBFX1NUUklORykpOwotICByZXR1
cm4gbGVuOwotZXJyOgotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgKnRleHRwcmludGVy
X3N0YXJ0c3VibXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSkgewot
ICB1cGJfdGV4dHByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBjb25zdCBjaGFyICpuYW1lID0gaGFu
ZGxlcl9kYXRhOwotICBDSEVDSyhpbmRlbnQocCkpOwotICBwdXRmKHAsICIlcyB7JWMiLCBuYW1l
LCBwLT5zaW5nbGVfbGluZV8gPyAnICcgOiAnXG4nKTsKLSAgcC0+aW5kZW50X2RlcHRoXysrOwot
ICByZXR1cm4gcDsKLWVycjoKLSAgcmV0dXJuIFVQQl9CUkVBSzsKLX0KLQotc3RhdGljIGJvb2wg
dGV4dHByaW50ZXJfZW5kc3VibXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJf
ZGF0YSkgewotICB1cGJfdGV4dHByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhh
bmRsZXJfZGF0YSk7Ci0gIHAtPmluZGVudF9kZXB0aF8tLTsKLSAgQ0hFQ0soaW5kZW50KHApKTsK
LSAgdXBiX2J5dGVzc2lua19wdXRidWYocC0+b3V0cHV0XywgcC0+c3ViYywgIn0iLCAxLCBOVUxM
KTsKLSAgQ0hFQ0soZW5kZmllbGQocCkpOwotICByZXR1cm4gdHJ1ZTsKLWVycjoKLSAgcmV0dXJu
IGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBvbm1yZWcoY29uc3Qgdm9pZCAqYywgdXBiX2hhbmRs
ZXJzICpoKSB7Ci0gIGNvbnN0IHVwYl9tc2dkZWYgKm0gPSB1cGJfaGFuZGxlcnNfbXNnZGVmKGgp
OwotICB1cGJfbXNnX2ZpZWxkX2l0ZXIgaTsKLSAgVVBCX1VOVVNFRChjKTsKLQotICB1cGJfaGFu
ZGxlcnNfc2V0c3RhcnRtc2coaCwgdGV4dHByaW50ZXJfc3RhcnRtc2csIE5VTEwpOwotICB1cGJf
aGFuZGxlcnNfc2V0ZW5kbXNnKGgsIHRleHRwcmludGVyX2VuZG1zZywgTlVMTCk7Ci0KLSAgZm9y
KHVwYl9tc2dfZmllbGRfYmVnaW4oJmksIG0pOwotICAgICAgIXVwYl9tc2dfZmllbGRfZG9uZSgm
aSk7Ci0gICAgICB1cGJfbXNnX2ZpZWxkX25leHQoJmkpKSB7Ci0gICAgdXBiX2ZpZWxkZGVmICpm
ID0gdXBiX21zZ19pdGVyX2ZpZWxkKCZpKTsKLSAgICB1cGJfaGFuZGxlcmF0dHIgYXR0ciA9IFVQ
Ql9IQU5ETEVSQVRUUl9JTklUSUFMSVpFUjsKLSAgICB1cGJfaGFuZGxlcmF0dHJfc2V0aGFuZGxl
cmRhdGEoJmF0dHIsIGYpOwotICAgIHN3aXRjaCAodXBiX2ZpZWxkZGVmX3R5cGUoZikpIHsKLSAg
ICAgIGNhc2UgVVBCX1RZUEVfSU5UMzI6Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXRpbnQzMiho
LCBmLCB0ZXh0cHJpbnRlcl9wdXRpbnQzMiwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgVVBCX1RZUEVfSU5UNjQ6Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXRpbnQ2NChoLCBm
LCB0ZXh0cHJpbnRlcl9wdXRpbnQ2NCwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgVVBCX1RZUEVfVUlOVDMyOgotICAgICAgICB1cGJfaGFuZGxlcnNfc2V0dWludDMyKGgsIGYs
IHRleHRwcmludGVyX3B1dHVpbnQzMiwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgVVBCX1RZUEVfVUlOVDY0OgotICAgICAgICB1cGJfaGFuZGxlcnNfc2V0dWludDY0KGgsIGYs
IHRleHRwcmludGVyX3B1dHVpbnQ2NCwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgVVBCX1RZUEVfRkxPQVQ6Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXRmbG9hdChoLCBmLCB0
ZXh0cHJpbnRlcl9wdXRmbG9hdCwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
VVBCX1RZUEVfRE9VQkxFOgotICAgICAgICB1cGJfaGFuZGxlcnNfc2V0ZG91YmxlKGgsIGYsIHRl
eHRwcmludGVyX3B1dGRvdWJsZSwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
VVBCX1RZUEVfQk9PTDoKLSAgICAgICAgdXBiX2hhbmRsZXJzX3NldGJvb2woaCwgZiwgdGV4dHBy
aW50ZXJfcHV0Ym9vbCwgJmF0dHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVVBCX1RZ
UEVfU1RSSU5HOgotICAgICAgY2FzZSBVUEJfVFlQRV9CWVRFUzoKLSAgICAgICAgdXBiX2hhbmRs
ZXJzX3NldHN0YXJ0c3RyKGgsIGYsIHRleHRwcmludGVyX3N0YXJ0c3RyLCAmYXR0cik7Ci0gICAg
ICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgZiwgdGV4dHByaW50ZXJfcHV0c3RyLCAmYXR0
cik7Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXRlbmRzdHIoaCwgZiwgdGV4dHByaW50ZXJfZW5k
c3RyLCAmYXR0cik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9NRVNTQUdF
OiB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPQotICAgICAgICAgICAgdXBiX2ZpZWxkZGVm
X2lzdGFnZGVsaW0oZikKLSAgICAgICAgICAgICAgICA/IHNob3J0bmFtZSh1cGJfbXNnZGVmX2Z1
bGxuYW1lKHVwYl9maWVsZGRlZl9tc2dzdWJkZWYoZikpKQotICAgICAgICAgICAgICAgIDogdXBi
X2ZpZWxkZGVmX25hbWUoZik7Ci0gICAgICAgIHVwYl9oYW5kbGVyYXR0cl9zZXRoYW5kbGVyZGF0
YSgmYXR0ciwgbmFtZSk7Ci0gICAgICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHN1Ym1zZyhoLCBm
LCB0ZXh0cHJpbnRlcl9zdGFydHN1Ym1zZywgJmF0dHIpOwotICAgICAgICB1cGJfaGFuZGxlcnNf
c2V0ZW5kc3VibXNnKGgsIGYsIHRleHRwcmludGVyX2VuZHN1Ym1zZywgJmF0dHIpOwotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgVVBCX1RZUEVfRU5VTToKLSAgICAgICAgdXBi
X2hhbmRsZXJzX3NldGludDMyKGgsIGYsIHRleHRwcmludGVyX3B1dGVudW0sICZhdHRyKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRleHRwcmludGVyX3Jl
c2V0KHVwYl90ZXh0cHJpbnRlciAqcCwgYm9vbCBzaW5nbGVfbGluZSkgewotICBwLT5zaW5nbGVf
bGluZV8gPSBzaW5nbGVfbGluZTsKLSAgcC0+aW5kZW50X2RlcHRoXyA9IDA7Ci19Ci0KLQotLyog
UHVibGljIEFQSSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLQotdXBiX3RleHRwcmludGVyICp1cGJfdGV4dHByaW50ZXJf
Y3JlYXRlKHVwYl9lbnYgKmVudiwgY29uc3QgdXBiX2hhbmRsZXJzICpoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9ieXRlc3NpbmsgKm91dHB1dCkgewotICB1
cGJfdGV4dHByaW50ZXIgKnAgPSB1cGJfZW52X21hbGxvYyhlbnYsIHNpemVvZih1cGJfdGV4dHBy
aW50ZXIpKTsKLSAgaWYgKCFwKSByZXR1cm4gTlVMTDsKLQotICBwLT5vdXRwdXRfID0gb3V0cHV0
OwotICB1cGJfc2lua19yZXNldCgmcC0+aW5wdXRfLCBoLCBwKTsKLSAgdGV4dHByaW50ZXJfcmVz
ZXQocCwgZmFsc2UpOwotCi0gIHJldHVybiBwOwotfQotCi1jb25zdCB1cGJfaGFuZGxlcnMgKnVw
Yl90ZXh0cHJpbnRlcl9uZXdoYW5kbGVycyhjb25zdCB1cGJfbXNnZGVmICptLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3duZXIp
IHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyc19uZXdmcm96ZW4obSwgb3duZXIsICZvbm1yZWcsIE5V
TEwpOwotfQotCi11cGJfc2luayAqdXBiX3RleHRwcmludGVyX2lucHV0KHVwYl90ZXh0cHJpbnRl
ciAqcCkgeyByZXR1cm4gJnAtPmlucHV0XzsgfQotCi12b2lkIHVwYl90ZXh0cHJpbnRlcl9zZXRz
aW5nbGVsaW5lKHVwYl90ZXh0cHJpbnRlciAqcCwgYm9vbCBzaW5nbGVfbGluZSkgewotICBwLT5z
aW5nbGVfbGluZV8gPSBzaW5nbGVfbGluZTsKLX0KLQotCi0vKiBJbmRleCBpcyBkZXNjcmlwdG9y
IHR5cGUuICovCi1jb25zdCB1aW50OF90IHVwYl9wYl9uYXRpdmVfd2lyZV90eXBlc1tdID0gewot
ICBVUEJfV0lSRV9UWVBFX0VORF9HUk9VUCwgICAgIC8qIEVOREdST1VQICovCi0gIFVQQl9XSVJF
X1RZUEVfNjRCSVQsICAgICAgICAgLyogRE9VQkxFICovCi0gIFVQQl9XSVJFX1RZUEVfMzJCSVQs
ICAgICAgICAgLyogRkxPQVQgKi8KLSAgVVBCX1dJUkVfVFlQRV9WQVJJTlQsICAgICAgICAvKiBJ
TlQ2NCAqLwotICBVUEJfV0lSRV9UWVBFX1ZBUklOVCwgICAgICAgIC8qIFVJTlQ2NCAqLwotICBV
UEJfV0lSRV9UWVBFX1ZBUklOVCwgICAgICAgIC8qIElOVDMyICovCi0gIFVQQl9XSVJFX1RZUEVf
NjRCSVQsICAgICAgICAgLyogRklYRUQ2NCAqLwotICBVUEJfV0lSRV9UWVBFXzMyQklULCAgICAg
ICAgIC8qIEZJWEVEMzIgKi8KLSAgVVBCX1dJUkVfVFlQRV9WQVJJTlQsICAgICAgICAvKiBCT09M
ICovCi0gIFVQQl9XSVJFX1RZUEVfREVMSU1JVEVELCAgICAgLyogU1RSSU5HICovCi0gIFVQQl9X
SVJFX1RZUEVfU1RBUlRfR1JPVVAsICAgLyogR1JPVVAgKi8KLSAgVVBCX1dJUkVfVFlQRV9ERUxJ
TUlURUQsICAgICAvKiBNRVNTQUdFICovCi0gIFVQQl9XSVJFX1RZUEVfREVMSU1JVEVELCAgICAg
LyogQllURVMgKi8KLSAgVVBCX1dJUkVfVFlQRV9WQVJJTlQsICAgICAgICAvKiBVSU5UMzIgKi8K
LSAgVVBCX1dJUkVfVFlQRV9WQVJJTlQsICAgICAgICAvKiBFTlVNICovCi0gIFVQQl9XSVJFX1RZ
UEVfMzJCSVQsICAgICAgICAgLyogU0ZJWEVEMzIgKi8KLSAgVVBCX1dJUkVfVFlQRV82NEJJVCwg
ICAgICAgICAvKiBTRklYRUQ2NCAqLwotICBVUEJfV0lSRV9UWVBFX1ZBUklOVCwgICAgICAgIC8q
IFNJTlQzMiAqLwotICBVUEJfV0lSRV9UWVBFX1ZBUklOVCwgICAgICAgIC8qIFNJTlQ2NCAqLwot
fTsKLQotLyogQSBiYXNpYyBicmFuY2gtYmFzZWQgZGVjb2RlciwgdXNlcyAzMi1iaXQgdmFsdWVz
IHRvIGdldCBnb29kIHBlcmZvcm1hbmNlCi0gKiBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcyAoYnV0
IHBlcmZvcm1zIHdlbGwgb24gNjQtYml0cyBhbHNvKS4KLSAqIFRoaXMgc2NoZW1lIGNvbWVzIGZy
b20gdGhlIG9yaWdpbmFsIEdvb2dsZSBQcm90b2J1ZiBpbXBsZW1lbnRhdGlvbgotICogKHByb3Rv
MikuICovCi11cGJfZGVjb2RlcmV0IHVwYl92ZGVjb2RlX21heDhfYnJhbmNoMzIodXBiX2RlY29k
ZXJldCByKSB7Ci0gIHVwYl9kZWNvZGVyZXQgZXJyID0ge05VTEwsIDB9OwotICBjb25zdCBjaGFy
ICpwID0gci5wOwotICB1aW50MzJfdCBsb3cgPSAodWludDMyX3Qpci52YWw7Ci0gIHVpbnQzMl90
IGhpZ2ggPSAwOwotICB1aW50MzJfdCBiOwotICBiID0gKihwKyspOyBsb3cgIHw9IChiICYgMHg3
ZlUpIDw8IDE0OyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgYiA9ICoocCsrKTsgbG93
ICB8PSAoYiAmIDB4N2ZVKSA8PCAyMTsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gIGIg
PSAqKHArKyk7IGxvdyAgfD0gKGIgJiAweDdmVSkgPDwgMjg7Ci0gICAgICAgICAgICAgIGhpZ2gg
ID0gKGIgJiAweDdmVSkgPj4gIDQ7IGlmICghKGIgJiAweDgwKSkgZ290byBkb25lOwotICBiID0g
KihwKyspOyBoaWdoIHw9IChiICYgMHg3ZlUpIDw8ICAzOyBpZiAoIShiICYgMHg4MCkpIGdvdG8g
ZG9uZTsKLSAgYiA9ICoocCsrKTsgaGlnaCB8PSAoYiAmIDB4N2ZVKSA8PCAxMDsgaWYgKCEoYiAm
IDB4ODApKSBnb3RvIGRvbmU7Ci0gIGIgPSAqKHArKyk7IGhpZ2ggfD0gKGIgJiAweDdmVSkgPDwg
MTc7IGlmICghKGIgJiAweDgwKSkgZ290byBkb25lOwotICBiID0gKihwKyspOyBoaWdoIHw9IChi
ICYgMHg3ZlUpIDw8IDI0OyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgYiA9ICoocCsr
KTsgaGlnaCB8PSAoYiAmIDB4N2ZVKSA8PCAzMTsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7
Ci0gIHJldHVybiBlcnI7Ci0KLWRvbmU6Ci0gIHIudmFsID0gKCh1aW50NjRfdCloaWdoIDw8IDMy
KSB8IGxvdzsKLSAgci5wID0gcDsKLSAgcmV0dXJuIHI7Ci19Ci0KLS8qIExpa2UgdGhlIHByZXZp
b3VzLCBidXQgdXNlcyA2NC1iaXQgdmFsdWVzLiAqLwotdXBiX2RlY29kZXJldCB1cGJfdmRlY29k
ZV9tYXg4X2JyYW5jaDY0KHVwYl9kZWNvZGVyZXQgcikgewotICBjb25zdCBjaGFyICpwID0gci5w
OwotICB1aW50NjRfdCB2YWwgPSByLnZhbDsKLSAgdWludDY0X3QgYjsKLSAgdXBiX2RlY29kZXJl
dCBlcnIgPSB7TlVMTCwgMH07Ci0gIGIgPSAqKHArKyk7IHZhbCB8PSAoYiAmIDB4N2ZVKSA8PCAx
NDsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gIGIgPSAqKHArKyk7IHZhbCB8PSAoYiAm
IDB4N2ZVKSA8PCAyMTsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gIGIgPSAqKHArKyk7
IHZhbCB8PSAoYiAmIDB4N2ZVKSA8PCAyODsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0g
IGIgPSAqKHArKyk7IHZhbCB8PSAoYiAmIDB4N2ZVKSA8PCAzNTsgaWYgKCEoYiAmIDB4ODApKSBn
b3RvIGRvbmU7Ci0gIGIgPSAqKHArKyk7IHZhbCB8PSAoYiAmIDB4N2ZVKSA8PCA0MjsgaWYgKCEo
YiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gIGIgPSAqKHArKyk7IHZhbCB8PSAoYiAmIDB4N2ZVKSA8
PCA0OTsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gIGIgPSAqKHArKyk7IHZhbCB8PSAo
YiAmIDB4N2ZVKSA8PCA1NjsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gIGIgPSAqKHAr
Kyk7IHZhbCB8PSAoYiAmIDB4N2ZVKSA8PCA2MzsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7
Ci0gIHJldHVybiBlcnI7Ci0KLWRvbmU6Ci0gIHIudmFsID0gdmFsOwotICByLnAgPSBwOwotICBy
ZXR1cm4gcjsKLX0KLQotLyogR2l2ZW4gYW4gZW5jb2RlZCB2YXJpbnQgdiwgcmV0dXJucyBhbiBp
bnRlZ2VyIHdpdGggYSBzaW5nbGUgYml0IHNldCB0aGF0Ci0gKiBpbmRpY2F0ZXMgdGhlIGVuZCBv
ZiB0aGUgdmFyaW50LiAgU3VidHJhY3Rpbmcgb25lIGZyb20gdGhpcyB2YWx1ZSB3aWxsCi0gKiB5
aWVsZCBhIG1hc2sgdGhhdCBsZWF2ZXMgb25seSBiaXRzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHZh
cmludC4gIFJldHVybnMKLSAqIDAgaWYgdGhlIHZhcmludCBpcyB1bnRlcm1pbmF0ZWQuICovCi1z
dGF0aWMgdWludDY0X3QgdXBiX2dldF92c3RvcGJpdCh1aW50NjRfdCB2KSB7Ci0gIHVpbnQ2NF90
IGNiaXRzID0gdiB8IDB4N2Y3ZjdmN2Y3ZjdmN2Y3ZlVMTDsKLSAgcmV0dXJuIH5jYml0cyAmIChj
Yml0cysxKTsKLX0KLQotLyogQSBicmFuY2hsZXNzIGRlY29kZXIuICBDcmVkaXQgdG8gUGFzY2Fs
IE1hc3NpbWlubyBmb3IgdGhlIGJpdC10d2lkZGxpbmcuICovCi11cGJfZGVjb2RlcmV0IHVwYl92
ZGVjb2RlX21heDhfbWFzc2ltaW5vKHVwYl9kZWNvZGVyZXQgcikgewotICB1aW50NjRfdCBiOwot
ICB1aW50NjRfdCBzdG9wX2JpdDsKLSAgdXBiX2RlY29kZXJldCBteV9yOwotICBtZW1jcHkoJmIs
IHIucCwgc2l6ZW9mKGIpKTsKLSAgc3RvcF9iaXQgPSB1cGJfZ2V0X3ZzdG9wYml0KGIpOwotICBi
ID0gIChiICYgMHg3ZjdmN2Y3ZjdmN2Y3ZjdmVUxMKSAmIChzdG9wX2JpdCAtIDEpOwotICBiICs9
ICAgICAgIGIgJiAweDAwN2YwMDdmMDA3ZjAwN2ZVTEw7Ci0gIGIgKz0gIDMgKiAoYiAmIDB4MDAw
MGZmZmYwMDAwZmZmZlVMTCk7Ci0gIGIgKz0gMTUgKiAoYiAmIDB4MDAwMDAwMDBmZmZmZmZmZlVM
TCk7Ci0gIGlmIChzdG9wX2JpdCA9PSAwKSB7Ci0gICAgLyogRXJyb3I6IHVudGVybWluYXRlZCB2
YXJpbnQuICovCi0gICAgdXBiX2RlY29kZXJldCBlcnJfciA9IHsodm9pZCopMCwgMH07Ci0gICAg
cmV0dXJuIGVycl9yOwotICB9Ci0gIG15X3IgPSB1cGJfZGVjb2RlcmV0X21ha2Uoci5wICsgKChf
X2J1aWx0aW5fY3R6bGwoc3RvcF9iaXQpICsgMSkgLyA4KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByLnZhbCB8IChiIDw8IDcpKTsKLSAgcmV0dXJuIG15X3I7Ci19Ci0KLS8qIEEgYnJh
bmNobGVzcyBkZWNvZGVyLiAgQ3JlZGl0IHRvIERhbmllbCBXcmlnaHQgZm9yIHRoZSBiaXQtdHdp
ZGRsaW5nLiAqLwotdXBiX2RlY29kZXJldCB1cGJfdmRlY29kZV9tYXg4X3dyaWdodCh1cGJfZGVj
b2RlcmV0IHIpIHsKLSAgdWludDY0X3QgYjsKLSAgdWludDY0X3Qgc3RvcF9iaXQ7Ci0gIHVwYl9k
ZWNvZGVyZXQgbXlfcjsKLSAgbWVtY3B5KCZiLCByLnAsIHNpemVvZihiKSk7Ci0gIHN0b3BfYml0
ID0gdXBiX2dldF92c3RvcGJpdChiKTsKLSAgYiAmPSAoc3RvcF9iaXQgLSAxKTsKLSAgYiA9ICgo
YiAmIDB4N2YwMDdmMDA3ZjAwN2YwMFVMTCkgPj4gMSkgfCAoYiAmIDB4MDA3ZjAwN2YwMDdmMDA3
ZlVMTCk7Ci0gIGIgPSAoKGIgJiAweGZmZmYwMDAwZmZmZjAwMDBVTEwpID4+IDIpIHwgKGIgJiAw
eDAwMDBmZmZmMDAwMGZmZmZVTEwpOwotICBiID0gKChiICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxM
KSA+PiA0KSB8IChiICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKTsKLSAgaWYgKHN0b3BfYml0ID09
IDApIHsKLSAgICAvKiBFcnJvcjogdW50ZXJtaW5hdGVkIHZhcmludC4gKi8KLSAgICB1cGJfZGVj
b2RlcmV0IGVycl9yID0geyh2b2lkKikwLCAwfTsKLSAgICByZXR1cm4gZXJyX3I7Ci0gIH0KLSAg
bXlfciA9IHVwYl9kZWNvZGVyZXRfbWFrZShyLnAgKyAoKF9fYnVpbHRpbl9jdHpsbChzdG9wX2Jp
dCkgKyAxKSAvIDgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIudmFsIHwgKGIgPDwg
MTQpKTsKLSAgcmV0dXJuIG15X3I7Ci19Ci0KLSNsaW5lIDEgInVwYi9qc29uL3BhcnNlci5ybCIK
LS8qCi0qKiB1cGI6Ompzb246OlBhcnNlciAodXBiX2pzb25fcGFyc2VyKQotKioKLSoqIEEgcGFy
c2VyIHRoYXQgdXNlcyB0aGUgUmFnZWwgU3RhdGUgTWFjaGluZSBDb21waWxlciB0byBnZW5lcmF0
ZQotKiogdGhlIGZpbml0ZSBhdXRvbWF0YS4KLSoqCi0qKiBSYWdlbCBvbmx5IG5hdGl2ZWx5IGhh
bmRsZXMgcmVndWxhciBsYW5ndWFnZXMsIGJ1dCB3ZSBjYW4gbWFudWFsbHkKLSoqIHByb2dyYW0g
aXQgYSBiaXQgdG8gaGFuZGxlIGNvbnRleHQtZnJlZSBsYW5ndWFnZXMgbGlrZSBKU09OLCBieSB1
c2luZwotKiogdGhlICJmY2FsbCIgYW5kICJmcmV0IiBjb25zdHJ1Y3RzLgotKioKLSoqIFRoaXMg
cGFyc2VyIGNhbiBoYW5kbGUgdGhlIGJhc2ljcywgYnV0IG5lZWRzIHNldmVyYWwgdGhpbmdzIHRv
IGJlIGZsZXNoZWQKLSoqIG91dDoKLSoqCi0qKiAtIGhhbmRsaW5nIG9mIHVuaWNvZGUgZXNjYXBl
IHNlcXVlbmNlcyAoaW5jbHVkaW5nIGhpZ2ggc3Vycm9nYXRlIHBhaXJzKS4KLSoqIC0gcHJvcGVy
bHkgY2hlY2sgYW5kIHJlcG9ydCBlcnJvcnMgZm9yIHVua25vd24gZmllbGRzLCBzdGFjayBvdmVy
ZmxvdywKLSoqICAgaW1wcm9wZXIgYXJyYXkgbmVzdGluZyAob3IgbGFjayBvZiBuZXN0aW5nKS4K
LSoqIC0gaGFuZGxpbmcgb2YgYmFzZTY0IHNlcXVlbmNlcyB3aXRoIHBhZGRpbmcgY2hhcmFjdGVy
cy4KLSoqIC0gaGFuZGxpbmcgb2YgcHVzaC1iYWNrIChub24tc3VjY2VzcyByZXR1cm5zIGZyb20g
c2luayBmdW5jdGlvbnMpLgotKiogLSBoYW5kbGluZyBvZiBrZXlzL2VzY2FwZS1zZXF1ZW5jZXMv
ZXRjIHRoYXQgc3BhbiBpbnB1dCBidWZmZXJzLgotKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgot
I2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkbGli
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLQotI2RlZmluZSBVUEJfSlNPTl9NQVhfREVQVEgg
NjQKLQotdHlwZWRlZiBzdHJ1Y3QgewotICB1cGJfc2luayBzaW5rOwotCi0gIC8qIFRoZSBjdXJy
ZW50IG1lc3NhZ2UgaW4gd2hpY2ggd2UncmUgcGFyc2luZywgYW5kIHRoZSBmaWVsZCB3aG9zZSB2
YWx1ZSB3ZSdyZQotICAgKiBleHBlY3RpbmcgbmV4dC4gKi8KLSAgY29uc3QgdXBiX21zZ2RlZiAq
bTsKLSAgY29uc3QgdXBiX2ZpZWxkZGVmICpmOwotCi0gIC8qIFRoZSB0YWJsZSBtYXBwaW5nIGpz
b24gbmFtZSB0byBmaWVsZGRlZiBmb3IgdGhpcyBtZXNzYWdlLiAqLwotICB1cGJfc3RydGFibGUg
Km5hbWVfdGFibGU7Ci0KLSAgLyogV2UgYXJlIGluIGEgcmVwZWF0ZWQtZmllbGQgY29udGV4dCwg
cmVhZHkgdG8gZW1pdCBtYXBlbnRyaWVzIGFzCi0gICAqIHN1Ym1lc3NhZ2VzLiBUaGlzIGZsYWcg
YWx0ZXJzIHRoZSBzdGFydC1vZi1vYmplY3QgKG9wZW4tYnJhY2UpIGJlaGF2aW9yIHRvCi0gICAq
IGJlZ2luIGEgc2VxdWVuY2Ugb2YgbWFwZW50cnkgbWVzc2FnZXMgcmF0aGVyIHRoYW4gYSBzaW5n
bGUgc3VibWVzc2FnZS4gKi8KLSAgYm9vbCBpc19tYXA7Ci0KLSAgLyogV2UgYXJlIGluIGEgbWFw
LWVudHJ5IG1lc3NhZ2UgY29udGV4dC4gVGhpcyBmbGFnIGlzIHNldCB3aGVuIHBhcnNpbmcgdGhl
Ci0gICAqIHZhbHVlIGZpZWxkIG9mIGEgc2luZ2xlIG1hcCBlbnRyeSBhbmQgaW5kaWNhdGVzIHRv
IGFsbCB2YWx1ZS1maWVsZCBwYXJzZXJzCi0gICAqIChzdWJvYmplY3RzLCBzdHJpbmdzLCBudW1i
ZXJzLCBhbmQgYm9vbHMpIHRoYXQgdGhlIG1hcC1lbnRyeSBzdWJtZXNzYWdlCi0gICAqIHNob3Vs
ZCBlbmQgYXMgc29vbiBhcyB0aGUgdmFsdWUgaXMgcGFyc2VkLiAqLwotICBib29sIGlzX21hcGVu
dHJ5OwotCi0gIC8qIElmIHxpc19tYXB8IG9yIHxpc19tYXBlbnRyeXwgaXMgdHJ1ZSwgfG1hcGZp
ZWxkfCByZWZlcnMgdG8gdGhlIHBhcmVudAotICAgKiBtZXNzYWdlJ3MgbWFwIGZpZWxkIHRoYXQg
d2UncmUgY3VycmVudGx5IHBhcnNpbmcuIFRoaXMgZGlmZmVycyBmcm9tIHxmfAotICAgKiBiZWNh
dXNlIHxmfCBpcyB0aGUgZmllbGQgaW4gdGhlICpjdXJyZW50KiBtZXNzYWdlIChpLmUuLCB0aGUg
bWFwLWVudHJ5Ci0gICAqIG1lc3NhZ2UgaXRzZWxmKSwgbm90IHRoZSBwYXJlbnQncyBmaWVsZCB0
aGF0IGxlYWRzIHRvIHRoaXMgbWFwLiAqLwotICBjb25zdCB1cGJfZmllbGRkZWYgKm1hcGZpZWxk
OwotfSB1cGJfanNvbnBhcnNlcl9mcmFtZTsKLQotc3RydWN0IHVwYl9qc29uX3BhcnNlciB7Ci0g
IHVwYl9lbnYgKmVudjsKLSAgY29uc3QgdXBiX2pzb25fcGFyc2VybWV0aG9kICptZXRob2Q7Ci0g
IHVwYl9ieXRlc3NpbmsgaW5wdXRfOwotCi0gIC8qIFN0YWNrIHRvIHRyYWNrIHRoZSBKU09OIHNj
b3BlcyB3ZSBhcmUgaW4uICovCi0gIHVwYl9qc29ucGFyc2VyX2ZyYW1lIHN0YWNrW1VQQl9KU09O
X01BWF9ERVBUSF07Ci0gIHVwYl9qc29ucGFyc2VyX2ZyYW1lICp0b3A7Ci0gIHVwYl9qc29ucGFy
c2VyX2ZyYW1lICpsaW1pdDsKLQotICB1cGJfc3RhdHVzIHN0YXR1czsKLQotICAvKiBSYWdlbCdz
IGludGVybmFsIHBhcnNpbmcgc3RhY2sgZm9yIHRoZSBwYXJzaW5nIHN0YXRlIG1hY2hpbmUuICov
Ci0gIGludCBjdXJyZW50X3N0YXRlOwotICBpbnQgcGFyc2VyX3N0YWNrW1VQQl9KU09OX01BWF9E
RVBUSF07Ci0gIGludCBwYXJzZXJfdG9wOwotCi0gIC8qIFRoZSBoYW5kbGUgZm9yIHRoZSBjdXJy
ZW50IGJ1ZmZlci4gKi8KLSAgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlOwotCi0gIC8qIEFj
Y3VtdWxhdGUgYnVmZmVyLiAgU2VlIGRldGFpbHMgaW4gcGFyc2VyLnJsLiAqLwotICBjb25zdCBj
aGFyICphY2N1bXVsYXRlZDsKLSAgc2l6ZV90IGFjY3VtdWxhdGVkX2xlbjsKLSAgY2hhciAqYWNj
dW11bGF0ZV9idWY7Ci0gIHNpemVfdCBhY2N1bXVsYXRlX2J1Zl9zaXplOwotCi0gIC8qIE11bHRp
LXBhcnQgdGV4dCBkYXRhLiAgU2VlIGRldGFpbHMgaW4gcGFyc2VyLnJsLiAqLwotICBpbnQgbXVs
dGlwYXJ0X3N0YXRlOwotICB1cGJfc2VsZWN0b3JfdCBzdHJpbmdfc2VsZWN0b3I7Ci0KLSAgLyog
SW5wdXQgY2FwdHVyZS4gIFNlZSBkZXRhaWxzIGluIHBhcnNlci5ybC4gKi8KLSAgY29uc3QgY2hh
ciAqY2FwdHVyZTsKLQotICAvKiBJbnRlcm1lZGlhdGUgcmVzdWx0IG9mIHBhcnNpbmcgYSB1bmlj
b2RlIGVzY2FwZSBzZXF1ZW5jZS4gKi8KLSAgdWludDMyX3QgZGlnaXQ7Ci19OwotCi1zdHJ1Y3Qg
dXBiX2pzb25fcGFyc2VybWV0aG9kIHsKLSAgdXBiX3JlZmNvdW50ZWQgYmFzZTsKLQotICB1cGJf
Ynl0ZXNoYW5kbGVyIGlucHV0X2hhbmRsZXJfOwotCi0gIC8qIE1haW5seSBmb3IgdGhlIHB1cnBv
c2VzIG9mIHJlZmNvdW50aW5nLCBzbyBhbGwgdGhlIGZpZWxkZGVmcyB3ZSBwb2ludAotICAgKiB0
byBzdGF5IGFsaXZlLiAqLwotICBjb25zdCB1cGJfbXNnZGVmICptc2c7Ci0KLSAgLyogS2V5cyBh
cmUgdXBiX21zZ2RlZiosIHZhbHVlcyBhcmUgdXBiX3N0cnRhYmxlIChqc29uX25hbWUgLT4gZmll
bGRkZWYpICovCi0gIHVwYl9pbnR0YWJsZSBuYW1lX3RhYmxlczsKLX07Ci0KLSNkZWZpbmUgUEFS
U0VSX0NIRUNLX1JFVFVSTih4KSBpZiAoISh4KSkgcmV0dXJuIGZhbHNlCi0KLS8qIFVzZWQgdG8g
c2lnbmFsIHRoYXQgYSBjYXB0dXJlIGhhcyBiZWVuIHN1c3BlbmRlZC4gKi8KLXN0YXRpYyBjaGFy
IHN1c3BlbmRfY2FwdHVyZTsKLQotc3RhdGljIHVwYl9zZWxlY3Rvcl90IGdldHNlbF9mb3JfaGFu
ZGxlcnR5cGUodXBiX2pzb25fcGFyc2VyICpwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJ0eXBlX3QgdHlwZSkgewotICB1cGJfc2VsZWN0
b3JfdCBzZWw7Ci0gIGJvb2wgb2sgPSB1cGJfaGFuZGxlcnNfZ2V0c2VsZWN0b3IocC0+dG9wLT5m
LCB0eXBlLCAmc2VsKTsKLSAgVVBCX0FTU0VSVF9WQVIob2ssIG9rKTsKLSAgcmV0dXJuIHNlbDsK
LX0KLQotc3RhdGljIHVwYl9zZWxlY3Rvcl90IHBhcnNlcl9nZXRzZWwodXBiX2pzb25fcGFyc2Vy
ICpwKSB7Ci0gIHJldHVybiBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKAotICAgICAgcCwgdXBiX2hh
bmRsZXJzX2dldHByaW1pdGl2ZWhhbmRsZXJ0eXBlKHAtPnRvcC0+ZikpOwotfQotCi1zdGF0aWMg
Ym9vbCBjaGVja19zdGFjayh1cGJfanNvbl9wYXJzZXIgKnApIHsKLSAgaWYgKChwLT50b3AgKyAx
KSA9PSBwLT5saW1pdCkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJybXNnKCZwLT5zdGF0dXMsICJO
ZXN0aW5nIHRvbyBkZWVwIik7Ci0gICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5z
dGF0dXMpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgdm9pZCBzZXRfbmFtZV90YWJsZSh1cGJfanNvbl9wYXJzZXIgKnAsIHVwYl9qc29ucGFy
c2VyX2ZyYW1lICpmcmFtZSkgewotICB1cGJfdmFsdWUgdjsKLSAgYm9vbCBvayA9IHVwYl9pbnR0
YWJsZV9sb29rdXBwdHIoJnAtPm1ldGhvZC0+bmFtZV90YWJsZXMsIGZyYW1lLT5tLCAmdik7Ci0g
IFVQQl9BU1NFUlRfVkFSKG9rLCBvayk7Ci0gIGZyYW1lLT5uYW1lX3RhYmxlID0gdXBiX3ZhbHVl
X2dldHB0cih2KTsKLX0KLQotLyogVGhlcmUgYXJlIEdDQy9DbGFuZyBidWlsdC1pbnMgZm9yIG92
ZXJmbG93IGNoZWNraW5nIHdoaWNoIHdlIGNvdWxkIHN0YXJ0Ci0gKiB1c2luZyBpZiB0aGVyZSB3
YXMgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXQgdG8gaXQuICovCi0KLXN0YXRpYyBib29sIGNoZWNr
ZWRfYWRkKHNpemVfdCBhLCBzaXplX3QgYiwgc2l6ZV90ICpjKSB7Ci0gIGlmIChTSVpFX01BWCAt
IGEgPCBiKSByZXR1cm4gZmFsc2U7Ci0gICpjID0gYSArIGI7Ci0gIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgc2l6ZV90IHNhdHVyYXRpbmdfbXVsdGlwbHkoc2l6ZV90IGEsIHNpemVfdCBiKSB7
Ci0gIC8qIHNpemVfdCBpcyB1bnNpZ25lZCwgc28gdGhpcyBpcyBkZWZpbmVkIGJlaGF2aW9yIGV2
ZW4gb24gb3ZlcmZsb3cuICovCi0gIHNpemVfdCByZXQgPSBhICogYjsKLSAgaWYgKGIgIT0gMCAm
JiByZXQgLyBiICE9IGEpIHsKLSAgICByZXQgPSBTSVpFX01BWDsKLSAgfQotICByZXR1cm4gcmV0
OwotfQotCi0KLS8qIEJhc2U2NCBkZWNvZGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRPRE8oaGFiZXJtYW4pOiBt
YWtlIHRoaXMgc3RyZWFtaW5nLiAqLwotCi1zdGF0aWMgY29uc3Qgc2lnbmVkIGNoYXIgYjY0dGFi
bGVbXSA9IHsKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAg
LTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAt
MSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAg
ICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAg
LTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICA2Mi8qKyovLCAt
MSwgICAgICAtMSwgICAgICAtMSwgICAgICA2My8qLyAqLywKLSAgNTIvKjAqLywgNTMvKjEqLywg
NTQvKjIqLywgNTUvKjMqLywgNTYvKjQqLywgNTcvKjUqLywgNTgvKjYqLywgNTkvKjcqLywKLSAg
NjAvKjgqLywgNjEvKjkqLywgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEs
ICAgICAgLTEsCi0gIC0xLCAgICAgICAwLypBKi8sICAxLypCKi8sICAyLypDKi8sICAzLypEKi8s
ICA0LypFKi8sICA1LypGKi8sICA2LypHKi8sCi0gIDA3LypIKi8sICA4LypJKi8sICA5LypKKi8s
IDEwLypLKi8sIDExLypMKi8sIDEyLypNKi8sIDEzLypOKi8sIDE0LypPKi8sCi0gIDE1LypQKi8s
IDE2LypRKi8sIDE3LypSKi8sIDE4LypTKi8sIDE5LypUKi8sIDIwLypVKi8sIDIxLypWKi8sIDIy
LypXKi8sCi0gIDIzLypYKi8sIDI0LypZKi8sIDI1LypaKi8sIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAyNi8qYSovLCAyNy8qYiovLCAyOC8qYyov
LCAyOS8qZCovLCAzMC8qZSovLCAzMS8qZiovLCAzMi8qZyovLAotICAzMy8qaCovLCAzNC8qaSov
LCAzNS8qaiovLCAzNi8qayovLCAzNy8qbCovLCAzOC8qbSovLCAzOS8qbiovLCA0MC8qbyovLAot
ICA0MS8qcCovLCA0Mi8qcSovLCA0My8qciovLCA0NC8qcyovLCA0NS8qdCovLCA0Ni8qdSovLCA0
Ny8qdiovLCA0OC8qdyovLAotICA0OS8qeCovLCA1MC8qeSovLCA1MS8qeiovLCAtMSwgICAgICAt
MSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAg
ICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0x
LCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAot
ICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAt
MSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAg
ICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEs
ICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAg
ICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEs
ICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAg
IC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0x
LAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEs
ICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAg
IC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwg
ICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAg
LTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEs
ICAgICAgLTEKLX07Ci0KLS8qIFJldHVybnMgdGhlIHRhYmxlIHZhbHVlIHNpZ24tZXh0ZW5kZWQg
dG8gMzIgYml0cy4gIEtub3dpbmcgdGhhdCB0aGUgdXBwZXIKLSAqIGJpdHMgd2lsbCBiZSAxIGZv
ciB1bnJlY29nbml6ZWQgY2hhcmFjdGVycyBtYWtlcyBpdCBlYXNpZXIgdG8gY2hlY2sgZm9yCi0g
KiB0aGlzIGVycm9yIGNvbmRpdGlvbiBsYXRlciAoc2VlIGJlbG93KS4gKi8KLWludDMyX3QgYjY0
bG9va3VwKHVuc2lnbmVkIGNoYXIgY2gpIHsgcmV0dXJuIGI2NHRhYmxlW2NoXTsgfQotCi0vKiBS
ZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyBub3QgYSB2YWxpZCBiYXNlNjQg
Y2hhcmFjdGVyIG9yCi0gKiBwYWRkaW5nLiAqLwotYm9vbCBub25iYXNlNjQodW5zaWduZWQgY2hh
ciBjaCkgeyByZXR1cm4gYjY0bG9va3VwKGNoKSA9PSAtMSAmJiBjaCAhPSAnPSc7IH0KLQotc3Rh
dGljIGJvb2wgYmFzZTY0X3B1c2godXBiX2pzb25fcGFyc2VyICpwLCB1cGJfc2VsZWN0b3JfdCBz
ZWwsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4p
IHsKLSAgY29uc3QgY2hhciAqbGltaXQgPSBwdHIgKyBsZW47Ci0gIGZvciAoOyBwdHIgPCBsaW1p
dDsgcHRyICs9IDQpIHsKLSAgICB1aW50MzJfdCB2YWw7Ci0gICAgY2hhciBvdXRwdXRbM107Ci0K
LSAgICBpZiAobGltaXQgLSBwdHIgPCA0KSB7Ci0gICAgICB1cGJfc3RhdHVzX3NldGVycmYoJnAt
PnN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzZTY0IGlucHV0IGZvciBieXRl
cyBmaWVsZCBub3QgYSBtdWx0aXBsZSBvZiA0OiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgdXBiX2ZpZWxkZGVmX25hbWUocC0+dG9wLT5mKSk7Ci0gICAgICB1cGJfZW52X3JlcG9ydGVy
cm9yKHAtPmVudiwgJnAtPnN0YXR1cyk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgdmFsID0gYjY0bG9va3VwKHB0clswXSkgPDwgMTggfAotICAgICAgICAgIGI2NGxvb2t1cChw
dHJbMV0pIDw8IDEyIHwKLSAgICAgICAgICBiNjRsb29rdXAocHRyWzJdKSA8PCA2ICB8Ci0gICAg
ICAgICAgYjY0bG9va3VwKHB0clszXSk7Ci0KLSAgICAvKiBUZXN0IHRoZSB1cHBlciBiaXQ7IHJl
dHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGNoYXJhY3RlcnMgcmV0dXJuZWQgLTEuICovCi0gICAg
aWYgKHZhbCAmIDB4ODAwMDAwMDApIHsKLSAgICAgIGdvdG8gb3RoZXJjaGFyOwotICAgIH0KLQot
ICAgIG91dHB1dFswXSA9IHZhbCA+PiAxNjsKLSAgICBvdXRwdXRbMV0gPSAodmFsID4+IDgpICYg
MHhmZjsKLSAgICBvdXRwdXRbMl0gPSB2YWwgJiAweGZmOwotICAgIHVwYl9zaW5rX3B1dHN0cmlu
ZygmcC0+dG9wLT5zaW5rLCBzZWwsIG91dHB1dCwgMywgTlVMTCk7Ci0gIH0KLSAgcmV0dXJuIHRy
dWU7Ci0KLW90aGVyY2hhcjoKLSAgaWYgKG5vbmJhc2U2NChwdHJbMF0pIHx8IG5vbmJhc2U2NChw
dHJbMV0pIHx8IG5vbmJhc2U2NChwdHJbMl0pIHx8Ci0gICAgICBub25iYXNlNjQocHRyWzNdKSAp
IHsKLSAgICB1cGJfc3RhdHVzX3NldGVycmYoJnAtPnN0YXR1cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIk5vbi1iYXNlNjQgY2hhcmFjdGVycyBpbiBieXRlcyBmaWVsZDogJXMiLAotICAgICAg
ICAgICAgICAgICAgICAgICB1cGJfZmllbGRkZWZfbmFtZShwLT50b3AtPmYpKTsKLSAgICB1cGJf
ZW52X3JlcG9ydGVycm9yKHAtPmVudiwgJnAtPnN0YXR1cyk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9IGlmIChwdHJbMl0gPT0gJz0nKSB7Ci0gICAgdWludDMyX3QgdmFsOwotICAgIGNoYXIgb3V0
cHV0OwotCi0gICAgLyogTGFzdCBncm91cCBjb250YWlucyBvbmx5IHR3byBpbnB1dCBieXRlcywg
b25lIG91dHB1dCBieXRlLiAqLwotICAgIGlmIChwdHJbMF0gPT0gJz0nIHx8IHB0clsxXSA9PSAn
PScgfHwgcHRyWzNdICE9ICc9JykgewotICAgICAgZ290byBiYWRwYWRkaW5nOwotICAgIH0KLQot
ICAgIHZhbCA9IGI2NGxvb2t1cChwdHJbMF0pIDw8IDE4IHwKLSAgICAgICAgICBiNjRsb29rdXAo
cHRyWzFdKSA8PCAxMjsKLQotICAgIGFzc2VydCghKHZhbCAmIDB4ODAwMDAwMDApKTsKLSAgICBv
dXRwdXQgPSB2YWwgPj4gMTY7Ci0gICAgdXBiX3NpbmtfcHV0c3RyaW5nKCZwLT50b3AtPnNpbmss
IHNlbCwgJm91dHB1dCwgMSwgTlVMTCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0g
ICAgdWludDMyX3QgdmFsOwotICAgIGNoYXIgb3V0cHV0WzJdOwotCi0gICAgLyogTGFzdCBncm91
cCBjb250YWlucyBvbmx5IHRocmVlIGlucHV0IGJ5dGVzLCB0d28gb3V0cHV0IGJ5dGVzLiAqLwot
ICAgIGlmIChwdHJbMF0gPT0gJz0nIHx8IHB0clsxXSA9PSAnPScgfHwgcHRyWzJdID09ICc9Jykg
ewotICAgICAgZ290byBiYWRwYWRkaW5nOwotICAgIH0KLQotICAgIHZhbCA9IGI2NGxvb2t1cChw
dHJbMF0pIDw8IDE4IHwKLSAgICAgICAgICBiNjRsb29rdXAocHRyWzFdKSA8PCAxMiB8Ci0gICAg
ICAgICAgYjY0bG9va3VwKHB0clsyXSkgPDwgNjsKLQotICAgIG91dHB1dFswXSA9IHZhbCA+PiAx
NjsKLSAgICBvdXRwdXRbMV0gPSAodmFsID4+IDgpICYgMHhmZjsKLSAgICB1cGJfc2lua19wdXRz
dHJpbmcoJnAtPnRvcC0+c2luaywgc2VsLCBvdXRwdXQsIDIsIE5VTEwpOwotICAgIHJldHVybiB0
cnVlOwotICB9Ci0KLWJhZHBhZGRpbmc6Ci0gIHVwYl9zdGF0dXNfc2V0ZXJyZigmcC0+c3RhdHVz
LAotICAgICAgICAgICAgICAgICAgICAgIkluY29ycmVjdCBiYXNlNjQgcGFkZGluZyBmb3IgZmll
bGQ6ICVzICglLipzKSIsCi0gICAgICAgICAgICAgICAgICAgICB1cGJfZmllbGRkZWZfbmFtZShw
LT50b3AtPmYpLAotICAgICAgICAgICAgICAgICAgICAgNCwgcHRyKTsKLSAgdXBiX2Vudl9yZXBv
cnRlcnJvcihwLT5lbnYsICZwLT5zdGF0dXMpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLQotLyog
QWNjdW11bGF0ZSBidWZmZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLQotLyogRnVuY3Rpb25hbGl0eSBmb3IgYWNjdW11bGF0aW5n
IGEgYnVmZmVyLgotICoKLSAqIFNvbWUgcGFydHMgb2YgdGhlIHBhcnNlciBuZWVkIGFuIGVudGly
ZSB2YWx1ZSBhcyBhIGNvbnRpZ3VvdXMgc3RyaW5nLiAgRm9yCi0gKiBleGFtcGxlLCB0byBsb29r
IHVwIGEgbWVtYmVyIG5hbWUgaW4gYSBoYXNoIHRhYmxlLCBvciB0byB0dXJuIGEgc3RyaW5nIGlu
dG8KLSAqIGEgbnVtYmVyLCB0aGUgcmVsZXZhbnQgbGlicmFyeSByb3V0aW5lcyBuZWVkIHRoZSBp
bnB1dCBzdHJpbmcgdG8gYmUgaW4KLSAqIGNvbnRpZ3VvdXMgbWVtb3J5LCBldmVuIGlmIHRoZSB2
YWx1ZSBzcGFubmVkIHR3byBvciBtb3JlIGJ1ZmZlcnMgaW4gdGhlCi0gKiBpbnB1dC4gIFRoZXNl
IHJvdXRpbmVzIGhhbmRsZSB0aGF0LgotICoKLSAqIEluIHRoZSBjb21tb24gY2FzZSB3ZSBjYW4g
anVzdCBwb2ludCB0byB0aGUgaW5wdXQgYnVmZmVyIHRvIGdldCB0aGlzCi0gKiBjb250aWd1b3Vz
IHN0cmluZyBhbmQgYXZvaWQgYW55IGFjdHVhbCBjb3B5LiAgU28gd2Ugb3B0aW1pc3RpY2FsbHkg
YmVnaW4KLSAqIHRoaXMgd2F5LiAgQnV0IHRoZXJlIGFyZSBhIGZldyBjYXNlcyB3aGVyZSB3ZSBt
dXN0IGluc3RlYWQgY29weSBpbnRvIGEKLSAqIHNlcGFyYXRlIGJ1ZmZlcjoKLSAqCi0gKiAgIDEu
IFRoZSBzdHJpbmcgd2FzIG5vdCBjb250aWd1b3VzIGluIHRoZSBpbnB1dCAoaXQgc3Bhbm5lZCBi
dWZmZXJzKS4KLSAqCi0gKiAgIDIuIFRoZSBzdHJpbmcgaW5jbHVkZWQgZXNjYXBlIHNlcXVlbmNl
cyB0aGF0IG5lZWQgdG8gYmUgaW50ZXJwcmV0ZWQgdG8gZ2V0Ci0gKiAgICAgIHRoZSB0cnVlIHZh
bHVlIGluIGEgY29udGlndW91cyBidWZmZXIuICovCi0KLXN0YXRpYyB2b2lkIGFzc2VydF9hY2N1
bXVsYXRlX2VtcHR5KHVwYl9qc29uX3BhcnNlciAqcCkgewotICBVUEJfVU5VU0VEKHApOwotICBh
c3NlcnQocC0+YWNjdW11bGF0ZWQgPT0gTlVMTCk7Ci0gIGFzc2VydChwLT5hY2N1bXVsYXRlZF9s
ZW4gPT0gMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjY3VtdWxhdGVfY2xlYXIodXBiX2pzb25fcGFy
c2VyICpwKSB7Ci0gIHAtPmFjY3VtdWxhdGVkID0gTlVMTDsKLSAgcC0+YWNjdW11bGF0ZWRfbGVu
ID0gMDsKLX0KLQotLyogVXNlZCBpbnRlcm5hbGx5IGJ5IGFjY3VtdWxhdGVfYXBwZW5kKCkuICov
Ci1zdGF0aWMgYm9vbCBhY2N1bXVsYXRlX3JlYWxsb2ModXBiX2pzb25fcGFyc2VyICpwLCBzaXpl
X3QgbmVlZCkgewotICB2b2lkICptZW07Ci0gIHNpemVfdCBvbGRfc2l6ZSA9IHAtPmFjY3VtdWxh
dGVfYnVmX3NpemU7Ci0gIHNpemVfdCBuZXdfc2l6ZSA9IFVQQl9NQVgob2xkX3NpemUsIDEyOCk7
Ci0gIHdoaWxlIChuZXdfc2l6ZSA8IG5lZWQpIHsKLSAgICBuZXdfc2l6ZSA9IHNhdHVyYXRpbmdf
bXVsdGlwbHkobmV3X3NpemUsIDIpOwotICB9Ci0KLSAgbWVtID0gdXBiX2Vudl9yZWFsbG9jKHAt
PmVudiwgcC0+YWNjdW11bGF0ZV9idWYsIG9sZF9zaXplLCBuZXdfc2l6ZSk7Ci0gIGlmICghbWVt
KSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJtc2coJnAtPnN0YXR1cywgIk91dCBvZiBtZW1vcnkg
YWxsb2NhdGluZyBidWZmZXIuIik7Ci0gICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZw
LT5zdGF0dXMpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHAtPmFjY3VtdWxhdGVfYnVm
ID0gbWVtOwotICBwLT5hY2N1bXVsYXRlX2J1Zl9zaXplID0gbmV3X3NpemU7Ci0gIHJldHVybiB0
cnVlOwotfQotCi0vKiBMb2dpY2FsbHkgYXBwZW5kcyB0aGUgZ2l2ZW4gZGF0YSB0byB0aGUgYXBw
ZW5kIGJ1ZmZlci4KLSAqIElmICJjYW5fYWxpYXMiIGlzIHRydWUsIHdlIHdpbGwgdHJ5IHRvIGF2
b2lkIGFjdHVhbGx5IGNvcHlpbmcsIGJ1dCB0aGUgYnVmZmVyCi0gKiBtdXN0IGJlIHZhbGlkIHVu
dGlsIHRoZSBuZXh0IGFjY3VtdWxhdGVfYXBwZW5kKCkgY2FsbCAoaWYgYW55KS4gKi8KLXN0YXRp
YyBib29sIGFjY3VtdWxhdGVfYXBwZW5kKHVwYl9qc29uX3BhcnNlciAqcCwgY29uc3QgY2hhciAq
YnVmLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5f
YWxpYXMpIHsKLSAgc2l6ZV90IG5lZWQ7Ci0KLSAgaWYgKCFwLT5hY2N1bXVsYXRlZCAmJiBjYW5f
YWxpYXMpIHsKLSAgICBwLT5hY2N1bXVsYXRlZCA9IGJ1ZjsKLSAgICBwLT5hY2N1bXVsYXRlZF9s
ZW4gPSBsZW47Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpZiAoIWNoZWNrZWRfYWRkKHAt
PmFjY3VtdWxhdGVkX2xlbiwgbGVuLCAmbmVlZCkpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1z
ZygmcC0+c3RhdHVzLCAiSW50ZWdlciBvdmVyZmxvdy4iKTsKLSAgICB1cGJfZW52X3JlcG9ydGVy
cm9yKHAtPmVudiwgJnAtPnN0YXR1cyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYg
KG5lZWQgPiBwLT5hY2N1bXVsYXRlX2J1Zl9zaXplICYmICFhY2N1bXVsYXRlX3JlYWxsb2MocCwg
bmVlZCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAocC0+YWNjdW11bGF0ZWQg
IT0gcC0+YWNjdW11bGF0ZV9idWYpIHsKLSAgICBtZW1jcHkocC0+YWNjdW11bGF0ZV9idWYsIHAt
PmFjY3VtdWxhdGVkLCBwLT5hY2N1bXVsYXRlZF9sZW4pOwotICAgIHAtPmFjY3VtdWxhdGVkID0g
cC0+YWNjdW11bGF0ZV9idWY7Ci0gIH0KLQotICBtZW1jcHkocC0+YWNjdW11bGF0ZV9idWYgKyBw
LT5hY2N1bXVsYXRlZF9sZW4sIGJ1ZiwgbGVuKTsKLSAgcC0+YWNjdW11bGF0ZWRfbGVuICs9IGxl
bjsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkYXRh
IGFjY3VtdWxhdGVkIHNpbmNlIHRoZSBsYXN0IGFjY3VtdWxhdGVfY2xlYXIoKQotICogY2FsbCwg
YW5kIHdyaXRlcyB0aGUgbGVuZ3RoIHRvICpsZW4uICBUaGlzIHdpdGggcG9pbnQgZWl0aGVyIHRv
IHRoZSBpbnB1dAotICogYnVmZmVyIG9yIGEgdGVtcG9yYXJ5IGFjY3VtdWxhdGUgYnVmZmVyLiAq
Lwotc3RhdGljIGNvbnN0IGNoYXIgKmFjY3VtdWxhdGVfZ2V0cHRyKHVwYl9qc29uX3BhcnNlciAq
cCwgc2l6ZV90ICpsZW4pIHsKLSAgYXNzZXJ0KHAtPmFjY3VtdWxhdGVkKTsKLSAgKmxlbiA9IHAt
PmFjY3VtdWxhdGVkX2xlbjsKLSAgcmV0dXJuIHAtPmFjY3VtdWxhdGVkOwotfQotCi0KLS8qIE11
bHQtcGFydCB0ZXh0IGRhdGEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLS8qIFdoZW4gd2UgaGF2ZSB0ZXh0IGRhdGEgaW4gdGhlIGlu
cHV0LCBpdCBjYW4gb2Z0ZW4gY29tZSBpbiBtdWx0aXBsZSBzZWdtZW50cy4KLSAqIEZvciBleGFt
cGxlLCB0aGVyZSBtYXkgYmUgc29tZSByYXcgc3RyaW5nIGRhdGEgZm9sbG93ZWQgYnkgYW4gZXNj
YXBlCi0gKiBzZXF1ZW5jZS4gIFRoZSB0d28gc2VnbWVudHMgYXJlIHByb2Nlc3NlZCB3aXRoIGRp
ZmZlcmVudCBsb2dpYy4gIEFsc28gYnVmZmVyCi0gKiBzZWFtcyBpbiB0aGUgaW5wdXQgY2FuIGNh
dXNlIG11bHRpcGxlIHNlZ21lbnRzLgotICoKLSAqIEFzIHdlIHNlZSBzZWdtZW50cywgdGhlcmUg
YXJlIHR3byBtYWluIGNhc2VzIGZvciBob3cgd2Ugd2FudCB0byBwcm9jZXNzIHRoZW06Ci0gKgot
ICogIDEuIHdlIHdhbnQgdG8gcHVzaCB0aGUgY2FwdHVyZWQgaW5wdXQgZGlyZWN0bHkgdG8gc3Ry
aW5nIGhhbmRsZXJzLgotICoKLSAqICAyLiB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgYWxsIHRoZSBw
YXJ0cyBpbnRvIGEgY29udGlndW91cyBidWZmZXIgZm9yIGZ1cnRoZXIKLSAqICAgICBwcm9jZXNz
aW5nIChmaWVsZCBuYW1lIGxvb2t1cCwgc3RyaW5nLT5udW1iZXIgY29udmVyc2lvbiwgZXRjKS4g
Ki8KLQotLyogVGhpcyBpcyB0aGUgc2V0IG9mIHN0YXRlcyBmb3IgcC0+bXVsdGlwYXJ0X3N0YXRl
LiAqLwotZW51bSB7Ci0gIC8qIFdlIGFyZSBub3QgY3VycmVudGx5IHByb2Nlc3NpbmcgbXVsdGlw
YXJ0IGRhdGEuICovCi0gIE1VTFRJUEFSVF9JTkFDVElWRSA9IDAsCi0KLSAgLyogV2UgYXJlIHBy
b2Nlc3NpbmcgbXVsdGlwYXJ0IGRhdGEgYnkgYWNjdW11bGF0aW5nIGl0IGludG8gYSBjb250aWd1
b3VzCi0gICAqIGJ1ZmZlci4gKi8KLSAgTVVMVElQQVJUX0FDQ1VNVUxBVEUgPSAxLAotCi0gIC8q
IFdlIGFyZSBwcm9jZXNzaW5nIG11bHRpcGFydCBkYXRhIGJ5IHB1c2hpbmcgZWFjaCBwYXJ0IGRp
cmVjdGx5IHRvIHRoZQotICAgKiBjdXJyZW50IHN0cmluZyBoYW5kbGVycy4gKi8KLSAgTVVMVElQ
QVJUX1BVU0hFQUdFUkxZID0gMgotfTsKLQotLyogU3RhcnQgYSBtdWx0aS1wYXJ0IHRleHQgdmFs
dWUgd2hlcmUgd2UgYWNjdW11bGF0ZSB0aGUgZGF0YSBmb3IgcHJvY2Vzc2luZyBhdAotICogdGhl
IGVuZC4gKi8KLXN0YXRpYyB2b2lkIG11bHRpcGFydF9zdGFydGFjY3VtKHVwYl9qc29uX3BhcnNl
ciAqcCkgewotICBhc3NlcnRfYWNjdW11bGF0ZV9lbXB0eShwKTsKLSAgYXNzZXJ0KHAtPm11bHRp
cGFydF9zdGF0ZSA9PSBNVUxUSVBBUlRfSU5BQ1RJVkUpOwotICBwLT5tdWx0aXBhcnRfc3RhdGUg
PSBNVUxUSVBBUlRfQUNDVU1VTEFURTsKLX0KLQotLyogU3RhcnQgYSBtdWx0aS1wYXJ0IHRleHQg
dmFsdWUgd2hlcmUgd2UgaW1tZWRpYXRlbHkgcHVzaCB0ZXh0IGRhdGEgdG8gYSBzdHJpbmcKLSAq
IHZhbHVlIHdpdGggdGhlIGdpdmVuIHNlbGVjdG9yLiAqLwotc3RhdGljIHZvaWQgbXVsdGlwYXJ0
X3N0YXJ0KHVwYl9qc29uX3BhcnNlciAqcCwgdXBiX3NlbGVjdG9yX3Qgc2VsKSB7Ci0gIGFzc2Vy
dF9hY2N1bXVsYXRlX2VtcHR5KHApOwotICBhc3NlcnQocC0+bXVsdGlwYXJ0X3N0YXRlID09IE1V
TFRJUEFSVF9JTkFDVElWRSk7Ci0gIHAtPm11bHRpcGFydF9zdGF0ZSA9IE1VTFRJUEFSVF9QVVNI
RUFHRVJMWTsKLSAgcC0+c3RyaW5nX3NlbGVjdG9yID0gc2VsOwotfQotCi1zdGF0aWMgYm9vbCBt
dWx0aXBhcnRfdGV4dCh1cGJfanNvbl9wYXJzZXIgKnAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90
IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuX2FsaWFzKSB7Ci0gIHN3
aXRjaCAocC0+bXVsdGlwYXJ0X3N0YXRlKSB7Ci0gICAgY2FzZSBNVUxUSVBBUlRfSU5BQ1RJVkU6
Ci0gICAgICB1cGJfc3RhdHVzX3NldGVycm1zZygKLSAgICAgICAgICAmcC0+c3RhdHVzLCAiSW50
ZXJuYWwgZXJyb3I6IHVuZXhwZWN0ZWQgc3RhdGUgTVVMVElQQVJUX0lOQUNUSVZFIik7Ci0gICAg
ICB1cGJfZW52X3JlcG9ydGVycm9yKHAtPmVudiwgJnAtPnN0YXR1cyk7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBjYXNlIE1VTFRJUEFSVF9BQ0NVTVVMQVRFOgotICAgICAgaWYgKCFhY2N1
bXVsYXRlX2FwcGVuZChwLCBidWYsIGxlbiwgY2FuX2FsaWFzKSkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgTVVMVElQQVJUX1BVU0hF
QUdFUkxZOiB7Ci0gICAgICBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUgPSBjYW5fYWxpYXMg
PyBwLT5oYW5kbGUgOiBOVUxMOwotICAgICAgdXBiX3NpbmtfcHV0c3RyaW5nKCZwLT50b3AtPnNp
bmssIHAtPnN0cmluZ19zZWxlY3RvciwgYnVmLCBsZW4sIGhhbmRsZSk7Ci0gICAgICBicmVhazsK
LSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLyogTm90ZTogdGhpcyBpbnZhbGlk
YXRlcyB0aGUgYWNjdW11bGF0ZSBidWZmZXIhICBDYWxsIG9ubHkgYWZ0ZXIgcmVhZGluZyBpdHMK
LSAqIGNvbnRlbnRzLiAqLwotc3RhdGljIHZvaWQgbXVsdGlwYXJ0X2VuZCh1cGJfanNvbl9wYXJz
ZXIgKnApIHsKLSAgYXNzZXJ0KHAtPm11bHRpcGFydF9zdGF0ZSAhPSBNVUxUSVBBUlRfSU5BQ1RJ
VkUpOwotICBwLT5tdWx0aXBhcnRfc3RhdGUgPSBNVUxUSVBBUlRfSU5BQ1RJVkU7Ci0gIGFjY3Vt
dWxhdGVfY2xlYXIocCk7Ci19Ci0KLQotLyogSW5wdXQgY2FwdHVyZSAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRnVu
Y3Rpb25hbGl0eSBmb3IgY2FwdHVyaW5nIGEgcmVnaW9uIG9mIHRoZSBpbnB1dCBhcyB0ZXh0LiAg
R3JhY2VmdWxseQotICogaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBhIGJ1ZmZlciBzZWFtIG9jY3Vy
cyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjYXB0dXJlZAotICogcmVnaW9uLiAqLwotCi1zdGF0aWMg
dm9pZCBjYXB0dXJlX2JlZ2luKHVwYl9qc29uX3BhcnNlciAqcCwgY29uc3QgY2hhciAqcHRyKSB7
Ci0gIGFzc2VydChwLT5tdWx0aXBhcnRfc3RhdGUgIT0gTVVMVElQQVJUX0lOQUNUSVZFKTsKLSAg
YXNzZXJ0KHAtPmNhcHR1cmUgPT0gTlVMTCk7Ci0gIHAtPmNhcHR1cmUgPSBwdHI7Ci19Ci0KLXN0
YXRpYyBib29sIGNhcHR1cmVfZW5kKHVwYl9qc29uX3BhcnNlciAqcCwgY29uc3QgY2hhciAqcHRy
KSB7Ci0gIGFzc2VydChwLT5jYXB0dXJlKTsKLSAgaWYgKG11bHRpcGFydF90ZXh0KHAsIHAtPmNh
cHR1cmUsIHB0ciAtIHAtPmNhcHR1cmUsIHRydWUpKSB7Ci0gICAgcC0+Y2FwdHVyZSA9IE5VTEw7
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19
Ci0KLS8qIFRoaXMgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBpbnB1dCBidWZmZXIgKGll
LiB3aGVuIHdlIGhhdmUgaGl0IGEKLSAqIGJ1ZmZlciBzZWFtKS4gIElmIHdlIGFyZSBpbiB0aGUg
bWlkZGxlIG9mIGNhcHR1cmluZyB0aGUgaW5wdXQsIHRoaXMKLSAqIHByb2Nlc3NlcyB0aGUgdW5w
cm9jZXNzZWQgY2FwdHVyZSByZWdpb24uICovCi1zdGF0aWMgdm9pZCBjYXB0dXJlX3N1c3BlbmQo
dXBiX2pzb25fcGFyc2VyICpwLCBjb25zdCBjaGFyICoqcHRyKSB7Ci0gIGlmICghcC0+Y2FwdHVy
ZSkgcmV0dXJuOwotCi0gIGlmIChtdWx0aXBhcnRfdGV4dChwLCBwLT5jYXB0dXJlLCAqcHRyIC0g
cC0+Y2FwdHVyZSwgZmFsc2UpKSB7Ci0gICAgLyogV2UgdXNlIHRoaXMgYXMgYSBzaWduYWwgdGhh
dCB3ZSB3ZXJlIGluIHRoZSBtaWRkbGUgb2YgY2FwdHVyaW5nLCBhbmQKLSAgICAgKiB0aGF0IGNh
cHR1cmluZyBzaG91bGQgcmVzdW1lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgYnVmZmVy
LgotICAgICAqIAotICAgICAqIFdlIGNhbid0IHVzZSAqcHRyIGhlcmUsIGJlY2F1c2Ugd2UgaGF2
ZSBubyBndWFyYW50ZWUgdGhhdCB0aGlzIHBvaW50ZXIKLSAgICAgKiB3aWxsIGJlIHZhbGlkIHdo
ZW4gd2UgcmVzdW1lIChpZiB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXMgZnJlZWQsIHRoZW4KLSAg
ICAgKiB1c2luZyB0aGUgcG9pbnRlciBhdCBhbGwsIGV2ZW4gdG8gY29tcGFyZSB0byBOVUxMLCBp
cyBsaWtlbHkgdW5kZWZpbmVkCi0gICAgICogYmVoYXZpb3IpLiAqLwotICAgIHAtPmNhcHR1cmUg
PSAmc3VzcGVuZF9jYXB0dXJlOwotICB9IGVsc2UgewotICAgIC8qIE5lZWQgdG8gYmFjayB1cCB0
aGUgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjYXB0dXJlLCBzaW5jZQotICAgICAq
IHdlIHdlcmUgbm90IGFibGUgdG8gYWN0dWFsbHkgcHJlc2VydmUgaXQuICovCi0gICAgKnB0ciA9
IHAtPmNhcHR1cmU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgY2FwdHVyZV9yZXN1bWUodXBiX2pz
b25fcGFyc2VyICpwLCBjb25zdCBjaGFyICpwdHIpIHsKLSAgaWYgKHAtPmNhcHR1cmUpIHsKLSAg
ICBhc3NlcnQocC0+Y2FwdHVyZSA9PSAmc3VzcGVuZF9jYXB0dXJlKTsKLSAgICBwLT5jYXB0dXJl
ID0gcHRyOwotICB9Ci19Ci0KLQotLyogQ2FsbGJhY2tzIGZyb20gdGhlIHBhcnNlciAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhlc2Ug
YXJlIHRoZSBmdW5jdGlvbnMgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIHBhcnNlciBpdHNlbGYu
Ci0gKiBXZSBkZWZpbmUgdGhlc2UgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlaXIgZGVjbGFyYXRp
b25zIGluIHRoZSBwYXJzZXIuICovCi0KLXN0YXRpYyBjaGFyIGVzY2FwZV9jaGFyKGNoYXIgaW4p
IHsKLSAgc3dpdGNoIChpbikgewotICAgIGNhc2UgJ3InOiByZXR1cm4gJ1xyJzsKLSAgICBjYXNl
ICd0JzogcmV0dXJuICdcdCc7Ci0gICAgY2FzZSAnbic6IHJldHVybiAnXG4nOwotICAgIGNhc2Ug
J2YnOiByZXR1cm4gJ1xmJzsKLSAgICBjYXNlICdiJzogcmV0dXJuICdcYic7Ci0gICAgY2FzZSAn
Lyc6IHJldHVybiAnLyc7Ci0gICAgY2FzZSAnIic6IHJldHVybiAnIic7Ci0gICAgY2FzZSAnXFwn
OiByZXR1cm4gJ1xcJzsKLSAgICBkZWZhdWx0OgotICAgICAgYXNzZXJ0KDApOwotICAgICAgcmV0
dXJuICd4JzsKLSAgfQotfQotCi1zdGF0aWMgYm9vbCBlc2NhcGUodXBiX2pzb25fcGFyc2VyICpw
LCBjb25zdCBjaGFyICpwdHIpIHsKLSAgY2hhciBjaCA9IGVzY2FwZV9jaGFyKCpwdHIpOwotICBy
ZXR1cm4gbXVsdGlwYXJ0X3RleHQocCwgJmNoLCAxLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHN0YXJ0X2hleCh1cGJfanNvbl9wYXJzZXIgKnApIHsKLSAgcC0+ZGlnaXQgPSAwOwotfQotCi1z
dGF0aWMgdm9pZCBoZXhkaWdpdCh1cGJfanNvbl9wYXJzZXIgKnAsIGNvbnN0IGNoYXIgKnB0cikg
ewotICBjaGFyIGNoID0gKnB0cjsKLQotICBwLT5kaWdpdCA8PD0gNDsKLQotICBpZiAoY2ggPj0g
JzAnICYmIGNoIDw9ICc5JykgewotICAgIHAtPmRpZ2l0ICs9IChjaCAtICcwJyk7Ci0gIH0gZWxz
ZSBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykgewotICAgIHAtPmRpZ2l0ICs9ICgoY2ggLSAn
YScpICsgMTApOwotICB9IGVsc2UgewotICAgIGFzc2VydChjaCA+PSAnQScgJiYgY2ggPD0gJ0Yn
KTsKLSAgICBwLT5kaWdpdCArPSAoKGNoIC0gJ0EnKSArIDEwKTsKLSAgfQotfQotCi1zdGF0aWMg
Ym9vbCBlbmRfaGV4KHVwYl9qc29uX3BhcnNlciAqcCkgewotICB1aW50MzJfdCBjb2RlcG9pbnQg
PSBwLT5kaWdpdDsKLQotICAvKiBlbWl0IHRoZSBjb2RlcG9pbnQgYXMgVVRGLTguICovCi0gIGNo
YXIgdXRmOFszXTsgLyogc3VwcG9ydCBcdTAwMDAgLS0gXHVGRkZGIC0tIG5lZWQgb25seSB0aHJl
ZSBieXRlcy4gKi8KLSAgaW50IGxlbmd0aCA9IDA7Ci0gIGlmIChjb2RlcG9pbnQgPD0gMHg3Rikg
ewotICAgIHV0ZjhbMF0gPSBjb2RlcG9pbnQ7Ci0gICAgbGVuZ3RoID0gMTsKLSAgfSBlbHNlIGlm
IChjb2RlcG9pbnQgPD0gMHgwN0ZGKSB7Ci0gICAgdXRmOFsxXSA9IChjb2RlcG9pbnQgJiAweDNG
KSB8IDB4ODA7Ci0gICAgY29kZXBvaW50ID4+PSA2OwotICAgIHV0ZjhbMF0gPSAoY29kZXBvaW50
ICYgMHgxRikgfCAweEMwOwotICAgIGxlbmd0aCA9IDI7Ci0gIH0gZWxzZSAvKiBjb2RlcG9pbnQg
PD0gMHhGRkZGICovIHsKLSAgICB1dGY4WzJdID0gKGNvZGVwb2ludCAmIDB4M0YpIHwgMHg4MDsK
LSAgICBjb2RlcG9pbnQgPj49IDY7Ci0gICAgdXRmOFsxXSA9IChjb2RlcG9pbnQgJiAweDNGKSB8
IDB4ODA7Ci0gICAgY29kZXBvaW50ID4+PSA2OwotICAgIHV0ZjhbMF0gPSAoY29kZXBvaW50ICYg
MHgwRikgfCAweEUwOwotICAgIGxlbmd0aCA9IDM7Ci0gIH0KLSAgLyogVE9ETyhoYWJlcm1hbik6
IEhhbmRsZSBoaWdoIHN1cnJvZ2F0ZXM6IGlmIGNvZGVwb2ludCBpcyBhIGhpZ2ggc3Vycm9nYXRl
Ci0gICAqIHdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIG5leHQgZXNjYXBlIHRvIGdldCB0aGUgZnVs
bCBjb2RlIHBvaW50KS4gKi8KLQotICByZXR1cm4gbXVsdGlwYXJ0X3RleHQocCwgdXRmOCwgbGVu
Z3RoLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0X3RleHQodXBiX2pzb25fcGFyc2Vy
ICpwLCBjb25zdCBjaGFyICpwdHIpIHsKLSAgY2FwdHVyZV9iZWdpbihwLCBwdHIpOwotfQotCi1z
dGF0aWMgYm9vbCBlbmRfdGV4dCh1cGJfanNvbl9wYXJzZXIgKnAsIGNvbnN0IGNoYXIgKnB0cikg
ewotICByZXR1cm4gY2FwdHVyZV9lbmQocCwgcHRyKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRf
bnVtYmVyKHVwYl9qc29uX3BhcnNlciAqcCwgY29uc3QgY2hhciAqcHRyKSB7Ci0gIG11bHRpcGFy
dF9zdGFydGFjY3VtKHApOwotICBjYXB0dXJlX2JlZ2luKHAsIHB0cik7Ci19Ci0KLXN0YXRpYyBi
b29sIHBhcnNlX251bWJlcih1cGJfanNvbl9wYXJzZXIgKnApOwotCi1zdGF0aWMgYm9vbCBlbmRf
bnVtYmVyKHVwYl9qc29uX3BhcnNlciAqcCwgY29uc3QgY2hhciAqcHRyKSB7Ci0gIGlmICghY2Fw
dHVyZV9lbmQocCwgcHRyKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHJldHVybiBw
YXJzZV9udW1iZXIocCk7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNlX251bWJlcih1cGJfanNvbl9w
YXJzZXIgKnApIHsKLSAgc2l6ZV90IGxlbjsKLSAgY29uc3QgY2hhciAqYnVmOwotICBjb25zdCBj
aGFyICpteWVuZDsKLSAgY2hhciAqZW5kOwotCi0gIC8qIHN0cnRvbCgpIGFuZCBmcmllbmRzIHVu
Zm9ydHVuYXRlbHkgZG8gbm90IHN1cHBvcnQgc3BlY2lmeWluZyB0aGUgbGVuZ3RoIG9mCi0gICAq
IHRoZSBpbnB1dCBzdHJpbmcsIHNvIHdlIG5lZWQgdG8gZm9yY2UgYSBjb3B5IGludG8gYSBOVUxM
LXRlcm1pbmF0ZWQgYnVmZmVyLiAqLwotICBpZiAoIW11bHRpcGFydF90ZXh0KHAsICJcMCIsIDEs
IGZhbHNlKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJ1ZiA9IGFjY3VtdWxhdGVf
Z2V0cHRyKHAsICZsZW4pOwotICBteWVuZCA9IGJ1ZiArIGxlbiAtIDE7ICAvKiBPbmUgZm9yIE5V
TEwuICovCi0KLSAgLyogWFhYOiBXZSBhcmUgdXNpbmcgc3RydG9sIHRvIHBhcnNlIGludGVnZXJz
LCBidXQgdGhpcyBpcyB3cm9uZyBhcyBldmVuCi0gICAqIGludGVnZXJzIGNhbiBiZSByZXByZXNl
bnRlZCBhcyAxZTYgKGZvciBleGFtcGxlKSwgd2hpY2ggc3RydG9sIGNhbid0Ci0gICAqIGhhbmRs
ZSBjb3JyZWN0bHkuCi0gICAqCi0gICAqIFhYWDogQWxzbywgd2UgY2FuJ3QgaGFuZGxlIGxhcmdl
IGludGVnZXJzIHByb3Blcmx5IGJlY2F1c2Ugc3RydG9bdV1sbAotICAgKiBpc24ndCBpbiBDODku
Ci0gICAqCi0gICAqIFhYWDogQWxzbywgd2UgZG9uJ3QgcHJvcGVybHkgY2hlY2sgZmxvYXRzIGZv
ciBvdmVyZmxvdywgc2luY2Ugc3RydG9mCi0gICAqIGlzbid0IGluIEM4OS4gKi8KLSAgc3dpdGNo
ICh1cGJfZmllbGRkZWZfdHlwZShwLT50b3AtPmYpKSB7Ci0gICAgY2FzZSBVUEJfVFlQRV9FTlVN
OgotICAgIGNhc2UgVVBCX1RZUEVfSU5UMzI6IHsKLSAgICAgIGxvbmcgdmFsID0gc3RydG9sKHAt
PmFjY3VtdWxhdGVkLCAmZW5kLCAwKTsKLSAgICAgIGlmICh2YWwgPiBJTlQzMl9NQVggfHwgdmFs
IDwgSU5UMzJfTUlOIHx8IGVycm5vID09IEVSQU5HRSB8fCBlbmQgIT0gbXllbmQpCi0gICAgICAg
IGdvdG8gZXJyOwotICAgICAgZWxzZQotICAgICAgICB1cGJfc2lua19wdXRpbnQzMigmcC0+dG9w
LT5zaW5rLCBwYXJzZXJfZ2V0c2VsKHApLCB2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgVVBCX1RZUEVfSU5UNjQ6IHsKLSAgICAgIGxvbmcgbG9uZyB2YWwgPSBzdHJ0b2wocC0+
YWNjdW11bGF0ZWQsICZlbmQsIDApOwotICAgICAgaWYgKHZhbCA+IElOVDY0X01BWCB8fCB2YWwg
PCBJTlQ2NF9NSU4gfHwgZXJybm8gPT0gRVJBTkdFIHx8IGVuZCAhPSBteWVuZCkKLSAgICAgICAg
Z290byBlcnI7Ci0gICAgICBlbHNlCi0gICAgICAgIHVwYl9zaW5rX3B1dGludDY0KCZwLT50b3At
PnNpbmssIHBhcnNlcl9nZXRzZWwocCksIHZhbCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBVUEJfVFlQRV9VSU5UMzI6IHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgdmFsID0gc3RydG91
bChwLT5hY2N1bXVsYXRlZCwgJmVuZCwgMCk7Ci0gICAgICBpZiAodmFsID4gVUlOVDMyX01BWCB8
fCBlcnJubyA9PSBFUkFOR0UgfHwgZW5kICE9IG15ZW5kKQotICAgICAgICBnb3RvIGVycjsKLSAg
ICAgIGVsc2UKLSAgICAgICAgdXBiX3NpbmtfcHV0dWludDMyKCZwLT50b3AtPnNpbmssIHBhcnNl
cl9nZXRzZWwocCksIHZhbCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVUEJfVFlQ
RV9VSU5UNjQ6IHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwgPSBzdHJ0b3VsKHAtPmFj
Y3VtdWxhdGVkLCAmZW5kLCAwKTsKLSAgICAgIGlmICh2YWwgPiBVSU5UNjRfTUFYIHx8IGVycm5v
ID09IEVSQU5HRSB8fCBlbmQgIT0gbXllbmQpCi0gICAgICAgIGdvdG8gZXJyOwotICAgICAgZWxz
ZQotICAgICAgICB1cGJfc2lua19wdXR1aW50NjQoJnAtPnRvcC0+c2luaywgcGFyc2VyX2dldHNl
bChwKSwgdmFsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVQQl9UWVBFX0RPVUJM
RTogewotICAgICAgZG91YmxlIHZhbCA9IHN0cnRvZChwLT5hY2N1bXVsYXRlZCwgJmVuZCk7Ci0g
ICAgICBpZiAoZXJybm8gPT0gRVJBTkdFIHx8IGVuZCAhPSBteWVuZCkKLSAgICAgICAgZ290byBl
cnI7Ci0gICAgICBlbHNlCi0gICAgICAgIHVwYl9zaW5rX3B1dGRvdWJsZSgmcC0+dG9wLT5zaW5r
LCBwYXJzZXJfZ2V0c2VsKHApLCB2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
VVBCX1RZUEVfRkxPQVQ6IHsKLSAgICAgIGZsb2F0IHZhbCA9IHN0cnRvZChwLT5hY2N1bXVsYXRl
ZCwgJmVuZCk7Ci0gICAgICBpZiAoZXJybm8gPT0gRVJBTkdFIHx8IGVuZCAhPSBteWVuZCkKLSAg
ICAgICAgZ290byBlcnI7Ci0gICAgICBlbHNlCi0gICAgICAgIHVwYl9zaW5rX3B1dGZsb2F0KCZw
LT50b3AtPnNpbmssIHBhcnNlcl9nZXRzZWwocCksIHZhbCk7Ci0gICAgICBicmVhazsKLSAgICB9
Ci0gICAgZGVmYXVsdDoKLSAgICAgIGFzc2VydChmYWxzZSk7Ci0gIH0KLQotICBtdWx0aXBhcnRf
ZW5kKHApOwotCi0gIHJldHVybiB0cnVlOwotCi1lcnI6Ci0gIHVwYl9zdGF0dXNfc2V0ZXJyZigm
cC0+c3RhdHVzLCAiZXJyb3IgcGFyc2luZyBudW1iZXI6ICVzIiwgYnVmKTsKLSAgdXBiX2Vudl9y
ZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0dXMpOwotICBtdWx0aXBhcnRfZW5kKHApOwotICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNlcl9wdXRib29sKHVwYl9qc29uX3Bh
cnNlciAqcCwgYm9vbCB2YWwpIHsKLSAgYm9vbCBvazsKLQotICBpZiAodXBiX2ZpZWxkZGVmX3R5
cGUocC0+dG9wLT5mKSAhPSBVUEJfVFlQRV9CT09MKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRlcnJm
KCZwLT5zdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICJCb29sZWFuIHZhbHVlIHNwZWNp
ZmllZCBmb3Igbm9uLWJvb2wgZmllbGQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdXBi
X2ZpZWxkZGVmX25hbWUocC0+dG9wLT5mKSk7Ci0gICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5l
bnYsICZwLT5zdGF0dXMpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIG9rID0gdXBiX3Np
bmtfcHV0Ym9vbCgmcC0+dG9wLT5zaW5rLCBwYXJzZXJfZ2V0c2VsKHApLCB2YWwpOwotICBVUEJf
QVNTRVJUX1ZBUihvaywgb2spOwotCi0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBz
dGFydF9zdHJpbmd2YWwodXBiX2pzb25fcGFyc2VyICpwKSB7Ci0gIGFzc2VydChwLT50b3AtPmYp
OwotCi0gIGlmICh1cGJfZmllbGRkZWZfaXNzdHJpbmcocC0+dG9wLT5mKSkgewotICAgIHVwYl9q
c29ucGFyc2VyX2ZyYW1lICppbm5lcjsKLSAgICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0KLSAgICBp
ZiAoIWNoZWNrX3N0YWNrKHApKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAvKiBTdGFydCBhIG5ldyBw
YXJzZXIgZnJhbWU6IHBhcnNlciBmcmFtZXMgY29ycmVzcG9uZCBvbmUtdG8tb25lIHdpdGgKLSAg
ICAgKiBoYW5kbGVyIGZyYW1lcywgYW5kIHN0cmluZyBldmVudHMgb2NjdXIgaW4gYSBzdWItZnJh
bWUuICovCi0gICAgaW5uZXIgPSBwLT50b3AgKyAxOwotICAgIHNlbCA9IGdldHNlbF9mb3JfaGFu
ZGxlcnR5cGUocCwgVVBCX0hBTkRMRVJfU1RBUlRTVFIpOwotICAgIHVwYl9zaW5rX3N0YXJ0c3Ry
KCZwLT50b3AtPnNpbmssIHNlbCwgMCwgJmlubmVyLT5zaW5rKTsKLSAgICBpbm5lci0+bSA9IHAt
PnRvcC0+bTsKLSAgICBpbm5lci0+ZiA9IHAtPnRvcC0+ZjsKLSAgICBpbm5lci0+bmFtZV90YWJs
ZSA9IE5VTEw7Ci0gICAgaW5uZXItPmlzX21hcCA9IGZhbHNlOwotICAgIGlubmVyLT5pc19tYXBl
bnRyeSA9IGZhbHNlOwotICAgIHAtPnRvcCA9IGlubmVyOwotCi0gICAgaWYgKHVwYl9maWVsZGRl
Zl90eXBlKHAtPnRvcC0+ZikgPT0gVVBCX1RZUEVfU1RSSU5HKSB7Ci0gICAgICAvKiBGb3IgU1RS
SU5HIGZpZWxkcyB3ZSBwdXNoIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGhhbmRsZXJzIGFzIGl0IGlz
Ci0gICAgICAgKiBwYXJzZWQuICBXZSBkb24ndCBkbyB0aGlzIHlldCBmb3IgQllURVMgZmllbGRz
LCBiZWNhdXNlIG91ciBiYXNlNjQKLSAgICAgICAqIGRlY29kZXIgaXMgbm90IHN0cmVhbWluZy4K
LSAgICAgICAqCi0gICAgICAgKiBUT0RPKGhhYmVybWFuKTogbWFrZSBiYXNlNjQgZGVjb2Rpbmcg
c3RyZWFtaW5nIGFsc28uICovCi0gICAgICBtdWx0aXBhcnRfc3RhcnQocCwgZ2V0c2VsX2Zvcl9o
YW5kbGVydHlwZShwLCBVUEJfSEFORExFUl9TVFJJTkcpKTsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBtdWx0aXBhcnRfc3RhcnRhY2N1bShwKTsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgfSBlbHNlIGlmICh1cGJfZmllbGRkZWZfdHlwZShwLT50b3AtPmYp
ID09IFVQQl9UWVBFX0VOVU0pIHsKLSAgICAvKiBObyBuZWVkIHRvIHB1c2ggYSBmcmFtZSAtLSBz
eW1ib2xpYyBlbnVtIG5hbWVzIGluIHF1b3RlcyByZW1haW4gaW4gdGhlCi0gICAgICogY3VycmVu
dCBwYXJzZXIgZnJhbWUuCi0gICAgICoKLSAgICAgKiBFbnVtIHN0cmluZyB2YWx1ZXMgbXVzdCBh
Y2N1bXVsYXRlIHNvIHdlIGNhbiBsb29rIHVwIHRoZSB2YWx1ZSBpbiBhIHRhYmxlCi0gICAgICog
b25jZSBpdCBpcyBjb21wbGV0ZS4gKi8KLSAgICBtdWx0aXBhcnRfc3RhcnRhY2N1bShwKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycmYoJnAtPnN0
YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyBzcGVjaWZpZWQgZm9yIG5vbi1z
dHJpbmcvbm9uLWVudW0gZmllbGQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdXBiX2Zp
ZWxkZGVmX25hbWUocC0+dG9wLT5mKSk7Ci0gICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYs
ICZwLT5zdGF0dXMpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1zdGF0aWMgYm9vbCBl
bmRfc3RyaW5ndmFsKHVwYl9qc29uX3BhcnNlciAqcCkgewotICBib29sIG9rID0gdHJ1ZTsKLQot
ICBzd2l0Y2ggKHVwYl9maWVsZGRlZl90eXBlKHAtPnRvcC0+ZikpIHsKLSAgICBjYXNlIFVQQl9U
WVBFX0JZVEVTOgotICAgICAgaWYgKCFiYXNlNjRfcHVzaChwLCBnZXRzZWxfZm9yX2hhbmRsZXJ0
eXBlKHAsIFVQQl9IQU5ETEVSX1NUUklORyksCi0gICAgICAgICAgICAgICAgICAgICAgIHAtPmFj
Y3VtdWxhdGVkLCBwLT5hY2N1bXVsYXRlZF9sZW4pKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIH0KLSAgICAgIC8qIEZhbGwgdGhyb3VnaC4gKi8KLQotICAgIGNhc2UgVVBCX1RZUEVf
U1RSSU5HOiB7Ci0gICAgICB1cGJfc2VsZWN0b3JfdCBzZWwgPSBnZXRzZWxfZm9yX2hhbmRsZXJ0
eXBlKHAsIFVQQl9IQU5ETEVSX0VORFNUUik7Ci0gICAgICB1cGJfc2lua19lbmRzdHIoJnAtPnRv
cC0+c2luaywgc2VsKTsKLSAgICAgIHAtPnRvcC0tOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgY2FzZSBVUEJfVFlQRV9FTlVNOiB7Ci0gICAgICAvKiBSZXNvbHZlIGVudW0gc3ltYm9saWMg
bmFtZSB0byBpbnRlZ2VyIHZhbHVlLiAqLwotICAgICAgY29uc3QgdXBiX2VudW1kZWYgKmVudW1k
ZWYgPQotICAgICAgICAgIChjb25zdCB1cGJfZW51bWRlZiopdXBiX2ZpZWxkZGVmX3N1YmRlZihw
LT50b3AtPmYpOwotCi0gICAgICBzaXplX3QgbGVuOwotICAgICAgY29uc3QgY2hhciAqYnVmID0g
YWNjdW11bGF0ZV9nZXRwdHIocCwgJmxlbik7Ci0KLSAgICAgIGludDMyX3QgaW50X3ZhbCA9IDA7
Ci0gICAgICBvayA9IHVwYl9lbnVtZGVmX250b2koZW51bWRlZiwgYnVmLCBsZW4sICZpbnRfdmFs
KTsKLQotICAgICAgaWYgKG9rKSB7Ci0gICAgICAgIHVwYl9zZWxlY3Rvcl90IHNlbCA9IHBhcnNl
cl9nZXRzZWwocCk7Ci0gICAgICAgIHVwYl9zaW5rX3B1dGludDMyKCZwLT50b3AtPnNpbmssIHNl
bCwgaW50X3ZhbCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB1cGJfc3RhdHVzX3NldGVycmYo
JnAtPnN0YXR1cywgIkVudW0gdmFsdWUgdW5rbm93bjogJyUuKnMnIiwgbGVuLCBidWYpOwotICAg
ICAgICB1cGJfZW52X3JlcG9ydGVycm9yKHAtPmVudiwgJnAtPnN0YXR1cyk7Ci0gICAgICB9Ci0K
LSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICBhc3NlcnQoZmFsc2Up
OwotICAgICAgdXBiX3N0YXR1c19zZXRlcnJtc2coJnAtPnN0YXR1cywgIkludGVybmFsIGVycm9y
IGluIEpTT04gZGVjb2RlciIpOwotICAgICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZw
LT5zdGF0dXMpOwotICAgICAgb2sgPSBmYWxzZTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgbXVs
dGlwYXJ0X2VuZChwKTsKLQotICByZXR1cm4gb2s7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0X21l
bWJlcih1cGJfanNvbl9wYXJzZXIgKnApIHsKLSAgYXNzZXJ0KCFwLT50b3AtPmYpOwotICBtdWx0
aXBhcnRfc3RhcnRhY2N1bShwKTsKLX0KLQotLyogSGVscGVyOiBpbnZva2VkIGR1cmluZyBwYXJz
ZV9tYXBlbnRyeSgpIHRvIGVtaXQgdGhlIG1hcGVudHJ5IG1lc3NhZ2UncyBrZXkKLSAqIGZpZWxk
IGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBhY2N1bXVsYXRlIGJ1ZmZlci4g
Ki8KLXN0YXRpYyBib29sIHBhcnNlX21hcGVudHJ5X2tleSh1cGJfanNvbl9wYXJzZXIgKnApIHsK
LQotICBzaXplX3QgbGVuOwotICBjb25zdCBjaGFyICpidWYgPSBhY2N1bXVsYXRlX2dldHB0cihw
LCAmbGVuKTsKLQotICAvKiBFbWl0IHRoZSBrZXkgZmllbGQuIFdlIGRvIGEgYml0IG9mIGFkLWhv
YyBwYXJzaW5nIGhlcmUgYmVjYXVzZSB0aGUKLSAgICogcGFyc2VyIHN0YXRlIG1hY2hpbmUgaGFz
IGFscmVhZHkgZGVjaWRlZCB0aGF0IHRoaXMgaXMgYSBzdHJpbmcgZmllbGQKLSAgICogbmFtZSwg
YW5kIHdlIGFyZSByZWludGVycHJldGluZyBpdCBhcyBzb21lIGFyYml0cmFyeSBrZXkgdHlwZS4g
SW4KLSAgICogcGFydGljdWxhciwgaW50ZWdlciBhbmQgYm9vbCBrZXlzIGFyZSBxdW90ZWQsIHNv
IHdlIG5lZWQgdG8gcGFyc2UgdGhlCi0gICAqIHF1b3RlZCBzdHJpbmcgY29udGVudHMgaGVyZS4g
Ki8KLQotICBwLT50b3AtPmYgPSB1cGJfbXNnZGVmX2l0b2YocC0+dG9wLT5tLCBVUEJfTUFQRU5U
UllfS0VZKTsKLSAgaWYgKHAtPnRvcC0+ZiA9PSBOVUxMKSB7Ci0gICAgdXBiX3N0YXR1c19zZXRl
cnJtc2coJnAtPnN0YXR1cywgIm1hcGVudHJ5IG1lc3NhZ2UgaGFzIG5vIGtleSIpOwotICAgIHVw
Yl9lbnZfcmVwb3J0ZXJyb3IocC0+ZW52LCAmcC0+c3RhdHVzKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLSAgc3dpdGNoICh1cGJfZmllbGRkZWZfdHlwZShwLT50b3AtPmYpKSB7Ci0gICAgY2Fz
ZSBVUEJfVFlQRV9JTlQzMjoKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDY0OgotICAgIGNhc2UgVVBC
X1RZUEVfVUlOVDMyOgotICAgIGNhc2UgVVBCX1RZUEVfVUlOVDY0OgotICAgICAgLyogSW52b2tl
IGVuZF9udW1iZXIuIFRoZSBhY2N1bSBidWZmZXIgaGFzIHRoZSBudW1iZXIncyB0ZXh0IGFscmVh
ZHkuICovCi0gICAgICBpZiAoIXBhcnNlX251bWJlcihwKSkgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX0JPT0w6Ci0gICAg
ICBpZiAobGVuID09IDQgJiYgIXN0cm5jbXAoYnVmLCAidHJ1ZSIsIDQpKSB7Ci0gICAgICAgIGlm
ICghcGFyc2VyX3B1dGJvb2wocCwgdHJ1ZSkpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAobGVuID09IDUgJiYgIXN0cm5jbXAoYnVmLCAiZmFs
c2UiLCA1KSkgewotICAgICAgICBpZiAoIXBhcnNlcl9wdXRib29sKHAsIGZhbHNlKSkgewotICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
dXBiX3N0YXR1c19zZXRlcnJtc2coJnAtPnN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIk1hcCBib29sIGtleSBub3QgJ3RydWUnIG9yICdmYWxzZSciKTsKLSAgICAgICAgdXBi
X2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0dXMpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICB9Ci0gICAgICBtdWx0aXBhcnRfZW5kKHApOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBVUEJfVFlQRV9TVFJJTkc6Ci0gICAgY2FzZSBVUEJfVFlQRV9CWVRFUzogewotICAgICAg
dXBiX3Npbmsgc3Vic2luazsKLSAgICAgIHVwYl9zZWxlY3Rvcl90IHNlbCA9IGdldHNlbF9mb3Jf
aGFuZGxlcnR5cGUocCwgVVBCX0hBTkRMRVJfU1RBUlRTVFIpOwotICAgICAgdXBiX3Npbmtfc3Rh
cnRzdHIoJnAtPnRvcC0+c2luaywgc2VsLCBsZW4sICZzdWJzaW5rKTsKLSAgICAgIHNlbCA9IGdl
dHNlbF9mb3JfaGFuZGxlcnR5cGUocCwgVVBCX0hBTkRMRVJfU1RSSU5HKTsKLSAgICAgIHVwYl9z
aW5rX3B1dHN0cmluZygmc3Vic2luaywgc2VsLCBidWYsIGxlbiwgTlVMTCk7Ci0gICAgICBzZWwg
PSBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQQl9IQU5ETEVSX0VORFNUUik7Ci0gICAgICB1
cGJfc2lua19lbmRzdHIoJnN1YnNpbmssIHNlbCk7Ci0gICAgICBtdWx0aXBhcnRfZW5kKHApOwot
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICB1cGJfc3RhdHVzX3NldGVy
cm1zZygmcC0+c3RhdHVzLCAiSW52YWxpZCBmaWVsZCB0eXBlIGZvciBtYXAga2V5Iik7Ci0gICAg
ICB1cGJfZW52X3JlcG9ydGVycm9yKHAtPmVudiwgJnAtPnN0YXR1cyk7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLyogSGVscGVyOiBlbWl0IG9uZSBt
YXAgZW50cnkgKGFzIGEgc3VibWVzc2FnZSBpbiB0aGUgbWFwIGZpZWxkIHNlcXVlbmNlKS4gVGhp
cwotICogaXMgaW52b2tlZCBmcm9tIGVuZF9tZW1iZXJuYW1lKCksIGF0IHRoZSBlbmQgb2YgdGhl
IG1hcCBlbnRyeSdzIGtleSBzdHJpbmcsCi0gKiB3aXRoIHRoZSBtYXAga2V5IGluIHRoZSBhY2N1
bXVsYXRlIGJ1ZmZlci4gSXQgcGFyc2VzIHRoZSBrZXkgZnJvbSB0aGF0Ci0gKiBidWZmZXIsIGVt
aXRzIHRoZSBoYW5kbGVyIGNhbGxzIHRvIHN0YXJ0IHRoZSBtYXBlbnRyeSBzdWJtZXNzYWdlIChz
ZXR0aW5nIHVwCi0gKiBpdHMgc3ViZnJhbWUgaW4gdGhlIHByb2Nlc3MpLCBhbmQgc2V0cyB1cCBz
dGF0ZSBpbiB0aGUgc3ViZnJhbWUgc28gdGhhdCB0aGUKLSAqIHZhbHVlIHBhcnNlciAoaW52b2tl
ZCBuZXh0KSB3aWxsIGVtaXQgdGhlIG1hcGVudHJ5J3MgdmFsdWUgZmllbGQgYW5kIHRoZW4KLSAq
IGVuZCB0aGUgbWFwZW50cnkgbWVzc2FnZS4gKi8KLQotc3RhdGljIGJvb2wgaGFuZGxlX21hcGVu
dHJ5KHVwYl9qc29uX3BhcnNlciAqcCkgewotICBjb25zdCB1cGJfZmllbGRkZWYgKm1hcGZpZWxk
OwotICBjb25zdCB1cGJfbXNnZGVmICptYXBlbnRyeW1zZzsKLSAgdXBiX2pzb25wYXJzZXJfZnJh
bWUgKmlubmVyOwotICB1cGJfc2VsZWN0b3JfdCBzZWw7Ci0KLSAgLyogTWFwIGVudHJ5OiBwLT50
b3AtPnNpbmsgaXMgdGhlIHNlcSBmcmFtZSwgc28gd2UgbmVlZCB0byBzdGFydCBhIGZyYW1lCi0g
ICAqIGZvciB0aGUgbWFwZW50cnkgaXRzZWxmLCBhbmQgdGhlbiBzZXQgfGZ8IGluIHRoYXQgZnJh
bWUgc28gdGhhdCB0aGUgbWFwCi0gICAqIHZhbHVlIGZpZWxkIGlzIHBhcnNlZCwgYW5kIGFsc28g
c2V0IGEgZmxhZyB0byBlbmQgdGhlIGZyYW1lIGFmdGVyIHRoZQotICAgKiBtYXAtZW50cnkgdmFs
dWUgaXMgcGFyc2VkLiAqLwotICBpZiAoIWNoZWNrX3N0YWNrKHApKSByZXR1cm4gZmFsc2U7Ci0K
LSAgbWFwZmllbGQgPSBwLT50b3AtPm1hcGZpZWxkOwotICBtYXBlbnRyeW1zZyA9IHVwYl9maWVs
ZGRlZl9tc2dzdWJkZWYobWFwZmllbGQpOwotCi0gIGlubmVyID0gcC0+dG9wICsgMTsKLSAgcC0+
dG9wLT5mID0gbWFwZmllbGQ7Ci0gIHNlbCA9IGdldHNlbF9mb3JfaGFuZGxlcnR5cGUocCwgVVBC
X0hBTkRMRVJfU1RBUlRTVUJNU0cpOwotICB1cGJfc2lua19zdGFydHN1Ym1zZygmcC0+dG9wLT5z
aW5rLCBzZWwsICZpbm5lci0+c2luayk7Ci0gIGlubmVyLT5tID0gbWFwZW50cnltc2c7Ci0gIGlu
bmVyLT5uYW1lX3RhYmxlID0gTlVMTDsKLSAgaW5uZXItPm1hcGZpZWxkID0gbWFwZmllbGQ7Ci0g
IGlubmVyLT5pc19tYXAgPSBmYWxzZTsKLQotICAvKiBEb24ndCBzZXQgdGhpcyB0byB0cnVlICp5
ZXQqIC0tIHdlIHJldXNlIHBhcnNpbmcgaGFuZGxlcnMgYmVsb3cgdG8gcHVzaAotICAgKiB0aGUg
a2V5IGZpZWxkIHZhbHVlIHRvIHRoZSBzaW5rLCBhbmQgdGhlc2UgaGFuZGxlcnMgd2lsbCBwb3Ag
dGhlIGZyYW1lCi0gICAqIGlmIHRoZXkgc2VlIGlzX21hcGVudHJ5ICh3aGVuIGludm9rZWQgYnkg
dGhlIHBhcnNlciBzdGF0ZSBtYWNoaW5lLCB0aGV5Ci0gICAqIHdvdWxkIGhhdmUganVzdCBzZWVu
IHRoZSBtYXAtZW50cnkgdmFsdWUsIG5vdCBrZXkpLiAqLwotICBpbm5lci0+aXNfbWFwZW50cnkg
PSBmYWxzZTsKLSAgcC0+dG9wID0gaW5uZXI7Ci0KLSAgLyogc2VuZCBTVEFSVE1TRyBpbiBzdWJt
c2cgZnJhbWUuICovCi0gIHVwYl9zaW5rX3N0YXJ0bXNnKCZwLT50b3AtPnNpbmspOwotCi0gIHBh
cnNlX21hcGVudHJ5X2tleShwKTsKLQotICAvKiBTZXQgdXAgdGhlIHZhbHVlIGZpZWxkIHRvIHJl
Y2VpdmUgdGhlIG1hcC1lbnRyeSB2YWx1ZS4gKi8KLSAgcC0+dG9wLT5mID0gdXBiX21zZ2RlZl9p
dG9mKHAtPnRvcC0+bSwgVVBCX01BUEVOVFJZX1ZBTFVFKTsKLSAgcC0+dG9wLT5pc19tYXBlbnRy
eSA9IHRydWU7ICAvKiBzZXQgdXAgdG8gcG9wIGZyYW1lIGFmdGVyIHZhbHVlIGlzIHBhcnNlZC4g
Ki8KLSAgcC0+dG9wLT5tYXBmaWVsZCA9IG1hcGZpZWxkOwotICBpZiAocC0+dG9wLT5mID09IE5V
TEwpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycm1zZygmcC0+c3RhdHVzLCAibWFwZW50cnkgbWVz
c2FnZSBoYXMgbm8gdmFsdWUiKTsKLSAgICB1cGJfZW52X3JlcG9ydGVycm9yKHAtPmVudiwgJnAt
PnN0YXR1cyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBib29sIGVuZF9tZW1iZXJuYW1lKHVwYl9qc29uX3BhcnNlciAqcCkgewotICBhc3Nl
cnQoIXAtPnRvcC0+Zik7Ci0KLSAgaWYgKHAtPnRvcC0+aXNfbWFwKSB7Ci0gICAgcmV0dXJuIGhh
bmRsZV9tYXBlbnRyeShwKTsKLSAgfSBlbHNlIHsKLSAgICBzaXplX3QgbGVuOwotICAgIGNvbnN0
IGNoYXIgKmJ1ZiA9IGFjY3VtdWxhdGVfZ2V0cHRyKHAsICZsZW4pOwotICAgIHVwYl92YWx1ZSB2
OwotCi0gICAgaWYgKHVwYl9zdHJ0YWJsZV9sb29rdXAyKHAtPnRvcC0+bmFtZV90YWJsZSwgYnVm
LCBsZW4sICZ2KSkgewotICAgICAgcC0+dG9wLT5mID0gdXBiX3ZhbHVlX2dldGNvbnN0cHRyKHYp
OwotICAgICAgbXVsdGlwYXJ0X2VuZChwKTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIC8qIFRPRE8oaGFiZXJtYW4pOiBJZ25vcmUgdW5rbm93biBmaWVsZHMgaWYg
cmVxdWVzdGVkL2NvbmZpZ3VyZWQgdG8gZG8KLSAgICAgICAqIHNvLiAqLwotICAgICAgdXBiX3N0
YXR1c19zZXRlcnJmKCZwLT5zdGF0dXMsICJObyBzdWNoIGZpZWxkOiAlLipzXG4iLCAoaW50KWxl
biwgYnVmKTsKLSAgICAgIHVwYl9lbnZfcmVwb3J0ZXJyb3IocC0+ZW52LCAmcC0+c3RhdHVzKTsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgZW5kX21l
bWJlcih1cGJfanNvbl9wYXJzZXIgKnApIHsKLSAgLyogSWYgd2UganVzdCBwYXJzZWQgYSBtYXAt
ZW50cnkgdmFsdWUsIGVuZCB0aGF0IGZyYW1lIHRvby4gKi8KLSAgaWYgKHAtPnRvcC0+aXNfbWFw
ZW50cnkpIHsKLSAgICB1cGJfc3RhdHVzIHMgPSBVUEJfU1RBVFVTX0lOSVQ7Ci0gICAgdXBiX3Nl
bGVjdG9yX3Qgc2VsOwotICAgIGJvb2wgb2s7Ci0gICAgY29uc3QgdXBiX2ZpZWxkZGVmICptYXBm
aWVsZDsKLQotICAgIGFzc2VydChwLT50b3AgPiBwLT5zdGFjayk7Ci0gICAgLyogc2VuZCBFTkRN
U0cgb24gc3VibXNnLiAqLwotICAgIHVwYl9zaW5rX2VuZG1zZygmcC0+dG9wLT5zaW5rLCAmcyk7
Ci0gICAgbWFwZmllbGQgPSBwLT50b3AtPm1hcGZpZWxkOwotCi0gICAgLyogc2VuZCBFTkRTVUJN
U0cgaW4gcmVwZWF0ZWQtZmllbGQtb2YtbWFwZW50cmllcyBmcmFtZS4gKi8KLSAgICBwLT50b3At
LTsKLSAgICBvayA9IHVwYl9oYW5kbGVyc19nZXRzZWxlY3RvcihtYXBmaWVsZCwgVVBCX0hBTkRM
RVJfRU5EU1VCTVNHLCAmc2VsKTsKLSAgICBVUEJfQVNTRVJUX1ZBUihvaywgb2spOwotICAgIHVw
Yl9zaW5rX2VuZHN1Ym1zZygmcC0+dG9wLT5zaW5rLCBzZWwpOwotICB9Ci0KLSAgcC0+dG9wLT5m
ID0gTlVMTDsKLX0KLQotc3RhdGljIGJvb2wgc3RhcnRfc3Vib2JqZWN0KHVwYl9qc29uX3BhcnNl
ciAqcCkgewotICBhc3NlcnQocC0+dG9wLT5mKTsKLQotICBpZiAodXBiX2ZpZWxkZGVmX2lzbWFw
KHAtPnRvcC0+ZikpIHsKLSAgICB1cGJfanNvbnBhcnNlcl9mcmFtZSAqaW5uZXI7Ci0gICAgdXBi
X3NlbGVjdG9yX3Qgc2VsOwotCi0gICAgLyogQmVnaW5uaW5nIG9mIGEgbWFwLiBTdGFydCBhIG5l
dyBwYXJzZXIgZnJhbWUgaW4gYSByZXBlYXRlZC1maWVsZAotICAgICAqIGNvbnRleHQuICovCi0g
ICAgaWYgKCFjaGVja19zdGFjayhwKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgaW5uZXIgPSBwLT50
b3AgKyAxOwotICAgIHNlbCA9IGdldHNlbF9mb3JfaGFuZGxlcnR5cGUocCwgVVBCX0hBTkRMRVJf
U1RBUlRTRVEpOwotICAgIHVwYl9zaW5rX3N0YXJ0c2VxKCZwLT50b3AtPnNpbmssIHNlbCwgJmlu
bmVyLT5zaW5rKTsKLSAgICBpbm5lci0+bSA9IHVwYl9maWVsZGRlZl9tc2dzdWJkZWYocC0+dG9w
LT5mKTsKLSAgICBpbm5lci0+bmFtZV90YWJsZSA9IE5VTEw7Ci0gICAgaW5uZXItPm1hcGZpZWxk
ID0gcC0+dG9wLT5mOwotICAgIGlubmVyLT5mID0gTlVMTDsKLSAgICBpbm5lci0+aXNfbWFwID0g
dHJ1ZTsKLSAgICBpbm5lci0+aXNfbWFwZW50cnkgPSBmYWxzZTsKLSAgICBwLT50b3AgPSBpbm5l
cjsKLQotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgaWYgKHVwYl9maWVsZGRlZl9pc3N1Ym1z
ZyhwLT50b3AtPmYpKSB7Ci0gICAgdXBiX2pzb25wYXJzZXJfZnJhbWUgKmlubmVyOwotICAgIHVw
Yl9zZWxlY3Rvcl90IHNlbDsKLQotICAgIC8qIEJlZ2lubmluZyBvZiBhIHN1Ym9iamVjdC4gU3Rh
cnQgYSBuZXcgcGFyc2VyIGZyYW1lIGluIHRoZSBzdWJtc2cKLSAgICAgKiBjb250ZXh0LiAqLwot
ICAgIGlmICghY2hlY2tfc3RhY2socCkpIHJldHVybiBmYWxzZTsKLQotICAgIGlubmVyID0gcC0+
dG9wICsgMTsKLQotICAgIHNlbCA9IGdldHNlbF9mb3JfaGFuZGxlcnR5cGUocCwgVVBCX0hBTkRM
RVJfU1RBUlRTVUJNU0cpOwotICAgIHVwYl9zaW5rX3N0YXJ0c3VibXNnKCZwLT50b3AtPnNpbmss
IHNlbCwgJmlubmVyLT5zaW5rKTsKLSAgICBpbm5lci0+bSA9IHVwYl9maWVsZGRlZl9tc2dzdWJk
ZWYocC0+dG9wLT5mKTsKLSAgICBzZXRfbmFtZV90YWJsZShwLCBpbm5lcik7Ci0gICAgaW5uZXIt
PmYgPSBOVUxMOwotICAgIGlubmVyLT5pc19tYXAgPSBmYWxzZTsKLSAgICBpbm5lci0+aXNfbWFw
ZW50cnkgPSBmYWxzZTsKLSAgICBwLT50b3AgPSBpbm5lcjsKLQotICAgIHJldHVybiB0cnVlOwot
ICB9IGVsc2UgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZigmcC0+c3RhdHVzLAotICAgICAgICAg
ICAgICAgICAgICAgICAiT2JqZWN0IHNwZWNpZmllZCBmb3Igbm9uLW1lc3NhZ2UvZ3JvdXAgZmll
bGQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdXBiX2ZpZWxkZGVmX25hbWUocC0+dG9w
LT5mKSk7Ci0gICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZwLT5zdGF0dXMpOwotICAg
IHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBlbmRfc3Vib2JqZWN0KHVwYl9q
c29uX3BhcnNlciAqcCkgewotICBpZiAocC0+dG9wLT5pc19tYXApIHsKLSAgICB1cGJfc2VsZWN0
b3JfdCBzZWw7Ci0gICAgcC0+dG9wLS07Ci0gICAgc2VsID0gZ2V0c2VsX2Zvcl9oYW5kbGVydHlw
ZShwLCBVUEJfSEFORExFUl9FTkRTRVEpOwotICAgIHVwYl9zaW5rX2VuZHNlcSgmcC0+dG9wLT5z
aW5rLCBzZWwpOwotICB9IGVsc2UgewotICAgIHVwYl9zZWxlY3Rvcl90IHNlbDsKLSAgICBwLT50
b3AtLTsKLSAgICBzZWwgPSBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQQl9IQU5ETEVSX0VO
RFNVQk1TRyk7Ci0gICAgdXBiX3NpbmtfZW5kc3VibXNnKCZwLT50b3AtPnNpbmssIHNlbCk7Ci0g
IH0KLX0KLQotc3RhdGljIGJvb2wgc3RhcnRfYXJyYXkodXBiX2pzb25fcGFyc2VyICpwKSB7Ci0g
IHVwYl9qc29ucGFyc2VyX2ZyYW1lICppbm5lcjsKLSAgdXBiX3NlbGVjdG9yX3Qgc2VsOwotCi0g
IGFzc2VydChwLT50b3AtPmYpOwotCi0gIGlmICghdXBiX2ZpZWxkZGVmX2lzc2VxKHAtPnRvcC0+
ZikpIHsKLSAgICB1cGJfc3RhdHVzX3NldGVycmYoJnAtPnN0YXR1cywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIkFycmF5IHNwZWNpZmllZCBmb3Igbm9uLXJlcGVhdGVkIGZpZWxkOiAlcyIsCi0g
ICAgICAgICAgICAgICAgICAgICAgIHVwYl9maWVsZGRlZl9uYW1lKHAtPnRvcC0+ZikpOwotICAg
IHVwYl9lbnZfcmVwb3J0ZXJyb3IocC0+ZW52LCAmcC0+c3RhdHVzKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLQotICBpZiAoIWNoZWNrX3N0YWNrKHApKSByZXR1cm4gZmFsc2U7Ci0KLSAgaW5u
ZXIgPSBwLT50b3AgKyAxOwotICBzZWwgPSBnZXRzZWxfZm9yX2hhbmRsZXJ0eXBlKHAsIFVQQl9I
QU5ETEVSX1NUQVJUU0VRKTsKLSAgdXBiX3Npbmtfc3RhcnRzZXEoJnAtPnRvcC0+c2luaywgc2Vs
LCAmaW5uZXItPnNpbmspOwotICBpbm5lci0+bSA9IHAtPnRvcC0+bTsKLSAgaW5uZXItPm5hbWVf
dGFibGUgPSBOVUxMOwotICBpbm5lci0+ZiA9IHAtPnRvcC0+ZjsKLSAgaW5uZXItPmlzX21hcCA9
IGZhbHNlOwotICBpbm5lci0+aXNfbWFwZW50cnkgPSBmYWxzZTsKLSAgcC0+dG9wID0gaW5uZXI7
Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZF9hcnJheSh1cGJfanNvbl9w
YXJzZXIgKnApIHsKLSAgdXBiX3NlbGVjdG9yX3Qgc2VsOwotCi0gIGFzc2VydChwLT50b3AgPiBw
LT5zdGFjayk7Ci0KLSAgcC0+dG9wLS07Ci0gIHNlbCA9IGdldHNlbF9mb3JfaGFuZGxlcnR5cGUo
cCwgVVBCX0hBTkRMRVJfRU5EU0VRKTsKLSAgdXBiX3NpbmtfZW5kc2VxKCZwLT50b3AtPnNpbmss
IHNlbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0X29iamVjdCh1cGJfanNvbl9wYXJzZXIgKnAp
IHsKLSAgaWYgKCFwLT50b3AtPmlzX21hcCkgewotICAgIHVwYl9zaW5rX3N0YXJ0bXNnKCZwLT50
b3AtPnNpbmspOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZF9vYmplY3QodXBiX2pzb25fcGFy
c2VyICpwKSB7Ci0gIGlmICghcC0+dG9wLT5pc19tYXApIHsKLSAgICB1cGJfc3RhdHVzIHN0YXR1
czsKLSAgICB1cGJfc3RhdHVzX2NsZWFyKCZzdGF0dXMpOwotICAgIHVwYl9zaW5rX2VuZG1zZygm
cC0+dG9wLT5zaW5rLCAmc3RhdHVzKTsKLSAgICBpZiAoIXVwYl9vaygmc3RhdHVzKSkgewotICAg
ICAgdXBiX2Vudl9yZXBvcnRlcnJvcihwLT5lbnYsICZzdGF0dXMpOwotICAgIH0KLSAgfQotfQot
Ci0KLSNkZWZpbmUgQ0hFQ0tfUkVUVVJOX1RPUCh4KSBpZiAoISh4KSkgZ290byBlcnJvcgotCi0K
LS8qIFRoZSBhY3R1YWwgcGFyc2VyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFdoYXQgZm9sbG93cyBpcyB0aGUgUmFnZWwg
cGFyc2VyIGl0c2VsZi4gIFRoZSBsYW5ndWFnZSBpcyBzcGVjaWZpZWQgaW4gUmFnZWwKLSAqIGFu
ZCB0aGUgYWN0aW9ucyBjYWxsIG91ciBDIGZ1bmN0aW9ucyBhYm92ZS4KLSAqCi0gKiBSYWdlbCBo
YXMgYW4gZXh0ZW5zaXZlIHNldCBvZiBmdW5jdGlvbmFsaXR5LCBhbmQgd2UgdXNlIG9ubHkgYSBz
bWFsbCBwYXJ0IG9mCi0gKiBpdC4gIFRoZXJlIGFyZSBtYW55IGFjdGlvbiB0eXBlcyBidXQgd2Ug
b25seSB1c2UgYSBmZXc6Ci0gKgotICogICAiPiIgLS0gdHJhbnNpdGlvbiBpbnRvIGEgbWFjaGlu
ZQotICogICAiJSIgLS0gdHJhbnNpdGlvbiBvdXQgb2YgYSBtYWNoaW5lCi0gKiAgICJAIiAtLSB0
cmFuc2l0aW9uIGludG8gYSBmaW5hbCBzdGF0ZSBvZiBhIG1hY2hpbmUuCi0gKgotICogIkAiIHRy
YW5zaXRpb25zIGFyZSB0cmlja3kgYmVjYXVzZSBhIG1hY2hpbmUgY2FuIHRyYW5zaXRpb24gaW50
byBhIGZpbmFsCi0gKiBzdGF0ZSByZXBlYXRlZGx5LiAgQnV0IGluIHNvbWUgY2FzZXMgd2Uga25v
dyB0aGlzIGNhbid0IGhhcHBlbiwgZm9yIGV4YW1wbGUKLSAqIGEgc3RyaW5nIHdoaWNoIGlzIGRl
bGltaXRlZCBieSBhIGZpbmFsICciJyBjYW4gb25seSB0cmFuc2l0aW9uIGludG8gaXRzCi0gKiBm
aW5hbCBzdGF0ZSBvbmNlLCB3aGVuIHRoZSBjbG9zaW5nICciJyBpcyBzZWVuLiAqLwotCi0KLSNs
aW5lIDEyNDUgInVwYi9qc29uL3BhcnNlci5ybCIKLQotCi0KLSNsaW5lIDExNTcgInVwYi9qc29u
L3BhcnNlci5jIgotc3RhdGljIGNvbnN0IGNoYXIgX2pzb25fYWN0aW9uc1tdID0gewotCTAsIDEs
IDAsIDEsIDIsIDEsIDMsIDEsIAotCTUsIDEsIDYsIDEsIDcsIDEsIDgsIDEsIAotCTEwLCAxLCAx
MiwgMSwgMTMsIDEsIDE0LCAxLCAKLQkxNSwgMSwgMTYsIDEsIDE3LCAxLCAyMSwgMSwgCi0JMjUs
IDEsIDI3LCAyLCAzLCA4LCAyLCA0LCAKLQk1LCAyLCA2LCAyLCAyLCA2LCA4LCAyLCAKLQkxMSwg
OSwgMiwgMTMsIDE1LCAyLCAxNCwgMTUsIAotCTIsIDE4LCAxLCAyLCAxOSwgMjcsIDIsIDIwLCAK
LQk5LCAyLCAyMiwgMjcsIDIsIDIzLCAyNywgMiwgCi0JMjQsIDI3LCAyLCAyNiwgMjcsIDMsIDE0
LCAxMSwgCi0JOQotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX2pzb25fa2V5X29m
ZnNldHNbXSA9IHsKLQkwLCAwLCA0LCA5LCAxNCwgMTUsIDE5LCAyNCwgCi0JMjksIDM0LCAzOCwg
NDIsIDQ1LCA0OCwgNTAsIDU0LCAKLQk1OCwgNjAsIDYyLCA2NywgNjksIDcxLCA4MCwgODYsIAot
CTkyLCA5OCwgMTA0LCAxMDYsIDExNSwgMTE2LCAxMTYsIDExNiwgCi0JMTIxLCAxMjYsIDEzMSwg
MTMyLCAxMzMsIDEzNCwgMTM1LCAxMzUsIAotCTEzNiwgMTM3LCAxMzgsIDEzOCwgMTM5LCAxNDAs
IDE0MSwgMTQxLCAKLQkxNDYsIDE1MSwgMTUyLCAxNTYsIDE2MSwgMTY2LCAxNzEsIDE3NSwgCi0J
MTc1LCAxNzgsIDE3OCwgMTc4Ci19OwotCi1zdGF0aWMgY29uc3QgY2hhciBfanNvbl90cmFuc19r
ZXlzW10gPSB7Ci0JMzIsIDEyMywgOSwgMTMsIDMyLCAzNCwgMTI1LCA5LCAKLQkxMywgMzIsIDM0
LCAxMjUsIDksIDEzLCAzNCwgMzIsIAotCTU4LCA5LCAxMywgMzIsIDkzLCAxMjUsIDksIDEzLCAK
LQkzMiwgNDQsIDEyNSwgOSwgMTMsIDMyLCA0NCwgMTI1LCAKLQk5LCAxMywgMzIsIDM0LCA5LCAx
MywgNDUsIDQ4LCAKLQk0OSwgNTcsIDQ4LCA0OSwgNTcsIDQ2LCA2OSwgMTAxLCAKLQk0OCwgNTcs
IDY5LCAxMDEsIDQ4LCA1NywgNDMsIDQ1LCAKLQk0OCwgNTcsIDQ4LCA1NywgNDgsIDU3LCA0Niwg
NjksIAotCTEwMSwgNDgsIDU3LCAzNCwgOTIsIDM0LCA5MiwgMzQsIAotCTQ3LCA5MiwgOTgsIDEw
MiwgMTEwLCAxMTQsIDExNiwgMTE3LCAKLQk0OCwgNTcsIDY1LCA3MCwgOTcsIDEwMiwgNDgsIDU3
LCAKLQk2NSwgNzAsIDk3LCAxMDIsIDQ4LCA1NywgNjUsIDcwLCAKLQk5NywgMTAyLCA0OCwgNTcs
IDY1LCA3MCwgOTcsIDEwMiwgCi0JMzQsIDkyLCAzNCwgNDUsIDkxLCAxMDIsIDExMCwgMTE2LCAK
LQkxMjMsIDQ4LCA1NywgMzQsIDMyLCA5MywgMTI1LCA5LCAKLQkxMywgMzIsIDQ0LCA5MywgOSwg
MTMsIDMyLCA5MywgCi0JMTI1LCA5LCAxMywgOTcsIDEwOCwgMTE1LCAxMDEsIDExNywgCi0JMTA4
LCAxMDgsIDExNCwgMTE3LCAxMDEsIDMyLCAzNCwgMTI1LCAKLQk5LCAxMywgMzIsIDM0LCAxMjUs
IDksIDEzLCAzNCwgCi0JMzIsIDU4LCA5LCAxMywgMzIsIDkzLCAxMjUsIDksIAotCTEzLCAzMiwg
NDQsIDEyNSwgOSwgMTMsIDMyLCA0NCwgCi0JMTI1LCA5LCAxMywgMzIsIDM0LCA5LCAxMywgMzIs
IAotCTksIDEzLCAwCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciBfanNvbl9zaW5nbGVfbGVuZ3Ro
c1tdID0gewotCTAsIDIsIDMsIDMsIDEsIDIsIDMsIDMsIAotCTMsIDIsIDIsIDEsIDMsIDAsIDIs
IDIsIAotCTAsIDAsIDMsIDIsIDIsIDksIDAsIDAsIAotCTAsIDAsIDIsIDcsIDEsIDAsIDAsIDMs
IAotCTMsIDMsIDEsIDEsIDEsIDEsIDAsIDEsIAotCTEsIDEsIDAsIDEsIDEsIDEsIDAsIDMsIAot
CTMsIDEsIDIsIDMsIDMsIDMsIDIsIDAsIAotCTEsIDAsIDAsIDAKLX07Ci0KLXN0YXRpYyBjb25z
dCBjaGFyIF9qc29uX3JhbmdlX2xlbmd0aHNbXSA9IHsKLQkwLCAxLCAxLCAxLCAwLCAxLCAxLCAx
LCAKLQkxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAKLQkxLCAxLCAxLCAwLCAwLCAwLCAzLCAzLCAK
LQkzLCAzLCAwLCAxLCAwLCAwLCAwLCAxLCAKLQkxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLQkw
LCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAKLQkxLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAKLQkxLCAw
LCAwLCAwCi19OwotCi1zdGF0aWMgY29uc3Qgc2hvcnQgX2pzb25faW5kZXhfb2Zmc2V0c1tdID0g
ewotCTAsIDAsIDQsIDksIDE0LCAxNiwgMjAsIDI1LCAKLQkzMCwgMzUsIDM5LCA0MywgNDYsIDUw
LCA1MiwgNTYsIAotCTYwLCA2MiwgNjQsIDY5LCA3MiwgNzUsIDg1LCA4OSwgCi0JOTMsIDk3LCAx
MDEsIDEwNCwgMTEzLCAxMTUsIDExNiwgMTE3LCAKLQkxMjIsIDEyNywgMTMyLCAxMzQsIDEzNiwg
MTM4LCAxNDAsIDE0MSwgCi0JMTQzLCAxNDUsIDE0NywgMTQ4LCAxNTAsIDE1MiwgMTU0LCAxNTUs
IAotCTE2MCwgMTY1LCAxNjcsIDE3MSwgMTc2LCAxODEsIDE4NiwgMTkwLCAKLQkxOTEsIDE5NCwg
MTk1LCAxOTYKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyIF9qc29uX2luZGljaWVzW10gPSB7Ci0J
MCwgMiwgMCwgMSwgMywgNCwgNSwgMywgCi0JMSwgNiwgNywgOCwgNiwgMSwgOSwgMSwgCi0JMTAs
IDExLCAxMCwgMSwgMTEsIDEsIDEsIDExLCAKLQkxMiwgMTMsIDE0LCAxNSwgMTMsIDEsIDE2LCAx
NywgCi0JOCwgMTYsIDEsIDE3LCA3LCAxNywgMSwgMTgsIAotCTE5LCAyMCwgMSwgMTksIDIwLCAx
LCAyMiwgMjMsIAotCTIzLCAyMSwgMjQsIDEsIDIzLCAyMywgMjQsIDIxLCAKLQkyNSwgMjUsIDI2
LCAxLCAyNiwgMSwgMjYsIDIxLCAKLQkyMiwgMjMsIDIzLCAyMCwgMjEsIDI4LCAyOSwgMjcsIAot
CTMxLCAzMiwgMzAsIDMzLCAzMywgMzMsIDMzLCAzMywgCi0JMzMsIDMzLCAzMywgMzQsIDEsIDM1
LCAzNSwgMzUsIAotCTEsIDM2LCAzNiwgMzYsIDEsIDM3LCAzNywgMzcsIAotCTEsIDM4LCAzOCwg
MzgsIDEsIDQwLCA0MSwgMzksIAotCTQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0MywgCi0J
MSwgNDksIDEsIDUwLCA1MSwgNTMsIDU0LCAxLCAKLQk1MywgNTIsIDU1LCA1NiwgNTQsIDU1LCAx
LCA1NiwgCi0JMSwgMSwgNTYsIDUyLCA1NywgMSwgNTgsIDEsIAotCTU5LCAxLCA2MCwgMSwgNjEs
IDYyLCAxLCA2MywgCi0JMSwgNjQsIDEsIDY1LCA2NiwgMSwgNjcsIDEsIAotCTY4LCAxLCA2OSwg
NzAsIDcxLCA3MiwgNzAsIDEsIAotCTczLCA3NCwgNzUsIDczLCAxLCA3NiwgMSwgNzcsIAotCTc4
LCA3NywgMSwgNzgsIDEsIDEsIDc4LCA3OSwgCi0JODAsIDgxLCA4MiwgODAsIDEsIDgzLCA4NCwg
NzUsIAotCTgzLCAxLCA4NCwgNzQsIDg0LCAxLCA4NSwgODYsIAotCTg2LCAxLCAxLCAxLCAxLCAw
Ci19OwotCi1zdGF0aWMgY29uc3QgY2hhciBfanNvbl90cmFuc190YXJnc1tdID0gewotCTEsIDAs
IDIsIDMsIDQsIDU2LCAzLCA0LCAKLQk1NiwgNSwgNSwgNiwgNywgOCwgOSwgNTYsIAotCTgsIDks
IDExLCAxMiwgMTgsIDU3LCAxMywgMTUsIAotCTE0LCAxNiwgMTcsIDIwLCA1OCwgMjEsIDIwLCA1
OCwgCi0JMjEsIDE5LCAyMiwgMjMsIDI0LCAyNSwgMjYsIDIwLCAKLQk1OCwgMjEsIDI4LCAzMCwg
MzEsIDM0LCAzOSwgNDMsIAotCTQ3LCAyOSwgNTksIDU5LCAzMiwgMzEsIDI5LCAzMiwgCi0JMzMs
IDM1LCAzNiwgMzcsIDM4LCA1OSwgNDAsIDQxLCAKLQk0MiwgNTksIDQ0LCA0NSwgNDYsIDU5LCA0
OCwgNDksIAotCTU1LCA0OCwgNDksIDU1LCA1MCwgNTAsIDUxLCA1MiwgCi0JNTMsIDU0LCA1NSwg
NTMsIDU0LCA1OSwgNTYKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyIF9qc29uX3RyYW5zX2FjdGlv
bnNbXSA9IHsKLQkwLCAwLCAwLCAyMSwgNzcsIDUzLCAwLCA0NywgCi0JMjMsIDE3LCAwLCAwLCAx
NSwgMTksIDE5LCA1MCwgCi0JMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgCi0JMCwgMCwgMCwgMywg
MTMsIDAsIDAsIDM1LCAKLQk1LCAxMSwgMCwgMzgsIDcsIDcsIDcsIDQxLCAKLQk0NCwgOSwgNjIs
IDU2LCAyNSwgMCwgMCwgMCwgCi0JMzEsIDI5LCAzMywgNTksIDE1LCAwLCAyNywgMCwgCi0JMCwg
MCwgMCwgMCwgMCwgNjgsIDAsIDAsIAotCTAsIDcxLCAwLCAwLCAwLCA2NSwgMjEsIDc3LCAKLQk1
MywgMCwgNDcsIDIzLCAxNywgMCwgMCwgMTUsIAotCTE5LCAxOSwgNTAsIDAsIDAsIDc0LCAwCi19
OwotCi1zdGF0aWMgY29uc3QgaW50IGpzb25fc3RhcnQgPSAxOwotCi1zdGF0aWMgY29uc3QgaW50
IGpzb25fZW5fbnVtYmVyX21hY2hpbmUgPSAxMDsKLXN0YXRpYyBjb25zdCBpbnQganNvbl9lbl9z
dHJpbmdfbWFjaGluZSA9IDE5Owotc3RhdGljIGNvbnN0IGludCBqc29uX2VuX3ZhbHVlX21hY2hp
bmUgPSAyNzsKLXN0YXRpYyBjb25zdCBpbnQganNvbl9lbl9tYWluID0gMTsKLQotCi0jbGluZSAx
MjQ4ICJ1cGIvanNvbi9wYXJzZXIucmwiCi0KLXNpemVfdCBwYXJzZSh2b2lkICpjbG9zdXJlLCBj
b25zdCB2b2lkICpoZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAg
ICBjb25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgdXBiX2pzb25fcGFyc2VyICpwYXJz
ZXIgPSBjbG9zdXJlOwotCi0gIC8qIFZhcmlhYmxlcyB1c2VkIGJ5IFJhZ2VsJ3MgZ2VuZXJhdGVk
IGNvZGUuICovCi0gIGludCBjcyA9IHBhcnNlci0+Y3VycmVudF9zdGF0ZTsKLSAgaW50ICpzdGFj
ayA9IHBhcnNlci0+cGFyc2VyX3N0YWNrOwotICBpbnQgdG9wID0gcGFyc2VyLT5wYXJzZXJfdG9w
OwotCi0gIGNvbnN0IGNoYXIgKnAgPSBidWY7Ci0gIGNvbnN0IGNoYXIgKnBlID0gYnVmICsgc2l6
ZTsKLQotICBwYXJzZXItPmhhbmRsZSA9IGhhbmRsZTsKLQotICBVUEJfVU5VU0VEKGhkKTsKLSAg
VVBCX1VOVVNFRChoYW5kbGUpOwotCi0gIGNhcHR1cmVfcmVzdW1lKHBhcnNlciwgYnVmKTsKLQot
ICAKLSNsaW5lIDEzMjggInVwYi9qc29uL3BhcnNlci5jIgotCXsKLQlpbnQgX2tsZW47Ci0JdW5z
aWduZWQgaW50IF90cmFuczsKLQljb25zdCBjaGFyICpfYWN0czsKLQl1bnNpZ25lZCBpbnQgX25h
Y3RzOwotCWNvbnN0IGNoYXIgKl9rZXlzOwotCi0JaWYgKCBwID09IHBlICkKLQkJZ290byBfdGVz
dF9lb2Y7Ci0JaWYgKCBjcyA9PSAwICkKLQkJZ290byBfb3V0OwotX3Jlc3VtZToKLQlfa2V5cyA9
IF9qc29uX3RyYW5zX2tleXMgKyBfanNvbl9rZXlfb2Zmc2V0c1tjc107Ci0JX3RyYW5zID0gX2pz
b25faW5kZXhfb2Zmc2V0c1tjc107Ci0KLQlfa2xlbiA9IF9qc29uX3NpbmdsZV9sZW5ndGhzW2Nz
XTsKLQlpZiAoIF9rbGVuID4gMCApIHsKLQkJY29uc3QgY2hhciAqX2xvd2VyID0gX2tleXM7Ci0J
CWNvbnN0IGNoYXIgKl9taWQ7Ci0JCWNvbnN0IGNoYXIgKl91cHBlciA9IF9rZXlzICsgX2tsZW4g
LSAxOwotCQl3aGlsZSAoMSkgewotCQkJaWYgKCBfdXBwZXIgPCBfbG93ZXIgKQotCQkJCWJyZWFr
OwotCi0JCQlfbWlkID0gX2xvd2VyICsgKChfdXBwZXItX2xvd2VyKSA+PiAxKTsKLQkJCWlmICgg
KCpwKSA8ICpfbWlkICkKLQkJCQlfdXBwZXIgPSBfbWlkIC0gMTsKLQkJCWVsc2UgaWYgKCAoKnAp
ID4gKl9taWQgKQotCQkJCV9sb3dlciA9IF9taWQgKyAxOwotCQkJZWxzZSB7Ci0JCQkJX3RyYW5z
ICs9ICh1bnNpZ25lZCBpbnQpKF9taWQgLSBfa2V5cyk7Ci0JCQkJZ290byBfbWF0Y2g7Ci0JCQl9
Ci0JCX0KLQkJX2tleXMgKz0gX2tsZW47Ci0JCV90cmFucyArPSBfa2xlbjsKLQl9Ci0KLQlfa2xl
biA9IF9qc29uX3JhbmdlX2xlbmd0aHNbY3NdOwotCWlmICggX2tsZW4gPiAwICkgewotCQljb25z
dCBjaGFyICpfbG93ZXIgPSBfa2V5czsKLQkJY29uc3QgY2hhciAqX21pZDsKLQkJY29uc3QgY2hh
ciAqX3VwcGVyID0gX2tleXMgKyAoX2tsZW48PDEpIC0gMjsKLQkJd2hpbGUgKDEpIHsKLQkJCWlm
ICggX3VwcGVyIDwgX2xvd2VyICkKLQkJCQlicmVhazsKLQotCQkJX21pZCA9IF9sb3dlciArICgo
KF91cHBlci1fbG93ZXIpID4+IDEpICYgfjEpOwotCQkJaWYgKCAoKnApIDwgX21pZFswXSApCi0J
CQkJX3VwcGVyID0gX21pZCAtIDI7Ci0JCQllbHNlIGlmICggKCpwKSA+IF9taWRbMV0gKQotCQkJ
CV9sb3dlciA9IF9taWQgKyAyOwotCQkJZWxzZSB7Ci0JCQkJX3RyYW5zICs9ICh1bnNpZ25lZCBp
bnQpKChfbWlkIC0gX2tleXMpPj4xKTsKLQkJCQlnb3RvIF9tYXRjaDsKLQkJCX0KLQkJfQotCQlf
dHJhbnMgKz0gX2tsZW47Ci0JfQotCi1fbWF0Y2g6Ci0JX3RyYW5zID0gX2pzb25faW5kaWNpZXNb
X3RyYW5zXTsKLQljcyA9IF9qc29uX3RyYW5zX3RhcmdzW190cmFuc107Ci0KLQlpZiAoIF9qc29u
X3RyYW5zX2FjdGlvbnNbX3RyYW5zXSA9PSAwICkKLQkJZ290byBfYWdhaW47Ci0KLQlfYWN0cyA9
IF9qc29uX2FjdGlvbnMgKyBfanNvbl90cmFuc19hY3Rpb25zW190cmFuc107Ci0JX25hY3RzID0g
KHVuc2lnbmVkIGludCkgKl9hY3RzKys7Ci0Jd2hpbGUgKCBfbmFjdHMtLSA+IDAgKQotCXsKLQkJ
c3dpdGNoICggKl9hY3RzKysgKQotCQl7Ci0JY2FzZSAwOgotI2xpbmUgMTE2MCAidXBiL2pzb24v
cGFyc2VyLnJsIgotCXsgcC0tOyB7Y3MgPSBzdGFja1stLXRvcF07IGdvdG8gX2FnYWluO30gfQot
CWJyZWFrOwotCWNhc2UgMToKLSNsaW5lIDExNjEgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IHAt
LTsge3N0YWNrW3RvcCsrXSA9IGNzOyBjcyA9IDEwOyBnb3RvIF9hZ2Fpbjt9IH0KLQlicmVhazsK
LQljYXNlIDI6Ci0jbGluZSAxMTY1ICJ1cGIvanNvbi9wYXJzZXIucmwiCi0JeyBzdGFydF90ZXh0
KHBhcnNlciwgcCk7IH0KLQlicmVhazsKLQljYXNlIDM6Ci0jbGluZSAxMTY2ICJ1cGIvanNvbi9w
YXJzZXIucmwiCi0JeyBDSEVDS19SRVRVUk5fVE9QKGVuZF90ZXh0KHBhcnNlciwgcCkpOyB9Ci0J
YnJlYWs7Ci0JY2FzZSA0OgotI2xpbmUgMTE3MiAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgc3Rh
cnRfaGV4KHBhcnNlcik7IH0KLQlicmVhazsKLQljYXNlIDU6Ci0jbGluZSAxMTczICJ1cGIvanNv
bi9wYXJzZXIucmwiCi0JeyBoZXhkaWdpdChwYXJzZXIsIHApOyB9Ci0JYnJlYWs7Ci0JY2FzZSA2
OgotI2xpbmUgMTE3NCAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgQ0hFQ0tfUkVUVVJOX1RPUChl
bmRfaGV4KHBhcnNlcikpOyB9Ci0JYnJlYWs7Ci0JY2FzZSA3OgotI2xpbmUgMTE4MCAidXBiL2pz
b24vcGFyc2VyLnJsIgotCXsgQ0hFQ0tfUkVUVVJOX1RPUChlc2NhcGUocGFyc2VyLCBwKSk7IH0K
LQlicmVhazsKLQljYXNlIDg6Ci0jbGluZSAxMTg2ICJ1cGIvanNvbi9wYXJzZXIucmwiCi0JeyBw
LS07IHtjcyA9IHN0YWNrWy0tdG9wXTsgZ290byBfYWdhaW47fSB9Ci0JYnJlYWs7Ci0JY2FzZSA5
OgotI2xpbmUgMTE4OSAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsge3N0YWNrW3RvcCsrXSA9IGNz
OyBjcyA9IDE5OyBnb3RvIF9hZ2Fpbjt9IH0KLQlicmVhazsKLQljYXNlIDEwOgotI2xpbmUgMTE5
MSAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgcC0tOyB7c3RhY2tbdG9wKytdID0gY3M7IGNzID0g
Mjc7IGdvdG8gX2FnYWluO30gfQotCWJyZWFrOwotCWNhc2UgMTE6Ci0jbGluZSAxMTk2ICJ1cGIv
anNvbi9wYXJzZXIucmwiCi0JeyBzdGFydF9tZW1iZXIocGFyc2VyKTsgfQotCWJyZWFrOwotCWNh
c2UgMTI6Ci0jbGluZSAxMTk3ICJ1cGIvanNvbi9wYXJzZXIucmwiCi0JeyBDSEVDS19SRVRVUk5f
VE9QKGVuZF9tZW1iZXJuYW1lKHBhcnNlcikpOyB9Ci0JYnJlYWs7Ci0JY2FzZSAxMzoKLSNsaW5l
IDEyMDAgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IGVuZF9tZW1iZXIocGFyc2VyKTsgfQotCWJy
ZWFrOwotCWNhc2UgMTQ6Ci0jbGluZSAxMjA2ICJ1cGIvanNvbi9wYXJzZXIucmwiCi0JeyBzdGFy
dF9vYmplY3QocGFyc2VyKTsgfQotCWJyZWFrOwotCWNhc2UgMTU6Ci0jbGluZSAxMjA5ICJ1cGIv
anNvbi9wYXJzZXIucmwiCi0JeyBlbmRfb2JqZWN0KHBhcnNlcik7IH0KLQlicmVhazsKLQljYXNl
IDE2OgotI2xpbmUgMTIxNSAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgQ0hFQ0tfUkVUVVJOX1RP
UChzdGFydF9hcnJheShwYXJzZXIpKTsgfQotCWJyZWFrOwotCWNhc2UgMTc6Ci0jbGluZSAxMjE5
ICJ1cGIvanNvbi9wYXJzZXIucmwiCi0JeyBlbmRfYXJyYXkocGFyc2VyKTsgfQotCWJyZWFrOwot
CWNhc2UgMTg6Ci0jbGluZSAxMjI0ICJ1cGIvanNvbi9wYXJzZXIucmwiCi0JeyBzdGFydF9udW1i
ZXIocGFyc2VyLCBwKTsgfQotCWJyZWFrOwotCWNhc2UgMTk6Ci0jbGluZSAxMjI1ICJ1cGIvanNv
bi9wYXJzZXIucmwiCi0JeyBDSEVDS19SRVRVUk5fVE9QKGVuZF9udW1iZXIocGFyc2VyLCBwKSk7
IH0KLQlicmVhazsKLQljYXNlIDIwOgotI2xpbmUgMTIyNyAidXBiL2pzb24vcGFyc2VyLnJsIgot
CXsgQ0hFQ0tfUkVUVVJOX1RPUChzdGFydF9zdHJpbmd2YWwocGFyc2VyKSk7IH0KLQlicmVhazsK
LQljYXNlIDIxOgotI2xpbmUgMTIyOCAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgQ0hFQ0tfUkVU
VVJOX1RPUChlbmRfc3RyaW5ndmFsKHBhcnNlcikpOyB9Ci0JYnJlYWs7Ci0JY2FzZSAyMjoKLSNs
aW5lIDEyMzAgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IENIRUNLX1JFVFVSTl9UT1AocGFyc2Vy
X3B1dGJvb2wocGFyc2VyLCB0cnVlKSk7IH0KLQlicmVhazsKLQljYXNlIDIzOgotI2xpbmUgMTIz
MiAidXBiL2pzb24vcGFyc2VyLnJsIgotCXsgQ0hFQ0tfUkVUVVJOX1RPUChwYXJzZXJfcHV0Ym9v
bChwYXJzZXIsIGZhbHNlKSk7IH0KLQlicmVhazsKLQljYXNlIDI0OgotI2xpbmUgMTIzNCAidXBi
L2pzb24vcGFyc2VyLnJsIgotCXsgLyogbnVsbCB2YWx1ZSAqLyB9Ci0JYnJlYWs7Ci0JY2FzZSAy
NToKLSNsaW5lIDEyMzYgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IENIRUNLX1JFVFVSTl9UT1Ao
c3RhcnRfc3Vib2JqZWN0KHBhcnNlcikpOyB9Ci0JYnJlYWs7Ci0JY2FzZSAyNjoKLSNsaW5lIDEy
MzcgInVwYi9qc29uL3BhcnNlci5ybCIKLQl7IGVuZF9zdWJvYmplY3QocGFyc2VyKTsgfQotCWJy
ZWFrOwotCWNhc2UgMjc6Ci0jbGluZSAxMjQyICJ1cGIvanNvbi9wYXJzZXIucmwiCi0JeyBwLS07
IHtjcyA9IHN0YWNrWy0tdG9wXTsgZ290byBfYWdhaW47fSB9Ci0JYnJlYWs7Ci0jbGluZSAxNTE0
ICJ1cGIvanNvbi9wYXJzZXIuYyIKLQkJfQotCX0KLQotX2FnYWluOgotCWlmICggY3MgPT0gMCAp
Ci0JCWdvdG8gX291dDsKLQlpZiAoICsrcCAhPSBwZSApCi0JCWdvdG8gX3Jlc3VtZTsKLQlfdGVz
dF9lb2Y6IHt9Ci0JX291dDoge30KLQl9Ci0KLSNsaW5lIDEyNjkgInVwYi9qc29uL3BhcnNlci5y
bCIKLQotICBpZiAocCAhPSBwZSkgewotICAgIHVwYl9zdGF0dXNfc2V0ZXJyZigmcGFyc2VyLT5z
dGF0dXMsICJQYXJzZSBlcnJvciBhdCAnJS4qcydcbiIsIHBlIC0gcCwgcCk7Ci0gICAgdXBiX2Vu
dl9yZXBvcnRlcnJvcihwYXJzZXItPmVudiwgJnBhcnNlci0+c3RhdHVzKTsKLSAgfSBlbHNlIHsK
LSAgICBjYXB0dXJlX3N1c3BlbmQocGFyc2VyLCAmcCk7Ci0gIH0KLQotZXJyb3I6Ci0gIC8qIFNh
dmUgcGFyc2luZyBzdGF0ZSBiYWNrIHRvIHBhcnNlci4gKi8KLSAgcGFyc2VyLT5jdXJyZW50X3N0
YXRlID0gY3M7Ci0gIHBhcnNlci0+cGFyc2VyX3RvcCA9IHRvcDsKLQotICByZXR1cm4gcCAtIGJ1
ZjsKLX0KLQotYm9vbCBlbmQodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQpIHsKLSAgVVBC
X1VOVVNFRChjbG9zdXJlKTsKLSAgVVBCX1VOVVNFRChoZCk7Ci0KLSAgLyogUHJldmVudCBjb21w
aWxlIHdhcm5pbmcgb24gdW51c2VkIHN0YXRpYyBjb25zdGFudHMuICovCi0gIFVQQl9VTlVTRUQo
anNvbl9zdGFydCk7Ci0gIFVQQl9VTlVTRUQoanNvbl9lbl9udW1iZXJfbWFjaGluZSk7Ci0gIFVQ
Ql9VTlVTRUQoanNvbl9lbl9zdHJpbmdfbWFjaGluZSk7Ci0gIFVQQl9VTlVTRUQoanNvbl9lbl92
YWx1ZV9tYWNoaW5lKTsKLSAgVVBCX1VOVVNFRChqc29uX2VuX21haW4pOwotICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIHZvaWQganNvbl9wYXJzZXJfcmVzZXQodXBiX2pzb25fcGFyc2VyICpw
KSB7Ci0gIGludCBjczsKLSAgaW50IHRvcDsKLQotICBwLT50b3AgPSBwLT5zdGFjazsKLSAgcC0+
dG9wLT5mID0gTlVMTDsKLSAgcC0+dG9wLT5pc19tYXAgPSBmYWxzZTsKLSAgcC0+dG9wLT5pc19t
YXBlbnRyeSA9IGZhbHNlOwotCi0gIC8qIEVtaXQgUmFnZWwgaW5pdGlhbGl6YXRpb24gb2YgdGhl
IHBhcnNlci4gKi8KLSAgCi0jbGluZSAxNTY4ICJ1cGIvanNvbi9wYXJzZXIuYyIKLQl7Ci0JY3Mg
PSBqc29uX3N0YXJ0OwotCXRvcCA9IDA7Ci0JfQotCi0jbGluZSAxMzA5ICJ1cGIvanNvbi9wYXJz
ZXIucmwiCi0gIHAtPmN1cnJlbnRfc3RhdGUgPSBjczsKLSAgcC0+cGFyc2VyX3RvcCA9IHRvcDsK
LSAgYWNjdW11bGF0ZV9jbGVhcihwKTsKLSAgcC0+bXVsdGlwYXJ0X3N0YXRlID0gTVVMVElQQVJU
X0lOQUNUSVZFOwotICBwLT5jYXB0dXJlID0gTlVMTDsKLSAgcC0+YWNjdW11bGF0ZWQgPSBOVUxM
OwotICB1cGJfc3RhdHVzX2NsZWFyKCZwLT5zdGF0dXMpOwotfQotCi1zdGF0aWMgdm9pZCB2aXNp
dF9qc29uX3BhcnNlcm1ldGhvZChjb25zdCB1cGJfcmVmY291bnRlZCAqciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9yZWZjb3VudGVkX3Zpc2l0ICp2aXNpdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUpIHsKLSAgY29u
c3QgdXBiX2pzb25fcGFyc2VybWV0aG9kICptZXRob2QgPSAodXBiX2pzb25fcGFyc2VybWV0aG9k
KilyOwotICB2aXNpdChyLCB1cGJfbXNnZGVmX3VwY2FzdDIobWV0aG9kLT5tc2cpLCBjbG9zdXJl
KTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9qc29uX3BhcnNlcm1ldGhvZCh1cGJfcmVmY291bnRl
ZCAqcikgewotICB1cGJfanNvbl9wYXJzZXJtZXRob2QgKm1ldGhvZCA9ICh1cGJfanNvbl9wYXJz
ZXJtZXRob2QqKXI7Ci0KLSAgdXBiX2ludHRhYmxlX2l0ZXIgaTsKLSAgdXBiX2ludHRhYmxlX2Jl
Z2luKCZpLCAmbWV0aG9kLT5uYW1lX3RhYmxlcyk7Ci0gIGZvcig7ICF1cGJfaW50dGFibGVfZG9u
ZSgmaSk7IHVwYl9pbnR0YWJsZV9uZXh0KCZpKSkgewotICAgIHVwYl92YWx1ZSB2YWwgPSB1cGJf
aW50dGFibGVfaXRlcl92YWx1ZSgmaSk7Ci0gICAgdXBiX3N0cnRhYmxlICp0ID0gdXBiX3ZhbHVl
X2dldHB0cih2YWwpOwotICAgIHVwYl9zdHJ0YWJsZV91bmluaXQodCk7Ci0gICAgdXBiX2dmcmVl
KHQpOwotICB9Ci0KLSAgdXBiX2ludHRhYmxlX3VuaW5pdCgmbWV0aG9kLT5uYW1lX3RhYmxlcyk7
Ci0KLSAgdXBiX2dmcmVlKHIpOwotfQotCi1zdGF0aWMgdm9pZCBhZGRfanNvbm5hbWVfdGFibGUo
dXBiX2pzb25fcGFyc2VybWV0aG9kICptLCBjb25zdCB1cGJfbXNnZGVmKiBtZCkgewotICB1cGJf
bXNnX2ZpZWxkX2l0ZXIgaTsKLSAgdXBiX3N0cnRhYmxlICp0OwotCi0gIC8qIEl0IHdvdWxkIGJl
IG5pY2UgdG8gc3RhY2stYWxsb2NhdGUgdGhpcywgYnV0IHByb3RvYnVmcyBkbyBub3QgbGltaXQg
dGhlCi0gICAqIGxlbmd0aCBvZiBmaWVsZHMgdG8gYW55IHJlYXNvbmFibGUgbGltaXQuICovCi0g
IGNoYXIgKmJ1ZiA9IE5VTEw7Ci0gIHNpemVfdCBsZW4gPSAwOwotCi0gIGlmICh1cGJfaW50dGFi
bGVfbG9va3VwcHRyKCZtLT5uYW1lX3RhYmxlcywgbWQsIE5VTEwpKSB7Ci0gICAgcmV0dXJuOwot
ICB9Ci0KLSAgLyogVE9ETyhoYWJlcm1hbik6IGhhbmRsZSBtYWxsb2MgZmFpbHVyZS4gKi8KLSAg
dCA9IHVwYl9nbWFsbG9jKHNpemVvZigqdCkpOwotICB1cGJfc3RydGFibGVfaW5pdCh0LCBVUEJf
Q1RZUEVfQ09OU1RQVFIpOwotICB1cGJfaW50dGFibGVfaW5zZXJ0cHRyKCZtLT5uYW1lX3RhYmxl
cywgbWQsIHVwYl92YWx1ZV9wdHIodCkpOwotCi0gIGZvcih1cGJfbXNnX2ZpZWxkX2JlZ2luKCZp
LCBtZCk7Ci0gICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZpKTsKLSAgICAgIHVwYl9tc2dfZmll
bGRfbmV4dCgmaSkpIHsKLSAgICBjb25zdCB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJf
ZmllbGQoJmkpOwotCi0gICAgLyogQWRkIGFuIGVudHJ5IGZvciB0aGUgSlNPTiBuYW1lLiAqLwot
ICAgIHNpemVfdCBmaWVsZF9sZW4gPSB1cGJfZmllbGRkZWZfZ2V0anNvbm5hbWUoZiwgYnVmLCBs
ZW4pOwotICAgIGlmIChmaWVsZF9sZW4gPiBsZW4pIHsKLSAgICAgIHNpemVfdCBsZW4yOwotICAg
ICAgYnVmID0gdXBiX2dyZWFsbG9jKGJ1ZiwgMCwgZmllbGRfbGVuKTsKLSAgICAgIGxlbiA9IGZp
ZWxkX2xlbjsKLSAgICAgIGxlbjIgPSB1cGJfZmllbGRkZWZfZ2V0anNvbm5hbWUoZiwgYnVmLCBs
ZW4pOwotICAgICAgVVBCX0FTU0VSVF9WQVIobGVuMiwgbGVuID09IGxlbjIpOwotICAgIH0KLSAg
ICB1cGJfc3RydGFibGVfaW5zZXJ0KHQsIGJ1ZiwgdXBiX3ZhbHVlX2NvbnN0cHRyKGYpKTsKLQot
ICAgIGlmIChzdHJjbXAoYnVmLCB1cGJfZmllbGRkZWZfbmFtZShmKSkgIT0gMCkgewotICAgICAg
LyogU2luY2UgdGhlIEpTT04gbmFtZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVndWxhciBmaWVs
ZCBuYW1lLCBhZGQgYW4KLSAgICAgICAqIGVudHJ5IGZvciB0aGUgcmF3IG5hbWUgKGNvbXBsaWFu
dCBwcm90bzMgSlNPTiBwYXJzZXJzIG11c3QgYWNjZXB0Ci0gICAgICAgKiBib3RoKS4gKi8KLSAg
ICAgIHVwYl9zdHJ0YWJsZV9pbnNlcnQodCwgdXBiX2ZpZWxkZGVmX25hbWUoZiksIHVwYl92YWx1
ZV9jb25zdHB0cihmKSk7Ci0gICAgfQotCi0gICAgaWYgKHVwYl9maWVsZGRlZl9pc3N1Ym1zZyhm
KSkgewotICAgICAgYWRkX2pzb25uYW1lX3RhYmxlKG0sIHVwYl9maWVsZGRlZl9tc2dzdWJkZWYo
ZikpOwotICAgIH0KLSAgfQotCi0gIHVwYl9nZnJlZShidWYpOwotfQotCi0vKiBQdWJsaWMgQVBJ
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwotCi11cGJfanNvbl9wYXJzZXIgKnVwYl9qc29uX3BhcnNlcl9jcmVhdGUodXBi
X2VudiAqZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVwYl9qc29uX3BhcnNlcm1ldGhvZCAqbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwYl9zaW5rICpvdXRwdXQpIHsKLSNpZm5kZWYgTkRFQlVHCi0gIGNv
bnN0IHNpemVfdCBzaXplX2JlZm9yZSA9IHVwYl9lbnZfYnl0ZXNhbGxvY2F0ZWQoZW52KTsKLSNl
bmRpZgotICB1cGJfanNvbl9wYXJzZXIgKnAgPSB1cGJfZW52X21hbGxvYyhlbnYsIHNpemVvZih1
cGJfanNvbl9wYXJzZXIpKTsKLSAgaWYgKCFwKSByZXR1cm4gZmFsc2U7Ci0KLSAgcC0+ZW52ID0g
ZW52OwotICBwLT5tZXRob2QgPSBtZXRob2Q7Ci0gIHAtPmxpbWl0ID0gcC0+c3RhY2sgKyBVUEJf
SlNPTl9NQVhfREVQVEg7Ci0gIHAtPmFjY3VtdWxhdGVfYnVmID0gTlVMTDsKLSAgcC0+YWNjdW11
bGF0ZV9idWZfc2l6ZSA9IDA7Ci0gIHVwYl9ieXRlc3NpbmtfcmVzZXQoJnAtPmlucHV0XywgJm1l
dGhvZC0+aW5wdXRfaGFuZGxlcl8sIHApOwotCi0gIGpzb25fcGFyc2VyX3Jlc2V0KHApOwotICB1
cGJfc2lua19yZXNldCgmcC0+dG9wLT5zaW5rLCBvdXRwdXQtPmhhbmRsZXJzLCBvdXRwdXQtPmNs
b3N1cmUpOwotICBwLT50b3AtPm0gPSB1cGJfaGFuZGxlcnNfbXNnZGVmKG91dHB1dC0+aGFuZGxl
cnMpOwotICBzZXRfbmFtZV90YWJsZShwLCBwLT50b3ApOwotCi0gIC8qIElmIHRoaXMgZmFpbHMs
IHVuY29tbWVudCBhbmQgaW5jcmVhc2UgdGhlIHZhbHVlIGluIHBhcnNlci5oLiAqLwotICAvKiBm
cHJpbnRmKHN0ZGVyciwgIiV6ZFxuIiwgdXBiX2Vudl9ieXRlc2FsbG9jYXRlZChlbnYpIC0gc2l6
ZV9iZWZvcmUpOyAqLwotICBhc3NlcnQodXBiX2Vudl9ieXRlc2FsbG9jYXRlZChlbnYpIC0gc2l6
ZV9iZWZvcmUgPD0gVVBCX0pTT05fUEFSU0VSX1NJWkUpOwotICByZXR1cm4gcDsKLX0KLQotdXBi
X2J5dGVzc2luayAqdXBiX2pzb25fcGFyc2VyX2lucHV0KHVwYl9qc29uX3BhcnNlciAqcCkgewot
ICByZXR1cm4gJnAtPmlucHV0XzsKLX0KLQotdXBiX2pzb25fcGFyc2VybWV0aG9kICp1cGJfanNv
bl9wYXJzZXJtZXRob2RfbmV3KGNvbnN0IHVwYl9tc2dkZWYqIG1kLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIG93bmVyKSB7Ci0g
IHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXBiX3JlZmNvdW50ZWRfdnRibCB2dGJsID0ge3Zpc2l0X2pz
b25fcGFyc2VybWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmcmVlX2pzb25fcGFyc2VybWV0aG9kfTsKLSAgdXBiX2pzb25fcGFyc2VybWV0
aG9kICpyZXQgPSB1cGJfZ21hbGxvYyhzaXplb2YoKnJldCkpOwotICB1cGJfcmVmY291bnRlZF9p
bml0KHVwYl9qc29uX3BhcnNlcm1ldGhvZF91cGNhc3RfbXV0YWJsZShyZXQpLCAmdnRibCwgb3du
ZXIpOwotCi0gIHJldC0+bXNnID0gbWQ7Ci0gIHVwYl9yZWYyKG1kLCByZXQpOwotCi0gIHVwYl9i
eXRlc2hhbmRsZXJfaW5pdCgmcmV0LT5pbnB1dF9oYW5kbGVyXyk7Ci0gIHVwYl9ieXRlc2hhbmRs
ZXJfc2V0c3RyaW5nKCZyZXQtPmlucHV0X2hhbmRsZXJfLCBwYXJzZSwgcmV0KTsKLSAgdXBiX2J5
dGVzaGFuZGxlcl9zZXRlbmRzdHIoJnJldC0+aW5wdXRfaGFuZGxlcl8sIGVuZCwgcmV0KTsKLQot
ICB1cGJfaW50dGFibGVfaW5pdCgmcmV0LT5uYW1lX3RhYmxlcywgVVBCX0NUWVBFX1BUUik7Ci0K
LSAgYWRkX2pzb25uYW1lX3RhYmxlKHJldCwgbWQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWNv
bnN0IHVwYl9ieXRlc2hhbmRsZXIgKnVwYl9qc29uX3BhcnNlcm1ldGhvZF9pbnB1dGhhbmRsZXIo
Ci0gICAgY29uc3QgdXBiX2pzb25fcGFyc2VybWV0aG9kICptKSB7Ci0gIHJldHVybiAmbS0+aW5w
dXRfaGFuZGxlcl87Ci19Ci0vKgotKiogVGhpcyBjdXJyZW50bHkgdXNlcyBzbnByaW50ZigpIHRv
IGZvcm1hdCBwcmltaXRpdmVzLCBhbmQgY291bGQgYmUgb3B0aW1pemVkCi0qKiBmdXJ0aGVyLgot
Ki8KLQotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLXN0cnVj
dCB1cGJfanNvbl9wcmludGVyIHsKLSAgdXBiX3NpbmsgaW5wdXRfOwotICAvKiBCeXRlc1Npbmsg
Y2xvc3VyZS4gKi8KLSAgdm9pZCAqc3ViY187Ci0gIHVwYl9ieXRlc3NpbmsgKm91dHB1dF87Ci0K
LSAgLyogV2UgdHJhY2sgdGhlIGRlcHRoIHNvIHRoYXQgd2Uga25vdyB3aGVuIHRvIGVtaXQgc3Rh
cnRzdHIvZW5kc3RyIG9uIHRoZQotICAgKiBvdXRwdXQuICovCi0gIGludCBkZXB0aF87Ci0KLSAg
LyogSGF2ZSB3ZSBlbWl0dGVkIHRoZSBmaXJzdCBlbGVtZW50PyBUaGlzIHN0YXRlIGlzIG5lY2Vz
c2FyeSB0byBlbWl0IGNvbW1hcwotICAgKiB3aXRob3V0IGxlYXZpbmcgYSB0cmFpbGluZyBjb21t
YSBpbiBhcnJheXMvbWFwcy4gV2Uga2VlcCB0aGlzIHN0YXRlIHBlcgotICAgKiBmcmFtZSBkZXB0
aC4KLSAgICoKLSAgICogV2h5IG1heF9kZXB0aCAqIDI/IFVQQl9NQVhfSEFORExFUl9ERVBUSCBj
b3VudHMgZGVwdGggYXMgbmVzdGVkIG1lc3NhZ2VzLgotICAgKiBXZSBjb3VudCBmcmFtZXMgKGNv
bnRleHRzIGluIHdoaWNoIHdlIHNlcGFyYXRlIGVsZW1lbnRzIGJ5IGNvbW1hcykgYXMgYm90aAot
ICAgKiByZXBlYXRlZCBmaWVsZHMgYW5kIG1lc3NhZ2VzIChtYXBzKSwgYW5kIHRoZSB3b3JzdCBj
YXNlIGlzIGEKLSAgICogbWVzc2FnZS0+cmVwZWF0ZWQgZmllbGQtPnN1Ym1lc3NhZ2UtPnJlcGVh
dGVkIGZpZWxkLT4uLi4gbmVzdGluZy4gKi8KLSAgYm9vbCBmaXJzdF9lbGVtX1tVUEJfTUFYX0hB
TkRMRVJfREVQVEggKiAyXTsKLX07Ci0KLS8qIFN0cmluZ1BpZWNlOyBhIHBvaW50ZXIgcGx1cyBh
IGxlbmd0aC4gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgY2hhciAqcHRyOwotICBzaXplX3QgbGVu
OwotfSBzdHJwYzsKLQotdm9pZCBmcmVlc3RycGModm9pZCAqcHRyKSB7Ci0gIHN0cnBjICpwYyA9
IHB0cjsKLSAgdXBiX2dmcmVlKHBjLT5wdHIpOwotICB1cGJfZ2ZyZWUocGMpOwotfQotCi0vKiBD
b252ZXJ0IGZpZWxkZGVmIG5hbWUgdG8gSlNPTiBuYW1lIGFuZCByZXR1cm4gYXMgYSBzdHJpbmcg
cGllY2UuICovCi1zdHJwYyAqbmV3c3RycGModXBiX2hhbmRsZXJzICpoLCBjb25zdCB1cGJfZmll
bGRkZWYgKmYsCi0gICAgICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZV9maWVsZG5hbWVzKSB7Ci0g
IC8qIFRPRE8oaGFiZXJtYW4pOiBoYW5kbGUgbWFsbG9jIGZhaWx1cmUuICovCi0gIHN0cnBjICpy
ZXQgPSB1cGJfZ21hbGxvYyhzaXplb2YoKnJldCkpOwotICBpZiAocHJlc2VydmVfZmllbGRuYW1l
cykgewotICAgIHJldC0+cHRyID0gdXBiX2dzdHJkdXAodXBiX2ZpZWxkZGVmX25hbWUoZikpOwot
ICAgIHJldC0+bGVuID0gc3RybGVuKHJldC0+cHRyKTsKLSAgfSBlbHNlIHsKLSAgICBzaXplX3Qg
bGVuOwotICAgIHJldC0+bGVuID0gdXBiX2ZpZWxkZGVmX2dldGpzb25uYW1lKGYsIE5VTEwsIDAp
OwotICAgIHJldC0+cHRyID0gdXBiX2dtYWxsb2MocmV0LT5sZW4pOwotICAgIGxlbiA9IHVwYl9m
aWVsZGRlZl9nZXRqc29ubmFtZShmLCByZXQtPnB0ciwgcmV0LT5sZW4pOwotICAgIFVQQl9BU1NF
UlRfVkFSKGxlbiwgbGVuID09IHJldC0+bGVuKTsKLSAgICByZXQtPmxlbi0tOyAgLyogTlVMTCAq
LwotICB9Ci0KLSAgdXBiX2hhbmRsZXJzX2FkZGNsZWFudXAoaCwgcmV0LCBmcmVlc3RycGMpOwot
ICByZXR1cm4gcmV0OwotfQotCi0vKiAtLS0tLS0tLS0tLS0gSlNPTiBzdHJpbmcgcHJpbnRpbmc6
IHZhbHVlcywgbWFwcywgYXJyYXlzIC0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdm9p
ZCBwcmludF9kYXRhKAotICAgIHVwYl9qc29uX3ByaW50ZXIgKnAsIGNvbnN0IGNoYXIgKmJ1Ziwg
dW5zaWduZWQgaW50IGxlbikgewotICAvKiBUT0RPOiBXaWxsIG5lZWQgdG8gY2hhbmdlIGlmIHdl
IHN1cHBvcnQgcHVzaGJhY2sgZnJvbSB0aGUgc2luay4gKi8KLSAgc2l6ZV90IG4gPSB1cGJfYnl0
ZXNzaW5rX3B1dGJ1ZihwLT5vdXRwdXRfLCBwLT5zdWJjXywgYnVmLCBsZW4sIE5VTEwpOwotICBV
UEJfQVNTRVJUX1ZBUihuLCBuID09IGxlbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X2NvbW1h
KHVwYl9qc29uX3ByaW50ZXIgKnApIHsKLSAgaWYgKCFwLT5maXJzdF9lbGVtX1twLT5kZXB0aF9d
KSB7Ci0gICAgcHJpbnRfZGF0YShwLCAiLCIsIDEpOwotICB9Ci0gIHAtPmZpcnN0X2VsZW1fW3At
PmRlcHRoX10gPSBmYWxzZTsKLX0KLQotLyogSGVscGVycyB0aGF0IHByaW50IHByb3Blcmx5IGZv
cm1hdHRlZCBlbGVtZW50cyB0byB0aGUgSlNPTiBvdXRwdXQgc3RyZWFtLiAqLwotCi0vKiBVc2Vk
IGZvciBlc2NhcGluZyBjb250cm9sIGNoYXJzIGluIHN0cmluZ3MuICovCi1zdGF0aWMgY29uc3Qg
Y2hhciBrQ29udHJvbENoYXJMaW1pdCA9IDB4MjA7Ci0KLVVQQl9JTkxJTkUgYm9vbCBpc19qc29u
X2VzY2FwZWQoY2hhciBjKSB7Ci0gIC8qIFNlZSBSRkMgNDYyNy4gKi8KLSAgdW5zaWduZWQgY2hh
ciB1YyA9ICh1bnNpZ25lZCBjaGFyKWM7Ci0gIHJldHVybiB1YyA8IGtDb250cm9sQ2hhckxpbWl0
IHx8IHVjID09ICciJyB8fCB1YyA9PSAnXFwnOwotfQotCi1VUEJfSU5MSU5FIGNvbnN0IGNoYXIq
IGpzb25fbmljZV9lc2NhcGUoY2hhciBjKSB7Ci0gIHN3aXRjaCAoYykgewotICAgIGNhc2UgJyIn
OiAgcmV0dXJuICJcXFwiIjsKLSAgICBjYXNlICdcXCc6IHJldHVybiAiXFxcXCI7Ci0gICAgY2Fz
ZSAnXGInOiByZXR1cm4gIlxcYiI7Ci0gICAgY2FzZSAnXGYnOiByZXR1cm4gIlxcZiI7Ci0gICAg
Y2FzZSAnXG4nOiByZXR1cm4gIlxcbiI7Ci0gICAgY2FzZSAnXHInOiByZXR1cm4gIlxcciI7Ci0g
ICAgY2FzZSAnXHQnOiByZXR1cm4gIlxcdCI7Ci0gICAgZGVmYXVsdDogICByZXR1cm4gTlVMTDsK
LSAgfQotfQotCi0vKiBXcml0ZSBhIHByb3Blcmx5IGVzY2FwZWQgc3RyaW5nIGNodW5rLiBUaGUg
c3Vycm91bmRpbmcgcXVvdGVzIGFyZSAqbm90KgotICogcHJpbnRlZDsgdGhpcyBpcyBzbyB0aGF0
IHRoZSBjYWxsZXIgaGFzIHRoZSBvcHRpb24gb2YgZW1pdHRpbmcgdGhlIHN0cmluZwotICogY29u
dGVudCBpbiBjaHVua3MuICovCi1zdGF0aWMgdm9pZCBwdXRzdHJpbmcodXBiX2pzb25fcHJpbnRl
ciAqcCwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKSB7Ci0gIGNvbnN0IGNoYXIq
IHVuZXNjYXBlZF9ydW4gPSBOVUxMOwotICB1bnNpZ25lZCBpbnQgaTsKLSAgZm9yIChpID0gMDsg
aSA8IGxlbjsgaSsrKSB7Ci0gICAgY2hhciBjID0gYnVmW2ldOwotICAgIC8qIEhhbmRsZSBlc2Nh
cGluZy4gKi8KLSAgICBpZiAoaXNfanNvbl9lc2NhcGVkKGMpKSB7Ci0gICAgICAvKiBVc2UgYSAi
bmljZSIgZXNjYXBlLCBsaWtlIFxuLCBpZiBvbmUgZXhpc3RzIGZvciB0aGlzIGNoYXJhY3Rlci4g
Ki8KLSAgICAgIGNvbnN0IGNoYXIqIGVzY2FwZSA9IGpzb25fbmljZV9lc2NhcGUoYyk7Ci0gICAg
ICAvKiBJZiB3ZSBkb24ndCBoYXZlIGEgc3BlY2lmaWMgJ25pY2UnIGVzY2FwZSBjb2RlLCB1c2Ug
YSBcdVhYWFgtc3R5bGUKLSAgICAgICAqIGVzY2FwZS4gKi8KLSAgICAgIGNoYXIgZXNjYXBlX2J1
Zls4XTsKLSAgICAgIGlmICghZXNjYXBlKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZSA9
ICh1bnNpZ25lZCBjaGFyKWM7Ci0gICAgICAgIF91cGJfc25wcmludGYoZXNjYXBlX2J1Ziwgc2l6
ZW9mKGVzY2FwZV9idWYpLCAiXFx1JTA0eCIsIChpbnQpYnl0ZSk7Ci0gICAgICAgIGVzY2FwZSA9
IGVzY2FwZV9idWY7Ci0gICAgICB9Ci0KLSAgICAgIC8qIE4uQi4gdGhhdCB3ZSBhc3N1bWUgdGhh
dCB0aGUgaW5wdXQgZW5jb2RpbmcgaXMgZXF1YWwgdG8gdGhlIG91dHB1dAotICAgICAgICogZW5j
b2RpbmcgKGJvdGggVVRGLTggZm9yICBub3cpLCBzbyBmb3IgY2hhcnMgPj0gMHgyMCBhbmQgIT0g
XCwgIiwgd2UKLSAgICAgICAqIGNhbiBzaW1wbHkgcGFzcyB0aGUgYnl0ZXMgdGhyb3VnaC4gKi8K
LQotICAgICAgLyogSWYgdGhlcmUncyBhIGN1cnJlbnQgcnVuIG9mIHVuZXNjYXBlZCBjaGFycywg
cHJpbnQgdGhhdCBydW4gZmlyc3QuICovCi0gICAgICBpZiAodW5lc2NhcGVkX3J1bikgewotICAg
ICAgICBwcmludF9kYXRhKHAsIHVuZXNjYXBlZF9ydW4sICZidWZbaV0gLSB1bmVzY2FwZWRfcnVu
KTsKLSAgICAgICAgdW5lc2NhcGVkX3J1biA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICAvKiBUaGVu
IHByaW50IHRoZSBlc2NhcGUgY29kZS4gKi8KLSAgICAgIHByaW50X2RhdGEocCwgZXNjYXBlLCBz
dHJsZW4oZXNjYXBlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIEFkZCB0byB0aGUgY3VycmVu
dCB1bmVzY2FwZWQgcnVuIG9mIGNoYXJhY3RlcnMuICovCi0gICAgICBpZiAodW5lc2NhcGVkX3J1
biA9PSBOVUxMKSB7Ci0gICAgICAgIHVuZXNjYXBlZF9ydW4gPSAmYnVmW2ldOwotICAgICAgfQot
ICAgIH0KLSAgfQotCi0gIC8qIElmIHRoZSBzdHJpbmcgZW5kZWQgaW4gYSBydW4gb2YgdW5lc2Nh
cGVkIGNoYXJhY3RlcnMsIHByaW50IHRoYXQgbGFzdCBydW4uICovCi0gIGlmICh1bmVzY2FwZWRf
cnVuKSB7Ci0gICAgcHJpbnRfZGF0YShwLCB1bmVzY2FwZWRfcnVuLCAmYnVmW2xlbl0gLSB1bmVz
Y2FwZWRfcnVuKTsKLSAgfQotfQotCi0jZGVmaW5lIENIS0xFTkdUSCh4KSBpZiAoISh4KSkgcmV0
dXJuIC0xOwotCi0vKiBIZWxwZXJzIHRoYXQgZm9ybWF0IGZsb2F0aW5nIHBvaW50IHZhbHVlcyBh
Y2NvcmRpbmcgdG8gb3VyIGN1c3RvbSBmb3JtYXRzLgotICogUmlnaHQgbm93IHdlIHVzZSAlLjhn
IGFuZCAlLjE3ZyBmb3IgZmxvYXQvZG91YmxlLCByZXNwZWN0aXZlbHksIHRvIG1hdGNoCi0gKiBw
cm90bzI6OnV0aWw6Okpzb25Gb3JtYXQncyBkZWZhdWx0cy4gIE1heSB3YW50IHRvIGNoYW5nZSB0
aGlzIGxhdGVyLiAqLwotCi1zdGF0aWMgc2l6ZV90IGZtdF9kb3VibGUoZG91YmxlIHZhbCwgY2hh
ciogYnVmLCBzaXplX3QgbGVuZ3RoKSB7Ci0gIHNpemVfdCBuID0gX3VwYl9zbnByaW50ZihidWYs
IGxlbmd0aCwgIiUuMTdnIiwgdmFsKTsKLSAgQ0hLTEVOR1RIKG4gPiAwICYmIG4gPCBsZW5ndGgp
OwotICByZXR1cm4gbjsKLX0KLQotc3RhdGljIHNpemVfdCBmbXRfZmxvYXQoZmxvYXQgdmFsLCBj
aGFyKiBidWYsIHNpemVfdCBsZW5ndGgpIHsKLSAgc2l6ZV90IG4gPSBfdXBiX3NucHJpbnRmKGJ1
ZiwgbGVuZ3RoLCAiJS44ZyIsIHZhbCk7Ci0gIENIS0xFTkdUSChuID4gMCAmJiBuIDwgbGVuZ3Ro
KTsKLSAgcmV0dXJuIG47Ci19Ci0KLXN0YXRpYyBzaXplX3QgZm10X2Jvb2woYm9vbCB2YWwsIGNo
YXIqIGJ1Ziwgc2l6ZV90IGxlbmd0aCkgewotICBzaXplX3QgbiA9IF91cGJfc25wcmludGYoYnVm
LCBsZW5ndGgsICIlcyIsICh2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7Ci0gIENIS0xFTkdUSChu
ID4gMCAmJiBuIDwgbGVuZ3RoKTsKLSAgcmV0dXJuIG47Ci19Ci0KLXN0YXRpYyBzaXplX3QgZm10
X2ludDY0KGxvbmcgdmFsLCBjaGFyKiBidWYsIHNpemVfdCBsZW5ndGgpIHsKLSAgc2l6ZV90IG4g
PSBfdXBiX3NucHJpbnRmKGJ1ZiwgbGVuZ3RoLCAiJWxkIiwgdmFsKTsKLSAgQ0hLTEVOR1RIKG4g
PiAwICYmIG4gPCBsZW5ndGgpOwotICByZXR1cm4gbjsKLX0KLQotc3RhdGljIHNpemVfdCBmbXRf
dWludDY0KHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwsIGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbmd0aCkg
ewotICBzaXplX3QgbiA9IF91cGJfc25wcmludGYoYnVmLCBsZW5ndGgsICIlbGx1IiwgdmFsKTsK
LSAgQ0hLTEVOR1RIKG4gPiAwICYmIG4gPCBsZW5ndGgpOwotICByZXR1cm4gbjsKLX0KLQotLyog
UHJpbnQgYSBtYXAga2V5IGdpdmVuIGEgZmllbGQgbmFtZS4gQ2FsbGVkIGJ5IHNjYWxhciBmaWVs
ZCBoYW5kbGVycyBhbmQgYnkKLSAqIHN0YXJ0c2VxIGZvciByZXBlYXRlZCBmaWVsZHMuICovCi1z
dGF0aWMgYm9vbCBwdXRrZXkodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRh
KSB7Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBjb25zdCBzdHJwYyAqa2V5
ID0gaGFuZGxlcl9kYXRhOwotICBwcmludF9jb21tYShwKTsKLSAgcHJpbnRfZGF0YShwLCAiXCIi
LCAxKTsKLSAgcHV0c3RyaW5nKHAsIGtleS0+cHRyLCBrZXktPmxlbik7Ci0gIHByaW50X2RhdGEo
cCwgIlwiOiIsIDIpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotI2RlZmluZSBDSEtGTVQodmFsKSBp
ZiAoKHZhbCkgPT0gKHNpemVfdCktMSkgcmV0dXJuIGZhbHNlOwotI2RlZmluZSBDSEsodmFsKSAg
ICBpZiAoISh2YWwpKSByZXR1cm4gZmFsc2U7Ci0KLSNkZWZpbmUgVFlQRV9IQU5ETEVSUyh0eXBl
LCBmbXRfZnVuYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBz
dGF0aWMgYm9vbCBwdXQjI3R5cGUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9k
YXRhLCB0eXBlIHZhbCkgeyBcCi0gICAgdXBiX2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjaGFyIGRhdGFb
NjRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHNpemVfdCBsZW5ndGggPSBmbXRfZnVuYyh2YWwsIGRhdGEsIHNpemVvZihk
YXRhKSk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVVBCX1VOVVNFRChoYW5kbGVyX2Rh
dGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBDSEtGTVQobGVuZ3RoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHByaW50X2RhdGEocCwgZGF0YSwgbGVuZ3RoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIHRy
dWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgYm9vbCBzY2FsYXJfIyN0
eXBlKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSwgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSB2YWwpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBDSEsocHV0a2V5KGNsb3N1cmUsIGhhbmRsZXJfZGF0
YSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENISyhwdXQj
I3R5cGUoY2xvc3VyZSwgaGFuZGxlcl9kYXRhLCB2YWwpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBzdGF0aWMgYm9vbCByZXBlYXRlZF8jI3R5cGUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAq
aGFuZGxlcl9kYXRhLCAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
IHZhbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1cGJfanNv
bl9wcmludGVyICpwID0gY2xvc3VyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHByaW50X2NvbW1hKHApOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ0hLKHB1dCMjdHlwZShjbG9z
dXJlLCBoYW5kbGVyX2RhdGEsIHZhbCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNkZWZpbmUgVFlQRV9IQU5ETEVSU19NQVBL
RVkodHlwZSwgZm10X2Z1bmMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBz
dGF0aWMgYm9vbCBwdXRtYXBrZXlfIyN0eXBlKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhh
bmRsZXJfZGF0YSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSB2YWwp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1cGJfanNvbl9w
cmludGVyICpwID0gY2xvc3VyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHByaW50X2RhdGEocCwgIlwiIiwgMSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ0hLKHB1dCMjdHlwZShjbG9zdXJl
LCBoYW5kbGVyX2RhdGEsIHZhbCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBwcmludF9kYXRhKHAsICJcIjoiLCAyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotVFlQRV9I
QU5ETEVSUyhkb3VibGUsICAgZm10X2RvdWJsZSkKLVRZUEVfSEFORExFUlMoZmxvYXQsICAgIGZt
dF9mbG9hdCkKLVRZUEVfSEFORExFUlMoYm9vbCwgICAgIGZtdF9ib29sKQotVFlQRV9IQU5ETEVS
UyhpbnQzMl90LCAgZm10X2ludDY0KQotVFlQRV9IQU5ETEVSUyh1aW50MzJfdCwgZm10X2ludDY0
KQotVFlQRV9IQU5ETEVSUyhpbnQ2NF90LCAgZm10X2ludDY0KQotVFlQRV9IQU5ETEVSUyh1aW50
NjRfdCwgZm10X3VpbnQ2NCkKLQotLyogZG91YmxlIGFuZCBmbG9hdCBhcmUgbm90IGFsbG93ZWQg
dG8gYmUgbWFwIGtleXMuICovCi1UWVBFX0hBTkRMRVJTX01BUEtFWShib29sLCAgICAgZm10X2Jv
b2wpCi1UWVBFX0hBTkRMRVJTX01BUEtFWShpbnQzMl90LCAgZm10X2ludDY0KQotVFlQRV9IQU5E
TEVSU19NQVBLRVkodWludDMyX3QsIGZtdF9pbnQ2NCkKLVRZUEVfSEFORExFUlNfTUFQS0VZKGlu
dDY0X3QsICBmbXRfaW50NjQpCi1UWVBFX0hBTkRMRVJTX01BUEtFWSh1aW50NjRfdCwgZm10X3Vp
bnQ2NCkKLQotI3VuZGVmIFRZUEVfSEFORExFUlMKLSN1bmRlZiBUWVBFX0hBTkRMRVJTX01BUEtF
WQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHZvaWQgKmtleW5hbWU7Ci0gIGNvbnN0IHVwYl9lbnVt
ZGVmICplbnVtZGVmOwotfSBFbnVtSGFuZGxlckRhdGE7Ci0KLXN0YXRpYyBib29sIHNjYWxhcl9l
bnVtKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGludDMyX3QgdmFsKSB7Ci0gIGNvbnN0IEVudW1IYW5kbGVyRGF0YSAqaGQg
PSBoYW5kbGVyX2RhdGE7Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBjb25z
dCBjaGFyICpzeW1ib2xpY19uYW1lOwotCi0gIENISyhwdXRrZXkoY2xvc3VyZSwgaGQtPmtleW5h
bWUpKTsKLQotICBzeW1ib2xpY19uYW1lID0gdXBiX2VudW1kZWZfaXRvbihoZC0+ZW51bWRlZiwg
dmFsKTsKLSAgaWYgKHN5bWJvbGljX25hbWUpIHsKLSAgICBwcmludF9kYXRhKHAsICJcIiIsIDEp
OwotICAgIHB1dHN0cmluZyhwLCBzeW1ib2xpY19uYW1lLCBzdHJsZW4oc3ltYm9saWNfbmFtZSkp
OwotICAgIHByaW50X2RhdGEocCwgIlwiIiwgMSk7Ci0gIH0gZWxzZSB7Ci0gICAgcHV0aW50MzJf
dChjbG9zdXJlLCBOVUxMLCB2YWwpOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyB2b2lkIHByaW50X2VudW1fc3ltYm9saWNfbmFtZSh1cGJfanNvbl9wcmludGVyICpwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9lbnVtZGVmICpkZWYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB2YWwpIHsKLSAg
Y29uc3QgY2hhciAqc3ltYm9saWNfbmFtZSA9IHVwYl9lbnVtZGVmX2l0b24oZGVmLCB2YWwpOwot
ICBpZiAoc3ltYm9saWNfbmFtZSkgewotICAgIHByaW50X2RhdGEocCwgIlwiIiwgMSk7Ci0gICAg
cHV0c3RyaW5nKHAsIHN5bWJvbGljX25hbWUsIHN0cmxlbihzeW1ib2xpY19uYW1lKSk7Ci0gICAg
cHJpbnRfZGF0YShwLCAiXCIiLCAxKTsKLSAgfSBlbHNlIHsKLSAgICBwdXRpbnQzMl90KHAsIE5V
TEwsIHZhbCk7Ci0gIH0KLX0KLQotc3RhdGljIGJvb2wgcmVwZWF0ZWRfZW51bSh2b2lkICpjbG9z
dXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgdmFsKSB7Ci0gIGNvbnN0IEVudW1IYW5kbGVyRGF0YSAqaGQgPSBoYW5kbGVyX2Rh
dGE7Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBwcmludF9jb21tYShwKTsK
LQotICBwcmludF9lbnVtX3N5bWJvbGljX25hbWUocCwgaGQtPmVudW1kZWYsIHZhbCk7Ci0KLSAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIG1hcHZhbHVlX2VudW0odm9pZCAqY2xvc3Vy
ZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQzMl90IHZhbCkgewotICBjb25zdCBFbnVtSGFuZGxlckRhdGEgKmhkID0gaGFuZGxlcl9kYXRh
OwotICB1cGJfanNvbl9wcmludGVyICpwID0gY2xvc3VyZTsKLQotICBwcmludF9lbnVtX3N5bWJv
bGljX25hbWUocCwgaGQtPmVudW1kZWYsIHZhbCk7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyB2b2lkICpzY2FsYXJfc3RhcnRzdWJtc2codm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAq
aGFuZGxlcl9kYXRhKSB7Ci0gIHJldHVybiBwdXRrZXkoY2xvc3VyZSwgaGFuZGxlcl9kYXRhKSA/
IGNsb3N1cmUgOiBVUEJfQlJFQUs7Ci19Ci0KLXN0YXRpYyB2b2lkICpyZXBlYXRlZF9zdGFydHN1
Ym1zZyh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEpIHsKLSAgdXBiX2pz
b25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlcl9kYXRhKTsKLSAg
cHJpbnRfY29tbWEocCk7Ci0gIHJldHVybiBjbG9zdXJlOwotfQotCi1zdGF0aWMgdm9pZCBzdGFy
dF9mcmFtZSh1cGJfanNvbl9wcmludGVyICpwKSB7Ci0gIHAtPmRlcHRoXysrOwotICBwLT5maXJz
dF9lbGVtX1twLT5kZXB0aF9dID0gdHJ1ZTsKLSAgcHJpbnRfZGF0YShwLCAieyIsIDEpOwotfQot
Ci1zdGF0aWMgdm9pZCBlbmRfZnJhbWUodXBiX2pzb25fcHJpbnRlciAqcCkgewotICBwcmludF9k
YXRhKHAsICJ9IiwgMSk7Ci0gIHAtPmRlcHRoXy0tOwotfQotCi1zdGF0aWMgYm9vbCBwcmludGVy
X3N0YXJ0bXNnKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSkgewotICB1
cGJfanNvbl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoYW5kbGVyX2RhdGEp
OwotICBpZiAocC0+ZGVwdGhfID09IDApIHsKLSAgICB1cGJfYnl0ZXNzaW5rX3N0YXJ0KHAtPm91
dHB1dF8sIDAsICZwLT5zdWJjXyk7Ci0gIH0KLSAgc3RhcnRfZnJhbWUocCk7Ci0gIHJldHVybiB0
cnVlOwotfQotCi1zdGF0aWMgYm9vbCBwcmludGVyX2VuZG1zZyh2b2lkICpjbG9zdXJlLCBjb25z
dCB2b2lkICpoYW5kbGVyX2RhdGEsIHVwYl9zdGF0dXMgKnMpIHsKLSAgdXBiX2pzb25fcHJpbnRl
ciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlcl9kYXRhKTsKLSAgVVBCX1VOVVNF
RChzKTsKLSAgZW5kX2ZyYW1lKHApOwotICBpZiAocC0+ZGVwdGhfID09IDApIHsKLSAgICB1cGJf
Ynl0ZXNzaW5rX2VuZChwLT5vdXRwdXRfKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh
dGljIHZvaWQgKnN0YXJ0c2VxKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0
YSkgewotICB1cGJfanNvbl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAgQ0hLKHB1dGtleShjbG9z
dXJlLCBoYW5kbGVyX2RhdGEpKTsKLSAgcC0+ZGVwdGhfKys7Ci0gIHAtPmZpcnN0X2VsZW1fW3At
PmRlcHRoX10gPSB0cnVlOwotICBwcmludF9kYXRhKHAsICJbIiwgMSk7Ci0gIHJldHVybiBjbG9z
dXJlOwotfQotCi1zdGF0aWMgYm9vbCBlbmRzZXEodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAq
aGFuZGxlcl9kYXRhKSB7Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBVUEJf
VU5VU0VEKGhhbmRsZXJfZGF0YSk7Ci0gIHByaW50X2RhdGEocCwgIl0iLCAxKTsKLSAgcC0+ZGVw
dGhfLS07Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCAqc3RhcnRtYXAodm9pZCAq
Y2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhKSB7Ci0gIHVwYl9qc29uX3ByaW50ZXIg
KnAgPSBjbG9zdXJlOwotICBDSEsocHV0a2V5KGNsb3N1cmUsIGhhbmRsZXJfZGF0YSkpOwotICBw
LT5kZXB0aF8rKzsKLSAgcC0+Zmlyc3RfZWxlbV9bcC0+ZGVwdGhfXSA9IHRydWU7Ci0gIHByaW50
X2RhdGEocCwgInsiLCAxKTsKLSAgcmV0dXJuIGNsb3N1cmU7Ci19Ci0KLXN0YXRpYyBib29sIGVu
ZG1hcCh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEpIHsKLSAgdXBiX2pz
b25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlcl9kYXRhKTsKLSAg
cHJpbnRfZGF0YShwLCAifSIsIDEpOwotICBwLT5kZXB0aF8tLTsKLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBzaXplX3QgcHV0c3RyKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRs
ZXJfZGF0YSwgY29uc3QgY2hhciAqc3RyLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxl
biwgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAg
PSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhhbmRsZXJfZGF0YSk7Ci0gIFVQQl9VTlVTRUQoaGFu
ZGxlKTsKLSAgcHV0c3RyaW5nKHAsIHN0ciwgbGVuKTsKLSAgcmV0dXJuIGxlbjsKLX0KLQotLyog
VGhpcyBoYXMgdG8gQmFzZTY0IGVuY29kZSB0aGUgYnl0ZXMsIGJlY2F1c2UgSlNPTiBoYXMgbm8g
ImJ5dGVzIiB0eXBlLiAqLwotc3RhdGljIHNpemVfdCBwdXRieXRlcyh2b2lkICpjbG9zdXJlLCBj
b25zdCB2b2lkICpoYW5kbGVyX2RhdGEsIGNvbnN0IGNoYXIgKnN0ciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IGxlbiwgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIHVw
Yl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotCi0gIC8qIFRoaXMgaXMgdGhlIHJlZ3VsYXIg
YmFzZTY0LCBub3QgdGhlICJ3ZWItc2FmZSIgdmVyc2lvbi4gKi8KLSAgc3RhdGljIGNvbnN0IGNo
YXIgYmFzZTY0W10gPQotICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hp
amtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwotCi0gIC8qIEJhc2U2NC1lbmNvZGUuICov
Ci0gIGNoYXIgZGF0YVsxNjAwMF07Ci0gIGNvbnN0IGNoYXIgKmxpbWl0ID0gZGF0YSArIHNpemVv
ZihkYXRhKTsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSA9IChjb25zdCB1bnNpZ25lZCBj
aGFyKilzdHI7Ci0gIGNoYXIgKnRvID0gZGF0YTsKLSAgc2l6ZV90IHJlbWFpbmluZyA9IGxlbjsK
LSAgc2l6ZV90IGJ5dGVzOwotCi0gIFVQQl9VTlVTRUQoaGFuZGxlcl9kYXRhKTsKLSAgVVBCX1VO
VVNFRChoYW5kbGUpOwotCi0gIHdoaWxlIChyZW1haW5pbmcgPiAyKSB7Ci0gICAgLyogVE9ETyho
YWJlcm1hbik6IGhhbmRsZSBlbmNvZGVkIGxlbmd0aHMgPiBzaXplb2YoZGF0YSkgKi8KLSAgICBV
UEJfQVNTRVJUX1ZBUihsaW1pdCwgKGxpbWl0IC0gdG8pID49IDQpOwotCi0gICAgdG9bMF0gPSBi
YXNlNjRbZnJvbVswXSA+PiAyXTsKLSAgICB0b1sxXSA9IGJhc2U2NFsoKGZyb21bMF0gJiAweDMp
IDw8IDQpIHwgKGZyb21bMV0gPj4gNCldOwotICAgIHRvWzJdID0gYmFzZTY0WygoZnJvbVsxXSAm
IDB4ZikgPDwgMikgfCAoZnJvbVsyXSA+PiA2KV07Ci0gICAgdG9bM10gPSBiYXNlNjRbZnJvbVsy
XSAmIDB4M2ZdOwotCi0gICAgcmVtYWluaW5nIC09IDM7Ci0gICAgdG8gKz0gNDsKLSAgICBmcm9t
ICs9IDM7Ci0gIH0KLQotICBzd2l0Y2ggKHJlbWFpbmluZykgewotICAgIGNhc2UgMjoKLSAgICAg
IHRvWzBdID0gYmFzZTY0W2Zyb21bMF0gPj4gMl07Ci0gICAgICB0b1sxXSA9IGJhc2U2NFsoKGZy
b21bMF0gJiAweDMpIDw8IDQpIHwgKGZyb21bMV0gPj4gNCldOwotICAgICAgdG9bMl0gPSBiYXNl
NjRbKGZyb21bMV0gJiAweGYpIDw8IDJdOwotICAgICAgdG9bM10gPSAnPSc7Ci0gICAgICB0byAr
PSA0OwotICAgICAgZnJvbSArPSAyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAg
dG9bMF0gPSBiYXNlNjRbZnJvbVswXSA+PiAyXTsKLSAgICAgIHRvWzFdID0gYmFzZTY0WygoZnJv
bVswXSAmIDB4MykgPDwgNCldOwotICAgICAgdG9bMl0gPSAnPSc7Ci0gICAgICB0b1szXSA9ICc9
JzsKLSAgICAgIHRvICs9IDQ7Ci0gICAgICBmcm9tICs9IDE7Ci0gICAgICBicmVhazsKLSAgfQot
Ci0gIGJ5dGVzID0gdG8gLSBkYXRhOwotICBwcmludF9kYXRhKHAsICJcIiIsIDEpOwotICBwdXRz
dHJpbmcocCwgZGF0YSwgYnl0ZXMpOwotICBwcmludF9kYXRhKHAsICJcIiIsIDEpOwotICByZXR1
cm4gbGVuOwotfQotCi1zdGF0aWMgdm9pZCAqc2NhbGFyX3N0YXJ0c3RyKHZvaWQgKmNsb3N1cmUs
IGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IHNpemVfaGludCkgewotICB1cGJfanNvbl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAg
VVBCX1VOVVNFRChoYW5kbGVyX2RhdGEpOwotICBVUEJfVU5VU0VEKHNpemVfaGludCk7Ci0gIENI
SyhwdXRrZXkoY2xvc3VyZSwgaGFuZGxlcl9kYXRhKSk7Ci0gIHByaW50X2RhdGEocCwgIlwiIiwg
MSk7Ci0gIHJldHVybiBwOwotfQotCi1zdGF0aWMgc2l6ZV90IHNjYWxhcl9zdHIodm9pZCAqY2xv
c3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB1cGJfYnVmaGFuZGxlICpoYW5kbGUpIHsKLSAgQ0hLKHB1dHN0cihjbG9zdXJlLCBoYW5k
bGVyX2RhdGEsIHN0ciwgbGVuLCBoYW5kbGUpKTsKLSAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGlj
IGJvb2wgc2NhbGFyX2VuZHN0cih2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2Rh
dGEpIHsKLSAgdXBiX2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGFu
ZGxlcl9kYXRhKTsKLSAgcHJpbnRfZGF0YShwLCAiXCIiLCAxKTsKLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyB2b2lkICpyZXBlYXRlZF9zdGFydHN0cih2b2lkICpjbG9zdXJlLCBjb25zdCB2
b2lkICpoYW5kbGVyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHNpemVfaGludCkgewotICB1cGJfanNvbl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAgVVBCX1VO
VVNFRChoYW5kbGVyX2RhdGEpOwotICBVUEJfVU5VU0VEKHNpemVfaGludCk7Ci0gIHByaW50X2Nv
bW1hKHApOwotICBwcmludF9kYXRhKHAsICJcIiIsIDEpOwotICByZXR1cm4gcDsKLX0KLQotc3Rh
dGljIHNpemVfdCByZXBlYXRlZF9zdHIodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxl
cl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyLCBzaXpl
X3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBiX2J1ZmhhbmRsZSAq
aGFuZGxlKSB7Ci0gIENISyhwdXRzdHIoY2xvc3VyZSwgaGFuZGxlcl9kYXRhLCBzdHIsIGxlbiwg
aGFuZGxlKSk7Ci0gIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBib29sIHJlcGVhdGVkX2VuZHN0
cih2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEpIHsKLSAgdXBiX2pzb25f
cHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9VTlVTRUQoaGFuZGxlcl9kYXRhKTsKLSAgcHJp
bnRfZGF0YShwLCAiXCIiLCAxKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkICpt
YXBrZXl2YWxfc3RhcnRzdHIodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRh
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZV9oaW50KSB7Ci0g
IHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJlOwotICBVUEJfVU5VU0VEKGhhbmRsZXJfZGF0
YSk7Ci0gIFVQQl9VTlVTRUQoc2l6ZV9oaW50KTsKLSAgcHJpbnRfZGF0YShwLCAiXCIiLCAxKTsK
LSAgcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyBzaXplX3QgbWFwa2V5X3N0cih2b2lkICpjbG9zdXJl
LCBjb25zdCB2b2lkICpoYW5kbGVyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqc3RyLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICBDSEsocHV0c3RyKGNsb3N1cmUsIGhhbmRsZXJf
ZGF0YSwgc3RyLCBsZW4sIGhhbmRsZSkpOwotICByZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgYm9v
bCBtYXBrZXlfZW5kc3RyKHZvaWQgKmNsb3N1cmUsIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSkg
ewotICB1cGJfanNvbl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAgVVBCX1VOVVNFRChoYW5kbGVy
X2RhdGEpOwotICBwcmludF9kYXRhKHAsICJcIjoiLCAyKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBib29sIG1hcHZhbHVlX2VuZHN0cih2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpo
YW5kbGVyX2RhdGEpIHsKLSAgdXBiX2pzb25fcHJpbnRlciAqcCA9IGNsb3N1cmU7Ci0gIFVQQl9V
TlVTRUQoaGFuZGxlcl9kYXRhKTsKLSAgcHJpbnRfZGF0YShwLCAiXCIiLCAxKTsKLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyBzaXplX3Qgc2NhbGFyX2J5dGVzKHZvaWQgKmNsb3N1cmUsIGNv
bnN0IHZvaWQgKmhhbmRsZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICBDSEsocHV0a2V5KGNsb3N1cmUsIGhhbmRsZXJf
ZGF0YSkpOwotICBDSEsocHV0Ynl0ZXMoY2xvc3VyZSwgaGFuZGxlcl9kYXRhLCBzdHIsIGxlbiwg
aGFuZGxlKSk7Ci0gIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzaXplX3QgcmVwZWF0ZWRfYnl0
ZXModm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhhbmRsZSkgewotICB1cGJf
anNvbl9wcmludGVyICpwID0gY2xvc3VyZTsKLSAgcHJpbnRfY29tbWEocCk7Ci0gIENISyhwdXRi
eXRlcyhjbG9zdXJlLCBoYW5kbGVyX2RhdGEsIHN0ciwgbGVuLCBoYW5kbGUpKTsKLSAgcmV0dXJu
IGxlbjsKLX0KLQotc3RhdGljIHNpemVfdCBtYXBrZXlfYnl0ZXModm9pZCAqY2xvc3VyZSwgY29u
c3Qgdm9pZCAqaGFuZGxlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqc3RyLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dXBiX2J1ZmhhbmRsZSAqaGFuZGxlKSB7Ci0gIHVwYl9qc29uX3ByaW50ZXIgKnAgPSBjbG9zdXJl
OwotICBDSEsocHV0Ynl0ZXMoY2xvc3VyZSwgaGFuZGxlcl9kYXRhLCBzdHIsIGxlbiwgaGFuZGxl
KSk7Ci0gIHByaW50X2RhdGEocCwgIjoiLCAxKTsKLSAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGlj
IHZvaWQgc2V0X2VudW1faGQodXBiX2hhbmRsZXJzICpoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
cmVzZXJ2ZV9maWVsZG5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJh
dHRyICphdHRyKSB7Ci0gIEVudW1IYW5kbGVyRGF0YSAqaGQgPSB1cGJfZ21hbGxvYyhzaXplb2Yo
RW51bUhhbmRsZXJEYXRhKSk7Ci0gIGhkLT5lbnVtZGVmID0gKGNvbnN0IHVwYl9lbnVtZGVmICop
dXBiX2ZpZWxkZGVmX3N1YmRlZihmKTsKLSAgaGQtPmtleW5hbWUgPSBuZXdzdHJwYyhoLCBmLCBw
cmVzZXJ2ZV9maWVsZG5hbWVzKTsKLSAgdXBiX2hhbmRsZXJzX2FkZGNsZWFudXAoaCwgaGQsIHVw
Yl9nZnJlZSk7Ci0gIHVwYl9oYW5kbGVyYXR0cl9zZXRoYW5kbGVyZGF0YShhdHRyLCBoZCk7Ci19
Ci0KLS8qIFNldCB1cCBoYW5kbGVycyBmb3IgYSBtYXBlbnRyeSBzdWJtZXNzYWdlIChpLmUuLCBh
biBpbmRpdmlkdWFsIGtleS92YWx1ZSBwYWlyCi0gKiBpbiBhIG1hcCkuCi0gKgotICogVE9ETzog
SGFuZGxlIG1pc3Npbmcga2V5LCBtaXNzaW5nIHZhbHVlLCBvdXQtb2Ytb3JkZXIga2V5L3ZhbHVl
LCBvciByZXBlYXRlZAotICoga2V5IG9yIHZhbHVlIGNhc2VzIHByb3Blcmx5LiBUaGUgcmlnaHQg
d2F5IHRvIGRvIHRoaXMgaXMgdG8gYWxsb2NhdGUgYQotICogdGVtcG9yYXJ5IHN0cnVjdHVyZSBh
dCB0aGUgc3RhcnQgb2YgYSBtYXBlbnRyeSBzdWJtZXNzYWdlLCBzdG9yZSBrZXkgYW5kCi0gKiB2
YWx1ZSBkYXRhIGluIGl0IGFzIGtleSBhbmQgdmFsdWUgaGFuZGxlcnMgYXJlIGNhbGxlZCwgYW5k
IHRoZW4gcHJpbnQgdGhlCi0gKiBrZXkvdmFsdWUgcGFpciBvbmNlIGF0IHRoZSBlbmQgb2YgdGhl
IHN1Ym1lc3NhZ2UuIElmIHdlIGRvbid0IGRvIHRoaXMsIHdlCi0gKiBzaG91bGQgYXQgbGVhc3Qg
ZGV0ZWN0IHRoZSBjYXNlIGFuZCB0aHJvdyBhbiBlcnJvci4gSG93ZXZlciwgc28gZmFyIGFsbCBv
ZgotICogb3VyIHNvdXJjZXMgdGhhdCBlbWl0IG1hcGVudHJ5IG1lc3NhZ2VzIGRvIHNvIGNhbm9u
aWNhbGx5ICh3aXRoIG9uZSBrZXkKLSAqIGZpZWxkLCBhbmQgdGhlbiBvbmUgdmFsdWUgZmllbGQp
LCBzbyB0aGlzIGlzIG5vdCBhIHByZXNzaW5nIGNvbmNlcm4gYXQgdGhlCi0gKiBtb21lbnQuICov
Ci12b2lkIHByaW50ZXJfc2V0aGFuZGxlcnNfbWFwZW50cnkoY29uc3Qgdm9pZCAqY2xvc3VyZSwg
Ym9vbCBwcmVzZXJ2ZV9maWVsZG5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwYl9oYW5kbGVycyAqaCkgewotICBjb25zdCB1cGJfbXNnZGVmICptZCA9IHVwYl9oYW5k
bGVyc19tc2dkZWYoaCk7Ci0KLSAgLyogQSBtYXBlbnRyeSBtZXNzYWdlIGlzIHByaW50ZWQgc2lt
cGx5IGFzICcia2V5IjogdmFsdWUnLiBSYXRoZXIgdGhhbgotICAgKiBzcGVjaWFsLWNhc2Uga2V5
IGFuZCB2YWx1ZSBmb3IgZXZlcnkgdHlwZSBiZWxvdywgd2UganVzdCBoYW5kbGUgYm90aAotICAg
KiBmaWVsZHMgZXhwbGljaXRseSBoZXJlLiAqLwotICBjb25zdCB1cGJfZmllbGRkZWYqIGtleV9m
aWVsZCA9IHVwYl9tc2dkZWZfaXRvZihtZCwgVVBCX01BUEVOVFJZX0tFWSk7Ci0gIGNvbnN0IHVw
Yl9maWVsZGRlZiogdmFsdWVfZmllbGQgPSB1cGJfbXNnZGVmX2l0b2YobWQsIFVQQl9NQVBFTlRS
WV9WQUxVRSk7Ci0KLSAgdXBiX2hhbmRsZXJhdHRyIGVtcHR5X2F0dHIgPSBVUEJfSEFORExFUkFU
VFJfSU5JVElBTElaRVI7Ci0KLSAgVVBCX1VOVVNFRChjbG9zdXJlKTsKLQotICBzd2l0Y2ggKHVw
Yl9maWVsZGRlZl90eXBlKGtleV9maWVsZCkpIHsKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDMyOgot
ICAgICAgdXBiX2hhbmRsZXJzX3NldGludDMyKGgsIGtleV9maWVsZCwgcHV0bWFwa2V5X2ludDMy
X3QsICZlbXB0eV9hdHRyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfSU5UNjQ6
Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0aW50NjQoaCwga2V5X2ZpZWxkLCBwdXRtYXBrZXlfaW50
NjRfdCwgJmVtcHR5X2F0dHIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9VSU5U
MzI6Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0dWludDMyKGgsIGtleV9maWVsZCwgcHV0bWFwa2V5
X3VpbnQzMl90LCAmZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBF
X1VJTlQ2NDoKLSAgICAgIHVwYl9oYW5kbGVyc19zZXR1aW50NjQoaCwga2V5X2ZpZWxkLCBwdXRt
YXBrZXlfdWludDY0X3QsICZlbXB0eV9hdHRyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBC
X1RZUEVfQk9PTDoKLSAgICAgIHVwYl9oYW5kbGVyc19zZXRib29sKGgsIGtleV9maWVsZCwgcHV0
bWFwa2V5X2Jvb2wsICZlbXB0eV9hdHRyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZ
UEVfU1RSSU5HOgotICAgICAgdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3RyKGgsIGtleV9maWVsZCwg
bWFwa2V5dmFsX3N0YXJ0c3RyLCAmZW1wdHlfYXR0cik7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0
c3RyaW5nKGgsIGtleV9maWVsZCwgbWFwa2V5X3N0ciwgJmVtcHR5X2F0dHIpOwotICAgICAgdXBi
X2hhbmRsZXJzX3NldGVuZHN0cihoLCBrZXlfZmllbGQsIG1hcGtleV9lbmRzdHIsICZlbXB0eV9h
dHRyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBCX1RZUEVfQllURVM6Ci0gICAgICB1cGJf
aGFuZGxlcnNfc2V0c3RyaW5nKGgsIGtleV9maWVsZCwgbWFwa2V5X2J5dGVzLCAmZW1wdHlfYXR0
cik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAg
ICAgIGJyZWFrOwotICB9Ci0KLSAgc3dpdGNoICh1cGJfZmllbGRkZWZfdHlwZSh2YWx1ZV9maWVs
ZCkpIHsKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDMyOgotICAgICAgdXBiX2hhbmRsZXJzX3NldGlu
dDMyKGgsIHZhbHVlX2ZpZWxkLCBwdXRpbnQzMl90LCAmZW1wdHlfYXR0cik7Ci0gICAgICBicmVh
azsKLSAgICBjYXNlIFVQQl9UWVBFX0lOVDY0OgotICAgICAgdXBiX2hhbmRsZXJzX3NldGludDY0
KGgsIHZhbHVlX2ZpZWxkLCBwdXRpbnQ2NF90LCAmZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIFVQQl9UWVBFX1VJTlQzMjoKLSAgICAgIHVwYl9oYW5kbGVyc19zZXR1aW50MzIo
aCwgdmFsdWVfZmllbGQsIHB1dHVpbnQzMl90LCAmZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIFVQQl9UWVBFX1VJTlQ2NDoKLSAgICAgIHVwYl9oYW5kbGVyc19zZXR1aW50NjQo
aCwgdmFsdWVfZmllbGQsIHB1dHVpbnQ2NF90LCAmZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIFVQQl9UWVBFX0JPT0w6Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0Ym9vbChoLCB2
YWx1ZV9maWVsZCwgcHV0Ym9vbCwgJmVtcHR5X2F0dHIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBVUEJfVFlQRV9GTE9BVDoKLSAgICAgIHVwYl9oYW5kbGVyc19zZXRmbG9hdChoLCB2YWx1ZV9m
aWVsZCwgcHV0ZmxvYXQsICZlbXB0eV9hdHRyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVVBC
X1RZUEVfRE9VQkxFOgotICAgICAgdXBiX2hhbmRsZXJzX3NldGRvdWJsZShoLCB2YWx1ZV9maWVs
ZCwgcHV0ZG91YmxlLCAmZW1wdHlfYXR0cik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9U
WVBFX1NUUklORzoKLSAgICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHN0cihoLCB2YWx1ZV9maWVs
ZCwgbWFwa2V5dmFsX3N0YXJ0c3RyLCAmZW1wdHlfYXR0cik7Ci0gICAgICB1cGJfaGFuZGxlcnNf
c2V0c3RyaW5nKGgsIHZhbHVlX2ZpZWxkLCBwdXRzdHIsICZlbXB0eV9hdHRyKTsKLSAgICAgIHVw
Yl9oYW5kbGVyc19zZXRlbmRzdHIoaCwgdmFsdWVfZmllbGQsIG1hcHZhbHVlX2VuZHN0ciwgJmVt
cHR5X2F0dHIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVUEJfVFlQRV9CWVRFUzoKLSAgICAg
IHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgdmFsdWVfZmllbGQsIHB1dGJ5dGVzLCAmZW1wdHlf
YXR0cik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVQQl9UWVBFX0VOVU06IHsKLSAgICAgIHVw
Yl9oYW5kbGVyYXR0ciBlbnVtX2F0dHIgPSBVUEJfSEFORExFUkFUVFJfSU5JVElBTElaRVI7Ci0g
ICAgICBzZXRfZW51bV9oZChoLCB2YWx1ZV9maWVsZCwgcHJlc2VydmVfZmllbGRuYW1lcywgJmVu
dW1fYXR0cik7Ci0gICAgICB1cGJfaGFuZGxlcnNfc2V0aW50MzIoaCwgdmFsdWVfZmllbGQsIG1h
cHZhbHVlX2VudW0sICZlbnVtX2F0dHIpOwotICAgICAgdXBiX2hhbmRsZXJhdHRyX3VuaW5pdCgm
ZW51bV9hdHRyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVQQl9UWVBFX01FU1NB
R0U6Ci0gICAgICAvKiBObyBoYW5kbGVyIG5lY2Vzc2FyeSAtLSB0aGUgc3VibXNnIGhhbmRsZXJz
IHdpbGwgcHJpbnQgdGhlIG1lc3NhZ2UKLSAgICAgICAqIGFzIGFwcHJvcHJpYXRlLiAqLwotICAg
ICAgYnJlYWs7Ci0gIH0KLQotICB1cGJfaGFuZGxlcmF0dHJfdW5pbml0KCZlbXB0eV9hdHRyKTsK
LX0KLQotdm9pZCBwcmludGVyX3NldGhhbmRsZXJzKGNvbnN0IHZvaWQgKmNsb3N1cmUsIHVwYl9o
YW5kbGVycyAqaCkgewotICBjb25zdCB1cGJfbXNnZGVmICptZCA9IHVwYl9oYW5kbGVyc19tc2dk
ZWYoaCk7Ci0gIGJvb2wgaXNfbWFwZW50cnkgPSB1cGJfbXNnZGVmX21hcGVudHJ5KG1kKTsKLSAg
dXBiX2hhbmRsZXJhdHRyIGVtcHR5X2F0dHIgPSBVUEJfSEFORExFUkFUVFJfSU5JVElBTElaRVI7
Ci0gIHVwYl9tc2dfZmllbGRfaXRlciBpOwotICBjb25zdCBib29sICpwcmVzZXJ2ZV9maWVsZG5h
bWVzX3B0ciA9IGNsb3N1cmU7Ci0gIGNvbnN0IGJvb2wgcHJlc2VydmVfZmllbGRuYW1lcyA9ICpw
cmVzZXJ2ZV9maWVsZG5hbWVzX3B0cjsKLQotICBpZiAoaXNfbWFwZW50cnkpIHsKLSAgICAvKiBt
YXBlbnRyeSBtZXNzYWdlcyBhcmUgc3VmZmljaWVudGx5IGRpZmZlcmVudCB0aGF0IHdlIGhhbmRs
ZSB0aGVtCi0gICAgICogc2VwYXJhdGVseS4gKi8KLSAgICBwcmludGVyX3NldGhhbmRsZXJzX21h
cGVudHJ5KGNsb3N1cmUsIHByZXNlcnZlX2ZpZWxkbmFtZXMsIGgpOwotICAgIHJldHVybjsKLSAg
fQotCi0gIHVwYl9oYW5kbGVyc19zZXRzdGFydG1zZyhoLCBwcmludGVyX3N0YXJ0bXNnLCAmZW1w
dHlfYXR0cik7Ci0gIHVwYl9oYW5kbGVyc19zZXRlbmRtc2coaCwgcHJpbnRlcl9lbmRtc2csICZl
bXB0eV9hdHRyKTsKLQotI2RlZmluZSBUWVBFKHR5cGUsIG5hbWUsIGN0eXBlKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjYXNlIHR5cGU6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGlmICh1cGJfZmllbGRkZWZfaXNzZXEoZikpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdXBiX2hhbmRsZXJzX3NldCMjbmFt
ZShoLCBmLCByZXBlYXRlZF8jI2N0eXBlLCAmZW1wdHlfYXR0cik7ICAgICAgICAgICAgXAotICAg
IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgdXBiX2hhbmRsZXJzX3NldCMjbmFtZShoLCBmLCBz
Y2FsYXJfIyNjdHlwZSwgJm5hbWVfYXR0cik7ICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGJyZWFrOwotCi0gIHVwYl9tc2dfZmllbGRfYmVnaW4oJmksIG1kKTsK
LSAgZm9yKDsgIXVwYl9tc2dfZmllbGRfZG9uZSgmaSk7IHVwYl9tc2dfZmllbGRfbmV4dCgmaSkp
IHsKLSAgICBjb25zdCB1cGJfZmllbGRkZWYgKmYgPSB1cGJfbXNnX2l0ZXJfZmllbGQoJmkpOwot
Ci0gICAgdXBiX2hhbmRsZXJhdHRyIG5hbWVfYXR0ciA9IFVQQl9IQU5ETEVSQVRUUl9JTklUSUFM
SVpFUjsKLSAgICB1cGJfaGFuZGxlcmF0dHJfc2V0aGFuZGxlcmRhdGEoJm5hbWVfYXR0ciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3c3RycGMoaCwgZiwgcHJlc2VydmVf
ZmllbGRuYW1lcykpOwotCi0gICAgaWYgKHVwYl9maWVsZGRlZl9pc21hcChmKSkgewotICAgICAg
dXBiX2hhbmRsZXJzX3NldHN0YXJ0c2VxKGgsIGYsIHN0YXJ0bWFwLCAmbmFtZV9hdHRyKTsKLSAg
ICAgIHVwYl9oYW5kbGVyc19zZXRlbmRzZXEoaCwgZiwgZW5kbWFwLCAmbmFtZV9hdHRyKTsKLSAg
ICB9IGVsc2UgaWYgKHVwYl9maWVsZGRlZl9pc3NlcShmKSkgewotICAgICAgdXBiX2hhbmRsZXJz
X3NldHN0YXJ0c2VxKGgsIGYsIHN0YXJ0c2VxLCAmbmFtZV9hdHRyKTsKLSAgICAgIHVwYl9oYW5k
bGVyc19zZXRlbmRzZXEoaCwgZiwgZW5kc2VxLCAmZW1wdHlfYXR0cik7Ci0gICAgfQotCi0gICAg
c3dpdGNoICh1cGJfZmllbGRkZWZfdHlwZShmKSkgewotICAgICAgVFlQRShVUEJfVFlQRV9GTE9B
VCwgIGZsb2F0LCAgZmxvYXQpOwotICAgICAgVFlQRShVUEJfVFlQRV9ET1VCTEUsIGRvdWJsZSwg
ZG91YmxlKTsKLSAgICAgIFRZUEUoVVBCX1RZUEVfQk9PTCwgICBib29sLCAgIGJvb2wpOwotICAg
ICAgVFlQRShVUEJfVFlQRV9JTlQzMiwgIGludDMyLCAgaW50MzJfdCk7Ci0gICAgICBUWVBFKFVQ
Ql9UWVBFX1VJTlQzMiwgdWludDMyLCB1aW50MzJfdCk7Ci0gICAgICBUWVBFKFVQQl9UWVBFX0lO
VDY0LCAgaW50NjQsICBpbnQ2NF90KTsKLSAgICAgIFRZUEUoVVBCX1RZUEVfVUlOVDY0LCB1aW50
NjQsIHVpbnQ2NF90KTsKLSAgICAgIGNhc2UgVVBCX1RZUEVfRU5VTTogewotICAgICAgICAvKiBG
b3Igbm93LCB3ZSBhbHdheXMgZW1pdCBzeW1ib2xpYyBuYW1lcyBmb3IgZW51bXMuIFdlIG1heSB3
YW50IGFuCi0gICAgICAgICAqIG9wdGlvbiBsYXRlciB0byBjb250cm9sIHRoaXMgYmVoYXZpb3Is
IGJ1dCB3ZSB3aWxsIHdhaXQgZm9yIGEgcmVhbAotICAgICAgICAgKiBuZWVkIGZpcnN0LiAqLwot
ICAgICAgICB1cGJfaGFuZGxlcmF0dHIgZW51bV9hdHRyID0gVVBCX0hBTkRMRVJBVFRSX0lOSVRJ
QUxJWkVSOwotICAgICAgICBzZXRfZW51bV9oZChoLCBmLCBwcmVzZXJ2ZV9maWVsZG5hbWVzLCAm
ZW51bV9hdHRyKTsKLQotICAgICAgICBpZiAodXBiX2ZpZWxkZGVmX2lzc2VxKGYpKSB7Ci0gICAg
ICAgICAgdXBiX2hhbmRsZXJzX3NldGludDMyKGgsIGYsIHJlcGVhdGVkX2VudW0sICZlbnVtX2F0
dHIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHVwYl9oYW5kbGVyc19zZXRpbnQzMiho
LCBmLCBzY2FsYXJfZW51bSwgJmVudW1fYXR0cik7Ci0gICAgICAgIH0KLQotICAgICAgICB1cGJf
aGFuZGxlcmF0dHJfdW5pbml0KCZlbnVtX2F0dHIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0K
LSAgICAgIGNhc2UgVVBCX1RZUEVfU1RSSU5HOgotICAgICAgICBpZiAodXBiX2ZpZWxkZGVmX2lz
c2VxKGYpKSB7Ci0gICAgICAgICAgdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3RyKGgsIGYsIHJlcGVh
dGVkX3N0YXJ0c3RyLCAmZW1wdHlfYXR0cik7Ci0gICAgICAgICAgdXBiX2hhbmRsZXJzX3NldHN0
cmluZyhoLCBmLCByZXBlYXRlZF9zdHIsICZlbXB0eV9hdHRyKTsKLSAgICAgICAgICB1cGJfaGFu
ZGxlcnNfc2V0ZW5kc3RyKGgsIGYsIHJlcGVhdGVkX2VuZHN0ciwgJmVtcHR5X2F0dHIpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIHVwYl9oYW5kbGVyc19zZXRzdGFydHN0cihoLCBmLCBz
Y2FsYXJfc3RhcnRzdHIsICZuYW1lX2F0dHIpOwotICAgICAgICAgIHVwYl9oYW5kbGVyc19zZXRz
dHJpbmcoaCwgZiwgc2NhbGFyX3N0ciwgJmVtcHR5X2F0dHIpOwotICAgICAgICAgIHVwYl9oYW5k
bGVyc19zZXRlbmRzdHIoaCwgZiwgc2NhbGFyX2VuZHN0ciwgJmVtcHR5X2F0dHIpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVUEJfVFlQRV9CWVRFUzoKLSAgICAgICAg
LyogWFhYOiB0aGlzIGRvZXNuJ3Qgc3VwcG9ydCBzdHJpbmdzIHRoYXQgc3BhbiBidWZmZXJzIHll
dC4gVGhlIGJhc2U2NAotICAgICAgICAgKiBlbmNvZGVyIHdpbGwgbmVlZCB0byBiZSBtYWRlIHJl
c3VtYWJsZSBmb3IgdGhpcyB0byB3b3JrIHByb3Blcmx5LiAqLwotICAgICAgICBpZiAodXBiX2Zp
ZWxkZGVmX2lzc2VxKGYpKSB7Ci0gICAgICAgICAgdXBiX2hhbmRsZXJzX3NldHN0cmluZyhoLCBm
LCByZXBlYXRlZF9ieXRlcywgJmVtcHR5X2F0dHIpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcoaCwgZiwgc2NhbGFyX2J5dGVzLCAmbmFtZV9hdHRy
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVVBCX1RZUEVfTUVTU0FH
RToKLSAgICAgICAgaWYgKHVwYl9maWVsZGRlZl9pc3NlcShmKSkgewotICAgICAgICAgIHVwYl9o
YW5kbGVyc19zZXRzdGFydHN1Ym1zZyhoLCBmLCByZXBlYXRlZF9zdGFydHN1Ym1zZywgJm5hbWVf
YXR0cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdXBiX2hhbmRsZXJzX3NldHN0YXJ0
c3VibXNnKGgsIGYsIHNjYWxhcl9zdGFydHN1Ym1zZywgJm5hbWVfYXR0cik7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgdXBiX2hhbmRsZXJhdHRyX3VuaW5pdCgmbmFt
ZV9hdHRyKTsKLSAgfQotCi0gIHVwYl9oYW5kbGVyYXR0cl91bmluaXQoJmVtcHR5X2F0dHIpOwot
I3VuZGVmIFRZUEUKLX0KLQotc3RhdGljIHZvaWQganNvbl9wcmludGVyX3Jlc2V0KHVwYl9qc29u
X3ByaW50ZXIgKnApIHsKLSAgcC0+ZGVwdGhfID0gMDsKLX0KLQotCi0vKiBQdWJsaWMgQVBJICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwotCi11cGJfanNvbl9wcmludGVyICp1cGJfanNvbl9wcmludGVyX2NyZWF0ZSh1cGJf
ZW52ICplLCBjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cGJfYnl0ZXNzaW5rICpvdXRwdXQpIHsKLSNpZm5kZWYgTkRFQlVH
Ci0gIHNpemVfdCBzaXplX2JlZm9yZSA9IHVwYl9lbnZfYnl0ZXNhbGxvY2F0ZWQoZSk7Ci0jZW5k
aWYKLQotICB1cGJfanNvbl9wcmludGVyICpwID0gdXBiX2Vudl9tYWxsb2MoZSwgc2l6ZW9mKHVw
Yl9qc29uX3ByaW50ZXIpKTsKLSAgaWYgKCFwKSByZXR1cm4gTlVMTDsKLQotICBwLT5vdXRwdXRf
ID0gb3V0cHV0OwotICBqc29uX3ByaW50ZXJfcmVzZXQocCk7Ci0gIHVwYl9zaW5rX3Jlc2V0KCZw
LT5pbnB1dF8sIGgsIHApOwotCi0gIC8qIElmIHRoaXMgZmFpbHMsIGluY3JlYXNlIHRoZSB2YWx1
ZSBpbiBwcmludGVyLmguICovCi0gIGFzc2VydCh1cGJfZW52X2J5dGVzYWxsb2NhdGVkKGUpIC0g
c2l6ZV9iZWZvcmUgPD0gVVBCX0pTT05fUFJJTlRFUl9TSVpFKTsKLSAgcmV0dXJuIHA7Ci19Ci0K
LXVwYl9zaW5rICp1cGJfanNvbl9wcmludGVyX2lucHV0KHVwYl9qc29uX3ByaW50ZXIgKnApIHsK
LSAgcmV0dXJuICZwLT5pbnB1dF87Ci19Ci0KLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBiX2pzb25f
cHJpbnRlcl9uZXdoYW5kbGVycyhjb25zdCB1cGJfbXNnZGVmICptZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXNlcnZlX2ZpZWxkbmFt
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdm9pZCAqb3duZXIpIHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyc19uZXdmcm96ZW4oCi0gICAg
ICBtZCwgb3duZXIsIHByaW50ZXJfc2V0aGFuZGxlcnMsICZwcmVzZXJ2ZV9maWVsZG5hbWVzKTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvcnVieS9leHQvZ29vZ2xlL3Byb3RvYnVmX2MvdXBiLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvZXh0
L2dvb2dsZS9wcm90b2J1Zl9jL3VwYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
ZmFmNzRlNTAyNGQwOTgyODI2NWJjODk2ZmU3OWVkMDkwMmU2MDQ0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9leHQvZ29vZ2xlL3Byb3RvYnVmX2Mv
dXBiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NTY5ICswLDAgQEAKLS8vIEFtYWxnYW1hdGVkIHNv
dXJjZSBmaWxlCi0vKgotKiogRGVmcyBhcmUgdXBiJ3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24g
b2YgdGhlIGNvbnN0cnVjdHMgdGhhdCBjYW4gYXBwZWFyCi0qKiBpbiBhIC5wcm90byBmaWxlOgot
KioKLSoqIC0gdXBiOjpNZXNzYWdlRGVmICh1cGJfbXNnZGVmKTogZGVzY3JpYmVzIGEgIm1lc3Nh
Z2UiIGNvbnN0cnVjdC4KLSoqIC0gdXBiOjpGaWVsZERlZiAodXBiX2ZpZWxkZGVmKTogZGVzY3Jp
YmVzIGEgbWVzc2FnZSBmaWVsZC4KLSoqIC0gdXBiOjpGaWxlRGVmICh1cGJfZmlsZWRlZik6IGRl
c2NyaWJlcyBhIC5wcm90byBmaWxlIGFuZCBpdHMgZGVmcy4KLSoqIC0gdXBiOjpFbnVtRGVmICh1
cGJfZW51bWRlZik6IGRlc2NyaWJlcyBhbiBlbnVtLgotKiogLSB1cGI6Ok9uZW9mRGVmICh1cGJf
b25lb2ZkZWYpOiBkZXNjcmliZXMgYSBvbmVvZi4KLSoqIC0gdXBiOjpEZWYgKHVwYl9kZWYpOiBi
YXNlIGNsYXNzIG9mIGFsbCB0aGUgb3RoZXJzLgotKioKLSoqIFRPRE86IGRlZmluaXRpb25zIG9m
IHNlcnZpY2VzLgotKioKLSoqIExpa2UgdXBiX3JlZmNvdW50ZWQgb2JqZWN0cywgZGVmcyBhcmUg
bXV0YWJsZSBvbmx5IHVudGlsIGZyb3plbiwgYW5kIGFyZQotKiogb25seSB0aHJlYWQtc2FmZSBv
bmNlIGZyb3plbi4KLSoqCi0qKiBUaGlzIGlzIGEgbWl4ZWQgQy9DKysgaW50ZXJmYWNlIHRoYXQg
b2ZmZXJzIGEgZnVsbCBBUEkgdG8gYm90aCBsYW5ndWFnZXMuCi0qKiBTZWUgdGhlIHRvcC1sZXZl
bCBSRUFETUUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0qLwotCi0jaWZuZGVmIFVQQl9ERUZfSF8K
LSNkZWZpbmUgVVBCX0RFRl9IXwotCi0vKgotKiogdXBiOjpSZWZDb3VudGVkICh1cGJfcmVmY291
bnRlZCkKLSoqCi0qKiBBIHJlZmNvdW50aW5nIHNjaGVtZSB0aGF0IHN1cHBvcnRzIGNpcmN1bGFy
IHJlZnMuICBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieQotKiogcGFydGl0aW9uaW5nIHRoZSBzZXQg
b2Ygb2JqZWN0cyBpbnRvIGdyb3VwcyBzdWNoIHRoYXQgbm8gY3ljbGUgc3BhbnMgZ3JvdXBzOwot
Kiogd2UgY2FuIHRoZW4gcmVmZXJlbmNlLWNvdW50IHRoZSBncm91cCBhcyBhIHdob2xlIGFuZCBp
Z25vcmUgcmVmcyB3aXRoaW4gdGhlCi0qKiBncm91cC4gIFdoZW4gb2JqZWN0cyBhcmUgbXV0YWJs
ZSwgdGhlc2UgZ3JvdXBzIGFyZSBjb21wdXRlZCB2ZXJ5Ci0qKiBjb25zZXJ2YXRpdmVseTsgd2Ug
Z3JvdXAgYW55IG9iamVjdHMgdGhhdCBoYXZlIGV2ZXIgaGFkIGEgbGluayBiZXR3ZWVuIHRoZW0u
Ci0qKiBXaGVuIG9iamVjdHMgYXJlIGZyb3plbiwgd2UgY29tcHV0ZSBzdHJvbmdseS1jb25uZWN0
ZWQgY29tcG9uZW50cyB3aGljaAotKiogYWxsb3dzIHVzIHRvIGJlIHByZWNpc2UgYW5kIG9ubHkg
Z3JvdXAgb2JqZWN0cyB0aGF0IGFyZSBhY3R1YWxseSBjeWNsaWMuCi0qKgotKiogVGhpcyBpcyBh
IG1peGVkIEMvQysrIGludGVyZmFjZSB0aGF0IG9mZmVycyBhIGZ1bGwgQVBJIHRvIGJvdGggbGFu
Z3VhZ2VzLgotKiogU2VlIHRoZSB0b3AtbGV2ZWwgUkVBRE1FIGZvciBtb3JlIGluZm9ybWF0aW9u
LgotKi8KLQotI2lmbmRlZiBVUEJfUkVGQ09VTlRFRF9IXwotI2RlZmluZSBVUEJfUkVGQ09VTlRF
RF9IXwotCi0vKgotKiogdXBiX3RhYmxlCi0qKgotKiogVGhpcyBoZWFkZXIgaXMgSU5URVJOQUwt
T05MWSEgIEl0cyBpbnRlcmZhY2VzIGFyZSBub3QgcHVibGljIG9yIHN0YWJsZSEKLSoqIFRoaXMg
ZmlsZSBkZWZpbmVzIHZlcnkgZmFzdCBpbnQtPnVwYl92YWx1ZSAoaW50dGFibGUpIGFuZCBzdHJp
bmctPnVwYl92YWx1ZQotKiogKHN0cnRhYmxlKSBoYXNoIHRhYmxlcy4KLSoqCi0qKiBUaGUgdGFi
bGUgdXNlcyBjaGFpbmVkIHNjYXR0ZXIgd2l0aCBCcmVudCdzIHZhcmlhdGlvbiAoaW5zcGlyZWQg
YnkgdGhlIEx1YQotKiogaW1wbGVtZW50YXRpb24gb2YgaGFzaCB0YWJsZXMpLiAgVGhlIGhhc2gg
ZnVuY3Rpb24gZm9yIHN0cmluZ3MgaXMgQXVzdGluCi0qKiBBcHBsZWJ5J3MgIk11cm11ckhhc2gu
IgotKioKLSoqIFRoZSBpbnR0YWJsZSB1c2VzIHVpbnRwdHJfdCBhcyBpdHMga2V5LCB3aGljaCBn
dWFyYW50ZWVzIGl0IGNhbiBiZSB1c2VkIHRvCi0qKiBzdG9yZSBwb2ludGVycyBvciBpbnRlZ2Vy
cyBvZiBhdCBsZWFzdCAzMiBiaXRzICh1cGIgaXNuJ3QgcmVhbGx5IHVzZWZ1bCBvbgotKiogc3lz
dGVtcyB3aGVyZSBzaXplb2Yodm9pZCopIDwgNCkuCi0qKgotKiogVGhlIHRhYmxlIG11c3QgYmUg
aG9tb2dlbm91cyAoYWxsIHZhbHVlcyBvZiB0aGUgc2FtZSB0eXBlKS4gIEluIGRlYnVnCi0qKiBt
b2RlLCB3ZSBjaGVjayB0aGlzIG9uIGluc2VydCBhbmQgbG9va3VwLgotKi8KLQotI2lmbmRlZiBV
UEJfVEFCTEVfSF8KLSNkZWZpbmUgVVBCX1RBQkxFX0hfCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4K
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLS8qCi0qKiBUaGlzIGZp
bGUgY29udGFpbnMgc2hhcmVkIGRlZmluaXRpb25zIHRoYXQgYXJlIHdpZGVseSB1c2VkIGFjcm9z
cyB1cGIuCi0qKgotKiogVGhpcyBpcyBhIG1peGVkIEMvQysrIGludGVyZmFjZSB0aGF0IG9mZmVy
cyBhIGZ1bGwgQVBJIHRvIGJvdGggbGFuZ3VhZ2VzLgotKiogU2VlIHRoZSB0b3AtbGV2ZWwgUkVB
RE1FIGZvciBtb3JlIGluZm9ybWF0aW9uLgotKi8KLQotI2lmbmRlZiBVUEJfSF8KLSNkZWZpbmUg
VVBCX0hfCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNs
dWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1
cwotbmFtZXNwYWNlIHVwYiB7Ci1jbGFzcyBBbGxvY2F0b3I7Ci1jbGFzcyBBcmVuYTsKLWNsYXNz
IEVudmlyb25tZW50OwotY2xhc3MgRXJyb3JTcGFjZTsKLWNsYXNzIFN0YXR1czsKLXRlbXBsYXRl
IDxpbnQgTj4gY2xhc3MgSW5saW5lZEFyZW5hOwotdGVtcGxhdGUgPGludCBOPiBjbGFzcyBJbmxp
bmVkRW52aXJvbm1lbnQ7Ci19Ci0jZW5kaWYKLQotLyogVVBCX0lOTElORTogaW5saW5lIGlmIHBv
c3NpYmxlLCBlbWl0IHN0YW5kYWxvbmUgY29kZSBpZiByZXF1aXJlZC4gKi8KLSNpZmRlZiBfX2Nw
bHVzcGx1cwotI2RlZmluZSBVUEJfSU5MSU5FIGlubGluZQotI2VsaWYgZGVmaW5lZCAoX19HTlVD
X18pCi0jZGVmaW5lIFVQQl9JTkxJTkUgc3RhdGljIF9faW5saW5lX18KLSNlbHNlCi0jZGVmaW5l
IFVQQl9JTkxJTkUgc3RhdGljCi0jZW5kaWYKLQotLyogRGVmaW5lIFVQQl9CSUdfRU5ESUFOIG1h
bnVhbGx5IGlmIHlvdSdyZSBvbiBiaWcgZW5kaWFuIGFuZCB5b3VyIGNvbXBpbGVyCi0gKiBkb2Vz
bid0IHByb3ZpZGUgdGhlc2UgcHJlcHJvY2Vzc29yIHN5bWJvbHMuICovCi0jaWYgZGVmaW5lZChf
X0JZVEVfT1JERVJfXykgJiYgKF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfQklHX0VORElBTl9f
KQotI2RlZmluZSBVUEJfQklHX0VORElBTgotI2VuZGlmCi0KLS8qIE1hY3JvcyBmb3IgZnVuY3Rp
b24gYXR0cmlidXRlcyBvbiBjb21waWxlcnMgdGhhdCBzdXBwb3J0IHRoZW0uICovCi0jaWZkZWYg
X19HTlVDX18KLSNkZWZpbmUgVVBCX0ZPUkNFSU5MSU5FIF9faW5saW5lX18gX19hdHRyaWJ1dGVf
XygoYWx3YXlzX2lubGluZSkpCi0jZGVmaW5lIFVQQl9OT0lOTElORSBfX2F0dHJpYnV0ZV9fKChu
b2lubGluZSkpCi0jZGVmaW5lIFVQQl9OT1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJu
X18pKQotI2Vsc2UgIC8qICFkZWZpbmVkKF9fR05VQ19fKSAqLwotI2RlZmluZSBVUEJfRk9SQ0VJ
TkxJTkUKLSNkZWZpbmUgVVBCX05PSU5MSU5FCi0jZGVmaW5lIFVQQl9OT1JFVFVSTgotI2VuZGlm
Ci0KLS8qIEEgZmV3IGhhY2t5IHdvcmthcm91bmRzIGZvciBmdW5jdGlvbnMgbm90IGluIEM4OS4K
LSAqIEZvciBpbnRlcm5hbCB1c2Ugb25seSEKLSAqIFRPRE8oaGFiZXJtYW4pOiBmaXggdGhlc2Ug
YnkgaW5jbHVkaW5nIG91ciBvd24gaW1wbGVtZW50YXRpb25zLCBvciBmaW5kaW5nCi0gKiBhbm90
aGVyIHdvcmthcm91bmQuCi0gKi8KLSNpZmRlZiBfX0dOVUNfXwotI2RlZmluZSBfdXBiX3NucHJp
bnRmIF9fYnVpbHRpbl9zbnByaW50ZgotI2RlZmluZSBfdXBiX3ZzbnByaW50ZiBfX2J1aWx0aW5f
dnNucHJpbnRmCi0jZGVmaW5lIF91cGJfdmFfY29weShhLCBiKSBfX3ZhX2NvcHkoYSwgYikKLSNl
bGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotLyogQzk5IHZlcnNpb25zLiAqLwotI2Rl
ZmluZSBfdXBiX3NucHJpbnRmIHNucHJpbnRmCi0jZGVmaW5lIF91cGJfdnNucHJpbnRmIHZzbnBy
aW50ZgotI2RlZmluZSBfdXBiX3ZhX2NvcHkoYSwgYikgdmFfY29weShhLCBiKQotI2Vsc2UKLSNl
cnJvciBOZWVkIGltcGxlbWVudGF0aW9ucyBvZiBbdl1zbnByaW50ZiBhbmQgdmFfY29weQotI2Vu
ZGlmCi0KLQotI2lmICgoZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgX19jcGx1c3BsdXMgPj0gMjAx
MTAzTCkgfHwgXAotICAgICAgZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXykpICYm
ICFkZWZpbmVkKFVQQl9OT19DWFgxMSkKLSNkZWZpbmUgVVBCX0NYWDExCi0jZW5kaWYKLQotLyog
VVBCX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTigpCi0gKiBVUEJfRElTQUxMT1dfUE9EX09QUygp
Ci0gKgotICogRGVjbGFyZSB0aGVzZSBpbiB0aGUgInByaXZhdGUiIHNlY3Rpb24gb2YgYSBDKysg
Y2xhc3MgdG8gZm9yYmlkIGNvcHkvYXNzaWduCi0gKiBvciBhbGwgUE9EIG9wcyAoY29uc3RydWN0
LCBkZXN0cnVjdCwgY29weSwgYXNzaWduKSBvbiB0aGF0IGNsYXNzLiAqLwotI2lmZGVmIFVQQl9D
WFgxMQotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotI2RlZmluZSBVUEJfRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKGNsYXNzX25hbWUpIFwKLSAgY2xhc3NfbmFtZShjb25zdCBjbGFzc19uYW1lJikg
PSBkZWxldGU7IFwKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgY2xhc3NfbmFtZSYpID0gZGVsZXRl
OwotI2RlZmluZSBVUEJfRElTQUxMT1dfUE9EX09QUyhjbGFzc19uYW1lLCBmdWxsX2NsYXNzX25h
bWUpIFwKLSAgY2xhc3NfbmFtZSgpID0gZGVsZXRlOyBcCi0gIH5jbGFzc19uYW1lKCkgPSBkZWxl
dGU7IFwKLSAgVVBCX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihjbGFzc19uYW1lKQotI2RlZmlu
ZSBVUEJfQVNTRVJUX1NURExBWU9VVCh0eXBlKSBcCi0gIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
dGFuZGFyZF9sYXlvdXQ8dHlwZT46OnZhbHVlLCBcCi0gICAgICAgICAgICAgICAgI3R5cGUgIiBt
dXN0IGJlIHN0YW5kYXJkIGxheW91dCIpOwotI2RlZmluZSBVUEJfRklOQUwgZmluYWwKLSNlbHNl
ICAvKiAhZGVmaW5lZChVUEJfQ1hYMTEpICovCi0jZGVmaW5lIFVQQl9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oY2xhc3NfbmFtZSkgXAotICBjbGFzc19uYW1lKGNvbnN0IGNsYXNzX25hbWUmKTsg
XAotICB2b2lkIG9wZXJhdG9yPShjb25zdCBjbGFzc19uYW1lJik7Ci0jZGVmaW5lIFVQQl9ESVNB
TExPV19QT0RfT1BTKGNsYXNzX25hbWUsIGZ1bGxfY2xhc3NfbmFtZSkgXAotICBjbGFzc19uYW1l
KCk7IFwKLSAgfmNsYXNzX25hbWUoKTsgXAotICBVUEJfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KGNsYXNzX25hbWUpCi0jZGVmaW5lIFVQQl9BU1NFUlRfU1RETEFZT1VUKHR5cGUpCi0jZGVmaW5l
IFVQQl9GSU5BTAotI2VuZGlmCi0KLS8qIFVQQl9ERUNMQVJFX1RZUEUoKQotICogVVBCX0RFQ0xB
UkVfREVSSVZFRF9UWVBFKCkKLSAqIFVQQl9ERUNMQVJFX0RFUklWRURfVFlQRTIoKQotICoKLSAq
IE1hY3JvcyBmb3IgZGVjbGFyaW5nIEMgYW5kIEMrKyB0eXBlcyBib3RoLCBpbmNsdWRpbmcgaW5o
ZXJpdGFuY2UuCi0gKiBUaGUgaW5oZXJpdGFuY2UgZG9lc24ndCB1c2UgcmVhbCBDKysgaW5oZXJp
dGFuY2UsIHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIEMuCi0gKgotICogVGhlc2UgbWFjcm9zIGFs
c28gcHJvdmlkZSB1cGNhc3RzOgotICogIC0gaW4gQzogdHlwZXMtc3BlY2lmaWMgZnVuY3Rpb25z
IChpZS4gdXBiX2Zvb191cGNhc3QoZm9vKSkKLSAqICAtIGluIEMrKzogdXBiOjp1cGNhc3QoZm9v
KSBhbG9uZyB3aXRoIGltcGxpY2l0IGNvbnZlcnNpb25zCi0gKgotICogRG93bmNhc3RzIGFyZSBu
b3QgcHJvdmlkZWQsIGJ1dCB1cGIvZGVmLmggZGVmaW5lcyBkb3duY2FzdHMgZm9yIHVwYjo6RGVm
LiAqLwotCi0jZGVmaW5lIFVQQl9DX1VQQ0FTVFModHksIGJhc2UpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9JTkxJTkUgYmFzZSAqdHkgIyMgX3VwY2FzdF9t
dXRhYmxlKHR5ICpwKSB7IHJldHVybiAoYmFzZSopcDsgfSBcCi0gIFVQQl9JTkxJTkUgY29uc3Qg
YmFzZSAqdHkgIyMgX3VwY2FzdChjb25zdCB0eSAqcCkgeyByZXR1cm4gKGNvbnN0IGJhc2UqKXA7
IH0KLQotI2RlZmluZSBVUEJfQ19VUENBU1RTMih0eSwgYmFzZSwgYmFzZTIpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBVUEJfQ19VUENBU1RTKHR5LCBiYXNlKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBVUEJfSU5MSU5FIGJh
c2UyICp0eSAjIyBfdXBjYXN0Ml9tdXRhYmxlKHR5ICpwKSB7IHJldHVybiAoYmFzZTIqKXA7IH0g
XAotICBVUEJfSU5MSU5FIGNvbnN0IGJhc2UyICp0eSAjIyBfdXBjYXN0Mihjb25zdCB0eSAqcCkg
eyByZXR1cm4gKGNvbnN0IGJhc2UyKilwOyB9Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0jZGVm
aW5lIFVQQl9CRUdJTl9FWFRFUk5fQyBleHRlcm4gIkMiIHsKLSNkZWZpbmUgVVBCX0VORF9FWFRF
Uk5fQyB9Ci0jZGVmaW5lIFVQQl9QUklWQVRFX0ZPUl9DUFAgcHJpdmF0ZToKLSNkZWZpbmUgVVBC
X0RFQ0xBUkVfVFlQRShjcHBuYW1lLCBjbmFtZSkgdHlwZWRlZiBjcHBuYW1lIGNuYW1lOwotCi0j
ZGVmaW5lIFVQQl9ERUNMQVJFX0RFUklWRURfVFlQRShjcHBuYW1lLCBjcHBiYXNlLCBjbmFtZSwg
Y2Jhc2UpICBcCi0gIFVQQl9ERUNMQVJFX1RZUEUoY3BwbmFtZSwgY25hbWUpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9DX1VQQ0FTVFMoY25hbWUsIGNiYXNlKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG5hbWVzcGFjZSB1cGIgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRl
IDw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGNsYXNzIFBvaW50ZXI8Y3BwbmFtZT4gOiBwdWJsaWMgUG9pbnRlckJhc2U8Y3BwbmFtZSwg
Y3BwYmFzZT4geyBcCi0gICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZXhwbGljaXQgUG9pbnRlcihjcHBuYW1lKiBw
dHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIDogUG9pbnRlckJh
c2U8Y3BwbmFtZSwgY3BwYmFzZT4ocHRyKSB7fSAgICAgICAgICAgICAgICAgICBcCi0gIH07ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIHRlbXBsYXRlIDw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGNsYXNzIFBvaW50ZXI8Y29uc3QgY3BwbmFtZT4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICA6IHB1YmxpYyBQb2ludGVyQmFzZTxj
b25zdCBjcHBuYW1lLCBjb25zdCBjcHBiYXNlPiB7ICAgICAgICBcCi0gICBwdWJsaWM6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ZXhwbGljaXQgUG9pbnRlcihjb25zdCBjcHBuYW1lKiBwdHIpICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIDogUG9pbnRlckJhc2U8Y29uc3QgY3BwbmFtZSwgY29uc3QgY3BwYmFz
ZT4ocHRyKSB7fSAgICAgICBcCi0gIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBVUEJfREVDTEFS
RV9ERVJJVkVEX1RZUEUyKGNwcG5hbWUsIGNwcGJhc2UsIGNwcGJhc2UyLCBjbmFtZSwgY2Jhc2Us
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Jhc2UyKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVVBCX0RFQ0xBUkVfVFlQRShjcHBuYW1lLCBj
bmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBVUEJf
Q19VUENBU1RTMihjbmFtZSwgY2Jhc2UsIGNiYXNlMikgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIG5hbWVzcGFjZSB1cGIgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPD4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBjbGFzcyBQb2ludGVyPGNwcG5hbWU+IDogcHVibGljIFBvaW50ZXJCYXNlMjxjcHBu
YW1lLCBjcHBiYXNlLCBjcHBiYXNlMj4geyBcCi0gICBwdWJsaWM6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBl
eHBsaWNpdCBQb2ludGVyKGNwcG5hbWUqIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICA6IFBvaW50ZXJCYXNlMjxjcHBuYW1lLCBjcHBiYXNl
LCBjcHBiYXNlMj4ocHRyKSB7fSAgICAgICAgICAgICAgICAgICBcCi0gIH07ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgdGVtcGxhdGUgPD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjbGFzcyBQb2ludGVyPGNvbnN0IGNwcG5h
bWU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICA6IHB1YmxpYyBQb2ludGVyQmFzZTI8Y29uc3QgY3BwbmFtZSwgY29uc3QgY3BwYmFzZSwgY29u
c3QgY3BwYmFzZTI+IHsgIFwKLSAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGV4cGxpY2l0IFBv
aW50ZXIoY29uc3QgY3BwbmFtZSogcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIDogUG9pbnRlckJhc2UyPGNvbnN0IGNwcG5hbWUsIGNvbnN0IGNwcGJh
c2UsIGNvbnN0IGNwcGJhc2UyPihwdHIpIHt9IFwKLSAgfTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9
Ci0KLSNlbHNlICAvKiAhZGVmaW5lZChfX2NwbHVzcGx1cykgKi8KLQotI2RlZmluZSBVUEJfQkVH
SU5fRVhURVJOX0MKLSNkZWZpbmUgVVBCX0VORF9FWFRFUk5fQwotI2RlZmluZSBVUEJfUFJJVkFU
RV9GT1JfQ1BQCi0jZGVmaW5lIFVQQl9ERUNMQVJFX1RZUEUoY3BwbmFtZSwgY25hbWUpIFwKLSAg
c3RydWN0IGNuYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0eXBlZGVmIHN0cnVj
dCBjbmFtZSBjbmFtZTsKLSNkZWZpbmUgVVBCX0RFQ0xBUkVfREVSSVZFRF9UWVBFKGNwcG5hbWUs
IGNwcGJhc2UsIGNuYW1lLCBjYmFzZSkgXAotICBVUEJfREVDTEFSRV9UWVBFKGNwcG5hbWUsIGNu
YW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9DX1VQQ0FTVFMoY25h
bWUsIGNiYXNlKQotI2RlZmluZSBVUEJfREVDTEFSRV9ERVJJVkVEX1RZUEUyKGNwcG5hbWUsIGNw
cGJhc2UsIGNwcGJhc2UyLCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y25hbWUsIGNiYXNlLCBjYmFzZTIpICAgICAgICAgIFwKLSAgVVBCX0RFQ0xBUkVfVFlQRShjcHBu
YW1lLCBjbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBVUEJfQ19VUENB
U1RTMihjbmFtZSwgY2Jhc2UsIGNiYXNlMikKLQotI2VuZGlmICAvKiBkZWZpbmVkKF9fY3BsdXNw
bHVzKSAqLwotCi0jZGVmaW5lIFVQQl9NQVgoeCwgeSkgKCh4KSA+ICh5KSA/ICh4KSA6ICh5KSkK
LSNkZWZpbmUgVVBCX01JTih4LCB5KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQotCi0jZGVmaW5l
IFVQQl9VTlVTRUQodmFyKSAodm9pZCl2YXIKLQotLyogRm9yIGFzc2VydGluZyBzb21ldGhpbmcg
YWJvdXQgYSB2YXJpYWJsZSB3aGVuIHRoZSB2YXJpYWJsZSBpcyBub3QgdXNlZCBmb3IKLSAqIGFu
eXRoaW5nIGVsc2UuICBUaGlzIHByZXZlbnRzICJ1bnVzZWQgdmFyaWFibGUiIHdhcm5pbmdzIHdo
ZW4gY29tcGlsaW5nIGluCi0gKiBkZWJ1ZyBtb2RlLiAqLwotI2RlZmluZSBVUEJfQVNTRVJUX1ZB
Uih2YXIsIHByZWRpY2F0ZSkgVVBCX1VOVVNFRCh2YXIpOyBhc3NlcnQocHJlZGljYXRlKQotCi0v
KiBHZW5lcmljIGZ1bmN0aW9uIHR5cGUuICovCi10eXBlZGVmIHZvaWQgdXBiX2Z1bmMoKTsKLQot
Ci0vKiBDKysgQ2FzdHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotbmFtZXNw
YWNlIHVwYiB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQb2ludGVyOwotCi0vKiBDYXN0
cyB0byBhIHN1YmNsYXNzLiAgVGhlIGNhbGxlciBtdXN0IGtub3cgdGhhdCBjYXN0IGlzIGNvcnJl
Y3Q7IGFuCi0gKiBpbmNvcnJlY3QgY2FzdCB3aWxsIHRocm93IGFuIGFzc2VydGlvbiBmYWlsdXJl
IGluIGRlYnVnIG1vZGUuCi0gKgotICogRXhhbXBsZToKLSAqICAgdXBiOjpEZWYqIGRlZiA9IEdl
dERlZigpOwotICogICAvLyBBc3NlcnQtZmFpbHMgaWYgdGhpcyB3YXMgbm90IGFjdHVhbGx5IGEg
TWVzc2FnZURlZi4KLSAqICAgdXBiOjpNZXNzZ2VEZWYqIG1kID0gdXBiOjpkb3duX2Nhc3Q8dXBi
OjpNZXNzYWdlRGVmPihkZWYpOwotICoKLSAqIE5vdGUgdGhhdCBkb3duY2FzdHMgYXJlIG9ubHkg
ZGVmaW5lZCBmb3Igc29tZSB0eXBlcyAoYXQgdGhlIG1vbWVudCB5b3UgY2FuCi0gKiBvbmx5IGRv
d25jYXN0IGZyb20gYSB1cGI6OkRlZiB0byBhIHNwZWNpZmljIERlZiB0eXBlKS4gKi8KLXRlbXBs
YXRlPGNsYXNzIFRvLCBjbGFzcyBGcm9tPiBUbyBkb3duX2Nhc3QoRnJvbSogZik7Ci0KLS8qIENh
c3RzIHRvIGEgc3ViY2xhc3MuICBJZiB0aGUgY2xhc3MgZG9lcyBub3QgYWN0dWFsbHkgbWF0Y2gg
dGhlIGdpdmVuIFRvIHR5cGUsCi0gKiByZXR1cm5zIE5VTEwuCi0gKgotICogRXhhbXBsZToKLSAq
ICAgdXBiOjpEZWYqIGRlZiA9IEdldERlZigpOwotICogICAvLyBtZCB3aWxsIGJlIE5VTEwgaWYg
dGhpcyB3YXMgbm90IGFjdHVhbGx5IGEgTWVzc2FnZURlZi4KLSAqICAgdXBiOjpNZXNzZ2VEZWYq
IG1kID0gdXBiOjpkb3duX2Nhc3Q8dXBiOjpNZXNzYWdlRGVmPihkZWYpOwotICoKLSAqIE5vdGUg
dGhhdCBkeW5hbWljIGNhc3RzIGFyZSBvbmx5IGRlZmluZWQgZm9yIHNvbWUgdHlwZXMgKGF0IHRo
ZSBtb21lbnQgeW91Ci0gKiBjYW4gb25seSBkb3duY2FzdCBmcm9tIGEgdXBiOjpEZWYgdG8gYSBz
cGVjaWZpYyBEZWYgdHlwZSkuLiAqLwotdGVtcGxhdGU8Y2xhc3MgVG8sIGNsYXNzIEZyb20+IFRv
IGR5bl9jYXN0KEZyb20qIGYpOwotCi0vKiBDYXN0cyB0byBhbnkgYmFzZSBjbGFzcywgb3IgdGhl
IHR5cGUgaXRzZWxmIChpZS4gY2FuIGJlIGEgbm8tb3ApLgotICoKLSAqIEV4YW1wbGU6Ci0gKiAg
IHVwYjo6TWVzc2FnZURlZiogbWQgPSBHZXREZWYoKTsKLSAqICAgLy8gVGhpcyB3aWxsIGZhaWwg
dG8gY29tcGlsZSBpZiB0aGlzIHdhc24ndCBhY3R1YWxseSBhIGJhc2UgY2xhc3MuCi0gKiAgIHVw
Yjo6RGVmKiBkZWYgPSB1cGI6OnVwY2FzdChtZCk7Ci0gKi8KLXRlbXBsYXRlIDxjbGFzcyBUPiBp
bmxpbmUgUG9pbnRlcjxUPiB1cGNhc3QoVCAqZikgeyByZXR1cm4gUG9pbnRlcjxUPihmKTsgfQot
Ci0vKiBBdHRlbXB0IHVwY2FzdCB0byBzcGVjaWZpYyBiYXNlIGNsYXNzLgotICoKLSAqIEV4YW1w
bGU6Ci0gKiAgIHVwYjo6TWVzc2FnZURlZiogbWQgPSBHZXREZWYoKTsKLSAqICAgdXBiOjp1cGNh
c3RfdG88dXBiOjpEZWY+KG1kKS0+TWV0aG9kT25EZWYoKTsKLSAqLwotdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIEY+IGlubGluZSBUKiB1cGNhc3RfdG8oRiAqZikgewotICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VCo+KHVwY2FzdChmKSk7Ci19Ci0KLS8qIFBvaW50ZXJCYXNlPFQ+OiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgdXBiOjp1cGNhc3QoKS4KLSAqIEl0IGlzIGltcGxpY2l0bHkgY29udmVy
dGFibGUgdG8gcG9pbnRlcnMgdG8gdGhlIEJhc2UgY2xhc3MoZXMpLgotICovCi10ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MgQmFzZT4KLWNsYXNzIFBvaW50ZXJCYXNlIHsKLSBwdWJsaWM6Ci0gIGV4
cGxpY2l0IFBvaW50ZXJCYXNlKFQqIHB0cikgOiBwdHJfKHB0cikge30KLSAgb3BlcmF0b3IgVCoo
KSB7IHJldHVybiBwdHJfOyB9Ci0gIG9wZXJhdG9yIEJhc2UqKCkgeyByZXR1cm4gKEJhc2UqKXB0
cl87IH0KLQotIHByaXZhdGU6Ci0gIFQqIHB0cl87Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgQmFzZSwgY2xhc3MgQmFzZTI+Ci1jbGFzcyBQb2ludGVyQmFzZTIgOiBwdWJsaWMgUG9p
bnRlckJhc2U8VCwgQmFzZT4gewotIHB1YmxpYzoKLSAgZXhwbGljaXQgUG9pbnRlckJhc2UyKFQq
IHB0cikgOiBQb2ludGVyQmFzZTxULCBCYXNlPihwdHIpIHt9Ci0gIG9wZXJhdG9yIEJhc2UyKigp
IHsgcmV0dXJuIFBvaW50ZXI8QmFzZT4oKnRoaXMpOyB9Ci19OwotCi19Ci0KLSNlbmRpZgotCi0K
LS8qIHVwYjo6RXJyb3JTcGFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEEgdXBiOjpFcnJvclNwYWNlIHJlcHJlc2Vu
dHMgc29tZSBkb21haW4gb2YgcG9zc2libGUgZXJyb3IgdmFsdWVzLiAgVGhpcyBsZXRzCi0gKiB1
cGI6OlN0YXR1cyBhdHRhY2ggc3BlY2lmaWMgZXJyb3IgY29kZXMgdG8gb3BlcmF0aW9ucywgbGlr
ZSBQT1NJWC9DIGVycm5vLAotICogV2luMzIgZXJyb3IgY29kZXMsIGV0Yy4gIENsaWVudHMgd2hv
IHdhbnQgdG8ga25vdyB0aGUgdmVyeSBzcGVjaWZpYyBlcnJvcgotICogY29kZSBjYW4gY2hlY2sg
dGhlIGVycm9yIHNwYWNlIGFuZCB0aGVuIGtub3cgdGhlIHR5cGUgb2YgdGhlIGludGVnZXIgY29k
ZS4KLSAqCi0gKiBOT1RFOiB1cGI6OkVycm9yU3BhY2UgaXMgY3VycmVudGx5IG5vdCB1c2VkIGFu
ZCBzaG91bGQgYmUgY29uc2lkZXJlZAotICogZXhwZXJpbWVudGFsLiAgSXQgaXMgaW1wb3J0YW50
IHByaW1hcmlseSBpbiBjYXNlcyB3aGVyZSB1cGIgaXMgcGVyZm9ybWluZwotICogSS9PLCBidXQg
dXBiIGRvZXNuJ3QgY3VycmVudGx5IGhhdmUgYW55IGNvbXBvbmVudHMgdGhhdCBkbyB0aGlzLiAq
LwotCi1VUEJfREVDTEFSRV9UWVBFKHVwYjo6RXJyb3JTcGFjZSwgdXBiX2Vycm9yc3BhY2UpCi0K
LSNpZmRlZiBfX2NwbHVzcGx1cwotY2xhc3MgdXBiOjpFcnJvclNwYWNlIHsKLSNlbHNlCi1zdHJ1
Y3QgdXBiX2Vycm9yc3BhY2UgewotI2VuZGlmCi0gIGNvbnN0IGNoYXIgKm5hbWU7Ci19OwotCi0K
LS8qIHVwYjo6U3RhdHVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHVwYjo6U3RhdHVzIHJlcHJlc2VudHMgYSBz
dWNjZXNzIG9yIGZhaWx1cmUgc3RhdHVzIGFuZCBlcnJvciBtZXNzYWdlLgotICogSXQgb3ducyBu
byByZXNvdXJjZXMgYW5kIGFsbG9jYXRlcyBubyBtZW1vcnksIHNvIGl0IHNob3VsZCB3b3JrCi0g
KiBldmVuIGluIE9PTSBzaXR1YXRpb25zLiAqLwotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6OlN0YXR1
cywgdXBiX3N0YXR1cykKLQotLyogVGhlIG1heGltdW0gbGVuZ3RoIG9mIGFuIGVycm9yIG1lc3Nh
Z2UgYmVmb3JlIGl0IHdpbGwgZ2V0IHRydW5jYXRlZC4gKi8KLSNkZWZpbmUgVVBCX1NUQVRVU19N
QVhfTUVTU0FHRSAxMjgKLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLWNvbnN0IGNoYXIgKnVwYl9z
dGF0dXNfZXJybXNnKGNvbnN0IHVwYl9zdGF0dXMgKnN0YXR1cyk7Ci1ib29sIHVwYl9vayhjb25z
dCB1cGJfc3RhdHVzICpzdGF0dXMpOwotdXBiX2Vycm9yc3BhY2UgKnVwYl9zdGF0dXNfZXJyc3Bh
Y2UoY29uc3QgdXBiX3N0YXR1cyAqc3RhdHVzKTsKLWludCB1cGJfc3RhdHVzX2VycmNvZGUoY29u
c3QgdXBiX3N0YXR1cyAqc3RhdHVzKTsKLQotLyogQW55IG9mIHRoZSBmdW5jdGlvbnMgdGhhdCB3
cml0ZSB0byBhIHN0YXR1cyBvYmplY3QgYWxsb3cgc3RhdHVzIHRvIGJlIE5VTEwsCi0gKiB0byBz
dXBwb3J0IHVzZSBjYXNlcyB3aGVyZSB0aGUgZnVuY3Rpb24ncyBjYWxsZXIgZG9lcyBub3QgY2Fy
ZSBhYm91dCB0aGUKLSAqIHN0YXR1cyBtZXNzYWdlLiAqLwotdm9pZCB1cGJfc3RhdHVzX2NsZWFy
KHVwYl9zdGF0dXMgKnN0YXR1cyk7Ci12b2lkIHVwYl9zdGF0dXNfc2V0ZXJybXNnKHVwYl9zdGF0
dXMgKnN0YXR1cywgY29uc3QgY2hhciAqbXNnKTsKLXZvaWQgdXBiX3N0YXR1c19zZXRlcnJmKHVw
Yl9zdGF0dXMgKnN0YXR1cywgY29uc3QgY2hhciAqZm10LCAuLi4pOwotdm9pZCB1cGJfc3RhdHVz
X3ZzZXRlcnJmKHVwYl9zdGF0dXMgKnN0YXR1cywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFy
Z3MpOwotdm9pZCB1cGJfc3RhdHVzX2NvcHkodXBiX3N0YXR1cyAqdG8sIGNvbnN0IHVwYl9zdGF0
dXMgKmZyb20pOwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1j
bGFzcyB1cGI6OlN0YXR1cyB7Ci0gcHVibGljOgotICBTdGF0dXMoKSB7IHVwYl9zdGF0dXNfY2xl
YXIodGhpcyk7IH0KLQotICAvKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbm8gZXJyb3IuICov
Ci0gIGJvb2wgb2soKSBjb25zdCB7IHJldHVybiB1cGJfb2sodGhpcyk7IH0KLQotICAvKiBPcHRp
b25hbCBlcnJvciBzcGFjZSBhbmQgY29kZSwgdXNlZnVsIGlmIHRoZSBjYWxsZXIgd2FudHMgdG8K
LSAgICogcHJvZ3JhbW1hdGljYWxseSBjaGVjayB0aGUgc3BlY2lmaWMga2luZCBvZiBlcnJvci4g
Ki8KLSAgRXJyb3JTcGFjZSogZXJyb3Jfc3BhY2UoKSB7IHJldHVybiB1cGJfc3RhdHVzX2VycnNw
YWNlKHRoaXMpOyB9Ci0gIGludCBlcnJvcl9jb2RlKCkgY29uc3QgeyByZXR1cm4gdXBiX3N0YXR1
c19lcnJjb2RlKHRoaXMpOyB9Ci0KLSAgLyogVGhlIHJldHVybmVkIHN0cmluZyBpcyBpbnZhbGlk
YXRlZCBieSBhbnkgb3RoZXIgY2FsbCBpbnRvIHRoZSBzdGF0dXMuICovCi0gIGNvbnN0IGNoYXIg
KmVycm9yX21lc3NhZ2UoKSBjb25zdCB7IHJldHVybiB1cGJfc3RhdHVzX2Vycm1zZyh0aGlzKTsg
fQotCi0gIC8qIFRoZSBlcnJvciBtZXNzYWdlIHdpbGwgYmUgdHJ1bmNhdGVkIGlmIGl0IGlzIGxv
bmdlciB0aGFuCi0gICAqIFVQQl9TVEFUVVNfTUFYX01FU1NBR0UtNC4gKi8KLSAgdm9pZCBTZXRF
cnJvck1lc3NhZ2UoY29uc3QgY2hhciogbXNnKSB7IHVwYl9zdGF0dXNfc2V0ZXJybXNnKHRoaXMs
IG1zZyk7IH0KLSAgdm9pZCBTZXRGb3JtYXR0ZWRFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogZm10
LCAuLi4pIHsKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywgZm10KTsKLSAg
ICB1cGJfc3RhdHVzX3ZzZXRlcnJmKHRoaXMsIGZtdCwgYXJncyk7Ci0gICAgdmFfZW5kKGFyZ3Mp
OwotICB9Ci0KLSAgLyogUmVzZXRzIHRoZSBzdGF0dXMgdG8gYSBzdWNjZXNzZnVsIHN0YXRlIHdp
dGggbm8gbWVzc2FnZS4gKi8KLSAgdm9pZCBDbGVhcigpIHsgdXBiX3N0YXR1c19jbGVhcih0aGlz
KTsgfQotCi0gIHZvaWQgQ29weUZyb20oY29uc3QgU3RhdHVzJiBvdGhlcikgeyB1cGJfc3RhdHVz
X2NvcHkodGhpcywgJm90aGVyKTsgfQotCi0gcHJpdmF0ZToKLSAgVVBCX0RJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihTdGF0dXMpCi0jZWxzZQotc3RydWN0IHVwYl9zdGF0dXMgewotI2VuZGlmCi0g
IGJvb2wgb2tfOwotCi0gIC8qIFNwZWNpZmljIHN0YXR1cyBjb2RlIGRlZmluZWQgYnkgc29tZSBl
cnJvciBzcGFjZSAob3B0aW9uYWwpLiAqLwotICBpbnQgY29kZV87Ci0gIHVwYl9lcnJvcnNwYWNl
ICplcnJvcl9zcGFjZV87Ci0KLSAgLyogVE9ETyhoYWJlcm1hbik6IGFkZCBmaWxlL2xpbmUgb2Yg
ZXJyb3I/ICovCi0KLSAgLyogRXJyb3IgbWVzc2FnZTsgTlVMTC10ZXJtaW5hdGVkLiAqLwotICBj
aGFyIG1zZ1tVUEJfU1RBVFVTX01BWF9NRVNTQUdFXTsKLX07Ci0KLSNkZWZpbmUgVVBCX1NUQVRV
U19JTklUIHt0cnVlLCAwLCBOVUxMLCB7MH19Ci0KLQotLyoqIEJ1aWx0LWluIGVycm9yIHNwYWNl
cy4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
LQotLyogRXJyb3JzIHJhaXNlZCBieSB1cGIgdGhhdCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZGV0
ZWN0IHByb2dyYW1tYXRpY2FsbHkuICovCi10eXBlZGVmIGVudW0gewotICBVUEJfTk9NRU0gICAv
KiBDYW4ndCByZXVzZSBFTk9NRU0gYmVjYXVzZSBpdCBpcyBQT1NJWCwgbm90IElTTyBDLiAqLwot
fSB1cGJfZXJyY29kZV90OwotCi1leHRlcm4gdXBiX2Vycm9yc3BhY2UgdXBiX3VwYmVycjsKLQot
dm9pZCB1cGJfdXBiZXJyX3NldG9vbSh1cGJfc3RhdHVzICpzKTsKLQotLyogU2luY2UgZXJybm8g
aXMgZGVmaW5lZCBieSBzdGFuZGFyZCBDLCB3ZSBkZWZpbmUgYW4gZXJyb3Igc3BhY2UgZm9yIGl0
IGluCi0gKiBjb3JlIHVwYi4gIE90aGVyIGVycm9yIHNwYWNlcyBzaG91bGQgYmUgZGVmaW5lZCBp
biBvdGhlciwgcGxhdGZvcm0tc3BlY2lmaWMKLSAqIG1vZHVsZXMuICovCi0KLWV4dGVybiB1cGJf
ZXJyb3JzcGFjZSB1cGJfZXJybm9lcnI7Ci0KLQotLyoqIHVwYjo6QWxsb2NhdG9yICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
LyogQSB1cGI6OkFsbG9jYXRvciBpcyBhIHBvc3NpYmx5LXN0YXRlZnVsIGFsbG9jYXRvciBvYmpl
Y3QuCi0gKgotICogSXQgY291bGQgZWl0aGVyIGJlIGFuIGFyZW5hIGFsbG9jYXRvciAod2hpY2gg
ZG9lc24ndCByZXF1aXJlIGluZGl2aWR1YWwKLSAqIGZyZWUoKSBjYWxscykgb3IgYSByZWd1bGFy
IG1hbGxvYygpICh3aGljaCBkb2VzKS4gIFRoZSBjbGllbnQgbXVzdCB0aGVyZWZvcmUKLSAqIGZy
ZWUgbWVtb3J5IHVubGVzcyBpdCBrbm93cyB0aGF0IHRoZSBhbGxvY2F0b3IgaXMgYW4gYXJlbmEg
YWxsb2NhdG9yLiAqLwotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6OkFsbG9jYXRvciwgdXBiX2FsbG9j
KQotCi0vKiBBIG1hbGxvYygpL2ZyZWUoKSBmdW5jdGlvbi4KLSAqIElmICJzaXplIiBpcyAwIHRo
ZW4gdGhlIGZ1bmN0aW9uIGFjdHMgbGlrZSBmcmVlKCksIG90aGVyd2lzZSBpdCBhY3RzIGxpa2UK
LSAqIHJlYWxsb2MoKS4gIE9ubHkgIm9sZHNpemUiIGJ5dGVzIGZyb20gYSBwcmV2aW91cyBhbGxv
Y2F0aW9uIGFyZSBwcmVzZXJ2ZWQuICovCi10eXBlZGVmIHZvaWQgKnVwYl9hbGxvY19mdW5jKHVw
Yl9hbGxvYyAqYWxsb2MsIHZvaWQgKnB0ciwgc2l6ZV90IG9sZHNpemUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLWNs
YXNzIHVwYjo6QWxsb2NhdG9yIFVQQl9GSU5BTCB7Ci0gcHVibGljOgotICBBbGxvY2F0b3IoKSB7
fQotCi0gcHJpdmF0ZToKLSAgVVBCX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihBbGxvY2F0b3Ip
Ci0KLSBwdWJsaWM6Ci0jZWxzZQotc3RydWN0IHVwYl9hbGxvYyB7Ci0jZW5kaWYgIC8qIF9fY3Bs
dXNwbHVzICovCi0gIHVwYl9hbGxvY19mdW5jICpmdW5jOwotfTsKLQotVVBCX0lOTElORSB2b2lk
ICp1cGJfbWFsbG9jKHVwYl9hbGxvYyAqYWxsb2MsIHNpemVfdCBzaXplKSB7Ci0gIGFzc2VydChz
aXplID4gMCk7Ci0gIHJldHVybiBhbGxvYy0+ZnVuYyhhbGxvYywgTlVMTCwgMCwgc2l6ZSk7Ci19
Ci0KLVVQQl9JTkxJTkUgdm9pZCAqdXBiX3JlYWxsb2ModXBiX2FsbG9jICphbGxvYywgdm9pZCAq
cHRyLCBzaXplX3Qgb2xkc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHNpemUpIHsKLSAgYXNzZXJ0KHNpemUgPiAwKTsKLSAgcmV0dXJuIGFsbG9jLT5mdW5jKGFsbG9j
LCBwdHIsIG9sZHNpemUsIHNpemUpOwotfQotCi1VUEJfSU5MSU5FIHZvaWQgdXBiX2ZyZWUodXBi
X2FsbG9jICphbGxvYywgdm9pZCAqcHRyKSB7Ci0gIGFsbG9jLT5mdW5jKGFsbG9jLCBwdHIsIDAs
IDApOwotfQotCi0vKiBUaGUgZ2xvYmFsIGFsbG9jYXRvciB1c2VkIGJ5IHVwYi4gIFVzZXMgdGhl
IHN0YW5kYXJkIG1hbGxvYygpL2ZyZWUoKS4gKi8KLQotZXh0ZXJuIHVwYl9hbGxvYyB1cGJfYWxs
b2NfZ2xvYmFsOwotCi0vKiBGdW5jdGlvbnMgdGhhdCBoYXJkLWNvZGUgdGhlIGdsb2JhbCBtYWxs
b2MuCi0gKgotICogV2Ugc3RpbGwgZ2V0IGJlbmVmaXQgYmVjYXVzZSB3ZSBjYW4gcHV0IGN1c3Rv
bSBsb2dpYyBpbnRvIG91ciBnbG9iYWwKLSAqIGFsbG9jYXRvciwgbGlrZSBpbmplY3Rpbmcgb3V0
LW9mLW1lbW9yeSBmYXVsdHMgaW4gZGVidWcvdGVzdGluZyBidWlsZHMuICovCi0KLVVQQl9JTkxJ
TkUgdm9pZCAqdXBiX2dtYWxsb2Moc2l6ZV90IHNpemUpIHsKLSAgcmV0dXJuIHVwYl9tYWxsb2Mo
JnVwYl9hbGxvY19nbG9iYWwsIHNpemUpOwotfQotCi1VUEJfSU5MSU5FIHZvaWQgKnVwYl9ncmVh
bGxvYyh2b2lkICpwdHIsIHNpemVfdCBvbGRzaXplLCBzaXplX3Qgc2l6ZSkgewotICByZXR1cm4g
dXBiX3JlYWxsb2MoJnVwYl9hbGxvY19nbG9iYWwsIHB0ciwgb2xkc2l6ZSwgc2l6ZSk7Ci19Ci0K
LVVQQl9JTkxJTkUgdm9pZCB1cGJfZ2ZyZWUodm9pZCAqcHRyKSB7Ci0gIHVwYl9mcmVlKCZ1cGJf
YWxsb2NfZ2xvYmFsLCBwdHIpOwotfQotCi0vKiB1cGI6OkFyZW5hICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiB1
cGI6OkFyZW5hIGlzIGEgc3BlY2lmaWMgYWxsb2NhdG9yIGltcGxlbWVudGF0aW9uIHRoYXQgdXNl
cyBhcmVuYSBhbGxvY2F0aW9uLgotICogVGhlIHVzZXIgcHJvdmlkZXMgYW4gYWxsb2NhdG9yIHRo
YXQgd2lsbCBiZSB1c2VkIHRvIGFsbG9jYXRlIHRoZSB1bmRlcmx5aW5nCi0gKiBhcmVuYSBibG9j
a3MuICBBcmVuYXMgYnkgbmF0dXJlIGRvIG5vdCByZXF1aXJlIHRoZSBpbmRpdmlkdWFsIGFsbG9j
YXRpb25zCi0gKiB0byBiZSBmcmVlZC4gIEhvd2V2ZXIgdGhlIEFyZW5hIGRvZXMgYWxsb3cgdXNl
cnMgdG8gcmVnaXN0ZXIgY2xlYW51cAotICogZnVuY3Rpb25zIHRoYXQgd2lsbCBydW4gd2hlbiB0
aGUgYXJlbmEgaXMgZGVzdHJveWVkLgotICoKLSAqIEEgdXBiOjpBcmVuYSBpcyAqbm90KiB0aHJl
YWQtc2FmZS4KLSAqCi0gKiBZb3UgY291bGQgd3JpdGUgYSB0aHJlYWQtc2FmZSBhcmVuYSBhbGxv
Y2F0b3IgdGhhdCBzYXRpc2ZpZXMgdGhlCi0gKiB1cGI6OkFsbG9jYXRvciBpbnRlcmZhY2UsIGJ1
dCBpdCB3b3VsZCBub3QgYmUgYXMgZWZmaWNpZW50IGZvciB0aGUKLSAqIHNpbmdsZS10aHJlYWRl
ZCBjYXNlLiAqLwotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6OkFyZW5hLCB1cGJfYXJlbmEpCi0KLXR5
cGVkZWYgdm9pZCB1cGJfY2xlYW51cF9mdW5jKHZvaWQgKnVkKTsKLQotI2RlZmluZSBVUEJfQVJF
TkFfQkxPQ0tfT1ZFUkhFQUQgKHNpemVvZihzaXplX3QpKjQpCi0KLVVQQl9CRUdJTl9FWFRFUk5f
QwotCi12b2lkIHVwYl9hcmVuYV9pbml0KHVwYl9hcmVuYSAqYSk7Ci12b2lkIHVwYl9hcmVuYV9p
bml0Mih1cGJfYXJlbmEgKmEsIHZvaWQgKm1lbSwgc2l6ZV90IG4sIHVwYl9hbGxvYyAqYWxsb2Mp
Owotdm9pZCB1cGJfYXJlbmFfdW5pbml0KHVwYl9hcmVuYSAqYSk7Ci11cGJfYWxsb2MgKnVwYl9h
cmVuYV9hbGxvYyh1cGJfYXJlbmEgKmEpOwotYm9vbCB1cGJfYXJlbmFfYWRkY2xlYW51cCh1cGJf
YXJlbmEgKmEsIHVwYl9jbGVhbnVwX2Z1bmMgKmZ1bmMsIHZvaWQgKnVkKTsKLXNpemVfdCB1cGJf
YXJlbmFfYnl0ZXNhbGxvY2F0ZWQoY29uc3QgdXBiX2FyZW5hICphKTsKLXZvaWQgdXBiX2FyZW5h
X3NldG5leHRibG9ja3NpemUodXBiX2FyZW5hICphLCBzaXplX3Qgc2l6ZSk7Ci12b2lkIHVwYl9h
cmVuYV9zZXRtYXhibG9ja3NpemUodXBiX2FyZW5hICphLCBzaXplX3Qgc2l6ZSk7Ci0KLVVQQl9F
TkRfRVhURVJOX0MKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLWNsYXNzIHVwYjo6QXJlbmEgewot
IHB1YmxpYzoKLSAgLyogQSBzaW1wbGUgYXJlbmEgd2l0aCBubyBpbml0aWFsIG1lbW9yeSBibG9j
ayBhbmQgdGhlIGRlZmF1bHQgYWxsb2NhdG9yLiAqLwotICBBcmVuYSgpIHsgdXBiX2FyZW5hX2lu
aXQodGhpcyk7IH0KLQotICAvKiBDb25zdHJ1Y3RzIGFuIGFyZW5hIHdpdGggdGhlIGdpdmVuIGlu
aXRpYWwgYmxvY2sgd2hpY2ggYWxsb2NhdGVzIGJsb2NrcwotICAgKiB3aXRoIHRoZSBnaXZlbiBh
bGxvY2F0b3IuICBUaGUgZ2l2ZW4gYWxsb2NhdG9yIG11c3Qgb3V0bGl2ZSB0aGUgQXJlbmEuCi0g
ICAqCi0gICAqIElmIHlvdSBwYXNzIE5VTEwgZm9yIHRoZSBhbGxvY2F0b3IgaXQgd2lsbCBkZWZh
dWx0IHRvIHRoZSBnbG9iYWwgYWxsb2NhdG9yCi0gICAqIHVwYl9hbGxvY19nbG9iYWwsIGFuZCBO
VUxMLzAgZm9yIHRoZSBpbml0aWFsIGJsb2NrIHdpbGwgY2F1c2UgdGhlcmUgdG8gYmUKLSAgICog
bm8gaW5pdGlhbCBibG9jay4gKi8KLSAgQXJlbmEodm9pZCAqbWVtLCBzaXplX3QgbGVuLCBBbGxv
Y2F0b3IqIGEpIHsKLSAgICB1cGJfYXJlbmFfaW5pdDIodGhpcywgbWVtLCBsZW4sIGEpOwotICB9
Ci0KLSAgfkFyZW5hKCkgeyB1cGJfYXJlbmFfdW5pbml0KHRoaXMpOyB9Ci0KLSAgLyogU2V0cyB0
aGUgc2l6ZSBvZiB0aGUgbmV4dCBibG9jayB0aGUgQXJlbmEgd2lsbCByZXF1ZXN0ICh1bmxlc3Mg
dGhlCi0gICAqIHJlcXVlc3RlZCBhbGxvY2F0aW9uIGlzIGxhcmdlcikuICBFYWNoIGJsb2NrIHdp
bGwgZG91YmxlIGluIHNpemUgdW50aWwgdGhlCi0gICAqIG1heCBsaW1pdCBpcyByZWFjaGVkLiAq
LwotICB2b2lkIFNldE5leHRCbG9ja1NpemUoc2l6ZV90IHNpemUpIHsgdXBiX2FyZW5hX3NldG5l
eHRibG9ja3NpemUodGhpcywgc2l6ZSk7IH0KLQotICAvKiBTZXRzIHRoZSBtYXhpbXVtIGJsb2Nr
IHNpemUuICBObyBibG9ja3MgbGFyZ2VyIHRoYW4gdGhpcyB3aWxsIGJlIHJlcXVlc3RlZAotICAg
KiBmcm9tIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRvciB1bmxlc3MgaW5kaXZpZHVhbCBhcmVuYSBh
bGxvY2F0aW9ucyBhcmUKLSAgICogbGFyZ2VyLiAqLwotICB2b2lkIFNldE1heEJsb2NrU2l6ZShz
aXplX3Qgc2l6ZSkgeyB1cGJfYXJlbmFfc2V0bWF4YmxvY2tzaXplKHRoaXMsIHNpemUpOyB9Ci0K
LSAgLyogQWxsb3dzIHRoaXMgYXJlbmEgdG8gYmUgdXNlZCBhcyBhIGdlbmVyaWMgYWxsb2NhdG9y
LgotICAgKgotICAgKiBUaGUgYXJlbmEgZG9lcyBub3QgbmVlZCBmcmVlKCkgY2FsbHMgc28gd2hl
biB1c2luZyBBcmVuYSBhcyBhbiBhbGxvY2F0b3IKLSAgICogaXQgaXMgc2FmZSB0byBza2lwIHRo
ZW0uICBIb3dldmVyIHRoZXkgYXJlIG5vLW9wcyBzbyB0aGVyZSBpcyBubyBoYXJtIGluCi0gICAq
IGNhbGxpbmcgZnJlZSgpIGVpdGhlci4gKi8KLSAgQWxsb2NhdG9yKiBhbGxvY2F0b3IoKSB7IHJl
dHVybiB1cGJfYXJlbmFfYWxsb2ModGhpcyk7IH0KLQotICAvKiBBZGQgYSBjbGVhbnVwIGZ1bmN0
aW9uIHRvIHJ1biB3aGVuIHRoZSBhcmVuYSBpcyBkZXN0cm95ZWQuCi0gICAqIFJldHVybnMgZmFs
c2Ugb24gb3V0LW9mLW1lbW9yeS4gKi8KLSAgYm9vbCBBZGRDbGVhbnVwKHVwYl9jbGVhbnVwX2Z1
bmMqIGZ1bmMsIHZvaWQqIHVkKSB7Ci0gICAgcmV0dXJuIHVwYl9hcmVuYV9hZGRjbGVhbnVwKHRo
aXMsIGZ1bmMsIHVkKTsKLSAgfQotCi0gIC8qIFRvdGFsIG51bWJlciBvZiBieXRlcyB0aGF0IGhh
dmUgYmVlbiBhbGxvY2F0ZWQuICBJdCBpcyB1bmRlZmluZWQgd2hhdAotICAgKiBSZWFsbG9jKCkg
ZG9lcyB0byB0aGlzIGNvdW50ZXIuICovCi0gIHNpemVfdCBCeXRlc0FsbG9jYXRlZCgpIGNvbnN0
IHsKLSAgICByZXR1cm4gdXBiX2FyZW5hX2J5dGVzYWxsb2NhdGVkKHRoaXMpOwotICB9Ci0KLSBw
cml2YXRlOgotICBVUEJfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEFyZW5hKQotCi0jZWxzZQot
c3RydWN0IHVwYl9hcmVuYSB7Ci0jZW5kaWYgIC8qIF9fY3BsdXNwbHVzICovCi0gIC8qIFdlIGlt
cGxlbWVudCB0aGUgYWxsb2NhdG9yIGludGVyZmFjZS4KLSAgICogVGhpcyBtdXN0IGJlIHRoZSBm
aXJzdCBtZW1iZXIgb2YgdXBiX2FyZW5hISAqLwotICB1cGJfYWxsb2MgYWxsb2M7Ci0KLSAgLyog
QWxsb2NhdG9yIHRvIGFsbG9jYXRlIGFyZW5hIGJsb2Nrcy4gIFdlIGFyZSByZXNwb25zaWJsZSBm
b3IgZnJlZWluZyB0aGVzZQotICAgKiB3aGVuIHdlIGFyZSBkZXN0cm95ZWQuICovCi0gIHVwYl9h
bGxvYyAqYmxvY2tfYWxsb2M7Ci0KLSAgc2l6ZV90IGJ5dGVzX2FsbG9jYXRlZDsKLSAgc2l6ZV90
IG5leHRfYmxvY2tfc2l6ZTsKLSAgc2l6ZV90IG1heF9ibG9ja19zaXplOwotCi0gIC8qIExpbmtl
ZCBsaXN0IG9mIGJsb2Nrcy4gIFBvaW50cyB0byBhbiBhcmVuYV9ibG9jaywgZGVmaW5lZCBpbiBl
bnYuYyAqLwotICB2b2lkICpibG9ja19oZWFkOwotCi0gIC8qIENsZWFudXAgZW50cmllcy4gIFBv
aW50ZXIgdG8gYSBjbGVhbnVwX2VudCwgZGVmaW5lZCBpbiBlbnYuYyAqLwotICB2b2lkICpjbGVh
bnVwX2hlYWQ7Ci0KLSAgLyogRm9yIGZ1dHVyZSBleHBhbnNpb24sIHNpbmNlIHRoZSBzaXplIG9m
IHRoaXMgc3RydWN0IGlzIGV4cG9zZWQgdG8gdXNlcnMuICovCi0gIHZvaWQgKmZ1dHVyZTE7Ci0g
IHZvaWQgKmZ1dHVyZTI7Ci19OwotCi0KLS8qIHVwYjo6RW52aXJvbm1lbnQgKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEEg
dXBiOjpFbnZpcm9ubWVudCBwcm92aWRlcyBhIG1lYW5zIGZvciBpbmplY3RpbmcgbWFsbG9jIGFu
ZCBhbgotICogZXJyb3ItcmVwb3J0aW5nIGNhbGxiYWNrIGludG8gZW5jb2RlcnMvZGVjb2RlcnMu
ICBUaGlzIGFsbG93cyB0aGVtIHRvIGJlCi0gKiBpbmRlcGVuZGVudCBvZiBuZWFybHkgYWxsIGFz
c3VtcHRpb25zIGFib3V0IHRoZWlyIGFjdHVhbCBlbnZpcm9ubWVudC4KLSAqCi0gKiBJdCBpcyBh
bHNvIGEgY29udGFpbmVyIGZvciBhbGxvY2F0aW5nIHRoZSBlbmNvZGVycy9kZWNvZGVycyB0aGVt
c2VsdmVzIHRoYXQKLSAqIGluc3VsYXRlcyBjbGllbnRzIGZyb20ga25vd2luZyB0aGVpciBhY3R1
YWwgc2l6ZS4gIFRoaXMgcHJvdmlkZXMgQUJJCi0gKiBjb21wYXRpYmlsaXR5IGV2ZW4gaWYgdGhl
IHNpemUgb2YgdGhlIG9iamVjdHMgY2hhbmdlLiAgQW5kIHRoaXMgYWxsb3dzIHRoZQotICogc3Ry
dWN0dXJlIGRlZmluaXRpb25zIHRvIGJlIGluIHRoZSAuYyBmaWxlcyBpbnN0ZWFkIG9mIHRoZSAu
aCBmaWxlcywgbWFraW5nCi0gKiB0aGUgLmggZmlsZXMgc21hbGxlciBhbmQgbW9yZSByZWFkYWJs
ZS4KLSAqCi0gKiBXZSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8gIlBp
cGVsaW5lIiBpZi93aGVuIHRoZSBjb25jZXB0IG9mCi0gKiBhIHBpcGVsaW5lIGVsZW1lbnQgYmVj
b21lcyBtb3JlIGZvcm1hbGl6ZWQuICovCi1VUEJfREVDTEFSRV9UWVBFKHVwYjo6RW52aXJvbm1l
bnQsIHVwYl9lbnYpCi0KLS8qIEEgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhbiBlcnJvciByZXBv
cnQgZnJvbSBhbiBlbmNvZGVyIG9yIGRlY29kZXIuICBUaGUKLSAqIGNhbGxiYWNrIGNhbiByZXR1
cm4gdHJ1ZSB0byByZXF1ZXN0IHRoYXQgdGhlIGVycm9yIHNob3VsZCBiZSByZWNvdmVyZWQsIGJ1
dAotICogaWYgdGhlIGVycm9yIGlzIG5vdCByZWNvdmVyYWJsZSB0aGlzIGhhcyBubyBlZmZlY3Qu
ICovCi10eXBlZGVmIGJvb2wgdXBiX2Vycm9yX2Z1bmModm9pZCAqdWQsIGNvbnN0IHVwYl9zdGF0
dXMgKnN0YXR1cyk7Ci0KLVVQQl9CRUdJTl9FWFRFUk5fQwotCi12b2lkIHVwYl9lbnZfaW5pdCh1
cGJfZW52ICplKTsKLXZvaWQgdXBiX2Vudl9pbml0Mih1cGJfZW52ICplLCB2b2lkICptZW0sIHNp
emVfdCBuLCB1cGJfYWxsb2MgKmFsbG9jKTsKLXZvaWQgdXBiX2Vudl91bmluaXQodXBiX2VudiAq
ZSk7Ci0KLXZvaWQgdXBiX2Vudl9pbml0b25seSh1cGJfZW52ICplKTsKLQotdXBiX2FyZW5hICp1
cGJfZW52X2FyZW5hKHVwYl9lbnYgKmUpOwotYm9vbCB1cGJfZW52X29rKGNvbnN0IHVwYl9lbnYg
KmUpOwotdm9pZCB1cGJfZW52X3NldGVycm9yZnVuYyh1cGJfZW52ICplLCB1cGJfZXJyb3JfZnVu
YyAqZnVuYywgdm9pZCAqdWQpOwotCi0vKiBDb252ZW5pZW5jZSB3cmFwcGVycyBhcm91bmQgdGhl
IG1ldGhvZHMgb2YgdGhlIGNvbnRhaW5lZCBhcmVuYS4gKi8KLXZvaWQgdXBiX2Vudl9yZXBvcnRl
cnJvcnN0byh1cGJfZW52ICplLCB1cGJfc3RhdHVzICpzKTsKLWJvb2wgdXBiX2Vudl9yZXBvcnRl
cnJvcih1cGJfZW52ICplLCBjb25zdCB1cGJfc3RhdHVzICpzKTsKLXZvaWQgKnVwYl9lbnZfbWFs
bG9jKHVwYl9lbnYgKmUsIHNpemVfdCBzaXplKTsKLXZvaWQgKnVwYl9lbnZfcmVhbGxvYyh1cGJf
ZW52ICplLCB2b2lkICpwdHIsIHNpemVfdCBvbGRzaXplLCBzaXplX3Qgc2l6ZSk7Ci12b2lkIHVw
Yl9lbnZfZnJlZSh1cGJfZW52ICplLCB2b2lkICpwdHIpOwotYm9vbCB1cGJfZW52X2FkZGNsZWFu
dXAodXBiX2VudiAqZSwgdXBiX2NsZWFudXBfZnVuYyAqZnVuYywgdm9pZCAqdWQpOwotc2l6ZV90
IHVwYl9lbnZfYnl0ZXNhbGxvY2F0ZWQoY29uc3QgdXBiX2VudiAqZSk7Ci0KLVVQQl9FTkRfRVhU
RVJOX0MKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLWNsYXNzIHVwYjo6RW52aXJvbm1lbnQgewot
IHB1YmxpYzoKLSAgLyogVGhlIGdpdmVuIEFyZW5hIG11c3Qgb3V0bGl2ZSB0aGlzIGVudmlyb25t
ZW50LiAqLwotICBFbnZpcm9ubWVudCgpIHsgdXBiX2Vudl9pbml0b25seSh0aGlzKTsgfQotCi0g
IEVudmlyb25tZW50KHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQWxsb2NhdG9yICphKSA6IGFyZW5h
XyhtZW0sIGxlbiwgYSkgewotICAgIHVwYl9lbnZfaW5pdG9ubHkodGhpcyk7Ci0gIH0KLQotICBB
cmVuYSogYXJlbmEoKSB7IHJldHVybiB1cGJfZW52X2FyZW5hKHRoaXMpOyB9Ci0KLSAgLyogU2V0
IGEgY3VzdG9tIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gKi8KLSAgdm9pZCBTZXRFcnJvckZ1
bmN0aW9uKHVwYl9lcnJvcl9mdW5jKiBmdW5jLCB2b2lkKiB1ZCkgewotICAgIHVwYl9lbnZfc2V0
ZXJyb3JmdW5jKHRoaXMsIGZ1bmMsIHVkKTsKLSAgfQotCi0gIC8qIFNldCB0aGUgZXJyb3IgcmVw
b3J0aW5nIGZ1bmN0aW9uIHRvIHNpbXBseSBjb3B5IHRoZSBzdGF0dXMgdG8gdGhlIGdpdmVuCi0g
ICAqIHN0YXR1cyBhbmQgYWJvcnQuICovCi0gIHZvaWQgUmVwb3J0RXJyb3JzVG8oU3RhdHVzKiBz
dGF0dXMpIHsgdXBiX2Vudl9yZXBvcnRlcnJvcnN0byh0aGlzLCBzdGF0dXMpOyB9Ci0KLSAgLyog
UmV0dXJucyB0cnVlIGlmIGFsbCBhbGxvY2F0aW9ucyBhbmQgQWRkQ2xlYW51cCgpIGNhbGxzIGhh
dmUgc3VjY2VlZGVkLAotICAgKiBhbmQgbm8gZXJyb3JzIHdlcmUgcmVwb3J0ZWQgd2l0aCBSZXBv
cnRFcnJvcigpIChleGNlcHQgb25lcyB0aGF0IHJlY292ZXJlZAotICAgKiBzdWNjZXNzZnVsbHkp
LiAqLwotICBib29sIG9rKCkgY29uc3QgeyByZXR1cm4gdXBiX2Vudl9vayh0aGlzKTsgfQotCi0g
IC8qIFJlcG9ydHMgYW4gZXJyb3IgdG8gdGhpcyBlbnZpcm9ubWVudCdzIGNhbGxiYWNrLCByZXR1
cm5pbmcgdHJ1ZSBpZgotICAgKiB0aGUgY2FsbGVyIHNob3VsZCB0cnkgdG8gcmVjb3Zlci4gKi8K
LSAgYm9vbCBSZXBvcnRFcnJvcihjb25zdCBTdGF0dXMqIHN0YXR1cykgewotICAgIHJldHVybiB1
cGJfZW52X3JlcG9ydGVycm9yKHRoaXMsIHN0YXR1cyk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIFVQ
Ql9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRW52aXJvbm1lbnQpCi0KLSNlbHNlCi1zdHJ1Y3Qg
dXBiX2VudiB7Ci0jZW5kaWYgIC8qIF9fY3BsdXNwbHVzICovCi0gIHVwYl9hcmVuYSBhcmVuYV87
Ci0gIHVwYl9lcnJvcl9mdW5jICplcnJvcl9mdW5jXzsKLSAgdm9pZCAqZXJyb3JfdWRfOwotICBi
b29sIG9rXzsKLX07Ci0KLQotLyogdXBiOjpJbmxpbmVkQXJlbmEgKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIHVwYjo6SW5saW5l
ZEVudmlyb25tZW50ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0KLS8qIHVwYjo6SW5saW5lZEFyZW5hIGFuZCB1cGI6OklubGluZWRFbnZpcm9u
bWVudCBzZWVkIHRoZWlyIGFyZW5hcyB3aXRoIGEKLSAqIHByZWRlZmluZWQgYW1vdW50IG9mIG1l
bW9yeS4gIE5vIGhlYXAgbWVtb3J5IHdpbGwgYmUgYWxsb2NhdGVkIHVudGlsIHRoZQotICogaW5p
dGlhbCBibG9jayBpcyBleGNlZWRlZC4KLSAqCi0gKiBUaGVzZSB0eXBlcyBvbmx5IGV4aXN0IGlu
IEMrKyAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotdGVtcGxhdGUgPGludCBOPiBjbGFzcyB1
cGI6OklubGluZWRBcmVuYSA6IHB1YmxpYyB1cGI6OkFyZW5hIHsKLSBwdWJsaWM6Ci0gIElubGlu
ZWRBcmVuYSgpIDogQXJlbmEoaW5pdGlhbF9ibG9ja18sIE4sIE5VTEwpIHt9Ci0gIGV4cGxpY2l0
IElubGluZWRBcmVuYShBbGxvY2F0b3IqIGEpIDogQXJlbmEoaW5pdGlhbF9ibG9ja18sIE4sIGEp
IHt9Ci0KLSBwcml2YXRlOgotICBVUEJfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKElubGluZWRB
cmVuYSkKLQotICBjaGFyIGluaXRpYWxfYmxvY2tfW04gKyBVUEJfQVJFTkFfQkxPQ0tfT1ZFUkhF
QURdOwotfTsKLQotdGVtcGxhdGUgPGludCBOPiBjbGFzcyB1cGI6OklubGluZWRFbnZpcm9ubWVu
dCA6IHB1YmxpYyB1cGI6OkVudmlyb25tZW50IHsKLSBwdWJsaWM6Ci0gIElubGluZWRFbnZpcm9u
bWVudCgpIDogRW52aXJvbm1lbnQoaW5pdGlhbF9ibG9ja18sIE4sIE5VTEwpIHt9Ci0gIGV4cGxp
Y2l0IElubGluZWRFbnZpcm9ubWVudChBbGxvY2F0b3IgKmEpCi0gICAgICA6IEVudmlyb25tZW50
KGluaXRpYWxfYmxvY2tfLCBOLCBhKSB7fQotCi0gcHJpdmF0ZToKLSAgVVBCX0RJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihJbmxpbmVkRW52aXJvbm1lbnQpCi0KLSAgY2hhciBpbml0aWFsX2Jsb2Nr
X1tOICsgVVBCX0FSRU5BX0JMT0NLX09WRVJIRUFEXTsKLX07Ci0KLSNlbmRpZiAgLyogX19jcGx1
c3BsdXMgKi8KLQotCi0KLSNlbmRpZiAgLyogVVBCX0hfICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1
cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotCi0vKiB1cGJfdmFsdWUgKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0v
KiBBIHRhZ2dlZCB1bmlvbiAoc3RvcmVkIHVudGFnZ2VkIGluc2lkZSB0aGUgdGFibGUpIHNvIHRo
YXQgd2UgY2FuIGNoZWNrIHRoYXQKLSAqIGNsaWVudHMgY2FsbGluZyB0YWJsZSBhY2Nlc3NvcnMg
YXJlIGNvcnJlY3RseSB0eXBlZCB3aXRob3V0IGhhdmluZyB0byBoYXZlCi0gKiBhbiBleHBsb3Np
b24gb2YgYWNjZXNzb3JzLiAqLwotdHlwZWRlZiBlbnVtIHsKLSAgVVBCX0NUWVBFX0lOVDMyICAg
ID0gMSwKLSAgVVBCX0NUWVBFX0lOVDY0ICAgID0gMiwKLSAgVVBCX0NUWVBFX1VJTlQzMiAgID0g
MywKLSAgVVBCX0NUWVBFX1VJTlQ2NCAgID0gNCwKLSAgVVBCX0NUWVBFX0JPT0wgICAgID0gNSwK
LSAgVVBCX0NUWVBFX0NTVFIgICAgID0gNiwKLSAgVVBCX0NUWVBFX1BUUiAgICAgID0gNywKLSAg
VVBCX0NUWVBFX0NPTlNUUFRSID0gOCwKLSAgVVBCX0NUWVBFX0ZQVFIgICAgID0gOQotfSB1cGJf
Y3R5cGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICB1aW50NjRfdCB2YWw7Ci0jaWZuZGVmIE5E
RUJVRwotICAvKiBJbiBkZWJ1ZyBtb2RlIHdlIGNhcnJ5IHRoZSB2YWx1ZSB0eXBlIGFyb3VuZCBh
bHNvIHNvIHdlIGNhbiBjaGVjayBhY2Nlc3NlcwotICAgKiB0byBiZSBzdXJlIHRoZSByaWdodCBt
ZW1iZXIgaXMgYmVpbmcgcmVhZC4gKi8KLSAgdXBiX2N0eXBlX3QgY3R5cGU7Ci0jZW5kaWYKLX0g
dXBiX3ZhbHVlOwotCi0jaWZkZWYgTkRFQlVHCi0jZGVmaW5lIFNFVF9UWVBFKGRlc3QsIHZhbCkg
ICAgICBVUEJfVU5VU0VEKHZhbCkKLSNlbHNlCi0jZGVmaW5lIFNFVF9UWVBFKGRlc3QsIHZhbCkg
ZGVzdCA9IHZhbAotI2VuZGlmCi0KLS8qIExpa2Ugc3RyZHVwKCksIHdoaWNoIGlzbid0IGFsd2F5
cyBhdmFpbGFibGUgc2luY2UgaXQncyBub3QgQU5TSSBDLiAqLwotY2hhciAqdXBiX3N0cmR1cChj
b25zdCBjaGFyICpzLCB1cGJfYWxsb2MgKmEpOwotLyogVmFyaWFudCB0aGF0IHdvcmtzIHdpdGgg
YSBsZW5ndGgtZGVsaW1pdGVkIHJhdGhlciB0aGFuIE5VTEwtZGVsaW1pdGVkIHN0cmluZywKLSAq
IGFzIHN1cHBvcnRlZCBieSBzdHJ0YWJsZS4gKi8KLWNoYXIgKnVwYl9zdHJkdXAyKGNvbnN0IGNo
YXIgKnMsIHNpemVfdCBsZW4sIHVwYl9hbGxvYyAqYSk7Ci0KLVVQQl9JTkxJTkUgY2hhciAqdXBi
X2dzdHJkdXAoY29uc3QgY2hhciAqcykgewotICByZXR1cm4gdXBiX3N0cmR1cChzLCAmdXBiX2Fs
bG9jX2dsb2JhbCk7Ci19Ci0KLVVQQl9JTkxJTkUgdm9pZCBfdXBiX3ZhbHVlX3NldHZhbCh1cGJf
dmFsdWUgKnYsIHVpbnQ2NF90IHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cGJfY3R5cGVfdCBjdHlwZSkgewotICB2LT52YWwgPSB2YWw7Ci0gIFNFVF9UWVBFKHYtPmN0
eXBlLCBjdHlwZSk7Ci19Ci0KLVVQQl9JTkxJTkUgdXBiX3ZhbHVlIF91cGJfdmFsdWVfdmFsKHVp
bnQ2NF90IHZhbCwgdXBiX2N0eXBlX3QgY3R5cGUpIHsKLSAgdXBiX3ZhbHVlIHJldDsKLSAgX3Vw
Yl92YWx1ZV9zZXR2YWwoJnJldCwgdmFsLCBjdHlwZSk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8q
IEZvciBlYWNoIHZhbHVlIGN0eXBlLCBkZWZpbmUgdGhlIGZvbGxvd2luZyBzZXQgb2YgZnVuY3Rp
b25zOgotICoKLSAqIC8vIEdldC9zZXQgYW4gaW50MzIgZnJvbSBhIHVwYl92YWx1ZS4KLSAqIGlu
dDMyX3QgdXBiX3ZhbHVlX2dldGludDMyKHVwYl92YWx1ZSB2YWwpOwotICogdm9pZCB1cGJfdmFs
dWVfc2V0aW50MzIodXBiX3ZhbHVlICp2YWwsIGludDMyX3QgY3ZhbCk7Ci0gKgotICogLy8gQ29u
c3RydWN0IGEgbmV3IHVwYl92YWx1ZSBmcm9tIGFuIGludDMyLgotICogdXBiX3ZhbHVlIHVwYl92
YWx1ZV9pbnQzMihpbnQzMl90IHZhbCk7ICovCi0jZGVmaW5lIEZVTkNTKG5hbWUsIG1lbWJlcm5h
bWUsIHR5cGVfdCwgY29udmVydGVyLCBwcm90b190eXBlKSBcCi0gIFVQQl9JTkxJTkUgdm9pZCB1
cGJfdmFsdWVfc2V0ICMjIG5hbWUodXBiX3ZhbHVlICp2YWwsIHR5cGVfdCBjdmFsKSB7IFwKLSAg
ICB2YWwtPnZhbCA9IChjb252ZXJ0ZXIpY3ZhbDsgXAotICAgIFNFVF9UWVBFKHZhbC0+Y3R5cGUs
IHByb3RvX3R5cGUpOyBcCi0gIH0gXAotICBVUEJfSU5MSU5FIHVwYl92YWx1ZSB1cGJfdmFsdWVf
ICMjIG5hbWUodHlwZV90IHZhbCkgeyBcCi0gICAgdXBiX3ZhbHVlIHJldDsgXAotICAgIHVwYl92
YWx1ZV9zZXQgIyMgbmFtZSgmcmV0LCB2YWwpOyBcCi0gICAgcmV0dXJuIHJldDsgXAotICB9IFwK
LSAgVVBCX0lOTElORSB0eXBlX3QgdXBiX3ZhbHVlX2dldCAjIyBuYW1lKHVwYl92YWx1ZSB2YWwp
IHsgXAotICAgIGFzc2VydCh2YWwuY3R5cGUgPT0gcHJvdG9fdHlwZSk7IFwKLSAgICByZXR1cm4g
KHR5cGVfdCkoY29udmVydGVyKXZhbC52YWw7IFwKLSAgfQotCi1GVU5DUyhpbnQzMiwgICAgaW50
MzIsICAgICAgICBpbnQzMl90LCAgICAgIGludDMyX3QsICAgIFVQQl9DVFlQRV9JTlQzMikKLUZV
TkNTKGludDY0LCAgICBpbnQ2NCwgICAgICAgIGludDY0X3QsICAgICAgaW50NjRfdCwgICAgVVBC
X0NUWVBFX0lOVDY0KQotRlVOQ1ModWludDMyLCAgIHVpbnQzMiwgICAgICAgdWludDMyX3QsICAg
ICB1aW50MzJfdCwgICBVUEJfQ1RZUEVfVUlOVDMyKQotRlVOQ1ModWludDY0LCAgIHVpbnQ2NCwg
ICAgICAgdWludDY0X3QsICAgICB1aW50NjRfdCwgICBVUEJfQ1RZUEVfVUlOVDY0KQotRlVOQ1Mo
Ym9vbCwgICAgIF9ib29sLCAgICAgICAgYm9vbCwgICAgICAgICBib29sLCAgICAgICBVUEJfQ1RZ
UEVfQk9PTCkKLUZVTkNTKGNzdHIsICAgICBjc3RyLCAgICAgICAgIGNoYXIqLCAgICAgICAgdWlu
dHB0cl90LCAgVVBCX0NUWVBFX0NTVFIpCi1GVU5DUyhwdHIsICAgICAgcHRyLCAgICAgICAgICB2
b2lkKiwgICAgICAgIHVpbnRwdHJfdCwgIFVQQl9DVFlQRV9QVFIpCi1GVU5DUyhjb25zdHB0ciwg
Y29uc3RwdHIsICAgICBjb25zdCB2b2lkKiwgIHVpbnRwdHJfdCwgIFVQQl9DVFlQRV9DT05TVFBU
UikKLUZVTkNTKGZwdHIsICAgICBmcHRyLCAgICAgICAgIHVwYl9mdW5jKiwgICAgdWludHB0cl90
LCAgVVBCX0NUWVBFX0ZQVFIpCi0KLSN1bmRlZiBGVU5DUwotI3VuZGVmIFNFVF9UWVBFCi0KLQot
LyogdXBiX3RhYmtleSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRWl0aGVyOgotICogICAxLiBhbiBhY3R1YWwg
aW50ZWdlciBrZXksIG9yCi0gKiAgIDIuIGEgcG9pbnRlciB0byBhIHN0cmluZyBwcmVmaXhlZCBi
eSBpdHMgdWludDMyX3QgbGVuZ3RoLCBvd25lZCBieSB1cy4KLSAqCi0gKiAuLi5kZXBlbmRpbmcg
b24gd2hldGhlciB0aGlzIGlzIGEgc3RyaW5nIHRhYmxlIG9yIGFuIGludCB0YWJsZS4gIFdlIHdv
dWxkCi0gKiBtYWtlIHRoaXMgYSB1bmlvbiBvZiB0aG9zZSB0d28gdHlwZXMsIGJ1dCBDODkgZG9l
c24ndCBzdXBwb3J0IHN0YXRpY2FsbHkKLSAqIGluaXRpYWxpemluZyBhIG5vbi1maXJzdCB1bmlv
biBtZW1iZXIuICovCi10eXBlZGVmIHVpbnRwdHJfdCB1cGJfdGFia2V5OwotCi0jZGVmaW5lIFVQ
Ql9UQUJLRVlfTlVNKG4pIG4KLSNkZWZpbmUgVVBCX1RBQktFWV9OT05FIDAKLS8qIFRoZSBwcmVw
cm9jZXNzb3IgaXNuJ3QgcXVpdGUgcG93ZXJmdWwgZW5vdWdoIHRvIHR1cm4gdGhlIGNvbXBpbGUt
dGltZSBzdHJpbmcKLSAqIGxlbmd0aCBpbnRvIGEgYnl0ZS13aXNlIHN0cmluZyByZXByZXNlbnRh
dGlvbiwgc28gY29kZSBnZW5lcmF0aW9uIG5lZWRzIHRvCi0gKiBoZWxwIGl0IGFsb25nLgotICoK
LSAqICJsZW4xIiBpcyB0aGUgbG93IGJ5dGUgYW5kIGxlbjQgaXMgdGhlIGhpZ2ggYnl0ZS4gKi8K
LSNpZmRlZiBVUEJfQklHX0VORElBTgotI2RlZmluZSBVUEJfVEFCS0VZX1NUUihsZW4xLCBsZW4y
LCBsZW4zLCBsZW40LCBzdHJ2YWwpIFwKLSAgICAodWludHB0cl90KShsZW40IGxlbjMgbGVuMiBs
ZW4xIHN0cnZhbCkKLSNlbHNlCi0jZGVmaW5lIFVQQl9UQUJLRVlfU1RSKGxlbjEsIGxlbjIsIGxl
bjMsIGxlbjQsIHN0cnZhbCkgXAotICAgICh1aW50cHRyX3QpKGxlbjEgbGVuMiBsZW4zIGxlbjQg
c3RydmFsKQotI2VuZGlmCi0KLVVQQl9JTkxJTkUgY2hhciAqdXBiX3RhYnN0cih1cGJfdGFia2V5
IGtleSwgdWludDMyX3QgKmxlbikgewotICBjaGFyKiBtZW0gPSAoY2hhciopa2V5OwotICBpZiAo
bGVuKSBtZW1jcHkobGVuLCBtZW0sIHNpemVvZigqbGVuKSk7Ci0gIHJldHVybiBtZW0gKyBzaXpl
b2YoKmxlbik7Ci19Ci0KLQotLyogdXBiX3RhYnZhbCAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIF9fY3Bs
dXNwbHVzCi0KLS8qIFN0YXR1cyBpbml0aWFsaXphdGlvbiBub3Qgc3VwcG9ydGVkLgotICoKLSAq
IFRoaXMgc2VwYXJhdGUgZGVmaW5pdGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpbiBDKyssIFVJ
TlRQVFJfTUFYIGlzbid0Ci0gKiByZWxpYWJseSBhdmFpbGFibGUuICovCi10eXBlZGVmIHN0cnVj
dCB7Ci0gIHVpbnQ2NF90IHZhbDsKLX0gdXBiX3RhYnZhbDsKLQotI2Vsc2UKLQotLyogQyAtLSBz
dXBwb3J0cyBzdGF0aWMgaW5pdGlhbGl6YXRpb24sIGJ1dCB0byBzdXBwb3J0IHN0YXRpYyBpbml0
aWFsaXphdGlvbiBvZgotICogYm90aCBpbnRlZ2VycyBhbmQgcG9pbnRzIGZvciBib3RoIDMyIGFu
ZCA2NCBiaXQgdGFyZ2V0cywgaXQgdGFrZXMgYSBsaXR0bGUKLSAqIGJpdCBvZiBkb2luZy4gKi8K
LQotI2lmIFVJTlRQVFJfTUFYID09IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTAotI2RlZmluZSBVUEJf
UFRSX0lTXzY0QklUUwotI2VsaWYgVUlOVFBUUl9NQVggIT0gMHhmZmZmZmZmZgotI2Vycm9yIENv
dWxkIG5vdCBkZXRlcm1pbmUgaG93IG1hbnkgYml0cyBwb2ludGVycyBhcmUuCi0jZW5kaWYKLQot
dHlwZWRlZiB1bmlvbiB7Ci0gIC8qIEZvciBzdGF0aWMgaW5pdGlhbGl6YXRpb24uCi0gICAqCi0g
ICAqIFVuZm9ydHVuYXRlbHkgdGhpcyB1Z2xpbmVzcyBpcyBuZWNlc3NhcnkgLS0gaXQgaXMgdGhl
IG9ubHkgd2F5IHRoYXQgd2UgY2FuLAotICAgKiB3aXRoIC1zdGQ9Yzg5IC1wZWRhbnRpYywgc3Rh
dGljYWxseSBpbml0aWFsaXplIHRoaXMgdG8gZWl0aGVyIGEgcG9pbnRlciBvcgotICAgKiBhbiBp
bnRlZ2VyIG9uIDMyLWJpdCBwbGF0Zm9ybXMuICovCi0gIHN0cnVjdCB7Ci0jaWZkZWYgVVBCX1BU
Ul9JU182NEJJVFMKLSAgICB1aW50cHRyX3QgdmFsOwotI2Vsc2UKLSAgICB1aW50cHRyX3QgdmFs
MTsKLSAgICB1aW50cHRyX3QgdmFsMjsKLSNlbmRpZgotICB9IHN0YXRpY2luaXQ7Ci0KLSAgLyog
VGhlIG5vcm1hbCBhY2Nlc3NvciB0aGF0IHdlIHVzZSBmb3IgZXZlcnl0aGluZyBhdCBydW50aW1l
LiAqLwotICB1aW50NjRfdCB2YWw7Ci19IHVwYl90YWJ2YWw7Ci0KLSNpZmRlZiBVUEJfUFRSX0lT
XzY0QklUUwotI2RlZmluZSBVUEJfVEFCVkFMVUVfSU5UX0lOSVQodikge3t2fX0KLSNkZWZpbmUg
VVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQgIHt7LTF9fQotI2Vsc2UKLQotLyogMzItYml0IHBvaW50
ZXJzICovCi0KLSNpZmRlZiBVUEJfQklHX0VORElBTgotI2RlZmluZSBVUEJfVEFCVkFMVUVfSU5U
X0lOSVQodikge3swLCB2fX0KLSNkZWZpbmUgVVBCX1RBQlZBTFVFX0VNUFRZX0lOSVQgIHt7LTEs
IC0xfX0KLSNlbHNlCi0jZGVmaW5lIFVQQl9UQUJWQUxVRV9JTlRfSU5JVCh2KSB7e3YsIDB9fQot
I2RlZmluZSBVUEJfVEFCVkFMVUVfRU1QVFlfSU5JVCAge3stMSwgLTF9fQotI2VuZGlmCi0KLSNl
bmRpZgotCi0jZGVmaW5lIFVQQl9UQUJWQUxVRV9QVFJfSU5JVCh2KSBVUEJfVEFCVkFMVUVfSU5U
X0lOSVQoKHVpbnRwdHJfdCl2KQotCi0jdW5kZWYgVVBCX1BUUl9JU182NEJJVFMKLQotI2VuZGlm
ICAvKiBfX2NwbHVzcGx1cyAqLwotCi0KLS8qIHVwYl90YWJsZSAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVk
ZWYgc3RydWN0IF91cGJfdGFiZW50IHsKLSAgdXBiX3RhYmtleSBrZXk7Ci0gIHVwYl90YWJ2YWwg
dmFsOwotCi0gIC8qIEludGVybmFsIGNoYWluaW5nLiAgVGhpcyBpcyBjb25zdCBzbyB3ZSBjYW4g
Y3JlYXRlIHN0YXRpYyBpbml0aWFsaXplcnMgZm9yCi0gICAqIHRhYmxlcy4gIFdlIGNhc3QgYXdh
eSBjb25zdCBzb21ldGltZXMsIGJ1dCAqb25seSogd2hlbiB0aGUgY29udGFpbmluZwotICAgKiB1
cGJfdGFibGUgaXMga25vd24gdG8gYmUgbm9uLWNvbnN0LiAgVGhpcyByZXF1aXJlcyBhIGJpdCBv
ZiBjYXJlLCBidXQKLSAgICogdGhlIHN1YnRsZXR5IGlzIGNvbmZpbmVkIHRvIHRhYmxlLmMuICov
Ci0gIGNvbnN0IHN0cnVjdCBfdXBiX3RhYmVudCAqbmV4dDsKLX0gdXBiX3RhYmVudDsKLQotdHlw
ZWRlZiBzdHJ1Y3QgewotICBzaXplX3QgY291bnQ7ICAgICAgICAgIC8qIE51bWJlciBvZiBlbnRy
aWVzIGluIHRoZSBoYXNoIHBhcnQuICovCi0gIHNpemVfdCBtYXNrOyAgICAgICAgICAgLyogTWFz
ayB0byB0dXJuIGhhc2ggdmFsdWUgLT4gYnVja2V0LiAqLwotICB1cGJfY3R5cGVfdCBjdHlwZTsg
ICAgIC8qIFR5cGUgb2YgYWxsIHZhbHVlcy4gKi8KLSAgdWludDhfdCBzaXplX2xnMjsgICAgICAv
KiBTaXplIG9mIHRoZSBoYXNodGFibGUgcGFydCBpcyAyXnNpemVfbGcyIGVudHJpZXMuICovCi0K
LSAgLyogSGFzaCB0YWJsZSBlbnRyaWVzLgotICAgKiBNYWtpbmcgdGhpcyBjb25zdCBpc24ndCBl
bnRpcmVseSBhY2N1cmF0ZTsgd2hhdCB3ZSByZWFsbHkgd2FudCBpcyBmb3IgaXQgdG8KLSAgICog
aGF2ZSB0aGUgc2FtZSBjb25zdC1uZXNzIGFzIHRoZSB0YWJsZSBpdCdzIGluc2lkZS4gIEJ1dCB0
aGVyZSdzIG5vIHdheSB0bwotICAgKiBkZWNsYXJlIHRoYXQgaW4gQy4gIFNvIHdlIGhhdmUgdG8g
bWFrZSBpdCBjb25zdCBzbyB0aGF0IHdlIGNhbiBzdGF0aWNhbGx5Ci0gICAqIGluaXRpYWxpemUg
Y29uc3QgaGFzaCB0YWJsZXMuICBUaGVuIHdlIGNhc3QgYXdheSBjb25zdCB3aGVuIHdlIGhhdmUg
dG8uCi0gICAqLwotICBjb25zdCB1cGJfdGFiZW50ICplbnRyaWVzOwotCi0jaWZuZGVmIE5ERUJV
RwotICAvKiBUaGlzIHRhYmxlJ3MgYWxsb2NhdG9yLiAgV2UgbWFrZSB0aGUgdXNlciBwYXNzIGl0
IGluIHRvIGV2ZXJ5IHJlbGV2YW50Ci0gICAqIGZ1bmN0aW9uIGFuZCBvbmx5IHVzZSB0aGlzIHRv
IGNoZWNrIGl0IGluIGRlYnVnIG1vZGUuICBXZSBkbyB0aGlzIHNvbGVseQotICAgKiB0byBrZWVw
IHVwYl90YWJsZSBhcyBzbWFsbCBhcyBwb3NzaWJsZS4gIFRoaXMgbWlnaHQgc2VlbSBzbGlnaHRs
eSBwYXJhbm9pZAotICAgKiBidXQgdGhlIHBsYW4gaXMgdG8gdXNlIHVwYl90YWJsZSBmb3IgYWxs
IG1hcCBmaWVsZHMgYW5kIGV4dGVuc2lvbiBzZXRzIGluCi0gICAqIGEgZm9ydGhjb21pbmcgbWVz
c2FnZSByZXByZXNlbnRhdGlvbiwgc28gdGhlcmUgY291bGQgYmUgYSBsb3Qgb2YgdGhlc2UuCi0g
ICAqIElmIHRoaXMgdHVybnMgb3V0IHRvIGJlIHRvbyBhbm5veWluZyBsYXRlciwgd2UgY2FuIGNo
YW5nZSBpdCAoc2luY2UgdGhpcwotICAgKiBpcyBhbiBpbnRlcm5hbC1vbmx5IGhlYWRlciBmaWxl
KS4gKi8KLSAgdXBiX2FsbG9jICphbGxvYzsKLSNlbmRpZgotfSB1cGJfdGFibGU7Ci0KLSNpZmRl
ZiBOREVCVUcKLSMgIGRlZmluZSBVUEJfVEFCTEVfSU5JVChjb3VudCwgbWFzaywgY3R5cGUsIHNp
emVfbGcyLCBlbnRyaWVzKSBcCi0gICAgIHtjb3VudCwgbWFzaywgY3R5cGUsIHNpemVfbGcyLCBl
bnRyaWVzfQotI2Vsc2UKLSMgIGlmZGVmIFVQQl9ERUJVR19SRUZTCi0vKiBBdCB0aGUgbW9tZW50
IHRoZSBvbmx5IG11dGFibGUgdGFibGVzIHdlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZSBhcmUgZGVi
dWcKLSAqIHJlZiB0YWJsZXMuICovCi0jICAgIGRlZmluZSBVUEJfVEFCTEVfSU5JVChjb3VudCwg
bWFzaywgY3R5cGUsIHNpemVfbGcyLCBlbnRyaWVzKSBcCi0gICAgICAge2NvdW50LCBtYXNrLCBj
dHlwZSwgc2l6ZV9sZzIsIGVudHJpZXMsICZ1cGJfYWxsb2NfZGVidWdyZWZzfQotIyAgZWxzZQot
IyAgICBkZWZpbmUgVVBCX1RBQkxFX0lOSVQoY291bnQsIG1hc2ssIGN0eXBlLCBzaXplX2xnMiwg
ZW50cmllcykgXAotICAgICAgIHtjb3VudCwgbWFzaywgY3R5cGUsIHNpemVfbGcyLCBlbnRyaWVz
LCBOVUxMfQotIyAgZW5kaWYKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHVwYl90YWJs
ZSB0OwotfSB1cGJfc3RydGFibGU7Ci0KLSNkZWZpbmUgVVBCX1NUUlRBQkxFX0lOSVQoY291bnQs
IG1hc2ssIGN0eXBlLCBzaXplX2xnMiwgZW50cmllcykgXAotICB7VVBCX1RBQkxFX0lOSVQoY291
bnQsIG1hc2ssIGN0eXBlLCBzaXplX2xnMiwgZW50cmllcyl9Ci0KLSNkZWZpbmUgVVBCX0VNUFRZ
X1NUUlRBQkxFX0lOSVQoY3R5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBVUEJf
U1RSVEFCTEVfSU5JVCgwLCAwLCBjdHlwZSwgMCwgTlVMTCkKLQotdHlwZWRlZiBzdHJ1Y3Qgewot
ICB1cGJfdGFibGUgdDsgICAgICAgICAgICAgIC8qIEZvciBlbnRyaWVzIHRoYXQgZG9uJ3QgZml0
IGluIHRoZSBhcnJheSBwYXJ0LiAqLwotICBjb25zdCB1cGJfdGFidmFsICphcnJheTsgIC8qIEFy
cmF5IHBhcnQgb2YgdGhlIHRhYmxlLiBTZWUgY29uc3Qgbm90ZSBhYm92ZS4gKi8KLSAgc2l6ZV90
IGFycmF5X3NpemU7ICAgICAgICAvKiBBcnJheSBwYXJ0IHNpemUuICovCi0gIHNpemVfdCBhcnJh
eV9jb3VudDsgICAgICAgLyogQXJyYXkgcGFydCBudW1iZXIgb2YgZWxlbWVudHMuICovCi19IHVw
Yl9pbnR0YWJsZTsKLQotI2RlZmluZSBVUEJfSU5UVEFCTEVfSU5JVChjb3VudCwgbWFzaywgY3R5
cGUsIHNpemVfbGcyLCBlbnQsIGEsIGFzaXplLCBhY291bnQpIFwKLSAge1VQQl9UQUJMRV9JTklU
KGNvdW50LCBtYXNrLCBjdHlwZSwgc2l6ZV9sZzIsIGVudCksIGEsIGFzaXplLCBhY291bnR9Ci0K
LSNkZWZpbmUgVVBCX0VNUFRZX0lOVFRBQkxFX0lOSVQoY3R5cGUpIFwKLSAgVVBCX0lOVFRBQkxF
X0lOSVQoMCwgMCwgY3R5cGUsIDAsIE5VTEwsIE5VTEwsIDAsIDApCi0KLSNkZWZpbmUgVVBCX0FS
UkFZX0VNUFRZRU5UIC0xCi0KLVVQQl9JTkxJTkUgc2l6ZV90IHVwYl90YWJsZV9zaXplKGNvbnN0
IHVwYl90YWJsZSAqdCkgewotICBpZiAodC0+c2l6ZV9sZzIgPT0gMCkKLSAgICByZXR1cm4gMDsK
LSAgZWxzZQotICAgIHJldHVybiAxIDw8IHQtPnNpemVfbGcyOwotfQotCi0vKiBJbnRlcm5hbC1v
bmx5IGZ1bmN0aW9ucywgaW4gLmggZmlsZSBvbmx5IG91dCBvZiBuZWNlc3NpdHkuICovCi1VUEJf
SU5MSU5FIGJvb2wgdXBiX3RhYmVudF9pc2VtcHR5KGNvbnN0IHVwYl90YWJlbnQgKmUpIHsKLSAg
cmV0dXJuIGUtPmtleSA9PSAwOwotfQotCi0vKiBVc2VkIGJ5IHNvbWUgb2YgdGhlIHVuaXQgdGVz
dHMgZm9yIGdlbmVyaWMgaGFzaGluZyBmdW5jdGlvbmFsaXR5LiAqLwotdWludDMyX3QgTXVybXVy
SGFzaDIoY29uc3Qgdm9pZCAqIGtleSwgc2l6ZV90IGxlbiwgdWludDMyX3Qgc2VlZCk7Ci0KLVVQ
Ql9JTkxJTkUgdWludHB0cl90IHVwYl9pbnRrZXkodWludHB0cl90IGtleSkgewotICByZXR1cm4g
a2V5OwotfQotCi1VUEJfSU5MSU5FIHVpbnQzMl90IHVwYl9pbnRoYXNoKHVpbnRwdHJfdCBrZXkp
IHsKLSAgcmV0dXJuICh1aW50MzJfdClrZXk7Ci19Ci0KLXN0YXRpYyBjb25zdCB1cGJfdGFiZW50
ICp1cGJfZ2V0ZW50cnkoY29uc3QgdXBiX3RhYmxlICp0LCB1aW50MzJfdCBoYXNoKSB7Ci0gIHJl
dHVybiB0LT5lbnRyaWVzICsgKGhhc2ggJiB0LT5tYXNrKTsKLX0KLQotVVBCX0lOTElORSBib29s
IHVwYl9hcnJoYXModXBiX3RhYnZhbCBrZXkpIHsKLSAgcmV0dXJuIGtleS52YWwgIT0gKHVpbnQ2
NF90KS0xOwotfQotCi0vKiBJbml0aWFsaXplIGFuZCB1bmluaXRpYWxpemUgYSB0YWJsZSwgcmVz
cGVjdGl2ZWx5LiAgSWYgbWVtb3J5IGFsbG9jYXRpb24KLSAqIGZhaWxlZCwgZmFsc2UgaXMgcmV0
dXJuZWQgdGhhdCB0aGUgdGFibGUgaXMgdW5pbml0aWFsaXplZC4gKi8KLWJvb2wgdXBiX2ludHRh
YmxlX2luaXQyKHVwYl9pbnR0YWJsZSAqdGFibGUsIHVwYl9jdHlwZV90IGN0eXBlLCB1cGJfYWxs
b2MgKmEpOwotYm9vbCB1cGJfc3RydGFibGVfaW5pdDIodXBiX3N0cnRhYmxlICp0YWJsZSwgdXBi
X2N0eXBlX3QgY3R5cGUsIHVwYl9hbGxvYyAqYSk7Ci12b2lkIHVwYl9pbnR0YWJsZV91bmluaXQy
KHVwYl9pbnR0YWJsZSAqdGFibGUsIHVwYl9hbGxvYyAqYSk7Ci12b2lkIHVwYl9zdHJ0YWJsZV91
bmluaXQyKHVwYl9zdHJ0YWJsZSAqdGFibGUsIHVwYl9hbGxvYyAqYSk7Ci0KLVVQQl9JTkxJTkUg
Ym9vbCB1cGJfaW50dGFibGVfaW5pdCh1cGJfaW50dGFibGUgKnRhYmxlLCB1cGJfY3R5cGVfdCBj
dHlwZSkgewotICByZXR1cm4gdXBiX2ludHRhYmxlX2luaXQyKHRhYmxlLCBjdHlwZSwgJnVwYl9h
bGxvY19nbG9iYWwpOwotfQotCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3N0cnRhYmxlX2luaXQodXBi
X3N0cnRhYmxlICp0YWJsZSwgdXBiX2N0eXBlX3QgY3R5cGUpIHsKLSAgcmV0dXJuIHVwYl9zdHJ0
YWJsZV9pbml0Mih0YWJsZSwgY3R5cGUsICZ1cGJfYWxsb2NfZ2xvYmFsKTsKLX0KLQotVVBCX0lO
TElORSB2b2lkIHVwYl9pbnR0YWJsZV91bmluaXQodXBiX2ludHRhYmxlICp0YWJsZSkgewotICB1
cGJfaW50dGFibGVfdW5pbml0Mih0YWJsZSwgJnVwYl9hbGxvY19nbG9iYWwpOwotfQotCi1VUEJf
SU5MSU5FIHZvaWQgdXBiX3N0cnRhYmxlX3VuaW5pdCh1cGJfc3RydGFibGUgKnRhYmxlKSB7Ci0g
IHVwYl9zdHJ0YWJsZV91bmluaXQyKHRhYmxlLCAmdXBiX2FsbG9jX2dsb2JhbCk7Ci19Ci0KLS8q
IFJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIHRhYmxlLiAqLwotc2l6ZV90IHVw
Yl9pbnR0YWJsZV9jb3VudChjb25zdCB1cGJfaW50dGFibGUgKnQpOwotVVBCX0lOTElORSBzaXpl
X3QgdXBiX3N0cnRhYmxlX2NvdW50KGNvbnN0IHVwYl9zdHJ0YWJsZSAqdCkgewotICByZXR1cm4g
dC0+dC5jb3VudDsKLX0KLQotLyogSW5zZXJ0cyB0aGUgZ2l2ZW4ga2V5IGludG8gdGhlIGhhc2h0
YWJsZSB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4gIFRoZSBrZXkgbXVzdAotICogbm90IGFscmVhZHkg
ZXhpc3QgaW4gdGhlIGhhc2ggdGFibGUuICBGb3Igc3RyaW5nIHRhYmxlcywgdGhlIGtleSBtdXN0
IGJlCi0gKiBOVUxMLXRlcm1pbmF0ZWQsIGFuZCB0aGUgdGFibGUgd2lsbCBtYWtlIGFuIGludGVy
bmFsIGNvcHkgb2YgdGhlIGtleS4KLSAqIEludHRhYmxlcyBtdXN0IG5vdCBpbnNlcnQgYSB2YWx1
ZSBvZiBVSU5UUFRSX01BWC4KLSAqCi0gKiBJZiBhIHRhYmxlIHJlc2l6ZSB3YXMgcmVxdWlyZWQg
YnV0IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwgZmFsc2UgaXMKLSAqIHJldHVybmVkIGFuZCB0
aGUgdGFibGUgaXMgdW5jaGFuZ2VkLiAqLwotYm9vbCB1cGJfaW50dGFibGVfaW5zZXJ0Mih1cGJf
aW50dGFibGUgKnQsIHVpbnRwdHJfdCBrZXksIHVwYl92YWx1ZSB2YWwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIHVwYl9hbGxvYyAqYSk7Ci1ib29sIHVwYl9zdHJ0YWJsZV9pbnNlcnQzKHVw
Yl9zdHJ0YWJsZSAqdCwgY29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cGJfdmFsdWUgdmFsLCB1cGJfYWxsb2MgKmEpOwotCi1VUEJfSU5MSU5F
IGJvb2wgdXBiX2ludHRhYmxlX2luc2VydCh1cGJfaW50dGFibGUgKnQsIHVpbnRwdHJfdCBrZXks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfdmFsdWUgdmFsKSB7Ci0g
IHJldHVybiB1cGJfaW50dGFibGVfaW5zZXJ0Mih0LCBrZXksIHZhbCwgJnVwYl9hbGxvY19nbG9i
YWwpOwotfQotCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3N0cnRhYmxlX2luc2VydDIodXBiX3N0cnRh
YmxlICp0LCBjb25zdCBjaGFyICprZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGxlbiwgdXBiX3ZhbHVlIHZhbCkgewotICByZXR1cm4gdXBiX3N0cnRhYmxl
X2luc2VydDModCwga2V5LCBsZW4sIHZhbCwgJnVwYl9hbGxvY19nbG9iYWwpOwotfQotCi0vKiBG
b3IgTlVMTC10ZXJtaW5hdGVkIHN0cmluZ3MuICovCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3N0cnRh
YmxlX2luc2VydCh1cGJfc3RydGFibGUgKnQsIGNvbnN0IGNoYXIgKmtleSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl92YWx1ZSB2YWwpIHsKLSAgcmV0dXJuIHVwYl9z
dHJ0YWJsZV9pbnNlcnQyKHQsIGtleSwgc3RybGVuKGtleSksIHZhbCk7Ci19Ci0KLS8qIExvb2tz
IHVwIGtleSBpbiB0aGlzIHRhYmxlLCByZXR1cm5pbmcgInRydWUiIGlmIHRoZSBrZXkgd2FzIGZv
dW5kLgotICogSWYgdiBpcyBub24tTlVMTCwgY29waWVzIHRoZSB2YWx1ZSBmb3IgdGhpcyBrZXkg
aW50byAqdi4gKi8KLWJvb2wgdXBiX2ludHRhYmxlX2xvb2t1cChjb25zdCB1cGJfaW50dGFibGUg
KnQsIHVpbnRwdHJfdCBrZXksIHVwYl92YWx1ZSAqdik7Ci1ib29sIHVwYl9zdHJ0YWJsZV9sb29r
dXAyKGNvbnN0IHVwYl9zdHJ0YWJsZSAqdCwgY29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfdmFsdWUgKnYpOwotCi0vKiBGb3IgTlVMTC10
ZXJtaW5hdGVkIHN0cmluZ3MuICovCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3N0cnRhYmxlX2xvb2t1
cChjb25zdCB1cGJfc3RydGFibGUgKnQsIGNvbnN0IGNoYXIgKmtleSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwYl92YWx1ZSAqdikgewotICByZXR1cm4gdXBiX3N0cnRh
YmxlX2xvb2t1cDIodCwga2V5LCBzdHJsZW4oa2V5KSwgdik7Ci19Ci0KLS8qIFJlbW92ZXMgYW4g
aXRlbSBmcm9tIHRoZSB0YWJsZS4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVtb3ZlIHdhcyBzdWNj
ZXNzZnVsLAotICogYW5kIHN0b3JlcyB0aGUgcmVtb3ZlZCBpdGVtIGluICp2YWwgaWYgbm9uLU5V
TEwuICovCi1ib29sIHVwYl9pbnR0YWJsZV9yZW1vdmUodXBiX2ludHRhYmxlICp0LCB1aW50cHRy
X3Qga2V5LCB1cGJfdmFsdWUgKnZhbCk7Ci1ib29sIHVwYl9zdHJ0YWJsZV9yZW1vdmUzKHVwYl9z
dHJ0YWJsZSAqdCwgY29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cGJfdmFsdWUgKnZhbCwgdXBiX2FsbG9jICphbGxvYyk7Ci0KLVVQQl9JTkxJ
TkUgYm9vbCB1cGJfc3RydGFibGVfcmVtb3ZlMih1cGJfc3RydGFibGUgKnQsIGNvbnN0IGNoYXIg
KmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCB1
cGJfdmFsdWUgKnZhbCkgewotICByZXR1cm4gdXBiX3N0cnRhYmxlX3JlbW92ZTModCwga2V5LCBs
ZW4sIHZhbCwgJnVwYl9hbGxvY19nbG9iYWwpOwotfQotCi0vKiBGb3IgTlVMTC10ZXJtaW5hdGVk
IHN0cmluZ3MuICovCi1VUEJfSU5MSU5FIGJvb2wgdXBiX3N0cnRhYmxlX3JlbW92ZSh1cGJfc3Ry
dGFibGUgKnQsIGNvbnN0IGNoYXIgKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwYl92YWx1ZSAqdikgewotICByZXR1cm4gdXBiX3N0cnRhYmxlX3JlbW92ZTIodCwg
a2V5LCBzdHJsZW4oa2V5KSwgdik7Ci19Ci0KLS8qIFVwZGF0ZXMgYW4gZXhpc3RpbmcgZW50cnkg
aW4gYW4gaW50dGFibGUuICBJZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QsCi0gKiByZXR1cm5z
IGZhbHNlIGFuZCBkb2VzIG5vdGhpbmcuICBVbmxpa2UgaW5zZXJ0L3JlbW92ZSwgdGhpcyBkb2Vz
IG5vdAotICogaW52YWxpZGF0ZSBpdGVyYXRvcnMuICovCi1ib29sIHVwYl9pbnR0YWJsZV9yZXBs
YWNlKHVwYl9pbnR0YWJsZSAqdCwgdWludHB0cl90IGtleSwgdXBiX3ZhbHVlIHZhbCk7Ci0KLS8q
IEhhbmR5IHJvdXRpbmVzIGZvciB0cmVhdGluZyBhbiBpbnR0YWJsZSBsaWtlIGEgc3RhY2suICBN
YXkgbm90IGJlIG1peGVkIHdpdGgKLSAqIG90aGVyIGluc2VydC9yZW1vdmUgY2FsbHMuICovCi1i
b29sIHVwYl9pbnR0YWJsZV9wdXNoMih1cGJfaW50dGFibGUgKnQsIHVwYl92YWx1ZSB2YWwsIHVw
Yl9hbGxvYyAqYSk7Ci11cGJfdmFsdWUgdXBiX2ludHRhYmxlX3BvcCh1cGJfaW50dGFibGUgKnQp
OwotCi1VUEJfSU5MSU5FIGJvb2wgdXBiX2ludHRhYmxlX3B1c2godXBiX2ludHRhYmxlICp0LCB1
cGJfdmFsdWUgdmFsKSB7Ci0gIHJldHVybiB1cGJfaW50dGFibGVfcHVzaDIodCwgdmFsLCAmdXBi
X2FsbG9jX2dsb2JhbCk7Ci19Ci0KLS8qIENvbnZlbmllbmNlIHJvdXRpbmVzIGZvciBpbnR0YWJs
ZXMgd2l0aCBwb2ludGVyIGtleXMuICovCi1ib29sIHVwYl9pbnR0YWJsZV9pbnNlcnRwdHIyKHVw
Yl9pbnR0YWJsZSAqdCwgY29uc3Qgdm9pZCAqa2V5LCB1cGJfdmFsdWUgdmFsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cGJfYWxsb2MgKmEpOwotYm9vbCB1cGJfaW50dGFibGVfcmVt
b3ZlcHRyKHVwYl9pbnR0YWJsZSAqdCwgY29uc3Qgdm9pZCAqa2V5LCB1cGJfdmFsdWUgKnZhbCk7
Ci1ib29sIHVwYl9pbnR0YWJsZV9sb29rdXBwdHIoCi0gICAgY29uc3QgdXBiX2ludHRhYmxlICp0
LCBjb25zdCB2b2lkICprZXksIHVwYl92YWx1ZSAqdmFsKTsKLQotVVBCX0lOTElORSBib29sIHVw
Yl9pbnR0YWJsZV9pbnNlcnRwdHIodXBiX2ludHRhYmxlICp0LCBjb25zdCB2b2lkICprZXksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfdmFsdWUgdmFsKSB7Ci0g
IHJldHVybiB1cGJfaW50dGFibGVfaW5zZXJ0cHRyMih0LCBrZXksIHZhbCwgJnVwYl9hbGxvY19n
bG9iYWwpOwotfQotCi0vKiBPcHRpbWl6ZXMgdGhlIHRhYmxlIGZvciB0aGUgY3VycmVudCBzZXQg
b2YgZW50cmllcywgZm9yIGJvdGggbWVtb3J5IHVzZSBhbmQKLSAqIGxvb2t1cCB0aW1lLiAgQ2xp
ZW50IHNob3VsZCBjYWxsIHRoaXMgYWZ0ZXIgYWxsIGVudHJpZXMgaGF2ZSBiZWVuIGluc2VydGVk
OwotICogaW5zZXJ0aW5nIG1vcmUgZW50cmllcyBpcyBsZWdhbCwgYnV0IHdpbGwgbGlrZWx5IHJl
cXVpcmUgYSB0YWJsZSByZXNpemUuICovCi12b2lkIHVwYl9pbnR0YWJsZV9jb21wYWN0Mih1cGJf
aW50dGFibGUgKnQsIHVwYl9hbGxvYyAqYSk7Ci0KLVVQQl9JTkxJTkUgdm9pZCB1cGJfaW50dGFi
bGVfY29tcGFjdCh1cGJfaW50dGFibGUgKnQpIHsKLSAgdXBiX2ludHRhYmxlX2NvbXBhY3QyKHQs
ICZ1cGJfYWxsb2NfZ2xvYmFsKTsKLX0KLQotLyogQSBzcGVjaWFsLWNhc2UgaW5saW5hYmxlIHZl
cnNpb24gb2YgdGhlIGxvb2t1cCByb3V0aW5lIGZvciAzMi1iaXQKLSAqIGludGVnZXJzLiAqLwot
VVBCX0lOTElORSBib29sIHVwYl9pbnR0YWJsZV9sb29rdXAzMihjb25zdCB1cGJfaW50dGFibGUg
KnQsIHVpbnQzMl90IGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXBiX3ZhbHVlICp2KSB7Ci0gICp2ID0gdXBiX3ZhbHVlX2ludDMyKDApOyAgLyogU2lsZW5jZSBj
b21waWxlciB3YXJuaW5ncy4gKi8KLSAgaWYgKGtleSA8IHQtPmFycmF5X3NpemUpIHsKLSAgICB1
cGJfdGFidmFsIGFycnZhbCA9IHQtPmFycmF5W2tleV07Ci0gICAgaWYgKHVwYl9hcnJoYXMoYXJy
dmFsKSkgewotICAgICAgX3VwYl92YWx1ZV9zZXR2YWwodiwgYXJydmFsLnZhbCwgdC0+dC5jdHlw
ZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBjb25zdCB1cGJfdGFiZW50ICplOwotICAgIGlmICh0
LT50LmVudHJpZXMgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoZSA9IHVwYl9nZXRl
bnRyeSgmdC0+dCwgdXBiX2ludGhhc2goa2V5KSk7IHRydWU7IGUgPSBlLT5uZXh0KSB7Ci0gICAg
ICBpZiAoKHVpbnQzMl90KWUtPmtleSA9PSBrZXkpIHsKLSAgICAgICAgX3VwYl92YWx1ZV9zZXR2
YWwodiwgZS0+dmFsLnZhbCwgdC0+dC5jdHlwZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgfQotICAgICAgaWYgKGUtPm5leHQgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
fQotfQotCi0vKiBFeHBvc2VkIGZvciB0ZXN0aW5nIG9ubHkuICovCi1ib29sIHVwYl9zdHJ0YWJs
ZV9yZXNpemUodXBiX3N0cnRhYmxlICp0LCBzaXplX3Qgc2l6ZV9sZzIsIHVwYl9hbGxvYyAqYSk7
Ci0KLS8qIEl0ZXJhdG9ycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEl0ZXJhdG9ycyBmb3IgaW50IGFuZCBz
dHJpbmcgdGFibGVzLiAgV2UgYXJlIHN1YmplY3QgdG8gc29tZSBraW5kIG9mIHVudXN1YWwKLSAq
IGRlc2lnbiBjb25zdHJhaW50czoKLSAqCi0gKiBGb3IgaGlnaC1sZXZlbCBsYW5ndWFnZXM6Ci0g
KiAgLSB3ZSBtdXN0IGJlIGFibGUgdG8gZ3VhcmFudGVlIHRoYXQgd2UgZG9uJ3QgY3Jhc2ggb3Ig
Y29ycnVwdCBtZW1vcnkgZXZlbiBpZgotICogICAgdGhlIHByb2dyYW0gYWNjZXNzZXMgYW4gaW52
YWxpZGF0ZWQgaXRlcmF0b3IuCi0gKgotICogRm9yIEMrKzExIHJhbmdlLWJhc2VkIGZvcjoKLSAq
ICAtIGl0ZXJhdG9ycyBtdXN0IGJlIGNvcHlhYmxlCi0gKiAgLSBpdGVyYXRvcnMgbXVzdCBiZSBj
b21wYXJhYmxlCi0gKiAgLSBpdCBtdXN0IGJlIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCBhbiAiZW5k
IiB2YWx1ZS4KLSAqCi0gKiBJdGVyYXRpb24gb3JkZXIgaXMgdW5kZWZpbmVkLgotICoKLSAqIE1v
ZGlmeWluZyB0aGUgdGFibGUgaW52YWxpZGF0ZXMgaXRlcmF0b3JzLiAgdXBiX3tzdHIsaW50fXRh
YmxlX2RvbmUoKSBpcwotICogZ3VhcmFudGVlZCB0byB3b3JrIGV2ZW4gb24gYW4gaW52YWxpZGF0
ZWQgaXRlcmF0b3IsIGFzIGxvbmcgYXMgdGhlIHRhYmxlIGl0Ci0gKiBpcyBpdGVyYXRpbmcgb3Zl
ciBoYXMgbm90IGJlZW4gZnJlZWQuICBDYWxsaW5nIG5leHQoKSBvciBhY2Nlc3NpbmcgZGF0YSBm
cm9tCi0gKiBhbiBpbnZhbGlkYXRlZCBpdGVyYXRvciB5aWVsZHMgdW5zcGVjaWZpZWQgZWxlbWVu
dHMgZnJvbSB0aGUgdGFibGUsIGJ1dCBpdCBpcwotICogZ3VhcmFudGVlZCBub3QgdG8gY3Jhc2gg
YW5kIHRvIHJldHVybiByZWFsIHRhYmxlIGVsZW1lbnRzIChleGNlcHQgd2hlbiBkb25lKCkKLSAq
IGlzIHRydWUpLiAqLwotCi0KLS8qIHVwYl9zdHJ0YWJsZV9pdGVyICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qICAgdXBiX3N0
cnRhYmxlX2l0ZXIgaTsKLSAqICAgdXBiX3N0cnRhYmxlX2JlZ2luKCZpLCB0KTsKLSAqICAgZm9y
KDsgIXVwYl9zdHJ0YWJsZV9kb25lKCZpKTsgdXBiX3N0cnRhYmxlX25leHQoJmkpKSB7Ci0gKiAg
ICAgY29uc3QgY2hhciAqa2V5ID0gdXBiX3N0cnRhYmxlX2l0ZXJfa2V5KCZpKTsKLSAqICAgICBj
b25zdCB1cGJfdmFsdWUgdmFsID0gdXBiX3N0cnRhYmxlX2l0ZXJfdmFsdWUoJmkpOwotICogICAg
IC8vIC4uLgotICogICB9Ci0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCB1cGJfc3Ry
dGFibGUgKnQ7Ci0gIHNpemVfdCBpbmRleDsKLX0gdXBiX3N0cnRhYmxlX2l0ZXI7Ci0KLXZvaWQg
dXBiX3N0cnRhYmxlX2JlZ2luKHVwYl9zdHJ0YWJsZV9pdGVyICppLCBjb25zdCB1cGJfc3RydGFi
bGUgKnQpOwotdm9pZCB1cGJfc3RydGFibGVfbmV4dCh1cGJfc3RydGFibGVfaXRlciAqaSk7Ci1i
b29sIHVwYl9zdHJ0YWJsZV9kb25lKGNvbnN0IHVwYl9zdHJ0YWJsZV9pdGVyICppKTsKLWNvbnN0
IGNoYXIgKnVwYl9zdHJ0YWJsZV9pdGVyX2tleShjb25zdCB1cGJfc3RydGFibGVfaXRlciAqaSk7
Ci1zaXplX3QgdXBiX3N0cnRhYmxlX2l0ZXJfa2V5bGVuZ3RoKGNvbnN0IHVwYl9zdHJ0YWJsZV9p
dGVyICppKTsKLXVwYl92YWx1ZSB1cGJfc3RydGFibGVfaXRlcl92YWx1ZShjb25zdCB1cGJfc3Ry
dGFibGVfaXRlciAqaSk7Ci12b2lkIHVwYl9zdHJ0YWJsZV9pdGVyX3NldGRvbmUodXBiX3N0cnRh
YmxlX2l0ZXIgKmkpOwotYm9vbCB1cGJfc3RydGFibGVfaXRlcl9pc2VxdWFsKGNvbnN0IHVwYl9z
dHJ0YWJsZV9pdGVyICppMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
cGJfc3RydGFibGVfaXRlciAqaTIpOwotCi0KLS8qIHVwYl9pbnR0YWJsZV9pdGVyICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8q
ICAgdXBiX2ludHRhYmxlX2l0ZXIgaTsKLSAqICAgdXBiX2ludHRhYmxlX2JlZ2luKCZpLCB0KTsK
LSAqICAgZm9yKDsgIXVwYl9pbnR0YWJsZV9kb25lKCZpKTsgdXBiX2ludHRhYmxlX25leHQoJmkp
KSB7Ci0gKiAgICAgdWludHB0cl90IGtleSA9IHVwYl9pbnR0YWJsZV9pdGVyX2tleSgmaSk7Ci0g
KiAgICAgdXBiX3ZhbHVlIHZhbCA9IHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVlKCZpKTsKLSAqICAg
ICAvLyAuLi4KLSAqICAgfQotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgY29uc3QgdXBiX2lu
dHRhYmxlICp0OwotICBzaXplX3QgaW5kZXg7Ci0gIGJvb2wgYXJyYXlfcGFydDsKLX0gdXBiX2lu
dHRhYmxlX2l0ZXI7Ci0KLXZvaWQgdXBiX2ludHRhYmxlX2JlZ2luKHVwYl9pbnR0YWJsZV9pdGVy
ICppLCBjb25zdCB1cGJfaW50dGFibGUgKnQpOwotdm9pZCB1cGJfaW50dGFibGVfbmV4dCh1cGJf
aW50dGFibGVfaXRlciAqaSk7Ci1ib29sIHVwYl9pbnR0YWJsZV9kb25lKGNvbnN0IHVwYl9pbnR0
YWJsZV9pdGVyICppKTsKLXVpbnRwdHJfdCB1cGJfaW50dGFibGVfaXRlcl9rZXkoY29uc3QgdXBi
X2ludHRhYmxlX2l0ZXIgKmkpOwotdXBiX3ZhbHVlIHVwYl9pbnR0YWJsZV9pdGVyX3ZhbHVlKGNv
bnN0IHVwYl9pbnR0YWJsZV9pdGVyICppKTsKLXZvaWQgdXBiX2ludHRhYmxlX2l0ZXJfc2V0ZG9u
ZSh1cGJfaW50dGFibGVfaXRlciAqaSk7Ci1ib29sIHVwYl9pbnR0YWJsZV9pdGVyX2lzZXF1YWwo
Y29uc3QgdXBiX2ludHRhYmxlX2l0ZXIgKmkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVwYl9pbnR0YWJsZV9pdGVyICppMik7Ci0KLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci19ICAvKiBleHRlcm4gIkMiICovCi0jZW5kaWYKLQotI2VuZGlmICAvKiBVUEJfVEFCTEVfSF8g
Ki8KLQotLyogUmVmZXJlbmNlIHRyYWNraW5nIHdpbGwgY2hlY2sgcmVmKCkvdW5yZWYoKSBvcGVy
YXRpb25zIHRvIG1ha2Ugc3VyZSB0aGUKLSAqIHJlZiBvd25lcnNoaXAgaXMgY29ycmVjdC4gIFdo
ZXJlIHBvc3NpYmxlIGl0IHdpbGwgYWxzbyBtYWtlIHRvb2xzIGxpa2UKLSAqIFZhbGdyaW5kIGF0
dHJpYnV0ZSByZWYgbGVha3MgdG8gdGhlIGNvZGUgdGhhdCB0b29rIHRoZSBsZWFrZWQgcmVmLCBu
b3QKLSAqIHRoZSBjb2RlIHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoZSBvYmplY3QuCi0gKgot
ICogRW5hYmxpbmcgdGhpcyByZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8gZGVmaW5lIHVwYl9s
b2NrKCkvdXBiX3VubG9jaygpCi0gKiBmdW5jdGlvbnMgdGhhdCBhY3F1aXJlL3JlbGVhc2UgYSBn
bG9iYWwgbXV0ZXggKG9yICNkZWZpbmUgVVBCX1RIUkVBRF9VTlNBRkUpLgotICogRm9yIHRoaXMg
cmVhc29uIHdlIGRvbid0IGVuYWJsZSBpdCBieSBkZWZhdWx0LCBldmVuIGluIGRlYnVnIGJ1aWxk
cy4KLSAqLwotCi0vKiAjZGVmaW5lIFVQQl9ERUJVR19SRUZTICovCi0KLSNpZmRlZiBfX2NwbHVz
cGx1cwotbmFtZXNwYWNlIHVwYiB7Ci1jbGFzcyBSZWZDb3VudGVkOwotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNsYXNzIHJlZmZlZF9wdHI7Ci19Ci0jZW5kaWYKLQotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6
OlJlZkNvdW50ZWQsIHVwYl9yZWZjb3VudGVkKQotCi1zdHJ1Y3QgdXBiX3JlZmNvdW50ZWRfdnRi
bDsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLWNsYXNzIHVwYjo6UmVmQ291bnRlZCB7Ci0gcHVi
bGljOgotICAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG9iamVjdCBpcyBmcm96ZW4uICov
Ci0gIGJvb2wgSXNGcm96ZW4oKSBjb25zdDsKLQotICAvKiBJbmNyZWFzZXMgdGhlIHJlZiBjb3Vu
dCwgdGhlIG5ldyByZWYgaXMgb3duZWQgYnkgIm93bmVyIiB3aGljaCBtdXN0IG5vdAotICAgKiBh
bHJlYWR5IG93biBhIHJlZiAoYW5kIHNob3VsZCBub3QgaXRzZWxmIGJlIGEgcmVmY291bnRlZCBv
YmplY3QgaWYgdGhlIHJlZgotICAgKiBjb3VsZCBwb3NzaWJseSBiZSBjaXJjdWxhcjsgc2VlIGJl
bG93KS4KLSAgICogVGhyZWFkLXNhZmUgaWZmICJ0aGlzIiBpcyBmcm96ZW4uICovCi0gIHZvaWQg
UmVmKGNvbnN0IHZvaWQgKm93bmVyKSBjb25zdDsKLQotICAvKiBSZWxlYXNlIGEgcmVmIHRoYXQg
d2FzIGFjcXVpcmVkIGZyb20gdXBiX3JlZmNvdW50ZWRfcmVmKCkgYW5kIGNvbGxlY3RzIGFueQot
ICAgKiBvYmplY3RzIGl0IGNhbi4gKi8KLSAgdm9pZCBVbnJlZihjb25zdCB2b2lkICpvd25lcikg
Y29uc3Q7Ci0KLSAgLyogTW92ZXMgYW4gZXhpc3RpbmcgcmVmIGZyb20gImZyb20iIHRvICJ0byIs
IHdpdGhvdXQgY2hhbmdpbmcgdGhlIG92ZXJhbGwKLSAgICogcmVmIGNvdW50LiAgRG9uYXRlUmVm
KGZvbywgTlVMTCwgb3duZXIpIGlzIHRoZSBzYW1lIGFzIFJlZihmb28sIG93bmVyKSwKLSAgICog
YnV0ICJ0byIgbWF5IG5vdCBiZSBOVUxMLiAqLwotICB2b2lkIERvbmF0ZVJlZihjb25zdCB2b2lk
ICpmcm9tLCBjb25zdCB2b2lkICp0bykgY29uc3Q7Ci0KLSAgLyogVmVyaWZpZXMgdGhhdCBhIHJl
ZiB0byB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGN1cnJlbnRseSBoZWxkIGJ5IHRoZSBnaXZlbgotICAg
KiBvd25lci4gIE9ubHkgZWZmZWN0aXZlIGluIFVQQl9ERUJVR19SRUZTIGJ1aWxkcy4gKi8KLSAg
dm9pZCBDaGVja1JlZihjb25zdCB2b2lkICpvd25lcikgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBV
UEJfRElTQUxMT1dfUE9EX09QUyhSZWZDb3VudGVkLCB1cGI6OlJlZkNvdW50ZWQpCi0jZWxzZQot
c3RydWN0IHVwYl9yZWZjb3VudGVkIHsKLSNlbmRpZgotICAvKiBUT0RPKGhhYmVybWFuKTogbW92
ZSB0aGUgYWN0dWFsIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvIHN0cnVjdGRlZnMuaW50LmguCi0g
ICAqIFRoZSBvbmx5IHJlYXNvbiB0aGV5IGFyZSBoZXJlIGlzIGJlY2F1c2UgaW5saW5lIGZ1bmN0
aW9ucyBuZWVkIHRvIHNlZSB0aGUKLSAgICogZGVmaW5pdGlvbiBvZiB1cGJfaGFuZGxlcnMsIHdo
aWNoIG5lZWRzIHRvIHNlZSB0aGlzIGRlZmluaXRpb24uICBCdXQgd2UKLSAgICogY2FuIGNoYW5n
ZSB0aGUgdXBiX2hhbmRsZXJzIGlubGluZSBmdW5jdGlvbnMgdG8gZGVhbCBpbiByYXcgb2Zmc2V0
cwotICAgKiBpbnN0ZWFkLgotICAgKi8KLQotICAvKiBBIHNpbmdsZSByZWZlcmVuY2UgY291bnQg
c2hhcmVkIGJ5IGFsbCBvYmplY3RzIGluIHRoZSBncm91cC4gKi8KLSAgdWludDMyX3QgKmdyb3Vw
OwotCi0gIC8qIEEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGFsbCBvYmplY3RzIGluIHRoZSBncm91
cC4gKi8KLSAgdXBiX3JlZmNvdW50ZWQgKm5leHQ7Ci0KLSAgLyogVGFibGUgb2YgZnVuY3Rpb24g
cG9pbnRlcnMgZm9yIHRoaXMgdHlwZS4gKi8KLSAgY29uc3Qgc3RydWN0IHVwYl9yZWZjb3VudGVk
X3Z0YmwgKnZ0Ymw7Ci0KLSAgLyogTWFpbnRhaW5lZCBvbmx5IHdoZW4gbXV0YWJsZSwgdGhpcyB0
cmFja3MgdGhlIG51bWJlciBvZiByZWZzIChidXQgbm90Ci0gICAqIHJlZjIncykgdG8gdGhpcyBv
YmplY3QuICAqZ3JvdXAgc2hvdWxkIGJlIHRoZSBzdW0gb2YgYWxsIGluZGl2aWR1YWxfY291bnQK
LSAgICogaW4gdGhlIGdyb3VwLiAqLwotICB1aW50MzJfdCBpbmRpdmlkdWFsX2NvdW50OwotCi0g
IGJvb2wgaXNfZnJvemVuOwotCi0jaWZkZWYgVVBCX0RFQlVHX1JFRlMKLSAgdXBiX2ludHRhYmxl
ICpyZWZzOyAgLyogTWFwcyBvd25lciAtPiB0cmFja2VkcmVmIGZvciBpbmNvbWluZyByZWZzLiAq
LwotICB1cGJfaW50dGFibGUgKnJlZjJzOyAvKiBTZXQgb2YgdGFyZ2V0cyBmb3Igb3V0Z29pbmcg
cmVmMnMuICovCi0jZW5kaWYKLX07Ci0KLSNpZmRlZiBVUEJfREVCVUdfUkVGUwotZXh0ZXJuIHVw
Yl9hbGxvYyB1cGJfYWxsb2NfZGVidWdyZWZzOwotI2RlZmluZSBVUEJfUkVGQ09VTlRfSU5JVCh2
dGJsLCByZWZzLCByZWYycykgXAotICAgIHsmc3RhdGljX3JlZmNvdW50LCBOVUxMLCB2dGJsLCAw
LCB0cnVlLCByZWZzLCByZWYyc30KLSNlbHNlCi0jZGVmaW5lIFVQQl9SRUZDT1VOVF9JTklUKHZ0
YmwsIHJlZnMsIHJlZjJzKSBcCi0gICAgeyZzdGF0aWNfcmVmY291bnQsIE5VTEwsIHZ0YmwsIDAs
IHRydWV9Ci0jZW5kaWYKLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLS8qIEl0IGlzIGJldHRlciB0
byB1c2UgdHJhY2tlZCByZWZzIHdoZW4gcG9zc2libGUsIGZvciB0aGUgZXh0cmEgZGVidWdnaW5n
Ci0gKiBjYXBhYmlsaXR5LiAgQnV0IGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlIChiZWNhdXNlIHlv
dSBkb24ndCBoYXZlIGVhc3kgYWNjZXNzCi0gKiB0byBhIHN0YWJsZSBwb2ludGVyIHZhbHVlIHRo
YXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWYpLCB5b3UgY2FuIHBhc3MKLSAqIFVQQl9VTlRS
QUNLRURfUkVGIGluc3RlYWQuICAqLwotZXh0ZXJuIGNvbnN0IHZvaWQgKlVQQl9VTlRSQUNLRURf
UkVGOwotCi0vKiBOYXRpdmUgQyBBUEkuICovCi1ib29sIHVwYl9yZWZjb3VudGVkX2lzZnJvemVu
KGNvbnN0IHVwYl9yZWZjb3VudGVkICpyKTsKLXZvaWQgdXBiX3JlZmNvdW50ZWRfcmVmKGNvbnN0
IHVwYl9yZWZjb3VudGVkICpyLCBjb25zdCB2b2lkICpvd25lcik7Ci12b2lkIHVwYl9yZWZjb3Vu
dGVkX3VucmVmKGNvbnN0IHVwYl9yZWZjb3VudGVkICpyLCBjb25zdCB2b2lkICpvd25lcik7Ci12
b2lkIHVwYl9yZWZjb3VudGVkX2RvbmF0ZXJlZigKLSAgICBjb25zdCB1cGJfcmVmY291bnRlZCAq
ciwgY29uc3Qgdm9pZCAqZnJvbSwgY29uc3Qgdm9pZCAqdG8pOwotdm9pZCB1cGJfcmVmY291bnRl
ZF9jaGVja3JlZihjb25zdCB1cGJfcmVmY291bnRlZCAqciwgY29uc3Qgdm9pZCAqb3duZXIpOwot
Ci0jZGVmaW5lIFVQQl9SRUZDT1VOVEVEX0NNRVRIT0RTKHR5cGUsIHVwY2FzdGZ1bmMpIFwKLSAg
VVBCX0lOTElORSBib29sIHR5cGUgIyMgX2lzZnJvemVuKGNvbnN0IHR5cGUgKnYpIHsgXAotICAg
IHJldHVybiB1cGJfcmVmY291bnRlZF9pc2Zyb3plbih1cGNhc3RmdW5jKHYpKTsgXAotICB9IFwK
LSAgVVBCX0lOTElORSB2b2lkIHR5cGUgIyMgX3JlZihjb25zdCB0eXBlICp2LCBjb25zdCB2b2lk
ICpvd25lcikgeyBcCi0gICAgdXBiX3JlZmNvdW50ZWRfcmVmKHVwY2FzdGZ1bmModiksIG93bmVy
KTsgXAotICB9IFwKLSAgVVBCX0lOTElORSB2b2lkIHR5cGUgIyMgX3VucmVmKGNvbnN0IHR5cGUg
KnYsIGNvbnN0IHZvaWQgKm93bmVyKSB7IFwKLSAgICB1cGJfcmVmY291bnRlZF91bnJlZih1cGNh
c3RmdW5jKHYpLCBvd25lcik7IFwKLSAgfSBcCi0gIFVQQl9JTkxJTkUgdm9pZCB0eXBlICMjIF9k
b25hdGVyZWYoY29uc3QgdHlwZSAqdiwgY29uc3Qgdm9pZCAqZnJvbSwgY29uc3Qgdm9pZCAqdG8p
IHsgXAotICAgIHVwYl9yZWZjb3VudGVkX2RvbmF0ZXJlZih1cGNhc3RmdW5jKHYpLCBmcm9tLCB0
byk7IFwKLSAgfSBcCi0gIFVQQl9JTkxJTkUgdm9pZCB0eXBlICMjIF9jaGVja3JlZihjb25zdCB0
eXBlICp2LCBjb25zdCB2b2lkICpvd25lcikgeyBcCi0gICAgdXBiX3JlZmNvdW50ZWRfY2hlY2ty
ZWYodXBjYXN0ZnVuYyh2KSwgb3duZXIpOyBcCi0gIH0KLQotI2RlZmluZSBVUEJfUkVGQ09VTlRF
RF9DUFBNRVRIT0RTIFwKLSAgYm9vbCBJc0Zyb3plbigpIGNvbnN0IHsgXAotICAgIHJldHVybiB1
cGI6OnVwY2FzdF90bzxjb25zdCB1cGI6OlJlZkNvdW50ZWQ+KHRoaXMpLT5Jc0Zyb3plbigpOyBc
Ci0gIH0gXAotICB2b2lkIFJlZihjb25zdCB2b2lkICpvd25lcikgY29uc3QgeyBcCi0gICAgcmV0
dXJuIHVwYjo6dXBjYXN0X3RvPGNvbnN0IHVwYjo6UmVmQ291bnRlZD4odGhpcyktPlJlZihvd25l
cik7IFwKLSAgfSBcCi0gIHZvaWQgVW5yZWYoY29uc3Qgdm9pZCAqb3duZXIpIGNvbnN0IHsgXAot
ICAgIHJldHVybiB1cGI6OnVwY2FzdF90bzxjb25zdCB1cGI6OlJlZkNvdW50ZWQ+KHRoaXMpLT5V
bnJlZihvd25lcik7IFwKLSAgfSBcCi0gIHZvaWQgRG9uYXRlUmVmKGNvbnN0IHZvaWQgKmZyb20s
IGNvbnN0IHZvaWQgKnRvKSBjb25zdCB7IFwKLSAgICByZXR1cm4gdXBiOjp1cGNhc3RfdG88Y29u
c3QgdXBiOjpSZWZDb3VudGVkPih0aGlzKS0+RG9uYXRlUmVmKGZyb20sIHRvKTsgXAotICB9IFwK
LSAgdm9pZCBDaGVja1JlZihjb25zdCB2b2lkICpvd25lcikgY29uc3QgeyBcCi0gICAgcmV0dXJu
IHVwYjo6dXBjYXN0X3RvPGNvbnN0IHVwYjo6UmVmQ291bnRlZD4odGhpcyktPkNoZWNrUmVmKG93
bmVyKTsgXAotICB9Ci0KLS8qIEludGVybmFsLXRvLXVwYiBJbnRlcmZhY2UgKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgdm9pZCB1
cGJfcmVmY291bnRlZF92aXNpdChjb25zdCB1cGJfcmVmY291bnRlZCAqciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfcmVmY291bnRlZCAqc3Vib2JqLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUpOwotCi1zdHJ1Y3Qg
dXBiX3JlZmNvdW50ZWRfdnRibCB7Ci0gIC8qIE11c3QgdmlzaXQgYWxsIHN1Ym9iamVjdHMgdGhh
dCBhcmUgY3VycmVudGx5IHJlZidkIHZpYSB1cGJfcmVmY291bnRlZF9yZWYyLgotICAgKiBNdXN0
IGJlIGxvbmdqbXAoKS1zYWZlLiAqLwotICB2b2lkICgqdmlzaXQpKGNvbnN0IHVwYl9yZWZjb3Vu
dGVkICpyLCB1cGJfcmVmY291bnRlZF92aXNpdCAqdmlzaXQsIHZvaWQgKmMpOwotCi0gIC8qIE11
c3QgZnJlZSB0aGUgb2JqZWN0IGFuZCByZWxlYXNlIGFsbCByZWZlcmVuY2VzIHRvIG90aGVyIG9i
amVjdHMuICovCi0gIHZvaWQgKCpmcmVlKSh1cGJfcmVmY291bnRlZCAqcik7Ci19OwotCi0vKiBJ
bml0aWFsaXplcyB0aGUgcmVmY291bnRlZCB3aXRoIGEgc2luZ2xlIHJlZiBmb3IgdGhlIGdpdmVu
IG93bmVyLiAgUmV0dXJucwotICogZmFsc2UgaWYgbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0
ZWQuICovCi1ib29sIHVwYl9yZWZjb3VudGVkX2luaXQodXBiX3JlZmNvdW50ZWQgKnIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHVwYl9yZWZjb3VudGVkX3Z0YmwgKnZ0
YmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3duZXIpOwotCi0vKiBB
ZGRzIGEgcmVmIGZyb20gb25lIHJlZmNvdW50ZWQgb2JqZWN0IHRvIGFub3RoZXIgKCJmcm9tIiBt
dXN0IG5vdCBhbHJlYWR5Ci0gKiBvd24gYSByZWYpLiAgVGhlc2UgcmVmcyBtYXkgYmUgY2lyY3Vs
YXI7IGN5Y2xlcyB3aWxsIGJlIGNvbGxlY3RlZCBjb3JyZWN0bHkKLSAqIChpZiBjb25zZXJ2YXRp
dmVseSkuICBUaGVzZSByZWZzIGRvIG5vdCBuZWVkIHRvIGJlIGZyZWVkIGluIGZyb20ncyBmcmVl
KCkKLSAqIGZ1bmN0aW9uLiAqLwotdm9pZCB1cGJfcmVmY291bnRlZF9yZWYyKGNvbnN0IHVwYl9y
ZWZjb3VudGVkICpyLCB1cGJfcmVmY291bnRlZCAqZnJvbSk7Ci0KLS8qIFJlbW92ZXMgYSByZWYg
dGhhdCB3YXMgYWNxdWlyZWQgZnJvbSB1cGJfcmVmY291bnRlZF9yZWYyKCksIGFuZCBjb2xsZWN0
cyBhbnkKLSAqIG9iamVjdCBpdCBjYW4uICBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gImZy
b20iIG5vIGxvbmdlciBwb2ludHMgdG8gInIiLAotICogYW5kIG5vdCBmcm9tIGZyb20ncyAiZnJl
ZSIgZnVuY3Rpb24uICovCi12b2lkIHVwYl9yZWZjb3VudGVkX3VucmVmMihjb25zdCB1cGJfcmVm
Y291bnRlZCAqciwgdXBiX3JlZmNvdW50ZWQgKmZyb20pOwotCi0jZGVmaW5lIHVwYl9yZWYyKHIs
IGZyb20pIFwKLSAgICB1cGJfcmVmY291bnRlZF9yZWYyKChjb25zdCB1cGJfcmVmY291bnRlZCop
ciwgKHVwYl9yZWZjb3VudGVkKilmcm9tKQotI2RlZmluZSB1cGJfdW5yZWYyKHIsIGZyb20pIFwK
LSAgICB1cGJfcmVmY291bnRlZF91bnJlZjIoKGNvbnN0IHVwYl9yZWZjb3VudGVkKilyLCAodXBi
X3JlZmNvdW50ZWQqKWZyb20pCi0KLS8qIEZyZWV6ZXMgYWxsIG11dGFibGUgb2JqZWN0IHJlYWNo
YWJsZSBieSByZWYyKCkgcmVmcyBmcm9tIHRoZSBnaXZlbiByb290cy4KLSAqIFRoaXMgd2lsbCBz
cGxpdCByZWZjb3VudGluZyBncm91cHMgaW50byBwcmVjaXNlIFNDQyBncm91cHMsIHNvIHRoYXQK
LSAqIHJlZmNvdW50aW5nIG9mIGZyb3plbiBvYmplY3RzIGNhbiBiZSBtb3JlIGFnZ3Jlc3NpdmUu
ICBJZiBtZW1vcnkgYWxsb2NhdGlvbgotICogZmFpbHMsIG9yIGlmIG1vcmUgdGhhbiAyKiozMSBt
dXRhYmxlIG9iamVjdHMgYXJlIHJlYWNoYWJsZSBmcm9tICJyb290cyIsIG9yCi0gKiBpZiB0aGUg
bWF4aW11bSBkZXB0aCBvZiB0aGUgZ3JhcGggZXhjZWVkcyAibWF4ZGVwdGgiLCBmYWxzZSBpcyBy
ZXR1cm5lZCBhbmQKLSAqIHRoZSBvYmplY3RzIGFyZSB1bmNoYW5nZWQuCi0gKgotICogQWZ0ZXIg
dGhpcyBvcGVyYXRpb24gc3VjY2VlZHMsIHRoZSBvYmplY3RzIGFyZSBmcm96ZW4vY29uc3QsIGFu
ZCBtYXkgbm90IGJlCi0gKiB1c2VkIHRocm91Z2ggbm9uLWNvbnN0IHBvaW50ZXJzLiAgSW4gcGFy
dGljdWxhciwgdGhleSBtYXkgbm90IGJlIHBhc3NlZCBhcwotICogdGhlIHNlY29uZCBwYXJhbWV0
ZXIgb2YgdXBiX3JlZmNvdW50ZWRfe3JlZix1bnJlZn0yKCkuICBPbiB0aGUgdXBzaWRlLCBhbGwK
LSAqIG9wZXJhdGlvbnMgb24gZnJvemVuIHJlZmNvdW50ZWRzIGFyZSB0aHJlYWRzYWZlLCBhbmQg
b2JqZWN0cyB3aWxsIGJlIGZyZWVkCi0gKiBhdCB0aGUgcHJlY2lzZSBtb21lbnQgdGhhdCB0aGV5
IGJlY29tZSB1bnJlYWNoYWJsZS4KLSAqCi0gKiBDYWxsZXIgbXVzdCBvd24gcmVmcyBvbiBlYWNo
IG9iamVjdCBpbiB0aGUgInJvb3RzIiBsaXN0LiAqLwotYm9vbCB1cGJfcmVmY291bnRlZF9mcmVl
emUodXBiX3JlZmNvdW50ZWQgKmNvbnN0KnJvb3RzLCBpbnQgbiwgdXBiX3N0YXR1cyAqcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhkZXB0aCk7Ci0KLS8qIFNoYXJlZCBieSBh
bGwgY29tcGlsZWQtaW4gcmVmY291bnRlZCBvYmplY3RzLiAqLwotZXh0ZXJuIHVpbnQzMl90IHN0
YXRpY19yZWZjb3VudDsKLQotVVBCX0VORF9FWFRFUk5fQwotCi0jaWZkZWYgX19jcGx1c3BsdXMK
LS8qIEMrKyBXcmFwcGVycy4gKi8KLW5hbWVzcGFjZSB1cGIgewotaW5saW5lIGJvb2wgUmVmQ291
bnRlZDo6SXNGcm96ZW4oKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfcmVmY291bnRlZF9pc2Zyb3pl
bih0aGlzKTsKLX0KLWlubGluZSB2b2lkIFJlZkNvdW50ZWQ6OlJlZihjb25zdCB2b2lkICpvd25l
cikgY29uc3QgewotICB1cGJfcmVmY291bnRlZF9yZWYodGhpcywgb3duZXIpOwotfQotaW5saW5l
IHZvaWQgUmVmQ291bnRlZDo6VW5yZWYoY29uc3Qgdm9pZCAqb3duZXIpIGNvbnN0IHsKLSAgdXBi
X3JlZmNvdW50ZWRfdW5yZWYodGhpcywgb3duZXIpOwotfQotaW5saW5lIHZvaWQgUmVmQ291bnRl
ZDo6RG9uYXRlUmVmKGNvbnN0IHZvaWQgKmZyb20sIGNvbnN0IHZvaWQgKnRvKSBjb25zdCB7Ci0g
IHVwYl9yZWZjb3VudGVkX2RvbmF0ZXJlZih0aGlzLCBmcm9tLCB0byk7Ci19Ci1pbmxpbmUgdm9p
ZCBSZWZDb3VudGVkOjpDaGVja1JlZihjb25zdCB2b2lkICpvd25lcikgY29uc3QgewotICB1cGJf
cmVmY291bnRlZF9jaGVja3JlZih0aGlzLCBvd25lcik7Ci19Ci19ICAvKiBuYW1lc3BhY2UgdXBi
ICovCi0jZW5kaWYKLQotCi0vKiB1cGI6OnJlZmZlZF9wdHIgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgX19jcGx1
c3BsdXMKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4gIC8qIEZvciBzdGQ6OnN3YXAoKS4gKi8KLQot
LyogUHJvdmlkZXMgUkFJSSBzZW1hbnRpY3MgZm9yIHVwYiByZWZjb3VudGVkIG9iamVjdHMuICBF
YWNoIHJlZmZlZF9wdHIgb3ducyBhCi0gKiByZWYgb24gd2hhdGV2ZXIgb2JqZWN0IGl0IHBvaW50
cyB0byAoaWYgYW55KS4gKi8KLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyB1cGI6OnJlZmZlZF9w
dHIgewotIHB1YmxpYzoKLSAgcmVmZmVkX3B0cigpIDogcHRyXyhOVUxMKSB7fQotCi0gIC8qIElm
IHJlZl9kb25vciBpcyBOVUxMLCB0YWtlcyBhIG5ldyByZWYsIG90aGVyd2lzZSBhZG9wdHMgZnJv
bSByZWZfZG9ub3IuICovCi0gIHRlbXBsYXRlIDxjbGFzcyBVPgotICByZWZmZWRfcHRyKFUqIHZh
bCwgY29uc3Qgdm9pZCogcmVmX2Rvbm9yID0gTlVMTCkKLSAgICAgIDogcHRyXyh1cGI6OnVwY2Fz
dCh2YWwpKSB7Ci0gICAgaWYgKHJlZl9kb25vcikgewotICAgICAgYXNzZXJ0KHB0cl8pOwotICAg
ICAgcHRyXy0+RG9uYXRlUmVmKHJlZl9kb25vciwgdGhpcyk7Ci0gICAgfSBlbHNlIGlmIChwdHJf
KSB7Ci0gICAgICBwdHJfLT5SZWYodGhpcyk7Ci0gICAgfQotICB9Ci0KLSAgdGVtcGxhdGUgPGNs
YXNzIFU+Ci0gIHJlZmZlZF9wdHIoY29uc3QgcmVmZmVkX3B0cjxVPiYgb3RoZXIpCi0gICAgICA6
IHB0cl8odXBiOjp1cGNhc3Qob3RoZXIuZ2V0KCkpKSB7Ci0gICAgaWYgKHB0cl8pIHB0cl8tPlJl
Zih0aGlzKTsKLSAgfQotCi0gIHJlZmZlZF9wdHIoY29uc3QgcmVmZmVkX3B0ciYgb3RoZXIpCi0g
ICAgICA6IHB0cl8odXBiOjp1cGNhc3Qob3RoZXIuZ2V0KCkpKSB7Ci0gICAgaWYgKHB0cl8pIHB0
cl8tPlJlZih0aGlzKTsKLSAgfQotCi0gIH5yZWZmZWRfcHRyKCkgeyBpZiAocHRyXykgcHRyXy0+
VW5yZWYodGhpcyk7IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVT4KLSAgcmVmZmVkX3B0ciYgb3Bl
cmF0b3I9KGNvbnN0IHJlZmZlZF9wdHI8VT4mIG90aGVyKSB7Ci0gICAgcmVzZXQob3RoZXIuZ2V0
KCkpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIHJlZmZlZF9wdHImIG9wZXJhdG9yPShj
b25zdCByZWZmZWRfcHRyJiBvdGhlcikgewotICAgIHJlc2V0KG90aGVyLmdldCgpKTsKLSAgICBy
ZXR1cm4gKnRoaXM7Ci0gIH0KLQotICAvKiBUT0RPKGhhYmVybWFuKTogYWRkIEMrKzExIG1vdmUg
Y29uc3RydWN0aW9uL2Fzc2lnbm1lbnQgZm9yIGdyZWF0ZXIKLSAgICogZWZmaWNpZW5jeS4gKi8K
LQotICB2b2lkIHN3YXAocmVmZmVkX3B0ciYgb3RoZXIpIHsKLSAgICBpZiAocHRyXyA9PSBvdGhl
ci5wdHJfKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHB0cl8pIHB0cl8tPkRv
bmF0ZVJlZih0aGlzLCAmb3RoZXIpOwotICAgIGlmIChvdGhlci5wdHJfKSBvdGhlci5wdHJfLT5E
b25hdGVSZWYoJm90aGVyLCB0aGlzKTsKLSAgICBzdGQ6OnN3YXAocHRyXywgb3RoZXIucHRyXyk7
Ci0gIH0KLQotICBUJiBvcGVyYXRvciooKSBjb25zdCB7Ci0gICAgYXNzZXJ0KHB0cl8pOwotICAg
IHJldHVybiAqcHRyXzsKLSAgfQotCi0gIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7Ci0gICAgYXNz
ZXJ0KHB0cl8pOwotICAgIHJldHVybiBwdHJfOwotICB9Ci0KLSAgVCogZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gcHRyXzsgfQotCi0gIC8qIElmIHJlZl9kb25vciBpcyBOVUxMLCB0YWtlcyBhIG5ldyBy
ZWYsIG90aGVyd2lzZSBhZG9wdHMgZnJvbSByZWZfZG9ub3IuICovCi0gIHRlbXBsYXRlIDxjbGFz
cyBVPgotICB2b2lkIHJlc2V0KFUqIHB0ciA9IE5VTEwsIGNvbnN0IHZvaWQqIHJlZl9kb25vciA9
IE5VTEwpIHsKLSAgICByZWZmZWRfcHRyKHB0ciwgcmVmX2Rvbm9yKS5zd2FwKCp0aGlzKTsKLSAg
fQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVPgotICByZWZmZWRfcHRyPFU+IGRvd25fY2FzdCgpIHsK
LSAgICByZXR1cm4gcmVmZmVkX3B0cjxVPih1cGI6OmRvd25fY2FzdDxVKj4oZ2V0KCkpKTsKLSAg
fQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVPgotICByZWZmZWRfcHRyPFU+IGR5bl9jYXN0KCkgewot
ICAgIHJldHVybiByZWZmZWRfcHRyPFU+KHVwYjo6ZHluX2Nhc3Q8VSo+KGdldCgpKSk7Ci0gIH0K
LQotICAvKiBQbGFpbiByZWxlYXNlKCkgaXMgdW5zYWZlOyBpZiB3ZSB3ZXJlIHRoZSBvbmx5IG93
bmVyLCBpdCB3b3VsZCBsZWFrIHRoZQotICAgKiBvYmplY3QuICBJbnN0ZWFkIHdlIHByb3ZpZGUg
dGhpczogKi8KLSAgVCogUmVsZWFzZVRvKGNvbnN0IHZvaWQqIG5ld19vd25lcikgewotICAgIFQq
IHJldCA9IE5VTEw7Ci0gICAgcHRyXy0+RG9uYXRlUmVmKHRoaXMsIG5ld19vd25lcik7Ci0gICAg
c3RkOjpzd2FwKHJldCwgcHRyXyk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gcHJpdmF0ZToK
LSAgVCogcHRyXzsKLX07Ci0KLSNlbmRpZiAgLyogX19jcGx1c3BsdXMgKi8KLQotI2VuZGlmICAv
KiBVUEJfUkVGQ09VTlRfSF8gKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jaW5jbHVkZSA8Y3N0
cmluZz4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2Ug
dXBiIHsKLWNsYXNzIERlZjsKLWNsYXNzIEVudW1EZWY7Ci1jbGFzcyBGaWVsZERlZjsKLWNsYXNz
IEZpbGVEZWY7Ci1jbGFzcyBNZXNzYWdlRGVmOwotY2xhc3MgT25lb2ZEZWY7Ci19Ci0jZW5kaWYK
LQotVVBCX0RFQ0xBUkVfREVSSVZFRF9UWVBFKHVwYjo6RGVmLCB1cGI6OlJlZkNvdW50ZWQsIHVw
Yl9kZWYsIHVwYl9yZWZjb3VudGVkKQotVVBCX0RFQ0xBUkVfREVSSVZFRF9UWVBFKHVwYjo6T25l
b2ZEZWYsIHVwYjo6UmVmQ291bnRlZCwgdXBiX29uZW9mZGVmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwYl9yZWZjb3VudGVkKQotVVBCX0RFQ0xBUkVfREVSSVZFRF9UWVBFKHVwYjo6Rmls
ZURlZiwgdXBiOjpSZWZDb3VudGVkLCB1cGJfZmlsZWRlZiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICB1cGJfcmVmY291bnRlZCkKLQotLyogVGhlIG1heGltdW0gbWVzc2FnZSBkZXB0aCB0aGF0
IHRoZSB0eXBlIGdyYXBoIGNhbiBoYXZlLiAgVGhpcyBpcyBhIHJlc291cmNlCi0gKiBsaW1pdCBm
b3IgdGhlIEMgc3RhY2sgc2luY2Ugd2Ugc29tZXRpbWVzIG5lZWQgdG8gcmVjdXJzaXZlbHkgdHJh
dmVyc2UgdGhlCi0gKiBncmFwaC4gIEN5Y2xlcyBhcmUgb2s7IHRoZSB0cmF2ZXJzYWwgd2lsbCBz
dG9wIHdoZW4gaXQgZGV0ZWN0cyBhIGN5Y2xlLCBidXQKLSAqIHdlIG11c3QgaGl0IHRoZSBjeWNs
ZSBiZWZvcmUgdGhlIG1heGltdW0gZGVwdGggaXMgcmVhY2hlZC4KLSAqCi0gKiBJZiBoYXZpbmcg
YSBzaW5nbGUgc3RhdGljIGxpbWl0IGlzIHRvbyBpbmZsZXhpYmxlLCB3ZSBjYW4gYWRkIGFub3Ro
ZXIgdmFyaWFudAotICogb2YgRGVmOjpGcmVlemUgdGhhdCBhbGxvd3Mgc3BlY2lmeWluZyB0aGlz
IGFzIGEgcGFyYW1ldGVyLiAqLwotI2RlZmluZSBVUEJfTUFYX01FU1NBR0VfREVQVEggNjQKLQot
Ci0vKiB1cGI6OkRlZjogYmFzZSBjbGFzcyBmb3IgdG9wLWxldmVsIGRlZnMgICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBBbGwgdGhlIGRpZmZlcmVudCBraW5kIG9m
IGRlZnMgdGhhdCBjYW4gYmUgZGVmaW5lZCBhdCB0aGUgdG9wLWxldmVsIGFuZCBwdXQKLSAqIGlu
IGEgU3ltYm9sVGFibGUgb3IgYXBwZWFyIGluIGEgRmlsZURlZjo6ZGVmcygpIGxpc3QuICBUaGlz
IGV4Y2x1ZGVzIHNvbWUKLSAqIGRlZnMgKGxpa2Ugb25lb2ZzIGFuZCBmaWxlcykuICBJdCBvbmx5
IGluY2x1ZGVzIGZpZWxkcyBiZWNhdXNlIHRoZXkgY2FuIGJlCi0gKiBkZWZpbmVkIGFzIGV4dGVu
c2lvbnMuICovCi10eXBlZGVmIGVudW0gewotICBVUEJfREVGX01TRywKLSAgVVBCX0RFRl9GSUVM
RCwKLSAgVVBCX0RFRl9FTlVNLAotICBVUEJfREVGX1NFUlZJQ0UsICAgLyogTm90IHlldCBpbXBs
ZW1lbnRlZC4gKi8KLSAgVVBCX0RFRl9BTlkgPSAtMSAgIC8qIFdpbGRjYXJkIGZvciB1cGJfc3lt
dGFiX2dldCooKSAqLwotfSB1cGJfZGVmdHlwZV90OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQot
LyogVGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRlZnMuICBJdHMgYmFzZSBpcyB1cGI6OlJlZkNvdW50
ZWQgKHVzZSB1cGI6OnVwY2FzdCgpCi0gKiB0byBjb252ZXJ0KS4gKi8KLWNsYXNzIHVwYjo6RGVm
IHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgdXBiX2RlZnR5cGVfdCBUeXBlOwotCi0gIERlZiogRHVw
KGNvbnN0IHZvaWQgKm93bmVyKSBjb25zdDsKLQotICAvKiB1cGI6OlJlZkNvdW50ZWQgbWV0aG9k
cyBsaWtlIFJlZigpL1VucmVmKCkuICovCi0gIFVQQl9SRUZDT1VOVEVEX0NQUE1FVEhPRFMKLQot
ICBUeXBlIGRlZl90eXBlKCkgY29uc3Q7Ci0KLSAgLyogImZ1bGxuYW1lIiBpcyB0aGUgZGVmJ3Mg
ZnVsbHktcXVhbGlmaWVkIG5hbWUgKGVnLiBmb28uYmFyLk1lc3NhZ2UpLiAqLwotICBjb25zdCBj
aGFyICpmdWxsX25hbWUoKSBjb25zdDsKLQotICAvKiBUaGUgZmluYWwgcGFydCBvZiBhIGRlZidz
IG5hbWUgKGVnLiBNZXNzYWdlKS4gKi8KLSAgY29uc3QgY2hhciAqbmFtZSgpIGNvbnN0OwotCi0g
IC8qIFRoZSBkZWYgbXVzdCBiZSBtdXRhYmxlLiAgQ2FsbGVyIHJldGFpbnMgb3duZXJzaGlwIG9m
IGZ1bGxuYW1lLiAgRGVmcyBhcmUKLSAgICogbm90IHJlcXVpcmVkIHRvIGhhdmUgYSBuYW1lOyBp
ZiBhIGRlZiBoYXMgbm8gbmFtZSB3aGVuIGl0IGlzIGZyb3plbiwgaXQKLSAgICogd2lsbCByZW1h
aW4gYW4gYW5vbnltb3VzIGRlZi4gIE9uIGZhaWx1cmUsIHJldHVybnMgZmFsc2UgYW5kIGRldGFp
bHMgaW4gInMiCi0gICAqIGlmIG5vbi1OVUxMLiAqLwotICBib29sIHNldF9mdWxsX25hbWUoY29u
c3QgY2hhciogZnVsbG5hbWUsIHVwYjo6U3RhdHVzKiBzKTsKLSAgYm9vbCBzZXRfZnVsbF9uYW1l
KGNvbnN0IHN0ZDo6c3RyaW5nICZmdWxsbmFtZSwgdXBiOjpTdGF0dXMqIHMpOwotCi0gIC8qIFRo
ZSBmaWxlIGluIHdoaWNoIHRoaXMgZGVmIGFwcGVhcnMuICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRv
IGFkZCBhIGRlZiB0byBhCi0gICAqIGZpbGUgKGFuZCBjb25zZXF1ZW50bHkgdGhlIGFjY2Vzc29y
IG1heSByZXR1cm4gTlVMTCkuICBTZXQgdGhpcyBieSBjYWxsaW5nCi0gICAqIGZpbGUtPkFkZChk
ZWYpLiAqLwotICBGaWxlRGVmKiBmaWxlKCkgY29uc3Q7Ci0KLSAgLyogRnJlZXplcyB0aGUgZ2l2
ZW4gZGVmczsgdGhpcyB2YWxpZGF0ZXMgYWxsIGNvbnN0cmFpbnRzIGFuZCBtYXJrcyB0aGUgZGVm
cwotICAgKiBhcyBmcm96ZW4gKHJlYWQtb25seSkuICAiZGVmcyIgbWF5IG5vdCBjb250YWluIGFu
eSBmaWVsZGRlZnMsIGJ1dCBmaWVsZHMKLSAgICogb2YgYW55IG1zZ2RlZnMgd2lsbCBiZSBmcm96
ZW4uCi0gICAqCi0gICAqIFN5bWJvbGljIHJlZmVyZW5jZXMgdG8gc3ViLXR5cGVzIGFuZCBlbnVt
IGRlZmF1bHRzIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4KLSAgICogcmVzb2x2ZWQuICBBbnkgbXV0
YWJsZSBkZWZzIHJlYWNoYWJsZSBmcm9tIGFueSBvZiAiZGVmcyIgbXVzdCBhbHNvIGJlIGluCi0g
ICAqIHRoZSBsaXN0OyBtb3JlIGZvcm1hbGx5LCAiZGVmcyIgbXVzdCBiZSBhIHRyYW5zaXRpdmUg
Y2xvc3VyZSBvZiBtdXRhYmxlCi0gICAqIGRlZnMuCi0gICAqCi0gICAqIEFmdGVyIHRoaXMgb3Bl
cmF0aW9uIHN1Y2NlZWRzLCB0aGUgZmluYWxpemVkIGRlZnMgbXVzdCBvbmx5IGJlIGFjY2Vzc2Vk
Ci0gICAqIHRocm91Z2ggYSBjb25zdCBwb2ludGVyISAqLwotICBzdGF0aWMgYm9vbCBGcmVlemUo
RGVmKiBjb25zdCogZGVmcywgc2l6ZV90IG4sIFN0YXR1cyogc3RhdHVzKTsKLSAgc3RhdGljIGJv
b2wgRnJlZXplKGNvbnN0IHN0ZDo6dmVjdG9yPERlZio+JiBkZWZzLCBTdGF0dXMqIHN0YXR1cyk7
Ci0KLSBwcml2YXRlOgotICBVUEJfRElTQUxMT1dfUE9EX09QUyhEZWYsIHVwYjo6RGVmKQotfTsK
LQotI2VuZGlmICAvKiBfX2NwbHVzcGx1cyAqLwotCi1VUEJfQkVHSU5fRVhURVJOX0MKLQotLyog
TmF0aXZlIEMgQVBJLiAqLwotdXBiX2RlZiAqdXBiX2RlZl9kdXAoY29uc3QgdXBiX2RlZiAqZGVm
LCBjb25zdCB2b2lkICpvd25lcik7Ci0KLS8qIEluY2x1ZGUgdXBiX3JlZmNvdW50ZWQgbWV0aG9k
cyBsaWtlIHVwYl9kZWZfcmVmKCkvdXBiX2RlZl91bnJlZigpLiAqLwotVVBCX1JFRkNPVU5URURf
Q01FVEhPRFModXBiX2RlZiwgdXBiX2RlZl91cGNhc3QpCi0KLXVwYl9kZWZ0eXBlX3QgdXBiX2Rl
Zl90eXBlKGNvbnN0IHVwYl9kZWYgKmQpOwotY29uc3QgY2hhciAqdXBiX2RlZl9mdWxsbmFtZShj
b25zdCB1cGJfZGVmICpkKTsKLWNvbnN0IGNoYXIgKnVwYl9kZWZfbmFtZShjb25zdCB1cGJfZGVm
ICpkKTsKLWNvbnN0IHVwYl9maWxlZGVmICp1cGJfZGVmX2ZpbGUoY29uc3QgdXBiX2RlZiAqZCk7
Ci1ib29sIHVwYl9kZWZfc2V0ZnVsbG5hbWUodXBiX2RlZiAqZGVmLCBjb25zdCBjaGFyICpmdWxs
bmFtZSwgdXBiX3N0YXR1cyAqcyk7Ci1ib29sIHVwYl9kZWZfZnJlZXplKHVwYl9kZWYgKmNvbnN0
ICpkZWZzLCBzaXplX3QgbiwgdXBiX3N0YXR1cyAqcyk7Ci0KLS8qIFRlbXBvcmFyeSBBUEk6IGZv
ciBpbnRlcm5hbCB1c2Ugb25seS4gKi8KLWJvb2wgX3VwYl9kZWZfdmFsaWRhdGUodXBiX2RlZiAq
Y29uc3QqZGVmcywgc2l6ZV90IG4sIHVwYl9zdGF0dXMgKnMpOwotCi1VUEJfRU5EX0VYVEVSTl9D
Ci0KLQotLyogdXBiOjpEZWYgY2FzdHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVm
aW5lIFVQQl9DUFBfQ0FTVFMoY25hbWUsIGNwcHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBuYW1lc3BhY2UgdXBiIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUg
PD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGlubGluZSBjcHB0eXBlICpkb3duX2Nhc3Q8Y3BwdHlwZSAqLCBEZWY+
KERlZiAqIGRlZikgeyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiB1cGJfZG93
bmNhc3RfIyNjbmFtZSMjX211dGFibGUoZGVmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDw+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBpbmxpbmUgY3BwdHlwZSAqZHluX2Nhc3Q8Y3BwdHlwZSAqLCBEZWY+KERlZiAqIGRlZikgeyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gdXBiX2R5bmNhc3RfIyNjbmFtZSMj
X211dGFibGUoZGVmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8PiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGNvbnN0
IGNwcHR5cGUgKmRvd25fY2FzdDxjb25zdCBjcHB0eXBlICosIGNvbnN0IERlZj4oICAgICAgICAg
ICAgICAgICBcCi0gICAgICBjb25zdCBEZWYgKmRlZikgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiB1cGJfZG93bmNh
c3RfIyNjbmFtZShkZWYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDw+ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBp
bmxpbmUgY29uc3QgY3BwdHlwZSAqZHluX2Nhc3Q8Y29uc3QgY3BwdHlwZSAqLCBjb25zdCBEZWY+
KGNvbnN0IERlZiAqZGVmKSB7IFwKLSAgICByZXR1cm4gdXBiX2R5bmNhc3RfIyNjbmFtZShkZWYp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGNvbnN0IGNw
cHR5cGUgKmRvd25fY2FzdDxjb25zdCBjcHB0eXBlICosIERlZj4oRGVmICogZGVmKSB7ICAgICAg
ICAgICBcCi0gICAgcmV0dXJuIHVwYl9kb3duY2FzdF8jI2NuYW1lKGRlZik7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgdGVtcGxhdGUgPD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSBjb25zdCBjcHB0eXBlICpkeW5fY2Fz
dDxjb25zdCBjcHB0eXBlICosIERlZj4oRGVmICogZGVmKSB7ICAgICAgICAgICAgXAotICAgIHJl
dHVybiB1cGJfZHluY2FzdF8jI2NuYW1lKGRlZik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gIC8qIG5hbWVz
cGFjZSB1cGIgKi8KLSNlbHNlCi0jZGVmaW5lIFVQQl9DUFBfQ0FTVFMoY25hbWUsIGNwcHR5cGUp
Ci0jZW5kaWYgIC8qIF9fY3BsdXNwbHVzICovCi0KLS8qIER5bmFtaWMgY2FzdHMsIGZvciBkZXRl
cm1pbmluZyBpZiBhIGRlZiBpcyBvZiBhIHBhcnRpY3VsYXIgdHlwZSBhdCBydW50aW1lLgotICog
RG93bmNhc3RzLCBmb3Igd2hlbiBzb21lIHdhbnRzIHRvIGFzc2VydCB0aGF0IGEgZGVmIGlzIG9m
IGEgcGFydGljdWxhciB0eXBlLgotICogVGhlc2UgYXJlIG9ubHkgY2hlY2tlZCBpZiB3ZSBhcmUg
YnVpbGRpbmcgZGVidWcuICovCi0jZGVmaW5lIFVQQl9ERUZfQ0FTVFMobG93ZXIsIHVwcGVyLCBj
cHB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9JTkxJTkUgY29u
c3QgdXBiXyMjbG93ZXIgKnVwYl9keW5jYXN0XyMjbG93ZXIoY29uc3QgdXBiX2RlZiAqZGVmKSB7
ICBcCi0gICAgaWYgKHVwYl9kZWZfdHlwZShkZWYpICE9IFVQQl9ERUZfIyN1cHBlcikgcmV0dXJu
IE5VTEw7ICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuICh1cGJfIyNsb3dlciAqKWRlZjsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIFVQQl9JTkxJTkUgY29uc3QgdXBiXyMjbG93ZXIgKnVwYl9kb3duY2FzdF8j
I2xvd2VyKGNvbnN0IHVwYl9kZWYgKmRlZikgeyBcCi0gICAgYXNzZXJ0KHVwYl9kZWZfdHlwZShk
ZWYpID09IFVQQl9ERUZfIyN1cHBlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
cmV0dXJuIChjb25zdCB1cGJfIyNsb3dlciAqKWRlZjsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9JTkxJTkUgdXBiXyMj
bG93ZXIgKnVwYl9keW5jYXN0XyMjbG93ZXIjI19tdXRhYmxlKHVwYl9kZWYgKmRlZikgeyAgICBc
Ci0gICAgcmV0dXJuICh1cGJfIyNsb3dlciAqKXVwYl9keW5jYXN0XyMjbG93ZXIoZGVmKTsgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9JTkxJTkUg
dXBiXyMjbG93ZXIgKnVwYl9kb3duY2FzdF8jI2xvd2VyIyNfbXV0YWJsZSh1cGJfZGVmICpkZWYp
IHsgICBcCi0gICAgcmV0dXJuICh1cGJfIyNsb3dlciAqKXVwYl9kb3duY2FzdF8jI2xvd2VyKGRl
Zik7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVQQl9D
UFBfQ0FTVFMobG93ZXIsIGNwcHR5cGUpCi0KLSNkZWZpbmUgVVBCX0RFRklORV9ERUYoY3BwbmFt
ZSwgbG93ZXIsIHVwcGVyLCBjcHBtZXRob2RzLCBtZW1iZXJzKSAgICAgICAgICAgICBcCi0gIFVQ
Ql9ERUZJTkVfQ0xBU1MyKGNwcG5hbWUsIHVwYjo6RGVmLCB1cGI6OlJlZkNvdW50ZWQsIGNwcG1l
dGhvZHMsICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgIG1lbWJlcnMpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVVBCX0RFRl9D
QVNUUyhsb3dlciwgdXBwZXIsIGNwcG5hbWUpCi0KLSNkZWZpbmUgVVBCX0RFQ0xBUkVfREVGX1RZ
UEUoY3BwbmFtZSwgbG93ZXIsIHVwcGVyKSBcCi0gIFVQQl9ERUNMQVJFX0RFUklWRURfVFlQRTIo
Y3BwbmFtZSwgdXBiOjpEZWYsIHVwYjo6UmVmQ291bnRlZCwgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwYl8gIyMgbG93ZXIsIHVwYl9kZWYsIHVwYl9yZWZjb3VudGVkKSBcCi0gIFVQ
Ql9ERUZfQ0FTVFMobG93ZXIsIHVwcGVyLCBjcHBuYW1lKQotCi1VUEJfREVDTEFSRV9ERUZfVFlQ
RSh1cGI6OkZpZWxkRGVmLCBmaWVsZGRlZiwgRklFTEQpCi1VUEJfREVDTEFSRV9ERUZfVFlQRSh1
cGI6Ok1lc3NhZ2VEZWYsIG1zZ2RlZiwgTVNHKQotVVBCX0RFQ0xBUkVfREVGX1RZUEUodXBiOjpF
bnVtRGVmLCBlbnVtZGVmLCBFTlVNKQotCi0jdW5kZWYgVVBCX0RFQ0xBUkVfREVGX1RZUEUKLSN1
bmRlZiBVUEJfREVGX0NBU1RTCi0jdW5kZWYgVVBCX0NQUF9DQVNUUwotCi0KLS8qIHVwYjo6Rmll
bGREZWYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCi0KLS8qIFRoZSB0eXBlcyBhIGZpZWxkIGNhbiBoYXZlLiAgTm90ZSB0aGF0
IHRoaXMgbGlzdCBpcyBub3QgaWRlbnRpY2FsIHRvIHRoZQotICogdHlwZXMgZGVmaW5lZCBpbiBk
ZXNjcmlwdG9yLnByb3RvLCB3aGljaCBnaXZlcyBJTlQzMiBhbmQgU0lOVDMyIHNlcGFyYXRlCi0g
KiB0eXBlcyAod2UgZGlzdGluZ3Vpc2ggdGhlIHR3byB3aXRoIHRoZSAiaW50ZWdlciBlbmNvZGlu
ZyIgZW51bSBiZWxvdykuICovCi10eXBlZGVmIGVudW0gewotICBVUEJfVFlQRV9GTE9BVCAgICA9
IDEsCi0gIFVQQl9UWVBFX0RPVUJMRSAgID0gMiwKLSAgVVBCX1RZUEVfQk9PTCAgICAgPSAzLAot
ICBVUEJfVFlQRV9TVFJJTkcgICA9IDQsCi0gIFVQQl9UWVBFX0JZVEVTICAgID0gNSwKLSAgVVBC
X1RZUEVfTUVTU0FHRSAgPSA2LAotICBVUEJfVFlQRV9FTlVNICAgICA9IDcsICAvKiBFbnVtIHZh
bHVlcyBhcmUgaW50MzIuICovCi0gIFVQQl9UWVBFX0lOVDMyICAgID0gOCwKLSAgVVBCX1RZUEVf
VUlOVDMyICAgPSA5LAotICBVUEJfVFlQRV9JTlQ2NCAgICA9IDEwLAotICBVUEJfVFlQRV9VSU5U
NjQgICA9IDExCi19IHVwYl9maWVsZHR5cGVfdDsKLQotLyogVGhlIHJlcGVhdGVkLW5lc3Mgb2Yg
ZWFjaCBmaWVsZDsgdGhpcyBtYXRjaGVzIGRlc2NyaXB0b3IucHJvdG8uICovCi10eXBlZGVmIGVu
dW0gewotICBVUEJfTEFCRUxfT1BUSU9OQUwgPSAxLAotICBVUEJfTEFCRUxfUkVRVUlSRUQgPSAy
LAotICBVUEJfTEFCRUxfUkVQRUFURUQgPSAzCi19IHVwYl9sYWJlbF90OwotCi0vKiBIb3cgaW50
ZWdlcnMgc2hvdWxkIGJlIGVuY29kZWQgaW4gc2VyaWFsaXphdGlvbnMgdGhhdCBvZmZlciBtdWx0
aXBsZQotICogaW50ZWdlciBlbmNvZGluZyBtZXRob2RzLiAqLwotdHlwZWRlZiBlbnVtIHsKLSAg
VVBCX0lOVEZNVF9WQVJJQUJMRSA9IDEsCi0gIFVQQl9JTlRGTVRfRklYRUQgPSAyLAotICBVUEJf
SU5URk1UX1pJR1pBRyA9IDMgICAvKiBPbmx5IGZvciBzaWduZWQgdHlwZXMgKElOVDMyL0lOVDY0
KS4gKi8KLX0gdXBiX2ludGZtdF90OwotCi0vKiBEZXNjcmlwdG9yIHR5cGVzLCBhcyBkZWZpbmVk
IGluIGRlc2NyaXB0b3IucHJvdG8uICovCi10eXBlZGVmIGVudW0gewotICBVUEJfREVTQ1JJUFRP
Ul9UWVBFX0RPVUJMRSAgID0gMSwKLSAgVVBCX0RFU0NSSVBUT1JfVFlQRV9GTE9BVCAgICA9IDIs
Ci0gIFVQQl9ERVNDUklQVE9SX1RZUEVfSU5UNjQgICAgPSAzLAotICBVUEJfREVTQ1JJUFRPUl9U
WVBFX1VJTlQ2NCAgID0gNCwKLSAgVVBCX0RFU0NSSVBUT1JfVFlQRV9JTlQzMiAgICA9IDUsCi0g
IFVQQl9ERVNDUklQVE9SX1RZUEVfRklYRUQ2NCAgPSA2LAotICBVUEJfREVTQ1JJUFRPUl9UWVBF
X0ZJWEVEMzIgID0gNywKLSAgVVBCX0RFU0NSSVBUT1JfVFlQRV9CT09MICAgICA9IDgsCi0gIFVQ
Ql9ERVNDUklQVE9SX1RZUEVfU1RSSU5HICAgPSA5LAotICBVUEJfREVTQ1JJUFRPUl9UWVBFX0dS
T1VQICAgID0gMTAsCi0gIFVQQl9ERVNDUklQVE9SX1RZUEVfTUVTU0FHRSAgPSAxMSwKLSAgVVBC
X0RFU0NSSVBUT1JfVFlQRV9CWVRFUyAgICA9IDEyLAotICBVUEJfREVTQ1JJUFRPUl9UWVBFX1VJ
TlQzMiAgID0gMTMsCi0gIFVQQl9ERVNDUklQVE9SX1RZUEVfRU5VTSAgICAgPSAxNCwKLSAgVVBC
X0RFU0NSSVBUT1JfVFlQRV9TRklYRUQzMiA9IDE1LAotICBVUEJfREVTQ1JJUFRPUl9UWVBFX1NG
SVhFRDY0ID0gMTYsCi0gIFVQQl9ERVNDUklQVE9SX1RZUEVfU0lOVDMyICAgPSAxNywKLSAgVVBC
X0RFU0NSSVBUT1JfVFlQRV9TSU5UNjQgICA9IDE4Ci19IHVwYl9kZXNjcmlwdG9ydHlwZV90Owot
Ci10eXBlZGVmIGVudW0gewotICBVUEJfU1lOVEFYX1BST1RPMiA9IDIsCi0gIFVQQl9TWU5UQVhf
UFJPVE8zID0gMwotfSB1cGJfc3ludGF4X3Q7Ci0KLS8qIE1heGltdW0gZmllbGQgbnVtYmVyIGFs
bG93ZWQgZm9yIEZpZWxkRGVmcy4gIFRoaXMgaXMgYW4gaW5oZXJlbnQgbGltaXQgb2YgdGhlCi0g
KiBwcm90b2J1ZiB3aXJlIGZvcm1hdC4gKi8KLSNkZWZpbmUgVVBCX01BWF9GSUVMRE5VTUJFUiAo
KDEgPDwgMjkpIC0gMSkKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIEEgdXBiX2ZpZWxkZGVm
IGRlc2NyaWJlcyBhIHNpbmdsZSBmaWVsZCBpbiBhIG1lc3NhZ2UuICBJdCBpcyBtb3N0IG9mdGVu
Ci0gKiBmb3VuZCBhcyBhIHBhcnQgb2YgYSB1cGJfbXNnZGVmLCBidXQgY2FuIGFsc28gc3RhbmQg
YWxvbmUgdG8gcmVwcmVzZW50Ci0gKiBhbiBleHRlbnNpb24uCi0gKgotICogSXRzIGJhc2UgY2xh
c3MgaXMgdXBiOjpEZWYgKHVzZSB1cGI6OnVwY2FzdCgpIHRvIGNvbnZlcnQpLiAqLwotY2xhc3Mg
dXBiOjpGaWVsZERlZiB7Ci0gcHVibGljOgotICB0eXBlZGVmIHVwYl9maWVsZHR5cGVfdCBUeXBl
OwotICB0eXBlZGVmIHVwYl9sYWJlbF90IExhYmVsOwotICB0eXBlZGVmIHVwYl9pbnRmbXRfdCBJ
bnRlZ2VyRm9ybWF0OwotICB0eXBlZGVmIHVwYl9kZXNjcmlwdG9ydHlwZV90IERlc2NyaXB0b3JU
eXBlOwotCi0gIC8qIFRoZXNlIHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIHZh
bGlkIG1lbWJlciBvZiB0aGUgZW51bWVyYXRpb24uICovCi0gIHN0YXRpYyBib29sIENoZWNrVHlw
ZShpbnQzMl90IHZhbCk7Ci0gIHN0YXRpYyBib29sIENoZWNrTGFiZWwoaW50MzJfdCB2YWwpOwot
ICBzdGF0aWMgYm9vbCBDaGVja0Rlc2NyaXB0b3JUeXBlKGludDMyX3QgdmFsKTsKLSAgc3RhdGlj
IGJvb2wgQ2hlY2tJbnRlZ2VyRm9ybWF0KGludDMyX3QgdmFsKTsKLQotICAvKiBUaGVzZSBjb252
ZXJ0IHRvIHRoZSBnaXZlbiBlbnVtZXJhdGlvbjsgdGhleSByZXF1aXJlIHRoYXQgdGhlIHZhbHVl
IGlzCi0gICAqIHZhbGlkLiAqLwotICBzdGF0aWMgVHlwZSBDb252ZXJ0VHlwZShpbnQzMl90IHZh
bCk7Ci0gIHN0YXRpYyBMYWJlbCBDb252ZXJ0TGFiZWwoaW50MzJfdCB2YWwpOwotICBzdGF0aWMg
RGVzY3JpcHRvclR5cGUgQ29udmVydERlc2NyaXB0b3JUeXBlKGludDMyX3QgdmFsKTsKLSAgc3Rh
dGljIEludGVnZXJGb3JtYXQgQ29udmVydEludGVnZXJGb3JtYXQoaW50MzJfdCB2YWwpOwotCi0g
IC8qIFJldHVybnMgTlVMTCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuICovCi0gIHN0YXRp
YyByZWZmZWRfcHRyPEZpZWxkRGVmPiBOZXcoKTsKLQotICAvKiBEdXBsaWNhdGVzIHRoZSBnaXZl
biBmaWVsZCwgcmV0dXJuaW5nIE5VTEwgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgotICAg
KiBXaGVuIGEgZmllbGRkZWYgaXMgZHVwbGljYXRlZCwgdGhlIHN1YmRlZiAoaWYgYW55KSBpcyBt
YWRlIHN5bWJvbGljIGlmIGl0Ci0gICAqIHdhc24ndCBhbHJlYWR5LiAgSWYgdGhlIHN1YmRlZiBp
cyBzZXQgYnV0IGhhcyBubyBuYW1lICh3aGljaCBpcyBwb3NzaWJsZQotICAgKiBzaW5jZSBtc2dk
ZWZzIGFyZSBub3QgcmVxdWlyZWQgdG8gaGF2ZSBhIG5hbWUpIHRoZSBuZXcgZmllbGRkZWYncyBz
dWJkZWYKLSAgICogd2lsbCBiZSB1bnNldC4gKi8KLSAgRmllbGREZWYqIER1cChjb25zdCB2b2lk
KiBvd25lcikgY29uc3Q7Ci0KLSAgLyogdXBiOjpSZWZDb3VudGVkIG1ldGhvZHMgbGlrZSBSZWYo
KS9VbnJlZigpLiAqLwotICBVUEJfUkVGQ09VTlRFRF9DUFBNRVRIT0RTCi0KLSAgLyogRnVuY3Rp
b25hbGl0eSBmcm9tIHVwYjo6RGVmLiAqLwotICBjb25zdCBjaGFyKiBmdWxsX25hbWUoKSBjb25z
dDsKLQotICBib29sIHR5cGVfaXNfc2V0KCkgY29uc3Q7ICAvKiBzZXRfW2Rlc2NyaXB0b3JfXXR5
cGUoKSBoYXMgYmVlbiBjYWxsZWQ/ICovCi0gIFR5cGUgdHlwZSgpIGNvbnN0OyAgICAgICAgIC8q
IFJlcXVpcmVzIHRoYXQgdHlwZV9pc19zZXQoKSA9PSB0cnVlLiAqLwotICBMYWJlbCBsYWJlbCgp
IGNvbnN0OyAgICAgICAvKiBEZWZhdWx0cyB0byBVUEJfTEFCRUxfT1BUSU9OQUwuICovCi0gIGNv
bnN0IGNoYXIqIG5hbWUoKSBjb25zdDsgIC8qIE5VTEwgaWYgdW5pbml0aWFsaXplZC4gKi8KLSAg
dWludDMyX3QgbnVtYmVyKCkgY29uc3Q7ICAgLyogUmV0dXJucyAwIGlmIHVuaW5pdGlhbGl6ZWQu
ICovCi0gIGJvb2wgaXNfZXh0ZW5zaW9uKCkgY29uc3Q7Ci0KLSAgLyogQ29waWVzIHRoZSBKU09O
IG5hbWUgZm9yIHRoaXMgZmllbGQgaW50byB0aGUgZ2l2ZW4gYnVmZmVyLiAgUmV0dXJucyB0aGUK
LSAgICogYWN0dWFsIHNpemUgb2YgdGhlIEpTT04gbmFtZSwgaW5jbHVkaW5nIHRoZSBOVUxMIHRl
cm1pbmF0b3IuICBJZiB0aGUKLSAgICogcmV0dXJuIHZhbHVlIGlzIDAsIHRoZSBKU09OIG5hbWUg
aXMgdW5zZXQuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzCi0gICAqIGdyZWF0ZXIgdGhhbiBsZW4s
IHRoZSBKU09OIG5hbWUgd2FzIHRydW5jYXRlZC4gIFRoZSBidWZmZXIgaXMgYWx3YXlzCi0gICAq
IE5VTEwtdGVybWluYXRlZCBpZiBsZW4gPiAwLgotICAgKgotICAgKiBUaGUgSlNPTiBuYW1lIGFs
d2F5cyBkZWZhdWx0cyB0byBhIGNhbWVsQ2FzZWQgdmVyc2lvbiBvZiB0aGUgcmVndWxhcgotICAg
KiBuYW1lLiAgSG93ZXZlciBpZiB0aGUgcmVndWxhciBuYW1lIGlzIHVuc2V0LCB0aGUgSlNPTiBu
YW1lIHdpbGwgYmUgdW5zZXQKLSAgICogYWxzby4KLSAgICovCi0gIHNpemVfdCBHZXRKc29uTmFt
ZShjaGFyKiBidWYsIHNpemVfdCBsZW4pIGNvbnN0OwotCi0gIC8qIENvbnZlbmllbmNlIHZlcnNp
b24gb2YgdGhlIGFib3ZlIGZ1bmN0aW9uIHdoaWNoIGNvcGllcyB0aGUgSlNPTiBuYW1lCi0gICAq
IGludG8gdGhlIGdpdmVuIHN0cmluZywgcmV0dXJuaW5nIGZhbHNlIGlmIHRoZSBuYW1lIGlzIG5v
dCBzZXQuICovCi0gIHRlbXBsYXRlIDxjbGFzcyBUPgotICBib29sIEdldEpzb25OYW1lKFQqIHN0
cikgewotICAgIHN0ci0+cmVzaXplKEdldEpzb25OYW1lKE5VTEwsIDApKTsKLSAgICBHZXRKc29u
TmFtZSgmKCpzdHIpWzBdLCBzdHItPnNpemUoKSk7Ci0gICAgcmV0dXJuIHN0ci0+c2l6ZSgpID4g
MDsKLSAgfQotCi0gIC8qIEZvciBVUEJfVFlQRV9NRVNTQUdFIGZpZWxkcyBvbmx5IHdoZXJlIGlz
X3RhZ19kZWxpbWl0ZWQoKSA9PSBmYWxzZSwKLSAgICogaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBm
aWVsZCBzaG91bGQgaGF2ZSBsYXp5IHBhcnNpbmcgaGFuZGxlcnMgdGhhdCB5aWVsZAotICAgKiB0
aGUgdW5wYXJzZWQgc3RyaW5nIGZvciB0aGUgc3VibWVzc2FnZS4KLSAgICoKLSAgICogVE9ETyho
YWJlcm1hbik6IEkgdGhpbmsgd2Ugd2FudCB0byBtb3ZlIHRoaXMgaW50byBhIEZpZWxkT3B0aW9u
cyBjb250YWluZXIKLSAgICogd2hlbiB3ZSBhZGQgc3VwcG9ydCBmb3IgY3VzdG9tIG9wdGlvbnMg
KHRoZSBGaWVsZE9wdGlvbnMgc3RydWN0IHdpbGwKLSAgICogY29udGFpbiBib3RoIHJlZ3VsYXIg
RmllbGRPcHRpb25zIGxpa2UgImxhenkiICphbmQqIGN1c3RvbSBvcHRpb25zKS4gKi8KLSAgYm9v
bCBsYXp5KCkgY29uc3Q7Ci0KLSAgLyogRm9yIG5vbi1zdHJpbmcsIG5vbi1zdWJtZXNzYWdlIGZp
ZWxkcywgdGhpcyBpbmRpY2F0ZXMgd2hldGhlciBiaW5hcnkKLSAgICogcHJvdG9idWZzIGFyZSBl
bmNvZGVkIGluIHBhY2tlZCBvciBub24tcGFja2VkIGZvcm1hdC4KLSAgICoKLSAgICogVE9ETyho
YWJlcm1hbik6IHNlZSBub3RlIGFib3ZlIGFib3V0IHB1dHRpbmcgb3B0aW9ucyBsaWtlIHRoaXMg
aW50byBhCi0gICAqIEZpZWxkT3B0aW9ucyBjb250YWluZXIuICovCi0gIGJvb2wgcGFja2VkKCkg
Y29uc3Q7Ci0KLSAgLyogQW4gaW50ZWdlciB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4IGlu
dG8gYW4gYXJyYXkgb2YgZmllbGRzIGZvcgotICAgKiB3aGF0ZXZlciBtZXNzYWdlIHRoaXMgZmll
bGQgYmVsb25ncyB0by4gIEd1YXJhbnRlZWQgdG8gYmUgbGVzcyB0aGFuCi0gICAqIGYtPmNvbnRh
aW5pbmdfdHlwZSgpLT5maWVsZF9jb3VudCgpLiAgTWF5IG9ubHkgYmUgYWNjZXNzZWQgb25jZSB0
aGUgZGVmIGhhcwotICAgKiBiZWVuIGZpbmFsaXplZC4gKi8KLSAgdWludDMyX3QgaW5kZXgoKSBj
b25zdDsKLQotICAvKiBUaGUgTWVzc2FnZURlZiB0byB3aGljaCB0aGlzIGZpZWxkIGJlbG9uZ3Mu
Ci0gICAqCi0gICAqIElmIHRoaXMgZmllbGQgaGFzIGJlZW4gYWRkZWQgdG8gYSBNZXNzYWdlRGVm
LCB0aGF0IG1lc3NhZ2UgY2FuIGJlIHJldHJpZXZlZAotICAgKiBkaXJlY3RseSAodGhpcyBpcyBh
bHdheXMgdGhlIGNhc2UgZm9yIGZyb3plbiBGaWVsZERlZnMpLgotICAgKgotICAgKiBJZiB0aGUg
ZmllbGQgaGFzIG5vdCB5ZXQgYmVlbiBhZGRlZCB0byBhIE1lc3NhZ2VEZWYsIHlvdSBjYW4gc2V0
IHRoZSBuYW1lCi0gICAqIG9mIHRoZSBjb250YWluaW5nIHR5cGUgc3ltYm9saWNhbGx5IGluc3Rl
YWQuICBUaGlzIGlzIG1vc3RseSB1c2VmdWwgZm9yCi0gICAqIGV4dGVuc2lvbnMsIHdoZXJlIHRo
ZSBleHRlbnNpb24gaXMgZGVjbGFyZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBtZXNzYWdlLiAqLwot
ICBjb25zdCBNZXNzYWdlRGVmKiBjb250YWluaW5nX3R5cGUoKSBjb25zdDsKLSAgY29uc3QgY2hh
ciogY29udGFpbmluZ190eXBlX25hbWUoKTsKLQotICAvKiBUaGUgT25lb2ZEZWYgdG8gd2hpY2gg
dGhpcyBmaWVsZCBiZWxvbmdzLCBvciBOVUxMIGlmIHRoaXMgZmllbGQgaXMgbm90IHBhcnQKLSAg
ICogb2YgYSBvbmVvZi4gKi8KLSAgY29uc3QgT25lb2ZEZWYqIGNvbnRhaW5pbmdfb25lb2YoKSBj
b25zdDsKLQotICAvKiBUaGUgZmllbGQncyB0eXBlIGFjY29yZGluZyB0byB0aGUgZW51bSBpbiBk
ZXNjcmlwdG9yLnByb3RvLiAgVGhpcyBpcyBub3QKLSAgICogdGhlIHNhbWUgYXMgVVBCX1RZUEVf
KiwgYmVjYXVzZSBpdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gKGZvciBleGFtcGxlKQotICAgKiBJ
TlQzMiBhbmQgU0lOVDMyLCB3aGVyZWFzIG91ciAidHlwZSIgZW51bSBkb2VzIG5vdC4gIFRoaXMg
cmV0dXJuIG9mCi0gICAqIGRlc2NyaXB0b3JfdHlwZSgpIGlzIGEgZnVuY3Rpb24gb2YgdHlwZSgp
LCBpbnRlZ2VyX2Zvcm1hdCgpLCBhbmQKLSAgICogaXNfdGFnX2RlbGltaXRlZCgpLiAgTGlrZXdp
c2Ugc2V0X2Rlc2NyaXB0b3JfdHlwZSgpIHNldHMgYWxsIHRocmVlCi0gICAqIGFwcHJvcHJpYXRl
bHkuICovCi0gIERlc2NyaXB0b3JUeXBlIGRlc2NyaXB0b3JfdHlwZSgpIGNvbnN0OwotCi0gIC8q
IENvbnZlbmllbnQgZmllbGQgdHlwZSB0ZXN0cy4gKi8KLSAgYm9vbCBJc1N1Yk1lc3NhZ2UoKSBj
b25zdDsKLSAgYm9vbCBJc1N0cmluZygpIGNvbnN0OwotICBib29sIElzU2VxdWVuY2UoKSBjb25z
dDsKLSAgYm9vbCBJc1ByaW1pdGl2ZSgpIGNvbnN0OwotICBib29sIElzTWFwKCkgY29uc3Q7Ci0K
LSAgLyogV2hldGhlciB0aGlzIGZpZWxkIG11c3QgYmUgYWJsZSB0byBleHBsaWNpdGx5IHJlcHJl
c2VudCBwcmVzZW5jZToKLSAgICoKLSAgICogKiBUaGlzIGlzIGFsd2F5cyBmYWxzZSBmb3IgcmVw
ZWF0ZWQgZmllbGRzIChhbiBlbXB0eSByZXBlYXRlZCBmaWVsZCBpcwotICAgKiAgIGVxdWl2YWxl
bnQgdG8gYSByZXBlYXRlZCBmaWVsZCB3aXRoIHplcm8gZW50cmllcykuCi0gICAqCi0gICAqICog
VGhpcyBpcyBhbHdheXMgdHJ1ZSBmb3Igc3VibWVzc2FnZXMuCi0gICAqCi0gICAqICogRm9yIG90
aGVyIGZpZWxkcywgaXQgZGVwZW5kcyBvbiB0aGUgbWVzc2FnZSAoc2VlCi0gICAqICAgTWVzc2Fn
ZURlZjo6U2V0UHJpbWl0aXZlc0hhdmVQcmVzZW5jZSgpKQotICAgKi8KLSAgYm9vbCBIYXNQcmVz
ZW5jZSgpIGNvbnN0OwotCi0gIC8qIEhvdyBpbnRlZ2VycyBhcmUgZW5jb2RlZC4gIE9ubHkgbWVh
bmluZ2Z1bCBmb3IgaW50ZWdlciB0eXBlcy4KLSAgICogRGVmYXVsdHMgdG8gVVBCX0lOVEZNVF9W
QVJJQUJMRSwgYW5kIGlzIHJlc2V0IHdoZW4gInR5cGUiIGNoYW5nZXMuICovCi0gIEludGVnZXJG
b3JtYXQgaW50ZWdlcl9mb3JtYXQoKSBjb25zdDsKLQotICAvKiBXaGV0aGVyIGEgc3VibWVzc2Fn
ZSBmaWVsZCBpcyB0YWctZGVsaW1pdGVkIG9yIG5vdCAoaWYgZmFsc2UsIHRoZW4KLSAgICogbGVu
Z3RoLWRlbGltaXRlZCkuICBNYXkgb25seSBiZSBzZXQgd2hlbiB0eXBlKCkgPT0gVVBCX1RZUEVf
TUVTU0FHRS4gKi8KLSAgYm9vbCBpc190YWdfZGVsaW1pdGVkKCkgY29uc3Q7Ci0KLSAgLyogUmV0
dXJucyB0aGUgbm9uLXN0cmluZyBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGZpZWxkZGVmLCB3aGlj
aCBtYXkgZWl0aGVyCi0gICAqIGJlIHNvbWV0aGluZyB0aGUgY2xpZW50IHNldCBleHBsaWNpdGx5
IG9yIHRoZSAiZGVmYXVsdCBkZWZhdWx0IiAoMCBmb3IKLSAgICogbnVtYmVycywgZW1wdHkgZm9y
IHN0cmluZ3MpLiAgVGhlIGZpZWxkJ3MgdHlwZSBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgdGhlCi0g
ICAqIHJldHVybmVkIHZhbHVlLCBleGNlcHQgZm9yIGVudW0gZmllbGRzIHRoYXQgYXJlIHN0aWxs
IG11dGFibGUuCi0gICAqCi0gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGdpdmVuIGZ1bmN0aW9uIG1h
dGNoZXMgdGhlIGZpZWxkJ3MgY3VycmVudCB0eXBlLiAqLwotICBpbnQ2NF90IGRlZmF1bHRfaW50
NjQoKSBjb25zdDsKLSAgaW50MzJfdCBkZWZhdWx0X2ludDMyKCkgY29uc3Q7Ci0gIHVpbnQ2NF90
IGRlZmF1bHRfdWludDY0KCkgY29uc3Q7Ci0gIHVpbnQzMl90IGRlZmF1bHRfdWludDMyKCkgY29u
c3Q7Ci0gIGJvb2wgZGVmYXVsdF9ib29sKCkgY29uc3Q7Ci0gIGZsb2F0IGRlZmF1bHRfZmxvYXQo
KSBjb25zdDsKLSAgZG91YmxlIGRlZmF1bHRfZG91YmxlKCkgY29uc3Q7Ci0KLSAgLyogVGhlIHJl
c3VsdGluZyBzdHJpbmcgaXMgYWx3YXlzIE5VTEwtdGVybWluYXRlZC4gIElmIG5vbi1OVUxMLCB0
aGUgbGVuZ3RoCi0gICAqIHdpbGwgYmUgc3RvcmVkIGluICpsZW4uICovCi0gIGNvbnN0IGNoYXIg
KmRlZmF1bHRfc3RyaW5nKHNpemVfdCogbGVuKSBjb25zdDsKLQotICAvKiBGb3IgZnJvemVuIFVQ
Ql9UWVBFX0VOVU0gZmllbGRzLCBlbnVtIGRlZmF1bHRzIGNhbiBhbHdheXMgYmUgcmVhZCBhcyBl
aXRoZXIKLSAgICogc3RyaW5nIG9yIGludDMyLCBhbmQgYm90aCBvZiB0aGVzZSBtZXRob2RzIHdp
bGwgYWx3YXlzIHJldHVybiB0cnVlLgotICAgKgotICAgKiBGb3IgbXV0YWJsZSBVUEJfVFlQRV9F
TlVNIGZpZWxkcywgdGhlIHN0b3J5IGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQuCi0gICAqIEVu
dW0gZGVmYXVsdHMgYXJlIHVudXN1YWwuIFRoZXkgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgYXMg
c3RyaW5nIG9yIGludDMyLAotICAgKiBidXQgdG8gYmUgdmFsaWQgdGhlIGVudW0gbXVzdCBoYXZl
IHRoYXQgdmFsdWUgYXMgYSBtZW1iZXIuICBBbmQgaWYgbm8KLSAgICogZGVmYXVsdCBpcyBzcGVj
aWZpZWQsIHRoZSAiZGVmYXVsdCBkZWZhdWx0IiBjb21lcyBmcm9tIHRoZSBFbnVtRGVmLgotICAg
KgotICAgKiBXZSBhbGxvdyByZWFkaW5nIHRoZSBkZWZhdWx0IGFzIGVpdGhlciBhbiBpbnQzMiBv
ciBhIHN0cmluZywgYnV0IG9ubHkgaWYKLSAgICogd2UgaGF2ZSBhIG1lYW5pbmdmdWwgdmFsdWUg
dG8gcmVwb3J0LiAgV2UgaGF2ZSBhIG1lYW5pbmdmdWwgdmFsdWUgaWYgaXQgd2FzCi0gICAqIHNl
dCBleHBsaWNpdGx5LCBvciBpZiB3ZSBjb3VsZCBnZXQgdGhlICJkZWZhdWx0IGRlZmF1bHQiIGZy
b20gdGhlIEVudW1EZWYuCi0gICAqIEFsc28gaWYgeW91IGV4cGxpY2l0bHkgc2V0IHRoZSBuYW1l
IGFuZCB3ZSBmaW5kIHRoZSBudW1iZXIgaW4gdGhlIEVudW1EZWYgKi8KLSAgYm9vbCBFbnVtSGFz
U3RyaW5nRGVmYXVsdCgpIGNvbnN0OwotICBib29sIEVudW1IYXNJbnQzMkRlZmF1bHQoKSBjb25z
dDsKLQotICAvKiBTdWJtZXNzYWdlIGFuZCBlbnVtIGZpZWxkcyBtdXN0IHJlZmVyZW5jZSBhICJz
dWJkZWYiLCB3aGljaCBpcyB0aGUKLSAgICogdXBiOjpNZXNzYWdlRGVmIG9yIHVwYjo6RW51bURl
ZiB0aGF0IGRlZmluZXMgdGhlaXIgdHlwZS4gIE5vdGUgdGhhdCB3aGVuCi0gICAqIHRoZSBGaWVs
ZERlZiBpcyBtdXRhYmxlIGl0IG1heSBub3QgaGF2ZSBhIHN1YmRlZiAqeWV0KiwgYnV0IHRoaXMg
ZnVuY3Rpb24KLSAgICogc3RpbGwgcmV0dXJucyB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhlIGZp
ZWxkJ3MgdHlwZSByZXF1aXJlcyBhIHN1YmRlZi4gKi8KLSAgYm9vbCBIYXNTdWJEZWYoKSBjb25z
dDsKLQotICAvKiBSZXR1cm5zIHRoZSBlbnVtIG9yIHN1Ym1lc3NhZ2UgZGVmIGZvciB0aGlzIGZp
ZWxkLCBpZiBhbnkuICBUaGUgZmllbGQncwotICAgKiB0eXBlIG11c3QgbWF0Y2ggKGllLiB5b3Ug
bWF5IG9ubHkgY2FsbCBlbnVtX3N1YmRlZigpIGZvciBmaWVsZHMgd2hlcmUKLSAgICogdHlwZSgp
ID09IFVQQl9UWVBFX0VOVU0pLiAgUmV0dXJucyBOVUxMIGlmIHRoZSBzdWJkZWYgaGFzIG5vdCBi
ZWVuIHNldCBvcgotICAgKiBpcyBjdXJyZW50bHkgc2V0IHN5bWJvbGljYWxseS4gKi8KLSAgY29u
c3QgRW51bURlZiogZW51bV9zdWJkZWYoKSBjb25zdDsKLSAgY29uc3QgTWVzc2FnZURlZiogbWVz
c2FnZV9zdWJkZWYoKSBjb25zdDsKLQotICAvKiBSZXR1cm5zIHRoZSBnZW5lcmljIHN1YmRlZiBm
b3IgdGhpcyBmaWVsZC4gIFJlcXVpcmVzIHRoYXQgSGFzU3ViRGVmKCkgKGllLgotICAgKiBvbmx5
IHdvcmtzIGZvciBVUEJfVFlQRV9FTlVNIGFuZCBVUEJfVFlQRV9NRVNTQUdFIGZpZWxkcykuICov
Ci0gIGNvbnN0IERlZiogc3ViZGVmKCkgY29uc3Q7Ci0KLSAgLyogUmV0dXJucyB0aGUgc3ltYm9s
aWMgbmFtZSBvZiB0aGUgc3ViZGVmLiAgSWYgdGhlIHN1YmRlZiBpcyBjdXJyZW50bHkgc2V0Ci0g
ICAqIHVucmVzb2x2ZWQgKGllLiBzZXQgc3ltYm9saWNhbGx5KSByZXR1cm5zIHRoZSBzeW1ib2xp
YyBuYW1lLiAgSWYgaXQgaGFzCi0gICAqIGJlZW4gcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBzdWJk
ZWYsIHJldHVybnMgdGhlIG5hbWUgZnJvbSB0aGF0IHN1YmRlZi4gKi8KLSAgY29uc3QgY2hhciog
c3ViZGVmX25hbWUoKSBjb25zdDsKLQotICAvKiBTZXR0ZXJzIChub24tY29uc3QgbWV0aG9kcyks
IG9ubHkgdmFsaWQgZm9yIG11dGFibGUgRmllbGREZWZzISAqKioqKioqKioqKi8KLQotICBib29s
IHNldF9mdWxsX25hbWUoY29uc3QgY2hhciogZnVsbG5hbWUsIHVwYjo6U3RhdHVzKiBzKTsKLSAg
Ym9vbCBzZXRfZnVsbF9uYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBmdWxsbmFtZSwgdXBiOjpTdGF0
dXMqIHMpOwotCi0gIC8qIFRoaXMgbWF5IG9ubHkgYmUgY2FsbGVkIGlmIGNvbnRhaW5pbmdfdHlw
ZSgpID09IE5VTEwgKGllLiB0aGUgZmllbGQgaGFzIG5vdAotICAgKiBiZWVuIGFkZGVkIHRvIGEg
bWVzc2FnZSB5ZXQpLiAqLwotICBib29sIHNldF9jb250YWluaW5nX3R5cGVfbmFtZShjb25zdCBj
aGFyICpuYW1lLCBTdGF0dXMqIHN0YXR1cyk7Ci0gIGJvb2wgc2V0X2NvbnRhaW5pbmdfdHlwZV9u
YW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBTdGF0dXMqIHN0YXR1cyk7Ci0KLSAgLyogRGVm
YXVsdHMgdG8gZmFsc2UuICBXaGVuIHdlIGZyZWV6ZSwgd2UgZW5zdXJlIHRoYXQgdGhpcyBjYW4g
b25seSBiZSB0cnVlCi0gICAqIGZvciBsZW5ndGgtZGVsaW1pdGVkIG1lc3NhZ2UgZmllbGRzLiAg
UHJpb3IgdG8gZnJlZXppbmcgdGhpcyBjYW4gYmUgdHJ1ZSBvcgotICAgKiBmYWxzZSB3aXRoIG5v
IHJlc3RyaWN0aW9ucy4gKi8KLSAgdm9pZCBzZXRfbGF6eShib29sIGxhenkpOwotCi0gIC8qIERl
ZmF1bHRzIHRvIHRydWUuICBTZXRzIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyBlbmNvZGVkIGluIHBh
Y2tlZCBmb3JtYXQuICovCi0gIHZvaWQgc2V0X3BhY2tlZChib29sIHBhY2tlZCk7Ci0KLSAgLyog
InR5cGUiIG9yICJkZXNjcmlwdG9yX3R5cGUiIE1VU1QgYmUgc2V0IGV4cGxpY2l0bHkgYmVmb3Jl
IHRoZSBmaWVsZGRlZiBpcwotICAgKiBmaW5hbGl6ZWQuICBUaGVzZSBzZXR0ZXJzIHJlcXVpcmUg
dGhhdCB0aGUgZW51bSB2YWx1ZSBpcyB2YWxpZDsgaWYgdGhlCi0gICAqIHZhbHVlIGRpZCBub3Qg
Y29tZSBkaXJlY3RseSBmcm9tIGFuIGVudW0gY29uc3RhbnQsIHRoZSBjYWxsZXIgc2hvdWxkCi0g
ICAqIHZhbGlkYXRlIGl0IGZpcnN0IHdpdGggdGhlIGZ1bmN0aW9ucyBhYm92ZSAoQ2hlY2tGaWVs
ZFR5cGUoKSwgZXRjKS4gKi8KLSAgdm9pZCBzZXRfdHlwZShUeXBlIHR5cGUpOwotICB2b2lkIHNl
dF9sYWJlbChMYWJlbCBsYWJlbCk7Ci0gIHZvaWQgc2V0X2Rlc2NyaXB0b3JfdHlwZShEZXNjcmlw
dG9yVHlwZSB0eXBlKTsKLSAgdm9pZCBzZXRfaXNfZXh0ZW5zaW9uKGJvb2wgaXNfZXh0ZW5zaW9u
KTsKLQotICAvKiAibnVtYmVyIiBhbmQgIm5hbWUiIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgRmll
bGREZWYgaXMgYWRkZWQgdG8gYQotICAgKiBNZXNzYWdlRGVmLCBhbmQgbWF5IG5vdCBiZSBzZXQg
YWZ0ZXIgdGhhdC4KLSAgICoKLSAgICogIm5hbWUiIGlzIHRoZSBzYW1lIGFzIGZ1bGxfbmFtZSgp
L3NldF9mdWxsX25hbWUoKSwgYnV0IHNpbmNlIGZpZWxkZGVmcwotICAgKiBtb3N0IG9mdGVuIHVz
ZSBzaW1wbGUsIG5vbi1xdWFsaWZpZWQgbmFtZXMsIHdlIHByb3ZpZGUgdGhpcyBhY2Nlc3Nvcgot
ICAgKiBhbHNvLiAgR2VuZXJhbGx5IG9ubHkgZXh0ZW5zaW9ucyB3aWxsIHdhbnQgdG8gdGhpbmsg
b2YgdGhpcyBuYW1lIGFzCi0gICAqIGZ1bGx5LXF1YWxpZmllZC4gKi8KLSAgYm9vbCBzZXRfbnVt
YmVyKHVpbnQzMl90IG51bWJlciwgdXBiOjpTdGF0dXMqIHMpOwotICBib29sIHNldF9uYW1lKGNv
bnN0IGNoYXIqIG5hbWUsIHVwYjo6U3RhdHVzKiBzKTsKLSAgYm9vbCBzZXRfbmFtZShjb25zdCBz
dGQ6OnN0cmluZyYgbmFtZSwgdXBiOjpTdGF0dXMqIHMpOwotCi0gIC8qIFNldHMgdGhlIEpTT04g
bmFtZSB0byB0aGUgZ2l2ZW4gc3RyaW5nLiAqLwotICAvKiBUT0RPKGhhYmVybWFuKTogaW1wbGVt
ZW50LiAgUmlnaHQgbm93IG9ubHkgZGVmYXVsdCBqc29uX25hbWUgKGNhbWVsQ2FzZSkKLSAgICog
aXMgc3VwcG9ydGVkLiAqLwotICBib29sIHNldF9qc29uX25hbWUoY29uc3QgY2hhcioganNvbl9u
YW1lLCB1cGI6OlN0YXR1cyogcyk7Ci0gIGJvb2wgc2V0X2pzb25fbmFtZShjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSwgdXBiOjpTdGF0dXMqIHMpOwotCi0gIC8qIENsZWFycyB0aGUgSlNPTiBuYW1l
LiBUaGlzIHdpbGwgbWFrZSBpdCByZXZlcnQgdG8gaXRzIGRlZmF1bHQsIHdoaWNoIGlzCi0gICAq
IGEgY2FtZWxDYXNlZCB2ZXJzaW9uIG9mIHRoZSByZWd1bGFyIGZpZWxkIG5hbWUuICovCi0gIHZv
aWQgY2xlYXJfanNvbl9uYW1lKCk7Ci0KLSAgdm9pZCBzZXRfaW50ZWdlcl9mb3JtYXQoSW50ZWdl
ckZvcm1hdCBmb3JtYXQpOwotICBib29sIHNldF90YWdfZGVsaW1pdGVkKGJvb2wgdGFnX2RlbGlt
aXRlZCwgdXBiOjpTdGF0dXMqIHMpOwotCi0gIC8qIFNldHMgZGVmYXVsdCB2YWx1ZSBmb3IgdGhl
IGZpZWxkLiAgVGhlIGNhbGwgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSB0eXBlCi0gICAqIG9mIHRo
ZSBmaWVsZC4gIEVudW0gZmllbGRzIG1heSB1c2UgZWl0aGVyIHNldGludDMyIG9yIHNldHN0cmlu
ZyB0byBzZXQKLSAgICogdGhlIGRlZmF1bHQgbnVtZXJpY2FsbHkgb3Igc3ltYm9saWNhbGx5LCBy
ZXNwZWN0aXZlbHksIGJ1dCBzeW1ib2xpYwotICAgKiBkZWZhdWx0cyBtdXN0IGJlIHJlc29sdmVk
IGJlZm9yZSBmaW5hbGl6aW5nIChzZWUgUmVzb2x2ZUVudW1EZWZhdWx0KCkpLgotICAgKgotICAg
KiBDaGFuZ2luZyB0aGUgdHlwZSBvZiBhIGZpZWxkIHdpbGwgcmVzZXQgaXRzIGRlZmF1bHQuICov
Ci0gIHZvaWQgc2V0X2RlZmF1bHRfaW50NjQoaW50NjRfdCB2YWwpOwotICB2b2lkIHNldF9kZWZh
dWx0X2ludDMyKGludDMyX3QgdmFsKTsKLSAgdm9pZCBzZXRfZGVmYXVsdF91aW50NjQodWludDY0
X3QgdmFsKTsKLSAgdm9pZCBzZXRfZGVmYXVsdF91aW50MzIodWludDMyX3QgdmFsKTsKLSAgdm9p
ZCBzZXRfZGVmYXVsdF9ib29sKGJvb2wgdmFsKTsKLSAgdm9pZCBzZXRfZGVmYXVsdF9mbG9hdChm
bG9hdCB2YWwpOwotICB2b2lkIHNldF9kZWZhdWx0X2RvdWJsZShkb3VibGUgdmFsKTsKLSAgYm9v
bCBzZXRfZGVmYXVsdF9zdHJpbmcoY29uc3Qgdm9pZCAqc3RyLCBzaXplX3QgbGVuLCBTdGF0dXMg
KnMpOwotICBib29sIHNldF9kZWZhdWx0X3N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyAmc3RyLCBT
dGF0dXMgKnMpOwotICB2b2lkIHNldF9kZWZhdWx0X2NzdHIoY29uc3QgY2hhciAqc3RyLCBTdGF0
dXMgKnMpOwotCi0gIC8qIEJlZm9yZSBhIGZpZWxkZGVmIGlzIGZyb3plbiwgaXRzIHN1YmRlZiBt
YXkgYmUgc2V0IGVpdGhlciBkaXJlY3RseSAod2l0aCBhCi0gICAqIHVwYjo6RGVmKikgb3Igc3lt
Ym9saWNhbGx5LiAgU3ltYm9saWMgcmVmcyBtdXN0IGJlIHJlc29sdmVkIGJlZm9yZSB0aGUKLSAg
ICogY29udGFpbmluZyBtc2dkZWYgY2FuIGJlIGZyb3plbiAoc2VlIHVwYl9yZXNvbHZlKCkgYWJv
dmUpLiAgdXBiIGFsd2F5cwotICAgKiBndWFyYW50ZWVzIHRoYXQgYW55IGRlZiByZWFjaGFibGUg
ZnJvbSBhIGxpdmUgZGVmIHdpbGwgYWxzbyBiZSBrZXB0IGFsaXZlLgotICAgKgotICAgKiBCb3Ro
IG1ldGhvZHMgcmVxdWlyZSB0aGF0IHVwYl9oYXNzdWJkZWYoZikgKHNvIHRoZSB0eXBlIG11c3Qg
YmUgc2V0IHByaW9yCi0gICAqIHRvIGNhbGxpbmcgdGhlc2UgbWV0aG9kcykuICBSZXR1cm5zIGZh
bHNlIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBvciBpZgotICAgKiB0aGUgZ2l2ZW4gc3ViZGVm
IGlzIG5vdCBvZiB0aGUgY29ycmVjdCB0eXBlLiAgVGhlIHN1YmRlZiBpcyByZXNldCBpZiB0aGUK
LSAgICogZmllbGQncyB0eXBlIGlzIGNoYW5nZWQuICBUaGUgc3ViZGVmIGNhbiBiZSBzZXQgdG8g
TlVMTCB0byBjbGVhciBpdC4gKi8KLSAgYm9vbCBzZXRfc3ViZGVmKGNvbnN0IERlZiogc3ViZGVm
LCBTdGF0dXMqIHMpOwotICBib29sIHNldF9lbnVtX3N1YmRlZihjb25zdCBFbnVtRGVmKiBzdWJk
ZWYsIFN0YXR1cyogcyk7Ci0gIGJvb2wgc2V0X21lc3NhZ2Vfc3ViZGVmKGNvbnN0IE1lc3NhZ2VE
ZWYqIHN1YmRlZiwgU3RhdHVzKiBzKTsKLSAgYm9vbCBzZXRfc3ViZGVmX25hbWUoY29uc3QgY2hh
ciogbmFtZSwgU3RhdHVzKiBzKTsKLSAgYm9vbCBzZXRfc3ViZGVmX25hbWUoY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUsIFN0YXR1cyogcyk7Ci0KLSBwcml2YXRlOgotICBVUEJfRElTQUxMT1dfUE9E
X09QUyhGaWVsZERlZiwgdXBiOjpGaWVsZERlZikKLX07Ci0KLSMgZW5kaWYgIC8qIGRlZmluZWQo
X19jcGx1c3BsdXMpICovCi0KLVVQQl9CRUdJTl9FWFRFUk5fQwotCi0vKiBOYXRpdmUgQyBBUEku
ICovCi11cGJfZmllbGRkZWYgKnVwYl9maWVsZGRlZl9uZXcoY29uc3Qgdm9pZCAqb3duZXIpOwot
dXBiX2ZpZWxkZGVmICp1cGJfZmllbGRkZWZfZHVwKGNvbnN0IHVwYl9maWVsZGRlZiAqZiwgY29u
c3Qgdm9pZCAqb3duZXIpOwotCi0vKiBJbmNsdWRlIHVwYl9yZWZjb3VudGVkIG1ldGhvZHMgbGlr
ZSB1cGJfZmllbGRkZWZfcmVmKCkuICovCi1VUEJfUkVGQ09VTlRFRF9DTUVUSE9EUyh1cGJfZmll
bGRkZWYsIHVwYl9maWVsZGRlZl91cGNhc3QyKQotCi0vKiBNZXRob2RzIGZyb20gdXBiX2RlZi4g
Ki8KLWNvbnN0IGNoYXIgKnVwYl9maWVsZGRlZl9mdWxsbmFtZShjb25zdCB1cGJfZmllbGRkZWYg
KmYpOwotYm9vbCB1cGJfZmllbGRkZWZfc2V0ZnVsbG5hbWUodXBiX2ZpZWxkZGVmICpmLCBjb25z
dCBjaGFyICpmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0
dXMgKnMpOwotCi1ib29sIHVwYl9maWVsZGRlZl90eXBlaXNzZXQoY29uc3QgdXBiX2ZpZWxkZGVm
ICpmKTsKLXVwYl9maWVsZHR5cGVfdCB1cGJfZmllbGRkZWZfdHlwZShjb25zdCB1cGJfZmllbGRk
ZWYgKmYpOwotdXBiX2Rlc2NyaXB0b3J0eXBlX3QgdXBiX2ZpZWxkZGVmX2Rlc2NyaXB0b3J0eXBl
KGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci11cGJfbGFiZWxfdCB1cGJfZmllbGRkZWZfbGFiZWwo
Y29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLXVpbnQzMl90IHVwYl9maWVsZGRlZl9udW1iZXIoY29u
c3QgdXBiX2ZpZWxkZGVmICpmKTsKLWNvbnN0IGNoYXIgKnVwYl9maWVsZGRlZl9uYW1lKGNvbnN0
IHVwYl9maWVsZGRlZiAqZik7Ci1ib29sIHVwYl9maWVsZGRlZl9pc2V4dGVuc2lvbihjb25zdCB1
cGJfZmllbGRkZWYgKmYpOwotYm9vbCB1cGJfZmllbGRkZWZfbGF6eShjb25zdCB1cGJfZmllbGRk
ZWYgKmYpOwotYm9vbCB1cGJfZmllbGRkZWZfcGFja2VkKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7
Ci1zaXplX3QgdXBiX2ZpZWxkZGVmX2dldGpzb25uYW1lKGNvbnN0IHVwYl9maWVsZGRlZiAqZiwg
Y2hhciAqYnVmLCBzaXplX3QgbGVuKTsKLWNvbnN0IHVwYl9tc2dkZWYgKnVwYl9maWVsZGRlZl9j
b250YWluaW5ndHlwZShjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotY29uc3QgdXBiX29uZW9mZGVm
ICp1cGJfZmllbGRkZWZfY29udGFpbmluZ29uZW9mKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci11
cGJfbXNnZGVmICp1cGJfZmllbGRkZWZfY29udGFpbmluZ3R5cGVfbXV0YWJsZSh1cGJfZmllbGRk
ZWYgKmYpOwotY29uc3QgY2hhciAqdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlbmFtZSh1cGJf
ZmllbGRkZWYgKmYpOwotdXBiX2ludGZtdF90IHVwYl9maWVsZGRlZl9pbnRmbXQoY29uc3QgdXBi
X2ZpZWxkZGVmICpmKTsKLXVpbnQzMl90IHVwYl9maWVsZGRlZl9pbmRleChjb25zdCB1cGJfZmll
bGRkZWYgKmYpOwotYm9vbCB1cGJfZmllbGRkZWZfaXN0YWdkZWxpbShjb25zdCB1cGJfZmllbGRk
ZWYgKmYpOwotYm9vbCB1cGJfZmllbGRkZWZfaXNzdWJtc2coY29uc3QgdXBiX2ZpZWxkZGVmICpm
KTsKLWJvb2wgdXBiX2ZpZWxkZGVmX2lzc3RyaW5nKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1i
b29sIHVwYl9maWVsZGRlZl9pc3NlcShjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotYm9vbCB1cGJf
ZmllbGRkZWZfaXNwcmltaXRpdmUoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLWJvb2wgdXBiX2Zp
ZWxkZGVmX2lzbWFwKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1ib29sIHVwYl9maWVsZGRlZl9o
YXNwcmVzZW5jZShjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotaW50NjRfdCB1cGJfZmllbGRkZWZf
ZGVmYXVsdGludDY0KGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1pbnQzMl90IHVwYl9maWVsZGRl
Zl9kZWZhdWx0aW50MzIoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLXVpbnQ2NF90IHVwYl9maWVs
ZGRlZl9kZWZhdWx0dWludDY0KGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci11aW50MzJfdCB1cGJf
ZmllbGRkZWZfZGVmYXVsdHVpbnQzMihjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotYm9vbCB1cGJf
ZmllbGRkZWZfZGVmYXVsdGJvb2woY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLWZsb2F0IHVwYl9m
aWVsZGRlZl9kZWZhdWx0ZmxvYXQoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLWRvdWJsZSB1cGJf
ZmllbGRkZWZfZGVmYXVsdGRvdWJsZShjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotY29uc3QgY2hh
ciAqdXBiX2ZpZWxkZGVmX2RlZmF1bHRzdHIoY29uc3QgdXBiX2ZpZWxkZGVmICpmLCBzaXplX3Qg
Kmxlbik7Ci1ib29sIHVwYl9maWVsZGRlZl9lbnVtaGFzZGVmYXVsdGludDMyKGNvbnN0IHVwYl9m
aWVsZGRlZiAqZik7Ci1ib29sIHVwYl9maWVsZGRlZl9lbnVtaGFzZGVmYXVsdHN0cihjb25zdCB1
cGJfZmllbGRkZWYgKmYpOwotYm9vbCB1cGJfZmllbGRkZWZfaGFzc3ViZGVmKGNvbnN0IHVwYl9m
aWVsZGRlZiAqZik7Ci1jb25zdCB1cGJfZGVmICp1cGJfZmllbGRkZWZfc3ViZGVmKGNvbnN0IHVw
Yl9maWVsZGRlZiAqZik7Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJfZmllbGRkZWZfbXNnc3ViZGVm
KGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci1jb25zdCB1cGJfZW51bWRlZiAqdXBiX2ZpZWxkZGVm
X2VudW1zdWJkZWYoY29uc3QgdXBiX2ZpZWxkZGVmICpmKTsKLWNvbnN0IGNoYXIgKnVwYl9maWVs
ZGRlZl9zdWJkZWZuYW1lKGNvbnN0IHVwYl9maWVsZGRlZiAqZik7Ci0KLXZvaWQgdXBiX2ZpZWxk
ZGVmX3NldHR5cGUodXBiX2ZpZWxkZGVmICpmLCB1cGJfZmllbGR0eXBlX3QgdHlwZSk7Ci12b2lk
IHVwYl9maWVsZGRlZl9zZXRkZXNjcmlwdG9ydHlwZSh1cGJfZmllbGRkZWYgKmYsIGludCB0eXBl
KTsKLXZvaWQgdXBiX2ZpZWxkZGVmX3NldGxhYmVsKHVwYl9maWVsZGRlZiAqZiwgdXBiX2xhYmVs
X3QgbGFiZWwpOwotYm9vbCB1cGJfZmllbGRkZWZfc2V0bnVtYmVyKHVwYl9maWVsZGRlZiAqZiwg
dWludDMyX3QgbnVtYmVyLCB1cGJfc3RhdHVzICpzKTsKLWJvb2wgdXBiX2ZpZWxkZGVmX3NldG5h
bWUodXBiX2ZpZWxkZGVmICpmLCBjb25zdCBjaGFyICpuYW1lLCB1cGJfc3RhdHVzICpzKTsKLWJv
b2wgdXBiX2ZpZWxkZGVmX3NldGpzb25uYW1lKHVwYl9maWVsZGRlZiAqZiwgY29uc3QgY2hhciAq
bmFtZSwgdXBiX3N0YXR1cyAqcyk7Ci1ib29sIHVwYl9maWVsZGRlZl9jbGVhcmpzb25uYW1lKHVw
Yl9maWVsZGRlZiAqZik7Ci1ib29sIHVwYl9maWVsZGRlZl9zZXRjb250YWluaW5ndHlwZW5hbWUo
dXBiX2ZpZWxkZGVmICpmLCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpOwotdm9pZCB1cGJfZmllbGRkZWZfc2V0
aXNleHRlbnNpb24odXBiX2ZpZWxkZGVmICpmLCBib29sIGlzX2V4dGVuc2lvbik7Ci12b2lkIHVw
Yl9maWVsZGRlZl9zZXRsYXp5KHVwYl9maWVsZGRlZiAqZiwgYm9vbCBsYXp5KTsKLXZvaWQgdXBi
X2ZpZWxkZGVmX3NldHBhY2tlZCh1cGJfZmllbGRkZWYgKmYsIGJvb2wgcGFja2VkKTsKLXZvaWQg
dXBiX2ZpZWxkZGVmX3NldGludGZtdCh1cGJfZmllbGRkZWYgKmYsIHVwYl9pbnRmbXRfdCBmbXQp
Owotdm9pZCB1cGJfZmllbGRkZWZfc2V0dGFnZGVsaW0odXBiX2ZpZWxkZGVmICpmLCBib29sIHRh
Z19kZWxpbSk7Ci12b2lkIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0aW50NjQodXBiX2ZpZWxkZGVm
ICpmLCBpbnQ2NF90IHZhbCk7Ci12b2lkIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0aW50MzIodXBi
X2ZpZWxkZGVmICpmLCBpbnQzMl90IHZhbCk7Ci12b2lkIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0
dWludDY0KHVwYl9maWVsZGRlZiAqZiwgdWludDY0X3QgdmFsKTsKLXZvaWQgdXBiX2ZpZWxkZGVm
X3NldGRlZmF1bHR1aW50MzIodXBiX2ZpZWxkZGVmICpmLCB1aW50MzJfdCB2YWwpOwotdm9pZCB1
cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGJvb2wodXBiX2ZpZWxkZGVmICpmLCBib29sIHZhbCk7Ci12
b2lkIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0ZmxvYXQodXBiX2ZpZWxkZGVmICpmLCBmbG9hdCB2
YWwpOwotdm9pZCB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGRvdWJsZSh1cGJfZmllbGRkZWYgKmYs
IGRvdWJsZSB2YWwpOwotYm9vbCB1cGJfZmllbGRkZWZfc2V0ZGVmYXVsdHN0cih1cGJfZmllbGRk
ZWYgKmYsIGNvbnN0IHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXBiX3N0YXR1cyAqcyk7Ci12b2lkIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0
Y3N0cih1cGJfZmllbGRkZWYgKmYsIGNvbnN0IGNoYXIgKnN0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpOwotYm9vbCB1cGJfZmllbGRkZWZfc2V0c3Vi
ZGVmKHVwYl9maWVsZGRlZiAqZiwgY29uc3QgdXBiX2RlZiAqc3ViZGVmLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpOwotYm9vbCB1cGJfZmllbGRkZWZfc2V0bXNn
c3ViZGVmKHVwYl9maWVsZGRlZiAqZiwgY29uc3QgdXBiX21zZ2RlZiAqc3ViZGVmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpOwotYm9vbCB1cGJfZmllbGRk
ZWZfc2V0ZW51bXN1YmRlZih1cGJfZmllbGRkZWYgKmYsIGNvbnN0IHVwYl9lbnVtZGVmICpzdWJk
ZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpOwotYm9v
bCB1cGJfZmllbGRkZWZfc2V0c3ViZGVmbmFtZSh1cGJfZmllbGRkZWYgKmYsIGNvbnN0IGNoYXIg
Km5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMpOwot
Ci1ib29sIHVwYl9maWVsZGRlZl9jaGVja2xhYmVsKGludDMyX3QgbGFiZWwpOwotYm9vbCB1cGJf
ZmllbGRkZWZfY2hlY2t0eXBlKGludDMyX3QgdHlwZSk7Ci1ib29sIHVwYl9maWVsZGRlZl9jaGVj
a2Rlc2NyaXB0b3J0eXBlKGludDMyX3QgdHlwZSk7Ci1ib29sIHVwYl9maWVsZGRlZl9jaGVja2lu
dGZtdChpbnQzMl90IGZtdCk7Ci0KLVVQQl9FTkRfRVhURVJOX0MKLQotCi0vKiB1cGI6Ok1lc3Nh
Z2VEZWYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwotCi10eXBlZGVmIHVwYl9pbnR0YWJsZV9pdGVyIHVwYl9tc2dfZmllbGRfaXRl
cjsKLXR5cGVkZWYgdXBiX3N0cnRhYmxlX2l0ZXIgdXBiX21zZ19vbmVvZl9pdGVyOwotCi0vKiBX
ZWxsLWtub3duIGZpZWxkIHRhZyBudW1iZXJzIGZvciBtYXAtZW50cnkgbWVzc2FnZXMuICovCi0j
ZGVmaW5lIFVQQl9NQVBFTlRSWV9LRVkgICAxCi0jZGVmaW5lIFVQQl9NQVBFTlRSWV9WQUxVRSAy
Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBTdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSBz
aW5nbGUgLnByb3RvIG1lc3NhZ2UgdHlwZS4KLSAqCi0gKiBJdHMgYmFzZSBjbGFzcyBpcyB1cGI6
OkRlZiAodXNlIHVwYjo6dXBjYXN0KCkgdG8gY29udmVydCkuICovCi1jbGFzcyB1cGI6Ok1lc3Nh
Z2VEZWYgewotIHB1YmxpYzoKLSAgLyogUmV0dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9u
IGZhaWxlZC4gKi8KLSAgc3RhdGljIHJlZmZlZF9wdHI8TWVzc2FnZURlZj4gTmV3KCk7Ci0KLSAg
LyogdXBiOjpSZWZDb3VudGVkIG1ldGhvZHMgbGlrZSBSZWYoKS9VbnJlZigpLiAqLwotICBVUEJf
UkVGQ09VTlRFRF9DUFBNRVRIT0RTCi0KLSAgLyogRnVuY3Rpb25hbGl0eSBmcm9tIHVwYjo6RGVm
LiAqLwotICBjb25zdCBjaGFyKiBmdWxsX25hbWUoKSBjb25zdDsKLSAgY29uc3QgY2hhciogbmFt
ZSgpIGNvbnN0OwotICBib29sIHNldF9mdWxsX25hbWUoY29uc3QgY2hhciogZnVsbG5hbWUsIFN0
YXR1cyogcyk7Ci0gIGJvb2wgc2V0X2Z1bGxfbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZnVsbG5h
bWUsIFN0YXR1cyogcyk7Ci0KLSAgLyogQ2FsbCB0byBmcmVlemUgdGhpcyBNZXNzYWdlRGVmLgot
ICAgKiBXQVJOSU5HOiB0aGlzIHdpbGwgZmFpbCBpZiB0aGlzIG1lc3NhZ2UgaGFzIGFueSB1bmZy
b3plbiBzdWJtZXNzYWdlcyEKLSAgICogTWVzc2FnZXMgd2l0aCBjeWNsZXMgbXVzdCBiZSBmcm96
ZW4gYXMgYSBiYXRjaCB1c2luZyB1cGI6OkRlZjo6RnJlZXplKCkuICovCi0gIGJvb2wgRnJlZXpl
KFN0YXR1cyogcyk7Ci0KLSAgLyogVGhlIG51bWJlciBvZiBmaWVsZHMgdGhhdCBiZWxvbmcgdG8g
dGhlIE1lc3NhZ2VEZWYuICovCi0gIGludCBmaWVsZF9jb3VudCgpIGNvbnN0OwotCi0gIC8qIFRo
ZSBudW1iZXIgb2Ygb25lb2ZzIHRoYXQgYmVsb25nIHRvIHRoZSBNZXNzYWdlRGVmLiAqLwotICBp
bnQgb25lb2ZfY291bnQoKSBjb25zdDsKLQotICAvKiBBZGRzIGEgZmllbGQgKHVwYl9maWVsZGRl
ZiBvYmplY3QpIHRvIGEgbXNnZGVmLiAgUmVxdWlyZXMgdGhhdCB0aGUgbXNnZGVmCi0gICAqIGFu
ZCB0aGUgZmllbGRkZWZzIGFyZSBtdXRhYmxlLiAgVGhlIGZpZWxkZGVmJ3MgbmFtZSBhbmQgbnVt
YmVyIG11c3QgYmUKLSAgICogc2V0LCBhbmQgdGhlIG1lc3NhZ2UgbWF5IG5vdCBhbHJlYWR5IGNv
bnRhaW4gYW55IGZpZWxkIHdpdGggdGhpcyBuYW1lIG9yCi0gICAqIG51bWJlciwgYW5kIHRoaXMg
ZmllbGRkZWYgbWF5IG5vdCBiZSBwYXJ0IG9mIGFub3RoZXIgbWVzc2FnZS4gIEluIGVycm9yCi0g
ICAqIGNhc2VzIGZhbHNlIGlzIHJldHVybmVkIGFuZCB0aGUgbXNnZGVmIGlzIHVuY2hhbmdlZC4K
LSAgICoKLSAgICogSWYgdGhlIGdpdmVuIGZpZWxkIGlzIHBhcnQgb2YgYSBvbmVvZiwgdGhpcyBj
YWxsIHN1Y2NlZWRzIGlmIGFuZCBvbmx5IGlmCi0gICAqIHRoYXQgb25lb2YgaXMgYWxyZWFkeSBw
YXJ0IG9mIHRoaXMgbXNnZGVmLiAoTm90ZSB0aGF0IGFkZGluZyBhIG9uZW9mIHRvIGEKLSAgICog
bXNnZGVmIGF1dG9tYXRpY2FsbHkgYWRkcyBhbGwgb2YgaXRzIGZpZWxkcyB0byB0aGUgbXNnZGVm
IGF0IHRoZSB0aW1lIHRoYXQKLSAgICogdGhlIG9uZW9mIGlzIGFkZGVkLCBzbyBpdCBpcyB1c3Vh
bGx5IG1vcmUgaWRpb21hdGljIHRvIGFkZCB0aGUgb25lb2YncwotICAgKiBmaWVsZHMgZmlyc3Qg
dGhlbiBhZGQgdGhlIG9uZW9mIHRvIHRoZSBtc2dkZWYuIFRoaXMgY2FzZSBpcyBzdXBwb3J0ZWQg
Zm9yCi0gICAqIGNvbnZlbmllbmNlLikKLSAgICoKLSAgICogSWYgfGZ8IGlzIGFscmVhZHkgcGFy
dCBvZiB0aGlzIE1lc3NhZ2VEZWYsIHRoaXMgbWV0aG9kIHBlcmZvcm1zIG5vIGFjdGlvbgotICAg
KiBhbmQgcmV0dXJucyB0cnVlIChzdWNjZXNzKS4gVGh1cywgdGhpcyBtZXRob2QgaXMgaWRlbXBv
dGVudC4gKi8KLSAgYm9vbCBBZGRGaWVsZChGaWVsZERlZiogZiwgU3RhdHVzKiBzKTsKLSAgYm9v
bCBBZGRGaWVsZChjb25zdCByZWZmZWRfcHRyPEZpZWxkRGVmPiYgZiwgU3RhdHVzKiBzKTsKLQot
ICAvKiBBZGRzIGEgb25lb2YgKHVwYl9vbmVvZmRlZiBvYmplY3QpIHRvIGEgbXNnZGVmLiBSZXF1
aXJlcyB0aGF0IHRoZSBtc2dkZWYsCi0gICAqIG9uZW9mLCBhbmQgYW55IGZpZWxkZGVmcyBhcmUg
bXV0YWJsZSwgdGhhdCB0aGUgZmllbGRkZWZzIGNvbnRhaW5lZCBpbiB0aGUKLSAgICogb25lb2Yg
ZG8gbm90IGhhdmUgYW55IG5hbWUgb3IgbnVtYmVyIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGZp
ZWxkcyBpbiB0aGUKLSAgICogbXNnZGVmLCBhbmQgdGhhdCB0aGUgb25lb2YncyBuYW1lIGlzIHVu
aXF1ZSBhbW9uZyBhbGwgb25lb2ZzIGluIHRoZSBtc2dkZWYuCi0gICAqIElmIHRoZSBvbmVvZiBp
cyBhZGRlZCBzdWNjZXNzZnVsbHksIGFsbCBvZiBpdHMgZmllbGRzIHdpbGwgYmUgYWRkZWQKLSAg
ICogZGlyZWN0bHkgdG8gdGhlIG1zZ2RlZiBhcyB3ZWxsLiBJbiBlcnJvciBjYXNlcywgZmFsc2Ug
aXMgcmV0dXJuZWQgYW5kIHRoZQotICAgKiBtc2dkZWYgaXMgdW5jaGFuZ2VkLiAqLwotICBib29s
IEFkZE9uZW9mKE9uZW9mRGVmKiBvLCBTdGF0dXMqIHMpOwotICBib29sIEFkZE9uZW9mKGNvbnN0
IHJlZmZlZF9wdHI8T25lb2ZEZWY+JiBvLCBTdGF0dXMqIHMpOwotCi0gIHVwYl9zeW50YXhfdCBz
eW50YXgoKSBjb25zdDsKLQotICAvKiBSZXR1cm5zIGZhbHNlIGlmIHdlIGRvbid0IHN1cHBvcnQg
dGhpcyBzeW50YXggdmFsdWUuICovCi0gIGJvb2wgc2V0X3N5bnRheCh1cGJfc3ludGF4X3Qgc3lu
dGF4KTsKLQotICAvKiBTZXQgdGhpcyB0byBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IHByaW1pdGl2
ZSBmaWVsZHMgc2hvdWxkIG5vdCBoYXZlCi0gICAqIGV4cGxpY2l0IHByZXNlbmNlIGluZm9ybWF0
aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiAgVGhpcyB3aWxsIGFmZmVjdCBhbGwKLSAgICogZmll
bGRzIGFkZGVkIHRvIHRoaXMgbWVzc2FnZS4gIERlZmF1bHRzIHRvIHRydWUuICovCi0gIHZvaWQg
U2V0UHJpbWl0aXZlc0hhdmVQcmVzZW5jZShib29sIGhhdmVfcHJlc2VuY2UpOwotCi0gIC8qIFRo
ZXNlIHJldHVybiBOVUxMIGlmIHRoZSBmaWVsZCBpcyBub3QgZm91bmQuICovCi0gIEZpZWxkRGVm
KiBGaW5kRmllbGRCeU51bWJlcih1aW50MzJfdCBudW1iZXIpOwotICBGaWVsZERlZiogRmluZEZp
ZWxkQnlOYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pOwotICBjb25zdCBGaWVsZERl
ZiogRmluZEZpZWxkQnlOdW1iZXIodWludDMyX3QgbnVtYmVyKSBjb25zdDsKLSAgY29uc3QgRmll
bGREZWYqIEZpbmRGaWVsZEJ5TmFtZShjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuKSBjb25z
dDsKLQotCi0gIEZpZWxkRGVmKiBGaW5kRmllbGRCeU5hbWUoY29uc3QgY2hhciAqbmFtZSkgewot
ICAgIHJldHVybiBGaW5kRmllbGRCeU5hbWUobmFtZSwgc3RybGVuKG5hbWUpKTsKLSAgfQotICBj
b25zdCBGaWVsZERlZiogRmluZEZpZWxkQnlOYW1lKGNvbnN0IGNoYXIgKm5hbWUpIGNvbnN0IHsK
LSAgICByZXR1cm4gRmluZEZpZWxkQnlOYW1lKG5hbWUsIHN0cmxlbihuYW1lKSk7Ci0gIH0KLQot
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgRmllbGREZWYqIEZpbmRGaWVsZEJ5TmFtZShjb25zdCBU
JiBzdHIpIHsKLSAgICByZXR1cm4gRmluZEZpZWxkQnlOYW1lKHN0ci5jX3N0cigpLCBzdHIuc2l6
ZSgpKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgY29uc3QgRmllbGREZWYqIEZpbmRG
aWVsZEJ5TmFtZShjb25zdCBUJiBzdHIpIGNvbnN0IHsKLSAgICByZXR1cm4gRmluZEZpZWxkQnlO
YW1lKHN0ci5jX3N0cigpLCBzdHIuc2l6ZSgpKTsKLSAgfQotCi0gIE9uZW9mRGVmKiBGaW5kT25l
b2ZCeU5hbWUoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbik7Ci0gIGNvbnN0IE9uZW9mRGVm
KiBGaW5kT25lb2ZCeU5hbWUoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbikgY29uc3Q7Ci0K
LSAgT25lb2ZEZWYqIEZpbmRPbmVvZkJ5TmFtZShjb25zdCBjaGFyKiBuYW1lKSB7Ci0gICAgcmV0
dXJuIEZpbmRPbmVvZkJ5TmFtZShuYW1lLCBzdHJsZW4obmFtZSkpOwotICB9Ci0gIGNvbnN0IE9u
ZW9mRGVmKiBGaW5kT25lb2ZCeU5hbWUoY29uc3QgY2hhciogbmFtZSkgY29uc3QgewotICAgIHJl
dHVybiBGaW5kT25lb2ZCeU5hbWUobmFtZSwgc3RybGVuKG5hbWUpKTsKLSAgfQotCi0gIHRlbXBs
YXRlPGNsYXNzIFQ+Ci0gIE9uZW9mRGVmKiBGaW5kT25lb2ZCeU5hbWUoY29uc3QgVCYgc3RyKSB7
Ci0gICAgcmV0dXJuIEZpbmRPbmVvZkJ5TmFtZShzdHIuY19zdHIoKSwgc3RyLnNpemUoKSk7Ci0g
IH0KLSAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgY29uc3QgT25lb2ZEZWYqIEZpbmRPbmVvZkJ5TmFt
ZShjb25zdCBUJiBzdHIpIGNvbnN0IHsKLSAgICByZXR1cm4gRmluZE9uZW9mQnlOYW1lKHN0ci5j
X3N0cigpLCBzdHIuc2l6ZSgpKTsKLSAgfQotCi0gIC8qIFJldHVybnMgYSBuZXcgbXNnZGVmIHRo
YXQgaXMgYSBjb3B5IG9mIHRoZSBnaXZlbiBtc2dkZWYgKGFuZCBhIGNvcHkgb2YgYWxsCi0gICAq
IHRoZSBmaWVsZHMpIGJ1dCB3aXRoIGFueSByZWZlcmVuY2VzIHRvIHN1Ym1lc3NhZ2VzIGJyb2tl
biBhbmQgcmVwbGFjZWQKLSAgICogd2l0aCBqdXN0IHRoZSBuYW1lIG9mIHRoZSBzdWJtZXNzYWdl
LiAgUmV0dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uCi0gICAqIGZhaWxlZC4KLSAgICoK
LSAgICogVE9ETyhoYWJlcm1hbik6IHdoaWNoIGlzIG1vcmUgdXNlZnVsLCBrZWVwaW5nIGZpZWxk
cyByZXNvbHZlZCBvcgotICAgKiB1bnJlc29sdmluZyB0aGVtPyAgSWYgdGhlcmUncyBubyBvYnZp
b3VzIGFuc3dlciwgU2hvdWxkIHRoaXMgZnVuY3Rpb25hbGl0eQotICAgKiBqdXN0IGJlIG1vdmVk
IGludG8gc3ltdGFiLmM/ICovCi0gIE1lc3NhZ2VEZWYqIER1cChjb25zdCB2b2lkKiBvd25lcikg
Y29uc3Q7Ci0KLSAgLyogSXMgdGhpcyBtZXNzYWdlIGEgbWFwIGVudHJ5PyAqLwotICB2b2lkIHNl
dG1hcGVudHJ5KGJvb2wgbWFwX2VudHJ5KTsKLSAgYm9vbCBtYXBlbnRyeSgpIGNvbnN0OwotCi0g
IC8qIEl0ZXJhdGlvbiBvdmVyIGZpZWxkcy4gIFRoZSBvcmRlciBpcyB1bmRlZmluZWQuICovCi0g
IGNsYXNzIGZpZWxkX2l0ZXJhdG9yCi0gICAgICA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6
Zm9yd2FyZF9pdGVyYXRvcl90YWcsIEZpZWxkRGVmKj4gewotICAgcHVibGljOgotICAgIGV4cGxp
Y2l0IGZpZWxkX2l0ZXJhdG9yKE1lc3NhZ2VEZWYqIG1kKTsKLSAgICBzdGF0aWMgZmllbGRfaXRl
cmF0b3IgZW5kKE1lc3NhZ2VEZWYqIG1kKTsKLQotICAgIHZvaWQgb3BlcmF0b3IrKygpOwotICAg
IEZpZWxkRGVmKiBvcGVyYXRvciooKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
ZmllbGRfaXRlcmF0b3ImIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
ZmllbGRfaXRlcmF0b3ImIG90aGVyKSBjb25zdDsKLQotICAgcHJpdmF0ZToKLSAgICB1cGJfbXNn
X2ZpZWxkX2l0ZXIgaXRlcl87Ci0gIH07Ci0KLSAgY2xhc3MgY29uc3RfZmllbGRfaXRlcmF0b3IK
LSAgICAgIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywg
Y29uc3QgRmllbGREZWYqPiB7Ci0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgY29uc3RfZmllbGRf
aXRlcmF0b3IoY29uc3QgTWVzc2FnZURlZiogbWQpOwotICAgIHN0YXRpYyBjb25zdF9maWVsZF9p
dGVyYXRvciBlbmQoY29uc3QgTWVzc2FnZURlZiogbWQpOwotCi0gICAgdm9pZCBvcGVyYXRvcisr
KCk7Ci0gICAgY29uc3QgRmllbGREZWYqIG9wZXJhdG9yKigpIGNvbnN0OwotICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBjb25zdF9maWVsZF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0OwotICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9maWVsZF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0Owot
Ci0gICBwcml2YXRlOgotICAgIHVwYl9tc2dfZmllbGRfaXRlciBpdGVyXzsKLSAgfTsKLQotICAv
KiBJdGVyYXRpb24gb3ZlciBvbmVvZnMuIFRoZSBvcmRlciBpcyB1bmRlZmluZWQuICovCi0gIGNs
YXNzIG9uZW9mX2l0ZXJhdG9yCi0gICAgICA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9y
d2FyZF9pdGVyYXRvcl90YWcsIEZpZWxkRGVmKj4gewotICAgcHVibGljOgotICAgIGV4cGxpY2l0
IG9uZW9mX2l0ZXJhdG9yKE1lc3NhZ2VEZWYqIG1kKTsKLSAgICBzdGF0aWMgb25lb2ZfaXRlcmF0
b3IgZW5kKE1lc3NhZ2VEZWYqIG1kKTsKLQotICAgIHZvaWQgb3BlcmF0b3IrKygpOwotICAgIE9u
ZW9mRGVmKiBvcGVyYXRvciooKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgb25l
b2ZfaXRlcmF0b3ImIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qgb25l
b2ZfaXRlcmF0b3ImIG90aGVyKSBjb25zdDsKLQotICAgcHJpdmF0ZToKLSAgICB1cGJfbXNnX29u
ZW9mX2l0ZXIgaXRlcl87Ci0gIH07Ci0KLSAgY2xhc3MgY29uc3Rfb25lb2ZfaXRlcmF0b3IKLSAg
ICAgIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgY29u
c3QgRmllbGREZWYqPiB7Ci0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgY29uc3Rfb25lb2ZfaXRl
cmF0b3IoY29uc3QgTWVzc2FnZURlZiogbWQpOwotICAgIHN0YXRpYyBjb25zdF9vbmVvZl9pdGVy
YXRvciBlbmQoY29uc3QgTWVzc2FnZURlZiogbWQpOwotCi0gICAgdm9pZCBvcGVyYXRvcisrKCk7
Ci0gICAgY29uc3QgT25lb2ZEZWYqIG9wZXJhdG9yKigpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBjb25zdF9vbmVvZl9pdGVyYXRvciYgb3RoZXIpIGNvbnN0OwotICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBjb25zdF9vbmVvZl9pdGVyYXRvciYgb3RoZXIpIGNvbnN0OwotCi0g
ICBwcml2YXRlOgotICAgIHVwYl9tc2dfb25lb2ZfaXRlciBpdGVyXzsKLSAgfTsKLQotICBjbGFz
cyBGaWVsZEFjY2Vzc29yIHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGaWVsZEFjY2Vzc29y
KE1lc3NhZ2VEZWYqIG1zZykgOiBtc2dfKG1zZykge30KLSAgICBmaWVsZF9pdGVyYXRvciBiZWdp
bigpIHsgcmV0dXJuIG1zZ18tPmZpZWxkX2JlZ2luKCk7IH0KLSAgICBmaWVsZF9pdGVyYXRvciBl
bmQoKSB7IHJldHVybiBtc2dfLT5maWVsZF9lbmQoKTsgfQotICAgcHJpdmF0ZToKLSAgICBNZXNz
YWdlRGVmKiBtc2dfOwotICB9OwotCi0gIGNsYXNzIENvbnN0RmllbGRBY2Nlc3NvciB7Ci0gICBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQ29uc3RGaWVsZEFjY2Vzc29yKGNvbnN0IE1lc3NhZ2VEZWYq
IG1zZykgOiBtc2dfKG1zZykge30KLSAgICBjb25zdF9maWVsZF9pdGVyYXRvciBiZWdpbigpIHsg
cmV0dXJuIG1zZ18tPmZpZWxkX2JlZ2luKCk7IH0KLSAgICBjb25zdF9maWVsZF9pdGVyYXRvciBl
bmQoKSB7IHJldHVybiBtc2dfLT5maWVsZF9lbmQoKTsgfQotICAgcHJpdmF0ZToKLSAgICBjb25z
dCBNZXNzYWdlRGVmKiBtc2dfOwotICB9OwotCi0gIGNsYXNzIE9uZW9mQWNjZXNzb3IgewotICAg
cHVibGljOgotICAgIGV4cGxpY2l0IE9uZW9mQWNjZXNzb3IoTWVzc2FnZURlZiogbXNnKSA6IG1z
Z18obXNnKSB7fQotICAgIG9uZW9mX2l0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbXNnXy0+b25l
b2ZfYmVnaW4oKTsgfQotICAgIG9uZW9mX2l0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1zZ18tPm9u
ZW9mX2VuZCgpOyB9Ci0gICBwcml2YXRlOgotICAgIE1lc3NhZ2VEZWYqIG1zZ187Ci0gIH07Ci0K
LSAgY2xhc3MgQ29uc3RPbmVvZkFjY2Vzc29yIHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBD
b25zdE9uZW9mQWNjZXNzb3IoY29uc3QgTWVzc2FnZURlZiogbXNnKSA6IG1zZ18obXNnKSB7fQot
ICAgIGNvbnN0X29uZW9mX2l0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbXNnXy0+b25lb2ZfYmVn
aW4oKTsgfQotICAgIGNvbnN0X29uZW9mX2l0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1zZ18tPm9u
ZW9mX2VuZCgpOyB9Ci0gICBwcml2YXRlOgotICAgIGNvbnN0IE1lc3NhZ2VEZWYqIG1zZ187Ci0g
IH07Ci0KLSAgZmllbGRfaXRlcmF0b3IgZmllbGRfYmVnaW4oKTsKLSAgZmllbGRfaXRlcmF0b3Ig
ZmllbGRfZW5kKCk7Ci0gIGNvbnN0X2ZpZWxkX2l0ZXJhdG9yIGZpZWxkX2JlZ2luKCkgY29uc3Q7
Ci0gIGNvbnN0X2ZpZWxkX2l0ZXJhdG9yIGZpZWxkX2VuZCgpIGNvbnN0OwotCi0gIG9uZW9mX2l0
ZXJhdG9yIG9uZW9mX2JlZ2luKCk7Ci0gIG9uZW9mX2l0ZXJhdG9yIG9uZW9mX2VuZCgpOwotICBj
b25zdF9vbmVvZl9pdGVyYXRvciBvbmVvZl9iZWdpbigpIGNvbnN0OwotICBjb25zdF9vbmVvZl9p
dGVyYXRvciBvbmVvZl9lbmQoKSBjb25zdDsKLQotICBGaWVsZEFjY2Vzc29yIGZpZWxkcygpIHsg
cmV0dXJuIEZpZWxkQWNjZXNzb3IodGhpcyk7IH0KLSAgQ29uc3RGaWVsZEFjY2Vzc29yIGZpZWxk
cygpIGNvbnN0IHsgcmV0dXJuIENvbnN0RmllbGRBY2Nlc3Nvcih0aGlzKTsgfQotICBPbmVvZkFj
Y2Vzc29yIG9uZW9mcygpIHsgcmV0dXJuIE9uZW9mQWNjZXNzb3IodGhpcyk7IH0KLSAgQ29uc3RP
bmVvZkFjY2Vzc29yIG9uZW9mcygpIGNvbnN0IHsgcmV0dXJuIENvbnN0T25lb2ZBY2Nlc3Nvcih0
aGlzKTsgfQotCi0gcHJpdmF0ZToKLSAgVVBCX0RJU0FMTE9XX1BPRF9PUFMoTWVzc2FnZURlZiwg
dXBiOjpNZXNzYWdlRGVmKQotfTsKLQotI2VuZGlmICAvKiBfX2NwbHVzcGx1cyAqLwotCi1VUEJf
QkVHSU5fRVhURVJOX0MKLQotLyogUmV0dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZh
aWxlZC4gKi8KLXVwYl9tc2dkZWYgKnVwYl9tc2dkZWZfbmV3KGNvbnN0IHZvaWQgKm93bmVyKTsK
LQotLyogSW5jbHVkZSB1cGJfcmVmY291bnRlZCBtZXRob2RzIGxpa2UgdXBiX21zZ2RlZl9yZWYo
KS4gKi8KLVVQQl9SRUZDT1VOVEVEX0NNRVRIT0RTKHVwYl9tc2dkZWYsIHVwYl9tc2dkZWZfdXBj
YXN0MikKLQotYm9vbCB1cGJfbXNnZGVmX2ZyZWV6ZSh1cGJfbXNnZGVmICptLCB1cGJfc3RhdHVz
ICpzdGF0dXMpOwotCi11cGJfbXNnZGVmICp1cGJfbXNnZGVmX2R1cChjb25zdCB1cGJfbXNnZGVm
ICptLCBjb25zdCB2b2lkICpvd25lcik7Ci1jb25zdCBjaGFyICp1cGJfbXNnZGVmX2Z1bGxuYW1l
KGNvbnN0IHVwYl9tc2dkZWYgKm0pOwotY29uc3QgY2hhciAqdXBiX21zZ2RlZl9uYW1lKGNvbnN0
IHVwYl9tc2dkZWYgKm0pOwotaW50IHVwYl9tc2dkZWZfbnVtb25lb2ZzKGNvbnN0IHVwYl9tc2dk
ZWYgKm0pOwotdXBiX3N5bnRheF90IHVwYl9tc2dkZWZfc3ludGF4KGNvbnN0IHVwYl9tc2dkZWYg
Km0pOwotCi1ib29sIHVwYl9tc2dkZWZfYWRkZmllbGQodXBiX21zZ2RlZiAqbSwgdXBiX2ZpZWxk
ZGVmICpmLCBjb25zdCB2b2lkICpyZWZfZG9ub3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
dXBiX3N0YXR1cyAqcyk7Ci1ib29sIHVwYl9tc2dkZWZfYWRkb25lb2YodXBiX21zZ2RlZiAqbSwg
dXBiX29uZW9mZGVmICpvLCBjb25zdCB2b2lkICpyZWZfZG9ub3IsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgdXBiX3N0YXR1cyAqcyk7Ci1ib29sIHVwYl9tc2dkZWZfc2V0ZnVsbG5hbWUodXBi
X21zZ2RlZiAqbSwgY29uc3QgY2hhciAqZnVsbG5hbWUsIHVwYl9zdGF0dXMgKnMpOwotdm9pZCB1
cGJfbXNnZGVmX3NldG1hcGVudHJ5KHVwYl9tc2dkZWYgKm0sIGJvb2wgbWFwX2VudHJ5KTsKLWJv
b2wgdXBiX21zZ2RlZl9tYXBlbnRyeShjb25zdCB1cGJfbXNnZGVmICptKTsKLWJvb2wgdXBiX21z
Z2RlZl9zZXRzeW50YXgodXBiX21zZ2RlZiAqbSwgdXBiX3N5bnRheF90IHN5bnRheCk7Ci0KLS8q
IEZpZWxkIGxvb2t1cCBpbiBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgdmFyaWF0aW9uczoKLSAqICAg
LSBpdG9mID0gaW50IHRvIGZpZWxkCi0gKiAgIC0gbnRvZiA9IG5hbWUgdG8gZmllbGQKLSAqICAg
LSBudG9meiA9IG5hbWUgdG8gZmllbGQsIG51bGwtdGVybWluYXRlZCBzdHJpbmcuICovCi1jb25z
dCB1cGJfZmllbGRkZWYgKnVwYl9tc2dkZWZfaXRvZihjb25zdCB1cGJfbXNnZGVmICptLCB1aW50
MzJfdCBpKTsKLWNvbnN0IHVwYl9maWVsZGRlZiAqdXBiX21zZ2RlZl9udG9mKGNvbnN0IHVwYl9t
c2dkZWYgKm0sIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgbGVuKTsKLWludCB1cGJfbXNnZGVmX251bWZpZWxkcyhjb25zdCB1cGJf
bXNnZGVmICptKTsKLQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYl9tc2dkZWZf
bnRvZnooY29uc3QgdXBiX21zZ2RlZiAqbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpIHsKLSAgcmV0dXJuIHVwYl9tc2dk
ZWZfbnRvZihtLCBuYW1lLCBzdHJsZW4obmFtZSkpOwotfQotCi1VUEJfSU5MSU5FIHVwYl9maWVs
ZGRlZiAqdXBiX21zZ2RlZl9pdG9mX211dGFibGUodXBiX21zZ2RlZiAqbSwgdWludDMyX3QgaSkg
ewotICByZXR1cm4gKHVwYl9maWVsZGRlZiopdXBiX21zZ2RlZl9pdG9mKG0sIGkpOwotfQotCi1V
UEJfSU5MSU5FIHVwYl9maWVsZGRlZiAqdXBiX21zZ2RlZl9udG9mX211dGFibGUodXBiX21zZ2Rl
ZiAqbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuKSB7Ci0gIHJldHVybiAodXBiX2ZpZWxkZGVmICop
dXBiX21zZ2RlZl9udG9mKG0sIG5hbWUsIGxlbik7Ci19Ci0KLS8qIE9uZW9mIGxvb2t1cDoKLSAq
ICAgLSBudG9vID0gbmFtZSB0byBvbmVvZgotICogICAtIG50b296ID0gbmFtZSB0byBvbmVvZiwg
bnVsbC10ZXJtaW5hdGVkIHN0cmluZy4gKi8KLWNvbnN0IHVwYl9vbmVvZmRlZiAqdXBiX21zZ2Rl
Zl9udG9vKGNvbnN0IHVwYl9tc2dkZWYgKm0sIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKLWludCB1cGJfbXNnZGVmX251
bW9uZW9mcyhjb25zdCB1cGJfbXNnZGVmICptKTsKLQotVVBCX0lOTElORSBjb25zdCB1cGJfb25l
b2ZkZWYgKnVwYl9tc2dkZWZfbnRvb3ooY29uc3QgdXBiX21zZ2RlZiAqbSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkgewot
ICByZXR1cm4gdXBiX21zZ2RlZl9udG9vKG0sIG5hbWUsIHN0cmxlbihuYW1lKSk7Ci19Ci0KLVVQ
Ql9JTkxJTkUgdXBiX29uZW9mZGVmICp1cGJfbXNnZGVmX250b29fbXV0YWJsZSh1cGJfbXNnZGVm
ICptLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pIHsKLSAgcmV0dXJuICh1cGJfb25lb2ZkZWYgKil1
cGJfbXNnZGVmX250b28obSwgbmFtZSwgbGVuKTsKLX0KLQotLyogTG9va3VwIG9mIGVpdGhlciBm
aWVsZCBvciBvbmVvZiBieSBuYW1lLiAgUmV0dXJucyB3aGV0aGVyIGVpdGhlciB3YXMgZm91bmQu
Ci0gKiBJZiB0aGUgcmV0dXJuIGlzIHRydWUsIHRoZW4gdGhlIGZvdW5kIGRlZiB3aWxsIGJlIHNl
dCwgYW5kIHRoZSBub24tZm91bmQKLSAqIG9uZSBzZXQgdG8gTlVMTC4gKi8KLWJvb2wgdXBiX21z
Z2RlZl9sb29rdXBuYW1lKGNvbnN0IHVwYl9tc2dkZWYgKm0sIGNvbnN0IGNoYXIgKm5hbWUsIHNp
emVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfZmllbGRkZWYg
KipmLCBjb25zdCB1cGJfb25lb2ZkZWYgKipvKTsKLQotVVBCX0lOTElORSBib29sIHVwYl9tc2dk
ZWZfbG9va3VwbmFtZXooY29uc3QgdXBiX21zZ2RlZiAqbSwgY29uc3QgY2hhciAqbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVsZGRlZiAq
KmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJfb25l
b2ZkZWYgKipvKSB7Ci0gIHJldHVybiB1cGJfbXNnZGVmX2xvb2t1cG5hbWUobSwgbmFtZSwgc3Ry
bGVuKG5hbWUpLCBmLCBvKTsKLX0KLQotLyogSXRlcmF0aW9uIG92ZXIgZmllbGRzIGFuZCBvbmVv
ZnMuICBGb3IgZXhhbXBsZToKLSAqCi0gKiB1cGJfbXNnX2ZpZWxkX2l0ZXIgaTsKLSAqIGZvcih1
cGJfbXNnX2ZpZWxkX2JlZ2luKCZpLCBtKTsKLSAqICAgICAhdXBiX21zZ19maWVsZF9kb25lKCZp
KTsKLSAqICAgICB1cGJfbXNnX2ZpZWxkX25leHQoJmkpKSB7Ci0gKiAgIHVwYl9maWVsZGRlZiAq
ZiA9IHVwYl9tc2dfaXRlcl9maWVsZCgmaSk7Ci0gKiAgIC8vIC4uLgotICogfQotICoKLSAqIEZv
ciBDIHdlIGRvbid0IGhhdmUgc2VwYXJhdGUgaXRlcmF0b3JzIGZvciBjb25zdCBhbmQgbm9uLWNv
bnN0LgotICogSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNhc3QgdGhlIHVw
Yl9maWVsZGRlZiogdG8KLSAqIGNvbnN0IGlmIHRoZSB1cGJfbXNnZGVmKiBpcyBjb25zdC4gKi8K
LXZvaWQgdXBiX21zZ19maWVsZF9iZWdpbih1cGJfbXNnX2ZpZWxkX2l0ZXIgKml0ZXIsIGNvbnN0
IHVwYl9tc2dkZWYgKm0pOwotdm9pZCB1cGJfbXNnX2ZpZWxkX25leHQodXBiX21zZ19maWVsZF9p
dGVyICppdGVyKTsKLWJvb2wgdXBiX21zZ19maWVsZF9kb25lKGNvbnN0IHVwYl9tc2dfZmllbGRf
aXRlciAqaXRlcik7Ci11cGJfZmllbGRkZWYgKnVwYl9tc2dfaXRlcl9maWVsZChjb25zdCB1cGJf
bXNnX2ZpZWxkX2l0ZXIgKml0ZXIpOwotdm9pZCB1cGJfbXNnX2ZpZWxkX2l0ZXJfc2V0ZG9uZSh1
cGJfbXNnX2ZpZWxkX2l0ZXIgKml0ZXIpOwotCi0vKiBTaW1pbGFyIHRvIGFib3ZlLCB3ZSBhbHNv
IHN1cHBvcnQgaXRlcmF0aW5nIHRocm91Z2ggdGhlIG9uZW9mcyBpbiBhCi0gKiBtc2dkZWYuICov
Ci12b2lkIHVwYl9tc2dfb25lb2ZfYmVnaW4odXBiX21zZ19vbmVvZl9pdGVyICppdGVyLCBjb25z
dCB1cGJfbXNnZGVmICptKTsKLXZvaWQgdXBiX21zZ19vbmVvZl9uZXh0KHVwYl9tc2dfb25lb2Zf
aXRlciAqaXRlcik7Ci1ib29sIHVwYl9tc2dfb25lb2ZfZG9uZShjb25zdCB1cGJfbXNnX29uZW9m
X2l0ZXIgKml0ZXIpOwotdXBiX29uZW9mZGVmICp1cGJfbXNnX2l0ZXJfb25lb2YoY29uc3QgdXBi
X21zZ19vbmVvZl9pdGVyICppdGVyKTsKLXZvaWQgdXBiX21zZ19vbmVvZl9pdGVyX3NldGRvbmUo
dXBiX21zZ19vbmVvZl9pdGVyICppdGVyKTsKLQotVVBCX0VORF9FWFRFUk5fQwotCi0KLS8qIHVw
Yjo6RW51bURlZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgdXBiX3N0cnRhYmxlX2l0ZXIgdXBiX2VudW1f
aXRlcjsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIENsYXNzIHRoYXQgcmVwcmVzZW50cyBh
biBlbnVtLiAgSXRzIGJhc2UgY2xhc3MgaXMgdXBiOjpEZWYgKGNvbnZlcnQgd2l0aAotICogdXBi
Ojp1cGNhc3QoKSkuICovCi1jbGFzcyB1cGI6OkVudW1EZWYgewotIHB1YmxpYzoKLSAgLyogUmV0
dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gKi8KLSAgc3RhdGljIHJlZmZl
ZF9wdHI8RW51bURlZj4gTmV3KCk7Ci0KLSAgLyogdXBiOjpSZWZDb3VudGVkIG1ldGhvZHMgbGlr
ZSBSZWYoKS9VbnJlZigpLiAqLwotICBVUEJfUkVGQ09VTlRFRF9DUFBNRVRIT0RTCi0KLSAgLyog
RnVuY3Rpb25hbGl0eSBmcm9tIHVwYjo6RGVmLiAqLwotICBjb25zdCBjaGFyKiBmdWxsX25hbWUo
KSBjb25zdDsKLSAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0OwotICBib29sIHNldF9mdWxsX25h
bWUoY29uc3QgY2hhciogZnVsbG5hbWUsIFN0YXR1cyogcyk7Ci0gIGJvb2wgc2V0X2Z1bGxfbmFt
ZShjb25zdCBzdGQ6OnN0cmluZyYgZnVsbG5hbWUsIFN0YXR1cyogcyk7Ci0KLSAgLyogQ2FsbCB0
byBmcmVlemUgdGhpcyBFbnVtRGVmLiAqLwotICBib29sIEZyZWV6ZShTdGF0dXMqIHMpOwotCi0g
IC8qIFRoZSB2YWx1ZSB0aGF0IGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgd2hlbiBubyBmaWVsZCBk
ZWZhdWx0IGlzIHNwZWNpZmllZC4KLSAgICogSWYgbm90IHNldCBleHBsaWNpdGx5LCB0aGUgZmly
c3QgdmFsdWUgdGhhdCB3YXMgYWRkZWQgd2lsbCBiZSB1c2VkLgotICAgKiBUaGUgZGVmYXVsdCB2
YWx1ZSBtdXN0IGJlIGEgbWVtYmVyIG9mIHRoZSBlbnVtLgotICAgKiBSZXF1aXJlcyB0aGF0IHZh
bHVlX2NvdW50KCkgPiAwLiAqLwotICBpbnQzMl90IGRlZmF1bHRfdmFsdWUoKSBjb25zdDsKLQot
ICAvKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBub3QgdmFsaWQs
IHJldHVybnMgZmFsc2UgYW5kIGFuCi0gICAqIGVycm9yIG1lc3NhZ2UgaW4gc3RhdHVzLiAqLwot
ICBib29sIHNldF9kZWZhdWx0X3ZhbHVlKGludDMyX3QgdmFsLCBTdGF0dXMqIHN0YXR1cyk7Ci0K
LSAgLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjdXJyZW50bHkgZGVmaW5lZCBpbiB0
aGUgZW51bS4gIE5vdGUgdGhhdAotICAgKiBtdWx0aXBsZSBuYW1lcyBjYW4gcmVmZXIgdG8gdGhl
IHNhbWUgbnVtYmVyLCBzbyB0aGlzIG1heSBiZSBncmVhdGVyIHRoYW4KLSAgICogdGhlIHRvdGFs
IG51bWJlciBvZiB1bmlxdWUgbnVtYmVycy4gKi8KLSAgaW50IHZhbHVlX2NvdW50KCkgY29uc3Q7
Ci0KLSAgLyogQWRkcyBhIHNpbmdsZSBuYW1lL251bWJlciBwYWlyIHRvIHRoZSBlbnVtLiAgRmFp
bHMgaWYgdGhpcyBuYW1lIGhhcwotICAgKiBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIHZh
bHVlLiAqLwotICBib29sIEFkZFZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIGludDMyX3QgbnVtLCBT
dGF0dXMqIHN0YXR1cyk7Ci0gIGJvb2wgQWRkVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUs
IGludDMyX3QgbnVtLCBTdGF0dXMqIHN0YXR1cyk7Ci0KLSAgLyogTG9va3VwcyBmcm9tIG5hbWUg
dG8gaW50ZWdlciwgcmV0dXJuaW5nIHRydWUgaWYgZm91bmQuICovCi0gIGJvb2wgRmluZFZhbHVl
QnlOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIGludDMyX3QqIG51bSkgY29uc3Q7Ci0KLSAgLyogRmlu
ZHMgdGhlIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbnVtYmVyLCBvciBOVUxMIGlm
IG5vbmUgd2FzCi0gICAqIGZvdW5kLiAgSWYgbW9yZSB0aGFuIG9uZSBuYW1lIGNvcnJlc3BvbmRz
IHRvIHRoaXMgbnVtYmVyLCByZXR1cm5zIHRoZQotICAgKiBmaXJzdCBvbmUgdGhhdCB3YXMgYWRk
ZWQuICovCi0gIGNvbnN0IGNoYXIqIEZpbmRWYWx1ZUJ5TnVtYmVyKGludDMyX3QgbnVtKSBjb25z
dDsKLQotICAvKiBSZXR1cm5zIGEgbmV3IEVudW1EZWYgd2l0aCBhbGwgdGhlIHNhbWUgdmFsdWVz
LiAgVGhlIG5ldyBFbnVtRGVmIHdpbGwgYmUKLSAgICogb3duZWQgYnkgdGhlIGdpdmVuIG93bmVy
LiAqLwotICBFbnVtRGVmKiBEdXAoY29uc3Qgdm9pZCogb3duZXIpIGNvbnN0OwotCi0gIC8qIEl0
ZXJhdGlvbiBvdmVyIG5hbWUvdmFsdWUgcGFpcnMuICBUaGUgb3JkZXIgaXMgdW5kZWZpbmVkLgot
ICAgKiBBZGRpbmcgYW4gZW51bSB2YWwgaW52YWxpZGF0ZXMgYW55IGl0ZXJhdG9ycy4KLSAgICoK
LSAgICogVE9ETzogbWFrZSBjb21wYXRpYmxlIHdpdGggcmFuZ2UtZm9yLCB3aXRoIGVsZW1lbnRz
IGFzIHBhaXJzPyAqLwotICBjbGFzcyBJdGVyYXRvciB7Ci0gICBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgSXRlcmF0b3IoY29uc3QgRW51bURlZiopOwotCi0gICAgaW50MzJfdCBudW1iZXIoKTsKLSAg
ICBjb25zdCBjaGFyICpuYW1lKCk7Ci0gICAgYm9vbCBEb25lKCk7Ci0gICAgdm9pZCBOZXh0KCk7
Ci0KLSAgIHByaXZhdGU6Ci0gICAgdXBiX2VudW1faXRlciBpdGVyXzsKLSAgfTsKLQotIHByaXZh
dGU6Ci0gIFVQQl9ESVNBTExPV19QT0RfT1BTKEVudW1EZWYsIHVwYjo6RW51bURlZikKLX07Ci0K
LSNlbmRpZiAgLyogX19jcGx1c3BsdXMgKi8KLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLS8qIE5h
dGl2ZSBDIEFQSS4gKi8KLXVwYl9lbnVtZGVmICp1cGJfZW51bWRlZl9uZXcoY29uc3Qgdm9pZCAq
b3duZXIpOwotdXBiX2VudW1kZWYgKnVwYl9lbnVtZGVmX2R1cChjb25zdCB1cGJfZW51bWRlZiAq
ZSwgY29uc3Qgdm9pZCAqb3duZXIpOwotCi0vKiBJbmNsdWRlIHVwYl9yZWZjb3VudGVkIG1ldGhv
ZHMgbGlrZSB1cGJfZW51bWRlZl9yZWYoKS4gKi8KLVVQQl9SRUZDT1VOVEVEX0NNRVRIT0RTKHVw
Yl9lbnVtZGVmLCB1cGJfZW51bWRlZl91cGNhc3QyKQotCi1ib29sIHVwYl9lbnVtZGVmX2ZyZWV6
ZSh1cGJfZW51bWRlZiAqZSwgdXBiX3N0YXR1cyAqc3RhdHVzKTsKLQotLyogRnJvbSB1cGJfZGVm
LiAqLwotY29uc3QgY2hhciAqdXBiX2VudW1kZWZfZnVsbG5hbWUoY29uc3QgdXBiX2VudW1kZWYg
KmUpOwotY29uc3QgY2hhciAqdXBiX2VudW1kZWZfbmFtZShjb25zdCB1cGJfZW51bWRlZiAqZSk7
Ci1ib29sIHVwYl9lbnVtZGVmX3NldGZ1bGxuYW1lKHVwYl9lbnVtZGVmICplLCBjb25zdCBjaGFy
ICpmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0YXR1cyAqcyk7
Ci0KLWludDMyX3QgdXBiX2VudW1kZWZfZGVmYXVsdChjb25zdCB1cGJfZW51bWRlZiAqZSk7Ci1i
b29sIHVwYl9lbnVtZGVmX3NldGRlZmF1bHQodXBiX2VudW1kZWYgKmUsIGludDMyX3QgdmFsLCB1
cGJfc3RhdHVzICpzKTsKLWludCB1cGJfZW51bWRlZl9udW12YWxzKGNvbnN0IHVwYl9lbnVtZGVm
ICplKTsKLWJvb2wgdXBiX2VudW1kZWZfYWRkdmFsKHVwYl9lbnVtZGVmICplLCBjb25zdCBjaGFy
ICpuYW1lLCBpbnQzMl90IG51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMg
KnN0YXR1cyk7Ci0KLS8qIEVudW0gbG9va3VwczoKLSAqIC0gbnRvaTogIGxvb2sgdXAgYSBuYW1l
IHdpdGggc3BlY2lmaWVkIGxlbmd0aC4KLSAqIC0gbnRvaXo6IGxvb2sgdXAgYSBuYW1lIHByb3Zp
ZGVkIGFzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KLSAqIC0gaXRvbjogIGxvb2sgdXAgYW4g
aW50ZWdlciwgcmV0dXJuaW5nIHRoZSBuYW1lIGFzIGEgbnVsbC10ZXJtaW5hdGVkCi0gKiAgICAg
ICAgICBzdHJpbmcuICovCi1ib29sIHVwYl9lbnVtZGVmX250b2koY29uc3QgdXBiX2VudW1kZWYg
KmUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCAqbnVtKTsKLVVQQl9JTkxJTkUgYm9vbCB1cGJfZW51bWRlZl9udG9peihjb25zdCB1
cGJfZW51bWRlZiAqZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpuYW1lLCBpbnQzMl90ICpudW0pIHsKLSAgcmV0dXJuIHVwYl9lbnVtZGVmX250b2koZSwg
bmFtZSwgc3RybGVuKG5hbWUpLCBudW0pOwotfQotY29uc3QgY2hhciAqdXBiX2VudW1kZWZfaXRv
bihjb25zdCB1cGJfZW51bWRlZiAqZSwgaW50MzJfdCBudW0pOwotCi0vKiAgdXBiX2VudW1faXRl
ciBpOwotICogIGZvcih1cGJfZW51bV9iZWdpbigmaSwgZSk7ICF1cGJfZW51bV9kb25lKCZpKTsg
dXBiX2VudW1fbmV4dCgmaSkpIHsKLSAqICAgIC8vIC4uLgotICogIH0KLSAqLwotdm9pZCB1cGJf
ZW51bV9iZWdpbih1cGJfZW51bV9pdGVyICppdGVyLCBjb25zdCB1cGJfZW51bWRlZiAqZSk7Ci12
b2lkIHVwYl9lbnVtX25leHQodXBiX2VudW1faXRlciAqaXRlcik7Ci1ib29sIHVwYl9lbnVtX2Rv
bmUodXBiX2VudW1faXRlciAqaXRlcik7Ci1jb25zdCBjaGFyICp1cGJfZW51bV9pdGVyX25hbWUo
dXBiX2VudW1faXRlciAqaXRlcik7Ci1pbnQzMl90IHVwYl9lbnVtX2l0ZXJfbnVtYmVyKHVwYl9l
bnVtX2l0ZXIgKml0ZXIpOwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLS8qIHVwYjo6T25lb2ZEZWYg
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLXR5cGVkZWYgdXBiX2ludHRhYmxlX2l0ZXIgdXBiX29uZW9mX2l0ZXI7Ci0KLSNp
ZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBDbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBvbmVvZi4gKi8K
LWNsYXNzIHVwYjo6T25lb2ZEZWYgewotIHB1YmxpYzoKLSAgLyogUmV0dXJucyBOVUxMIGlmIG1l
bW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gKi8KLSAgc3RhdGljIHJlZmZlZF9wdHI8T25lb2ZEZWY+
IE5ldygpOwotCi0gIC8qIHVwYjo6UmVmQ291bnRlZCBtZXRob2RzIGxpa2UgUmVmKCkvVW5yZWYo
KS4gKi8KLSAgVVBCX1JFRkNPVU5URURfQ1BQTUVUSE9EUwotCi0gIC8qIFJldHVybnMgdGhlIE1l
c3NhZ2VEZWYgdGhhdCBvd25zIHRoaXMgT25lb2ZEZWYuICovCi0gIGNvbnN0IE1lc3NhZ2VEZWYq
IGNvbnRhaW5pbmdfdHlwZSgpIGNvbnN0OwotCi0gIC8qIFJldHVybnMgdGhlIG5hbWUgb2YgdGhp
cyBvbmVvZi4gVGhpcyBpcyB0aGUgbmFtZSB1c2VkIHRvIGxvb2sgdXAgdGhlIG9uZW9mCi0gICAq
IGJ5IG5hbWUgb25jZSBhZGRlZCB0byBhIG1lc3NhZ2UgZGVmLiAqLwotICBjb25zdCBjaGFyKiBu
YW1lKCkgY29uc3Q7Ci0gIGJvb2wgc2V0X25hbWUoY29uc3QgY2hhciogbmFtZSwgU3RhdHVzKiBz
KTsKLSAgYm9vbCBzZXRfbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgU3RhdHVzKiBzKTsK
LQotICAvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmllbGRzIGN1cnJlbnRseSBkZWZpbmVkIGlu
IHRoZSBvbmVvZi4gKi8KLSAgaW50IGZpZWxkX2NvdW50KCkgY29uc3Q7Ci0KLSAgLyogQWRkcyBh
IGZpZWxkIHRvIHRoZSBvbmVvZi4gVGhlIGZpZWxkIG11c3Qgbm90IGhhdmUgYmVlbiBhZGRlZCB0
byBhbnkgb3RoZXIKLSAgICogb25lb2Ygb3IgbXNnZGVmLiBJZiB0aGUgb25lb2YgaXMgbm90IHll
dCBwYXJ0IG9mIGEgbXNnZGVmLCB0aGVuIHdoZW4gdGhlCi0gICAqIG9uZW9mIGlzIGV2ZW50dWFs
bHkgYWRkZWQgdG8gYSBtc2dkZWYsIGFsbCBmaWVsZHMgYWRkZWQgdG8gdGhlIG9uZW9mIHdpbGwK
LSAgICogYWxzbyBiZSBhZGRlZCB0byB0aGUgbXNnZGVmIGF0IHRoYXQgdGltZS4gSWYgdGhlIG9u
ZW9mIGlzIGFscmVhZHkgcGFydCBvZiBhCi0gICAqIG1zZ2RlZiwgdGhlIGZpZWxkIG11c3QgZWl0
aGVyIGJlIGEgcGFydCBvZiB0aGF0IG1zZ2RlZiBhbHJlYWR5LCBvciBtdXN0IG5vdAotICAgKiBi
ZSBhIHBhcnQgb2YgYW55IG1zZ2RlZjsgaW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgZmllbGQgaXMg
YWRkZWQgdG8gdGhlCi0gICAqIG1zZ2RlZiBhcyBhIHBhcnQgb2YgdGhpcyBvcGVyYXRpb24uCi0g
ICAqCi0gICAqIFRoZSBmaWVsZCBtYXkgb25seSBoYXZlIGFuIE9QVElPTkFMIGxhYmVsLCBuZXZl
ciBSRVFVSVJFRCBvciBSRVBFQVRFRC4KLSAgICoKLSAgICogSWYgfGZ8IGlzIGFscmVhZHkgcGFy
dCBvZiB0aGlzIE1lc3NhZ2VEZWYsIHRoaXMgbWV0aG9kIHBlcmZvcm1zIG5vIGFjdGlvbgotICAg
KiBhbmQgcmV0dXJucyB0cnVlIChzdWNjZXNzKS4gVGh1cywgdGhpcyBtZXRob2QgaXMgaWRlbXBv
dGVudC4gKi8KLSAgYm9vbCBBZGRGaWVsZChGaWVsZERlZiogZmllbGQsIFN0YXR1cyogcyk7Ci0g
IGJvb2wgQWRkRmllbGQoY29uc3QgcmVmZmVkX3B0cjxGaWVsZERlZj4mIGZpZWxkLCBTdGF0dXMq
IHMpOwotCi0gIC8qIExvb2tzIHVwIGJ5IG5hbWUuICovCi0gIGNvbnN0IEZpZWxkRGVmKiBGaW5k
RmllbGRCeU5hbWUoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbikgY29uc3Q7Ci0gIEZpZWxk
RGVmKiBGaW5kRmllbGRCeU5hbWUoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbik7Ci0gIGNv
bnN0IEZpZWxkRGVmKiBGaW5kRmllbGRCeU5hbWUoY29uc3QgY2hhciogbmFtZSkgY29uc3Qgewot
ICAgIHJldHVybiBGaW5kRmllbGRCeU5hbWUobmFtZSwgc3RybGVuKG5hbWUpKTsKLSAgfQotICBG
aWVsZERlZiogRmluZEZpZWxkQnlOYW1lKGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgICByZXR1cm4g
RmluZEZpZWxkQnlOYW1lKG5hbWUsIHN0cmxlbihuYW1lKSk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4KLSAgRmllbGREZWYqIEZpbmRGaWVsZEJ5TmFtZShjb25zdCBUJiBzdHIpIHsKLSAg
ICByZXR1cm4gRmluZEZpZWxkQnlOYW1lKHN0ci5jX3N0cigpLCBzdHIuc2l6ZSgpKTsKLSAgfQot
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgY29uc3QgRmllbGREZWYqIEZpbmRGaWVsZEJ5TmFtZShj
b25zdCBUJiBzdHIpIGNvbnN0IHsKLSAgICByZXR1cm4gRmluZEZpZWxkQnlOYW1lKHN0ci5jX3N0
cigpLCBzdHIuc2l6ZSgpKTsKLSAgfQotCi0gIC8qIExvb2tzIHVwIGJ5IHRhZyBudW1iZXIuICov
Ci0gIGNvbnN0IEZpZWxkRGVmKiBGaW5kRmllbGRCeU51bWJlcih1aW50MzJfdCBudW0pIGNvbnN0
OwotCi0gIC8qIFJldHVybnMgYSBuZXcgT25lb2ZEZWYgd2l0aCBhbGwgdGhlIHNhbWUgZmllbGRz
LiBUaGUgT25lb2ZEZWYgd2lsbCBiZSBvd25lZAotICAgKiBieSB0aGUgZ2l2ZW4gb3duZXIuICov
Ci0gIE9uZW9mRGVmKiBEdXAoY29uc3Qgdm9pZCogb3duZXIpIGNvbnN0OwotCi0gIC8qIEl0ZXJh
dGlvbiBvdmVyIGZpZWxkcy4gIFRoZSBvcmRlciBpcyB1bmRlZmluZWQuICovCi0gIGNsYXNzIGl0
ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywg
RmllbGREZWYqPiB7Ci0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgaXRlcmF0b3IoT25lb2ZEZWYq
IG1kKTsKLSAgICBzdGF0aWMgaXRlcmF0b3IgZW5kKE9uZW9mRGVmKiBtZCk7Ci0KLSAgICB2b2lk
IG9wZXJhdG9yKysoKTsKLSAgICBGaWVsZERlZiogb3BlcmF0b3IqKCkgY29uc3Q7Ci0gICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3Q7Ci0KLSAgIHByaXZhdGU6Ci0gICAg
dXBiX29uZW9mX2l0ZXIgaXRlcl87Ci0gIH07Ci0KLSAgY2xhc3MgY29uc3RfaXRlcmF0b3IKLSAg
ICAgIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgY29u
c3QgRmllbGREZWYqPiB7Ci0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgY29uc3RfaXRlcmF0b3Io
Y29uc3QgT25lb2ZEZWYqIG1kKTsKLSAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgZW5kKGNvbnN0
IE9uZW9mRGVmKiBtZCk7Ci0KLSAgICB2b2lkIG9wZXJhdG9yKysoKTsKLSAgICBjb25zdCBGaWVs
ZERlZiogb3BlcmF0b3IqKCkgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3Q7Ci0KLSAgIHByaXZhdGU6Ci0gICAgdXBiX29uZW9mX2l0
ZXIgaXRlcl87Ci0gIH07Ci0KLSAgaXRlcmF0b3IgYmVnaW4oKTsKLSAgaXRlcmF0b3IgZW5kKCk7
Ci0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7Ci0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgVVBCX0RJU0FMTE9XX1BPRF9PUFMoT25lb2ZEZWYsIHVw
Yjo6T25lb2ZEZWYpCi19OwotCi0jZW5kaWYgIC8qIF9fY3BsdXNwbHVzICovCi0KLVVQQl9CRUdJ
Tl9FWFRFUk5fQwotCi0vKiBOYXRpdmUgQyBBUEkuICovCi11cGJfb25lb2ZkZWYgKnVwYl9vbmVv
ZmRlZl9uZXcoY29uc3Qgdm9pZCAqb3duZXIpOwotdXBiX29uZW9mZGVmICp1cGJfb25lb2ZkZWZf
ZHVwKGNvbnN0IHVwYl9vbmVvZmRlZiAqbywgY29uc3Qgdm9pZCAqb3duZXIpOwotCi0vKiBJbmNs
dWRlIHVwYl9yZWZjb3VudGVkIG1ldGhvZHMgbGlrZSB1cGJfb25lb2ZkZWZfcmVmKCkuICovCi1V
UEJfUkVGQ09VTlRFRF9DTUVUSE9EUyh1cGJfb25lb2ZkZWYsIHVwYl9vbmVvZmRlZl91cGNhc3Qp
Ci0KLWNvbnN0IGNoYXIgKnVwYl9vbmVvZmRlZl9uYW1lKGNvbnN0IHVwYl9vbmVvZmRlZiAqbyk7
Ci1ib29sIHVwYl9vbmVvZmRlZl9zZXRuYW1lKHVwYl9vbmVvZmRlZiAqbywgY29uc3QgY2hhciAq
bmFtZSwgdXBiX3N0YXR1cyAqcyk7Ci0KLWNvbnN0IHVwYl9tc2dkZWYgKnVwYl9vbmVvZmRlZl9j
b250YWluaW5ndHlwZShjb25zdCB1cGJfb25lb2ZkZWYgKm8pOwotaW50IHVwYl9vbmVvZmRlZl9u
dW1maWVsZHMoY29uc3QgdXBiX29uZW9mZGVmICpvKTsKLWJvb2wgdXBiX29uZW9mZGVmX2FkZGZp
ZWxkKHVwYl9vbmVvZmRlZiAqbywgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqcmVmX2Rvbm9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXBiX3N0YXR1cyAqcyk7Ci0KLS8qIE9uZW9mIGxvb2t1cHM6Ci0gKiAtIG50b2Y6ICBsb29r
IHVwIGEgZmllbGQgYnkgbmFtZS4KLSAqIC0gbnRvZno6IGxvb2sgdXAgYSBmaWVsZCBieSBuYW1l
IChhcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcpLgotICogLSBpdG9mOiAgbG9vayB1cCBhIGZp
ZWxkIGJ5IG51bWJlci4gKi8KLWNvbnN0IHVwYl9maWVsZGRlZiAqdXBiX29uZW9mZGVmX250b2Yo
Y29uc3QgdXBiX29uZW9mZGVmICpvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuZ3RoKTsKLVVQQl9JTkxJTkUgY29uc3Qg
dXBiX2ZpZWxkZGVmICp1cGJfb25lb2ZkZWZfbnRvZnooY29uc3QgdXBiX29uZW9mZGVmICpvLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpuYW1lKSB7Ci0gIHJldHVybiB1cGJfb25lb2ZkZWZfbnRvZihvLCBuYW1lLCBzdHJsZW4o
bmFtZSkpOwotfQotY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJfb25lb2ZkZWZfaXRvZihjb25zdCB1
cGJfb25lb2ZkZWYgKm8sIHVpbnQzMl90IG51bSk7Ci0KLS8qICB1cGJfb25lb2ZfaXRlciBpOwot
ICogIGZvcih1cGJfb25lb2ZfYmVnaW4oJmksIGUpOyAhdXBiX29uZW9mX2RvbmUoJmkpOyB1cGJf
b25lb2ZfbmV4dCgmaSkpIHsKLSAqICAgIC8vIC4uLgotICogIH0KLSAqLwotdm9pZCB1cGJfb25l
b2ZfYmVnaW4odXBiX29uZW9mX2l0ZXIgKml0ZXIsIGNvbnN0IHVwYl9vbmVvZmRlZiAqbyk7Ci12
b2lkIHVwYl9vbmVvZl9uZXh0KHVwYl9vbmVvZl9pdGVyICppdGVyKTsKLWJvb2wgdXBiX29uZW9m
X2RvbmUodXBiX29uZW9mX2l0ZXIgKml0ZXIpOwotdXBiX2ZpZWxkZGVmICp1cGJfb25lb2ZfaXRl
cl9maWVsZChjb25zdCB1cGJfb25lb2ZfaXRlciAqaXRlcik7Ci12b2lkIHVwYl9vbmVvZl9pdGVy
X3NldGRvbmUodXBiX29uZW9mX2l0ZXIgKml0ZXIpOwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLQot
LyogdXBiOjpGaWxlRGVmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIENsYXNz
IHRoYXQgcmVwcmVzZW50cyBhIC5wcm90byBmaWxlIHdpdGggc29tZSB0aGluZ3MgZGVmaW5lZCBp
biBpdC4KLSAqCi0gKiBNYW55IHVzZXJzIHdvbid0IGNhcmUgYWJvdXQgRmlsZURlZnMsIGJ1dCB0
aGV5IGFyZSBuZWNlc3NhcnkgaWYgeW91IHdhbnQgdG8KLSAqIHJlYWQgdGhlIHZhbHVlcyBvZiBm
aWxlLWxldmVsIG9wdGlvbnMuICovCi1jbGFzcyB1cGI6OkZpbGVEZWYgewotIHB1YmxpYzoKLSAg
LyogUmV0dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gKi8KLSAgc3RhdGlj
IHJlZmZlZF9wdHI8RmlsZURlZj4gTmV3KCk7Ci0KLSAgLyogdXBiOjpSZWZDb3VudGVkIG1ldGhv
ZHMgbGlrZSBSZWYoKS9VbnJlZigpLiAqLwotICBVUEJfUkVGQ09VTlRFRF9DUFBNRVRIT0RTCi0K
LSAgLyogR2V0L3NldCBuYW1lIG9mIHRoZSBmaWxlIChlZy4gImZvby9iYXIucHJvdG8iKS4gKi8K
LSAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0OwotICBib29sIHNldF9uYW1lKGNvbnN0IGNoYXIq
IG5hbWUsIFN0YXR1cyogcyk7Ci0gIGJvb2wgc2V0X25hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5h
bWUsIFN0YXR1cyogcyk7Ci0KLSAgLyogUGFja2FnZSBuYW1lIGZvciBkZWZpbml0aW9ucyBpbnNp
ZGUgdGhlIGZpbGUgKGVnLiAiZm9vLmJhciIpLiAqLwotICBjb25zdCBjaGFyKiBwYWNrYWdlKCkg
Y29uc3Q7Ci0gIGJvb2wgc2V0X3BhY2thZ2UoY29uc3QgY2hhciogcGFja2FnZSwgU3RhdHVzKiBz
KTsKLQotICAvKiBTeW50YXggZm9yIHRoZSBmaWxlLiAgRGVmYXVsdHMgdG8gcHJvdG8yLiAqLwot
ICB1cGJfc3ludGF4X3Qgc3ludGF4KCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3N5bnRheCh1cGJfc3lu
dGF4X3Qgc3ludGF4KTsKLQotICAvKiBHZXQgdGhlIGxpc3Qgb2YgZGVmcyBmcm9tIHRoZSBmaWxl
LiAgVGhlc2UgYXJlIHJldHVybmVkIGluIHRoZSBvcmRlciB0aGF0Ci0gICAqIHRoZXkgd2VyZSBh
ZGRlZCB0byB0aGUgRmlsZURlZi4gKi8KLSAgaW50IGRlZl9jb3VudCgpIGNvbnN0OwotICBjb25z
dCBEZWYqIGRlZihpbnQgaW5kZXgpIGNvbnN0OwotICBEZWYqIGRlZihpbnQgaW5kZXgpOwotCi0g
IC8qIEdldCB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgZmlsZS4gIFRoZXNlIGFy
ZSByZXR1cm5lZCBpbiB0aGUKLSAgICogb3JkZXIgdGhhdCB0aGV5IHdlcmUgYWRkZWQgdG8gdGhl
IEZpbGVEZWYuICovCi0gIGludCBkZXBlbmRlbmN5X2NvdW50KCkgY29uc3Q7Ci0gIGNvbnN0IEZp
bGVEZWYqIGRlcGVuZGVuY3koaW50IGluZGV4KSBjb25zdDsKLQotICAvKiBBZGRzIGRlZnMgdG8g
dGhpcyBmaWxlLiAgVGhlIGRlZiBtdXN0IG5vdCBhbHJlYWR5IGJlbG9uZyB0byBhbm90aGVyCi0g
ICAqIGZpbGUuCi0gICAqCi0gICAqIE5vdGU6IHRoaXMgZG9lcyAqbm90KiBlbnN1cmUgdGhhdCB0
aGlzIGRlZidzIG5hbWUgaXMgdW5pcXVlIGluIHRoaXMgZmlsZSEKLSAgICogVXNlIGEgU3ltYm9s
VGFibGUgaWYgeW91IHdhbnQgdG8gY2hlY2sgdGhpcyBwcm9wZXJ0eS4gIEVzcGVjaWFsbHkgc2lu
Y2UKLSAgICogcHJvcGVybHkgY2hlY2tpbmcgdW5pcXVlbmVzcyB3b3VsZCByZXF1aXJlIGEgY2hl
Y2sgYWNyb3NzICphbGwqIGZpbGVzCi0gICAqIChpbmNsdWRpbmcgZGVwZW5kZW5jaWVzKS4gKi8K
LSAgYm9vbCBBZGREZWYoRGVmKiBkZWYsIFN0YXR1cyogcyk7Ci0gIGJvb2wgQWRkTWVzc2FnZShN
ZXNzYWdlRGVmKiBtLCBTdGF0dXMqIHMpOwotICBib29sIEFkZEVudW0oRW51bURlZiogZSwgU3Rh
dHVzKiBzKTsKLSAgYm9vbCBBZGRFeHRlbnNpb24oRmllbGREZWYqIGYsIFN0YXR1cyogcyk7Ci0K
LSAgLyogQWRkcyBhIGRlcGVuZGVuY3kgb2YgdGhpcyBmaWxlLiAqLwotICBib29sIEFkZERlcGVu
ZGVuY3koY29uc3QgRmlsZURlZiogZmlsZSk7Ci0KLSAgLyogRnJlZXplcyB0aGlzIEZpbGVEZWYg
YW5kIGFsbCBtZXNzYWdlcy9lbnVtcyB1bmRlciBpdC4gIEFsbCBzdWJkZWZzIG11c3QgYmUKLSAg
ICogcmVzb2x2ZWQgYW5kIGFsbCBtZXNzYWdlcy9lbnVtcyBtdXN0IHZhbGlkYXRlLiAgUmV0dXJu
cyB0cnVlIGlmIHRoaXMKLSAgICogc3VjY2VlZGVkLgotICAgKgotICAgKiBUT0RPKGhhYmVybWFu
KTogc2hvdWxkIHdlIGNhcmUgd2hldGhlciB0aGUgZmlsZSdzIGRlcGVuZGVuY2llcyBhcmUgZnJv
emVuCi0gICAqIGFscmVhZHk/ICovCi0gIGJvb2wgRnJlZXplKFN0YXR1cyogcyk7Ci0KLSBwcml2
YXRlOgotICBVUEJfRElTQUxMT1dfUE9EX09QUyhGaWxlRGVmLCB1cGI6OkZpbGVEZWYpCi19Owot
Ci0jZW5kaWYKLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLXVwYl9maWxlZGVmICp1cGJfZmlsZWRl
Zl9uZXcoY29uc3Qgdm9pZCAqb3duZXIpOwotCi0vKiBJbmNsdWRlIHVwYl9yZWZjb3VudGVkIG1l
dGhvZHMgbGlrZSB1cGJfbXNnZGVmX3JlZigpLiAqLwotVVBCX1JFRkNPVU5URURfQ01FVEhPRFMo
dXBiX2ZpbGVkZWYsIHVwYl9maWxlZGVmX3VwY2FzdCkKLQotY29uc3QgY2hhciAqdXBiX2ZpbGVk
ZWZfbmFtZShjb25zdCB1cGJfZmlsZWRlZiAqZik7Ci1jb25zdCBjaGFyICp1cGJfZmlsZWRlZl9w
YWNrYWdlKGNvbnN0IHVwYl9maWxlZGVmICpmKTsKLXVwYl9zeW50YXhfdCB1cGJfZmlsZWRlZl9z
eW50YXgoY29uc3QgdXBiX2ZpbGVkZWYgKmYpOwotc2l6ZV90IHVwYl9maWxlZGVmX2RlZmNvdW50
KGNvbnN0IHVwYl9maWxlZGVmICpmKTsKLXNpemVfdCB1cGJfZmlsZWRlZl9kZXBjb3VudChjb25z
dCB1cGJfZmlsZWRlZiAqZik7Ci1jb25zdCB1cGJfZGVmICp1cGJfZmlsZWRlZl9kZWYoY29uc3Qg
dXBiX2ZpbGVkZWYgKmYsIHNpemVfdCBpKTsKLWNvbnN0IHVwYl9maWxlZGVmICp1cGJfZmlsZWRl
Zl9kZXAoY29uc3QgdXBiX2ZpbGVkZWYgKmYsIHNpemVfdCBpKTsKLQotYm9vbCB1cGJfZmlsZWRl
Zl9mcmVlemUodXBiX2ZpbGVkZWYgKmYsIHVwYl9zdGF0dXMgKnMpOwotYm9vbCB1cGJfZmlsZWRl
Zl9zZXRuYW1lKHVwYl9maWxlZGVmICpmLCBjb25zdCBjaGFyICpuYW1lLCB1cGJfc3RhdHVzICpz
KTsKLWJvb2wgdXBiX2ZpbGVkZWZfc2V0cGFja2FnZSh1cGJfZmlsZWRlZiAqZiwgY29uc3QgY2hh
ciAqcGFja2FnZSwgdXBiX3N0YXR1cyAqcyk7Ci1ib29sIHVwYl9maWxlZGVmX3NldHN5bnRheCh1
cGJfZmlsZWRlZiAqZiwgdXBiX3N5bnRheF90IHN5bnRheCwgdXBiX3N0YXR1cyAqcyk7Ci0KLWJv
b2wgdXBiX2ZpbGVkZWZfYWRkZGVmKHVwYl9maWxlZGVmICpmLCB1cGJfZGVmICpkZWYsIGNvbnN0
IHZvaWQgKnJlZl9kb25vciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGF0dXMgKnMp
OwotYm9vbCB1cGJfZmlsZWRlZl9hZGRkZXAodXBiX2ZpbGVkZWYgKmYsIGNvbnN0IHVwYl9maWxl
ZGVmICpkZXApOwotCi1VUEJfSU5MSU5FIGJvb2wgdXBiX2ZpbGVkZWZfYWRkbXNnKHVwYl9maWxl
ZGVmICpmLCB1cGJfbXNnZGVmICptLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpyZWZfZG9ub3IsIHVwYl9zdGF0dXMgKnMpIHsKLSAgcmV0dXJuIHVwYl9m
aWxlZGVmX2FkZGRlZihmLCB1cGJfbXNnZGVmX3VwY2FzdF9tdXRhYmxlKG0pLCByZWZfZG9ub3Is
IHMpOwotfQotCi1VUEJfSU5MSU5FIGJvb2wgdXBiX2ZpbGVkZWZfYWRkZW51bSh1cGJfZmlsZWRl
ZiAqZiwgdXBiX2VudW1kZWYgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpyZWZfZG9ub3IsIHVwYl9zdGF0dXMgKnMpIHsKLSAgcmV0dXJuIHVwYl9m
aWxlZGVmX2FkZGRlZihmLCB1cGJfZW51bWRlZl91cGNhc3RfbXV0YWJsZShlKSwgcmVmX2Rvbm9y
LCBzKTsKLX0KLQotVVBCX0lOTElORSBib29sIHVwYl9maWxlZGVmX2FkZGV4dCh1cGJfZmlsZWRl
ZiAqZmlsZSwgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICpyZWZfZG9ub3IsIHVwYl9zdGF0dXMgKnMpIHsKLSAgcmV0dXJuIHVw
Yl9maWxlZGVmX2FkZGRlZihmaWxlLCB1cGJfZmllbGRkZWZfdXBjYXN0X211dGFibGUoZiksIHJl
Zl9kb25vciwgcyk7Ci19Ci1VUEJfSU5MSU5FIHVwYl9kZWYgKnVwYl9maWxlZGVmX211dGFibGVk
ZWYodXBiX2ZpbGVkZWYgKmYsIGludCBpKSB7Ci0gIHJldHVybiAodXBiX2RlZiopdXBiX2ZpbGVk
ZWZfZGVmKGYsIGkpOwotfQotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1
cwotCi1VUEJfSU5MSU5FIGNvbnN0IGNoYXIqIHVwYl9zYWZlY3N0cihjb25zdCBzdGQ6OnN0cmlu
ZyYgc3RyKSB7Ci0gIGFzc2VydChzdHIuc2l6ZSgpID09IHN0ZDo6c3RybGVuKHN0ci5jX3N0cigp
KSk7Ci0gIHJldHVybiBzdHIuY19zdHIoKTsKLX0KLQotLyogSW5saW5lIEMrKyB3cmFwcGVycy4g
Ki8KLW5hbWVzcGFjZSB1cGIgewotCi1pbmxpbmUgRGVmKiBEZWY6OkR1cChjb25zdCB2b2lkKiBv
d25lcikgY29uc3QgewotICByZXR1cm4gdXBiX2RlZl9kdXAodGhpcywgb3duZXIpOwotfQotaW5s
aW5lIERlZjo6VHlwZSBEZWY6OmRlZl90eXBlKCkgY29uc3QgeyByZXR1cm4gdXBiX2RlZl90eXBl
KHRoaXMpOyB9Ci1pbmxpbmUgY29uc3QgY2hhciogRGVmOjpmdWxsX25hbWUoKSBjb25zdCB7IHJl
dHVybiB1cGJfZGVmX2Z1bGxuYW1lKHRoaXMpOyB9Ci1pbmxpbmUgY29uc3QgY2hhciogRGVmOjpu
YW1lKCkgY29uc3QgeyByZXR1cm4gdXBiX2RlZl9uYW1lKHRoaXMpOyB9Ci1pbmxpbmUgYm9vbCBE
ZWY6OnNldF9mdWxsX25hbWUoY29uc3QgY2hhciogZnVsbG5hbWUsIFN0YXR1cyogcykgewotICBy
ZXR1cm4gdXBiX2RlZl9zZXRmdWxsbmFtZSh0aGlzLCBmdWxsbmFtZSwgcyk7Ci19Ci1pbmxpbmUg
Ym9vbCBEZWY6OnNldF9mdWxsX25hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxuYW1lLCBTdGF0
dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9kZWZfc2V0ZnVsbG5hbWUodGhpcywgdXBiX3NhZmVjc3Ry
KGZ1bGxuYW1lKSwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBEZWY6OkZyZWV6ZShEZWYqIGNvbnN0KiBk
ZWZzLCBzaXplX3QgbiwgU3RhdHVzKiBzdGF0dXMpIHsKLSAgcmV0dXJuIHVwYl9kZWZfZnJlZXpl
KGRlZnMsIG4sIHN0YXR1cyk7Ci19Ci1pbmxpbmUgYm9vbCBEZWY6OkZyZWV6ZShjb25zdCBzdGQ6
OnZlY3RvcjxEZWYqPiYgZGVmcywgU3RhdHVzKiBzdGF0dXMpIHsKLSAgcmV0dXJuIHVwYl9kZWZf
ZnJlZXplKChEZWYqIGNvbnN0KikmZGVmc1swXSwgZGVmcy5zaXplKCksIHN0YXR1cyk7Ci19Ci0K
LWlubGluZSBib29sIEZpZWxkRGVmOjpDaGVja1R5cGUoaW50MzJfdCB2YWwpIHsKLSAgcmV0dXJu
IHVwYl9maWVsZGRlZl9jaGVja3R5cGUodmFsKTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVmOjpD
aGVja0xhYmVsKGludDMyX3QgdmFsKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfY2hlY2tsYWJl
bCh2YWwpOwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6OkNoZWNrRGVzY3JpcHRvclR5cGUoaW50
MzJfdCB2YWwpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9jaGVja2Rlc2NyaXB0b3J0eXBlKHZh
bCk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERlZjo6Q2hlY2tJbnRlZ2VyRm9ybWF0KGludDMyX3Qg
dmFsKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfY2hlY2tpbnRmbXQodmFsKTsKLX0KLWlubGlu
ZSBGaWVsZERlZjo6VHlwZSBGaWVsZERlZjo6Q29udmVydFR5cGUoaW50MzJfdCB2YWwpIHsKLSAg
YXNzZXJ0KENoZWNrVHlwZSh2YWwpKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PEZpZWxkRGVmOjpU
eXBlPih2YWwpOwotfQotaW5saW5lIEZpZWxkRGVmOjpMYWJlbCBGaWVsZERlZjo6Q29udmVydExh
YmVsKGludDMyX3QgdmFsKSB7Ci0gIGFzc2VydChDaGVja0xhYmVsKHZhbCkpOwotICByZXR1cm4g
c3RhdGljX2Nhc3Q8RmllbGREZWY6OkxhYmVsPih2YWwpOwotfQotaW5saW5lIEZpZWxkRGVmOjpE
ZXNjcmlwdG9yVHlwZSBGaWVsZERlZjo6Q29udmVydERlc2NyaXB0b3JUeXBlKGludDMyX3QgdmFs
KSB7Ci0gIGFzc2VydChDaGVja0Rlc2NyaXB0b3JUeXBlKHZhbCkpOwotICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RmllbGREZWY6OkRlc2NyaXB0b3JUeXBlPih2YWwpOwotfQotaW5saW5lIEZpZWxkRGVm
OjpJbnRlZ2VyRm9ybWF0IEZpZWxkRGVmOjpDb252ZXJ0SW50ZWdlckZvcm1hdChpbnQzMl90IHZh
bCkgewotICBhc3NlcnQoQ2hlY2tJbnRlZ2VyRm9ybWF0KHZhbCkpOwotICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RmllbGREZWY6OkludGVnZXJGb3JtYXQ+KHZhbCk7Ci19Ci0KLWlubGluZSByZWZmZWRf
cHRyPEZpZWxkRGVmPiBGaWVsZERlZjo6TmV3KCkgewotICB1cGJfZmllbGRkZWYgKmYgPSB1cGJf
ZmllbGRkZWZfbmV3KCZmKTsKLSAgcmV0dXJuIHJlZmZlZF9wdHI8RmllbGREZWY+KGYsICZmKTsK
LX0KLWlubGluZSBGaWVsZERlZiogRmllbGREZWY6OkR1cChjb25zdCB2b2lkKiBvd25lcikgY29u
c3QgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX2R1cCh0aGlzLCBvd25lcik7Ci19Ci1pbmxpbmUg
Y29uc3QgY2hhciogRmllbGREZWY6OmZ1bGxfbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9m
aWVsZGRlZl9mdWxsbmFtZSh0aGlzKTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVmOjpzZXRfZnVs
bF9uYW1lKGNvbnN0IGNoYXIqIGZ1bGxuYW1lLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9m
aWVsZGRlZl9zZXRmdWxsbmFtZSh0aGlzLCBmdWxsbmFtZSwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBG
aWVsZERlZjo6c2V0X2Z1bGxfbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZnVsbG5hbWUsIFN0YXR1
cyogcykgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX3NldGZ1bGxuYW1lKHRoaXMsIHVwYl9zYWZl
Y3N0cihmdWxsbmFtZSksIHMpOwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6OnR5cGVfaXNfc2V0
KCkgY29uc3QgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX3R5cGVpc3NldCh0aGlzKTsKLX0KLWlu
bGluZSBGaWVsZERlZjo6VHlwZSBGaWVsZERlZjo6dHlwZSgpIGNvbnN0IHsgcmV0dXJuIHVwYl9m
aWVsZGRlZl90eXBlKHRoaXMpOyB9Ci1pbmxpbmUgRmllbGREZWY6OkRlc2NyaXB0b3JUeXBlIEZp
ZWxkRGVmOjpkZXNjcmlwdG9yX3R5cGUoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZf
ZGVzY3JpcHRvcnR5cGUodGhpcyk7Ci19Ci1pbmxpbmUgRmllbGREZWY6OkxhYmVsIEZpZWxkRGVm
OjpsYWJlbCgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9sYWJlbCh0aGlzKTsKLX0K
LWlubGluZSB1aW50MzJfdCBGaWVsZERlZjo6bnVtYmVyKCkgY29uc3QgeyByZXR1cm4gdXBiX2Zp
ZWxkZGVmX251bWJlcih0aGlzKTsgfQotaW5saW5lIGNvbnN0IGNoYXIqIEZpZWxkRGVmOjpuYW1l
KCkgY29uc3QgeyByZXR1cm4gdXBiX2ZpZWxkZGVmX25hbWUodGhpcyk7IH0KLWlubGluZSBib29s
IEZpZWxkRGVmOjppc19leHRlbnNpb24oKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZf
aXNleHRlbnNpb24odGhpcyk7Ci19Ci1pbmxpbmUgc2l6ZV90IEZpZWxkRGVmOjpHZXRKc29uTmFt
ZShjaGFyKiBidWYsIHNpemVfdCBsZW4pIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9n
ZXRqc29ubmFtZSh0aGlzLCBidWYsIGxlbik7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERlZjo6bGF6
eSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9sYXp5KHRoaXMpOwotfQotaW5saW5l
IHZvaWQgRmllbGREZWY6OnNldF9sYXp5KGJvb2wgbGF6eSkgewotICB1cGJfZmllbGRkZWZfc2V0
bGF6eSh0aGlzLCBsYXp5KTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVmOjpwYWNrZWQoKSBjb25z
dCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfcGFja2VkKHRoaXMpOwotfQotaW5saW5lIHVpbnQz
Ml90IEZpZWxkRGVmOjppbmRleCgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9pbmRl
eCh0aGlzKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVmOjpzZXRfcGFja2VkKGJvb2wgcGFja2Vk
KSB7Ci0gIHVwYl9maWVsZGRlZl9zZXRwYWNrZWQodGhpcywgcGFja2VkKTsKLX0KLWlubGluZSBj
b25zdCBNZXNzYWdlRGVmKiBGaWVsZERlZjo6Y29udGFpbmluZ190eXBlKCkgY29uc3QgewotICBy
ZXR1cm4gdXBiX2ZpZWxkZGVmX2NvbnRhaW5pbmd0eXBlKHRoaXMpOwotfQotaW5saW5lIGNvbnN0
IE9uZW9mRGVmKiBGaWVsZERlZjo6Y29udGFpbmluZ19vbmVvZigpIGNvbnN0IHsKLSAgcmV0dXJu
IHVwYl9maWVsZGRlZl9jb250YWluaW5nb25lb2YodGhpcyk7Ci19Ci1pbmxpbmUgY29uc3QgY2hh
ciogRmllbGREZWY6OmNvbnRhaW5pbmdfdHlwZV9uYW1lKCkgewotICByZXR1cm4gdXBiX2ZpZWxk
ZGVmX2NvbnRhaW5pbmd0eXBlbmFtZSh0aGlzKTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVmOjpz
ZXRfbnVtYmVyKHVpbnQzMl90IG51bWJlciwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfZmll
bGRkZWZfc2V0bnVtYmVyKHRoaXMsIG51bWJlciwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERl
Zjo6c2V0X25hbWUoY29uc3QgY2hhciAqbmFtZSwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJf
ZmllbGRkZWZfc2V0bmFtZSh0aGlzLCBuYW1lLCBzKTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVm
OjpzZXRfbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgU3RhdHVzKiBzKSB7Ci0gIHJldHVy
biB1cGJfZmllbGRkZWZfc2V0bmFtZSh0aGlzLCB1cGJfc2FmZWNzdHIobmFtZSksIHMpOwotfQot
aW5saW5lIGJvb2wgRmllbGREZWY6OnNldF9qc29uX25hbWUoY29uc3QgY2hhciAqbmFtZSwgU3Rh
dHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfc2V0anNvbm5hbWUodGhpcywgbmFtZSwg
cyk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERlZjo6c2V0X2pzb25fbmFtZShjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfc2V0anNvbm5h
bWUodGhpcywgdXBiX3NhZmVjc3RyKG5hbWUpLCBzKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVm
OjpjbGVhcl9qc29uX25hbWUoKSB7Ci0gIHVwYl9maWVsZGRlZl9jbGVhcmpzb25uYW1lKHRoaXMp
OwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6OnNldF9jb250YWluaW5nX3R5cGVfbmFtZShjb25z
dCBjaGFyICpuYW1lLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9zZXRjb250
YWluaW5ndHlwZW5hbWUodGhpcywgbmFtZSwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZERlZjo6
c2V0X2NvbnRhaW5pbmdfdHlwZV9uYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgKnMpIHsKLSAg
cmV0dXJuIHVwYl9maWVsZGRlZl9zZXRjb250YWluaW5ndHlwZW5hbWUodGhpcywgdXBiX3NhZmVj
c3RyKG5hbWUpLCBzKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVmOjpzZXRfdHlwZSh1cGJfZmll
bGR0eXBlX3QgdHlwZSkgewotICB1cGJfZmllbGRkZWZfc2V0dHlwZSh0aGlzLCB0eXBlKTsKLX0K
LWlubGluZSB2b2lkIEZpZWxkRGVmOjpzZXRfaXNfZXh0ZW5zaW9uKGJvb2wgaXNfZXh0ZW5zaW9u
KSB7Ci0gIHVwYl9maWVsZGRlZl9zZXRpc2V4dGVuc2lvbih0aGlzLCBpc19leHRlbnNpb24pOwot
fQotaW5saW5lIHZvaWQgRmllbGREZWY6OnNldF9kZXNjcmlwdG9yX3R5cGUoRmllbGREZWY6OkRl
c2NyaXB0b3JUeXBlIHR5cGUpIHsKLSAgdXBiX2ZpZWxkZGVmX3NldGRlc2NyaXB0b3J0eXBlKHRo
aXMsIHR5cGUpOwotfQotaW5saW5lIHZvaWQgRmllbGREZWY6OnNldF9sYWJlbCh1cGJfbGFiZWxf
dCBsYWJlbCkgewotICB1cGJfZmllbGRkZWZfc2V0bGFiZWwodGhpcywgbGFiZWwpOwotfQotaW5s
aW5lIGJvb2wgRmllbGREZWY6OklzU3ViTWVzc2FnZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9m
aWVsZGRlZl9pc3N1Ym1zZyh0aGlzKTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVmOjpJc1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIHVwYl9maWVsZGRlZl9pc3N0cmluZyh0aGlzKTsgfQotaW5saW5l
IGJvb2wgRmllbGREZWY6OklzU2VxdWVuY2UoKSBjb25zdCB7IHJldHVybiB1cGJfZmllbGRkZWZf
aXNzZXEodGhpcyk7IH0KLWlubGluZSBib29sIEZpZWxkRGVmOjpJc01hcCgpIGNvbnN0IHsgcmV0
dXJuIHVwYl9maWVsZGRlZl9pc21hcCh0aGlzKTsgfQotaW5saW5lIGludDY0X3QgRmllbGREZWY6
OmRlZmF1bHRfaW50NjQoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfZGVmYXVsdGlu
dDY0KHRoaXMpOwotfQotaW5saW5lIGludDMyX3QgRmllbGREZWY6OmRlZmF1bHRfaW50MzIoKSBj
b25zdCB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfZGVmYXVsdGludDMyKHRoaXMpOwotfQotaW5s
aW5lIHVpbnQ2NF90IEZpZWxkRGVmOjpkZWZhdWx0X3VpbnQ2NCgpIGNvbnN0IHsKLSAgcmV0dXJu
IHVwYl9maWVsZGRlZl9kZWZhdWx0dWludDY0KHRoaXMpOwotfQotaW5saW5lIHVpbnQzMl90IEZp
ZWxkRGVmOjpkZWZhdWx0X3VpbnQzMigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9k
ZWZhdWx0dWludDMyKHRoaXMpOwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6OmRlZmF1bHRfYm9v
bCgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9kZWZhdWx0Ym9vbCh0aGlzKTsKLX0K
LWlubGluZSBmbG9hdCBGaWVsZERlZjo6ZGVmYXVsdF9mbG9hdCgpIGNvbnN0IHsKLSAgcmV0dXJu
IHVwYl9maWVsZGRlZl9kZWZhdWx0ZmxvYXQodGhpcyk7Ci19Ci1pbmxpbmUgZG91YmxlIEZpZWxk
RGVmOjpkZWZhdWx0X2RvdWJsZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9kZWZh
dWx0ZG91YmxlKHRoaXMpOwotfQotaW5saW5lIGNvbnN0IGNoYXIqIEZpZWxkRGVmOjpkZWZhdWx0
X3N0cmluZyhzaXplX3QqIGxlbikgY29uc3QgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX2RlZmF1
bHRzdHIodGhpcywgbGVuKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVmOjpzZXRfZGVmYXVsdF9p
bnQ2NChpbnQ2NF90IHZhbHVlKSB7Ci0gIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0aW50NjQodGhp
cywgdmFsdWUpOwotfQotaW5saW5lIHZvaWQgRmllbGREZWY6OnNldF9kZWZhdWx0X2ludDMyKGlu
dDMyX3QgdmFsdWUpIHsKLSAgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHRpbnQzMih0aGlzLCB2YWx1
ZSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlZjo6c2V0X2RlZmF1bHRfdWludDY0KHVpbnQ2NF90
IHZhbHVlKSB7Ci0gIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0dWludDY0KHRoaXMsIHZhbHVlKTsK
LX0KLWlubGluZSB2b2lkIEZpZWxkRGVmOjpzZXRfZGVmYXVsdF91aW50MzIodWludDMyX3QgdmFs
dWUpIHsKLSAgdXBiX2ZpZWxkZGVmX3NldGRlZmF1bHR1aW50MzIodGhpcywgdmFsdWUpOwotfQot
aW5saW5lIHZvaWQgRmllbGREZWY6OnNldF9kZWZhdWx0X2Jvb2woYm9vbCB2YWx1ZSkgewotICB1
cGJfZmllbGRkZWZfc2V0ZGVmYXVsdGJvb2wodGhpcywgdmFsdWUpOwotfQotaW5saW5lIHZvaWQg
RmllbGREZWY6OnNldF9kZWZhdWx0X2Zsb2F0KGZsb2F0IHZhbHVlKSB7Ci0gIHVwYl9maWVsZGRl
Zl9zZXRkZWZhdWx0ZmxvYXQodGhpcywgdmFsdWUpOwotfQotaW5saW5lIHZvaWQgRmllbGREZWY6
OnNldF9kZWZhdWx0X2RvdWJsZShkb3VibGUgdmFsdWUpIHsKLSAgdXBiX2ZpZWxkZGVmX3NldGRl
ZmF1bHRkb3VibGUodGhpcywgdmFsdWUpOwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6OnNldF9k
ZWZhdWx0X3N0cmluZyhjb25zdCB2b2lkICpzdHIsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAqcykgewotICByZXR1cm4gdXBiX2Zp
ZWxkZGVmX3NldGRlZmF1bHRzdHIodGhpcywgc3RyLCBsZW4sIHMpOwotfQotaW5saW5lIGJvb2wg
RmllbGREZWY6OnNldF9kZWZhdWx0X3N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBTdGF0
dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9maWVsZGRlZl9zZXRkZWZhdWx0c3RyKHRoaXMsIHN0ci5j
X3N0cigpLCBzdHIuc2l6ZSgpLCBzKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVmOjpzZXRfZGVm
YXVsdF9jc3RyKGNvbnN0IGNoYXIqIHN0ciwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfZmll
bGRkZWZfc2V0ZGVmYXVsdGNzdHIodGhpcywgc3RyLCBzKTsKLX0KLWlubGluZSBib29sIEZpZWxk
RGVmOjpIYXNTdWJEZWYoKSBjb25zdCB7IHJldHVybiB1cGJfZmllbGRkZWZfaGFzc3ViZGVmKHRo
aXMpOyB9Ci1pbmxpbmUgY29uc3QgRGVmKiBGaWVsZERlZjo6c3ViZGVmKCkgY29uc3QgeyByZXR1
cm4gdXBiX2ZpZWxkZGVmX3N1YmRlZih0aGlzKTsgfQotaW5saW5lIGNvbnN0IE1lc3NhZ2VEZWYg
KkZpZWxkRGVmOjptZXNzYWdlX3N1YmRlZigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWVsZGRl
Zl9tc2dzdWJkZWYodGhpcyk7Ci19Ci1pbmxpbmUgY29uc3QgRW51bURlZiAqRmllbGREZWY6OmVu
dW1fc3ViZGVmKCkgY29uc3QgewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX2VudW1zdWJkZWYodGhp
cyk7Ci19Ci1pbmxpbmUgY29uc3QgY2hhciogRmllbGREZWY6OnN1YmRlZl9uYW1lKCkgY29uc3Qg
ewotICByZXR1cm4gdXBiX2ZpZWxkZGVmX3N1YmRlZm5hbWUodGhpcyk7Ci19Ci1pbmxpbmUgYm9v
bCBGaWVsZERlZjo6c2V0X3N1YmRlZihjb25zdCBEZWYqIHN1YmRlZiwgU3RhdHVzKiBzKSB7Ci0g
IHJldHVybiB1cGJfZmllbGRkZWZfc2V0c3ViZGVmKHRoaXMsIHN1YmRlZiwgcyk7Ci19Ci1pbmxp
bmUgYm9vbCBGaWVsZERlZjo6c2V0X2VudW1fc3ViZGVmKGNvbnN0IEVudW1EZWYqIHN1YmRlZiwg
U3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfc2V0ZW51bXN1YmRlZih0aGlzLCBz
dWJkZWYsIHMpOwotfQotaW5saW5lIGJvb2wgRmllbGREZWY6OnNldF9tZXNzYWdlX3N1YmRlZihj
b25zdCBNZXNzYWdlRGVmKiBzdWJkZWYsIFN0YXR1cyogcykgewotICByZXR1cm4gdXBiX2ZpZWxk
ZGVmX3NldG1zZ3N1YmRlZih0aGlzLCBzdWJkZWYsIHMpOwotfQotaW5saW5lIGJvb2wgRmllbGRE
ZWY6OnNldF9zdWJkZWZfbmFtZShjb25zdCBjaGFyKiBuYW1lLCBTdGF0dXMqIHMpIHsKLSAgcmV0
dXJuIHVwYl9maWVsZGRlZl9zZXRzdWJkZWZuYW1lKHRoaXMsIG5hbWUsIHMpOwotfQotaW5saW5l
IGJvb2wgRmllbGREZWY6OnNldF9zdWJkZWZfbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwg
U3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfZmllbGRkZWZfc2V0c3ViZGVmbmFtZSh0aGlzLCB1
cGJfc2FmZWNzdHIobmFtZSksIHMpOwotfQotCi1pbmxpbmUgcmVmZmVkX3B0cjxNZXNzYWdlRGVm
PiBNZXNzYWdlRGVmOjpOZXcoKSB7Ci0gIHVwYl9tc2dkZWYgKm0gPSB1cGJfbXNnZGVmX25ldygm
bSk7Ci0gIHJldHVybiByZWZmZWRfcHRyPE1lc3NhZ2VEZWY+KG0sICZtKTsKLX0KLWlubGluZSBj
b25zdCBjaGFyICpNZXNzYWdlRGVmOjpmdWxsX25hbWUoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJf
bXNnZGVmX2Z1bGxuYW1lKHRoaXMpOwotfQotaW5saW5lIGNvbnN0IGNoYXIgKk1lc3NhZ2VEZWY6
Om5hbWUoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfbXNnZGVmX25hbWUodGhpcyk7Ci19Ci1pbmxp
bmUgdXBiX3N5bnRheF90IE1lc3NhZ2VEZWY6OnN5bnRheCgpIGNvbnN0IHsKLSAgcmV0dXJuIHVw
Yl9tc2dkZWZfc3ludGF4KHRoaXMpOwotfQotaW5saW5lIGJvb2wgTWVzc2FnZURlZjo6c2V0X2Z1
bGxfbmFtZShjb25zdCBjaGFyKiBmdWxsbmFtZSwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJf
bXNnZGVmX3NldGZ1bGxuYW1lKHRoaXMsIGZ1bGxuYW1lLCBzKTsKLX0KLWlubGluZSBib29sIE1l
c3NhZ2VEZWY6OnNldF9mdWxsX25hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxuYW1lLCBTdGF0
dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZfc2V0ZnVsbG5hbWUodGhpcywgdXBiX3NhZmVj
c3RyKGZ1bGxuYW1lKSwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBNZXNzYWdlRGVmOjpzZXRfc3ludGF4
KHVwYl9zeW50YXhfdCBzeW50YXgpIHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZfc2V0c3ludGF4KHRo
aXMsIHN5bnRheCk7Ci19Ci1pbmxpbmUgYm9vbCBNZXNzYWdlRGVmOjpGcmVlemUoU3RhdHVzKiBz
dGF0dXMpIHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZfZnJlZXplKHRoaXMsIHN0YXR1cyk7Ci19Ci1p
bmxpbmUgaW50IE1lc3NhZ2VEZWY6OmZpZWxkX2NvdW50KCkgY29uc3QgewotICByZXR1cm4gdXBi
X21zZ2RlZl9udW1maWVsZHModGhpcyk7Ci19Ci1pbmxpbmUgaW50IE1lc3NhZ2VEZWY6Om9uZW9m
X2NvdW50KCkgY29uc3QgewotICByZXR1cm4gdXBiX21zZ2RlZl9udW1vbmVvZnModGhpcyk7Ci19
Ci1pbmxpbmUgYm9vbCBNZXNzYWdlRGVmOjpBZGRGaWVsZCh1cGJfZmllbGRkZWYqIGYsIFN0YXR1
cyogcykgewotICByZXR1cm4gdXBiX21zZ2RlZl9hZGRmaWVsZCh0aGlzLCBmLCBOVUxMLCBzKTsK
LX0KLWlubGluZSBib29sIE1lc3NhZ2VEZWY6OkFkZEZpZWxkKGNvbnN0IHJlZmZlZF9wdHI8Rmll
bGREZWY+JiBmLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZfYWRkZmllbGQodGhp
cywgZi5nZXQoKSwgTlVMTCwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBNZXNzYWdlRGVmOjpBZGRPbmVv
Zih1cGJfb25lb2ZkZWYqIG8sIFN0YXR1cyogcykgewotICByZXR1cm4gdXBiX21zZ2RlZl9hZGRv
bmVvZih0aGlzLCBvLCBOVUxMLCBzKTsKLX0KLWlubGluZSBib29sIE1lc3NhZ2VEZWY6OkFkZE9u
ZW9mKGNvbnN0IHJlZmZlZF9wdHI8T25lb2ZEZWY+JiBvLCBTdGF0dXMqIHMpIHsKLSAgcmV0dXJu
IHVwYl9tc2dkZWZfYWRkb25lb2YodGhpcywgby5nZXQoKSwgTlVMTCwgcyk7Ci19Ci1pbmxpbmUg
RmllbGREZWYqIE1lc3NhZ2VEZWY6OkZpbmRGaWVsZEJ5TnVtYmVyKHVpbnQzMl90IG51bWJlcikg
ewotICByZXR1cm4gdXBiX21zZ2RlZl9pdG9mX211dGFibGUodGhpcywgbnVtYmVyKTsKLX0KLWlu
bGluZSBGaWVsZERlZiogTWVzc2FnZURlZjo6RmluZEZpZWxkQnlOYW1lKGNvbnN0IGNoYXIqIG5h
bWUsIHNpemVfdCBsZW4pIHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZfbnRvZl9tdXRhYmxlKHRoaXMs
IG5hbWUsIGxlbik7Ci19Ci1pbmxpbmUgY29uc3QgRmllbGREZWYqIE1lc3NhZ2VEZWY6OkZpbmRG
aWVsZEJ5TnVtYmVyKHVpbnQzMl90IG51bWJlcikgY29uc3QgewotICByZXR1cm4gdXBiX21zZ2Rl
Zl9pdG9mKHRoaXMsIG51bWJlcik7Ci19Ci1pbmxpbmUgY29uc3QgRmllbGREZWYgKk1lc3NhZ2VE
ZWY6OkZpbmRGaWVsZEJ5TmFtZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikgY29uc3QgewotICBy
ZXR1cm4gdXBiX21zZ2RlZl9udG9mKHRoaXMsIG5hbWUsIGxlbik7Ci19Ci1pbmxpbmUgT25lb2ZE
ZWYqIE1lc3NhZ2VEZWY6OkZpbmRPbmVvZkJ5TmFtZShjb25zdCBjaGFyKiBuYW1lLCBzaXplX3Qg
bGVuKSB7Ci0gIHJldHVybiB1cGJfbXNnZGVmX250b29fbXV0YWJsZSh0aGlzLCBuYW1lLCBsZW4p
OwotfQotaW5saW5lIGNvbnN0IE9uZW9mRGVmKiBNZXNzYWdlRGVmOjpGaW5kT25lb2ZCeU5hbWUo
Y29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBsZW4pIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9tc2dkZWZfbnRv
byh0aGlzLCBuYW1lLCBsZW4pOwotfQotaW5saW5lIE1lc3NhZ2VEZWYqIE1lc3NhZ2VEZWY6OkR1
cChjb25zdCB2b2lkICpvd25lcikgY29uc3QgewotICByZXR1cm4gdXBiX21zZ2RlZl9kdXAodGhp
cywgb3duZXIpOwotfQotaW5saW5lIHZvaWQgTWVzc2FnZURlZjo6c2V0bWFwZW50cnkoYm9vbCBt
YXBfZW50cnkpIHsKLSAgdXBiX21zZ2RlZl9zZXRtYXBlbnRyeSh0aGlzLCBtYXBfZW50cnkpOwot
fQotaW5saW5lIGJvb2wgTWVzc2FnZURlZjo6bWFwZW50cnkoKSBjb25zdCB7Ci0gIHJldHVybiB1
cGJfbXNnZGVmX21hcGVudHJ5KHRoaXMpOwotfQotaW5saW5lIE1lc3NhZ2VEZWY6OmZpZWxkX2l0
ZXJhdG9yIE1lc3NhZ2VEZWY6OmZpZWxkX2JlZ2luKCkgewotICByZXR1cm4gZmllbGRfaXRlcmF0
b3IodGhpcyk7Ci19Ci1pbmxpbmUgTWVzc2FnZURlZjo6ZmllbGRfaXRlcmF0b3IgTWVzc2FnZURl
Zjo6ZmllbGRfZW5kKCkgewotICByZXR1cm4gZmllbGRfaXRlcmF0b3I6OmVuZCh0aGlzKTsKLX0K
LWlubGluZSBNZXNzYWdlRGVmOjpjb25zdF9maWVsZF9pdGVyYXRvciBNZXNzYWdlRGVmOjpmaWVs
ZF9iZWdpbigpIGNvbnN0IHsKLSAgcmV0dXJuIGNvbnN0X2ZpZWxkX2l0ZXJhdG9yKHRoaXMpOwot
fQotaW5saW5lIE1lc3NhZ2VEZWY6OmNvbnN0X2ZpZWxkX2l0ZXJhdG9yIE1lc3NhZ2VEZWY6OmZp
ZWxkX2VuZCgpIGNvbnN0IHsKLSAgcmV0dXJuIGNvbnN0X2ZpZWxkX2l0ZXJhdG9yOjplbmQodGhp
cyk7Ci19Ci0KLWlubGluZSBNZXNzYWdlRGVmOjpvbmVvZl9pdGVyYXRvciBNZXNzYWdlRGVmOjpv
bmVvZl9iZWdpbigpIHsKLSAgcmV0dXJuIG9uZW9mX2l0ZXJhdG9yKHRoaXMpOwotfQotaW5saW5l
IE1lc3NhZ2VEZWY6Om9uZW9mX2l0ZXJhdG9yIE1lc3NhZ2VEZWY6Om9uZW9mX2VuZCgpIHsKLSAg
cmV0dXJuIG9uZW9mX2l0ZXJhdG9yOjplbmQodGhpcyk7Ci19Ci1pbmxpbmUgTWVzc2FnZURlZjo6
Y29uc3Rfb25lb2ZfaXRlcmF0b3IgTWVzc2FnZURlZjo6b25lb2ZfYmVnaW4oKSBjb25zdCB7Ci0g
IHJldHVybiBjb25zdF9vbmVvZl9pdGVyYXRvcih0aGlzKTsKLX0KLWlubGluZSBNZXNzYWdlRGVm
Ojpjb25zdF9vbmVvZl9pdGVyYXRvciBNZXNzYWdlRGVmOjpvbmVvZl9lbmQoKSBjb25zdCB7Ci0g
IHJldHVybiBjb25zdF9vbmVvZl9pdGVyYXRvcjo6ZW5kKHRoaXMpOwotfQotCi1pbmxpbmUgTWVz
c2FnZURlZjo6ZmllbGRfaXRlcmF0b3I6OmZpZWxkX2l0ZXJhdG9yKE1lc3NhZ2VEZWYqIG1kKSB7
Ci0gIHVwYl9tc2dfZmllbGRfYmVnaW4oJml0ZXJfLCBtZCk7Ci19Ci1pbmxpbmUgTWVzc2FnZURl
Zjo6ZmllbGRfaXRlcmF0b3IgTWVzc2FnZURlZjo6ZmllbGRfaXRlcmF0b3I6OmVuZCgKLSAgICBN
ZXNzYWdlRGVmKiBtZCkgewotICBNZXNzYWdlRGVmOjpmaWVsZF9pdGVyYXRvciBpdGVyKG1kKTsK
LSAgdXBiX21zZ19maWVsZF9pdGVyX3NldGRvbmUoJml0ZXIuaXRlcl8pOwotICByZXR1cm4gaXRl
cjsKLX0KLWlubGluZSBGaWVsZERlZiogTWVzc2FnZURlZjo6ZmllbGRfaXRlcmF0b3I6Om9wZXJh
dG9yKigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9tc2dfaXRlcl9maWVsZCgmaXRlcl8pOwotfQot
aW5saW5lIHZvaWQgTWVzc2FnZURlZjo6ZmllbGRfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSB7Ci0g
IHJldHVybiB1cGJfbXNnX2ZpZWxkX25leHQoJml0ZXJfKTsKLX0KLWlubGluZSBib29sIE1lc3Nh
Z2VEZWY6OmZpZWxkX2l0ZXJhdG9yOjpvcGVyYXRvcj09KAotICAgIGNvbnN0IGZpZWxkX2l0ZXJh
dG9yICZvdGhlcikgY29uc3QgewotICByZXR1cm4gdXBiX2ludHRhYmxlX2l0ZXJfaXNlcXVhbCgm
aXRlcl8sICZvdGhlci5pdGVyXyk7Ci19Ci1pbmxpbmUgYm9vbCBNZXNzYWdlRGVmOjpmaWVsZF9p
dGVyYXRvcjo6b3BlcmF0b3IhPSgKLSAgICBjb25zdCBmaWVsZF9pdGVyYXRvciAmb3RoZXIpIGNv
bnN0IHsKLSAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotfQotCi1pbmxpbmUgTWVzc2FnZURl
Zjo6Y29uc3RfZmllbGRfaXRlcmF0b3I6OmNvbnN0X2ZpZWxkX2l0ZXJhdG9yKAotICAgIGNvbnN0
IE1lc3NhZ2VEZWYqIG1kKSB7Ci0gIHVwYl9tc2dfZmllbGRfYmVnaW4oJml0ZXJfLCBtZCk7Ci19
Ci1pbmxpbmUgTWVzc2FnZURlZjo6Y29uc3RfZmllbGRfaXRlcmF0b3IgTWVzc2FnZURlZjo6Y29u
c3RfZmllbGRfaXRlcmF0b3I6OmVuZCgKLSAgICBjb25zdCBNZXNzYWdlRGVmICptZCkgewotICBN
ZXNzYWdlRGVmOjpjb25zdF9maWVsZF9pdGVyYXRvciBpdGVyKG1kKTsKLSAgdXBiX21zZ19maWVs
ZF9pdGVyX3NldGRvbmUoJml0ZXIuaXRlcl8pOwotICByZXR1cm4gaXRlcjsKLX0KLWlubGluZSBj
b25zdCBGaWVsZERlZiogTWVzc2FnZURlZjo6Y29uc3RfZmllbGRfaXRlcmF0b3I6Om9wZXJhdG9y
KigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9tc2dfaXRlcl9maWVsZCgmaXRlcl8pOwotfQotaW5s
aW5lIHZvaWQgTWVzc2FnZURlZjo6Y29uc3RfZmllbGRfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSB7
Ci0gIHJldHVybiB1cGJfbXNnX2ZpZWxkX25leHQoJml0ZXJfKTsKLX0KLWlubGluZSBib29sIE1l
c3NhZ2VEZWY6OmNvbnN0X2ZpZWxkX2l0ZXJhdG9yOjpvcGVyYXRvcj09KAotICAgIGNvbnN0IGNv
bnN0X2ZpZWxkX2l0ZXJhdG9yICZvdGhlcikgY29uc3QgewotICByZXR1cm4gdXBiX2ludHRhYmxl
X2l0ZXJfaXNlcXVhbCgmaXRlcl8sICZvdGhlci5pdGVyXyk7Ci19Ci1pbmxpbmUgYm9vbCBNZXNz
YWdlRGVmOjpjb25zdF9maWVsZF9pdGVyYXRvcjo6b3BlcmF0b3IhPSgKLSAgICBjb25zdCBjb25z
dF9maWVsZF9pdGVyYXRvciAmb3RoZXIpIGNvbnN0IHsKLSAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOwotfQotCi1pbmxpbmUgTWVzc2FnZURlZjo6b25lb2ZfaXRlcmF0b3I6Om9uZW9mX2l0ZXJh
dG9yKE1lc3NhZ2VEZWYqIG1kKSB7Ci0gIHVwYl9tc2dfb25lb2ZfYmVnaW4oJml0ZXJfLCBtZCk7
Ci19Ci1pbmxpbmUgTWVzc2FnZURlZjo6b25lb2ZfaXRlcmF0b3IgTWVzc2FnZURlZjo6b25lb2Zf
aXRlcmF0b3I6OmVuZCgKLSAgICBNZXNzYWdlRGVmKiBtZCkgewotICBNZXNzYWdlRGVmOjpvbmVv
Zl9pdGVyYXRvciBpdGVyKG1kKTsKLSAgdXBiX21zZ19vbmVvZl9pdGVyX3NldGRvbmUoJml0ZXIu
aXRlcl8pOwotICByZXR1cm4gaXRlcjsKLX0KLWlubGluZSBPbmVvZkRlZiogTWVzc2FnZURlZjo6
b25lb2ZfaXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9tc2dfaXRl
cl9vbmVvZigmaXRlcl8pOwotfQotaW5saW5lIHZvaWQgTWVzc2FnZURlZjo6b25lb2ZfaXRlcmF0
b3I6Om9wZXJhdG9yKysoKSB7Ci0gIHJldHVybiB1cGJfbXNnX29uZW9mX25leHQoJml0ZXJfKTsK
LX0KLWlubGluZSBib29sIE1lc3NhZ2VEZWY6Om9uZW9mX2l0ZXJhdG9yOjpvcGVyYXRvcj09KAot
ICAgIGNvbnN0IG9uZW9mX2l0ZXJhdG9yICZvdGhlcikgY29uc3QgewotICByZXR1cm4gdXBiX3N0
cnRhYmxlX2l0ZXJfaXNlcXVhbCgmaXRlcl8sICZvdGhlci5pdGVyXyk7Ci19Ci1pbmxpbmUgYm9v
bCBNZXNzYWdlRGVmOjpvbmVvZl9pdGVyYXRvcjo6b3BlcmF0b3IhPSgKLSAgICBjb25zdCBvbmVv
Zl9pdGVyYXRvciAmb3RoZXIpIGNvbnN0IHsKLSAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwot
fQotCi1pbmxpbmUgTWVzc2FnZURlZjo6Y29uc3Rfb25lb2ZfaXRlcmF0b3I6OmNvbnN0X29uZW9m
X2l0ZXJhdG9yKAotICAgIGNvbnN0IE1lc3NhZ2VEZWYqIG1kKSB7Ci0gIHVwYl9tc2dfb25lb2Zf
YmVnaW4oJml0ZXJfLCBtZCk7Ci19Ci1pbmxpbmUgTWVzc2FnZURlZjo6Y29uc3Rfb25lb2ZfaXRl
cmF0b3IgTWVzc2FnZURlZjo6Y29uc3Rfb25lb2ZfaXRlcmF0b3I6OmVuZCgKLSAgICBjb25zdCBN
ZXNzYWdlRGVmICptZCkgewotICBNZXNzYWdlRGVmOjpjb25zdF9vbmVvZl9pdGVyYXRvciBpdGVy
KG1kKTsKLSAgdXBiX21zZ19vbmVvZl9pdGVyX3NldGRvbmUoJml0ZXIuaXRlcl8pOwotICByZXR1
cm4gaXRlcjsKLX0KLWlubGluZSBjb25zdCBPbmVvZkRlZiogTWVzc2FnZURlZjo6Y29uc3Rfb25l
b2ZfaXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9tc2dfaXRlcl9v
bmVvZigmaXRlcl8pOwotfQotaW5saW5lIHZvaWQgTWVzc2FnZURlZjo6Y29uc3Rfb25lb2ZfaXRl
cmF0b3I6Om9wZXJhdG9yKysoKSB7Ci0gIHJldHVybiB1cGJfbXNnX29uZW9mX25leHQoJml0ZXJf
KTsKLX0KLWlubGluZSBib29sIE1lc3NhZ2VEZWY6OmNvbnN0X29uZW9mX2l0ZXJhdG9yOjpvcGVy
YXRvcj09KAotICAgIGNvbnN0IGNvbnN0X29uZW9mX2l0ZXJhdG9yICZvdGhlcikgY29uc3Qgewot
ICByZXR1cm4gdXBiX3N0cnRhYmxlX2l0ZXJfaXNlcXVhbCgmaXRlcl8sICZvdGhlci5pdGVyXyk7
Ci19Ci1pbmxpbmUgYm9vbCBNZXNzYWdlRGVmOjpjb25zdF9vbmVvZl9pdGVyYXRvcjo6b3BlcmF0
b3IhPSgKLSAgICBjb25zdCBjb25zdF9vbmVvZl9pdGVyYXRvciAmb3RoZXIpIGNvbnN0IHsKLSAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotfQotCi1pbmxpbmUgcmVmZmVkX3B0cjxFbnVtRGVm
PiBFbnVtRGVmOjpOZXcoKSB7Ci0gIHVwYl9lbnVtZGVmICplID0gdXBiX2VudW1kZWZfbmV3KCZl
KTsKLSAgcmV0dXJuIHJlZmZlZF9wdHI8RW51bURlZj4oZSwgJmUpOwotfQotaW5saW5lIGNvbnN0
IGNoYXIqIEVudW1EZWY6OmZ1bGxfbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9lbnVtZGVm
X2Z1bGxuYW1lKHRoaXMpOwotfQotaW5saW5lIGNvbnN0IGNoYXIqIEVudW1EZWY6Om5hbWUoKSBj
b25zdCB7Ci0gIHJldHVybiB1cGJfZW51bWRlZl9uYW1lKHRoaXMpOwotfQotaW5saW5lIGJvb2wg
RW51bURlZjo6c2V0X2Z1bGxfbmFtZShjb25zdCBjaGFyKiBmdWxsbmFtZSwgU3RhdHVzKiBzKSB7
Ci0gIHJldHVybiB1cGJfZW51bWRlZl9zZXRmdWxsbmFtZSh0aGlzLCBmdWxsbmFtZSwgcyk7Ci19
Ci1pbmxpbmUgYm9vbCBFbnVtRGVmOjpzZXRfZnVsbF9uYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBm
dWxsbmFtZSwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfZW51bWRlZl9zZXRmdWxsbmFtZSh0
aGlzLCB1cGJfc2FmZWNzdHIoZnVsbG5hbWUpLCBzKTsKLX0KLWlubGluZSBib29sIEVudW1EZWY6
OkZyZWV6ZShTdGF0dXMqIHN0YXR1cykgewotICByZXR1cm4gdXBiX2VudW1kZWZfZnJlZXplKHRo
aXMsIHN0YXR1cyk7Ci19Ci1pbmxpbmUgaW50MzJfdCBFbnVtRGVmOjpkZWZhdWx0X3ZhbHVlKCkg
Y29uc3QgewotICByZXR1cm4gdXBiX2VudW1kZWZfZGVmYXVsdCh0aGlzKTsKLX0KLWlubGluZSBi
b29sIEVudW1EZWY6OnNldF9kZWZhdWx0X3ZhbHVlKGludDMyX3QgdmFsLCBTdGF0dXMqIHN0YXR1
cykgewotICByZXR1cm4gdXBiX2VudW1kZWZfc2V0ZGVmYXVsdCh0aGlzLCB2YWwsIHN0YXR1cyk7
Ci19Ci1pbmxpbmUgaW50IEVudW1EZWY6OnZhbHVlX2NvdW50KCkgY29uc3QgeyByZXR1cm4gdXBi
X2VudW1kZWZfbnVtdmFscyh0aGlzKTsgfQotaW5saW5lIGJvb2wgRW51bURlZjo6QWRkVmFsdWUo
Y29uc3QgY2hhciogbmFtZSwgaW50MzJfdCBudW0sIFN0YXR1cyogc3RhdHVzKSB7Ci0gIHJldHVy
biB1cGJfZW51bWRlZl9hZGR2YWwodGhpcywgbmFtZSwgbnVtLCBzdGF0dXMpOwotfQotaW5saW5l
IGJvb2wgRW51bURlZjo6QWRkVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludDMyX3Qg
bnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzKiBzdGF0dXMpIHsKLSAg
cmV0dXJuIHVwYl9lbnVtZGVmX2FkZHZhbCh0aGlzLCB1cGJfc2FmZWNzdHIobmFtZSksIG51bSwg
c3RhdHVzKTsKLX0KLWlubGluZSBib29sIEVudW1EZWY6OkZpbmRWYWx1ZUJ5TmFtZShjb25zdCBj
aGFyKiBuYW1lLCBpbnQzMl90ICpudW0pIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9lbnVtZGVmX250
b2l6KHRoaXMsIG5hbWUsIG51bSk7Ci19Ci1pbmxpbmUgY29uc3QgY2hhciogRW51bURlZjo6Rmlu
ZFZhbHVlQnlOdW1iZXIoaW50MzJfdCBudW0pIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9lbnVtZGVm
X2l0b24odGhpcywgbnVtKTsKLX0KLWlubGluZSBFbnVtRGVmKiBFbnVtRGVmOjpEdXAoY29uc3Qg
dm9pZCogb3duZXIpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9lbnVtZGVmX2R1cCh0aGlzLCBvd25l
cik7Ci19Ci0KLWlubGluZSBFbnVtRGVmOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgRW51bURl
ZiogZSkgewotICB1cGJfZW51bV9iZWdpbigmaXRlcl8sIGUpOwotfQotaW5saW5lIGludDMyX3Qg
RW51bURlZjo6SXRlcmF0b3I6Om51bWJlcigpIHsKLSAgcmV0dXJuIHVwYl9lbnVtX2l0ZXJfbnVt
YmVyKCZpdGVyXyk7Ci19Ci1pbmxpbmUgY29uc3QgY2hhciogRW51bURlZjo6SXRlcmF0b3I6Om5h
bWUoKSB7Ci0gIHJldHVybiB1cGJfZW51bV9pdGVyX25hbWUoJml0ZXJfKTsKLX0KLWlubGluZSBi
b29sIEVudW1EZWY6Okl0ZXJhdG9yOjpEb25lKCkgeyByZXR1cm4gdXBiX2VudW1fZG9uZSgmaXRl
cl8pOyB9Ci1pbmxpbmUgdm9pZCBFbnVtRGVmOjpJdGVyYXRvcjo6TmV4dCgpIHsgcmV0dXJuIHVw
Yl9lbnVtX25leHQoJml0ZXJfKTsgfQotCi1pbmxpbmUgcmVmZmVkX3B0cjxPbmVvZkRlZj4gT25l
b2ZEZWY6Ok5ldygpIHsKLSAgdXBiX29uZW9mZGVmICpvID0gdXBiX29uZW9mZGVmX25ldygmbyk7
Ci0gIHJldHVybiByZWZmZWRfcHRyPE9uZW9mRGVmPihvLCAmbyk7Ci19Ci0KLWlubGluZSBjb25z
dCBNZXNzYWdlRGVmKiBPbmVvZkRlZjo6Y29udGFpbmluZ190eXBlKCkgY29uc3QgewotICByZXR1
cm4gdXBiX29uZW9mZGVmX2NvbnRhaW5pbmd0eXBlKHRoaXMpOwotfQotaW5saW5lIGNvbnN0IGNo
YXIqIE9uZW9mRGVmOjpuYW1lKCkgY29uc3QgewotICByZXR1cm4gdXBiX29uZW9mZGVmX25hbWUo
dGhpcyk7Ci19Ci1pbmxpbmUgYm9vbCBPbmVvZkRlZjo6c2V0X25hbWUoY29uc3QgY2hhciogbmFt
ZSwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfb25lb2ZkZWZfc2V0bmFtZSh0aGlzLCBuYW1l
LCBzKTsKLX0KLWlubGluZSBib29sIE9uZW9mRGVmOjpzZXRfbmFtZShjb25zdCBzdGQ6OnN0cmlu
ZyYgbmFtZSwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfb25lb2ZkZWZfc2V0bmFtZSh0aGlz
LCB1cGJfc2FmZWNzdHIobmFtZSksIHMpOwotfQotaW5saW5lIGludCBPbmVvZkRlZjo6ZmllbGRf
Y291bnQoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfb25lb2ZkZWZfbnVtZmllbGRzKHRoaXMpOwot
fQotaW5saW5lIGJvb2wgT25lb2ZEZWY6OkFkZEZpZWxkKEZpZWxkRGVmKiBmaWVsZCwgU3RhdHVz
KiBzKSB7Ci0gIHJldHVybiB1cGJfb25lb2ZkZWZfYWRkZmllbGQodGhpcywgZmllbGQsIE5VTEws
IHMpOwotfQotaW5saW5lIGJvb2wgT25lb2ZEZWY6OkFkZEZpZWxkKGNvbnN0IHJlZmZlZF9wdHI8
RmllbGREZWY+JiBmaWVsZCwgU3RhdHVzKiBzKSB7Ci0gIHJldHVybiB1cGJfb25lb2ZkZWZfYWRk
ZmllbGQodGhpcywgZmllbGQuZ2V0KCksIE5VTEwsIHMpOwotfQotaW5saW5lIGNvbnN0IEZpZWxk
RGVmKiBPbmVvZkRlZjo6RmluZEZpZWxkQnlOYW1lKGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikgY29u
c3QgewotICByZXR1cm4gdXBiX29uZW9mZGVmX250b2YodGhpcywgbmFtZSwgbGVuKTsKLX0KLWlu
bGluZSBjb25zdCBGaWVsZERlZiogT25lb2ZEZWY6OkZpbmRGaWVsZEJ5TnVtYmVyKHVpbnQzMl90
IG51bSkgY29uc3QgewotICByZXR1cm4gdXBiX29uZW9mZGVmX2l0b2YodGhpcywgbnVtKTsKLX0K
LWlubGluZSBPbmVvZkRlZjo6aXRlcmF0b3IgT25lb2ZEZWY6OmJlZ2luKCkgeyByZXR1cm4gaXRl
cmF0b3IodGhpcyk7IH0KLWlubGluZSBPbmVvZkRlZjo6aXRlcmF0b3IgT25lb2ZEZWY6OmVuZCgp
IHsgcmV0dXJuIGl0ZXJhdG9yOjplbmQodGhpcyk7IH0KLWlubGluZSBPbmVvZkRlZjo6Y29uc3Rf
aXRlcmF0b3IgT25lb2ZEZWY6OmJlZ2luKCkgY29uc3QgewotICByZXR1cm4gY29uc3RfaXRlcmF0
b3IodGhpcyk7Ci19Ci1pbmxpbmUgT25lb2ZEZWY6OmNvbnN0X2l0ZXJhdG9yIE9uZW9mRGVmOjpl
bmQoKSBjb25zdCB7Ci0gIHJldHVybiBjb25zdF9pdGVyYXRvcjo6ZW5kKHRoaXMpOwotfQotCi1p
bmxpbmUgT25lb2ZEZWY6Oml0ZXJhdG9yOjppdGVyYXRvcihPbmVvZkRlZiogbykgewotICB1cGJf
b25lb2ZfYmVnaW4oJml0ZXJfLCBvKTsKLX0KLWlubGluZSBPbmVvZkRlZjo6aXRlcmF0b3IgT25l
b2ZEZWY6Oml0ZXJhdG9yOjplbmQoT25lb2ZEZWYqIG8pIHsKLSAgT25lb2ZEZWY6Oml0ZXJhdG9y
IGl0ZXIobyk7Ci0gIHVwYl9vbmVvZl9pdGVyX3NldGRvbmUoJml0ZXIuaXRlcl8pOwotICByZXR1
cm4gaXRlcjsKLX0KLWlubGluZSBGaWVsZERlZiogT25lb2ZEZWY6Oml0ZXJhdG9yOjpvcGVyYXRv
ciooKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfb25lb2ZfaXRlcl9maWVsZCgmaXRlcl8pOwotfQot
aW5saW5lIHZvaWQgT25lb2ZEZWY6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKCkgeyByZXR1cm4gdXBi
X29uZW9mX25leHQoJml0ZXJfKTsgfQotaW5saW5lIGJvb2wgT25lb2ZEZWY6Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3QgewotICByZXR1cm4gdXBiX2lu
dHRhYmxlX2l0ZXJfaXNlcXVhbCgmaXRlcl8sICZvdGhlci5pdGVyXyk7Ci19Ci1pbmxpbmUgYm9v
bCBPbmVvZkRlZjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3IgJm90aGVyKSBj
b25zdCB7Ci0gIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLX0KLQotaW5saW5lIE9uZW9mRGVm
Ojpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IoY29uc3QgT25lb2ZEZWYqIG1kKSB7Ci0g
IHVwYl9vbmVvZl9iZWdpbigmaXRlcl8sIG1kKTsKLX0KLWlubGluZSBPbmVvZkRlZjo6Y29uc3Rf
aXRlcmF0b3IgT25lb2ZEZWY6OmNvbnN0X2l0ZXJhdG9yOjplbmQoCi0gICAgY29uc3QgT25lb2ZE
ZWYgKm1kKSB7Ci0gIE9uZW9mRGVmOjpjb25zdF9pdGVyYXRvciBpdGVyKG1kKTsKLSAgdXBiX29u
ZW9mX2l0ZXJfc2V0ZG9uZSgmaXRlci5pdGVyXyk7Ci0gIHJldHVybiBpdGVyOwotfQotaW5saW5l
IGNvbnN0IEZpZWxkRGVmKiBPbmVvZkRlZjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKigpIGNv
bnN0IHsKLSAgcmV0dXJuIHVwYl9tc2dfaXRlcl9maWVsZCgmaXRlcl8pOwotfQotaW5saW5lIHZv
aWQgT25lb2ZEZWY6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCkgewotICByZXR1cm4gdXBi
X29uZW9mX25leHQoJml0ZXJfKTsKLX0KLWlubGluZSBib29sIE9uZW9mRGVmOjpjb25zdF9pdGVy
YXRvcjo6b3BlcmF0b3I9PSgKLSAgICBjb25zdCBjb25zdF9pdGVyYXRvciAmb3RoZXIpIGNvbnN0
IHsKLSAgcmV0dXJuIHVwYl9pbnR0YWJsZV9pdGVyX2lzZXF1YWwoJml0ZXJfLCAmb3RoZXIuaXRl
cl8pOwotfQotaW5saW5lIGJvb2wgT25lb2ZEZWY6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciE9
KAotICAgIGNvbnN0IGNvbnN0X2l0ZXJhdG9yICZvdGhlcikgY29uc3QgewotICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7Ci19Ci0KLWlubGluZSByZWZmZWRfcHRyPEZpbGVEZWY+IEZpbGVEZWY6
Ok5ldygpIHsKLSAgdXBiX2ZpbGVkZWYgKmYgPSB1cGJfZmlsZWRlZl9uZXcoJmYpOwotICByZXR1
cm4gcmVmZmVkX3B0cjxGaWxlRGVmPihmLCAmZik7Ci19Ci0KLWlubGluZSBjb25zdCBjaGFyKiBG
aWxlRGVmOjpuYW1lKCkgY29uc3QgewotICByZXR1cm4gdXBiX2ZpbGVkZWZfbmFtZSh0aGlzKTsK
LX0KLWlubGluZSBib29sIEZpbGVEZWY6OnNldF9uYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFN0YXR1
cyogcykgewotICByZXR1cm4gdXBiX2ZpbGVkZWZfc2V0bmFtZSh0aGlzLCBuYW1lLCBzKTsKLX0K
LWlubGluZSBib29sIEZpbGVEZWY6OnNldF9uYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBT
dGF0dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9maWxlZGVmX3NldG5hbWUodGhpcywgdXBiX3NhZmVj
c3RyKG5hbWUpLCBzKTsKLX0KLWlubGluZSBjb25zdCBjaGFyKiBGaWxlRGVmOjpwYWNrYWdlKCkg
Y29uc3QgewotICByZXR1cm4gdXBiX2ZpbGVkZWZfcGFja2FnZSh0aGlzKTsKLX0KLWlubGluZSBi
b29sIEZpbGVEZWY6OnNldF9wYWNrYWdlKGNvbnN0IGNoYXIqIHBhY2thZ2UsIFN0YXR1cyogcykg
ewotICByZXR1cm4gdXBiX2ZpbGVkZWZfc2V0cGFja2FnZSh0aGlzLCBwYWNrYWdlLCBzKTsKLX0K
LWlubGluZSBpbnQgRmlsZURlZjo6ZGVmX2NvdW50KCkgY29uc3QgewotICByZXR1cm4gdXBiX2Zp
bGVkZWZfZGVmY291bnQodGhpcyk7Ci19Ci1pbmxpbmUgY29uc3QgRGVmKiBGaWxlRGVmOjpkZWYo
aW50IGluZGV4KSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmlsZWRlZl9kZWYodGhpcywgaW5kZXgp
OwotfQotaW5saW5lIERlZiogRmlsZURlZjo6ZGVmKGludCBpbmRleCkgewotICByZXR1cm4gY29u
c3RfY2FzdDxEZWYqPih1cGJfZmlsZWRlZl9kZWYodGhpcywgaW5kZXgpKTsKLX0KLWlubGluZSBp
bnQgRmlsZURlZjo6ZGVwZW5kZW5jeV9jb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9maWxl
ZGVmX2RlcGNvdW50KHRoaXMpOwotfQotaW5saW5lIGNvbnN0IEZpbGVEZWYqIEZpbGVEZWY6OmRl
cGVuZGVuY3koaW50IGluZGV4KSBjb25zdCB7Ci0gIHJldHVybiB1cGJfZmlsZWRlZl9kZXAodGhp
cywgaW5kZXgpOwotfQotaW5saW5lIGJvb2wgRmlsZURlZjo6QWRkRGVmKERlZiogZGVmLCBTdGF0
dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9maWxlZGVmX2FkZGRlZih0aGlzLCBkZWYsIE5VTEwsIHMp
OwotfQotaW5saW5lIGJvb2wgRmlsZURlZjo6QWRkTWVzc2FnZShNZXNzYWdlRGVmKiBtLCBTdGF0
dXMqIHMpIHsKLSAgcmV0dXJuIHVwYl9maWxlZGVmX2FkZG1zZyh0aGlzLCBtLCBOVUxMLCBzKTsK
LX0KLWlubGluZSBib29sIEZpbGVEZWY6OkFkZEVudW0oRW51bURlZiogZSwgU3RhdHVzKiBzKSB7
Ci0gIHJldHVybiB1cGJfZmlsZWRlZl9hZGRlbnVtKHRoaXMsIGUsIE5VTEwsIHMpOwotfQotaW5s
aW5lIGJvb2wgRmlsZURlZjo6QWRkRXh0ZW5zaW9uKEZpZWxkRGVmKiBmLCBTdGF0dXMqIHMpIHsK
LSAgcmV0dXJuIHVwYl9maWxlZGVmX2FkZGV4dCh0aGlzLCBmLCBOVUxMLCBzKTsKLX0KLWlubGlu
ZSBib29sIEZpbGVEZWY6OkFkZERlcGVuZGVuY3koY29uc3QgRmlsZURlZiogZmlsZSkgewotICBy
ZXR1cm4gdXBiX2ZpbGVkZWZfYWRkZGVwKHRoaXMsIGZpbGUpOwotfQotCi19ICAvKiBuYW1lc3Bh
Y2UgdXBiICovCi0jZW5kaWYKLQotI2VuZGlmIC8qIFVQQl9ERUZfSF8gKi8KLS8qCi0qKiBUaGlz
IGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgb2Ygc3RydWN0cyB0aGF0IHNob3VsZCBiZSBjb25z
aWRlcmVkIHByaXZhdGUKLSoqIGFuZCBOT1Qgc3RhYmxlIGFjcm9zcyB2ZXJzaW9ucyBvZiB1cGIu
Ci0qKgotKiogVGhlIG9ubHkgcmVhc29uIHRoZXkgYXJlIGRlY2xhcmVkIGhlcmUgYW5kIG5vdCBp
biAuYyBmaWxlcyBpcyB0byBhbGxvdyB1cGIKLSoqIGFuZCB0aGUgYXBwbGljYXRpb24gKGlmIGRl
c2lyZWQpIHRvIGVtYmVkIHN0YXRpY2FsbHktaW5pdGlhbGl6ZWQgaW5zdGFuY2VzCi0qKiBvZiBz
dHJ1Y3R1cmVzIGxpa2UgZGVmcy4KLSoqCi0qKiBJZiB5b3UgaW5jbHVkZSB0aGlzIGZpbGUsIGFs
bCBndWFyYW50ZWVzIG9mIEFCSSBjb21wYXRpYmlsaXR5IGdvIG91dCB0aGUKLSoqIHdpbmRvdyEg
IEFueSBjb2RlIHRoYXQgaW5jbHVkZXMgdGhpcyBmaWxlIG5lZWRzIHRvIHJlY29tcGlsZSBhZ2Fp
bnN0IHRoZQotKiogZXhhY3Qgc2FtZSB2ZXJzaW9uIG9mIHVwYiB0aGF0IHRoZXkgYXJlIGxpbmtp
bmcgYWdhaW5zdC4KLSoqCi0qKiBZb3UgYWxzbyBuZWVkIHRvIHJlY29tcGlsZSBpZiB5b3UgY2hh
bmdlIHRoZSB2YWx1ZSBvZiB0aGUgVVBCX0RFQlVHX1JFRlMKLSoqIGZsYWcuCi0qLwotCi0KLSNp
Zm5kZWYgVVBCX1NUQVRJQ0lOSVRfSF8KLSNkZWZpbmUgVVBCX1NUQVRJQ0lOSVRfSF8KLQotI2lm
ZGVmIF9fY3BsdXNwbHVzCi0vKiBCZWNhdXNlIG9mIGhvdyB3ZSBkbyBvdXIgdHlwZWRlZnMsIHRo
aXMgaGVhZGVyIGNhbid0IGJlIGluY2x1ZGVkIGZyb20gQysrLiAqLwotI2Vycm9yIFRoaXMgZmls
ZSBjYW5ub3QgYmUgaW5jbHVkZWQgZnJvbSBDKysKLSNlbmRpZgotCi0vKiB1cGJfcmVmY291bnRl
ZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwotCi0KLS8qIHVwYl9kZWYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCB1cGJfZGVmIHsK
LSAgdXBiX3JlZmNvdW50ZWQgYmFzZTsKLQotICBjb25zdCBjaGFyICpmdWxsbmFtZTsKLSAgY29u
c3QgdXBiX2ZpbGVkZWYqIGZpbGU7Ci0gIGNoYXIgdHlwZTsgIC8qIEEgdXBiX2RlZnR5cGVfdCAo
Y2hhciB0byBzYXZlIHNwYWNlKSAqLwotCi0gIC8qIFVzZWQgYXMgYSBmbGFnIGR1cmluZyB0aGUg
ZGVmJ3MgbXV0YWJsZSBzdGFnZS4gIE11c3QgYmUgZmFsc2UgdW5sZXNzCi0gICAqIGl0IGlzIGN1
cnJlbnRseSBiZWluZyB1c2VkIGJ5IGEgZnVuY3Rpb24gb24gdGhlIHN0YWNrLiAgVGhpcyBhbGxv
d3MKLSAgICogdXMgdG8gZWFzaWx5IGRldGVybWluZSB3aGljaCBkZWZzIHdlcmUgcGFzc2VkIGlu
dG8gdGhlIGZ1bmN0aW9uJ3MKLSAgICogY3VycmVudCBpbnZvY2F0aW9uLiAqLwotICBib29sIGNh
bWVfZnJvbV91c2VyOwotfTsKLQotI2RlZmluZSBVUEJfREVGX0lOSVQobmFtZSwgdHlwZSwgdnRi
bCwgcmVmcywgcmVmMnMpIFwKLSAgICB7IFVQQl9SRUZDT1VOVF9JTklUKHZ0YmwsIHJlZnMsIHJl
ZjJzKSwgbmFtZSwgTlVMTCwgdHlwZSwgZmFsc2UgfQotCi0KLS8qIHVwYl9maWVsZGRlZiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0KLXN0cnVjdCB1cGJfZmllbGRkZWYgewotICB1cGJfZGVmIGJhc2U7Ci0KLSAgdW5pb24g
ewotICAgIGludDY0X3Qgc2ludDsKLSAgICB1aW50NjRfdCB1aW50OwotICAgIGRvdWJsZSBkYmw7
Ci0gICAgZmxvYXQgZmx0OwotICAgIHZvaWQgKmJ5dGVzOwotICB9IGRlZmF1bHR2YWw7Ci0gIHVu
aW9uIHsKLSAgICBjb25zdCB1cGJfbXNnZGVmICpkZWY7ICAvKiBJZiAhbXNnX2lzX3N5bWJvbGlj
LiAqLwotICAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgIC8qIElmIG1zZ19pc19zeW1ib2xpYy4g
Ki8KLSAgfSBtc2c7Ci0gIHVuaW9uIHsKLSAgICBjb25zdCB1cGJfZGVmICpkZWY7ICAvKiBJZiAh
c3ViZGVmX2lzX3N5bWJvbGljLiAqLwotICAgIGNoYXIgKm5hbWU7ICAgICAgICAgIC8qIElmIHN1
YmRlZl9pc19zeW1ib2xpYy4gKi8KLSAgfSBzdWI7ICAvKiBUaGUgbXNnZGVmIG9yIGVudW1kZWYg
Zm9yIHRoaXMgZmllbGQsIGlmIHVwYl9oYXNzdWJkZWYoZikuICovCi0gIGJvb2wgc3ViZGVmX2lz
X3N5bWJvbGljOwotICBib29sIG1zZ19pc19zeW1ib2xpYzsKLSAgY29uc3QgdXBiX29uZW9mZGVm
ICpvbmVvZjsKLSAgYm9vbCBkZWZhdWx0X2lzX3N0cmluZzsKLSAgYm9vbCB0eXBlX2lzX3NldF87
ICAgICAvKiBGYWxzZSB1bnRpbCB0eXBlIGlzIGV4cGxpY2l0bHkgc2V0LiAqLwotICBib29sIGlz
X2V4dGVuc2lvbl87Ci0gIGJvb2wgbGF6eV87Ci0gIGJvb2wgcGFja2VkXzsKLSAgdXBiX2ludGZt
dF90IGludGZtdDsKLSAgYm9vbCB0YWdkZWxpbTsKLSAgdXBiX2ZpZWxkdHlwZV90IHR5cGVfOwot
ICB1cGJfbGFiZWxfdCBsYWJlbF87Ci0gIHVpbnQzMl90IG51bWJlcl87Ci0gIHVpbnQzMl90IHNl
bGVjdG9yX2Jhc2U7ICAvKiBVc2VkIHRvIGluZGV4IGludG8gYSB1cGI6OkhhbmRsZXJzIHRhYmxl
LiAqLwotICB1aW50MzJfdCBpbmRleF87Ci19OwotCi1leHRlcm4gY29uc3Qgc3RydWN0IHVwYl9y
ZWZjb3VudGVkX3Z0YmwgdXBiX2ZpZWxkZGVmX3Z0Ymw7Ci0KLSNkZWZpbmUgVVBCX0ZJRUxEREVG
X0lOSVQobGFiZWwsIHR5cGUsIGludGZtdCwgdGFnZGVsaW0sIGlzX2V4dGVuc2lvbiwgbGF6eSwg
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tlZCwgbmFtZSwgbnVtLCBtc2dkZWYs
IHN1YmRlZiwgc2VsZWN0b3JfYmFzZSwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleCwgZGVmYXVsdHZhbCwgcmVmcywgcmVmMnMpICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgVVBCX0RFRl9JTklUKG5hbWUsIFVQQl9ERUZfRklF
TEQsICZ1cGJfZmllbGRkZWZfdnRibCwgcmVmcywgcmVmMnMpLCAgICAgICAgXAotICAgICAgICBk
ZWZhdWx0dmFsLCB7bXNnZGVmfSwge3N1YmRlZn0sIE5VTEwsIGZhbHNlLCBmYWxzZSwgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgdHlwZSA9PSBVUEJfVFlQRV9TVFJJTkcgfHwgdHlwZSA9
PSBVUEJfVFlQRV9CWVRFUywgdHJ1ZSwgaXNfZXh0ZW5zaW9uLCBcCi0gICAgICAgIGxhenksIHBh
Y2tlZCwgaW50Zm10LCB0YWdkZWxpbSwgdHlwZSwgbGFiZWwsIG51bSwgc2VsZWN0b3JfYmFzZSwg
aW5kZXggXAotICB9Ci0KLQotLyogdXBiX21zZ2RlZiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IHVwYl9t
c2dkZWYgewotICB1cGJfZGVmIGJhc2U7Ci0KLSAgc2l6ZV90IHNlbGVjdG9yX2NvdW50OwotICB1
aW50MzJfdCBzdWJtc2dfZmllbGRfY291bnQ7Ci0KLSAgLyogVGFibGVzIGZvciBsb29raW5nIHVw
IGZpZWxkcyBieSBudW1iZXIgYW5kIG5hbWUuICovCi0gIHVwYl9pbnR0YWJsZSBpdG9mOyAgLyog
aW50IHRvIGZpZWxkICovCi0gIHVwYl9zdHJ0YWJsZSBudG9mOyAgLyogbmFtZSB0byBmaWVsZC9v
bmVvZiAqLwotCi0gIC8qIElzIHRoaXMgYSBtYXAtZW50cnkgbWVzc2FnZT8gKi8KLSAgYm9vbCBt
YXBfZW50cnk7Ci0KLSAgLyogV2hldGhlciB0aGlzIG1lc3NhZ2UgaGFzIHByb3RvMiBvciBwcm90
bzMgc2VtYW50aWNzLiAqLwotICB1cGJfc3ludGF4X3Qgc3ludGF4OwotCi0gIC8qIFRPRE8oaGFi
ZXJtYW4pOiBwcm9wZXIgZXh0ZW5zaW9uIHJhbmdlcyAodGhlcmUgY2FuIGJlIG11bHRpcGxlKS4g
Ki8KLX07Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgdXBiX3JlZmNvdW50ZWRfdnRibCB1cGJfbXNn
ZGVmX3Z0Ymw7Ci0KLS8qIFRPRE86IGFsc28gc3VwcG9ydCBzdGF0aWMgaW5pdGlhbGl6YXRpb24g
b2YgdGhlIG9uZW9mcyB0YWJsZS4gVGhpcyB3aWxsIGJlCi0gKiBuZWVkZWQgaWYgd2UgY29tcGls
ZSBpbiBkZXNjcmlwdG9ycyB0aGF0IGNvbnRhaW4gb25lb2ZzLiAqLwotI2RlZmluZSBVUEJfTVNH
REVGX0lOSVQobmFtZSwgc2VsZWN0b3JfY291bnQsIHN1Ym1zZ19maWVsZF9jb3VudCwgaXRvZiwg
bnRvZiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgbWFwX2VudHJ5LCBzeW50YXgsIHJlZnMs
IHJlZjJzKSAgICAgICAgICAgICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIFVQQl9ERUZfSU5JVChuYW1lLCBVUEJfREVGX01TRywgJnVwYl9maWVsZGRlZl92dGJsLCBy
ZWZzLCByZWYycyksICAgICAgICAgXAotICAgICAgICBzZWxlY3Rvcl9jb3VudCwgc3VibXNnX2Zp
ZWxkX2NvdW50LCBpdG9mLCBudG9mLCBtYXBfZW50cnksIHN5bnRheCAgICAgXAotICB9Ci0KLQot
LyogdXBiX2VudW1kZWYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IHVwYl9lbnVtZGVmIHsKLSAgdXBiX2Rl
ZiBiYXNlOwotCi0gIHVwYl9zdHJ0YWJsZSBudG9pOwotICB1cGJfaW50dGFibGUgaXRvbjsKLSAg
aW50MzJfdCBkZWZhdWx0dmFsOwotfTsKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCB1cGJfcmVmY291
bnRlZF92dGJsIHVwYl9lbnVtZGVmX3Z0Ymw7Ci0KLSNkZWZpbmUgVVBCX0VOVU1ERUZfSU5JVChu
YW1lLCBudG9pLCBpdG9uLCBkZWZhdWx0dmFsLCByZWZzLCByZWYycykgXAotICB7IFVQQl9ERUZf
SU5JVChuYW1lLCBVUEJfREVGX0VOVU0sICZ1cGJfZW51bWRlZl92dGJsLCByZWZzLCByZWYycyks
IG50b2ksICAgIFwKLSAgICBpdG9uLCBkZWZhdWx0dmFsIH0KLQotCi0vKiB1cGJfb25lb2ZkZWYg
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwotCi1zdHJ1Y3QgdXBiX29uZW9mZGVmIHsKLSAgdXBiX3JlZmNvdW50ZWQgYmFzZTsK
LQotICBjb25zdCBjaGFyICpuYW1lOwotICB1cGJfc3RydGFibGUgbnRvZjsKLSAgdXBiX2ludHRh
YmxlIGl0b2Y7Ci0gIGNvbnN0IHVwYl9tc2dkZWYgKnBhcmVudDsKLX07Ci0KLWV4dGVybiBjb25z
dCBzdHJ1Y3QgdXBiX3JlZmNvdW50ZWRfdnRibCB1cGJfb25lb2ZkZWZfdnRibDsKLQotI2RlZmlu
ZSBVUEJfT05FT0ZERUZfSU5JVChuYW1lLCBudG9mLCBpdG9mLCByZWZzLCByZWYycykgXAotICB7
IFVQQl9SRUZDT1VOVF9JTklUKCZ1cGJfb25lb2ZkZWZfdnRibCwgcmVmcywgcmVmMnMpLCBuYW1l
LCBudG9mLCBpdG9mIH0KLQotCi0vKiB1cGJfc3ltdGFiICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgdXBi
X3N5bXRhYiB7Ci0gIHVwYl9yZWZjb3VudGVkIGJhc2U7Ci0KLSAgdXBiX3N0cnRhYmxlIHN5bXRh
YjsKLX07Ci0KLXN0cnVjdCB1cGJfZmlsZWRlZiB7Ci0gIHVwYl9yZWZjb3VudGVkIGJhc2U7Ci0K
LSAgY29uc3QgY2hhciAqbmFtZTsKLSAgY29uc3QgY2hhciAqcGFja2FnZTsKLSAgdXBiX3N5bnRh
eF90IHN5bnRheDsKLQotICB1cGJfaW50dGFibGUgZGVmczsKLSAgdXBiX2ludHRhYmxlIGRlcHM7
Ci19OwotCi1leHRlcm4gY29uc3Qgc3RydWN0IHVwYl9yZWZjb3VudGVkX3Z0YmwgdXBiX2ZpbGVk
ZWZfdnRibDsKLQotI2VuZGlmICAvKiBVUEJfU1RBVElDSU5JVF9IXyAqLwotLyoKLSoqIHVwYjo6
SGFuZGxlcnMgKHVwYl9oYW5kbGVycykKLSoqCi0qKiBBIHVwYl9oYW5kbGVycyBpcyBsaWtlIGEg
dmlydHVhbCB0YWJsZSBmb3IgYSB1cGJfbXNnZGVmLiAgRWFjaCBmaWVsZCBvZiB0aGUKLSoqIG1l
c3NhZ2UgY2FuIGhhdmUgYXNzb2NpYXRlZCBmdW5jdGlvbnMgdGhhdCB3aWxsIGJlIGNhbGxlZCB3
aGVuIHdlIGFyZQotKiogcGFyc2luZyBvciB2aXNpdGluZyBhIHN0cmVhbSBvZiBkYXRhLiAgVGhp
cyBpcyBzaW1pbGFyIHRvIGhvdyBoYW5kbGVycyB3b3JrCi0qKiBpbiBTQVggKHRoZSBTaW1wbGUg
QVBJIGZvciBYTUwpLgotKioKLSoqIFRoZSBoYW5kbGVycyBoYXZlIG5vIGlkZWEgd2hlcmUgdGhl
IGRhdGEgaXMgY29taW5nIGZyb20sIHNvIGEgc2luZ2xlIHNldCBvZgotKiogaGFuZGxlcnMgY291
bGQgYmUgdXNlZCB3aXRoIHR3byBjb21wbGV0ZWx5IGRpZmZlcmVudCBkYXRhIHNvdXJjZXMgKGZv
cgotKiogZXhhbXBsZSwgYSBwYXJzZXIgYW5kIGEgdmlzaXRvciBvdmVyIGluLW1lbW9yeSBvYmpl
Y3RzKS4gIFRoaXMgZGVjb3VwbGluZyBpcwotKiogdGhlIG1vc3QgaW1wb3J0YW50IGZlYXR1cmUg
b2YgdXBiLCBiZWNhdXNlIGl0IGFsbG93cyBwYXJzZXJzIGFuZCBzZXJpYWxpemVycwotKiogdG8g
YmUgaGlnaGx5IHJldXNhYmxlLgotKioKLSoqIFRoaXMgaXMgYSBtaXhlZCBDL0MrKyBpbnRlcmZh
Y2UgdGhhdCBvZmZlcnMgYSBmdWxsIEFQSSB0byBib3RoIGxhbmd1YWdlcy4KLSoqIFNlZSB0aGUg
dG9wLWxldmVsIFJFQURNRSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSovCi0KLSNpZm5kZWYgVVBC
X0hBTkRMRVJTX0gKLSNkZWZpbmUgVVBCX0hBTkRMRVJTX0gKLQotCi0jaWZkZWYgX19jcGx1c3Bs
dXMKLW5hbWVzcGFjZSB1cGIgewotY2xhc3MgQnVmZmVySGFuZGxlOwotY2xhc3MgQnl0ZXNIYW5k
bGVyOwotY2xhc3MgSGFuZGxlckF0dHJpYnV0ZXM7Ci1jbGFzcyBIYW5kbGVyczsKLXRlbXBsYXRl
IDxjbGFzcyBUPiBjbGFzcyBIYW5kbGVyOwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBDYW5v
bmljYWxUeXBlOwotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotI2VuZGlmCi0KLVVQQl9ERUNMQVJF
X1RZUEUodXBiOjpCdWZmZXJIYW5kbGUsIHVwYl9idWZoYW5kbGUpCi1VUEJfREVDTEFSRV9UWVBF
KHVwYjo6Qnl0ZXNIYW5kbGVyLCB1cGJfYnl0ZXNoYW5kbGVyKQotVVBCX0RFQ0xBUkVfVFlQRSh1
cGI6OkhhbmRsZXJBdHRyaWJ1dGVzLCB1cGJfaGFuZGxlcmF0dHIpCi1VUEJfREVDTEFSRV9ERVJJ
VkVEX1RZUEUodXBiOjpIYW5kbGVycywgdXBiOjpSZWZDb3VudGVkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwYl9oYW5kbGVycywgdXBiX3JlZmNvdW50ZWQpCi0KLS8qIFRoZSBtYXhpbXVt
IGRlcHRoIHRoYXQgdGhlIGhhbmRsZXIgZ3JhcGggY2FuIGhhdmUuICBUaGlzIGlzIGEgcmVzb3Vy
Y2UgbGltaXQKLSAqIGZvciB0aGUgQyBzdGFjayBzaW5jZSB3ZSBzb21ldGltZXMgbmVlZCB0byBy
ZWN1cnNpdmVseSB0cmF2ZXJzZSB0aGUgZ3JhcGguCi0gKiBDeWNsZXMgYXJlIG9rOyB0aGUgdHJh
dmVyc2FsIHdpbGwgc3RvcCB3aGVuIGl0IGRldGVjdHMgYSBjeWNsZSwgYnV0IHdlIG11c3QKLSAq
IGhpdCB0aGUgY3ljbGUgYmVmb3JlIHRoZSBtYXhpbXVtIGRlcHRoIGlzIHJlYWNoZWQuCi0gKgot
ICogSWYgaGF2aW5nIGEgc2luZ2xlIHN0YXRpYyBsaW1pdCBpcyB0b28gaW5mbGV4aWJsZSwgd2Ug
Y2FuIGFkZCBhbm90aGVyIHZhcmlhbnQKLSAqIG9mIEhhbmRsZXJzOjpGcmVlemUgdGhhdCBhbGxv
d3Mgc3BlY2lmeWluZyB0aGlzIGFzIGEgcGFyYW1ldGVyLiAqLwotI2RlZmluZSBVUEJfTUFYX0hB
TkRMRVJfREVQVEggNjQKLQotLyogQWxsIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgaGFuZGxlcnMg
dGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC4KLSAqIE9ubHkgbmVlZGVkIGZvciB0aGUgYWR2YW5jZWQg
ZnVuY3Rpb25zIGluIHVwYjo6SGFuZGxlcnMuICovCi10eXBlZGVmIGVudW0gewotICBVUEJfSEFO
RExFUl9JTlQzMiwKLSAgVVBCX0hBTkRMRVJfSU5UNjQsCi0gIFVQQl9IQU5ETEVSX1VJTlQzMiwK
LSAgVVBCX0hBTkRMRVJfVUlOVDY0LAotICBVUEJfSEFORExFUl9GTE9BVCwKLSAgVVBCX0hBTkRM
RVJfRE9VQkxFLAotICBVUEJfSEFORExFUl9CT09MLAotICBVUEJfSEFORExFUl9TVEFSVFNUUiwK
LSAgVVBCX0hBTkRMRVJfU1RSSU5HLAotICBVUEJfSEFORExFUl9FTkRTVFIsCi0gIFVQQl9IQU5E
TEVSX1NUQVJUU1VCTVNHLAotICBVUEJfSEFORExFUl9FTkRTVUJNU0csCi0gIFVQQl9IQU5ETEVS
X1NUQVJUU0VRLAotICBVUEJfSEFORExFUl9FTkRTRVEKLX0gdXBiX2hhbmRsZXJ0eXBlX3Q7Ci0K
LSNkZWZpbmUgVVBCX0hBTkRMRVJfTUFYIChVUEJfSEFORExFUl9FTkRTRVErMSkKLQotI2RlZmlu
ZSBVUEJfQlJFQUsgTlVMTAotCi0vKiBBIGNvbnZlbmllbnQgZGVmaW5pdGlvbiBmb3Igd2hlbiBu
byBjbG9zdXJlIGlzIG5lZWRlZC4gKi8KLWV4dGVybiBjaGFyIF91cGJfbm9jbG9zdXJlOwotI2Rl
ZmluZSBVUEJfTk9fQ0xPU1VSRSAmX3VwYl9ub2Nsb3N1cmUKLQotLyogQSBzZWxlY3RvciByZWZl
cnMgdG8gYSBzcGVjaWZpYyBmaWVsZCBoYW5kbGVyIGluIHRoZSBIYW5kbGVycyBvYmplY3QKLSAq
IChmb3IgZXhhbXBsZTogdGhlIFNUQVJUU1VCTVNHIGhhbmRsZXIgZm9yIGZpZWxkICJmaWVsZDE1
IikuICovCi10eXBlZGVmIGludDMyX3QgdXBiX3NlbGVjdG9yX3Q7Ci0KLVVQQl9CRUdJTl9FWFRF
Uk5fQwotCi0vKiBGb3J3YXJkLWRlY2xhcmVzIGZvciBDIGlubGluZSBhY2Nlc3NvcnMuICBXZSBu
ZWVkIHRvIGRlY2xhcmUgdGhlc2UgaGVyZQotICogc28gd2UgY2FuICJmcmllbmQiIHRoZW0gaW4g
dGhlIGNsYXNzIGRlY2xhcmF0aW9ucyBpbiBDKysuICovCi1VUEJfSU5MSU5FIHVwYl9mdW5jICp1
cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcihjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc2VsZWN0b3JfdCBzKTsKLVVQ
Ql9JTkxJTkUgY29uc3Qgdm9pZCAqdXBiX2hhbmRsZXJhdHRyX2hhbmRsZXJkYXRhKGNvbnN0IHVw
Yl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1VUEJfSU5MSU5FIGNvbnN0IHZvaWQgKnVwYl9oYW5kbGVy
c19nZXRoYW5kbGVyZGF0YShjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc2VsZWN0b3JfdCBzKTsKLQot
VVBCX0lOTElORSB2b2lkIHVwYl9idWZoYW5kbGVfaW5pdCh1cGJfYnVmaGFuZGxlICpoKTsKLVVQ
Ql9JTkxJTkUgdm9pZCB1cGJfYnVmaGFuZGxlX3NldG9iaih1cGJfYnVmaGFuZGxlICpoLCBjb25z
dCB2b2lkICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqdHlwZSk7Ci1VUEJfSU5MSU5FIHZvaWQgdXBiX2J1ZmhhbmRsZV9zZXRidWYodXBiX2J1
ZmhhbmRsZSAqaCwgY29uc3QgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBvZnMpOwotVVBCX0lOTElORSBjb25zdCB2b2lkICp1cGJfYnVmaGFu
ZGxlX29iaihjb25zdCB1cGJfYnVmaGFuZGxlICpoKTsKLVVQQl9JTkxJTkUgY29uc3Qgdm9pZCAq
dXBiX2J1ZmhhbmRsZV9vYmp0eXBlKGNvbnN0IHVwYl9idWZoYW5kbGUgKmgpOwotVVBCX0lOTElO
RSBjb25zdCBjaGFyICp1cGJfYnVmaGFuZGxlX2J1Zihjb25zdCB1cGJfYnVmaGFuZGxlICpoKTsK
LQotVVBCX0VORF9FWFRFUk5fQwotCi0KLS8qIFN0YXRpYyBzZWxlY3RvcnMgZm9yIHVwYjo6SGFu
ZGxlcnMuICovCi0jZGVmaW5lIFVQQl9TVEFSVE1TR19TRUxFQ1RPUiAwCi0jZGVmaW5lIFVQQl9F
TkRNU0dfU0VMRUNUT1IgMQotI2RlZmluZSBVUEJfU1RBVElDX1NFTEVDVE9SX0NPVU5UIDIKLQot
LyogU3RhdGljIHNlbGVjdG9ycyBmb3IgdXBiOjpCeXRlc0hhbmRsZXIuICovCi0jZGVmaW5lIFVQ
Ql9TVEFSVFNUUl9TRUxFQ1RPUiAwCi0jZGVmaW5lIFVQQl9TVFJJTkdfU0VMRUNUT1IgMQotI2Rl
ZmluZSBVUEJfRU5EU1RSX1NFTEVDVE9SIDIKLQotdHlwZWRlZiB2b2lkIHVwYl9oYW5kbGVyZnJl
ZSh2b2lkICpkKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIEEgc2V0IG9mIGF0dHJpYnV0
ZXMgdGhhdCBhY2NvbXBhbmllcyBhIGhhbmRsZXIncyBmdW5jdGlvbiBwb2ludGVyLiAqLwotY2xh
c3MgdXBiOjpIYW5kbGVyQXR0cmlidXRlcyB7Ci0gcHVibGljOgotICBIYW5kbGVyQXR0cmlidXRl
cygpOwotICB+SGFuZGxlckF0dHJpYnV0ZXMoKTsKLQotICAvKiBTZXRzIHRoZSBoYW5kbGVyIGRh
dGEgdGhhdCB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiB0aGUKLSAg
ICogaGFuZGxlci4gIFRvIGZyZWUgdGhpcyBwb2ludGVyIHdoZW4gdGhlIGhhbmRsZXJzIGFyZSBm
cmVlZCwgY2FsbAotICAgKiBIYW5kbGVyczo6QWRkQ2xlYW51cCgpLiAqLwotICBib29sIFNldEhh
bmRsZXJEYXRhKGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YSk7Ci0gIGNvbnN0IHZvaWQqIGhhbmRs
ZXJfZGF0YSgpIGNvbnN0OwotCi0gIC8qIFVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2Yg
dGhlIGNsb3N1cmUuICBUaGlzIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0Ci0gICAqIGFsbCBvdGhl
ciBjbG9zdXJlIHR5cGVzIGZvciBoYW5kbGVyIHRoYXQgdXNlIHRoZSBzYW1lIGNsb3N1cmUuCi0g
ICAqIFJlZ2lzdHJhdGlvbiB3aWxsIGZhaWwgaWYgdGhpcyBkb2VzIG5vdCBtYXRjaCBhbGwgb3Ro
ZXIgbm9uLU5VTEwgY2xvc3VyZQotICAgKiB0eXBlcy4gKi8KLSAgYm9vbCBTZXRDbG9zdXJlVHlw
ZShjb25zdCB2b2lkICpjbG9zdXJlX3R5cGUpOwotICBjb25zdCB2b2lkKiBjbG9zdXJlX3R5cGUo
KSBjb25zdDsKLQotICAvKiBVc2UgdGhpcyB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHRoZSByZXR1
cm5lZCBjbG9zdXJlLiAgT25seSB1c2VkIGZvcgotICAgKiBTdGFydCp7U3RyaW5nLFN1Yk1lc3Nh
Z2UsU2VxdWVuY2V9IGhhbmRsZXJzLiAgVGhpcyBtdXN0IG1hdGNoIHRoZSBjbG9zdXJlCi0gICAq
IHR5cGUgb2YgYW55IGhhbmRsZXJzIHRoYXQgdXNlIGl0IChmb3IgZXhhbXBsZSwgdGhlIFN0cmlu
Z0J1ZiBoYW5kbGVyIG11c3QKLSAgICogbWF0Y2ggdGhlIGNsb3N1cmUgcmV0dXJuZWQgZnJvbSBT
dGFydFN0cmluZykuICovCi0gIGJvb2wgU2V0UmV0dXJuQ2xvc3VyZVR5cGUoY29uc3Qgdm9pZCAq
cmV0dXJuX2Nsb3N1cmVfdHlwZSk7Ci0gIGNvbnN0IHZvaWQqIHJldHVybl9jbG9zdXJlX3R5cGUo
KSBjb25zdDsKLQotICAvKiBTZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaGFuZGxlciBhbHdheXMg
cmV0dXJucyAib2siIChlaXRoZXIgInRydWUiIG9yIGEKLSAgICogbm9uLU5VTEwgY2xvc3VyZSku
ICBUaGlzIGlzIGEgaGludCB0aGF0IGNhbiBhbGxvdyBjb2RlIGdlbmVyYXRvcnMgdG8KLSAgICog
Z2VuZXJhdGUgbW9yZSBlZmZpY2llbnQgY29kZS4gKi8KLSAgYm9vbCBTZXRBbHdheXNPayhib29s
IGFsd2F5c19vayk7Ci0gIGJvb2wgYWx3YXlzX29rKCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBm
cmllbmQgVVBCX0lOTElORSBjb25zdCB2b2lkICogOjp1cGJfaGFuZGxlcmF0dHJfaGFuZGxlcmRh
dGEoCi0gICAgICBjb25zdCB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpOwotI2Vsc2UKLXN0cnVjdCB1
cGJfaGFuZGxlcmF0dHIgewotI2VuZGlmCi0gIGNvbnN0IHZvaWQgKmhhbmRsZXJfZGF0YV87Ci0g
IGNvbnN0IHZvaWQgKmNsb3N1cmVfdHlwZV87Ci0gIGNvbnN0IHZvaWQgKnJldHVybl9jbG9zdXJl
X3R5cGVfOwotICBib29sIGFsd2F5c29rXzsKLX07Ci0KLSNkZWZpbmUgVVBCX0hBTkRMRVJBVFRS
X0lOSVRJQUxJWkVSIHtOVUxMLCBOVUxMLCBOVUxMLCBmYWxzZX0KLQotdHlwZWRlZiBzdHJ1Y3Qg
ewotICB1cGJfZnVuYyAqZnVuYzsKLQotICAvKiBJdCBpcyB3YXN0ZWZ1bCB0byBpbmNsdWRlIHRo
ZSBlbnRpcmUgYXR0cmlidXRlcyBoZXJlOgotICAgKgotICAgKiAqIFNvbWUgb2YgdGhlIGluZm9y
bWF0aW9uIGlzIHJlZHVuZGFudCAobGlrZSBzdG9yaW5nIHRoZSBjbG9zdXJlIHR5cGUKLSAgICog
ICBzZXBhcmF0ZWx5IGZvciBlYWNoIGhhbmRsZXIgdGhhdCBtdXN0IG1hdGNoKS4KLSAgICogKiBT
b21lIG9mIHRoZSBpbmZvIGlzIG9ubHkgbmVlZGVkIHByaW9yIHRvIGZyZWV6ZSgpIChsaWtlIGNs
b3N1cmUgdHlwZXMpLgotICAgKiAqIGFsaWdubWVudCBwYWRkaW5nIHdhc3RlcyBhIGxvdCBvZiBz
cGFjZSBmb3IgYWx3YXlzb2tfLgotICAgKgotICAgKiBJZi93aGVuIHRoZSBzaXplIGFuZCBsb2Nh
bGl0eSBvZiBoYW5kbGVycyBpcyBhbiBpc3N1ZSwgd2UgY2FuIG9wdGltaXplIHRoaXMKLSAgICog
bm90IHRvIHN0b3JlIHRoZSBlbnRpcmUgYXR0ciBsaWtlIHRoaXMuICBXZSBkbyBub3QgZXhwb3Nl
IHRoZSB0YWJsZSdzCi0gICAqIGxheW91dCB0byBhbGxvdyB0aGlzIG9wdGltaXphdGlvbiBpbiB0
aGUgZnV0dXJlLiAqLwotICB1cGJfaGFuZGxlcmF0dHIgYXR0cjsKLX0gdXBiX2hhbmRsZXJzX3Rh
YmVudDsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIEV4dHJhIGluZm9ybWF0aW9uIGFib3V0
IGEgYnVmZmVyIHRoYXQgaXMgcGFzc2VkIHRvIGEgU3RyaW5nQnVmIGhhbmRsZXIuCi0gKiBUT0RP
KGhhYmVybWFuKTogYWxsb3cgdGhlIGhhbmRsZSB0byBiZSBwaW5uZWQgc28gdGhhdCBpdCB3aWxs
IG91dGxpdmUKLSAqIHRoZSBoYW5kbGVyIGludm9jYXRpb24uICovCi1jbGFzcyB1cGI6OkJ1ZmZl
ckhhbmRsZSB7Ci0gcHVibGljOgotICBCdWZmZXJIYW5kbGUoKTsKLSAgfkJ1ZmZlckhhbmRsZSgp
OwotCi0gIC8qIFRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgbWF5IGJlIGRpZmZl
cmVudCB0aGFuIHRoZSBwb2ludGVyCi0gICAqIHBhc3NlZCB0byBhIFN0cmluZ0J1ZiBoYW5kbGVy
IGJlY2F1c2UgdGhlIGhhbmRsZXIgbWF5IHJlY2VpdmUgZGF0YQotICAgKiB0aGF0IGlzIGZyb20g
dGhlIG1pZGRsZSBvciBlbmQgb2YgYSBsYXJnZXIgYnVmZmVyLiAqLwotICBjb25zdCBjaGFyKiBi
dWZmZXIoKSBjb25zdDsKLQotICAvKiBUaGUgb2Zmc2V0IHdpdGhpbiB0aGUgYXR0YWNoZWQgb2Jq
ZWN0IHdoZXJlIHRoaXMgYnVmZmVyIGJlZ2lucy4gIE9ubHkKLSAgICogbWVhbmluZ2Z1bCBpZiB0
aGVyZSBpcyBhbiBhdHRhY2hlZCBvYmplY3QuICovCi0gIHNpemVfdCBvYmplY3Rfb2Zmc2V0KCkg
Y29uc3Q7Ci0KLSAgLyogTm90ZSB0aGF0IG9iamVjdF9vZmZzZXQgaXMgdGhlIG9mZnNldCBvZiAi
YnVmIiB3aXRoaW4gdGhlIGF0dGFjaGVkCi0gICAqIG9iamVjdC4gKi8KLSAgdm9pZCBTZXRCdWZm
ZXIoY29uc3QgY2hhciogYnVmLCBzaXplX3Qgb2JqZWN0X29mZnNldCk7Ci0KLSAgLyogVGhlIEJ1
ZmZlckhhbmRsZSBjYW4gaGF2ZSBhbiAiYXR0YWNoZWQgb2JqZWN0Iiwgd2hpY2ggY2FuIGJlIHVz
ZWQgdG8KLSAgICogdHVubmVsIHRocm91Z2ggYSBwb2ludGVyIHRvIHRoZSBidWZmZXIncyB1bmRl
cmx5aW5nIHJlcHJlc2VudGF0aW9uLiAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgdm9pZCBT
ZXRBdHRhY2hlZE9iamVjdChjb25zdCBUKiBvYmopOwotCi0gIC8qIFJldHVybnMgTlVMTCBpZiB0
aGUgYXR0YWNoZWQgb2JqZWN0IGlzIG5vdCBvZiB0aGlzIHR5cGUuICovCi0gIHRlbXBsYXRlIDxj
bGFzcyBUPgotICBjb25zdCBUKiBHZXRBdHRhY2hlZE9iamVjdCgpIGNvbnN0OwotCi0gcHJpdmF0
ZToKLSAgZnJpZW5kIFVQQl9JTkxJTkUgdm9pZCA6OnVwYl9idWZoYW5kbGVfaW5pdCh1cGJfYnVm
aGFuZGxlICpoKTsKLSAgZnJpZW5kIFVQQl9JTkxJTkUgdm9pZCA6OnVwYl9idWZoYW5kbGVfc2V0
b2JqKHVwYl9idWZoYW5kbGUgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp0eXBlKTsKLSAgZnJpZW5kIFVQQl9J
TkxJTkUgdm9pZCA6OnVwYl9idWZoYW5kbGVfc2V0YnVmKHVwYl9idWZoYW5kbGUgKmgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpi
dWYsIHNpemVfdCBvZnMpOwotICBmcmllbmQgVVBCX0lOTElORSBjb25zdCB2b2lkKiA6OnVwYl9i
dWZoYW5kbGVfb2JqKGNvbnN0IHVwYl9idWZoYW5kbGUgKmgpOwotICBmcmllbmQgVVBCX0lOTElO
RSBjb25zdCB2b2lkKiA6OnVwYl9idWZoYW5kbGVfb2JqdHlwZSgKLSAgICAgIGNvbnN0IHVwYl9i
dWZoYW5kbGUgKmgpOwotICBmcmllbmQgVVBCX0lOTElORSBjb25zdCBjaGFyKiA6OnVwYl9idWZo
YW5kbGVfYnVmKGNvbnN0IHVwYl9idWZoYW5kbGUgKmgpOwotI2Vsc2UKLXN0cnVjdCB1cGJfYnVm
aGFuZGxlIHsKLSNlbmRpZgotICBjb25zdCBjaGFyICpidWZfOwotICBjb25zdCB2b2lkICpvYmpf
OwotICBjb25zdCB2b2lkICpvYmp0eXBlXzsKLSAgc2l6ZV90IG9iam9mc187Ci19OwotCi0jaWZk
ZWYgX19jcGx1c3BsdXMKLQotLyogQSB1cGI6OkhhbmRsZXJzIG9iamVjdCByZXByZXNlbnRzIHRo
ZSBzZXQgb2YgaGFuZGxlcnMgYXNzb2NpYXRlZCB3aXRoIGEKLSAqIG1lc3NhZ2UgaW4gdGhlIGdy
YXBoIG9mIG1lc3NhZ2VzLiAgWW91IGNhbiB0aGluayBvZiBpdCBhcyBhIGJpZyB2aXJ0dWFsCi0g
KiB0YWJsZSB3aXRoIGZ1bmN0aW9ucyBjb3JyZXNwb25kaW5nIHRvIGFsbCB0aGUgZXZlbnRzIHRo
YXQgY2FuIGZpcmUgd2hpbGUKLSAqIHBhcnNpbmcgb3IgdmlzaXRpbmcgYSBtZXNzYWdlIG9mIGEg
c3BlY2lmaWMgdHlwZS4KLSAqCi0gKiBBbnkgaGFuZGxlcnMgdGhhdCBhcmUgbm90IHNldCBiZWhh
dmUgYXMgaWYgdGhleSBoYWQgc3VjY2Vzc2Z1bGx5IGNvbnN1bWVkCi0gKiB0aGUgdmFsdWUuICBB
bnkgdW5zZXQgU3RhcnQqIGhhbmRsZXJzIHdpbGwgcHJvcGFnYXRlIHRoZWlyIGNsb3N1cmUgdG8g
dGhlCi0gKiBpbm5lciBmcmFtZS4KLSAqCi0gKiBUaGUgZWFzaWVzdCB3YXkgdG8gY3JlYXRlIHRo
ZSAqSGFuZGxlciBvYmplY3RzIG5lZWRlZCBieSB0aGUgU2V0KiBtZXRob2RzIGlzCi0gKiB3aXRo
IHRoZSBVcGJCaW5kKCkgYW5kIFVwYk1ha2VIYW5kbGVyKCkgbWFjcm9zOyBzZWUgYmVsb3cuICov
Ci1jbGFzcyB1cGI6OkhhbmRsZXJzIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgdXBiX3NlbGVjdG9y
X3QgU2VsZWN0b3I7Ci0gIHR5cGVkZWYgdXBiX2hhbmRsZXJ0eXBlX3QgVHlwZTsKLQotICB0eXBl
ZGVmIEhhbmRsZXI8dm9pZCAqKCopKHZvaWQgKiwgY29uc3Qgdm9pZCAqKT4gU3RhcnRGaWVsZEhh
bmRsZXI7Ci0gIHR5cGVkZWYgSGFuZGxlcjxib29sICgqKSh2b2lkICosIGNvbnN0IHZvaWQgKik+
IEVuZEZpZWxkSGFuZGxlcjsKLSAgdHlwZWRlZiBIYW5kbGVyPGJvb2wgKCopKHZvaWQgKiwgY29u
c3Qgdm9pZCAqKT4gU3RhcnRNZXNzYWdlSGFuZGxlcjsKLSAgdHlwZWRlZiBIYW5kbGVyPGJvb2wg
KCopKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBTdGF0dXMqKT4gRW5kTWVzc2FnZUhhbmRsZXI7Ci0g
IHR5cGVkZWYgSGFuZGxlcjx2b2lkICooKikodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk+
IFN0YXJ0U3RyaW5nSGFuZGxlcjsKLSAgdHlwZWRlZiBIYW5kbGVyPHNpemVfdCAoKikodm9pZCAq
LCBjb25zdCB2b2lkICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBCdWZmZXJIYW5kbGUgKik+IFN0cmluZ0hhbmRsZXI7Ci0KLSAgdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBWYWx1ZUhhbmRsZXIgewotICAgIHR5cGVkZWYgSGFuZGxl
cjxib29sKCopKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBUKT4gSDsKLSAgfTsKLQotICB0eXBlZGVm
IFZhbHVlSGFuZGxlcjxpbnQzMl90Pjo6SCAgICAgSW50MzJIYW5kbGVyOwotICB0eXBlZGVmIFZh
bHVlSGFuZGxlcjxpbnQ2NF90Pjo6SCAgICAgSW50NjRIYW5kbGVyOwotICB0eXBlZGVmIFZhbHVl
SGFuZGxlcjx1aW50MzJfdD46OkggICAgVUludDMySGFuZGxlcjsKLSAgdHlwZWRlZiBWYWx1ZUhh
bmRsZXI8dWludDY0X3Q+OjpIICAgIFVJbnQ2NEhhbmRsZXI7Ci0gIHR5cGVkZWYgVmFsdWVIYW5k
bGVyPGZsb2F0Pjo6SCAgICAgICBGbG9hdEhhbmRsZXI7Ci0gIHR5cGVkZWYgVmFsdWVIYW5kbGVy
PGRvdWJsZT46OkggICAgICBEb3VibGVIYW5kbGVyOwotICB0eXBlZGVmIFZhbHVlSGFuZGxlcjxi
b29sPjo6SCAgICAgICAgQm9vbEhhbmRsZXI7Ci0KLSAgLyogQW55IGZ1bmN0aW9uIHBvaW50ZXIg
Y2FuIGJlIGNvbnZlcnRlZCB0byB0aGlzIGFuZCBjb252ZXJ0ZWQgYmFjayB0byBpdHMKLSAgICog
Y29ycmVjdCB0eXBlLiAqLwotICB0eXBlZGVmIHZvaWQgR2VuZXJpY0Z1bmN0aW9uKCk7Ci0KLSAg
dHlwZWRlZiB2b2lkIEhhbmRsZXJzQ2FsbGJhY2soY29uc3Qgdm9pZCAqY2xvc3VyZSwgdXBiX2hh
bmRsZXJzICpoKTsKLQotICAvKiBSZXR1cm5zIGEgbmV3IGhhbmRsZXJzIG9iamVjdCBmb3IgdGhl
IGdpdmVuIGZyb3plbiBtc2dkZWYuCi0gICAqIFJldHVybnMgTlVMTCBpZiBtZW1vcnkgYWxsb2Nh
dGlvbiBmYWlsZWQuICovCi0gIHN0YXRpYyByZWZmZWRfcHRyPEhhbmRsZXJzPiBOZXcoY29uc3Qg
TWVzc2FnZURlZiAqbSk7Ci0KLSAgLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlZ2lzdGVy
aW5nIGEgZ3JhcGggb2YgaGFuZGxlcnMgdGhhdCBtaXJyb3JzIHRoZQotICAgKiBncmFwaCBvZiBt
c2dkZWZzIGZvciBzb21lIG1lc3NhZ2UuICBGb3IgIm0iIGFuZCBhbGwgaXRzIGNoaWxkcmVuIGEg
bmV3IHNldAotICAgKiBvZiBoYW5kbGVycyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZSBnaXZlbiBj
YWxsYmFjayB3aWxsIGJlIGludm9rZWQsCi0gICAqIGFsbG93aW5nIHRoZSBjbGllbnQgdG8gcmVn
aXN0ZXIgaGFuZGxlcnMgZm9yIHRoaXMgbWVzc2FnZS4gIE5vdGUgdGhhdCBhbnkKLSAgICogc3Vi
aGFuZGxlcnMgc2V0IGJ5IHRoZSBjYWxsYmFjayB3aWxsIGJlIG92ZXJ3cml0dGVuLiAqLwotICBz
dGF0aWMgcmVmZmVkX3B0cjxjb25zdCBIYW5kbGVycz4gTmV3RnJvemVuKGNvbnN0IE1lc3NhZ2VE
ZWYgKm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFu
ZGxlcnNDYWxsYmFjayAqY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqY2xvc3VyZSk7Ci0KLSAgLyogRnVuY3Rpb25hbGl0
eSBmcm9tIHVwYjo6UmVmQ291bnRlZC4gKi8KLSAgVVBCX1JFRkNPVU5URURfQ1BQTUVUSE9EUwot
Ci0gIC8qIEFsbCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgcmV0dXJuIGJvb2wgdG8g
aW5kaWNhdGUgc3VjY2VzcyBvcgotICAgKiBmYWlsdXJlOyBkZXRhaWxzIGFib3V0IGZhaWx1cmVz
IGFyZSBzdG9yZWQgaW4gdGhpcyBzdGF0dXMgb2JqZWN0LiAgSWYgYQotICAgKiBmYWlsdXJlIGRv
ZXMgb2NjdXIsIGl0IG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIEhhbmRsZXJzIGFyZSBmcm96
ZW4sCi0gICAqIG90aGVyd2lzZSB0aGUgZnJlZXplKCkgb3BlcmF0aW9uIHdpbGwgZmFpbC4gIFRo
ZSBmdW5jdGlvbnMgbWF5ICpvbmx5KiBiZQotICAgKiB1c2VkIHdoaWxlIHRoZSBIYW5kbGVycyBh
cmUgbXV0YWJsZS4gKi8KLSAgY29uc3QgU3RhdHVzKiBzdGF0dXMoKTsKLSAgdm9pZCBDbGVhckVy
cm9yKCk7Ci0KLSAgLyogQ2FsbCB0byBmcmVlemUgdGhlc2UgSGFuZGxlcnMuICBSZXF1aXJlcyB0
aGF0IGFueSBTdWJIYW5kbGVycyBhcmUgYWxyZWFkeQotICAgKiBmcm96ZW4uICBGb3IgY3ljbGVz
LCB5b3UgbXVzdCB1c2UgdGhlIHN0YXRpYyB2ZXJzaW9uIGJlbG93IGFuZCBmcmVlemUgdGhlCi0g
ICAqIHdob2xlIGdyYXBoIGF0IG9uY2UuICovCi0gIGJvb2wgRnJlZXplKFN0YXR1cyogcyk7Ci0K
LSAgLyogRnJlZXplcyB0aGUgZ2l2ZW4gc2V0IG9mIGhhbmRsZXJzLiAgWW91IG1heSBub3QgZnJl
ZXplIGEgaGFuZGxlciB3aXRob3V0Ci0gICAqIGFsc28gZnJlZXppbmcgYW55IGhhbmRsZXJzIHRo
ZXkgcG9pbnQgdG8uICovCi0gIHN0YXRpYyBib29sIEZyZWV6ZShIYW5kbGVycypjb25zdCogaGFu
ZGxlcnMsIGludCBuLCBTdGF0dXMqIHMpOwotICBzdGF0aWMgYm9vbCBGcmVlemUoY29uc3Qgc3Rk
Ojp2ZWN0b3I8SGFuZGxlcnMqPiYgaGFuZGxlcnMsIFN0YXR1cyogcyk7Ci0KLSAgLyogUmV0dXJu
cyB0aGUgbXNnZGVmIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGhhbmRsZXJzIG9iamVjdC4gKi8KLSAg
Y29uc3QgTWVzc2FnZURlZiogbWVzc2FnZV9kZWYoKSBjb25zdDsKLQotICAvKiBBZGRzIHRoZSBn
aXZlbiBwb2ludGVyIGFuZCBmdW5jdGlvbiB0byB0aGUgbGlzdCBvZiBjbGVhbnVwIGZ1bmN0aW9u
cyB0aGF0Ci0gICAqIHdpbGwgYmUgcnVuIHdoZW4gdGhlc2UgaGFuZGxlcnMgYXJlIGZyZWVkLiAg
SWYgdGhpcyBwb2ludGVyIGhhcyBwcmV2aW91c2x5Ci0gICAqIGJlZW4gcmVnaXN0ZXJlZCwgdGhl
IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgYW5kIGRvZXMgbm90aGluZy4gKi8KLSAgYm9vbCBBZGRD
bGVhbnVwKHZvaWQgKnB0ciwgdXBiX2hhbmRsZXJmcmVlICpjbGVhbnVwKTsKLQotICAvKiBTZXRz
IHRoZSBzdGFydG1zZyBoYW5kbGVyIGZvciB0aGUgbWVzc2FnZSwgd2hpY2ggaXMgZGVmaW5lZCBh
cyBmb2xsb3dzOgotICAgKgotICAgKiAgIGJvb2wgc3RhcnRtc2coTXlUeXBlKiBjbG9zdXJlKSB7
Ci0gICAqICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgbWVzc2FnZSBiZWdpbnMuICBSZXR1cm5zIHRy
dWUgaWYgcHJvY2Vzc2luZyBzaG91bGQKLSAgICogICAgIC8vIGNvbnRpbnVlLgotICAgKiAgICAg
cmV0dXJuIHRydWU7Ci0gICAqICAgfQotICAgKi8KLSAgYm9vbCBTZXRTdGFydE1lc3NhZ2VIYW5k
bGVyKGNvbnN0IFN0YXJ0TWVzc2FnZUhhbmRsZXImIGhhbmRsZXIpOwotCi0gIC8qIFNldHMgdGhl
IGVuZG1zZyBoYW5kbGVyIGZvciB0aGUgbWVzc2FnZSwgd2hpY2ggaXMgZGVmaW5lZCBhcyBmb2xs
b3dzOgotICAgKgotICAgKiAgIGJvb2wgZW5kbXNnKE15VHlwZSogY2xvc3VyZSwgdXBiX3N0YXR1
cyAqc3RhdHVzKSB7Ci0gICAqICAgICAvLyBDYWxsZWQgd2hlbiBwcm9jZXNzaW5nIG9mIHRoaXMg
bWVzc2FnZSBlbmRzLCB3aGV0aGVyIGluIHN1Y2Nlc3Mgb3IKLSAgICogICAgIC8vIGZhaWx1cmUu
ICAic3RhdHVzIiBpbmRpY2F0ZXMgdGhlIGZpbmFsIHN0YXR1cyBvZiBwcm9jZXNzaW5nLCBhbmQK
LSAgICogICAgIC8vIGNhbiBhbHNvIGJlIG1vZGlmaWVkIGluLXBsYWNlIHRvIHVwZGF0ZSB0aGUg
ZmluYWwgc3RhdHVzLgotICAgKiAgIH0KLSAgICovCi0gIGJvb2wgU2V0RW5kTWVzc2FnZUhhbmRs
ZXIoY29uc3QgRW5kTWVzc2FnZUhhbmRsZXImIGhhbmRsZXIpOwotCi0gIC8qIFNldHMgdGhlIHZh
bHVlIGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBmaWVsZCwgd2hpY2ggaXMgZGVmaW5lZCBhcyBmb2xs
b3dzCi0gICAqICh0aGlzIGlzIGZvciBhbiBpbnQzMiBmaWVsZDsgb3RoZXIgZmllbGQgdHlwZXMg
d2lsbCBwYXNzIHRoZWlyIG5hdGl2ZQotICAgKiBDL0MrKyB0eXBlIGZvciAidmFsIik6Ci0gICAq
Ci0gICAqICAgYm9vbCBPblZhbHVlKE15Q2xvc3VyZSogYywgY29uc3QgTXlIYW5kbGVyRGF0YSog
ZCwgaW50MzJfdCB2YWwpIHsKLSAgICogICAgIC8vIENhbGxlZCB3aGVuIHRoZSBmaWVsZCdzIHZh
bHVlIGlzIGVuY291bnRlcmVkLiAgImQiIGNvbnRhaW5zCi0gICAqICAgICAvLyB3aGF0ZXZlciBk
YXRhIHdhcyBib3VuZCB0byB0aGlzIGZpZWxkIHdoZW4gaXQgd2FzIHJlZ2lzdGVyZWQuCi0gICAq
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcHJvY2Vzc2luZyBzaG91bGQgY29udGludWUuCi0gICAq
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICogICB9Ci0gICAqCi0gICAqICAgaGFuZGVycy0+U2V0SW50
MzJIYW5kbGVyKGYsIFVwYkJpbmQoT25WYWx1ZSwgbmV3IE15SGFuZGxlckRhdGEoLi4uKSkpOwot
ICAgKgotICAgKiBUaGUgdmFsdWUgdHlwZSBtdXN0IGV4YWN0bHkgbWF0Y2ggZi0+dHlwZSgpLgot
ICAgKiBGb3IgZXhhbXBsZSwgYSBoYW5kbGVyIHRoYXQgdGFrZXMgYW4gaW50MzJfdCBwYXJhbWV0
ZXIgbWF5IG9ubHkgYmUgdXNlZCBmb3IKLSAgICogZmllbGRzIG9mIHR5cGUgVVBCX1RZUEVfSU5U
MzIgYW5kIFVQQl9UWVBFX0VOVU0uCi0gICAqCi0gICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIGhh
bmRsZXIgZmFpbGVkIHRvIHJlZ2lzdGVyOyBpbiB0aGlzIGNhc2UgdGhlIGNsZWFudXAKLSAgICog
aGFuZGxlciAoaWYgYW55KSB3aWxsIGJlIGNhbGxlZCBpbW1lZGlhdGVseS4KLSAgICovCi0gIGJv
b2wgU2V0SW50MzJIYW5kbGVyIChjb25zdCBGaWVsZERlZiogZiwgIGNvbnN0IEludDMySGFuZGxl
ciYgaCk7Ci0gIGJvb2wgU2V0SW50NjRIYW5kbGVyIChjb25zdCBGaWVsZERlZiogZiwgIGNvbnN0
IEludDY0SGFuZGxlciYgaCk7Ci0gIGJvb2wgU2V0VUludDMySGFuZGxlcihjb25zdCBGaWVsZERl
ZiogZiwgY29uc3QgVUludDMySGFuZGxlciYgaCk7Ci0gIGJvb2wgU2V0VUludDY0SGFuZGxlcihj
b25zdCBGaWVsZERlZiogZiwgY29uc3QgVUludDY0SGFuZGxlciYgaCk7Ci0gIGJvb2wgU2V0Rmxv
YXRIYW5kbGVyIChjb25zdCBGaWVsZERlZiogZiwgIGNvbnN0IEZsb2F0SGFuZGxlciYgaCk7Ci0g
IGJvb2wgU2V0RG91YmxlSGFuZGxlcihjb25zdCBGaWVsZERlZiogZiwgY29uc3QgRG91YmxlSGFu
ZGxlciYgaCk7Ci0gIGJvb2wgU2V0Qm9vbEhhbmRsZXIgIChjb25zdCBGaWVsZERlZiogZiwgICBj
b25zdCBCb29sSGFuZGxlciYgaCk7Ci0KLSAgLyogTGlrZSB0aGUgcHJldmlvdXMsIGJ1dCB0ZW1w
bGF0ZWQgb24gdGhlIHR5cGUgb24gdGhlIHZhbHVlIChpZS4gaW50MzIpLgotICAgKiBUaGlzIGlz
IG1vc3RseSB1c2VmdWwgdG8gY2FsbCBmcm9tIG90aGVyIHRlbXBsYXRlcy4gIFRvIGNhbGwgdGhp
cyB5b3UgbXVzdAotICAgKiBzcGVjaWZ5IHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZXhwbGljaXRs
eSwgaWU6Ci0gICAqICAgaC0+U2V0VmFsdWVIYW5kbGVyPFQ+KGYsIFVwYkJpbmQoTXlIYW5kbGVy
PFQ+LCBNeURhdGEpKTsgKi8KLSAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gIGJvb2wgU2V0VmFsdWVI
YW5kbGVyKAotICAgICAgY29uc3QgRmllbGREZWYgKmYsCi0gICAgICBjb25zdCB0eXBlbmFtZSBW
YWx1ZUhhbmRsZXI8dHlwZW5hbWUgQ2Fub25pY2FsVHlwZTxUPjo6VHlwZT46OkgmIGhhbmRsZXIp
OwotCi0gIC8qIFNldHMgaGFuZGxlcnMgZm9yIGEgc3RyaW5nIGZpZWxkLCB3aGljaCBhcmUgZGVm
aW5lZCBhcyBmb2xsb3dzOgotICAgKgotICAgKiAgIE15U3ViQ2xvc3VyZSogc3RhcnRzdHIoTXlD
bG9zdXJlKiBjLCBjb25zdCBNeUhhbmRsZXJEYXRhKiBkLAotICAgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHNpemVfaGludCkgewotICAgKiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBz
dHJpbmcgdmFsdWUgYmVnaW5zLiAgVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlCi0gICAq
ICAgICAvLyBjbG9zdXJlIGZvciB0aGUgc3RyaW5nLiAgInNpemVfaGludCIgaW5kaWNhdGVzIHRo
ZSBzaXplIG9mIHRoZQotICAgKiAgICAgLy8gc3RyaW5nIGlmIGl0IGlzIGtub3duLCBob3dldmVy
IGlmIHRoZSBzdHJpbmcgaXMgbGVuZ3RoLWRlbGltaXRlZAotICAgKiAgICAgLy8gYW5kIHRoZSBl
bmQtb2Ytc3RyaW5nIGlzIG5vdCBhdmFpbGFibGUgc2l6ZV9oaW50IHdpbGwgYmUgemVyby4KLSAg
ICogICAgIC8vIFRoaXMgY2FzZSBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBjYXNlIHdo
ZXJlIHRoZSBzaXplIGlzCi0gICAqICAgICAvLyBrbm93biB0byBiZSB6ZXJvLgotICAgKiAgICAg
Ly8KLSAgICogICAgIC8vIFRPRE8oaGFiZXJtYW4pOiBpcyBpdCBpbXBvcnRhbnQgdG8gZGlzdGlu
Z3Vpc2ggdGhlc2UgY2FzZXM/Ci0gICAqICAgICAvLyBJZiB3ZSBoYWQgc3NpemVfdCBhcyBhIHR5
cGUgd2UgY291bGQgbWFrZSAtMSAidW5rbm93biIsIGJ1dAotICAgKiAgICAgLy8gc3NpemVfdCBp
cyBQT1NJWCAobm90IEFOU0kpIGFuZCB0aGVyZWZvcmUgbGVzcyBwb3J0YWJsZS4KLSAgICogICAg
IC8vIEluIHByYWN0aWNlIEkgc3VzcGVjdCBpdCB3b24ndCBiZSBpbXBvcnRhbnQgdG8gZGlzdGlu
Z3Vpc2guCi0gICAqICAgICByZXR1cm4gY2xvc3VyZTsKLSAgICogICB9Ci0gICAqCi0gICAqICAg
c2l6ZV90IHN0cihNeUNsb3N1cmUqIGNsb3N1cmUsIGNvbnN0IE15SGFuZGxlckRhdGEqIGQsCi0g
ICAqICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pIHsKLSAgICogICAg
IC8vIENhbGxlZCBmb3IgZWFjaCBidWZmZXIgb2Ygc3RyaW5nIGRhdGE7IHRoZSBtdWx0aXBsZSBw
aHlzaWNhbCBidWZmZXJzCi0gICAqICAgICAvLyBhcmUgYWxsIHBhcnQgb2YgdGhlIHNhbWUgbG9n
aWNhbCBzdHJpbmcuICBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcwotICAgKiAgICAgLy8gaG93
IG1hbnkgYnl0ZXMgd2VyZSBjb25zdW1lZC4gIElmIHRoaXMgbnVtYmVyIGlzIGxlc3MgdGhhbiAi
bGVuIiwKLSAgICogICAgIC8vIHRoaXMgd2lsbCBhbHNvIGluZGljYXRlIHRoYXQgcHJvY2Vzc2lu
ZyBzaG91bGQgYmUgaGFsdGVkIGZvciBub3csCi0gICAqICAgICAvLyBsaWtlIHJldHVybmluZyBm
YWxzZSBvciBVUEJfQlJFQUsgZnJvbSBhbnkgb3RoZXIgY2FsbGJhY2suICBJZgotICAgKiAgICAg
Ly8gbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiAibGVuIiwgdGhlIGV4Y2VzcyBieXRlcyB3aWxsIGJl
IHNraXBwZWQgb3ZlcgotICAgKiAgICAgLy8gYW5kIG5vdCBwYXNzZWQgdG8gdGhlIGNhbGxiYWNr
LgotICAgKiAgICAgcmV0dXJuIGxlbjsKLSAgICogICB9Ci0gICAqCi0gICAqICAgYm9vbCBlbmRz
dHIoTXlDbG9zdXJlKiBjLCBjb25zdCBNeUhhbmRsZXJEYXRhKiBkKSB7Ci0gICAqICAgICAvLyBD
YWxsZWQgd2hlbiBhIHN0cmluZyB2YWx1ZSBlbmRzLiAgUmV0dXJuIHZhbHVlIGluZGljYXRlcyB3
aGV0aGVyCi0gICAqICAgICAvLyBwcm9jZXNzaW5nIHNob3VsZCBjb250aW51ZS4KLSAgICogICAg
IHJldHVybiB0cnVlOwotICAgKiAgIH0KLSAgICovCi0gIGJvb2wgU2V0U3RhcnRTdHJpbmdIYW5k
bGVyKGNvbnN0IEZpZWxkRGVmKiBmLCBjb25zdCBTdGFydFN0cmluZ0hhbmRsZXImIGgpOwotICBi
b29sIFNldFN0cmluZ0hhbmRsZXIoY29uc3QgRmllbGREZWYqIGYsIGNvbnN0IFN0cmluZ0hhbmRs
ZXImIGgpOwotICBib29sIFNldEVuZFN0cmluZ0hhbmRsZXIoY29uc3QgRmllbGREZWYqIGYsIGNv
bnN0IEVuZEZpZWxkSGFuZGxlciYgaCk7Ci0KLSAgLyogU2V0cyB0aGUgc3RhcnRzZXEgaGFuZGxl
ciwgd2hpY2ggaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotICAgKgotICAgKiAgIE15U3ViQ2xvc3Vy
ZSAqc3RhcnRzZXEoTXlDbG9zdXJlKiBjLCBjb25zdCBNeUhhbmRsZXJEYXRhKiBkKSB7Ci0gICAq
ICAgICAvLyBDYWxsZWQgd2hlbiBhIHNlcXVlbmNlIChyZXBlYXRlZCBmaWVsZCkgYmVnaW5zLiAg
VGhlIHJldHVybmVkCi0gICAqICAgICAvLyBwb2ludGVyIGluZGljYXRlcyB0aGUgY2xvc3VyZSBm
b3IgdGhlIHNlcXVlbmNlIChvciBVUEJfQlJFQUsKLSAgICogICAgIC8vIHRvIGludGVycnVwdCBw
cm9jZXNzaW5nKS4KLSAgICogICAgIHJldHVybiBjbG9zdXJlOwotICAgKiAgIH0KLSAgICoKLSAg
ICogICBoLT5TZXRTdGFydFNlcXVlbmNlSGFuZGxlcihmLCBVcGJCaW5kKHN0YXJ0c2VxLCBuZXcg
TXlIYW5kbGVyRGF0YSguLi4pKSk7Ci0gICAqCi0gICAqIFJldHVybnMgImZhbHNlIiBpZiAiZiIg
ZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgbWVzc2FnZSBvciBpcyBub3QgYQotICAgKiByZXBlYXRl
ZCBmaWVsZC4KLSAgICovCi0gIGJvb2wgU2V0U3RhcnRTZXF1ZW5jZUhhbmRsZXIoY29uc3QgRmll
bGREZWYqIGYsIGNvbnN0IFN0YXJ0RmllbGRIYW5kbGVyJiBoKTsKLQotICAvKiBTZXRzIHRoZSBz
dGFydHN1Ym1zZyBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gZmllbGQsIHdoaWNoIGlzIGRlZmluZWQg
YXMKLSAgICogZm9sbG93czoKLSAgICoKLSAgICogICBNeVN1YkNsb3N1cmUqIHN0YXJ0c3VibXNn
KE15Q2xvc3VyZSogYywgY29uc3QgTXlIYW5kbGVyRGF0YSogZCkgewotICAgKiAgICAgLy8gQ2Fs
bGVkIHdoZW4gYSBzdWJtZXNzYWdlIGJlZ2lucy4gIFRoZSByZXR1cm5lZCBwb2ludGVyIGluZGlj
YXRlcyB0aGUKLSAgICogICAgIC8vIGNsb3N1cmUgZm9yIHRoZSBzZXF1ZW5jZSAob3IgVVBCX0JS
RUFLIHRvIGludGVycnVwdCBwcm9jZXNzaW5nKS4KLSAgICogICAgIHJldHVybiBjbG9zdXJlOwot
ICAgKiAgIH0KLSAgICoKLSAgICogICBoLT5TZXRTdGFydFN1Yk1lc3NhZ2VIYW5kbGVyKGYsIFVw
YkJpbmQoc3RhcnRzdWJtc2csCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ldyBNeUhhbmRsZXJEYXRhKC4uLikpKTsKLSAgICoKLSAgICogUmV0dXJucyAi
ZmFsc2UiIGlmICJmIiBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBtZXNzYWdlIG9yIGlzIG5vdCBh
Ci0gICAqIHN1Ym1lc3NhZ2UvZ3JvdXAgZmllbGQuCi0gICAqLwotICBib29sIFNldFN0YXJ0U3Vi
TWVzc2FnZUhhbmRsZXIoY29uc3QgRmllbGREZWYqIGYsIGNvbnN0IFN0YXJ0RmllbGRIYW5kbGVy
JiBoKTsKLQotICAvKiBTZXRzIHRoZSBlbmRzdWJtc2cgaGFuZGxlciBmb3IgdGhlIGdpdmVuIGZp
ZWxkLCB3aGljaCBpcyBkZWZpbmVkIGFzCi0gICAqIGZvbGxvd3M6Ci0gICAqCi0gICAqICAgYm9v
bCBlbmRzdWJtc2coTXlDbG9zdXJlKiBjLCBjb25zdCBNeUhhbmRsZXJEYXRhKiBkKSB7Ci0gICAq
ICAgICAvLyBDYWxsZWQgd2hlbiBhIHN1Ym1lc3NhZ2UgZW5kcy4gIFJldHVybnMgdHJ1ZSB0byBj
b250aW51ZSBwcm9jZXNzaW5nLgotICAgKiAgICAgcmV0dXJuIHRydWU7Ci0gICAqICAgfQotICAg
KgotICAgKiBSZXR1cm5zICJmYWxzZSIgaWYgImYiIGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIG1l
c3NhZ2Ugb3IgaXMgbm90IGEKLSAgICogc3VibWVzc2FnZS9ncm91cCBmaWVsZC4KLSAgICovCi0g
IGJvb2wgU2V0RW5kU3ViTWVzc2FnZUhhbmRsZXIoY29uc3QgRmllbGREZWYgKmYsIGNvbnN0IEVu
ZEZpZWxkSGFuZGxlciAmaCk7Ci0KLSAgLyogU3RhcnRzIHRoZSBlbmRzdWJzZXEgaGFuZGxlciBm
b3IgdGhlIGdpdmVuIGZpZWxkLCB3aGljaCBpcyBkZWZpbmVkIGFzCi0gICAqIGZvbGxvd3M6Ci0g
ICAqCi0gICAqICAgYm9vbCBlbmRzZXEoTXlDbG9zdXJlKiBjLCBjb25zdCBNeUhhbmRsZXJEYXRh
KiBkKSB7Ci0gICAqICAgICAvLyBDYWxsZWQgd2hlbiBhIHNlcXVlbmNlIGVuZHMuICBSZXR1cm5z
IHRydWUgY29udGludWUgcHJvY2Vzc2luZy4KLSAgICogICAgIHJldHVybiB0cnVlOwotICAgKiAg
IH0KLSAgICoKLSAgICogUmV0dXJucyAiZmFsc2UiIGlmICJmIiBkb2VzIG5vdCBiZWxvbmcgdG8g
dGhpcyBtZXNzYWdlIG9yIGlzIG5vdCBhCi0gICAqIHJlcGVhdGVkIGZpZWxkLgotICAgKi8KLSAg
Ym9vbCBTZXRFbmRTZXF1ZW5jZUhhbmRsZXIoY29uc3QgRmllbGREZWYqIGYsIGNvbnN0IEVuZEZp
ZWxkSGFuZGxlciYgaCk7Ci0KLSAgLyogU2V0cyBvciBnZXRzIHRoZSBvYmplY3QgdGhhdCBzcGVj
aWZpZXMgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiBmaWVsZCwgd2hpY2gKLSAgICogbXVzdCBiZSBh
IHN1Ym1lc3NhZ2Ugb3IgZ3JvdXAuICBSZXR1cm5zIE5VTEwgaWYgbm8gaGFuZGxlcnMgYXJlIHNl
dC4gKi8KLSAgYm9vbCBTZXRTdWJIYW5kbGVycyhjb25zdCBGaWVsZERlZiogZiwgY29uc3QgSGFu
ZGxlcnMqIHN1Yik7Ci0gIGNvbnN0IEhhbmRsZXJzKiBHZXRTdWJIYW5kbGVycyhjb25zdCBGaWVs
ZERlZiogZikgY29uc3Q7Ci0KLSAgLyogRXF1aXZhbGVudCB0byBHZXRTdWJIYW5kbGVycywgYnV0
IHRha2VzIHRoZSBTVEFSVFNVQk1TRyBzZWxlY3RvciBmb3IgdGhlCi0gICAqIGZpZWxkLiAqLwot
ICBjb25zdCBIYW5kbGVycyogR2V0U3ViSGFuZGxlcnMoU2VsZWN0b3Igc3RhcnRzdWJtc2cpIGNv
bnN0OwotCi0gIC8qIEEgc2VsZWN0b3IgcmVmZXJzIHRvIGEgc3BlY2lmaWMgZmllbGQgaGFuZGxl
ciBpbiB0aGUgSGFuZGxlcnMgb2JqZWN0Ci0gICAqIChmb3IgZXhhbXBsZTogdGhlIFNUQVJUU1VC
TVNHIGhhbmRsZXIgZm9yIGZpZWxkICJmaWVsZDE1IikuCi0gICAqIE9uIHN1Y2Nlc3MsIHJldHVy
bnMgdHJ1ZSBhbmQgc3RvcmVzIHRoZSBzZWxlY3RvciBpbiAicyIuCi0gICAqIElmIHRoZSBGaWVs
ZERlZiBvciBUeXBlIGFyZSBpbnZhbGlkLCByZXR1cm5zIGZhbHNlLgotICAgKiBUaGUgcmV0dXJu
ZWQgc2VsZWN0b3IgaXMgT05MWSB2YWxpZCBmb3IgSGFuZGxlcnMgd2hvc2UgTWVzc2FnZURlZgot
ICAgKiBjb250YWlucyB0aGlzIEZpZWxkRGVmLiAqLwotICBzdGF0aWMgYm9vbCBHZXRTZWxlY3Rv
cihjb25zdCBGaWVsZERlZiogZiwgVHlwZSB0eXBlLCBTZWxlY3Rvciogcyk7Ci0KLSAgLyogR2l2
ZW4gYSBTVEFSVCBzZWxlY3RvciBvZiBhbnkga2luZCwgcmV0dXJucyB0aGUgY29ycmVzcG9uZGlu
ZyBFTkQgc2VsZWN0b3IuICovCi0gIHN0YXRpYyBTZWxlY3RvciBHZXRFbmRTZWxlY3RvcihTZWxl
Y3RvciBzdGFydF9zZWxlY3Rvcik7Ci0KLSAgLyogUmV0dXJucyB0aGUgZnVuY3Rpb24gcG9pbnRl
ciBmb3IgdGhpcyBoYW5kbGVyLiAgSXQgaXMgdGhlIGNsaWVudCdzCi0gICAqIHJlc3BvbnNpYmls
aXR5IHRvIGNhc3QgdG8gdGhlIGNvcnJlY3QgZnVuY3Rpb24gdHlwZSBiZWZvcmUgY2FsbGluZyBp
dC4gKi8KLSAgR2VuZXJpY0Z1bmN0aW9uKiBHZXRIYW5kbGVyKFNlbGVjdG9yIHNlbGVjdG9yKTsK
LQotICAvKiBTZXRzIHRoZSBnaXZlbiBhdHRyaWJ1dGVzIHRvIHRoZSBhdHRyaWJ1dGVzIGZvciB0
aGlzIHNlbGVjdG9yLiAqLwotICBib29sIEdldEF0dHJpYnV0ZXMoU2VsZWN0b3Igc2VsZWN0b3Is
IEhhbmRsZXJBdHRyaWJ1dGVzKiBhdHRyKTsKLQotICAvKiBSZXR1cm5zIHRoZSBoYW5kbGVyIGRh
dGEgdGhhdCB3YXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgaGFuZGxlci4gKi8KLSAgY29uc3Qgdm9p
ZCogR2V0SGFuZGxlckRhdGEoU2VsZWN0b3Igc2VsZWN0b3IpOwotCi0gIC8qIENvdWxkIGFkZCBh
bnkgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXMtbmVlZGVkLCB3aXRoIHNvbWUgbWlub3IK
LSAgICogaW1wbGVtZW50YXRpb24gY2hhbmdlczoKLSAgICoKLSAgICogY29uc3QgRmllbGREZWYq
IEdldEZpZWxkRGVmKFNlbGVjdG9yIHNlbGVjdG9yKTsKLSAgICogc3RhdGljIGJvb2wgSXNTZXF1
ZW5jZShTZWxlY3RvciBzZWxlY3Rvcik7ICovCi0KLSBwcml2YXRlOgotICBVUEJfRElTQUxMT1df
UE9EX09QUyhIYW5kbGVycywgdXBiOjpIYW5kbGVycykKLQotICBmcmllbmQgVVBCX0lOTElORSBH
ZW5lcmljRnVuY3Rpb24gKjo6dXBiX2hhbmRsZXJzX2dldGhhbmRsZXIoCi0gICAgICBjb25zdCB1
cGJfaGFuZGxlcnMgKmgsIHVwYl9zZWxlY3Rvcl90IHMpOwotICBmcmllbmQgVVBCX0lOTElORSBj
b25zdCB2b2lkICo6OnVwYl9oYW5kbGVyc19nZXRoYW5kbGVyZGF0YSgKLSAgICAgIGNvbnN0IHVw
Yl9oYW5kbGVycyAqaCwgdXBiX3NlbGVjdG9yX3Qgcyk7Ci0jZWxzZQotc3RydWN0IHVwYl9oYW5k
bGVycyB7Ci0jZW5kaWYKLSAgdXBiX3JlZmNvdW50ZWQgYmFzZTsKLQotICBjb25zdCB1cGJfbXNn
ZGVmICptc2c7Ci0gIGNvbnN0IHVwYl9oYW5kbGVycyAqKnN1YjsKLSAgY29uc3Qgdm9pZCAqdG9w
X2Nsb3N1cmVfdHlwZTsKLSAgdXBiX2ludHRhYmxlIGNsZWFudXBfOwotICB1cGJfc3RhdHVzIHN0
YXR1c187ICAvKiBVc2VkIG9ubHkgd2hlbiBtdXRhYmxlLiAqLwotICB1cGJfaGFuZGxlcnNfdGFi
ZW50IHRhYmxlWzFdOyAgLyogRHluYW1pY2FsbHktc2l6ZWQgZmllbGQgaGFuZGxlciBhcnJheS4g
Ki8KLX07Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1uYW1lc3BhY2UgdXBiIHsKLQotLyogQ29u
dmVuaWVuY2UgbWFjcm9zIGZvciBjcmVhdGluZyBhIEhhbmRsZXIgb2JqZWN0IHRoYXQgaXMgd3Jh
cHBlZCB3aXRoIGEKLSAqIHR5cGUtc2FmZSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgY29udmVydHMg
dGhlICJ2b2lkKiIgcGFyYW1ldGVycy9yZXR1cm5zCi0gKiBvZiB0aGUgdW5kZXJseWluZyBDIEFQ
SSBpbnRvIG5pY2UgQysrIGZ1bmN0aW9uLgotICoKLSAqIFNhbXBsZSB1c2FnZToKLSAqICAgdm9p
ZCBPblZhbHVlMShNeUNsb3N1cmUqIGMsIGNvbnN0IE15SGFuZGxlckRhdGEqIGQsIGludDMyX3Qg
dmFsKSB7Ci0gKiAgICAgLy8gZG8gc3R1ZmYgLi4uCi0gKiAgIH0KLSAqCi0gKiAgIC8vIEhhbmRs
ZXIgdGhhdCBkb2Vzbid0IG5lZWQgYW55IGRhdGEgYm91bmQgdG8gaXQuCi0gKiAgIHZvaWQgT25W
YWx1ZTIoTXlDbG9zdXJlKiBjLCBpbnQzMl90IHZhbCkgewotICogICAgIC8vIGRvIHN0dWZmIC4u
LgotICogICB9Ci0gKgotICogICAvLyBIYW5kbGVyIHRoYXQgcmV0dXJucyBib29sIHNvIGl0IGNh
biByZXR1cm4gZmFpbHVyZSBpZiBuZWNlc3NhcnkuCi0gKiAgIGJvb2wgT25WYWx1ZTMoTXlDbG9z
dXJlKiBjLCBpbnQzMl90IHZhbCkgewotICogICAgIC8vIGRvIHN0dWZmIC4uLgotICogICAgIHJl
dHVybiBvazsKLSAqICAgfQotICoKLSAqICAgLy8gTWVtYmVyIGZ1bmN0aW9uIGhhbmRsZXIuCi0g
KiAgIGNsYXNzIE15Q2xvc3VyZSB7Ci0gKiAgICBwdWJsaWM6Ci0gKiAgICAgdm9pZCBPblZhbHVl
KGludDMyX3QgdmFsKSB7Ci0gKiAgICAgICAvLyBkbyBzdHVmZiAuLi4KLSAqICAgICB9Ci0gKiAg
IH07Ci0gKgotICogICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIE15SGFuZGxlckRhdGEuCi0g
KiAgIGhhbmRsZXJzLT5TZXRJbnQzMkhhbmRsZXIoZjEsIFVwYkJpbmQoT25WYWx1ZTEsIG5ldyBN
eUhhbmRsZXJEYXRhKC4uLikpKTsKLSAqICAgaGFuZGxlcnMtPlNldEludDMySGFuZGxlcihmMiwg
VXBiTWFrZUhhbmRsZXIoT25WYWx1ZTIpKTsKLSAqICAgaGFuZGxlcnMtPlNldEludDMySGFuZGxl
cihmMSwgVXBiTWFrZUhhbmRsZXIoT25WYWx1ZTMpKTsKLSAqICAgaGFuZGxlcnMtPlNldEludDMy
SGFuZGxlcihmMiwgVXBiTWFrZUhhbmRsZXIoJk15Q2xvc3VyZTo6T25WYWx1ZSkpOwotICovCi0K
LSNpZmRlZiBVUEJfQ1hYMTEKLQotLyogSW4gQysrMTEsIHRoZSAidGVtcGxhdGUiIGRpc2FtYmln
dWF0b3IgY2FuIGFwcGVhciBldmVuIG91dHNpZGUgdGVtcGxhdGVzLAotICogc28gYWxsIGNhbGxz
IGNhbiBzYWZlbHkgdXNlIHRoaXMgcGFpciBvZiBtYWNyb3MuICovCi0KLSNkZWZpbmUgVXBiTWFr
ZUhhbmRsZXIoZikgdXBiOjpNYXRjaEZ1bmMoZikudGVtcGxhdGUgR2V0RnVuYzxmPigpCi0KLS8q
IFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCB0byBvbmx5IGV2YWx1YXRlICJkIiBvbmNlLiAqLwotI2Rl
ZmluZSBVcGJCaW5kKGYsIGQpIHVwYjo6TWF0Y2hGdW5jKGYpLnRlbXBsYXRlIEdldEZ1bmM8Zj4o
KGQpKQotCi0jZWxzZQotCi0vKiBQcmlvciB0byBDKysxMSwgdGhlICJ0ZW1wbGF0ZSIgZGlzYW1i
aWd1YXRvciBtYXkgb25seSBhcHBlYXIgaW5zaWRlIGEKLSAqIHRlbXBsYXRlLCBzbyB0aGUgcmVn
dWxhciBtYWNybyBtdXN0IG5vdCB1c2UgInRlbXBsYXRlIiAqLwotCi0jZGVmaW5lIFVwYk1ha2VI
YW5kbGVyKGYpIHVwYjo6TWF0Y2hGdW5jKGYpLkdldEZ1bmM8Zj4oKQotCi0jZGVmaW5lIFVwYkJp
bmQoZiwgZCkgdXBiOjpNYXRjaEZ1bmMoZikuR2V0RnVuYzxmPigoZCkpCi0KLSNlbmRpZiAgLyog
VVBCX0NYWDExICovCi0KLS8qIFRoaXMgbWFjcm8gbXVzdCBiZSB1c2VkIGluIEMrKzk4IGZvciBj
YWxscyBmcm9tIGluc2lkZSBhIHRlbXBsYXRlLiAgQnV0IHdlCi0gKiBkZWZpbmUgdGhpcyB2YXJp
YW50IGluIGFsbCBjYXNlczsgY29kZSB0aGF0IHdhbnRzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBi
b3RoCi0gKiBDKys5OCBhbmQgQysrMTEgc2hvdWxkIGFsd2F5cyB1c2UgdGhpcyBtYWNybyB3aGVu
IGNhbGxpbmcgZnJvbSBhIHRlbXBsYXRlLiAqLwotI2RlZmluZSBVcGJNYWtlSGFuZGxlclQoZikg
dXBiOjpNYXRjaEZ1bmMoZikudGVtcGxhdGUgR2V0RnVuYzxmPigpCi0KLS8qIFdlIGhhdmUgdG8g
YmUgY2FyZWZ1bCB0byBvbmx5IGV2YWx1YXRlICJkIiBvbmNlLiAqLwotI2RlZmluZSBVcGJCaW5k
VChmLCBkKSB1cGI6Ok1hdGNoRnVuYyhmKS50ZW1wbGF0ZSBHZXRGdW5jPGY+KChkKSkKLQotLyog
SGFuZGxlcjogYSBzdHJ1Y3QgdGhhdCBjb250YWlucyB0aGUgKGhhbmRsZXIsIGRhdGEsIGRlbGV0
ZXIpIHR1cGxlIHRoYXQgaXMKLSAqIHVzZWQgdG8gcmVnaXN0ZXIgYWxsIGhhbmRsZXJzLiAgVXNl
cnMgY2FuIE1ha2UoKSB0aGVzZSBkaXJlY3RseSBidXQgaXQncwotICogbW9yZSBjb252ZW5pZW50
IHRvIHVzZSB0aGUgVXBiTWFrZUhhbmRsZXIvVXBiQmluZCBtYWNyb3MgYWJvdmUuICovCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY2xhc3MgSGFuZGxlciB7Ci0gcHVibGljOgotICAvKiBUaGUgdW5kZXJs
eWluZywgaGFuZGxlciBmdW5jdGlvbiBzaWduYXR1cmUgdGhhdCB1cGIgdXNlcyBpbnRlcm5hbGx5
LiAqLwotICB0eXBlZGVmIFQgRnVuY1B0cjsKLQotICAvKiBJbnRlbnRpb25hbGx5IGltcGxpY2l0
LiAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgRj4gSGFuZGxlcihGIGZ1bmMpOwotICB+SGFuZGxlcigp
OwotCi0gcHJpdmF0ZToKLSAgdm9pZCBBZGRDbGVhbnVwKEhhbmRsZXJzKiBoKSBjb25zdCB7Ci0g
ICAgaWYgKGNsZWFudXBfZnVuY18pIHsKLSAgICAgIGJvb2wgb2sgPSBoLT5BZGRDbGVhbnVwKGNs
ZWFudXBfZGF0YV8sIGNsZWFudXBfZnVuY18pOwotICAgICAgVVBCX0FTU0VSVF9WQVIob2ssIG9r
KTsKLSAgICB9Ci0gIH0KLQotICBVUEJfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEhhbmRsZXIp
Ci0gIGZyaWVuZCBjbGFzcyBIYW5kbGVyczsKLSAgRnVuY1B0ciBoYW5kbGVyXzsKLSAgbXV0YWJs
ZSBIYW5kbGVyQXR0cmlidXRlcyBhdHRyXzsKLSAgbXV0YWJsZSBib29sIHJlZ2lzdGVyZWRfOwot
ICB2b2lkICpjbGVhbnVwX2RhdGFfOwotICB1cGJfaGFuZGxlcmZyZWUgKmNsZWFudXBfZnVuY187
Ci19OwotCi19ICAvKiBuYW1lc3BhY2UgdXBiICovCi0KLSNlbmRpZiAgLyogX19jcGx1c3BsdXMg
Ki8KLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLS8qIE5hdGl2ZSBDIEFQSS4gKi8KLQotLyogSGFu
ZGxlciBmdW5jdGlvbiB0eXBlZGVmcy4gKi8KLXR5cGVkZWYgYm9vbCB1cGJfc3RhcnRtc2dfaGFu
ZGxlcmZ1bmModm9pZCAqYywgY29uc3Qgdm9pZCopOwotdHlwZWRlZiBib29sIHVwYl9lbmRtc2df
aGFuZGxlcmZ1bmModm9pZCAqYywgY29uc3Qgdm9pZCAqLCB1cGJfc3RhdHVzICpzdGF0dXMpOwot
dHlwZWRlZiB2b2lkKiB1cGJfc3RhcnRmaWVsZF9oYW5kbGVyZnVuYyh2b2lkICpjLCBjb25zdCB2
b2lkICpoZCk7Ci10eXBlZGVmIGJvb2wgdXBiX2VuZGZpZWxkX2hhbmRsZXJmdW5jKHZvaWQgKmMs
IGNvbnN0IHZvaWQgKmhkKTsKLXR5cGVkZWYgYm9vbCB1cGJfaW50MzJfaGFuZGxlcmZ1bmModm9p
ZCAqYywgY29uc3Qgdm9pZCAqaGQsIGludDMyX3QgdmFsKTsKLXR5cGVkZWYgYm9vbCB1cGJfaW50
NjRfaGFuZGxlcmZ1bmModm9pZCAqYywgY29uc3Qgdm9pZCAqaGQsIGludDY0X3QgdmFsKTsKLXR5
cGVkZWYgYm9vbCB1cGJfdWludDMyX2hhbmRsZXJmdW5jKHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhk
LCB1aW50MzJfdCB2YWwpOwotdHlwZWRlZiBib29sIHVwYl91aW50NjRfaGFuZGxlcmZ1bmModm9p
ZCAqYywgY29uc3Qgdm9pZCAqaGQsIHVpbnQ2NF90IHZhbCk7Ci10eXBlZGVmIGJvb2wgdXBiX2Zs
b2F0X2hhbmRsZXJmdW5jKHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhkLCBmbG9hdCB2YWwpOwotdHlw
ZWRlZiBib29sIHVwYl9kb3VibGVfaGFuZGxlcmZ1bmModm9pZCAqYywgY29uc3Qgdm9pZCAqaGQs
IGRvdWJsZSB2YWwpOwotdHlwZWRlZiBib29sIHVwYl9ib29sX2hhbmRsZXJmdW5jKHZvaWQgKmMs
IGNvbnN0IHZvaWQgKmhkLCBib29sIHZhbCk7Ci10eXBlZGVmIHZvaWQgKnVwYl9zdGFydHN0cl9o
YW5kbGVyZnVuYyh2b2lkICpjLCBjb25zdCB2b2lkICpoZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplX2hpbnQpOwotdHlwZWRlZiBzaXplX3QgdXBi
X3N0cmluZ19oYW5kbGVyZnVuYyh2b2lkICpjLCBjb25zdCB2b2lkICpoZCwgY29uc3QgY2hhciAq
YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiwgY29u
c3QgdXBiX2J1ZmhhbmRsZSogaGFuZGxlKTsKLQotLyogdXBiX2J1ZmhhbmRsZSAqLwotc2l6ZV90
IHVwYl9idWZoYW5kbGVfb2Jqb2ZzKGNvbnN0IHVwYl9idWZoYW5kbGUgKmgpOwotCi0vKiB1cGJf
aGFuZGxlcmF0dHIgKi8KLXZvaWQgdXBiX2hhbmRsZXJhdHRyX2luaXQodXBiX2hhbmRsZXJhdHRy
ICphdHRyKTsKLXZvaWQgdXBiX2hhbmRsZXJhdHRyX3VuaW5pdCh1cGJfaGFuZGxlcmF0dHIgKmF0
dHIpOwotCi1ib29sIHVwYl9oYW5kbGVyYXR0cl9zZXRoYW5kbGVyZGF0YSh1cGJfaGFuZGxlcmF0
dHIgKmF0dHIsIGNvbnN0IHZvaWQgKmhkKTsKLWJvb2wgdXBiX2hhbmRsZXJhdHRyX3NldGNsb3N1
cmV0eXBlKHVwYl9oYW5kbGVyYXR0ciAqYXR0ciwgY29uc3Qgdm9pZCAqdHlwZSk7Ci1jb25zdCB2
b2lkICp1cGJfaGFuZGxlcmF0dHJfY2xvc3VyZXR5cGUoY29uc3QgdXBiX2hhbmRsZXJhdHRyICph
dHRyKTsKLWJvb2wgdXBiX2hhbmRsZXJhdHRyX3NldHJldHVybmNsb3N1cmV0eXBlKHVwYl9oYW5k
bGVyYXR0ciAqYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZvaWQgKnR5cGUpOwotY29uc3Qgdm9pZCAqdXBiX2hhbmRsZXJhdHRyX3JldHVybmNs
b3N1cmV0eXBlKGNvbnN0IHVwYl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVy
YXR0cl9zZXRhbHdheXNvayh1cGJfaGFuZGxlcmF0dHIgKmF0dHIsIGJvb2wgYWx3YXlzb2spOwot
Ym9vbCB1cGJfaGFuZGxlcmF0dHJfYWx3YXlzb2soY29uc3QgdXBiX2hhbmRsZXJhdHRyICphdHRy
KTsKLQotVVBCX0lOTElORSBjb25zdCB2b2lkICp1cGJfaGFuZGxlcmF0dHJfaGFuZGxlcmRhdGEo
Ci0gICAgY29uc3QgdXBiX2hhbmRsZXJhdHRyICphdHRyKSB7Ci0gIHJldHVybiBhdHRyLT5oYW5k
bGVyX2RhdGFfOwotfQotCi0vKiB1cGJfaGFuZGxlcnMgKi8KLXR5cGVkZWYgdm9pZCB1cGJfaGFu
ZGxlcnNfY2FsbGJhY2soY29uc3Qgdm9pZCAqY2xvc3VyZSwgdXBiX2hhbmRsZXJzICpoKTsKLXVw
Yl9oYW5kbGVycyAqdXBiX2hhbmRsZXJzX25ldyhjb25zdCB1cGJfbXNnZGVmICptLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm93bmVyKTsKLWNvbnN0IHVwYl9o
YW5kbGVycyAqdXBiX2hhbmRsZXJzX25ld2Zyb3plbihjb25zdCB1cGJfbXNnZGVmICptLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm93bmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVy
c19jYWxsYmFjayAqY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqY2xvc3VyZSk7Ci0KLS8qIEluY2x1ZGUgcmVmY291bnRlZCBt
ZXRob2RzIGxpa2UgdXBiX2hhbmRsZXJzX3JlZigpLiAqLwotVVBCX1JFRkNPVU5URURfQ01FVEhP
RFModXBiX2hhbmRsZXJzLCB1cGJfaGFuZGxlcnNfdXBjYXN0KQotCi1jb25zdCB1cGJfc3RhdHVz
ICp1cGJfaGFuZGxlcnNfc3RhdHVzKHVwYl9oYW5kbGVycyAqaCk7Ci12b2lkIHVwYl9oYW5kbGVy
c19jbGVhcmVycih1cGJfaGFuZGxlcnMgKmgpOwotY29uc3QgdXBiX21zZ2RlZiAqdXBiX2hhbmRs
ZXJzX21zZ2RlZihjb25zdCB1cGJfaGFuZGxlcnMgKmgpOwotYm9vbCB1cGJfaGFuZGxlcnNfYWRk
Y2xlYW51cCh1cGJfaGFuZGxlcnMgKmgsIHZvaWQgKnAsIHVwYl9oYW5kbGVyZnJlZSAqaGZyZWUp
OwotCi1ib29sIHVwYl9oYW5kbGVyc19zZXRzdGFydG1zZyh1cGJfaGFuZGxlcnMgKmgsIHVwYl9z
dGFydG1zZ19oYW5kbGVyZnVuYyAqZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVwYl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVyc19zZXRlbmRtc2codXBi
X2hhbmRsZXJzICpoLCB1cGJfZW5kbXNnX2hhbmRsZXJmdW5jICpmdW5jLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVy
c19zZXRpbnQzMih1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwYl9pbnQzMl9oYW5kbGVyZnVuYyAqZnVuYywgdXBiX2hh
bmRsZXJhdHRyICphdHRyKTsKLWJvb2wgdXBiX2hhbmRsZXJzX3NldGludDY0KHVwYl9oYW5kbGVy
cyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXBiX2ludDY0X2hhbmRsZXJmdW5jICpmdW5jLCB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpOwotYm9v
bCB1cGJfaGFuZGxlcnNfc2V0dWludDMyKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxk
ZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl91aW50MzJfaGFuZGxlcmZ1
bmMgKmZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJhdHRyICph
dHRyKTsKLWJvb2wgdXBiX2hhbmRsZXJzX3NldHVpbnQ2NCh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0
IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfdWludDY0
X2hhbmRsZXJmdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5k
bGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVyc19zZXRmbG9hdCh1cGJfaGFuZGxlcnMg
KmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVw
Yl9mbG9hdF9oYW5kbGVyZnVuYyAqZnVuYywgdXBiX2hhbmRsZXJhdHRyICphdHRyKTsKLWJvb2wg
dXBiX2hhbmRsZXJzX3NldGRvdWJsZSh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRl
ZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfZG91YmxlX2hhbmRsZXJmdW5j
ICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0
cik7Ci1ib29sIHVwYl9oYW5kbGVyc19zZXRib29sKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBi
X2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfYm9vbF9oYW5kbGVy
ZnVuYyAqZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJhdHRyICph
dHRyKTsKLWJvb2wgdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3RyKHVwYl9oYW5kbGVycyAqaCwgY29u
c3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3N0
YXJ0c3RyX2hhbmRsZXJmdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXBiX2hhbmRsZXJhdHRyICphdHRyKTsKLWJvb2wgdXBiX2hhbmRsZXJzX3NldHN0cmluZyh1cGJf
aGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGJfc3RyaW5nX2hhbmRsZXJmdW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9oYW5kbGVyc19zZXRl
bmRzdHIodXBiX2hhbmRsZXJzICpoLCBjb25zdCB1cGJfZmllbGRkZWYgKmYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXBiX2VuZGZpZWxkX2hhbmRsZXJmdW5jICpmdW5jLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwYl9oYW5kbGVyYXR0ciAqYXR0cik7Ci1ib29sIHVwYl9o
YW5kbGVyc19zZXRzdGFydHNlcSh1cGJfaGFuZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAq
ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zdGFydGZpZWxkX2hhbmRsZXJm
dW5jICpmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBiX2hhbmRsZXJhdHRy
ICphdHRyKTsKLWJvb2wgdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3VibXNnKHVwYl9oYW5kbGVycyAq
aCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXBiX3N0YXJ0ZmllbGRfaGFuZGxlcmZ1bmMgKmZ1bmMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cGJfaGFuZGxlcmF0dHIgKmF0dHIpOwotYm9vbCB1cGJfaGFuZGxlcnNf
c2V0ZW5kc3VibXNnKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9lbmRmaWVsZF9oYW5kbGVyZnVuYyAqZnVu
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxlcmF0dHIgKmF0dHIp
OwotYm9vbCB1cGJfaGFuZGxlcnNfc2V0ZW5kc2VxKHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBi
X2ZpZWxkZGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9lbmRmaWVsZF9o
YW5kbGVyZnVuYyAqZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxl
cmF0dHIgKmF0dHIpOwotCi1ib29sIHVwYl9oYW5kbGVyc19zZXRzdWJoYW5kbGVycyh1cGJfaGFu
ZGxlcnMgKmgsIGNvbnN0IHVwYl9maWVsZGRlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVwYl9oYW5kbGVycyAqc3ViKTsKLWNvbnN0IHVwYl9oYW5kbGVycyAq
dXBiX2hhbmRsZXJzX2dldHN1YmhhbmRsZXJzKGNvbnN0IHVwYl9oYW5kbGVycyAqaCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9maWVs
ZGRlZiAqZik7Ci1jb25zdCB1cGJfaGFuZGxlcnMgKnVwYl9oYW5kbGVyc19nZXRzdWJoYW5kbGVy
c19zZWwoY29uc3QgdXBiX2hhbmRsZXJzICpoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zZWxlY3Rvcl90IHNlbCk7Ci0KLVVQQl9JTkxJ
TkUgdXBiX2Z1bmMgKnVwYl9oYW5kbGVyc19nZXRoYW5kbGVyKGNvbnN0IHVwYl9oYW5kbGVycyAq
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zZWxl
Y3Rvcl90IHMpIHsKLSAgcmV0dXJuICh1cGJfZnVuYyAqKWgtPnRhYmxlW3NdLmZ1bmM7Ci19Ci0K
LWJvb2wgdXBiX2hhbmRsZXJzX2dldGF0dHIoY29uc3QgdXBiX2hhbmRsZXJzICpoLCB1cGJfc2Vs
ZWN0b3JfdCBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfaGFuZGxlcmF0dHIgKmF0
dHIpOwotCi1VUEJfSU5MSU5FIGNvbnN0IHZvaWQgKnVwYl9oYW5kbGVyc19nZXRoYW5kbGVyZGF0
YShjb25zdCB1cGJfaGFuZGxlcnMgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cGJfc2VsZWN0b3JfdCBzKSB7Ci0gIHJldHVybiB1cGJfaGFu
ZGxlcmF0dHJfaGFuZGxlcmRhdGEoJmgtPnRhYmxlW3NdLmF0dHIpOwotfQotCi0jaWZkZWYgX19j
cGx1c3BsdXMKLQotLyogSGFuZGxlciB0eXBlcyBmb3Igc2luZ2xlIGZpZWxkcy4KLSAqIFJpZ2h0
IG5vdyB3ZSBvbmx5IGhhdmUgb25lIGZvciBUWVBFX0JZVEVTIGJ1dCBvbmVzIGZvciBvdGhlciB0
eXBlcwotICogc2hvdWxkIGZvbGxvdy4KLSAqCi0gKiBUaGVzZSBmb2xsb3cgdGhlIHNhbWUgaGFu
ZGxlcnMgcHJvdG9jb2wgZm9yIGZpZWxkcyBvZiBhIG1lc3NhZ2UuICovCi1jbGFzcyB1cGI6OkJ5
dGVzSGFuZGxlciB7Ci0gcHVibGljOgotICBCeXRlc0hhbmRsZXIoKTsKLSAgfkJ5dGVzSGFuZGxl
cigpOwotI2Vsc2UKLXN0cnVjdCB1cGJfYnl0ZXNoYW5kbGVyIHsKLSNlbmRpZgotICB1cGJfaGFu
ZGxlcnNfdGFiZW50IHRhYmxlWzNdOwotfTsKLQotdm9pZCB1cGJfYnl0ZXNoYW5kbGVyX2luaXQo
dXBiX2J5dGVzaGFuZGxlciAqaCk7Ci0KLS8qIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0ICJkIiBv
dXRsaXZlcyB0aGUgaGFuZGxlcnMuCi0gKiBUT0RPKGhhYmVybWFuKTogc2hvdWxkIHRoaXMgaGF2
ZSBhICJmcmVlemUiIG9wZXJhdGlvbj8gIEl0J3Mgbm90IG5lY2Vzc2FyeQotICogZm9yIG1lbW9y
eSBtYW5hZ2VtZW50LCBidXQgY291bGQgYmUgdXNlZnVsIHRvIGZvcmNlIGltbXV0YWJpbGl0eSBh
bmQgcHJvdmlkZQotICogYSBjb252ZW5pZW50IG1vbWVudCB0byB2ZXJpZnkgdGhhdCBhbGwgcmVn
aXN0cmF0aW9uIHN1Y2NlZWRlZC4gKi8KLWJvb2wgdXBiX2J5dGVzaGFuZGxlcl9zZXRzdGFydHN0
cih1cGJfYnl0ZXNoYW5kbGVyICpoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVwYl9zdGFydHN0cl9oYW5kbGVyZnVuYyAqZnVuYywgdm9pZCAqZCk7Ci1ib29sIHVwYl9ieXRl
c2hhbmRsZXJfc2V0c3RyaW5nKHVwYl9ieXRlc2hhbmRsZXIgKmgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwYl9zdHJpbmdfaGFuZGxlcmZ1bmMgKmZ1bmMsIHZvaWQgKmQpOwot
Ym9vbCB1cGJfYnl0ZXNoYW5kbGVyX3NldGVuZHN0cih1cGJfYnl0ZXNoYW5kbGVyICpoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfZW5kZmllbGRfaGFuZGxlcmZ1bmMgKmZ1
bmMsIHZvaWQgKmQpOwotCi0vKiAiU3RhdGljIiBtZXRob2RzICovCi1ib29sIHVwYl9oYW5kbGVy
c19mcmVlemUodXBiX2hhbmRsZXJzICpjb25zdCAqaGFuZGxlcnMsIGludCBuLCB1cGJfc3RhdHVz
ICpzKTsKLXVwYl9oYW5kbGVydHlwZV90IHVwYl9oYW5kbGVyc19nZXRwcmltaXRpdmVoYW5kbGVy
dHlwZShjb25zdCB1cGJfZmllbGRkZWYgKmYpOwotYm9vbCB1cGJfaGFuZGxlcnNfZ2V0c2VsZWN0
b3IoY29uc3QgdXBiX2ZpZWxkZGVmICpmLCB1cGJfaGFuZGxlcnR5cGVfdCB0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXBiX3NlbGVjdG9yX3QgKnMpOwotVVBCX0lOTElORSB1
cGJfc2VsZWN0b3JfdCB1cGJfaGFuZGxlcnNfZ2V0ZW5kc2VsZWN0b3IodXBiX3NlbGVjdG9yX3Qg
c3RhcnQpIHsKLSAgcmV0dXJuIHN0YXJ0ICsgMTsKLX0KLQotLyogSW50ZXJuYWwtb25seS4gKi8K
LXVpbnQzMl90IHVwYl9oYW5kbGVyc19zZWxlY3RvcmJhc2VvZmZzZXQoY29uc3QgdXBiX2ZpZWxk
ZGVmICpmKTsKLXVpbnQzMl90IHVwYl9oYW5kbGVyc19zZWxlY3RvcmNvdW50KGNvbnN0IHVwYl9m
aWVsZGRlZiAqZik7Ci0KLVVQQl9FTkRfRVhURVJOX0MKLQotLyoKLSoqIElubGluZSBkZWZpbml0
aW9ucyBmb3IgaGFuZGxlcnMuaCwgd2hpY2ggYXJlIHBhcnRpY3VsYXJseSBsb25nIGFuZCBhIGJp
dAotKiogdHJpY2t5LgotKi8KLQotI2lmbmRlZiBVUEJfSEFORExFUlNfSU5MX0hfCi0jZGVmaW5l
IFVQQl9IQU5ETEVSU19JTkxfSF8KLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotCi0vKiBDIGlubGlu
ZSBtZXRob2RzLiAqLwotCi0vKiB1cGJfYnVmaGFuZGxlICovCi1VUEJfSU5MSU5FIHZvaWQgdXBi
X2J1ZmhhbmRsZV9pbml0KHVwYl9idWZoYW5kbGUgKmgpIHsKLSAgaC0+b2JqXyA9IE5VTEw7Ci0g
IGgtPm9ianR5cGVfID0gTlVMTDsKLSAgaC0+YnVmXyA9IE5VTEw7Ci0gIGgtPm9iam9mc18gPSAw
OwotfQotVVBCX0lOTElORSB2b2lkIHVwYl9idWZoYW5kbGVfdW5pbml0KHVwYl9idWZoYW5kbGUg
KmgpIHsKLSAgVVBCX1VOVVNFRChoKTsKLX0KLVVQQl9JTkxJTkUgdm9pZCB1cGJfYnVmaGFuZGxl
X3NldG9iaih1cGJfYnVmaGFuZGxlICpoLCBjb25zdCB2b2lkICpvYmosCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqdHlwZSkgewotICBoLT5vYmpfID0g
b2JqOwotICBoLT5vYmp0eXBlXyA9IHR5cGU7Ci19Ci1VUEJfSU5MSU5FIHZvaWQgdXBiX2J1Zmhh
bmRsZV9zZXRidWYodXBiX2J1ZmhhbmRsZSAqaCwgY29uc3QgY2hhciAqYnVmLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZnMpIHsKLSAgaC0+YnVmXyA9IGJ1
ZjsKLSAgaC0+b2Jqb2ZzXyA9IG9mczsKLX0KLVVQQl9JTkxJTkUgY29uc3Qgdm9pZCAqdXBiX2J1
ZmhhbmRsZV9vYmooY29uc3QgdXBiX2J1ZmhhbmRsZSAqaCkgewotICByZXR1cm4gaC0+b2JqXzsK
LX0KLVVQQl9JTkxJTkUgY29uc3Qgdm9pZCAqdXBiX2J1ZmhhbmRsZV9vYmp0eXBlKGNvbnN0IHVw
Yl9idWZoYW5kbGUgKmgpIHsKLSAgcmV0dXJuIGgtPm9ianR5cGVfOwotfQotVVBCX0lOTElORSBj
b25zdCBjaGFyICp1cGJfYnVmaGFuZGxlX2J1Zihjb25zdCB1cGJfYnVmaGFuZGxlICpoKSB7Ci0g
IHJldHVybiBoLT5idWZfOwotfQotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBUeXBlIGRl
dGVjdGlvbiBhbmQgdHlwZWRlZnMgZm9yIGludGVnZXIgdHlwZXMuCi0gKiBGb3IgcGxhdGZvcm1z
IHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSAzMi1iaXQgb3IgNjQtYml0IHR5cGVzLCB3ZSBuZWVk
IHRvIGJlCi0gKiBhYmxlIHRvIGVudW1lcmF0ZSB0aGVtIHNvIHdlIGNhbiBwcm9wZXJseSBjcmVh
dGUgb3ZlcmxvYWRzIGZvciBhbGwgdmFyaWFudHMuCi0gKgotICogSWYgYW55IHBsYXRmb3JtIGV4
aXN0ZWQgd2hlcmUgdGhlcmUgd2VyZSB0aHJlZSBpbnRlZ2VyIHR5cGVzIHdpdGggdGhlIHNhbWUK
LSAqIHNpemUsIHRoaXMgd291bGQgaGF2ZSB0byBiZWNvbWUgbW9yZSBjb21wbGljYXRlZC4gIEZv
ciBleGFtcGxlLCBzaG9ydCwgaW50LAotICogYW5kIGxvbmcgY291bGQgYWxsIGJlIDMyLWJpdHMu
ICBFdmVuIG1vcmUgZGlhYm9saWNhbGx5LCBzaG9ydCwgaW50LCBsb25nLAotICogYW5kIGxvbmcg
bG9uZyBjb3VsZCBhbGwgYmUgNjQgYml0cyBhbmQgc3RpbGwgYmUgc3RhbmRhcmQtY29tcGxpYW50
LgotICogSG93ZXZlciwgZmV3IHBsYXRmb3JtcyBhcmUgdGhpcyBzdHJhbmdlLCBhbmQgaXQncyB1
bmxpa2VseSB0aGF0IHVwYiB3aWxsIGJlCi0gKiB1c2VkIG9uIHRoZSBzdHJhbmdlc3Qgb25lcy4g
Ki8KLQotLyogQ2FuJ3QgY291bnQgb24gc3RkaW50LmggbGltaXRzIGxpa2UgSU5UMzJfTUFYLCBi
ZWNhdXNlIGluIEMrKyB0aGVzZSBhcmUKLSAqIG9ubHkgZGVmaW5lZCB3aGVuIF9fU1REQ19MSU1J
VF9NQUNST1MgYXJlIGRlZmluZWQgYmVmb3JlIHRoZSAqZmlyc3QqIGluY2x1ZGUKLSAqIG9mIHN0
ZGludC5oLiAgV2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgc29tZW9uZSBlbHNlIGRpZG4ndCBpbmNs
dWRlIHRoZXNlIGZpcnN0Ci0gKiB3aXRob3V0IGRlZmluaW5nIF9fU1REQ19MSU1JVF9NQUNST1Mu
ICovCi0jZGVmaW5lIFVQQl9JTlQzMl9NQVggMHg3ZmZmZmZmZkxMCi0jZGVmaW5lIFVQQl9JTlQz
Ml9NSU4gKC1VUEJfSU5UMzJfTUFYIC0gMSkKLSNkZWZpbmUgVVBCX0lOVDY0X01BWCAweDdmZmZm
ZmZmZmZmZmZmZmZMTAotI2RlZmluZSBVUEJfSU5UNjRfTUlOICgtVVBCX0lOVDY0X01BWCAtIDEp
Ci0KLSNpZiBJTlRfTUFYID09IFVQQl9JTlQzMl9NQVggJiYgSU5UX01JTiA9PSBVUEJfSU5UMzJf
TUlOCi0jZGVmaW5lIFVQQl9JTlRfSVNfMzJCSVRTIDEKLSNlbmRpZgotCi0jaWYgTE9OR19NQVgg
PT0gVVBCX0lOVDMyX01BWCAmJiBMT05HX01JTiA9PSBVUEJfSU5UMzJfTUlOCi0jZGVmaW5lIFVQ
Ql9MT05HX0lTXzMyQklUUyAxCi0jZW5kaWYKLQotI2lmIExPTkdfTUFYID09IFVQQl9JTlQ2NF9N
QVggJiYgTE9OR19NSU4gPT0gVVBCX0lOVDY0X01JTgotI2RlZmluZSBVUEJfTE9OR19JU182NEJJ
VFMgMQotI2VuZGlmCi0KLSNpZiBMTE9OR19NQVggPT0gVVBCX0lOVDY0X01BWCAmJiBMTE9OR19N
SU4gPT0gVVBCX0lOVDY0X01JTgotI2RlZmluZSBVUEJfTExPTkdfSVNfNjRCSVRTIDEKLSNlbmRp
ZgotCi0vKiBXZSB1c2UgbWFjcm9zIGluc3RlYWQgb2YgdHlwZWRlZnMgc28gd2UgY2FuIHVuZGVm
aW5lIHRoZW0gbGF0ZXIgYW5kIGF2b2lkCi0gKiBsZWFraW5nIHRoZW0gb3V0c2lkZSB0aGlzIGhl
YWRlciBmaWxlLiAqLwotI2lmIFVQQl9JTlRfSVNfMzJCSVRTCi0jZGVmaW5lIFVQQl9JTlQzMl9U
IGludAotI2RlZmluZSBVUEJfVUlOVDMyX1QgdW5zaWduZWQgaW50Ci0KLSNpZiBVUEJfTE9OR19J
U18zMkJJVFMKLSNkZWZpbmUgVVBCX1RXT18zMkJJVF9UWVBFUyAxCi0jZGVmaW5lIFVQQl9JTlQz
MkFMVF9UIGxvbmcKLSNkZWZpbmUgVVBCX1VJTlQzMkFMVF9UIHVuc2lnbmVkIGxvbmcKLSNlbmRp
ZiAgLyogVVBCX0xPTkdfSVNfMzJCSVRTICovCi0KLSNlbGlmIFVQQl9MT05HX0lTXzMyQklUUyAg
LyogJiYgIVVQQl9JTlRfSVNfMzJCSVRTICovCi0jZGVmaW5lIFVQQl9JTlQzMl9UIGxvbmcKLSNk
ZWZpbmUgVVBCX1VJTlQzMl9UIHVuc2lnbmVkIGxvbmcKLSNlbmRpZiAgLyogVVBCX0lOVF9JU18z
MkJJVFMgKi8KLQotCi0jaWYgVVBCX0xPTkdfSVNfNjRCSVRTCi0jZGVmaW5lIFVQQl9JTlQ2NF9U
IGxvbmcKLSNkZWZpbmUgVVBCX1VJTlQ2NF9UIHVuc2lnbmVkIGxvbmcKLQotI2lmIFVQQl9MTE9O
R19JU182NEJJVFMKLSNkZWZpbmUgVVBCX1RXT182NEJJVF9UWVBFUyAxCi0jZGVmaW5lIFVQQl9J
TlQ2NEFMVF9UIGxvbmcgbG9uZwotI2RlZmluZSBVUEJfVUlOVDY0QUxUX1QgdW5zaWduZWQgbG9u
ZyBsb25nCi0jZW5kaWYgIC8qIFVQQl9MTE9OR19JU182NEJJVFMgKi8KLQotI2VsaWYgVVBCX0xM
T05HX0lTXzY0QklUUyAgLyogJiYgIVVQQl9MT05HX0lTXzY0QklUUyAqLwotI2RlZmluZSBVUEJf
SU5UNjRfVCBsb25nIGxvbmcKLSNkZWZpbmUgVVBCX1VJTlQ2NF9UIHVuc2lnbmVkIGxvbmcgbG9u
ZwotI2VuZGlmICAvKiBVUEJfTE9OR19JU182NEJJVFMgKi8KLQotI3VuZGVmIFVQQl9JTlQzMl9N
QVgKLSN1bmRlZiBVUEJfSU5UMzJfTUlOCi0jdW5kZWYgVVBCX0lOVDY0X01BWAotI3VuZGVmIFVQ
Ql9JTlQ2NF9NSU4KLSN1bmRlZiBVUEJfSU5UX0lTXzMyQklUUwotI3VuZGVmIFVQQl9MT05HX0lT
XzMyQklUUwotI3VuZGVmIFVQQl9MT05HX0lTXzY0QklUUwotI3VuZGVmIFVQQl9MTE9OR19JU182
NEJJVFMKLQotCi1uYW1lc3BhY2UgdXBiIHsKLQotdHlwZWRlZiB2b2lkIENsZWFudXBGdW5jKHZv
aWQgKnB0cik7Ci0KLS8qIFRlbXBsYXRlIHRvIHJlbW92ZSAiY29uc3QiIGZyb20gImNvbnN0IFQq
IiBhbmQganVzdCByZXR1cm4gIlQqIi4KLSAqCi0gKiBXZSBkZWZpbmUgYSBub25zZW5zZSBkZWZh
dWx0IGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHdpbGwgZmFpbCB0byBpbnN0YW50aWF0ZSBhcwotICog
YSBmdW5jdGlvbiBwYXJhbWV0ZXIgdHlwZSBldmVuIGluIGNhc2VzIHdoZXJlIHdlIGRvbid0IGV4
cGVjdCBhbnkgY2FsbGVyIHRvCi0gKiBhY3R1YWxseSBtYXRjaCB0aGUgb3ZlcmxvYWQuICovCi1j
bGFzcyBDb3VsZG50UmVtb3ZlQ29uc3Qge307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJl
bW92ZV9jb25zdHB0ciB7IHR5cGVkZWYgQ291bGRudFJlbW92ZUNvbnN0IHR5cGU7IH07Ci10ZW1w
bGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJlbW92ZV9jb25zdHB0cjxjb25zdCBUICo+IHsgdHlwZWRl
ZiBUICp0eXBlOyB9OwotCi0vKiBUZW1wbGF0ZSB0aGF0IHdlIHVzZSBiZWxvdyB0byByZW1vdmUg
YSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBmcm9tCi0gKiBjb25zaWRlcmF0aW9uIGlmIGl0IG1h
dGNoZXMgYSBzcGVjaWZpYyB0eXBlLiAqLwotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IHN0
cnVjdCBkaXNhYmxlX2lmX3NhbWUgeyB0eXBlZGVmIHZvaWQgVHlwZTsgfTsKLXRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgZGlzYWJsZV9pZl9zYW1lPFQsIFQ+IHt9OwotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gdm9pZCBEZWxldGVQb2ludGVyKHZvaWQgKnApIHsgZGVsZXRlIHN0YXRpY19jYXN0PFQ+
KHApOyB9Ci0KLXRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci1zdHJ1Y3QgRmlyc3RVbmxl
c3NWb2lkT3JCb29sIHsKLSAgdHlwZWRlZiBUMSB2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFz
cyBUMj4KLXN0cnVjdCBGaXJzdFVubGVzc1ZvaWRPckJvb2w8dm9pZCwgVDI+IHsKLSAgdHlwZWRl
ZiBUMiB2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUMj4KLXN0cnVjdCBGaXJzdFVubGVz
c1ZvaWRPckJvb2w8Ym9vbCwgVDI+IHsKLSAgdHlwZWRlZiBUMiB2YWx1ZTsKLX07Ci0KLXRlbXBs
YXRlPGNsYXNzIFQsIGNsYXNzIFU+Ci1zdHJ1Y3QgaXNfc2FtZSB7Ci0gIHN0YXRpYyBib29sIHZh
bHVlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19zYW1lPFQsIFQ+IHsKLSAg
c3RhdGljIGJvb2wgdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVPgotYm9v
bCBpc19zYW1lPFQsIFU+Ojp2YWx1ZSA9IGZhbHNlOwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotYm9v
bCBpc19zYW1lPFQsIFQ+Ojp2YWx1ZSA9IHRydWU7Ci0KLS8qIEZ1bmNJbmZvICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0KLS8qIEluZm8gYWJvdXQgdGhlIHVzZXIncyBvcmlnaW5hbCwgcHJlLXdyYXBwZWQgZnVuY3Rp
b24uICovCi10ZW1wbGF0ZSA8Y2xhc3MgQywgY2xhc3MgUiA9IHZvaWQ+Ci1zdHJ1Y3QgRnVuY0lu
Zm8gewotICAvKiBUaGUgdHlwZSBvZiB0aGUgY2xvc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiB0YWtl
cyAoaXRzIGZpcnN0IHBhcmFtKS4gKi8KLSAgdHlwZWRlZiBDIENsb3N1cmU7Ci0KLSAgLyogVGhl
IHJldHVybiB0eXBlLiAqLwotICB0eXBlZGVmIFIgUmV0dXJuOwotfTsKLQotLyogRnVuYyAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KLQotLyogRnVuYzEsIEZ1bmMyLCBGdW5jMzogVGVtcGxhdGUgY2xhc3NlcyBy
ZXByZXNlbnRpbmcgYSBmdW5jdGlvbiBhbmQgaXRzCi0gKiBzaWduYXR1cmUuCi0gKgotICogU2lu
Y2UgdGhlIGZ1bmN0aW9uIGlzIGEgdGVtcGxhdGUgcGFyYW1ldGVyLCBjYWxsaW5nIHRoZSBmdW5j
dGlvbiBjYW4gYmUKLSAqIGlubGluZWQgYXQgY29tcGlsZS10aW1lIGFuZCBkb2VzIG5vdCByZXF1
aXJlIGEgZnVuY3Rpb24gcG9pbnRlciBhdCBydW50aW1lLgotICogVGhlc2UgZnVuY3Rpb25zIGFy
ZSBub3QgYm91bmQgdG8gYSBoYW5kbGVyIGRhdGEgc28gaGF2ZSBubyBkYXRhIG9yIGNsZWFudXAK
LSAqIGhhbmRsZXIuICovCi1zdHJ1Y3QgVW5ib3VuZEZ1bmMgewotICBDbGVhbnVwRnVuYyAqR2V0
Q2xlYW51cCgpIHsgcmV0dXJuIE5VTEw7IH0KLSAgdm9pZCAqR2V0RGF0YSgpIHsgcmV0dXJuIE5V
TEw7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgUiBGKFAxKSwgY2xhc3Mg
ST4KLXN0cnVjdCBGdW5jMSA6IHB1YmxpYyBVbmJvdW5kRnVuYyB7Ci0gIHR5cGVkZWYgUiBSZXR1
cm47Ci0gIHR5cGVkZWYgSSBGdW5jSW5mbzsKLSAgc3RhdGljIFIgQ2FsbChQMSBwMSkgeyByZXR1
cm4gRihwMSk7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIs
IFIgRihQMSwgUDIpLCBjbGFzcyBJPgotc3RydWN0IEZ1bmMyIDogcHVibGljIFVuYm91bmRGdW5j
IHsKLSAgdHlwZWRlZiBSIFJldHVybjsKLSAgdHlwZWRlZiBJIEZ1bmNJbmZvOwotICBzdGF0aWMg
UiBDYWxsKFAxIHAxLCBQMiBwMikgeyByZXR1cm4gRihwMSwgcDIpOyB9Ci19OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgUiBGKFAxLCBQMiwgUDMp
LCBjbGFzcyBJPgotc3RydWN0IEZ1bmMzIDogcHVibGljIFVuYm91bmRGdW5jIHsKLSAgdHlwZWRl
ZiBSIFJldHVybjsKLSAgdHlwZWRlZiBJIEZ1bmNJbmZvOwotICBzdGF0aWMgUiBDYWxsKFAxIHAx
LCBQMiBwMiwgUDMgcDMpIHsgcmV0dXJuIEYocDEsIHAyLCBwMyk7IH0KLX07Ci0KLXRlbXBsYXRl
IDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQNCwgUiBGKFAx
LCBQMiwgUDMsIFA0KSwKLSAgICAgICAgICBjbGFzcyBJPgotc3RydWN0IEZ1bmM0IDogcHVibGlj
IFVuYm91bmRGdW5jIHsKLSAgdHlwZWRlZiBSIFJldHVybjsKLSAgdHlwZWRlZiBJIEZ1bmNJbmZv
OwotICBzdGF0aWMgUiBDYWxsKFAxIHAxLCBQMiBwMiwgUDMgcDMsIFA0IHA0KSB7IHJldHVybiBG
KHAxLCBwMiwgcDMsIHA0KTsgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBj
bGFzcyBQMiwgY2xhc3MgUDMsIGNsYXNzIFA0LCBjbGFzcyBQNSwKLSAgICAgICAgICBSIEYoUDEs
IFAyLCBQMywgUDQsIFA1KSwgY2xhc3MgST4KLXN0cnVjdCBGdW5jNSA6IHB1YmxpYyBVbmJvdW5k
RnVuYyB7Ci0gIHR5cGVkZWYgUiBSZXR1cm47Ci0gIHR5cGVkZWYgSSBGdW5jSW5mbzsKLSAgc3Rh
dGljIFIgQ2FsbChQMSBwMSwgUDIgcDIsIFAzIHAzLCBQNCBwNCwgUDUgcDUpIHsKLSAgICByZXR1
cm4gRihwMSwgcDIsIHAzLCBwNCwgcDUpOwotICB9Ci19OwotCi0vKiBCb3VuZEZ1bmMgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwotCi0vKiBCb3VuZEZ1bmMyLCBCb3VuZEZ1bmMzOiBMaWtlIEZ1bmMyL0Z1bmMzIGV4Y2Vw
dCBhbHNvIGNvbnRhaW5zIGEgdmFsdWUgdGhhdAotICogc2hhbGwgYmUgYm91bmQgdG8gdGhlIGZ1
bmN0aW9uJ3Mgc2Vjb25kIHBhcmFtZXRlci4KLSAqIAotICogTm90ZSB0aGF0IHRoZSBzZWNvbmQg
cGFyYW1ldGVyIGlzIGEgY29uc3QgcG9pbnRlciwgYnV0IG91ciBzdG9yZWQgYm91bmQgdmFsdWUK
LSAqIGlzIG5vbi1jb25zdCBzbyB3ZSBjYW4gZnJlZSBpdCB3aGVuIHRoZSBoYW5kbGVycyBhcmUg
ZGVzdHJveWVkLiAqLwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgQm91bmRGdW5jIHsKLSAg
dHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY29uc3RwdHI8VD46OnR5cGUgTXV0YWJsZVAyOwotICBl
eHBsaWNpdCBCb3VuZEZ1bmMoTXV0YWJsZVAyIGRhdGFfKSA6IGRhdGEoZGF0YV8pIHt9Ci0gIENs
ZWFudXBGdW5jICpHZXRDbGVhbnVwKCkgeyByZXR1cm4gJkRlbGV0ZVBvaW50ZXI8TXV0YWJsZVAy
PjsgfQotICBNdXRhYmxlUDIgR2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KLSAgTXV0YWJsZVAy
IGRhdGE7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBSIEYo
UDEsIFAyKSwgY2xhc3MgST4KLXN0cnVjdCBCb3VuZEZ1bmMyIDogcHVibGljIEJvdW5kRnVuYzxQ
Mj4gewotICB0eXBlZGVmIEJvdW5kRnVuYzxQMj4gQmFzZTsKLSAgdHlwZWRlZiBJIEZ1bmNJbmZv
OwotICBleHBsaWNpdCBCb3VuZEZ1bmMyKHR5cGVuYW1lIEJhc2U6Ok11dGFibGVQMiBhcmcpIDog
QmFzZShhcmcpIHt9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAy
LCBjbGFzcyBQMywgUiBGKFAxLCBQMiwgUDMpLCBjbGFzcyBJPgotc3RydWN0IEJvdW5kRnVuYzMg
OiBwdWJsaWMgQm91bmRGdW5jPFAyPiB7Ci0gIHR5cGVkZWYgQm91bmRGdW5jPFAyPiBCYXNlOwot
ICB0eXBlZGVmIEkgRnVuY0luZm87Ci0gIGV4cGxpY2l0IEJvdW5kRnVuYzModHlwZW5hbWUgQmFz
ZTo6TXV0YWJsZVAyIGFyZykgOiBCYXNlKGFyZykge30KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBS
LCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQNCwgUiBGKFAxLCBQMiwgUDMs
IFA0KSwKLSAgICAgICAgICBjbGFzcyBJPgotc3RydWN0IEJvdW5kRnVuYzQgOiBwdWJsaWMgQm91
bmRGdW5jPFAyPiB7Ci0gIHR5cGVkZWYgQm91bmRGdW5jPFAyPiBCYXNlOwotICB0eXBlZGVmIEkg
RnVuY0luZm87Ci0gIGV4cGxpY2l0IEJvdW5kRnVuYzQodHlwZW5hbWUgQmFzZTo6TXV0YWJsZVAy
IGFyZykgOiBCYXNlKGFyZykge30KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwg
Y2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQNCwgY2xhc3MgUDUsCi0gICAgICAgICAgUiBGKFAx
LCBQMiwgUDMsIFA0LCBQNSksIGNsYXNzIEk+Ci1zdHJ1Y3QgQm91bmRGdW5jNSA6IHB1YmxpYyBC
b3VuZEZ1bmM8UDI+IHsKLSAgdHlwZWRlZiBCb3VuZEZ1bmM8UDI+IEJhc2U7Ci0gIHR5cGVkZWYg
SSBGdW5jSW5mbzsKLSAgZXhwbGljaXQgQm91bmRGdW5jNSh0eXBlbmFtZSBCYXNlOjpNdXRhYmxl
UDIgYXJnKSA6IEJhc2UoYXJnKSB7fQotfTsKLQotLyogRnVuY1NpZyAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
LyogRnVuY1NpZzEsIEZ1bmNTaWcyLCBGdW5jU2lnMzogdGVtcGxhdGUgY2xhc3NlcyByZWZsZWN0
aW5nIGEgZnVuY3Rpb24KLSAqICpzaWduYXR1cmUqLCBidXQgd2l0aG91dCBhIHNwZWNpZmljIGZ1
bmN0aW9uIGF0dGFjaGVkLgotICoKLSAqIFRoZXNlIGNsYXNzZXMgY29udGFpbiBtZW1iZXIgZnVu
Y3Rpb25zIHRoYXQgY2FuIGJlIGludm9rZWQgd2l0aCBhCi0gKiBzcGVjaWZpYyBmdW5jdGlvbiB0
byByZXR1cm4gYSBGdW5jL0JvdW5kRnVuYyBjbGFzcy4gKi8KLXRlbXBsYXRlIDxjbGFzcyBSLCBj
bGFzcyBQMT4KLXN0cnVjdCBGdW5jU2lnMSB7Ci0gIHRlbXBsYXRlIDxSIEYoUDEpPgotICBGdW5j
MTxSLCBQMSwgRiwgRnVuY0luZm88UDEsIFI+ID4gR2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVu
YzE8UiwgUDEsIEYsIEZ1bmNJbmZvPFAxLCBSPiA+KCk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxj
bGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDI+Ci1zdHJ1Y3QgRnVuY1NpZzIgewotICB0ZW1wbGF0
ZSA8UiBGKFAxLCBQMik+Ci0gIEZ1bmMyPFIsIFAxLCBQMiwgRiwgRnVuY0luZm88UDEsIFI+ID4g
R2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVuYzI8UiwgUDEsIFAyLCBGLCBGdW5jSW5mbzxQMSwg
Uj4gPigpOwotICB9Ci0KLSAgdGVtcGxhdGUgPFIgRihQMSwgUDIpPgotICBCb3VuZEZ1bmMyPFIs
IFAxLCBQMiwgRiwgRnVuY0luZm88UDEsIFI+ID4gR2V0RnVuYygKLSAgICAgIHR5cGVuYW1lIHJl
bW92ZV9jb25zdHB0cjxQMj46OnR5cGUgcGFyYW0yKSB7Ci0gICAgcmV0dXJuIEJvdW5kRnVuYzI8
UiwgUDEsIFAyLCBGLCBGdW5jSW5mbzxQMSwgUj4gPihwYXJhbTIpOwotICB9Ci19OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMz4KLXN0cnVjdCBGdW5j
U2lnMyB7Ci0gIHRlbXBsYXRlIDxSIEYoUDEsIFAyLCBQMyk+Ci0gIEZ1bmMzPFIsIFAxLCBQMiwg
UDMsIEYsIEZ1bmNJbmZvPFAxLCBSPiA+IEdldEZ1bmMoKSB7Ci0gICAgcmV0dXJuIEZ1bmMzPFIs
IFAxLCBQMiwgUDMsIEYsIEZ1bmNJbmZvPFAxLCBSPiA+KCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8
UiBGKFAxLCBQMiwgUDMpPgotICBCb3VuZEZ1bmMzPFIsIFAxLCBQMiwgUDMsIEYsIEZ1bmNJbmZv
PFAxLCBSPiA+IEdldEZ1bmMoCi0gICAgICB0eXBlbmFtZSByZW1vdmVfY29uc3RwdHI8UDI+Ojp0
eXBlIHBhcmFtMikgewotICAgIHJldHVybiBCb3VuZEZ1bmMzPFIsIFAxLCBQMiwgUDMsIEYsIEZ1
bmNJbmZvPFAxLCBSPiA+KHBhcmFtMik7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBj
bGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQND4KLXN0cnVjdCBGdW5jU2lnNCB7
Ci0gIHRlbXBsYXRlIDxSIEYoUDEsIFAyLCBQMywgUDQpPgotICBGdW5jNDxSLCBQMSwgUDIsIFAz
LCBQNCwgRiwgRnVuY0luZm88UDEsIFI+ID4gR2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVuYzQ8
UiwgUDEsIFAyLCBQMywgUDQsIEYsIEZ1bmNJbmZvPFAxLCBSPiA+KCk7Ci0gIH0KLQotICB0ZW1w
bGF0ZSA8UiBGKFAxLCBQMiwgUDMsIFA0KT4KLSAgQm91bmRGdW5jNDxSLCBQMSwgUDIsIFAzLCBQ
NCwgRiwgRnVuY0luZm88UDEsIFI+ID4gR2V0RnVuYygKLSAgICAgIHR5cGVuYW1lIHJlbW92ZV9j
b25zdHB0cjxQMj46OnR5cGUgcGFyYW0yKSB7Ci0gICAgcmV0dXJuIEJvdW5kRnVuYzQ8UiwgUDEs
IFAyLCBQMywgUDQsIEYsIEZ1bmNJbmZvPFAxLCBSPiA+KHBhcmFtMik7Ci0gIH0KLX07Ci0KLXRl
bXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQNCwg
Y2xhc3MgUDU+Ci1zdHJ1Y3QgRnVuY1NpZzUgewotICB0ZW1wbGF0ZSA8UiBGKFAxLCBQMiwgUDMs
IFA0LCBQNSk+Ci0gIEZ1bmM1PFIsIFAxLCBQMiwgUDMsIFA0LCBQNSwgRiwgRnVuY0luZm88UDEs
IFI+ID4gR2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVuYzU8UiwgUDEsIFAyLCBQMywgUDQsIFA1
LCBGLCBGdW5jSW5mbzxQMSwgUj4gPigpOwotICB9Ci0KLSAgdGVtcGxhdGUgPFIgRihQMSwgUDIs
IFAzLCBQNCwgUDUpPgotICBCb3VuZEZ1bmM1PFIsIFAxLCBQMiwgUDMsIFA0LCBQNSwgRiwgRnVu
Y0luZm88UDEsIFI+ID4gR2V0RnVuYygKLSAgICAgIHR5cGVuYW1lIHJlbW92ZV9jb25zdHB0cjxQ
Mj46OnR5cGUgcGFyYW0yKSB7Ci0gICAgcmV0dXJuIEJvdW5kRnVuYzU8UiwgUDEsIFAyLCBQMywg
UDQsIFA1LCBGLCBGdW5jSW5mbzxQMSwgUj4gPihwYXJhbTIpOwotICB9Ci19OwotCi0vKiBPdmVy
bG9hZGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGNvbnN0cnVjdCB0aGUgYXBwcm9wcmlh
dGUgRnVuY1NpZyoKLSAqIGNsYXNzIGdpdmVuIGEgZnVuY3Rpb24gcG9pbnRlciBieSBkZWR1Y2lu
ZyB0aGUgdGVtcGxhdGUgcGFyYW1ldGVycy4gKi8KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQ
MT4KLWlubGluZSBGdW5jU2lnMTxSLCBQMT4gTWF0Y2hGdW5jKFIgKCpmKShQMSkpIHsKLSAgVVBC
X1VOVVNFRChmKTsgIC8qIE9ubHkgdXNlZCBmb3IgdGVtcGxhdGUgcGFyYW1ldGVyIGRlZHVjdGlv
bi4gKi8KLSAgcmV0dXJuIEZ1bmNTaWcxPFIsIFAxPigpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgUDEsIGNsYXNzIFAyPgotaW5saW5lIEZ1bmNTaWcyPFIsIFAxLCBQMj4gTWF0Y2hG
dW5jKFIgKCpmKShQMSwgUDIpKSB7Ci0gIFVQQl9VTlVTRUQoZik7ICAvKiBPbmx5IHVzZWQgZm9y
IHRlbXBsYXRlIHBhcmFtZXRlciBkZWR1Y3Rpb24uICovCi0gIHJldHVybiBGdW5jU2lnMjxSLCBQ
MSwgUDI+KCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNs
YXNzIFAzPgotaW5saW5lIEZ1bmNTaWczPFIsIFAxLCBQMiwgUDM+IE1hdGNoRnVuYyhSICgqZiko
UDEsIFAyLCBQMykpIHsKLSAgVVBCX1VOVVNFRChmKTsgIC8qIE9ubHkgdXNlZCBmb3IgdGVtcGxh
dGUgcGFyYW1ldGVyIGRlZHVjdGlvbi4gKi8KLSAgcmV0dXJuIEZ1bmNTaWczPFIsIFAxLCBQMiwg
UDM+KCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNz
IFAzLCBjbGFzcyBQND4KLWlubGluZSBGdW5jU2lnNDxSLCBQMSwgUDIsIFAzLCBQND4gTWF0Y2hG
dW5jKFIgKCpmKShQMSwgUDIsIFAzLCBQNCkpIHsKLSAgVVBCX1VOVVNFRChmKTsgIC8qIE9ubHkg
dXNlZCBmb3IgdGVtcGxhdGUgcGFyYW1ldGVyIGRlZHVjdGlvbi4gKi8KLSAgcmV0dXJuIEZ1bmNT
aWc0PFIsIFAxLCBQMiwgUDMsIFA0PigpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
UDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgY2xhc3MgUDQsIGNsYXNzIFA1PgotaW5saW5lIEZ1bmNT
aWc1PFIsIFAxLCBQMiwgUDMsIFA0LCBQNT4gTWF0Y2hGdW5jKFIgKCpmKShQMSwgUDIsIFAzLCBQ
NCwgUDUpKSB7Ci0gIFVQQl9VTlVTRUQoZik7ICAvKiBPbmx5IHVzZWQgZm9yIHRlbXBsYXRlIHBh
cmFtZXRlciBkZWR1Y3Rpb24uICovCi0gIHJldHVybiBGdW5jU2lnNTxSLCBQMSwgUDIsIFAzLCBQ
NCwgUDU+KCk7Ci19Ci0KLS8qIE1ldGhvZFNpZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIENhbGxNZXRob2Qq
OiBhIGZ1bmN0aW9uIHRlbXBsYXRlIHRoYXQgY2FsbHMgYSBnaXZlbiBtZXRob2QuICovCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgQywgUiAoQzo6KkYpKCk+Ci1SIENhbGxNZXRob2QwKEMgKm9i
aikgewotICByZXR1cm4gKCgqb2JqKS4qRikoKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNs
YXNzIEMsIGNsYXNzIFAxLCBSIChDOjoqRikoUDEpPgotUiBDYWxsTWV0aG9kMShDICpvYmosIFAx
IGFyZzEpIHsKLSAgcmV0dXJuICgoKm9iaikuKkYpKGFyZzEpOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgUiwgY2xhc3MgQywgY2xhc3MgUDEsIGNsYXNzIFAyLCBSIChDOjoqRikoUDEsIFAyKT4KLVIg
Q2FsbE1ldGhvZDIoQyAqb2JqLCBQMSBhcmcxLCBQMiBhcmcyKSB7Ci0gIHJldHVybiAoKCpvYmop
LipGKShhcmcxLCBhcmcyKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEMsIGNsYXNz
IFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIFIgKEM6OipGKShQMSwgUDIsIFAzKT4KLVIgQ2FsbE1l
dGhvZDMoQyAqb2JqLCBQMSBhcmcxLCBQMiBhcmcyLCBQMyBhcmczKSB7Ci0gIHJldHVybiAoKCpv
YmopLipGKShhcmcxLCBhcmcyLCBhcmczKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IEMsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIGNsYXNzIFA0LAotICAgICAgICAgIFIg
KEM6OipGKShQMSwgUDIsIFAzLCBQNCk+Ci1SIENhbGxNZXRob2Q0KEMgKm9iaiwgUDEgYXJnMSwg
UDIgYXJnMiwgUDMgYXJnMywgUDQgYXJnNCkgewotICByZXR1cm4gKCgqb2JqKS4qRikoYXJnMSwg
YXJnMiwgYXJnMywgYXJnNCk7Ci19Ci0KLS8qIE1ldGhvZFNpZzogbGlrZSBGdW5jU2lnLCBidXQg
Zm9yIG1lbWJlciBmdW5jdGlvbnMuCi0gKgotICogR2V0RnVuYygpIHJldHVybnMgYSBub3JtYWwg
RnVuY04gb2JqZWN0LCBzbyBhZnRlciBjYWxsaW5nIEdldEZ1bmMoKSBubwotICogbW9yZSBsb2dp
YyBpcyByZXF1aXJlZCB0byBzcGVjaWFsLWNhc2UgbWV0aG9kcy4gKi8KLXRlbXBsYXRlIDxjbGFz
cyBSLCBjbGFzcyBDPgotc3RydWN0IE1ldGhvZFNpZzAgewotICB0ZW1wbGF0ZSA8UiAoQzo6KkYp
KCk+Ci0gIEZ1bmMxPFIsIEMgKiwgQ2FsbE1ldGhvZDA8UiwgQywgRj4sIEZ1bmNJbmZvPEMgKiwg
Uj4gPiBHZXRGdW5jKCkgewotICAgIHJldHVybiBGdW5jMTxSLCBDICosIENhbGxNZXRob2QwPFIs
IEMsIEY+LCBGdW5jSW5mbzxDICosIFI+ID4oKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNz
IFIsIGNsYXNzIEMsIGNsYXNzIFAxPgotc3RydWN0IE1ldGhvZFNpZzEgewotICB0ZW1wbGF0ZSA8
UiAoQzo6KkYpKFAxKT4KLSAgRnVuYzI8UiwgQyAqLCBQMSwgQ2FsbE1ldGhvZDE8UiwgQywgUDEs
IEY+LCBGdW5jSW5mbzxDICosIFI+ID4gR2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVuYzI8Uiwg
QyAqLCBQMSwgQ2FsbE1ldGhvZDE8UiwgQywgUDEsIEY+LCBGdW5jSW5mbzxDICosIFI+ID4oKTsK
LSAgfQotCi0gIHRlbXBsYXRlIDxSIChDOjoqRikoUDEpPgotICBCb3VuZEZ1bmMyPFIsIEMgKiwg
UDEsIENhbGxNZXRob2QxPFIsIEMsIFAxLCBGPiwgRnVuY0luZm88QyAqLCBSPiA+IEdldEZ1bmMo
Ci0gICAgICB0eXBlbmFtZSByZW1vdmVfY29uc3RwdHI8UDE+Ojp0eXBlIHBhcmFtMSkgewotICAg
IHJldHVybiBCb3VuZEZ1bmMyPFIsIEMgKiwgUDEsIENhbGxNZXRob2QxPFIsIEMsIFAxLCBGPiwg
RnVuY0luZm88QyAqLCBSPiA+KAotICAgICAgICBwYXJhbTEpOwotICB9Ci19OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgQywgY2xhc3MgUDEsIGNsYXNzIFAyPgotc3RydWN0IE1ldGhvZFNp
ZzIgewotICB0ZW1wbGF0ZSA8UiAoQzo6KkYpKFAxLCBQMik+Ci0gIEZ1bmMzPFIsIEMgKiwgUDEs
IFAyLCBDYWxsTWV0aG9kMjxSLCBDLCBQMSwgUDIsIEY+LCBGdW5jSW5mbzxDICosIFI+ID4KLSAg
R2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVuYzM8UiwgQyAqLCBQMSwgUDIsIENhbGxNZXRob2Qy
PFIsIEMsIFAxLCBQMiwgRj4sCi0gICAgICAgICAgICAgICAgIEZ1bmNJbmZvPEMgKiwgUj4gPigp
OwotICB9Ci0KLSAgdGVtcGxhdGUgPFIgKEM6OipGKShQMSwgUDIpPgotICBCb3VuZEZ1bmMzPFIs
IEMgKiwgUDEsIFAyLCBDYWxsTWV0aG9kMjxSLCBDLCBQMSwgUDIsIEY+LCBGdW5jSW5mbzxDICos
IFI+ID4KLSAgR2V0RnVuYyh0eXBlbmFtZSByZW1vdmVfY29uc3RwdHI8UDE+Ojp0eXBlIHBhcmFt
MSkgewotICAgIHJldHVybiBCb3VuZEZ1bmMzPFIsIEMgKiwgUDEsIFAyLCBDYWxsTWV0aG9kMjxS
LCBDLCBQMSwgUDIsIEY+LAotICAgICAgICAgICAgICAgICAgICAgIEZ1bmNJbmZvPEMgKiwgUj4g
PihwYXJhbTEpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgQywgY2xhc3Mg
UDEsIGNsYXNzIFAyLCBjbGFzcyBQMz4KLXN0cnVjdCBNZXRob2RTaWczIHsKLSAgdGVtcGxhdGUg
PFIgKEM6OipGKShQMSwgUDIsIFAzKT4KLSAgRnVuYzQ8UiwgQyAqLCBQMSwgUDIsIFAzLCBDYWxs
TWV0aG9kMzxSLCBDLCBQMSwgUDIsIFAzLCBGPiwgRnVuY0luZm88QyAqLCBSPiA+Ci0gIEdldEZ1
bmMoKSB7Ci0gICAgcmV0dXJuIEZ1bmM0PFIsIEMgKiwgUDEsIFAyLCBQMywgQ2FsbE1ldGhvZDM8
UiwgQywgUDEsIFAyLCBQMywgRj4sCi0gICAgICAgICAgICAgICAgIEZ1bmNJbmZvPEMgKiwgUj4g
PigpOwotICB9Ci0KLSAgdGVtcGxhdGUgPFIgKEM6OipGKShQMSwgUDIsIFAzKT4KLSAgQm91bmRG
dW5jNDxSLCBDICosIFAxLCBQMiwgUDMsIENhbGxNZXRob2QzPFIsIEMsIFAxLCBQMiwgUDMsIEY+
LAotICAgICAgICAgICAgIEZ1bmNJbmZvPEMgKiwgUj4gPgotICBHZXRGdW5jKHR5cGVuYW1lIHJl
bW92ZV9jb25zdHB0cjxQMT46OnR5cGUgcGFyYW0xKSB7Ci0gICAgcmV0dXJuIEJvdW5kRnVuYzQ8
UiwgQyAqLCBQMSwgUDIsIFAzLCBDYWxsTWV0aG9kMzxSLCBDLCBQMSwgUDIsIFAzLCBGPiwKLSAg
ICAgICAgICAgICAgICAgICAgICBGdW5jSW5mbzxDICosIFI+ID4ocGFyYW0xKTsKLSAgfQotfTsK
LQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEMsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3Mg
UDMsIGNsYXNzIFA0Pgotc3RydWN0IE1ldGhvZFNpZzQgewotICB0ZW1wbGF0ZSA8UiAoQzo6KkYp
KFAxLCBQMiwgUDMsIFA0KT4KLSAgRnVuYzU8UiwgQyAqLCBQMSwgUDIsIFAzLCBQNCwgQ2FsbE1l
dGhvZDQ8UiwgQywgUDEsIFAyLCBQMywgUDQsIEY+LAotICAgICAgICBGdW5jSW5mbzxDICosIFI+
ID4KLSAgR2V0RnVuYygpIHsKLSAgICByZXR1cm4gRnVuYzU8UiwgQyAqLCBQMSwgUDIsIFAzLCBQ
NCwgQ2FsbE1ldGhvZDQ8UiwgQywgUDEsIFAyLCBQMywgUDQsIEY+LAotICAgICAgICAgICAgICAg
ICBGdW5jSW5mbzxDICosIFI+ID4oKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxSIChDOjoqRikoUDEs
IFAyLCBQMywgUDQpPgotICBCb3VuZEZ1bmM1PFIsIEMgKiwgUDEsIFAyLCBQMywgUDQsIENhbGxN
ZXRob2Q0PFIsIEMsIFAxLCBQMiwgUDMsIFA0LCBGPiwKLSAgICAgICAgICAgICBGdW5jSW5mbzxD
ICosIFI+ID4KLSAgR2V0RnVuYyh0eXBlbmFtZSByZW1vdmVfY29uc3RwdHI8UDE+Ojp0eXBlIHBh
cmFtMSkgewotICAgIHJldHVybiBCb3VuZEZ1bmM1PFIsIEMgKiwgUDEsIFAyLCBQMywgUDQsCi0g
ICAgICAgICAgICAgICAgICAgICAgQ2FsbE1ldGhvZDQ8UiwgQywgUDEsIFAyLCBQMywgUDQsIEY+
LCBGdW5jSW5mbzxDICosIFI+ID4oCi0gICAgICAgIHBhcmFtMSk7Ci0gIH0KLX07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBSLCBjbGFzcyBDPgotaW5saW5lIE1ldGhvZFNpZzA8UiwgQz4gTWF0Y2hGdW5j
KFIgKEM6OipmKSgpKSB7Ci0gIFVQQl9VTlVTRUQoZik7ICAvKiBPbmx5IHVzZWQgZm9yIHRlbXBs
YXRlIHBhcmFtZXRlciBkZWR1Y3Rpb24uICovCi0gIHJldHVybiBNZXRob2RTaWcwPFIsIEM+KCk7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBDLCBjbGFzcyBQMT4KLWlubGluZSBNZXRo
b2RTaWcxPFIsIEMsIFAxPiBNYXRjaEZ1bmMoUiAoQzo6KmYpKFAxKSkgewotICBVUEJfVU5VU0VE
KGYpOyAgLyogT25seSB1c2VkIGZvciB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZGVkdWN0aW9uLiAqLwot
ICByZXR1cm4gTWV0aG9kU2lnMTxSLCBDLCBQMT4oKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIEMsIGNsYXNzIFAxLCBjbGFzcyBQMj4KLWlubGluZSBNZXRob2RTaWcyPFIsIEMsIFAx
LCBQMj4gTWF0Y2hGdW5jKFIgKEM6OipmKShQMSwgUDIpKSB7Ci0gIFVQQl9VTlVTRUQoZik7ICAv
KiBPbmx5IHVzZWQgZm9yIHRlbXBsYXRlIHBhcmFtZXRlciBkZWR1Y3Rpb24uICovCi0gIHJldHVy
biBNZXRob2RTaWcyPFIsIEMsIFAxLCBQMj4oKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNs
YXNzIEMsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDM+Ci1pbmxpbmUgTWV0aG9kU2lnMzxS
LCBDLCBQMSwgUDIsIFAzPiBNYXRjaEZ1bmMoUiAoQzo6KmYpKFAxLCBQMiwgUDMpKSB7Ci0gIFVQ
Ql9VTlVTRUQoZik7ICAvKiBPbmx5IHVzZWQgZm9yIHRlbXBsYXRlIHBhcmFtZXRlciBkZWR1Y3Rp
b24uICovCi0gIHJldHVybiBNZXRob2RTaWczPFIsIEMsIFAxLCBQMiwgUDM+KCk7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBDLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBj
bGFzcyBQND4KLWlubGluZSBNZXRob2RTaWc0PFIsIEMsIFAxLCBQMiwgUDMsIFA0PiBNYXRjaEZ1
bmMoUiAoQzo6KmYpKFAxLCBQMiwgUDMsIFA0KSkgewotICBVUEJfVU5VU0VEKGYpOyAgLyogT25s
eSB1c2VkIGZvciB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZGVkdWN0aW9uLiAqLwotICByZXR1cm4gTWV0
aG9kU2lnNDxSLCBDLCBQMSwgUDIsIFAzLCBQND4oKTsKLX0KLQotLyogTWF5YmVXcmFwUmV0dXJu
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLQotLyogVGVtcGxhdGUgY2xhc3MgdGhhdCBhdHRlbXB0cyB0byB3cmFwIHRoZSByZXR1
cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHNvIGl0Ci0gKiBtYXRjaGVzIHRoZSBleHBlY3RlZCB0
eXBlLiAgVGhlcmUgYXJlIHR3byBtYWluIGFkanVzdG1lbnRzIGl0IG1heSBtYWtlOgotICoKLSAq
ICAgMS4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdm9pZCwgbWFrZSBpdCByZXR1cm4gdGhlIGV4
cGVjdGVkIHR5cGUgYW5kIHdpdGgKLSAqICAgICAgYSB2YWx1ZSB0aGF0IGFsd2F5cyBpbmRpY2F0
ZXMgc3VjY2Vzcy4KLSAqICAgMi4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYm9vbCwgbWFrZSBp
dCByZXR1cm4gdGhlIGV4cGVjdGVkIHR5cGUgd2l0aCBhCi0gKiAgICAgIHZhbHVlIHRoYXQgaW5k
aWNhdGVzIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KLSAqCi0gKiBUaGUgImV4cGVjdGVkIHR5cGUiIGZv
ciByZXR1cm4gaXM6Ci0gKiAgIDEuIHZvaWQqIGZvciBzdGFydCBoYW5kbGVycy4gIElmIHRoZSBj
bG9zdXJlIHBhcmFtZXRlciBoYXMgYSBkaWZmZXJlbnQgdHlwZQotICogICAgICB3ZSB3aWxsIGNh
c3QgaXQgdG8gdm9pZCogZm9yIHRoZSByZXR1cm4gaW4gdGhlIHN1Y2Nlc3MgY2FzZS4KLSAqICAg
Mi4gc2l6ZV90IGZvciBzdHJpbmcgYnVmZmVyIGhhbmRsZXJzLgotICogICAzLiBib29sIGZvciBl
dmVyeXRoaW5nIGVsc2UuICovCi0KLS8qIFRlbXBsYXRlIHBhcmFtZXRlcnMgYXJlIEZ1bmNOIHR5
cGUgYW5kIGRlc2lyZWQgcmV0dXJuIHR5cGUuICovCi10ZW1wbGF0ZSA8Y2xhc3MgRiwgY2xhc3Mg
UiwgY2xhc3MgRW5hYmxlID0gdm9pZD4KLXN0cnVjdCBNYXliZVdyYXBSZXR1cm47Ci0KLS8qIElm
IHRoZSByZXR1cm4gdHlwZSBtYXRjaGVzLCByZXR1cm4gdGhlIGdpdmVuIGZ1bmN0aW9uIHVud3Jh
cHBlZC4gKi8KLXRlbXBsYXRlIDxjbGFzcyBGPgotc3RydWN0IE1heWJlV3JhcFJldHVybjxGLCB0
eXBlbmFtZSBGOjpSZXR1cm4+IHsKLSAgdHlwZWRlZiBGIEZ1bmM7Ci19OwotCi0vKiBGdW5jdGlv
biB3cmFwcGVyIHRoYXQgbXVuZ2VzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB2b2lkIHRvIChib29s
KXRydWUuICovCi10ZW1wbGF0ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCB2b2lkIEYoUDEsIFAyKT4K
LWJvb2wgUmV0dXJuVHJ1ZTIoUDEgcDEsIFAyIHAyKSB7Ci0gIEYocDEsIHAyKTsKLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCB2b2lk
IEYoUDEsIFAyLCBQMyk+Ci1ib29sIFJldHVyblRydWUzKFAxIHAxLCBQMiBwMiwgUDMgcDMpIHsK
LSAgRihwMSwgcDIsIHAzKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qIEZ1bmN0aW9uIHdyYXBw
ZXIgdGhhdCBtdW5nZXMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHZvaWQgdG8gKHZvaWQqKWFyZzEg
ICovCi10ZW1wbGF0ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCB2b2lkIEYoUDEsIFAyKT4KLXZvaWQg
KlJldHVybkNsb3N1cmUyKFAxIHAxLCBQMiBwMikgewotICBGKHAxLCBwMik7Ci0gIHJldHVybiBw
MTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIHZvaWQgRihQ
MSwgUDIsIFAzKT4KLXZvaWQgKlJldHVybkNsb3N1cmUzKFAxIHAxLCBQMiBwMiwgUDMgcDMpIHsK
LSAgRihwMSwgcDIsIHAzKTsKLSAgcmV0dXJuIHAxOwotfQotCi0vKiBGdW5jdGlvbiB3cmFwcGVy
IHRoYXQgbXVuZ2VzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBSIHRvIHZvaWQqLiAqLwotdGVtcGxh
dGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgUiBGKFAxLCBQMik+Ci12b2lkICpDYXN0
UmV0dXJuVG9Wb2lkUHRyMihQMSBwMSwgUDIgcDIpIHsKLSAgcmV0dXJuIEYocDEsIHAyKTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIFIgRihQ
MSwgUDIsIFAzKT4KLXZvaWQgKkNhc3RSZXR1cm5Ub1ZvaWRQdHIzKFAxIHAxLCBQMiBwMiwgUDMg
cDMpIHsKLSAgcmV0dXJuIEYocDEsIHAyLCBwMyk7Ci19Ci0KLS8qIEZ1bmN0aW9uIHdyYXBwZXIg
dGhhdCBtdW5nZXMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGJvb2wgdG8gdm9pZCouICovCi10ZW1w
bGF0ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCBib29sIEYoUDEsIFAyKT4KLXZvaWQgKlJldHVybkNs
b3N1cmVPckJyZWFrMihQMSBwMSwgUDIgcDIpIHsKLSAgcmV0dXJuIEYocDEsIHAyKSA/IHAxIDog
VVBCX0JSRUFLOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywg
Ym9vbCBGKFAxLCBQMiwgUDMpPgotdm9pZCAqUmV0dXJuQ2xvc3VyZU9yQnJlYWszKFAxIHAxLCBQ
MiBwMiwgUDMgcDMpIHsKLSAgcmV0dXJuIEYocDEsIHAyLCBwMykgPyBwMSA6IFVQQl9CUkVBSzsK
LX0KLQotLyogRm9yIHRoZSBzdHJpbmcgY2FsbGJhY2ssIHdoaWNoIHRha2VzIGZpdmUgcGFyYW1z
LCByZXR1cm5zIHRoZSBzaXplIHBhcmFtLiAqLwotdGVtcGxhdGUgPGNsYXNzIFAxLCBjbGFzcyBQ
MiwKLSAgICAgICAgICB2b2lkIEYoUDEsIFAyLCBjb25zdCBjaGFyICosIHNpemVfdCwgY29uc3Qg
QnVmZmVySGFuZGxlICopPgotc2l6ZV90IFJldHVyblN0cmluZ0xlbihQMSBwMSwgUDIgcDIsIGNv
bnN0IGNoYXIgKnAzLCBzaXplX3QgcDQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1
ZmZlckhhbmRsZSAqcDUpIHsKLSAgRihwMSwgcDIsIHAzLCBwNCwgcDUpOwotICByZXR1cm4gcDQ7
Ci19Ci0KLS8qIEZvciB0aGUgc3RyaW5nIGNhbGxiYWNrLCB3aGljaCB0YWtlcyBmaXZlIHBhcmFt
cywgcmV0dXJucyB0aGUgc2l6ZSBwYXJhbSBvcgotICogemVyby4gKi8KLXRlbXBsYXRlIDxjbGFz
cyBQMSwgY2xhc3MgUDIsCi0gICAgICAgICAgYm9vbCBGKFAxLCBQMiwgY29uc3QgY2hhciAqLCBz
aXplX3QsIGNvbnN0IEJ1ZmZlckhhbmRsZSAqKT4KLXNpemVfdCBSZXR1cm5OT3IwKFAxIHAxLCBQ
MiBwMiwgY29uc3QgY2hhciAqcDMsIHNpemVfdCBwNCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0
IEJ1ZmZlckhhbmRsZSAqcDUpIHsKLSAgcmV0dXJuIEYocDEsIHAyLCBwMywgcDQsIHA1KSA/IHA0
IDogMDsKLX0KLQotLyogSWYgd2UgaGF2ZSBhIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkIGJ1dCB3
YW50IGEgZnVuY3Rpb24gcmV0dXJuaW5nIGJvb2wsIHdyYXAKLSAqIGl0IGluIGEgZnVuY3Rpb24g
dGhhdCByZXR1cm5zIHRydWUuICovCi10ZW1wbGF0ZSA8Y2xhc3MgUDEsIGNsYXNzIFAyLCB2b2lk
IEYoUDEsIFAyKSwgY2xhc3MgST4KLXN0cnVjdCBNYXliZVdyYXBSZXR1cm48RnVuYzI8dm9pZCwg
UDEsIFAyLCBGLCBJPiwgYm9vbD4gewotICB0eXBlZGVmIEZ1bmMyPGJvb2wsIFAxLCBQMiwgUmV0
dXJuVHJ1ZTI8UDEsIFAyLCBGPiwgST4gRnVuYzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBQMSwg
Y2xhc3MgUDIsIGNsYXNzIFAzLCB2b2lkIEYoUDEsIFAyLCBQMyksIGNsYXNzIEk+Ci1zdHJ1Y3Qg
TWF5YmVXcmFwUmV0dXJuPEZ1bmMzPHZvaWQsIFAxLCBQMiwgUDMsIEYsIEk+LCBib29sPiB7Ci0g
IHR5cGVkZWYgRnVuYzM8Ym9vbCwgUDEsIFAyLCBQMywgUmV0dXJuVHJ1ZTM8UDEsIFAyLCBQMywg
Rj4sIEk+IEZ1bmM7Ci19OwotCi0vKiBJZiBvdXIgZnVuY3Rpb24gcmV0dXJucyB2b2lkIGJ1dCB3
ZSB3YW50IG9uZSByZXR1cm5pbmcgdm9pZCosIHdyYXAgaXQgaW4gYQotICogZnVuY3Rpb24gdGhh
dCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudC4gKi8KLXRlbXBsYXRlIDxjbGFzcyBQMSwgY2xh
c3MgUDIsIHZvaWQgRihQMSwgUDIpLCBjbGFzcyBJPgotc3RydWN0IE1heWJlV3JhcFJldHVybjxG
dW5jMjx2b2lkLCBQMSwgUDIsIEYsIEk+LCB2b2lkICo+IHsKLSAgdHlwZWRlZiBGdW5jMjx2b2lk
ICosIFAxLCBQMiwgUmV0dXJuQ2xvc3VyZTI8UDEsIFAyLCBGPiwgST4gRnVuYzsKLX07Ci0KLXRl
bXBsYXRlIDxjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCB2b2lkIEYoUDEsIFAyLCBQMyks
IGNsYXNzIEk+Ci1zdHJ1Y3QgTWF5YmVXcmFwUmV0dXJuPEZ1bmMzPHZvaWQsIFAxLCBQMiwgUDMs
IEYsIEk+LCB2b2lkICo+IHsKLSAgdHlwZWRlZiBGdW5jMzx2b2lkICosIFAxLCBQMiwgUDMsIFJl
dHVybkNsb3N1cmUzPFAxLCBQMiwgUDMsIEY+LCBJPiBGdW5jOwotfTsKLQotLyogSWYgb3VyIGZ1
bmN0aW9uIHJldHVybnMgUiogYnV0IHdlIHdhbnQgb25lIHJldHVybmluZyB2b2lkKiwgd3JhcCBp
dCBpbiBhCi0gKiBmdW5jdGlvbiB0aGF0IGNhc3RzIHRvIHZvaWQqLiAqLwotdGVtcGxhdGUgPGNs
YXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgUiAqRihQMSwgUDIpLCBjbGFzcyBJPgotc3RydWN0
IE1heWJlV3JhcFJldHVybjxGdW5jMjxSICosIFAxLCBQMiwgRiwgST4sIHZvaWQgKiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgZGlzYWJsZV9pZl9zYW1lPFIgKiwgdm9pZCAqPjo6
VHlwZT4gewotICB0eXBlZGVmIEZ1bmMyPHZvaWQgKiwgUDEsIFAyLCBDYXN0UmV0dXJuVG9Wb2lk
UHRyMjxSICosIFAxLCBQMiwgRj4sIEk+IEZ1bmM7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgUiAqRihQMSwgUDIsIFAzKSwgY2xhc3MgST4K
LXN0cnVjdCBNYXliZVdyYXBSZXR1cm48RnVuYzM8UiAqLCBQMSwgUDIsIFAzLCBGLCBJPiwgdm9p
ZCAqLAotICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBkaXNhYmxlX2lmX3NhbWU8UiAq
LCB2b2lkICo+OjpUeXBlPiB7Ci0gIHR5cGVkZWYgRnVuYzM8dm9pZCAqLCBQMSwgUDIsIFAzLCBD
YXN0UmV0dXJuVG9Wb2lkUHRyMzxSICosIFAxLCBQMiwgUDMsIEY+LCBJPgotICAgICAgRnVuYzsK
LX07Ci0KLS8qIElmIG91ciBmdW5jdGlvbiByZXR1cm5zIGJvb2wgYnV0IHdlIHdhbnQgb25lIHJl
dHVybmluZyB2b2lkKiwgd3JhcCBpdCBpbiBhCi0gKiBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0
aGVyIHRoZSBmaXJzdCBwYXJhbSBvciBVUEJfQlJFQUsuICovCi10ZW1wbGF0ZSA8Y2xhc3MgUDEs
IGNsYXNzIFAyLCBib29sIEYoUDEsIFAyKSwgY2xhc3MgST4KLXN0cnVjdCBNYXliZVdyYXBSZXR1
cm48RnVuYzI8Ym9vbCwgUDEsIFAyLCBGLCBJPiwgdm9pZCAqPiB7Ci0gIHR5cGVkZWYgRnVuYzI8
dm9pZCAqLCBQMSwgUDIsIFJldHVybkNsb3N1cmVPckJyZWFrMjxQMSwgUDIsIEY+LCBJPiBGdW5j
OwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIGJvb2wgRihQ
MSwgUDIsIFAzKSwgY2xhc3MgST4KLXN0cnVjdCBNYXliZVdyYXBSZXR1cm48RnVuYzM8Ym9vbCwg
UDEsIFAyLCBQMywgRiwgST4sIHZvaWQgKj4gewotICB0eXBlZGVmIEZ1bmMzPHZvaWQgKiwgUDEs
IFAyLCBQMywgUmV0dXJuQ2xvc3VyZU9yQnJlYWszPFAxLCBQMiwgUDMsIEY+LCBJPgotICAgICAg
RnVuYzsKLX07Ci0KLS8qIElmIG91ciBmdW5jdGlvbiByZXR1cm5zIHZvaWQgYnV0IHdlIHdhbnQg
b25lIHJldHVybmluZyBzaXplX3QsIHdyYXAgaXQgaW4gYQotICogZnVuY3Rpb24gdGhhdCByZXR1
cm5zIHRoZSBzaXplIGFyZ3VtZW50LiAqLwotdGVtcGxhdGUgPGNsYXNzIFAxLCBjbGFzcyBQMiwK
LSAgICAgICAgICB2b2lkIEYoUDEsIFAyLCBjb25zdCBjaGFyICosIHNpemVfdCwgY29uc3QgQnVm
ZmVySGFuZGxlICopLCBjbGFzcyBJPgotc3RydWN0IE1heWJlV3JhcFJldHVybjwKLSAgICBGdW5j
NTx2b2lkLCBQMSwgUDIsIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBjb25zdCBCdWZmZXJIYW5kbGUg
KiwgRiwgST4sCi0gICAgICAgICAgc2l6ZV90PiB7Ci0gIHR5cGVkZWYgRnVuYzU8c2l6ZV90LCBQ
MSwgUDIsIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBjb25zdCBCdWZmZXJIYW5kbGUgKiwKLSAgICAg
ICAgICAgICAgICBSZXR1cm5TdHJpbmdMZW48UDEsIFAyLCBGPiwgST4gRnVuYzsKLX07Ci0KLS8q
IElmIG91ciBmdW5jdGlvbiByZXR1cm5zIGJvb2wgYnV0IHdlIHdhbnQgb25lIHJldHVybmluZyBz
aXplX3QsIHdyYXAgaXQgaW4gYQotICogZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlciAwIG9y
IHRoZSBidWYgc2l6ZS4gKi8KLXRlbXBsYXRlIDxjbGFzcyBQMSwgY2xhc3MgUDIsCi0gICAgICAg
ICAgYm9vbCBGKFAxLCBQMiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGNvbnN0IEJ1ZmZlckhhbmRs
ZSAqKSwgY2xhc3MgST4KLXN0cnVjdCBNYXliZVdyYXBSZXR1cm48Ci0gICAgRnVuYzU8Ym9vbCwg
UDEsIFAyLCBjb25zdCBjaGFyICosIHNpemVfdCwgY29uc3QgQnVmZmVySGFuZGxlICosIEYsIEk+
LAotICAgIHNpemVfdD4gewotICB0eXBlZGVmIEZ1bmM1PHNpemVfdCwgUDEsIFAyLCBjb25zdCBj
aGFyICosIHNpemVfdCwgY29uc3QgQnVmZmVySGFuZGxlICosCi0gICAgICAgICAgICAgICAgUmV0
dXJuTk9yMDxQMSwgUDIsIEY+LCBJPiBGdW5jOwotfTsKLQotLyogQ29udmVydFBhcmFtcyAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLQotLyogVGVtcGxhdGUgY2xhc3MgdGhhdCBjb252ZXJ0cyB0aGUgZnVuY3Rpb24gcGFyYW1l
dGVycyBpZiBuZWNlc3NhcnksIGFuZAotICogaWdub3JlcyB0aGUgSGFuZGxlckRhdGEgcGFyYW1l
dGVyIGlmIGFwcHJvcHJpYXRlLgotICoKLSAqIFRlbXBsYXRlIHBhcmFtZXRlciBpcyB0aGUgYXJl
IEZ1bmNOIGZ1bmN0aW9uIHR5cGUuICovCi10ZW1wbGF0ZSA8Y2xhc3MgRiwgY2xhc3MgVD4KLXN0
cnVjdCBDb252ZXJ0UGFyYW1zOwotCi0vKiBGdW5jdGlvbiB0aGF0IGRpc2NhcmRzIHRoZSBoYW5k
bGVyIGRhdGEgcGFyYW1ldGVyLiAqLwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBSIEYo
UDEpPgotUiBJZ25vcmVIYW5kbGVyRGF0YTIodm9pZCAqcDEsIGNvbnN0IHZvaWQgKmhkKSB7Ci0g
IFVQQl9VTlVTRUQoaGQpOwotICByZXR1cm4gRihzdGF0aWNfY2FzdDxQMT4ocDEpKTsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMldyYXBwZXIsIGNsYXNzIFAyV3Jh
cHBlZCwKLSAgICAgICAgICBSIEYoUDEsIFAyV3JhcHBlZCk+Ci1SIElnbm9yZUhhbmRsZXJEYXRh
Myh2b2lkICpwMSwgY29uc3Qgdm9pZCAqaGQsIFAyV3JhcHBlciBwMikgewotICBVUEJfVU5VU0VE
KGhkKTsKLSAgcmV0dXJuIEYoc3RhdGljX2Nhc3Q8UDE+KHAxKSwgcDIpOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgUiBGKFAxLCBQMiwgUDMp
PgotUiBJZ25vcmVIYW5kbGVyRGF0YTQodm9pZCAqcDEsIGNvbnN0IHZvaWQgKmhkLCBQMiBwMiwg
UDMgcDMpIHsKLSAgVVBCX1VOVVNFRChoZCk7Ci0gIHJldHVybiBGKHN0YXRpY19jYXN0PFAxPihw
MSksIHAyLCBwMyk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIs
IGNsYXNzIFAzLCBjbGFzcyBQNCwgUiBGKFAxLCBQMiwgUDMsIFA0KT4KLVIgSWdub3JlSGFuZGxl
ckRhdGE1KHZvaWQgKnAxLCBjb25zdCB2b2lkICpoZCwgUDIgcDIsIFAzIHAzLCBQNCBwNCkgewot
ICBVUEJfVU5VU0VEKGhkKTsKLSAgcmV0dXJuIEYoc3RhdGljX2Nhc3Q8UDE+KHAxKSwgcDIsIHAz
LCBwNCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgUiBGKFAxLCBjb25zdCBj
aGFyKiwgc2l6ZV90KT4KLVIgSWdub3JlSGFuZGxlckRhdGFJZ25vcmVIYW5kbGUodm9pZCAqcDEs
IGNvbnN0IHZvaWQgKmhkLCBjb25zdCBjaGFyICpwMiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHAzLCBjb25zdCBCdWZmZXJIYW5kbGUgKmhhbmRsZSkgewotICBVUEJf
VU5VU0VEKGhkKTsKLSAgVVBCX1VOVVNFRChoYW5kbGUpOwotICByZXR1cm4gRihzdGF0aWNfY2Fz
dDxQMT4ocDEpLCBwMiwgcDMpOwotfQotCi0vKiBGdW5jdGlvbiB0aGF0IGNhc3RzIHRoZSBoYW5k
bGVyIGRhdGEgcGFyYW1ldGVyLiAqLwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFz
cyBQMiwgUiBGKFAxLCBQMik+Ci1SIENhc3RIYW5kbGVyRGF0YTIodm9pZCAqYywgY29uc3Qgdm9p
ZCAqaGQpIHsKLSAgcmV0dXJuIEYoc3RhdGljX2Nhc3Q8UDE+KGMpLCBzdGF0aWNfY2FzdDxQMj4o
aGQpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3Mg
UDNXcmFwcGVyLCBjbGFzcyBQM1dyYXBwZWQsCi0gICAgICAgICAgUiBGKFAxLCBQMiwgUDNXcmFw
cGVkKT4KLVIgQ2FzdEhhbmRsZXJEYXRhMyh2b2lkICpjLCBjb25zdCB2b2lkICpoZCwgUDNXcmFw
cGVyIHAzKSB7Ci0gIHJldHVybiBGKHN0YXRpY19jYXN0PFAxPihjKSwgc3RhdGljX2Nhc3Q8UDI+
KGhkKSwgcDMpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBj
bGFzcyBQMywgY2xhc3MgUDQsIGNsYXNzIFA1LAotICAgICAgICAgIFIgRihQMSwgUDIsIFAzLCBQ
NCwgUDUpPgotUiBDYXN0SGFuZGxlckRhdGE1KHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhkLCBQMyBw
MywgUDQgcDQsIFA1IHA1KSB7Ci0gIHJldHVybiBGKHN0YXRpY19jYXN0PFAxPihjKSwgc3RhdGlj
X2Nhc3Q8UDI+KGhkKSwgcDMsIHA0LCBwNSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFz
cyBQMSwgY2xhc3MgUDIsIFIgRihQMSwgUDIsIGNvbnN0IGNoYXIgKiwgc2l6ZV90KT4KLVIgQ2Fz
dEhhbmRsZXJEYXRhSWdub3JlSGFuZGxlKHZvaWQgKmMsIGNvbnN0IHZvaWQgKmhkLCBjb25zdCBj
aGFyICpwMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwNCwgY29uc3Qg
QnVmZmVySGFuZGxlICpoYW5kbGUpIHsKLSAgVVBCX1VOVVNFRChoYW5kbGUpOwotICByZXR1cm4g
RihzdGF0aWNfY2FzdDxQMT4oYyksIHN0YXRpY19jYXN0PFAyPihoZCksIHAzLCBwNCk7Ci19Ci0K
LS8qIEZvciB1bmJvdW5kIGZ1bmN0aW9ucywgaWdub3JlIHRoZSBoYW5kbGVyIGRhdGEuICovCi10
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIFIgRihQMSksIGNsYXNzIEksIGNsYXNzIFQ+Ci1z
dHJ1Y3QgQ29udmVydFBhcmFtczxGdW5jMTxSLCBQMSwgRiwgST4sIFQ+IHsKLSAgdHlwZWRlZiBG
dW5jMjxSLCB2b2lkICosIGNvbnN0IHZvaWQgKiwgSWdub3JlSGFuZGxlckRhdGEyPFIsIFAxLCBG
PiwgST4gRnVuYzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIs
IFIgRihQMSwgUDIpLCBjbGFzcyBJLAotICAgICAgICAgIGNsYXNzIFIyLCBjbGFzcyBQMV8yLCBj
bGFzcyBQMl8yLCBjbGFzcyBQM18yPgotc3RydWN0IENvbnZlcnRQYXJhbXM8RnVuYzI8UiwgUDEs
IFAyLCBGLCBJPiwKLSAgICAgICAgICAgICAgICAgICAgIFIyICgqKShQMV8yLCBQMl8yLCBQM18y
KT4gewotICB0eXBlZGVmIEZ1bmMzPFIsIHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBQM18yLAotICAg
ICAgICAgICAgICAgIElnbm9yZUhhbmRsZXJEYXRhMzxSLCBQMSwgUDNfMiwgUDIsIEY+LCBJPiBG
dW5jOwotfTsKLQotLyogRm9yIFN0cmluZ0J1ZmZlciBvbmx5OyB0aGlzIGlnbm9yZXMgYm90aCB0
aGUgaGFuZGxlciBkYXRhIGFuZCB0aGUKLSAqIEJ1ZmZlckhhbmRsZS4gKi8KLXRlbXBsYXRlIDxj
bGFzcyBSLCBjbGFzcyBQMSwgUiBGKFAxLCBjb25zdCBjaGFyICosIHNpemVfdCksIGNsYXNzIEks
IGNsYXNzIFQ+Ci1zdHJ1Y3QgQ29udmVydFBhcmFtczxGdW5jMzxSLCBQMSwgY29uc3QgY2hhciAq
LCBzaXplX3QsIEYsIEk+LCBUPiB7Ci0gIHR5cGVkZWYgRnVuYzU8Uiwgdm9pZCAqLCBjb25zdCB2
b2lkICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAotICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZl
ckhhbmRsZSAqLCBJZ25vcmVIYW5kbGVyRGF0YUlnbm9yZUhhbmRsZTxSLCBQMSwgRj4sCi0gICAg
ICAgICAgICAgICAgST4gRnVuYzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwg
Y2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQNCwgUiBGKFAxLCBQMiwgUDMsIFA0KSwKLSAgICAg
ICAgICBjbGFzcyBJLCBjbGFzcyBUPgotc3RydWN0IENvbnZlcnRQYXJhbXM8RnVuYzQ8UiwgUDEs
IFAyLCBQMywgUDQsIEYsIEk+LCBUPiB7Ci0gIHR5cGVkZWYgRnVuYzU8Uiwgdm9pZCAqLCBjb25z
dCB2b2lkICosIFAyLCBQMywgUDQsCi0gICAgICAgICAgICAgICAgSWdub3JlSGFuZGxlckRhdGE1
PFIsIFAxLCBQMiwgUDMsIFA0LCBGPiwgST4gRnVuYzsKLX07Ci0KLS8qIEZvciBib3VuZCBmdW5j
dGlvbnMsIGNhc3QgdGhlIGhhbmRsZXIgZGF0YS4gKi8KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFz
cyBQMSwgY2xhc3MgUDIsIFIgRihQMSwgUDIpLCBjbGFzcyBJLCBjbGFzcyBUPgotc3RydWN0IENv
bnZlcnRQYXJhbXM8Qm91bmRGdW5jMjxSLCBQMSwgUDIsIEYsIEk+LCBUPiB7Ci0gIHR5cGVkZWYg
RnVuYzI8Uiwgdm9pZCAqLCBjb25zdCB2b2lkICosIENhc3RIYW5kbGVyRGF0YTI8UiwgUDEsIFAy
LCBGPiwgST4KLSAgICAgIEZ1bmM7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEs
IGNsYXNzIFAyLCBjbGFzcyBQMywgUiBGKFAxLCBQMiwgUDMpLCBjbGFzcyBJLAotICAgICAgICAg
IGNsYXNzIFIyLCBjbGFzcyBQMV8yLCBjbGFzcyBQMl8yLCBjbGFzcyBQM18yPgotc3RydWN0IENv
bnZlcnRQYXJhbXM8Qm91bmRGdW5jMzxSLCBQMSwgUDIsIFAzLCBGLCBJPiwKLSAgICAgICAgICAg
ICAgICAgICAgIFIyICgqKShQMV8yLCBQMl8yLCBQM18yKT4gewotICB0eXBlZGVmIEZ1bmMzPFIs
IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBQM18yLAotICAgICAgICAgICAgICAgIENhc3RIYW5kbGVy
RGF0YTM8UiwgUDEsIFAyLCBQM18yLCBQMywgRj4sIEk+IEZ1bmM7Ci19OwotCi0vKiBGb3IgU3Ry
aW5nQnVmZmVyIG9ubHk7IHRoaXMgaWdub3JlcyB0aGUgQnVmZmVySGFuZGxlLiAqLwotdGVtcGxh
dGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgUiBGKFAxLCBQMiwgY29uc3QgY2hhciAq
LCBzaXplX3QpLAotICAgICAgICAgIGNsYXNzIEksIGNsYXNzIFQ+Ci1zdHJ1Y3QgQ29udmVydFBh
cmFtczxCb3VuZEZ1bmM0PFIsIFAxLCBQMiwgY29uc3QgY2hhciAqLCBzaXplX3QsIEYsIEk+LCBU
PiB7Ci0gIHR5cGVkZWYgRnVuYzU8Uiwgdm9pZCAqLCBjb25zdCB2b2lkICosIGNvbnN0IGNoYXIg
Kiwgc2l6ZV90LAotICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlckhhbmRsZSAqLCBDYXN0SGFu
ZGxlckRhdGFJZ25vcmVIYW5kbGU8UiwgUDEsIFAyLCBGPiwKLSAgICAgICAgICAgICAgICBJPiBG
dW5jOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3Mg
UDMsIGNsYXNzIFA0LCBjbGFzcyBQNSwKLSAgICAgICAgICBSIEYoUDEsIFAyLCBQMywgUDQsIFA1
KSwgY2xhc3MgSSwgY2xhc3MgVD4KLXN0cnVjdCBDb252ZXJ0UGFyYW1zPEJvdW5kRnVuYzU8Uiwg
UDEsIFAyLCBQMywgUDQsIFA1LCBGLCBJPiwgVD4gewotICB0eXBlZGVmIEZ1bmM1PFIsIHZvaWQg
KiwgY29uc3Qgdm9pZCAqLCBQMywgUDQsIFA1LAotICAgICAgICAgICAgICAgIENhc3RIYW5kbGVy
RGF0YTU8UiwgUDEsIFAyLCBQMywgUDQsIFA1LCBGPiwgST4gRnVuYzsKLX07Ci0KLS8qIHV0eXBl
L2x0eXBlIGFyZSB1cHBlci9sb3dlci1jYXNlLCBjdHlwZSBpcyBjYW5vbmljYWwgQyB0eXBlLCB2
dHlwZSBpcwotICogdmFyaWFudCBDIHR5cGUuICovCi0jZGVmaW5lIFRZUEVfTUVUSE9EUyh1dHlw
ZSwgbHR5cGUsIGN0eXBlLCB2dHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ2Fub25pY2FsVHlwZTx2dHlwZT4geyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0eXBlZGVmIGN0eXBlIFR5cGU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH07ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8PiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGJvb2wg
SGFuZGxlcnM6OlNldFZhbHVlSGFuZGxlcjx2dHlwZT4oICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICBjb25zdCBGaWVsZERlZiAqZiwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY29uc3QgSGFuZGxlcnM6
OnV0eXBlICMjIEhhbmRsZXImIGhhbmRsZXIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBhc3NlcnQoIWhhbmRsZXIucmVnaXN0ZXJlZF8pOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaGFuZGxlci5BZGRDbGVhbnVwKHRoaXMp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGhhbmRsZXIucmVnaXN0ZXJlZF8gPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldCMjbHR5cGUo
dGhpcywgZiwgaGFuZGxlci5oYW5kbGVyXywgJmhhbmRsZXIuYXR0cl8pOyBcCi0gIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotCi1UWVBFX01FVEhPRFMoRG91YmxlLCBkb3VibGUsIGRvdWJsZSwgICBk
b3VibGUpCi1UWVBFX01FVEhPRFMoRmxvYXQsICBmbG9hdCwgIGZsb2F0LCAgICBmbG9hdCkKLVRZ
UEVfTUVUSE9EUyhVSW50NjQsIHVpbnQ2NCwgdWludDY0X3QsIFVQQl9VSU5UNjRfVCkKLVRZUEVf
TUVUSE9EUyhVSW50MzIsIHVpbnQzMiwgdWludDMyX3QsIFVQQl9VSU5UMzJfVCkKLVRZUEVfTUVU
SE9EUyhJbnQ2NCwgIGludDY0LCAgaW50NjRfdCwgIFVQQl9JTlQ2NF9UKQotVFlQRV9NRVRIT0RT
KEludDMyLCAgaW50MzIsICBpbnQzMl90LCAgVVBCX0lOVDMyX1QpCi1UWVBFX01FVEhPRFMoQm9v
bCwgICBib29sLCAgIGJvb2wsICAgICBib29sKQotCi0jaWZkZWYgVVBCX1RXT18zMkJJVF9UWVBF
UwotVFlQRV9NRVRIT0RTKEludDMyLCAgaW50MzIsICBpbnQzMl90LCAgVVBCX0lOVDMyQUxUX1Qp
Ci1UWVBFX01FVEhPRFMoVUludDMyLCB1aW50MzIsIHVpbnQzMl90LCBVUEJfVUlOVDMyQUxUX1Qp
Ci0jZW5kaWYKLQotI2lmZGVmIFVQQl9UV09fNjRCSVRfVFlQRVMKLVRZUEVfTUVUSE9EUyhJbnQ2
NCwgIGludDY0LCAgaW50NjRfdCwgIFVQQl9JTlQ2NEFMVF9UKQotVFlQRV9NRVRIT0RTKFVJbnQ2
NCwgdWludDY0LCB1aW50NjRfdCwgVVBCX1VJTlQ2NEFMVF9UKQotI2VuZGlmCi0jdW5kZWYgVFlQ
RV9NRVRIT0RTCi0KLXRlbXBsYXRlIDw+IHN0cnVjdCBDYW5vbmljYWxUeXBlPFN0YXR1cyo+IHsK
LSAgdHlwZWRlZiBTdGF0dXMqIFR5cGU7Ci19OwotCi0vKiBUeXBlIG1ldGhvZHMgdGhhdCBhcmUg
b25seSBvbmUtcGVyLWNhbm9uaWNhbC10eXBlIGFuZCBub3QKLSAqIG9uZS1wZXItY3ZhcmlhbnQu
ICovCi0KLSNkZWZpbmUgVFlQRV9NRVRIT0RTKHV0eXBlLCBjdHlwZSkgXAotICAgIGlubGluZSBi
b29sIEhhbmRsZXJzOjpTZXQjI3V0eXBlIyNIYW5kbGVyKGNvbnN0IEZpZWxkRGVmICpmLCBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXR5cGUj
I0hhbmRsZXIgJmgpIHsgXAotICAgICAgcmV0dXJuIFNldFZhbHVlSGFuZGxlcjxjdHlwZT4oZiwg
aCk7IFwKLSAgICB9IFwKLQotVFlQRV9NRVRIT0RTKERvdWJsZSwgZG91YmxlKQotVFlQRV9NRVRI
T0RTKEZsb2F0LCAgZmxvYXQpCi1UWVBFX01FVEhPRFMoVUludDY0LCB1aW50NjRfdCkKLVRZUEVf
TUVUSE9EUyhVSW50MzIsIHVpbnQzMl90KQotVFlQRV9NRVRIT0RTKEludDY0LCAgaW50NjRfdCkK
LVRZUEVfTUVUSE9EUyhJbnQzMiwgIGludDMyX3QpCi1UWVBFX01FVEhPRFMoQm9vbCwgICBib29s
KQotI3VuZGVmIFRZUEVfTUVUSE9EUwotCi10ZW1wbGF0ZSA8Y2xhc3MgRj4gc3RydWN0IFJldHVy
bk9mOwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyPgotc3RydWN0IFJl
dHVybk9mPFIgKCopKFAxLCBQMik+IHsKLSAgdHlwZWRlZiBSIFJldHVybjsKLX07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBSLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzPgotc3RydWN0IFJldHVy
bk9mPFIgKCopKFAxLCBQMiwgUDMpPiB7Ci0gIHR5cGVkZWYgUiBSZXR1cm47Ci19OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgY2xhc3MgUDQ+Ci1z
dHJ1Y3QgUmV0dXJuT2Y8UiAoKikoUDEsIFAyLCBQMywgUDQpPiB7Ci0gIHR5cGVkZWYgUiBSZXR1
cm47Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQ
MywgY2xhc3MgUDQsIGNsYXNzIFA1Pgotc3RydWN0IFJldHVybk9mPFIgKCopKFAxLCBQMiwgUDMs
IFA0LCBQNSk+IHsKLSAgdHlwZWRlZiBSIFJldHVybjsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+
IGNvbnN0IHZvaWQgKlVuaXF1ZVB0ckZvclR5cGUoKSB7Ci0gIHN0YXRpYyBjb25zdCBjaGFyIGNo
ID0gMDsKLSAgcmV0dXJuICZjaDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci10ZW1wbGF0ZSA8
Y2xhc3MgRj4KLWlubGluZSBIYW5kbGVyPFQ+OjpIYW5kbGVyKEYgZnVuYykKLSAgICA6IHJlZ2lz
dGVyZWRfKGZhbHNlKSwKLSAgICAgIGNsZWFudXBfZGF0YV8oZnVuYy5HZXREYXRhKCkpLAotICAg
ICAgY2xlYW51cF9mdW5jXyhmdW5jLkdldENsZWFudXAoKSkgewotICB1cGJfaGFuZGxlcmF0dHJf
c2V0aGFuZGxlcmRhdGEoJmF0dHJfLCBmdW5jLkdldERhdGEoKSk7Ci0gIHR5cGVkZWYgdHlwZW5h
bWUgUmV0dXJuT2Y8VD46OlJldHVybiBSZXR1cm47Ci0gIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVy
dFBhcmFtczxGLCBUPjo6RnVuYyBDb252ZXJ0ZWRQYXJhbXNGdW5jOwotICB0eXBlZGVmIHR5cGVu
YW1lIE1heWJlV3JhcFJldHVybjxDb252ZXJ0ZWRQYXJhbXNGdW5jLCBSZXR1cm4+OjpGdW5jCi0g
ICAgICBSZXR1cm5XcmFwcGVkRnVuYzsKLSAgaGFuZGxlcl8gPSBSZXR1cm5XcmFwcGVkRnVuYygp
LkNhbGw7Ci0KLSAgLyogU2V0IGF0dHJpYnV0ZXMgYmFzZWQgb24gd2hhdCB0ZW1wbGF0ZXMgY2Fu
IHN0YXRpY2FsbHkgdGVsbCB1cyBhYm91dCB0aGUKLSAgICogdXNlcidzIGZ1bmN0aW9uLiAqLwot
Ci0gIC8qIElmIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiByZXR1cm5zIHZvaWQsIHRoZW4gd2Uga25v
dyB0aGF0IHdlIHdyYXBwZWQgaXQgdG8KLSAgICogYWx3YXlzIHJldHVybiBvay4gKi8KLSAgYm9v
bCBhbHdheXNfb2sgPSBpc19zYW1lPHR5cGVuYW1lIEY6OkZ1bmNJbmZvOjpSZXR1cm4sIHZvaWQ+
Ojp2YWx1ZTsKLSAgYXR0cl8uU2V0QWx3YXlzT2soYWx3YXlzX29rKTsKLQotICAvKiBDbG9zdXJl
IHBhcmFtZXRlciBhbmQgcmV0dXJuIHR5cGUuICovCi0gIGF0dHJfLlNldENsb3N1cmVUeXBlKFVu
aXF1ZVB0ckZvclR5cGU8dHlwZW5hbWUgRjo6RnVuY0luZm86OkNsb3N1cmU+KCkpOwotCi0gIC8q
IFdlIHVzZSB0aGUgY2xvc3VyZSB0eXBlIChmcm9tIHRoZSBmaXJzdCBwYXJhbWV0ZXIpIGlmIHRo
ZSByZXR1cm4gdHlwZSBpcwotICAgKiB2b2lkIG9yIGJvb2wsIHNpbmNlIHRoZXNlIGFyZSB0aGUg
dHdvIGNhc2VzIHdlIHdyYXAgdG8gcmV0dXJuIHRoZSBjbG9zdXJlJ3MKLSAgICogdHlwZSBhbnl3
YXkuCi0gICAqCi0gICAqIFRoaXMgaXMgYWxsIG5vbnNlbnNlIGZvciBub24gU1RBUlQqIGhhbmRs
ZXJzLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZQotICAgKiBpbiB0aGF0IGNhc2UgdGhl
IHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gKi8KLSAgdHlwZWRlZiB0eXBlbmFtZSBGaXJzdFVubGVz
c1ZvaWRPckJvb2w8dHlwZW5hbWUgRjo6RnVuY0luZm86OlJldHVybiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgRjo6RnVuY0luZm86OkNsb3N1cmU+
Ojp2YWx1ZQotICAgICAgRWZmZWN0aXZlUmV0dXJuOwotICBhdHRyXy5TZXRSZXR1cm5DbG9zdXJl
VHlwZShVbmlxdWVQdHJGb3JUeXBlPEVmZmVjdGl2ZVJldHVybj4oKSk7Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBUPgotaW5saW5lIEhhbmRsZXI8VD46On5IYW5kbGVyKCkgewotICBhc3NlcnQocmVn
aXN0ZXJlZF8pOwotfQotCi1pbmxpbmUgSGFuZGxlckF0dHJpYnV0ZXM6OkhhbmRsZXJBdHRyaWJ1
dGVzKCkgeyB1cGJfaGFuZGxlcmF0dHJfaW5pdCh0aGlzKTsgfQotaW5saW5lIEhhbmRsZXJBdHRy
aWJ1dGVzOjp+SGFuZGxlckF0dHJpYnV0ZXMoKSB7IHVwYl9oYW5kbGVyYXR0cl91bmluaXQodGhp
cyk7IH0KLWlubGluZSBib29sIEhhbmRsZXJBdHRyaWJ1dGVzOjpTZXRIYW5kbGVyRGF0YShjb25z
dCB2b2lkICpoZCkgewotICByZXR1cm4gdXBiX2hhbmRsZXJhdHRyX3NldGhhbmRsZXJkYXRhKHRo
aXMsIGhkKTsKLX0KLWlubGluZSBjb25zdCB2b2lkKiBIYW5kbGVyQXR0cmlidXRlczo6aGFuZGxl
cl9kYXRhKCkgY29uc3QgewotICByZXR1cm4gdXBiX2hhbmRsZXJhdHRyX2hhbmRsZXJkYXRhKHRo
aXMpOwotfQotaW5saW5lIGJvb2wgSGFuZGxlckF0dHJpYnV0ZXM6OlNldENsb3N1cmVUeXBlKGNv
bnN0IHZvaWQgKnR5cGUpIHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyYXR0cl9zZXRjbG9zdXJldHlw
ZSh0aGlzLCB0eXBlKTsKLX0KLWlubGluZSBjb25zdCB2b2lkKiBIYW5kbGVyQXR0cmlidXRlczo6
Y2xvc3VyZV90eXBlKCkgY29uc3QgewotICByZXR1cm4gdXBiX2hhbmRsZXJhdHRyX2Nsb3N1cmV0
eXBlKHRoaXMpOwotfQotaW5saW5lIGJvb2wgSGFuZGxlckF0dHJpYnV0ZXM6OlNldFJldHVybkNs
b3N1cmVUeXBlKGNvbnN0IHZvaWQgKnR5cGUpIHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyYXR0cl9z
ZXRyZXR1cm5jbG9zdXJldHlwZSh0aGlzLCB0eXBlKTsKLX0KLWlubGluZSBjb25zdCB2b2lkKiBI
YW5kbGVyQXR0cmlidXRlczo6cmV0dXJuX2Nsb3N1cmVfdHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJu
IHVwYl9oYW5kbGVyYXR0cl9yZXR1cm5jbG9zdXJldHlwZSh0aGlzKTsKLX0KLWlubGluZSBib29s
IEhhbmRsZXJBdHRyaWJ1dGVzOjpTZXRBbHdheXNPayhib29sIGFsd2F5c19vaykgewotICByZXR1
cm4gdXBiX2hhbmRsZXJhdHRyX3NldGFsd2F5c29rKHRoaXMsIGFsd2F5c19vayk7Ci19Ci1pbmxp
bmUgYm9vbCBIYW5kbGVyQXR0cmlidXRlczo6YWx3YXlzX29rKCkgY29uc3QgewotICByZXR1cm4g
dXBiX2hhbmRsZXJhdHRyX2Fsd2F5c29rKHRoaXMpOwotfQotCi1pbmxpbmUgQnVmZmVySGFuZGxl
OjpCdWZmZXJIYW5kbGUoKSB7IHVwYl9idWZoYW5kbGVfaW5pdCh0aGlzKTsgfQotaW5saW5lIEJ1
ZmZlckhhbmRsZTo6fkJ1ZmZlckhhbmRsZSgpIHsgdXBiX2J1ZmhhbmRsZV91bmluaXQodGhpcyk7
IH0KLWlubGluZSBjb25zdCBjaGFyKiBCdWZmZXJIYW5kbGU6OmJ1ZmZlcigpIGNvbnN0IHsKLSAg
cmV0dXJuIHVwYl9idWZoYW5kbGVfYnVmKHRoaXMpOwotfQotaW5saW5lIHNpemVfdCBCdWZmZXJI
YW5kbGU6Om9iamVjdF9vZmZzZXQoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfYnVmaGFuZGxlX29i
am9mcyh0aGlzKTsKLX0KLWlubGluZSB2b2lkIEJ1ZmZlckhhbmRsZTo6U2V0QnVmZmVyKGNvbnN0
IGNoYXIqIGJ1Ziwgc2l6ZV90IG9mcykgewotICB1cGJfYnVmaGFuZGxlX3NldGJ1Zih0aGlzLCBi
dWYsIG9mcyk7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgQnVmZmVySGFuZGxlOjpTZXRB
dHRhY2hlZE9iamVjdChjb25zdCBUKiBvYmopIHsKLSAgdXBiX2J1ZmhhbmRsZV9zZXRvYmoodGhp
cywgb2JqLCBVbmlxdWVQdHJGb3JUeXBlPFQ+KCkpOwotfQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1j
b25zdCBUKiBCdWZmZXJIYW5kbGU6OkdldEF0dGFjaGVkT2JqZWN0KCkgY29uc3QgewotICByZXR1
cm4gdXBiX2J1ZmhhbmRsZV9vYmp0eXBlKHRoaXMpID09IFVuaXF1ZVB0ckZvclR5cGU8VD4oKQot
ICAgICAgPyBzdGF0aWNfY2FzdDxjb25zdCBUICo+KHVwYl9idWZoYW5kbGVfb2JqKHRoaXMpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTDsKLX0KLQotaW5saW5lIHJlZmZl
ZF9wdHI8SGFuZGxlcnM+IEhhbmRsZXJzOjpOZXcoY29uc3QgTWVzc2FnZURlZiAqbSkgewotICB1
cGJfaGFuZGxlcnMgKmggPSB1cGJfaGFuZGxlcnNfbmV3KG0sICZoKTsKLSAgcmV0dXJuIHJlZmZl
ZF9wdHI8SGFuZGxlcnM+KGgsICZoKTsKLX0KLWlubGluZSByZWZmZWRfcHRyPGNvbnN0IEhhbmRs
ZXJzPiBIYW5kbGVyczo6TmV3RnJvemVuKAotICAgIGNvbnN0IE1lc3NhZ2VEZWYgKm0sIHVwYl9o
YW5kbGVyc19jYWxsYmFjayAqY2FsbGJhY2ssCi0gICAgY29uc3Qgdm9pZCAqY2xvc3VyZSkgewot
ICBjb25zdCB1cGJfaGFuZGxlcnMgKmggPSB1cGJfaGFuZGxlcnNfbmV3ZnJvemVuKG0sICZoLCBj
YWxsYmFjaywgY2xvc3VyZSk7Ci0gIHJldHVybiByZWZmZWRfcHRyPGNvbnN0IEhhbmRsZXJzPiho
LCAmaCk7Ci19Ci1pbmxpbmUgY29uc3QgU3RhdHVzKiBIYW5kbGVyczo6c3RhdHVzKCkgewotICBy
ZXR1cm4gdXBiX2hhbmRsZXJzX3N0YXR1cyh0aGlzKTsKLX0KLWlubGluZSB2b2lkIEhhbmRsZXJz
OjpDbGVhckVycm9yKCkgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX2NsZWFyZXJyKHRoaXMpOwot
fQotaW5saW5lIGJvb2wgSGFuZGxlcnM6OkZyZWV6ZShTdGF0dXMgKnMpIHsKLSAgdXBiOjpIYW5k
bGVycyogaCA9IHRoaXM7Ci0gIHJldHVybiB1cGJfaGFuZGxlcnNfZnJlZXplKCZoLCAxLCBzKTsK
LX0KLWlubGluZSBib29sIEhhbmRsZXJzOjpGcmVlemUoSGFuZGxlcnMgKmNvbnN0ICpoYW5kbGVy
cywgaW50IG4sIFN0YXR1cyAqcykgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX2ZyZWV6ZShoYW5k
bGVycywgbiwgcyk7Ci19Ci1pbmxpbmUgYm9vbCBIYW5kbGVyczo6RnJlZXplKGNvbnN0IHN0ZDo6
dmVjdG9yPEhhbmRsZXJzKj4mIGgsIFN0YXR1cyogc3RhdHVzKSB7Ci0gIHJldHVybiB1cGJfaGFu
ZGxlcnNfZnJlZXplKChIYW5kbGVycyogY29uc3QqKSZoWzBdLCBoLnNpemUoKSwgc3RhdHVzKTsK
LX0KLWlubGluZSBjb25zdCBNZXNzYWdlRGVmICpIYW5kbGVyczo6bWVzc2FnZV9kZWYoKSBjb25z
dCB7Ci0gIHJldHVybiB1cGJfaGFuZGxlcnNfbXNnZGVmKHRoaXMpOwotfQotaW5saW5lIGJvb2wg
SGFuZGxlcnM6OkFkZENsZWFudXAodm9pZCAqcCwgdXBiX2hhbmRsZXJmcmVlICpmdW5jKSB7Ci0g
IHJldHVybiB1cGJfaGFuZGxlcnNfYWRkY2xlYW51cCh0aGlzLCBwLCBmdW5jKTsKLX0KLWlubGlu
ZSBib29sIEhhbmRsZXJzOjpTZXRTdGFydE1lc3NhZ2VIYW5kbGVyKAotICAgIGNvbnN0IEhhbmRs
ZXJzOjpTdGFydE1lc3NhZ2VIYW5kbGVyICZoYW5kbGVyKSB7Ci0gIGFzc2VydCghaGFuZGxlci5y
ZWdpc3RlcmVkXyk7Ci0gIGhhbmRsZXIucmVnaXN0ZXJlZF8gPSB0cnVlOwotICBoYW5kbGVyLkFk
ZENsZWFudXAodGhpcyk7Ci0gIHJldHVybiB1cGJfaGFuZGxlcnNfc2V0c3RhcnRtc2codGhpcywg
aGFuZGxlci5oYW5kbGVyXywgJmhhbmRsZXIuYXR0cl8pOwotfQotaW5saW5lIGJvb2wgSGFuZGxl
cnM6OlNldEVuZE1lc3NhZ2VIYW5kbGVyKAotICAgIGNvbnN0IEhhbmRsZXJzOjpFbmRNZXNzYWdl
SGFuZGxlciAmaGFuZGxlcikgewotICBhc3NlcnQoIWhhbmRsZXIucmVnaXN0ZXJlZF8pOwotICBo
YW5kbGVyLnJlZ2lzdGVyZWRfID0gdHJ1ZTsKLSAgaGFuZGxlci5BZGRDbGVhbnVwKHRoaXMpOwot
ICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldGVuZG1zZyh0aGlzLCBoYW5kbGVyLmhhbmRsZXJfLCAm
aGFuZGxlci5hdHRyXyk7Ci19Ci1pbmxpbmUgYm9vbCBIYW5kbGVyczo6U2V0U3RhcnRTdHJpbmdI
YW5kbGVyKGNvbnN0IEZpZWxkRGVmICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdGFydFN0cmluZ0hhbmRsZXIgJmhhbmRsZXIpIHsKLSAgYXNz
ZXJ0KCFoYW5kbGVyLnJlZ2lzdGVyZWRfKTsKLSAgaGFuZGxlci5yZWdpc3RlcmVkXyA9IHRydWU7
Ci0gIGhhbmRsZXIuQWRkQ2xlYW51cCh0aGlzKTsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyc19zZXRz
dGFydHN0cih0aGlzLCBmLCBoYW5kbGVyLmhhbmRsZXJfLCAmaGFuZGxlci5hdHRyXyk7Ci19Ci1p
bmxpbmUgYm9vbCBIYW5kbGVyczo6U2V0RW5kU3RyaW5nSGFuZGxlcihjb25zdCBGaWVsZERlZiAq
ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVuZEZp
ZWxkSGFuZGxlciAmaGFuZGxlcikgewotICBhc3NlcnQoIWhhbmRsZXIucmVnaXN0ZXJlZF8pOwot
ICBoYW5kbGVyLnJlZ2lzdGVyZWRfID0gdHJ1ZTsKLSAgaGFuZGxlci5BZGRDbGVhbnVwKHRoaXMp
OwotICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldGVuZHN0cih0aGlzLCBmLCBoYW5kbGVyLmhhbmRs
ZXJfLCAmaGFuZGxlci5hdHRyXyk7Ci19Ci1pbmxpbmUgYm9vbCBIYW5kbGVyczo6U2V0U3RyaW5n
SGFuZGxlcihjb25zdCBGaWVsZERlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZ0hhbmRsZXImIGhhbmRsZXIpIHsKLSAgYXNzZXJ0KCFoYW5k
bGVyLnJlZ2lzdGVyZWRfKTsKLSAgaGFuZGxlci5yZWdpc3RlcmVkXyA9IHRydWU7Ci0gIGhhbmRs
ZXIuQWRkQ2xlYW51cCh0aGlzKTsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyc19zZXRzdHJpbmcodGhp
cywgZiwgaGFuZGxlci5oYW5kbGVyXywgJmhhbmRsZXIuYXR0cl8pOwotfQotaW5saW5lIGJvb2wg
SGFuZGxlcnM6OlNldFN0YXJ0U2VxdWVuY2VIYW5kbGVyKAotICAgIGNvbnN0IEZpZWxkRGVmICpm
LCBjb25zdCBTdGFydEZpZWxkSGFuZGxlciAmaGFuZGxlcikgewotICBhc3NlcnQoIWhhbmRsZXIu
cmVnaXN0ZXJlZF8pOwotICBoYW5kbGVyLnJlZ2lzdGVyZWRfID0gdHJ1ZTsKLSAgaGFuZGxlci5B
ZGRDbGVhbnVwKHRoaXMpOwotICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldHN0YXJ0c2VxKHRoaXMs
IGYsIGhhbmRsZXIuaGFuZGxlcl8sICZoYW5kbGVyLmF0dHJfKTsKLX0KLWlubGluZSBib29sIEhh
bmRsZXJzOjpTZXRTdGFydFN1Yk1lc3NhZ2VIYW5kbGVyKAotICAgIGNvbnN0IEZpZWxkRGVmICpm
LCBjb25zdCBTdGFydEZpZWxkSGFuZGxlciAmaGFuZGxlcikgewotICBhc3NlcnQoIWhhbmRsZXIu
cmVnaXN0ZXJlZF8pOwotICBoYW5kbGVyLnJlZ2lzdGVyZWRfID0gdHJ1ZTsKLSAgaGFuZGxlci5B
ZGRDbGVhbnVwKHRoaXMpOwotICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldHN0YXJ0c3VibXNnKHRo
aXMsIGYsIGhhbmRsZXIuaGFuZGxlcl8sICZoYW5kbGVyLmF0dHJfKTsKLX0KLWlubGluZSBib29s
IEhhbmRsZXJzOjpTZXRFbmRTdWJNZXNzYWdlSGFuZGxlcihjb25zdCBGaWVsZERlZiAqZiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFbmRGaWVs
ZEhhbmRsZXIgJmhhbmRsZXIpIHsKLSAgYXNzZXJ0KCFoYW5kbGVyLnJlZ2lzdGVyZWRfKTsKLSAg
aGFuZGxlci5yZWdpc3RlcmVkXyA9IHRydWU7Ci0gIGhhbmRsZXIuQWRkQ2xlYW51cCh0aGlzKTsK
LSAgcmV0dXJuIHVwYl9oYW5kbGVyc19zZXRlbmRzdWJtc2codGhpcywgZiwgaGFuZGxlci5oYW5k
bGVyXywgJmhhbmRsZXIuYXR0cl8pOwotfQotaW5saW5lIGJvb2wgSGFuZGxlcnM6OlNldEVuZFNl
cXVlbmNlSGFuZGxlcihjb25zdCBGaWVsZERlZiAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW5kRmllbGRIYW5kbGVyICZoYW5kbGVyKSB7Ci0g
IGFzc2VydCghaGFuZGxlci5yZWdpc3RlcmVkXyk7Ci0gIGhhbmRsZXIucmVnaXN0ZXJlZF8gPSB0
cnVlOwotICBoYW5kbGVyLkFkZENsZWFudXAodGhpcyk7Ci0gIHJldHVybiB1cGJfaGFuZGxlcnNf
c2V0ZW5kc2VxKHRoaXMsIGYsIGhhbmRsZXIuaGFuZGxlcl8sICZoYW5kbGVyLmF0dHJfKTsKLX0K
LWlubGluZSBib29sIEhhbmRsZXJzOjpTZXRTdWJIYW5kbGVycyhjb25zdCBGaWVsZERlZiAqZiwg
Y29uc3QgSGFuZGxlcnMgKnN1YikgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX3NldHN1YmhhbmRs
ZXJzKHRoaXMsIGYsIHN1Yik7Ci19Ci1pbmxpbmUgY29uc3QgSGFuZGxlcnMgKkhhbmRsZXJzOjpH
ZXRTdWJIYW5kbGVycyhjb25zdCBGaWVsZERlZiAqZikgY29uc3QgewotICByZXR1cm4gdXBiX2hh
bmRsZXJzX2dldHN1YmhhbmRsZXJzKHRoaXMsIGYpOwotfQotaW5saW5lIGNvbnN0IEhhbmRsZXJz
ICpIYW5kbGVyczo6R2V0U3ViSGFuZGxlcnMoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCkgY29uc3Qg
ewotICByZXR1cm4gdXBiX2hhbmRsZXJzX2dldHN1YmhhbmRsZXJzX3NlbCh0aGlzLCBzZWwpOwot
fQotaW5saW5lIGJvb2wgSGFuZGxlcnM6OkdldFNlbGVjdG9yKGNvbnN0IEZpZWxkRGVmICpmLCBI
YW5kbGVyczo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhh
bmRsZXJzOjpTZWxlY3RvciAqcykgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX2dldHNlbGVjdG9y
KGYsIHR5cGUsIHMpOwotfQotaW5saW5lIEhhbmRsZXJzOjpTZWxlY3RvciBIYW5kbGVyczo6R2V0
RW5kU2VsZWN0b3IoSGFuZGxlcnM6OlNlbGVjdG9yIHN0YXJ0KSB7Ci0gIHJldHVybiB1cGJfaGFu
ZGxlcnNfZ2V0ZW5kc2VsZWN0b3Ioc3RhcnQpOwotfQotaW5saW5lIEhhbmRsZXJzOjpHZW5lcmlj
RnVuY3Rpb24gKkhhbmRsZXJzOjpHZXRIYW5kbGVyKAotICAgIEhhbmRsZXJzOjpTZWxlY3RvciBz
ZWxlY3RvcikgewotICByZXR1cm4gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXIodGhpcywgc2VsZWN0
b3IpOwotfQotaW5saW5lIGNvbnN0IHZvaWQgKkhhbmRsZXJzOjpHZXRIYW5kbGVyRGF0YShIYW5k
bGVyczo6U2VsZWN0b3Igc2VsZWN0b3IpIHsKLSAgcmV0dXJuIHVwYl9oYW5kbGVyc19nZXRoYW5k
bGVyZGF0YSh0aGlzLCBzZWxlY3Rvcik7Ci19Ci0KLWlubGluZSBCeXRlc0hhbmRsZXI6OkJ5dGVz
SGFuZGxlcigpIHsKLSAgdXBiX2J5dGVzaGFuZGxlcl9pbml0KHRoaXMpOwotfQotCi1pbmxpbmUg
Qnl0ZXNIYW5kbGVyOjp+Qnl0ZXNIYW5kbGVyKCkge30KLQotfSAgLyogbmFtZXNwYWNlIHVwYiAq
LwotCi0jZW5kaWYgIC8qIF9fY3BsdXNwbHVzICovCi0KLQotI3VuZGVmIFVQQl9UV09fMzJCSVRf
VFlQRVMKLSN1bmRlZiBVUEJfVFdPXzY0QklUX1RZUEVTCi0jdW5kZWYgVVBCX0lOVDMyX1QKLSN1
bmRlZiBVUEJfVUlOVDMyX1QKLSN1bmRlZiBVUEJfSU5UMzJBTFRfVAotI3VuZGVmIFVQQl9VSU5U
MzJBTFRfVAotI3VuZGVmIFVQQl9JTlQ2NF9UCi0jdW5kZWYgVVBCX1VJTlQ2NF9UCi0jdW5kZWYg
VVBCX0lOVDY0QUxUX1QKLSN1bmRlZiBVUEJfVUlOVDY0QUxUX1QKLQotI2VuZGlmICAvKiBVUEJf
SEFORExFUlNfSU5MX0hfICovCi0KLSNlbmRpZiAgLyogVVBCX0hBTkRMRVJTX0ggKi8KLS8qCi0q
KiB1cGI6OlNpbmsgKHVwYl9zaW5rKQotKiogdXBiOjpCeXRlc1NpbmsgKHVwYl9ieXRlc3Npbmsp
Ci0qKgotKiogQSB1cGJfc2luayBpcyBhbiBvYmplY3QgdGhhdCBiaW5kcyBhIHVwYl9oYW5kbGVy
cyBvYmplY3QgdG8gc29tZSBydW50aW1lCi0qKiBzdGF0ZS4gIEl0IGlzIHRoZSBvYmplY3QgdGhh
dCBjYW4gYWN0dWFsbHkgcmVjZWl2ZSBkYXRhIHZpYSB0aGUgdXBiX2hhbmRsZXJzCi0qKiBpbnRl
cmZhY2UuCi0qKgotKiogVW5saWtlIHVwYl9kZWYgYW5kIHVwYl9oYW5kbGVycywgdXBiX3Npbmsg
aXMgbmV2ZXIgZnJvemVuLCBpbW11dGFibGUsIG9yCi0qKiB0aHJlYWQtc2FmZS4gIFlvdSBjYW4g
Y3JlYXRlIGFzIG1hbnkgb2YgdGhlbSBhcyB5b3Ugd2FudCwgYnV0IGVhY2ggb25lIG1heQotKiog
b25seSBiZSB1c2VkIGluIGEgc2luZ2xlIHRocmVhZCBhdCBhIHRpbWUuCi0qKgotKiogSWYgd2Ug
Y29tcGFyZSB3aXRoIGNsYXNzLWJhc2VkIE9PUCwgYSB5b3UgY2FuIHRoaW5rIG9mIGEgdXBiX2Rl
ZiBhcyBhbgotKiogYWJzdHJhY3QgYmFzZSBjbGFzcywgYSB1cGJfaGFuZGxlcnMgYXMgYSBjb25j
cmV0ZSBkZXJpdmVkIGNsYXNzLCBhbmQgYQotKiogdXBiX3NpbmsgYXMgYW4gb2JqZWN0IChjbGFz
cyBpbnN0YW5jZSkuCi0qLwotCi0jaWZuZGVmIFVQQl9TSU5LX0gKLSNkZWZpbmUgVVBCX1NJTktf
SAotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotbmFtZXNwYWNlIHVwYiB7Ci1jbGFzcyBCdWZmZXJT
b3VyY2U7Ci1jbGFzcyBCeXRlc1Npbms7Ci1jbGFzcyBTaW5rOwotfQotI2VuZGlmCi0KLVVQQl9E
RUNMQVJFX1RZUEUodXBiOjpCdWZmZXJTb3VyY2UsIHVwYl9idWZzcmMpCi1VUEJfREVDTEFSRV9U
WVBFKHVwYjo6Qnl0ZXNTaW5rLCB1cGJfYnl0ZXNzaW5rKQotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6
OlNpbmssIHVwYl9zaW5rKQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogQSB1cGI6OlNpbmsg
aXMgYW4gb2JqZWN0IHRoYXQgYmluZHMgYSB1cGI6OkhhbmRsZXJzIG9iamVjdCB0byBzb21lIHJ1
bnRpbWUKLSAqIHN0YXRlLiAgSXQgcmVwcmVzZW50cyBhbiBlbmRwb2ludCB0byB3aGljaCBkYXRh
IGNhbiBiZSBzZW50LgotICoKLSAqIFRPRE8oaGFiZXJtYW4pOiByaWdodCBub3cgYWxsIG9mIHRo
ZXNlIGZ1bmN0aW9ucyB0YWtlIHNlbGVjdG9ycy4gIFNob3VsZCB0aGV5Ci0gKiB0YWtlIHNlbGVj
dG9yYmFzZSBpbnN0ZWFkPwotICoKLSAqIGllLiBpbnN0ZWFkIG9mIGNhbGxpbmc6Ci0gKiAgIHNp
bmstPlN0YXJ0U3RyaW5nKEZPT19GSUVMRF9TVEFSVF9TVFJJTkcsIC4uLikKLSAqIGEgc2VsZWN0
b3IgYmFzZSB3b3VsZCBsZXQgeW91IHNheToKLSAqICAgc2luay0+U3RhcnRTdHJpbmcoRk9PX0ZJ
RUxELCAuLi4pCi0gKgotICogVGhpcyB3b3VsZCBtYWtlIGNhbGwgc2l0ZXMgYSBsaXR0bGUgbmlj
ZXIgYW5kIHJlcXVpcmUgZW1pdHRpbmcgZmV3ZXIgc2VsZWN0b3IKLSAqIGRlZmluaXRpb25zIGlu
IC5oIGZpbGVzLgotICoKLSAqIEJ1dCB0aGUgY3VycmVudCBzY2hlbWUgaGFzIHRoZSBiZW5lZml0
IHRoYXQgeW91IGNhbiByZXRyaWV2ZSBhIGZ1bmN0aW9uCi0gKiBwb2ludGVyIGZvciBhbnkgaGFu
ZGxlciB3aXRoIGhhbmRsZXJzLT5HZXRIYW5kbGVyKHNlbGVjdG9yKSwgd2l0aG91dCBoYXZpbmcK
LSAqIHRvIGhhdmUgYSBzZXBhcmF0ZSBHZXRIYW5kbGVyKCkgZnVuY3Rpb24gZm9yIGVhY2ggaGFu
ZGxlciB0eXBlLiAgVGhlIEpJVAotICogY29tcGlsZXIgdXNlcyB0aGlzLiAgVG8gYWNjb21tb2Rh
dGUgd2UnZCBoYXZlIHRvIGV4cG9zZSBhIHNlcGFyYXRlCi0gKiBHZXRIYW5kbGVyKCkgZm9yIGV2
ZXJ5IGhhbmRsZXIgdHlwZS4KLSAqCi0gKiBBbHNvIHRvIHBvbmRlcjogc2VsZWN0b3JzIHJpZ2h0
IG5vdyBhcmUgaW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYyBIYW5kbGVycwotICogaW5zdGFuY2Uu
ICBJbiBvdGhlciB3b3JkcywgdGhleSBhbGxvY2F0ZSBhIG51bWJlciB0byBldmVyeSBwb3NzaWJs
ZSBoYW5kbGVyCi0gKiB0aGF0ICpjb3VsZCogYmUgcmVnaXN0ZXJlZCwgd2l0aG91dCBrbm93aW5n
IGFueXRoaW5nIGFib3V0IHdoYXQgaGFuZGxlcnMKLSAqICphcmUqIHJlZ2lzdGVyZWQuICBUaGF0
IG1lYW5zIHRoYXQgdXNpbmcgc2VsZWN0b3JzIGFzIHRhYmxlIG9mZnNldHMgcHJvaGliaXRzCi0g
KiB1cyBmcm9tIGNvbXBhY3RpbmcgdGhlIGhhbmRsZXIgdGFibGUgYXQgRnJlZXplKCkgdGltZS4g
IElmIHRoZSB0YWJsZSBpcyB2ZXJ5Ci0gKiBzcGFyc2UsIHRoaXMgY291bGQgYmUgd2FzdGVmdWwu
Ci0gKgotICogSGF2aW5nIGFub3RoZXIgc2VsZWN0b3ItbGlrZSB0aGluZyB0aGF0IGlzIHNwZWNp
ZmljIHRvIGEgSGFuZGxlcnMgaW5zdGFuY2UKLSAqIHdvdWxkIGFsbG93IHRoaXMgY29tcGFjdGlu
ZywgYnV0IHRoZW4gaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byB3cml0ZSBjb2RlCi0gKiBhaGVh
ZC1vZi10aW1lIHRoYXQgY2FuIGJlIGJvdW5kIHRvIGFueSBIYW5kbGVycyBpbnN0YW5jZSBhdCBy
dW50aW1lLiAgRm9yCi0gKiBleGFtcGxlLCBhIC5wcm90byBmaWxlIHBhcnNlciB3cml0dGVuIGFz
IHN0cmFpZ2h0IEMgd2lsbCBub3Qga25vdyB3aGF0Ci0gKiBIYW5kbGVycyBpdCB3aWxsIGJlIGJv
dW5kIHRvLCBzbyB3aGVuIGl0IGNhbGxzIHNpbmstPlN0YXJ0U3RyaW5nKCkgd2hhdAotICogc2Vs
ZWN0b3Igd2lsbCBpdCBwYXNzPyAgSXQgbmVlZHMgYSBzZWxlY3RvciBsaWtlIHdlIGhhdmUgdG9k
YXksIHRoYXQgaXMKLSAqIGluZGVwZW5kZW50IG9mIGFueSBwYXJ0aWN1bGFyIHVwYjo6SGFuZGxl
cnMuCi0gKgotICogSXMgdGhlcmUgYSB3YXkgdGhlbiB0byBhbGxvdyBIYW5kbGVycyB0YWJsZSBj
b21wYWN0aW9uPyAqLwotY2xhc3MgdXBiOjpTaW5rIHsKLSBwdWJsaWM6Ci0gIC8qIENvbnN0cnVj
dG9yIHdpdGggbm8gaW5pdGlhbGl6YXRpb247IG11c3QgYmUgUmVzZXQoKSBiZWZvcmUgdXNlLiAq
LwotICBTaW5rKCkge30KLQotICAvKiBDb25zdHJ1Y3RzIGEgbmV3IHNpbmsgZm9yIHRoZSBnaXZl
biBmcm96ZW4gaGFuZGxlcnMgYW5kIGNsb3N1cmUuCi0gICAqCi0gICAqIFRPRE86IG9uY2UgdGhl
IEhhbmRsZXJzIGtub3cgdGhlIGV4cGVjdGVkIGNsb3N1cmUgdHlwZSwgdmVyaWZ5IHRoYXQgVAot
ICAgKiBtYXRjaGVzIGl0LiAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gU2luayhjb25zdCBIYW5k
bGVycyogaGFuZGxlcnMsIFQqIGNsb3N1cmUpOwotCi0gIC8qIFJlc2V0cyB0aGUgdmFsdWUgb2Yg
dGhlIHNpbmsuICovCi0gIHRlbXBsYXRlIDxjbGFzcyBUPiB2b2lkIFJlc2V0KGNvbnN0IEhhbmRs
ZXJzKiBoYW5kbGVycywgVCogY2xvc3VyZSk7Ci0KLSAgLyogUmV0dXJucyB0aGUgdG9wLWxldmVs
IG9iamVjdCB0aGF0IGlzIGJvdW5kIHRvIHRoaXMgc2luay4KLSAgICoKLSAgICogVE9ETzogb25j
ZSB0aGUgSGFuZGxlcnMga25vdyB0aGUgZXhwZWN0ZWQgY2xvc3VyZSB0eXBlLCB2ZXJpZnkgdGhh
dCBUCi0gICAqIG1hdGNoZXMgaXQuICovCi0gIHRlbXBsYXRlIDxjbGFzcyBUPiBUKiBHZXRPYmpl
Y3QoKSBjb25zdDsKLQotICAvKiBGdW5jdGlvbnMgZm9yIHB1c2hpbmcgZGF0YSBpbnRvIHRoZSBz
aW5rLgotICAgKgotICAgKiBUaGVzZSByZXR1cm4gZmFsc2UgaWYgcHJvY2Vzc2luZyBzaG91bGQg
c3RvcCAoZWl0aGVyIGR1ZSB0byBlcnJvciBvciBqdXN0Ci0gICAqIHRvIHN1c3BlbmQpLgotICAg
KgotICAgKiBUaGVzZSBtYXkgbm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBvbmUgb2YgdGhlIHNh
bWUgc2luaydzIGhhbmRsZXJzIChpbgotICAgKiBvdGhlciB3b3JkcywgaGFuZGxlcnMgYXJlIG5v
dCByZS1lbnRyYW50KS4gKi8KLQotICAvKiBTaG91bGQgYmUgY2FsbGVkIGF0IHRoZSBzdGFydCBh
bmQgZW5kIG9mIGV2ZXJ5IG1lc3NhZ2U7IGJvdGggdGhlIHRvcC1sZXZlbAotICAgKiBtZXNzYWdl
IGFuZCBzdWJtZXNzYWdlcy4gIFRoaXMgbWVhbnMgdGhhdCBzdWJtZXNzYWdlcyBzaG91bGQgdXNl
IHRoZQotICAgKiBmb2xsb3dpbmcgc2VxdWVuY2U6Ci0gICAqICAgc2luay0+U3RhcnRTdWJNZXNz
YWdlKHN0YXJ0c3VibXNnX3NlbGVjdG9yKTsKLSAgICogICBzaW5rLT5TdGFydE1lc3NhZ2UoKTsK
LSAgICogICAvLyAuLi4KLSAgICogICBzaW5rLT5FbmRNZXNzYWdlKCZzdGF0dXMpOwotICAgKiAg
IHNpbmstPkVuZFN1Yk1lc3NhZ2UoZW5kc3VibXNnX3NlbGVjdG9yKTsgKi8KLSAgYm9vbCBTdGFy
dE1lc3NhZ2UoKTsKLSAgYm9vbCBFbmRNZXNzYWdlKFN0YXR1cyogc3RhdHVzKTsKLQotICAvKiBQ
dXR0aW5nIG9mIGluZGl2aWR1YWwgdmFsdWVzLiAgVGhlc2Ugd29yayBmb3IgYm90aCByZXBlYXRl
ZCBhbmQKLSAgICogbm9uLXJlcGVhdGVkIGZpZWxkcywgYnV0IGZvciByZXBlYXRlZCBmaWVsZHMg
eW91IG11c3Qgd3JhcCB0aGVtIGluCi0gICAqIGNhbGxzIHRvIFN0YXJ0U2VxdWVuY2UoKS9FbmRT
ZXF1ZW5jZSgpLiAqLwotICBib29sIFB1dEludDMyKEhhbmRsZXJzOjpTZWxlY3RvciBzLCBpbnQz
Ml90IHZhbCk7Ci0gIGJvb2wgUHV0SW50NjQoSGFuZGxlcnM6OlNlbGVjdG9yIHMsIGludDY0X3Qg
dmFsKTsKLSAgYm9vbCBQdXRVSW50MzIoSGFuZGxlcnM6OlNlbGVjdG9yIHMsIHVpbnQzMl90IHZh
bCk7Ci0gIGJvb2wgUHV0VUludDY0KEhhbmRsZXJzOjpTZWxlY3RvciBzLCB1aW50NjRfdCB2YWwp
OwotICBib29sIFB1dEZsb2F0KEhhbmRsZXJzOjpTZWxlY3RvciBzLCBmbG9hdCB2YWwpOwotICBi
b29sIFB1dERvdWJsZShIYW5kbGVyczo6U2VsZWN0b3IgcywgZG91YmxlIHZhbCk7Ci0gIGJvb2wg
UHV0Qm9vbChIYW5kbGVyczo6U2VsZWN0b3IgcywgYm9vbCB2YWwpOwotCi0gIC8qIFB1dHRpbmcg
b2Ygc3RyaW5nL2J5dGVzIHZhbHVlcy4gIEVhY2ggc3RyaW5nIGNhbiBjb25zaXN0IG9mIHplcm8g
b3IgbW9yZQotICAgKiBub24tY29udGlndW91cyBidWZmZXJzIG9mIGRhdGEuCi0gICAqCi0gICAq
IEZvciBTdGFydFN0cmluZygpLCB0aGUgZnVuY3Rpb24gd2lsbCB3cml0ZSBhIHNpbmsgZm9yIHRo
ZSBzdHJpbmcgdG8gInN1Yi4iCi0gICAqIFRoZSBzdWItc2luayBtdXN0IGJlIHVzZWQgZm9yIGFu
eS9hbGwgUHV0U3RyaW5nQnVmZmVyKCkgY2FsbHMuICovCi0gIGJvb2wgU3RhcnRTdHJpbmcoSGFu
ZGxlcnM6OlNlbGVjdG9yIHMsIHNpemVfdCBzaXplX2hpbnQsIFNpbmsqIHN1Yik7Ci0gIHNpemVf
dCBQdXRTdHJpbmdCdWZmZXIoSGFuZGxlcnM6OlNlbGVjdG9yIHMsIGNvbnN0IGNoYXIgKmJ1Ziwg
c2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZmZXJIYW5kbGUg
KmhhbmRsZSk7Ci0gIGJvb2wgRW5kU3RyaW5nKEhhbmRsZXJzOjpTZWxlY3RvciBzKTsKLQotICAv
KiBGb3Igc3VibWVzc2FnZSBmaWVsZHMuCi0gICAqCi0gICAqIEZvciBTdGFydFN1Yk1lc3NhZ2Uo
KSwgdGhlIGZ1bmN0aW9uIHdpbGwgd3JpdGUgYSBzaW5rIGZvciB0aGUgc3RyaW5nIHRvCi0gICAq
ICJzdWIuIiBUaGUgc3ViLXNpbmsgbXVzdCBiZSB1c2VkIGZvciBhbnkvYWxsIGhhbmRsZXJzIGNh
bGxlZCB3aXRoaW4gdGhlCi0gICAqIHN1Ym1lc3NhZ2UuICovCi0gIGJvb2wgU3RhcnRTdWJNZXNz
YWdlKEhhbmRsZXJzOjpTZWxlY3RvciBzLCBTaW5rKiBzdWIpOwotICBib29sIEVuZFN1Yk1lc3Nh
Z2UoSGFuZGxlcnM6OlNlbGVjdG9yIHMpOwotCi0gIC8qIEZvciByZXBlYXRlZCBmaWVsZHMgb2Yg
YW55IHR5cGUsIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgbXVzdCBiZSB3cmFwcGVkIGluCi0gICAq
IHRoZXNlIGNhbGxzLgotICAgKgotICAgKiBGb3IgU3RhcnRTZXF1ZW5jZSgpLCB0aGUgZnVuY3Rp
b24gd2lsbCB3cml0ZSBhIHNpbmsgZm9yIHRoZSBzdHJpbmcgdG8KLSAgICogInN1Yi4iIFRoZSBz
dWItc2luayBtdXN0IGJlIHVzZWQgZm9yIGFueS9hbGwgaGFuZGxlcnMgY2FsbGVkIHdpdGhpbiB0
aGUKLSAgICogc2VxdWVuY2UuICovCi0gIGJvb2wgU3RhcnRTZXF1ZW5jZShIYW5kbGVyczo6U2Vs
ZWN0b3IgcywgU2luayogc3ViKTsKLSAgYm9vbCBFbmRTZXF1ZW5jZShIYW5kbGVyczo6U2VsZWN0
b3Igcyk7Ci0KLSAgLyogQ29weSBhbmQgYXNzaWduIHNwZWNpZmljYWxseSBhbGxvd2VkLgotICAg
KiBXZSBkb24ndCBldmVuIGJvdGhlciBtYWtpbmcgdGhlc2UgbWVtYmVycyBwcml2YXRlIGJlY2F1
c2Ugc28gbWFueQotICAgKiBmdW5jdGlvbnMgbmVlZCB0aGVtIGFuZCB0aGlzIGlzIG1haW5seSBq
dXN0IGEgZHVtYiBkYXRhIGNvbnRhaW5lciBhbnl3YXkuCi0gICAqLwotI2Vsc2UKLXN0cnVjdCB1
cGJfc2luayB7Ci0jZW5kaWYKLSAgY29uc3QgdXBiX2hhbmRsZXJzICpoYW5kbGVyczsKLSAgdm9p
ZCAqY2xvc3VyZTsKLX07Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotY2xhc3MgdXBiOjpCeXRlc1Np
bmsgewotIHB1YmxpYzoKLSAgQnl0ZXNTaW5rKCkge30KLQotICAvKiBDb25zdHJ1Y3RzIGEgbmV3
IHNpbmsgZm9yIHRoZSBnaXZlbiBmcm96ZW4gaGFuZGxlcnMgYW5kIGNsb3N1cmUuCi0gICAqCi0g
ICAqIFRPRE8oaGFiZXJtYW4pOiBvbmNlIHRoZSBIYW5kbGVycyBrbm93IHRoZSBleHBlY3RlZCBj
bG9zdXJlIHR5cGUsIHZlcmlmeQotICAgKiB0aGF0IFQgbWF0Y2hlcyBpdC4gKi8KLSAgdGVtcGxh
dGUgPGNsYXNzIFQ+IEJ5dGVzU2luayhjb25zdCBCeXRlc0hhbmRsZXIqIGhhbmRsZXIsIFQqIGNs
b3N1cmUpOwotCi0gIC8qIFJlc2V0cyB0aGUgdmFsdWUgb2YgdGhlIHNpbmsuICovCi0gIHRlbXBs
YXRlIDxjbGFzcyBUPiB2b2lkIFJlc2V0KGNvbnN0IEJ5dGVzSGFuZGxlciogaGFuZGxlciwgVCog
Y2xvc3VyZSk7Ci0KLSAgYm9vbCBTdGFydChzaXplX3Qgc2l6ZV9oaW50LCB2b2lkICoqc3ViYyk7
Ci0gIHNpemVfdCBQdXRCdWZmZXIodm9pZCAqc3ViYywgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qg
bGVuLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlckhhbmRsZSAqaGFuZGxlKTsKLSAg
Ym9vbCBFbmQoKTsKLSNlbHNlCi1zdHJ1Y3QgdXBiX2J5dGVzc2luayB7Ci0jZW5kaWYKLSAgY29u
c3QgdXBiX2J5dGVzaGFuZGxlciAqaGFuZGxlcjsKLSAgdm9pZCAqY2xvc3VyZTsKLX07Ci0KLSNp
ZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBBIGNsYXNzIGZvciBwdXNoaW5nIGEgZmxhdCBidWZmZXIg
b2YgZGF0YSB0byBhIEJ5dGVzU2luay4KLSAqIFlvdSBjYW4gY29uc3RydWN0IGFuIGluc3RhbmNl
IG9mIHRoaXMgdG8gZ2V0IGEgcmVzdW1hYmxlIHNvdXJjZSwKLSAqIG9yIGp1c3QgY2FsbCB0aGUg
c3RhdGljIFB1dEJ1ZmZlcigpIHRvIGRvIGEgbm9uLXJlc3VtYWJsZSBwdXNoIGFsbCBpbiBvbmUK
LSAqIGdvLiAqLwotY2xhc3MgdXBiOjpCdWZmZXJTb3VyY2UgewotIHB1YmxpYzoKLSAgQnVmZmVy
U291cmNlKCk7Ci0gIEJ1ZmZlclNvdXJjZShjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4sIEJ5
dGVzU2luayogc2luayk7Ci0KLSAgLyogUmV0dXJucyB0cnVlIGlmIHRoZSBlbnRpcmUgYnVmZmVy
IHdhcyBwdXNoZWQgc3VjY2Vzc2Z1bGx5LiAgT3RoZXJ3aXNlIHRoZQotICAgKiBuZXh0IGNhbGwg
dG8gUHV0TmV4dCgpIHdpbGwgcmVzdW1lIHdoZXJlIHRoZSBwcmV2aW91cyBvbmUgbGVmdCBvZmYu
Ci0gICAqIFRPRE8oaGFiZXJtYW4pOiBpbXBsZW1lbnQgdGhpcy4gKi8KLSAgYm9vbCBQdXROZXh0
KCk7Ci0KLSAgLyogQSBzdGF0aWMgdmVyc2lvbjsgd2l0aCB0aGlzIHZlcnNpb24gaXMgaXQgbm90
IHBvc3NpYmxlIHRvIHJlc3VtZSBpbiB0aGUKLSAgICogY2FzZSBvZiBmYWlsdXJlIG9yIGEgcGFy
dGlhbGx5LWNvbnN1bWVkIGJ1ZmZlci4gKi8KLSAgc3RhdGljIGJvb2wgUHV0QnVmZmVyKGNvbnN0
IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbiwgQnl0ZXNTaW5rKiBzaW5rKTsKLQotICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gc3RhdGljIGJvb2wgUHV0QnVmZmVyKGNvbnN0IFQmIHN0ciwgQnl0ZXNTaW5rKiBz
aW5rKSB7Ci0gICAgcmV0dXJuIFB1dEJ1ZmZlcihzdHIuY19zdHIoKSwgc3RyLnNpemUoKSwgc2lu
ayk7Ci0gIH0KLSNlbHNlCi1zdHJ1Y3QgdXBiX2J1ZnNyYyB7Ci0gIGNoYXIgZHVtbXk7Ci0jZW5k
aWYKLX07Ci0KLVVQQl9CRUdJTl9FWFRFUk5fQwotCi0vKiBJbmxpbmUgZGVmaW5pdGlvbnMuICov
Ci0KLVVQQl9JTkxJTkUgdm9pZCB1cGJfYnl0ZXNzaW5rX3Jlc2V0KHVwYl9ieXRlc3NpbmsgKnMs
IGNvbnN0IHVwYl9ieXRlc2hhbmRsZXIgKmgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpjbG9zdXJlKSB7Ci0gIHMtPmhhbmRsZXIgPSBoOwotICBzLT5jbG9zdXJl
ID0gY2xvc3VyZTsKLX0KLQotVVBCX0lOTElORSBib29sIHVwYl9ieXRlc3Npbmtfc3RhcnQodXBi
X2J5dGVzc2luayAqcywgc2l6ZV90IHNpemVfaGludCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKipzdWJjKSB7Ci0gIHR5cGVkZWYgdXBiX3N0YXJ0c3RyX2hhbmRs
ZXJmdW5jIGZ1bmM7Ci0gIGZ1bmMgKnN0YXJ0OwotICAqc3ViYyA9IHMtPmNsb3N1cmU7Ci0gIGlm
ICghcy0+aGFuZGxlcikgcmV0dXJuIHRydWU7Ci0gIHN0YXJ0ID0gKGZ1bmMgKilzLT5oYW5kbGVy
LT50YWJsZVtVUEJfU1RBUlRTVFJfU0VMRUNUT1JdLmZ1bmM7Ci0KLSAgaWYgKCFzdGFydCkgcmV0
dXJuIHRydWU7Ci0gICpzdWJjID0gc3RhcnQocy0+Y2xvc3VyZSwgdXBiX2hhbmRsZXJhdHRyX2hh
bmRsZXJkYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+aGFuZGxlci0+
dGFibGVbVVBCX1NUQVJUU1RSX1NFTEVDVE9SXS5hdHRyKSwKLSAgICAgICAgICAgICAgICBzaXpl
X2hpbnQpOwotICByZXR1cm4gKnN1YmMgIT0gTlVMTDsKLX0KLQotVVBCX0lOTElORSBzaXplX3Qg
dXBiX2J5dGVzc2lua19wdXRidWYodXBiX2J5dGVzc2luayAqcywgdm9pZCAqc3ViYywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90
IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGJf
YnVmaGFuZGxlKiBoYW5kbGUpIHsKLSAgdHlwZWRlZiB1cGJfc3RyaW5nX2hhbmRsZXJmdW5jIGZ1
bmM7Ci0gIGZ1bmMgKnB1dGJ1ZjsKLSAgaWYgKCFzLT5oYW5kbGVyKSByZXR1cm4gdHJ1ZTsKLSAg
cHV0YnVmID0gKGZ1bmMgKilzLT5oYW5kbGVyLT50YWJsZVtVUEJfU1RSSU5HX1NFTEVDVE9SXS5m
dW5jOwotCi0gIGlmICghcHV0YnVmKSByZXR1cm4gdHJ1ZTsKLSAgcmV0dXJuIHB1dGJ1ZihzdWJj
LCB1cGJfaGFuZGxlcmF0dHJfaGFuZGxlcmRhdGEoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICZzLT5oYW5kbGVyLT50YWJsZVtVUEJfU1RSSU5HX1NFTEVDVE9SXS5hdHRyKSwKLSAgICAgICAg
ICAgICAgICBidWYsIHNpemUsIGhhbmRsZSk7Ci19Ci0KLVVQQl9JTkxJTkUgYm9vbCB1cGJfYnl0
ZXNzaW5rX2VuZCh1cGJfYnl0ZXNzaW5rICpzKSB7Ci0gIHR5cGVkZWYgdXBiX2VuZGZpZWxkX2hh
bmRsZXJmdW5jIGZ1bmM7Ci0gIGZ1bmMgKmVuZDsKLSAgaWYgKCFzLT5oYW5kbGVyKSByZXR1cm4g
dHJ1ZTsKLSAgZW5kID0gKGZ1bmMgKilzLT5oYW5kbGVyLT50YWJsZVtVUEJfRU5EU1RSX1NFTEVD
VE9SXS5mdW5jOwotCi0gIGlmICghZW5kKSByZXR1cm4gdHJ1ZTsKLSAgcmV0dXJuIGVuZChzLT5j
bG9zdXJlLAotICAgICAgICAgICAgIHVwYl9oYW5kbGVyYXR0cl9oYW5kbGVyZGF0YSgKLSAgICAg
ICAgICAgICAgICAgJnMtPmhhbmRsZXItPnRhYmxlW1VQQl9FTkRTVFJfU0VMRUNUT1JdLmF0dHIp
KTsKLX0KLQotVVBCX0lOTElORSBib29sIHVwYl9idWZzcmNfcHV0YnVmKGNvbnN0IGNoYXIgKmJ1
Ziwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfYnl0
ZXNzaW5rICpzaW5rKSB7Ci0gIHZvaWQgKnN1YmM7Ci0gIGJvb2wgcmV0OwotICB1cGJfYnVmaGFu
ZGxlIGhhbmRsZTsKLSAgdXBiX2J1ZmhhbmRsZV9pbml0KCZoYW5kbGUpOwotICB1cGJfYnVmaGFu
ZGxlX3NldGJ1ZigmaGFuZGxlLCBidWYsIDApOwotICByZXQgPSB1cGJfYnl0ZXNzaW5rX3N0YXJ0
KHNpbmssIGxlbiwgJnN1YmMpOwotICBpZiAocmV0ICYmIGxlbiAhPSAwKSB7Ci0gICAgcmV0ID0g
KHVwYl9ieXRlc3NpbmtfcHV0YnVmKHNpbmssIHN1YmMsIGJ1ZiwgbGVuLCAmaGFuZGxlKSA+PSBs
ZW4pOwotICB9Ci0gIGlmIChyZXQpIHsKLSAgICByZXQgPSB1cGJfYnl0ZXNzaW5rX2VuZChzaW5r
KTsKLSAgfQotICB1cGJfYnVmaGFuZGxlX3VuaW5pdCgmaGFuZGxlKTsKLSAgcmV0dXJuIHJldDsK
LX0KLQotI2RlZmluZSBQVVRWQUwodHlwZSwgY3R5cGUpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVVBCX0lOTElORSBib29sIHVwYl9zaW5r
X3B1dCMjdHlwZSh1cGJfc2luayAqcywgdXBiX3NlbGVjdG9yX3Qgc2VsLCAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGUgdmFsKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHR5cGVkZWYgdXBiXyMjdHlwZSMjX2hhbmRsZXJm
dW5jIGZ1bmN0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBmdW5j
dHlwZSAqZnVuYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgY29uc3Qgdm9pZCAqaGQ7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghcy0+aGFu
ZGxlcnMpIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBmdW5jID0gKGZ1bmN0eXBlICopdXBiX2hhbmRsZXJzX2dldGhhbmRsZXIo
cy0+aGFuZGxlcnMsIHNlbCk7ICAgICAgICAgICAgICBcCi0gICAgaWYgKCFmdW5jKSByZXR1cm4g
dHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGhkID0gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXJkYXRhKHMtPmhhbmRsZXJzLCBzZWwp
OyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gZnVuYyhzLT5jbG9zdXJlLCBo
ZCwgdmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0K
LQotUFVUVkFMKGludDMyLCAgaW50MzJfdCkKLVBVVFZBTChpbnQ2NCwgIGludDY0X3QpCi1QVVRW
QUwodWludDMyLCB1aW50MzJfdCkKLVBVVFZBTCh1aW50NjQsIHVpbnQ2NF90KQotUFVUVkFMKGZs
b2F0LCAgZmxvYXQpCi1QVVRWQUwoZG91YmxlLCBkb3VibGUpCi1QVVRWQUwoYm9vbCwgICBib29s
KQotI3VuZGVmIFBVVFZBTAotCi1VUEJfSU5MSU5FIHZvaWQgdXBiX3NpbmtfcmVzZXQodXBiX3Np
bmsgKnMsIGNvbnN0IHVwYl9oYW5kbGVycyAqaCwgdm9pZCAqYykgewotICBzLT5oYW5kbGVycyA9
IGg7Ci0gIHMtPmNsb3N1cmUgPSBjOwotfQotCi1VUEJfSU5MSU5FIHNpemVfdCB1cGJfc2lua19w
dXRzdHJpbmcodXBiX3NpbmsgKnMsIHVwYl9zZWxlY3Rvcl90IHNlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9idWZoYW5kbGUgKmhhbmRs
ZSkgewotICB0eXBlZGVmIHVwYl9zdHJpbmdfaGFuZGxlcmZ1bmMgZnVuYzsKLSAgZnVuYyAqaGFu
ZGxlcjsKLSAgY29uc3Qgdm9pZCAqaGQ7Ci0gIGlmICghcy0+aGFuZGxlcnMpIHJldHVybiBuOwot
ICBoYW5kbGVyID0gKGZ1bmMgKil1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcihzLT5oYW5kbGVycywg
c2VsKTsKLQotICBpZiAoIWhhbmRsZXIpIHJldHVybiBuOwotICBoZCA9IHVwYl9oYW5kbGVyc19n
ZXRoYW5kbGVyZGF0YShzLT5oYW5kbGVycywgc2VsKTsKLSAgcmV0dXJuIGhhbmRsZXIocy0+Y2xv
c3VyZSwgaGQsIGJ1ZiwgbiwgaGFuZGxlKTsKLX0KLQotVVBCX0lOTElORSBib29sIHVwYl9zaW5r
X3N0YXJ0bXNnKHVwYl9zaW5rICpzKSB7Ci0gIHR5cGVkZWYgdXBiX3N0YXJ0bXNnX2hhbmRsZXJm
dW5jIGZ1bmM7Ci0gIGZ1bmMgKnN0YXJ0bXNnOwotICBjb25zdCB2b2lkICpoZDsKLSAgaWYgKCFz
LT5oYW5kbGVycykgcmV0dXJuIHRydWU7Ci0gIHN0YXJ0bXNnID0gKGZ1bmMqKXVwYl9oYW5kbGVy
c19nZXRoYW5kbGVyKHMtPmhhbmRsZXJzLCBVUEJfU1RBUlRNU0dfU0VMRUNUT1IpOwotCi0gIGlm
ICghc3RhcnRtc2cpIHJldHVybiB0cnVlOwotICBoZCA9IHVwYl9oYW5kbGVyc19nZXRoYW5kbGVy
ZGF0YShzLT5oYW5kbGVycywgVVBCX1NUQVJUTVNHX1NFTEVDVE9SKTsKLSAgcmV0dXJuIHN0YXJ0
bXNnKHMtPmNsb3N1cmUsIGhkKTsKLX0KLQotVVBCX0lOTElORSBib29sIHVwYl9zaW5rX2VuZG1z
Zyh1cGJfc2luayAqcywgdXBiX3N0YXR1cyAqc3RhdHVzKSB7Ci0gIHR5cGVkZWYgdXBiX2VuZG1z
Z19oYW5kbGVyZnVuYyBmdW5jOwotICBmdW5jICplbmRtc2c7Ci0gIGNvbnN0IHZvaWQgKmhkOwot
ICBpZiAoIXMtPmhhbmRsZXJzKSByZXR1cm4gdHJ1ZTsKLSAgZW5kbXNnID0gKGZ1bmMgKil1cGJf
aGFuZGxlcnNfZ2V0aGFuZGxlcihzLT5oYW5kbGVycywgVVBCX0VORE1TR19TRUxFQ1RPUik7Ci0K
LSAgaWYgKCFlbmRtc2cpIHJldHVybiB0cnVlOwotICBoZCA9IHVwYl9oYW5kbGVyc19nZXRoYW5k
bGVyZGF0YShzLT5oYW5kbGVycywgVVBCX0VORE1TR19TRUxFQ1RPUik7Ci0gIHJldHVybiBlbmRt
c2cocy0+Y2xvc3VyZSwgaGQsIHN0YXR1cyk7Ci19Ci0KLVVQQl9JTkxJTkUgYm9vbCB1cGJfc2lu
a19zdGFydHNlcSh1cGJfc2luayAqcywgdXBiX3NlbGVjdG9yX3Qgc2VsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwYl9zaW5rICpzdWIpIHsKLSAgdHlwZWRlZiB1cGJfc3Rh
cnRmaWVsZF9oYW5kbGVyZnVuYyBmdW5jOwotICBmdW5jICpzdGFydHNlcTsKLSAgY29uc3Qgdm9p
ZCAqaGQ7Ci0gIHN1Yi0+Y2xvc3VyZSA9IHMtPmNsb3N1cmU7Ci0gIHN1Yi0+aGFuZGxlcnMgPSBz
LT5oYW5kbGVyczsKLSAgaWYgKCFzLT5oYW5kbGVycykgcmV0dXJuIHRydWU7Ci0gIHN0YXJ0c2Vx
ID0gKGZ1bmMqKXVwYl9oYW5kbGVyc19nZXRoYW5kbGVyKHMtPmhhbmRsZXJzLCBzZWwpOwotCi0g
IGlmICghc3RhcnRzZXEpIHJldHVybiB0cnVlOwotICBoZCA9IHVwYl9oYW5kbGVyc19nZXRoYW5k
bGVyZGF0YShzLT5oYW5kbGVycywgc2VsKTsKLSAgc3ViLT5jbG9zdXJlID0gc3RhcnRzZXEocy0+
Y2xvc3VyZSwgaGQpOwotICByZXR1cm4gc3ViLT5jbG9zdXJlID8gdHJ1ZSA6IGZhbHNlOwotfQot
Ci1VUEJfSU5MSU5FIGJvb2wgdXBiX3NpbmtfZW5kc2VxKHVwYl9zaW5rICpzLCB1cGJfc2VsZWN0
b3JfdCBzZWwpIHsKLSAgdHlwZWRlZiB1cGJfZW5kZmllbGRfaGFuZGxlcmZ1bmMgZnVuYzsKLSAg
ZnVuYyAqZW5kc2VxOwotICBjb25zdCB2b2lkICpoZDsKLSAgaWYgKCFzLT5oYW5kbGVycykgcmV0
dXJuIHRydWU7Ci0gIGVuZHNlcSA9IChmdW5jKil1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcihzLT5o
YW5kbGVycywgc2VsKTsKLQotICBpZiAoIWVuZHNlcSkgcmV0dXJuIHRydWU7Ci0gIGhkID0gdXBi
X2hhbmRsZXJzX2dldGhhbmRsZXJkYXRhKHMtPmhhbmRsZXJzLCBzZWwpOwotICByZXR1cm4gZW5k
c2VxKHMtPmNsb3N1cmUsIGhkKTsKLX0KLQotVVBCX0lOTElORSBib29sIHVwYl9zaW5rX3N0YXJ0
c3RyKHVwYl9zaW5rICpzLCB1cGJfc2VsZWN0b3JfdCBzZWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IHNpemVfaGludCwgdXBiX3NpbmsgKnN1YikgewotICB0eXBl
ZGVmIHVwYl9zdGFydHN0cl9oYW5kbGVyZnVuYyBmdW5jOwotICBmdW5jICpzdGFydHN0cjsKLSAg
Y29uc3Qgdm9pZCAqaGQ7Ci0gIHN1Yi0+Y2xvc3VyZSA9IHMtPmNsb3N1cmU7Ci0gIHN1Yi0+aGFu
ZGxlcnMgPSBzLT5oYW5kbGVyczsKLSAgaWYgKCFzLT5oYW5kbGVycykgcmV0dXJuIHRydWU7Ci0g
IHN0YXJ0c3RyID0gKGZ1bmMqKXVwYl9oYW5kbGVyc19nZXRoYW5kbGVyKHMtPmhhbmRsZXJzLCBz
ZWwpOwotCi0gIGlmICghc3RhcnRzdHIpIHJldHVybiB0cnVlOwotICBoZCA9IHVwYl9oYW5kbGVy
c19nZXRoYW5kbGVyZGF0YShzLT5oYW5kbGVycywgc2VsKTsKLSAgc3ViLT5jbG9zdXJlID0gc3Rh
cnRzdHIocy0+Y2xvc3VyZSwgaGQsIHNpemVfaGludCk7Ci0gIHJldHVybiBzdWItPmNsb3N1cmUg
PyB0cnVlIDogZmFsc2U7Ci19Ci0KLVVQQl9JTkxJTkUgYm9vbCB1cGJfc2lua19lbmRzdHIodXBi
X3NpbmsgKnMsIHVwYl9zZWxlY3Rvcl90IHNlbCkgewotICB0eXBlZGVmIHVwYl9lbmRmaWVsZF9o
YW5kbGVyZnVuYyBmdW5jOwotICBmdW5jICplbmRzdHI7Ci0gIGNvbnN0IHZvaWQgKmhkOwotICBp
ZiAoIXMtPmhhbmRsZXJzKSByZXR1cm4gdHJ1ZTsKLSAgZW5kc3RyID0gKGZ1bmMqKXVwYl9oYW5k
bGVyc19nZXRoYW5kbGVyKHMtPmhhbmRsZXJzLCBzZWwpOwotCi0gIGlmICghZW5kc3RyKSByZXR1
cm4gdHJ1ZTsKLSAgaGQgPSB1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcmRhdGEocy0+aGFuZGxlcnMs
IHNlbCk7Ci0gIHJldHVybiBlbmRzdHIocy0+Y2xvc3VyZSwgaGQpOwotfQotCi1VUEJfSU5MSU5F
IGJvb2wgdXBiX3Npbmtfc3RhcnRzdWJtc2codXBiX3NpbmsgKnMsIHVwYl9zZWxlY3Rvcl90IHNl
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc2luayAqc3ViKSB7
Ci0gIHR5cGVkZWYgdXBiX3N0YXJ0ZmllbGRfaGFuZGxlcmZ1bmMgZnVuYzsKLSAgZnVuYyAqc3Rh
cnRzdWJtc2c7Ci0gIGNvbnN0IHZvaWQgKmhkOwotICBzdWItPmNsb3N1cmUgPSBzLT5jbG9zdXJl
OwotICBpZiAoIXMtPmhhbmRsZXJzKSB7Ci0gICAgc3ViLT5oYW5kbGVycyA9IE5VTEw7Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLSAgc3ViLT5oYW5kbGVycyA9IHVwYl9oYW5kbGVyc19nZXRzdWJo
YW5kbGVyc19zZWwocy0+aGFuZGxlcnMsIHNlbCk7Ci0gIHN0YXJ0c3VibXNnID0gKGZ1bmMqKXVw
Yl9oYW5kbGVyc19nZXRoYW5kbGVyKHMtPmhhbmRsZXJzLCBzZWwpOwotCi0gIGlmICghc3RhcnRz
dWJtc2cpIHJldHVybiB0cnVlOwotICBoZCA9IHVwYl9oYW5kbGVyc19nZXRoYW5kbGVyZGF0YShz
LT5oYW5kbGVycywgc2VsKTsKLSAgc3ViLT5jbG9zdXJlID0gc3RhcnRzdWJtc2cocy0+Y2xvc3Vy
ZSwgaGQpOwotICByZXR1cm4gc3ViLT5jbG9zdXJlID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1VUEJf
SU5MSU5FIGJvb2wgdXBiX3NpbmtfZW5kc3VibXNnKHVwYl9zaW5rICpzLCB1cGJfc2VsZWN0b3Jf
dCBzZWwpIHsKLSAgdHlwZWRlZiB1cGJfZW5kZmllbGRfaGFuZGxlcmZ1bmMgZnVuYzsKLSAgZnVu
YyAqZW5kc3VibXNnOwotICBjb25zdCB2b2lkICpoZDsKLSAgaWYgKCFzLT5oYW5kbGVycykgcmV0
dXJuIHRydWU7Ci0gIGVuZHN1Ym1zZyA9IChmdW5jKil1cGJfaGFuZGxlcnNfZ2V0aGFuZGxlcihz
LT5oYW5kbGVycywgc2VsKTsKLQotICBpZiAoIWVuZHN1Ym1zZykgcmV0dXJuIHMtPmNsb3N1cmU7
Ci0gIGhkID0gdXBiX2hhbmRsZXJzX2dldGhhbmRsZXJkYXRhKHMtPmhhbmRsZXJzLCBzZWwpOwot
ICByZXR1cm4gZW5kc3VibXNnKHMtPmNsb3N1cmUsIGhkKTsKLX0KLQotVVBCX0VORF9FWFRFUk5f
QwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotbmFtZXNwYWNlIHVwYiB7Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBTaW5rOjpTaW5rKGNvbnN0IEhhbmRsZXJzKiBoYW5kbGVycywgVCogY2xvc3VyZSkg
ewotICB1cGJfc2lua19yZXNldCh0aGlzLCBoYW5kbGVycywgY2xvc3VyZSk7Ci19Ci10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLWlubGluZSB2b2lkIFNpbms6OlJlc2V0KGNvbnN0IEhhbmRsZXJzKiBoYW5k
bGVycywgVCogY2xvc3VyZSkgewotICB1cGJfc2lua19yZXNldCh0aGlzLCBoYW5kbGVycywgY2xv
c3VyZSk7Ci19Ci1pbmxpbmUgYm9vbCBTaW5rOjpTdGFydE1lc3NhZ2UoKSB7Ci0gIHJldHVybiB1
cGJfc2lua19zdGFydG1zZyh0aGlzKTsKLX0KLWlubGluZSBib29sIFNpbms6OkVuZE1lc3NhZ2Uo
U3RhdHVzKiBzdGF0dXMpIHsKLSAgcmV0dXJuIHVwYl9zaW5rX2VuZG1zZyh0aGlzLCBzdGF0dXMp
OwotfQotaW5saW5lIGJvb2wgU2luazo6UHV0SW50MzIoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCwg
aW50MzJfdCB2YWwpIHsKLSAgcmV0dXJuIHVwYl9zaW5rX3B1dGludDMyKHRoaXMsIHNlbCwgdmFs
KTsKLX0KLWlubGluZSBib29sIFNpbms6OlB1dEludDY0KEhhbmRsZXJzOjpTZWxlY3RvciBzZWws
IGludDY0X3QgdmFsKSB7Ci0gIHJldHVybiB1cGJfc2lua19wdXRpbnQ2NCh0aGlzLCBzZWwsIHZh
bCk7Ci19Ci1pbmxpbmUgYm9vbCBTaW5rOjpQdXRVSW50MzIoSGFuZGxlcnM6OlNlbGVjdG9yIHNl
bCwgdWludDMyX3QgdmFsKSB7Ci0gIHJldHVybiB1cGJfc2lua19wdXR1aW50MzIodGhpcywgc2Vs
LCB2YWwpOwotfQotaW5saW5lIGJvb2wgU2luazo6UHV0VUludDY0KEhhbmRsZXJzOjpTZWxlY3Rv
ciBzZWwsIHVpbnQ2NF90IHZhbCkgewotICByZXR1cm4gdXBiX3NpbmtfcHV0dWludDY0KHRoaXMs
IHNlbCwgdmFsKTsKLX0KLWlubGluZSBib29sIFNpbms6OlB1dEZsb2F0KEhhbmRsZXJzOjpTZWxl
Y3RvciBzZWwsIGZsb2F0IHZhbCkgewotICByZXR1cm4gdXBiX3NpbmtfcHV0ZmxvYXQodGhpcywg
c2VsLCB2YWwpOwotfQotaW5saW5lIGJvb2wgU2luazo6UHV0RG91YmxlKEhhbmRsZXJzOjpTZWxl
Y3RvciBzZWwsIGRvdWJsZSB2YWwpIHsKLSAgcmV0dXJuIHVwYl9zaW5rX3B1dGRvdWJsZSh0aGlz
LCBzZWwsIHZhbCk7Ci19Ci1pbmxpbmUgYm9vbCBTaW5rOjpQdXRCb29sKEhhbmRsZXJzOjpTZWxl
Y3RvciBzZWwsIGJvb2wgdmFsKSB7Ci0gIHJldHVybiB1cGJfc2lua19wdXRib29sKHRoaXMsIHNl
bCwgdmFsKTsKLX0KLWlubGluZSBib29sIFNpbms6OlN0YXJ0U3RyaW5nKEhhbmRsZXJzOjpTZWxl
Y3RvciBzZWwsIHNpemVfdCBzaXplX2hpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaW5rICpzdWIpIHsKLSAgcmV0dXJuIHVwYl9zaW5rX3N0YXJ0c3RyKHRoaXMsIHNlbCwgc2l6
ZV9oaW50LCBzdWIpOwotfQotaW5saW5lIHNpemVfdCBTaW5rOjpQdXRTdHJpbmdCdWZmZXIoSGFu
ZGxlcnM6OlNlbGVjdG9yIHNlbCwgY29uc3QgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgY29uc3QgQnVmZmVySGFuZGxlKiBoYW5kbGUp
IHsKLSAgcmV0dXJuIHVwYl9zaW5rX3B1dHN0cmluZyh0aGlzLCBzZWwsIGJ1ZiwgbGVuLCBoYW5k
bGUpOwotfQotaW5saW5lIGJvb2wgU2luazo6RW5kU3RyaW5nKEhhbmRsZXJzOjpTZWxlY3RvciBz
ZWwpIHsKLSAgcmV0dXJuIHVwYl9zaW5rX2VuZHN0cih0aGlzLCBzZWwpOwotfQotaW5saW5lIGJv
b2wgU2luazo6U3RhcnRTdWJNZXNzYWdlKEhhbmRsZXJzOjpTZWxlY3RvciBzZWwsIFNpbmsqIHN1
YikgewotICByZXR1cm4gdXBiX3Npbmtfc3RhcnRzdWJtc2codGhpcywgc2VsLCBzdWIpOwotfQot
aW5saW5lIGJvb2wgU2luazo6RW5kU3ViTWVzc2FnZShIYW5kbGVyczo6U2VsZWN0b3Igc2VsKSB7
Ci0gIHJldHVybiB1cGJfc2lua19lbmRzdWJtc2codGhpcywgc2VsKTsKLX0KLWlubGluZSBib29s
IFNpbms6OlN0YXJ0U2VxdWVuY2UoSGFuZGxlcnM6OlNlbGVjdG9yIHNlbCwgU2luayogc3ViKSB7
Ci0gIHJldHVybiB1cGJfc2lua19zdGFydHNlcSh0aGlzLCBzZWwsIHN1Yik7Ci19Ci1pbmxpbmUg
Ym9vbCBTaW5rOjpFbmRTZXF1ZW5jZShIYW5kbGVyczo6U2VsZWN0b3Igc2VsKSB7Ci0gIHJldHVy
biB1cGJfc2lua19lbmRzZXEodGhpcywgc2VsKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1C
eXRlc1Npbms6OkJ5dGVzU2luayhjb25zdCBCeXRlc0hhbmRsZXIqIGhhbmRsZXIsIFQqIGNsb3N1
cmUpIHsKLSAgUmVzZXQoaGFuZGxlciwgY2xvc3VyZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
Pgotdm9pZCBCeXRlc1Npbms6OlJlc2V0KGNvbnN0IEJ5dGVzSGFuZGxlciAqaGFuZGxlciwgVCAq
Y2xvc3VyZSkgewotICB1cGJfYnl0ZXNzaW5rX3Jlc2V0KHRoaXMsIGhhbmRsZXIsIGNsb3N1cmUp
OwotfQotaW5saW5lIGJvb2wgQnl0ZXNTaW5rOjpTdGFydChzaXplX3Qgc2l6ZV9oaW50LCB2b2lk
ICoqc3ViYykgewotICByZXR1cm4gdXBiX2J5dGVzc2lua19zdGFydCh0aGlzLCBzaXplX2hpbnQs
IHN1YmMpOwotfQotaW5saW5lIHNpemVfdCBCeXRlc1Npbms6OlB1dEJ1ZmZlcih2b2lkICpzdWJj
LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEJ1ZmZlckhhbmRsZSAqaGFuZGxlKSB7Ci0gIHJldHVybiB1cGJfYnl0
ZXNzaW5rX3B1dGJ1Zih0aGlzLCBzdWJjLCBidWYsIGxlbiwgaGFuZGxlKTsKLX0KLWlubGluZSBi
b29sIEJ5dGVzU2luazo6RW5kKCkgewotICByZXR1cm4gdXBiX2J5dGVzc2lua19lbmQodGhpcyk7
Ci19Ci0KLWlubGluZSBib29sIEJ1ZmZlclNvdXJjZTo6UHV0QnVmZmVyKGNvbnN0IGNoYXIgKmJ1
Ziwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVz
U2luayAqc2luaykgewotICByZXR1cm4gdXBiX2J1ZnNyY19wdXRidWYoYnVmLCBsZW4sIHNpbmsp
OwotfQotCi19ICAvKiBuYW1lc3BhY2UgdXBiICovCi0jZW5kaWYKLQotI2VuZGlmCi0vKgotKiog
Rm9yIGhhbmRsZXJzIHRoYXQgZG8gdmVyeSB0aW55LCB2ZXJ5IHNpbXBsZSBvcGVyYXRpb25zLCB0
aGUgZnVuY3Rpb24gY2FsbAotKiogb3ZlcmhlYWQgb2YgY2FsbGluZyBhIGhhbmRsZXIgY2FuIGJl
IHNpZ25pZmljYW50LiAgVGhpcyBmaWxlIGFsbG93cyB0aGUKLSoqIHVzZXIgdG8gZGVmaW5lIGhh
bmRsZXJzIHRoYXQgZG8gc29tZXRoaW5nIHZlcnkgc2ltcGxlIGxpa2Ugc3RvcmUgdGhlIHZhbHVl
Ci0qKiB0byBtZW1vcnkgYW5kL29yIHNldCBhIGhhc2JpdC4gIEpJVCBjb21waWxlcnMgY2FuIHRo
ZW4gc3BlY2lhbC1jYXNlIHRoZXNlCi0qKiBoYW5kbGVycyBhbmQgZW1pdCBzcGVjaWFsaXplZCBj
b2RlIGZvciB0aGVtIGluc3RlYWQgb2YgYWN0dWFsbHkgY2FsbGluZyB0aGUKLSoqIGhhbmRsZXIu
Ci0qKgotKiogVGhlIGZ1bmN0aW9uYWxpdHkgaXMgdmVyeSBzaW1wbGUvbGltaXRlZCByaWdodCBu
b3cgYnV0IG1heSBleHBhbmQgdG8gYmUgYWJsZQotKiogdG8gY2FsbCBhbm90aGVyIGZ1bmN0aW9u
LgotKi8KLQotI2lmbmRlZiBVUEJfU0hJTV9ICi0jZGVmaW5lIFVQQl9TSElNX0gKLQotCi10eXBl
ZGVmIHN0cnVjdCB7Ci0gIHNpemVfdCBvZmZzZXQ7Ci0gIGludDMyX3QgaGFzYml0OwotfSB1cGJf
c2hpbV9kYXRhOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotbmFtZXNwYWNlIHVwYiB7Ci0KLXN0
cnVjdCBTaGltIHsKLSAgdHlwZWRlZiB1cGJfc2hpbV9kYXRhIERhdGE7Ci0KLSAgLyogU2V0cyBh
IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBmaWVsZCB0aGF0IHdyaXRlcyB0aGUgdmFsdWUgdG8gdGhl
IGdpdmVuCi0gICAqIG9mZnNldCBhbmQsIGlmIGhhc2JpdCA+PSAwLCBzZXRzIGEgYml0IGF0IHRo
ZSBnaXZlbiBiaXQgb2Zmc2V0LiAgUmV0dXJucwotICAgKiB0cnVlIGlmIHRoZSBoYW5kbGVyIHdh
cyBzZXQgc3VjY2Vzc2Z1bGx5LiAqLwotICBzdGF0aWMgYm9vbCBTZXQoSGFuZGxlcnMgKmgsIGNv
bnN0IEZpZWxkRGVmICpmLCBzaXplX3Qgb2ZzLCBpbnQzMl90IGhhc2JpdCk7Ci0KLSAgLyogSWYg
dGhpcyBoYW5kbGVyIGlzIGEgc2hpbSwgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyB1cGI6OlNo
aW06OkRhdGEgYW5kCi0gICAqIHN0b3JlcyB0aGUgdHlwZSBpbiAidHlwZSIuICBPdGhlcndpc2Ug
cmV0dXJucyBOVUxMLiAqLwotICBzdGF0aWMgY29uc3QgRGF0YSogR2V0RGF0YShjb25zdCBIYW5k
bGVycyogaCwgSGFuZGxlcnM6OlNlbGVjdG9yIHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZpZWxkRGVmOjpUeXBlKiB0eXBlKTsKLX07Ci0KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8K
LQotI2VuZGlmCi0KLVVQQl9CRUdJTl9FWFRFUk5fQwotCi0vKiBDIEFQSS4gKi8KLWJvb2wgdXBi
X3NoaW1fc2V0KHVwYl9oYW5kbGVycyAqaCwgY29uc3QgdXBiX2ZpZWxkZGVmICpmLCBzaXplX3Qg
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgaW50MzJfdCBoYXNiaXQpOwotY29uc3QgdXBiX3No
aW1fZGF0YSAqdXBiX3NoaW1fZ2V0ZGF0YShjb25zdCB1cGJfaGFuZGxlcnMgKmgsIHVwYl9zZWxl
Y3Rvcl90IHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9maWVs
ZHR5cGVfdCAqdHlwZSk7Ci0KLVVQQl9FTkRfRVhURVJOX0MKLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci0vKiBDKysgV3JhcHBlcnMuICovCi1uYW1lc3BhY2UgdXBiIHsKLWlubGluZSBib29sIFNoaW06
OlNldChIYW5kbGVycyogaCwgY29uc3QgRmllbGREZWYqIGYsIHNpemVfdCBvZnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgaW50MzJfdCBoYXNiaXQpIHsKLSAgcmV0dXJuIHVwYl9zaGltX3NldCho
LCBmLCBvZnMsIGhhc2JpdCk7Ci19Ci1pbmxpbmUgY29uc3QgU2hpbTo6RGF0YSogU2hpbTo6R2V0
RGF0YShjb25zdCBIYW5kbGVycyogaCwgSGFuZGxlcnM6OlNlbGVjdG9yIHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZERlZjo6VHlwZSogdHlwZSkgewotICBy
ZXR1cm4gdXBiX3NoaW1fZ2V0ZGF0YShoLCBzLCB0eXBlKTsKLX0KLX0gIC8qIG5hbWVzcGFjZSB1
cGIgKi8KLSNlbmRpZgotCi0jZW5kaWYgIC8qIFVQQl9TSElNX0ggKi8KLS8qCi0qKiB1cGI6OlN5
bWJvbFRhYmxlICh1cGJfc3ltdGFiKQotKioKLSoqIEEgc3ltdGFiIChzeW1ib2wgdGFibGUpIHN0
b3JlcyBhIG5hbWUtPmRlZiBtYXAgb2YgdXBiX2RlZnMuICBDbGllbnRzIGNvdWxkCi0qKiBhbHdh
eXMgY3JlYXRlIHN1Y2ggdGFibGVzIHRoZW1zZWx2ZXMsIGJ1dCB1cGJfc3ltdGFiIGhhcyBsb2dp
YyBmb3IgcmVzb2x2aW5nCi0qKiBzeW1ib2xpYyByZWZlcmVuY2VzLCBhbmQgaW4gcGFydGljdWxh
ciwgZm9yIGtlZXBpbmcgYSB3aG9sZSBzZXQgb2YgY29uc2lzdGVudAotKiogZGVmcyB3aGVuIHJl
cGxhY2luZyBzb21lIHN1YnNldCBvZiB0aG9zZSBkZWZzLiAgVGhpcyBsb2dpYyBpcyBub250cml2
aWFsLgotKioKLSoqIFRoaXMgaXMgYSBtaXhlZCBDL0MrKyBpbnRlcmZhY2UgdGhhdCBvZmZlcnMg
YSBmdWxsIEFQSSB0byBib3RoIGxhbmd1YWdlcy4KLSoqIFNlZSB0aGUgdG9wLWxldmVsIFJFQURN
RSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSovCi0KLSNpZm5kZWYgVVBCX1NZTVRBQl9IXwotI2Rl
ZmluZSBVUEJfU1lNVEFCX0hfCi0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jaW5jbHVkZSA8dmVj
dG9yPgotbmFtZXNwYWNlIHVwYiB7IGNsYXNzIFN5bWJvbFRhYmxlOyB9Ci0jZW5kaWYKLQotVVBC
X0RFQ0xBUkVfREVSSVZFRF9UWVBFKHVwYjo6U3ltYm9sVGFibGUsIHVwYjo6UmVmQ291bnRlZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc3ltdGFiLCB1cGJfcmVmY291bnRlZCkKLQot
dHlwZWRlZiBzdHJ1Y3QgewotIFVQQl9QUklWQVRFX0ZPUl9DUFAKLSAgdXBiX3N0cnRhYmxlX2l0
ZXIgaXRlcjsKLSAgdXBiX2RlZnR5cGVfdCB0eXBlOwotfSB1cGJfc3ltdGFiX2l0ZXI7Ci0KLSNp
ZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBOb24tY29uc3QgbWV0aG9kcyBpbiB1cGI6OlN5bWJvbFRh
YmxlIGFyZSBOT1QgdGhyZWFkLXNhZmUuICovCi1jbGFzcyB1cGI6OlN5bWJvbFRhYmxlIHsKLSBw
dWJsaWM6Ci0gIC8qIFJldHVybnMgYSBuZXcgc3ltYm9sIHRhYmxlIHdpdGggYSBzaW5nbGUgcmVm
IG93bmVkIGJ5ICJvd25lci4iCi0gICAqIFJldHVybnMgTlVMTCBpZiBtZW1vcnkgYWxsb2NhdGlv
biBmYWlsZWQuICovCi0gIHN0YXRpYyByZWZmZWRfcHRyPFN5bWJvbFRhYmxlPiBOZXcoKTsKLQot
ICAvKiBJbmNsdWRlIFJlZkNvdW50ZWQgYmFzZSBtZXRob2RzLiAqLwotICBVUEJfUkVGQ09VTlRF
RF9DUFBNRVRIT0RTCi0KLSAgLyogRm9yIGFsbCBsb29rdXAgZnVuY3Rpb25zLCB0aGUgcmV0dXJu
ZWQgcG9pbnRlciBpcyBub3Qgb3duZWQgYnkgdGhlCi0gICAqIGNhbGxlcjsgaXQgbWF5IGJlIGlu
dmFsaWRhdGVkIGJ5IGFueSBub24tY29uc3QgY2FsbCBvciB1bnJlZiBvZiB0aGUKLSAgICogU3lt
Ym9sVGFibGUhICBUbyBwcm90ZWN0IGFnYWluc3QgdGhpcywgdGFrZSBhIHJlZiBpZiBkZXNpcmVk
LiAqLwotCi0gIC8qIEZyZWV6ZXMgdGhlIHN5bWJvbCB0YWJsZTogcHJldmVudHMgZnVydGhlciBt
b2RpZmljYXRpb24gb2YgaXQuCi0gICAqIEFmdGVyIHRoZSBGcmVlemUoKSBvcGVyYXRpb24gaXMg
c3VjY2Vzc2Z1bCwgdGhlIFN5bWJvbFRhYmxlIG11c3Qgb25seSBiZQotICAgKiBhY2Nlc3NlZCB2
aWEgYSBjb25zdCBwb2ludGVyLgotICAgKgotICAgKiBVbmxpa2Ugd2l0aCB1cGI6Ok1lc3NhZ2VE
ZWYvdXBiOjpFbnVtRGVmL2V0YywgZnJlZXppbmcgYSBTeW1ib2xUYWJsZSBpcyBub3QKLSAgICog
YSBuZWNlc3Nhcnkgc3RlcCBpbiB1c2luZyBhIFN5bWJvbFRhYmxlLiAgSWYgeW91IGhhdmUgbm8g
bmVlZCBmb3IgaXQgdG8gYmUKLSAgICogaW1tdXRhYmxlLCB0aGVyZSBpcyBubyBuZWVkIHRvIGZy
ZWV6ZSBpdCBldmVyLiAgSG93ZXZlciBzb21ldGltZXMgaXQgaXMKLSAgICogdXNlZnVsLCBhbmQg
U3ltYm9sVGFibGVzIHRoYXQgYXJlIHN0YXRpY2FsbHkgY29tcGlsZWQgaW50byB0aGUgYmluYXJ5
IGFyZQotICAgKiBhbHdheXMgZnJvemVuIGJ5IG5hdHVyZS4gKi8KLSAgdm9pZCBGcmVlemUoKTsK
LQotICAvKiBSZXNvbHZlcyB0aGUgZ2l2ZW4gc3ltYm9sIHVzaW5nIHRoZSBydWxlcyBkZXNjcmli
ZWQgaW4gZGVzY3JpcHRvci5wcm90bywKLSAgICogbmFtZWx5OgotICAgKgotICAgKiAgICBJZiB0
aGUgbmFtZSBzdGFydHMgd2l0aCBhICcuJywgaXQgaXMgZnVsbHktcXVhbGlmaWVkLiAgT3RoZXJ3
aXNlLAotICAgKiAgICBDKystbGlrZSBzY29waW5nIHJ1bGVzIGFyZSB1c2VkIHRvIGZpbmQgdGhl
IHR5cGUgKGkuZS4gZmlyc3QgdGhlIG5lc3RlZAotICAgKiAgICB0eXBlcyB3aXRoaW4gdGhpcyBt
ZXNzYWdlIGFyZSBzZWFyY2hlZCwgdGhlbiB3aXRoaW4gdGhlIHBhcmVudCwgb24gdXAKLSAgICog
ICAgdG8gdGhlIHJvb3QgbmFtZXNwYWNlKS4KLSAgICoKLSAgICogSWYgbm90IGZvdW5kLCByZXR1
cm5zIE5VTEwuICovCi0gIGNvbnN0IERlZiogUmVzb2x2ZShjb25zdCBjaGFyKiBiYXNlLCBjb25z
dCBjaGFyKiBzeW0pIGNvbnN0OwotCi0gIC8qIEZpbmRzIGFuIGVudHJ5IGluIHRoZSBzeW1ib2wg
dGFibGUgd2l0aCB0aGlzIGV4YWN0IG5hbWUuICBJZiBub3QgZm91bmQsCi0gICAqIHJldHVybnMg
TlVMTC4gKi8KLSAgY29uc3QgRGVmKiBMb29rdXAoY29uc3QgY2hhciAqc3ltKSBjb25zdDsKLSAg
Y29uc3QgTWVzc2FnZURlZiogTG9va3VwTWVzc2FnZShjb25zdCBjaGFyICpzeW0pIGNvbnN0Owot
ICBjb25zdCBFbnVtRGVmKiBMb29rdXBFbnVtKGNvbnN0IGNoYXIgKnN5bSkgY29uc3Q7Ci0KLSAg
LyogVE9ETzogaW50cm9kdWNlIGEgQysrIGl0ZXJhdG9yLCBidXQgbWFrZSBpdCBuaWNlIGFuZCB0
ZW1wbGF0ZWQgc28gdGhhdCBpZgotICAgKiB5b3UgYXNrIGZvciBhbiBpdGVyYXRvciBvZiBNZXNz
YWdlRGVmIHRoZSBpdGVyYXRlZCBlbGVtZW50cyBhcmUgc3Ryb25nbHkKLSAgICogdHlwZWQgYXMg
TWVzc2FnZURlZiouICovCi0KLSAgLyogQWRkcyB0aGUgZ2l2ZW4gbXV0YWJsZSBkZWZzIHRvIHRo
ZSBzeW10YWIsIHJlc29sdmluZyBhbGwgc3ltYm9scwotICAgKiAoaW5jbHVkaW5nIGVudW0gZGVm
YXVsdCB2YWx1ZXMpIGFuZCBmaW5hbGl6aW5nIHRoZSBkZWZzLiAgT25seSBvbmUgZGVmIHBlcgot
ICAgKiBuYW1lIG1heSBiZSBpbiB0aGUgbGlzdCwgYnV0IGRlZnMgY2FuIHJlcGxhY2UgZXhpc3Rp
bmcgZGVmcyBpbiB0aGUgc3ltdGFiLgotICAgKiBBbGwgZGVmcyBtdXN0IGhhdmUgYSBuYW1lIC0t
IGFub255bW91cyBkZWZzIGFyZSBub3QgYWxsb3dlZC4gIEFub255bW91cwotICAgKiBkZWZzIGNh
biBzdGlsbCBiZSBmcm96ZW4gYnkgY2FsbGluZyB1cGJfZGVmX2ZyZWV6ZSgpIGRpcmVjdGx5Lgot
ICAgKgotICAgKiBBbnkgZXhpc3RpbmcgZGVmcyB0aGF0IGNhbiByZWFjaCBkZWZzIHRoYXQgYXJl
IGJlaW5nIHJlcGxhY2VkIHdpbGwKLSAgICogdGhlbXNlbHZlcyBiZSByZXBsYWNlZCBhbHNvLCBz
byB0aGF0IHRoZSByZXN1bHRpbmcgc2V0IG9mIGRlZnMgaXMgZnVsbHkKLSAgICogY29uc2lzdGVu
dC4KLSAgICoKLSAgICogVGhpcyBsb2dpYyBpbXBsZW1lbnRlZCBpbiB0aGlzIG1ldGhvZCBpcyBh
IGNvbnZlbmllbmNlOyB1bHRpbWF0ZWx5IGl0Ci0gICAqIGNhbGxzIHNvbWUgY29tYmluYXRpb24g
b2YgdXBiX2ZpZWxkZGVmX3NldHN1YmRlZigpLCB1cGJfZGVmX2R1cCgpLCBhbmQKLSAgICogdXBi
X2ZyZWV6ZSgpLCBhbnkgb2Ygd2hpY2ggdGhlIGNsaWVudCBjb3VsZCBjYWxsIHRoZW1zZWxmLiAg
SG93ZXZlciwgc2luY2UKLSAgICogdGhlIGxvZ2ljIGZvciBkb2luZyBzbyBpcyBub250cml2aWFs
LCB3ZSBwcm92aWRlIGl0IGhlcmUuCi0gICAqCi0gICAqIFRoZSBlbnRpcmUgb3BlcmF0aW9uIGVp
dGhlciBzdWNjZWVkcyBvciBmYWlscy4gIElmIHRoZSBvcGVyYXRpb24gZmFpbHMsCi0gICAqIHRo
ZSBzeW10YWIgaXMgdW5jaGFuZ2VkLCBmYWxzZSBpcyByZXR1cm5lZCwgYW5kIHN0YXR1cyBpbmRp
Y2F0ZXMgdGhlCi0gICAqIGVycm9yLiAgVGhlIGNhbGxlciBwYXNzZXMgYSByZWYgb24gYWxsIGRl
ZnMgdG8gdGhlIHN5bXRhYiAoZXZlbiBpZiB0aGUKLSAgICogb3BlcmF0aW9uIGZhaWxzKS4KLSAg
ICoKLSAgICogVE9ETyhoYWJlcm1hbik6IGN1cnJlbnRseSBmYWlsdXJlIHdpbGwgbGVhdmUgdGhl
IHN5bXRhYiB1bmNoYW5nZWQsIGJ1dCBtYXkKLSAgICogbGVhdmUgdGhlIGRlZnMgdGhlbXNlbHZl
cyBwYXJ0aWFsbHkgcmVzb2x2ZWQuICBEb2VzIHRoaXMgbWF0dGVyPyAgSWYgc28gd2UKLSAgICog
Y291bGQgZG8gYSBwcmVwYXNzIHRoYXQgZW5zdXJlcyB0aGF0IGFsbCBzeW1ib2xzIGFyZSByZXNv
bHZhYmxlIGFuZCBiYWlsCi0gICAqIGlmIG5vdCwgc28gd2UgZG9uJ3QgbXV0YXRlIGFueXRoaW5n
IHVudGlsIHdlIGtub3cgdGhlIG9wZXJhdGlvbiB3aWxsCi0gICAqIHN1Y2NlZWQuCi0gICAqCi0g
ICAqIFRPRE8oaGFiZXJtYW4pOiBzaW5jZSB0aGUgZGVmcyBtdXN0IGJlIG11dGFibGUsIHJlZmlu
aW5nIGEgZnJvemVuIGRlZgotICAgKiByZXF1aXJlcyBtYWtpbmcgbXV0YWJsZSBjb3BpZXMgb2Yg
dGhlIGVudGlyZSB0cmVlLiAgVGhpcyBpcyB3YXN0ZWZ1bCBpZgotICAgKiBvbmx5IGEgZmV3IG1l
c3NhZ2VzIGFyZSBjaGFuZ2luZy4gIFdlIG1heSB3YW50IHRvIGFkZCBhIHdheSBvZiBhZGRpbmcg
YQotICAgKiB0cmVlIG9mIGZyb3plbiBkZWZzIHRvIHRoZSBzeW10YWIgKHBlcmhhcHMgYW4gYWx0
ZXJuYXRlIGNvbnN0cnVjdG9yIHdoZXJlCi0gICAqIHlvdSBwYXNzIHRoZSByb290IG9mIHRoZSB0
cmVlPykgKi8KLSAgYm9vbCBBZGQoRGVmKmNvbnN0KiBkZWZzLCBzaXplX3Qgbiwgdm9pZCogcmVm
X2Rvbm9yLCBTdGF0dXMqIHN0YXR1cyk7Ci0KLSAgYm9vbCBBZGQoY29uc3Qgc3RkOjp2ZWN0b3I8
RGVmKj4mIGRlZnMsIHZvaWQgKm93bmVyLCBTdGF0dXMqIHN0YXR1cykgewotICAgIHJldHVybiBB
ZGQoKERlZipjb25zdCopJmRlZnNbMF0sIGRlZnMuc2l6ZSgpLCBvd25lciwgc3RhdHVzKTsKLSAg
fQotCi0gIC8qIFJlc29sdmVzIGFsbCBzdWJkZWZzIGZvciBtZXNzYWdlcyBpbiB0aGlzIGZpbGUg
YW5kIGF0dGVtcHRzIHRvIGZyZWV6ZSB0aGUKLSAgICogZmlsZS4gIElmIHRoaXMgc3VjY2VlZHMs
IGFkZHMgYWxsIHRoZSBzeW1ib2xzIHRvIHRoaXMgU3ltYm9sVGFibGUKLSAgICogKHJlcGxhY2lu
ZyBhbnkgZXhpc3Rpbmcgb25lcyB3aXRoIHRoZSBzYW1lIG5hbWVzKS4gKi8KLSAgYm9vbCBBZGRG
aWxlKEZpbGVEZWYqIGZpbGUsIFN0YXR1cyogcyk7Ci0KLSBwcml2YXRlOgotICBVUEJfRElTQUxM
T1dfUE9EX09QUyhTeW1ib2xUYWJsZSwgdXBiOjpTeW1ib2xUYWJsZSkKLX07Ci0KLSNlbmRpZiAg
LyogX19jcGx1c3BsdXMgKi8KLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLS8qIE5hdGl2ZSBDIEFQ
SS4gKi8KLQotLyogSW5jbHVkZSByZWZjb3VudGVkIG1ldGhvZHMgbGlrZSB1cGJfc3ltdGFiX3Jl
ZigpLiAqLwotVVBCX1JFRkNPVU5URURfQ01FVEhPRFModXBiX3N5bXRhYiwgdXBiX3N5bXRhYl91
cGNhc3QpCi0KLXVwYl9zeW10YWIgKnVwYl9zeW10YWJfbmV3KGNvbnN0IHZvaWQgKm93bmVyKTsK
LXZvaWQgdXBiX3N5bXRhYl9mcmVlemUodXBiX3N5bXRhYiAqcyk7Ci1jb25zdCB1cGJfZGVmICp1
cGJfc3ltdGFiX3Jlc29sdmUoY29uc3QgdXBiX3N5bXRhYiAqcywgY29uc3QgY2hhciAqYmFzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzeW0pOwotY29u
c3QgdXBiX2RlZiAqdXBiX3N5bXRhYl9sb29rdXAoY29uc3QgdXBiX3N5bXRhYiAqcywgY29uc3Qg
Y2hhciAqc3ltKTsKLWNvbnN0IHVwYl9tc2dkZWYgKnVwYl9zeW10YWJfbG9va3VwbXNnKGNvbnN0
IHVwYl9zeW10YWIgKnMsIGNvbnN0IGNoYXIgKnN5bSk7Ci1jb25zdCB1cGJfZW51bWRlZiAqdXBi
X3N5bXRhYl9sb29rdXBlbnVtKGNvbnN0IHVwYl9zeW10YWIgKnMsIGNvbnN0IGNoYXIgKnN5bSk7
Ci1ib29sIHVwYl9zeW10YWJfYWRkKHVwYl9zeW10YWIgKnMsIHVwYl9kZWYgKmNvbnN0KmRlZnMs
IHNpemVfdCBuLAotICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWZfZG9ub3IsIHVwYl9zdGF0
dXMgKnN0YXR1cyk7Ci1ib29sIHVwYl9zeW10YWJfYWRkZmlsZSh1cGJfc3ltdGFiICpzLCB1cGJf
ZmlsZWRlZiAqZmlsZSwgdXBiX3N0YXR1cyogc3RhdHVzKTsKLQotLyogdXBiX3N5bXRhYl9pdGVy
IGk7Ci0gKiBmb3IodXBiX3N5bXRhYl9iZWdpbigmaSwgcywgdHlwZSk7ICF1cGJfc3ltdGFiX2Rv
bmUoJmkpOwotICogICAgIHVwYl9zeW10YWJfbmV4dCgmaSkpIHsKLSAqICAgY29uc3QgdXBiX2Rl
ZiAqZGVmID0gdXBiX3N5bXRhYl9pdGVyX2RlZigmaSk7Ci0gKiAgICAvLyAuLi4KLSAqIH0KLSAq
Ci0gKiBGb3IgQyB3ZSBkb24ndCBoYXZlIHNlcGFyYXRlIGl0ZXJhdG9ycyBmb3IgY29uc3QgYW5k
IG5vbi1jb25zdC4KLSAqIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBjYXN0
IHRoZSB1cGJfZmllbGRkZWYqIHRvCi0gKiBjb25zdCBpZiB0aGUgdXBiX21zZ2RlZiogaXMgY29u
c3QuICovCi12b2lkIHVwYl9zeW10YWJfYmVnaW4odXBiX3N5bXRhYl9pdGVyICppdGVyLCBjb25z
dCB1cGJfc3ltdGFiICpzLAotICAgICAgICAgICAgICAgICAgICAgIHVwYl9kZWZ0eXBlX3QgdHlw
ZSk7Ci12b2lkIHVwYl9zeW10YWJfbmV4dCh1cGJfc3ltdGFiX2l0ZXIgKml0ZXIpOwotYm9vbCB1
cGJfc3ltdGFiX2RvbmUoY29uc3QgdXBiX3N5bXRhYl9pdGVyICppdGVyKTsKLWNvbnN0IHVwYl9k
ZWYgKnVwYl9zeW10YWJfaXRlcl9kZWYoY29uc3QgdXBiX3N5bXRhYl9pdGVyICppdGVyKTsKLQot
VVBCX0VORF9FWFRFUk5fQwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLS8qIEMrKyBpbmxpbmUgd3Jh
cHBlcnMuICovCi1uYW1lc3BhY2UgdXBiIHsKLWlubGluZSByZWZmZWRfcHRyPFN5bWJvbFRhYmxl
PiBTeW1ib2xUYWJsZTo6TmV3KCkgewotICB1cGJfc3ltdGFiICpzID0gdXBiX3N5bXRhYl9uZXco
JnMpOwotICByZXR1cm4gcmVmZmVkX3B0cjxTeW1ib2xUYWJsZT4ocywgJnMpOwotfQotCi1pbmxp
bmUgdm9pZCBTeW1ib2xUYWJsZTo6RnJlZXplKCkgewotICByZXR1cm4gdXBiX3N5bXRhYl9mcmVl
emUodGhpcyk7Ci19Ci1pbmxpbmUgY29uc3QgRGVmICpTeW1ib2xUYWJsZTo6UmVzb2x2ZShjb25z
dCBjaGFyICpiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqc3ltKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfc3ltdGFiX3Jlc29sdmUodGhpcywg
YmFzZSwgc3ltKTsKLX0KLWlubGluZSBjb25zdCBEZWYqIFN5bWJvbFRhYmxlOjpMb29rdXAoY29u
c3QgY2hhciAqc3ltKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfc3ltdGFiX2xvb2t1cCh0aGlzLCBz
eW0pOwotfQotaW5saW5lIGNvbnN0IE1lc3NhZ2VEZWYgKlN5bWJvbFRhYmxlOjpMb29rdXBNZXNz
YWdlKGNvbnN0IGNoYXIgKnN5bSkgY29uc3QgewotICByZXR1cm4gdXBiX3N5bXRhYl9sb29rdXBt
c2codGhpcywgc3ltKTsKLX0KLWlubGluZSBib29sIFN5bWJvbFRhYmxlOjpBZGQoCi0gICAgRGVm
KmNvbnN0KiBkZWZzLCBzaXplX3Qgbiwgdm9pZCogcmVmX2Rvbm9yLCBTdGF0dXMqIHN0YXR1cykg
ewotICByZXR1cm4gdXBiX3N5bXRhYl9hZGQodGhpcywgKHVwYl9kZWYqY29uc3QqKWRlZnMsIG4s
IHJlZl9kb25vciwgc3RhdHVzKTsKLX0KLWlubGluZSBib29sIFN5bWJvbFRhYmxlOjpBZGRGaWxl
KEZpbGVEZWYqIGZpbGUsIFN0YXR1cyogcykgewotICByZXR1cm4gdXBiX3N5bXRhYl9hZGRmaWxl
KHRoaXMsIGZpbGUsIHMpOwotfQotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotI2VuZGlmCi0KLSNl
bmRpZiAgLyogVVBCX1NZTVRBQl9IXyAqLwotLyoKLSoqIHVwYjo6ZGVzY3JpcHRvcjo6UmVhZGVy
ICh1cGJfZGVzY3JlYWRlcikKLSoqCi0qKiBQcm92aWRlcyBhIHdheSBvZiBidWlsZGluZyB1cGI6
OkRlZnMgZnJvbSBkYXRhIGluIGRlc2NyaXB0b3IucHJvdG8gZm9ybWF0LgotKi8KLQotI2lmbmRl
ZiBVUEJfREVTQ1JJUFRPUl9ICi0jZGVmaW5lIFVQQl9ERVNDUklQVE9SX0gKLQotCi0jaWZkZWYg
X19jcGx1c3BsdXMKLW5hbWVzcGFjZSB1cGIgewotbmFtZXNwYWNlIGRlc2NyaXB0b3IgewotY2xh
c3MgUmVhZGVyOwotfSAgLyogbmFtZXNwYWNlIGRlc2NyaXB0b3IgKi8KLX0gIC8qIG5hbWVzcGFj
ZSB1cGIgKi8KLSNlbmRpZgotCi1VUEJfREVDTEFSRV9UWVBFKHVwYjo6ZGVzY3JpcHRvcjo6UmVh
ZGVyLCB1cGJfZGVzY3JlYWRlcikKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIENsYXNzIHRo
YXQgcmVjZWl2ZXMgZGVzY3JpcHRvciBkYXRhIGFjY29yZGluZyB0byB0aGUgZGVzY3JpcHRvci5w
cm90byBzY2hlbWEKLSAqIGFuZCB1c2UgaXQgdG8gYnVpbGQgdXBiOjpEZWZzIGNvcnJlc3BvbmRp
bmcgdG8gdGhhdCBzY2hlbWEuICovCi1jbGFzcyB1cGI6OmRlc2NyaXB0b3I6OlJlYWRlciB7Ci0g
cHVibGljOgotICAvKiBUaGVzZSBoYW5kbGVycyBtdXN0IGhhdmUgY29tZSBmcm9tIE5ld0hhbmRs
ZXJzKCkgYW5kIG11c3Qgb3V0bGl2ZSB0aGUKLSAgICogUmVhZGVyLgotICAgKgotICAgKiBUT0RP
OiBnZW5lcmF0ZSB0aGUgaGFuZGxlcnMgc3RhdGljYWxseSAobGlrZSB3ZSBkbyB3aXRoIHRoZQot
ICAgKiBkZXNjcmlwdG9yLnByb3RvIGRlZnMpIHNvIHRoYXQgdGhlcmUgaXMgbm8gbmVlZCB0byBw
YXNzIHRoaXMgcGFyYW1ldGVyIChvcgotICAgKiB0byBidWlsZC9tZW1vcnktbWFuYWdlIHRoZSBo
YW5kbGVycyBhdCBydW50aW1lIGF0IGFsbCkuICBVbmZvcnR1bmF0ZWx5IHRoaXMKLSAgICogaXMg
YSBiaXQgdHJpY2t5IHRvIGltcGxlbWVudCBmb3IgSGFuZGxlcnMsIGJ1dCBuZWNlc3NhcnkgdG8g
c2ltcGxpZnkgdGhpcwotICAgKiBpbnRlcmZhY2UuICovCi0gIHN0YXRpYyBSZWFkZXIqIENyZWF0
ZShFbnZpcm9ubWVudCogZW52LCBjb25zdCBIYW5kbGVycyogaGFuZGxlcnMpOwotCi0gIC8qIFRo
ZSByZWFkZXIncyBpbnB1dDsgdGhpcyBpcyB3aGVyZSBkZXNjcmlwdG9yLnByb3RvIGRhdGEgc2hv
dWxkIGJlIHNlbnQuICovCi0gIFNpbmsqIGlucHV0KCk7Ci0KLSAgLyogVXNlIHRvIGdldCB0aGUg
RmlsZURlZnMgdGhhdCBoYXZlIGJlZW4gcGFyc2VkLiAqLwotICBzaXplX3QgZmlsZV9jb3VudCgp
IGNvbnN0OwotICBGaWxlRGVmKiBmaWxlKHNpemVfdCBpKSBjb25zdDsKLQotICAvKiBCdWlsZHMg
YW5kIHJldHVybnMgaGFuZGxlcnMgZm9yIHRoZSByZWFkZXIsIG93bmVkIGJ5ICJvd25lci4iICov
Ci0gIHN0YXRpYyBIYW5kbGVycyogTmV3SGFuZGxlcnMoY29uc3Qgdm9pZCogb3duZXIpOwotCi0g
cHJpdmF0ZToKLSAgVVBCX0RJU0FMTE9XX1BPRF9PUFMoUmVhZGVyLCB1cGI6OmRlc2NyaXB0b3I6
OlJlYWRlcikKLX07Ci0KLSNlbmRpZgotCi1VUEJfQkVHSU5fRVhURVJOX0MKLQotLyogQyBBUEku
ICovCi11cGJfZGVzY3JlYWRlciAqdXBiX2Rlc2NyZWFkZXJfY3JlYXRlKHVwYl9lbnYgKmUsIGNv
bnN0IHVwYl9oYW5kbGVycyAqaCk7Ci11cGJfc2luayAqdXBiX2Rlc2NyZWFkZXJfaW5wdXQodXBi
X2Rlc2NyZWFkZXIgKnIpOwotc2l6ZV90IHVwYl9kZXNjcmVhZGVyX2ZpbGVjb3VudChjb25zdCB1
cGJfZGVzY3JlYWRlciAqcik7Ci11cGJfZmlsZWRlZiAqdXBiX2Rlc2NyZWFkZXJfZmlsZShjb25z
dCB1cGJfZGVzY3JlYWRlciAqciwgc2l6ZV90IGkpOwotY29uc3QgdXBiX2hhbmRsZXJzICp1cGJf
ZGVzY3JlYWRlcl9uZXdoYW5kbGVycyhjb25zdCB2b2lkICpvd25lcik7Ci0KLVVQQl9FTkRfRVhU
RVJOX0MKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0vKiBDKysgaW1wbGVtZW50YXRpb24gZGV0YWls
cy4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotbmFt
ZXNwYWNlIHVwYiB7Ci1uYW1lc3BhY2UgZGVzY3JpcHRvciB7Ci1pbmxpbmUgUmVhZGVyKiBSZWFk
ZXI6OkNyZWF0ZShFbnZpcm9ubWVudCogZSwgY29uc3QgSGFuZGxlcnMgKmgpIHsKLSAgcmV0dXJu
IHVwYl9kZXNjcmVhZGVyX2NyZWF0ZShlLCBoKTsKLX0KLWlubGluZSBTaW5rKiBSZWFkZXI6Omlu
cHV0KCkgeyByZXR1cm4gdXBiX2Rlc2NyZWFkZXJfaW5wdXQodGhpcyk7IH0KLWlubGluZSBzaXpl
X3QgUmVhZGVyOjpmaWxlX2NvdW50KCkgY29uc3QgewotICByZXR1cm4gdXBiX2Rlc2NyZWFkZXJf
ZmlsZWNvdW50KHRoaXMpOwotfQotaW5saW5lIEZpbGVEZWYqIFJlYWRlcjo6ZmlsZShzaXplX3Qg
aSkgY29uc3QgewotICByZXR1cm4gdXBiX2Rlc2NyZWFkZXJfZmlsZSh0aGlzLCBpKTsKLX0KLX0g
IC8qIG5hbWVzcGFjZSBkZXNjcmlwdG9yICovCi19ICAvKiBuYW1lc3BhY2UgdXBiICovCi0jZW5k
aWYKLQotI2VuZGlmICAvKiBVUEJfREVTQ1JJUFRPUl9IICovCi0vKiBUaGlzIGZpbGUgY29udGFp
bnMgYWNjZXNzb3JzIGZvciBhIHNldCBvZiBjb21waWxlZC1pbiBkZWZzLgotICogTm90ZSB0aGF0
IHVubGlrZSBHb29nbGUncyBwcm90b2J1ZiwgaXQgZG9lcyAqbm90KiBkZWZpbmUKLSAqIGdlbmVy
YXRlZCBjbGFzc2VzIG9yIGFueSBvdGhlciBraW5kIG9mIGRhdGEgc3RydWN0dXJlIGZvcgotICog
YWN0dWFsbHkgc3RvcmluZyBwcm90b2J1ZnMuICBJdCBvbmx5IGNvbnRhaW5zICpkZWZzKiB3aGlj
aAotICogbGV0IHlvdSByZWZsZWN0IG92ZXIgYSBwcm90b2J1ZiAqc2NoZW1hKi4KLSAqLwotLyog
VGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgdXBiYyAodGhlIHVwYiBjb21waWxlcikgZnJvbSB0
aGUgaW5wdXQKLSAqIGZpbGU6Ci0gKgotICogICAgIHVwYi9kZXNjcmlwdG9yL2Rlc2NyaXB0b3Iu
cHJvdG8KLSAqCi0gKiBEbyBub3QgZWRpdCAtLSB5b3VyIGNoYW5nZXMgd2lsbCBiZSBkaXNjYXJk
ZWQgd2hlbiB0aGUgZmlsZSBpcwotICogcmVnZW5lcmF0ZWQuICovCi0KLSNpZm5kZWYgVVBCX0RF
U0NSSVBUT1JfREVTQ1JJUFRPUl9QUk9UT19VUEJfSF8KLSNkZWZpbmUgVVBCX0RFU0NSSVBUT1Jf
REVTQ1JJUFRPUl9QUk9UT19VUEJfSF8KLQotCi1VUEJfQkVHSU5fRVhURVJOX0MKLQotLyogRW51
bXMgKi8KLQotdHlwZWRlZiBlbnVtIHsKLSAgZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRv
clByb3RvX0xBQkVMX09QVElPTkFMID0gMSwKLSAgZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3Jp
cHRvclByb3RvX0xBQkVMX1JFUVVJUkVEID0gMiwKLSAgZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVz
Y3JpcHRvclByb3RvX0xBQkVMX1JFUEVBVEVEID0gMwotfSBnb29nbGVfcHJvdG9idWZfRmllbGRE
ZXNjcmlwdG9yUHJvdG9fTGFiZWw7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIGdvb2dsZV9wcm90b2J1
Zl9GaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0RPVUJMRSA9IDEsCi0gIGdvb2dsZV9wcm90b2J1
Zl9GaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0ZMT0FUID0gMiwKLSAgZ29vZ2xlX3Byb3RvYnVm
X0ZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfSU5UNjQgPSAzLAotICBnb29nbGVfcHJvdG9idWZf
RmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9VSU5UNjQgPSA0LAotICBnb29nbGVfcHJvdG9idWZf
RmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9JTlQzMiA9IDUsCi0gIGdvb2dsZV9wcm90b2J1Zl9G
aWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0ZJWEVENjQgPSA2LAotICBnb29nbGVfcHJvdG9idWZf
RmllbGREZXNjcmlwdG9yUHJvdG9fVFlQRV9GSVhFRDMyID0gNywKLSAgZ29vZ2xlX3Byb3RvYnVm
X0ZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfQk9PTCA9IDgsCi0gIGdvb2dsZV9wcm90b2J1Zl9G
aWVsZERlc2NyaXB0b3JQcm90b19UWVBFX1NUUklORyA9IDksCi0gIGdvb2dsZV9wcm90b2J1Zl9G
aWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0dST1VQID0gMTAsCi0gIGdvb2dsZV9wcm90b2J1Zl9G
aWVsZERlc2NyaXB0b3JQcm90b19UWVBFX01FU1NBR0UgPSAxMSwKLSAgZ29vZ2xlX3Byb3RvYnVm
X0ZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfQllURVMgPSAxMiwKLSAgZ29vZ2xlX3Byb3RvYnVm
X0ZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfVUlOVDMyID0gMTMsCi0gIGdvb2dsZV9wcm90b2J1
Zl9GaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX0VOVU0gPSAxNCwKLSAgZ29vZ2xlX3Byb3RvYnVm
X0ZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfU0ZJWEVEMzIgPSAxNSwKLSAgZ29vZ2xlX3Byb3Rv
YnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfU0ZJWEVENjQgPSAxNiwKLSAgZ29vZ2xlX3By
b3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX1RZUEVfU0lOVDMyID0gMTcsCi0gIGdvb2dsZV9w
cm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19UWVBFX1NJTlQ2NCA9IDE4Ci19IGdvb2dsZV9w
cm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19UeXBlOwotCi10eXBlZGVmIGVudW0gewotICBn
b29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX1NUUklORyA9IDAsCi0gIGdvb2dsZV9wcm90b2J1
Zl9GaWVsZE9wdGlvbnNfQ09SRCA9IDEsCi0gIGdvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnNf
U1RSSU5HX1BJRUNFID0gMgotfSBnb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX0NUeXBlOwot
Ci10eXBlZGVmIGVudW0gewotICBnb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX0pTX05PUk1B
TCA9IDAsCi0gIGdvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnNfSlNfU1RSSU5HID0gMSwKLSAg
Z29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19KU19OVU1CRVIgPSAyCi19IGdvb2dsZV9wcm90
b2J1Zl9GaWVsZE9wdGlvbnNfSlNUeXBlOwotCi10eXBlZGVmIGVudW0gewotICBnb29nbGVfcHJv
dG9idWZfRmlsZU9wdGlvbnNfU1BFRUQgPSAxLAotICBnb29nbGVfcHJvdG9idWZfRmlsZU9wdGlv
bnNfQ09ERV9TSVpFID0gMiwKLSAgZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX0xJVEVfUlVO
VElNRSA9IDMKLX0gZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX09wdGltaXplTW9kZTsKLQot
LyogTWVzc2FnZURlZnM6IGNhbGwgdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIHJlZiB0byBhIG1z
Z2RlZi4gKi8KLWNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2Ny
aXB0b3JQcm90b19nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotY29uc3QgdXBiX21zZ2RlZiAqdXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlX2dldChj
b25zdCB2b2lkICpvd25lcik7Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9EZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZV9nZXQoY29uc3Qgdm9pZCAqb3duZXIp
OwotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bURlc2NyaXB0
b3JQcm90b19nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVm
c19nb29nbGVfcHJvdG9idWZfRW51bU9wdGlvbnNfZ2V0KGNvbnN0IHZvaWQgKm93bmVyKTsKLWNv
bnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1WYWx1ZURlc2NyaXB0
b3JQcm90b19nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVm
c19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVlT3B0aW9uc19nZXQoY29uc3Qgdm9pZCAqb3duZXIp
OwotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlw
dG9yUHJvdG9fZ2V0KGNvbnN0IHZvaWQgKm93bmVyKTsKLWNvbnN0IHVwYl9tc2dkZWYgKnVwYmRl
ZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwot
Y29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQ
cm90b19nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19n
b29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JTZXRfZ2V0KGNvbnN0IHZvaWQgKm93bmVyKTsK
LWNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2dl
dChjb25zdCB2b2lkICpvd25lcik7Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9w
cm90b2J1Zl9NZXNzYWdlT3B0aW9uc19nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotY29uc3QgdXBi
X21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWV0aG9kRGVzY3JpcHRvclByb3RvX2dl
dChjb25zdCB2b2lkICpvd25lcik7Ci1jb25zdCB1cGJfbXNnZGVmICp1cGJkZWZzX2dvb2dsZV9w
cm90b2J1Zl9NZXRob2RPcHRpb25zX2dldChjb25zdCB2b2lkICpvd25lcik7Ci1jb25zdCB1cGJf
bXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9PbmVvZkRlc2NyaXB0b3JQcm90b19nZXQo
Y29uc3Qgdm9pZCAqb3duZXIpOwotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfU2VydmljZURlc2NyaXB0b3JQcm90b19nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotY29u
c3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU2VydmljZU9wdGlvbnNfZ2V0
KGNvbnN0IHZvaWQgKm93bmVyKTsKLWNvbnN0IHVwYl9tc2dkZWYgKnVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX1NvdXJjZUNvZGVJbmZvX2dldChjb25zdCB2b2lkICpvd25lcik7Ci1jb25zdCB1cGJf
bXNnZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VDb2RlSW5mb19Mb2NhdGlvbl9n
ZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotY29uc3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVf
cHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlvbl9nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotY29u
c3QgdXBiX21zZ2RlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlv
bl9OYW1lUGFydF9nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotCi0vKiBFbnVtRGVmczogY2FsbCB0
aGVzZSBmdW5jdGlvbnMgdG8gZ2V0IGEgcmVmIHRvIGFuIGVudW1kZWYuICovCi1jb25zdCB1cGJf
ZW51bWRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9fTGFi
ZWxfZ2V0KGNvbnN0IHZvaWQgKm93bmVyKTsKLWNvbnN0IHVwYl9lbnVtZGVmICp1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX2dldChjb25zdCB2b2lkICpv
d25lcik7Ci1jb25zdCB1cGJfZW51bWRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRP
cHRpb25zX0NUeXBlX2dldChjb25zdCB2b2lkICpvd25lcik7Ci1jb25zdCB1cGJfZW51bWRlZiAq
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX0pTVHlwZV9nZXQoY29uc3Qgdm9p
ZCAqb3duZXIpOwotY29uc3QgdXBiX2VudW1kZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Zp
bGVPcHRpb25zX09wdGltaXplTW9kZV9nZXQoY29uc3Qgdm9pZCAqb3duZXIpOwotCi0vKiBGdW5j
dGlvbnMgdG8gdGVzdCB3aGV0aGVyIHRoaXMgbWVzc2FnZSBpcyBvZiBhIGNlcnRhaW4gdHlwZS4g
Ki8KLVVQQl9JTkxJTkUgYm9vbCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlwdG9yUHJv
dG9faXMoY29uc3QgdXBiX21zZ2RlZiAqbSkgewotICByZXR1cm4gc3RyY21wKHVwYl9tc2dkZWZf
ZnVsbG5hbWUobSksICJnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvIikgPT0gMDsKLX0K
LVVQQl9JTkxJTkUgYm9vbCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlwdG9yUHJvdG9f
RXh0ZW5zaW9uUmFuZ2VfaXMoY29uc3QgdXBiX21zZ2RlZiAqbSkgewotICByZXR1cm4gc3RyY21w
KHVwYl9tc2dkZWZfZnVsbG5hbWUobSksICJnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3Rv
LkV4dGVuc2lvblJhbmdlIikgPT0gMDsKLX0KLVVQQl9JTkxJTkUgYm9vbCB1cGJkZWZzX2dvb2ds
ZV9wcm90b2J1Zl9EZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZV9pcyhjb25zdCB1cGJfbXNn
ZGVmICptKSB7Ci0gIHJldHVybiBzdHJjbXAodXBiX21zZ2RlZl9mdWxsbmFtZShtKSwgImdvb2ds
ZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSIpID09IDA7Ci19Ci1VUEJf
SU5MSU5FIGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bURlc2NyaXB0b3JQcm90b19p
cyhjb25zdCB1cGJfbXNnZGVmICptKSB7Ci0gIHJldHVybiBzdHJjbXAodXBiX21zZ2RlZl9mdWxs
bmFtZShtKSwgImdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvIikgPT0gMDsKLX0K
LVVQQl9JTkxJTkUgYm9vbCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtT3B0aW9uc19pcyhj
b25zdCB1cGJfbXNnZGVmICptKSB7Ci0gIHJldHVybiBzdHJjbXAodXBiX21zZ2RlZl9mdWxsbmFt
ZShtKSwgImdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucyIpID09IDA7Ci19Ci1VUEJfSU5MSU5F
IGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVlRGVzY3JpcHRvclByb3RvX2lz
KGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIHN0cmNtcCh1cGJfbXNnZGVmX2Z1bGxu
YW1lKG0pLCAiZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90byIpID09IDA7
Ci19Ci1VUEJfSU5MSU5FIGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVlT3B0
aW9uc19pcyhjb25zdCB1cGJfbXNnZGVmICptKSB7Ci0gIHJldHVybiBzdHJjbXAodXBiX21zZ2Rl
Zl9mdWxsbmFtZShtKSwgImdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zIikgPT0gMDsK
LX0KLVVQQl9JTkxJTkUgYm9vbCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0
b3JQcm90b19pcyhjb25zdCB1cGJfbXNnZGVmICptKSB7Ci0gIHJldHVybiBzdHJjbXAodXBiX21z
Z2RlZl9mdWxsbmFtZShtKSwgImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byIp
ID09IDA7Ci19Ci1VUEJfSU5MSU5FIGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRP
cHRpb25zX2lzKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIHN0cmNtcCh1cGJfbXNn
ZGVmX2Z1bGxuYW1lKG0pLCAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyIpID09IDA7Ci19
Ci1VUEJfSU5MSU5FIGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQ
cm90b19pcyhjb25zdCB1cGJfbXNnZGVmICptKSB7Ci0gIHJldHVybiBzdHJjbXAodXBiX21zZ2Rl
Zl9mdWxsbmFtZShtKSwgImdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvIikgPT0g
MDsKLX0KLVVQQl9JTkxJTkUgYm9vbCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3Jp
cHRvclNldF9pcyhjb25zdCB1cGJfbXNnZGVmICptKSB7Ci0gIHJldHVybiBzdHJjbXAodXBiX21z
Z2RlZl9mdWxsbmFtZShtKSwgImdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldCIpID09
IDA7Ci19Ci1VUEJfSU5MSU5FIGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlv
bnNfaXMoY29uc3QgdXBiX21zZ2RlZiAqbSkgewotICByZXR1cm4gc3RyY21wKHVwYl9tc2dkZWZf
ZnVsbG5hbWUobSksICJnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMiKSA9PSAwOwotfQotVVBC
X0lOTElORSBib29sIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01lc3NhZ2VPcHRpb25zX2lzKGNv
bnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIHN0cmNtcCh1cGJfbXNnZGVmX2Z1bGxuYW1l
KG0pLCAiZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zIikgPT0gMDsKLX0KLVVQQl9JTkxJ
TkUgYm9vbCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNjcmlwdG9yUHJvdG9faXMo
Y29uc3QgdXBiX21zZ2RlZiAqbSkgewotICByZXR1cm4gc3RyY21wKHVwYl9tc2dkZWZfZnVsbG5h
bWUobSksICJnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvIikgPT0gMDsKLX0K
LVVQQl9JTkxJTkUgYm9vbCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2RPcHRpb25zX2lz
KGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIHN0cmNtcCh1cGJfbXNnZGVmX2Z1bGxu
YW1lKG0pLCAiZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMiKSA9PSAwOwotfQotVVBCX0lO
TElORSBib29sIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX09uZW9mRGVzY3JpcHRvclByb3RvX2lz
KGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIHN0cmNtcCh1cGJfbXNnZGVmX2Z1bGxu
YW1lKG0pLCAiZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvIikgPT0gMDsKLX0K
LVVQQl9JTkxJTkUgYm9vbCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9TZXJ2aWNlRGVzY3JpcHRv
clByb3RvX2lzKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIHN0cmNtcCh1cGJfbXNn
ZGVmX2Z1bGxuYW1lKG0pLCAiZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8i
KSA9PSAwOwotfQotVVBCX0lOTElORSBib29sIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NlcnZp
Y2VPcHRpb25zX2lzKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsKLSAgcmV0dXJuIHN0cmNtcCh1cGJf
bXNnZGVmX2Z1bGxuYW1lKG0pLCAiZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zIikgPT0g
MDsKLX0KLVVQQl9JTkxJTkUgYm9vbCB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VDb2Rl
SW5mb19pcyhjb25zdCB1cGJfbXNnZGVmICptKSB7Ci0gIHJldHVybiBzdHJjbXAodXBiX21zZ2Rl
Zl9mdWxsbmFtZShtKSwgImdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbyIpID09IDA7Ci19
Ci1VUEJfSU5MSU5FIGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9f
TG9jYXRpb25faXMoY29uc3QgdXBiX21zZ2RlZiAqbSkgewotICByZXR1cm4gc3RyY21wKHVwYl9t
c2dkZWZfZnVsbG5hbWUobSksICJnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRp
b24iKSA9PSAwOwotfQotVVBCX0lOTElORSBib29sIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1Vu
aW50ZXJwcmV0ZWRPcHRpb25faXMoY29uc3QgdXBiX21zZ2RlZiAqbSkgewotICByZXR1cm4gc3Ry
Y21wKHVwYl9tc2dkZWZfZnVsbG5hbWUobSksICJnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRl
ZE9wdGlvbiIpID09IDA7Ci19Ci1VUEJfSU5MSU5FIGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydF9pcyhjb25zdCB1cGJfbXNnZGVmICptKSB7
Ci0gIHJldHVybiBzdHJjbXAodXBiX21zZ2RlZl9mdWxsbmFtZShtKSwgImdvb2dsZS5wcm90b2J1
Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0IikgPT0gMDsKLX0KLQotLyogRnVuY3Rpb25z
IHRvIHRlc3Qgd2hldGhlciB0aGlzIGVudW0gaXMgb2YgYSBjZXJ0YWluIHR5cGUuICovCi1VUEJf
SU5MSU5FIGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9f
TGFiZWxfaXMoY29uc3QgdXBiX2VudW1kZWYgKmUpIHsKLSAgcmV0dXJuIHN0cmNtcCh1cGJfZW51
bWRlZl9mdWxsbmFtZShlKSwgImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5M
YWJlbCIpID09IDA7Ci19Ci1VUEJfSU5MSU5FIGJvb2wgdXBiZGVmc19nb29nbGVfcHJvdG9idWZf
RmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9pcyhjb25zdCB1cGJfZW51bWRlZiAqZSkgewotICBy
ZXR1cm4gc3RyY21wKHVwYl9lbnVtZGVmX2Z1bGxuYW1lKGUpLCAiZ29vZ2xlLnByb3RvYnVmLkZp
ZWxkRGVzY3JpcHRvclByb3RvLlR5cGUiKSA9PSAwOwotfQotVVBCX0lOTElORSBib29sIHVwYmRl
ZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19DVHlwZV9pcyhjb25zdCB1cGJfZW51bWRl
ZiAqZSkgewotICByZXR1cm4gc3RyY21wKHVwYl9lbnVtZGVmX2Z1bGxuYW1lKGUpLCAiZ29vZ2xl
LnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZSIpID09IDA7Ci19Ci1VUEJfSU5MSU5FIGJvb2wg
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX0pTVHlwZV9pcyhjb25zdCB1cGJf
ZW51bWRlZiAqZSkgewotICByZXR1cm4gc3RyY21wKHVwYl9lbnVtZGVmX2Z1bGxuYW1lKGUpLCAi
Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGUiKSA9PSAwOwotfQotVVBCX0lOTElO
RSBib29sIHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX09wdGltaXplTW9kZV9p
cyhjb25zdCB1cGJfZW51bWRlZiAqZSkgewotICByZXR1cm4gc3RyY21wKHVwYl9lbnVtZGVmX2Z1
bGxuYW1lKGUpLCAiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZSIpID09
IDA7Ci19Ci0KLQotLyogRnVuY3Rpb25zIHRvIGdldCBhIGZpZWxkZGVmIGZyb20gYSBtc2dkZWYg
cmVmZXJlbmNlLiAqLwotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZV9mX2VuZChjb25zdCB1
cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlwdG9y
UHJvdG9fRXh0ZW5zaW9uUmFuZ2VfaXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDIp
OyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlX2Zfc3RhcnQoY29uc3QgdXBiX21zZ2Rl
ZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX0V4
dGVuc2lvblJhbmdlX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAxKTsgfQotVVBC
X0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2Ny
aXB0b3JQcm90b19SZXNlcnZlZFJhbmdlX2ZfZW5kKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNz
ZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdl
X2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAyKTsgfQotVVBCX0lOTElORSBjb25z
dCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19S
ZXNlcnZlZFJhbmdlX2Zfc3RhcnQoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVm
c19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2VfaXMobSkpOyBy
ZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVs
ZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX2ZfZW51bV90eXBl
KGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rl
c2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNCk7IH0KLVVQ
Ql9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNj
cmlwdG9yUHJvdG9fZl9leHRlbnNpb24oY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX2lzKG0pKTsgcmV0dXJuIHVwYl9t
c2dkZWZfaXRvZihtLCA2KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRl
ZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19mX2V4dGVuc2lvbl9yYW5nZShjb25z
dCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlw
dG9yUHJvdG9faXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDUpOyB9Ci1VUEJfSU5M
SU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRv
clByb3RvX2ZfZmllbGQoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRv
ZihtLCAyKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19mX25hbWUoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBh
c3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX2lzKG0pKTsgcmV0
dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAxKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRk
ZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19mX25lc3RlZF90eXBl
KGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rl
c2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMyk7IH0KLVVQ
Ql9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNj
cmlwdG9yUHJvdG9fZl9vbmVvZl9kZWNsKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVw
YmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJf
bXNnZGVmX2l0b2YobSwgOCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJk
ZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlwdG9yUHJvdG9fZl9vcHRpb25zKGNvbnN0IHVwYl9t
c2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90
b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNyk7IH0KLVVQQl9JTkxJTkUgY29u
c3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9EZXNjcmlwdG9yUHJvdG9f
Zl9yZXNlcnZlZF9uYW1lKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0
b2YobSwgMTApOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX2ZfcmVzZXJ2ZWRfcmFuZ2UoY29uc3QgdXBiX21z
Z2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3Rv
X2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCA5KTsgfQotVVBCX0lOTElORSBjb25z
dCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1EZXNjcmlwdG9yUHJv
dG9fZl9uYW1lKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX0VudW1EZXNjcmlwdG9yUHJvdG9faXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9m
KG0sIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVf
cHJvdG9idWZfRW51bURlc2NyaXB0b3JQcm90b19mX29wdGlvbnMoY29uc3QgdXBiX21zZ2RlZiAq
bSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bURlc2NyaXB0b3JQcm90b19p
cyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMyk7IH0KLVVQQl9JTkxJTkUgY29uc3Qg
dXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtRGVzY3JpcHRvclByb3Rv
X2ZfdmFsdWUoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJv
dG9idWZfRW51bURlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2Yo
bSwgMik7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9w
cm90b2J1Zl9FbnVtT3B0aW9uc19mX2FsbG93X2FsaWFzKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsg
YXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1PcHRpb25zX2lzKG0pKTsgcmV0dXJu
IHVwYl9tc2dkZWZfaXRvZihtLCAyKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYg
KnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1PcHRpb25zX2ZfZGVwcmVjYXRlZChjb25zdCB1
cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtT3B0aW9u
c19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMyk7IH0KLVVQQl9JTkxJTkUgY29u
c3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtT3B0aW9uc19mX3Vu
aW50ZXJwcmV0ZWRfb3B0aW9uKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNf
Z29vZ2xlX3Byb3RvYnVmX0VudW1PcHRpb25zX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRv
ZihtLCA5OTkpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRW51bVZhbHVlRGVzY3JpcHRvclByb3RvX2ZfbmFtZShjb25zdCB1cGJfbXNn
ZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtVmFsdWVEZXNjcmlw
dG9yUHJvdG9faXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDEpOyB9Ci1VUEJfSU5M
SU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bVZhbHVl
RGVzY3JpcHRvclByb3RvX2ZfbnVtYmVyKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVw
YmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1WYWx1ZURlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJl
dHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMik7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxk
ZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9fZl9v
cHRpb25zKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX0VudW1WYWx1ZURlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0
b2YobSwgMyk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2ds
ZV9wcm90b2J1Zl9FbnVtVmFsdWVPcHRpb25zX2ZfZGVwcmVjYXRlZChjb25zdCB1cGJfbXNnZGVm
ICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtVmFsdWVPcHRpb25zX2lz
KG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAxKTsgfQotVVBCX0lOTElORSBjb25zdCB1
cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1WYWx1ZU9wdGlvbnNfZl91
bmludGVycHJldGVkX29wdGlvbihjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9FbnVtVmFsdWVPcHRpb25zX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dk
ZWZfaXRvZihtLCA5OTkpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVm
c19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9fZl9kZWZhdWx0X3ZhbHVlKGNv
bnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxk
RGVzY3JpcHRvclByb3RvX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCA3KTsgfQot
VVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Zp
ZWxkRGVzY3JpcHRvclByb3RvX2ZfZXh0ZW5kZWUoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3Nl
cnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9faXMobSkpOyBy
ZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDIpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVs
ZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9fZl9qc29u
X25hbWUoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfRmllbGREZXNjcmlwdG9yUHJvdG9faXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0s
IDEwKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX2ZfbGFiZWwoY29uc3QgdXBiX21zZ2RlZiAqbSkg
eyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9faXMo
bSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDQpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVw
Yl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9f
Zl9uYW1lKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZiht
LCAxKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX2ZfbnVtYmVyKGNvbnN0IHVwYl9tc2dkZWYgKm0p
IHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3RvX2lz
KG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAzKTsgfQotVVBCX0lOTElORSBjb25zdCB1
cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRvclByb3Rv
X2Zfb25lb2ZfaW5kZXgoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9faXMobSkpOyByZXR1cm4gdXBiX21zZ2Rl
Zl9pdG9mKG0sIDkpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19n
b29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9fZl9vcHRpb25zKGNvbnN0IHVwYl9t
c2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3JpcHRv
clByb3RvX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCA4KTsgfQotVVBCX0lOTElO
RSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkRGVzY3Jp
cHRvclByb3RvX2ZfdHlwZShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNn
ZGVmX2l0b2YobSwgNSk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19mX3R5cGVfbmFtZShjb25zdCB1
cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2Ny
aXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNik7IH0KLVVQQl9J
TkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9w
dGlvbnNfZl9jdHlwZShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2ds
ZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnNfaXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0s
IDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfRmllbGRPcHRpb25zX2ZfZGVwcmVjYXRlZChjb25zdCB1cGJfbXNnZGVmICptKSB7IGFz
c2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnNfaXMobSkpOyByZXR1cm4g
dXBiX21zZ2RlZl9pdG9mKG0sIDMpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAq
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX2ZfanN0eXBlKGNvbnN0IHVwYl9t
c2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19p
cyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNik7IH0KLVVQQl9JTkxJTkUgY29uc3Qg
dXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlvbnNfZl9sYXp5
KGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Zp
ZWxkT3B0aW9uc19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNSk7IH0KLVVQQl9J
TkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9w
dGlvbnNfZl9wYWNrZWQoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29n
bGVfcHJvdG9idWZfRmllbGRPcHRpb25zX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZiht
LCAyKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX0ZpZWxkT3B0aW9uc19mX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKGNvbnN0IHVwYl9tc2dk
ZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19pcyht
KSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgOTk5KTsgfQotVVBCX0lOTElORSBjb25zdCB1
cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19mX3dlYWso
Y29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmll
bGRPcHRpb25zX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAxMCk7IH0KLVVQQl9J
TkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVz
Y3JpcHRvclByb3RvX2ZfZGVwZW5kZW5jeShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1
cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvX2lzKG0pKTsgcmV0dXJu
IHVwYl9tc2dkZWZfaXRvZihtLCAzKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYg
KnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9fZl9lbnVtX3R5cGUo
Y29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmls
ZURlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNSk7IH0K
LVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9G
aWxlRGVzY3JpcHRvclByb3RvX2ZfZXh0ZW5zaW9uKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNz
ZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9faXMobSkpOyBy
ZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDcpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVs
ZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19mX21lc3Nh
Z2VfdHlwZShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZiht
LCA0KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9fZl9uYW1lKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsg
YXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9faXMobSkp
OyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9m
aWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19mX29w
dGlvbnMoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfRmlsZURlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwg
OCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvX2ZfcGFja2FnZShjb25zdCB1cGJfbXNnZGVmICptKSB7
IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvX2lzKG0p
KTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAyKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJf
ZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9fZl9w
dWJsaWNfZGVwZW5kZW5jeShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dk
ZWZfaXRvZihtLCAxMCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvX2Zfc2VydmljZShjb25zdCB1cGJf
bXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRv
clByb3RvX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCA2KTsgfQotVVBCX0lOTElO
RSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlw
dG9yUHJvdG9fZl9zb3VyY2VfY29kZV9pbmZvKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0
KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9faXMobSkpOyByZXR1
cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDkpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRl
ZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JQcm90b19mX3N5bnRheChj
b25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxl
RGVzY3JpcHRvclByb3RvX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAxMik7IH0K
LVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9G
aWxlRGVzY3JpcHRvclByb3RvX2Zfd2Vha19kZXBlbmRlbmN5KGNvbnN0IHVwYl9tc2dkZWYgKm0p
IHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yUHJvdG9faXMo
bSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDExKTsgfQotVVBCX0lOTElORSBjb25zdCB1
cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yU2V0X2Zf
ZmlsZShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9GaWxlRGVzY3JpcHRvclNldF9pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMSk7
IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9GaWxlT3B0aW9uc19mX2NjX2VuYWJsZV9hcmVuYXMoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBh
c3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfaXMobSkpOyByZXR1cm4g
dXBiX21zZ2RlZl9pdG9mKG0sIDMxKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYg
KnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2ZfY2NfZ2VuZXJpY19zZXJ2aWNl
cyhjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9G
aWxlT3B0aW9uc19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMTYpOyB9Ci1VUEJf
SU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9w
dGlvbnNfZl9jc2hhcnBfbmFtZXNwYWNlKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVw
YmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dk
ZWZfaXRvZihtLCAzNyk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19mX2RlcHJlY2F0ZWQoY29uc3QgdXBiX21zZ2Rl
ZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfaXMobSkp
OyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDIzKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJf
ZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2ZfZ29fcGFja2Fn
ZShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9G
aWxlT3B0aW9uc19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMTEpOyB9Ci1VUEJf
SU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9w
dGlvbnNfZl9qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaChjb25zdCB1cGJfbXNnZGVmICpt
KSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19pcyhtKSk7IHJl
dHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMjApOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVs
ZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfZl9qYXZhX2dlbmVyaWNf
c2VydmljZXMoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJv
dG9idWZfRmlsZU9wdGlvbnNfaXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDE3KTsg
fQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X0ZpbGVPcHRpb25zX2ZfamF2YV9tdWx0aXBsZV9maWxlcyhjb25zdCB1cGJfbXNnZGVmICptKSB7
IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19pcyhtKSk7IHJldHVy
biB1cGJfbXNnZGVmX2l0b2YobSwgMTApOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRl
ZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfZl9qYXZhX291dGVyX2NsYXNz
bmFtZShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9GaWxlT3B0aW9uc19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgOCk7IH0KLVVQ
Ql9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxl
T3B0aW9uc19mX2phdmFfcGFja2FnZShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJk
ZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVm
X2l0b2YobSwgMSk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19mX2phdmFfc3RyaW5nX2NoZWNrX3V0ZjgoY29uc3Qg
dXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlv
bnNfaXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDI3KTsgfQotVVBCX0lOTElORSBj
b25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2Zf
amF2YW5hbm9fdXNlX2RlcHJlY2F0ZWRfcGFja2FnZShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFz
c2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19pcyhtKSk7IHJldHVybiB1
cGJfbXNnZGVmX2l0b2YobSwgMzgpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAq
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfZl9vYmpjX2NsYXNzX3ByZWZpeChj
b25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxl
T3B0aW9uc19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMzYpOyB9Ci1VUEJfSU5M
SU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZU9wdGlv
bnNfZl9vcHRpbWl6ZV9mb3IoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19n
b29nbGVfcHJvdG9idWZfRmlsZU9wdGlvbnNfaXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9m
KG0sIDkpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVf
cHJvdG9idWZfRmlsZU9wdGlvbnNfZl9weV9nZW5lcmljX3NlcnZpY2VzKGNvbnN0IHVwYl9tc2dk
ZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX2lzKG0p
KTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAxOCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBi
X2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlT3B0aW9uc19mX3VuaW50ZXJw
cmV0ZWRfb3B0aW9uKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX0ZpbGVPcHRpb25zX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCA5
OTkpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfTWVzc2FnZU9wdGlvbnNfZl9kZXByZWNhdGVkKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsg
YXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01lc3NhZ2VPcHRpb25zX2lzKG0pKTsgcmV0
dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAzKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRk
ZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01lc3NhZ2VPcHRpb25zX2ZfbWFwX2VudHJ5KGNv
bnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01lc3Nh
Z2VPcHRpb25zX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCA3KTsgfQotVVBCX0lO
TElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01lc3NhZ2VP
cHRpb25zX2ZfbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBh
c3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWVzc2FnZU9wdGlvbnNfaXMobSkpOyByZXR1
cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRl
ZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWVzc2FnZU9wdGlvbnNfZl9ub19zdGFuZGFyZF9k
ZXNjcmlwdG9yX2FjY2Vzc29yKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNf
Z29vZ2xlX3Byb3RvYnVmX01lc3NhZ2VPcHRpb25zX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZf
aXRvZihtLCAyKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX01lc3NhZ2VPcHRpb25zX2ZfdW5pbnRlcnByZXRlZF9vcHRpb24oY29uc3Qg
dXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWVzc2FnZU9w
dGlvbnNfaXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDk5OSk7IH0KLVVQQl9JTkxJ
TkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNj
cmlwdG9yUHJvdG9fZl9jbGllbnRfc3RyZWFtaW5nKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNz
ZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01ldGhvZERlc2NyaXB0b3JQcm90b19pcyhtKSk7
IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNSk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2Zp
ZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNjcmlwdG9yUHJvdG9fZl9p
bnB1dF90eXBlKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX01ldGhvZERlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0
b2YobSwgMik7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2ds
ZV9wcm90b2J1Zl9NZXRob2REZXNjcmlwdG9yUHJvdG9fZl9uYW1lKGNvbnN0IHVwYl9tc2dkZWYg
Km0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01ldGhvZERlc2NyaXB0b3JQcm90
b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMSk7IH0KLVVQQl9JTkxJTkUgY29u
c3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNjcmlwdG9y
UHJvdG9fZl9vcHRpb25zKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX01ldGhvZERlc2NyaXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNn
ZGVmX2l0b2YobSwgNCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNjcmlwdG9yUHJvdG9fZl9vdXRwdXRfdHlwZShjb25z
dCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2RE
ZXNjcmlwdG9yUHJvdG9faXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDMpOyB9Ci1V
UEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWV0
aG9kRGVzY3JpcHRvclByb3RvX2Zfc2VydmVyX3N0cmVhbWluZyhjb25zdCB1cGJfbXNnZGVmICpt
KSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9NZXRob2REZXNjcmlwdG9yUHJvdG9f
aXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDYpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0
IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWV0aG9kT3B0aW9uc19mX2Rl
cHJlY2F0ZWQoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJv
dG9idWZfTWV0aG9kT3B0aW9uc19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMzMp
OyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfTWV0aG9kT3B0aW9uc19mX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKGNvbnN0IHVwYl9tc2dkZWYg
Km0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01ldGhvZE9wdGlvbnNfaXMobSkp
OyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDk5OSk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBi
X2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9PbmVvZkRlc2NyaXB0b3JQcm90b19m
X25hbWUoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9i
dWZfT25lb2ZEZXNjcmlwdG9yUHJvdG9faXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0s
IDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfU2VydmljZURlc2NyaXB0b3JQcm90b19mX21ldGhvZChjb25zdCB1cGJfbXNnZGVmICpt
KSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9TZXJ2aWNlRGVzY3JpcHRvclByb3Rv
X2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAyKTsgfQotVVBCX0lOTElORSBjb25z
dCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NlcnZpY2VEZXNjcmlwdG9y
UHJvdG9fZl9uYW1lKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xl
X3Byb3RvYnVmX1NlcnZpY2VEZXNjcmlwdG9yUHJvdG9faXMobSkpOyByZXR1cm4gdXBiX21zZ2Rl
Zl9pdG9mKG0sIDEpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19n
b29nbGVfcHJvdG9idWZfU2VydmljZURlc2NyaXB0b3JQcm90b19mX29wdGlvbnMoY29uc3QgdXBi
X21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfU2VydmljZURlc2Ny
aXB0b3JQcm90b19pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMyk7IH0KLVVQQl9J
TkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9TZXJ2aWNl
T3B0aW9uc19mX2RlcHJlY2F0ZWQoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVm
c19nb29nbGVfcHJvdG9idWZfU2VydmljZU9wdGlvbnNfaXMobSkpOyByZXR1cm4gdXBiX21zZ2Rl
Zl9pdG9mKG0sIDMzKTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNf
Z29vZ2xlX3Byb3RvYnVmX1NlcnZpY2VPcHRpb25zX2ZfdW5pbnRlcnByZXRlZF9vcHRpb24oY29u
c3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfU2Vydmlj
ZU9wdGlvbnNfaXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDk5OSk7IH0KLVVQQl9J
TkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbl9mX2xlYWRpbmdfY29tbWVudHMoY29uc3QgdXBiX21zZ2RlZiAqbSkg
eyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9fTG9jYXRpb25f
aXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDMpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0
IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9fTG9j
YXRpb25fZl9sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsg
YXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NvdXJjZUNvZGVJbmZvX0xvY2F0aW9uX2lz
KG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCA2KTsgfQotVVBCX0lOTElORSBjb25zdCB1
cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NvdXJjZUNvZGVJbmZvX0xvY2F0
aW9uX2ZfcGF0aChjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9w
cm90b2J1Zl9Tb3VyY2VDb2RlSW5mb19Mb2NhdGlvbl9pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVm
X2l0b2YobSwgMSk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9Tb3VyY2VDb2RlSW5mb19Mb2NhdGlvbl9mX3NwYW4oY29uc3QgdXBiX21z
Z2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29kZUluZm9f
TG9jYXRpb25faXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDIpOyB9Ci1VUEJfSU5M
SU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfU291cmNlQ29k
ZUluZm9fTG9jYXRpb25fZl90cmFpbGluZ19jb21tZW50cyhjb25zdCB1cGJfbXNnZGVmICptKSB7
IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VDb2RlSW5mb19Mb2NhdGlvbl9p
cyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNCk7IH0KLVVQQl9JTkxJTkUgY29uc3Qg
dXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VDb2RlSW5mb19mX2xv
Y2F0aW9uKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3Rv
YnVmX1NvdXJjZUNvZGVJbmZvX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAxKTsg
fQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVm
X1VuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnRfZl9pc19leHRlbnNpb24oY29uc3QgdXBiX21z
Z2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9w
dGlvbl9OYW1lUGFydF9pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgMik7IH0KLVVQ
Ql9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Vbmlu
dGVycHJldGVkT3B0aW9uX05hbWVQYXJ0X2ZfbmFtZV9wYXJ0KGNvbnN0IHVwYl9tc2dkZWYgKm0p
IHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRpb25fTmFt
ZVBhcnRfaXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9mKG0sIDEpOyB9Ci1VUEJfSU5MSU5F
IGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRl
ZE9wdGlvbl9mX2FnZ3JlZ2F0ZV92YWx1ZShjb25zdCB1cGJfbXNnZGVmICptKSB7IGFzc2VydCh1
cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uX2lzKG0pKTsgcmV0dXJu
IHVwYl9tc2dkZWZfaXRvZihtLCA4KTsgfQotVVBCX0lOTElORSBjb25zdCB1cGJfZmllbGRkZWYg
KnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRpb25fZl9kb3VibGVfdmFs
dWUoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZf
VW5pbnRlcnByZXRlZE9wdGlvbl9pcyhtKSk7IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNik7
IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2ZpZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9VbmludGVycHJldGVkT3B0aW9uX2ZfaWRlbnRpZmllcl92YWx1ZShjb25zdCB1cGJfbXNnZGVm
ICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9u
X2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCAzKTsgfQotVVBCX0lOTElORSBjb25z
dCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRp
b25fZl9uYW1lKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRpb25faXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9m
KG0sIDIpOyB9Ci1VUEJfSU5MSU5FIGNvbnN0IHVwYl9maWVsZGRlZiAqdXBiZGVmc19nb29nbGVf
cHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlvbl9mX25lZ2F0aXZlX2ludF92YWx1ZShjb25zdCB1
cGJfbXNnZGVmICptKSB7IGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJl
dGVkT3B0aW9uX2lzKG0pKTsgcmV0dXJuIHVwYl9tc2dkZWZfaXRvZihtLCA1KTsgfQotVVBCX0lO
TElORSBjb25zdCB1cGJfZmllbGRkZWYgKnVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1VuaW50ZXJw
cmV0ZWRPcHRpb25fZl9wb3NpdGl2ZV9pbnRfdmFsdWUoY29uc3QgdXBiX21zZ2RlZiAqbSkgeyBh
c3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlvbl9pcyhtKSk7
IHJldHVybiB1cGJfbXNnZGVmX2l0b2YobSwgNCk7IH0KLVVQQl9JTkxJTkUgY29uc3QgdXBiX2Zp
ZWxkZGVmICp1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uX2Zfc3Ry
aW5nX3ZhbHVlKGNvbnN0IHVwYl9tc2dkZWYgKm0pIHsgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3By
b3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRpb25faXMobSkpOyByZXR1cm4gdXBiX21zZ2RlZl9pdG9m
KG0sIDcpOyB9Ci0KLVVQQl9FTkRfRVhURVJOX0MKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLW5h
bWVzcGFjZSB1cGJkZWZzIHsKLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLQotY2xhc3MgRGVzY3JpcHRvclByb3RvIDogcHVibGljIDo6dXBiOjpyZWZmZWRfcHRyPGNv
bnN0IDo6dXBiOjpNZXNzYWdlRGVmPiB7Ci0gcHVibGljOgotICBEZXNjcmlwdG9yUHJvdG8oY29u
c3QgOjp1cGI6Ok1lc3NhZ2VEZWYqIG0sIGNvbnN0IHZvaWQgKnJlZl9kb25vciA9IE5VTEwpCi0g
ICAgICA6IHJlZmZlZF9wdHIobSwgcmVmX2Rvbm9yKSB7Ci0gICAgYXNzZXJ0KHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19pcyhtKSk7Ci0gIH0KLQotICBzdGF0aWMgRGVz
Y3JpcHRvclByb3RvIGdldCgpIHsKLSAgICBjb25zdCA6OnVwYjo6TWVzc2FnZURlZiogbSA9IHVw
YmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19nZXQoJm0pOwotICAgIHJldHVy
biBEZXNjcmlwdG9yUHJvdG8obSwgJm0pOwotICB9Ci0KLSAgY2xhc3MgRXh0ZW5zaW9uUmFuZ2Ug
OiBwdWJsaWMgOjp1cGI6OnJlZmZlZF9wdHI8Y29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWY+IHsKLSAg
IHB1YmxpYzoKLSAgICBFeHRlbnNpb25SYW5nZShjb25zdCA6OnVwYjo6TWVzc2FnZURlZiogbSwg
Y29uc3Qgdm9pZCAqcmVmX2Rvbm9yID0gTlVMTCkKLSAgICAgICAgOiByZWZmZWRfcHRyKG0sIHJl
Zl9kb25vcikgewotICAgICAgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0
b3JQcm90b19FeHRlbnNpb25SYW5nZV9pcyhtKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEV4dGVu
c2lvblJhbmdlIGdldCgpIHsKLSAgICAgIGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtID0gdXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlX2dldCgm
bSk7Ci0gICAgICByZXR1cm4gRXh0ZW5zaW9uUmFuZ2UobSwgJm0pOwotICAgIH0KLSAgfTsKLQot
ICBjbGFzcyBSZXNlcnZlZFJhbmdlIDogcHVibGljIDo6dXBiOjpyZWZmZWRfcHRyPGNvbnN0IDo6
dXBiOjpNZXNzYWdlRGVmPiB7Ci0gICBwdWJsaWM6Ci0gICAgUmVzZXJ2ZWRSYW5nZShjb25zdCA6
OnVwYjo6TWVzc2FnZURlZiogbSwgY29uc3Qgdm9pZCAqcmVmX2Rvbm9yID0gTlVMTCkKLSAgICAg
ICAgOiByZWZmZWRfcHRyKG0sIHJlZl9kb25vcikgewotICAgICAgYXNzZXJ0KHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlX2lzKG0pKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgUmVzZXJ2ZWRSYW5nZSBnZXQoKSB7Ci0gICAgICBjb25zdCA6OnVwYjo6
TWVzc2FnZURlZiogbSA9IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Rlc2NyaXB0b3JQcm90b19S
ZXNlcnZlZFJhbmdlX2dldCgmbSk7Ci0gICAgICByZXR1cm4gUmVzZXJ2ZWRSYW5nZShtLCAmbSk7
Ci0gICAgfQotICB9OwotfTsKLQotY2xhc3MgRW51bURlc2NyaXB0b3JQcm90byA6IHB1YmxpYyA6
OnVwYjo6cmVmZmVkX3B0cjxjb25zdCA6OnVwYjo6TWVzc2FnZURlZj4gewotIHB1YmxpYzoKLSAg
RW51bURlc2NyaXB0b3JQcm90byhjb25zdCA6OnVwYjo6TWVzc2FnZURlZiogbSwgY29uc3Qgdm9p
ZCAqcmVmX2Rvbm9yID0gTlVMTCkKLSAgICAgIDogcmVmZmVkX3B0cihtLCByZWZfZG9ub3IpIHsK
LSAgICBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRW51bURlc2NyaXB0b3JQcm90b19p
cyhtKSk7Ci0gIH0KLQotICBzdGF0aWMgRW51bURlc2NyaXB0b3JQcm90byBnZXQoKSB7Ci0gICAg
Y29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWYqIG0gPSB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVt
RGVzY3JpcHRvclByb3RvX2dldCgmbSk7Ci0gICAgcmV0dXJuIEVudW1EZXNjcmlwdG9yUHJvdG8o
bSwgJm0pOwotICB9Ci19OwotCi1jbGFzcyBFbnVtT3B0aW9ucyA6IHB1YmxpYyA6OnVwYjo6cmVm
ZmVkX3B0cjxjb25zdCA6OnVwYjo6TWVzc2FnZURlZj4gewotIHB1YmxpYzoKLSAgRW51bU9wdGlv
bnMoY29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWYqIG0sIGNvbnN0IHZvaWQgKnJlZl9kb25vciA9IE5V
TEwpCi0gICAgICA6IHJlZmZlZF9wdHIobSwgcmVmX2Rvbm9yKSB7Ci0gICAgYXNzZXJ0KHVwYmRl
ZnNfZ29vZ2xlX3Byb3RvYnVmX0VudW1PcHRpb25zX2lzKG0pKTsKLSAgfQotCi0gIHN0YXRpYyBF
bnVtT3B0aW9ucyBnZXQoKSB7Ci0gICAgY29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWYqIG0gPSB1cGJk
ZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtT3B0aW9uc19nZXQoJm0pOwotICAgIHJldHVybiBFbnVt
T3B0aW9ucyhtLCAmbSk7Ci0gIH0KLX07Ci0KLWNsYXNzIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90
byA6IHB1YmxpYyA6OnVwYjo6cmVmZmVkX3B0cjxjb25zdCA6OnVwYjo6TWVzc2FnZURlZj4gewot
IHB1YmxpYzoKLSAgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKGNvbnN0IDo6dXBiOjpNZXNzYWdl
RGVmKiBtLCBjb25zdCB2b2lkICpyZWZfZG9ub3IgPSBOVUxMKQotICAgICAgOiByZWZmZWRfcHRy
KG0sIHJlZl9kb25vcikgewotICAgIGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVt
VmFsdWVEZXNjcmlwdG9yUHJvdG9faXMobSkpOwotICB9Ci0KLSAgc3RhdGljIEVudW1WYWx1ZURl
c2NyaXB0b3JQcm90byBnZXQoKSB7Ci0gICAgY29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWYqIG0gPSB1
cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9fZ2V0KCZtKTsK
LSAgICByZXR1cm4gRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKG0sICZtKTsKLSAgfQotfTsKLQot
Y2xhc3MgRW51bVZhbHVlT3B0aW9ucyA6IHB1YmxpYyA6OnVwYjo6cmVmZmVkX3B0cjxjb25zdCA6
OnVwYjo6TWVzc2FnZURlZj4gewotIHB1YmxpYzoKLSAgRW51bVZhbHVlT3B0aW9ucyhjb25zdCA6
OnVwYjo6TWVzc2FnZURlZiogbSwgY29uc3Qgdm9pZCAqcmVmX2Rvbm9yID0gTlVMTCkKLSAgICAg
IDogcmVmZmVkX3B0cihtLCByZWZfZG9ub3IpIHsKLSAgICBhc3NlcnQodXBiZGVmc19nb29nbGVf
cHJvdG9idWZfRW51bVZhbHVlT3B0aW9uc19pcyhtKSk7Ci0gIH0KLQotICBzdGF0aWMgRW51bVZh
bHVlT3B0aW9ucyBnZXQoKSB7Ci0gICAgY29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWYqIG0gPSB1cGJk
ZWZzX2dvb2dsZV9wcm90b2J1Zl9FbnVtVmFsdWVPcHRpb25zX2dldCgmbSk7Ci0gICAgcmV0dXJu
IEVudW1WYWx1ZU9wdGlvbnMobSwgJm0pOwotICB9Ci19OwotCi1jbGFzcyBGaWVsZERlc2NyaXB0
b3JQcm90byA6IHB1YmxpYyA6OnVwYjo6cmVmZmVkX3B0cjxjb25zdCA6OnVwYjo6TWVzc2FnZURl
Zj4gewotIHB1YmxpYzoKLSAgRmllbGREZXNjcmlwdG9yUHJvdG8oY29uc3QgOjp1cGI6Ok1lc3Nh
Z2VEZWYqIG0sIGNvbnN0IHZvaWQgKnJlZl9kb25vciA9IE5VTEwpCi0gICAgICA6IHJlZmZlZF9w
dHIobSwgcmVmX2Rvbm9yKSB7Ci0gICAgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0Zp
ZWxkRGVzY3JpcHRvclByb3RvX2lzKG0pKTsKLSAgfQotCi0gIHN0YXRpYyBGaWVsZERlc2NyaXB0
b3JQcm90byBnZXQoKSB7Ci0gICAgY29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWYqIG0gPSB1cGJkZWZz
X2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19nZXQoJm0pOwotICAgIHJldHVy
biBGaWVsZERlc2NyaXB0b3JQcm90byhtLCAmbSk7Ci0gIH0KLQotICBjbGFzcyBMYWJlbCA6IHB1
YmxpYyA6OnVwYjo6cmVmZmVkX3B0cjxjb25zdCA6OnVwYjo6RW51bURlZj4gewotICAgcHVibGlj
OgotICAgIExhYmVsKGNvbnN0IDo6dXBiOjpFbnVtRGVmKiBlLCBjb25zdCB2b2lkICpyZWZfZG9u
b3IgPSBOVUxMKQotICAgICAgICA6IHJlZmZlZF9wdHIoZSwgcmVmX2Rvbm9yKSB7Ci0gICAgICBh
c3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxf
aXMoZSkpOwotICAgIH0KLSAgICBzdGF0aWMgTGFiZWwgZ2V0KCkgewotICAgICAgY29uc3QgOjp1
cGI6OkVudW1EZWYqIGUgPSB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZERlc2NyaXB0b3JQ
cm90b19MYWJlbF9nZXQoJmUpOwotICAgICAgcmV0dXJuIExhYmVsKGUsICZlKTsKLSAgICB9Ci0g
IH07Ci0KLSAgY2xhc3MgVHlwZSA6IHB1YmxpYyA6OnVwYjo6cmVmZmVkX3B0cjxjb25zdCA6OnVw
Yjo6RW51bURlZj4gewotICAgcHVibGljOgotICAgIFR5cGUoY29uc3QgOjp1cGI6OkVudW1EZWYq
IGUsIGNvbnN0IHZvaWQgKnJlZl9kb25vciA9IE5VTEwpCi0gICAgICAgIDogcmVmZmVkX3B0cihl
LCByZWZfZG9ub3IpIHsKLSAgICAgIGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVs
ZERlc2NyaXB0b3JQcm90b19UeXBlX2lzKGUpKTsKLSAgICB9Ci0gICAgc3RhdGljIFR5cGUgZ2V0
KCkgewotICAgICAgY29uc3QgOjp1cGI6OkVudW1EZWYqIGUgPSB1cGJkZWZzX2dvb2dsZV9wcm90
b2J1Zl9GaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX2dldCgmZSk7Ci0gICAgICByZXR1cm4gVHlw
ZShlLCAmZSk7Ci0gICAgfQotICB9OwotfTsKLQotY2xhc3MgRmllbGRPcHRpb25zIDogcHVibGlj
IDo6dXBiOjpyZWZmZWRfcHRyPGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmPiB7Ci0gcHVibGljOgot
ICBGaWVsZE9wdGlvbnMoY29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWYqIG0sIGNvbnN0IHZvaWQgKnJl
Zl9kb25vciA9IE5VTEwpCi0gICAgICA6IHJlZmZlZF9wdHIobSwgcmVmX2Rvbm9yKSB7Ci0gICAg
YXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19pcyhtKSk7Ci0gIH0K
LQotICBzdGF0aWMgRmllbGRPcHRpb25zIGdldCgpIHsKLSAgICBjb25zdCA6OnVwYjo6TWVzc2Fn
ZURlZiogbSA9IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19nZXQoJm0pOwot
ICAgIHJldHVybiBGaWVsZE9wdGlvbnMobSwgJm0pOwotICB9Ci0KLSAgY2xhc3MgQ1R5cGUgOiBw
dWJsaWMgOjp1cGI6OnJlZmZlZF9wdHI8Y29uc3QgOjp1cGI6OkVudW1EZWY+IHsKLSAgIHB1Ymxp
YzoKLSAgICBDVHlwZShjb25zdCA6OnVwYjo6RW51bURlZiogZSwgY29uc3Qgdm9pZCAqcmVmX2Rv
bm9yID0gTlVMTCkKLSAgICAgICAgOiByZWZmZWRfcHRyKGUsIHJlZl9kb25vcikgewotICAgICAg
YXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19DVHlwZV9pcyhlKSk7
Ci0gICAgfQotICAgIHN0YXRpYyBDVHlwZSBnZXQoKSB7Ci0gICAgICBjb25zdCA6OnVwYjo6RW51
bURlZiogZSA9IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpZWxkT3B0aW9uc19DVHlwZV9nZXQo
JmUpOwotICAgICAgcmV0dXJuIENUeXBlKGUsICZlKTsKLSAgICB9Ci0gIH07Ci0KLSAgY2xhc3Mg
SlNUeXBlIDogcHVibGljIDo6dXBiOjpyZWZmZWRfcHRyPGNvbnN0IDo6dXBiOjpFbnVtRGVmPiB7
Ci0gICBwdWJsaWM6Ci0gICAgSlNUeXBlKGNvbnN0IDo6dXBiOjpFbnVtRGVmKiBlLCBjb25zdCB2
b2lkICpyZWZfZG9ub3IgPSBOVUxMKQotICAgICAgICA6IHJlZmZlZF9wdHIoZSwgcmVmX2Rvbm9y
KSB7Ci0gICAgICBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmllbGRPcHRpb25zX0pT
VHlwZV9pcyhlKSk7Ci0gICAgfQotICAgIHN0YXRpYyBKU1R5cGUgZ2V0KCkgewotICAgICAgY29u
c3QgOjp1cGI6OkVudW1EZWYqIGUgPSB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWVsZE9wdGlv
bnNfSlNUeXBlX2dldCgmZSk7Ci0gICAgICByZXR1cm4gSlNUeXBlKGUsICZlKTsKLSAgICB9Ci0g
IH07Ci19OwotCi1jbGFzcyBGaWxlRGVzY3JpcHRvclByb3RvIDogcHVibGljIDo6dXBiOjpyZWZm
ZWRfcHRyPGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmPiB7Ci0gcHVibGljOgotICBGaWxlRGVzY3Jp
cHRvclByb3RvKGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtLCBjb25zdCB2b2lkICpyZWZfZG9u
b3IgPSBOVUxMKQotICAgICAgOiByZWZmZWRfcHRyKG0sIHJlZl9kb25vcikgewotICAgIGFzc2Vy
dCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxlRGVzY3JpcHRvclByb3RvX2lzKG0pKTsKLSAg
fQotCi0gIHN0YXRpYyBGaWxlRGVzY3JpcHRvclByb3RvIGdldCgpIHsKLSAgICBjb25zdCA6OnVw
Yjo6TWVzc2FnZURlZiogbSA9IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9y
UHJvdG9fZ2V0KCZtKTsKLSAgICByZXR1cm4gRmlsZURlc2NyaXB0b3JQcm90byhtLCAmbSk7Ci0g
IH0KLX07Ci0KLWNsYXNzIEZpbGVEZXNjcmlwdG9yU2V0IDogcHVibGljIDo6dXBiOjpyZWZmZWRf
cHRyPGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmPiB7Ci0gcHVibGljOgotICBGaWxlRGVzY3JpcHRv
clNldChjb25zdCA6OnVwYjo6TWVzc2FnZURlZiogbSwgY29uc3Qgdm9pZCAqcmVmX2Rvbm9yID0g
TlVMTCkKLSAgICAgIDogcmVmZmVkX3B0cihtLCByZWZfZG9ub3IpIHsKLSAgICBhc3NlcnQodXBi
ZGVmc19nb29nbGVfcHJvdG9idWZfRmlsZURlc2NyaXB0b3JTZXRfaXMobSkpOwotICB9Ci0KLSAg
c3RhdGljIEZpbGVEZXNjcmlwdG9yU2V0IGdldCgpIHsKLSAgICBjb25zdCA6OnVwYjo6TWVzc2Fn
ZURlZiogbSA9IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVEZXNjcmlwdG9yU2V0X2dldCgm
bSk7Ci0gICAgcmV0dXJuIEZpbGVEZXNjcmlwdG9yU2V0KG0sICZtKTsKLSAgfQotfTsKLQotY2xh
c3MgRmlsZU9wdGlvbnMgOiBwdWJsaWMgOjp1cGI6OnJlZmZlZF9wdHI8Y29uc3QgOjp1cGI6Ok1l
c3NhZ2VEZWY+IHsKLSBwdWJsaWM6Ci0gIEZpbGVPcHRpb25zKGNvbnN0IDo6dXBiOjpNZXNzYWdl
RGVmKiBtLCBjb25zdCB2b2lkICpyZWZfZG9ub3IgPSBOVUxMKQotICAgICAgOiByZWZmZWRfcHRy
KG0sIHJlZl9kb25vcikgewotICAgIGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9GaWxl
T3B0aW9uc19pcyhtKSk7Ci0gIH0KLQotICBzdGF0aWMgRmlsZU9wdGlvbnMgZ2V0KCkgewotICAg
IGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtID0gdXBiZGVmc19nb29nbGVfcHJvdG9idWZfRmls
ZU9wdGlvbnNfZ2V0KCZtKTsKLSAgICByZXR1cm4gRmlsZU9wdGlvbnMobSwgJm0pOwotICB9Ci0K
LSAgY2xhc3MgT3B0aW1pemVNb2RlIDogcHVibGljIDo6dXBiOjpyZWZmZWRfcHRyPGNvbnN0IDo6
dXBiOjpFbnVtRGVmPiB7Ci0gICBwdWJsaWM6Ci0gICAgT3B0aW1pemVNb2RlKGNvbnN0IDo6dXBi
OjpFbnVtRGVmKiBlLCBjb25zdCB2b2lkICpyZWZfZG9ub3IgPSBOVUxMKQotICAgICAgICA6IHJl
ZmZlZF9wdHIoZSwgcmVmX2Rvbm9yKSB7Ci0gICAgICBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJv
dG9idWZfRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX2lzKGUpKTsKLSAgICB9Ci0gICAgc3RhdGlj
IE9wdGltaXplTW9kZSBnZXQoKSB7Ci0gICAgICBjb25zdCA6OnVwYjo6RW51bURlZiogZSA9IHVw
YmRlZnNfZ29vZ2xlX3Byb3RvYnVmX0ZpbGVPcHRpb25zX09wdGltaXplTW9kZV9nZXQoJmUpOwot
ICAgICAgcmV0dXJuIE9wdGltaXplTW9kZShlLCAmZSk7Ci0gICAgfQotICB9OwotfTsKLQotY2xh
c3MgTWVzc2FnZU9wdGlvbnMgOiBwdWJsaWMgOjp1cGI6OnJlZmZlZF9wdHI8Y29uc3QgOjp1cGI6
Ok1lc3NhZ2VEZWY+IHsKLSBwdWJsaWM6Ci0gIE1lc3NhZ2VPcHRpb25zKGNvbnN0IDo6dXBiOjpN
ZXNzYWdlRGVmKiBtLCBjb25zdCB2b2lkICpyZWZfZG9ub3IgPSBOVUxMKQotICAgICAgOiByZWZm
ZWRfcHRyKG0sIHJlZl9kb25vcikgewotICAgIGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1
Zl9NZXNzYWdlT3B0aW9uc19pcyhtKSk7Ci0gIH0KLQotICBzdGF0aWMgTWVzc2FnZU9wdGlvbnMg
Z2V0KCkgewotICAgIGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtID0gdXBiZGVmc19nb29nbGVf
cHJvdG9idWZfTWVzc2FnZU9wdGlvbnNfZ2V0KCZtKTsKLSAgICByZXR1cm4gTWVzc2FnZU9wdGlv
bnMobSwgJm0pOwotICB9Ci19OwotCi1jbGFzcyBNZXRob2REZXNjcmlwdG9yUHJvdG8gOiBwdWJs
aWMgOjp1cGI6OnJlZmZlZF9wdHI8Y29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWY+IHsKLSBwdWJsaWM6
Ci0gIE1ldGhvZERlc2NyaXB0b3JQcm90byhjb25zdCA6OnVwYjo6TWVzc2FnZURlZiogbSwgY29u
c3Qgdm9pZCAqcmVmX2Rvbm9yID0gTlVMTCkKLSAgICAgIDogcmVmZmVkX3B0cihtLCByZWZfZG9u
b3IpIHsKLSAgICBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWV0aG9kRGVzY3JpcHRv
clByb3RvX2lzKG0pKTsKLSAgfQotCi0gIHN0YXRpYyBNZXRob2REZXNjcmlwdG9yUHJvdG8gZ2V0
KCkgewotICAgIGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtID0gdXBiZGVmc19nb29nbGVfcHJv
dG9idWZfTWV0aG9kRGVzY3JpcHRvclByb3RvX2dldCgmbSk7Ci0gICAgcmV0dXJuIE1ldGhvZERl
c2NyaXB0b3JQcm90byhtLCAmbSk7Ci0gIH0KLX07Ci0KLWNsYXNzIE1ldGhvZE9wdGlvbnMgOiBw
dWJsaWMgOjp1cGI6OnJlZmZlZF9wdHI8Y29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWY+IHsKLSBwdWJs
aWM6Ci0gIE1ldGhvZE9wdGlvbnMoY29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWYqIG0sIGNvbnN0IHZv
aWQgKnJlZl9kb25vciA9IE5VTEwpCi0gICAgICA6IHJlZmZlZF9wdHIobSwgcmVmX2Rvbm9yKSB7
Ci0gICAgYXNzZXJ0KHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX01ldGhvZE9wdGlvbnNfaXMobSkp
OwotICB9Ci0KLSAgc3RhdGljIE1ldGhvZE9wdGlvbnMgZ2V0KCkgewotICAgIGNvbnN0IDo6dXBi
OjpNZXNzYWdlRGVmKiBtID0gdXBiZGVmc19nb29nbGVfcHJvdG9idWZfTWV0aG9kT3B0aW9uc19n
ZXQoJm0pOwotICAgIHJldHVybiBNZXRob2RPcHRpb25zKG0sICZtKTsKLSAgfQotfTsKLQotY2xh
c3MgT25lb2ZEZXNjcmlwdG9yUHJvdG8gOiBwdWJsaWMgOjp1cGI6OnJlZmZlZF9wdHI8Y29uc3Qg
Ojp1cGI6Ok1lc3NhZ2VEZWY+IHsKLSBwdWJsaWM6Ci0gIE9uZW9mRGVzY3JpcHRvclByb3RvKGNv
bnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtLCBjb25zdCB2b2lkICpyZWZfZG9ub3IgPSBOVUxMKQot
ICAgICAgOiByZWZmZWRfcHRyKG0sIHJlZl9kb25vcikgewotICAgIGFzc2VydCh1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9PbmVvZkRlc2NyaXB0b3JQcm90b19pcyhtKSk7Ci0gIH0KLQotICBzdGF0
aWMgT25lb2ZEZXNjcmlwdG9yUHJvdG8gZ2V0KCkgewotICAgIGNvbnN0IDo6dXBiOjpNZXNzYWdl
RGVmKiBtID0gdXBiZGVmc19nb29nbGVfcHJvdG9idWZfT25lb2ZEZXNjcmlwdG9yUHJvdG9fZ2V0
KCZtKTsKLSAgICByZXR1cm4gT25lb2ZEZXNjcmlwdG9yUHJvdG8obSwgJm0pOwotICB9Ci19Owot
Ci1jbGFzcyBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIDogcHVibGljIDo6dXBiOjpyZWZmZWRfcHRy
PGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmPiB7Ci0gcHVibGljOgotICBTZXJ2aWNlRGVzY3JpcHRv
clByb3RvKGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtLCBjb25zdCB2b2lkICpyZWZfZG9ub3Ig
PSBOVUxMKQotICAgICAgOiByZWZmZWRfcHRyKG0sIHJlZl9kb25vcikgewotICAgIGFzc2VydCh1
cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9TZXJ2aWNlRGVzY3JpcHRvclByb3RvX2lzKG0pKTsKLSAg
fQotCi0gIHN0YXRpYyBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIGdldCgpIHsKLSAgICBjb25zdCA6
OnVwYjo6TWVzc2FnZURlZiogbSA9IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NlcnZpY2VEZXNj
cmlwdG9yUHJvdG9fZ2V0KCZtKTsKLSAgICByZXR1cm4gU2VydmljZURlc2NyaXB0b3JQcm90byht
LCAmbSk7Ci0gIH0KLX07Ci0KLWNsYXNzIFNlcnZpY2VPcHRpb25zIDogcHVibGljIDo6dXBiOjpy
ZWZmZWRfcHRyPGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmPiB7Ci0gcHVibGljOgotICBTZXJ2aWNl
T3B0aW9ucyhjb25zdCA6OnVwYjo6TWVzc2FnZURlZiogbSwgY29uc3Qgdm9pZCAqcmVmX2Rvbm9y
ID0gTlVMTCkKLSAgICAgIDogcmVmZmVkX3B0cihtLCByZWZfZG9ub3IpIHsKLSAgICBhc3NlcnQo
dXBiZGVmc19nb29nbGVfcHJvdG9idWZfU2VydmljZU9wdGlvbnNfaXMobSkpOwotICB9Ci0KLSAg
c3RhdGljIFNlcnZpY2VPcHRpb25zIGdldCgpIHsKLSAgICBjb25zdCA6OnVwYjo6TWVzc2FnZURl
ZiogbSA9IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1NlcnZpY2VPcHRpb25zX2dldCgmbSk7Ci0g
ICAgcmV0dXJuIFNlcnZpY2VPcHRpb25zKG0sICZtKTsKLSAgfQotfTsKLQotY2xhc3MgU291cmNl
Q29kZUluZm8gOiBwdWJsaWMgOjp1cGI6OnJlZmZlZF9wdHI8Y29uc3QgOjp1cGI6Ok1lc3NhZ2VE
ZWY+IHsKLSBwdWJsaWM6Ci0gIFNvdXJjZUNvZGVJbmZvKGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVm
KiBtLCBjb25zdCB2b2lkICpyZWZfZG9ub3IgPSBOVUxMKQotICAgICAgOiByZWZmZWRfcHRyKG0s
IHJlZl9kb25vcikgewotICAgIGFzc2VydCh1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VD
b2RlSW5mb19pcyhtKSk7Ci0gIH0KLQotICBzdGF0aWMgU291cmNlQ29kZUluZm8gZ2V0KCkgewot
ICAgIGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtID0gdXBiZGVmc19nb29nbGVfcHJvdG9idWZf
U291cmNlQ29kZUluZm9fZ2V0KCZtKTsKLSAgICByZXR1cm4gU291cmNlQ29kZUluZm8obSwgJm0p
OwotICB9Ci0KLSAgY2xhc3MgTG9jYXRpb24gOiBwdWJsaWMgOjp1cGI6OnJlZmZlZF9wdHI8Y29u
c3QgOjp1cGI6Ok1lc3NhZ2VEZWY+IHsKLSAgIHB1YmxpYzoKLSAgICBMb2NhdGlvbihjb25zdCA6
OnVwYjo6TWVzc2FnZURlZiogbSwgY29uc3Qgdm9pZCAqcmVmX2Rvbm9yID0gTlVMTCkKLSAgICAg
ICAgOiByZWZmZWRfcHRyKG0sIHJlZl9kb25vcikgewotICAgICAgYXNzZXJ0KHVwYmRlZnNfZ29v
Z2xlX3Byb3RvYnVmX1NvdXJjZUNvZGVJbmZvX0xvY2F0aW9uX2lzKG0pKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgTG9jYXRpb24gZ2V0KCkgewotICAgICAgY29uc3QgOjp1cGI6Ok1lc3NhZ2VEZWYq
IG0gPSB1cGJkZWZzX2dvb2dsZV9wcm90b2J1Zl9Tb3VyY2VDb2RlSW5mb19Mb2NhdGlvbl9nZXQo
Jm0pOwotICAgICAgcmV0dXJuIExvY2F0aW9uKG0sICZtKTsKLSAgICB9Ci0gIH07Ci19OwotCi1j
bGFzcyBVbmludGVycHJldGVkT3B0aW9uIDogcHVibGljIDo6dXBiOjpyZWZmZWRfcHRyPGNvbnN0
IDo6dXBiOjpNZXNzYWdlRGVmPiB7Ci0gcHVibGljOgotICBVbmludGVycHJldGVkT3B0aW9uKGNv
bnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtLCBjb25zdCB2b2lkICpyZWZfZG9ub3IgPSBOVUxMKQot
ICAgICAgOiByZWZmZWRfcHRyKG0sIHJlZl9kb25vcikgewotICAgIGFzc2VydCh1cGJkZWZzX2dv
b2dsZV9wcm90b2J1Zl9VbmludGVycHJldGVkT3B0aW9uX2lzKG0pKTsKLSAgfQotCi0gIHN0YXRp
YyBVbmludGVycHJldGVkT3B0aW9uIGdldCgpIHsKLSAgICBjb25zdCA6OnVwYjo6TWVzc2FnZURl
ZiogbSA9IHVwYmRlZnNfZ29vZ2xlX3Byb3RvYnVmX1VuaW50ZXJwcmV0ZWRPcHRpb25fZ2V0KCZt
KTsKLSAgICByZXR1cm4gVW5pbnRlcnByZXRlZE9wdGlvbihtLCAmbSk7Ci0gIH0KLQotICBjbGFz
cyBOYW1lUGFydCA6IHB1YmxpYyA6OnVwYjo6cmVmZmVkX3B0cjxjb25zdCA6OnVwYjo6TWVzc2Fn
ZURlZj4gewotICAgcHVibGljOgotICAgIE5hbWVQYXJ0KGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVm
KiBtLCBjb25zdCB2b2lkICpyZWZfZG9ub3IgPSBOVUxMKQotICAgICAgICA6IHJlZmZlZF9wdHIo
bSwgcmVmX2Rvbm9yKSB7Ci0gICAgICBhc3NlcnQodXBiZGVmc19nb29nbGVfcHJvdG9idWZfVW5p
bnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydF9pcyhtKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIE5h
bWVQYXJ0IGdldCgpIHsKLSAgICAgIGNvbnN0IDo6dXBiOjpNZXNzYWdlRGVmKiBtID0gdXBiZGVm
c19nb29nbGVfcHJvdG9idWZfVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydF9nZXQoJm0pOwot
ICAgICAgcmV0dXJuIE5hbWVQYXJ0KG0sICZtKTsKLSAgICB9Ci0gIH07Ci19OwotCi19ICAvKiBu
YW1lc3BhY2UgcHJvdG9idWYgKi8KLX0gIC8qIG5hbWVzcGFjZSBnb29nbGUgKi8KLX0gIC8qIG5h
bWVzcGFjZSB1cGJkZWZzICovCi0KLSNlbmRpZiAgLyogX19jcGx1c3BsdXMgKi8KLQotI2VuZGlm
ICAvKiBVUEJfREVTQ1JJUFRPUl9ERVNDUklQVE9SX1BST1RPX1VQQl9IXyAqLwotLyoKLSoqIElu
dGVybmFsLW9ubHkgZGVmaW5pdGlvbnMgZm9yIHRoZSBkZWNvZGVyLgotKi8KLQotI2lmbmRlZiBV
UEJfREVDT0RFUl9JTlRfSF8KLSNkZWZpbmUgVVBCX0RFQ09ERVJfSU5UX0hfCi0KLS8qCi0qKiB1
cGI6OnBiOjpEZWNvZGVyCi0qKgotKiogQSBoaWdoIHBlcmZvcm1hbmNlLCBzdHJlYW1pbmcsIHJl
c3VtYWJsZSBkZWNvZGVyIGZvciB0aGUgYmluYXJ5IHByb3RvYnVmCi0qKiBmb3JtYXQuCi0qKgot
KiogVGhpcyBpbnRlcmZhY2Ugd29ya3MgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGF0IGRlY29k
ZXIgYmFja2VuZCBpcyBiZWluZwotKiogdXNlZC4gIEEgY2xpZW50IG9mIHRoaXMgY2xhc3MgZG9l
cyBub3QgbmVlZCB0byBrbm93IHdoZXRoZXIgZGVjb2RpbmcgaXMgdXNpbmcKLSoqIGEgSklUdGVk
IGRlY29kZXIgKER5bkFTTSwgTExWTSwgZXRjKSBvciBhbiBpbnRlcnByZXRlZCBkZWNvZGVyLiAg
QnkgZGVmYXVsdCwKLSoqIGl0IHdpbGwgYWx3YXlzIHVzZSB0aGUgZmFzdGVzdCBhdmFpbGFibGUg
ZGVjb2Rlci4gIEhvd2V2ZXIsIHlvdSBjYW4gY2FsbAotKiogc2V0X2FsbG93X2ppdChmYWxzZSkg
dG8gZGlzYWJsZSBhbnkgSklUIGRlY29kZXIgdGhhdCBtaWdodCBiZSBhdmFpbGFibGUuCi0qKiBU
aGlzIGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIHRlc3RpbmcgcHVycG9zZXMuCi0qLwotCi0jaWZu
ZGVmIFVQQl9ERUNPREVSX0hfCi0jZGVmaW5lIFVQQl9ERUNPREVSX0hfCi0KLQotI2lmZGVmIF9f
Y3BsdXNwbHVzCi1uYW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBwYiB7Ci1jbGFzcyBDb2RlQ2Fj
aGU7Ci1jbGFzcyBEZWNvZGVyOwotY2xhc3MgRGVjb2Rlck1ldGhvZDsKLWNsYXNzIERlY29kZXJN
ZXRob2RPcHRpb25zOwotfSAgLyogbmFtZXNwYWNlIHBiICovCi19ICAvKiBuYW1lc3BhY2UgdXBi
ICovCi0jZW5kaWYKLQotVVBCX0RFQ0xBUkVfVFlQRSh1cGI6OnBiOjpDb2RlQ2FjaGUsIHVwYl9w
YmNvZGVjYWNoZSkKLVVQQl9ERUNMQVJFX1RZUEUodXBiOjpwYjo6RGVjb2RlciwgdXBiX3BiZGVj
b2RlcikKLVVQQl9ERUNMQVJFX1RZUEUodXBiOjpwYjo6RGVjb2Rlck1ldGhvZE9wdGlvbnMsIHVw
Yl9wYmRlY29kZXJtZXRob2RvcHRzKQotCi1VUEJfREVDTEFSRV9ERVJJVkVEX1RZUEUodXBiOjpw
Yjo6RGVjb2Rlck1ldGhvZCwgdXBiOjpSZWZDb3VudGVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwYl9wYmRlY29kZXJtZXRob2QsIHVwYl9yZWZjb3VudGVkKQotCi0vKiBUaGUgbWF4aW11
bSBudW1iZXIgb2YgYnl0ZXMgd2UgYXJlIHJlcXVpcmVkIHRvIGJ1ZmZlciBpbnRlcm5hbGx5IGJl
dHdlZW4KLSAqIGNhbGxzIHRvIHRoZSBkZWNvZGVyLiAgVGhlIHZhbHVlIGlzIDE0OiBhIDUgYnl0
ZSB1bmtub3duIHRhZyBwbHVzIHRlbi1ieXRlCi0gKiB2YXJpbnQsIGxlc3Mgb25lIGJlY2F1c2Ug
d2UgYXJlIGJ1ZmZlcmluZyBhbiBpbmNvbXBsZXRlIHZhbHVlLgotICoKLSAqIFNob3VsZCBvbmx5
IGJlIHVzZWQgYnkgdW5pdCB0ZXN0cy4gKi8KLSNkZWZpbmUgVVBCX0RFQ09ERVJfTUFYX1JFU0lE
VUFMX0JZVEVTIDE0Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBUaGUgcGFyYW1ldGVycyBv
bmUgdXNlcyB0byBjb25zdHJ1Y3QgYSBEZWNvZGVyTWV0aG9kLgotICogVE9ETyhoYWJlcm1hbik6
IG1vdmUgYWxsb3dqaXQgaGVyZT8gIFNlZW1zIG1vcmUgY29udmVuaWVudCBmb3IgdXNlcnMuCi0g
KiBUT0RPKGhhYmVybWFuKTogbW92ZSB0aGlzIHRvIGJlIGhlYXAgYWxsb2NhdGVkIGZvciBBQkkg
c3RhYmlsaXR5LiAqLwotY2xhc3MgdXBiOjpwYjo6RGVjb2Rlck1ldGhvZE9wdGlvbnMgewotIHB1
YmxpYzoKLSAgLyogUGFyYW1ldGVyIHJlcHJlc2VudHMgdGhlIGRlc3RpbmF0aW9uIGhhbmRsZXJz
IHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBwdXNoCi0gICAqIHRvLiAqLwotICBleHBsaWNpdCBEZWNv
ZGVyTWV0aG9kT3B0aW9ucyhjb25zdCBIYW5kbGVycyogZGVzdF9oYW5kbGVycyk7Ci0KLSAgLyog
U2hvdWxkIHRoZSBkZWNvZGVyIHB1c2ggc3VibWVzc2FnZXMgdG8gbGF6eSBoYW5kbGVycyBmb3Ig
ZmllbGRzIHRoYXQgaGF2ZQotICAgKiB0aGVtPyAgVGhlIGNhbGxlciBzaG91bGQgc2V0IHRoaXMg
aWZmIHRoZSBsYXp5IGhhbmRsZXJzIGV4cGVjdCBkYXRhIHRoYXQgaXMKLSAgICogaW4gcHJvdG9i
dWYgYmluYXJ5IGZvcm1hdCBhbmQgdGhlIGNhbGxlciB3aXNoZXMgdG8gbGF6eSBwYXJzZSBpdC4g
Ki8KLSAgdm9pZCBzZXRfbGF6eShib29sIGxhenkpOwotI2Vsc2UKLXN0cnVjdCB1cGJfcGJkZWNv
ZGVybWV0aG9kb3B0cyB7Ci0jZW5kaWYKLSAgY29uc3QgdXBiX2hhbmRsZXJzICpoYW5kbGVyczsK
LSAgYm9vbCBsYXp5OwotfTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFJlcHJlc2VudHMg
dGhlIGNvZGUgdG8gcGFyc2UgYSBwcm90b2J1ZiBhY2NvcmRpbmcgdG8gYSBkZXN0aW5hdGlvbgot
ICogSGFuZGxlcnMuICovCi1jbGFzcyB1cGI6OnBiOjpEZWNvZGVyTWV0aG9kIHsKLSBwdWJsaWM6
Ci0gIC8qIEluY2x1ZGUgYmFzZSBtZXRob2RzIGZyb20gdXBiOjpSZWZlcmVuY2VDb3VudGVkLiAq
LwotICBVUEJfUkVGQ09VTlRFRF9DUFBNRVRIT0RTCi0KLSAgLyogVGhlIGRlc3RpbmF0aW9uIGhh
bmRsZXJzIHRoYXQgYXJlIHN0YXRpY2FsbHkgYm91bmQgdG8gdGhpcyBtZXRob2QuCi0gICAqIFRo
aXMgbWV0aG9kIGlzIG9ubHkgY2FwYWJsZSBvZiBvdXRwdXR0aW5nIHRvIGEgc2luayB0aGF0IHVz
ZXMgdGhlc2UKLSAgICogaGFuZGxlcnMuICovCi0gIGNvbnN0IEhhbmRsZXJzKiBkZXN0X2hhbmRs
ZXJzKCkgY29uc3Q7Ci0KLSAgLyogVGhlIGlucHV0IGhhbmRsZXJzIGZvciB0aGlzIGRlY29kZXIg
bWV0aG9kLiAqLwotICBjb25zdCBCeXRlc0hhbmRsZXIqIGlucHV0X2hhbmRsZXIoKSBjb25zdDsK
LQotICAvKiBXaGV0aGVyIHRoaXMgbWV0aG9kIGlzIG5hdGl2ZS4gKi8KLSAgYm9vbCBpc19uYXRp
dmUoKSBjb25zdDsKLQotICAvKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGdlbmVyYXRpbmcgYSBE
ZWNvZGVyTWV0aG9kIHdpdGhvdXQgZXhwbGljaXRseQotICAgKiBjcmVhdGluZyBhIENvZGVDYWNo
ZS4gKi8KLSAgc3RhdGljIHJlZmZlZF9wdHI8Y29uc3QgRGVjb2Rlck1ldGhvZD4gTmV3KGNvbnN0
IERlY29kZXJNZXRob2RPcHRpb25zJiBvcHRzKTsKLQotIHByaXZhdGU6Ci0gIFVQQl9ESVNBTExP
V19QT0RfT1BTKERlY29kZXJNZXRob2QsIHVwYjo6cGI6OkRlY29kZXJNZXRob2QpCi19OwotCi0j
ZW5kaWYKLQotLyogUHJlYWxsb2NhdGlvbiBoaW50OiBkZWNvZGVyIHdvbid0IGFsbG9jYXRlIG1v
cmUgYnl0ZXMgdGhhbiB0aGlzIHdoZW4gZmlyc3QKLSAqIGNvbnN0cnVjdGVkLiAgVGhpcyBoaW50
IG1heSBiZSBhbiBvdmVyZXN0aW1hdGUgZm9yIHNvbWUgYnVpbGQgY29uZmlndXJhdGlvbnMuCi0g
KiBCdXQgaWYgdGhlIGRlY29kZXIgbGlicmFyeSBpcyB1cGdyYWRlZCB3aXRob3V0IHJlY29tcGls
aW5nIHRoZSBhcHBsaWNhdGlvbiwKLSAqIGl0IG1heSBiZSBhbiB1bmRlcmVzdGltYXRlLiAqLwot
I2RlZmluZSBVUEJfUEJfREVDT0RFUl9TSVpFIDQ0MTYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0K
LS8qIEEgRGVjb2RlciByZWNlaXZlcyBiaW5hcnkgcHJvdG9idWYgZGF0YSBvbiBpdHMgaW5wdXQg
c2luayBhbmQgcHVzaGVzIHRoZQotICogZGVjb2RlZCBkYXRhIHRvIGl0cyBvdXRwdXQgc2luay4g
Ki8KLWNsYXNzIHVwYjo6cGI6OkRlY29kZXIgewotIHB1YmxpYzoKLSAgLyogQ29uc3RydWN0cyBh
IGRlY29kZXIgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBtZXRob2QsIHdoaWNoIG11c3Qgb3V0bGl2
ZSB0aGlzCi0gICAqIGRlY29kZXIuICBBbnkgZXJyb3JzIGR1cmluZyBwYXJzaW5nIHdpbGwgYmUg
c2V0IG9uIHRoZSBnaXZlbiBzdGF0dXMsIHdoaWNoCi0gICAqIG11c3QgYWxzbyBvdXRsaXZlIHRo
aXMgZGVjb2Rlci4KLSAgICoKLSAgICogVGhlIHNpbmsgbXVzdCBtYXRjaCB0aGUgZ2l2ZW4gbWV0
aG9kLiAqLwotICBzdGF0aWMgRGVjb2RlciogQ3JlYXRlKEVudmlyb25tZW50KiBlbnYsIGNvbnN0
IERlY29kZXJNZXRob2QqIG1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTaW5rKiBv
dXRwdXQpOwotCi0gIC8qIFJldHVybnMgdGhlIERlY29kZXJNZXRob2QgdGhpcyBkZWNvZGVyIGlz
IHBhcnNpbmcgZnJvbS4gKi8KLSAgY29uc3QgRGVjb2Rlck1ldGhvZCogbWV0aG9kKCkgY29uc3Q7
Ci0KLSAgLyogVGhlIHNpbmsgb24gd2hpY2ggdGhpcyBkZWNvZGVyIHJlY2VpdmVzIGlucHV0LiAq
LwotICBCeXRlc1NpbmsqIGlucHV0KCk7Ci0KLSAgLyogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMg
c3VjY2Vzc2Z1bGx5IHBhcnNlZC4KLSAgICoKLSAgICogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBk
ZXRlcm1pbmluZyB0aGUgc3RyZWFtIHBvc2l0aW9uIHdoZXJlIGFuIGVycm9yCi0gICAqIG9jY3Vy
cmVkLgotICAgKgotICAgKiBUaGlzIHZhbHVlIG1heSBub3QgYmUgdXAtdG8tZGF0ZSB3aGVuIGNh
bGxlZCBmcm9tIGluc2lkZSBhIHBhcnNpbmcKLSAgICogY2FsbGJhY2suICovCi0gIHVpbnQ2NF90
IEJ5dGVzUGFyc2VkKCkgY29uc3Q7Ci0KLSAgLyogR2V0cy9zZXRzIHRoZSBwYXJzaW5nIG5leHRp
bmcgbGltaXQuICBJZiB0aGUgdG90YWwgbnVtYmVyIG9mIG5lc3RlZAotICAgKiBzdWJtZXNzYWdl
cyBhbmQgcmVwZWF0ZWQgZmllbGRzIGhpdHMgdGhpcyBsaW1pdCwgcGFyc2luZyB3aWxsIGZhaWwu
ICBUaGlzCi0gICAqIGlzIGEgcmVzb3VyY2UgbGltaXQgdGhhdCBjb250cm9scyB0aGUgYW1vdW50
IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBwYXJzaW5nCi0gICAqIHN0YWNrLgotICAgKgotICAgKiBT
ZXR0aW5nIHRoZSBsaW1pdCB3aWxsIGZhaWwgaWYgdGhlIHBhcnNlciBpcyBjdXJyZW50bHkgc3Vz
cGVuZGVkIGF0IGEgZGVwdGgKLSAgICogZ3JlYXRlciB0aGFuIHRoaXMsIG9yIGlmIG1lbW9yeSBh
bGxvY2F0aW9uIG9mIHRoZSBzdGFjayBmYWlscy4gKi8KLSAgc2l6ZV90IG1heF9uZXN0aW5nKCkg
Y29uc3Q7Ci0gIGJvb2wgc2V0X21heF9uZXN0aW5nKHNpemVfdCBtYXgpOwotCi0gIHZvaWQgUmVz
ZXQoKTsKLQotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtTaXplID0gVVBCX1BCX0RFQ09ERVJfU0la
RTsKLQotIHByaXZhdGU6Ci0gIFVQQl9ESVNBTExPV19QT0RfT1BTKERlY29kZXIsIHVwYjo6cGI6
OkRlY29kZXIpCi19OwotCi0jZW5kaWYgIC8qIF9fY3BsdXNwbHVzICovCi0KLSNpZmRlZiBfX2Nw
bHVzcGx1cwotCi0vKiBBIGNsYXNzIGZvciBjYWNoaW5nIHByb3RvYnVmIHByb2Nlc3NpbmcgY29k
ZSwgd2hldGhlciBieXRlY29kZSBmb3IgdGhlCi0gKiBpbnRlcnByZXRlZCBkZWNvZGVyIG9yIG1h
Y2hpbmUgY29kZSBmb3IgdGhlIEpJVC4KLSAqCi0gKiBUaGlzIGNsYXNzIGlzIG5vdCB0aHJlYWQt
c2FmZS4KLSAqCi0gKiBUT0RPKGhhYmVybWFuKTogbW92ZSB0aGlzIHRvIGJlIGhlYXAgYWxsb2Nh
dGVkIGZvciBBQkkgc3RhYmlsaXR5LiAqLwotY2xhc3MgdXBiOjpwYjo6Q29kZUNhY2hlIHsKLSBw
dWJsaWM6Ci0gIENvZGVDYWNoZSgpOwotICB+Q29kZUNhY2hlKCk7Ci0KLSAgLyogV2hldGhlciB0
aGUgY2FjaGUgaXMgYWxsb3dlZCB0byBnZW5lcmF0ZSBtYWNoaW5lIGNvZGUuICBEZWZhdWx0cyB0
byB0cnVlLgotICAgKiBUaGVyZSBpcyBubyByZWFsIHJlYXNvbiB0byB0dXJuIGl0IG9mZiBleGNl
cHQgZm9yIHRlc3Rpbmcgb3IgaWYgeW91IGFyZQotICAgKiBoYXZpbmcgYSBzcGVjaWZpYyBwcm9i
bGVtIHdpdGggdGhlIEpJVC4KLSAgICoKLSAgICogTm90ZSB0aGF0IGFsbG93X2ppdCA9IHRydWUg
ZG9lcyBub3QgKmd1YXJhbnRlZSogdGhhdCB0aGUgY29kZSB3aWxsIGJlIEpJVAotICAgKiBjb21w
aWxlZC4gIElmIHRoaXMgcGxhdGZvcm0gaXMgbm90IHN1cHBvcnRlZCBvciB0aGUgSklUIHdhcyBu
b3QgY29tcGlsZWQKLSAgICogaW4sIHRoZSBjb2RlIG1heSBzdGlsbCBiZSBpbnRlcnByZXRlZC4g
Ki8KLSAgYm9vbCBhbGxvd19qaXQoKSBjb25zdDsKLQotICAvKiBUaGlzIG1heSBvbmx5IGJlIGNh
bGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgZmlyc3QgY29uc3RydWN0ZWQsIGFuZCBwcmlvciB0bwot
ICAgKiBhbnkgY29kZSBnZW5lcmF0aW9uLCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZSBhbmQgZG9l
cyBub3RoaW5nLiAqLwotICBib29sIHNldF9hbGxvd19qaXQoYm9vbCBhbGxvdyk7Ci0KLSAgLyog
UmV0dXJucyBhIERlY29kZXJNZXRob2QgdGhhdCBjYW4gcHVzaCBkYXRhIHRvIHRoZSBnaXZlbiBo
YW5kbGVycy4KLSAgICogSWYgYSBzdWl0YWJsZSBtZXRob2QgYWxyZWFkeSBleGlzdHMsIGl0IHdp
bGwgYmUgcmV0dXJuZWQgZnJvbSB0aGUgY2FjaGUuCi0gICAqCi0gICAqIFNwZWNpZnlpbmcgdGhl
IGRlc3RpbmF0aW9uIGhhbmRsZXJzIGhlcmUgYWxsb3dzIHRoZSBEZWNvZGVyTWV0aG9kIHRvIGJl
Ci0gICAqIHN0YXRpY2FsbHkgYm91bmQgdG8gdGhlIGRlc3RpbmF0aW9uIGhhbmRsZXJzIGlmIHBv
c3NpYmxlLCB3aGljaCBjYW4gYWxsb3cKLSAgICogbW9yZSBlZmZpY2llbnQgZGVjb2RpbmcuICBI
b3dldmVyIHRoZSByZXR1cm5lZCBtZXRob2QgbWF5IG9yIG1heSBub3QKLSAgICogYWN0dWFsbHkg
YmUgc3RhdGljYWxseSBib3VuZC4gIEJ1dCBpbiBhbGwgY2FzZXMsIHRoZSByZXR1cm5lZCBtZXRo
b2QgY2FuCi0gICAqIHB1c2ggZGF0YSB0byB0aGUgZ2l2ZW4gaGFuZGxlcnMuICovCi0gIGNvbnN0
IERlY29kZXJNZXRob2QgKkdldERlY29kZXJNZXRob2QoY29uc3QgRGVjb2Rlck1ldGhvZE9wdGlv
bnMmIG9wdHMpOwotCi0gIC8qIElmL3doZW4gc29tZW9uZSBuZWVkcyB0byBleHBsaWNpdGx5IGNy
ZWF0ZSBhIGR5bmFtaWNhbGx5LWJvdW5kCi0gICAqIERlY29kZXJNZXRob2QqLCB3ZSBjYW4gYWRk
IGEgbWV0aG9kIHRvIGdldCBpdCBoZXJlLiAqLwotCi0gcHJpdmF0ZToKLSAgVVBCX0RJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihDb2RlQ2FjaGUpCi0jZWxzZQotc3RydWN0IHVwYl9wYmNvZGVjYWNo
ZSB7Ci0jZW5kaWYKLSAgYm9vbCBhbGxvd19qaXRfOwotCi0gIC8qIEFycmF5IG9mIG1ncm91cHMu
ICovCi0gIHVwYl9pbnR0YWJsZSBncm91cHM7Ci19OwotCi1VUEJfQkVHSU5fRVhURVJOX0MKLQot
dXBiX3BiZGVjb2RlciAqdXBiX3BiZGVjb2Rlcl9jcmVhdGUodXBiX2VudiAqZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKm1l
dGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9zaW5rICpvdXRw
dXQpOwotY29uc3QgdXBiX3BiZGVjb2Rlcm1ldGhvZCAqdXBiX3BiZGVjb2Rlcl9tZXRob2QoY29u
c3QgdXBiX3BiZGVjb2RlciAqZCk7Ci11cGJfYnl0ZXNzaW5rICp1cGJfcGJkZWNvZGVyX2lucHV0
KHVwYl9wYmRlY29kZXIgKmQpOwotdWludDY0X3QgdXBiX3BiZGVjb2Rlcl9ieXRlc3BhcnNlZChj
b25zdCB1cGJfcGJkZWNvZGVyICpkKTsKLXNpemVfdCB1cGJfcGJkZWNvZGVyX21heG5lc3Rpbmco
Y29uc3QgdXBiX3BiZGVjb2RlciAqZCk7Ci1ib29sIHVwYl9wYmRlY29kZXJfc2V0bWF4bmVzdGlu
Zyh1cGJfcGJkZWNvZGVyICpkLCBzaXplX3QgbWF4KTsKLXZvaWQgdXBiX3BiZGVjb2Rlcl9yZXNl
dCh1cGJfcGJkZWNvZGVyICpkKTsKLQotdm9pZCB1cGJfcGJkZWNvZGVybWV0aG9kb3B0c19pbml0
KHVwYl9wYmRlY29kZXJtZXRob2RvcHRzICpvcHRzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVwYl9oYW5kbGVycyAqaCk7Ci12b2lkIHVwYl9wYmRlY29kZXJtZXRo
b2RvcHRzX3NldGxhenkodXBiX3BiZGVjb2Rlcm1ldGhvZG9wdHMgKm9wdHMsIGJvb2wgbGF6eSk7
Ci0KLQotLyogSW5jbHVkZSByZWZjb3VudGVkIG1ldGhvZHMgbGlrZSB1cGJfcGJkZWNvZGVybWV0
aG9kX3JlZigpLiAqLwotVVBCX1JFRkNPVU5URURfQ01FVEhPRFModXBiX3BiZGVjb2Rlcm1ldGhv
ZCwgdXBiX3BiZGVjb2Rlcm1ldGhvZF91cGNhc3QpCi0KLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBi
X3BiZGVjb2Rlcm1ldGhvZF9kZXN0aGFuZGxlcnMoCi0gICAgY29uc3QgdXBiX3BiZGVjb2Rlcm1l
dGhvZCAqbSk7Ci1jb25zdCB1cGJfYnl0ZXNoYW5kbGVyICp1cGJfcGJkZWNvZGVybWV0aG9kX2lu
cHV0aGFuZGxlcigKLSAgICBjb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICptKTsKLWJvb2wgdXBi
X3BiZGVjb2Rlcm1ldGhvZF9pc25hdGl2ZShjb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICptKTsK
LWNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKnVwYl9wYmRlY29kZXJtZXRob2RfbmV3KAotICAg
IGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2RvcHRzICpvcHRzLCBjb25zdCB2b2lkICpvd25lcik7
Ci0KLXZvaWQgdXBiX3BiY29kZWNhY2hlX2luaXQodXBiX3BiY29kZWNhY2hlICpjKTsKLXZvaWQg
dXBiX3BiY29kZWNhY2hlX3VuaW5pdCh1cGJfcGJjb2RlY2FjaGUgKmMpOwotYm9vbCB1cGJfcGJj
b2RlY2FjaGVfYWxsb3dqaXQoY29uc3QgdXBiX3BiY29kZWNhY2hlICpjKTsKLWJvb2wgdXBiX3Bi
Y29kZWNhY2hlX3NldGFsbG93aml0KHVwYl9wYmNvZGVjYWNoZSAqYywgYm9vbCBhbGxvdyk7Ci1j
b25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICp1cGJfcGJjb2RlY2FjaGVfZ2V0ZGVjb2Rlcm1ldGhv
ZCgKLSAgICB1cGJfcGJjb2RlY2FjaGUgKmMsIGNvbnN0IHVwYl9wYmRlY29kZXJtZXRob2RvcHRz
ICpvcHRzKTsKLQotVVBCX0VORF9FWFRFUk5fQwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotbmFt
ZXNwYWNlIHVwYiB7Ci0KLW5hbWVzcGFjZSBwYiB7Ci0KLS8qIHN0YXRpYyAqLwotaW5saW5lIERl
Y29kZXIqIERlY29kZXI6OkNyZWF0ZShFbnZpcm9ubWVudCogZW52LCBjb25zdCBEZWNvZGVyTWV0
aG9kKiBtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5rKiBzaW5rKSB7Ci0g
IHJldHVybiB1cGJfcGJkZWNvZGVyX2NyZWF0ZShlbnYsIG0sIHNpbmspOwotfQotaW5saW5lIGNv
bnN0IERlY29kZXJNZXRob2QqIERlY29kZXI6Om1ldGhvZCgpIGNvbnN0IHsKLSAgcmV0dXJuIHVw
Yl9wYmRlY29kZXJfbWV0aG9kKHRoaXMpOwotfQotaW5saW5lIEJ5dGVzU2luayogRGVjb2Rlcjo6
aW5wdXQoKSB7Ci0gIHJldHVybiB1cGJfcGJkZWNvZGVyX2lucHV0KHRoaXMpOwotfQotaW5saW5l
IHVpbnQ2NF90IERlY29kZXI6OkJ5dGVzUGFyc2VkKCkgY29uc3QgewotICByZXR1cm4gdXBiX3Bi
ZGVjb2Rlcl9ieXRlc3BhcnNlZCh0aGlzKTsKLX0KLWlubGluZSBzaXplX3QgRGVjb2Rlcjo6bWF4
X25lc3RpbmcoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfcGJkZWNvZGVyX21heG5lc3RpbmcodGhp
cyk7Ci19Ci1pbmxpbmUgYm9vbCBEZWNvZGVyOjpzZXRfbWF4X25lc3Rpbmcoc2l6ZV90IG1heCkg
ewotICByZXR1cm4gdXBiX3BiZGVjb2Rlcl9zZXRtYXhuZXN0aW5nKHRoaXMsIG1heCk7Ci19Ci1p
bmxpbmUgdm9pZCBEZWNvZGVyOjpSZXNldCgpIHsgdXBiX3BiZGVjb2Rlcl9yZXNldCh0aGlzKTsg
fQotCi1pbmxpbmUgRGVjb2Rlck1ldGhvZE9wdGlvbnM6OkRlY29kZXJNZXRob2RPcHRpb25zKGNv
bnN0IEhhbmRsZXJzKiBoKSB7Ci0gIHVwYl9wYmRlY29kZXJtZXRob2RvcHRzX2luaXQodGhpcywg
aCk7Ci19Ci1pbmxpbmUgdm9pZCBEZWNvZGVyTWV0aG9kT3B0aW9uczo6c2V0X2xhenkoYm9vbCBs
YXp5KSB7Ci0gIHVwYl9wYmRlY29kZXJtZXRob2RvcHRzX3NldGxhenkodGhpcywgbGF6eSk7Ci19
Ci0KLWlubGluZSBjb25zdCBIYW5kbGVycyogRGVjb2Rlck1ldGhvZDo6ZGVzdF9oYW5kbGVycygp
IGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9wYmRlY29kZXJtZXRob2RfZGVzdGhhbmRsZXJzKHRoaXMp
OwotfQotaW5saW5lIGNvbnN0IEJ5dGVzSGFuZGxlciogRGVjb2Rlck1ldGhvZDo6aW5wdXRfaGFu
ZGxlcigpIGNvbnN0IHsKLSAgcmV0dXJuIHVwYl9wYmRlY29kZXJtZXRob2RfaW5wdXRoYW5kbGVy
KHRoaXMpOwotfQotaW5saW5lIGJvb2wgRGVjb2Rlck1ldGhvZDo6aXNfbmF0aXZlKCkgY29uc3Qg
ewotICByZXR1cm4gdXBiX3BiZGVjb2Rlcm1ldGhvZF9pc25hdGl2ZSh0aGlzKTsKLX0KLS8qIHN0
YXRpYyAqLwotaW5saW5lIHJlZmZlZF9wdHI8Y29uc3QgRGVjb2Rlck1ldGhvZD4gRGVjb2Rlck1l
dGhvZDo6TmV3KAotICAgIGNvbnN0IERlY29kZXJNZXRob2RPcHRpb25zICZvcHRzKSB7Ci0gIGNv
bnN0IHVwYl9wYmRlY29kZXJtZXRob2QgKm0gPSB1cGJfcGJkZWNvZGVybWV0aG9kX25ldygmb3B0
cywgJm0pOwotICByZXR1cm4gcmVmZmVkX3B0cjxjb25zdCBEZWNvZGVyTWV0aG9kPihtLCAmbSk7
Ci19Ci0KLWlubGluZSBDb2RlQ2FjaGU6OkNvZGVDYWNoZSgpIHsKLSAgdXBiX3BiY29kZWNhY2hl
X2luaXQodGhpcyk7Ci19Ci1pbmxpbmUgQ29kZUNhY2hlOjp+Q29kZUNhY2hlKCkgewotICB1cGJf
cGJjb2RlY2FjaGVfdW5pbml0KHRoaXMpOwotfQotaW5saW5lIGJvb2wgQ29kZUNhY2hlOjphbGxv
d19qaXQoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJfcGJjb2RlY2FjaGVfYWxsb3dqaXQodGhpcyk7
Ci19Ci1pbmxpbmUgYm9vbCBDb2RlQ2FjaGU6OnNldF9hbGxvd19qaXQoYm9vbCBhbGxvdykgewot
ICByZXR1cm4gdXBiX3BiY29kZWNhY2hlX3NldGFsbG93aml0KHRoaXMsIGFsbG93KTsKLX0KLWlu
bGluZSBjb25zdCBEZWNvZGVyTWV0aG9kICpDb2RlQ2FjaGU6OkdldERlY29kZXJNZXRob2QoCi0g
ICAgY29uc3QgRGVjb2Rlck1ldGhvZE9wdGlvbnMmIG9wdHMpIHsKLSAgcmV0dXJuIHVwYl9wYmNv
ZGVjYWNoZV9nZXRkZWNvZGVybWV0aG9kKHRoaXMsICZvcHRzKTsKLX0KLQotfSAgLyogbmFtZXNw
YWNlIHBiICovCi19ICAvKiBuYW1lc3BhY2UgdXBiICovCi0KLSNlbmRpZiAgLyogX19jcGx1c3Bs
dXMgKi8KLQotI2VuZGlmICAvKiBVUEJfREVDT0RFUl9IXyAqLwotCi0vKiBDKysgbmFtZXMgYXJl
IG5vdCBhY3R1YWxseSB1c2VkIHNpbmNlIHRoaXMgdHlwZSBpc24ndCBleHBvc2VkIHRvIHVzZXJz
LiAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1uYW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBwYiB7
Ci1jbGFzcyBNZXNzYWdlR3JvdXA7Ci19ICAvKiBuYW1lc3BhY2UgcGIgKi8KLX0gIC8qIG5hbWVz
cGFjZSB1cGIgKi8KLSNlbmRpZgotVVBCX0RFQ0xBUkVfREVSSVZFRF9UWVBFKHVwYjo6cGI6Ok1l
c3NhZ2VHcm91cCwgdXBiOjpSZWZDb3VudGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1n
cm91cCwgdXBiX3JlZmNvdW50ZWQpCi0KLS8qIE9wY29kZSBkZWZpbml0aW9ucy4gIFRoZSBjYW5v
bmljYWwgbWVhbmluZyBvZiBlYWNoIG9wY29kZSBpcyBpdHMKLSAqIGltcGxlbWVudGF0aW9uIGlu
IHRoZSBpbnRlcnByZXRlciAodGhlIEpJVCBpcyB3cml0dGVuIHRvIG1hdGNoIHRoaXMpLgotICoK
LSAqIEFsbCBpbnN0cnVjdGlvbnMgaGF2ZSB0aGUgb3Bjb2RlIGluIHRoZSBsb3cgYnl0ZS4KLSAq
IEluc3RydWN0aW9uIGZvcm1hdCBmb3IgbW9zdCBpbnN0cnVjdGlvbnMgaXM6Ci0gKgotICogKy0t
LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rCi0gKiB8ICAgICBhcmcgKDI0KSAgICAgIHwgb3Ag
KDgpIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKwotICoKLSAqIEV4Y2VwdGlv
bnMgYXJlIGluZGljYXRlZCBiZWxvdy4gIEEgZmV3IG9wY29kZXMgYXJlIG11bHRpLXdvcmQuICov
Ci10eXBlZGVmIGVudW0gewotICAvKiBPcGNvZGVzIDEtOCwgMTMsIDE1LTE4IHBhcnNlIHRoZWly
IHJlc3BlY3RpdmUgZGVzY3JpcHRvciB0eXBlcy4KLSAgICogQXJnIGZvciBhbGwgb2YgdGhlc2Ug
aXMgdGhlIHVwYiBzZWxlY3RvciBmb3IgdGhpcyBmaWVsZC4gKi8KLSNkZWZpbmUgVCh0eXBlKSBP
UF9QQVJTRV8gIyMgdHlwZSA9IFVQQl9ERVNDUklQVE9SX1RZUEVfICMjIHR5cGUKLSAgVChET1VC
TEUpLCBUKEZMT0FUKSwgVChJTlQ2NCksIFQoVUlOVDY0KSwgVChJTlQzMiksIFQoRklYRUQ2NCks
IFQoRklYRUQzMiksCi0gIFQoQk9PTCksIFQoVUlOVDMyKSwgVChTRklYRUQzMiksIFQoU0ZJWEVE
NjQpLCBUKFNJTlQzMiksIFQoU0lOVDY0KSwKLSN1bmRlZiBUCi0gIE9QX1NUQVJUTVNHICAgICAg
ID0gOSwgICAvKiBObyBhcmcuICovCi0gIE9QX0VORE1TRyAgICAgICAgID0gMTAsICAvKiBObyBh
cmcuICovCi0gIE9QX1NUQVJUU0VRICAgICAgID0gMTEsCi0gIE9QX0VORFNFUSAgICAgICAgID0g
MTIsCi0gIE9QX1NUQVJUU1VCTVNHICAgID0gMTQsCi0gIE9QX0VORFNVQk1TRyAgICAgID0gMTks
Ci0gIE9QX1NUQVJUU1RSICAgICAgID0gMjAsCi0gIE9QX1NUUklORyAgICAgICAgID0gMjEsCi0g
IE9QX0VORFNUUiAgICAgICAgID0gMjIsCi0KLSAgT1BfUFVTSFRBR0RFTElNICAgPSAyMywgIC8q
IE5vIGFyZy4gKi8KLSAgT1BfUFVTSExFTkRFTElNICAgPSAyNCwgIC8qIE5vIGFyZy4gKi8KLSAg
T1BfUE9QICAgICAgICAgICAgPSAyNSwgIC8qIE5vIGFyZy4gKi8KLSAgT1BfU0VUREVMSU0gICAg
ICAgPSAyNiwgIC8qIE5vIGFyZy4gKi8KLSAgT1BfU0VUQklHR1JPVVBOVU0gPSAyNywgIC8qIHR3
byB3b3JkczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgfCB1bnVzZWQgKDI0KSAg
ICAgfCBvcGMgKDgpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgfCAgICAgICAg
Z3JvdXBudW0gKDMyKSAgICAgIHwgKi8KLSAgT1BfQ0hFQ0tERUxJTSAgICAgPSAyOCwKLSAgT1Bf
Q0FMTCAgICAgICAgICAgPSAyOSwKLSAgT1BfUkVUICAgICAgICAgICAgPSAzMCwKLSAgT1BfQlJB
TkNIICAgICAgICAgPSAzMSwKLQotICAvKiBEaWZmZXJlbnQgb3Bjb2RlcyBkZXBlbmRpbmcgb24g
aG93IG1hbnkgYnl0ZXMgZXhwZWN0ZWQuICovCi0gIE9QX1RBRzEgICAgICAgICAgID0gMzIsICAv
KiB8IG1hdGNoIHRhZyAoMTYpIHwganVtcCB0YXJnZXQgKDgpIHwgb3BjICg4KSB8ICovCi0gIE9Q
X1RBRzIgICAgICAgICAgID0gMzMsICAvKiB8IG1hdGNoIHRhZyAoMTYpIHwganVtcCB0YXJnZXQg
KDgpIHwgb3BjICg4KSB8ICovCi0gIE9QX1RBR04gICAgICAgICAgID0gMzQsICAvKiB0aHJlZSB3
b3JkczogKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgfCB1bnVzZWQgKDE2KSB8
IGp1bXAgdGFyZ2V0KDgpIHwgb3BjICg4KSB8ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKiAgIHwgICAgICAgICAgIG1hdGNoIHRhZyAxICgzMikgICAgICAgICAgICAgfCAqLwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogICB8ICAgICAgICAgICBtYXRjaCB0YWcgMiAoMzIp
ICAgICAgICAgICAgIHwgKi8KLQotICBPUF9TRVRESVNQQVRDSCAgICA9IDM1LCAgLyogTiB3b3Jk
czogKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgfCB1bnVzZWQgKDI0KSAgICAg
ICAgIHwgb3BjIHwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgfCB1cGJfaW50
dGFibGUqICgzMiBvciA2NCkgIHwgKi8KLQotICBPUF9ESVNQQVRDSCAgICAgICA9IDM2LCAgLyog
Tm8gYXJnLiAqLwotCi0gIE9QX0hBTFQgICAgICAgICAgID0gMzcgICAvKiBObyBhcmcuICovCi19
IG9wY29kZTsKLQotI2RlZmluZSBPUF9NQVggT1BfSEFMVAotCi1VUEJfSU5MSU5FIG9wY29kZSBn
ZXRvcCh1aW50MzJfdCBpbnN0cikgeyByZXR1cm4gaW5zdHIgJiAweGZmOyB9Ci0KLS8qIE1ldGhv
ZCBncm91cDsgcmVwcmVzZW50cyBhIHNldCBvZiBkZWNvZGVyIG1ldGhvZHMgdGhhdCBoYWQgdGhl
aXIgY29kZQotICogZW1pdHRlZCB0b2dldGhlciwgYW5kIG11c3QgdGhlcmVmb3JlIGJlIGZyZWVk
IHRvZ2V0aGVyLiAgSW1tdXRhYmxlIG9uY2UKLSAqIGNyZWF0ZWQuICBJdCBpcyBwb3NzaWJsZSB3
ZSBtYXkgd2FudCB0byBleHBvc2UgdGhpcyB0byB1c2VycyBhdCBzb21lIHBvaW50LgotICoKLSAq
IE92ZXJhbGwgb3duZXJzaGlwIG9mIERlY29kZXIgb2JqZWN0cyBsb29rcyBsaWtlIHRoaXM6Ci0g
KgotICogICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rCi0gKiAgICAgICAgICAgICAgICB8ICAg
ICAgICAgIHwgPC0tLT4gRGVjb2Rlck1ldGhvZAotICogICAgICAgICAgICAgICAgfCBtZXRob2Qg
ICB8Ci0gKiBDb2RlQ2FjaGUgLS0tPiB8ICBncm91cCAgIHwgPC0tLT4gRGVjb2Rlck1ldGhvZAot
ICogICAgICAgICAgICAgICAgfCAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAgICB8IChtZ3Jv
dXApIHwgPC0tLT4gRGVjb2Rlck1ldGhvZAotICogICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0r
Ci0gKi8KLXN0cnVjdCBtZ3JvdXAgewotICB1cGJfcmVmY291bnRlZCBiYXNlOwotCi0gIC8qIE1h
cHMgdXBiX21zZ2RlZi91cGJfaGFuZGxlcnMgLT4gdXBiX3BiZGVjb2Rlcm1ldGhvZC4gIFdlIG93
biByZWZzIG9uIHRoZQotICAgKiBtZXRob2RzLiAqLwotICB1cGJfaW50dGFibGUgbWV0aG9kczsK
LQotICAvKiBXaGVuIHdlIGFkZCB0aGUgYWJpbGl0eSB0byBsaW5rIHRvIHByZXZpb3VzbHkgZXhp
c3RpbmcgbWdyb3Vwcywgd2UnbGwKLSAgICogbmVlZCBhbiBhcnJheSBvZiBtZ3JvdXBzIHdlIHJl
ZmVyZW5jZSBoZXJlLCBhbmQgb3duIHJlZnMgb24gdGhlbS4gKi8KLQotICAvKiBUaGUgYnl0ZWNv
ZGUgZm9yIG91ciBtZXRob2RzLCBpZiBhbnkgZXhpc3RzLiAgT3duZWQgYnkgdXMuICovCi0gIHVp
bnQzMl90ICpieXRlY29kZTsKLSAgdWludDMyX3QgKmJ5dGVjb2RlX2VuZDsKLQotI2lmZGVmIFVQ
Ql9VU0VfSklUX1g2NAotICAvKiBKSVQtZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSwgaWYgYW55LiAq
LwotICB1cGJfc3RyaW5nX2hhbmRsZXJmdW5jICpqaXRfY29kZTsKLSAgLyogVGhlIHNpemUgb2Yg
dGhlIGppdF9jb2RlIChyZXF1aXJlZCB0byBtdW5tYXAoKSkuICovCi0gIHNpemVfdCBqaXRfc2l6
ZTsKLSAgY2hhciAqZGVidWdfaW5mbzsKLSAgdm9pZCAqZGw7Ci0jZW5kaWYKLX07Ci0KLS8qIFRo
ZSBtYXhpbXVtIHRoYXQgYW55IHN1Ym1lc3NhZ2VzIGNhbiBiZSBuZXN0ZWQuICBNYXRjaGVzIHBy
b3RvMidzIGxpbWl0LgotICogVGhpcyBzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGRlY29kZXIn
cyBzdGF0aWNhbGx5LXNpemVkIGFycmF5IGFuZCB0aGVyZWZvcmUKLSAqIHNldHRpbmcgaXQgaGln
aCB3aWxsIGNhdXNlIHRoZSB1cGI6OnBiOjpEZWNvZGVyIG9iamVjdCB0byBiZSBsYXJnZXIuCi0g
KgotICogSWYgbmVjZXNzYXJ5IHdlIGNhbiBhZGQgYSBydW50aW1lLXNldHRhYmxlIHByb3BlcnR5
IHRvIERlY29kZXIgdGhhdCBhbGxvdwotICogdGhpcyB0byBiZSBsYXJnZXIgdGhhbiB0aGUgY29t
cGlsZS10aW1lIHNldHRpbmcsIGJ1dCB0aGlzIHdvdWxkIGFkZAotICogY29tcGxleGl0eSwgcGFy
dGljdWxhcmx5IHNpbmNlIHdlIHdvdWxkIGhhdmUgdG8gZGVjaWRlIGhvdy9pZiB0byBnaXZlIHVz
ZXJzCi0gKiB0aGUgYWJpbGl0eSB0byBzZXQgYSBjdXN0b20gbWVtb3J5IGFsbG9jYXRpb24gZnVu
Y3Rpb24uICovCi0jZGVmaW5lIFVQQl9ERUNPREVSX01BWF9ORVNUSU5HIDY0Ci0KLS8qIEludGVy
bmFsLW9ubHkgc3RydWN0IHVzZWQgYnkgdGhlIGRlY29kZXIuICovCi10eXBlZGVmIHN0cnVjdCB7
Ci0gIC8qIFNwYWNlIG9wdGltaXphdGlvbiBub3RlOiB3ZSBzdG9yZSB0d28gcG9pbnRlcnMgaGVy
ZSB0aGF0IHRoZSBKSVQKLSAgICogZG9lc24ndCBuZWVkIGF0IGFsbDsgdGhlIHVwYl9oYW5kbGVy
cyogaW5zaWRlIHRoZSBzaW5rIGFuZAotICAgKiB0aGUgZGlzcGF0Y2ggdGFibGUgcG9pbnRlci4g
IFdlIGNhbiBvcHRpbXplIHNvIHRoYXQgdGhlIEpJVCB1c2VzCi0gICAqIHNtYWxsZXIgc3RhY2sg
ZnJhbWVzIHRoYW4gdGhlIGludGVycHJldGVyLiAgVGhlIG9ubHkgdGhpbmcgd2UgbmVlZAotICAg
KiB0byBndWFyYW50ZWUgaXMgdGhhdCB0aGUgZmFsbGJhY2sgcm91dGluZXMgY2FuIGZpbmQgZW5k
X29mcy4gKi8KLSAgdXBiX3Npbmsgc2luazsKLQotICAvKiBUaGUgYWJzb2x1dGUgc3RyZWFtIG9m
ZnNldCBvZiB0aGUgZW5kLW9mLWZyYW1lIGRlbGltaXRlci4KLSAgICogTm9uLWRlbGltaXRlZCBm
cmFtZXMgKGdyb3VwcyBhbmQgbm9uLXBhY2tlZCByZXBlYXRlZCBmaWVsZHMpIHJldXNlIHRoZQot
ICAgKiBkZWxpbWl0ZXIgb2YgdGhlaXIgcGFyZW50LCBldmVuIHRob3VnaCB0aGUgZnJhbWUgbWF5
IG5vdCBlbmQgdGhlcmUuCi0gICAqCi0gICAqIE5PVEU6IHRoZSBKSVQgc3RvcmVzIGEgc2xpZ2h0
bHkgZGlmZmVyZW50IHZhbHVlIGhlcmUgZm9yIG5vbi10b3AgZnJhbWVzLgotICAgKiBJdCBzdG9y
ZXMgdGhlIHZhbHVlIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGVuY2xvc2VkIG1lc3NhZ2Uu
ICBCdXQgdGhlCi0gICAqIHRvcCBmcmFtZSBpcyBzdGlsbCBzdG9yZWQgdGhlIHNhbWUgd2F5LCB3
aGljaCBpcyBpbXBvcnRhbnQgZm9yIGVuc3VyaW5nCi0gICAqIHRoYXQgY2FsbHMgZnJvbSB0aGUg
SklUIGludG8gQyB3b3JrIGNvcnJlY3RseS4gKi8KLSAgdWludDY0X3QgZW5kX29mczsKLSAgY29u
c3QgdWludDMyX3QgKmJhc2U7Ci0KLSAgLyogMCBpbmRpY2F0ZXMgYSBsZW5ndGgtZGVsaW1pdGVk
IGZpZWxkLgotICAgKiBBIHBvc2l0aXZlIG51bWJlciBpbmRpY2F0ZXMgYSBrbm93biBncm91cC4K
LSAgICogQSBuZWdhdGl2ZSBudW1iZXIgaW5kaWNhdGVzIGFuIHVua25vd24gZ3JvdXAuICovCi0g
IGludDMyX3QgZ3JvdXBudW07Ci0gIHVwYl9pbnR0YWJsZSAqZGlzcGF0Y2g7ICAvKiBOb3QgdXNl
ZCBieSB0aGUgSklULiAqLwotfSB1cGJfcGJkZWNvZGVyX2ZyYW1lOwotCi1zdHJ1Y3QgdXBiX3Bi
ZGVjb2Rlcm1ldGhvZCB7Ci0gIHVwYl9yZWZjb3VudGVkIGJhc2U7Ci0KLSAgLyogV2hpbGUgY29t
cGlsaW5nLCB0aGUgYmFzZSBpcyByZWxhdGl2ZSBpbiAib2ZzIiwgYWZ0ZXIgY29tcGlsaW5nIGl0
IGlzCi0gICAqIGFic29sdXRlIGluICJwdHIiLiAqLwotICB1bmlvbiB7Ci0gICAgdWludDMyX3Qg
b2ZzOyAgICAgLyogUEMgb2Zmc2V0IG9mIG1ldGhvZC4gKi8KLSAgICB2b2lkICpwdHI7ICAgICAg
ICAvKiBQb2ludGVyIHRvIGJ5dGVjb2RlIG9yIG1hY2hpbmUgY29kZSBmb3IgdGhpcyBtZXRob2Qu
ICovCi0gIH0gY29kZV9iYXNlOwotCi0gIC8qIFRoZSBkZWNvZGVyIG1ldGhvZCBncm91cCB0byB3
aGljaCB0aGlzIG1ldGhvZCBiZWxvbmdzLiAgV2Ugb3duIGEgcmVmLgotICAgKiBPd25pbmcgYSBy
ZWYgb24gdGhlIGVudGlyZSBncm91cCBpcyBtb3JlIGNvYXJzZS1ncmFpbmVkIHRoYW4gaXMgc3Ry
aWN0bHkKLSAgICogbmVjZXNzYXJ5OyBhbGwgd2UgdHJ1bHkgcmVxdWlyZSBpcyB0aGF0IG1ldGhv
ZHMgd2UgZGlyZWN0bHkgcmVmZXJlbmNlCi0gICAqIG91dGxpdmUgdXMsIHdoaWxlIHRoZSBncm91
cCBjb3VsZCBjb250YWluIG1hbnkgb3RoZXIgbWVzc2FnZXMgd2UgZG9uJ3QKLSAgICogcmVxdWly
ZS4gIEJ1dCB0aGUgZ3JvdXAgcmVwcmVzZW50cyB0aGUgbWVzc2FnZXMgdGhhdCB3ZXJlCi0gICAq
IGFsbG9jYXRlZCtjb21waWxlZCB0b2dldGhlciwgc28gaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2Ug
dG8gZnJlZSB0aGVtCi0gICAqIHRvZ2V0aGVyIGFsc28uICovCi0gIGNvbnN0IHVwYl9yZWZjb3Vu
dGVkICpncm91cDsKLQotICAvKiBXaGV0aGVyIHRoaXMgbWV0aG9kIGlzIG5hdGl2ZSBjb2RlIG9y
IGJ5dGVjb2RlLiAqLwotICBib29sIGlzX25hdGl2ZV87Ci0KLSAgLyogVGhlIGhhbmRsZXIgb25l
IGNhbGxzIHRvIGludm9rZSB0aGlzIG1ldGhvZC4gKi8KLSAgdXBiX2J5dGVzaGFuZGxlciBpbnB1
dF9oYW5kbGVyXzsKLQotICAvKiBUaGUgZGVzdGluYXRpb24gaGFuZGxlcnMgdGhpcyBtZXRob2Qg
aXMgYm91bmQgdG8uICBXZSBvd24gYSByZWYuICovCi0gIGNvbnN0IHVwYl9oYW5kbGVycyAqZGVz
dF9oYW5kbGVyc187Ci0KLSAgLyogRGlzcGF0Y2ggdGFibGUgLS0gdXNlZCBieSBib3RoIGJ5dGVj
b2RlIGRlY29kZXIgYW5kIEpJVCB3aGVuIGVuY291bnRlcmluZyBhCi0gICAqIGZpZWxkIG51bWJl
ciB0aGF0IHdhc24ndCB0aGUgb25lIHdlIHdlcmUgZXhwZWN0aW5nIHRvIHNlZS4gIFNlZQotICAg
KiBkZWNvZGVyLmludC5oIGZvciB0aGUgbGF5b3V0IG9mIHRoaXMgdGFibGUuICovCi0gIHVwYl9p
bnR0YWJsZSBkaXNwYXRjaDsKLX07Ci0KLXN0cnVjdCB1cGJfcGJkZWNvZGVyIHsKLSAgdXBiX2Vu
diAqZW52OwotCi0gIC8qIE91ciBpbnB1dCBzaW5rLiAqLwotICB1cGJfYnl0ZXNzaW5rIGlucHV0
XzsKLQotICAvKiBUaGUgZGVjb2RlciBtZXRob2Qgd2UgYXJlIHBhcnNpbmcgd2l0aCAob3duZWQp
LiAqLwotICBjb25zdCB1cGJfcGJkZWNvZGVybWV0aG9kICptZXRob2RfOwotCi0gIHNpemVfdCBj
YWxsX2xlbjsKLSAgY29uc3QgdWludDMyX3QgKnBjLCAqbGFzdDsKLQotICAvKiBDdXJyZW50IGlu
cHV0IGJ1ZmZlciBhbmQgaXRzIHN0cmVhbSBvZmZzZXQuICovCi0gIGNvbnN0IGNoYXIgKmJ1Ziwg
KnB0ciwgKmVuZCwgKmNoZWNrcG9pbnQ7Ci0KLSAgLyogRW5kIG9mIHRoZSBkZWxpbWl0ZWQgcmVn
aW9uLCByZWxhdGl2ZSB0byBwdHIsIE5VTEwgaWYgbm90IGluIHRoaXMgYnVmLiAqLwotICBjb25z
dCBjaGFyICpkZWxpbV9lbmQ7Ci0KLSAgLyogRW5kIG9mIHRoZSBkZWxpbWl0ZWQgcmVnaW9uLCBy
ZWxhdGl2ZSB0byBwdHIsIGVuZCBpZiBub3QgaW4gdGhpcyBidWYuICovCi0gIGNvbnN0IGNoYXIg
KmRhdGFfZW5kOwotCi0gIC8qIE92ZXJhbGwgc3RyZWFtIG9mZnNldCBvZiAiYnVmLiIgKi8KLSAg
dWludDY0X3QgYnVmc3RhcnRfb2ZzOwotCi0gIC8qIEJ1ZmZlciBmb3IgcmVzaWR1YWwgYnl0ZXMg
bm90IHBhcnNlZCBmcm9tIHRoZSBwcmV2aW91cyBidWZmZXIuICovCi0gIGNoYXIgcmVzaWR1YWxb
VVBCX0RFQ09ERVJfTUFYX1JFU0lEVUFMX0JZVEVTXTsKLSAgY2hhciAqcmVzaWR1YWxfZW5kOwot
Ci0gIC8qIEJ5dGVzIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgZGlzY2FyZGVkIGZyb20gdGhlIGlu
cHV0IGJlb3JlIHdlIHN0YXJ0Ci0gICAqIHBhcnNpbmcgYWdhaW4uICBXZSBzZXQgdGhpcyB3aGVu
IHdlIGludGVybmFsbHkgZGV0ZXJtaW5lIHRoYXQgd2UgY2FuCi0gICAqIHNhZmVseSBza2lwIHRo
ZSBuZXh0IE4gYnl0ZXMsIGJ1dCB0aGlzIHJlZ2lvbiBleHRlbmRzIHBhc3QgdGhlIGN1cnJlbnQK
LSAgICogdXNlciBidWZmZXIuICovCi0gIHNpemVfdCBza2lwOwotCi0gIC8qIFN0b3JlcyB0aGUg
dXNlciBidWZmZXIgcGFzc2VkIHRvIG91ciBkZWNvZGUgZnVuY3Rpb24uICovCi0gIGNvbnN0IGNo
YXIgKmJ1Zl9wYXJhbTsKLSAgc2l6ZV90IHNpemVfcGFyYW07Ci0gIGNvbnN0IHVwYl9idWZoYW5k
bGUgKmhhbmRsZTsKLQotICAvKiBPdXIgaW50ZXJuYWwgc3RhY2suICovCi0gIHVwYl9wYmRlY29k
ZXJfZnJhbWUgKnN0YWNrLCAqdG9wLCAqbGltaXQ7Ci0gIGNvbnN0IHVpbnQzMl90ICoqY2FsbHN0
YWNrOwotICBzaXplX3Qgc3RhY2tfc2l6ZTsKLQotICB1cGJfc3RhdHVzICpzdGF0dXM7Ci0KLSNp
ZmRlZiBVUEJfVVNFX0pJVF9YNjQKLSAgLyogVXNlZCBtb21lbnRhcmlseSBieSB0aGUgZ2VuZXJh
dGVkIGNvZGUgdG8gc3RvcmUgYSB2YWx1ZSB3aGlsZSBhIHVzZXIKLSAgICogZnVuY3Rpb24gaXMg
Y2FsbGVkLiAqLwotICB1aW50MzJfdCB0bXBfbGVuOwotCi0gIGNvbnN0IHZvaWQgKnNhdmVkX3Jz
cDsKLSNlbmRpZgotfTsKLQotLyogRGVjb2RlciBlbnRyeSBwb2ludHM7IHVzZWQgYXMgaGFuZGxl
cnMuICovCi12b2lkICp1cGJfcGJkZWNvZGVyX3N0YXJ0YmModm9pZCAqY2xvc3VyZSwgY29uc3Qg
dm9pZCAqcGMsIHNpemVfdCBzaXplX2hpbnQpOwotdm9pZCAqdXBiX3BiZGVjb2Rlcl9zdGFydGpp
dCh2b2lkICpjbG9zdXJlLCBjb25zdCB2b2lkICpoZCwgc2l6ZV90IHNpemVfaGludCk7Ci1zaXpl
X3QgdXBiX3BiZGVjb2Rlcl9kZWNvZGUodm9pZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGQsIGNv
bnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwg
Y29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKTsKLWJvb2wgdXBiX3BiZGVjb2Rlcl9lbmQodm9p
ZCAqY2xvc3VyZSwgY29uc3Qgdm9pZCAqaGFuZGxlcl9kYXRhKTsKLQotLyogRGVjb2Rlci1pbnRl
cm5hbCBmdW5jdGlvbnMgdGhhdCB0aGUgSklUIGNhbGxzIHRvIGhhbmRsZSBmYWxsYmFjayBwYXRo
cy4gKi8KLWludDMyX3QgdXBiX3BiZGVjb2Rlcl9yZXN1bWUodXBiX3BiZGVjb2RlciAqZCwgdm9p
ZCAqcCwgY29uc3QgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc2l6ZSwgY29uc3QgdXBiX2J1ZmhhbmRsZSAqaGFuZGxlKTsKLXNpemVfdCB1cGJfcGJkZWNv
ZGVyX3N1c3BlbmQodXBiX3BiZGVjb2RlciAqZCk7Ci1pbnQzMl90IHVwYl9wYmRlY29kZXJfc2tp
cHVua25vd24odXBiX3BiZGVjb2RlciAqZCwgaW50MzJfdCBmaWVsZG51bSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHdpcmVfdHlwZSk7Ci1pbnQzMl90IHVwYl9w
YmRlY29kZXJfY2hlY2t0YWdfc2xvdyh1cGJfcGJkZWNvZGVyICpkLCB1aW50NjRfdCBleHBlY3Rl
ZCk7Ci1pbnQzMl90IHVwYl9wYmRlY29kZXJfZGVjb2RlX3ZhcmludF9zbG93KHVwYl9wYmRlY29k
ZXIgKmQsIHVpbnQ2NF90ICp1NjQpOwotaW50MzJfdCB1cGJfcGJkZWNvZGVyX2RlY29kZV9mMzIo
dXBiX3BiZGVjb2RlciAqZCwgdWludDMyX3QgKnUzMik7Ci1pbnQzMl90IHVwYl9wYmRlY29kZXJf
ZGVjb2RlX2Y2NCh1cGJfcGJkZWNvZGVyICpkLCB1aW50NjRfdCAqdTY0KTsKLXZvaWQgdXBiX3Bi
ZGVjb2Rlcl9zZXRlcnIodXBiX3BiZGVjb2RlciAqZCwgY29uc3QgY2hhciAqbXNnKTsKLQotLyog
RXJyb3IgbWVzc2FnZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIGJ5dGVjb2RlIGFuZCBK
SVQgZGVjb2RlcnMuICovCi1leHRlcm4gY29uc3QgY2hhciAqa1BiRGVjb2RlclN0YWNrT3ZlcmZs
b3c7Ci1leHRlcm4gY29uc3QgY2hhciAqa1BiRGVjb2RlclN1Ym1lc3NhZ2VUb29Mb25nOwotCi0v
KiBBY2Nlc3MgdG8gZGVjb2RlcnBsYW4gbWVtYmVycyBuZWVkZWQgYnkgdGhlIGRlY29kZXIuICov
Ci1jb25zdCBjaGFyICp1cGJfcGJkZWNvZGVyX2dldG9wbmFtZSh1bnNpZ25lZCBpbnQgb3ApOwot
Ci0vKiBKSVQgY29kZWdlbiBlbnRyeSBwb2ludC4gKi8KLXZvaWQgdXBiX3BiZGVjb2Rlcl9qaXQo
bWdyb3VwICpncm91cCk7Ci12b2lkIHVwYl9wYmRlY29kZXJfZnJlZWppdChtZ3JvdXAgKmdyb3Vw
KTsKLVVQQl9SRUZDT1VOVEVEX0NNRVRIT0RTKG1ncm91cCwgbWdyb3VwX3VwY2FzdCkKLQotLyog
QSBzcGVjaWFsIGxhYmVsIHRoYXQgbWVhbnMgImRvIGZpZWxkIGRpc3BhdGNoIGZvciB0aGlzIG1l
c3NhZ2UgYW5kIGJyYW5jaCB0bwotICogd2hlcmV2ZXIgdGhhdCB0YWtlcyB5b3UuIiAqLwotI2Rl
ZmluZSBMQUJFTF9ESVNQQVRDSCAwCi0KLS8qIEEgc3BlY2lhbCBzbG90IGluIHRoZSBkaXNwYXRj
aCB0YWJsZSB0aGF0IHN0b3JlcyB0aGUgZXBpbG9ndWUgKEVORE1TRyBhbmQvb3IKLSAqIFJFVCkg
Zm9yIGJyYW5jaGluZyB0byB3aGVuIHdlIGZpbmQgYW4gYXBwcm9wcmlhdGUgRU5ER1JPVVAgdGFn
LiAqLwotI2RlZmluZSBESVNQQVRDSF9FTkRNU0cgMAotCi0vKiBJdCdzIGltcG9ydGFudCB0byB1
c2UgdGhpcyBpbnZhbGlkIHdpcmUgdHlwZSBpbnN0ZWFkIG9mIDAgKHdoaWNoIGlzIGEgdmFsaWQK
LSAqIHdpcmUgdHlwZSkuICovCi0jZGVmaW5lIE5PX1dJUkVfVFlQRSAweGZmCi0KLS8qIFRoZSBk
aXNwYXRjaCB0YWJsZSBsYXlvdXQgaXM6Ci0gKiAgIFtmaWVsZCBudW1iZXJdIC0+IFsgNDgtYml0
IG9mZnNldCBdWyA4LWJpdCB3dDIgXVsgOC1iaXQgd3QxIF0KLSAqCi0gKiBJZiB3dDEgbWF0Y2hl
cywganVtcCB0byB0aGUgNDgtYml0IG9mZnNldC4gIElmIHd0MiBtYXRjaGVzLCBsb29rdXAKLSAq
IChVUEJfTUFYX0ZJRUxETlVNQkVSICsgZmllbGRudW0pIGFuZCBqdW1wIHRoZXJlLgotICoKLSAq
IFdlIG5lZWQgdHdvIHdpcmUgdHlwZXMgYmVjYXVzZSBvZiBwYWNrZWQvbm9uLXBhY2tlZCBjb21w
YXRpYmlsaXR5LiAgQQotICogcHJpbWl0aXZlIHJlcGVhdGVkIGZpZWxkIGNhbiB1c2UgZWl0aGVy
IHdpcmUgdHlwZSBhbmQgYmUgdmFsaWQuICBXaGlsZSB3ZQotICogY291bGQga2V5IHRoZSB0YWJs
ZSBvbiBmaWVsZG51bSt3aXJldHlwZSwgdGhlIHRhYmxlIHdvdWxkIGJlIDh4IHNwYXJzZXIuCi0g
KgotICogU3RvcmluZyB0d28gd2lyZSB0eXBlcyBpbiB0aGUgcHJpbWFyeSB2YWx1ZSBhbGxvd3Mg
dXMgdG8gcXVpY2tseSBydWxlIG91dAotICogdGhlIHNlY29uZCB3aXJlIHR5cGUgd2l0aG91dCBu
ZWVkaW5nIHRvIGRvIGEgc2VwYXJhdGUgbG9va3VwICh0aGlzIGNhc2UgaXMKLSAqIGxlc3MgY29t
bW9uIHRoYW4gYW4gdW5rbm93biBmaWVsZCkuICovCi1VUEJfSU5MSU5FIHVpbnQ2NF90IHVwYl9w
YmRlY29kZXJfcGFja2Rpc3BhdGNoKHVpbnQ2NF90IG9mcywgdWludDhfdCB3dDEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgd3QyKSB7Ci0g
IHJldHVybiAob2ZzIDw8IDE2KSB8ICh3dDIgPDwgOCkgfCB3dDE7Ci19Ci0KLVVQQl9JTkxJTkUg
dm9pZCB1cGJfcGJkZWNvZGVyX3VucGFja2Rpc3BhdGNoKHVpbnQ2NF90IGRpc3BhdGNoLCB1aW50
NjRfdCAqb2ZzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDhfdCAqd3QxLCB1aW50OF90ICp3dDIpIHsKLSAgKnd0MSA9ICh1aW50OF90KWRpc3BhdGNo
OwotICAqd3QyID0gKHVpbnQ4X3QpKGRpc3BhdGNoID4+IDgpOwotICAqb2ZzID0gZGlzcGF0Y2gg
Pj4gMTY7Ci19Ci0KLS8qIEFsbCBvZiB0aGUgZnVuY3Rpb25zIGluIGRlY29kZXIuYyB0aGF0IHJl
dHVybiBpbnQzMl90IHJldHVybiB2YWx1ZXMgYWNjb3JkaW5nCi0gKiB0byB0aGUgZm9sbG93aW5n
IHNjaGVtZToKLSAqICAgMS4gbmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGEgcmV0dXJuIGNvZGUg
ZnJvbSB0aGUgZm9sbG93aW5nIGxpc3QuCi0gKiAgIDIuIHBvc2l0aXZlIHZhbHVlcyBpbmRpY2F0
ZSB0aGF0IGVycm9yIG9yIGVuZCBvZiBidWZmZXIgd2FzIGhpdCwgYW5kCi0gKiAgICAgIHRoYXQg
dGhlIGRlY29kZSBmdW5jdGlvbiBzaG91bGQgaW1tZWRpYXRlbHkgcmV0dXJuIHRoZSBnaXZlbiB2
YWx1ZQotICogICAgICAodGhlIGRlY29kZXIgc3RhdGUgaGFzIGFscmVhZHkgYmVlbiBzdXNwZW5k
ZWQgYW5kIGlzIHJlYWR5IHRvIGJlCi0gKiAgICAgIHJlc3VtZWQpLiAqLwotI2RlZmluZSBERUNP
REVfT0sgLTEKLSNkZWZpbmUgREVDT0RFX01JU01BVENIIC0yICAvKiBVc2VkIG9ubHkgZnJvbSBj
aGVja3RhZ19zbG93KCkuICovCi0jZGVmaW5lIERFQ09ERV9FTkRHUk9VUCAtMyAgLyogVXNlZCBv
bmx5IGZyb20gY2hlY2t1bmtub3duKCkuICovCi0KLSNkZWZpbmUgQ0hFQ0tfUkVUVVJOKHgpIHsg
aW50MzJfdCByZXQgPSB4OyBpZiAocmV0ID49IDApIHJldHVybiByZXQ7IH0KLQotI2VuZGlmICAv
KiBVUEJfREVDT0RFUl9JTlRfSF8gKi8KLS8qCi0qKiBBIG51bWJlciBvZiByb3V0aW5lcyBmb3Ig
dmFyaW50IG1hbmlwdWxhdGlvbiAod2Uga2VlcCB0aGVtIGFsbCBhcm91bmQgdG8KLSoqIGhhdmUg
bXVsdGlwbGUgYXBwcm9hY2hlcyBhdmFpbGFibGUgZm9yIGJlbmNobWFya2luZykuCi0qLwotCi0j
aWZuZGVmIFVQQl9WQVJJTlRfREVDT0RFUl9IXwotI2RlZmluZSBVUEJfVkFSSU5UX0RFQ09ERVJf
SF8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0K
LS8qIEEgbGlzdCBvZiB0eXBlcyBhcyB0aGV5IGFyZSBlbmNvZGVkIG9uLXRoZS13aXJlLiAqLwot
dHlwZWRlZiBlbnVtIHsKLSAgVVBCX1dJUkVfVFlQRV9WQVJJTlQgICAgICA9IDAsCi0gIFVQQl9X
SVJFX1RZUEVfNjRCSVQgICAgICAgPSAxLAotICBVUEJfV0lSRV9UWVBFX0RFTElNSVRFRCAgID0g
MiwKLSAgVVBCX1dJUkVfVFlQRV9TVEFSVF9HUk9VUCA9IDMsCi0gIFVQQl9XSVJFX1RZUEVfRU5E
X0dST1VQICAgPSA0LAotICBVUEJfV0lSRV9UWVBFXzMyQklUICAgICAgID0gNQotfSB1cGJfd2ly
ZXR5cGVfdDsKLQotI2RlZmluZSBVUEJfTUFYX1dJUkVfVFlQRSA1Ci0KLS8qIFRoZSBtYXhpbXVt
IG51bWJlciBvZiBieXRlcyB0aGF0IGl0IHRha2VzIHRvIGVuY29kZSBhIDY0LWJpdCB2YXJpbnQu
Ci0gKiBOb3RlIHRoYXQgd2l0aCBhIGJldHRlciBlbmNvZGluZyB0aGlzIGNvdWxkIGJlIDkgKFRP
RE86IHdyaXRlIHVwIGEKLSAqIHdpa2kgZG9jdW1lbnQgYWJvdXQgdGhpcykuICovCi0jZGVmaW5l
IFVQQl9QQl9WQVJJTlRfTUFYX0xFTiAxMAotCi0vKiBBcnJheSBvZiB0aGUgIm5hdGl2ZSIgKGll
LiBub24tcGFja2VkLXJlcGVhdGVkKSB3aXJlIHR5cGUgZm9yIHRoZSBnaXZlbiBhCi0gKiBkZXNj
cmlwdG9yIHR5cGUgKHVwYl9kZXNjcmlwdG9ydHlwZV90KS4gKi8KLWV4dGVybiBjb25zdCB1aW50
OF90IHVwYl9wYl9uYXRpdmVfd2lyZV90eXBlc1tdOwotCi0vKiBaaWctemFnIGVuY29kaW5nL2Rl
Y29kaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LwotCi1VUEJfSU5MSU5FIGludDMyX3QgdXBiX3p6ZGVjXzMyKHVpbnQzMl90IG4pIHsKLSAgcmV0
dXJuIChuID4+IDEpIF4gLShpbnQzMl90KShuICYgMSk7Ci19Ci1VUEJfSU5MSU5FIGludDY0X3Qg
dXBiX3p6ZGVjXzY0KHVpbnQ2NF90IG4pIHsKLSAgcmV0dXJuIChuID4+IDEpIF4gLShpbnQ2NF90
KShuICYgMSk7Ci19Ci1VUEJfSU5MSU5FIHVpbnQzMl90IHVwYl96emVuY18zMihpbnQzMl90IG4p
IHsgcmV0dXJuIChuIDw8IDEpIF4gKG4gPj4gMzEpOyB9Ci1VUEJfSU5MSU5FIHVpbnQ2NF90IHVw
Yl96emVuY182NChpbnQ2NF90IG4pIHsgcmV0dXJuIChuIDw8IDEpIF4gKG4gPj4gNjMpOyB9Ci0K
LS8qIERlY29kaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEFsbCBkZWNvZGluZyBmdW5jdGlvbnMgcmV0
dXJuIHRoaXMgc3RydWN0IGJ5IHZhbHVlLiAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBj
aGFyICpwOyAgLyogTlVMTCBpZiB0aGUgdmFyaW50IHdhcyB1bnRlcm1pbmF0ZWQuICovCi0gIHVp
bnQ2NF90IHZhbDsKLX0gdXBiX2RlY29kZXJldDsKLQotVVBCX0lOTElORSB1cGJfZGVjb2RlcmV0
IHVwYl9kZWNvZGVyZXRfbWFrZShjb25zdCBjaGFyICpwLCB1aW50NjRfdCB2YWwpIHsKLSAgdXBi
X2RlY29kZXJldCByZXQ7Ci0gIHJldC5wID0gcDsKLSAgcmV0LnZhbCA9IHZhbDsKLSAgcmV0dXJu
IHJldDsKLX0KLQotLyogRm91ciBmdW5jdGlvbnMgZm9yIGRlY29kaW5nIGEgdmFyaW50IG9mIGF0
IG1vc3QgZWlnaHQgYnl0ZXMuICBUaGV5IGFyZSBhbGwKLSAqIGZ1bmN0aW9uYWxseSBpZGVudGlj
YWwsIGJ1dCBhcmUgaW1wbGVtZW50ZWQgaW4gZGlmZmVyZW50IHdheXMgYW5kIGxpa2VseSBoYXZl
Ci0gKiBkaWZmZXJlbnQgcGVyZm9ybWFuY2UgcHJvZmlsZXMuICBXZSBrZWVwIHRoZW0gYXJvdW5k
IGZvciBwZXJmb3JtYW5jZSB0ZXN0aW5nLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlv
bnMgbWF5IG5vdCByZWFkIGJ5dGUtYnktYnl0ZSwgc28gdGhleSBtdXN0IG5vdCBiZSB1c2VkCi0g
KiB1bmxlc3MgdGhlcmUgYXJlIGF0IGxlYXN0IGVpZ2h0IGJ5dGVzIGxlZnQgaW4gdGhlIGJ1ZmZl
ciEgKi8KLXVwYl9kZWNvZGVyZXQgdXBiX3ZkZWNvZGVfbWF4OF9icmFuY2gzMih1cGJfZGVjb2Rl
cmV0IHIpOwotdXBiX2RlY29kZXJldCB1cGJfdmRlY29kZV9tYXg4X2JyYW5jaDY0KHVwYl9kZWNv
ZGVyZXQgcik7Ci11cGJfZGVjb2RlcmV0IHVwYl92ZGVjb2RlX21heDhfd3JpZ2h0KHVwYl9kZWNv
ZGVyZXQgcik7Ci11cGJfZGVjb2RlcmV0IHVwYl92ZGVjb2RlX21heDhfbWFzc2ltaW5vKHVwYl9k
ZWNvZGVyZXQgcik7Ci0KLS8qIFRlbXBsYXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHRo
ZSBmaXJzdCB0d28gYnl0ZXMgd2l0aCBicmFuY2hpbmcKLSAqIGFuZCBkaXNwYXRjaGVzIDItMTAg
Ynl0ZXMgd2l0aCBhIHNlcGFyYXRlIGZ1bmN0aW9uLiAgTm90ZSB0aGF0IHRoaXMgbWF5IHJlYWQK
LSAqIHVwIHRvIDEwIGJ5dGVzLCBzbyBpdCBtdXN0IG5vdCBiZSB1c2VkIHVubGVzcyB0aGVyZSBh
cmUgYXQgbGVhc3QgdGVuIGJ5dGVzCi0gKiBsZWZ0IGluIHRoZSBidWZmZXIhICovCi0jZGVmaW5l
IFVQQl9WQVJJTlRfREVDT0RFUl9DSEVDSzIobmFtZSwgZGVjb2RlX21heDhfZnVuY3Rpb24pICAg
ICAgICAgICAgICAgICAgXAotVVBCX0lOTElORSB1cGJfZGVjb2RlcmV0IHVwYl92ZGVjb2RlX2No
ZWNrMl8gIyMgbmFtZShjb25zdCBjaGFyICpfcCkgeyAgICAgICAgIFwKLSAgdWludDhfdCAqcCA9
ICh1aW50OF90KilfcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIHVwYl9kZWNvZGVyZXQgcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoKCpwICYgMHg4MCkgPT0g
MCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgLyogQ29tbW9uIGNhc2U6IG9uZS1ieXRlIHZhcmludC4gKi8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIHVwYl9kZWNvZGVyZXRfbWFr
ZShfcCArIDEsICpwICYgMHg3ZlUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgciA9IHVwYl9kZWNvZGVyZXRfbWFrZShfcCArIDIsICgq
cCAmIDB4N2ZVKSB8ICgoKihwICsgMSkgJiAweDdmVSkgPDwgNykpOyAgICBcCi0gIGlmICgoKihw
ICsgMSkgJiAweDgwKSA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIC8qIFR3by1ieXRlIHZhcmludC4gKi8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gcjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiBMb25nZXIgdmFyaW50LCBmYWxs
YmFjayB0byBvdXQtb2YtbGluZSBmdW5jdGlvbi4gKi8gICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgcmV0dXJuIGRlY29kZV9tYXg4X2Z1bmN0aW9uKHIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLVVQQl9WQVJJTlRfREVDT0RFUl9DSEVDSzIo
YnJhbmNoMzIsIHVwYl92ZGVjb2RlX21heDhfYnJhbmNoMzIpCi1VUEJfVkFSSU5UX0RFQ09ERVJf
Q0hFQ0syKGJyYW5jaDY0LCB1cGJfdmRlY29kZV9tYXg4X2JyYW5jaDY0KQotVVBCX1ZBUklOVF9E
RUNPREVSX0NIRUNLMih3cmlnaHQsIHVwYl92ZGVjb2RlX21heDhfd3JpZ2h0KQotVVBCX1ZBUklO
VF9ERUNPREVSX0NIRUNLMihtYXNzaW1pbm8sIHVwYl92ZGVjb2RlX21heDhfbWFzc2ltaW5vKQot
I3VuZGVmIFVQQl9WQVJJTlRfREVDT0RFUl9DSEVDSzIKLQotLyogT3VyIGNhbm9uaWNhbCBmdW5j
dGlvbnMgZm9yIGRlY29kaW5nIHZhcmludHMsIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkKLSAqIGZh
dm9yZWQgYmVzdC1wZXJmb3JtaW5nIGltcGxlbWVudGF0aW9ucy4gKi8KLVVQQl9JTkxJTkUgdXBi
X2RlY29kZXJldCB1cGJfdmRlY29kZV9mYXN0KGNvbnN0IGNoYXIgKnApIHsKLSAgaWYgKHNpemVv
Zihsb25nKSA9PSA4KQotICAgIHJldHVybiB1cGJfdmRlY29kZV9jaGVjazJfYnJhbmNoNjQocCk7
Ci0gIGVsc2UKLSAgICByZXR1cm4gdXBiX3ZkZWNvZGVfY2hlY2syX2JyYW5jaDMyKHApOwotfQot
Ci1VUEJfSU5MSU5FIHVwYl9kZWNvZGVyZXQgdXBiX3ZkZWNvZGVfbWF4OF9mYXN0KHVwYl9kZWNv
ZGVyZXQgcikgewotICByZXR1cm4gdXBiX3ZkZWNvZGVfbWF4OF9tYXNzaW1pbm8ocik7Ci19Ci0K
LQotLyogRW5jb2RpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotVVBCX0lOTElORSBpbnQgdXBiX3ZhbHVlX3Np
emUodWludDY0X3QgdmFsKSB7Ci0jaWZkZWYgX19HTlVDX18KLSAgaW50IGhpZ2hfYml0ID0gNjMg
LSBfX2J1aWx0aW5fY2x6bGwodmFsKTsgIC8qIDAtYmFzZWQsIHVuZGVmIGlmIHZhbCA9PSAwLiAq
LwotI2Vsc2UKLSAgaW50IGhpZ2hfYml0ID0gMDsKLSAgdWludDY0X3QgdG1wID0gdmFsOwotICB3
aGlsZSh0bXAgPj49IDEpIGhpZ2hfYml0Kys7Ci0jZW5kaWYKLSAgcmV0dXJuIHZhbCA9PSAwID8g
MSA6IGhpZ2hfYml0IC8gOCArIDE7Ci19Ci0KLS8qIEVuY29kZXMgYSA2NC1iaXQgdmFyaW50IGlu
dG8gYnVmICh3aGljaCBtdXN0IGJlID49VVBCX1BCX1ZBUklOVF9NQVhfTEVOCi0gKiBieXRlcyBs
b25nKSwgcmV0dXJuaW5nIGhvdyBtYW55IGJ5dGVzIHdlcmUgdXNlZC4KLSAqCi0gKiBUT0RPOiBi
ZW5jaG1hcmsgYW5kIG9wdGltaXplIGlmIG5lY2Vzc2FyeS4gKi8KLVVQQl9JTkxJTkUgc2l6ZV90
IHVwYl92ZW5jb2RlNjQodWludDY0X3QgdmFsLCBjaGFyICpidWYpIHsKLSAgc2l6ZV90IGk7Ci0g
IGlmICh2YWwgPT0gMCkgeyBidWZbMF0gPSAwOyByZXR1cm4gMTsgfQotICBpID0gMDsKLSAgd2hp
bGUgKHZhbCkgewotICAgIHVpbnQ4X3QgYnl0ZSA9IHZhbCAmIDB4N2ZVOwotICAgIHZhbCA+Pj0g
NzsKLSAgICBpZiAodmFsKSBieXRlIHw9IDB4ODBVOwotICAgIGJ1ZltpKytdID0gYnl0ZTsKLSAg
fQotICByZXR1cm4gaTsKLX0KLQotVVBCX0lOTElORSBzaXplX3QgdXBiX3ZhcmludF9zaXplKHVp
bnQ2NF90IHZhbCkgewotICBjaGFyIGJ1ZltVUEJfUEJfVkFSSU5UX01BWF9MRU5dOwotICByZXR1
cm4gdXBiX3ZlbmNvZGU2NCh2YWwsIGJ1Zik7Ci19Ci0KLS8qIEVuY29kZXMgYSAzMi1iaXQgdmFy
aW50LCAqbm90KiBzaWduLWV4dGVuZGVkLiAqLwotVVBCX0lOTElORSB1aW50NjRfdCB1cGJfdmVu
Y29kZTMyKHVpbnQzMl90IHZhbCkgewotICBjaGFyIGJ1ZltVUEJfUEJfVkFSSU5UX01BWF9MRU5d
OwotICBzaXplX3QgYnl0ZXMgPSB1cGJfdmVuY29kZTY0KHZhbCwgYnVmKTsKLSAgdWludDY0X3Qg
cmV0ID0gMDsKLSAgYXNzZXJ0KGJ5dGVzIDw9IDUpOwotICBtZW1jcHkoJnJldCwgYnVmLCBieXRl
cyk7Ci0gIGFzc2VydChyZXQgPD0gMHhmZmZmZmZmZmZmVSk7Ci0gIHJldHVybiByZXQ7Ci19Ci0K
LSNpZmRlZiBfX2NwbHVzcGx1cwotfSAgLyogZXh0ZXJuICJDIiAqLwotI2VuZGlmCi0KLSNlbmRp
ZiAgLyogVVBCX1ZBUklOVF9ERUNPREVSX0hfICovCi0vKgotKiogdXBiOjpwYjo6RW5jb2RlciAo
dXBiX3BiX2VuY29kZXIpCi0qKgotKiogSW1wbGVtZW50cyBhIHNldCBvZiB1cGJfaGFuZGxlcnMg
dGhhdCB3cml0ZSBwcm90b2J1ZiBkYXRhIHRvIHRoZSBiaW5hcnkgd2lyZQotKiogZm9ybWF0Lgot
KioKLSoqIFRoaXMgZW5jb2RlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBhY2Nl
c3MgdG8gYW55IG91dC1vZi1iYW5kIG9yCi0qKiBwcmVjb21wdXRlZCBsZW5ndGhzIGZvciBzdWJt
ZXNzYWdlcywgc28gaXQgbXVzdCBidWZmZXIgc3VibWVzc2FnZXMgaW50ZXJuYWxseQotKiogYmVm
b3JlIGl0IGNhbiBlbWl0IHRoZSBmaXJzdCBieXRlLgotKi8KLQotI2lmbmRlZiBVUEJfRU5DT0RF
Ul9IXwotI2RlZmluZSBVUEJfRU5DT0RFUl9IXwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotbmFt
ZXNwYWNlIHVwYiB7Ci1uYW1lc3BhY2UgcGIgewotY2xhc3MgRW5jb2RlcjsKLX0gIC8qIG5hbWVz
cGFjZSBwYiAqLwotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotI2VuZGlmCi0KLVVQQl9ERUNMQVJF
X1RZUEUodXBiOjpwYjo6RW5jb2RlciwgdXBiX3BiX2VuY29kZXIpCi0KLSNkZWZpbmUgVVBCX1BC
RU5DT0RFUl9NQVhfTkVTVElORyAxMDAKLQotLyogdXBiOjpwYjo6RW5jb2RlciAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyog
UHJlYWxsb2NhdGlvbiBoaW50OiBkZWNvZGVyIHdvbid0IGFsbG9jYXRlIG1vcmUgYnl0ZXMgdGhh
biB0aGlzIHdoZW4gZmlyc3QKLSAqIGNvbnN0cnVjdGVkLiAgVGhpcyBoaW50IG1heSBiZSBhbiBv
dmVyZXN0aW1hdGUgZm9yIHNvbWUgYnVpbGQgY29uZmlndXJhdGlvbnMuCi0gKiBCdXQgaWYgdGhl
IGRlY29kZXIgbGlicmFyeSBpcyB1cGdyYWRlZCB3aXRob3V0IHJlY29tcGlsaW5nIHRoZSBhcHBs
aWNhdGlvbiwKLSAqIGl0IG1heSBiZSBhbiB1bmRlcmVzdGltYXRlLiAqLwotI2RlZmluZSBVUEJf
UEJfRU5DT0RFUl9TSVpFIDc2OAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotY2xhc3MgdXBiOjpw
Yjo6RW5jb2RlciB7Ci0gcHVibGljOgotICAvKiBDcmVhdGVzIGEgbmV3IGVuY29kZXIgaW4gdGhl
IGdpdmVuIGVudmlyb25tZW50LiAgVGhlIEhhbmRsZXJzIG11c3QgaGF2ZQotICAgKiBjb21lIGZy
b20gTmV3SGFuZGxlcnMoKSBiZWxvdy4gKi8KLSAgc3RhdGljIEVuY29kZXIqIENyZWF0ZShFbnZp
cm9ubWVudCogZW52LCBjb25zdCBIYW5kbGVycyogaGFuZGxlcnMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgQnl0ZXNTaW5rKiBvdXRwdXQpOwotCi0gIC8qIFRoZSBpbnB1dCB0byB0aGUgZW5j
b2Rlci4gKi8KLSAgU2luayogaW5wdXQoKTsKLQotICAvKiBDcmVhdGVzIGEgbmV3IHNldCBvZiBo
YW5kbGVycyBmb3IgdGhpcyBNZXNzYWdlRGVmLiAqLwotICBzdGF0aWMgcmVmZmVkX3B0cjxjb25z
dCBIYW5kbGVycz4gTmV3SGFuZGxlcnMoY29uc3QgTWVzc2FnZURlZiogbXNnKTsKLQotICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGtTaXplID0gVVBCX1BCX0VOQ09ERVJfU0laRTsKLQotIHByaXZhdGU6
Ci0gIFVQQl9ESVNBTExPV19QT0RfT1BTKEVuY29kZXIsIHVwYjo6cGI6OkVuY29kZXIpCi19Owot
Ci0jZW5kaWYKLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBi
X3BiX2VuY29kZXJfbmV3aGFuZGxlcnMoY29uc3QgdXBiX21zZ2RlZiAqbSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3duZXIpOwot
dXBiX3NpbmsgKnVwYl9wYl9lbmNvZGVyX2lucHV0KHVwYl9wYl9lbmNvZGVyICpwKTsKLXVwYl9w
Yl9lbmNvZGVyKiB1cGJfcGJfZW5jb2Rlcl9jcmVhdGUodXBiX2VudiogZSwgY29uc3QgdXBiX2hh
bmRsZXJzKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfYnl0
ZXNzaW5rKiBvdXRwdXQpOwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1
cwotCi1uYW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBwYiB7Ci1pbmxpbmUgRW5jb2RlciogRW5j
b2Rlcjo6Q3JlYXRlKEVudmlyb25tZW50KiBlbnYsIGNvbnN0IEhhbmRsZXJzKiBoYW5kbGVycywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZXNTaW5rKiBvdXRwdXQpIHsKLSAg
cmV0dXJuIHVwYl9wYl9lbmNvZGVyX2NyZWF0ZShlbnYsIGhhbmRsZXJzLCBvdXRwdXQpOwotfQot
aW5saW5lIFNpbmsqIEVuY29kZXI6OmlucHV0KCkgewotICByZXR1cm4gdXBiX3BiX2VuY29kZXJf
aW5wdXQodGhpcyk7Ci19Ci1pbmxpbmUgcmVmZmVkX3B0cjxjb25zdCBIYW5kbGVycz4gRW5jb2Rl
cjo6TmV3SGFuZGxlcnMoCi0gICAgY29uc3QgdXBiOjpNZXNzYWdlRGVmICptZCkgewotICBjb25z
dCBIYW5kbGVycyogaCA9IHVwYl9wYl9lbmNvZGVyX25ld2hhbmRsZXJzKG1kLCAmaCk7Ci0gIHJl
dHVybiByZWZmZWRfcHRyPGNvbnN0IEhhbmRsZXJzPihoLCAmaCk7Ci19Ci19ICAvKiBuYW1lc3Bh
Y2UgcGIgKi8KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLQotI2VuZGlmCi0KLSNlbmRpZiAgLyog
VVBCX0VOQ09ERVJfSF8gKi8KLS8qCi0qKiB1cGIncyBjb3JlIGNvbXBvbmVudHMgbGlrZSB1cGJf
ZGVjb2RlciBhbmQgdXBiX21zZyBhcmUgY2FyZWZ1bGx5IGRlc2lnbmVkIHRvCi0qKiBhdm9pZCBk
ZXBlbmRpbmcgb24gZWFjaCBvdGhlciBmb3IgbWF4aW11bSBvcnRob2dvbmFsaXR5LiAgSW4gb3Ro
ZXIgd29yZHMsCi0qKiB5b3UgY2FuIHVzZSBhIHVwYl9kZWNvZGVyIHRvIGRlY29kZSBpbnRvICph
bnkqIGtpbmQgb2Ygc3RydWN0dXJlOyB1cGJfbXNnIGlzCi0qKiBqdXN0IG9uZSBzdWNoIHN0cnVj
dHVyZS4gIEEgdXBiX21zZyBjYW4gYmUgc2VyaWFsaXplZC9kZXNlcmlhbGl6ZWQgaW50byBhbnkK
LSoqIGZvcm1hdCwgcHJvdG9idWYgYmluYXJ5IGZvcm1hdCBpcyBqdXN0IG9uZSBzdWNoIGZvcm1h
dC4KLSoqCi0qKiBIb3dldmVyLCBmb3IgY29udmVuaWVuY2Ugd2UgcHJvdmlkZSBmdW5jdGlvbnMg
aGVyZSBmb3IgZG9pbmcgY29tbW9uCi0qKiBvcGVyYXRpb25zIGxpa2UgZGVzZXJpYWxpemluZyBw
cm90b2J1ZiBiaW5hcnkgZm9ybWF0IGludG8gYSB1cGJfbXNnLiAgVGhlCi0qKiBjb21wcm9taXNl
IGlzIHRoYXQgdGhpcyBmaWxlIGRyYWdzIGluIGFsbW9zdCBhbGwgb2YgdXBiIGFzIGEgZGVwZW5k
ZW5jeSwKLSoqIHdoaWNoIGNvdWxkIGJlIHVuZGVzaXJhYmxlIGlmIHlvdSdyZSB0cnlpbmcgdG8g
dXNlIGEgdHJpbW1lZC1kb3duIGJ1aWxkIG9mCi0qKiB1cGIuCi0qKgotKiogV2hpbGUgdGhlc2Ug
cm91dGluZXMgYXJlIGNvbnZlbmllbnQsIHRoZXkgZG8gbm90IHJldXNlIGFueSBlbmNvZGluZy9k
ZWNvZGluZwotKiogc3RhdGUuICBGb3IgZXhhbXBsZSwgaWYgYSBkZWNvZGVyIGlzIEpJVC1iYXNl
ZCwgaXQgd2lsbCBiZSByZS1KSVR0ZWQgZXZlcnkKLSoqIHRpbWUgdGhlc2UgZnVuY3Rpb25zIGFy
ZSBjYWxsZWQuICBGb3IgdGhpcyByZWFzb24sIGlmIHlvdSBhcmUgcGFyc2luZyBsb3RzCi0qKiBv
ZiBkYXRhIGFuZCBlZmZpY2llbmN5IGlzIGFuIGlzc3VlLCB0aGVzZSBtYXkgbm90IGJlIHRoZSBi
ZXN0IGZ1bmN0aW9ucyB0bwotKiogdXNlICh0aG91Z2ggdGhleSBhcmUgdXNlZnVsIGZvciBwcm90
b3R5cGluZywgYmVmb3JlIG9wdGltaXppbmcpLgotKi8KLQotI2lmbmRlZiBVUEJfR0xVRV9ICi0j
ZGVmaW5lIFVQQl9HTFVFX0gKLQotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLQotI2lmZGVmIF9fY3Bs
dXNwbHVzCi0jaW5jbHVkZSA8dmVjdG9yPgotCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKiBM
b2FkcyBhIGJpbmFyeSBkZXNjcmlwdG9yIGFuZCByZXR1cm5zIGEgTlVMTC10ZXJtaW5hdGVkIGFy
cmF5IG9mIHVuZnJvemVuCi0gKiBmaWxlZGVmcy4gIFRoZSBjYWxsZXIgb3ducyB0aGUgcmV0dXJu
ZWQgYXJyYXksIHdoaWNoIG11c3QgYmUgZnJlZWQgd2l0aAotICogdXBiX2dmcmVlKCkuICovCi11
cGJfZmlsZWRlZiAqKnVwYl9sb2FkZGVzY3JpcHRvcihjb25zdCBjaGFyICpidWYsIHNpemVfdCBu
LCBjb25zdCB2b2lkICpvd25lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVw
Yl9zdGF0dXMgKnN0YXR1cyk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfSAgLyogZXh0ZXJuICJD
IiAqLwotCi1uYW1lc3BhY2UgdXBiIHsKLQotaW5saW5lIGJvb2wgTG9hZERlc2NyaXB0b3IoY29u
c3QgY2hhciogYnVmLCBzaXplX3QgbiwgU3RhdHVzKiBzdGF0dXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3RvcjxyZWZmZWRfcHRyPEZpbGVEZWY+ID4qIGZpbGVzKSB7Ci0g
IEZpbGVEZWYqKiBwYXJzZWRfZmlsZXMgPSB1cGJfbG9hZGRlc2NyaXB0b3IoYnVmLCBuLCAmcGFy
c2VkX2ZpbGVzLCBzdGF0dXMpOwotCi0gIGlmIChwYXJzZWRfZmlsZXMpIHsKLSAgICBGaWxlRGVm
KiogcCA9IHBhcnNlZF9maWxlczsKLSAgICB3aGlsZSAoKnApIHsKLSAgICAgIGZpbGVzLT5wdXNo
X2JhY2socmVmZmVkX3B0cjxGaWxlRGVmPigqcCwgJnBhcnNlZF9maWxlcykpOwotICAgICAgKytw
OwotICAgIH0KLSAgICBmcmVlKHBhcnNlZF9maWxlcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0g
ZWxzZSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLS8qIFRlbXBsYXRlZCBzbyBpdCBj
YW4gYWNjZXB0IGJvdGggc3RyaW5nIGFuZCBzdGQ6OnN0cmluZy4gKi8KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotYm9vbCBMb2FkRGVzY3JpcHRvcihjb25zdCBUJiBkZXNjLCBTdGF0dXMqIHN0YXR1
cywKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8cmVmZmVkX3B0cjxGaWxlRGVmPiA+
KiBmaWxlcykgewotICByZXR1cm4gTG9hZERlc2NyaXB0b3IoZGVzYy5jX3N0cigpLCBkZXNjLnNp
emUoKSwgc3RhdHVzLCBmaWxlcyk7Ci19Ci0KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLQotI2Vu
ZGlmCi0KLSNlbmRpZiAgLyogVVBCX0dMVUVfSCAqLwotLyoKLSoqIHVwYjo6cGI6OlRleHRQcmlu
dGVyICh1cGJfdGV4dHByaW50ZXIpCi0qKgotKiogSGFuZGxlcnMgZm9yIHdyaXRpbmcgdG8gcHJv
dG9idWYgdGV4dCBmb3JtYXQuCi0qLwotCi0jaWZuZGVmIFVQQl9URVhUX0hfCi0jZGVmaW5lIFVQ
Ql9URVhUX0hfCi0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1uYW1lc3BhY2UgdXBiIHsKLW5hbWVz
cGFjZSBwYiB7Ci1jbGFzcyBUZXh0UHJpbnRlcjsKLX0gIC8qIG5hbWVzcGFjZSBwYiAqLwotfSAg
LyogbmFtZXNwYWNlIHVwYiAqLwotI2VuZGlmCi0KLVVQQl9ERUNMQVJFX1RZUEUodXBiOjpwYjo6
VGV4dFByaW50ZXIsIHVwYl90ZXh0cHJpbnRlcikKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLWNs
YXNzIHVwYjo6cGI6OlRleHRQcmludGVyIHsKLSBwdWJsaWM6Ci0gIC8qIFRoZSBnaXZlbiBoYW5k
bGVycyBtdXN0IGhhdmUgY29tZSBmcm9tIE5ld0hhbmRsZXJzKCkuICBJdCBtdXN0IG91dGxpdmUg
dGhlCi0gICAqIFRleHRQcmludGVyLiAqLwotICBzdGF0aWMgVGV4dFByaW50ZXIgKkNyZWF0ZShF
bnZpcm9ubWVudCAqZW52LCBjb25zdCB1cGI6OkhhbmRsZXJzICpoYW5kbGVycywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQnl0ZXNTaW5rICpvdXRwdXQpOwotCi0gIHZvaWQgU2V0U2lu
Z2xlTGluZU1vZGUoYm9vbCBzaW5nbGVfbGluZSk7Ci0KLSAgU2luayogaW5wdXQoKTsKLQotICAv
KiBJZiBoYW5kbGVyIGNhY2hpbmcgYmVjb21lcyBhIHJlcXVpcmVtZW50IHdlIGNhbiBhZGQgYSBj
b2RlIGNhY2hlIGFzIGluCi0gICAqIGRlY29kZXIuaCAqLwotICBzdGF0aWMgcmVmZmVkX3B0cjxj
b25zdCBIYW5kbGVycz4gTmV3SGFuZGxlcnMoY29uc3QgTWVzc2FnZURlZiogbWQpOwotfTsKLQot
I2VuZGlmCi0KLVVQQl9CRUdJTl9FWFRFUk5fQwotCi0vKiBDIEFQSS4gKi8KLXVwYl90ZXh0cHJp
bnRlciAqdXBiX3RleHRwcmludGVyX2NyZWF0ZSh1cGJfZW52ICplbnYsIGNvbnN0IHVwYl9oYW5k
bGVycyAqaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfYnl0
ZXNzaW5rICpvdXRwdXQpOwotdm9pZCB1cGJfdGV4dHByaW50ZXJfc2V0c2luZ2xlbGluZSh1cGJf
dGV4dHByaW50ZXIgKnAsIGJvb2wgc2luZ2xlX2xpbmUpOwotdXBiX3NpbmsgKnVwYl90ZXh0cHJp
bnRlcl9pbnB1dCh1cGJfdGV4dHByaW50ZXIgKnApOwotCi1jb25zdCB1cGJfaGFuZGxlcnMgKnVw
Yl90ZXh0cHJpbnRlcl9uZXdoYW5kbGVycyhjb25zdCB1cGJfbXNnZGVmICptLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3duZXIp
OwotCi1VUEJfRU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1uYW1lc3BhY2Ug
dXBiIHsKLW5hbWVzcGFjZSBwYiB7Ci1pbmxpbmUgVGV4dFByaW50ZXIgKlRleHRQcmludGVyOjpD
cmVhdGUoRW52aXJvbm1lbnQgKmVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1cGI6OkhhbmRsZXJzICpoYW5kbGVycywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCeXRlc1NpbmsgKm91dHB1dCkgewotICByZXR1cm4gdXBi
X3RleHRwcmludGVyX2NyZWF0ZShlbnYsIGhhbmRsZXJzLCBvdXRwdXQpOwotfQotaW5saW5lIHZv
aWQgVGV4dFByaW50ZXI6OlNldFNpbmdsZUxpbmVNb2RlKGJvb2wgc2luZ2xlX2xpbmUpIHsKLSAg
dXBiX3RleHRwcmludGVyX3NldHNpbmdsZWxpbmUodGhpcywgc2luZ2xlX2xpbmUpOwotfQotaW5s
aW5lIFNpbmsqIFRleHRQcmludGVyOjppbnB1dCgpIHsKLSAgcmV0dXJuIHVwYl90ZXh0cHJpbnRl
cl9pbnB1dCh0aGlzKTsKLX0KLWlubGluZSByZWZmZWRfcHRyPGNvbnN0IEhhbmRsZXJzPiBUZXh0
UHJpbnRlcjo6TmV3SGFuZGxlcnMoCi0gICAgY29uc3QgTWVzc2FnZURlZiAqbWQpIHsKLSAgY29u
c3QgSGFuZGxlcnMqIGggPSB1cGJfdGV4dHByaW50ZXJfbmV3aGFuZGxlcnMobWQsICZoKTsKLSAg
cmV0dXJuIHJlZmZlZF9wdHI8Y29uc3QgSGFuZGxlcnM+KGgsICZoKTsKLX0KLX0gIC8qIG5hbWVz
cGFjZSBwYiAqLwotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotCi0jZW5kaWYKLQotI2VuZGlmICAv
KiBVUEJfVEVYVF9IXyAqLwotLyoKLSoqIHVwYjo6anNvbjo6UGFyc2VyICh1cGJfanNvbl9wYXJz
ZXIpCi0qKgotKiogUGFyc2VzIEpTT04gYWNjb3JkaW5nIHRvIGEgc3BlY2lmaWMgc2NoZW1hLgot
KiogU3VwcG9ydCBmb3IgcGFyc2luZyBhcmJpdHJhcnkgSlNPTiAoc2NoZW1hLWxlc3MpIHdpbGwg
YmUgYWRkZWQgbGF0ZXIuCi0qLwotCi0jaWZuZGVmIFVQQl9KU09OX1BBUlNFUl9IXwotI2RlZmlu
ZSBVUEJfSlNPTl9QQVJTRVJfSF8KLQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLW5hbWVzcGFjZSB1
cGIgewotbmFtZXNwYWNlIGpzb24gewotY2xhc3MgUGFyc2VyOwotY2xhc3MgUGFyc2VyTWV0aG9k
OwotfSAgLyogbmFtZXNwYWNlIGpzb24gKi8KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLSNlbmRp
ZgotCi1VUEJfREVDTEFSRV9UWVBFKHVwYjo6anNvbjo6UGFyc2VyLCB1cGJfanNvbl9wYXJzZXIp
Ci1VUEJfREVDTEFSRV9ERVJJVkVEX1RZUEUodXBiOjpqc29uOjpQYXJzZXJNZXRob2QsIHVwYjo6
UmVmQ291bnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfanNvbl9wYXJzZXJtZXRo
b2QsIHVwYl9yZWZjb3VudGVkKQotCi0vKiB1cGI6Ompzb246OlBhcnNlciAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBQcmVh
bGxvY2F0aW9uIGhpbnQ6IHBhcnNlciB3b24ndCBhbGxvY2F0ZSBtb3JlIGJ5dGVzIHRoYW4gdGhp
cyB3aGVuIGZpcnN0Ci0gKiBjb25zdHJ1Y3RlZC4gIFRoaXMgaGludCBtYXkgYmUgYW4gb3ZlcmVz
dGltYXRlIGZvciBzb21lIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLgotICogQnV0IGlmIHRoZSBwYXJz
ZXIgbGlicmFyeSBpcyB1cGdyYWRlZCB3aXRob3V0IHJlY29tcGlsaW5nIHRoZSBhcHBsaWNhdGlv
biwKLSAqIGl0IG1heSBiZSBhbiB1bmRlcmVzdGltYXRlLiAqLwotI2RlZmluZSBVUEJfSlNPTl9Q
QVJTRVJfU0laRSA0MTEyCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBQYXJzZXMgYW4gaW5j
b21pbmcgQnl0ZXNTdHJlYW0sIHB1c2hpbmcgdGhlIHJlc3VsdHMgdG8gdGhlIGRlc3RpbmF0aW9u
Ci0gKiBzaW5rLiAqLwotY2xhc3MgdXBiOjpqc29uOjpQYXJzZXIgewotIHB1YmxpYzoKLSAgc3Rh
dGljIFBhcnNlciogQ3JlYXRlKEVudmlyb25tZW50KiBlbnYsIGNvbnN0IFBhcnNlck1ldGhvZCog
bWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgU2luayogb3V0cHV0KTsKLQotICBCeXRl
c1NpbmsqIGlucHV0KCk7Ci0KLSBwcml2YXRlOgotICBVUEJfRElTQUxMT1dfUE9EX09QUyhQYXJz
ZXIsIHVwYjo6anNvbjo6UGFyc2VyKQotfTsKLQotY2xhc3MgdXBiOjpqc29uOjpQYXJzZXJNZXRo
b2QgewotIHB1YmxpYzoKLSAgLyogSW5jbHVkZSBiYXNlIG1ldGhvZHMgZnJvbSB1cGI6OlJlZmVy
ZW5jZUNvdW50ZWQuICovCi0gIFVQQl9SRUZDT1VOVEVEX0NQUE1FVEhPRFMKLQotICAvKiBSZXR1
cm5zIGhhbmRsZXJzIGZvciBwYXJzaW5nIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHNjaGVt
YS4gKi8KLSAgc3RhdGljIHJlZmZlZF9wdHI8Y29uc3QgUGFyc2VyTWV0aG9kPiBOZXcoY29uc3Qg
dXBiOjpNZXNzYWdlRGVmKiBtZCk7Ci0KLSAgLyogVGhlIGRlc3RpbmF0aW9uIGhhbmRsZXJzIHRo
YXQgYXJlIHN0YXRpY2FsbHkgYm91bmQgdG8gdGhpcyBtZXRob2QuCi0gICAqIFRoaXMgbWV0aG9k
IGlzIG9ubHkgY2FwYWJsZSBvZiBvdXRwdXR0aW5nIHRvIGEgc2luayB0aGF0IHVzZXMgdGhlc2UK
LSAgICogaGFuZGxlcnMuICovCi0gIGNvbnN0IEhhbmRsZXJzKiBkZXN0X2hhbmRsZXJzKCkgY29u
c3Q7Ci0KLSAgLyogVGhlIGlucHV0IGhhbmRsZXJzIGZvciB0aGlzIGRlY29kZXIgbWV0aG9kLiAq
LwotICBjb25zdCBCeXRlc0hhbmRsZXIqIGlucHV0X2hhbmRsZXIoKSBjb25zdDsKLQotIHByaXZh
dGU6Ci0gIFVQQl9ESVNBTExPV19QT0RfT1BTKFBhcnNlck1ldGhvZCwgdXBiOjpqc29uOjpQYXJz
ZXJNZXRob2QpCi19OwotCi0jZW5kaWYKLQotVVBCX0JFR0lOX0VYVEVSTl9DCi0KLXVwYl9qc29u
X3BhcnNlciogdXBiX2pzb25fcGFyc2VyX2NyZWF0ZSh1cGJfZW52KiBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwYl9qc29uX3BhcnNlcm1ldGhvZCog
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGJfc2luayogb3V0
cHV0KTsKLXVwYl9ieXRlc3NpbmsgKnVwYl9qc29uX3BhcnNlcl9pbnB1dCh1cGJfanNvbl9wYXJz
ZXIgKnApOwotCi11cGJfanNvbl9wYXJzZXJtZXRob2QqIHVwYl9qc29uX3BhcnNlcm1ldGhvZF9u
ZXcoY29uc3QgdXBiX21zZ2RlZiogbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogb3duZXIpOwotY29uc3QgdXBiX2hhbmRsZXJz
ICp1cGJfanNvbl9wYXJzZXJtZXRob2RfZGVzdGhhbmRsZXJzKAotICAgIGNvbnN0IHVwYl9qc29u
X3BhcnNlcm1ldGhvZCAqbSk7Ci1jb25zdCB1cGJfYnl0ZXNoYW5kbGVyICp1cGJfanNvbl9wYXJz
ZXJtZXRob2RfaW5wdXRoYW5kbGVyKAotICAgIGNvbnN0IHVwYl9qc29uX3BhcnNlcm1ldGhvZCAq
bSk7Ci0KLS8qIEluY2x1ZGUgcmVmY291bnRlZCBtZXRob2RzIGxpa2UgdXBiX2pzb25fcGFyc2Vy
bWV0aG9kX3JlZigpLiAqLwotVVBCX1JFRkNPVU5URURfQ01FVEhPRFModXBiX2pzb25fcGFyc2Vy
bWV0aG9kLCB1cGJfanNvbl9wYXJzZXJtZXRob2RfdXBjYXN0KQotCi1VUEJfRU5EX0VYVEVSTl9D
Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1uYW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBqc29u
IHsKLWlubGluZSBQYXJzZXIqIFBhcnNlcjo6Q3JlYXRlKEVudmlyb25tZW50KiBlbnYsIGNvbnN0
IFBhcnNlck1ldGhvZCogbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lu
ayogb3V0cHV0KSB7Ci0gIHJldHVybiB1cGJfanNvbl9wYXJzZXJfY3JlYXRlKGVudiwgbWV0aG9k
LCBvdXRwdXQpOwotfQotaW5saW5lIEJ5dGVzU2luayogUGFyc2VyOjppbnB1dCgpIHsKLSAgcmV0
dXJuIHVwYl9qc29uX3BhcnNlcl9pbnB1dCh0aGlzKTsKLX0KLQotaW5saW5lIGNvbnN0IEhhbmRs
ZXJzKiBQYXJzZXJNZXRob2Q6OmRlc3RfaGFuZGxlcnMoKSBjb25zdCB7Ci0gIHJldHVybiB1cGJf
anNvbl9wYXJzZXJtZXRob2RfZGVzdGhhbmRsZXJzKHRoaXMpOwotfQotaW5saW5lIGNvbnN0IEJ5
dGVzSGFuZGxlciogUGFyc2VyTWV0aG9kOjppbnB1dF9oYW5kbGVyKCkgY29uc3QgewotICByZXR1
cm4gdXBiX2pzb25fcGFyc2VybWV0aG9kX2lucHV0aGFuZGxlcih0aGlzKTsKLX0KLS8qIHN0YXRp
YyAqLwotaW5saW5lIHJlZmZlZF9wdHI8Y29uc3QgUGFyc2VyTWV0aG9kPiBQYXJzZXJNZXRob2Q6
Ok5ldygKLSAgICBjb25zdCBNZXNzYWdlRGVmKiBtZCkgewotICBjb25zdCB1cGJfanNvbl9wYXJz
ZXJtZXRob2QgKm0gPSB1cGJfanNvbl9wYXJzZXJtZXRob2RfbmV3KG1kLCAmbSk7Ci0gIHJldHVy
biByZWZmZWRfcHRyPGNvbnN0IFBhcnNlck1ldGhvZD4obSwgJm0pOwotfQotCi19ICAvKiBuYW1l
c3BhY2UganNvbiAqLwotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotCi0jZW5kaWYKLQotCi0jZW5k
aWYgIC8qIFVQQl9KU09OX1BBUlNFUl9IXyAqLwotLyoKLSoqIHVwYjo6anNvbjo6UHJpbnRlcgot
KioKLSoqIEhhbmRsZXJzIHRoYXQgZW1pdCBKU09OIGFjY29yZGluZyB0byBhIHNwZWNpZmljIHBy
b3RvYnVmIHNjaGVtYS4KLSovCi0KLSNpZm5kZWYgVVBCX0pTT05fVFlQRURfUFJJTlRFUl9IXwot
I2RlZmluZSBVUEJfSlNPTl9UWVBFRF9QUklOVEVSX0hfCi0KLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci1uYW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBqc29uIHsKLWNsYXNzIFByaW50ZXI7Ci19ICAv
KiBuYW1lc3BhY2UganNvbiAqLwotfSAgLyogbmFtZXNwYWNlIHVwYiAqLwotI2VuZGlmCi0KLVVQ
Ql9ERUNMQVJFX1RZUEUodXBiOjpqc29uOjpQcmludGVyLCB1cGJfanNvbl9wcmludGVyKQotCi0K
LS8qIHVwYjo6anNvbjo6UHJpbnRlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgVVBCX0pTT05fUFJJTlRFUl9TSVpF
IDE3NgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogUHJpbnRzIGFuIGluY29taW5nIHN0cmVh
bSBvZiBkYXRhIHRvIGEgQnl0ZXNTaW5rIGluIEpTT04gZm9ybWF0LiAqLwotY2xhc3MgdXBiOjpq
c29uOjpQcmludGVyIHsKLSBwdWJsaWM6Ci0gIHN0YXRpYyBQcmludGVyKiBDcmVhdGUoRW52aXJv
bm1lbnQqIGVudiwgY29uc3QgdXBiOjpIYW5kbGVycyogaGFuZGxlcnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgQnl0ZXNTaW5rKiBvdXRwdXQpOwotCi0gIC8qIFRoZSBpbnB1dCB0byB0aGUg
cHJpbnRlci4gKi8KLSAgU2luayogaW5wdXQoKTsKLQotICAvKiBSZXR1cm5zIGhhbmRsZXJzIGZv
ciBwcmludGluZyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBzY2hlbWEuCi0gICAqIElmIHBy
ZXNlcnZlX3Byb3RvX2ZpZWxkbmFtZXMgaXMgdHJ1ZSwgdGhlIG91dHB1dCBKU09OIHdpbGwgdXNl
IHRoZQotICAgKiBvcmlnaW5hbCAucHJvdG8gZmllbGQgbmFtZXMgKGllLiB7Im15X2ZpZWxkIjoz
fSkgaW5zdGVhZCBvZiB1c2luZwotICAgKiBjYW1lbENhc2VkIG5hbWVzLCB3aGljaCBpcyB0aGUg
ZGVmYXVsdDogKGVnLiB7Im15RmllbGQiOjN9KS4gKi8KLSAgc3RhdGljIHJlZmZlZF9wdHI8Y29u
c3QgSGFuZGxlcnM+IE5ld0hhbmRsZXJzKGNvbnN0IHVwYjo6TWVzc2FnZURlZiogbWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXNlcnZl
X3Byb3RvX2ZpZWxkbmFtZXMpOwotCi0gIHN0YXRpYyBjb25zdCBzaXplX3Qga1NpemUgPSBVUEJf
SlNPTl9QUklOVEVSX1NJWkU7Ci0KLSBwcml2YXRlOgotICBVUEJfRElTQUxMT1dfUE9EX09QUyhQ
cmludGVyLCB1cGI6Ompzb246OlByaW50ZXIpCi19OwotCi0jZW5kaWYKLQotVVBCX0JFR0lOX0VY
VEVSTl9DCi0KLS8qIE5hdGl2ZSBDIEFQSS4gKi8KLXVwYl9qc29uX3ByaW50ZXIgKnVwYl9qc29u
X3ByaW50ZXJfY3JlYXRlKHVwYl9lbnYgKmUsIGNvbnN0IHVwYl9oYW5kbGVycyAqaCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwYl9ieXRlc3NpbmsgKm91dHB1
dCk7Ci11cGJfc2luayAqdXBiX2pzb25fcHJpbnRlcl9pbnB1dCh1cGJfanNvbl9wcmludGVyICpw
KTsKLWNvbnN0IHVwYl9oYW5kbGVycyAqdXBiX2pzb25fcHJpbnRlcl9uZXdoYW5kbGVycyhjb25z
dCB1cGJfbXNnZGVmICptZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHByZXNlcnZlX2ZpZWxkbmFtZXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3duZXIpOwotCi1VUEJf
RU5EX0VYVEVSTl9DCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi1uYW1lc3BhY2UgdXBiIHsKLW5h
bWVzcGFjZSBqc29uIHsKLWlubGluZSBQcmludGVyKiBQcmludGVyOjpDcmVhdGUoRW52aXJvbm1l
bnQqIGVudiwgY29uc3QgdXBiOjpIYW5kbGVycyogaGFuZGxlcnMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJ5dGVzU2luayogb3V0cHV0KSB7Ci0gIHJldHVybiB1cGJfanNvbl9w
cmludGVyX2NyZWF0ZShlbnYsIGhhbmRsZXJzLCBvdXRwdXQpOwotfQotaW5saW5lIFNpbmsqIFBy
aW50ZXI6OmlucHV0KCkgeyByZXR1cm4gdXBiX2pzb25fcHJpbnRlcl9pbnB1dCh0aGlzKTsgfQot
aW5saW5lIHJlZmZlZF9wdHI8Y29uc3QgSGFuZGxlcnM+IFByaW50ZXI6Ok5ld0hhbmRsZXJzKAot
ICAgIGNvbnN0IHVwYjo6TWVzc2FnZURlZiAqbWQsIGJvb2wgcHJlc2VydmVfcHJvdG9fZmllbGRu
YW1lcykgewotICBjb25zdCBIYW5kbGVycyogaCA9IHVwYl9qc29uX3ByaW50ZXJfbmV3aGFuZGxl
cnMoCi0gICAgICBtZCwgcHJlc2VydmVfcHJvdG9fZmllbGRuYW1lcywgJmgpOwotICByZXR1cm4g
cmVmZmVkX3B0cjxjb25zdCBIYW5kbGVycz4oaCwgJmgpOwotfQotfSAgLyogbmFtZXNwYWNlIGpz
b24gKi8KLX0gIC8qIG5hbWVzcGFjZSB1cGIgKi8KLQotI2VuZGlmCi0KLSNlbmRpZiAgLyogVVBC
X0pTT05fVFlQRURfUFJJTlRFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2dvb2dsZS1wcm90b2J1
Zi5nZW1zcGVjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9ydWJ5L2dvb2dsZS1wcm90b2J1Zi5nZW1zcGVjCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjNTQyYWJmNmFiMDg3ZjNjNTU1Yzk5MDFjZTQ1ZDQ2NjVhMjRkZjNmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9nb29nbGUt
cHJvdG9idWYuZ2Vtc3BlYworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLUdlbTo6U3Bl
Y2lmaWNhdGlvbi5uZXcgZG8gfHN8Ci0gIHMubmFtZSAgICAgICAgPSAiZ29vZ2xlLXByb3RvYnVm
IgotICBzLnZlcnNpb24gICAgID0gIjMuMC4wLmFscGhhLjYuMC4wIgotICBzLmxpY2Vuc2VzICAg
ID0gWyJCU0QiXQotICBzLnN1bW1hcnkgICAgID0gIlByb3RvY29sIEJ1ZmZlcnMiCi0gIHMuZGVz
Y3JpcHRpb24gPSAiUHJvdG9jb2wgQnVmZmVycyBhcmUgR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQuIgotICBzLmhvbWVwYWdlICAgID0gImh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMiCi0gIHMuYXV0aG9ycyAgICAgPSBbIlByb3RvYnVmIEF1dGhv
cnMiXQotICBzLmVtYWlsICAgICAgID0gInByb3RvYnVmQGdvb2dsZWdyb3Vwcy5jb20iCi0gIHMu
cmVxdWlyZV9wYXRocyA9IFsibGliIl0KLSAgcy5maWxlcyAgICAgICA9IERpci5nbG9iKCdsaWIv
KiovKi5yYicpCi0gIGlmIFJVQllfUExBVEZPUk0gPT0gImphdmEiCi0gICAgcy5maWxlcyAgICAg
Kz0gWyJsaWIvZ29vZ2xlL3Byb3RvYnVmX2phdmEuamFyIl0KLSAgZWxzZQotICAgIHMuZmlsZXMg
ICAgICs9IERpci5nbG9iKCdleHQvKiovKicpCi0gICAgcy5leHRlbnNpb25zPSBbImV4dC9nb29n
bGUvcHJvdG9idWZfYy9leHRjb25mLnJiIl0KLSAgICBzLmFkZF9kZXZlbG9wbWVudF9kZXBlbmRl
bmN5ICJyYWtlLWNvbXBpbGVyLWRvY2siCi0gIGVuZAotICBzLnRlc3RfZmlsZXMgID0gWyJ0ZXN0
cy9iYXNpYy5yYiIsCi0gICAgICAgICAgICAgICAgICAidGVzdHMvc3RyZXNzLnJiIiwKLSAgICAg
ICAgICAgICAgICAgICJ0ZXN0cy9nZW5lcmF0ZWRfY29kZV90ZXN0LnJiIl0KLSAgcy5hZGRfZGV2
ZWxvcG1lbnRfZGVwZW5kZW5jeSAicmFrZS1jb21waWxlciIKLSAgcy5hZGRfZGV2ZWxvcG1lbnRf
ZGVwZW5kZW5jeSAidGVzdC11bml0IgotICBzLmFkZF9kZXZlbG9wbWVudF9kZXBlbmRlbmN5ICJy
dWJ5Z2Vtcy10YXNrcyIKLWVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2xpYi9nb29nbGUvcHJvdG9idWYu
cmIgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3J1YnkvbGliL2dvb2dsZS9wcm90b2J1Zi5yYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjJiZGQxYmYxYWYzMDU1MmExNzQ1ZTNkZGEzOTlmN2RlYjA4Y2NjZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvbGliL2dvb2dsZS9wcm90
b2J1Zi5yYgorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSMgUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0j
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyByZXF1aXJl
IG1peGlucyBiZWZvcmUgd2UgaG9vayB0aGVtIGludG8gdGhlIGphdmEgJiBjIGNvZGUKLXJlcXVp
cmUgJ2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlX2V4dHMnCi0KLSMgV2UgZGVmaW5lIHRoZXNlIGJl
Zm9yZSByZXF1aXJpbmcgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG1vZHVsZXMuCi0jIFRoYXQgd2F5
IHRoZSBtb2R1bGUgaW5pdCBjYW4gZ3JhYiByZWZlcmVuY2VzIHRvIHRoZXNlLgotbW9kdWxlIEdv
b2dsZQotICBtb2R1bGUgUHJvdG9idWYKLSAgICBjbGFzcyBFcnJvciA8IFN0YW5kYXJkRXJyb3I7
IGVuZAotICAgIGNsYXNzIFBhcnNlRXJyb3IgPCBFcnJvcjsgZW5kCi0gIGVuZAotZW5kCi0KLWlm
IFJVQllfUExBVEZPUk0gPT0gImphdmEiCi0gIHJlcXVpcmUgJ2pzb24nCi0gIHJlcXVpcmUgJ2dv
b2dsZS9wcm90b2J1Zl9qYXZhJwotZWxzZQotICBiZWdpbgotICAgIHJlcXVpcmUgImdvb2dsZS8j
e1JVQllfVkVSU0lPTi5zdWIoL1wuXGQkLywgJycpfS9wcm90b2J1Zl9jIgotICByZXNjdWUgTG9h
ZEVycm9yCi0gICAgcmVxdWlyZSAnZ29vZ2xlL3Byb3RvYnVmX2MnCi0gIGVuZAotZW5kCi0KLXJl
cXVpcmUgJ2dvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZCcKLQotbW9kdWxlIEdvb2dsZQot
ICBtb2R1bGUgUHJvdG9idWYKLQotICAgIGRlZiBzZWxmLmVuY29kZShtc2cpCi0gICAgICBtc2cu
dG9fcHJvdG8KLSAgICBlbmQKLQotICAgIGRlZiBzZWxmLmVuY29kZV9qc29uKG1zZykKLSAgICAg
IG1zZy50b19qc29uCi0gICAgZW5kCi0KLSAgICBkZWYgc2VsZi5kZWNvZGUoa2xhc3MsIHByb3Rv
KQotICAgICAga2xhc3MuZGVjb2RlKHByb3RvKQotICAgIGVuZAotCi0gICAgZGVmIHNlbGYuZGVj
b2RlX2pzb24oa2xhc3MsIGpzb24pCi0gICAgICBrbGFzcy5kZWNvZGVfanNvbihqc29uKQotICAg
IGVuZAotCi0gIGVuZAotZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvbGliL2dvb2dsZS9wcm90b2J1Zi9t
ZXNzYWdlX2V4dHMucmIgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3J1YnkvbGliL2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlX2V4dHMucmIK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMDI2NmJhMmYzNjM3ZDY1NWMyZGU4OWMy
ODU1NThjOTg3YzYxM2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9ydWJ5L2xpYi9nb29nbGUvcHJvdG9idWYvbWVzc2FnZV9leHRzLnJiCisrKyAvZGV2L251
bGwKQEAgLTEsNTMgKzAsMCBAQAotIyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0
cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tb2R1bGUgR29vZ2xlCi0gIG1vZHVsZSBQcm90
b2J1ZgotICAgIG1vZHVsZSBNZXNzYWdlRXh0cwotCi0gICAgICAjdGhpcyBpcyBvbmx5IGNhbGxl
ZCBpbiBqcnVieTsgbXJpIGxvYWRlcyB0aGUgQ2xhc3NNZXRob2RzIGRpZmZlcmVudGx5Ci0gICAg
ICBkZWYgc2VsZi5pbmNsdWRlZChrbGFzcykKLSAgICAgICAga2xhc3MuZXh0ZW5kKENsYXNzTWV0
aG9kcykKLSAgICAgIGVuZAotCi0gICAgICBtb2R1bGUgQ2xhc3NNZXRob2RzCi0gICAgICBlbmQK
LQotICAgICAgZGVmIHRvX2pzb24KLSAgICAgICAgc2VsZi5jbGFzcy5lbmNvZGVfanNvbihzZWxm
KQotICAgICAgZW5kCi0KLSAgICAgIGRlZiB0b19wcm90bwotICAgICAgICBzZWxmLmNsYXNzLmVu
Y29kZShzZWxmKQotICAgICAgZW5kCi0KLSAgICBlbmQKLSAgZW5kCi1lbmQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
cnVieS9saWIvZ29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLnJiIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2xpYi9nb29n
bGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQucmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBhZDIwNjBkNDMzMjkzZGVmZTRkMjgxYjgxMzcxNGM1MDIxYTEyODYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L2xpYi9nb29nbGUvcHJvdG9i
dWYvcmVwZWF0ZWRfZmllbGQucmIKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotIyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSMgQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0j
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi1yZXF1aXJlICdmb3J3YXJkYWJsZScKLQotIwotIyBUaGlzIGNsYXNzIG1ha2VzIFJlcGVh
dGVkRmllbGQgYWN0IChhbG1vc3QtKSBsaWtlIGEgUnVieSBBcnJheS4KLSMgSXQgaGFzIGNvbnZl
bmllbmNlIG1ldGhvZHMgdGhhdCBleHRlbmQgdGhlIGNvcmUgQyBvciBKYXZhIGJhc2VkCi0jIG1l
dGhvZHMuCi0jCi0jIFRoaXMgaXMgYSBiZXN0LWVmZm9ydCB0byBtaXJyb3IgQXJyYXkgYmVoYXZp
b3IuICBUd28gY29tbWVudHM6Ci0jICAxKSBwYXRjaGVzIGFsd2F5cyB3ZWxjb21lIDopCi0jICAy
KSBpZiBwZXJmb3JtYW5jZSBpcyBhbiBpc3N1ZSwgZmVlbCBmcmVlIHRvIHJld3JpdGUgdGhlIG1l
dGhvZAotIyAgICAgaW4ganJ1YnkgYW5kIEMuICBUaGUgc291cmNlIGNvZGUgaGFzIHBsZW50eSBv
ZiBleGFtcGxlcwotIwotIyBLTk9XTiBJU1NVRVMKLSMgICAtICNbXT0gZG9lc24ndCBhbGxvdyBs
ZXNzIHVzZWQgYXBwcm9hY2hlcyBzdWNoIGFzIGBhcnJbMSwgMl0gPSAnZml6eidgCi0jICAgLSAj
Y29uY2F0IHNob3VsZCByZXR1cm4gdGhlIG9yaWcgYXJyYXkKLSMgICAtICNwdXNoIHNob3VsZCBh
Y2NlcHQgbXVsdGlwbGUgYXJndW1lbnRzIGFuZCBwdXNoIHRoZW0gYWxsIGF0IHRoZSBzYW1lIHRp
bWUKLSMKLW1vZHVsZSBHb29nbGUKLSAgbW9kdWxlIFByb3RvYnVmCi0gICAgY2xhc3MgUmVwZWF0
ZWRGaWVsZAotICAgICAgZXh0ZW5kIEZvcndhcmRhYmxlCi0KLSAgICAgICMgbWV0aG9kcyBkZWZp
bmVkIGluIEMgb3IgSmF2YToKLSAgICAgICMgICArCi0gICAgICAjICAgW10sIGF0Ci0gICAgICAj
ICAgW109Ci0gICAgICAjICAgY29uY2F0Ci0gICAgICAjICAgY2xlYXIKLSAgICAgICMgICBkdXAs
IGNsb25lCi0gICAgICAjICAgZWFjaAotICAgICAgIyAgIHB1c2gsIDw8Ci0gICAgICAjICAgcmVw
bGFjZQotICAgICAgIyAgIGxlbmd0aCwgc2l6ZQotICAgICAgIyAgID09Ci0gICAgICAjICAgdG9f
YXJ5LCB0b19hCi0gICAgICAjICAgYWxzbyBhbGwgZW51bWVyYWJsZQotICAgICAgIwotICAgICAg
IyBOT1RFOiAgdXNpbmcgZGVsZWdhdG9ycyByYXRoZXIgdGhhbiBtZXRob2RfbWlzc2luZyB0byBt
YWtlIHRoZQotICAgICAgIyAgICAgICAgcmVsYXRpb25zaGlwIGV4cGxpY2l0IGluc3RlYWQgb2Yg
aW1wbGljaXQKLSAgICAgIGRlZl9kZWxlZ2F0b3JzIDp0b19hcnksCi0gICAgICAgIDomLCA6Kiwg
Oi0sIDonPD0+JywKLSAgICAgICAgOmFzc29jLCA6YnNlYXJjaCwgOmJzZWFyY2hfaW5kZXgsIDpj
b21iaW5hdGlvbiwgOmNvbXBhY3QsIDpjb3VudCwKLSAgICAgICAgOmN5Y2xlLCA6ZGlnLCA6ZHJv
cCwgOmRyb3Bfd2hpbGUsIDplcWw/LCA6ZmV0Y2gsIDpmaW5kX2luZGV4LCA6ZmxhdHRlbiwKLSAg
ICAgICAgOmluY2x1ZGU/LCA6aW5kZXgsIDppbnNwZWN0LCA6am9pbiwKLSAgICAgICAgOnBhY2ss
IDpwZXJtdXRhdGlvbiwgOnByb2R1Y3QsIDpwcmV0dHlfcHJpbnQsIDpwcmV0dHlfcHJpbnRfY3lj
bGUsCi0gICAgICAgIDpyYXNzb2MsIDpyZXBlYXRlZF9jb21iaW5hdGlvbiwgOnJlcGVhdGVkX3Bl
cm11dGF0aW9uLCA6cmV2ZXJzZSwKLSAgICAgICAgOnJpbmRleCwgOnJvdGF0ZSwgOnNhbXBsZSwg
OnNodWZmbGUsIDpzaGVsbGpvaW4sIDpzbGljZSwKLSAgICAgICAgOnRvX3MsIDp0cmFuc3Bvc2Us
IDp1bmlxLCA6fAotCi0KLSAgICAgIGRlZiBmaXJzdChuPW5pbCkKLSAgICAgICAgbiA/IHNlbGZb
MC4ubl0gOiBzZWxmWzBdCi0gICAgICBlbmQKLQotCi0gICAgICBkZWYgbGFzdChuPW5pbCkKLSAg
ICAgICAgbiA/IHNlbGZbKHNlbGYuc2l6ZS1uLTEpLi4tMV0gOiBzZWxmWy0xXQotICAgICAgZW5k
Ci0KLQotICAgICAgZGVmIHBvcChuPW5pbCkKLSAgICAgICAgaWYgbgotICAgICAgICAgIHJlc3Vs
dHMgPSBbXQotICAgICAgICAgIG4udGltZXN7IHJlc3VsdHMgPDwgcG9wX29uZSB9Ci0gICAgICAg
ICAgcmV0dXJuIHJlc3VsdHMKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBwb3Bfb25l
Ci0gICAgICAgIGVuZAotICAgICAgZW5kCi0KLQotICAgICAgZGVmIGVtcHR5PwotICAgICAgICBz
ZWxmLnNpemUgPT0gMAotICAgICAgZW5kCi0KLSAgICAgICMgYXJyYXkgYWxpYXNlcyBpbnRvIGVu
dW1lcmFibGUKLSAgICAgIGFsaWFzX21ldGhvZCA6ZWFjaF9pbmRleCwgOmVhY2hfd2l0aF9pbmRl
eAotICAgICAgYWxpYXNfbWV0aG9kIDpzbGljZSwgOltdCi0gICAgICBhbGlhc19tZXRob2QgOnZh
bHVlc19hdCwgOnNlbGVjdAotICAgICAgYWxpYXNfbWV0aG9kIDptYXAsIDpjb2xsZWN0Ci0KLQot
ICAgICAgY2xhc3MgPDwgc2VsZgotICAgICAgICBkZWYgZGVmaW5lX2FycmF5X3dyYXBwZXJfbWV0
aG9kKG1ldGhvZF9uYW1lKQotICAgICAgICAgIGRlZmluZV9tZXRob2QobWV0aG9kX25hbWUpIGRv
IHwqYXJncywgJmJsb2NrfAotICAgICAgICAgICAgYXJyID0gc2VsZi50b19hCi0gICAgICAgICAg
ICByZXN1bHQgPSBhcnIuc2VuZChtZXRob2RfbmFtZSwgKmFyZ3MpCi0gICAgICAgICAgICBzZWxm
LnJlcGxhY2UoYXJyKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBpZiByZXN1bHQKLSAgICAg
ICAgICAgIHJldHVybiBibG9jayA/IGJsb2NrLmNhbGwgOiByZXN1bHQKLSAgICAgICAgICBlbmQK
LSAgICAgICAgZW5kCi0gICAgICAgIHByaXZhdGUgOmRlZmluZV9hcnJheV93cmFwcGVyX21ldGhv
ZAotCi0KLSAgICAgICAgZGVmIGRlZmluZV9hcnJheV93cmFwcGVyX3dpdGhfcmVzdWx0X21ldGhv
ZChtZXRob2RfbmFtZSkKLSAgICAgICAgICBkZWZpbmVfbWV0aG9kKG1ldGhvZF9uYW1lKSBkbyB8
KmFyZ3MsICZibG9ja3wKLSAgICAgICAgICAgICMgcmVzdWx0IGNhbiBiZSBhbiBFbnVtZXJhdG9y
LCBBcnJheSwgb3IgbmlsCi0gICAgICAgICAgICAjIEVudW1lcmF0b3IgY2FuIHNvbWV0aW1lcyBi
ZSByZXR1cm5lZCBpZiBhIGJsb2NrIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IGFuZCBpdCBpcyBu
b3QgcGFzc2VkIGluCi0gICAgICAgICAgICAjIG5pbCB1c3VhbGx5IHNwZWNpZmllcyB0aGF0IG5v
IGNoYW5nZSB3YXMgbWFkZQotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50b19hLnNlbmQobWV0
aG9kX25hbWUsICphcmdzLCAmYmxvY2spCi0gICAgICAgICAgICBpZiByZXN1bHQKLSAgICAgICAg
ICAgICAgbmV3X2FyciA9IHJlc3VsdC50b19hCi0gICAgICAgICAgICAgIHNlbGYucmVwbGFjZShu
ZXdfYXJyKQotICAgICAgICAgICAgICBpZiByZXN1bHQuaXNfYT8oRW51bWVyYXRvcikKLSAgICAg
ICAgICAgICAgICAjIGdlbmVyYXRlIGEgZnJlc2ggZW51bTsgcmV3aW5kaW5nIHRoZSBleGl0aW5n
IG9uZSwgaW4gUnVieSAyLjIsIHdpbGwKLSAgICAgICAgICAgICAgICAjIHJlc2V0IHRoZSBlbnVt
IHdpdGggdGhlIHNhbWUgbGVuZ3RoLCBidXQgYWxsIHRoZSAjbmV4dCBjYWxscyB3aWxsCi0gICAg
ICAgICAgICAgICAgIyByZXR1cm4gbmlsCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3X2Fy
ci50b19lbnVtCi0gICAgICAgICAgICAgICAgIyBnZW5lcmF0ZSBhIHdyYXBwZXIgZW51bSBzbyBh
bnkgY2hhbmdlcyB3aGljaCBvY2N1ciBieSBhIGNoYWluZWQKLSAgICAgICAgICAgICAgICAjIGVu
dW0gY2FuIGJlIGNhcHR1cmVkCi0gICAgICAgICAgICAgICAgaWUgPSBQcm94eWluZ0VudW1lcmF0
b3IubmV3KHNlbGYsIHJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBpZS50b19lbnVt
Ci0gICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICByZXN1bHQK
LSAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgICAgIHByaXZhdGUgOmRlZmluZV9hcnJh
eV93cmFwcGVyX3dpdGhfcmVzdWx0X21ldGhvZAotICAgICAgZW5kCi0KLQotICAgICAgJXcoZGVs
ZXRlIGRlbGV0ZV9hdCBkZWxldGVfaWYgc2hpZnQgc2xpY2UhIHVuc2hpZnQpLmVhY2ggZG8gfG1l
dGhvZF9uYW1lfAotICAgICAgICBkZWZpbmVfYXJyYXlfd3JhcHBlcl9tZXRob2QobWV0aG9kX25h
bWUpCi0gICAgICBlbmQKLQotCi0gICAgICAldyhjb2xsZWN0ISBjb21wYWN0ISBmaWxsIGZsYXR0
ZW4hIGluc2VydCByZXZlcnNlIQotICAgICAgICByb3RhdGUhIHNlbGVjdCEgc2h1ZmZsZSEgc29y
dCEgc29ydF9ieSEgdW5pcSEpLmVhY2ggZG8gfG1ldGhvZF9uYW1lfAotICAgICAgICBkZWZpbmVf
YXJyYXlfd3JhcHBlcl93aXRoX3Jlc3VsdF9tZXRob2QobWV0aG9kX25hbWUpCi0gICAgICBlbmQK
LSAgICAgIGFsaWFzX21ldGhvZCA6a2VlcF9pZiwgOnNlbGVjdCEKLSAgICAgIGFsaWFzX21ldGhv
ZCA6bWFwISwgOmNvbGxlY3QhCi0gICAgICBhbGlhc19tZXRob2QgOnJlamVjdCEsIDpkZWxldGVf
aWYKLQotCi0gICAgICAjIHByb3BhZ2F0ZXMgY2hhbmdlcyBtYWRlIGJ5IHVzZXIgb2YgZW51bWVy
YXRvciBiYWNrIHRvIHRoZSBvcmlnaW5hbCByZXBlYXRlZCBmaWVsZC4KLSAgICAgICMgVGhpcyBv
bmx5IGFwcGxpZXMgaW4gY2FzZXMgd2hlcmUgdGhlIGNhbGxpbmcgZnVuY3Rpb24gd2hpY2ggY3Jl
YXRlZCB0aGUgZW51bWVyYXRvciwKLSAgICAgICMgc3VjaCBhcyAjc29ydCEsIG1vZGlmaWVzIGl0
c2VsZiByYXRoZXIgdGhhbiBhIG5ldyBhcnJheSwgc3VjaCBhcyAjc29ydAotICAgICAgY2xhc3Mg
UHJveHlpbmdFbnVtZXJhdG9yIDwgU3RydWN0Lm5ldyg6cmVwZWF0ZWRfZmllbGQsIDpleHRlcm5h
bF9lbnVtZXJhdG9yKQotICAgICAgICBkZWYgZWFjaCgqYXJncywgJmJsb2NrKQotICAgICAgICAg
IHJlc3VsdHMgPSBbXQotICAgICAgICAgIGV4dGVybmFsX2VudW1lcmF0b3IuZWFjaF93aXRoX2lu
ZGV4IGRvIHx2YWwsIGl8Ci0gICAgICAgICAgICByZXN1bHQgPSB5aWVsZCh2YWwpCi0gICAgICAg
ICAgICByZXN1bHRzIDw8IHJlc3VsdAotICAgICAgICAgICAgI25pbCBtZWFucyBubyBjaGFuZ2Ug
b2NjdXJlZCBmcm9tIHlpZWxkOyB1c3VhbGx5IG9jY3VycyB3aGVuICN0b19hIGlzIGNhbGxlZAot
ICAgICAgICAgICAgaWYgcmVzdWx0Ci0gICAgICAgICAgICAgIHJlcGVhdGVkX2ZpZWxkW2ldID0g
cmVzdWx0IGlmIHJlc3VsdCAhPSB2YWwKLSAgICAgICAgICAgIGVuZAotICAgICAgICAgIGVuZAot
ICAgICAgICAgIHJlc3VsdHMKLSAgICAgICAgZW5kCi0gICAgICBlbmQKLQotCi0gICAgZW5kCi0g
IGVuZAotZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvcG9tLnhtbCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9wb20ueG1sCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2JkNmQzMGMxZmRhMzY3NTRlZWU2YzczMmYxYWZlYjFl
NWUxMzJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVi
eS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBh
Y2hlLm9yZy9QT00vNC4wLjAiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJo
dHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcv
eHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJz
aW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlPC9ncm91cElkPgot
ICAgICAgPGFydGlmYWN0SWQ+Z29vZ2xlPC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MTwv
dmVyc2lvbj4KLSAgICA8L3BhcmVudD4KLQotICAgIDxncm91cElkPmNvbS5nb29nbGUucHJvdG9i
dWYuanJ1Ynk8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+cHJvdG9idWYtanJ1Ynk8L2FydGlm
YWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgIDxuYW1lPlBy
b3RvY29sIEJ1ZmZlciBKUnVieSBuYXRpdmUgZXh0ZW5zaW9uPC9uYW1lPgotICAgIDxkZXNjcmlw
dGlvbj4KLSAgICAgIFByb3RvY29sIEJ1ZmZlcnMgYXJlIGEgd2F5IG9mIGVuY29kaW5nIHN0cnVj
dHVyZWQgZGF0YSBpbiBhbiBlZmZpY2llbnQgeWV0Ci0gICAgICBleHRlbnNpYmxlIGZvcm1hdC4K
LSAgICA8L2Rlc2NyaXB0aW9uPgotICAgIDxpbmNlcHRpb25ZZWFyPjIwMTQ8L2luY2VwdGlvblll
YXI+Ci0gICAgPHVybD5odHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLzwvdXJsPgotICAgIDxsaWNlbnNlcz4KLSAgICAgIDxsaWNlbnNlPgotICAgICAgICA8bmFt
ZT5OZXcgQlNEIGxpY2Vuc2U8L25hbWU+Ci0gICAgICAgIDx1cmw+aHR0cDovL3d3dy5vcGVuc291
cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHA8L3VybD4KLSAgICAgICAgPGRpc3RyaWJ1
dGlvbj5yZXBvPC9kaXN0cmlidXRpb24+Ci0gICAgICA8L2xpY2Vuc2U+Ci0gICAgPC9saWNlbnNl
cz4KLSAgICA8c2NtPgotICAgICAgPHVybD5odHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3Rv
YnVmPC91cmw+Ci0gICAgICA8Y29ubmVjdGlvbj4KLSAgICAgICAgc2NtOmdpdDpodHRwczovL2dp
dGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmLmdpdAotICAgICAgPC9jb25uZWN0aW9uPgotICAgIDwv
c2NtPgotCi0gICAgPHByb3BlcnRpZXM+Ci0gICAgICAgIDxwcm9qZWN0LmJ1aWxkLnNvdXJjZUVu
Y29kaW5nPlVURi04PC9wcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPgotICAgICAgICA8cnVi
eS5zb3VyY2VzPmxpYi9nb29nbGU8L3J1Ynkuc291cmNlcz4KLSAgICAgICAgPGphci5maW5hbE5h
bWU+cHJvdG9idWZfamF2YTwvamFyLmZpbmFsTmFtZT4KLSAgICA8L3Byb3BlcnRpZXM+Ci0gICAg
PGJ1aWxkPgotICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAg
ICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAg
ICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFzc2VtYmx5LXBsdWdpbjwvYXJ0aWZhY3RJ
ZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAg
PGZpbmFsTmFtZT4ke2phci5maW5hbE5hbWV9PC9maW5hbE5hbWU+Ci0gICAgICAgICAgICAgICAg
ICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtydWJ5LnNvdXJjZXN9PC9vdXRwdXREaXJlY3Rvcnk+Ci0g
ICAgICAgICAgICAgICAgICAgIDxhcHBlbmRBc3NlbWJseUlkPmZhbHNlPC9hcHBlbmRBc3NlbWJs
eUlkPgotICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvclJlZnM+Ci0gICAgICAgICAgICAg
ICAgICAgICAgICA8ZGVzY3JpcHRvclJlZj5qYXItd2l0aC1kZXBlbmRlbmNpZXM8L2Rlc2NyaXB0
b3JSZWY+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGVzY3JpcHRvclJlZnM+Ci0gICAgICAgICAg
ICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgotICAg
ICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlk
Pm1ha2UtYXNzZW1ibHk8L2lkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2th
Z2U8L3BoYXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxnb2FsPnNpbmdsZTwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAg
ICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAg
PHBsdWdpbj4KLSAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5z
PC9ncm91cElkPgotICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVn
aW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAg
ICAgICAgIDxzb3VyY2U+MS42PC9zb3VyY2U+Ci0gICAgICAgICAgICAgICAgPHRhcmdldD4xLjY8
L3RhcmdldD4KLSAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9w
bHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotICAgIDxkZXBlbmRlbmNp
ZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmZhc3Rl
cnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNr
c29uLWNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjQuMzwvdmVyc2lv
bj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAg
ICAgIDxncm91cElkPm9yZy5qcnVieTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElk
PmpydWJ5LWNvbXBsZXRlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS43LjEz
PC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KLSAgICAgICAg
PC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElk
PmNvbS5nb29nbGUucHJvdG9idWY8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5w
cm90b2J1Zi1qYXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+My4wLjAtYWxw
aGEtMzwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVz
PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9w
cm90b2J1Zi9qcnVieS9SdWJ5QnVpbGRlci5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWluL2phdmEvY29tL2dv
b2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5QnVpbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1YWRkYWU1OGRhZDdmZDYzMzZlMzBlN2MzN2M4NGY2YTAyMGU3Nzk3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9q
YXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieUJ1aWxkZXIuamF2YQorKysgL2Rldi9u
dWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0gKiBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5OwotCi1pbXBvcnQg
b3JnLmpydWJ5Lio7Ci1pbXBvcnQgb3JnLmpydWJ5LmFubm8uSlJ1YnlDbGFzczsKLWltcG9ydCBv
cmcuanJ1YnkuYW5uby5KUnVieU1ldGhvZDsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS4qOwot
aW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLmJ1aWx0aW4uSVJ1YnlPYmplY3Q7Ci0KLUBKUnVieUNs
YXNzKG5hbWUgPSAiQnVpbGRlciIpCi1wdWJsaWMgY2xhc3MgUnVieUJ1aWxkZXIgZXh0ZW5kcyBS
dWJ5T2JqZWN0IHsKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlUnVieUJ1aWxkZXIoUnVi
eSBydW50aW1lKSB7Ci0gICAgICAgIFJ1YnlNb2R1bGUgcHJvdG9idWYgPSBydW50aW1lLmdldENs
YXNzRnJvbVBhdGgoIkdvb2dsZTo6UHJvdG9idWYiKTsKLSAgICAgICAgUnVieUNsYXNzIGNCdWls
ZGVyID0gcHJvdG9idWYuZGVmaW5lQ2xhc3NVbmRlcigiQnVpbGRlciIsIHJ1bnRpbWUuZ2V0T2Jq
ZWN0KCksIG5ldyBPYmplY3RBbGxvY2F0b3IoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAg
ICAgICAgICAgIHB1YmxpYyBJUnVieU9iamVjdCBhbGxvY2F0ZShSdWJ5IHJ1bnRpbWUsIFJ1YnlD
bGFzcyBrbGF6eikgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVieUJ1aWxkZXIocnVu
dGltZSwga2xhenopOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgY0J1aWxk
ZXIuZGVmaW5lQW5ub3RhdGVkTWV0aG9kcyhSdWJ5QnVpbGRlci5jbGFzcyk7Ci0gICAgfQotCi0g
ICAgcHVibGljIFJ1YnlCdWlsZGVyKFJ1YnkgcnVudGltZSwgUnVieUNsYXNzIG1ldGFDbGFzcykg
ewotICAgICAgICBzdXBlcihydW50aW1lLCBtZXRhQ2xhc3MpOwotICAgICAgICB0aGlzLmNEZXNj
cmlwdG9yID0gKFJ1YnlDbGFzcykgcnVudGltZS5nZXRDbGFzc0Zyb21QYXRoKCJHb29nbGU6OlBy
b3RvYnVmOjpEZXNjcmlwdG9yIik7Ci0gICAgICAgIHRoaXMuY0VudW1EZXNjcmlwdG9yID0gKFJ1
YnlDbGFzcykgcnVudGltZS5nZXRDbGFzc0Zyb21QYXRoKCJHb29nbGU6OlByb3RvYnVmOjpFbnVt
RGVzY3JpcHRvciIpOwotICAgICAgICB0aGlzLmNNZXNzYWdlQnVpbGRlckNvbnRleHQgPSAoUnVi
eUNsYXNzKSBydW50aW1lLmdldENsYXNzRnJvbVBhdGgoIkdvb2dsZTo6UHJvdG9idWY6Ok1lc3Nh
Z2VCdWlsZGVyQ29udGV4dCIpOwotICAgICAgICB0aGlzLmNFbnVtQnVpbGRlckNvbnRleHQgPSAo
UnVieUNsYXNzKSBydW50aW1lLmdldENsYXNzRnJvbVBhdGgoIkdvb2dsZTo6UHJvdG9idWY6OkVu
dW1CdWlsZGVyQ29udGV4dCIpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0g
ICAgICogICAgIEJ1aWxkZXIubmV3ID0+IGJ1aWxkZXIKLSAgICAgKgotICAgICAqIENyZWF0ZXMg
YSBuZXcgQnVpbGRlci4gQSBCdWlsZGVyIGNhbiBhY2N1bXVsYXRlIGEgc2V0IG9mIG5ldyBtZXNz
YWdlIGFuZCBlbnVtCi0gICAgICogZGVzY3JpcHRvcnMgYW5kIGF0b21pY2FsbHkgcmVnaXN0ZXIg
dGhlbSBpbnRvIGEgcG9vbCBpbiBhIHdheSB0aGF0IGFsbG93cyBmb3IKLSAgICAgKiAoY28pcmVj
dXJzaXZlIHR5cGUgcmVmZXJlbmNlcy4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QKLSAgICBw
dWJsaWMgSVJ1YnlPYmplY3QgaW5pdGlhbGl6ZShUaHJlYWRDb250ZXh0IGNvbnRleHQpIHsKLSAg
ICAgICAgUnVieSBydW50aW1lID0gY29udGV4dC5ydW50aW1lOwotICAgICAgICB0aGlzLnBlbmRp
bmdMaXN0ID0gcnVudGltZS5uZXdBcnJheSgpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9
Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBCdWlsZGVyLmFkZF9tZXNz
YWdlKG5hbWUsICZibG9jaykKLSAgICAgKgotICAgICAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IGRl
c2NyaXB0b3Igd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYW5kIGludm9rZXMgdGhlIGJsb2NrIGluCi0g
ICAgICogdGhlIGNvbnRleHQgb2YgYSBNZXNzYWdlQnVpbGRlckNvbnRleHQgb24gdGhhdCBkZXNj
cmlwdG9yLiBUaGUgYmxvY2sgY2FuIHRoZW4KLSAgICAgKiBjYWxsLCBlLmcuLCBNZXNzYWdlQnVp
bGRlckNvbnRleHQjb3B0aW9uYWwgYW5kIE1lc3NhZ2VCdWlsZGVyQ29udGV4dCNyZXBlYXRlZAot
ICAgICAqIG1ldGhvZHMgdG8gZGVmaW5lIHRoZSBtZXNzYWdlIGZpZWxkcy4KLSAgICAgKgotICAg
ICAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkLCBpZGlvbWF0aWMgd2F5IHRvIGJ1aWxkIG1lc3Nh
Z2UgZGVmaW5pdGlvbnMuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kKG5hbWUgPSAiYWRkX21l
c3NhZ2UiKQotICAgIHB1YmxpYyBJUnVieU9iamVjdCBhZGRNZXNzYWdlKFRocmVhZENvbnRleHQg
Y29udGV4dCwgSVJ1YnlPYmplY3QgbmFtZSwgQmxvY2sgYmxvY2spIHsKLSAgICAgICAgUnVieURl
c2NyaXB0b3IgbXNnZGVmID0gKFJ1YnlEZXNjcmlwdG9yKSBjRGVzY3JpcHRvci5uZXdJbnN0YW5j
ZShjb250ZXh0LCBCbG9jay5OVUxMX0JMT0NLKTsKLSAgICAgICAgSVJ1YnlPYmplY3QgY3R4ID0g
Y01lc3NhZ2VCdWlsZGVyQ29udGV4dC5uZXdJbnN0YW5jZShjb250ZXh0LCBtc2dkZWYsIHRoaXMs
IEJsb2NrLk5VTExfQkxPQ0spOwotICAgICAgICBtc2dkZWYuc2V0TmFtZShjb250ZXh0LCBuYW1l
KTsKLSAgICAgICAgaWYgKGJsb2NrLmlzR2l2ZW4oKSkgewotICAgICAgICAgICAgaWYgKGJsb2Nr
LmFyaXR5KCkgPT0gQXJpdHkuT05FX0FSR1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgYmxvY2su
eWllbGQoY29udGV4dCwgY3R4KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgQmluZGluZyBiaW5kaW5nID0gYmxvY2suZ2V0QmluZGluZygpOwotICAgICAgICAgICAgICAg
IGJpbmRpbmcuc2V0U2VsZihjdHgpOwotICAgICAgICAgICAgICAgIGJsb2NrLnlpZWxkU3BlY2lm
aWMoY29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5wZW5k
aW5nTGlzdC5hZGQobXNnZGVmKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQucnVudGltZS5nZXRO
aWwoKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBCdWls
ZGVyLmFkZF9lbnVtKG5hbWUsICZibG9jaykKLSAgICAgKgotICAgICAqIENyZWF0ZXMgYSBuZXcs
IGVtcHR5IGVudW0gZGVzY3JpcHRvciB3aXRoIHRoZSBnaXZlbiBuYW1lLCBhbmQgaW52b2tlcyB0
aGUgYmxvY2sgaW4KLSAgICAgKiB0aGUgY29udGV4dCBvZiBhbiBFbnVtQnVpbGRlckNvbnRleHQg
b24gdGhhdCBkZXNjcmlwdG9yLiBUaGUgYmxvY2sgY2FuIHRoZW4KLSAgICAgKiBjYWxsIEVudW1C
dWlsZGVyQ29udGV4dCNhZGRfdmFsdWUgdG8gZGVmaW5lIHRoZSBlbnVtIHZhbHVlcy4KLSAgICAg
KgotICAgICAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkLCBpZGlvbWF0aWMgd2F5IHRvIGJ1aWxk
IGVudW0gZGVmaW5pdGlvbnMuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kKG5hbWUgPSAiYWRk
X2VudW0iKQotICAgIHB1YmxpYyBJUnVieU9iamVjdCBhZGRFbnVtKFRocmVhZENvbnRleHQgY29u
dGV4dCwgSVJ1YnlPYmplY3QgbmFtZSwgQmxvY2sgYmxvY2spIHsKLSAgICAgICAgUnVieUVudW1E
ZXNjcmlwdG9yIGVudW1EZWYgPSAoUnVieUVudW1EZXNjcmlwdG9yKSBjRW51bURlc2NyaXB0b3Iu
bmV3SW5zdGFuY2UoY29udGV4dCwgQmxvY2suTlVMTF9CTE9DSyk7Ci0gICAgICAgIElSdWJ5T2Jq
ZWN0IGN0eCA9IGNFbnVtQnVpbGRlckNvbnRleHQubmV3SW5zdGFuY2UoY29udGV4dCwgZW51bURl
ZiwgQmxvY2suTlVMTF9CTE9DSyk7Ci0gICAgICAgIGVudW1EZWYuc2V0TmFtZShjb250ZXh0LCBu
YW1lKTsKLQotICAgICAgICBpZiAoYmxvY2suaXNHaXZlbigpKSB7Ci0gICAgICAgICAgICBpZiAo
YmxvY2suYXJpdHkoKSA9PSBBcml0eS5PTkVfQVJHVU1FTlQpIHsKLSAgICAgICAgICAgICAgICBi
bG9jay55aWVsZChjb250ZXh0LCBjdHgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSBibG9jay5nZXRCaW5kaW5nKCk7Ci0gICAgICAgICAg
ICAgICAgYmluZGluZy5zZXRTZWxmKGN0eCk7Ci0gICAgICAgICAgICAgICAgYmxvY2sueWllbGRT
cGVjaWZpYyhjb250ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRo
aXMucGVuZGluZ0xpc3QuYWRkKGVudW1EZWYpOwotICAgICAgICByZXR1cm4gY29udGV4dC5ydW50
aW1lLmdldE5pbCgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICog
ICAgIEJ1aWxkZXIuZmluYWxpemVfdG9fcG9vbChwb29sKQotICAgICAqCi0gICAgICogQWRkcyBh
bGwgYWNjdW11bGF0ZWQgbWVzc2FnZSBhbmQgZW51bSBkZXNjcmlwdG9ycyBjcmVhdGVkIGluIHRo
aXMgYnVpbGRlcgotICAgICAqIGNvbnRleHQgdG8gdGhlIGdpdmVuIHBvb2wuIFRoZSBvcGVyYXRp
b24gb2NjdXJzIGF0b21pY2FsbHksIGFuZCBhbGwKLSAgICAgKiBkZXNjcmlwdG9ycyBjYW4gcmVm
ZXIgdG8gZWFjaCBvdGhlciAoaW5jbHVkaW5nIGluIGN5Y2xlcykuIFRoaXMgaXMgdGhlIG9ubHkK
LSAgICAgKiB3YXkgdG8gYnVpbGQgKGNvKXJlY3Vyc2l2ZSBtZXNzYWdlIGRlZmluaXRpb25zLgot
ICAgICAqCi0gICAgICogVGhpcyBtZXRob2QgaXMgdXN1YWxseSBjYWxsZWQgYXV0b21hdGljYWxs
eSBieSBEZXNjcmlwdG9yUG9vbCNidWlsZCBhZnRlciBpdAotICAgICAqIGludm9rZXMgdGhlIGdp
dmVuIHVzZXIgYmxvY2sgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJ1aWxkZXIuIFRoZSB1c2VyIHNo
b3VsZAotICAgICAqIG5vdCBub3JtYWxseSBuZWVkIHRvIGNhbGwgdGhpcyBtYW51YWxseSBiZWNh
dXNlIGEgQnVpbGRlciBpcyBub3Qgbm9ybWFsbHkKLSAgICAgKiBjcmVhdGVkIG1hbnVhbGx5Lgot
ICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gImZpbmFsaXplX3RvX3Bvb2wiKQotICAg
IHB1YmxpYyBJUnVieU9iamVjdCBmaW5hbGl6ZVRvUG9vbChUaHJlYWRDb250ZXh0IGNvbnRleHQs
IElSdWJ5T2JqZWN0IHJiUG9vbCkgewotICAgICAgICBSdWJ5RGVzY3JpcHRvclBvb2wgcG9vbCA9
IChSdWJ5RGVzY3JpcHRvclBvb2wpIHJiUG9vbDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0aGlzLnBlbmRpbmdMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBJUnVieU9iamVj
dCBkZWZSYiA9IHRoaXMucGVuZGluZ0xpc3QuZW50cnkoaSk7Ci0gICAgICAgICAgICBpZiAoZGVm
UmIgaW5zdGFuY2VvZiBSdWJ5RGVzY3JpcHRvcikgewotICAgICAgICAgICAgICAgIHBvb2wuYWRk
VG9TeW10YWIoY29udGV4dCwgKFJ1YnlEZXNjcmlwdG9yKSBkZWZSYik7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHBvb2wuYWRkVG9TeW10YWIoY29udGV4dCwgKFJ1YnlF
bnVtRGVzY3JpcHRvcikgZGVmUmIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHRoaXMucGVuZGluZ0xpc3QgPSBjb250ZXh0LnJ1bnRpbWUubmV3QXJyYXkoKTsKLSAgICAgICAg
cmV0dXJuIGNvbnRleHQucnVudGltZS5nZXROaWwoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQg
UnVieUFycmF5IHBlbmRpbmdMaXN0OwotICAgIHByaXZhdGUgUnVieUNsYXNzIGNEZXNjcmlwdG9y
LCBjRW51bURlc2NyaXB0b3IsIGNNZXNzYWdlQnVpbGRlckNvbnRleHQsIGNFbnVtQnVpbGRlckNv
bnRleHQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL2pydWJ5L1J1YnlEZXNjcmlwdG9yLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlEZXNjcmlwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGRkOTE3OWIwMzAwYzlhZWYwODRiMDg3ODVhNmMyODE3Mzc4MzkzY2EuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWlu
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5RGVzY3JpcHRvci5qYXZhCisrKyAv
ZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSAqIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWYuanJ1Ynk7Ci0KLWlt
cG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b3M7Ci1pbXBvcnQgY29tLmdv
b2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yczsKLWltcG9ydCBvcmcuanJ1YnkuKjsKLWltcG9ydCBv
cmcuanJ1YnkuYW5uby5KUnVieUNsYXNzOwotaW1wb3J0IG9yZy5qcnVieS5hbm5vLkpSdWJ5TWV0
aG9kOwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLkJsb2NrOwotaW1wb3J0IG9yZy5qcnVieS5y
dW50aW1lLk9iamVjdEFsbG9jYXRvcjsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5UaHJlYWRD
b250ZXh0OwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLmJ1aWx0aW4uSVJ1YnlPYmplY3Q7Ci0K
LWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0KLUBK
UnVieUNsYXNzKG5hbWUgPSAiRGVzY3JpcHRvciIsIGluY2x1ZGUgPSAiRW51bWVyYWJsZSIpCi1w
dWJsaWMgY2xhc3MgUnVieURlc2NyaXB0b3IgZXh0ZW5kcyBSdWJ5T2JqZWN0IHsKLSAgICBwdWJs
aWMgc3RhdGljIHZvaWQgY3JlYXRlUnVieURlc2NyaXB0b3IoUnVieSBydW50aW1lKSB7Ci0gICAg
ICAgIFJ1YnlNb2R1bGUgcHJvdG9idWYgPSBydW50aW1lLmdldENsYXNzRnJvbVBhdGgoIkdvb2ds
ZTo6UHJvdG9idWYiKTsKLSAgICAgICAgUnVieUNsYXNzIGNEZXNjcmlwdG9yID0gcHJvdG9idWYu
ZGVmaW5lQ2xhc3NVbmRlcigiRGVzY3JpcHRvciIsIHJ1bnRpbWUuZ2V0T2JqZWN0KCksIG5ldyBP
YmplY3RBbGxvY2F0b3IoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1
YmxpYyBJUnVieU9iamVjdCBhbGxvY2F0ZShSdWJ5IHJ1bnRpbWUsIFJ1YnlDbGFzcyBrbGF6eikg
ewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVieURlc2NyaXB0b3IocnVudGltZSwga2xh
enopOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgY0Rlc2NyaXB0b3IuaW5j
bHVkZU1vZHVsZShydW50aW1lLmdldEVudW1lcmFibGUoKSk7Ci0gICAgICAgIGNEZXNjcmlwdG9y
LmRlZmluZUFubm90YXRlZE1ldGhvZHMoUnVieURlc2NyaXB0b3IuY2xhc3MpOwotICAgIH0KLQot
ICAgIHB1YmxpYyBSdWJ5RGVzY3JpcHRvcihSdWJ5IHJ1bnRpbWUsIFJ1YnlDbGFzcyBrbGF6eikg
ewotICAgICAgICBzdXBlcihydW50aW1lLCBrbGF6eik7Ci0gICAgfQotCi0gICAgLyoKLSAgICAg
KiBjYWxsLXNlcToKLSAgICAgKiAgICAgRGVzY3JpcHRvci5uZXcgPT4gZGVzY3JpcHRvcgotICAg
ICAqCi0gICAgICogQ3JlYXRlcyBhIG5ldywgZW1wdHksIG1lc3NhZ2UgdHlwZSBkZXNjcmlwdG9y
LiBBdCBhIG1pbmltdW0sIGl0cyBuYW1lIG11c3QgYmUKLSAgICAgKiBzZXQgYmVmb3JlIGl0IGlz
IGFkZGVkIHRvIGEgcG9vbC4gSXQgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRlIG1lc3NhZ2VzIHVu
dGlsCi0gICAgICogaXQgaXMgYWRkZWQgdG8gYSBwb29sLCBhZnRlciB3aGljaCBpdCBiZWNvbWVz
IGltbXV0YWJsZSAoYXMgcGFydCBvZiBhCi0gICAgICogZmluYWxpemF0aW9uIHByb2Nlc3MpLgot
ICAgICAqLwotICAgIEBKUnVieU1ldGhvZAotICAgIHB1YmxpYyBJUnVieU9iamVjdCBpbml0aWFs
aXplKFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAgICAgICB0aGlzLmJ1aWxkZXIgPSBEZXNj
cmlwdG9yUHJvdG9zLkRlc2NyaXB0b3JQcm90by5uZXdCdWlsZGVyKCk7Ci0gICAgICAgIHRoaXMu
ZmllbGREZWZNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFJ1YnlGaWVsZERlc2NyaXB0b3I+KCk7
Ci0gICAgICAgIHRoaXMub25lb2ZEZWZzID0gbmV3IEhhc2hNYXA8SVJ1YnlPYmplY3QsIFJ1YnlP
bmVvZkRlc2NyaXB0b3I+KCk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8q
Ci0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIERlc2NyaXB0b3IubmFtZSA9PiBuYW1lCi0g
ICAgICoKLSAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgbWVzc2FnZSB0eXBlIGFzIGEg
ZnVsbHktcXVhbGZpZWQgc3RyaW5nIChlLmcuLAotICAgICAqIE15LlBhY2thZ2UuTWVzc2FnZVR5
cGUpLgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gIm5hbWUiKQotICAgIHB1Ymxp
YyBJUnVieU9iamVjdCBnZXROYW1lKFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAgICAgICBy
ZXR1cm4gdGhpcy5uYW1lOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAg
ICogICAgRGVzY3JpcHRvci5uYW1lID0gbmFtZQotICAgICAqCi0gICAgICogQXNzaWducyBhIG5h
bWUgdG8gdGhpcyBtZXNzYWdlIHR5cGUuIFRoZSBkZXNjcmlwdG9yIG11c3Qgbm90IGhhdmUgYmVl
biBhZGRlZAotICAgICAqIHRvIGEgcG9vbCB5ZXQuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9k
KG5hbWUgPSAibmFtZT0iKQotICAgIHB1YmxpYyBJUnVieU9iamVjdCBzZXROYW1lKFRocmVhZENv
bnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3QgbmFtZSkgewotICAgICAgICB0aGlzLm5hbWUgPSBu
YW1lOwotICAgICAgICB0aGlzLmJ1aWxkZXIuc2V0TmFtZShVdGlscy5lc2NhcGVJZGVudGlmaWVy
KHRoaXMubmFtZS5hc0phdmFTdHJpbmcoKSkpOwotICAgICAgICByZXR1cm4gY29udGV4dC5ydW50
aW1lLmdldE5pbCgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICog
ICAgIERlc2NyaXB0b3IuYWRkX2ZpZWxkKGZpZWxkKSA9PiBuaWwKLSAgICAgKgotICAgICAqIEFk
ZHMgdGhlIGdpdmVuIEZpZWxkRGVzY3JpcHRvciB0byB0aGlzIG1lc3NhZ2UgdHlwZS4gVGhlIGRl
c2NyaXB0b3IgbXVzdCBub3QKLSAgICAgKiBoYXZlIGJlZW4gYWRkZWQgdG8gYSBwb29sIHlldC4g
UmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiBhIGZpZWxkIHdpdGggdGhlIHNhbWUKLSAgICAgKiBuYW1l
IG9yIG51bWJlciBhbHJlYWR5IGV4aXN0cy4gU3ViLXR5cGUgcmVmZXJlbmNlcyAoZS5nLiBmb3Ig
ZmllbGRzIG9mIHR5cGUKLSAgICAgKiBtZXNzYWdlKSBhcmUgbm90IHJlc29sdmVkIGF0IHRoaXMg
cG9pbnQuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kKG5hbWUgPSAiYWRkX2ZpZWxkIikKLSAg
ICBwdWJsaWMgSVJ1YnlPYmplY3QgYWRkRmllbGQoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVi
eU9iamVjdCBvYmopIHsKLSAgICAgICAgUnVieUZpZWxkRGVzY3JpcHRvciBmaWVsZERlZiA9IChS
dWJ5RmllbGREZXNjcmlwdG9yKSBvYmo7Ci0gICAgICAgIHRoaXMuZmllbGREZWZNYXAucHV0KGZp
ZWxkRGVmLmdldE5hbWUoY29udGV4dCkuYXNKYXZhU3RyaW5nKCksIGZpZWxkRGVmKTsKLSAgICAg
ICAgdGhpcy5idWlsZGVyLmFkZEZpZWxkKGZpZWxkRGVmLmJ1aWxkKCkpOwotICAgICAgICByZXR1
cm4gY29udGV4dC5ydW50aW1lLmdldE5pbCgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2Fs
bC1zZXE6Ci0gICAgICogICAgIERlc2NyaXB0b3IubG9va3VwKG5hbWUpID0+IEZpZWxkRGVzY3Jp
cHRvcgotICAgICAqCi0gICAgICogUmV0dXJucyB0aGUgZmllbGQgZGVzY3JpcHRvciBmb3IgdGhl
IGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUsIGlmIHByZXNlbnQsCi0gICAgICogb3IgbmlsIGlm
IG5vbmUuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0
IGxvb2t1cChUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IGZpZWxkTmFtZSkgewot
ICAgICAgICByZXR1cm4gdGhpcy5maWVsZERlZk1hcC5nZXQoZmllbGROYW1lLmFzSmF2YVN0cmlu
ZygpKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBEZXNj
cmlwdG9yLm1zZ2NsYXNzID0+IG1lc3NhZ2Vfa2xhc3MKLSAgICAgKgotICAgICAqIFJldHVybnMg
dGhlIFJ1YnkgY2xhc3MgY3JlYXRlZCBmb3IgdGhpcyBtZXNzYWdlIHR5cGUuIFZhbGlkIG9ubHkg
b25jZSB0aGUKLSAgICAgKiBtZXNzYWdlIHR5cGUgaGFzIGJlZW4gYWRkZWQgdG8gYSBwb29sLgot
ICAgICAqLwotICAgIEBKUnVieU1ldGhvZAotICAgIHB1YmxpYyBJUnVieU9iamVjdCBtc2djbGFz
cyhUaHJlYWRDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgaWYgKHRoaXMua2xhenogPT0gbnVs
bCkgewotICAgICAgICAgICAgdGhpcy5rbGF6eiA9IGJ1aWxkQ2xhc3NGcm9tRGVzY3JpcHRvcihj
b250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5rbGF6ejsKLSAgICB9Ci0K
LSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBEZXNjcmlwdG9yLmVhY2goJmJs
b2NrKQotICAgICAqCi0gICAgICogSXRlcmF0ZXMgb3ZlciBmaWVsZHMgaW4gdGhpcyBtZXNzYWdl
IHR5cGUsIHlpZWxkaW5nIHRvIHRoZSBibG9jayBvbiBlYWNoIG9uZS4KLSAgICAgKi8KLSAgICBA
SlJ1YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgZWFjaChUaHJlYWRDb250ZXh0IGNv
bnRleHQsIEJsb2NrIGJsb2NrKSB7Ci0gICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgUnVi
eUZpZWxkRGVzY3JpcHRvcj4gZW50cnkgOiBmaWVsZERlZk1hcC5lbnRyeVNldCgpKSB7Ci0gICAg
ICAgICAgICBibG9jay55aWVsZChjb250ZXh0LCBlbnRyeS5nZXRWYWx1ZSgpKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLmdldE5pbCgpOwotICAgIH0KLQotICAg
IC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIERlc2NyaXB0b3IuYWRkX29uZW9mKG9u
ZW9mKSA9PiBuaWwKLSAgICAgKgotICAgICAqIEFkZHMgdGhlIGdpdmVuIE9uZW9mRGVzY3JpcHRv
ciB0byB0aGlzIG1lc3NhZ2UgdHlwZS4gVGhpcyBkZXNjcmlwdG9yIG11c3Qgbm90Ci0gICAgICog
aGF2ZSBiZWVuIGFkZGVkIHRvIGEgcG9vbCB5ZXQuIFJhaXNlcyBhbiBleGNlcHRpb24gaWYgYSBv
bmVvZiB3aXRoIHRoZSBzYW1lCi0gICAgICogbmFtZSBhbHJlYWR5IGV4aXN0cywgb3IgaWYgYW55
IG9mIHRoZSBvbmVvZidzIGZpZWxkcycgbmFtZXMgb3IgbnVtYmVycwotICAgICAqIGNvbmZsaWN0
IHdpdGggYW4gZXhpc3RpbmcgZmllbGQgaW4gdGhpcyBtZXNzYWdlIHR5cGUuIEFsbCBmaWVsZHMg
aW4gdGhlIG9uZW9mCi0gICAgICogYXJlIGFkZGVkIHRvIHRoZSBtZXNzYWdlIGRlc2NyaXB0b3Iu
IFN1Yi10eXBlIHJlZmVyZW5jZXMgKGUuZy4gZm9yIGZpZWxkcyBvZgotICAgICAqIHR5cGUgbWVz
c2FnZSkgYXJlIG5vdCByZXNvbHZlZCBhdCB0aGlzIHBvaW50LgotICAgICAqLwotICAgIEBKUnVi
eU1ldGhvZChuYW1lID0gImFkZF9vbmVvZiIpCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGFkZE9u
ZW9mKFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3Qgb2JqKSB7Ci0gICAgICAgIFJ1
YnlPbmVvZkRlc2NyaXB0b3IgZGVmID0gKFJ1YnlPbmVvZkRlc2NyaXB0b3IpIG9iajsKLSAgICAg
ICAgYnVpbGRlci5hZGRPbmVvZkRlY2woZGVmLmJ1aWxkKGJ1aWxkZXIuZ2V0T25lb2ZEZWNsQ291
bnQoKSkpOwotICAgICAgICBmb3IgKFJ1YnlGaWVsZERlc2NyaXB0b3IgZmllbGREZXNjcmlwdG9y
IDogZGVmLmdldEZpZWxkcygpKSB7Ci0gICAgICAgICAgICBhZGRGaWVsZChjb250ZXh0LCBmaWVs
ZERlc2NyaXB0b3IpOwotICAgICAgICB9Ci0gICAgICAgIG9uZW9mRGVmcy5wdXQoZGVmLmdldE5h
bWUoY29udGV4dCksIGRlZik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0Tmls
KCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgRGVzY3Jp
cHRvci5lYWNoX29uZW9mKCZibG9jaykgPT4gbmlsCi0gICAgICoKLSAgICAgKiBJbnZva2VzIHRo
ZSBnaXZlbiBibG9jayBmb3IgZWFjaCBvbmVvZiBpbiB0aGlzIG1lc3NhZ2UgdHlwZSwgcGFzc2lu
ZyB0aGUKLSAgICAgKiBjb3JyZXNwb25kaW5nIE9uZW9mRGVzY3JpcHRvci4KLSAgICAgKi8KLSAg
ICBASlJ1YnlNZXRob2QobmFtZSA9ICJlYWNoX29uZW9mIikKLSAgICBwdWJsaWMgSVJ1YnlPYmpl
Y3QgZWFjaE9uZW9mKFRocmVhZENvbnRleHQgY29udGV4dCwgQmxvY2sgYmxvY2spIHsKLSAgICAg
ICAgZm9yIChSdWJ5T25lb2ZEZXNjcmlwdG9yIG9uZW9mRGVzY3JpcHRvciA6IG9uZW9mRGVmcy52
YWx1ZXMoKSkgewotICAgICAgICAgICAgYmxvY2sueWllbGRTcGVjaWZpYyhjb250ZXh0LCBvbmVv
ZkRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRpbWUu
Z2V0TmlsKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAg
RGVzY3JpcHRvci5sb29rdXBfb25lb2YobmFtZSkgPT4gT25lb2ZEZXNjcmlwdG9yCi0gICAgICoK
LSAgICAgKiBSZXR1cm5zIHRoZSBvbmVvZiBkZXNjcmlwdG9yIGZvciB0aGUgb25lb2Ygd2l0aCB0
aGUgZ2l2ZW4gbmFtZSwgaWYgcHJlc2VudCwKLSAgICAgKiBvciBuaWwgaWYgbm9uZS4KLSAgICAg
Ki8KLSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICJsb29rdXBfb25lb2YiKQotICAgIHB1YmxpYyBJ
UnVieU9iamVjdCBsb29rdXBPbmVvZihUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0
IG5hbWUpIHsKLSAgICAgICAgaWYgKG5hbWUgaW5zdGFuY2VvZiBSdWJ5U3ltYm9sKSB7Ci0gICAg
ICAgICAgICBuYW1lID0gKChSdWJ5U3ltYm9sKSBuYW1lKS5pZDJuYW1lKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG9uZW9mRGVmcy5jb250YWluc0tleShuYW1lKSA/IG9uZW9mRGVmcy5n
ZXQobmFtZSkgOiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAgfQotCi0gICAgcHVibGlj
IHZvaWQgc2V0RGVzY3JpcHRvcihEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsK
LSAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciBnZXREZXNjcmlwdG9yKCkgewotICAgICAgICByZXR1
cm4gdGhpcy5kZXNjcmlwdG9yOwotICAgIH0KLQotICAgIHB1YmxpYyBEZXNjcmlwdG9yUHJvdG9z
LkRlc2NyaXB0b3JQcm90by5CdWlsZGVyIGdldEJ1aWxkZXIoKSB7Ci0gICAgICAgIHJldHVybiBi
dWlsZGVyOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE1hcEVudHJ5KGJvb2xlYW4gaXNN
YXBFbnRyeSkgewotICAgICAgICB0aGlzLmJ1aWxkZXIuc2V0T3B0aW9ucyhEZXNjcmlwdG9yUHJv
dG9zLk1lc3NhZ2VPcHRpb25zLm5ld0J1aWxkZXIoKS5zZXRNYXBFbnRyeShpc01hcEVudHJ5KSk7
Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSdWJ5TW9kdWxlIGJ1aWxkQ2xhc3NGcm9tRGVzY3JpcHRv
cihUaHJlYWRDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgUnVieSBydW50aW1lID0gY29udGV4
dC5ydW50aW1lOwotCi0gICAgICAgIE9iamVjdEFsbG9jYXRvciBhbGxvY2F0b3IgPSBuZXcgT2Jq
ZWN0QWxsb2NhdG9yKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJs
aWMgSVJ1YnlPYmplY3QgYWxsb2NhdGUoUnVieSBydW50aW1lLCBSdWJ5Q2xhc3Mga2xhenopIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1YnlNZXNzYWdlKHJ1bnRpbWUsIGtsYXp6LCBk
ZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICAvLyByYl9k
ZWZpbmVfY2xhc3NfaWQKLSAgICAgICAgUnVieUNsYXNzIGtsYXNzID0gUnVieUNsYXNzLm5ld0Ns
YXNzKHJ1bnRpbWUsIHJ1bnRpbWUuZ2V0T2JqZWN0KCkpOwotICAgICAgICBrbGFzcy5zZXRBbGxv
Y2F0b3IoYWxsb2NhdG9yKTsKLSAgICAgICAga2xhc3MubWFrZU1ldGFDbGFzcyhydW50aW1lLmdl
dE9iamVjdCgpLmdldE1ldGFDbGFzcygpKTsKLSAgICAgICAga2xhc3MuaW5oZXJpdChydW50aW1l
LmdldE9iamVjdCgpKTsKLSAgICAgICAgUnVieU1vZHVsZSBtZXNzYWdlRXh0cyA9IHJ1bnRpbWUu
Z2V0Q2xhc3NGcm9tUGF0aCgiR29vZ2xlOjpQcm90b2J1Zjo6TWVzc2FnZUV4dHMiKTsKLSAgICAg
ICAga2xhc3MuaW5jbHVkZShuZXcgSVJ1YnlPYmplY3RbXSB7bWVzc2FnZUV4dHN9KTsKLSAgICAg
ICAga2xhc3MuaW5zdGFuY2VfdmFyaWFibGVfc2V0KHJ1bnRpbWUubmV3U3RyaW5nKFV0aWxzLkRF
U0NSSVBUT1JfSU5TVEFOQ0VfVkFSKSwgdGhpcyk7Ci0gICAgICAgIGtsYXNzLmRlZmluZUFubm90
YXRlZE1ldGhvZHMoUnVieU1lc3NhZ2UuY2xhc3MpOwotICAgICAgICByZXR1cm4ga2xhc3M7Ci0g
ICAgfQotCi0gICAgcHJvdGVjdGVkIFJ1YnlGaWVsZERlc2NyaXB0b3IgbG9va3VwKFN0cmluZyBm
aWVsZE5hbWUpIHsKLSAgICAgICAgcmV0dXJuIGZpZWxkRGVmTWFwLmdldChVdGlscy51bmVzY2Fw
ZUlkZW50aWZpZXIoZmllbGROYW1lKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBJUnVieU9iamVj
dCBuYW1lOwotICAgIHByaXZhdGUgUnVieU1vZHVsZSBrbGF6ejsKLQotICAgIHByaXZhdGUgRGVz
Y3JpcHRvclByb3Rvcy5EZXNjcmlwdG9yUHJvdG8uQnVpbGRlciBidWlsZGVyOwotICAgIHByaXZh
dGUgRGVzY3JpcHRvcnMuRGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgIHByaXZhdGUgTWFwPFN0
cmluZywgUnVieUZpZWxkRGVzY3JpcHRvcj4gZmllbGREZWZNYXA7Ci0gICAgcHJpdmF0ZSBNYXA8
SVJ1YnlPYmplY3QsIFJ1YnlPbmVvZkRlc2NyaXB0b3I+IG9uZW9mRGVmczsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieURlc2Ny
aXB0b3JQb29sLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2py
dWJ5L1J1YnlEZXNjcmlwdG9yUG9vbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMzQ1Y2I5OTFiMWExNDJlZGM4NTQwZGEzN2NhZjg5ZDVjNjU0OTRiLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvanJ1YnkvUnVieURlc2NyaXB0b3JQb29sLmphdmEKKysrIC9kZXYvbnVs
bApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotICogQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVieTsKLQotaW1wb3J0IGNv
bS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvczsKLWltcG9ydCBjb20uZ29vZ2xlLnBy
b3RvYnVmLkRlc2NyaXB0b3JzOwotaW1wb3J0IG9yZy5qcnVieS4qOwotaW1wb3J0IG9yZy5qcnVi
eS5hbm5vLkpSdWJ5Q2xhc3M7Ci1pbXBvcnQgb3JnLmpydWJ5LmFubm8uSlJ1YnlNZXRob2Q7Ci1p
bXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuKjsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5idWls
dGluLklSdWJ5T2JqZWN0OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2
YS51dGlsLk1hcDsKLQotQEpSdWJ5Q2xhc3MobmFtZSA9ICJEZXNjcmlwdG9yUG9vbCIpCi1wdWJs
aWMgY2xhc3MgUnVieURlc2NyaXB0b3JQb29sIGV4dGVuZHMgUnVieU9iamVjdCB7Ci0gICAgcHVi
bGljIHN0YXRpYyB2b2lkIGNyZWF0ZVJ1YnlEZXNjcmlwdG9yUG9vbChSdWJ5IHJ1bnRpbWUpIHsK
LSAgICAgICAgUnVieU1vZHVsZSBwcm90b2J1ZiA9IHJ1bnRpbWUuZ2V0Q2xhc3NGcm9tUGF0aCgi
R29vZ2xlOjpQcm90b2J1ZiIpOwotICAgICAgICBSdWJ5Q2xhc3MgY0Rlc2NyaXB0b3JQb29sID0g
cHJvdG9idWYuZGVmaW5lQ2xhc3NVbmRlcigiRGVzY3JpcHRvclBvb2wiLCBydW50aW1lLmdldE9i
amVjdCgpLCBuZXcgT2JqZWN0QWxsb2NhdG9yKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0g
ICAgICAgICAgICBwdWJsaWMgSVJ1YnlPYmplY3QgYWxsb2NhdGUoUnVieSBydW50aW1lLCBSdWJ5
Q2xhc3Mga2xhenopIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1YnlEZXNjcmlwdG9y
UG9vbChydW50aW1lLCBrbGF6eik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAg
ICAgIGNEZXNjcmlwdG9yUG9vbC5kZWZpbmVBbm5vdGF0ZWRNZXRob2RzKFJ1YnlEZXNjcmlwdG9y
UG9vbC5jbGFzcyk7Ci0gICAgICAgIGRlc2NyaXB0b3JQb29sID0gKFJ1YnlEZXNjcmlwdG9yUG9v
bCkgY0Rlc2NyaXB0b3JQb29sLm5ld0luc3RhbmNlKHJ1bnRpbWUuZ2V0Q3VycmVudENvbnRleHQo
KSwgQmxvY2suTlVMTF9CTE9DSyk7Ci0gICAgfQotCi0gICAgcHVibGljIFJ1YnlEZXNjcmlwdG9y
UG9vbChSdWJ5IHJ1YnksIFJ1YnlDbGFzcyBrbGF6eikgewotICAgICAgICBzdXBlcihydWJ5LCBr
bGF6eik7Ci0gICAgfQotCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0
IGluaXRpYWxpemUoVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMuc3ltdGFi
ID0gbmV3IEhhc2hNYXA8SVJ1YnlPYmplY3QsIElSdWJ5T2JqZWN0PigpOwotICAgICAgICB0aGlz
LmNCdWlsZGVyID0gKFJ1YnlDbGFzcykgY29udGV4dC5ydW50aW1lLmdldENsYXNzRnJvbVBhdGgo
Ikdvb2dsZTo6UHJvdG9idWY6OkJ1aWxkZXIiKTsKLSAgICAgICAgdGhpcy5idWlsZGVyID0gRGVz
Y3JpcHRvclByb3Rvcy5GaWxlRGVzY3JpcHRvclByb3RvLm5ld0J1aWxkZXIoKTsKLSAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5
T2JqZWN0IGJ1aWxkKFRocmVhZENvbnRleHQgY29udGV4dCwgQmxvY2sgYmxvY2spIHsKLSAgICAg
ICAgUnVieUJ1aWxkZXIgY3R4ID0gKFJ1YnlCdWlsZGVyKSBjQnVpbGRlci5uZXdJbnN0YW5jZShj
b250ZXh0LCBCbG9jay5OVUxMX0JMT0NLKTsKLSAgICAgICAgaWYgKGJsb2NrLmFyaXR5KCkgPT0g
QXJpdHkuT05FX0FSR1VNRU5UKSB7Ci0gICAgICAgICAgICBibG9jay55aWVsZChjb250ZXh0LCBj
dHgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gYmxv
Y2suZ2V0QmluZGluZygpOwotICAgICAgICAgICAgYmluZGluZy5zZXRTZWxmKGN0eCk7Ci0gICAg
ICAgICAgICBibG9jay55aWVsZFNwZWNpZmljKGNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAg
IGN0eC5maW5hbGl6ZVRvUG9vbChjb250ZXh0LCB0aGlzKTsKLSAgICAgICAgYnVpbGRGaWxlRGVz
Y3JpcHRvcihjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQucnVudGltZS5nZXROaWwo
KTsKLSAgICB9Ci0KLSAgICBASlJ1YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgbG9v
a3VwKFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3QgbmFtZSkgewotICAgICAgICBJ
UnVieU9iamVjdCBkZXNjcmlwdG9yID0gdGhpcy5zeW10YWIuZ2V0KG5hbWUpOwotICAgICAgICBp
ZiAoZGVzY3JpcHRvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5ydW50
aW1lLmdldE5pbCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwotICAg
IH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIERlc2NyaXB0b3JQb29s
LmdlbmVyYXRlZF9wb29sID0+IGRlc2NyaXB0b3JfcG9vbAotICAgICAqCi0gICAgICogQ2xhc3Mg
bWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgZ2xvYmFsIERlc2NyaXB0b3JQb29sLiBUaGlzIGlzIGEg
c2luZ2xldG9uIGludG8KLSAgICAgKiB3aGljaCBnZW5lcmF0ZWQtY29kZSBtZXNzYWdlIGFuZCBl
bnVtIHR5cGVzIGFyZSByZWdpc3RlcmVkLiBUaGUgdXNlciBtYXkgYWxzbwotICAgICAqIHJlZ2lz
dGVyIHR5cGVzIGluIHRoaXMgcG9vbCBmb3IgY29udmVuaWVuY2Ugc28gdGhhdCB0aGV5IGRvIG5v
dCBoYXZlIHRvIGhvbGQKLSAgICAgKiBhIHJlZmVyZW5jZSB0byBhIHByaXZhdGUgcG9vbCBpbnN0
YW5jZS4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QobWV0YSA9IHRydWUsIG5hbWUgPSAiZ2Vu
ZXJhdGVkX3Bvb2wiKQotICAgIHB1YmxpYyBzdGF0aWMgSVJ1YnlPYmplY3QgZ2VuZXJhdGVkUG9v
bChUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IHJlY3YpIHsKLSAgICAgICAgcmV0
dXJuIGRlc2NyaXB0b3JQb29sOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFkZFRvU3lt
dGFiKFRocmVhZENvbnRleHQgY29udGV4dCwgUnVieURlc2NyaXB0b3IgZGVmKSB7Ci0gICAgICAg
IHN5bXRhYi5wdXQoZGVmLmdldE5hbWUoY29udGV4dCksIGRlZik7Ci0gICAgICAgIHRoaXMuYnVp
bGRlci5hZGRNZXNzYWdlVHlwZShkZWYuZ2V0QnVpbGRlcigpKTsKLSAgICB9Ci0KLSAgICBwcm90
ZWN0ZWQgdm9pZCBhZGRUb1N5bXRhYihUaHJlYWRDb250ZXh0IGNvbnRleHQsIFJ1YnlFbnVtRGVz
Y3JpcHRvciBkZWYpIHsKLSAgICAgICAgc3ltdGFiLnB1dChkZWYuZ2V0TmFtZShjb250ZXh0KSwg
ZGVmKTsKLSAgICAgICAgdGhpcy5idWlsZGVyLmFkZEVudW1UeXBlKGRlZi5nZXRCdWlsZGVyKCkp
OwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBidWlsZEZpbGVEZXNjcmlwdG9yKFRocmVhZENv
bnRleHQgY29udGV4dCkgewotICAgICAgICBSdWJ5IHJ1bnRpbWUgPSBjb250ZXh0LnJ1bnRpbWU7
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc2V0U3ludGF4KCJwcm90
bzMiKTsKLSAgICAgICAgICAgIGZpbmFsIERlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yIGZpbGVE
ZXNjcmlwdG9yID0gRGVzY3JpcHRvcnMuRmlsZURlc2NyaXB0b3IuYnVpbGRGcm9tKAotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYnVpbGQoKSwgbmV3IERlc2NyaXB0b3JzLkZpbGVE
ZXNjcmlwdG9yW117fSk7Ci0KLSAgICAgICAgICAgIGZvciAoRGVzY3JpcHRvcnMuRW51bURlc2Ny
aXB0b3IgZW51bURlc2NyaXB0b3IgOiBmaWxlRGVzY3JpcHRvci5nZXRFbnVtVHlwZXMoKSkgewot
ICAgICAgICAgICAgICAgIFN0cmluZyBlbnVtTmFtZSA9IFV0aWxzLnVuZXNjYXBlSWRlbnRpZmll
cihlbnVtRGVzY3JpcHRvci5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmIChlbnVtRGVz
Y3JpcHRvci5maW5kVmFsdWVCeU51bWJlcigwKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRocm93IHJ1bnRpbWUubmV3VHlwZUVycm9yKCJFbnVtIGRlZmluaXRpb24gIiArIGVudW1O
YW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGRvZXMgbm90IGNvbnRhaW4gYSB2
YWx1ZSBmb3IgJzAnIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICgoUnVi
eUVudW1EZXNjcmlwdG9yKSBzeW10YWIuZ2V0KHJ1bnRpbWUubmV3U3RyaW5nKGVudW1OYW1lKSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAuc2V0RGVzY3JpcHRvcihlbnVtRGVzY3JpcHRvcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKERlc2NyaXB0b3JzLkRlc2NyaXB0b3Ig
ZGVzY3JpcHRvciA6IGZpbGVEZXNjcmlwdG9yLmdldE1lc3NhZ2VUeXBlcygpKSB7Ci0gICAgICAg
ICAgICAgICAgUnVieURlc2NyaXB0b3IgcnVieURlc2NyaXB0b3IgPSAoKFJ1YnlEZXNjcmlwdG9y
KQotICAgICAgICAgICAgICAgICAgICAgICAgc3ltdGFiLmdldChydW50aW1lLm5ld1N0cmluZyhV
dGlscy51bmVzY2FwZUlkZW50aWZpZXIoZGVzY3JpcHRvci5nZXROYW1lKCkpKSkpOwotICAgICAg
ICAgICAgICAgIGZvciAoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkRGVzY3JpcHRv
ciA6IGRlc2NyaXB0b3IuZ2V0RmllbGRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZp
ZWxkRGVzY3JpcHRvci5pc1JlcXVpcmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93IHJ1bnRpbWUubmV3VHlwZUVycm9yKCJSZXF1aXJlZCBmaWVsZHMgYXJlIHVuc3VwcG9ydGVk
IGluIHByb3RvMyIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IFJ1YnlGaWVsZERlc2NyaXB0b3IgcnVieUZpZWxkRGVzY3JpcHRvciA9IHJ1YnlEZXNjcmlwdG9y
Lmxvb2t1cChmaWVsZERlc2NyaXB0b3IuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
cnVieUZpZWxkRGVzY3JpcHRvci5zZXRGaWVsZERlZihmaWVsZERlc2NyaXB0b3IpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoZmllbGREZXNjcmlwdG9yLmdldFR5cGUoKSA9PSBEZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3IuVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSdWJ5RGVzY3JpcHRvciBzdWJUeXBlID0gKFJ1YnlEZXNjcmlwdG9yKSBsb29rdXAoY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5uZXdTdHJpbmcoVXRp
bHMudW5lc2NhcGVJZGVudGlmaWVyKGZpZWxkRGVzY3JpcHRvci5nZXRNZXNzYWdlVHlwZSgpLmdl
dE5hbWUoKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1YnlGaWVsZERlc2NyaXB0b3Iu
c2V0U3ViVHlwZShzdWJUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAoZmllbGREZXNjcmlwdG9yLmdldFR5cGUoKSA9PSBEZXNjcmlwdG9ycy5GaWVs
ZERlc2NyaXB0b3IuVHlwZS5FTlVNKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSdWJ5RW51
bURlc2NyaXB0b3Igc3ViVHlwZSA9IChSdWJ5RW51bURlc2NyaXB0b3IpIGxvb2t1cChjb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLm5ld1N0cmluZyhVdGls
cy51bmVzY2FwZUlkZW50aWZpZXIoZmllbGREZXNjcmlwdG9yLmdldEVudW1UeXBlKCkuZ2V0TmFt
ZSgpKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcnVieUZpZWxkRGVzY3JpcHRvci5zZXRT
dWJUeXBlKHN1YlR5cGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJ1YnlEZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoZGVzY3JpcHRv
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKERlc2NyaXB0b3JzLkRlc2NyaXB0
b3JWYWxpZGF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IHJ1bnRpbWUubmV3
UnVudGltZUVycm9yKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHBy
aXZhdGUgc3RhdGljIFJ1YnlEZXNjcmlwdG9yUG9vbCBkZXNjcmlwdG9yUG9vbDsKLQotICAgIHBy
aXZhdGUgUnVieUNsYXNzIGNCdWlsZGVyOwotICAgIHByaXZhdGUgTWFwPElSdWJ5T2JqZWN0LCBJ
UnVieU9iamVjdD4gc3ltdGFiOwotICAgIHByaXZhdGUgRGVzY3JpcHRvclByb3Rvcy5GaWxlRGVz
Y3JpcHRvclByb3RvLkJ1aWxkZXIgYnVpbGRlcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFp
bi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieUVudW0uamF2YSBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMv
bWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieUVudW0uamF2YQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5ZDg2OTk5MDE1MzE5MTdjMDYyNWM3MjM5YjQxNzY0
YzQzZDJkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1
Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlFbnVtLmphdmEK
KysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0gKiBDb3B5cmlnaHQgMjAxNCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5Owot
Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yczsKLWltcG9ydCBvcmcuanJ1
YnkuUnVieU1vZHVsZTsKLWltcG9ydCBvcmcuanJ1YnkuUnVieU51bWVyaWM7Ci1pbXBvcnQgb3Jn
LmpydWJ5LmFubm8uSlJ1YnlNZXRob2Q7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuVGhyZWFk
Q29udGV4dDsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5idWlsdGluLklSdWJ5T2JqZWN0Owot
Ci1wdWJsaWMgY2xhc3MgUnVieUVudW0gewotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAg
ICogICAgIEVudW0ubG9va3VwKG51bWJlcikgPT4gbmFtZQotICAgICAqCi0gICAgICogVGhpcyBt
b2R1bGUgbWV0aG9kLCBwcm92aWRlZCBvbiBlYWNoIGdlbmVyYXRlZCBlbnVtIG1vZHVsZSwgbG9v
a3MgdXAgYW4gZW51bQotICAgICAqIHZhbHVlIGJ5IG51bWJlciBhbmQgcmV0dXJucyBpdHMgbmFt
ZSBhcyBhIFJ1Ynkgc3ltYm9sLCBvciBuaWwgaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIEBK
UnVieU1ldGhvZChtZXRhID0gdHJ1ZSkKLSAgICBwdWJsaWMgc3RhdGljIElSdWJ5T2JqZWN0IGxv
b2t1cChUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IHJlY3YsIElSdWJ5T2JqZWN0
IG51bWJlcikgewotICAgICAgICBSdWJ5RW51bURlc2NyaXB0b3IgcnVieUVudW1EZXNjcmlwdG9y
ZXNjcmlwdG9yID0gKFJ1YnlFbnVtRGVzY3JpcHRvcikgZ2V0RGVzY3JpcHRvcihjb250ZXh0LCBy
ZWN2KTsKLSAgICAgICAgRGVzY3JpcHRvcnMuRW51bURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHJ1
YnlFbnVtRGVzY3JpcHRvcmVzY3JpcHRvci5nZXREZXNjcmlwdG9yKCk7Ci0gICAgICAgIERlc2Ny
aXB0b3JzLkVudW1WYWx1ZURlc2NyaXB0b3IgdmFsdWUgPSBkZXNjcmlwdG9yLmZpbmRWYWx1ZUJ5
TnVtYmVyKFJ1YnlOdW1lcmljLm51bTJpbnQobnVtYmVyKSk7Ci0gICAgICAgIGlmICh2YWx1ZSA9
PSBudWxsKSByZXR1cm4gY29udGV4dC5ydW50aW1lLmdldE5pbCgpOwotICAgICAgICByZXR1cm4g
Y29udGV4dC5ydW50aW1lLm5ld1N5bWJvbCh2YWx1ZS5nZXROYW1lKCkpOwotICAgIH0KLQotICAg
IC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIEVudW0ucmVzb2x2ZShuYW1lKSA9PiBu
dW1iZXIKLSAgICAgKgotICAgICAqIFRoaXMgbW9kdWxlIG1ldGhvZCwgcHJvdmlkZWQgb24gZWFj
aCBnZW5lcmF0ZWQgZW51bSBtb2R1bGUsIGxvb2tzIHVwIGFuIGVudW0KLSAgICAgKiB2YWx1ZSBi
eSBuYW1lIChhcyBhIFJ1Ynkgc3ltYm9sKSBhbmQgcmV0dXJucyBpdHMgbmFtZSwgb3IgbmlsIGlm
IG5vdCBmb3VuZC4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QobWV0YSA9IHRydWUpCi0gICAg
cHVibGljIHN0YXRpYyBJUnVieU9iamVjdCByZXNvbHZlKFRocmVhZENvbnRleHQgY29udGV4dCwg
SVJ1YnlPYmplY3QgcmVjdiwgSVJ1YnlPYmplY3QgbmFtZSkgewotICAgICAgICBSdWJ5RW51bURl
c2NyaXB0b3IgcnVieUVudW1EZXNjcmlwdG9yZXNjcmlwdG9yID0gKFJ1YnlFbnVtRGVzY3JpcHRv
cikgZ2V0RGVzY3JpcHRvcihjb250ZXh0LCByZWN2KTsKLSAgICAgICAgRGVzY3JpcHRvcnMuRW51
bURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHJ1YnlFbnVtRGVzY3JpcHRvcmVzY3JpcHRvci5nZXRE
ZXNjcmlwdG9yKCk7Ci0gICAgICAgIERlc2NyaXB0b3JzLkVudW1WYWx1ZURlc2NyaXB0b3IgdmFs
dWUgPSBkZXNjcmlwdG9yLmZpbmRWYWx1ZUJ5TmFtZShuYW1lLmFzSmF2YVN0cmluZygpKTsKLSAg
ICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7
Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRpbWUubmV3Rml4bnVtKHZhbHVlLmdldE51bWJl
cigpKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBFbnVt
LmRlc2NyaXB0b3IKLSAgICAgKgotICAgICAqIFRoaXMgbW9kdWxlIG1ldGhvZCwgcHJvdmlkZWQg
b24gZWFjaCBnZW5lcmF0ZWQgZW51bSBtb2R1bGUsIHJldHVybnMgdGhlCi0gICAgICogRW51bURl
c2NyaXB0b3IgY29ycmVzcG9uZGluZyB0byB0aGlzIGVudW0gdHlwZS4KLSAgICAgKi8KLSAgICBA
SlJ1YnlNZXRob2QobWV0YSA9IHRydWUsIG5hbWUgPSAiZGVzY3JpcHRvciIpCi0gICAgcHVibGlj
IHN0YXRpYyBJUnVieU9iamVjdCBnZXREZXNjcmlwdG9yKFRocmVhZENvbnRleHQgY29udGV4dCwg
SVJ1YnlPYmplY3QgcmVjdikgewotICAgICAgICByZXR1cm4gKChSdWJ5TW9kdWxlKSByZWN2KS5n
ZXRJbnN0YW5jZVZhcmlhYmxlKFV0aWxzLkRFU0NSSVBUT1JfSU5TVEFOQ0VfVkFSKTsKLSAgICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2py
dWJ5L1J1YnlFbnVtQnVpbGRlckNvbnRleHQuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9n
b29nbGUvcHJvdG9idWYvanJ1YnkvUnVieUVudW1CdWlsZGVyQ29udGV4dC5qYXZhCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGNhYzM0NTgxMmIwYzNjZDM5NmNhNDE2NzAxZGFlNDNh
ZGJhMDMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVi
eS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieUVudW1CdWlsZGVy
Q29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotICogQ29weXJp
Z2h0IDIwMTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90
b2J1Zi5qcnVieTsKLQotaW1wb3J0IG9yZy5qcnVieS5SdWJ5OwotaW1wb3J0IG9yZy5qcnVieS5S
dWJ5Q2xhc3M7Ci1pbXBvcnQgb3JnLmpydWJ5LlJ1YnlNb2R1bGU7Ci1pbXBvcnQgb3JnLmpydWJ5
LlJ1YnlPYmplY3Q7Ci1pbXBvcnQgb3JnLmpydWJ5LmFubm8uSlJ1YnlDbGFzczsKLWltcG9ydCBv
cmcuanJ1YnkuYW5uby5KUnVieU1ldGhvZDsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5PYmpl
Y3RBbGxvY2F0b3I7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuVGhyZWFkQ29udGV4dDsKLWlt
cG9ydCBvcmcuanJ1YnkucnVudGltZS5idWlsdGluLklSdWJ5T2JqZWN0OwotCi1ASlJ1YnlDbGFz
cyhuYW1lID0gIkVudW1CdWlsZGVyQ29udGV4dCIpCi1wdWJsaWMgY2xhc3MgUnVieUVudW1CdWls
ZGVyQ29udGV4dCBleHRlbmRzIFJ1YnlPYmplY3QgewotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBj
cmVhdGVSdWJ5RW51bUJ1aWxkZXJDb250ZXh0KFJ1YnkgcnVudGltZSkgewotICAgICAgICBSdWJ5
TW9kdWxlIHByb3RvYnVmID0gcnVudGltZS5nZXRDbGFzc0Zyb21QYXRoKCJHb29nbGU6OlByb3Rv
YnVmIik7Ci0gICAgICAgIFJ1YnlDbGFzcyBjTWVzc2FnZUJ1aWxkZXJDb250ZXh0ID0gcHJvdG9i
dWYuZGVmaW5lQ2xhc3NVbmRlcigiRW51bUJ1aWxkZXJDb250ZXh0IiwgcnVudGltZS5nZXRPYmpl
Y3QoKSwgbmV3IE9iamVjdEFsbG9jYXRvcigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAg
ICAgICAgICAgcHVibGljIElSdWJ5T2JqZWN0IGFsbG9jYXRlKFJ1YnkgcnVudGltZSwgUnVieUNs
YXNzIGtsYXp6KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdWJ5RW51bUJ1aWxkZXJD
b250ZXh0KHJ1bnRpbWUsIGtsYXp6KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
ICAgIGNNZXNzYWdlQnVpbGRlckNvbnRleHQuZGVmaW5lQW5ub3RhdGVkTWV0aG9kcyhSdWJ5RW51
bUJ1aWxkZXJDb250ZXh0LmNsYXNzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUnVieUVudW1CdWls
ZGVyQ29udGV4dChSdWJ5IHJ1YnksIFJ1YnlDbGFzcyBrbGF6eikgewotICAgICAgICBzdXBlcihy
dWJ5LCBrbGF6eik7Ci0gICAgfQotCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5
T2JqZWN0IGluaXRpYWxpemUoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCBlbnVt
RGVzY3JpcHRvcikgewotICAgICAgICB0aGlzLmVudW1EZXNjcmlwdG9yID0gKFJ1YnlFbnVtRGVz
Y3JpcHRvcikgZW51bURlc2NyaXB0b3I7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQot
ICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIEVudW1CdWlsZGVyLmFkZF92YWx1
ZShuYW1lLCBudW1iZXIpCi0gICAgICoKLSAgICAgKiBBZGRzIHRoZSBnaXZlbiBuYW1lID0+IG51
bWJlciBtYXBwaW5nIHRvIHRoZSBlbnVtIHR5cGUuIE5hbWUgbXVzdCBiZSBhIFJ1YnkKLSAgICAg
KiBzeW1ib2wuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2Jq
ZWN0IHZhbHVlKFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3QgbmFtZSwgSVJ1YnlP
YmplY3QgbnVtYmVyKSB7Ci0gICAgICAgIHRoaXMuZW51bURlc2NyaXB0b3IuYWRkVmFsdWUoY29u
dGV4dCwgbmFtZSwgbnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQucnVudGltZS5nZXRO
aWwoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJ1YnlFbnVtRGVzY3JpcHRvciBlbnVtRGVzY3Jp
cHRvcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvanJ1YnkvUnVieUVudW1EZXNjcmlwdG9yLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlFbnVtRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0ZGY4MzJkMGNmYzk1YjcxOWU3Y2JiNjRiNDIxNjJhOTk4YTQ4
NzM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9z
cmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieUVudW1EZXNjcmlwdG9y
LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoKLSAqIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotICogQ29weXJpZ2h0IDIw
MTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5q
cnVieTsKLQotaW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvczsKLWlt
cG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzOwotaW1wb3J0IG9yZy5qcnVieS5S
dWJ5OwotaW1wb3J0IG9yZy5qcnVieS5SdWJ5Q2xhc3M7Ci1pbXBvcnQgb3JnLmpydWJ5LlJ1YnlN
b2R1bGU7Ci1pbXBvcnQgb3JnLmpydWJ5LlJ1YnlPYmplY3Q7Ci1pbXBvcnQgb3JnLmpydWJ5LlJ1
YnlOdW1lcmljOwotaW1wb3J0IG9yZy5qcnVieS5hbm5vLkpSdWJ5Q2xhc3M7Ci1pbXBvcnQgb3Jn
LmpydWJ5LmFubm8uSlJ1YnlNZXRob2Q7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuQmxvY2s7
Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuT2JqZWN0QWxsb2NhdG9yOwotaW1wb3J0IG9yZy5q
cnVieS5ydW50aW1lLlRocmVhZENvbnRleHQ7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuYnVp
bHRpbi5JUnVieU9iamVjdDsKLQotQEpSdWJ5Q2xhc3MobmFtZSA9ICJFbnVtRGVzY3JpcHRvciIs
IGluY2x1ZGUgPSAiRW51bWVyYWJsZSIpCi1wdWJsaWMgY2xhc3MgUnVieUVudW1EZXNjcmlwdG9y
IGV4dGVuZHMgUnVieU9iamVjdCB7Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZVJ1YnlF
bnVtRGVzY3JpcHRvcihSdWJ5IHJ1bnRpbWUpIHsKLSAgICAgICAgUnVieU1vZHVsZSBtUHJvdG9i
dWYgPSBydW50aW1lLmdldENsYXNzRnJvbVBhdGgoIkdvb2dsZTo6UHJvdG9idWYiKTsKLSAgICAg
ICAgUnVieUNsYXNzIGNFbnVtRGVzY3JpcHRvciA9IG1Qcm90b2J1Zi5kZWZpbmVDbGFzc1VuZGVy
KCJFbnVtRGVzY3JpcHRvciIsIHJ1bnRpbWUuZ2V0T2JqZWN0KCksIG5ldyBPYmplY3RBbGxvY2F0
b3IoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBJUnVieU9i
amVjdCBhbGxvY2F0ZShSdWJ5IHJ1bnRpbWUsIFJ1YnlDbGFzcyBrbGF6eikgewotICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgUnVieUVudW1EZXNjcmlwdG9yKHJ1bnRpbWUsIGtsYXp6KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGNFbnVtRGVzY3JpcHRvci5pbmNsdWRl
TW9kdWxlKHJ1bnRpbWUuZ2V0RW51bWVyYWJsZSgpKTsKLSAgICAgICAgY0VudW1EZXNjcmlwdG9y
LmRlZmluZUFubm90YXRlZE1ldGhvZHMoUnVieUVudW1EZXNjcmlwdG9yLmNsYXNzKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgUnVieUVudW1EZXNjcmlwdG9yKFJ1YnkgcnVudGltZSwgUnVieUNsYXNz
IGtsYXp6KSB7Ci0gICAgICAgIHN1cGVyKHJ1bnRpbWUsIGtsYXp6KTsKLSAgICB9Ci0KLSAgICAv
KgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBFbnVtRGVzY3JpcHRvci5uZXcgPT4gZW51
bV9kZXNjcmlwdG9yCi0gICAgICoKLSAgICAgKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSwgZW51bSBk
ZXNjcmlwdG9yLiBNdXN0IGJlIGFkZGVkIHRvIGEgcG9vbCBiZWZvcmUgdGhlCi0gICAgICogZW51
bSB0eXBlIGNhbiBiZSB1c2VkLiBUaGUgZW51bSB0eXBlIG1heSBvbmx5IGJlIG1vZGlmaWVkIHBy
aW9yIHRvIGFkZGluZyB0bwotICAgICAqIGEgcG9vbC4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRo
b2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgaW5pdGlhbGl6ZShUaHJlYWRDb250ZXh0IGNvbnRl
eHQpIHsKLSAgICAgICAgdGhpcy5idWlsZGVyID0gRGVzY3JpcHRvclByb3Rvcy5FbnVtRGVzY3Jp
cHRvclByb3RvLm5ld0J1aWxkZXIoKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0g
ICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgRW51bURlc2NyaXB0b3IubmFtZSA9
PiBuYW1lCi0gICAgICoKLSAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgZW51bSB0eXBl
LgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gIm5hbWUiKQotICAgIHB1YmxpYyBJ
UnVieU9iamVjdCBnZXROYW1lKFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAgICAgICByZXR1
cm4gdGhpcy5uYW1lOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICog
ICAgIEVudW1EZXNjcmlwdG9yLm5hbWUgPSBuYW1lCi0gICAgICoKLSAgICAgKiBTZXRzIHRoZSBu
YW1lIG9mIHRoaXMgZW51bSB0eXBlLiBDYW5ub3QgYmUgY2FsbGVkIGlmIHRoZSBlbnVtIHR5cGUg
aGFzCi0gICAgICogYWxyZWFkeSBiZWVuIGFkZGVkIHRvIGEgcG9vbC4KLSAgICAgKi8KLSAgICBA
SlJ1YnlNZXRob2QobmFtZSA9ICJuYW1lPSIpCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IHNldE5h
bWUoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCBuYW1lKSB7Ci0gICAgICAgIHRo
aXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuYnVpbGRlci5zZXROYW1lKFV0aWxzLmVzY2Fw
ZUlkZW50aWZpZXIobmFtZS5hc0phdmFTdHJpbmcoKSkpOwotICAgICAgICByZXR1cm4gY29udGV4
dC5ydW50aW1lLmdldE5pbCgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0g
ICAgICogICAgIEVudW1EZXNjcmlwdG9yLmFkZF92YWx1ZShrZXksIHZhbHVlKQotICAgICAqCi0g
ICAgICogQWRkcyBhIG5ldyBrZXkgPT4gdmFsdWUgbWFwcGluZyB0byB0aGlzIGVudW0gdHlwZS4g
S2V5IG11c3QgYmUgZ2l2ZW4gYXMgYQotICAgICAqIFJ1Ynkgc3ltYm9sLiBDYW5ub3QgYmUgY2Fs
bGVkIGlmIHRoZSBlbnVtIHR5cGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBhCi0gICAgICog
cG9vbC4gV2lsbCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGtleSBvciB2YWx1ZSBpcyBhbHJl
YWR5IGluIHVzZS4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICJhZGRfdmFsdWUi
KQotICAgIHB1YmxpYyBJUnVieU9iamVjdCBhZGRWYWx1ZShUaHJlYWRDb250ZXh0IGNvbnRleHQs
IElSdWJ5T2JqZWN0IG5hbWUsIElSdWJ5T2JqZWN0IG51bWJlcikgewotICAgICAgICBEZXNjcmlw
dG9yUHJvdG9zLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5CdWlsZGVyIHZhbHVlQnVpbGRlciA9
IERlc2NyaXB0b3JQcm90b3MuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLm5ld0J1aWxkZXIoKTsK
LSAgICAgICAgdmFsdWVCdWlsZGVyLnNldE5hbWUobmFtZS5hc0phdmFTdHJpbmcoKSk7Ci0gICAg
ICAgIHZhbHVlQnVpbGRlci5zZXROdW1iZXIoUnVieU51bWVyaWMubnVtMmludChudW1iZXIpKTsK
LSAgICAgICAgdGhpcy5idWlsZGVyLmFkZFZhbHVlKHZhbHVlQnVpbGRlcik7Ci0gICAgICAgIHJl
dHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBj
YWxsLXNlcToKLSAgICAgKiAgICAgRW51bURlc2NyaXB0b3IuZWFjaCgmYmxvY2spCi0gICAgICoK
LSAgICAgKiBJdGVyYXRlcyBvdmVyIGtleSA9PiB2YWx1ZSBtYXBwaW5ncyBpbiB0aGlzIGVudW0n
cyBkZWZpbml0aW9uLCB5aWVsZGluZyB0bwotICAgICAqIHRoZSBibG9jayB3aXRoIChrZXksIHZh
bHVlKSBhcmd1bWVudHMgZm9yIGVhY2ggb25lLgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZAot
ICAgIHB1YmxpYyBJUnVieU9iamVjdCBlYWNoKFRocmVhZENvbnRleHQgY29udGV4dCwgQmxvY2sg
YmxvY2spIHsKLSAgICAgICAgUnVieSBydW50aW1lID0gY29udGV4dC5ydW50aW1lOwotICAgICAg
ICBmb3IgKERlc2NyaXB0b3JzLkVudW1WYWx1ZURlc2NyaXB0b3IgZW51bVZhbHVlRGVzY3JpcHRv
ciA6IGRlc2NyaXB0b3IuZ2V0VmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGJsb2NrLnlpZWxkKGNv
bnRleHQsIHJ1bnRpbWUubmV3QXJyYXkocnVudGltZS5uZXdTeW1ib2woZW51bVZhbHVlRGVzY3Jp
cHRvci5nZXROYW1lKCkpLAotICAgICAgICAgICAgICAgICAgICBydW50aW1lLm5ld0ZpeG51bShl
bnVtVmFsdWVEZXNjcmlwdG9yLmdldE51bWJlcigpKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBydW50aW1lLmdldE5pbCgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6
Ci0gICAgICogICAgIEVudW1EZXNjcmlwdG9yLmVudW1tb2R1bGUgPT4gbW9kdWxlCi0gICAgICoK
LSAgICAgKiBSZXR1cm5zIHRoZSBSdWJ5IG1vZHVsZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZW51
bSB0eXBlLiBDYW5ub3QgYmUgY2FsbGVkCi0gICAgICogdW50aWwgdGhlIGVudW0gZGVzY3JpcHRv
ciBoYXMgYmVlbiBhZGRlZCB0byBhIHBvb2wuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kCi0g
ICAgcHVibGljIElSdWJ5T2JqZWN0IGVudW1tb2R1bGUoVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7
Ci0gICAgICAgIGlmICh0aGlzLmtsYXp6ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRoaXMua2xh
enogPSBidWlsZE1vZHVsZUZyb21EZXNjcmlwdG9yKGNvbnRleHQpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0aGlzLmtsYXp6OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERlc2Ny
aXB0b3IoRGVzY3JpcHRvcnMuRW51bURlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICAgICAgICB0
aGlzLmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwotICAgIH0KLQotICAgIHB1YmxpYyBEZXNjcmlw
dG9ycy5FbnVtRGVzY3JpcHRvciBnZXREZXNjcmlwdG9yKCkgewotICAgICAgICByZXR1cm4gdGhp
cy5kZXNjcmlwdG9yOwotICAgIH0KLQotICAgIHB1YmxpYyBEZXNjcmlwdG9yUHJvdG9zLkVudW1E
ZXNjcmlwdG9yUHJvdG8uQnVpbGRlciBnZXRCdWlsZGVyKCkgewotICAgICAgICByZXR1cm4gdGhp
cy5idWlsZGVyOwotICAgIH0KLQotICAgIHByaXZhdGUgUnVieU1vZHVsZSBidWlsZE1vZHVsZUZy
b21EZXNjcmlwdG9yKFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAgICAgICBSdWJ5IHJ1bnRp
bWUgPSBjb250ZXh0LnJ1bnRpbWU7Ci0gICAgICAgIFV0aWxzLmNoZWNrTmFtZUF2YWlsYWJpbGl0
eShjb250ZXh0LCBuYW1lLmFzSmF2YVN0cmluZygpKTsKLQotICAgICAgICBSdWJ5TW9kdWxlIGVu
dW1Nb2R1bGUgPSBSdWJ5TW9kdWxlLm5ld01vZHVsZShydW50aW1lKTsKLSAgICAgICAgZm9yIChE
ZXNjcmlwdG9ycy5FbnVtVmFsdWVEZXNjcmlwdG9yIHZhbHVlIDogZGVzY3JpcHRvci5nZXRWYWx1
ZXMoKSkgewotICAgICAgICAgICAgZW51bU1vZHVsZS5kZWZpbmVDb25zdGFudCh2YWx1ZS5nZXRO
YW1lKCksIHJ1bnRpbWUubmV3Rml4bnVtKHZhbHVlLmdldE51bWJlcigpKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBlbnVtTW9kdWxlLmluc3RhbmNlX3ZhcmlhYmxlX3NldChydW50aW1lLm5ld1N0
cmluZyhVdGlscy5ERVNDUklQVE9SX0lOU1RBTkNFX1ZBUiksIHRoaXMpOwotICAgICAgICBlbnVt
TW9kdWxlLmRlZmluZUFubm90YXRlZE1ldGhvZHMoUnVieUVudW0uY2xhc3MpOwotICAgICAgICBy
ZXR1cm4gZW51bU1vZHVsZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIElSdWJ5T2JqZWN0IG5hbWU7
Ci0gICAgcHJpdmF0ZSBSdWJ5TW9kdWxlIGtsYXp6OwotICAgIHByaXZhdGUgRGVzY3JpcHRvcnMu
RW51bURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICBwcml2YXRlIERlc2NyaXB0b3JQcm90b3Mu
RW51bURlc2NyaXB0b3JQcm90by5CdWlsZGVyIGJ1aWxkZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkv
c3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlGaWVsZERlc2NyaXB0
b3IuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVi
eUZpZWxkRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2M0
ODhiYzk4NjY2YTJhOTlkNDUzNTlhMWE2ZTdmZDAxYTg0YzllLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUv
cHJvdG9idWYvanJ1YnkvUnVieUZpZWxkRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAg
LTEsMjc3ICswLDAgQEAKLS8qCi0gKiBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLSAqIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wt
YnVmZmVycy8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWYuanJ1Ynk7Ci0KLWltcG9ydCBjb20uZ29v
Z2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b3M7Ci1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9yczsKLWltcG9ydCBvcmcuanJ1YnkuKjsKLWltcG9ydCBvcmcuanJ1YnkuYW5u
by5KUnVieUNsYXNzOwotaW1wb3J0IG9yZy5qcnVieS5hbm5vLkpSdWJ5TWV0aG9kOwotaW1wb3J0
IG9yZy5qcnVieS5ydW50aW1lLk9iamVjdEFsbG9jYXRvcjsKLWltcG9ydCBvcmcuanJ1YnkucnVu
dGltZS5UaHJlYWRDb250ZXh0OwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLmJ1aWx0aW4uSVJ1
YnlPYmplY3Q7Ci0KLUBKUnVieUNsYXNzKG5hbWUgPSAiRmllbGREZXNjcmlwdG9yIikKLXB1Ymxp
YyBjbGFzcyBSdWJ5RmllbGREZXNjcmlwdG9yIGV4dGVuZHMgUnVieU9iamVjdCB7Ci0gICAgcHVi
bGljIHN0YXRpYyB2b2lkIGNyZWF0ZVJ1YnlGaWxlRGVzY3JpcHRvcihSdWJ5IHJ1bnRpbWUpIHsK
LSAgICAgICAgUnVieU1vZHVsZSBtUHJvdG9idWYgPSBydW50aW1lLmdldENsYXNzRnJvbVBhdGgo
Ikdvb2dsZTo6UHJvdG9idWYiKTsKLSAgICAgICAgUnVieUNsYXNzIGNGaWVsZERlc2NyaXB0b3Ig
PSBtUHJvdG9idWYuZGVmaW5lQ2xhc3NVbmRlcigiRmllbGREZXNjcmlwdG9yIiwgcnVudGltZS5n
ZXRPYmplY3QoKSwgbmV3IE9iamVjdEFsbG9jYXRvcigpIHsKLSAgICAgICAgICAgIEBPdmVycmlk
ZQotICAgICAgICAgICAgcHVibGljIElSdWJ5T2JqZWN0IGFsbG9jYXRlKFJ1YnkgcnVudGltZSwg
UnVieUNsYXNzIGtsYXp6KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdWJ5RmllbGRE
ZXNjcmlwdG9yKHJ1bnRpbWUsIGtsYXp6KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0g
ICAgICAgIGNGaWVsZERlc2NyaXB0b3IuZGVmaW5lQW5ub3RhdGVkTWV0aG9kcyhSdWJ5RmllbGRE
ZXNjcmlwdG9yLmNsYXNzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUnVieUZpZWxkRGVzY3JpcHRv
cihSdWJ5IHJ1bnRpbWUsIFJ1YnlDbGFzcyBrbGF6eikgewotICAgICAgICBzdXBlcihydW50aW1l
LCBrbGF6eik7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAg
RmllbGREZXNjcmlwdG9yLm5ldyA9PiBmaWVsZAotICAgICAqCi0gICAgICogUmV0dXJucyBhIG5l
dyBmaWVsZCBkZXNjcmlwdG9yLiBJdHMgbmFtZSwgdHlwZSwgZXRjLiBtdXN0IGJlIHNldCBiZWZv
cmUgaXQgaXMKLSAgICAgKiBhZGRlZCB0byBhIG1lc3NhZ2UgdHlwZS4KLSAgICAgKi8KLSAgICBA
SlJ1YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgaW5pdGlhbGl6ZShUaHJlYWRDb250
ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgYnVpbGRlciA9IERlc2NyaXB0b3JQcm90b3MuRmllbGRE
ZXNjcmlwdG9yUHJvdG8ubmV3QnVpbGRlcigpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9
Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBGaWVsZERlc2NyaXB0b3Iu
bGFiZWwKLSAgICAgKgotICAgICAqIFJldHVybiB0aGUgbGFiZWwgb2YgdGhpcyBmaWVsZC4KLSAg
ICAgKi8KLSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICJsYWJlbCIpCi0gICAgcHVibGljIElSdWJ5
T2JqZWN0IGdldExhYmVsKFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAgICAgICByZXR1cm4g
dGhpcy5sYWJlbDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAg
ICBGaWVsZERlc2NyaXB0b3IubGFiZWwgPSBsYWJlbAotICAgICAqCi0gICAgICogU2V0cyB0aGUg
bGFiZWwgb24gdGhpcyBmaWVsZC4gQ2Fubm90IGJlIGNhbGxlZCBpZiBmaWVsZCBpcyBwYXJ0IG9m
IGEgbWVzc2FnZQotICAgICAqIHR5cGUgYWxyZWFkeSBpbiBhIHBvb2wuCi0gICAgICovCi0gICAg
QEpSdWJ5TWV0aG9kKG5hbWUgPSAibGFiZWw9IikKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3Qgc2V0
TGFiZWwoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCB2YWx1ZSkgewotICAgICAg
ICBTdHJpbmcgbGFiZWxOYW1lID0gdmFsdWUuYXNKYXZhU3RyaW5nKCk7Ci0gICAgICAgIHRoaXMu
bGFiZWwgPSBjb250ZXh0LnJ1bnRpbWUubmV3U3ltYm9sKGxhYmVsTmFtZS50b0xvd2VyQ2FzZSgp
KTsKLSAgICAgICAgdGhpcy5idWlsZGVyLnNldExhYmVsKAotICAgICAgICAgICAgICAgIERlc2Ny
aXB0b3JQcm90b3MuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwudmFsdWVPZigiTEFCRUxfIiAr
IGxhYmVsTmFtZS50b1VwcGVyQ2FzZSgpKSk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRp
bWUuZ2V0TmlsKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAg
ICAgRmllbGREZXNjcmlwdG9yLm5hbWUgPT4gbmFtZQotICAgICAqCi0gICAgICogUmV0dXJucyB0
aGUgbmFtZSBvZiB0aGlzIGZpZWxkIGFzIGEgUnVieSBTdHJpbmcsIG9yIG5pbCBpZiBpdCBpcyBu
b3Qgc2V0LgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gIm5hbWUiKQotICAgIHB1
YmxpYyBJUnVieU9iamVjdCBnZXROYW1lKFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAgICAg
ICByZXR1cm4gdGhpcy5uYW1lOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0g
ICAgICogICAgIEZpZWxkRGVzY3JpcHRvci5uYW1lID0gbmFtZQotICAgICAqCi0gICAgICogU2V0
cyB0aGUgbmFtZSBvZiB0aGlzIGZpZWxkLiBDYW5ub3QgYmUgY2FsbGVkIG9uY2UgdGhlIGNvbnRh
aW5pbmcgbWVzc2FnZQotICAgICAqIHR5cGUsIGlmIGFueSwgaXMgYWRkZWQgdG8gYSBwb29sLgot
ICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gIm5hbWU9IikKLSAgICBwdWJsaWMgSVJ1
YnlPYmplY3Qgc2V0TmFtZShUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IHZhbHVl
KSB7Ci0gICAgICAgIFN0cmluZyBuYW1lU3RyID0gdmFsdWUuYXNKYXZhU3RyaW5nKCk7Ci0gICAg
ICAgIHRoaXMubmFtZSA9IGNvbnRleHQucnVudGltZS5uZXdTdHJpbmcobmFtZVN0cik7Ci0gICAg
ICAgIHRoaXMuYnVpbGRlci5zZXROYW1lKFV0aWxzLmVzY2FwZUlkZW50aWZpZXIobmFtZVN0cikp
OwotICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLmdldE5pbCgpOwotICAgIH0KLQotCi0g
ICAgQEpSdWJ5TWV0aG9kKG5hbWUgPSAic3VidHlwZSIpCi0gICAgcHVibGljIElSdWJ5T2JqZWN0
IGdldFN1YlR5cGUoVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBzdWJU
eXBlOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIEZpZWxk
RGVzY3JpcHRvci50eXBlID0+IHR5cGUKLSAgICAgKgotICAgICAqIFJldHVybnMgdGhpcyBmaWVs
ZCdzIHR5cGUsIGFzIGEgUnVieSBzeW1ib2wsIG9yIG5pbCBpZiBub3QgeWV0IHNldC4KLSAgICAg
KgotICAgICAqIFZhbGlkIGZpZWxkIHR5cGVzIGFyZToKLSAgICAgKiAgICAgOmludDMyLCA6aW50
NjQsIDp1aW50MzIsIDp1aW50NjQsIDpmbG9hdCwgOmRvdWJsZSwgOmJvb2wsIDpzdHJpbmcsCi0g
ICAgICogICAgIDpieXRlcywgOm1lc3NhZ2UuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kKG5h
bWUgPSAidHlwZSIpCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGdldFR5cGUoVGhyZWFkQ29udGV4
dCBjb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBVdGlscy5maWVsZFR5cGVUb1J1YnkoY29udGV4
dCwgdGhpcy5idWlsZGVyLmdldFR5cGUoKSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxs
LXNlcToKLSAgICAgKiAgICAgRmllbGREZXNjcmlwdG9yLnR5cGUgPSB0eXBlCi0gICAgICoKLSAg
ICAgKiBTZXRzIHRoaXMgZmllbGQncyB0eXBlLiBDYW5ub3QgYmUgY2FsbGVkIGlmIGZpZWxkIGlz
IHBhcnQgb2YgYSBtZXNzYWdlIHR5cGUKLSAgICAgKiBhbHJlYWR5IGluIGEgcG9vbC4KLSAgICAg
Ki8KLSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICJ0eXBlPSIpCi0gICAgcHVibGljIElSdWJ5T2Jq
ZWN0IHNldFR5cGUoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCB2YWx1ZSkgewot
ICAgICAgICB0aGlzLmJ1aWxkZXIuc2V0VHlwZShEZXNjcmlwdG9yUHJvdG9zLkZpZWxkRGVzY3Jp
cHRvclByb3RvLlR5cGUudmFsdWVPZigiVFlQRV8iICsgdmFsdWUuYXNKYXZhU3RyaW5nKCkudG9V
cHBlckNhc2UoKSkpOwotICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLmdldE5pbCgpOwot
ICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIEZpZWxkRGVzY3Jp
cHRvci5udW1iZXIgPT4gbnVtYmVyCi0gICAgICoKLSAgICAgKiBSZXR1cm5zIHRoaXMgZmllbGQn
cyBudW1iZXIsIGFzIGEgUnVieSBJbnRlZ2VyLCBvciBuaWwgaWYgbm90IHlldCBzZXQuCi0gICAg
ICoKLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICJudW1iZXIiKQotICAgIHB1Ymxp
YyBJUnVieU9iamVjdCBnZXRudW1iZXIoVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAg
IHJldHVybiB0aGlzLm51bWJlcjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgot
ICAgICAqICAgICBGaWVsZERlc2NyaXB0b3IubnVtYmVyID0gbnVtYmVyCi0gICAgICoKLSAgICAg
KiBTZXRzIHRoZSB0YWcgbnVtYmVyIGZvciB0aGlzIGZpZWxkLiBDYW5ub3QgYmUgY2FsbGVkIGlm
IGZpZWxkIGlzIHBhcnQgb2YgYQotICAgICAqIG1lc3NhZ2UgdHlwZSBhbHJlYWR5IGluIGEgcG9v
bC4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICJudW1iZXI9IikKLSAgICBwdWJs
aWMgSVJ1YnlPYmplY3Qgc2V0TnVtYmVyKFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmpl
Y3QgdmFsdWUpIHsKLSAgICAgICAgdGhpcy5udW1iZXIgPSB2YWx1ZTsKLSAgICAgICAgdGhpcy5i
dWlsZGVyLnNldE51bWJlcihSdWJ5TnVtZXJpYy5udW0yaW50KHZhbHVlKSk7Ci0gICAgICAgIHJl
dHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBj
YWxsLXNlcToKLSAgICAgKiAgICAgRmllbGREZXNjcmlwdG9yLnN1Ym1zZ19uYW1lID0gc3VibXNn
X25hbWUKLSAgICAgKgotICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2Ugb3IgZW51
bSB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBmaWVsZCwgaWYgaXQKLSAgICAgKiBpcyBhIG1l
c3NhZ2Ugb3IgZW51bSBmaWVsZCAocmVzcGVjdGl2ZWx5KS4gVGhpcyB0eXBlIG5hbWUgd2lsbCBi
ZSByZXNvbHZlZAotICAgICAqIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgcG9vbCB0byB3aGlj
aCB0aGUgY29udGFpbmluZyBtZXNzYWdlIHR5cGUgaXMgYWRkZWQuCi0gICAgICogQ2Fubm90IGJl
IGNhbGxlZCBvbiBmaWVsZCB0aGF0IGFyZSBub3Qgb2YgbWVzc2FnZSBvciBlbnVtIHR5cGUsIG9y
IG9uIGZpZWxkcwotICAgICAqIHRoYXQgYXJlIHBhcnQgb2YgYSBtZXNzYWdlIHR5cGUgYWxyZWFk
eSBhZGRlZCB0byBhIHBvb2wuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kKG5hbWUgPSAic3Vi
bXNnX25hbWU9IikKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3Qgc2V0U3VibXNnTmFtZShUaHJlYWRD
b250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IG5hbWUpIHsKLSAgICAgICAgdGhpcy5idWlsZGVy
LnNldFR5cGVOYW1lKCIuIiArIFV0aWxzLmVzY2FwZUlkZW50aWZpZXIobmFtZS5hc0phdmFTdHJp
bmcoKSkpOwotICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLmdldE5pbCgpOwotICAgIH0K
LQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIEZpZWxkRGVzY3JpcHRvci5n
ZXQobWVzc2FnZSkgPT4gdmFsdWUKLSAgICAgKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHNl
dCBmb3IgdGhpcyBmaWVsZCBvbiB0aGUgZ2l2ZW4gbWVzc2FnZS4gUmFpc2VzIGFuCi0gICAgICog
ZXhjZXB0aW9uIGlmIG1lc3NhZ2UgaXMgb2YgdGhlIHdyb25nIHR5cGUuCi0gICAgICovCi0gICAg
QEpSdWJ5TWV0aG9kKG5hbWUgPSAiZ2V0IikKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgZ2V0VmFs
dWUoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCBtc2dSYikgewotICAgICAgICBS
dWJ5TWVzc2FnZSBtZXNzYWdlID0gKFJ1YnlNZXNzYWdlKSBtc2dSYjsKLSAgICAgICAgaWYgKG1l
c3NhZ2UuZ2V0RGVzY3JpcHRvcigpICE9IGZpZWxkRGVmLmdldENvbnRhaW5pbmdUeXBlKCkpIHsK
LSAgICAgICAgICAgIHRocm93IGNvbnRleHQucnVudGltZS5uZXdUeXBlRXJyb3IoInNldCBtZXRo
b2QgY2FsbGVkIG9uIHdyb25nIG1lc3NhZ2UgdHlwZSIpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBtZXNzYWdlLmdldEZpZWxkKGNvbnRleHQsIGZpZWxkRGVmKTsKLSAgICB9Ci0KLSAgICAv
KgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBGaWVsZERlc2NyaXB0b3Iuc2V0KG1lc3Nh
Z2UsIHZhbHVlKQotICAgICAqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0
byB0aGlzIGZpZWxkIHRvIHRoZSBnaXZlbiB2YWx1ZSBvbiB0aGUgZ2l2ZW4KLSAgICAgKiBtZXNz
YWdlLiBSYWlzZXMgYW4gZXhjZXB0aW9uIGlmIG1lc3NhZ2UgaXMgb2YgdGhlIHdyb25nIHR5cGUu
IFBlcmZvcm1zIHRoZQotICAgICAqIG9yZGluYXJ5IHR5cGUtY2hlY2tzIGZvciBmaWVsZCBzZXR0
aW5nLgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gInNldCIpCi0gICAgcHVibGlj
IElSdWJ5T2JqZWN0IHNldFZhbHVlKFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3Qg
bXNnUmIsIElSdWJ5T2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIFJ1YnlNZXNzYWdlIG1lc3NhZ2Ug
PSAoUnVieU1lc3NhZ2UpIG1zZ1JiOwotICAgICAgICBpZiAobWVzc2FnZS5nZXREZXNjcmlwdG9y
KCkgIT0gZmllbGREZWYuZ2V0Q29udGFpbmluZ1R5cGUoKSkgewotICAgICAgICAgICAgdGhyb3cg
Y29udGV4dC5ydW50aW1lLm5ld1R5cGVFcnJvcigic2V0IG1ldGhvZCBjYWxsZWQgb24gd3Jvbmcg
bWVzc2FnZSB0eXBlIik7Ci0gICAgICAgIH0KLSAgICAgICAgbWVzc2FnZS5zZXRGaWVsZChjb250
ZXh0LCBmaWVsZERlZiwgdmFsdWUpOwotICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLmdl
dE5pbCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldFN1YlR5cGUoSVJ1YnlPYmpl
Y3QgcnVieURlc2NyaXB0b3IpIHsKLSAgICAgICAgdGhpcy5zdWJUeXBlID0gcnVieURlc2NyaXB0
b3I7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0RmllbGREZWYoRGVzY3JpcHRvcnMu
RmllbGREZXNjcmlwdG9yIGZpZWxkRGVzY3JpcHRvcikgewotICAgICAgICB0aGlzLmZpZWxkRGVm
ID0gZmllbGREZXNjcmlwdG9yOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldE9uZW9m
TmFtZShJUnVieU9iamVjdCBuYW1lKSB7Ci0gICAgICAgIG9uZW9mTmFtZSA9IG5hbWU7Ci0gICAg
fQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0T25lb2ZJbmRleChpbnQgaW5kZXgpIHsKLSAgICAg
ICAgaGFzT25lb2ZJbmRleCA9IHRydWU7Ci0gICAgICAgIG9uZW9mSW5kZXggPSBpbmRleDsKLSAg
ICB9Ci0KLSAgICBwcm90ZWN0ZWQgSVJ1YnlPYmplY3QgZ2V0T25lb2ZOYW1lKCkgewotICAgICAg
ICByZXR1cm4gb25lb2ZOYW1lOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBEZXNjcmlwdG9ycy5G
aWVsZERlc2NyaXB0b3IgZ2V0RmllbGREZWYoKSB7Ci0gICAgICAgIHJldHVybiBmaWVsZERlZjsK
LSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgRGVzY3JpcHRvclByb3Rvcy5GaWVsZERlc2NyaXB0b3JQ
cm90byBidWlsZCgpIHsKLSAgICAgICAgaWYgKGhhc09uZW9mSW5kZXgpCi0gICAgICAgICAgICBi
dWlsZGVyLnNldE9uZW9mSW5kZXgob25lb2ZJbmRleCk7Ci0gICAgICAgIHJldHVybiB0aGlzLmJ1
aWxkZXIuYnVpbGQoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIERlc2NyaXB0b3JQcm90b3MuRmll
bGREZXNjcmlwdG9yUHJvdG8uQnVpbGRlciBidWlsZGVyOwotICAgIHByaXZhdGUgSVJ1YnlPYmpl
Y3QgbmFtZTsKLSAgICBwcml2YXRlIElSdWJ5T2JqZWN0IGxhYmVsOwotICAgIHByaXZhdGUgSVJ1
YnlPYmplY3QgbnVtYmVyOwotICAgIHByaXZhdGUgSVJ1YnlPYmplY3Qgc3ViVHlwZTsKLSAgICBw
cml2YXRlIElSdWJ5T2JqZWN0IG9uZW9mTmFtZTsKLSAgICBwcml2YXRlIERlc2NyaXB0b3JzLkZp
ZWxkRGVzY3JpcHRvciBmaWVsZERlZjsKLSAgICBwcml2YXRlIGludCBvbmVvZkluZGV4OwotICAg
IHByaXZhdGUgYm9vbGVhbiBoYXNPbmVvZkluZGV4ID0gZmFsc2U7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1
Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlNYXAuamF2YSBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
cnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieU1hcC5qYXZh
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDRjMDNiNTY3ZWE3MGI2YTlmMzY4MWJm
NGRmMjRlZGUwMWY2ZjUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieU1h
cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qCi0gKiBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSAqIENvcHlyaWdodCAy
MDE0IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWYu
anJ1Ynk7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzOwotaW1wb3J0
IGNvbS5nb29nbGUucHJvdG9idWYuRHluYW1pY01lc3NhZ2U7Ci1pbXBvcnQgY29tLmdvb2dsZS5w
cm90b2J1Zi5NYXBFbnRyeTsKLWltcG9ydCBvcmcuanJ1YnkuKjsKLWltcG9ydCBvcmcuanJ1Ynku
YW5uby5KUnVieUNsYXNzOwotaW1wb3J0IG9yZy5qcnVieS5hbm5vLkpSdWJ5TWV0aG9kOwotaW1w
b3J0IG9yZy5qcnVieS5pbnRlcm5hbC5ydW50aW1lLm1ldGhvZHMuRHluYW1pY01ldGhvZDsKLWlt
cG9ydCBvcmcuanJ1YnkucnVudGltZS5CbG9jazsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5P
YmplY3RBbGxvY2F0b3I7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuVGhyZWFkQ29udGV4dDsK
LWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5idWlsdGluLklSdWJ5T2JqZWN0OwotaW1wb3J0IG9y
Zy5qcnVieS51dGlsLkJ5dGVMaXN0OwotCi1pbXBvcnQgamF2YS5zZWN1cml0eS5NZXNzYWdlRGln
ZXN0OwotaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOwotaW1w
b3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBv
cnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotQEpSdWJ5Q2xhc3Mo
bmFtZSA9ICJNYXAiLCBpbmNsdWRlID0gIkVudW1lcmFibGUiKQotcHVibGljIGNsYXNzIFJ1YnlN
YXAgZXh0ZW5kcyBSdWJ5T2JqZWN0IHsKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlUnVi
eU1hcChSdWJ5IHJ1bnRpbWUpIHsKLSAgICAgICAgUnVieU1vZHVsZSBwcm90b2J1ZiA9IHJ1bnRp
bWUuZ2V0Q2xhc3NGcm9tUGF0aCgiR29vZ2xlOjpQcm90b2J1ZiIpOwotICAgICAgICBSdWJ5Q2xh
c3MgY01hcCA9IHByb3RvYnVmLmRlZmluZUNsYXNzVW5kZXIoIk1hcCIsIHJ1bnRpbWUuZ2V0T2Jq
ZWN0KCksIG5ldyBPYmplY3RBbGxvY2F0b3IoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAg
ICAgICAgICAgIHB1YmxpYyBJUnVieU9iamVjdCBhbGxvY2F0ZShSdWJ5IHJ1YnksIFJ1YnlDbGFz
cyBydWJ5Q2xhc3MpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1YnlNYXAocnVieSwg
cnVieUNsYXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGNNYXAuaW5j
bHVkZU1vZHVsZShydW50aW1lLmdldEVudW1lcmFibGUoKSk7Ci0gICAgICAgIGNNYXAuZGVmaW5l
QW5ub3RhdGVkTWV0aG9kcyhSdWJ5TWFwLmNsYXNzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUnVi
eU1hcChSdWJ5IHJ1YnksIFJ1YnlDbGFzcyBydWJ5Q2xhc3MpIHsKLSAgICAgICAgc3VwZXIocnVi
eSwgcnVieUNsYXNzKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAq
ICAgICBNYXAubmV3KGtleV90eXBlLCB2YWx1ZV90eXBlLCB2YWx1ZV90eXBlY2xhc3MgPSBuaWws
IGluaXRfaGFzaG1hcCA9IHt9KQotICAgICAqICAgICA9PiBuZXcgbWFwCi0gICAgICoKLSAgICAg
KiBBbGxvY2F0ZXMgYSBuZXcgTWFwIGNvbnRhaW5lci4gVGhpcyBjb25zdHJ1Y3RvciBtYXkgYmUg
Y2FsbGVkIHdpdGggMiwgMywgb3IgNAotICAgICAqIGFyZ3VtZW50cy4gVGhlIGZpcnN0IHR3byBh
cmd1bWVudHMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBhcmUgc3ltYm9scyAodGFraW5nCi0gICAg
ICogb24gdGhlIHNhbWUgdmFsdWVzIGFzIGZpZWxkLXR5cGUgc3ltYm9scyBpbiBtZXNzYWdlIGRl
c2NyaXB0b3JzKSB0aGF0Ci0gICAgICogaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIG1hcCBrZXkg
YW5kIHZhbHVlIGZpZWxkcy4KLSAgICAgKgotICAgICAqIFRoZSBzdXBwb3J0ZWQga2V5IHR5cGVz
IGFyZTogOmludDMyLCA6aW50NjQsIDp1aW50MzIsIDp1aW50NjQsIDpib29sLAotICAgICAqIDpz
dHJpbmcsIDpieXRlcy4KLSAgICAgKgotICAgICAqIFRoZSBzdXBwb3J0ZWQgdmFsdWUgdHlwZXMg
YXJlOiA6aW50MzIsIDppbnQ2NCwgOnVpbnQzMiwgOnVpbnQ2NCwgOmJvb2wsCi0gICAgICogOnN0
cmluZywgOmJ5dGVzLCA6ZW51bSwgOm1lc3NhZ2UuCi0gICAgICoKLSAgICAgKiBUaGUgdGhpcmQg
YXJndW1lbnQsIHZhbHVlX3R5cGVjbGFzcywgbXVzdCBiZSBwcmVzZW50IGlmIHZhbHVlX3R5cGUg
aXMgOmVudW0KLSAgICAgKiBvciA6bWVzc2FnZS4gQXMgaW4gUmVwZWF0ZWRGaWVsZCNuZXcsIHRo
aXMgYXJndW1lbnQgbXVzdCBiZSBhIG1lc3NhZ2UgY2xhc3MKLSAgICAgKiAoZm9yIDptZXNzYWdl
KSBvciBlbnVtIG1vZHVsZSAoZm9yIDplbnVtKS4KLSAgICAgKgotICAgICAqIFRoZSBsYXN0IGFy
Z3VtZW50LCBpZiBwcmVzZW50LCBwcm92aWRlcyBpbml0aWFsIGNvbnRlbnQgZm9yIG1hcC4gTm90
ZSB0aGF0Ci0gICAgICogdGhpcyBtYXkgYmUgYW4gb3JkaW5hcnkgUnVieSBoYXNobWFwIG9yIGFu
b3RoZXIgTWFwIGluc3RhbmNlIHdpdGggaWRlbnRpY2FsCi0gICAgICoga2V5IGFuZCB2YWx1ZSB0
eXBlcy4gQWxzbyBub3RlIHRoYXQgdGhpcyBhcmd1bWVudCBtYXkgYmUgcHJlc2VudCB3aGV0aGVy
IG9yCi0gICAgICogbm90IHZhbHVlX3R5cGVjbGFzcyBpcyBwcmVzZW50IChhbmQgaXQgaXMgdW5h
bWJpZ3VvdXNseSBzZXBhcmF0ZSBmcm9tCi0gICAgICogdmFsdWVfdHlwZWNsYXNzIGJlY2F1c2Ug
dmFsdWVfdHlwZWNsYXNzJ3MgcHJlc2VuY2UgaXMgc3RyaWN0bHkgZGV0ZXJtaW5lZCBieQotICAg
ICAqIHZhbHVlX3R5cGUpLiBUaGUgY29udGVudHMgb2YgdGhpcyBpbml0aWFsIGhhc2htYXAgb3Ig
TWFwIGluc3RhbmNlIGFyZQotICAgICAqIHNoYWxsb3ctY29waWVkIGludG8gdGhlIG5ldyBNYXA6
IHRoZSBvcmlnaW5hbCBtYXAgaXMgdW5tb2RpZmllZCwgYnV0Ci0gICAgICogcmVmZXJlbmNlcyB0
byB1bmRlcmx5aW5nIG9iamVjdHMgd2lsbCBiZSBzaGFyZWQgaWYgdGhlIHZhbHVlIHR5cGUgaXMg
YQotICAgICAqIG1lc3NhZ2UgdHlwZS4KLSAgICAgKi8KLQotICAgIEBKUnVieU1ldGhvZChyZXF1
aXJlZCA9IDIsIG9wdGlvbmFsID0gMikKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgaW5pdGlhbGl6
ZShUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0W10gYXJncykgewotICAgICAgICB0
aGlzLnRhYmxlID0gbmV3IEhhc2hNYXA8SVJ1YnlPYmplY3QsIElSdWJ5T2JqZWN0PigpOwotICAg
ICAgICB0aGlzLmtleVR5cGUgPSBVdGlscy5ydWJ5VG9GaWVsZFR5cGUoYXJnc1swXSk7Ci0gICAg
ICAgIHRoaXMudmFsdWVUeXBlID0gVXRpbHMucnVieVRvRmllbGRUeXBlKGFyZ3NbMV0pOwotCi0g
ICAgICAgIHN3aXRjaChrZXlUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIElOVDMyOgotICAgICAg
ICAgICAgY2FzZSBJTlQ2NDoKLSAgICAgICAgICAgIGNhc2UgVUlOVDMyOgotICAgICAgICAgICAg
Y2FzZSBVSU5UNjQ6Ci0gICAgICAgICAgICBjYXNlIEJPT0w6Ci0gICAgICAgICAgICBjYXNlIFNU
UklORzoKLSAgICAgICAgICAgIGNhc2UgQllURVM6Ci0gICAgICAgICAgICAgICAgLy8gVGhlc2Ug
YXJlIE9LLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICB0aHJvdyBjb250ZXh0LnJ1bnRpbWUubmV3QXJndW1lbnRFcnJvcigiSW52
YWxpZCBrZXkgdHlwZSBmb3IgbWFwLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGluaXRW
YWx1ZUFyZyA9IDI7Ci0gICAgICAgIGlmIChuZWVkVHlwZWNsYXNzKHRoaXMudmFsdWVUeXBlKSAm
JiBhcmdzLmxlbmd0aCA+IDIpIHsKLSAgICAgICAgICAgIHRoaXMudmFsdWVUeXBlQ2xhc3MgPSBh
cmdzWzJdOwotICAgICAgICAgICAgVXRpbHMudmFsaWRhdGVUeXBlQ2xhc3MoY29udGV4dCwgdGhp
cy52YWx1ZVR5cGUsIHRoaXMudmFsdWVUeXBlQ2xhc3MpOwotICAgICAgICAgICAgaW5pdFZhbHVl
QXJnID0gMzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMudmFsdWVUeXBlQ2xh
c3MgPSBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsQ2xhc3MoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRhYmxlIHZhbHVlIHR5cGUgaXMgYWx3YXlzIFVJTlQ2NDogdGhpcyBlbnN1cmVzIGVub3Vn
aCBzcGFjZSB0byBzdG9yZSB0aGUKLSAgICAgICAgLy8gbmF0aXZlX3Nsb3QgdmFsdWUuCi0gICAg
ICAgIGlmIChhcmdzLmxlbmd0aCA+IGluaXRWYWx1ZUFyZykgewotICAgICAgICAgICAgbWVyZ2VJ
bnRvU2VsZihjb250ZXh0LCBhcmdzW2luaXRWYWx1ZUFyZ10pOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICog
ICAgIE1hcC5bXT0oa2V5LCB2YWx1ZSkgPT4gdmFsdWUKLSAgICAgKgotICAgICAqIEluc2VydHMg
b3Igb3ZlcndyaXRlcyB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleSB3aXRoIHRoZSBnaXZlbiBu
ZXcgdmFsdWUuCi0gICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUga2V5IHR5cGUgaXMg
aW5jb3JyZWN0LiBSZXR1cm5zIHRoZSBuZXcgdmFsdWUgdGhhdAotICAgICAqIHdhcyBqdXN0IGlu
c2VydGVkLgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gIltdPSIpCi0gICAgcHVi
bGljIElSdWJ5T2JqZWN0IGluZGV4U2V0KFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmpl
Y3Qga2V5LCBJUnVieU9iamVjdCB2YWx1ZSkgewotICAgICAgICBVdGlscy5jaGVja1R5cGUoY29u
dGV4dCwga2V5VHlwZSwga2V5LCAoUnVieU1vZHVsZSkgdmFsdWVUeXBlQ2xhc3MpOwotICAgICAg
ICBVdGlscy5jaGVja1R5cGUoY29udGV4dCwgdmFsdWVUeXBlLCB2YWx1ZSwgKFJ1YnlNb2R1bGUp
IHZhbHVlVHlwZUNsYXNzKTsKLSAgICAgICAgSVJ1YnlPYmplY3Qgc3ltYm9sOwotICAgICAgICBp
ZiAodmFsdWVUeXBlID09IERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvci5UeXBlLkVOVU0gJiYK
LSAgICAgICAgICAgICAgICBVdGlscy5pc1J1YnlOdW0odmFsdWUpICYmCi0gICAgICAgICAgICAg
ICAgISAoc3ltYm9sID0gUnVieUVudW0ubG9va3VwKGNvbnRleHQsIHZhbHVlVHlwZUNsYXNzLCB2
YWx1ZSkpLmlzTmlsKCkpIHsKLSAgICAgICAgICAgIHZhbHVlID0gc3ltYm9sOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXMudGFibGUucHV0KGtleSwgdmFsdWUpOwotICAgICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgTWFwLltd
KGtleSkgPT4gdmFsdWUKLSAgICAgKgotICAgICAqIEFjY2Vzc2VzIHRoZSBlbGVtZW50IGF0IHRo
ZSBnaXZlbiBrZXkuIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIGtleSB0eXBlIGlzCi0gICAg
ICogaW5jb3JyZWN0LiBSZXR1cm5zIG5pbCB3aGVuIHRoZSBrZXkgaXMgbm90IHByZXNlbnQgaW4g
dGhlIG1hcC4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICJbXSIpCi0gICAgcHVi
bGljIElSdWJ5T2JqZWN0IGluZGV4KFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3Qg
a2V5KSB7Ci0gICAgICAgIGlmICh0YWJsZS5jb250YWluc0tleShrZXkpKQotICAgICAgICAgICAg
cmV0dXJuIHRoaXMudGFibGUuZ2V0KGtleSk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRp
bWUuZ2V0TmlsKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAg
ICAgTWFwLj09KG90aGVyKSA9PiBib29sZWFuCi0gICAgICoKLSAgICAgKiBDb21wYXJlcyB0aGlz
IG1hcCB0byBhbm90aGVyLiBNYXBzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgaWRlbnRpY2FsIGtl
eSBzZXRzLAotICAgICAqIGFuZCBmb3IgZWFjaCBrZXksIHRoZSB2YWx1ZXMgaW4gYm90aCBtYXBz
IGNvbXBhcmUgZXF1YWwuIEVsZW1lbnRzIGFyZQotICAgICAqIGNvbXBhcmVkIGFzIHBlciBub3Jt
YWwgUnVieSBzZW1hbnRpY3MsIGJ5IGNhbGxpbmcgdGhlaXIgOj09IG1ldGhvZHMgKG9yCi0gICAg
ICogcGVyZm9ybWluZyBhIG1vcmUgZWZmaWNpZW50IGNvbXBhcmlzb24gZm9yIHByaW1pdGl2ZSB0
eXBlcykuCi0gICAgICoKLSAgICAgKiBNYXBzIHdpdGggZGlzc2ltaWxhciBrZXkgdHlwZXMgb3Ig
dmFsdWUgdHlwZXMvdHlwZWNsYXNzZXMgYXJlIG5ldmVyIGVxdWFsLAotICAgICAqIGV2ZW4gaWYg
dmFsdWUgY29tcGFyaXNvbiAoZm9yIGV4YW1wbGUsIGJldHdlZW4gaW50ZWdlcnMgYW5kIGZsb2F0
cykgd291bGQKLSAgICAgKiBoYXZlIG90aGVyd2lzZSBpbmRpY2F0ZWQgdGhhdCBldmVyeSBlbGVt
ZW50IGhhcyBlcXVhbCB2YWx1ZS4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICI9
PSIpCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGVxKFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1
YnlPYmplY3QgX290aGVyKSB7Ci0gICAgICAgIGlmIChfb3RoZXIgaW5zdGFuY2VvZiBSdWJ5SGFz
aCkKLSAgICAgICAgICAgIHJldHVybiB0b0hhc2goY29udGV4dCkub3BfZXF1YWwoY29udGV4dCwg
X290aGVyKTsKLSAgICAgICAgUnVieU1hcCBvdGhlciA9IChSdWJ5TWFwKSBfb3RoZXI7Ci0gICAg
ICAgIGlmICh0aGlzID09IG90aGVyKSByZXR1cm4gY29udGV4dC5ydW50aW1lLmdldFRydWUoKTsK
LSAgICAgICAgaWYgKCF0eXBlQ29tcGF0aWJsZShvdGhlcikgfHwgdGhpcy50YWJsZS5zaXplKCkg
IT0gb3RoZXIudGFibGUuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucnVudGlt
ZS5nZXRGYWxzZSgpOwotICAgICAgICBmb3IgKElSdWJ5T2JqZWN0IGtleSA6IHRhYmxlLmtleVNl
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoISBvdGhlci50YWJsZS5jb250YWluc0tleShrZXkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0RmFsc2UoKTsKLSAgICAg
ICAgICAgIGlmICghIG90aGVyLnRhYmxlLmdldChrZXkpLmVxdWFscyh0YWJsZS5nZXQoa2V5KSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucnVudGltZS5nZXRGYWxzZSgpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0VHJ1ZSgpOwotICAgIH0K
LQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIE1hcC5pbnNwZWN0ID0+IHN0
cmluZwotICAgICAqCi0gICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBt
YXAncyBlbGVtZW50cy4gSXQgd2lsbCBiZSBmb3JtYXR0ZWQgYXMKLSAgICAgKiAie2tleSA9PiB2
YWx1ZSwga2V5ID0+IHZhbHVlLCAuLi59Iiwgd2l0aCBlYWNoIGtleSBhbmQgdmFsdWUgc3RyaW5n
Ci0gICAgICogcmVwcmVzZW50YXRpb24gY29tcHV0ZWQgYnkgaXRzIG93biAjaW5zcGVjdCBtZXRo
b2QuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGlu
c3BlY3QoKSB7Ci0gICAgICAgIHJldHVybiB0b0hhc2goZ2V0UnVudGltZSgpLmdldEN1cnJlbnRD
b250ZXh0KCkpLmluc3BlY3QoKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgot
ICAgICAqICAgICBNYXAuaGFzaCA9PiBoYXNoX3ZhbHVlCi0gICAgICoKLSAgICAgKiBSZXR1cm5z
IGEgaGFzaCB2YWx1ZSBiYXNlZCBvbiB0aGlzIG1hcCdzIGNvbnRlbnRzLgotICAgICAqLwotICAg
IEBKUnVieU1ldGhvZAotICAgIHB1YmxpYyBJUnVieU9iamVjdCBoYXNoKFRocmVhZENvbnRleHQg
Y29udGV4dCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgTWVzc2FnZURpZ2VzdCBkaWdl
c3QgPSBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJTSEEtMjU2Iik7Ci0gICAgICAgICAgICBm
b3IgKElSdWJ5T2JqZWN0IGtleSA6IHRhYmxlLmtleVNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
ZGlnZXN0LnVwZGF0ZSgoYnl0ZSkga2V5Lmhhc2hDb2RlKCkpOwotICAgICAgICAgICAgICAgIGRp
Z2VzdC51cGRhdGUoKGJ5dGUpIHRhYmxlLmdldChrZXkpLmhhc2hDb2RlKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucnVudGltZS5uZXdTdHJpbmcobmV3IEJ5
dGVMaXN0KGRpZ2VzdC5kaWdlc3QoKSkpOwotICAgICAgICB9IGNhdGNoIChOb1N1Y2hBbGdvcml0
aG1FeGNlcHRpb24gaWdub3JlKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1l
Lm5ld0ZpeG51bShTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZSh0YWJsZSkpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgTWFwLmtleXMgPT4g
W2xpc3Rfb2Zfa2V5c10KLSAgICAgKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2Yga2V5cyBj
b250YWluZWQgaW4gdGhlIG1hcCwgaW4gdW5zcGVjaWZpZWQgb3JkZXIuCi0gICAgICovCi0gICAg
QEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGtleXMoVGhyZWFkQ29udGV4dCBj
b250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBSdWJ5QXJyYXkubmV3QXJyYXkoY29udGV4dC5ydW50
aW1lLCB0YWJsZS5rZXlTZXQoKSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToK
LSAgICAgKiAgICAgTWFwLnZhbHVlcyA9PiBbbGlzdF9vZl92YWx1ZXNdCi0gICAgICoKLSAgICAg
KiBSZXR1cm5zIHRoZSBsaXN0IG9mIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIG1hcCwgaW4gdW5z
cGVjaWZpZWQgb3JkZXIuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElS
dWJ5T2JqZWN0IHZhbHVlcyhUaHJlYWRDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJu
IFJ1YnlBcnJheS5uZXdBcnJheShjb250ZXh0LnJ1bnRpbWUsIHRhYmxlLnZhbHVlcygpKTsKLSAg
ICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBNYXAuY2xlYXIKLSAg
ICAgKgotICAgICAqIFJlbW92ZXMgYWxsIGVudHJpZXMgZnJvbSB0aGUgbWFwLgotICAgICAqLwot
ICAgIEBKUnVieU1ldGhvZAotICAgIHB1YmxpYyBJUnVieU9iamVjdCBjbGVhcihUaHJlYWRDb250
ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgdGFibGUuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIGNv
bnRleHQucnVudGltZS5nZXROaWwoKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2Vx
OgotICAgICAqICAgICBNYXAuZWFjaCgmYmxvY2spCi0gICAgICoKLSAgICAgKiBJbnZva2VzICZi
bG9jayBvbiBlYWNoIHxrZXksIHZhbHVlfCBwYWlyIGluIHRoZSBtYXAsIGluIHVuc3BlY2lmaWVk
IG9yZGVyLgotICAgICAqIE5vdGUgdGhhdCBNYXAgYWxzbyBpbmNsdWRlcyBFbnVtZXJhYmxlOyBt
YXAgdGh1cyBhY3RzIGxpa2UgYSBub3JtYWwgUnVieQotICAgICAqIHNlcXVlbmNlLgotICAgICAq
LwotICAgIEBKUnVieU1ldGhvZAotICAgIHB1YmxpYyBJUnVieU9iamVjdCBlYWNoKFRocmVhZENv
bnRleHQgY29udGV4dCwgQmxvY2sgYmxvY2spIHsKLSAgICAgICAgZm9yIChJUnVieU9iamVjdCBr
ZXkgOiB0YWJsZS5rZXlTZXQoKSkgewotICAgICAgICAgICAgYmxvY2sueWllbGRTcGVjaWZpYyhj
b250ZXh0LCBrZXksIHRhYmxlLmdldChrZXkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Y29udGV4dC5ydW50aW1lLmdldE5pbCgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1z
ZXE6Ci0gICAgICogICAgIE1hcC5kZWxldGUoa2V5KSA9PiBvbGRfdmFsdWUKLSAgICAgKgotICAg
ICAqIERlbGV0ZXMgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBrZXksIGlmIGFueSwgcmV0dXJuaW5n
IGVpdGhlciB0aGUgb2xkIHZhbHVlIG9yCi0gICAgICogbmlsIGlmIG5vbmUgd2FzIHByZXNlbnQu
IFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIGtleSBpcyBvZiB0aGUgd3JvbmcgdHlwZS4KLSAg
ICAgKi8KLSAgICBASlJ1YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgZGVsZXRlKFRo
cmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3Qga2V5KSB7Ci0gICAgICAgIHJldHVybiB0
YWJsZS5yZW1vdmUoa2V5KTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAg
ICAqICAgICBNYXAuaGFzX2tleT8oa2V5KSA9PiBib29sCi0gICAgICoKLSAgICAgKiBSZXR1cm5z
IHRydWUgaWYgdGhlIGdpdmVuIGtleSBpcyBwcmVzZW50IGluIHRoZSBtYXAuIFRocm93cyBhbiBl
eGNlcHRpb24gaWYKLSAgICAgKiB0aGUga2V5IGhhcyB0aGUgd3JvbmcgdHlwZS4KLSAgICAgKi8K
LSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICJoYXNfa2V5PyIpCi0gICAgcHVibGljIElSdWJ5T2Jq
ZWN0IGhhc0tleShUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IGtleSkgewotICAg
ICAgICByZXR1cm4gdGhpcy50YWJsZS5jb250YWluc0tleShrZXkpID8gY29udGV4dC5ydW50aW1l
LmdldFRydWUoKSA6IGNvbnRleHQucnVudGltZS5nZXRGYWxzZSgpOwotICAgIH0KLQotICAgIC8q
Ci0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIE1hcC5sZW5ndGgKLSAgICAgKgotICAgICAq
IFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIChrZXktdmFsdWUgcGFpcnMpIGluIHRoZSBt
YXAuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGxl
bmd0aChUaHJlYWRDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQucnVu
dGltZS5uZXdGaXhudW0odGhpcy50YWJsZS5zaXplKCkpOwotICAgIH0KLQotICAgIC8qCi0gICAg
ICogY2FsbC1zZXE6Ci0gICAgICogICAgIE1hcC5kdXAgPT4gbmV3X21hcAotICAgICAqCi0gICAg
ICogRHVwbGljYXRlcyB0aGlzIG1hcCB3aXRoIGEgc2hhbGxvdyBjb3B5LiBSZWZlcmVuY2VzIHRv
IGFsbCBub24tcHJpbWl0aXZlCi0gICAgICogZWxlbWVudCBvYmplY3RzIChlLmcuLCBzdWJtZXNz
YWdlcykgYXJlIHNoYXJlZC4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QKLSAgICBwdWJsaWMg
SVJ1YnlPYmplY3QgZHVwKFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAgICAgICBSdWJ5TWFw
IG5ld01hcCA9IG5ld1RoaXNUeXBlKGNvbnRleHQpOwotICAgICAgICBmb3IgKE1hcC5FbnRyeTxJ
UnVieU9iamVjdCwgSVJ1YnlPYmplY3Q+IGVudHJ5IDogdGFibGUuZW50cnlTZXQoKSkgewotICAg
ICAgICAgICAgbmV3TWFwLnRhYmxlLnB1dChlbnRyeS5nZXRLZXkoKSwgZW50cnkuZ2V0VmFsdWUo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ld01hcDsKLSAgICB9Ci0KLSAgICBASlJ1
YnlNZXRob2QobmFtZSA9IHsidG9faCIsICJ0b19oYXNoIn0pCi0gICAgcHVibGljIFJ1YnlIYXNo
IHRvSGFzaChUaHJlYWRDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIFJ1YnlIYXNo
Lm5ld0hhc2goY29udGV4dC5ydW50aW1lLCB0YWJsZSwgY29udGV4dC5ydW50aW1lLmdldE5pbCgp
KTsKLSAgICB9Ci0KLSAgICAvLyBVc2VkIGJ5IEdvb2dsZTo6UHJvdG9idWYuZGVlcF9jb3B5IGJ1
dCBub3QgZXhwb3NlZCBkaXJlY3RseS4KLSAgICBwcm90ZWN0ZWQgSVJ1YnlPYmplY3QgZGVlcENv
cHkoVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIFJ1YnlNYXAgbmV3TWFwID0gbmV3
VGhpc1R5cGUoY29udGV4dCk7Ci0gICAgICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7Ci0gICAgICAg
ICAgICBjYXNlIE1FU1NBR0U6Ci0gICAgICAgICAgICAgICAgZm9yIChJUnVieU9iamVjdCBrZXkg
OiB0YWJsZS5rZXlTZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBSdWJ5TWVzc2FnZSBtZXNz
YWdlID0gKFJ1YnlNZXNzYWdlKSB0YWJsZS5nZXQoa2V5KTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3TWFwLnRhYmxlLnB1dChrZXkuZHVwKCksIG1lc3NhZ2UuZGVlcENvcHkoY29udGV4dCkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgZm9yIChJUnVieU9iamVjdCBrZXkgOiB0YWJsZS5rZXlT
ZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBuZXdNYXAudGFibGUucHV0KGtleS5kdXAoKSwg
dGFibGUuZ2V0KGtleSkuZHVwKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gbmV3TWFwOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBMaXN0PER5bmFtaWNN
ZXNzYWdlPiBidWlsZChUaHJlYWRDb250ZXh0IGNvbnRleHQsIFJ1YnlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3IpIHsKLSAgICAgICAgTGlzdDxEeW5hbWljTWVzc2FnZT4gbGlzdCA9IG5ldyBBcnJheUxp
c3Q8RHluYW1pY01lc3NhZ2U+KCk7Ci0gICAgICAgIFJ1YnlDbGFzcyBydWJ5Q2xhc3MgPSAoUnVi
eUNsYXNzKSBkZXNjcmlwdG9yLm1zZ2NsYXNzKGNvbnRleHQpOwotICAgICAgICBEZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3Iga2V5RmllbGQgPSBkZXNjcmlwdG9yLmxvb2t1cCgia2V5IikuZ2V0
RmllbGREZWYoKTsKLSAgICAgICAgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIHZhbHVlRmll
bGQgPSBkZXNjcmlwdG9yLmxvb2t1cCgidmFsdWUiKS5nZXRGaWVsZERlZigpOwotICAgICAgICBm
b3IgKElSdWJ5T2JqZWN0IGtleSA6IHRhYmxlLmtleVNldCgpKSB7Ci0gICAgICAgICAgICBSdWJ5
TWVzc2FnZSBtYXBNZXNzYWdlID0gKFJ1YnlNZXNzYWdlKSBydWJ5Q2xhc3MubmV3SW5zdGFuY2Uo
Y29udGV4dCwgQmxvY2suTlVMTF9CTE9DSyk7Ci0gICAgICAgICAgICBtYXBNZXNzYWdlLnNldEZp
ZWxkKGNvbnRleHQsIGtleUZpZWxkLCBrZXkpOwotICAgICAgICAgICAgbWFwTWVzc2FnZS5zZXRG
aWVsZChjb250ZXh0LCB2YWx1ZUZpZWxkLCB0YWJsZS5nZXQoa2V5KSk7Ci0gICAgICAgICAgICBs
aXN0LmFkZChtYXBNZXNzYWdlLmJ1aWxkKGNvbnRleHQpKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgUnVieU1hcCBtZXJnZUludG9TZWxm
KGZpbmFsIFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3QgaGFzaG1hcCkgewotICAg
ICAgICBpZiAoaGFzaG1hcCBpbnN0YW5jZW9mIFJ1YnlIYXNoKSB7Ci0gICAgICAgICAgICAoKFJ1
YnlIYXNoKSBoYXNobWFwKS52aXNpdEFsbChuZXcgUnVieUhhc2guVmlzaXRvcigpIHsKLSAgICAg
ICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChJ
UnVieU9iamVjdCBrZXksIElSdWJ5T2JqZWN0IHZhbCkgewotICAgICAgICAgICAgICAgICAgICBp
bmRleFNldChjb250ZXh0LCBrZXksIHZhbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaGFzaG1hcCBpbnN0YW5jZW9mIFJ1YnlNYXApIHsK
LSAgICAgICAgICAgIFJ1YnlNYXAgb3RoZXIgPSAoUnVieU1hcCkgaGFzaG1hcDsKLSAgICAgICAg
ICAgIGlmICghdHlwZUNvbXBhdGlibGUob3RoZXIpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cg
Y29udGV4dC5ydW50aW1lLm5ld1R5cGVFcnJvcigiQXR0ZW1wdCB0byBtZXJnZSBNYXAgd2l0aCBt
aXNtYXRjaGluZyB0eXBlcyIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdGhyb3cgY29udGV4dC5ydW50aW1lLm5ld1R5cGVFcnJvcigiVW5rbm93biB0eXBl
IG1lcmdpbmcgaW50byBNYXAiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiB0eXBlQ29tcGF0aWJsZShSdWJ5TWFwIG90aGVy
KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmtleVR5cGUgPT0gb3RoZXIua2V5VHlwZSAmJgotICAg
ICAgICAgICAgICAgIHRoaXMudmFsdWVUeXBlID09IG90aGVyLnZhbHVlVHlwZSAmJgotICAgICAg
ICAgICAgICAgIHRoaXMudmFsdWVUeXBlQ2xhc3MgPT0gb3RoZXIudmFsdWVUeXBlQ2xhc3M7Ci0g
ICAgfQotCi0gICAgcHJpdmF0ZSBSdWJ5TWFwIG5ld1RoaXNUeXBlKFRocmVhZENvbnRleHQgY29u
dGV4dCkgewotICAgICAgICBSdWJ5TWFwIG5ld01hcDsKLSAgICAgICAgaWYgKG5lZWRUeXBlY2xh
c3ModmFsdWVUeXBlKSkgewotICAgICAgICAgICAgbmV3TWFwID0gKFJ1YnlNYXApIG1ldGFDbGFz
cy5uZXdJbnN0YW5jZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBVdGlscy5maWVsZFR5
cGVUb1J1YnkoY29udGV4dCwga2V5VHlwZSksCi0gICAgICAgICAgICAgICAgICAgIFV0aWxzLmZp
ZWxkVHlwZVRvUnVieShjb250ZXh0LCB2YWx1ZVR5cGUpLAotICAgICAgICAgICAgICAgICAgICB2
YWx1ZVR5cGVDbGFzcywgQmxvY2suTlVMTF9CTE9DSyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBuZXdNYXAgPSAoUnVieU1hcCkgbWV0YUNsYXNzLm5ld0luc3RhbmNlKGNvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgIFV0aWxzLmZpZWxkVHlwZVRvUnVieShjb250ZXh0LCBrZXlU
eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgVXRpbHMuZmllbGRUeXBlVG9SdWJ5KGNvbnRleHQs
IHZhbHVlVHlwZSksCi0gICAgICAgICAgICAgICAgICAgIEJsb2NrLk5VTExfQkxPQ0spOwotICAg
ICAgICB9Ci0gICAgICAgIG5ld01hcC50YWJsZSA9IG5ldyBIYXNoTWFwPElSdWJ5T2JqZWN0LCBJ
UnVieU9iamVjdD4oKTsKLSAgICAgICAgcmV0dXJuIG5ld01hcDsKLSAgICB9Ci0KLSAgICBwcml2
YXRlIGJvb2xlYW4gbmVlZFR5cGVjbGFzcyhEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IuVHlw
ZSB0eXBlKSB7Ci0gICAgICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIE1FU1NB
R0U6Ci0gICAgICAgICAgICBjYXNlIEVOVU06Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9y
LlR5cGUga2V5VHlwZTsKLSAgICBwcml2YXRlIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvci5U
eXBlIHZhbHVlVHlwZTsKLSAgICBwcml2YXRlIElSdWJ5T2JqZWN0IHZhbHVlVHlwZUNsYXNzOwot
ICAgIHByaXZhdGUgTWFwPElSdWJ5T2JqZWN0LCBJUnVieU9iamVjdD4gdGFibGU7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlN
ZXNzYWdlLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5
L1J1YnlNZXNzYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MjEzYzRk
MTY3MGFkYjk3Njc2YmZhNDE1NWE2Mjk4YWM4YzgxZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90
b2J1Zi9qcnVieS9SdWJ5TWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzY1ICswLDAg
QEAKLS8qCi0gKiBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLSAqIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1wYWNrYWdl
IGNvbS5nb29nbGUucHJvdG9idWYuanJ1Ynk7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVm
Lio7Ci1pbXBvcnQgb3JnLmpydWJ5Lio7Ci1pbXBvcnQgb3JnLmpydWJ5LmFubm8uSlJ1YnlNZXRo
b2Q7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuQmxvY2s7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1
bnRpbWUuSGVscGVyczsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5UaHJlYWRDb250ZXh0Owot
aW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLmJ1aWx0aW4uSVJ1YnlPYmplY3Q7Ci1pbXBvcnQgb3Jn
LmpydWJ5LnV0aWwuQnl0ZUxpc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9y
dCBqYXZhLnV0aWwuTWFwOwotCi1wdWJsaWMgY2xhc3MgUnVieU1lc3NhZ2UgZXh0ZW5kcyBSdWJ5
T2JqZWN0IHsKLSAgICBwdWJsaWMgUnVieU1lc3NhZ2UoUnVieSBydWJ5LCBSdWJ5Q2xhc3Mga2xh
enosIERlc2NyaXB0b3JzLkRlc2NyaXB0b3IgZGVzY3JpcHRvcikgewotICAgICAgICBzdXBlcihy
dWJ5LCBrbGF6eik7Ci0gICAgICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7Ci0gICAg
fQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgTWVzc2FnZS5uZXcoa3dh
cmdzKSA9PiBuZXdfbWVzc2FnZQotICAgICAqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5j
ZSBvZiB0aGUgZ2l2ZW4gbWVzc2FnZSBjbGFzcy4gS2V5d29yZCBhcmd1bWVudHMgbWF5IGJlCi0g
ICAgICogcHJvdmlkZWQgd2l0aCBrZXl3b3JkcyBjb3JyZXNwb25kaW5nIHRvIGZpZWxkIG5hbWVz
LgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IG5vIGxpdGVyYWwgTWVzc2FnZSBjbGFzcyBleGlz
dHMuIE9ubHkgY29uY3JldGUgY2xhc3NlcyBwZXIgbWVzc2FnZQotICAgICAqIHR5cGUgZXhpc3Qs
IGFzIHByb3ZpZGVkIGJ5IHRoZSAjbXNnY2xhc3MgbWV0aG9kIG9uIERlc2NyaXB0b3JzIGFmdGVy
IHRoZXkKLSAgICAgKiBoYXZlIGJlZW4gYWRkZWQgdG8gYSBwb29sLiBUaGUgbWV0aG9kIGRlZmlu
aXRpb25zIGRlc2NyaWJlZCBoZXJlIG9uIHRoZQotICAgICAqIE1lc3NhZ2UgY2xhc3MgYXJlIHBy
b3ZpZGVkIG9uIGVhY2ggY29uY3JldGUgbWVzc2FnZSBjbGFzcy4KLSAgICAgKi8KLSAgICBASlJ1
YnlNZXRob2Qob3B0aW9uYWwgPSAxKQotICAgIHB1YmxpYyBJUnVieU9iamVjdCBpbml0aWFsaXpl
KGZpbmFsIFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3RbXSBhcmdzKSB7Ci0gICAg
ICAgIGZpbmFsIFJ1YnkgcnVudGltZSA9IGNvbnRleHQucnVudGltZTsKLSAgICAgICAgdGhpcy5j
UmVwZWF0ZWRGaWVsZCA9IChSdWJ5Q2xhc3MpIHJ1bnRpbWUuZ2V0Q2xhc3NGcm9tUGF0aCgiR29v
Z2xlOjpQcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZCIpOwotICAgICAgICB0aGlzLmNNYXAgPSAoUnVi
eUNsYXNzKSBydW50aW1lLmdldENsYXNzRnJvbVBhdGgoIkdvb2dsZTo6UHJvdG9idWY6Ok1hcCIp
OwotICAgICAgICB0aGlzLmJ1aWxkZXIgPSBEeW5hbWljTWVzc2FnZS5uZXdCdWlsZGVyKHRoaXMu
ZGVzY3JpcHRvcik7Ci0gICAgICAgIHRoaXMucmVwZWF0ZWRGaWVsZHMgPSBuZXcgSGFzaE1hcDxE
ZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IsIFJ1YnlSZXBlYXRlZEZpZWxkPigpOwotICAgICAg
ICB0aGlzLm1hcHMgPSBuZXcgSGFzaE1hcDxEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IsIFJ1
YnlNYXA+KCk7Ci0gICAgICAgIHRoaXMuZmllbGRzID0gbmV3IEhhc2hNYXA8RGVzY3JpcHRvcnMu
RmllbGREZXNjcmlwdG9yLCBJUnVieU9iamVjdD4oKTsKLSAgICAgICAgdGhpcy5vbmVvZkNhc2Vz
ID0gbmV3IEhhc2hNYXA8RGVzY3JpcHRvcnMuT25lb2ZEZXNjcmlwdG9yLCBEZXNjcmlwdG9ycy5G
aWVsZERlc2NyaXB0b3I+KCk7Ci0gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7Ci0gICAg
ICAgICAgICBpZiAoIShhcmdzWzBdIGluc3RhbmNlb2YgUnVieUhhc2gpKSB7Ci0gICAgICAgICAg
ICAgICAgdGhyb3cgcnVudGltZS5uZXdBcmd1bWVudEVycm9yKCJleHBlY3RlZCBIYXNoIGFyZ3Vt
ZW50cy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJ1YnlIYXNoIGhhc2ggPSBhcmdz
WzBdLmNvbnZlcnRUb0hhc2goKTsKLSAgICAgICAgICAgIGhhc2gudmlzaXRBbGwobmV3IFJ1YnlI
YXNoLlZpc2l0b3IoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAg
ICAgcHVibGljIHZvaWQgdmlzaXQoSVJ1YnlPYmplY3Qga2V5LCBJUnVieU9iamVjdCB2YWx1ZSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBSdWJ5U3ltYm9sKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJ1bnRpbWUubmV3VHlwZUVycm9yKCJFeHBl
Y3RlZCBzeW1ib2xzIGFzIGhhc2gga2V5cyBpbiBpbml0aWFsaXphdGlvbiBtYXAuIik7Ci0gICAg
ICAgICAgICAgICAgICAgIGZpbmFsIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZERl
c2NyaXB0b3IgPSBmaW5kRmllbGQoY29udGV4dCwga2V5KTsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoVXRpbHMuaXNNYXBFbnRyeShmaWVsZERlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFJ1YnlIYXNoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBydW50aW1lLm5ld0FyZ3VtZW50RXJyb3IoIkV4cGVjdGVk
IEhhc2ggb2JqZWN0IGFzIGluaXRpYWxpemVyIHZhbHVlIGZvciBtYXAgZmllbGQgJyIgKyAga2V5
LmFzSmF2YVN0cmluZygpICsgIicuIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFs
IFJ1YnlNYXAgbWFwID0gbmV3TWFwRm9yRmllbGQoY29udGV4dCwgZmllbGREZXNjcmlwdG9yKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5tZXJnZUludG9TZWxmKGNvbnRleHQsIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHMucHV0KGZpZWxkRGVzY3JpcHRvciwgbWFw
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZERlc2NyaXB0b3IuaXNSZXBl
YXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9m
IFJ1YnlBcnJheSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcnVudGltZS5u
ZXdBcmd1bWVudEVycm9yKCJFeHBlY3RlZCBhcnJheSBhcyBpbml0aWFsaXplciB2YWx1ZSBmb3Ig
cmVwZWF0ZWQgZmllbGQgJyIgKyAga2V5LmFzSmF2YVN0cmluZygpICsgIicuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSdWJ5UmVwZWF0ZWRGaWVsZCByZXBlYXRlZEZpZWxkID0gcnVieVRv
UmVwZWF0ZWRGaWVsZChjb250ZXh0LCBmaWVsZERlc2NyaXB0b3IsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZFJlcGVhdGVkRmllbGQoZmllbGREZXNjcmlwdG9yLCByZXBlYXRl
ZEZpZWxkKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIERlc2NyaXB0b3JzLk9uZW9mRGVzY3JpcHRvciBvbmVvZiA9IGZpZWxkRGVzY3JpcHRv
ci5nZXRDb250YWluaW5nT25lb2YoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbmVv
ZiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lb2ZDYXNlcy5wdXQo
b25lb2YsIGZpZWxkRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHV0KGZpZWxkRGVzY3JpcHRvciwgdmFsdWUpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvKgotICAg
ICAqIGNhbGwtc2VxOgotICAgICAqICAgICBNZXNzYWdlLltdPShpbmRleCwgdmFsdWUpCi0gICAg
ICoKLSAgICAgKiBTZXRzIGEgZmllbGQncyB2YWx1ZSBieSBmaWVsZCBuYW1lLiBUaGUgcHJvdmlk
ZWQgZmllbGQgbmFtZSBzaG91bGQgYmUgYQotICAgICAqIHN0cmluZy4KLSAgICAgKi8KLSAgICBA
SlJ1YnlNZXRob2QobmFtZSA9ICJbXT0iKQotICAgIHB1YmxpYyBJUnVieU9iamVjdCBpbmRleFNl
dChUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IGZpZWxkTmFtZSwgSVJ1YnlPYmpl
Y3QgdmFsdWUpIHsKLSAgICAgICAgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkRGVz
Y3JpcHRvciA9IGZpbmRGaWVsZChjb250ZXh0LCBmaWVsZE5hbWUpOwotICAgICAgICByZXR1cm4g
c2V0RmllbGQoY29udGV4dCwgZmllbGREZXNjcmlwdG9yLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAg
LyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgTWVzc2FnZS5bXShpbmRleCkgPT4gdmFs
dWUKLSAgICAgKgotICAgICAqIEFjY2Vzc2VzIGEgZmllbGQncyB2YWx1ZSBieSBmaWVsZCBuYW1l
LiBUaGUgcHJvdmlkZWQgZmllbGQgbmFtZSBzaG91bGQgYmUgYQotICAgICAqIHN0cmluZy4KLSAg
ICAgKi8KLSAgICBASlJ1YnlNZXRob2QobmFtZSA9ICJbXSIpCi0gICAgcHVibGljIElSdWJ5T2Jq
ZWN0IGluZGV4KFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3QgZmllbGROYW1lKSB7
Ci0gICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZERlc2NyaXB0b3IgPSBm
aW5kRmllbGQoY29udGV4dCwgZmllbGROYW1lKTsKLSAgICAgICAgcmV0dXJuIGdldEZpZWxkKGNv
bnRleHQsIGZpZWxkRGVzY3JpcHRvcik7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNl
cToKLSAgICAgKiAgICAgTWVzc2FnZS5pbnNwZWN0ID0+IHN0cmluZwotICAgICAqCi0gICAgICog
UmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBtZXNzYWdl
LiBJdCB3aWxsIGJlCi0gICAgICogZm9ybWF0dGVkIGFzICI8TWVzc2FnZVR5cGU6IGZpZWxkMTog
dmFsdWUxLCBmaWVsZDI6IHZhbHVlMiwgLi4uPiIuIEVhY2gKLSAgICAgKiBmaWVsZCdzIHZhbHVl
IGlzIHJlcHJlc2VudGVkIGFjY29yZGluZyB0byBpdHMgb3duICNpbnNwZWN0IG1ldGhvZC4KLSAg
ICAgKi8KLSAgICBASlJ1YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgaW5zcGVjdCgp
IHsKLSAgICAgICAgU3RyaW5nIGNuYW1lID0gbWV0YUNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAg
U3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8Iik7Ci0gICAgICAgIHNiLmFw
cGVuZChjbmFtZSk7Ci0gICAgICAgIHNiLmFwcGVuZCgiOiAiKTsKLSAgICAgICAgc2IuYXBwZW5k
KHRoaXMubGF5b3V0SW5zcGVjdCgpKTsKLSAgICAgICAgc2IuYXBwZW5kKCI+Iik7Ci0KLSAgICAg
ICAgcmV0dXJuIGdldFJ1bnRpbWUoKS5uZXdTdHJpbmcoc2IudG9TdHJpbmcoKSk7Ci0gICAgfQot
Ci0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgTWVzc2FnZS5oYXNoID0+IGhh
c2hfdmFsdWUKLSAgICAgKgotICAgICAqIFJldHVybnMgYSBoYXNoIHZhbHVlIHRoYXQgcmVwcmVz
ZW50cyB0aGlzIG1lc3NhZ2UncyBmaWVsZCB2YWx1ZXMuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0
aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGhhc2goVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7
Ci0gICAgICAgIGludCBoYXNoQ29kZSA9IFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKHRoaXMpOwot
ICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLm5ld0ZpeG51bShoYXNoQ29kZSk7Ci0gICAg
fQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgTWVzc2FnZS49PShvdGhl
cikgPT4gYm9vbGVhbgotICAgICAqCi0gICAgICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24g
b2YgdGhpcyBtZXNzYWdlIHdpdGggYW5vdGhlci4gTWVzc2FnZXMgYXJlIGVxdWFsCi0gICAgICog
aWYgdGhleSBoYXZlIHRoZSBzYW1lIHR5cGUgYW5kIGlmIGVhY2ggZmllbGQgaXMgZXF1YWwgYWNj
b3JkaW5nIHRvIHRoZSA6PT0KLSAgICAgKiBtZXRob2QncyBzZW1hbnRpY3MgKGEgbW9yZSBlZmZp
Y2llbnQgY29tcGFyaXNvbiBtYXkgYWN0dWFsbHkgYmUgZG9uZSBpZiB0aGUKLSAgICAgKiBmaWVs
ZCBpcyBvZiBhIHByaW1pdGl2ZSB0eXBlKS4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QobmFt
ZSA9ICI9PSIpCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGVxKFRocmVhZENvbnRleHQgY29udGV4
dCwgSVJ1YnlPYmplY3Qgb3RoZXIpIHsKLSAgICAgICAgUnVieSBydW50aW1lID0gY29udGV4dC5y
dW50aW1lOwotICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFJ1YnlNZXNzYWdlKSkKLSAg
ICAgICAgICAgIHJldHVybiBydW50aW1lLmdldEZhbHNlKCk7Ci0gICAgICAgIFJ1YnlNZXNzYWdl
IG1lc3NhZ2UgPSAoUnVieU1lc3NhZ2UpIG90aGVyOwotICAgICAgICBpZiAoZGVzY3JpcHRvciAh
PSBtZXNzYWdlLmRlc2NyaXB0b3IpIHsKLSAgICAgICAgICAgIHJldHVybiBydW50aW1lLmdldEZh
bHNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKERlc2NyaXB0b3JzLkZpZWxkRGVzY3Jp
cHRvciBmZGVmIDogZGVzY3JpcHRvci5nZXRGaWVsZHMoKSkgewotICAgICAgICAgICAgSVJ1YnlP
YmplY3QgdGhpc1ZhbCA9IGdldEZpZWxkKGNvbnRleHQsIGZkZWYpOwotICAgICAgICAgICAgSVJ1
YnlPYmplY3QgdGhhdFZhbCA9IG1lc3NhZ2UuZ2V0RmllbGQoY29udGV4dCwgZmRlZik7Ci0gICAg
ICAgICAgICBJUnVieU9iamVjdCByZXQgPSB0aGlzVmFsLmNhbGxNZXRob2QoY29udGV4dCwgIj09
IiwgdGhhdFZhbCk7Ci0gICAgICAgICAgICBpZiAoIXJldC5pc1RydWUoKSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBydW50aW1lLmdldEZhbHNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHJ1bnRpbWUuZ2V0VHJ1ZSgpOwotICAgIH0KLQotICAgIC8qCi0g
ICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIE1lc3NhZ2UubWV0aG9kX21pc3NpbmcoKmFyZ3Mp
Ci0gICAgICoKLSAgICAgKiBQcm92aWRlcyBhY2Nlc3NvcnMgYW5kIHNldHRlcnMgZm9yIG1lc3Nh
Z2UgZmllbGRzIGFjY29yZGluZyB0byB0aGVpciBmaWVsZAotICAgICAqIG5hbWVzLiBGb3IgYW55
IGZpZWxkIHdob3NlIG5hbWUgZG9lcyBub3QgY29uZmxpY3Qgd2l0aCBhIGJ1aWx0LWluIG1ldGhv
ZCwgYW4KLSAgICAgKiBhY2Nlc3NvciBpcyBwcm92aWRlZCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMg
dGhlIGZpZWxkLCBhbmQgYSBzZXR0ZXIgaXMKLSAgICAgKiBwcm92aWRlZCB3aXRoIHRoZSBuYW1l
IG9mIHRoZSBmaWVsZCBwbHVzIHRoZSAnPScgc3VmZml4LiBUaHVzLCBnaXZlbiBhCi0gICAgICog
bWVzc2FnZSBpbnN0YW5jZSAnbXNnJyB3aXRoIGZpZWxkICdmb28nLCB0aGUgZm9sbG93aW5nIGNv
ZGUgaXMgdmFsaWQ6Ci0gICAgICoKLSAgICAgKiAgICAgbXNnLmZvbyA9IDQyCi0gICAgICogICAg
IHB1dHMgbXNnLmZvbwotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gIm1ldGhvZF9t
aXNzaW5nIiwgcmVzdCA9IHRydWUpCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IG1ldGhvZE1pc3Np
bmcoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdFtdIGFyZ3MpIHsKLSAgICAgICAg
aWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKLSAgICAgICAgICAgIFJ1YnlEZXNjcmlwdG9yIHJ1YnlE
ZXNjcmlwdG9yID0gKFJ1YnlEZXNjcmlwdG9yKSBnZXREZXNjcmlwdG9yKGNvbnRleHQsIG1ldGFD
bGFzcyk7Ci0gICAgICAgICAgICBJUnVieU9iamVjdCBvbmVvZkRlc2NyaXB0b3IgPSBydWJ5RGVz
Y3JpcHRvci5sb29rdXBPbmVvZihjb250ZXh0LCBhcmdzWzBdKTsKLSAgICAgICAgICAgIGlmIChv
bmVvZkRlc2NyaXB0b3IuaXNOaWwoKSkgewotICAgICAgICAgICAgICAgIGlmICghaGFzRmllbGQo
YXJnc1swXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhlbHBlcnMuaW52b2tlU3Vw
ZXIoY29udGV4dCwgdGhpcywgbWV0YUNsYXNzLCAibWV0aG9kX21pc3NpbmciLCBhcmdzLCBCbG9j
ay5OVUxMX0JMT0NLKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGluZGV4KGNvbnRleHQsIGFyZ3NbMF0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUnVi
eU9uZW9mRGVzY3JpcHRvciBydWJ5T25lb2ZEZXNjcmlwdG9yID0gKFJ1YnlPbmVvZkRlc2NyaXB0
b3IpIG9uZW9mRGVzY3JpcHRvcjsKLSAgICAgICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3Jp
cHRvciBmaWVsZERlc2NyaXB0b3IgPQotICAgICAgICAgICAgICAgICAgICBvbmVvZkNhc2VzLmdl
dChydWJ5T25lb2ZEZXNjcmlwdG9yLmdldE9uZW9mRGVzY3JpcHRvcigpKTsKLSAgICAgICAgICAg
IGlmIChmaWVsZERlc2NyaXB0b3IgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC5ydW50aW1lLmdldE5pbCgpOwotCi0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5ydW50
aW1lLm5ld1N5bWJvbChmaWVsZERlc2NyaXB0b3IuZ2V0TmFtZSgpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIGZpZWxkTmFtZSBpcyBSdWJ5U3ltYm9sCi0gICAgICAgICAgICBS
dWJ5U3RyaW5nIGZpZWxkID0gYXJnc1swXS5hc1N0cmluZygpOwotICAgICAgICAgICAgUnVieVN0
cmluZyBlcXVhbFNpZ24gPSBjb250ZXh0LnJ1bnRpbWUubmV3U3RyaW5nKFV0aWxzLkVRVUFMX1NJ
R04pOwotICAgICAgICAgICAgaWYgKGZpZWxkLmVuZF93aXRoX3AoY29udGV4dCwgZXF1YWxTaWdu
KS5pc1RydWUoKSkgewotICAgICAgICAgICAgICAgIGZpZWxkLmNob21wX2JhbmcoY29udGV4dCwg
ZXF1YWxTaWduKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFoYXNGaWVsZChm
aWVsZCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gSGVscGVycy5pbnZva2VTdXBlcihjb250
ZXh0LCB0aGlzLCBtZXRhQ2xhc3MsICJtZXRob2RfbWlzc2luZyIsIGFyZ3MsIEJsb2NrLk5VTExf
QkxPQ0spOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGluZGV4U2V0KGNvbnRl
eHQsIGZpZWxkLCBhcmdzWzFdKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAq
IGNhbGwtc2VxOgotICAgICAqIE1lc3NhZ2UuZHVwID0+IG5ld19tZXNzYWdlCi0gICAgICogUGVy
Zm9ybXMgYSBzaGFsbG93IGNvcHkgb2YgdGhpcyBtZXNzYWdlIGFuZCByZXR1cm5zIHRoZSBuZXcg
Y29weS4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3Qg
ZHVwKFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAgICAgICBSdWJ5TWVzc2FnZSBkdXAgPSAo
UnVieU1lc3NhZ2UpIG1ldGFDbGFzcy5uZXdJbnN0YW5jZShjb250ZXh0LCBCbG9jay5OVUxMX0JM
T0NLKTsKLSAgICAgICAgSVJ1YnlPYmplY3QgdmFsdWU7Ci0gICAgICAgIGZvciAoRGVzY3JpcHRv
cnMuRmllbGREZXNjcmlwdG9yIGZpZWxkRGVzY3JpcHRvciA6IHRoaXMuZGVzY3JpcHRvci5nZXRG
aWVsZHMoKSkgewotICAgICAgICAgICAgaWYgKGZpZWxkRGVzY3JpcHRvci5pc1JlcGVhdGVkKCkp
IHsKLSAgICAgICAgICAgICAgICBkdXAuYWRkUmVwZWF0ZWRGaWVsZChmaWVsZERlc2NyaXB0b3Is
IHRoaXMuZ2V0UmVwZWF0ZWRGaWVsZChjb250ZXh0LCBmaWVsZERlc2NyaXB0b3IpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZmllbGRzLmNvbnRhaW5zS2V5KGZpZWxkRGVzY3JpcHRvcikpIHsK
LSAgICAgICAgICAgICAgICBkdXAuZmllbGRzLnB1dChmaWVsZERlc2NyaXB0b3IsIGZpZWxkcy5n
ZXQoZmllbGREZXNjcmlwdG9yKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYnVpbGRl
ci5oYXNGaWVsZChmaWVsZERlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICAgICAgZHVwLmZpZWxk
cy5wdXQoZmllbGREZXNjcmlwdG9yLCB3cmFwRmllbGQoY29udGV4dCwgZmllbGREZXNjcmlwdG9y
LCB0aGlzLmJ1aWxkZXIuZ2V0RmllbGQoZmllbGREZXNjcmlwdG9yKSkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGZvciAoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZp
ZWxkRGVzY3JpcHRvciA6IG1hcHMua2V5U2V0KCkpIHsKLSAgICAgICAgICAgIGR1cC5tYXBzLnB1
dChmaWVsZERlc2NyaXB0b3IsIG1hcHMuZ2V0KGZpZWxkRGVzY3JpcHRvcikpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBkdXA7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToK
LSAgICAgKiAgICAgTWVzc2FnZS5kZXNjcmlwdG9yID0+IGRlc2NyaXB0b3IKLSAgICAgKgotICAg
ICAqIENsYXNzIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIERlc2NyaXB0b3IgaW5zdGFuY2UgY29y
cmVzcG9uZGluZyB0byB0aGlzCi0gICAgICogbWVzc2FnZSBjbGFzcydzIHR5cGUuCi0gICAgICov
Ci0gICAgQEpSdWJ5TWV0aG9kKG5hbWUgPSAiZGVzY3JpcHRvciIsIG1ldGEgPSB0cnVlKQotICAg
IHB1YmxpYyBzdGF0aWMgSVJ1YnlPYmplY3QgZ2V0RGVzY3JpcHRvcihUaHJlYWRDb250ZXh0IGNv
bnRleHQsIElSdWJ5T2JqZWN0IHJlY3YpIHsKLSAgICAgICAgcmV0dXJuICgoUnVieUNsYXNzKSBy
ZWN2KS5nZXRJbnN0YW5jZVZhcmlhYmxlKFV0aWxzLkRFU0NSSVBUT1JfSU5TVEFOQ0VfVkFSKTsK
LSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBNZXNzYWdlQ2xh
c3MuZW5jb2RlKG1zZykgPT4gYnl0ZXMKLSAgICAgKgotICAgICAqIEVuY29kZXMgdGhlIGdpdmVu
IG1lc3NhZ2Ugb2JqZWN0IHRvIGl0cyBzZXJpYWxpemVkIGZvcm0gaW4gcHJvdG9jb2wgYnVmZmVy
cwotICAgICAqIHdpcmUgZm9ybWF0LgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChtZXRhID0g
dHJ1ZSkKLSAgICBwdWJsaWMgc3RhdGljIElSdWJ5T2JqZWN0IGVuY29kZShUaHJlYWRDb250ZXh0
IGNvbnRleHQsIElSdWJ5T2JqZWN0IHJlY3YsIElSdWJ5T2JqZWN0IHZhbHVlKSB7Ci0gICAgICAg
IFJ1YnlNZXNzYWdlIG1lc3NhZ2UgPSAoUnVieU1lc3NhZ2UpIHZhbHVlOwotICAgICAgICByZXR1
cm4gY29udGV4dC5ydW50aW1lLm5ld1N0cmluZyhuZXcgQnl0ZUxpc3QobWVzc2FnZS5idWlsZChj
b250ZXh0KS50b0J5dGVBcnJheSgpKSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNl
cToKLSAgICAgKiAgICAgTWVzc2FnZUNsYXNzLmRlY29kZShkYXRhKSA9PiBtZXNzYWdlCi0gICAg
ICoKLSAgICAgKiBEZWNvZGVzIHRoZSBnaXZlbiBkYXRhIChhcyBhIHN0cmluZyBjb250YWluaW5n
IGJ5dGVzIGluIHByb3RvY29sIGJ1ZmZlcnMgd2lyZQotICAgICAqIGZvcm1hdCkgdW5kZXIgdGhl
IGludGVycHJldHJhdGlvbiBnaXZlbiBieSB0aGlzIG1lc3NhZ2UgY2xhc3MncyBkZWZpbml0aW9u
Ci0gICAgICogYW5kIHJldHVybnMgYSBtZXNzYWdlIG9iamVjdCB3aXRoIHRoZSBjb3JyZXNwb25k
aW5nIGZpZWxkIHZhbHVlcy4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QobWV0YSA9IHRydWUp
Ci0gICAgcHVibGljIHN0YXRpYyBJUnVieU9iamVjdCBkZWNvZGUoVGhyZWFkQ29udGV4dCBjb250
ZXh0LCBJUnVieU9iamVjdCByZWN2LCBJUnVieU9iamVjdCBkYXRhKSB7Ci0gICAgICAgIGJ5dGVb
XSBiaW4gPSBkYXRhLmNvbnZlcnRUb1N0cmluZygpLmdldEJ5dGVzKCk7Ci0gICAgICAgIFJ1YnlN
ZXNzYWdlIHJldCA9IChSdWJ5TWVzc2FnZSkgKChSdWJ5Q2xhc3MpIHJlY3YpLm5ld0luc3RhbmNl
KGNvbnRleHQsIEJsb2NrLk5VTExfQkxPQ0spOwotICAgICAgICB0cnkgewotICAgICAgICAgICAg
cmV0LmJ1aWxkZXIubWVyZ2VGcm9tKGJpbik7Ci0gICAgICAgIH0gY2F0Y2ggKEludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBjb250ZXh0LnJ1bnRp
bWUubmV3UnVudGltZUVycm9yKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gcmV0OwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAg
IE1lc3NhZ2VDbGFzcy5lbmNvZGVfanNvbihtc2cpID0+IGpzb25fc3RyaW5nCi0gICAgICoKLSAg
ICAgKiBFbmNvZGVzIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdCBpbnRvIGl0cyBzZXJpYWxpemVk
IEpTT04gcmVwcmVzZW50YXRpb24uCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kKG5hbWUgPSAi
ZW5jb2RlX2pzb24iLCBtZXRhID0gdHJ1ZSkKLSAgICBwdWJsaWMgc3RhdGljIElSdWJ5T2JqZWN0
IGVuY29kZUpzb24oVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCByZWN2LCBJUnVi
eU9iamVjdCBtc2dSYikgewotICAgICAgICBSdWJ5TWVzc2FnZSBtZXNzYWdlID0gKFJ1YnlNZXNz
YWdlKSBtc2dSYjsKLSAgICAgICAgcmV0dXJuIEhlbHBlcnMuaW52b2tlKGNvbnRleHQsIG1lc3Nh
Z2UudG9IYXNoKGNvbnRleHQpLCAidG9fanNvbiIpOwotICAgIH0KLQotICAgIC8qCi0gICAgICog
Y2FsbC1zZXE6Ci0gICAgICogICAgIE1lc3NhZ2VDbGFzcy5kZWNvZGVfanNvbihkYXRhKSA9PiBt
ZXNzYWdlCi0gICAgICoKLSAgICAgKiBEZWNvZGVzIHRoZSBnaXZlbiBkYXRhIChhcyBhIHN0cmlu
ZyBjb250YWluaW5nIGJ5dGVzIGluIHByb3RvY29sIGJ1ZmZlcnMgd2lyZQotICAgICAqIGZvcm1h
dCkgdW5kZXIgdGhlIGludGVycHJldHJhdGlvbiBnaXZlbiBieSB0aGlzIG1lc3NhZ2UgY2xhc3Mn
cyBkZWZpbml0aW9uCi0gICAgICogYW5kIHJldHVybnMgYSBtZXNzYWdlIG9iamVjdCB3aXRoIHRo
ZSBjb3JyZXNwb25kaW5nIGZpZWxkIHZhbHVlcy4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2Qo
bmFtZSA9ICJkZWNvZGVfanNvbiIsIG1ldGEgPSB0cnVlKQotICAgIHB1YmxpYyBzdGF0aWMgSVJ1
YnlPYmplY3QgZGVjb2RlSnNvbihUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IHJl
Y3YsIElSdWJ5T2JqZWN0IGpzb24pIHsKLSAgICAgICAgUnVieSBydW50aW1lID0gY29udGV4dC5y
dW50aW1lOwotICAgICAgICBSdWJ5TWVzc2FnZSByZXQgPSAoUnVieU1lc3NhZ2UpICgoUnVieUNs
YXNzKSByZWN2KS5uZXdJbnN0YW5jZShjb250ZXh0LCBCbG9jay5OVUxMX0JMT0NLKTsKLSAgICAg
ICAgUnVieU1vZHVsZSBqc29uTW9kdWxlID0gcnVudGltZS5nZXRDbGFzc0Zyb21QYXRoKCJKU09O
Iik7Ci0gICAgICAgIFJ1YnlIYXNoIG9wdHMgPSBSdWJ5SGFzaC5uZXdIYXNoKHJ1bnRpbWUpOwot
ICAgICAgICBvcHRzLmZhc3RBU2V0KHJ1bnRpbWUubmV3U3ltYm9sKCJzeW1ib2xpemVfbmFtZXMi
KSwgcnVudGltZS5nZXRUcnVlKCkpOwotICAgICAgICBJUnVieU9iamVjdFtdIGFyZ3MgPSBuZXcg
SVJ1YnlPYmplY3RbXSB7IEhlbHBlcnMuaW52b2tlKGNvbnRleHQsIGpzb25Nb2R1bGUsICJwYXJz
ZSIsIGpzb24sIG9wdHMpIH07Ci0gICAgICAgIHJldC5pbml0aWFsaXplKGNvbnRleHQsIGFyZ3Mp
OwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIEBKUnVieU1ldGhvZChuYW1lID0g
eyJ0b19oIiwgInRvX2hhc2gifSkKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgdG9IYXNoKFRocmVh
ZENvbnRleHQgY29udGV4dCkgewotICAgICAgICBSdWJ5IHJ1bnRpbWUgPSBjb250ZXh0LnJ1bnRp
bWU7Ci0gICAgICAgIFJ1YnlIYXNoIHJldCA9IFJ1YnlIYXNoLm5ld0hhc2gocnVudGltZSk7Ci0g
ICAgICAgIGZvciAoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZkZWYgOiB0aGlzLmRlc2Ny
aXB0b3IuZ2V0RmllbGRzKCkpIHsKLSAgICAgICAgICAgIElSdWJ5T2JqZWN0IHZhbHVlID0gZ2V0
RmllbGQoY29udGV4dCwgZmRlZik7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzTmlsKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAodmFsdWUucmVzcG9uZHNUbygidG9faCIpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gSGVscGVycy5pbnZva2UoY29udGV4dCwgdmFsdWUsICJ0b19o
Iik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5yZXNwb25kc1RvKCJ0b19hIikp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBIZWxwZXJzLmludm9rZShjb250ZXh0LCB2
YWx1ZSwgInRvX2EiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXQuZmFzdEFTZXQocnVudGltZS5uZXdTeW1ib2woZmRlZi5nZXROYW1lKCkpLCB2YWx1
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0
ZWQgRHluYW1pY01lc3NhZ2UgYnVpbGQoVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAg
IHJldHVybiBidWlsZChjb250ZXh0LCAwKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgRHluYW1p
Y01lc3NhZ2UgYnVpbGQoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBpbnQgZGVwdGgpIHsKLSAgICAg
ICAgaWYgKGRlcHRoID4gU0lOS19NQVhJTVVNX05FU1RJTkcpIHsKLSAgICAgICAgICAgIHRocm93
IGNvbnRleHQucnVudGltZS5uZXdSdW50aW1lRXJyb3IoIk1heGltdW0gcmVjdXJzaW9uIGRlcHRo
IGV4Y2VlZGVkIGR1cmluZyBlbmNvZGluZy4iKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKERl
c2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZERlc2NyaXB0b3IgOiBtYXBzLmtleVNldCgp
KSB7Ci0gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuY2xlYXJGaWVsZChmaWVsZERlc2NyaXB0b3Ip
OwotICAgICAgICAgICAgUnVieURlc2NyaXB0b3IgbWFwRGVzY3JpcHRvciA9IChSdWJ5RGVzY3Jp
cHRvcikgZ2V0RGVzY3JpcHRvckZvckZpZWxkKGNvbnRleHQsIGZpZWxkRGVzY3JpcHRvcik7Ci0g
ICAgICAgICAgICBmb3IgKER5bmFtaWNNZXNzYWdlIGt2IDogbWFwcy5nZXQoZmllbGREZXNjcmlw
dG9yKS5idWlsZChjb250ZXh0LCBtYXBEZXNjcmlwdG9yKSkgewotICAgICAgICAgICAgICAgIHRo
aXMuYnVpbGRlci5hZGRSZXBlYXRlZEZpZWxkKGZpZWxkRGVzY3JpcHRvciwga3YpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoRGVzY3JpcHRvcnMuRmllbGREZXNjcmlw
dG9yIGZpZWxkRGVzY3JpcHRvciA6IHJlcGVhdGVkRmllbGRzLmtleVNldCgpKSB7Ci0gICAgICAg
ICAgICBSdWJ5UmVwZWF0ZWRGaWVsZCByZXBlYXRlZEZpZWxkID0gcmVwZWF0ZWRGaWVsZHMuZ2V0
KGZpZWxkRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuY2xlYXJGaWVsZChm
aWVsZERlc2NyaXB0b3IpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXRl
ZEZpZWxkLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGl0ZW0gPSBjb252
ZXJ0KGNvbnRleHQsIGZpZWxkRGVzY3JpcHRvciwgcmVwZWF0ZWRGaWVsZC5nZXQoaSksIGRlcHRo
KTsKLSAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXIuYWRkUmVwZWF0ZWRGaWVsZChmaWVsZERl
c2NyaXB0b3IsIGl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAo
RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkRGVzY3JpcHRvciA6IGZpZWxkcy5rZXlT
ZXQoKSkgewotICAgICAgICAgICAgSVJ1YnlPYmplY3QgdmFsdWUgPSBmaWVsZHMuZ2V0KGZpZWxk
RGVzY3JpcHRvcik7Ci0gICAgICAgICAgICB0aGlzLmJ1aWxkZXIuc2V0RmllbGQoZmllbGREZXNj
cmlwdG9yLCBjb252ZXJ0KGNvbnRleHQsIGZpZWxkRGVzY3JpcHRvciwgdmFsdWUsIGRlcHRoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRlci5idWlsZCgpOwotICAgIH0K
LQotICAgIHByb3RlY3RlZCBEZXNjcmlwdG9ycy5EZXNjcmlwdG9yIGdldERlc2NyaXB0b3IoKSB7
Ci0gICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0b3I7Ci0gICAgfQotCi0gICAgLy8gSW50ZXJu
YWwgdXNlIG9ubHksIGNhbGxlZCBieSBHb29nbGU6OlByb3RvYnVmLmRlZXBfY29weQotICAgIHBy
b3RlY3RlZCBJUnVieU9iamVjdCBkZWVwQ29weShUaHJlYWRDb250ZXh0IGNvbnRleHQpIHsKLSAg
ICAgICAgUnVieU1lc3NhZ2UgY29weSA9IChSdWJ5TWVzc2FnZSkgbWV0YUNsYXNzLm5ld0luc3Rh
bmNlKGNvbnRleHQsIEJsb2NrLk5VTExfQkxPQ0spOwotICAgICAgICBmb3IgKERlc2NyaXB0b3Jz
LkZpZWxkRGVzY3JpcHRvciBmZGVmIDogdGhpcy5kZXNjcmlwdG9yLmdldEZpZWxkcygpKSB7Ci0g
ICAgICAgICAgICBpZiAoZmRlZi5pc1JlcGVhdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBjb3B5
LmFkZFJlcGVhdGVkRmllbGQoZmRlZiwgdGhpcy5nZXRSZXBlYXRlZEZpZWxkKGNvbnRleHQsIGZk
ZWYpLmRlZXBDb3B5KGNvbnRleHQpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRzLmNv
bnRhaW5zS2V5KGZkZWYpKSB7Ci0gICAgICAgICAgICAgICAgY29weS5maWVsZHMucHV0KGZkZWYs
IGZpZWxkcy5nZXQoZmRlZikpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1aWxkZXIu
aGFzRmllbGQoZmRlZikpIHsKLSAgICAgICAgICAgICAgICBjb3B5LmZpZWxkcy5wdXQoZmRlZiwg
d3JhcEZpZWxkKGNvbnRleHQsIGZkZWYsIHRoaXMuYnVpbGRlci5nZXRGaWVsZChmZGVmKSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjb3B5OwotICAgIH0KLQot
ICAgIHByaXZhdGUgUnVieVJlcGVhdGVkRmllbGQgZ2V0UmVwZWF0ZWRGaWVsZChUaHJlYWRDb250
ZXh0IGNvbnRleHQsIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZERlc2NyaXB0b3Ip
IHsKLSAgICAgICAgaWYgKHRoaXMucmVwZWF0ZWRGaWVsZHMuY29udGFpbnNLZXkoZmllbGREZXNj
cmlwdG9yKSkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVwZWF0ZWRGaWVsZHMuZ2V0KGZp
ZWxkRGVzY3JpcHRvcik7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGNvdW50ID0gdGhpcy5idWls
ZGVyLmdldFJlcGVhdGVkRmllbGRDb3VudChmaWVsZERlc2NyaXB0b3IpOwotICAgICAgICBSdWJ5
UmVwZWF0ZWRGaWVsZCByZXQgPSByZXBlYXRlZEZpZWxkRm9yRmllbGREZXNjcmlwdG9yKGNvbnRl
eHQsIGZpZWxkRGVzY3JpcHRvcik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgewotICAgICAgICAgICAgcmV0LnB1c2goY29udGV4dCwgd3JhcEZpZWxkKGNvbnRleHQs
IGZpZWxkRGVzY3JpcHRvciwgdGhpcy5idWlsZGVyLmdldFJlcGVhdGVkRmllbGQoZmllbGREZXNj
cmlwdG9yLCBpKSkpOwotICAgICAgICB9Ci0gICAgICAgIGFkZFJlcGVhdGVkRmllbGQoZmllbGRE
ZXNjcmlwdG9yLCByZXQpOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHByaXZh
dGUgdm9pZCBhZGRSZXBlYXRlZEZpZWxkKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVs
ZERlc2NyaXB0b3IsIFJ1YnlSZXBlYXRlZEZpZWxkIHJlcGVhdGVkRmllbGQpIHsKLSAgICAgICAg
dGhpcy5yZXBlYXRlZEZpZWxkcy5wdXQoZmllbGREZXNjcmlwdG9yLCByZXBlYXRlZEZpZWxkKTsK
LSAgICB9Ci0KLSAgICBwcml2YXRlIElSdWJ5T2JqZWN0IGJ1aWxkRnJvbShUaHJlYWRDb250ZXh0
IGNvbnRleHQsIER5bmFtaWNNZXNzYWdlIGR5bmFtaWNNZXNzYWdlKSB7Ci0gICAgICAgIHRoaXMu
YnVpbGRlci5tZXJnZUZyb20oZHluYW1pY01lc3NhZ2UpOwotICAgICAgICByZXR1cm4gdGhpczsK
LSAgICB9Ci0KLSAgICBwcml2YXRlIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaW5kRmll
bGQoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCBmaWVsZE5hbWUpIHsKLSAgICAg
ICAgU3RyaW5nIG5hbWVTdHIgPSBmaWVsZE5hbWUuYXNKYXZhU3RyaW5nKCk7Ci0gICAgICAgIERl
c2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciByZXQgPSB0aGlzLmRlc2NyaXB0b3IuZmluZEZpZWxk
QnlOYW1lKFV0aWxzLmVzY2FwZUlkZW50aWZpZXIobmFtZVN0cikpOwotICAgICAgICBpZiAocmV0
ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBjb250ZXh0LnJ1bnRpbWUubmV3QXJndW1lbnRF
cnJvcigiZmllbGQgIiArIGZpZWxkTmFtZS5hc0phdmFTdHJpbmcoKSArICIgaXMgbm90IGZvdW5k
Iik7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGhh
c0ZpZWxkKElSdWJ5T2JqZWN0IGZpZWxkTmFtZSkgewotICAgICAgICBTdHJpbmcgbmFtZVN0ciA9
IGZpZWxkTmFtZS5hc0phdmFTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRv
ci5maW5kRmllbGRCeU5hbWUoVXRpbHMuZXNjYXBlSWRlbnRpZmllcihuYW1lU3RyKSkgIT0gbnVs
bDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tSZXBlYXRlZEZpZWxkVHlwZShUaHJl
YWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IHZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZERl
c2NyaXB0b3IpIHsKLSAgICAgICAgUnVieSBydW50aW1lID0gY29udGV4dC5ydW50aW1lOwotICAg
ICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFJ1YnlSZXBlYXRlZEZpZWxkKSkgewotICAgICAg
ICAgICAgdGhyb3cgcnVudGltZS5uZXdUeXBlRXJyb3IoIkV4cGVjdGVkIHJlcGVhdGVkIGZpZWxk
IGFycmF5Iik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBjb252ZXJ0IGEgcnVieSBvYmpl
Y3QgdG8gcHJvdG9idWYgdHlwZSwgd2l0aCB0eXBlIGNoZWNrCi0gICAgcHJpdmF0ZSBPYmplY3Qg
Y29udmVydChUaHJlYWRDb250ZXh0IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmllbGREZXNjcmlwdG9yLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSVJ1YnlPYmplY3QgdmFsdWUsIGludCBkZXB0aCkgewotICAgICAg
ICBSdWJ5IHJ1bnRpbWUgPSBjb250ZXh0LnJ1bnRpbWU7Ci0gICAgICAgIE9iamVjdCB2YWwgPSBu
dWxsOwotICAgICAgICBzd2l0Y2ggKGZpZWxkRGVzY3JpcHRvci5nZXRUeXBlKCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgSU5UMzI6Ci0gICAgICAgICAgICBjYXNlIElOVDY0OgotICAgICAgICAgICAg
Y2FzZSBVSU5UMzI6Ci0gICAgICAgICAgICBjYXNlIFVJTlQ2NDoKLSAgICAgICAgICAgICAgICBp
ZiAoIVV0aWxzLmlzUnVieU51bSh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cg
cnVudGltZS5uZXdUeXBlRXJyb3IoIkV4cGVjdGVkIG51bWJlciB0eXBlIGZvciBpbnRlZ3JhbCBm
aWVsZC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgVXRpbHMuY2hlY2tJ
bnRUeXBlUHJlY2lzaW9uKGNvbnRleHQsIGZpZWxkRGVzY3JpcHRvci5nZXRUeXBlKCksIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkRGVzY3JpcHRvci5nZXRUeXBlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJTlQzMjoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhbCA9IFJ1YnlOdW1lcmljLm51bTJpbnQodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSU5UNjQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YWwgPSBSdWJ5TnVtZXJpYy5udW0ybG9uZyh2YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVSU5UMzI6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBVdGlscy5udW0ydWludCh2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVSU5U
NjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBVdGlscy5udW0ydWxvbmcoY29udGV4
dC5ydW50aW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgRkxPQVQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc1J1YnlOdW0odmFsdWUpKQot
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBydW50aW1lLm5ld1R5cGVFcnJvcigiRXhwZWN0ZWQg
bnVtYmVyIHR5cGUgZm9yIGZsb2F0IGZpZWxkLiIpOwotICAgICAgICAgICAgICAgIHZhbCA9IChm
bG9hdCkgUnVieU51bWVyaWMubnVtMmRibCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIERPVUJMRToKLSAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlz
UnVieU51bSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IHJ1bnRpbWUubmV3VHlw
ZUVycm9yKCJFeHBlY3RlZCBudW1iZXIgdHlwZSBmb3IgZG91YmxlIGZpZWxkLiIpOwotICAgICAg
ICAgICAgICAgIHZhbCA9IFJ1YnlOdW1lcmljLm51bTJkYmwodmFsdWUpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCT09MOgotICAgICAgICAgICAgICAgIGlmICgh
KHZhbHVlIGluc3RhbmNlb2YgUnVieUJvb2xlYW4pKQotICAgICAgICAgICAgICAgICAgICB0aHJv
dyBydW50aW1lLm5ld1R5cGVFcnJvcigiSW52YWxpZCBhcmd1bWVudCBmb3IgYm9vbGVhbiBmaWVs
ZC4iKTsKLSAgICAgICAgICAgICAgICB2YWwgPSB2YWx1ZS5pc1RydWUoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQllURVM6Ci0gICAgICAgICAgICBjYXNlIFNU
UklORzoKLSAgICAgICAgICAgICAgICBVdGlscy52YWxpZGF0ZVN0cmluZ0VuY29kaW5nKGNvbnRl
eHQucnVudGltZSwgZmllbGREZXNjcmlwdG9yLmdldFR5cGUoKSwgdmFsdWUpOwotICAgICAgICAg
ICAgICAgIFJ1YnlTdHJpbmcgc3RyID0gKFJ1YnlTdHJpbmcpIHZhbHVlOwotICAgICAgICAgICAg
ICAgIHN3aXRjaCAoZmllbGREZXNjcmlwdG9yLmdldFR5cGUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEJZVEVTOgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gQnl0ZVN0cmlu
Zy5jb3B5RnJvbShzdHIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YWwgPSBzdHIuYXNKYXZhU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgTUVTU0FHRToKLSAgICAgICAgICAgICAgICBSdWJ5Q2xhc3MgdHlwZUNs
YXNzID0gKFJ1YnlDbGFzcykgKChSdWJ5RGVzY3JpcHRvcikgZ2V0RGVzY3JpcHRvckZvckZpZWxk
KGNvbnRleHQsIGZpZWxkRGVzY3JpcHRvcikpLm1zZ2NsYXNzKGNvbnRleHQpOwotICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUuZ2V0TWV0YUNsYXNzKCkuZXF1YWxzKHR5cGVDbGFzcykpCi0gICAg
ICAgICAgICAgICAgICAgIHRocm93IHJ1bnRpbWUubmV3VHlwZUVycm9yKHZhbHVlLCAiSW52YWxp
ZCB0eXBlIHRvIGFzc2lnbiB0byBzdWJtZXNzYWdlIGZpZWxkLiIpOwotICAgICAgICAgICAgICAg
IHZhbCA9ICgoUnVieU1lc3NhZ2UpIHZhbHVlKS5idWlsZChjb250ZXh0LCBkZXB0aCArIDEpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFTlVNOgotICAgICAgICAg
ICAgICAgIERlc2NyaXB0b3JzLkVudW1EZXNjcmlwdG9yIGVudW1EZXNjcmlwdG9yID0gZmllbGRE
ZXNjcmlwdG9yLmdldEVudW1UeXBlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNS
dWJ5TnVtKHZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICB2YWwgPSBlbnVtRGVzY3JpcHRv
ci5maW5kVmFsdWVCeU51bWJlckNyZWF0aW5nSWZVbmtub3duKFJ1YnlOdW1lcmljLm51bTJpbnQo
dmFsdWUpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUnVi
eVN5bWJvbCkgewotICAgICAgICAgICAgICAgICAgICB2YWwgPSBlbnVtRGVzY3JpcHRvci5maW5k
VmFsdWVCeU5hbWUodmFsdWUuYXNKYXZhU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IHJ1bnRpbWUubmV3VHlwZUVycm9yKCJFeHBl
Y3RlZCBudW1iZXIgb3Igc3ltYm9sIHR5cGUgZm9yIGVudW0gZmllbGQuIik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBydW50aW1lLm5ld1JhbmdlRXJyb3IoIkVudW0gdmFsdWUgIiArIHZhbHVl
ICsgIiBpcyBub3QgZm91bmQuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gdmFsOwotICAgIH0KLQotICAgIHByaXZhdGUgSVJ1YnlP
YmplY3Qgd3JhcEZpZWxkKFRocmVhZENvbnRleHQgY29udGV4dCwgRGVzY3JpcHRvcnMuRmllbGRE
ZXNjcmlwdG9yIGZpZWxkRGVzY3JpcHRvciwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIGlmICh2
YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLmdldE5p
bCgpOwotICAgICAgICB9Ci0gICAgICAgIFJ1YnkgcnVudGltZSA9IGNvbnRleHQucnVudGltZTsK
LSAgICAgICAgc3dpdGNoIChmaWVsZERlc2NyaXB0b3IuZ2V0VHlwZSgpKSB7Ci0gICAgICAgICAg
ICBjYXNlIElOVDMyOgotICAgICAgICAgICAgY2FzZSBJTlQ2NDoKLSAgICAgICAgICAgIGNhc2Ug
VUlOVDMyOgotICAgICAgICAgICAgY2FzZSBVSU5UNjQ6Ci0gICAgICAgICAgICBjYXNlIEZMT0FU
OgotICAgICAgICAgICAgY2FzZSBET1VCTEU6Ci0gICAgICAgICAgICBjYXNlIEJPT0w6Ci0gICAg
ICAgICAgICBjYXNlIEJZVEVTOgotICAgICAgICAgICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFV0aWxzLndyYXBQcmltYXJ5VmFsdWUoY29udGV4dCwgZmllbGREZXNjcmlw
dG9yLmdldFR5cGUoKSwgdmFsdWUpOwotICAgICAgICAgICAgY2FzZSBNRVNTQUdFOgotICAgICAg
ICAgICAgICAgIFJ1YnlDbGFzcyB0eXBlQ2xhc3MgPSAoUnVieUNsYXNzKSAoKFJ1YnlEZXNjcmlw
dG9yKSBnZXREZXNjcmlwdG9yRm9yRmllbGQoY29udGV4dCwgZmllbGREZXNjcmlwdG9yKSkubXNn
Y2xhc3MoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgUnVieU1lc3NhZ2UgbXNnID0gKFJ1YnlN
ZXNzYWdlKSB0eXBlQ2xhc3MubmV3SW5zdGFuY2UoY29udGV4dCwgQmxvY2suTlVMTF9CTE9DSyk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1zZy5idWlsZEZyb20oY29udGV4dCwgKER5bmFtaWNN
ZXNzYWdlKSB2YWx1ZSk7Ci0gICAgICAgICAgICBjYXNlIEVOVU06Ci0gICAgICAgICAgICAgICAg
RGVzY3JpcHRvcnMuRW51bVZhbHVlRGVzY3JpcHRvciBlbnVtVmFsdWVEZXNjcmlwdG9yID0gKERl
c2NyaXB0b3JzLkVudW1WYWx1ZURlc2NyaXB0b3IpIHZhbHVlOwotICAgICAgICAgICAgICAgIGlm
IChlbnVtVmFsdWVEZXNjcmlwdG9yLmdldEluZGV4KCkgPT0gLTEpIHsgLy8gVU5LTk9XTiBFTlVN
IFZBTFVFCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBydW50aW1lLm5ld0ZpeG51bShlbnVt
VmFsdWVEZXNjcmlwdG9yLmdldE51bWJlcigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJ1bnRpbWUubmV3U3ltYm9sKGVudW1WYWx1ZURlc2NyaXB0b3IuZ2V0
TmFtZSgpKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJ1
bnRpbWUubmV3U3RyaW5nKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcHJpdmF0ZSBSdWJ5UmVwZWF0ZWRGaWVsZCByZXBlYXRlZEZpZWxkRm9yRmllbGREZXNjcmlw
dG9yKFRocmVhZENvbnRleHQgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlw
dG9yIGZpZWxkRGVzY3JpcHRvcikgewotICAgICAgICBJUnVieU9iamVjdCB0eXBlQ2xhc3MgPSBj
b250ZXh0LnJ1bnRpbWUuZ2V0TmlsQ2xhc3MoKTsKLQotICAgICAgICBJUnVieU9iamVjdCBkZXNj
cmlwdG9yID0gZ2V0RGVzY3JpcHRvckZvckZpZWxkKGNvbnRleHQsIGZpZWxkRGVzY3JpcHRvcik7
Ci0gICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvci5UeXBlIHR5cGUgPSBmaWVsZERl
c2NyaXB0b3IuZ2V0VHlwZSgpOwotICAgICAgICBpZiAodHlwZSA9PSBEZXNjcmlwdG9ycy5GaWVs
ZERlc2NyaXB0b3IuVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgICAgICB0eXBlQ2xhc3MgPSAoKFJ1
YnlEZXNjcmlwdG9yKSBkZXNjcmlwdG9yKS5tc2djbGFzcyhjb250ZXh0KTsKLQotICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLlR5cGUuRU5VTSkg
ewotICAgICAgICAgICAgdHlwZUNsYXNzID0gKChSdWJ5RW51bURlc2NyaXB0b3IpIGRlc2NyaXB0
b3IpLmVudW1tb2R1bGUoY29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBS
dWJ5UmVwZWF0ZWRGaWVsZChjb250ZXh0LnJ1bnRpbWUsIGNSZXBlYXRlZEZpZWxkLCB0eXBlLCB0
eXBlQ2xhc3MpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBJUnVieU9iamVjdCBnZXRGaWVsZChU
aHJlYWRDb250ZXh0IGNvbnRleHQsIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmaWVsZERl
c2NyaXB0b3IpIHsKLSAgICAgICAgRGVzY3JpcHRvcnMuT25lb2ZEZXNjcmlwdG9yIG9uZW9mRGVz
Y3JpcHRvciA9IGZpZWxkRGVzY3JpcHRvci5nZXRDb250YWluaW5nT25lb2YoKTsKLSAgICAgICAg
aWYgKG9uZW9mRGVzY3JpcHRvciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAob25lb2ZDYXNl
cy5jb250YWluc0tleShvbmVvZkRlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9u
ZW9mQ2FzZXMuZ2V0KG9uZW9mRGVzY3JpcHRvcikgIT0gZmllbGREZXNjcmlwdG9yKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLmdldE5pbCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBmaWVsZHMuZ2V0KGZpZWxkRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBvbmVv
ZkNhc2UgPSBidWlsZGVyLmdldE9uZW9mRmllbGREZXNjcmlwdG9yKG9uZW9mRGVzY3JpcHRvcik7
Ci0gICAgICAgICAgICAgICAgaWYgKG9uZW9mQ2FzZSAhPSBmaWVsZERlc2NyaXB0b3IpIHJldHVy
biBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAgICAgICAgICAgICAgSVJ1YnlPYmplY3Qg
dmFsdWUgPSB3cmFwRmllbGQoY29udGV4dCwgb25lb2ZDYXNlLCBidWlsZGVyLmdldEZpZWxkKG9u
ZW9mQ2FzZSkpOwotICAgICAgICAgICAgICAgIGZpZWxkcy5wdXQoZmllbGREZXNjcmlwdG9yLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKFV0aWxzLmlzTWFwRW50cnkoZmllbGREZXNjcmlwdG9yKSkg
ewotICAgICAgICAgICAgUnVieU1hcCBtYXAgPSBtYXBzLmdldChmaWVsZERlc2NyaXB0b3IpOwot
ICAgICAgICAgICAgaWYgKG1hcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbWFwID0gbmV3
TWFwRm9yRmllbGQoY29udGV4dCwgZmllbGREZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICBp
bnQgbWFwU2l6ZSA9IHRoaXMuYnVpbGRlci5nZXRSZXBlYXRlZEZpZWxkQ291bnQoZmllbGREZXNj
cmlwdG9yKTsKLSAgICAgICAgICAgICAgICBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3Iga2V5
RmllbGQgPSBmaWVsZERlc2NyaXB0b3IuZ2V0TWVzc2FnZVR5cGUoKS5maW5kRmllbGRCeU51bWJl
cigxKTsKLSAgICAgICAgICAgICAgICBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgdmFsdWVG
aWVsZCA9IGZpZWxkRGVzY3JpcHRvci5nZXRNZXNzYWdlVHlwZSgpLmZpbmRGaWVsZEJ5TnVtYmVy
KDIpOwotICAgICAgICAgICAgICAgIFJ1YnlEZXNjcmlwdG9yIGt2RGVzY3JpcHRvciA9IChSdWJ5
RGVzY3JpcHRvcikgZ2V0RGVzY3JpcHRvckZvckZpZWxkKGNvbnRleHQsIGZpZWxkRGVzY3JpcHRv
cik7Ci0gICAgICAgICAgICAgICAgUnVieUNsYXNzIGt2Q2xhc3MgPSAoUnVieUNsYXNzKSBrdkRl
c2NyaXB0b3IubXNnY2xhc3MoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtYXBTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgUnVieU1lc3NhZ2Ug
a3ZNZXNzYWdlID0gKFJ1YnlNZXNzYWdlKSBrdkNsYXNzLm5ld0luc3RhbmNlKGNvbnRleHQsIEJs
b2NrLk5VTExfQkxPQ0spOwotICAgICAgICAgICAgICAgICAgICBEeW5hbWljTWVzc2FnZSBtZXNz
YWdlID0gKER5bmFtaWNNZXNzYWdlKSB0aGlzLmJ1aWxkZXIuZ2V0UmVwZWF0ZWRGaWVsZChmaWVs
ZERlc2NyaXB0b3IsIGkpOwotICAgICAgICAgICAgICAgICAgICBrdk1lc3NhZ2UuYnVpbGRGcm9t
KGNvbnRleHQsIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBtYXAuaW5kZXhTZXQoY29u
dGV4dCwga3ZNZXNzYWdlLmdldEZpZWxkKGNvbnRleHQsIGtleUZpZWxkKSwga3ZNZXNzYWdlLmdl
dEZpZWxkKGNvbnRleHQsIHZhbHVlRmllbGQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgbWFwcy5wdXQoZmllbGREZXNjcmlwdG9yLCBtYXApOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIG1hcDsKLSAgICAgICAgfQotICAgICAgICBpZiAoZmllbGREZXNj
cmlwdG9yLmlzUmVwZWF0ZWQoKSkgewotICAgICAgICAgICAgcmV0dXJuIGdldFJlcGVhdGVkRmll
bGQoY29udGV4dCwgZmllbGREZXNjcmlwdG9yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZmll
bGREZXNjcmlwdG9yLmdldFR5cGUoKSAhPSBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IuVHlw
ZS5NRVNTQUdFIHx8Ci0gICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyLmhhc0ZpZWxkKGZpZWxk
RGVzY3JpcHRvcikgfHwgZmllbGRzLmNvbnRhaW5zS2V5KGZpZWxkRGVzY3JpcHRvcikpIHsKLSAg
ICAgICAgICAgIGlmIChmaWVsZHMuY29udGFpbnNLZXkoZmllbGREZXNjcmlwdG9yKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBmaWVsZHMuZ2V0KGZpZWxkRGVzY3JpcHRvcik7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIElSdWJ5T2JqZWN0IHZhbHVlID0gd3JhcEZp
ZWxkKGNvbnRleHQsIGZpZWxkRGVzY3JpcHRvciwgdGhpcy5idWlsZGVyLmdldEZpZWxkKGZpZWxk
RGVzY3JpcHRvcikpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmJ1aWxkZXIuaGFzRmllbGQo
ZmllbGREZXNjcmlwdG9yKSkgewotICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHV0KGZpZWxk
RGVzY3JpcHRvciwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNv
bnRleHQucnVudGltZS5nZXROaWwoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgSVJ1YnlPYmpl
Y3Qgc2V0RmllbGQoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBEZXNjcmlwdG9ycy5GaWVsZERlc2Ny
aXB0b3IgZmllbGREZXNjcmlwdG9yLCBJUnVieU9iamVjdCB2YWx1ZSkgewotICAgICAgICBpZiAo
VXRpbHMuaXNNYXBFbnRyeShmaWVsZERlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICBpZiAoISh2
YWx1ZSBpbnN0YW5jZW9mIFJ1YnlNYXApKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgY29udGV4
dC5ydW50aW1lLm5ld1R5cGVFcnJvcigiRXhwZWN0ZWQgTWFwIGluc3RhbmNlIik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSdWJ5TWFwIHRoaXNNYXAgPSAoUnVieU1hcCkgZ2V0RmllbGQo
Y29udGV4dCwgZmllbGREZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIHRoaXNNYXAubWVyZ2VJbnRv
U2VsZihjb250ZXh0LCB2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmllbGREZXNjcmlwdG9y
LmlzUmVwZWF0ZWQoKSkgewotICAgICAgICAgICAgY2hlY2tSZXBlYXRlZEZpZWxkVHlwZShjb250
ZXh0LCB2YWx1ZSwgZmllbGREZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0
YW5jZW9mIFJ1YnlSZXBlYXRlZEZpZWxkKSB7Ci0gICAgICAgICAgICAgICAgYWRkUmVwZWF0ZWRG
aWVsZChmaWVsZERlc2NyaXB0b3IsIChSdWJ5UmVwZWF0ZWRGaWVsZCkgdmFsdWUpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBSdWJ5QXJyYXkgYXJ5ID0gdmFsdWUuY29u
dmVydFRvQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBSdWJ5UmVwZWF0ZWRGaWVsZCByZXBlYXRl
ZEZpZWxkID0gcnVieVRvUmVwZWF0ZWRGaWVsZChjb250ZXh0LCBmaWVsZERlc2NyaXB0b3IsIGFy
eSk7Ci0gICAgICAgICAgICAgICAgYWRkUmVwZWF0ZWRGaWVsZChmaWVsZERlc2NyaXB0b3IsIHJl
cGVhdGVkRmllbGQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgRGVzY3JpcHRvcnMuT25lb2ZEZXNjcmlwdG9yIG9uZW9mRGVzY3JpcHRvciA9IGZpZWxkRGVz
Y3JpcHRvci5nZXRDb250YWluaW5nT25lb2YoKTsKLSAgICAgICAgICAgIGlmIChvbmVvZkRlc2Ny
aXB0b3IgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3Jp
cHRvciBvbmVvZkNhc2UgPSBvbmVvZkNhc2VzLmdldChvbmVvZkRlc2NyaXB0b3IpOwotICAgICAg
ICAgICAgICAgIGlmIChvbmVvZkNhc2UgIT0gbnVsbCAmJiBvbmVvZkNhc2UgIT0gZmllbGREZXNj
cmlwdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5yZW1vdmUob25lb2ZDYXNlKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzTmlsKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgb25lb2ZDYXNlcy5yZW1vdmUob25lb2ZEZXNjcmlwdG9yKTsK
LSAgICAgICAgICAgICAgICAgICAgZmllbGRzLnJlbW92ZShmaWVsZERlc2NyaXB0b3IpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9uZW9mQ2FzZXMucHV0
KG9uZW9mRGVzY3JpcHRvciwgZmllbGREZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICAgICAg
ZmllbGRzLnB1dChmaWVsZERlc2NyaXB0b3IsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVz
Y3JpcHRvci5UeXBlIGZpZWxkVHlwZSA9IGZpZWxkRGVzY3JpcHRvci5nZXRUeXBlKCk7Ci0gICAg
ICAgICAgICAgICAgSVJ1YnlPYmplY3QgdHlwZUNsYXNzID0gY29udGV4dC5ydW50aW1lLmdldE9i
amVjdCgpOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gYWRkVmFsdWUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT0gRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLlR5
cGUuTUVTU0FHRSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlQ2xhc3MgPSAoKFJ1YnlEZXNj
cmlwdG9yKSBnZXREZXNjcmlwdG9yRm9yRmllbGQoY29udGV4dCwgZmllbGREZXNjcmlwdG9yKSku
bXNnY2xhc3MoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc05pbCgp
KXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZhbHVlID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PSBEZXNj
cmlwdG9ycy5GaWVsZERlc2NyaXB0b3IuVHlwZS5FTlVNKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHR5cGVDbGFzcyA9ICgoUnVieUVudW1EZXNjcmlwdG9yKSBnZXREZXNjcmlwdG9yRm9yRmllbGQo
Y29udGV4dCwgZmllbGREZXNjcmlwdG9yKSkuZW51bW1vZHVsZShjb250ZXh0KTsKLSAgICAgICAg
ICAgICAgICAgICAgRGVzY3JpcHRvcnMuRW51bURlc2NyaXB0b3IgZW51bURlc2NyaXB0b3IgPSBm
aWVsZERlc2NyaXB0b3IuZ2V0RW51bVR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFV0
aWxzLmlzUnVieU51bSh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0
b3JzLkVudW1WYWx1ZURlc2NyaXB0b3IgdmFsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW51bURlc2NyaXB0b3IuZmluZFZhbHVlQnlOdW1iZXJDcmVhdGluZ0lmVW5rbm93bihS
dWJ5TnVtZXJpYy5udW0yaW50KHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmFsLmdldEluZGV4KCkgIT0gLTEpIHZhbHVlID0gY29udGV4dC5ydW50aW1lLm5ld1N5bWJvbCh2
YWwuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAoYWRkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgVXRp
bHMuY2hlY2tUeXBlKGNvbnRleHQsIGZpZWxkVHlwZSwgdmFsdWUsIChSdWJ5TW9kdWxlKSB0eXBl
Q2xhc3MpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5wdXQoZmllbGREZXNjcmlw
dG9yLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5maWVsZHMucmVtb3ZlKGZpZWxkRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRp
bWUuZ2V0TmlsKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgbGF5b3V0SW5zcGVjdCgp
IHsKLSAgICAgICAgVGhyZWFkQ29udGV4dCBjb250ZXh0ID0gZ2V0UnVudGltZSgpLmdldEN1cnJl
bnRDb250ZXh0KCk7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRl
cigpOwotICAgICAgICBmb3IgKERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBmZGVmIDogZGVz
Y3JpcHRvci5nZXRGaWVsZHMoKSkgewotICAgICAgICAgICAgc2IuYXBwZW5kKFV0aWxzLnVuZXNj
YXBlSWRlbnRpZmllcihmZGVmLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCI6
ICIpOwotICAgICAgICAgICAgc2IuYXBwZW5kKGdldEZpZWxkKGNvbnRleHQsIGZkZWYpLmluc3Bl
Y3QoKSk7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIiwgIik7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHNiLnN1YnN0cmluZygwLCBzYi5sZW5ndGgoKSAtIDIpOwotICAgIH0KLQotICAgIHBy
aXZhdGUgSVJ1YnlPYmplY3QgZ2V0RGVzY3JpcHRvckZvckZpZWxkKFRocmVhZENvbnRleHQgY29u
dGV4dCwgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkRGVzY3JpcHRvcikgewotICAg
ICAgICBSdWJ5RGVzY3JpcHRvciB0aGlzUmJEZXNjcmlwdG9yID0gKFJ1YnlEZXNjcmlwdG9yKSBn
ZXREZXNjcmlwdG9yKGNvbnRleHQsIG1ldGFDbGFzcyk7Ci0gICAgICAgIHJldHVybiB0aGlzUmJE
ZXNjcmlwdG9yLmxvb2t1cChmaWVsZERlc2NyaXB0b3IuZ2V0TmFtZSgpKS5nZXRTdWJUeXBlKGNv
bnRleHQpOwotICAgIH0KLQotICAgIHByaXZhdGUgUnVieVJlcGVhdGVkRmllbGQgcnVieVRvUmVw
ZWF0ZWRGaWVsZChUaHJlYWRDb250ZXh0IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBm
aWVsZERlc2NyaXB0b3IsIElSdWJ5T2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIFJ1YnlBcnJheSBh
cnIgPSB2YWx1ZS5jb252ZXJ0VG9BcnJheSgpOwotICAgICAgICBSdWJ5UmVwZWF0ZWRGaWVsZCBy
ZXBlYXRlZEZpZWxkID0gcmVwZWF0ZWRGaWVsZEZvckZpZWxkRGVzY3JpcHRvcihjb250ZXh0LCBm
aWVsZERlc2NyaXB0b3IpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyci5zaXplKCk7
IGkrKykgewotICAgICAgICAgICAgcmVwZWF0ZWRGaWVsZC5wdXNoKGNvbnRleHQsIGFyci5lbHRJ
bnRlcm5hbChpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlcGVhdGVkRmllbGQ7Ci0g
ICAgfQotCi0gICAgcHJpdmF0ZSBSdWJ5TWFwIG5ld01hcEZvckZpZWxkKFRocmVhZENvbnRleHQg
Y29udGV4dCwgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGZpZWxkRGVzY3JpcHRvcikgewot
ICAgICAgICBSdWJ5RGVzY3JpcHRvciBtYXBEZXNjcmlwdG9yID0gKFJ1YnlEZXNjcmlwdG9yKSBn
ZXREZXNjcmlwdG9yRm9yRmllbGQoY29udGV4dCwgZmllbGREZXNjcmlwdG9yKTsKLSAgICAgICAg
RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yIGtleUZpZWxkID0gZmllbGREZXNjcmlwdG9yLmdl
dE1lc3NhZ2VUeXBlKCkuZmluZEZpZWxkQnlOdW1iZXIoMSk7Ci0gICAgICAgIERlc2NyaXB0b3Jz
LkZpZWxkRGVzY3JpcHRvciB2YWx1ZUZpZWxkID0gZmllbGREZXNjcmlwdG9yLmdldE1lc3NhZ2VU
eXBlKCkuZmluZEZpZWxkQnlOdW1iZXIoMik7Ci0gICAgICAgIElSdWJ5T2JqZWN0IGtleVR5cGUg
PSBSdWJ5U3ltYm9sLm5ld1N5bWJvbChjb250ZXh0LnJ1bnRpbWUsIGtleUZpZWxkLmdldFR5cGUo
KS5uYW1lKCkpOwotICAgICAgICBJUnVieU9iamVjdCB2YWx1ZVR5cGUgPSBSdWJ5U3ltYm9sLm5l
d1N5bWJvbChjb250ZXh0LnJ1bnRpbWUsIHZhbHVlRmllbGQuZ2V0VHlwZSgpLm5hbWUoKSk7Ci0g
ICAgICAgIGlmICh2YWx1ZUZpZWxkLmdldFR5cGUoKSA9PSBEZXNjcmlwdG9ycy5GaWVsZERlc2Ny
aXB0b3IuVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgICAgICBSdWJ5RmllbGREZXNjcmlwdG9yIHJ1
YnlGaWVsZERlc2NyaXB0b3IgPSAoUnVieUZpZWxkRGVzY3JpcHRvcikgbWFwRGVzY3JpcHRvci5s
b29rdXAoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5ydW50aW1lLm5ld1N0
cmluZygidmFsdWUiKSk7Ci0gICAgICAgICAgICBSdWJ5RGVzY3JpcHRvciBydWJ5RGVzY3JpcHRv
ciA9IChSdWJ5RGVzY3JpcHRvcikgcnVieUZpZWxkRGVzY3JpcHRvci5nZXRTdWJUeXBlKGNvbnRl
eHQpOwotICAgICAgICAgICAgcmV0dXJuIChSdWJ5TWFwKSBjTWFwLm5ld0luc3RhbmNlKGNvbnRl
eHQsIGtleVR5cGUsIHZhbHVlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgcnVieURlc2NyaXB0
b3IubXNnY2xhc3MoY29udGV4dCksIEJsb2NrLk5VTExfQkxPQ0spOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgcmV0dXJuIChSdWJ5TWFwKSBjTWFwLm5ld0luc3RhbmNlKGNvbnRleHQs
IGtleVR5cGUsIHZhbHVlVHlwZSwgQmxvY2suTlVMTF9CTE9DSyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBwcml2YXRlIERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvciBnZXRPbmVvZkNhc2Uo
RGVzY3JpcHRvcnMuT25lb2ZEZXNjcmlwdG9yIG9uZW9mKSB7Ci0gICAgICAgIGlmIChvbmVvZkNh
c2VzLmNvbnRhaW5zS2V5KG9uZW9mKSkgewotICAgICAgICAgICAgcmV0dXJuIG9uZW9mQ2FzZXMu
Z2V0KG9uZW9mKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYnVpbGRlci5nZXRPbmVvZkZp
ZWxkRGVzY3JpcHRvcihvbmVvZik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBEZXNjcmlwdG9ycy5E
ZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgcHJpdmF0ZSBEeW5hbWljTWVzc2FnZS5CdWlsZGVy
IGJ1aWxkZXI7Ci0gICAgcHJpdmF0ZSBSdWJ5Q2xhc3MgY1JlcGVhdGVkRmllbGQ7Ci0gICAgcHJp
dmF0ZSBSdWJ5Q2xhc3MgY01hcDsKLSAgICBwcml2YXRlIE1hcDxEZXNjcmlwdG9ycy5GaWVsZERl
c2NyaXB0b3IsIFJ1YnlSZXBlYXRlZEZpZWxkPiByZXBlYXRlZEZpZWxkczsKLSAgICBwcml2YXRl
IE1hcDxEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IsIFJ1YnlNYXA+IG1hcHM7Ci0gICAgcHJp
dmF0ZSBNYXA8RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLCBJUnVieU9iamVjdD4gZmllbGRz
OwotICAgIHByaXZhdGUgTWFwPERlc2NyaXB0b3JzLk9uZW9mRGVzY3JpcHRvciwgRGVzY3JpcHRv
cnMuRmllbGREZXNjcmlwdG9yPiBvbmVvZkNhc2VzOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IFNJTktfTUFYSU1VTV9ORVNUSU5HID0gNjQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3Jj
L21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlNZXNzYWdlQnVpbGRlckNv
bnRleHQuamF2YSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1Ynkv
UnVieU1lc3NhZ2VCdWlsZGVyQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhNjE5YjgwM2NjNjY0NzRmY2EyOTU0NjRiYTM0NGQ5OTZhYzY5NDE5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieU1lc3NhZ2VCdWlsZGVyQ29udGV4dC5qYXZhCisr
KyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0gKiBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLSAqIENvcHlyaWdodCAyMDE0IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWYuanJ1Ynk7Ci0K
LWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzOwotaW1wb3J0IG9yZy5qcnVi
eS4qOwotaW1wb3J0IG9yZy5qcnVieS5hbm5vLkpSdWJ5Q2xhc3M7Ci1pbXBvcnQgb3JnLmpydWJ5
LmFubm8uSlJ1YnlNZXRob2Q7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuQmluZGluZzsKLWlt
cG9ydCBvcmcuanJ1YnkucnVudGltZS5CbG9jazsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5P
YmplY3RBbGxvY2F0b3I7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuVGhyZWFkQ29udGV4dDsK
LWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5idWlsdGluLklSdWJ5T2JqZWN0OwotCi1ASlJ1YnlD
bGFzcyhuYW1lID0gIk1lc3NhZ2VCdWlsZGVyQ29udGV4dCIpCi1wdWJsaWMgY2xhc3MgUnVieU1l
c3NhZ2VCdWlsZGVyQ29udGV4dCBleHRlbmRzIFJ1YnlPYmplY3QgewotICAgIHB1YmxpYyBzdGF0
aWMgdm9pZCBjcmVhdGVSdWJ5TWVzc2FnZUJ1aWxkZXJDb250ZXh0KFJ1YnkgcnVudGltZSkgewot
ICAgICAgICBSdWJ5TW9kdWxlIHByb3RvYnVmID0gcnVudGltZS5nZXRDbGFzc0Zyb21QYXRoKCJH
b29nbGU6OlByb3RvYnVmIik7Ci0gICAgICAgIFJ1YnlDbGFzcyBjTWVzc2FnZUJ1aWxkZXJDb250
ZXh0ID0gcHJvdG9idWYuZGVmaW5lQ2xhc3NVbmRlcigiTWVzc2FnZUJ1aWxkZXJDb250ZXh0Iiwg
cnVudGltZS5nZXRPYmplY3QoKSwgbmV3IE9iamVjdEFsbG9jYXRvcigpIHsKLSAgICAgICAgICAg
IEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIElSdWJ5T2JqZWN0IGFsbG9jYXRlKFJ1Ynkg
cnVudGltZSwgUnVieUNsYXNzIGtsYXp6KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBS
dWJ5TWVzc2FnZUJ1aWxkZXJDb250ZXh0KHJ1bnRpbWUsIGtsYXp6KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0gICAgICAgIGNNZXNzYWdlQnVpbGRlckNvbnRleHQuZGVmaW5lQW5ub3Rh
dGVkTWV0aG9kcyhSdWJ5TWVzc2FnZUJ1aWxkZXJDb250ZXh0LmNsYXNzKTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgUnVieU1lc3NhZ2VCdWlsZGVyQ29udGV4dChSdWJ5IHJ1YnksIFJ1YnlDbGFzcyBr
bGF6eikgewotICAgICAgICBzdXBlcihydWJ5LCBrbGF6eik7Ci0gICAgfQotCi0gICAgQEpSdWJ5
TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGluaXRpYWxpemUoVGhyZWFkQ29udGV4dCBj
b250ZXh0LCBJUnVieU9iamVjdCBkZXNjcmlwdG9yLCBJUnVieU9iamVjdCBydWJ5QnVpbGRlcikg
ewotICAgICAgICB0aGlzLmNGaWVsZERlc2NyaXB0b3IgPSAoUnVieUNsYXNzKSBjb250ZXh0LnJ1
bnRpbWUuZ2V0Q2xhc3NGcm9tUGF0aCgiR29vZ2xlOjpQcm90b2J1Zjo6RmllbGREZXNjcmlwdG9y
Iik7Ci0gICAgICAgIHRoaXMuY0Rlc2NyaXB0b3IgPSAoUnVieUNsYXNzKSBjb250ZXh0LnJ1bnRp
bWUuZ2V0Q2xhc3NGcm9tUGF0aCgiR29vZ2xlOjpQcm90b2J1Zjo6RGVzY3JpcHRvciIpOwotICAg
ICAgICB0aGlzLmNPbmVvZkRlc2NyaXB0b3IgPSAoUnVieUNsYXNzKSBjb250ZXh0LnJ1bnRpbWUu
Z2V0Q2xhc3NGcm9tUGF0aCgiR29vZ2xlOjpQcm90b2J1Zjo6T25lb2ZEZXNjcmlwdG9yIik7Ci0g
ICAgICAgIHRoaXMuY09uZW9mQnVpbGRlckNvbnRleHQgPSAoUnVieUNsYXNzKSBjb250ZXh0LnJ1
bnRpbWUuZ2V0Q2xhc3NGcm9tUGF0aCgiR29vZ2xlOjpQcm90b2J1Zjo6SW50ZXJuYWw6Ok9uZW9m
QnVpbGRlckNvbnRleHQiKTsKLSAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gKFJ1YnlEZXNjcmlw
dG9yKSBkZXNjcmlwdG9yOwotICAgICAgICB0aGlzLmJ1aWxkZXIgPSAoUnVieUJ1aWxkZXIpIHJ1
YnlCdWlsZGVyOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvKgotICAgICAq
IGNhbGwtc2VxOgotICAgICAqICAgICBNZXNzYWdlQnVpbGRlckNvbnRleHQub3B0aW9uYWwobmFt
ZSwgdHlwZSwgbnVtYmVyLCB0eXBlX2NsYXNzID0gbmlsKQotICAgICAqCi0gICAgICogRGVmaW5l
cyBhIG5ldyBvcHRpb25hbCBmaWVsZCBvbiB0aGlzIG1lc3NhZ2UgdHlwZSB3aXRoIHRoZSBnaXZl
biB0eXBlLCB0YWcKLSAgICAgKiBudW1iZXIsIGFuZCB0eXBlIGNsYXNzIChmb3IgbWVzc2FnZSBh
bmQgZW51bSBmaWVsZHMpLiBUaGUgdHlwZSBtdXN0IGJlIGEgUnVieQotICAgICAqIHN5bWJvbCAo
YXMgYWNjZXB0ZWQgYnkgRmllbGREZXNjcmlwdG9yI3R5cGU9KSBhbmQgdGhlIHR5cGVfY2xhc3Mg
bXVzdCBiZSBhCi0gICAgICogc3RyaW5nLCBpZiBwcmVzZW50IChhcyBhY2NlcHRlZCBieSBGaWVs
ZERlc2NyaXB0b3Ijc3VibXNnX25hbWU9KS4KLSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QocmVx
dWlyZWQgPSAzLCBvcHRpb25hbCA9IDEpCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IG9wdGlvbmFs
KFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3RbXSBhcmdzKSB7Ci0gICAgICAgIFJ1
YnkgcnVudGltZSA9IGNvbnRleHQucnVudGltZTsKLSAgICAgICAgSVJ1YnlPYmplY3QgdHlwZUNs
YXNzID0gcnVudGltZS5nZXROaWwoKTsKLSAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMykgdHlw
ZUNsYXNzID0gYXJnc1szXTsKLSAgICAgICAgbXNnZGVmQWRkRmllbGQoY29udGV4dCwgIm9wdGlv
bmFsIiwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgdHlwZUNsYXNzKTsKLSAgICAgICAgcmV0
dXJuIGNvbnRleHQucnVudGltZS5nZXROaWwoKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNh
bGwtc2VxOgotICAgICAqICAgICBNZXNzYWdlQnVpbGRlckNvbnRleHQucmVxdWlyZWQobmFtZSwg
dHlwZSwgbnVtYmVyLCB0eXBlX2NsYXNzID0gbmlsKQotICAgICAqCi0gICAgICogRGVmaW5lcyBh
IG5ldyByZXF1aXJlZCBmaWVsZCBvbiB0aGlzIG1lc3NhZ2UgdHlwZSB3aXRoIHRoZSBnaXZlbiB0
eXBlLCB0YWcKLSAgICAgKiBudW1iZXIsIGFuZCB0eXBlIGNsYXNzIChmb3IgbWVzc2FnZSBhbmQg
ZW51bSBmaWVsZHMpLiBUaGUgdHlwZSBtdXN0IGJlIGEgUnVieQotICAgICAqIHN5bWJvbCAoYXMg
YWNjZXB0ZWQgYnkgRmllbGREZXNjcmlwdG9yI3R5cGU9KSBhbmQgdGhlIHR5cGVfY2xhc3MgbXVz
dCBiZSBhCi0gICAgICogc3RyaW5nLCBpZiBwcmVzZW50IChhcyBhY2NlcHRlZCBieSBGaWVsZERl
c2NyaXB0b3Ijc3VibXNnX25hbWU9KS4KLSAgICAgKgotICAgICAqIFByb3RvMyBkb2VzIG5vdCBo
YXZlIHJlcXVpcmVkIGZpZWxkcywgYnV0IHRoaXMgbWV0aG9kIGV4aXN0cyBmb3IKLSAgICAgKiBj
b21wbGV0ZW5lc3MuIEFueSBhdHRlbXB0IHRvIGFkZCBhIG1lc3NhZ2UgdHlwZSB3aXRoIHJlcXVp
cmVkIGZpZWxkcyB0byBhCi0gICAgICogcG9vbCB3aWxsIGN1cnJlbnRseSByZXN1bHQgaW4gYW4g
ZXJyb3IuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kKHJlcXVpcmVkID0gMywgb3B0aW9uYWwg
PSAxKQotICAgIHB1YmxpYyBJUnVieU9iamVjdCByZXF1aXJlZChUaHJlYWRDb250ZXh0IGNvbnRl
eHQsIElSdWJ5T2JqZWN0W10gYXJncykgewotICAgICAgICBJUnVieU9iamVjdCB0eXBlQ2xhc3Mg
PSBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMp
IHR5cGVDbGFzcyA9IGFyZ3NbM107Ci0gICAgICAgIG1zZ2RlZkFkZEZpZWxkKGNvbnRleHQsICJy
ZXF1aXJlZCIsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIHR5cGVDbGFzcyk7Ci0gICAgICAg
IHJldHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAg
KiBjYWxsLXNlcToKLSAgICAgKiAgICAgTWVzc2FnZUJ1aWxkZXJDb250ZXh0LnJlcGVhdGVkKG5h
bWUsIHR5cGUsIG51bWJlciwgdHlwZV9jbGFzcyA9IG5pbCkKLSAgICAgKgotICAgICAqIERlZmlu
ZXMgYSBuZXcgcmVwZWF0ZWQgZmllbGQgb24gdGhpcyBtZXNzYWdlIHR5cGUgd2l0aCB0aGUgZ2l2
ZW4gdHlwZSwgdGFnCi0gICAgICogbnVtYmVyLCBhbmQgdHlwZSBjbGFzcyAoZm9yIG1lc3NhZ2Ug
YW5kIGVudW0gZmllbGRzKS4gVGhlIHR5cGUgbXVzdCBiZSBhIFJ1YnkKLSAgICAgKiBzeW1ib2wg
KGFzIGFjY2VwdGVkIGJ5IEZpZWxkRGVzY3JpcHRvciN0eXBlPSkgYW5kIHRoZSB0eXBlX2NsYXNz
IG11c3QgYmUgYQotICAgICAqIHN0cmluZywgaWYgcHJlc2VudCAoYXMgYWNjZXB0ZWQgYnkgRmll
bGREZXNjcmlwdG9yI3N1Ym1zZ19uYW1lPSkuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kKHJl
cXVpcmVkID0gMywgb3B0aW9uYWwgPSAxKQotICAgIHB1YmxpYyBJUnVieU9iamVjdCByZXBlYXRl
ZChUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0W10gYXJncykgewotICAgICAgICBJ
UnVieU9iamVjdCB0eXBlQ2xhc3MgPSBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAgICAg
IGlmIChhcmdzLmxlbmd0aCA+IDMpIHR5cGVDbGFzcyA9IGFyZ3NbM107Ci0gICAgICAgIG1zZ2Rl
ZkFkZEZpZWxkKGNvbnRleHQsICJyZXBlYXRlZCIsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0s
IHR5cGVDbGFzcyk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0g
ICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgTWVzc2FnZUJ1aWxk
ZXJDb250ZXh0Lm1hcChuYW1lLCBrZXlfdHlwZSwgdmFsdWVfdHlwZSwgbnVtYmVyLAotICAgICAq
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGVfY2xhc3MgPSBuaWwpCi0g
ICAgICoKLSAgICAgKiBEZWZpbmVzIGEgbmV3IG1hcCBmaWVsZCBvbiB0aGlzIG1lc3NhZ2UgdHlw
ZSB3aXRoIHRoZSBnaXZlbiBrZXkgYW5kIHZhbHVlCi0gICAgICogdHlwZXMsIHRhZyBudW1iZXIs
IGFuZCB0eXBlIGNsYXNzIChmb3IgbWVzc2FnZSBhbmQgZW51bSB2YWx1ZSB0eXBlcykuIFRoZSBr
ZXkKLSAgICAgKiB0eXBlIG11c3QgYmUgOmludDMyLzp1aW50MzIvOmludDY0Lzp1aW50NjQsIDpi
b29sLCBvciA6c3RyaW5nLiBUaGUgdmFsdWUgdHlwZQotICAgICAqIHR5cGUgbXVzdCBiZSBhIFJ1
Ynkgc3ltYm9sIChhcyBhY2NlcHRlZCBieSBGaWVsZERlc2NyaXB0b3IjdHlwZT0pIGFuZCB0aGUK
LSAgICAgKiB0eXBlX2NsYXNzIG11c3QgYmUgYSBzdHJpbmcsIGlmIHByZXNlbnQgKGFzIGFjY2Vw
dGVkIGJ5Ci0gICAgICogRmllbGREZXNjcmlwdG9yI3N1Ym1zZ19uYW1lPSkuCi0gICAgICovCi0g
ICAgQEpSdWJ5TWV0aG9kKHJlcXVpcmVkID0gNCwgb3B0aW9uYWwgPSAxKQotICAgIHB1YmxpYyBJ
UnVieU9iamVjdCBtYXAoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdFtdIGFyZ3Mp
IHsKLSAgICAgICAgUnVieSBydW50aW1lID0gY29udGV4dC5ydW50aW1lOwotICAgICAgICBJUnVi
eU9iamVjdCBuYW1lID0gYXJnc1swXTsKLSAgICAgICAgSVJ1YnlPYmplY3Qga2V5VHlwZSA9IGFy
Z3NbMV07Ci0gICAgICAgIElSdWJ5T2JqZWN0IHZhbHVlVHlwZSA9IGFyZ3NbMl07Ci0gICAgICAg
IElSdWJ5T2JqZWN0IG51bWJlciA9IGFyZ3NbM107Ci0gICAgICAgIElSdWJ5T2JqZWN0IHR5cGVD
bGFzcyA9IGFyZ3MubGVuZ3RoID4gNCA/IGFyZ3NbNF0gOiBjb250ZXh0LnJ1bnRpbWUuZ2V0Tmls
KCk7Ci0KLSAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGtleSB0eXBlLiBXZSBjYW4ndCBhY2NlcHQg
ZW51bXMsIG1lc3NhZ2VzLCBvciBmbG9hdHMvZG91YmxlcwotICAgICAgICAvLyBhcyBtYXAga2V5
cy4gKFdlIGV4Y2x1ZGUgdGhlc2UgZXhwbGljaXRseSwgYW5kIHRoZSBmaWVsZC1kZXNjcmlwdG9y
IHNldHRlcgotICAgICAgICAvLyBiZWxvdyB0aGVuIGVuc3VyZXMgdGhhdCB0aGUgdHlwZSBpcyBv
bmUgb2YgdGhlIHJlbWFpbmluZyB2YWxpZCBvcHRpb25zLikKLSAgICAgICAgaWYgKGtleVR5cGUu
ZXF1YWxzKFJ1YnlTeW1ib2wubmV3U3ltYm9sKHJ1bnRpbWUsICJmbG9hdCIpKSB8fAotICAgICAg
ICAgICAgICAgIGtleVR5cGUuZXF1YWxzKFJ1YnlTeW1ib2wubmV3U3ltYm9sKHJ1bnRpbWUsICJk
b3VibGUiKSkgfHwKLSAgICAgICAgICAgICAgICBrZXlUeXBlLmVxdWFscyhSdWJ5U3ltYm9sLm5l
d1N5bWJvbChydW50aW1lLCAiZW51bSIpKSB8fAotICAgICAgICAgICAgICAgIGtleVR5cGUuZXF1
YWxzKFJ1YnlTeW1ib2wubmV3U3ltYm9sKHJ1bnRpbWUsICJtZXNzYWdlIikpKQotICAgICAgICAg
ICAgdGhyb3cgcnVudGltZS5uZXdBcmd1bWVudEVycm9yKCJDYW5ub3QgYWRkIGEgbWFwIGZpZWxk
IHdpdGggYSBmbG9hdCwgZG91YmxlLCBlbnVtLCBvciBtZXNzYWdlIHR5cGUuIik7Ci0KLSAgICAg
ICAgLy8gQ3JlYXRlIGEgbmV3IG1lc3NhZ2UgZGVzY3JpcHRvciBmb3IgdGhlIG1hcCBlbnRyeSBt
ZXNzYWdlLCBhbmQgY3JlYXRlIGEKLSAgICAgICAgLy8gcmVwZWF0ZWQgc3VibWVzc2FnZSBmaWVs
ZCBoZXJlIHdpdGggdGhhdCB0eXBlLgotICAgICAgICBSdWJ5RGVzY3JpcHRvciBtYXBlbnRyeURl
c2MgPSAoUnVieURlc2NyaXB0b3IpIGNEZXNjcmlwdG9yLm5ld0luc3RhbmNlKGNvbnRleHQsIEJs
b2NrLk5VTExfQkxPQ0spOwotICAgICAgICBJUnVieU9iamVjdCBtYXBlbnRyeURlc2NOYW1lID0g
UnVieVN5bWJvbC5uZXdTeW1ib2wocnVudGltZSwgbmFtZSkuaWQybmFtZShjb250ZXh0KTsKLSAg
ICAgICAgbWFwZW50cnlEZXNjLnNldE5hbWUoY29udGV4dCwgbWFwZW50cnlEZXNjTmFtZSk7Ci0g
ICAgICAgIG1hcGVudHJ5RGVzYy5zZXRNYXBFbnRyeSh0cnVlKTsKLQotICAgICAgICAvL29wdGlv
bmFsIDx0eXBlPiBrZXkgPSAxOwotICAgICAgICBSdWJ5RmllbGREZXNjcmlwdG9yIGtleUZpZWxk
ID0gKFJ1YnlGaWVsZERlc2NyaXB0b3IpIGNGaWVsZERlc2NyaXB0b3IubmV3SW5zdGFuY2UoY29u
dGV4dCwgQmxvY2suTlVMTF9CTE9DSyk7Ci0gICAgICAgIGtleUZpZWxkLnNldE5hbWUoY29udGV4
dCwgcnVudGltZS5uZXdTdHJpbmcoImtleSIpKTsKLSAgICAgICAga2V5RmllbGQuc2V0TGFiZWwo
Y29udGV4dCwgUnVieVN5bWJvbC5uZXdTeW1ib2wocnVudGltZSwgIm9wdGlvbmFsIikpOwotICAg
ICAgICBrZXlGaWVsZC5zZXROdW1iZXIoY29udGV4dCwgcnVudGltZS5uZXdGaXhudW0oMSkpOwot
ICAgICAgICBrZXlGaWVsZC5zZXRUeXBlKGNvbnRleHQsIGtleVR5cGUpOwotICAgICAgICBtYXBl
bnRyeURlc2MuYWRkRmllbGQoY29udGV4dCwga2V5RmllbGQpOwotCi0gICAgICAgIC8vb3B0aW9u
YWwgPHR5cGU+IHZhbHVlID0gMjsKLSAgICAgICAgUnVieUZpZWxkRGVzY3JpcHRvciB2YWx1ZUZp
ZWxkID0gKFJ1YnlGaWVsZERlc2NyaXB0b3IpIGNGaWVsZERlc2NyaXB0b3IubmV3SW5zdGFuY2Uo
Y29udGV4dCwgQmxvY2suTlVMTF9CTE9DSyk7Ci0gICAgICAgIHZhbHVlRmllbGQuc2V0TmFtZShj
b250ZXh0LCBydW50aW1lLm5ld1N0cmluZygidmFsdWUiKSk7Ci0gICAgICAgIHZhbHVlRmllbGQu
c2V0TGFiZWwoY29udGV4dCwgUnVieVN5bWJvbC5uZXdTeW1ib2wocnVudGltZSwgIm9wdGlvbmFs
IikpOwotICAgICAgICB2YWx1ZUZpZWxkLnNldE51bWJlcihjb250ZXh0LCBydW50aW1lLm5ld0Zp
eG51bSgyKSk7Ci0gICAgICAgIHZhbHVlRmllbGQuc2V0VHlwZShjb250ZXh0LCB2YWx1ZVR5cGUp
OwotICAgICAgICBpZiAoISB0eXBlQ2xhc3MuaXNOaWwoKSkgdmFsdWVGaWVsZC5zZXRTdWJtc2dO
YW1lKGNvbnRleHQsIHR5cGVDbGFzcyk7Ci0gICAgICAgIG1hcGVudHJ5RGVzYy5hZGRGaWVsZChj
b250ZXh0LCB2YWx1ZUZpZWxkKTsKLQotICAgICAgICAvLyBBZGQgdGhlIG1hcC1lbnRyeSBtZXNz
YWdlIHR5cGUgdG8gdGhlIGN1cnJlbnQgYnVpbGRlciwgYW5kIHVzZSB0aGUgdHlwZSB0bwotICAg
ICAgICAvLyBjcmVhdGUgdGhlIG1hcCBmaWVsZCBpdHNlbGYuCi0gICAgICAgIHRoaXMuYnVpbGRl
ci5wZW5kaW5nTGlzdC5hZGQobWFwZW50cnlEZXNjKTsKLQotICAgICAgICBtc2dkZWZBZGRGaWVs
ZChjb250ZXh0LCAicmVwZWF0ZWQiLCBuYW1lLCBydW50aW1lLm5ld1N5bWJvbCgibWVzc2FnZSIp
LCBudW1iZXIsIG1hcGVudHJ5RGVzY05hbWUpOwotICAgICAgICByZXR1cm4gcnVudGltZS5nZXRO
aWwoKTsKLSAgICB9Ci0KLSAgICBASlJ1YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3Qg
b25lb2YoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCBuYW1lLCBCbG9jayBibG9j
aykgewotICAgICAgICBSdWJ5T25lb2ZEZXNjcmlwdG9yIG9uZW9mZGVmID0gKFJ1YnlPbmVvZkRl
c2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgY09uZW9mRGVzY3JpcHRvci5uZXdJbnN0YW5jZShj
b250ZXh0LCBCbG9jay5OVUxMX0JMT0NLKTsKLSAgICAgICAgUnVieU9uZW9mQnVpbGRlckNvbnRl
eHQgY3R4ID0gKFJ1YnlPbmVvZkJ1aWxkZXJDb250ZXh0KQotICAgICAgICAgICAgICAgIGNPbmVv
ZkJ1aWxkZXJDb250ZXh0Lm5ld0luc3RhbmNlKGNvbnRleHQsIG9uZW9mZGVmLCBCbG9jay5OVUxM
X0JMT0NLKTsKLSAgICAgICAgb25lb2ZkZWYuc2V0TmFtZShjb250ZXh0LCBuYW1lKTsKLSAgICAg
ICAgQmluZGluZyBiaW5kaW5nID0gYmxvY2suZ2V0QmluZGluZygpOwotICAgICAgICBiaW5kaW5n
LnNldFNlbGYoY3R4KTsKLSAgICAgICAgYmxvY2sueWllbGRTcGVjaWZpYyhjb250ZXh0KTsKLSAg
ICAgICAgZGVzY3JpcHRvci5hZGRPbmVvZihjb250ZXh0LCBvbmVvZmRlZik7Ci0gICAgICAgIHJl
dHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lk
IG1zZ2RlZkFkZEZpZWxkKFRocmVhZENvbnRleHQgY29udGV4dCwgU3RyaW5nIGxhYmVsLCBJUnVi
eU9iamVjdCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUnVieU9iamVj
dCB0eXBlLCBJUnVieU9iamVjdCBudW1iZXIsIElSdWJ5T2JqZWN0IHR5cGVDbGFzcykgewotICAg
ICAgICBkZXNjcmlwdG9yLmFkZEZpZWxkKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgVXRpbHMu
bXNnZGVmQ3JlYXRlRmllbGQoY29udGV4dCwgbGFiZWwsIG5hbWUsIHR5cGUsIG51bWJlciwgdHlw
ZUNsYXNzLCBjRmllbGREZXNjcmlwdG9yKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSdWJ5RGVz
Y3JpcHRvciBkZXNjcmlwdG9yOwotICAgIHByaXZhdGUgUnVieUJ1aWxkZXIgYnVpbGRlcjsKLSAg
ICBwcml2YXRlIFJ1YnlDbGFzcyBjRmllbGREZXNjcmlwdG9yOwotICAgIHByaXZhdGUgUnVieUNs
YXNzIGNPbmVvZkRlc2NyaXB0b3I7Ci0gICAgcHJpdmF0ZSBSdWJ5Q2xhc3MgY09uZW9mQnVpbGRl
ckNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBSdWJ5Q2xhc3MgY0Rlc2NyaXB0b3I7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlPbmVv
ZkJ1aWxkZXJDb250ZXh0LmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3Rv
YnVmL2pydWJ5L1J1YnlPbmVvZkJ1aWxkZXJDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGM5Yjk5ZTA0ODlkODM4Mjg3MDJiNDAxZDBmODg0NzU4YWM3ZWY2NzQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWlu
L2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5T25lb2ZCdWlsZGVyQ29udGV4dC5q
YXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotICogQ29weXJpZ2h0IDIwMTQg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVi
eTsKLQotaW1wb3J0IG9yZy5qcnVieS5SdWJ5OwotaW1wb3J0IG9yZy5qcnVieS5SdWJ5Q2xhc3M7
Ci1pbXBvcnQgb3JnLmpydWJ5LlJ1YnlNb2R1bGU7Ci1pbXBvcnQgb3JnLmpydWJ5LlJ1YnlPYmpl
Y3Q7Ci1pbXBvcnQgb3JnLmpydWJ5LmFubm8uSlJ1YnlDbGFzczsKLWltcG9ydCBvcmcuanJ1Ynku
YW5uby5KUnVieU1ldGhvZDsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5PYmplY3RBbGxvY2F0
b3I7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuVGhyZWFkQ29udGV4dDsKLWltcG9ydCBvcmcu
anJ1YnkucnVudGltZS5idWlsdGluLklSdWJ5T2JqZWN0OwotCi1ASlJ1YnlDbGFzcyhuYW1lID0g
Ik9uZW9mQnVpbGRlckNvbnRleHQiKQotcHVibGljIGNsYXNzIFJ1YnlPbmVvZkJ1aWxkZXJDb250
ZXh0IGV4dGVuZHMgUnVieU9iamVjdCB7Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZVJ1
YnlPbmVvZkJ1aWxkZXJDb250ZXh0KFJ1YnkgcnVudGltZSkgewotICAgICAgICBSdWJ5TW9kdWxl
IHByb3RvYnVmID0gcnVudGltZS5nZXRDbGFzc0Zyb21QYXRoKCJHb29nbGU6OlByb3RvYnVmIik7
Ci0gICAgICAgIFJ1YnlNb2R1bGUgaW50ZXJuYWwgPSBwcm90b2J1Zi5kZWZpbmVNb2R1bGVVbmRl
cigiSW50ZXJuYWwiKTsKLSAgICAgICAgUnVieUNsYXNzIGNSdWJ5T25lb2ZCdWlkbGVyQ29udGV4
dCA9IGludGVybmFsLmRlZmluZUNsYXNzVW5kZXIoIk9uZW9mQnVpbGRlckNvbnRleHQiLCBydW50
aW1lLmdldE9iamVjdCgpLCBuZXcgT2JqZWN0QWxsb2NhdG9yKCkgewotICAgICAgICAgICAgQE92
ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgSVJ1YnlPYmplY3QgYWxsb2NhdGUoUnVieSBydWJ5
LCBSdWJ5Q2xhc3MgcnVieUNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdWJ5
T25lb2ZCdWlsZGVyQ29udGV4dChydWJ5LCBydWJ5Q2xhc3MpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9KTsKLSAgICAgICAgY1J1YnlPbmVvZkJ1aWRsZXJDb250ZXh0LmRlZmluZUFubm90YXRl
ZE1ldGhvZHMoUnVieU9uZW9mQnVpbGRlckNvbnRleHQuY2xhc3MpOwotICAgIH0KLQotICAgIHB1
YmxpYyBSdWJ5T25lb2ZCdWlsZGVyQ29udGV4dChSdWJ5IHJ1YnksIFJ1YnlDbGFzcyBydWJ5Q2xh
c3MpIHsKLSAgICAgICAgc3VwZXIocnVieSwgcnVieUNsYXNzKTsKLSAgICB9Ci0KLSAgICBASlJ1
YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgaW5pdGlhbGl6ZShUaHJlYWRDb250ZXh0
IGNvbnRleHQsIElSdWJ5T2JqZWN0IG9uZW9mZGVmKSB7Ci0gICAgICAgIHRoaXMuZGVzY3JpcHRv
ciA9IChSdWJ5T25lb2ZEZXNjcmlwdG9yKSBvbmVvZmRlZjsKLSAgICAgICAgdGhpcy5jRmllbGRE
ZXNjcmlwdG9yID0gKFJ1YnlDbGFzcykgY29udGV4dC5ydW50aW1lLmdldENsYXNzRnJvbVBhdGgo
Ikdvb2dsZTo6UHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvciIpOwotICAgICAgICByZXR1cm4gdGhp
czsKLSAgICB9Ci0KLSAgICBASlJ1YnlNZXRob2QocmVxdWlyZWQgPSAzLCBvcHRpb25hbCA9IDEp
Ci0gICAgcHVibGljIElSdWJ5T2JqZWN0IG9wdGlvbmFsKFRocmVhZENvbnRleHQgY29udGV4dCwg
SVJ1YnlPYmplY3RbXSBhcmdzKSB7Ci0gICAgICAgIElSdWJ5T2JqZWN0IG5hbWUgPSBhcmdzWzBd
OwotICAgICAgICBJUnVieU9iamVjdCB0eXBlID0gYXJnc1sxXTsKLSAgICAgICAgSVJ1YnlPYmpl
Y3QgbnVtYmVyID0gYXJnc1syXTsKLSAgICAgICAgSVJ1YnlPYmplY3QgdHlwZUNsYXNzID0gYXJn
cy5sZW5ndGggPiAzID8gYXJnc1szXSA6IGNvbnRleHQucnVudGltZS5nZXROaWwoKTsKLSAgICAg
ICAgUnVieUZpZWxkRGVzY3JpcHRvciBmaWVsZERlc2NyaXB0b3IgPSBVdGlscy5tc2dkZWZDcmVh
dGVGaWVsZChjb250ZXh0LCAib3B0aW9uYWwiLAotICAgICAgICAgICAgICAgIG5hbWUsIHR5cGUs
IG51bWJlciwgdHlwZUNsYXNzLCBjRmllbGREZXNjcmlwdG9yKTsKLSAgICAgICAgZGVzY3JpcHRv
ci5hZGRGaWVsZChjb250ZXh0LCBmaWVsZERlc2NyaXB0b3IpOwotICAgICAgICByZXR1cm4gdGhp
czsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJ1YnlPbmVvZkRlc2NyaXB0b3IgZGVzY3JpcHRvcjsK
LSAgICBwcml2YXRlIFJ1YnlDbGFzcyBjRmllbGREZXNjcmlwdG9yOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9y
dWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5T25lb2ZEZXNj
cmlwdG9yLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5
L1J1YnlPbmVvZkRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2M0YWI2NjI4NDZjNDg5YjA2Yjg4ZDIzYWM4ODY4YzdkNjc0Y2MyYS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29v
Z2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlPbmVvZkRlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxs
CkBAIC0xLDEyNCArMCwwIEBACi1wYWNrYWdlIGNvbS5nb29nbGUucHJvdG9idWYuanJ1Ynk7Ci0K
LWltcG9ydCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b3M7Ci1pbXBvcnQgY29t
Lmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yczsKLWltcG9ydCBvcmcuanJ1YnkuUnVieTsKLWlt
cG9ydCBvcmcuanJ1YnkuUnVieUNsYXNzOwotaW1wb3J0IG9yZy5qcnVieS5SdWJ5TW9kdWxlOwot
aW1wb3J0IG9yZy5qcnVieS5SdWJ5T2JqZWN0OwotaW1wb3J0IG9yZy5qcnVieS5hbm5vLkpSdWJ5
Q2xhc3M7Ci1pbXBvcnQgb3JnLmpydWJ5LmFubm8uSlJ1YnlNZXRob2Q7Ci1pbXBvcnQgb3JnLmpy
dWJ5LnJ1bnRpbWUuQmxvY2s7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuT2JqZWN0QWxsb2Nh
dG9yOwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLlRocmVhZENvbnRleHQ7Ci1pbXBvcnQgb3Jn
LmpydWJ5LnJ1bnRpbWUuYnVpbHRpbi5JUnVieU9iamVjdDsKLQotaW1wb3J0IGphdmEudXRpbC4q
OwotCi1ASlJ1YnlDbGFzcyhuYW1lID0gIk9uZW9mRGVzY3JpcHRvciIsIGluY2x1ZGUgPSAiRW51
bWVyYWJsZSIpCi1wdWJsaWMgY2xhc3MgUnVieU9uZW9mRGVzY3JpcHRvciBleHRlbmRzIFJ1YnlP
YmplY3QgewotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZVJ1YnlPbmVvZkRlc2NyaXB0
b3IoUnVieSBydW50aW1lKSB7Ci0gICAgICAgIFJ1YnlNb2R1bGUgcHJvdG9idWYgPSBydW50aW1l
LmdldENsYXNzRnJvbVBhdGgoIkdvb2dsZTo6UHJvdG9idWYiKTsKLSAgICAgICAgUnVieUNsYXNz
IGNSdWJ5T25lb2ZEZXNjcmlwdG9yID0gcHJvdG9idWYuZGVmaW5lQ2xhc3NVbmRlcigiT25lb2ZE
ZXNjcmlwdG9yIiwgcnVudGltZS5nZXRPYmplY3QoKSwgbmV3IE9iamVjdEFsbG9jYXRvcigpIHsK
LSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIElSdWJ5T2JqZWN0IGFs
bG9jYXRlKFJ1YnkgcnVieSwgUnVieUNsYXNzIHJ1YnlDbGFzcykgewotICAgICAgICAgICAgICAg
IHJldHVybiBuZXcgUnVieU9uZW9mRGVzY3JpcHRvcihydWJ5LCBydWJ5Q2xhc3MpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgY1J1YnlPbmVvZkRlc2NyaXB0b3IuZGVmaW5l
QW5ub3RhdGVkTWV0aG9kcyhSdWJ5T25lb2ZEZXNjcmlwdG9yLmNsYXNzKTsKLSAgICAgICAgY1J1
YnlPbmVvZkRlc2NyaXB0b3IuaW5jbHVkZU1vZHVsZShydW50aW1lLmdldEVudW1lcmFibGUoKSk7
Ci0gICAgfQotCi0gICAgcHVibGljIFJ1YnlPbmVvZkRlc2NyaXB0b3IoUnVieSBydWJ5LCBSdWJ5
Q2xhc3MgcnVieUNsYXNzKSB7Ci0gICAgICAgIHN1cGVyKHJ1YnksIHJ1YnlDbGFzcyk7Ci0gICAg
fQotCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGluaXRpYWxpemUo
VGhyZWFkQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIGJ1aWxkZXIgPSBEZXNjcmlwdG9yUHJv
dG9zLk9uZW9mRGVzY3JpcHRvclByb3RvLm5ld0J1aWxkZXIoKTsKLSAgICAgICAgZmllbGRzID0g
bmV3IEFycmF5TGlzdDxSdWJ5RmllbGREZXNjcmlwdG9yPigpOwotICAgICAgICByZXR1cm4gdGhp
czsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBPbmVvZkRl
c2NyaXB0b3IubmFtZSA9PiBuYW1lCi0gICAgICoKLSAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9m
IHRoaXMgb25lb2YuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kKG5hbWUgPSAibmFtZSIpCi0g
ICAgcHVibGljIElSdWJ5T2JqZWN0IGdldE5hbWUoVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7Ci0g
ICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0g
ICAgICogICAgIE9uZW9mRGVzY3JpcHRvci5uYW1lID0gbmFtZQotICAgICAqCi0gICAgICogU2V0
cyBhIG5ldyBuYW1lIGZvciB0aGlzIG9uZW9mLiBUaGUgb25lb2YgbXVzdCBub3QgaGF2ZSBiZWVu
IGFkZGVkIHRvIGEKLSAgICAgKiBtZXNzYWdlIGRlc2NyaXB0b3IgeWV0LgotICAgICAqLwotICAg
IEBKUnVieU1ldGhvZChuYW1lID0gIm5hbWU9IikKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3Qgc2V0
TmFtZShUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IG5hbWUpIHsKLSAgICAgICAg
dGhpcy5uYW1lID0gY29udGV4dC5ydW50aW1lLm5ld1N0cmluZyhuYW1lLmFzSmF2YVN0cmluZygp
KTsKLSAgICAgICAgdGhpcy5idWlsZGVyLnNldE5hbWUobmFtZS5hc0phdmFTdHJpbmcoKSk7Ci0g
ICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAgfQotCi0gICAgLyoK
LSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgT25lb2ZEZXNjcmlwdG9yLmFkZF9maWVsZChm
aWVsZCkgPT4gbmlsCi0gICAgICoKLSAgICAgKiBBZGRzIGEgZmllbGQgdG8gdGhpcyBvbmVvZi4g
VGhlIGZpZWxkIG1heSBoYXZlIGJlZW4gYWRkZWQgdG8gdGhpcyBvbmVvZiBpbgotICAgICAqIHRo
ZSBwYXN0LCBvciB0aGUgbWVzc2FnZSB0byB3aGljaCB0aGlzIG9uZW9mIGJlbG9uZ3MgKGlmIGFu
eSksIGJ1dCBtYXkgbm90Ci0gICAgICogaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYW55IG90
aGVyIG9uZW9mIG9yIG1lc3NhZ2UuIE90aGVyd2lzZSwgYW4KLSAgICAgKiBleGNlcHRpb24gaXMg
cmFpc2VkLgotICAgICAqCi0gICAgICogQWxsIGZpZWxkcyBhZGRlZCB0byB0aGUgb25lb2Ygdmlh
IHRoaXMgbWV0aG9kIHdpbGwgYmUgYXV0b21hdGljYWxseSBhZGRlZCB0bwotICAgICAqIHRoZSBt
ZXNzYWdlIHRvIHdoaWNoIHRoaXMgb25lb2YgYmVsb25ncywgaWYgaXQgYmVsb25ncyB0byBvbmUg
Y3VycmVudGx5LCBvcgotICAgICAqIGVsc2Ugd2lsbCBiZSBhZGRlZCB0byBhbnkgbWVzc2FnZSB0
byB3aGljaCB0aGUgb25lb2YgaXMgbGF0ZXIgYWRkZWQgYXQgdGhlCi0gICAgICogdGltZSB0aGF0
IGl0IGlzIGFkZGVkLgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gImFkZF9maWVs
ZCIpCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGFkZEZpZWxkKFRocmVhZENvbnRleHQgY29udGV4
dCwgSVJ1YnlPYmplY3Qgb2JqKSB7Ci0gICAgICAgIFJ1YnlGaWVsZERlc2NyaXB0b3IgZmllbGRE
ZXNjcmlwdG9yID0gKFJ1YnlGaWVsZERlc2NyaXB0b3IpIG9iajsKLSAgICAgICAgZmllbGREZXNj
cmlwdG9yLnNldE9uZW9mTmFtZSh0aGlzLm5hbWUpOwotICAgICAgICBmaWVsZHMuYWRkKGZpZWxk
RGVzY3JpcHRvcik7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0g
ICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgT25lb2ZEZXNjcmlw
dG9yLmVhY2goJmJsb2NrKSA9PiBuaWwKLSAgICAgKgotICAgICAqIEl0ZXJhdGVzIHRocm91Z2gg
ZmllbGRzIGluIHRoaXMgb25lb2YsIHlpZWxkaW5nIHRvIHRoZSBibG9jayBvbiBlYWNoIG9uZS4K
LSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgZWFjaChU
aHJlYWRDb250ZXh0IGNvbnRleHQsIEJsb2NrIGJsb2NrKSB7Ci0gICAgICAgIGZvciAoUnVieUZp
ZWxkRGVzY3JpcHRvciBmaWVsZCA6IGZpZWxkcykgewotICAgICAgICAgICAgYmxvY2sueWllbGRT
cGVjaWZpYyhjb250ZXh0LCBmaWVsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNvbnRl
eHQucnVudGltZS5nZXROaWwoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGVzY3JpcHRvclByb3Rv
cy5PbmVvZkRlc2NyaXB0b3JQcm90byBidWlsZChpbnQgaW5kZXgpIHsKLSAgICAgICAgZm9yIChS
dWJ5RmllbGREZXNjcmlwdG9yIGZpZWxkOiBmaWVsZHMpIHsKLSAgICAgICAgICAgIGZpZWxkLnNl
dE9uZW9mSW5kZXgoaW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLmJ1aWxk
ZXIuYnVpbGQoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSdWJ5RmllbGRE
ZXNjcmlwdG9yPiBnZXRGaWVsZHMoKSB7Ci0gICAgICAgIHJldHVybiBmaWVsZHM7Ci0gICAgfQot
Ci0gICAgcHJvdGVjdGVkIERlc2NyaXB0b3JzLk9uZW9mRGVzY3JpcHRvciBnZXRPbmVvZkRlc2Ny
aXB0b3IoKSB7Ci0gICAgICAgIFJ1YnlGaWVsZERlc2NyaXB0b3IgZmllbGREZXNjcmlwdG9yID0g
ZmllbGRzLmdldCgwKTsKLSAgICAgICAgcmV0dXJuIGZpZWxkRGVzY3JpcHRvci5nZXRGaWVsZERl
ZigpLmdldENvbnRhaW5pbmdPbmVvZigpOwotICAgIH0KLQotICAgIHByaXZhdGUgSVJ1YnlPYmpl
Y3QgbmFtZTsKLSAgICBwcml2YXRlIERlc2NyaXB0b3JQcm90b3MuT25lb2ZEZXNjcmlwdG9yUHJv
dG8uQnVpbGRlciBidWlsZGVyOwotICAgIHByaXZhdGUgTGlzdDxSdWJ5RmllbGREZXNjcmlwdG9y
PiBmaWVsZHM7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL3By
b3RvYnVmL2pydWJ5L1J1YnlQcm90b2J1Zi5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWluL2phdmEvY29tL2dv
b2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5UHJvdG9idWYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMmNmMjEwZDI2ZjU4NTQ4ZTAzODA1ZWVmMDQxMTRjNWMzMzdlODVkNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4v
amF2YS9jb20vZ29vZ2xlL3Byb3RvYnVmL2pydWJ5L1J1YnlQcm90b2J1Zi5qYXZhCisrKyAvZGV2
L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotICogQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVieTsKLQotaW1wb3J0
IG9yZy5qcnVieS5SdWJ5OwotaW1wb3J0IG9yZy5qcnVieS5SdWJ5TW9kdWxlOwotaW1wb3J0IG9y
Zy5qcnVieS5hbm5vLkpSdWJ5TWV0aG9kOwotaW1wb3J0IG9yZy5qcnVieS5hbm5vLkpSdWJ5TW9k
dWxlOwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLlRocmVhZENvbnRleHQ7Ci1pbXBvcnQgb3Jn
LmpydWJ5LnJ1bnRpbWUuYnVpbHRpbi5JUnVieU9iamVjdDsKLQotQEpSdWJ5TW9kdWxlKG5hbWUg
PSAiUHJvdG9idWYiKQotcHVibGljIGNsYXNzIFJ1YnlQcm90b2J1ZiB7Ci0KLSAgICBwdWJsaWMg
c3RhdGljIHZvaWQgY3JlYXRlUHJvdG9idWYoUnVieSBydW50aW1lKSB7Ci0gICAgICAgIFJ1YnlN
b2R1bGUgbUdvb2dsZSA9IHJ1bnRpbWUuZ2V0TW9kdWxlKCJHb29nbGUiKTsKLSAgICAgICAgUnVi
eU1vZHVsZSBtUHJvdG9idWYgPSBtR29vZ2xlLmRlZmluZU1vZHVsZVVuZGVyKCJQcm90b2J1ZiIp
OwotICAgICAgICBtUHJvdG9idWYuZGVmaW5lQW5ub3RhdGVkTWV0aG9kcyhSdWJ5UHJvdG9idWYu
Y2xhc3MpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIEdv
b2dsZTo6UHJvdG9idWYuZGVlcF9jb3B5KG9iaikgPT4gY29weV9vZl9vYmoKLSAgICAgKgotICAg
ICAqIFBlcmZvcm1zIGEgZGVlcCBjb3B5IG9mIGVpdGhlciBhIFJlcGVhdGVkRmllbGQgaW5zdGFu
Y2Ugb3IgYSBtZXNzYWdlIG9iamVjdCwKLSAgICAgKiByZWN1cnNpdmVseSBjb3B5aW5nIGl0cyBt
ZW1iZXJzLgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0gImRlZXBfY29weSIsIG1l
dGEgPSB0cnVlKQotICAgIHB1YmxpYyBzdGF0aWMgSVJ1YnlPYmplY3QgZGVlcENvcHkoVGhyZWFk
Q29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCBzZWxmLCBJUnVieU9iamVjdCBtZXNzYWdlKSB7
Ci0gICAgICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgUnVieU1lc3NhZ2UpIHsKLSAgICAgICAg
ICAgIHJldHVybiAoKFJ1YnlNZXNzYWdlKSBtZXNzYWdlKS5kZWVwQ29weShjb250ZXh0KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgUnVieVJlcGVhdGVkRmllbGQpIHsK
LSAgICAgICAgICAgIHJldHVybiAoKFJ1YnlSZXBlYXRlZEZpZWxkKSBtZXNzYWdlKS5kZWVwQ29w
eShjb250ZXh0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiAoKFJ1YnlN
YXApIG1lc3NhZ2UpLmRlZXBDb3B5KGNvbnRleHQpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9ydWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9SdWJ5
UmVwZWF0ZWRGaWVsZC5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1
Zi9qcnVieS9SdWJ5UmVwZWF0ZWRGaWVsZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5NDZmOWU3NDY4YmJmMGRmM2E1MGQ4NjAwMzdlMzA1ZjQ3NGM3ODM4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2Nv
bS9nb29nbGUvcHJvdG9idWYvanJ1YnkvUnVieVJlcGVhdGVkRmllbGQuamF2YQorKysgL2Rldi9u
dWxsCkBAIC0xLDQwOSArMCwwIEBACi0vKgotICogUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0gKiBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotcGFja2FnZSBjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5OwotCi1pbXBvcnQg
Y29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yczsKLWltcG9ydCBvcmcuanJ1YnkuKjsKLWlt
cG9ydCBvcmcuanJ1YnkuYW5uby5KUnVieUNsYXNzOwotaW1wb3J0IG9yZy5qcnVieS5hbm5vLkpS
dWJ5TWV0aG9kOwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLkJsb2NrOwotaW1wb3J0IG9yZy5q
cnVieS5ydW50aW1lLk9iamVjdEFsbG9jYXRvcjsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5U
aHJlYWRDb250ZXh0OwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLmJ1aWx0aW4uSVJ1YnlPYmpl
Y3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotQEpSdWJ5Q2xhc3MobmFtZSA9ICJSZXBl
YXRlZENsYXNzIiwgaW5jbHVkZSA9ICJFbnVtZXJhYmxlIikKLXB1YmxpYyBjbGFzcyBSdWJ5UmVw
ZWF0ZWRGaWVsZCBleHRlbmRzIFJ1YnlPYmplY3QgewotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBj
cmVhdGVSdWJ5UmVwZWF0ZWRGaWVsZChSdWJ5IHJ1bnRpbWUpIHsKLSAgICAgICAgUnVieU1vZHVs
ZSBtUHJvdG9idWYgPSBydW50aW1lLmdldENsYXNzRnJvbVBhdGgoIkdvb2dsZTo6UHJvdG9idWYi
KTsKLSAgICAgICAgUnVieUNsYXNzIGNSZXBlYXRlZEZpZWxkID0gbVByb3RvYnVmLmRlZmluZUNs
YXNzVW5kZXIoIlJlcGVhdGVkRmllbGQiLCBydW50aW1lLmdldE9iamVjdCgpLAotICAgICAgICAg
ICAgICAgIG5ldyBPYmplY3RBbGxvY2F0b3IoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVy
cmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgSVJ1YnlPYmplY3QgYWxsb2NhdGUoUnVi
eSBydW50aW1lLCBSdWJ5Q2xhc3Mga2xhenopIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBuZXcgUnVieVJlcGVhdGVkRmllbGQocnVudGltZSwga2xhenopOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNSZXBlYXRlZEZpZWxkLmRl
ZmluZUFubm90YXRlZE1ldGhvZHMoUnVieVJlcGVhdGVkRmllbGQuY2xhc3MpOwotICAgICAgICBj
UmVwZWF0ZWRGaWVsZC5pbmNsdWRlTW9kdWxlKHJ1bnRpbWUuZ2V0RW51bWVyYWJsZSgpKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgUnVieVJlcGVhdGVkRmllbGQoUnVieSBydW50aW1lLCBSdWJ5Q2xh
c3Mga2xhenopIHsKLSAgICAgICAgc3VwZXIocnVudGltZSwga2xhenopOwotICAgIH0KLQotICAg
IHB1YmxpYyBSdWJ5UmVwZWF0ZWRGaWVsZChSdWJ5IHJ1bnRpbWUsIFJ1YnlDbGFzcyBrbGF6eiwg
RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLlR5cGUgZmllbGRUeXBlLCBJUnVieU9iamVjdCB0
eXBlQ2xhc3MpIHsKLSAgICAgICAgdGhpcyhydW50aW1lLCBrbGF6eik7Ci0gICAgICAgIHRoaXMu
ZmllbGRUeXBlID0gZmllbGRUeXBlOwotICAgICAgICB0aGlzLnN0b3JhZ2UgPSBydW50aW1lLm5l
d0FycmF5KCk7Ci0gICAgICAgIHRoaXMudHlwZUNsYXNzID0gdHlwZUNsYXNzOwotICAgIH0KLQot
ICAgIEBKUnVieU1ldGhvZChyZXF1aXJlZCA9IDEsIG9wdGlvbmFsID0gMikKLSAgICBwdWJsaWMg
SVJ1YnlPYmplY3QgaW5pdGlhbGl6ZShUaHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0
W10gYXJncykgewotICAgICAgICBSdWJ5IHJ1bnRpbWUgPSBjb250ZXh0LnJ1bnRpbWU7Ci0gICAg
ICAgIHRoaXMuc3RvcmFnZSA9IHJ1bnRpbWUubmV3QXJyYXkoKTsKLSAgICAgICAgSVJ1YnlPYmpl
Y3QgYXJ5ID0gbnVsbDsKLSAgICAgICAgaWYgKCEoYXJnc1swXSBpbnN0YW5jZW9mIFJ1YnlTeW1i
b2wpKSB7Ci0gICAgICAgICAgICB0aHJvdyBydW50aW1lLm5ld0FyZ3VtZW50RXJyb3IoIkV4cGVj
dGVkIFN5bWJvbCBmb3IgdHlwZSBuYW1lIik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5maWVs
ZFR5cGUgPSBVdGlscy5ydWJ5VG9GaWVsZFR5cGUoYXJnc1swXSk7Ci0gICAgICAgIGlmIChmaWVs
ZFR5cGUgPT0gRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLlR5cGUuTUVTU0FHRQotICAgICAg
ICAgICAgICAgIHx8IGZpZWxkVHlwZSA9PSBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IuVHlw
ZS5FTlVNKSB7Ci0gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKQotICAgICAgICAgICAg
ICAgIHRocm93IHJ1bnRpbWUubmV3QXJndW1lbnRFcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgMiBh
cmd1bWVudHMgZm9yIG1lc3NhZ2UvZW51bSIpOwotICAgICAgICAgICAgdHlwZUNsYXNzID0gYXJn
c1sxXTsKLSAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIpCi0gICAgICAgICAgICAgICAg
YXJ5ID0gYXJnc1syXTsKLSAgICAgICAgICAgIFV0aWxzLnZhbGlkYXRlVHlwZUNsYXNzKGNvbnRl
eHQsIGZpZWxkVHlwZSwgdHlwZUNsYXNzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChhcmdzLmxlbmd0aCA+IDIpCi0gICAgICAgICAgICAgICAgdGhyb3cgcnVudGltZS5uZXdB
cmd1bWVudEVycm9yKCJUb28gbWFueSBhcmd1bWVudHM6IGV4cGVjdGVkIDEgb3IgMiIpOwotICAg
ICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkKLSAgICAgICAgICAgICAgICBhcnkgPSBhcmdz
WzFdOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhcnkgIT0gbnVsbCkgewotICAgICAgICAgICAg
UnVieUFycmF5IGFyciA9IGFyeS5jb252ZXJ0VG9BcnJheSgpOwotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhcnIuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICB0aGlzLnN0
b3JhZ2UuYWRkKGFyci5lbHRJbnRlcm5hbChpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToK
LSAgICAgKiAgICAgUmVwZWF0ZWRGaWVsZC5bXT0oaW5kZXgsIHZhbHVlKQotICAgICAqCi0gICAg
ICogU2V0cyB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gaW5kZXguIE9uIG91dC1vZi1ib3VuZHMg
YXNzaWdubWVudHMsIGV4dGVuZHMKLSAgICAgKiB0aGUgYXJyYXkgYW5kIGZpbGxzIHRoZSBob2xl
IChpZiBhbnkpIHdpdGggZGVmYXVsdCB2YWx1ZXMuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9k
KG5hbWUgPSAiW109IikKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgaW5kZXhTZXQoVGhyZWFkQ29u
dGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCBpbmRleCwgSVJ1YnlPYmplY3QgdmFsdWUpIHsKLSAg
ICAgICAgaW50IGFyckluZGV4ID0gbm9ybWFsaXplQXJyYXlJbmRleChpbmRleCk7Ci0gICAgICAg
IFV0aWxzLmNoZWNrVHlwZShjb250ZXh0LCBmaWVsZFR5cGUsIHZhbHVlLCAoUnVieU1vZHVsZSkg
dHlwZUNsYXNzKTsKLSAgICAgICAgSVJ1YnlPYmplY3QgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZh
bHVlKGNvbnRleHQpOwotICAgICAgICBmb3IgKGludCBpID0gdGhpcy5zdG9yYWdlLnNpemUoKTsg
aSA8IGFyckluZGV4OyBpKyspIHsKLSAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoaSwgZGVm
YXVsdFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGFyckluZGV4
LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCk7Ci0gICAg
fQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgUmVwZWF0ZWRGaWVsZC5b
XShpbmRleCkgPT4gdmFsdWUKLSAgICAgKgotICAgICAqIEFjY2Vzc2VzIHRoZSBlbGVtZW50IGF0
IHRoZSBnaXZlbiBpbmRleC4gUmV0dXJucyBuaWwgb24gb3V0LW9mLWJvdW5kcwotICAgICAqLwot
ICAgIEBKUnVieU1ldGhvZChyZXF1aXJlZD0xLCBvcHRpb25hbD0xLCBuYW1lID0geyJhdCIsICJb
XSJ9KQotICAgIHB1YmxpYyBJUnVieU9iamVjdCBpbmRleChUaHJlYWRDb250ZXh0IGNvbnRleHQs
IElSdWJ5T2JqZWN0W10gYXJncykgewotICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSl7Ci0g
ICAgICAgICAgICBJUnVieU9iamVjdCBhcmcgPSBhcmdzWzBdOwotICAgICAgICAgICAgaWYgKFV0
aWxzLmlzUnVieU51bShhcmcpKSB7Ci0gICAgICAgICAgICAgICAgLyogc3RhbmRhcmQgY2FzZSAq
LwotICAgICAgICAgICAgICAgIGludCBhcnJJbmRleCA9IG5vcm1hbGl6ZUFycmF5SW5kZXgoYXJn
KTsKLSAgICAgICAgICAgICAgICBpZiAoYXJySW5kZXggPCAwIHx8IGFyckluZGV4ID49IHRoaXMu
c3RvcmFnZS5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucnVu
dGltZS5nZXROaWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuc3RvcmFnZS5lbHRJbnRlcm5hbChhcnJJbmRleCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKGFyZyBpbnN0YW5jZW9mIFJ1YnlSYW5nZSkgewotICAgICAgICAgICAgICAgIFJ1YnlSYW5n
ZSByYW5nZSA9ICgoUnVieVJhbmdlKSBhcmcpOwotICAgICAgICAgICAgICAgIGludCBiZWcgPSBS
dWJ5TnVtZXJpYy5udW0yaW50KHJhbmdlLmZpcnN0KGNvbnRleHQpKTsKLSAgICAgICAgICAgICAg
ICBpbnQgdG8gPSBSdWJ5TnVtZXJpYy5udW0yaW50KHJhbmdlLmxhc3QoY29udGV4dCkpOwotICAg
ICAgICAgICAgICAgIGludCBsZW4gPSB0byAtIGJlZyArIDE7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuc3RvcmFnZS5zdWJzZXEoYmVnLCBsZW4pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIC8qIGFzc3VtZSAyIGFyZ3VtZW50cyAqLwotICAgICAgICBpbnQgYmVnID0g
UnVieU51bWVyaWMubnVtMmludChhcmdzWzBdKTsKLSAgICAgICAgaW50IGxlbiA9IFJ1YnlOdW1l
cmljLm51bTJpbnQoYXJnc1sxXSk7Ci0gICAgICAgIGlmIChiZWcgPCAwKSB7Ci0gICAgICAgICAg
ICBiZWcgKz0gdGhpcy5zdG9yYWdlLnNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmVn
ID49IHRoaXMuc3RvcmFnZS5zaXplKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnJ1
bnRpbWUuZ2V0TmlsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5z
dWJzZXEoYmVnLCBsZW4pOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAg
ICogICAgIFJlcGVhdGVkRmllbGQucHVzaCh2YWx1ZSkKLSAgICAgKgotICAgICAqIEFkZHMgYSBu
ZXcgZWxlbWVudCB0byB0aGUgcmVwZWF0ZWQgZmllbGQuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0
aG9kKG5hbWUgPSB7InB1c2giLCAiPDwifSkKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgcHVzaChU
aHJlYWRDb250ZXh0IGNvbnRleHQsIElSdWJ5T2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIGlmICgh
KGZpZWxkVHlwZSA9PSBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IuVHlwZS5NRVNTQUdFICYm
Ci0gICAgICAgICAgICB2YWx1ZSA9PSBjb250ZXh0LnJ1bnRpbWUuZ2V0TmlsKCkpKSB7Ci0gICAg
ICAgICAgICBVdGlscy5jaGVja1R5cGUoY29udGV4dCwgZmllbGRUeXBlLCB2YWx1ZSwgKFJ1YnlN
b2R1bGUpIHR5cGVDbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5zdG9yYWdlLmFkZCh2
YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2U7Ci0gICAgfQotCi0gICAgLyoKLSAg
ICAgKiBwcml2YXRlIFJ1YnkgbWV0aG9kIHVzZWQgYnkgUmVwZWF0ZWRGaWVsZC5wb3AKLSAgICAg
Ki8KLSAgICBASlJ1YnlNZXRob2QodmlzaWJpbGl0eSA9IG9yZy5qcnVieS5ydW50aW1lLlZpc2li
aWxpdHkuUFJJVkFURSkKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgcG9wX29uZShUaHJlYWRDb250
ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgSVJ1YnlPYmplY3QgcmV0ID0gdGhpcy5zdG9yYWdlLmxh
c3QoKTsKLSAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShyZXQpOwotICAgICAgICByZXR1cm4g
cmV0OwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1zZXE6Ci0gICAgICogICAgIFJlcGVh
dGVkRmllbGQucmVwbGFjZShsaXN0KQotICAgICAqCi0gICAgICogUmVwbGFjZXMgdGhlIGNvbnRl
bnRzIG9mIHRoZSByZXBlYXRlZCBmaWVsZCB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGVsZW1lbnRz
LgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZAotICAgIHB1YmxpYyBJUnVieU9iamVjdCByZXBs
YWNlKFRocmVhZENvbnRleHQgY29udGV4dCwgSVJ1YnlPYmplY3QgbGlzdCkgewotICAgICAgICBS
dWJ5QXJyYXkgYXJyID0gKFJ1YnlBcnJheSkgbGlzdDsKLSAgICAgICAgY2hlY2tBcnJheUVsZW1l
bnRUeXBlKGNvbnRleHQsIGFycik7Ci0gICAgICAgIHRoaXMuc3RvcmFnZSA9IGFycjsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuc3RvcmFnZTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2Vx
OgotICAgICAqICAgICBSZXBlYXRlZEZpZWxkLmNsZWFyCi0gICAgICoKLSAgICAgKiBDbGVhcnMg
KHJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20pIHRoaXMgcmVwZWF0ZWQgZmllbGQuCi0gICAgICov
Ci0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGNsZWFyKFRocmVhZENv
bnRleHQgY29udGV4dCkgewotICAgICAgICB0aGlzLnN0b3JhZ2UuY2xlYXIoKTsKLSAgICAgICAg
cmV0dXJuIHRoaXMuc3RvcmFnZTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgot
ICAgICAqICAgICBSZXBlYXRlZEZpZWxkLmxlbmd0aAotICAgICAqCi0gICAgICogUmV0dXJucyB0
aGUgbGVuZ3RoIG9mIHRoaXMgcmVwZWF0ZWQgZmllbGQuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0
aG9kKG5hbWUgPSB7Imxlbmd0aCIsICJzaXplIn0pCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGxl
bmd0aChUaHJlYWRDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQucnVu
dGltZS5uZXdGaXhudW0odGhpcy5zdG9yYWdlLnNpemUoKSk7Ci0gICAgfQotCi0gICAgLyoKLSAg
ICAgKiBjYWxsLXNlcToKLSAgICAgKiAgICAgUmVwZWF0ZWRGaWVsZC4rKG90aGVyKSA9PiByZXBl
YXRlZCBmaWVsZAotICAgICAqCi0gICAgICogUmV0dXJucyBhIG5ldyByZXBlYXRlZCBmaWVsZCB0
aGF0IGNvbnRhaW5zIHRoZSBjb25jYXRlbmF0ZWQgbGlzdCBvZiB0aGlzCi0gICAgICogcmVwZWF0
ZWQgZmllbGQncyBlbGVtZW50cyBhbmQgb3RoZXIncyBlbGVtZW50cy4gVGhlIG90aGVyIChzZWNv
bmQpIGxpc3QgbWF5Ci0gICAgICogYmUgZWl0aGVyIGFub3RoZXIgcmVwZWF0ZWQgZmllbGQgb3Ig
YSBSdWJ5IGFycmF5LgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZChuYW1lID0geyIrIn0pCi0g
ICAgcHVibGljIElSdWJ5T2JqZWN0IHBsdXMoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9i
amVjdCBsaXN0KSB7Ci0gICAgICAgIFJ1YnlSZXBlYXRlZEZpZWxkIGR1cCA9IChSdWJ5UmVwZWF0
ZWRGaWVsZCkgZHVwKGNvbnRleHQpOwotICAgICAgICBpZiAobGlzdCBpbnN0YW5jZW9mIFJ1YnlB
cnJheSkgewotICAgICAgICAgICAgY2hlY2tBcnJheUVsZW1lbnRUeXBlKGNvbnRleHQsIChSdWJ5
QXJyYXkpIGxpc3QpOwotICAgICAgICAgICAgZHVwLnN0b3JhZ2UuYWRkQWxsKChSdWJ5QXJyYXkp
IGxpc3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUnVieVJlcGVhdGVkRmllbGQg
cmVwZWF0ZWRGaWVsZCA9IChSdWJ5UmVwZWF0ZWRGaWVsZCkgbGlzdDsKLSAgICAgICAgICAgIGlm
ICghIGZpZWxkVHlwZS5lcXVhbHMocmVwZWF0ZWRGaWVsZC5maWVsZFR5cGUpIHx8ICh0eXBlQ2xh
c3MgIT0gbnVsbCAmJiAhCi0gICAgICAgICAgICAgICAgICAgIHR5cGVDbGFzcy5lcXVhbHMocmVw
ZWF0ZWRGaWVsZC50eXBlQ2xhc3MpKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBjb250ZXh0LnJ1
bnRpbWUubmV3QXJndW1lbnRFcnJvcigiQXR0ZW1wdCB0byBhcHBlbmQgUmVwZWF0ZWRGaWVsZCB3
aXRoIGRpZmZlcmVudCBlbGVtZW50IHR5cGUuIik7Ci0gICAgICAgICAgICBkdXAuc3RvcmFnZS5h
ZGRBbGwoKFJ1YnlBcnJheSkgcmVwZWF0ZWRGaWVsZC50b0FycmF5KGNvbnRleHQpKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gZHVwOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1z
ZXE6Ci0gICAgICogICAgIFJlcGVhdGVkRmllbGQuY29uY2F0KG90aGVyKSA9PiBzZWxmCi0gICAg
ICoKLSAgICAgKiBjb25jYXRzIHRoZSBwYXNzZWQgaW4gYXJyYXkgdG8gc2VsZi4gIFJldHVybnMg
YSBSdWJ5IGFycmF5LgotICAgICAqLwotICAgIEBKUnVieU1ldGhvZAotICAgIHB1YmxpYyBJUnVi
eU9iamVjdCBjb25jYXQoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCBsaXN0KSB7
Ci0gICAgICAgIGlmIChsaXN0IGluc3RhbmNlb2YgUnVieUFycmF5KSB7Ci0gICAgICAgICAgICBj
aGVja0FycmF5RWxlbWVudFR5cGUoY29udGV4dCwgKFJ1YnlBcnJheSkgbGlzdCk7Ci0gICAgICAg
ICAgICB0aGlzLnN0b3JhZ2UuYWRkQWxsKChSdWJ5QXJyYXkpIGxpc3QpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgUnVieVJlcGVhdGVkRmllbGQgcmVwZWF0ZWRGaWVsZCA9IChSdWJ5
UmVwZWF0ZWRGaWVsZCkgbGlzdDsKLSAgICAgICAgICAgIGlmICghIGZpZWxkVHlwZS5lcXVhbHMo
cmVwZWF0ZWRGaWVsZC5maWVsZFR5cGUpIHx8ICh0eXBlQ2xhc3MgIT0gbnVsbCAmJiAhCi0gICAg
ICAgICAgICAgICAgICAgIHR5cGVDbGFzcy5lcXVhbHMocmVwZWF0ZWRGaWVsZC50eXBlQ2xhc3Mp
KSkKLSAgICAgICAgICAgICAgICB0aHJvdyBjb250ZXh0LnJ1bnRpbWUubmV3QXJndW1lbnRFcnJv
cigiQXR0ZW1wdCB0byBhcHBlbmQgUmVwZWF0ZWRGaWVsZCB3aXRoIGRpZmZlcmVudCBlbGVtZW50
IHR5cGUuIik7Ci0gICAgICAgICAgICB0aGlzLnN0b3JhZ2UuYWRkQWxsKChSdWJ5QXJyYXkpIHJl
cGVhdGVkRmllbGQudG9BcnJheShjb250ZXh0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRoaXMuc3RvcmFnZTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAq
ICAgICBSZXBlYXRlZEZpZWxkLmhhc2ggPT4gaGFzaF92YWx1ZQotICAgICAqCi0gICAgICogUmV0
dXJucyBhIGhhc2ggdmFsdWUgY29tcHV0ZWQgZnJvbSB0aGlzIHJlcGVhdGVkIGZpZWxkJ3MgZWxl
bWVudHMuCi0gICAgICovCi0gICAgQEpSdWJ5TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0
IGhhc2goVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIGludCBoYXNoQ29kZSA9IHRo
aXMuc3RvcmFnZS5oYXNoQ29kZSgpOwotICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLm5l
d0ZpeG51bShoYXNoQ29kZSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjYWxsLXNlcToKLSAg
ICAgKiAgICAgUmVwZWF0ZWRGaWVsZC49PShvdGhlcikgPT4gYm9vbGVhbgotICAgICAqCi0gICAg
ICogQ29tcGFyZXMgdGhpcyByZXBlYXRlZCBmaWVsZCB0byBhbm90aGVyLiBSZXBlYXRlZCBmaWVs
ZHMgYXJlIGVxdWFsIGlmIHRoZWlyCi0gICAgICogZWxlbWVudCB0eXBlcyBhcmUgZXF1YWwsIHRo
ZWlyIGxlbmd0aHMgYXJlIGVxdWFsLCBhbmQgZWFjaCBlbGVtZW50IGlzIGVxdWFsLgotICAgICAq
IEVsZW1lbnRzIGFyZSBjb21wYXJlZCBhcyBwZXIgbm9ybWFsIFJ1Ynkgc2VtYW50aWNzLCBieSBj
YWxsaW5nIHRoZWlyIDo9PQotICAgICAqIG1ldGhvZHMgKG9yIHBlcmZvcm1pbmcgYSBtb3JlIGVm
ZmljaWVudCBjb21wYXJpc29uIGZvciBwcmltaXRpdmUgdHlwZXMpLgotICAgICAqLwotICAgIEBK
UnVieU1ldGhvZChuYW1lID0gIj09IikKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgZXEoVGhyZWFk
Q29udGV4dCBjb250ZXh0LCBJUnVieU9iamVjdCBvdGhlcikgewotICAgICAgICByZXR1cm4gdGhp
cy50b0FycmF5KGNvbnRleHQpLm9wX2VxdWFsKGNvbnRleHQsIG90aGVyKTsKLSAgICB9Ci0KLSAg
ICAvKgotICAgICAqIGNhbGwtc2VxOgotICAgICAqICAgICBSZXBlYXRlZEZpZWxkLmVhY2goJmJs
b2NrKQotICAgICAqCi0gICAgICogSW52b2tlcyB0aGUgYmxvY2sgb25jZSBmb3IgZWFjaCBlbGVt
ZW50IG9mIHRoZSByZXBlYXRlZCBmaWVsZC4gUmVwZWF0ZWRGaWVsZAotICAgICAqIGFsc28gaW5j
bHVkZXMgRW51bWVyYWJsZTsgY29tYmluZWQgd2l0aCB0aGlzIG1ldGhvZCwgdGhlIHJlcGVhdGVk
IGZpZWxkIHRodXMKLSAgICAgKiBhY3RzIGxpa2UgYW4gb3JkaW5hcnkgUnVieSBzZXF1ZW5jZS4K
LSAgICAgKi8KLSAgICBASlJ1YnlNZXRob2QKLSAgICBwdWJsaWMgSVJ1YnlPYmplY3QgZWFjaChU
aHJlYWRDb250ZXh0IGNvbnRleHQsIEJsb2NrIGJsb2NrKSB7Ci0gICAgICAgIHRoaXMuc3RvcmFn
ZS5lYWNoKGNvbnRleHQsIGJsb2NrKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZTsKLSAg
ICB9Ci0KLQotICAgIEBKUnVieU1ldGhvZChuYW1lID0geyJ0b19hcnkiLCAidG9fYSJ9KQotICAg
IHB1YmxpYyBJUnVieU9iamVjdCB0b0FycmF5KFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAg
ICAgICByZXR1cm4gdGhpcy5zdG9yYWdlOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY2FsbC1z
ZXE6Ci0gICAgICogICAgIFJlcGVhdGVkRmllbGQuZHVwID0+IHJlcGVhdGVkX2ZpZWxkCi0gICAg
ICoKLSAgICAgKiBEdXBsaWNhdGVzIHRoaXMgcmVwZWF0ZWQgZmllbGQgd2l0aCBhIHNoYWxsb3cg
Y29weS4gUmVmZXJlbmNlcyB0byBhbGwKLSAgICAgKiBub24tcHJpbWl0aXZlIGVsZW1lbnQgb2Jq
ZWN0cyAoZS5nLiwgc3VibWVzc2FnZXMpIGFyZSBzaGFyZWQuCi0gICAgICovCi0gICAgQEpSdWJ5
TWV0aG9kCi0gICAgcHVibGljIElSdWJ5T2JqZWN0IGR1cChUaHJlYWRDb250ZXh0IGNvbnRleHQp
IHsKLSAgICAgICAgUnVieVJlcGVhdGVkRmllbGQgZHVwID0gbmV3IFJ1YnlSZXBlYXRlZEZpZWxk
KGNvbnRleHQucnVudGltZSwgbWV0YUNsYXNzLCBmaWVsZFR5cGUsIHR5cGVDbGFzcyk7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy5zdG9yYWdlLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICBkdXAucHVzaChjb250ZXh0LCB0aGlzLnN0b3JhZ2UuZWx0SW50ZXJuYWwoaSkpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkdXA7Ci0gICAgfQotCi0gICAgLy8gSmF2YSBBUEkK
LSAgICBwcm90ZWN0ZWQgSVJ1YnlPYmplY3QgZ2V0KGludCBpbmRleCkgewotICAgICAgICByZXR1
cm4gdGhpcy5zdG9yYWdlLmVsdEludGVybmFsKGluZGV4KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0
ZWQgUnVieVJlcGVhdGVkRmllbGQgZGVlcENvcHkoVGhyZWFkQ29udGV4dCBjb250ZXh0KSB7Ci0g
ICAgICAgIFJ1YnlSZXBlYXRlZEZpZWxkIGNvcHkgPSBuZXcgUnVieVJlcGVhdGVkRmllbGQoY29u
dGV4dC5ydW50aW1lLCBtZXRhQ2xhc3MsIGZpZWxkVHlwZSwgdHlwZUNsYXNzKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzaXplKCk7IGkrKykgewotICAgICAgICAgICAgSVJ1YnlPYmpl
Y3QgdmFsdWUgPSBzdG9yYWdlLmVsdEludGVybmFsKGkpOwotICAgICAgICAgICAgaWYgKGZpZWxk
VHlwZSA9PSBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IuVHlwZS5NRVNTQUdFKSB7Ci0gICAg
ICAgICAgICAgICAgY29weS5zdG9yYWdlLmFkZCgoKFJ1YnlNZXNzYWdlKSB2YWx1ZSkuZGVlcENv
cHkoY29udGV4dCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb3B5
LnN0b3JhZ2UuYWRkKHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gY29weTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgaW50IHNpemUoKSB7Ci0gICAgICAg
IHJldHVybiB0aGlzLnN0b3JhZ2Uuc2l6ZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgSVJ1YnlP
YmplY3QgZGVmYXVsdFZhbHVlKFRocmVhZENvbnRleHQgY29udGV4dCkgewotICAgICAgICBTZW50
aW5lbE91dGVyQ2xhc3MuU2VudGluZWwgc2VudGluZWwgPSBTZW50aW5lbE91dGVyQ2xhc3MuU2Vu
dGluZWwuZ2V0RGVmYXVsdEluc3RhbmNlKCk7Ci0gICAgICAgIE9iamVjdCB2YWx1ZTsKLSAgICAg
ICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgSU5UMzI6Ci0gICAgICAg
ICAgICAgICAgdmFsdWUgPSBzZW50aW5lbC5nZXREZWZhdWx0SW50MzIoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSU5UNjQ6Ci0gICAgICAgICAgICAgICAgdmFs
dWUgPSBzZW50aW5lbC5nZXREZWZhdWx0SW50NjQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgVUlOVDMyOgotICAgICAgICAgICAgICAgIHZhbHVlID0gc2VudGlu
ZWwuZ2V0RGVmYXVsdFVuaXQzMigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBVSU5UNjQ6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBzZW50aW5lbC5nZXREZWZh
dWx0VWludDY0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZM
T0FUOgotICAgICAgICAgICAgICAgIHZhbHVlID0gc2VudGluZWwuZ2V0RGVmYXVsdEZsb2F0KCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPVUJMRToKLSAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHNlbnRpbmVsLmdldERlZmF1bHREb3VibGUoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQk9PTDoKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9IHNlbnRpbmVsLmdldERlZmF1bHRCb29sKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEJZVEVTOgotICAgICAgICAgICAgICAgIHZhbHVlID0gc2VudGlu
ZWwuZ2V0RGVmYXVsdEJ5dGVzKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFNUUklORzoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbnRpbmVsLmdldERlZmF1
bHRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU5V
TToKLSAgICAgICAgICAgICAgICBJUnVieU9iamVjdCBkZWZhdWx0RW51bUxvYyA9IGNvbnRleHQu
cnVudGltZS5uZXdGaXhudW0oMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFJ1YnlFbnVtLmxv
b2t1cChjb250ZXh0LCB0eXBlQ2xhc3MsIGRlZmF1bHRFbnVtTG9jKTsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucnVudGltZS5nZXROaWwoKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gVXRpbHMud3JhcFByaW1hcnlWYWx1ZShjb250ZXh0
LCBmaWVsZFR5cGUsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tBcnJh
eUVsZW1lbnRUeXBlKFRocmVhZENvbnRleHQgY29udGV4dCwgUnVieUFycmF5IGFycikgewotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyci5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAg
ICAgICBVdGlscy5jaGVja1R5cGUoY29udGV4dCwgZmllbGRUeXBlLCBhcnIuZWx0SW50ZXJuYWwo
aSksIChSdWJ5TW9kdWxlKSB0eXBlQ2xhc3MpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJp
dmF0ZSBpbnQgbm9ybWFsaXplQXJyYXlJbmRleChJUnVieU9iamVjdCBpbmRleCkgewotICAgICAg
ICBpbnQgYXJySW5kZXggPSBSdWJ5TnVtZXJpYy5udW0yaW50KGluZGV4KTsKLSAgICAgICAgaW50
IGFyclNpemUgPSB0aGlzLnN0b3JhZ2Uuc2l6ZSgpOwotICAgICAgICBpZiAoYXJySW5kZXggPCAw
ICYmIGFyclNpemUgPiAwKSB7Ci0gICAgICAgICAgICBhcnJJbmRleCA9IGFyclNpemUgKyBhcnJJ
bmRleDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXJySW5kZXg7Ci0gICAgfQotCi0gICAg
cHJpdmF0ZSBSdWJ5QXJyYXkgc3RvcmFnZTsKLSAgICBwcml2YXRlIERlc2NyaXB0b3JzLkZpZWxk
RGVzY3JpcHRvci5UeXBlIGZpZWxkVHlwZTsKLSAgICBwcml2YXRlIElSdWJ5T2JqZWN0IHR5cGVD
bGFzczsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9i
dWYvanJ1YnkvU2VudGluZWxPdXRlckNsYXNzLmphdmEgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4vamF2YS9jb20v
Z29vZ2xlL3Byb3RvYnVmL2pydWJ5L1NlbnRpbmVsT3V0ZXJDbGFzcy5qYXZhCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1NGYyYzcyOWEyNjk1ZWRjN2JlZmZlMTkzYThmNDEwOGJiMzRl
MzI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS9z
cmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1YnkvU2VudGluZWxPdXRlckNsYXNz
LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NzYgKzAsMCBAQAotLyoKLSAqIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotICogQ29weXJpZ2h0IDIw
MTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wg
YnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IHNlbnRpbmVsLnByb3Rv
Ci0KLXBhY2thZ2UgY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVieTsKLQotcHVibGljIGZpbmFsIGNs
YXNzIFNlbnRpbmVsT3V0ZXJDbGFzcyB7Ci0gIHByaXZhdGUgU2VudGluZWxPdXRlckNsYXNzKCkg
e30KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQWxsRXh0ZW5zaW9ucygKLSAgICAgIGNv
bS5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkpIHsKLSAgfQotICBw
dWJsaWMgaW50ZXJmYWNlIFNlbnRpbmVsT3JCdWlsZGVyIGV4dGVuZHMKLSAgICAgIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChpbnRlcmZhY2VfZXh0ZW5kczpjb20uZ29vZ2xlLnByb3RvYnVm
LmpydWJ5LlNlbnRpbmVsKQotICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3JCdWls
ZGVyIHsKLQotICAgIC8qKgotICAgICAqIDxjb2RlPm9wdGlvbmFsIGludDMyIGRlZmF1bHRfaW50
MzIgPSAxOzwvY29kZT4KLSAgICAgKi8KLSAgICBpbnQgZ2V0RGVmYXVsdEludDMyKCk7Ci0KLSAg
ICAvKioKLSAgICAgKiA8Y29kZT5vcHRpb25hbCBpbnQ2NCBkZWZhdWx0X2ludDY0ID0gMjs8L2Nv
ZGU+Ci0gICAgICovCi0gICAgbG9uZyBnZXREZWZhdWx0SW50NjQoKTsKLQotICAgIC8qKgotICAg
ICAqIDxjb2RlPm9wdGlvbmFsIHVpbnQzMiBkZWZhdWx0X3VuaXQzMiA9IDM7PC9jb2RlPgotICAg
ICAqLwotICAgIGludCBnZXREZWZhdWx0VW5pdDMyKCk7Ci0KLSAgICAvKioKLSAgICAgKiA8Y29k
ZT5vcHRpb25hbCB1aW50NjQgZGVmYXVsdF91aW50NjQgPSA0OzwvY29kZT4KLSAgICAgKi8KLSAg
ICBsb25nIGdldERlZmF1bHRVaW50NjQoKTsKLQotICAgIC8qKgotICAgICAqIDxjb2RlPm9wdGlv
bmFsIHN0cmluZyBkZWZhdWx0X3N0cmluZyA9IDU7PC9jb2RlPgotICAgICAqLwotICAgIGphdmEu
bGFuZy5TdHJpbmcgZ2V0RGVmYXVsdFN0cmluZygpOwotICAgIC8qKgotICAgICAqIDxjb2RlPm9w
dGlvbmFsIHN0cmluZyBkZWZhdWx0X3N0cmluZyA9IDU7PC9jb2RlPgotICAgICAqLwotICAgIGNv
bS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZwotICAgICAgICBnZXREZWZhdWx0U3RyaW5nQnl0
ZXMoKTsKLQotICAgIC8qKgotICAgICAqIDxjb2RlPm9wdGlvbmFsIGJvb2wgZGVmYXVsdF9ib29s
ID0gNjs8L2NvZGU+Ci0gICAgICovCi0gICAgYm9vbGVhbiBnZXREZWZhdWx0Qm9vbCgpOwotCi0g
ICAgLyoqCi0gICAgICogPGNvZGU+b3B0aW9uYWwgZmxvYXQgZGVmYXVsdF9mbG9hdCA9IDc7PC9j
b2RlPgotICAgICAqLwotICAgIGZsb2F0IGdldERlZmF1bHRGbG9hdCgpOwotCi0gICAgLyoqCi0g
ICAgICogPGNvZGU+b3B0aW9uYWwgZG91YmxlIGRlZmF1bHRfZG91YmxlID0gODs8L2NvZGU+Ci0g
ICAgICovCi0gICAgZG91YmxlIGdldERlZmF1bHREb3VibGUoKTsKLQotICAgIC8qKgotICAgICAq
IDxjb2RlPm9wdGlvbmFsIGJ5dGVzIGRlZmF1bHRfYnl0ZXMgPSA5OzwvY29kZT4KLSAgICAgKi8K
LSAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcgZ2V0RGVmYXVsdEJ5dGVzKCk7Ci0g
IH0KLSAgLyoqCi0gICAqIFByb3RvYnVmIHR5cGUge0Bjb2RlIGNvbS5nb29nbGUucHJvdG9idWYu
anJ1YnkuU2VudGluZWx9Ci0gICAqLwotICBwdWJsaWMgIHN0YXRpYyBmaW5hbCBjbGFzcyBTZW50
aW5lbCBleHRlbmRzCi0gICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2Ug
aW1wbGVtZW50cwotICAgICAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfaW1w
bGVtZW50czpjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsKQotICAgICAgU2VudGlu
ZWxPckJ1aWxkZXIgewotICAgIC8vIFVzZSBTZW50aW5lbC5uZXdCdWlsZGVyKCkgdG8gY29uc3Ry
dWN0LgotICAgIHByaXZhdGUgU2VudGluZWwoY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRN
ZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgc3VwZXIoYnVpbGRlcik7Ci0gICAgfQot
ICAgIHByaXZhdGUgU2VudGluZWwoKSB7Ci0gICAgICBkZWZhdWx0SW50MzJfID0gMDsKLSAgICAg
IGRlZmF1bHRJbnQ2NF8gPSAwTDsKLSAgICAgIGRlZmF1bHRVbml0MzJfID0gMDsKLSAgICAgIGRl
ZmF1bHRVaW50NjRfID0gMEw7Ci0gICAgICBkZWZhdWx0U3RyaW5nXyA9ICIiOwotICAgICAgZGVm
YXVsdEJvb2xfID0gZmFsc2U7Ci0gICAgICBkZWZhdWx0RmxvYXRfID0gMEY7Ci0gICAgICBkZWZh
dWx0RG91YmxlXyA9IDBEOwotICAgICAgZGVmYXVsdEJ5dGVzXyA9IGNvbS5nb29nbGUucHJvdG9i
dWYuQnl0ZVN0cmluZy5FTVBUWTsKLSAgICB9Ci0KLSAgICBAamF2YS5sYW5nLk92ZXJyaWRlCi0g
ICAgcHVibGljIGZpbmFsIGNvbS5nb29nbGUucHJvdG9idWYuVW5rbm93bkZpZWxkU2V0Ci0gICAg
Z2V0VW5rbm93bkZpZWxkcygpIHsKLSAgICAgIHJldHVybiBjb20uZ29vZ2xlLnByb3RvYnVmLlVu
a25vd25GaWVsZFNldC5nZXREZWZhdWx0SW5zdGFuY2UoKTsKLSAgICB9Ci0gICAgcHVibGljIHN0
YXRpYyBmaW5hbCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkRlc2NyaXB0b3IKLSAg
ICAgICAgZ2V0RGVzY3JpcHRvcigpIHsKLSAgICAgIHJldHVybiBjb20uZ29vZ2xlLnByb3RvYnVm
LmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5pbnRlcm5hbF9zdGF0aWNfY29tX2dvb2dsZV9wcm90
b2J1Zl9qcnVieV9TZW50aW5lbF9kZXNjcmlwdG9yOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBj
b20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2UuRmllbGRBY2Nlc3NvclRhYmxlCi0g
ICAgICAgIGludGVybmFsR2V0RmllbGRBY2Nlc3NvclRhYmxlKCkgewotICAgICAgcmV0dXJuIGNv
bS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2VudGluZWxPdXRlckNsYXNzLmludGVybmFsX3N0YXRp
Y19jb21fZ29vZ2xlX3Byb3RvYnVmX2pydWJ5X1NlbnRpbmVsX2ZpZWxkQWNjZXNzb3JUYWJsZQot
ICAgICAgICAgIC5lbnN1cmVGaWVsZEFjY2Vzc29yc0luaXRpYWxpemVkKAotICAgICAgICAgICAg
ICBjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5TZW50aW5lbC5j
bGFzcywgY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVieS5TZW50aW5lbE91dGVyQ2xhc3MuU2VudGlu
ZWwuQnVpbGRlci5jbGFzcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjb20u
Z29vZ2xlLnByb3RvYnVmLlBhcnNlcjxTZW50aW5lbD4gUEFSU0VSID0KLSAgICAgICAgbmV3IGNv
bS5nb29nbGUucHJvdG9idWYuQWJzdHJhY3RQYXJzZXI8U2VudGluZWw+KCkgewotICAgICAgcHVi
bGljIFNlbnRpbmVsIHBhcnNlUGFydGlhbEZyb20oCi0gICAgICAgICAgY29tLmdvb2dsZS5wcm90
b2J1Zi5Db2RlZElucHV0U3RyZWFtIGlucHV0LAotICAgICAgICAgIGNvbS5nb29nbGUucHJvdG9i
dWYuRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICAgIHRo
cm93cyBjb20uZ29vZ2xlLnByb3RvYnVmLkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7
Ci0gICAgICAgIEJ1aWxkZXIgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTsKLSAgICAgICAgdHJ5IHsK
LSAgICAgICAgICBidWlsZGVyLm1lcmdlRnJvbShpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpOwot
ICAgICAgICB9IGNhdGNoIChjb20uZ29vZ2xlLnByb3RvYnVmLkludmFsaWRQcm90b2NvbEJ1ZmZl
ckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgdGhyb3cgZS5zZXRVbmZpbmlzaGVkTWVzc2FnZShi
dWlsZGVyLmJ1aWxkUGFydGlhbCgpKTsKLSAgICAgICAgfSBjYXRjaCAoamF2YS5pby5JT0V4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IGNvbS5nb29nbGUucHJvdG9idWYuSW52YWxp
ZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKAotICAgICAgICAgICAgICBlLmdldE1lc3NhZ2UoKSku
c2V0VW5maW5pc2hlZE1lc3NhZ2UoYnVpbGRlci5idWlsZFBhcnRpYWwoKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7Ci0gICAgICB9Ci0gICAgfTsK
LQotICAgIEBqYXZhLmxhbmcuT3ZlcnJpZGUKLSAgICBwdWJsaWMgY29tLmdvb2dsZS5wcm90b2J1
Zi5QYXJzZXI8U2VudGluZWw+IGdldFBhcnNlckZvclR5cGUoKSB7Ci0gICAgICByZXR1cm4gUEFS
U0VSOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfSU5UMzJf
RklFTERfTlVNQkVSID0gMTsKLSAgICBwcml2YXRlIGludCBkZWZhdWx0SW50MzJfOwotICAgIC8q
KgotICAgICAqIDxjb2RlPm9wdGlvbmFsIGludDMyIGRlZmF1bHRfaW50MzIgPSAxOzwvY29kZT4K
LSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldERlZmF1bHRJbnQzMigpIHsKLSAgICAgIHJldHVy
biBkZWZhdWx0SW50MzJfOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERF
RkFVTFRfSU5UNjRfRklFTERfTlVNQkVSID0gMjsKLSAgICBwcml2YXRlIGxvbmcgZGVmYXVsdElu
dDY0XzsKLSAgICAvKioKLSAgICAgKiA8Y29kZT5vcHRpb25hbCBpbnQ2NCBkZWZhdWx0X2ludDY0
ID0gMjs8L2NvZGU+Ci0gICAgICovCi0gICAgcHVibGljIGxvbmcgZ2V0RGVmYXVsdEludDY0KCkg
ewotICAgICAgcmV0dXJuIGRlZmF1bHRJbnQ2NF87Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRp
YyBmaW5hbCBpbnQgREVGQVVMVF9VTklUMzJfRklFTERfTlVNQkVSID0gMzsKLSAgICBwcml2YXRl
IGludCBkZWZhdWx0VW5pdDMyXzsKLSAgICAvKioKLSAgICAgKiA8Y29kZT5vcHRpb25hbCB1aW50
MzIgZGVmYXVsdF91bml0MzIgPSAzOzwvY29kZT4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdl
dERlZmF1bHRVbml0MzIoKSB7Ci0gICAgICByZXR1cm4gZGVmYXVsdFVuaXQzMl87Ci0gICAgfQot
Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9VSU5UNjRfRklFTERfTlVNQkVS
ID0gNDsKLSAgICBwcml2YXRlIGxvbmcgZGVmYXVsdFVpbnQ2NF87Ci0gICAgLyoqCi0gICAgICog
PGNvZGU+b3B0aW9uYWwgdWludDY0IGRlZmF1bHRfdWludDY0ID0gNDs8L2NvZGU+Ci0gICAgICov
Ci0gICAgcHVibGljIGxvbmcgZ2V0RGVmYXVsdFVpbnQ2NCgpIHsKLSAgICAgIHJldHVybiBkZWZh
dWx0VWludDY0XzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxU
X1NUUklOR19GSUVMRF9OVU1CRVIgPSA1OwotICAgIHByaXZhdGUgamF2YS5sYW5nLk9iamVjdCBk
ZWZhdWx0U3RyaW5nXzsKLSAgICAvKioKLSAgICAgKiA8Y29kZT5vcHRpb25hbCBzdHJpbmcgZGVm
YXVsdF9zdHJpbmcgPSA1OzwvY29kZT4KLSAgICAgKi8KLSAgICBwdWJsaWMgamF2YS5sYW5nLlN0
cmluZyBnZXREZWZhdWx0U3RyaW5nKCkgewotICAgICAgamF2YS5sYW5nLk9iamVjdCByZWYgPSBk
ZWZhdWx0U3RyaW5nXzsKLSAgICAgIGlmIChyZWYgaW5zdGFuY2VvZiBqYXZhLmxhbmcuU3RyaW5n
KSB7Ci0gICAgICAgIHJldHVybiAoamF2YS5sYW5nLlN0cmluZykgcmVmOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nIGJzID0gCi0gICAgICAg
ICAgICAoY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nKSByZWY7Ci0gICAgICAgIGphdmEu
bGFuZy5TdHJpbmcgcyA9IGJzLnRvU3RyaW5nVXRmOCgpOwotICAgICAgICBpZiAoYnMuaXNWYWxp
ZFV0ZjgoKSkgewotICAgICAgICAgIGRlZmF1bHRTdHJpbmdfID0gczsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gczsKLSAgICAgIH0KLSAgICB9Ci0gICAgLyoqCi0gICAgICogPGNvZGU+b3B0
aW9uYWwgc3RyaW5nIGRlZmF1bHRfc3RyaW5nID0gNTs8L2NvZGU+Ci0gICAgICovCi0gICAgcHVi
bGljIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZwotICAgICAgICBnZXREZWZhdWx0U3Ry
aW5nQnl0ZXMoKSB7Ci0gICAgICBqYXZhLmxhbmcuT2JqZWN0IHJlZiA9IGRlZmF1bHRTdHJpbmdf
OwotICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIGphdmEubGFuZy5TdHJpbmcpIHsKLSAgICAgICAg
Y29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nIGIgPSAKLSAgICAgICAgICAgIGNvbS5nb29n
bGUucHJvdG9idWYuQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoCi0gICAgICAgICAgICAgICAgKGph
dmEubGFuZy5TdHJpbmcpIHJlZik7Ci0gICAgICAgIGRlZmF1bHRTdHJpbmdfID0gYjsKLSAgICAg
ICAgcmV0dXJuIGI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gKGNvbS5nb29nbGUu
cHJvdG9idWYuQnl0ZVN0cmluZykgcmVmOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBz
dGF0aWMgZmluYWwgaW50IERFRkFVTFRfQk9PTF9GSUVMRF9OVU1CRVIgPSA2OwotICAgIHByaXZh
dGUgYm9vbGVhbiBkZWZhdWx0Qm9vbF87Ci0gICAgLyoqCi0gICAgICogPGNvZGU+b3B0aW9uYWwg
Ym9vbCBkZWZhdWx0X2Jvb2wgPSA2OzwvY29kZT4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVh
biBnZXREZWZhdWx0Qm9vbCgpIHsKLSAgICAgIHJldHVybiBkZWZhdWx0Qm9vbF87Ci0gICAgfQot
Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9GTE9BVF9GSUVMRF9OVU1CRVIg
PSA3OwotICAgIHByaXZhdGUgZmxvYXQgZGVmYXVsdEZsb2F0XzsKLSAgICAvKioKLSAgICAgKiA8
Y29kZT5vcHRpb25hbCBmbG9hdCBkZWZhdWx0X2Zsb2F0ID0gNzs8L2NvZGU+Ci0gICAgICovCi0g
ICAgcHVibGljIGZsb2F0IGdldERlZmF1bHRGbG9hdCgpIHsKLSAgICAgIHJldHVybiBkZWZhdWx0
RmxvYXRfOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRE9V
QkxFX0ZJRUxEX05VTUJFUiA9IDg7Ci0gICAgcHJpdmF0ZSBkb3VibGUgZGVmYXVsdERvdWJsZV87
Ci0gICAgLyoqCi0gICAgICogPGNvZGU+b3B0aW9uYWwgZG91YmxlIGRlZmF1bHRfZG91YmxlID0g
ODs8L2NvZGU+Ci0gICAgICovCi0gICAgcHVibGljIGRvdWJsZSBnZXREZWZhdWx0RG91YmxlKCkg
ewotICAgICAgcmV0dXJuIGRlZmF1bHREb3VibGVfOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0
aWMgZmluYWwgaW50IERFRkFVTFRfQllURVNfRklFTERfTlVNQkVSID0gOTsKLSAgICBwcml2YXRl
IGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZyBkZWZhdWx0Qnl0ZXNfOwotICAgIC8qKgot
ICAgICAqIDxjb2RlPm9wdGlvbmFsIGJ5dGVzIGRlZmF1bHRfYnl0ZXMgPSA5OzwvY29kZT4KLSAg
ICAgKi8KLSAgICBwdWJsaWMgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nIGdldERlZmF1
bHRCeXRlcygpIHsKLSAgICAgIHJldHVybiBkZWZhdWx0Qnl0ZXNfOwotICAgIH0KLQotICAgIHB1
YmxpYyBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVieS5TZW50aW5lbE91dGVyQ2xhc3Mu
U2VudGluZWwgcGFyc2VGcm9tKAotICAgICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJp
bmcgZGF0YSkKLSAgICAgICAgdGhyb3dzIGNvbS5nb29nbGUucHJvdG9idWYuSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiBQQVJTRVIucGFyc2VGcm9tKGRhdGEp
OwotICAgIH0KLSAgICBwdWJsaWMgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2Vu
dGluZWxPdXRlckNsYXNzLlNlbnRpbmVsIHBhcnNlRnJvbSgKLSAgICAgICAgY29tLmdvb2dsZS5w
cm90b2J1Zi5CeXRlU3RyaW5nIGRhdGEsCi0gICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuRXh0
ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICB0aHJvd3MgY29t
Lmdvb2dsZS5wcm90b2J1Zi5JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewotICAgICAg
cmV0dXJuIFBBUlNFUi5wYXJzZUZyb20oZGF0YSwgZXh0ZW5zaW9uUmVnaXN0cnkpOwotICAgIH0K
LSAgICBwdWJsaWMgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2VudGluZWxPdXRl
ckNsYXNzLlNlbnRpbmVsIHBhcnNlRnJvbShieXRlW10gZGF0YSkKLSAgICAgICAgdGhyb3dzIGNv
bS5nb29nbGUucHJvdG9idWYuSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHsKLSAgICAg
IHJldHVybiBQQVJTRVIucGFyc2VGcm9tKGRhdGEpOwotICAgIH0KLSAgICBwdWJsaWMgc3RhdGlj
IGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2VudGluZWxPdXRlckNsYXNzLlNlbnRpbmVsIHBh
cnNlRnJvbSgKLSAgICAgICAgYnl0ZVtdIGRhdGEsCi0gICAgICAgIGNvbS5nb29nbGUucHJvdG9i
dWYuRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KQotICAgICAgICB0aHJv
d3MgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24gewot
ICAgICAgcmV0dXJuIFBBUlNFUi5wYXJzZUZyb20oZGF0YSwgZXh0ZW5zaW9uUmVnaXN0cnkpOwot
ICAgIH0KLSAgICBwdWJsaWMgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2VudGlu
ZWxPdXRlckNsYXNzLlNlbnRpbmVsIHBhcnNlRnJvbShqYXZhLmlvLklucHV0U3RyZWFtIGlucHV0
KQotICAgICAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICByZXR1cm4gUEFS
U0VSLnBhcnNlRnJvbShpbnB1dCk7Ci0gICAgfQotICAgIHB1YmxpYyBzdGF0aWMgY29tLmdvb2ds
ZS5wcm90b2J1Zi5qcnVieS5TZW50aW5lbE91dGVyQ2xhc3MuU2VudGluZWwgcGFyc2VGcm9tKAot
ICAgICAgICBqYXZhLmlvLklucHV0U3RyZWFtIGlucHV0LAotICAgICAgICBjb20uZ29vZ2xlLnBy
b3RvYnVmLkV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSkKLSAgICAgICAg
dGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgcmV0dXJuIFBBUlNFUi5wYXJzZUZy
b20oaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KTsKLSAgICB9Ci0gICAgcHVibGljIHN0YXRpYyBj
b20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5TZW50aW5lbCBwYXJz
ZURlbGltaXRlZEZyb20oamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgICAgdGhyb3dz
IGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgcmV0dXJuIFBBUlNFUi5wYXJzZURlbGltaXRl
ZEZyb20oaW5wdXQpOwotICAgIH0KLSAgICBwdWJsaWMgc3RhdGljIGNvbS5nb29nbGUucHJvdG9i
dWYuanJ1YnkuU2VudGluZWxPdXRlckNsYXNzLlNlbnRpbmVsIHBhcnNlRGVsaW1pdGVkRnJvbSgK
LSAgICAgICAgamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dCwKLSAgICAgICAgY29tLmdvb2dsZS5w
cm90b2J1Zi5FeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICAg
IHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgIHJldHVybiBQQVJTRVIucGFyc2VE
ZWxpbWl0ZWRGcm9tKGlucHV0LCBleHRlbnNpb25SZWdpc3RyeSk7Ci0gICAgfQotICAgIHB1Ymxp
YyBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVieS5TZW50aW5lbE91dGVyQ2xhc3MuU2Vu
dGluZWwgcGFyc2VGcm9tKAotICAgICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkNvZGVkSW5wdXRT
dHJlYW0gaW5wdXQpCi0gICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAg
IHJldHVybiBQQVJTRVIucGFyc2VGcm9tKGlucHV0KTsKLSAgICB9Ci0gICAgcHVibGljIHN0YXRp
YyBjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5TZW50aW5lbCBw
YXJzZUZyb20oCi0gICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRJbnB1dFN0cmVhbSBp
bnB1dCwKLSAgICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SZWdpc3RyeUxpdGUg
ZXh0ZW5zaW9uUmVnaXN0cnkpCi0gICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsK
LSAgICAgIHJldHVybiBQQVJTRVIucGFyc2VGcm9tKGlucHV0LCBleHRlbnNpb25SZWdpc3RyeSk7
Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIG5ld0J1aWxkZXIoKSB7IHJldHVy
biBuZXcgQnVpbGRlcigpOyB9Ci0gICAgcHVibGljIEJ1aWxkZXIgbmV3QnVpbGRlckZvclR5cGUo
KSB7IHJldHVybiBuZXdCdWlsZGVyKCk7IH0KLSAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgbmV3
QnVpbGRlcihjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5TZW50
aW5lbCBwcm90b3R5cGUpIHsKLSAgICAgIHJldHVybiBuZXdCdWlsZGVyKCkubWVyZ2VGcm9tKHBy
b3RvdHlwZSk7Ci0gICAgfQotICAgIHB1YmxpYyBCdWlsZGVyIHRvQnVpbGRlcigpIHsgcmV0dXJu
IG5ld0J1aWxkZXIodGhpcyk7IH0KLQotICAgIEBqYXZhLmxhbmcuT3ZlcnJpZGUKLSAgICBwcm90
ZWN0ZWQgQnVpbGRlciBuZXdCdWlsZGVyRm9yVHlwZSgKLSAgICAgICAgY29tLmdvb2dsZS5wcm90
b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlLkJ1aWxkZXJQYXJlbnQgcGFyZW50KSB7Ci0gICAgICBCdWls
ZGVyIGJ1aWxkZXIgPSBuZXcgQnVpbGRlcihwYXJlbnQpOwotICAgICAgcmV0dXJuIGJ1aWxkZXI7
Ci0gICAgfQotICAgIC8qKgotICAgICAqIFByb3RvYnVmIHR5cGUge0Bjb2RlIGNvbS5nb29nbGUu
cHJvdG9idWYuanJ1YnkuU2VudGluZWx9Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5h
bCBjbGFzcyBCdWlsZGVyIGV4dGVuZHMKLSAgICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5l
cmF0ZWRNZXNzYWdlLkJ1aWxkZXI8QnVpbGRlcj4gaW1wbGVtZW50cwotICAgICAgICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoYnVpbGRlcl9pbXBsZW1lbnRzOmNvbS5nb29nbGUucHJvdG9i
dWYuanJ1YnkuU2VudGluZWwpCi0gICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2Vu
dGluZWxPdXRlckNsYXNzLlNlbnRpbmVsT3JCdWlsZGVyIHsKLSAgICAgIHB1YmxpYyBzdGF0aWMg
ZmluYWwgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5EZXNjcmlwdG9yCi0gICAgICAg
ICAgZ2V0RGVzY3JpcHRvcigpIHsKLSAgICAgICAgcmV0dXJuIGNvbS5nb29nbGUucHJvdG9idWYu
anJ1YnkuU2VudGluZWxPdXRlckNsYXNzLmludGVybmFsX3N0YXRpY19jb21fZ29vZ2xlX3Byb3Rv
YnVmX2pydWJ5X1NlbnRpbmVsX2Rlc2NyaXB0b3I7Ci0gICAgICB9Ci0KLSAgICAgIHByb3RlY3Rl
ZCBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2UuRmllbGRBY2Nlc3NvclRhYmxl
Ci0gICAgICAgICAgaW50ZXJuYWxHZXRGaWVsZEFjY2Vzc29yVGFibGUoKSB7Ci0gICAgICAgIHJl
dHVybiBjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5pbnRlcm5h
bF9zdGF0aWNfY29tX2dvb2dsZV9wcm90b2J1Zl9qcnVieV9TZW50aW5lbF9maWVsZEFjY2Vzc29y
VGFibGUKLSAgICAgICAgICAgIC5lbnN1cmVGaWVsZEFjY2Vzc29yc0luaXRpYWxpemVkKAotICAg
ICAgICAgICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2VudGluZWxPdXRlckNsYXNz
LlNlbnRpbmVsLmNsYXNzLCBjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsT3V0ZXJD
bGFzcy5TZW50aW5lbC5CdWlsZGVyLmNsYXNzKTsKLSAgICAgIH0KLQotICAgICAgLy8gQ29uc3Ry
dWN0IHVzaW5nIGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2VudGluZWxPdXRlckNsYXNzLlNl
bnRpbmVsLm5ld0J1aWxkZXIoKQotICAgICAgcHJpdmF0ZSBCdWlsZGVyKCkgewotICAgICAgICBt
YXliZUZvcmNlQnVpbGRlckluaXRpYWxpemF0aW9uKCk7Ci0gICAgICB9Ci0KLSAgICAgIHByaXZh
dGUgQnVpbGRlcigKLSAgICAgICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3Nh
Z2UuQnVpbGRlclBhcmVudCBwYXJlbnQpIHsKLSAgICAgICAgc3VwZXIocGFyZW50KTsKLSAgICAg
ICAgbWF5YmVGb3JjZUJ1aWxkZXJJbml0aWFsaXphdGlvbigpOwotICAgICAgfQotICAgICAgcHJp
dmF0ZSB2b2lkIG1heWJlRm9yY2VCdWlsZGVySW5pdGlhbGl6YXRpb24oKSB7Ci0gICAgICAgIGlm
IChjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2UuYWx3YXlzVXNlRmllbGRCdWls
ZGVycykgewotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwdWJsaWMgQnVpbGRlciBjbGVhcigp
IHsKLSAgICAgICAgc3VwZXIuY2xlYXIoKTsKLSAgICAgICAgZGVmYXVsdEludDMyXyA9IDA7Ci0K
LSAgICAgICAgZGVmYXVsdEludDY0XyA9IDBMOwotCi0gICAgICAgIGRlZmF1bHRVbml0MzJfID0g
MDsKLQotICAgICAgICBkZWZhdWx0VWludDY0XyA9IDBMOwotCi0gICAgICAgIGRlZmF1bHRTdHJp
bmdfID0gIiI7Ci0KLSAgICAgICAgZGVmYXVsdEJvb2xfID0gZmFsc2U7Ci0KLSAgICAgICAgZGVm
YXVsdEZsb2F0XyA9IDBGOwotCi0gICAgICAgIGRlZmF1bHREb3VibGVfID0gMEQ7Ci0KLSAgICAg
ICAgZGVmYXVsdEJ5dGVzXyA9IGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZy5FTVBUWTsK
LQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQotICAgICAgcHVibGljIGNvbS5nb29n
bGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRGVzY3JpcHRvcgotICAgICAgICAgIGdldERlc2NyaXB0
b3JGb3JUeXBlKCkgewotICAgICAgICByZXR1cm4gY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVieS5T
ZW50aW5lbE91dGVyQ2xhc3MuaW50ZXJuYWxfc3RhdGljX2NvbV9nb29nbGVfcHJvdG9idWZfanJ1
YnlfU2VudGluZWxfZGVzY3JpcHRvcjsKLSAgICAgIH0KLQotICAgICAgcHVibGljIGNvbS5nb29n
bGUucHJvdG9idWYuanJ1YnkuU2VudGluZWxPdXRlckNsYXNzLlNlbnRpbmVsIGdldERlZmF1bHRJ
bnN0YW5jZUZvclR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBjb20uZ29vZ2xlLnByb3RvYnVmLmpy
dWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5TZW50aW5lbC5nZXREZWZhdWx0SW5zdGFuY2UoKTsKLSAg
ICAgIH0KLQotICAgICAgcHVibGljIGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2VudGluZWxP
dXRlckNsYXNzLlNlbnRpbmVsIGJ1aWxkKCkgewotICAgICAgICBjb20uZ29vZ2xlLnByb3RvYnVm
LmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5TZW50aW5lbCByZXN1bHQgPSBidWlsZFBhcnRpYWwo
KTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgICAgdGhy
b3cgbmV3VW5pbml0aWFsaXplZE1lc3NhZ2VFeGNlcHRpb24ocmVzdWx0KTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotCi0gICAgICBwdWJsaWMgY29tLmdvb2ds
ZS5wcm90b2J1Zi5qcnVieS5TZW50aW5lbE91dGVyQ2xhc3MuU2VudGluZWwgYnVpbGRQYXJ0aWFs
KCkgewotICAgICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFz
cy5TZW50aW5lbCByZXN1bHQgPSBuZXcgY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVieS5TZW50aW5l
bE91dGVyQ2xhc3MuU2VudGluZWwodGhpcyk7Ci0gICAgICAgIHJlc3VsdC5kZWZhdWx0SW50MzJf
ID0gZGVmYXVsdEludDMyXzsKLSAgICAgICAgcmVzdWx0LmRlZmF1bHRJbnQ2NF8gPSBkZWZhdWx0
SW50NjRfOwotICAgICAgICByZXN1bHQuZGVmYXVsdFVuaXQzMl8gPSBkZWZhdWx0VW5pdDMyXzsK
LSAgICAgICAgcmVzdWx0LmRlZmF1bHRVaW50NjRfID0gZGVmYXVsdFVpbnQ2NF87Ci0gICAgICAg
IHJlc3VsdC5kZWZhdWx0U3RyaW5nXyA9IGRlZmF1bHRTdHJpbmdfOwotICAgICAgICByZXN1bHQu
ZGVmYXVsdEJvb2xfID0gZGVmYXVsdEJvb2xfOwotICAgICAgICByZXN1bHQuZGVmYXVsdEZsb2F0
XyA9IGRlZmF1bHRGbG9hdF87Ci0gICAgICAgIHJlc3VsdC5kZWZhdWx0RG91YmxlXyA9IGRlZmF1
bHREb3VibGVfOwotICAgICAgICByZXN1bHQuZGVmYXVsdEJ5dGVzXyA9IGRlZmF1bHRCeXRlc187
Ci0gICAgICAgIG9uQnVpbHQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLQot
Ci0gICAgICBwcml2YXRlIGludCBkZWZhdWx0SW50MzJfIDsKLSAgICAgIC8qKgotICAgICAgICog
PGNvZGU+b3B0aW9uYWwgaW50MzIgZGVmYXVsdF9pbnQzMiA9IDE7PC9jb2RlPgotICAgICAgICov
Ci0gICAgICBwdWJsaWMgaW50IGdldERlZmF1bHRJbnQzMigpIHsKLSAgICAgICAgcmV0dXJuIGRl
ZmF1bHRJbnQzMl87Ci0gICAgICB9Ci0gICAgICAvKioKLSAgICAgICAqIDxjb2RlPm9wdGlvbmFs
IGludDMyIGRlZmF1bHRfaW50MzIgPSAxOzwvY29kZT4KLSAgICAgICAqLwotICAgICAgcHVibGlj
IEJ1aWxkZXIgc2V0RGVmYXVsdEludDMyKGludCB2YWx1ZSkgewotICAgICAgICAKLSAgICAgICAg
ZGVmYXVsdEludDMyXyA9IHZhbHVlOwotICAgICAgICBvbkNoYW5nZWQoKTsKLSAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICB9Ci0gICAgICAvKioKLSAgICAgICAqIDxjb2RlPm9wdGlvbmFsIGlu
dDMyIGRlZmF1bHRfaW50MzIgPSAxOzwvY29kZT4KLSAgICAgICAqLwotICAgICAgcHVibGljIEJ1
aWxkZXIgY2xlYXJEZWZhdWx0SW50MzIoKSB7Ci0gICAgICAgIAotICAgICAgICBkZWZhdWx0SW50
MzJfID0gMDsKLSAgICAgICAgb25DaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgfQotCi0gICAgICBwcml2YXRlIGxvbmcgZGVmYXVsdEludDY0XyA7Ci0gICAgICAvKioKLSAg
ICAgICAqIDxjb2RlPm9wdGlvbmFsIGludDY0IGRlZmF1bHRfaW50NjQgPSAyOzwvY29kZT4KLSAg
ICAgICAqLwotICAgICAgcHVibGljIGxvbmcgZ2V0RGVmYXVsdEludDY0KCkgewotICAgICAgICBy
ZXR1cm4gZGVmYXVsdEludDY0XzsKLSAgICAgIH0KLSAgICAgIC8qKgotICAgICAgICogPGNvZGU+
b3B0aW9uYWwgaW50NjQgZGVmYXVsdF9pbnQ2NCA9IDI7PC9jb2RlPgotICAgICAgICovCi0gICAg
ICBwdWJsaWMgQnVpbGRlciBzZXREZWZhdWx0SW50NjQobG9uZyB2YWx1ZSkgewotICAgICAgICAK
LSAgICAgICAgZGVmYXVsdEludDY0XyA9IHZhbHVlOwotICAgICAgICBvbkNoYW5nZWQoKTsKLSAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0gICAgICAvKioKLSAgICAgICAqIDxjb2RlPm9w
dGlvbmFsIGludDY0IGRlZmF1bHRfaW50NjQgPSAyOzwvY29kZT4KLSAgICAgICAqLwotICAgICAg
cHVibGljIEJ1aWxkZXIgY2xlYXJEZWZhdWx0SW50NjQoKSB7Ci0gICAgICAgIAotICAgICAgICBk
ZWZhdWx0SW50NjRfID0gMEw7Ci0gICAgICAgIG9uQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm4g
dGhpczsKLSAgICAgIH0KLQotICAgICAgcHJpdmF0ZSBpbnQgZGVmYXVsdFVuaXQzMl8gOwotICAg
ICAgLyoqCi0gICAgICAgKiA8Y29kZT5vcHRpb25hbCB1aW50MzIgZGVmYXVsdF91bml0MzIgPSAz
OzwvY29kZT4KLSAgICAgICAqLwotICAgICAgcHVibGljIGludCBnZXREZWZhdWx0VW5pdDMyKCkg
ewotICAgICAgICByZXR1cm4gZGVmYXVsdFVuaXQzMl87Ci0gICAgICB9Ci0gICAgICAvKioKLSAg
ICAgICAqIDxjb2RlPm9wdGlvbmFsIHVpbnQzMiBkZWZhdWx0X3VuaXQzMiA9IDM7PC9jb2RlPgot
ICAgICAgICovCi0gICAgICBwdWJsaWMgQnVpbGRlciBzZXREZWZhdWx0VW5pdDMyKGludCB2YWx1
ZSkgewotICAgICAgICAKLSAgICAgICAgZGVmYXVsdFVuaXQzMl8gPSB2YWx1ZTsKLSAgICAgICAg
b25DaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotICAgICAgLyoqCi0g
ICAgICAgKiA8Y29kZT5vcHRpb25hbCB1aW50MzIgZGVmYXVsdF91bml0MzIgPSAzOzwvY29kZT4K
LSAgICAgICAqLwotICAgICAgcHVibGljIEJ1aWxkZXIgY2xlYXJEZWZhdWx0VW5pdDMyKCkgewot
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdFVuaXQzMl8gPSAwOwotICAgICAgICBvbkNoYW5nZWQo
KTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0KLSAgICAgIHByaXZhdGUgbG9uZyBk
ZWZhdWx0VWludDY0XyA7Ci0gICAgICAvKioKLSAgICAgICAqIDxjb2RlPm9wdGlvbmFsIHVpbnQ2
NCBkZWZhdWx0X3VpbnQ2NCA9IDQ7PC9jb2RlPgotICAgICAgICovCi0gICAgICBwdWJsaWMgbG9u
ZyBnZXREZWZhdWx0VWludDY0KCkgewotICAgICAgICByZXR1cm4gZGVmYXVsdFVpbnQ2NF87Ci0g
ICAgICB9Ci0gICAgICAvKioKLSAgICAgICAqIDxjb2RlPm9wdGlvbmFsIHVpbnQ2NCBkZWZhdWx0
X3VpbnQ2NCA9IDQ7PC9jb2RlPgotICAgICAgICovCi0gICAgICBwdWJsaWMgQnVpbGRlciBzZXRE
ZWZhdWx0VWludDY0KGxvbmcgdmFsdWUpIHsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHRVaW50
NjRfID0gdmFsdWU7Ci0gICAgICAgIG9uQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgIH0KLSAgICAgIC8qKgotICAgICAgICogPGNvZGU+b3B0aW9uYWwgdWludDY0IGRlZmF1
bHRfdWludDY0ID0gNDs8L2NvZGU+Ci0gICAgICAgKi8KLSAgICAgIHB1YmxpYyBCdWlsZGVyIGNs
ZWFyRGVmYXVsdFVpbnQ2NCgpIHsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHRVaW50NjRfID0g
MEw7Ci0gICAgICAgIG9uQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0K
LQotICAgICAgcHJpdmF0ZSBqYXZhLmxhbmcuT2JqZWN0IGRlZmF1bHRTdHJpbmdfID0gIiI7Ci0g
ICAgICAvKioKLSAgICAgICAqIDxjb2RlPm9wdGlvbmFsIHN0cmluZyBkZWZhdWx0X3N0cmluZyA9
IDU7PC9jb2RlPgotICAgICAgICovCi0gICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRE
ZWZhdWx0U3RyaW5nKCkgewotICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IHJlZiA9IGRlZmF1bHRT
dHJpbmdfOwotICAgICAgICBpZiAoIShyZWYgaW5zdGFuY2VvZiBqYXZhLmxhbmcuU3RyaW5nKSkg
ewotICAgICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZyBicyA9Ci0gICAgICAg
ICAgICAgIChjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcpIHJlZjsKLSAgICAgICAgICBq
YXZhLmxhbmcuU3RyaW5nIHMgPSBicy50b1N0cmluZ1V0ZjgoKTsKLSAgICAgICAgICBpZiAoYnMu
aXNWYWxpZFV0ZjgoKSkgewotICAgICAgICAgICAgZGVmYXVsdFN0cmluZ18gPSBzOwotICAgICAg
ICAgIH0KLSAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBy
ZXR1cm4gKGphdmEubGFuZy5TdHJpbmcpIHJlZjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAg
LyoqCi0gICAgICAgKiA8Y29kZT5vcHRpb25hbCBzdHJpbmcgZGVmYXVsdF9zdHJpbmcgPSA1Ozwv
Y29kZT4KLSAgICAgICAqLwotICAgICAgcHVibGljIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0
cmluZwotICAgICAgICAgIGdldERlZmF1bHRTdHJpbmdCeXRlcygpIHsKLSAgICAgICAgamF2YS5s
YW5nLk9iamVjdCByZWYgPSBkZWZhdWx0U3RyaW5nXzsKLSAgICAgICAgaWYgKHJlZiBpbnN0YW5j
ZW9mIFN0cmluZykgewotICAgICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZyBi
ID0gCi0gICAgICAgICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZy5jb3B5RnJv
bVV0ZjgoCi0gICAgICAgICAgICAgICAgICAoamF2YS5sYW5nLlN0cmluZykgcmVmKTsKLSAgICAg
ICAgICBkZWZhdWx0U3RyaW5nXyA9IGI7Ci0gICAgICAgICAgcmV0dXJuIGI7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIChjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcp
IHJlZjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyoqCi0gICAgICAgKiA8Y29kZT5vcHRp
b25hbCBzdHJpbmcgZGVmYXVsdF9zdHJpbmcgPSA1OzwvY29kZT4KLSAgICAgICAqLwotICAgICAg
cHVibGljIEJ1aWxkZXIgc2V0RGVmYXVsdFN0cmluZygKLSAgICAgICAgICBqYXZhLmxhbmcuU3Ry
aW5nIHZhbHVlKSB7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgdGhyb3cgbmV3
IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7Ci0gIH0KLSAgCi0gICAgICAgIGRlZmF1bHRTdHJpbmdf
ID0gdmFsdWU7Ci0gICAgICAgIG9uQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgIH0KLSAgICAgIC8qKgotICAgICAgICogPGNvZGU+b3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRf
c3RyaW5nID0gNTs8L2NvZGU+Ci0gICAgICAgKi8KLSAgICAgIHB1YmxpYyBCdWlsZGVyIGNsZWFy
RGVmYXVsdFN0cmluZygpIHsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHRTdHJpbmdfID0gZ2V0
RGVmYXVsdEluc3RhbmNlKCkuZ2V0RGVmYXVsdFN0cmluZygpOwotICAgICAgICBvbkNoYW5nZWQo
KTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0gICAgICAvKioKLSAgICAgICAqIDxj
b2RlPm9wdGlvbmFsIHN0cmluZyBkZWZhdWx0X3N0cmluZyA9IDU7PC9jb2RlPgotICAgICAgICov
Ci0gICAgICBwdWJsaWMgQnVpbGRlciBzZXREZWZhdWx0U3RyaW5nQnl0ZXMoCi0gICAgICAgICAg
Y29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgIGlmICh2YWx1
ZSA9PSBudWxsKSB7Ci0gICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7Ci0gIH0K
LSAgCi0gICAgICAgIGRlZmF1bHRTdHJpbmdfID0gdmFsdWU7Ci0gICAgICAgIG9uQ2hhbmdlZCgp
OwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQotICAgICAgcHJpdmF0ZSBib29sZWFu
IGRlZmF1bHRCb29sXyA7Ci0gICAgICAvKioKLSAgICAgICAqIDxjb2RlPm9wdGlvbmFsIGJvb2wg
ZGVmYXVsdF9ib29sID0gNjs8L2NvZGU+Ci0gICAgICAgKi8KLSAgICAgIHB1YmxpYyBib29sZWFu
IGdldERlZmF1bHRCb29sKCkgewotICAgICAgICByZXR1cm4gZGVmYXVsdEJvb2xfOwotICAgICAg
fQotICAgICAgLyoqCi0gICAgICAgKiA8Y29kZT5vcHRpb25hbCBib29sIGRlZmF1bHRfYm9vbCA9
IDY7PC9jb2RlPgotICAgICAgICovCi0gICAgICBwdWJsaWMgQnVpbGRlciBzZXREZWZhdWx0Qm9v
bChib29sZWFuIHZhbHVlKSB7Ci0gICAgICAgIAotICAgICAgICBkZWZhdWx0Qm9vbF8gPSB2YWx1
ZTsKLSAgICAgICAgb25DaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQot
ICAgICAgLyoqCi0gICAgICAgKiA8Y29kZT5vcHRpb25hbCBib29sIGRlZmF1bHRfYm9vbCA9IDY7
PC9jb2RlPgotICAgICAgICovCi0gICAgICBwdWJsaWMgQnVpbGRlciBjbGVhckRlZmF1bHRCb29s
KCkgewotICAgICAgICAKLSAgICAgICAgZGVmYXVsdEJvb2xfID0gZmFsc2U7Ci0gICAgICAgIG9u
Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQotICAgICAgcHJpdmF0
ZSBmbG9hdCBkZWZhdWx0RmxvYXRfIDsKLSAgICAgIC8qKgotICAgICAgICogPGNvZGU+b3B0aW9u
YWwgZmxvYXQgZGVmYXVsdF9mbG9hdCA9IDc7PC9jb2RlPgotICAgICAgICovCi0gICAgICBwdWJs
aWMgZmxvYXQgZ2V0RGVmYXVsdEZsb2F0KCkgewotICAgICAgICByZXR1cm4gZGVmYXVsdEZsb2F0
XzsKLSAgICAgIH0KLSAgICAgIC8qKgotICAgICAgICogPGNvZGU+b3B0aW9uYWwgZmxvYXQgZGVm
YXVsdF9mbG9hdCA9IDc7PC9jb2RlPgotICAgICAgICovCi0gICAgICBwdWJsaWMgQnVpbGRlciBz
ZXREZWZhdWx0RmxvYXQoZmxvYXQgdmFsdWUpIHsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHRG
bG9hdF8gPSB2YWx1ZTsKLSAgICAgICAgb25DaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgfQotICAgICAgLyoqCi0gICAgICAgKiA8Y29kZT5vcHRpb25hbCBmbG9hdCBkZWZh
dWx0X2Zsb2F0ID0gNzs8L2NvZGU+Ci0gICAgICAgKi8KLSAgICAgIHB1YmxpYyBCdWlsZGVyIGNs
ZWFyRGVmYXVsdEZsb2F0KCkgewotICAgICAgICAKLSAgICAgICAgZGVmYXVsdEZsb2F0XyA9IDBG
OwotICAgICAgICBvbkNoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0K
LSAgICAgIHByaXZhdGUgZG91YmxlIGRlZmF1bHREb3VibGVfIDsKLSAgICAgIC8qKgotICAgICAg
ICogPGNvZGU+b3B0aW9uYWwgZG91YmxlIGRlZmF1bHRfZG91YmxlID0gODs8L2NvZGU+Ci0gICAg
ICAgKi8KLSAgICAgIHB1YmxpYyBkb3VibGUgZ2V0RGVmYXVsdERvdWJsZSgpIHsKLSAgICAgICAg
cmV0dXJuIGRlZmF1bHREb3VibGVfOwotICAgICAgfQotICAgICAgLyoqCi0gICAgICAgKiA8Y29k
ZT5vcHRpb25hbCBkb3VibGUgZGVmYXVsdF9kb3VibGUgPSA4OzwvY29kZT4KLSAgICAgICAqLwot
ICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RGVmYXVsdERvdWJsZShkb3VibGUgdmFsdWUpIHsKLSAg
ICAgICAgCi0gICAgICAgIGRlZmF1bHREb3VibGVfID0gdmFsdWU7Ci0gICAgICAgIG9uQ2hhbmdl
ZCgpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLSAgICAgIC8qKgotICAgICAgICog
PGNvZGU+b3B0aW9uYWwgZG91YmxlIGRlZmF1bHRfZG91YmxlID0gODs8L2NvZGU+Ci0gICAgICAg
Ki8KLSAgICAgIHB1YmxpYyBCdWlsZGVyIGNsZWFyRGVmYXVsdERvdWJsZSgpIHsKLSAgICAgICAg
Ci0gICAgICAgIGRlZmF1bHREb3VibGVfID0gMEQ7Ci0gICAgICAgIG9uQ2hhbmdlZCgpOwotICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQotICAgICAgcHJpdmF0ZSBjb20uZ29vZ2xlLnBy
b3RvYnVmLkJ5dGVTdHJpbmcgZGVmYXVsdEJ5dGVzXyA9IGNvbS5nb29nbGUucHJvdG9idWYuQnl0
ZVN0cmluZy5FTVBUWTsKLSAgICAgIC8qKgotICAgICAgICogPGNvZGU+b3B0aW9uYWwgYnl0ZXMg
ZGVmYXVsdF9ieXRlcyA9IDk7PC9jb2RlPgotICAgICAgICovCi0gICAgICBwdWJsaWMgY29tLmdv
b2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nIGdldERlZmF1bHRCeXRlcygpIHsKLSAgICAgICAgcmV0
dXJuIGRlZmF1bHRCeXRlc187Ci0gICAgICB9Ci0gICAgICAvKioKLSAgICAgICAqIDxjb2RlPm9w
dGlvbmFsIGJ5dGVzIGRlZmF1bHRfYnl0ZXMgPSA5OzwvY29kZT4KLSAgICAgICAqLwotICAgICAg
cHVibGljIEJ1aWxkZXIgc2V0RGVmYXVsdEJ5dGVzKGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0
cmluZyB2YWx1ZSkgewotICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgIHRocm93IG5l
dyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOwotICB9Ci0gIAotICAgICAgICBkZWZhdWx0Qnl0ZXNf
ID0gdmFsdWU7Ci0gICAgICAgIG9uQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgIH0KLSAgICAgIC8qKgotICAgICAgICogPGNvZGU+b3B0aW9uYWwgYnl0ZXMgZGVmYXVsdF9i
eXRlcyA9IDk7PC9jb2RlPgotICAgICAgICovCi0gICAgICBwdWJsaWMgQnVpbGRlciBjbGVhckRl
ZmF1bHRCeXRlcygpIHsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHRCeXRlc18gPSBnZXREZWZh
dWx0SW5zdGFuY2UoKS5nZXREZWZhdWx0Qnl0ZXMoKTsKLSAgICAgICAgb25DaGFuZ2VkKCk7Ci0g
ICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotICAgICAgcHVibGljIGZpbmFsIEJ1aWxkZXIg
c2V0VW5rbm93bkZpZWxkcygKLSAgICAgICAgICBmaW5hbCBjb20uZ29vZ2xlLnByb3RvYnVmLlVu
a25vd25GaWVsZFNldCB1bmtub3duRmllbGRzKSB7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgfQotCi0gICAgICBwdWJsaWMgZmluYWwgQnVpbGRlciBtZXJnZVVua25vd25GaWVsZHMoCi0g
ICAgICAgICAgZmluYWwgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbmtub3duRmllbGRTZXQgdW5rbm93
bkZpZWxkcykgewotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQotCi0gICAgICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoYnVpbGRlcl9zY29wZTpjb20uZ29vZ2xlLnByb3RvYnVm
LmpydWJ5LlNlbnRpbmVsKQotICAgIH0KLQotICAgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChjbGFzc19zY29wZTpjb20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsKQotICAgIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2VudGluZWxPdXRl
ckNsYXNzLlNlbnRpbmVsIGRlZmF1bHRJbnN0YW5jZTtzdGF0aWMgewotICAgICAgZGVmYXVsdElu
c3RhbmNlID0gbmV3IGNvbS5nb29nbGUucHJvdG9idWYuanJ1YnkuU2VudGluZWxPdXRlckNsYXNz
LlNlbnRpbmVsKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjb20uZ29vZ2xlLnByb3Rv
YnVmLmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5TZW50aW5lbCBnZXREZWZhdWx0SW5zdGFuY2Uo
KSB7Ci0gICAgICByZXR1cm4gZGVmYXVsdEluc3RhbmNlOwotICAgIH0KLQotICAgIHB1YmxpYyBj
b20uZ29vZ2xlLnByb3RvYnVmLmpydWJ5LlNlbnRpbmVsT3V0ZXJDbGFzcy5TZW50aW5lbCBnZXRE
ZWZhdWx0SW5zdGFuY2VGb3JUeXBlKCkgewotICAgICAgcmV0dXJuIGRlZmF1bHRJbnN0YW5jZTsK
LSAgICB9Ci0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGNvbS5nb29nbGUucHJvdG9i
dWYuRGVzY3JpcHRvcnMuRGVzY3JpcHRvcgotICAgIGludGVybmFsX3N0YXRpY19jb21fZ29vZ2xl
X3Byb3RvYnVmX2pydWJ5X1NlbnRpbmVsX2Rlc2NyaXB0b3I7Ci0gIHByaXZhdGUgc3RhdGljCi0g
ICAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlLkZpZWxkQWNjZXNzb3JUYWJs
ZQotICAgICAgaW50ZXJuYWxfc3RhdGljX2NvbV9nb29nbGVfcHJvdG9idWZfanJ1YnlfU2VudGlu
ZWxfZmllbGRBY2Nlc3NvclRhYmxlOwotCi0gIHB1YmxpYyBzdGF0aWMgY29tLmdvb2dsZS5wcm90
b2J1Zi5EZXNjcmlwdG9ycy5GaWxlRGVzY3JpcHRvcgotICAgICAgZ2V0RGVzY3JpcHRvcigpIHsK
LSAgICByZXR1cm4gZGVzY3JpcHRvcjsKLSAgfQotICBwcml2YXRlIHN0YXRpYyBjb20uZ29vZ2xl
LnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yCi0gICAgICBkZXNjcmlwdG9yOwot
ICBzdGF0aWMgewotICAgIGphdmEubGFuZy5TdHJpbmdbXSBkZXNjcmlwdG9yRGF0YSA9IHsKLSAg
ICAgICJcblwwMTZzZW50aW5lbC5wcm90b1wwMjJcMDMxY29tLmdvb2dsZS5wcm90b2J1Zi5qciIg
KwotICAgICAgInVieVwiXDMzNFwwMDFcblwwMTBTZW50aW5lbFwwMjJcMDI1XG5ccmRlZmF1bHRf
aW50MzJcMDMwXDAwMSBcMDAxKFwwMDVcMDIyIiArCi0gICAgICAiXDAyNVxuXHJkZWZhdWx0X2lu
dDY0XDAzMFwwMDIgXDAwMShcMDAzXDAyMlwwMjZcblwwMTZkZWZhdWx0X3VuaXQzMiIgKwotICAg
ICAgIlwwMzBcMDAzIFwwMDEoXHJcMDIyXDAyNlxuXDAxNmRlZmF1bHRfdWludDY0XDAzMFwwMDQg
XDAwMShcMDA0XDAyMlwwMjZcblwwMTZkZWZhdWwiICsKLSAgICAgICJ0X3N0cmluZ1wwMzBcMDA1
IFwwMDEoXHRcMDIyXDAyNFxuXDAxNGRlZmF1bHRfYm9vbFwwMzBcMDA2IFwwMDEoXDAxMFwwMjJc
MDI1XG5cciIgKwotICAgICAgImRlZmF1bHRfZmxvYXRcMDMwXDAwNyBcMDAxKFwwMDJcMDIyXDAy
NlxuXDAxNmRlZmF1bHRfZG91YmxlXDAzMFwwMTAgIiArCi0gICAgICAiXDAwMShcMDAxXDAyMlww
MjVcblxyZGVmYXVsdF9ieXRlc1wwMzBcdCBcMDAxKFwwMTRCXDAwMkhcMDAyYlwwMDZwcm90bzMi
Ci0gICAgfTsKLSAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlw
dG9yLkludGVybmFsRGVzY3JpcHRvckFzc2lnbmVyIGFzc2lnbmVyID0KLSAgICAgICAgbmV3IGNv
bS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmlsZURlc2NyaXB0b3IuICAgIEludGVybmFs
RGVzY3JpcHRvckFzc2lnbmVyKCkgewotICAgICAgICAgIHB1YmxpYyBjb20uZ29vZ2xlLnByb3Rv
YnVmLkV4dGVuc2lvblJlZ2lzdHJ5IGFzc2lnbkRlc2NyaXB0b3JzKAotICAgICAgICAgICAgICBj
b20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yIHJvb3QpIHsKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3IgPSByb290OwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgICAgfQotICAgICAgICB9OwotICAgIGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
cnMuRmlsZURlc2NyaXB0b3IKLSAgICAgIC5pbnRlcm5hbEJ1aWxkR2VuZXJhdGVkRmlsZUZyb20o
ZGVzY3JpcHRvckRhdGEsCi0gICAgICAgIG5ldyBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0
b3JzLkZpbGVEZXNjcmlwdG9yW10gewotICAgICAgICB9LCBhc3NpZ25lcik7Ci0gICAgaW50ZXJu
YWxfc3RhdGljX2NvbV9nb29nbGVfcHJvdG9idWZfanJ1YnlfU2VudGluZWxfZGVzY3JpcHRvciA9
Ci0gICAgICBnZXREZXNjcmlwdG9yKCkuZ2V0TWVzc2FnZVR5cGVzKCkuZ2V0KDApOwotICAgIGlu
dGVybmFsX3N0YXRpY19jb21fZ29vZ2xlX3Byb3RvYnVmX2pydWJ5X1NlbnRpbmVsX2ZpZWxkQWNj
ZXNzb3JUYWJsZSA9IG5ldwotICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNz
YWdlLkZpZWxkQWNjZXNzb3JUYWJsZSgKLSAgICAgICAgaW50ZXJuYWxfc3RhdGljX2NvbV9nb29n
bGVfcHJvdG9idWZfanJ1YnlfU2VudGluZWxfZGVzY3JpcHRvciwKLSAgICAgICAgbmV3IGphdmEu
bGFuZy5TdHJpbmdbXSB7ICJEZWZhdWx0SW50MzIiLCAiRGVmYXVsdEludDY0IiwgIkRlZmF1bHRV
bml0MzIiLCAiRGVmYXVsdFVpbnQ2NCIsICJEZWZhdWx0U3RyaW5nIiwgIkRlZmF1bHRCb29sIiwg
IkRlZmF1bHRGbG9hdCIsICJEZWZhdWx0RG91YmxlIiwgIkRlZmF1bHRCeXRlcyIsIH0pOwotICB9
Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG91dGVyX2NsYXNzX3Njb3BlKQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9V
dGlscy5qYXZhIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9wcm90b2J1Zi9qcnVieS9V
dGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTZhMDk3OTkyMDIxNWIw
M2VhN2JjYzZmZDQ4ZDRiOTc0YjBmNzcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvcHJvdG9idWYvanJ1
YnkvVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwMCArMCwwIEBACi0vKgotICogUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0gKiBDb3B5
cmlnaHQgMjAxNCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotcGFja2FnZSBjb20uZ29vZ2xlLnBy
b3RvYnVmLmpydWJ5OwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nOwot
aW1wb3J0IGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvczsKLWltcG9ydCBjb20u
Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzOwotaW1wb3J0IG9yZy5qY29kaW5ncy5FbmNvZGlu
ZzsKLWltcG9ydCBvcmcuamNvZGluZ3Muc3BlY2lmaWMuQVNDSUlFbmNvZGluZzsKLWltcG9ydCBv
cmcuamNvZGluZ3Muc3BlY2lmaWMuVVNBU0NJSUVuY29kaW5nOwotaW1wb3J0IG9yZy5qY29kaW5n
cy5zcGVjaWZpYy5VVEY4RW5jb2Rpbmc7Ci1pbXBvcnQgb3JnLmpydWJ5Lio7Ci1pbXBvcnQgb3Jn
LmpydWJ5LnJ1bnRpbWUuQmxvY2s7Ci1pbXBvcnQgb3JnLmpydWJ5LnJ1bnRpbWUuVGhyZWFkQ29u
dGV4dDsKLWltcG9ydCBvcmcuanJ1YnkucnVudGltZS5idWlsdGluLklSdWJ5T2JqZWN0OwotCi1p
bXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLXB1YmxpYyBjbGFzcyBVdGlscyB7Ci0gICAg
cHVibGljIHN0YXRpYyBEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IuVHlwZSBydWJ5VG9GaWVs
ZFR5cGUoSVJ1YnlPYmplY3QgdHlwZUNsYXNzKSB7Ci0gICAgICAgIHJldHVybiBEZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3IuVHlwZS52YWx1ZU9mKHR5cGVDbGFzcy5hc0phdmFTdHJpbmcoKS50
b1VwcGVyQ2FzZSgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIElSdWJ5T2JqZWN0IGZp
ZWxkVHlwZVRvUnVieShUaHJlYWRDb250ZXh0IGNvbnRleHQsIERlc2NyaXB0b3JzLkZpZWxkRGVz
Y3JpcHRvci5UeXBlIHR5cGUpIHsKLSAgICAgICAgcmV0dXJuIGZpZWxkVHlwZVRvUnVieShjb250
ZXh0LCB0eXBlLm5hbWUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBJUnVieU9iamVj
dCBmaWVsZFR5cGVUb1J1YnkoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBEZXNjcmlwdG9yUHJvdG9z
LkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUgdHlwZSkgewotICAgICAgICByZXR1cm4gZmllbGRU
eXBlVG9SdWJ5KGNvbnRleHQsIHR5cGUubmFtZSgpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0
YXRpYyBJUnVieU9iamVjdCBmaWVsZFR5cGVUb1J1YnkoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBT
dHJpbmcgdHlwZU5hbWUpIHsKLQotICAgICAgICByZXR1cm4gY29udGV4dC5ydW50aW1lLm5ld1N5
bWJvbCh0eXBlTmFtZS5yZXBsYWNlKCJUWVBFXyIsICIiKS50b0xvd2VyQ2FzZSgpKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tUeXBlKFRocmVhZENvbnRleHQgY29udGV4
dCwgRGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLlR5cGUgZmllbGRUeXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElSdWJ5T2JqZWN0IHZhbHVlLCBSdWJ5TW9kdWxlIHR5cGVDbGFz
cykgewotICAgICAgICBSdWJ5IHJ1bnRpbWUgPSBjb250ZXh0LnJ1bnRpbWU7Ci0gICAgICAgIE9i
amVjdCB2YWw7Ci0gICAgICAgIHN3aXRjaChmaWVsZFR5cGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
SU5UMzI6Ci0gICAgICAgICAgICBjYXNlIElOVDY0OgotICAgICAgICAgICAgY2FzZSBVSU5UMzI6
Ci0gICAgICAgICAgICBjYXNlIFVJTlQ2NDoKLSAgICAgICAgICAgICAgICBpZiAoIWlzUnVieU51
bSh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgcnVudGltZS5uZXdUeXBlRXJy
b3IoIkV4cGVjdGVkIG51bWJlciB0eXBlIGZvciBpbnRlZ3JhbCBmaWVsZC4iKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3dpdGNoKGZpZWxkVHlwZSkgewotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElOVDMyOgotICAgICAgICAgICAgICAgICAgICAgICAgUnVieU51bWVy
aWMubnVtMmludCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJTlQ2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJ1YnlO
dW1lcmljLm51bTJsb25nKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIFVJTlQzMjoKLSAgICAgICAgICAgICAgICAgICAgICAg
IG51bTJ1aW50KHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgbnVtMnVsb25n
KGNvbnRleHQucnVudGltZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNoZWNrSW50VHlwZVByZWNpc2lv
bihjb250ZXh0LCBmaWVsZFR5cGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRkxPQVQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1J1YnlOdW0odmFs
dWUpKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBydW50aW1lLm5ld1R5cGVFcnJvcigiRXhw
ZWN0ZWQgbnVtYmVyIHR5cGUgZm9yIGZsb2F0IGZpZWxkLiIpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBET1VCTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1J1
YnlOdW0odmFsdWUpKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBydW50aW1lLm5ld1R5cGVF
cnJvcigiRXhwZWN0ZWQgbnVtYmVyIHR5cGUgZm9yIGRvdWJsZSBmaWVsZC4iKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQk9PTDoKLSAgICAgICAgICAgICAgICBp
ZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFJ1YnlCb29sZWFuKSkKLSAgICAgICAgICAgICAgICAgICAg
dGhyb3cgcnVudGltZS5uZXdUeXBlRXJyb3IoIkludmFsaWQgYXJndW1lbnQgZm9yIGJvb2xlYW4g
ZmllbGQuIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJZVEVT
OgotICAgICAgICAgICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgICAgICAgICAgdmFsaWRhdGVTdHJp
bmdFbmNvZGluZyhjb250ZXh0LnJ1bnRpbWUsIGZpZWxkVHlwZSwgdmFsdWUpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBNRVNTQUdFOgotICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS5nZXRNZXRhQ2xhc3MoKSAhPSB0eXBlQ2xhc3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgcnVudGltZS5uZXdUeXBlRXJyb3IodmFsdWUsIHR5cGVDbGFzcyk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBF
TlVNOgotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJ1YnlTeW1ib2wpIHsK
LSAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvcnMuRW51bURlc2NyaXB0b3IgZW51bURlc2Ny
aXB0b3IgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUnVieUVudW1EZXNjcmlwdG9y
KSB0eXBlQ2xhc3MuZ2V0SW5zdGFuY2VWYXJpYWJsZShERVNDUklQVE9SX0lOU1RBTkNFX1ZBUikp
LmdldERlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsID0gZW51bURlc2NyaXB0
b3IuZmluZFZhbHVlQnlOYW1lKHZhbHVlLmFzSmF2YVN0cmluZygpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcnVu
dGltZS5uZXdSYW5nZUVycm9yKCJFbnVtIHZhbHVlICIgKyB2YWx1ZSArICIgaXMgbm90IGZvdW5k
LiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZighaXNSdWJ5TnVtKHZhbHVlKSkgewotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBydW50aW1lLm5ld1R5cGVFcnJvcigiRXhwZWN0ZWQgbnVt
YmVyIG9yIHN5bWJvbCB0eXBlIGZvciBlbnVtIGZpZWxkLiIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIElSdWJ5
T2JqZWN0IHdyYXBQcmltYXJ5VmFsdWUoVGhyZWFkQ29udGV4dCBjb250ZXh0LCBEZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3IuVHlwZSBmaWVsZFR5cGUsIE9iamVjdCB2YWx1ZSkgewotICAgICAg
ICBSdWJ5IHJ1bnRpbWUgPSBjb250ZXh0LnJ1bnRpbWU7Ci0gICAgICAgIHN3aXRjaCAoZmllbGRU
eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIElOVDMyOgotICAgICAgICAgICAgICAgIHJldHVybiBy
dW50aW1lLm5ld0ZpeG51bSgoSW50ZWdlcikgdmFsdWUpOwotICAgICAgICAgICAgY2FzZSBJTlQ2
NDoKLSAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZS5uZXdGaXhudW0oKExvbmcpIHZhbHVl
KTsKLSAgICAgICAgICAgIGNhc2UgVUlOVDMyOgotICAgICAgICAgICAgICAgIHJldHVybiBydW50
aW1lLm5ld0ZpeG51bSgoKEludGVnZXIpIHZhbHVlKSAmICgtMWwgPj4+IDMyKSk7Ci0gICAgICAg
ICAgICBjYXNlIFVJTlQ2NDoKLSAgICAgICAgICAgICAgICBsb25nIHJldCA9IChMb25nKSB2YWx1
ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID49IDAgPyBydW50aW1lLm5ld0ZpeG51bShy
ZXQpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJ1YnlCaWdudW0ubmV3QmlnbnVtKHJ1bnRp
bWUsIFVJTlQ2NF9DT01QTEVNRU5UQVJZLmFkZChuZXcgQmlnSW50ZWdlcihyZXQgKyAiIikpKTsK
LSAgICAgICAgICAgIGNhc2UgRkxPQVQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWUu
bmV3RmxvYXQoKEZsb2F0KSB2YWx1ZSk7Ci0gICAgICAgICAgICBjYXNlIERPVUJMRToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcnVudGltZS5uZXdGbG9hdCgoRG91YmxlKSB2YWx1ZSk7Ci0gICAg
ICAgICAgICBjYXNlIEJPT0w6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChCb29sZWFuKSB2YWx1
ZSA/IHJ1bnRpbWUuZ2V0VHJ1ZSgpIDogcnVudGltZS5nZXRGYWxzZSgpOwotICAgICAgICAgICAg
Y2FzZSBCWVRFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZS5uZXdTdHJpbmcoKChC
eXRlU3RyaW5nKSB2YWx1ZSkudG9TdHJpbmdVdGY4KCkpOwotICAgICAgICAgICAgY2FzZSBTVFJJ
Tkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWUubmV3U3RyaW5nKHZhbHVlLnRvU3Ry
aW5nKCkpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gcnVu
dGltZS5nZXROaWwoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgaW50
IG51bTJ1aW50KElSdWJ5T2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIGxvbmcgbG9uZ1ZhbCA9IFJ1
YnlOdW1lcmljLm51bTJsb25nKHZhbHVlKTsKLSAgICAgICAgaWYgKGxvbmdWYWwgPiBVSU5UX01B
WCkKLSAgICAgICAgICAgIHRocm93IHZhbHVlLmdldFJ1bnRpbWUoKS5uZXdSYW5nZUVycm9yKCJJ
bnRlZ2VyICIgKyBsb25nVmFsICsgIiB0b28gYmlnIHRvIGNvbnZlcnQgdG8gJ3Vuc2lnbmVkIGlu
dCciKTsKLSAgICAgICAgbG9uZyBudW0gPSBsb25nVmFsOwotICAgICAgICBpZiAobnVtID4gSW50
ZWdlci5NQVhfVkFMVUUgfHwgbnVtIDwgSW50ZWdlci5NSU5fVkFMVUUpCi0gICAgICAgICAgICAv
LyBlbmNvZGUgdG8gVUlOVDMyCi0gICAgICAgICAgICBudW0gPSAoLWxvbmdWYWwgXiAoLTFsID4+
PiAzMikgKSArIDE7Ci0gICAgICAgIFJ1YnlOdW1lcmljLmNoZWNrSW50KHZhbHVlLCBudW0pOwot
ICAgICAgICByZXR1cm4gKGludCkgbnVtOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgbG9u
ZyBudW0ydWxvbmcoUnVieSBydW50aW1lLCBJUnVieU9iamVjdCB2YWx1ZSkgewotICAgICAgICBp
ZiAodmFsdWUgaW5zdGFuY2VvZiBSdWJ5RmxvYXQpIHsKLSAgICAgICAgICAgIFJ1YnlCaWdudW0g
YmlnbnVtID0gUnVieUJpZ251bS5uZXdCaWdudW0ocnVudGltZSwgKChSdWJ5RmxvYXQpIHZhbHVl
KS5nZXREb3VibGVWYWx1ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBSdWJ5QmlnbnVtLmJpZzJ1
bG9uZyhiaWdudW0pOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUnVieUJp
Z251bSkgewotICAgICAgICAgICAgcmV0dXJuIFJ1YnlCaWdudW0uYmlnMnVsb25nKChSdWJ5Qmln
bnVtKSB2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gUnVieU51
bWVyaWMubnVtMmxvbmcodmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0
YXRpYyB2b2lkIHZhbGlkYXRlU3RyaW5nRW5jb2RpbmcoUnVieSBydW50aW1lLCBEZXNjcmlwdG9y
cy5GaWVsZERlc2NyaXB0b3IuVHlwZSB0eXBlLCBJUnVieU9iamVjdCB2YWx1ZSkgewotICAgICAg
ICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFJ1YnlTdHJpbmcpKQotICAgICAgICAgICAgdGhyb3cg
cnVudGltZS5uZXdUeXBlRXJyb3IoIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZyBmaWVsZC4i
KTsKLSAgICAgICAgRW5jb2RpbmcgZW5jb2RpbmcgPSAoKFJ1YnlTdHJpbmcpIHZhbHVlKS5nZXRF
bmNvZGluZygpOwotICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAgICAgICAgY2FzZSBCWVRF
UzoKLSAgICAgICAgICAgICAgICBpZiAoZW5jb2RpbmcgIT0gQVNDSUlFbmNvZGluZy5JTlNUQU5D
RSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgcnVudGltZS5uZXdUeXBlRXJyb3IoIkVuY29k
aW5nIGZvciBieXRlcyBmaWVsZHMiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG11
c3QgYmUgXCJBU0NJSS04QklUXCIsIGJ1dCB3YXMgIiArIGVuY29kaW5nKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU1RSSU5HOgotICAgICAgICAgICAgICAgIGlm
IChlbmNvZGluZyAhPSBVVEY4RW5jb2RpbmcuSU5TVEFOQ0UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICYmIGVuY29kaW5nICE9IFVTQVNDSUlFbmNvZGluZy5JTlNUQU5DRSkKLSAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgcnVudGltZS5uZXdUeXBlRXJyb3IoIkVuY29kaW5nIGZvciBzdHJpbmcg
ZmllbGRzIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtdXN0IGJlIFwiVVRGLThc
IiBvciBcIkFTQ0lJXCIsIGJ1dCB3YXMgIiArIGVuY29kaW5nKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tOYW1lQXZhaWxhYmls
aXR5KFRocmVhZENvbnRleHQgY29udGV4dCwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgaWYgKGNv
bnRleHQucnVudGltZS5nZXRPYmplY3QoKS5nZXRDb25zdGFudEF0KG5hbWUpICE9IG51bGwpCi0g
ICAgICAgICAgICB0aHJvdyBjb250ZXh0LnJ1bnRpbWUubmV3TmFtZUVycm9yKG5hbWUgKyAiIGlz
IGFscmVhZHkgZGVmaW5lZCIsIG5hbWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlcGxh
Y2UgaW52YWxpZCAiLiIgaW4gZGVzY3JpcHRvciB3aXRoIF9fRE9UX18KLSAgICAgKiBAcGFyYW0g
bmFtZQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBl
c2NhcGVJZGVudGlmaWVyKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHJldHVybiBuYW1lLnJlcGxh
Y2UoIi4iLCBCQUROQU1FX1JFUExBQ0VNRU5UKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBS
ZXBsYWNlIF9fRE9UX18gaW4gZGVzY3JpcHRvciBuYW1lIHdpdGggIi4iCi0gICAgICogQHBhcmFt
IG5hbWUKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcg
dW5lc2NhcGVJZGVudGlmaWVyKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHJldHVybiBuYW1lLnJl
cGxhY2UoQkFETkFNRV9SRVBMQUNFTUVOVCwgIi4iKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3Rh
dGljIGJvb2xlYW4gaXNNYXBFbnRyeShEZXNjcmlwdG9ycy5GaWVsZERlc2NyaXB0b3IgZmllbGRE
ZXNjcmlwdG9yKSB7Ci0gICAgICAgIHJldHVybiBmaWVsZERlc2NyaXB0b3IuZ2V0VHlwZSgpID09
IERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvci5UeXBlLk1FU1NBR0UgJiYKLSAgICAgICAgICAg
ICAgICBmaWVsZERlc2NyaXB0b3IuaXNSZXBlYXRlZCgpICYmCi0gICAgICAgICAgICAgICAgZmll
bGREZXNjcmlwdG9yLmdldE1lc3NhZ2VUeXBlKCkuZ2V0T3B0aW9ucygpLmdldE1hcEVudHJ5KCk7
Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBSdWJ5RmllbGREZXNjcmlwdG9yIG1zZ2RlZkNy
ZWF0ZUZpZWxkKFRocmVhZENvbnRleHQgY29udGV4dCwgU3RyaW5nIGxhYmVsLCBJUnVieU9iamVj
dCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUnVieU9iamVj
dCB0eXBlLCBJUnVieU9iamVjdCBudW1iZXIsIElSdWJ5T2JqZWN0IHR5cGVDbGFzcywgUnVieUNs
YXNzIGNGaWVsZERlc2NyaXB0b3IpIHsKLSAgICAgICAgUnVieSBydW50aW1lID0gY29udGV4dC5y
dW50aW1lOwotICAgICAgICBSdWJ5RmllbGREZXNjcmlwdG9yIGZpZWxkRGVmID0gKFJ1YnlGaWVs
ZERlc2NyaXB0b3IpIGNGaWVsZERlc2NyaXB0b3IubmV3SW5zdGFuY2UoY29udGV4dCwgQmxvY2su
TlVMTF9CTE9DSyk7Ci0gICAgICAgIGZpZWxkRGVmLnNldExhYmVsKGNvbnRleHQsIHJ1bnRpbWUu
bmV3U3RyaW5nKGxhYmVsKSk7Ci0gICAgICAgIGZpZWxkRGVmLnNldE5hbWUoY29udGV4dCwgbmFt
ZSk7Ci0gICAgICAgIGZpZWxkRGVmLnNldFR5cGUoY29udGV4dCwgdHlwZSk7Ci0gICAgICAgIGZp
ZWxkRGVmLnNldE51bWJlcihjb250ZXh0LCBudW1iZXIpOwotCi0gICAgICAgIGlmICghdHlwZUNs
YXNzLmlzTmlsKCkpIHsKLSAgICAgICAgICAgIGlmICghKHR5cGVDbGFzcyBpbnN0YW5jZW9mIFJ1
YnlTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgcnVudGltZS5uZXdBcmd1bWVudEVy
cm9yKCJleHBlY3RlZCBzdHJpbmcgZm9yIHR5cGUgY2xhc3MiKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGZpZWxkRGVmLnNldFN1Ym1zZ05hbWUoY29udGV4dCwgdHlwZUNsYXNzKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gZmllbGREZWY7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVk
IHN0YXRpYyB2b2lkIGNoZWNrSW50VHlwZVByZWNpc2lvbihUaHJlYWRDb250ZXh0IGNvbnRleHQs
IERlc2NyaXB0b3JzLkZpZWxkRGVzY3JpcHRvci5UeXBlIHR5cGUsIElSdWJ5T2JqZWN0IHZhbHVl
KSB7Ci0gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJ1YnlGbG9hdCkgewotICAgICAgICAg
ICAgZG91YmxlIGRvdWJsZVZhbCA9IFJ1YnlOdW1lcmljLm51bTJkYmwodmFsdWUpOwotICAgICAg
ICAgICAgaWYgKE1hdGguZmxvb3IoZG91YmxlVmFsKSAhPSBkb3VibGVWYWwpIHsKLSAgICAgICAg
ICAgICAgICB0aHJvdyBjb250ZXh0LnJ1bnRpbWUubmV3UmFuZ2VFcnJvcigiTm9uLWludGVncmFs
IGZsb2F0aW5nIHBvaW50IHZhbHVlIGFzc2lnbmVkIHRvIGludGVnZXIgZmllbGQuIik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgPT0gRGVzY3JpcHRvcnMuRmll
bGREZXNjcmlwdG9yLlR5cGUuVUlOVDMyIHx8IHR5cGUgPT0gRGVzY3JpcHRvcnMuRmllbGREZXNj
cmlwdG9yLlR5cGUuVUlOVDY0KSB7Ci0gICAgICAgICAgICBpZiAoUnVieU51bWVyaWMubnVtMmRi
bCh2YWx1ZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgY29udGV4dC5ydW50aW1lLm5l
d1JhbmdlRXJyb3IoIkFzc2lnbmluZyBuZWdhdGl2ZSB2YWx1ZSB0byB1bnNpZ25lZCBpbnRlZ2Vy
IGZpZWxkLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVj
dGVkIHN0YXRpYyBib29sZWFuIGlzUnVieU51bShPYmplY3QgdmFsdWUpIHsKLSAgICAgICAgcmV0
dXJuIHZhbHVlIGluc3RhbmNlb2YgUnVieUZpeG51bSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFJ1YnlG
bG9hdCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFJ1YnlCaWdudW07Ci0gICAgfQotCi0gICAgcHJvdGVj
dGVkIHN0YXRpYyB2b2lkIHZhbGlkYXRlVHlwZUNsYXNzKFRocmVhZENvbnRleHQgY29udGV4dCwg
RGVzY3JpcHRvcnMuRmllbGREZXNjcmlwdG9yLlR5cGUgdHlwZSwgSVJ1YnlPYmplY3QgdmFsdWUp
IHsKLSAgICAgICAgUnVieSBydW50aW1lID0gY29udGV4dC5ydW50aW1lOwotICAgICAgICBpZiAo
ISh2YWx1ZSBpbnN0YW5jZW9mIFJ1YnlNb2R1bGUpKSB7Ci0gICAgICAgICAgICB0aHJvdyBydW50
aW1lLm5ld0FyZ3VtZW50RXJyb3IoIlR5cGVDbGFzcyBoYXMgaW5jb3JyZWN0IHR5cGUiKTsKLSAg
ICAgICAgfQotICAgICAgICBSdWJ5TW9kdWxlIGtsYXNzID0gKFJ1YnlNb2R1bGUpIHZhbHVlOwot
ICAgICAgICBJUnVieU9iamVjdCBkZXNjcmlwdG9yID0ga2xhc3MuZ2V0SW5zdGFuY2VWYXJpYWJs
ZShERVNDUklQVE9SX0lOU1RBTkNFX1ZBUik7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmlzTmls
KCkpIHsKLSAgICAgICAgICAgIHRocm93IHJ1bnRpbWUubmV3QXJndW1lbnRFcnJvcigiVHlwZSBj
bGFzcyBoYXMgbm8gZGVzY3JpcHRvci4gUGxlYXNlIHBhc3MgYSAiICsKLSAgICAgICAgICAgICAg
ICAgICAgImNsYXNzIG9yIGVudW0gYXMgcmV0dXJuZWQgYnkgdGhlIERlc2NyaXB0b3JQb29sLiIp
OwotICAgICAgICB9Ci0gICAgICAgIGlmICh0eXBlID09IERlc2NyaXB0b3JzLkZpZWxkRGVzY3Jp
cHRvci5UeXBlLk1FU1NBR0UpIHsKLSAgICAgICAgICAgIGlmICghIChkZXNjcmlwdG9yIGluc3Rh
bmNlb2YgUnVieURlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgcnVudGltZS5u
ZXdBcmd1bWVudEVycm9yKCJEZXNjcmlwdG9yIGhhcyBhbiBpbmNvcnJlY3QgdHlwZSIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gRGVzY3JpcHRvcnMuRmllbGRE
ZXNjcmlwdG9yLlR5cGUuRU5VTSkgewotICAgICAgICAgICAgaWYgKCEgKGRlc2NyaXB0b3IgaW5z
dGFuY2VvZiBSdWJ5RW51bURlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgcnVu
dGltZS5uZXdBcmd1bWVudEVycm9yKCJEZXNjcmlwdG9yIGhhcyBhbiBpbmNvcnJlY3QgdHlwZSIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBT
dHJpbmcgQkFETkFNRV9SRVBMQUNFTUVOVCA9ICJfX0RPVF9fIjsKLQotICAgIHB1YmxpYyBzdGF0
aWMgU3RyaW5nIERFU0NSSVBUT1JfSU5TVEFOQ0VfVkFSID0gIkBkZXNjcmlwdG9yIjsKLQotICAg
IHB1YmxpYyBzdGF0aWMgU3RyaW5nIEVRVUFMX1NJR04gPSAiPSI7Ci0KLSAgICBwcml2YXRlIHN0
YXRpYyBCaWdJbnRlZ2VyIFVJTlQ2NF9DT01QTEVNRU5UQVJZID0gbmV3IEJpZ0ludGVnZXIoIjE4
NDQ2NzQ0MDczNzA5NTUxNjE2Iik7IC8vTWF0aC5wb3coMiwgNjQpCi0KLSAgICBwcml2YXRlIHN0
YXRpYyBsb25nIFVJTlRfTUFYID0gMHhmZmZmZmZmZmw7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3Jj
L21haW4vamF2YS9nb29nbGUvUHJvdG9idWZKYXZhU2VydmljZS5qYXZhIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWlu
L2phdmEvZ29vZ2xlL1Byb3RvYnVmSmF2YVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYmZmYjQ5MmE5ZTI3MDcwZTc5MDc4MTdmNDJkYWFkNThjZjlhM2Q4Zi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkvc3JjL21haW4v
amF2YS9nb29nbGUvUHJvdG9idWZKYXZhU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEs
NjAgKzAsMCBAQAotLyoKLSAqIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotICogQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LXBhY2thZ2UgZ29vZ2xlOwotCi1pbXBvcnQgY29tLmdvb2dsZS5wcm90b2J1Zi5qcnVieS4qOwot
aW1wb3J0IG9yZy5qcnVieS5SdWJ5OwotaW1wb3J0IG9yZy5qcnVieS5ydW50aW1lLmxvYWQuQmFz
aWNMaWJyYXJ5U2VydmljZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLXB1Ymxp
YyBjbGFzcyBQcm90b2J1ZkphdmFTZXJ2aWNlIGltcGxlbWVudHMgQmFzaWNMaWJyYXJ5U2Vydmlj
ZSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gYmFzaWNMb2FkKFJ1YnkgcnVi
eSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcnVieS5kZWZpbmVNb2R1bGUoIkdvb2ds
ZSIpOwotICAgICAgICBSdWJ5UHJvdG9idWYuY3JlYXRlUHJvdG9idWYocnVieSk7Ci0gICAgICAg
IFJ1YnlEZXNjcmlwdG9yLmNyZWF0ZVJ1YnlEZXNjcmlwdG9yKHJ1YnkpOwotICAgICAgICBSdWJ5
QnVpbGRlci5jcmVhdGVSdWJ5QnVpbGRlcihydWJ5KTsKLSAgICAgICAgUnVieUZpZWxkRGVzY3Jp
cHRvci5jcmVhdGVSdWJ5RmlsZURlc2NyaXB0b3IocnVieSk7Ci0gICAgICAgIFJ1YnlNZXNzYWdl
QnVpbGRlckNvbnRleHQuY3JlYXRlUnVieU1lc3NhZ2VCdWlsZGVyQ29udGV4dChydWJ5KTsKLSAg
ICAgICAgUnVieUVudW1EZXNjcmlwdG9yLmNyZWF0ZVJ1YnlFbnVtRGVzY3JpcHRvcihydWJ5KTsK
LSAgICAgICAgUnVieUVudW1CdWlsZGVyQ29udGV4dC5jcmVhdGVSdWJ5RW51bUJ1aWxkZXJDb250
ZXh0KHJ1YnkpOwotICAgICAgICBSdWJ5RGVzY3JpcHRvclBvb2wuY3JlYXRlUnVieURlc2NyaXB0
b3JQb29sKHJ1YnkpOwotICAgICAgICBSdWJ5UmVwZWF0ZWRGaWVsZC5jcmVhdGVSdWJ5UmVwZWF0
ZWRGaWVsZChydWJ5KTsKLSAgICAgICAgUnVieUZpZWxkRGVzY3JpcHRvci5jcmVhdGVSdWJ5Rmls
ZURlc2NyaXB0b3IocnVieSk7Ci0gICAgICAgIFJ1YnlNYXAuY3JlYXRlUnVieU1hcChydWJ5KTsK
LSAgICAgICAgUnVieU9uZW9mRGVzY3JpcHRvci5jcmVhdGVSdWJ5T25lb2ZEZXNjcmlwdG9yKHJ1
YnkpOwotICAgICAgICBSdWJ5T25lb2ZCdWlsZGVyQ29udGV4dC5jcmVhdGVSdWJ5T25lb2ZCdWls
ZGVyQ29udGV4dChydWJ5KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9ydWJ5L3NyYy9tYWluL3NlbnRpbmVsLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3NyYy9tYWluL3NlbnRpbmVs
LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjIwNDFiYTA3NDczZTI3ZGVi
ZjEwYzcxZDBkN2UxMzUzYjVlNjgyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvcnVieS9zcmMvbWFpbi9zZW50aW5lbC5wcm90bworKysgL2Rldi9udWxsCkBA
IC0xLDE1ICswLDAgQEAKLXN5bnRheCA9ICJwcm90bzMiOwotcGFja2FnZSBjb20uZ29vZ2xlLnBy
b3RvYnVmLmpydWJ5Owotb3B0aW9uIG9wdGltaXplX2ZvciA9IENPREVfU0laRTsKLQotbWVzc2Fn
ZSBTZW50aW5lbCB7Ci0gIGludDMyIGRlZmF1bHRfaW50MzIgPSAxOwotICBpbnQ2NCBkZWZhdWx0
X2ludDY0ID0gMjsKLSAgdWludDMyIGRlZmF1bHRfdW5pdDMyID0gMzsKLSAgdWludDY0IGRlZmF1
bHRfdWludDY0ID0gNDsKLSAgc3RyaW5nIGRlZmF1bHRfc3RyaW5nID0gNTsKLSAgYm9vbCBkZWZh
dWx0X2Jvb2wgPSA2OwotICBmbG9hdCBkZWZhdWx0X2Zsb2F0ID0gNzsKLSAgZG91YmxlIGRlZmF1
bHRfZG91YmxlID0gODsKLSAgYnl0ZXMgZGVmYXVsdF9ieXRlcyA9IDk7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3J1YnkvdGVzdHMvYmFzaWMucmIgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvdGVzdHMvYmFzaWMucmIKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDc3YzE4NmVmMzUxNmZiMDliYjllOWFhZmU1MTY4YTdkYzdjNGI5ZTUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3Rlc3Rz
L2Jhc2ljLnJiCisrKyAvZGV2L251bGwKQEAgLTEsMTE3NCArMCwwIEBACi0jIS91c3IvYmluL3J1
YnkKLQotcmVxdWlyZSAnZ29vZ2xlL3Byb3RvYnVmJwotcmVxdWlyZSAndGVzdC91bml0JwotCi0j
IC0tLS0tLS0tLS0tLS0gZ2VuZXJhdGVkIGNvZGUgLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlIEJh
c2ljVGVzdAotICBwb29sID0gR29vZ2xlOjpQcm90b2J1Zjo6RGVzY3JpcHRvclBvb2wubmV3Ci0g
IHBvb2wuYnVpbGQgZG8KLSAgICBhZGRfbWVzc2FnZSAiRm9vIiBkbwotICAgICAgb3B0aW9uYWwg
OmJhciwgOm1lc3NhZ2UsIDEsICJCYXIiCi0gICAgICByZXBlYXRlZCA6YmF6LCA6bWVzc2FnZSwg
MiwgIkJheiIKLSAgICBlbmQKLQotICAgIGFkZF9tZXNzYWdlICJCYXIiIGRvCi0gICAgICBvcHRp
b25hbCA6bXNnLCA6c3RyaW5nLCAxCi0gICAgZW5kCi0KLSAgICBhZGRfbWVzc2FnZSAiQmF6IiBk
bwotICAgICAgb3B0aW9uYWwgOm1zZywgOnN0cmluZywgMQotICAgIGVuZAotCi0gICAgYWRkX21l
c3NhZ2UgIlRlc3RNZXNzYWdlIiBkbwotICAgICAgb3B0aW9uYWwgOm9wdGlvbmFsX2ludDMyLCAg
OmludDMyLCAgICAgICAgMQotICAgICAgb3B0aW9uYWwgOm9wdGlvbmFsX2ludDY0LCAgOmludDY0
LCAgICAgICAgMgotICAgICAgb3B0aW9uYWwgOm9wdGlvbmFsX3VpbnQzMiwgOnVpbnQzMiwgICAg
ICAgMwotICAgICAgb3B0aW9uYWwgOm9wdGlvbmFsX3VpbnQ2NCwgOnVpbnQ2NCwgICAgICAgNAot
ICAgICAgb3B0aW9uYWwgOm9wdGlvbmFsX2Jvb2wsICAgOmJvb2wsICAgICAgICAgNQotICAgICAg
b3B0aW9uYWwgOm9wdGlvbmFsX2Zsb2F0LCAgOmZsb2F0LCAgICAgICAgNgotICAgICAgb3B0aW9u
YWwgOm9wdGlvbmFsX2RvdWJsZSwgOmRvdWJsZSwgICAgICAgNwotICAgICAgb3B0aW9uYWwgOm9w
dGlvbmFsX3N0cmluZywgOnN0cmluZywgICAgICAgOAotICAgICAgb3B0aW9uYWwgOm9wdGlvbmFs
X2J5dGVzLCAgOmJ5dGVzLCAgICAgICAgOQotICAgICAgb3B0aW9uYWwgOm9wdGlvbmFsX21zZywg
ICAgOm1lc3NhZ2UsICAgICAgMTAsICJUZXN0TWVzc2FnZTIiCi0gICAgICBvcHRpb25hbCA6b3B0
aW9uYWxfZW51bSwgICA6ZW51bSwgICAgICAgICAxMSwgIlRlc3RFbnVtIgotCi0gICAgICByZXBl
YXRlZCA6cmVwZWF0ZWRfaW50MzIsICA6aW50MzIsICAgICAgICAxMgotICAgICAgcmVwZWF0ZWQg
OnJlcGVhdGVkX2ludDY0LCAgOmludDY0LCAgICAgICAgMTMKLSAgICAgIHJlcGVhdGVkIDpyZXBl
YXRlZF91aW50MzIsIDp1aW50MzIsICAgICAgIDE0Ci0gICAgICByZXBlYXRlZCA6cmVwZWF0ZWRf
dWludDY0LCA6dWludDY0LCAgICAgICAxNQotICAgICAgcmVwZWF0ZWQgOnJlcGVhdGVkX2Jvb2ws
ICAgOmJvb2wsICAgICAgICAgMTYKLSAgICAgIHJlcGVhdGVkIDpyZXBlYXRlZF9mbG9hdCwgIDpm
bG9hdCwgICAgICAgIDE3Ci0gICAgICByZXBlYXRlZCA6cmVwZWF0ZWRfZG91YmxlLCA6ZG91Ymxl
LCAgICAgICAxOAotICAgICAgcmVwZWF0ZWQgOnJlcGVhdGVkX3N0cmluZywgOnN0cmluZywgICAg
ICAgMTkKLSAgICAgIHJlcGVhdGVkIDpyZXBlYXRlZF9ieXRlcywgIDpieXRlcywgICAgICAgIDIw
Ci0gICAgICByZXBlYXRlZCA6cmVwZWF0ZWRfbXNnLCAgICA6bWVzc2FnZSwgICAgICAyMSwgIlRl
c3RNZXNzYWdlMiIKLSAgICAgIHJlcGVhdGVkIDpyZXBlYXRlZF9lbnVtLCAgIDplbnVtLCAgICAg
ICAgIDIyLCAiVGVzdEVudW0iCi0gICAgZW5kCi0gICAgYWRkX21lc3NhZ2UgIlRlc3RNZXNzYWdl
MiIgZG8KLSAgICAgIG9wdGlvbmFsIDpmb28sIDppbnQzMiwgMQotICAgIGVuZAotCi0gICAgYWRk
X21lc3NhZ2UgIlJlY3Vyc2l2ZTEiIGRvCi0gICAgICBvcHRpb25hbCA6Zm9vLCA6bWVzc2FnZSwg
MSwgIlJlY3Vyc2l2ZTIiCi0gICAgZW5kCi0gICAgYWRkX21lc3NhZ2UgIlJlY3Vyc2l2ZTIiIGRv
Ci0gICAgICBvcHRpb25hbCA6Zm9vLCA6bWVzc2FnZSwgMSwgIlJlY3Vyc2l2ZTEiCi0gICAgZW5k
Ci0KLSAgICBhZGRfZW51bSAiVGVzdEVudW0iIGRvCi0gICAgICB2YWx1ZSA6RGVmYXVsdCwgMAot
ICAgICAgdmFsdWUgOkEsIDEKLSAgICAgIHZhbHVlIDpCLCAyCi0gICAgICB2YWx1ZSA6QywgMwot
ICAgIGVuZAotCi0gICAgYWRkX21lc3NhZ2UgIkJhZEZpZWxkTmFtZXMiIGRvCi0gICAgICBvcHRp
b25hbCA6ZHVwLCA6aW50MzIsIDEKLSAgICAgIG9wdGlvbmFsIDpjbGFzcywgOmludDMyLCAyCi0g
ICAgICBvcHRpb25hbCA6ImEuYiIsIDppbnQzMiwgMwotICAgIGVuZAotCi0gICAgYWRkX21lc3Nh
Z2UgIk1hcE1lc3NhZ2UiIGRvCi0gICAgICBtYXAgOm1hcF9zdHJpbmdfaW50MzIsIDpzdHJpbmcs
IDppbnQzMiwgMQotICAgICAgbWFwIDptYXBfc3RyaW5nX21zZywgOnN0cmluZywgOm1lc3NhZ2Us
IDIsICJUZXN0TWVzc2FnZTIiCi0gICAgZW5kCi0gICAgYWRkX21lc3NhZ2UgIk1hcE1lc3NhZ2VX
aXJlRXF1aXYiIGRvCi0gICAgICByZXBlYXRlZCA6bWFwX3N0cmluZ19pbnQzMiwgOm1lc3NhZ2Us
IDEsICJNYXBNZXNzYWdlV2lyZUVxdWl2X2VudHJ5MSIKLSAgICAgIHJlcGVhdGVkIDptYXBfc3Ry
aW5nX21zZywgOm1lc3NhZ2UsIDIsICJNYXBNZXNzYWdlV2lyZUVxdWl2X2VudHJ5MiIKLSAgICBl
bmQKLSAgICBhZGRfbWVzc2FnZSAiTWFwTWVzc2FnZVdpcmVFcXVpdl9lbnRyeTEiIGRvCi0gICAg
ICBvcHRpb25hbCA6a2V5LCA6c3RyaW5nLCAxCi0gICAgICBvcHRpb25hbCA6dmFsdWUsIDppbnQz
MiwgMgotICAgIGVuZAotICAgIGFkZF9tZXNzYWdlICJNYXBNZXNzYWdlV2lyZUVxdWl2X2VudHJ5
MiIgZG8KLSAgICAgIG9wdGlvbmFsIDprZXksIDpzdHJpbmcsIDEKLSAgICAgIG9wdGlvbmFsIDp2
YWx1ZSwgOm1lc3NhZ2UsIDIsICJUZXN0TWVzc2FnZTIiCi0gICAgZW5kCi0KLSAgICBhZGRfbWVz
c2FnZSAiT25lb2ZNZXNzYWdlIiBkbwotICAgICAgb25lb2YgOm15X29uZW9mIGRvCi0gICAgICAg
IG9wdGlvbmFsIDphLCA6c3RyaW5nLCAxCi0gICAgICAgIG9wdGlvbmFsIDpiLCA6aW50MzIsIDIK
LSAgICAgICAgb3B0aW9uYWwgOmMsIDptZXNzYWdlLCAzLCAiVGVzdE1lc3NhZ2UyIgotICAgICAg
ICBvcHRpb25hbCA6ZCwgOmVudW0sIDQsICJUZXN0RW51bSIKLSAgICAgIGVuZAotICAgIGVuZAot
ICBlbmQKLQotICBGb28gPSBwb29sLmxvb2t1cCgiRm9vIikubXNnY2xhc3MKLSAgQmFyID0gcG9v
bC5sb29rdXAoIkJhciIpLm1zZ2NsYXNzCi0gIEJheiA9IHBvb2wubG9va3VwKCJCYXoiKS5tc2dj
bGFzcwotICBUZXN0TWVzc2FnZSA9IHBvb2wubG9va3VwKCJUZXN0TWVzc2FnZSIpLm1zZ2NsYXNz
Ci0gIFRlc3RNZXNzYWdlMiA9IHBvb2wubG9va3VwKCJUZXN0TWVzc2FnZTIiKS5tc2djbGFzcwot
ICBSZWN1cnNpdmUxID0gcG9vbC5sb29rdXAoIlJlY3Vyc2l2ZTEiKS5tc2djbGFzcwotICBSZWN1
cnNpdmUyID0gcG9vbC5sb29rdXAoIlJlY3Vyc2l2ZTIiKS5tc2djbGFzcwotICBUZXN0RW51bSA9
IHBvb2wubG9va3VwKCJUZXN0RW51bSIpLmVudW1tb2R1bGUKLSAgQmFkRmllbGROYW1lcyA9IHBv
b2wubG9va3VwKCJCYWRGaWVsZE5hbWVzIikubXNnY2xhc3MKLSAgTWFwTWVzc2FnZSA9IHBvb2wu
bG9va3VwKCJNYXBNZXNzYWdlIikubXNnY2xhc3MKLSAgTWFwTWVzc2FnZVdpcmVFcXVpdiA9IHBv
b2wubG9va3VwKCJNYXBNZXNzYWdlV2lyZUVxdWl2IikubXNnY2xhc3MKLSAgTWFwTWVzc2FnZVdp
cmVFcXVpdl9lbnRyeTEgPQotICAgIHBvb2wubG9va3VwKCJNYXBNZXNzYWdlV2lyZUVxdWl2X2Vu
dHJ5MSIpLm1zZ2NsYXNzCi0gIE1hcE1lc3NhZ2VXaXJlRXF1aXZfZW50cnkyID0KLSAgICBwb29s
Lmxvb2t1cCgiTWFwTWVzc2FnZVdpcmVFcXVpdl9lbnRyeTIiKS5tc2djbGFzcwotICBPbmVvZk1l
c3NhZ2UgPSBwb29sLmxvb2t1cCgiT25lb2ZNZXNzYWdlIikubXNnY2xhc3MKLQotIyAtLS0tLS0t
LS0tLS0gdGVzdCBjYXNlcyAtLS0tLS0tLS0tLS0tLS0KLQotICBjbGFzcyBNZXNzYWdlQ29udGFp
bmVyVGVzdCA8IFRlc3Q6OlVuaXQ6OlRlc3RDYXNlCi0KLSAgICBkZWYgdGVzdF9kZWZhdWx0cwot
ICAgICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotICAgICAgYXNzZXJ0IG0ub3B0aW9uYWxfaW50MzIg
PT0gMAotICAgICAgYXNzZXJ0IG0ub3B0aW9uYWxfaW50NjQgPT0gMAotICAgICAgYXNzZXJ0IG0u
b3B0aW9uYWxfdWludDMyID09IDAKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX3VpbnQ2NCA9PSAw
Ci0gICAgICBhc3NlcnQgbS5vcHRpb25hbF9ib29sID09IGZhbHNlCi0gICAgICBhc3NlcnQgbS5v
cHRpb25hbF9mbG9hdCA9PSAwLjAKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX2RvdWJsZSA9PSAw
LjAKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX3N0cmluZyA9PSAiIgotICAgICAgYXNzZXJ0IG0u
b3B0aW9uYWxfYnl0ZXMgPT0gIiIKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX21zZyA9PSBuaWwK
LSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX2VudW0gPT0gOkRlZmF1bHQKLSAgICBlbmQKLQotICAg
IGRlZiB0ZXN0X3NldHRlcnMKLSAgICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICAgIG0ub3B0
aW9uYWxfaW50MzIgPSAtNDIKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX2ludDMyID09IC00Mgot
ICAgICAgbS5vcHRpb25hbF9pbnQ2NCA9IC0weDFfMDAwMF8wMDAwCi0gICAgICBhc3NlcnQgbS5v
cHRpb25hbF9pbnQ2NCA9PSAtMHgxXzAwMDBfMDAwMAotICAgICAgbS5vcHRpb25hbF91aW50MzIg
PSAweDkwMDBfMDAwMAotICAgICAgYXNzZXJ0IG0ub3B0aW9uYWxfdWludDMyID09IDB4OTAwMF8w
MDAwCi0gICAgICBtLm9wdGlvbmFsX3VpbnQ2NCA9IDB4OTAwMF8wMDAwXzAwMDBfMDAwMAotICAg
ICAgYXNzZXJ0IG0ub3B0aW9uYWxfdWludDY0ID09IDB4OTAwMF8wMDAwXzAwMDBfMDAwMAotICAg
ICAgbS5vcHRpb25hbF9ib29sID0gdHJ1ZQotICAgICAgYXNzZXJ0IG0ub3B0aW9uYWxfYm9vbCA9
PSB0cnVlCi0gICAgICBtLm9wdGlvbmFsX2Zsb2F0ID0gMC41Ci0gICAgICBhc3NlcnQgbS5vcHRp
b25hbF9mbG9hdCA9PSAwLjUKLSAgICAgIG0ub3B0aW9uYWxfZG91YmxlID0gMC41Ci0gICAgICBt
Lm9wdGlvbmFsX3N0cmluZyA9ICJoZWxsbyIKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX3N0cmlu
ZyA9PSAiaGVsbG8iCi0gICAgICBtLm9wdGlvbmFsX2J5dGVzID0gIndvcmxkIi5lbmNvZGUhKCdB
U0NJSS04QklUJykKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX2J5dGVzID09ICJ3b3JsZCIKLSAg
ICAgIG0ub3B0aW9uYWxfbXNnID0gVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDQyKQotICAgICAg
YXNzZXJ0IG0ub3B0aW9uYWxfbXNnID09IFRlc3RNZXNzYWdlMi5uZXcoOmZvbyA9PiA0MikKLSAg
ICAgIG0ub3B0aW9uYWxfbXNnID0gbmlsCi0gICAgICBhc3NlcnQgbS5vcHRpb25hbF9tc2cgPT0g
bmlsCi0gICAgZW5kCi0KLSAgICBkZWYgdGVzdF9jdG9yX2FyZ3MKLSAgICAgIG0gPSBUZXN0TWVz
c2FnZS5uZXcoOm9wdGlvbmFsX2ludDMyID0+IC00MiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgOm9wdGlvbmFsX21zZyA9PiBUZXN0TWVzc2FnZTIubmV3LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICA6b3B0aW9uYWxfZW51bSA9PiA6QywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
OnJlcGVhdGVkX3N0cmluZyA9PiBbImhlbGxvIiwgInRoZXJlIiwgIndvcmxkIl0pCi0gICAgICBh
c3NlcnQgbS5vcHRpb25hbF9pbnQzMiA9PSAtNDIKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX21z
Zy5jbGFzcyA9PSBUZXN0TWVzc2FnZTIKLSAgICAgIGFzc2VydCBtLnJlcGVhdGVkX3N0cmluZy5s
ZW5ndGggPT0gMwotICAgICAgYXNzZXJ0IG0ub3B0aW9uYWxfZW51bSA9PSA6QwotICAgICAgYXNz
ZXJ0IG0ucmVwZWF0ZWRfc3RyaW5nWzBdID09ICJoZWxsbyIKLSAgICAgIGFzc2VydCBtLnJlcGVh
dGVkX3N0cmluZ1sxXSA9PSAidGhlcmUiCi0gICAgICBhc3NlcnQgbS5yZXBlYXRlZF9zdHJpbmdb
Ml0gPT0gIndvcmxkIgotICAgIGVuZAotCi0gICAgZGVmIHRlc3RfaW5zcGVjdAotICAgICAgbSA9
IFRlc3RNZXNzYWdlLm5ldyg6b3B0aW9uYWxfaW50MzIgPT4gLTQyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICA6b3B0aW9uYWxfZW51bSA9PiA6QSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgOm9wdGlvbmFsX21zZyA9PiBUZXN0TWVzc2FnZTIubmV3LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICA6cmVwZWF0ZWRfc3RyaW5nID0+IFsiaGVsbG8iLCAidGhlcmUiLCAid29ybGQiXSkK
LSAgICAgIGV4cGVjdGVkID0gJzxCYXNpY1Rlc3Q6OlRlc3RNZXNzYWdlOiBvcHRpb25hbF9pbnQz
MjogLTQyLCBvcHRpb25hbF9pbnQ2NDogMCwgb3B0aW9uYWxfdWludDMyOiAwLCBvcHRpb25hbF91
aW50NjQ6IDAsIG9wdGlvbmFsX2Jvb2w6IGZhbHNlLCBvcHRpb25hbF9mbG9hdDogMC4wLCBvcHRp
b25hbF9kb3VibGU6IDAuMCwgb3B0aW9uYWxfc3RyaW5nOiAiIiwgb3B0aW9uYWxfYnl0ZXM6ICIi
LCBvcHRpb25hbF9tc2c6IDxCYXNpY1Rlc3Q6OlRlc3RNZXNzYWdlMjogZm9vOiAwPiwgb3B0aW9u
YWxfZW51bTogOkEsIHJlcGVhdGVkX2ludDMyOiBbXSwgcmVwZWF0ZWRfaW50NjQ6IFtdLCByZXBl
YXRlZF91aW50MzI6IFtdLCByZXBlYXRlZF91aW50NjQ6IFtdLCByZXBlYXRlZF9ib29sOiBbXSwg
cmVwZWF0ZWRfZmxvYXQ6IFtdLCByZXBlYXRlZF9kb3VibGU6IFtdLCByZXBlYXRlZF9zdHJpbmc6
IFsiaGVsbG8iLCAidGhlcmUiLCAid29ybGQiXSwgcmVwZWF0ZWRfYnl0ZXM6IFtdLCByZXBlYXRl
ZF9tc2c6IFtdLCByZXBlYXRlZF9lbnVtOiBbXT4nCi0gICAgICBhc3NlcnRfZXF1YWwgZXhwZWN0
ZWQsIG0uaW5zcGVjdAotICAgIGVuZAotCi0gICAgZGVmIHRlc3RfaGFzaAotICAgICAgbTEgPSBU
ZXN0TWVzc2FnZS5uZXcoOm9wdGlvbmFsX2ludDMyID0+IDQyKQotICAgICAgbTIgPSBUZXN0TWVz
c2FnZS5uZXcoOm9wdGlvbmFsX2ludDMyID0+IDEwMikKLSAgICAgIGFzc2VydCBtMS5oYXNoICE9
IDAKLSAgICAgIGFzc2VydCBtMi5oYXNoICE9IDAKLSAgICAgICMgcmVseWluZyBvbiB0aGUgcmFu
ZG9tbmVzcyBoZXJlIC0tIGlmIGhhc2ggZnVuY3Rpb24gY2hhbmdlcyBhbmQgd2UgYXJlCi0gICAg
ICAjIHVubHVja3kgZW5vdWdoIHRvIGdldCBhIGNvbGxpc2lvbiwgdGhlbiBjaGFuZ2UgdGhlIHZh
bHVlcyBhYm92ZS4KLSAgICAgIGFzc2VydCBtMS5oYXNoICE9IG0yLmhhc2gKLSAgICBlbmQKLQot
ICAgIGRlZiB0ZXN0X3Vua25vd25fZmllbGRfZXJyb3JzCi0gICAgICBlID0gYXNzZXJ0X3JhaXNl
IE5vTWV0aG9kRXJyb3IgZG8KLSAgICAgICAgVGVzdE1lc3NhZ2UubmV3LmhlbGxvCi0gICAgICBl
bmQKLSAgICAgIGFzc2VydF9tYXRjaCgvaGVsbG8vLCBlLm1lc3NhZ2UpCi0KLSAgICAgIGUgPSBh
c3NlcnRfcmFpc2UgTm9NZXRob2RFcnJvciBkbwotICAgICAgICBUZXN0TWVzc2FnZS5uZXcuaGVs
bG8gPSAid29ybGQiCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9tYXRjaCgvaGVsbG8vLCBlLm1l
c3NhZ2UpCi0gICAgZW5kCi0KLSAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbl9tYXBfZXJyb3Jz
Ci0gICAgICBlID0gYXNzZXJ0X3JhaXNlIEFyZ3VtZW50RXJyb3IgZG8KLSAgICAgICAgVGVzdE1l
c3NhZ2UubmV3KDpoZWxsbyA9PiAid29ybGQiKQotICAgICAgZW5kCi0gICAgICBhc3NlcnRfbWF0
Y2goL2hlbGxvLywgZS5tZXNzYWdlKQotCi0gICAgICBlID0gYXNzZXJ0X3JhaXNlIEFyZ3VtZW50
RXJyb3IgZG8KLSAgICAgICAgTWFwTWVzc2FnZS5uZXcoOm1hcF9zdHJpbmdfaW50MzIgPT4gImhl
bGxvIikKLSAgICAgIGVuZAotICAgICAgYXNzZXJ0X2VxdWFsIGUubWVzc2FnZSwgIkV4cGVjdGVk
IEhhc2ggb2JqZWN0IGFzIGluaXRpYWxpemVyIHZhbHVlIGZvciBtYXAgZmllbGQgJ21hcF9zdHJp
bmdfaW50MzInLiIKLQotICAgICAgZSA9IGFzc2VydF9yYWlzZSBBcmd1bWVudEVycm9yIGRvCi0g
ICAgICAgIFRlc3RNZXNzYWdlLm5ldyg6cmVwZWF0ZWRfdWludDMyID0+ICJoZWxsbyIpCi0gICAg
ICBlbmQKLSAgICAgIGFzc2VydF9lcXVhbCBlLm1lc3NhZ2UsICJFeHBlY3RlZCBhcnJheSBhcyBp
bml0aWFsaXplciB2YWx1ZSBmb3IgcmVwZWF0ZWQgZmllbGQgJ3JlcGVhdGVkX3VpbnQzMicuIgot
ICAgIGVuZAotCi0gICAgZGVmIHRlc3RfdHlwZV9lcnJvcnMKLSAgICAgIG0gPSBUZXN0TWVzc2Fn
ZS5uZXcKLSAgICAgIGFzc2VydF9yYWlzZSBUeXBlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25h
bF9pbnQzMiA9ICJoZWxsbyIKLSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFR5cGVFcnJv
ciBkbwotICAgICAgICBtLm9wdGlvbmFsX3N0cmluZyA9IDQyCi0gICAgICBlbmQKLSAgICAgIGFz
c2VydF9yYWlzZSBUeXBlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25hbF9zdHJpbmcgPSBuaWwK
LSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFR5cGVFcnJvciBkbwotICAgICAgICBtLm9w
dGlvbmFsX2Jvb2wgPSA0MgotICAgICAgZW5kCi0gICAgICBhc3NlcnRfcmFpc2UgVHlwZUVycm9y
IGRvCi0gICAgICAgIG0ub3B0aW9uYWxfbXNnID0gVGVzdE1lc3NhZ2UubmV3ICAjIGV4cGVjdHMg
VGVzdE1lc3NhZ2UyCi0gICAgICBlbmQKLQotICAgICAgYXNzZXJ0X3JhaXNlIFR5cGVFcnJvciBk
bwotICAgICAgICBtLnJlcGVhdGVkX2ludDMyID0gW10gICMgbmVlZHMgUmVwZWF0ZWRGaWVsZAot
ICAgICAgZW5kCi0KLSAgICAgIGFzc2VydF9yYWlzZSBUeXBlRXJyb3IgZG8KLSAgICAgICAgbS5y
ZXBlYXRlZF9pbnQzMi5wdXNoICJoZWxsbyIKLSAgICAgIGVuZAotCi0gICAgICBhc3NlcnRfcmFp
c2UgVHlwZUVycm9yIGRvCi0gICAgICAgIG0ucmVwZWF0ZWRfbXNnLnB1c2ggVGVzdE1lc3NhZ2Uu
bmV3Ci0gICAgICBlbmQKLSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X3N0cmluZ19lbmNvZGluZwot
ICAgICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotCi0gICAgICAjIEFzc2lnbmluZyBhIG5vcm1hbCAo
QVNDSUkgb3IgVVRGOCkgc3RyaW5nIHRvIGEgYnl0ZXMgZmllbGQsIG9yCi0gICAgICAjIEFTQ0lJ
LThCSVQgdG8gYSBzdHJpbmcgZmllbGQsIHJhaXNlcyBhbiBlcnJvci4KLSAgICAgIGFzc2VydF9y
YWlzZSBUeXBlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25hbF9ieXRlcyA9ICJUZXN0IHN0cmlu
ZyBBU0NJSSIuZW5jb2RlISgnQVNDSUknKQotICAgICAgZW5kCi0gICAgICBhc3NlcnRfcmFpc2Ug
VHlwZUVycm9yIGRvCi0gICAgICAgIG0ub3B0aW9uYWxfYnl0ZXMgPSAiVGVzdCBzdHJpbmcgVVRG
LTggXHUwMTAwIi5lbmNvZGUhKCdVVEYtOCcpCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9yYWlz
ZSBUeXBlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25hbF9zdHJpbmcgPSBbIkZGRkYiXS5wYWNr
KCdIKicpCi0gICAgICBlbmQKLQotICAgICAgIyAiT3JkaW5hcnkiIHVzZSBjYXNlLgotICAgICAg
bS5vcHRpb25hbF9ieXRlcyA9IFsiRkZGRiJdLnBhY2soJ0gqJykKLSAgICAgIG0ub3B0aW9uYWxf
c3RyaW5nID0gIlx1MDEwMCIKLQotICAgICAgIyBzdHJpbmdzIGFyZSBtdXRhYmxlIHNvIHdlIGNh
biBkbyB0aGlzLCBidXQgc2VyaWFsaXplIHNob3VsZCBjYXRjaCBpdC4KLSAgICAgIG0ub3B0aW9u
YWxfc3RyaW5nID0gImFzZGYiLmVuY29kZSEoJ1VURi04JykKLSAgICAgIG0ub3B0aW9uYWxfc3Ry
aW5nLmVuY29kZSEoJ0FTQ0lJLThCSVQnKQotICAgICAgYXNzZXJ0X3JhaXNlIFR5cGVFcnJvciBk
bwotICAgICAgICBkYXRhID0gVGVzdE1lc3NhZ2UuZW5jb2RlKG0pCi0gICAgICBlbmQKLSAgICBl
bmQKLQotICAgIGRlZiB0ZXN0X3JwdGZpZWxkX2ludDMyCi0gICAgICBsID0gR29vZ2xlOjpQcm90
b2J1Zjo6UmVwZWF0ZWRGaWVsZC5uZXcoOmludDMyKQotICAgICAgYXNzZXJ0IGwuY291bnQgPT0g
MAotICAgICAgbCA9IEdvb2dsZTo6UHJvdG9idWY6OlJlcGVhdGVkRmllbGQubmV3KDppbnQzMiwg
WzEsIDIsIDNdKQotICAgICAgYXNzZXJ0IGwuY291bnQgPT0gMwotICAgICAgYXNzZXJ0X2VxdWFs
IFsxLCAyLCAzXSwgbAotICAgICAgYXNzZXJ0X2VxdWFsIGwsIFsxLCAyLCAzXQotICAgICAgbC5w
dXNoIDQKLSAgICAgIGFzc2VydCBsID09IFsxLCAyLCAzLCA0XQotICAgICAgZHN0X2xpc3QgPSBb
XQotICAgICAgbC5lYWNoIHsgfHZhbHwgZHN0X2xpc3QucHVzaCB2YWwgfQotICAgICAgYXNzZXJ0
IGRzdF9saXN0ID09IFsxLCAyLCAzLCA0XQotICAgICAgYXNzZXJ0IGwudG9fYSA9PSBbMSwgMiwg
MywgNF0KLSAgICAgIGFzc2VydCBsWzBdID09IDEKLSAgICAgIGFzc2VydCBsWzNdID09IDQKLSAg
ICAgIGxbMF0gPSA1Ci0gICAgICBhc3NlcnQgbCA9PSBbNSwgMiwgMywgNF0KLQotICAgICAgbDIg
PSBsLmR1cAotICAgICAgYXNzZXJ0IGwgPT0gbDIKLSAgICAgIGFzc2VydCBsLm9iamVjdF9pZCAh
PSBsMi5vYmplY3RfaWQKLSAgICAgIGwyLnB1c2ggNgotICAgICAgYXNzZXJ0IGwuY291bnQgPT0g
NAotICAgICAgYXNzZXJ0IGwyLmNvdW50ID09IDUKLQotICAgICAgYXNzZXJ0IGwuaW5zcGVjdCA9
PSAnWzUsIDIsIDMsIDRdJwotCi0gICAgICBsLmNvbmNhdChbNywgOCwgOV0pCi0gICAgICBhc3Nl
cnQgbCA9PSBbNSwgMiwgMywgNCwgNywgOCwgOV0KLSAgICAgIGFzc2VydCBsLnBvcCA9PSA5Ci0g
ICAgICBhc3NlcnQgbCA9PSBbNSwgMiwgMywgNCwgNywgOF0KLQotICAgICAgYXNzZXJ0X3JhaXNl
IFR5cGVFcnJvciBkbwotICAgICAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgICAgIGwucHVz
aCBtCi0gICAgICBlbmQKLQotICAgICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotICAgICAgbS5yZXBl
YXRlZF9pbnQzMiA9IGwKLSAgICAgIGFzc2VydCBtLnJlcGVhdGVkX2ludDMyID09IFs1LCAyLCAz
LCA0LCA3LCA4XQotICAgICAgYXNzZXJ0IG0ucmVwZWF0ZWRfaW50MzIub2JqZWN0X2lkID09IGwu
b2JqZWN0X2lkCi0gICAgICBsLnB1c2ggNDIKLSAgICAgIGFzc2VydCBtLnJlcGVhdGVkX2ludDMy
LnBvcCA9PSA0MgotCi0gICAgICBsMyA9IGwgKyBsLmR1cAotICAgICAgYXNzZXJ0IGwzLmNvdW50
ID09IGwuY291bnQgKiAyCi0gICAgICBsLmNvdW50LnRpbWVzIGRvIHxpfAotICAgICAgICBhc3Nl
cnQgbDNbaV0gPT0gbFtpXQotICAgICAgICBhc3NlcnQgbDNbbC5jb3VudCArIGldID09IGxbaV0K
LSAgICAgIGVuZAotCi0gICAgICBsLmNsZWFyCi0gICAgICBhc3NlcnQgbC5jb3VudCA9PSAwCi0g
ICAgICBsICs9IFsxLCAyLCAzLCA0XQotICAgICAgbC5yZXBsYWNlKFs1LCA2LCA3LCA4XSkKLSAg
ICAgIGFzc2VydCBsID09IFs1LCA2LCA3LCA4XQotCi0gICAgICBsNCA9IEdvb2dsZTo6UHJvdG9i
dWY6OlJlcGVhdGVkRmllbGQubmV3KDppbnQzMikKLSAgICAgIGw0WzVdID0gNDIKLSAgICAgIGFz
c2VydCBsNCA9PSBbMCwgMCwgMCwgMCwgMCwgNDJdCi0KLSAgICAgIGw0IDw8IDEwMAotICAgICAg
YXNzZXJ0IGw0ID09IFswLCAwLCAwLCAwLCAwLCA0MiwgMTAwXQotICAgICAgbDQgPDwgMTAxIDw8
IDEwMgotICAgICAgYXNzZXJ0IGw0ID09IFswLCAwLCAwLCAwLCAwLCA0MiwgMTAwLCAxMDEsIDEw
Ml0KLSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X3BhcmVudF9ycHRmaWVsZAotICAgICAgI21ha2Ug
c3VyZSB3ZSBzZXQgdGhlIFJlcGVhdGVkRmllbGQgYW5kIGNhbiBhZGQgdG8gaXQKLSAgICAgIG0g
PSBUZXN0TWVzc2FnZS5uZXcKLSAgICAgIGFzc2VydCBtLnJlcGVhdGVkX3N0cmluZyA9PSBbXQot
ICAgICAgbS5yZXBlYXRlZF9zdHJpbmcgPDwgJ29rJwotICAgICAgbS5yZXBlYXRlZF9zdHJpbmcu
cHVzaCgnb2syJykKLSAgICAgIGFzc2VydCBtLnJlcGVhdGVkX3N0cmluZyA9PSBbJ29rJywgJ29r
MiddCi0gICAgICBtLnJlcGVhdGVkX3N0cmluZyArPSBbJ29rMyddCi0gICAgICBhc3NlcnQgbS5y
ZXBlYXRlZF9zdHJpbmcgPT0gWydvaycsICdvazInLCAnb2szJ10KLSAgICBlbmQKLQotICAgIGRl
ZiB0ZXN0X3JwdGZpZWxkX21zZwotICAgICAgbCA9IEdvb2dsZTo6UHJvdG9idWY6OlJlcGVhdGVk
RmllbGQubmV3KDptZXNzYWdlLCBUZXN0TWVzc2FnZSkKLSAgICAgIGwucHVzaCBUZXN0TWVzc2Fn
ZS5uZXcKLSAgICAgIGFzc2VydCBsLmNvdW50ID09IDEKLSAgICAgIGFzc2VydF9yYWlzZSBUeXBl
RXJyb3IgZG8KLSAgICAgICAgbC5wdXNoIFRlc3RNZXNzYWdlMi5uZXcKLSAgICAgIGVuZAotICAg
ICAgYXNzZXJ0X3JhaXNlIFR5cGVFcnJvciBkbwotICAgICAgICBsLnB1c2ggNDIKLSAgICAgIGVu
ZAotCi0gICAgICBsMiA9IGwuZHVwCi0gICAgICBhc3NlcnQgbDJbMF0gPT0gbFswXQotICAgICAg
YXNzZXJ0IGwyWzBdLm9iamVjdF9pZCA9PSBsWzBdLm9iamVjdF9pZAotCi0gICAgICBsMiA9IEdv
b2dsZTo6UHJvdG9idWYuZGVlcF9jb3B5KGwpCi0gICAgICBhc3NlcnQgbDJbMF0gPT0gbFswXQot
ICAgICAgYXNzZXJ0IGwyWzBdLm9iamVjdF9pZCAhPSBsWzBdLm9iamVjdF9pZAotCi0gICAgICBs
MyA9IGwgKyBsMgotICAgICAgYXNzZXJ0IGwzLmNvdW50ID09IDIKLSAgICAgIGFzc2VydCBsM1sw
XSA9PSBsWzBdCi0gICAgICBhc3NlcnQgbDNbMV0gPT0gbDJbMF0KLSAgICAgIGwzWzBdLm9wdGlv
bmFsX2ludDMyID0gMTAwMAotICAgICAgYXNzZXJ0IGxbMF0ub3B0aW9uYWxfaW50MzIgPT0gMTAw
MAotCi0gICAgICBuZXdfbXNnID0gVGVzdE1lc3NhZ2UubmV3KDpvcHRpb25hbF9pbnQzMiA9PiAy
MDApCi0gICAgICBsNCA9IGwgKyBbbmV3X21zZ10KLSAgICAgIGFzc2VydCBsNC5jb3VudCA9PSAy
Ci0gICAgICBuZXdfbXNnLm9wdGlvbmFsX2ludDMyID0gMTAwMAotICAgICAgYXNzZXJ0IGw0WzFd
Lm9wdGlvbmFsX2ludDMyID09IDEwMDAKLSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X3JwdGZpZWxk
X2VudW0KLSAgICAgIGwgPSBHb29nbGU6OlByb3RvYnVmOjpSZXBlYXRlZEZpZWxkLm5ldyg6ZW51
bSwgVGVzdEVudW0pCi0gICAgICBsLnB1c2ggOkEKLSAgICAgIGwucHVzaCA6QgotICAgICAgbC5w
dXNoIDpDCi0gICAgICBhc3NlcnQgbC5jb3VudCA9PSAzCi0gICAgICBhc3NlcnRfcmFpc2UgUmFu
Z2VFcnJvciBkbwotICAgICAgICBsLnB1c2ggOkQKLSAgICAgIGVuZAotICAgICAgYXNzZXJ0IGxb
MF0gPT0gOkEKLQotICAgICAgbC5wdXNoIDQKLSAgICAgIGFzc2VydCBsWzNdID09IDQKLSAgICBl
bmQKLQotICAgIGRlZiB0ZXN0X3JwdGZpZWxkX2luaXRpYWxpemUKLSAgICAgIGFzc2VydF9yYWlz
ZSBBcmd1bWVudEVycm9yIGRvCi0gICAgICAgIGwgPSBHb29nbGU6OlByb3RvYnVmOjpSZXBlYXRl
ZEZpZWxkLm5ldwotICAgICAgZW5kCi0gICAgICBhc3NlcnRfcmFpc2UgQXJndW1lbnRFcnJvciBk
bwotICAgICAgICBsID0gR29vZ2xlOjpQcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZC5uZXcoOm1lc3Nh
Z2UpCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBBcmd1bWVudEVycm9yIGRvCi0gICAg
ICAgIGwgPSBHb29nbGU6OlByb3RvYnVmOjpSZXBlYXRlZEZpZWxkLm5ldyhbMSwgMiwgM10pCi0g
ICAgICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBBcmd1bWVudEVycm9yIGRvCi0gICAgICAgIGwg
PSBHb29nbGU6OlByb3RvYnVmOjpSZXBlYXRlZEZpZWxkLm5ldyg6bWVzc2FnZSwgW1Rlc3RNZXNz
YWdlMi5uZXddKQotICAgICAgZW5kCi0gICAgZW5kCi0KLSAgICBkZWYgdGVzdF9ycHRmaWVsZF9h
cnJheV9kdWNrdHlwaW5nCi0gICAgICBsID0gR29vZ2xlOjpQcm90b2J1Zjo6UmVwZWF0ZWRGaWVs
ZC5uZXcoOmludDMyKQotICAgICAgbGVuZ3RoX21ldGhvZHMgPSAldyhjb3VudCBsZW5ndGggc2l6
ZSkKLSAgICAgIGxlbmd0aF9tZXRob2RzLmVhY2ggZG8gfGxtfAotICAgICAgICBhc3NlcnQgbC5z
ZW5kKGxtKSAgPT0gMAotICAgICAgZW5kCi0gICAgICAjIG91dCBvZiBib3VuZHMgcmV0dXJucyBh
IG5pbAotICAgICAgYXNzZXJ0IGxbMF0gPT0gbmlsCi0gICAgICBhc3NlcnQgbFsxXSA9PSBuaWwK
LSAgICAgIGFzc2VydCBsWy0xXSA9PSBuaWwKLSAgICAgIGwucHVzaCA0Ci0gICAgICBsZW5ndGhf
bWV0aG9kcy5lYWNoIGRvIHxsbXwKLSAgICAgICAgYXNzZXJ0IGwuc2VuZChsbSkgPT0gMQotICAg
ICAgZW5kCi0gICAgICBhc3NlcnQgbFswXSA9PSA0Ci0gICAgICBhc3NlcnQgbFsxXSA9PSBuaWwK
LSAgICAgIGFzc2VydCBsWy0xXSA9PSA0Ci0gICAgICBhc3NlcnQgbFstMl0gPT0gbmlsCi0KLSAg
ICAgIGwucHVzaCAyCi0gICAgICBsZW5ndGhfbWV0aG9kcy5lYWNoIGRvIHxsbXwKLSAgICAgICAg
YXNzZXJ0IGwuc2VuZChsbSkgPT0gMgotICAgICAgZW5kCi0gICAgICBhc3NlcnQgbFswXSA9PSA0
Ci0gICAgICBhc3NlcnQgbFsxXSA9PSAyCi0gICAgICBhc3NlcnQgbFsyXSA9PSBuaWwKLSAgICAg
IGFzc2VydCBsWy0xXSA9PSAyCi0gICAgICBhc3NlcnQgbFstMl0gPT0gNAotICAgICAgYXNzZXJ0
IGxbLTNdID09IG5pbAotCi0gICAgICAjYWRkaW5nIG91dCBvZiBzY29wZSB3aWxsIGJhY2tmaWxs
IHdpdGggZW1wdHkgb2JqZWN0cwotICAgIGVuZAotCi0gICAgZGVmIHRlc3RfbWFwX2Jhc2ljCi0g
ICAgICAjIGFsbG93ZWQga2V5IHR5cGVzOgotICAgICAgIyA6aW50MzIsIDppbnQ2NCwgOnVpbnQz
MiwgOnVpbnQ2NCwgOmJvb2wsIDpzdHJpbmcsIDpieXRlcy4KLQotICAgICAgbSA9IEdvb2dsZTo6
UHJvdG9idWY6Ok1hcC5uZXcoOnN0cmluZywgOmludDMyKQotICAgICAgbVsiYXNkZiJdID0gMQot
ICAgICAgYXNzZXJ0IG1bImFzZGYiXSA9PSAxCi0gICAgICBtWyJqa2w7Il0gPSA0MgotICAgICAg
YXNzZXJ0IG0gPT0geyAiamtsOyIgPT4gNDIsICJhc2RmIiA9PiAxIH0KLSAgICAgIGFzc2VydCBt
Lmhhc19rZXk/KCJhc2RmIikKLSAgICAgIGFzc2VydCAhbS5oYXNfa2V5PygicXdlcnR5IikKLSAg
ICAgIGFzc2VydCBtLmxlbmd0aCA9PSAyCi0KLSAgICAgIG0yID0gbS5kdXAKLSAgICAgIGFzc2Vy
dCBtID09IG0yCi0gICAgICBhc3NlcnQgbS5oYXNoICE9IDAKLSAgICAgIGFzc2VydCBtLmhhc2gg
PT0gbTIuaGFzaAotCi0gICAgICBjb2xsZWN0ZWQgPSB7fQotICAgICAgbS5lYWNoIHsgfGssdnwg
Y29sbGVjdGVkW3ZdID0gayB9Ci0gICAgICBhc3NlcnQgY29sbGVjdGVkID09IHsgNDIgPT4gImpr
bDsiLCAxID0+ICJhc2RmIiB9Ci0KLSAgICAgIGFzc2VydCBtLmRlbGV0ZSgiYXNkZiIpID09IDEK
LSAgICAgIGFzc2VydCAhbS5oYXNfa2V5PygiYXNkZiIpCi0gICAgICBhc3NlcnQgbVsiYXNkZiJd
ID09IG5pbAotICAgICAgYXNzZXJ0ICFtLmhhc19rZXk/KCJhc2RmIikKLQotICAgICAgIyBXZSBv
bmx5IGFzc2VydCBvbiBpbnNwZWN0IHZhbHVlIHdoZW4gdGhlcmUgaXMgb25lIG1hcCBlbnRyeSBi
ZWNhdXNlIHRoZQotICAgICAgIyBvcmRlciBpbiB3aGljaCBlbGVtZW50cyBhcHBlYXIgaXMgdW5z
cGVjaWZpZWQgKGRlcGVuZHMgb24gdGhlIGludGVybmFsCi0gICAgICAjIGhhc2ggZnVuY3Rpb24p
LiBXZSBkb24ndCB3YW50IGEgYnJpdHRsZSB0ZXN0LgotICAgICAgYXNzZXJ0IG0uaW5zcGVjdCA9
PSAie1wiamtsO1wiPT40Mn0iCi0KLSAgICAgIGFzc2VydCBtLmtleXMgPT0gWyJqa2w7Il0KLSAg
ICAgIGFzc2VydCBtLnZhbHVlcyA9PSBbNDJdCi0KLSAgICAgIG0uY2xlYXIKLSAgICAgIGFzc2Vy
dCBtLmxlbmd0aCA9PSAwCi0gICAgICBhc3NlcnQgbSA9PSB7fQotCi0gICAgICBhc3NlcnRfcmFp
c2UgVHlwZUVycm9yIGRvCi0gICAgICAgIG1bMV0gPSAxCi0gICAgICBlbmQKLSAgICAgIGFzc2Vy
dF9yYWlzZSBSYW5nZUVycm9yIGRvCi0gICAgICAgIG1bImFzZGYiXSA9IDB4MV8wMDAwXzAwMDAK
LSAgICAgIGVuZAotICAgIGVuZAotCi0gICAgZGVmIHRlc3RfbWFwX2N0b3IKLSAgICAgIG0gPSBH
b29nbGU6OlByb3RvYnVmOjpNYXAubmV3KDpzdHJpbmcsIDppbnQzMiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsiYSIgPT4gMSwgImIiID0+IDIsICJjIiA9PiAzfSkKLSAg
ICAgIGFzc2VydCBtID09IHsiYSIgPT4gMSwgImMiID0+IDMsICJiIiA9PiAyfQotICAgIGVuZAot
Ci0gICAgZGVmIHRlc3RfbWFwX2tleXR5cGVzCi0gICAgICBtID0gR29vZ2xlOjpQcm90b2J1Zjo6
TWFwLm5ldyg6aW50MzIsIDppbnQzMikKLSAgICAgIG1bMV0gPSA0MgotICAgICAgbVstMV0gPSA0
MgotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAgICAgICAgbVsweDgwMDBfMDAw
MF0gPSAxCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBUeXBlRXJyb3IgZG8KLSAgICAg
ICAgbVsiYXNkZiJdID0gMQotICAgICAgZW5kCi0KLSAgICAgIG0gPSBHb29nbGU6OlByb3RvYnVm
OjpNYXAubmV3KDppbnQ2NCwgOmludDMyKQotICAgICAgbVsweDEwMDBfMDAwMF8wMDAwXzAwMDBd
ID0gMQotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAgICAgICAgbVsweDFfMDAw
MF8wMDAwXzAwMDBfMDAwMF0gPSAxCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBUeXBl
RXJyb3IgZG8KLSAgICAgICAgbVsiYXNkZiJdID0gMQotICAgICAgZW5kCi0KLSAgICAgIG0gPSBH
b29nbGU6OlByb3RvYnVmOjpNYXAubmV3KDp1aW50MzIsIDppbnQzMikKLSAgICAgIG1bMHg4MDAw
XzAwMDBdID0gMQotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAgICAgICAgbVsw
eDFfMDAwMF8wMDAwXSA9IDEKLSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJy
b3IgZG8KLSAgICAgICAgbVstMV0gPSAxCi0gICAgICBlbmQKLQotICAgICAgbSA9IEdvb2dsZTo6
UHJvdG9idWY6Ok1hcC5uZXcoOnVpbnQ2NCwgOmludDMyKQotICAgICAgbVsweDgwMDBfMDAwMF8w
MDAwXzAwMDBdID0gMQotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAgICAgICAg
bVsweDFfMDAwMF8wMDAwXzAwMDBfMDAwMF0gPSAxCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9y
YWlzZSBSYW5nZUVycm9yIGRvCi0gICAgICAgIG1bLTFdID0gMQotICAgICAgZW5kCi0KLSAgICAg
IG0gPSBHb29nbGU6OlByb3RvYnVmOjpNYXAubmV3KDpib29sLCA6aW50MzIpCi0gICAgICBtW3Ry
dWVdID0gMQotICAgICAgbVtmYWxzZV0gPSAyCi0gICAgICBhc3NlcnRfcmFpc2UgVHlwZUVycm9y
IGRvCi0gICAgICAgIG1bMV0gPSAxCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBUeXBl
RXJyb3IgZG8KLSAgICAgICAgbVsiYXNkZiJdID0gMQotICAgICAgZW5kCi0KLSAgICAgIG0gPSBH
b29nbGU6OlByb3RvYnVmOjpNYXAubmV3KDpzdHJpbmcsIDppbnQzMikKLSAgICAgIG1bImFzZGYi
XSA9IDEKLSAgICAgIGFzc2VydF9yYWlzZSBUeXBlRXJyb3IgZG8KLSAgICAgICAgbVsxXSA9IDEK
LSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFR5cGVFcnJvciBkbwotICAgICAgICBieXRl
c3RyaW5nID0gWyJGRkZGIl0ucGFjaygiSCoiKQotICAgICAgICBtW2J5dGVzdHJpbmddID0gMQot
ICAgICAgZW5kCi0KLSAgICAgIG0gPSBHb29nbGU6OlByb3RvYnVmOjpNYXAubmV3KDpieXRlcywg
OmludDMyKQotICAgICAgYnl0ZXN0cmluZyA9IFsiRkZGRiJdLnBhY2soIkgqIikKLSAgICAgIG1b
Ynl0ZXN0cmluZ10gPSAxCi0gICAgICBhc3NlcnRfcmFpc2UgVHlwZUVycm9yIGRvCi0gICAgICAg
IG1bImFzZGYiXSA9IDEKLSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFR5cGVFcnJvciBk
bwotICAgICAgICBtWzFdID0gMQotICAgICAgZW5kCi0gICAgZW5kCi0KLSAgICBkZWYgdGVzdF9t
YXBfbXNnX2VudW1fdmFsdWV0eXBlcwotICAgICAgbSA9IEdvb2dsZTo6UHJvdG9idWY6Ok1hcC5u
ZXcoOnN0cmluZywgOm1lc3NhZ2UsIFRlc3RNZXNzYWdlKQotICAgICAgbVsiYXNkZiJdID0gVGVz
dE1lc3NhZ2UubmV3Ci0gICAgICBhc3NlcnRfcmFpc2UgVHlwZUVycm9yIGRvCi0gICAgICAgIG1b
ImprbDsiXSA9IFRlc3RNZXNzYWdlMi5uZXcKLSAgICAgIGVuZAotCi0gICAgICBtID0gR29vZ2xl
OjpQcm90b2J1Zjo6TWFwLm5ldygKLSAgICAgICAgOnN0cmluZywgOm1lc3NhZ2UsIFRlc3RNZXNz
YWdlLAotICAgICAgICB7ICJhIiA9PiBUZXN0TWVzc2FnZS5uZXcoOm9wdGlvbmFsX2ludDMyID0+
IDQyKSwKLSAgICAgICAgICAiYiIgPT4gVGVzdE1lc3NhZ2UubmV3KDpvcHRpb25hbF9pbnQzMiA9
PiA4NCkgfSkKLSAgICAgIGFzc2VydCBtLmxlbmd0aCA9PSAyCi0gICAgICBhc3NlcnQgbS52YWx1
ZXMubWFwe3xtc2d8IG1zZy5vcHRpb25hbF9pbnQzMn0uc29ydCA9PSBbNDIsIDg0XQotCi0gICAg
ICBtID0gR29vZ2xlOjpQcm90b2J1Zjo6TWFwLm5ldyg6c3RyaW5nLCA6ZW51bSwgVGVzdEVudW0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJ4IiA9PiA6QSwgInkiID0+
IDpCLCAieiIgPT4gOkMgfSkKLSAgICAgIGFzc2VydCBtLmxlbmd0aCA9PSAzCi0gICAgICBhc3Nl
cnQgbVsieiJdID09IDpDCi0gICAgICBtWyJ6Il0gPSAyCi0gICAgICBhc3NlcnQgbVsieiJdID09
IDpCCi0gICAgICBtWyJ6Il0gPSA0Ci0gICAgICBhc3NlcnQgbVsieiJdID09IDQKLSAgICAgIGFz
c2VydF9yYWlzZSBSYW5nZUVycm9yIGRvCi0gICAgICAgIG1bInoiXSA9IDpaCi0gICAgICBlbmQK
LSAgICAgIGFzc2VydF9yYWlzZSBUeXBlRXJyb3IgZG8KLSAgICAgICAgbVsieiJdID0gInoiCi0g
ICAgICBlbmQKLSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X21hcF9kdXBfZGVlcF9jb3B5Ci0gICAg
ICBtID0gR29vZ2xlOjpQcm90b2J1Zjo6TWFwLm5ldygKLSAgICAgICAgOnN0cmluZywgOm1lc3Nh
Z2UsIFRlc3RNZXNzYWdlLAotICAgICAgICB7ICJhIiA9PiBUZXN0TWVzc2FnZS5uZXcoOm9wdGlv
bmFsX2ludDMyID0+IDQyKSwKLSAgICAgICAgICAiYiIgPT4gVGVzdE1lc3NhZ2UubmV3KDpvcHRp
b25hbF9pbnQzMiA9PiA4NCkgfSkKLQotICAgICAgbTIgPSBtLmR1cAotICAgICAgYXNzZXJ0IG0g
PT0gbTIKLSAgICAgIGFzc2VydCBtLm9iamVjdF9pZCAhPSBtMi5vYmplY3RfaWQKLSAgICAgIGFz
c2VydCBtWyJhIl0ub2JqZWN0X2lkID09IG0yWyJhIl0ub2JqZWN0X2lkCi0gICAgICBhc3NlcnQg
bVsiYiJdLm9iamVjdF9pZCA9PSBtMlsiYiJdLm9iamVjdF9pZAotCi0gICAgICBtMiA9IEdvb2ds
ZTo6UHJvdG9idWYuZGVlcF9jb3B5KG0pCi0gICAgICBhc3NlcnQgbSA9PSBtMgotICAgICAgYXNz
ZXJ0IG0ub2JqZWN0X2lkICE9IG0yLm9iamVjdF9pZAotICAgICAgYXNzZXJ0IG1bImEiXS5vYmpl
Y3RfaWQgIT0gbTJbImEiXS5vYmplY3RfaWQKLSAgICAgIGFzc2VydCBtWyJiIl0ub2JqZWN0X2lk
ICE9IG0yWyJiIl0ub2JqZWN0X2lkCi0gICAgZW5kCi0KLSAgICBkZWYgdGVzdF9tYXBfZmllbGQK
LSAgICAgIG0gPSBNYXBNZXNzYWdlLm5ldwotICAgICAgYXNzZXJ0IG0ubWFwX3N0cmluZ19pbnQz
MiA9PSB7fQotICAgICAgYXNzZXJ0IG0ubWFwX3N0cmluZ19tc2cgPT0ge30KLQotICAgICAgbSA9
IE1hcE1lc3NhZ2UubmV3KAotICAgICAgICA6bWFwX3N0cmluZ19pbnQzMiA9PiB7ImEiID0+IDEs
ICJiIiA9PiAyfSwKLSAgICAgICAgOm1hcF9zdHJpbmdfbXNnID0+IHsiYSIgPT4gVGVzdE1lc3Nh
Z2UyLm5ldyg6Zm9vID0+IDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiIiA9PiBU
ZXN0TWVzc2FnZTIubmV3KDpmb28gPT4gMil9KQotICAgICAgYXNzZXJ0IG0ubWFwX3N0cmluZ19p
bnQzMi5rZXlzLnNvcnQgPT0gWyJhIiwgImIiXQotICAgICAgYXNzZXJ0IG0ubWFwX3N0cmluZ19p
bnQzMlsiYSJdID09IDEKLSAgICAgIGFzc2VydCBtLm1hcF9zdHJpbmdfbXNnWyJiIl0uZm9vID09
IDIKLQotICAgICAgbS5tYXBfc3RyaW5nX2ludDMyWyJjIl0gPSAzCi0gICAgICBhc3NlcnQgbS5t
YXBfc3RyaW5nX2ludDMyWyJjIl0gPT0gMwotICAgICAgbS5tYXBfc3RyaW5nX21zZ1siYyJdID0g
VGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDMpCi0gICAgICBhc3NlcnQgbS5tYXBfc3RyaW5nX21z
Z1siYyJdID09IFRlc3RNZXNzYWdlMi5uZXcoOmZvbyA9PiAzKQotICAgICAgbS5tYXBfc3RyaW5n
X21zZy5kZWxldGUoImIiKQotICAgICAgbS5tYXBfc3RyaW5nX21zZy5kZWxldGUoImMiKQotICAg
ICAgYXNzZXJ0IG0ubWFwX3N0cmluZ19tc2cgPT0geyAiYSIgPT4gVGVzdE1lc3NhZ2UyLm5ldyg6
Zm9vID0+IDEpIH0KLQotICAgICAgYXNzZXJ0X3JhaXNlIFR5cGVFcnJvciBkbwotICAgICAgICBt
Lm1hcF9zdHJpbmdfbXNnWyJlIl0gPSBUZXN0TWVzc2FnZS5uZXcgIyB3cm9uZyB2YWx1ZSB0eXBl
Ci0gICAgICBlbmQKLSAgICAgICMgZW5zdXJlIG5vdGhpbmcgd2FzIGFkZGVkIGJ5IHRoZSBhYm92
ZQotICAgICAgYXNzZXJ0IG0ubWFwX3N0cmluZ19tc2cgPT0geyAiYSIgPT4gVGVzdE1lc3NhZ2Uy
Lm5ldyg6Zm9vID0+IDEpIH0KLQotICAgICAgbS5tYXBfc3RyaW5nX2ludDMyID0gR29vZ2xlOjpQ
cm90b2J1Zjo6TWFwLm5ldyg6c3RyaW5nLCA6aW50MzIpCi0gICAgICBhc3NlcnRfcmFpc2UgVHlw
ZUVycm9yIGRvCi0gICAgICAgIG0ubWFwX3N0cmluZ19pbnQzMiA9IEdvb2dsZTo6UHJvdG9idWY6
Ok1hcC5uZXcoOnN0cmluZywgOmludDY0KQotICAgICAgZW5kCi0gICAgICBhc3NlcnRfcmFpc2Ug
VHlwZUVycm9yIGRvCi0gICAgICAgIG0ubWFwX3N0cmluZ19pbnQzMiA9IHt9Ci0gICAgICBlbmQK
LQotICAgICAgYXNzZXJ0X3JhaXNlIFR5cGVFcnJvciBkbwotICAgICAgICBtID0gTWFwTWVzc2Fn
ZS5uZXcoOm1hcF9zdHJpbmdfaW50MzIgPT4geyAxID0+ICJJIGFtIG5vdCBhIG51bWJlciIgfSkK
LSAgICAgIGVuZAotICAgIGVuZAotCi0gICAgZGVmIHRlc3RfbWFwX2VuY29kZV9kZWNvZGUKLSAg
ICAgIG0gPSBNYXBNZXNzYWdlLm5ldygKLSAgICAgICAgOm1hcF9zdHJpbmdfaW50MzIgPT4geyJh
IiA9PiAxLCAiYiIgPT4gMn0sCi0gICAgICAgIDptYXBfc3RyaW5nX21zZyA9PiB7ImEiID0+IFRl
c3RNZXNzYWdlMi5uZXcoOmZvbyA9PiAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
YiIgPT4gVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDIpfSkKLSAgICAgIG0yID0gTWFwTWVzc2Fn
ZS5kZWNvZGUoTWFwTWVzc2FnZS5lbmNvZGUobSkpCi0gICAgICBhc3NlcnQgbSA9PSBtMgotCi0g
ICAgICBtMyA9IE1hcE1lc3NhZ2VXaXJlRXF1aXYuZGVjb2RlKE1hcE1lc3NhZ2UuZW5jb2RlKG0p
KQotICAgICAgYXNzZXJ0IG0zLm1hcF9zdHJpbmdfaW50MzIubGVuZ3RoID09IDIKLQotICAgICAg
a3YgPSB7fQotICAgICAgbTMubWFwX3N0cmluZ19pbnQzMi5tYXAgeyB8bXNnfCBrdlttc2cua2V5
XSA9IG1zZy52YWx1ZSB9Ci0gICAgICBhc3NlcnQga3YgPT0geyJhIiA9PiAxLCAiYiIgPT4gMn0K
LQotICAgICAga3YgPSB7fQotICAgICAgbTMubWFwX3N0cmluZ19tc2cubWFwIHsgfG1zZ3wga3Zb
bXNnLmtleV0gPSBtc2cudmFsdWUgfQotICAgICAgYXNzZXJ0IGt2ID09IHsiYSIgPT4gVGVzdE1l
c3NhZ2UyLm5ldyg6Zm9vID0+IDEpLAotICAgICAgICAgICAgICAgICAgICAiYiIgPT4gVGVzdE1l
c3NhZ2UyLm5ldyg6Zm9vID0+IDIpfQotICAgIGVuZAotCi0gICAgZGVmIHRlc3Rfb25lb2ZfZGVz
Y3JpcHRvcnMKLSAgICAgIGQgPSBPbmVvZk1lc3NhZ2UuZGVzY3JpcHRvcgotICAgICAgbyA9IGQu
bG9va3VwX29uZW9mKCJteV9vbmVvZiIpCi0gICAgICBhc3NlcnQgbyAhPSBuaWwKLSAgICAgIGFz
c2VydCBvLmNsYXNzID09IEdvb2dsZTo6UHJvdG9idWY6Ok9uZW9mRGVzY3JpcHRvcgotICAgICAg
YXNzZXJ0IG8ubmFtZSA9PSAibXlfb25lb2YiCi0gICAgICBvbmVvZl9jb3VudCA9IDAKLSAgICAg
IGQuZWFjaF9vbmVvZnsgfG9uZW9mfAotICAgICAgICBvbmVvZl9jb3VudCArPSAxCi0gICAgICAg
IGFzc2VydCBvbmVvZiA9PSBvCi0gICAgICB9Ci0gICAgICBhc3NlcnQgb25lb2ZfY291bnQgPT0g
MQotICAgICAgYXNzZXJ0IG8uY291bnQgPT0gNAotICAgICAgZmllbGRfbmFtZXMgPSBvLm1hcHt8
ZnwgZi5uYW1lfS5zb3J0Ci0gICAgICBhc3NlcnQgZmllbGRfbmFtZXMgPT0gWyJhIiwgImIiLCAi
YyIsICJkIl0KLSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X29uZW9mCi0gICAgICBkID0gT25lb2ZN
ZXNzYWdlLm5ldwotICAgICAgYXNzZXJ0IGQuYSA9PSBuaWwKLSAgICAgIGFzc2VydCBkLmIgPT0g
bmlsCi0gICAgICBhc3NlcnQgZC5jID09IG5pbAotICAgICAgYXNzZXJ0IGQuZCA9PSBuaWwKLSAg
ICAgIGFzc2VydCBkLm15X29uZW9mID09IG5pbAotCi0gICAgICBkLmEgPSAiaGkiCi0gICAgICBh
c3NlcnQgZC5hID09ICJoaSIKLSAgICAgIGFzc2VydCBkLmIgPT0gbmlsCi0gICAgICBhc3NlcnQg
ZC5jID09IG5pbAotICAgICAgYXNzZXJ0IGQuZCA9PSBuaWwKLSAgICAgIGFzc2VydCBkLm15X29u
ZW9mID09IDphCi0KLSAgICAgIGQuYiA9IDQyCi0gICAgICBhc3NlcnQgZC5hID09IG5pbAotICAg
ICAgYXNzZXJ0IGQuYiA9PSA0MgotICAgICAgYXNzZXJ0IGQuYyA9PSBuaWwKLSAgICAgIGFzc2Vy
dCBkLmQgPT0gbmlsCi0gICAgICBhc3NlcnQgZC5teV9vbmVvZiA9PSA6YgotCi0gICAgICBkLmMg
PSBUZXN0TWVzc2FnZTIubmV3KDpmb28gPT4gMTAwKQotICAgICAgYXNzZXJ0IGQuYSA9PSBuaWwK
LSAgICAgIGFzc2VydCBkLmIgPT0gbmlsCi0gICAgICBhc3NlcnQgZC5jLmZvbyA9PSAxMDAKLSAg
ICAgIGFzc2VydCBkLmQgPT0gbmlsCi0gICAgICBhc3NlcnQgZC5teV9vbmVvZiA9PSA6YwotCi0g
ICAgICBkLmQgPSA6QwotICAgICAgYXNzZXJ0IGQuYSA9PSBuaWwKLSAgICAgIGFzc2VydCBkLmIg
PT0gbmlsCi0gICAgICBhc3NlcnQgZC5jID09IG5pbAotICAgICAgYXNzZXJ0IGQuZCA9PSA6Qwot
ICAgICAgYXNzZXJ0IGQubXlfb25lb2YgPT0gOmQKLQotICAgICAgZDIgPSBPbmVvZk1lc3NhZ2Uu
ZGVjb2RlKE9uZW9mTWVzc2FnZS5lbmNvZGUoZCkpCi0gICAgICBhc3NlcnQgZDIgPT0gZAotCi0g
ICAgICBlbmNvZGVkX2ZpZWxkX2EgPSBPbmVvZk1lc3NhZ2UuZW5jb2RlKE9uZW9mTWVzc2FnZS5u
ZXcoOmEgPT4gInN0cmluZyIpKQotICAgICAgZW5jb2RlZF9maWVsZF9iID0gT25lb2ZNZXNzYWdl
LmVuY29kZShPbmVvZk1lc3NhZ2UubmV3KDpiID0+IDEwMDApKQotICAgICAgZW5jb2RlZF9maWVs
ZF9jID0gT25lb2ZNZXNzYWdlLmVuY29kZSgKLSAgICAgICAgT25lb2ZNZXNzYWdlLm5ldyg6YyA9
PiBUZXN0TWVzc2FnZTIubmV3KDpmb28gPT4gMSkpKQotICAgICAgZW5jb2RlZF9maWVsZF9kID0g
T25lb2ZNZXNzYWdlLmVuY29kZShPbmVvZk1lc3NhZ2UubmV3KDpkID0+IDpCKSkKLQotICAgICAg
ZDMgPSBPbmVvZk1lc3NhZ2UuZGVjb2RlKAotICAgICAgICBlbmNvZGVkX2ZpZWxkX2MgKyBlbmNv
ZGVkX2ZpZWxkX2EgKyBlbmNvZGVkX2ZpZWxkX2QpCi0gICAgICBhc3NlcnQgZDMuYSA9PSBuaWwK
LSAgICAgIGFzc2VydCBkMy5iID09IG5pbAotICAgICAgYXNzZXJ0IGQzLmMgPT0gbmlsCi0gICAg
ICBhc3NlcnQgZDMuZCA9PSA6QgotCi0gICAgICBkNCA9IE9uZW9mTWVzc2FnZS5kZWNvZGUoCi0g
ICAgICAgIGVuY29kZWRfZmllbGRfYyArIGVuY29kZWRfZmllbGRfYSArIGVuY29kZWRfZmllbGRf
ZCArCi0gICAgICAgIGVuY29kZWRfZmllbGRfYykKLSAgICAgIGFzc2VydCBkNC5hID09IG5pbAot
ICAgICAgYXNzZXJ0IGQ0LmIgPT0gbmlsCi0gICAgICBhc3NlcnQgZDQuYy5mb28gPT0gMQotICAg
ICAgYXNzZXJ0IGQ0LmQgPT0gbmlsCi0KLSAgICAgIGQ1ID0gT25lb2ZNZXNzYWdlLm5ldyg6YSA9
PiAiaGVsbG8iKQotICAgICAgYXNzZXJ0IGQ1LmEgIT0gbmlsCi0gICAgICBkNS5hID0gbmlsCi0g
ICAgICBhc3NlcnQgZDUuYSA9PSBuaWwKLSAgICAgIGFzc2VydCBPbmVvZk1lc3NhZ2UuZW5jb2Rl
KGQ1KSA9PSAnJwotICAgICAgYXNzZXJ0IGQ1Lm15X29uZW9mID09IG5pbAotICAgIGVuZAotCi0g
ICAgZGVmIHRlc3RfZW51bV9maWVsZAotICAgICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotICAgICAg
YXNzZXJ0IG0ub3B0aW9uYWxfZW51bSA9PSA6RGVmYXVsdAotICAgICAgbS5vcHRpb25hbF9lbnVt
ID0gOkEKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFsX2VudW0gPT0gOkEKLSAgICAgIGFzc2VydF9y
YWlzZSBSYW5nZUVycm9yIGRvCi0gICAgICAgIG0ub3B0aW9uYWxfZW51bSA9IDpBU0RGCi0gICAg
ICBlbmQKLSAgICAgIG0ub3B0aW9uYWxfZW51bSA9IDEKLSAgICAgIGFzc2VydCBtLm9wdGlvbmFs
X2VudW0gPT0gOkEKLSAgICAgIG0ub3B0aW9uYWxfZW51bSA9IDEwMAotICAgICAgYXNzZXJ0IG0u
b3B0aW9uYWxfZW51bSA9PSAxMDAKLSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X2R1cAotICAgICAg
bSA9IFRlc3RNZXNzYWdlLm5ldwotICAgICAgbS5vcHRpb25hbF9zdHJpbmcgPSAiaGVsbG8iCi0g
ICAgICBtLm9wdGlvbmFsX2ludDMyID0gNDIKLSAgICAgIHRtMSA9IFRlc3RNZXNzYWdlMi5uZXco
OmZvbyA9PiAxMDApCi0gICAgICB0bTIgPSBUZXN0TWVzc2FnZTIubmV3KDpmb28gPT4gMjAwKQot
ICAgICAgbS5yZXBlYXRlZF9tc2cucHVzaCB0bTEKLSAgICAgIGFzc2VydCBtLnJlcGVhdGVkX21z
Z1stMV0gPT0gdG0xCi0gICAgICBtLnJlcGVhdGVkX21zZy5wdXNoIHRtMgotICAgICAgYXNzZXJ0
IG0ucmVwZWF0ZWRfbXNnWy0xXSA9PSB0bTIKLSAgICAgIG0yID0gbS5kdXAKLSAgICAgIGFzc2Vy
dCBtID09IG0yCi0gICAgICBtLm9wdGlvbmFsX2ludDMyICs9IDEKLSAgICAgIGFzc2VydCBtICE9
IG0yCi0gICAgICBhc3NlcnQgbS5yZXBlYXRlZF9tc2dbMF0gPT0gbTIucmVwZWF0ZWRfbXNnWzBd
Ci0gICAgICBhc3NlcnQgbS5yZXBlYXRlZF9tc2dbMF0ub2JqZWN0X2lkID09IG0yLnJlcGVhdGVk
X21zZ1swXS5vYmplY3RfaWQKLSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X2RlZXBfY29weQotICAg
ICAgbSA9IFRlc3RNZXNzYWdlLm5ldyg6b3B0aW9uYWxfaW50MzIgPT4gNDIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIDpyZXBlYXRlZF9tc2cgPT4gW1Rlc3RNZXNzYWdlMi5uZXcoOmZvbyA9
PiAxMDApXSkKLSAgICAgIG0yID0gR29vZ2xlOjpQcm90b2J1Zi5kZWVwX2NvcHkobSkKLSAgICAg
IGFzc2VydCBtID09IG0yCi0gICAgICBhc3NlcnQgbS5yZXBlYXRlZF9tc2cgPT0gbTIucmVwZWF0
ZWRfbXNnCi0gICAgICBhc3NlcnQgbS5yZXBlYXRlZF9tc2cub2JqZWN0X2lkICE9IG0yLnJlcGVh
dGVkX21zZy5vYmplY3RfaWQKLSAgICAgIGFzc2VydCBtLnJlcGVhdGVkX21zZ1swXS5vYmplY3Rf
aWQgIT0gbTIucmVwZWF0ZWRfbXNnWzBdLm9iamVjdF9pZAotICAgIGVuZAotCi0gICAgZGVmIHRl
c3RfZXEKLSAgICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcoOm9wdGlvbmFsX2ludDMyID0+IDQyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICA6cmVwZWF0ZWRfaW50MzIgPT4gWzEsIDIsIDNdKQot
ICAgICAgbTIgPSBUZXN0TWVzc2FnZS5uZXcoOm9wdGlvbmFsX2ludDMyID0+IDQzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOnJlcGVhdGVkX2ludDMyID0+IFsxLCAyLCAzXSkKLSAgICAg
IGFzc2VydCBtICE9IG0yCi0gICAgZW5kCi0KLSAgICBkZWYgdGVzdF9lbnVtX2xvb2t1cAotICAg
ICAgYXNzZXJ0IFRlc3RFbnVtOjpBID09IDEKLSAgICAgIGFzc2VydCBUZXN0RW51bTo6QiA9PSAy
Ci0gICAgICBhc3NlcnQgVGVzdEVudW06OkMgPT0gMwotCi0gICAgICBhc3NlcnQgVGVzdEVudW06
Omxvb2t1cCgxKSA9PSA6QQotICAgICAgYXNzZXJ0IFRlc3RFbnVtOjpsb29rdXAoMikgPT0gOkIK
LSAgICAgIGFzc2VydCBUZXN0RW51bTo6bG9va3VwKDMpID09IDpDCi0KLSAgICAgIGFzc2VydCBU
ZXN0RW51bTo6cmVzb2x2ZSg6QSkgPT0gMQotICAgICAgYXNzZXJ0IFRlc3RFbnVtOjpyZXNvbHZl
KDpCKSA9PSAyCi0gICAgICBhc3NlcnQgVGVzdEVudW06OnJlc29sdmUoOkMpID09IDMKLSAgICBl
bmQKLQotICAgIGRlZiB0ZXN0X3BhcnNlX3NlcmlhbGl6ZQotICAgICAgbSA9IFRlc3RNZXNzYWdl
Lm5ldyg6b3B0aW9uYWxfaW50MzIgPT4gNDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDpv
cHRpb25hbF9zdHJpbmcgPT4gImhlbGxvIHdvcmxkIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgOm9wdGlvbmFsX2VudW0gPT4gOkIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDpyZXBl
YXRlZF9zdHJpbmcgPT4gWyJhIiwgImIiLCAiYyJdLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICA6cmVwZWF0ZWRfaW50MzIgPT4gWzQyLCA0MywgNDRdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICA6cmVwZWF0ZWRfZW51bSA9PiBbOkEsIDpCLCA6QywgMTAwXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgOnJlcGVhdGVkX21zZyA9PiBbVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDEp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0TWVzc2Fn
ZTIubmV3KDpmb28gPT4gMildKQotICAgICAgZGF0YSA9IFRlc3RNZXNzYWdlLmVuY29kZSBtCi0g
ICAgICBtMiA9IFRlc3RNZXNzYWdlLmRlY29kZSBkYXRhCi0gICAgICBhc3NlcnQgbSA9PSBtMgot
Ci0gICAgICBkYXRhID0gR29vZ2xlOjpQcm90b2J1Zi5lbmNvZGUgbQotICAgICAgbTIgPSBHb29n
bGU6OlByb3RvYnVmLmRlY29kZShUZXN0TWVzc2FnZSwgZGF0YSkKLSAgICAgIGFzc2VydCBtID09
IG0yCi0gICAgZW5kCi0KLSAgICBkZWYgdGVzdF9lbmNvZGVfZGVjb2RlX2hlbHBlcnMKLSAgICAg
IG0gPSBUZXN0TWVzc2FnZS5uZXcoOm9wdGlvbmFsX3N0cmluZyA9PiAnZm9vJywgOnJlcGVhdGVk
X3N0cmluZyA9PiBbJ2JhcjEnLCAnYmFyMiddKQotICAgICAganNvbiA9IG0udG9fanNvbgotICAg
ICAgbTIgPSBUZXN0TWVzc2FnZS5kZWNvZGVfanNvbihqc29uKQotICAgICAgYXNzZXJ0IG0yLm9w
dGlvbmFsX3N0cmluZyA9PSAnZm9vJwotICAgICAgYXNzZXJ0IG0yLnJlcGVhdGVkX3N0cmluZyA9
PSBbJ2JhcjEnLCAnYmFyMiddCi0KLSAgICAgIHByb3RvID0gbS50b19wcm90bwotICAgICAgbTIg
PSBUZXN0TWVzc2FnZS5kZWNvZGUocHJvdG8pCi0gICAgICBhc3NlcnQgbTIub3B0aW9uYWxfc3Ry
aW5nID09ICdmb28nCi0gICAgICBhc3NlcnQgbTIucmVwZWF0ZWRfc3RyaW5nID09IFsnYmFyMScs
ICdiYXIyJ10KLSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X3Byb3RvYnVmX2VuY29kZV9kZWNvZGVf
aGVscGVycwotICAgICAgbSA9IFRlc3RNZXNzYWdlLm5ldyg6b3B0aW9uYWxfc3RyaW5nID0+ICdm
b28nLCA6cmVwZWF0ZWRfc3RyaW5nID0+IFsnYmFyMScsICdiYXIyJ10pCi0gICAgICBlbmNvZGVk
X21zZyA9IEdvb2dsZTo6UHJvdG9idWYuZW5jb2RlKG0pCi0gICAgICBhc3NlcnRfZXF1YWwgbS50
b19wcm90bywgZW5jb2RlZF9tc2cKLQotICAgICAgZGVjb2RlZF9tc2cgPSBHb29nbGU6OlByb3Rv
YnVmLmRlY29kZShUZXN0TWVzc2FnZSwgZW5jb2RlZF9tc2cpCi0gICAgICBhc3NlcnRfZXF1YWwg
VGVzdE1lc3NhZ2UuZGVjb2RlKG0udG9fcHJvdG8pLCBkZWNvZGVkX21zZwotICAgIGVuZAotCi0g
ICAgZGVmIHRlc3RfcHJvdG9idWZfZW5jb2RlX2RlY29kZV9qc29uX2hlbHBlcnMKLSAgICAgIG0g
PSBUZXN0TWVzc2FnZS5uZXcoOm9wdGlvbmFsX3N0cmluZyA9PiAnZm9vJywgOnJlcGVhdGVkX3N0
cmluZyA9PiBbJ2JhcjEnLCAnYmFyMiddKQotICAgICAgZW5jb2RlZF9tc2cgPSBHb29nbGU6OlBy
b3RvYnVmLmVuY29kZV9qc29uKG0pCi0gICAgICBhc3NlcnRfZXF1YWwgbS50b19qc29uLCBlbmNv
ZGVkX21zZwotCi0gICAgICBkZWNvZGVkX21zZyA9IEdvb2dsZTo6UHJvdG9idWYuZGVjb2RlX2pz
b24oVGVzdE1lc3NhZ2UsIGVuY29kZWRfbXNnKQotICAgICAgYXNzZXJ0X2VxdWFsIFRlc3RNZXNz
YWdlLmRlY29kZV9qc29uKG0udG9fanNvbiksIGRlY29kZWRfbXNnCi0gICAgZW5kCi0KLSAgICBk
ZWYgdGVzdF90b19oCi0gICAgICBtID0gVGVzdE1lc3NhZ2UubmV3KDpvcHRpb25hbF9ib29sID0+
IHRydWUsIDpvcHRpb25hbF9kb3VibGUgPT4gLTEwLjEwMDAwMSwgOm9wdGlvbmFsX3N0cmluZyA9
PiAnZm9vJywgOnJlcGVhdGVkX3N0cmluZyA9PiBbJ2JhcjEnLCAnYmFyMiddKQotICAgICAgZXhw
ZWN0ZWRfcmVzdWx0ID0gewotICAgICAgICA6b3B0aW9uYWxfYm9vbD0+dHJ1ZSwKLSAgICAgICAg
Om9wdGlvbmFsX2J5dGVzPT4iIiwKLSAgICAgICAgOm9wdGlvbmFsX2RvdWJsZT0+LTEwLjEwMDAw
MSwKLSAgICAgICAgOm9wdGlvbmFsX2VudW09PjpEZWZhdWx0LAotICAgICAgICA6b3B0aW9uYWxf
ZmxvYXQ9PjAuMCwKLSAgICAgICAgOm9wdGlvbmFsX2ludDMyPT4wLAotICAgICAgICA6b3B0aW9u
YWxfaW50NjQ9PjAsCi0gICAgICAgIDpvcHRpb25hbF9tc2c9Pm5pbCwKLSAgICAgICAgOm9wdGlv
bmFsX3N0cmluZz0+ImZvbyIsCi0gICAgICAgIDpvcHRpb25hbF91aW50MzI9PjAsCi0gICAgICAg
IDpvcHRpb25hbF91aW50NjQ9PjAsCi0gICAgICAgIDpyZXBlYXRlZF9ib29sPT5bXSwKLSAgICAg
ICAgOnJlcGVhdGVkX2J5dGVzPT5bXSwKLSAgICAgICAgOnJlcGVhdGVkX2RvdWJsZT0+W10sCi0g
ICAgICAgIDpyZXBlYXRlZF9lbnVtPT5bXSwKLSAgICAgICAgOnJlcGVhdGVkX2Zsb2F0PT5bXSwK
LSAgICAgICAgOnJlcGVhdGVkX2ludDMyPT5bXSwKLSAgICAgICAgOnJlcGVhdGVkX2ludDY0PT5b
XSwKLSAgICAgICAgOnJlcGVhdGVkX21zZz0+W10sCi0gICAgICAgIDpyZXBlYXRlZF9zdHJpbmc9
PlsiYmFyMSIsICJiYXIyIl0sCi0gICAgICAgIDpyZXBlYXRlZF91aW50MzI9PltdLAotICAgICAg
ICA6cmVwZWF0ZWRfdWludDY0PT5bXQotICAgICAgfQotICAgICAgYXNzZXJ0X2VxdWFsIGV4cGVj
dGVkX3Jlc3VsdCwgbS50b19oCi0gICAgZW5kCi0KLQotICAgIGRlZiB0ZXN0X2RlZl9lcnJvcnMK
LSAgICAgIHMgPSBHb29nbGU6OlByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbC5uZXcKLSAgICAgIGFz
c2VydF9yYWlzZSBUeXBlRXJyb3IgZG8KLSAgICAgICAgcy5idWlsZCBkbwotICAgICAgICAgICMg
ZW51bSB3aXRoIG5vIGRlZmF1bHQgKGludGVnZXIgdmFsdWUgMCkKLSAgICAgICAgICBhZGRfZW51
bSAiTXlFbnVtIiBkbwotICAgICAgICAgICAgdmFsdWUgOkEsIDEKLSAgICAgICAgICBlbmQKLSAg
ICAgICAgZW5kCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBUeXBlRXJyb3IgZG8KLSAg
ICAgICAgcy5idWlsZCBkbwotICAgICAgICAgICMgbWVzc2FnZSB3aXRoIHJlcXVpcmVkIGZpZWxk
ICh1bnN1cHBvcnRlZCBpbiBwcm90bzMpCi0gICAgICAgICAgYWRkX21lc3NhZ2UgIk15TWVzc2Fn
ZSIgZG8KLSAgICAgICAgICAgIHJlcXVpcmVkIDpmb28sIDppbnQzMiwgMQotICAgICAgICAgIGVu
ZAotICAgICAgICBlbmQKLSAgICAgIGVuZAotICAgIGVuZAotCi0gICAgZGVmIHRlc3RfY29yZWN1
cnNpdmUKLSAgICAgICMganVzdCBiZSBzdXJlIHRoYXQgd2UgY2FuIGluc3RhbnRpYXRlIHR5cGVz
IHdpdGggY29yZWN1cnNpdmUgZmllbGQtdHlwZQotICAgICAgIyByZWZlcmVuY2VzLgotICAgICAg
bSA9IFJlY3Vyc2l2ZTEubmV3KDpmb28gPT4gUmVjdXJzaXZlMi5uZXcoOmZvbyA9PiBSZWN1cnNp
dmUxLm5ldykpCi0gICAgICBhc3NlcnQgUmVjdXJzaXZlMS5kZXNjcmlwdG9yLmxvb2t1cCgiZm9v
Iikuc3VidHlwZSA9PQotICAgICAgICBSZWN1cnNpdmUyLmRlc2NyaXB0b3IKLSAgICAgIGFzc2Vy
dCBSZWN1cnNpdmUyLmRlc2NyaXB0b3IubG9va3VwKCJmb28iKS5zdWJ0eXBlID09Ci0gICAgICAg
IFJlY3Vyc2l2ZTEuZGVzY3JpcHRvcgotCi0gICAgICBzZXJpYWxpemVkID0gUmVjdXJzaXZlMS5l
bmNvZGUobSkKLSAgICAgIG0yID0gUmVjdXJzaXZlMS5kZWNvZGUoc2VyaWFsaXplZCkKLSAgICAg
IGFzc2VydCBtID09IG0yCi0gICAgZW5kCi0KLSAgICBkZWYgdGVzdF9zZXJpYWxpemVfY3ljbGUK
LSAgICAgIG0gPSBSZWN1cnNpdmUxLm5ldyg6Zm9vID0+IFJlY3Vyc2l2ZTIubmV3KQotICAgICAg
bS5mb28uZm9vID0gbQotICAgICAgYXNzZXJ0X3JhaXNlIFJ1bnRpbWVFcnJvciBkbwotICAgICAg
ICBzZXJpYWxpemVkID0gUmVjdXJzaXZlMS5lbmNvZGUobSkKLSAgICAgIGVuZAotICAgIGVuZAot
Ci0gICAgZGVmIHRlc3RfYmFkX2ZpZWxkX25hbWVzCi0gICAgICBtID0gQmFkRmllbGROYW1lcy5u
ZXcoOmR1cCA9PiAxLCA6Y2xhc3MgPT4gMikKLSAgICAgIG0yID0gbS5kdXAKLSAgICAgIGFzc2Vy
dCBtID09IG0yCi0gICAgICBhc3NlcnQgbVsnZHVwJ10gPT0gMQotICAgICAgYXNzZXJ0IG1bJ2Ns
YXNzJ10gPT0gMgotICAgICAgbVsnZHVwJ10gPSAzCi0gICAgICBhc3NlcnQgbVsnZHVwJ10gPT0g
MwotICAgICAgbVsnYS5iJ10gPSA0Ci0gICAgICBhc3NlcnQgbVsnYS5iJ10gPT0gNAotICAgIGVu
ZAotCi0gICAgZGVmIHRlc3RfaW50X3JhbmdlcwotICAgICAgbSA9IFRlc3RNZXNzYWdlLm5ldwot
Ci0gICAgICBtLm9wdGlvbmFsX2ludDMyID0gMAotICAgICAgbS5vcHRpb25hbF9pbnQzMiA9IC0w
eDgwMDBfMDAwMAotICAgICAgbS5vcHRpb25hbF9pbnQzMiA9ICsweDdmZmZfZmZmZgotICAgICAg
bS5vcHRpb25hbF9pbnQzMiA9IDEuMAotICAgICAgbS5vcHRpb25hbF9pbnQzMiA9IC0xLjAKLSAg
ICAgIG0ub3B0aW9uYWxfaW50MzIgPSAyZTkKLSAgICAgIGFzc2VydF9yYWlzZSBSYW5nZUVycm9y
IGRvCi0gICAgICAgIG0ub3B0aW9uYWxfaW50MzIgPSAtMHg4MDAwXzAwMDEKLSAgICAgIGVuZAot
ICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25hbF9pbnQz
MiA9ICsweDgwMDBfMDAwMAotICAgICAgZW5kCi0gICAgICBhc3NlcnRfcmFpc2UgUmFuZ2VFcnJv
ciBkbwotICAgICAgICBtLm9wdGlvbmFsX2ludDMyID0gKzB4MTAwMF8wMDAwXzAwMDBfMDAwMF8w
MDAwXzAwMDAgIyBmb3JjZSBCaWdudW0KLSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFJh
bmdlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25hbF9pbnQzMiA9IDFlMTIKLSAgICAgIGVuZAot
ICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25hbF9pbnQz
MiA9IDEuNQotICAgICAgZW5kCi0KLSAgICAgIG0ub3B0aW9uYWxfdWludDMyID0gMAotICAgICAg
bS5vcHRpb25hbF91aW50MzIgPSArMHhmZmZmX2ZmZmYKLSAgICAgIG0ub3B0aW9uYWxfdWludDMy
ID0gMS4wCi0gICAgICBtLm9wdGlvbmFsX3VpbnQzMiA9IDRlOQotICAgICAgYXNzZXJ0X3JhaXNl
IFJhbmdlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25hbF91aW50MzIgPSAtMQotICAgICAgZW5k
Ci0gICAgICBhc3NlcnRfcmFpc2UgUmFuZ2VFcnJvciBkbwotICAgICAgICBtLm9wdGlvbmFsX3Vp
bnQzMiA9IC0xLjUKLSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8K
LSAgICAgICAgbS5vcHRpb25hbF91aW50MzIgPSAtMS41ZTEyCi0gICAgICBlbmQKLSAgICAgIGFz
c2VydF9yYWlzZSBSYW5nZUVycm9yIGRvCi0gICAgICAgIG0ub3B0aW9uYWxfdWludDMyID0gLTB4
MTAwMF8wMDAwXzAwMDBfMDAwMAotICAgICAgZW5kCi0gICAgICBhc3NlcnRfcmFpc2UgUmFuZ2VF
cnJvciBkbwotICAgICAgICBtLm9wdGlvbmFsX3VpbnQzMiA9ICsweDFfMDAwMF8wMDAwCi0gICAg
ICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBSYW5nZUVycm9yIGRvCi0gICAgICAgIG0ub3B0aW9u
YWxfdWludDMyID0gKzB4MTAwMF8wMDAwXzAwMDBfMDAwMF8wMDAwXzAwMDAgIyBmb3JjZSBCaWdu
dW0KLSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAgICAgICAg
bS5vcHRpb25hbF91aW50MzIgPSAxZTEyCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBS
YW5nZUVycm9yIGRvCi0gICAgICAgIG0ub3B0aW9uYWxfdWludDMyID0gMS41Ci0gICAgICBlbmQK
LQotICAgICAgbS5vcHRpb25hbF9pbnQ2NCA9IDAKLSAgICAgIG0ub3B0aW9uYWxfaW50NjQgPSAt
MHg4MDAwXzAwMDBfMDAwMF8wMDAwCi0gICAgICBtLm9wdGlvbmFsX2ludDY0ID0gKzB4N2ZmZl9m
ZmZmX2ZmZmZfZmZmZgotICAgICAgbS5vcHRpb25hbF9pbnQ2NCA9IDEuMAotICAgICAgbS5vcHRp
b25hbF9pbnQ2NCA9IC0xLjAKLSAgICAgIG0ub3B0aW9uYWxfaW50NjQgPSA4ZTE4Ci0gICAgICBt
Lm9wdGlvbmFsX2ludDY0ID0gLThlMTgKLSAgICAgIGFzc2VydF9yYWlzZSBSYW5nZUVycm9yIGRv
Ci0gICAgICAgIG0ub3B0aW9uYWxfaW50NjQgPSAtMHg4MDAwXzAwMDBfMDAwMF8wMDAxCi0gICAg
ICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBSYW5nZUVycm9yIGRvCi0gICAgICAgIG0ub3B0aW9u
YWxfaW50NjQgPSArMHg4MDAwXzAwMDBfMDAwMF8wMDAwCi0gICAgICBlbmQKLSAgICAgIGFzc2Vy
dF9yYWlzZSBSYW5nZUVycm9yIGRvCi0gICAgICAgIG0ub3B0aW9uYWxfaW50NjQgPSArMHgxMDAw
XzAwMDBfMDAwMF8wMDAwXzAwMDBfMDAwMCAjIGZvcmNlIEJpZ251bQotICAgICAgZW5kCi0gICAg
ICBhc3NlcnRfcmFpc2UgUmFuZ2VFcnJvciBkbwotICAgICAgICBtLm9wdGlvbmFsX2ludDY0ID0g
MWU1MAotICAgICAgZW5kCi0gICAgICBhc3NlcnRfcmFpc2UgUmFuZ2VFcnJvciBkbwotICAgICAg
ICBtLm9wdGlvbmFsX2ludDY0ID0gMS41Ci0gICAgICBlbmQKLQotICAgICAgbS5vcHRpb25hbF91
aW50NjQgPSAwCi0gICAgICBtLm9wdGlvbmFsX3VpbnQ2NCA9ICsweGZmZmZfZmZmZl9mZmZmX2Zm
ZmYKLSAgICAgIG0ub3B0aW9uYWxfdWludDY0ID0gMS4wCi0gICAgICBtLm9wdGlvbmFsX3VpbnQ2
NCA9IDE2ZTE4Ci0gICAgICBhc3NlcnRfcmFpc2UgUmFuZ2VFcnJvciBkbwotICAgICAgICBtLm9w
dGlvbmFsX3VpbnQ2NCA9IC0xCi0gICAgICBlbmQKLSAgICAgIGFzc2VydF9yYWlzZSBSYW5nZUVy
cm9yIGRvCi0gICAgICAgIG0ub3B0aW9uYWxfdWludDY0ID0gLTEuNQotICAgICAgZW5kCi0gICAg
ICBhc3NlcnRfcmFpc2UgUmFuZ2VFcnJvciBkbwotICAgICAgICBtLm9wdGlvbmFsX3VpbnQ2NCA9
IC0xLjVlMTIKLSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAg
ICAgICAgbS5vcHRpb25hbF91aW50NjQgPSAtMHgxXzAwMDBfMDAwMF8wMDAwXzAwMDAKLSAgICAg
IGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25h
bF91aW50NjQgPSArMHgxXzAwMDBfMDAwMF8wMDAwXzAwMDAKLSAgICAgIGVuZAotICAgICAgYXNz
ZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAgICAgICAgbS5vcHRpb25hbF91aW50NjQgPSArMHgx
MDAwXzAwMDBfMDAwMF8wMDAwXzAwMDBfMDAwMCAjIGZvcmNlIEJpZ251bQotICAgICAgZW5kCi0g
ICAgICBhc3NlcnRfcmFpc2UgUmFuZ2VFcnJvciBkbwotICAgICAgICBtLm9wdGlvbmFsX3VpbnQ2
NCA9IDFlNTAKLSAgICAgIGVuZAotICAgICAgYXNzZXJ0X3JhaXNlIFJhbmdlRXJyb3IgZG8KLSAg
ICAgICAgbS5vcHRpb25hbF91aW50NjQgPSAxLjUKLSAgICAgIGVuZAotICAgIGVuZAotCi0gICAg
ZGVmIHRlc3Rfc3RyZXNzX3Rlc3QKLSAgICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICAgIG0u
b3B0aW9uYWxfaW50MzIgPSA0MgotICAgICAgbS5vcHRpb25hbF9pbnQ2NCA9IDB4MTAwMDAwMDAw
Ci0gICAgICBtLm9wdGlvbmFsX3N0cmluZyA9ICJoZWxsbyB3b3JsZCIKLSAgICAgIDEwLnRpbWVz
IGRvIG0ucmVwZWF0ZWRfbXNnLnB1c2ggVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDQyKSBlbmQK
LSAgICAgIDEwLnRpbWVzIGRvIG0ucmVwZWF0ZWRfc3RyaW5nLnB1c2ggImhlbGxvIHdvcmxkIiBl
bmQKLQotICAgICAgZGF0YSA9IFRlc3RNZXNzYWdlLmVuY29kZShtKQotCi0gICAgICBsID0gMAot
ICAgICAgMTBfMDAwLnRpbWVzIGRvCi0gICAgICAgIG0gPSBUZXN0TWVzc2FnZS5kZWNvZGUoZGF0
YSkKLSAgICAgICAgZGF0YV9uZXcgPSBUZXN0TWVzc2FnZS5lbmNvZGUobSkKLSAgICAgICAgYXNz
ZXJ0IGRhdGFfbmV3ID09IGRhdGEKLSAgICAgICAgZGF0YSA9IGRhdGFfbmV3Ci0gICAgICBlbmQK
LSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X3JlZmxlY3Rpb24KLSAgICAgIG0gPSBUZXN0TWVzc2Fn
ZS5uZXcoOm9wdGlvbmFsX2ludDMyID0+IDEyMzQpCi0gICAgICBtc2dkZWYgPSBtLmNsYXNzLmRl
c2NyaXB0b3IKLSAgICAgIGFzc2VydCBtc2dkZWYuY2xhc3MgPT0gR29vZ2xlOjpQcm90b2J1Zjo6
RGVzY3JpcHRvcgotICAgICAgYXNzZXJ0IG1zZ2RlZi5hbnk/IHt8ZmllbGR8IGZpZWxkLm5hbWUg
PT0gIm9wdGlvbmFsX2ludDMyIn0KLSAgICAgIG9wdGlvbmFsX2ludDMyID0gbXNnZGVmLmxvb2t1
cCAib3B0aW9uYWxfaW50MzIiCi0gICAgICBhc3NlcnQgb3B0aW9uYWxfaW50MzIuY2xhc3MgPT0g
R29vZ2xlOjpQcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yCi0gICAgICBhc3NlcnQgb3B0aW9uYWxf
aW50MzIgIT0gbmlsCi0gICAgICBhc3NlcnQgb3B0aW9uYWxfaW50MzIubmFtZSA9PSAib3B0aW9u
YWxfaW50MzIiCi0gICAgICBhc3NlcnQgb3B0aW9uYWxfaW50MzIudHlwZSA9PSA6aW50MzIKLSAg
ICAgIG9wdGlvbmFsX2ludDMyLnNldChtLCA1Njc4KQotICAgICAgYXNzZXJ0IG0ub3B0aW9uYWxf
aW50MzIgPT0gNTY3OAotICAgICAgbS5vcHRpb25hbF9pbnQzMiA9IDEwMDAKLSAgICAgIGFzc2Vy
dCBvcHRpb25hbF9pbnQzMi5nZXQobSkgPT0gMTAwMAotCi0gICAgICBvcHRpb25hbF9tc2cgPSBt
c2dkZWYubG9va3VwICJvcHRpb25hbF9tc2ciCi0gICAgICBhc3NlcnQgb3B0aW9uYWxfbXNnLnN1
YnR5cGUgPT0gVGVzdE1lc3NhZ2UyLmRlc2NyaXB0b3IKLQotICAgICAgb3B0aW9uYWxfbXNnLnNl
dChtLCBvcHRpb25hbF9tc2cuc3VidHlwZS5tc2djbGFzcy5uZXcpCi0KLSAgICAgIGFzc2VydCBt
c2dkZWYubXNnY2xhc3MgPT0gVGVzdE1lc3NhZ2UKLQotICAgICAgb3B0aW9uYWxfZW51bSA9IG1z
Z2RlZi5sb29rdXAgIm9wdGlvbmFsX2VudW0iCi0gICAgICBhc3NlcnQgb3B0aW9uYWxfZW51bS5z
dWJ0eXBlID09IFRlc3RFbnVtLmRlc2NyaXB0b3IKLSAgICAgIGFzc2VydCBvcHRpb25hbF9lbnVt
LnN1YnR5cGUuY2xhc3MgPT0gR29vZ2xlOjpQcm90b2J1Zjo6RW51bURlc2NyaXB0b3IKLSAgICAg
IG9wdGlvbmFsX2VudW0uc3VidHlwZS5lYWNoIGRvIHxrLCB2fAotICAgICAgICAjIHNldCB3aXRo
IGludGVnZXIsIGNoZWNrIHJlc29sdXRpb24gdG8gc3ltYm9saWMgbmFtZQotICAgICAgICBvcHRp
b25hbF9lbnVtLnNldChtLCB2KQotICAgICAgICBhc3NlcnQgb3B0aW9uYWxfZW51bS5nZXQobSkg
PT0gawotICAgICAgZW5kCi0gICAgZW5kCi0KLSAgICBkZWYgdGVzdF9qc29uCi0gICAgICAjIFRP
RE86IEZpeCBKU09OIGluIEpSdWJ5IHZlcnNpb24uCi0gICAgICByZXR1cm4gaWYgUlVCWV9QTEFU
Rk9STSA9PSAiamF2YSIKLSAgICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcoOm9wdGlvbmFsX2ludDMy
ID0+IDEyMzQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDpvcHRpb25hbF9pbnQ2NCA9PiAt
MHgxXzAwMDBfMDAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOm9wdGlvbmFsX3VpbnQz
MiA9PiAweDgwMDBfMDAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOm9wdGlvbmFsX3Vp
bnQ2NCA9PiAweGZmZmZfZmZmZl9mZmZmX2ZmZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IDpvcHRpb25hbF9ib29sID0+IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDpvcHRp
b25hbF9mbG9hdCA9PiAxLjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDpvcHRpb25hbF9k
b3VibGUgPT4gLTFlMTAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICA6b3B0aW9uYWxfc3Ry
aW5nID0+ICJUZXN0IHN0cmluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDpvcHRpb25h
bF9ieXRlcyA9PiBbIkZGRkZGRkZGIl0ucGFjaygnSConKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgOm9wdGlvbmFsX21zZyA9PiBUZXN0TWVzc2FnZTIubmV3KDpmb28gPT4gNDIpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICA6cmVwZWF0ZWRfaW50MzIgPT4gWzEsIDIsIDMsIDRdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICA6cmVwZWF0ZWRfc3RyaW5nID0+IFsiYSIsICJiIiwg
ImMiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOnJlcGVhdGVkX2Jvb2wgPT4gW3RydWUs
IGZhbHNlLCB0cnVlLCBmYWxzZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDpyZXBlYXRl
ZF9tc2cgPT4gW1Rlc3RNZXNzYWdlMi5uZXcoOmZvbyA9PiAxKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDIpXSkK
LQotICAgICAganNvbl90ZXh0ID0gVGVzdE1lc3NhZ2UuZW5jb2RlX2pzb24obSkKLSAgICAgIG0y
ID0gVGVzdE1lc3NhZ2UuZGVjb2RlX2pzb24oanNvbl90ZXh0KQotICAgICAgYXNzZXJ0IG0gPT0g
bTIKLQotICAgICAgIyBDcmFzaCBjYXNlIGZyb20gR2l0SHViIGlzc3VlIDI4My4KLSAgICAgIGJh
ciA9IEJhci5uZXcobXNnOiAiYmFyIikKLSAgICAgIGJhejEgPSBCYXoubmV3KG1zZzogImJheiIp
Ci0gICAgICBiYXoyID0gQmF6Lm5ldyhtc2c6ICJxdXV4IikKLSAgICAgIEZvby5lbmNvZGVfanNv
bihGb28ubmV3KQotICAgICAgRm9vLmVuY29kZV9qc29uKEZvby5uZXcoYmFyOiBiYXIpKQotICAg
ICAgRm9vLmVuY29kZV9qc29uKEZvby5uZXcoYmFyOiBiYXIsIGJhejogW2JhejEsIGJhejJdKSkK
LSAgICBlbmQKLQotICAgIGRlZiB0ZXN0X2pzb25fbWFwcwotICAgICAgIyBUT0RPOiBGaXggSlNP
TiBpbiBKUnVieSB2ZXJzaW9uLgotICAgICAgcmV0dXJuIGlmIFJVQllfUExBVEZPUk0gPT0gImph
dmEiCi0gICAgICBtID0gTWFwTWVzc2FnZS5uZXcoOm1hcF9zdHJpbmdfaW50MzIgPT4geyJhIiA9
PiAxfSkKLSAgICAgIGV4cGVjdGVkID0gJ3sibWFwU3RyaW5nSW50MzIiOnsiYSI6MX0sIm1hcFN0
cmluZ01zZyI6e319JwotICAgICAgZXhwZWN0ZWRfcHJlc2VydmUgPSAneyJtYXBfc3RyaW5nX2lu
dDMyIjp7ImEiOjF9LCJtYXBfc3RyaW5nX21zZyI6e319JwotICAgICAgYXNzZXJ0IE1hcE1lc3Nh
Z2UuZW5jb2RlX2pzb24obSkgPT0gZXhwZWN0ZWQKLQotICAgICAganNvbiA9IE1hcE1lc3NhZ2Uu
ZW5jb2RlX2pzb24obSwgOnByZXNlcnZlX3Byb3RvX2ZpZWxkbmFtZXMgPT4gdHJ1ZSkKLSAgICAg
IGFzc2VydCBqc29uID09IGV4cGVjdGVkX3ByZXNlcnZlCi0KLSAgICAgIG0yID0gTWFwTWVzc2Fn
ZS5kZWNvZGVfanNvbihNYXBNZXNzYWdlLmVuY29kZV9qc29uKG0pKQotICAgICAgYXNzZXJ0IG0g
PT0gbTIKLSAgICBlbmQKLSAgZW5kCi1lbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS90ZXN0cy9nZW5lcmF0
ZWRfY29kZS5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvcnVieS90ZXN0cy9nZW5lcmF0ZWRfY29kZS5wcm90bwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDJkODJhNmJhYzdlZmU4YjllYjhmMTE2MjJiZTFjYjYyYzM1
M2I3Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1Ynkv
dGVzdHMvZ2VuZXJhdGVkX2NvZGUucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBA
Ci1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBBLkIuQzsKLQotbWVzc2FnZSBUZXN0TWVz
c2FnZSB7Ci0gIGludDMyIG9wdGlvbmFsX2ludDMyID0gMTsKLSAgaW50NjQgb3B0aW9uYWxfaW50
NjQgPSAyOwotICB1aW50MzIgb3B0aW9uYWxfdWludDMyID0gMzsKLSAgdWludDY0IG9wdGlvbmFs
X3VpbnQ2NCA9IDQ7Ci0gIGJvb2wgb3B0aW9uYWxfYm9vbCA9IDU7Ci0gIGRvdWJsZSBvcHRpb25h
bF9kb3VibGUgPSA2OwotICBmbG9hdCBvcHRpb25hbF9mbG9hdCA9IDc7Ci0gIHN0cmluZyBvcHRp
b25hbF9zdHJpbmcgPSA4OwotICBieXRlcyBvcHRpb25hbF9ieXRlcyA9IDk7Ci0gIFRlc3RFbnVt
IG9wdGlvbmFsX2VudW0gPSAxMDsKLSAgVGVzdE1lc3NhZ2Ugb3B0aW9uYWxfbXNnID0gMTE7Ci0K
LSAgcmVwZWF0ZWQgaW50MzIgcmVwZWF0ZWRfaW50MzIgPSAyMTsKLSAgcmVwZWF0ZWQgaW50NjQg
cmVwZWF0ZWRfaW50NjQgPSAyMjsKLSAgcmVwZWF0ZWQgdWludDMyIHJlcGVhdGVkX3VpbnQzMiA9
IDIzOwotICByZXBlYXRlZCB1aW50NjQgcmVwZWF0ZWRfdWludDY0ID0gMjQ7Ci0gIHJlcGVhdGVk
IGJvb2wgcmVwZWF0ZWRfYm9vbCA9IDI1OwotICByZXBlYXRlZCBkb3VibGUgcmVwZWF0ZWRfZG91
YmxlID0gMjY7Ci0gIHJlcGVhdGVkIGZsb2F0IHJlcGVhdGVkX2Zsb2F0ID0gMjc7Ci0gIHJlcGVh
dGVkIHN0cmluZyByZXBlYXRlZF9zdHJpbmcgPSAyODsKLSAgcmVwZWF0ZWQgYnl0ZXMgcmVwZWF0
ZWRfYnl0ZXMgPSAyOTsKLSAgcmVwZWF0ZWQgVGVzdEVudW0gcmVwZWF0ZWRfZW51bSA9IDMwOwot
ICByZXBlYXRlZCBUZXN0TWVzc2FnZSByZXBlYXRlZF9tc2cgPSAzMTsKLQotICBvbmVvZiBteV9v
bmVvZiB7Ci0gICAgaW50MzIgb25lb2ZfaW50MzIgPSA0MTsKLSAgICBpbnQ2NCBvbmVvZl9pbnQ2
NCA9IDQyOwotICAgIHVpbnQzMiBvbmVvZl91aW50MzIgPSA0MzsKLSAgICB1aW50NjQgb25lb2Zf
dWludDY0ID0gNDQ7Ci0gICAgYm9vbCBvbmVvZl9ib29sID0gNDU7Ci0gICAgZG91YmxlIG9uZW9m
X2RvdWJsZSA9IDQ2OwotICAgIGZsb2F0IG9uZW9mX2Zsb2F0ID0gNDc7Ci0gICAgc3RyaW5nIG9u
ZW9mX3N0cmluZyA9IDQ4OwotICAgIGJ5dGVzIG9uZW9mX2J5dGVzID0gNDk7Ci0gICAgVGVzdEVu
dW0gb25lb2ZfZW51bSA9IDUwOwotICAgIFRlc3RNZXNzYWdlIG9uZW9mX21zZyA9IDUxOwotICB9
Ci0KLSAgbWFwPGludDMyLCBzdHJpbmc+IG1hcF9pbnQzMl9zdHJpbmcgPSA2MTsKLSAgbWFwPGlu
dDY0LCBzdHJpbmc+IG1hcF9pbnQ2NF9zdHJpbmcgPSA2MjsKLSAgbWFwPHVpbnQzMiwgc3RyaW5n
PiBtYXBfdWludDMyX3N0cmluZyA9IDYzOwotICBtYXA8dWludDY0LCBzdHJpbmc+IG1hcF91aW50
NjRfc3RyaW5nID0gNjQ7Ci0gIG1hcDxib29sLCBzdHJpbmc+IG1hcF9ib29sX3N0cmluZyA9IDY1
OwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IG1hcF9zdHJpbmdfc3RyaW5nID0gNjY7Ci0gIG1hcDxz
dHJpbmcsIFRlc3RNZXNzYWdlPiBtYXBfc3RyaW5nX21zZyA9IDY3OwotICBtYXA8c3RyaW5nLCBU
ZXN0RW51bT4gbWFwX3N0cmluZ19lbnVtID0gNjg7Ci0gIG1hcDxzdHJpbmcsIGludDMyPiBtYXBf
c3RyaW5nX2ludDMyID0gNjk7Ci0gIG1hcDxzdHJpbmcsIGJvb2w+IG1hcF9zdHJpbmdfYm9vbCA9
IDcwOwotCi0gIG1lc3NhZ2UgTmVzdGVkTWVzc2FnZSB7Ci0gICAgaW50MzIgZm9vID0gMTsKLSAg
fQotCi0gIE5lc3RlZE1lc3NhZ2UgbmVzdGVkX21lc3NhZ2UgPSA4MDsKLX0KLQotZW51bSBUZXN0
RW51bSB7Ci0gIERlZmF1bHQgPSAwOwotICBBID0gMTsKLSAgQiA9IDI7Ci0gIEMgPSAzOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9ydWJ5L3Rlc3RzL2dlbmVyYXRlZF9jb2RlX3Rlc3QucmIgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvdGVzdHMv
Z2VuZXJhdGVkX2NvZGVfdGVzdC5yYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFl
ZjM1N2ExMGEzOThmZjVkMWY3OTFhYTU5ZWYwZmE4ODhiZTk3OS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvdGVzdHMvZ2VuZXJhdGVkX2NvZGVfdGVz
dC5yYgorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMhL3Vzci9iaW4vcnVieQotCi0j
IGdlbmVyYXRlZF9jb2RlLnJiIGlzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGlzIHRlc3Qu
Ci0kTE9BRF9QQVRILnVuc2hpZnQoRmlsZS5leHBhbmRfcGF0aChGaWxlLmRpcm5hbWUoX19GSUxF
X18pKSkKLQotcmVxdWlyZSAnZ2VuZXJhdGVkX2NvZGUnCi1yZXF1aXJlICd0ZXN0L3VuaXQnCi0K
LWNsYXNzIEdlbmVyYXRlZENvZGVUZXN0IDwgVGVzdDo6VW5pdDo6VGVzdENhc2UKLSAgZGVmIHRl
c3RfZ2VuZXJhdGVkX21zZwotICAgICMganVzdCB0ZXN0IHRoYXQgd2UgY2FuIGluc3RhbnRpYXRl
IHRoZSBtZXNzYWdlLiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QKLSAgICAjIGlzIHRvIGVuc3Vy
ZSB0aGF0IHRoZSBvdXRwdXQgb2YgdGhlIGNvZGUgZ2VuZXJhdG9yIGlzIHZhbGlkIFJ1YnkgYW5k
Ci0gICAgIyBzdWNjZXNzZnVsbHkgY3JlYXRlcyBtZXNzYWdlIGRlZmluaXRpb25zIGFuZCBjbGFz
c2VzLCBub3QgdG8gdGVzdCBldmVyeQotICAgICMgYXNwZWN0IG9mIHRoZSBleHRlbnNpb24gKGJh
c2ljLnJiIGlzIGZvciB0aGF0KS4KLSAgICBtID0gQTo6Qjo6Qzo6VGVzdE1lc3NhZ2UubmV3KCkK
LSAgZW5kCi1lbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS90ZXN0cy9yZXBlYXRlZF9maWVsZF90ZXN0LnJi
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9ydWJ5L3Rlc3RzL3JlcGVhdGVkX2ZpZWxkX3Rlc3QucmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI1NzI3YjdiMjgyYzk2OWM2NmU4OGRlZmJmMjE3OTg1MjY4MGI5YzAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9ydWJ5L3Rlc3RzL3JlcGVh
dGVkX2ZpZWxkX3Rlc3QucmIKKysrIC9kZXYvbnVsbApAQCAtMSw2NDAgKzAsMCBAQAotIyEvdXNy
L2Jpbi9ydWJ5Ci0KLXJlcXVpcmUgJ2dvb2dsZS9wcm90b2J1ZicKLXJlcXVpcmUgJ3Rlc3QvdW5p
dCcKLQotY2xhc3MgUmVwZWF0ZWRGaWVsZFRlc3QgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQotCi0g
IGRlZiB0ZXN0X2FjdHNfbGlrZV9lbnVtZXJhdG9yCi0gICAgbSA9IFRlc3RNZXNzYWdlLm5ldwot
ICAgIChFbnVtZXJhYmxlLmluc3RhbmNlX21ldGhvZHMgLSBUZXN0TWVzc2FnZS5uZXcucmVwZWF0
ZWRfc3RyaW5nLm1ldGhvZHMpLmVhY2ggZG8gfG1ldGhvZF9uYW1lfAotICAgICAgYXNzZXJ0IG0u
cmVwZWF0ZWRfc3RyaW5nLnJlc3BvbmRfdG8/KG1ldGhvZF9uYW1lKSA9PSB0cnVlLCAiZG9lcyBu
b3QgcmVzcG9uZCB0byAje21ldGhvZF9uYW1lfSIKLSAgICBlbmQKLSAgZW5kCi0KLSAgZGVmIHRl
c3RfYWN0c19saWtlX2FuX2FycmF5Ci0gICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotICAgIGFycl9t
ZXRob2RzID0gKFtdLm1ldGhvZHMgLSBUZXN0TWVzc2FnZS5uZXcucmVwZWF0ZWRfc3RyaW5nLm1l
dGhvZHMpCi0gICAgIyBqUnVieSBhZGRpdGlvbnMgdG8gdGhlIEFycmF5IGNsYXNzIHRoYXQgd2Ug
Y2FuIGlnbm9yZQotICAgIGFycl9tZXRob2RzIC09IFsgOmluZGljZXMsIDppdGVyX2Zvcl9lYWNo
LCA6aXRlcl9mb3JfZWFjaF9pbmRleCwKLSAgICAgIDppdGVyX2Zvcl9lYWNoX3dpdGhfaW5kZXgs
IDpkaW1lbnNpb25zLCA6Y29weV9kYXRhLCA6Y29weV9kYXRhX3NpbXBsZSwKLSAgICAgIDpuaXRl
bXMsIDppdGVyX2Zvcl9yZXZlcnNlX2VhY2gsIDppbmRleGVzXQotICAgIGFycl9tZXRob2RzLmVh
Y2ggZG8gfG1ldGhvZF9uYW1lfAotICAgICAgYXNzZXJ0IG0ucmVwZWF0ZWRfc3RyaW5nLnJlc3Bv
bmRfdG8/KG1ldGhvZF9uYW1lKSA9PSB0cnVlLCAiZG9lcyBub3QgcmVzcG9uZCB0byAje21ldGhv
ZF9uYW1lfSIKLSAgICBlbmQKLSAgZW5kCi0KLSAgZGVmIHRlc3RfZmlyc3QKLSAgICBtID0gVGVz
dE1lc3NhZ2UubmV3Ci0gICAgcmVwZWF0ZWRfZmllbGRfbmFtZXMoVGVzdE1lc3NhZ2UpLmVhY2gg
ZG8gfGZpZWxkX25hbWV8Ci0gICAgICBhc3NlcnRfbmlsIG0uc2VuZChmaWVsZF9uYW1lKS5maXJz
dAotICAgIGVuZAotICAgIGZpbGxfdGVzdF9tc2cobSkKLSAgICBhc3NlcnRfZXF1YWwgLTEwLCBt
LnJlcGVhdGVkX2ludDMyLmZpcnN0Ci0gICAgYXNzZXJ0X2VxdWFsIC0xXzAwMF8wMDAsIG0ucmVw
ZWF0ZWRfaW50NjQuZmlyc3QKLSAgICBhc3NlcnRfZXF1YWwgMTAsIG0ucmVwZWF0ZWRfdWludDMy
LmZpcnN0Ci0gICAgYXNzZXJ0X2VxdWFsIDFfMDAwXzAwMCwgbS5yZXBlYXRlZF91aW50NjQuZmly
c3QKLSAgICBhc3NlcnRfZXF1YWwgdHJ1ZSwgbS5yZXBlYXRlZF9ib29sLmZpcnN0Ci0gICAgYXNz
ZXJ0X2VxdWFsIC0xLjAxLCAgbS5yZXBlYXRlZF9mbG9hdC5maXJzdC5yb3VuZCgyKQotICAgIGFz
c2VydF9lcXVhbCAtMS4wMDAwMDAwMDAwMDAxLCBtLnJlcGVhdGVkX2RvdWJsZS5maXJzdAotICAg
IGFzc2VydF9lcXVhbCAnZm9vJywgbS5yZXBlYXRlZF9zdHJpbmcuZmlyc3QKLSAgICBhc3NlcnRf
ZXF1YWwgImJhciIuZW5jb2RlISgnQVNDSUktOEJJVCcpLCBtLnJlcGVhdGVkX2J5dGVzLmZpcnN0
Ci0gICAgYXNzZXJ0X2VxdWFsIFRlc3RNZXNzYWdlMi5uZXcoOmZvbyA9PiAxKSwgbS5yZXBlYXRl
ZF9tc2cuZmlyc3QKLSAgICBhc3NlcnRfZXF1YWwgOkEsIG0ucmVwZWF0ZWRfZW51bS5maXJzdAot
ICBlbmQKLQotCi0gIGRlZiB0ZXN0X2xhc3QKLSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAg
cmVwZWF0ZWRfZmllbGRfbmFtZXMoVGVzdE1lc3NhZ2UpLmVhY2ggZG8gfGZpZWxkX25hbWV8Ci0g
ICAgICBhc3NlcnRfbmlsIG0uc2VuZChmaWVsZF9uYW1lKS5maXJzdAotICAgIGVuZAotICAgIGZp
bGxfdGVzdF9tc2cobSkKLSAgICBhc3NlcnRfZXF1YWwgLTExLCBtLnJlcGVhdGVkX2ludDMyLmxh
c3QKLSAgICBhc3NlcnRfZXF1YWwgLTFfMDAwXzAwMSwgbS5yZXBlYXRlZF9pbnQ2NC5sYXN0Ci0g
ICAgYXNzZXJ0X2VxdWFsIDExLCBtLnJlcGVhdGVkX3VpbnQzMi5sYXN0Ci0gICAgYXNzZXJ0X2Vx
dWFsIDFfMDAwXzAwMSwgbS5yZXBlYXRlZF91aW50NjQubGFzdAotICAgIGFzc2VydF9lcXVhbCBm
YWxzZSwgbS5yZXBlYXRlZF9ib29sLmxhc3QKLSAgICBhc3NlcnRfZXF1YWwgLTEuMDIsIG0ucmVw
ZWF0ZWRfZmxvYXQubGFzdC5yb3VuZCgyKQotICAgIGFzc2VydF9lcXVhbCAtMS4wMDAwMDAwMDAw
MDAyLCBtLnJlcGVhdGVkX2RvdWJsZS5sYXN0Ci0gICAgYXNzZXJ0X2VxdWFsICdiYXInLCBtLnJl
cGVhdGVkX3N0cmluZy5sYXN0Ci0gICAgYXNzZXJ0X2VxdWFsICJmb28iLmVuY29kZSEoJ0FTQ0lJ
LThCSVQnKSwgbS5yZXBlYXRlZF9ieXRlcy5sYXN0Ci0gICAgYXNzZXJ0X2VxdWFsIFRlc3RNZXNz
YWdlMi5uZXcoOmZvbyA9PiAyKSwgbS5yZXBlYXRlZF9tc2cubGFzdAotICAgIGFzc2VydF9lcXVh
bCA6QiwgbS5yZXBlYXRlZF9lbnVtLmxhc3QKLSAgZW5kCi0KLQotICBkZWYgdGVzdF9wb3AKLSAg
ICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVwZWF0ZWRfZmllbGRfbmFtZXMoVGVzdE1lc3Nh
Z2UpLmVhY2ggZG8gfGZpZWxkX25hbWV8Ci0gICAgICBhc3NlcnRfbmlsIG0uc2VuZChmaWVsZF9u
YW1lKS5wb3AKLSAgICBlbmQKLSAgICBmaWxsX3Rlc3RfbXNnKG0pCi0KLSAgICBhc3NlcnRfZXF1
YWwgLTExLCBtLnJlcGVhdGVkX2ludDMyLnBvcAotICAgIGFzc2VydF9lcXVhbCAtMTAsIG0ucmVw
ZWF0ZWRfaW50MzIucG9wCi0gICAgYXNzZXJ0X2VxdWFsIC0xXzAwMF8wMDEsIG0ucmVwZWF0ZWRf
aW50NjQucG9wCi0gICAgYXNzZXJ0X2VxdWFsIC0xXzAwMF8wMDAsIG0ucmVwZWF0ZWRfaW50NjQu
cG9wCi0gICAgYXNzZXJ0X2VxdWFsIDExLCBtLnJlcGVhdGVkX3VpbnQzMi5wb3AKLSAgICBhc3Nl
cnRfZXF1YWwgMTAsIG0ucmVwZWF0ZWRfdWludDMyLnBvcAotICAgIGFzc2VydF9lcXVhbCAxXzAw
MF8wMDEsIG0ucmVwZWF0ZWRfdWludDY0LnBvcAotICAgIGFzc2VydF9lcXVhbCAxXzAwMF8wMDAs
IG0ucmVwZWF0ZWRfdWludDY0LnBvcAotICAgIGFzc2VydF9lcXVhbCBmYWxzZSwgbS5yZXBlYXRl
ZF9ib29sLnBvcAotICAgIGFzc2VydF9lcXVhbCB0cnVlLCBtLnJlcGVhdGVkX2Jvb2wucG9wCi0g
ICAgYXNzZXJ0X2VxdWFsIC0xLjAyLCAgbS5yZXBlYXRlZF9mbG9hdC5wb3Aucm91bmQoMikKLSAg
ICBhc3NlcnRfZXF1YWwgLTEuMDEsICBtLnJlcGVhdGVkX2Zsb2F0LnBvcC5yb3VuZCgyKQotICAg
IGFzc2VydF9lcXVhbCAtMS4wMDAwMDAwMDAwMDAyLCBtLnJlcGVhdGVkX2RvdWJsZS5wb3AKLSAg
ICBhc3NlcnRfZXF1YWwgLTEuMDAwMDAwMDAwMDAwMSwgbS5yZXBlYXRlZF9kb3VibGUucG9wCi0g
ICAgYXNzZXJ0X2VxdWFsICdiYXInLCBtLnJlcGVhdGVkX3N0cmluZy5wb3AKLSAgICBhc3NlcnRf
ZXF1YWwgJ2ZvbycsIG0ucmVwZWF0ZWRfc3RyaW5nLnBvcAotICAgIGFzc2VydF9lcXVhbCAiZm9v
Ii5lbmNvZGUhKCdBU0NJSS04QklUJyksIG0ucmVwZWF0ZWRfYnl0ZXMucG9wCi0gICAgYXNzZXJ0
X2VxdWFsICJiYXIiLmVuY29kZSEoJ0FTQ0lJLThCSVQnKSwgbS5yZXBlYXRlZF9ieXRlcy5wb3AK
LSAgICBhc3NlcnRfZXF1YWwgVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDIpLCBtLnJlcGVhdGVk
X21zZy5wb3AKLSAgICBhc3NlcnRfZXF1YWwgVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDEpLCBt
LnJlcGVhdGVkX21zZy5wb3AKLSAgICBhc3NlcnRfZXF1YWwgOkIsIG0ucmVwZWF0ZWRfZW51bS5w
b3AKLSAgICBhc3NlcnRfZXF1YWwgOkEsIG0ucmVwZWF0ZWRfZW51bS5wb3AKLSAgICByZXBlYXRl
ZF9maWVsZF9uYW1lcyhUZXN0TWVzc2FnZSkuZWFjaCBkbyB8ZmllbGRfbmFtZXwKLSAgICAgIGFz
c2VydF9uaWwgbS5zZW5kKGZpZWxkX25hbWUpLnBvcAotICAgIGVuZAotCi0gICAgZmlsbF90ZXN0
X21zZyhtKQotICAgIGFzc2VydF9lcXVhbCBbJ2JhcicsICdmb28nXSwgbS5yZXBlYXRlZF9zdHJp
bmcucG9wKDIpCi0gICAgYXNzZXJ0X25pbCBtLnJlcGVhdGVkX3N0cmluZy5wb3AKLSAgZW5kCi0K
LQotICBkZWYgdGVzdF9lYWNoCi0gICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotICAgIDUudGltZXN7
fGl8IG0ucmVwZWF0ZWRfc3RyaW5nIDw8ICdzdHJpbmcnIH0KLSAgICBjb3VudCA9IDAKLSAgICBt
LnJlcGVhdGVkX3N0cmluZy5lYWNoIGRvIHx2YWx8Ci0gICAgICBhc3NlcnRfZXF1YWwgJ3N0cmlu
ZycsIHZhbAotICAgICAgY291bnQgKz0gMQotICAgIGVuZAotICAgIGFzc2VydF9lcXVhbCA1LCBj
b3VudAotICAgIHJlc3VsdCA9IG0ucmVwZWF0ZWRfc3RyaW5nLmVhY2h7fHZhbHwgdmFsICsgJ19q
dW5rJ30KLSAgICBhc3NlcnRfZXF1YWwgWydzdHJpbmcnXSAqIDUsIHJlc3VsdAotICBlbmQKLQot
Ci0gIGRlZiB0ZXN0X2VtcHR5PwotICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICBhc3NlcnRf
ZXF1YWwgdHJ1ZSwgbS5yZXBlYXRlZF9zdHJpbmcuZW1wdHk/Ci0gICAgbS5yZXBlYXRlZF9zdHJp
bmcgPDwgJ2ZvbycKLSAgICBhc3NlcnRfZXF1YWwgZmFsc2UsIG0ucmVwZWF0ZWRfc3RyaW5nLmVt
cHR5PwotICAgIG0ucmVwZWF0ZWRfc3RyaW5nIDw8ICdiYXInCi0gICAgYXNzZXJ0X2VxdWFsIGZh
bHNlLCBtLnJlcGVhdGVkX3N0cmluZy5lbXB0eT8KLSAgZW5kCi0KLSAgZGVmIHRlc3RfYXJyYXlf
YWNjZXNzb3IKLSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9ICV3
KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xv
bmUKLSAgICBjaGVja19zZWxmX21vZGlmeWluZ19tZXRob2QobS5yZXBlYXRlZF9zdHJpbmcsIHJl
ZmVyZW5jZV9hcnIpIGRvIHxhcnJ8Ci0gICAgICBhcnJbMV0KLSAgICBlbmQKLSAgICBjaGVja19z
ZWxmX21vZGlmeWluZ19tZXRob2QobS5yZXBlYXRlZF9zdHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRv
IHxhcnJ8Ci0gICAgICBhcnJbLTJdCi0gICAgZW5kCi0gICAgY2hlY2tfc2VsZl9tb2RpZnlpbmdf
bWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8YXJyfAotICAgICAg
YXJyWzIwXQotICAgIGVuZAotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVh
dGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyclsxLCAyXQotICAg
IGVuZAotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywg
cmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyclswLi4yXQotICAgIGVuZAotICAgIGNo
ZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2Fy
cikgZG8gfGFycnwKLSAgICAgIGFyclstMSwgMV0KLSAgICBlbmQKLSAgICBjaGVja19zZWxmX21v
ZGlmeWluZ19tZXRob2QobS5yZXBlYXRlZF9zdHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRvIHxhcnJ8
Ci0gICAgICBhcnJbMTAsIDEyXQotICAgIGVuZAotICBlbmQKLQotICBkZWYgdGVzdF9hcnJheV9z
ZXR0b3IKLSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9ICV3KGZv
byBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xvbmUK
LQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVm
ZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyclsxXSA9ICdqdW5rJwotICAgIGVuZAotICAg
IGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNl
X2FycikgZG8gfGFycnwKLSAgICAgIGFyclstMl0gPSAnc25hcHB5JwotICAgIGVuZAotICAgIGNo
ZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2Fy
cikgZG8gfGFycnwKLSAgICAgIGFyclszXSA9ICcnCi0gICAgZW5kCi0gICAgIyBzbGlnaHQgZGV2
aWF0aW9uOyB3ZSBhcmUgc3Ryb25nbHkgdHlwZWQsIGFuZCBuaWwgaXMgbm90IGFsbG93ZWQKLSAg
ICAjIGZvciBzdHJpbmcgdHlwZXM7Ci0gICAgbS5yZXBlYXRlZF9zdHJpbmdbNV0gPSAnc3BhY2lv
dXMnCi0gICAgYXNzZXJ0X2VxdWFsIFsiZm9vIiwgInNuYXBweSIsICJiYXoiLCAiIiwgIiIsICJz
cGFjaW91cyJdLCBtLnJlcGVhdGVkX3N0cmluZwotCi0gICAgI21ha2Ugc3VyZSBpdCBzZXN0cyB0
aGUgZGVmYXVsdCB0eXBlcyBmb3Igb3RoZXIgZmllbGRzIGJlc2lkZXMgc3RyaW5ncwotICAgICV3
KHJlcGVhdGVkX2ludDMyIHJlcGVhdGVkX2ludDY0IHJlcGVhdGVkX3VpbnQzMiByZXBlYXRlZF91
aW50NjQpLmVhY2ggZG8gfGZpZWxkX25hbWV8Ci0gICAgICBtLnNlbmQoZmllbGRfbmFtZSlbM10g
PSAxMAotICAgICAgYXNzZXJ0X2VxdWFsIFswLDAsMCwxMF0sIG0uc2VuZChmaWVsZF9uYW1lKQot
ICAgIGVuZAotICAgIG0ucmVwZWF0ZWRfZmxvYXRbM10gPSAxMC4xCi0gICAgI3dvbmt5IG1yaSBm
bG9hdCBoYW5kbGluZwotICAgIGFzc2VydF9lcXVhbCBbMCwwLDBdLCBtLnJlcGVhdGVkX2Zsb2F0
LnRvX2FbMC4uMl0KLSAgICBhc3NlcnRfZXF1YWwgMTAuMSwgbS5yZXBlYXRlZF9mbG9hdFszXS5y
b3VuZCgxKQotICAgIG0ucmVwZWF0ZWRfZG91YmxlWzNdID0gMTAuMQotICAgIGFzc2VydF9lcXVh
bCBbMCwwLDAsMTAuMV0sIG0ucmVwZWF0ZWRfZG91YmxlCi0gICAgbS5yZXBlYXRlZF9ib29sWzNd
ID0gdHJ1ZQotICAgIGFzc2VydF9lcXVhbCBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sIG0u
cmVwZWF0ZWRfYm9vbAotICAgIG0ucmVwZWF0ZWRfYnl0ZXNbM10gPSAiYmFyIi5lbmNvZGUhKCdB
U0NJSS04QklUJykKLSAgICBhc3NlcnRfZXF1YWwgWycnLCAnJywgJycsICJiYXIiLmVuY29kZSEo
J0FTQ0lJLThCSVQnKV0sIG0ucmVwZWF0ZWRfYnl0ZXMKLSAgICBtLnJlcGVhdGVkX21zZ1szXSA9
IFRlc3RNZXNzYWdlMi5uZXcoOmZvbyA9PiAxKQotICAgIGFzc2VydF9lcXVhbCBbbmlsLCBuaWws
IG5pbCwgVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDEpXSwgbS5yZXBlYXRlZF9tc2cKLSAgICBt
LnJlcGVhdGVkX2VudW1bM10gPSA6QQotICAgIGFzc2VydF9lcXVhbCBbOkRlZmF1bHQsIDpEZWZh
dWx0LCA6RGVmYXVsdCwgOkFdLCBtLnJlcGVhdGVkX2VudW0KLQotICAgICMgY2hlY2tfc2VsZl9t
b2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8YXJy
fAotICAgICMgICBhcnJbMjBdID0gJ3NwYWNpb3VzJwotICAgICMgZW5kCi0gICAgIyBUT0RPOiBh
Y2Nlc3NvciBkb2Vzbid0IGFsbG93IG90aGVyIHJ1YnktbGlrZSBtZXRob2RzCi0gICAgIyBjaGVj
a19zZWxmX21vZGlmeWluZ19tZXRob2QobS5yZXBlYXRlZF9zdHJpbmcsIHJlZmVyZW5jZV9hcnIp
IGRvIHxhcnJ8Ci0gICAgIyAgIGFyclsxLCAyXSA9ICdmaXp6JwotICAgICMgZW5kCi0gICAgIyBj
aGVja19zZWxmX21vZGlmeWluZ19tZXRob2QobS5yZXBlYXRlZF9zdHJpbmcsIHJlZmVyZW5jZV9h
cnIpIGRvIHxhcnJ8Ci0gICAgIyAgIGFyclswLi4yXSA9ICdidXp6JwotICAgICMgZW5kCi0gIGVu
ZAotCi0gIGRlZiB0ZXN0X3B1c2gKLSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVmZXJl
bmNlX2FyciA9ICV3KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9IHJlZmVy
ZW5jZV9hcnIuY2xvbmUKLQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVh
dGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5wdXNoKCdmaXp6
JykKLSAgICBlbmQKLSAgICBjaGVja19zZWxmX21vZGlmeWluZ19tZXRob2QobS5yZXBlYXRlZF9z
dHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRvIHxhcnJ8Ci0gICAgICBhcnIgPDwgJ2ZpenonCi0gICAg
ZW5kCi0gICAgI1RPRE86IHB1c2ggc2hvdWxkIHN1cHBvcnQgbXVsdGlwbGUKLSAgICAjIGNoZWNr
X3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2Fycikg
ZG8gfGFycnwKLSAgICAjICAgYXJyLnB1c2goJ2ZpenonLCAnYnV6eicpCi0gICAgIyBlbmQKLSAg
ZW5kCi0KLSAgZGVmIHRlc3RfY2xlYXIKLSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVm
ZXJlbmNlX2FyciA9ICV3KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9IHJl
ZmVyZW5jZV9hcnIuY2xvbmUKLQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJl
cGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5jbGVhcgot
ICAgIGVuZAotICBlbmQKLQotICBkZWYgdGVzdF9jb25jYXQKLSAgICBtID0gVGVzdE1lc3NhZ2Uu
bmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9ICV3KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRf
c3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xvbmUKLSAgICBtLnJlcGVhdGVkX3N0cmluZy5jb25j
YXQoWydmaXp6JywgJ2J1enonXSkKLSAgICBhc3NlcnRfZXF1YWwgJXcoZm9vIGJhciBiYXogZml6
eiBidXp6KSwgbS5yZXBlYXRlZF9zdHJpbmcKLSAgICAjVE9ETzogY29uY2F0IHNob3VsZCByZXR1
cm4gdGhlIG9yaWcgYXJyYXkKLSAgICAjIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJl
cGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAjICAgYXJyLmNvbmNh
dChbJ2ZpenonLCAnYnV6eiddKQotICAgICMgZW5kCi0gIGVuZAotCi0gIGRlZiB0ZXN0X2VxdWFs
Ci0gICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotICAgIHJlZmVyZW5jZV9hcnIgPSAldyhmb28gYmFy
IGJheikKLSAgICBtLnJlcGVhdGVkX3N0cmluZyArPSByZWZlcmVuY2VfYXJyLmNsb25lCi0gICAg
YXNzZXJ0X2VxdWFsIHJlZmVyZW5jZV9hcnIsIG0ucmVwZWF0ZWRfc3RyaW5nCi0gICAgcmVmZXJl
bmNlX2FyciA8PCAnZml6eicKLSAgICBhc3NlcnRfbm90X2VxdWFsIHJlZmVyZW5jZV9hcnIsIG0u
cmVwZWF0ZWRfc3RyaW5nCi0gICAgbS5yZXBlYXRlZF9zdHJpbmcgPDwgJ2ZpenonCi0gICAgYXNz
ZXJ0X2VxdWFsIHJlZmVyZW5jZV9hcnIsIG0ucmVwZWF0ZWRfc3RyaW5nCi0gIGVuZAotCi0gIGRl
ZiB0ZXN0X2hhc2gKLSAgICAjIGp1c3QgYSBzYW5pdHkgY2hlY2sKLSAgICBtID0gVGVzdE1lc3Nh
Z2UubmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9ICV3KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0
ZWRfc3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xvbmUKLSAgICBhc3NlcnQgbS5yZXBlYXRlZF9z
dHJpbmcuaGFzaC5pc19hPyhJbnRlZ2VyKQotICAgIGhhc2ggPSBtLnJlcGVhdGVkX3N0cmluZy5o
YXNoCi0gICAgYXNzZXJ0X2VxdWFsIGhhc2gsIG0ucmVwZWF0ZWRfc3RyaW5nLmhhc2gKLSAgICBt
LnJlcGVhdGVkX3N0cmluZyA8PCAnaicKLSAgICBhc3NlcnRfbm90X2VxdWFsIGhhc2gsIG0ucmVw
ZWF0ZWRfc3RyaW5nLmhhc2gKLSAgZW5kCi0KLSAgZGVmIHRlc3RfcGx1cwotICAgIG0gPSBUZXN0
TWVzc2FnZS5uZXcKLSAgICByZWZlcmVuY2VfYXJyID0gJXcoZm9vIGJhciBiYXopCi0gICAgbS5y
ZXBlYXRlZF9zdHJpbmcgKz0gcmVmZXJlbmNlX2Fyci5jbG9uZQotCi0gICAgY2hlY2tfc2VsZl9t
b2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8YXJy
fAotICAgICAgYXJyICsgWydmaXp6JywgJ2J1enonXQotICAgIGVuZAotICAgIGNoZWNrX3NlbGZf
bW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFy
cnwKLSAgICAgIGFyciArPSBbJ2ZpenonLCAnYnV6eiddCi0gICAgZW5kCi0gIGVuZAotCi0gIGRl
ZiB0ZXN0X3JlcGxhY2UKLSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVmZXJlbmNlX2Fy
ciA9ICV3KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9IHJlZmVyZW5jZV9h
cnIuY2xvbmUKLQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0
cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5yZXBsYWNlKFsnZml6eics
ICdidXp6J10pCi0gICAgZW5kCi0gIGVuZAotCi0gIGRlZiB0ZXN0X3RvX2EKLSAgICBtID0gVGVz
dE1lc3NhZ2UubmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9ICV3KGZvbyBiYXIgYmF6KQotICAgIG0u
cmVwZWF0ZWRfc3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xvbmUKLQotICAgIGNoZWNrX3NlbGZf
bW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFy
cnwKLSAgICAgIGFyci50b19hCi0gICAgZW5kCi0gIGVuZAotCi0gIGRlZiB0ZXN0X3RvX2FyeQot
ICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICByZWZlcmVuY2VfYXJyID0gJXcoZm9vIGJhciBi
YXopCi0gICAgbS5yZXBlYXRlZF9zdHJpbmcgKz0gcmVmZXJlbmNlX2Fyci5jbG9uZQotCi0gICAg
Y2hlY2tfc2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2Vf
YXJyKSBkbyB8YXJyfAotICAgICAgYXJyLnRvX2FyeQotICAgIGVuZAotICBlbmQKLQotICAjIGVt
dWxhdGUgQXJyYXkgYmVoYXZpb3IKLSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICBk
ZWYgdGVzdF9jb2xsZWN0IQotICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICByZWZlcmVuY2Vf
YXJyID0gJXcoZm9vIGJhciBiYXopCi0gICAgbS5yZXBlYXRlZF9zdHJpbmcgKz0gcmVmZXJlbmNl
X2Fyci5jbG9uZQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0
cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5jb2xsZWN0IXt8eHwgeCAr
ICIhIiB9Ci0gICAgZW5kCi0gICAgY2hlY2tfc2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0
ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8YXJyfAotICAgICAgYXJyLmNvbGxlY3QhLndp
dGhfaW5kZXh7fHgsIGl8IHhbMC4uLmldIH0KLSAgICBlbmQKLSAgZW5kCi0KLSAgZGVmIHRlc3Rf
Y29tcGFjdCEKLSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgbS5yZXBlYXRlZF9tc2cgPDwg
VGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDEpCi0gICAgbS5yZXBlYXRlZF9tc2cgPDwgbmlsCi0g
ICAgbS5yZXBlYXRlZF9tc2cgPDwgVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDIpCi0gICAgcmVm
ZXJlbmNlX2FyciA9IG0ucmVwZWF0ZWRfc3RyaW5nLnRvX2EKLQotICAgIGNoZWNrX3NlbGZfbW9k
aWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwK
LSAgICAgIGFyci5jb21wYWN0IQotICAgIGVuZAotICBlbmQKLQotICBkZWYgdGVzdF9kZWxldGUK
LSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9ICV3KGZvbyBiYXIg
YmF6KQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xvbmUKLSAgICBj
aGVja19zZWxmX21vZGlmeWluZ19tZXRob2QobS5yZXBlYXRlZF9zdHJpbmcsIHJlZmVyZW5jZV9h
cnIpIGRvIHxhcnJ8Ci0gICAgICBhcnIuZGVsZXRlKCdiYXInKQotICAgIGVuZAotICAgIGNoZWNr
X3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2Fycikg
ZG8gfGFycnwKLSAgICAgIGFyci5kZWxldGUoJ25vcGUnKQotICAgIGVuZAotICAgIGNoZWNrX3Nl
bGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8g
fGFycnwKLSAgICAgIGFyci5kZWxldGUoJ25vcGUnKXsnd2l0aGluJ30KLSAgICBlbmQKLSAgZW5k
Ci0KLSAgZGVmIHRlc3RfZGVsZXRlX2F0Ci0gICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotICAgIHJl
ZmVyZW5jZV9hcnIgPSAldyhmb28gYmFyIGJheikKLSAgICBtLnJlcGVhdGVkX3N0cmluZyArPSBy
ZWZlcmVuY2VfYXJyLmNsb25lCi0gICAgY2hlY2tfc2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVw
ZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8YXJyfAotICAgICAgYXJyLmRlbGV0ZV9h
dCgyKQotICAgIGVuZAotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVk
X3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5kZWxldGVfYXQoMTAp
Ci0gICAgZW5kCi0gIGVuZAotCi0gIGRlZiB0ZXN0X2ZpbGwKLSAgICBtID0gVGVzdE1lc3NhZ2Uu
bmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9ICV3KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRf
c3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xvbmUKLQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5n
X21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAg
IGFyci5maWxsKCJ4IikKLSAgICBlbmQKLSAgICBjaGVja19zZWxmX21vZGlmeWluZ19tZXRob2Qo
bS5yZXBlYXRlZF9zdHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRvIHxhcnJ8Ci0gICAgICBhcnIuZmls
bCgieiIsIDIsIDIpCi0gICAgZW5kCi0gICAgY2hlY2tfc2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0u
cmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8YXJyfAotICAgICAgYXJyLmZpbGwo
InkiLCAwLi4xKQotICAgIGVuZAotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJl
cGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5maWxsIHsg
fGl8IChpKmkpLnRvX3MgfQotICAgIGVuZAotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhv
ZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5m
aWxsKC0yKSB7IHxpfCAoaSppKmkpLnRvX3MgfQotICAgIGVuZAotICBlbmQKLQotICBkZWYgdGVz
dF9mbGF0dGVuIQotICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICByZWZlcmVuY2VfYXJyID0g
JXcoZm9vIGJhciBiYXopCi0gICAgbS5yZXBlYXRlZF9zdHJpbmcgKz0gcmVmZXJlbmNlX2Fyci5j
bG9uZQotCi0gICAgY2hlY2tfc2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5n
LCByZWZlcmVuY2VfYXJyKSBkbyB8YXJyfAotICAgICAgYXJyLmZsYXR0ZW4hCi0gICAgZW5kCi0g
ICAgY2hlY2tfc2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVu
Y2VfYXJyKSBkbyB8YXJyfAotICAgICAgYXJyLmZsYXR0ZW4hKDEpCi0gICAgZW5kCi0gIGVuZAot
Ci0gIGRlZiB0ZXN0X2luc2VydAotICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICByZWZlcmVu
Y2VfYXJyID0gJXcoZm9vIGJhciBiYXopCi0gICAgbS5yZXBlYXRlZF9zdHJpbmcgKz0gcmVmZXJl
bmNlX2Fyci5jbG9uZQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVk
X3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5pbnNlcnQoMiwgJ2Zp
enonKQotICAgIGVuZAotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVk
X3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5pbnNlcnQoMywgJ2Zp
enonLCAnYnV6eicsICdiYXp6JykKLSAgICBlbmQKLSAgZW5kCi0KLSAgZGVmIHRlc3RfaW5zcGVj
dAotICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICBhc3NlcnRfZXF1YWwgJ1tdJywgbS5yZXBl
YXRlZF9zdHJpbmcuaW5zcGVjdAotICAgIG0ucmVwZWF0ZWRfc3RyaW5nIDw8ICdmb28nCi0gICAg
YXNzZXJ0X2VxdWFsIG0ucmVwZWF0ZWRfc3RyaW5nLnRvX2EuaW5zcGVjdCwgbS5yZXBlYXRlZF9z
dHJpbmcuaW5zcGVjdAotICAgIG0ucmVwZWF0ZWRfc3RyaW5nIDw8ICdiYXInCi0gICAgYXNzZXJ0
X2VxdWFsIG0ucmVwZWF0ZWRfc3RyaW5nLnRvX2EuaW5zcGVjdCwgbS5yZXBlYXRlZF9zdHJpbmcu
aW5zcGVjdAotICBlbmQKLQotICBkZWYgdGVzdF9yZXZlcnNlIQotICAgIG0gPSBUZXN0TWVzc2Fn
ZS5uZXcKLSAgICByZWZlcmVuY2VfYXJyID0gJXcoZm9vIGJhciBiYXopCi0gICAgbS5yZXBlYXRl
ZF9zdHJpbmcgKz0gcmVmZXJlbmNlX2Fyci5jbG9uZQotCi0gICAgY2hlY2tfc2VsZl9tb2RpZnlp
bmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8YXJyfAotICAg
ICAgYXJyLnJldmVyc2UhCi0gICAgZW5kCi0gIGVuZAotCi0gIGRlZiB0ZXN0X3JvdGF0ZSEKLSAg
ICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9ICV3KGZvbyBiYXIgYmF6
KQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xvbmUKLQotICAgIGNo
ZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2Fy
cikgZG8gfGFycnwKLSAgICAgIGFyci5yb3RhdGUhCi0gICAgZW5kCi0gICAgY2hlY2tfc2VsZl9t
b2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8YXJy
fAotICAgICAgYXJyLnJvdGF0ZSEoMikKLSAgICBlbmQKLSAgZW5kCi0KLSAgZGVmIHRlc3Rfc2Vs
ZWN0IQotICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICByZWZlcmVuY2VfYXJyID0gJXcoZm9v
IGJhciBiYXopCi0gICAgbS5yZXBlYXRlZF9zdHJpbmcgKz0gcmVmZXJlbmNlX2Fyci5jbG9uZQot
Ci0gICAgY2hlY2tfc2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZl
cmVuY2VfYXJyKSBkbyB8YXJyfAotICAgICAgYXJyLnNlbGVjdCEgeyB8dnwgdiA9fiAvW2FlaW91
XS8gfQotICAgIGVuZAotICBlbmQKLQotICBkZWYgdGVzdF9zaGlmdAotICAgIG0gPSBUZXN0TWVz
c2FnZS5uZXcKLSAgICByZWZlcmVuY2VfYXJyID0gJXcoZm9vIGJhciBiYXopCi0gICAgbS5yZXBl
YXRlZF9zdHJpbmcgKz0gcmVmZXJlbmNlX2Fyci5jbG9uZQotCi0gICAgIyBzaG91bGQgcmV0dXJu
IGFuIGVsZW1lbnQKLSAgICBjaGVja19zZWxmX21vZGlmeWluZ19tZXRob2QobS5yZXBlYXRlZF9z
dHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRvIHxhcnJ8Ci0gICAgICBhcnIuc2hpZnQKLSAgICBlbmQK
LSAgICAjIHNob3VsZCByZXR1cm4gYW4gYXJyYXkKLSAgICBjaGVja19zZWxmX21vZGlmeWluZ19t
ZXRob2QobS5yZXBlYXRlZF9zdHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRvIHxhcnJ8Ci0gICAgICBh
cnIuc2hpZnQoMikKLSAgICBlbmQKLSAgICAjIHNob3VsZCByZXR1cm4gbmlsCi0gICAgY2hlY2tf
c2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBk
byB8YXJyfAotICAgICAgYXJyLnNoaWZ0Ci0gICAgZW5kCi0gIGVuZAotCi0gIGRlZiB0ZXN0X3No
dWZmbGUhCi0gICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9
ICV3KGZvbyBiYXIgYmF6KQotICAgIG9yaWdfcmVwZWF0ZWRfc3RyaW5nID0gbS5yZXBlYXRlZF9z
dHJpbmcuY2xvbmUKLSAgICByZXN1bHQgPSBtLnJlcGVhdGVkX3N0cmluZy5zaHVmZmxlIQotICAg
IGFzc2VydF9lcXVhbCBtLnJlcGVhdGVkX3N0cmluZywgcmVzdWx0Ci0gICAgIyBOT1RFOiBzb21l
dGltZXMgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIG9yZGVyLi4uCi0gICAgIyBhc3NlcnRfbm90X2Vx
dWFsIG0ucmVwZWF0ZWRfc3RyaW5nLnRvX2EsIG9yaWdfcmVwZWF0ZWRfc3RyaW5nLnRvX2EKLSAg
ZW5kCi0KLSAgZGVmIHRlc3Rfc2xpY2UhCi0gICAgbSA9IFRlc3RNZXNzYWdlLm5ldwotICAgIHJl
ZmVyZW5jZV9hcnIgPSAldyhmb28gYmFyIGJheiBiYXIgZml6eiBidXp6KQotICAgIG0ucmVwZWF0
ZWRfc3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xvbmUKLQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5
aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAg
ICAgIGFyci5zbGljZSEoMikKLSAgICBlbmQKLSAgICBjaGVja19zZWxmX21vZGlmeWluZ19tZXRo
b2QobS5yZXBlYXRlZF9zdHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRvIHxhcnJ8Ci0gICAgICBhcnIu
c2xpY2UhKDEsMikKLSAgICBlbmQKLSAgICBjaGVja19zZWxmX21vZGlmeWluZ19tZXRob2QobS5y
ZXBlYXRlZF9zdHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRvIHxhcnJ8Ci0gICAgICBhcnIuc2xpY2Uh
KDAuLjEpCi0gICAgZW5kCi0gICAgY2hlY2tfc2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0
ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8YXJyfAotICAgICAgYXJyLnNsaWNlISgxMCkK
LSAgICBlbmQKLSAgZW5kCi0KLSAgZGVmIHRlc3Rfc29ydCEKLSAgICBtID0gVGVzdE1lc3NhZ2Uu
bmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9ICV3KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRf
c3RyaW5nICs9IHJlZmVyZW5jZV9hcnIuY2xvbmUKLQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5n
X21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAg
IGFyci5zb3J0IQotICAgIGVuZAotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJl
cGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci5zb3J0ISB7
IHx4LHl8IHkgPD0+IHggfQotICAgIGVuZAotICBlbmQKLQotICBkZWYgdGVzdF9zb3J0X2J5IQot
ICAgIG0gPSBUZXN0TWVzc2FnZS5uZXcKLSAgICByZWZlcmVuY2VfYXJyID0gJXcoZm9vIGJhciBi
YXopCi0gICAgbS5yZXBlYXRlZF9zdHJpbmcgKz0gcmVmZXJlbmNlX2Fyci5jbG9uZQotCi0gICAg
Y2hlY2tfc2VsZl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2Vf
YXJyKSBkbyB8YXJyfAotICAgICAgYXJyLnNvcnRfYnkhCi0gICAgZW5kCi0gICAgY2hlY2tfc2Vs
Zl9tb2RpZnlpbmdfbWV0aG9kKG0ucmVwZWF0ZWRfc3RyaW5nLCByZWZlcmVuY2VfYXJyKSBkbyB8
YXJyfAotICAgICAgYXJyLnNvcnRfYnkhKCY6aGFzaCkKLSAgICBlbmQKLSAgZW5kCi0KLSAgZGVm
IHRlc3RfdW5pcSEKLSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVmZXJlbmNlX2FyciA9
ICV3KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9IHJlZmVyZW5jZV9hcnIu
Y2xvbmUKLQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmlu
ZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci51bmlxIQotICAgIGVuZAotICAg
IGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJlcGVhdGVkX3N0cmluZywgcmVmZXJlbmNl
X2FycikgZG8gfGFycnwKLSAgICAgIGFyci51bmlxIXt8c3wgc1swXSB9Ci0gICAgZW5kCi0gIGVu
ZAotCi0gIGRlZiB0ZXN0X3Vuc2hpZnQKLSAgICBtID0gVGVzdE1lc3NhZ2UubmV3Ci0gICAgcmVm
ZXJlbmNlX2FyciA9ICV3KGZvbyBiYXIgYmF6KQotICAgIG0ucmVwZWF0ZWRfc3RyaW5nICs9IHJl
ZmVyZW5jZV9hcnIuY2xvbmUKLQotICAgIGNoZWNrX3NlbGZfbW9kaWZ5aW5nX21ldGhvZChtLnJl
cGVhdGVkX3N0cmluZywgcmVmZXJlbmNlX2FycikgZG8gfGFycnwKLSAgICAgIGFyci51bnNoaWZ0
KCcxJykKLSAgICBlbmQKLSAgICBjaGVja19zZWxmX21vZGlmeWluZ19tZXRob2QobS5yZXBlYXRl
ZF9zdHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRvIHxhcnJ8Ci0gICAgICBhcnIudW5zaGlmdCgnYScs
ICdiJykKLSAgICBlbmQKLSAgICBjaGVja19zZWxmX21vZGlmeWluZ19tZXRob2QobS5yZXBlYXRl
ZF9zdHJpbmcsIHJlZmVyZW5jZV9hcnIpIGRvIHxhcnJ8Ci0gICAgICBhcnIudW5zaGlmdCgnJykK
LSAgICBlbmQKLSAgZW5kCi0KLQotICAjIyMjIyBIRUxQRVIgTUVUSE9EUwotCi0gIGRlZiBjaGVj
a19zZWxmX21vZGlmeWluZ19tZXRob2QocmVwZWF0ZWRfZmllbGQsIHJlZl9hcnJheSkKLSAgICBl
eHBlY3RlZF9yZXN1bHQgPSB5aWVsZChyZWZfYXJyYXkpCi0gICAgYWN0dWFsX3Jlc3VsdCA9IHlp
ZWxkKHJlcGVhdGVkX2ZpZWxkKQotICAgIGlmIGV4cGVjdGVkX3Jlc3VsdC5pc19hPyhFbnVtZXJh
dG9yKQotICAgICAgYXNzZXJ0X2VxdWFsIGV4cGVjdGVkX3Jlc3VsdC50b19hLCBhY3R1YWxfcmVz
dWx0LnRvX2EKLSAgICBlbHNlCi0gICAgICBhc3NlcnRfZXF1YWwgZXhwZWN0ZWRfcmVzdWx0LCBh
Y3R1YWxfcmVzdWx0Ci0gICAgZW5kCi0gICAgYXNzZXJ0X2VxdWFsIHJlZl9hcnJheSwgcmVwZWF0
ZWRfZmllbGQKLSAgZW5kCi0KLQotICBkZWYgcmVwZWF0ZWRfZmllbGRfbmFtZXMoa2xhc3MpCi0g
ICAga2xhc3MuZGVzY3JpcHRvci5maW5kX2FsbHt8ZnwgZi5sYWJlbCA9PSA6cmVwZWF0ZWR9Lm1h
cCgmOm5hbWUpCi0gIGVuZAotCi0KLSAgZGVmIGZpbGxfdGVzdF9tc2codGVzdF9tc2cpCi0gICAg
dGVzdF9tc2cucmVwZWF0ZWRfaW50MzIgICs9IFstMTAsIC0xMV0KLSAgICB0ZXN0X21zZy5yZXBl
YXRlZF9pbnQ2NCAgKz0gWy0xXzAwMF8wMDAsIC0xXzAwMF8wMDFdCi0gICAgdGVzdF9tc2cucmVw
ZWF0ZWRfdWludDMyICs9IFsxMCwgMTFdCi0gICAgdGVzdF9tc2cucmVwZWF0ZWRfdWludDY0ICs9
IFsxXzAwMF8wMDAsIDFfMDAwXzAwMV0KLSAgICB0ZXN0X21zZy5yZXBlYXRlZF9ib29sICAgKz0g
W3RydWUsIGZhbHNlXQotICAgIHRlc3RfbXNnLnJlcGVhdGVkX2Zsb2F0ICArPSBbLTEuMDEsIC0x
LjAyXQotICAgIHRlc3RfbXNnLnJlcGVhdGVkX2RvdWJsZSArPSBbLTEuMDAwMDAwMDAwMDAwMSwg
LTEuMDAwMDAwMDAwMDAwMl0KLSAgICB0ZXN0X21zZy5yZXBlYXRlZF9zdHJpbmcgKz0gJXcoZm9v
IGJhcikKLSAgICB0ZXN0X21zZy5yZXBlYXRlZF9ieXRlcyAgKz0gWyJiYXIiLmVuY29kZSEoJ0FT
Q0lJLThCSVQnKSwgImZvbyIuZW5jb2RlISgnQVNDSUktOEJJVCcpXQotICAgIHRlc3RfbXNnLnJl
cGVhdGVkX21zZyAgICA8PCBUZXN0TWVzc2FnZTIubmV3KDpmb28gPT4gMSkKLSAgICB0ZXN0X21z
Zy5yZXBlYXRlZF9tc2cgICAgPDwgVGVzdE1lc3NhZ2UyLm5ldyg6Zm9vID0+IDIpCi0gICAgdGVz
dF9tc2cucmVwZWF0ZWRfZW51bSAgIDw8IDpBCi0gICAgdGVzdF9tc2cucmVwZWF0ZWRfZW51bSAg
IDw8IDpCCi0gIGVuZAotCi0KLSAgcG9vbCA9IEdvb2dsZTo6UHJvdG9idWY6OkRlc2NyaXB0b3JQ
b29sLm5ldwotICBwb29sLmJ1aWxkIGRvCi0KLSAgICBhZGRfbWVzc2FnZSAiVGVzdE1lc3NhZ2Ui
IGRvCi0gICAgICBvcHRpb25hbCA6b3B0aW9uYWxfaW50MzIsICA6aW50MzIsICAgICAgICAxCi0g
ICAgICBvcHRpb25hbCA6b3B0aW9uYWxfaW50NjQsICA6aW50NjQsICAgICAgICAyCi0gICAgICBv
cHRpb25hbCA6b3B0aW9uYWxfdWludDMyLCA6dWludDMyLCAgICAgICAzCi0gICAgICBvcHRpb25h
bCA6b3B0aW9uYWxfdWludDY0LCA6dWludDY0LCAgICAgICA0Ci0gICAgICBvcHRpb25hbCA6b3B0
aW9uYWxfYm9vbCwgICA6Ym9vbCwgICAgICAgICA1Ci0gICAgICBvcHRpb25hbCA6b3B0aW9uYWxf
ZmxvYXQsICA6ZmxvYXQsICAgICAgICA2Ci0gICAgICBvcHRpb25hbCA6b3B0aW9uYWxfZG91Ymxl
LCA6ZG91YmxlLCAgICAgICA3Ci0gICAgICBvcHRpb25hbCA6b3B0aW9uYWxfc3RyaW5nLCA6c3Ry
aW5nLCAgICAgICA4Ci0gICAgICBvcHRpb25hbCA6b3B0aW9uYWxfYnl0ZXMsICA6Ynl0ZXMsICAg
ICAgICA5Ci0gICAgICBvcHRpb25hbCA6b3B0aW9uYWxfbXNnLCAgICA6bWVzc2FnZSwgICAgICAx
MCwgIlRlc3RNZXNzYWdlMiIKLSAgICAgIG9wdGlvbmFsIDpvcHRpb25hbF9lbnVtLCAgIDplbnVt
LCAgICAgICAgIDExLCAiVGVzdEVudW0iCi0KLSAgICAgIHJlcGVhdGVkIDpyZXBlYXRlZF9pbnQz
MiwgIDppbnQzMiwgICAgICAgIDEyCi0gICAgICByZXBlYXRlZCA6cmVwZWF0ZWRfaW50NjQsICA6
aW50NjQsICAgICAgICAxMwotICAgICAgcmVwZWF0ZWQgOnJlcGVhdGVkX3VpbnQzMiwgOnVpbnQz
MiwgICAgICAgMTQKLSAgICAgIHJlcGVhdGVkIDpyZXBlYXRlZF91aW50NjQsIDp1aW50NjQsICAg
ICAgIDE1Ci0gICAgICByZXBlYXRlZCA6cmVwZWF0ZWRfYm9vbCwgICA6Ym9vbCwgICAgICAgICAx
NgotICAgICAgcmVwZWF0ZWQgOnJlcGVhdGVkX2Zsb2F0LCAgOmZsb2F0LCAgICAgICAgMTcKLSAg
ICAgIHJlcGVhdGVkIDpyZXBlYXRlZF9kb3VibGUsIDpkb3VibGUsICAgICAgIDE4Ci0gICAgICBy
ZXBlYXRlZCA6cmVwZWF0ZWRfc3RyaW5nLCA6c3RyaW5nLCAgICAgICAxOQotICAgICAgcmVwZWF0
ZWQgOnJlcGVhdGVkX2J5dGVzLCAgOmJ5dGVzLCAgICAgICAgMjAKLSAgICAgIHJlcGVhdGVkIDpy
ZXBlYXRlZF9tc2csICAgIDptZXNzYWdlLCAgICAgIDIxLCAiVGVzdE1lc3NhZ2UyIgotICAgICAg
cmVwZWF0ZWQgOnJlcGVhdGVkX2VudW0sICAgOmVudW0sICAgICAgICAgMjIsICJUZXN0RW51bSIK
LSAgICBlbmQKLSAgICBhZGRfbWVzc2FnZSAiVGVzdE1lc3NhZ2UyIiBkbwotICAgICAgb3B0aW9u
YWwgOmZvbywgOmludDMyLCAxCi0gICAgZW5kCi0KLSAgICBhZGRfZW51bSAiVGVzdEVudW0iIGRv
Ci0gICAgICB2YWx1ZSA6RGVmYXVsdCwgMAotICAgICAgdmFsdWUgOkEsIDEKLSAgICAgIHZhbHVl
IDpCLCAyCi0gICAgICB2YWx1ZSA6QywgMwotICAgIGVuZAotICBlbmQKLQotICBUZXN0TWVzc2Fn
ZSA9IHBvb2wubG9va3VwKCJUZXN0TWVzc2FnZSIpLm1zZ2NsYXNzCi0gIFRlc3RNZXNzYWdlMiA9
IHBvb2wubG9va3VwKCJUZXN0TWVzc2FnZTIiKS5tc2djbGFzcwotICBUZXN0RW51bSA9IHBvb2wu
bG9va3VwKCJUZXN0RW51bSIpLmVudW1tb2R1bGUKLQotCi1lbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS90
ZXN0cy9zdHJlc3MucmIgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3J1YnkvdGVzdHMvc3RyZXNzLnJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwODJkNWUyMmRmMDg5YWI5MDNmMzI2NjQzYjA4YmY1ZjgwZTU5NWQ3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvcnVieS90ZXN0cy9zdHJl
c3MucmIKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jIS91c3IvYmluL3J1YnkKLQot
cmVxdWlyZSAnZ29vZ2xlL3Byb3RvYnVmJwotcmVxdWlyZSAndGVzdC91bml0JwotCi1tb2R1bGUg
U3RyZXNzVGVzdAotICBwb29sID0gR29vZ2xlOjpQcm90b2J1Zjo6RGVzY3JpcHRvclBvb2wubmV3
Ci0gIHBvb2wuYnVpbGQgZG8KLSAgICBhZGRfbWVzc2FnZSAiVGVzdE1lc3NhZ2UiIGRvCi0gICAg
ICBvcHRpb25hbCA6YSwgIDppbnQzMiwgICAgICAgIDEKLSAgICAgIHJlcGVhdGVkIDpiLCAgOm1l
c3NhZ2UsICAgICAgMiwgIk0iCi0gICAgZW5kCi0gICAgYWRkX21lc3NhZ2UgIk0iIGRvCi0gICAg
ICBvcHRpb25hbCA6Zm9vLCA6c3RyaW5nLCAxCi0gICAgZW5kCi0gIGVuZAotCi0gIFRlc3RNZXNz
YWdlID0gcG9vbC5sb29rdXAoIlRlc3RNZXNzYWdlIikubXNnY2xhc3MKLSAgTSA9IHBvb2wubG9v
a3VwKCJNIikubXNnY2xhc3MKLQotICBjbGFzcyBTdHJlc3NUZXN0IDwgVGVzdDo6VW5pdDo6VGVz
dENhc2UKLSAgICBkZWYgZ2V0X21zZwotICAgICAgVGVzdE1lc3NhZ2UubmV3KDphID0+IDEwMDAs
Ci0gICAgICAgICAgICAgICAgICAgICAgOmIgPT4gW00ubmV3KDpmb28gPT4gImhlbGxvIiksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0ubmV3KDpmb28gPT4gIndvcmxkIildKQotICAg
IGVuZAotICAgIGRlZiB0ZXN0X3N0cmVzcwotICAgICAgbSA9IGdldF9tc2cKLSAgICAgIGRhdGEg
PSBUZXN0TWVzc2FnZS5lbmNvZGUobSkKLSAgICAgIDEwMF8wMDAudGltZXMgZG8KLSAgICAgICAg
bW5ldyA9IFRlc3RNZXNzYWdlLmRlY29kZShkYXRhKQotICAgICAgICBtbmV3ID0gbW5ldy5kdXAK
LSAgICAgICAgYXNzZXJ0X2VxdWFsIG1uZXcuaW5zcGVjdCwgbS5pbnNwZWN0Ci0gICAgICAgIGFz
c2VydCBUZXN0TWVzc2FnZS5lbmNvZGUobW5ldykgPT0gZGF0YQotICAgICAgZW5kCi0gICAgZW5k
Ci0gIGVuZAotZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvdHJhdmlzLXRlc3Quc2ggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3J1YnkvdHJhdmlz
LXRlc3Quc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDc1ZGI3ZDkzMWY3ZjQ2Mjdm
NGY2ODkwYzM1NmNkYTRlZTdhMGY4MGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9ydWJ5L3RyYXZpcy10ZXN0LnNoCisrKyAvZGV2L251bGwKQEAgLTEsMjUg
KzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgYmFzaAotCi0jIEV4aXQgb24gYW55IGVycm9yLgotc2V0
IC1lCi0KLXRlc3RfdmVyc2lvbigpIHsKLSAgdmVyc2lvbj0kMQotICBpZiBbICIkdmVyc2lvbiIg
PT0gImpydWJ5IiBdIDsgdGhlbgotICAgICMgTm8gY29uZm9ybWFuY2UgdGVzdHMgeWV0IC0tIEpS
dWJ5IGlzIHRvbyBicm9rZW4gdG8gcnVuIHRoZW0uCi0gICAgYmFzaCAtLWxvZ2luIC1jIFwKLSAg
ICAgICJydm0gaW5zdGFsbCAkdmVyc2lvbiAmJiBydm0gdXNlICR2ZXJzaW9uICYmIFwKLSAgICAg
ICB3aGljaCBydWJ5ICYmIFwKLSAgICAgICBnZW0gaW5zdGFsbCBidW5kbGVyICYmIGJ1bmRsZSAm
JiBcCi0gICAgICAgcmFrZSB0ZXN0IgotICBlbHNlCi0gICAgYmFzaCAtLWxvZ2luIC1jIFwKLSAg
ICAgICJydm0gaW5zdGFsbCAkdmVyc2lvbiAmJiBydm0gdXNlICR2ZXJzaW9uICYmIFwKLSAgICAg
ICB3aGljaCBydWJ5ICYmIFwKLSAgICAgICBnZW0gaW5zdGFsbCBidW5kbGVyICYmIGJ1bmRsZSAm
JiBcCi0gICAgICAgcmFrZSB0ZXN0ICYmCi0gICAgICAgY2QgLi4vY29uZm9ybWFuY2UgJiYgbWFr
ZSB0ZXN0X3J1YnkiCi0gIGZpCi19Ci0KLXRlc3RfdmVyc2lvbiAkMQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zaXgu
QlVJTEQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NpeC5CVUlMRApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIwYjM2MDRj
ZGY0NDNmODhlYzczZGU3MGM0ZTk4ZTc0MmJkYTQ2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NpeC5CVUlMRAorKysgL2Rldi9udWxsCkBAIC0xLDEzICsw
LDAgQEAKLWdlbnJ1bGUoCi0gIG5hbWUgPSAiY29weV9zaXgiLAotICBzcmNzID0gWyJzaXgtMS4x
MC4wL3NpeC5weSJdLAotICBvdXRzID0gWyJzaXgucHkiXSwKLSAgY21kID0gImNwICQ8ICQoQCki
LAotKQotCi1weV9saWJyYXJ5KAotICBuYW1lID0gInNpeCIsCi0gIHNyY3MgPSBbInNpeC5weSJd
LAotICBzcmNzX3ZlcnNpb24gPSAiUFkyQU5EMyIsCi0gIHZpc2liaWxpdHkgPSBbIi8vdmlzaWJp
bGl0eTpwdWJsaWMiXSwKLSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL01ha2VmaWxlLmFtIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvTWFrZWZp
bGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMDY1NTA2MjE4Y2VlMzBiMDNl
NGEwNWJjYTc0OGIwMzhjM2RiZWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw4MzQgKzAsMCBA
QAotIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxl
LmluCi0KLWlmIEhBVkVfWkxJQgotR1pDSEVDS1BST0dSQU1TID0gemNnemlwIHpjZ3VuemlwCi1H
WkhFQURFUlMgPSBnb29nbGUvcHJvdG9idWYvaW8vZ3ppcF9zdHJlYW0uaAotR1pURVNUUyA9IGdv
b2dsZS9wcm90b2J1Zi9pby9nemlwX3N0cmVhbV91bml0dGVzdC5zaAotWkxJQl9ERUYgPSAtREhB
VkVfWkxJQj0xCi1lbHNlCi1HWkNIRUNLUFJPR1JBTVMgPQotR1pIRUFERVJTID0KLUdaVEVTVFMg
PQotWkxJQl9ERUYgPQotZW5kaWYKLQotaWYgSEFWRV9QVEhSRUFECi1QVEhSRUFEX0RFRiA9IC1E
SEFWRV9QVEhSRUFEPTEKLWVsc2UKLVBUSFJFQURfREVGID0KLWVuZGlmCi0KLWlmIEdDQwotIyBU
aGVzZSBhcmUgZ29vZCB3YXJuaW5ncyB0byB0dXJuIG9uIGJ5IGRlZmF1bHQKLU5PX09QVF9DWFhG
TEFHUyA9ICQoUFRIUkVBRF9DRkxBR1MpICQoUFRIUkVBRF9ERUYpICQoWkxJQl9ERUYpIC1XYWxs
IC1Xd3JpdGUtc3RyaW5ncyAtV292ZXJsb2FkZWQtdmlydHVhbCAtV25vLXNpZ24tY29tcGFyZQot
ZWxzZQotTk9fT1BUX0NYWEZMQUdTID0gJChQVEhSRUFEX0NGTEFHUykgJChQVEhSRUFEX0RFRikg
JChaTElCX0RFRikKLWVuZGlmCi0KLUFNX0NYWEZMQUdTID0gJChOT19PUFRfQ1hYRkxBR1MpICQo
UFJPVE9CVUZfT1BUX0ZMQUcpCi0KLUFNX0xERkxBR1MgPSAkKFBUSFJFQURfQ0ZMQUdTKQotCi0j
IElmIEkgc2F5ICJkaXN0X2luY2x1ZGVfREFUQSIsIGF1dG9tYWtlIGNvbXBsYWlucyB0aGF0ICQo
aW5jbHVkZWRpcikgaXMgbm90Ci0jIGEgImxlZ2l0aW1hdGUiIGRpcmVjdG9yeSBmb3IgREFUQS4g
IFNjcmV3IHlvdSwgYXV0b21ha2UuCi1wcm90b2RpciA9ICQoaW5jbHVkZWRpcikKLW5vYmFzZV9k
aXN0X3Byb3RvX0RBVEEgPSBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90byAgICAgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8gICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ29vZ2xlL3Byb3RvYnVmL2FwaS5wcm90
byAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnb29nbGUvcHJvdG9idWYv
ZHVyYXRpb24ucHJvdG8gICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZS9w
cm90b2J1Zi9lbXB0eS5wcm90byAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Z29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucHJvdG8gICAgIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBnb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucHJvdG8gXAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8gICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90byAg
ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90
byAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZS9wcm90b2J1Zi93
cmFwcGVycy5wcm90byAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wcm90bwotCi0jIE5vdCBzdXJlIHdoeSB0aGVzZSBkb24n
dCBnZXQgY2xlYW5lZCBhdXRvbWF0aWNhbGx5LgotY2xlYW4tbG9jYWw6Ci0Jcm0gLWYgKi5sb1QK
LQotQ0xFQU5GSUxFUyA9ICQocHJvdG9jX291dHB1dHMpIHVuaXR0ZXN0X3Byb3RvX21pZGRsZW1h
biBcCi0gICAgICAgICAgICAgdGVzdHppcC5qYXIgdGVzdHppcC5saXN0IHRlc3R6aXAucHJvdG8g
dGVzdHppcC56aXAKLQotTUFJTlRBSU5FUkNMRUFORklMRVMgPSAgIFwKLSAgTWFrZWZpbGUuaW4K
LQotbm9iYXNlX2luY2x1ZGVfSEVBREVSUyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY19zZXF1ZW5jZV9udW0u
aCAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHMu
aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMv
YXRvbWljb3BzX2ludGVybmFsc19wb3dlci5oICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfYXJtNjRfZ2NjLmggICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX2FybV9nY2MuaCAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19hcm1fcW54
LmggICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5h
bHNfYXRvbWljd29yZF9jb21wYXQuaCBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNv
cHNfaW50ZXJuYWxzX2dlbmVyaWNfZ2NjLmggICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1
YnMvYXRvbWljb3BzX2ludGVybmFsc19tYWNvc3guaCAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfbWlwc19nY2MuaCAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3BuYWNsLmggICAgICAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19zb2xh
cmlzLmggICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRl
cm5hbHNfdHNhbi5oICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9t
aWNvcHNfaW50ZXJuYWxzX3g4Nl9nY2MuaCAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
c3R1YnMvYXRvbWljb3BzX2ludGVybmFsc194ODZfbXN2Yy5oICAgICAgICAgIFwKLSAgZ29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2NhbGxiYWNrLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9ieXRlc3RyZWFtLmggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvY2FzdHMuaCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9m
YXN0bWVtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvc3R1YnMvaGFzaC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9tYWNyb3MuaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvbXV0ZXguaCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL29uY2UuaCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9wbGF0Zm9ybV9tYWNyb3MuaCAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJv
dG9idWYvc3R1YnMvcG9ydC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3Njb3BlZF9wdHIuaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvc2luZ2xldG9uLmggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1
cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdGxfdXRpbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RlbXBsYXRlX3V0aWwuaCAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy90eXBlX3RyYWl0cy5oICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvYW55LnBiLmggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2FwaS5wYi5o
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9hbnkuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvYXJlbmEuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2FyZW5hc3RyaW5nLmggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX2RhdGFiYXNlLmggICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2Rlc2Ny
aXB0b3IucGIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9kdXJhdGlvbi5wYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBn
b29nbGUvcHJvdG9idWYvZHluYW1pY19tZXNzYWdlLmggICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnBiLmggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0LmggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5w
Yi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2dl
bmVyYXRlZF9lbnVtX3JlZmxlY3Rpb24uaCAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9nZW5lcmF0ZWRfZW51bV91dGlsLmggICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oICAgICAgICAg
ICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3V0aWwuaCAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9tYXBfZW50cnkuaCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvbWFwX2VudHJ5
X2xpdGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L21hcF9maWVsZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9tYXBfZmllbGRfaW5sLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkX2xpdGUuaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL21hcC5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9tYXBfdHlwZV9oYW5kbGVy
LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvbWVzc2Fn
ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL21lc3NhZ2VfbGl0ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9tZXRhZGF0YS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbi5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzLmggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVs
ZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvcmVw
ZWF0ZWRfZmllbGRfcmVmbGVjdGlvbi5oICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL3NlcnZpY2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wYi5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3RydWN0LnBiLmggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3RleHRfZm9ybWF0LmggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAu
cGIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
dHlwZS5wYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xl
L3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0LmggICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZS5oICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGVf
aW5sLmggICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi93cmFwcGVy
cy5wYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvaW8vY29kZWRfc3RyZWFtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgJChH
WkhFQURFUlMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvaW8vc3RydG9kLmggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2lvL3Rva2VuaXplci5o
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9pby96
ZXJvX2NvcHlfc3RyZWFtLmggICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJv
dG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmggICAgICAgICAgICAgICAgICAgIFwKLSAg
Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbF9saXRlLmggICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oICAgICAg
ICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29tbWFuZF9saW5l
X2ludGVyZmFjZS5oICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2lt
cG9ydGVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9wYXJzZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wYi5oICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2dlbmVyYXRvci5o
ICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9nZW5lcmF0b3IuaCAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NzaGFycC9jc2hhcnBfbmFtZXMuaCAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfZ2VuZXJhdG9yLmggICAgICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX25hbWVzLmggICAgICAgICAgICAgICAgICAg
IFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2dlbmVyYXRv
ci5oICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qcy9qc19nZW5lcmF0b3Iu
aCAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0
aXZlYy9vYmplY3RpdmVjX2dlbmVyYXRvci5oICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmggICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9weXRob24vcHl0aG9uX2dlbmVyYXRvci5oICAgICAgICAgICAgXAotICBn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvcnVieS9ydWJ5X2dlbmVyYXRvci5oICAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZlci5oICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxkX2NvbXBhcmF0b3Iu
aCAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9t
YXNrX3V0aWwuaCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvanNvbl91dGlsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi91dGlsL3RpbWVfdXRpbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyX3V0aWwuaCAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9kaWZmZXJlbmNlci5oCi0K
LWxpYl9MVExJQlJBUklFUyA9IGxpYnByb3RvYnVmLWxpdGUubGEgbGlicHJvdG9idWYubGEgbGli
cHJvdG9jLmxhCi0KLWxpYnByb3RvYnVmX2xpdGVfbGFfTElCQUREID0gJChQVEhSRUFEX0xJQlMp
Ci1saWJwcm90b2J1Zl9saXRlX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvIDEwOjA6MCAtZXhw
b3J0LWR5bmFtaWMgLW5vLXVuZGVmaW5lZAotbGlicHJvdG9idWZfbGl0ZV9sYV9TT1VSQ0VTID0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1
YnMvYXRvbWljb3BzX2ludGVybmFsc194ODZfZ2NjLmNjICAgICAgICAgXAotICBnb29nbGUvcHJv
dG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc194ODZfbXN2Yy5jYyAgICAgICAgXAotICBn
b29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5jYyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5oICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmNjICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMv
aW50MTI4LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvc3R1YnMvaW50MTI4LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvbWF0aHV0aWwuaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5jYyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5o
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvc3Rh
dHVzLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
c3R1YnMvc3RhdHVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RhdHVzX21hY3Jvcy5oICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzb3IuY2MgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzb3IuaCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuY2Mg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5n
cGllY2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1
YnMvc3RyaW5ncHJpbnRmLmNjICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJv
dG9idWYvc3R1YnMvc3RyaW5ncHJpbnRmLmggICAgICAgICAgICAgICAgICAgICAgICAgXAotICBn
b29nbGUvcHJvdG9idWYvc3R1YnMvc3RydWN0dXJhbGx5X3ZhbGlkLmNjICAgICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5jYyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMvdGltZS5jYyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvc3R1YnMv
dGltZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvYXJlbmEuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvYXJlbmFzdHJpbmcuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldC5jYyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfdXRpbC5jYyAg
ICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvbWVzc2FnZV9saXRlLmNjICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRf
ZmllbGQuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
d2lyZV9mb3JtYXRfbGl0ZS5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtX2lubC5oICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5jYyAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9p
bXBsX2xpdGUuY2MKLQotbGlicHJvdG9idWZfbGFfTElCQUREID0gJChQVEhSRUFEX0xJQlMpCi1s
aWJwcm90b2J1Zl9sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyAxMDowOjAgLWV4cG9ydC1keW5h
bWljIC1uby11bmRlZmluZWQKLWxpYnByb3RvYnVmX2xhX1NPVVJDRVMgPSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgJChsaWJwcm90b2J1Zl9saXRlX2xhX1NPVVJD
RVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2Fu
eS5wYi5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL2FwaS5wYi5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hdGhsaW1pdHMuY2MgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hdGhsaW1pdHMuaCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2FueS5jYyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuY2Mg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2Rlc2Ny
aXB0b3JfZGF0YWJhc2UuY2MgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IucGIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL2R1cmF0aW9uLnBiLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5jYyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnBiLmNjICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2V4dGVuc2lvbl9zZXRfaGVh
dnkuY2MgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21h
c2sucGIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L2dlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uY2MgICAgICAgICAgICAgIFwKLSAgZ29vZ2xl
L3Byb3RvYnVmL21hcF9maWVsZC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25faW50ZXJuYWwuaCAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzLmNjICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3NlcnZpY2UuY2Mg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Nv
dXJjZV9jb250ZXh0LnBiLmNjICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL3N0cnVjdC5wYi5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1dGUuY2MgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1dGUuaCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3RleHRfZm9ybWF0LmNjICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wYi5j
YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3R5cGUu
cGIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL3Vua25vd25fZmllbGRfc2V0LmNjICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnBiLmNjICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2lvL2d6aXBfc3RyZWFtLmNjICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuY2MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2lvL3N0cnRv
ZC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L2lvL3Rva2VuaXplci5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xl
L3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5jYyAgICAgICAgICAgICAgICAgIFwK
LSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ltcG9ydGVyLmNjICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BhcnNlci5jYyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvZmllbGRfY29tcGFyYXRv
ci5jYyAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvZmllbGRf
bWFza191dGlsLmNjICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvY29uc3RhbnRzLmggICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL3V0aWwvaW50ZXJuYWwvZGF0YXBpZWNlLmNjICAgICAgICAgICAgICAgICAgIFwKLSAg
Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGF0YXBpZWNlLmggICAgICAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmpl
Y3R3cml0ZXIuY2MgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92
YWx1ZV9vYmplY3R3cml0ZXIuaCAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwv
ZXJyb3JfbGlzdGVuZXIuY2MgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
aW50ZXJuYWwvZXJyb3JfbGlzdGVuZXIuaCAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvZXhwZWN0aW5nX29iamVjdHdyaXRlci5oICAgICAgIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZmllbGRfbWFza191dGlsaXR5LmNjICAgICAgICAg
IFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZmllbGRfbWFza191dGlsaXR5Lmgg
ICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9lc2NhcGlu
Zy5jYyAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNv
bl9lc2NhcGluZy5oICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50
ZXJuYWwvanNvbl9vYmplY3R3cml0ZXIuY2MgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L3V0aWwvaW50ZXJuYWwvanNvbl9vYmplY3R3cml0ZXIuaCAgICAgICAgICAgIFwKLSAgZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9zdHJlYW1fcGFyc2VyLmNjICAgICAgICAgIFwK
LSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9zdHJlYW1fcGFyc2VyLmggICAg
ICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvbG9jYXRpb25fdHJhY2tl
ci5oICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvbW9ja19l
cnJvcl9saXN0ZW5lci5oICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJu
YWwvb2JqZWN0X2xvY2F0aW9uX3RyYWNrZXIuaCAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvb2JqZWN0X3NvdXJjZS5oICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X3dyaXRlci5jYyAgICAgICAgICAgICAgIFwKLSAg
Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X3dyaXRlci5oICAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0
c291cmNlLmNjICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJl
YW1fb2JqZWN0c291cmNlLmggICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwv
cHJvdG9zdHJlYW1fb2JqZWN0d3JpdGVyLmNjICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
aW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0d3JpdGVyLmggICAgIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9fd3JpdGVyLmNjICAgICAgICAgICAgICAgIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9fd3JpdGVyLmggICAgICAgICAgICAgICAg
IFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvc3RydWN0dXJlZF9vYmplY3R3cml0
ZXIuaCAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlwZV9pbmZvLmNj
ICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlw
ZV9pbmZvLmggICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50
ZXJuYWwvdHlwZV9pbmZvX3Rlc3RfaGVscGVyLmNjICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L3V0aWwvaW50ZXJuYWwvdHlwZV9pbmZvX3Rlc3RfaGVscGVyLmggICAgICAgIFwKLSAgZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdXRpbGl0eS5jYyAgICAgICAgICAgICAgICAgICAgIFwK
LSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdXRpbGl0eS5oICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvanNvbl91dGlsLmNjICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9kaWZmZXJl
bmNlci5jYyAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvdGltZV91
dGlsLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvdHlwZV9yZXNvbHZlcl91dGlsLmNjCi0KLW5vZGlzdF9saWJwcm90b2J1Zl9sYV9TT1VSQ0VT
ID0gJChub2Rpc3RfbGlicHJvdG9idWZfbGl0ZV9sYV9TT1VSQ0VTKQotCi1saWJwcm90b2NfbGFf
TElCQUREID0gJChQVEhSRUFEX0xJQlMpIGxpYnByb3RvYnVmLmxhCi1saWJwcm90b2NfbGFfTERG
TEFHUyA9IC12ZXJzaW9uLWluZm8gMTA6MDowIC1leHBvcnQtZHluYW1pYyAtbm8tdW5kZWZpbmVk
Ci1saWJwcm90b2NfbGFfU09VUkNFUyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5jYyAg
ICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb21tYW5kX2xp
bmVfaW50ZXJmYWNlLmNjICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9w
bHVnaW4uY2MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9wbHVnaW4ucGIuY2MgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9zdWJwcm9jZXNzLmNjICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9zdWJwcm9jZXNzLmggICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci96aXBfd3JpdGVyLmNjICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci96aXBfd3JpdGVyLmgg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAv
Y3BwX2VudW0uY2MgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jcHAvY3BwX2VudW0uaCAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW1fZmllbGQuY2MgICAgICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW1fZmllbGQuaCAgICAgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2V4dGVuc2lvbi5jYyAgICAg
ICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2V4dGVuc2lv
bi5oICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3Bw
X2ZpZWxkLmNjICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jcHAvY3BwX2ZpZWxkLmggICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jcHAvY3BwX2ZpbGUuY2MgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpbGUuaCAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2dlbmVyYXRvci5jYyAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2hlbHBlcnMuY2Mg
ICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2hl
bHBlcnMuaCAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
cHAvY3BwX21hcF9maWVsZC5jYyAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jcHAvY3BwX21hcF9maWVsZC5oICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3NhZ2UuY2MgICAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3NhZ2UuaCAgICAgICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3NhZ2VfZmllbGQu
Y2MgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3Nh
Z2VfZmllbGQuaCAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAv
Y3BwX29wdGlvbnMuaCAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jcHAvY3BwX3ByaW1pdGl2ZV9maWVsZC5jYyAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jcHAvY3BwX3ByaW1pdGl2ZV9maWVsZC5oICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3NlcnZpY2UuY2MgICAgICAgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3NlcnZpY2UuaCAgICAgICAg
ICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3N0cmluZ19m
aWVsZC5jYyAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3Bw
X3N0cmluZ19maWVsZC5oICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfY29udGV4dC5jYyAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfY29udGV4dC5oICAgICAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bS5jYyAgICAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9saXRlLmNjICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9maWVs
ZC5jYyAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
ZW51bV9maWVsZC5oICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfZW51bV9maWVsZF9saXRlLmNjICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfZW51bV9maWVsZF9saXRlLmggICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bS5oICAgICAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9saXRlLmggICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZXh0ZW5zaW9uLmNj
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZXh0
ZW5zaW9uLmggICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfZXh0ZW5zaW9uX2xpdGUuY2MgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfZXh0ZW5zaW9uX2xpdGUuaCAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmllbGQuY2MgICAgICAgICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmllbGQuaCAgICAgICAgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmlsZS5jYyAgICAgICAg
ICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmlsZS5o
ICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfZ2VuZXJhdG9yLmNjICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfZ2VuZXJhdG9yX2ZhY3RvcnkuY2MgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfZ2VuZXJhdG9yX2ZhY3RvcnkuaCAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5jYyAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5oICAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNz
YWdlX2ZpZWxkLmNjICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
bGF6eV9tZXNzYWdlX2ZpZWxkLmggICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkX2xpdGUuY2NcCi0gIGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkX2xpdGUuaCBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWFwX2ZpZWxkLmNjICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWFwX2ZpZWxkLmggICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWFwX2ZpZWxkX2xp
dGUuY2MgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWFw
X2ZpZWxkX2xpdGUuaCAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfbWVzc2FnZS5jYyAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfbWVzc2FnZV9saXRlLmNjICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9idWlsZGVyLmNjICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9idWlsZGVyX2xpdGUuY2Mg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9maWVsZC5j
YyAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2Fn
ZV9maWVsZC5oICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfbWVzc2FnZV9maWVsZF9saXRlLmNjICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfbWVzc2FnZV9maWVsZF9saXRlLmggICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZS5oICAgICAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9saXRlLmggICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9idWlsZGVyLmgg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9i
dWlsZGVyX2xpdGUuaCAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
bmFtZV9yZXNvbHZlci5jYyAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfbmFtZV9yZXNvbHZlci5oICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfcHJpbWl0aXZlX2ZpZWxkLmNjICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfcHJpbWl0aXZlX2ZpZWxkLmggICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfcHJpbWl0aXZlX2ZpZWxkX2xpdGUu
Y2MgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfcHJpbWl0aXZlX2Zp
ZWxkX2xpdGUuaCAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2hh
cmVkX2NvZGVfZ2VuZXJhdG9yLmNjICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfc2hhcmVkX2NvZGVfZ2VuZXJhdG9yLmggICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfc2VydmljZS5jYyAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2VydmljZS5oICAgICAgICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc3RyaW5nX2ZpZWxkLmNjICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc3RyaW5nX2ZpZWxkLmgg
ICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc3RyaW5n
X2ZpZWxkX2xpdGUuY2MgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfc3RyaW5nX2ZpZWxkX2xpdGUuaCAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuY2MgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaCAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qcy9qc19nZW5lcmF0b3IuY2MgICAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19lbnVtLmNjICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19l
bnVtLmggICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9q
YXZhbmFub19lbnVtX2ZpZWxkLmNjICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhbmFuby9qYXZhbmFub19lbnVtX2ZpZWxkLmggICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhbmFuby9qYXZhbmFub19leHRlbnNpb24uY2MgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19leHRlbnNpb24uaCAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWVsZC5jYyAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWVs
ZC5oICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZh
bmFub19maWxlLmNjICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
bmFuby9qYXZhbmFub19maWxlLmggICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhbmFuby9qYXZhbmFub19nZW5lcmF0b3IuY2MgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19nZW5lcmF0b3IuaCAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19oZWxwZXJzLmNjICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19oZWxwZXJz
LmggICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFu
b19tYXBfZmllbGQuY2MgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFu
by9qYXZhbmFub19tYXBfZmllbGQuaCAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhbmFuby9qYXZhbmFub19tZXNzYWdlLmNjICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tZXNzYWdlLmggICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tZXNzYWdlX2ZpZWxkLmNjICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tZXNzYWdlX2Zp
ZWxkLmggICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19w
YXJhbXMuaCAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9q
YXZhbmFub19wcmltaXRpdmVfZmllbGQuY2MgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YW5hbm8vamF2YW5hbm9fcHJpbWl0aXZlX2ZpZWxkLmggXAotICBnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW0uY2MgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW0uaCAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW1fZmll
bGQuY2MgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVj
X2VudW1fZmllbGQuaCAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9v
YmplY3RpdmVjX2V4dGVuc2lvbi5jYyAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2Jq
ZWN0aXZlYy9vYmplY3RpdmVjX2V4dGVuc2lvbi5oICAgXAotICBnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2ZpZWxkLmNjICAgICAgXAotICBnb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2ZpZWxkLmggICAgICAgXAotICBn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2ZpbGUuY2MgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2Zp
bGUuaCAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmpl
Y3RpdmVjX2dlbmVyYXRvci5jYyAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0
aXZlYy9vYmplY3RpdmVjX2hlbHBlcnMuY2MgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2hlbHBlcnMuaCAgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21hcF9maWVsZC5jYyAgXAotICBnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21hcF9maWVsZC5oICAg
XAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21lc3Nh
Z2UuY2MgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3Rp
dmVjX21lc3NhZ2UuaCAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZl
Yy9vYmplY3RpdmVjX21lc3NhZ2VfZmllbGQuY2MgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21lc3NhZ2VfZmllbGQuaCBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfb25lb2YuY2MgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfb25lb2YuaCAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfcHJp
bWl0aXZlX2ZpZWxkLmNjIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMv
b2JqZWN0aXZlY19wcmltaXRpdmVfZmllbGQuaCBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9weXRob24vcHl0aG9uX2dlbmVyYXRvci5jYyAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9ydWJ5L3J1YnlfZ2VuZXJhdG9yLmNjICAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2RvY19jb21tZW50LmNjICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2RvY19jb21tZW50Lmgg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW0u
Y2MgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3No
YXJwX2VudW0uaCAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
c2hhcnAvY3NoYXJwX2VudW1fZmllbGQuY2MgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX2VudW1fZmllbGQuaCAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuY2MgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuaCAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2dlbmVyYXRv
ci5jYyAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJw
X2hlbHBlcnMuY2MgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hh
cnAvY3NoYXJwX2hlbHBlcnMuaCAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jc2hhcnAvY3NoYXJwX21hcF9maWVsZC5jYyAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21hcF9maWVsZC5oICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2UuY2MgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2UuaCAg
ICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21l
c3NhZ2VfZmllbGQuY2MgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAv
Y3NoYXJwX21lc3NhZ2VfZmllbGQuaCAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jc2hhcnAvY3NoYXJwX29wdGlvbnMuaCAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3ByaW1pdGl2ZV9maWVsZC5jYyAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3ByaW1pdGl2ZV9maWVsZC5oICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlZmxlY3Rpb25fY2xh
c3MuY2MgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVm
bGVjdGlvbl9jbGFzcy5oICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJw
L2NzaGFycF9yZXBlYXRlZF9lbnVtX2ZpZWxkLmNjIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfZW51bV9maWVsZC5oIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfbWVzc2FnZV9maWVsZC5jYyBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX21lc3NhZ2Vf
ZmllbGQuaCBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVh
dGVkX3ByaW1pdGl2ZV9maWVsZC5jYyBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hh
cnAvY3NoYXJwX3JlcGVhdGVkX3ByaW1pdGl2ZV9maWVsZC5oIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfc291cmNlX2dlbmVyYXRvcl9iYXNlLmNjIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfc291cmNlX2dlbmVyYXRvcl9iYXNl
LmggXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF93cmFwcGVyX2Zp
ZWxkLmNjICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF93
cmFwcGVyX2ZpZWxkLmgKLQotYmluX1BST0dSQU1TID0gcHJvdG9jCi1wcm90b2NfTERBREQgPSAk
KFBUSFJFQURfTElCUykgbGlicHJvdG9idWYubGEgbGlicHJvdG9jLmxhCi1wcm90b2NfU09VUkNF
UyA9IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9tYWluLmNjCi0KLSMgVGVzdHMgPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQot
cHJvdG9jX2lucHV0cyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvYW55X3Rlc3QucHJvdG8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2Nw
cF90ZXN0X2JhZF9pZGVudGlmaWVycy5wcm90byAgICAgXAotICBnb29nbGUvcHJvdG9idWYvbWFw
X2xpdGVfdW5pdHRlc3QucHJvdG8gICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvbWFwX3Byb3RvMl91bml0dGVzdC5wcm90byAgICAgICAgICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvbWFwX3VuaXR0ZXN0LnByb3RvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfYXJlbmEucHJvdG8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfY3Vz
dG9tX29wdGlvbnMucHJvdG8gICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
dW5pdHRlc3RfZHJvcF91bmtub3duX2ZpZWxkcy5wcm90byAgICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvdW5pdHRlc3RfZW1iZWRfb3B0aW1pemVfZm9yLnByb3RvICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZW1wdHkucHJvdG8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZW5vcm1vdXNfZGVz
Y3JpcHRvci5wcm90byAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rf
aW1wb3J0X2xpdGUucHJvdG8gICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvdW5pdHRlc3RfaW1wb3J0LnByb3RvICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBn
b29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpY19saXRlLnByb3RvICAgICAgICAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpYy5wcm90byAg
ICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbGl0ZV9pbXBv
cnRzX25vbmxpdGUucHJvdG8gICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRl
c3RfbGl0ZS5wcm90byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJv
dG9idWYvdW5pdHRlc3RfbXNldC5wcm90byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbXNldF93aXJlX2Zvcm1hdC5wcm90byAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fYXJlbmFfbGl0ZS5wcm90
byAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fYXJl
bmFfaW1wb3J0LnByb3RvICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5p
dHRlc3Rfbm9fYXJlbmEucHJvdG8gICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvdW5pdHRlc3Rfbm9fZmllbGRfcHJlc2VuY2UucHJvdG8gICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fZ2VuZXJpY19zZXJ2aWNlcy5wcm90byAg
ICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfb3B0aW1pemVfZm9yLnBy
b3RvICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJl
c2VydmVfdW5rbm93bl9lbnVtMi5wcm90byAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
dW5pdHRlc3RfcHJlc2VydmVfdW5rbm93bl9lbnVtLnByb3RvICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zX2FyZW5hLnByb3RvICAgICAg
ICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zX2FyZW5h
X2xpdGUucHJvdG8gICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdF9wcm90bzNfbGl0ZS5wcm90byAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL3VuaXR0ZXN0X3dlbGxfa25vd25fdHlwZXMucHJvdG8gICAgICAgICAgICAgICAgIFwK
LSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvYW55cy5wcm90byAgICAg
ICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvYm9v
a3MucHJvdG8gICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwv
dGVzdGRhdGEvZGVmYXVsdF92YWx1ZS5wcm90byAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvdGVzdGRhdGEvZGVmYXVsdF92YWx1ZV90ZXN0LnByb3RvIFwKLSAgZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvZmllbGRfbWFzay5wcm90byAgICAgICAg
IFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvbWFwcy5wcm90byAg
ICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEv
b25lb2ZzLnByb3RvICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJu
YWwvdGVzdGRhdGEvc3RydWN0LnByb3RvICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvdGltZXN0YW1wX2R1cmF0aW9uLnByb3RvIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvanNvbl9mb3JtYXRfcHJvdG8zLnByb3RvICAgICAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9kaWZmZXJlbmNlcl91bml0dGVz
dC5wcm90byAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfdGVz
dF9sYXJnZV9lbnVtX3ZhbHVlLnByb3RvCi0KLUVYVFJBX0RJU1QgPSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgJChwcm90b2NfaW5wdXRzKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc29sYXJpcy9s
aWJzdGRjKysubGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
Z29vZ2xlL3Byb3RvYnVmL2lvL2d6aXBfc3RyZWFtLmggICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL2lvL2d6aXBfc3RyZWFtX3VuaXR0ZXN0LnNoICAgICAg
ICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL2dvbGRlbl9tZXNzYWdl
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL2dvbGRl
bl9tZXNzYWdlX29uZW9mX2ltcGxlbWVudGVkICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Rlc3Rk
YXRhL2dvbGRlbl9tZXNzYWdlX3Byb3RvMyAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL3Rlc3RkYXRhL2dvbGRlbl9wYWNrZWRfZmllbGRzX21lc3NhZ2UgICAgICAgIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL3Rlc3RkYXRhL2JhZF91dGY4X3N0cmluZyAgICAgICAgICAgICAgICAgICAg
IFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL21hcF90ZXN0X2RhdGEudHh0ICAgICAgICAg
ICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL3RleHRfZm9ybWF0X3VuaXR0
ZXN0X2RhdGEudHh0ICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL3RleHRfZm9y
bWF0X3VuaXR0ZXN0X2RhdGFfb25lb2ZfaW1wbGVtZW50ZWQudHh0ICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi90ZXN0ZGF0YS90ZXh0X2Zvcm1hdF91bml0dGVzdF9kYXRhX3BvaW50eS50eHQgICAgICAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdGVzdGRhdGEvdGV4dF9mb3JtYXRfdW5pdHRlc3Rf
ZGF0YV9wb2ludHlfb25lb2YudHh0ICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRh
L3RleHRfZm9ybWF0X3VuaXR0ZXN0X2V4dGVuc2lvbnNfZGF0YS50eHQgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi90ZXN0ZGF0YS90ZXh0X2Zvcm1hdF91bml0dGVzdF9leHRlbnNpb25zX2Rh
dGFfcG9pbnR5LnR4dCAgXAotICBnb29nbGUvcHJvdG9idWYvcGFja2FnZV9pbmZvLmggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvaW8vcGFja2FnZV9p
bmZvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvcnVieS9ydWJ5X2dlbmVyYXRlZF9jb2RlLnByb3RvICAgICAgXAotICBnb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvcnVieS9ydWJ5X2dlbmVyYXRlZF9jb2RlLnJiICAgICAgICAgXAotICBn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGFja2FnZV9pbmZvLmggICAgICAgICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvemlwX291dHB1dF91bml0dGVzdC5zaAot
Ci1wcm90b2NfbGl0ZV9vdXRwdXRzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9tYXBfbGl0ZV91bml0dGVzdC5wYi5jYyAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9tYXBfbGl0ZV91bml0dGVzdC5w
Yi5oICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9s
aXRlLnBiLmNjICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91
bml0dGVzdF9saXRlLnBiLmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi91bml0dGVzdF9ub19hcmVuYV9saXRlLnBiLmNjICAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19hcmVuYV9saXRlLnBiLmggICAgICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnRfbGl0ZS5wYi5jYyAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnRfbGl0ZS5w
Yi5oICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBv
cnRfcHVibGljX2xpdGUucGIuY2MgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdF9pbXBvcnRfcHVibGljX2xpdGUucGIuaAotCi1wcm90b2Nfb3V0cHV0cyA9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICQocHJvdG9jX2xp
dGVfb3V0cHV0cykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9hbnlfdGVzdC5wYi5jYyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9hbnlfdGVzdC5wYi5oICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3Bw
X3Rlc3RfYmFkX2lkZW50aWZpZXJzLnBiLmNjICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jcHAvY3BwX3Rlc3RfYmFkX2lkZW50aWZpZXJzLnBiLmggICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3Rlc3RfbGFyZ2VfZW51bV92YWx1ZS5wYi5jYyAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3Rlc3RfbGFyZ2VfZW51bV92YWx1
ZS5wYi5oICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9tYXBfcHJvdG8yX3VuaXR0ZXN0LnBiLmNj
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9tYXBfcHJvdG8yX3Vu
aXR0ZXN0LnBiLmggICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9t
YXBfdW5pdHRlc3QucGIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9tYXBfdW5pdHRlc3QucGIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9hcmVuYS5wYi5jYyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9hcmVuYS5wYi5oICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9j
dXN0b21fb3B0aW9ucy5wYi5jYyAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi91bml0dGVzdF9jdXN0b21fb3B0aW9ucy5wYi5oICAgICAgICAgICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi91bml0dGVzdF9kcm9wX3Vua25vd25fZmllbGRzLnBiLmNjICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9kcm9wX3Vua25vd25fZmllbGRzLnBi
LmggICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbWJlZF9vcHRp
bWl6ZV9mb3IucGIuY2MgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVz
dF9lbWJlZF9vcHRpbWl6ZV9mb3IucGIuaCAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi91bml0dGVzdF9lbXB0eS5wYi5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbXB0eS5wYi5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbm9ybW91c19kZXNjcmlwdG9y
LnBiLmNjICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbm9ybW91
c19kZXNjcmlwdG9yLnBiLmggICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdF9pbXBvcnQucGIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi91bml0dGVzdF9pbXBvcnQucGIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnRfcHVibGljLnBiLmNjICAgICAgICAg
ICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnRfcHVibGljLnBi
LmggICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9saXRl
X2ltcG9ydHNfbm9ubGl0ZS5wYi5jYyAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91
bml0dGVzdF9saXRlX2ltcG9ydHNfbm9ubGl0ZS5wYi5oICAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0LnBiLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0LnBiLmggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0X3dpcmVfZm9y
bWF0LnBiLmNjICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9t
c2V0X3dpcmVfZm9ybWF0LnBiLmggICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi91bml0dGVzdF9ub19hcmVuYV9pbXBvcnQucGIuY2MgICAgICAgICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19hcmVuYV9pbXBvcnQucGIuaCAgICAgICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19hcmVuYS5wYi5jYyAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19hcmVuYS5w
Yi5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVz
dF9ub19maWVsZF9wcmVzZW5jZS5wYi5jYyAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi91bml0dGVzdF9ub19maWVsZF9wcmVzZW5jZS5wYi5oICAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19nZW5lcmljX3NlcnZpY2VzLnBiLmNjICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19nZW5lcmljX3NlcnZpY2Vz
LnBiLmggICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9vcHRpbWl6
ZV9mb3IucGIuY2MgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdF9vcHRpbWl6ZV9mb3IucGIuaCAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi91bml0dGVzdC5wYi5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wYi5oICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcmVzZXJ2ZV91bmtub3du
X2VudW0yLnBiLmNjICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcmVz
ZXJ2ZV91bmtub3duX2VudW0yLnBiLmggICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91
bml0dGVzdF9wcmVzZXJ2ZV91bmtub3duX2VudW0ucGIuY2MgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi91bml0dGVzdF9wcmVzZXJ2ZV91bmtub3duX2VudW0ucGIuaCAgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcm90bzNfYXJlbmEucGIuY2MgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcm90bzNfYXJlbmEu
cGIuaCAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9w
cm90bzNfYXJlbmFfbGl0ZS5wYi5jYyAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL3VuaXR0ZXN0X3Byb3RvM19hcmVuYV9saXRlLnBiLmggICAgICAgICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zX2xpdGUucGIuY2MgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcm90bzNfbGl0ZS5w
Yi5oICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3dl
bGxfa25vd25fdHlwZXMucGIuY2MgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L3VuaXR0ZXN0X3dlbGxfa25vd25fdHlwZXMucGIuaCAgICAgICAgICAgICAgICAgIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvYW55cy5wYi5jYyAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvYW55cy5wYi5o
ICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRh
dGEvYm9va3MucGIuY2MgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50
ZXJuYWwvdGVzdGRhdGEvYm9va3MucGIuaCAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvZGVmYXVsdF92YWx1ZS5wYi5jYyAgICAgIFwKLSAg
Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvZGVmYXVsdF92YWx1ZS5wYi5o
ICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvZGVmYXVs
dF92YWx1ZV90ZXN0LnBiLmNjIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVz
dGRhdGEvZGVmYXVsdF92YWx1ZV90ZXN0LnBiLmggIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
aW50ZXJuYWwvdGVzdGRhdGEvZmllbGRfbWFzay5wYi5jYyAgICAgICAgIFwKLSAgZ29vZ2xlL3By
b3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvZmllbGRfbWFzay5wYi5oICAgICAgICAgIFwK
LSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvbWFwcy5wYi5jYyAgICAg
ICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvbWFw
cy5wYi5oICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwv
dGVzdGRhdGEvb25lb2ZzLnBiLmNjICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvdGVzdGRhdGEvb25lb2ZzLnBiLmggICAgICAgICAgICAgIFwKLSAgZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvc3RydWN0LnBiLmNjICAgICAgICAgICAg
IFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvc3RydWN0LnBiLmgg
ICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEv
dGltZXN0YW1wX2R1cmF0aW9uLnBiLmNjIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJu
YWwvdGVzdGRhdGEvdGltZXN0YW1wX2R1cmF0aW9uLnBiLmggIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L3V0aWwvanNvbl9mb3JtYXRfcHJvdG8zLnBiLmNjICAgICAgICAgICAgICAgICAgIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvanNvbl9mb3JtYXRfcHJvdG8zLnBiLmggICAgICAgICAgICAgICAg
ICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9kaWZmZXJlbmNlcl91bml0dGVz
dC5wYi5jYyAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9kaWZmZXJl
bmNlcl91bml0dGVzdC5wYi5oCi0KLUJVSUxUX1NPVVJDRVMgPSAkKHByb3RvY19vdXRwdXRzKQot
Ci1pZiBVU0VfRVhURVJOQUxfUFJPVE9DCi0KLXVuaXR0ZXN0X3Byb3RvX21pZGRsZW1hbjogJChw
cm90b2NfaW5wdXRzKQotCSQoUFJPVE9DKSAtSSQoc3JjZGlyKSAtLWNwcF9vdXQ9LiAkXgotCXRv
dWNoIHVuaXR0ZXN0X3Byb3RvX21pZGRsZW1hbgotCi1lbHNlCi0KLSMgV2UgaGF2ZSB0byBjZCB0
byAkKHNyY2RpcikgYmVmb3JlIGV4ZWN1dGluZyBwcm90b2MgYmVjYXVzZSAkKHByb3RvY19pbnB1
dHMpIGlzCi0jIHJlbGF0aXZlIHRvIHNyY2Rpciwgd2hpY2ggbWF5IG5vdCBiZSB0aGUgc2FtZSBh
cyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hlbgotIyBidWlsZGluZyBvdXQtb2YtdHJlZS4KLXVu
aXR0ZXN0X3Byb3RvX21pZGRsZW1hbjogcHJvdG9jJChFWEVFWFQpICQocHJvdG9jX2lucHV0cykK
LQlvbGRwd2Q9YHB3ZGAgJiYgKCBjZCAkKHNyY2RpcikgJiYgJCRvbGRwd2QvcHJvdG9jJChFWEVF
WFQpIC1JLiAtLWNwcF9vdXQ9JCRvbGRwd2QgJChwcm90b2NfaW5wdXRzKSApCi0JdG91Y2ggdW5p
dHRlc3RfcHJvdG9fbWlkZGxlbWFuCi0KLWVuZGlmCi0KLSQocHJvdG9jX291dHB1dHMpOiB1bml0
dGVzdF9wcm90b19taWRkbGVtYW4KLQotQ09NTU9OX1RFU1RfU09VUkNFUyA9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvYXJlbmFf
dGVzdF91dGlsLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvYXJlbmFfdGVzdF91dGlsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvbWFwX3Rlc3RfdXRpbC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvbWFwX3Rlc3RfdXRpbC5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvbWFwX3Rlc3RfdXRpbF9pbXBsLmggICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdGVzdF91dGlsLmNjICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdGVzdF91dGls
LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
dGVzdGluZy9nb29nbGV0ZXN0LmNjICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0LmggICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmNjICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmgKLQotY2hlY2tfUFJPR1JB
TVMgPSBwcm90b2MgcHJvdG9idWYtdGVzdCBwcm90b2J1Zi1sYXp5LWRlc2NyaXB0b3ItdGVzdCBc
Ci0gICAgICAgICAgICAgICAgIHByb3RvYnVmLWxpdGUtdGVzdCB0ZXN0X3BsdWdpbiBwcm90b2J1
Zi1saXRlLWFyZW5hLXRlc3QgXAotICAgICAgICAgICAgICAgICAkKEdaQ0hFQ0tQUk9HUkFNUykK
LXByb3RvYnVmX3Rlc3RfTERBREQgPSAkKFBUSFJFQURfTElCUykgbGlicHJvdG9idWYubGEgbGli
cHJvdG9jLmxhIFwKLSAgICAgICAgICAgICAgICAgICAgICAuLi9nbW9jay9ndGVzdC9saWIvbGli
Z3Rlc3QubGEgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAuLi9nbW9jay9s
aWIvbGliZ21vY2subGEgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAuLi9nbW9jay9saWIvbGliZ21vY2tfbWFpbi5sYQotcHJvdG9idWZfdGVzdF9DUFBGTEFHUyA9
IC1JJChzcmNkaXIpLy4uL2dtb2NrL2d0ZXN0L2luY2x1ZGUgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgIC1JJChzcmNkaXIpLy4uL2dtb2NrL2luY2x1ZGUKLSMgRGlzYWJsZSBvcHRpbWl6YXRp
b24gZm9yIHRlc3RzIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5IGFza2VkIGZvciBpdCwKLSMg
c2luY2UgdGVzdF91dGlsLmNjIHRha2VzIGZvcmV2ZXIgdG8gY29tcGlsZSB3aXRoIG9wdGltaXph
dGlvbiAod2l0aCBHQ0MpLgotIyBTZWUgY29uZmlndXJlLmFjIGZvciBtb3JlIGluZm8uCi1wcm90
b2J1Zl90ZXN0X0NYWEZMQUdTID0gJChOT19PUFRfQ1hYRkxBR1MpCi1wcm90b2J1Zl90ZXN0X1NP
VVJDRVMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9ieXRlc3RyZWFtX3VuaXR0ZXN0LmNjICAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb25fdW5pdHRlc3QuY2MgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9pbnQxMjhfdW5pdHRlc3QuY2MgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlX3VuaXR0ZXN0
LmNjICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0
dXNvcl90ZXN0LmNjICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdGF0dXNfdGVzdC5jYyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9zdHJpbmdwaWVjZV91bml0dGVzdC5jYyAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmludGZfdW5pdHRlc3QuY2MgICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1Y3R1cmFsbHlfdmFsaWRfdW5pdHRl
c3QuY2MgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsX3VuaXR0ZXN0
LmNjICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVicy90ZW1wbGF0
ZV91dGlsX3VuaXR0ZXN0LmNjICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy90aW1lX3Rlc3QuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi9zdHVicy90eXBlX3RyYWl0c191bml0dGVzdC5jYyAgICAgICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi9hbnlfdGVzdC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZ191bml0dGVzdC5jYyAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9hcmVuYV91bml0dGVzdC5jYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX2RhdGFi
YXNlX3VuaXR0ZXN0LmNjICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlw
dG9yX3VuaXR0ZXN0LmNjICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1
Zi9kcm9wX3Vua25vd25fZmllbGRzX3Rlc3QuY2MgICAgICAgICAgICAgICAgICBcCi0gIGdvb2ds
ZS9wcm90b2J1Zi9keW5hbWljX21lc3NhZ2VfdW5pdHRlc3QuY2MgICAgICAgICAgICAgICAgICBc
Ci0gIGdvb2dsZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0X3VuaXR0ZXN0LmNjICAgICAgICAgICAg
ICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV9yZWZsZWN0aW9u
X3VuaXR0ZXN0LmNjICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfdGVzdC5jYyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9tYXBfdGVzdC5j
YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9t
ZXNzYWdlX3VuaXR0ZXN0LmNjICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9w
cm90b2J1Zi9ub19maWVsZF9wcmVzZW5jZV90ZXN0LmNjICAgICAgICAgICAgICAgICAgICBcCi0g
IGdvb2dsZS9wcm90b2J1Zi9wcmVzZXJ2ZV91bmtub3duX2VudW1fdGVzdC5jYyAgICAgICAgICAg
ICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9wcm90bzNfYXJlbmFfdW5pdHRlc3QuY2MgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9wcm90bzNfYXJlbmFfbGl0ZV91bml0
dGVzdC5jYyAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Byb3RvM19s
aXRlX3VuaXR0ZXN0LmNjICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
cmVmbGVjdGlvbl9vcHNfdW5pdHRlc3QuY2MgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvcmVwZWF0ZWRfZmllbGRfcmVmbGVjdGlvbl91bml0dGVzdC5jYyAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGRfdW5pdHRlc3QuY2MgICAgICAgICAgICAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdGV4dF9mb3JtYXRfdW5pdHRlc3QuY2MgICAgICAg
ICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdW5rbm93bl9maWVsZF9zZXRfdW5p
dHRlc3QuY2MgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvd2VsbF9rbm93bl90
eXBlc191bml0dGVzdC5jYyAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvd2ly
ZV9mb3JtYXRfdW5pdHRlc3QuY2MgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJv
dG9idWYvaW8vY29kZWRfc3RyZWFtX3VuaXR0ZXN0LmNjICAgICAgICAgICAgICAgICAgXAotICBn
b29nbGUvcHJvdG9idWYvaW8vcHJpbnRlcl91bml0dGVzdC5jYyAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvaW8vdG9rZW5pemVyX3VuaXR0ZXN0LmNjICAgICAgICAg
ICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV91bml0
dGVzdC5jYyAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29tbWFu
ZF9saW5lX2ludGVyZmFjZV91bml0dGVzdC5jYyAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvaW1wb3J0ZXJfdW5pdHRlc3QuY2MgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvbW9ja19jb2RlX2dlbmVyYXRvci5jYyAgICAgICAgICAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvbW9ja19jb2RlX2dlbmVyYXRvci5oICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGFyc2VyX3VuaXR0ZXN0LmNjICAgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9ib290c3RyYXBf
dW5pdHRlc3QuY2MgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF91
bml0dGVzdC5oICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3BwL2NwcF91bml0dGVzdC5jYyAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3BwL2NwcF9wbHVnaW5fdW5pdHRlc3QuY2MgICAgICAgICAgXAotICBnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvY3BwL21ldGFkYXRhX3Rlc3QuY2MgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3BsdWdpbl91bml0dGVzdC5jYyAg
ICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2RvY19jb21tZW50
X3VuaXR0ZXN0LmNjICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9v
YmplY3RpdmVjX2hlbHBlcnNfdW5pdHRlc3QuY2MgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvcHl0aG9uL3B5dGhvbl9wbHVnaW5fdW5pdHRlc3QuY2MgICAgXAotICBnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvcnVieS9ydWJ5X2dlbmVyYXRvcl91bml0dGVzdC5jYyAgICAgXAotICBnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9nZW5lcmF0b3JfdW5pdHRlc3QuY2Mg
XAotICBnb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9jb21wYXJhdG9yX3Rlc3QuY2MgICAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9tYXNrX3V0aWxfdGVzdC5j
YyAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9kZWZh
dWx0X3ZhbHVlX29iamVjdHdyaXRlcl90ZXN0LmNjIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
aW50ZXJuYWwvanNvbl9vYmplY3R3cml0ZXJfdGVzdC5jYyAgICAgIFwKLSAgZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvanNvbl9zdHJlYW1fcGFyc2VyX3Rlc3QuY2MgICAgIFwKLSAgZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0c291cmNlX3Rlc3Qu
Y2MgXAotICBnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3R3
cml0ZXJfdGVzdC5jYyBcCi0gIGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5m
b190ZXN0X2hlbHBlci5jYyAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91dGlsL2pzb25fdXRp
bF90ZXN0LmNjICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi91dGls
L21lc3NhZ2VfZGlmZmVyZW5jZXJfdW5pdHRlc3QuY2MgICAgICAgICBcCi0gIGdvb2dsZS9wcm90
b2J1Zi91dGlsL3RpbWVfdXRpbF90ZXN0LmNjICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdv
b2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXJfdXRpbF90ZXN0LmNjICAgICAgICAgICAg
ICBcCi0gICQoQ09NTU9OX1RFU1RfU09VUkNFUykKLQotCi1ub2Rpc3RfcHJvdG9idWZfdGVzdF9T
T1VSQ0VTID0gJChwcm90b2Nfb3V0cHV0cykKLQotIyBSdW4gY3BwX3VuaXR0ZXN0IGFnYWluIHdp
dGggUFJPVE9CVUZfVEVTVF9OT19ERVNDUklQVE9SUyBkZWZpbmVkLgotcHJvdG9idWZfbGF6eV9k
ZXNjcmlwdG9yX3Rlc3RfTERBREQgPSAkKFBUSFJFQURfTElCUykgbGlicHJvdG9idWYubGEgXAot
ICAgICAgICAgICAgICAgICAgICAgIGxpYnByb3RvYy5sYSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgIC4uL2dtb2NrL2d0ZXN0L2xpYi9s
aWJndGVzdC5sYSAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgIC4uL2dt
b2NrL2xpYi9saWJnbW9jay5sYSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgICAgICAgIC4uL2dtb2NrL2xpYi9saWJnbW9ja19tYWluLmxhCi1wcm90b2J1Zl9sYXp5X2Rl
c2NyaXB0b3JfdGVzdF9DUFBGTEFHUyA9IC1JJChzcmNkaXIpLy4uL2dtb2NrL2luY2x1ZGUgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQoc3JjZGly
KS8uLi9nbW9jay9ndGVzdC9pbmNsdWRlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLURQUk9UT0JVRl9URVNUX05PX0RFU0NSSVBUT1JTCi1wcm90b2J1Zl9sYXp5
X2Rlc2NyaXB0b3JfdGVzdF9DWFhGTEFHUyA9ICQoTk9fT1BUX0NYWEZMQUdTKQotcHJvdG9idWZf
bGF6eV9kZXNjcmlwdG9yX3Rlc3RfU09VUkNFUyA9ICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF91bml0dGVzdC5jYyAgICAgICAgICAg
ICAgICAgXAotICAkKENPTU1PTl9URVNUX1NPVVJDRVMpCi1ub2Rpc3RfcHJvdG9idWZfbGF6eV9k
ZXNjcmlwdG9yX3Rlc3RfU09VUkNFUyA9ICQocHJvdG9jX291dHB1dHMpCi0KLUNPTU1PTl9MSVRF
X1RFU1RfU09VUkNFUyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBnb29nbGUvcHJvdG9idWYvYXJlbmFfdGVzdF91dGlsLmNjICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9hcmVuYV90ZXN0X3V0aWwu
aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVm
L21hcF9saXRlX3Rlc3RfdXRpbC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBnb29nbGUvcHJvdG9idWYvbWFwX2xpdGVfdGVzdF91dGlsLmggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi90ZXN0X3V0aWxfbGl0ZS5jYyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ29vZ2xlL3Byb3RvYnVmL3Rlc3Rf
dXRpbF9saXRlLmgKLQotIyBCdWlsZCBsaXRlX3VuaXR0ZXN0IHNlcGFyYXRlbHksIHNpbmNlIGl0
IGRvZXNuJ3QgdXNlIGd0ZXN0LiBJdCBjYW4ndAotIyBkZXBlbmQgb24gZ3Rlc3QgYmVjYXVzZSBv
dXIgaW50ZXJuYWwgdmVyc2lvbiBvZiBndGVzdCBkZXBlbmQgb24gcHJvdG8KLSMgZnVsbCBydW50
aW1lIGFuZCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIHRlc3QgYnVpbGRzIHdpdGhvdXQgZnVs
bAotIyBydW50aW1lLgotcHJvdG9idWZfbGl0ZV90ZXN0X0xEQUREID0gJChQVEhSRUFEX0xJQlMp
IGxpYnByb3RvYnVmLWxpdGUubGEKLXByb3RvYnVmX2xpdGVfdGVzdF9DWFhGTEFHUyA9ICQoTk9f
T1BUX0NYWEZMQUdTKQotcHJvdG9idWZfbGl0ZV90ZXN0X1NPVVJDRVMgPSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdvb2dsZS9wcm90b2J1Zi9saXRlX3Vu
aXR0ZXN0LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgJChDT01N
T05fTElURV9URVNUX1NPVVJDRVMpCi1ub2Rpc3RfcHJvdG9idWZfbGl0ZV90ZXN0X1NPVVJDRVMg
PSAkKHByb3RvY19saXRlX291dHB1dHMpCi0KLSMgbGl0ZV9hcmVuYV91bml0dGVzdCBkZXBlbmRz
IG9uIGd0ZXN0IGJlY2F1c2UgdGVib3JpbmdAIGZvdW5kIHRoYXQgd2l0aG91dAotIyBndGVzdCB3
aGVuIGJ1aWxkaW5nIHRoZSB0ZXN0IGludGVybmFsbHkgb3VyIG1lbW9yeSBzYW5pdGl6ZXIgZG9l
c24ndCBkZXRlY3QKLSMgbWVtb3J5IGxlYWtzIChkb24ndCBrbm93IHdoeSkuCi1wcm90b2J1Zl9s
aXRlX2FyZW5hX3Rlc3RfTERBREQgPSAkKFBUSFJFQURfTElCUykgbGlicHJvdG9idWYtbGl0ZS5s
YSBcCi0gICAgICAgICAgICAgICAgICAgICAgLi4vZ21vY2svZ3Rlc3QvbGliL2xpYmd0ZXN0Lmxh
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgLi4vZ21vY2svbGliL2xp
Ymdtb2NrLmxhICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAg
Li4vZ21vY2svbGliL2xpYmdtb2NrX21haW4ubGEKLXByb3RvYnVmX2xpdGVfYXJlbmFfdGVzdF9D
UFBGTEFHUyA9IC1JJChzcmNkaXIpLy4uL2dtb2NrL2luY2x1ZGUgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKHNyY2RpcikvLi4vZ21vY2svZ3Rlc3QvaW5j
bHVkZQotcHJvdG9idWZfbGl0ZV9hcmVuYV90ZXN0X0NYWEZMQUdTID0gJChOT19PUFRfQ1hYRkxB
R1MpCi1wcm90b2J1Zl9saXRlX2FyZW5hX3Rlc3RfU09VUkNFUyA9ICAgICAgIFwKLSAgZ29vZ2xl
L3Byb3RvYnVmL2xpdGVfYXJlbmFfdW5pdHRlc3QuY2MgXAotICAkKENPTU1PTl9MSVRFX1RFU1Rf
U09VUkNFUykKLW5vZGlzdF9wcm90b2J1Zl9saXRlX2FyZW5hX3Rlc3RfU09VUkNFUyA9ICQocHJv
dG9jX2xpdGVfb3V0cHV0cykKLQotIyBUZXN0IHBsdWdpbiBiaW5hcnkuCi10ZXN0X3BsdWdpbl9M
REFERCA9ICQoUFRIUkVBRF9MSUJTKSBsaWJwcm90b2J1Zi5sYSBsaWJwcm90b2MubGEgXAotICAg
ICAgICAgICAgICAgICAgICAuLi9nbW9jay9ndGVzdC9saWIvbGliZ3Rlc3QubGEKLXRlc3RfcGx1
Z2luX0NQUEZMQUdTID0gLUkkKHNyY2RpcikvLi4vZ21vY2svZ3Rlc3QvaW5jbHVkZQotdGVzdF9w
bHVnaW5fU09VUkNFUyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvbW9ja19jb2RlX2dlbmVyYXRvci5jYyAgICAg
ICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmNjICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
dGVzdF9wbHVnaW4uY2MKLQotaWYgSEFWRV9aTElCCi16Y2d6aXBfTERBREQgPSAkKFBUSFJFQURf
TElCUykgbGlicHJvdG9idWYubGEKLXpjZ3ppcF9TT1VSQ0VTID0gZ29vZ2xlL3Byb3RvYnVmL3Rl
c3RpbmcvemNnemlwLmNjCi0KLXpjZ3VuemlwX0xEQUREID0gJChQVEhSRUFEX0xJQlMpIGxpYnBy
b3RvYnVmLmxhCi16Y2d1bnppcF9TT1VSQ0VTID0gZ29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvemNn
dW56aXAuY2MKLWVuZGlmCi0KLVRFU1RTID0gcHJvdG9idWYtdGVzdCBwcm90b2J1Zi1sYXp5LWRl
c2NyaXB0b3ItdGVzdCBwcm90b2J1Zi1saXRlLXRlc3QgXAotICAgICAgICBnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvemlwX291dHB1dF91bml0dGVzdC5zaCAkKEdaVEVTVFMpICAgICBcCi0gICAg
ICAgIHByb3RvYnVmLWxpdGUtYXJlbmEtdGVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvUkVBRE1FLm1kIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Q2ZTI0Y2NlZmZh
NDcxNTBlNzRiYTMyNzMxZTE3ZThkMmEyOGZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL1JFQURNRS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiAr
MCwwIEBACi1Qcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ci1bIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9nb29nbGUvcHJvdG9idWYu
c3ZnP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL3RyYXZpcy1jaS5vcmcvZ29vZ2xlL3Byb3RvYnVm
KSBbIVtCdWlsZCBzdGF0dXNdKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL2FwaS9wcm9qZWN0cy9z
dGF0dXMvNzNjdGVlNnVhNHcycnVpbj9zdmc9dHJ1ZSldKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29t
L3Byb2plY3QvcHJvdG9idWYvcHJvdG9idWYpCi0KLUNvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
Ci0KLWh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0KLUMr
KyBJbnN0YWxsYXRpb24gLSBVbml4Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UbyBidWls
ZCBwcm90b2J1ZiBmcm9tIHNvdXJjZSwgdGhlIGZvbGxvd2luZyB0b29scyBhcmUgbmVlZGVkOgot
Ci0gICogYXV0b2NvbmYKLSAgKiBhdXRvbWFrZQotICAqIGxpYnRvb2wKLSAgKiBjdXJsICh1c2Vk
IHRvIGRvd25sb2FkIGdtb2NrKQotICAqIG1ha2UKLSAgKiBnKysKLSAgKiB1bnppcAotCi1PbiBV
YnVudHUsIHlvdSBjYW4gaW5zdGFsbCB0aGVtIHdpdGg6Ci0KLSAgJCBzdWRvIGFwdC1nZXQgaW5z
dGFsbCBhdXRvY29uZiBhdXRvbWFrZSBsaWJ0b29sIGN1cmwgbWFrZSBnKysgdW56aXAKLQotT24g
b3RoZXIgcGxhdGZvcm1zLCBwbGVhc2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIHBhY2thZ2UgbWFu
YWdpbmcgdG9vbCB0bwotaW5zdGFsbCB0aGVtIGJlZm9yZSBwcm9jZWVkaW5nLgotCi1JZiB5b3Ug
Z2V0IHRoZSBzb3VyY2UgZnJvbSBnaXRodWIsIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHRoZSBjb25m
aWd1cmUgc2NyaXB0Ci1maXJzdDoKLQotICAgICQgLi9hdXRvZ2VuLnNoCi0KLVRoaXMgd2lsbCBk
b3dubG9hZCBnbW9jayBzb3VyY2UgKHdoaWNoIGlzIHVzZWQgZm9yIEMrKyBQcm90b2NvbCBCdWZm
ZXIKLXVuaXQtdGVzdHMpIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgcnVuIGF1dG9tYWtl
LCBhdXRvY29uZiwgZXRjLgotdG8gZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYW5kIHZh
cmlvdXMgdGVtcGxhdGUgbWFrZWZpbGVzLgotCi1Zb3UgY2FuIHNraXAgdGhpcyBzdGVwIGlmIHlv
dSBhcmUgdXNpbmcgYSByZWxlYXNlIHBhY2thZ2UgKHdoaWNoIGFscmVhZHkKLWNvbnRhaW5zIGdt
b2NrIGFuZCB0aGUgY29uZmlndXJlIHNjcmlwdCkuCi0KLVRvIGJ1aWxkIGFuZCBpbnN0YWxsIHRo
ZSBDKysgUHJvdG9jb2wgQnVmZmVyIHJ1bnRpbWUgYW5kIHRoZSBQcm90b2NvbAotQnVmZmVyIGNv
bXBpbGVyIChwcm90b2MpIGV4ZWN1dGUgdGhlIGZvbGxvd2luZzoKLQotICAgICQgLi9jb25maWd1
cmUKLSAgICAkIG1ha2UKLSAgICAkIG1ha2UgY2hlY2sKLSAgICAkIHN1ZG8gbWFrZSBpbnN0YWxs
Ci0gICAgJCBzdWRvIGxkY29uZmlnICMgcmVmcmVzaCBzaGFyZWQgbGlicmFyeSBjYWNoZS4KLQot
SWYgIm1ha2UgY2hlY2siIGZhaWxzLCB5b3UgY2FuIHN0aWxsIGluc3RhbGwsIGJ1dCBpdCBpcyBs
aWtlbHkgdGhhdAotc29tZSBmZWF0dXJlcyBvZiB0aGlzIGxpYnJhcnkgd2lsbCBub3Qgd29yayBj
b3JyZWN0bHkgb24geW91ciBzeXN0ZW0uCi1Qcm9jZWVkIGF0IHlvdXIgb3duIHJpc2suCi0KLUZv
ciBhZHZhbmNlZCB1c2FnZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmUgYW5kIG1ha2UsIHBsZWFz
ZSByZWZlciB0byB0aGUKLWF1dG9jb25mIGRvY3VtZW50YXRpb246Ci0KLSAgaHR0cDovL3d3dy5n
bnUub3JnL3NvZnR3YXJlL2F1dG9jb25mL21hbnVhbC9hdXRvY29uZi5odG1sI1J1bm5pbmctY29u
ZmlndXJlLVNjcmlwdHMKLQotKipIaW50IG9uIGluc3RhbGwgbG9jYXRpb24qKgotCi0gIEJ5IGRl
ZmF1bHQsIHRoZSBwYWNrYWdlIHdpbGwgYmUgaW5zdGFsbGVkIHRvIC91c3IvbG9jYWwuICBIb3dl
dmVyLAotICBvbiBtYW55IHBsYXRmb3JtcywgL3Vzci9sb2NhbC9saWIgaXMgbm90IHBhcnQgb2Yg
TERfTElCUkFSWV9QQVRILgotICBZb3UgY2FuIGFkZCBpdCwgYnV0IGl0IG1heSBiZSBlYXNpZXIg
dG8ganVzdCBpbnN0YWxsIHRvIC91c3IKLSAgaW5zdGVhZC4gIFRvIGRvIHRoaXMsIGludm9rZSBj
b25maWd1cmUgYXMgZm9sbG93czoKLQotICAgIC4vY29uZmlndXJlIC0tcHJlZml4PS91c3IKLQot
ICBJZiB5b3UgYWxyZWFkeSBidWlsdCB0aGUgcGFja2FnZSB3aXRoIGEgZGlmZmVyZW50IHByZWZp
eCwgbWFrZSBzdXJlCi0gIHRvIHJ1biAibWFrZSBjbGVhbiIgYmVmb3JlIGJ1aWxkaW5nIGFnYWlu
LgotCi0qKkNvbXBpbGluZyBkZXBlbmRlbnQgcGFja2FnZXMqKgotCi0gIFRvIGNvbXBpbGUgYSBw
YWNrYWdlIHRoYXQgdXNlcyBQcm90b2NvbCBCdWZmZXJzLCB5b3UgbmVlZCB0byBwYXNzCi0gIHZh
cmlvdXMgZmxhZ3MgdG8geW91ciBjb21waWxlciBhbmQgbGlua2VyLiAgQXMgb2YgdmVyc2lvbiAy
LjIuMCwKLSAgUHJvdG9jb2wgQnVmZmVycyBpbnRlZ3JhdGVzIHdpdGggcGtnLWNvbmZpZyB0byBt
YW5hZ2UgdGhpcy4gIElmIHlvdQotICBoYXZlIHBrZy1jb25maWcgaW5zdGFsbGVkLCB0aGVuIHlv
dSBjYW4gaW52b2tlIGl0IHRvIGdldCBhIGxpc3Qgb2YKLSAgZmxhZ3MgbGlrZSBzbzoKLQotICAg
IHBrZy1jb25maWcgLS1jZmxhZ3MgcHJvdG9idWYgICAgICAgICAjIHByaW50IGNvbXBpbGVyIGZs
YWdzCi0gICAgcGtnLWNvbmZpZyAtLWxpYnMgcHJvdG9idWYgICAgICAgICAgICMgcHJpbnQgbGlu
a2VyIGZsYWdzCi0gICAgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgcHJvdG9idWYgICMgcHJp
bnQgYm90aAotCi0gIEZvciBleGFtcGxlOgotCi0gICAgYysrIG15X3Byb2dyYW0uY2MgbXlfcHJv
dG8ucGIuY2MgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIHByb3RvYnVmYAotCi0gIE5vdGUg
dGhhdCBwYWNrYWdlcyB3cml0dGVuIHByaW9yIHRvIHRoZSAyLjIuMCByZWxlYXNlIG9mIFByb3Rv
Y29sCi0gIEJ1ZmZlcnMgbWF5IG5vdCB5ZXQgaW50ZWdyYXRlIHdpdGggcGtnLWNvbmZpZyB0byBn
ZXQgZmxhZ3MsIGFuZCBtYXkKLSAgbm90IHBhc3MgdGhlIGNvcnJlY3Qgc2V0IG9mIGZsYWdzIHRv
IGNvcnJlY3RseSBsaW5rIGFnYWluc3QKLSAgbGlicHJvdG9idWYuICBJZiB0aGUgcGFja2FnZSBp
biBxdWVzdGlvbiB1c2VzIGF1dG9jb25mLCB5b3UgY2FuCi0gIG9mdGVuIGZpeCB0aGUgcHJvYmxl
bSBieSBpbnZva2luZyBpdHMgY29uZmlndXJlIHNjcmlwdCBsaWtlOgotCi0gICAgY29uZmlndXJl
IENYWEZMQUdTPSIkKHBrZy1jb25maWcgLS1jZmxhZ3MgcHJvdG9idWYpIiBcCi0gICAgICAgICAg
ICAgIExJQlM9IiQocGtnLWNvbmZpZyAtLWxpYnMgcHJvdG9idWYpIgotCi0gIFRoaXMgd2lsbCBm
b3JjZSBpdCB0byB1c2UgdGhlIGNvcnJlY3QgZmxhZ3MuCi0KLSAgSWYgeW91IGFyZSB3cml0aW5n
IGFuIGF1dG9jb25mLWJhc2VkIHBhY2thZ2UgdGhhdCB1c2VzIFByb3RvY29sCi0gIEJ1ZmZlcnMs
IHlvdSBzaG91bGQgcHJvYmFibHkgdXNlIHRoZSBQS0dfQ0hFQ0tfTU9EVUxFUyBtYWNybyBpbiB5
b3VyCi0gIGNvbmZpZ3VyZSBzY3JpcHQgbGlrZToKLQotICAgIFBLR19DSEVDS19NT0RVTEVTKFtw
cm90b2J1Zl0sIFtwcm90b2J1Zl0pCi0KLSAgU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZv
ciBtb3JlIGluZm8uCi0KLSAgSWYgeW91IG9ubHkgd2FudCBwcm90b2J1Zi1saXRlLCBzdWJzdGl0
dXRlICJwcm90b2J1Zi1saXRlIiBpbiBwbGFjZQotICBvZiAicHJvdG9idWYiIGluIHRoZXNlIGV4
YW1wbGVzLgotCi0qKk5vdGUgZm9yIE1hYyB1c2VycyoqCi0KLSAgRm9yIGEgTWFjIHN5c3RlbSwg
VW5peCB0b29scyBhcmUgbm90IGF2YWlsYWJsZSBieSBkZWZhdWx0LiBZb3Ugd2lsbCBmaXJzdCBu
ZWVkCi0gIHRvIGluc3RhbGwgWGNvZGUgZnJvbSB0aGUgTWFjIEFwcFN0b3JlIGFuZCB0aGVuIHJ1
biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbQotICBhIHRlcm1pbmFsOgotCi0gICAgJCBzdWRv
IHhjb2RlLXNlbGVjdCAtLWluc3RhbGwKLQotICBUbyBpbnN0YWxsIFVuaXggdG9vbHMsIHlvdSBj
YW4gaW5zdGFsbCAicG9ydCIgZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgYXQKLSAgaHR0cHM6
Ly93d3cubWFjcG9ydHMub3JnIC4gVGhpcyB3aWxsIHJlc2lkZSBpbiAvb3B0L2xvY2FsL2Jpbi9w
b3J0IGZvciBtb3N0Ci0gIE1hYyBpbnN0YWxsYXRpb25zLgotCi0gICAgJCBzdWRvIC9vcHQvbG9j
YWwvYmluL3BvcnQgaW5zdGFsbCBhdXRvY29uZiBhdXRvbWFrZSBsaWJ0b29sCi0KLSAgVGhlbiBm
b2xsb3cgdGhlIFVuaXggaW5zdHJ1Y3Rpb25zIGFib3ZlLgotCi0qKk5vdGUgZm9yIGNyb3NzLWNv
bXBpbGluZyoqCi0KLSAgVGhlIG1ha2VmaWxlcyBub3JtYWxseSBpbnZva2UgdGhlIHByb3RvYyBl
eGVjdXRhYmxlIHRoYXQgdGhleSBqdXN0Ci0gIGJ1aWx0IGluIG9yZGVyIHRvIGJ1aWxkIHRlc3Rz
LiAgV2hlbiBjcm9zcy1jb21waWxpbmcsIHRoZSBwcm90b2MKLSAgZXhlY3V0YWJsZSBtYXkgbm90
IGJlIGV4ZWN1dGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS4gIEluIHRoaXMgY2FzZSwKLSAgeW91
IG11c3QgYnVpbGQgYSBjb3B5IG9mIHByb3RvYyBmb3IgdGhlIGhvc3QgbWFjaGluZSBmaXJzdCwg
dGhlbiB1c2UKLSAgdGhlIC0td2l0aC1wcm90b2Mgb3B0aW9uIHRvIHRlbGwgY29uZmlndXJlIHRv
IHVzZSBpdCBpbnN0ZWFkLiAgRm9yCi0gIGV4YW1wbGU6Ci0KLSAgICAuL2NvbmZpZ3VyZSAtLXdp
dGgtcHJvdG9jPXByb3RvYwotCi0gIFRoaXMgd2lsbCB1c2UgdGhlIGluc3RhbGxlZCBwcm90b2Mg
KGZvdW5kIGluIHlvdXIgJFBBVEgpIGluc3RlYWQgb2YKLSAgdHJ5aW5nIHRvIGV4ZWN1dGUgdGhl
IG9uZSBidWlsdCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuICBZb3UgY2FuCi0gIGFsc28gdXNl
IGFuIGV4ZWN1dGFibGUgdGhhdCBoYXNuJ3QgYmVlbiBpbnN0YWxsZWQuICBGb3IgZXhhbXBsZSwg
aWYKLSAgeW91IGJ1aWx0IHRoZSBwcm90b2J1ZiBwYWNrYWdlIGZvciB5b3VyIGhvc3QgbWFjaGlu
ZSBpbiAuLi9ob3N0LAotICB5b3UgbWlnaHQgZG86Ci0KLSAgICAuL2NvbmZpZ3VyZSAtLXdpdGgt
cHJvdG9jPS4uL2hvc3Qvc3JjL3Byb3RvYwotCi0gIEVpdGhlciB3YXksIHlvdSBtdXN0IG1ha2Ug
c3VyZSB0aGF0IHRoZSBwcm90b2MgZXhlY3V0YWJsZSB5b3UgdXNlCi0gIGhhcyB0aGUgc2FtZSB2
ZXJzaW9uIGFzIHRoZSBwcm90b2J1ZiBzb3VyY2UgY29kZSB5b3UgYXJlIHRyeWluZyB0bwotICB1
c2UgaXQgd2l0aC4KLQotKipOb3RlIGZvciBTb2xhcmlzIHVzZXJzKioKLQotICBTb2xhcmlzIDEw
IHg4NiBoYXMgYSBidWcgdGhhdCB3aWxsIG1ha2UgbGlua2luZyBmYWlsLCBjb21wbGFpbmluZwot
ICBhYm91dCBsaWJzdGRjKysubGEgYmVpbmcgaW52YWxpZC4gIFdlIGhhdmUgaW5jbHVkZWQgYSB3
b3JrLWFyb3VuZAotICBpbiB0aGlzIHBhY2thZ2UuICBUbyB1c2UgdGhlIHdvcmstYXJvdW5kLCBy
dW4gY29uZmlndXJlIGFzIGZvbGxvd3M6Ci0KLSAgICAuL2NvbmZpZ3VyZSBMREZMQUdTPS1MJFBX
RC9zcmMvc29sYXJpcwotCi0gIFNlZSBzcmMvc29sYXJpcy9saWJzdGRjKysubGEgZm9yIG1vcmUg
aW5mbyBvbiB0aGlzIGJ1Zy4KLQotKipOb3RlIGZvciBIUCBDKysgVHJ1NjQgdXNlcnMqKgotCi0g
IFRvIGNvbXBpbGUgaW52b2tlIGNvbmZpZ3VyZSBhcyBmb2xsb3dzOgotCi0gICAgLi9jb25maWd1
cmUgQ1hYRkxBR1M9Ii1PIC1zdGQgYW5zaSAtaWVlZSAtRF9fVVNFX1NURF9JT1NUUkVBTSIKLQot
ICBBbHNvLCB5b3Ugd2lsbCBuZWVkIHRvIHVzZSBnbWFrZSBpbnN0ZWFkIG9mIG1ha2UuCi0KLSoq
Tm90ZSBmb3IgQUlYIHVzZXJzKioKLQotICBDb21waWxlIHVzaW5nIHRoZSBJQk0geGxDIEMrKyBj
b21waWxlciBhcyBmb2xsb3dzOgotCi0gICAgLi9jb25maWd1cmUgQ1hYPXhsQwotCi0gIEFsc28s
IHlvdSB3aWxsIG5lZWQgdG8gdXNlIEdOVSBgbWFrZWAgKGBnbWFrZWApIGluc3RlYWQgb2YgQUlY
IGBtYWtlYC4KLQotQysrIEluc3RhbGxhdGlvbiAtIFdpbmRvd3MKLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLUlmIHlvdSBvbmx5IG5lZWQgdGhlIHByb3RvYyBiaW5hcnksIHlvdSBjYW4g
ZG93bmxvYWQgaXQgZnJvbSB0aGUgcmVsZWFzZQotcGFnZToKLQotICBodHRwczovL2dpdGh1Yi5j
b20vZ29vZ2xlL3Byb3RvYnVmL3JlbGVhc2VzCi0KLUluIHRoZSBkb3dubG9hZHMgc2VjdGlvbiwg
ZG93bmxvYWQgdGhlIHppcCBmaWxlIHByb3RvYy0kVkVSU0lPTi13aW4zMi56aXAuCi1JdCBjb250
YWlucyB0aGUgcHJvdG9jIGJpbmFyeSBhcyB3ZWxsIGFzIHB1YmxpYyBwcm90byBmaWxlcyBvZiBw
cm90b2J1ZgotbGlicmFyeS4KLQotVG8gYnVpbGQgZnJvbSBzb3VyY2UgdXNpbmcgTWljcm9zb2Z0
IFZpc3VhbCBDKyssIHNlZSBbY21ha2UvUkVBRE1FLm1kXSguLi9jbWFrZS9SRUFETUUubWQpLgot
Ci1UbyBidWlsZCBmcm9tIHNvdXJjZSB1c2luZyBDeWd3aW4gb3IgTWluR1csIGZvbGxvdyB0aGUg
VW5peCBpbnN0YWxsYXRpb24KLWluc3RydWN0aW9ucywgYWJvdmUuCi0KLUJpbmFyeSBDb21wYXRp
YmlsaXR5IFdhcm5pbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRHVlIHRvIHRo
ZSBuYXR1cmUgb2YgQysrLCBpdCBpcyB1bmxpa2VseSB0aGF0IGFueSB0d28gdmVyc2lvbnMgb2Yg
dGhlCi1Qcm90b2NvbCBCdWZmZXJzIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aWxsIGhhdmUgY29t
cGF0aWJsZSBBQklzLgotVGhhdCBpcywgaWYgeW91IGxpbmtlZCBhbiBleGVjdXRhYmxlIGFnYWlu
c3QgYW4gb2xkZXIgdmVyc2lvbiBvZgotbGlicHJvdG9idWYsIGl0IGlzIHVubGlrZWx5IHRvIHdv
cmsgd2l0aCBhIG5ld2VyIHZlcnNpb24gd2l0aG91dAotcmUtY29tcGlsaW5nLiAgVGhpcyBwcm9i
bGVtLCB3aGVuIGl0IG9jY3Vycywgd2lsbCBub3JtYWxseSBiZSBkZXRlY3RlZAotaW1tZWRpYXRl
bHkgb24gc3RhcnR1cCBvZiB5b3VyIGFwcC4gIFN0aWxsLCB5b3UgbWF5IHdhbnQgdG8gY29uc2lk
ZXIKLXVzaW5nIHN0YXRpYyBsaW5rYWdlLiAgWW91IGNhbiBjb25maWd1cmUgdGhpcyBwYWNrYWdl
IHRvIGluc3RhbGwKLXN0YXRpYyBsaWJyYXJpZXMgb25seSB1c2luZzoKLQotICAgIC4vY29uZmln
dXJlIC0tZGlzYWJsZS1zaGFyZWQKLQotVXNhZ2UKLS0tLS0tCi0KLVRoZSBjb21wbGV0ZSBkb2N1
bWVudGF0aW9uIGZvciBQcm90b2NvbCBCdWZmZXJzIGlzIGF2YWlsYWJsZSB2aWEgdGhlCi13ZWIg
YXQ6Ci0KLSAgICBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FueS5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9hbnkuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YjFkMzEwNjE0Y2I2
YjVmNGYzOTQzYWQyNDU0MzI3MzIzZDNhOWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FueS5jYworKysgL2Rldi9udWxs
CkBAIC0xLDExNCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wt
YnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hbnkuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1u
YW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGludGVybmFsIHsKLQotbmFtZXNwYWNlIHsK
LXN0cmluZyBHZXRUeXBlVXJsKGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UsCi0gICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmcmIHR5cGVfdXJsX3ByZWZpeCkgewotICBpZiAoIXR5cGVfdXJs
X3ByZWZpeC5lbXB0eSgpICYmCi0gICAgICB0eXBlX3VybF9wcmVmaXhbdHlwZV91cmxfcHJlZml4
LnNpemUoKSAtIDFdID09ICcvJykgewotICAgIHJldHVybiB0eXBlX3VybF9wcmVmaXggKyBtZXNz
YWdlLT5mdWxsX25hbWUoKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gdHlwZV91cmxfcHJlZml4
ICsgIi8iICsgbWVzc2FnZS0+ZnVsbF9uYW1lKCk7Ci0gIH0KLX0KLX0gIC8vIG5hbWVzcGFjZQot
Ci1jb25zdCBjaGFyIGtBbnlGdWxsVHlwZU5hbWVbXSA9ICJnb29nbGUucHJvdG9idWYuQW55IjsK
LWNvbnN0IGNoYXIga1R5cGVHb29nbGVBcGlzQ29tUHJlZml4W10gPSAidHlwZS5nb29nbGVhcGlz
LmNvbS8iOwotY29uc3QgY2hhciBrVHlwZUdvb2dsZVByb2RDb21QcmVmaXhbXSA9ICJ0eXBlLmdv
b2dsZXByb2QuY29tLyI7Ci0KLUFueU1ldGFkYXRhOjpBbnlNZXRhZGF0YShVcmxUeXBlKiB0eXBl
X3VybCwgVmFsdWVUeXBlKiB2YWx1ZSkKLSAgICA6IHR5cGVfdXJsXyh0eXBlX3VybCksIHZhbHVl
Xyh2YWx1ZSkgewotfQotCi12b2lkIEFueU1ldGFkYXRhOjpQYWNrRnJvbShjb25zdCBNZXNzYWdl
JiBtZXNzYWdlKSB7Ci0gIFBhY2tGcm9tKG1lc3NhZ2UsIGtUeXBlR29vZ2xlQXBpc0NvbVByZWZp
eCk7Ci19Ci0KLXZvaWQgQW55TWV0YWRhdGE6OlBhY2tGcm9tKGNvbnN0IE1lc3NhZ2UmIG1lc3Nh
Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHR5cGVfdXJsX3By
ZWZpeCkgewotICB0eXBlX3VybF8tPlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXRUeXBl
VXJsKG1lc3NhZ2UuR2V0RGVzY3JpcHRvcigpLCB0eXBlX3VybF9wcmVmaXgpKTsKLSAgbWVzc2Fn
ZS5TZXJpYWxpemVUb1N0cmluZyh2YWx1ZV8tPk11dGFibGVOb0FyZW5hKAotICAgICAgJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKSk7
Ci19Ci0KLWJvb2wgQW55TWV0YWRhdGE6OlVucGFja1RvKE1lc3NhZ2UqIG1lc3NhZ2UpIGNvbnN0
IHsKLSAgaWYgKCFJbnRlcm5hbElzKG1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKSkpIHsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIG1lc3NhZ2UtPlBhcnNlRnJvbVN0cmluZygKLSAg
ICAgIHZhbHVlXy0+R2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmcoKSkpOwotfQotCi1ib29sIEFueU1ldGFkYXRhOjpJbnRlcm5hbElzKGNvbnN0
IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIGNvbnN0IHsKLSAgY29uc3Qgc3RyaW5nIHR5cGVfdXJs
ID0gdHlwZV91cmxfLT5HZXROb0FyZW5hKAotICAgICAgICAgICAgICY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZygpKTsKLSAgc3RyaW5nIGZ1bGxfbmFtZTsKLSAg
aWYgKCFQYXJzZUFueVR5cGVVcmwodHlwZV91cmwsICZmdWxsX25hbWUpKSB7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0gIHJldHVybiBmdWxsX25hbWUgPT0gZGVzY3JpcHRvci0+ZnVsbF9uYW1l
KCk7Ci19Ci0KLWJvb2wgUGFyc2VBbnlUeXBlVXJsKGNvbnN0IHN0cmluZyYgdHlwZV91cmwsIHN0
cmluZyogZnVsbF90eXBlX25hbWUpIHsKLSAgc2l6ZV90IHBvcyA9IHR5cGVfdXJsLmZpbmRfbGFz
dF9vZigiLyIpOwotICBpZiAocG9zID09IHN0cmluZzo6bnBvcyB8fCBwb3MgKyAxID09IHR5cGVf
dXJsLnNpemUoKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAqZnVsbF90eXBlX25hbWUg
PSB0eXBlX3VybC5zdWJzdHIocG9zICsgMSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi0KLWJvb2wg
R2V0QW55RmllbGREZXNjcmlwdG9ycyhjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioqIHR5cGVfdXJsX2ZpZWxk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioqIHZh
bHVlX2ZpZWxkKSB7Ci0gICAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IG1lc3NhZ2Uu
R2V0RGVzY3JpcHRvcigpOwotICAgIGlmIChkZXNjcmlwdG9yLT5mdWxsX25hbWUoKSAhPSBrQW55
RnVsbFR5cGVOYW1lKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgICp0eXBlX3Vy
bF9maWVsZCA9IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TnVtYmVyKDEpOwotICAgICp2YWx1ZV9m
aWVsZCA9IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TnVtYmVyKDIpOwotICAgIHJldHVybiAoKnR5
cGVfdXJsX2ZpZWxkICE9IE5VTEwgJiYKLSAgICAgICAgICAgICgqdHlwZV91cmxfZmllbGQpLT50
eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX1NUUklORyAmJgotICAgICAgICAgICAgKnZh
bHVlX2ZpZWxkICE9IE5VTEwgJiYKLSAgICAgICAgICAgICgqdmFsdWVfZmllbGQpLT50eXBlKCkg
PT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGlu
dGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9hbnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRlNTQxNjY3ZjQ1OGM3Mjg3
YjZjOTUxYjEzYWUwOGQ1NjY5MzA4ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYW55LmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5k
ZWYgR09PR0xFX1BST1RPQlVGX0FOWV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0FOWV9I
X18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2FyZW5hc3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIEhlbHBlciBjbGFzcyB1c2VkIHRvIGlt
cGxlbWVudCBnb29nbGU6OnByb3RvYnVmOjpBbnkuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQg
QW55TWV0YWRhdGEgewotICB0eXBlZGVmIEFyZW5hU3RyaW5nUHRyIFVybFR5cGU7Ci0gIHR5cGVk
ZWYgQXJlbmFTdHJpbmdQdHIgVmFsdWVUeXBlOwotIHB1YmxpYzoKLSAgLy8gQW55TWV0YWRhdGEg
ZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgInR5cGVfdXJsIiBhbmQgInZhbHVlIi4KLSAgQW55
TWV0YWRhdGEoVXJsVHlwZSogdHlwZV91cmwsIFZhbHVlVHlwZSogdmFsdWUpOwotCi0gIC8vIFBh
Y2tzIGEgbWVzc2FnZSB1c2luZyB0aGUgZGVmYXVsdCB0eXBlIFVSTCBwcmVmaXg6ICJ0eXBlLmdv
b2dsZWFwaXMuY29tIi4KLSAgLy8gVGhlIHJlc3VsdGVkIHR5cGUgVVJMIHdpbGwgYmUgInR5cGUu
Z29vZ2xlYXBpcy5jb20vPG1lc3NhZ2VfZnVsbF9uYW1lPiIuCi0gIHZvaWQgUGFja0Zyb20oY29u
c3QgTWVzc2FnZSYgbWVzc2FnZSk7Ci0gIC8vIFBhY2tzIGEgbWVzc2FnZSB1c2luZyB0aGUgZ2l2
ZW4gdHlwZSBVUkwgcHJlZml4LiBUaGUgdHlwZSBVUkwgd2lsbCBiZQotICAvLyBjb25zdHJ1Y3Rl
ZCBieSBjb25jYXRlbmF0aW5nIHRoZSBtZXNzYWdlIHR5cGUncyBmdWxsIG5hbWUgdG8gdGhlIHBy
ZWZpeAotICAvLyB3aXRoIGFuIG9wdGlvbmFsICIvIiBzZXBhcmF0b3IgaWYgdGhlIHByZWZpeCBk
b2Vzbid0IGFscmVhZHkgZW5kIHVwICIvIi4KLSAgLy8gRm9yIGV4YW1wbGUsIGJvdGggUGFja0Zy
b20obWVzc2FnZSwgInR5cGUuZ29vZ2xlYXBpcy5jb20iKSBhbmQKLSAgLy8gUGFja0Zyb20obWVz
c2FnZSwgInR5cGUuZ29vZ2xlYXBpcy5jb20vIikgeWllbGQgdGhlIHNhbWUgcmVzdWx0IHR5cGUK
LSAgLy8gVVJMOiAidHlwZS5nb29nbGVhcGlzLmNvbS88bWVzc2FnZV9mdWxsX25hbWU+Ii4KLSAg
dm9pZCBQYWNrRnJvbShjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBzdHJpbmcmIHR5cGVf
dXJsX3ByZWZpeCk7Ci0KLSAgLy8gVW5wYWNrcyB0aGUgcGF5bG9hZCBpbnRvIHRoZSBnaXZlbiBt
ZXNzYWdlLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBtZXNzYWdlJ3MKLSAgLy8gdHlwZSBkb2Vzbid0
IG1hdGNoIHRoZSB0eXBlIHNwZWNpZmllZCBpbiB0aGUgdHlwZSBVUkwgKGkuZS4sIHRoZSBmdWxs
Ci0gIC8vIG5hbWUgYWZ0ZXIgdGhlIGxhc3QgIi8iIG9mIHRoZSB0eXBlIFVSTCBkb2Vzbid0IG1h
dGNoIHRoZSBtZXNzYWdlJ3MgYWN0YXVsCi0gIC8vIGZ1bGwgbmFtZSkgb3IgcGFyc2luZyB0aGUg
cGF5bG9hZCBoYXMgZmFpbGVkLgotICBib29sIFVucGFja1RvKE1lc3NhZ2UqIG1lc3NhZ2UpIGNv
bnN0OwotCi0gIC8vIENoZWNrcyB3aGV0aGVyIHRoZSB0eXBlIHNwZWNpZmllZCBpbiB0aGUgdHlw
ZSBVUkwgbWF0Y2hlcyB0aGUgZ2l2ZW4gdHlwZS4KLSAgLy8gQSB0eXBlIGlzIGNvbnNkaWVyZWQg
bWF0Y2hpbmcgaWYgaXRzIGZ1bGwgbmFtZSBtYXRjaGVzIHRoZSBmdWxsIG5hbWUgYWZ0ZXIKLSAg
Ly8gdGhlIGxhc3QgIi8iIGluIHRoZSB0eXBlIFVSTC4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgYm9vbCBJcygpIGNvbnN0IHsKLSAgICByZXR1cm4gSW50ZXJuYWxJcyhUOjpkZWZhdWx0X2lu
c3RhbmNlKCkuR2V0RGVzY3JpcHRvcigpKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgYm9vbCBJbnRl
cm5hbElzKGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UpIGNvbnN0OwotCi0gIFVybFR5cGUqIHR5
cGVfdXJsXzsKLSAgVmFsdWVUeXBlKiB2YWx1ZV87Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxf
Q09OU1RSVUNUT1JTKEFueU1ldGFkYXRhKTsKLX07Ci0KLWV4dGVybiBjb25zdCBjaGFyIGtBbnlG
dWxsVHlwZU5hbWVbXTsgICAgICAgICAgLy8gImdvb2dsZS5wcm90b2J1Zi5BbnkiLgotZXh0ZXJu
IGNvbnN0IGNoYXIga1R5cGVHb29nbGVBcGlzQ29tUHJlZml4W107ICAvLyAidHlwZS5nb29nbGVh
cGlzLmNvbS8iLgotZXh0ZXJuIGNvbnN0IGNoYXIga1R5cGVHb29nbGVQcm9kQ29tUHJlZml4W107
ICAvLyAidHlwZS5nb29nbGVwcm9kLmNvbS8iLgotCi0vLyBHZXQgdGhlIHByb3RvIHR5cGUgbmFt
ZSBmcm9tIEFueTo6dHlwZV91cmwgdmFsdWUuIEZvciBleGFtcGxlLCBwYXNzaW5nCi0vLyAidHlw
ZS5nb29nbGVhcGlzLmNvbS9ycGMuUXVlcnlPcmlnaW4iIHdpbGwgcmV0dXJuICJycGMuUXVlcnlP
cmlnaW4iIGluCi0vLyAqZnVsbF90eXBlX25hbWUuIFJldHVybnMgZmFsc2UgaWYgdHlwZV91cmwg
ZG9lcyBub3Qgc3RhcnQgd2l0aAotLy8gInR5cGUuZ29vZ2xlYXBpcy5jb20iIG9yICJ0eXBlLmdv
b2dsZXByb2QuY29tIi4KLWJvb2wgUGFyc2VBbnlUeXBlVXJsKGNvbnN0IHN0cmluZyYgdHlwZV91
cmwsIHN0cmluZyogZnVsbF90eXBlX25hbWUpOwotCi0vLyBTZWUgaWYgbWVzc2FnZSBpcyBvZiB0
eXBlIGdvb2dsZS5wcm90b2J1Zi5BbnksIGlmIHNvLCByZXR1cm4gdGhlIGRlc2NyaXB0b3JzCi0v
LyBmb3IgInR5cGVfdXJsIiBhbmQgInZhbHVlIiBmaWVsZHMuCi1ib29sIEdldEFueUZpZWxkRGVz
Y3JpcHRvcnMoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqKiB0eXBlX3VybF9maWVsZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqKiB2YWx1ZV9maWVsZCk7Ci0K
LX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0FOWV9IX18K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnkucGIuY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvYW55LnBiLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmRlNGE2ZDc3
NzMwYzFkZmU4NjBhMDU3ZjVjYzUxMjc4M2Q4ZWQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnkucGIuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBi
dWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVm
L2FueS5wcm90bwotCi0jZGVmaW5lIElOVEVSTkFMX1NVUFBSRVNTX1BST1RPQlVGX0ZJRUxEX0RF
UFJFQ0FUSU9OCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FueS5wYi5oPgotCi0jaW5jbHVk
ZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9wb3J0Lmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL29uY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8v
Y29kZWRfc3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xp
dGVfaW5sLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX29wcy5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGlu
Y2x1ZGVzKQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5h
bWVzcGFjZSB7Ci0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogQW55X2Rl
c2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
bmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgotICBBbnlfcmVmbGVjdGlvbl8gPSBOVUxMOwotCi19
ICAvLyBuYW1lc3BhY2UKLQotCi12b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJv
dG9idWZfMmZhbnlfMmVwcm90bygpIHsKLSAgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90
b2J1Zl8yZmFueV8yZXByb3RvKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZURl
c2NyaXB0b3IqIGZpbGUgPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclBvb2w6
OmdlbmVyYXRlZF9wb29sKCktPkZpbmRGaWxlQnlOYW1lKAotICAgICAgImdvb2dsZS9wcm90b2J1
Zi9hbnkucHJvdG8iKTsKLSAgR09PR0xFX0NIRUNLKGZpbGUgIT0gTlVMTCk7Ci0gIEFueV9kZXNj
cmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlwZSgwKTsKLSAgc3RhdGljIGNvbnN0IGludCBBbnlf
b2Zmc2V0c19bMl0gPSB7Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJ
RUxEX09GRlNFVChBbnksIHR5cGVfdXJsXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRF
RF9NRVNTQUdFX0ZJRUxEX09GRlNFVChBbnksIHZhbHVlXyksCi0gIH07Ci0gIEFueV9yZWZsZWN0
aW9uXyA9Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2Fn
ZVJlZmxlY3Rpb246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKAotICAgICAgQW55X2Rl
c2NyaXB0b3JfLAotICAgICAgQW55OjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAgIEFueV9vZmZz
ZXRzXywKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIHNpemVvZihBbnkp
LAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChB
bnksIF9pbnRlcm5hbF9tZXRhZGF0YV8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRF
RF9NRVNTQUdFX0ZJRUxEX09GRlNFVChBbnksIF9pc19kZWZhdWx0X2luc3RhbmNlXykpOwotfQot
Ci1uYW1lc3BhY2UgewotCi1HT09HTEVfUFJPVE9CVUZfREVDTEFSRV9PTkNFKHByb3RvYnVmX0Fz
c2lnbkRlc2NyaXB0b3JzX29uY2VfKTsKLWlubGluZSB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2Ny
aXB0b3JzT25jZSgpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpHb29nbGVPbmNlSW5pdCgmcHJv
dG9idWZfQXNzaWduRGVzY3JpcHRvcnNfb25jZV8sCi0gICAgICAgICAgICAgICAgICZwcm90b2J1
Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmYW55XzJlcHJvdG8pOwotfQotCi12b2lk
IHByb3RvYnVmX1JlZ2lzdGVyVHlwZXMoY29uc3QgOjpzdGQ6OnN0cmluZyYpIHsKLSAgcHJvdG9i
dWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2Fn
ZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgQW55X2Rl
c2NyaXB0b3JfLCAmQW55OjpkZWZhdWx0X2luc3RhbmNlKCkpOwotfQotCi19ICAvLyBuYW1lc3Bh
Y2UKLQotdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZhbnlf
MmVwcm90bygpIHsKLSAgZGVsZXRlIEFueTo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRlbGV0ZSBB
bnlfcmVmbGVjdGlvbl87Ci19Ci0KLXZvaWQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90
b2J1Zl8yZmFueV8yZXByb3RvKCkgewotICBzdGF0aWMgYm9vbCBhbHJlYWR5X2hlcmUgPSBmYWxz
ZTsKLSAgaWYgKGFscmVhZHlfaGVyZSkgcmV0dXJuOwotICBhbHJlYWR5X2hlcmUgPSB0cnVlOwot
ICBHT09HTEVfUFJPVE9CVUZfVkVSSUZZX1ZFUlNJT047Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpEZXNjcmlwdG9yUG9vbDo6SW50ZXJuYWxBZGRHZW5lcmF0ZWRGaWxlKAotICAgICJcblwwMzFn
b29nbGUvcHJvdG9idWYvYW55LnByb3RvXDAyMlwwMTdnb29nbGUucHJvdCIKLSAgICAib2J1Zlwi
JlxuXDAwM0FueVwwMjJcMDIwXG5cMDEwdHlwZV91cmxcMDMwXDAwMSBcMDAxKFx0XDAyMlxyXG5c
MDA1dmFsdWVcMDMwXDAwMiIKLSAgICAiIFwwMDEoXDAxNEJyXG5cMDIzY29tLmdvb2dsZS5wcm90
b2J1ZkJcMDEwQW55UHJvdG9QXDAwMVoiCi0gICAgIiVnaXRodWIuY29tL2dvbGFuZy9wcm90b2J1
Zi9wdHlwZXMvYW55XDI0MFwwMDEiCi0gICAgIlwwMDFcMjQyXDAwMlwwMDNHUEJcMjUyXDAwMlww
MzZHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMiCi0gICAgImJcMDA2cHJvdG8zIiwgMjA4
KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3Rl
ckdlbmVyYXRlZEZpbGUoCi0gICAgImdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8iLCAmcHJvdG9i
dWZfUmVnaXN0ZXJUeXBlcyk7Ci0gIEFueTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgQW55KCk7
Ci0gIEFueTo6ZGVmYXVsdF9pbnN0YW5jZV8tPkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpPblNodXRkb3duKCZwcm90b2J1Zl9TaHV0ZG93
bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZhbnlfMmVwcm90byk7Ci19Ci0KLS8vIEZvcmNlIEFk
ZERlc2NyaXB0b3JzKCkgdG8gYmUgY2FsbGVkIGF0IHN0YXRpYyBpbml0aWFsaXphdGlvbiB0aW1l
Lgotc3RydWN0IFN0YXRpY0Rlc2NyaXB0b3JJbml0aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8y
ZmFueV8yZXByb3RvIHsKLSAgU3RhdGljRGVzY3JpcHRvckluaXRpYWxpemVyX2dvb2dsZV8yZnBy
b3RvYnVmXzJmYW55XzJlcHJvdG8oKSB7Ci0gICAgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZw
cm90b2J1Zl8yZmFueV8yZXByb3RvKCk7Ci0gIH0KLX0gc3RhdGljX2Rlc2NyaXB0b3JfaW5pdGlh
bGl6ZXJfZ29vZ2xlXzJmcHJvdG9idWZfMmZhbnlfMmVwcm90b187Ci0KLW5hbWVzcGFjZSB7Ci0K
LXN0YXRpYyB2b2lkIE1lcmdlRnJvbUZhaWwoaW50IGxpbmUpIEdPT0dMRV9BVFRSSUJVVEVfQ09M
RDsKLXN0YXRpYyB2b2lkIE1lcmdlRnJvbUZhaWwoaW50IGxpbmUpIHsKLSAgR09PR0xFX0NIRUNL
KGZhbHNlKSA8PCBfX0ZJTEVfXyA8PCAiOiIgPDwgbGluZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi12b2lkIEFueTo6UGFja0Zyb20oY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlJiBtZXNzYWdlKSB7Ci0gIF9hbnlfbWV0YWRhdGFfLlBhY2tGcm9t
KG1lc3NhZ2UpOwotfQotCi12b2lkIEFueTo6UGFja0Zyb20oY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
OjpzdGQ6OnN0cmluZyYgdHlwZV91cmxfcHJlZml4KSB7Ci0gIF9hbnlfbWV0YWRhdGFfLlBhY2tG
cm9tKG1lc3NhZ2UsIHR5cGVfdXJsX3ByZWZpeCk7Ci19Ci0KLWJvb2wgQW55OjpVbnBhY2tUbyg6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UqIG1lc3NhZ2UpIGNvbnN0IHsKLSAgcmV0dXJuIF9h
bnlfbWV0YWRhdGFfLlVucGFja1RvKG1lc3NhZ2UpOwotfQotCi0jaWYgIWRlZmluZWQoX01TQ19W
RVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBBbnk6OmtUeXBlVXJsRmllbGROdW1i
ZXI7Ci1jb25zdCBpbnQgQW55OjprVmFsdWVGaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmlu
ZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotQW55OjpBbnkoKQotICA6IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpLCBfYW55
X21ldGFkYXRhXygmdHlwZV91cmxfLCAmdmFsdWVfKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5Bbnkp
Ci19Ci0KLXZvaWQgQW55OjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0
X2luc3RhbmNlXyA9IHRydWU7Ci19Ci0KLUFueTo6QW55KGNvbnN0IEFueSYgZnJvbSkKLSAgOiA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5V
TEwpLAotICAgIF9hbnlfbWV0YWRhdGFfKCZ0eXBlX3VybF8sICZ2YWx1ZV8pIHsKLSAgU2hhcmVk
Q3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5BbnkpCi19Ci0KLXZvaWQgQW55OjpT
aGFyZWRDdG9yKCkgewotICAgIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IGZhbHNlOwotICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZygpOwotICBfY2FjaGVkX3Np
emVfID0gMDsKLSAgdHlwZV91cmxfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgdmFsdWVfLlVu
c2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLQotQW55Ojp+QW55KCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuQW55KQotICBTaGFyZWRE
dG9yKCk7Ci19Ci0KLXZvaWQgQW55OjpTaGFyZWREdG9yKCkgewotICB0eXBlX3VybF8uRGVzdHJv
eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLSAgdmFsdWVfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGlmICh0aGlz
ICE9IGRlZmF1bHRfaW5zdGFuY2VfKSB7Ci0gIH0KLX0KLQotdm9pZCBBbnk6OlNldENhY2hlZFNp
emUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVH
SU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBB
bnk6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwot
ICByZXR1cm4gQW55X2Rlc2NyaXB0b3JfOwotfQotCi1jb25zdCBBbnkmIEFueTo6ZGVmYXVsdF9p
bnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0Fk
ZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZhbnlfMmVwcm90bygpOwotICByZXR1cm4gKmRlZmF1
bHRfaW5zdGFuY2VfOwotfQotCi1BbnkqIEFueTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwot
Ci1BbnkqIEFueTo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7
Ci0gIEFueSogbiA9IG5ldyBBbnk7Ci0gIGlmIChhcmVuYSAhPSBOVUxMKSB7Ci0gICAgYXJlbmEt
Pk93bihuKTsKLSAgfQotICByZXR1cm4gbjsKLX0KLQotdm9pZCBBbnk6OkNsZWFyKCkgewotLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLkFueSkKLSAgdHlwZV91cmxfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgdmFsdWVf
LkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLQotYm9vbCBBbnk6Ok1lcmdlUGFydGlhbEZy
b21Db2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3Ry
ZWFtKiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElD
VF9UUlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1
aW50MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29v
Z2xlLnByb3RvYnVmLkFueSkKLSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2ds
ZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigx
MjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVf
dW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCBz
dHJpbmcgdHlwZV91cmwgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0g
MTApIHsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFi
bGVfdHlwZV91cmwoKSkpOwotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgICAgICAgIHRoaXMt
PnR5cGVfdXJsKCkuZGF0YSgpLCB0aGlzLT50eXBlX3VybCgpLmxlbmd0aCgpLAotICAgICAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlBBUlNFLAot
ICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5BbnkudHlwZV91cmwiKSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxOCkpIGdvdG8gcGFyc2VfdmFsdWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBieXRlcyB2YWx1ZSA9IDI7Ci0gICAg
ICBjYXNlIDI6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxOCkgewotICAgICAgICAgcGFyc2VfdmFs
dWU6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpSZWFkQnl0ZXMoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVf
dmFsdWUoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1
YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1
Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAg
ICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5
cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2Vz
czsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OlNraXBGaWVsZChpbnB1dCwgdGFnKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgfQotICAgIH0KLSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkFueSkKLSAgcmV0dXJuIHRydWU7Ci1m
YWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29n
bGUucHJvdG9idWYuQW55KQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQg
QW55OjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5BbnkpCi0gIC8vIG9w
dGlvbmFsIHN0cmluZyB0eXBlX3VybCA9IDE7Ci0gIGlmICh0aGlzLT50eXBlX3VybCgpLnNpemUo
KSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMtPnR5cGVfdXJsKCkuZGF0YSgpLCB0aGlz
LT50eXBlX3VybCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuQW55
LnR5cGVfdXJsIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgMSwgdGhpcy0+dHlwZV91cmwo
KSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJ5dGVzIHZhbHVlID0gMjsKLSAgaWYg
KHRoaXMtPnZhbHVlKCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJ5dGVzTWF5YmVBbGlhc2VkKAotICAgICAgMiwg
dGhpcy0+dmFsdWUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChzZXJpYWxpemVfZW5kOmdvb2dsZS5wcm90b2J1Zi5BbnkpCi19Ci0KLTo6Z29vZ2xlOjpw
cm90b2J1Zjo6dWludDgqIEFueTo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgKLSAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29nbGUucHJvdG9i
dWYuQW55KQotICAvLyBvcHRpb25hbCBzdHJpbmcgdHlwZV91cmwgPSAxOwotICBpZiAodGhpcy0+
dHlwZV91cmwoKS5zaXplKCkgPiAwKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlZlcmlmeVV0ZjhTdHJpbmcoCi0gICAgICB0aGlzLT50eXBlX3Vy
bCgpLmRhdGEoKSwgdGhpcy0+dHlwZV91cmwoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAiZ29v
Z2xlLnByb3RvYnVmLkFueS50eXBlX3VybCIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5
KAotICAgICAgICAxLCB0aGlzLT50eXBlX3VybCgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0
aW9uYWwgYnl0ZXMgdmFsdWUgPSAyOwotICBpZiAodGhpcy0+dmFsdWUoKS5zaXplKCkgPiAwKSB7
Ci0gICAgdGFyZ2V0ID0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZUJ5dGVzVG9BcnJheSgKLSAgICAgICAgMiwgdGhpcy0+dmFsdWUoKSwg
dGFyZ2V0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVf
dG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5BbnkpCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0K
LWludCBBbnk6OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5BbnkpCi0gIGludCB0b3Rh
bF9zaXplID0gMDsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgdHlwZV91cmwgPSAxOwotICBpZiAo
dGhpcy0+dHlwZV91cmwoKS5zaXplKCkgPiAwKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdT
aXplKAotICAgICAgICB0aGlzLT50eXBlX3VybCgpKTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJ5
dGVzIHZhbHVlID0gMjsKLSAgaWYgKHRoaXMtPnZhbHVlKCkuc2l6ZSgpID4gMCkgewotICAgIHRv
dGFsX3NpemUgKz0gMSArCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6Qnl0ZXNTaXplKAotICAgICAgICB0aGlzLT52YWx1ZSgpKTsKLSAgfQotCi0g
IEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8g
PSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLSAg
cmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgQW55OjpNZXJnZUZyb20oY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuQW55KQotICBp
ZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19M
SU5FX18pOwotICBjb25zdCBBbnkqIHNvdXJjZSA9IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25zdCBBbnk+KAotICAgICAgICAg
ICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYu
QW55KQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1l
cmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkFu
eSkKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBBbnk6Ok1lcmdlRnJv
bShjb25zdCBBbnkmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19z
cGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5BbnkpCi0gIGlmIChHT09H
TEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7
Ci0gIGlmIChmcm9tLnR5cGVfdXJsKCkuc2l6ZSgpID4gMCkgewotCi0gICAgdHlwZV91cmxfLkFz
c2lnbldpdGhEZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJvbS50eXBlX3VybF8pOwotICB9Ci0gIGlmIChmcm9tLnZh
bHVlKCkuc2l6ZSgpID4gMCkgewotCi0gICAgdmFsdWVfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwg
ZnJvbS52YWx1ZV8pOwotICB9Ci19Ci0KLXZvaWQgQW55OjpDb3B5RnJvbShjb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkFueSkKLSAgaWYg
KCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwot
fQotCi12b2lkIEFueTo6Q29weUZyb20oY29uc3QgQW55JiBmcm9tKSB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90
b2J1Zi5BbnkpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1l
cmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBBbnk6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0K
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQW55OjpTd2FwKEFueSogb3RoZXIpIHsKLSAgaWYg
KG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQg
QW55OjpJbnRlcm5hbFN3YXAoQW55KiBvdGhlcikgewotICB0eXBlX3VybF8uU3dhcCgmb3RoZXIt
PnR5cGVfdXJsXyk7Ci0gIHZhbHVlXy5Td2FwKCZvdGhlci0+dmFsdWVfKTsKLSAgX2ludGVybmFs
X21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7Ci0gIHN0ZDo6c3dh
cChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19Ci0KLTo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWV0YWRhdGEgQW55OjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZf
QXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEg
bWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBBbnlfZGVzY3JpcHRvcl87Ci0gIG1l
dGFkYXRhLnJlZmxlY3Rpb24gPSBBbnlfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsK
LX0KLQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gQW55Ci0KLS8vIG9w
dGlvbmFsIHN0cmluZyB0eXBlX3VybCA9IDE7Ci12b2lkIEFueTo6Y2xlYXJfdHlwZV91cmwoKSB7
Ci0gIHR5cGVfdXJsXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gY29uc3QgOjpzdGQ6
OnN0cmluZyYgQW55Ojp0eXBlX3VybCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuQW55LnR5cGVfdXJsKQotICByZXR1cm4g
dHlwZV91cmxfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEFueTo6c2V0X3R5cGVfdXJsKGNv
bnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAotICB0eXBlX3VybF8uU2V0Tm9BcmVuYSgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29n
bGUucHJvdG9idWYuQW55LnR5cGVfdXJsKQotfQotIHZvaWQgQW55OjpzZXRfdHlwZV91cmwoY29u
c3QgY2hhciogdmFsdWUpIHsKLSAgCi0gIHR5cGVfdXJsXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6
OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkFueS50eXBlX3VybCkKLX0KLSB2b2lkIEFueTo6c2V0X3R5
cGVfdXJsKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAgdHlwZV91cmxf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5BbnkudHlwZV91cmwpCi19Ci0gOjpz
dGQ6OnN0cmluZyogQW55OjptdXRhYmxlX3R5cGVfdXJsKCkgewotICAKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkFueS50eXBlX3Vy
bCkKLSAgcmV0dXJuIHR5cGVfdXJsXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIDo6c3RkOjpz
dHJpbmcqIEFueTo6cmVsZWFzZV90eXBlX3VybCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkFueS50eXBlX3VybCkKLSAgCi0g
IHJldHVybiB0eXBlX3VybF8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEFueTo6c2V0
X2FsbG9jYXRlZF90eXBlX3VybCg6OnN0ZDo6c3RyaW5nKiB0eXBlX3VybCkgewotICBpZiAodHlw
ZV91cmwgIT0gTlVMTCkgewotICAgIAotICB9IGVsc2UgewotICAgIAotICB9Ci0gIHR5cGVfdXJs
Xy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdHlwZV91cmwpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuQW55LnR5cGVf
dXJsKQotfQotCi0vLyBvcHRpb25hbCBieXRlcyB2YWx1ZSA9IDI7Ci12b2lkIEFueTo6Y2xlYXJf
dmFsdWUoKSB7Ci0gIHZhbHVlXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gY29uc3Qg
OjpzdGQ6OnN0cmluZyYgQW55Ojp2YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuQW55LnZhbHVlKQotICByZXR1cm4g
dmFsdWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEFueTo6c2V0X3ZhbHVlKGNvbnN0IDo6
c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAotICB2YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVl
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9i
dWYuQW55LnZhbHVlKQotfQotIHZvaWQgQW55OjpzZXRfdmFsdWUoY29uc3QgY2hhciogdmFsdWUp
IHsKLSAgCi0gIHZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3Rv
YnVmLkFueS52YWx1ZSkKLX0KLSB2b2lkIEFueTo6c2V0X3ZhbHVlKGNvbnN0IHZvaWQqIHZhbHVl
LCBzaXplX3Qgc2l6ZSkgewotICAKLSAgdmFsdWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpz
dGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5w
cm90b2J1Zi5BbnkudmFsdWUpCi19Ci0gOjpzdGQ6OnN0cmluZyogQW55OjptdXRhYmxlX3ZhbHVl
KCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29v
Z2xlLnByb3RvYnVmLkFueS52YWx1ZSkKLSAgcmV0dXJuIHZhbHVlXy5NdXRhYmxlTm9BcmVuYSgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCkpOwotfQotIDo6c3RkOjpzdHJpbmcqIEFueTo6cmVsZWFzZV92YWx1ZSgpIHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkFueS52
YWx1ZSkKLSAgCi0gIHJldHVybiB2YWx1ZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lk
IEFueTo6c2V0X2FsbG9jYXRlZF92YWx1ZSg6OnN0ZDo6c3RyaW5nKiB2YWx1ZSkgewotICBpZiAo
dmFsdWUgIT0gTlVMTCkgewotICAgIAotICB9IGVsc2UgewotICAgIAotICB9Ci0gIHZhbHVlXy5T
ZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuQW55LnZhbHVlKQotfQot
Ci0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotCi0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQobmFtZXNwYWNlX3Njb3BlKQotCi19ICAvLyBuYW1lc3BhY2UgcHJv
dG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGdsb2JhbF9zY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnkucGIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnkucGIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTAwYTY3ZjYxMjYxYmZhMmRhMGJhN2MzNTFiMjM4ZmQyOGMyMzU5NS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
YW55LnBiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5
IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTog
Z29vZ2xlL3Byb3RvYnVmL2FueS5wcm90bwotCi0jaWZuZGVmIFBST1RPQlVGX2dvb2dsZV8yZnBy
b3RvYnVmXzJmYW55XzJlcHJvdG9fX0lOQ0xVREVECi0jZGVmaW5lIFBST1RPQlVGX2dvb2dsZV8y
ZnByb3RvYnVmXzJmYW55XzJlcHJvdG9fX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLSNpZiBHT09HTEVf
UFJPVE9CVUZfVkVSU0lPTiA8IDMwMDAwMDAKLSNlcnJvciBUaGlzIGZpbGUgd2FzIGdlbmVyYXRl
ZCBieSBhIG5ld2VyIHZlcnNpb24gb2YgcHJvdG9jIHdoaWNoIGlzCi0jZXJyb3IgaW5jb21wYXRp
YmxlIHdpdGggeW91ciBQcm90b2NvbCBCdWZmZXIgaGVhZGVycy4gIFBsZWFzZSB1cGRhdGUKLSNl
cnJvciB5b3VyIGhlYWRlcnMuCi0jZW5kaWYKLSNpZiAzMDAwMDAwIDwgR09PR0xFX1BST1RPQlVG
X01JTl9QUk9UT0NfVkVSU0lPTgotI2Vycm9yIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGFu
IG9sZGVyIHZlcnNpb24gb2YgcHJvdG9jIHdoaWNoIGlzCi0jZXJyb3IgaW5jb21wYXRpYmxlIHdp
dGggeW91ciBQcm90b2NvbCBCdWZmZXIgaGVhZGVycy4gIFBsZWFzZQotI2Vycm9yIHJlZ2VuZXJh
dGUgdGhpcyBmaWxlIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIHByb3RvYy4KLSNlbmRpZgotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2FyZW5hc3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9t
ZXNzYWdlX3V0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWV0YWRhdGEuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9yZXBlYXRlZF9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9leHRlbnNp
b25fc2V0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0Lmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FueS5oPgotLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGluY2x1ZGVzKQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1
ZiB7Ci0KLS8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCAtLSBkbyBub3QgY2FsbCB0
aGVzZS4KLXZvaWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJm
cHJvdG9idWZfMmZhbnlfMmVwcm90bygpOwotdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2ds
ZV8yZnByb3RvYnVmXzJmYW55XzJlcHJvdG8oKTsKLXZvaWQgcHJvdG9idWZfU2h1dGRvd25GaWxl
X2dvb2dsZV8yZnByb3RvYnVmXzJmYW55XzJlcHJvdG8oKTsKLQotY2xhc3MgQW55OwotCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBBbnkgOiBwdWJsaWMgOjpnb29n
bGU6OnByb3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIEFueSgpOwotICB2aXJ0dWFsIH5B
bnkoKTsKLQotICBBbnkoY29uc3QgQW55JiBmcm9tKTsKLQotICBpbmxpbmUgQW55JiBvcGVyYXRv
cj0oY29uc3QgQW55JiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRv
ciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgQW55JiBkZWZhdWx0X2luc3RhbmNlKCk7
Ci0KLSAgLy8gaW1wbGVtZW50cyBBbnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICB2b2lkIFBhY2tGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZSYgbWVzc2FnZSk7Ci0gIHZvaWQgUGFja0Zyb20oY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgIGNvbnN0IDo6c3RkOjpz
dHJpbmcmIHR5cGVfdXJsX3ByZWZpeCk7Ci0gIGJvb2wgVW5wYWNrVG8oOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlKiBtZXNzYWdlKSBjb25zdDsKLSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9v
bCBJcygpIGNvbnN0IHsKLSAgICByZXR1cm4gX2FueV9tZXRhZGF0YV8uSXM8VD4oKTsKLSAgfQot
Ci0gIHZvaWQgU3dhcChBbnkqIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBB
bnkqIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIEFueSogTmV3KDo6Z29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9t
KGNvbnN0IEFueSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IEFueSYgZnJvbSk7Ci0g
IHZvaWQgQ2xlYXIoKTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5
dGVTaXplKCkgY29uc3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2
b2lkIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90
b2J1Zjo6dWludDgqIG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3Qg
eyByZXR1cm4gX2NhY2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3Io
KTsKLSAgdm9pZCBTaGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkg
Y29uc3Q7Ci0gIHZvaWQgSW50ZXJuYWxTd2FwKEFueSogb3RoZXIpOwotICBwcml2YXRlOgotICBp
bmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25z
dCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxp
bmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21l
dGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlw
ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIHR5cGVfdXJsID0gMTsKLSAg
dm9pZCBjbGVhcl90eXBlX3VybCgpOwotICBzdGF0aWMgY29uc3QgaW50IGtUeXBlVXJsRmllbGRO
dW1iZXIgPSAxOwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiB0eXBlX3VybCgpIGNvbnN0OwotICB2
b2lkIHNldF90eXBlX3VybChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0
X3R5cGVfdXJsKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfdHlwZV91cmwoY29uc3Qg
Y2hhciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0YWJsZV90eXBl
X3VybCgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX3R5cGVfdXJsKCk7Ci0gIHZvaWQgc2V0
X2FsbG9jYXRlZF90eXBlX3VybCg6OnN0ZDo6c3RyaW5nKiB0eXBlX3VybCk7Ci0KLSAgLy8gb3B0
aW9uYWwgYnl0ZXMgdmFsdWUgPSAyOwotICB2b2lkIGNsZWFyX3ZhbHVlKCk7Ci0gIHN0YXRpYyBj
b25zdCBpbnQga1ZhbHVlRmllbGROdW1iZXIgPSAyOwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiB2
YWx1ZSgpIGNvbnN0OwotICB2b2lkIHNldF92YWx1ZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1
ZSk7Ci0gIHZvaWQgc2V0X3ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfdmFs
dWUoY29uc3Qgdm9pZCogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0
YWJsZV92YWx1ZSgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX3ZhbHVlKCk7Ci0gIHZvaWQg
c2V0X2FsbG9jYXRlZF92YWx1ZSg6OnN0ZDo6c3RyaW5nKiB2YWx1ZSk7Ci0KLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5BbnkpCi0gcHJp
dmF0ZToKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJbnRlcm5hbE1ldGFkYXRh
V2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0gIGJvb2wgX2lzX2RlZmF1bHRfaW5zdGFu
Y2VfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciB0eXBl
X3VybF87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIHZh
bHVlXzsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6QW55TWV0YWRhdGEgX2FueV9tZXRhZGF0YV87Ci0gIGZyaWVuZCB2b2lkIExJ
QlBST1RPQlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmYW55
XzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZw
cm90b2J1Zl8yZmFueV8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3du
RmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmFueV8yZXByb3RvKCk7Ci0KLSAgdm9pZCBJbml0QXNE
ZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIEFueSogZGVmYXVsdF9pbnN0YW5jZV87Ci19Owot
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmICFQUk9UT0JVRl9JTkxJTkVf
Tk9UX0lOX0hFQURFUlMKLS8vIEFueQotCi0vLyBvcHRpb25hbCBzdHJpbmcgdHlwZV91cmwgPSAx
OwotaW5saW5lIHZvaWQgQW55OjpjbGVhcl90eXBlX3VybCgpIHsKLSAgdHlwZV91cmxfLkNsZWFy
VG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBBbnk6
OnR5cGVfdXJsKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
Z2V0Omdvb2dsZS5wcm90b2J1Zi5BbnkudHlwZV91cmwpCi0gIHJldHVybiB0eXBlX3VybF8uR2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgQW55OjpzZXRfdHlwZV91cmwoY29uc3QgOjpz
dGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgCi0gIHR5cGVfdXJsXy5TZXROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFs
dWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90
b2J1Zi5BbnkudHlwZV91cmwpCi19Ci1pbmxpbmUgdm9pZCBBbnk6OnNldF90eXBlX3VybChjb25z
dCBjaGFyKiB2YWx1ZSkgewotICAKLSAgdHlwZV91cmxfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6
c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRf
Y2hhcjpnb29nbGUucHJvdG9idWYuQW55LnR5cGVfdXJsKQotfQotaW5saW5lIHZvaWQgQW55Ojpz
ZXRfdHlwZV91cmwoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIAotICB0eXBl
X3VybF8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkFueS50eXBlX3VybCkKLX0K
LWlubGluZSA6OnN0ZDo6c3RyaW5nKiBBbnk6Om11dGFibGVfdHlwZV91cmwoKSB7Ci0gIAotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYu
QW55LnR5cGVfdXJsKQotICByZXR1cm4gdHlwZV91cmxfLk11dGFibGVOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19
Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogQW55OjpyZWxlYXNlX3R5cGVfdXJsKCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuQW55
LnR5cGVfdXJsKQotICAKLSAgcmV0dXJuIHR5cGVfdXJsXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
fQotaW5saW5lIHZvaWQgQW55OjpzZXRfYWxsb2NhdGVkX3R5cGVfdXJsKDo6c3RkOjpzdHJpbmcq
IHR5cGVfdXJsKSB7Ci0gIGlmICh0eXBlX3VybCAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7
Ci0gICAgCi0gIH0KLSAgdHlwZV91cmxfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB0eXBlX3Vy
bCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdv
b2dsZS5wcm90b2J1Zi5BbnkudHlwZV91cmwpCi19Ci0KLS8vIG9wdGlvbmFsIGJ5dGVzIHZhbHVl
ID0gMjsKLWlubGluZSB2b2lkIEFueTo6Y2xlYXJfdmFsdWUoKSB7Ci0gIHZhbHVlXy5DbGVhclRv
RW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgQW55Ojp2
YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpn
b29nbGUucHJvdG9idWYuQW55LnZhbHVlKQotICByZXR1cm4gdmFsdWVfLkdldE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTsKLX0KLWlubGluZSB2b2lkIEFueTo6c2V0X3ZhbHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZh
bHVlKSB7Ci0gIAotICB2YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuQW55LnZhbHVlKQot
fQotaW5saW5lIHZvaWQgQW55OjpzZXRfdmFsdWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgCi0g
IHZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkFueS52
YWx1ZSkKLX0KLWlubGluZSB2b2lkIEFueTo6c2V0X3ZhbHVlKGNvbnN0IHZvaWQqIHZhbHVlLCBz
aXplX3Qgc2l6ZSkgewotICAKLSAgdmFsdWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6
OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90
b2J1Zi5BbnkudmFsdWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogQW55OjptdXRhYmxlX3Zh
bHVlKCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6
Z29vZ2xlLnByb3RvYnVmLkFueS52YWx1ZSkKLSAgcmV0dXJuIHZhbHVlXy5NdXRhYmxlTm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEFueTo6cmVsZWFzZV92YWx1ZSgpIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3Rv
YnVmLkFueS52YWx1ZSkKLSAgCi0gIHJldHVybiB2YWx1ZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LX0KLWlubGluZSB2b2lkIEFueTo6c2V0X2FsbG9jYXRlZF92YWx1ZSg6OnN0ZDo6c3RyaW5nKiB2
YWx1ZSkgewotICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgIAotICB9IGVsc2UgewotICAgIAot
ICB9Ci0gIHZhbHVlXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYu
QW55LnZhbHVlKQotfQotCi0jZW5kaWYgIC8vICFQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURF
UlMKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAg
Ly8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCi0KLSNlbmRpZiAgLy8gUFJPVE9CVUZf
Z29vZ2xlXzJmcHJvdG9idWZfMmZhbnlfMmVwcm90b19fSU5DTFVERUQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYW55LnByb3Rv
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWRiNmVkZTM1MmJiMmFmOTQwNjc1YjYz
NDc2YjE1NTU0MzA5OTUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSwx
MzAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9
ICJwcm90bzMiOwotCi1wYWNrYWdlIGdvb2dsZS5wcm90b2J1ZjsKLQotb3B0aW9uIGNzaGFycF9u
YW1lc3BhY2UgPSAiR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzIjsKLW9wdGlvbiBnb19w
YWNrYWdlID0gImdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3B0eXBlcy9hbnkiOwotb3B0aW9u
IGphdmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmIjsKLW9wdGlvbiBqYXZhX291dGVy
X2NsYXNzbmFtZSA9ICJBbnlQcm90byI7Ci1vcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRy
dWU7Ci1vcHRpb24gamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2ggPSB0cnVlOwotb3B0aW9u
IG9iamNfY2xhc3NfcHJlZml4ID0gIkdQQiI7Ci0KLS8vIGBBbnlgIGNvbnRhaW5zIGFuIGFyYml0
cmFyeSBzZXJpYWxpemVkIHByb3RvY29sIGJ1ZmZlciBtZXNzYWdlIGFsb25nIHdpdGggYQotLy8g
VVJMIHRoYXQgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBzZXJpYWxpemVkIG1lc3NhZ2UuCi0v
LwotLy8gUHJvdG9idWYgbGlicmFyeSBwcm92aWRlcyBzdXBwb3J0IHRvIHBhY2svdW5wYWNrIEFu
eSB2YWx1ZXMgaW4gdGhlIGZvcm0KLS8vIG9mIHV0aWxpdHkgZnVuY3Rpb25zIG9yIGFkZGl0aW9u
YWwgZ2VuZXJhdGVkIG1ldGhvZHMgb2YgdGhlIEFueSB0eXBlLgotLy8KLS8vIEV4YW1wbGUgMTog
UGFjayBhbmQgdW5wYWNrIGEgbWVzc2FnZSBpbiBDKysuCi0vLwotLy8gICAgIEZvbyBmb28gPSAu
Li47Ci0vLyAgICAgQW55IGFueTsKLS8vICAgICBhbnkuUGFja0Zyb20oZm9vKTsKLS8vICAgICAu
Li4KLS8vICAgICBpZiAoYW55LlVucGFja1RvKCZmb28pKSB7Ci0vLyAgICAgICAuLi4KLS8vICAg
ICB9Ci0vLwotLy8gRXhhbXBsZSAyOiBQYWNrIGFuZCB1bnBhY2sgYSBtZXNzYWdlIGluIEphdmEu
Ci0vLwotLy8gICAgIEZvbyBmb28gPSAuLi47Ci0vLyAgICAgQW55IGFueSA9IEFueS5wYWNrKGZv
byk7Ci0vLyAgICAgLi4uCi0vLyAgICAgaWYgKGFueS5pcyhGb28uY2xhc3MpKSB7Ci0vLyAgICAg
ICBmb28gPSBhbnkudW5wYWNrKEZvby5jbGFzcyk7Ci0vLyAgICAgfQotLy8KLS8vIFRoZSBwYWNr
IG1ldGhvZHMgcHJvdmlkZWQgYnkgcHJvdG9idWYgbGlicmFyeSB3aWxsIGJ5IGRlZmF1bHQgdXNl
Ci0vLyAndHlwZS5nb29nbGVhcGlzLmNvbS9mdWxsLnR5cGUubmFtZScgYXMgdGhlIHR5cGUgVVJM
IGFuZCB0aGUgdW5wYWNrCi0vLyBtZXRob2RzIG9ubHkgdXNlIHRoZSBmdWxseSBxdWFsaWZpZWQg
dHlwZSBuYW1lIGFmdGVyIHRoZSBsYXN0ICcvJwotLy8gaW4gdGhlIHR5cGUgVVJMLCBmb3IgZXhh
bXBsZSAiZm9vLmJhci5jb20veC95LnoiIHdpbGwgeWllbGQgdHlwZQotLy8gbmFtZSAieS56Ii4K
LS8vCi0vLwotLy8gSlNPTgotLy8gPT09PQotLy8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2Yg
YW4gYEFueWAgdmFsdWUgdXNlcyB0aGUgcmVndWxhcgotLy8gcmVwcmVzZW50YXRpb24gb2YgdGhl
IGRlc2VyaWFsaXplZCwgZW1iZWRkZWQgbWVzc2FnZSwgd2l0aCBhbgotLy8gYWRkaXRpb25hbCBm
aWVsZCBgQHR5cGVgIHdoaWNoIGNvbnRhaW5zIHRoZSB0eXBlIFVSTC4gRXhhbXBsZToKLS8vCi0v
LyAgICAgcGFja2FnZSBnb29nbGUucHJvZmlsZTsKLS8vICAgICBtZXNzYWdlIFBlcnNvbiB7Ci0v
LyAgICAgICBzdHJpbmcgZmlyc3RfbmFtZSA9IDE7Ci0vLyAgICAgICBzdHJpbmcgbGFzdF9uYW1l
ID0gMjsKLS8vICAgICB9Ci0vLwotLy8gICAgIHsKLS8vICAgICAgICJAdHlwZSI6ICJ0eXBlLmdv
b2dsZWFwaXMuY29tL2dvb2dsZS5wcm9maWxlLlBlcnNvbiIsCi0vLyAgICAgICAiZmlyc3ROYW1l
IjogPHN0cmluZz4sCi0vLyAgICAgICAibGFzdE5hbWUiOiA8c3RyaW5nPgotLy8gICAgIH0KLS8v
Ci0vLyBJZiB0aGUgZW1iZWRkZWQgbWVzc2FnZSB0eXBlIGlzIHdlbGwta25vd24gYW5kIGhhcyBh
IGN1c3RvbSBKU09OCi0vLyByZXByZXNlbnRhdGlvbiwgdGhhdCByZXByZXNlbnRhdGlvbiB3aWxs
IGJlIGVtYmVkZGVkIGFkZGluZyBhIGZpZWxkCi0vLyBgdmFsdWVgIHdoaWNoIGhvbGRzIHRoZSBj
dXN0b20gSlNPTiBpbiBhZGRpdGlvbiB0byB0aGUgYEB0eXBlYAotLy8gZmllbGQuIEV4YW1wbGUg
KGZvciBtZXNzYWdlIFtnb29nbGUucHJvdG9idWYuRHVyYXRpb25dW10pOgotLy8KLS8vICAgICB7
Ci0vLyAgICAgICAiQHR5cGUiOiAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYu
RHVyYXRpb24iLAotLy8gICAgICAgInZhbHVlIjogIjEuMjEycyIKLS8vICAgICB9Ci0vLwotbWVz
c2FnZSBBbnkgewotICAvLyBBIFVSTC9yZXNvdXJjZSBuYW1lIHdob3NlIGNvbnRlbnQgZGVzY3Jp
YmVzIHRoZSB0eXBlIG9mIHRoZQotICAvLyBzZXJpYWxpemVkIHByb3RvY29sIGJ1ZmZlciBtZXNz
YWdlLgotICAvLwotICAvLyBGb3IgVVJMcyB3aGljaCB1c2UgdGhlIHNjaGVtYSBgaHR0cGAsIGBo
dHRwc2AsIG9yIG5vIHNjaGVtYSwgdGhlCi0gIC8vIGZvbGxvd2luZyByZXN0cmljdGlvbnMgYW5k
IGludGVycHJldGF0aW9ucyBhcHBseToKLSAgLy8KLSAgLy8gKiBJZiBubyBzY2hlbWEgaXMgcHJv
dmlkZWQsIGBodHRwc2AgaXMgYXNzdW1lZC4KLSAgLy8gKiBUaGUgbGFzdCBzZWdtZW50IG9mIHRo
ZSBVUkwncyBwYXRoIG11c3QgcmVwcmVzZW50IHRoZSBmdWxseQotICAvLyAgIHF1YWxpZmllZCBu
YW1lIG9mIHRoZSB0eXBlIChhcyBpbiBgcGF0aC9nb29nbGUucHJvdG9idWYuRHVyYXRpb25gKS4K
LSAgLy8gICBUaGUgbmFtZSBzaG91bGQgYmUgaW4gYSBjYW5vbmljYWwgZm9ybSAoZS5nLiwgbGVh
ZGluZyAiLiIgaXMKLSAgLy8gICBub3QgYWNjZXB0ZWQpLgotICAvLyAqIEFuIEhUVFAgR0VUIG9u
IHRoZSBVUkwgbXVzdCB5aWVsZCBhIFtnb29nbGUucHJvdG9idWYuVHlwZV1bXQotICAvLyAgIHZh
bHVlIGluIGJpbmFyeSBmb3JtYXQsIG9yIHByb2R1Y2UgYW4gZXJyb3IuCi0gIC8vICogQXBwbGlj
YXRpb25zIGFyZSBhbGxvd2VkIHRvIGNhY2hlIGxvb2t1cCByZXN1bHRzIGJhc2VkIG9uIHRoZQot
ICAvLyAgIFVSTCwgb3IgaGF2ZSB0aGVtIHByZWNvbXBpbGVkIGludG8gYSBiaW5hcnkgdG8gYXZv
aWQgYW55Ci0gIC8vICAgbG9va3VwLiBUaGVyZWZvcmUsIGJpbmFyeSBjb21wYXRpYmlsaXR5IG5l
ZWRzIHRvIGJlIHByZXNlcnZlZAotICAvLyAgIG9uIGNoYW5nZXMgdG8gdHlwZXMuIChVc2UgdmVy
c2lvbmVkIHR5cGUgbmFtZXMgdG8gbWFuYWdlCi0gIC8vICAgYnJlYWtpbmcgY2hhbmdlcy4pCi0g
IC8vCi0gIC8vIFNjaGVtYXMgb3RoZXIgdGhhbiBgaHR0cGAsIGBodHRwc2AgKG9yIHRoZSBlbXB0
eSBzY2hlbWEpIG1pZ2h0IGJlCi0gIC8vIHVzZWQgd2l0aCBpbXBsZW1lbnRhdGlvbiBzcGVjaWZp
YyBzZW1hbnRpY3MuCi0gIC8vCi0gIHN0cmluZyB0eXBlX3VybCA9IDE7Ci0KLSAgLy8gTXVzdCBi
ZSBhIHZhbGlkIHNlcmlhbGl6ZWQgcHJvdG9jb2wgYnVmZmVyIG9mIHRoZSBhYm92ZSBzcGVjaWZp
ZWQgdHlwZS4KLSAgYnl0ZXMgdmFsdWUgPSAyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2FueV90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FueV90ZXN0LmNjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmZhYTYzZDg3OWU5YTJjYzk0MjYzODJiMWU3MDVh
ZGY1ZmU3Zjc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9hbnlfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDg5ICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2FueV90ZXN0LnBiLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHsKLQot
VEVTVChBbnlUZXN0LCBUZXN0UGFja0FuZFVucGFjaykgewotICBwcm90b2J1Zl91bml0dGVzdDo6
VGVzdEFueSBzdWJtZXNzYWdlOwotICBzdWJtZXNzYWdlLnNldF9pbnQzMl92YWx1ZSgxMjM0NSk7
Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QW55IG1lc3NhZ2U7Ci0gIG1lc3NhZ2UubXV0YWJs
ZV9hbnlfdmFsdWUoKS0+UGFja0Zyb20oc3VibWVzc2FnZSk7Ci0KLSAgc3RyaW5nIGRhdGEgPSBt
ZXNzYWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci0KLSAgQVNTRVJUX1RSVUUobWVzc2FnZS5QYXJz
ZUZyb21TdHJpbmcoZGF0YSkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19hbnlfdmFsdWUo
KSk7Ci0gIEFTU0VSVF9UUlVFKG1lc3NhZ2UuYW55X3ZhbHVlKCkuVW5wYWNrVG8oJnN1Ym1lc3Nh
Z2UpKTsKLSAgRVhQRUNUX0VRKDEyMzQ1LCBzdWJtZXNzYWdlLmludDMyX3ZhbHVlKCkpOwotfQot
Ci1URVNUKEFueVRlc3QsIFRlc3RQYWNrQW5kVW5wYWNrQW55KSB7Ci0gIC8vIFdlIGNhbiBwYWNr
IGEgQW55IG1lc3NhZ2UgaW5zaWRlIGFub3RoZXIgQW55IG1lc3NhZ2UuCi0gIHByb3RvYnVmX3Vu
aXR0ZXN0OjpUZXN0QW55IHN1Ym1lc3NhZ2U7Ci0gIHN1Ym1lc3NhZ2Uuc2V0X2ludDMyX3ZhbHVl
KDEyMzQ1KTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6QW55IGFueTsKLSAgYW55LlBhY2tGcm9tKHN1
Ym1lc3NhZ2UpOwotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFueSBtZXNzYWdlOwotICBtZXNz
YWdlLm11dGFibGVfYW55X3ZhbHVlKCktPlBhY2tGcm9tKGFueSk7Ci0KLSAgc3RyaW5nIGRhdGEg
PSBtZXNzYWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci0KLSAgQVNTRVJUX1RSVUUobWVzc2FnZS5Q
YXJzZUZyb21TdHJpbmcoZGF0YSkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19hbnlfdmFs
dWUoKSk7Ci0gIEFTU0VSVF9UUlVFKG1lc3NhZ2UuYW55X3ZhbHVlKCkuVW5wYWNrVG8oJmFueSkp
OwotICBBU1NFUlRfVFJVRShhbnkuVW5wYWNrVG8oJnN1Ym1lc3NhZ2UpKTsKLSAgRVhQRUNUX0VR
KDEyMzQ1LCBzdWJtZXNzYWdlLmludDMyX3ZhbHVlKCkpOwotfQotCi1URVNUKEFueVRlc3QsIFRl
c3RJcykgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFueSBzdWJtZXNzYWdlOwotICBzdWJt
ZXNzYWdlLnNldF9pbnQzMl92YWx1ZSgxMjM0NSk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OkFueSBh
bnk7Ci0gIGFueS5QYWNrRnJvbShzdWJtZXNzYWdlKTsKLSAgQVNTRVJUX1RSVUUoYW55LlBhcnNl
RnJvbVN0cmluZyhhbnkuU2VyaWFsaXplQXNTdHJpbmcoKSkpOwotICBFWFBFQ1RfVFJVRShhbnku
SXM8cHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbnk+KCkpOwotICBFWFBFQ1RfRkFMU0UoYW55Lklz
PGdvb2dsZTo6cHJvdG9idWY6OkFueT4oKSk7Ci0KLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RB
bnkgbWVzc2FnZTsKLSAgbWVzc2FnZS5tdXRhYmxlX2FueV92YWx1ZSgpLT5QYWNrRnJvbShhbnkp
OwotICBBU1NFUlRfVFJVRShtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhtZXNzYWdlLlNlcmlhbGl6
ZUFzU3RyaW5nKCkpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuYW55X3ZhbHVlKCkuSXM8cHJv
dG9idWZfdW5pdHRlc3Q6OlRlc3RBbnk+KCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmFueV92
YWx1ZSgpLklzPGdvb2dsZTo6cHJvdG9idWY6OkFueT4oKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFj
ZQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnlfdGVzdC5wcm90byBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9hbnlfdGVzdC5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM1
YjMwYmEzZTRhODcxMDAwYTdhOWFmYjFmNjYyMzgyODU0MTAzZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYW55X3Rlc3Qu
cHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMyI7Ci0KLXBhY2thZ2UgcHJvdG9idWZf
dW5pdHRlc3Q7Ci0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90byI7Ci0KLW1lc3Nh
Z2UgVGVzdEFueSB7Ci0gIGludDMyIGludDMyX3ZhbHVlID0gMTsKLSAgZ29vZ2xlLnByb3RvYnVm
LkFueSBhbnlfdmFsdWUgPSAyOwotICByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuQW55IHJlcGVh
dGVkX2FueV92YWx1ZSA9IDM7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYXBp
LnBiLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FwaS5wYi5jYwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggY2JlYmEzMDIzZmEwOTMyNzNjODE5Nzk5Njc0MTJmZTg2MWZkYWRhNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvYXBpLnBiLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjAyMyArMCwwIEBACi0vLyBHZW5l
cmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQotLy8g
c291cmNlOiBnb29nbGUvcHJvdG9idWYvYXBpLnByb3RvCi0KLSNkZWZpbmUgSU5URVJOQUxfU1VQ
UFJFU1NfUFJPVE9CVUZfRklFTERfREVQUkVDQVRJT04KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvYXBpLnBiLmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L3BvcnQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZV9pbmwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVz
c2FnZV9yZWZsZWN0aW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25f
b3BzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0vLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoaW5jbHVkZXMpCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFt
ZXNwYWNlIHByb3RvYnVmIHsKLQotbmFtZXNwYWNlIHsKLQotY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpEZXNjcmlwdG9yKiBBcGlfZGVzY3JpcHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIEFwaV9y
ZWZsZWN0aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3Iq
IE1ldGhvZF9kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgTWV0aG9kX3JlZmxlY3Rpb25f
ID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogTWl4aW5fZGVz
Y3JpcHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2Vu
ZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIE1peGluX3JlZmxlY3Rpb25fID0gTlVMTDsKLQot
fSAgLy8gbmFtZXNwYWNlCi0KLQotdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnBy
b3RvYnVmXzJmYXBpXzJlcHJvdG8oKSB7Ci0gIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJv
dG9idWZfMmZhcGlfMmVwcm90bygpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVE
ZXNjcmlwdG9yKiBmaWxlID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQb29s
OjpnZW5lcmF0ZWRfcG9vbCgpLT5GaW5kRmlsZUJ5TmFtZSgKLSAgICAgICJnb29nbGUvcHJvdG9i
dWYvYXBpLnByb3RvIik7Ci0gIEdPT0dMRV9DSEVDSyhmaWxlICE9IE5VTEwpOwotICBBcGlfZGVz
Y3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUoMCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQgQXBp
X29mZnNldHNfWzddID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9G
SUVMRF9PRkZTRVQoQXBpLCBuYW1lXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9N
RVNTQUdFX0ZJRUxEX09GRlNFVChBcGksIG1ldGhvZHNfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZf
R0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEFwaSwgb3B0aW9uc18pLAotICAgIEdPT0dM
RV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoQXBpLCB2ZXJzaW9uXyks
Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChBcGks
IHNvdXJjZV9jb250ZXh0XyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdF
X0ZJRUxEX09GRlNFVChBcGksIG1peGluc18pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFU
RURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoQXBpLCBzeW50YXhfKSwKLSAgfTsKLSAgQXBpX3JlZmxl
Y3Rpb25fID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBBcGlf
ZGVzY3JpcHRvcl8sCi0gICAgICBBcGk6OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgQXBpX29m
ZnNldHNfLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKEFw
aSksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VU
KEFwaSwgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJB
VEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEFwaSwgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci0g
IE1ldGhvZF9kZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlwZSgxKTsKLSAgc3RhdGljIGNv
bnN0IGludCBNZXRob2Rfb2Zmc2V0c19bN10gPSB7Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVS
QVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChNZXRob2QsIG5hbWVfKSwKLSAgICBHT09HTEVfUFJP
VE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE1ldGhvZCwgcmVxdWVzdF90eXBl
X3VybF8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZT
RVQoTWV0aG9kLCByZXF1ZXN0X3N0cmVhbWluZ18pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5F
UkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTWV0aG9kLCByZXNwb25zZV90eXBlX3VybF8pLAot
ICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTWV0aG9k
LCByZXNwb25zZV9zdHJlYW1pbmdfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01F
U1NBR0VfRklFTERfT0ZGU0VUKE1ldGhvZCwgb3B0aW9uc18pLAotICAgIEdPT0dMRV9QUk9UT0JV
Rl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTWV0aG9kLCBzeW50YXhfKSwKLSAgfTsK
LSAgTWV0aG9kX3JlZmxlY3Rpb25fID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b24oCi0gICAgICBNZXRob2RfZGVzY3JpcHRvcl8sCi0gICAgICBNZXRob2Q6OmRlZmF1bHRfaW5z
dGFuY2VfLAotICAgICAgTWV0aG9kX29mZnNldHNfLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAg
ICAgIC0xLAotICAgICAgc2l6ZW9mKE1ldGhvZCksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VO
RVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE1ldGhvZCwgX2ludGVybmFsX21ldGFkYXRhXyks
Ci0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE1l
dGhvZCwgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci0gIE1peGluX2Rlc2NyaXB0b3JfID0gZmls
ZS0+bWVzc2FnZV90eXBlKDIpOwotICBzdGF0aWMgY29uc3QgaW50IE1peGluX29mZnNldHNfWzJd
ID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQo
TWl4aW4sIG5hbWVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklF
TERfT0ZGU0VUKE1peGluLCByb290XyksCi0gIH07Ci0gIE1peGluX3JlZmxlY3Rpb25fID0KLSAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlv
bjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBNaXhpbl9kZXNjcmlwdG9y
XywKLSAgICAgIE1peGluOjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAgIE1peGluX29mZnNldHNf
LAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKE1peGluKSwK
LSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTWl4
aW4sIF9pbnRlcm5hbF9tZXRhZGF0YV8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRF
RF9NRVNTQUdFX0ZJRUxEX09GRlNFVChNaXhpbiwgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci19
Ci0KLW5hbWVzcGFjZSB7Ci0KLUdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0UocHJvdG9idWZf
QXNzaWduRGVzY3JpcHRvcnNfb25jZV8pOwotaW5saW5lIHZvaWQgcHJvdG9idWZfQXNzaWduRGVz
Y3JpcHRvcnNPbmNlKCkgewotICA6Omdvb2dsZTo6cHJvdG9idWY6Okdvb2dsZU9uY2VJbml0KCZw
cm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc19vbmNlXywKLSAgICAgICAgICAgICAgICAgJnByb3Rv
YnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZhcGlfMmVwcm90byk7Ci19Ci0KLXZv
aWQgcHJvdG9idWZfUmVnaXN0ZXJUeXBlcyhjb25zdCA6OnN0ZDo6c3RyaW5nJikgewotICBwcm90
b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBBcGlf
ZGVzY3JpcHRvcl8sICZBcGk6OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAot
ICAgICAgTWV0aG9kX2Rlc2NyaXB0b3JfLCAmTWV0aG9kOjpkZWZhdWx0X2luc3RhbmNlKCkpOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2Vu
ZXJhdGVkTWVzc2FnZSgKLSAgICAgIE1peGluX2Rlc2NyaXB0b3JfLCAmTWl4aW46OmRlZmF1bHRf
aW5zdGFuY2UoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi12b2lkIHByb3RvYnVmX1NodXRk
b3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmFwaV8yZXByb3RvKCkgewotICBkZWxldGUgQXBp
OjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRlIEFwaV9yZWZsZWN0aW9uXzsKLSAgZGVsZXRl
IE1ldGhvZDo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRlbGV0ZSBNZXRob2RfcmVmbGVjdGlvbl87
Ci0gIGRlbGV0ZSBNaXhpbjo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRlbGV0ZSBNaXhpbl9yZWZs
ZWN0aW9uXzsKLX0KLQotdm9pZCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJm
YXBpXzJlcHJvdG8oKSB7Ci0gIHN0YXRpYyBib29sIGFscmVhZHlfaGVyZSA9IGZhbHNlOwotICBp
ZiAoYWxyZWFkeV9oZXJlKSByZXR1cm47Ci0gIGFscmVhZHlfaGVyZSA9IHRydWU7Ci0gIEdPT0dM
RV9QUk9UT0JVRl9WRVJJRllfVkVSU0lPTjsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnByb3Rv
YnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZzb3VyY2VfNWZjb250ZXh0XzJlcHJvdG8o
KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3Rv
YnVmXzJmdHlwZV8yZXByb3RvKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclBv
b2w6OkludGVybmFsQWRkR2VuZXJhdGVkRmlsZSgKLSAgICAiXG5cMDMxZ29vZ2xlL3Byb3RvYnVm
L2FwaS5wcm90b1wwMjJcMDE3Z29vZ2xlLnByb3QiCi0gICAgIm9idWZcMDMyJGdvb2dsZS9wcm90
b2J1Zi9zb3VyY2VfY29udGV4dC5wcm8iCi0gICAgInRvXDAzMlwwMzJnb29nbGUvcHJvdG9idWYv
dHlwZS5wcm90b1wiXDIwMVwwMDJcblwwMDNBcGlcMDIyXDAxNCIKLSAgICAiXG5cMDA0bmFtZVww
MzBcMDAxIFwwMDEoXHRcMDIyKFxuXDAwN21ldGhvZHNcMDMwXDAwMiBcMDAzKFwwMTMyXDAyNy5n
b29nbGUucCIKLSAgICAicm90b2J1Zi5NZXRob2RcMDIyKFxuXDAwN29wdGlvbnNcMDMwXDAwMyBc
MDAzKFwwMTMyXDAyNy5nb29nbGUiCi0gICAgIi5wcm90b2J1Zi5PcHRpb25cMDIyXDAxN1xuXDAw
N3ZlcnNpb25cMDMwXDAwNCBcMDAxKFx0XDAyMjZcblwwMTZzb3UiCi0gICAgInJjZV9jb250ZXh0
XDAzMFwwMDUgXDAwMShcMDEzMlwwMzYuZ29vZ2xlLnByb3RvYnVmLlNvdXIiCi0gICAgImNlQ29u
dGV4dFwwMjImXG5cMDA2bWl4aW5zXDAzMFwwMDYgXDAwMyhcMDEzMlwwMjYuZ29vZ2xlLnByb3Rv
IgotICAgICJidWYuTWl4aW5cMDIyXCdcblwwMDZzeW50YXhcMDMwXDAwNyBcMDAxKFwwMTYyXDAy
Ny5nb29nbGUucHJvdG8iCi0gICAgImJ1Zi5TeW50YXhcIlwzMjVcMDAxXG5cMDA2TWV0aG9kXDAy
MlwwMTRcblwwMDRuYW1lXDAzMFwwMDEgXDAwMShcdFwwMjJcMDMwXG5cMDIwciIKLSAgICAiZXF1
ZXN0X3R5cGVfdXJsXDAzMFwwMDIgXDAwMShcdFwwMjJcMDMxXG5cMDIxcmVxdWVzdF9zdHJlYW1p
IgotICAgICJuZ1wwMzBcMDAzIFwwMDEoXDAxMFwwMjJcMDMxXG5cMDIxcmVzcG9uc2VfdHlwZV91
cmxcMDMwXDAwNCBcMDAxKFx0XDAyMlwwMzJcblwwMjJyIgotICAgICJlc3BvbnNlX3N0cmVhbWlu
Z1wwMzBcMDA1IFwwMDEoXDAxMFwwMjIoXG5cMDA3b3B0aW9uc1wwMzBcMDA2IFwwMDMoXDAxMyIK
LSAgICAiMlwwMjcuZ29vZ2xlLnByb3RvYnVmLk9wdGlvblwwMjJcJ1xuXDAwNnN5bnRheFwwMzBc
MDA3IFwwMDEoIgotICAgICJcMDE2MlwwMjcuZ29vZ2xlLnByb3RvYnVmLlN5bnRheFwiI1xuXDAw
NU1peGluXDAyMlwwMTRcblwwMDRuIgotICAgICJhbWVcMDMwXDAwMSBcMDAxKFx0XDAyMlwwMTRc
blwwMDRyb290XDAzMFwwMDIgXDAwMShcdEJLXG5cMDIzY29tLmdvb2dsZS5wciIKLSAgICAib3Rv
YnVmQlwwMTBBcGlQcm90b1BcMDAxXDI0MFwwMDFcMDAxXDI0MlwwMDJcMDAzR1BCXDI1MlwwMDJc
MDM2R29vZ2xlLlBybyIKLSAgICAidG9idWYuV2VsbEtub3duVHlwZXNiXDAwNnByb3RvMyIsIDcw
OCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0
ZXJHZW5lcmF0ZWRGaWxlKAotICAgICJnb29nbGUvcHJvdG9idWYvYXBpLnByb3RvIiwgJnByb3Rv
YnVmX1JlZ2lzdGVyVHlwZXMpOwotICBBcGk6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IEFwaSgp
OwotICBNZXRob2Q6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IE1ldGhvZCgpOwotICBNaXhpbjo6
ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgTWl4aW4oKTsKLSAgQXBpOjpkZWZhdWx0X2luc3RhbmNl
Xy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIE1ldGhvZDo6ZGVmYXVsdF9pbnN0YW5jZV8t
PkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBNaXhpbjo6ZGVmYXVsdF9pbnN0YW5jZV8tPklu
aXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpP
blNodXRkb3duKCZwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZhcGlf
MmVwcm90byk7Ci19Ci0KLS8vIEZvcmNlIEFkZERlc2NyaXB0b3JzKCkgdG8gYmUgY2FsbGVkIGF0
IHN0YXRpYyBpbml0aWFsaXphdGlvbiB0aW1lLgotc3RydWN0IFN0YXRpY0Rlc2NyaXB0b3JJbml0
aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8yZmFwaV8yZXByb3RvIHsKLSAgU3RhdGljRGVzY3Jp
cHRvckluaXRpYWxpemVyX2dvb2dsZV8yZnByb3RvYnVmXzJmYXBpXzJlcHJvdG8oKSB7Ci0gICAg
cHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmFwaV8yZXByb3RvKCk7Ci0gIH0K
LX0gc3RhdGljX2Rlc2NyaXB0b3JfaW5pdGlhbGl6ZXJfZ29vZ2xlXzJmcHJvdG9idWZfMmZhcGlf
MmVwcm90b187Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0YXRpYyB2b2lkIE1lcmdlRnJvbUZhaWwoaW50
IGxpbmUpIEdPT0dMRV9BVFRSSUJVVEVfQ09MRDsKLXN0YXRpYyB2b2lkIE1lcmdlRnJvbUZhaWwo
aW50IGxpbmUpIHsKLSAgR09PR0xFX0NIRUNLKGZhbHNlKSA8PCBfX0ZJTEVfXyA8PCAiOiIgPDwg
bGluZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWYgIWRl
ZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBBcGk6OmtOYW1l
RmllbGROdW1iZXI7Ci1jb25zdCBpbnQgQXBpOjprTWV0aG9kc0ZpZWxkTnVtYmVyOwotY29uc3Qg
aW50IEFwaTo6a09wdGlvbnNGaWVsZE51bWJlcjsKLWNvbnN0IGludCBBcGk6OmtWZXJzaW9uRmll
bGROdW1iZXI7Ci1jb25zdCBpbnQgQXBpOjprU291cmNlQ29udGV4dEZpZWxkTnVtYmVyOwotY29u
c3QgaW50IEFwaTo6a01peGluc0ZpZWxkTnVtYmVyOwotY29uc3QgaW50IEFwaTo6a1N5bnRheEZp
ZWxkTnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0g
MTkwMAotCi1BcGk6OkFwaSgpCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksIF9p
bnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChjb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuQXBpKQotfQotCi12
b2lkIEFwaTo6SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotICBfaXNfZGVmYXVsdF9pbnN0YW5j
ZV8gPSB0cnVlOwotICBzb3VyY2VfY29udGV4dF8gPSBjb25zdF9jYXN0PCA6Omdvb2dsZTo6cHJv
dG9idWY6OlNvdXJjZUNvbnRleHQqPigmOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0
OjpkZWZhdWx0X2luc3RhbmNlKCkpOwotfQotCi1BcGk6OkFwaShjb25zdCBBcGkmIGZyb20pCi0g
IDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRh
XyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuQXBp
KQotfQotCi12b2lkIEFwaTo6U2hhcmVkQ3RvcigpIHsKLSAgICBfaXNfZGVmYXVsdF9pbnN0YW5j
ZV8gPSBmYWxzZTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmcoKTsKLSAgX2NhY2hlZF9zaXplXyA9IDA7Ci0gIG5hbWVfLlVuc2FmZVNldERlZmF1bHQoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTsKLSAgdmVyc2lvbl8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBzb3VyY2VfY29udGV4dF8g
PSBOVUxMOwotICBzeW50YXhfID0gMDsKLX0KLQotQXBpOjp+QXBpKCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuQXBpKQotICBTaGFy
ZWREdG9yKCk7Ci19Ci0KLXZvaWQgQXBpOjpTaGFyZWREdG9yKCkgewotICBuYW1lXy5EZXN0cm95
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotICB2ZXJzaW9uXy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBpZiAodGhp
cyAhPSBkZWZhdWx0X2luc3RhbmNlXykgewotICAgIGRlbGV0ZSBzb3VyY2VfY29udGV4dF87Ci0g
IH0KLX0KLQotdm9pZCBBcGk6OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09P
R0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNp
emU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBBcGk6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3Rv
YnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gQXBpX2Rlc2NyaXB0b3JfOwot
fQotCi1jb25zdCBBcGkmIEFwaTo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRf
aW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZh
cGlfMmVwcm90bygpOwotICByZXR1cm4gKmRlZmF1bHRfaW5zdGFuY2VfOwotfQotCi1BcGkqIEFw
aTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1BcGkqIEFwaTo6TmV3KDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIEFwaSogbiA9IG5ldyBBcGk7Ci0gIGlm
IChhcmVuYSAhPSBOVUxMKSB7Ci0gICAgYXJlbmEtPk93bihuKTsKLSAgfQotICByZXR1cm4gbjsK
LX0KLQotdm9pZCBBcGk6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1l
c3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkFwaSkKLSAgbmFtZV8uQ2xlYXJUb0Vt
cHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotICB2ZXJzaW9uXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0g
IGlmIChHZXRBcmVuYU5vVmlydHVhbCgpID09IE5VTEwgJiYgc291cmNlX2NvbnRleHRfICE9IE5V
TEwpIGRlbGV0ZSBzb3VyY2VfY29udGV4dF87Ci0gIHNvdXJjZV9jb250ZXh0XyA9IE5VTEw7Ci0g
IHN5bnRheF8gPSAwOwotICBtZXRob2RzXy5DbGVhcigpOwotICBvcHRpb25zXy5DbGVhcigpOwot
ICBtaXhpbnNfLkNsZWFyKCk7Ci19Ci0KLWJvb2wgQXBpOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRT
dHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5w
dXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShF
WFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRh
ZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90
b2J1Zi5BcGkpCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAg
ICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7
Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5h
bWUgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTApIHsKLSAgICAg
ICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJl
YWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVfbmFtZSgpKSk7
Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwg
dGhpcy0+bmFtZSgpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90
b2J1Zi5BcGkubmFtZSIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRs
ZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDE4KSkg
Z290byBwYXJzZV9tZXRob2RzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8g
cmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5NZXRob2QgbWV0aG9kcyA9IDI7Ci0gICAgICBjYXNl
IDI6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxOCkgewotICAgICAgICAgcGFyc2VfbWV0aG9kczoK
LSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOwotICAgICAg
ICAgcGFyc2VfbG9vcF9tZXRob2RzOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2VOb1ZpcnR1YWxOb1JlY3Vyc2lv
bkRlcHRoKAotICAgICAgICAgICAgICAgIGlucHV0LCBhZGRfbWV0aG9kcygpKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxOCkpIGdvdG8gcGFyc2VfbG9vcF9tZXRob2RzOwot
ICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygyNikpIGdvdG8gcGFyc2VfbG9vcF9vcHRpb25z
OwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYu
T3B0aW9uIG9wdGlvbnMgPSAzOwotICAgICAgY2FzZSAzOiB7Ci0gICAgICAgIGlmICh0YWcgPT0g
MjYpIHsKLSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOwot
ICAgICAgICAgcGFyc2VfbG9vcF9vcHRpb25zOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2VOb1ZpcnR1YWxOb1Jl
Y3Vyc2lvbkRlcHRoKAotICAgICAgICAgICAgICAgIGlucHV0LCBhZGRfb3B0aW9ucygpKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygyNikpIGdvdG8gcGFyc2VfbG9vcF9vcHRp
b25zOwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAg
ICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMzQpKSBnb3RvIHBhcnNlX3ZlcnNpb247Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcgdmVyc2lvbiA9
IDQ7Ci0gICAgICBjYXNlIDQ6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAzNCkgewotICAgICAgICAg
cGFyc2VfdmVyc2lvbjoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRo
aXMtPm11dGFibGVfdmVyc2lvbigpKSk7Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgICAg
ICAgdGhpcy0+dmVyc2lvbigpLmRhdGEoKSwgdGhpcy0+dmVyc2lvbigpLmxlbmd0aCgpLAotICAg
ICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlBB
UlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5BcGkudmVyc2lvbiIpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDQyKSkgZ290byBwYXJzZV9zb3VyY2VfY29udGV4
dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIC5nb29nbGUu
cHJvdG9idWYuU291cmNlQ29udGV4dCBzb3VyY2VfY29udGV4dCA9IDU7Ci0gICAgICBjYXNlIDU6
IHsKLSAgICAgICAgaWYgKHRhZyA9PSA0MikgewotICAgICAgICAgcGFyc2Vfc291cmNlX2NvbnRl
eHQ6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbCgKLSAgICAgICAgICAgICAgIGlucHV0LCBtdXRh
YmxlX3NvdXJjZV9jb250ZXh0KCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3Rv
IGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFn
KDUwKSkgZ290byBwYXJzZV9taXhpbnM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAg
ICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk1peGluIG1peGlucyA9IDY7Ci0gICAgICBj
YXNlIDY6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA1MCkgewotICAgICAgICAgcGFyc2VfbWl4aW5z
OgotICAgICAgICAgIERPXyhpbnB1dC0+SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7Ci0gICAg
ICAgICBwYXJzZV9sb29wX21peGluczoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNp
b25EZXB0aCgKLSAgICAgICAgICAgICAgICBpbnB1dCwgYWRkX21peGlucygpKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg1MCkpIGdvdG8gcGFyc2VfbG9vcF9taXhpbnM7Ci0g
ICAgICAgIGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBp
ZiAoaW5wdXQtPkV4cGVjdFRhZyg1NikpIGdvdG8gcGFyc2Vfc3ludGF4OwotICAgICAgICBicmVh
azsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5TeW50YXgg
c3ludGF4ID0gNzsKLSAgICAgIGNhc2UgNzogewotICAgICAgICBpZiAodGFnID09IDU2KSB7Ci0g
ICAgICAgICBwYXJzZV9zeW50YXg6Ci0gICAgICAgICAgaW50IHZhbHVlOwotICAgICAgICAgIERP
XygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmlt
aXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgaW50LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9FTlVNPigKLSAgICAgICAgICAgICAgICAgaW5wdXQs
ICZ2YWx1ZSkpKTsKLSAgICAgICAgICBzZXRfc3ludGF4KHN0YXRpY19jYXN0PCA6Omdvb2dsZTo6
cHJvdG9idWY6OlN5bnRheCA+KHZhbHVlKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
Z290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVj
dEF0RW5kKCkpIGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAg
IGRlZmF1bHQ6IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAgICBpZiAodGFnID09IDAg
fHwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7Ci0gICAg
ICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U2tpcEZpZWxkKGlucHV0LCB0YWcpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuQXBpKQot
ICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChw
YXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5BcGkpCi0gIHJldHVybiBmYWxzZTsKLSN1bmRl
ZiBET18KLX0KLQotdm9pZCBBcGk6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLkFwaSkKLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBpZiAodGhpcy0+bmFt
ZSgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCks
IHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkFw
aS5uYW1lIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgMSwgdGhpcy0+bmFtZSgpLCBvdXRw
dXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5NZXRob2QgbWV0aG9k
cyA9IDI7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+bWV0aG9kc19zaXpl
KCk7IGkgPCBuOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVUb0FycmF5KAotICAgICAgMiwgdGhpcy0+bWV0
aG9kcyhpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYu
T3B0aW9uIG9wdGlvbnMgPSAzOwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMt
Pm9wdGlvbnNfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAg
IDMsIHRoaXMtPm9wdGlvbnMoaSksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJp
bmcgdmVyc2lvbiA9IDQ7Ci0gIGlmICh0aGlzLT52ZXJzaW9uKCkuc2l6ZSgpID4gMCkgewotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4
U3RyaW5nKAotICAgICAgdGhpcy0+dmVyc2lvbigpLmRhdGEoKSwgdGhpcy0+dmVyc2lvbigpLmxl
bmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuQXBpLnZlcnNpb24iKTsKLSAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJp
bmdNYXliZUFsaWFzZWQoCi0gICAgICA0LCB0aGlzLT52ZXJzaW9uKCksIG91dHB1dCk7Ci0gIH0K
LQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQgc291cmNlX2Nv
bnRleHQgPSA1OwotICBpZiAodGhpcy0+aGFzX3NvdXJjZV9jb250ZXh0KCkpIHsKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5
YmVUb0FycmF5KAotICAgICAgNSwgKnRoaXMtPnNvdXJjZV9jb250ZXh0Xywgb3V0cHV0KTsKLSAg
fQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuTWl4aW4gbWl4aW5zID0gNjsKLSAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5taXhpbnNfc2l6ZSgpOyBpIDwgbjsg
aSsrKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDYsIHRoaXMtPm1peGlucyhpKSwgb3V0
cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU3ludGF4IHN5bnRh
eCA9IDc7Ci0gIGlmICh0aGlzLT5zeW50YXgoKSAhPSAwKSB7Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlRW51bSgKLSAgICAgIDcsIHRoaXMt
PnN5bnRheCgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkFwaSkKLX0KLQotOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50OCogQXBpOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5B
cGkpCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgaWYgKHRoaXMtPm5hbWUoKS5z
aXplKCkgPiAwKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlZlcmlmeVV0ZjhTdHJpbmcoCi0gICAgICB0aGlzLT5uYW1lKCkuZGF0YSgpLCB0aGlz
LT5uYW1lKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5BcGkubmFt
ZSIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAxLCB0aGlzLT5uYW1l
KCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk1ldGhv
ZCBtZXRob2RzID0gMjsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5tZXRo
b2RzX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVh
bFRvQXJyYXkoCi0gICAgICAgIDIsIHRoaXMtPm1ldGhvZHMoaSksIHRhcmdldCk7Ci0gIH0KLQot
ICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBvcHRpb25zID0gMzsKLSAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5vcHRpb25zX3NpemUoKTsgaSA8IG47IGkr
KykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDMs
IHRoaXMtPm9wdGlvbnMoaSksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcg
dmVyc2lvbiA9IDQ7Ci0gIGlmICh0aGlzLT52ZXJzaW9uKCkuc2l6ZSgpID4gMCkgewotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3Ry
aW5nKAotICAgICAgdGhpcy0+dmVyc2lvbigpLmRhdGEoKSwgdGhpcy0+dmVyc2lvbigpLmxlbmd0
aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuQXBpLnZlcnNpb24iKTsKLSAgICB0
YXJnZXQgPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OldyaXRlU3RyaW5nVG9BcnJheSgKLSAgICAgICAgNCwgdGhpcy0+dmVyc2lvbigpLCB0YXJn
ZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0
IHNvdXJjZV9jb250ZXh0ID0gNTsKLSAgaWYgKHRoaXMtPmhhc19zb3VyY2VfY29udGV4dCgpKSB7
Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgNSwgKnRo
aXMtPnNvdXJjZV9jb250ZXh0XywgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29n
bGUucHJvdG9idWYuTWl4aW4gbWl4aW5zID0gNjsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAs
IG4gPSB0aGlzLT5taXhpbnNfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgdGFyZ2V0ID0gOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVN
ZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgNiwgdGhpcy0+bWl4aW5zKGkpLCB0YXJn
ZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5TeW50YXggc3ludGF4
ID0gNzsKLSAgaWYgKHRoaXMtPnN5bnRheCgpICE9IDApIHsKLSAgICB0YXJnZXQgPSA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVtVG9BcnJheSgK
LSAgICAgIDcsIHRoaXMtPnN5bnRheCgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkFw
aSkKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IEFwaTo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0v
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xl
LnByb3RvYnVmLkFwaSkKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIC8vIG9wdGlvbmFsIHN0
cmluZyBuYW1lID0gMTsKLSAgaWYgKHRoaXMtPm5hbWUoKS5zaXplKCkgPiAwKSB7Ci0gICAgdG90
YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICB0aGlzLT5uYW1lKCkpOwotICB9Ci0KLSAg
Ly8gb3B0aW9uYWwgc3RyaW5nIHZlcnNpb24gPSA0OwotICBpZiAodGhpcy0+dmVyc2lvbigpLnNp
emUoKSA+IDApIHsKLSAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0cmluZ1NpemUoCi0gICAgICAgIHRoaXMt
PnZlcnNpb24oKSk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlNvdXJj
ZUNvbnRleHQgc291cmNlX2NvbnRleHQgPSA1OwotICBpZiAodGhpcy0+aGFzX3NvdXJjZV9jb250
ZXh0KCkpIHsKLSAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAgICAg
ICAqdGhpcy0+c291cmNlX2NvbnRleHRfKTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUu
cHJvdG9idWYuU3ludGF4IHN5bnRheCA9IDc7Ci0gIGlmICh0aGlzLT5zeW50YXgoKSAhPSAwKSB7
Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpFbnVtU2l6ZSh0aGlzLT5zeW50YXgoKSk7Ci0gIH0KLQotICAv
LyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZCBtZXRob2RzID0gMjsKLSAgdG90YWxf
c2l6ZSArPSAxICogdGhpcy0+bWV0aG9kc19zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwg
dGhpcy0+bWV0aG9kc19zaXplKCk7IGkrKykgewotICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5v
VmlydHVhbCgKLSAgICAgICAgdGhpcy0+bWV0aG9kcyhpKSk7Ci0gIH0KLQotICAvLyByZXBlYXRl
ZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBvcHRpb25zID0gMzsKLSAgdG90YWxfc2l6ZSArPSAx
ICogdGhpcy0+b3B0aW9uc19zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+b3B0
aW9uc19zaXplKCk7IGkrKykgewotICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgK
LSAgICAgICAgdGhpcy0+b3B0aW9ucyhpKSk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xl
LnByb3RvYnVmLk1peGluIG1peGlucyA9IDY7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMtPm1p
eGluc19zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+bWl4aW5zX3NpemUoKTsg
aSsrKSB7Ci0gICAgdG90YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAgICAgICB0aGlz
LT5taXhpbnMoaSkpOwotICB9Ci0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVH
SU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNV
UlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBBcGk6
Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5BcGkpCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0
aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGNvbnN0IEFwaSogc291cmNlID0gCi0g
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVk
PGNvbnN0IEFwaT4oCi0gICAgICAgICAgJmZyb20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2Fz
dF9mYWlsOmdvb2dsZS5wcm90b2J1Zi5BcGkpCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6UmVmbGVjdGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3Vj
Y2Vzczpnb29nbGUucHJvdG9idWYuQXBpKQotICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQot
fQotCi12b2lkIEFwaTo6TWVyZ2VGcm9tKGNvbnN0IEFwaSYgZnJvbSkgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnBy
b3RvYnVmLkFwaSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBN
ZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgbWV0aG9kc18uTWVyZ2VGcm9tKGZyb20ubWV0aG9k
c18pOwotICBvcHRpb25zXy5NZXJnZUZyb20oZnJvbS5vcHRpb25zXyk7Ci0gIG1peGluc18uTWVy
Z2VGcm9tKGZyb20ubWl4aW5zXyk7Ci0gIGlmIChmcm9tLm5hbWUoKS5zaXplKCkgPiAwKSB7Ci0K
LSAgICBuYW1lXy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20ubmFtZV8pOwotICB9Ci0gIGlm
IChmcm9tLnZlcnNpb24oKS5zaXplKCkgPiAwKSB7Ci0KLSAgICB2ZXJzaW9uXy5Bc3NpZ25XaXRo
RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIGZyb20udmVyc2lvbl8pOwotICB9Ci0gIGlmIChmcm9tLmhhc19zb3VyY2Vf
Y29udGV4dCgpKSB7Ci0gICAgbXV0YWJsZV9zb3VyY2VfY29udGV4dCgpLT46Omdvb2dsZTo6cHJv
dG9idWY6OlNvdXJjZUNvbnRleHQ6Ok1lcmdlRnJvbShmcm9tLnNvdXJjZV9jb250ZXh0KCkpOwot
ICB9Ci0gIGlmIChmcm9tLnN5bnRheCgpICE9IDApIHsKLSAgICBzZXRfc3ludGF4KGZyb20uc3lu
dGF4KCkpOwotICB9Ci19Ci0KLXZvaWQgQXBpOjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5l
cmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkFwaSkKLSAgaWYgKCZmcm9t
ID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12
b2lkIEFwaTo6Q29weUZyb20oY29uc3QgQXBpJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5B
cGkpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJv
bShmcm9tKTsKLX0KLQotYm9vbCBBcGk6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXBpOjpTd2FwKEFwaSogb3RoZXIpIHsKLSAgaWYgKG90aGVy
ID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgQXBpOjpJ
bnRlcm5hbFN3YXAoQXBpKiBvdGhlcikgewotICBuYW1lXy5Td2FwKCZvdGhlci0+bmFtZV8pOwot
ICBtZXRob2RzXy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT5tZXRob2RzXyk7Ci0gIG9wdGlvbnNf
LlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPm9wdGlvbnNfKTsKLSAgdmVyc2lvbl8uU3dhcCgmb3Ro
ZXItPnZlcnNpb25fKTsKLSAgc3RkOjpzd2FwKHNvdXJjZV9jb250ZXh0Xywgb3RoZXItPnNvdXJj
ZV9jb250ZXh0Xyk7Ci0gIG1peGluc18uVW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+bWl4aW5zXyk7
Ci0gIHN0ZDo6c3dhcChzeW50YXhfLCBvdGhlci0+c3ludGF4Xyk7Ci0gIF9pbnRlcm5hbF9tZXRh
ZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2Nh
Y2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9i
dWY6Ok1ldGFkYXRhIEFwaTo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVmX0Fzc2ln
bkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIG1ldGFk
YXRhOwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gQXBpX2Rlc2NyaXB0b3JfOwotICBtZXRhZGF0
YS5yZWZsZWN0aW9uID0gQXBpX3JlZmxlY3Rpb25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0K
LSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIEFwaQotCi0vLyBvcHRpb25h
bCBzdHJpbmcgbmFtZSA9IDE7Ci12b2lkIEFwaTo6Y2xlYXJfbmFtZSgpIHsKLSAgbmFtZV8uQ2xl
YXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEFwaTo6bmFt
ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuQXBpLm5hbWUpCi0gIHJldHVybiBuYW1lXy5HZXROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19
Ci0gdm9pZCBBcGk6OnNldF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAot
ICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5BcGkubmFtZSkKLX0KLSB2b2lkIEFwaTo6
c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgCi0gIG5hbWVfLlNldE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuQXBpLm5hbWUpCi19Ci0gdm9pZCBBcGk6OnNl
dF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAgbmFtZV8uU2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkFwaS5uYW1lKQotfQotIDo6c3RkOjpzdHJp
bmcqIEFwaTo6bXV0YWJsZV9uYW1lKCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkFwaS5uYW1lKQotICByZXR1cm4gbmFt
ZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBBcGk6OnJlbGVhc2Vf
bmFtZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29v
Z2xlLnByb3RvYnVmLkFwaS5uYW1lKQotICAKLSAgcmV0dXJuIG5hbWVfLlJlbGVhc2VOb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci19Ci0gdm9pZCBBcGk6OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3RyaW5nKiBu
YW1lKSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAKLSAg
fQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5BcGku
bmFtZSkKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5NZXRob2QgbWV0aG9kcyA9
IDI7Ci1pbnQgQXBpOjptZXRob2RzX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBtZXRob2RzXy5z
aXplKCk7Ci19Ci12b2lkIEFwaTo6Y2xlYXJfbWV0aG9kcygpIHsKLSAgbWV0aG9kc18uQ2xlYXIo
KTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kJiBBcGk6Om1ldGhvZHMoaW50
IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6
Z29vZ2xlLnByb3RvYnVmLkFwaS5tZXRob2RzKQotICByZXR1cm4gbWV0aG9kc18uR2V0KGluZGV4
KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kKiBBcGk6Om11dGFibGVfbWV0aG9kcyhp
bnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6
Z29vZ2xlLnByb3RvYnVmLkFwaS5tZXRob2RzKQotICByZXR1cm4gbWV0aG9kc18uTXV0YWJsZShp
bmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZCogQXBpOjphZGRfbWV0aG9kcygp
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9i
dWYuQXBpLm1ldGhvZHMpCi0gIHJldHVybiBtZXRob2RzXy5BZGQoKTsKLX0KLTo6Z29vZ2xlOjpw
cm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2QgPioK
LUFwaTo6bXV0YWJsZV9tZXRob2RzKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5BcGkubWV0aG9kcykKLSAgcmV0dXJu
ICZtZXRob2RzXzsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVs
ZDwgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2QgPiYKLUFwaTo6bWV0aG9kcygpIGNvbnN0IHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVm
LkFwaS5tZXRob2RzKQotICByZXR1cm4gbWV0aG9kc187Ci19Ci0KLS8vIHJlcGVhdGVkIC5nb29n
bGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSAzOwotaW50IEFwaTo6b3B0aW9uc19zaXplKCkg
Y29uc3QgewotICByZXR1cm4gb3B0aW9uc18uc2l6ZSgpOwotfQotdm9pZCBBcGk6OmNsZWFyX29w
dGlvbnMoKSB7Ci0gIG9wdGlvbnNfLkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok9wdGlvbiYgQXBpOjpvcHRpb25zKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5BcGkub3B0aW9ucykK
LSAgcmV0dXJuIG9wdGlvbnNfLkdldChpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6Ok9w
dGlvbiogQXBpOjptdXRhYmxlX29wdGlvbnMoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5BcGkub3B0aW9ucykK
LSAgcmV0dXJuIG9wdGlvbnNfLk11dGFibGUoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVm
OjpPcHRpb24qIEFwaTo6YWRkX29wdGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkFwaS5vcHRpb25zKQotICByZXR1cm4gb3B0
aW9uc18uQWRkKCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4qCi1BcGk6Om11dGFibGVfb3B0aW9ucygpIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJv
dG9idWYuQXBpLm9wdGlvbnMpCi0gIHJldHVybiAmb3B0aW9uc187Ci19Ci1jb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9u
ID4mCi1BcGk6Om9wdGlvbnMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5BcGkub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlv
bnNfOwotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgdmVyc2lvbiA9IDQ7Ci12b2lkIEFwaTo6Y2xl
YXJfdmVyc2lvbigpIHsKLSAgdmVyc2lvbl8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQot
IGNvbnN0IDo6c3RkOjpzdHJpbmcmIEFwaTo6dmVyc2lvbigpIGNvbnN0IHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuQXBpLnZlcnNpb24p
Ci0gIHJldHVybiB2ZXJzaW9uXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBBcGk6OnNldF92
ZXJzaW9uKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAotICB2ZXJzaW9uXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0Omdvb2dsZS5wcm90b2J1Zi5BcGkudmVyc2lvbikKLX0KLSB2b2lkIEFwaTo6c2V0X3ZlcnNp
b24oY29uc3QgY2hhciogdmFsdWUpIHsKLSAgCi0gIHZlcnNpb25fLlNldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6
OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuQXBpLnZlcnNpb24pCi19Ci0gdm9pZCBBcGk6OnNl
dF92ZXJzaW9uKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAgdmVyc2lv
bl8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkFwaS52ZXJzaW9uKQotfQotIDo6
c3RkOjpzdHJpbmcqIEFwaTo6bXV0YWJsZV92ZXJzaW9uKCkgewotICAKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkFwaS52ZXJzaW9u
KQotICByZXR1cm4gdmVyc2lvbl8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3Ry
aW5nKiBBcGk6OnJlbGVhc2VfdmVyc2lvbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkFwaS52ZXJzaW9uKQotICAKLSAgcmV0
dXJuIHZlcnNpb25fLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBBcGk6OnNldF9hbGxv
Y2F0ZWRfdmVyc2lvbig6OnN0ZDo6c3RyaW5nKiB2ZXJzaW9uKSB7Ci0gIGlmICh2ZXJzaW9uICE9
IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAKLSAgfQotICB2ZXJzaW9uXy5TZXRBbGxv
Y2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgdmVyc2lvbik7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5BcGkudmVyc2lvbikKLX0KLQot
Ly8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0IHNvdXJjZV9jb250ZXh0
ID0gNTsKLWJvb2wgQXBpOjpoYXNfc291cmNlX2NvbnRleHQoKSBjb25zdCB7Ci0gIHJldHVybiAh
X2lzX2RlZmF1bHRfaW5zdGFuY2VfICYmIHNvdXJjZV9jb250ZXh0XyAhPSBOVUxMOwotfQotdm9p
ZCBBcGk6OmNsZWFyX3NvdXJjZV9jb250ZXh0KCkgewotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwo
KSA9PSBOVUxMICYmIHNvdXJjZV9jb250ZXh0XyAhPSBOVUxMKSBkZWxldGUgc291cmNlX2NvbnRl
eHRfOwotICBzb3VyY2VfY29udGV4dF8gPSBOVUxMOwotfQotY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpTb3VyY2VDb250ZXh0JiBBcGk6OnNvdXJjZV9jb250ZXh0KCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5BcGkuc291
cmNlX2NvbnRleHQpCi0gIHJldHVybiBzb3VyY2VfY29udGV4dF8gIT0gTlVMTCA/ICpzb3VyY2Vf
Y29udGV4dF8gOiAqZGVmYXVsdF9pbnN0YW5jZV8tPnNvdXJjZV9jb250ZXh0XzsKLX0KLTo6Z29v
Z2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCogQXBpOjptdXRhYmxlX3NvdXJjZV9jb250ZXh0
KCkgewotICAKLSAgaWYgKHNvdXJjZV9jb250ZXh0XyA9PSBOVUxMKSB7Ci0gICAgc291cmNlX2Nv
bnRleHRfID0gbmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dDsKLSAgfQotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYu
QXBpLnNvdXJjZV9jb250ZXh0KQotICByZXR1cm4gc291cmNlX2NvbnRleHRfOwotfQotOjpnb29n
bGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiBBcGk6OnJlbGVhc2Vfc291cmNlX2NvbnRleHQo
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5w
cm90b2J1Zi5BcGkuc291cmNlX2NvbnRleHQpCi0gIAotICA6Omdvb2dsZTo6cHJvdG9idWY6OlNv
dXJjZUNvbnRleHQqIHRlbXAgPSBzb3VyY2VfY29udGV4dF87Ci0gIHNvdXJjZV9jb250ZXh0XyA9
IE5VTEw7Ci0gIHJldHVybiB0ZW1wOwotfQotdm9pZCBBcGk6OnNldF9hbGxvY2F0ZWRfc291cmNl
X2NvbnRleHQoOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiBzb3VyY2VfY29udGV4
dCkgewotICBkZWxldGUgc291cmNlX2NvbnRleHRfOwotICBzb3VyY2VfY29udGV4dF8gPSBzb3Vy
Y2VfY29udGV4dDsKLSAgaWYgKHNvdXJjZV9jb250ZXh0KSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0g
ICAgCi0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0
ZWQ6Z29vZ2xlLnByb3RvYnVmLkFwaS5zb3VyY2VfY29udGV4dCkKLX0KLQotLy8gcmVwZWF0ZWQg
Lmdvb2dsZS5wcm90b2J1Zi5NaXhpbiBtaXhpbnMgPSA2OwotaW50IEFwaTo6bWl4aW5zX3NpemUo
KSBjb25zdCB7Ci0gIHJldHVybiBtaXhpbnNfLnNpemUoKTsKLX0KLXZvaWQgQXBpOjpjbGVhcl9t
aXhpbnMoKSB7Ci0gIG1peGluc18uQ2xlYXIoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWl4aW4mIEFwaTo6bWl4aW5zKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5BcGkubWl4aW5zKQotICBy
ZXR1cm4gbWl4aW5zXy5HZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpNaXhpbiog
QXBpOjptdXRhYmxlX21peGlucyhpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkFwaS5taXhpbnMpCi0gIHJldHVy
biBtaXhpbnNfLk11dGFibGUoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpNaXhpbiog
QXBpOjphZGRfbWl4aW5zKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
YWRkOmdvb2dsZS5wcm90b2J1Zi5BcGkubWl4aW5zKQotICByZXR1cm4gbWl4aW5zXy5BZGQoKTsK
LX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3Rv
YnVmOjpNaXhpbiA+KgotQXBpOjptdXRhYmxlX21peGlucygpIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuQXBpLm1peGlu
cykKLSAgcmV0dXJuICZtaXhpbnNfOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBl
YXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1peGluID4mCi1BcGk6Om1peGlucygp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xl
LnByb3RvYnVmLkFwaS5taXhpbnMpCi0gIHJldHVybiBtaXhpbnNfOwotfQotCi0vLyBvcHRpb25h
bCAuZ29vZ2xlLnByb3RvYnVmLlN5bnRheCBzeW50YXggPSA3Owotdm9pZCBBcGk6OmNsZWFyX3N5
bnRheCgpIHsKLSAgc3ludGF4XyA9IDA7Ci19Ci0gOjpnb29nbGU6OnByb3RvYnVmOjpTeW50YXgg
QXBpOjpzeW50YXgoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkFwaS5zeW50YXgpCi0gIHJldHVybiBzdGF0aWNfY2FzdDwg
Ojpnb29nbGU6OnByb3RvYnVmOjpTeW50YXggPihzeW50YXhfKTsKLX0KLSB2b2lkIEFwaTo6c2V0
X3N5bnRheCg6Omdvb2dsZTo6cHJvdG9idWY6OlN5bnRheCB2YWx1ZSkgewotICAKLSAgc3ludGF4
XyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5BcGkuc3ludGF4KQotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9O
T1RfSU5fSEVBREVSUwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikg
fHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgaW50IE1ldGhvZDo6a05hbWVGaWVsZE51bWJlcjsK
LWNvbnN0IGludCBNZXRob2Q6OmtSZXF1ZXN0VHlwZVVybEZpZWxkTnVtYmVyOwotY29uc3QgaW50
IE1ldGhvZDo6a1JlcXVlc3RTdHJlYW1pbmdGaWVsZE51bWJlcjsKLWNvbnN0IGludCBNZXRob2Q6
OmtSZXNwb25zZVR5cGVVcmxGaWVsZE51bWJlcjsKLWNvbnN0IGludCBNZXRob2Q6OmtSZXNwb25z
ZVN0cmVhbWluZ0ZpZWxkTnVtYmVyOwotY29uc3QgaW50IE1ldGhvZDo6a09wdGlvbnNGaWVsZE51
bWJlcjsKLWNvbnN0IGludCBNZXRob2Q6OmtTeW50YXhGaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8g
IWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotTWV0aG9kOjpNZXRob2Qo
KQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFf
KE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Y29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZCkKLX0KLQotdm9pZCBNZXRob2Q6Oklu
aXRBc0RlZmF1bHRJbnN0YW5jZSgpIHsKLSAgX2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gdHJ1ZTsK
LX0KLQotTWV0aG9kOjpNZXRob2QoY29uc3QgTWV0aG9kJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBT
aGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZCkKLX0KLQotdm9p
ZCBNZXRob2Q6OlNoYXJlZEN0b3IoKSB7Ci0gICAgX2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gZmFs
c2U7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCk7Ci0g
IF9jYWNoZWRfc2l6ZV8gPSAwOwotICBuYW1lXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIHJl
cXVlc3RfdHlwZV91cmxfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgcmVxdWVzdF9zdHJlYW1p
bmdfID0gZmFsc2U7Ci0gIHJlc3BvbnNlX3R5cGVfdXJsXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci0gIHJlc3BvbnNlX3N0cmVhbWluZ18gPSBmYWxzZTsKLSAgc3ludGF4XyA9IDA7Ci19Ci0KLU1l
dGhvZDo6fk1ldGhvZCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0
b3I6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZCkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lkIE1l
dGhvZDo6U2hhcmVkRHRvcigpIHsKLSAgbmFtZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgcmVx
dWVzdF90eXBlX3VybF8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgcmVzcG9uc2VfdHlwZV91cmxf
LkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGlmICh0aGlzICE9IGRlZmF1bHRfaW5zdGFuY2VfKSB7
Ci0gIH0KLX0KLQotdm9pZCBNZXRob2Q6OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsK
LSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXpl
XyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBNZXRob2Q6OmRlc2NyaXB0b3IoKSB7
Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gTWV0aG9kX2Rl
c2NyaXB0b3JfOwotfQotCi1jb25zdCBNZXRob2QmIE1ldGhvZDo6ZGVmYXVsdF9pbnN0YW5jZSgp
IHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29v
Z2xlXzJmcHJvdG9idWZfMmZhcGlfMmVwcm90bygpOwotICByZXR1cm4gKmRlZmF1bHRfaW5zdGFu
Y2VfOwotfQotCi1NZXRob2QqIE1ldGhvZDo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1N
ZXRob2QqIE1ldGhvZDo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25z
dCB7Ci0gIE1ldGhvZCogbiA9IG5ldyBNZXRob2Q7Ci0gIGlmIChhcmVuYSAhPSBOVUxMKSB7Ci0g
ICAgYXJlbmEtPk93bihuKTsKLSAgfQotICByZXR1cm4gbjsKLX0KLQotdm9pZCBNZXRob2Q6OkNs
ZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6
Z29vZ2xlLnByb3RvYnVmLk1ldGhvZCkKLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNkZWZpbmUg
WlJfSEVMUEVSXyhmKSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcHVzaCIpIFwKLSAg
X1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdpbnZhbGlkLW9mZnNldG9mXCIi
KSBcCi0gIF9fYnVpbHRpbl9vZmZzZXRvZihNZXRob2QsIGYpIFwKLSAgX1ByYWdtYSgiY2xhbmcg
ZGlhZ25vc3RpYyBwb3AiKQotI2Vsc2UKLSNkZWZpbmUgWlJfSEVMUEVSXyhmKSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihcCi0gICZyZWludGVycHJldF9jYXN0PE1ldGhvZCo+KDE2KS0+ZikKLSNl
bmRpZgotCi0jZGVmaW5lIFpSXyhmaXJzdCwgbGFzdCkgZG8ge1wKLSAgOjptZW1zZXQoJmZpcnN0
LCAwLFwKLSAgICAgICAgICAgWlJfSEVMUEVSXyhsYXN0KSAtIFpSX0hFTFBFUl8oZmlyc3QpICsg
c2l6ZW9mKGxhc3QpKTtcCi19IHdoaWxlICgwKQotCi0gIFpSXyhyZXF1ZXN0X3N0cmVhbWluZ18s
IHN5bnRheF8pOwotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIHJlcXVlc3Rf
dHlwZV91cmxfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgcmVzcG9uc2VfdHlwZV91cmxf
LkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLQotI3VuZGVmIFpSX0hFTFBFUl8KLSN1bmRlZiBa
Ul8KLQotICBvcHRpb25zXy5DbGVhcigpOwotfQotCi1ib29sIE1ldGhvZDo6TWVyZ2VQYXJ0aWFs
RnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRT
dHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVE
SUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpn
b29nbGUucHJvdG9idWYuTWV0aG9kKQotICBmb3IgKDs7KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyLCBib29sPiBwID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0
b2ZmKDEyNyk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAgICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhh
bmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykpIHsKLSAgICAgIC8vIG9wdGlv
bmFsIHN0cmluZyBuYW1lID0gMTsKLSAgICAgIGNhc2UgMTogewotICAgICAgICBpZiAodGFnID09
IDEwKSB7Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5tdXRh
YmxlX25hbWUoKSkpOwotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgICAgICAgIHRoaXMtPm5h
bWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpQQVJTRSwKLSAgICAgICAgICAg
ICJnb29nbGUucHJvdG9idWYuTWV0aG9kLm5hbWUiKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQt
PkV4cGVjdFRhZygxOCkpIGdvdG8gcGFyc2VfcmVxdWVzdF90eXBlX3VybDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyByZXF1ZXN0X3R5cGVfdXJs
ID0gMjsKLSAgICAgIGNhc2UgMjogewotICAgICAgICBpZiAodGFnID09IDE4KSB7Ci0gICAgICAg
ICBwYXJzZV9yZXF1ZXN0X3R5cGVfdXJsOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAgICAg
ICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9yZXF1ZXN0X3R5cGVfdXJsKCkpKTsKLSAgICAgICAgICBE
T18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlZlcmlmeVV0
ZjhTdHJpbmcoCi0gICAgICAgICAgICB0aGlzLT5yZXF1ZXN0X3R5cGVfdXJsKCkuZGF0YSgpLCB0
aGlzLT5yZXF1ZXN0X3R5cGVfdXJsKCkubGVuZ3RoKCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UEFSU0UsCi0gICAgICAgICAgICAi
Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXF1ZXN0X3R5cGVfdXJsIikpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGlucHV0LT5FeHBlY3RUYWcoMjQpKSBnb3RvIHBhcnNlX3JlcXVlc3Rfc3RyZWFtaW5nOwot
ICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgYm9vbCByZXF1ZXN0
X3N0cmVhbWluZyA9IDM7Ci0gICAgICBjYXNlIDM6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAyNCkg
ewotICAgICAgICAgcGFyc2VfcmVxdWVzdF9zdHJlYW1pbmc6Ci0gICAgICAgICAgRE9fKCg6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwK
LSAgICAgICAgICAgICAgICAgICBib29sLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6VFlQRV9CT09MPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZyZXF1
ZXN0X3N0cmVhbWluZ18pKSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhh
bmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDM0
KSkgZ290byBwYXJzZV9yZXNwb25zZV90eXBlX3VybDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0KLSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyByZXNwb25zZV90eXBlX3VybCA9IDQ7Ci0gICAg
ICBjYXNlIDQ6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAzNCkgewotICAgICAgICAgcGFyc2VfcmVz
cG9uc2VfdHlwZV91cmw6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlucHV0LCB0
aGlzLT5tdXRhYmxlX3Jlc3BvbnNlX3R5cGVfdXJsKCkpKTsKLSAgICAgICAgICBET18oOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlZlcmlmeVV0ZjhTdHJpbmco
Ci0gICAgICAgICAgICB0aGlzLT5yZXNwb25zZV90eXBlX3VybCgpLmRhdGEoKSwgdGhpcy0+cmVz
cG9uc2VfdHlwZV91cmwoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUu
cHJvdG9idWYuTWV0aG9kLnJlc3BvbnNlX3R5cGVfdXJsIikpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlu
cHV0LT5FeHBlY3RUYWcoNDApKSBnb3RvIHBhcnNlX3Jlc3BvbnNlX3N0cmVhbWluZzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIGJvb2wgcmVzcG9uc2Vfc3Ry
ZWFtaW5nID0gNTsKLSAgICAgIGNhc2UgNTogewotICAgICAgICBpZiAodGFnID09IDQwKSB7Ci0g
ICAgICAgICBwYXJzZV9yZXNwb25zZV9zdHJlYW1pbmc6Ci0gICAgICAgICAgRE9fKCg6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAg
ICAgICAgICAgICAgICAgICBib29sLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6VFlQRV9CT09MPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZyZXNwb25z
ZV9zdHJlYW1pbmdfKSkpOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5k
bGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg1MCkp
IGdvdG8gcGFyc2Vfb3B0aW9uczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8v
IHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSA2OwotICAgICAgY2Fz
ZSA2OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNTApIHsKLSAgICAgICAgIHBhcnNlX29wdGlvbnM6
Ci0gICAgICAgICAgRE9fKGlucHV0LT5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAg
ICAgIHBhcnNlX2xvb3Bfb3B0aW9uczoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNp
b25EZXB0aCgKLSAgICAgICAgICAgICAgICBpbnB1dCwgYWRkX29wdGlvbnMoKSkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoNTApKSBnb3RvIHBhcnNlX2xvb3Bfb3B0aW9uczsK
LSAgICAgICAgaW5wdXQtPlVuc2FmZURlY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCk7Ci0gICAgICAg
IGlmIChpbnB1dC0+RXhwZWN0VGFnKDU2KSkgZ290byBwYXJzZV9zeW50YXg7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlN5bnRh
eCBzeW50YXggPSA3OwotICAgICAgY2FzZSA3OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNTYpIHsK
LSAgICAgICAgIHBhcnNlX3N5bnRheDoKLSAgICAgICAgICBpbnQgdmFsdWU7Ci0gICAgICAgICAg
RE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFBy
aW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICBpbnQsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0VOVU0+KAotICAgICAgICAgICAgICAgICBpbnB1
dCwgJnZhbHVlKSkpOwotICAgICAgICAgIHNldF9zeW50YXgoc3RhdGljX2Nhc3Q8IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6U3ludGF4ID4odmFsdWUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhw
ZWN0QXRFbmQoKSkgZ290byBzdWNjZXNzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAg
ICAgZGVmYXVsdDogewotICAgICAgaGFuZGxlX3VudXN1YWw6Ci0gICAgICAgIGlmICh0YWcgPT0g
MCB8fAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9FTkRfR1JPVVApIHsKLSAg
ICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgRE9fKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTa2lwRmllbGQoaW5wdXQsIHRhZykp
OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5NZXRo
b2QpCi0gIHJldHVybiB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KHBhcnNlX2ZhaWx1cmU6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZCkKLSAgcmV0dXJuIGZhbHNl
OwotI3VuZGVmIERPXwotfQotCi12b2lkIE1ldGhvZDo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpn
b29nbGUucHJvdG9idWYuTWV0aG9kKQotICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0g
IGlmICh0aGlzLT5uYW1lKCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+
bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29n
bGUucHJvdG9idWYuTWV0aG9kLm5hbWUiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAxLCB0
aGlzLT5uYW1lKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgcmVxdWVz
dF90eXBlX3VybCA9IDI7Ci0gIGlmICh0aGlzLT5yZXF1ZXN0X3R5cGVfdXJsKCkuc2l6ZSgpID4g
MCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpW
ZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+cmVxdWVzdF90eXBlX3VybCgpLmRhdGEoKSwg
dGhpcy0+cmVxdWVzdF90eXBlX3VybCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUu
cHJvdG9idWYuTWV0aG9kLnJlcXVlc3RfdHlwZV91cmwiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0g
ICAgICAyLCB0aGlzLT5yZXF1ZXN0X3R5cGVfdXJsKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBv
cHRpb25hbCBib29sIHJlcXVlc3Rfc3RyZWFtaW5nID0gMzsKLSAgaWYgKHRoaXMtPnJlcXVlc3Rf
c3RyZWFtaW5nKCkgIT0gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpXcml0ZUJvb2woMywgdGhpcy0+cmVxdWVzdF9zdHJlYW1pbmcoKSwgb3V0
cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyByZXNwb25zZV90eXBlX3VybCA9IDQ7
Ci0gIGlmICh0aGlzLT5yZXNwb25zZV90eXBlX3VybCgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmlu
ZygKLSAgICAgIHRoaXMtPnJlc3BvbnNlX3R5cGVfdXJsKCkuZGF0YSgpLCB0aGlzLT5yZXNwb25z
ZV90eXBlX3VybCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuTWV0
aG9kLnJlc3BvbnNlX3R5cGVfdXJsIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgNCwgdGhp
cy0+cmVzcG9uc2VfdHlwZV91cmwoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJv
b2wgcmVzcG9uc2Vfc3RyZWFtaW5nID0gNTsKLSAgaWYgKHRoaXMtPnJlc3BvbnNlX3N0cmVhbWlu
ZygpICE9IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVCb29sKDUsIHRoaXMtPnJlc3BvbnNlX3N0cmVhbWluZygpLCBvdXRwdXQpOwot
ICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5PcHRpb24gb3B0aW9ucyA9IDY7
Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+b3B0aW9uc19zaXplKCk7IGkg
PCBuOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVUb0FycmF5KAotICAgICAgNiwgdGhpcy0+b3B0aW9ucyhp
KSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU3ludGF4
IHN5bnRheCA9IDc7Ci0gIGlmICh0aGlzLT5zeW50YXgoKSAhPSAwKSB7Ci0gICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlRW51bSgKLSAgICAgIDcs
IHRoaXMtPnN5bnRheCgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZCkKLX0KLQotOjpnb29n
bGU6OnByb3RvYnVmOjp1aW50OCogTWV0aG9kOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0Fy
cmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdvb2ds
ZS5wcm90b2J1Zi5NZXRob2QpCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgaWYg
KHRoaXMtPm5hbWUoKS5zaXplKCkgPiAwKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OlZlcmlmeVV0ZjhTdHJpbmcoCi0gICAgICB0aGlzLT5uYW1l
KCkuZGF0YSgpLCB0aGlzLT5uYW1lKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5w
cm90b2J1Zi5NZXRob2QubmFtZSIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAg
ICAgICAxLCB0aGlzLT5uYW1lKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJp
bmcgcmVxdWVzdF90eXBlX3VybCA9IDI7Ci0gIGlmICh0aGlzLT5yZXF1ZXN0X3R5cGVfdXJsKCku
c2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+cmVxdWVzdF90eXBlX3VybCgp
LmRhdGEoKSwgdGhpcy0+cmVxdWVzdF90eXBlX3VybCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAg
ICJnb29nbGUucHJvdG9idWYuTWV0aG9kLnJlcXVlc3RfdHlwZV91cmwiKTsKLSAgICB0YXJnZXQg
PQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Oldy
aXRlU3RyaW5nVG9BcnJheSgKLSAgICAgICAgMiwgdGhpcy0+cmVxdWVzdF90eXBlX3VybCgpLCB0
YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCByZXF1ZXN0X3N0cmVhbWluZyA9IDM7
Ci0gIGlmICh0aGlzLT5yZXF1ZXN0X3N0cmVhbWluZygpICE9IDApIHsKLSAgICB0YXJnZXQgPSA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sVG9B
cnJheSgzLCB0aGlzLT5yZXF1ZXN0X3N0cmVhbWluZygpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8g
b3B0aW9uYWwgc3RyaW5nIHJlc3BvbnNlX3R5cGVfdXJsID0gNDsKLSAgaWYgKHRoaXMtPnJlc3Bv
bnNlX3R5cGVfdXJsKCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+cmVz
cG9uc2VfdHlwZV91cmwoKS5kYXRhKCksIHRoaXMtPnJlc3BvbnNlX3R5cGVfdXJsKCkubGVuZ3Ro
KCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5NZXRob2QucmVzcG9uc2VfdHlwZV91
cmwiKTsKLSAgICB0YXJnZXQgPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nVG9BcnJheSgKLSAgICAgICAgNCwgdGhpcy0+cmVz
cG9uc2VfdHlwZV91cmwoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgcmVz
cG9uc2Vfc3RyZWFtaW5nID0gNTsKLSAgaWYgKHRoaXMtPnJlc3BvbnNlX3N0cmVhbWluZygpICE9
IDApIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6V3JpdGVCb29sVG9BcnJheSg1LCB0aGlzLT5yZXNwb25zZV9zdHJlYW1pbmcoKSwg
dGFyZ2V0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuT3B0aW9uIG9w
dGlvbnMgPSA2OwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMtPm9wdGlvbnNf
c2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9B
cnJheSgKLSAgICAgICAgNiwgdGhpcy0+b3B0aW9ucyhpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8v
IG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU3ludGF4IHN5bnRheCA9IDc7Ci0gIGlmICh0aGlz
LT5zeW50YXgoKSAhPSAwKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlRW51bVRvQXJyYXkoCi0gICAgICA3LCB0aGlzLT5z
eW50YXgoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChz
ZXJpYWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5NZXRob2QpCi0gIHJldHVybiB0
YXJnZXQ7Ci19Ci0KLWludCBNZXRob2Q6OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5N
ZXRob2QpCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgbmFt
ZSA9IDE7Ci0gIGlmICh0aGlzLT5uYW1lKCkuc2l6ZSgpID4gMCkgewotICAgIHRvdGFsX3NpemUg
Kz0gMSArCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgdGhpcy0+bmFtZSgpKTsKLSAgfQotCi0gIC8vIG9wdGlv
bmFsIHN0cmluZyByZXF1ZXN0X3R5cGVfdXJsID0gMjsKLSAgaWYgKHRoaXMtPnJlcXVlc3RfdHlw
ZV91cmwoKS5zaXplKCkgPiAwKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAg
ICAgICB0aGlzLT5yZXF1ZXN0X3R5cGVfdXJsKCkpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgYm9v
bCByZXF1ZXN0X3N0cmVhbWluZyA9IDM7Ci0gIGlmICh0aGlzLT5yZXF1ZXN0X3N0cmVhbWluZygp
ICE9IDApIHsKLSAgICB0b3RhbF9zaXplICs9IDEgKyAxOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwg
c3RyaW5nIHJlc3BvbnNlX3R5cGVfdXJsID0gNDsKLSAgaWYgKHRoaXMtPnJlc3BvbnNlX3R5cGVf
dXJsKCkuc2l6ZSgpID4gMCkgewotICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgKLSAgICAg
ICAgdGhpcy0+cmVzcG9uc2VfdHlwZV91cmwoKSk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBib29s
IHJlc3BvbnNlX3N0cmVhbWluZyA9IDU7Ci0gIGlmICh0aGlzLT5yZXNwb25zZV9zdHJlYW1pbmco
KSAhPSAwKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsgMTsKLSAgfQotCi0gIC8vIG9wdGlvbmFs
IC5nb29nbGUucHJvdG9idWYuU3ludGF4IHN5bnRheCA9IDc7Ci0gIGlmICh0aGlzLT5zeW50YXgo
KSAhPSAwKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpFbnVtU2l6ZSh0aGlzLT5zeW50YXgoKSk7Ci0g
IH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBvcHRpb25zID0gNjsK
LSAgdG90YWxfc2l6ZSArPSAxICogdGhpcy0+b3B0aW9uc19zaXplKCk7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgdGhpcy0+b3B0aW9uc19zaXplKCk7IGkrKykgewotICAgIHRvdGFsX3NpemUgKz0K
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNZXNz
YWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgdGhpcy0+b3B0aW9ucyhpKSk7Ci0gIH0KLQotICBH
T09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0g
dG90YWxfc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gIHJl
dHVybiB0b3RhbF9zaXplOwotfQotCi12b2lkIE1ldGhvZDo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZCkK
LSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWls
KF9fTElORV9fKTsKLSAgY29uc3QgTWV0aG9kKiBzb3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgTWV0aG9kPigK
LSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xl
LnByb3RvYnVmLk1ldGhvZCkKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZs
ZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2ds
ZS5wcm90b2J1Zi5NZXRob2QpCi0gICAgTWVyZ2VGcm9tKCpzb3VyY2UpOwotICB9Ci19Ci0KLXZv
aWQgTWV0aG9kOjpNZXJnZUZyb20oY29uc3QgTWV0aG9kJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJv
dG9idWYuTWV0aG9kKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykp
IE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBvcHRpb25zXy5NZXJnZUZyb20oZnJvbS5vcHRp
b25zXyk7Ci0gIGlmIChmcm9tLm5hbWUoKS5zaXplKCkgPiAwKSB7Ci0KLSAgICBuYW1lXy5Bc3Np
Z25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksIGZyb20ubmFtZV8pOwotICB9Ci0gIGlmIChmcm9tLnJlcXVlc3Rf
dHlwZV91cmwoKS5zaXplKCkgPiAwKSB7Ci0KLSAgICByZXF1ZXN0X3R5cGVfdXJsXy5Bc3NpZ25X
aXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCksIGZyb20ucmVxdWVzdF90eXBlX3VybF8pOwotICB9Ci0gIGlmIChmcm9t
LnJlcXVlc3Rfc3RyZWFtaW5nKCkgIT0gMCkgewotICAgIHNldF9yZXF1ZXN0X3N0cmVhbWluZyhm
cm9tLnJlcXVlc3Rfc3RyZWFtaW5nKCkpOwotICB9Ci0gIGlmIChmcm9tLnJlc3BvbnNlX3R5cGVf
dXJsKCkuc2l6ZSgpID4gMCkgewotCi0gICAgcmVzcG9uc2VfdHlwZV91cmxfLkFzc2lnbldpdGhE
ZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgZnJvbS5yZXNwb25zZV90eXBlX3VybF8pOwotICB9Ci0gIGlmIChmcm9tLnJl
c3BvbnNlX3N0cmVhbWluZygpICE9IDApIHsKLSAgICBzZXRfcmVzcG9uc2Vfc3RyZWFtaW5nKGZy
b20ucmVzcG9uc2Vfc3RyZWFtaW5nKCkpOwotICB9Ci0gIGlmIChmcm9tLnN5bnRheCgpICE9IDAp
IHsKLSAgICBzZXRfc3ludGF4KGZyb20uc3ludGF4KCkpOwotICB9Ci19Ci0KLXZvaWQgTWV0aG9k
OjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29v
Z2xlLnByb3RvYnVmLk1ldGhvZCkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xl
YXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIE1ldGhvZDo6Q29weUZyb20oY29u
c3QgTWV0aG9kJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3Bl
Y2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2QpCi0gIGlmICgmZnJv
bSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQot
Ym9vbCBNZXRob2Q6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgTWV0aG9kOjpTd2FwKE1ldGhvZCogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRo
aXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgTWV0aG9kOjpJbnRl
cm5hbFN3YXAoTWV0aG9kKiBvdGhlcikgewotICBuYW1lXy5Td2FwKCZvdGhlci0+bmFtZV8pOwot
ICByZXF1ZXN0X3R5cGVfdXJsXy5Td2FwKCZvdGhlci0+cmVxdWVzdF90eXBlX3VybF8pOwotICBz
dGQ6OnN3YXAocmVxdWVzdF9zdHJlYW1pbmdfLCBvdGhlci0+cmVxdWVzdF9zdHJlYW1pbmdfKTsK
LSAgcmVzcG9uc2VfdHlwZV91cmxfLlN3YXAoJm90aGVyLT5yZXNwb25zZV90eXBlX3VybF8pOwot
ICBzdGQ6OnN3YXAocmVzcG9uc2Vfc3RyZWFtaW5nXywgb3RoZXItPnJlc3BvbnNlX3N0cmVhbWlu
Z18pOwotICBvcHRpb25zXy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT5vcHRpb25zXyk7Ci0gIHN0
ZDo6c3dhcChzeW50YXhfLCBvdGhlci0+c3ludGF4Xyk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8u
U3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9z
aXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1l
dGFkYXRhIE1ldGhvZDo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRl
c2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIG1ldGFkYXRh
OwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gTWV0aG9kX2Rlc2NyaXB0b3JfOwotICBtZXRhZGF0
YS5yZWZsZWN0aW9uID0gTWV0aG9kX3JlZmxlY3Rpb25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19
Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIE1ldGhvZAotCi0vLyBv
cHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci12b2lkIE1ldGhvZDo6Y2xlYXJfbmFtZSgpIHsKLSAg
bmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcm
IE1ldGhvZDo6bmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2dldDpnb29nbGUucHJvdG9idWYuTWV0aG9kLm5hbWUpCi0gIHJldHVybiBuYW1lXy5HZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBNZXRob2Q6OnNldF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJp
bmcmIHZhbHVlKSB7Ci0gIAotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2Qu
bmFtZSkKLX0KLSB2b2lkIE1ldGhvZDo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAg
Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuTWV0
aG9kLm5hbWUpCi19Ci0gdm9pZCBNZXRob2Q6OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBz
aXplX3Qgc2l6ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6
c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3Rv
YnVmLk1ldGhvZC5uYW1lKQotfQotIDo6c3RkOjpzdHJpbmcqIE1ldGhvZDo6bXV0YWJsZV9uYW1l
KCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29v
Z2xlLnByb3RvYnVmLk1ldGhvZC5uYW1lKQotICByZXR1cm4gbmFtZV8uTXV0YWJsZU5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBNZXRob2Q6OnJlbGVhc2VfbmFtZSgpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLk1l
dGhvZC5uYW1lKQotICAKLSAgcmV0dXJuIG5hbWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0g
dm9pZCBNZXRob2Q6OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKSB7Ci0g
IGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAKLSAgfQotICBuYW1l
Xy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5NZXRob2QubmFtZSkK
LX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIHJlcXVlc3RfdHlwZV91cmwgPSAyOwotdm9pZCBNZXRo
b2Q6OmNsZWFyX3JlcXVlc3RfdHlwZV91cmwoKSB7Ci0gIHJlcXVlc3RfdHlwZV91cmxfLkNsZWFy
VG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBNZXRob2Q6OnJl
cXVlc3RfdHlwZV91cmwoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXF1ZXN0X3R5cGVfdXJsKQotICByZXR1
cm4gcmVxdWVzdF90eXBlX3VybF8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgTWV0aG9kOjpz
ZXRfcmVxdWVzdF90eXBlX3VybChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAKLSAg
cmVxdWVzdF90eXBlX3VybF8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWV0aG9kLnJlcXVlc3Rf
dHlwZV91cmwpCi19Ci0gdm9pZCBNZXRob2Q6OnNldF9yZXF1ZXN0X3R5cGVfdXJsKGNvbnN0IGNo
YXIqIHZhbHVlKSB7Ci0gIAotICByZXF1ZXN0X3R5cGVfdXJsXy5TZXROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpz
dGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXF1ZXN0X3R5cGVfdXJsKQotfQotIHZv
aWQgTWV0aG9kOjpzZXRfcmVxdWVzdF90eXBlX3VybChjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90
IHNpemUpIHsKLSAgCi0gIHJlcXVlc3RfdHlwZV91cmxfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAg
OjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUp
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2ds
ZS5wcm90b2J1Zi5NZXRob2QucmVxdWVzdF90eXBlX3VybCkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBN
ZXRob2Q6Om11dGFibGVfcmVxdWVzdF90eXBlX3VybCgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2QucmVxdWVz
dF90eXBlX3VybCkKLSAgcmV0dXJuIHJlcXVlc3RfdHlwZV91cmxfLk11dGFibGVOb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogTWV0aG9kOjpyZWxlYXNlX3JlcXVlc3RfdHlwZV91cmwo
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5w
cm90b2J1Zi5NZXRob2QucmVxdWVzdF90eXBlX3VybCkKLSAgCi0gIHJldHVybiByZXF1ZXN0X3R5
cGVfdXJsXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgTWV0aG9kOjpzZXRfYWxsb2Nh
dGVkX3JlcXVlc3RfdHlwZV91cmwoOjpzdGQ6OnN0cmluZyogcmVxdWVzdF90eXBlX3VybCkgewot
ICBpZiAocmVxdWVzdF90eXBlX3VybCAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAg
Ci0gIH0KLSAgcmVxdWVzdF90eXBlX3VybF8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHJlcXVl
c3RfdHlwZV91cmwpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2Fs
bG9jYXRlZDpnb29nbGUucHJvdG9idWYuTWV0aG9kLnJlcXVlc3RfdHlwZV91cmwpCi19Ci0KLS8v
IG9wdGlvbmFsIGJvb2wgcmVxdWVzdF9zdHJlYW1pbmcgPSAzOwotdm9pZCBNZXRob2Q6OmNsZWFy
X3JlcXVlc3Rfc3RyZWFtaW5nKCkgewotICByZXF1ZXN0X3N0cmVhbWluZ18gPSBmYWxzZTsKLX0K
LSBib29sIE1ldGhvZDo6cmVxdWVzdF9zdHJlYW1pbmcoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXF1ZXN0
X3N0cmVhbWluZykKLSAgcmV0dXJuIHJlcXVlc3Rfc3RyZWFtaW5nXzsKLX0KLSB2b2lkIE1ldGhv
ZDo6c2V0X3JlcXVlc3Rfc3RyZWFtaW5nKGJvb2wgdmFsdWUpIHsKLSAgCi0gIHJlcXVlc3Rfc3Ry
ZWFtaW5nXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
Omdvb2dsZS5wcm90b2J1Zi5NZXRob2QucmVxdWVzdF9zdHJlYW1pbmcpCi19Ci0KLS8vIG9wdGlv
bmFsIHN0cmluZyByZXNwb25zZV90eXBlX3VybCA9IDQ7Ci12b2lkIE1ldGhvZDo6Y2xlYXJfcmVz
cG9uc2VfdHlwZV91cmwoKSB7Ci0gIHJlc3BvbnNlX3R5cGVfdXJsXy5DbGVhclRvRW1wdHlOb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgTWV0aG9kOjpyZXNwb25zZV90eXBl
X3VybCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpn
b29nbGUucHJvdG9idWYuTWV0aG9kLnJlc3BvbnNlX3R5cGVfdXJsKQotICByZXR1cm4gcmVzcG9u
c2VfdHlwZV91cmxfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIE1ldGhvZDo6c2V0X3Jlc3Bv
bnNlX3R5cGVfdXJsKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAotICByZXNwb25z
ZV90eXBlX3VybF8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWV0aG9kLnJlc3BvbnNlX3R5cGVf
dXJsKQotfQotIHZvaWQgTWV0aG9kOjpzZXRfcmVzcG9uc2VfdHlwZV91cmwoY29uc3QgY2hhciog
dmFsdWUpIHsKLSAgCi0gIHJlc3BvbnNlX3R5cGVfdXJsXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6
OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X2NoYXI6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXNwb25zZV90eXBlX3VybCkKLX0KLSB2b2lk
IE1ldGhvZDo6c2V0X3Jlc3BvbnNlX3R5cGVfdXJsKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qg
c2l6ZSkgewotICAKLSAgcmVzcG9uc2VfdHlwZV91cmxfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAg
OjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUp
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2ds
ZS5wcm90b2J1Zi5NZXRob2QucmVzcG9uc2VfdHlwZV91cmwpCi19Ci0gOjpzdGQ6OnN0cmluZyog
TWV0aG9kOjptdXRhYmxlX3Jlc3BvbnNlX3R5cGVfdXJsKCkgewotICAKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXNw
b25zZV90eXBlX3VybCkKLSAgcmV0dXJuIHJlc3BvbnNlX3R5cGVfdXJsXy5NdXRhYmxlTm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotfQotIDo6c3RkOjpzdHJpbmcqIE1ldGhvZDo6cmVsZWFzZV9yZXNwb25zZV90eXBl
X3VybCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29v
Z2xlLnByb3RvYnVmLk1ldGhvZC5yZXNwb25zZV90eXBlX3VybCkKLSAgCi0gIHJldHVybiByZXNw
b25zZV90eXBlX3VybF8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIE1ldGhvZDo6c2V0
X2FsbG9jYXRlZF9yZXNwb25zZV90eXBlX3VybCg6OnN0ZDo6c3RyaW5nKiByZXNwb25zZV90eXBl
X3VybCkgewotICBpZiAocmVzcG9uc2VfdHlwZV91cmwgIT0gTlVMTCkgewotICAgIAotICB9IGVs
c2UgewotICAgIAotICB9Ci0gIHJlc3BvbnNlX3R5cGVfdXJsXy5TZXRBbGxvY2F0ZWROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSwgcmVzcG9uc2VfdHlwZV91cmwpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuTWV0aG9kLnJlc3BvbnNlX3R5cGVf
dXJsKQotfQotCi0vLyBvcHRpb25hbCBib29sIHJlc3BvbnNlX3N0cmVhbWluZyA9IDU7Ci12b2lk
IE1ldGhvZDo6Y2xlYXJfcmVzcG9uc2Vfc3RyZWFtaW5nKCkgewotICByZXNwb25zZV9zdHJlYW1p
bmdfID0gZmFsc2U7Ci19Ci0gYm9vbCBNZXRob2Q6OnJlc3BvbnNlX3N0cmVhbWluZygpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9i
dWYuTWV0aG9kLnJlc3BvbnNlX3N0cmVhbWluZykKLSAgcmV0dXJuIHJlc3BvbnNlX3N0cmVhbWlu
Z187Ci19Ci0gdm9pZCBNZXRob2Q6OnNldF9yZXNwb25zZV9zdHJlYW1pbmcoYm9vbCB2YWx1ZSkg
ewotICAKLSAgcmVzcG9uc2Vfc3RyZWFtaW5nXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2QucmVzcG9uc2Vfc3Ry
ZWFtaW5nKQotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBvcHRpb25z
ID0gNjsKLWludCBNZXRob2Q6Om9wdGlvbnNfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG9wdGlv
bnNfLnNpemUoKTsKLX0KLXZvaWQgTWV0aG9kOjpjbGVhcl9vcHRpb25zKCkgewotICBvcHRpb25z
Xy5DbGVhcigpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24mIE1ldGhvZDo6
b3B0aW9ucyhpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuTWV0aG9kLm9wdGlvbnMpCi0gIHJldHVybiBvcHRp
b25zXy5HZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24qIE1ldGhvZDo6
bXV0YWJsZV9vcHRpb25zKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuTWV0aG9kLm9wdGlvbnMpCi0gIHJldHVy
biBvcHRpb25zXy5NdXRhYmxlKGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9u
KiBNZXRob2Q6OmFkZF9vcHRpb25zKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5NZXRob2Qub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlv
bnNfLkFkZCgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdv
b2dsZTo6cHJvdG9idWY6Ok9wdGlvbiA+KgotTWV0aG9kOjptdXRhYmxlX29wdGlvbnMoKSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnBy
b3RvYnVmLk1ldGhvZC5vcHRpb25zKQotICByZXR1cm4gJm9wdGlvbnNfOwotfQotY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9w
dGlvbiA+JgotTWV0aG9kOjpvcHRpb25zKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuTWV0aG9kLm9wdGlvbnMpCi0gIHJl
dHVybiBvcHRpb25zXzsKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5TeW50YXgg
c3ludGF4ID0gNzsKLXZvaWQgTWV0aG9kOjpjbGVhcl9zeW50YXgoKSB7Ci0gIHN5bnRheF8gPSAw
OwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U3ludGF4IE1ldGhvZDo6c3ludGF4KCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1
Zi5NZXRob2Quc3ludGF4KQotICByZXR1cm4gc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6U3ludGF4ID4oc3ludGF4Xyk7Ci19Ci0gdm9pZCBNZXRob2Q6OnNldF9zeW50YXgoOjpnb29n
bGU6OnByb3RvYnVmOjpTeW50YXggdmFsdWUpIHsKLSAgCi0gIHN5bnRheF8gPSB2YWx1ZTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWV0
aG9kLnN5bnRheCkKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURF
UlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi0jaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVS
ID49IDE5MDAKLWNvbnN0IGludCBNaXhpbjo6a05hbWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBN
aXhpbjo6a1Jvb3RGaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8
IF9NU0NfVkVSID49IDE5MDAKLQotTWl4aW46Ok1peGluKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3Io
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90
b2J1Zi5NaXhpbikKLX0KLQotdm9pZCBNaXhpbjo6SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewot
ICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSB0cnVlOwotfQotCi1NaXhpbjo6TWl4aW4oY29uc3Qg
TWl4aW4mIGZyb20pCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2lu
dGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZy
b20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29n
bGUucHJvdG9idWYuTWl4aW4pCi19Ci0KLXZvaWQgTWl4aW46OlNoYXJlZEN0b3IoKSB7Ci0gICAg
X2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gZmFsc2U7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwotICBuYW1lXy5V
bnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIHJvb3RfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0K
LQotTWl4aW46On5NaXhpbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3Ry
dWN0b3I6Z29vZ2xlLnByb3RvYnVmLk1peGluKQotICBTaGFyZWREdG9yKCk7Ci19Ci0KLXZvaWQg
TWl4aW46OlNoYXJlZER0b3IoKSB7Ci0gIG5hbWVfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIHJv
b3RfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGlmICh0aGlzICE9IGRlZmF1bHRfaW5zdGFuY2Vf
KSB7Ci0gIH0KLX0KLQotdm9pZCBNaXhpbjo6U2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Qg
ewotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3Np
emVfID0gc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci19Ci1j
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIE1peGluOjpkZXNjcmlwdG9yKCkg
ewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIE1peGluX2Rl
c2NyaXB0b3JfOwotfQotCi1jb25zdCBNaXhpbiYgTWl4aW46OmRlZmF1bHRfaW5zdGFuY2UoKSB7
Ci0gIGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2ds
ZV8yZnByb3RvYnVmXzJmYXBpXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNl
XzsKLX0KLQotTWl4aW4qIE1peGluOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLU1peGlu
KiBNaXhpbjo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0g
IE1peGluKiBuID0gbmV3IE1peGluOwotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5h
LT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgTWl4aW46OkNsZWFyKCkgewot
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnBy
b3RvYnVmLk1peGluKQotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIHJvb3Rf
LkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLQotYm9vbCBNaXhpbjo6TWVyZ2VQYXJ0aWFs
RnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRT
dHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVE
SUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpn
b29nbGUucHJvdG9idWYuTWl4aW4pCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpn
b29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRv
ZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFu
ZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0aW9u
YWwgc3RyaW5nIG5hbWUgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0g
MTApIHsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFi
bGVfbmFtZSgpKSk7Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgICAgICAgdGhpcy0+bmFt
ZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlBBUlNFLAotICAgICAgICAgICAg
Imdvb2dsZS5wcm90b2J1Zi5NaXhpbi5uYW1lIikpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5F
eHBlY3RUYWcoMTgpKSBnb3RvIHBhcnNlX3Jvb3Q7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
Ci0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcgcm9vdCA9IDI7Ci0gICAgICBjYXNlIDI6IHsKLSAg
ICAgICAgaWYgKHRhZyA9PSAxOCkgewotICAgICAgICAgcGFyc2Vfcm9vdDoKLSAgICAgICAgICBE
T18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJp
bmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVfcm9vdCgpKSk7Ci0gICAg
ICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpW
ZXJpZnlVdGY4U3RyaW5nKAotICAgICAgICAgICAgdGhpcy0+cm9vdCgpLmRhdGEoKSwgdGhpcy0+
cm9vdCgpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5N
aXhpbi5yb290IikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3Vu
dXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3Rv
IHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0g
ICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2ly
ZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3Vj
Y2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlNraXBGaWVsZChpbnB1dCwgdGFnKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgfQotICAgIH0KLSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLk1peGluKQotICByZXR1cm4gdHJ1
ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9mYWlsdXJl
Omdvb2dsZS5wcm90b2J1Zi5NaXhpbikKLSAgcmV0dXJuIGZhbHNlOwotI3VuZGVmIERPXwotfQot
Ci12b2lkIE1peGluOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5NaXhp
bikKLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBpZiAodGhpcy0+bmFtZSgpLnNp
emUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMt
Pm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLk1peGluLm5h
bWUiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAxLCB0aGlzLT5uYW1lKCksIG91dHB1dCk7
Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgcm9vdCA9IDI7Ci0gIGlmICh0aGlzLT5yb290
KCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+cm9vdCgpLmRhdGEoKSwg
dGhpcy0+cm9vdCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuTWl4
aW4ucm9vdCIpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDIsIHRoaXMtPnJvb3QoKSwgb3V0
cHV0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfZW5k
Omdvb2dsZS5wcm90b2J1Zi5NaXhpbikKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCog
TWl4aW46OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjp1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChzZXJpYWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk1peGluKQotICAv
LyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gIGlmICh0aGlzLT5uYW1lKCkuc2l6ZSgpID4g
MCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpW
ZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgp
Lmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuTWl4aW4ubmFtZSIpOwot
ICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAxLCB0aGlzLT5uYW1lKCksIHRh
cmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgcm9vdCA9IDI7Ci0gIGlmICh0aGlz
LT5yb290KCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+cm9vdCgpLmRh
dGEoKSwgdGhpcy0+cm9vdCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9i
dWYuTWl4aW4ucm9vdCIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAy
LCB0aGlzLT5yb290KCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuTWl4aW4pCi0gIHJl
dHVybiB0YXJnZXQ7Ci19Ci0KLWludCBNaXhpbjo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLk1peGluKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5n
IG5hbWUgPSAxOwotICBpZiAodGhpcy0+bmFtZSgpLnNpemUoKSA+IDApIHsKLSAgICB0b3RhbF9z
aXplICs9IDEgKwotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlN0cmluZ1NpemUoCi0gICAgICAgIHRoaXMtPm5hbWUoKSk7Ci0gIH0KLQotICAvLyBv
cHRpb25hbCBzdHJpbmcgcm9vdCA9IDI7Ci0gIGlmICh0aGlzLT5yb290KCkuc2l6ZSgpID4gMCkg
ewotICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgdGhpcy0+cm9vdCgpKTsK
LSAgfQotCi0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNo
ZWRfc2l6ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19F
TkQoKTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgTWl4aW46Ok1lcmdlRnJvbShj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5NaXhpbikKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJn
ZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgTWl4aW4qIHNvdXJjZSA9IAotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25zdCBN
aXhpbj4oCi0gICAgICAgICAgJmZyb20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWls
Omdvb2dsZS5wcm90b2J1Zi5NaXhpbikKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNz
Omdvb2dsZS5wcm90b2J1Zi5NaXhpbikKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0K
LQotdm9pZCBNaXhpbjo6TWVyZ2VGcm9tKGNvbnN0IE1peGluJiBmcm9tKSB7Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUu
cHJvdG9idWYuTWl4aW4pCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlz
KSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGlmIChmcm9tLm5hbWUoKS5zaXplKCkgPiAw
KSB7Ci0KLSAgICBuYW1lXy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20ubmFtZV8pOwotICB9
Ci0gIGlmIChmcm9tLnJvb3QoKS5zaXplKCkgPiAwKSB7Ci0KLSAgICByb290Xy5Bc3NpZ25XaXRo
RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIGZyb20ucm9vdF8pOwotICB9Ci19Ci0KLXZvaWQgTWl4aW46OkNvcHlGcm9t
KGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuTWl4aW4pCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1l
cmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBNaXhpbjo6Q29weUZyb20oY29uc3QgTWl4aW4mIGZy
b20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19jb3B5X2Zy
b21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk1peGluKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0
dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLWJvb2wgTWl4aW46Oklz
SW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWl4aW46
OlN3YXAoTWl4aW4qIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIElu
dGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lkIE1peGluOjpJbnRlcm5hbFN3YXAoTWl4aW4qIG90
aGVyKSB7Ci0gIG5hbWVfLlN3YXAoJm90aGVyLT5uYW1lXyk7Ci0gIHJvb3RfLlN3YXAoJm90aGVy
LT5yb290Xyk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9t
ZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6
ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIE1peGluOjpHZXRNZXRhZGF0
YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3Ig
PSBNaXhpbl9kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IE1peGluX3JlZmxl
Y3Rpb25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9U
X0lOX0hFQURFUlMKLS8vIE1peGluCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLXZv
aWQgTWl4aW46OmNsZWFyX25hbWUoKSB7Ci0gIG5hbWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTsKLX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBNaXhpbjo6bmFtZSgpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuTWl4aW4u
bmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIE1peGluOjpz
ZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dDpnb29nbGUucHJvdG9idWYuTWl4aW4ubmFtZSkKLX0KLSB2b2lkIE1peGluOjpzZXRfbmFtZShj
b25zdCBjaGFyKiB2YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpz
dHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9j
aGFyOmdvb2dsZS5wcm90b2J1Zi5NaXhpbi5uYW1lKQotfQotIHZvaWQgTWl4aW46OnNldF9uYW1l
KGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLk1peGluLm5hbWUpCi19Ci0gOjpzdGQ6OnN0cmluZyog
TWl4aW46Om11dGFibGVfbmFtZSgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5NaXhpbi5uYW1lKQotICByZXR1cm4gbmFt
ZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBNaXhpbjo6cmVsZWFz
ZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpn
b29nbGUucHJvdG9idWYuTWl4aW4ubmFtZSkKLSAgCi0gIHJldHVybiBuYW1lXy5SZWxlYXNlTm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotfQotIHZvaWQgTWl4aW46OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3Ry
aW5nKiBuYW1lKSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAg
ICAKLSAgfQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1
Zi5NaXhpbi5uYW1lKQotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgcm9vdCA9IDI7Ci12b2lkIE1p
eGluOjpjbGVhcl9yb290KCkgewotICByb290Xy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19
Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgTWl4aW46OnJvb3QoKSBjb25zdCB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1peGluLnJvb3Qp
Ci0gIHJldHVybiByb290Xy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBNaXhpbjo6c2V0X3Jv
b3QoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgCi0gIHJvb3RfLlNldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29v
Z2xlLnByb3RvYnVmLk1peGluLnJvb3QpCi19Ci0gdm9pZCBNaXhpbjo6c2V0X3Jvb3QoY29uc3Qg
Y2hhciogdmFsdWUpIHsKLSAgCi0gIHJvb3RfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5n
KHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpn
b29nbGUucHJvdG9idWYuTWl4aW4ucm9vdCkKLX0KLSB2b2lkIE1peGluOjpzZXRfcm9vdChjb25z
dCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgCi0gIHJvb3RfLlNldE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1
ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2lu
dGVyOmdvb2dsZS5wcm90b2J1Zi5NaXhpbi5yb290KQotfQotIDo6c3RkOjpzdHJpbmcqIE1peGlu
OjptdXRhYmxlX3Jvb3QoKSB7Ci0gIAotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuTWl4aW4ucm9vdCkKLSAgcmV0dXJuIHJvb3RfLk11
dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogTWl4aW46OnJlbGVhc2Vfcm9v
dCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xl
LnByb3RvYnVmLk1peGluLnJvb3QpCi0gIAotICByZXR1cm4gcm9vdF8uUmVsZWFzZU5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLX0KLSB2b2lkIE1peGluOjpzZXRfYWxsb2NhdGVkX3Jvb3QoOjpzdGQ6OnN0cmluZyog
cm9vdCkgewotICBpZiAocm9vdCAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAgCi0g
IH0KLSAgcm9vdF8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHJvb3QpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuTWl4
aW4ucm9vdCkKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMK
LQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8g
bmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvYXBpLnBiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYXBpLnBiLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJiMzVlNDcxYTM4ZGNjYzkwMGMwNTU1ODI4ZjFhNGYwMGM5OGQ1
ZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2FwaS5wYi5oCisrKyAvZGV2L251bGwKQEAgLTEsOTg0ICswLDAgQEAKLS8v
IEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQh
Ci0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8KLQotI2lmbmRlZiBQUk9UT0JV
Rl9nb29nbGVfMmZwcm90b2J1Zl8yZmFwaV8yZXByb3RvX19JTkNMVURFRAotI2RlZmluZSBQUk9U
T0JVRl9nb29nbGVfMmZwcm90b2J1Zl8yZmFwaV8yZXByb3RvX19JTkNMVURFRAotCi0jaW5jbHVk
ZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgot
Ci0jaWYgR09PR0xFX1BST1RPQlVGX1ZFUlNJT04gPCAzMDAwMDAwCi0jZXJyb3IgVGhpcyBmaWxl
IHdhcyBnZW5lcmF0ZWQgYnkgYSBuZXdlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcwotI2Vy
cm9yIGluY29tcGF0aWJsZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQbGVh
c2UgdXBkYXRlCi0jZXJyb3IgeW91ciBoZWFkZXJzLgotI2VuZGlmCi0jaWYgMzAwMDAwMCA8IEdP
T0dMRV9QUk9UT0JVRl9NSU5fUFJPVE9DX1ZFUlNJT04KLSNlcnJvciBUaGlzIGZpbGUgd2FzIGdl
bmVyYXRlZCBieSBhbiBvbGRlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcwotI2Vycm9yIGlu
Y29tcGF0aWJsZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQbGVhc2UKLSNl
cnJvciByZWdlbmVyYXRlIHRoaXMgZmlsZSB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBwcm90b2Mu
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21l
dGFkYXRhLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvZXh0ZW5zaW9uX3NldC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bmtub3du
X2ZpZWxkX3NldC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5w
Yi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90eXBlLnBiLmg+Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoaW5jbHVkZXMpCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLQotLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIC0tIGRvIG5v
dCBjYWxsIHRoZXNlLgotdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19n
b29nbGVfMmZwcm90b2J1Zl8yZmFwaV8yZXByb3RvKCk7Ci12b2lkIHByb3RvYnVmX0Fzc2lnbkRl
c2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZhcGlfMmVwcm90bygpOwotdm9pZCBwcm90b2J1Zl9TaHV0
ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZhcGlfMmVwcm90bygpOwotCi1jbGFzcyBBcGk7
Ci1jbGFzcyBNZXRob2Q7Ci1jbGFzcyBNaXhpbjsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1jbGFzcyBM
SUJQUk9UT0JVRl9FWFBPUlQgQXBpIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2Fn
ZSB7Ci0gcHVibGljOgotICBBcGkoKTsKLSAgdmlydHVhbCB+QXBpKCk7Ci0KLSAgQXBpKGNvbnN0
IEFwaSYgZnJvbSk7Ci0KLSAgaW5saW5lIEFwaSYgb3BlcmF0b3I9KGNvbnN0IEFwaSYgZnJvbSkg
ewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIHN0YXRp
YyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAg
c3RhdGljIGNvbnN0IEFwaSYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChBcGkq
IG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBBcGkqIE5ldygpIGNvbnN0IHsg
cmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIEFwaSogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJl
bmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IEFwaSYgZnJvbSk7
Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IEFwaSYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAg
Ym9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0g
IGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6ZVdpdGhD
YWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3Ry
ZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxp
emVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1
dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2NhY2hlZF9z
aXplXzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWRE
dG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50
ZXJuYWxTd2FwKEFwaSogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnBy
b3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9p
bnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVu
YVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFf
cHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEg
R2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29ycyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICB2b2lkIGNsZWFyX25hbWUoKTsKLSAg
c3RhdGljIGNvbnN0IGludCBrTmFtZUZpZWxkTnVtYmVyID0gMTsKLSAgY29uc3QgOjpzdGQ6OnN0
cmluZyYgbmFtZSgpIGNvbnN0OwotICB2b2lkIHNldF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcm
IHZhbHVlKTsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0
X25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyog
bXV0YWJsZV9uYW1lKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfbmFtZSgpOwotICB2b2lk
IHNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKTsKLQotICAvLyByZXBlYXRl
ZCAuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZCBtZXRob2RzID0gMjsKLSAgaW50IG1ldGhvZHNfc2l6
ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX21ldGhvZHMoKTsKLSAgc3RhdGljIGNvbnN0IGludCBr
TWV0aG9kc0ZpZWxkTnVtYmVyID0gMjsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRo
b2QmIG1ldGhvZHMoaW50IGluZGV4KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRo
b2QqIG11dGFibGVfbWV0aG9kcyhpbnQgaW5kZXgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
dGhvZCogYWRkX21ldGhvZHMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZp
ZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZCA+KgotICAgICAgbXV0YWJsZV9tZXRob2Rz
KCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29n
bGU6OnByb3RvYnVmOjpNZXRob2QgPiYKLSAgICAgIG1ldGhvZHMoKSBjb25zdDsKLQotICAvLyBy
ZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBvcHRpb25zID0gMzsKLSAgaW50IG9wdGlv
bnNfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX29wdGlvbnMoKTsKLSAgc3RhdGljIGNvbnN0
IGludCBrT3B0aW9uc0ZpZWxkTnVtYmVyID0gMzsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpPcHRpb24mIG9wdGlvbnMoaW50IGluZGV4KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpPcHRpb24qIG11dGFibGVfb3B0aW9ucyhpbnQgaW5kZXgpOwotICA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok9wdGlvbiogYWRkX29wdGlvbnMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRl
ZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiA+KgotICAgICAgbXV0YWJsZV9v
cHRpb25zKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwg
Ojpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24gPiYKLSAgICAgIG9wdGlvbnMoKSBjb25zdDsKLQot
ICAvLyBvcHRpb25hbCBzdHJpbmcgdmVyc2lvbiA9IDQ7Ci0gIHZvaWQgY2xlYXJfdmVyc2lvbigp
OwotICBzdGF0aWMgY29uc3QgaW50IGtWZXJzaW9uRmllbGROdW1iZXIgPSA0OwotICBjb25zdCA6
OnN0ZDo6c3RyaW5nJiB2ZXJzaW9uKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3ZlcnNpb24oY29uc3Qg
OjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNldF92ZXJzaW9uKGNvbnN0IGNoYXIqIHZh
bHVlKTsKLSAgdm9pZCBzZXRfdmVyc2lvbihjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUp
OwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX3ZlcnNpb24oKTsKLSAgOjpzdGQ6OnN0cmluZyog
cmVsZWFzZV92ZXJzaW9uKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF92ZXJzaW9uKDo6c3RkOjpz
dHJpbmcqIHZlcnNpb24pOwotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU291cmNl
Q29udGV4dCBzb3VyY2VfY29udGV4dCA9IDU7Ci0gIGJvb2wgaGFzX3NvdXJjZV9jb250ZXh0KCkg
Y29uc3Q7Ci0gIHZvaWQgY2xlYXJfc291cmNlX2NvbnRleHQoKTsKLSAgc3RhdGljIGNvbnN0IGlu
dCBrU291cmNlQ29udGV4dEZpZWxkTnVtYmVyID0gNTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpTb3VyY2VDb250ZXh0JiBzb3VyY2VfY29udGV4dCgpIGNvbnN0OwotICA6Omdvb2dsZTo6
cHJvdG9idWY6OlNvdXJjZUNvbnRleHQqIG11dGFibGVfc291cmNlX2NvbnRleHQoKTsKLSAgOjpn
b29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiByZWxlYXNlX3NvdXJjZV9jb250ZXh0KCk7
Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9zb3VyY2VfY29udGV4dCg6Omdvb2dsZTo6cHJvdG9idWY6
OlNvdXJjZUNvbnRleHQqIHNvdXJjZV9jb250ZXh0KTsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xl
LnByb3RvYnVmLk1peGluIG1peGlucyA9IDY7Ci0gIGludCBtaXhpbnNfc2l6ZSgpIGNvbnN0Owot
ICB2b2lkIGNsZWFyX21peGlucygpOwotICBzdGF0aWMgY29uc3QgaW50IGtNaXhpbnNGaWVsZE51
bWJlciA9IDY7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWl4aW4mIG1peGlucyhpbnQg
aW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1peGluKiBtdXRhYmxlX21peGlu
cyhpbnQgaW5kZXgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1peGluKiBhZGRfbWl4aW5zKCk7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3Rv
YnVmOjpNaXhpbiA+KgotICAgICAgbXV0YWJsZV9taXhpbnMoKTsKLSAgY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1peGluID4m
Ci0gICAgICBtaXhpbnMoKSBjb25zdDsKLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVm
LlN5bnRheCBzeW50YXggPSA3OwotICB2b2lkIGNsZWFyX3N5bnRheCgpOwotICBzdGF0aWMgY29u
c3QgaW50IGtTeW50YXhGaWVsZE51bWJlciA9IDc7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U3lu
dGF4IHN5bnRheCgpIGNvbnN0OwotICB2b2lkIHNldF9zeW50YXgoOjpnb29nbGU6OnByb3RvYnVm
OjpTeW50YXggdmFsdWUpOwotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19z
Y29wZTpnb29nbGUucHJvdG9idWYuQXBpKQotIHByaXZhdGU6Ci0KLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRh
dGFfOwotICBib29sIF9pc19kZWZhdWx0X2luc3RhbmNlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgbmFtZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2QgPiBtZXRob2RzXzsK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok9wdGlvbiA+IG9wdGlvbnNfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpB
cmVuYVN0cmluZ1B0ciB2ZXJzaW9uXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250
ZXh0KiBzb3VyY2VfY29udGV4dF87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJG
aWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpNaXhpbiA+IG1peGluc187Ci0gIGludCBzeW50YXhf
OwotICBtdXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JV
Rl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmFwaV8yZXByb3Rv
KCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJvdG9idWZf
MmZhcGlfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29v
Z2xlXzJmcHJvdG9idWZfMmZhcGlfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdElu
c3RhbmNlKCk7Ci0gIHN0YXRpYyBBcGkqIGRlZmF1bHRfaW5zdGFuY2VfOwotfTsKLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE1ldGhvZCA6IHB1YmxpYyA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgTWV0aG9kKCk7Ci0gIHZpcnR1YWwg
fk1ldGhvZCgpOwotCi0gIE1ldGhvZChjb25zdCBNZXRob2QmIGZyb20pOwotCi0gIGlubGluZSBN
ZXRob2QmIG9wZXJhdG9yPShjb25zdCBNZXRob2QmIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9t
KTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBNZXRob2Qm
IGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2b2lkIFN3YXAoTWV0aG9kKiBvdGhlcik7Ci0KLSAg
Ly8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICBpbmxpbmUgTWV0aG9kKiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXco
TlVMTCk7IH0KLQotICBNZXRob2QqIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVu
YSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBNZXRob2QmIGZyb20pOwotICB2
b2lkIE1lcmdlRnJvbShjb25zdCBNZXRob2QmIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJv
b2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBi
b29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVh
bSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXpl
V2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQp
IGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6
ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRv
cigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVy
bmFsU3dhcChNZXRob2QqIG90aGVyKTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBf
aW50ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJl
bmFQdHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5h
X3B0cigpOwotICB9Ci0gIHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRh
IEdldE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBhY2Nlc3NvcnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgdm9pZCBjbGVhcl9uYW1lKCk7Ci0g
IHN0YXRpYyBjb25zdCBpbnQga05hbWVGaWVsZE51bWJlciA9IDE7Ci0gIGNvbnN0IDo6c3RkOjpz
dHJpbmcmIG5hbWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5n
JiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNl
dF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcq
IG11dGFibGVfbmFtZSgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX25hbWUoKTsKLSAgdm9p
ZCBzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgLy8gb3B0aW9u
YWwgc3RyaW5nIHJlcXVlc3RfdHlwZV91cmwgPSAyOwotICB2b2lkIGNsZWFyX3JlcXVlc3RfdHlw
ZV91cmwoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrUmVxdWVzdFR5cGVVcmxGaWVsZE51bWJlciA9
IDI7Ci0gIGNvbnN0IDo6c3RkOjpzdHJpbmcmIHJlcXVlc3RfdHlwZV91cmwoKSBjb25zdDsKLSAg
dm9pZCBzZXRfcmVxdWVzdF90eXBlX3VybChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0g
IHZvaWQgc2V0X3JlcXVlc3RfdHlwZV91cmwoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNl
dF9yZXF1ZXN0X3R5cGVfdXJsKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6
c3RkOjpzdHJpbmcqIG11dGFibGVfcmVxdWVzdF90eXBlX3VybCgpOwotICA6OnN0ZDo6c3RyaW5n
KiByZWxlYXNlX3JlcXVlc3RfdHlwZV91cmwoKTsKLSAgdm9pZCBzZXRfYWxsb2NhdGVkX3JlcXVl
c3RfdHlwZV91cmwoOjpzdGQ6OnN0cmluZyogcmVxdWVzdF90eXBlX3VybCk7Ci0KLSAgLy8gb3B0
aW9uYWwgYm9vbCByZXF1ZXN0X3N0cmVhbWluZyA9IDM7Ci0gIHZvaWQgY2xlYXJfcmVxdWVzdF9z
dHJlYW1pbmcoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrUmVxdWVzdFN0cmVhbWluZ0ZpZWxkTnVt
YmVyID0gMzsKLSAgYm9vbCByZXF1ZXN0X3N0cmVhbWluZygpIGNvbnN0OwotICB2b2lkIHNldF9y
ZXF1ZXN0X3N0cmVhbWluZyhib29sIHZhbHVlKTsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgcmVz
cG9uc2VfdHlwZV91cmwgPSA0OwotICB2b2lkIGNsZWFyX3Jlc3BvbnNlX3R5cGVfdXJsKCk7Ci0g
IHN0YXRpYyBjb25zdCBpbnQga1Jlc3BvbnNlVHlwZVVybEZpZWxkTnVtYmVyID0gNDsKLSAgY29u
c3QgOjpzdGQ6OnN0cmluZyYgcmVzcG9uc2VfdHlwZV91cmwoKSBjb25zdDsKLSAgdm9pZCBzZXRf
cmVzcG9uc2VfdHlwZV91cmwoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNl
dF9yZXNwb25zZV90eXBlX3VybChjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X3Jlc3Bv
bnNlX3R5cGVfdXJsKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpz
dHJpbmcqIG11dGFibGVfcmVzcG9uc2VfdHlwZV91cmwoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVs
ZWFzZV9yZXNwb25zZV90eXBlX3VybCgpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfcmVzcG9uc2Vf
dHlwZV91cmwoOjpzdGQ6OnN0cmluZyogcmVzcG9uc2VfdHlwZV91cmwpOwotCi0gIC8vIG9wdGlv
bmFsIGJvb2wgcmVzcG9uc2Vfc3RyZWFtaW5nID0gNTsKLSAgdm9pZCBjbGVhcl9yZXNwb25zZV9z
dHJlYW1pbmcoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrUmVzcG9uc2VTdHJlYW1pbmdGaWVsZE51
bWJlciA9IDU7Ci0gIGJvb2wgcmVzcG9uc2Vfc3RyZWFtaW5nKCkgY29uc3Q7Ci0gIHZvaWQgc2V0
X3Jlc3BvbnNlX3N0cmVhbWluZyhib29sIHZhbHVlKTsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xl
LnByb3RvYnVmLk9wdGlvbiBvcHRpb25zID0gNjsKLSAgaW50IG9wdGlvbnNfc2l6ZSgpIGNvbnN0
OwotICB2b2lkIGNsZWFyX29wdGlvbnMoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrT3B0aW9uc0Zp
ZWxkTnVtYmVyID0gNjsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24mIG9wdGlv
bnMoaW50IGluZGV4KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24qIG11dGFi
bGVfb3B0aW9ucyhpbnQgaW5kZXgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiogYWRk
X29wdGlvbnMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdv
b2dsZTo6cHJvdG9idWY6Ok9wdGlvbiA+KgotICAgICAgbXV0YWJsZV9vcHRpb25zKCk7Ci0gIGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3Rv
YnVmOjpPcHRpb24gPiYKLSAgICAgIG9wdGlvbnMoKSBjb25zdDsKLQotICAvLyBvcHRpb25hbCAu
Z29vZ2xlLnByb3RvYnVmLlN5bnRheCBzeW50YXggPSA3OwotICB2b2lkIGNsZWFyX3N5bnRheCgp
OwotICBzdGF0aWMgY29uc3QgaW50IGtTeW50YXhGaWVsZE51bWJlciA9IDc7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6U3ludGF4IHN5bnRheCgpIGNvbnN0OwotICB2b2lkIHNldF9zeW50YXgoOjpn
b29nbGU6OnByb3RvYnVmOjpTeW50YXggdmFsdWUpOwotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuTWV0aG9kKQotIHByaXZhdGU6Ci0K
LSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVu
YSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICBib29sIF9pc19kZWZhdWx0X2luc3RhbmNlXzsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgbmFtZV87Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIHJlcXVlc3RfdHlwZV91
cmxfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciByZXNw
b25zZV90eXBlX3VybF87Ci0gIGJvb2wgcmVxdWVzdF9zdHJlYW1pbmdfOwotICBib29sIHJlc3Bv
bnNlX3N0cmVhbWluZ187Ci0gIGludCBzeW50YXhfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJl
cGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4gb3B0aW9uc187Ci0g
IG11dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIGZyaWVuZCB2b2lkIExJQlBST1RPQlVGX0VY
UE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmYXBpXzJlcHJvdG8oKTsK
LSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmFw
aV8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVf
MmZwcm90b2J1Zl8yZmFwaV8yZXByb3RvKCk7Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFu
Y2UoKTsKLSAgc3RhdGljIE1ldGhvZCogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgTWl4aW4gOiBwdWJsaWMgOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIE1peGluKCk7Ci0gIHZpcnR1YWwgfk1p
eGluKCk7Ci0KLSAgTWl4aW4oY29uc3QgTWl4aW4mIGZyb20pOwotCi0gIGlubGluZSBNaXhpbiYg
b3BlcmF0b3I9KGNvbnN0IE1peGluJiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJvbSk7Ci0gICAg
cmV0dXJuICp0aGlzOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgTWl4aW4mIGRlZmF1bHRf
aW5zdGFuY2UoKTsKLQotICB2b2lkIFN3YXAoTWl4aW4qIG90aGVyKTsKLQotICAvLyBpbXBsZW1l
bnRzIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gIGlubGluZSBNaXhpbiogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0K
LSAgTWl4aW4qIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3Q7Ci0g
IHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsK
LSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9t
KTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBNaXhpbiYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9t
KGNvbnN0IE1peGluJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigpOwotICBib29sIElzSW5pdGlhbGl6
ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRp
YWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElu
cHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29u
c3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXpl
c1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50
IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZh
dGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBT
ZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoTWl4aW4q
IG90aGVyKTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEq
IEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRh
dGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQdHIoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0cigpOwotICB9Ci0g
IHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdldE1ldGFkYXRhKCkg
Y29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBhY2Nlc3NvcnMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIG9wdGlvbmFs
IHN0cmluZyBuYW1lID0gMTsKLSAgdm9pZCBjbGVhcl9uYW1lKCk7Ci0gIHN0YXRpYyBjb25zdCBp
bnQga05hbWVGaWVsZE51bWJlciA9IDE7Ci0gIGNvbnN0IDo6c3RkOjpzdHJpbmcmIG5hbWUoKSBj
b25zdDsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZv
aWQgc2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNldF9uYW1lKGNvbnN0IGNo
YXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIG11dGFibGVfbmFtZSgp
OwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX25hbWUoKTsKLSAgdm9pZCBzZXRfYWxsb2NhdGVk
X25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIHJvb3Qg
PSAyOwotICB2b2lkIGNsZWFyX3Jvb3QoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrUm9vdEZpZWxk
TnVtYmVyID0gMjsKLSAgY29uc3QgOjpzdGQ6OnN0cmluZyYgcm9vdCgpIGNvbnN0OwotICB2b2lk
IHNldF9yb290KGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBzZXRfcm9vdChj
b25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X3Jvb3QoY29uc3QgY2hhciogdmFsdWUsIHNp
emVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0YWJsZV9yb290KCk7Ci0gIDo6c3RkOjpz
dHJpbmcqIHJlbGVhc2Vfcm9vdCgpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfcm9vdCg6OnN0ZDo6
c3RyaW5nKiByb290KTsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2Nv
cGU6Z29vZ2xlLnByb3RvYnVmLk1peGluKQotIHByaXZhdGU6Ci0KLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRh
dGFfOwotICBib29sIF9pc19kZWZhdWx0X2luc3RhbmNlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgbmFtZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIHJvb3RfOwotICBtdXRhYmxlIGludCBfY2FjaGVkX3Np
emVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19n
b29nbGVfMmZwcm90b2J1Zl8yZmFwaV8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVm
X0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZhcGlfMmVwcm90bygpOwotICBmcmllbmQg
dm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZhcGlfMmVwcm90
bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBNaXhpbiog
ZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLS8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotI2lmICFQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIEFwaQotCi0vLyBvcHRp
b25hbCBzdHJpbmcgbmFtZSA9IDE7Ci1pbmxpbmUgdm9pZCBBcGk6OmNsZWFyX25hbWUoKSB7Ci0g
IG5hbWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSBjb25zdCA6OnN0ZDo6
c3RyaW5nJiBBcGk6Om5hbWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkFwaS5uYW1lKQotICByZXR1cm4gbmFtZV8uR2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgQXBpOjpzZXRfbmFtZShjb25zdCA6OnN0ZDo6
c3RyaW5nJiB2YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuQXBp
Lm5hbWUpCi19Ci1pbmxpbmUgdm9pZCBBcGk6OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKSB7
Ci0gIAotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVm
LkFwaS5uYW1lKQotfQotaW5saW5lIHZvaWQgQXBpOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1
ZSwgc2l6ZV90IHNpemUpIHsKLSAgCi0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpz
dGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5w
cm90b2J1Zi5BcGkubmFtZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBBcGk6Om11dGFibGVf
bmFtZSgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxl
Omdvb2dsZS5wcm90b2J1Zi5BcGkubmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFibGVOb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogQXBpOjpyZWxlYXNlX25hbWUoKSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1
Zi5BcGkubmFtZSkKLSAgCi0gIHJldHVybiBuYW1lXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQot
aW5saW5lIHZvaWQgQXBpOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSkg
ewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAg
bmFtZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIG5hbWUpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuQXBpLm5hbWUp
Ci19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuTWV0aG9kIG1ldGhvZHMgPSAyOwot
aW5saW5lIGludCBBcGk6Om1ldGhvZHNfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG1ldGhvZHNf
LnNpemUoKTsKLX0KLWlubGluZSB2b2lkIEFwaTo6Y2xlYXJfbWV0aG9kcygpIHsKLSAgbWV0aG9k
c18uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZCYg
QXBpOjptZXRob2RzKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5BcGkubWV0aG9kcykKLSAgcmV0dXJuIG1l
dGhvZHNfLkdldChpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2Qq
IEFwaTo6bXV0YWJsZV9tZXRob2RzKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuQXBpLm1ldGhvZHMpCi0gIHJl
dHVybiBtZXRob2RzXy5NdXRhYmxlKGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1ldGhvZCogQXBpOjphZGRfbWV0aG9kcygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuQXBpLm1ldGhvZHMpCi0gIHJldHVybiBt
ZXRob2RzXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRy
RmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kID4qCi1BcGk6Om11dGFibGVfbWV0aG9k
cygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpn
b29nbGUucHJvdG9idWYuQXBpLm1ldGhvZHMpCi0gIHJldHVybiAmbWV0aG9kc187Ci19Ci1pbmxp
bmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1ldGhvZCA+JgotQXBpOjptZXRob2RzKCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuQXBpLm1ldGhvZHMp
Ci0gIHJldHVybiBtZXRob2RzXzsKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5P
cHRpb24gb3B0aW9ucyA9IDM7Ci1pbmxpbmUgaW50IEFwaTo6b3B0aW9uc19zaXplKCkgY29uc3Qg
ewotICByZXR1cm4gb3B0aW9uc18uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgQXBpOjpjbGVhcl9v
cHRpb25zKCkgewotICBvcHRpb25zXy5DbGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6T3B0aW9uJiBBcGk6Om9wdGlvbnMoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkFwaS5v
cHRpb25zKQotICByZXR1cm4gb3B0aW9uc18uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok9wdGlvbiogQXBpOjptdXRhYmxlX29wdGlvbnMoaW50IGluZGV4KSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1
Zi5BcGkub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLk11dGFibGUoaW5kZXgpOwotfQotaW5s
aW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uKiBBcGk6OmFkZF9vcHRpb25zKCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5BcGku
b3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLkFkZCgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24gPioK
LUFwaTo6bXV0YWJsZV9vcHRpb25zKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5BcGkub3B0aW9ucykKLSAgcmV0dXJu
ICZvcHRpb25zXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4mCi1BcGk6Om9wdGlvbnMoKSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5w
cm90b2J1Zi5BcGkub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfOwotfQotCi0vLyBvcHRpb25h
bCBzdHJpbmcgdmVyc2lvbiA9IDQ7Ci1pbmxpbmUgdm9pZCBBcGk6OmNsZWFyX3ZlcnNpb24oKSB7
Ci0gIHZlcnNpb25fLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSBjb25zdCA6
OnN0ZDo6c3RyaW5nJiBBcGk6OnZlcnNpb24oKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkFwaS52ZXJzaW9uKQotICByZXR1
cm4gdmVyc2lvbl8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgQXBpOjpzZXRfdmVy
c2lvbihjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAKLSAgdmVyc2lvbl8uU2V0Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dDpnb29nbGUucHJvdG9idWYuQXBpLnZlcnNpb24pCi19Ci1pbmxpbmUgdm9pZCBBcGk6OnNldF92
ZXJzaW9uKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIAotICB2ZXJzaW9uXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkFwaS52ZXJzaW9uKQotfQotaW5saW5lIHZv
aWQgQXBpOjpzZXRfdmVyc2lvbihjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAg
Ci0gIHZlcnNpb25fLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5BcGkudmVyc2lv
bikKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBBcGk6Om11dGFibGVfdmVyc2lvbigpIHsKLSAg
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90
b2J1Zi5BcGkudmVyc2lvbikKLSAgcmV0dXJuIHZlcnNpb25fLk11dGFibGVOb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogQXBpOjpyZWxlYXNlX3ZlcnNpb24oKSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5B
cGkudmVyc2lvbikKLSAgCi0gIHJldHVybiB2ZXJzaW9uXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
fQotaW5saW5lIHZvaWQgQXBpOjpzZXRfYWxsb2NhdGVkX3ZlcnNpb24oOjpzdGQ6OnN0cmluZyog
dmVyc2lvbikgewotICBpZiAodmVyc2lvbiAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0g
ICAgCi0gIH0KLSAgdmVyc2lvbl8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZlcnNpb24pOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUu
cHJvdG9idWYuQXBpLnZlcnNpb24pCi19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYu
U291cmNlQ29udGV4dCBzb3VyY2VfY29udGV4dCA9IDU7Ci1pbmxpbmUgYm9vbCBBcGk6Omhhc19z
b3VyY2VfY29udGV4dCgpIGNvbnN0IHsKLSAgcmV0dXJuICFfaXNfZGVmYXVsdF9pbnN0YW5jZV8g
JiYgc291cmNlX2NvbnRleHRfICE9IE5VTEw7Ci19Ci1pbmxpbmUgdm9pZCBBcGk6OmNsZWFyX3Nv
dXJjZV9jb250ZXh0KCkgewotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBOVUxMICYmIHNv
dXJjZV9jb250ZXh0XyAhPSBOVUxMKSBkZWxldGUgc291cmNlX2NvbnRleHRfOwotICBzb3VyY2Vf
Y29udGV4dF8gPSBOVUxMOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291
cmNlQ29udGV4dCYgQXBpOjpzb3VyY2VfY29udGV4dCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuQXBpLnNvdXJjZV9jb250
ZXh0KQotICByZXR1cm4gc291cmNlX2NvbnRleHRfICE9IE5VTEwgPyAqc291cmNlX2NvbnRleHRf
IDogKmRlZmF1bHRfaW5zdGFuY2VfLT5zb3VyY2VfY29udGV4dF87Ci19Ci1pbmxpbmUgOjpnb29n
bGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiBBcGk6Om11dGFibGVfc291cmNlX2NvbnRleHQo
KSB7Ci0gIAotICBpZiAoc291cmNlX2NvbnRleHRfID09IE5VTEwpIHsKLSAgICBzb3VyY2VfY29u
dGV4dF8gPSBuZXcgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0OwotICB9Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5B
cGkuc291cmNlX2NvbnRleHQpCi0gIHJldHVybiBzb3VyY2VfY29udGV4dF87Ci19Ci1pbmxpbmUg
Ojpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiBBcGk6OnJlbGVhc2Vfc291cmNlX2Nv
bnRleHQoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdv
b2dsZS5wcm90b2J1Zi5BcGkuc291cmNlX2NvbnRleHQpCi0gIAotICA6Omdvb2dsZTo6cHJvdG9i
dWY6OlNvdXJjZUNvbnRleHQqIHRlbXAgPSBzb3VyY2VfY29udGV4dF87Ci0gIHNvdXJjZV9jb250
ZXh0XyA9IE5VTEw7Ci0gIHJldHVybiB0ZW1wOwotfQotaW5saW5lIHZvaWQgQXBpOjpzZXRfYWxs
b2NhdGVkX3NvdXJjZV9jb250ZXh0KDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCog
c291cmNlX2NvbnRleHQpIHsKLSAgZGVsZXRlIHNvdXJjZV9jb250ZXh0XzsKLSAgc291cmNlX2Nv
bnRleHRfID0gc291cmNlX2NvbnRleHQ7Ci0gIGlmIChzb3VyY2VfY29udGV4dCkgewotICAgIAot
ICB9IGVsc2UgewotICAgIAotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5BcGkuc291cmNlX2NvbnRleHQpCi19Ci0K
LS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuTWl4aW4gbWl4aW5zID0gNjsKLWlubGluZSBp
bnQgQXBpOjptaXhpbnNfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG1peGluc18uc2l6ZSgpOwot
fQotaW5saW5lIHZvaWQgQXBpOjpjbGVhcl9taXhpbnMoKSB7Ci0gIG1peGluc18uQ2xlYXIoKTsK
LX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1peGluJiBBcGk6Om1peGlucyhp
bnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dl
dDpnb29nbGUucHJvdG9idWYuQXBpLm1peGlucykKLSAgcmV0dXJuIG1peGluc18uR2V0KGluZGV4
KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6Ok1peGluKiBBcGk6Om11dGFibGVfbWl4
aW5zKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZTpnb29nbGUucHJvdG9idWYuQXBpLm1peGlucykKLSAgcmV0dXJuIG1peGluc18uTXV0YWJs
ZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpNaXhpbiogQXBpOjphZGRf
bWl4aW5zKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2ds
ZS5wcm90b2J1Zi5BcGkubWl4aW5zKQotICByZXR1cm4gbWl4aW5zXy5BZGQoKTsKLX0KLWlubGlu
ZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWl4aW4gPioKLUFwaTo6bXV0YWJsZV9taXhpbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkFwaS5taXhpbnMp
Ci0gIHJldHVybiAmbWl4aW5zXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWl4aW4gPiYKLUFwaTo6bWl4
aW5zKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpn
b29nbGUucHJvdG9idWYuQXBpLm1peGlucykKLSAgcmV0dXJuIG1peGluc187Ci19Ci0KLS8vIG9w
dGlvbmFsIC5nb29nbGUucHJvdG9idWYuU3ludGF4IHN5bnRheCA9IDc7Ci1pbmxpbmUgdm9pZCBB
cGk6OmNsZWFyX3N5bnRheCgpIHsKLSAgc3ludGF4XyA9IDA7Ci19Ci1pbmxpbmUgOjpnb29nbGU6
OnByb3RvYnVmOjpTeW50YXggQXBpOjpzeW50YXgoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkFwaS5zeW50YXgpCi0gIHJl
dHVybiBzdGF0aWNfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpTeW50YXggPihzeW50YXhfKTsK
LX0KLWlubGluZSB2b2lkIEFwaTo6c2V0X3N5bnRheCg6Omdvb2dsZTo6cHJvdG9idWY6OlN5bnRh
eCB2YWx1ZSkgewotICAKLSAgc3ludGF4XyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5BcGkuc3ludGF4KQotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLS8vIE1ldGhvZAotCi0vLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci1p
bmxpbmUgdm9pZCBNZXRob2Q6OmNsZWFyX25hbWUoKSB7Ci0gIG5hbWVfLkNsZWFyVG9FbXB0eU5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLX0KLWlubGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBNZXRob2Q6Om5hbWUo
KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xl
LnByb3RvYnVmLk1ldGhvZC5uYW1lKQotICByZXR1cm4gbmFtZV8uR2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
fQotaW5saW5lIHZvaWQgTWV0aG9kOjpzZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1
ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWV0aG9kLm5hbWUpCi19
Ci1pbmxpbmUgdm9pZCBNZXRob2Q6OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIAot
ICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLk1ldGhv
ZC5uYW1lKQotfQotaW5saW5lIHZvaWQgTWV0aG9kOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1
ZSwgc2l6ZV90IHNpemUpIHsKLSAgCi0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpz
dGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5w
cm90b2J1Zi5NZXRob2QubmFtZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBNZXRob2Q6Om11
dGFibGVfbmFtZSgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9t
dXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2QubmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFi
bGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogTWV0aG9kOjpyZWxlYXNl
X25hbWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdv
b2dsZS5wcm90b2J1Zi5NZXRob2QubmFtZSkKLSAgCi0gIHJldHVybiBuYW1lXy5SZWxlYXNlTm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgTWV0aG9kOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpz
dGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxz
ZSB7Ci0gICAgCi0gIH0KLSAgbmFtZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIG5hbWUpOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUu
cHJvdG9idWYuTWV0aG9kLm5hbWUpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyByZXF1ZXN0X3R5
cGVfdXJsID0gMjsKLWlubGluZSB2b2lkIE1ldGhvZDo6Y2xlYXJfcmVxdWVzdF90eXBlX3VybCgp
IHsKLSAgcmVxdWVzdF90eXBlX3VybF8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5s
aW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIE1ldGhvZDo6cmVxdWVzdF90eXBlX3VybCgpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9i
dWYuTWV0aG9kLnJlcXVlc3RfdHlwZV91cmwpCi0gIHJldHVybiByZXF1ZXN0X3R5cGVfdXJsXy5H
ZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBNZXRob2Q6OnNldF9yZXF1ZXN0X3R5cGVf
dXJsKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAotICByZXF1ZXN0X3R5cGVfdXJs
Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2QucmVxdWVzdF90eXBlX3VybCkKLX0KLWlu
bGluZSB2b2lkIE1ldGhvZDo6c2V0X3JlcXVlc3RfdHlwZV91cmwoY29uc3QgY2hhciogdmFsdWUp
IHsKLSAgCi0gIHJlcXVlc3RfdHlwZV91cmxfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5n
KHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpn
b29nbGUucHJvdG9idWYuTWV0aG9kLnJlcXVlc3RfdHlwZV91cmwpCi19Ci1pbmxpbmUgdm9pZCBN
ZXRob2Q6OnNldF9yZXF1ZXN0X3R5cGVfdXJsKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6
ZSkgewotICAKLSAgcmVxdWVzdF90eXBlX3VybF8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0
ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnBy
b3RvYnVmLk1ldGhvZC5yZXF1ZXN0X3R5cGVfdXJsKQotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcq
IE1ldGhvZDo6bXV0YWJsZV9yZXF1ZXN0X3R5cGVfdXJsKCkgewotICAKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXF1
ZXN0X3R5cGVfdXJsKQotICByZXR1cm4gcmVxdWVzdF90eXBlX3VybF8uTXV0YWJsZU5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBNZXRob2Q6OnJlbGVhc2VfcmVxdWVzdF90
eXBlX3VybCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6
Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXF1ZXN0X3R5cGVfdXJsKQotICAKLSAgcmV0dXJuIHJl
cXVlc3RfdHlwZV91cmxfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBNZXRo
b2Q6OnNldF9hbGxvY2F0ZWRfcmVxdWVzdF90eXBlX3VybCg6OnN0ZDo6c3RyaW5nKiByZXF1ZXN0
X3R5cGVfdXJsKSB7Ci0gIGlmIChyZXF1ZXN0X3R5cGVfdXJsICE9IE5VTEwpIHsKLSAgICAKLSAg
fSBlbHNlIHsKLSAgICAKLSAgfQotICByZXF1ZXN0X3R5cGVfdXJsXy5TZXRBbGxvY2F0ZWROb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSwgcmVxdWVzdF90eXBlX3VybCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5NZXRob2QucmVxdWVzdF90eXBl
X3VybCkKLX0KLQotLy8gb3B0aW9uYWwgYm9vbCByZXF1ZXN0X3N0cmVhbWluZyA9IDM7Ci1pbmxp
bmUgdm9pZCBNZXRob2Q6OmNsZWFyX3JlcXVlc3Rfc3RyZWFtaW5nKCkgewotICByZXF1ZXN0X3N0
cmVhbWluZ18gPSBmYWxzZTsKLX0KLWlubGluZSBib29sIE1ldGhvZDo6cmVxdWVzdF9zdHJlYW1p
bmcoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29v
Z2xlLnByb3RvYnVmLk1ldGhvZC5yZXF1ZXN0X3N0cmVhbWluZykKLSAgcmV0dXJuIHJlcXVlc3Rf
c3RyZWFtaW5nXzsKLX0KLWlubGluZSB2b2lkIE1ldGhvZDo6c2V0X3JlcXVlc3Rfc3RyZWFtaW5n
KGJvb2wgdmFsdWUpIHsKLSAgCi0gIHJlcXVlc3Rfc3RyZWFtaW5nXyA9IHZhbHVlOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2Qu
cmVxdWVzdF9zdHJlYW1pbmcpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyByZXNwb25zZV90eXBl
X3VybCA9IDQ7Ci1pbmxpbmUgdm9pZCBNZXRob2Q6OmNsZWFyX3Jlc3BvbnNlX3R5cGVfdXJsKCkg
ewotICByZXNwb25zZV90eXBlX3VybF8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5s
aW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIE1ldGhvZDo6cmVzcG9uc2VfdHlwZV91cmwoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLk1ldGhvZC5yZXNwb25zZV90eXBlX3VybCkKLSAgcmV0dXJuIHJlc3BvbnNlX3R5cGVfdXJs
Xy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBNZXRob2Q6OnNldF9yZXNwb25zZV90
eXBlX3VybChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAKLSAgcmVzcG9uc2VfdHlw
ZV91cmxfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXNwb25zZV90eXBlX3VybCkK
LX0KLWlubGluZSB2b2lkIE1ldGhvZDo6c2V0X3Jlc3BvbnNlX3R5cGVfdXJsKGNvbnN0IGNoYXIq
IHZhbHVlKSB7Ci0gIAotICByZXNwb25zZV90eXBlX3VybF8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3Rk
OjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5NZXRob2QucmVzcG9uc2VfdHlwZV91cmwpCi19Ci1pbmxp
bmUgdm9pZCBNZXRob2Q6OnNldF9yZXNwb25zZV90eXBlX3VybChjb25zdCBjaGFyKiB2YWx1ZSwg
c2l6ZV90IHNpemUpIHsKLSAgCi0gIHJlc3BvbnNlX3R5cGVfdXJsXy5TZXROb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwK
LSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUp
LCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRl
cjpnb29nbGUucHJvdG9idWYuTWV0aG9kLnJlc3BvbnNlX3R5cGVfdXJsKQotfQotaW5saW5lIDo6
c3RkOjpzdHJpbmcqIE1ldGhvZDo6bXV0YWJsZV9yZXNwb25zZV90eXBlX3VybCgpIHsKLSAgCi0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1
Zi5NZXRob2QucmVzcG9uc2VfdHlwZV91cmwpCi0gIHJldHVybiByZXNwb25zZV90eXBlX3VybF8u
TXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBNZXRob2Q6OnJl
bGVhc2VfcmVzcG9uc2VfdHlwZV91cmwoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2QucmVzcG9uc2VfdHlwZV91cmwp
Ci0gIAotICByZXR1cm4gcmVzcG9uc2VfdHlwZV91cmxfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19
Ci1pbmxpbmUgdm9pZCBNZXRob2Q6OnNldF9hbGxvY2F0ZWRfcmVzcG9uc2VfdHlwZV91cmwoOjpz
dGQ6OnN0cmluZyogcmVzcG9uc2VfdHlwZV91cmwpIHsKLSAgaWYgKHJlc3BvbnNlX3R5cGVfdXJs
ICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAKLSAgfQotICByZXNwb25zZV90eXBl
X3VybF8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHJlc3BvbnNlX3R5cGVfdXJsKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3Rv
YnVmLk1ldGhvZC5yZXNwb25zZV90eXBlX3VybCkKLX0KLQotLy8gb3B0aW9uYWwgYm9vbCByZXNw
b25zZV9zdHJlYW1pbmcgPSA1OwotaW5saW5lIHZvaWQgTWV0aG9kOjpjbGVhcl9yZXNwb25zZV9z
dHJlYW1pbmcoKSB7Ci0gIHJlc3BvbnNlX3N0cmVhbWluZ18gPSBmYWxzZTsKLX0KLWlubGluZSBi
b29sIE1ldGhvZDo6cmVzcG9uc2Vfc3RyZWFtaW5nKCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2QucmVzcG9uc2Vf
c3RyZWFtaW5nKQotICByZXR1cm4gcmVzcG9uc2Vfc3RyZWFtaW5nXzsKLX0KLWlubGluZSB2b2lk
IE1ldGhvZDo6c2V0X3Jlc3BvbnNlX3N0cmVhbWluZyhib29sIHZhbHVlKSB7Ci0gIAotICByZXNw
b25zZV9zdHJlYW1pbmdfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZC5yZXNwb25zZV9zdHJlYW1pbmcpCi19Ci0K
LS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSA2OwotaW5saW5l
IGludCBNZXRob2Q6Om9wdGlvbnNfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG9wdGlvbnNfLnNp
emUoKTsKLX0KLWlubGluZSB2b2lkIE1ldGhvZDo6Y2xlYXJfb3B0aW9ucygpIHsKLSAgb3B0aW9u
c18uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiYg
TWV0aG9kOjpvcHRpb25zKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2Qub3B0aW9ucykKLSAgcmV0
dXJuIG9wdGlvbnNfLkdldChpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpP
cHRpb24qIE1ldGhvZDo6bXV0YWJsZV9vcHRpb25zKGludCBpbmRleCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuTWV0aG9kLm9w
dGlvbnMpCi0gIHJldHVybiBvcHRpb25zXy5NdXRhYmxlKGluZGV4KTsKLX0KLWlubGluZSA6Omdv
b2dsZTo6cHJvdG9idWY6Ok9wdGlvbiogTWV0aG9kOjphZGRfb3B0aW9ucygpIHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuTWV0aG9kLm9w
dGlvbnMpCi0gIHJldHVybiBvcHRpb25zXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4qCi1N
ZXRob2Q6Om11dGFibGVfb3B0aW9ucygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuTWV0aG9kLm9wdGlvbnMpCi0gIHJl
dHVybiAmb3B0aW9uc187Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBl
YXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiA+JgotTWV0aG9kOjpvcHRp
b25zKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpn
b29nbGUucHJvdG9idWYuTWV0aG9kLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXzsKLX0KLQot
Ly8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5TeW50YXggc3ludGF4ID0gNzsKLWlubGluZSB2
b2lkIE1ldGhvZDo6Y2xlYXJfc3ludGF4KCkgewotICBzeW50YXhfID0gMDsKLX0KLWlubGluZSA6
Omdvb2dsZTo6cHJvdG9idWY6OlN5bnRheCBNZXRob2Q6OnN5bnRheCgpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuTWV0aG9k
LnN5bnRheCkKLSAgcmV0dXJuIHN0YXRpY19jYXN0PCA6Omdvb2dsZTo6cHJvdG9idWY6OlN5bnRh
eCA+KHN5bnRheF8pOwotfQotaW5saW5lIHZvaWQgTWV0aG9kOjpzZXRfc3ludGF4KDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6U3ludGF4IHZhbHVlKSB7Ci0gIAotICBzeW50YXhfID0gdmFsdWU7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhv
ZC5zeW50YXgpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTWl4aW4KLQotLy8gb3B0aW9uYWwg
c3RyaW5nIG5hbWUgPSAxOwotaW5saW5lIHZvaWQgTWl4aW46OmNsZWFyX25hbWUoKSB7Ci0gIG5h
bWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSBjb25zdCA6OnN0ZDo6c3Ry
aW5nJiBNaXhpbjo6bmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuTWl4aW4ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdl
dE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIE1peGluOjpzZXRfbmFtZShjb25zdCA6OnN0
ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYu
TWl4aW4ubmFtZSkKLX0KLWlubGluZSB2b2lkIE1peGluOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2
YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUp
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5w
cm90b2J1Zi5NaXhpbi5uYW1lKQotfQotaW5saW5lIHZvaWQgTWl4aW46OnNldF9uYW1lKGNvbnN0
IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCks
Ci0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVl
KSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50
ZXI6Z29vZ2xlLnByb3RvYnVmLk1peGluLm5hbWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyog
TWl4aW46Om11dGFibGVfbmFtZSgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5NaXhpbi5uYW1lKQotICByZXR1cm4gbmFt
ZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBNaXhpbjo6
cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVs
ZWFzZTpnb29nbGUucHJvdG9idWYuTWl4aW4ubmFtZSkKLSAgCi0gIHJldHVybiBuYW1lXy5SZWxl
YXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgTWl4aW46OnNldF9hbGxvY2F0ZWRfbmFt
ZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICAKLSAg
fSBlbHNlIHsKLSAgICAKLSAgfQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFt
ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdv
b2dsZS5wcm90b2J1Zi5NaXhpbi5uYW1lKQotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgcm9vdCA9
IDI7Ci1pbmxpbmUgdm9pZCBNaXhpbjo6Y2xlYXJfcm9vdCgpIHsKLSAgcm9vdF8uQ2xlYXJUb0Vt
cHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIE1peGluOjpy
b290KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5NaXhpbi5yb290KQotICByZXR1cm4gcm9vdF8uR2V0Tm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotfQotaW5saW5lIHZvaWQgTWl4aW46OnNldF9yb290KGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZh
bHVlKSB7Ci0gIAotICByb290Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5NaXhpbi5yb290KQot
fQotaW5saW5lIHZvaWQgTWl4aW46OnNldF9yb290KGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIAot
ICByb290Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLk1peGlu
LnJvb3QpCi19Ci1pbmxpbmUgdm9pZCBNaXhpbjo6c2V0X3Jvb3QoY29uc3QgY2hhciogdmFsdWUs
IHNpemVfdCBzaXplKSB7Ci0gIAotICByb290Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3Rk
OjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJv
dG9idWYuTWl4aW4ucm9vdCkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBNaXhpbjo6bXV0YWJs
ZV9yb290KCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFi
bGU6Z29vZ2xlLnByb3RvYnVmLk1peGluLnJvb3QpCi0gIHJldHVybiByb290Xy5NdXRhYmxlTm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIE1peGluOjpyZWxlYXNlX3Jvb3Qo
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5w
cm90b2J1Zi5NaXhpbi5yb290KQotICAKLSAgcmV0dXJuIHJvb3RfLlJlbGVhc2VOb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSk7Ci19Ci1pbmxpbmUgdm9pZCBNaXhpbjo6c2V0X2FsbG9jYXRlZF9yb290KDo6c3RkOjpzdHJp
bmcqIHJvb3QpIHsKLSAgaWYgKHJvb3QgIT0gTlVMTCkgewotICAgIAotICB9IGVsc2UgewotICAg
IAotICB9Ci0gIHJvb3RfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCByb290KTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVm
Lk1peGluLnJvb3QpCi19Ci0KLSNlbmRpZiAgLy8gIVBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVB
REVSUwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVm
Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChn
bG9iYWxfc2NvcGUpCi0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfZ29vZ2xlXzJmcHJvdG9idWZfMmZh
cGlfMmVwcm90b19fSU5DTFVERUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcGku
cHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYXBpLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkYmU4N2I4ZjU0YWJjOWE5MjcyNGEzZDY0YzFjYzM3N2U3MzFhNGQ0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9hcGkucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9ICJwcm90bzMiOwotCi1wYWNrYWdl
IGdvb2dsZS5wcm90b2J1ZjsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRl
eHQucHJvdG8iOwotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90byI7Ci0KLW9wdGlv
biBjc2hhcnBfbmFtZXNwYWNlID0gIkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcyI7Ci1v
cHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUucHJvdG9idWYiOwotb3B0aW9uIGphdmFf
b3V0ZXJfY2xhc3NuYW1lID0gIkFwaVByb3RvIjsKLW9wdGlvbiBqYXZhX211bHRpcGxlX2ZpbGVz
ID0gdHJ1ZTsKLW9wdGlvbiBqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCA9IHRydWU7Ci1v
cHRpb24gb2JqY19jbGFzc19wcmVmaXggPSAiR1BCIjsKLQotLy8gQXBpIGlzIGEgbGlnaHQtd2Vp
Z2h0IGRlc2NyaXB0b3IgZm9yIGEgcHJvdG9jb2wgYnVmZmVyIHNlcnZpY2UuCi1tZXNzYWdlIEFw
aSB7Ci0KLSAgLy8gVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoaXMgYXBpLCBpbmNsdWRp
bmcgcGFja2FnZSBuYW1lCi0gIC8vIGZvbGxvd2VkIGJ5IHRoZSBhcGkncyBzaW1wbGUgbmFtZS4K
LSAgc3RyaW5nIG5hbWUgPSAxOwotCi0gIC8vIFRoZSBtZXRob2RzIG9mIHRoaXMgYXBpLCBpbiB1
bnNwZWNpZmllZCBvcmRlci4KLSAgcmVwZWF0ZWQgTWV0aG9kIG1ldGhvZHMgPSAyOwotCi0gIC8v
IEFueSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgQVBJLgotICByZXBlYXRlZCBPcHRpb24gb3B0
aW9ucyA9IDM7Ci0KLSAgLy8gQSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBhcGkuIElmIHNwZWNp
ZmllZCwgbXVzdCBoYXZlIHRoZSBmb3JtCi0gIC8vIGBtYWpvci12ZXJzaW9uLm1pbm9yLXZlcnNp
b25gLCBhcyBpbiBgMS4xMGAuIElmIHRoZSBtaW5vciB2ZXJzaW9uCi0gIC8vIGlzIG9taXR0ZWQs
IGl0IGRlZmF1bHRzIHRvIHplcm8uIElmIHRoZSBlbnRpcmUgdmVyc2lvbiBmaWVsZCBpcwotICAv
LyBlbXB0eSwgdGhlIG1ham9yIHZlcnNpb24gaXMgZGVyaXZlZCBmcm9tIHRoZSBwYWNrYWdlIG5h
bWUsIGFzCi0gIC8vIG91dGxpbmVkIGJlbG93LiBJZiB0aGUgZmllbGQgaXMgbm90IGVtcHR5LCB0
aGUgdmVyc2lvbiBpbiB0aGUKLSAgLy8gcGFja2FnZSBuYW1lIHdpbGwgYmUgdmVyaWZpZWQgdG8g
YmUgY29uc2lzdGVudCB3aXRoIHdoYXQgaXMKLSAgLy8gcHJvdmlkZWQgaGVyZS4KLSAgLy8KLSAg
Ly8gVGhlIHZlcnNpb25pbmcgc2NoZW1hIHVzZXMgW3NlbWFudGljCi0gIC8vIHZlcnNpb25pbmdd
KGh0dHA6Ly9zZW12ZXIub3JnKSB3aGVyZSB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIKLSAgLy8g
aW5kaWNhdGVzIGEgYnJlYWtpbmcgY2hhbmdlIGFuZCB0aGUgbWlub3IgdmVyc2lvbiBhbiBhZGRp
dGl2ZSwKLSAgLy8gbm9uLWJyZWFraW5nIGNoYW5nZS4gQm90aCB2ZXJzaW9uIG51bWJlcnMgYXJl
IHNpZ25hbHMgdG8gdXNlcnMKLSAgLy8gd2hhdCB0byBleHBlY3QgZnJvbSBkaWZmZXJlbnQgdmVy
c2lvbnMsIGFuZCBzaG91bGQgYmUgY2FyZWZ1bGx5Ci0gIC8vIGNob3NlbiBiYXNlZCBvbiB0aGUg
cHJvZHVjdCBwbGFuLgotICAvLwotICAvLyBUaGUgbWFqb3IgdmVyc2lvbiBpcyBhbHNvIHJlZmxl
Y3RlZCBpbiB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZQotICAvLyBBUEksIHdoaWNoIG11c3QgZW5k
IGluIGB2PG1ham9yLXZlcnNpb24+YCwgYXMgaW4KLSAgLy8gYGdvb2dsZS5mZWF0dXJlLnYxYC4g
Rm9yIG1ham9yIHZlcnNpb25zIDAgYW5kIDEsIHRoZSBzdWZmaXggY2FuCi0gIC8vIGJlIG9taXR0
ZWQuIFplcm8gbWFqb3IgdmVyc2lvbnMgbXVzdCBvbmx5IGJlIHVzZWQgZm9yCi0gIC8vIGV4cGVy
aW1lbnRhbCwgbm9uZS1HQSBhcGlzLgotICAvLwotICAvLwotICBzdHJpbmcgdmVyc2lvbiA9IDQ7
Ci0KLSAgLy8gU291cmNlIGNvbnRleHQgZm9yIHRoZSBwcm90b2NvbCBidWZmZXIgc2VydmljZSBy
ZXByZXNlbnRlZCBieSB0aGlzCi0gIC8vIG1lc3NhZ2UuCi0gIFNvdXJjZUNvbnRleHQgc291cmNl
X2NvbnRleHQgPSA1OwotCi0gIC8vIEluY2x1ZGVkIEFQSXMuIFNlZSBbTWl4aW5dW10uCi0gIHJl
cGVhdGVkIE1peGluIG1peGlucyA9IDY7Ci0KLSAgLy8gVGhlIHNvdXJjZSBzeW50YXggb2YgdGhl
IHNlcnZpY2UuCi0gIFN5bnRheCBzeW50YXggPSA3OwotfQotCi0vLyBNZXRob2QgcmVwcmVzZW50
cyBhIG1ldGhvZCBvZiBhbiBhcGkuCi1tZXNzYWdlIE1ldGhvZCB7Ci0KLSAgLy8gVGhlIHNpbXBs
ZSBuYW1lIG9mIHRoaXMgbWV0aG9kLgotICBzdHJpbmcgbmFtZSA9IDE7Ci0KLSAgLy8gQSBVUkwg
b2YgdGhlIGlucHV0IG1lc3NhZ2UgdHlwZS4KLSAgc3RyaW5nIHJlcXVlc3RfdHlwZV91cmwgPSAy
OwotCi0gIC8vIElmIHRydWUsIHRoZSByZXF1ZXN0IGlzIHN0cmVhbWVkLgotICBib29sIHJlcXVl
c3Rfc3RyZWFtaW5nID0gMzsKLQotICAvLyBUaGUgVVJMIG9mIHRoZSBvdXRwdXQgbWVzc2FnZSB0
eXBlLgotICBzdHJpbmcgcmVzcG9uc2VfdHlwZV91cmwgPSA0OwotCi0gIC8vIElmIHRydWUsIHRo
ZSByZXNwb25zZSBpcyBzdHJlYW1lZC4KLSAgYm9vbCByZXNwb25zZV9zdHJlYW1pbmcgPSA1Owot
Ci0gIC8vIEFueSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgbWV0aG9kLgotICByZXBlYXRlZCBP
cHRpb24gb3B0aW9ucyA9IDY7Ci0KLSAgLy8gVGhlIHNvdXJjZSBzeW50YXggb2YgdGhpcyBtZXRo
b2QuCi0gIFN5bnRheCBzeW50YXggPSA3OwotfQotCi0vLyBEZWNsYXJlcyBhbiBBUEkgdG8gYmUg
aW5jbHVkZWQgaW4gdGhpcyBBUEkuIFRoZSBpbmNsdWRpbmcgQVBJIG11c3QKLS8vIHJlZGVjbGFy
ZSBhbGwgdGhlIG1ldGhvZHMgZnJvbSB0aGUgaW5jbHVkZWQgQVBJLCBidXQgZG9jdW1lbnRhdGlv
bgotLy8gYW5kIG9wdGlvbnMgYXJlIGluaGVyaXRlZCBhcyBmb2xsb3dzOgotLy8KLS8vIC0gSWYg
YWZ0ZXIgY29tbWVudCBhbmQgd2hpdGVzcGFjZSBzdHJpcHBpbmcsIHRoZSBkb2N1bWVudGF0aW9u
Ci0vLyAgIHN0cmluZyBvZiB0aGUgcmVkZWNsYXJlZCBtZXRob2QgaXMgZW1wdHksIGl0IHdpbGwg
YmUgaW5oZXJpdGVkCi0vLyAgIGZyb20gdGhlIG9yaWdpbmFsIG1ldGhvZC4KLS8vCi0vLyAtIEVh
Y2ggYW5ub3RhdGlvbiBiZWxvbmdpbmcgdG8gdGhlIHNlcnZpY2UgY29uZmlnIChodHRwLAotLy8g
ICB2aXNpYmlsaXR5KSB3aGljaCBpcyBub3Qgc2V0IGluIHRoZSByZWRlY2xhcmVkIG1ldGhvZCB3
aWxsIGJlCi0vLyAgIGluaGVyaXRlZC4KLS8vCi0vLyAtIElmIGFuIGh0dHAgYW5ub3RhdGlvbiBp
cyBpbmhlcml0ZWQsIHRoZSBwYXRoIHBhdHRlcm4gd2lsbCBiZQotLy8gICBtb2RpZmllZCBhcyBm
b2xsb3dzLiBBbnkgdmVyc2lvbiBwcmVmaXggd2lsbCBiZSByZXBsYWNlZCBieSB0aGUKLS8vICAg
dmVyc2lvbiBvZiB0aGUgaW5jbHVkaW5nIEFQSSBwbHVzIHRoZSBbcm9vdF1bXSBwYXRoIGlmIHNw
ZWNpZmllZC4KLS8vCi0vLyBFeGFtcGxlIG9mIGEgc2ltcGxlIG1peGluOgotLy8KLS8vICAgICBw
YWNrYWdlIGdvb2dsZS5hY2wudjE7Ci0vLyAgICAgc2VydmljZSBBY2Nlc3NDb250cm9sIHsKLS8v
ICAgICAgIC8vIEdldCB0aGUgdW5kZXJseWluZyBBQ0wgb2JqZWN0LgotLy8gICAgICAgcnBjIEdl
dEFjbChHZXRBY2xSZXF1ZXN0KSByZXR1cm5zIChBY2wpIHsKLS8vICAgICAgICAgb3B0aW9uIChn
b29nbGUuYXBpLmh0dHApLmdldCA9ICIvdjEve3Jlc291cmNlPSoqfTpnZXRBY2wiOwotLy8gICAg
ICAgfQotLy8gICAgIH0KLS8vCi0vLyAgICAgcGFja2FnZSBnb29nbGUuc3RvcmFnZS52MjsKLS8v
ICAgICBzZXJ2aWNlIFN0b3JhZ2UgewotLy8gICAgICAgcnBjIEdldEFjbChHZXRBY2xSZXF1ZXN0
KSByZXR1cm5zIChBY2wpOwotLy8KLS8vICAgICAgIC8vIEdldCBhIGRhdGEgcmVjb3JkLgotLy8g
ICAgICAgcnBjIEdldERhdGEoR2V0RGF0YVJlcXVlc3QpIHJldHVybnMgKERhdGEpIHsKLS8vICAg
ICAgICAgb3B0aW9uIChnb29nbGUuYXBpLmh0dHApLmdldCA9ICIvdjIve3Jlc291cmNlPSoqfSI7
Ci0vLyAgICAgICB9Ci0vLyAgICAgfQotLy8KLS8vIEV4YW1wbGUgb2YgYSBtaXhpbiBjb25maWd1
cmF0aW9uOgotLy8KLS8vICAgICBhcGlzOgotLy8gICAgIC0gbmFtZTogZ29vZ2xlLnN0b3JhZ2Uu
djIuU3RvcmFnZQotLy8gICAgICAgbWl4aW5zOgotLy8gICAgICAgLSBuYW1lOiBnb29nbGUuYWNs
LnYxLkFjY2Vzc0NvbnRyb2wKLS8vCi0vLyBUaGUgbWl4aW4gY29uc3RydWN0IGltcGxpZXMgdGhh
dCBhbGwgbWV0aG9kcyBpbiBgQWNjZXNzQ29udHJvbGAgYXJlCi0vLyBhbHNvIGRlY2xhcmVkIHdp
dGggc2FtZSBuYW1lIGFuZCByZXF1ZXN0L3Jlc3BvbnNlIHR5cGVzIGluCi0vLyBgU3RvcmFnZWAu
IEEgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3Igb3IgYW5ub3RhdGlvbiBwcm9jZXNzb3Igd2lsbAot
Ly8gc2VlIHRoZSBlZmZlY3RpdmUgYFN0b3JhZ2UuR2V0QWNsYCBtZXRob2QgYWZ0ZXIgaW5oZXJ0
aW5nCi0vLyBkb2N1bWVudGF0aW9uIGFuZCBhbm5vdGF0aW9ucyBhcyBmb2xsb3dzOgotLy8KLS8v
ICAgICBzZXJ2aWNlIFN0b3JhZ2UgewotLy8gICAgICAgLy8gR2V0IHRoZSB1bmRlcmx5aW5nIEFD
TCBvYmplY3QuCi0vLyAgICAgICBycGMgR2V0QWNsKEdldEFjbFJlcXVlc3QpIHJldHVybnMgKEFj
bCkgewotLy8gICAgICAgICBvcHRpb24gKGdvb2dsZS5hcGkuaHR0cCkuZ2V0ID0gIi92Mi97cmVz
b3VyY2U9Kip9OmdldEFjbCI7Ci0vLyAgICAgICB9Ci0vLyAgICAgICAuLi4KLS8vICAgICB9Ci0v
LwotLy8gTm90ZSBob3cgdGhlIHZlcnNpb24gaW4gdGhlIHBhdGggcGF0dGVybiBjaGFuZ2VkIGZy
b20gYHYxYCB0byBgdjJgLgotLy8KLS8vIElmIHRoZSBgcm9vdGAgZmllbGQgaW4gdGhlIG1peGlu
IGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEKLS8vIHJlbGF0aXZlIHBhdGggdW5kZXIgd2hp
Y2ggaW5oZXJpdGVkIEhUVFAgcGF0aHMgYXJlIHBsYWNlZC4gRXhhbXBsZToKLS8vCi0vLyAgICAg
YXBpczoKLS8vICAgICAtIG5hbWU6IGdvb2dsZS5zdG9yYWdlLnYyLlN0b3JhZ2UKLS8vICAgICAg
IG1peGluczoKLS8vICAgICAgIC0gbmFtZTogZ29vZ2xlLmFjbC52MS5BY2Nlc3NDb250cm9sCi0v
LyAgICAgICAgIHJvb3Q6IGFjbHMKLS8vCi0vLyBUaGlzIGltcGxpZXMgdGhlIGZvbGxvd2luZyBp
bmhlcml0ZWQgSFRUUCBhbm5vdGF0aW9uOgotLy8KLS8vICAgICBzZXJ2aWNlIFN0b3JhZ2Ugewot
Ly8gICAgICAgLy8gR2V0IHRoZSB1bmRlcmx5aW5nIEFDTCBvYmplY3QuCi0vLyAgICAgICBycGMg
R2V0QWNsKEdldEFjbFJlcXVlc3QpIHJldHVybnMgKEFjbCkgewotLy8gICAgICAgICBvcHRpb24g
KGdvb2dsZS5hcGkuaHR0cCkuZ2V0ID0gIi92Mi9hY2xzL3tyZXNvdXJjZT0qKn06Z2V0QWNsIjsK
LS8vICAgICAgIH0KLS8vICAgICAgIC4uLgotLy8gICAgIH0KLW1lc3NhZ2UgTWl4aW4gewotICAv
LyBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIEFQSSB3aGljaCBpcyBpbmNsdWRlZC4K
LSAgc3RyaW5nIG5hbWUgPSAxOwotCi0gIC8vIElmIG5vbi1lbXB0eSBzcGVjaWZpZXMgYSBwYXRo
IHVuZGVyIHdoaWNoIGluaGVyaXRlZCBIVFRQIHBhdGhzCi0gIC8vIGFyZSByb290ZWQuCi0gIHN0
cmluZyByb290ID0gMjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYS5j
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggNjEzZTU4OTcxNDQxNTE5Njc1OTRhYmM4NGRhOTRiYzYxMGNiMGNlMi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
YXJlbmEuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMjEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYXJlbmEuaD4K
LQotCi0jaWZkZWYgQUREUkVTU19TQU5JVElaRVIKLSNpbmNsdWRlIDxzYW5pdGl6ZXIvYXNhbl9p
bnRlcmZhY2UuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci0KLQotZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlNlcXVlbmNlTnVtYmVyIEFy
ZW5hOjpsaWZlY3ljbGVfaWRfZ2VuZXJhdG9yXzsKLSNpZiBkZWZpbmVkKEdPT0dMRV9QUk9UT0JV
Rl9OT19USFJFQURMT0NBTCkKLUFyZW5hOjpUaHJlYWRDYWNoZSYgQXJlbmE6OnRocmVhZF9jYWNo
ZSgpIHsKLSAgc3RhdGljIGludGVybmFsOjpUaHJlYWRMb2NhbFN0b3JhZ2U8VGhyZWFkQ2FjaGU+
KiB0aHJlYWRfY2FjaGVfID0KLSAgICAgIG5ldyBpbnRlcm5hbDo6VGhyZWFkTG9jYWxTdG9yYWdl
PFRocmVhZENhY2hlPigpOwotICByZXR1cm4gKnRocmVhZF9jYWNoZV8tPkdldCgpOwotfQotI2Vs
aWYgZGVmaW5lZChQUk9UT0JVRl9VU0VfRExMUykKLUFyZW5hOjpUaHJlYWRDYWNoZSYgQXJlbmE6
OnRocmVhZF9jYWNoZSgpIHsKLSAgc3RhdGljIEdPT0dMRV9USFJFQURfTE9DQUwgVGhyZWFkQ2Fj
aGUgdGhyZWFkX2NhY2hlXyA9IHsgLTEsIE5VTEwgfTsKLSAgcmV0dXJuIHRocmVhZF9jYWNoZV87
Ci19Ci0jZWxzZQotR09PR0xFX1RIUkVBRF9MT0NBTCBBcmVuYTo6VGhyZWFkQ2FjaGUgQXJlbmE6
OnRocmVhZF9jYWNoZV8gPSB7IC0xLCBOVUxMIH07Ci0jZW5kaWYKLQotdm9pZCBBcmVuYTo6SW5p
dCgpIHsKLSAgbGlmZWN5Y2xlX2lkXyA9IGxpZmVjeWNsZV9pZF9nZW5lcmF0b3JfLkdldE5leHQo
KTsKLSAgYmxvY2tzXyA9IDA7Ci0gIGhpbnRfID0gMDsKLSAgb3duc19maXJzdF9ibG9ja18gPSB0
cnVlOwotICBjbGVhbnVwX2xpc3RfID0gMDsKLQotICBpZiAob3B0aW9uc18uaW5pdGlhbF9ibG9j
ayAhPSBOVUxMICYmIG9wdGlvbnNfLmluaXRpYWxfYmxvY2tfc2l6ZSA+IDApIHsKLSAgICBHT09H
TEVfQ0hFQ0tfR0Uob3B0aW9uc18uaW5pdGlhbF9ibG9ja19zaXplLCBzaXplb2YoQmxvY2spKQot
ICAgICAgICA8PCAiOiBJbml0aWFsIGJsb2NrIHNpemUgdG9vIHNtYWxsIGZvciBoZWFkZXIuIjsK
LQotICAgIC8vIEFkZCBmaXJzdCB1bm93bmVkIGJsb2NrIHRvIGxpc3QuCi0gICAgQmxvY2sqIGZp
cnN0X2Jsb2NrID0gcmVpbnRlcnByZXRfY2FzdDxCbG9jayo+KG9wdGlvbnNfLmluaXRpYWxfYmxv
Y2spOwotICAgIGZpcnN0X2Jsb2NrLT5zaXplID0gb3B0aW9uc18uaW5pdGlhbF9ibG9ja19zaXpl
OwotICAgIGZpcnN0X2Jsb2NrLT5wb3MgPSBrSGVhZGVyU2l6ZTsKLSAgICBmaXJzdF9ibG9jay0+
bmV4dCA9IE5VTEw7Ci0gICAgLy8gVGhyZWFkIHdoaWNoIGNhbGxzIEluaXQoKSBvd25zIHRoZSBm
aXJzdCBibG9jay4gVGhpcyBhbGxvd3MgdGhlCi0gICAgLy8gc2luZ2xlLXRocmVhZGVkIGNhc2Ug
dG8gYWxsb2NhdGUgb24gdGhlIGZpcnN0IGJsb2NrIHdpdGhvdXQgdGFraW5nIGFueQotICAgIC8v
IGxvY2tzLgotICAgIGZpcnN0X2Jsb2NrLT5vd25lciA9ICZ0aHJlYWRfY2FjaGUoKTsKLSAgICBT
ZXRUaHJlYWRDYWNoZUJsb2NrKGZpcnN0X2Jsb2NrKTsKLSAgICBBZGRCbG9ja0ludGVybmFsKGZp
cnN0X2Jsb2NrKTsKLSAgICBvd25zX2ZpcnN0X2Jsb2NrXyA9IGZhbHNlOwotICB9Ci0KLSAgLy8g
Q2FsbCB0aGUgaW5pdGlhbGl6YXRpb24gaG9vawotICBpZiAob3B0aW9uc18ub25fYXJlbmFfaW5p
dCAhPSBOVUxMKSB7Ci0gICAgaG9va3NfY29va2llXyA9IG9wdGlvbnNfLm9uX2FyZW5hX2luaXQo
dGhpcyk7Ci0gIH0gZWxzZSB7Ci0gICAgaG9va3NfY29va2llXyA9IE5VTEw7Ci0gIH0KLX0KLQot
QXJlbmE6On5BcmVuYSgpIHsKLSAgdWludDY0IHNwYWNlX2FsbG9jYXRlZCA9IFJlc2V0SW50ZXJu
YWwoKTsKLQotICAvLyBDYWxsIHRoZSBkZXN0cnVjdGlvbiBob29rCi0gIGlmIChvcHRpb25zXy5v
bl9hcmVuYV9kZXN0cnVjdGlvbiAhPSBOVUxMKSB7Ci0gICAgb3B0aW9uc18ub25fYXJlbmFfZGVz
dHJ1Y3Rpb24odGhpcywgaG9va3NfY29va2llXywgc3BhY2VfYWxsb2NhdGVkKTsKLSAgfQotfQot
Ci11aW50NjQgQXJlbmE6OlJlc2V0KCkgewotICAvLyBJbnZhbGlkYXRlIGFueSBUaHJlYWRDYWNo
ZXMgcG9pbnRpbmcgdG8gYW55IGJsb2NrcyB3ZSBqdXN0IGRlc3Ryb3llZC4KLSAgbGlmZWN5Y2xl
X2lkXyA9IGxpZmVjeWNsZV9pZF9nZW5lcmF0b3JfLkdldE5leHQoKTsKLSAgcmV0dXJuIFJlc2V0
SW50ZXJuYWwoKTsKLX0KLQotdWludDY0IEFyZW5hOjpSZXNldEludGVybmFsKCkgewotICBDbGVh
bnVwTGlzdCgpOwotICB1aW50NjQgc3BhY2VfYWxsb2NhdGVkID0gRnJlZUJsb2NrcygpOwotCi0g
IC8vIENhbGwgdGhlIHJlc2V0IGhvb2sKLSAgaWYgKG9wdGlvbnNfLm9uX2FyZW5hX3Jlc2V0ICE9
IE5VTEwpIHsKLSAgICBvcHRpb25zXy5vbl9hcmVuYV9yZXNldCh0aGlzLCBob29rc19jb29raWVf
LCBzcGFjZV9hbGxvY2F0ZWQpOwotICB9Ci0KLSAgcmV0dXJuIHNwYWNlX2FsbG9jYXRlZDsKLX0K
LQotQXJlbmE6OkJsb2NrKiBBcmVuYTo6TmV3QmxvY2sodm9pZCogbWUsIEJsb2NrKiBteV9sYXN0
X2Jsb2NrLCBzaXplX3QgbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBz
dGFydF9ibG9ja19zaXplLCBzaXplX3QgbWF4X2Jsb2NrX3NpemUpIHsKLSAgc2l6ZV90IHNpemU7
Ci0gIGlmIChteV9sYXN0X2Jsb2NrICE9IE5VTEwpIHsKLSAgICAvLyBEb3VibGUgdGhlIGN1cnJl
bnQgYmxvY2sgc2l6ZSwgdXAgdG8gYSBsaW1pdC4KLSAgICBzaXplID0gMiAqIChteV9sYXN0X2Js
b2NrLT5zaXplKTsKLSAgICBpZiAoc2l6ZSA+IG1heF9ibG9ja19zaXplKSBzaXplID0gbWF4X2Js
b2NrX3NpemU7Ci0gIH0gZWxzZSB7Ci0gICAgc2l6ZSA9IHN0YXJ0X2Jsb2NrX3NpemU7Ci0gIH0K
LSAgaWYgKG4gPiBzaXplIC0ga0hlYWRlclNpemUpIHsKLSAgICAvLyBUT0RPKHNhbmpheSk6IENo
ZWNrIGlmIG4gKyBrSGVhZGVyU2l6ZSB3b3VsZCBvdmVyZmxvdwotICAgIHNpemUgPSBrSGVhZGVy
U2l6ZSArIG47Ci0gIH0KLQotICBCbG9jayogYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmxvY2sqPihv
cHRpb25zXy5ibG9ja19hbGxvYyhzaXplKSk7Ci0gIGItPnBvcyA9IGtIZWFkZXJTaXplICsgbjsK
LSAgYi0+c2l6ZSA9IHNpemU7Ci0gIGlmIChiLT5hdmFpbCgpID09IDApIHsKLSAgICAvLyBEbyBu
b3QgYXR0ZW1wdCB0byByZXVzZSB0aGlzIGJsb2NrLgotICAgIGItPm93bmVyID0gTlVMTDsKLSAg
fSBlbHNlIHsKLSAgICBiLT5vd25lciA9IG1lOwotICB9Ci0jaWZkZWYgQUREUkVTU19TQU5JVEla
RVIKLSAgLy8gUG9pc29uIHRoZSByZXN0IG9mIHRoZSBibG9jayBmb3IgQVNBTi4gSXQgd2FzIHVu
cG9pc29uZWQgYnkgdGhlIHVuZGVybHlpbmcKLSAgLy8gbWFsbG9jIGJ1dCBpdCdzIG5vdCB5ZXQg
dXNhYmxlIHVudGlsIHdlIHJldHVybiBpdCBhcyBwYXJ0IG9mIGFuIGFsbG9jYXRpb24uCi0gIEFT
QU5fUE9JU09OX01FTU9SWV9SRUdJT04oCi0gICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihi
KSArIGItPnBvcywgYi0+c2l6ZSAtIGItPnBvcyk7Ci0jZW5kaWYKLSAgcmV0dXJuIGI7Ci19Ci0K
LXZvaWQgQXJlbmE6OkFkZEJsb2NrKEJsb2NrKiBiKSB7Ci0gIE11dGV4TG9jayBsKCZibG9ja3Nf
bG9ja18pOwotICBBZGRCbG9ja0ludGVybmFsKGIpOwotfQotCi12b2lkIEFyZW5hOjpBZGRCbG9j
a0ludGVybmFsKEJsb2NrKiBiKSB7Ci0gIGItPm5leHQgPSByZWludGVycHJldF9jYXN0PEJsb2Nr
Kj4oZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok5vQmFycmllcl9Mb2FkKCZibG9ja3NfKSk7
Ci0gIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWxlYXNlX1N0b3JlKCZibG9ja3NfLCBy
ZWludGVycHJldF9jYXN0PGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBdG9taWNXb3JkPihi
KSk7Ci0gIGlmIChiLT5hdmFpbCgpICE9IDApIHsKLSAgICAvLyBEaXJlY3QgZnV0dXJlIGFsbG9j
YXRpb25zIHRvIHRoaXMgYmxvY2suCi0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlJl
bGVhc2VfU3RvcmUoJmhpbnRfLCByZWludGVycHJldF9jYXN0PGdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpBdG9taWNXb3JkPihiKSk7Ci0gIH0KLX0KLQotdm9pZCBBcmVuYTo6QWRkTGlzdE5v
ZGUodm9pZCogZWxlbSwgdm9pZCAoKmNsZWFudXApKHZvaWQqKSkgewotICBOb2RlKiBub2RlID0g
cmVpbnRlcnByZXRfY2FzdDxOb2RlKj4oQWxsb2NhdGVBbGlnbmVkKHNpemVvZihOb2RlKSkpOwot
ICBub2RlLT5lbGVtID0gZWxlbTsKLSAgbm9kZS0+Y2xlYW51cCA9IGNsZWFudXA7Ci0gIG5vZGUt
Pm5leHQgPSByZWludGVycHJldF9jYXN0PE5vZGUqPigKLSAgICAgIGdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpOb0JhcnJpZXJfQXRvbWljRXhjaGFuZ2UoJmNsZWFudXBfbGlzdF8sCi0gICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBdG9t
aWNXb3JkPihub2RlKSkpOwotfQotCi12b2lkKiBBcmVuYTo6QWxsb2NhdGVBbGlnbmVkKGNvbnN0
IHN0ZDo6dHlwZV9pbmZvKiBhbGxvY2F0ZWQsIHNpemVfdCBuKSB7Ci0gIC8vIEFsaWduIG4gdG8g
bmV4dCBtdWx0aXBsZSBvZiA4IChmcm9tIEhhY2tlcidzIERlbGlnaHQsIENoYXB0ZXIgMy4pCi0g
IG4gPSAobiArIDcpICYgLTg7Ci0KLSAgLy8gTW9uaXRvciBhbGxvY2F0aW9uIGlmIG5lZWRlZC4K
LSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKGhvb2tzX2Nvb2tpZV8gIT0gTlVMTCkgJiYKLSAg
ICAgIG9wdGlvbnNfLm9uX2FyZW5hX2FsbG9jYXRpb24gIT0gTlVMTCkgewotICAgIG9wdGlvbnNf
Lm9uX2FyZW5hX2FsbG9jYXRpb24oYWxsb2NhdGVkLCBuLCBob29rc19jb29raWVfKTsKLSAgfQot
Ci0gIC8vIElmIHRoaXMgdGhyZWFkIGFscmVhZHkgb3ducyBhIGJsb2NrIGluIHRoaXMgYXJlbmEg
dGhlbiB0cnkgdG8gdXNlIHRoYXQuCi0gIC8vIFRoaXMgZmFzdCBwYXRoIG9wdGltaXplcyB0aGUg
Y2FzZSB3aGVyZSBtdWx0aXBsZSB0aHJlYWRzIGFsbG9jYXRlIGZyb20gdGhlCi0gIC8vIHNhbWUg
YXJlbmEuCi0gIGlmICh0aHJlYWRfY2FjaGUoKS5sYXN0X2xpZmVjeWNsZV9pZF9zZWVuID09IGxp
ZmVjeWNsZV9pZF8gJiYKLSAgICAgIHRocmVhZF9jYWNoZSgpLmxhc3RfYmxvY2tfdXNlZF8gIT0g
TlVMTCkgewotICAgIGlmICh0aHJlYWRfY2FjaGUoKS5sYXN0X2Jsb2NrX3VzZWRfLT5hdmFpbCgp
IDwgbikgewotICAgICAgcmV0dXJuIFNsb3dBbGxvYyhuKTsKLSAgICB9Ci0gICAgcmV0dXJuIEFs
bG9jRnJvbUJsb2NrKHRocmVhZF9jYWNoZSgpLmxhc3RfYmxvY2tfdXNlZF8sIG4pOwotICB9Ci0K
LSAgLy8gQ2hlY2sgd2hldGhlciB3ZSBvd24gdGhlIGxhc3QgYWNjZXNzZWQgYmxvY2sgb24gdGhp
cyBhcmVuYS4KLSAgLy8gVGhpcyBmYXN0IHBhdGggb3B0aW1pemVzIHRoZSBjYXNlIHdoZXJlIGEg
c2luZ2xlIHRocmVhZCB1c2VzIG11bHRpcGxlCi0gIC8vIGFyZW5hcy4KLSAgdm9pZCogbWUgPSAm
dGhyZWFkX2NhY2hlKCk7Ci0gIEJsb2NrKiBiID0gcmVpbnRlcnByZXRfY2FzdDxCbG9jayo+KGdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBY3F1aXJlX0xvYWQoJmhpbnRfKSk7Ci0gIGlmICgh
YiB8fCBiLT5vd25lciAhPSBtZSB8fCBiLT5hdmFpbCgpIDwgbikgewotICAgIHJldHVybiBTbG93
QWxsb2Mobik7Ci0gIH0KLSAgcmV0dXJuIEFsbG9jRnJvbUJsb2NrKGIsIG4pOwotfQotCi12b2lk
KiBBcmVuYTo6QWxsb2NGcm9tQmxvY2soQmxvY2sqIGIsIHNpemVfdCBuKSB7Ci0gIHNpemVfdCBw
ID0gYi0+cG9zOwotICBiLT5wb3MgPSBwICsgbjsKLSNpZmRlZiBBRERSRVNTX1NBTklUSVpFUgot
ICBBU0FOX1VOUE9JU09OX01FTU9SWV9SRUdJT04ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYikg
KyBwLCBuKTsKLSNlbmRpZgotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYikgKyBw
OwotfQotCi12b2lkKiBBcmVuYTo6U2xvd0FsbG9jKHNpemVfdCBuKSB7Ci0gIHZvaWQqIG1lID0g
JnRocmVhZF9jYWNoZSgpOwotICBCbG9jayogYiA9IEZpbmRCbG9jayhtZSk7ICAvLyBGaW5kIGJs
b2NrIG93bmVkIGJ5IG1lLgotICAvLyBTZWUgaWYgYWxsb2NhdGlvbiBmaXRzIGluIG15IGxhdGVz
dCBibG9jay4KLSAgaWYgKGIgIT0gTlVMTCAmJiBiLT5hdmFpbCgpID49IG4pIHsKLSAgICBTZXRU
aHJlYWRDYWNoZUJsb2NrKGIpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpOb0Jh
cnJpZXJfU3RvcmUoJmhpbnRfLCByZWludGVycHJldF9jYXN0PGdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpBdG9taWNXb3JkPihiKSk7Ci0gICAgcmV0dXJuIEFsbG9jRnJvbUJsb2NrKGIsIG4p
OwotICB9Ci0gIGIgPSBOZXdCbG9jayhtZSwgYiwgbiwgb3B0aW9uc18uc3RhcnRfYmxvY2tfc2l6
ZSwgb3B0aW9uc18ubWF4X2Jsb2NrX3NpemUpOwotICBBZGRCbG9jayhiKTsKLSAgaWYgKGItPm93
bmVyID09IG1lKSB7ICAvLyBJZiB0aGlzIGJsb2NrIGNhbiBiZSByZXVzZWQgKHNlZSBOZXdCbG9j
aygpKS4KLSAgICBTZXRUaHJlYWRDYWNoZUJsb2NrKGIpOwotICB9Ci0gIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihiKSArIGtIZWFkZXJTaXplOwotfQotCi11aW50NjQgQXJlbmE6OlNw
YWNlQWxsb2NhdGVkKCkgY29uc3QgewotICB1aW50NjQgc3BhY2VfYWxsb2NhdGVkID0gMDsKLSAg
QmxvY2sqIGIgPSByZWludGVycHJldF9jYXN0PEJsb2NrKj4oZ29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6Ok5vQmFycmllcl9Mb2FkKCZibG9ja3NfKSk7Ci0gIHdoaWxlIChiICE9IE5VTEwpIHsK
LSAgICBzcGFjZV9hbGxvY2F0ZWQgKz0gKGItPnNpemUpOwotICAgIGIgPSBiLT5uZXh0OwotICB9
Ci0gIHJldHVybiBzcGFjZV9hbGxvY2F0ZWQ7Ci19Ci0KLXVpbnQ2NCBBcmVuYTo6U3BhY2VVc2Vk
KCkgY29uc3QgewotICB1aW50NjQgc3BhY2VfdXNlZCA9IDA7Ci0gIEJsb2NrKiBiID0gcmVpbnRl
cnByZXRfY2FzdDxCbG9jayo+KGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpOb0JhcnJpZXJf
TG9hZCgmYmxvY2tzXykpOwotICB3aGlsZSAoYiAhPSBOVUxMKSB7Ci0gICAgc3BhY2VfdXNlZCAr
PSAoYi0+cG9zIC0ga0hlYWRlclNpemUpOwotICAgIGIgPSBiLT5uZXh0OwotICB9Ci0gIHJldHVy
biBzcGFjZV91c2VkOwotfQotCi1wYWlyPHVpbnQ2NCwgdWludDY0PiBBcmVuYTo6U3BhY2VBbGxv
Y2F0ZWRBbmRVc2VkKCkgY29uc3QgewotICB1aW50NjQgYWxsb2NhdGVkID0gMDsKLSAgdWludDY0
IHVzZWQgPSAwOwotCi0gIEJsb2NrKiBiID0gcmVpbnRlcnByZXRfY2FzdDxCbG9jayo+KGdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpOb0JhcnJpZXJfTG9hZCgmYmxvY2tzXykpOwotICB3aGls
ZSAoYiAhPSBOVUxMKSB7Ci0gICAgYWxsb2NhdGVkICs9IGItPnNpemU7Ci0gICAgdXNlZCArPSAo
Yi0+cG9zIC0ga0hlYWRlclNpemUpOwotICAgIGIgPSBiLT5uZXh0OwotICB9Ci0gIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihhbGxvY2F0ZWQsIHVzZWQpOwotfQotCi11aW50NjQgQXJlbmE6OkZyZWVC
bG9ja3MoKSB7Ci0gIHVpbnQ2NCBzcGFjZV9hbGxvY2F0ZWQgPSAwOwotICBCbG9jayogYiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8QmxvY2sqPihnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6Tm9CYXJy
aWVyX0xvYWQoJmJsb2Nrc18pKTsKLSAgQmxvY2sqIGZpcnN0X2Jsb2NrID0gTlVMTDsKLSAgd2hp
bGUgKGIgIT0gTlVMTCkgewotICAgIHNwYWNlX2FsbG9jYXRlZCArPSAoYi0+c2l6ZSk7Ci0gICAg
QmxvY2sqIG5leHQgPSBiLT5uZXh0OwotICAgIGlmIChuZXh0ICE9IE5VTEwpIHsKLSAgICAgIG9w
dGlvbnNfLmJsb2NrX2RlYWxsb2MoYiwgYi0+c2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlm
IChvd25zX2ZpcnN0X2Jsb2NrXykgewotICAgICAgICBvcHRpb25zXy5ibG9ja19kZWFsbG9jKGIs
IGItPnNpemUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVXNlciBwYXNzZWQgaW4gdGhl
IGZpcnN0IGJsb2NrLCBza2lwIGZyZWUnaW5nIHRoZSBtZW1vcnkuCi0gICAgICAgIGZpcnN0X2Js
b2NrID0gYjsKLSAgICAgIH0KLSAgICB9Ci0gICAgYiA9IG5leHQ7Ci0gIH0KLSAgYmxvY2tzXyA9
IDA7Ci0gIGhpbnRfID0gMDsKLSAgaWYgKCFvd25zX2ZpcnN0X2Jsb2NrXykgewotICAgIC8vIE1h
a2UgdGhlIGZpcnN0IGJsb2NrIHRoYXQgd2FzIHBhc3NlZCBpbiB0aHJvdWdoIEFyZW5hT3B0aW9u
cwotICAgIC8vIGF2YWlsYWJsZSBmb3IgcmV1c2UuCi0gICAgZmlyc3RfYmxvY2stPnBvcyA9IGtI
ZWFkZXJTaXplOwotICAgIC8vIFRocmVhZCB3aGljaCBjYWxscyBSZXNldCgpIG93bnMgdGhlIGZp
cnN0IGJsb2NrLiBUaGlzIGFsbG93cyB0aGUKLSAgICAvLyBzaW5nbGUtdGhyZWFkZWQgY2FzZSB0
byBhbGxvY2F0ZSBvbiB0aGUgZmlyc3QgYmxvY2sgd2l0aG91dCB0YWtpbmcgYW55Ci0gICAgLy8g
bG9ja3MuCi0gICAgZmlyc3RfYmxvY2stPm93bmVyID0gJnRocmVhZF9jYWNoZSgpOwotICAgIFNl
dFRocmVhZENhY2hlQmxvY2soZmlyc3RfYmxvY2spOwotICAgIEFkZEJsb2NrSW50ZXJuYWwoZmly
c3RfYmxvY2spOwotICB9Ci0gIHJldHVybiBzcGFjZV9hbGxvY2F0ZWQ7Ci19Ci0KLXZvaWQgQXJl
bmE6OkNsZWFudXBMaXN0KCkgewotICBOb2RlKiBoZWFkID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8Tm9kZSo+KGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpOb0JhcnJpZXJfTG9hZCgmY2xl
YW51cF9saXN0XykpOwotICB3aGlsZSAoaGVhZCAhPSBOVUxMKSB7Ci0gICAgaGVhZC0+Y2xlYW51
cChoZWFkLT5lbGVtKTsKLSAgICBoZWFkID0gaGVhZC0+bmV4dDsKLSAgfQotICBjbGVhbnVwX2xp
c3RfID0gMDsKLX0KLQotQXJlbmE6OkJsb2NrKiBBcmVuYTo6RmluZEJsb2NrKHZvaWQqIG1lKSB7
Ci0gIC8vIFRPRE8oc2FuamF5KTogV2UgbWlnaHQgd2FudCB0byBrZWVwIGEgc2VwYXJhdGUgbGlz
dCB3aXRoIG9uZQotICAvLyBlbnRyeSBwZXIgdGhyZWFkLgotICBCbG9jayogYiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8QmxvY2sqPihnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QWNxdWlyZV9Mb2Fk
KCZibG9ja3NfKSk7Ci0gIHdoaWxlIChiICE9IE5VTEwgJiYgYi0+b3duZXIgIT0gbWUpIHsKLSAg
ICBiID0gYi0+bmV4dDsKLSAgfQotICByZXR1cm4gYjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBy
b3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvYXJlbmEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjZjA3YjlmYzk3YzBjZjRiN2Y3ZjRkYmE5Y2FhNWE5ZWRjOTYzODMz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9hcmVuYS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTI1ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9B
UkVOQV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0FSRU5BX0hfXwotCi0jaW5jbHVkZSA8
bGltaXRzPgotI2lmZGVmIG1heAotI3VuZGVmIG1heCAgLy8gVmlzdWFsIFN0dWRpbyBkZWZpbmVz
IHRoaXMgbWFjcm8KLSNlbmRpZgotI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvdHlwZV90cmFpdHMuaD4KLSNlbmRpZgotI2lmIGRlZmlu
ZWQoX01TQ19WRVIpICYmICFfSEFTX0VYQ0VQVElPTlMKLS8vIFdvcmsgYXJvdW5kIGJ1Z3MgaW4g
TVNWQyA8dHlwZWluZm8+IGhlYWRlciB3aGVuIF9IQVNfRVhDRVBUSU9OUz0wLgotI2luY2x1ZGUg
PGV4Y2VwdGlvbj4KLSNpbmNsdWRlIDx0eXBlaW5mbz4KLW5hbWVzcGFjZSBzdGQgewotdXNpbmcg
dHlwZV9pbmZvID0gOjp0eXBlX2luZm87Ci19Ci0jZWxzZQotI2luY2x1ZGUgPHR5cGVpbmZvPgot
I2VuZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljX3NlcXVlbmNl
X251bS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHMuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvbXV0ZXguaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvdHlwZV90cmFpdHMu
aD4KLQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLWNsYXNz
IEFyZW5hOyAgICAgICAvLyBkZWZpbmVkIGJlbG93Ci1jbGFzcyBNZXNzYWdlOyAgICAgLy8gbWVz
c2FnZS5oCi0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci1jbGFzcyBBcmVuYVN0cmluZzsgLy8gYXJl
bmFzdHJpbmcuaAotY2xhc3MgTGF6eUZpZWxkOyAgIC8vIGxhenlfZmllbGQuaAotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgotY2xhc3MgR2VuZXJpY1R5cGVIYW5kbGVyOyAvLyByZXBlYXRlZF9m
aWVsZC5oCi0KLS8vIFRlbXBsYXRlZCBjbGVhbnVwIG1ldGhvZHMuCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIGFyZW5hX2Rlc3RydWN0X29iamVjdCh2b2lkKiBvYmplY3QpIHsKLSAgcmVpbnRl
cnByZXRfY2FzdDxUKj4ob2JqZWN0KS0+flQoKTsKLX0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgYXJlbmFfZGVsZXRlX29iamVjdCh2b2lkKiBvYmplY3QpIHsKLSAgZGVsZXRlIHJlaW50ZXJw
cmV0X2Nhc3Q8VCo+KG9iamVjdCk7Ci19Ci1pbmxpbmUgdm9pZCBhcmVuYV9mcmVlKHZvaWQqIG9i
amVjdCwgc2l6ZV90IC8qIHNpemUgKi8pIHsKLSAgZnJlZShvYmplY3QpOwotfQotCi19ICAvLyBu
YW1lc3BhY2UgaW50ZXJuYWwKLQotLy8gQXJlbmFPcHRpb25zIHByb3ZpZGVzIG9wdGlvbmFsIGFk
ZGl0aW9uYWwgcGFyYW1ldGVycyB0byBhcmVuYSBjb25zdHJ1Y3Rpb24KLS8vIHRoYXQgY29udHJv
bCBpdHMgYmxvY2stYWxsb2NhdGlvbiBiZWhhdmlvci4KLXN0cnVjdCBBcmVuYU9wdGlvbnMgewot
ICAvLyBUaGlzIGRlZmluZXMgdGhlIHNpemUgb2YgdGhlIGZpcnN0IGJsb2NrIHJlcXVlc3RlZCBm
cm9tIHRoZSBzeXN0ZW0gbWFsbG9jLgotICAvLyBTdWJzZXF1ZW50IGJsb2NrIHNpemVzIHdpbGwg
aW5jcmVhc2UgaW4gYSBnZW9tZXRyaWMgc2VyaWVzIHVwIHRvIGEgbWF4aW11bS4KLSAgc2l6ZV90
IHN0YXJ0X2Jsb2NrX3NpemU7Ci0KLSAgLy8gVGhpcyBkZWZpbmVzIHRoZSBtYXhpbXVtIGJsb2Nr
IHNpemUgcmVxdWVzdGVkIGZyb20gc3lzdGVtIG1hbGxvYyAodW5sZXNzIGFuCi0gIC8vIGluZGl2
aWR1YWwgYXJlbmEgYWxsb2NhdGlvbiByZXF1ZXN0IG9jY3VycyB3aXRoIGEgc2l6ZSBsYXJnZXIg
dGhhbiB0aGlzCi0gIC8vIG1heGltdW0pLiBSZXF1ZXN0ZWQgYmxvY2sgc2l6ZXMgaW5jcmVhc2Ug
dXAgdG8gdGhpcyB2YWx1ZSwgdGhlbiByZW1haW4KLSAgLy8gaGVyZS4KLSAgc2l6ZV90IG1heF9i
bG9ja19zaXplOwotCi0gIC8vIEFuIGluaXRpYWwgYmxvY2sgb2YgbWVtb3J5IGZvciB0aGUgYXJl
bmEgdG8gdXNlLCBvciBOVUxMIGZvciBub25lLiBJZgotICAvLyBwcm92aWRlZCwgdGhlIGJsb2Nr
IG11c3QgbGl2ZSBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZSBhcmVuYSBpdHNlbGYuIFRoZQotICAv
LyBjcmVhdG9yIG9mIHRoZSBBcmVuYSByZXRhaW5zIG93bmVyc2hpcCBvZiB0aGUgYmxvY2sgYWZ0
ZXIgdGhlIEFyZW5hIGlzCi0gIC8vIGRlc3Ryb3llZC4KLSAgY2hhciogaW5pdGlhbF9ibG9jazsK
LQotICAvLyBUaGUgc2l6ZSBvZiB0aGUgaW5pdGlhbCBibG9jaywgaWYgcHJvdmlkZWQuCi0gIHNp
emVfdCBpbml0aWFsX2Jsb2NrX3NpemU7Ci0KLSAgLy8gQSBmdW5jdGlvbiBwb2ludGVyIHRvIGFu
IGFsbG9jIG1ldGhvZCB0aGF0IHJldHVybnMgbWVtb3J5IGJsb2NrcyBvZiBzaXplCi0gIC8vIHJl
cXVlc3RlZC4gQnkgZGVmYXVsdCwgaXQgY29udGFpbnMgYSBwdHIgdG8gdGhlIG1hbGxvYyBmdW5j
dGlvbi4KLSAgLy8KLSAgLy8gTk9URTogYmxvY2tfYWxsb2MgYW5kIGRlYWxsb2MgZnVuY3Rpb25z
IGFyZSBleHBlY3RlZCB0byBiZWhhdmUgbGlrZQotICAvLyBtYWxsb2MgYW5kIGZyZWUsIGluY2x1
ZGluZyBBc2FuIHBvaXNvbmluZy4KLSAgdm9pZCogKCpibG9ja19hbGxvYykoc2l6ZV90KTsKLSAg
Ly8gQSBmdW5jdGlvbiBwb2ludGVyIHRvIGEgZGVhbGxvYyBtZXRob2QgdGhhdCB0YWtlcyBvd25l
cnNoaXAgb2YgdGhlIGJsb2NrcwotICAvLyBmcm9tIHRoZSBhcmVuYS4gQnkgZGVmYXVsdCwgaXQg
Y29udGFpbnMgYSBwdHIgdG8gYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQKLSAgLy8gY2FsbHMgZnJl
ZS4KLSAgdm9pZCAoKmJsb2NrX2RlYWxsb2MpKHZvaWQqLCBzaXplX3QpOwotCi0gIC8vIEhvb2tz
IGZvciBhZGRpbmcgZXh0ZXJuYWwgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIHVzZXItc3BlY2lmaWMg
bWV0cmljcwotICAvLyBjb2xsZWN0aW9uLCBzcGVjaWZpYyBkZWJ1Z2dpbmcgYWJpbGl0aWVzLCBl
dGMuCi0gIC8vIEluaXQgaG9vayBtYXkgcmV0dXJuIGEgcG9pbnRlciB0byBhIGNvb2tpZSB0byBi
ZSBzdG9yZWQgaW4gdGhlIGFyZW5hLgotICAvLyByZXNldCBhbmQgZGVzdHJ1Y3Rpb24gaG9va3Mg
d2lsbCB0aGVuIGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGNvb2tpZQotICAvLyBwb2ludGVyLiBU
aGlzIGFsbG93cyB1cyB0byBzYXZlIGFuIGV4dGVybmFsIG9iamVjdCBwZXIgYXJlbmEgaW5zdGFu
Y2UgYW5kCi0gIC8vIHVzZSBpdCBvbiB0aGUgb3RoZXIgaG9va3MgKE5vdGU6IEl0IGlzIGp1c3Qg
YXMgbGVnYWwgZm9yIGluaXQgdG8gcmV0dXJuCi0gIC8vIE5VTEwgYW5kIG5vdCB1c2UgdGhlIGNv
b2tpZSBmZWF0dXJlKS4KLSAgLy8gb25fYXJlbmFfcmVzZXQgYW5kIG9uX2FyZW5hX2Rlc3RydWN0
aW9uIGFsc28gcmVjZWl2ZSB0aGUgc3BhY2UgdXNlZCBpbgotICAvLyB0aGUgYXJlbmEganVzdCBi
ZWZvcmUgdGhlIHJlc2V0LgotICB2b2lkKiAoKm9uX2FyZW5hX2luaXQpKEFyZW5hKiBhcmVuYSk7
Ci0gIHZvaWQgKCpvbl9hcmVuYV9yZXNldCkoQXJlbmEqIGFyZW5hLCB2b2lkKiBjb29raWUsIHVp
bnQ2NCBzcGFjZV91c2VkKTsKLSAgdm9pZCAoKm9uX2FyZW5hX2Rlc3RydWN0aW9uKShBcmVuYSog
YXJlbmEsIHZvaWQqIGNvb2tpZSwgdWludDY0IHNwYWNlX3VzZWQpOwotCi0gIC8vIHR5cGVfaW5m
byBpcyBwcm9taXNlZCB0byBiZSBzdGF0aWMgLSBpdHMgbGlmZXRpbWUgZXh0ZW5kcyB0bwotICAv
LyBtYXRjaCBwcm9ncmFtJ3MgbGlmZXRpbWUgKEl0IGlzIGdpdmVuIGJ5IHR5cGVpZCBvcGVyYXRv
cikuCi0gIC8vIE5vdGU6IHR5cGVpZCh2b2lkKSB3aWxsIGJlIHBhc3NlZCBhcyBhbGxvY2F0ZWRf
dHlwZSBldmVyeSB0aW1lIHdlCi0gIC8vIGludGVudGlvbmFsbHkgd2FudCB0byBhdm9pZCBtb25p
dG9yaW5nIGFuIGFsbG9jYXRpb24uIChpLmUuIGludGVybmFsCi0gIC8vIGFsbG9jYXRpb25zIGZv
ciBtYW5hZ2luZyB0aGUgYXJlbmEpCi0gIHZvaWQgKCpvbl9hcmVuYV9hbGxvY2F0aW9uKShjb25z
dCBzdGQ6OnR5cGVfaW5mbyogYWxsb2NhdGVkX3R5cGUsCi0gICAgICB1aW50NjQgYWxsb2Nfc2l6
ZSwgdm9pZCogY29va2llKTsKLQotICBBcmVuYU9wdGlvbnMoKQotICAgICAgOiBzdGFydF9ibG9j
a19zaXplKGtEZWZhdWx0U3RhcnRCbG9ja1NpemUpLAotICAgICAgICBtYXhfYmxvY2tfc2l6ZShr
RGVmYXVsdE1heEJsb2NrU2l6ZSksCi0gICAgICAgIGluaXRpYWxfYmxvY2soTlVMTCksCi0gICAg
ICAgIGluaXRpYWxfYmxvY2tfc2l6ZSgwKSwKLSAgICAgICAgYmxvY2tfYWxsb2MoJm1hbGxvYyks
Ci0gICAgICAgIGJsb2NrX2RlYWxsb2MoJmludGVybmFsOjphcmVuYV9mcmVlKSwKLSAgICAgICAg
b25fYXJlbmFfaW5pdChOVUxMKSwKLSAgICAgICAgb25fYXJlbmFfcmVzZXQoTlVMTCksCi0gICAg
ICAgIG9uX2FyZW5hX2Rlc3RydWN0aW9uKE5VTEwpLAotICAgICAgICBvbl9hcmVuYV9hbGxvY2F0
aW9uKE5VTEwpIHt9Ci0KLSBwcml2YXRlOgotICAvLyBDb25zdGFudHMgZGVmaW5lIGRlZmF1bHQg
c3RhcnRpbmcgYmxvY2sgc2l6ZSBhbmQgbWF4IGJsb2NrIHNpemUgZm9yCi0gIC8vIGFyZW5hIGFs
bG9jYXRvciBiZWhhdmlvciAtLSBzZWUgZGVzY3JpcHRpb25zIGFib3ZlLgotICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGtEZWZhdWx0U3RhcnRCbG9ja1NpemUgPSAyNTY7Ci0gIHN0YXRpYyBjb25zdCBz
aXplX3Qga0RlZmF1bHRNYXhCbG9ja1NpemUgICA9IDgxOTI7Ci19OwotCi0vLyBTdXBwb3J0IGZv
ciBub24tUlRUSSBlbnZpcm9ubWVudHMuIChUaGUgbWV0cmljcyBob29rcyBBUEkgdXNlcyB0eXBl
Ci0vLyBpbmZvcm1hdGlvbi4pCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9OT19SVFRJCi0jZGVm
aW5lIFJUVElfVFlQRV9JRCh0eXBlKSAoJnR5cGVpZCh0eXBlKSkKLSNlbHNlCi0jZGVmaW5lIFJU
VElfVFlQRV9JRCh0eXBlKSAoTlVMTCkKLSNlbmRpZgotCi0vLyBBcmVuYSBhbGxvY2F0b3IuIEFy
ZW5hIGFsbG9jYXRpb24gcmVwbGFjZXMgb3JkaW5hcnkgKGhlYXAtYmFzZWQpIGFsbG9jYXRpb24K
LS8vIHdpdGggbmV3L2RlbGV0ZSwgYW5kIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5IGFnZ3JlZ2F0
aW5nIGFsbG9jYXRpb25zIGludG8KLS8vIGxhcmdlciBibG9ja3MgYW5kIGZyZWVpbmcgYWxsb2Nh
dGlvbnMgYWxsIGF0IG9uY2UuIFByb3RvY29sIG1lc3NhZ2VzIGFyZQotLy8gYWxsb2NhdGVkIG9u
IGFuIGFyZW5hIGJ5IHVzaW5nIEFyZW5hOjpDcmVhdGVNZXNzYWdlPFQ+KEFyZW5hKiksIGJlbG93
LCBhbmQKLS8vIGFyZSBhdXRvbWF0aWNhbGx5IGZyZWVkIHdoZW4gdGhlIGFyZW5hIGlzIGRlc3Ry
b3llZC4KLS8vCi0vLyBUaGlzIGlzIGEgdGhyZWFkLXNhZmUgaW1wbGVtZW50YXRpb246IG11bHRp
cGxlIHRocmVhZHMgbWF5IGFsbG9jYXRlIGZyb20gdGhlCi0vLyBhcmVuYSBjb25jdXJyZW50bHku
IERlc3RydWN0aW9uIGlzIG5vdCB0aHJlYWQtc2FmZSBhbmQgdGhlIGRlc3RydWN0aW5nCi0vLyB0
aHJlYWQgbXVzdCBzeW5jaHJvbml6ZSB3aXRoIHVzZXJzIG9mIHRoZSBhcmVuYSBmaXJzdC4KLS8v
Ci0vLyBBbiBhcmVuYSBwcm92aWRlcyB0d28gYWxsb2NhdGlvbiBpbnRlcmZhY2VzOiBDcmVhdGVN
ZXNzYWdlPFQ+LCB3aGljaCB3b3JrcwotLy8gZm9yIGFyZW5hLWVuYWJsZWQgcHJvdG8yIG1lc3Nh
Z2UgdHlwZXMgYXMgd2VsbCBhcyBvdGhlciB0eXBlcyB0aGF0IHNhdGlzZnkKLS8vIHRoZSBhcHBy
b3ByaWF0ZSBwcm90b2NvbCAoZGVzY3JpYmVkIGJlbG93KSwgYW5kIENyZWF0ZTxUPiwgd2hpY2gg
d29ya3MgZm9yCi0vLyBhbnkgYXJiaXRyYXJ5IHR5cGUgVC4gQ3JlYXRlTWVzc2FnZTxUPiBpcyBi
ZXR0ZXIgd2hlbiB0aGUgdHlwZSBUIHN1cHBvcnRzIGl0LAotLy8gYmVjYXVzZSB0aGlzIGludGVy
ZmFjZSAoaSkgcGFzc2VzIHRoZSBhcmVuYSBwb2ludGVyIHRvIHRoZSBjcmVhdGVkIG9iamVjdCBz
bwotLy8gdGhhdCBpdHMgc3ViLW9iamVjdHMgYW5kIGludGVybmFsIGFsbG9jYXRpb25zIGNhbiB1
c2UgdGhlIGFyZW5hIHRvbywgYW5kIChpaSkKLS8vIGVsaWRlcyB0aGUgb2JqZWN0J3MgZGVzdHJ1
Y3RvciBjYWxsIHdoZW4gcG9zc2libGUuIENyZWF0ZTxUPiBkb2VzIG5vdCBwbGFjZQotLy8gYW55
IHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9uIHRoZSB0eXBlIFQsIGFuZCB3aWxsIGludm9rZSB0aGUg
b2JqZWN0J3MKLS8vIGRlc3RydWN0b3Igd2hlbiB0aGUgYXJlbmEgaXMgZGVzdHJveWVkLgotLy8K
LS8vIFRoZSBhcmVuYSBtZXNzYWdlIGFsbG9jYXRpb24gcHJvdG9jb2wsIHJlcXVpcmVkIGJ5IENy
ZWF0ZU1lc3NhZ2U8VD4sIGlzIGFzCi0vLyBmb2xsb3dzOgotLy8KLS8vIC0gVGhlIHR5cGUgVCBt
dXN0IGhhdmUgKGF0IGxlYXN0KSB0d28gY29uc3RydWN0b3JzOiBhIGNvbnN0cnVjdG9yIHdpdGgg
bm8KLS8vICAgYXJndW1lbnRzLCBjYWxsZWQgd2hlbiBhIFQgaXMgYWxsb2NhdGVkIG9uIHRoZSBo
ZWFwOyBhbmQgYSBjb25zdHJ1Y3RvciB3aXRoCi0vLyAgIGEgZ29vZ2xlOjpwcm90b2J1Zjo6QXJl
bmEqIGFyZ3VtZW50LCBjYWxsZWQgd2hlbiBhIFQgaXMgYWxsb2NhdGVkIG9uIGFuIGFyZW5hLiBJ
ZiB0aGUKLS8vICAgc2Vjb25kIGNvbnN0cnVjdG9yIGlzIGNhbGxlZCB3aXRoIGEgTlVMTCBhcmVu
YSBwb2ludGVyLCBpdCBtdXN0IGJlCi0vLyAgIGVxdWl2YWxlbnQgdG8gaW52b2tpbmcgdGhlIGZp
cnN0IChuby1hcmd1bWVudCkgY29uc3RydWN0b3IuCi0vLwotLy8gLSBUaGUgdHlwZSBUIG11c3Qg
aGF2ZSBhIHBhcnRpY3VsYXIgdHlwZSB0cmFpdDogYSBuZXN0ZWQgdHlwZQotLy8gICB8SW50ZXJu
YWxBcmVuYUNvbnN0cnVjdGFibGVffC4gVGhpcyBpcyB1c3VhbGx5IGEgdHlwZWRlZiB0byB8dm9p
ZHwuIElmIG5vCi0vLyAgIHN1Y2ggdHlwZSB0cmFpdCBleGlzdHMsIHRoZW4gdGhlIGluc3RhbnRp
YXRpb24gQ3JlYXRlTWVzc2FnZTxUPiB3aWxsIGZhaWwKLS8vICAgdG8gY29tcGlsZS4KLS8vCi0v
LyAtIFRoZSB0eXBlIFQgKm1heSogaGF2ZSB0aGUgdHlwZSB0cmFpdCB8RGVzdHJ1Y3RvclNraXBw
YWJsZV98LiBJZiB0aGlzIHR5cGUKLS8vICAgdHJhaXQgaXMgcHJlc2VudCBpbiB0aGUgdHlwZSwg
dGhlbiBpdHMgZGVzdHJ1Y3RvciB3aWxsIG5vdCBiZSBjYWxsZWQgaWYgYW5kCi0vLyAgIG9ubHkg
aWYgaXQgd2FzIHBhc3NlZCBhIG5vbi1OVUxMIGFyZW5hIHBvaW50ZXIuIElmIHRoaXMgdHlwZSB0
cmFpdCBpcyBub3QKLS8vICAgcHJlc2VudCBvbiB0aGUgdHlwZSwgdGhlbiBpdHMgZGVzdHJ1Y3Rv
ciBpcyBhbHdheXMgY2FsbGVkIHdoZW4gdGhlCi0vLyAgIGNvbnRhaW5pbmcgYXJlbmEgaXMgZGVz
dHJveWVkLgotLy8KLS8vIC0gT25lLSBhbmQgdHdvLXVzZXItYXJndW1lbnQgZm9ybXMgb2YgQ3Jl
YXRlTWVzc2FnZTxUPigpIGFsc28gZXhpc3QgdGhhdAotLy8gICBmb3J3YXJkIHRoZXNlIGNvbnN0
cnVjdG9yIGFyZ3VtZW50cyB0byBUJ3MgY29uc3RydWN0b3I6IGZvciBleGFtcGxlLAotLy8gICBD
cmVhdGVNZXNzYWdlPFQ+KEFyZW5hKiwgYXJnMSwgYXJnMikgZm9yd2FyZHMgdG8gYSBjb25zdHJ1
Y3RvciBUKEFyZW5hKiwKLS8vICAgYXJnMSwgYXJnMikuCi0vLwotLy8gVGhpcyBwcm90b2NvbCBp
cyBpbXBsZW1lbnRlZCBieSBhbGwgYXJlbmEtZW5hYmxlZCBwcm90bzIgbWVzc2FnZSBjbGFzc2Vz
IGFzCi0vLyB3ZWxsIGFzIFJlcGVhdGVkUHRyRmllbGQuCi0KLSNpZiBfX2NwbHVzcGx1cyA+PSAy
MDExMDNMCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgQXJlbmEgZmluYWwgewotI2Vsc2UKLWNs
YXNzIExJQlBST1RPQlVGX0VYUE9SVCBBcmVuYSB7Ci0jZW5kaWYKLSBwdWJsaWM6Ci0gIC8vIEFy
ZW5hIGNvbnN0cnVjdG9yIHRha2luZyBjdXN0b20gb3B0aW9ucy4gU2VlIEFyZW5hT3B0aW9ucyBi
ZWxvdyBmb3IKLSAgLy8gZGVzY3JpcHRpb25zIG9mIHRoZSBvcHRpb25zIGF2YWlsYWJsZS4KLSAg
ZXhwbGljaXQgQXJlbmEoY29uc3QgQXJlbmFPcHRpb25zJiBvcHRpb25zKSA6IG9wdGlvbnNfKG9w
dGlvbnMpIHsKLSAgICBJbml0KCk7Ci0gIH0KLQotICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yIHdp
dGggc2Vuc2libGUgZGVmYXVsdCBvcHRpb25zLCB0dW5lZCBmb3IgYXZlcmFnZQotICAvLyB1c2Ut
Y2FzZXMuCi0gIEFyZW5hKCkgewotICAgIEluaXQoKTsKLSAgfQotCi0gIC8vIERlc3RydWN0b3Ig
ZGVsZXRlcyBhbGwgb3duZWQgaGVhcCBhbGxvY2F0ZWQgb2JqZWN0cywgYW5kIGRlc3RydWN0cyBv
YmplY3RzCi0gIC8vIHRoYXQgaGF2ZSBub24tdHJpdmlhbCBkZXN0cnVjdG9ycywgZXhjZXB0IGZv
ciBwcm90bzIgbWVzc2FnZSBvYmplY3RzIHdob3NlCi0gIC8vIGRlc3RydWN0b3JzIGNhbiBiZSBz
a2lwcGVkLiBBbHNvLCBmcmVlcyBhbGwgYmxvY2tzIGV4Y2VwdCB0aGUgaW5pdGlhbCBibG9jawot
ICAvLyBpZiBpdCB3YXMgcGFzc2VkIGluLgotICB+QXJlbmEoKTsKLQotICAvLyBBUEkgdG8gY3Jl
YXRlIHByb3RvMiBtZXNzYWdlIG9iamVjdHMgb24gdGhlIGFyZW5hLiBJZiB0aGUgYXJlbmEgcGFz
c2VkIGluCi0gIC8vIGlzIE5VTEwsIHRoZW4gYSBoZWFwIGFsbG9jYXRlZCBvYmplY3QgaXMgcmV0
dXJuZWQuIFR5cGUgVCBtdXN0IGJlIGEgbWVzc2FnZQotICAvLyBkZWZpbmVkIGluIGEgLnByb3Rv
IGZpbGUgd2l0aCBjY19lbmFibGVfYXJlbmFzIHNldCB0byB0cnVlLCBvdGhlcndpc2UgYQotICAv
LyBjb21waWxhdGlvbiBlcnJvciB3aWxsIG9jY3VyLgotICAvLwotICAvLyBSZXBlYXRlZEZpZWxk
IGFuZCBSZXBlYXRlZFB0ckZpZWxkIG1heSBhbHNvIGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSBv
biBhbgotICAvLyBhcmVuYSB3aXRoIHRoaXMgbWV0aG9kLgotICAvLwotICAvLyBUaGlzIGZ1bmN0
aW9uIGFsc28gYWNjZXB0cyBhbnkgdHlwZSBUIHRoYXQgc2F0aXNmaWVzIHRoZSBhcmVuYSBtZXNz
YWdlCi0gIC8vIGFsbG9jYXRpb24gcHJvdG9jb2wsIGRvY3VtZW50ZWQgYWJvdmUuCi0gIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUKLSAgc3RhdGlj
IFQqIENyZWF0ZU1lc3NhZ2UoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIHsKLSAg
ICBpZiAoYXJlbmEgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIG5ldyBUOwotICAgIH0gZWxzZSB7
Ci0gICAgICByZXR1cm4gYXJlbmEtPkNyZWF0ZU1lc3NhZ2VJbnRlcm5hbDxUPihzdGF0aWNfY2Fz
dDxUKj4oMCkpOwotICAgIH0KLSAgfQotCi0gIC8vIE9uZS1hcmd1bWVudCBmb3JtIG9mIENyZWF0
ZU1lc3NhZ2UuIFRoaXMgaXMgdXNlZnVsIGZvciBjb25zdHJ1Y3Rpbmcgb2JqZWN0cwotICAvLyB0
aGF0IGltcGxlbWVudCB0aGUgYXJlbmEgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gcHJvdG9jb2wgZGVz
Y3JpYmVkIGFib3ZlIGJ1dAotICAvLyB0YWtlIGFkZGl0aW9uYWwgY29uc3RydWN0b3IgYXJndW1l
bnRzLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQXJnPiBHT09HTEVfQVRUUklC
VVRFX0FMV0FZU19JTkxJTkUKLSAgc3RhdGljIFQqIENyZWF0ZU1lc3NhZ2UoOjpnb29nbGU6OnBy
b3RvYnVmOjpBcmVuYSogYXJlbmEsIGNvbnN0IEFyZyYgYXJnKSB7Ci0gICAgaWYgKGFyZW5hID09
IE5VTEwpIHsKLSAgICAgIHJldHVybiBuZXcgVChOVUxMLCBhcmcpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICByZXR1cm4gYXJlbmEtPkNyZWF0ZU1lc3NhZ2VJbnRlcm5hbDxUPihzdGF0aWNfY2FzdDxU
Kj4oMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcp
OwotICAgIH0KLSAgfQotCi0gIC8vIFR3by1hcmd1bWVudCBmb3JtIG9mIENyZWF0ZU1lc3NhZ2Uu
IFRoaXMgaXMgdXNlZnVsIGZvciBjb25zdHJ1Y3Rpbmcgb2JqZWN0cwotICAvLyB0aGF0IGltcGxl
bWVudCB0aGUgYXJlbmEgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gcHJvdG9jb2wgZGVzY3JpYmVkIGFi
b3ZlIGJ1dAotICAvLyB0YWtlIGFkZGl0aW9uYWwgY29uc3RydWN0b3IgYXJndW1lbnRzLgotICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMj4gR09PR0xF
X0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FCi0gIHN0YXRpYyBUKiBDcmVhdGVNZXNzYWdlKDo6Z29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBcmcxJiBhcmcxLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBcmcyJiBh
cmcyKSB7Ci0gICAgaWYgKGFyZW5hID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBuZXcgVChOVUxM
LCBhcmcxLCBhcmcyKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGFyZW5hLT5DcmVhdGVN
ZXNzYWdlSW50ZXJuYWw8VD4oc3RhdGljX2Nhc3Q8VCo+KDApLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMik7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gQVBJIHRvIGNyZWF0ZSBhbnkgb2JqZWN0cyBvbiB0aGUgYXJlbmEuIE5vdGUgdGhhdCBvbmx5
IHRoZSBvYmplY3Qgd2lsbAotICAvLyBiZSBjcmVhdGVkIG9uIHRoZSBhcmVuYTsgdGhlIHVuZGVy
bHlpbmcgcHRycyAoaW4gY2FzZSBvZiBhIHByb3RvMiBtZXNzYWdlKQotICAvLyB3aWxsIGJlIHN0
aWxsIGhlYXAgYWxsb2NhdGVkLiBQcm90byBtZXNzYWdlcyBzaG91bGQgdXN1YWxseSBiZSBhbGxv
Y2F0ZWQKLSAgLy8gd2l0aCBDcmVhdGVNZXNzYWdlPFQ+KCkgaW5zdGVhZC4KLSAgLy8KLSAgLy8g
Tm90ZSB0aGF0IGV2ZW4gaWYgVCBzYXRpc2ZpZXMgdGhlIGFyZW5hIG1lc3NhZ2UgY29uc3RydWN0
aW9uIHByb3RvY29sCi0gIC8vIChJbnRlcm5hbEFyZW5hQ29uc3RydWN0YWJsZV8gdHJhaXQgYW5k
IG9wdGlvbmFsIERlc3RydWN0b3JTa2lwcGFibGVfCi0gIC8vIHRyYWl0KSwgYXMgZGVzY3JpYmVk
IGFib3ZlLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGZvbGxvdyB0aGUgcHJvdG9jb2w7Ci0gIC8v
IGluc3RlYWQsIGl0IHRyZWF0cyBUIGFzIGEgYmxhY2stYm94IHR5cGUsIGp1c3QgYXMgaWYgaXQg
ZGlkIG5vdCBoYXZlIHRoZXNlCi0gIC8vIHRyYWl0cy4gU3BlY2lmaWNhbGx5LCBUJ3MgY29uc3Ry
dWN0b3IgYXJndW1lbnRzIHdpbGwgYWx3YXlzIGJlIG9ubHkgdGhvc2UKLSAgLy8gcGFzc2VkIHRv
IENyZWF0ZTxUPigpIC0tIG5vIGFkZGl0aW9uYWwgYXJlbmEgcG9pbnRlciBpcyBpbXBsaWNpdGx5
IGFkZGVkLgotICAvLyBGdXJ0aGVybW9yZSwgdGhlIGRlc3RydWN0b3Igd2lsbCBhbHdheXMgYmUg
Y2FsbGVkIGF0IGFyZW5hIGRlc3RydWN0aW9uIHRpbWUKLSAgLy8gKHVubGVzcyB0aGUgZGVzdHJ1
Y3RvciBpcyB0cml2aWFsKS4gSGVuY2UsIGZyb20gVCdzIHBvaW50IG9mIHZpZXcsIGl0IGlzIGFz
Ci0gIC8vIGlmIHRoZSBvYmplY3Qgd2VyZSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAgKGV4Y2VwdCB0
aGF0IHRoZSB1bmRlcmx5aW5nIG1lbW9yeQotICAvLyBpcyBvYnRhaW5lZCBmcm9tIHRoZSBhcmVu
YSkuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJ
TkUKLSAgc3RhdGljIFQqIENyZWF0ZSg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkg
ewotICAgIGlmIChhcmVuYSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gbmV3IFQoKTsKLSAgICB9
IGVsc2UgewotICAgICAgcmV0dXJuIGFyZW5hLT5DcmVhdGVJbnRlcm5hbDxUPihnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjxUPjo6dmFsdWUpOwotICAg
IH0KLSAgfQotCi0gIC8vIFZlcnNpb24gb2YgdGhlIGFib3ZlIHdpdGggb25lIGNvbnN0cnVjdG9y
IGFyZ3VtZW50IGZvciB0aGUgY3JlYXRlZCBvYmplY3QuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBBcmc+IEdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORQotICBzdGF0aWMg
VCogQ3JlYXRlKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hLCBjb25zdCBBcmcmIGFy
ZykgewotICAgIGlmIChhcmVuYSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gbmV3IFQoYXJnKTsK
LSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGFyZW5hLT5DcmVhdGVJbnRlcm5hbDxUPihnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjxUPjo6dmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyk7Ci0gICAgfQotICB9
Ci0KLSAgLy8gVmVyc2lvbiBvZiB0aGUgYWJvdmUgd2l0aCB0d28gY29uc3RydWN0b3IgYXJndW1l
bnRzIGZvciB0aGUgY3JlYXRlZCBvYmplY3QuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyPiBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUK
LSAgc3RhdGljIFQqIENyZWF0ZSg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSwgY29u
c3QgQXJnMSYgYXJnMSwgY29uc3QgQXJnMiYgYXJnMikgewotICAgIGlmIChhcmVuYSA9PSBOVUxM
KSB7Ci0gICAgICByZXR1cm4gbmV3IFQoYXJnMSwgYXJnMik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHJldHVybiBhcmVuYS0+Q3JlYXRlSW50ZXJuYWw8VD4oZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6Omhhc190cml2aWFsX2Rlc3RydWN0b3I8VD46OnZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyKTsKLSAgICB9Ci0gIH0KLQotICAvLyBWZXJz
aW9uIG9mIHRoZSBhYm92ZSB3aXRoIHRocmVlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyBmb3IgdGhl
IGNyZWF0ZWQKLSAgLy8gb2JqZWN0LgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
QXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMz4KLSAgR09PR0xFX0FUVFJJQlVURV9B
TFdBWVNfSU5MSU5FIHN0YXRpYyBUKiBDcmVhdGUoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSog
YXJlbmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QXJnMSYgYXJnMSwgY29uc3QgQXJnMiYgYXJnMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBBcmczJiBhcmczKSB7Ci0gICAgaWYgKGFyZW5hID09IE5V
TEwpIHsKLSAgICAgIHJldHVybiBuZXcgVChhcmcxLCBhcmcyLCBhcmczKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgcmV0dXJuIGFyZW5hLT5DcmVhdGVJbnRlcm5hbDxUPihnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjxUPjo6dmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMpOwotICAgIH0KLSAg
fQotCi0gIC8vIFZlcnNpb24gb2YgdGhlIGFib3ZlIHdpdGggZm91ciBjb25zdHJ1Y3RvciBhcmd1
bWVudHMgZm9yIHRoZSBjcmVhdGVkCi0gIC8vIG9iamVjdC4KLSAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsCi0gICAgICAg
ICAgICB0eXBlbmFtZSBBcmc0PgotICBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUgc3Rh
dGljIFQqIENyZWF0ZSg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBcmcxJiBhcmcxLCBjb25z
dCBBcmcyJiBhcmcyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEFyZzMmIGFyZzMsIGNvbnN0IEFyZzQmIGFyZzQpIHsKLSAgICBpZiAoYXJlbmEgPT0g
TlVMTCkgewotICAgICAgcmV0dXJuIG5ldyBUKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwotICAg
IH0gZWxzZSB7Ci0gICAgICByZXR1cm4gYXJlbmEtPkNyZWF0ZUludGVybmFsPFQ+KGdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPFQ+Ojp2YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwgYXJnMywgYXJn
NCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gVmVyc2lvbiBvZiB0aGUgYWJvdmUgd2l0aCBmaXZlIGNv
bnN0cnVjdG9yIGFyZ3VtZW50cyBmb3IgdGhlIGNyZWF0ZWQKLSAgLy8gb2JqZWN0LgotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUg
QXJnMywKLSAgICAgICAgICAgIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzU+Ci0gIEdPT0dM
RV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSBzdGF0aWMgVCogQ3JlYXRlKDo6Z29vZ2xlOjpwcm90
b2J1Zjo6QXJlbmEqIGFyZW5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEFyZzEmIGFyZzEsIGNvbnN0IEFyZzImIGFyZzIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnMyYgYXJnMywgY29uc3QgQXJn
NCYgYXJnNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBBcmc1JiBhcmc1KSB7Ci0gICAgaWYgKGFyZW5hID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBu
ZXcgVChhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKLSAgICB9IGVsc2UgewotICAgICAg
cmV0dXJuIGFyZW5hLT5DcmVhdGVJbnRlcm5hbDxUPihnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjxUPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwotICAgIH0K
LSAgfQotCi0gIC8vIFZlcnNpb24gb2YgdGhlIGFib3ZlIHdpdGggc2l4IGNvbnN0cnVjdG9yIGFy
Z3VtZW50cyBmb3IgdGhlIGNyZWF0ZWQKLSAgLy8gb2JqZWN0LgotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywKLSAgICAg
ICAgICAgIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzY+Ci0gIEdP
T0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSBzdGF0aWMgVCogQ3JlYXRlKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEFyZzEmIGFyZzEsIGNvbnN0IEFyZzImIGFyZzIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnMyYgYXJnMywgY29uc3Qg
QXJnNCYgYXJnNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBcmc1JiBhcmc1LCBjb25zdCBBcmc2JiBhcmc2KSB7Ci0gICAgaWYgKGFyZW5hID09IE5V
TEwpIHsKLSAgICAgIHJldHVybiBuZXcgVChhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBh
cmc2KTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGFyZW5hLT5DcmVhdGVJbnRlcm5hbDxU
Pihnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjxUPjo6
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIs
IGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpOwotICAgIH0KLSAgfQotCi0gIC8vIFZlcnNpb24gb2Yg
dGhlIGFib3ZlIHdpdGggc2V2ZW4gY29uc3RydWN0b3IgYXJndW1lbnRzIGZvciB0aGUgY3JlYXRl
ZAotICAvLyBvYmplY3QuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBcmcxLCB0
eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLAotICAgICAgICAgICAgdHlwZW5hbWUgQXJnNCwg
dHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNz4KLSAgR09PR0xFX0FU
VFJJQlVURV9BTFdBWVNfSU5MSU5FIHN0YXRpYyBUKiBDcmVhdGUoOjpnb29nbGU6OnByb3RvYnVm
OjpBcmVuYSogYXJlbmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQXJnMSYgYXJnMSwgY29uc3QgQXJnMiYgYXJnMiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBcmczJiBhcmczLCBjb25zdCBBcmc0JiBh
cmc0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFy
ZzUmIGFyZzUsIGNvbnN0IEFyZzYmIGFyZzYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQXJnNyYgYXJnNykgewotICAgIGlmIChhcmVuYSA9PSBOVUxM
KSB7Ci0gICAgICByZXR1cm4gbmV3IFQoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJn
NiwgYXJnNyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBhcmVuYS0+Q3JlYXRlSW50ZXJu
YWw8VD4oZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Omhhc190cml2aWFsX2Rlc3RydWN0b3I8
VD46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBh
cmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3KTsKLSAgICB9Ci0gIH0KLQotICAvLyBW
ZXJzaW9uIG9mIHRoZSBhYm92ZSB3aXRoIGVpZ2h0IGNvbnN0cnVjdG9yIGFyZ3VtZW50cyBmb3Ig
dGhlIGNyZWF0ZWQKLSAgLy8gb2JqZWN0LgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywKLSAgICAgICAgICAgIHR5cGVu
YW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsCi0g
ICAgICAgICAgICB0eXBlbmFtZSBBcmc4PgotICBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJ
TkUgc3RhdGljIFQqIENyZWF0ZSg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBcmcxJiBhcmcx
LCBjb25zdCBBcmcyJiBhcmcyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEFyZzMmIGFyZzMsIGNvbnN0IEFyZzQmIGFyZzQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnNSYgYXJnNSwgY29uc3QgQXJn
NiYgYXJnNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBBcmc3JiBhcmc3LCBjb25zdCBBcmc4JiBhcmc4KSB7Ci0gICAgaWYgKGFyZW5hID09IE5VTEwp
IHsKLSAgICAgIHJldHVybiBuZXcgVChhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2
LCBhcmc3LCBhcmc4KTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGFyZW5hLT5DcmVhdGVJ
bnRlcm5hbDxUPigKLSAgICAgICAgICBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6aGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjxUPjo6dmFsdWUsCi0gICAgICAgICAgYXJnMSwgYXJnMiwgYXJnMywg
YXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ3JlYXRl
IGFuIGFycmF5IG9mIG9iamVjdCB0eXBlIFQgb24gdGhlIGFyZW5hICp3aXRob3V0KiBpbnZva2lu
ZyB0aGUKLSAgLy8gY29uc3RydWN0b3Igb2YgVC4gSWYgYGFyZW5hYCBpcyBudWxsLCB0aGVuIHRo
ZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGZyZWVkCi0gIC8vIHdpdGggYGRlbGV0ZVtdIHg7YCAo
b3IgYDo6b3BlcmF0b3IgZGVsZXRlW10oeCk7YCkuCi0gIC8vIFRvIGVuc3VyZSBzYWZlIHVzZXMs
IHRoaXMgZnVuY3Rpb24gY2hlY2tzIGF0IGNvbXBpbGUgdGltZQotICAvLyAod2hlbiBjb21waWxl
ZCBhcyBDKysxMSkgdGhhdCBUIGlzIHRyaXZpYWxseSBkZWZhdWx0LWNvbnN0cnVjdGlibGUgYW5k
Ci0gIC8vIHRyaXZpYWxseSBkZXN0cnVjdGlibGUuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBH
T09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUKLSAgc3RhdGljIFQqIENyZWF0ZUFycmF5KDo6
Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hLCBzaXplX3QgbnVtX2VsZW1lbnRzKSB7Ci0g
ICAgR09PR0xFX0NIRUNLX0xFKG51bV9lbGVtZW50cywKLSAgICAgICAgICAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gc2l6ZW9mKFQpKQotICAgICAgICA8PCAiUmVxdWVz
dGVkIHNpemUgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbnRvIHNpemVfdC4iOwotICAgIGlmIChhcmVu
YSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KDo6b3BlcmF0b3IgbmV3
W10obnVtX2VsZW1lbnRzICogc2l6ZW9mKFQpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVy
biBhcmVuYS0+Q3JlYXRlSW50ZXJuYWxSYXdBcnJheTxUPihudW1fZWxlbWVudHMpOwotICAgIH0K
LSAgfQotCi0gIC8vIFJldHVybnMgdGhlIHRvdGFsIHNwYWNlIHVzZWQgYnkgdGhlIGFyZW5hLCB3
aGljaCBpcyB0aGUgc3VtcyBvZiB0aGUgc2l6ZXMKLSAgLy8gb2YgdGhlIHVuZGVybHlpbmcgYmxv
Y2tzLiBUaGUgdG90YWwgc3BhY2UgdXNlZCBtYXkgbm90IGluY2x1ZGUgdGhlIG5ldwotICAvLyBi
bG9ja3MgdGhhdCBhcmUgYWxsb2NhdGVkIGJ5IHRoaXMgYXJlbmEgZnJvbSBvdGhlciB0aHJlYWRz
IGNvbmN1cnJlbnRseQotICAvLyB3aXRoIHRoZSBjYWxsIHRvIHRoaXMgbWV0aG9kLgotICBHT09H
TEVfQVRUUklCVVRFX05PSU5MSU5FIHVpbnQ2NCBTcGFjZUFsbG9jYXRlZCgpIGNvbnN0OwotICAv
LyBBcyBhYm92ZSwgYnV0IGRvZXMgbm90IGluY2x1ZGUgYW55IGZyZWUgc3BhY2UgaW4gdW5kZXJs
eWluZyBibG9ja3MuCi0gIEdPT0dMRV9BVFRSSUJVVEVfTk9JTkxJTkUgdWludDY0IFNwYWNlVXNl
ZCgpIGNvbnN0OwotCi0gIC8vIENvbWJpbmVzIFNwYWNlQWxsb2NhdGVkIGFuZCBTcGFjZVVzZWQu
IFJldHVybnMgYSBwYWlyIG9mCi0gIC8vIDxzcGFjZV9hbGxvY2F0ZWQsIHNwYWNlX3VzZWQ+Lgot
ICBHT09HTEVfQVRUUklCVVRFX05PSU5MSU5FIHBhaXI8dWludDY0LCB1aW50NjQ+IFNwYWNlQWxs
b2NhdGVkQW5kVXNlZCgpIGNvbnN0OwotCi0gIC8vIEZyZWVzIGFsbCBzdG9yYWdlIGFsbG9jYXRl
ZCBieSB0aGlzIGFyZW5hIGFmdGVyIGNhbGxpbmcgZGVzdHJ1Y3RvcnMKLSAgLy8gcmVnaXN0ZXJl
ZCB3aXRoIE93bkRlc3RydWN0b3IoKSBhbmQgZnJlZWluZyBvYmplY3RzIHJlZ2lzdGVyZWQgd2l0
aCBPd24oKS4KLSAgLy8gQW55IG9iamVjdHMgYWxsb2NhdGVkIG9uIHRoaXMgYXJlbmEgYXJlIHVu
dXNhYmxlIGFmdGVyIHRoaXMgY2FsbC4gSXQgYWxzbwotICAvLyByZXR1cm5zIHRoZSB0b3RhbCBz
cGFjZSB1c2VkIGJ5IHRoZSBhcmVuYSB3aGljaCBpcyB0aGUgc3VtcyBvZiB0aGUgc2l6ZXMKLSAg
Ly8gb2YgdGhlIGFsbG9jYXRlZCBibG9ja3MuIFRoaXMgbWV0aG9kIGlzIG5vdCB0aHJlYWQtc2Fm
ZS4KLSAgR09PR0xFX0FUVFJJQlVURV9OT0lOTElORSB1aW50NjQgUmVzZXQoKTsKLQotICAvLyBB
ZGRzIHxvYmplY3R8IHRvIGEgbGlzdCBvZiBoZWFwLWFsbG9jYXRlZCBvYmplY3RzIHRvIGJlIGZy
ZWVkIHdpdGggfGRlbGV0ZXwKLSAgLy8gd2hlbiB0aGUgYXJlbmEgaXMgZGVzdHJveWVkIG9yIHJl
c2V0LgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gR09PR0xFX0FUVFJJQlVURV9OT0lOTElORQot
ICB2b2lkIE93bihUKiBvYmplY3QpIHsKLSAgICBPd25JbnRlcm5hbChvYmplY3QsIGdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjppc19jb252ZXJ0aWJsZTxUKiwgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlKj4oKSk7Ci0gIH0KLQotICAvLyBBZGRzIHxvYmplY3R8IHRvIGEgbGlzdCBvZiBv
YmplY3RzIHdob3NlIGRlc3RydWN0b3JzIHdpbGwgYmUgbWFudWFsbHkKLSAgLy8gY2FsbGVkIHdo
ZW4gdGhlIGFyZW5hIGlzIGRlc3Ryb3llZCBvciByZXNldC4gVGhpcyBkaWZmZXJzIGZyb20gT3du
KCkgaW4KLSAgLy8gdGhhdCBpdCBkb2VzIG5vdCBmcmVlIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSB3
aXRoIHxkZWxldGV8OyBoZW5jZSwgaXQgaXMKLSAgLy8gbm9ybWFsbHkgb25seSB1c2VkIGZvciBv
YmplY3RzIHRoYXQgYXJlIHBsYWNlbWVudC1uZXdlZCBpbnRvCi0gIC8vIGFyZW5hLWFsbG9jYXRl
ZCBtZW1vcnkuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBHT09HTEVfQVRUUklCVVRFX05PSU5M
SU5FCi0gIHZvaWQgT3duRGVzdHJ1Y3RvcihUKiBvYmplY3QpIHsKLSAgICBpZiAob2JqZWN0ICE9
IE5VTEwpIHsKLSAgICAgIEFkZExpc3ROb2RlKG9iamVjdCwgJmludGVybmFsOjphcmVuYV9kZXN0
cnVjdF9vYmplY3Q8VD4pOwotICAgIH0KLSAgfQotCi0gIC8vIEFkZHMgYSBjdXN0b20gbWVtYmVy
IGZ1bmN0aW9uIG9uIGFuIG9iamVjdCB0byB0aGUgbGlzdCBvZiBkZXN0cnVjdG9ycyB0aGF0Ci0g
IC8vIHdpbGwgYmUgbWFudWFsbHkgY2FsbGVkIHdoZW4gdGhlIGFyZW5hIGlzIGRlc3Ryb3llZCBv
ciByZXNldC4gVGhpcyBkaWZmZXJzCi0gIC8vIGZyb20gT3duRGVzdHJ1Y3RvcigpIGluIHRoYXQg
YW55IG1lbWJlciBmdW5jdGlvbiBtYXkgYmUgc3BlY2lmaWVkLCBub3Qgb25seQotICAvLyB0aGUg
Y2xhc3MgZGVzdHJ1Y3Rvci4KLSAgR09PR0xFX0FUVFJJQlVURV9OT0lOTElORSB2b2lkIE93bkN1
c3RvbURlc3RydWN0b3Iodm9pZCogb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKCpkZXN0cnVjdCkodm9pZCopKSB7Ci0gICAgQWRkTGlz
dE5vZGUob2JqZWN0LCBkZXN0cnVjdCk7Ci0gIH0KLQotICAvLyBSZXRyaWV2ZXMgdGhlIGFyZW5h
IGFzc29jaWF0ZWQgd2l0aCB8dmFsdWV8IGlmIHx2YWx1ZXwgaXMgYW4gYXJlbmEtY2FwYWJsZQot
ICAvLyBtZXNzYWdlLCBvciBOVUxMIG90aGVyd2lzZS4gVGhpcyBkaWZmZXJzIGZyb20gdmFsdWUt
PkdldEFyZW5hKCkgaW4gdGhhdCB0aGUKLSAgLy8gbGF0dGVyIGlzIGEgdmlydHVhbCBjYWxsLCB3
aGlsZSB0aGlzIG1ldGhvZCBpcyBhIHRlbXBsYXRlZCBjYWxsIHRoYXQKLSAgLy8gcmVzb2x2ZXMg
YXQgY29tcGlsZS10aW1lLgotICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBHT09HTEVfQVRUUklCVVRF
X0FMV0FZU19JTkxJTkUKLSAgc3RhdGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFy
ZW5hKGNvbnN0IFQqIHZhbHVlKSB7Ci0gICAgcmV0dXJuIEdldEFyZW5hSW50ZXJuYWwodmFsdWUs
IHN0YXRpY19jYXN0PFQqPigwKSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHN0cnVjdCBJbnRlcm5h
bElzQXJlbmFDb25zdHJ1Y3RhYmxlSGVscGVyIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBjaGFyIEFyZW5hQ29uc3RydWN0YWJsZSgKLSAgICAgICAgY29uc3QgdHlwZW5h
bWUgVTo6SW50ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfKik7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgZG91YmxlIEFyZW5hQ29uc3RydWN0YWJsZSguLi4pOwotICB9Owot
Ci0gcHVibGljOgotICAvLyBIZWxwZXIgdHlwZXRyYWl0IHRoYXQgaW5kaWNhdGVzIHN1cHBvcnQg
Zm9yIGFyZW5hcyBpbiBhIHR5cGUgVCBhdCBjb21waWxlCi0gIC8vIHRpbWUuIFRoaXMgaXMgcHVi
bGljIG9ubHkgdG8gYWxsb3cgY29uc3RydWN0aW9uIG9mIGhpZ2hlci1sZXZlbCB0ZW1wbGF0ZWQK
LSAgLy8gdXRpbGl0aWVzLiBpc19hcmVuYV9jb25zdHJ1Y3RhYmxlPFQ+Ojp2YWx1ZSBpcyB0cnVl
IGlmIHRoZSBtZXNzYWdlIHR5cGUgVAotICAvLyBoYXMgYXJlbmEgc3VwcG9ydCBlbmFibGVkLCBh
bmQgZmFsc2Ugb3RoZXJ3aXNlLgotICAvLwotICAvLyBUaGlzIGlzIGluc2lkZSBBcmVuYSBiZWNh
dXNlIG9ubHkgQXJlbmEgaGFzIHRoZSBmcmllbmQgcmVsYXRpb25zaGlwcwotICAvLyBuZWNlc3Nh
cnkgdG8gc2VlIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRlZCBjb2RlIHRyYWl0cy4KLSAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci0gIHN0cnVjdCBpc19hcmVuYV9jb25zdHJ1Y3RhYmxlCi0gICAgICA6
IHB1YmxpYyBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6aW50ZWdyYWxfY29uc3RhbnQ8Ci0g
ICAgICAgICAgICBib29sLCBzaXplb2YoSW50ZXJuYWxJc0FyZW5hQ29uc3RydWN0YWJsZUhlbHBl
cjo6QXJlbmFDb25zdHJ1Y3RhYmxlPAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQ+
KHN0YXRpY19jYXN0PGNvbnN0IFQqPigwKSkpID09IHNpemVvZihjaGFyKT4gewotICB9OwotCi0g
cHJpdmF0ZToKLSAgLy8gQmxvY2tzIGFyZSB2YXJpYWJsZSBsZW5ndGggbWFsbG9jLWVkIG9iamVj
dHMuICBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZQotICAvLyBkZXNjcmliZXMgdGhlIGNvbW1vbiBo
ZWFkZXIgZm9yIGFsbCBibG9ja3MuCi0gIHN0cnVjdCBCbG9jayB7Ci0gICAgdm9pZCogb3duZXI7
ICAgLy8gJlRocmVhZENhY2hlIG9mIHRocmVhZCB0aGF0IG93bnMgdGhpcyBibG9jaywgb3IKLSAg
ICAgICAgICAgICAgICAgICAvLyAmdGhpcy0+b3duZXIgaWYgbm90IHlldCBvd25lZCBieSBhIHRo
cmVhZC4KLSAgICBCbG9jayogbmV4dDsgICAvLyBOZXh0IGJsb2NrIGluIGFyZW5hIChtYXkgaGF2
ZSBkaWZmZXJlbnQgb3duZXIpCi0gICAgLy8gKChjaGFyKikgJmJsb2NrKSArIHBvcyBpcyBuZXh0
IGF2YWlsYWJsZSBieXRlLiBJdCBpcyBhbHdheXMKLSAgICAvLyBhbGlnbmVkIGF0IGEgbXVsdGlw
bGUgb2YgOCBieXRlcy4KLSAgICBzaXplX3QgcG9zOwotICAgIHNpemVfdCBzaXplOyAgLy8gdG90
YWwgc2l6ZSBvZiB0aGUgYmxvY2suCi0gICAgR09PR0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5F
IHNpemVfdCBhdmFpbCgpIGNvbnN0IHsgcmV0dXJuIHNpemUgLSBwb3M7IH0KLSAgICAvLyBkYXRh
IGZvbGxvd3MKLSAgfTsKLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBmcmllbmQgY2xhc3Mg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJpY1R5cGVIYW5kbGVyOwotICBmcmll
bmQgY2xhc3MgTW9ja0FyZW5hOyAgICAgICAgICAgICAgLy8gRm9yIHVuaXQtdGVzdGluZy4KLSAg
ZnJpZW5kIGNsYXNzIGludGVybmFsOjpBcmVuYVN0cmluZzsgIC8vIEZvciBBbGxvY2F0ZUFsaWdu
ZWQuCi0gIGZyaWVuZCBjbGFzcyBpbnRlcm5hbDo6TGF6eUZpZWxkOyAgICAvLyBGb3IgQ3JlYXRl
TWF5YmVNZXNzYWdlLgotCi0gIHN0cnVjdCBUaHJlYWRDYWNoZSB7Ci0gICAgLy8gVGhlIFRocmVh
ZENhY2hlIGlzIGNvbnNpZGVyZWQgdmFsaWQgYXMgbG9uZyBhcyB0aGlzIG1hdGNoZXMgdGhlCi0g
ICAgLy8gbGlmZWN5Y2xlX2lkIG9mIHRoZSBhcmVuYSBiZWluZyB1c2VkLgotICAgIGludDY0IGxh
c3RfbGlmZWN5Y2xlX2lkX3NlZW47Ci0gICAgQmxvY2sqIGxhc3RfYmxvY2tfdXNlZF87Ci0gIH07
Ci0KLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrSGVhZGVyU2l6ZSA9IHNpemVvZihCbG9jayk7Ci0g
IHN0YXRpYyBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6U2VxdWVuY2VOdW1iZXIgbGlmZWN5
Y2xlX2lkX2dlbmVyYXRvcl87Ci0jaWYgZGVmaW5lZChHT09HTEVfUFJPVE9CVUZfTk9fVEhSRUFE
TE9DQUwpCi0gIC8vIEFuZHJvaWQgbmRrIGRvZXMgbm90IHN1cHBvcnQgR09PR0xFX1RIUkVBRF9M
T0NBTCBrZXl3b3JkIHNvIHdlIHVzZSBhIGN1c3RvbSB0aHJlYWQKLSAgLy8gbG9jYWwgc3RvcmFn
ZSBjbGFzcyB3ZSBpbXBsZW1lbnRlZC4KLSAgLy8gaU9TIGFsc28gZG9lcyBub3Qgc3VwcG9ydCB0
aGUgR09PR0xFX1RIUkVBRF9MT0NBTCBrZXl3b3JkLgotICBzdGF0aWMgVGhyZWFkQ2FjaGUmIHRo
cmVhZF9jYWNoZSgpOwotI2VsaWYgZGVmaW5lZChQUk9UT0JVRl9VU0VfRExMUykKLSAgLy8gVGhy
ZWFkIGxvY2FsIHZhcmlhYmxlcyBjYW5ub3QgYmUgZXhwb3NlZCB0aHJvdWdoIERMTCBpbnRlcmZh
Y2UgYnV0IHdlIGNhbgotICAvLyB3cmFwIHRoZW0gaW4gc3RhdGljIGZ1bmN0aW9ucy4KLSAgc3Rh
dGljIFRocmVhZENhY2hlJiB0aHJlYWRfY2FjaGUoKTsKLSNlbHNlCi0gIHN0YXRpYyBHT09HTEVf
VEhSRUFEX0xPQ0FMIFRocmVhZENhY2hlIHRocmVhZF9jYWNoZV87Ci0gIHN0YXRpYyBUaHJlYWRD
YWNoZSYgdGhyZWFkX2NhY2hlKCkgeyByZXR1cm4gdGhyZWFkX2NhY2hlXzsgfQotI2VuZGlmCi0K
LSAgLy8gU0ZJTkFFIGZvciBza2lwcGluZyBhZGRpdGlvbiB0byBkZWxldGUgbGlzdCBmb3IgYSBt
ZXNzYWdlIHR5cGUgd2hlbiBjcmVhdGVkCi0gIC8vIHdpdGggQ3JlYXRlTWVzc2FnZS4gVGhpcyBp
cyBtYWlubHkgdG8gc2tpcCBwcm90bzIvcHJvdG8xIG1lc3NhZ2Ugb2JqZWN0cwotICAvLyB3aXRo
IGNjX2VuYWJsZV9hcmVuYXM9dHJ1ZSBmcm9tIGJlaW5nIHBhcnQgb2YgdGhlIGRlbGV0ZSBsaXN0
LiBBbHNvLCBub3RlLAotICAvLyBjb21waWxlciB3aWxsIG9wdGltaXplIG91dCB0aGUgYnJhbmNo
IGluIENyZWF0ZUludGVybmFsPFQ+LgotICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICBzdGF0aWMg
aW5saW5lIGJvb2wgU2tpcERlbGV0ZUxpc3QodHlwZW5hbWUgVDo6RGVzdHJ1Y3RvclNraXBwYWJs
ZV8qKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBGb3IgbWVzc2FnZSBvYmplY3Rz
IHRoYXQgZG9uJ3QgaGF2ZSB0aGUgRGVzdHJ1Y3RvclNraXBwYWJsZV8gdHJhaXQsIHdlCi0gIC8v
IGFsd2F5cyBhZGQgdG8gdGhlIGRlbGV0ZSBsaXN0LgotICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICBzdGF0aWMgaW5saW5lIGJvb2wgU2tpcERlbGV0ZUxpc3QoLi4uKSB7Ci0gICAgcmV0dXJuIGdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPFQ+Ojp2YWx1
ZTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgc3RydWN0IEludGVybmFsSXNEZXN0cnVjdG9yU2tpcHBh
YmxlSGVscGVyIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBjaGFyIERl
c3RydWN0b3JTa2lwcGFibGUoCi0gICAgICAgIGNvbnN0IHR5cGVuYW1lIFU6OkRlc3RydWN0b3JT
a2lwcGFibGVfKik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgZG91Ymxl
IERlc3RydWN0b3JTa2lwcGFibGUoLi4uKTsKLSAgfTsKLQotIHB1YmxpYzoKLSAgLy8gSGVscGVy
IHR5cGV0cmFpdCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBkZXNjdHJ1Y3RvciBvZiB0eXBl
IFQgc2hvdWxkIGJlCi0gIC8vIGNhbGxlZCB3aGVuIGFyZW5hIGlzIGRlc3Ryb3llZCBhdCBjb21w
aWxlIHRpbWUuIFRoaXMgaXMgb25seSB0byBhbGxvdwotICAvLyBjb25zdHJ1Y3Rpb24gb2YgaGln
aGVyLWxldmVsIHRlbXBsYXRlZCB1dGlsaXRpZXMuCi0gIC8vIGlzX2Rlc3RydWN0b3Jfc2tpcHBh
YmxlPFQ+Ojp2YWx1ZSBpcyB0cnVlIGlmIHRoZSBkZXN0cnVjdG9yIG9mIHRoZSBtZXNzYWdlCi0g
IC8vIHR5cGUgVCBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGFyZW5hIGlzIGRlc3Ryb3llZCBv
ciBmYWxzZSBvdGhlcndpc2UuCi0gIC8vIFRoaXMgaXMgaW5zaWRlIEFyZW5hIGJlY2F1c2Ugb25s
eSBBcmVuYSBoYXMgdGhlIGZyaWVuZCByZWxhdGlvbnNoaXBzCi0gIC8vIG5lY2Vzc2FyeSB0byBz
ZWUgdGhlIHVuZGVybHlpbmcgZ2VuZXJhdGVkIGNvZGUgdHJhaXRzLgotICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICBzdHJ1Y3QgaXNfZGVzdHJ1Y3Rvcl9za2lwcGFibGUKLSAgICAgIDogcHVibGlj
IGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjppbnRlZ3JhbF9jb25zdGFudDwKLSAgICAgICAg
ICAgIGJvb2wsCi0gICAgICAgICAgICBzaXplb2YoSW50ZXJuYWxJc0Rlc3RydWN0b3JTa2lwcGFi
bGVIZWxwZXI6OkRlc3RydWN0b3JTa2lwcGFibGU8Ci0gICAgICAgICAgICAgICAgICAgY29uc3Qg
VD4oc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KDApKSkgPT0gc2l6ZW9mKGNoYXIpIHx8Ci0gICAgICAg
ICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Omhhc190cml2aWFsX2Rlc3RydWN0
b3I8VD46OnZhbHVlPiB7fTsKLQotICAvLyBDcmVhdGVNZXNzYWdlPFQ+IHJlcXVpcmVzIHRoYXQg
VCBzdXBwb3J0cyBhcmVuYXMsIGJ1dCB0aGlzIHByaXZhdGUgbWV0aG9kCi0gIC8vIHdvcmtzIHdo
ZXRoZXIgb3Igbm90IFQgc3VwcG9ydHMgYXJlbmFzLiBUaGVzZSBhcmUgbm90IGV4cG9zZWQgdG8g
dXNlciBjb2RlCi0gIC8vIGFzIGl0IGNhbiBjYXVzZSBjb25mdXNpbmcgQVBJIHVzYWdlcywgYW5k
IGVuZCB1cCBoYXZpbmcgZG91YmxlIGZyZWUgaW4KLSAgLy8gdXNlciBjb2RlLiBUaGVzZSBhcmUg
dXNlZCBvbmx5IGludGVybmFsbHkgZnJvbSBMYXp5RmllbGQgYW5kIFJlcGVhdGVkCi0gIC8vIGZp
ZWxkcywgc2luY2UgdGhleSBhcmUgZGVzaWduZWQgdG8gd29yayBpbiBhbGwgbW9kZSBjb21iaW5h
dGlvbnMuCi0gIHRlbXBsYXRlPHR5cGVuYW1lIE1zZz4gR09PR0xFX0FUVFJJQlVURV9BTFdBWVNf
SU5MSU5FCi0gIHN0YXRpYyBNc2cqIENyZWF0ZU1heWJlTWVzc2FnZSgKLSAgICAgIEFyZW5hKiBh
cmVuYSwgdHlwZW5hbWUgTXNnOjpJbnRlcm5hbEFyZW5hQ29uc3RydWN0YWJsZV8qKSB7Ci0gICAg
cmV0dXJuIENyZWF0ZU1lc3NhZ2U8TXNnPihhcmVuYSk7Ci0gIH0KLQotICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUKLSAgc3RhdGljIFQqIENyZWF0
ZU1heWJlTWVzc2FnZShBcmVuYSogYXJlbmEsIC4uLikgewotICAgIHJldHVybiBDcmVhdGU8VD4o
YXJlbmEpOwotICB9Ci0KLSAgLy8gSnVzdCBhbGxvY2F0ZSB0aGUgcmVxdWlyZWQgc2l6ZSBmb3Ig
dGhlIGdpdmVuIHR5cGUgYXNzdW1pbmcgdGhlCi0gIC8vIHR5cGUgaGFzIGEgdHJpdmlhbCBjb25z
dHJ1Y3Rvci4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gR09PR0xFX0FUVFJJQlVURV9BTFdBWVNf
SU5MSU5FCi0gIFQqIENyZWF0ZUludGVybmFsUmF3QXJyYXkoc2l6ZV90IG51bV9lbGVtZW50cykg
ewotICAgIEdPT0dMRV9DSEVDS19MRShudW1fZWxlbWVudHMsCi0gICAgICAgICAgICAgc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSkKLSAgICAgICAgPDwgIlJl
cXVlc3RlZCBzaXplIGlzIHRvbyBsYXJnZSB0byBmaXQgaW50byBzaXplX3QuIjsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VCo+KAotICAgICAgICBBbGxvY2F0ZUFsaWduZWQoUlRUSV9UWVBFX0lE
KFQpLCBzaXplb2YoVCkgKiBudW1fZWxlbWVudHMpKTsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUKLSAgVCogQ3JlYXRlSW50ZXJu
YWwoYm9vbCBza2lwX2V4cGxpY2l0X293bmVyc2hpcCkgewotICAgIFQqIHQgPSBuZXcgKEFsbG9j
YXRlQWxpZ25lZChSVFRJX1RZUEVfSUQoVCksIHNpemVvZihUKSkpIFQoKTsKLSAgICBpZiAoIXNr
aXBfZXhwbGljaXRfb3duZXJzaGlwKSB7Ci0gICAgICBBZGRMaXN0Tm9kZSh0LCAmaW50ZXJuYWw6
OmFyZW5hX2Rlc3RydWN0X29iamVjdDxUPik7Ci0gICAgfQotICAgIHJldHVybiB0OwotICB9Ci0K
LSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFyZz4gR09PR0xFX0FUVFJJQlVURV9B
TFdBWVNfSU5MSU5FCi0gIFQqIENyZWF0ZUludGVybmFsKGJvb2wgc2tpcF9leHBsaWNpdF9vd25l
cnNoaXAsIGNvbnN0IEFyZyYgYXJnKSB7Ci0gICAgVCogdCA9IG5ldyAoQWxsb2NhdGVBbGlnbmVk
KFJUVElfVFlQRV9JRChUKSwgc2l6ZW9mKFQpKSkgVChhcmcpOwotICAgIGlmICghc2tpcF9leHBs
aWNpdF9vd25lcnNoaXApIHsKLSAgICAgIEFkZExpc3ROb2RlKHQsICZpbnRlcm5hbDo6YXJlbmFf
ZGVzdHJ1Y3Rfb2JqZWN0PFQ+KTsKLSAgICB9Ci0gICAgcmV0dXJuIHQ7Ci0gIH0KLQotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMj4gR09PR0xFX0FU
VFJJQlVURV9BTFdBWVNfSU5MSU5FCi0gIFQqIENyZWF0ZUludGVybmFsKAotICAgICAgYm9vbCBz
a2lwX2V4cGxpY2l0X293bmVyc2hpcCwgY29uc3QgQXJnMSYgYXJnMSwgY29uc3QgQXJnMiYgYXJn
MikgewotICAgIFQqIHQgPSBuZXcgKEFsbG9jYXRlQWxpZ25lZChSVFRJX1RZUEVfSUQoVCksIHNp
emVvZihUKSkpIFQoYXJnMSwgYXJnMik7Ci0gICAgaWYgKCFza2lwX2V4cGxpY2l0X293bmVyc2hp
cCkgewotICAgICAgQWRkTGlzdE5vZGUodCwgJmludGVybmFsOjphcmVuYV9kZXN0cnVjdF9vYmpl
Y3Q8VD4pOwotICAgIH0KLSAgICByZXR1cm4gdDsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczPgotICBHT09H
TEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUgVCogQ3JlYXRlSW50ZXJuYWwoYm9vbCBza2lwX2V4
cGxpY2l0X293bmVyc2hpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQXJnMSYgYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQXJnMiYgYXJnMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQXJnMyYgYXJnMykgewotICAgIFQqIHQgPSBuZXcgKEFs
bG9jYXRlQWxpZ25lZChSVFRJX1RZUEVfSUQoVCksIHNpemVvZihUKSkpCi0gICAgICAgIFQoYXJn
MSwgYXJnMiwgYXJnMyk7Ci0gICAgaWYgKCFza2lwX2V4cGxpY2l0X293bmVyc2hpcCkgewotICAg
ICAgQWRkTGlzdE5vZGUodCwgJmludGVybmFsOjphcmVuYV9kZXN0cnVjdF9vYmplY3Q8VD4pOwot
ICAgIH0KLSAgICByZXR1cm4gdDsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLAotICAgICAgICAgICAgdHlw
ZW5hbWUgQXJnND4KLSAgR09PR0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FIFQqIENyZWF0ZUlu
dGVybmFsKGJvb2wgc2tpcF9leHBsaWNpdF9vd25lcnNoaXAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZzEmIGFyZzEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZzImIGFyZzIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZzMmIGFyZzMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZzQmIGFy
ZzQpIHsKLSAgICBUKiB0ID0gbmV3IChBbGxvY2F0ZUFsaWduZWQoUlRUSV9UWVBFX0lEKFQpLCBz
aXplb2YoVCkpKQotICAgICAgICBUKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwotICAgIGlmICgh
c2tpcF9leHBsaWNpdF9vd25lcnNoaXApIHsKLSAgICAgIEFkZExpc3ROb2RlKHQsICZpbnRlcm5h
bDo6YXJlbmFfZGVzdHJ1Y3Rfb2JqZWN0PFQ+KTsKLSAgICB9Ci0gICAgcmV0dXJuIHQ7Ci0gIH0K
LQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwg
dHlwZW5hbWUgQXJnMywKLSAgICAgICAgICAgIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzU+
Ci0gIEdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSBUKiBDcmVhdGVJbnRlcm5hbChib29s
IHNraXBfZXhwbGljaXRfb3duZXJzaGlwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBcmcxJiBhcmcxLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBcmcyJiBhcmcyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBcmczJiBhcmczLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBcmc0JiBhcmc0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBcmc1JiBhcmc1KSB7
Ci0gICAgVCogdCA9IG5ldyAoQWxsb2NhdGVBbGlnbmVkKFJUVElfVFlQRV9JRChUKSwgc2l6ZW9m
KFQpKSkKLSAgICAgICAgVChhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKLSAgICBpZiAo
IXNraXBfZXhwbGljaXRfb3duZXJzaGlwKSB7Ci0gICAgICBBZGRMaXN0Tm9kZSh0LCAmaW50ZXJu
YWw6OmFyZW5hX2Rlc3RydWN0X29iamVjdDxUPik7Ci0gICAgfQotICAgIHJldHVybiB0OwotICB9
Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIs
IHR5cGVuYW1lIEFyZzMsCi0gICAgICAgICAgICB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1
LCB0eXBlbmFtZSBBcmc2PgotICBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUgVCogQ3Jl
YXRlSW50ZXJuYWwoYm9vbCBza2lwX2V4cGxpY2l0X293bmVyc2hpcCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnMSYgYXJnMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnMiYgYXJnMiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnMyYgYXJn
MywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJn
NCYgYXJnNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQXJnNSYgYXJnNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQXJnNiYgYXJnNikgewotICAgIFQqIHQgPSBuZXcgKEFsbG9jYXRlQWxpZ25lZChS
VFRJX1RZUEVfSUQoVCksIHNpemVvZihUKSkpCi0gICAgICAgIFQoYXJnMSwgYXJnMiwgYXJnMywg
YXJnNCwgYXJnNSwgYXJnNik7Ci0gICAgaWYgKCFza2lwX2V4cGxpY2l0X293bmVyc2hpcCkgewot
ICAgICAgQWRkTGlzdE5vZGUodCwgJmludGVybmFsOjphcmVuYV9kZXN0cnVjdF9vYmplY3Q8VD4p
OwotICAgIH0KLSAgICByZXR1cm4gdDsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLAotICAgICAgICAgICAg
dHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJn
Nz4KLSAgR09PR0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FIFQqIENyZWF0ZUludGVybmFsKGJv
b2wgc2tpcF9leHBsaWNpdF9vd25lcnNoaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEFyZzEmIGFyZzEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZzImIGFyZzIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZzMmIGFyZzMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZzQmIGFyZzQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZzUmIGFyZzUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZzYm
IGFyZzYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEFyZzcmIGFyZzcpIHsKLSAgICBUKiB0ID0gbmV3IChBbGxvY2F0ZUFsaWduZWQoUlRUSV9UWVBF
X0lEKFQpLCBzaXplb2YoVCkpKQotICAgICAgICBUKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFy
ZzUsIGFyZzYsIGFyZzcpOwotICAgIGlmICghc2tpcF9leHBsaWNpdF9vd25lcnNoaXApIHsKLSAg
ICAgIEFkZExpc3ROb2RlKHQsICZpbnRlcm5hbDo6YXJlbmFfZGVzdHJ1Y3Rfb2JqZWN0PFQ+KTsK
LSAgICB9Ci0gICAgcmV0dXJuIHQ7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywKLSAgICAgICAgICAgIHR5
cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcs
Ci0gICAgICAgICAgICB0eXBlbmFtZSBBcmc4PgotICBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19J
TkxJTkUgVCogQ3JlYXRlSW50ZXJuYWwoYm9vbCBza2lwX2V4cGxpY2l0X293bmVyc2hpcCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnMSYgYXJn
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJn
MiYgYXJnMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQXJnMyYgYXJnMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQXJnNCYgYXJnNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQXJnNSYgYXJnNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQXJnNiYgYXJnNiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnNyYgYXJnNywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnOCYgYXJnOCkgewotICAgIFQqIHQg
PSBuZXcgKEFsbG9jYXRlQWxpZ25lZChSVFRJX1RZUEVfSUQoVCksIHNpemVvZihUKSkpCi0gICAg
ICAgIFQoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCk7Ci0g
ICAgaWYgKCFza2lwX2V4cGxpY2l0X293bmVyc2hpcCkgewotICAgICAgQWRkTGlzdE5vZGUodCwg
JmludGVybmFsOjphcmVuYV9kZXN0cnVjdF9vYmplY3Q8VD4pOwotICAgIH0KLSAgICByZXR1cm4g
dDsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBHT09HTEVfQVRUUklCVVRFX0FMV0FZ
U19JTkxJTkUKLSAgVCogQ3JlYXRlTWVzc2FnZUludGVybmFsKHR5cGVuYW1lIFQ6OkludGVybmFs
QXJlbmFDb25zdHJ1Y3RhYmxlXyopIHsKLSAgICByZXR1cm4gQ3JlYXRlSW50ZXJuYWw8VCwgQXJl
bmEqPihTa2lwRGVsZXRlTGlzdDxUPihzdGF0aWNfY2FzdDxUKj4oMCkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMpOwotICB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEFyZz4gR09PR0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FCi0gIFQq
IENyZWF0ZU1lc3NhZ2VJbnRlcm5hbCh0eXBlbmFtZSBUOjpJbnRlcm5hbEFyZW5hQ29uc3RydWN0
YWJsZV8qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnJiBhcmcpIHsKLSAg
ICByZXR1cm4gQ3JlYXRlSW50ZXJuYWw8VCwgQXJlbmEqPihTa2lwRGVsZXRlTGlzdDxUPihzdGF0
aWNfY2FzdDxUKj4oMCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMsIGFyZyk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQXJnMSwg
dHlwZW5hbWUgQXJnMj4gR09PR0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FCi0gIFQqIENyZWF0
ZU1lc3NhZ2VJbnRlcm5hbCh0eXBlbmFtZSBUOjpJbnRlcm5hbEFyZW5hQ29uc3RydWN0YWJsZV8q
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXJnMSYgYXJnMSwgY29uc3QgQXJn
MiYgYXJnMikgewotICAgIHJldHVybiBDcmVhdGVJbnRlcm5hbDxULCBBcmVuYSo+KFNraXBEZWxl
dGVMaXN0PFQ+KHN0YXRpY19jYXN0PFQqPigwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcywgYXJnMSwgYXJnMik7Ci0gIH0KLQotICAvLyBDcmVhdGVJbkFyZW5h
U3RvcmFnZSBpcyB1c2VkIHRvIGltcGxlbWVudCBtYXAgZmllbGQuIFdpdGhvdXQgaXQsCi0gIC8v
IGdvb2dsZTo6cHJvdG9idWY6Ok1hcCBuZWVkIHRvIGNhbGwgZ2VuZXJhdGVkIG1lc3NhZ2UncyBw
cm90ZWN0ZWQgYXJlbmEgY29uc3RydWN0b3IsCi0gIC8vIHdoaWNoIG5lZWRzIHRvIGRlY2xhcmUg
Z29vZ2xlOjpwcm90b2J1Zjo6TWFwIGFzIGZyaWVuZCBvZiBnZW5lcmF0ZWQgbWVzc2FnZS4KLSAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0YXRpYyB2b2lkIENyZWF0ZUluQXJlbmFTdG9yYWdl
KFQqIHB0ciwgQXJlbmEqIGFyZW5hKSB7Ci0gICAgQ3JlYXRlSW5BcmVuYVN0b3JhZ2VJbnRlcm5h
bChwdHIsIGFyZW5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg
aXNfYXJlbmFfY29uc3RydWN0YWJsZTxUPjo6dHlwZSgpKTsKLSAgICBSZWdpc3RlckRlc3RydWN0
b3JJbnRlcm5hbChwdHIsIGFyZW5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIGlzX2Rlc3RydWN0b3Jfc2tpcHBhYmxlPFQ+Ojp0eXBlKCkpOwotICB9Ci0KLSAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0YXRpYyB2b2lkIENyZWF0ZUluQXJlbmFTdG9yYWdlSW50
ZXJuYWwoCi0gICAgICBUKiBwdHIsIEFyZW5hKiBhcmVuYSwgZ29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OnRydWVfdHlwZSkgewotICAgIG5ldyAocHRyKSBUKGFyZW5hKTsKLSAgfQotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3RhdGljIHZvaWQgQ3JlYXRlSW5BcmVuYVN0b3JhZ2VJbnRl
cm5hbCgKLSAgICAgIFQqIHB0ciwgQXJlbmEqIGFyZW5hLCBnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6ZmFsc2VfdHlwZSkgewotICAgIG5ldyAocHRyKSBUOwotICB9Ci0KLSAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci0gIHN0YXRpYyB2b2lkIFJlZ2lzdGVyRGVzdHJ1Y3RvckludGVybmFsKAot
ICAgICAgVCogcHRyLCBBcmVuYSogYXJlbmEsIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjp0
cnVlX3R5cGUpIHt9Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBzdGF0aWMgdm9pZCBSZWdp
c3RlckRlc3RydWN0b3JJbnRlcm5hbCgKLSAgICAgIFQqIHB0ciwgQXJlbmEqIGFyZW5hLCBnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6ZmFsc2VfdHlwZSkgewotICAgIGFyZW5hLT5Pd25EZXN0
cnVjdG9yKHB0cik7Ci0gIH0KLQotICAvLyBUaGVzZSBpbXBsZW1lbnQgT3duKCksIHdoaWNoIHJl
Z2lzdGVycyBhbiBvYmplY3QgZm9yIGRlbGV0aW9uIChkZXN0cnVjdG9yCi0gIC8vIGNhbGwgYW5k
IG9wZXJhdG9yIGRlbGV0ZSgpKS4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaGFzIHR5cGUgJ3RydWVf
dHlwZScgaWYgVAotICAvLyBpcyBhIHN1YnR5cGUgb2YgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlIGFuZCAnZmFsc2VfdHlwZScgb3RoZXJ3aXNlLiBDb2xsYXBzaW5nCi0gIC8vIGFsbCB0ZW1w
bGF0ZSBpbnN0YW50aWF0aW9ucyB0byBvbmUgZm9yIGdlbmVyaWMgTWVzc2FnZSByZWR1Y2VzIGNv
ZGUgc2l6ZSwKLSAgLy8gdXNpbmcgdGhlIHZpcnR1YWwgZGVzdHJ1Y3RvciBpbnN0ZWFkLgotICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUKLSAgdm9p
ZCBPd25JbnRlcm5hbChUKiBvYmplY3QsIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjp0cnVl
X3R5cGUpIHsKLSAgICBpZiAob2JqZWN0ICE9IE5VTEwpIHsKLSAgICAgIEFkZExpc3ROb2RlKG9i
amVjdCwgJmludGVybmFsOjphcmVuYV9kZWxldGVfb2JqZWN0PCA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2UgPik7Ci0gICAgfQotICB9Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEdPT0dMRV9B
VFRSSUJVVEVfQUxXQVlTX0lOTElORQotICB2b2lkIE93bkludGVybmFsKFQqIG9iamVjdCwgZ29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OmZhbHNlX3R5cGUpIHsKLSAgICBpZiAob2JqZWN0ICE9
IE5VTEwpIHsKLSAgICAgIEFkZExpc3ROb2RlKG9iamVjdCwgJmludGVybmFsOjphcmVuYV9kZWxl
dGVfb2JqZWN0PFQ+KTsKLSAgICB9Ci0gIH0KLQotICAvLyBJbXBsZW1lbnRhdGlvbiBmb3IgR2V0
QXJlbmEoKS4gT25seSBtZXNzYWdlIG9iamVjdHMgd2l0aAotICAvLyBJbnRlcm5hbEFyZW5hQ29u
c3RydWN0YWJsZV8gdGFncyBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGFuIGFyZW5hLCBhbmQgc3Vj
aAotICAvLyBvYmplY3RzIG11c3QgaW1wbGVtZW50IGEgR2V0QXJlbmFOb1ZpcnR1YWwoKSBtZXRo
b2QuCi0gIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElO
RQotICBzdGF0aWMgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFJbnRlcm5hbCgK
LSAgICAgIGNvbnN0IFQqIHZhbHVlLCB0eXBlbmFtZSBUOjpJbnRlcm5hbEFyZW5hQ29uc3RydWN0
YWJsZV8qKSB7Ci0gICAgcmV0dXJuIHZhbHVlLT5HZXRBcmVuYU5vVmlydHVhbCgpOwotICB9Ci0K
LSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gR09PR0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FCi0g
IHN0YXRpYyA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZXRBcmVuYUludGVybmFsKGNvbnN0
IFQqIHZhbHVlLCAuLi4pIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8vIEFsbG9jYXRl
IGFuZCBhbHNvIG9wdGlvbmFsbHkgY2FsbCBvbl9hcmVuYV9hbGxvY2F0aW9uIGNhbGxiYWNrIHdp
dGggdGhlCi0gIC8vIGFsbG9jYXRlZCB0eXBlIGluZm8gd2hlbiB0aGUgaG9va3MgYXJlIGluIHBs
YWNlIGluIEFyZW5hT3B0aW9ucyBhbmQKLSAgLy8gdGhlIGNvb2tpZSBpcyBub3QgbnVsbC4KLSAg
dm9pZCogQWxsb2NhdGVBbGlnbmVkKGNvbnN0IHN0ZDo6dHlwZV9pbmZvKiBhbGxvY2F0ZWQsIHNp
emVfdCBuKTsKLQotICAvLyBBbGxvY2F0ZSBhbiBpbnRlcm5hbCBhbGxvY2F0aW9uLCBhdm9pZGlu
ZyBvcHRpb25hbCB0eXBlZCBtb25pdG9yaW5nLgotICBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19J
TkxJTkUgdm9pZCogQWxsb2NhdGVBbGlnbmVkKHNpemVfdCBuKSB7Ci0gICAgcmV0dXJuIEFsbG9j
YXRlQWxpZ25lZChOVUxMLCBuKTsKLSAgfQotCi0gIHZvaWQgSW5pdCgpOwotCi0gIC8vIEZyZWUg
YWxsIGJsb2NrcyBhbmQgcmV0dXJuIHRoZSB0b3RhbCBzcGFjZSB1c2VkIHdoaWNoIGlzIHRoZSBz
dW1zIG9mIHNpemVzCi0gIC8vIG9mIHRoZSBhbGwgdGhlIGFsbG9jYXRlZCBibG9ja3MuCi0gIHVp
bnQ2NCBGcmVlQmxvY2tzKCk7Ci0KLSAgLy8gQWRkIG9iamVjdCBwb2ludGVyIGFuZCBjbGVhbnVw
IGZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIGxpc3QuCi0gIC8vIFRPRE8ocm9oYW5hbmlsLCBjZmFs
bGluKTogV2UgY291bGQgcGFzcyBpbiBhIHN1Yi1hcmVuYSBpbnRvIHRoaXMgbWV0aG9kCi0gIC8v
IHRvIGF2b2lkIHBvbGx1dGluZyBibG9ja3Mgb2YgdGhpcyBhcmVuYSB3aXRoIGxpc3Qgbm9kZXMu
IFRoaXMgd291bGQgaGVscCBpbgotICAvLyBtaXhlZCBtb2RlICh3aGVyZSBtYW55IHByb3RvYnVm
cyBoYXZlIGNjX2VuYWJsZV9hcmVuYXM9ZmFsc2UpLCBhbmQgaXMgYW4KLSAgLy8gYWx0ZXJuYXRp
dmUgdG8gYSBjaHVua2VkIGxpbmtlZC1saXN0LCBidXQgd2l0aCBleHRyYSBvdmVyaGVhZCBvZiAq
bmV4dC4KLSAgdm9pZCBBZGRMaXN0Tm9kZSh2b2lkKiBlbGVtLCB2b2lkICgqY2xlYW51cCkodm9p
ZCopKTsKLSAgLy8gRGVsZXRlIG9yIERlc3RydWN0IGFsbCBvYmplY3RzIG93bmVkIGJ5IHRoZSBh
cmVuYS4KLSAgdm9pZCBDbGVhbnVwTGlzdCgpOwotICB1aW50NjQgUmVzZXRJbnRlcm5hbCgpOwot
Ci0gIGlubGluZSB2b2lkIFNldFRocmVhZENhY2hlQmxvY2soQmxvY2sqIGJsb2NrKSB7Ci0gICAg
dGhyZWFkX2NhY2hlKCkubGFzdF9ibG9ja191c2VkXyA9IGJsb2NrOwotICAgIHRocmVhZF9jYWNo
ZSgpLmxhc3RfbGlmZWN5Y2xlX2lkX3NlZW4gPSBsaWZlY3ljbGVfaWRfOwotICB9Ci0KLSAgaW50
NjQgbGlmZWN5Y2xlX2lkXzsgIC8vIFVuaXF1ZSBmb3IgZWFjaCBhcmVuYS4gQ2hhbmdlcyBvbiBS
ZXNldCgpLgotCi0gIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBdG9taWNXb3JkIGJsb2Nr
c187ICAvLyBIZWFkIG9mIGxpbmtlZCBsaXN0IG9mIGFsbCBhbGxvY2F0ZWQgYmxvY2tzCi0gIGdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBdG9taWNXb3JkIGhpbnRfOyAgICAvLyBGYXN0IHRo
cmVhZC1sb2NhbCBibG9jayBhY2Nlc3MKLQotICAvLyBOb2RlIGNvbnRhaW5zIHRoZSBwdHIgb2Yg
dGhlIG9iamVjdCB0byBiZSBjbGVhbmVkIHVwIGFuZCB0aGUgYXNzb2NpYXRlZAotICAvLyBjbGVh
bnVwIGZ1bmN0aW9uIHB0ci4KLSAgc3RydWN0IE5vZGUgewotICAgIHZvaWQqIGVsZW07ICAgICAg
ICAgICAgICAvLyBQb2ludGVyIHRvIHRoZSBvYmplY3QgdG8gYmUgY2xlYW5lZCB1cC4KLSAgICB2
b2lkICgqY2xlYW51cCkodm9pZCopOyAgLy8gRnVuY3Rpb24gcG9pbnRlciB0byB0aGUgZGVzdHJ1
Y3RvciBvciBkZWxldGVyLgotICAgIE5vZGUqIG5leHQ7ICAgICAgICAgICAgICAvLyBOZXh0IG5v
ZGUgaW4gdGhlIGxpc3QuCi0gIH07Ci0KLSAgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkF0
b21pY1dvcmQgY2xlYW51cF9saXN0XzsgIC8vIEhlYWQgb2YgYSBsaW5rZWQgbGlzdCBvZiBub2Rl
cyBjb250YWluaW5nIG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwdHJz
IGFuZCBjbGVhbnVwIG1ldGhvZHMuCi0KLSAgYm9vbCBvd25zX2ZpcnN0X2Jsb2NrXzsgICAgLy8g
SW5kaWNhdGVzIHRoYXQgYXJlbmEgb3ducyB0aGUgZmlyc3QgYmxvY2sKLSAgTXV0ZXggYmxvY2tz
X2xvY2tfOwotCi0gIHZvaWQgQWRkQmxvY2soQmxvY2sqIGIpOwotICAvLyBBY2Nlc3MgbXVzdCBi
ZSBzeW5jaHJvbml6ZWQsIGVpdGhlciBieSBibG9ja3NfbG9ja18gb3IgYnkgYmVpbmcgY2FsbGVk
IGZyb20KLSAgLy8gSW5pdCgpL1Jlc2V0KCkuCi0gIHZvaWQgQWRkQmxvY2tJbnRlcm5hbChCbG9j
ayogYik7Ci0gIHZvaWQqIFNsb3dBbGxvYyhzaXplX3Qgbik7Ci0gIEJsb2NrKiBGaW5kQmxvY2so
dm9pZCogbWUpOwotICBCbG9jayogTmV3QmxvY2sodm9pZCogbWUsIEJsb2NrKiBteV9sYXN0X2Js
b2NrLCBzaXplX3QgbiwKLSAgICAgICAgICAgICAgICAgIHNpemVfdCBzdGFydF9ibG9ja19zaXpl
LCBzaXplX3QgbWF4X2Jsb2NrX3NpemUpOwotICBzdGF0aWMgdm9pZCogQWxsb2NGcm9tQmxvY2so
QmxvY2sqIGIsIHNpemVfdCBuKTsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VD4KLSAgZnJpZW5kIGNsYXNzIE1hcDsKLQotICAvLyBUaGUgYXJlbmEgbWF5IHNhdmUgYSBjb29r
aWUgaXQgcmVjZWl2ZXMgZnJvbSB0aGUgZXh0ZXJuYWwgb25faW5pdCBob29rCi0gIC8vIGFuZCB0
aGVuIHVzZSBpdCB3aGVuIGNhbGxpbmcgdGhlIG9uX3Jlc2V0IGFuZCBvbl9kZXN0cnVjdGlvbiBo
b29rcy4KLSAgdm9pZCogaG9va3NfY29va2llXzsKLQotICBBcmVuYU9wdGlvbnMgb3B0aW9uc187
Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEFyZW5hKTsKLX07Ci0KLS8v
IERlZmluZWQgYWJvdmUgZm9yIHN1cHBvcnRpbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgUlRUSS4K
LSN1bmRlZiBSVFRJX1RZUEVfSUQKLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0FSRU5BX0hfXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FyZW5hX25jLmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2FyZW5hX25jLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmYwODQy
NzRhNGU4OTI2ODFjZDc4Njc5MDExOTZlNDhlOGMxMzAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYV9uYy5jYwor
KysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0vLyBOZWdhdGl2ZSBjb21waWxhdGlvbiB0ZXN0IGZvciBhcmVuYSB1c2FnZS4K
LQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi91bml0dGVzdC5wYi5oPgotCi0jaWZkZWYgVEVTVF9BUkVOQV9QUklWQVRFX0NPTlNU
UlVDVE9SCi0KLW5hbWVzcGFjZSBnb29nbGUgewotdm9pZCBBcmVuYVByaXZhdGVDb25zdHJ1Y3Rv
cigpIHsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEgYXJlbmE7Ci0gIHByb3RvYnVmX3VuaXR0
ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZSgmYXJlbmEpOwotfQotCi0jZW5kaWYKLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYV9uY190
ZXN0LnB5IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FyZW5hX25jX3Rlc3QucHkKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDU2YTdkZDA1YWE2N2Y4ZTA0Y2NmZTFjMjc0MGMzNmIzZWI0NjE4
NzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2FyZW5hX25jX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCww
IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0
OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIk5lZ2F0aXZlIGNvbXBp
bGF0aW9uIHVuaXQgdGVzdHMgZm9yIGFyZW5hIEFQSS4iIiIKLQotaW1wb3J0IHVuaXR0ZXN0Ci0K
LWZyb20gZ29vZ2xlMy50ZXN0aW5nLnB5YmFzZSBpbXBvcnQgZmFrZV90YXJnZXRfdXRpbAotZnJv
bSBnb29nbGUzLnRlc3RpbmcucHliYXNlIGltcG9ydCB1bml0dGVzdAotCi0KLWNsYXNzIEFyZW5h
TmNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdENvbXBpbGVyRXJyb3JzKHNl
bGYpOgotICAgICIiIlJ1bnMgYSBsaXN0IG9mIHRlc3RzIHRvIHZlcmlmeSBjb21waWxlciBlcnJv
ciBtZXNzYWdlcy4iIiIKLQotICAgICMgRGVmaW5lcyBhIGxpc3Qgb2YgdGVzdCBzcGVjcywgd2hl
cmUgZWFjaCBlbGVtZW50IGlzIGEgdHVwbGUKLSAgICAjICh0ZXN0IG5hbWUsIGxpc3Qgb2YgcmVn
ZXhlcyBmb3IgbWF0Y2hpbmcgdGhlIGNvbXBpbGVyIGVycm9ycykuCi0gICAgdGVzdF9zcGVjcyA9
IFsKLSAgICAgICAgKCdBUkVOQV9QUklWQVRFX0NPTlNUUlVDVE9SJywKLSAgICAgICAgIFtyJ2Nh
bGxpbmcgYSBwcm90ZWN0ZWQgY29uc3RydWN0b3InXSksCi0gICAgICAgICgnU0FOSVRZJywgTm9u
ZSldCi0KLSAgICBmYWtlX3RhcmdldF91dGlsLkFzc2VydENjQ29tcGlsZXJFcnJvcnMoCi0gICAg
ICAgIHNlbGYsICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGN1cnJlbnQgdGVzdCBjYXNl
LgotICAgICAgICAnZ29vZ2xlMy9nb29nbGUvcHJvdG9idWYvYXJlbmFfbmMnLCAgIyBUaGUgZmFr
ZSB0YXJnZXQgZmlsZS4KLSAgICAgICAgJ2FyZW5hX25jLm8nLCAgICAgICAgICAgICAgICAgIyBU
aGUgc3ViLXRhcmdldCB0byBidWlsZC4KLSAgICAgICAgdGVzdF9zcGVjcyAgICAgICAgICAgICAg
ICAgICAgIyBMaXN0IG9mIHRlc3Qgc3BlY2lmaWNhdGlvbnMuCi0gICAgICAgICkKLQotaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvYXJlbmFfdGVzdF91dGlsLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Fy
ZW5hX3Rlc3RfdXRpbC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY5YzViZDZi
NDg4YzE3NGYwM2I2MmU1N2I2NzQ0NGM3OTE5MjE4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYXJlbmFfdGVzdF91dGls
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvYXJlbmFfdGVzdF91dGlsLmg+Ci0KLQotI2RlZmluZSBFWFBFQ1RfRVEg
R09PR0xFX0NIRUNLX0VRCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLU5vSGVhcENoZWNrZXI6On5Ob0hlYXBDaGVja2Vy
KCkgewotICBjYXB0dXJlX2FsbG9jLlVuaG9vaygpOwotICBFWFBFQ1RfRVEoMCwgY2FwdHVyZV9h
bGxvYy5hbGxvY19jb3VudCgpKTsKLSAgRVhQRUNUX0VRKDAsIGNhcHR1cmVfYWxsb2MuZnJlZV9j
b3VudCgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9hcmVuYV90ZXN0X3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYV90ZXN0
X3V0aWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkwY2M3MDZlZTVmMmQwMjk3
NTJmZTZmMWIzMjMxMzAwNDY5MzhlNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYXJlbmFfdGVzdF91dGlsLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQVJFTkFfVEVTVF9VVElMX0hfXwotI2RlZmlu
ZSBHT09HTEVfUFJPVE9CVUZfQVJFTkFfVEVTVF9VVElMX0hfXwotCi0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLWNsYXNz
IE5vSGVhcENoZWNrZXIgewotIHB1YmxpYzoKLSAgTm9IZWFwQ2hlY2tlcigpIHsKLSAgICBjYXB0
dXJlX2FsbG9jLkhvb2soKTsKLSAgfQotICB+Tm9IZWFwQ2hlY2tlcigpOwotIHByaXZhdGU6Ci0g
IGNsYXNzIE5ld0RlbGV0ZUNhcHR1cmUgewotICAgcHVibGljOgotICAgIC8vIFRPT0QoeGlhb2Zl
bmcpOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3BlbnNvdXJjZSBwcm90b2J1Zi4KLSAgICB2b2lkIEhv
b2soKSB7fQotICAgIHZvaWQgVW5ob29rKCkge30KLSAgICBpbnQgYWxsb2NfY291bnQoKSB7IHJl
dHVybiAwOyB9Ci0gICAgaW50IGZyZWVfY291bnQoKSB7IHJldHVybiAwOyB9Ci0gIH0gY2FwdHVy
ZV9hbGxvYzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BS
T1RPQlVGX0FSRU5BX1RFU1RfVVRJTF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9hcmVuYV91bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYV91bml0dGVzdC5j
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIyNWZmZTFhZDk2N2ZkNTBmMDcyNzk4
NmI0MDQwNTI2ZGIzZjAxNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYXJlbmFfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVs
bApAQCAtMSwxMzU0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hLmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0
aG0+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFS
RURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgot
I2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHR5cGVpbmZvPgotI2luY2x1ZGUg
PHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9zY29wZWRfcHRyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2FyZW5hX3Rlc3RfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0X3V0aWwu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucGIuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvdW5pdHRlc3RfYXJlbmEucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvdW5pdHRlc3Rfbm9fYXJlbmEucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
aW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29w
eV9zdHJlYW1faW1wbF9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0
b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldC5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L21lc3NhZ2VfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVs
ZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0Lmg+Ci0jaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KLQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLXVzaW5nIHByb3RvMl9hcmVuYV91
bml0dGVzdDo6QXJlbmFNZXNzYWdlOwotdXNpbmcgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxU
eXBlczsKLXVzaW5nIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9uczsKLXVzaW5n
IHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0T25lb2YyOwotdXNpbmcgcHJvdG9idWZfdW5pdHRlc3Q6
OlRlc3RFbXB0eU1lc3NhZ2U7Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ugewot
Ci1jbGFzcyBOb3RpZmllciB7Ci0gcHVibGljOgotICBOb3RpZmllcigpIDogY291bnRfKDApIHt9
Ci0gIHZvaWQgTm90aWZ5KCkgewotICAgIGNvdW50XysrOwotICB9Ci0gIGludCBHZXRDb3VudCgp
IHsKLSAgICByZXR1cm4gY291bnRfOwotICB9Ci0KLSBwcml2YXRlOgotICBpbnQgY291bnRfOwot
fTsKLQotY2xhc3MgU2ltcGxlRGF0YVR5cGUgewotIHB1YmxpYzoKLSAgU2ltcGxlRGF0YVR5cGUo
KSA6IG5vdGlmaWVyXyhOVUxMKSB7fQotICB2b2lkIFNldE5vdGlmaWVyKE5vdGlmaWVyKiBub3Rp
ZmllcikgewotICAgIG5vdGlmaWVyXyA9IG5vdGlmaWVyOwotICB9Ci0gIHZpcnR1YWwgflNpbXBs
ZURhdGFUeXBlKCkgewotICAgIGlmIChub3RpZmllcl8gIT0gTlVMTCkgewotICAgICAgbm90aWZp
ZXJfLT5Ob3RpZnkoKTsKLSAgICB9Ci0gIH07Ci0gcHJpdmF0ZToKLSAgTm90aWZpZXIqIG5vdGlm
aWVyXzsKLX07Ci0KLS8vIEEgc2ltcGxlIGNsYXNzIHRoYXQgZG9lcyBub3QgYWxsb3cgY29weWlu
ZyBhbmQgc28gY2Fubm90IGJlIHVzZWQgYXMgYQotLy8gcGFyYW1ldGVyIHR5cGUgd2l0aG91dCAi
Y29uc3QgJiIuCi1jbGFzcyBQbGVhc2VEb250Q29weU1lIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0
IFBsZWFzZURvbnRDb3B5TWUoaW50IHZhbHVlKSA6IHZhbHVlXyh2YWx1ZSkge30KLQotICBpbnQg
dmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWx1ZV87IH0KLQotIHByaXZhdGU6Ci0gIGludCB2YWx1
ZV87Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhQbGVhc2VEb250Q29weU1l
KTsKLX07Ci0KLS8vIEEgY2xhc3MgdGhhdCB0YWtlcyBmb3VyIGRpZmZlcmVudCB0eXBlcyBhcyBj
b25zdHJ1Y3RvciBhcmd1bWVudHMuCi1jbGFzcyBNdXN0QmVDb25zdHJ1Y3RlZFdpdGhPbmVUaHJv
dWdoRm91ciB7Ci0gcHVibGljOgotICBNdXN0QmVDb25zdHJ1Y3RlZFdpdGhPbmVUaHJvdWdoRm91
cigKLSAgICAgIGludCBvbmUsIGNvbnN0IGNoYXIqIHR3bywgY29uc3Qgc3RyaW5nJiB0aHJlZSwK
LSAgICAgIGNvbnN0IFBsZWFzZURvbnRDb3B5TWUqIGZvdXIpCi0gICAgICA6IG9uZV8ob25lKSwg
dHdvXyh0d28pLCB0aHJlZV8odGhyZWUpLCBmb3VyXyhmb3VyKSB7fQotCi0gIGludCBvbmVfOwot
ICBjb25zdCBjaGFyKiBjb25zdCB0d29fOwotICBzdHJpbmcgdGhyZWVfOwotICBjb25zdCBQbGVh
c2VEb250Q29weU1lKiBmb3VyXzsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklM
X0NPTlNUUlVDVE9SUyhNdXN0QmVDb25zdHJ1Y3RlZFdpdGhPbmVUaHJvdWdoRm91cik7Ci19Owot
Ci0vLyBBIGNsYXNzIHRoYXQgdGFrZXMgZWlnaHQgZGlmZmVyZW50IHR5cGVzIGFzIGNvbnN0cnVj
dG9yIGFyZ3VtZW50cy4KLWNsYXNzIE11c3RCZUNvbnN0cnVjdGVkV2l0aE9uZVRocm91Z2hFaWdo
dCB7Ci0gcHVibGljOgotICBNdXN0QmVDb25zdHJ1Y3RlZFdpdGhPbmVUaHJvdWdoRWlnaHQoCi0g
ICAgICBpbnQgb25lLCBjb25zdCBjaGFyKiB0d28sIGNvbnN0IHN0cmluZyYgdGhyZWUsCi0gICAg
ICBjb25zdCBQbGVhc2VEb250Q29weU1lKiBmb3VyLCBpbnQgZml2ZSwgY29uc3QgY2hhciogc2l4
LAotICAgICAgY29uc3Qgc3RyaW5nJiBzZXZlbiwgY29uc3Qgc3RyaW5nJiBlaWdodCkKLSAgICAg
IDogb25lXyhvbmUpLCB0d29fKHR3byksIHRocmVlXyh0aHJlZSksIGZvdXJfKGZvdXIpLCBmaXZl
XyhmaXZlKSwKLSAgICAgICAgc2l4XyhzaXgpLCBzZXZlbl8oc2V2ZW4pLCBlaWdodF8oZWlnaHQp
IHt9Ci0KLSAgaW50IG9uZV87Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IHR3b187Ci0gIHN0cmluZyB0
aHJlZV87Ci0gIGNvbnN0IFBsZWFzZURvbnRDb3B5TWUqIGZvdXJfOwotICBpbnQgZml2ZV87Ci0g
IGNvbnN0IGNoYXIqIGNvbnN0IHNpeF87Ci0gIHN0cmluZyBzZXZlbl87Ci0gIHN0cmluZyBlaWdo
dF87Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTXVz
dEJlQ29uc3RydWN0ZWRXaXRoT25lVGhyb3VnaEVpZ2h0KTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFj
ZQotCi1URVNUKEFyZW5hVGVzdCwgQXJlbmFDb25zdHJ1Y3RhYmxlKSB7Ci0gIEVYUEVDVF9UUlVF
KEFyZW5hOjppc19hcmVuYV9jb25zdHJ1Y3RhYmxlPFRlc3RBbGxUeXBlcz46OnR5cGU6OnZhbHVl
KTsKLSAgRVhQRUNUX1RSVUUoQXJlbmE6OmlzX2FyZW5hX2NvbnN0cnVjdGFibGU8Y29uc3QgVGVz
dEFsbFR5cGVzPjo6dHlwZTo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoQXJlbmE6OmlzX2FyZW5h
X2NvbnN0cnVjdGFibGU8QXJlbmE+Ojp0eXBlOjp2YWx1ZSk7Ci19Ci0KLVRFU1QoQXJlbmFUZXN0
LCBCYXNpY0NyZWF0ZSkgewotICBBcmVuYSBhcmVuYTsKLSAgRVhQRUNUX1RSVUUoQXJlbmE6OkNy
ZWF0ZTxpbnQzMj4oJmFyZW5hKSAhPSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoQXJlbmE6OkNyZWF0
ZTxpbnQ2ND4oJmFyZW5hKSAhPSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoQXJlbmE6OkNyZWF0ZTxm
bG9hdD4oJmFyZW5hKSAhPSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoQXJlbmE6OkNyZWF0ZTxkb3Vi
bGU+KCZhcmVuYSkgIT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKEFyZW5hOjpDcmVhdGU8c3RyaW5n
PigmYXJlbmEpICE9IE5VTEwpOwotICBhcmVuYS5Pd24obmV3IGludDMyKTsKLSAgYXJlbmEuT3du
KG5ldyBpbnQ2NCk7Ci0gIGFyZW5hLk93bihuZXcgZmxvYXQpOwotICBhcmVuYS5Pd24obmV3IGRv
dWJsZSk7Ci0gIGFyZW5hLk93bihuZXcgc3RyaW5nKTsKLSAgYXJlbmEuT3duPGludD4oTlVMTCk7
Ci0gIE5vdGlmaWVyIG5vdGlmaWVyOwotICBTaW1wbGVEYXRhVHlwZSogZGF0YSA9IEFyZW5hOjpD
cmVhdGU8U2ltcGxlRGF0YVR5cGU+KCZhcmVuYSk7Ci0gIGRhdGEtPlNldE5vdGlmaWVyKCZub3Rp
Zmllcik7Ci0gIGRhdGEgPSBuZXcgU2ltcGxlRGF0YVR5cGU7Ci0gIGRhdGEtPlNldE5vdGlmaWVy
KCZub3RpZmllcik7Ci0gIGFyZW5hLk93bihkYXRhKTsKLSAgYXJlbmEuUmVzZXQoKTsKLSAgRVhQ
RUNUX0VRKDIsIG5vdGlmaWVyLkdldENvdW50KCkpOwotfQotCi1URVNUKEFyZW5hVGVzdCwgQ3Jl
YXRlV2l0aEZvdXJDb25zdHJ1Y3RvckFyZ3VtZW50cykgewotICBBcmVuYSBhcmVuYTsKLSAgY29u
c3Qgc3RyaW5nIHRocmVlKCIzIik7Ci0gIGNvbnN0IFBsZWFzZURvbnRDb3B5TWUgZm91cig0KTsK
LSAgY29uc3QgTXVzdEJlQ29uc3RydWN0ZWRXaXRoT25lVGhyb3VnaEZvdXIqIG5ld19vYmplY3Qg
PQotICAgICAgQXJlbmE6OkNyZWF0ZTxNdXN0QmVDb25zdHJ1Y3RlZFdpdGhPbmVUaHJvdWdoRm91
cj4oCi0gICAgICAgICAgJmFyZW5hLCAxLCAiMiIsIHRocmVlLCAmZm91cik7Ci0gIEVYUEVDVF9U
UlVFKG5ld19vYmplY3QgIT0gTlVMTCk7Ci0gIEFTU0VSVF9FUSgxLCBuZXdfb2JqZWN0LT5vbmVf
KTsKLSAgQVNTRVJUX1NUUkVRKCIyIiwgbmV3X29iamVjdC0+dHdvXyk7Ci0gIEFTU0VSVF9FUSgi
MyIsIG5ld19vYmplY3QtPnRocmVlXyk7Ci0gIEFTU0VSVF9FUSg0LCBuZXdfb2JqZWN0LT5mb3Vy
Xy0+dmFsdWUoKSk7Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBDcmVhdGVXaXRoRWlnaHRDb25zdHJ1
Y3RvckFyZ3VtZW50cykgewotICBBcmVuYSBhcmVuYTsKLSAgY29uc3Qgc3RyaW5nIHRocmVlKCIz
Iik7Ci0gIGNvbnN0IFBsZWFzZURvbnRDb3B5TWUgZm91cig0KTsKLSAgY29uc3Qgc3RyaW5nIHNl
dmVuKCI3Iik7Ci0gIGNvbnN0IHN0cmluZyBlaWdodCgiOCIpOwotICBjb25zdCBNdXN0QmVDb25z
dHJ1Y3RlZFdpdGhPbmVUaHJvdWdoRWlnaHQqIG5ld19vYmplY3QgPQotICAgICAgQXJlbmE6OkNy
ZWF0ZTxNdXN0QmVDb25zdHJ1Y3RlZFdpdGhPbmVUaHJvdWdoRWlnaHQ+KAotICAgICAgICAgICZh
cmVuYSwgMSwgIjIiLCB0aHJlZSwgJmZvdXIsIDUsICI2Iiwgc2V2ZW4sIGVpZ2h0KTsKLSAgRVhQ
RUNUX1RSVUUobmV3X29iamVjdCAhPSBOVUxMKTsKLSAgQVNTRVJUX0VRKDEsIG5ld19vYmplY3Qt
Pm9uZV8pOwotICBBU1NFUlRfU1RSRVEoIjIiLCBuZXdfb2JqZWN0LT50d29fKTsKLSAgQVNTRVJU
X0VRKCIzIiwgbmV3X29iamVjdC0+dGhyZWVfKTsKLSAgQVNTRVJUX0VRKDQsIG5ld19vYmplY3Qt
PmZvdXJfLT52YWx1ZSgpKTsKLSAgQVNTRVJUX0VRKDUsIG5ld19vYmplY3QtPmZpdmVfKTsKLSAg
QVNTRVJUX1NUUkVRKCI2IiwgbmV3X29iamVjdC0+c2l4Xyk7Ci0gIEFTU0VSVF9FUSgiNyIsIG5l
d19vYmplY3QtPnNldmVuXyk7Ci0gIEFTU0VSVF9FUSgiOCIsIG5ld19vYmplY3QtPmVpZ2h0Xyk7
Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBJbml0aWFsQmxvY2tUb29TbWFsbCkgewotICAvLyBDb25z
dHJ1Y3QgYSBzbWFsbCAoNjQgYnl0ZSkgaW5pdGlhbCBibG9jayBvZiBtZW1vcnkgdG8gYmUgdXNl
ZCBieSB0aGUKLSAgLy8gYXJlbmEgYWxsb2NhdG9yOyB0aGVuLCBhbGxvY2F0ZSBhbiBvYmplY3Qg
d2hpY2ggd2lsbCBub3QgZml0IGluIHRoZQotICAvLyBpbml0aWFsIGJsb2NrLgotICBzdGQ6OnZl
Y3RvcjxjaGFyPiBhcmVuYV9ibG9jayg2NCk7Ci0gIEFyZW5hT3B0aW9ucyBvcHRpb25zOwotICBv
cHRpb25zLmluaXRpYWxfYmxvY2sgPSAmYXJlbmFfYmxvY2tbMF07Ci0gIG9wdGlvbnMuaW5pdGlh
bF9ibG9ja19zaXplID0gYXJlbmFfYmxvY2suc2l6ZSgpOwotICBBcmVuYSBhcmVuYShvcHRpb25z
KTsKLQotICBjaGFyKiBwID0gOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6Q3JlYXRlQXJyYXk8
Y2hhcj4oJmFyZW5hLCA5Nik7Ci0gIHVpbnRwdHJfdCBhbGxvY2F0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHApOwotCi0gIC8vIEVuc3VyZSB0aGF0IHRoZSBhcmVuYSBhbGxvY2F0
b3IgZGlkIG5vdCByZXR1cm4gbWVtb3J5IHBvaW50aW5nIGludG8gdGhlCi0gIC8vIGluaXRpYWwg
YmxvY2sgb2YgbWVtb3J5LgotICB1aW50cHRyX3QgYXJlbmFfc3RhcnQgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oJmFyZW5hX2Jsb2NrWzBdKTsKLSAgdWludHB0cl90IGFyZW5hX2VuZCA9
IGFyZW5hX3N0YXJ0ICsgYXJlbmFfYmxvY2suc2l6ZSgpOwotICBFWFBFQ1RfRkFMU0UoYWxsb2Nh
dGlvbiA+PSBhcmVuYV9zdGFydCAmJiBhbGxvY2F0aW9uIDwgYXJlbmFfZW5kKTsKLQotICAvLyBX
cml0ZSB0byB0aGUgbWVtb3J5IHdlIGFsbG9jYXRlZDsgdGhpcyBzaG91bGQgKGJ1dCBpcyBub3Qg
Z3VhcmFudGVlZCB0bykKLSAgLy8gdHJpZ2dlciBhIGNoZWNrIGZvciBoZWFwIGNvcnJ1cHRpb24g
aWYgdGhlIG9iamVjdCB3YXMgYWxsb2NhdGVkIGZyb20gdGhlCi0gIC8vIGluaXRpYWxseS1wcm92
aWRlZCBibG9jay4KLSAgbWVtc2V0KHAsICdcMCcsIDk2KTsKLX0KLQotVEVTVChBcmVuYVRlc3Qs
IFBhcnNpbmcpIHsKLSAgVGVzdEFsbFR5cGVzIG9yaWdpbmFsOwotICBUZXN0VXRpbDo6U2V0QWxs
RmllbGRzKCZvcmlnaW5hbCk7Ci0KLSAgLy8gVGVzdCBtZW1vcnkgbGVhay4KLSAgQXJlbmEgYXJl
bmE7Ci0gIFRlc3RBbGxUeXBlcyogYXJlbmFfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdl
PFRlc3RBbGxUeXBlcz4oJmFyZW5hKTsKLSAgYXJlbmFfbWVzc2FnZS0+UGFyc2VGcm9tU3RyaW5n
KG9yaWdpbmFsLlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmll
bGRzU2V0KCphcmVuYV9tZXNzYWdlKTsKLQotICAvLyBUZXN0IHRoYXQgc3RyaW5nIGZpZWxkcyBo
YXZlIG51bGwgdGVybWluYXRvciBieXRlcyAoZWFybGllciBidWcpLgotICBFWFBFQ1RfRVEoc3Ry
bGVuKG9yaWdpbmFsLm9wdGlvbmFsX3N0cmluZygpLmNfc3RyKCkpLAotICAgICAgICAgICAgc3Ry
bGVuKGFyZW5hX21lc3NhZ2UtPm9wdGlvbmFsX3N0cmluZygpLmNfc3RyKCkpKTsKLX0KLQotVEVT
VChBcmVuYVRlc3QsIFVua25vd25GaWVsZHMpIHsKLSAgVGVzdEFsbFR5cGVzIG9yaWdpbmFsOwot
ICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZvcmlnaW5hbCk7Ci0KLSAgLy8gVGVzdCBiYXNpYyBw
YXJzaW5nIGludG8gKHBvcHVsYXRpbmcpIGFuZCByZWFkaW5nIG91dCBvZiB1bmtub3duIGZpZWxk
cyBvbgotICAvLyBhbiBhcmVuYS4KLSAgQXJlbmEgYXJlbmE7Ci0gIFRlc3RFbXB0eU1lc3NhZ2Uq
IGFyZW5hX21lc3NhZ2UgPQotICAgICAgQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEVtcHR5TWVz
c2FnZT4oJmFyZW5hKTsKLSAgYXJlbmFfbWVzc2FnZS0+UGFyc2VGcm9tU3RyaW5nKG9yaWdpbmFs
LlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotCi0gIFRlc3RBbGxUeXBlcyBjb3BpZWQ7Ci0gIGNvcGll
ZC5QYXJzZUZyb21TdHJpbmcoYXJlbmFfbWVzc2FnZS0+U2VyaWFsaXplQXNTdHJpbmcoKSk7Ci0g
IFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQoY29waWVkKTsKLQotICAvLyBFeGVyY2lzZSBV
RlMgbWFudWFsIG1hbmlwdWxhdGlvbiAoc2V0dGVycykuCi0gIGFyZW5hX21lc3NhZ2UgPSBBcmVu
YTo6Q3JlYXRlTWVzc2FnZTxUZXN0RW1wdHlNZXNzYWdlPigmYXJlbmEpOwotICBhcmVuYV9tZXNz
YWdlLT5tdXRhYmxlX3Vua25vd25fZmllbGRzKCktPkFkZFZhcmludCgKLSAgICAgIFRlc3RBbGxU
eXBlczo6a09wdGlvbmFsSW50MzJGaWVsZE51bWJlciwgNDIpOwotICBjb3BpZWQuQ2xlYXIoKTsK
LSAgY29waWVkLlBhcnNlRnJvbVN0cmluZyhhcmVuYV9tZXNzYWdlLT5TZXJpYWxpemVBc1N0cmlu
ZygpKTsKLSAgRVhQRUNUX1RSVUUoY29waWVkLmhhc19vcHRpb25hbF9pbnQzMigpKTsKLSAgRVhQ
RUNUX0VRKDQyLCBjb3BpZWQub3B0aW9uYWxfaW50MzIoKSk7Ci0KLSAgLy8gRXhlcmNpc2UgVUZT
IHN3YXAgcGF0aC4KLSAgVGVzdEVtcHR5TWVzc2FnZSogYXJlbmFfbWVzc2FnZV8yID0KLSAgICAg
IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RFbXB0eU1lc3NhZ2U+KCZhcmVuYSk7Ci0gIGFyZW5h
X21lc3NhZ2VfMi0+U3dhcChhcmVuYV9tZXNzYWdlKTsKLSAgY29waWVkLkNsZWFyKCk7Ci0gIGNv
cGllZC5QYXJzZUZyb21TdHJpbmcoYXJlbmFfbWVzc2FnZV8yLT5TZXJpYWxpemVBc1N0cmluZygp
KTsKLSAgRVhQRUNUX1RSVUUoY29waWVkLmhhc19vcHRpb25hbF9pbnQzMigpKTsKLSAgRVhQRUNU
X0VRKDQyLCBjb3BpZWQub3B0aW9uYWxfaW50MzIoKSk7Ci0KLSAgLy8gVGVzdCBmaWVsZCBtYW5p
cHVsYXRpb24uCi0gIFRlc3RFbXB0eU1lc3NhZ2UqIGFyZW5hX21lc3NhZ2VfMyA9Ci0gICAgICBB
cmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0RW1wdHlNZXNzYWdlPigmYXJlbmEpOwotICBhcmVuYV9t
ZXNzYWdlXzMtPm11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+QWRkVmFyaW50KDEwMDAsIDQyKTsK
LSAgYXJlbmFfbWVzc2FnZV8zLT5tdXRhYmxlX3Vua25vd25fZmllbGRzKCktPkFkZEZpeGVkMzIo
MTAwMSwgNDIpOwotICBhcmVuYV9tZXNzYWdlXzMtPm11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+
QWRkRml4ZWQ2NCgxMDAyLCA0Mik7Ci0gIGFyZW5hX21lc3NhZ2VfMy0+bXV0YWJsZV91bmtub3du
X2ZpZWxkcygpLT5BZGRMZW5ndGhEZWxpbWl0ZWQoMTAwMyk7Ci0gIGFyZW5hX21lc3NhZ2VfMy0+
bXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5EZWxldGVTdWJyYW5nZSgwLCAyKTsKLSAgYXJlbmFf
bWVzc2FnZV8zLT5tdXRhYmxlX3Vua25vd25fZmllbGRzKCktPkRlbGV0ZUJ5TnVtYmVyKDEwMDIp
OwotICBhcmVuYV9tZXNzYWdlXzMtPm11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+RGVsZXRlQnlO
dW1iZXIoMTAwMyk7Ci0gIEVYUEVDVF9UUlVFKGFyZW5hX21lc3NhZ2VfMy0+dW5rbm93bl9maWVs
ZHMoKS5lbXB0eSgpKTsKLX0KLQotVEVTVChBcmVuYVRlc3QsIFN3YXApIHsKLSAgQXJlbmEgYXJl
bmExOwotICBBcmVuYSBhcmVuYTI7Ci0gIFRlc3RBbGxUeXBlcyogYXJlbmExX21lc3NhZ2U7Ci0g
IFRlc3RBbGxUeXBlcyogYXJlbmEyX21lc3NhZ2U7Ci0KLSAgLy8gQ2FzZSAxOiBTd2FwKCksIG5v
IFVGUyBvbiBlaXRoZXIgbWVzc2FnZSwgYm90aCBtZXNzYWdlcyBvbiBkaWZmZXJlbnQKLSAgLy8g
YXJlbmFzLiBBcmVuYSBwb2ludGVycyBzaG91bGQgcmVtYWluIHRoZSBzYW1lIGFmdGVyIHN3YXAu
Ci0gIGFyZW5hMV9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigm
YXJlbmExKTsKLSAgYXJlbmEyX21lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxs
VHlwZXM+KCZhcmVuYTIpOwotICBhcmVuYTFfbWVzc2FnZS0+U3dhcChhcmVuYTJfbWVzc2FnZSk7
Ci0gIEVYUEVDVF9FUSgmYXJlbmExLCBhcmVuYTFfbWVzc2FnZS0+R2V0QXJlbmEoKSk7Ci0gIEVY
UEVDVF9FUSgmYXJlbmEyLCBhcmVuYTJfbWVzc2FnZS0+R2V0QXJlbmEoKSk7Ci0KLSAgLy8gQ2Fz
ZSAyOiBTd2FwKCksIFVGUyBvbiBvbmUgbWVzc2FnZSwgYm90aCBtZXNzYWdlcyBvbiBkaWZmZXJl
bnQgYXJlbmFzLgotICBhcmVuYTFfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RB
bGxUeXBlcz4oJmFyZW5hMSk7Ci0gIGFyZW5hMl9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3Nh
Z2U8VGVzdEFsbFR5cGVzPigmYXJlbmEyKTsKLSAgYXJlbmExX21lc3NhZ2UtPm11dGFibGVfdW5r
bm93bl9maWVsZHMoKS0+QWRkVmFyaW50KDEsIDQyKTsKLSAgYXJlbmExX21lc3NhZ2UtPlN3YXAo
YXJlbmEyX21lc3NhZ2UpOwotICBFWFBFQ1RfRVEoJmFyZW5hMSwgYXJlbmExX21lc3NhZ2UtPkdl
dEFyZW5hKCkpOwotICBFWFBFQ1RfRVEoJmFyZW5hMiwgYXJlbmEyX21lc3NhZ2UtPkdldEFyZW5h
KCkpOwotICBFWFBFQ1RfRVEoMCwgYXJlbmExX21lc3NhZ2UtPnVua25vd25fZmllbGRzKCkuZmll
bGRfY291bnQoKSk7Ci0gIEVYUEVDVF9FUSgxLCBhcmVuYTJfbWVzc2FnZS0+dW5rbm93bl9maWVs
ZHMoKS5maWVsZF9jb3VudCgpKTsKLSAgRVhQRUNUX0VRKDQyLCBhcmVuYTJfbWVzc2FnZS0+dW5r
bm93bl9maWVsZHMoKS5maWVsZCgwKS52YXJpbnQoKSk7Ci0KLSAgLy8gQ2FzZSAzOiBTd2FwKCks
IFVGUyBvbiBib3RoIG1lc3NhZ2VzLCBib3RoIG1lc3NhZ2VzIG9uIGRpZmZlcmVudCBhcmVuYXMu
Ci0gIGFyZW5hMV9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigm
YXJlbmExKTsKLSAgYXJlbmEyX21lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxs
VHlwZXM+KCZhcmVuYTIpOwotICBhcmVuYTFfbWVzc2FnZS0+bXV0YWJsZV91bmtub3duX2ZpZWxk
cygpLT5BZGRWYXJpbnQoMSwgNDIpOwotICBhcmVuYTJfbWVzc2FnZS0+bXV0YWJsZV91bmtub3du
X2ZpZWxkcygpLT5BZGRWYXJpbnQoMiwgODQpOwotICBhcmVuYTFfbWVzc2FnZS0+U3dhcChhcmVu
YTJfbWVzc2FnZSk7Ci0gIEVYUEVDVF9FUSgmYXJlbmExLCBhcmVuYTFfbWVzc2FnZS0+R2V0QXJl
bmEoKSk7Ci0gIEVYUEVDVF9FUSgmYXJlbmEyLCBhcmVuYTJfbWVzc2FnZS0+R2V0QXJlbmEoKSk7
Ci0gIEVYUEVDVF9FUSgxLCBhcmVuYTFfbWVzc2FnZS0+dW5rbm93bl9maWVsZHMoKS5maWVsZF9j
b3VudCgpKTsKLSAgRVhQRUNUX0VRKDEsIGFyZW5hMl9tZXNzYWdlLT51bmtub3duX2ZpZWxkcygp
LmZpZWxkX2NvdW50KCkpOwotICBFWFBFQ1RfRVEoODQsIGFyZW5hMV9tZXNzYWdlLT51bmtub3du
X2ZpZWxkcygpLmZpZWxkKDApLnZhcmludCgpKTsKLSAgRVhQRUNUX0VRKDQyLCBhcmVuYTJfbWVz
c2FnZS0+dW5rbm93bl9maWVsZHMoKS5maWVsZCgwKS52YXJpbnQoKSk7Ci19Ci0KLVRFU1QoQXJl
bmFUZXN0LCBSZWZsZWN0aW9uU3dhcEZpZWxkcykgewotICBBcmVuYSBhcmVuYTE7Ci0gIEFyZW5h
IGFyZW5hMjsKLSAgVGVzdEFsbFR5cGVzKiBhcmVuYTFfbWVzc2FnZTsKLSAgVGVzdEFsbFR5cGVz
KiBhcmVuYTJfbWVzc2FnZTsKLQotICAvLyBDYXNlIDE6IG1lc3NhZ2VzIG9uIGRpZmZlcmVudCBh
cmVuYXMsIG9ubHkgb25lIG1lc3NhZ2UgaXMgc2V0LgotICBhcmVuYTFfbWVzc2FnZSA9IEFyZW5h
OjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4oJmFyZW5hMSk7Ci0gIGFyZW5hMl9tZXNzYWdl
ID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmEyKTsKLSAgVGVzdFV0
aWw6OlNldEFsbEZpZWxkcyhhcmVuYTFfbWVzc2FnZSk7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJl
ZmxlY3Rpb24gPSBhcmVuYTFfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotICBzdGQ6OnZlY3Rv
cjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIHJlZmxlY3Rpb24tPkxpc3RGaWVs
ZHMoKmFyZW5hMV9tZXNzYWdlLCAmZmllbGRzKTsKLSAgcmVmbGVjdGlvbi0+U3dhcEZpZWxkcyhh
cmVuYTFfbWVzc2FnZSwgYXJlbmEyX21lc3NhZ2UsIGZpZWxkcyk7Ci0gIEVYUEVDVF9FUSgmYXJl
bmExLCBhcmVuYTFfbWVzc2FnZS0+R2V0QXJlbmEoKSk7Ci0gIEVYUEVDVF9FUSgmYXJlbmEyLCBh
cmVuYTJfbWVzc2FnZS0+R2V0QXJlbmEoKSk7Ci0gIHN0cmluZyBvdXRwdXQ7Ci0gIGFyZW5hMV9t
ZXNzYWdlLT5TZXJpYWxpemVUb1N0cmluZygmb3V0cHV0KTsKLSAgRVhQRUNUX0VRKDAsIG91dHB1
dC5zaXplKCkpOwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KCphcmVuYTJfbWVzc2Fn
ZSk7Ci0gIHJlZmxlY3Rpb24tPlN3YXBGaWVsZHMoYXJlbmExX21lc3NhZ2UsIGFyZW5hMl9tZXNz
YWdlLCBmaWVsZHMpOwotICBhcmVuYTJfbWVzc2FnZS0+U2VyaWFsaXplVG9TdHJpbmcoJm91dHB1
dCk7Ci0gIEVYUEVDVF9FUSgwLCBvdXRwdXQuc2l6ZSgpKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFs
bEZpZWxkc1NldCgqYXJlbmExX21lc3NhZ2UpOwotCi0gIC8vIENhc2UgMjogbWVzc2FnZXMgb24g
ZGlmZmVyZW50IGFyZW5hcywgYm90aCBtZXNzYWdlcyBhcmUgc2V0LgotICBhcmVuYTFfbWVzc2Fn
ZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4oJmFyZW5hMSk7Ci0gIGFyZW5h
Ml9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmEyKTsK
LSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcyhhcmVuYTFfbWVzc2FnZSk7Ci0gIFRlc3RVdGlsOjpT
ZXRBbGxGaWVsZHMoYXJlbmEyX21lc3NhZ2UpOwotICByZWZsZWN0aW9uLT5Td2FwRmllbGRzKGFy
ZW5hMV9tZXNzYWdlLCBhcmVuYTJfbWVzc2FnZSwgZmllbGRzKTsKLSAgRVhQRUNUX0VRKCZhcmVu
YTEsIGFyZW5hMV9tZXNzYWdlLT5HZXRBcmVuYSgpKTsKLSAgRVhQRUNUX0VRKCZhcmVuYTIsIGFy
ZW5hMl9tZXNzYWdlLT5HZXRBcmVuYSgpKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEZpZWxkc1Nl
dCgqYXJlbmExX21lc3NhZ2UpOwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KCphcmVu
YTJfbWVzc2FnZSk7Ci0KLSAgLy8gQ2FzZSAzOiBtZXNzYWdlcyBvbiBkaWZmZXJlbnQgYXJlbmFz
IHdpdGggZGlmZmVyZW50IGxpZmV0aW1lcy4KLSAgYXJlbmExX21lc3NhZ2UgPSBBcmVuYTo6Q3Jl
YXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYTEpOwotICB7Ci0gICAgQXJlbmEgYXJlbmEz
OwotICAgIFRlc3RBbGxUeXBlcyogYXJlbmEzX21lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2Fn
ZTxUZXN0QWxsVHlwZXM+KCZhcmVuYTMpOwotICAgIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoYXJl
bmEzX21lc3NhZ2UpOwotICAgIHJlZmxlY3Rpb24tPlN3YXBGaWVsZHMoYXJlbmExX21lc3NhZ2Us
IGFyZW5hM19tZXNzYWdlLCBmaWVsZHMpOwotICB9Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVs
ZHNTZXQoKmFyZW5hMV9tZXNzYWdlKTsKLQotICAvLyBDYXNlIDQ6IG9uZSBtZXNzYWdlIG9uIGFy
ZW5hLCB0aGUgb3RoZXIgb24gaGVhcC4KLSAgYXJlbmExX21lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRl
TWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYTEpOwotICBUZXN0QWxsVHlwZXMgbWVzc2FnZTsK
LSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcyhhcmVuYTFfbWVzc2FnZSk7Ci0gIHJlZmxlY3Rpb24t
PlN3YXBGaWVsZHMoYXJlbmExX21lc3NhZ2UsICZtZXNzYWdlLCBmaWVsZHMpOwotICBFWFBFQ1Rf
RVEoJmFyZW5hMSwgYXJlbmExX21lc3NhZ2UtPkdldEFyZW5hKCkpOwotICBFWFBFQ1RfRVEoTlVM
TCwgbWVzc2FnZS5HZXRBcmVuYSgpKTsKLSAgYXJlbmExX21lc3NhZ2UtPlNlcmlhbGl6ZVRvU3Ry
aW5nKCZvdXRwdXQpOwotICBFWFBFQ1RfRVEoMCwgb3V0cHV0LnNpemUoKSk7Ci0gIFRlc3RVdGls
OjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBTZXRB
bGxvY2F0ZWRNZXNzYWdlKSB7Ci0gIEFyZW5hIGFyZW5hOwotICBUZXN0QWxsVHlwZXMgKmFyZW5h
X21lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYSk7Ci0g
IFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZSogbmVzdGVkID0gbmV3IFRlc3RBbGxUeXBlczo6
TmVzdGVkTWVzc2FnZTsKLSAgbmVzdGVkLT5zZXRfYmIoMTE4KTsKLSAgYXJlbmFfbWVzc2FnZS0+
c2V0X2FsbG9jYXRlZF9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZShuZXN0ZWQpOwotICBFWFBFQ1Rf
RVEoMTE4LCBhcmVuYV9tZXNzYWdlLT5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpLmJiKCkpOwot
Ci0gIHByb3RvYnVmX3VuaXR0ZXN0X25vX2FyZW5hOjpUZXN0Tm9BcmVuYU1lc3NhZ2Ugbm9fYXJl
bmFfbWVzc2FnZTsKLSAgRVhQRUNUX0ZBTFNFKG5vX2FyZW5hX21lc3NhZ2UuaGFzX2FyZW5hX21l
c3NhZ2UoKSk7Ci0gIG5vX2FyZW5hX21lc3NhZ2Uuc2V0X2FsbG9jYXRlZF9hcmVuYV9tZXNzYWdl
KE5VTEwpOwotICBFWFBFQ1RfRkFMU0Uobm9fYXJlbmFfbWVzc2FnZS5oYXNfYXJlbmFfbWVzc2Fn
ZSgpKTsKLSAgbm9fYXJlbmFfbWVzc2FnZS5zZXRfYWxsb2NhdGVkX2FyZW5hX21lc3NhZ2UobmV3
IEFyZW5hTWVzc2FnZSk7Ci0gIEVYUEVDVF9UUlVFKG5vX2FyZW5hX21lc3NhZ2UuaGFzX2FyZW5h
X21lc3NhZ2UoKSk7Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBSZWxlYXNlTWVzc2FnZSkgewotICBB
cmVuYSBhcmVuYTsKLSAgVGVzdEFsbFR5cGVzKiBhcmVuYV9tZXNzYWdlID0gQXJlbmE6OkNyZWF0
ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmEpOwotICBhcmVuYV9tZXNzYWdlLT5tdXRhYmxl
X29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCktPnNldF9iYigxMTgpOwotICBnb29nbGU6OnByb3Rv
YnVmOjpzY29wZWRfcHRyPFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZT4gbmVzdGVkKAotICAg
ICAgYXJlbmFfbWVzc2FnZS0+cmVsZWFzZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpKTsKLSAg
RVhQRUNUX0VRKDExOCwgbmVzdGVkLT5iYigpKTsKLQotICBUZXN0QWxsVHlwZXM6Ok5lc3RlZE1l
c3NhZ2UqIHJlbGVhc2VkX251bGwgPQotICAgICAgYXJlbmFfbWVzc2FnZS0+cmVsZWFzZV9vcHRp
b25hbF9uZXN0ZWRfbWVzc2FnZSgpOwotICBFWFBFQ1RfRVEoTlVMTCwgcmVsZWFzZWRfbnVsbCk7
Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBTZXRBbGxvY2F0ZWRTdHJpbmcpIHsKLSAgQXJlbmEgYXJl
bmE7Ci0gIFRlc3RBbGxUeXBlcyogYXJlbmFfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdl
PFRlc3RBbGxUeXBlcz4oJmFyZW5hKTsKLSAgc3RyaW5nKiBhbGxvY2F0ZWRfc3RyID0gbmV3IHN0
cmluZygiaGVsbG8iKTsKLSAgYXJlbmFfbWVzc2FnZS0+c2V0X2FsbG9jYXRlZF9vcHRpb25hbF9z
dHJpbmcoYWxsb2NhdGVkX3N0cik7Ci0gIEVYUEVDVF9FUSgiaGVsbG8iLCBhcmVuYV9tZXNzYWdl
LT5vcHRpb25hbF9zdHJpbmcoKSk7Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBSZWxlYXNlU3RyaW5n
KSB7Ci0gIEFyZW5hIGFyZW5hOwotICBUZXN0QWxsVHlwZXMqIGFyZW5hX21lc3NhZ2UgPSBBcmVu
YTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYSk7Ci0gIGFyZW5hX21lc3NhZ2Ut
PnNldF9vcHRpb25hbF9zdHJpbmcoImhlbGxvIik7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3Bl
ZF9wdHI8c3RyaW5nPiByZWxlYXNlZF9zdHIoCi0gICAgICBhcmVuYV9tZXNzYWdlLT5yZWxlYXNl
X29wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKCJoZWxsbyIsICpyZWxlYXNlZF9zdHIp
OwotCi0gIC8vIFRlc3QgZGVmYXVsdCB2YWx1ZS4KLX0KLQotCi1URVNUKEFyZW5hVGVzdCwgU3dh
cEJldHdlZW5BcmVuYXNXaXRoQWxsRmllbGRzU2V0KSB7Ci0gIEFyZW5hIGFyZW5hMTsKLSAgVGVz
dEFsbFR5cGVzKiBhcmVuYTFfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxU
eXBlcz4oJmFyZW5hMSk7Ci0gIHsKLSAgICBBcmVuYSBhcmVuYTI7Ci0gICAgVGVzdEFsbFR5cGVz
KiBhcmVuYTJfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4oJmFy
ZW5hMik7Ci0gICAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcyhhcmVuYTJfbWVzc2FnZSk7Ci0gICAg
YXJlbmEyX21lc3NhZ2UtPlN3YXAoYXJlbmExX21lc3NhZ2UpOwotICAgIHN0cmluZyBvdXRwdXQ7
Ci0gICAgYXJlbmEyX21lc3NhZ2UtPlNlcmlhbGl6ZVRvU3RyaW5nKCZvdXRwdXQpOwotICAgIEVY
UEVDVF9FUSgwLCBvdXRwdXQuc2l6ZSgpKTsKLSAgfQotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmll
bGRzU2V0KCphcmVuYTFfbWVzc2FnZSk7Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBTd2FwQmV0d2Vl
bkFyZW5hQW5kTm9uQXJlbmFXaXRoQWxsRmllbGRzU2V0KSB7Ci0gIFRlc3RBbGxUeXBlcyBub25f
YXJlbmFfbWVzc2FnZTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbm9uX2FyZW5hX21lc3Nh
Z2UpOwotICB7Ci0gICAgQXJlbmEgYXJlbmEyOwotICAgIFRlc3RBbGxUeXBlcyogYXJlbmEyX21l
c3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYTIpOwotICAg
IFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoYXJlbmEyX21lc3NhZ2UpOwotICAgIGFyZW5hMl9tZXNz
YWdlLT5Td2FwKCZub25fYXJlbmFfbWVzc2FnZSk7Ci0gICAgVGVzdFV0aWw6OkV4cGVjdEFsbEZp
ZWxkc1NldCgqYXJlbmEyX21lc3NhZ2UpOwotICAgIFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNT
ZXQobm9uX2FyZW5hX21lc3NhZ2UpOwotICB9Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBVbnNhZmVB
cmVuYVN3YXApIHsKLSAgQXJlbmEgc2hhcmVkX2FyZW5hOwotICBUZXN0QWxsVHlwZXMqIG1lc3Nh
Z2UxID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigmc2hhcmVkX2FyZW5hKTsK
LSAgVGVzdEFsbFR5cGVzKiBtZXNzYWdlMiA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxU
eXBlcz4oJnNoYXJlZF9hcmVuYSk7Ci0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMobWVzc2FnZTEp
OwotICBtZXNzYWdlMS0+VW5zYWZlQXJlbmFTd2FwKG1lc3NhZ2UyKTsKLSAgVGVzdFV0aWw6OkV4
cGVjdEFsbEZpZWxkc1NldCgqbWVzc2FnZTIpOwotfQotCi1URVNUKEFyZW5hVGVzdCwgU3dhcEJl
dHdlZW5BcmVuYXNVc2luZ1JlZmxlY3Rpb24pIHsKLSAgQXJlbmEgYXJlbmExOwotICBUZXN0QWxs
VHlwZXMqIGFyZW5hMV9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVz
PigmYXJlbmExKTsKLSAgewotICAgIEFyZW5hIGFyZW5hMjsKLSAgICBUZXN0QWxsVHlwZXMqIGFy
ZW5hMl9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmEy
KTsKLSAgICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKGFyZW5hMl9tZXNzYWdlKTsKLSAgICBjb25z
dCBSZWZsZWN0aW9uKiByID0gYXJlbmEyX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLSAgICBy
LT5Td2FwKGFyZW5hMV9tZXNzYWdlLCBhcmVuYTJfbWVzc2FnZSk7Ci0gICAgc3RyaW5nIG91dHB1
dDsKLSAgICBhcmVuYTJfbWVzc2FnZS0+U2VyaWFsaXplVG9TdHJpbmcoJm91dHB1dCk7Ci0gICAg
RVhQRUNUX0VRKDAsIG91dHB1dC5zaXplKCkpOwotICB9Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxG
aWVsZHNTZXQoKmFyZW5hMV9tZXNzYWdlKTsKLX0KLQotVEVTVChBcmVuYVRlc3QsIFN3YXBCZXR3
ZWVuQXJlbmFBbmROb25BcmVuYVVzaW5nUmVmbGVjdGlvbikgewotICBUZXN0QWxsVHlwZXMgbm9u
X2FyZW5hX21lc3NhZ2U7Ci0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm5vbl9hcmVuYV9tZXNz
YWdlKTsKLSAgewotICAgIEFyZW5hIGFyZW5hMjsKLSAgICBUZXN0QWxsVHlwZXMqIGFyZW5hMl9t
ZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmEyKTsKLSAg
ICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKGFyZW5hMl9tZXNzYWdlKTsKLSAgICBjb25zdCBSZWZs
ZWN0aW9uKiByID0gYXJlbmEyX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLSAgICByLT5Td2Fw
KCZub25fYXJlbmFfbWVzc2FnZSwgYXJlbmEyX21lc3NhZ2UpOwotICAgIFRlc3RVdGlsOjpFeHBl
Y3RBbGxGaWVsZHNTZXQoKmFyZW5hMl9tZXNzYWdlKTsKLSAgICBUZXN0VXRpbDo6RXhwZWN0QWxs
RmllbGRzU2V0KG5vbl9hcmVuYV9tZXNzYWdlKTsKLSAgfQotfQotCi1URVNUKEFyZW5hVGVzdCwg
UmVsZWFzZUZyb21BcmVuYU1lc3NhZ2VNYWtlc0NvcHkpIHsKLSAgVGVzdEFsbFR5cGVzOjpOZXN0
ZWRNZXNzYWdlKiBuZXN0ZWRfbXNnID0gTlVMTDsKLSAgc3RyaW5nKiBuZXN0ZWRfc3RyaW5nID0g
TlVMTDsKLSAgewotICAgIEFyZW5hIGFyZW5hOwotICAgIFRlc3RBbGxUeXBlcyogYXJlbmFfbWVz
c2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4oJmFyZW5hKTsKLSAgICBh
cmVuYV9tZXNzYWdlLT5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCktPnNldF9iYig0
Mik7Ci0gICAgKmFyZW5hX21lc3NhZ2UtPm11dGFibGVfb3B0aW9uYWxfc3RyaW5nKCkgPSAiSGVs
bG8iOwotICAgIG5lc3RlZF9tc2cgPSBhcmVuYV9tZXNzYWdlLT5yZWxlYXNlX29wdGlvbmFsX25l
c3RlZF9tZXNzYWdlKCk7Ci0gICAgbmVzdGVkX3N0cmluZyA9IGFyZW5hX21lc3NhZ2UtPnJlbGVh
c2Vfb3B0aW9uYWxfc3RyaW5nKCk7Ci0gIH0KLSAgRVhQRUNUX0VRKDQyLCBuZXN0ZWRfbXNnLT5i
YigpKTsKLSAgRVhQRUNUX0VRKCJIZWxsbyIsICpuZXN0ZWRfc3RyaW5nKTsKLSAgZGVsZXRlIG5l
c3RlZF9tc2c7Ci0gIGRlbGV0ZSBuZXN0ZWRfc3RyaW5nOwotfQotCi0jaWZuZGVmIEdPT0dMRV9Q
Uk9UT0JVRl9OT19SVFRJCi1URVNUKEFyZW5hVGVzdCwgUmVsZWFzZUZyb21BcmVuYU1lc3NhZ2VV
c2luZ1JlZmxlY3Rpb25NYWtlc0NvcHkpIHsKLSAgVGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdl
KiBuZXN0ZWRfbXNnID0gTlVMTDsKLSAgLy8gTm90ZTogbm8gc3RyaW5nOiByZWZsZWN0aW9uIEFQ
SSBvbmx5IHN1cHBvcnRzIHJlbGVhc2luZyBzdWJtZXNzYWdlcy4KLSAgewotICAgIEFyZW5hIGFy
ZW5hOwotICAgIFRlc3RBbGxUeXBlcyogYXJlbmFfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNz
YWdlPFRlc3RBbGxUeXBlcz4oJmFyZW5hKTsKLSAgICBhcmVuYV9tZXNzYWdlLT5tdXRhYmxlX29w
dGlvbmFsX25lc3RlZF9tZXNzYWdlKCktPnNldF9iYig0Mik7Ci0gICAgY29uc3QgUmVmbGVjdGlv
biogciA9IGFyZW5hX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLSAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGYgPSBhcmVuYV9tZXNzYWdlLT5HZXREZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5
TmFtZSgKLSAgICAgICAgIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIik7Ci0gICAgbmVzdGVkX21z
ZyA9IHN0YXRpY19jYXN0PFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZSo+KAotICAgICAgICBy
LT5SZWxlYXNlTWVzc2FnZShhcmVuYV9tZXNzYWdlLCBmKSk7Ci0gIH0KLSAgRVhQRUNUX0VRKDQy
LCBuZXN0ZWRfbXNnLT5iYigpKTsKLSAgZGVsZXRlIG5lc3RlZF9tc2c7Ci19Ci0jZW5kaWYgIC8v
ICFHT09HTEVfUFJPVE9CVUZfTk9fUlRUSQotCi1URVNUKEFyZW5hVGVzdCwgVW5zYWZlQXJlbmFS
ZWxlYXNlRG9lc05vdE1ha2VDb3B5KSB7Ci0gIEFyZW5hIGFyZW5hOwotICBUZXN0QWxsVHlwZXMq
IGFyZW5hX21lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVu
YSk7Ci0gIFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZSogbmVzdGVkX21zZyA9IE5VTEw7Ci0g
IFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZSogb3JpZ19uZXN0ZWRfbXNnID0gTlVMTDsKLSAg
c3RyaW5nKiBuZXN0ZWRfc3RyaW5nID0gTlVMTDsKLSAgc3RyaW5nKiBvcmlnX25lc3RlZF9zdHJp
bmcgPSBOVUxMOwotICBhcmVuYV9tZXNzYWdlLT5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9tZXNz
YWdlKCktPnNldF9iYig0Mik7Ci0gICphcmVuYV9tZXNzYWdlLT5tdXRhYmxlX29wdGlvbmFsX3N0
cmluZygpID0gIkhlbGxvIjsKLSAgb3JpZ19uZXN0ZWRfbXNnID0gYXJlbmFfbWVzc2FnZS0+bXV0
YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpOwotICBvcmlnX25lc3RlZF9zdHJpbmcgPSBh
cmVuYV9tZXNzYWdlLT5tdXRhYmxlX29wdGlvbmFsX3N0cmluZygpOwotICBuZXN0ZWRfbXNnID0g
YXJlbmFfbWVzc2FnZS0+dW5zYWZlX2FyZW5hX3JlbGVhc2Vfb3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UoKTsKLSAgbmVzdGVkX3N0cmluZyA9IGFyZW5hX21lc3NhZ2UtPnVuc2FmZV9hcmVuYV9yZWxl
YXNlX29wdGlvbmFsX3N0cmluZygpOwotCi0gIEVYUEVDVF9FUShvcmlnX25lc3RlZF9tc2csIG5l
c3RlZF9tc2cpOwotICBFWFBFQ1RfRVEob3JpZ19uZXN0ZWRfc3RyaW5nLCBuZXN0ZWRfc3RyaW5n
KTsKLSAgLy8gUmVsZWFzZWQgcG9pbnRlcnMgc3RpbGwgb24gYXJlbmE7IG5vICdkZWxldGUnIGNh
bGxzIG5lZWRlZCBoZXJlLgotfQotCi1URVNUKEFyZW5hVGVzdCwgU2V0QWxsb2NhdGVkQWNyb3Nz
QXJlbmFzKSB7Ci0gIEFyZW5hIGFyZW5hMTsKLSAgVGVzdEFsbFR5cGVzKiBhcmVuYTFfbWVzc2Fn
ZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4oJmFyZW5hMSk7Ci0gIFRlc3RB
bGxUeXBlczo6TmVzdGVkTWVzc2FnZSogaGVhcF9zdWJtZXNzYWdlID0KLSAgICAgIG5ldyBUZXN0
QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UoKTsKLSAgaGVhcF9zdWJtZXNzYWdlLT5zZXRfYmIoNDIp
OwotICBhcmVuYTFfbWVzc2FnZS0+c2V0X2FsbG9jYXRlZF9vcHRpb25hbF9uZXN0ZWRfbWVzc2Fn
ZShoZWFwX3N1Ym1lc3NhZ2UpOwotICAvLyBTaG91bGQga2VlcCBzYW1lIG9iamVjdCBhbmQgYWRk
IHRvIGFyZW5hJ3MgT3duKCktbGlzdC4KLSAgRVhQRUNUX0VRKGhlYXBfc3VibWVzc2FnZSwKLSAg
ICAgICAgICAgIGFyZW5hMV9tZXNzYWdlLT5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9tZXNzYWdl
KCkpOwotICB7Ci0gICAgQXJlbmEgYXJlbmEyOwotICAgIFRlc3RBbGxUeXBlczo6TmVzdGVkTWVz
c2FnZSogYXJlbmEyX3N1Ym1lc3NhZ2UgPQotICAgICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxU
ZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2U+KCZhcmVuYTIpOwotICAgIGFyZW5hMl9zdWJtZXNz
YWdlLT5zZXRfYmIoNDIpOwotICAgIGFyZW5hMV9tZXNzYWdlLT5zZXRfYWxsb2NhdGVkX29wdGlv
bmFsX25lc3RlZF9tZXNzYWdlKGFyZW5hMl9zdWJtZXNzYWdlKTsKLSAgICBFWFBFQ1RfTkUoYXJl
bmEyX3N1Ym1lc3NhZ2UsCi0gICAgICAgICAgICAgIGFyZW5hMV9tZXNzYWdlLT5tdXRhYmxlX29w
dGlvbmFsX25lc3RlZF9tZXNzYWdlKCkpOwotICB9Ci0KLSAgVGVzdEFsbFR5cGVzOjpOZXN0ZWRN
ZXNzYWdlKiBhcmVuYTFfc3VibWVzc2FnZSA9Ci0gICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxU
ZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2U+KCZhcmVuYTEpOwotICBhcmVuYTFfc3VibWVzc2Fn
ZS0+c2V0X2JiKDQyKTsKLSAgVGVzdEFsbFR5cGVzKiBoZWFwX21lc3NhZ2UgPSBuZXcgVGVzdEFs
bFR5cGVzOwotICBoZWFwX21lc3NhZ2UtPnNldF9hbGxvY2F0ZWRfb3B0aW9uYWxfbmVzdGVkX21l
c3NhZ2UoYXJlbmExX3N1Ym1lc3NhZ2UpOwotICBFWFBFQ1RfTkUoYXJlbmExX3N1Ym1lc3NhZ2Us
Ci0gICAgICAgICAgICBoZWFwX21lc3NhZ2UtPm11dGFibGVfb3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UoKSk7Ci0gIGRlbGV0ZSBoZWFwX21lc3NhZ2U7Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBTZXRB
bGxvY2F0ZWRBY3Jvc3NBcmVuYXNXaXRoUmVmbGVjdGlvbikgewotICAvLyBTYW1lIGFzIGFib3Zl
LCB3aXRoIHJlZmxlY3Rpb24uCi0gIEFyZW5hIGFyZW5hMTsKLSAgVGVzdEFsbFR5cGVzKiBhcmVu
YTFfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4oJmFyZW5hMSk7
Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHIgPSBhcmVuYTFfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigp
OwotICBjb25zdCBEZXNjcmlwdG9yKiBkID0gYXJlbmExX21lc3NhZ2UtPkdldERlc2NyaXB0b3Io
KTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBtc2dfZmllbGQgPSBkLT5GaW5kRmllbGRCeU5h
bWUoCi0gICAgICAib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiKTsKLSAgVGVzdEFsbFR5cGVzOjpO
ZXN0ZWRNZXNzYWdlKiBoZWFwX3N1Ym1lc3NhZ2UgPQotICAgICAgbmV3IFRlc3RBbGxUeXBlczo6
TmVzdGVkTWVzc2FnZSgpOwotICBoZWFwX3N1Ym1lc3NhZ2UtPnNldF9iYig0Mik7Ci0gIHItPlNl
dEFsbG9jYXRlZE1lc3NhZ2UoYXJlbmExX21lc3NhZ2UsIGhlYXBfc3VibWVzc2FnZSwgbXNnX2Zp
ZWxkKTsKLSAgLy8gU2hvdWxkIGtlZXAgc2FtZSBvYmplY3QgYW5kIGFkZCB0byBhcmVuYSdzIE93
bigpLWxpc3QuCi0gIEVYUEVDVF9FUShoZWFwX3N1Ym1lc3NhZ2UsCi0gICAgICAgICAgICBhcmVu
YTFfbWVzc2FnZS0+bXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpKTsKLSAgewotICAg
IEFyZW5hIGFyZW5hMjsKLSAgICBUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UqIGFyZW5hMl9z
dWJtZXNzYWdlID0KLSAgICAgICAgQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzOjpO
ZXN0ZWRNZXNzYWdlPigmYXJlbmEyKTsKLSAgICBhcmVuYTJfc3VibWVzc2FnZS0+c2V0X2JiKDQy
KTsKLSAgICByLT5TZXRBbGxvY2F0ZWRNZXNzYWdlKGFyZW5hMV9tZXNzYWdlLCBhcmVuYTJfc3Vi
bWVzc2FnZSwgbXNnX2ZpZWxkKTsKLSAgICBFWFBFQ1RfTkUoYXJlbmEyX3N1Ym1lc3NhZ2UsCi0g
ICAgICAgICAgICAgIGFyZW5hMV9tZXNzYWdlLT5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9tZXNz
YWdlKCkpOwotICB9Ci0KLSAgVGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlKiBhcmVuYTFfc3Vi
bWVzc2FnZSA9Ci0gICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM6Ok5lc3Rl
ZE1lc3NhZ2U+KCZhcmVuYTEpOwotICBhcmVuYTFfc3VibWVzc2FnZS0+c2V0X2JiKDQyKTsKLSAg
VGVzdEFsbFR5cGVzKiBoZWFwX21lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzOwotICByLT5TZXRB
bGxvY2F0ZWRNZXNzYWdlKGhlYXBfbWVzc2FnZSwgYXJlbmExX3N1Ym1lc3NhZ2UsIG1zZ19maWVs
ZCk7Ci0gIEVYUEVDVF9ORShhcmVuYTFfc3VibWVzc2FnZSwKLSAgICAgICAgICAgIGhlYXBfbWVz
c2FnZS0+bXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpKTsKLSAgZGVsZXRlIGhlYXBf
bWVzc2FnZTsKLX0KLQotVEVTVChBcmVuYVRlc3QsIEFkZEFsbG9jYXRlZFdpdGhSZWZsZWN0aW9u
KSB7Ci0gIEFyZW5hIGFyZW5hMTsKLSAgQXJlbmFNZXNzYWdlKiBhcmVuYTFfbWVzc2FnZSA9IEFy
ZW5hOjpDcmVhdGVNZXNzYWdlPEFyZW5hTWVzc2FnZT4oJmFyZW5hMSk7Ci0gIGNvbnN0IFJlZmxl
Y3Rpb24qIHIgPSBhcmVuYTFfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotICBjb25zdCBEZXNj
cmlwdG9yKiBkID0gYXJlbmExX21lc3NhZ2UtPkdldERlc2NyaXB0b3IoKTsKLSAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmZCA9Ci0gICAgICBkLT5GaW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2lt
cG9ydF9ub19hcmVuYV9tZXNzYWdlIik7Ci0gIC8vIE1lc3NhZ2Ugd2l0aCBjY19lbmFibGVfYXJl
bmFzID0gZmFsc2U7Ci0gIHItPkFkZE1lc3NhZ2UoYXJlbmExX21lc3NhZ2UsIGZkKTsKLSAgci0+
QWRkTWVzc2FnZShhcmVuYTFfbWVzc2FnZSwgZmQpOwotICByLT5BZGRNZXNzYWdlKGFyZW5hMV9t
ZXNzYWdlLCBmZCk7Ci0gIEVYUEVDVF9FUSgzLCByLT5GaWVsZFNpemUoKmFyZW5hMV9tZXNzYWdl
LCBmZCkpOwotICAvLyBNZXNzYWdlIHdpdGggY2NfZW5hYmxlX2FyZW5hcyA9IHRydWU7Ci0gIGZk
ID0gZC0+RmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSIpOwotICByLT5B
ZGRNZXNzYWdlKGFyZW5hMV9tZXNzYWdlLCBmZCk7Ci0gIHItPkFkZE1lc3NhZ2UoYXJlbmExX21l
c3NhZ2UsIGZkKTsKLSAgci0+QWRkTWVzc2FnZShhcmVuYTFfbWVzc2FnZSwgZmQpOwotICBFWFBF
Q1RfRVEoMywgci0+RmllbGRTaXplKCphcmVuYTFfbWVzc2FnZSwgZmQpKTsKLX0KLQotVEVTVChB
cmVuYVRlc3QsIFJlcGVhdGVkUHRyRmllbGRBZGRDbGVhcmVkVGVzdCkgewotICB7Ci0gICAgUmVw
ZWF0ZWRQdHJGaWVsZDxUZXN0QWxsVHlwZXM+IHJlcGVhdGVkX2ZpZWxkOwotICAgIEVYUEVDVF9U
UlVFKHJlcGVhdGVkX2ZpZWxkLmVtcHR5KCkpOwotICAgIEVYUEVDVF9FUSgwLCByZXBlYXRlZF9m
aWVsZC5zaXplKCkpOwotICAgIC8vIE93bmVyc2hpcCBpcyBwYXNzZWQgdG8gcmVwZWF0ZWRfZmll
bGQuCi0gICAgVGVzdEFsbFR5cGVzKiBjbGVhcmVkID0gbmV3IFRlc3RBbGxUeXBlcygpOwotICAg
IHJlcGVhdGVkX2ZpZWxkLkFkZENsZWFyZWQoY2xlYXJlZCk7Ci0gICAgRVhQRUNUX1RSVUUocmVw
ZWF0ZWRfZmllbGQuZW1wdHkoKSk7Ci0gICAgRVhQRUNUX0VRKDAsIHJlcGVhdGVkX2ZpZWxkLnNp
emUoKSk7Ci0gIH0KLSAgewotICAgIFJlcGVhdGVkUHRyRmllbGQ8VGVzdEFsbFR5cGVzPiByZXBl
YXRlZF9maWVsZDsKLSAgICBFWFBFQ1RfVFJVRShyZXBlYXRlZF9maWVsZC5lbXB0eSgpKTsKLSAg
ICBFWFBFQ1RfRVEoMCwgcmVwZWF0ZWRfZmllbGQuc2l6ZSgpKTsKLSAgICAvLyBPd25lcnNoaXAg
aXMgcGFzc2VkIHRvIHJlcGVhdGVkX2ZpZWxkLgotICAgIFRlc3RBbGxUeXBlcyogY2xlYXJlZCA9
IG5ldyBUZXN0QWxsVHlwZXMoKTsKLSAgICByZXBlYXRlZF9maWVsZC5BZGRBbGxvY2F0ZWQoY2xl
YXJlZCk7Ci0gICAgRVhQRUNUX0ZBTFNFKHJlcGVhdGVkX2ZpZWxkLmVtcHR5KCkpOwotICAgIEVY
UEVDVF9FUSgxLCByZXBlYXRlZF9maWVsZC5zaXplKCkpOwotICB9Ci19Ci0KLVRFU1QoQXJlbmFU
ZXN0LCBBZGRBbGxvY2F0ZWRUb1JlcGVhdGVkRmllbGQpIHsKLSAgLy8gSGVhcC0+YXJlbmEgY2Fz
ZS4KLSAgQXJlbmEgYXJlbmExOwotICBUZXN0QWxsVHlwZXMqIGFyZW5hMV9tZXNzYWdlID0gQXJl
bmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmExKTsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgVGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlKiBoZWFw
X3N1Ym1lc3NhZ2UgPQotICAgICAgICBuZXcgVGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlKCk7
Ci0gICAgaGVhcF9zdWJtZXNzYWdlLT5zZXRfYmIoNDIpOwotICAgIGFyZW5hMV9tZXNzYWdlLT5t
dXRhYmxlX3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlKCktPgotICAgICAgICBBZGRBbGxvY2F0ZWQo
aGVhcF9zdWJtZXNzYWdlKTsKLSAgICAvLyBTaG91bGQgbm90IGNvcHkgb2JqZWN0IC0tIHdpbGwg
dXNlIGFyZW5hXy0+T3duKCkuCi0gICAgRVhQRUNUX0VRKGhlYXBfc3VibWVzc2FnZSwKLSAgICAg
ICAgICAgICAgJmFyZW5hMV9tZXNzYWdlLT5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZShpKSk7Ci0g
ICAgRVhQRUNUX0VRKDQyLCBhcmVuYTFfbWVzc2FnZS0+cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Uo
aSkuYmIoKSk7Ci0gIH0KLQotICAvLyBBcmVuYTEtPkFyZW5hMiBjYXNlLgotICBhcmVuYTFfbWVz
c2FnZS0+Q2xlYXIoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgQXJl
bmEgYXJlbmEyOwotICAgIFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZSogYXJlbmEyX3N1Ym1l
c3NhZ2UgPQotICAgICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM6Ok5lc3Rl
ZE1lc3NhZ2U+KCZhcmVuYTIpOwotICAgIGFyZW5hMl9zdWJtZXNzYWdlLT5zZXRfYmIoNDIpOwot
ICAgIGFyZW5hMV9tZXNzYWdlLT5tdXRhYmxlX3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlKCktPgot
ICAgICAgICBBZGRBbGxvY2F0ZWQoYXJlbmEyX3N1Ym1lc3NhZ2UpOwotICAgIC8vIFNob3VsZCBj
b3B5IG9iamVjdC4KLSAgICBFWFBFQ1RfTkUoYXJlbmEyX3N1Ym1lc3NhZ2UsCi0gICAgICAgICAg
ICAgICZhcmVuYTFfbWVzc2FnZS0+cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UoaSkpOwotICAgIEVY
UEVDVF9FUSg0MiwgYXJlbmExX21lc3NhZ2UtPnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKGkpLmJi
KCkpOwotICB9Ci0KLSAgLy8gQXJlbmEtPmhlYXAgY2FzZS4KLSAgVGVzdEFsbFR5cGVzKiBoZWFw
X21lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7
IGkrKykgewotICAgIEFyZW5hIGFyZW5hMjsKLSAgICBUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3Nh
Z2UqIGFyZW5hMl9zdWJtZXNzYWdlID0KLSAgICAgICAgQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVz
dEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlPigmYXJlbmEyKTsKLSAgICBhcmVuYTJfc3VibWVzc2Fn
ZS0+c2V0X2JiKDQyKTsKLSAgICBoZWFwX21lc3NhZ2UtPm11dGFibGVfcmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2UoKS0+Ci0gICAgICAgIEFkZEFsbG9jYXRlZChhcmVuYTJfc3VibWVzc2FnZSk7Ci0g
ICAgLy8gU2hvdWxkIGNvcHkgb2JqZWN0LgotICAgIEVYUEVDVF9ORShhcmVuYTJfc3VibWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgJmhlYXBfbWVzc2FnZS0+cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Uo
aSkpOwotICAgIEVYUEVDVF9FUSg0MiwgaGVhcF9tZXNzYWdlLT5yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZShpKS5iYigpKTsKLSAgfQotICBkZWxldGUgaGVhcF9tZXNzYWdlOwotCi0gIC8vIEhlYXAt
YXJlbmEgY2FzZSBmb3Igc3RyaW5ncyAod2hpY2ggYXJlIG5vdCBhcmVuYS1hbGxvY2F0ZWQpLgot
ICBhcmVuYTFfbWVzc2FnZS0+Q2xlYXIoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsr
KSB7Ci0gICAgc3RyaW5nKiBzID0gbmV3IHN0cmluZygiVGVzdCIpOwotICAgIGFyZW5hMV9tZXNz
YWdlLT5tdXRhYmxlX3JlcGVhdGVkX3N0cmluZygpLT4KLSAgICAgICAgQWRkQWxsb2NhdGVkKHMp
OwotICAgIC8vIFNob3VsZCBub3QgY29weS4KLSAgICBFWFBFQ1RfRVEocywgJmFyZW5hMV9tZXNz
YWdlLT5yZXBlYXRlZF9zdHJpbmcoaSkpOwotICAgIEVYUEVDVF9FUSgiVGVzdCIsIGFyZW5hMV9t
ZXNzYWdlLT5yZXBlYXRlZF9zdHJpbmcoaSkpOwotICB9Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBB
ZGRBbGxvY2F0ZWRUb1JlcGVhdGVkRmllbGRWaWFSZWZsZWN0aW9uKSB7Ci0gIC8vIEhlYXAtPmFy
ZW5hIGNhc2UuCi0gIEFyZW5hIGFyZW5hMTsKLSAgVGVzdEFsbFR5cGVzKiBhcmVuYTFfbWVzc2Fn
ZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4oJmFyZW5hMSk7Ci0gIGNvbnN0
IFJlZmxlY3Rpb24qIHIgPSBhcmVuYTFfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotICBjb25z
dCBEZXNjcmlwdG9yKiBkID0gYXJlbmExX21lc3NhZ2UtPkdldERlc2NyaXB0b3IoKTsKLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmZCA9Ci0gICAgICBkLT5GaW5kRmllbGRCeU5hbWUoInJlcGVh
dGVkX25lc3RlZF9tZXNzYWdlIik7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewot
ICAgIFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZSogaGVhcF9zdWJtZXNzYWdlID0KLSAgICAg
ICAgbmV3IFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZTsKLSAgICBoZWFwX3N1Ym1lc3NhZ2Ut
PnNldF9iYig0Mik7Ci0gICAgci0+QWRkQWxsb2NhdGVkTWVzc2FnZShhcmVuYTFfbWVzc2FnZSwg
ZmQsIGhlYXBfc3VibWVzc2FnZSk7Ci0gICAgLy8gU2hvdWxkIG5vdCBjb3B5IG9iamVjdCAtLSB3
aWxsIHVzZSBhcmVuYV8tPk93bigpLgotICAgIEVYUEVDVF9FUShoZWFwX3N1Ym1lc3NhZ2UsCi0g
ICAgICAgICAgICAgICZhcmVuYTFfbWVzc2FnZS0+cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UoaSkp
OwotICAgIEVYUEVDVF9FUSg0MiwgYXJlbmExX21lc3NhZ2UtPnJlcGVhdGVkX25lc3RlZF9tZXNz
YWdlKGkpLmJiKCkpOwotICB9Ci0KLSAgLy8gQXJlbmExLT5BcmVuYTIgY2FzZS4KLSAgYXJlbmEx
X21lc3NhZ2UtPkNsZWFyKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAg
IEFyZW5hIGFyZW5hMjsKLSAgICBUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UqIGFyZW5hMl9z
dWJtZXNzYWdlID0KLSAgICAgICAgQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzOjpO
ZXN0ZWRNZXNzYWdlPigmYXJlbmEyKTsKLSAgICBhcmVuYTJfc3VibWVzc2FnZS0+c2V0X2JiKDQy
KTsKLSAgICByLT5BZGRBbGxvY2F0ZWRNZXNzYWdlKGFyZW5hMV9tZXNzYWdlLCBmZCwgYXJlbmEy
X3N1Ym1lc3NhZ2UpOwotICAgIC8vIFNob3VsZCBjb3B5IG9iamVjdC4KLSAgICBFWFBFQ1RfTkUo
YXJlbmEyX3N1Ym1lc3NhZ2UsCi0gICAgICAgICAgICAgICZhcmVuYTFfbWVzc2FnZS0+cmVwZWF0
ZWRfbmVzdGVkX21lc3NhZ2UoaSkpOwotICAgIEVYUEVDVF9FUSg0MiwgYXJlbmExX21lc3NhZ2Ut
PnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKGkpLmJiKCkpOwotICB9Ci0KLSAgLy8gQXJlbmEtPmhl
YXAgY2FzZS4KLSAgVGVzdEFsbFR5cGVzKiBoZWFwX21lc3NhZ2UgPSBuZXcgVGVzdEFsbFR5cGVz
OwotICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAgICBBcmVuYSBhcmVuYTI7Ci0g
ICAgVGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlKiBhcmVuYTJfc3VibWVzc2FnZSA9Ci0gICAg
ICAgIEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZT4oJmFy
ZW5hMik7Ci0gICAgYXJlbmEyX3N1Ym1lc3NhZ2UtPnNldF9iYig0Mik7Ci0gICAgci0+QWRkQWxs
b2NhdGVkTWVzc2FnZShoZWFwX21lc3NhZ2UsIGZkLCBhcmVuYTJfc3VibWVzc2FnZSk7Ci0gICAg
Ly8gU2hvdWxkIGNvcHkgb2JqZWN0LgotICAgIEVYUEVDVF9ORShhcmVuYTJfc3VibWVzc2FnZSwK
LSAgICAgICAgICAgICAgJmhlYXBfbWVzc2FnZS0+cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UoaSkp
OwotICAgIEVYUEVDVF9FUSg0MiwgaGVhcF9tZXNzYWdlLT5yZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZShpKS5iYigpKTsKLSAgfQotICBkZWxldGUgaGVhcF9tZXNzYWdlOwotfQotCi1URVNUKEFyZW5h
VGVzdCwgUmVsZWFzZUxhc3RSZXBlYXRlZEZpZWxkKSB7Ci0gIC8vIFJlbGVhc2UgZnJvbSBhcmVu
YS1hbGxvY2F0ZWQgcmVwZWF0ZWQgZmllbGQgYW5kIGVuc3VyZSB0aGF0IHJldHVybmVkIG9iamVj
dAotICAvLyBpcyBoZWFwLWFsbG9jYXRlZC4KLSAgQXJlbmEgYXJlbmE7Ci0gIFRlc3RBbGxUeXBl
cyogYXJlbmFfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4oJmFy
ZW5hKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgVGVzdEFsbFR5cGVz
OjpOZXN0ZWRNZXNzYWdlKiBuZXN0ZWQgPQotICAgICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxU
ZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2U+KCZhcmVuYSk7Ci0gICAgbmVzdGVkLT5zZXRfYmIo
NDIpOwotICAgIGFyZW5hX21lc3NhZ2UtPm11dGFibGVfcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Uo
KS0+QWRkQWxsb2NhdGVkKG5lc3RlZCk7Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IDEw
OyBpKyspIHsKLSAgICBjb25zdCBUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UgKm9yaWdfc3Vi
bWVzc2FnZSA9Ci0gICAgICAgICZhcmVuYV9tZXNzYWdlLT5yZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZSgxMCAtIDEgLSBpKTsgIC8vIGxhc3QgZWxlbWVudAotICAgIFRlc3RBbGxUeXBlczo6TmVzdGVk
TWVzc2FnZSAqcmVsZWFzZWQgPQotICAgICAgICBhcmVuYV9tZXNzYWdlLT5tdXRhYmxlX3JlcGVh
dGVkX25lc3RlZF9tZXNzYWdlKCktPlJlbGVhc2VMYXN0KCk7Ci0gICAgRVhQRUNUX05FKHJlbGVh
c2VkLCBvcmlnX3N1Ym1lc3NhZ2UpOwotICAgIEVYUEVDVF9FUSg0MiwgcmVsZWFzZWQtPmJiKCkp
OwotICAgIGRlbGV0ZSByZWxlYXNlZDsKLSAgfQotCi0gIC8vIFRlc3QgVW5zYWZlQXJlbmFSZWxl
YXNlTGFzdCgpLgotICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAgICBUZXN0QWxs
VHlwZXM6Ok5lc3RlZE1lc3NhZ2UqIG5lc3RlZCA9Ci0gICAgICAgIEFyZW5hOjpDcmVhdGVNZXNz
YWdlPFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZT4oJmFyZW5hKTsKLSAgICBuZXN0ZWQtPnNl
dF9iYig0Mik7Ci0gICAgYXJlbmFfbWVzc2FnZS0+bXV0YWJsZV9yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZSgpLT5BZGRBbGxvY2F0ZWQobmVzdGVkKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBp
IDwgMTA7IGkrKykgewotICAgIGNvbnN0IFRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZSAqb3Jp
Z19zdWJtZXNzYWdlID0KLSAgICAgICAgJmFyZW5hX21lc3NhZ2UtPnJlcGVhdGVkX25lc3RlZF9t
ZXNzYWdlKDEwIC0gMSAtIGkpOyAgLy8gbGFzdCBlbGVtZW50Ci0gICAgVGVzdEFsbFR5cGVzOjpO
ZXN0ZWRNZXNzYWdlICpyZWxlYXNlZCA9Ci0gICAgICAgIGFyZW5hX21lc3NhZ2UtPm11dGFibGVf
cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UoKS0+Ci0gICAgICAgIFVuc2FmZUFyZW5hUmVsZWFzZUxh
c3QoKTsKLSAgICBFWFBFQ1RfRVEocmVsZWFzZWQsIG9yaWdfc3VibWVzc2FnZSk7Ci0gICAgRVhQ
RUNUX0VRKDQyLCByZWxlYXNlZC0+YmIoKSk7Ci0gICAgLy8gbm8gZGVsZXRlIC0tIHxyZWxlYXNl
ZHwgaXMgb24gdGhlIGFyZW5hLgotICB9Ci0KLSAgLy8gVGVzdCBzdHJpbmcgY2FzZSBhcyB3ZWxs
LiBSZWxlYXNlTGFzdCgpIGluIHRoaXMgY2FzZSBtdXN0IGNvcHkgdGhlIHN0cmluZywKLSAgLy8g
ZXZlbiB0aG91Z2ggaXQgd2FzIG9yaWdpbmFsbHkgaGVhcC1hbGxvY2F0ZWQgYW5kIGl0cyBwb2lu
dGVyIHdhcyBzaW1wbHkKLSAgLy8gYXBwZW5kZWQgdG8gdGhlIHJlcGVhdGVkIGZpZWxkJ3MgaW50
ZXJuYWwgdmVjdG9yLCBiZWNhdXNlIHRoZSBzdHJpbmcgd2FzCi0gIC8vIHBsYWNlZCBvbiB0aGUg
YXJlbmEncyBkZXN0cnVjdG9yIGxpc3QgYW5kIGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhhdCBs
aXN0Ci0gIC8vIChzbyB0aGUgYXJlbmEgcGVybWFuZW50bHkgb3ducyB0aGUgb3JpZ2luYWwgaW5z
dGFuY2UpLgotICBhcmVuYV9tZXNzYWdlLT5DbGVhcigpOwotICBmb3IgKGludCBpID0gMDsgaSA8
IDEwOyBpKyspIHsKLSAgICBzdHJpbmcqIHMgPSBuZXcgc3RyaW5nKCJUZXN0Iik7Ci0gICAgYXJl
bmFfbWVzc2FnZS0+bXV0YWJsZV9yZXBlYXRlZF9zdHJpbmcoKS0+QWRkQWxsb2NhdGVkKHMpOwot
ICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgIGNvbnN0IHN0cmluZyog
b3JpZ19lbGVtZW50ID0gJmFyZW5hX21lc3NhZ2UtPnJlcGVhdGVkX3N0cmluZygxMCAtIDEgLSBp
KTsKLSAgICBzdHJpbmcqIHJlbGVhc2VkID0gYXJlbmFfbWVzc2FnZS0+bXV0YWJsZV9yZXBlYXRl
ZF9zdHJpbmcoKS0+UmVsZWFzZUxhc3QoKTsKLSAgICBFWFBFQ1RfTkUocmVsZWFzZWQsIG9yaWdf
ZWxlbWVudCk7Ci0gICAgRVhQRUNUX0VRKCJUZXN0IiwgKnJlbGVhc2VkKTsKLSAgICBkZWxldGUg
cmVsZWFzZWQ7Ci0gIH0KLX0KLQotVEVTVChBcmVuYVRlc3QsIFVuc2FmZUFyZW5hUmVsZWFzZUFk
ZCkgewotICAvLyBVc2UgdW5zYWZlX2FyZW5hX3JlbGVhc2UoKSBhbmQgdW5zYWZlX2FyZW5hX3Nl
dF9hbGxvY2F0ZWQoKSB0byB0cmFuc2ZlciBhbgotICAvLyBhcmVuYS1hbGxvY2F0ZWQgc3RyaW5n
IGZyb20gb25lIG1lc3NhZ2UgdG8gYW5vdGhlci4KLSAgQXJlbmEgYXJlbmE7Ci0gIFRlc3RBbGxU
eXBlcyogbWVzc2FnZTEgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVu
YSk7Ci0gIFRlc3RBbGxUeXBlcyogbWVzc2FnZTIgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0
QWxsVHlwZXM+KCZhcmVuYSk7Ci0gIHN0cmluZyogYXJlbmFfc3RyaW5nID0gQXJlbmE6OkNyZWF0
ZTxzdHJpbmc+KCZhcmVuYSk7Ci0gICphcmVuYV9zdHJpbmcgPSAiVGVzdCBjb250ZW50IjsKLQot
ICBtZXNzYWdlMS0+dW5zYWZlX2FyZW5hX3NldF9hbGxvY2F0ZWRfb3B0aW9uYWxfc3RyaW5nKGFy
ZW5hX3N0cmluZyk7Ci0gIEVYUEVDVF9FUShhcmVuYV9zdHJpbmcsIG1lc3NhZ2UxLT5tdXRhYmxl
X29wdGlvbmFsX3N0cmluZygpKTsKLSAgbWVzc2FnZTItPnVuc2FmZV9hcmVuYV9zZXRfYWxsb2Nh
dGVkX29wdGlvbmFsX3N0cmluZygKLSAgICAgIG1lc3NhZ2UxLT51bnNhZmVfYXJlbmFfcmVsZWFz
ZV9vcHRpb25hbF9zdHJpbmcoKSk7Ci0gIEVYUEVDVF9FUShhcmVuYV9zdHJpbmcsIG1lc3NhZ2Uy
LT5tdXRhYmxlX29wdGlvbmFsX3N0cmluZygpKTsKLX0KLQotVEVTVChBcmVuYVRlc3QsIFVuc2Fm
ZUFyZW5hQWRkQWxsb2NhdGVkKSB7Ci0gIEFyZW5hIGFyZW5hOwotICBUZXN0QWxsVHlwZXMqIG1l
c3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYSk7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgIHN0cmluZyogYXJlbmFfc3RyaW5nID0g
QXJlbmE6OkNyZWF0ZTxzdHJpbmc+KCZhcmVuYSk7Ci0gICAgbWVzc2FnZS0+bXV0YWJsZV9yZXBl
YXRlZF9zdHJpbmcoKS0+VW5zYWZlQXJlbmFBZGRBbGxvY2F0ZWQoYXJlbmFfc3RyaW5nKTsKLSAg
ICBFWFBFQ1RfRVEoYXJlbmFfc3RyaW5nLCBtZXNzYWdlLT5tdXRhYmxlX3JlcGVhdGVkX3N0cmlu
ZyhpKSk7Ci0gIH0KLX0KLQotVEVTVChBcmVuYVRlc3QsIFVuc2FmZUFyZW5hUmVsZWFzZSkgewot
ICBBcmVuYSBhcmVuYTsKLSAgVGVzdEFsbFR5cGVzKiBtZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1l
c3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmEpOwotCi0gIHN0cmluZyogcyA9IG5ldyBzdHJpbmco
InRlc3Qgc3RyaW5nIik7Ci0gIG1lc3NhZ2UtPnVuc2FmZV9hcmVuYV9zZXRfYWxsb2NhdGVkX29w
dGlvbmFsX3N0cmluZyhzKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS0+aGFzX29wdGlvbmFsX3N0
cmluZygpKTsKLSAgRVhQRUNUX0VRKCJ0ZXN0IHN0cmluZyIsIG1lc3NhZ2UtPm9wdGlvbmFsX3N0
cmluZygpKTsKLSAgcyA9IG1lc3NhZ2UtPnVuc2FmZV9hcmVuYV9yZWxlYXNlX29wdGlvbmFsX3N0
cmluZygpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS0+aGFzX29wdGlvbmFsX3N0cmluZygpKTsK
LSAgZGVsZXRlIHM7Ci0KLSAgcyA9IG5ldyBzdHJpbmcoInRlc3Qgc3RyaW5nIik7Ci0gIG1lc3Nh
Z2UtPnVuc2FmZV9hcmVuYV9zZXRfYWxsb2NhdGVkX29uZW9mX3N0cmluZyhzKTsKLSAgRVhQRUNU
X1RSVUUobWVzc2FnZS0+aGFzX29uZW9mX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKCJ0ZXN0IHN0
cmluZyIsIG1lc3NhZ2UtPm9uZW9mX3N0cmluZygpKTsKLSAgcyA9IG1lc3NhZ2UtPnVuc2FmZV9h
cmVuYV9yZWxlYXNlX29uZW9mX3N0cmluZygpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS0+aGFz
X29uZW9mX3N0cmluZygpKTsKLSAgZGVsZXRlIHM7Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBBcmVu
YU9uZW9mUmVmbGVjdGlvbikgewotICBBcmVuYSBhcmVuYTsKLSAgVGVzdEFsbFR5cGVzKiBtZXNz
YWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmEpOwotICBjb25z
dCBEZXNjcmlwdG9yKiBkZXNjID0gbWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpOwotICBjb25zdCBS
ZWZsZWN0aW9uKiByZWZsID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotCi0gIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogc3RyaW5nX2ZpZWxkID0gZGVzYy0+RmluZEZpZWxkQnlOYW1lKAotICAg
ICAgIm9uZW9mX3N0cmluZyIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG1zZ19maWVsZCA9
IGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgKLSAgICAgICJvbmVvZl9uZXN0ZWRfbWVzc2FnZSIpOwot
ICBjb25zdCBPbmVvZkRlc2NyaXB0b3IqIG9uZW9mID0gZGVzYy0+RmluZE9uZW9mQnlOYW1lKAot
ICAgICAgIm9uZW9mX2ZpZWxkIik7Ci0KLSAgcmVmbC0+U2V0U3RyaW5nKG1lc3NhZ2UsIHN0cmlu
Z19maWVsZCwgIlRlc3QgdmFsdWUiKTsKLSAgRVhQRUNUX1RSVUUocmVmbC0+SGFzT25lb2YoKm1l
c3NhZ2UsIG9uZW9mKSk7Ci0gIHJlZmwtPkNsZWFyT25lb2YobWVzc2FnZSwgb25lb2YpOwotICBF
WFBFQ1RfRkFMU0UocmVmbC0+SGFzT25lb2YoKm1lc3NhZ2UsIG9uZW9mKSk7Ci0KLSAgTWVzc2Fn
ZSogc3VibXNnID0gcmVmbC0+TXV0YWJsZU1lc3NhZ2UobWVzc2FnZSwgbXNnX2ZpZWxkKTsKLSAg
RVhQRUNUX1RSVUUocmVmbC0+SGFzT25lb2YoKm1lc3NhZ2UsIG9uZW9mKSk7Ci0gIHJlZmwtPkNs
ZWFyT25lb2YobWVzc2FnZSwgb25lb2YpOwotICBFWFBFQ1RfRkFMU0UocmVmbC0+SGFzT25lb2Yo
Km1lc3NhZ2UsIG9uZW9mKSk7Ci0gIHJlZmwtPk11dGFibGVNZXNzYWdlKG1lc3NhZ2UsIG1zZ19m
aWVsZCk7Ci0gIEVYUEVDVF9UUlVFKHJlZmwtPkhhc09uZW9mKCptZXNzYWdlLCBvbmVvZikpOwot
ICBzdWJtc2cgPSByZWZsLT5SZWxlYXNlTWVzc2FnZShtZXNzYWdlLCBtc2dfZmllbGQpOwotICBF
WFBFQ1RfRkFMU0UocmVmbC0+SGFzT25lb2YoKm1lc3NhZ2UsIG9uZW9mKSk7Ci0gIEVYUEVDVF9U
UlVFKHN1Ym1zZy0+R2V0QXJlbmEoKSA9PSBOVUxMKTsKLSAgZGVsZXRlIHN1Ym1zZzsKLX0KLQot
bmFtZXNwYWNlIHsKLXZvaWQgVGVzdFN3YXBSZXBlYXRlZEZpZWxkKEFyZW5hKiBhcmVuYTEsIEFy
ZW5hKiBhcmVuYTIpIHsKLSAgLy8gVGVzdCAic2FmZSIgKGNvcHlpbmcpIHNlbWFudGljcyBmb3Ig
ZGlyZWN0IFN3YXAoKSBvbiBSZXBlYXRlZFB0ckZpZWxkCi0gIC8vIGJldHdlZW4gYXJlbmFzLgot
ICBSZXBlYXRlZFB0ckZpZWxkPFRlc3RBbGxUeXBlcz4gZmllbGQxKGFyZW5hMSk7Ci0gIFJlcGVh
dGVkUHRyRmllbGQ8VGVzdEFsbFR5cGVzPiBmaWVsZDIoYXJlbmEyKTsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgVGVzdEFsbFR5cGVzKiB0ID0gQXJlbmE6OkNyZWF0ZU1l
c3NhZ2U8VGVzdEFsbFR5cGVzPihhcmVuYTEpOwotICAgIHQtPnNldF9vcHRpb25hbF9zdHJpbmco
ImZpZWxkMSIpOwotICAgIHQtPnNldF9vcHRpb25hbF9pbnQzMihpKTsKLSAgICBpZiAoYXJlbmEx
ICE9IE5VTEwpIHsKLSAgICAgIGZpZWxkMS5VbnNhZmVBcmVuYUFkZEFsbG9jYXRlZCh0KTsKLSAg
ICB9IGVsc2UgewotICAgICAgZmllbGQxLkFkZEFsbG9jYXRlZCh0KTsKLSAgICB9Ci0gIH0KLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKLSAgICBUZXN0QWxsVHlwZXMqIHQgPSBBcmVu
YTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KGFyZW5hMik7Ci0gICAgdC0+c2V0X29wdGlv
bmFsX3N0cmluZygiZmllbGQyIik7Ci0gICAgdC0+c2V0X29wdGlvbmFsX2ludDMyKGkpOwotICAg
IGlmIChhcmVuYTIgIT0gTlVMTCkgewotICAgICAgZmllbGQyLlVuc2FmZUFyZW5hQWRkQWxsb2Nh
dGVkKHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmaWVsZDIuQWRkQWxsb2NhdGVkKHQpOwotICAg
IH0KLSAgfQotICBmaWVsZDEuU3dhcCgmZmllbGQyKTsKLSAgRVhQRUNUX0VRKDUsIGZpZWxkMS5z
aXplKCkpOwotICBFWFBFQ1RfRVEoMTAsIGZpZWxkMi5zaXplKCkpOwotICBFWFBFQ1RfVFJVRShz
dHJpbmcoImZpZWxkMSIpID09IGZpZWxkMi5HZXQoMCkub3B0aW9uYWxfc3RyaW5nKCkpOwotICBF
WFBFQ1RfVFJVRShzdHJpbmcoImZpZWxkMiIpID09IGZpZWxkMS5HZXQoMCkub3B0aW9uYWxfc3Ry
aW5nKCkpOwotICAvLyBFbnN1cmUgdGhhdCBmaWVsZHMgcmV0YWluZWQgdGhlaXIgb3JpZ2luYWwg
b3JkZXI6Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGQxLnNpemUoKTsgaSsrKSB7Ci0gICAg
RVhQRUNUX0VRKGksIGZpZWxkMS5HZXQoaSkub3B0aW9uYWxfaW50MzIoKSk7Ci0gIH0KLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBmaWVsZDIuc2l6ZSgpOyBpKyspIHsKLSAgICBFWFBFQ1RfRVEoaSwg
ZmllbGQyLkdldChpKS5vcHRpb25hbF9pbnQzMigpKTsKLSAgfQotfQotfSAgLy8gbmFtZXNwYWNl
Ci0KLVRFU1QoQXJlbmFUZXN0LCBTd2FwUmVwZWF0ZWRGaWVsZCkgewotICBBcmVuYSBhcmVuYTsK
LSAgVGVzdFN3YXBSZXBlYXRlZEZpZWxkKCZhcmVuYSwgJmFyZW5hKTsKLX0KLQotVEVTVChBcmVu
YVRlc3QsIFN3YXBSZXBlYXRlZEZpZWxkV2l0aERpZmZlcmVudEFyZW5hcykgewotICBBcmVuYSBh
cmVuYTE7Ci0gIEFyZW5hIGFyZW5hMjsKLSAgVGVzdFN3YXBSZXBlYXRlZEZpZWxkKCZhcmVuYTEs
ICZhcmVuYTIpOwotfQotCi1URVNUKEFyZW5hVGVzdCwgU3dhcFJlcGVhdGVkRmllbGRXaXRoTm9B
cmVuYU9uUmlnaHRIYW5kU2lkZSkgewotICBBcmVuYSBhcmVuYTsKLSAgVGVzdFN3YXBSZXBlYXRl
ZEZpZWxkKCZhcmVuYSwgTlVMTCk7Ci19Ci0KLVRFU1QoQXJlbmFUZXN0LCBTd2FwUmVwZWF0ZWRG
aWVsZFdpdGhOb0FyZW5hT25MZWZ0SGFuZFNpZGUpIHsKLSAgQXJlbmEgYXJlbmE7Ci0gIFRlc3RT
d2FwUmVwZWF0ZWRGaWVsZChOVUxMLCAmYXJlbmEpOwotfQotCi1URVNUKEFyZW5hVGVzdCwgRXh0
ZW5zaW9uc09uQXJlbmEpIHsKLSAgQXJlbmEgYXJlbmE7Ci0gIC8vIEVuc3VyZSBubyBsZWFrcy4K
LSAgVGVzdEFsbEV4dGVuc2lvbnMqIG1lc3NhZ2VfZXh0ID0KLSAgICAgIEFyZW5hOjpDcmVhdGVN
ZXNzYWdlPFRlc3RBbGxFeHRlbnNpb25zPigmYXJlbmEpOwotICBtZXNzYWdlX2V4dC0+U2V0RXh0
ZW5zaW9uKAotICAgICAgcHJvdG9idWZfdW5pdHRlc3Q6Om9wdGlvbmFsX2ludDMyX2V4dGVuc2lv
biwgNDIpOwotICBtZXNzYWdlX2V4dC0+U2V0RXh0ZW5zaW9uKAotICAgICAgcHJvdG9idWZfdW5p
dHRlc3Q6Om9wdGlvbmFsX3N0cmluZ19leHRlbnNpb24sIHN0cmluZygidGVzdCIpKTsKLSAgbWVz
c2FnZV9leHQtPk11dGFibGVFeHRlbnNpb24oCi0gICAgICBwcm90b2J1Zl91bml0dGVzdDo6b3B0
aW9uYWxfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uKS0+c2V0X2JiKDQyKTsKLX0KLQotVEVTVChB
cmVuYVRlc3QsIFJlcGVhdGVkRmllbGRPbkFyZW5hKSB7Ci0gIC8vIFByZWFsbG9jYXRlIGFuIGlu
aXRpYWwgYXJlbmEgYmxvY2sgdG8gYXZvaWQgbWFsbG9jcyBkdXJpbmcgaG9va2VkIHJlZ2lvbi4K
LSAgc3RkOjp2ZWN0b3I8Y2hhcj4gYXJlbmFfYmxvY2soMTAyNCAqIDEwMjQpOwotICBBcmVuYU9w
dGlvbnMgb3B0aW9uczsKLSAgb3B0aW9ucy5pbml0aWFsX2Jsb2NrID0gJmFyZW5hX2Jsb2NrWzBd
OwotICBvcHRpb25zLmluaXRpYWxfYmxvY2tfc2l6ZSA9IGFyZW5hX2Jsb2NrLnNpemUoKTsKLSAg
QXJlbmEgYXJlbmEob3B0aW9ucyk7Ci0KLSAgewotICAgIGludGVybmFsOjpOb0hlYXBDaGVja2Vy
IG5vX2hlYXA7Ci0KLSAgICAvLyBGaWxsIHNvbWUgcmVwZWF0ZWQgZmllbGRzIG9uIHRoZSBhcmVu
YSB0byB0ZXN0IGZvciBsZWFrcy4gQWxzbyB2ZXJpZnkgbm8KLSAgICAvLyBtZW1vcnkgYWxsb2Nh
dGlvbnMuCi0gICAgUmVwZWF0ZWRGaWVsZDxpbnQzMj4gcmVwZWF0ZWRfaW50MzIoJmFyZW5hKTsK
LSAgICBSZXBlYXRlZFB0ckZpZWxkPFRlc3RBbGxUeXBlcz4gcmVwZWF0ZWRfbWVzc2FnZSgmYXJl
bmEpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLSAgICAgIHJlcGVhdGVk
X2ludDMyLkFkZCg0Mik7Ci0gICAgICByZXBlYXRlZF9tZXNzYWdlLkFkZCgpLT5zZXRfb3B0aW9u
YWxfaW50MzIoNDIpOwotICAgICAgRVhQRUNUX0VRKCZhcmVuYSwgcmVwZWF0ZWRfbWVzc2FnZS5H
ZXQoMCkuR2V0QXJlbmEoKSk7Ci0gICAgICBjb25zdCBUZXN0QWxsVHlwZXMqIG1zZ19pbl9yZXBl
YXRlZF9maWVsZCA9ICZyZXBlYXRlZF9tZXNzYWdlLkdldCgwKTsKLSAgICAgIFRlc3RBbGxUeXBl
cyogbXNnID0gcmVwZWF0ZWRfbWVzc2FnZS5VbnNhZmVBcmVuYVJlbGVhc2VMYXN0KCk7Ci0gICAg
ICBFWFBFQ1RfRVEobXNnX2luX3JlcGVhdGVkX2ZpZWxkLCBtc2cpOwotICAgIH0KLQotICAgIC8v
IFVuc2FmZUFyZW5hRXh0cmFjdFN1YnJhbmdlIChpKSBzaG91bGQgbm90IGxlYWsgYW5kIChpaSkg
c2hvdWxkIHJldHVybgotICAgIC8vIG9uLWFyZW5hIHBvaW50ZXJzLgotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMTA7IGkrKykgewotICAgICAgcmVwZWF0ZWRfbWVzc2FnZS5BZGQoKS0+c2V0X29w
dGlvbmFsX2ludDMyKDQyKTsKLSAgICB9Ci0gICAgVGVzdEFsbFR5cGVzKiBleHRyYWN0ZWRfbWVz
c2FnZXNbNV07Ci0gICAgcmVwZWF0ZWRfbWVzc2FnZS5VbnNhZmVBcmVuYUV4dHJhY3RTdWJyYW5n
ZSgwLCA1LCBleHRyYWN0ZWRfbWVzc2FnZXMpOwotICAgIEVYUEVDVF9FUSgmYXJlbmEsIHJlcGVh
dGVkX21lc3NhZ2UuR2V0KDApLkdldEFyZW5hKCkpOwotICAgIEVYUEVDVF9FUSg1LCByZXBlYXRl
ZF9tZXNzYWdlLnNpemUoKSk7Ci0gIH0KLQotICAvLyBOb3csIG91dHNpZGUgdGhlIHNjb3BlIG9m
IHRoZSBOb0hlYXBDaGVja2VyLCB0ZXN0IEV4dHJhY3RTdWJyYW5nZSdzIGNvcHlpbmcKLSAgLy8g
c2VtYW50aWNzLgotICB7Ci0gICAgUmVwZWF0ZWRQdHJGaWVsZDxUZXN0QWxsVHlwZXM+IHJlcGVh
dGVkX21lc3NhZ2UoJmFyZW5hKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7
Ci0gICAgICByZXBlYXRlZF9tZXNzYWdlLkFkZCgpLT5zZXRfb3B0aW9uYWxfaW50MzIoNDIpOwot
ICAgIH0KLQotICAgIFRlc3RBbGxUeXBlcyogZXh0cmFjdGVkX21lc3NhZ2VzWzVdOwotICAgIC8v
IEV4dHJhY3RTdWJyYW5nZSBzaG91bGQgY29weSB0byB0aGUgaGVhcC4KLSAgICByZXBlYXRlZF9t
ZXNzYWdlLkV4dHJhY3RTdWJyYW5nZSgwLCA1LCBleHRyYWN0ZWRfbWVzc2FnZXMpOwotICAgIEVY
UEVDVF9FUShOVUxMLCBleHRyYWN0ZWRfbWVzc2FnZXNbMF0tPkdldEFyZW5hKCkpOwotICAgIC8v
IFdlIG5lZWQgdG8gZnJlZSB0aGUgaGVhcC1hbGxvY2F0ZWQgbWVzc2FnZXMgdG8gcHJldmVudCBh
IGxlYWsuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKLSAgICAgIGRlbGV0ZSBl
eHRyYWN0ZWRfbWVzc2FnZXNbaV07Ci0gICAgICBleHRyYWN0ZWRfbWVzc2FnZXNbaV0gPSBOVUxM
OwotICAgIH0KLSAgfQotCi0gIC8vIE5vdyBjaGVjayB0aGF0IHdlIGNhbiBjcmVhdGUgUmVwZWF0
ZWRGaWVsZHMvUmVwZWF0ZWRQdHJGaWVsZHMgdGhlbXNlbHZlcyBvbgotICAvLyB0aGUgYXJlbmEu
IFRoZXkgaGF2ZSB0aGUgbmVjZXNzYXJ5IHR5cGUgdHJhaXRzIHNvIHRoYXQgdGhleSBjYW4gYmVo
YXZlIGxpa2UKLSAgLy8gbWVzc2FnZXMgaW4gdGhpcyB3YXkuIFRoaXMgaXMgdXNlZnVsIGZvciBo
aWdoZXItbGV2ZWwgZ2VuZXJpYyB0ZW1wbGF0ZWQKLSAgLy8gY29kZSB0aGF0IG1heSBhbGxvY2F0
ZSBtZXNzYWdlcyBvciByZXBlYXRlZCBmaWVsZHMgb2YgbWVzc2FnZXMgb24gYW4gYXJlbmEuCi0g
IHsKLSAgICBSZXBlYXRlZFB0ckZpZWxkPFRlc3RBbGxUeXBlcz4qIHJlcGVhdGVkX3B0cl9vbl9h
cmVuYSA9Ci0gICAgICAgIEFyZW5hOjpDcmVhdGVNZXNzYWdlPCBSZXBlYXRlZFB0ckZpZWxkPFRl
c3RBbGxUeXBlcz4gPigmYXJlbmEpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykg
ewotICAgICAgLy8gQWRkIHNvbWUgZWxlbWVudHMgYW5kIGxldCB0aGUgbGVhay1jaGVja2VyIGVu
c3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMKLSAgICAgIC8vIGZyZWVkLgotICAgICAgcmVwZWF0ZWRf
cHRyX29uX2FyZW5hLT5BZGQoKTsKLSAgICB9Ci0KLSAgICBSZXBlYXRlZEZpZWxkPGludD4qIHJl
cGVhdGVkX2ludF9vbl9hcmVuYSA9Ci0gICAgICAgIEFyZW5hOjpDcmVhdGVNZXNzYWdlPCBSZXBl
YXRlZEZpZWxkPGludD4gPigmYXJlbmEpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBp
KyspIHsKLSAgICAgIHJlcGVhdGVkX2ludF9vbl9hcmVuYS0+QWRkKGkpOwotICAgIH0KLQotICB9
Ci0KLSAgYXJlbmEuUmVzZXQoKTsKLX0KLQotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9OT19S
VFRJCi1URVNUKEFyZW5hVGVzdCwgTXV0YWJsZU1lc3NhZ2VSZWZsZWN0aW9uKSB7Ci0gIEFyZW5h
IGFyZW5hOwotICBUZXN0QWxsVHlwZXMqIG1lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxU
ZXN0QWxsVHlwZXM+KCZhcmVuYSk7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHIgPSBtZXNzYWdlLT5H
ZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGQgPSBtZXNzYWdlLT5HZXREZXNj
cmlwdG9yKCk7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkLT5GaW5kRmllbGRC
eU5hbWUoIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIik7Ci0gIFRlc3RBbGxUeXBlczo6TmVzdGVk
TWVzc2FnZSogc3VibWVzc2FnZSA9Ci0gICAgICBzdGF0aWNfY2FzdDxUZXN0QWxsVHlwZXM6Ok5l
c3RlZE1lc3NhZ2UqPigKLSAgICAgICAgICByLT5NdXRhYmxlTWVzc2FnZShtZXNzYWdlLCBmaWVs
ZCkpOwotICBUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UqIHN1Ym1lc3NhZ2VfZXhwZWN0ZWQg
PQotICAgICAgbWVzc2FnZS0+bXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpOwotCi0g
IEVYUEVDVF9FUShzdWJtZXNzYWdlX2V4cGVjdGVkLCBzdWJtZXNzYWdlKTsKLSAgRVhQRUNUX0VR
KCZhcmVuYSwgc3VibWVzc2FnZS0+R2V0QXJlbmEoKSk7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBvbmVvZl9maWVsZCA9IGQtPkZpbmRGaWVsZEJ5TmFtZSgib25lb2ZfbmVzdGVkX21lc3Nh
Z2UiKTsKLSAgc3VibWVzc2FnZSA9IHN0YXRpY19jYXN0PFRlc3RBbGxUeXBlczo6TmVzdGVkTWVz
c2FnZSo+KAotICAgICAgci0+TXV0YWJsZU1lc3NhZ2UobWVzc2FnZSwgb25lb2ZfZmllbGQpKTsK
LSAgc3VibWVzc2FnZV9leHBlY3RlZCA9IG1lc3NhZ2UtPm11dGFibGVfb25lb2ZfbmVzdGVkX21l
c3NhZ2UoKTsKLQotICBFWFBFQ1RfRVEoc3VibWVzc2FnZV9leHBlY3RlZCwgc3VibWVzc2FnZSk7
Ci0gIEVYUEVDVF9FUSgmYXJlbmEsIHN1Ym1lc3NhZ2UtPkdldEFyZW5hKCkpOwotfQotI2VuZGlm
ICAvLyAhR09PR0xFX1BST1RPQlVGX05PX1JUVEkKLQotCi1uYW1lc3BhY2UgewotCi12b2lkIEZp
bGxBcmVuYUF3YXJlRmllbGRzKFRlc3RBbGxUeXBlcyogbWVzc2FnZSkgewotICBzdHJpbmcgdGVz
dF9zdHJpbmcgPSAiaGVsbG8gd29ybGQiOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfaW50MzIo
NDIpOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfc3RyaW5nKHRlc3Rfc3RyaW5nKTsKLSAgbWVz
c2FnZS0+c2V0X29wdGlvbmFsX2J5dGVzKHRlc3Rfc3RyaW5nKTsKLSAgbWVzc2FnZS0+bXV0YWJs
ZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpLT5zZXRfYmIoNDIpOwotCi0gIG1lc3NhZ2UtPnNl
dF9vbmVvZl91aW50MzIoNDIpOwotICBtZXNzYWdlLT5tdXRhYmxlX29uZW9mX25lc3RlZF9tZXNz
YWdlKCktPnNldF9iYig0Mik7Ci0gIG1lc3NhZ2UtPnNldF9vbmVvZl9zdHJpbmcodGVzdF9zdHJp
bmcpOwotICBtZXNzYWdlLT5zZXRfb25lb2ZfYnl0ZXModGVzdF9zdHJpbmcpOwotCi0gIG1lc3Nh
Z2UtPmFkZF9yZXBlYXRlZF9pbnQzMig0Mik7Ci0gIC8vIE5vIHJlcGVhdGVkIHN0cmluZzogbm90
IHlldCBhcmVuYS1hd2FyZS4KLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX25lc3RlZF9tZXNzYWdl
KCktPnNldF9iYig0Mik7Ci0gIG1lc3NhZ2UtPm11dGFibGVfb3B0aW9uYWxfbGF6eV9tZXNzYWdl
KCktPnNldF9iYig0Mik7Ci19Ci0KLX0KLQotLy8gVGVzdDogbm8gYWxsb2NhdGlvbnMgb2NjdXIg
b24gaGVhcCB3aGlsZSB0b3VjaGluZyBhbGwgc3VwcG9ydGVkIGZpZWxkIHR5cGVzLgotVEVTVChB
cmVuYVRlc3QsIE5vSGVhcEFsbG9jYXRpb25zVGVzdCkgewotICAvLyBBbGxvY2F0ZSBhIGxhcmdl
IGluaXRpYWwgYmxvY2sgdG8gYXZvaWQgbWFsbG9jcyBkdXJpbmcgaG9va2VkIHRlc3QuCi0gIHN0
ZDo6dmVjdG9yPGNoYXI+IGFyZW5hX2Jsb2NrKDEyOCAqIDEwMjQpOwotICBBcmVuYU9wdGlvbnMg
b3B0aW9uczsKLSAgb3B0aW9ucy5pbml0aWFsX2Jsb2NrID0gJmFyZW5hX2Jsb2NrWzBdOwotICBv
cHRpb25zLmluaXRpYWxfYmxvY2tfc2l6ZSA9IGFyZW5hX2Jsb2NrLnNpemUoKTsKLSAgQXJlbmEg
YXJlbmEob3B0aW9ucyk7Ci0KLSAgewotCi0gICAgVGVzdEFsbFR5cGVzKiBtZXNzYWdlID0gQXJl
bmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmEpOwotICAgIEZpbGxBcmVuYUF3
YXJlRmllbGRzKG1lc3NhZ2UpOwotICB9Ci0KLSAgYXJlbmEuUmVzZXQoKTsKLX0KLQotI2lmbmRl
ZiBHT09HTEVfUFJPVE9CVUZfTk9fUlRUSQotLy8gVGVzdCBjb25zdHJ1Y3Rpb24gb24gYW4gYXJl
bmEgdmlhIGdlbmVyaWMgTWVzc2FnZUxpdGUgaW50ZXJmYWNlLiBXZSBzaG91bGQgYmUKLS8vIGFi
bGUgdG8gc3VjY2Vzc2Z1bGx5IGRlc2VyaWFsaXplIG9uIHRoZSBhcmVuYSB3aXRob3V0IGluY3Vy
cmluZyBoZWFwCi0vLyBhbGxvY2F0aW9ucywgaS5lLiwgZXZlcnl0aGluZyBzaG91bGQgc3RpbGwg
YmUgYXJlbmEtYWxsb2NhdGlvbi1hd2FyZS4KLVRFU1QoQXJlbmFUZXN0LCBNZXNzYWdlTGl0ZU9u
QXJlbmEpIHsKLSAgc3RkOjp2ZWN0b3I8Y2hhcj4gYXJlbmFfYmxvY2soMTI4ICogMTAyNCk7Ci0g
IEFyZW5hT3B0aW9ucyBvcHRpb25zOwotICBvcHRpb25zLmluaXRpYWxfYmxvY2sgPSAmYXJlbmFf
YmxvY2tbMF07Ci0gIG9wdGlvbnMuaW5pdGlhbF9ibG9ja19zaXplID0gYXJlbmFfYmxvY2suc2l6
ZSgpOwotICBBcmVuYSBhcmVuYShvcHRpb25zKTsKLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZUxpdGUqIHByb3RvdHlwZSA9ICZUZXN0QWxsVHlwZXM6OmRlZmF1bHRfaW5zdGFuY2Uo
KTsKLQotICBUZXN0QWxsVHlwZXMgaW5pdGlhbF9tZXNzYWdlOwotICBGaWxsQXJlbmFBd2FyZUZp
ZWxkcygmaW5pdGlhbF9tZXNzYWdlKTsKLSAgc3RyaW5nIHNlcmlhbGl6ZWQ7Ci0gIGluaXRpYWxf
bWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygmc2VyaWFsaXplZCk7Ci0KLSAgewotCi0gICAgZ29v
Z2xlOjpwcm90b2J1Zjo6TWVzc2FnZUxpdGUqIGdlbmVyaWNfbWVzc2FnZSA9IHByb3RvdHlwZS0+
TmV3KCZhcmVuYSk7Ci0gICAgRVhQRUNUX1RSVUUoZ2VuZXJpY19tZXNzYWdlICE9IE5VTEwpOwot
ICAgIEVYUEVDVF9FUSgmYXJlbmEsIGdlbmVyaWNfbWVzc2FnZS0+R2V0QXJlbmEoKSk7Ci0gICAg
RVhQRUNUX1RSVUUoZ2VuZXJpY19tZXNzYWdlLT5QYXJzZUZyb21TdHJpbmcoc2VyaWFsaXplZCkp
OwotICAgIFRlc3RBbGxUeXBlcyogZGVzZXJpYWxpemVkID0gc3RhdGljX2Nhc3Q8VGVzdEFsbFR5
cGVzKj4oZ2VuZXJpY19tZXNzYWdlKTsKLSAgICBFWFBFQ1RfRVEoNDIsIGRlc2VyaWFsaXplZC0+
b3B0aW9uYWxfaW50MzIoKSk7Ci0gIH0KLQotICBhcmVuYS5SZXNldCgpOwotfQotI2VuZGlmICAv
LyAhR09PR0xFX1BST1RPQlVGX05PX1JUVEkKLQotCi0vLyBSZXBlYXRlZEZpZWxkIHNob3VsZCBz
dXBwb3J0IG5vbi1QT0QgdHlwZXMsIGFuZCBpbnZva2UgY29uc3RydWN0b3JzIGFuZAotLy8gZGVz
dHJ1Y3RvcnMgYXBwcm9wcmlhdGVseSwgYmVjYXVzZSBpdCdzIHVzZWQgdGhpcyB3YXkgYnkgbG90
cyBvZiBvdGhlciBjb2RlCi0vLyAoZXZlbiBpZiB0aGlzIHdhcyBub3QgaXRzIG9yaWdpbmFsIGlu
dGVudCkuCi1URVNUKEFyZW5hVGVzdCwgUmVwZWF0ZWRGaWVsZFdpdGhOb25QT0RUeXBlKSB7Ci0g
IHsKLSAgICBSZXBlYXRlZEZpZWxkPHN0cmluZz4gZmllbGRfb25faGVhcDsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0gICAgICAqZmllbGRfb25faGVhcC5BZGQoKSA9ICJ0
ZXN0IHN0cmluZyBsb25nIGVub3VnaCB0byBleGNlZWQgaW5saW5lIGJ1ZmZlciI7Ci0gICAgfQot
ICB9Ci0gIHsKLSAgICBBcmVuYSBhcmVuYTsKLSAgICBSZXBlYXRlZEZpZWxkPHN0cmluZz4gZmll
bGRfb25fYXJlbmEoJmFyZW5hKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7
Ci0gICAgICAqZmllbGRfb25fYXJlbmEuQWRkKCkgPSAidGVzdCBzdHJpbmcgbG9uZyBlbm91Z2gg
dG8gZXhjZWVkIGlubGluZSBidWZmZXIiOwotICAgIH0KLSAgfQotfQotCi0vLyBBbGlnbiBuIHRv
IG5leHQgbXVsdGlwbGUgb2YgOAotbmFtZXNwYWNlIHsKLXVpbnQ2NCBBbGlnbjgodWludDY0IG4p
IHsgcmV0dXJuIChuICsgNykgJiAtODsgfQotfSAgLy8gbmFtZXNwYWNlCi0KLVRFU1QoQXJlbmFU
ZXN0LCBTcGFjZUFsbG9jYXRlZF9hbmRfVXNlZCkgewotICBBcmVuYU9wdGlvbnMgb3B0aW9uczsK
LSAgb3B0aW9ucy5zdGFydF9ibG9ja19zaXplID0gMjU2OwotICBvcHRpb25zLm1heF9ibG9ja19z
aXplID0gODE5MjsKLSAgQXJlbmEgYXJlbmFfMShvcHRpb25zKTsKLSAgRVhQRUNUX0VRKDAsIGFy
ZW5hXzEuU3BhY2VBbGxvY2F0ZWQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBhcmVuYV8xLlNwYWNlVXNl
ZCgpKTsKLSAgRVhQRUNUX0VRKDAsIGFyZW5hXzEuUmVzZXQoKSk7Ci0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6QXJlbmE6OkNyZWF0ZUFycmF5PGNoYXI+KCZhcmVuYV8xLCAzMjApOwotICAvLyBBcmVu
YSB3aWxsIGFsbG9jYXRlIHNsaWdodGx5IG1vcmUgdGhhbiAzMjAgZm9yIHRoZSBibG9jayBoZWFk
ZXJzLgotICBFWFBFQ1RfTEUoMzIwLCBhcmVuYV8xLlNwYWNlQWxsb2NhdGVkKCkpOwotICBFWFBF
Q1RfRVEoQWxpZ244KDMyMCksIGFyZW5hXzEuU3BhY2VVc2VkKCkpOwotICBFWFBFQ1RfTEUoMzIw
LCBhcmVuYV8xLlJlc2V0KCkpOwotCi0gIC8vIFRlc3Qgd2l0aCBpbml0aWFsIGJsb2NrLgotICBz
dGQ6OnZlY3RvcjxjaGFyPiBhcmVuYV9ibG9jaygxMDI0KTsKLSAgb3B0aW9ucy5pbml0aWFsX2Js
b2NrID0gJmFyZW5hX2Jsb2NrWzBdOwotICBvcHRpb25zLmluaXRpYWxfYmxvY2tfc2l6ZSA9IGFy
ZW5hX2Jsb2NrLnNpemUoKTsKLSAgQXJlbmEgYXJlbmFfMihvcHRpb25zKTsKLSAgRVhQRUNUX0VR
KDEwMjQsIGFyZW5hXzIuU3BhY2VBbGxvY2F0ZWQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBhcmVuYV8y
LlNwYWNlVXNlZCgpKTsKLSAgRVhQRUNUX0VRKDEwMjQsIGFyZW5hXzIuUmVzZXQoKSk7Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmE6OkNyZWF0ZUFycmF5PGNoYXI+KCZhcmVuYV8yLCA1NSk7
Ci0gIEVYUEVDVF9FUSgxMDI0LCBhcmVuYV8yLlNwYWNlQWxsb2NhdGVkKCkpOwotICBFWFBFQ1Rf
RVEoQWxpZ244KDU1KSwgYXJlbmFfMi5TcGFjZVVzZWQoKSk7Ci0gIEVYUEVDVF9FUSgxMDI0LCBh
cmVuYV8yLlJlc2V0KCkpOwotCi0gIC8vIFJlc2V0IG9wdGlvbnMgdG8gdGVzdCBkb3VibGluZyBw
b2xpY3kgZXhwbGljaXRseS4KLSAgb3B0aW9ucy5pbml0aWFsX2Jsb2NrID0gTlVMTDsKLSAgb3B0
aW9ucy5pbml0aWFsX2Jsb2NrX3NpemUgPSAwOwotICBBcmVuYSBhcmVuYV8zKG9wdGlvbnMpOwot
ICBFWFBFQ1RfRVEoMCwgYXJlbmFfMy5TcGFjZVVzZWQoKSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmE6OkNyZWF0ZUFycmF5PGNoYXI+KCZhcmVuYV8zLCAxOTApOwotICBFWFBFQ1RfRVEo
MjU2LCBhcmVuYV8zLlNwYWNlQWxsb2NhdGVkKCkpOwotICBFWFBFQ1RfRVEoQWxpZ244KDE5MCks
IGFyZW5hXzMuU3BhY2VVc2VkKCkpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOjpDcmVh
dGVBcnJheTxjaGFyPigmYXJlbmFfMywgNzApOwotICBFWFBFQ1RfRVEoMjU2ICsgNTEyLCBhcmVu
YV8zLlNwYWNlQWxsb2NhdGVkKCkpOwotICBFWFBFQ1RfRVEoQWxpZ244KDE5MCkgKyBBbGlnbjgo
NzApLCBhcmVuYV8zLlNwYWNlVXNlZCgpKTsKLSAgRVhQRUNUX0VRKDI1NiArIDUxMiwgYXJlbmFf
My5SZXNldCgpKTsKLX0KLQotVEVTVChBcmVuYVRlc3QsIEFsaWdubWVudCkgewotICA6Omdvb2ds
ZTo6cHJvdG9idWY6OkFyZW5hIGFyZW5hOwotICBmb3IgKGludCBpID0gMDsgaSA8IDIwMDsgaSsr
KSB7Ci0gICAgdm9pZCogcCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmE6OkNyZWF0ZUFycmF5
PGNoYXI+KCZhcmVuYSwgaSk7Ci0gICAgR09PR0xFX0NIRUNLX0VRKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihwKSAlIDgsIDApIDw8IGkgPDwgIjogIiA8PCBwOwotICB9Ci19Ci0KLVRFU1Qo
QXJlbmFUZXN0LCBHZXRBcmVuYVNob3VsZFJldHVyblRoZUFyZW5hRm9yQXJlbmFBbGxvY2F0ZWRN
ZXNzYWdlcykgewotICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hIGFyZW5hOwotICBBcmVuYU1l
c3NhZ2UqIG1lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxBcmVuYU1lc3NhZ2U+KCZhcmVu
YSk7Ci0gIGNvbnN0IEFyZW5hTWVzc2FnZSogY29uc3RfcG9pbnRlcl90b19tZXNzYWdlID0gbWVz
c2FnZTsKLSAgRVhQRUNUX0VRKCZhcmVuYSwgQXJlbmE6OkdldEFyZW5hKG1lc3NhZ2UpKTsKLSAg
RVhQRUNUX0VRKCZhcmVuYSwgQXJlbmE6OkdldEFyZW5hKGNvbnN0X3BvaW50ZXJfdG9fbWVzc2Fn
ZSkpOwotfQotCi1URVNUKEFyZW5hVGVzdCwgR2V0QXJlbmFTaG91bGRSZXR1cm5OdWxsRm9yTm9u
QXJlbmFBbGxvY2F0ZWRNZXNzYWdlcykgewotICBBcmVuYU1lc3NhZ2UgbWVzc2FnZTsKLSAgY29u
c3QgQXJlbmFNZXNzYWdlKiBjb25zdF9wb2ludGVyX3RvX21lc3NhZ2UgPSAmbWVzc2FnZTsKLSAg
RVhQRUNUX0VRKE5VTEwsIEFyZW5hOjpHZXRBcmVuYSgmbWVzc2FnZSkpOwotICBFWFBFQ1RfRVEo
TlVMTCwgQXJlbmE6OkdldEFyZW5hKGNvbnN0X3BvaW50ZXJfdG9fbWVzc2FnZSkpOwotfQotCi1U
RVNUKEFyZW5hVGVzdCwgVW5zYWZlU2V0QWxsb2NhdGVkT25BcmVuYSkgewotICA6Omdvb2dsZTo6
cHJvdG9idWY6OkFyZW5hIGFyZW5hOwotICBUZXN0QWxsVHlwZXMqIG1lc3NhZ2UgPSBBcmVuYTo6
Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNz
YWdlLT5oYXNfb3B0aW9uYWxfc3RyaW5nKCkpOwotCi0gIHN0cmluZyBvd25lZF9zdHJpbmcgPSAi
dGVzdCB3aXRoIGxvbmcgZW5vdWdoIGNvbnRlbnQgdG8gaGVhcC1hbGxvY2F0ZSI7Ci0gIG1lc3Nh
Z2UtPnVuc2FmZV9hcmVuYV9zZXRfYWxsb2NhdGVkX29wdGlvbmFsX3N0cmluZygmb3duZWRfc3Ry
aW5nKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS0+aGFzX29wdGlvbmFsX3N0cmluZygpKTsKLQot
ICBtZXNzYWdlLT51bnNhZmVfYXJlbmFfc2V0X2FsbG9jYXRlZF9vcHRpb25hbF9zdHJpbmcoTlVM
TCk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLT5oYXNfb3B0aW9uYWxfc3RyaW5nKCkpOwotfQot
Ci0vLyBBIGhlbHBlciB1dGlsaXR5IGNsYXNzIHRvIG9ubHkgY29udGFpbiBzdGF0aWMgaG9vayBm
dW5jdGlvbnMsIHNvbWUKLS8vIGNvdW50ZXJzIHRvIGJlIHVzZWQgdG8gdmVyaWZ5IHRoZSBjb3Vu
dGVycyBoYXZlIGJlZW4gY2FsbGVkIGFuZCBhIGNvb2tpZQotLy8gdmFsdWUgdG8gYmUgdmVyaWZp
ZWQuCi1jbGFzcyBBcmVuYUhvb2tzVGVzdFV0aWwgewotIHB1YmxpYzoKLSAgc3RhdGljIHZvaWQq
IG9uX2luaXQoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIHsKLSAgICArK251bV9p
bml0OwotICAgIGludCogY29va2llID0gbmV3IGludChrQ29va2llVmFsdWUpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDx2b2lkKj4oY29va2llKTsKLSAgfQotCi0gIHN0YXRpYyB2b2lkIG9uX2Fs
bG9jYXRpb24oY29uc3Qgc3RkOjp0eXBlX2luZm8qIC8qdW51c2VkKi8sIHVpbnQ2NCBhbGxvY19z
aXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvb2tpZSkgewotICAgICsr
bnVtX2FsbG9jYXRpb25zOwotICAgIGludCBjb29raWVfdmFsdWUgPSAqc3RhdGljX2Nhc3Q8aW50
Kj4oY29va2llKTsKLSAgICBFWFBFQ1RfRVEoa0Nvb2tpZVZhbHVlLCBjb29raWVfdmFsdWUpOwot
ICB9Ci0KLSAgc3RhdGljIHZvaWQgb25fcmVzZXQoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSog
YXJlbmEsIHZvaWQqIGNvb2tpZSwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDY0IHNwYWNl
X3VzZWQpIHsKLSAgICArK251bV9yZXNldDsKLSAgICBpbnQgY29va2llX3ZhbHVlID0gKnN0YXRp
Y19jYXN0PGludCo+KGNvb2tpZSk7Ci0gICAgRVhQRUNUX0VRKGtDb29raWVWYWx1ZSwgY29va2ll
X3ZhbHVlKTsKLSAgfQotCi0gIHN0YXRpYyB2b2lkIG9uX2Rlc3RydWN0aW9uKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hLCB2b2lkKiBjb29raWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQ2NCBzcGFjZV91c2VkKSB7Ci0gICAgKytudW1fZGVzdHJ1Y3Q7Ci0gICAg
aW50IGNvb2tpZV92YWx1ZSA9ICpzdGF0aWNfY2FzdDxpbnQqPihjb29raWUpOwotICAgIEVYUEVD
VF9FUShrQ29va2llVmFsdWUsIGNvb2tpZV92YWx1ZSk7Ci0gICAgZGVsZXRlIHN0YXRpY19jYXN0
PGludCo+KGNvb2tpZSk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgaW50IGtDb29raWVWYWx1ZSA9
IDk5OTsKLSAgc3RhdGljIHVpbnQzMiBudW1faW5pdDsKLSAgc3RhdGljIHVpbnQzMiBudW1fYWxs
b2NhdGlvbnM7Ci0gIHN0YXRpYyB1aW50MzIgbnVtX3Jlc2V0OwotICBzdGF0aWMgdWludDMyIG51
bV9kZXN0cnVjdDsKLX07Ci11aW50MzIgQXJlbmFIb29rc1Rlc3RVdGlsOjpudW1faW5pdCA9IDA7
Ci11aW50MzIgQXJlbmFIb29rc1Rlc3RVdGlsOjpudW1fYWxsb2NhdGlvbnMgPSAwOwotdWludDMy
IEFyZW5hSG9va3NUZXN0VXRpbDo6bnVtX3Jlc2V0ID0gMDsKLXVpbnQzMiBBcmVuYUhvb2tzVGVz
dFV0aWw6Om51bV9kZXN0cnVjdCA9IDA7Ci1jb25zdCBpbnQgQXJlbmFIb29rc1Rlc3RVdGlsOjpr
Q29va2llVmFsdWU7Ci0KLS8vIFRlc3QgdGhlIGhvb2tzIGFyZSBjb3JyZWN0bHkgY2FsbGVkIGFu
ZCB0aGF0IHRoZSBjb29raWUgaXMgcGFzc2VkLgotVEVTVChBcmVuYVRlc3QsIEFyZW5hSG9va3NT
YW5pdHkpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYU9wdGlvbnMgb3B0aW9uczsKLSAg
b3B0aW9ucy5vbl9hcmVuYV9pbml0ID0gQXJlbmFIb29rc1Rlc3RVdGlsOjpvbl9pbml0OwotICBv
cHRpb25zLm9uX2FyZW5hX2FsbG9jYXRpb24gPSBBcmVuYUhvb2tzVGVzdFV0aWw6Om9uX2FsbG9j
YXRpb247Ci0gIG9wdGlvbnMub25fYXJlbmFfcmVzZXQgPSBBcmVuYUhvb2tzVGVzdFV0aWw6Om9u
X3Jlc2V0OwotICBvcHRpb25zLm9uX2FyZW5hX2Rlc3RydWN0aW9uID0gQXJlbmFIb29rc1Rlc3RV
dGlsOjpvbl9kZXN0cnVjdGlvbjsKLQotICAvLyBTY29wZSBmb3IgZGVmaW5pbmcgdGhlIGFyZW5h
Ci0gIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hIGFyZW5hKG9wdGlvbnMpOwotICAg
IEVYUEVDVF9FUSgxLCBBcmVuYUhvb2tzVGVzdFV0aWw6Om51bV9pbml0KTsKLSAgICBFWFBFQ1Rf
RVEoMCwgQXJlbmFIb29rc1Rlc3RVdGlsOjpudW1fYWxsb2NhdGlvbnMpOwotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6QXJlbmE6OkNyZWF0ZTx1aW50NjQ+KCZhcmVuYSk7Ci0gICAgaWYgKGdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPHVpbnQ2ND46OnZh
bHVlKSB7Ci0gICAgICBFWFBFQ1RfRVEoMSwgQXJlbmFIb29rc1Rlc3RVdGlsOjpudW1fYWxsb2Nh
dGlvbnMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBFWFBFQ1RfRVEoMiwgQXJlbmFIb29rc1Rlc3RV
dGlsOjpudW1fYWxsb2NhdGlvbnMpOwotICAgIH0KLSAgICBhcmVuYS5SZXNldCgpOwotICAgIGFy
ZW5hLlJlc2V0KCk7Ci0gICAgRVhQRUNUX0VRKDIsIEFyZW5hSG9va3NUZXN0VXRpbDo6bnVtX3Jl
c2V0KTsKLSAgfQotICBFWFBFQ1RfRVEoMywgQXJlbmFIb29rc1Rlc3RVdGlsOjpudW1fcmVzZXQp
OwotICBFWFBFQ1RfRVEoMSwgQXJlbmFIb29rc1Rlc3RVdGlsOjpudW1fZGVzdHJ1Y3QpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9hcmVuYXN0cmluZy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyMmFk
YWJjZmVkZDhiZTk4MTM1OGNiODBmOTg4ZmU3ZGExZTMxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvYXJlbmFzdHJpbmcu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotLy8gVGhlIEFyZW5hU3RyaW5nIGltcGxlbWVudGF0aW9uIGlzIG5vdCBp
bmNsdWRlZCBpbiB0aGUgb3Blbi1zb3VyY2UgcmVsZWFzZS4gRG8KLS8vIG5vdCBpbmNsdWRlIHRo
aXMgZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2FyZW5hc3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLQotdm9pZCBBcmVuYVN0cmluZ1B0cjo6QXNzaWdu
V2l0aERlZmF1bHQoY29uc3QgOjpzdGQ6OnN0cmluZyogZGVmYXVsdF92YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZW5hU3RyaW5nUHRyIHZhbHVlKSB7Ci0g
IGNvbnN0IDo6c3RkOjpzdHJpbmcqIG1lID0gKlVuc2FmZVJhd1N0cmluZ1BvaW50ZXIoKTsKLSAg
Y29uc3QgOjpzdGQ6OnN0cmluZyogb3RoZXIgPSAqdmFsdWUuVW5zYWZlUmF3U3RyaW5nUG9pbnRl
cigpOwotICAvLyBJZiB0aGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lIHRoZW4gZG8gbm90aGluZy4K
LSAgaWYgKG1lICE9IG90aGVyKSB7Ci0gICAgU2V0Tm9BcmVuYShkZWZhdWx0X3ZhbHVlLCB2YWx1
ZS5HZXROb0FyZW5hKGRlZmF1bHRfdmFsdWUpKTsKLSAgfQotfQotCi06OnN0ZDo6c3RyaW5nKiBB
cmVuYVN0cmluZ1B0cjo6TXV0YWJsZU5vQXJlbmEoCi0gICAgIGNvbnN0IDo6c3RkOjpzdHJpbmcq
IGRlZmF1bHRfdmFsdWUpIHsKLSAgaWYgKHB0cl8gPT0gZGVmYXVsdF92YWx1ZSkgewotICAgIENy
ZWF0ZUluc3RhbmNlTm9BcmVuYShkZWZhdWx0X3ZhbHVlKTsKLSAgfQotICByZXR1cm4gcHRyXzsK
LX0KLQotCi12b2lkIEFyZW5hU3RyaW5nUHRyOjpEZXN0cm95Tm9BcmVuYShjb25zdCA6OnN0ZDo6
c3RyaW5nKiBkZWZhdWx0X3ZhbHVlKSB7Ci0gIGlmIChwdHJfICE9IGRlZmF1bHRfdmFsdWUpIHsK
LSAgICBkZWxldGUgcHRyXzsKLSAgfQotICBwdHJfID0gTlVMTDsKLX0KLQotCi19ICAvLyBuYW1l
c3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNl
IGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2FyZW5hc3RyaW5nLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvYXJlbmFzdHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggZDk4M2NmNmNlNTBmM2ZmZTg1YTE2ZDk4ZjU2NTc1MzQ0OTAwNTM1Yi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
YXJlbmFzdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQVJFTkFT
VFJJTkdfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BUkVOQVNUUklOR19IX18KLQotI2lu
Y2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5n
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9mYXN0bWVtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2FyZW5hLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdl
X3V0aWwuaD4KLQotCi0KLS8vIFRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGFyZW5hIHN0
cmluZyBmaWVsZHMgd3JpdHRlbiBmb3IgdGhlIG9wZW4tc291cmNlCi0vLyByZWxlYXNlLiBUaGUg
QXJlbmFTdHJpbmdQdHIgc3RydWN0IGJlbG93IGlzIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9u
IGNsYXNzCi0vLyBhbmQgKnNob3VsZCBub3QgYmUgdXNlZCogYnkgdXNlciBjb2RlLiBJdCBpcyB1
c2VkIHRvIGNvbGxlY3Qgc3RyaW5nCi0vLyBvcGVyYXRpb25zIHRvZ2V0aGVyIGludG8gb25lIHBs
YWNlIGFuZCBhYnN0cmFjdCBhd2F5IHRoZSB1bmRlcmx5aW5nCi0vLyBzdHJpbmctZmllbGQgcG9p
bnRlciByZXByZXNlbnRhdGlvbiwgc28gdGhhdCAoZm9yIGV4YW1wbGUpIGFuIGFsdGVybmF0ZQot
Ly8gaW1wbGVtZW50YXRpb24gdGhhdCBrbmV3IG1vcmUgYWJvdXQgOjpzdGQ6OnN0cmluZydzIGlu
dGVybmFscyBjb3VsZCBpbnRlZ3JhdGUgbW9yZQotLy8gY2xvc2VseSB3aXRoIHRoZSBhcmVuYSBh
bGxvY2F0b3IuCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5h
bWVzcGFjZSBpbnRlcm5hbCB7Ci0KLXN0cnVjdCBMSUJQUk9UT0JVRl9FWFBPUlQgQXJlbmFTdHJp
bmdQdHIgewotICBpbmxpbmUgdm9pZCBTZXQoY29uc3QgOjpzdGQ6OnN0cmluZyogZGVmYXVsdF92
YWx1ZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlLCA6Omdv
b2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgewotICAgIGlmIChwdHJfID09IGRlZmF1bHRf
dmFsdWUpIHsKLSAgICAgIENyZWF0ZUluc3RhbmNlKGFyZW5hLCAmdmFsdWUpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAqcHRyXyA9IHZhbHVlOwotICAgIH0KLSAgfQotCi0gIC8vIEJhc2ljIGFjY2Vz
c29ycy4KLSAgaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEdldChjb25zdCA6OnN0ZDo6c3Ry
aW5nKiAvKiBkZWZhdWx0X3ZhbHVlICovKSBjb25zdCB7Ci0gICAgcmV0dXJuICpwdHJfOwotICB9
Ci0KLSAgaW5saW5lIDo6c3RkOjpzdHJpbmcqIE11dGFibGUoY29uc3QgOjpzdGQ6OnN0cmluZyog
ZGVmYXVsdF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6QXJlbmEqIGFyZW5hKSB7Ci0gICAgaWYgKHB0cl8gPT0gZGVmYXVsdF92YWx1ZSkgewot
ICAgICAgQ3JlYXRlSW5zdGFuY2UoYXJlbmEsIGRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgICBy
ZXR1cm4gcHRyXzsKLSAgfQotCi0gIC8vIFJlbGVhc2UgcmV0dXJucyBhIDo6c3RkOjpzdHJpbmcq
IGluc3RhbmNlIHRoYXQgaXMgaGVhcC1hbGxvY2F0ZWQgYW5kIGlzIG5vdAotICAvLyBPd24oKSdk
IGJ5IGFueSBhcmVuYS4gSWYgdGhlIGZpZWxkIHdhcyBub3Qgc2V0LCBpdCByZXR1cm5zIE5VTEwu
IFRoZSBjYWxsZXIKLSAgLy8gcmV0YWlucyBvd25lcnNoaXAuIENsZWFycyB0aGlzIGZpZWxkIGJh
Y2sgdG8gTlVMTCBzdGF0ZS4gVXNlZCB0byBpbXBsZW1lbnQKLSAgLy8gcmVsZWFzZV88ZmllbGQ+
KCkgbWV0aG9kcyBvbiBnZW5lcmF0ZWQgY2xhc3Nlcy4KLSAgaW5saW5lIDo6c3RkOjpzdHJpbmcq
IFJlbGVhc2UoY29uc3QgOjpzdGQ6OnN0cmluZyogZGVmYXVsdF92YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSB7Ci0gICAg
aWYgKHB0cl8gPT0gZGVmYXVsdF92YWx1ZSkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
ICAgIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VkID0gTlVMTDsKLSAgICBpZiAoYXJlbmEgIT0gTlVM
TCkgewotICAgICAgLy8gcHRyXyBpcyBvd25lZCBieSB0aGUgYXJlbmEgLS0gd2UgbmVlZCB0byBy
ZXR1cm4gYSBjb3B5LgotICAgICAgcmVsZWFzZWQgPSBuZXcgOjpzdGQ6OnN0cmluZygqcHRyXyk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlbGVhc2VkID0gcHRyXzsKLSAgICB9Ci0gICAgcHRyXyA9
IGNvbnN0X2Nhc3Q8IDo6c3RkOjpzdHJpbmcqID4oZGVmYXVsdF92YWx1ZSk7Ci0gICAgcmV0dXJu
IHJlbGVhc2VkOwotICB9Ci0KLSAgLy8gVW5zYWZlQXJlbmFSZWxlYXNlIHJldHVybnMgYSA6OnN0
ZDo6c3RyaW5nKiwgYnV0IGl0IG1heSBiZSBhcmVuYS1vd25lZCAoaS5lLgotICAvLyBoYXZlIGl0
cyBkZXN0cnVjdG9yIGFscmVhZHkgcmVnaXN0ZXJlZCkgaWYgYXJlbmEgIT0gTlVMTC4gSWYgdGhl
IGZpZWxkIHdhcwotICAvLyBub3Qgc2V0LCB0aGlzIHJldHVybnMgTlVMTC4gVGhpcyBtZXRob2Qg
Y2xlYXJzIHRoaXMgZmllbGQgYmFjayB0byBOVUxMCi0gIC8vIHN0YXRlLiBVc2VkIHRvIGltcGxl
bWVudCB1bnNhZmVfYXJlbmFfcmVsZWFzZV88ZmllbGQ+KCkgbWV0aG9kcyBvbgotICAvLyBnZW5l
cmF0ZWQgY2xhc3Nlcy4KLSAgaW5saW5lIDo6c3RkOjpzdHJpbmcqIFVuc2FmZUFyZW5hUmVsZWFz
ZShjb25zdCA6OnN0ZDo6c3RyaW5nKiBkZWZhdWx0X3ZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiAvKiBhcmVuYSAq
LykgewotICAgIGlmIChwdHJfID09IGRlZmF1bHRfdmFsdWUpIHsKLSAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLSAgICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlZCA9IHB0cl87Ci0gICAgcHRyXyA9
IGNvbnN0X2Nhc3Q8IDo6c3RkOjpzdHJpbmcqID4oZGVmYXVsdF92YWx1ZSk7Ci0gICAgcmV0dXJu
IHJlbGVhc2VkOwotICB9Ci0KLSAgLy8gVGFrZXMgYSBzdHJpbmcgdGhhdCBpcyBoZWFwLWFsbG9j
YXRlZCwgYW5kIHRha2VzIG93bmVyc2hpcC4gVGhlIHN0cmluZydzCi0gIC8vIGRlc3RydWN0b3Ig
aXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBhcmVuYS4gVXNlZCB0byBpbXBsZW1lbnQKLSAgLy8gc2V0
X2FsbG9jYXRlZF88ZmllbGQ+IGluIGdlbmVyYXRlZCBjbGFzc2VzLgotICBpbmxpbmUgdm9pZCBT
ZXRBbGxvY2F0ZWQoY29uc3QgOjpzdGQ6OnN0cmluZyogZGVmYXVsdF92YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDo6c3RkOjpzdHJpbmcqIHZhbHVlLCA6Omdvb2dsZTo6cHJvdG9i
dWY6OkFyZW5hKiBhcmVuYSkgewotICAgIGlmIChhcmVuYSA9PSBOVUxMICYmIHB0cl8gIT0gZGVm
YXVsdF92YWx1ZSkgewotICAgICAgRGVzdHJveShkZWZhdWx0X3ZhbHVlLCBhcmVuYSk7Ci0gICAg
fQotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICBwdHJfID0gdmFsdWU7Ci0gICAgICBp
ZiAoYXJlbmEgIT0gTlVMTCkgewotICAgICAgICBhcmVuYS0+T3duKHZhbHVlKTsKLSAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgcHRyXyA9IGNvbnN0X2Nhc3Q8IDo6c3RkOjpzdHJpbmcqID4o
ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gVGFrZXMgYSBzdHJpbmcgdGhhdCBo
YXMgbGlmZXRpbWUgZXF1YWwgdG8gdGhlIGFyZW5hJ3MgbGlmZXRpbWUuIFRoZSBhcmVuYQotICAv
LyBtdXN0IGJlIG5vbi1udWxsLiBJdCBpcyBzYWZlIG9ubHkgdG8gcGFzcyB0aGlzIG1ldGhvZCBh
IHZhbHVlIHJldHVybmVkIGJ5Ci0gIC8vIFVuc2FmZUFyZW5hUmVsZWFzZSgpIG9uIGFub3RoZXIg
ZmllbGQgb2YgYSBtZXNzYWdlIGluIHRoZSBzYW1lIGFyZW5hLiBVc2VkCi0gIC8vIHRvIGltcGxl
bWVudCB1bnNhZmVfYXJlbmFfc2V0X2FsbG9jYXRlZF88ZmllbGQ+IGluIGdlbmVyYXRlZCBjbGFz
c2VzLgotICBpbmxpbmUgdm9pZCBVbnNhZmVBcmVuYVNldEFsbG9jYXRlZChjb25zdCA6OnN0ZDo6
c3RyaW5nKiBkZWZhdWx0X3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6OnN0ZDo6c3RyaW5nKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogLyogYXJlbmEgKi8pIHsKLSAgICBp
ZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgcHRyXyA9IHZhbHVlOwotICAgIH0gZWxzZSB7Ci0g
ICAgICBwdHJfID0gY29uc3RfY2FzdDwgOjpzdGQ6OnN0cmluZyogPihkZWZhdWx0X3ZhbHVlKTsK
LSAgICB9Ci0gIH0KLQotICAvLyBTd2FwcyBpbnRlcm5hbCBwb2ludGVycy4gQXJlbmEtc2FmZXR5
IHNlbWFudGljczogdGhpcyBpcyBndWFyZGVkIGJ5IHRoZQotICAvLyBsb2dpYyBpbiBTd2FwKCkv
VW5zYWZlQXJlbmFTd2FwKCkgYXQgdGhlIG1lc3NhZ2UgbGV2ZWwsIHNvIHRoaXMgbWV0aG9kIGlz
Ci0gIC8vICd1bnNhZmUnIGlmIGNhbGxlZCBkaXJlY3RseS4KLSAgR09PR0xFX0FUVFJJQlVURV9B
TFdBWVNfSU5MSU5FIHZvaWQgU3dhcChBcmVuYVN0cmluZ1B0ciogb3RoZXIpIHsKLSAgICBzdGQ6
OnN3YXAocHRyXywgb3RoZXItPnB0cl8pOwotICB9Ci0KLSAgLy8gRnJlZXMgc3RvcmFnZSAoaWYg
bm90IG9uIGFuIGFyZW5hKSBhbmQgc2V0cyBmaWVsZCB0byBkZWZhdWx0IHZhbHVlLgotICBpbmxp
bmUgdm9pZCBEZXN0cm95KGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIHsKLSAg
ICBpZiAoYXJlbmEgPT0gTlVMTCAmJiBwdHJfICE9IGRlZmF1bHRfdmFsdWUpIHsKLSAgICAgIGRl
bGV0ZSBwdHJfOwotICAgIH0KLSAgICBwdHJfID0gY29uc3RfY2FzdDwgOjpzdGQ6OnN0cmluZyog
PihkZWZhdWx0X3ZhbHVlKTsKLSAgfQotCi0gIC8vIENsZWFycyBjb250ZW50LCBidXQga2VlcHMg
YWxsb2NhdGVkIHN0cmluZyBpZiBhcmVuYSAhPSBOVUxMLCB0byBhdm9pZCB0aGUKLSAgLy8gb3Zl
cmhlYWQgb2YgaGVhcCBvcGVyYXRpb25zLiBBZnRlciB0aGlzIHJldHVybnMsIHRoZSBjb250ZW50
IChhcyBzZWVuIGJ5Ci0gIC8vIHRoZSB1c2VyKSB3aWxsIGFsd2F5cyBiZSB0aGUgZW1wdHkgc3Ry
aW5nLiBBc3N1bWVzIHRoYXQgfGRlZmF1bHRfdmFsdWV8Ci0gIC8vIGlzIGFuIGVtcHR5IHN0cmlu
Zy4KLSAgaW5saW5lIHZvaWQgQ2xlYXJUb0VtcHR5KGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1
bHRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OkFyZW5hKiAvKiBhcmVuYSAqLykgewotICAgIGlmIChwdHJfID09IGRlZmF1bHRfdmFsdWUpIHsK
LSAgICAgIC8vIEFscmVhZHkgc2V0IHRvIGRlZmF1bHQgKHdoaWNoIGlzIGVtcHR5KSAtLSBkbyBu
b3RoaW5nLgotICAgIH0gZWxzZSB7Ci0gICAgICBwdHJfLT5jbGVhcigpOwotICAgIH0KLSAgfQot
Ci0gIC8vIENsZWFycyBjb250ZW50LCBidXQga2VlcHMgYWxsb2NhdGVkIHN0cmluZyBpZiBhcmVu
YSAhPSBOVUxMLCB0byBhdm9pZCB0aGUKLSAgLy8gb3ZlcmhlYWQgb2YgaGVhcCBvcGVyYXRpb25z
LiBBZnRlciB0aGlzIHJldHVybnMsIHRoZSBjb250ZW50IChhcyBzZWVuIGJ5Ci0gIC8vIHRoZSB1
c2VyKSB3aWxsIGFsd2F5cyBiZSBlcXVhbCB0byB8ZGVmYXVsdF92YWx1ZXwuCi0gIGlubGluZSB2
b2lkIENsZWFyVG9EZWZhdWx0KGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIC8q
IGFyZW5hICovKSB7Ci0gICAgaWYgKHB0cl8gPT0gZGVmYXVsdF92YWx1ZSkgewotICAgICAgLy8g
QWxyZWFkeSBzZXQgdG8gZGVmYXVsdCAtLSBkbyBub3RoaW5nLgotICAgIH0gZWxzZSB7Ci0gICAg
ICAvLyBIYXZlIGFub3RoZXIgYWxsb2NhdGVkIHN0cmluZyAtLSByYXRoZXIgdGhhbiB0aHJvd2lu
ZyB0aGlzIGF3YXkgYW5kCi0gICAgICAvLyByZXNldHRpbmcgcHRyXyB0byB0aGUgY2Fub25pY2Fs
IGRlZmF1bHQgc3RyaW5nIGluc3RhbmNlLCB3ZSBqdXN0IHJldXNlCi0gICAgICAvLyB0aGlzIGlu
c3RhbmNlLgotICAgICAgKnB0cl8gPSAqZGVmYXVsdF92YWx1ZTsKLSAgICB9Ci0gIH0KLQotICAv
LyBDYWxsZWQgZnJvbSBnZW5lcmF0ZWQgY29kZSAvIHJlZmxlY3Rpb24gcnVudGltZSBvbmx5LiBS
ZXNldHMgdmFsdWUgdG8gcG9pbnQKLSAgLy8gdG8gYSBkZWZhdWx0IHN0cmluZyBwb2ludGVyLCB3
aXRoIHRoZSBzZW1hbnRpY3MgdGhhdCB0aGlzIEFyZW5hU3RyaW5nUHRyCi0gIC8vIGRvZXMgbm90
IG93biB0aGUgcG9pbnRlZC10byBtZW1vcnkuIERpc3JlZ2FyZHMgaW5pdGlhbCB2YWx1ZSBvZiBw
dHJfIChzbwotICAvLyB0aGlzIGlzIHRoZSAqT05MWSogc2FmZSBtZXRob2QgdG8gY2FsbCBhZnRl
ciBjb25zdHJ1Y3Rpb24gb3Igd2hlbgotICAvLyByZWluaXRpYWxpemluZyBhZnRlciBiZWNvbWlu
ZyB0aGUgYWN0aXZlIGZpZWxkIGluIGEgb25lb2YgdW5pb24pLgotICBpbmxpbmUgdm9pZCBVbnNh
ZmVTZXREZWZhdWx0KGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUpIHsKLSAgICAv
LyBDYXN0aW5nIGF3YXkgJ2NvbnN0JyBpcyBzYWZlIGhlcmU6IGFjY2Vzc29ycyBlbnN1cmUgdGhh
dCBwdHJfIGlzIG9ubHkKLSAgICAvLyByZXR1cm5lZCBhcyBhIGNvbnN0IGlmIGl0IGlzIGVxdWFs
IHRvIGRlZmF1bHRfdmFsdWUuCi0gICAgcHRyXyA9IGNvbnN0X2Nhc3Q8IDo6c3RkOjpzdHJpbmcq
ID4oZGVmYXVsdF92YWx1ZSk7Ci0gIH0KLQotICAvLyBUaGUgJ05vQXJlbmEnIHZhcmlhbnRzIG9m
IG1ldGhvZHMgYmVsb3cgYXNzdW1lIGFyZW5hID09IE5VTEwgYW5kIGFyZQotICAvLyBvcHRpbWl6
ZWQgdG8gcHJvdmlkZSB2ZXJ5IGxpdHRsZSBvdmVyaGVhZCByZWxhdGl2ZSB0byBhIHJhdyBzdHJp
bmcgcG9pbnRlcgotICAvLyAod2hpbGUgc3RpbGwgYmVpbmcgaW4tbWVtb3J5IGNvbXBhdGlibGUg
d2l0aCBvdGhlciBjb2RlIHRoYXQgYXNzdW1lcwotICAvLyBBcmVuYVN0cmluZ1B0cikuIE5vdGUg
dGhlIGludmFyaWFudCB0aGF0IGEgY2xhc3MgaW5zdGFuY2UgdGhhdCBoYXMgb25seQotICAvLyBl
dmVyIGJlZW4gbXV0YXRlZCBieSBOb0FyZW5hIG1ldGhvZHMgbXVzdCAqb25seSogYmUgaW4gdGhl
IFN0cmluZyBzdGF0ZQotICAvLyAoaS5lLiwgdGFnIGJpdHMgYXJlIG5vdCB1c2VkKSwgKk5FVkVS
KiBBcmVuYVN0cmluZy4gVGhpcyBhbGxvd3MgYWxsCi0gIC8vIHRhZ2dlZC1wb2ludGVyIG1hbmlw
dWxhdGlvbnMgdG8gYmUgYXZvaWRlZC4KLSAgaW5saW5lIHZvaWQgU2V0Tm9BcmVuYShjb25zdCA6
OnN0ZDo6c3RyaW5nKiBkZWZhdWx0X3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gICAgaWYgKHB0cl8gPT0gZGVmYXVsdF92YWx1
ZSkgewotICAgICAgQ3JlYXRlSW5zdGFuY2VOb0FyZW5hKCZ2YWx1ZSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICpwdHJfID0gdmFsdWU7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBBc3NpZ25XaXRoRGVm
YXVsdChjb25zdCA6OnN0ZDo6c3RyaW5nKiBkZWZhdWx0X3ZhbHVlLCBBcmVuYVN0cmluZ1B0ciB2
YWx1ZSk7Ci0KLSAgaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEdldE5vQXJlbmEoY29uc3Qg
OjpzdGQ6OnN0cmluZyogLyogZGVmYXVsdF92YWx1ZSAqLykgY29uc3QgewotICAgIHJldHVybiAq
cHRyXzsKLSAgfQotCi0gIDo6c3RkOjpzdHJpbmcqIE11dGFibGVOb0FyZW5hKGNvbnN0IDo6c3Rk
OjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUpOwotCi0gIGlubGluZSA6OnN0ZDo6c3RyaW5nKiBSZWxl
YXNlTm9BcmVuYShjb25zdCA6OnN0ZDo6c3RyaW5nKiBkZWZhdWx0X3ZhbHVlKSB7Ci0gICAgaWYg
KHB0cl8gPT0gZGVmYXVsdF92YWx1ZSkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VkID0gcHRyXzsKLSAgICAgIHB0cl8gPSBj
b25zdF9jYXN0PCA6OnN0ZDo6c3RyaW5nKiA+KGRlZmF1bHRfdmFsdWUpOwotICAgICAgcmV0dXJu
IHJlbGVhc2VkOwotICAgIH0KLSAgfQotCi0gIGlubGluZSB2b2lkIFNldEFsbG9jYXRlZE5vQXJl
bmEoY29uc3QgOjpzdGQ6OnN0cmluZyogZGVmYXVsdF92YWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6OnN0ZDo6c3RyaW5nKiB2YWx1ZSkgewotICAgIGlmIChwdHJfICE9
IGRlZmF1bHRfdmFsdWUpIHsKLSAgICAgIGRlbGV0ZSBwdHJfOwotICAgIH0KLSAgICBpZiAodmFs
dWUgIT0gTlVMTCkgewotICAgICAgcHRyXyA9IHZhbHVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBw
dHJfID0gY29uc3RfY2FzdDwgOjpzdGQ6OnN0cmluZyogPihkZWZhdWx0X3ZhbHVlKTsKLSAgICB9
Ci0gIH0KLQotICB2b2lkIERlc3Ryb3lOb0FyZW5hKGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1
bHRfdmFsdWUpOwotCi0gIGlubGluZSB2b2lkIENsZWFyVG9FbXB0eU5vQXJlbmEoY29uc3QgOjpz
dGQ6OnN0cmluZyogZGVmYXVsdF92YWx1ZSkgewotICAgIGlmIChwdHJfID09IGRlZmF1bHRfdmFs
dWUpIHsKLSAgICAgIC8vIE5vdGhpbmc6IGFscmVhZHkgZXF1YWwgdG8gZGVmYXVsdCAod2hpY2gg
aXMgdGhlIGVtcHR5IHN0cmluZykuCi0gICAgfSBlbHNlIHsKLSAgICAgIHB0cl8tPmNsZWFyKCk7
Ci0gICAgfQotICB9Ci0KLSAgaW5saW5lIHZvaWQgQ2xlYXJUb0RlZmF1bHROb0FyZW5hKGNvbnN0
IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUpIHsKLSAgICBpZiAocHRyXyA9PSBkZWZhdWx0
X3ZhbHVlKSB7Ci0gICAgICAvLyBOb3RoaW5nOiBhbHJlYWR5IHNldCB0byBkZWZhdWx0LgotICAg
IH0gZWxzZSB7Ci0gICAgICAvLyBSZXVzZSBleGlzdGluZyBhbGxvY2F0ZWQgaW5zdGFuY2UuCi0g
ICAgICAqcHRyXyA9ICpkZWZhdWx0X3ZhbHVlOwotICAgIH0KLSAgfQotCi0gIC8vIEludGVybmFs
IGFjY2Vzc29yIHVzZWQgb25seSBhdCBwYXJzZSB0aW1lIHRvIHByb3ZpZGUgZGlyZWN0IGFjY2Vz
cyB0byB0aGUKLSAgLy8gcmF3IHBvaW50ZXIgZnJvbSB0aGUgc2hhcmVkIHBhcnNlIHJvdXRpbmUg
KGluIHRoZSBub24tYXJlbmFzIGNhc2UpLiBUaGUKLSAgLy8gcGFyc2Ugcm91dGluZSBkb2VzIHRo
ZSBzdHJpbmcgYWxsb2NhdGlvbiBpbiBvcmRlciB0byBzYXZlIGNvZGUgc2l6ZSBpbiB0aGUKLSAg
Ly8gZ2VuZXJhdGVkIHBhcnNpbmcgY29kZS4KLSAgaW5saW5lIDo6c3RkOjpzdHJpbmcqKiBVbnNh
ZmVSYXdTdHJpbmdQb2ludGVyKCkgewotICAgIHJldHVybiAmcHRyXzsKLSAgfQotCi0gcHJpdmF0
ZToKLSAgOjpzdGQ6OnN0cmluZyogcHRyXzsKLQotICBHT09HTEVfQVRUUklCVVRFX05PSU5MSU5F
IHZvaWQgQ3JlYXRlSW5zdGFuY2UoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IDo6c3RkOjpzdHJp
bmcqIGluaXRpYWxfdmFsdWUpIHsKLSAgICAvLyBBc3N1bWVzIHB0cl8gaXMgbm90IE5VTEwuCi0g
ICAgaWYgKGluaXRpYWxfdmFsdWUgIT0gTlVMTCkgewotICAgICAgcHRyXyA9IG5ldyA6OnN0ZDo6
c3RyaW5nKCppbml0aWFsX3ZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgcHRyXyA9IG5ldyA6
OnN0ZDo6c3RyaW5nKCk7Ci0gICAgfQotICAgIGlmIChhcmVuYSAhPSBOVUxMKSB7Ci0gICAgICBh
cmVuYS0+T3duKHB0cl8pOwotICAgIH0KLSAgfQotICBHT09HTEVfQVRUUklCVVRFX05PSU5MSU5F
IHZvaWQgQ3JlYXRlSW5zdGFuY2VOb0FyZW5hKGNvbnN0IDo6c3RkOjpzdHJpbmcqIGluaXRpYWxf
dmFsdWUpIHsKLSAgICBpZiAoaW5pdGlhbF92YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICBwdHJfID0g
bmV3IDo6c3RkOjpzdHJpbmcoKmluaXRpYWxfdmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBw
dHJfID0gbmV3IDo6c3RkOjpzdHJpbmcoKTsKLSAgICB9Ci0gIH0KLX07Ci0KLX0gIC8vIG5hbWVz
cGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLQotCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9BUkVOQVNUUklOR19IX18K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZ191bml0dGVzdC5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZ191bml0dGVzdC5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZWE0MDVkN2QzZWQwZDA3NjY2ZWFmMDJiMDk1Y2Y0MTVmZTZkNzRi
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvYXJlbmFzdHJpbmdfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEJhc2Vk
IG9uIG12ZWxzQCdzIGZyYW5rZW5zdHJpbmcuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
YXJlbmFzdHJpbmcuaD4KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0j
aWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hh
cmVkX3B0ci5oPgotI2VuZGlmCi0jaW5jbHVkZSA8Y3N0ZGxpYj4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nOwotdXNp
bmcgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyOwotCi1uYW1lc3Bh
Y2UgcHJvdG9idWYgewotCi0KLXN0YXRpYyBzdHJpbmcgV3JhcFN0cmluZyhjb25zdCBjaGFyKiB2
YWx1ZSkgewotICByZXR1cm4gdmFsdWU7Ci19Ci0KLS8vIFRlc3QgQXJlbmFTdHJpbmdQdHIgd2l0
aCBhcmVuYSA9PSBOVUxMLgotVEVTVChBcmVuYVN0cmluZ1B0clRlc3QsIEFyZW5hU3RyaW5nUHRy
T25IZWFwKSB7Ci0gIEFyZW5hU3RyaW5nUHRyIGZpZWxkOwotICA6OnN0ZDo6c3RyaW5nIGRlZmF1
bHRfdmFsdWUgPSAiZGVmYXVsdCI7Ci0gIGZpZWxkLlVuc2FmZVNldERlZmF1bHQoJmRlZmF1bHRf
dmFsdWUpOwotICBFWFBFQ1RfRVEoc3RyaW5nKCJkZWZhdWx0IiksIGZpZWxkLkdldCgmZGVmYXVs
dF92YWx1ZSkpOwotICBmaWVsZC5TZXQoJmRlZmF1bHRfdmFsdWUsIFdyYXBTdHJpbmcoIlRlc3Qg
c2hvcnQiKSwgTlVMTCk7Ci0gIEVYUEVDVF9FUShzdHJpbmcoIlRlc3Qgc2hvcnQiKSwgZmllbGQu
R2V0KCZkZWZhdWx0X3ZhbHVlKSk7Ci0gIGZpZWxkLlNldCgmZGVmYXVsdF92YWx1ZSwgV3JhcFN0
cmluZygiVGVzdCBsb25nIGxvbmcgbG9uZyBsb25nIHZhbHVlIiksIE5VTEwpOwotICBFWFBFQ1Rf
RVEoc3RyaW5nKCJUZXN0IGxvbmcgbG9uZyBsb25nIGxvbmcgdmFsdWUiKSwgZmllbGQuR2V0KCZk
ZWZhdWx0X3ZhbHVlKSk7Ci0gIGZpZWxkLlNldCgmZGVmYXVsdF92YWx1ZSwgc3RyaW5nKCIiKSwg
TlVMTCk7Ci0gIGZpZWxkLkRlc3Ryb3koJmRlZmF1bHRfdmFsdWUsIE5VTEwpOwotCi0gIEFyZW5h
U3RyaW5nUHRyIGZpZWxkMjsKLSAgZmllbGQyLlVuc2FmZVNldERlZmF1bHQoJmRlZmF1bHRfdmFs
dWUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXQgPSBmaWVsZDIuTXV0YWJsZSgmZGVmYXVsdF92YWx1
ZSwgTlVMTCk7Ci0gIEVYUEVDVF9FUShtdXQsIGZpZWxkMi5NdXRhYmxlKCZkZWZhdWx0X3ZhbHVl
LCBOVUxMKSk7Ci0gIEVYUEVDVF9FUShtdXQsICZmaWVsZDIuR2V0KCZkZWZhdWx0X3ZhbHVlKSk7
Ci0gIEVYUEVDVF9ORSgmZGVmYXVsdF92YWx1ZSwgbXV0KTsKLSAgRVhQRUNUX0VRKHN0cmluZygi
ZGVmYXVsdCIpLCAqbXV0KTsKLSAgKm11dCA9ICJUZXN0IGxvbmcgbG9uZyBsb25nIGxvbmcgdmFs
dWUiOyAgLy8gZW5zdXJlIHN0cmluZyBhbGxvY2F0ZXMgc3RvcmFnZQotICBFWFBFQ1RfRVEoc3Ry
aW5nKCJUZXN0IGxvbmcgbG9uZyBsb25nIGxvbmcgdmFsdWUiKSwgZmllbGQyLkdldCgmZGVmYXVs
dF92YWx1ZSkpOwotICBmaWVsZDIuRGVzdHJveSgmZGVmYXVsdF92YWx1ZSwgTlVMTCk7Ci19Ci0K
LVRFU1QoQXJlbmFTdHJpbmdQdHJUZXN0LCBBcmVuYVN0cmluZ1B0ck9uQXJlbmEpIHsKLSAgZ29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEgYXJlbmE7Ci0gIEFyZW5hU3RyaW5nUHRyIGZpZWxkOwotICA6
OnN0ZDo6c3RyaW5nIGRlZmF1bHRfdmFsdWUgPSAiZGVmYXVsdCI7Ci0gIGZpZWxkLlVuc2FmZVNl
dERlZmF1bHQoJmRlZmF1bHRfdmFsdWUpOwotICBFWFBFQ1RfRVEoc3RyaW5nKCJkZWZhdWx0Iiks
IGZpZWxkLkdldCgmZGVmYXVsdF92YWx1ZSkpOwotICBmaWVsZC5TZXQoJmRlZmF1bHRfdmFsdWUs
IFdyYXBTdHJpbmcoIlRlc3Qgc2hvcnQiKSwgJmFyZW5hKTsKLSAgRVhQRUNUX0VRKHN0cmluZygi
VGVzdCBzaG9ydCIpLCBmaWVsZC5HZXQoJmRlZmF1bHRfdmFsdWUpKTsKLSAgZmllbGQuU2V0KCZk
ZWZhdWx0X3ZhbHVlLCBXcmFwU3RyaW5nKCJUZXN0IGxvbmcgbG9uZyBsb25nIGxvbmcgdmFsdWUi
KSwgJmFyZW5hKTsKLSAgRVhQRUNUX0VRKHN0cmluZygiVGVzdCBsb25nIGxvbmcgbG9uZyBsb25n
IHZhbHVlIiksCi0gICAgICAgICAgICBmaWVsZC5HZXQoJmRlZmF1bHRfdmFsdWUpKTsKLSAgZmll
bGQuU2V0KCZkZWZhdWx0X3ZhbHVlLCBzdHJpbmcoIiIpLCAmYXJlbmEpOwotICBmaWVsZC5EZXN0
cm95KCZkZWZhdWx0X3ZhbHVlLCAmYXJlbmEpOwotCi0gIEFyZW5hU3RyaW5nUHRyIGZpZWxkMjsK
LSAgZmllbGQyLlVuc2FmZVNldERlZmF1bHQoJmRlZmF1bHRfdmFsdWUpOwotICA6OnN0ZDo6c3Ry
aW5nKiBtdXQgPSBmaWVsZDIuTXV0YWJsZSgmZGVmYXVsdF92YWx1ZSwgJmFyZW5hKTsKLSAgRVhQ
RUNUX0VRKG11dCwgZmllbGQyLk11dGFibGUoJmRlZmF1bHRfdmFsdWUsICZhcmVuYSkpOwotICBF
WFBFQ1RfRVEobXV0LCAmZmllbGQyLkdldCgmZGVmYXVsdF92YWx1ZSkpOwotICBFWFBFQ1RfTkUo
JmRlZmF1bHRfdmFsdWUsIG11dCk7Ci0gIEVYUEVDVF9FUShzdHJpbmcoImRlZmF1bHQiKSwgKm11
dCk7Ci0gICptdXQgPSAiVGVzdCBsb25nIGxvbmcgbG9uZyBsb25nIHZhbHVlIjsgIC8vIGVuc3Vy
ZSBzdHJpbmcgYWxsb2NhdGVzIHN0b3JhZ2UKLSAgRVhQRUNUX0VRKHN0cmluZygiVGVzdCBsb25n
IGxvbmcgbG9uZyBsb25nIHZhbHVlIiksCi0gICAgICAgICAgICBmaWVsZDIuR2V0KCZkZWZhdWx0
X3ZhbHVlKSk7Ci0gIGZpZWxkMi5EZXN0cm95KCZkZWZhdWx0X3ZhbHVlLCAmYXJlbmEpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDczZWI0ZTZmYmE1YjliODVmMzNlMTg4N2ZmYWU3YmQ1OTU5YmU5
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY29kZV9nZW5lcmF0b3IuY2MKKysrIC9kZXYvbnVsbApAQCAt
MSw4NSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0
aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdp
bmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZm
IERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y29kZV9nZW5lcmF0b3IuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dn
aW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci0KLUNvZGVHZW5l
cmF0b3I6On5Db2RlR2VuZXJhdG9yKCkge30KLUdlbmVyYXRvckNvbnRleHQ6On5HZW5lcmF0b3JD
b250ZXh0KCkge30KLQotaW86Olplcm9Db3B5T3V0cHV0U3RyZWFtKgotR2VuZXJhdG9yQ29udGV4
dDo6T3BlbkZvckFwcGVuZChjb25zdCBzdHJpbmcmIGZpbGVuYW1lKSB7Ci0gIHJldHVybiBOVUxM
OwotfQotCi1pbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0qIEdlbmVyYXRvckNvbnRleHQ6Ok9wZW5G
b3JJbnNlcnQoCi0gICAgY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qgc3RyaW5nJiBpbnNl
cnRpb25fcG9pbnQpIHsKLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIlRoaXMgR2VuZXJhdG9yQ29u
dGV4dCBkb2VzIG5vdCBzdXBwb3J0IGluc2VydGlvbi4iOwotICByZXR1cm4gTlVMTDsgIC8vIG1h
a2UgY29tcGlsZXIgaGFwcHkKLX0KLQotdm9pZCBHZW5lcmF0b3JDb250ZXh0OjpMaXN0UGFyc2Vk
RmlsZXMoCi0gICAgdmVjdG9yPGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4qIG91dHB1dCkgewotICBH
T09HTEVfTE9HKEZBVEFMKSA8PCAiVGhpcyBHZW5lcmF0b3JDb250ZXh0IGRvZXMgbm90IHN1cHBv
cnQgTGlzdFBhcnNlZEZpbGVzIjsKLX0KLQotLy8gUGFyc2VzIGEgc2V0IG9mIGNvbW1hLWRlbGlt
aXRlZCBuYW1lL3ZhbHVlIHBhaXJzLgotdm9pZCBQYXJzZUdlbmVyYXRvclBhcmFtZXRlcihjb25z
dCBzdHJpbmcmIHRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvcjxwYWly
PHN0cmluZywgc3RyaW5nPiA+KiBvdXRwdXQpIHsKLSAgdmVjdG9yPHN0cmluZz4gcGFydHMgPSBT
cGxpdCh0ZXh0LCAiLCIsIHRydWUpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydHMuc2l6
ZSgpOyBpKyspIHsKLSAgICBzdHJpbmc6OnNpemVfdHlwZSBlcXVhbHNfcG9zID0gcGFydHNbaV0u
ZmluZF9maXJzdF9vZignPScpOwotICAgIHBhaXI8c3RyaW5nLCBzdHJpbmc+IHZhbHVlOwotICAg
IGlmIChlcXVhbHNfcG9zID09IHN0cmluZzo6bnBvcykgewotICAgICAgdmFsdWUuZmlyc3QgPSBw
YXJ0c1tpXTsKLSAgICAgIHZhbHVlLnNlY29uZCA9ICIiOwotICAgIH0gZWxzZSB7Ci0gICAgICB2
YWx1ZS5maXJzdCA9IHBhcnRzW2ldLnN1YnN0cigwLCBlcXVhbHNfcG9zKTsKLSAgICAgIHZhbHVl
LnNlY29uZCA9IHBhcnRzW2ldLnN1YnN0cihlcXVhbHNfcG9zICsgMSk7Ci0gICAgfQotICAgIG91
dHB1dC0+cHVzaF9iYWNrKHZhbHVlKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgY29tcGls
ZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjk4OWYxNTEzMjhmYzdjOGUwOGM1YzNmYmUyMjI1ZmQxMWZiM2Y3
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0x
LDE3NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0
aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdp
bmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZm
IERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gRGVmaW5lcyB0aGUgYWJzdHJhY3QgaW50ZXJmYWNl
IGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIGxhbmd1YWdlLXNwZWNpZmljCi0vLyBjb2RlIGdl
bmVyYXRvcnMuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NPREVfR0VORVJB
VE9SX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ09ERV9HRU5FUkFUT1Jf
SF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi1uYW1l
c3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5hbWVzcGFjZSBpbyB7IGNs
YXNzIFplcm9Db3B5T3V0cHV0U3RyZWFtOyB9Ci1jbGFzcyBGaWxlRGVzY3JpcHRvcjsKLQotbmFt
ZXNwYWNlIGNvbXBpbGVyIHsKLQotLy8gRGVmaW5lZCBpbiB0aGlzIGZpbGUuCi1jbGFzcyBDb2Rl
R2VuZXJhdG9yOwotY2xhc3MgR2VuZXJhdG9yQ29udGV4dDsKLQotLy8gVGhlIGFic3RyYWN0IGlu
dGVyZmFjZSB0byBhIGNsYXNzIHdoaWNoIGdlbmVyYXRlcyBjb2RlIGltcGxlbWVudGluZyBhCi0v
LyBwYXJ0aWN1bGFyIHByb3RvIGZpbGUgaW4gYSBwYXJ0aWN1bGFyIGxhbmd1YWdlLiAgQSBudW1i
ZXIgb2YgdGhlc2UgbWF5Ci0vLyBiZSByZWdpc3RlcmVkIHdpdGggQ29tbWFuZExpbmVJbnRlcmZh
Y2UgdG8gc3VwcG9ydCB2YXJpb3VzIGxhbmd1YWdlcy4KLWNsYXNzIExJQlBST1RPQ19FWFBPUlQg
Q29kZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBpbmxpbmUgQ29kZUdlbmVyYXRvcigpIHt9Ci0g
IHZpcnR1YWwgfkNvZGVHZW5lcmF0b3IoKTsKLQotICAvLyBHZW5lcmF0ZXMgY29kZSBmb3IgdGhl
IGdpdmVuIHByb3RvIGZpbGUsIGdlbmVyYXRpbmcgb25lIG9yIG1vcmUgZmlsZXMgaW4KLSAgLy8g
dGhlIGdpdmVuIG91dHB1dCBkaXJlY3RvcnkuCi0gIC8vCi0gIC8vIEEgcGFyYW1ldGVyIHRvIGJl
IHBhc3NlZCB0byB0aGUgZ2VuZXJhdG9yIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlCi0gIC8vIGNv
bW1hbmQgbGluZS4gIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBKYXZhIGFuZCBzaW1p
bGFyIGxhbmd1YWdlcwotICAvLyB0byBzcGVjaWZ5IHdoaWNoIHNwZWNpZmljIGNsYXNzIGZyb20g
dGhlIHByb3RvIGZpbGUgaXMgdG8gYmUgZ2VuZXJhdGVkLAotICAvLyB0aG91Z2ggaXQgY291bGQg
aGF2ZSBvdGhlciB1c2VzIGFzIHdlbGwuICBJdCBpcyBlbXB0eSBpZiBubyBwYXJhbWV0ZXIgd2Fz
Ci0gIC8vIGdpdmVuLgotICAvLwotICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bC4gIE90
aGVyd2lzZSwgc2V0cyAqZXJyb3IgdG8gYSBkZXNjcmlwdGlvbiBvZgotICAvLyB0aGUgcHJvYmxl
bSAoZS5nLiAiaW52YWxpZCBwYXJhbWV0ZXIiKSBhbmQgcmV0dXJucyBmYWxzZS4KLSAgdmlydHVh
bCBib29sIEdlbmVyYXRlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBHZW5lcmF0b3JDb250ZXh0KiBnZW5lcmF0b3JfY29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmluZyogZXJyb3IpIGNvbnN0ID0gMDsKLQotICAvLyBHZW5lcmF0ZXMgY29k
ZSBmb3IgYWxsIGdpdmVuIHByb3RvIGZpbGVzLCBnZW5lcmF0aW5nIG9uZSBvciBtb3JlIGZpbGVz
IGluCi0gIC8vIHRoZSBnaXZlbiBvdXRwdXQgZGlyZWN0b3J5LgotICAvLwotICAvLyBUaGlzIG1l
dGhvZCBzaG91bGQgYmUgY2FsbGVkIGluc3RlYWQgb2YgfEdlbmVyYXRlKCl8IHdoZW4KLSAgLy8g
fEhhc0dlbmVyYXRlQWxsKCl8IHJldHVybnMgfHRydWV8LiBJdCBpcyB1c2VkIHRvIGVtdWxhdGUg
bGVnYWN5IHNlbWFudGljcwotICAvLyB3aGVuIG1vcmUgdGhhbiBvbmUgYC5wcm90b2AgZmlsZSBp
cyBzcGVjaWZpZWQgb24gb25lIGNvbXBpbGVyIGludm9jYXRpb24uCi0gIC8vCi0gIC8vIFdBUk5J
Tkc6IFBsZWFzZSBkbyBub3QgdXNlIHVubGVzcyBsZWdhY3kgc2VtYW50aWNzIGZvcmNlIHRoZSBj
b2RlIGdlbmVyYXRvcgotICAvLyB0byBwcm9kdWNlIGEgc2luZ2xlIG91dHB1dCBmaWxlIGZvciBh
bGwgaW5wdXQgZmlsZXMsIG9yIG90aGVyd2lzZSByZXF1aXJlCi0gIC8vIGFuIGV4YW1pbmF0aW9u
IG9mIGFsbCBpbnB1dCBmaWxlcyBmaXJzdC4gVGhlIGNhbm9uaWNhbCBjb2RlIGdlbmVyYXRvcgot
ICAvLyBkZXNpZ24gcHJvZHVjZXMgb25lIG91dHB1dCBmaWxlIHBlciBpbnB1dCAucHJvdG8gZmls
ZSwgYW5kIHdlIGRvIG5vdCB3aXNoCi0gIC8vIHRvIGVuY291cmFnZSBhbHRlcm5hdGUgZGVzaWdu
cy4KLSAgLy8KLSAgLy8gQSBwYXJhbWV0ZXIgaXMgZ2l2ZW4gYXMgcGFzc2VkIG9uIHRoZSBjb21t
YW5kIGxpbmUsIGFzIGluIHxHZW5lcmF0ZSgpfAotICAvLyBhYm92ZS4KLSAgLy8KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuICBPdGhlcndpc2UsIHNldHMgKmVycm9yIHRvIGEgZGVz
Y3JpcHRpb24gb2YKLSAgLy8gdGhlIHByb2JsZW0gKGUuZy4gImludmFsaWQgcGFyYW1ldGVyIikg
YW5kIHJldHVybnMgZmFsc2UuCi0gIHZpcnR1YWwgYm9vbCBHZW5lcmF0ZUFsbChjb25zdCB2ZWN0
b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiYgZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdlbmVyYXRvckNvbnRleHQqIGdlbmVyYXRvcl9jb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyaW5nKiBlcnJvcikgY29uc3QgewotICAgICplcnJvciA9ICJVbmltcGxlbWVu
dGVkIEdlbmVyYXRlQWxsKCkgbWV0aG9kLiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb2RlIGdlbmVyYXRvciBleHBlY3RzIHRvIHJlY2VpdmUg
YWxsIEZpbGVEZXNjcmlwdG9ycwotICAvLyBhdCBvbmNlICh2aWEgfEdlbmVyYXRlQWxsKCl8KSwg
cmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZSAodmlhCi0gIC8vIHxHZW5lcmF0ZSgpfCkuIFRoaXMg
aXMgcmVxdWlyZWQgdG8gaW1wbGVtZW50IGxlZ2FjeSBzZW1hbnRpY3MuCi0gIHZpcnR1YWwgYm9v
bCBIYXNHZW5lcmF0ZUFsbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSBwcml2YXRlOgot
ICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQ29kZUdlbmVyYXRvcik7Ci19Owot
Ci0vLyBDb2RlR2VuZXJhdG9ycyBnZW5lcmF0ZSBvbmUgb3IgbW9yZSBmaWxlcyBpbiBhIGdpdmVu
IGRpcmVjdG9yeS4gIFRoaXMKLS8vIGFic3RyYWN0IGludGVyZmFjZSByZXByZXNlbnRzIHRoZSBk
aXJlY3RvcnkgdG8gd2hpY2ggdGhlIENvZGVHZW5lcmF0b3IgaXMKLS8vIHRvIHdyaXRlIGFuZCBv
dGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgR2VuZXJhdG9y
Ci0vLyBydW5zLgotY2xhc3MgTElCUFJPVE9DX0VYUE9SVCBHZW5lcmF0b3JDb250ZXh0IHsKLSBw
dWJsaWM6Ci0gIGlubGluZSBHZW5lcmF0b3JDb250ZXh0KCkge30KLSAgdmlydHVhbCB+R2VuZXJh
dG9yQ29udGV4dCgpOwotCi0gIC8vIE9wZW5zIHRoZSBnaXZlbiBmaWxlLCB0cnVuY2F0aW5nIGl0
IGlmIGl0IGV4aXN0cywgYW5kIHJldHVybnMgYQotICAvLyBaZXJvQ29weU91dHB1dFN0cmVhbSB0
aGF0IHdyaXRlcyB0byB0aGUgZmlsZS4gIFRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlwCi0gIC8v
IG9mIHRoZSByZXR1cm5lZCBvYmplY3QuICBUaGlzIG1ldGhvZCBuZXZlciBmYWlscyAoYSBkdW1t
eSBzdHJlYW0gd2lsbCBiZQotICAvLyByZXR1cm5lZCBpbnN0ZWFkKS4KLSAgLy8KLSAgLy8gVGhl
IGZpbGVuYW1lIGdpdmVuIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gIC8vIEUuZy4gdGhlIEMrKyBnZW5lcmF0b3IsIHdoZW4gZ2VuZXJhdGluZyBj
b2RlIGZvciAiZm9vL2Jhci5wcm90byIsIHdpbGwKLSAgLy8gZ2VuZXJhdGUgdGhlIGZpbGVzICJm
b28vYmFyLnBiLmgiIGFuZCAiZm9vL2Jhci5wYi5jYyI7IG5vdGUgdGhhdAotICAvLyAiZm9vLyIg
aXMgaW5jbHVkZWQgaW4gdGhlc2UgZmlsZW5hbWVzLiAgVGhlIGZpbGVuYW1lIGlzIG5vdCBhbGxv
d2VkIHRvCi0gIC8vIGNvbnRhaW4gIi4iIG9yICIuLiIgY29tcG9uZW50cy4KLSAgdmlydHVhbCBp
bzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0qIE9wZW4oY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSkgPSAw
OwotCi0gIC8vIFNpbWlsYXIgdG8gT3BlbigpIGJ1dCB0aGUgb3V0cHV0IHdpbGwgYmUgYXBwZW5k
ZWQgdG8gdGhlIGZpbGUgaWYgZXhpc3RzCi0gIHZpcnR1YWwgaW86Olplcm9Db3B5T3V0cHV0U3Ry
ZWFtKiBPcGVuRm9yQXBwZW5kKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpOwotCi0gIC8vIENyZWF0
ZXMgYSBaZXJvQ29weU91dHB1dFN0cmVhbSB3aGljaCB3aWxsIGluc2VydCBjb2RlIGludG8gdGhl
IGdpdmVuIGZpbGUKLSAgLy8gYXQgdGhlIGdpdmVuIGluc2VydGlvbiBwb2ludC4gIFNlZSBwbHVn
aW4ucHJvdG8gKHBsdWdpbi5wYi5oKSBmb3IgbW9yZQotICAvLyBpbmZvcm1hdGlvbiBvbiBpbnNl
cnRpb24gcG9pbnRzLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLSAgLy8gYXNzZXJ0LWZh
aWxzIC0tIGl0IGV4aXN0cyBvbmx5IGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eS4KLSAgLy8K
LSAgLy8gV0FSTklORzogIFRoaXMgZmVhdHVyZSBpcyBjdXJyZW50bHkgRVhQRVJJTUVOVEFMIGFu
ZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KLSAgdmlydHVhbCBpbzo6WmVyb0NvcHlPdXRwdXRTdHJl
YW0qIE9wZW5Gb3JJbnNlcnQoCi0gICAgICBjb25zdCBzdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBz
dHJpbmcmIGluc2VydGlvbl9wb2ludCk7Ci0KLSAgLy8gUmV0dXJucyBhIHZlY3RvciBvZiBGaWxl
RGVzY3JpcHRvcnMgZm9yIGFsbCB0aGUgZmlsZXMgYmVpbmcgY29tcGlsZWQKLSAgLy8gaW4gdGhp
cyBydW4uICBVc2VmdWwgZm9yIGxhbmd1YWdlcywgc3VjaCBhcyBHbywgdGhhdCB0cmVhdCBmaWxl
cwotICAvLyBkaWZmZXJlbnRseSB3aGVuIGNvbXBpbGVkIGFzIGEgc2V0IHJhdGhlciB0aGFuIGlu
ZGl2aWR1YWxseS4KLSAgdmlydHVhbCB2b2lkIExpc3RQYXJzZWRGaWxlcyh2ZWN0b3I8Y29uc3Qg
RmlsZURlc2NyaXB0b3IqPiogb3V0cHV0KTsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExP
V19FVklMX0NPTlNUUlVDVE9SUyhHZW5lcmF0b3JDb250ZXh0KTsKLX07Ci0KLS8vIFRoZSB0eXBl
IEdlbmVyYXRvckNvbnRleHQgd2FzIG9uY2UgY2FsbGVkIE91dHB1dERpcmVjdG9yeS4gVGhpcyB0
eXBlZGVmCi0vLyBwcm92aWRlcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotdHlwZWRlZiBHZW5l
cmF0b3JDb250ZXh0IE91dHB1dERpcmVjdG9yeTsKLQotLy8gU2V2ZXJhbCBjb2RlIGdlbmVyYXRv
cnMgdHJlYXQgdGhlIHBhcmFtZXRlciBhcmd1bWVudCBhcyBob2xkaW5nIGEKLS8vIGxpc3Qgb2Yg
b3B0aW9ucyBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhpcyBoZWxwZXIgZnVuY3Rpb24gcGFyc2Vz
Ci0vLyBhIHNldCBvZiBjb21tYS1kZWxpbWl0ZWQgbmFtZS92YWx1ZSBwYWlyczogZS5nLiwKLS8v
ICAgImZvbz1iYXIsYmF6LHF1eD1jb3JnZSIKLS8vIHBhcnNlcyB0byB0aGUgcGFpcnM6Ci0vLyAg
ICgiZm9vIiwgImJhciIpLCAoImJheiIsICIiKSwgKCJxdXgiLCAiY29yZ2UiKQotZXh0ZXJuIHZv
aWQgUGFyc2VHZW5lcmF0b3JQYXJhbWV0ZXIoY29uc3Qgc3RyaW5nJiwKLSAgICAgICAgICAgIHZl
Y3RvcjxwYWlyPHN0cmluZywgc3RyaW5nPiA+Kik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxl
cgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNl
bmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NPREVfR0VORVJBVE9SX0hfXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZh
Y2UuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29tbWFuZF9saW5lX2ludGVyZmFj
ZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNhZDZiNjE2NTJiNWU2OWNhMzg4
MDYzYTNlYjZkNzI5MzQyNWQ5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29tbWFuZF9saW5lX2ludGVy
ZmFjZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDE4NzkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRv
biBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBi
eQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2UuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvcGxhdGZvcm1fbWFjcm9zLmg+Ci0KLSNpbmNs
dWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGlvLmg+
Ci0jaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlm
Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmc3RyZWFtPgotI2luY2x1ZGUgPGlvc3Ry
ZWFtPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KLSNpZmRlZiBHT09HTEVfUFJPVE9CVUZfQVJDSF9T
UEFSQwotI2luY2x1ZGUgPGxpbWl0cy5oPiAvL0ZvciBQQVRIX01BWAotI2VuZGlmCi0KLSNpbmNs
dWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0KLSNpZmRlZiBfX0FQUExFX18KLSNp
bmNsdWRlIDxtYWNoLW8vZHlsZC5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmlu
Z3ByaW50Zi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9pbXBvcnRlci5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucGIuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvc3VicHJvY2Vzcy5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci96aXBfd3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGV4dF9mb3JtYXQu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZHluYW1pY19tZXNzYWdlLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dn
aW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3Vic3RpdHV0ZS5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9tYXBfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdGxfdXRpbC5oPgotCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci0KLSNpZiBkZWZpbmVkKF9XSU4zMikKLSNkZWZp
bmUgbWtkaXIobmFtZSwgbW9kZSkgbWtkaXIobmFtZSkKLSNpZm5kZWYgV19PSwotI2RlZmluZSBX
X09LIDAyICAvLyBub3QgZGVmaW5lZCBieSBNU1ZDIGZvciB3aGF0ZXZlciByZWFzb24KLSNlbmRp
ZgotI2lmbmRlZiBGX09LCi0jZGVmaW5lIEZfT0sgMDAgIC8vIG5vdCBkZWZpbmVkIGJ5IE1TVkMg
Zm9yIHdoYXRldmVyIHJlYXNvbgotI2VuZGlmCi0jaWZuZGVmIFNURElOX0ZJTEVOTwotI2RlZmlu
ZSBTVERJTl9GSUxFTk8gMAotI2VuZGlmCi0jaWZuZGVmIFNURE9VVF9GSUxFTk8KLSNkZWZpbmUg
U1RET1VUX0ZJTEVOTyAxCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIE9fQklOQVJZCi0jaWZk
ZWYgX09fQklOQVJZCi0jZGVmaW5lIE9fQklOQVJZIF9PX0JJTkFSWQotI2Vsc2UKLSNkZWZpbmUg
T19CSU5BUlkgMCAgICAgLy8gSWYgdGhpcyBpc24ndCBkZWZpbmVkLCB0aGUgcGxhdGZvcm0gZG9l
c24ndCBuZWVkIGl0LgotI2VuZGlmCi0jZW5kaWYKLQotbmFtZXNwYWNlIHsKLSNpZiBkZWZpbmVk
KF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKLXN0YXRpYyBjb25zdCBjaGFyKiBrUGF0
aFNlcGFyYXRvciA9ICI7IjsKLSNlbHNlCi1zdGF0aWMgY29uc3QgY2hhcioga1BhdGhTZXBhcmF0
b3IgPSAiOiI7Ci0jZW5kaWYKLQotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0ZXh0IGxvb2tzIGxp
a2UgYSBXaW5kb3dzLXN0eWxlIGFic29sdXRlIHBhdGgsIHN0YXJ0aW5nCi0vLyB3aXRoIGEgZHJp
dmUgbGV0dGVyLiAgRXhhbXBsZTogICJDOlxmb28iLiAgVE9ETyhrZW50b24pOiAgU2hhcmUgdGhp
cyB3aXRoCi0vLyBjb3B5IGluIGltcG9ydGVyLmNjPwotc3RhdGljIGJvb2wgSXNXaW5kb3dzQWJz
b2x1dGVQYXRoKGNvbnN0IHN0cmluZyYgdGV4dCkgewotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBk
ZWZpbmVkKF9fQ1lHV0lOX18pCi0gIHJldHVybiB0ZXh0LnNpemUoKSA+PSAzICYmIHRleHRbMV0g
PT0gJzonICYmCi0gICAgICAgICBpc2FscGhhKHRleHRbMF0pICYmCi0gICAgICAgICAodGV4dFsy
XSA9PSAnLycgfHwgdGV4dFsyXSA9PSAnXFwnKSAmJgotICAgICAgICAgdGV4dC5maW5kX2xhc3Rf
b2YoJzonKSA9PSAxOwotI2Vsc2UKLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQg
U2V0RmRUb1RleHRNb2RlKGludCBmZCkgewotI2lmZGVmIF9XSU4zMgotICBpZiAoX3NldG1vZGUo
ZmQsIF9PX1RFWFQpID09IC0xKSB7Ci0gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBJ
IHRoaW5rLgotICAgIEdPT0dMRV9MT0coV0FSTklORykgPDwgIl9zZXRtb2RlKCIgPDwgZmQgPDwg
IiwgX09fVEVYVCk6ICIgPDwgc3RyZXJyb3IoZXJybm8pOwotICB9Ci0jZW5kaWYKLSAgLy8gKFRl
eHQgYW5kIGJpbmFyeSBhcmUgdGhlIHNhbWUgb24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zLikKLX0K
LQotdm9pZCBTZXRGZFRvQmluYXJ5TW9kZShpbnQgZmQpIHsKLSNpZmRlZiBfV0lOMzIKLSAgaWYg
KF9zZXRtb2RlKGZkLCBfT19CSU5BUlkpID09IC0xKSB7Ci0gICAgLy8gVGhpcyBzaG91bGQgbmV2
ZXIgaGFwcGVuLCBJIHRoaW5rLgotICAgIEdPT0dMRV9MT0coV0FSTklORykgPDwgIl9zZXRtb2Rl
KCIgPDwgZmQgPDwgIiwgX09fQklOQVJZKTogIiA8PCBzdHJlcnJvcihlcnJubyk7Ci0gIH0KLSNl
bmRpZgotICAvLyAoVGV4dCBhbmQgYmluYXJ5IGFyZSB0aGUgc2FtZSBvbiBub24tV2luZG93cyBw
bGF0Zm9ybXMuKQotfQotCi12b2lkIEFkZFRyYWlsaW5nU2xhc2goc3RyaW5nKiBwYXRoKSB7Ci0g
IGlmICghcGF0aC0+ZW1wdHkoKSAmJiBwYXRoLT5hdChwYXRoLT5zaXplKCkgLSAxKSAhPSAnLycp
IHsKLSAgICBwYXRoLT5wdXNoX2JhY2soJy8nKTsKLSAgfQotfQotCi1ib29sIFZlcmlmeURpcmVj
dG9yeUV4aXN0cyhjb25zdCBzdHJpbmcmIHBhdGgpIHsKLSAgaWYgKHBhdGguZW1wdHkoKSkgcmV0
dXJuIHRydWU7Ci0KLSAgaWYgKGFjY2VzcyhwYXRoLmNfc3RyKCksIEZfT0spID09IC0xKSB7Ci0g
ICAgc3RkOjpjZXJyIDw8IHBhdGggPDwgIjogIiA8PCBzdHJlcnJvcihlcnJubykgPDwgc3RkOjpl
bmRsOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAg
fQotfQotCi0vLyBUcnkgdG8gY3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBnaXZl
biBmaWxlLCBjcmVhdGluZyB0aGUgcGFyZW50J3MKLS8vIHBhcmVudCBpZiBuZWNlc3NhcnksIGFu
ZCBzbyBvbi4gIFRoZSBmdWxsIGZpbGUgbmFtZSBpcyBhY3R1YWxseQotLy8gKHByZWZpeCArIGZp
bGVuYW1lKSwgYnV0IHdlIGFzc3VtZSB8cHJlZml4fCBhbHJlYWR5IGV4aXN0cyBhbmQgb25seSBj
cmVhdGUKLS8vIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiB8ZmlsZW5hbWV8LgotYm9vbCBUcnlDcmVh
dGVQYXJlbnREaXJlY3RvcnkoY29uc3Qgc3RyaW5nJiBwcmVmaXgsIGNvbnN0IHN0cmluZyYgZmls
ZW5hbWUpIHsKLSAgLy8gUmVjdXJzaXZlbHkgY3JlYXRlIHBhcmVudCBkaXJlY3RvcmllcyB0byB0
aGUgb3V0cHV0IGZpbGUuCi0gIHZlY3RvcjxzdHJpbmc+IHBhcnRzID0gU3BsaXQoZmlsZW5hbWUs
ICIvIiwgdHJ1ZSk7Ci0gIHN0cmluZyBwYXRoX3NvX2ZhciA9IHByZWZpeDsKLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBwYXJ0cy5zaXplKCkgLSAxOyBpKyspIHsKLSAgICBwYXRoX3NvX2ZhciArPSBw
YXJ0c1tpXTsKLSAgICBpZiAobWtkaXIocGF0aF9zb19mYXIuY19zdHIoKSwgMDc3NykgIT0gMCkg
ewotICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkgewotICAgICAgICBzdGQ6OmNlcnIgPDwgZmls
ZW5hbWUgPDwgIjogd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBkaXJlY3RvcnkgIgotICAgICAgICAg
ICAgICAgICAgPDwgcGF0aF9zb19mYXIgPDwgIjogIiA8PCBzdHJlcnJvcihlcnJubykgPDwgc3Rk
OjplbmRsOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIHBhdGhf
c29fZmFyICs9ICcvJzsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi0vLyBHZXQgdGhlIGFi
c29sdXRlIHBhdGggb2YgdGhpcyBwcm90b2MgYmluYXJ5LgotYm9vbCBHZXRQcm90b2NBYnNvbHV0
ZVBhdGgoc3RyaW5nKiBwYXRoKSB7Ci0jaWZkZWYgX1dJTjMyCi0gIGNoYXIgYnVmZmVyW01BWF9Q
QVRIXTsKLSAgaW50IGxlbiA9IEdldE1vZHVsZUZpbGVOYW1lQShOVUxMLCBidWZmZXIsIE1BWF9Q
QVRIKTsKLSNlbGlmIF9fQVBQTEVfXwotICBjaGFyIGJ1ZmZlcltQQVRIX01BWF07Ci0gIGludCBs
ZW4gPSAwOwotCi0gIGNoYXIgZGlydHlidWZmZXJbUEFUSF9NQVhdOwotICB1aW50MzJfdCBzaXpl
ID0gc2l6ZW9mKGRpcnR5YnVmZmVyKTsKLSAgaWYgKF9OU0dldEV4ZWN1dGFibGVQYXRoKGRpcnR5
YnVmZmVyLCAmc2l6ZSkgPT0gMCkgewotICAgIHJlYWxwYXRoKGRpcnR5YnVmZmVyLCBidWZmZXIp
OwotICAgIGxlbiA9IHN0cmxlbihidWZmZXIpOwotICB9Ci0jZWxzZQotICBjaGFyIGJ1ZmZlcltQ
QVRIX01BWF07Ci0gIGludCBsZW4gPSByZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBidWZmZXIs
IFBBVEhfTUFYKTsKLSNlbmRpZgotICBpZiAobGVuID4gMCkgewotICAgIHBhdGgtPmFzc2lnbihi
dWZmZXIsIGxlbik7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGZh
bHNlOwotICB9Ci19Ci0KLS8vIFdoZXRoZXIgYSBwYXRoIGlzIHdoZXJlIGdvb2dsZS9wcm90b2J1
Zi9kZXNjcmlwdG9yLnByb3RvIGFuZCBvdGhlciB3ZWxsLWtub3duCi0vLyB0eXBlIHByb3RvcyBh
cmUgaW5zdGFsbGVkLgotYm9vbCBJc0luc3RhbGxlZFByb3RvUGF0aChjb25zdCBzdHJpbmcmIHBh
dGgpIHsKLSAgLy8gQ2hlY2tpbmcgdGhlIGRlc2NyaXB0b3IucHJvdG8gZmlsZSBzaG91bGQgYmUg
Z29vZCBlbm91Z2guCi0gIHN0cmluZyBmaWxlX3BhdGggPSBwYXRoICsgIi9nb29nbGUvcHJvdG9i
dWYvZGVzY3JpcHRvci5wcm90byI7Ci0gIHJldHVybiBhY2Nlc3MoZmlsZV9wYXRoLmNfc3RyKCks
IEZfT0spICE9IC0xOwotfQotCi0vLyBBZGQgdGhlIHBhdGhzIHdoZXJlIGdvb2dsZS9wcm90b2J1
Zi9kZXNjcml0b3IucHJvdG8gYW5kIG90aGVyIHdlbGwta25vd24KLS8vIHR5cGUgcHJvdG9zIGFy
ZSBpbnN0YWxsZWQuCi12b2lkIEFkZERlZmF1bHRQcm90b1BhdGhzKHZlY3RvcjxwYWlyPHN0cmlu
Zywgc3RyaW5nPiA+KiBwYXRocykgewotICAvLyBUT0RPKHhpYW9mZW5nKTogVGhlIGNvZGUgY3Vy
cmVudGx5IG9ubHkgY2hlY2tzIHJlbGF0aXZlIHBhdGhzIG9mIHdoZXJlCi0gIC8vIHRoZSBwcm90
b2MgYmluYXJ5IGlzIGluc3RhbGxlZC4gV2UgcHJvYmFibHkgc2hvdWxkIG1ha2UgaXQgaGFuZGxl
IG1vcmUKLSAgLy8gY2FzZXMgdGhhbiB0aGF0LgotICBzdHJpbmcgcGF0aDsKLSAgaWYgKCFHZXRQ
cm90b2NBYnNvbHV0ZVBhdGgoJnBhdGgpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIC8vIFN0cmlw
IHRoZSBiaW5hcnkgbmFtZS4KLSAgc2l6ZV90IHBvcyA9IHBhdGguZmluZF9sYXN0X29mKCIvXFwi
KTsKLSAgaWYgKHBvcyA9PSBzdHJpbmc6Om5wb3MgfHwgcG9zID09IDApIHsKLSAgICByZXR1cm47
Ci0gIH0KLSAgcGF0aCA9IHBhdGguc3Vic3RyKDAsIHBvcyk7Ci0gIC8vIENoZWNrIHRoZSBiaW5h
cnkncyBkaXJlY3RvcnkuCi0gIGlmIChJc0luc3RhbGxlZFByb3RvUGF0aChwYXRoKSkgewotICAg
IHBhdGhzLT5wdXNoX2JhY2socGFpcjxzdHJpbmcsIHN0cmluZz4oIiIsIHBhdGgpKTsKLSAgICBy
ZXR1cm47Ci0gIH0KLSAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5jbHVkZSBzdWJkaXJlY3Rv
cnkuCi0gIGlmIChJc0luc3RhbGxlZFByb3RvUGF0aChwYXRoICsgIi9pbmNsdWRlIikpIHsKLSAg
ICBwYXRocy0+cHVzaF9iYWNrKHBhaXI8c3RyaW5nLCBzdHJpbmc+KCIiLCBwYXRoICsgIi9pbmNs
dWRlIikpOwotICAgIHJldHVybjsKLSAgfQotICAvLyBDaGVjayBpZiB0aGUgdXBwZXIgbGV2ZWwg
ZGlyZWN0b3J5IGhhcyBhbiAiaW5jbHVkZSIgc3ViZGlyZWN0b3J5LgotICBwb3MgPSBwYXRoLmZp
bmRfbGFzdF9vZigiL1xcIik7Ci0gIGlmIChwb3MgPT0gc3RyaW5nOjpucG9zIHx8IHBvcyA9PSAw
KSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIHBhdGggPSBwYXRoLnN1YnN0cigwLCBwb3MpOwotICBp
ZiAoSXNJbnN0YWxsZWRQcm90b1BhdGgocGF0aCArICIvaW5jbHVkZSIpKSB7Ci0gICAgcGF0aHMt
PnB1c2hfYmFjayhwYWlyPHN0cmluZywgc3RyaW5nPigiIiwgcGF0aCArICIvaW5jbHVkZSIpKTsK
LSAgICByZXR1cm47Ci0gIH0KLX0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyBBIE11bHRpRmlsZUVy
cm9yQ29sbGVjdG9yIHRoYXQgcHJpbnRzIGVycm9ycyB0byBzdGRlcnIuCi1jbGFzcyBDb21tYW5k
TGluZUludGVyZmFjZTo6RXJyb3JQcmludGVyIDogcHVibGljIE11bHRpRmlsZUVycm9yQ29sbGVj
dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBp
bzo6RXJyb3JDb2xsZWN0b3IgewotIHB1YmxpYzoKLSAgRXJyb3JQcmludGVyKEVycm9yRm9ybWF0
IGZvcm1hdCwgRGlza1NvdXJjZVRyZWUgKnRyZWUgPSBOVUxMKQotICAgIDogZm9ybWF0Xyhmb3Jt
YXQpLCB0cmVlXyh0cmVlKSB7fQotICB+RXJyb3JQcmludGVyKCkge30KLQotICAvLyBpbXBsZW1l
bnRzIE11bHRpRmlsZUVycm9yQ29sbGVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICB2b2lkIEFkZEVycm9yKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGludCBsaW5lLCBpbnQg
Y29sdW1uLAotICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbWVzc2FnZSkgewotICAgIEFk
ZEVycm9yT3JXYXJuaW5nKGZpbGVuYW1lLCBsaW5lLCBjb2x1bW4sIG1lc3NhZ2UsICJlcnJvciIs
IHN0ZDo6Y2Vycik7Ci0gIH0KLQotICB2b2lkIEFkZFdhcm5pbmcoY29uc3Qgc3RyaW5nJiBmaWxl
bmFtZSwgaW50IGxpbmUsIGludCBjb2x1bW4sCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmcmIG1lc3NhZ2UpIHsKLSAgICBBZGRFcnJvck9yV2FybmluZyhmaWxlbmFtZSwgbGluZSwgY29s
dW1uLCBtZXNzYWdlLCAid2FybmluZyIsIHN0ZDo6Y2xvZyk7Ci0gIH0KLQotICAvLyBpbXBsZW1l
bnRzIGlvOjpFcnJvckNvbGxlY3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICB2b2lkIEFkZEVycm9yKGludCBsaW5lLCBpbnQgY29sdW1uLCBjb25zdCBzdHJpbmcmIG1l
c3NhZ2UpIHsKLSAgICBBZGRFcnJvcigiaW5wdXQiLCBsaW5lLCBjb2x1bW4sIG1lc3NhZ2UpOwot
ICB9Ci0KLSAgdm9pZCBBZGRXYXJuaW5nKGludCBsaW5lLCBpbnQgY29sdW1uLCBjb25zdCBzdHJp
bmcmIG1lc3NhZ2UpIHsKLSAgICBBZGRFcnJvck9yV2FybmluZygiaW5wdXQiLCBsaW5lLCBjb2x1
bW4sIG1lc3NhZ2UsICJ3YXJuaW5nIiwgc3RkOjpjbG9nKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAg
dm9pZCBBZGRFcnJvck9yV2FybmluZygKLSAgICAgIGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGlu
dCBsaW5lLCBpbnQgY29sdW1uLAotICAgICAgY29uc3Qgc3RyaW5nJiBtZXNzYWdlLCBjb25zdCBz
dHJpbmcmIHR5cGUsIG9zdHJlYW0mIG91dCkgewotICAgIC8vIFByaW50IGZ1bGwgcGF0aCB3aGVu
IHJ1bm5pbmcgdW5kZXIgTVNWUwotICAgIHN0cmluZyBkZmlsZTsKLSAgICBpZiAoZm9ybWF0XyA9
PSBDb21tYW5kTGluZUludGVyZmFjZTo6RVJST1JfRk9STUFUX01TVlMgJiYKLSAgICAgICAgdHJl
ZV8gIT0gTlVMTCAmJgotICAgICAgICB0cmVlXy0+VmlydHVhbEZpbGVUb0Rpc2tGaWxlKGZpbGVu
YW1lLCAmZGZpbGUpKSB7Ci0gICAgICBvdXQgPDwgZGZpbGU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IG91dCA8PCBmaWxlbmFtZTsKLSAgICB9Ci0KLSAgICAvLyBVc2VycyB0eXBpY2FsbHkgZXhwZWN0
IDEtYmFzZWQgbGluZS9jb2x1bW4gbnVtYmVycywgc28gd2UgYWRkIDEKLSAgICAvLyB0byBlYWNo
IGhlcmUuCi0gICAgaWYgKGxpbmUgIT0gLTEpIHsKLSAgICAgIC8vIEFsbG93IGZvciBib3RoIEdD
Qy0gYW5kIFZpc3VhbC1TdHVkaW8tY29tcGF0aWJsZSBvdXRwdXQuCi0gICAgICBzd2l0Y2ggKGZv
cm1hdF8pIHsKLSAgICAgICAgY2FzZSBDb21tYW5kTGluZUludGVyZmFjZTo6RVJST1JfRk9STUFU
X0dDQzoKLSAgICAgICAgICBvdXQgPDwgIjoiIDw8IChsaW5lICsgMSkgPDwgIjoiIDw8IChjb2x1
bW4gKyAxKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21tYW5kTGluZUludGVy
ZmFjZTo6RVJST1JfRk9STUFUX01TVlM6Ci0gICAgICAgICAgb3V0IDw8ICIoIiA8PCAobGluZSAr
IDEpIDw8ICIpIDogIgotICAgICAgICAgICAgICA8PCB0eXBlIDw8ICIgaW4gY29sdW1uPSIgPDwg
KGNvbHVtbiArIDEpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIGlm
ICh0eXBlID09ICJ3YXJuaW5nIikgewotICAgICAgb3V0IDw8ICI6IHdhcm5pbmc6ICIgPDwgbWVz
c2FnZSA8PCBzdGQ6OmVuZGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG91dCA8PCAiOiAiIDw8IG1l
c3NhZ2UgPDwgc3RkOjplbmRsOwotICAgIH0KLSAgfQotCi0gIGNvbnN0IEVycm9yRm9ybWF0IGZv
cm1hdF87Ci0gIERpc2tTb3VyY2VUcmVlICp0cmVlXzsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
Ly8gQSBHZW5lcmF0b3JDb250ZXh0IGltcGxlbWVudGF0aW9uIHRoYXQgYnVmZmVycyBmaWxlcyBp
biBtZW1vcnksIHRoZW4gZHVtcHMKLS8vIHRoZW0gYWxsIHRvIGRpc2sgb24gZGVtYW5kLgotY2xh
c3MgQ29tbWFuZExpbmVJbnRlcmZhY2U6OkdlbmVyYXRvckNvbnRleHRJbXBsIDogcHVibGljIEdl
bmVyYXRvckNvbnRleHQgewotIHB1YmxpYzoKLSAgR2VuZXJhdG9yQ29udGV4dEltcGwoY29uc3Qg
dmVjdG9yPGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4mIHBhcnNlZF9maWxlcyk7Ci0gIH5HZW5lcmF0
b3JDb250ZXh0SW1wbCgpOwotCi0gIC8vIFdyaXRlIGFsbCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5
IHRvIGRpc2sgYXQgdGhlIGdpdmVuIG91dHB1dCBsb2NhdGlvbiwKLSAgLy8gd2hpY2ggbXVzdCBl
bmQgaW4gYSAnLycuCi0gIGJvb2wgV3JpdGVBbGxUb0Rpc2soY29uc3Qgc3RyaW5nJiBwcmVmaXgp
OwotCi0gIC8vIFdyaXRlIHRoZSBjb250ZW50cyBvZiB0aGlzIGRpcmVjdG9yeSB0byBhIFpJUC1m
b3JtYXQgYXJjaGl2ZSB3aXRoIHRoZQotICAvLyBnaXZlbiBuYW1lLgotICBib29sIFdyaXRlQWxs
VG9aaXAoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSk7Ci0KLSAgLy8gQWRkIGEgYm9pbGVycGxhdGUg
TUVUQS1JTkYvTUFOSUZFU1QuTUYgZmlsZSBhcyByZXF1aXJlZCBieSB0aGUgSmF2YSBKQVIKLSAg
Ly8gZm9ybWF0LCB1bmxlc3Mgb25lIGhhcyBhbHJlYWR5IGJlZW4gd3JpdHRlbi4KLSAgdm9pZCBB
ZGRKYXJNYW5pZmVzdCgpOwotCi0gIC8vIEdldCBuYW1lIG9mIGFsbCBvdXRwdXQgZmlsZXMuCi0g
IHZvaWQgR2V0T3V0cHV0RmlsZW5hbWVzKHZlY3RvcjxzdHJpbmc+KiBvdXRwdXRfZmlsZW5hbWVz
KTsKLQotICAvLyBpbXBsZW1lbnRzIEdlbmVyYXRvckNvbnRleHQgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgaW86Olplcm9Db3B5T3V0cHV0U3RyZWFtKiBPcGVuKGNv
bnN0IHN0cmluZyYgZmlsZW5hbWUpOwotICBpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0qIE9wZW5G
b3JBcHBlbmQoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSk7Ci0gIGlvOjpaZXJvQ29weU91dHB1dFN0
cmVhbSogT3BlbkZvckluc2VydCgKLSAgICAgIGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IHN0cmluZyYgaW5zZXJ0aW9uX3BvaW50KTsKLSAgdm9pZCBMaXN0UGFyc2VkRmlsZXModmVjdG9y
PGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4qIG91dHB1dCkgewotICAgICpvdXRwdXQgPSBwYXJzZWRf
ZmlsZXNfOwotICB9Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgTWVtb3J5T3V0cHV0U3Ry
ZWFtOwotCi0gIC8vIG1hcCBpbnN0ZWFkIG9mIGhhc2hfbWFwIHNvIHRoYXQgZmlsZXMgYXJlIHdy
aXR0ZW4gaW4gb3JkZXIgKGdvb2Qgd2hlbgotICAvLyB3cml0aW5nIHppcHMpLgotICBtYXA8c3Ry
aW5nLCBzdHJpbmcqPiBmaWxlc187Ci0gIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWxlRGVzY3JpcHRv
cio+JiBwYXJzZWRfZmlsZXNfOwotICBib29sIGhhZF9lcnJvcl87Ci19OwotCi1jbGFzcyBDb21t
YW5kTGluZUludGVyZmFjZTo6TWVtb3J5T3V0cHV0U3RyZWFtCi0gICAgOiBwdWJsaWMgaW86Olpl
cm9Db3B5T3V0cHV0U3RyZWFtIHsKLSBwdWJsaWM6Ci0gIE1lbW9yeU91dHB1dFN0cmVhbShHZW5l
cmF0b3JDb250ZXh0SW1wbCogZGlyZWN0b3J5LCBjb25zdCBzdHJpbmcmIGZpbGVuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRfbW9kZSk7Ci0gIE1lbW9yeU91dHB1dFN0cmVh
bShHZW5lcmF0b3JDb250ZXh0SW1wbCogZGlyZWN0b3J5LCBjb25zdCBzdHJpbmcmIGZpbGVuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBpbnNlcnRpb25fcG9pbnQpOwot
ICB2aXJ0dWFsIH5NZW1vcnlPdXRwdXRTdHJlYW0oKTsKLQotICAvLyBpbXBsZW1lbnRzIFplcm9D
b3B5T3V0cHV0U3RyZWFtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2aXJ0
dWFsIGJvb2wgTmV4dCh2b2lkKiogZGF0YSwgaW50KiBzaXplKSB7IHJldHVybiBpbm5lcl8tPk5l
eHQoZGF0YSwgc2l6ZSk7IH0KLSAgdmlydHVhbCB2b2lkIEJhY2tVcChpbnQgY291bnQpICAgICAg
ICAgICAgeyAgICAgICAgaW5uZXJfLT5CYWNrVXAoY291bnQpOyAgICB9Ci0gIHZpcnR1YWwgaW50
NjQgQnl0ZUNvdW50KCkgY29uc3QgICAgICAgICAgIHsgcmV0dXJuIGlubmVyXy0+Qnl0ZUNvdW50
KCk7ICAgICAgfQotCi0gcHJpdmF0ZToKLSAgLy8gV2hlcmUgdG8gaW5zZXJ0IHRoZSBzdHJpbmcg
d2hlbiBpdCdzIGRvbmUuCi0gIEdlbmVyYXRvckNvbnRleHRJbXBsKiBkaXJlY3RvcnlfOwotICBz
dHJpbmcgZmlsZW5hbWVfOwotICBzdHJpbmcgaW5zZXJ0aW9uX3BvaW50XzsKLQotICAvLyBUaGUg
c3RyaW5nIHdlJ3JlIGJ1aWxkaW5nLgotICBzdHJpbmcgZGF0YV87Ci0KLSAgLy8gV2hldGhlciB3
ZSBzaG91bGQgYXBwZW5kIHRoZSBvdXRwdXQgc3RyZWFtIHRvIHRoZSBleGlzdGluZyBmaWxlLgot
ICBib29sIGFwcGVuZF9tb2RlXzsKLQotICAvLyBTdHJpbmdPdXRwdXRTdHJlYW0gd3JpdGluZyB0
byBkYXRhXy4KLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxpbzo6U3RyaW5nT3V0cHV0
U3RyZWFtPiBpbm5lcl87Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvbW1hbmRMaW5lSW50ZXJm
YWNlOjpHZW5lcmF0b3JDb250ZXh0SW1wbDo6R2VuZXJhdG9yQ29udGV4dEltcGwoCi0gICAgY29u
c3QgdmVjdG9yPGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4mIHBhcnNlZF9maWxlcykKLSAgICA6IHBh
cnNlZF9maWxlc18ocGFyc2VkX2ZpbGVzKSwKLSAgICAgIGhhZF9lcnJvcl8oZmFsc2UpIHsKLX0K
LQotQ29tbWFuZExpbmVJbnRlcmZhY2U6OkdlbmVyYXRvckNvbnRleHRJbXBsOjp+R2VuZXJhdG9y
Q29udGV4dEltcGwoKSB7Ci0gIFNUTERlbGV0ZVZhbHVlcygmZmlsZXNfKTsKLX0KLQotYm9vbCBD
b21tYW5kTGluZUludGVyZmFjZTo6R2VuZXJhdG9yQ29udGV4dEltcGw6OldyaXRlQWxsVG9EaXNr
KAotICAgIGNvbnN0IHN0cmluZyYgcHJlZml4KSB7Ci0gIGlmIChoYWRfZXJyb3JfKSB7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKCFWZXJpZnlEaXJlY3RvcnlFeGlzdHMocHJlZml4
KSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZvciAobWFwPHN0cmluZywgc3RyaW5n
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBmaWxlc18uYmVnaW4oKTsKLSAgICAgICBpdGVyICE9
IGZpbGVzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgY29uc3Qgc3RyaW5nJiByZWxhdGl2ZV9maWxl
bmFtZSA9IGl0ZXItPmZpcnN0OwotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBpdGVyLT5zZWNvbmQt
PmRhdGEoKTsKLSAgICBpbnQgc2l6ZSA9IGl0ZXItPnNlY29uZC0+c2l6ZSgpOwotCi0gICAgaWYg
KCFUcnlDcmVhdGVQYXJlbnREaXJlY3RvcnkocHJlZml4LCByZWxhdGl2ZV9maWxlbmFtZSkpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc3RyaW5nIGZpbGVuYW1lID0gcHJlZml4
ICsgcmVsYXRpdmVfZmlsZW5hbWU7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIG91dHB1dCBmaWxlLgot
ICAgIGludCBmaWxlX2Rlc2NyaXB0b3I7Ci0gICAgZG8gewotICAgICAgZmlsZV9kZXNjcmlwdG9y
ID0KLSAgICAgICAgb3BlbihmaWxlbmFtZS5jX3N0cigpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBP
X1RSVU5DIHwgT19CSU5BUlksIDA2NjYpOwotICAgIH0gd2hpbGUgKGZpbGVfZGVzY3JpcHRvciA8
IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotCi0gICAgaWYgKGZpbGVfZGVzY3JpcHRvciA8IDApIHsK
LSAgICAgIGludCBlcnJvciA9IGVycm5vOwotICAgICAgc3RkOjpjZXJyIDw8IGZpbGVuYW1lIDw8
ICI6ICIgPDwgc3RyZXJyb3IoZXJyb3IpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIFdyaXRlIHRoZSBmaWxlLgotICAgIHdoaWxlIChzaXplID4gMCkgewotICAgICAgaW50
IHdyaXRlX3Jlc3VsdDsKLSAgICAgIGRvIHsKLSAgICAgICAgd3JpdGVfcmVzdWx0ID0gd3JpdGUo
ZmlsZV9kZXNjcmlwdG9yLCBkYXRhLCBzaXplKTsKLSAgICAgIH0gd2hpbGUgKHdyaXRlX3Jlc3Vs
dCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotCi0gICAgICBpZiAod3JpdGVfcmVzdWx0IDw9IDAp
IHsKLSAgICAgICAgLy8gV3JpdGUgZXJyb3IuCi0KLSAgICAgICAgLy8gRklYTUUoa2VudG9uKTog
IEFjY29yZGluZyB0byB0aGUgbWFuIHBhZ2UsIGlmIHdyaXRlKCkgcmV0dXJucyB6ZXJvLAotICAg
ICAgICAvLyAgIHRoZXJlIHdhcyBubyBlcnJvcjsgd3JpdGUoKSBzaW1wbHkgZGlkIG5vdCB3cml0
ZSBhbnl0aGluZy4gIEl0J3MKLSAgICAgICAgLy8gICB1bmNsZWFyIHVuZGVyIHdoYXQgY2lyY3Vt
c3RhbmNlcyB0aGlzIG1pZ2h0IGhhcHBlbiwgYnV0IHByZXN1bWFibHkKLSAgICAgICAgLy8gICBl
cnJubyB3b24ndCBiZSBzZXQgaW4gdGhpcyBjYXNlLiAgSSBhbSBjb25mdXNlZCBhcyB0byBob3cg
c3VjaCBhbgotICAgICAgICAvLyAgIGV2ZW50IHNob3VsZCBiZSBoYW5kbGVkLiAgRm9yIG5vdyBJ
J20gdHJlYXRpbmcgaXQgYXMgYW4gZXJyb3IsCi0gICAgICAgIC8vICAgc2luY2UgcmV0cnlpbmcg
c2VlbXMgbGlrZSBpdCBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuICBJCi0gICAgICAg
IC8vICAgc3VzcGVjdCB0aGlzIG5ldmVyIGFjdHVhbGx5IGhhcHBlbnMgYW55d2F5LgotCi0gICAg
ICAgIGlmICh3cml0ZV9yZXN1bHQgPCAwKSB7Ci0gICAgICAgICAgaW50IGVycm9yID0gZXJybm87
Ci0gICAgICAgICAgc3RkOjpjZXJyIDw8IGZpbGVuYW1lIDw8ICI6IHdyaXRlOiAiIDw8IHN0cmVy
cm9yKGVycm9yKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdGQ6OmNlcnIgPDwgZmls
ZW5hbWUgPDwgIjogd3JpdGUoKSByZXR1cm5lZCB6ZXJvPyIgPDwgc3RkOjplbmRsOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgZGF0YSArPSB3cml0
ZV9yZXN1bHQ7Ci0gICAgICBzaXplIC09IHdyaXRlX3Jlc3VsdDsKLSAgICB9Ci0KLSAgICBpZiAo
Y2xvc2UoZmlsZV9kZXNjcmlwdG9yKSAhPSAwKSB7Ci0gICAgICBpbnQgZXJyb3IgPSBlcnJubzsK
LSAgICAgIHN0ZDo6Y2VyciA8PCBmaWxlbmFtZSA8PCAiOiBjbG9zZTogIiA8PCBzdHJlcnJvcihl
cnJvcik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQ29tbWFuZExpbmVJbnRlcmZhY2U6OkdlbmVyYXRvckNvbnRleHRJbXBsOjpX
cml0ZUFsbFRvWmlwKAotICAgIGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsKLSAgaWYgKGhhZF9l
cnJvcl8pIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBDcmVhdGUgdGhlIG91dHB1
dCBmaWxlLgotICBpbnQgZmlsZV9kZXNjcmlwdG9yOwotICBkbyB7Ci0gICAgZmlsZV9kZXNjcmlw
dG9yID0KLSAgICAgIG9wZW4oZmlsZW5hbWUuY19zdHIoKSwgT19XUk9OTFkgfCBPX0NSRUFUIHwg
T19UUlVOQyB8IE9fQklOQVJZLCAwNjY2KTsKLSAgfSB3aGlsZSAoZmlsZV9kZXNjcmlwdG9yIDwg
MCAmJiBlcnJubyA9PSBFSU5UUik7Ci0KLSAgaWYgKGZpbGVfZGVzY3JpcHRvciA8IDApIHsKLSAg
ICBpbnQgZXJyb3IgPSBlcnJubzsKLSAgICBzdGQ6OmNlcnIgPDwgZmlsZW5hbWUgPDwgIjogIiA8
PCBzdHJlcnJvcihlcnJvcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gQ3JlYXRl
IHRoZSBaaXBXcml0ZXIKLSAgaW86OkZpbGVPdXRwdXRTdHJlYW0gc3RyZWFtKGZpbGVfZGVzY3Jp
cHRvcik7Ci0gIFppcFdyaXRlciB6aXBfd3JpdGVyKCZzdHJlYW0pOwotCi0gIGZvciAobWFwPHN0
cmluZywgc3RyaW5nKj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBmaWxlc18uYmVnaW4oKTsKLSAg
ICAgICBpdGVyICE9IGZpbGVzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgemlwX3dyaXRlci5Xcml0
ZShpdGVyLT5maXJzdCwgKml0ZXItPnNlY29uZCk7Ci0gIH0KLQotICB6aXBfd3JpdGVyLldyaXRl
RGlyZWN0b3J5KCk7Ci0KLSAgaWYgKHN0cmVhbS5HZXRFcnJubygpICE9IDApIHsKLSAgICBzdGQ6
OmNlcnIgPDwgZmlsZW5hbWUgPDwgIjogIiA8PCBzdHJlcnJvcihzdHJlYW0uR2V0RXJybm8oKSkg
PDwgc3RkOjplbmRsOwotICB9Ci0KLSAgaWYgKCFzdHJlYW0uQ2xvc2UoKSkgewotICAgIHN0ZDo6
Y2VyciA8PCBmaWxlbmFtZSA8PCAiOiAiIDw8IHN0cmVycm9yKHN0cmVhbS5HZXRFcnJubygpKSA8
PCBzdGQ6OmVuZGw7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb21tYW5kTGlu
ZUludGVyZmFjZTo6R2VuZXJhdG9yQ29udGV4dEltcGw6OkFkZEphck1hbmlmZXN0KCkgewotICBz
dHJpbmcqKiBtYXBfc2xvdCA9ICZmaWxlc19bIk1FVEEtSU5GL01BTklGRVNULk1GIl07Ci0gIGlm
ICgqbWFwX3Nsb3QgPT0gTlVMTCkgewotICAgICptYXBfc2xvdCA9IG5ldyBzdHJpbmcoCi0gICAg
ICAgICJNYW5pZmVzdC1WZXJzaW9uOiAxLjBcbiIKLSAgICAgICAgIkNyZWF0ZWQtQnk6IDEuNi4w
IChwcm90b2MpXG4iCi0gICAgICAgICJcbiIpOwotICB9Ci19Ci0KLXZvaWQgQ29tbWFuZExpbmVJ
bnRlcmZhY2U6OkdlbmVyYXRvckNvbnRleHRJbXBsOjpHZXRPdXRwdXRGaWxlbmFtZXMoCi0gICAg
dmVjdG9yPHN0cmluZz4qIG91dHB1dF9maWxlbmFtZXMpIHsKLSAgZm9yIChtYXA8c3RyaW5nLCBz
dHJpbmcqPjo6aXRlcmF0b3IgaXRlciA9IGZpbGVzXy5iZWdpbigpOwotICAgICAgIGl0ZXIgIT0g
ZmlsZXNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICBvdXRwdXRfZmlsZW5hbWVzLT5wdXNoX2JhY2so
aXRlci0+Zmlyc3QpOwotICB9Ci19Ci0KLWlvOjpaZXJvQ29weU91dHB1dFN0cmVhbSogQ29tbWFu
ZExpbmVJbnRlcmZhY2U6OkdlbmVyYXRvckNvbnRleHRJbXBsOjpPcGVuKAotICAgIGNvbnN0IHN0
cmluZyYgZmlsZW5hbWUpIHsKLSAgcmV0dXJuIG5ldyBNZW1vcnlPdXRwdXRTdHJlYW0odGhpcywg
ZmlsZW5hbWUsIGZhbHNlKTsKLX0KLQotaW86Olplcm9Db3B5T3V0cHV0U3RyZWFtKgotQ29tbWFu
ZExpbmVJbnRlcmZhY2U6OkdlbmVyYXRvckNvbnRleHRJbXBsOjpPcGVuRm9yQXBwZW5kKAotICAg
IGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsKLSAgcmV0dXJuIG5ldyBNZW1vcnlPdXRwdXRTdHJl
YW0odGhpcywgZmlsZW5hbWUsIHRydWUpOwotfQotCi1pbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0q
Ci1Db21tYW5kTGluZUludGVyZmFjZTo6R2VuZXJhdG9yQ29udGV4dEltcGw6Ok9wZW5Gb3JJbnNl
cnQoCi0gICAgY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qgc3RyaW5nJiBpbnNlcnRpb25f
cG9pbnQpIHsKLSAgcmV0dXJuIG5ldyBNZW1vcnlPdXRwdXRTdHJlYW0odGhpcywgZmlsZW5hbWUs
IGluc2VydGlvbl9wb2ludCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ29tbWFuZExpbmVJbnRl
cmZhY2U6Ok1lbW9yeU91dHB1dFN0cmVhbTo6TWVtb3J5T3V0cHV0U3RyZWFtKAotICAgIEdlbmVy
YXRvckNvbnRleHRJbXBsKiBkaXJlY3RvcnksIGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGJvb2wg
YXBwZW5kX21vZGUpCi0gICAgOiBkaXJlY3RvcnlfKGRpcmVjdG9yeSksCi0gICAgICBmaWxlbmFt
ZV8oZmlsZW5hbWUpLAotICAgICAgYXBwZW5kX21vZGVfKGFwcGVuZF9tb2RlKSwKLSAgICAgIGlu
bmVyXyhuZXcgaW86OlN0cmluZ091dHB1dFN0cmVhbSgmZGF0YV8pKSB7Ci19Ci0KLUNvbW1hbmRM
aW5lSW50ZXJmYWNlOjpNZW1vcnlPdXRwdXRTdHJlYW06Ok1lbW9yeU91dHB1dFN0cmVhbSgKLSAg
ICBHZW5lcmF0b3JDb250ZXh0SW1wbCogZGlyZWN0b3J5LCBjb25zdCBzdHJpbmcmIGZpbGVuYW1l
LAotICAgIGNvbnN0IHN0cmluZyYgaW5zZXJ0aW9uX3BvaW50KQotICAgIDogZGlyZWN0b3J5Xyhk
aXJlY3RvcnkpLAotICAgICAgZmlsZW5hbWVfKGZpbGVuYW1lKSwKLSAgICAgIGluc2VydGlvbl9w
b2ludF8oaW5zZXJ0aW9uX3BvaW50KSwKLSAgICAgIGlubmVyXyhuZXcgaW86OlN0cmluZ091dHB1
dFN0cmVhbSgmZGF0YV8pKSB7Ci19Ci0KLUNvbW1hbmRMaW5lSW50ZXJmYWNlOjpNZW1vcnlPdXRw
dXRTdHJlYW06On5NZW1vcnlPdXRwdXRTdHJlYW0oKSB7Ci0gIC8vIE1ha2Ugc3VyZSBhbGwgZGF0
YSBoYXMgYmVlbiB3cml0dGVuLgotICBpbm5lcl8ucmVzZXQoKTsKLQotICAvLyBJbnNlcnQgaW50
byB0aGUgZGlyZWN0b3J5LgotICBzdHJpbmcqKiBtYXBfc2xvdCA9ICZkaXJlY3RvcnlfLT5maWxl
c19bZmlsZW5hbWVfXTsKLQotICBpZiAoaW5zZXJ0aW9uX3BvaW50Xy5lbXB0eSgpKSB7Ci0gICAg
Ly8gVGhpcyB3YXMganVzdCBhIHJlZ3VsYXIgT3BlbigpLgotICAgIGlmICgqbWFwX3Nsb3QgIT0g
TlVMTCkgewotICAgICAgaWYgKGFwcGVuZF9tb2RlXykgewotICAgICAgICAoKm1hcF9zbG90KS0+
YXBwZW5kKGRhdGFfKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8PCBmaWxl
bmFtZV8gPDwgIjogVHJpZWQgdG8gd3JpdGUgdGhlIHNhbWUgZmlsZSB0d2ljZS4iCi0gICAgICAg
ICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIGRpcmVjdG9yeV8tPmhhZF9lcnJvcl8g
PSB0cnVlOwotICAgICAgfQotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICptYXBfc2xvdCA9
IG5ldyBzdHJpbmc7Ci0gICAgKCptYXBfc2xvdCktPnN3YXAoZGF0YV8pOwotICB9IGVsc2Ugewot
ICAgIC8vIFRoaXMgd2FzIGFuIE9wZW5Gb3JJbnNlcnQoKS4KLQotICAgIC8vIElmIHRoZSBkYXRh
IGRvZW5zJ3QgZW5kIHdpdGggYSBjbGVhbiBsaW5lIGJyZWFrLCBhZGQgb25lLgotICAgIGlmICgh
ZGF0YV8uZW1wdHkoKSAmJiBkYXRhX1tkYXRhXy5zaXplKCkgLSAxXSAhPSAnXG4nKSB7Ci0gICAg
ICBkYXRhXy5wdXNoX2JhY2soJ1xuJyk7Ci0gICAgfQotCi0gICAgLy8gRmluZCB0aGUgZmlsZSB3
ZSBhcmUgZ29pbmcgdG8gaW5zZXJ0IGludG8uCi0gICAgaWYgKCptYXBfc2xvdCA9PSBOVUxMKSB7
Ci0gICAgICBzdGQ6OmNlcnIgPDwgZmlsZW5hbWVfCi0gICAgICAgICAgICAgICAgPDwgIjogVHJp
ZWQgdG8gaW5zZXJ0IGludG8gZmlsZSB0aGF0IGRvZXNuJ3QgZXhpc3QuIgotICAgICAgICAgICAg
ICAgIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIGRpcmVjdG9yeV8tPmhhZF9lcnJvcl8gPSB0cnVlOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdHJpbmcqIHRhcmdldCA9ICptYXBfc2xvdDsKLQot
ICAgIC8vIEZpbmQgdGhlIGluc2VydGlvbiBwb2ludC4KLSAgICBzdHJpbmcgbWFnaWNfc3RyaW5n
ID0gc3RyaW5nczo6U3Vic3RpdHV0ZSgKLSAgICAgICAgIkBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dCgkMCkiLCBpbnNlcnRpb25fcG9pbnRfKTsKLSAgICBzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSB0
YXJnZXQtPmZpbmQobWFnaWNfc3RyaW5nKTsKLQotICAgIGlmIChwb3MgPT0gc3RyaW5nOjpucG9z
KSB7Ci0gICAgICBzdGQ6OmNlcnIgPDwgZmlsZW5hbWVfIDw8ICI6IGluc2VydGlvbiBwb2ludCBc
IiIgPDwgaW5zZXJ0aW9uX3BvaW50XwotICAgICAgICAgICAgICAgIDw8ICJcIiBub3QgZm91bmQu
IiA8PCBzdGQ6OmVuZGw7Ci0gICAgICBkaXJlY3RvcnlfLT5oYWRfZXJyb3JfID0gdHJ1ZTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTZWVrIGJhY2t3YXJkcyB0byB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBsaW5lLCB3aGljaCBpcyB3aGVyZSB3ZSB3aWxsCi0gICAgLy8gaW5zZXJ0IHRo
ZSBkYXRhLiAgTm90ZSB0aGF0IHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgcHVzaGluZyB0aGUgaW5z
ZXJ0aW9uCi0gICAgLy8gcG9pbnQgZG93biwgc28gdGhlIGRhdGEgaXMgaW5zZXJ0ZWQgYmVmb3Jl
IGl0LiAgVGhpcyBpcyBpbnRlbnRpb25hbAotICAgIC8vIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBt
dWx0aXBsZSBpbnNlcnRpb25zIGF0IHRoZSBzYW1lIHBvaW50IHdpbGwgZW5kCi0gICAgLy8gdXAg
aW4gdGhlIGV4cGVjdGVkIG9yZGVyIGluIHRoZSBmaW5hbCBvdXRwdXQuCi0gICAgcG9zID0gdGFy
Z2V0LT5maW5kX2xhc3Rfb2YoJ1xuJywgcG9zKTsKLSAgICBpZiAocG9zID09IHN0cmluZzo6bnBv
cykgewotICAgICAgLy8gSW5zZXJ0aW9uIHBvaW50IGlzIG9uIHRoZSBmaXJzdCBsaW5lLgotICAg
ICAgcG9zID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgLy8gQWR2YW5jZSB0byBjaGFyYWN0ZXIg
YWZ0ZXIgJ1xuJy4KLSAgICAgICsrcG9zOwotICAgIH0KLQotICAgIC8vIEV4dHJhY3QgaW5kZW50
LgotICAgIHN0cmluZyBpbmRlbnRfKCp0YXJnZXQsIHBvcywgdGFyZ2V0LT5maW5kX2ZpcnN0X25v
dF9vZigiIFx0IiwgcG9zKSAtIHBvcyk7Ci0KLSAgICBpZiAoaW5kZW50Xy5lbXB0eSgpKSB7Ci0g
ICAgICAvLyBObyBpbmRlbnQuICBUaGlzIG1ha2VzIHRoaW5ncyBlYXNpZXIuCi0gICAgICB0YXJn
ZXQtPmluc2VydChwb3MsIGRhdGFfKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gQ2FsY3VsYXRl
IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQuCi0gICAgICBpbnQgaW5kZW50X3NpemUgPSAwOwotICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhXy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAo
ZGF0YV9baV0gPT0gJ1xuJykgaW5kZW50X3NpemUgKz0gaW5kZW50Xy5zaXplKCk7Ci0gICAgICB9
Ci0KLSAgICAgIC8vIE1ha2UgYSBob2xlIGZvciBpdC4KLSAgICAgIHRhcmdldC0+aW5zZXJ0KHBv
cywgZGF0YV8uc2l6ZSgpICsgaW5kZW50X3NpemUsICdcMCcpOwotCi0gICAgICAvLyBOb3cgY29w
eSBpbiB0aGUgZGF0YS4KLSAgICAgIHN0cmluZzo6c2l6ZV90eXBlIGRhdGFfcG9zID0gMDsKLSAg
ICAgIGNoYXIqIHRhcmdldF9wdHIgPSBzdHJpbmdfYXNfYXJyYXkodGFyZ2V0KSArIHBvczsKLSAg
ICAgIHdoaWxlIChkYXRhX3BvcyA8IGRhdGFfLnNpemUoKSkgewotICAgICAgICAvLyBDb3B5IGlu
ZGVudC4KLSAgICAgICAgbWVtY3B5KHRhcmdldF9wdHIsIGluZGVudF8uZGF0YSgpLCBpbmRlbnRf
LnNpemUoKSk7Ci0gICAgICAgIHRhcmdldF9wdHIgKz0gaW5kZW50Xy5zaXplKCk7Ci0KLSAgICAg
ICAgLy8gQ29weSBsaW5lIGZyb20gZGF0YV8uCi0gICAgICAgIC8vIFdlIGFscmVhZHkgZ3VhcmFu
dGVlZCB0aGF0IGRhdGFfIGVuZHMgd2l0aCBhIG5ld2xpbmUgKGFib3ZlKSwgc28gdGhpcwotICAg
ICAgICAvLyBzZWFyY2ggY2FuJ3QgZmFpbC4KLSAgICAgICAgc3RyaW5nOjpzaXplX3R5cGUgbGlu
ZV9sZW5ndGggPQotICAgICAgICAgICAgZGF0YV8uZmluZF9maXJzdF9vZignXG4nLCBkYXRhX3Bv
cykgKyAxIC0gZGF0YV9wb3M7Ci0gICAgICAgIG1lbWNweSh0YXJnZXRfcHRyLCBkYXRhXy5kYXRh
KCkgKyBkYXRhX3BvcywgbGluZV9sZW5ndGgpOwotICAgICAgICB0YXJnZXRfcHRyICs9IGxpbmVf
bGVuZ3RoOwotICAgICAgICBkYXRhX3BvcyArPSBsaW5lX2xlbmd0aDsKLSAgICAgIH0KLQotICAg
ICAgR09PR0xFX0NIRUNLX0VRKHRhcmdldF9wdHIsCi0gICAgICAgICAgc3RyaW5nX2FzX2FycmF5
KHRhcmdldCkgKyBwb3MgKyBkYXRhXy5zaXplKCkgKyBpbmRlbnRfc2l6ZSk7Ci0gICAgfQotICB9
Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotQ29tbWFuZExpbmVJbnRlcmZhY2U6OkNvbW1hbmRMaW5l
SW50ZXJmYWNlKCkKLSAgOiBtb2RlXyhNT0RFX0NPTVBJTEUpLAotICAgIHByaW50X21vZGVfKFBS
SU5UX05PTkUpLAotICAgIGVycm9yX2Zvcm1hdF8oRVJST1JfRk9STUFUX0dDQyksCi0gICAgaW1w
b3J0c19pbl9kZXNjcmlwdG9yX3NldF8oZmFsc2UpLAotICAgIHNvdXJjZV9pbmZvX2luX2Rlc2Ny
aXB0b3Jfc2V0XyhmYWxzZSksCi0gICAgZGlzYWxsb3dfc2VydmljZXNfKGZhbHNlKSwKLSAgICBp
bnB1dHNfYXJlX3Byb3RvX3BhdGhfcmVsYXRpdmVfKGZhbHNlKSB7fQotQ29tbWFuZExpbmVJbnRl
cmZhY2U6On5Db21tYW5kTGluZUludGVyZmFjZSgpIHt9Ci0KLXZvaWQgQ29tbWFuZExpbmVJbnRl
cmZhY2U6OlJlZ2lzdGVyR2VuZXJhdG9yKGNvbnN0IHN0cmluZyYgZmxhZ19uYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUdlbmVyYXRvciogZ2Vu
ZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RyaW5nJiBoZWxwX3RleHQpIHsKLSAgR2VuZXJhdG9ySW5mbyBpbmZvOwotICBpbmZvLmZs
YWdfbmFtZSA9IGZsYWdfbmFtZTsKLSAgaW5mby5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0gIGlu
Zm8uaGVscF90ZXh0ID0gaGVscF90ZXh0OwotICBnZW5lcmF0b3JzX2J5X2ZsYWdfbmFtZV9bZmxh
Z19uYW1lXSA9IGluZm87Ci19Ci0KLXZvaWQgQ29tbWFuZExpbmVJbnRlcmZhY2U6OlJlZ2lzdGVy
R2VuZXJhdG9yKGNvbnN0IHN0cmluZyYgZmxhZ19uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBvcHRpb25fZmxhZ19uYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUdlbmVyYXRv
ciogZ2VuZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RyaW5nJiBoZWxwX3RleHQpIHsKLSAgR2VuZXJhdG9ySW5mbyBpbmZvOwotICBp
bmZvLmZsYWdfbmFtZSA9IGZsYWdfbmFtZTsKLSAgaW5mby5vcHRpb25fZmxhZ19uYW1lID0gb3B0
aW9uX2ZsYWdfbmFtZTsKLSAgaW5mby5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0gIGluZm8uaGVs
cF90ZXh0ID0gaGVscF90ZXh0OwotICBnZW5lcmF0b3JzX2J5X2ZsYWdfbmFtZV9bZmxhZ19uYW1l
XSA9IGluZm87Ci0gIGdlbmVyYXRvcnNfYnlfb3B0aW9uX25hbWVfW29wdGlvbl9mbGFnX25hbWVd
ID0gaW5mbzsKLX0KLQotdm9pZCBDb21tYW5kTGluZUludGVyZmFjZTo6QWxsb3dQbHVnaW5zKGNv
bnN0IHN0cmluZyYgZXhlX25hbWVfcHJlZml4KSB7Ci0gIHBsdWdpbl9wcmVmaXhfID0gZXhlX25h
bWVfcHJlZml4OwotfQotCi1pbnQgQ29tbWFuZExpbmVJbnRlcmZhY2U6OlJ1bihpbnQgYXJnYywg
Y29uc3QgY2hhciogY29uc3QgYXJndltdKSB7Ci0gIENsZWFyKCk7Ci0gIHN3aXRjaCAoUGFyc2VB
cmd1bWVudHMoYXJnYywgYXJndikpIHsKLSAgICBjYXNlIFBBUlNFX0FSR1VNRU5UX0RPTkVfQU5E
X0VYSVQ6Ci0gICAgICByZXR1cm4gMDsKLSAgICBjYXNlIFBBUlNFX0FSR1VNRU5UX0ZBSUw6Ci0g
ICAgICByZXR1cm4gMTsKLSAgICBjYXNlIFBBUlNFX0FSR1VNRU5UX0RPTkVfQU5EX0NPTlRJTlVF
OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBBZGREZWZhdWx0UHJvdG9QYXRocygmcHJvdG9fcGF0
aF8pOwotCi0gIC8vIFNldCB1cCB0aGUgc291cmNlIHRyZWUuCi0gIERpc2tTb3VyY2VUcmVlIHNv
dXJjZV90cmVlOwotICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvX3BhdGhfLnNpemUoKTsgaSsr
KSB7Ci0gICAgc291cmNlX3RyZWUuTWFwUGF0aChwcm90b19wYXRoX1tpXS5maXJzdCwgcHJvdG9f
cGF0aF9baV0uc2Vjb25kKTsKLSAgfQotCi0gIC8vIE1hcCBpbnB1dCBmaWxlcyB0byB2aXJ0dWFs
IHBhdGhzIGlmIG5lY2Vzc2FyeS4KLSAgaWYgKCFpbnB1dHNfYXJlX3Byb3RvX3BhdGhfcmVsYXRp
dmVfKSB7Ci0gICAgaWYgKCFNYWtlSW5wdXRzQmVQcm90b1BhdGhSZWxhdGl2ZSgmc291cmNlX3Ry
ZWUpKSB7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIH0KLQotICAvLyBBbGxvY2F0ZSB0aGUg
SW1wb3J0ZXIuCi0gIEVycm9yUHJpbnRlciBlcnJvcl9jb2xsZWN0b3IoZXJyb3JfZm9ybWF0Xywg
JnNvdXJjZV90cmVlKTsKLSAgSW1wb3J0ZXIgaW1wb3J0ZXIoJnNvdXJjZV90cmVlLCAmZXJyb3Jf
Y29sbGVjdG9yKTsKLQotICB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiBwYXJzZWRfZmls
ZXM7Ci0KLSAgLy8gUGFyc2UgZWFjaCBmaWxlLgotICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0
X2ZpbGVzXy5zaXplKCk7IGkrKykgewotICAgIC8vIEltcG9ydCB0aGUgZmlsZS4KLSAgICBpbXBv
cnRlci5BZGRVbnVzZWRJbXBvcnRUcmFja0ZpbGUoaW5wdXRfZmlsZXNfW2ldKTsKLSAgICBjb25z
dCBGaWxlRGVzY3JpcHRvciogcGFyc2VkX2ZpbGUgPSBpbXBvcnRlci5JbXBvcnQoaW5wdXRfZmls
ZXNfW2ldKTsKLSAgICBpbXBvcnRlci5DbGVhclVudXNlZEltcG9ydFRyYWNrRmlsZXMoKTsKLSAg
ICBpZiAocGFyc2VkX2ZpbGUgPT0gTlVMTCkgcmV0dXJuIDE7Ci0gICAgcGFyc2VkX2ZpbGVzLnB1
c2hfYmFjayhwYXJzZWRfZmlsZSk7Ci0KLSAgICAvLyBFbmZvcmNlIC0tZGlzYWxsb3dfc2Vydmlj
ZXMuCi0gICAgaWYgKGRpc2FsbG93X3NlcnZpY2VzXyAmJiBwYXJzZWRfZmlsZS0+c2VydmljZV9j
b3VudCgpID4gMCkgewotICAgICAgY2VyciA8PCBwYXJzZWRfZmlsZS0+bmFtZSgpIDw8ICI6IFRo
aXMgZmlsZSBjb250YWlucyBzZXJ2aWNlcywgYnV0ICIKLSAgICAgICAgICAgICAgIi0tZGlzYWxs
b3dfc2VydmljZXMgd2FzIHVzZWQuIiA8PCBlbmRsOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gV2UgY29uc3RydWN0IGEgc2VwYXJhdGUgR2VuZXJhdG9yQ29udGV4dCBmb3Ig
ZWFjaCBvdXRwdXQgbG9jYXRpb24uICBOb3RlCi0gIC8vIHRoYXQgdHdvIGNvZGUgZ2VuZXJhdG9y
cyBtYXkgb3V0cHV0IHRvIHRoZSBzYW1lIGxvY2F0aW9uLCBpbiB3aGljaCBjYXNlCi0gIC8vIHRo
ZXkgc2hvdWxkIHNoYXJlIGEgc2luZ2xlIEdlbmVyYXRvckNvbnRleHQgc28gdGhhdCBPcGVuRm9y
SW5zZXJ0KCkgd29ya3MuCi0gIEdlbmVyYXRvckNvbnRleHRNYXAgb3V0cHV0X2RpcmVjdG9yaWVz
OwotCi0gIC8vIEdlbmVyYXRlIG91dHB1dC4KLSAgaWYgKG1vZGVfID09IE1PREVfQ09NUElMRSkg
ewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0cHV0X2RpcmVjdGl2ZXNfLnNpemUoKTsgaSsr
KSB7Ci0gICAgICBzdHJpbmcgb3V0cHV0X2xvY2F0aW9uID0gb3V0cHV0X2RpcmVjdGl2ZXNfW2ld
Lm91dHB1dF9sb2NhdGlvbjsKLSAgICAgIGlmICghSGFzU3VmZml4U3RyaW5nKG91dHB1dF9sb2Nh
dGlvbiwgIi56aXAiKSAmJgotICAgICAgICAgICFIYXNTdWZmaXhTdHJpbmcob3V0cHV0X2xvY2F0
aW9uLCAiLmphciIpKSB7Ci0gICAgICAgIEFkZFRyYWlsaW5nU2xhc2goJm91dHB1dF9sb2NhdGlv
bik7Ci0gICAgICB9Ci0gICAgICBHZW5lcmF0b3JDb250ZXh0SW1wbCoqIG1hcF9zbG90ID0gJm91
dHB1dF9kaXJlY3Rvcmllc1tvdXRwdXRfbG9jYXRpb25dOwotCi0gICAgICBpZiAoKm1hcF9zbG90
ID09IE5VTEwpIHsKLSAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSd2ZSBzZWVuIHRoaXMgb3V0cHV0
IGxvY2F0aW9uLgotICAgICAgICAqbWFwX3Nsb3QgPSBuZXcgR2VuZXJhdG9yQ29udGV4dEltcGwo
cGFyc2VkX2ZpbGVzKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFHZW5lcmF0ZU91dHB1dChwYXJz
ZWRfZmlsZXMsIG91dHB1dF9kaXJlY3RpdmVzX1tpXSwgKm1hcF9zbG90KSkgewotICAgICAgICBT
VExEZWxldGVWYWx1ZXMoJm91dHB1dF9kaXJlY3Rvcmllcyk7Ci0gICAgICAgIHJldHVybiAxOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFdyaXRlIGFsbCBvdXRwdXQgdG8gZGlzay4KLSAg
Zm9yIChHZW5lcmF0b3JDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyID0gb3V0cHV0X2RpcmVjdG9y
aWVzLmJlZ2luKCk7Ci0gICAgICAgaXRlciAhPSBvdXRwdXRfZGlyZWN0b3JpZXMuZW5kKCk7ICsr
aXRlcikgewotICAgIGNvbnN0IHN0cmluZyYgbG9jYXRpb24gPSBpdGVyLT5maXJzdDsKLSAgICBH
ZW5lcmF0b3JDb250ZXh0SW1wbCogZGlyZWN0b3J5ID0gaXRlci0+c2Vjb25kOwotICAgIGlmIChI
YXNTdWZmaXhTdHJpbmcobG9jYXRpb24sICIvIikpIHsKLSAgICAgIGlmICghZGlyZWN0b3J5LT5X
cml0ZUFsbFRvRGlzayhsb2NhdGlvbikpIHsKLSAgICAgICAgU1RMRGVsZXRlVmFsdWVzKCZvdXRw
dXRfZGlyZWN0b3JpZXMpOwotICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgaWYgKEhhc1N1ZmZpeFN0cmluZyhsb2NhdGlvbiwgIi5qYXIiKSkgewotICAgICAg
ICBkaXJlY3RvcnktPkFkZEphck1hbmlmZXN0KCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZGly
ZWN0b3J5LT5Xcml0ZUFsbFRvWmlwKGxvY2F0aW9uKSkgewotICAgICAgICBTVExEZWxldGVWYWx1
ZXMoJm91dHB1dF9kaXJlY3Rvcmllcyk7Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIGlmICghZGVwZW5kZW5jeV9vdXRfbmFtZV8uZW1wdHkoKSkgewotICAgIGlm
ICghR2VuZXJhdGVEZXBlbmRlbmN5TWFuaWZlc3RGaWxlKHBhcnNlZF9maWxlcywgb3V0cHV0X2Rp
cmVjdG9yaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzb3Vy
Y2VfdHJlZSkpIHsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgfQotCi0gIFNUTERlbGV0ZVZh
bHVlcygmb3V0cHV0X2RpcmVjdG9yaWVzKTsKLQotICBpZiAoIWRlc2NyaXB0b3Jfc2V0X25hbWVf
LmVtcHR5KCkpIHsKLSAgICBpZiAoIVdyaXRlRGVzY3JpcHRvclNldChwYXJzZWRfZmlsZXMpKSB7
Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIH0KLQotICBpZiAobW9kZV8gPT0gTU9ERV9FTkNP
REUgfHwgbW9kZV8gPT0gTU9ERV9ERUNPREUpIHsKLSAgICBpZiAoY29kZWNfdHlwZV8uZW1wdHko
KSkgewotICAgICAgLy8gSEFDSzogIERlZmluZSBhbiBFbXB0eU1lc3NhZ2UgdHlwZSB0byB1c2Ug
Zm9yIGRlY29kaW5nLgotICAgICAgRGVzY3JpcHRvclBvb2wgcG9vbDsKLSAgICAgIEZpbGVEZXNj
cmlwdG9yUHJvdG8gZmlsZTsKLSAgICAgIGZpbGUuc2V0X25hbWUoImVtcHR5X21lc3NhZ2UucHJv
dG8iKTsKLSAgICAgIGZpbGUuYWRkX21lc3NhZ2VfdHlwZSgpLT5zZXRfbmFtZSgiRW1wdHlNZXNz
YWdlIik7Ci0gICAgICBHT09HTEVfQ0hFQ0socG9vbC5CdWlsZEZpbGUoZmlsZSkgIT0gTlVMTCk7
Ci0gICAgICBjb2RlY190eXBlXyA9ICJFbXB0eU1lc3NhZ2UiOwotICAgICAgaWYgKCFFbmNvZGVP
ckRlY29kZSgmcG9vbCkpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGlmICghRW5jb2RlT3JEZWNvZGUoaW1wb3J0ZXIucG9vbCgpKSkgewotICAgICAg
ICByZXR1cm4gMTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAobW9kZV8gPT0gTU9ERV9Q
UklOVCkgewotICAgIHN3aXRjaCAocHJpbnRfbW9kZV8pIHsKLSAgICAgIGNhc2UgUFJJTlRfRlJF
RV9GSUVMRFM6Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyc2VkX2ZpbGVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZkID0gcGFyc2VkX2Zp
bGVzW2ldOwotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZmQtPm1lc3NhZ2VfdHlwZV9j
b3VudCgpOyArK2opIHsKLSAgICAgICAgICAgIFByaW50RnJlZUZpZWxkTnVtYmVycyhmZC0+bWVz
c2FnZV90eXBlKGopKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIFBSSU5UX05PTkU6Ci0gICAgICAgIEdPT0dMRV9MT0coRVJST1IpIDw8ICJJZiB0
aGUgY29kZSByZWFjaGVzIGhlcmUsIGl0IHVzdWFsbHkgbWVhbnMgYSBidWcgb2YgIgotICAgICAg
ICAgICAgICAgICAgICAgImZsYWcgcGFyc2luZyBpbiB0aGUgQ29tbW9uYWRMaW5lSW50ZXJmYWNl
LiI7Ci0gICAgICAgIHJldHVybiAxOwotCi0gICAgICAvLyBEbyBub3QgYWRkIGEgZGVmYXVsdCBj
YXNlLgotICAgIH0KLSAgfQotCi0gIHJldHVybiAwOwotfQotCi12b2lkIENvbW1hbmRMaW5lSW50
ZXJmYWNlOjpDbGVhcigpIHsKLSAgLy8gQ2xlYXIgYWxsIG1lbWJlcnMgdGhhdCBhcmUgc2V0IGJ5
IFJ1bigpLiAgTm90ZSB0aGF0IHdlIG11c3Qgbm90IGNsZWFyCi0gIC8vIG1lbWJlcnMgd2hpY2gg
YXJlIHNldCBieSBvdGhlciBtZXRob2RzIGJlZm9yZSBSdW4oKSBpcyBjYWxsZWQuCi0gIGV4ZWN1
dGFibGVfbmFtZV8uY2xlYXIoKTsKLSAgcHJvdG9fcGF0aF8uY2xlYXIoKTsKLSAgaW5wdXRfZmls
ZXNfLmNsZWFyKCk7Ci0gIG91dHB1dF9kaXJlY3RpdmVzXy5jbGVhcigpOwotICBjb2RlY190eXBl
Xy5jbGVhcigpOwotICBkZXNjcmlwdG9yX3NldF9uYW1lXy5jbGVhcigpOwotICBkZXBlbmRlbmN5
X291dF9uYW1lXy5jbGVhcigpOwotCi0gIG1vZGVfID0gTU9ERV9DT01QSUxFOwotICBwcmludF9t
b2RlXyA9IFBSSU5UX05PTkU7Ci0gIGltcG9ydHNfaW5fZGVzY3JpcHRvcl9zZXRfID0gZmFsc2U7
Ci0gIHNvdXJjZV9pbmZvX2luX2Rlc2NyaXB0b3Jfc2V0XyA9IGZhbHNlOwotICBkaXNhbGxvd19z
ZXJ2aWNlc18gPSBmYWxzZTsKLX0KLQotYm9vbCBDb21tYW5kTGluZUludGVyZmFjZTo6TWFrZUlu
cHV0c0JlUHJvdG9QYXRoUmVsYXRpdmUoCi0gICAgRGlza1NvdXJjZVRyZWUqIHNvdXJjZV90cmVl
KSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRfZmlsZXNfLnNpemUoKTsgaSsrKSB7Ci0g
ICAgc3RyaW5nIHZpcnR1YWxfZmlsZSwgc2hhZG93aW5nX2Rpc2tfZmlsZTsKLSAgICBzd2l0Y2gg
KHNvdXJjZV90cmVlLT5EaXNrRmlsZVRvVmlydHVhbEZpbGUoCi0gICAgICAgIGlucHV0X2ZpbGVz
X1tpXSwgJnZpcnR1YWxfZmlsZSwgJnNoYWRvd2luZ19kaXNrX2ZpbGUpKSB7Ci0gICAgICBjYXNl
IERpc2tTb3VyY2VUcmVlOjpTVUNDRVNTOgotICAgICAgICBpbnB1dF9maWxlc19baV0gPSB2aXJ0
dWFsX2ZpbGU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEaXNrU291cmNlVHJlZTo6U0hB
RE9XRUQ6Ci0gICAgICAgIHN0ZDo6Y2VyciA8PCBpbnB1dF9maWxlc19baV0KLSAgICAgICAgICAg
ICAgICAgIDw8ICI6IElucHV0IGlzIHNoYWRvd2VkIGluIHRoZSAtLXByb3RvX3BhdGggYnkgXCIi
Ci0gICAgICAgICAgICAgICAgICA8PCBzaGFkb3dpbmdfZGlza19maWxlCi0gICAgICAgICAgICAg
ICAgICA8PCAiXCIuICBFaXRoZXIgdXNlIHRoZSBsYXR0ZXIgZmlsZSBhcyB5b3VyIGlucHV0IG9y
IHJlb3JkZXIgIgotICAgICAgICAgICAgICAgICAgICAgInRoZSAtLXByb3RvX3BhdGggc28gdGhh
dCB0aGUgZm9ybWVyIGZpbGUncyBsb2NhdGlvbiAiCi0gICAgICAgICAgICAgICAgICAgICAiY29t
ZXMgZmlyc3QuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNh
c2UgRGlza1NvdXJjZVRyZWU6OkNBTk5PVF9PUEVOOgotICAgICAgICBzdGQ6OmNlcnIgPDwgaW5w
dXRfZmlsZXNfW2ldIDw8ICI6ICIgPDwgc3RyZXJyb3IoZXJybm8pIDw8IHN0ZDo6ZW5kbDsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBEaXNrU291cmNlVHJlZTo6Tk9fTUFQUElO
RzoKLSAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzIGF0IGFsbC4KLSAg
ICAgICAgaWYgKGFjY2VzcyhpbnB1dF9maWxlc19baV0uY19zdHIoKSwgRl9PSykgPCAwKSB7Ci0g
ICAgICAgICAgLy8gRmlsZSBkb2VzIG5vdCBldmVuIGV4aXN0LgotICAgICAgICAgIHN0ZDo6Y2Vy
ciA8PCBpbnB1dF9maWxlc19baV0gPDwgIjogIiA8PCBzdHJlcnJvcihFTk9FTlQpIDw8IHN0ZDo6
ZW5kbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdGQ6OmNlcnIKLSAgICAgICAgICAg
ICAgPDwgaW5wdXRfZmlsZXNfW2ldCi0gICAgICAgICAgICAgIDw8ICI6IEZpbGUgZG9lcyBub3Qg
cmVzaWRlIHdpdGhpbiBhbnkgcGF0aCAiCi0gICAgICAgICAgICAgICAgICJzcGVjaWZpZWQgdXNp
bmcgLS1wcm90b19wYXRoIChvciAtSSkuICBZb3UgbXVzdCBzcGVjaWZ5IGEgIgotICAgICAgICAg
ICAgICAgICAiLS1wcm90b19wYXRoIHdoaWNoIGVuY29tcGFzc2VzIHRoaXMgZmlsZS4gIE5vdGUg
dGhhdCB0aGUgIgotICAgICAgICAgICAgICAgICAicHJvdG9fcGF0aCBtdXN0IGJlIGFuIGV4YWN0
IHByZWZpeCBvZiB0aGUgLnByb3RvIGZpbGUgIgotICAgICAgICAgICAgICAgICAibmFtZXMgLS0g
cHJvdG9jIGlzIHRvbyBkdW1iIHRvIGZpZ3VyZSBvdXQgd2hlbiB0d28gcGF0aHMgIgotICAgICAg
ICAgICAgICAgICAiKGUuZy4gYWJzb2x1dGUgYW5kIHJlbGF0aXZlKSBhcmUgZXF1aXZhbGVudCAo
aXQncyBoYXJkZXIgIgotICAgICAgICAgICAgICAgICAidGhhbiB5b3UgdGhpbmspLiIgPDwgc3Rk
OjplbmRsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1Db21tYW5kTGluZUludGVyZmFjZTo6UGFyc2VBcmd1bWVu
dFN0YXR1cwotQ29tbWFuZExpbmVJbnRlcmZhY2U6OlBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBj
b25zdCBjaGFyKiBjb25zdCBhcmd2W10pIHsKLSAgZXhlY3V0YWJsZV9uYW1lXyA9IGFyZ3ZbMF07
Ci0KLSAgdmVjdG9yPHN0cmluZz4gYXJndW1lbnRzOwotICBmb3IgKGludCBpID0gMTsgaSA8IGFy
Z2M7ICsraSkgewotICAgIGFyZ3VtZW50cy5wdXNoX2JhY2soYXJndltpXSk7Ci0gIH0KLQotICAv
LyBJdGVyYXRlIHRocm91Z2ggYWxsIGFyZ3VtZW50cyBhbmQgcGFyc2UgdGhlbS4KLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICBzdHJpbmcgbmFtZSwg
dmFsdWU7Ci0KLSAgICBpZiAoUGFyc2VBcmd1bWVudChhcmd1bWVudHNbaV0uY19zdHIoKSwgJm5h
bWUsICZ2YWx1ZSkpIHsKLSAgICAgIC8vIFJldHVybmVkIHRydWUgPT4gVXNlIHRoZSBuZXh0IGFy
Z3VtZW50IGFzIHRoZSBmbGFnIHZhbHVlLgotICAgICAgaWYgKGkgKyAxID09IGFyZ3VtZW50cy5z
aXplKCkgfHwgYXJndW1lbnRzW2kgKyAxXVswXSA9PSAnLScpIHsKLSAgICAgICAgc3RkOjpjZXJy
IDw8ICJNaXNzaW5nIHZhbHVlIGZvciBmbGFnOiAiIDw8IG5hbWUgPDwgc3RkOjplbmRsOwotICAg
ICAgICBpZiAobmFtZSA9PSAiLS1kZWNvZGUiKSB7Ci0gICAgICAgICAgc3RkOjpjZXJyIDw8ICJU
byBkZWNvZGUgYW4gdW5rbm93biBtZXNzYWdlLCB1c2UgLS1kZWNvZGVfcmF3LiIKLSAgICAgICAg
ICAgICAgICAgICAgPDwgc3RkOjplbmRsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQQVJT
RV9BUkdVTUVOVF9GQUlMOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgKytpOwotICAgICAgICB2
YWx1ZSA9IGFyZ3VtZW50c1tpXTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBQYXJzZUFyZ3VtZW50
U3RhdHVzIHN0YXR1cyA9IEludGVycHJldEFyZ3VtZW50KG5hbWUsIHZhbHVlKTsKLSAgICBpZiAo
c3RhdHVzICE9IFBBUlNFX0FSR1VNRU5UX0RPTkVfQU5EX0NPTlRJTlVFKQotICAgICAgcmV0dXJu
IHN0YXR1czsKLSAgfQotCi0gIC8vIElmIG5vIC0tcHJvdG9fcGF0aCB3YXMgZ2l2ZW4sIHVzZSB0
aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KLSAgaWYgKHByb3RvX3BhdGhfLmVtcHR5KCkp
IHsKLSAgICAvLyBEb24ndCB1c2UgbWFrZV9wYWlyIGFzIHRoZSBvbGQvZGVmYXVsdCBzdGFuZGFy
ZCBsaWJyYXJ5IG9uIFNvbGFyaXMKLSAgICAvLyBkb2Vzbid0IHN1cHBvcnQgaXQgd2l0aG91dCBl
eHBsaWNpdCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLCB3aGljaCBhcmUKLSAgICAvLyBpbmNvbXBhdGli
bGUgd2l0aCBDKysweCdzIG1ha2VfcGFpci4KLSAgICBwcm90b19wYXRoXy5wdXNoX2JhY2socGFp
cjxzdHJpbmcsIHN0cmluZz4oIiIsICIuIikpOwotICB9Ci0KLSAgLy8gQ2hlY2sgc29tZSBlcnJy
b3IgY2FzZXMuCi0gIGJvb2wgZGVjb2RpbmdfcmF3ID0gKG1vZGVfID09IE1PREVfREVDT0RFKSAm
JiBjb2RlY190eXBlXy5lbXB0eSgpOwotICBpZiAoZGVjb2RpbmdfcmF3ICYmICFpbnB1dF9maWxl
c18uZW1wdHkoKSkgewotICAgIHN0ZDo6Y2VyciA8PCAiV2hlbiB1c2luZyAtLWRlY29kZV9yYXcs
IG5vIGlucHV0IGZpbGVzIHNob3VsZCBiZSBnaXZlbi4iCi0gICAgICAgICAgICAgIDw8IHN0ZDo6
ZW5kbDsKLSAgICByZXR1cm4gUEFSU0VfQVJHVU1FTlRfRkFJTDsKLSAgfSBlbHNlIGlmICghZGVj
b2RpbmdfcmF3ICYmIGlucHV0X2ZpbGVzXy5lbXB0eSgpKSB7Ci0gICAgc3RkOjpjZXJyIDw8ICJN
aXNzaW5nIGlucHV0IGZpbGUuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgcmV0dXJuIFBBUlNFX0FSR1VN
RU5UX0ZBSUw7Ci0gIH0KLSAgaWYgKG1vZGVfID09IE1PREVfQ09NUElMRSAmJiBvdXRwdXRfZGly
ZWN0aXZlc18uZW1wdHkoKSAmJgotICAgICAgZGVzY3JpcHRvcl9zZXRfbmFtZV8uZW1wdHkoKSkg
ewotICAgIHN0ZDo6Y2VyciA8PCAiTWlzc2luZyBvdXRwdXQgZGlyZWN0aXZlcy4iIDw8IHN0ZDo6
ZW5kbDsKLSAgICByZXR1cm4gUEFSU0VfQVJHVU1FTlRfRkFJTDsKLSAgfQotICBpZiAobW9kZV8g
IT0gTU9ERV9DT01QSUxFICYmICFkZXBlbmRlbmN5X291dF9uYW1lXy5lbXB0eSgpKSB7Ci0gICAg
c3RkOjpjZXJyIDw8ICJDYW4gb25seSB1c2UgLS1kZXBlbmRlbmN5X291dD1GSUxFIHdoZW4gZ2Vu
ZXJhdGluZyBjb2RlLiIKLSAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwotICAgIHJldHVybiBQ
QVJTRV9BUkdVTUVOVF9GQUlMOwotICB9Ci0gIGlmICghZGVwZW5kZW5jeV9vdXRfbmFtZV8uZW1w
dHkoKSAmJiBpbnB1dF9maWxlc18uc2l6ZSgpID4gMSkgewotICAgIHN0ZDo6Y2VycgotICAgICAg
ICA8PCAiQ2FuIG9ubHkgcHJvY2VzcyBvbmUgaW5wdXQgZmlsZSB3aGVuIHVzaW5nIC0tZGVwZW5k
ZW5jeV9vdXQ9RklMRS4iCi0gICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgICByZXR1cm4gUEFSU0Vf
QVJHVU1FTlRfRkFJTDsKLSAgfQotICBpZiAoaW1wb3J0c19pbl9kZXNjcmlwdG9yX3NldF8gJiYg
ZGVzY3JpcHRvcl9zZXRfbmFtZV8uZW1wdHkoKSkgewotICAgIHN0ZDo6Y2VyciA8PCAiLS1pbmNs
dWRlX2ltcG9ydHMgb25seSBtYWtlcyBzZW5zZSB3aGVuIGNvbWJpbmVkIHdpdGggIgotICAgICAg
ICAgICAgICAgICAiLS1kZXNjcmlwdG9yX3NldF9vdXQuIiA8PCBzdGQ6OmVuZGw7Ci0gIH0KLSAg
aWYgKHNvdXJjZV9pbmZvX2luX2Rlc2NyaXB0b3Jfc2V0XyAmJiBkZXNjcmlwdG9yX3NldF9uYW1l
Xy5lbXB0eSgpKSB7Ci0gICAgc3RkOjpjZXJyIDw8ICItLWluY2x1ZGVfc291cmNlX2luZm8gb25s
eSBtYWtlcyBzZW5zZSB3aGVuIGNvbWJpbmVkIHdpdGggIgotICAgICAgICAgICAgICAgICAiLS1k
ZXNjcmlwdG9yX3NldF9vdXQuIiA8PCBzdGQ6OmVuZGw7Ci0gIH0KLQotICByZXR1cm4gUEFSU0Vf
QVJHVU1FTlRfRE9ORV9BTkRfQ09OVElOVUU7Ci19Ci0KLWJvb2wgQ29tbWFuZExpbmVJbnRlcmZh
Y2U6OlBhcnNlQXJndW1lbnQoY29uc3QgY2hhciogYXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJpbmcqIG5hbWUsIHN0cmluZyogdmFsdWUpIHsKLSAgYm9v
bCBwYXJzZWRfdmFsdWUgPSBmYWxzZTsKLQotICBpZiAoYXJnWzBdICE9ICctJykgewotICAgIC8v
IE5vdCBhIGZsYWcuCi0gICAgbmFtZS0+Y2xlYXIoKTsKLSAgICBwYXJzZWRfdmFsdWUgPSB0cnVl
OwotICAgICp2YWx1ZSA9IGFyZzsKLSAgfSBlbHNlIGlmIChhcmdbMV0gPT0gJy0nKSB7Ci0gICAg
Ly8gVHdvIGRhc2hlczogIE11bHRpLWNoYXJhY3RlciBuYW1lLCB3aXRoICc9JyBzZXBhcmF0aW5n
IG5hbWUgYW5kCi0gICAgLy8gICB2YWx1ZS4KLSAgICBjb25zdCBjaGFyKiBlcXVhbHNfcG9zID0g
c3RyY2hyKGFyZywgJz0nKTsKLSAgICBpZiAoZXF1YWxzX3BvcyAhPSBOVUxMKSB7Ci0gICAgICAq
bmFtZSA9IHN0cmluZyhhcmcsIGVxdWFsc19wb3MgLSBhcmcpOwotICAgICAgKnZhbHVlID0gZXF1
YWxzX3BvcyArIDE7Ci0gICAgICBwYXJzZWRfdmFsdWUgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAqbmFtZSA9IGFyZzsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gT25lIGRhc2g6ICBP
bmUtY2hhcmFjdGVyIG5hbWUsIGFsbCBzdWJzZXF1ZW50IGNoYXJhY3RlcnMgYXJlIHRoZQotICAg
IC8vICAgdmFsdWUuCi0gICAgaWYgKGFyZ1sxXSA9PSAnXDAnKSB7Ci0gICAgICAvLyBhcmcgaXMg
anVzdCAiLSIuICBXZSB0cmVhdCB0aGlzIGFzIGFuIGlucHV0IGZpbGUsIGV4Y2VwdCB0aGF0IGF0
Ci0gICAgICAvLyBwcmVzZW50IHRoaXMgd2lsbCBqdXN0IGxlYWQgdG8gYSAiZmlsZSBub3QgZm91
bmQiIGVycm9yLgotICAgICAgbmFtZS0+Y2xlYXIoKTsKLSAgICAgICp2YWx1ZSA9IGFyZzsKLSAg
ICAgIHBhcnNlZF92YWx1ZSA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICpuYW1lID0gc3Ry
aW5nKGFyZywgMik7Ci0gICAgICAqdmFsdWUgPSBhcmcgKyAyOwotICAgICAgcGFyc2VkX3ZhbHVl
ID0gIXZhbHVlLT5lbXB0eSgpOwotICAgIH0KLSAgfQotCi0gIC8vIE5lZWQgdG8gcmV0dXJuIHRy
dWUgaWZmIHRoZSBuZXh0IGFyZyBzaG91bGQgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRoaXMK
LSAgLy8gb25lLCBmYWxzZSBvdGhlcndpc2UuCi0KLSAgaWYgKHBhcnNlZF92YWx1ZSkgewotICAg
IC8vIFdlIGFscmVhZHkgcGFyc2VkIGEgdmFsdWUgZm9yIHRoaXMgZmxhZy4KLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICBpZiAoKm5hbWUgPT0gIi1oIiB8fCAqbmFtZSA9PSAiLS1oZWxwIiB8
fAotICAgICAgKm5hbWUgPT0gIi0tZGlzYWxsb3dfc2VydmljZXMiIHx8Ci0gICAgICAqbmFtZSA9
PSAiLS1pbmNsdWRlX2ltcG9ydHMiIHx8Ci0gICAgICAqbmFtZSA9PSAiLS1pbmNsdWRlX3NvdXJj
ZV9pbmZvIiB8fAotICAgICAgKm5hbWUgPT0gIi0tdmVyc2lvbiIgfHwKLSAgICAgICpuYW1lID09
ICItLWRlY29kZV9yYXciIHx8Ci0gICAgICAqbmFtZSA9PSAiLS1wcmludF9mcmVlX2ZpZWxkX251
bWJlcnMiKSB7Ci0gICAgLy8gSEFDSzogIFRoZXNlIGFyZSB0aGUgb25seSBmbGFncyB0aGF0IGRv
bid0IHRha2UgYSB2YWx1ZS4KLSAgICAvLyAgIFRoZXkgcHJvYmFibHkgc2hvdWxkIG5vdCBiZSBo
YXJkLWNvZGVkIGxpa2UgdGhpcyBidXQgZm9yIG5vdyBpdCdzCi0gICAgLy8gICBub3Qgd29ydGgg
ZG9pbmcgYmV0dGVyLgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIE5leHQgYXJndW1l
bnQgaXMgdGhlIGZsYWcgdmFsdWUuCi0gIHJldHVybiB0cnVlOwotfQotCi1Db21tYW5kTGluZUlu
dGVyZmFjZTo6UGFyc2VBcmd1bWVudFN0YXR1cwotQ29tbWFuZExpbmVJbnRlcmZhY2U6OkludGVy
cHJldEFyZ3VtZW50KGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHZhbHVlKSB7Ci0gIGlmIChuYW1lLmVtcHR5
KCkpIHsKLSAgICAvLyBOb3QgYSBmbGFnLiAgSnVzdCBhIGZpbGVuYW1lLgotICAgIGlmICh2YWx1
ZS5lbXB0eSgpKSB7Ci0gICAgICBzdGQ6OmNlcnIKLSAgICAgICAgICA8PCAiWW91IHNlZW0gdG8g
aGF2ZSBwYXNzZWQgYW4gZW1wdHkgc3RyaW5nIGFzIG9uZSBvZiB0aGUgIgotICAgICAgICAgICAg
ICJhcmd1bWVudHMgdG8gIiA8PCBleGVjdXRhYmxlX25hbWVfCi0gICAgICAgICAgPDwgIi4gIFRo
aXMgaXMgYWN0dWFsbHkgIgotICAgICAgICAgICAgICJzb3J0IG9mIGhhcmQgdG8gZG8uICBDb25n
cmF0cy4gIFVuZm9ydHVuYXRlbHkgaXQgaXMgbm90IHZhbGlkICIKLSAgICAgICAgICAgICAiaW5w
dXQgc28gdGhlIHByb2dyYW0gaXMgZ29pbmcgdG8gZGllIG5vdy4iIDw8IHN0ZDo6ZW5kbDsKLSAg
ICAgIHJldHVybiBQQVJTRV9BUkdVTUVOVF9GQUlMOwotICAgIH0KLQotICAgIGlucHV0X2ZpbGVz
Xy5wdXNoX2JhY2sodmFsdWUpOwotCi0gIH0gZWxzZSBpZiAobmFtZSA9PSAiLUkiIHx8IG5hbWUg
PT0gIi0tcHJvdG9fcGF0aCIpIHsKLSAgICAvLyBKYXZhJ3MgLWNsYXNzcGF0aCAoYW5kIHNvbWUg
b3RoZXIgbGFuZ3VhZ2VzKSBkZWxpbWl0cyBwYXRoIGNvbXBvbmVudHMKLSAgICAvLyB3aXRoIGNv
bG9ucy4gIExldCdzIGFjY2VwdCB0aGF0IHN5bnRheCB0b28ganVzdCB0byBtYWtlIHRoaW5ncyBt
b3JlCi0gICAgLy8gaW50dWl0aXZlLgotICAgIHZlY3RvcjxzdHJpbmc+IHBhcnRzID0gU3BsaXQo
Ci0gICAgICAgIHZhbHVlLCBrUGF0aFNlcGFyYXRvciwgdHJ1ZSk7Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHBhcnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBzdHJpbmcgdmlydHVhbF9wYXRo
OwotICAgICAgc3RyaW5nIGRpc2tfcGF0aDsKLQotICAgICAgc3RyaW5nOjpzaXplX3R5cGUgZXF1
YWxzX3BvcyA9IHBhcnRzW2ldLmZpbmRfZmlyc3Rfb2YoJz0nKTsKLSAgICAgIGlmIChlcXVhbHNf
cG9zID09IHN0cmluZzo6bnBvcykgewotICAgICAgICB2aXJ0dWFsX3BhdGggPSAiIjsKLSAgICAg
ICAgZGlza19wYXRoID0gcGFydHNbaV07Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2aXJ0dWFs
X3BhdGggPSBwYXJ0c1tpXS5zdWJzdHIoMCwgZXF1YWxzX3Bvcyk7Ci0gICAgICAgIGRpc2tfcGF0
aCA9IHBhcnRzW2ldLnN1YnN0cihlcXVhbHNfcG9zICsgMSk7Ci0gICAgICB9Ci0KLSAgICAgIGlm
IChkaXNrX3BhdGguZW1wdHkoKSkgewotICAgICAgICBzdGQ6OmNlcnIKLSAgICAgICAgICAgIDw8
ICItLXByb3RvX3BhdGggcGFzc2VkIGVtcHR5IGRpcmVjdG9yeSBuYW1lLiAgKFVzZSBcIi5cIiBm
b3IgIgotICAgICAgICAgICAgICAgImN1cnJlbnQgZGlyZWN0b3J5LikiIDw8IHN0ZDo6ZW5kbDsK
LSAgICAgICAgcmV0dXJuIFBBUlNFX0FSR1VNRU5UX0ZBSUw7Ci0gICAgICB9Ci0KLSAgICAgIC8v
IE1ha2Ugc3VyZSBkaXNrIHBhdGggZXhpc3RzLCB3YXJuIG90aGVyd2lzZS4KLSAgICAgIGlmIChh
Y2Nlc3MoZGlza19wYXRoLmNfc3RyKCksIEZfT0spIDwgMCkgewotICAgICAgICBzdGQ6OmNlcnIg
PDwgZGlza19wYXRoIDw8ICI6IHdhcm5pbmc6IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4iCi0g
ICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgICB9Ci0KLSAgICAgIC8vIERvbid0
IHVzZSBtYWtlX3BhaXIgYXMgdGhlIG9sZC9kZWZhdWx0IHN0YW5kYXJkIGxpYnJhcnkgb24gU29s
YXJpcwotICAgICAgLy8gZG9lc24ndCBzdXBwb3J0IGl0IHdpdGhvdXQgZXhwbGljaXQgdGVtcGxh
dGUgcGFyYW1ldGVycywgd2hpY2ggYXJlCi0gICAgICAvLyBpbmNvbXBhdGlibGUgd2l0aCBDKysw
eCdzIG1ha2VfcGFpci4KLSAgICAgIHByb3RvX3BhdGhfLnB1c2hfYmFjayhwYWlyPHN0cmluZywg
c3RyaW5nPih2aXJ0dWFsX3BhdGgsIGRpc2tfcGF0aCkpOwotICAgIH0KLQotICB9IGVsc2UgaWYg
KG5hbWUgPT0gIi1vIiB8fCBuYW1lID09ICItLWRlc2NyaXB0b3Jfc2V0X291dCIpIHsKLSAgICBp
ZiAoIWRlc2NyaXB0b3Jfc2V0X25hbWVfLmVtcHR5KCkpIHsKLSAgICAgIHN0ZDo6Y2VyciA8PCBu
YW1lIDw8ICIgbWF5IG9ubHkgYmUgcGFzc2VkIG9uY2UuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICBy
ZXR1cm4gUEFSU0VfQVJHVU1FTlRfRkFJTDsKLSAgICB9Ci0gICAgaWYgKHZhbHVlLmVtcHR5KCkp
IHsKLSAgICAgIHN0ZDo6Y2VyciA8PCBuYW1lIDw8ICIgcmVxdWlyZXMgYSBub24tZW1wdHkgdmFs
dWUuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICByZXR1cm4gUEFSU0VfQVJHVU1FTlRfRkFJTDsKLSAg
ICB9Ci0gICAgaWYgKG1vZGVfICE9IE1PREVfQ09NUElMRSkgewotICAgICAgc3RkOjpjZXJyCi0g
ICAgICAgICAgPDwgIkNhbm5vdCB1c2UgLS1lbmNvZGUgb3IgLS1kZWNvZGUgYW5kIGdlbmVyYXRl
IGRlc2NyaXB0b3JzIGF0IHRoZSAiCi0gICAgICAgICAgICAgInNhbWUgdGltZS4iIDw8IHN0ZDo6
ZW5kbDsKLSAgICAgIHJldHVybiBQQVJTRV9BUkdVTUVOVF9GQUlMOwotICAgIH0KLSAgICBkZXNj
cmlwdG9yX3NldF9uYW1lXyA9IHZhbHVlOwotCi0gIH0gZWxzZSBpZiAobmFtZSA9PSAiLS1kZXBl
bmRlbmN5X291dCIpIHsKLSAgICBpZiAoIWRlcGVuZGVuY3lfb3V0X25hbWVfLmVtcHR5KCkpIHsK
LSAgICAgIHN0ZDo6Y2VyciA8PCBuYW1lIDw8ICIgbWF5IG9ubHkgYmUgcGFzc2VkIG9uY2UuIiA8
PCBzdGQ6OmVuZGw7Ci0gICAgICByZXR1cm4gUEFSU0VfQVJHVU1FTlRfRkFJTDsKLSAgICB9Ci0g
ICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKLSAgICAgIHN0ZDo6Y2VyciA8PCBuYW1lIDw8ICIgcmVx
dWlyZXMgYSBub24tZW1wdHkgdmFsdWUuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICByZXR1cm4gUEFS
U0VfQVJHVU1FTlRfRkFJTDsKLSAgICB9Ci0gICAgZGVwZW5kZW5jeV9vdXRfbmFtZV8gPSB2YWx1
ZTsKLQotICB9IGVsc2UgaWYgKG5hbWUgPT0gIi0taW5jbHVkZV9pbXBvcnRzIikgewotICAgIGlm
IChpbXBvcnRzX2luX2Rlc2NyaXB0b3Jfc2V0XykgewotICAgICAgc3RkOjpjZXJyIDw8IG5hbWUg
PDwgIiBtYXkgb25seSBiZSBwYXNzZWQgb25jZS4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIHJldHVy
biBQQVJTRV9BUkdVTUVOVF9GQUlMOwotICAgIH0KLSAgICBpbXBvcnRzX2luX2Rlc2NyaXB0b3Jf
c2V0XyA9IHRydWU7Ci0KLSAgfSBlbHNlIGlmIChuYW1lID09ICItLWluY2x1ZGVfc291cmNlX2lu
Zm8iKSB7Ci0gICAgaWYgKHNvdXJjZV9pbmZvX2luX2Rlc2NyaXB0b3Jfc2V0XykgewotICAgICAg
c3RkOjpjZXJyIDw8IG5hbWUgPDwgIiBtYXkgb25seSBiZSBwYXNzZWQgb25jZS4iIDw8IHN0ZDo6
ZW5kbDsKLSAgICAgIHJldHVybiBQQVJTRV9BUkdVTUVOVF9GQUlMOwotICAgIH0KLSAgICBzb3Vy
Y2VfaW5mb19pbl9kZXNjcmlwdG9yX3NldF8gPSB0cnVlOwotCi0gIH0gZWxzZSBpZiAobmFtZSA9
PSAiLWgiIHx8IG5hbWUgPT0gIi0taGVscCIpIHsKLSAgICBQcmludEhlbHBUZXh0KCk7Ci0gICAg
cmV0dXJuIFBBUlNFX0FSR1VNRU5UX0RPTkVfQU5EX0VYSVQ7ICAvLyBFeGl0IHdpdGhvdXQgcnVu
bmluZyBjb21waWxlci4KLQotICB9IGVsc2UgaWYgKG5hbWUgPT0gIi0tdmVyc2lvbiIpIHsKLSAg
ICBpZiAoIXZlcnNpb25faW5mb18uZW1wdHkoKSkgewotICAgICAgc3RkOjpjb3V0IDw8IHZlcnNp
b25faW5mb18gPDwgc3RkOjplbmRsOwotICAgIH0KLSAgICBjb3V0IDw8ICJsaWJwcm90b2MgIgot
ICAgICAgICAgPDwgcHJvdG9idWY6OmludGVybmFsOjpWZXJzaW9uU3RyaW5nKEdPT0dMRV9QUk9U
T0JVRl9WRVJTSU9OKQotICAgICAgICAgPDwgZW5kbDsKLSAgICByZXR1cm4gUEFSU0VfQVJHVU1F
TlRfRE9ORV9BTkRfRVhJVDsgIC8vIEV4aXQgd2l0aG91dCBydW5uaW5nIGNvbXBpbGVyLgotCi0g
IH0gZWxzZSBpZiAobmFtZSA9PSAiLS1kaXNhbGxvd19zZXJ2aWNlcyIpIHsKLSAgICBkaXNhbGxv
d19zZXJ2aWNlc18gPSB0cnVlOwotCi0gIH0gZWxzZSBpZiAobmFtZSA9PSAiLS1lbmNvZGUiIHx8
IG5hbWUgPT0gIi0tZGVjb2RlIiB8fAotICAgICAgICAgICAgIG5hbWUgPT0gIi0tZGVjb2RlX3Jh
dyIpIHsKLSAgICBpZiAobW9kZV8gIT0gTU9ERV9DT01QSUxFKSB7Ci0gICAgICBzdGQ6OmNlcnIg
PDwgIk9ubHkgb25lIG9mIC0tZW5jb2RlIGFuZCAtLWRlY29kZSBjYW4gYmUgc3BlY2lmaWVkLiIK
LSAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgICByZXR1cm4gUEFSU0VfQVJHVU1F
TlRfRkFJTDsKLSAgICB9Ci0gICAgaWYgKCFvdXRwdXRfZGlyZWN0aXZlc18uZW1wdHkoKSB8fCAh
ZGVzY3JpcHRvcl9zZXRfbmFtZV8uZW1wdHkoKSkgewotICAgICAgc3RkOjpjZXJyIDw8ICJDYW5u
b3QgdXNlICIgPDwgbmFtZQotICAgICAgICAgICAgICAgIDw8ICIgYW5kIGdlbmVyYXRlIGNvZGUg
b3IgZGVzY3JpcHRvcnMgYXQgdGhlIHNhbWUgdGltZS4iCi0gICAgICAgICAgICAgICAgPDwgc3Rk
OjplbmRsOwotICAgICAgcmV0dXJuIFBBUlNFX0FSR1VNRU5UX0ZBSUw7Ci0gICAgfQotCi0gICAg
bW9kZV8gPSAobmFtZSA9PSAiLS1lbmNvZGUiKSA/IE1PREVfRU5DT0RFIDogTU9ERV9ERUNPREU7
Ci0KLSAgICBpZiAodmFsdWUuZW1wdHkoKSAmJiBuYW1lICE9ICItLWRlY29kZV9yYXciKSB7Ci0g
ICAgICBzdGQ6OmNlcnIgPDwgIlR5cGUgbmFtZSBmb3IgIiA8PCBuYW1lIDw8ICIgY2Fubm90IGJl
IGJsYW5rLiIgPDwgc3RkOjplbmRsOwotICAgICAgaWYgKG5hbWUgPT0gIi0tZGVjb2RlIikgewot
ICAgICAgICBzdGQ6OmNlcnIgPDwgIlRvIGRlY29kZSBhbiB1bmtub3duIG1lc3NhZ2UsIHVzZSAt
LWRlY29kZV9yYXcuIgotICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwotICAgICAgfQot
ICAgICAgcmV0dXJuIFBBUlNFX0FSR1VNRU5UX0ZBSUw7Ci0gICAgfSBlbHNlIGlmICghdmFsdWUu
ZW1wdHkoKSAmJiBuYW1lID09ICItLWRlY29kZV9yYXciKSB7Ci0gICAgICBzdGQ6OmNlcnIgPDwg
Ii0tZGVjb2RlX3JhdyBkb2VzIG5vdCB0YWtlIGEgcGFyYW1ldGVyLiIgPDwgc3RkOjplbmRsOwot
ICAgICAgcmV0dXJuIFBBUlNFX0FSR1VNRU5UX0ZBSUw7Ci0gICAgfQotCi0gICAgY29kZWNfdHlw
ZV8gPSB2YWx1ZTsKLQotICB9IGVsc2UgaWYgKG5hbWUgPT0gIi0tZXJyb3JfZm9ybWF0Iikgewot
ICAgIGlmICh2YWx1ZSA9PSAiZ2NjIikgewotICAgICAgZXJyb3JfZm9ybWF0XyA9IEVSUk9SX0ZP
Uk1BVF9HQ0M7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAibXN2cyIpIHsKLSAgICAgIGVycm9y
X2Zvcm1hdF8gPSBFUlJPUl9GT1JNQVRfTVNWUzsKLSAgICB9IGVsc2UgewotICAgICAgc3RkOjpj
ZXJyIDw8ICJVbmtub3duIGVycm9yIGZvcm1hdDogIiA8PCB2YWx1ZSA8PCBzdGQ6OmVuZGw7Ci0g
ICAgICByZXR1cm4gUEFSU0VfQVJHVU1FTlRfRkFJTDsKLSAgICB9Ci0KLSAgfSBlbHNlIGlmIChu
YW1lID09ICItLXBsdWdpbiIpIHsKLSAgICBpZiAocGx1Z2luX3ByZWZpeF8uZW1wdHkoKSkgewot
ICAgICAgc3RkOjpjZXJyIDw8ICJUaGlzIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgcGx1Z2lu
cy4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIHJldHVybiBQQVJTRV9BUkdVTUVOVF9GQUlMOwotICAg
IH0KLQotICAgIHN0cmluZyBwbHVnaW5fbmFtZTsKLSAgICBzdHJpbmcgcGF0aDsKLQotICAgIHN0
cmluZzo6c2l6ZV90eXBlIGVxdWFsc19wb3MgPSB2YWx1ZS5maW5kX2ZpcnN0X29mKCc9Jyk7Ci0g
ICAgaWYgKGVxdWFsc19wb3MgPT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAvLyBVc2UgdGhlIGJh
c2VuYW1lIG9mIHRoZSBmaWxlLgotICAgICAgc3RyaW5nOjpzaXplX3R5cGUgc2xhc2hfcG9zID0g
dmFsdWUuZmluZF9sYXN0X29mKCcvJyk7Ci0gICAgICBpZiAoc2xhc2hfcG9zID09IHN0cmluZzo6
bnBvcykgewotICAgICAgICBwbHVnaW5fbmFtZSA9IHZhbHVlOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgcGx1Z2luX25hbWUgPSB2YWx1ZS5zdWJzdHIoc2xhc2hfcG9zICsgMSk7Ci0gICAgICB9
Ci0gICAgICBwYXRoID0gdmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBsdWdpbl9uYW1lID0g
dmFsdWUuc3Vic3RyKDAsIGVxdWFsc19wb3MpOwotICAgICAgcGF0aCA9IHZhbHVlLnN1YnN0cihl
cXVhbHNfcG9zICsgMSk7Ci0gICAgfQotCi0gICAgcGx1Z2luc19bcGx1Z2luX25hbWVdID0gcGF0
aDsKLQotICB9IGVsc2UgaWYgKG5hbWUgPT0gIi0tcHJpbnRfZnJlZV9maWVsZF9udW1iZXJzIikg
ewotICAgIGlmIChtb2RlXyAhPSBNT0RFX0NPTVBJTEUpIHsKLSAgICAgIHN0ZDo6Y2VyciA8PCAi
Q2Fubm90IHVzZSAiIDw8IG5hbWUKLSAgICAgICAgICAgICAgICA8PCAiIGFuZCB1c2UgLS1lbmNv
ZGUsIC0tZGVjb2RlIG9yIHByaW50ICIKLSAgICAgICAgICAgICAgICA8PCAib3RoZXIgaW5mbyBh
dCB0aGUgc2FtZSB0aW1lLiIgPDwgc3RkOjplbmRsOwotICAgICAgcmV0dXJuIFBBUlNFX0FSR1VN
RU5UX0ZBSUw7Ci0gICAgfQotICAgIGlmICghb3V0cHV0X2RpcmVjdGl2ZXNfLmVtcHR5KCkgfHwg
IWRlc2NyaXB0b3Jfc2V0X25hbWVfLmVtcHR5KCkpIHsKLSAgICAgIHN0ZDo6Y2VyciA8PCAiQ2Fu
bm90IHVzZSAiIDw8IG5hbWUKLSAgICAgICAgICAgICAgICA8PCAiIGFuZCBnZW5lcmF0ZSBjb2Rl
IG9yIGRlc2NyaXB0b3JzIGF0IHRoZSBzYW1lIHRpbWUuIgotICAgICAgICAgICAgICAgIDw8IHN0
ZDo6ZW5kbDsKLSAgICAgIHJldHVybiBQQVJTRV9BUkdVTUVOVF9GQUlMOwotICAgIH0KLSAgICBt
b2RlXyA9IE1PREVfUFJJTlQ7Ci0gICAgcHJpbnRfbW9kZV8gPSBQUklOVF9GUkVFX0ZJRUxEUzsK
LSAgfSBlbHNlIHsKLSAgICAvLyBTb21lIG90aGVyIGZsYWcuICBMb29rIGl0IHVwIGluIHRoZSBn
ZW5lcmF0b3JzIGxpc3QuCi0gICAgY29uc3QgR2VuZXJhdG9ySW5mbyogZ2VuZXJhdG9yX2luZm8g
PQotICAgICAgICBGaW5kT3JOdWxsKGdlbmVyYXRvcnNfYnlfZmxhZ19uYW1lXywgbmFtZSk7Ci0g
ICAgaWYgKGdlbmVyYXRvcl9pbmZvID09IE5VTEwgJiYKLSAgICAgICAgKHBsdWdpbl9wcmVmaXhf
LmVtcHR5KCkgfHwgIUhhc1N1ZmZpeFN0cmluZyhuYW1lLCAiX291dCIpKSkgewotICAgICAgLy8g
Q2hlY2sgaWYgaXQncyBhIGdlbmVyYXRvciBvcHRpb24gZmxhZy4KLSAgICAgIGdlbmVyYXRvcl9p
bmZvID0gRmluZE9yTnVsbChnZW5lcmF0b3JzX2J5X29wdGlvbl9uYW1lXywgbmFtZSk7Ci0gICAg
ICBpZiAoZ2VuZXJhdG9yX2luZm8gPT0gTlVMTCkgewotICAgICAgICBzdGQ6OmNlcnIgPDwgIlVu
a25vd24gZmxhZzogIiA8PCBuYW1lIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgcmV0dXJuIFBBUlNF
X0FSR1VNRU5UX0ZBSUw7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdHJpbmcqIHBhcmFtZXRl
cnMgPSAmZ2VuZXJhdG9yX3BhcmFtZXRlcnNfW2dlbmVyYXRvcl9pbmZvLT5mbGFnX25hbWVdOwot
ICAgICAgICBpZiAoIXBhcmFtZXRlcnMtPmVtcHR5KCkpIHsKLSAgICAgICAgICBwYXJhbWV0ZXJz
LT5hcHBlbmQoIiwiKTsKLSAgICAgICAgfQotICAgICAgICBwYXJhbWV0ZXJzLT5hcHBlbmQodmFs
dWUpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBJdCdzIGFuIG91dHB1dCBmbGFn
LiAgQWRkIGl0IHRvIHRoZSBvdXRwdXQgZGlyZWN0aXZlcy4KLSAgICAgIGlmIChtb2RlXyAhPSBN
T0RFX0NPTVBJTEUpIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICJDYW5ub3QgdXNlIC0tZW5jb2Rl
LCAtLWRlY29kZSBvciBwcmludCAucHJvdG8gaW5mbyBhbmQgIgotICAgICAgICAgICAgICAgICAg
ICAgImdlbmVyYXRlIGNvZGUgYXQgdGhlIHNhbWUgdGltZS4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAg
ICAgcmV0dXJuIFBBUlNFX0FSR1VNRU5UX0ZBSUw7Ci0gICAgICB9Ci0KLSAgICAgIE91dHB1dERp
cmVjdGl2ZSBkaXJlY3RpdmU7Ci0gICAgICBkaXJlY3RpdmUubmFtZSA9IG5hbWU7Ci0gICAgICBp
ZiAoZ2VuZXJhdG9yX2luZm8gPT0gTlVMTCkgewotICAgICAgICBkaXJlY3RpdmUuZ2VuZXJhdG9y
ID0gTlVMTDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRpcmVjdGl2ZS5nZW5lcmF0b3IgPSBn
ZW5lcmF0b3JfaW5mby0+Z2VuZXJhdG9yOwotICAgICAgfQotCi0gICAgICAvLyBTcGxpdCB2YWx1
ZSBhdCAnOicgdG8gc2VwYXJhdGUgdGhlIGdlbmVyYXRvciBwYXJhbWV0ZXIgZnJvbSB0aGUKLSAg
ICAgIC8vIGZpbGVuYW1lLiAgSG93ZXZlciwgYXZvaWQgZG9pbmcgdGhpcyBpZiB0aGUgY29sb24g
aXMgcGFydCBvZiBhIHZhbGlkCi0gICAgICAvLyBXaW5kb3dzLXN0eWxlIGFic29sdXRlIHBhdGgu
Ci0gICAgICBzdHJpbmc6OnNpemVfdHlwZSBjb2xvbl9wb3MgPSB2YWx1ZS5maW5kX2ZpcnN0X29m
KCc6Jyk7Ci0gICAgICBpZiAoY29sb25fcG9zID09IHN0cmluZzo6bnBvcyB8fCBJc1dpbmRvd3NB
YnNvbHV0ZVBhdGgodmFsdWUpKSB7Ci0gICAgICAgIGRpcmVjdGl2ZS5vdXRwdXRfbG9jYXRpb24g
PSB2YWx1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRpcmVjdGl2ZS5wYXJhbWV0ZXIgPSB2
YWx1ZS5zdWJzdHIoMCwgY29sb25fcG9zKTsKLSAgICAgICAgZGlyZWN0aXZlLm91dHB1dF9sb2Nh
dGlvbiA9IHZhbHVlLnN1YnN0cihjb2xvbl9wb3MgKyAxKTsKLSAgICAgIH0KLQotICAgICAgb3V0
cHV0X2RpcmVjdGl2ZXNfLnB1c2hfYmFjayhkaXJlY3RpdmUpOwotICAgIH0KLSAgfQotCi0gIHJl
dHVybiBQQVJTRV9BUkdVTUVOVF9ET05FX0FORF9DT05USU5VRTsKLX0KLQotdm9pZCBDb21tYW5k
TGluZUludGVyZmFjZTo6UHJpbnRIZWxwVGV4dCgpIHsKLSAgLy8gU29ycnkgZm9yIGluZGVudGF0
aW9uIGhlcmU7IGxpbmUgd3JhcHBpbmcgd291bGQgYmUgdWdsaWVyLgotICBzdGQ6OmNlcnIgPDwK
LSJVc2FnZTogIiA8PCBleGVjdXRhYmxlX25hbWVfIDw8ICIgW09QVElPTl0gUFJPVE9fRklMRVNc
biIKLSJQYXJzZSBQUk9UT19GSUxFUyBhbmQgZ2VuZXJhdGUgb3V0cHV0IGJhc2VkIG9uIHRoZSBv
cHRpb25zIGdpdmVuOlxuIgotIiAgLUlQQVRILCAtLXByb3RvX3BhdGg9UEFUSCAgIFNwZWNpZnkg
dGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0byBzZWFyY2ggZm9yXG4iCi0iICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW1wb3J0cy4gIE1heSBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXM7
XG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgd2lsbCBiZSBz
ZWFyY2hlZCBpbiBvcmRlci4gIElmIG5vdFxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdpdmVuLCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1c2VkLlxuIgotIiAg
LS12ZXJzaW9uICAgICAgICAgICAgICAgICAgIFNob3cgdmVyc2lvbiBpbmZvIGFuZCBleGl0Llxu
IgotIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgIFNob3cgdGhpcyB0ZXh0IGFuZCBleGl0
LlxuIgotIiAgLS1lbmNvZGU9TUVTU0FHRV9UWVBFICAgICAgIFJlYWQgYSB0ZXh0LWZvcm1hdCBt
ZXNzYWdlIG9mIHRoZSBnaXZlbiB0eXBlXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnJvbSBzdGFuZGFyZCBpbnB1dCBhbmQgd3JpdGUgaXQgaW4gYmluYXJ5XG4iCi0iICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhbmRhcmQgb3V0cHV0LiAgVGhlIG1lc3NhZ2Ug
dHlwZSBtdXN0XG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZGVmaW5lZCBp
biBQUk9UT19GSUxFUyBvciB0aGVpciBpbXBvcnRzLlxuIgotIiAgLS1kZWNvZGU9TUVTU0FHRV9U
WVBFICAgICAgIFJlYWQgYSBiaW5hcnkgbWVzc2FnZSBvZiB0aGUgZ2l2ZW4gdHlwZSBmcm9tXG4i
Ci0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgaW5wdXQgYW5kIHdyaXRl
IGl0IGluIHRleHQgZm9ybWF0XG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8g
c3RhbmRhcmQgb3V0cHV0LiAgVGhlIG1lc3NhZ2UgdHlwZSBtdXN0XG4iCi0iICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmUgZGVmaW5lZCBpbiBQUk9UT19GSUxFUyBvciB0aGVpciBpbXBv
cnRzLlxuIgotIiAgLS1kZWNvZGVfcmF3ICAgICAgICAgICAgICAgIFJlYWQgYW4gYXJiaXRyYXJ5
IHByb3RvY29sIG1lc3NhZ2UgZnJvbVxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YW5kYXJkIGlucHV0IGFuZCB3cml0ZSB0aGUgcmF3IHRhZy92YWx1ZVxuIgotIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhaXJzIGluIHRleHQgZm9ybWF0IHRvIHN0YW5kYXJkIG91
dHB1dC4gIE5vXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVE9fRklMRVMg
c2hvdWxkIGJlIGdpdmVuIHdoZW4gdXNpbmcgdGhpc1xuIgotIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsYWcuXG4iCi0iICAtb0ZJTEUsICAgICAgICAgICAgICAgICAgICAgV3JpdGVz
IGEgRmlsZURlc2NyaXB0b3JTZXQgKGEgcHJvdG9jb2wgYnVmZmVyLFxuIgotIiAgICAtLWRlc2Ny
aXB0b3Jfc2V0X291dD1GSUxFIGRlZmluZWQgaW4gZGVzY3JpcHRvci5wcm90bykgY29udGFpbmlu
ZyBhbGwgb2ZcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5wdXQgZmls
ZXMgdG8gRklMRS5cbiIKLSIgIC0taW5jbHVkZV9pbXBvcnRzICAgICAgICAgICBXaGVuIHVzaW5n
IC0tZGVzY3JpcHRvcl9zZXRfb3V0LCBhbHNvIGluY2x1ZGVcbiIKLSIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbGwgZGVwZW5kZW5jaWVzIG9mIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGVc
biIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQsIHNvIHRoYXQgdGhlIHNldCBp
cyBzZWxmLWNvbnRhaW5lZC5cbiIKLSIgIC0taW5jbHVkZV9zb3VyY2VfaW5mbyAgICAgICBXaGVu
IHVzaW5nIC0tZGVzY3JpcHRvcl9zZXRfb3V0LCBkbyBub3Qgc3RyaXBcbiIKLSIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTb3VyY2VDb2RlSW5mbyBmcm9tIHRoZSBGaWxlRGVzY3JpcHRv
clByb3RvLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVzdWx0cyBp
biB2YXN0bHkgbGFyZ2VyIGRlc2NyaXB0b3JzIHRoYXRcbiIKLSIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbFxuIgotIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIG9mIGVhY2ggZGVjbCBpbiB0aGUg
c291cmNlIGZpbGUgYXNcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWxsIGFz
IHN1cnJvdW5kaW5nIGNvbW1lbnRzLlxuIgotIiAgLS1kZXBlbmRlbmN5X291dD1GSUxFICAgICAg
IFdyaXRlIGEgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZSBpbiB0aGUgZm9ybWF0XG4iCi0iICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgYnkgbWFrZS4gVGhpcyB3cml0ZXMgdGhl
IHRyYW5zaXRpdmVcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgb2YgaW5w
dXQgZmlsZSBwYXRocyB0byBGSUxFXG4iCi0iICAtLWVycm9yX2Zvcm1hdD1GT1JNQVQgICAgICAg
U2V0IHRoZSBmb3JtYXQgaW4gd2hpY2ggdG8gcHJpbnQgZXJyb3JzLlxuIgotIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZPUk1BVCBtYXkgYmUgJ2djYycgKHRoZSBkZWZhdWx0KSBvciAn
bXN2cydcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWljcm9zb2Z0IFZpc3Vh
bCBTdHVkaW8gZm9ybWF0KS5cbiIKLSIgIC0tcHJpbnRfZnJlZV9maWVsZF9udW1iZXJzICBQcmlu
dCB0aGUgZnJlZSBmaWVsZCBudW1iZXJzIG9mIHRoZSBtZXNzYWdlc1xuIgotIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZWQgaW4gdGhlIGdpdmVuIHByb3RvIGZpbGVzLiBHcm91
cHMgc2hhcmVcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBmaWVs
ZCBudW1iZXIgc3BhY2Ugd2l0aCB0aGUgcGFyZW50IFxuIgotIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UuIEV4dGVuc2lvbiByYW5nZXMgYXJlIGNvdW50ZWQgYXMgXG4iCi0i
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXBpZWQgZmllbGRzIG51bWJlcnMuXG4i
Ci0gICAgICA8PCBzdGQ6OmVuZGw7Ci0gIGlmICghcGx1Z2luX3ByZWZpeF8uZW1wdHkoKSkgewot
ICAgIHN0ZDo6Y2VyciA8PAotIiAgLS1wbHVnaW49RVhFQ1VUQUJMRSAgICAgICAgIFNwZWNpZmll
cyBhIHBsdWdpbiBleGVjdXRhYmxlIHRvIHVzZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb3JtYWxseSwgcHJvdG9jIHNlYXJjaGVzIHRoZSBQQVRIIGZvclxuIgotIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMsIGJ1dCB5b3UgbWF5IHNwZWNpZnkgYWRk
aXRpb25hbFxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVzIG5v
dCBpbiB0aGUgcGF0aCB1c2luZyB0aGlzIGZsYWcuXG4iCi0iICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQWRkaXRpb25hbGx5LCBFWEVDVVRBQkxFIG1heSBiZSBvZiB0aGUgZm9ybVxuIgot
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUU9UEFUSCwgaW4gd2hpY2ggY2FzZSB0
aGUgZ2l2ZW4gcGx1Z2luIG5hbWVcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
cyBtYXBwZWQgdG8gdGhlIGdpdmVuIGV4ZWN1dGFibGUgZXZlbiBpZlxuIgotIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoZSBleGVjdXRhYmxlJ3Mgb3duIG5hbWUgZGlmZmVycy4iIDw8
IHN0ZDo6ZW5kbDsKLSAgfQotCi0gIGZvciAoR2VuZXJhdG9yTWFwOjppdGVyYXRvciBpdGVyID0g
Z2VuZXJhdG9yc19ieV9mbGFnX25hbWVfLmJlZ2luKCk7Ci0gICAgICAgaXRlciAhPSBnZW5lcmF0
b3JzX2J5X2ZsYWdfbmFtZV8uZW5kKCk7ICsraXRlcikgewotICAgIC8vIEZJWE1FKGtlbnRvbik6
ICBJZiB0aGUgdGV4dCBpcyBsb25nIGVub3VnaCBpdCB3aWxsIHdyYXAsIHdoaWNoIGlzIHVnbHks
Ci0gICAgLy8gICBidXQgZml4aW5nIHRoaXMgbmljZWx5IChlLmcuIHNwbGl0dGluZyBvbiBzcGFj
ZXMpIGlzIHByb2JhYmx5IG1vcmUKLSAgICAvLyAgIHRyb3VibGUgdGhhbiBpdCdzIHdvcnRoLgot
ICAgIHN0ZDo6Y2VyciA8PCAiICAiIDw8IGl0ZXItPmZpcnN0IDw8ICI9T1VUX0RJUiAiCi0gICAg
ICAgICAgICAgIDw8IHN0cmluZygxOSAtIGl0ZXItPmZpcnN0LnNpemUoKSwgJyAnKSAgLy8gU3Bh
Y2VzIGZvciBhbGlnbm1lbnQuCi0gICAgICAgICAgICAgIDw8IGl0ZXItPnNlY29uZC5oZWxwX3Rl
eHQgPDwgc3RkOjplbmRsOwotICB9Ci19Ci0KLWJvb2wgQ29tbWFuZExpbmVJbnRlcmZhY2U6Okdl
bmVyYXRlT3V0cHV0KAotICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWxlRGVzY3JpcHRvcio+JiBw
YXJzZWRfZmlsZXMsCi0gICAgY29uc3QgT3V0cHV0RGlyZWN0aXZlJiBvdXRwdXRfZGlyZWN0aXZl
LAotICAgIEdlbmVyYXRvckNvbnRleHQqIGdlbmVyYXRvcl9jb250ZXh0KSB7Ci0gIC8vIENhbGwg
dGhlIGdlbmVyYXRvci4KLSAgc3RyaW5nIGVycm9yOwotICBpZiAob3V0cHV0X2RpcmVjdGl2ZS5n
ZW5lcmF0b3IgPT0gTlVMTCkgewotICAgIC8vIFRoaXMgaXMgYSBwbHVnaW4uCi0gICAgR09PR0xF
X0NIRUNLKEhhc1ByZWZpeFN0cmluZyhvdXRwdXRfZGlyZWN0aXZlLm5hbWUsICItLSIpICYmCi0g
ICAgICAgICAgSGFzU3VmZml4U3RyaW5nKG91dHB1dF9kaXJlY3RpdmUubmFtZSwgIl9vdXQiKSkK
LSAgICAgICAgPDwgIkJhZCBuYW1lIGZvciBwbHVnaW4gZ2VuZXJhdG9yOiAiIDw8IG91dHB1dF9k
aXJlY3RpdmUubmFtZTsKLQotICAgIC8vIFN0cmlwIHRoZSAiLS0iIGFuZCAiX291dCIgYW5kIGFk
ZCB0aGUgcGx1Z2luIHByZWZpeC4KLSAgICBzdHJpbmcgcGx1Z2luX25hbWUgPSBwbHVnaW5fcHJl
Zml4XyArICJnZW4tIiArCi0gICAgICAgIG91dHB1dF9kaXJlY3RpdmUubmFtZS5zdWJzdHIoMiwg
b3V0cHV0X2RpcmVjdGl2ZS5uYW1lLnNpemUoKSAtIDYpOwotCi0gICAgaWYgKCFHZW5lcmF0ZVBs
dWdpbk91dHB1dChwYXJzZWRfZmlsZXMsIHBsdWdpbl9uYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0X2RpcmVjdGl2ZS5wYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3JfY29udGV4dCwgJmVycm9yKSkgewotICAgICAgc3RkOjpj
ZXJyIDw8IG91dHB1dF9kaXJlY3RpdmUubmFtZSA8PCAiOiAiIDw8IGVycm9yIDw8IHN0ZDo6ZW5k
bDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gUmVndWxh
ciBnZW5lcmF0b3IuCi0gICAgc3RyaW5nIHBhcmFtZXRlcnMgPSBvdXRwdXRfZGlyZWN0aXZlLnBh
cmFtZXRlcjsKLSAgICBpZiAoIWdlbmVyYXRvcl9wYXJhbWV0ZXJzX1tvdXRwdXRfZGlyZWN0aXZl
Lm5hbWVdLmVtcHR5KCkpIHsKLSAgICAgIGlmICghcGFyYW1ldGVycy5lbXB0eSgpKSB7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIsIik7Ci0gICAgICB9Ci0gICAgICBwYXJhbWV0ZXJzLmFw
cGVuZChnZW5lcmF0b3JfcGFyYW1ldGVyc19bb3V0cHV0X2RpcmVjdGl2ZS5uYW1lXSk7Ci0gICAg
fQotICAgIGlmIChvdXRwdXRfZGlyZWN0aXZlLmdlbmVyYXRvci0+SGFzR2VuZXJhdGVBbGwoKSkg
ewotICAgICAgaWYgKCFvdXRwdXRfZGlyZWN0aXZlLmdlbmVyYXRvci0+R2VuZXJhdGVBbGwoCi0g
ICAgICAgICAgcGFyc2VkX2ZpbGVzLCBwYXJhbWV0ZXJzLCBnZW5lcmF0b3JfY29udGV4dCwgJmVy
cm9yKSkgewotICAgICAgICAgIC8vIEdlbmVyYXRvciByZXR1cm5lZCBhbiBlcnJvci4KLSAgICAg
ICAgICBzdGQ6OmNlcnIgPDwgb3V0cHV0X2RpcmVjdGl2ZS5uYW1lIDw8ICI6ICIKLSAgICAgICAg
ICAgICAgICAgICAgPDwgIjogIiA8PCBlcnJvciA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHBhcnNlZF9maWxlcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoIW91dHB1dF9kaXJl
Y3RpdmUuZ2VuZXJhdG9yLT5HZW5lcmF0ZShwYXJzZWRfZmlsZXNbaV0sIHBhcmFtZXRlcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRv
cl9jb250ZXh0LCAmZXJyb3IpKSB7Ci0gICAgICAgICAgLy8gR2VuZXJhdG9yIHJldHVybmVkIGFu
IGVycm9yLgotICAgICAgICAgIHN0ZDo6Y2VyciA8PCBvdXRwdXRfZGlyZWN0aXZlLm5hbWUgPDwg
IjogIiA8PCBwYXJzZWRfZmlsZXNbaV0tPm5hbWUoKQotICAgICAgICAgICAgICAgICAgICA8PCAi
OiAiIDw8IGVycm9yIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBD
b21tYW5kTGluZUludGVyZmFjZTo6R2VuZXJhdGVEZXBlbmRlbmN5TWFuaWZlc3RGaWxlKAotICAg
IGNvbnN0IHZlY3Rvcjxjb25zdCBGaWxlRGVzY3JpcHRvcio+JiBwYXJzZWRfZmlsZXMsCi0gICAg
Y29uc3QgR2VuZXJhdG9yQ29udGV4dE1hcCYgb3V0cHV0X2RpcmVjdG9yaWVzLAotICAgIERpc2tT
b3VyY2VUcmVlKiBzb3VyY2VfdHJlZSkgewotICBGaWxlRGVzY3JpcHRvclNldCBmaWxlX3NldDsK
LQotICBzZXQ8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiBhbHJlYWR5X3NlZW47Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgcGFyc2VkX2ZpbGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgR2V0VHJhbnNpdGl2
ZURlcGVuZGVuY2llcyhwYXJzZWRfZmlsZXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmFscmVhZHlfc2VlbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGVfc2V0Lm11dGFibGVfZmlsZSgpKTsKLSAgfQotCi0gIHZlY3Rvcjxz
dHJpbmc+IG91dHB1dF9maWxlbmFtZXM7Ci0gIGZvciAoR2VuZXJhdG9yQ29udGV4dE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG91dHB1dF9kaXJlY3Rvcmllcy5iZWdpbigpOwotICAgICAgIGl0
ZXIgIT0gb3V0cHV0X2RpcmVjdG9yaWVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICBjb25zdCBzdHJp
bmcmIGxvY2F0aW9uID0gaXRlci0+Zmlyc3Q7Ci0gICAgR2VuZXJhdG9yQ29udGV4dEltcGwqIGRp
cmVjdG9yeSA9IGl0ZXItPnNlY29uZDsKLSAgICB2ZWN0b3I8c3RyaW5nPiByZWxhdGl2ZV9vdXRw
dXRfZmlsZW5hbWVzOwotICAgIGRpcmVjdG9yeS0+R2V0T3V0cHV0RmlsZW5hbWVzKCZyZWxhdGl2
ZV9vdXRwdXRfZmlsZW5hbWVzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlbGF0aXZlX291
dHB1dF9maWxlbmFtZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIHN0cmluZyBvdXRwdXRfZmlsZW5h
bWUgPSBsb2NhdGlvbiArIHJlbGF0aXZlX291dHB1dF9maWxlbmFtZXNbaV07Ci0gICAgICBpZiAo
b3V0cHV0X2ZpbGVuYW1lLmNvbXBhcmUoMCwgMiwgIi4vIikgPT0gMCkgewotICAgICAgICBvdXRw
dXRfZmlsZW5hbWUgPSBvdXRwdXRfZmlsZW5hbWUuc3Vic3RyKDIpOwotICAgICAgfQotICAgICAg
b3V0cHV0X2ZpbGVuYW1lcy5wdXNoX2JhY2sob3V0cHV0X2ZpbGVuYW1lKTsKLSAgICB9Ci0gIH0K
LQotICBpbnQgZmQ7Ci0gIGRvIHsKLSAgICBmZCA9IG9wZW4oZGVwZW5kZW5jeV9vdXRfbmFtZV8u
Y19zdHIoKSwKLSAgICAgICAgICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQyB8IE9f
QklOQVJZLCAwNjY2KTsKLSAgfSB3aGlsZSAoZmQgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLQot
ICBpZiAoZmQgPCAwKSB7Ci0gICAgcGVycm9yKGRlcGVuZGVuY3lfb3V0X25hbWVfLmNfc3RyKCkp
OwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlvOjpGaWxlT3V0cHV0U3RyZWFtIG91dChm
ZCk7Ci0gIGlvOjpQcmludGVyIHByaW50ZXIoJm91dCwgJyQnKTsKLQotICBmb3IgKGludCBpID0g
MDsgaSA8IG91dHB1dF9maWxlbmFtZXMuc2l6ZSgpOyBpKyspIHsKLSAgICBwcmludGVyLlByaW50
KG91dHB1dF9maWxlbmFtZXNbaV0uY19zdHIoKSk7Ci0gICAgaWYgKGkgPT0gb3V0cHV0X2ZpbGVu
YW1lcy5zaXplKCkgLSAxKSB7Ci0gICAgICBwcmludGVyLlByaW50KCI6Iik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHByaW50ZXIuUHJpbnQoIiBcXFxuIik7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBmaWxlX3NldC5maWxlX3NpemUoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmls
ZURlc2NyaXB0b3JQcm90byYgZmlsZSA9IGZpbGVfc2V0LmZpbGUoaSk7Ci0gICAgY29uc3Qgc3Ry
aW5nJiB2aXJ0dWFsX2ZpbGUgPSBmaWxlLm5hbWUoKTsKLSAgICBzdHJpbmcgZGlza19maWxlOwot
ICAgIGlmIChzb3VyY2VfdHJlZSAmJgotICAgICAgICBzb3VyY2VfdHJlZS0+VmlydHVhbEZpbGVU
b0Rpc2tGaWxlKHZpcnR1YWxfZmlsZSwgJmRpc2tfZmlsZSkpIHsKLSAgICAgIHByaW50ZXIuUHJp
bnQoIiAkZGlza19maWxlJCIsICJkaXNrX2ZpbGUiLCBkaXNrX2ZpbGUpOwotICAgICAgaWYgKGkg
PCBmaWxlX3NldC5maWxlX3NpemUoKSAtIDEpIHByaW50ZXIuUHJpbnQoIlxcXG4iKTsKLSAgICB9
IGVsc2UgewotICAgICAgc3RkOjpjZXJyIDw8ICJVbmFibGUgdG8gaWRlbnRpZnkgcGF0aCBmb3Ig
ZmlsZSAiIDw8IHZpcnR1YWxfZmlsZQotICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBDb21tYW5kTGluZUludGVyZmFjZTo6R2VuZXJhdGVQbHVnaW5PdXRwdXQoCi0gICAgY29uc3Qg
dmVjdG9yPGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4mIHBhcnNlZF9maWxlcywKLSAgICBjb25zdCBz
dHJpbmcmIHBsdWdpbl9uYW1lLAotICAgIGNvbnN0IHN0cmluZyYgcGFyYW1ldGVyLAotICAgIEdl
bmVyYXRvckNvbnRleHQqIGdlbmVyYXRvcl9jb250ZXh0LAotICAgIHN0cmluZyogZXJyb3IpIHsK
LSAgQ29kZUdlbmVyYXRvclJlcXVlc3QgcmVxdWVzdDsKLSAgQ29kZUdlbmVyYXRvclJlc3BvbnNl
IHJlc3BvbnNlOwotCi0gIC8vIEJ1aWxkIHRoZSByZXF1ZXN0LgotICBpZiAoIXBhcmFtZXRlci5l
bXB0eSgpKSB7Ci0gICAgcmVxdWVzdC5zZXRfcGFyYW1ldGVyKHBhcmFtZXRlcik7Ci0gIH0KLQot
ICBzZXQ8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiBhbHJlYWR5X3NlZW47Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgcGFyc2VkX2ZpbGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgcmVxdWVzdC5hZGRfZmls
ZV90b19nZW5lcmF0ZShwYXJzZWRfZmlsZXNbaV0tPm5hbWUoKSk7Ci0gICAgR2V0VHJhbnNpdGl2
ZURlcGVuZGVuY2llcyhwYXJzZWRfZmlsZXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cnVlLCAgLy8gSW5jbHVkZSBqc29uX25hbWUgZm9yIHBsdWdpbnMuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlLCAgLy8gSW5jbHVkZSBzb3VyY2UgY29kZSBpbmZvLgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFscmVhZHlfc2VlbiwgcmVxdWVzdC5tdXRh
YmxlX3Byb3RvX2ZpbGUoKSk7Ci0gIH0KLQotICAvLyBJbnZva2UgdGhlIHBsdWdpbi4KLSAgU3Vi
cHJvY2VzcyBzdWJwcm9jZXNzOwotCi0gIGlmIChwbHVnaW5zXy5jb3VudChwbHVnaW5fbmFtZSkg
PiAwKSB7Ci0gICAgc3VicHJvY2Vzcy5TdGFydChwbHVnaW5zX1twbHVnaW5fbmFtZV0sIFN1YnBy
b2Nlc3M6OkVYQUNUX05BTUUpOwotICB9IGVsc2UgewotICAgIHN1YnByb2Nlc3MuU3RhcnQocGx1
Z2luX25hbWUsIFN1YnByb2Nlc3M6OlNFQVJDSF9QQVRIKTsKLSAgfQotCi0gIHN0cmluZyBjb21t
dW5pY2F0ZV9lcnJvcjsKLSAgaWYgKCFzdWJwcm9jZXNzLkNvbW11bmljYXRlKHJlcXVlc3QsICZy
ZXNwb25zZSwgJmNvbW11bmljYXRlX2Vycm9yKSkgewotICAgICplcnJvciA9IHN0cmluZ3M6OlN1
YnN0aXR1dGUoIiQwOiAkMSIsIHBsdWdpbl9uYW1lLCBjb21tdW5pY2F0ZV9lcnJvcik7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gV3JpdGUgdGhlIGZpbGVzLiAgV2UgZG8gdGhpcyBl
dmVuIGlmIHRoZXJlIHdhcyBhIGdlbmVyYXRvciBlcnJvciBpbiBvcmRlcgotICAvLyB0byBtYXRj
aCB0aGUgYmVoYXZpb3Igb2YgYSBjb21waWxlZC1pbiBnZW5lcmF0b3IuCi0gIGdvb2dsZTo6cHJv
dG9idWY6OnNjb3BlZF9wdHI8aW86Olplcm9Db3B5T3V0cHV0U3RyZWFtPiBjdXJyZW50X291dHB1
dDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXNwb25zZS5maWxlX3NpemUoKTsgaSsrKSB7Ci0g
ICAgY29uc3QgQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpGaWxlJiBvdXRwdXRfZmlsZSA9IHJlc3Bv
bnNlLmZpbGUoaSk7Ci0KLSAgICBpZiAoIW91dHB1dF9maWxlLmluc2VydGlvbl9wb2ludCgpLmVt
cHR5KCkpIHsKLSAgICAgIC8vIE9wZW4gYSBmaWxlIGZvciBpbnNlcnQuCi0gICAgICAvLyBXZSBy
ZXNldCBjdXJyZW50X291dHB1dCB0byBOVUxMIGZpcnN0IHNvIHRoYXQgdGhlIG9sZCBmaWxlIGlz
IGNsb3NlZAotICAgICAgLy8gYmVmb3JlIHRoZSBuZXcgb25lIGlzIG9wZW5lZC4KLSAgICAgIGN1
cnJlbnRfb3V0cHV0LnJlc2V0KCk7Ci0gICAgICBjdXJyZW50X291dHB1dC5yZXNldChnZW5lcmF0
b3JfY29udGV4dC0+T3BlbkZvckluc2VydCgKLSAgICAgICAgICBvdXRwdXRfZmlsZS5uYW1lKCks
IG91dHB1dF9maWxlLmluc2VydGlvbl9wb2ludCgpKSk7Ci0gICAgfSBlbHNlIGlmICghb3V0cHV0
X2ZpbGUubmFtZSgpLmVtcHR5KCkpIHsKLSAgICAgIC8vIFN0YXJ0aW5nIGEgbmV3IGZpbGUuICBP
cGVuIGl0LgotICAgICAgLy8gV2UgcmVzZXQgY3VycmVudF9vdXRwdXQgdG8gTlVMTCBmaXJzdCBz
byB0aGF0IHRoZSBvbGQgZmlsZSBpcyBjbG9zZWQKLSAgICAgIC8vIGJlZm9yZSB0aGUgbmV3IG9u
ZSBpcyBvcGVuZWQuCi0gICAgICBjdXJyZW50X291dHB1dC5yZXNldCgpOwotICAgICAgY3VycmVu
dF9vdXRwdXQucmVzZXQoZ2VuZXJhdG9yX2NvbnRleHQtPk9wZW4ob3V0cHV0X2ZpbGUubmFtZSgp
KSk7Ci0gICAgfSBlbHNlIGlmIChjdXJyZW50X291dHB1dCA9PSBOVUxMKSB7Ci0gICAgICAqZXJy
b3IgPSBzdHJpbmdzOjpTdWJzdGl0dXRlKAotICAgICAgICAiJDA6IEZpcnN0IGZpbGUgY2h1bmsg
cmV0dXJuZWQgYnkgcGx1Z2luIGRpZCBub3Qgc3BlY2lmeSBhIGZpbGUgbmFtZS4iLAotICAgICAg
ICBwbHVnaW5fbmFtZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVXNl
IENvZGVkT3V0cHV0U3RyZWFtIGZvciBjb252ZW5pZW5jZTsgb3RoZXJ3aXNlIHdlJ2QgbmVlZCB0
byBwcm92aWRlCi0gICAgLy8gb3VyIG93biBidWZmZXItY29weWluZyBsb29wLgotICAgIGlvOjpD
b2RlZE91dHB1dFN0cmVhbSB3cml0ZXIoY3VycmVudF9vdXRwdXQuZ2V0KCkpOwotICAgIHdyaXRl
ci5Xcml0ZVN0cmluZyhvdXRwdXRfZmlsZS5jb250ZW50KCkpOwotICB9Ci0KLSAgLy8gQ2hlY2sg
Zm9yIGVycm9ycy4KLSAgaWYgKCFyZXNwb25zZS5lcnJvcigpLmVtcHR5KCkpIHsKLSAgICAvLyBH
ZW5lcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3IuCi0gICAgKmVycm9yID0gcmVzcG9uc2UuZXJyb3Io
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBD
b21tYW5kTGluZUludGVyZmFjZTo6RW5jb2RlT3JEZWNvZGUoY29uc3QgRGVzY3JpcHRvclBvb2wq
IHBvb2wpIHsKLSAgLy8gTG9vayB1cCB0aGUgdHlwZS4KLSAgY29uc3QgRGVzY3JpcHRvciogdHlw
ZSA9IHBvb2wtPkZpbmRNZXNzYWdlVHlwZUJ5TmFtZShjb2RlY190eXBlXyk7Ci0gIGlmICh0eXBl
ID09IE5VTEwpIHsKLSAgICBzdGQ6OmNlcnIgPDwgIlR5cGUgbm90IGRlZmluZWQ6ICIgPDwgY29k
ZWNfdHlwZV8gPDwgc3RkOjplbmRsOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIER5bmFt
aWNNZXNzYWdlRmFjdG9yeSBkeW5hbWljX2ZhY3RvcnkocG9vbCk7Ci0gIGdvb2dsZTo6cHJvdG9i
dWY6OnNjb3BlZF9wdHI8TWVzc2FnZT4gbWVzc2FnZShkeW5hbWljX2ZhY3RvcnkuR2V0UHJvdG90
eXBlKHR5cGUpLT5OZXcoKSk7Ci0KLSAgaWYgKG1vZGVfID09IE1PREVfRU5DT0RFKSB7Ci0gICAg
U2V0RmRUb1RleHRNb2RlKFNURElOX0ZJTEVOTyk7Ci0gICAgU2V0RmRUb0JpbmFyeU1vZGUoU1RE
T1VUX0ZJTEVOTyk7Ci0gIH0gZWxzZSB7Ci0gICAgU2V0RmRUb0JpbmFyeU1vZGUoU1RESU5fRklM
RU5PKTsKLSAgICBTZXRGZFRvVGV4dE1vZGUoU1RET1VUX0ZJTEVOTyk7Ci0gIH0KLQotICBpbzo6
RmlsZUlucHV0U3RyZWFtIGluKFNURElOX0ZJTEVOTyk7Ci0gIGlvOjpGaWxlT3V0cHV0U3RyZWFt
IG91dChTVERPVVRfRklMRU5PKTsKLQotICBpZiAobW9kZV8gPT0gTU9ERV9FTkNPREUpIHsKLSAg
ICAvLyBJbnB1dCBpcyB0ZXh0LgotICAgIEVycm9yUHJpbnRlciBlcnJvcl9jb2xsZWN0b3IoZXJy
b3JfZm9ybWF0Xyk7Ci0gICAgVGV4dEZvcm1hdDo6UGFyc2VyIHBhcnNlcjsKLSAgICBwYXJzZXIu
UmVjb3JkRXJyb3JzVG8oJmVycm9yX2NvbGxlY3Rvcik7Ci0gICAgcGFyc2VyLkFsbG93UGFydGlh
bE1lc3NhZ2UodHJ1ZSk7Ci0KLSAgICBpZiAoIXBhcnNlci5QYXJzZSgmaW4sIG1lc3NhZ2UuZ2V0
KCkpKSB7Ci0gICAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBwYXJzZSBpbnB1dC4iIDw8IHN0
ZDo6ZW5kbDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8g
SW5wdXQgaXMgYmluYXJ5LgotICAgIGlmICghbWVzc2FnZS0+UGFyc2VQYXJ0aWFsRnJvbVplcm9D
b3B5U3RyZWFtKCZpbikpIHsKLSAgICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIHBhcnNlIGlu
cHV0LiIgPDwgc3RkOjplbmRsOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0g
IGlmICghbWVzc2FnZS0+SXNJbml0aWFsaXplZCgpKSB7Ci0gICAgc3RkOjpjZXJyIDw8ICJ3YXJu
aW5nOiAgSW5wdXQgbWVzc2FnZSBpcyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogICIKLSAgICAg
ICAgICAgICAgPDwgbWVzc2FnZS0+SW5pdGlhbGl6YXRpb25FcnJvclN0cmluZygpIDw8IHN0ZDo6
ZW5kbDsKLSAgfQotCi0gIGlmIChtb2RlXyA9PSBNT0RFX0VOQ09ERSkgewotICAgIC8vIE91dHB1
dCBpcyBiaW5hcnkuCi0gICAgaWYgKCFtZXNzYWdlLT5TZXJpYWxpemVQYXJ0aWFsVG9aZXJvQ29w
eVN0cmVhbSgmb3V0KSkgewotICAgICAgc3RkOjpjZXJyIDw8ICJvdXRwdXQ6IEkvTyBlcnJvci4i
IDw8IHN0ZDo6ZW5kbDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0g
ICAgLy8gT3V0cHV0IGlzIHRleHQuCi0gICAgaWYgKCFUZXh0Rm9ybWF0OjpQcmludCgqbWVzc2Fn
ZSwgJm91dCkpIHsKLSAgICAgIHN0ZDo6Y2VyciA8PCAib3V0cHV0OiBJL08gZXJyb3IuIiA8PCBz
dGQ6OmVuZGw7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQ29tbWFuZExpbmVJbnRlcmZhY2U6OldyaXRlRGVzY3JpcHRvclNldCgK
LSAgICBjb25zdCB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiBwYXJzZWRfZmlsZXMpIHsK
LSAgRmlsZURlc2NyaXB0b3JTZXQgZmlsZV9zZXQ7Ci0KLSAgaWYgKGltcG9ydHNfaW5fZGVzY3Jp
cHRvcl9zZXRfKSB7Ci0gICAgc2V0PGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4gYWxyZWFkeV9zZWVu
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyc2VkX2ZpbGVzLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICBHZXRUcmFuc2l0aXZlRGVwZW5kZW5jaWVzKHBhcnNlZF9maWxlc1tpXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIC8vIEluY2x1ZGUganNvbl9uYW1lCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9pbmZvX2luX2Rlc2NyaXB0b3Jfc2V0
XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFscmVhZHlfc2VlbiwgZmlsZV9z
ZXQubXV0YWJsZV9maWxlKCkpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBzZXQ8Y29uc3QgRmls
ZURlc2NyaXB0b3IqPiBhbHJlYWR5X3NlZW47Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJz
ZWRfZmlsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIGlmICghYWxyZWFkeV9zZWVuLmluc2VydChw
YXJzZWRfZmlsZXNbaV0pLnNlY29uZCkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAg
ICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8qIGZpbGVfcHJvdG8gPSBmaWxlX3NldC5hZGRfZmlsZSgp
OwotICAgICAgcGFyc2VkX2ZpbGVzW2ldLT5Db3B5VG8oZmlsZV9wcm90byk7Ci0gICAgICBwYXJz
ZWRfZmlsZXNbaV0tPkNvcHlKc29uTmFtZVRvKGZpbGVfcHJvdG8pOwotICAgICAgaWYgKHNvdXJj
ZV9pbmZvX2luX2Rlc2NyaXB0b3Jfc2V0XykgewotICAgICAgICBwYXJzZWRfZmlsZXNbaV0tPkNv
cHlTb3VyY2VDb2RlSW5mb1RvKGZpbGVfcHJvdG8pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IGludCBmZDsKLSAgZG8gewotICAgIGZkID0gb3BlbihkZXNjcmlwdG9yX3NldF9uYW1lXy5jX3N0
cigpLAotICAgICAgICAgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19CSU5B
UlksIDA2NjYpOwotICB9IHdoaWxlIChmZCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotCi0gIGlm
IChmZCA8IDApIHsKLSAgICBwZXJyb3IoZGVzY3JpcHRvcl9zZXRfbmFtZV8uY19zdHIoKSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaW86OkZpbGVPdXRwdXRTdHJlYW0gb3V0KGZkKTsK
LSAgaWYgKCFmaWxlX3NldC5TZXJpYWxpemVUb1plcm9Db3B5U3RyZWFtKCZvdXQpKSB7Ci0gICAg
c3RkOjpjZXJyIDw8IGRlc2NyaXB0b3Jfc2V0X25hbWVfIDw8ICI6ICIgPDwgc3RyZXJyb3Iob3V0
LkdldEVycm5vKCkpCi0gICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgICBvdXQuQ2xvc2Uo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKCFvdXQuQ2xvc2UoKSkgewotICAgIHN0
ZDo6Y2VyciA8PCBkZXNjcmlwdG9yX3NldF9uYW1lXyA8PCAiOiAiIDw8IHN0cmVycm9yKG91dC5H
ZXRFcnJubygpKQotICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29tbWFuZExpbmVJbnRlcmZhY2U6
OkdldFRyYW5zaXRpdmVEZXBlbmRlbmNpZXMoCi0gICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZp
bGUsCi0gICAgYm9vbCBpbmNsdWRlX2pzb25fbmFtZSwKLSAgICBib29sIGluY2x1ZGVfc291cmNl
X2NvZGVfaW5mbywKLSAgICBzZXQ8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiogYWxyZWFkeV9zZWVu
LAotICAgIFJlcGVhdGVkUHRyRmllbGQ8RmlsZURlc2NyaXB0b3JQcm90bz4qIG91dHB1dCkgewot
ICBpZiAoIWFscmVhZHlfc2Vlbi0+aW5zZXJ0KGZpbGUpLnNlY29uZCkgewotICAgIC8vIEFscmVh
ZHkgc2F3IHRoaXMgZmlsZS4gIFNraXAuCi0gICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gQWRkIGFs
bCBkZXBlbmRlbmNpZXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+ZGVwZW5kZW5jeV9j
b3VudCgpOyBpKyspIHsKLSAgICBHZXRUcmFuc2l0aXZlRGVwZW5kZW5jaWVzKGZpbGUtPmRlcGVu
ZGVuY3koaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2pzb25fbmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfc291cmNlX2NvZGVfaW5m
bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlfc2Vlbiwgb3V0cHV0KTsK
LSAgfQotCi0gIC8vIEFkZCB0aGlzIGZpbGUuCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8qIG5ld19k
ZXNjcmlwdG9yID0gb3V0cHV0LT5BZGQoKTsKLSAgZmlsZS0+Q29weVRvKG5ld19kZXNjcmlwdG9y
KTsKLSAgaWYgKGluY2x1ZGVfanNvbl9uYW1lKSB7Ci0gICAgZmlsZS0+Q29weUpzb25OYW1lVG8o
bmV3X2Rlc2NyaXB0b3IpOwotICB9Ci0gIGlmIChpbmNsdWRlX3NvdXJjZV9jb2RlX2luZm8pIHsK
LSAgICBmaWxlLT5Db3B5U291cmNlQ29kZUluZm9UbyhuZXdfZGVzY3JpcHRvcik7Ci0gIH0KLX0K
LQotbmFtZXNwYWNlIHsKLQotLy8gVXRpbGl0eSBmdW5jdGlvbiBmb3IgUHJpbnRGcmVlRmllbGRO
dW1iZXJzLgotLy8gU3RvcmVzIG9jY3VwaWVkIHJhbmdlcyBpbnRvIHRoZSByYW5nZXMgcGFyYW1l
dGVyLCBhbmQgbmV4dCBsZXZlbCBvZiBzdWIKLS8vIG1lc3NhZ2UgdHlwZXMgaW50byB0aGUgbmVz
dGVkX21lc3NhZ2VzIHBhcmFtZXRlci4gIFRoZSBGaWVsZFJhbmdlIGlzIGxlZnQKLS8vIGluY2x1
c2l2ZSwgcmlnaHQgZXhjbHVzaXZlLiBpLmUuIFthLCBiKS4KLS8vCi0vLyBOZXN0ZWQgTWVzc2Fn
ZXM6Ci0vLyBOb3RlIHRoYXQgaXQgb25seSBzdG9yZXMgdGhlIG5lc3RlZCBtZXNzYWdlIHR5cGUs
IGlmZiB0aGUgbmVzdGVkIHR5cGUgaXMKLS8vIGVpdGhlciBhIGRpcmVjdCBjaGlsZCBvZiB0aGUg
Z2l2ZW4gZGVzY3JpcHRvciwgb3IgdGhlIG5lc3RlZCB0eXBlIGlzIGEKLS8vIGRlY2VuZGVudCBv
ZiB0aGUgZ2l2ZW4gZGVzY3JpcHRvciBhbmQgYWxsIHRoZSBub2RlcyBiZXR3ZWVuIHRoZQotLy8g
bmVzdGVkIHR5cGUgYW5kIHRoZSBnaXZlbiBkZXNjcmlwdG9yIGFyZSBncm91cCB0eXBlcy4gZS5n
LgotLy8KLS8vIG1lc3NhZ2UgRm9vIHsKLS8vICAgbWVzc2FnZSBCYXIgewotLy8gICAgIG1lc3Nh
Z2UgTmVzdGVkQmFyIHt9Ci0vLyAgIH0KLS8vICAgZ3JvdXAgQmF6ID0gMSB7Ci0vLyAgICAgZ3Jv
dXAgTmVzdGVkQmF6R3JvdXAgPSAyIHsKLS8vICAgICAgIG1lc3NhZ2UgUXV6IHsKLS8vICAgICAg
ICAgbWVzc2FnZSBOZXN0ZWRRdXoge30KLS8vICAgICAgIH0KLS8vICAgICB9Ci0vLyAgICAgbWVz
c2FnZSBOZXN0ZWRCYXoge30KLS8vICAgfQotLy8gfQotLy8KLS8vIEluIHRoaXMgY2FzZSwgQmFy
LCBRdXogYW5kIE5lc3RlZEJheiB3aWxsIGJlIGFkZGVkIGludG8gdGhlIG5lc3RlZCB0eXBlcy4K
LS8vIFNpbmNlIGZyZWUgZmllbGQgbnVtYmVycyBvZiBncm91cCB0eXBlcyB3aWxsIG5vdCBiZSBw
cmludGVkLCB0aGlzIG1ha2VzIHN1cmUKLS8vIHRoZSBuZXN0ZWQgbWVzc2FnZSB0eXBlcyBpbiBn
cm91cHMgd2lsbCBub3QgYmUgZHJvcHBlZC4gVGhlIG5lc3RlZF9tZXNzYWdlcwotLy8gcGFyYW1l
dGVyIHdpbGwgY29udGFpbiB0aGUgZGlyZWN0IGNoaWxkcmVuICh3aGVuIGdyb3VwcyBhcmUgaWdu
b3JlZCBpbiB0aGUKLS8vIHRyZWUpIG9mIHRoZSBnaXZlbiBkZXNjcmlwdG9yIGZvciB0aGUgY2Fs
bGVyIHRvIHRyYXZlcnNlLiBUaGUgZGVjbGFyYXRpb24KLS8vIG9yZGVyIG9mIHRoZSBuZXN0ZWQg
bWVzc2FnZXMgaXMgYWxzbyBwcmVzZXJ2ZWQuCi10eXBlZGVmIHBhaXI8aW50LCBpbnQ+IEZpZWxk
UmFuZ2U7Ci12b2lkIEdhdGhlck9jY3VwaWVkRmllbGRSYW5nZXMoY29uc3QgRGVzY3JpcHRvciog
ZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ8RmllbGRSYW5n
ZT4qIHJhbmdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8Y29uc3Qg
RGVzY3JpcHRvcio+KiBuZXN0ZWRfbWVzc2FnZXMpIHsKLSAgc2V0PGNvbnN0IERlc2NyaXB0b3Iq
PiBncm91cHM7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+ZmllbGRfY291bnQo
KTsgKytpKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmZCA9IGRlc2NyaXB0b3ItPmZp
ZWxkKGkpOwotICAgIHJhbmdlcy0+aW5zZXJ0KEZpZWxkUmFuZ2UoZmQtPm51bWJlcigpLCBmZC0+
bnVtYmVyKCkgKyAxKSk7Ci0gICAgaWYgKGZkLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpU
WVBFX0dST1VQKSB7Ci0gICAgICBncm91cHMuaW5zZXJ0KGZkLT5tZXNzYWdlX3R5cGUoKSk7Ci0g
ICAgfQotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+ZXh0ZW5zaW9uX3Jh
bmdlX2NvdW50KCk7ICsraSkgewotICAgIHJhbmdlcy0+aW5zZXJ0KEZpZWxkUmFuZ2UoZGVzY3Jp
cHRvci0+ZXh0ZW5zaW9uX3JhbmdlKGkpLT5zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc2NyaXB0b3ItPmV4dGVuc2lvbl9yYW5nZShpKS0+ZW5kKSk7Ci0gIH0KLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5yZXNlcnZlZF9yYW5nZV9jb3VudCgpOyArK2kp
IHsKLSAgICByYW5nZXMtPmluc2VydChGaWVsZFJhbmdlKGRlc2NyaXB0b3ItPnJlc2VydmVkX3Jh
bmdlKGkpLT5zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3It
PnJlc2VydmVkX3JhbmdlKGkpLT5lbmQpKTsKLSAgfQotICAvLyBIYW5kbGUgdGhlIG5lc3RlZCBt
ZXNzYWdlcy9ncm91cHMgaW4gZGVjbGFyYXRpb24gb3JkZXIgdG8gbWFrZSBpdAotICAvLyBwb3N0
LW9yZGVyIHN0cmljdC4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5uZXN0ZWRf
dHlwZV9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBuZXN0ZWRfZGVzYyA9
IGRlc2NyaXB0b3ItPm5lc3RlZF90eXBlKGkpOwotICAgIGlmIChncm91cHMuZmluZChuZXN0ZWRf
ZGVzYykgIT0gZ3JvdXBzLmVuZCgpKSB7Ci0gICAgICBHYXRoZXJPY2N1cGllZEZpZWxkUmFuZ2Vz
KG5lc3RlZF9kZXNjLCByYW5nZXMsIG5lc3RlZF9tZXNzYWdlcyk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIG5lc3RlZF9tZXNzYWdlcy0+cHVzaF9iYWNrKG5lc3RlZF9kZXNjKTsKLSAgICB9Ci0gIH0K
LX0KLQotLy8gVXRpbGl0eSBmdW5jdGlvbiBmb3IgUHJpbnRGcmVlRmllbGROdW1iZXJzLgotLy8g
QWN0dWFsbHkgcHJpbnRzIHRoZSBmb3JtYXR0ZWQgZnJlZSBmaWVsZCBudW1iZXJzIGZvciBnaXZl
biBtZXNzYWdlIG5hbWUgYW5kCi0vLyBvY2N1cGllZCByYW5nZXMuCi12b2lkIEZvcm1hdEZyZWVG
aWVsZE51bWJlcnMoY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHNldDxGaWVsZFJhbmdlPiYgcmFuZ2VzKSB7Ci0gIHN0cmluZyBvdXRwdXQ7Ci0g
IFN0cmluZ0FwcGVuZEYoJm91dHB1dCwgIiUtMzVzIGZyZWU6IiwgbmFtZS5jX3N0cigpKTsKLSAg
aW50IG5leHRfZnJlZV9udW1iZXIgPSAxOwotICBmb3IgKHNldDxGaWVsZFJhbmdlPjo6Y29uc3Rf
aXRlcmF0b3IgaSA9IHJhbmdlcy5iZWdpbigpOwotICAgICAgIGkgIT0gcmFuZ2VzLmVuZCgpOyAr
K2kpIHsKLSAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBncm91cHMgcmUtdXNlIHBhcmVudCBmaWVs
ZCBudW1iZXJzLCBpbiB3aGljaAotICAgIC8vIGNhc2Ugd2Ugc2tpcCB0aGUgRmllbGRSYW5nZSBl
bnRpcmVseS4KLSAgICBpZiAobmV4dF9mcmVlX251bWJlciA+PSBpLT5zZWNvbmQpIGNvbnRpbnVl
OwotCi0gICAgaWYgKG5leHRfZnJlZV9udW1iZXIgPCBpLT5maXJzdCkgewotICAgICAgaWYgKG5l
eHRfZnJlZV9udW1iZXIgKyAxID09IGktPmZpcnN0KSB7Ci0gICAgICAgIC8vIFNpbmdsZXRvbgot
ICAgICAgICBTdHJpbmdBcHBlbmRGKCZvdXRwdXQsICIgJWQiLCBuZXh0X2ZyZWVfbnVtYmVyKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFJhbmdlCi0gICAgICAgIFN0cmluZ0FwcGVuZEYo
Jm91dHB1dCwgIiAlZC0lZCIsIG5leHRfZnJlZV9udW1iZXIsIGktPmZpcnN0IC0gMSk7Ci0gICAg
ICB9Ci0gICAgfQotICAgIG5leHRfZnJlZV9udW1iZXIgPSBpLT5zZWNvbmQ7Ci0gIH0KLSAgaWYg
KG5leHRfZnJlZV9udW1iZXIgPD0gRmllbGREZXNjcmlwdG9yOjprTWF4TnVtYmVyKSB7Ci0gICAg
U3RyaW5nQXBwZW5kRigmb3V0cHV0LCAiICVkLUlORiIsIG5leHRfZnJlZV9udW1iZXIpOwotICB9
Ci0gIHN0ZDo6Y291dCA8PCBvdXRwdXQgPDwgc3RkOjplbmRsOwotfQotCi19ICAvLyBuYW1lc3Bh
Y2UKLQotdm9pZCBDb21tYW5kTGluZUludGVyZmFjZTo6UHJpbnRGcmVlRmllbGROdW1iZXJzKAot
ICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgc2V0PEZpZWxkUmFuZ2U+IHJh
bmdlczsKLSAgdmVjdG9yPGNvbnN0IERlc2NyaXB0b3IqPiBuZXN0ZWRfbWVzc2FnZXM7Ci0gIEdh
dGhlck9jY3VwaWVkRmllbGRSYW5nZXMoZGVzY3JpcHRvciwgJnJhbmdlcywgJm5lc3RlZF9tZXNz
YWdlcyk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXN0ZWRfbWVzc2FnZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICBQcmludEZyZWVGaWVsZE51bWJlcnMobmVzdGVkX21lc3NhZ2VzW2ldKTsKLSAg
fQotICBGb3JtYXRGcmVlRmllbGROdW1iZXJzKGRlc2NyaXB0b3ItPmZ1bGxfbmFtZSgpLCByYW5n
ZXMpOwotfQotCi0KLQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jb21tYW5kX2xpbmVfaW50ZXJmYWNlLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvY29tbWFuZF9saW5lX2ludGVyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkMTM3NzY2NmQzYzI3Y2U0NmZkM2JhNTI0ZTE1MGMwNjYyNGNhNmMzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jb21tYW5kX2xpbmVfaW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwzOTQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8v
IEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBv
cmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwg
SmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIEltcGxlbWVudHMgdGhlIFByb3RvY29sIENv
bXBpbGVyIGZyb250LWVuZCBzdWNoIHRoYXQgaXQgbWF5IGJlIHJldXNlZCBieQotLy8gY3VzdG9t
IGNvbXBpbGVycyB3cml0dGVuIHRvIHN1cHBvcnQgb3RoZXIgbGFuZ3VhZ2VzLgotCi0jaWZuZGVm
IEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DT01NQU5EX0xJTkVfSU5URVJGQUNFX0hfXwotI2Rl
ZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ09NTUFORF9MSU5FX0lOVEVSRkFDRV9IX18K
LQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRl
IDx2ZWN0b3I+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDx1dGls
aXR5PgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLWNsYXNz
IERlc2NyaXB0b3I7ICAgICAgICAgICAgLy8gZGVzY3JpcHRvci5oCi1jbGFzcyBEZXNjcmlwdG9y
UG9vbDsgICAgICAgIC8vIGRlc2NyaXB0b3IuaAotY2xhc3MgRmlsZURlc2NyaXB0b3I7ICAgICAg
ICAvLyBkZXNjcmlwdG9yLmgKLWNsYXNzIEZpbGVEZXNjcmlwdG9yUHJvdG87ICAgLy8gZGVzY3Jp
cHRvci5wYi5oCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZXBlYXRlZFB0ckZpZWxkOyAg
Ly8gcmVwZWF0ZWRfZmllbGQuaAotCi1uYW1lc3BhY2UgY29tcGlsZXIgewotCi1jbGFzcyBDb2Rl
R2VuZXJhdG9yOyAgICAgICAgLy8gY29kZV9nZW5lcmF0b3IuaAotY2xhc3MgR2VuZXJhdG9yQ29u
dGV4dDsgICAgICAvLyBjb2RlX2dlbmVyYXRvci5oCi1jbGFzcyBEaXNrU291cmNlVHJlZTsgICAg
ICAgLy8gaW1wb3J0ZXIuaAotCi0vLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGNvbW1hbmQt
bGluZSBpbnRlcmZhY2UgdG8gdGhlIHByb3RvY29sIGNvbXBpbGVyLgotLy8gSXQgaXMgZGVzaWdu
ZWQgdG8gbWFrZSBpdCB2ZXJ5IGVhc3kgdG8gY3JlYXRlIGEgY3VzdG9tIHByb3RvY29sIGNvbXBp
bGVyCi0vLyBzdXBwb3J0aW5nIHRoZSBsYW5ndWFnZXMgb2YgeW91ciBjaG9pY2UuICBGb3IgZXhh
bXBsZSwgaWYgeW91IHdhbnRlZCB0bwotLy8gY3JlYXRlIGEgY3VzdG9tIHByb3RvY29sIGNvbXBp
bGVyIGJpbmFyeSB3aGljaCBpbmNsdWRlcyBib3RoIHRoZSByZWd1bGFyCi0vLyBDKysgc3VwcG9y
dCBwbHVzIHN1cHBvcnQgZm9yIHlvdXIgb3duIGN1c3RvbSBvdXRwdXQgIkZvbyIsIHlvdSB3b3Vs
ZAotLy8gd3JpdGUgYSBjbGFzcyAiRm9vR2VuZXJhdG9yIiB3aGljaCBpbXBsZW1lbnRzIHRoZSBD
b2RlR2VuZXJhdG9yIGludGVyZmFjZSwKLS8vIHRoZW4gd3JpdGUgYSBtYWluKCkgcHJvY2VkdXJl
IGxpa2UgdGhpczoKLS8vCi0vLyAgIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsK
LS8vICAgICBnb29nbGU6OnByb3RvYnVmOjpjb21waWxlcjo6Q29tbWFuZExpbmVJbnRlcmZhY2Ug
Y2xpOwotLy8KLS8vICAgICAvLyBTdXBwb3J0IGdlbmVyYXRpb24gb2YgQysrIHNvdXJjZSBhbmQg
aGVhZGVycy4KLS8vICAgICBnb29nbGU6OnByb3RvYnVmOjpjb21waWxlcjo6Y3BwOjpDcHBHZW5l
cmF0b3IgY3BwX2dlbmVyYXRvcjsKLS8vICAgICBjbGkuUmVnaXN0ZXJHZW5lcmF0b3IoIi0tY3Bw
X291dCIsICZjcHBfZ2VuZXJhdG9yLAotLy8gICAgICAgIkdlbmVyYXRlIEMrKyBzb3VyY2UgYW5k
IGhlYWRlci4iKTsKLS8vCi0vLyAgICAgLy8gU3VwcG9ydCBnZW5lcmF0aW9uIG9mIEZvbyBjb2Rl
LgotLy8gICAgIEZvb0dlbmVyYXRvciBmb29fZ2VuZXJhdG9yOwotLy8gICAgIGNsaS5SZWdpc3Rl
ckdlbmVyYXRvcigiLS1mb29fb3V0IiwgJmZvb19nZW5lcmF0b3IsCi0vLyAgICAgICAiR2VuZXJh
dGUgRm9vIGZpbGUuIik7Ci0vLwotLy8gICAgIHJldHVybiBjbGkuUnVuKGFyZ2MsIGFyZ3YpOwot
Ly8gICB9Ci0vLwotLy8gVGhlIGNvbXBpbGVyIGlzIGludm9rZWQgd2l0aCBzeW50YXggbGlrZToK
LS8vICAgcHJvdG9jIC0tY3BwX291dD1vdXRkaXIgLS1mb29fb3V0PW91dGRpciAtLXByb3RvX3Bh
dGg9c3JjIHNyYy9mb28ucHJvdG8KLS8vCi0vLyBGb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRo
ZSBjb21tYW5kLWxpbmUgc3ludGF4LCBpbnZva2UgaXQgd2l0aCAtLWhlbHAuCi1jbGFzcyBMSUJQ
Uk9UT0NfRVhQT1JUIENvbW1hbmRMaW5lSW50ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIENvbW1hbmRM
aW5lSW50ZXJmYWNlKCk7Ci0gIH5Db21tYW5kTGluZUludGVyZmFjZSgpOwotCi0gIC8vIFJlZ2lz
dGVyIGEgY29kZSBnZW5lcmF0b3IgZm9yIGEgbGFuZ3VhZ2UuCi0gIC8vCi0gIC8vIFBhcmFtZXRl
cnM6Ci0gIC8vICogZmxhZ19uYW1lOiBUaGUgY29tbWFuZC1saW5lIGZsYWcgdXNlZCB0byBzcGVj
aWZ5IGFuIG91dHB1dCBmaWxlIG9mCi0gIC8vICAgdGhpcyB0eXBlLiAgVGhlIG5hbWUgbXVzdCBz
dGFydCB3aXRoIGEgJy0nLiAgSWYgdGhlIG5hbWUgaXMgbG9uZ2VyCi0gIC8vICAgdGhhbiBvbmUg
bGV0dGVyLCBpdCBtdXN0IHN0YXJ0IHdpdGggdHdvICctJ3MuCi0gIC8vICogZ2VuZXJhdG9yOiBU
aGUgQ29kZUdlbmVyYXRvciB3aGljaCB3aWxsIGJlIGNhbGxlZCB0byBnZW5lcmF0ZSBmaWxlcwot
ICAvLyAgIG9mIHRoaXMgdHlwZS4KLSAgLy8gKiBoZWxwX3RleHQ6IFRleHQgZGVzY3JpYmluZyB0
aGlzIGZsYWcgaW4gdGhlIC0taGVscCBvdXRwdXQuCi0gIC8vCi0gIC8vIFNvbWUgZ2VuZXJhdG9y
cyBhY2NlcHQgZXh0cmEgcGFyYW1ldGVycy4gIFlvdSBjYW4gc3BlY2lmeSB0aGlzIHBhcmFtZXRl
cgotICAvLyBvbiB0aGUgY29tbWFuZC1saW5lIGJ5IHBsYWNpbmcgaXQgYmVmb3JlIHRoZSBvdXRw
dXQgZGlyZWN0b3J5LCBzZXBhcmF0ZWQKLSAgLy8gYnkgYSBjb2xvbjoKLSAgLy8gICBwcm90b2Mg
LS1mb29fb3V0PWVuYWJsZV9iYXI6b3V0ZGlyCi0gIC8vIFRoZSB0ZXh0IGJlZm9yZSB0aGUgY29s
b24gaXMgcGFzc2VkIHRvIENvZGVHZW5lcmF0b3I6OkdlbmVyYXRlKCkgYXMgdGhlCi0gIC8vICJw
YXJhbWV0ZXIiLgotICB2b2lkIFJlZ2lzdGVyR2VuZXJhdG9yKGNvbnN0IHN0cmluZyYgZmxhZ19u
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVHZW5lcmF0b3IqIGdlbmVyYXRvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGhlbHBfdGV4dCk7Ci0KLSAg
Ly8gUmVnaXN0ZXIgYSBjb2RlIGdlbmVyYXRvciBmb3IgYSBsYW5ndWFnZS4KLSAgLy8gQmVzaWRl
cyBmbGFnX25hbWUgeW91IGNhbiBzcGVjaWZ5IGFub3RoZXIgb3B0aW9uX2ZsYWdfbmFtZSB0aGF0
IGNvdWxkIGJlCi0gIC8vIHVzZWQgdG8gcGFzcyBleHRyYSBwYXJhbWV0ZXJzIHRvIHRoZSByZWdp
c3RlcmVkIGNvZGUgZ2VuZXJhdG9yLgotICAvLyBTdXBwb3NlIHlvdSBoYXZlIHJlZ2lzdGVyZWQg
YSBnZW5lcmF0b3IgYnkgY2FsbGluZzoKLSAgLy8gICBjb21tYW5kX2xpbmVfaW50ZXJmYWNlLlJl
Z2lzdGVyR2VuZXJhdG9yKCItLWZvb19vdXQiLCAiLS1mb29fb3B0IiwgLi4uKQotICAvLyBUaGVu
IHlvdSBjb3VsZCBpbnZva2UgdGhlIGNvbXBpbGVyIHdpdGggYSBjb21tYW5kIGxpa2U6Ci0gIC8v
ICAgcHJvdG9jIC0tZm9vX291dD1lbmFibGVfYmFyOm91dGRpciAtLWZvb19vcHQ9ZW5hYmxlX2Jh
egotICAvLyBUaGlzIHdpbGwgcGFzcyAiZW5hYmxlX2JhcixlbmFibGVfYmF6IiBhcyB0aGUgcGFy
YW1ldGVyIHRvIHRoZSBnZW5lcmF0b3IuCi0gIHZvaWQgUmVnaXN0ZXJHZW5lcmF0b3IoY29uc3Qg
c3RyaW5nJiBmbGFnX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5n
JiBvcHRpb25fZmxhZ19uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVHZW5lcmF0
b3IqIGdlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGhl
bHBfdGV4dCk7Ci0KLSAgLy8gRW5hYmxlcyAicGx1Z2lucyIuICBJbiB0aGlzIG1vZGUsIGlmIGEg
Y29tbWFuZC1saW5lIGZsYWcgZW5kcyB3aXRoICJfb3V0IgotICAvLyBidXQgZG9lcyBub3QgbWF0
Y2ggYW55IHJlZ2lzdGVyZWQgZ2VuZXJhdG9yLCB0aGUgY29tcGlsZXIgd2lsbCBhdHRlbXB0IHRv
Ci0gIC8vIGZpbmQgYSAicGx1Z2luIiB0byBpbXBsZW1lbnQgdGhlIGdlbmVyYXRvci4gIFBsdWdp
bnMgYXJlIGp1c3QgZXhlY3V0YWJsZXMuCi0gIC8vIFRoZXkgc2hvdWxkIGxpdmUgc29tZXdoZXJl
IGluIHRoZSBQQVRILgotICAvLwotICAvLyBUaGUgY29tcGlsZXIgZGV0ZXJtaW5lcyB0aGUgZXhl
Y3V0YWJsZSBuYW1lIHRvIHNlYXJjaCBmb3IgYnkgY29uY2F0ZW5hdGluZwotICAvLyBleGVfbmFt
ZV9wcmVmaXggd2l0aCB0aGUgdW5yZWNvZ25pemVkIGZsYWcgbmFtZSwgcmVtb3ZpbmcgIl9vdXQi
LiAgU28sIGZvcgotICAvLyBleGFtcGxlLCBpZiBleGVfbmFtZV9wcmVmaXggaXMgInByb3RvYy0i
IGFuZCB5b3UgcGFzcyB0aGUgZmxhZyAtLWZvb19vdXQsCi0gIC8vIHRoZSBjb21waWxlciB3aWxs
IHRyeSB0byBydW4gdGhlIHByb2dyYW0gInByb3RvYy1mb28iLgotICAvLwotICAvLyBUaGUgcGx1
Z2luIHByb2dyYW0gc2hvdWxkIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIHVzYWdlOgotICAvLyAg
IHBsdWdpbiBbLS1vdXQ9T1VURElSXSBbLS1wYXJhbWV0ZXI9UEFSQU1FVEVSXSBQUk9UT19GSUxF
UyA8IERFU0NSSVBUT1JTCi0gIC8vIC0tb3V0IGluZGljYXRlcyB0aGUgb3V0cHV0IGRpcmVjdG9y
eSAoYXMgcGFzc2VkIHRvIHRoZSAtLWZvb19vdXQKLSAgLy8gcGFyYW1ldGVyKTsgaWYgb21pdHRl
ZCwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHNob3VsZCBiZSB1c2VkLiAgLS1wYXJhbWV0ZXIKLSAg
Ly8gZ2l2ZXMgdGhlIGdlbmVyYXRvciBwYXJhbWV0ZXIsIGlmIGFueSB3YXMgcHJvdmlkZWQuICBU
aGUgUFJPVE9fRklMRVMgbGlzdAotICAvLyB0aGUgLnByb3RvIGZpbGVzIHdoaWNoIHdlcmUgZ2l2
ZW4gb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQtbGluZTsgdGhlc2UgYXJlCi0gIC8vIHRoZSBmaWxl
cyBmb3Igd2hpY2ggdGhlIHBsdWdpbiBpcyBleHBlY3RlZCB0byBnZW5lcmF0ZSBvdXRwdXQgY29k
ZS4KLSAgLy8gRmluYWxseSwgREVTQ1JJUFRPUlMgaXMgYW4gZW5jb2RlZCBGaWxlRGVzY3JpcHRv
clNldCAoYXMgZGVmaW5lZCBpbgotICAvLyBkZXNjcmlwdG9yLnByb3RvKS4gIFRoaXMgaXMgcGlw
ZWQgdG8gdGhlIHBsdWdpbidzIHN0ZGluLiAgVGhlIHNldCB3aWxsCi0gIC8vIGluY2x1ZGUgZGVz
Y3JpcHRvcnMgZm9yIGFsbCB0aGUgZmlsZXMgbGlzdGVkIGluIFBST1RPX0ZJTEVTIGFzIHdlbGwg
YXMKLSAgLy8gYWxsIGZpbGVzIHRoYXQgdGhleSBpbXBvcnQuICBUaGUgcGx1Z2luIE1VU1QgTk9U
IGF0dGVtcHQgdG8gcmVhZCB0aGUKLSAgLy8gUFJPVE9fRklMRVMgZGlyZWN0bHkgLS0gaXQgbXVz
dCB1c2UgdGhlIEZpbGVEZXNjcmlwdG9yU2V0LgotICAvLwotICAvLyBUaGUgcGx1Z2luIHNob3Vs
ZCBnZW5lcmF0ZSB3aGF0ZXZlciBmaWxlcyBhcmUgbmVjZXNzYXJ5LCBhcyBjb2RlIGdlbmVyYXRv
cnMKLSAgLy8gbm9ybWFsbHkgZG8uICBJdCBzaG91bGQgd3JpdGUgdGhlIG5hbWVzIG9mIGFsbCBm
aWxlcyBpdCBnZW5lcmF0ZXMgdG8KLSAgLy8gc3Rkb3V0LiAgVGhlIG5hbWVzIHNob3VsZCBiZSBy
ZWxhdGl2ZSB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeSwgTk9UIGFic29sdXRlCi0gIC8vIG5hbWVz
IG9yIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIElmIGFueSBlcnJvcnMgb2Nj
dXIsIGVycm9yCi0gIC8vIG1lc3NhZ2VzIHNob3VsZCBiZSB3cml0dGVuIHRvIHN0ZGVyci4gIElm
IGFuIGVycm9yIGlzIGZhdGFsLCB0aGUgcGx1Z2luCi0gIC8vIHNob3VsZCBleGl0IHdpdGggYSBu
b24temVybyBleGl0IGNvZGUuCi0gIHZvaWQgQWxsb3dQbHVnaW5zKGNvbnN0IHN0cmluZyYgZXhl
X25hbWVfcHJlZml4KTsKLQotICAvLyBSdW4gdGhlIFByb3RvY29sIENvbXBpbGVyIHdpdGggdGhl
IGdpdmVuIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLgotICAvLyBSZXR1cm5zIHRoZSBlcnJvciBj
b2RlIHdoaWNoIHNob3VsZCBiZSByZXR1cm5lZCBieSBtYWluKCkuCi0gIC8vCi0gIC8vIEl0IG1h
eSBub3QgYmUgc2FmZSB0byBjYWxsIFJ1bigpIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1l
bnQgYmVjYXVzZQotICAvLyBpdCBjYWxscyBzdHJlcnJvcigpLiAgSSdtIG5vdCBzdXJlIHdoeSB5
b3UnZCB3YW50IHRvIGRvIHRoaXMgYW55d2F5LgotICBpbnQgUnVuKGludCBhcmdjLCBjb25zdCBj
aGFyKiBjb25zdCBhcmd2W10pOwotCi0gIC8vIENhbGwgU2V0SW5wdXRzQXJlQ3dkUmVsYXRpdmUo
dHJ1ZSkgaWYgdGhlIGlucHV0IGZpbGVzIGdpdmVuIG9uIHRoZSBjb21tYW5kCi0gIC8vIGxpbmUg
c2hvdWxkIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBwcm90byBpbXBvcnQgcGF0aCBz
cGVjaWZpZWQKLSAgLy8gdXNpbmcgLS1wcm90b19wYXRoIG9yIC1JIGZsYWdzLiAgT3RoZXJ3aXNl
LCBpbnB1dCBmaWxlIG5hbWVzIHdpbGwgYmUKLSAgLy8gaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8g
dGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKG9yIGFzIGFic29sdXRlCi0gIC8vIHBhdGhz
IGlmIHRoZXkgc3RhcnQgd2l0aCAnLycpLCB0aG91Z2ggdGhleSBtdXN0IHN0aWxsIHJlc2lkZSBp
bnNpZGUKLSAgLy8gYSBkaXJlY3RvcnkgZ2l2ZW4gYnkgLS1wcm90b19wYXRoIG9yIHRoZSBjb21w
aWxlciB3aWxsIGZhaWwuICBUaGUgbGF0dGVyCi0gIC8vIG1vZGUgaXMgZ2VuZXJhbGx5IG1vcmUg
aW50dWl0aXZlIGFuZCBlYXNpZXIgdG8gdXNlLCBlc3BlY2lhbGx5IGUuZy4gd2hlbgotICAvLyBk
ZWZpbmluZyBpbXBsaWNpdCBydWxlcyBpbiBNYWtlZmlsZXMuCi0gIHZvaWQgU2V0SW5wdXRzQXJl
UHJvdG9QYXRoUmVsYXRpdmUoYm9vbCBlbmFibGUpIHsKLSAgICBpbnB1dHNfYXJlX3Byb3RvX3Bh
dGhfcmVsYXRpdmVfID0gZW5hYmxlOwotICB9Ci0KLSAgLy8gUHJvdmlkZXMgc29tZSB0ZXh0IHdo
aWNoIHdpbGwgYmUgcHJpbnRlZCB3aGVuIHRoZSAtLXZlcnNpb24gZmxhZyBpcwotICAvLyB1c2Vk
LiAgVGhlIHZlcnNpb24gb2YgbGlicHJvdG9jIHdpbGwgYWxzbyBiZSBwcmludGVkIG9uIHRoZSBu
ZXh0IGxpbmUKLSAgLy8gYWZ0ZXIgdGhpcyB0ZXh0LgotICB2b2lkIFNldFZlcnNpb25JbmZvKGNv
bnN0IHN0cmluZyYgdGV4dCkgewotICAgIHZlcnNpb25faW5mb18gPSB0ZXh0OwotICB9Ci0KLQot
IHByaXZhdGU6Ci0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgY2xhc3MgRXJyb3JQcmludGVyOwotICBjbGFz
cyBHZW5lcmF0b3JDb250ZXh0SW1wbDsKLSAgY2xhc3MgTWVtb3J5T3V0cHV0U3RyZWFtOwotICB0
eXBlZGVmIGhhc2hfbWFwPHN0cmluZywgR2VuZXJhdG9yQ29udGV4dEltcGwqPiBHZW5lcmF0b3JD
b250ZXh0TWFwOwotCi0gIC8vIENsZWFyIHN0YXRlIGZyb20gcHJldmlvdXMgUnVuKCkuCi0gIHZv
aWQgQ2xlYXIoKTsKLQotICAvLyBSZW1hcHMgZWFjaCBmaWxlIGluIGlucHV0X2ZpbGVzXyBzbyB0
aGF0IGl0IGlzIHJlbGF0aXZlIHRvIG9uZSBvZiB0aGUKLSAgLy8gZGlyZWN0b3JpZXMgaW4gcHJv
dG9fcGF0aF8uICBSZXR1cm5zIGZhbHNlIGlmIGFuIGVycm9yIG9jY3VycmVkLiAgVGhpcwotICAv
LyBpcyBvbmx5IHVzZWQgaWYgaW5wdXRzX2FyZV9wcm90b19wYXRoX3JlbGF0aXZlXyBpcyBmYWxz
ZS4KLSAgYm9vbCBNYWtlSW5wdXRzQmVQcm90b1BhdGhSZWxhdGl2ZSgKLSAgICBEaXNrU291cmNl
VHJlZSogc291cmNlX3RyZWUpOwotCi0gIC8vIFJldHVybiBzdGF0dXMgZm9yIFBhcnNlQXJndW1l
bnRzKCkgYW5kIEludGVycHJldEFyZ3VtZW50KCkuCi0gIGVudW0gUGFyc2VBcmd1bWVudFN0YXR1
cyB7Ci0gICAgUEFSU0VfQVJHVU1FTlRfRE9ORV9BTkRfQ09OVElOVUUsCi0gICAgUEFSU0VfQVJH
VU1FTlRfRE9ORV9BTkRfRVhJVCwKLSAgICBQQVJTRV9BUkdVTUVOVF9GQUlMCi0gIH07Ci0KLSAg
Ly8gUGFyc2UgYWxsIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCi0gIFBhcnNlQXJndW1lbnRTdGF0
dXMgUGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGNvbnN0IGFyZ3ZbXSk7Ci0K
LQotICAvLyBQYXJzZXMgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgaW50byBhIG5hbWUvdmFsdWUg
cGFpci4gIFJldHVybnMKLSAgLy8gdHJ1ZSBpZiB0aGUgbmV4dCBhcmd1bWVudCBpbiB0aGUgYXJn
diBzaG91bGQgYmUgdXNlZCBhcyB0aGUgdmFsdWUsCi0gIC8vIGZhbHNlIG90aGVyd2lzZS4KLSAg
Ly8KLSAgLy8gRXhhbXBsZXM6Ci0gIC8vICAgIi1Jc3JjL3Byb3RvcyIgLT4KLSAgLy8gICAgIG5h
bWUgPSAiLUkiLCB2YWx1ZSA9ICJzcmMvcHJvdG9zIgotICAvLyAgICItLWNwcF9vdXQ9c3JjL2Zv
by5wYjIuY2MiIC0+Ci0gIC8vICAgICBuYW1lID0gIi0tY3BwX291dCIsIHZhbHVlID0gInNyYy9m
b28ucGIyLmNjIgotICAvLyAgICJmb28ucHJvdG8iIC0+Ci0gIC8vICAgICBuYW1lID0gIiIsIHZh
bHVlID0gImZvby5wcm90byIKLSAgYm9vbCBQYXJzZUFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZywg
c3RyaW5nKiBuYW1lLCBzdHJpbmcqIHZhbHVlKTsKLQotICAvLyBJbnRlcnByZXRzIGFyZ3VtZW50
cyBwYXJzZWQgd2l0aCBQYXJzZUFyZ3VtZW50LgotICBQYXJzZUFyZ3VtZW50U3RhdHVzIEludGVy
cHJldEFyZ3VtZW50KGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHZhbHVlKTsKLQotICAvLyBQcmludCB0aGUg
LS1oZWxwIHRleHQgdG8gc3RkZXJyLgotICB2b2lkIFByaW50SGVscFRleHQoKTsKLQotICAvLyBH
ZW5lcmF0ZSB0aGUgZ2l2ZW4gb3V0cHV0IGZpbGUgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQuCi0gIHN0
cnVjdCBPdXRwdXREaXJlY3RpdmU7ICAvLyBzZWUgYmVsb3cKLSAgYm9vbCBHZW5lcmF0ZU91dHB1
dChjb25zdCB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiYgcGFyc2VkX2ZpbGVzLAotICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IE91dHB1dERpcmVjdGl2ZSYgb3V0cHV0X2RpcmVjdGl2
ZSwKLSAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JDb250ZXh0KiBnZW5lcmF0b3JfY29u
dGV4dCk7Ci0gIGJvb2wgR2VuZXJhdGVQbHVnaW5PdXRwdXQoY29uc3QgdmVjdG9yPGNvbnN0IEZp
bGVEZXNjcmlwdG9yKj4mIHBhcnNlZF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdHJpbmcmIHBsdWdpbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0cmluZyYgcGFyYW1ldGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdl
bmVyYXRvckNvbnRleHQqIGdlbmVyYXRvcl9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cmluZyogZXJyb3IpOwotCi0gIC8vIEltcGxlbWVudHMgLS1lbmNvZGUgYW5kIC0t
ZGVjb2RlLgotICBib29sIEVuY29kZU9yRGVjb2RlKGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29s
KTsKLQotICAvLyBJbXBsZW1lbnRzIHRoZSAtLWRlc2NyaXB0b3Jfc2V0X291dCBvcHRpb24uCi0g
IGJvb2wgV3JpdGVEZXNjcmlwdG9yU2V0KGNvbnN0IHZlY3Rvcjxjb25zdCBGaWxlRGVzY3JpcHRv
cio+IHBhcnNlZF9maWxlcyk7Ci0KLSAgLy8gSW1wbGVtZW50cyB0aGUgLS1kZXBlbmRlbmN5X291
dCBvcHRpb24KLSAgYm9vbCBHZW5lcmF0ZURlcGVuZGVuY3lNYW5pZmVzdEZpbGUoCi0gICAgICBj
b25zdCB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiYgcGFyc2VkX2ZpbGVzLAotICAgICAg
Y29uc3QgR2VuZXJhdG9yQ29udGV4dE1hcCYgb3V0cHV0X2RpcmVjdG9yaWVzLAotICAgICAgRGlz
a1NvdXJjZVRyZWUqIHNvdXJjZV90cmVlKTsKLQotICAvLyBHZXQgYWxsIHRyYW5zaXRpdmUgZGVw
ZW5kZW5jaWVzIG9mIHRoZSBnaXZlbiBmaWxlIChpbmNsdWRpbmcgdGhlIGZpbGUKLSAgLy8gaXRz
ZWxmKSwgYWRkaW5nIHRoZW0gdG8gdGhlIGdpdmVuIGxpc3Qgb2YgRmlsZURlc2NyaXB0b3JQcm90
b3MuICBUaGUKLSAgLy8gcHJvdG9zIHdpbGwgYmUgb3JkZXJlZCBzdWNoIHRoYXQgZXZlcnkgZmls
ZSBpcyBsaXN0ZWQgYmVmb3JlIGFueSBmaWxlIHRoYXQKLSAgLy8gZGVwZW5kcyBvbiBpdCwgc28g
dGhhdCB5b3UgY2FuIGNhbGwgRGVzY3JpcHRvclBvb2w6OkJ1aWxkRmlsZSgpIG9uIHRoZW0KLSAg
Ly8gaW4gb3JkZXIuICBBbnkgZmlsZXMgaW4gKmFscmVhZHlfc2VlbiB3aWxsIG5vdCBiZSBhZGRl
ZCwgYW5kIGVhY2ggZmlsZQotICAvLyBhZGRlZCB3aWxsIGJlIGluc2VydGVkIGludG8gKmFscmVh
ZHlfc2Vlbi4gIElmIGluY2x1ZGVfc291cmNlX2NvZGVfaW5mbyBpcwotICAvLyB0cnVlIHRoZW4g
aW5jbHVkZSB0aGUgc291cmNlIGNvZGUgaW5mb3JtYXRpb24gaW4gdGhlIEZpbGVEZXNjcmlwdG9y
UHJvdG9zLgotICAvLyBJZiBpbmNsdWRlX2pzb25fbmFtZSBpcyB0cnVlLCBwb3B1bGF0ZSB0aGUg
anNvbl9uYW1lIGZpZWxkIG9mCi0gIC8vIEZpZWxkRGVzY3JpcHRvclByb3RvIGZvciBhbGwgZmll
bGRzLgotICBzdGF0aWMgdm9pZCBHZXRUcmFuc2l0aXZlRGVwZW5kZW5jaWVzKAotICAgICAgY29u
c3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICBib29sIGluY2x1ZGVfanNvbl9uYW1lLAot
ICAgICAgYm9vbCBpbmNsdWRlX3NvdXJjZV9jb2RlX2luZm8sCi0gICAgICBzZXQ8Y29uc3QgRmls
ZURlc2NyaXB0b3IqPiogYWxyZWFkeV9zZWVuLAotICAgICAgUmVwZWF0ZWRQdHJGaWVsZDxGaWxl
RGVzY3JpcHRvclByb3RvPiogb3V0cHV0KTsKLQotICAvLyBJbXBsZW1lbnRzIHRoZSAtLXByaW50
X2ZyZWVfZmllbGRfbnVtYmVycy4gVGhpcyBmdW5jdGlvbiBwcmludHMgZnJlZSBmaWVsZAotICAv
LyBudW1iZXJzIGludG8gc3Rkb3V0IGZvciB0aGUgbWVzc2FnZSBhbmQgaXQncyBuZXN0ZWQgbWVz
c2FnZSB0eXBlcyBpbgotICAvLyBwb3N0LW9yZGVyLCBpLmUuIG5lc3RlZCB0eXBlcyBmaXJzdC4g
UHJpbnRlZCByYW5nZSBhcmUgbGVmdC1yaWdodAotICAvLyBpbmNsdXNpdmUsIGkuZS4gW2EsIGJd
LgotICAvLwotICAvLyBHcm91cHM6Ci0gIC8vIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGdyb3Vw
cyBhcmUgY29uc2lkZXJlZCB0byBzaGFyZSB0aGUgc2FtZQotICAvLyBmaWVsZCBudW1iZXIgc3Bh
Y2Ugd2l0aCB0aGUgcGFyZW50IG1lc3NhZ2UsIHRodXMgaXQgd2lsbCBub3QgcHJpbnQgZnJlZQot
ICAvLyBmaWVsZCBudW1iZXJzIGZvciBncm91cHMuIFRoZSBmaWVsZCBudW1iZXJzIHVzZWQgaW4g
dGhlIGdyb3VwcyBhcmUKLSAgLy8gZXhjbHVkZWQgaW4gdGhlIGZyZWUgZmllbGQgbnVtYmVycyBv
ZiB0aGUgcGFyZW50IG1lc3NhZ2UuCi0gIC8vCi0gIC8vIEV4dGVuc2lvbiBSYW5nZXM6Ci0gIC8v
IEV4dGVuc2lvbiByYW5nZXMgYXJlIGNvbnNpZGVyZWQgb2N1cHBpZWQgZmllbGQgbnVtYmVycyBh
bmQgdGhleSB3aWxsIG5vdCBiZQotICAvLyBsaXN0ZWQgYXMgZnJlZSBudW1iZXJzIGluIHRoZSBv
dXRwdXQuCi0gIHZvaWQgUHJpbnRGcmVlRmllbGROdW1iZXJzKGNvbnN0IERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IpOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gVGhlIG5hbWUgb2YgdGhlIGV4ZWN1
dGFibGUgYXMgaW52b2tlZCAoaS5lLiBhcmd2WzBdKS4KLSAgc3RyaW5nIGV4ZWN1dGFibGVfbmFt
ZV87Ci0KLSAgLy8gVmVyc2lvbiBpbmZvIHNldCB3aXRoIFNldFZlcnNpb25JbmZvKCkuCi0gIHN0
cmluZyB2ZXJzaW9uX2luZm9fOwotCi0gIC8vIFJlZ2lzdGVyZWQgZ2VuZXJhdG9ycy4KLSAgc3Ry
dWN0IEdlbmVyYXRvckluZm8gewotICAgIHN0cmluZyBmbGFnX25hbWU7Ci0gICAgc3RyaW5nIG9w
dGlvbl9mbGFnX25hbWU7Ci0gICAgQ29kZUdlbmVyYXRvciogZ2VuZXJhdG9yOwotICAgIHN0cmlu
ZyBoZWxwX3RleHQ7Ci0gIH07Ci0gIHR5cGVkZWYgbWFwPHN0cmluZywgR2VuZXJhdG9ySW5mbz4g
R2VuZXJhdG9yTWFwOwotICBHZW5lcmF0b3JNYXAgZ2VuZXJhdG9yc19ieV9mbGFnX25hbWVfOwot
ICBHZW5lcmF0b3JNYXAgZ2VuZXJhdG9yc19ieV9vcHRpb25fbmFtZV87Ci0gIC8vIEEgbWFwIGZy
b20gZ2VuZXJhdG9yIG5hbWVzIHRvIHRoZSBwYXJhbWV0ZXJzIHNwZWNpZmllZCB1c2luZyB0aGUg
b3B0aW9uCi0gIC8vIGZsYWcuIEZvciBleGFtcGxlLCBpZiB0aGUgdXNlciBpbnZva2VzIHRoZSBj
b21waWxlciB3aXRoOgotICAvLyAgIHByb3RvYyAtLWZvb19vdXQ9b3V0cHV0ZGlyIC0tZm9vX29w
dD1lbmFibGVfYmFyIC4uLgotICAvLyBUaGVuIHRoZXJlIHdpbGwgYmUgYW4gZW50cnkgKCItLWZv
b19vdXQiLCAiZW5hYmxlX2JhciIpIGluIHRoaXMgbWFwLgotICBtYXA8c3RyaW5nLCBzdHJpbmc+
IGdlbmVyYXRvcl9wYXJhbWV0ZXJzXzsKLQotICAvLyBTZWUgQWxsb3dQbHVnaW5zKCkuICBJZiB0
aGlzIGlzIGVtcHR5LCBwbHVnaW5zIGFyZW4ndCBhbGxvd2VkLgotICBzdHJpbmcgcGx1Z2luX3By
ZWZpeF87Ci0KLSAgLy8gTWFwcyBzcGVjaWZpYyBwbHVnaW4gbmFtZXMgdG8gZmlsZXMuICBXaGVu
IGV4ZWN1dGluZyBhIHBsdWdpbiwgdGhpcyBtYXAKLSAgLy8gaXMgc2VhcmNoZWQgZmlyc3QgdG8g
ZmluZCB0aGUgcGx1Z2luIGV4ZWN1dGFibGUuICBJZiBub3QgZm91bmQgaGVyZSwgdGhlCi0gIC8v
IFBBVEggKG9yIG90aGVyIE9TLXNwZWNpZmljIHNlYXJjaCBzdHJhdGVneSkgaXMgc2VhcmNoZWQu
Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gcGx1Z2luc187Ci0KLSAgLy8gU3R1ZmYgcGFyc2VkIGZy
b20gY29tbWFuZCBsaW5lLgotICBlbnVtIE1vZGUgewotICAgIE1PREVfQ09NUElMRSwgIC8vIE5v
cm1hbCBtb2RlOiAgcGFyc2UgLnByb3RvIGZpbGVzIGFuZCBjb21waWxlIHRoZW0uCi0gICAgTU9E
RV9FTkNPREUsICAgLy8gLS1lbmNvZGU6ICByZWFkIHRleHQgZnJvbSBzdGRpbiwgd3JpdGUgYmlu
YXJ5IHRvIHN0ZG91dC4KLSAgICBNT0RFX0RFQ09ERSwgICAvLyAtLWRlY29kZTogIHJlYWQgYmlu
YXJ5IGZyb20gc3RkaW4sIHdyaXRlIHRleHQgdG8gc3Rkb3V0LgotICAgIE1PREVfUFJJTlQsICAg
IC8vIFByaW50IG1vZGU6IHByaW50IGluZm8gb2YgdGhlIGdpdmVuIC5wcm90byBmaWxlcyBhbmQg
ZXhpdC4KLSAgfTsKLQotICBNb2RlIG1vZGVfOwotCi0gIGVudW0gUHJpbnRNb2RlIHsKLSAgICBQ
UklOVF9OT05FLCAgICAgICAgICAgICAgIC8vIE5vdCBpbiBNT0RFX1BSSU5UCi0gICAgUFJJTlRf
RlJFRV9GSUVMRFMsICAgICAgICAvLyAtLXByaW50X2ZyZWVfZmllbGRzCi0gIH07Ci0KLSAgUHJp
bnRNb2RlIHByaW50X21vZGVfOwotCi0gIGVudW0gRXJyb3JGb3JtYXQgewotICAgIEVSUk9SX0ZP
Uk1BVF9HQ0MsICAgLy8gR0NDIGVycm9yIG91dHB1dCBmb3JtYXQgKGRlZmF1bHQpLgotICAgIEVS
Uk9SX0ZPUk1BVF9NU1ZTICAgLy8gVmlzdWFsIFN0dWRpbyBvdXRwdXQgKC0tZXJyb3JfZm9ybWF0
PW1zdnMpLgotICB9OwotCi0gIEVycm9yRm9ybWF0IGVycm9yX2Zvcm1hdF87Ci0KLSAgdmVjdG9y
PHBhaXI8c3RyaW5nLCBzdHJpbmc+ID4gcHJvdG9fcGF0aF87ICAvLyBTZWFyY2ggcGF0aCBmb3Ig
cHJvdG8gZmlsZXMuCi0gIHZlY3RvcjxzdHJpbmc+IGlucHV0X2ZpbGVzXzsgICAgICAgICAgICAg
ICAgLy8gTmFtZXMgb2YgdGhlIGlucHV0IHByb3RvIGZpbGVzLgotCi0gIC8vIG91dHB1dF9kaXJl
Y3RpdmVzXyBsaXN0cyBhbGwgdGhlIGZpbGVzIHdlIGFyZSBzdXBwb3NlZCB0byBvdXRwdXQgYW5k
IHdoYXQKLSAgLy8gZ2VuZXJhdG9yIHRvIHVzZSBmb3IgZWFjaC4KLSAgc3RydWN0IE91dHB1dERp
cmVjdGl2ZSB7Ci0gICAgc3RyaW5nIG5hbWU7ICAgICAgICAgICAgICAgIC8vIEUuZy4gIi0tZm9v
X291dCIKLSAgICBDb2RlR2VuZXJhdG9yKiBnZW5lcmF0b3I7ICAgLy8gTlVMTCBmb3IgcGx1Z2lu
cwotICAgIHN0cmluZyBwYXJhbWV0ZXI7Ci0gICAgc3RyaW5nIG91dHB1dF9sb2NhdGlvbjsKLSAg
fTsKLSAgdmVjdG9yPE91dHB1dERpcmVjdGl2ZT4gb3V0cHV0X2RpcmVjdGl2ZXNfOwotCi0gIC8v
IFdoZW4gdXNpbmcgLS1lbmNvZGUgb3IgLS1kZWNvZGUsIHRoaXMgbmFtZXMgdGhlIHR5cGUgd2Ug
YXJlIGVuY29kaW5nIG9yCi0gIC8vIGRlY29kaW5nLiAgKEVtcHR5IHN0cmluZyBpbmRpY2F0ZXMg
LS1kZWNvZGVfcmF3LikKLSAgc3RyaW5nIGNvZGVjX3R5cGVfOwotCi0gIC8vIElmIC0tZGVzY3Jp
cHRvcl9zZXRfb3V0IHdhcyBnaXZlbiwgdGhpcyBpcyB0aGUgZmlsZW5hbWUgdG8gd2hpY2ggdGhl
Ci0gIC8vIEZpbGVEZXNjcmlwdG9yU2V0IHNob3VsZCBiZSB3cml0dGVuLiAgT3RoZXJ3aXNlLCBl
bXB0eS4KLSAgc3RyaW5nIGRlc2NyaXB0b3Jfc2V0X25hbWVfOwotCi0gIC8vIElmIC0tZGVwZW5k
ZW5jeV9vdXQgd2FzIGdpdmVuLCB0aGlzIGlzIHRoZSBwYXRoIHRvIHRoZSBmaWxlIHdoZXJlIHRo
ZQotICAvLyBkZXBlbmRlbmN5IGZpbGUgd2lsbCBiZSB3cml0dGVuLiBPdGhlcndpc2UsIGVtcHR5
LgotICBzdHJpbmcgZGVwZW5kZW5jeV9vdXRfbmFtZV87Ci0KLSAgLy8gVHJ1ZSBpZiAtLWluY2x1
ZGVfaW1wb3J0cyB3YXMgZ2l2ZW4sIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQKLSAgLy8gd3JpdGUg
YWxsIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIHRvIHRoZSBEZXNjcmlwdG9yU2V0LiAgT3RoZXJ3
aXNlLCBvbmx5Ci0gIC8vIHRoZSAucHJvdG8gZmlsZXMgbGlzdGVkIG9uIHRoZSBjb21tYW5kLWxp
bmUgYXJlIGFkZGVkLgotICBib29sIGltcG9ydHNfaW5fZGVzY3JpcHRvcl9zZXRfOwotCi0gIC8v
IFRydWUgaWYgLS1pbmNsdWRlX3NvdXJjZV9pbmZvIHdhcyBnaXZlbiwgbWVhbmluZyB0aGF0IHdl
IHNob3VsZCBub3Qgc3RyaXAKLSAgLy8gU291cmNlQ29kZUluZm8gZnJvbSB0aGUgRGVzY3JpcHRv
clNldC4KLSAgYm9vbCBzb3VyY2VfaW5mb19pbl9kZXNjcmlwdG9yX3NldF87Ci0KLSAgLy8gV2Fz
IHRoZSAtLWRpc2FsbG93X3NlcnZpY2VzIGZsYWcgdXNlZD8KLSAgYm9vbCBkaXNhbGxvd19zZXJ2
aWNlc187Ci0KLSAgLy8gU2VlIFNldElucHV0c0FyZVByb3RvUGF0aFJlbGF0aXZlKCkuCi0gIGJv
b2wgaW5wdXRzX2FyZV9wcm90b19wYXRoX3JlbGF0aXZlXzsKLQotICBHT09HTEVfRElTQUxMT1df
RVZJTF9DT05TVFJVQ1RPUlMoQ29tbWFuZExpbmVJbnRlcmZhY2UpOwotfTsKLQotfSAgLy8gbmFt
ZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNw
YWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ09NTUFORF9M
SU5FX0lOVEVSRkFDRV9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jb21tYW5kX2xpbmVfaW50ZXJmYWNlX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2VfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDliNTA0ZDI1MjQ3Njg2ZGUxNGMxZmVlYmIxNmI3Nzk4OWE5ZmJl
YTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2VfdW5pdHRlc3QuY2MK
KysrIC9kZXYvbnVsbApAQCAtMSwxODM0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEp
Ci0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBT
YW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpZmRl
ZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGlvLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHVuaXN0ZC5oPgot
I2VuZGlmCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNlbmRpZgotI2luY2x1ZGUg
PHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jb21tYW5kX2xpbmVfaW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3Rlc3RpbmcvZmlsZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9t
b2NrX2NvZGVfZ2VuZXJhdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L3N1YnByb2Nlc3MuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wYi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi90ZXN0aW5nL2ZpbGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRl
Lmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+Ci0KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewot
bmFtZXNwYWNlIGNvbXBpbGVyIHsKLQotLy8gRGlzYWJsZSB0aGUgd2hvbGUgdGVzdCB3aGVuIHdl
IHVzZSB0Y21hbGxvYyBmb3IgImRyYWNvbmlhbiIgaGVhcCBjaGVja3MsIGluCi0vLyB3aGljaCBj
YXNlIHRjbWFsbG9jIHdpbGwgcHJpbnQgd2FybmluZ3MgdGhhdCBmYWlsIHRoZSBwbHVnaW4gdGVz
dHMuCi0jaWYgIUdPT0dMRV9QUk9UT0JVRl9IRUFQX0NIRUNLX0RSQUNPTklBTgotCi0jaWYgZGVm
aW5lZChfV0lOMzIpCi0jaWZuZGVmIFNURElOX0ZJTEVOTwotI2RlZmluZSBTVERJTl9GSUxFTk8g
MAotI2VuZGlmCi0jaWZuZGVmIFNURE9VVF9GSUxFTk8KLSNkZWZpbmUgU1RET1VUX0ZJTEVOTyAx
Ci0jZW5kaWYKLSNpZm5kZWYgRl9PSwotI2RlZmluZSBGX09LIDAwICAvLyBub3QgZGVmaW5lZCBi
eSBNU1ZDIGZvciB3aGF0ZXZlciByZWFzb24KLSNlbmRpZgotI2VuZGlmCi0KLW5hbWVzcGFjZSB7
Ci0KLWJvb2wgRmlsZUV4aXN0cyhjb25zdCBzdHJpbmcmIHBhdGgpIHsKLSAgcmV0dXJuIEZpbGU6
OkV4aXN0cyhwYXRoKTsKLX0KLQotY2xhc3MgQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0IDogcHVi
bGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB2b2lkIFNldFVwKCk7
Ci0gIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpOwotCi0gIC8vIFJ1bnMgdGhlIENvbW1hbmRMaW5l
SW50ZXJmYWNlIHdpdGggdGhlIGdpdmVuIGNvbW1hbmQgbGluZS4gIFRoZQotICAvLyBjb21tYW5k
IGlzIGF1dG9tYXRpY2FsbHkgc3BsaXQgb24gc3BhY2VzLCBhbmQgdGhlIHN0cmluZyAiJHRtcGRp
ciIKLSAgLy8gaXMgcmVwbGFjZWQgd2l0aCBUZXN0VGVtcERpcigpLgotICB2b2lkIFJ1bihjb25z
dCBzdHJpbmcmIGNvbW1hbmQpOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIE1ldGhvZHMgdG8gc2V0
IHVwIHRoZSB0ZXN0IChjYWxsZWQgYmVmb3JlIFJ1bigpKS4KLQotICBjbGFzcyBOdWxsQ29kZUdl
bmVyYXRvcjsKLQotICAvLyBOb3JtYWxseSBwbHVnaW5zIGFyZSBhbGxvd2VkIGZvciBhbGwgdGVz
dHMuICBDYWxsIHRoaXMgdG8gZXhwbGljaXRseQotICAvLyBkaXNhYmxlIHRoZW0uCi0gIHZvaWQg
RGlzYWxsb3dQbHVnaW5zKCkgeyBkaXNhbGxvd19wbHVnaW5zXyA9IHRydWU7IH0KLQotICAvLyBD
cmVhdGUgYSB0ZW1wIGZpbGUgd2l0aGluIHRlbXBfZGlyZWN0b3J5XyB3aXRoIHRoZSBnaXZlbiBu
YW1lLgotICAvLyBUaGUgY29udGFpbmluZyBkaXJlY3RvcnkgaXMgYWxzbyBjcmVhdGVkIGlmIG5l
Y2Vzc2FyeS4KLSAgdm9pZCBDcmVhdGVUZW1wRmlsZShjb25zdCBzdHJpbmcmIG5hbWUsIGNvbnN0
IHN0cmluZyYgY29udGVudHMpOwotCi0gIC8vIENyZWF0ZSBhIHN1YmRpcmVjdG9yeSB3aXRoaW4g
dGVtcF9kaXJlY3RvcnlfLgotICB2b2lkIENyZWF0ZVRlbXBEaXIoY29uc3Qgc3RyaW5nJiBuYW1l
KTsKLQotI2lmZGVmIFBST1RPQlVGX09QRU5TT1VSQ0UKLSAgLy8gQ2hhbmdlIHdvcmtpbmcgZGly
ZWN0b3J5IHRvIHRlbXAgZGlyZWN0b3J5LgotICB2b2lkIFN3aXRjaFRvVGVtcERpcmVjdG9yeSgp
IHsKLSAgICBGaWxlOjpDaGFuZ2VXb3JraW5nRGlyZWN0b3J5KHRlbXBfZGlyZWN0b3J5Xyk7Ci0g
IH0KLSNlbHNlICAvLyAhUFJPVE9CVUZfT1BFTlNPVVJDRQotICAvLyBUT0RPKHRlYm9yaW5nKTog
RmlndXJlIG91dCBob3cgdG8gY2hhbmdlIGFuZCBnZXQgd29ya2luZyBkaXJlY3RvcnkgaW4KLSAg
Ly8gZ29vZ2xlMy4KLSNlbmRpZiAgLy8gIVBST1RPQlVGX09QRU5TT1VSQ0UKLQotICB2b2lkIFNl
dElucHV0c0FyZVByb3RvUGF0aFJlbGF0aXZlKGJvb2wgZW5hYmxlKSB7Ci0gICAgY2xpXy5TZXRJ
bnB1dHNBcmVQcm90b1BhdGhSZWxhdGl2ZShlbmFibGUpOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgLy8gTWV0aG9kcyB0byBjaGVjayB0aGUgdGVzdCByZXN1bHRzIChjYWxsZWQgYWZ0ZXIgUnVu
KCkpLgotCi0gIC8vIENoZWNrcyB0aGF0IG5vIHRleHQgd2FzIHdyaXR0ZW4gdG8gc3RkZXJyIGR1
cmluZyBSdW4oKSwgYW5kIFJ1bigpCi0gIC8vIHJldHVybmVkIDAuCi0gIHZvaWQgRXhwZWN0Tm9F
cnJvcnMoKTsKLQotICAvLyBDaGVja3MgdGhhdCBSdW4oKSByZXR1cm5lZCBub24temVybyBhbmQg
dGhlIHN0ZGVyciBvdXRwdXQgaXMgZXhhY3RseQotICAvLyB0aGUgdGV4dCBnaXZlbi4gIGV4cGVj
dGVkX3Rlc3QgbWF5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byAiJHRtcGRpciIsCi0gIC8vIHdoaWNo
IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgcGF0aC4KLSAgdm9p
ZCBFeHBlY3RFcnJvclRleHQoY29uc3Qgc3RyaW5nJiBleHBlY3RlZF90ZXh0KTsKLQotICAvLyBD
aGVja3MgdGhhdCBSdW4oKSByZXR1cm5lZCBub24temVybyBhbmQgdGhlIHN0ZGVyciBjb250YWlu
cyB0aGUgZ2l2ZW4KLSAgLy8gc3Vic3RyaW5nLgotICB2b2lkIEV4cGVjdEVycm9yU3Vic3RyaW5n
KGNvbnN0IHN0cmluZyYgZXhwZWN0ZWRfc3Vic3RyaW5nKTsKLQotICAvLyBMaWtlIEV4cGVjdEVy
cm9yU3Vic3RyaW5nLCBidXQgY2hlY2tzIHRoYXQgUnVuKCkgcmV0dXJuZWQgemVyby4KLSAgdm9p
ZCBFeHBlY3RFcnJvclN1YnN0cmluZ1dpdGhaZXJvUmV0dXJuQ29kZSgKLSAgICAgIGNvbnN0IHN0
cmluZyYgZXhwZWN0ZWRfc3Vic3RyaW5nKTsKLQotICAvLyBDaGVja3MgdGhhdCB0aGUgY2FwdHVy
ZWQgc3Rkb3V0IGlzIHRoZSBzYW1lIGFzIHRoZSBleHBlY3RlZF90ZXh0LgotICB2b2lkIEV4cGVj
dENhcHR1cmVkU3Rkb3V0KGNvbnN0IHN0cmluZyYgZXhwZWN0ZWRfdGV4dCk7Ci0KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIEV4cGVjdEVycm9yU3Vic3RyaW5nKGV4cGVjdGVkX3N1YnN0cmluZykgd291
bGQgcGFzcywgYnV0Ci0gIC8vIGRvZXMgbm90IGZhaWwgb3RoZXJ3aXNlLgotICBib29sIEhhc0Fs
dGVybmF0ZUVycm9yU3Vic3RyaW5nKGNvbnN0IHN0cmluZyYgZXhwZWN0ZWRfc3Vic3RyaW5nKTsK
LQotICAvLyBDaGVja3MgdGhhdCBNb2NrQ29kZUdlbmVyYXRvcjo6R2VuZXJhdGUoKSB3YXMgY2Fs
bGVkIGluIHRoZSBnaXZlbgotICAvLyBjb250ZXh0IChvciB0aGUgZ2VuZXJhdG9yIGluIHRlc3Rf
cGx1Z2luLmNjLCB3aGljaCBwcm9kdWNlcyB0aGUgc2FtZQotICAvLyBvdXRwdXQpLiAgVGhhdCBp
cywgdGhpcyB0ZXN0cyBpZiB0aGUgZ2VuZXJhdG9yIHdpdGggdGhlIGdpdmVuIG5hbWUKLSAgLy8g
d2FzIGNhbGxlZCB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXIgYW5kIHByb3RvIGZpbGUgYW5kIHBy
b2R1Y2VkIHRoZQotICAvLyBnaXZlbiBvdXRwdXQgZmlsZS4gIFRoaXMgaXMgY2hlY2tlZCBieSBy
ZWFkaW5nIHRoZSBvdXRwdXQgZmlsZSBhbmQKLSAgLy8gY2hlY2tpbmcgdGhhdCBpdCBjb250YWlu
cyB0aGUgY29udGVudCB0aGF0IE1vY2tDb2RlR2VuZXJhdG9yIHdvdWxkCi0gIC8vIGdlbmVyYXRl
IGdpdmVuIHRoZXNlIGlucHV0cy4gIG1lc3NhZ2VfbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgZmly
c3QKLSAgLy8gbWVzc2FnZSB0aGF0IGFwcGVhcmVkIGluIHRoZSBwcm90byBmaWxlOyB0aGlzIGlz
IGp1c3QgdG8gbWFrZSBleHRyYQotICAvLyBzdXJlIHRoYXQgdGhlIGNvcnJlY3QgZmlsZSB3YXMg
cGFyc2VkLgotICB2b2lkIEV4cGVjdEdlbmVyYXRlZChjb25zdCBzdHJpbmcmIGdlbmVyYXRvcl9u
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBwcm90b19uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIG1lc3NhZ2VfbmFtZSk7Ci0gIHZvaWQgRXhwZWN0
R2VuZXJhdGVkKGNvbnN0IHN0cmluZyYgZ2VuZXJhdG9yX25hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0cmluZyYgcGFyYW1ldGVyLAotICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdHJpbmcmIHByb3RvX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
cmluZyYgbWVzc2FnZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcm
IG91dHB1dF9kaXJlY3RvcnkpOwotICB2b2lkIEV4cGVjdEdlbmVyYXRlZFdpdGhNdWx0aXBsZUlu
cHV0cyhjb25zdCBzdHJpbmcmIGdlbmVyYXRvcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGFsbF9wcm90b19uYW1lcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBwcm90b19u
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmcmIG1lc3NhZ2VfbmFtZSk7Ci0gIHZvaWQgRXhwZWN0R2VuZXJhdGVkV2l0aEluc2VydGlvbnMo
Y29uc3Qgc3RyaW5nJiBnZW5lcmF0b3JfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGluc2VydGlvbnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBwcm90b19uYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbWVzc2FnZV9uYW1l
KTsKLQotICB2b2lkIEV4cGVjdE51bGxDb2RlR2VuZXJhdG9yQ2FsbGVkKGNvbnN0IHN0cmluZyYg
cGFyYW1ldGVyKTsKLQotICB2b2lkIFJlYWREZXNjcmlwdG9yU2V0KGNvbnN0IHN0cmluZyYgZmls
ZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JTZXQqIGRlc2Ny
aXB0b3Jfc2V0KTsKLQotICB2b2lkIEV4cGVjdEZpbGVDb250ZW50KGNvbnN0IHN0cmluZyYgZmls
ZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBjb250ZW50KTsK
LQotIHByaXZhdGU6Ci0gIC8vIFRoZSBvYmplY3Qgd2UgYXJlIHRlc3RpbmcuCi0gIENvbW1hbmRM
aW5lSW50ZXJmYWNlIGNsaV87Ci0KLSAgLy8gV2FzIERpc2FsbG93UGx1Z2lucygpIGNhbGxlZD8K
LSAgYm9vbCBkaXNhbGxvd19wbHVnaW5zXzsKLQotICAvLyBXZSBjcmVhdGUgYSBkaXJlY3Rvcnkg
d2l0aGluIFRlc3RUZW1wRGlyKCkgaW4gb3JkZXIgdG8gYWRkIGV4dHJhCi0gIC8vIHByb3RlY3Rp
b24gYWdhaW5zdCBhY2NpZGVudGFsbHkgZGVsZXRpbmcgdXNlciBmaWxlcyAoc2luY2Ugd2UgcmVj
dXJzaXZlbHkKLSAgLy8gZGVsZXRlIHRoaXMgZGlyZWN0b3J5IGR1cmluZyB0aGUgdGVzdCkuICBU
aGlzIGlzIHRoZSBmdWxsIHBhdGggb2YgdGhhdAotICAvLyBkaXJlY3RvcnkuCi0gIHN0cmluZyB0
ZW1wX2RpcmVjdG9yeV87Ci0KLSAgLy8gVGhlIHJlc3VsdCBvZiBSdW4oKS4KLSAgaW50IHJldHVy
bl9jb2RlXzsKLQotICAvLyBUaGUgY2FwdHVyZWQgc3RkZXJyIG91dHB1dC4KLSAgc3RyaW5nIGVy
cm9yX3RleHRfOwotCi0gIC8vIFRoZSBjYXB0dXJlZCBzdGRvdXQuCi0gIHN0cmluZyBjYXB0dXJl
ZF9zdGRvdXRfOwotCi0gIC8vIFBvaW50ZXJzIHdoaWNoIG5lZWQgdG8gYmUgZGVsZXRlZCBsYXRl
ci4KLSAgdmVjdG9yPENvZGVHZW5lcmF0b3IqPiBtb2NrX2dlbmVyYXRvcnNfdG9fZGVsZXRlXzsK
LQotICBOdWxsQ29kZUdlbmVyYXRvciogbnVsbF9nZW5lcmF0b3JfOwotfTsKLQotY2xhc3MgQ29t
bWFuZExpbmVJbnRlcmZhY2VUZXN0OjpOdWxsQ29kZUdlbmVyYXRvciA6IHB1YmxpYyBDb2RlR2Vu
ZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIE51bGxDb2RlR2VuZXJhdG9yKCkgOiBjYWxsZWRfKGZhbHNl
KSB7fQotICB+TnVsbENvZGVHZW5lcmF0b3IoKSB7fQotCi0gIG11dGFibGUgYm9vbCBjYWxsZWRf
OwotICBtdXRhYmxlIHN0cmluZyBwYXJhbWV0ZXJfOwotCi0gIC8vIGltcGxlbWVudHMgQ29kZUdl
bmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wg
R2VuZXJhdGUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgY29u
c3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yQ29udGV4dCog
Y29udGV4dCwKLSAgICAgICAgICAgICAgICBzdHJpbmcqIGVycm9yKSBjb25zdCB7Ci0gICAgY2Fs
bGVkXyA9IHRydWU7Ci0gICAgcGFyYW1ldGVyXyA9IHBhcmFtZXRlcjsKLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkIENvbW1hbmRMaW5lSW50ZXJmYWNl
VGVzdDo6U2V0VXAoKSB7Ci0gIC8vIE1vc3Qgb2YgdGhlc2UgdGVzdHMgd2VyZSB3cml0dGVuIGJl
Zm9yZSB0aGlzIG9wdGlvbiB3YXMgYWRkZWQsIHNvIHdlCi0gIC8vIHJ1biB3aXRoIHRoZSBvcHRp
b24gb24gKHdoaWNoIHVzZWQgdG8gYmUgdGhlIG9ubHkgd2F5KSBleGNlcHQgaW4gY2VydGFpbgot
ICAvLyB0ZXN0cyB3aGVyZSB3ZSB0dXJuIGl0IG9mZi4KLSAgY2xpXy5TZXRJbnB1dHNBcmVQcm90
b1BhdGhSZWxhdGl2ZSh0cnVlKTsKLQotICB0ZW1wX2RpcmVjdG9yeV8gPSBUZXN0VGVtcERpcigp
ICsgIi9wcm90bzJfY2xpX3Rlc3RfdGVtcCI7Ci0KLSAgLy8gSWYgdGhlIHRlbXAgZGlyZWN0b3J5
IGFscmVhZHkgZXhpc3RzLCBpdCBtdXN0IGJlIGxlZnQgb3ZlciBmcm9tIGEKLSAgLy8gcHJldmlv
dXMgcnVuLiAgRGVsZXRlIGl0LgotICBpZiAoRmlsZUV4aXN0cyh0ZW1wX2RpcmVjdG9yeV8pKSB7
Ci0gICAgRmlsZTo6RGVsZXRlUmVjdXJzaXZlbHkodGVtcF9kaXJlY3RvcnlfLCBOVUxMLCBOVUxM
KTsKLSAgfQotCi0gIC8vIENyZWF0ZSB0aGUgdGVtcCBkaXJlY3RvcnkuCi0gIEdPT0dMRV9DSEVD
S19PSyhGaWxlOjpDcmVhdGVEaXIodGVtcF9kaXJlY3RvcnlfLCAwNzc3KSk7Ci0KLSAgLy8gUmVn
aXN0ZXIgZ2VuZXJhdG9ycy4KLSAgQ29kZUdlbmVyYXRvciogZ2VuZXJhdG9yID0gbmV3IE1vY2tD
b2RlR2VuZXJhdG9yKCJ0ZXN0X2dlbmVyYXRvciIpOwotICBtb2NrX2dlbmVyYXRvcnNfdG9fZGVs
ZXRlXy5wdXNoX2JhY2soZ2VuZXJhdG9yKTsKLSAgY2xpXy5SZWdpc3RlckdlbmVyYXRvcigiLS10
ZXN0X291dCIsICItLXRlc3Rfb3B0IiwgZ2VuZXJhdG9yLCAiVGVzdCBvdXRwdXQuIik7Ci0gIGNs
aV8uUmVnaXN0ZXJHZW5lcmF0b3IoIi10IiwgZ2VuZXJhdG9yLCAiVGVzdCBvdXRwdXQuIik7Ci0K
LSAgZ2VuZXJhdG9yID0gbmV3IE1vY2tDb2RlR2VuZXJhdG9yKCJhbHRfZ2VuZXJhdG9yIik7Ci0g
IG1vY2tfZ2VuZXJhdG9yc190b19kZWxldGVfLnB1c2hfYmFjayhnZW5lcmF0b3IpOwotICBjbGlf
LlJlZ2lzdGVyR2VuZXJhdG9yKCItLWFsdF9vdXQiLCBnZW5lcmF0b3IsICJBbHQgb3V0cHV0LiIp
OwotCi0gIGdlbmVyYXRvciA9IG51bGxfZ2VuZXJhdG9yXyA9IG5ldyBOdWxsQ29kZUdlbmVyYXRv
cigpOwotICBtb2NrX2dlbmVyYXRvcnNfdG9fZGVsZXRlXy5wdXNoX2JhY2soZ2VuZXJhdG9yKTsK
LSAgY2xpXy5SZWdpc3RlckdlbmVyYXRvcigiLS1udWxsX291dCIsIGdlbmVyYXRvciwgIk51bGwg
b3V0cHV0LiIpOwotCi0gIGRpc2FsbG93X3BsdWdpbnNfID0gZmFsc2U7Ci19Ci0KLXZvaWQgQ29t
bWFuZExpbmVJbnRlcmZhY2VUZXN0OjpUZWFyRG93bigpIHsKLSAgLy8gRGVsZXRlIHRoZSB0ZW1w
IGRpcmVjdG9yeS4KLSAgaWYgKEZpbGVFeGlzdHModGVtcF9kaXJlY3RvcnlfKSkgewotICAgIEZp
bGU6OkRlbGV0ZVJlY3Vyc2l2ZWx5KHRlbXBfZGlyZWN0b3J5XywgTlVMTCwgTlVMTCk7Ci0gIH0K
LQotICAvLyBEZWxldGUgYWxsIHRoZSBNb2NrQ29kZUdlbmVyYXRvcnMuCi0gIGZvciAoaW50IGkg
PSAwOyBpIDwgbW9ja19nZW5lcmF0b3JzX3RvX2RlbGV0ZV8uc2l6ZSgpOyBpKyspIHsKLSAgICBk
ZWxldGUgbW9ja19nZW5lcmF0b3JzX3RvX2RlbGV0ZV9baV07Ci0gIH0KLSAgbW9ja19nZW5lcmF0
b3JzX3RvX2RlbGV0ZV8uY2xlYXIoKTsKLX0KLQotdm9pZCBDb21tYW5kTGluZUludGVyZmFjZVRl
c3Q6OlJ1bihjb25zdCBzdHJpbmcmIGNvbW1hbmQpIHsKLSAgdmVjdG9yPHN0cmluZz4gYXJncyA9
IFNwbGl0KGNvbW1hbmQsICIgIiwgdHJ1ZSk7Ci0KLSAgaWYgKCFkaXNhbGxvd19wbHVnaW5zXykg
ewotICAgIGNsaV8uQWxsb3dQbHVnaW5zKCJwcmVmaXgtIik7Ci0jaWZuZGVmIEdPT0dMRV9USElS
RF9QQVJUWV9QUk9UT0JVRgotICAgIHN0cmluZyBwbHVnaW5fcGF0aDsKLSNpZmRlZiBHT09HTEVf
UFJPVE9CVUZfVEVTVF9QTFVHSU5fUEFUSAotICAgIHBsdWdpbl9wYXRoID0gR09PR0xFX1BST1RP
QlVGX1RFU1RfUExVR0lOX1BBVEg7Ci0jZWxzZQotICAgIGNvbnN0IGNoYXIqIHBvc3NpYmxlX3Bh
dGhzW10gPSB7Ci0gICAgICAvLyBXaGVuIGJ1aWxkaW5nIHdpdGggc2hhcmVkIGxpYnJhcmllcywg
bGlidG9vbCBoaWRlcyB0aGUgcmVhbCBleGVjdXRhYmxlCi0gICAgICAvLyBpbiAubGlicyBhbmQg
cHV0cyBhIGZha2Ugd3JhcHBlciBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0gICAgICAvLyBV
bmZvcnR1bmF0ZWx5LCBkdWUgdG8gYW4gYXBwYXJlbnQgYnVnIG9uIEN5Z3dpbi9NaW5HVywgaWYg
b25lIHByb2dyYW0KLSAgICAgIC8vIHdyYXBwZWQgaW4gdGhpcyB3YXkgKGUuZy4gcHJvdG9idWYt
dGVzdHMuZXhlKSB0cmllcyB0byBleGVjdXRlIGFub3RoZXIKLSAgICAgIC8vIHByb2dyYW0gd3Jh
cHBlZCBpbiB0aGlzIHdheSAoZS5nLiB0ZXN0X3BsdWdpbi5leGUpLCB0aGUgbGF0dGVyIGZhaWxz
Ci0gICAgICAvLyB3aXRoIGVycm9yIGNvZGUgMTI3IGFuZCBubyBleHBsYW5hdGlvbiBtZXNzYWdl
LiAgUHJlc3VtYWJseSB0aGUgcHJvYmxlbQotICAgICAgLy8gaXMgdGhhdCB0aGUgd3JhcHBlciBm
b3IgcHJvdG9idWYtdGVzdHMuZXhlIHNldCBzb21lIGVudmlyb25tZW50Ci0gICAgICAvLyB2YXJp
YWJsZXMgdGhhdCBjb25mdXNlIHRoZSB3cmFwcGVyIGZvciB0ZXN0X3BsdWdpbi5leGUuICBMdWNr
aWx5LCBpdAotICAgICAgLy8gdHVybnMgb3V0IHRoYXQgaWYgd2Ugc2ltcGx5IGludm9rZSB0aGUg
d3JhcHBlZCB0ZXN0X3BsdWdpbi5leGUKLSAgICAgIC8vIGRpcmVjdGx5LCBpdCB3b3JrcyAtLSBJ
IGd1ZXNzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0IGJ5IHRoZQotICAgICAgLy8gcHJv
dG9idWYtdGVzdHMuZXhlIHdyYXBwZXIgaGFwcGVuIHRvIGJlIGNvcnJlY3QgZm9yIGl0IHRvby4g
IFNvIHdlIGRvCi0gICAgICAvLyB0aGF0LgotICAgICAgIi5saWJzL3Rlc3RfcGx1Z2luLmV4ZSIs
ICAvLyBXaW4zMiB3L2F1dG90b29sIChDeWd3aW4gLyBNaW5HVykKLSAgICAgICJ0ZXN0X3BsdWdp
bi5leGUiLCAgICAgICAgLy8gT3RoZXIgV2luMzIgKE1TVkMpCi0gICAgICAidGVzdF9wbHVnaW4i
LCAgICAgICAgICAgIC8vIFVuaXgKLSAgICB9OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgR09P
R0xFX0FSUkFZU0laRShwb3NzaWJsZV9wYXRocyk7IGkrKykgewotICAgICAgaWYgKGFjY2Vzcyhw
b3NzaWJsZV9wYXRoc1tpXSwgRl9PSykgPT0gMCkgewotICAgICAgICBwbHVnaW5fcGF0aCA9IHBv
c3NpYmxlX3BhdGhzW2ldOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0jZW5kaWYK
LQotICAgIGlmIChwbHVnaW5fcGF0aC5lbXB0eSgpKSB7Ci0jZWxzZQotICAgIHN0cmluZyBwbHVn
aW5fcGF0aCA9ICJ0aGlyZF9wYXJ0eS9wcm90b2J1Zi90ZXN0X3BsdWdpbiI7Ci0KLSAgICBpZiAo
YWNjZXNzKHBsdWdpbl9wYXRoLmNfc3RyKCksIEZfT0spICE9IDApIHsKLSNlbmRpZiAgLy8gR09P
R0xFX1RISVJEX1BBUlRZX1BST1RPQlVGCi0gICAgICBHT09HTEVfTE9HKEVSUk9SKQotICAgICAg
ICAgIDw8ICJQbHVnaW4gZXhlY3V0YWJsZSBub3QgZm91bmQuICBQbHVnaW4gdGVzdHMgYXJlIGxp
a2VseSB0byBmYWlsLiI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGFyZ3MucHVzaF9iYWNrKCItLXBs
dWdpbj1wcmVmaXgtZ2VuLXBsdWc9IiArIHBsdWdpbl9wYXRoKTsKLSAgICB9Ci0gIH0KLQotICBn
b29nbGU6OnByb3RvYnVmOjpzY29wZWRfYXJyYXk8Y29uc3QgY2hhciAqID4gYXJndihuZXcgY29u
c3QgY2hhciogW2FyZ3Muc2l6ZSgpXSk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLnNp
emUoKTsgaSsrKSB7Ci0gICAgYXJnc1tpXSA9IFN0cmluZ1JlcGxhY2UoYXJnc1tpXSwgIiR0bXBk
aXIiLCB0ZW1wX2RpcmVjdG9yeV8sIHRydWUpOwotICAgIGFyZ3ZbaV0gPSBhcmdzW2ldLmNfc3Ry
KCk7Ci0gIH0KLQotICAvLyBUT0RPKGppZWx1byk6IEN5Z3dpbiBkb2Vzbid0IHdvcmsgd2VsbCBp
ZiB3ZSB0cnkgdG8gY2FwdHVyZSBzdGRlcnIgYW5kCi0gIC8vIHN0ZG91dCBhdCB0aGUgc2FtZSB0
aW1lLiBOZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IGFuZCBhZGQgdGhpcyBjYXB0dXJlIGJhY2sKLSAg
Ly8gZm9yIEN5Z3dpbi4KLSNpZiAhZGVmaW5lZChfX0NZR1dJTl9fKQotICBDYXB0dXJlVGVzdFN0
ZG91dCgpOwotI2VuZGlmCi0gIENhcHR1cmVUZXN0U3RkZXJyKCk7Ci0KLSAgcmV0dXJuX2NvZGVf
ID0gY2xpXy5SdW4oYXJncy5zaXplKCksIGFyZ3YuZ2V0KCkpOwotCi0gIGVycm9yX3RleHRfID0g
R2V0Q2FwdHVyZWRUZXN0U3RkZXJyKCk7Ci0jaWYgIWRlZmluZWQoX19DWUdXSU5fXykKLSAgY2Fw
dHVyZWRfc3Rkb3V0XyA9IEdldENhcHR1cmVkVGVzdFN0ZG91dCgpOwotI2VuZGlmCi19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdm9pZCBDb21tYW5kTGluZUludGVyZmFjZVRlc3Q6OkNyZWF0ZVRlbXBG
aWxlKAotICAgIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICBjb25zdCBzdHJpbmcmIGNvbnRlbnRz
KSB7Ci0gIC8vIENyZWF0ZSBwYXJlbnQgZGlyZWN0b3J5LCBpZiBuZWNlc3NhcnkuCi0gIHN0cmlu
Zzo6c2l6ZV90eXBlIHNsYXNoX3BvcyA9IG5hbWUuZmluZF9sYXN0X29mKCcvJyk7Ci0gIGlmIChz
bGFzaF9wb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgc3RyaW5nIGRpciA9IG5hbWUuc3Vic3Ry
KDAsIHNsYXNoX3Bvcyk7Ci0gICAgaWYgKCFGaWxlRXhpc3RzKHRlbXBfZGlyZWN0b3J5XyArICIv
IiArIGRpcikpIHsKLSAgICAgIEdPT0dMRV9DSEVDS19PSyhGaWxlOjpSZWN1cnNpdmVseUNyZWF0
ZURpcih0ZW1wX2RpcmVjdG9yeV8gKyAiLyIgKyBkaXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwNzc3KSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gV3JpdGUgZmls
ZS4KLSAgc3RyaW5nIGZ1bGxfbmFtZSA9IHRlbXBfZGlyZWN0b3J5XyArICIvIiArIG5hbWU7Ci0g
IEdPT0dMRV9DSEVDS19PSyhGaWxlOjpTZXRDb250ZW50cygKLSAgICAgIGZ1bGxfbmFtZSwgU3Ry
aW5nUmVwbGFjZShjb250ZW50cywgIiR0bXBkaXIiLCB0ZW1wX2RpcmVjdG9yeV8sIHRydWUpLAot
ICAgICAgdHJ1ZSkpOwotfQotCi12b2lkIENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdDo6Q3JlYXRl
VGVtcERpcihjb25zdCBzdHJpbmcmIG5hbWUpIHsKLSAgR09PR0xFX0NIRUNLX09LKEZpbGU6OlJl
Y3Vyc2l2ZWx5Q3JlYXRlRGlyKHRlbXBfZGlyZWN0b3J5XyArICIvIiArIG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA3NzcpKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi12b2lkIENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdDo6RXhwZWN0Tm9FcnJvcnMoKSB7Ci0g
IEVYUEVDVF9FUSgwLCByZXR1cm5fY29kZV8pOwotICBFWFBFQ1RfRVEoIiIsIGVycm9yX3RleHRf
KTsKLX0KLQotdm9pZCBDb21tYW5kTGluZUludGVyZmFjZVRlc3Q6OkV4cGVjdEVycm9yVGV4dChj
b25zdCBzdHJpbmcmIGV4cGVjdGVkX3RleHQpIHsKLSAgRVhQRUNUX05FKDAsIHJldHVybl9jb2Rl
Xyk7Ci0gIEVYUEVDVF9FUShTdHJpbmdSZXBsYWNlKGV4cGVjdGVkX3RleHQsICIkdG1wZGlyIiwg
dGVtcF9kaXJlY3RvcnlfLCB0cnVlKSwKLSAgICAgICAgICAgIGVycm9yX3RleHRfKTsKLX0KLQot
dm9pZCBDb21tYW5kTGluZUludGVyZmFjZVRlc3Q6OkV4cGVjdEVycm9yU3Vic3RyaW5nKAotICAg
IGNvbnN0IHN0cmluZyYgZXhwZWN0ZWRfc3Vic3RyaW5nKSB7Ci0gIEVYUEVDVF9ORSgwLCByZXR1
cm5fY29kZV8pOwotICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHRlc3Rpbmc6OklzU3Vic3RyaW5nLCBl
eHBlY3RlZF9zdWJzdHJpbmcsIGVycm9yX3RleHRfKTsKLX0KLQotdm9pZCBDb21tYW5kTGluZUlu
dGVyZmFjZVRlc3Q6OkV4cGVjdEVycm9yU3Vic3RyaW5nV2l0aFplcm9SZXR1cm5Db2RlKAotICAg
IGNvbnN0IHN0cmluZyYgZXhwZWN0ZWRfc3Vic3RyaW5nKSB7Ci0gIEVYUEVDVF9FUSgwLCByZXR1
cm5fY29kZV8pOwotICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHRlc3Rpbmc6OklzU3Vic3RyaW5nLCBl
eHBlY3RlZF9zdWJzdHJpbmcsIGVycm9yX3RleHRfKTsKLX0KLQotYm9vbCBDb21tYW5kTGluZUlu
dGVyZmFjZVRlc3Q6Okhhc0FsdGVybmF0ZUVycm9yU3Vic3RyaW5nKAotICAgIGNvbnN0IHN0cmlu
ZyYgZXhwZWN0ZWRfc3Vic3RyaW5nKSB7Ci0gIEVYUEVDVF9ORSgwLCByZXR1cm5fY29kZV8pOwot
ICByZXR1cm4gZXJyb3JfdGV4dF8uZmluZChleHBlY3RlZF9zdWJzdHJpbmcpICE9IHN0cmluZzo6
bnBvczsKLX0KLQotdm9pZCBDb21tYW5kTGluZUludGVyZmFjZVRlc3Q6OkV4cGVjdEdlbmVyYXRl
ZCgKLSAgICBjb25zdCBzdHJpbmcmIGdlbmVyYXRvcl9uYW1lLAotICAgIGNvbnN0IHN0cmluZyYg
cGFyYW1ldGVyLAotICAgIGNvbnN0IHN0cmluZyYgcHJvdG9fbmFtZSwKLSAgICBjb25zdCBzdHJp
bmcmIG1lc3NhZ2VfbmFtZSkgewotICBNb2NrQ29kZUdlbmVyYXRvcjo6RXhwZWN0R2VuZXJhdGVk
KAotICAgICAgZ2VuZXJhdG9yX25hbWUsIHBhcmFtZXRlciwgIiIsIHByb3RvX25hbWUsIG1lc3Nh
Z2VfbmFtZSwgcHJvdG9fbmFtZSwKLSAgICAgIHRlbXBfZGlyZWN0b3J5Xyk7Ci19Ci0KLXZvaWQg
Q29tbWFuZExpbmVJbnRlcmZhY2VUZXN0OjpFeHBlY3RHZW5lcmF0ZWQoCi0gICAgY29uc3Qgc3Ry
aW5nJiBnZW5lcmF0b3JfbmFtZSwKLSAgICBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwKLSAgICBj
b25zdCBzdHJpbmcmIHByb3RvX25hbWUsCi0gICAgY29uc3Qgc3RyaW5nJiBtZXNzYWdlX25hbWUs
Ci0gICAgY29uc3Qgc3RyaW5nJiBvdXRwdXRfZGlyZWN0b3J5KSB7Ci0gIE1vY2tDb2RlR2VuZXJh
dG9yOjpFeHBlY3RHZW5lcmF0ZWQoCi0gICAgICBnZW5lcmF0b3JfbmFtZSwgcGFyYW1ldGVyLCAi
IiwgcHJvdG9fbmFtZSwgbWVzc2FnZV9uYW1lLCBwcm90b19uYW1lLAotICAgICAgdGVtcF9kaXJl
Y3RvcnlfICsgIi8iICsgb3V0cHV0X2RpcmVjdG9yeSk7Ci19Ci0KLXZvaWQgQ29tbWFuZExpbmVJ
bnRlcmZhY2VUZXN0OjpFeHBlY3RHZW5lcmF0ZWRXaXRoTXVsdGlwbGVJbnB1dHMoCi0gICAgY29u
c3Qgc3RyaW5nJiBnZW5lcmF0b3JfbmFtZSwKLSAgICBjb25zdCBzdHJpbmcmIGFsbF9wcm90b19u
YW1lcywKLSAgICBjb25zdCBzdHJpbmcmIHByb3RvX25hbWUsCi0gICAgY29uc3Qgc3RyaW5nJiBt
ZXNzYWdlX25hbWUpIHsKLSAgTW9ja0NvZGVHZW5lcmF0b3I6OkV4cGVjdEdlbmVyYXRlZCgKLSAg
ICAgIGdlbmVyYXRvcl9uYW1lLCAiIiwgIiIsIHByb3RvX25hbWUsIG1lc3NhZ2VfbmFtZSwKLSAg
ICAgIGFsbF9wcm90b19uYW1lcywKLSAgICAgIHRlbXBfZGlyZWN0b3J5Xyk7Ci19Ci0KLXZvaWQg
Q29tbWFuZExpbmVJbnRlcmZhY2VUZXN0OjpFeHBlY3RHZW5lcmF0ZWRXaXRoSW5zZXJ0aW9ucygK
LSAgICBjb25zdCBzdHJpbmcmIGdlbmVyYXRvcl9uYW1lLAotICAgIGNvbnN0IHN0cmluZyYgcGFy
YW1ldGVyLAotICAgIGNvbnN0IHN0cmluZyYgaW5zZXJ0aW9ucywKLSAgICBjb25zdCBzdHJpbmcm
IHByb3RvX25hbWUsCi0gICAgY29uc3Qgc3RyaW5nJiBtZXNzYWdlX25hbWUpIHsKLSAgTW9ja0Nv
ZGVHZW5lcmF0b3I6OkV4cGVjdEdlbmVyYXRlZCgKLSAgICAgIGdlbmVyYXRvcl9uYW1lLCBwYXJh
bWV0ZXIsIGluc2VydGlvbnMsIHByb3RvX25hbWUsIG1lc3NhZ2VfbmFtZSwKLSAgICAgIHByb3Rv
X25hbWUsIHRlbXBfZGlyZWN0b3J5Xyk7Ci19Ci0KLXZvaWQgQ29tbWFuZExpbmVJbnRlcmZhY2VU
ZXN0OjpFeHBlY3ROdWxsQ29kZUdlbmVyYXRvckNhbGxlZCgKLSAgICBjb25zdCBzdHJpbmcmIHBh
cmFtZXRlcikgewotICBFWFBFQ1RfVFJVRShudWxsX2dlbmVyYXRvcl8tPmNhbGxlZF8pOwotICBF
WFBFQ1RfRVEocGFyYW1ldGVyLCBudWxsX2dlbmVyYXRvcl8tPnBhcmFtZXRlcl8pOwotfQotCi12
b2lkIENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdDo6UmVhZERlc2NyaXB0b3JTZXQoCi0gICAgY29u
c3Qgc3RyaW5nJiBmaWxlbmFtZSwgRmlsZURlc2NyaXB0b3JTZXQqIGRlc2NyaXB0b3Jfc2V0KSB7
Ci0gIHN0cmluZyBwYXRoID0gdGVtcF9kaXJlY3RvcnlfICsgIi8iICsgZmlsZW5hbWU7Ci0gIHN0
cmluZyBmaWxlX2NvbnRlbnRzOwotICBHT09HTEVfQ0hFQ0tfT0soRmlsZTo6R2V0Q29udGVudHMo
cGF0aCwgJmZpbGVfY29udGVudHMsIHRydWUpKTsKLQotICBpZiAoIWRlc2NyaXB0b3Jfc2V0LT5Q
YXJzZUZyb21TdHJpbmcoZmlsZV9jb250ZW50cykpIHsKLSAgICBGQUlMKCkgPDwgIkNvdWxkIG5v
dCBwYXJzZSBmaWxlIGNvbnRlbnRzOiAiIDw8IHBhdGg7Ci0gIH0KLX0KLQotdm9pZCBDb21tYW5k
TGluZUludGVyZmFjZVRlc3Q6OkV4cGVjdENhcHR1cmVkU3Rkb3V0KAotICAgIGNvbnN0IHN0cmlu
ZyYgZXhwZWN0ZWRfdGV4dCkgewotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfdGV4dCwgY2FwdHVyZWRf
c3Rkb3V0Xyk7Ci19Ci0KLQotdm9pZCBDb21tYW5kTGluZUludGVyZmFjZVRlc3Q6OkV4cGVjdEZp
bGVDb250ZW50KAotICAgIGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IHN0cmluZyYgY29u
dGVudCkgewotICBzdHJpbmcgcGF0aCA9IHRlbXBfZGlyZWN0b3J5XyArICIvIiArIGZpbGVuYW1l
OwotICBzdHJpbmcgZmlsZV9jb250ZW50czsKLSAgR09PR0xFX0NIRUNLX09LKEZpbGU6OkdldENv
bnRlbnRzKHBhdGgsICZmaWxlX2NvbnRlbnRzLCB0cnVlKSk7Ci0KLSAgRVhQRUNUX0VRKFN0cmlu
Z1JlcGxhY2UoY29udGVudCwgIiR0bXBkaXIiLCB0ZW1wX2RpcmVjdG9yeV8sIHRydWUpLAotICAg
ICAgICAgICAgZmlsZV9jb250ZW50cyk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVEVTVF9GKENv
bW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgQmFzaWNPdXRwdXQpIHsKLSAgLy8gVGVzdCB0aGF0IHRo
ZSBjb21tb24gY2FzZSB3b3Jrcy4KLQotICBDcmVhdGVUZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAg
ICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAibWVzc2FnZSBGb28ge31cbiIpOwotCi0g
IFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLS10ZXN0X291dD0kdG1wZGlyICIKLSAgICAgICItLXBy
b3RvX3BhdGg9JHRtcGRpciBmb28ucHJvdG8iKTsKLQotICBFeHBlY3ROb0Vycm9ycygpOwotICBF
eHBlY3RHZW5lcmF0ZWQoInRlc3RfZ2VuZXJhdG9yIiwgIiIsICJmb28ucHJvdG8iLCAiRm9vIik7
Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIEJhc2ljUGx1Z2luKSB7Ci0g
IC8vIFRlc3QgdGhhdCBiYXNpYyBwbHVnaW5zIHdvcmsuCi0KLSAgQ3JlYXRlVGVtcEZpbGUoImZv
by5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2UgRm9v
IHt9XG4iKTsKLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tcGx1Z19vdXQ9JHRtcGRpciAi
Ci0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9F
cnJvcnMoKTsKLSAgRXhwZWN0R2VuZXJhdGVkKCJ0ZXN0X3BsdWdpbiIsICIiLCAiZm9vLnByb3Rv
IiwgIkZvbyIpOwotfQotCi1URVNUX0YoQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0LCBHZW5lcmF0
b3JBbmRQbHVnaW4pIHsKLSAgLy8gSW52b2tlIGEgZ2VuZXJhdG9yIGFuZCBhIHBsdWdpbiBhdCB0
aGUgc2FtZSB0aW1lLgotCi0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJzeW50
YXggPSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxuIik7Ci0KLSAgUnVuKCJw
cm90b2NvbF9jb21waWxlciAtLXRlc3Rfb3V0PSR0bXBkaXIgLS1wbHVnX291dD0kdG1wZGlyICIK
LSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRpciBmb28ucHJvdG8iKTsKLQotICBFeHBlY3ROb0Vy
cm9ycygpOwotICBFeHBlY3RHZW5lcmF0ZWQoInRlc3RfZ2VuZXJhdG9yIiwgIiIsICJmb28ucHJv
dG8iLCAiRm9vIik7Ci0gIEV4cGVjdEdlbmVyYXRlZCgidGVzdF9wbHVnaW4iLCAiIiwgImZvby5w
cm90byIsICJGb28iKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgTXVs
dGlwbGVJbnB1dHMpIHsKLSAgLy8gVGVzdCBwYXJzaW5nIG11bHRpcGxlIGlucHV0IGZpbGVzLgot
Ci0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwi
O1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxuIik7Ci0gIENyZWF0ZVRlbXBGaWxlKCJiYXIucHJv
dG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEJhciB7fVxu
Iik7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLXRlc3Rfb3V0PSR0bXBkaXIgLS1wbHVn
X291dD0kdG1wZGlyICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRpciBmb28ucHJvdG8gYmFy
LnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJvcnMoKTsKLSAgRXhwZWN0R2VuZXJhdGVkV2l0aE11
bHRpcGxlSW5wdXRzKCJ0ZXN0X2dlbmVyYXRvciIsICJmb28ucHJvdG8sYmFyLnByb3RvIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb28ucHJvdG8iLCAiRm9vIik7Ci0g
IEV4cGVjdEdlbmVyYXRlZFdpdGhNdWx0aXBsZUlucHV0cygidGVzdF9nZW5lcmF0b3IiLCAiZm9v
LnByb3RvLGJhci5wcm90byIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
YmFyLnByb3RvIiwgIkJhciIpOwotICBFeHBlY3RHZW5lcmF0ZWRXaXRoTXVsdGlwbGVJbnB1dHMo
InRlc3RfcGx1Z2luIiwgImZvby5wcm90byxiYXIucHJvdG8iLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImZvby5wcm90byIsICJGb28iKTsKLSAgRXhwZWN0R2VuZXJhdGVk
V2l0aE11bHRpcGxlSW5wdXRzKCJ0ZXN0X3BsdWdpbiIsICJmb28ucHJvdG8sYmFyLnByb3RvIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXIucHJvdG8iLCAiQmFyIik7
Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIE11bHRpcGxlSW5wdXRzV2l0
aEltcG9ydCkgewotICAvLyBUZXN0IHBhcnNpbmcgbXVsdGlwbGUgaW5wdXQgZmlsZXMgd2l0aCBh
biBpbXBvcnQgb2YgYSBzZXBhcmF0ZSBmaWxlLgotCi0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJv
dG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxu
Iik7Ci0gIENyZWF0ZVRlbXBGaWxlKCJiYXIucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3Rv
MlwiO1xuIgotICAgICJpbXBvcnQgXCJiYXoucHJvdG9cIjtcbiIKLSAgICAibWVzc2FnZSBCYXIg
e1xuIgotICAgICIgIG9wdGlvbmFsIEJheiBhID0gMTtcbiIKLSAgICAifVxuIik7Ci0gIENyZWF0
ZVRlbXBGaWxlKCJiYXoucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAg
ICJtZXNzYWdlIEJheiB7fVxuIik7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLXRlc3Rf
b3V0PSR0bXBkaXIgLS1wbHVnX291dD0kdG1wZGlyICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRt
cGRpciBmb28ucHJvdG8gYmFyLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJvcnMoKTsKLSAgRXhw
ZWN0R2VuZXJhdGVkV2l0aE11bHRpcGxlSW5wdXRzKCJ0ZXN0X2dlbmVyYXRvciIsICJmb28ucHJv
dG8sYmFyLnByb3RvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb28u
cHJvdG8iLCAiRm9vIik7Ci0gIEV4cGVjdEdlbmVyYXRlZFdpdGhNdWx0aXBsZUlucHV0cygidGVz
dF9nZW5lcmF0b3IiLCAiZm9vLnByb3RvLGJhci5wcm90byIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiYmFyLnByb3RvIiwgIkJhciIpOwotICBFeHBlY3RHZW5lcmF0ZWRX
aXRoTXVsdGlwbGVJbnB1dHMoInRlc3RfcGx1Z2luIiwgImZvby5wcm90byxiYXIucHJvdG8iLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvby5wcm90byIsICJGb28iKTsK
LSAgRXhwZWN0R2VuZXJhdGVkV2l0aE11bHRpcGxlSW5wdXRzKCJ0ZXN0X3BsdWdpbiIsICJmb28u
cHJvdG8sYmFyLnByb3RvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJi
YXIucHJvdG8iLCAiQmFyIik7Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3Qs
IENyZWF0ZURpcmVjdG9yeSkgewotICAvLyBUZXN0IHRoYXQgd2hlbiB3ZSBvdXRwdXQgdG8gYSBz
dWItZGlyZWN0b3J5LCBpdCBpcyBjcmVhdGVkLgotCi0gIENyZWF0ZVRlbXBGaWxlKCJiYXIvYmF6
L2Zvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2Ug
Rm9vIHt9XG4iKTsKLSAgQ3JlYXRlVGVtcERpcigib3V0Iik7Ci0gIENyZWF0ZVRlbXBEaXIoInBs
dWdvdXQiKTsKLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tdGVzdF9vdXQ9JHRtcGRpci9v
dXQgLS1wbHVnX291dD0kdG1wZGlyL3BsdWdvdXQgIgotICAgICAgIi0tcHJvdG9fcGF0aD0kdG1w
ZGlyIGJhci9iYXovZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJvcnMoKTsKLSAgRXhwZWN0
R2VuZXJhdGVkKCJ0ZXN0X2dlbmVyYXRvciIsICIiLCAiYmFyL2Jhei9mb28ucHJvdG8iLCAiRm9v
IiwgIm91dCIpOwotICBFeHBlY3RHZW5lcmF0ZWQoInRlc3RfcGx1Z2luIiwgIiIsICJiYXIvYmF6
L2Zvby5wcm90byIsICJGb28iLCAicGx1Z291dCIpOwotfQotCi1URVNUX0YoQ29tbWFuZExpbmVJ
bnRlcmZhY2VUZXN0LCBHZW5lcmF0b3JQYXJhbWV0ZXJzKSB7Ci0gIC8vIFRlc3QgdGhhdCBnZW5l
cmF0b3IgcGFyYW1ldGVycyBhcmUgY29ycmVjdGx5IHBhcnNlZCBmcm9tIHRoZSBjb21tYW5kIGxp
bmUuCi0KLSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJv
dG8yXCI7XG4iCi0gICAgIm1lc3NhZ2UgRm9vIHt9XG4iKTsKLQotICBSdW4oInByb3RvY29sX2Nv
bXBpbGVyIC0tdGVzdF9vdXQ9VGVzdFBhcmFtZXRlcjokdG1wZGlyICIKLSAgICAgICItLXBsdWdf
b3V0PVRlc3RQbHVnaW5QYXJhbWV0ZXI6JHRtcGRpciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0
bXBkaXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJvcnMoKTsKLSAgRXhwZWN0R2VuZXJh
dGVkKCJ0ZXN0X2dlbmVyYXRvciIsICJUZXN0UGFyYW1ldGVyIiwgImZvby5wcm90byIsICJGb28i
KTsKLSAgRXhwZWN0R2VuZXJhdGVkKCJ0ZXN0X3BsdWdpbiIsICJUZXN0UGx1Z2luUGFyYW1ldGVy
IiwgImZvby5wcm90byIsICJGb28iKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNl
VGVzdCwgRXh0cmFHZW5lcmF0b3JQYXJhbWV0ZXJzKSB7Ci0gIC8vIFRlc3QgdGhhdCBnZW5lcmF0
b3IgcGFyYW1ldGVycyBzcGVjaWZpZWQgd2l0aCB0aGUgb3B0aW9uIGZsYWcgYXJlCi0gIC8vIGNv
cnJlY3RseSBwYXNzZWQgdG8gdGhlIGNvZGUgZ2VuZXJhdG9yLgotCi0gIENyZWF0ZVRlbXBGaWxl
KCJmb28ucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdl
IEZvbyB7fVxuIik7Ci0gIC8vIENyZWF0ZSB0aGUgImEiIGFuZCAiYiIgc3ViLWRpcmVjdG9yaWVz
LgotICBDcmVhdGVUZW1wRGlyKCJhIik7Ci0gIENyZWF0ZVRlbXBEaXIoImIiKTsKLQotICBSdW4o
InByb3RvY29sX2NvbXBpbGVyICIKLSAgICAgICItLXRlc3Rfb3B0PWZvbzEgIgotICAgICAgIi0t
dGVzdF9vdXQ9YmFyOiR0bXBkaXIvYSAiCi0gICAgICAiLS10ZXN0X29wdD1mb28yICIKLSAgICAg
ICItLXRlc3Rfb3V0PWJhejokdG1wZGlyL2IgIgotICAgICAgIi0tdGVzdF9vcHQ9Zm9vMyAiCi0g
ICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJv
cnMoKTsKLSAgRXhwZWN0R2VuZXJhdGVkKAotICAgICAgInRlc3RfZ2VuZXJhdG9yIiwgImJhcixm
b28xLGZvbzIsZm9vMyIsICJmb28ucHJvdG8iLCAiRm9vIiwgImEiKTsKLSAgRXhwZWN0R2VuZXJh
dGVkKAotICAgICAgInRlc3RfZ2VuZXJhdG9yIiwgImJheixmb28xLGZvbzIsZm9vMyIsICJmb28u
cHJvdG8iLCAiRm9vIiwgImIiKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVz
dCwgSW5zZXJ0KSB7Ci0gIC8vIFRlc3QgcnVubmluZyBhIGdlbmVyYXRvciB0aGF0IGluc2VydHMg
Y29kZSBpbnRvIGFub3RoZXIncyBvdXRwdXQuCi0KLSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90
byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2UgRm9vIHt9XG4i
KTsKLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyICIKLSAgICAgICItLXRlc3Rfb3V0PVRlc3RQ
YXJhbWV0ZXI6JHRtcGRpciAiCi0gICAgICAiLS1wbHVnX291dD1UZXN0UGx1Z2luUGFyYW1ldGVy
OiR0bXBkaXIgIgotICAgICAgIi0tdGVzdF9vdXQ9aW5zZXJ0PXRlc3RfZ2VuZXJhdG9yLHRlc3Rf
cGx1Z2luOiR0bXBkaXIgIgotICAgICAgIi0tcGx1Z19vdXQ9aW5zZXJ0PXRlc3RfZ2VuZXJhdG9y
LHRlc3RfcGx1Z2luOiR0bXBkaXIgIgotICAgICAgIi0tcHJvdG9fcGF0aD0kdG1wZGlyIGZvby5w
cm90byIpOwotCi0gIEV4cGVjdE5vRXJyb3JzKCk7Ci0gIEV4cGVjdEdlbmVyYXRlZFdpdGhJbnNl
cnRpb25zKAotICAgICAgInRlc3RfZ2VuZXJhdG9yIiwgIlRlc3RQYXJhbWV0ZXIiLCAidGVzdF9n
ZW5lcmF0b3IsdGVzdF9wbHVnaW4iLAotICAgICAgImZvby5wcm90byIsICJGb28iKTsKLSAgRXhw
ZWN0R2VuZXJhdGVkV2l0aEluc2VydGlvbnMoCi0gICAgICAidGVzdF9wbHVnaW4iLCAiVGVzdFBs
dWdpblBhcmFtZXRlciIsICJ0ZXN0X2dlbmVyYXRvcix0ZXN0X3BsdWdpbiIsCi0gICAgICAiZm9v
LnByb3RvIiwgIkZvbyIpOwotfQotCi0jaWYgZGVmaW5lZChfV0lOMzIpCi0KLVRFU1RfRihDb21t
YW5kTGluZUludGVyZmFjZVRlc3QsIFdpbmRvd3NPdXRwdXRQYXRoKSB7Ci0gIC8vIFRlc3QgdGhh
dCB0aGUgb3V0cHV0IHBhdGggY2FuIGJlIGEgV2luZG93cy1zdHlsZSBwYXRoLgotCi0gIENyZWF0
ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIik7Ci0K
LSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLW51bGxfb3V0PUM6XFwgIgotICAgICAgIi0tcHJv
dG9fcGF0aD0kdG1wZGlyIGZvby5wcm90byIpOwotCi0gIEV4cGVjdE5vRXJyb3JzKCk7Ci0gIEV4
cGVjdE51bGxDb2RlR2VuZXJhdG9yQ2FsbGVkKCIiKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5l
SW50ZXJmYWNlVGVzdCwgV2luZG93c091dHB1dFBhdGhBbmRQYXJhbWV0ZXIpIHsKLSAgLy8gVGVz
dCB0aGF0IHdlIGNhbiBoYXZlIGEgd2luZG93cy1zdHlsZSBvdXRwdXQgcGF0aCBhbmQgYSBwYXJh
bWV0ZXIuCi0KLSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwi
cHJvdG8yXCI7XG4iKTsKLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tbnVsbF9vdXQ9YmFy
OkM6XFwgIgotICAgICAgIi0tcHJvdG9fcGF0aD0kdG1wZGlyIGZvby5wcm90byIpOwotCi0gIEV4
cGVjdE5vRXJyb3JzKCk7Ci0gIEV4cGVjdE51bGxDb2RlR2VuZXJhdG9yQ2FsbGVkKCJiYXIiKTsK
LX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgVHJhaWxpbmdCYWNrc2xhc2gp
IHsKLSAgLy8gVGVzdCB0aGF0IHRoZSBkaXJlY3RvcmllcyBjYW4gZW5kIGluIGJhY2tzbGFzaGVz
LiAgU29tZSB1c2VycyBjbGFpbSB0aGlzCi0gIC8vIGRvZXNuJ3Qgd29yayBvbiB0aGVpciBzeXN0
ZW0uCi0KLSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJv
dG8yXCI7XG4iCi0gICAgIm1lc3NhZ2UgRm9vIHt9XG4iKTsKLQotICBSdW4oInByb3RvY29sX2Nv
bXBpbGVyIC0tdGVzdF9vdXQ9JHRtcGRpclxcICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRp
clxcIGZvby5wcm90byIpOwotCi0gIEV4cGVjdE5vRXJyb3JzKCk7Ci0gIEV4cGVjdEdlbmVyYXRl
ZCgidGVzdF9nZW5lcmF0b3IiLCAiIiwgImZvby5wcm90byIsICJGb28iKTsKLX0KLQotI2VuZGlm
ICAvLyBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQotCi1URVNUX0YoQ29t
bWFuZExpbmVJbnRlcmZhY2VUZXN0LCBQYXRoTG9va3VwKSB7Ci0gIC8vIFRlc3QgdGhhdCBzcGVj
aWZ5aW5nIG11bHRpcGxlIGRpcmVjdG9yaWVzIGluIHRoZSBwcm90byBzZWFyY2ggcGF0aCB3b3Jr
cy4KLQotICBDcmVhdGVUZW1wRmlsZSgiYi9iYXIucHJvdG8iLAotICAgICJzeW50YXggPSBcInBy
b3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEJhciB7fVxuIik7Ci0gIENyZWF0ZVRlbXBGaWxlKCJh
L2Zvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgImltcG9ydCBc
ImJhci5wcm90b1wiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7XG4iCi0gICAgIiAgb3B0aW9uYWwg
QmFyIGEgPSAxO1xuIgotICAgICJ9XG4iKTsKLSAgQ3JlYXRlVGVtcEZpbGUoImIvZm9vLnByb3Rv
IiwgInRoaXMgc2hvdWxkIG5vdCBiZSBwYXJzZWRcbiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29t
cGlsZXIgLS10ZXN0X291dD0kdG1wZGlyICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRpci9h
IC0tcHJvdG9fcGF0aD0kdG1wZGlyL2IgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJvcnMo
KTsKLSAgRXhwZWN0R2VuZXJhdGVkKCJ0ZXN0X2dlbmVyYXRvciIsICIiLCAiZm9vLnByb3RvIiwg
IkZvbyIpOwotfQotCi1URVNUX0YoQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0LCBDb2xvbkRlbGlt
aXRlZFBhdGgpIHsKLSAgLy8gU2FtZSBhcyBQYXRoTG9va3VwLCBidXQgd2UgcHJvdmlkZSB0aGUg
cHJvdG9fcGF0aCBpbiBhIHNpbmdsZSBmbGFnLgotCi0gIENyZWF0ZVRlbXBGaWxlKCJiL2Jhci5w
cm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2UgQmFyIHt9
XG4iKTsKLSAgQ3JlYXRlVGVtcEZpbGUoImEvZm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJw
cm90bzJcIjtcbiIKLSAgICAiaW1wb3J0IFwiYmFyLnByb3RvXCI7XG4iCi0gICAgIm1lc3NhZ2Ug
Rm9vIHtcbiIKLSAgICAiICBvcHRpb25hbCBCYXIgYSA9IDE7XG4iCi0gICAgIn1cbiIpOwotICBD
cmVhdGVUZW1wRmlsZSgiYi9mb28ucHJvdG8iLCAidGhpcyBzaG91bGQgbm90IGJlIHBhcnNlZFxu
Iik7Ci0KLSN1bmRlZiBQQVRIX1NFUEFSQVRPUgotI2lmIGRlZmluZWQoX1dJTjMyKQotI2RlZmlu
ZSBQQVRIX1NFUEFSQVRPUiAiOyIKLSNlbHNlCi0jZGVmaW5lIFBBVEhfU0VQQVJBVE9SICI6Igot
I2VuZGlmCi0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLXRlc3Rfb3V0PSR0bXBkaXIgIgot
ICAgICAgIi0tcHJvdG9fcGF0aD0kdG1wZGlyL2EiIFBBVEhfU0VQQVJBVE9SICIkdG1wZGlyL2Ig
Zm9vLnByb3RvIik7Ci0KLSN1bmRlZiBQQVRIX1NFUEFSQVRPUgotCi0gIEV4cGVjdE5vRXJyb3Jz
KCk7Ci0gIEV4cGVjdEdlbmVyYXRlZCgidGVzdF9nZW5lcmF0b3IiLCAiIiwgImZvby5wcm90byIs
ICJGb28iKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgTm9uUm9vdE1h
cHBpbmcpIHsKLSAgLy8gVGVzdCBzZXR0aW5nIHVwIGEgc2VhcmNoIHBhdGggbWFwcGluZyBhIGRp
cmVjdG9yeSB0byBhIG5vbi1yb290IGxvY2F0aW9uLgotCi0gIENyZWF0ZVRlbXBGaWxlKCJmb28u
cHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7
fVxuIik7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLXRlc3Rfb3V0PSR0bXBkaXIgIgot
ICAgICAgIi0tcHJvdG9fcGF0aD1iYXI9JHRtcGRpciBiYXIvZm9vLnByb3RvIik7Ci0KLSAgRXhw
ZWN0Tm9FcnJvcnMoKTsKLSAgRXhwZWN0R2VuZXJhdGVkKCJ0ZXN0X2dlbmVyYXRvciIsICIiLCAi
YmFyL2Zvby5wcm90byIsICJGb28iKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNl
VGVzdCwgTXVsdGlwbGVHZW5lcmF0b3JzKSB7Ci0gIC8vIFRlc3QgdGhhdCB3ZSBjYW4gaGF2ZSBt
dWx0aXBsZSBnZW5lcmF0b3JzIGFuZCB1c2UgYm90aCBpbiBvbmUgaW52b2NhdGlvbiwKLSAgLy8g
ZWFjaCB3aXRoIGEgZGlmZmVyZW50IG91dHB1dCBkaXJlY3RvcnkuCi0KLSAgQ3JlYXRlVGVtcEZp
bGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3Nh
Z2UgRm9vIHt9XG4iKTsKLSAgLy8gQ3JlYXRlIHRoZSAiYSIgYW5kICJiIiBzdWItZGlyZWN0b3Jp
ZXMuCi0gIENyZWF0ZVRlbXBEaXIoImEiKTsKLSAgQ3JlYXRlVGVtcERpcigiYiIpOwotCi0gIFJ1
bigicHJvdG9jb2xfY29tcGlsZXIgIgotICAgICAgIi0tdGVzdF9vdXQ9JHRtcGRpci9hICIKLSAg
ICAgICItLWFsdF9vdXQ9JHRtcGRpci9iICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRpciBm
b28ucHJvdG8iKTsKLQotICBFeHBlY3ROb0Vycm9ycygpOwotICBFeHBlY3RHZW5lcmF0ZWQoInRl
c3RfZ2VuZXJhdG9yIiwgIiIsICJmb28ucHJvdG8iLCAiRm9vIiwgImEiKTsKLSAgRXhwZWN0R2Vu
ZXJhdGVkKCJhbHRfZ2VuZXJhdG9yIiwgIiIsICJmb28ucHJvdG8iLCAiRm9vIiwgImIiKTsKLX0K
LQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgRGlzYWxsb3dTZXJ2aWNlc05vU2Vy
dmljZXMpIHsKLSAgLy8gVGVzdCB0aGF0IC0tZGlzYWxsb3dfc2VydmljZXMgZG9lc24ndCBjYXVz
ZSBhIHByb2JsZW0gd2hlbiB0aGVyZSBhcmUgbm8KLSAgLy8gc2VydmljZXMuCi0KLSAgQ3JlYXRl
VGVtcEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAg
Im1lc3NhZ2UgRm9vIHt9XG4iKTsKLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tZGlzYWxs
b3dfc2VydmljZXMgLS10ZXN0X291dD0kdG1wZGlyICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRt
cGRpciBmb28ucHJvdG8iKTsKLQotICBFeHBlY3ROb0Vycm9ycygpOwotICBFeHBlY3RHZW5lcmF0
ZWQoInRlc3RfZ2VuZXJhdG9yIiwgIiIsICJmb28ucHJvdG8iLCAiRm9vIik7Ci19Ci0KLVRFU1Rf
RihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIERpc2FsbG93U2VydmljZXNIYXNTZXJ2aWNlKSB7
Ci0gIC8vIFRlc3QgdGhhdCAtLWRpc2FsbG93X3NlcnZpY2VzIHByb2R1Y2VzIGFuIGVycm9yIHdo
ZW4gdGhlcmUgYXJlIHNlcnZpY2VzLgotCi0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAot
ICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxuIgotICAg
ICJzZXJ2aWNlIEJhciB7fVxuIik7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLWRpc2Fs
bG93X3NlcnZpY2VzIC0tdGVzdF9vdXQ9JHRtcGRpciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0
bXBkaXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0RXJyb3JTdWJzdHJpbmcoImZvby5wcm90bzog
VGhpcyBmaWxlIGNvbnRhaW5zIHNlcnZpY2VzIik7Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUlu
dGVyZmFjZVRlc3QsIEFsbG93U2VydmljZXNIYXNTZXJ2aWNlKSB7Ci0gIC8vIFRlc3QgdGhhdCBz
ZXJ2aWNlcyB3b3JrIGZpbmUgYXMgbG9uZyBhcyAtLWRpc2FsbG93X3NlcnZpY2VzIGlzIG5vdCB1
c2VkLgotCi0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJzeW50YXggPSBcInBy
b3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxuIgotICAgICJzZXJ2aWNlIEJhciB7fVxu
Iik7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLXRlc3Rfb3V0PSR0bXBkaXIgIgotICAg
ICAgIi0tcHJvdG9fcGF0aD0kdG1wZGlyIGZvby5wcm90byIpOwotCi0gIEV4cGVjdE5vRXJyb3Jz
KCk7Ci0gIEV4cGVjdEdlbmVyYXRlZCgidGVzdF9nZW5lcmF0b3IiLCAiIiwgImZvby5wcm90byIs
ICJGb28iKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgQ3dkUmVsYXRp
dmVJbnB1dHMpIHsKLSAgLy8gVGVzdCB0aGF0IHdlIGNhbiBhY2NlcHQgd29ya2luZy1kaXJlY3Rv
cnktcmVsYXRpdmUgaW5wdXQgZmlsZXMuCi0KLSAgU2V0SW5wdXRzQXJlUHJvdG9QYXRoUmVsYXRp
dmUoZmFsc2UpOwotCi0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJzeW50YXgg
PSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxuIik7Ci0KLSAgUnVuKCJwcm90
b2NvbF9jb21waWxlciAtLXRlc3Rfb3V0PSR0bXBkaXIgIgotICAgICAgIi0tcHJvdG9fcGF0aD0k
dG1wZGlyICR0bXBkaXIvZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJvcnMoKTsKLSAgRXhw
ZWN0R2VuZXJhdGVkKCJ0ZXN0X2dlbmVyYXRvciIsICIiLCAiZm9vLnByb3RvIiwgIkZvbyIpOwot
fQotCi1URVNUX0YoQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0LCBXcml0ZURlc2NyaXB0b3JTZXQp
IHsKLSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8y
XCI7XG4iCi0gICAgIm1lc3NhZ2UgRm9vIHt9XG4iKTsKLSAgQ3JlYXRlVGVtcEZpbGUoImJhci5w
cm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgImltcG9ydCBcImZvby5w
cm90b1wiO1xuIgotICAgICJtZXNzYWdlIEJhciB7XG4iCi0gICAgIiAgb3B0aW9uYWwgRm9vIGZv
byA9IDE7XG4iCi0gICAgIn1cbiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLS1kZXNj
cmlwdG9yX3NldF9vdXQ9JHRtcGRpci9kZXNjcmlwdG9yX3NldCAiCi0gICAgICAiLS1wcm90b19w
YXRoPSR0bXBkaXIgYmFyLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJvcnMoKTsKLQotICBGaWxl
RGVzY3JpcHRvclNldCBkZXNjcmlwdG9yX3NldDsKLSAgUmVhZERlc2NyaXB0b3JTZXQoImRlc2Ny
aXB0b3Jfc2V0IiwgJmRlc2NyaXB0b3Jfc2V0KTsKLSAgaWYgKEhhc0ZhdGFsRmFpbHVyZSgpKSBy
ZXR1cm47Ci0gIEVYUEVDVF9FUSgxLCBkZXNjcmlwdG9yX3NldC5maWxlX3NpemUoKSk7Ci0gIEVY
UEVDVF9FUSgiYmFyLnByb3RvIiwgZGVzY3JpcHRvcl9zZXQuZmlsZSgwKS5uYW1lKCkpOwotICAv
LyBEZXNjcmlwdG9yIHNldCBzaG91bGQgbm90IGhhdmUgc291cmNlIGNvZGUgaW5mby4KLSAgRVhQ
RUNUX0ZBTFNFKGRlc2NyaXB0b3Jfc2V0LmZpbGUoMCkuaGFzX3NvdXJjZV9jb2RlX2luZm8oKSk7
Ci0gIC8vIERlc2NyaXB0b3Igc2V0IHNob3VsZCBoYXZlIGpzb25fbmFtZS4KLSAgRVhQRUNUX0VR
KCJCYXIiLCBkZXNjcmlwdG9yX3NldC5maWxlKDApLm1lc3NhZ2VfdHlwZSgwKS5uYW1lKCkpOwot
ICBFWFBFQ1RfRVEoImZvbyIsIGRlc2NyaXB0b3Jfc2V0LmZpbGUoMCkubWVzc2FnZV90eXBlKDAp
LmZpZWxkKDApLm5hbWUoKSk7Ci0gIEVYUEVDVF9UUlVFKGRlc2NyaXB0b3Jfc2V0LmZpbGUoMCku
bWVzc2FnZV90eXBlKDApLmZpZWxkKDApLmhhc19qc29uX25hbWUoKSk7Ci19Ci0KLVRFU1RfRihD
b21tYW5kTGluZUludGVyZmFjZVRlc3QsIFdyaXRlRGVzY3JpcHRvclNldFdpdGhEdXBsaWNhdGVz
KSB7Ci0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3Rv
MlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxuIik7Ci0gIENyZWF0ZVRlbXBGaWxlKCJiYXIu
cHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJpbXBvcnQgXCJmb28u
cHJvdG9cIjtcbiIKLSAgICAibWVzc2FnZSBCYXIge1xuIgotICAgICIgIG9wdGlvbmFsIEZvbyBm
b28gPSAxO1xuIgotICAgICJ9XG4iKTsKLSAgQ3JlYXRlVGVtcEZpbGUoImJhei5wcm90byIsCi0g
ICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgImltcG9ydCBcImZvby5wcm90b1wiO1xu
IgotICAgICJtZXNzYWdlIEJheiB7XG4iCi0gICAgIiAgb3B0aW9uYWwgRm9vIGZvbyA9IDE7XG4i
Ci0gICAgIn1cbiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLS1kZXNjcmlwdG9yX3Nl
dF9vdXQ9JHRtcGRpci9kZXNjcmlwdG9yX3NldCAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0bXBk
aXIgYmFyLnByb3RvIGZvby5wcm90byBiYXIucHJvdG8gYmF6LnByb3RvIik7Ci0KLSAgRXhwZWN0
Tm9FcnJvcnMoKTsKLQotICBGaWxlRGVzY3JpcHRvclNldCBkZXNjcmlwdG9yX3NldDsKLSAgUmVh
ZERlc2NyaXB0b3JTZXQoImRlc2NyaXB0b3Jfc2V0IiwgJmRlc2NyaXB0b3Jfc2V0KTsKLSAgaWYg
KEhhc0ZhdGFsRmFpbHVyZSgpKSByZXR1cm47Ci0gIEVYUEVDVF9FUSgzLCBkZXNjcmlwdG9yX3Nl
dC5maWxlX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgiYmFyLnByb3RvIiwgZGVzY3JpcHRvcl9zZXQu
ZmlsZSgwKS5uYW1lKCkpOwotICBFWFBFQ1RfRVEoImZvby5wcm90byIsIGRlc2NyaXB0b3Jfc2V0
LmZpbGUoMSkubmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJiYXoucHJvdG8iLCBkZXNjcmlwdG9yX3Nl
dC5maWxlKDIpLm5hbWUoKSk7Ci0gIC8vIERlc2NyaXB0b3Igc2V0IHNob3VsZCBub3QgaGF2ZSBz
b3VyY2UgY29kZSBpbmZvLgotICBFWFBFQ1RfRkFMU0UoZGVzY3JpcHRvcl9zZXQuZmlsZSgwKS5o
YXNfc291cmNlX2NvZGVfaW5mbygpKTsKLSAgLy8gRGVzY3JpcHRvciBzZXQgc2hvdWxkIGhhdmUg
anNvbl9uYW1lLgotICBFWFBFQ1RfRVEoIkJhciIsIGRlc2NyaXB0b3Jfc2V0LmZpbGUoMCkubWVz
c2FnZV90eXBlKDApLm5hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiZm9vIiwgZGVzY3JpcHRvcl9zZXQu
ZmlsZSgwKS5tZXNzYWdlX3R5cGUoMCkuZmllbGQoMCkubmFtZSgpKTsKLSAgRVhQRUNUX1RSVUUo
ZGVzY3JpcHRvcl9zZXQuZmlsZSgwKS5tZXNzYWdlX3R5cGUoMCkuZmllbGQoMCkuaGFzX2pzb25f
bmFtZSgpKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgV3JpdGVEZXNj
cmlwdG9yU2V0V2l0aFNvdXJjZUluZm8pIHsKLSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90byIs
Ci0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2UgRm9vIHt9XG4iKTsK
LSAgQ3JlYXRlVGVtcEZpbGUoImJhci5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7
XG4iCi0gICAgImltcG9ydCBcImZvby5wcm90b1wiO1xuIgotICAgICJtZXNzYWdlIEJhciB7XG4i
Ci0gICAgIiAgb3B0aW9uYWwgRm9vIGZvbyA9IDE7XG4iCi0gICAgIn1cbiIpOwotCi0gIFJ1bigi
cHJvdG9jb2xfY29tcGlsZXIgLS1kZXNjcmlwdG9yX3NldF9vdXQ9JHRtcGRpci9kZXNjcmlwdG9y
X3NldCAiCi0gICAgICAiLS1pbmNsdWRlX3NvdXJjZV9pbmZvIC0tcHJvdG9fcGF0aD0kdG1wZGly
IGJhci5wcm90byIpOwotCi0gIEV4cGVjdE5vRXJyb3JzKCk7Ci0KLSAgRmlsZURlc2NyaXB0b3JT
ZXQgZGVzY3JpcHRvcl9zZXQ7Ci0gIFJlYWREZXNjcmlwdG9yU2V0KCJkZXNjcmlwdG9yX3NldCIs
ICZkZXNjcmlwdG9yX3NldCk7Ci0gIGlmIChIYXNGYXRhbEZhaWx1cmUoKSkgcmV0dXJuOwotICBF
WFBFQ1RfRVEoMSwgZGVzY3JpcHRvcl9zZXQuZmlsZV9zaXplKCkpOwotICBFWFBFQ1RfRVEoImJh
ci5wcm90byIsIGRlc2NyaXB0b3Jfc2V0LmZpbGUoMCkubmFtZSgpKTsKLSAgLy8gU291cmNlIGNv
ZGUgaW5mbyBpbmNsdWRlZC4KLSAgRVhQRUNUX1RSVUUoZGVzY3JpcHRvcl9zZXQuZmlsZSgwKS5o
YXNfc291cmNlX2NvZGVfaW5mbygpKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNl
VGVzdCwgV3JpdGVUcmFuc2l0aXZlRGVzY3JpcHRvclNldCkgewotICBDcmVhdGVUZW1wRmlsZSgi
Zm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAibWVzc2FnZSBG
b28ge31cbiIpOwotICBDcmVhdGVUZW1wRmlsZSgiYmFyLnByb3RvIiwKLSAgICAic3ludGF4ID0g
XCJwcm90bzJcIjtcbiIKLSAgICAiaW1wb3J0IFwiZm9vLnByb3RvXCI7XG4iCi0gICAgIm1lc3Nh
Z2UgQmFyIHtcbiIKLSAgICAiICBvcHRpb25hbCBGb28gZm9vID0gMTtcbiIKLSAgICAifVxuIik7
Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLWRlc2NyaXB0b3Jfc2V0X291dD0kdG1wZGly
L2Rlc2NyaXB0b3Jfc2V0ICIKLSAgICAgICItLWluY2x1ZGVfaW1wb3J0cyAtLXByb3RvX3BhdGg9
JHRtcGRpciBiYXIucHJvdG8iKTsKLQotICBFeHBlY3ROb0Vycm9ycygpOwotCi0gIEZpbGVEZXNj
cmlwdG9yU2V0IGRlc2NyaXB0b3Jfc2V0OwotICBSZWFkRGVzY3JpcHRvclNldCgiZGVzY3JpcHRv
cl9zZXQiLCAmZGVzY3JpcHRvcl9zZXQpOwotICBpZiAoSGFzRmF0YWxGYWlsdXJlKCkpIHJldHVy
bjsKLSAgRVhQRUNUX0VRKDIsIGRlc2NyaXB0b3Jfc2V0LmZpbGVfc2l6ZSgpKTsKLSAgaWYgKGRl
c2NyaXB0b3Jfc2V0LmZpbGUoMCkubmFtZSgpID09ICJiYXIucHJvdG8iKSB7Ci0gICAgc3RkOjpz
d2FwKGRlc2NyaXB0b3Jfc2V0Lm11dGFibGVfZmlsZSgpLT5tdXRhYmxlX2RhdGEoKVswXSwKLSAg
ICAgICAgICAgICAgZGVzY3JpcHRvcl9zZXQubXV0YWJsZV9maWxlKCktPm11dGFibGVfZGF0YSgp
WzFdKTsKLSAgfQotICBFWFBFQ1RfRVEoImZvby5wcm90byIsIGRlc2NyaXB0b3Jfc2V0LmZpbGUo
MCkubmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJiYXIucHJvdG8iLCBkZXNjcmlwdG9yX3NldC5maWxl
KDEpLm5hbWUoKSk7Ci0gIC8vIERlc2NyaXB0b3Igc2V0IHNob3VsZCBub3QgaGF2ZSBzb3VyY2Ug
Y29kZSBpbmZvLgotICBFWFBFQ1RfRkFMU0UoZGVzY3JpcHRvcl9zZXQuZmlsZSgwKS5oYXNfc291
cmNlX2NvZGVfaW5mbygpKTsKLSAgRVhQRUNUX0ZBTFNFKGRlc2NyaXB0b3Jfc2V0LmZpbGUoMSku
aGFzX3NvdXJjZV9jb2RlX2luZm8oKSk7Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFj
ZVRlc3QsIFdyaXRlVHJhbnNpdGl2ZURlc2NyaXB0b3JTZXRXaXRoU291cmNlSW5mbykgewotICBD
cmVhdGVUZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIK
LSAgICAibWVzc2FnZSBGb28ge31cbiIpOwotICBDcmVhdGVUZW1wRmlsZSgiYmFyLnByb3RvIiwK
LSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAiaW1wb3J0IFwiZm9vLnByb3RvXCI7
XG4iCi0gICAgIm1lc3NhZ2UgQmFyIHtcbiIKLSAgICAiICBvcHRpb25hbCBGb28gZm9vID0gMTtc
biIKLSAgICAifVxuIik7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLWRlc2NyaXB0b3Jf
c2V0X291dD0kdG1wZGlyL2Rlc2NyaXB0b3Jfc2V0ICIKLSAgICAgICItLWluY2x1ZGVfaW1wb3J0
cyAtLWluY2x1ZGVfc291cmNlX2luZm8gLS1wcm90b19wYXRoPSR0bXBkaXIgYmFyLnByb3RvIik7
Ci0KLSAgRXhwZWN0Tm9FcnJvcnMoKTsKLQotICBGaWxlRGVzY3JpcHRvclNldCBkZXNjcmlwdG9y
X3NldDsKLSAgUmVhZERlc2NyaXB0b3JTZXQoImRlc2NyaXB0b3Jfc2V0IiwgJmRlc2NyaXB0b3Jf
c2V0KTsKLSAgaWYgKEhhc0ZhdGFsRmFpbHVyZSgpKSByZXR1cm47Ci0gIEVYUEVDVF9FUSgyLCBk
ZXNjcmlwdG9yX3NldC5maWxlX3NpemUoKSk7Ci0gIGlmIChkZXNjcmlwdG9yX3NldC5maWxlKDAp
Lm5hbWUoKSA9PSAiYmFyLnByb3RvIikgewotICAgIHN0ZDo6c3dhcChkZXNjcmlwdG9yX3NldC5t
dXRhYmxlX2ZpbGUoKS0+bXV0YWJsZV9kYXRhKClbMF0sCi0gICAgICAgICAgICAgIGRlc2NyaXB0
b3Jfc2V0Lm11dGFibGVfZmlsZSgpLT5tdXRhYmxlX2RhdGEoKVsxXSk7Ci0gIH0KLSAgRVhQRUNU
X0VRKCJmb28ucHJvdG8iLCBkZXNjcmlwdG9yX3NldC5maWxlKDApLm5hbWUoKSk7Ci0gIEVYUEVD
VF9FUSgiYmFyLnByb3RvIiwgZGVzY3JpcHRvcl9zZXQuZmlsZSgxKS5uYW1lKCkpOwotICAvLyBT
b3VyY2UgY29kZSBpbmZvIGluY2x1ZGVkLgotICBFWFBFQ1RfVFJVRShkZXNjcmlwdG9yX3NldC5m
aWxlKDApLmhhc19zb3VyY2VfY29kZV9pbmZvKCkpOwotICBFWFBFQ1RfVFJVRShkZXNjcmlwdG9y
X3NldC5maWxlKDEpLmhhc19zb3VyY2VfY29kZV9pbmZvKCkpOwotfQotCi0jaWZkZWYgX1dJTjMy
Ci0vLyBUT0RPKHRlYm9yaW5nKTogRmlndXJlIG91dCBob3cgdG8gd3JpdGUgdGVzdCBvbiB3aW5k
b3dzLgotI2Vsc2UKLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIFdyaXRlRGVwZW5k
ZW5jeU1hbmlmZXN0RmlsZUdpdmVuVHdvSW5wdXRzKSB7Ci0gIENyZWF0ZVRlbXBGaWxlKCJmb28u
cHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7
fVxuIik7Ci0gIENyZWF0ZVRlbXBGaWxlKCJiYXIucHJvdG8iLAotICAgICJzeW50YXggPSBcInBy
b3RvMlwiO1xuIgotICAgICJpbXBvcnQgXCJmb28ucHJvdG9cIjtcbiIKLSAgICAibWVzc2FnZSBC
YXIge1xuIgotICAgICIgIG9wdGlvbmFsIEZvbyBmb28gPSAxO1xuIgotICAgICJ9XG4iKTsKLQot
ICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tZGVwZW5kZW5jeV9vdXQ9JHRtcGRpci9tYW5pZmVz
dCAiCi0gICAgICAiLS10ZXN0X291dD0kdG1wZGlyIC0tcHJvdG9fcGF0aD0kdG1wZGlyIGJhci5w
cm90byBmb28ucHJvdG8iKTsKLQotICBFeHBlY3RFcnJvclRleHQoCi0gICAgICAiQ2FuIG9ubHkg
cHJvY2VzcyBvbmUgaW5wdXQgZmlsZSB3aGVuIHVzaW5nIC0tZGVwZW5kZW5jeV9vdXQ9RklMRS5c
biIpOwotfQotCi0jaWZkZWYgUFJPVE9CVUZfT1BFTlNPVVJDRQotVEVTVF9GKENvbW1hbmRMaW5l
SW50ZXJmYWNlVGVzdCwgV3JpdGVEZXBlbmRlbmN5TWFuaWZlc3RGaWxlKSB7Ci0gIENyZWF0ZVRl
bXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJt
ZXNzYWdlIEZvbyB7fVxuIik7Ci0gIENyZWF0ZVRlbXBGaWxlKCJiYXIucHJvdG8iLAotICAgICJz
eW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJpbXBvcnQgXCJmb28ucHJvdG9cIjtcbiIKLSAg
ICAibWVzc2FnZSBCYXIge1xuIgotICAgICIgIG9wdGlvbmFsIEZvbyBmb28gPSAxO1xuIgotICAg
ICJ9XG4iKTsKLQotICBzdHJpbmcgY3VycmVudF93b3JraW5nX2RpcmVjdG9yeSA9IGdldGN3ZChO
VUxMLCAwKTsKLSAgU3dpdGNoVG9UZW1wRGlyZWN0b3J5KCk7Ci0KLSAgUnVuKCJwcm90b2NvbF9j
b21waWxlciAtLWRlcGVuZGVuY3lfb3V0PW1hbmlmZXN0IC0tdGVzdF9vdXQ9LiAiCi0gICAgICAi
YmFyLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJvcnMoKTsKLQotICBFeHBlY3RGaWxlQ29udGVu
dCgibWFuaWZlc3QiLAotICAgICAgICAgICAgICAgICAgICAiYmFyLnByb3RvLk1vY2tDb2RlR2Vu
ZXJhdG9yLnRlc3RfZ2VuZXJhdG9yOiAiCi0gICAgICAgICAgICAgICAgICAgICJmb28ucHJvdG9c
XFxuIGJhci5wcm90byIpOwotCi0gIEZpbGU6OkNoYW5nZVdvcmtpbmdEaXJlY3RvcnkoY3VycmVu
dF93b3JraW5nX2RpcmVjdG9yeSk7Ci19Ci0jZWxzZSAgLy8gIVBST1RPQlVGX09QRU5TT1VSQ0UK
LS8vIFRPRE8odGVib3JpbmcpOiBGaWd1cmUgb3V0IGhvdyB0byBjaGFuZ2UgYW5kIGdldCB3b3Jr
aW5nIGRpcmVjdG9yeSBpbgotLy8gZ29vZ2xlMy4KLSNlbmRpZiAgLy8gIVBST1RPQlVGX09QRU5T
T1VSQ0UKLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgV3JpdGVEZXBlbmRlbmN5
TWFuaWZlc3RGaWxlRm9yQWJzb2x1dGVQYXRoKSB7Ci0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJv
dG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxu
Iik7Ci0gIENyZWF0ZVRlbXBGaWxlKCJiYXIucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3Rv
MlwiO1xuIgotICAgICJpbXBvcnQgXCJmb28ucHJvdG9cIjtcbiIKLSAgICAibWVzc2FnZSBCYXIg
e1xuIgotICAgICIgIG9wdGlvbmFsIEZvbyBmb28gPSAxO1xuIgotICAgICJ9XG4iKTsKLQotICBS
dW4oInByb3RvY29sX2NvbXBpbGVyIC0tZGVwZW5kZW5jeV9vdXQ9JHRtcGRpci9tYW5pZmVzdCAi
Ci0gICAgICAiLS10ZXN0X291dD0kdG1wZGlyIC0tcHJvdG9fcGF0aD0kdG1wZGlyIGJhci5wcm90
byIpOwotCi0gIEV4cGVjdE5vRXJyb3JzKCk7Ci0KLSAgRXhwZWN0RmlsZUNvbnRlbnQoIm1hbmlm
ZXN0IiwKLSAgICAgICAgICAgICAgICAgICAgIiR0bXBkaXIvYmFyLnByb3RvLk1vY2tDb2RlR2Vu
ZXJhdG9yLnRlc3RfZ2VuZXJhdG9yOiAiCi0gICAgICAgICAgICAgICAgICAgICIkdG1wZGlyL2Zv
by5wcm90b1xcXG4gJHRtcGRpci9iYXIucHJvdG8iKTsKLX0KLSNlbmRpZiAgLy8gIV9XSU4zMgot
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgUGFy
c2VFcnJvcnMpIHsKLSAgLy8gVGVzdCB0aGF0IHBhcnNlIGVycm9ycyBhcmUgcmVwb3J0ZWQuCi0K
LSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7
XG4iCi0gICAgImJhZHN5bnRheFxuIik7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLXRl
c3Rfb3V0PSR0bXBkaXIgIgotICAgICAgIi0tcHJvdG9fcGF0aD0kdG1wZGlyIGZvby5wcm90byIp
OwotCi0gIEV4cGVjdEVycm9yVGV4dCgKLSAgICAiZm9vLnByb3RvOjI6MTogRXhwZWN0ZWQgdG9w
LWxldmVsIHN0YXRlbWVudCAoZS5nLiBcIm1lc3NhZ2VcIikuXG4iKTsKLX0KLQotVEVTVF9GKENv
bW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgUGFyc2VFcnJvcnNNdWx0aXBsZUZpbGVzKSB7Ci0gIC8v
IFRlc3QgdGhhdCBwYXJzZSBlcnJvcnMgYXJlIHJlcG9ydGVkIGZyb20gbXVsdGlwbGUgZmlsZXMu
Ci0KLSAgLy8gV2Ugc2V0IHVwIGZpbGVzIHN1Y2ggdGhhdCBmb28ucHJvdG8gYWN0dWFsbHkgZGVw
ZW5kcyBvbiBiYXIucHJvdG8gaW4KLSAgLy8gdHdvIHdheXM6ICBEaXJlY3RseSBhbmQgdGhyb3Vn
aCBiYXoucHJvdG8uICBiYXIucHJvdG8ncyBlcnJvcnMgc2hvdWxkCi0gIC8vIG9ubHkgYmUgcmVw
b3J0ZWQgb25jZS4KLSAgQ3JlYXRlVGVtcEZpbGUoImJhci5wcm90byIsCi0gICAgInN5bnRheCA9
IFwicHJvdG8yXCI7XG4iCi0gICAgImJhZHN5bnRheFxuIik7Ci0gIENyZWF0ZVRlbXBGaWxlKCJi
YXoucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJpbXBvcnQgXCJi
YXIucHJvdG9cIjtcbiIpOwotICBDcmVhdGVUZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAgICAic3lu
dGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAiaW1wb3J0IFwiYmFyLnByb3RvXCI7XG4iCi0gICAg
ImltcG9ydCBcImJhei5wcm90b1wiO1xuIik7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAt
LXRlc3Rfb3V0PSR0bXBkaXIgIgotICAgICAgIi0tcHJvdG9fcGF0aD0kdG1wZGlyIGZvby5wcm90
byIpOwotCi0gIEV4cGVjdEVycm9yVGV4dCgKLSAgICAiYmFyLnByb3RvOjI6MTogRXhwZWN0ZWQg
dG9wLWxldmVsIHN0YXRlbWVudCAoZS5nLiBcIm1lc3NhZ2VcIikuXG4iCi0gICAgImJhei5wcm90
bzogSW1wb3J0IFwiYmFyLnByb3RvXCIgd2FzIG5vdCBmb3VuZCBvciBoYWQgZXJyb3JzLlxuIgot
ICAgICJmb28ucHJvdG86IEltcG9ydCBcImJhci5wcm90b1wiIHdhcyBub3QgZm91bmQgb3IgaGFk
IGVycm9ycy5cbiIKLSAgICAiZm9vLnByb3RvOiBJbXBvcnQgXCJiYXoucHJvdG9cIiB3YXMgbm90
IGZvdW5kIG9yIGhhZCBlcnJvcnMuXG4iKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJm
YWNlVGVzdCwgSW5wdXROb3RGb3VuZEVycm9yKSB7Ci0gIC8vIFRlc3Qgd2hhdCBoYXBwZW5zIGlm
IHRoZSBpbnB1dCBmaWxlIGlzIG5vdCBmb3VuZC4KLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVy
IC0tdGVzdF9vdXQ9JHRtcGRpciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnBy
b3RvIik7Ci0KLSAgRXhwZWN0RXJyb3JUZXh0KAotICAgICJmb28ucHJvdG86IEZpbGUgbm90IGZv
dW5kLlxuIik7Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIEN3ZFJlbGF0
aXZlSW5wdXROb3RGb3VuZEVycm9yKSB7Ci0gIC8vIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gYSB3
b3JraW5nLWRpcmVjdG9yeS1yZWxhdGl2ZSBpbnB1dCBmaWxlIGlzIG5vdAotICAvLyBmb3VuZC4K
LQotICBTZXRJbnB1dHNBcmVQcm90b1BhdGhSZWxhdGl2ZShmYWxzZSk7Ci0KLSAgUnVuKCJwcm90
b2NvbF9jb21waWxlciAtLXRlc3Rfb3V0PSR0bXBkaXIgIgotICAgICAgIi0tcHJvdG9fcGF0aD0k
dG1wZGlyICR0bXBkaXIvZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0RXJyb3JUZXh0KAotICAgICIk
dG1wZGlyL2Zvby5wcm90bzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuIik7Ci19Ci0KLVRF
U1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIEN3ZFJlbGF0aXZlSW5wdXROb3RNYXBwZWRF
cnJvcikgewotICAvLyBUZXN0IHdoYXQgaGFwcGVucyB3aGVuIGEgd29ya2luZy1kaXJlY3Rvcnkt
cmVsYXRpdmUgaW5wdXQgZmlsZSBpcyBub3QKLSAgLy8gbWFwcGVkIHRvIGEgdmlydHVhbCBwYXRo
LgotCi0gIFNldElucHV0c0FyZVByb3RvUGF0aFJlbGF0aXZlKGZhbHNlKTsKLQotICBDcmVhdGVU
ZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAi
bWVzc2FnZSBGb28ge31cbiIpOwotCi0gIC8vIENyZWF0ZSBhIGRpcmVjdG9yeSBjYWxsZWQgImJh
ciIgc28gdGhhdCB3ZSBjYW4gcG9pbnQgLS1wcm90b19wYXRoIGF0IGl0LgotICBDcmVhdGVUZW1w
RmlsZSgiYmFyL2R1bW15IiwgIiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLS10ZXN0
X291dD0kdG1wZGlyICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRpci9iYXIgJHRtcGRpci9m
b28ucHJvdG8iKTsKLQotICBFeHBlY3RFcnJvclRleHQoCi0gICAgIiR0bXBkaXIvZm9vLnByb3Rv
OiBGaWxlIGRvZXMgbm90IHJlc2lkZSB3aXRoaW4gYW55IHBhdGggIgotICAgICAgInNwZWNpZmll
ZCB1c2luZyAtLXByb3RvX3BhdGggKG9yIC1JKS4gIFlvdSBtdXN0IHNwZWNpZnkgYSAiCi0gICAg
ICAiLS1wcm90b19wYXRoIHdoaWNoIGVuY29tcGFzc2VzIHRoaXMgZmlsZS4gIE5vdGUgdGhhdCB0
aGUgIgotICAgICAgInByb3RvX3BhdGggbXVzdCBiZSBhbiBleGFjdCBwcmVmaXggb2YgdGhlIC5w
cm90byBmaWxlICIKLSAgICAgICJuYW1lcyAtLSBwcm90b2MgaXMgdG9vIGR1bWIgdG8gZmlndXJl
IG91dCB3aGVuIHR3byBwYXRocyAiCi0gICAgICAiKGUuZy4gYWJzb2x1dGUgYW5kIHJlbGF0aXZl
KSBhcmUgZXF1aXZhbGVudCAoaXQncyBoYXJkZXIgIgotICAgICAgInRoYW4geW91IHRoaW5rKS5c
biIpOwotfQotCi1URVNUX0YoQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0LCBDd2RSZWxhdGl2ZUlu
cHV0Tm90Rm91bmRBbmROb3RNYXBwZWRFcnJvcikgewotICAvLyBDaGVjayB3aGF0IGhhcHBlbnMg
aWYgdGhlIGlucHV0IGZpbGUgaXMgbm90IGZvdW5kICphbmQqIGlzIG5vdCBtYXBwZWQKLSAgLy8g
aW4gdGhlIHByb3RvX3BhdGguCi0KLSAgU2V0SW5wdXRzQXJlUHJvdG9QYXRoUmVsYXRpdmUoZmFs
c2UpOwotCi0gIC8vIENyZWF0ZSBhIGRpcmVjdG9yeSBjYWxsZWQgImJhciIgc28gdGhhdCB3ZSBj
YW4gcG9pbnQgLS1wcm90b19wYXRoIGF0IGl0LgotICBDcmVhdGVUZW1wRmlsZSgiYmFyL2R1bW15
IiwgIiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLS10ZXN0X291dD0kdG1wZGlyICIK
LSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRpci9iYXIgJHRtcGRpci9mb28ucHJvdG8iKTsKLQot
ICBFeHBlY3RFcnJvclRleHQoCi0gICAgIiR0bXBkaXIvZm9vLnByb3RvOiBObyBzdWNoIGZpbGUg
b3IgZGlyZWN0b3J5XG4iKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwg
Q3dkUmVsYXRpdmVJbnB1dFNoYWRvd2VkRXJyb3IpIHsKLSAgLy8gVGVzdCB3aGF0IGhhcHBlbnMg
d2hlbiBhIHdvcmtpbmctZGlyZWN0b3J5LXJlbGF0aXZlIGlucHV0IGZpbGUgaXMgc2hhZG93ZWQK
LSAgLy8gYnkgYW5vdGhlciBmaWxlIGluIHRoZSB2aXJ0dWFsIHBhdGguCi0KLSAgU2V0SW5wdXRz
QXJlUHJvdG9QYXRoUmVsYXRpdmUoZmFsc2UpOwotCi0gIENyZWF0ZVRlbXBGaWxlKCJmb28vZm9v
LnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAibWVzc2FnZSBGb28g
e31cbiIpOwotICBDcmVhdGVUZW1wRmlsZSgiYmFyL2Zvby5wcm90byIsCi0gICAgInN5bnRheCA9
IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2UgQmFyIHt9XG4iKTsKLQotICBSdW4oInByb3Rv
Y29sX2NvbXBpbGVyIC0tdGVzdF9vdXQ9JHRtcGRpciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0
bXBkaXIvZm9vIC0tcHJvdG9fcGF0aD0kdG1wZGlyL2JhciAiCi0gICAgICAiJHRtcGRpci9iYXIv
Zm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0RXJyb3JUZXh0KAotICAgICIkdG1wZGlyL2Jhci9mb28u
cHJvdG86IElucHV0IGlzIHNoYWRvd2VkIGluIHRoZSAtLXByb3RvX3BhdGggIgotICAgICJieSBc
IiR0bXBkaXIvZm9vL2Zvby5wcm90b1wiLiAgRWl0aGVyIHVzZSB0aGUgbGF0dGVyICIKLSAgICAi
ZmlsZSBhcyB5b3VyIGlucHV0IG9yIHJlb3JkZXIgdGhlIC0tcHJvdG9fcGF0aCBzbyB0aGF0IHRo
ZSAiCi0gICAgImZvcm1lciBmaWxlJ3MgbG9jYXRpb24gY29tZXMgZmlyc3QuXG4iKTsKLX0KLQot
VEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgUHJvdG9QYXRoTm90Rm91bmRFcnJvcikg
ewotICAvLyBUZXN0IHdoYXQgaGFwcGVucyBpZiB0aGUgaW5wdXQgZmlsZSBpcyBub3QgZm91bmQu
Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxlciAtLXRlc3Rfb3V0PSR0bXBkaXIgIgotICAgICAg
Ii0tcHJvdG9fcGF0aD0kdG1wZGlyL2ZvbyBmb28ucHJvdG8iKTsKLQotICBFeHBlY3RFcnJvclRl
eHQoCi0gICAgIiR0bXBkaXIvZm9vOiB3YXJuaW5nOiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3Qu
XG4iCi0gICAgImZvby5wcm90bzogRmlsZSBub3QgZm91bmQuXG4iKTsKLX0KLQotVEVTVF9GKENv
bW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgTWlzc2luZ0lucHV0RXJyb3IpIHsKLSAgLy8gVGVzdCB0
aGF0IHdlIGdldCBhbiBlcnJvciBpZiBubyBpbnB1dHMgYXJlIGdpdmVuLgotCi0gIFJ1bigicHJv
dG9jb2xfY29tcGlsZXIgLS10ZXN0X291dD0kdG1wZGlyICIKLSAgICAgICItLXByb3RvX3BhdGg9
JHRtcGRpciIpOwotCi0gIEV4cGVjdEVycm9yVGV4dCgiTWlzc2luZyBpbnB1dCBmaWxlLlxuIik7
Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIE1pc3NpbmdPdXRwdXRFcnJv
cikgewotICBDcmVhdGVUZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90
bzJcIjtcbiIKLSAgICAibWVzc2FnZSBGb28ge31cbiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29t
cGlsZXIgLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0RXJyb3JU
ZXh0KCJNaXNzaW5nIG91dHB1dCBkaXJlY3RpdmVzLlxuIik7Ci19Ci0KLVRFU1RfRihDb21tYW5k
TGluZUludGVyZmFjZVRlc3QsIE91dHB1dFdyaXRlRXJyb3IpIHsKLSAgQ3JlYXRlVGVtcEZpbGUo
ImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2Ug
Rm9vIHt9XG4iKTsKLQotICBzdHJpbmcgb3V0cHV0X2ZpbGUgPQotICAgICAgTW9ja0NvZGVHZW5l
cmF0b3I6OkdldE91dHB1dEZpbGVOYW1lKCJ0ZXN0X2dlbmVyYXRvciIsICJmb28ucHJvdG8iKTsK
LQotICAvLyBDcmVhdGUgYSBkaXJlY3RvcnkgYmxvY2tpbmcgb3VyIG91dHB1dCBsb2NhdGlvbi4K
LSAgQ3JlYXRlVGVtcERpcihvdXRwdXRfZmlsZSk7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxl
ciAtLXRlc3Rfb3V0PSR0bXBkaXIgIgotICAgICAgIi0tcHJvdG9fcGF0aD0kdG1wZGlyIGZvby5w
cm90byIpOwotCi0gIC8vIE1vY2tDb2RlR2VuZXJhdG9yIG5vIGxvbmdlciBkZXRlY3RzIGFuIGVy
cm9yIGJlY2F1c2Ugd2UgYWN0dWFsbHkgd3JpdGUgdG8KLSAgLy8gYW4gaW4tbWVtb3J5IGxvY2F0
aW9uIGZpcnN0LCB0aGVuIGR1bXAgdG8gZGlzayBhdCB0aGUgZW5kLiAgVGhpcyBpcyBubwotICAv
LyBiaWcgZGVhbC4KLSAgLy8gICBFeHBlY3RFcnJvclN1YnN0cmluZygiTW9ja0NvZGVHZW5lcmF0
b3IgZGV0ZWN0ZWQgd3JpdGUgZXJyb3IuIik7Ci0KLSNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRl
ZmluZWQoX19DWUdXSU5fXykKLSAgLy8gV2luZG93cyB3aXRoIE1TVkNSVC5kbGwgcHJvZHVjZXMg
RVBFUk0gaW5zdGVhZCBvZiBFSVNESVIuCi0gIGlmIChIYXNBbHRlcm5hdGVFcnJvclN1YnN0cmlu
ZyhvdXRwdXRfZmlsZSArICI6IFBlcm1pc3Npb24gZGVuaWVkIikpIHsKLSAgICByZXR1cm47Ci0g
IH0KLSNlbmRpZgotCi0gIEV4cGVjdEVycm9yU3Vic3RyaW5nKG91dHB1dF9maWxlICsgIjogSXMg
YSBkaXJlY3RvcnkiKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgUGx1
Z2luT3V0cHV0V3JpdGVFcnJvcikgewotICBDcmVhdGVUZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAg
ICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAibWVzc2FnZSBGb28ge31cbiIpOwotCi0g
IHN0cmluZyBvdXRwdXRfZmlsZSA9Ci0gICAgICBNb2NrQ29kZUdlbmVyYXRvcjo6R2V0T3V0cHV0
RmlsZU5hbWUoInRlc3RfcGx1Z2luIiwgImZvby5wcm90byIpOwotCi0gIC8vIENyZWF0ZSBhIGRp
cmVjdG9yeSBibG9ja2luZyBvdXIgb3V0cHV0IGxvY2F0aW9uLgotICBDcmVhdGVUZW1wRGlyKG91
dHB1dF9maWxlKTsKLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tcGx1Z19vdXQ9JHRtcGRp
ciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnByb3RvIik7Ci0KLSNpZiBkZWZp
bmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKLSAgLy8gV2luZG93cyB3aXRoIE1T
VkNSVC5kbGwgcHJvZHVjZXMgRVBFUk0gaW5zdGVhZCBvZiBFSVNESVIuCi0gIGlmIChIYXNBbHRl
cm5hdGVFcnJvclN1YnN0cmluZyhvdXRwdXRfZmlsZSArICI6IFBlcm1pc3Npb24gZGVuaWVkIikp
IHsKLSAgICByZXR1cm47Ci0gIH0KLSNlbmRpZgotCi0gIEV4cGVjdEVycm9yU3Vic3RyaW5nKG91
dHB1dF9maWxlICsgIjogSXMgYSBkaXJlY3RvcnkiKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5l
SW50ZXJmYWNlVGVzdCwgT3V0cHV0RGlyZWN0b3J5Tm90Rm91bmRFcnJvcikgewotICBDcmVhdGVU
ZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAi
bWVzc2FnZSBGb28ge31cbiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLS10ZXN0X291
dD0kdG1wZGlyL25vc3VjaGRpciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnBy
b3RvIik7Ci0KLSAgRXhwZWN0RXJyb3JTdWJzdHJpbmcoIm5vc3VjaGRpci86IE5vIHN1Y2ggZmls
ZSBvciBkaXJlY3RvcnkiKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwg
UGx1Z2luT3V0cHV0RGlyZWN0b3J5Tm90Rm91bmRFcnJvcikgewotICBDcmVhdGVUZW1wRmlsZSgi
Zm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAibWVzc2FnZSBG
b28ge31cbiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLS1wbHVnX291dD0kdG1wZGly
L25vc3VjaGRpciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnByb3RvIik7Ci0K
LSAgRXhwZWN0RXJyb3JTdWJzdHJpbmcoIm5vc3VjaGRpci86IE5vIHN1Y2ggZmlsZSBvciBkaXJl
Y3RvcnkiKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgT3V0cHV0RGly
ZWN0b3J5SXNGaWxlRXJyb3IpIHsKLSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90byIsCi0gICAg
InN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2UgRm9vIHt9XG4iKTsKLQotICBS
dW4oInByb3RvY29sX2NvbXBpbGVyIC0tdGVzdF9vdXQ9JHRtcGRpci9mb28ucHJvdG8gIgotICAg
ICAgIi0tcHJvdG9fcGF0aD0kdG1wZGlyIGZvby5wcm90byIpOwotCi0jaWYgZGVmaW5lZChfV0lO
MzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCi0gIC8vIFdpbmRvd3Mgd2l0aCBNU1ZDUlQuZGxs
IHByb2R1Y2VzIEVJTlZBTCBpbnN0ZWFkIG9mIEVOT1RESVIuCi0gIGlmIChIYXNBbHRlcm5hdGVF
cnJvclN1YnN0cmluZygiZm9vLnByb3RvLzogSW52YWxpZCBhcmd1bWVudCIpKSB7Ci0gICAgcmV0
dXJuOwotICB9Ci0jZW5kaWYKLQotICBFeHBlY3RFcnJvclN1YnN0cmluZygiZm9vLnByb3RvLzog
Tm90IGEgZGlyZWN0b3J5Iik7Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3Qs
IEdlbmVyYXRvckVycm9yKSB7Ci0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJz
eW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIE1vY2tDb2RlR2VuZXJhdG9yX0Vy
cm9yIHt9XG4iKTsKLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tdGVzdF9vdXQ9JHRtcGRp
ciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0
RXJyb3JTdWJzdHJpbmcoCi0gICAgICAiLS10ZXN0X291dDogZm9vLnByb3RvOiBTYXcgbWVzc2Fn
ZSB0eXBlIE1vY2tDb2RlR2VuZXJhdG9yX0Vycm9yLiIpOwotfQotCi1URVNUX0YoQ29tbWFuZExp
bmVJbnRlcmZhY2VUZXN0LCBHZW5lcmF0b3JQbHVnaW5FcnJvcikgewotICAvLyBUZXN0IGEgZ2Vu
ZXJhdG9yIHBsdWdpbiB0aGF0IHJldHVybnMgYW4gZXJyb3IuCi0KLSAgQ3JlYXRlVGVtcEZpbGUo
ImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2Ug
TW9ja0NvZGVHZW5lcmF0b3JfRXJyb3Ige31cbiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGls
ZXIgLS1wbHVnX291dD1UZXN0UGFyYW1ldGVyOiR0bXBkaXIgIgotICAgICAgIi0tcHJvdG9fcGF0
aD0kdG1wZGlyIGZvby5wcm90byIpOwotCi0gIEV4cGVjdEVycm9yU3Vic3RyaW5nKAotICAgICAg
Ii0tcGx1Z19vdXQ6IGZvby5wcm90bzogU2F3IG1lc3NhZ2UgdHlwZSBNb2NrQ29kZUdlbmVyYXRv
cl9FcnJvci4iKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgR2VuZXJh
dG9yUGx1Z2luRmFpbCkgewotICAvLyBUZXN0IGEgZ2VuZXJhdG9yIHBsdWdpbiB0aGF0IGV4aXRz
IHdpdGggYW4gZXJyb3IgY29kZS4KLQotICBDcmVhdGVUZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAg
ICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAibWVzc2FnZSBNb2NrQ29kZUdlbmVyYXRv
cl9FeGl0IHt9XG4iKTsKLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tcGx1Z19vdXQ9VGVz
dFBhcmFtZXRlcjokdG1wZGlyICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRpciBmb28ucHJv
dG8iKTsKLQotICBFeHBlY3RFcnJvclN1YnN0cmluZygiU2F3IG1lc3NhZ2UgdHlwZSBNb2NrQ29k
ZUdlbmVyYXRvcl9FeGl0LiIpOwotICBFeHBlY3RFcnJvclN1YnN0cmluZygKLSAgICAgICItLXBs
dWdfb3V0OiBwcmVmaXgtZ2VuLXBsdWc6IFBsdWdpbiBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAx
MjMuIik7Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIEdlbmVyYXRvclBs
dWdpbkNyYXNoKSB7Ci0gIC8vIFRlc3QgYSBnZW5lcmF0b3IgcGx1Z2luIHRoYXQgY3Jhc2hlcy4K
LQotICBDcmVhdGVUZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJc
IjtcbiIKLSAgICAibWVzc2FnZSBNb2NrQ29kZUdlbmVyYXRvcl9BYm9ydCB7fVxuIik7Ci0KLSAg
UnVuKCJwcm90b2NvbF9jb21waWxlciAtLXBsdWdfb3V0PVRlc3RQYXJhbWV0ZXI6JHRtcGRpciAi
Ci0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0RXJy
b3JTdWJzdHJpbmcoIlNhdyBtZXNzYWdlIHR5cGUgTW9ja0NvZGVHZW5lcmF0b3JfQWJvcnQuIik7
Ci0KLSNpZmRlZiBfV0lOMzIKLSAgLy8gV2luZG93cyBkb2Vzbid0IGhhdmUgc2lnbmFscy4gIEl0
IGxvb2tzIGxpa2UgYWJvcnQoKWluZyBjYXVzZXMgdGhlIHByb2Nlc3MKLSAgLy8gdG8gZXhpdCB3
aXRoIHN0YXR1cyBjb2RlIDMsIGJ1dCBsZXQncyBub3QgZGVwZW5kIG9uIHRoZSBleGFjdCBudW1i
ZXIgaGVyZS4KLSAgRXhwZWN0RXJyb3JTdWJzdHJpbmcoCi0gICAgICAiLS1wbHVnX291dDogcHJl
Zml4LWdlbi1wbHVnOiBQbHVnaW4gZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUiKTsKLSNlbHNlCi0g
IC8vIERvbid0IGRlcGVuZCBvbiB0aGUgZXhhY3Qgc2lnbmFsIG51bWJlci4KLSAgRXhwZWN0RXJy
b3JTdWJzdHJpbmcoCi0gICAgICAiLS1wbHVnX291dDogcHJlZml4LWdlbi1wbHVnOiBQbHVnaW4g
a2lsbGVkIGJ5IHNpZ25hbCIpOwotI2VuZGlmCi19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVy
ZmFjZVRlc3QsIFBsdWdpblJlY2VpdmVzU291cmNlQ29kZUluZm8pIHsKLSAgQ3JlYXRlVGVtcEZp
bGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3Nh
Z2UgTW9ja0NvZGVHZW5lcmF0b3JfSGFzU291cmNlQ29kZUluZm8ge31cbiIpOwotCi0gIFJ1bigi
cHJvdG9jb2xfY29tcGlsZXIgLS1wbHVnX291dD0kdG1wZGlyIC0tcHJvdG9fcGF0aD0kdG1wZGly
IGZvby5wcm90byIpOwotCi0gIEV4cGVjdEVycm9yU3Vic3RyaW5nKAotICAgICAgIlNhdyBtZXNz
YWdlIHR5cGUgTW9ja0NvZGVHZW5lcmF0b3JfSGFzU291cmNlQ29kZUluZm86IDEuIik7Ci19Ci0K
LVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIFBsdWdpblJlY2VpdmVzSnNvbk5hbWUp
IHsKLSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8y
XCI7XG4iCi0gICAgIm1lc3NhZ2UgTW9ja0NvZGVHZW5lcmF0b3JfSGFzSnNvbk5hbWUge1xuIgot
ICAgICIgIG9wdGlvbmFsIGludDMyIHZhbHVlID0gMTtcbiIKLSAgICAifVxuIik7Ci0KLSAgUnVu
KCJwcm90b2NvbF9jb21waWxlciAtLXBsdWdfb3V0PSR0bXBkaXIgLS1wcm90b19wYXRoPSR0bXBk
aXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0RXJyb3JTdWJzdHJpbmcoIlNhdyBqc29uX25hbWU6
IDEiKTsKLX0KLQotVEVTVF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgR2VuZXJhdG9yUGx1
Z2luTm90Rm91bmQpIHsKLSAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgaWYgdGhlIHBsdWdpbiBpc24n
dCBmb3VuZC4KLQotICBDcmVhdGVUZW1wRmlsZSgiZXJyb3IucHJvdG8iLAotICAgICJzeW50YXgg
PSBcInByb3RvMlwiO1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxuIik7Ci0KLSAgUnVuKCJwcm90
b2NvbF9jb21waWxlciAtLWJhZHBsdWdfb3V0PVRlc3RQYXJhbWV0ZXI6JHRtcGRpciAiCi0gICAg
ICAiLS1wbHVnaW49cHJlZml4LWdlbi1iYWRwbHVnPW5vX3N1Y2hfZmlsZSAiCi0gICAgICAiLS1w
cm90b19wYXRoPSR0bXBkaXIgZXJyb3IucHJvdG8iKTsKLQotI2lmZGVmIF9XSU4zMgotICBFeHBl
Y3RFcnJvclN1YnN0cmluZygiLS1iYWRwbHVnX291dDogcHJlZml4LWdlbi1iYWRwbHVnOiAiICsK
LSAgICAgIFN1YnByb2Nlc3M6OldpbjMyRXJyb3JNZXNzYWdlKEVSUk9SX0ZJTEVfTk9UX0ZPVU5E
KSk7Ci0jZWxzZQotICAvLyBFcnJvciB3cml0dGVuIHRvIHN0ZG91dCBieSBjaGlsZCBwcm9jZXNz
IGFmdGVyIGV4ZWMoKSBmYWlscy4KLSAgRXhwZWN0RXJyb3JTdWJzdHJpbmcoCi0gICAgICAibm9f
c3VjaF9maWxlOiBwcm9ncmFtIG5vdCBmb3VuZCBvciBpcyBub3QgZXhlY3V0YWJsZSIpOwotCi0g
IC8vIEVycm9yIHdyaXR0ZW4gYnkgcGFyZW50IHByb2Nlc3Mgd2hlbiBjaGlsZCBmYWlscy4KLSAg
RXhwZWN0RXJyb3JTdWJzdHJpbmcoCi0gICAgICAiLS1iYWRwbHVnX291dDogcHJlZml4LWdlbi1i
YWRwbHVnOiBQbHVnaW4gZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgMS4iKTsKLSNlbmRpZgotfQot
Ci1URVNUX0YoQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0LCBHZW5lcmF0b3JQbHVnaW5Ob3RBbGxv
d2VkKSB7Ci0gIC8vIFRlc3Qgd2hhdCBoYXBwZW5zIGlmIHBsdWdpbnMgYXJlbid0IGFsbG93ZWQu
Ci0KLSAgQ3JlYXRlVGVtcEZpbGUoImVycm9yLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90
bzJcIjtcbiIKLSAgICAibWVzc2FnZSBGb28ge31cbiIpOwotCi0gIERpc2FsbG93UGx1Z2lucygp
OwotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tcGx1Z19vdXQ9VGVzdFBhcmFtZXRlcjokdG1w
ZGlyICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRpciBlcnJvci5wcm90byIpOwotCi0gIEV4
cGVjdEVycm9yU3Vic3RyaW5nKCJVbmtub3duIGZsYWc6IC0tcGx1Z19vdXQiKTsKLX0KLQotVEVT
VF9GKENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgSGVscFRleHQpIHsKLSAgUnVuKCJ0ZXN0X2V4
ZWNfbmFtZSAtLWhlbHAiKTsKLQotICBFeHBlY3RFcnJvclN1YnN0cmluZ1dpdGhaZXJvUmV0dXJu
Q29kZSgiVXNhZ2U6IHRlc3RfZXhlY19uYW1lICIpOwotICBFeHBlY3RFcnJvclN1YnN0cmluZ1dp
dGhaZXJvUmV0dXJuQ29kZSgiLS10ZXN0X291dD1PVVRfRElSIik7Ci0gIEV4cGVjdEVycm9yU3Vi
c3RyaW5nV2l0aFplcm9SZXR1cm5Db2RlKCJUZXN0IG91dHB1dC4iKTsKLSAgRXhwZWN0RXJyb3JT
dWJzdHJpbmdXaXRoWmVyb1JldHVybkNvZGUoIi0tYWx0X291dD1PVVRfRElSIik7Ci0gIEV4cGVj
dEVycm9yU3Vic3RyaW5nV2l0aFplcm9SZXR1cm5Db2RlKCJBbHQgb3V0cHV0LiIpOwotfQotCi1U
RVNUX0YoQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0LCBHY2NGb3JtYXRFcnJvcnMpIHsKLSAgLy8g
VGVzdCAtLWVycm9yX2Zvcm1hdD1nY2MgKHdoaWNoIGlzIHRoZSBkZWZhdWx0LCBidXQgd2Ugd2Fu
dCB0byB2ZXJpZnkKLSAgLy8gdGhhdCBpdCBjYW4gYmUgc2V0IGV4cGxpY2l0bHkpLgotCi0gIENy
ZWF0ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgot
ICAgICJiYWRzeW50YXhcbiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLS10ZXN0X291
dD0kdG1wZGlyICIKLSAgICAgICItLXByb3RvX3BhdGg9JHRtcGRpciAtLWVycm9yX2Zvcm1hdD1n
Y2MgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0RXJyb3JUZXh0KAotICAgICJmb28ucHJvdG86Mjox
OiBFeHBlY3RlZCB0b3AtbGV2ZWwgc3RhdGVtZW50IChlLmcuIFwibWVzc2FnZVwiKS5cbiIpOwot
fQotCi1URVNUX0YoQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0LCBNc3ZzRm9ybWF0RXJyb3JzKSB7
Ci0gIC8vIFRlc3QgLS1lcnJvcl9mb3JtYXQ9bXN2cwotCi0gIENyZWF0ZVRlbXBGaWxlKCJmb28u
cHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICJiYWRzeW50YXhcbiIp
OwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLS10ZXN0X291dD0kdG1wZGlyICIKLSAgICAg
ICItLXByb3RvX3BhdGg9JHRtcGRpciAtLWVycm9yX2Zvcm1hdD1tc3ZzIGZvby5wcm90byIpOwot
Ci0gIEV4cGVjdEVycm9yVGV4dCgKLSAgICAiJHRtcGRpci9mb28ucHJvdG8oMikgOiBlcnJvciBp
biBjb2x1bW49MTogRXhwZWN0ZWQgdG9wLWxldmVsIHN0YXRlbWVudCAiCi0gICAgICAiKGUuZy4g
XCJtZXNzYWdlXCIpLlxuIik7Ci19Ci0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3Qs
IEludmFsaWRFcnJvckZvcm1hdCkgewotICAvLyBUZXN0IC0tZXJyb3JfZm9ybWF0PW1zdnMKLQot
ICBDcmVhdGVUZW1wRmlsZSgiZm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtc
biIKLSAgICAiYmFkc3ludGF4XG4iKTsKLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tdGVz
dF9vdXQ9JHRtcGRpciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgLS1lcnJvcl9mb3Jt
YXQ9aW52YWxpZCBmb28ucHJvdG8iKTsKLQotICBFeHBlY3RFcnJvclRleHQoCi0gICAgIlVua25v
d24gZXJyb3IgZm9ybWF0OiBpbnZhbGlkXG4iKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRmxh
ZyBwYXJzaW5nIHRlc3RzCi0KLVRFU1RfRihDb21tYW5kTGluZUludGVyZmFjZVRlc3QsIFBhcnNl
U2luZ2xlQ2hhcmFjdGVyRmxhZykgewotICAvLyBUZXN0IHRoYXQgYSBzaW5nbGUtY2hhcmFjdGVy
IGZsYWcgd29ya3MuCi0KLSAgQ3JlYXRlVGVtcEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRh
eCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3NhZ2UgRm9vIHt9XG4iKTsKLQotICBSdW4oInBy
b3RvY29sX2NvbXBpbGVyIC10JHRtcGRpciAiCi0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIg
Zm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9FcnJvcnMoKTsKLSAgRXhwZWN0R2VuZXJhdGVkKCJ0
ZXN0X2dlbmVyYXRvciIsICIiLCAiZm9vLnByb3RvIiwgIkZvbyIpOwotfQotCi1URVNUX0YoQ29t
bWFuZExpbmVJbnRlcmZhY2VUZXN0LCBQYXJzZVNwYWNlRGVsaW1pdGVkVmFsdWUpIHsKLSAgLy8g
VGVzdCB0aGF0IHNlcGFyYXRpbmcgdGhlIGZsYWcgdmFsdWUgd2l0aCBhIHNwYWNlIHdvcmtzLgot
Ci0gIENyZWF0ZVRlbXBGaWxlKCJmb28ucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwi
O1xuIgotICAgICJtZXNzYWdlIEZvbyB7fVxuIik7Ci0KLSAgUnVuKCJwcm90b2NvbF9jb21waWxl
ciAtLXRlc3Rfb3V0ICR0bXBkaXIgIgotICAgICAgIi0tcHJvdG9fcGF0aD0kdG1wZGlyIGZvby5w
cm90byIpOwotCi0gIEV4cGVjdE5vRXJyb3JzKCk7Ci0gIEV4cGVjdEdlbmVyYXRlZCgidGVzdF9n
ZW5lcmF0b3IiLCAiIiwgImZvby5wcm90byIsICJGb28iKTsKLX0KLQotVEVTVF9GKENvbW1hbmRM
aW5lSW50ZXJmYWNlVGVzdCwgUGFyc2VTaW5nbGVDaGFyYWN0ZXJTcGFjZURlbGltaXRlZFZhbHVl
KSB7Ci0gIC8vIFRlc3QgdGhhdCBzZXBhcmF0aW5nIHRoZSBmbGFnIHZhbHVlIHdpdGggYSBzcGFj
ZSB3b3JrcyBmb3IKLSAgLy8gc2luZ2xlLWNoYXJhY3RlciBmbGFncy4KLQotICBDcmVhdGVUZW1w
RmlsZSgiZm9vLnByb3RvIiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAibWVz
c2FnZSBGb28ge31cbiIpOwotCi0gIFJ1bigicHJvdG9jb2xfY29tcGlsZXIgLXQgJHRtcGRpciAi
Ci0gICAgICAiLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0Tm9F
cnJvcnMoKTsKLSAgRXhwZWN0R2VuZXJhdGVkKCJ0ZXN0X2dlbmVyYXRvciIsICIiLCAiZm9vLnBy
b3RvIiwgIkZvbyIpOwotfQotCi1URVNUX0YoQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0LCBNaXNz
aW5nVmFsdWVFcnJvcikgewotICAvLyBUZXN0IHRoYXQgd2UgZ2V0IGFuIGVycm9yIGlmIGEgZmxh
ZyBpcyBtaXNzaW5nIGl0cyB2YWx1ZS4KLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0tdGVz
dF9vdXQgLS1wcm90b19wYXRoPSR0bXBkaXIgZm9vLnByb3RvIik7Ci0KLSAgRXhwZWN0RXJyb3JU
ZXh0KCJNaXNzaW5nIHZhbHVlIGZvciBmbGFnOiAtLXRlc3Rfb3V0XG4iKTsKLX0KLQotVEVTVF9G
KENvbW1hbmRMaW5lSW50ZXJmYWNlVGVzdCwgTWlzc2luZ1ZhbHVlQXRFbmRFcnJvcikgewotICAv
LyBUZXN0IHRoYXQgd2UgZ2V0IGFuIGVycm9yIGlmIHRoZSBsYXN0IGFyZ3VtZW50IGlzIGEgZmxh
ZyByZXF1aXJpbmcgYQotICAvLyB2YWx1ZS4KLQotICBSdW4oInByb3RvY29sX2NvbXBpbGVyIC0t
dGVzdF9vdXQiKTsKLQotICBFeHBlY3RFcnJvclRleHQoIk1pc3NpbmcgdmFsdWUgZm9yIGZsYWc6
IC0tdGVzdF9vdXRcbiIpOwotfQotCi1URVNUX0YoQ29tbWFuZExpbmVJbnRlcmZhY2VUZXN0LCBQ
cmludEZyZWVGaWVsZE51bWJlcnMpIHsKLSAgQ3JlYXRlVGVtcEZpbGUoCi0gICAgICAiZm9vLnBy
b3RvIiwKLSAgICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICAgInBhY2thZ2UgZm9v
O1xuIgotICAgICAgIm1lc3NhZ2UgRm9vIHtcbiIKLSAgICAgICIgIG9wdGlvbmFsIGludDMyIGEg
PSAyO1xuIgotICAgICAgIiAgb3B0aW9uYWwgc3RyaW5nIGIgPSA0O1xuIgotICAgICAgIiAgb3B0
aW9uYWwgc3RyaW5nIGMgPSA1O1xuIgotICAgICAgIiAgb3B0aW9uYWwgaW50NjQgZCA9IDg7XG4i
Ci0gICAgICAiICBvcHRpb25hbCBkb3VibGUgZSA9IDEwO1xuIgotICAgICAgIn1cbiIpOwotICBD
cmVhdGVUZW1wRmlsZSgKLSAgICAgICJiYXIucHJvdG8iLAotICAgICAgInN5bnRheCA9IFwicHJv
dG8yXCI7XG4iCi0gICAgICAibWVzc2FnZSBCYXIge1xuIgotICAgICAgIiAgb3B0aW9uYWwgaW50
MzIgYSA9IDI7XG4iCi0gICAgICAiICBleHRlbnNpb25zIDQgdG8gNTtcbiIKLSAgICAgICIgIG9w
dGlvbmFsIGludDY0IGQgPSA4O1xuIgotICAgICAgIiAgZXh0ZW5zaW9ucyAxMDtcbiIKLSAgICAg
ICJ9XG4iKTsKLSAgQ3JlYXRlVGVtcEZpbGUoCi0gICAgICAiYmF6LnByb3RvIiwKLSAgICAgICJz
eW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICAgIm1lc3NhZ2UgQmF6IHtcbiIKLSAgICAgICIg
IG9wdGlvbmFsIGludDMyIGEgPSAyO1xuIgotICAgICAgIiAgb3B0aW9uYWwgaW50NjQgZCA9IDg7
XG4iCi0gICAgICAiICBleHRlbnNpb25zIDE1IHRvIG1heDtcbiIgIC8vIHVub3JkZXJlZC4KLSAg
ICAgICIgIGV4dGVuc2lvbnMgMTM7XG4iCi0gICAgICAiICBleHRlbnNpb25zIDEwIHRvIDEyO1xu
IgotICAgICAgIiAgZXh0ZW5zaW9ucyA1O1xuIgotICAgICAgIiAgZXh0ZW5zaW9ucyA0O1xuIgot
ICAgICAgIn1cbiIpOwotICBDcmVhdGVUZW1wRmlsZSgKLSAgICAgICJxdXoucHJvdG8iLAotICAg
ICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgICAibWVzc2FnZSBRdXoge1xuIgotICAg
ICAgIiAgbWVzc2FnZSBGb28ge31cbiIgIC8vIG5lc3RlZCBtZXNzYWdlCi0gICAgICAiICBvcHRp
b25hbCBpbnQzMiBhID0gMjtcbiIKLSAgICAgICIgIG9wdGlvbmFsIGdyb3VwIEMgPSA0IHtcbiIK
LSAgICAgICIgICAgb3B0aW9uYWwgaW50MzIgZCA9IDU7XG4iCi0gICAgICAiICB9XG4iCi0gICAg
ICAiICBleHRlbnNpb25zIDggdG8gMTA7XG4iCi0gICAgICAiICBvcHRpb25hbCBncm91cCBFID0g
MTEge1xuIgotICAgICAgIiAgICBvcHRpb25hbCBpbnQzMiBmID0gOTtcbiIgICAgLy8gZXhwbGlj
aXRseSByZXVzZSBleHRlbnNpb24gcmFuZ2UgOC0xMAotICAgICAgIiAgICBvcHRpb25hbCBncm91
cCBHID0gMTUge1xuIiAgLy8gbmVzdGVkIGdyb3VwCi0gICAgICAiICAgICAgbWVzc2FnZSBGb28g
e31cbiIgICAgICAgICAvLyBuZXN0ZWQgbWVzc2FnZSBpbnNpZGUgbmVzdGVkIGdyb3VwCi0gICAg
ICAiICAgIH1cbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICJ9XG4iKTsKLQotICBSdW4oInByb3Rv
Y29sX2NvbXBpbGVyIC0tcHJpbnRfZnJlZV9maWVsZF9udW1iZXJzIC0tcHJvdG9fcGF0aD0kdG1w
ZGlyICIKLSAgICAgICJmb28ucHJvdG8gYmFyLnByb3RvIGJhei5wcm90byBxdXoucHJvdG8iKTsK
LQotICBFeHBlY3ROb0Vycm9ycygpOwotCi0gIC8vIFRPRE8oamllbHVvKTogQ3lnd2luIGRvZXNu
J3Qgd29yayB3ZWxsIGlmIHdlIHRyeSB0byBjYXB0dXJlIHN0ZGVyciBhbmQKLSAgLy8gc3Rkb3V0
IGF0IHRoZSBzYW1lIHRpbWUuIE5lZWQgdG8gZmlndXJlIG91dCB3aHkgYW5kIGFkZCB0aGlzIHRl
c3QgYmFjawotICAvLyBmb3IgQ3lnd2luLgotI2lmICFkZWZpbmVkKF9fQ1lHV0lOX18pCi0gIEV4
cGVjdENhcHR1cmVkU3Rkb3V0KAotICAgICAgImZvby5Gb28gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZyZWU6IDEgMyA2LTcgOSAxMS1JTkZcbiIKLSAgICAgICJCYXIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcmVlOiAxIDMgNi03IDkgMTEtSU5GXG4iCi0gICAgICAiQmF6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZTogMSAzIDYtNyA5IDE0XG4iCi0g
ICAgICAiUXV6LkZvbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZTogMS1JTkZcbiIK
LSAgICAgICJRdXouRS5HLkZvbyAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlOiAxLUlORlxu
IgotICAgICAgIlF1eiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWU6IDEgMyA2
LTcgMTItMTQgMTYtSU5GXG4iKTsKLSNlbmRpZgotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS8vIFRl
c3QgZm9yIC0tZW5jb2RlIGFuZCAtLWRlY29kZS4gIE5vdGUgdGhhdCBpdCB3b3VsZCBiZSBlYXNp
ZXIgdG8gZG8gdGhpcwotLy8gdGVzdCBhcyBhIHNoZWxsIHNjcmlwdCwgYnV0IHdlJ2QgbGlrZSB0
byBiZSBhYmxlIHRvIHJ1biB0aGUgdGVzdCBvbgotLy8gcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2
ZSBhIEJvdXJuZS1jb21wYXRpYmxlIHNoZWxsIGF2YWlsYWJsZSAoZXNwZWNpYWxseQotLy8gV2lu
ZG93cy9NU1ZDKS4KLWNsYXNzIEVuY29kZURlY29kZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVz
dCB7Ci0gcHJvdGVjdGVkOgotICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSB7Ci0gICAgZHVwZWRfc3Rk
aW5fID0gZHVwKFNURElOX0ZJTEVOTyk7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgVGVhckRvd24o
KSB7Ci0gICAgZHVwMihkdXBlZF9zdGRpbl8sIFNURElOX0ZJTEVOTyk7Ci0gICAgY2xvc2UoZHVw
ZWRfc3RkaW5fKTsKLSAgfQotCi0gIHZvaWQgUmVkaXJlY3RTdGRpbkZyb21UZXh0KGNvbnN0IHN0
cmluZyYgaW5wdXQpIHsKLSAgICBzdHJpbmcgZmlsZW5hbWUgPSBUZXN0VGVtcERpcigpICsgIi90
ZXN0X3N0ZGluIjsKLSAgICBHT09HTEVfQ0hFQ0tfT0soRmlsZTo6U2V0Q29udGVudHMoZmlsZW5h
bWUsIGlucHV0LCB0cnVlKSk7Ci0gICAgR09PR0xFX0NIRUNLKFJlZGlyZWN0U3RkaW5Gcm9tRmls
ZShmaWxlbmFtZSkpOwotICB9Ci0KLSAgYm9vbCBSZWRpcmVjdFN0ZGluRnJvbUZpbGUoY29uc3Qg
c3RyaW5nJiBmaWxlbmFtZSkgewotICAgIGludCBmZCA9IG9wZW4oZmlsZW5hbWUuY19zdHIoKSwg
T19SRE9OTFkpOwotICAgIGlmIChmZCA8IDApIHJldHVybiBmYWxzZTsKLSAgICBkdXAyKGZkLCBT
VERJTl9GSUxFTk8pOwotICAgIGNsb3NlKGZkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IC8vIFJlbW92ZSAnXHInIGNoYXJhY3RlcnMgZnJvbSB0ZXh0LgotICBzdHJpbmcgU3RyaXBDUihj
b25zdCBzdHJpbmcmIHRleHQpIHsKLSAgICBzdHJpbmcgcmVzdWx0OwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0ZXh0LnNpemUoKTsgaSsrKSB7Ci0gICAgICBpZiAodGV4dFtpXSAhPSAnXHIn
KSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoX2JhY2sodGV4dFtpXSk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGVudW0gVHlwZSB7IFRFWFQsIEJJTkFSWSB9
OwotICBlbnVtIFJldHVybkNvZGUgeyBTVUNDRVNTLCBFUlJPUiB9OwotCi0gIGJvb2wgUnVuKGNv
bnN0IHN0cmluZyYgY29tbWFuZCkgewotICAgIHZlY3RvcjxzdHJpbmc+IGFyZ3M7Ci0gICAgYXJn
cy5wdXNoX2JhY2soInByb3RvYyIpOwotICAgIFNwbGl0U3RyaW5nVXNpbmcoY29tbWFuZCwgIiAi
LCAmYXJncyk7Ci0gICAgYXJncy5wdXNoX2JhY2soIi0tcHJvdG9fcGF0aD0iICsgVGVzdFNvdXJj
ZURpcigpKTsKLQotICAgIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9hcnJheTxjb25zdCBjaGFy
ICogPiBhcmd2KG5ldyBjb25zdCBjaGFyKiBbYXJncy5zaXplKCldKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBpKyspIHsKLSAgICAgIGFyZ3ZbaV0gPSBhcmdzW2ldLmNf
c3RyKCk7Ci0gICAgfQotCi0gICAgQ29tbWFuZExpbmVJbnRlcmZhY2UgY2xpOwotICAgIGNsaS5T
ZXRJbnB1dHNBcmVQcm90b1BhdGhSZWxhdGl2ZSh0cnVlKTsKLQotICAgIENhcHR1cmVUZXN0U3Rk
b3V0KCk7Ci0gICAgQ2FwdHVyZVRlc3RTdGRlcnIoKTsKLQotICAgIGludCByZXN1bHQgPSBjbGku
UnVuKGFyZ3Muc2l6ZSgpLCBhcmd2LmdldCgpKTsKLQotICAgIGNhcHR1cmVkX3N0ZG91dF8gPSBH
ZXRDYXB0dXJlZFRlc3RTdGRvdXQoKTsKLSAgICBjYXB0dXJlZF9zdGRlcnJfID0gR2V0Q2FwdHVy
ZWRUZXN0U3RkZXJyKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0ID09IDA7Ci0gIH0KLQotICB2b2lk
IEV4cGVjdFN0ZG91dE1hdGNoZXNCaW5hcnlGaWxlKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsK
LSAgICBzdHJpbmcgZXhwZWN0ZWRfb3V0cHV0OwotICAgIEdPT0dMRV9DSEVDS19PSyhGaWxlOjpH
ZXRDb250ZW50cyhmaWxlbmFtZSwgJmV4cGVjdGVkX291dHB1dCwgdHJ1ZSkpOwotCi0gICAgLy8g
RG9uJ3QgdXNlIEVYUEVDVF9FUSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcHJpbnQgcmF3IGJp
bmFyeSBkYXRhIHRvCi0gICAgLy8gc3Rkb3V0IG9uIGZhaWx1cmUuCi0gICAgRVhQRUNUX1RSVUUo
Y2FwdHVyZWRfc3Rkb3V0XyA9PSBleHBlY3RlZF9vdXRwdXQpOwotICB9Ci0KLSAgdm9pZCBFeHBl
Y3RTdGRvdXRNYXRjaGVzVGV4dEZpbGUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSkgewotICAgIHN0
cmluZyBleHBlY3RlZF9vdXRwdXQ7Ci0gICAgR09PR0xFX0NIRUNLX09LKEZpbGU6OkdldENvbnRl
bnRzKGZpbGVuYW1lLCAmZXhwZWN0ZWRfb3V0cHV0LCB0cnVlKSk7Ci0KLSAgICBFeHBlY3RTdGRv
dXRNYXRjaGVzVGV4dChleHBlY3RlZF9vdXRwdXQpOwotICB9Ci0KLSAgdm9pZCBFeHBlY3RTdGRv
dXRNYXRjaGVzVGV4dChjb25zdCBzdHJpbmcmIGV4cGVjdGVkX3RleHQpIHsKLSAgICBFWFBFQ1Rf
RVEoU3RyaXBDUihleHBlY3RlZF90ZXh0KSwgU3RyaXBDUihjYXB0dXJlZF9zdGRvdXRfKSk7Ci0g
IH0KLQotICB2b2lkIEV4cGVjdFN0ZGVyck1hdGNoZXNUZXh0KGNvbnN0IHN0cmluZyYgZXhwZWN0
ZWRfdGV4dCkgewotICAgIEVYUEVDVF9FUShTdHJpcENSKGV4cGVjdGVkX3RleHQpLCBTdHJpcENS
KGNhcHR1cmVkX3N0ZGVycl8pKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgaW50IGR1cGVkX3N0ZGlu
XzsKLSAgc3RyaW5nIGNhcHR1cmVkX3N0ZG91dF87Ci0gIHN0cmluZyBjYXB0dXJlZF9zdGRlcnJf
OwotfTsKLQotVEVTVF9GKEVuY29kZURlY29kZVRlc3QsIEVuY29kZSkgewotICBSZWRpcmVjdFN0
ZGluRnJvbUZpbGUoVGVzdFNvdXJjZURpcigpICsgIi9nb29nbGUvcHJvdG9idWYvIgotICAgICJ0
ZXN0ZGF0YS90ZXh0X2Zvcm1hdF91bml0dGVzdF9kYXRhX29uZW9mX2ltcGxlbWVudGVkLnR4dCIp
OwotICBFWFBFQ1RfVFJVRShSdW4oImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wcm90byAiCi0g
ICAgICAgICAgICAgICAgICAiLS1lbmNvZGU9cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVz
IikpOwotICBFeHBlY3RTdGRvdXRNYXRjaGVzQmluYXJ5RmlsZShUZXN0U291cmNlRGlyKCkgKwot
ICAgICIvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL2dvbGRlbl9tZXNzYWdlX29uZW9mX2ltcGxl
bWVudGVkIik7Ci0gIEV4cGVjdFN0ZGVyck1hdGNoZXNUZXh0KCIiKTsKLX0KLQotVEVTVF9GKEVu
Y29kZURlY29kZVRlc3QsIERlY29kZSkgewotICBSZWRpcmVjdFN0ZGluRnJvbUZpbGUoVGVzdFNv
dXJjZURpcigpICsKLSAgICAiL2dvb2dsZS9wcm90b2J1Zi90ZXN0ZGF0YS9nb2xkZW5fbWVzc2Fn
ZV9vbmVvZl9pbXBsZW1lbnRlZCIpOwotICBFWFBFQ1RfVFJVRShSdW4oImdvb2dsZS9wcm90b2J1
Zi91bml0dGVzdC5wcm90byAiCi0gICAgICAgICAgICAgICAgICAiLS1kZWNvZGU9cHJvdG9idWZf
dW5pdHRlc3QuVGVzdEFsbFR5cGVzIikpOwotICBFeHBlY3RTdGRvdXRNYXRjaGVzVGV4dEZpbGUo
VGVzdFNvdXJjZURpcigpICsKLSAgICAiL2dvb2dsZS9wcm90b2J1Zi8iCi0gICAgInRlc3RkYXRh
L3RleHRfZm9ybWF0X3VuaXR0ZXN0X2RhdGFfb25lb2ZfaW1wbGVtZW50ZWQudHh0Iik7Ci0gIEV4
cGVjdFN0ZGVyck1hdGNoZXNUZXh0KCIiKTsKLX0KLQotVEVTVF9GKEVuY29kZURlY29kZVRlc3Qs
IFBhcnRpYWwpIHsKLSAgUmVkaXJlY3RTdGRpbkZyb21UZXh0KCIiKTsKLSAgRVhQRUNUX1RSVUUo
UnVuKCJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8gIgotICAgICAgICAgICAgICAgICAg
Ii0tZW5jb2RlPXByb3RvYnVmX3VuaXR0ZXN0LlRlc3RSZXF1aXJlZCIpKTsKLSAgRXhwZWN0U3Rk
b3V0TWF0Y2hlc1RleHQoIiIpOwotICBFeHBlY3RTdGRlcnJNYXRjaGVzVGV4dCgKLSAgICAid2Fy
bmluZzogIElucHV0IG1lc3NhZ2UgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHM6ICBhLCBiLCBj
XG4iKTsKLX0KLQotVEVTVF9GKEVuY29kZURlY29kZVRlc3QsIERlY29kZVJhdykgewotICBwcm90
b2J1Zl91bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlv
bmFsX2ludDMyKDEyMyk7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX3N0cmluZygiZm9vIik7Ci0g
IHN0cmluZyBkYXRhOwotICBtZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRhKTsKLQotICBS
ZWRpcmVjdFN0ZGluRnJvbVRleHQoZGF0YSk7Ci0gIEVYUEVDVF9UUlVFKFJ1bigiLS1kZWNvZGVf
cmF3IikpOwotICBFeHBlY3RTdGRvdXRNYXRjaGVzVGV4dCgiMTogMTIzXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICIxNDogXCJmb29cIlxuIik7Ci0gIEV4cGVjdFN0ZGVyck1hdGNoZXNU
ZXh0KCIiKTsKLX0KLQotVEVTVF9GKEVuY29kZURlY29kZVRlc3QsIFVua25vd25UeXBlKSB7Ci0g
IEVYUEVDVF9GQUxTRShSdW4oImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wcm90byAiCi0gICAg
ICAgICAgICAgICAgICAgIi0tZW5jb2RlPU5vU3VjaFR5cGUiKSk7Ci0gIEV4cGVjdFN0ZG91dE1h
dGNoZXNUZXh0KCIiKTsKLSAgRXhwZWN0U3RkZXJyTWF0Y2hlc1RleHQoIlR5cGUgbm90IGRlZmlu
ZWQ6IE5vU3VjaFR5cGVcbiIpOwotfQotCi1URVNUX0YoRW5jb2RlRGVjb2RlVGVzdCwgUHJvdG9Q
YXJzZUVycm9yKSB7Ci0gIEVYUEVDVF9GQUxTRShSdW4oImdvb2dsZS9wcm90b2J1Zi9ub19zdWNo
X2ZpbGUucHJvdG8gIgotICAgICAgICAgICAgICAgICAgICItLWVuY29kZT1Ob1N1Y2hUeXBlIikp
OwotICBFeHBlY3RTdGRvdXRNYXRjaGVzVGV4dCgiIik7Ci0gIEV4cGVjdFN0ZGVyck1hdGNoZXNU
ZXh0KAotICAgICJnb29nbGUvcHJvdG9idWYvbm9fc3VjaF9maWxlLnByb3RvOiBGaWxlIG5vdCBm
b3VuZC5cbiIpOwotfQotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLSNlbmRpZiAgLy8g
IUdPT0dMRV9QUk9UT0JVRl9IRUFQX0NIRUNLX0RSQUNPTklBTgotCi19ICAvLyBuYW1lc3BhY2Ug
Y29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2ds
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfYm9vdHN0
cmFwX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfYm9v
dHN0cmFwX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzQ1MWFi
MWJmZjgxYjIzNzdkYTkzYWYyZjY2MWQ5ODAyMWU4NjMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAv
Y3BwX2Jvb3RzdHJhcF91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25A
Z29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29s
IEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBv
dGhlcnMuCi0vLwotLy8gVGhpcyB0ZXN0IGluc3VyZXMgdGhhdCBnb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5wYi57aCxjY30gbWF0Y2ggZXhhY3RseQotLy8gd2hhdCB3b3VsZCBiZSBnZW5lcmF0
ZWQgYnkgdGhlIHByb3RvY29sIGNvbXBpbGVyLiAgVGhlc2UgZmlsZXMgYXJlIG5vdAotLy8gZ2Vu
ZXJhdGVkIGF1dG9tYXRpY2FsbHkgYXQgYnVpbGQgdGltZSBiZWNhdXNlIHRoZXkgYXJlIGNvbXBp
bGVkIGludG8gdGhlCi0vLyBwcm90b2NvbCBjb21waWxlciBpdHNlbGYuICBTbywgaWYgdGhleSB3
ZXJlIGF1dG8tZ2VuZXJhdGVkLCB5b3UnZCBoYXZlIGEKLS8vIGNoaWNrZW4tYW5kLWVnZyBwcm9i
bGVtLgotLy8KLS8vIElmIHRoaXMgdGVzdCBmYWlscywgcnVuIHRoZSBzY3JpcHQKLS8vICJnZW5l
cmF0ZV9kZXNjcmlwdG9yX3Byb3RvLnNoIiBhbmQgYWRkCi0vLyBkZXNjcmlwdG9yLnBiLntoLGNj
fSB0byB5b3VyIGNoYW5nZWxpc3QuCi0KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvaW1wb3J0ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlf
c3RyZWFtX2ltcGwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RsX3V0aWwuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVz
dGluZy9maWxlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmlsZS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1
ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGNwcCB7Ci0KLW5hbWVzcGFjZSB7
Ci0KLWNsYXNzIE1vY2tFcnJvckNvbGxlY3RvciA6IHB1YmxpYyBNdWx0aUZpbGVFcnJvckNvbGxl
Y3RvciB7Ci0gcHVibGljOgotICBNb2NrRXJyb3JDb2xsZWN0b3IoKSB7fQotICB+TW9ja0Vycm9y
Q29sbGVjdG9yKCkge30KLQotICBzdHJpbmcgdGV4dF87Ci0KLSAgLy8gaW1wbGVtZW50cyBFcnJv
ckNvbGxlY3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9p
ZCBBZGRFcnJvcihjb25zdCBzdHJpbmcmIGZpbGVuYW1lLCBpbnQgbGluZSwgaW50IGNvbHVtbiwK
LSAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIG1lc3NhZ2UpIHsKLSAgICBzdHJpbmdzOjpT
dWJzdGl0dXRlQW5kQXBwZW5kKCZ0ZXh0XywgIiQwOiQxOiQyOiAkM1xuIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lLCBjb2x1bW4sIG1lc3NhZ2UpOwot
ICB9Ci19OwotCi1jbGFzcyBNb2NrR2VuZXJhdG9yQ29udGV4dCA6IHB1YmxpYyBHZW5lcmF0b3JD
b250ZXh0IHsKLSBwdWJsaWM6Ci0gIE1vY2tHZW5lcmF0b3JDb250ZXh0KCkge30KLSAgfk1vY2tH
ZW5lcmF0b3JDb250ZXh0KCkgewotICAgIFNUTERlbGV0ZVZhbHVlcygmZmlsZXNfKTsKLSAgfQot
Ci0gIHZvaWQgRXhwZWN0RmlsZU1hdGNoZXMoY29uc3Qgc3RyaW5nJiB2aXJ0dWFsX2ZpbGVuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcGh5c2ljYWxfZmlsZW5h
bWUpIHsKLSAgICBzdHJpbmcqIGV4cGVjdGVkX2NvbnRlbnRzID0gRmluZFB0ck9yTnVsbChmaWxl
c18sIHZpcnR1YWxfZmlsZW5hbWUpOwotICAgIEFTU0VSVF9UUlVFKGV4cGVjdGVkX2NvbnRlbnRz
ICE9IE5VTEwpCi0gICAgICA8PCAiR2VuZXJhdG9yIGZhaWxlZCB0byBnZW5lcmF0ZSBmaWxlOiAi
IDw8IHZpcnR1YWxfZmlsZW5hbWU7Ci0KLSAgICBzdHJpbmcgYWN0dWFsX2NvbnRlbnRzOwotICAg
IEdPT0dMRV9DSEVDS19PSygKLSAgICAgICAgRmlsZTo6R2V0Q29udGVudHMoVGVzdFNvdXJjZURp
cigpICsgIi8iICsgcGh5c2ljYWxfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICZhY3R1YWxfY29udGVudHMsIHRydWUpKTsKLSAgICBFWFBFQ1RfVFJVRShhY3R1YWxfY29udGVu
dHMgPT0gKmV4cGVjdGVkX2NvbnRlbnRzKQotICAgICAgPDwgcGh5c2ljYWxfZmlsZW5hbWUgPDwg
IiBuZWVkcyB0byBiZSByZWdlbmVyYXRlZC4gIFBsZWFzZSBydW4gIgotICAgICAgICAgImdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9yZWxlYXNlX2NvbXBpbGVyLnNoIGFuZCAiCi0gICAgICAgICAi
Z2VuZXJhdGVfZGVzY3JpcHRvcl9wcm90by5zaC4gVGhlbiBhZGQgdGhpcyBmaWxlICIKLSAgICAg
ICAgICJ0byB5b3VyIENMLiI7Ci0gIH0KLQotICAvLyBpbXBsZW1lbnRzIEdlbmVyYXRvckNvbnRl
eHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICB2aXJ0dWFsIGlv
OjpaZXJvQ29weU91dHB1dFN0cmVhbSogT3Blbihjb25zdCBzdHJpbmcmIGZpbGVuYW1lKSB7Ci0g
ICAgc3RyaW5nKiogbWFwX3Nsb3QgPSAmZmlsZXNfW2ZpbGVuYW1lXTsKLSAgICBkZWxldGUgKm1h
cF9zbG90OwotICAgICptYXBfc2xvdCA9IG5ldyBzdHJpbmc7Ci0KLSAgICByZXR1cm4gbmV3IGlv
OjpTdHJpbmdPdXRwdXRTdHJlYW0oKm1hcF9zbG90KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgbWFw
PHN0cmluZywgc3RyaW5nKj4gZmlsZXNfOwotfTsKLQotVEVTVChCb290c3RyYXBUZXN0LCBHZW5l
cmF0ZWREZXNjcmlwdG9yTWF0Y2hlcykgewotICBNb2NrRXJyb3JDb2xsZWN0b3IgZXJyb3JfY29s
bGVjdG9yOwotICBEaXNrU291cmNlVHJlZSBzb3VyY2VfdHJlZTsKLSAgc291cmNlX3RyZWUuTWFw
UGF0aCgiIiwgVGVzdFNvdXJjZURpcigpKTsKLSAgSW1wb3J0ZXIgaW1wb3J0ZXIoJnNvdXJjZV90
cmVlLCAmZXJyb3JfY29sbGVjdG9yKTsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIHByb3RvX2Zp
bGUgPQotICAgIGltcG9ydGVyLkltcG9ydCgiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJv
dG8iKTsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIHBsdWdpbl9wcm90b19maWxlID0KLSAgICBp
bXBvcnRlci5JbXBvcnQoImdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucHJvdG8iKTsK
LSAgRVhQRUNUX0VRKCIiLCBlcnJvcl9jb2xsZWN0b3IudGV4dF8pOwotICBBU1NFUlRfVFJVRShw
cm90b19maWxlICE9IE5VTEwpOwotICBBU1NFUlRfVFJVRShwbHVnaW5fcHJvdG9fZmlsZSAhPSBO
VUxMKTsKLQotICBDcHBHZW5lcmF0b3IgZ2VuZXJhdG9yOwotICBNb2NrR2VuZXJhdG9yQ29udGV4
dCBjb250ZXh0OwotICBzdHJpbmcgZXJyb3I7Ci0gIHN0cmluZyBwYXJhbWV0ZXIgPSAiZGxsZXhw
b3J0X2RlY2w9TElCUFJPVE9CVUZfRVhQT1JUIjsKLSAgQVNTRVJUX1RSVUUoZ2VuZXJhdG9yLkdl
bmVyYXRlKHByb3RvX2ZpbGUsIHBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZjb250ZXh0LCAmZXJyb3IpKTsKLSAgcGFyYW1ldGVyID0gImRsbGV4cG9ydF9kZWNs
PUxJQlBST1RPQ19FWFBPUlQiOwotICBBU1NFUlRfVFJVRShnZW5lcmF0b3IuR2VuZXJhdGUocGx1
Z2luX3Byb3RvX2ZpbGUsIHBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZjb250ZXh0LCAmZXJyb3IpKTsKLQotICBjb250ZXh0LkV4cGVjdEZpbGVNYXRjaGVzKCJn
b29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaCIpOwotICBjb250ZXh0LkV4cGVj
dEZpbGVNYXRjaGVzKCJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5jYyIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmNjIik7
Ci0gIGNvbnRleHQuRXhwZWN0RmlsZU1hdGNoZXMoImdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9w
bHVnaW4ucGIuaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9wbHVnaW4ucGIuaCIpOwotICBjb250ZXh0LkV4cGVjdEZpbGVNYXRjaGVzKCJn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLnBiLmNjIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wYi5jYyIpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UKLQotfSAgLy8gbmFtZXNwYWNlIGNwcAotfSAgLy8gbmFtZXNwYWNl
IGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29n
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW0u
Y2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9lbnVtLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODFjNTk4MjE2ZTdlZjBhOWNhYzBiYTlkNDdiY2FjNzIw
ZGM2MGIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW0uY2MKKysrIC9kZXYvbnVsbApA
QCAtMSwzMTkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8v
IEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBv
cmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwg
SmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8bWFwPgotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZW51bS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1
dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsKLQotbmFtZXNwYWNlIHsKLS8vIFRoZSBH
T09HTEVfQVJSQVlTSVpFIGNvbnN0YW50IGlzIHRoZSBtYXggZW51bSB2YWx1ZSBwbHVzIDEuIElm
IHRoZSBtYXggZW51bSB2YWx1ZQotLy8gaXMgOjpnb29nbGU6OnByb3RvYnVmOjpraW50MzJtYXgs
IEdPT0dMRV9BUlJBWVNJWkUgd2lsbCBvdmVyZmxvdy4gSW4gc3VjaCBjYXNlcyB3ZSBzaG91bGQg
b21pdCB0aGUKLS8vIGdlbmVyYXRpb24gb2YgdGhlIEdPT0dMRV9BUlJBWVNJWkUgY29uc3RhbnQu
Ci1ib29sIFNob3VsZEdlbmVyYXRlQXJyYXlTaXplKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBkZXNj
cmlwdG9yKSB7Ci0gIGludDMyIG1heF92YWx1ZSA9IGRlc2NyaXB0b3ItPnZhbHVlKDApLT5udW1i
ZXIoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT52YWx1ZV9jb3VudCgpOyBp
KyspIHsKLSAgICBpZiAoZGVzY3JpcHRvci0+dmFsdWUoaSktPm51bWJlcigpID4gbWF4X3ZhbHVl
KSB7Ci0gICAgICBtYXhfdmFsdWUgPSBkZXNjcmlwdG9yLT52YWx1ZShpKS0+bnVtYmVyKCk7Ci0g
ICAgfQotICB9Ci0gIHJldHVybiBtYXhfdmFsdWUgIT0gOjpnb29nbGU6OnByb3RvYnVmOjpraW50
MzJtYXg7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotRW51bUdlbmVyYXRvcjo6RW51bUdlbmVyYXRv
cihjb25zdCBFbnVtRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgOiBkZXNjcmlwdG9yXyhkZXNjcmlw
dG9yKSwKLSAgICBjbGFzc25hbWVfKENsYXNzTmFtZShkZXNjcmlwdG9yLCBmYWxzZSkpLAotICAg
IG9wdGlvbnNfKG9wdGlvbnMpLAotICAgIGdlbmVyYXRlX2FycmF5X3NpemVfKFNob3VsZEdlbmVy
YXRlQXJyYXlTaXplKGRlc2NyaXB0b3IpKSB7Ci19Ci0KLUVudW1HZW5lcmF0b3I6On5FbnVtR2Vu
ZXJhdG9yKCkge30KLQotdm9pZCBFbnVtR2VuZXJhdG9yOjpGaWxsRm9yd2FyZERlY2xhcmF0aW9u
KAotICAgIG1hcDxzdHJpbmcsIGNvbnN0IEVudW1EZXNjcmlwdG9yKj4qIGVudW1fbmFtZXMpIHsK
LSAgaWYgKCFvcHRpb25zXy5wcm90b19oKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gICgqZW51bV9u
YW1lcylbY2xhc3NuYW1lX10gPSBkZXNjcmlwdG9yXzsKLX0KLQotdm9pZCBFbnVtR2VuZXJhdG9y
OjpHZW5lcmF0ZURlZmluaXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgbWFwPHN0cmlu
Zywgc3RyaW5nPiB2YXJzOwotICB2YXJzWyJjbGFzc25hbWUiXSA9IGNsYXNzbmFtZV87Ci0gIHZh
cnNbInNob3J0X25hbWUiXSA9IGRlc2NyaXB0b3JfLT5uYW1lKCk7Ci0gIHZhcnNbImVudW1iYXNl
Il0gPSBjbGFzc25hbWVfICsgKG9wdGlvbnNfLnByb3RvX2ggPyAiIDogaW50IiA6ICIiKTsKLQot
ICBwcmludGVyLT5QcmludCh2YXJzLCAiZW51bSAkZW51bWJhc2UkIHtcbiIpOwotICBwcmludGVy
LT5Bbm5vdGF0ZSgiZW51bWJhc2UiLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPkluZGVudCgp
OwotCi0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIG1pbl92YWx1ZSA9IGRlc2NyaXB0b3Jf
LT52YWx1ZSgwKTsKLSAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogbWF4X3ZhbHVlID0gZGVz
Y3JpcHRvcl8tPnZhbHVlKDApOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8t
PnZhbHVlX2NvdW50KCk7IGkrKykgewotICAgIHZhcnNbIm5hbWUiXSA9IEVudW1WYWx1ZU5hbWUo
ZGVzY3JpcHRvcl8tPnZhbHVlKGkpKTsKLSAgICAvLyBJbiBDKyssIGFuIHZhbHVlIG9mIC0yMTQ3
NDgzNjQ4IGdldHMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5lZ2F0aXZlIG9mCi0gICAgLy8gMjE0NzQ4
MzY0OCwgYW5kIHNpbmNlIDIxNDc0ODM2NDggY2FuJ3QgZml0IGluIGFuIGludGVnZXIsIHRoaXMg
cHJvZHVjZXMgYQotICAgIC8vIGNvbXBpbGVyIHdhcm5pbmcuICBUaGlzIHdvcmtzIGFyb3VuZCB0
aGF0IGlzc3VlLgotICAgIHZhcnNbIm51bWJlciJdID0gSW50MzJUb1N0cmluZyhkZXNjcmlwdG9y
Xy0+dmFsdWUoaSktPm51bWJlcigpKTsKLSAgICB2YXJzWyJwcmVmaXgiXSA9IChkZXNjcmlwdG9y
Xy0+Y29udGFpbmluZ190eXBlKCkgPT0gTlVMTCkgPwotICAgICAgIiIgOiBjbGFzc25hbWVfICsg
Il8iOwotICAgIHZhcnNbImRlcHJlY2F0aW9uIl0gPSBkZXNjcmlwdG9yXy0+dmFsdWUoaSktPm9w
dGlvbnMoKS5kZXByZWNhdGVkKCkgPwotICAgICAgICAiIFBST1RPQlVGX0RFUFJFQ0FURUQiIDog
IiI7Ci0KLSAgICBpZiAoaSA+IDApIHByaW50ZXItPlByaW50KCIsXG4iKTsKLSAgICBwcmludGVy
LT5QcmludCh2YXJzLCAiJHByZWZpeCQkbmFtZSQkZGVwcmVjYXRpb24kID0gJG51bWJlciQiKTsK
LQotICAgIGlmIChkZXNjcmlwdG9yXy0+dmFsdWUoaSktPm51bWJlcigpIDwgbWluX3ZhbHVlLT5u
dW1iZXIoKSkgewotICAgICAgbWluX3ZhbHVlID0gZGVzY3JpcHRvcl8tPnZhbHVlKGkpOwotICAg
IH0KLSAgICBpZiAoZGVzY3JpcHRvcl8tPnZhbHVlKGkpLT5udW1iZXIoKSA+IG1heF92YWx1ZS0+
bnVtYmVyKCkpIHsKLSAgICAgIG1heF92YWx1ZSA9IGRlc2NyaXB0b3JfLT52YWx1ZShpKTsKLSAg
ICB9Ci0gIH0KLQotICBpZiAoSGFzUHJlc2VydmluZ1Vua25vd25FbnVtU2VtYW50aWNzKGRlc2Ny
aXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgLy8gRm9yIG5ldyBlbnVtIHNlbWFudGljczogZ2VuZXJh
dGUgbWluIGFuZCBtYXggc2VudGluZWwgdmFsdWVzIGVxdWFsIHRvCi0gICAgLy8gSU5UMzJfTUlO
IGFuZCBJTlQzMl9NQVgKLSAgICBpZiAoZGVzY3JpcHRvcl8tPnZhbHVlX2NvdW50KCkgPiAwKSBw
cmludGVyLT5QcmludCgiLFxuIik7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICAg
IiRjbGFzc25hbWUkXyRwcmVmaXgkSU5UX01JTl9TRU5USU5FTF9ET19OT1RfVVNFXyA9IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6a2ludDMybWluLFxuIgotICAgICAgICAiJGNsYXNzbmFtZSRfJHByZWZp
eCRJTlRfTUFYX1NFTlRJTkVMX0RPX05PVF9VU0VfID0gOjpnb29nbGU6OnByb3RvYnVmOjpraW50
MzJtYXgiKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQo
IlxufTtcbiIpOwotCi0gIHZhcnNbIm1pbl9uYW1lIl0gPSBFbnVtVmFsdWVOYW1lKG1pbl92YWx1
ZSk7Ci0gIHZhcnNbIm1heF9uYW1lIl0gPSBFbnVtVmFsdWVOYW1lKG1heF92YWx1ZSk7Ci0KLSAg
aWYgKG9wdGlvbnNfLmRsbGV4cG9ydF9kZWNsLmVtcHR5KCkpIHsKLSAgICB2YXJzWyJkbGxleHBv
cnQiXSA9ICIiOwotICB9IGVsc2UgewotICAgIHZhcnNbImRsbGV4cG9ydCJdID0gb3B0aW9uc18u
ZGxsZXhwb3J0X2RlY2wgKyAiICI7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCh2YXJzLAotICAg
ICIkZGxsZXhwb3J0JGJvb2wgJGNsYXNzbmFtZSRfSXNWYWxpZChpbnQgdmFsdWUpO1xuIgotICAg
ICJjb25zdCAkY2xhc3NuYW1lJCAkcHJlZml4JCRzaG9ydF9uYW1lJF9NSU4gPSAkcHJlZml4JCRt
aW5fbmFtZSQ7XG4iCi0gICAgImNvbnN0ICRjbGFzc25hbWUkICRwcmVmaXgkJHNob3J0X25hbWUk
X01BWCA9ICRwcmVmaXgkJG1heF9uYW1lJDtcbiIpOwotCi0gIGlmIChnZW5lcmF0ZV9hcnJheV9z
aXplXykgewotICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAiY29uc3QgaW50ICRwcmVm
aXgkJHNob3J0X25hbWUkX0FSUkFZU0laRSA9ICIKLSAgICAgICIkcHJlZml4JCRzaG9ydF9uYW1l
JF9NQVggKyAxO1xuXG4iKTsKLSAgfQotCi0gIGlmIChIYXNEZXNjcmlwdG9yTWV0aG9kcyhkZXNj
cmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLAot
ICAgICAgIiRkbGxleHBvcnQkY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRv
ciogJGNsYXNzbmFtZSRfZGVzY3JpcHRvcigpO1xuIik7Ci0gICAgLy8gVGhlIF9OYW1lIGFuZCBf
UGFyc2UgbWV0aG9kcwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICB2YXJzLAotICAgICAg
ICAiaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmICRjbGFzc25hbWUkX05hbWUoJGNsYXNzbmFt
ZSQgdmFsdWUpIHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6Ok5hbWVPZkVudW0oXG4iCi0gICAgICAgICIgICAgJGNsYXNzbmFtZSRfZGVzY3JpcHRv
cigpLCB2YWx1ZSk7XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJz
LAotICAgICAgImlubGluZSBib29sICRjbGFzc25hbWUkX1BhcnNlKFxuIgotICAgICAgIiAgICBj
b25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lLCAkY2xhc3NuYW1lJCogdmFsdWUpIHtcbiIKLSAgICAg
ICIgIHJldHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpQYXJzZU5hbWVkRW51bTwk
Y2xhc3NuYW1lJD4oXG4iCi0gICAgICAiICAgICRjbGFzc25hbWUkX2Rlc2NyaXB0b3IoKSwgbmFt
ZSwgdmFsdWUpO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgRW51bUdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZUdldEVudW1EZXNjcmlwdG9yU3BlY2lhbGl6YXRpb25zKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgInRlbXBsYXRlIDw+IHN0cnVj
dCBpc19wcm90b19lbnVtPCAkY2xhc3NuYW1lJD4gOiA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjp0cnVlX3R5cGUgIgotICAgICAgInt9O1xuIiwKLSAgICAgICJjbGFzc25hbWUiLCBDbGFz
c05hbWUoZGVzY3JpcHRvcl8sIHRydWUpKTsKLSAgaWYgKEhhc0Rlc2NyaXB0b3JNZXRob2RzKGRl
c2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAg
ICAgInRlbXBsYXRlIDw+XG4iCi0gICAgICAiaW5saW5lIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBH
ZXRFbnVtRGVzY3JpcHRvcjwgJGNsYXNzbmFtZSQ+KCkge1xuIgotICAgICAgIiAgcmV0dXJuICRj
bGFzc25hbWUkX2Rlc2NyaXB0b3IoKTtcbiIKLSAgICAgICJ9XG4iLAotICAgICAgImNsYXNzbmFt
ZSIsIENsYXNzTmFtZShkZXNjcmlwdG9yXywgdHJ1ZSkpOwotICB9Ci19Ci0KLXZvaWQgRW51bUdl
bmVyYXRvcjo6R2VuZXJhdGVTeW1ib2xJbXBvcnRzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0g
IG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgdmFyc1sibmVzdGVkX25hbWUiXSA9IGRlc2Ny
aXB0b3JfLT5uYW1lKCk7Ci0gIHZhcnNbImNsYXNzbmFtZSJdID0gY2xhc3NuYW1lXzsKLSAgdmFy
c1siY29uc3RleHByIl0gPSBvcHRpb25zXy5wcm90b19oID8gImNvbnN0ZXhwciAiIDogIiI7Ci0g
IHByaW50ZXItPlByaW50KHZhcnMsICJ0eXBlZGVmICRjbGFzc25hbWUkICRuZXN0ZWRfbmFtZSQ7
XG4iKTsKLQotICBmb3IgKGludCBqID0gMDsgaiA8IGRlc2NyaXB0b3JfLT52YWx1ZV9jb3VudCgp
OyBqKyspIHsKLSAgICB2YXJzWyJ0YWciXSA9IEVudW1WYWx1ZU5hbWUoZGVzY3JpcHRvcl8tPnZh
bHVlKGopKTsKLSAgICB2YXJzWyJkZXByZWNhdGVkX2F0dHIiXSA9IGRlc2NyaXB0b3JfLT52YWx1
ZShqKS0+b3B0aW9ucygpLmRlcHJlY2F0ZWQoKSA/Ci0gICAgICAiUFJPVE9CVUZfREVQUkVDQVRF
RF9BVFRSICIgOiAiIjsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgIiRkZXByZWNh
dGVkX2F0dHIkc3RhdGljICRjb25zdGV4cHIkY29uc3QgJG5lc3RlZF9uYW1lJCAkdGFnJCA9XG4i
Ci0gICAgICAiICAkY2xhc3NuYW1lJF8kdGFnJDtcbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJp
bnQodmFycywKLSAgICAic3RhdGljIGlubGluZSBib29sICRuZXN0ZWRfbmFtZSRfSXNWYWxpZChp
bnQgdmFsdWUpIHtcbiIKLSAgICAiICByZXR1cm4gJGNsYXNzbmFtZSRfSXNWYWxpZCh2YWx1ZSk7
XG4iCi0gICAgIn1cbiIKLSAgICAic3RhdGljIGNvbnN0ICRuZXN0ZWRfbmFtZSQgJG5lc3RlZF9u
YW1lJF9NSU4gPVxuIgotICAgICIgICRjbGFzc25hbWUkXyRuZXN0ZWRfbmFtZSRfTUlOO1xuIgot
ICAgICJzdGF0aWMgY29uc3QgJG5lc3RlZF9uYW1lJCAkbmVzdGVkX25hbWUkX01BWCA9XG4iCi0g
ICAgIiAgJGNsYXNzbmFtZSRfJG5lc3RlZF9uYW1lJF9NQVg7XG4iKTsKLSAgaWYgKGdlbmVyYXRl
X2FycmF5X3NpemVfKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICJzdGF0aWMg
Y29uc3QgaW50ICRuZXN0ZWRfbmFtZSRfQVJSQVlTSVpFID1cbiIKLSAgICAgICIgICRjbGFzc25h
bWUkXyRuZXN0ZWRfbmFtZSRfQVJSQVlTSVpFO1xuIik7Ci0gIH0KLQotICBpZiAoSGFzRGVzY3Jp
cHRvck1ldGhvZHMoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgcHJpbnRl
ci0+UHJpbnQodmFycywKLSAgICAgICJzdGF0aWMgaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RW51bURlc2NyaXB0b3IqXG4iCi0gICAgICAiJG5lc3RlZF9uYW1lJF9kZXNjcmlwdG9y
KCkge1xuIgotICAgICAgIiAgcmV0dXJuICRjbGFzc25hbWUkX2Rlc2NyaXB0b3IoKTtcbiIKLSAg
ICAgICJ9XG4iKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgICAgICAgICAgICAg
ICJzdGF0aWMgaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmICIKLSAgICAgICAgICAgICAgICAg
ICAiJG5lc3RlZF9uYW1lJF9OYW1lKCRuZXN0ZWRfbmFtZSQgdmFsdWUpIHsiCi0gICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICIgIHJldHVybiAkY2xhc3NuYW1lJF9O
YW1lKHZhbHVlKTtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxuIik7Ci0gICAgcHJpbnRlci0+
UHJpbnQodmFycywKLSAgICAgICJzdGF0aWMgaW5saW5lIGJvb2wgJG5lc3RlZF9uYW1lJF9QYXJz
ZShjb25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lLFxuIgotICAgICAgIiAgICAkbmVzdGVkX25hbWUk
KiB2YWx1ZSkge1xuIgotICAgICAgIiAgcmV0dXJuICRjbGFzc25hbWUkX1BhcnNlKG5hbWUsIHZh
bHVlKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotfQotCi12b2lkIEVudW1HZW5lcmF0b3I6Okdl
bmVyYXRlRGVzY3JpcHRvckluaXRpYWxpemVyKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLCBp
bnQgaW5kZXgpIHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICB2YXJzWyJjbGFzc25h
bWUiXSA9IGNsYXNzbmFtZV87Ci0gIHZhcnNbImluZGV4Il0gPSBTaW1wbGVJdG9hKGluZGV4KTsK
LQotICBpZiAoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlwZSgpID09IE5VTEwpIHsKLSAgICBw
cmludGVyLT5QcmludCh2YXJzLAotICAgICAgIiRjbGFzc25hbWUkX2Rlc2NyaXB0b3JfID0gZmls
ZS0+ZW51bV90eXBlKCRpbmRleCQpO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgdmFyc1sicGFyZW50
Il0gPSBDbGFzc05hbWUoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlwZSgpLCBmYWxzZSk7Ci0g
ICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICIkY2xhc3NuYW1lJF9kZXNjcmlwdG9yXyA9
ICRwYXJlbnQkX2Rlc2NyaXB0b3JfLT5lbnVtX3R5cGUoJGluZGV4JCk7XG4iKTsKLSAgfQotfQot
Ci12b2lkIEVudW1HZW5lcmF0b3I6OkdlbmVyYXRlTWV0aG9kcyhpbzo6UHJpbnRlciogcHJpbnRl
cikgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gIHZhcnNbImNsYXNzbmFtZSJdID0g
Y2xhc3NuYW1lXzsKLSAgdmFyc1siY29uc3RleHByIl0gPSBvcHRpb25zXy5wcm90b19oID8gImNv
bnN0ZXhwciAiIDogIiI7Ci0KLSAgaWYgKEhhc0Rlc2NyaXB0b3JNZXRob2RzKGRlc2NyaXB0b3Jf
LT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAi
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvciogJGNsYXNzbmFtZSRfZGVz
Y3JpcHRvcigpIHtcbiIKLSAgICAgICIgIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgp
O1xuIgotICAgICAgIiAgcmV0dXJuICRjbGFzc25hbWUkX2Rlc2NyaXB0b3JfO1xuIgotICAgICAg
In1cbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAiYm9vbCAkY2xhc3Nu
YW1lJF9Jc1ZhbGlkKGludCB2YWx1ZSkge1xuIgotICAgICIgIHN3aXRjaCh2YWx1ZSkge1xuIik7
Ci0KLSAgLy8gTXVsdGlwbGUgdmFsdWVzIG1heSBoYXZlIHRoZSBzYW1lIG51bWJlci4gIE1ha2Ug
c3VyZSB3ZSBvbmx5IGNvdmVyCi0gIC8vIGVhY2ggbnVtYmVyIG9uY2UgYnkgZmlyc3QgY29uc3Ry
dWN0aW5nIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHZhbGlkCi0gIC8vIG51bWJlcnMsIHRoZW4gcHJp
bnRpbmcgYSBjYXNlIHN0YXRlbWVudCBmb3IgZWFjaCBlbGVtZW50LgotCi0gIHNldDxpbnQ+IG51
bWJlcnM7Ci0gIGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3JpcHRvcl8tPnZhbHVlX2NvdW50KCk7
IGorKykgewotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIHZhbHVlID0gZGVzY3JpcHRv
cl8tPnZhbHVlKGopOwotICAgIG51bWJlcnMuaW5zZXJ0KHZhbHVlLT5udW1iZXIoKSk7Ci0gIH0K
LQotICBmb3IgKHNldDxpbnQ+OjppdGVyYXRvciBpdGVyID0gbnVtYmVycy5iZWdpbigpOwotICAg
ICAgIGl0ZXIgIT0gbnVtYmVycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAiICAgIGNhc2UgJG51bWJlciQ6XG4iLAotICAgICAgIm51bWJlciIsIEludDMyVG9T
dHJpbmcoKml0ZXIpKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgIiAgICAg
IHJldHVybiB0cnVlO1xuIgotICAgICIgICAgZGVmYXVsdDpcbiIKLSAgICAiICAgICAgcmV0dXJu
IGZhbHNlO1xuIgotICAgICIgIH1cbiIKLSAgICAifVxuIgotICAgICJcbiIpOwotCi0gIGlmIChk
ZXNjcmlwdG9yXy0+Y29udGFpbmluZ190eXBlKCkgIT0gTlVMTCkgewotICAgIC8vIFdlIG5lZWQg
dG8gImRlZmluZSIgdGhlIHN0YXRpYyBjb25zdGFudHMgd2hpY2ggd2VyZSBkZWNsYXJlZCBpbiB0
aGUKLSAgICAvLyBoZWFkZXIsIHRvIGdpdmUgdGhlIGxpbmtlciBhIHBsYWNlIHRvIHB1dCB0aGVt
LiAgT3IgYXQgbGVhc3QgdGhlIEMrKwotICAgIC8vIHN0YW5kYXJkIHNheXMgd2UgaGF2ZSB0by4g
IE1TVkMgYWN0dWFsbHkgaW5zaXN0cyB0aGF0IHdlIGRvIF9ub3RfIGRlZmluZQotICAgIC8vIHRo
ZW0gYWdhaW4gaW4gdGhlIC5jYyBmaWxlLCBwcmlvciB0byBWQysrIDIwMTUuCi0gICAgcHJpbnRl
ci0+UHJpbnQoIiNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMFxuIik7
Ci0KLSAgICB2YXJzWyJwYXJlbnQiXSA9IENsYXNzTmFtZShkZXNjcmlwdG9yXy0+Y29udGFpbmlu
Z190eXBlKCksIGZhbHNlKTsKLSAgICB2YXJzWyJuZXN0ZWRfbmFtZSJdID0gZGVzY3JpcHRvcl8t
Pm5hbWUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT52YWx1ZV9jb3Vu
dCgpOyBpKyspIHsKLSAgICAgIHZhcnNbInZhbHVlIl0gPSBFbnVtVmFsdWVOYW1lKGRlc2NyaXB0
b3JfLT52YWx1ZShpKSk7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgICAiJGNv
bnN0ZXhwciRjb25zdCAkY2xhc3NuYW1lJCAkcGFyZW50JDo6JHZhbHVlJDtcbiIpOwotICAgIH0K
LSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgImNvbnN0ICRjbGFzc25hbWUkICRwYXJl
bnQkOjokbmVzdGVkX25hbWUkX01JTjtcbiIKLSAgICAgICJjb25zdCAkY2xhc3NuYW1lJCAkcGFy
ZW50JDo6JG5lc3RlZF9uYW1lJF9NQVg7XG4iKTsKLSAgICBpZiAoZ2VuZXJhdGVfYXJyYXlfc2l6
ZV8pIHsKLSAgICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAgICJjb25zdCBpbnQgJHBh
cmVudCQ6OiRuZXN0ZWRfbmFtZSRfQVJSQVlTSVpFO1xuIik7Ci0gICAgfQotCi0gICAgcHJpbnRl
ci0+UHJpbnQoIiNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5
MDBcbiIpOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBj
b21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9lbnVtLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9lbnVtLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDkwZWRmMDAxN2Q1NWViMjYzN2I3ZjM1NjZjNThlOGNjM2I5Y2Jl
MTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZW51bS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTExICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRo
b3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2lu
YWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYg
RGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1BQ
X0VOVU1fSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DUFBfRU5VTV9IX18K
LQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX29wdGlvbnMuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0gIG5hbWVzcGFjZSBpbyB7Ci0gICAgY2xhc3MgUHJpbnRl
cjsgICAgICAgICAgICAgLy8gcHJpbnRlci5oCi0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsKLQotY2xhc3MgRW51bUdl
bmVyYXRvciB7Ci0gcHVibGljOgotICAvLyBTZWUgZ2VuZXJhdG9yLmNjIGZvciB0aGUgbWVhbmlu
ZyBvZiBkbGxleHBvcnRfZGVjbC4KLSAgRW51bUdlbmVyYXRvcihjb25zdCBFbnVtRGVzY3JpcHRv
ciogZGVzY3JpcHRvciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0gIH5FbnVtR2VuZXJhdG9y
KCk7Ci0KLSAgLy8gSGVhZGVyIHN0dWZmLgotCi0gIC8vIEZpbGxzIHRoZSBuYW1lIHRvIHVzZSB3
aGVuIGRlY2xhcmluZyB0aGUgZW51bS4gVGhpcyBpcyBmb3IgdXNlIHdoZW4KLSAgLy8gZ2VuZXJh
dGluZyBvdGhlciAucHJvdG8uaCBmaWxlcy4gVGhpcyBjb2RlIHNob3VsZCBiZSBwbGFjZWQgd2l0
aGluIHRoZQotICAvLyBlbnVtJ3MgcGFja2FnZSBuYW1lc3BhY2UsIGJ1dCBOT1Qgd2l0aGluIGFu
eSBjbGFzcywgZXZlbiBmb3IgbmVzdGVkCi0gIC8vIGVudW1zLiBBIGdpdmVuIGtleSBpbiBlbnVt
X25hbWVzIHdpbGwgbWFwIGZyb20gYW4gZW51bSBjbGFzcyBuYW1lIHRvIHRoZQotICAvLyBFbnVt
RGVzY3JpcHRvciB0aGF0IHdhcyByZXNwb25zaWJsZSBmb3IgaXRzIGluY2x1c2lvbiBpbiB0aGUg
bWFwLiBUaGlzIGNhbgotICAvLyBiZSB1c2VkIHRvIGFzc29jaWF0ZSB0aGUgZGVzY3JpcHRvciB3
aXRoIHRoZSBjb2RlIGdlbmVyYXRlZCBmb3IgaXQuCi0gIHZvaWQgRmlsbEZvcndhcmREZWNsYXJh
dGlvbihtYXA8c3RyaW5nLCBjb25zdCBFbnVtRGVzY3JpcHRvcio+KiBlbnVtX25hbWVzKTsKLQot
ICAvLyBHZW5lcmF0ZSBoZWFkZXIgY29kZSBkZWZpbmluZyB0aGUgZW51bS4gIFRoaXMgY29kZSBz
aG91bGQgYmUgcGxhY2VkCi0gIC8vIHdpdGhpbiB0aGUgZW51bSdzIHBhY2thZ2UgbmFtZXNwYWNl
LCBidXQgTk9UIHdpdGhpbiBhbnkgY2xhc3MsIGV2ZW4gZm9yCi0gIC8vIG5lc3RlZCBlbnVtcy4K
LSAgdm9pZCBHZW5lcmF0ZURlZmluaXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIC8v
IEdlbmVyYXRlIHNwZWNpYWxpemF0aW9uIG9mIEdldEVudW1EZXNjcmlwdG9yPE15RW51bT4oKS4K
LSAgLy8gUHJlY29uZGl0aW9uOiBpbiA6Omdvb2dsZTo6cHJvdG9idWYgbmFtZXNwYWNlLgotICB2
b2lkIEdlbmVyYXRlR2V0RW51bURlc2NyaXB0b3JTcGVjaWFsaXphdGlvbnMoaW86OlByaW50ZXIq
IHByaW50ZXIpOwotCi0gIC8vIEZvciBlbnVtcyBuZXN0ZWQgd2l0aGluIGEgbWVzc2FnZSwgZ2Vu
ZXJhdGUgY29kZSB0byBpbXBvcnQgYWxsIHRoZSBlbnVtJ3MKLSAgLy8gc3ltYm9scyAoZS5nLiB0
aGUgZW51bSB0eXBlIG5hbWUsIGFsbCBpdHMgdmFsdWVzLCBldGMuKSBpbnRvIHRoZSBjbGFzcydz
Ci0gIC8vIG5hbWVzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIHBsYWNlZCBpbnNpZGUgdGhlIGNsYXNz
IGRlZmluaXRpb24gaW4gdGhlCi0gIC8vIGhlYWRlci4KLSAgdm9pZCBHZW5lcmF0ZVN5bWJvbElt
cG9ydHMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIC8vIFNvdXJjZSBmaWxlIHN0dWZmLgot
Ci0gIC8vIEdlbmVyYXRlIGNvZGUgdGhhdCBpbml0aWFsaXplcyB0aGUgZ2xvYmFsIHZhcmlhYmxl
IHN0b3JpbmcgdGhlIGVudW0ncwotICAvLyBkZXNjcmlwdG9yLgotICB2b2lkIEdlbmVyYXRlRGVz
Y3JpcHRvckluaXRpYWxpemVyKGlvOjpQcmludGVyKiBwcmludGVyLCBpbnQgaW5kZXgpOwotCi0g
IC8vIEdlbmVyYXRlIG5vbi1pbmxpbmUgbWV0aG9kcyByZWxhdGVkIHRvIHRoZSBlbnVtLCBzdWNo
IGFzIElzVmFsaWRWYWx1ZSgpLgotICAvLyBHb2VzIGluIHRoZSAuY2MgZmlsZS4KLSAgdm9pZCBH
ZW5lcmF0ZU1ldGhvZHMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gcHJpdmF0ZToKLSAgY29u
c3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBjb25zdCBzdHJpbmcgY2xhc3NuYW1l
XzsKLSAgY29uc3QgT3B0aW9ucyYgb3B0aW9uc187Ci0gIC8vIHdoZXRoZXIgdG8gZ2VuZXJhdGUg
dGhlICpfQVJSQVlTSVpFIGNvbnN0YW50LgotICBjb25zdCBib29sIGdlbmVyYXRlX2FycmF5X3Np
emVfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhFbnVtR2VuZXJhdG9y
KTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRp
ZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9FTlVNX0hfXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZW51bV9maWVsZC5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW1fZmllbGQuY2MKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDEwMjUyYjM5MmFjNTcwOTA2NDBiMGI0ZjlmZTBiZDc2NWU0ZTgw
MTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZW51bV9maWVsZC5jYworKysgL2Rldi9udWxs
CkBAIC0xLDUwNyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wt
YnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ly8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9u
IG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0
LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvY3BwL2NwcF9lbnVtX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2NwcC9jcHBfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9w
cmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLQotbmFtZXNwYWNlIGdvb2ds
ZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFj
ZSBjcHAgewotCi1uYW1lc3BhY2UgewotCi12b2lkIFNldEVudW1WYXJpYWJsZXMoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJp
bmcsIHN0cmluZz4qIHZhcmlhYmxlcywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRp
b25zJiBvcHRpb25zKSB7Ci0gIFNldENvbW1vbkZpZWxkVmFyaWFibGVzKGRlc2NyaXB0b3IsIHZh
cmlhYmxlcywgb3B0aW9ucyk7Ci0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGRlZmF1bHRf
dmFsdWUgPSBkZXNjcmlwdG9yLT5kZWZhdWx0X3ZhbHVlX2VudW0oKTsKLSAgKCp2YXJpYWJsZXMp
WyJ0eXBlIl0gPSBDbGFzc05hbWUoZGVzY3JpcHRvci0+ZW51bV90eXBlKCksIHRydWUpOwotICAo
KnZhcmlhYmxlcylbImRlZmF1bHQiXSA9IEludDMyVG9TdHJpbmcoZGVmYXVsdF92YWx1ZS0+bnVt
YmVyKCkpOwotICAoKnZhcmlhYmxlcylbImZ1bGxfbmFtZSJdID0gZGVzY3JpcHRvci0+ZnVsbF9u
YW1lKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUVudW1GaWVs
ZEdlbmVyYXRvcjo6RW51bUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVz
Y3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9w
dGlvbnMmIG9wdGlvbnMpCi0gICAgOiBGaWVsZEdlbmVyYXRvcihvcHRpb25zKSwgZGVzY3JpcHRv
cl8oZGVzY3JpcHRvcikgewotICBTZXRFbnVtVmFyaWFibGVzKGRlc2NyaXB0b3IsICZ2YXJpYWJs
ZXNfLCBvcHRpb25zKTsKLX0KLQotRW51bUZpZWxkR2VuZXJhdG9yOjp+RW51bUZpZWxkR2VuZXJh
dG9yKCkge30KLQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVQcml2YXRlTWVt
YmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLCAiaW50ICRuYW1lJF87XG4iKTsKLX0KLQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRlZF9hdHRy
JCR0eXBlJCAkbmFtZSQoKSBjb25zdDtcbiIKLSAgICAiJGRlcHJlY2F0ZWRfYXR0ciR2b2lkIHNl
dF8kbmFtZSQoJHR5cGUkIHZhbHVlKTtcbiIpOwotfQotCi12b2lkIEVudW1GaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZUlubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19pbmxpbmUpIGNv
bnN0IHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXModmFyaWFibGVzXyk7Ci0gIHZh
cmlhYmxlc1siaW5saW5lIl0gPSBpc19pbmxpbmUgPyAiaW5saW5lIiA6ICIiOwotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXMsCi0gICAgIiRpbmxpbmUkICR0eXBlJCAkY2xhc3NuYW1lJDo6JG5h
bWUkKCkgY29uc3Qge1xuIgotICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9nZXQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgIiAgcmV0dXJuIHN0YXRpY19jYXN0PCAkdHlwZSQg
PigkbmFtZSRfKTtcbiIKLSAgICAifVxuIgotICAgICIkaW5saW5lJCB2b2lkICRjbGFzc25hbWUk
OjpzZXRfJG5hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIik7Ci0gIGlmICghSGFzUHJlc2VydmluZ1Vu
a25vd25FbnVtU2VtYW50aWNzKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzLAotICAgICIgIGFzc2VydCgkdHlwZSRfSXNWYWxpZCh2YWx1ZSkpO1xu
Iik7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICIgICRzZXRfaGFzYml0
JFxuIgotICAgICIgICRuYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAiICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0OiRmdWxsX25hbWUkKVxuIgotICAgICJ9XG4iKTsKLX0KLQot
dm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVDbGVhcmluZ0NvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgIiRuYW1l
JF8gPSAkZGVmYXVsdCQ7XG4iKTsKLX0KLQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLCAic2V0XyRuYW1lJChmcm9tLiRuYW1lJCgpKTtcbiIpOwotfQot
Ci12b2lkIEVudW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVN3YXBwaW5nQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAic3Rk
Ojpzd2FwKCRuYW1lJF8sIG90aGVyLT4kbmFtZSRfKTtcbiIpOwotfQotCi12b2lkIEVudW1GaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNvbnN0cnVjdG9yQ29kZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiJG5hbWUkXyA9ICRkZWZh
dWx0JDtcbiIpOwotfQotCi12b2lkIEVudW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdl
RnJvbUNvZGVkU3RyZWFtKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgImludCB2YWx1ZTtcbiIKLSAgICAiRE9fKCg6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTxcbiIK
LSAgICAiICAgICAgICAgaW50LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6VFlQRV9FTlVNPihcbiIKLSAgICAiICAgICAgIGlucHV0LCAmdmFsdWUpKSk7XG4i
KTsKLSAgaWYgKEhhc1ByZXNlcnZpbmdVbmtub3duRW51bVNlbWFudGljcyhkZXNjcmlwdG9yXy0+
ZmlsZSgpKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAic2V0XyRu
YW1lJChzdGF0aWNfY2FzdDwgJHR5cGUkID4odmFsdWUpKTtcbiIpOwotICB9IGVsc2UgewotICAg
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaWYgKCR0eXBlJF9Jc1ZhbGlkKHZh
bHVlKSkge1xuIgotICAgICAgIiAgc2V0XyRuYW1lJChzdGF0aWNfY2FzdDwgJHR5cGUkID4odmFs
dWUpKTtcbiIpOwotICAgIGlmIChVc2VVbmtub3duRmllbGRTZXQoZGVzY3JpcHRvcl8tPmZpbGUo
KSwgb3B0aW9uc18pKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
ICAifSBlbHNlIHtcbiIKLSAgICAgICAgIiAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5BZGRW
YXJpbnQoJG51bWJlciQsIHZhbHVlKTtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICAgIn0gZWxzZSB7XG4iCi0gICAgICAgICIgIHVua25vd25fZmllbGRz
X3N0cmVhbS5Xcml0ZVZhcmludDMyKCR0YWckKTtcbiIKLSAgICAgICAgIiAgdW5rbm93bl9maWVs
ZHNfc3RyZWFtLldyaXRlVmFyaW50MzIodmFsdWUpO1xuIiwKLSAgICAgICAgInRhZyIsIFNpbXBs
ZUl0b2EoaW50ZXJuYWw6OldpcmVGb3JtYXQ6Ok1ha2VUYWcoZGVzY3JpcHRvcl8pKSk7Ci0gICAg
fQotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAifVxuIik7Ci0gIH0KLX0K
LQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVk
U2l6ZXMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OldyaXRlRW51bShcbiIKLSAgICAiICAkbnVtYmVyJCwgdGhpcy0+JG5hbWUkKCksIG91dHB1
dCk7XG4iKTsKLX0KLQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxp
emVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInRhcmdldCA9IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUVudW1Ub0FycmF5KFxuIgotICAg
ICIgICRudW1iZXIkLCB0aGlzLT4kbmFtZSQoKSwgdGFyZ2V0KTtcbiIpOwotfQotCi12b2lkIEVu
dW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ5dGVTaXplKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInRvdGFsX3NpemUg
Kz0gJHRhZ19zaXplJCArXG4iCi0gICAgIiAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OkVudW1TaXplKHRoaXMtPiRuYW1lJCgpKTtcbiIpOwotfQotCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KLUVudW1PbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUVudW1PbmVvZkZpZWxkR2Vu
ZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCi0gIDogRW51bUZpZWxkR2VuZXJhdG9y
KGRlc2NyaXB0b3IsIG9wdGlvbnMpIHsKLSAgU2V0Q29tbW9uT25lb2ZGaWVsZFZhcmlhYmxlcyhk
ZXNjcmlwdG9yLCAmdmFyaWFibGVzXyk7Ci19Ci0KLUVudW1PbmVvZkZpZWxkR2VuZXJhdG9yOjp+
RW51bU9uZW9mRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIEVudW1PbmVvZkZpZWxkR2VuZXJh
dG9yOjoKLUdlbmVyYXRlSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6UHJpbnRlciogcHJp
bnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2lubGluZSkg
Y29uc3QgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlcyh2YXJpYWJsZXNfKTsKLSAg
dmFyaWFibGVzWyJpbmxpbmUiXSA9IGlzX2lubGluZSA/ICJpbmxpbmUiIDogIiI7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlcywKLSAgICAiJGlubGluZSQgJHR5cGUkICRjbGFzc25hbWUkOjok
bmFtZSQoKSBjb25zdCB7XG4iCi0gICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2dldDokZnVsbF9uYW1lJClcbiIKLSAgICAiICBpZiAoaGFzXyRuYW1lJCgpKSB7XG4iCi0g
ICAgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ICR0eXBlJCA+KCRvbmVvZl9wcmVmaXgkJG5hbWUk
Xyk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgIHJldHVybiBzdGF0aWNfY2FzdDwgJHR5cGUkID4o
JGRlZmF1bHQkKTtcbiIKLSAgICAifVxuIgotICAgICIkaW5saW5lJCB2b2lkICRjbGFzc25hbWUk
OjpzZXRfJG5hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIik7Ci0gIGlmICghSGFzUHJlc2VydmluZ1Vu
a25vd25FbnVtU2VtYW50aWNzKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzLAotICAgICIgIGFzc2VydCgkdHlwZSRfSXNWYWxpZCh2YWx1ZSkpO1xu
Iik7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICIgIGlmICghaGFzXyRu
YW1lJCgpKSB7XG4iCi0gICAgIiAgICBjbGVhcl8kb25lb2ZfbmFtZSQoKTtcbiIKLSAgICAiICAg
IHNldF9oYXNfJG5hbWUkKCk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgICRvbmVvZl9wcmVmaXgk
JG5hbWUkXyA9IHZhbHVlO1xuIgotICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEVudW1PbmVv
ZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ2xlYXJpbmdDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICIkb25lb2ZfcHJlZml4
JCRuYW1lJF8gPSAkZGVmYXVsdCQ7XG4iKTsKLX0KLQotdm9pZCBFbnVtT25lb2ZGaWVsZEdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZVN3YXBwaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
ewotICAvLyBEb24ndCBwcmludCBhbnkgc3dhcHBpbmcgY29kZS4gU3dhcHBpbmcgdGhlIHVuaW9u
IHdpbGwgc3dhcCB0aGlzIGZpZWxkLgotfQotCi12b2lkIEVudW1PbmVvZkZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlQ29uc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiAgJGNsYXNzbmFtZSRfZGVmYXVs
dF9vbmVvZl9pbnN0YW5jZV8tPiRuYW1lJF8gPSAkZGVmYXVsdCQ7XG4iKTsKLX0KLQotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi1SZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcjo6UmVwZWF0ZWRFbnVtRmllbGRH
ZW5lcmF0b3IoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBP
cHRpb25zJiBvcHRpb25zKQotICAgIDogRmllbGRHZW5lcmF0b3Iob3B0aW9ucyksIGRlc2NyaXB0
b3JfKGRlc2NyaXB0b3IpIHsKLSAgU2V0RW51bVZhcmlhYmxlcyhkZXNjcmlwdG9yLCAmdmFyaWFi
bGVzXywgb3B0aW9ucyk7Ci19Ci0KLVJlcGVhdGVkRW51bUZpZWxkR2VuZXJhdG9yOjp+UmVwZWF0
ZWRFbnVtRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIFJlcGVhdGVkRW51bUZpZWxkR2VuZXJh
dG9yOjoKLUdlbmVyYXRlUHJpdmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiOjpnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZEZpZWxkPGludD4gJG5hbWUkXztcbiIpOwotICBpZiAoZGVzY3JpcHRvcl8tPmlz
X3BhY2tlZCgpICYmCi0gICAgICBIYXNHZW5lcmF0ZWRNZXRob2RzKGRlc2NyaXB0b3JfLT5maWxl
KCksIG9wdGlvbnNfKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAi
bXV0YWJsZSBpbnQgXyRuYW1lJF9jYWNoZWRfYnl0ZV9zaXplXztcbiIpOwotICB9Ci19Ci0KLXZv
aWQgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVBY2Nlc3NvckRlY2xhcmF0
aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICIkZGVwcmVjYXRlZF9hdHRyJCR0eXBlJCAkbmFtZSQoaW50IGluZGV4KSBj
b25zdDtcbiIKLSAgICAiJGRlcHJlY2F0ZWRfYXR0ciR2b2lkIHNldF8kbmFtZSQoaW50IGluZGV4
LCAkdHlwZSQgdmFsdWUpO1xuIgotICAgICIkZGVwcmVjYXRlZF9hdHRyJHZvaWQgYWRkXyRuYW1l
JCgkdHlwZSQgdmFsdWUpO1xuIik7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
IiRkZXByZWNhdGVkX2F0dHIkY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZEZpZWxk
PGludD4mICRuYW1lJCgpIGNvbnN0O1xuIgotICAgICIkZGVwcmVjYXRlZF9hdHRyJDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZDxpbnQ+KiBtdXRhYmxlXyRuYW1lJCgpO1xuIik7Ci19
Ci0KLXZvaWQgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJbmxpbmVBY2Nl
c3NvckRlZmluaXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNfaW5saW5lKSBjb25zdCB7Ci0gIG1hcDxzdHJpbmcsIHN0
cmluZz4gdmFyaWFibGVzKHZhcmlhYmxlc18pOwotICB2YXJpYWJsZXNbImlubGluZSJdID0gaXNf
aW5saW5lID8gImlubGluZSIgOiAiIjsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAg
ICIkaW5saW5lJCAkdHlwZSQgJGNsYXNzbmFtZSQ6OiRuYW1lJChpbnQgaW5kZXgpIGNvbnN0IHtc
biIKLSAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0OiRmdWxsX25h
bWUkKVxuIgotICAgICIgIHJldHVybiBzdGF0aWNfY2FzdDwgJHR5cGUkID4oJG5hbWUkXy5HZXQo
aW5kZXgpKTtcbiIKLSAgICAifVxuIgotICAgICIkaW5saW5lJCB2b2lkICRjbGFzc25hbWUkOjpz
ZXRfJG5hbWUkKGludCBpbmRleCwgJHR5cGUkIHZhbHVlKSB7XG4iKTsKLSAgaWYgKCFIYXNQcmVz
ZXJ2aW5nVW5rbm93bkVudW1TZW1hbnRpY3MoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgIiAgYXNzZXJ0KCR0eXBlJF9Jc1ZhbGlkKHZh
bHVlKSk7XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgIiAgJG5h
bWUkXy5TZXQoaW5kZXgsIHZhbHVlKTtcbiIKLSAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0OiRmdWxsX25hbWUkKVxuIgotICAgICJ9XG4iCi0gICAgIiRpbmxpbmUk
IHZvaWQgJGNsYXNzbmFtZSQ6OmFkZF8kbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4iKTsKLSAgaWYg
KCFIYXNQcmVzZXJ2aW5nVW5rbm93bkVudW1TZW1hbnRpY3MoZGVzY3JpcHRvcl8tPmZpbGUoKSkp
IHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgIiAgYXNzZXJ0KCR0eXBlJF9J
c1ZhbGlkKHZhbHVlKSk7XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0g
ICAgIiAgJG5hbWUkXy5BZGQodmFsdWUpO1xuIgotICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9hZGQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgIn1cbiIpOwotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXMsCi0gICAgIiRpbmxpbmUkIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6UmVwZWF0ZWRGaWVsZDxpbnQ+JlxuIgotICAgICIkY2xhc3NuYW1lJDo6JG5hbWUkKCkgY29u
c3Qge1xuIgotICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0OiRm
dWxsX25hbWUkKVxuIgotICAgICIgIHJldHVybiAkbmFtZSRfO1xuIgotICAgICJ9XG4iCi0gICAg
IiRpbmxpbmUkIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZDxpbnQ+KlxuIgotICAg
ICIkY2xhc3NuYW1lJDo6bXV0YWJsZV8kbmFtZSQoKSB7XG4iCi0gICAgIiAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDokZnVsbF9uYW1lJClcbiIKLSAgICAi
ICByZXR1cm4gJiRuYW1lJF87XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkRW51
bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ2xlYXJpbmdDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICIkbmFtZSRfLkNsZWFy
KCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sICIkbmFtZSRfLk1lcmdlRnJvbShmcm9tLiRuYW1lJF8pO1xuIik7Ci19
Ci0KLXZvaWQgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTd2FwcGluZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywgIiRuYW1lJF8uVW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+JG5hbWUkXyk7XG4iKTsKLX0K
LQotdm9pZCBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNvbnN0cnVjdG9y
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBOb3QgbmVlZGVkIGZvciBy
ZXBlYXRlZCBmaWVsZHMuCi19Ci0KLXZvaWQgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVNZXJnZUZyb21Db2RlZFN0cmVhbShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
ewotICAvLyBEb24ndCB1c2UgUmVhZFJlcGVhdGVkUHJpbWl0aXZlIGhlcmUgc28gdGhhdCB0aGUg
ZW51bSBjYW4gYmUgdmFsaWRhdGVkLgotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICJpbnQgdmFsdWU7XG4iCi0gICAgIkRPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8XG4iCi0gICAgIiAgICAgICAgIGludCwgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfRU5VTT4oXG4i
Ci0gICAgIiAgICAgICBpbnB1dCwgJnZhbHVlKSkpO1xuIik7Ci0gIGlmIChIYXNQcmVzZXJ2aW5n
VW5rbm93bkVudW1TZW1hbnRpY3MoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImFkZF8kbmFtZSQoc3RhdGljX2Nhc3Q8ICR0eXBl
JCA+KHZhbHVlKSk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICAgImlmICgkdHlwZSRfSXNWYWxpZCh2YWx1ZSkpIHtcbiIKLSAgICAgICIgIGFk
ZF8kbmFtZSQoc3RhdGljX2Nhc3Q8ICR0eXBlJCA+KHZhbHVlKSk7XG4iKTsKLSAgICBpZiAoVXNl
VW5rbm93bkZpZWxkU2V0KGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgICAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIn0gZWxzZSB7XG4iCi0gICAgICAg
ICIgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+QWRkVmFyaW50KCRudW1iZXIkLCB2YWx1ZSk7
XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJ9IGVs
c2Uge1xuIgotICAgICAgICAiICB1bmtub3duX2ZpZWxkc19zdHJlYW0uV3JpdGVWYXJpbnQzMih0
YWcpO1xuIgotICAgICAgICAiICB1bmtub3duX2ZpZWxkc19zdHJlYW0uV3JpdGVWYXJpbnQzMih2
YWx1ZSk7XG4iKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotICB9Ci19Ci0K
LXZvaWQgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZXJnZUZyb21Db2Rl
ZFN0cmVhbVdpdGhQYWNraW5nKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmICgh
ZGVzY3JpcHRvcl8tPmlzX3BhY2tlZCgpKSB7Ci0gICAgICAvLyBUaGlzIHBhdGggaXMgcmFyZWx5
IGV4ZWN1dGVkLCBzbyB3ZSB1c2UgYSBub24taW5saW5lZCBpbXBsZW1lbnRhdGlvbi4KLSAgICBp
ZiAoSGFzUHJlc2VydmluZ1Vua25vd25FbnVtU2VtYW50aWNzKGRlc2NyaXB0b3JfLT5maWxlKCkp
KSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiRE9fKCg6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjoiCi0gICAgICAgICAgICAgICAgICAgICJXaXJlRm9y
bWF0TGl0ZTo6UmVhZFBhY2tlZEVudW1QcmVzZXJ2ZVVua25vd25zKFxuIgotICAgICAgICAiICAg
ICAgIGlucHV0LFxuIgotICAgICAgICAiICAgICAgICRudW1iZXIkLFxuIgotICAgICAgICAiICAg
ICAgIE5VTEwsXG4iCi0gICAgICAgICIgICAgICAgTlVMTCxcbiIKLSAgICAgICAgIiAgICAgICB0
aGlzLT5tdXRhYmxlXyRuYW1lJCgpKSkpO1xuIik7Ci0gICAgfSBlbHNlIGlmIChVc2VVbmtub3du
RmllbGRTZXQoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpSZWFkUGFja2VkRW51bVByZXNlcnZlVW5rbm93bnMoXG4iCi0g
ICAgICAgICIgICAgICAgaW5wdXQsXG4iCi0gICAgICAgICIgICAgICAgJG51bWJlciQsXG4iCi0g
ICAgICAgICIgICAgICAgJHR5cGUkX0lzVmFsaWQsXG4iCi0gICAgICAgICIgICAgICAgbXV0YWJs
ZV91bmtub3duX2ZpZWxkcygpLFxuIgotICAgICAgICAiICAgICAgIHRoaXMtPm11dGFibGVfJG5h
bWUkKCkpKSk7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAgICAgIkRPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6IgotICAg
ICAgICAgICAgICAgICAgICAgIldpcmVGb3JtYXRMaXRlOjpSZWFkUGFja2VkRW51bVByZXNlcnZl
VW5rbm93bnMoXG4iCi0gICAgICAgICIgICAgICAgaW5wdXQsXG4iCi0gICAgICAgICIgICAgICAg
JG51bWJlciQsXG4iCi0gICAgICAgICIgICAgICAgJHR5cGUkX0lzVmFsaWQsXG4iCi0gICAgICAg
ICIgICAgICAgJnVua25vd25fZmllbGRzX3N0cmVhbSxcbiIKLSAgICAgICAgIiAgICAgICB0aGlz
LT5tdXRhYmxlXyRuYW1lJCgpKSkpO1xuIik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIg
bGVuZ3RoO1xuIgotICAgICAgIkRPXyhpbnB1dC0+UmVhZFZhcmludDMyKCZsZW5ndGgpKTtcbiIK
LSAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtOjpMaW1pdCBs
aW1pdCA9ICIKLSAgICAgICAgICAiaW5wdXQtPlB1c2hMaW1pdChsZW5ndGgpO1xuIgotICAgICAg
IndoaWxlIChpbnB1dC0+Qnl0ZXNVbnRpbExpbWl0KCkgPiAwKSB7XG4iCi0gICAgICAiICBpbnQg
dmFsdWU7XG4iCi0gICAgICAiICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPFxuIgotICAgICAgIiAgICAgICAgIGludCwgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfRU5VTT4oXG4i
Ci0gICAgICAiICAgICAgIGlucHV0LCAmdmFsdWUpKSk7XG4iKTsKLSAgICBpZiAoSGFzUHJlc2Vy
dmluZ1Vua25vd25FbnVtU2VtYW50aWNzKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiAgYWRkXyRuYW1lJChzdGF0aWNfY2Fz
dDwgJHR5cGUkID4odmFsdWUpKTtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICAgIiAgaWYgKCR0eXBlJF9Jc1ZhbGlkKHZhbHVlKSkge1xu
IgotICAgICAgIiAgICBhZGRfJG5hbWUkKHN0YXRpY19jYXN0PCAkdHlwZSQgPih2YWx1ZSkpO1xu
IgotICAgICAgIiAgfSBlbHNlIHtcbiIpOwotICAgICAgaWYgKFVzZVVua25vd25GaWVsZFNldChk
ZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAgICAgIiAgICBtdXRhYmxlX3Vua25vd25fZmllbGRzKCktPkFkZFZh
cmludCgkbnVtYmVyJCwgdmFsdWUpO1xuIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiICAgIHVua25vd25fZmllbGRzX3N0cmVh
bS5Xcml0ZVZhcmludDMyKHRhZyk7XG4iCi0gICAgICAgICIgICAgdW5rbm93bl9maWVsZHNfc3Ry
ZWFtLldyaXRlVmFyaW50MzIodmFsdWUpO1xuIik7Ci0gICAgICB9Ci0gICAgICBwcmludGVyLT5Q
cmludCgKLSAgICAgICIgIH1cbiIpOwotICAgIH0KLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICAgIn1cbiIKLSAgICAgICJpbnB1dC0+UG9wTGltaXQobGltaXQpO1xuIik7Ci0g
IH0KLX0KLQotdm9pZCBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlh
bGl6ZVdpdGhDYWNoZWRTaXplcyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAo
ZGVzY3JpcHRvcl8tPmlzX3BhY2tlZCgpKSB7Ci0gICAgLy8gV3JpdGUgdGhlIHRhZyBhbmQgdGhl
IHNpemUuCi0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJpZiAodGhpcy0+
JG5hbWUkX3NpemUoKSA+IDApIHtcbiIKLSAgICAgICIgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVRhZyhcbiIKLSAgICAgICIgICAgJG51bWJlciQs
XG4iCi0gICAgICAiICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELFxuIgotICAgICAgIiAgICBvdXRwdXQpO1xu
IgotICAgICAgIiAgb3V0cHV0LT5Xcml0ZVZhcmludDMyKF8kbmFtZSRfY2FjaGVkX2J5dGVfc2l6
ZV8pO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgICAiZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT4kbmFtZSRfc2l6ZSgpOyBpKyspIHtc
biIpOwotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3BhY2tlZCgpKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICIgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpXcml0ZUVudW1Ob1RhZyhcbiIKLSAgICAgICIgICAgdGhpcy0+JG5hbWUk
KGkpLCBvdXRwdXQpO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAgICIgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXcml0ZUVudW0oXG4iCi0gICAgICAiICAgICRudW1iZXIkLCB0aGlzLT4kbmFtZSQoaSks
IG91dHB1dCk7XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQg
UmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVk
U2l6ZXNUb0FycmF5KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChkZXNjcmlw
dG9yXy0+aXNfcGFja2VkKCkpIHsKLSAgICAvLyBXcml0ZSB0aGUgdGFnIGFuZCB0aGUgc2l6ZS4K
LSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImlmICh0aGlzLT4kbmFtZSRf
c2l6ZSgpID4gMCkge1xuIgotICAgICAgIiAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlVGFnVG9BcnJheShcbiIKLSAgICAgICIgICAg
JG51bWJlciQsXG4iCi0gICAgICAiICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELFxuIgotICAgICAgIiAgICB0
YXJnZXQpO1xuIgotICAgICAgIiAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29k
ZWRPdXRwdXRTdHJlYW06OldyaXRlVmFyaW50MzJUb0FycmF5KCIKLSAgICAgICIgICAgXyRuYW1l
JF9jYWNoZWRfYnl0ZV9zaXplXywgdGFyZ2V0KTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImZvciAoaW50IGkgPSAwOyBpIDwgdGhp
cy0+JG5hbWUkX3NpemUoKTsgaSsrKSB7XG4iKTsKLSAgaWYgKGRlc2NyaXB0b3JfLT5pc19wYWNr
ZWQoKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiICB0YXJnZXQg
PSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVt
Tm9UYWdUb0FycmF5KFxuIgotICAgICAgIiAgICB0aGlzLT4kbmFtZSQoaSksIHRhcmdldCk7XG4i
KTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiAg
dGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Oldy
aXRlRW51bVRvQXJyYXkoXG4iCi0gICAgICAiICAgICRudW1iZXIkLCB0aGlzLT4kbmFtZSQoaSks
IHRhcmdldCk7XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQg
UmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCeXRlU2l6ZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJ7
XG4iCi0gICAgIiAgaW50IGRhdGFfc2l6ZSA9IDA7XG4iKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiZm9yIChpbnQgaSA9IDA7IGkg
PCB0aGlzLT4kbmFtZSRfc2l6ZSgpOyBpKyspIHtcbiIKLSAgICAgICIgIGRhdGFfc2l6ZSArPSA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6RW51bVNpemUoXG4i
Ci0gICAgICAiICAgIHRoaXMtPiRuYW1lJChpKSk7XG4iCi0gICAgICAifVxuIik7Ci0KLSAgaWYg
KGRlc2NyaXB0b3JfLT5pc19wYWNrZWQoKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgICAiaWYgKGRhdGFfc2l6ZSA+IDApIHtcbiIKLSAgICAgICIgIHRvdGFsX3NpemUg
Kz0gJHRhZ19zaXplJCArXG4iCi0gICAgICAiICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpJbnQzMlNpemUoZGF0YV9zaXplKTtcbiIKLSAgICAgICJ9XG4i
Ci0gICAgICAiR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTtcbiIKLSAgICAg
ICJfJG5hbWUkX2NhY2hlZF9ieXRlX3NpemVfID0gZGF0YV9zaXplO1xuIgotICAgICAgIkdPT0dM
RV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpO1xuIgotICAgICAgInRvdGFsX3NpemUgKz0g
ZGF0YV9zaXplO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICJ0b3RhbF9zaXplICs9ICR0YWdfc2l6ZSQgKiB0aGlzLT4kbmFtZSRfc2l6ZSgp
ICsgZGF0YV9zaXplO1xuIik7Ci0gIH0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVy
LT5QcmludCgifVxuIik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFj
ZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9lbnVt
X2ZpZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9lbnVtX2ZpZWxk
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMjFjNTc1NzQyZDdkNDg4M2FiN2Y0
ZDQyZDQxZmQ3NGVhZDJmZTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZW51bV9maWVsZC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEp
Ci0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBT
YW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVf
UFJPVE9CVUZfQ09NUElMRVJfQ1BQX0VOVU1fRklFTERfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9U
T0JVRl9DT01QSUxFUl9DUFBfRU5VTV9GSUVMRF9IX18KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNs
dWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBf
ZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFt
ZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBjcHAgewotCi1jbGFzcyBFbnVtRmllbGRHZW5l
cmF0b3IgOiBwdWJsaWMgRmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgRW51bUZpZWxkR2Vu
ZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3QgT3B0aW9ucyYg
b3B0aW9ucyk7Ci0gIH5FbnVtRmllbGRHZW5lcmF0b3IoKTsKLQotICAvLyBpbXBsZW1lbnRzIEZp
ZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2
b2lkIEdlbmVyYXRlUHJpdmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlQWNjZXNzb3JEZWNsYXJhdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6UHJp
bnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc19pbmxpbmUpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQ2xlYXJpbmdDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVN3YXBwaW5nQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDb25zdHJ1Y3RvckNvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVyZ2VGcm9tQ29k
ZWRTdHJlYW0oaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2Vy
aWFsaXplV2l0aENhY2hlZFNpemVzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnl0ZVNpemUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0OwotCi0gcHJvdGVjdGVkOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0KLSBwcml2YXRlOgot
ICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRW51bUZpZWxkR2VuZXJhdG9yKTsK
LX07Ci0KLWNsYXNzIEVudW1PbmVvZkZpZWxkR2VuZXJhdG9yIDogcHVibGljIEVudW1GaWVsZEdl
bmVyYXRvciB7Ci0gcHVibGljOgotICBFbnVtT25lb2ZGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE9wdGlvbnMmIG9wdGlvbnMpOwotICB+RW51bU9uZW9mRmllbGRHZW5lcmF0b3IoKTsKLQotICAv
LyBpbXBsZW1lbnRzIEZpZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICB2b2lkIEdlbmVyYXRlSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6
UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpc19pbmxpbmUpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQ2xlYXJpbmdDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVN3YXBwaW5nQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDb25zdHJ1Y3RvckNv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJ
U0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEVudW1PbmVvZkZpZWxkR2VuZXJhdG9yKTsKLX07Ci0K
LWNsYXNzIFJlcGVhdGVkRW51bUZpZWxkR2VuZXJhdG9yIDogcHVibGljIEZpZWxkR2VuZXJhdG9y
IHsKLSBwdWJsaWM6Ci0gIFJlcGVhdGVkRW51bUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
T3B0aW9ucyYgb3B0aW9ucyk7Ci0gIH5SZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcigpOwotCi0g
IC8vIGltcGxlbWVudHMgRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gIHZvaWQgR2VuZXJhdGVQcml2YXRlTWVtYmVycyhpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbmxpbmVBY2Nlc3NvckRl
ZmluaXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGlzX2lubGluZSkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVD
bGVhcmluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
TWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
U3dhcHBpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZUNvbnN0cnVjdG9yQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2Vu
ZXJhdGVNZXJnZUZyb21Db2RlZFN0cmVhbShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVNZXJnZUZyb21Db2RlZFN0cmVhbVdpdGhQYWNraW5nKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXpl
cyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVX
aXRoQ2FjaGVkU2l6ZXNUb0FycmF5KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZUJ5dGVTaXplKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotIHByaXZh
dGU6Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIG1hcDxzdHJpbmcs
IHN0cmluZz4gdmFyaWFibGVzXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RP
UlMoUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNw
cAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfQ1BQX0VOVU1fRklFTERfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvY3BwL2NwcF9leHRlbnNpb24uY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3BwL2NwcF9leHRlbnNpb24uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MmYx
NjI3OTRkYWQzMDUwODRlZDk1MTNmYzI4YTQxNjgyYWVjYjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2Nw
cC9jcHBfZXh0ZW5zaW9uLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUu
Y29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVy
cyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4K
LQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2V4dGVuc2lvbi5o
PgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3Bw
L2NwcF9oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFt
ZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsK
LQotbmFtZXNwYWNlIHsKLQotLy8gUmV0dXJucyB0aGUgZnVsbHktcXVhbGlmaWVkIGNsYXNzIG5h
bWUgb2YgdGhlIG1lc3NhZ2UgdGhhdCB0aGlzIGZpZWxkCi0vLyBleHRlbmRzLiBUaGlzIGZ1bmN0
aW9uIGlzIHVzZWQgaW4gdGhlIEdvb2dsZS1pbnRlcm5hbCBjb2RlIHRvIGhhbmRsZSBzb21lCi0v
LyBsZWdhY3kgY2FzZXMuCi1zdHJpbmcgRXh0ZW5kZWVDbGFzc05hbWUoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGV4dGVuZGVlID0gZGVz
Y3JpcHRvci0+Y29udGFpbmluZ190eXBlKCk7Ci0gIHJldHVybiBDbGFzc05hbWUoZXh0ZW5kZWUs
IHRydWUpOwotfQotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUV4dGVuc2lvbkdlbmVy
YXRvcjo6RXh0ZW5zaW9uR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRv
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMm
IG9wdGlvbnMpCi0gIDogZGVzY3JpcHRvcl8oZGVzY3JpcHRvciksCi0gICAgb3B0aW9uc18ob3B0
aW9ucykgewotICAvLyBDb25zdHJ1Y3QgdHlwZV90cmFpdHNfLgotICBpZiAoZGVzY3JpcHRvcl8t
PmlzX3JlcGVhdGVkKCkpIHsKLSAgICB0eXBlX3RyYWl0c18gPSAiUmVwZWF0ZWQiOwotICB9Ci0K
LSAgc3dpdGNoIChkZXNjcmlwdG9yXy0+Y3BwX3R5cGUoKSkgewotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAgICB0eXBlX3RyYWl0c18uYXBwZW5kKCJFbnVtVHlw
ZVRyYWl0czwgIik7Ci0gICAgICB0eXBlX3RyYWl0c18uYXBwZW5kKENsYXNzTmFtZShkZXNjcmlw
dG9yXy0+ZW51bV90eXBlKCksIHRydWUpKTsKLSAgICAgIHR5cGVfdHJhaXRzXy5hcHBlbmQoIiwg
Iik7Ci0gICAgICB0eXBlX3RyYWl0c18uYXBwZW5kKENsYXNzTmFtZShkZXNjcmlwdG9yXy0+ZW51
bV90eXBlKCksIHRydWUpKTsKLSAgICAgIHR5cGVfdHJhaXRzXy5hcHBlbmQoIl9Jc1ZhbGlkPiIp
OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5H
OgotICAgICAgdHlwZV90cmFpdHNfLmFwcGVuZCgiU3RyaW5nVHlwZVRyYWl0cyIpOwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAg
IHR5cGVfdHJhaXRzXy5hcHBlbmQoIk1lc3NhZ2VUeXBlVHJhaXRzPCAiKTsKLSAgICAgIHR5cGVf
dHJhaXRzXy5hcHBlbmQoQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5tZXNzYWdlX3R5cGUoKSwgdHJ1
ZSkpOwotICAgICAgdHlwZV90cmFpdHNfLmFwcGVuZCgiID4iKTsKLSAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICB0eXBlX3RyYWl0c18uYXBwZW5kKCJQcmltaXRpdmVUeXBlVHJhaXRz
PCAiKTsKLSAgICAgIHR5cGVfdHJhaXRzXy5hcHBlbmQoUHJpbWl0aXZlVHlwZU5hbWUoZGVzY3Jp
cHRvcl8tPmNwcF90eXBlKCkpKTsKLSAgICAgIHR5cGVfdHJhaXRzXy5hcHBlbmQoIiA+Iik7Ci0g
ICAgICBicmVhazsKLSAgfQotfQotCi1FeHRlbnNpb25HZW5lcmF0b3I6On5FeHRlbnNpb25HZW5l
cmF0b3IoKSB7fQotCi12b2lkIEV4dGVuc2lvbkdlbmVyYXRvcjo6R2VuZXJhdGVEZWNsYXJhdGlv
bihpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0g
IHZhcnNbImV4dGVuZGVlIiAgICAgXSA9IEV4dGVuZGVlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKTsK
LSAgdmFyc1sibnVtYmVyIiAgICAgICBdID0gU2ltcGxlSXRvYShkZXNjcmlwdG9yXy0+bnVtYmVy
KCkpOwotICB2YXJzWyJ0eXBlX3RyYWl0cyIgIF0gPSB0eXBlX3RyYWl0c187Ci0gIHZhcnNbIm5h
bWUiICAgICAgICAgXSA9IGRlc2NyaXB0b3JfLT5uYW1lKCk7Ci0gIHZhcnNbImZpZWxkX3R5cGUi
ICAgXSA9IFNpbXBsZUl0b2Eoc3RhdGljX2Nhc3Q8aW50PihkZXNjcmlwdG9yXy0+dHlwZSgpKSk7
Ci0gIHZhcnNbInBhY2tlZCIgICAgICAgXSA9IGRlc2NyaXB0b3JfLT5vcHRpb25zKCkucGFja2Vk
KCkgPyAidHJ1ZSIgOiAiZmFsc2UiOwotICB2YXJzWyJjb25zdGFudF9uYW1lIl0gPSBGaWVsZENv
bnN0YW50TmFtZShkZXNjcmlwdG9yXyk7Ci0KLSAgLy8gSWYgdGhpcyBpcyBhIGNsYXNzIG1lbWJl
ciwgaXQgbmVlZHMgdG8gYmUgZGVjbGFyZWQgInN0YXRpYyIuICBPdGhlcndpc2UsCi0gIC8vIGl0
IG5lZWRzIHRvIGJlICJleHRlcm4iLiAgSW4gdGhlIGxhdHRlciBjYXNlLCBpdCBhbHNvIG5lZWRz
IHRoZSBETEwKLSAgLy8gZXhwb3J0L2ltcG9ydCBzcGVjaWZpZXIuCi0gIGlmIChkZXNjcmlwdG9y
Xy0+ZXh0ZW5zaW9uX3Njb3BlKCkgPT0gTlVMTCkgewotICAgIHZhcnNbInF1YWxpZmllciJdID0g
ImV4dGVybiI7Ci0gICAgaWYgKCFvcHRpb25zXy5kbGxleHBvcnRfZGVjbC5lbXB0eSgpKSB7Ci0g
ICAgICB2YXJzWyJxdWFsaWZpZXIiXSA9IG9wdGlvbnNfLmRsbGV4cG9ydF9kZWNsICsgIiAiICsg
dmFyc1sicXVhbGlmaWVyIl07Ci0gICAgfQotICB9IGVsc2UgewotICAgIHZhcnNbInF1YWxpZmll
ciJdID0gInN0YXRpYyI7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICJzdGF0
aWMgY29uc3QgaW50ICRjb25zdGFudF9uYW1lJCA9ICRudW1iZXIkO1xuIgotICAgICIkcXVhbGlm
aWVyJCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpFeHRlbnNpb25JZGVudGlmaWVyPCAk
ZXh0ZW5kZWUkLFxuIgotICAgICIgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6JHR5
cGVfdHJhaXRzJCwgJGZpZWxkX3R5cGUkLCAkcGFja2VkJCA+XG4iCi0gICAgIiAgJG5hbWUkO1xu
IgotICAgICk7Ci0KLX0KLQotdm9pZCBFeHRlbnNpb25HZW5lcmF0b3I6OkdlbmVyYXRlRGVmaW5p
dGlvbihpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBJZiB0aGlzIGlzIGEgY2xhc3MgbWVt
YmVyLCBpdCBuZWVkcyB0byBiZSBkZWNsYXJlZCBpbiBpdHMgY2xhc3Mgc2NvcGUuCi0gIHN0cmlu
ZyBzY29wZSA9IChkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3Njb3BlKCkgPT0gTlVMTCkgPyAiIiA6
Ci0gICAgQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5leHRlbnNpb25fc2NvcGUoKSwgZmFsc2UpICsg
Ijo6IjsKLSAgc3RyaW5nIG5hbWUgPSBzY29wZSArIGRlc2NyaXB0b3JfLT5uYW1lKCk7Ci0KLSAg
bWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICB2YXJzWyJleHRlbmRlZSIgICAgIF0gPSBFeHRl
bmRlZUNsYXNzTmFtZShkZXNjcmlwdG9yXyk7Ci0gIHZhcnNbInR5cGVfdHJhaXRzIiAgXSA9IHR5
cGVfdHJhaXRzXzsKLSAgdmFyc1sibmFtZSIgICAgICAgICBdID0gbmFtZTsKLSAgdmFyc1siY29u
c3RhbnRfbmFtZSJdID0gRmllbGRDb25zdGFudE5hbWUoZGVzY3JpcHRvcl8pOwotICB2YXJzWyJk
ZWZhdWx0IiAgICAgIF0gPSBEZWZhdWx0VmFsdWUoZGVzY3JpcHRvcl8pOwotICB2YXJzWyJmaWVs
ZF90eXBlIiAgIF0gPSBTaW1wbGVJdG9hKHN0YXRpY19jYXN0PGludD4oZGVzY3JpcHRvcl8tPnR5
cGUoKSkpOwotICB2YXJzWyJwYWNrZWQiICAgICAgIF0gPSBkZXNjcmlwdG9yXy0+b3B0aW9ucygp
LnBhY2tlZCgpID8gInRydWUiIDogImZhbHNlIjsKLSAgdmFyc1sic2NvcGUiICAgICAgICBdID0g
c2NvcGU7Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9TVFJJTkcpIHsKLSAgICAvLyBXZSBuZWVkIHRvIGRlY2xhcmUgYSBnbG9iYWwg
c3RyaW5nIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgZGVmYXVsdCB2YWx1ZS4KLSAgICAvLyBXZSBj
YW5ub3QgZGVjbGFyZSBpdCBhdCBjbGFzcyBzY29wZSBiZWNhdXNlIHRoYXQgd291bGQgcmVxdWly
ZSBleHBvc2luZwotICAgIC8vIGl0IGluIHRoZSBoZWFkZXIgd2hpY2ggd291bGQgYmUgYW5ub3lp
bmcgZm9yIG90aGVyIHJlYXNvbnMuICBTbyB3ZQotICAgIC8vIHJlcGxhY2UgOjogd2l0aCBfIGlu
IHRoZSBuYW1lIGFuZCBkZWNsYXJlIGl0IGFzIGEgZ2xvYmFsLgotICAgIHN0cmluZyBnbG9iYWxf
bmFtZSA9IFN0cmluZ1JlcGxhY2UobmFtZSwgIjo6IiwgIl8iLCB0cnVlKTsKLSAgICB2YXJzWyJn
bG9iYWxfbmFtZSJdID0gZ2xvYmFsX25hbWU7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAg
ICAgICJjb25zdCA6OnN0ZDo6c3RyaW5nICRnbG9iYWxfbmFtZSRfZGVmYXVsdCgkZGVmYXVsdCQp
O1xuIik7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIGRlZmF1bHQgdG8gcmVmZXIgdG8gdGhlIHN0cmlu
ZyBnbG9iYWwuCi0gICAgdmFyc1siZGVmYXVsdCJdID0gZ2xvYmFsX25hbWUgKyAiX2RlZmF1bHQi
OwotICB9Ci0KLSAgLy8gTGlrZXdpc2UsIGNsYXNzIG1lbWJlcnMgbmVlZCB0byBkZWNsYXJlIHRo
ZSBmaWVsZCBjb25zdGFudCB2YXJpYWJsZS4KLSAgaWYgKGRlc2NyaXB0b3JfLT5leHRlbnNpb25f
c2NvcGUoKSAhPSBOVUxMKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICIjaWYg
IWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDBcbiIKLSAgICAgICJjb25zdCBp
bnQgJHNjb3BlJCRjb25zdGFudF9uYW1lJDtcbiIKLSAgICAgICIjZW5kaWZcbiIpOwotICB9Ci0K
LSAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAiOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6RXh0ZW5zaW9uSWRlbnRpZmllcjwgJGV4dGVuZGVlJCxcbiIKLSAgICAiICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OiR0eXBlX3RyYWl0cyQsICRmaWVsZF90eXBlJCwgJHBhY2tl
ZCQgPlxuIgotICAgICIgICRuYW1lJCgkY29uc3RhbnRfbmFtZSQsICRkZWZhdWx0JCk7XG4iKTsK
LX0KLQotdm9pZCBFeHRlbnNpb25HZW5lcmF0b3I6OkdlbmVyYXRlUmVnaXN0cmF0aW9uKGlvOjpQ
cmludGVyKiBwcmludGVyKSB7Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgdmFyc1si
ZXh0ZW5kZWUiICAgXSA9IEV4dGVuZGVlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKTsKLSAgdmFyc1si
bnVtYmVyIiAgICAgXSA9IFNpbXBsZUl0b2EoZGVzY3JpcHRvcl8tPm51bWJlcigpKTsKLSAgdmFy
c1siZmllbGRfdHlwZSIgXSA9IFNpbXBsZUl0b2Eoc3RhdGljX2Nhc3Q8aW50PihkZXNjcmlwdG9y
Xy0+dHlwZSgpKSk7Ci0gIHZhcnNbImlzX3JlcGVhdGVkIl0gPSBkZXNjcmlwdG9yXy0+aXNfcmVw
ZWF0ZWQoKSA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci0gIHZhcnNbImlzX3BhY2tlZCIgIF0gPSAoZGVz
Y3JpcHRvcl8tPmlzX3JlcGVhdGVkKCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZXNj
cmlwdG9yXy0+b3B0aW9ucygpLnBhY2tlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgPyAi
dHJ1ZSIgOiAiZmFsc2UiOwotCi0gIHN3aXRjaCAoZGVzY3JpcHRvcl8tPmNwcF90eXBlKCkpIHsK
LSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNOgotICAgICAgcHJpbnRlci0+
UHJpbnQodmFycywKLSAgICAgICAgIjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkV4dGVu
c2lvblNldDo6UmVnaXN0ZXJFbnVtRXh0ZW5zaW9uKFxuIgotICAgICAgICAiICAmJGV4dGVuZGVl
JDo6ZGVmYXVsdF9pbnN0YW5jZSgpLFxuIgotICAgICAgICAiICAkbnVtYmVyJCwgJGZpZWxkX3R5
cGUkLCAkaXNfcmVwZWF0ZWQkLCAkaXNfcGFja2VkJCxcbiIpOwotICAgICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgICIgICYkdHlwZSRfSXNWYWxpZCk7XG4iLAotICAgICAgICAidHlwZSIsIENs
YXNzTmFtZShkZXNjcmlwdG9yXy0+ZW51bV90eXBlKCksIHRydWUpKTsKLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICBwcmludGVy
LT5QcmludCh2YXJzLAotICAgICAgICAiOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RXh0
ZW5zaW9uU2V0OjpSZWdpc3Rlck1lc3NhZ2VFeHRlbnNpb24oXG4iCi0gICAgICAgICIgICYkZXh0
ZW5kZWUkOjpkZWZhdWx0X2luc3RhbmNlKCksXG4iCi0gICAgICAgICIgICRudW1iZXIkLCAkZmll
bGRfdHlwZSQsICRpc19yZXBlYXRlZCQsICRpc19wYWNrZWQkLFxuIik7Ci0gICAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICAgIiAgJiR0eXBlJDo6ZGVmYXVsdF9pbnN0YW5jZSgpKTtcbiIsCi0g
ICAgICAgICJ0eXBlIiwgQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5tZXNzYWdlX3R5cGUoKSwgdHJ1
ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHByaW50ZXItPlByaW50KHZh
cnMsCi0gICAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpFeHRlbnNpb25TZXQ6
OlJlZ2lzdGVyRXh0ZW5zaW9uKFxuIgotICAgICAgICAiICAmJGV4dGVuZGVlJDo6ZGVmYXVsdF9p
bnN0YW5jZSgpLFxuIgotICAgICAgICAiICAkbnVtYmVyJCwgJGZpZWxkX3R5cGUkLCAkaXNfcmVw
ZWF0ZWQkLCAkaXNfcGFja2VkJCk7XG4iKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9leHRlbnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jcHAvY3BwX2V4dGVuc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxYzFjYWYxZjkwMDgyNGVlYzBmMmY1OWUyNTdhMTM0ZWZmZDUxOWU1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jcHAvY3BwX2V4dGVuc2lvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9u
QGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2Nv
bCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQg
b3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DUFBfRVhURU5TSU9O
X0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1BQX0VYVEVOU0lPTl9IX18K
LQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29t
bW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfb3B0aW9u
cy5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0gIGNsYXNz
IEZpZWxkRGVzY3JpcHRvcjsgICAgICAgLy8gZGVzY3JpcHRvci5oCi0gIG5hbWVzcGFjZSBpbyB7
Ci0gICAgY2xhc3MgUHJpbnRlcjsgICAgICAgICAgICAgLy8gcHJpbnRlci5oCi0gIH0KLX0KLQot
bmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3Bw
IHsKLQotLy8gR2VuZXJhdGVzIGNvZGUgZm9yIGFuIGV4dGVuc2lvbiwgd2hpY2ggbWF5IGJlIHdp
dGhpbiB0aGUgc2NvcGUgb2Ygc29tZQotLy8gbWVzc2FnZSBvciBtYXkgYmUgYXQgZmlsZSBzY29w
ZS4gIFRoaXMgaXMgbXVjaCBzaW1wbGVyIHRoYW4gRmllbGRHZW5lcmF0b3IKLS8vIHNpbmNlIGV4
dGVuc2lvbnMgYXJlIGp1c3Qgc2ltcGxlIGlkZW50aWZpZXJzIHdpdGggaW50ZXJlc3RpbmcgdHlw
ZXMuCi1jbGFzcyBFeHRlbnNpb25HZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgLy8gU2VlIGdlbmVy
YXRvci5jYyBmb3IgdGhlIG1lYW5pbmcgb2YgZGxsZXhwb3J0X2RlY2wuCi0gIGV4cGxpY2l0IEV4
dGVuc2lvbkdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKTsKLSAgfkV4
dGVuc2lvbkdlbmVyYXRvcigpOwotCi0gIC8vIEhlYWRlciBzdHVmZi4KLSAgdm9pZCBHZW5lcmF0
ZURlY2xhcmF0aW9uKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBTb3VyY2UgZmlsZSBz
dHVmZi4KLSAgdm9pZCBHZW5lcmF0ZURlZmluaXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpOwot
Ci0gIC8vIEdlbmVyYXRlIGNvZGUgdG8gcmVnaXN0ZXIgdGhlIGV4dGVuc2lvbi4KLSAgdm9pZCBH
ZW5lcmF0ZVJlZ2lzdHJhdGlvbihpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSBwcml2YXRlOgot
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBzdHJpbmcgdHlwZV90cmFp
dHNfOwotICBPcHRpb25zIG9wdGlvbnNfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNU
UlVDVE9SUyhFeHRlbnNpb25HZW5lcmF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNwcAot
fSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAg
Ly8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJf
Q1BQX01FU1NBR0VfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3BwL2NwcF9maWVsZC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2Zp
ZWxkLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2JhM2EyZTVhZDM0MGM2YmMw
OTE5NGJlNjk1YjBhMDg4OWFjZTVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpZWxkLmNj
CisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEp
Ci0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBT
YW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8bWVtb3J5Pgot
I2lmbmRlZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3No
YXJlZF9wdHIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
cHAvY3BwX3ByaW1pdGl2ZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jcHAvY3BwX3N0cmluZ19maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jcHAvY3BwX2VudW1fZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3BwL2NwcF9tYXBfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3BwL2NwcF9tZXNzYWdlX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3Jt
YXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1
dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsKLQotdXNpbmcgaW50ZXJuYWw6OldpcmVG
b3JtYXQ7Ci0KLXZvaWQgU2V0Q29tbW9uRmllbGRWYXJpYWJsZXMoY29uc3QgRmllbGREZXNjcmlw
dG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXA8c3RyaW5n
LCBzdHJpbmc+KiB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE9wdGlvbnMmIG9wdGlvbnMpIHsKLSAgKCp2YXJpYWJsZXMpWyJuYW1lIl0gPSBGaWVsZE5hbWUo
ZGVzY3JpcHRvcik7Ci0gICgqdmFyaWFibGVzKVsiaW5kZXgiXSA9IFNpbXBsZUl0b2EoZGVzY3Jp
cHRvci0+aW5kZXgoKSk7Ci0gICgqdmFyaWFibGVzKVsibnVtYmVyIl0gPSBTaW1wbGVJdG9hKGRl
c2NyaXB0b3ItPm51bWJlcigpKTsKLSAgKCp2YXJpYWJsZXMpWyJjbGFzc25hbWUiXSA9IENsYXNz
TmFtZShGaWVsZFNjb3BlKGRlc2NyaXB0b3IpLCBmYWxzZSk7Ci0gICgqdmFyaWFibGVzKVsiZGVj
bGFyZWRfdHlwZSJdID0gRGVjbGFyZWRUeXBlTWV0aG9kTmFtZShkZXNjcmlwdG9yLT50eXBlKCkp
OwotCi0gIC8vIG5vbl9udWxsX3B0cl90b19uYW1lIGlzIHVzYWJsZSBvbmx5IGlmIGhhc18kbmFt
ZSQgaXMgdHJ1ZS4gIEl0IHlpZWxkcyBhCi0gIC8vIHBvaW50ZXIgdGhhdCB3aWxsIG5vdCBiZSBO
VUxMLiAgU3ViY2xhc3NlcyBvZiBGaWVsZEdlbmVyYXRvciBtYXkgc2V0Ci0gIC8vICgqdmFyaWFi
bGVzKVsibm9uX251bGxfcHRyX3RvX25hbWUiXSBkaWZmZXJlbnRseS4KLSAgKCp2YXJpYWJsZXMp
WyJub25fbnVsbF9wdHJfdG9fbmFtZSJdID0KLSAgICAgIFN0ckNhdCgiJnRoaXMtPiIsIEZpZWxk
TmFtZShkZXNjcmlwdG9yKSwgIigpIik7Ci0KLSAgKCp2YXJpYWJsZXMpWyJ0YWdfc2l6ZSJdID0g
U2ltcGxlSXRvYSgKLSAgICBXaXJlRm9ybWF0OjpUYWdTaXplKGRlc2NyaXB0b3ItPm51bWJlcigp
LCBkZXNjcmlwdG9yLT50eXBlKCkpKTsKLSAgKCp2YXJpYWJsZXMpWyJkZXByZWNhdGlvbiJdID0g
ZGVzY3JpcHRvci0+b3B0aW9ucygpLmRlcHJlY2F0ZWQoKQotICAgICAgPyAiIFBST1RPQlVGX0RF
UFJFQ0FURUQiIDogIiI7Ci0gICgqdmFyaWFibGVzKVsiZGVwcmVjYXRlZF9hdHRyIl0gPSBkZXNj
cmlwdG9yLT5vcHRpb25zKCkuZGVwcmVjYXRlZCgpCi0gICAgICA/ICJQUk9UT0JVRl9ERVBSRUNB
VEVEX0FUVFIgIiA6ICIiOwotCi0gICgqdmFyaWFibGVzKVsiY3BwZ2V0Il0gPSAiR2V0IjsKLQot
ICBpZiAoSGFzRmllbGRQcmVzZW5jZShkZXNjcmlwdG9yLT5maWxlKCkpKSB7Ci0gICAgKCp2YXJp
YWJsZXMpWyJzZXRfaGFzYml0Il0gPQotICAgICAgICAic2V0X2hhc18iICsgRmllbGROYW1lKGRl
c2NyaXB0b3IpICsgIigpOyI7Ci0gICAgKCp2YXJpYWJsZXMpWyJjbGVhcl9oYXNiaXQiXSA9Ci0g
ICAgICAgICJjbGVhcl9oYXNfIiArIEZpZWxkTmFtZShkZXNjcmlwdG9yKSArICIoKTsiOwotICB9
IGVsc2UgewotICAgICgqdmFyaWFibGVzKVsic2V0X2hhc2JpdCJdID0gIiI7Ci0gICAgKCp2YXJp
YWJsZXMpWyJjbGVhcl9oYXNiaXQiXSA9ICIiOwotICB9Ci0KLSAgLy8gQnkgZGVmYXVsdCwgZW1w
dHkgc3RyaW5nLCBzbyB0aGF0IGdlbmVyaWMgY29kZSB1c2VkIGZvciBib3RoIG9uZW9mcyBhbmQK
LSAgLy8gc2luZ3VsYXIgZmllbGRzIGNhbiBiZSB3cml0dGVuLgotICAoKnZhcmlhYmxlcylbIm9u
ZW9mX3ByZWZpeCJdID0gIiI7Ci19Ci0KLXZvaWQgU2V0Q29tbW9uT25lb2ZGaWVsZFZhcmlhYmxl
cyhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFwPHN0cmluZywgc3RyaW5nPiogdmFyaWFibGVzKSB7Ci0gIGNvbnN0
IHN0cmluZyBwcmVmaXggPSBkZXNjcmlwdG9yLT5jb250YWluaW5nX29uZW9mKCktPm5hbWUoKSAr
ICJfLiI7Ci0gICgqdmFyaWFibGVzKVsib25lb2ZfcHJlZml4Il0gPSBwcmVmaXg7Ci0gICgqdmFy
aWFibGVzKVsib25lb2ZfbmFtZSJdID0gZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVvZigpLT5u
YW1lKCk7Ci0gICgqdmFyaWFibGVzKVsibm9uX251bGxfcHRyX3RvX25hbWUiXSA9Ci0gICAgICBT
dHJDYXQocHJlZml4LCAoKnZhcmlhYmxlcylbIm5hbWUiXSwgIl8iKTsKLX0KLQotRmllbGRHZW5l
cmF0b3I6On5GaWVsZEdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgRmllbGRHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVNZXJnZUZyb21Db2RlZFN0cmVhbVdpdGhQYWNraW5nKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIC8vIFJlYWNoaW5nIGhlcmUgaW5kaWNhdGVzIGEgYnVnLiBDYXNlcyBhcmU6
Ci0gIC8vICAgLSBUaGlzIEZpZWxkR2VuZXJhdG9yIHNob3VsZCBzdXBwb3J0IHBhY2tpbmcsIGJ1
dCB0aGlzIG1ldGhvZCBzaG91bGQgYmUKLSAgLy8gICAgIG92ZXJyaWRkZW4uCi0gIC8vICAgLSBU
aGlzIEZpZWxkR2VuZXJhdG9yIGRvZXNuJ3Qgc3VwcG9ydCBwYWNraW5nLCBhbmQgdGhpcyBtZXRo
b2Qgc2hvdWxkCi0gIC8vICAgICBuZXZlciBoYXZlIGJlZW4gY2FsbGVkLgotICBHT09HTEVfTE9H
KEZBVEFMKSA8PCAiR2VuZXJhdGVNZXJnZUZyb21Db2RlZFN0cmVhbVdpdGhQYWNraW5nKCkgIgot
ICAgICAgICAgICAgIDw8ICJjYWxsZWQgb24gZmllbGQgZ2VuZXJhdG9yIHRoYXQgZG9lcyBub3Qg
c3VwcG9ydCBwYWNraW5nLiI7Ci0KLX0KLQotRmllbGRHZW5lcmF0b3JNYXA6OkZpZWxkR2VuZXJh
dG9yTWFwKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IGRlc2NyaXB0
b3JfKGRlc2NyaXB0b3IpLAotICAgICAgb3B0aW9uc18ob3B0aW9ucyksCi0gICAgICBmaWVsZF9n
ZW5lcmF0b3JzXygKLSAgICAgICAgICBuZXcgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxG
aWVsZEdlbmVyYXRvcj5bZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKV0pIHsKLSAgLy8gQ29uc3Ry
dWN0IGFsbCB0aGUgRmllbGRHZW5lcmF0b3JzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2Ny
aXB0b3ItPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGZpZWxkX2dlbmVyYXRvcnNfW2ldLnJl
c2V0KE1ha2VHZW5lcmF0b3IoZGVzY3JpcHRvci0+ZmllbGQoaSksIG9wdGlvbnMpKTsKLSAgfQot
fQotCi1GaWVsZEdlbmVyYXRvciogRmllbGRHZW5lcmF0b3JNYXA6Ok1ha2VHZW5lcmF0b3IoY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKSB7Ci0gIGlmIChmaWVs
ZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgIHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSAg
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgIGlmIChm
aWVsZC0+aXNfbWFwKCkpIHsKLSAgICAgICAgICByZXR1cm4gbmV3IE1hcEZpZWxkR2VuZXJhdG9y
KGZpZWxkLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gbmV3
IFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yKGZpZWxkLCBvcHRpb25zKTsKLSAgICAgICAg
fQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgICBz
d2l0Y2ggKGZpZWxkLT5vcHRpb25zKCkuY3R5cGUoKSkgewotICAgICAgICAgIGRlZmF1bHQ6ICAv
LyBSZXBlYXRlZFN0cmluZ0ZpZWxkR2VuZXJhdG9yIGhhbmRsZXMgdW5rbm93biBjdHlwZXMuCi0g
ICAgICAgICAgY2FzZSBGaWVsZE9wdGlvbnM6OlNUUklORzoKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgUmVwZWF0ZWRTdHJpbmdGaWVsZEdlbmVyYXRvcihmaWVsZCwgb3B0aW9ucyk7Ci0gICAgICAg
IH0KLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAgICAgIHJl
dHVybiBuZXcgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3IoZmllbGQsIG9wdGlvbnMpOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG5ldyBSZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2Vu
ZXJhdG9yKGZpZWxkLCBvcHRpb25zKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoZmllbGQtPmNvbnRh
aW5pbmdfb25lb2YoKSkgewotICAgIHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSAgICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgIHJldHVybiBu
ZXcgTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3IoZmllbGQsIG9wdGlvbnMpOwotICAgICAgY2Fz
ZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgICBzd2l0Y2ggKGZpZWxk
LT5vcHRpb25zKCkuY3R5cGUoKSkgewotICAgICAgICAgIGRlZmF1bHQ6ICAvLyBTdHJpbmdPbmVv
ZkZpZWxkR2VuZXJhdG9yIGhhbmRsZXMgdW5rbm93biBjdHlwZXMuCi0gICAgICAgICAgY2FzZSBG
aWVsZE9wdGlvbnM6OlNUUklORzoKLSAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nT25lb2ZG
aWVsZEdlbmVyYXRvcihmaWVsZCwgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAgICAgIHJldHVybiBuZXcgRW51bU9uZW9m
RmllbGRHZW5lcmF0b3IoZmllbGQsIG9wdGlvbnMpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIG5ldyBQcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yKGZpZWxkLCBvcHRpb25zKTsK
LSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotICAg
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgcmV0dXJu
IG5ldyBNZXNzYWdlRmllbGRHZW5lcmF0b3IoZmllbGQsIG9wdGlvbnMpOwotICAgICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgICBzd2l0Y2ggKGZpZWxkLT5v
cHRpb25zKCkuY3R5cGUoKSkgewotICAgICAgICAgIGRlZmF1bHQ6ICAvLyBTdHJpbmdGaWVsZEdl
bmVyYXRvciBoYW5kbGVzIHVua25vd24gY3R5cGVzLgotICAgICAgICAgIGNhc2UgRmllbGRPcHRp
b25zOjpTVFJJTkc6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0ZpZWxkR2VuZXJhdG9y
KGZpZWxkLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfRU5VTToKLSAgICAgICAgcmV0dXJuIG5ldyBFbnVtRmllbGRHZW5lcmF0b3IoZmll
bGQsIG9wdGlvbnMpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG5ldyBQcmltaXRp
dmVGaWVsZEdlbmVyYXRvcihmaWVsZCwgb3B0aW9ucyk7Ci0gICAgfQotICB9Ci19Ci0KLUZpZWxk
R2VuZXJhdG9yTWFwOjp+RmllbGRHZW5lcmF0b3JNYXAoKSB7fQotCi1jb25zdCBGaWVsZEdlbmVy
YXRvciYgRmllbGRHZW5lcmF0b3JNYXA6OmdldCgKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkKSBjb25zdCB7Ci0gIEdPT0dMRV9DSEVDS19FUShmaWVsZC0+Y29udGFpbmluZ190eXBl
KCksIGRlc2NyaXB0b3JfKTsKLSAgcmV0dXJuICpmaWVsZF9nZW5lcmF0b3JzX1tmaWVsZC0+aW5k
ZXgoKV07Ci19Ci0KLQotfSAgLy8gbmFtZXNwYWNlIGNwcAotfSAgLy8gbmFtZXNwYWNlIGNvbXBp
bGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpZWxkLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9maWVsZC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzYjAxMjUyNzgwZGEyNjM5M2UwMDU2YzgwMmYwNjhiZWExYjdmMDQ0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwy
MjkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhv
cjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5h
bCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBE
ZWFuLCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DUFBf
RklFTERfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DUFBfRklFTERfSF9f
Ci0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVEX1BU
Ul9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNlbmRp
ZgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlw
dG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfb3B0aW9u
cy5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0gIG5hbWVz
cGFjZSBpbyB7Ci0gICAgY2xhc3MgUHJpbnRlcjsgICAgICAgICAgICAgLy8gcHJpbnRlci5oCi0g
IH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1l
c3BhY2UgY3BwIHsKLQotLy8gSGVscGVyIGZ1bmN0aW9uOiBzZXQgdmFyaWFibGVzIGluIHRoZSBt
YXAgdGhhdCBhcmUgdGhlIHNhbWUgZm9yIGFsbAotLy8gZmllbGQgY29kZSBnZW5lcmF0b3JzLgot
Ly8gWyduYW1lJywgJ2luZGV4JywgJ251bWJlcicsICdjbGFzc25hbWUnLCAnZGVjbGFyZWRfdHlw
ZScsICd0YWdfc2l6ZScsCi0vLyAnZGVwcmVjYXRpb24nXS4KLXZvaWQgU2V0Q29tbW9uRmllbGRW
YXJpYWJsZXMoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXA8c3RyaW5nLCBzdHJpbmc+KiB2YXJpYWJsZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotCi12b2lkIFNl
dENvbW1vbk9uZW9mRmllbGRWYXJpYWJsZXMoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0cmlu
Zz4qIHZhcmlhYmxlcyk7Ci0KLWNsYXNzIEZpZWxkR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4
cGxpY2l0IEZpZWxkR2VuZXJhdG9yKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpIDogb3B0aW9uc18o
b3B0aW9ucykge30KLSAgdmlydHVhbCB+RmllbGRHZW5lcmF0b3IoKTsKLQotICAvLyBHZW5lcmF0
ZSBsaW5lcyBvZiBjb2RlIGRlY2xhcmluZyBtZW1iZXJzIGZpZWxkcyBvZiB0aGUgbWVzc2FnZSBj
bGFzcwotICAvLyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoaXMgZmllbGQuICBUaGVzZSBhcmUgcGxh
Y2VkIGluc2lkZSB0aGUgbWVzc2FnZQotICAvLyBjbGFzcy4KLSAgdmlydHVhbCB2b2lkIEdlbmVy
YXRlUHJpdmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0ID0gMDsKLQotICAv
LyBHZW5lcmF0ZSBzdGF0aWMgZGVmYXVsdCB2YXJpYWJsZSBmb3IgdGhpcyBmaWVsZC4gVGhlc2Ug
YXJlIHBsYWNlZCBpbnNpZGUKLSAgLy8gdGhlIG1lc3NhZ2UgY2xhc3MuIE1vc3QgZmllbGQgdHlw
ZXMgZG9uJ3QgbmVlZCB0aGlzLCBzbyB0aGUgZGVmYXVsdAotICAvLyBpbXBsZW1lbnRhdGlvbiBp
cyBlbXB0eS4KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlU3RhdGljTWVtYmVycyhpbzo6UHJpbnRl
ciogLypwcmludGVyKi8pIGNvbnN0IHt9Ci0KLSAgLy8gR2VuZXJhdGUgcHJvdG90eXBlcyBmb3Ig
YWNjZXNzb3JzIHRoYXQgd2lsbCBtYW5pcHVsYXRlIGltcG9ydGVkCi0gIC8vIG1lc3NhZ2VzIGlu
bGluZS4gIFRoZXNlIGFyZSBmb3IgLnByb3RvLmggaGVhZGVycy4KLSAgLy8KLSAgLy8gSW4gLnBy
b3RvLmggbW9kZSwgdGhlIGhlYWRlcnMgb2YgaW1wb3J0cyBhcmUgbm90ICNpbmNsdWRlZC4gSG93
ZXZlciwKLSAgLy8gZnVuY3Rpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgaW1wb3J0ZWQgbWVzc2Fn
ZSB0eXBlcyBuZWVkIGFjY2VzcyB0bwotICAvLyB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvZiB0aGUg
aW1wb3J0ZWQgbWVzc2FnZSwgbWVhbmluZyB0aGF0IHRoZSBoZWFkZXJzCi0gIC8vIG11c3QgYmUg
I2luY2x1ZGVkLiBUbyBnZXQgYXJvdW5kIHRoaXMsIGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUK
LSAgLy8gaW1wb3J0ZWQgbWVzc2FnZSBvYmplY3RzIGFyZSBkZWZpbmVkIGFzIGRlcGVuZGVudCBm
dW5jdGlvbnMgaW4gYSBiYXNlCi0gIC8vIHRlbXBsYXRlIGNsYXNzLiBCeSBtYWtpbmcgdGhlbSBk
ZXBlbmRlbnQgdGVtcGxhdGUgZnVuY3Rpb25zLCB0aGUKLSAgLy8gZnVuY3Rpb24gdGVtcGxhdGVz
IHdpbGwgbm90IGJlIGluc3RhbnRpYXRlZCB1bnRpbCB0aGV5IGFyZSBjYWxsZWQsIHNvCi0gIC8v
IHdlIGNhbiBkZWZlciB0byB0aG9zZSB0cmFuc2xhdGlvbiB1bml0cyB0byAjaW5jbHVkZSB0aGUg
bmVjZXNzYXJ5Ci0gIC8vIGdlbmVyYXRlZCBoZWFkZXJzLgotICAvLwotICAvLyBTZWU6Ci0gIC8v
IGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbmd1YWdlL2NsYXNzX3RlbXBsYXRl
I0ltcGxpY2l0X2luc3RhbnRpYXRpb24KLSAgLy8KLSAgLy8gTW9zdCBmaWVsZCB0eXBlcyBkb24n
dCBuZWVkIHRoaXMsIHNvIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGVtcHR5LgotICB2
aXJ0dWFsIHZvaWQgR2VuZXJhdGVEZXBlbmRlbnRBY2Nlc3NvckRlY2xhcmF0aW9ucygKLSAgICAg
IGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7fQotCi0gIC8vIEdlbmVyYXRlIHByb3RvdHlw
ZXMgZm9yIGFsbCBvZiB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcwotICAv
LyBmaWVsZC4gIFRoZXNlIGFyZSBwbGFjZWQgaW5zaWRlIHRoZSBjbGFzcyBkZWZpbml0aW9uLgot
ICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3QgPSAwOwotCi0gIC8vIEdlbmVyYXRlIGlubGluZSBkZWZpbml0aW9ucyBv
ZiBkZXBlbmVudCBhY2Nlc3NvciBmdW5jdGlvbnMgZm9yIHRoaXMgZmllbGQuCi0gIC8vIFRoZXNl
IGFyZSBwbGFjZWQgaW5zaWRlIHRoZSBoZWFkZXIgYWZ0ZXIgYWxsIGNsYXNzIGRlZmluaXRpb25z
LgotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVEZXBlbmRlbnRJbmxpbmVBY2Nlc3NvckRlZmluaXRp
b25zKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7fQotCi0gIC8vIEdlbmVyYXRl
IGlubGluZSBkZWZpbml0aW9ucyBvZiBhY2Nlc3NvciBmdW5jdGlvbnMgZm9yIHRoaXMgZmllbGQu
Ci0gIC8vIFRoZXNlIGFyZSBwbGFjZWQgaW5zaWRlIHRoZSBoZWFkZXIgYWZ0ZXIgYWxsIGNsYXNz
IGRlZmluaXRpb25zLgotICAvLyBJbiBub24tLnByb3RvLmggbW9kZSwgdGhpcyBnZW5lcmF0ZXMg
ZGVwZW5kZW50IGFjY2Vzc29yIGZ1bmN0aW9ucyBhcyB3ZWxsLgotICB2aXJ0dWFsIHZvaWQgR2Vu
ZXJhdGVJbmxpbmVBY2Nlc3NvckRlZmluaXRpb25zKAotICAgIGlvOjpQcmludGVyKiBwcmludGVy
LCBib29sIGlzX2lubGluZSkgY29uc3QgPSAwOwotCi0gIC8vIEdlbmVyYXRlIGRlZmluaXRpb25z
IG9mIGFjY2Vzc29ycyB0aGF0IGFyZW4ndCBpbmxpbmVkLiAgVGhlc2UgYXJlCi0gIC8vIHBsYWNl
ZCBzb21ld2hlcmUgaW4gdGhlIC5jYyBmaWxlLgotICAvLyBNb3N0IGZpZWxkIHR5cGVzIGRvbid0
IG5lZWQgdGhpcywgc28gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZW1wdHkuCi0gIHZp
cnR1YWwgdm9pZCBHZW5lcmF0ZU5vbklubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMoCi0gICAgaW86
OlByaW50ZXIqIC8qcHJpbnRlciovKSBjb25zdCB7fQotCi0gIC8vIEdlbmVyYXRlIGxpbmVzIG9m
IGNvZGUgKHN0YXRlbWVudHMsIG5vdCBkZWNsYXJhdGlvbnMpIHdoaWNoIGNsZWFyIHRoZQotICAv
LyBmaWVsZC4gIFRoaXMgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGNsZWFyXyRuYW1lJCgpIG1ldGhv
ZCBhcyB3ZWxsIGFzCi0gIC8vIHRoZSBDbGVhcigpIG1ldGhvZCBmb3IgdGhlIHdob2xlIG1lc3Nh
Z2UuCi0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZUNsZWFyaW5nQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgPSAwOwotCi0gIC8vIEdlbmVyYXRlIGxpbmVzIG9mIGNvZGUgKHN0YXRlbWVu
dHMsIG5vdCBkZWNsYXJhdGlvbnMpIHdoaWNoIG1lcmdlcyB0aGUKLSAgLy8gY29udGVudHMgb2Yg
dGhlIGZpZWxkIGZyb20gdGhlIGN1cnJlbnQgbWVzc2FnZSB0byB0aGUgdGFyZ2V0IG1lc3NhZ2Us
Ci0gIC8vIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgdmFyaWFibGUgImZy
b20iLgotICAvLyBUaGlzIGlzIHVzZWQgdG8gZmlsbCBpbiB0aGUgTWVyZ2VGcm9tIG1ldGhvZCBm
b3IgdGhlIHdob2xlIG1lc3NhZ2UuCi0gIC8vIERldGFpbHMgb2YgdGhpcyB1c2FnZSBjYW4gYmUg
Zm91bmQgaW4gbWVzc2FnZS5jYyB1bmRlciB0aGUKLSAgLy8gR2VuZXJhdGVNZXJnZUZyb20gbWV0
aG9kLgotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgPSAwOwotCi0gIC8vIEdlbmVyYXRlIGxpbmVzIG9mIGNvZGUgKHN0YXRlbWVu
dHMsIG5vdCBkZWNsYXJhdGlvbnMpIHdoaWNoIHN3YXBzCi0gIC8vIHRoaXMgZmllbGQgYW5kIHRo
ZSBjb3JyZXNwb25kaW5nIGZpZWxkIG9mIGFub3RoZXIgbWVzc2FnZSwgd2hpY2gKLSAgLy8gaXMg
c3RvcmVkIGluIHRoZSBnZW5lcmF0ZWQgY29kZSB2YXJpYWJsZSAib3RoZXIiLiBUaGlzIGlzIHVz
ZWQgdG8KLSAgLy8gZGVmaW5lIHRoZSBTd2FwIG1ldGhvZC4gRGV0YWlscyBvZiB1c2FnZSBjYW4g
YmUgZm91bmQgaW4KLSAgLy8gbWVzc2FnZS5jYyB1bmRlciB0aGUgR2VuZXJhdGVTd2FwIG1ldGhv
ZC4KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlU3dhcHBpbmdDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCA9IDA7Ci0KLSAgLy8gR2VuZXJhdGUgaW5pdGlhbGl6YXRpb24gY29kZSBmb3Ig
cHJpdmF0ZSBtZW1iZXJzIGRlY2xhcmVkIGJ5Ci0gIC8vIEdlbmVyYXRlUHJpdmF0ZU1lbWJlcnMo
KS4gVGhlc2UgZ28gaW50byB0aGUgbWVzc2FnZSBjbGFzcydzIFNoYXJlZEN0b3IoKQotICAvLyBt
ZXRob2QsIGludm9rZWQgYnkgZWFjaCBvZiB0aGUgZ2VuZXJhdGVkIGNvbnN0cnVjdG9ycy4KLSAg
dmlydHVhbCB2b2lkIEdlbmVyYXRlQ29uc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCA9IDA7Ci0KLSAgLy8gR2VuZXJhdGUgYW55IGNvZGUgdGhhdCBuZWVkcyB0byBnbyBp
biB0aGUgY2xhc3MncyBTaGFyZWREdG9yKCkgbWV0aG9kLAotICAvLyBpbnZva2VkIGJ5IHRoZSBk
ZXN0cnVjdG9yLgotICAvLyBNb3N0IGZpZWxkIHR5cGVzIGRvbid0IG5lZWQgdGhpcywgc28gdGhl
IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZW1wdHkuCi0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0
ZURlc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiAvKnByaW50ZXIqLykgY29uc3Qge30KLQotICAv
LyBHZW5lcmF0ZSBhIG1hbnVhbCBkZXN0cnVjdG9yIGludm9jYXRpb24gZm9yIHVzZSB3aGVuIHRo
ZSBtZXNzYWdlIGlzIG9uIGFuCi0gIC8vIGFyZW5hLiBUaGUgY29kZSB0aGF0IHRoaXMgbWV0aG9k
IGdlbmVyYXRlcyB3aWxsIGJlIGV4ZWN1dGVkIGluc2lkZSBhCi0gIC8vIHNoYXJlZC1mb3ItdGhl
LXdob2xlLW1lc3NhZ2UtY2xhc3MgbWV0aG9kIHJlZ2lzdGVyZWQgd2l0aCBPd25EZXN0cnVjdG9y
KCkuCi0gIC8vIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiB8dHJ1ZXwgaWYgaXQgZ2VuZXJhdGVk
IGFueSBjb2RlIHRoYXQgcmVxdWlyZXMgYQotICAvLyBjYWxsOyB0aGlzIGFsbG93cyB0aGUgbWVz
c2FnZSBnZW5lcmF0b3IgdG8gZWxpbWluYXRlIHRoZSBPd25EZXN0cnVjdG9yKCkKLSAgLy8gcmVn
aXN0cmF0aW9uIGlmIG5vIGZpZWxkcyByZXF1aXJlIGl0LgotICB2aXJ0dWFsIGJvb2wgR2VuZXJh
dGVBcmVuYURlc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gR2VuZXJhdGUgY29kZSB0aGF0IGFsbG9jYXRlcyB0
aGUgZmllbGRzJ3MgZGVmYXVsdCBpbnN0YW5jZS4KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlRGVm
YXVsdEluc3RhbmNlQWxsb2NhdG9yKGlvOjpQcmludGVyKiAvKnByaW50ZXIqLykKLSAgICAgIGNv
bnN0IHt9Ci0KLSAgLy8gR2VuZXJhdGUgY29kZSB0aGF0IHNob3VsZCBiZSBydW4gd2hlbiBTaHV0
ZG93blByb3RvYnVmTGlicmFyeSgpIGlzIGNhbGxlZCwKLSAgLy8gdG8gZGVsZXRlIGFsbCBkeW5h
bWljYWxseS1hbGxvY2F0ZWQgb2JqZWN0cy4KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlU2h1dGRv
d25Db2RlKGlvOjpQcmludGVyKiAvKnByaW50ZXIqLykgY29uc3Qge30KLQotICAvLyBHZW5lcmF0
ZSBsaW5lcyB0byBkZWNvZGUgdGhpcyBmaWVsZCwgd2hpY2ggd2lsbCBiZSBwbGFjZWQgaW5zaWRl
IHRoZQotICAvLyBtZXNzYWdlJ3MgTWVyZ2VGcm9tQ29kZWRTdHJlYW0oKSBtZXRob2QuCi0gIHZp
cnR1YWwgdm9pZCBHZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCA9IDA7Ci0KLSAgLy8gR2VuZXJhdGUgbGluZXMgdG8gZGVjb2RlIHRoaXMgZmll
bGQgZnJvbSBhIHBhY2tlZCB2YWx1ZSwgd2hpY2ggd2lsbCBiZQotICAvLyBwbGFjZWQgaW5zaWRl
IHRoZSBtZXNzYWdlJ3MgTWVyZ2VGcm9tQ29kZWRTdHJlYW0oKSBtZXRob2QuCi0gIHZpcnR1YWwg
dm9pZCBHZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtV2l0aFBhY2tpbmcoaW86OlByaW50ZXIq
IHByaW50ZXIpCi0gICAgICBjb25zdDsKLQotICAvLyBHZW5lcmF0ZSBsaW5lcyB0byBzZXJpYWxp
emUgdGhpcyBmaWVsZCwgd2hpY2ggYXJlIHBsYWNlZCB3aXRoaW4gdGhlCi0gIC8vIG1lc3NhZ2Un
cyBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoKSBtZXRob2QuCi0gIHZpcnR1YWwgdm9pZCBHZW5l
cmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
PSAwOwotCi0gIC8vIEdlbmVyYXRlIGxpbmVzIHRvIHNlcmlhbGl6ZSB0aGlzIGZpZWxkIGRpcmVj
dGx5IHRvIHRoZSBhcnJheSAidGFyZ2V0IiwKLSAgLy8gd2hpY2ggYXJlIHBsYWNlZCB3aXRoaW4g
dGhlIG1lc3NhZ2UncyBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KCkKLSAgLy8gbWV0
aG9kLiBUaGlzIG11c3QgYWxzbyBhZHZhbmNlICJ0YXJnZXQiIHBhc3QgdGhlIHdyaXR0ZW4gYnl0
ZXMuCi0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJy
YXkoCi0gICAgICBpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotCi0gIC8vIEdlbmVy
YXRlIGxpbmVzIHRvIGNvbXB1dGUgdGhlIHNlcmlhbGl6ZWQgc2l6ZSBvZiB0aGlzIGZpZWxkLCB3
aGljaAotICAvLyBhcmUgcGxhY2VkIGluIHRoZSBtZXNzYWdlJ3MgQnl0ZVNpemUoKSBtZXRob2Qu
Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZUJ5dGVTaXplKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCA9IDA7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnNfOwotCi0g
cHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEZpZWxkR2VuZXJh
dG9yKTsKLX07Ci0KLS8vIENvbnZlbmllbmNlIGNsYXNzIHdoaWNoIGNvbnN0cnVjdHMgRmllbGRH
ZW5lcmF0b3JzIGZvciBhIERlc2NyaXB0b3IuCi1jbGFzcyBGaWVsZEdlbmVyYXRvck1hcCB7Ci0g
cHVibGljOgotICBGaWVsZEdlbmVyYXRvck1hcChjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9y
LCBjb25zdCBPcHRpb25zJiBvcHRpb25zKTsKLSAgfkZpZWxkR2VuZXJhdG9yTWFwKCk7Ci0KLSAg
Y29uc3QgRmllbGRHZW5lcmF0b3ImIGdldChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBj
b25zdDsKLQotIHByaXZhdGU6Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBj
b25zdCBPcHRpb25zJiBvcHRpb25zXzsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX2FycmF5
PGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8RmllbGRHZW5lcmF0b3I+ID4gZmllbGRfZ2Vu
ZXJhdG9yc187Ci0KLSAgc3RhdGljIEZpZWxkR2VuZXJhdG9yKiBNYWtlR2VuZXJhdG9yKGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKTsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoRmllbGRHZW5lcmF0b3JNYXApOwotfTsKLQotCi19ICAvLyBuYW1lc3Bh
Y2UgY3BwCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9D
T01QSUxFUl9DUFBfRklFTERfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvY3BwL2NwcF9maWxlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9j
cHBfZmlsZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUyMDQ3NjczYzBkMDUy
YTYxYzg3OGJiZDQxMGM2YzFkY2ZkYjNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9maWxl
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTA2OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZh
cmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0v
LyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9maWxlLmg+Ci0jaW5jbHVkZSA8bWFwPgot
I2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzZXQ+Ci0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9lbnVtLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfc2VydmljZS5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2V4dGVuc2lvbi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2hlbHBlcnMuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNj
cmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNv
bXBpbGVyIHsKLW5hbWVzcGFjZSBjcHAgewotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUZpbGVHZW5lcmF0
b3I6OkZpbGVHZW5lcmF0b3IoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsIGNvbnN0IE9wdGlv
bnMmIG9wdGlvbnMpCi0gICAgOiBmaWxlXyhmaWxlKSwKLSAgICAgIG9wdGlvbnNfKG9wdGlvbnMp
LAotICAgICAgbWVzc2FnZV9nZW5lcmF0b3JzXygKLSAgICAgICAgICBuZXcgZ29vZ2xlOjpwcm90
b2J1Zjo6c2NvcGVkX3B0cjxNZXNzYWdlR2VuZXJhdG9yPltmaWxlLT5tZXNzYWdlX3R5cGVfY291
bnQoKV0pLAotICAgICAgZW51bV9nZW5lcmF0b3JzXygKLSAgICAgICAgICBuZXcgZ29vZ2xlOjpw
cm90b2J1Zjo6c2NvcGVkX3B0cjxFbnVtR2VuZXJhdG9yPltmaWxlLT5lbnVtX3R5cGVfY291bnQo
KV0pLAotICAgICAgc2VydmljZV9nZW5lcmF0b3JzXygKLSAgICAgICAgICBuZXcgZ29vZ2xlOjpw
cm90b2J1Zjo6c2NvcGVkX3B0cjxTZXJ2aWNlR2VuZXJhdG9yPltmaWxlLT5zZXJ2aWNlX2NvdW50
KCldKSwKLSAgICAgIGV4dGVuc2lvbl9nZW5lcmF0b3JzXygKLSAgICAgICAgICBuZXcgZ29vZ2xl
Ojpwcm90b2J1Zjo6c2NvcGVkX3B0cjxFeHRlbnNpb25HZW5lcmF0b3I+W2ZpbGUtPmV4dGVuc2lv
bl9jb3VudCgpXSkgewotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+bWVzc2FnZV90eXBl
X2NvdW50KCk7IGkrKykgewotICAgIG1lc3NhZ2VfZ2VuZXJhdG9yc19baV0ucmVzZXQoCi0gICAg
ICBuZXcgTWVzc2FnZUdlbmVyYXRvcihmaWxlLT5tZXNzYWdlX3R5cGUoaSksIG9wdGlvbnMpKTsK
LSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+ZW51bV90eXBlX2NvdW50KCk7IGkr
KykgewotICAgIGVudW1fZ2VuZXJhdG9yc19baV0ucmVzZXQoCi0gICAgICBuZXcgRW51bUdlbmVy
YXRvcihmaWxlLT5lbnVtX3R5cGUoaSksIG9wdGlvbnMpKTsKLSAgfQotCi0gIGZvciAoaW50IGkg
PSAwOyBpIDwgZmlsZS0+c2VydmljZV9jb3VudCgpOyBpKyspIHsKLSAgICBzZXJ2aWNlX2dlbmVy
YXRvcnNfW2ldLnJlc2V0KAotICAgICAgbmV3IFNlcnZpY2VHZW5lcmF0b3IoZmlsZS0+c2Vydmlj
ZShpKSwgb3B0aW9ucykpOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5leHRl
bnNpb25fY291bnQoKTsgaSsrKSB7Ci0gICAgZXh0ZW5zaW9uX2dlbmVyYXRvcnNfW2ldLnJlc2V0
KAotICAgICAgbmV3IEV4dGVuc2lvbkdlbmVyYXRvcihmaWxlLT5leHRlbnNpb24oaSksIG9wdGlv
bnMpKTsKLSAgfQotCi0gIFNwbGl0U3RyaW5nVXNpbmcoZmlsZV8tPnBhY2thZ2UoKSwgIi4iLCAm
cGFja2FnZV9wYXJ0c18pOwotfQotCi1GaWxlR2VuZXJhdG9yOjp+RmlsZUdlbmVyYXRvcigpIHt9
Ci0KLXZvaWQgRmlsZUdlbmVyYXRvcjo6R2VuZXJhdGVQcm90b0hlYWRlcihpbzo6UHJpbnRlciog
cHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJpbmcmIGluZm9fcGF0aCkgewotICBpZiAoIW9wdGlvbnNfLnByb3RvX2gpIHsKLSAgICByZXR1
cm47Ci0gIH0KLQotICBzdHJpbmcgZmlsZW5hbWVfaWRlbnRpZmllciA9IEZpbGVuYW1lSWRlbnRp
ZmllcihmaWxlXy0+bmFtZSgpKTsKLSAgR2VuZXJhdGVUb3BIZWFkZXJHdWFyZChwcmludGVyLCBm
aWxlbmFtZV9pZGVudGlmaWVyKTsKLQotCi0gIEdlbmVyYXRlTGlicmFyeUluY2x1ZGVzKHByaW50
ZXIpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPnB1YmxpY19kZXBlbmRlbmN5X2Nv
dW50KCk7IGkrKykgewotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXAgPSBmaWxlXy0+cHVi
bGljX2RlcGVuZGVuY3koaSk7Ci0gICAgY29uc3QgY2hhciogZXh0ZW5zaW9uID0gIi5wcm90by5o
IjsKLSAgICBzdHJpbmcgZGVwZW5kZW5jeSA9IFN0cmlwUHJvdG8oZGVwLT5uYW1lKCkpICsgZXh0
ZW5zaW9uOwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiNpbmNsdWRlIFwiJGRlcGVuZGVu
Y3kkXCIgIC8vIElXWVUgcHJhZ21hOiBleHBvcnRcbiIsCi0gICAgICAiZGVwZW5kZW5jeSIsIGRl
cGVuZGVuY3kpOwotICB9Ci0KLSAgR2VuZXJhdGVNZXRhZGF0YVByYWdtYShwcmludGVyLCBpbmZv
X3BhdGgpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICIvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoaW5jbHVkZXMpXG4iKTsKLQotCi0gIEdlbmVyYXRlRm9yd2FyZERlY2xhcmF0aW9ucyhw
cmludGVyKTsKLQotICAvLyBPcGVuIG5hbWVzcGFjZS4KLSAgR2VuZXJhdGVOYW1lc3BhY2VPcGVu
ZXJzKHByaW50ZXIpOwotCi0gIEdlbmVyYXRlR2xvYmFsU3RhdGVGdW5jdGlvbkRlY2xhcmF0aW9u
cyhwcmludGVyKTsKLQotICBwcmludGVyLT5QcmludCgiXG4iKTsKLQotICBHZW5lcmF0ZUVudW1E
ZWZpbml0aW9ucyhwcmludGVyKTsKLQotICBwcmludGVyLT5QcmludChrVGhpY2tTZXBhcmF0b3Ip
OwotICBwcmludGVyLT5QcmludCgiXG4iKTsKLQotICBHZW5lcmF0ZU1lc3NhZ2VEZWZpbml0aW9u
cyhwcmludGVyKTsKLQotICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAgcHJpbnRlci0+UHJpbnQo
a1RoaWNrU2VwYXJhdG9yKTsKLSAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0KLSAgR2VuZXJhdGVT
ZXJ2aWNlRGVmaW5pdGlvbnMocHJpbnRlcik7Ci0KLSAgR2VuZXJhdGVFeHRlbnNpb25JZGVudGlm
aWVycyhwcmludGVyKTsKLQotICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAgcHJpbnRlci0+UHJp
bnQoa1RoaWNrU2VwYXJhdG9yKTsKLSAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0KLSAgR2VuZXJh
dGVJbmxpbmVGdW5jdGlvbkRlZmluaXRpb25zKHByaW50ZXIpOwotCi0gIHByaW50ZXItPlByaW50
KAotICAgICJcbiIKLSAgICAiLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9z
Y29wZSlcbiIKLSAgICAiXG4iKTsKLQotICAvLyBDbG9zZSB1cCBuYW1lc3BhY2UuCi0gIEdlbmVy
YXRlTmFtZXNwYWNlQ2xvc2VycyhwcmludGVyKTsKLQotICAvLyBXZSBuZWVkIHRvIHNwZWNpYWxp
emUgc29tZSB0ZW1wbGF0ZXMgaW4gdGhlIDo6Z29vZ2xlOjpwcm90b2J1ZiBuYW1lc3BhY2U6Ci0g
IEdlbmVyYXRlUHJvdG8yTmFtZXNwYWNlRW51bVNwZWNpYWxpemF0aW9ucyhwcmludGVyKTsKLQot
ICBwcmludGVyLT5QcmludCgKLSAgICAiXG4iCi0gICAgIi8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChnbG9iYWxfc2NvcGUpXG4iCi0gICAgIlxuIik7Ci0KLSAgR2VuZXJhdGVCb3R0b21IZWFk
ZXJHdWFyZChwcmludGVyLCBmaWxlbmFtZV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBGaWxlR2Vu
ZXJhdG9yOjpHZW5lcmF0ZVBCSGVhZGVyKGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgaW5mb19wYXRoKSB7Ci0g
IHN0cmluZyBmaWxlbmFtZV9pZGVudGlmaWVyID0KLSAgICAgIEZpbGVuYW1lSWRlbnRpZmllcihm
aWxlXy0+bmFtZSgpICsgKG9wdGlvbnNfLnByb3RvX2ggPyAiLnBiLmgiIDogIiIpKTsKLSAgR2Vu
ZXJhdGVUb3BIZWFkZXJHdWFyZChwcmludGVyLCBmaWxlbmFtZV9pZGVudGlmaWVyKTsKLQotICBp
ZiAob3B0aW9uc18ucHJvdG9faCkgewotICAgIHByaW50ZXItPlByaW50KCIjaW5jbHVkZSBcIiRi
YXNlbmFtZSQucHJvdG8uaFwiICAvLyBJV1lVIHByYWdtYTogZXhwb3J0XG4iLAotICAgICAgICAg
ICAgICAgICAgICJiYXNlbmFtZSIsIFN0cmlwUHJvdG8oZmlsZV8tPm5hbWUoKSkpOwotICB9IGVs
c2UgewotICAgIEdlbmVyYXRlTGlicmFyeUluY2x1ZGVzKHByaW50ZXIpOwotICB9Ci0gIEdlbmVy
YXRlRGVwZW5kZW5jeUluY2x1ZGVzKHByaW50ZXIpOwotICBHZW5lcmF0ZU1ldGFkYXRhUHJhZ21h
KHByaW50ZXIsIGluZm9fcGF0aCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIi8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChpbmNsdWRlcylcbiIpOwotCi0KLQotICAvLyBPcGVuIG5hbWVz
cGFjZS4KLSAgR2VuZXJhdGVOYW1lc3BhY2VPcGVuZXJzKHByaW50ZXIpOwotCi0gIGlmICghb3B0
aW9uc18ucHJvdG9faCkgewotICAgIEdlbmVyYXRlR2xvYmFsU3RhdGVGdW5jdGlvbkRlY2xhcmF0
aW9ucyhwcmludGVyKTsKLSAgICBHZW5lcmF0ZU1lc3NhZ2VGb3J3YXJkRGVjbGFyYXRpb25zKHBy
aW50ZXIpOwotCi0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0KLSAgICBHZW5lcmF0ZUVudW1E
ZWZpbml0aW9ucyhwcmludGVyKTsKLQotICAgIHByaW50ZXItPlByaW50KGtUaGlja1NlcGFyYXRv
cik7Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0KLSAgICBHZW5lcmF0ZU1lc3NhZ2VEZWZp
bml0aW9ucyhwcmludGVyKTsKLQotICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICAgIHByaW50
ZXItPlByaW50KGtUaGlja1NlcGFyYXRvcik7Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0K
LSAgICBHZW5lcmF0ZVNlcnZpY2VEZWZpbml0aW9ucyhwcmludGVyKTsKLQotICAgIEdlbmVyYXRl
RXh0ZW5zaW9uSWRlbnRpZmllcnMocHJpbnRlcik7Ci0KLSAgICBwcmludGVyLT5QcmludCgiXG4i
KTsKLSAgICBwcmludGVyLT5QcmludChrVGhpY2tTZXBhcmF0b3IpOwotICAgIHByaW50ZXItPlBy
aW50KCJcbiIpOwotCi0gICAgR2VuZXJhdGVJbmxpbmVGdW5jdGlvbkRlZmluaXRpb25zKHByaW50
ZXIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIlxuIgotICAgICIvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQobmFtZXNwYWNlX3Njb3BlKVxuIik7Ci0KLSAgLy8gQ2xvc2UgdXAg
bmFtZXNwYWNlLgotICBHZW5lcmF0ZU5hbWVzcGFjZUNsb3NlcnMocHJpbnRlcik7Ci0KLSAgaWYg
KCFvcHRpb25zXy5wcm90b19oKSB7Ci0gICAgLy8gV2UgbmVlZCB0byBzcGVjaWFsaXplIHNvbWUg
dGVtcGxhdGVzIGluIHRoZSA6Omdvb2dsZTo6cHJvdG9idWYgbmFtZXNwYWNlOgotICAgIEdlbmVy
YXRlUHJvdG8yTmFtZXNwYWNlRW51bVNwZWNpYWxpemF0aW9ucyhwcmludGVyKTsKLSAgfQotCi0g
IHByaW50ZXItPlByaW50KAotICAgICJcbiIKLSAgICAiLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGdsb2JhbF9zY29wZSlcbiIKLSAgICAiXG4iKTsKLQotICBHZW5lcmF0ZUJvdHRvbUhlYWRl
ckd1YXJkKHByaW50ZXIsIGZpbGVuYW1lX2lkZW50aWZpZXIpOwotfQotCi12b2lkIEZpbGVHZW5l
cmF0b3I6OkdlbmVyYXRlU291cmNlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGNvbnN0IGJv
b2wgdXNlX3N5c3RlbV9pbmNsdWRlID0gSXNXZWxsS25vd25NZXNzYWdlKGZpbGVfKTsKLSAgc3Ry
aW5nIGhlYWRlciA9Ci0gICAgICBTdHJpcFByb3RvKGZpbGVfLT5uYW1lKCkpICsgKG9wdGlvbnNf
LnByb3RvX2ggPyAiLnByb3RvLmgiIDogIi5wYi5oIik7Ci0gIHByaW50ZXItPlByaW50KAotICAg
ICIvLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBF
RElUIVxuIgotICAgICIvLyBzb3VyY2U6ICRmaWxlbmFtZSRcbiIKLSAgICAiXG4iCi0gICAgLy8g
VGhlIGdlbmVyYXRlZCBjb2RlIGNhbGxzIGFjY2Vzc29ycyB0aGF0IG1pZ2h0IGJlIGRlcHJlY2F0
ZWQuIFdlIGRvbid0Ci0gICAgLy8gd2FudCB0aGUgY29tcGlsZXIgdG8gd2FybiBpbiBnZW5lcmF0
ZWQgY29kZS4KLSAgICAiI2RlZmluZSBJTlRFUk5BTF9TVVBQUkVTU19QUk9UT0JVRl9GSUVMRF9E
RVBSRUNBVElPTlxuIgotICAgICIjaW5jbHVkZSAkbGVmdCQkaGVhZGVyJCRyaWdodCRcbiIKLSAg
ICAiXG4iCi0gICAgIiNpbmNsdWRlIDxhbGdvcml0aG0+XG4iICAgIC8vIGZvciBzd2FwKCkKLSAg
ICAiXG4iCi0gICAgIiNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+XG4i
Ci0gICAgIiNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvcG9ydC5oPlxuIgotICAgICIj
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL29uY2UuaD5cbiIKLSAgICAiI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaD5cbiIKLSAgICAiI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oPlxuIiwKLSAgICAiZmlsZW5hbWUi
LCBmaWxlXy0+bmFtZSgpLAotICAgICJoZWFkZXIiLCBoZWFkZXIsCi0gICAgImxlZnQiLCB1c2Vf
c3lzdGVtX2luY2x1ZGUgPyAiPCIgOiAiXCIiLAotICAgICJyaWdodCIsIHVzZV9zeXN0ZW1faW5j
bHVkZSA/ICI+IiA6ICJcIiIpOwotCi0gIC8vIFVua25vd24gZmllbGRzIGltcGxlbWVudGF0aW9u
IGluIGxpdGUgbW9kZSB1c2VzIFN0cmluZ091dHB1dFN0cmVhbQotICBpZiAoIVVzZVVua25vd25G
aWVsZFNldChmaWxlXywgb3B0aW9uc18pICYmIGZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKSA+
IDApIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICIjaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbF9saXRlLmg+XG4iKTsKLSAgfQotCi0gIGlmIChI
YXNEZXNjcmlwdG9yTWV0aG9kcyhmaWxlXywgb3B0aW9uc18pKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAiI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+XG4iCi0g
ICAgICAiI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV9yZWZsZWN0
aW9uLmg+XG4iCi0gICAgICAiI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX29w
cy5oPlxuIgotICAgICAgIiNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD5c
biIpOwotICB9Ci0KLSAgaWYgKG9wdGlvbnNfLnByb3RvX2gpIHsKLSAgICAvLyBVc2UgdGhlIHNt
YWxsZXIgLnByb3RvLmggZmlsZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+ZGVw
ZW5kZW5jeV9jb3VudCgpOyBpKyspIHsKLSAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXAg
PSBmaWxlXy0+ZGVwZW5kZW5jeShpKTsKLSAgICAgIGNvbnN0IGNoYXIqIGV4dGVuc2lvbiA9ICIu
cHJvdG8uaCI7Ci0gICAgICBzdHJpbmcgZGVwZW5kZW5jeSA9IFN0cmlwUHJvdG8oZGVwLT5uYW1l
KCkpICsgZXh0ZW5zaW9uOwotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIiNpbmNs
dWRlIFwiJGRlcGVuZGVuY3kkXCJcbiIsCi0gICAgICAgICAgImRlcGVuZGVuY3kiLCBkZXBlbmRl
bmN5KTsKLSAgICB9Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAiLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGluY2x1ZGVzKVxuIik7Ci0KLSAgR2VuZXJhdGVOYW1lc3BhY2VPcGVu
ZXJzKHByaW50ZXIpOwotCi0gIGlmIChIYXNEZXNjcmlwdG9yTWV0aG9kcyhmaWxlXywgb3B0aW9u
c18pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiXG4iCi0gICAgICAibmFtZXNwYWNl
IHtcbiIKLSAgICAgICJcbiIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3Nh
Z2VfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAgIG1lc3NhZ2VfZ2VuZXJhdG9yc19baV0tPkdl
bmVyYXRlRGVzY3JpcHRvckRlY2xhcmF0aW9ucyhwcmludGVyKTsKLSAgICB9Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBmaWxlXy0+ZW51bV90eXBlX2NvdW50KCk7IGkrKykgewotICAgICAgcHJp
bnRlci0+UHJpbnQoCi0gICAgICAgICJjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNj
cmlwdG9yKiAkbmFtZSRfZGVzY3JpcHRvcl8gPSBOVUxMO1xuIiwKLSAgICAgICAgIm5hbWUiLCBD
bGFzc05hbWUoZmlsZV8tPmVudW1fdHlwZShpKSwgZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBpZiAo
SGFzR2VuZXJpY1NlcnZpY2VzKGZpbGVfLCBvcHRpb25zXykpIHsKLSAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZmlsZV8tPnNlcnZpY2VfY291bnQoKTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgICAgICJjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlNlcnZpY2VEZXNj
cmlwdG9yKiAkbmFtZSRfZGVzY3JpcHRvcl8gPSBOVUxMO1xuIiwKLSAgICAgICAgICAibmFtZSIs
IGZpbGVfLT5zZXJ2aWNlKGkpLT5uYW1lKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIHByaW50
ZXItPlByaW50KAotICAgICAgIlxuIgotICAgICAgIn0gIC8vIG5hbWVzcGFjZVxuIgotICAgICAg
IlxuIik7Ci0gIH0KLQotICAvLyBEZWZpbmUgb3VyIGV4dGVybmFsbHktdmlzaWJsZSBCdWlsZERl
c2NyaXB0b3JzKCkgZnVuY3Rpb24uICAoRm9yIHRoZSBsaXRlCi0gIC8vIGxpYnJhcnksIGFsbCB0
aGlzIGRvZXMgaXMgaW5pdGlhbGl6ZSBkZWZhdWx0IGluc3RhbmNlcy4pCi0gIEdlbmVyYXRlQnVp
bGREZXNjcmlwdG9ycyhwcmludGVyKTsKLQotICAvLyBHZW5lcmF0ZSBlbnVtcy4KLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBmaWxlXy0+ZW51bV90eXBlX2NvdW50KCk7IGkrKykgewotICAgIGVudW1f
Z2VuZXJhdG9yc19baV0tPkdlbmVyYXRlTWV0aG9kcyhwcmludGVyKTsKLSAgfQotCi0gIC8vIEdl
bmVyYXRlIGNsYXNzZXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3NhZ2VfdHlw
ZV9jb3VudCgpOyBpKyspIHsKLSAgICBpZiAoaSA9PSAwICYmIEhhc0dlbmVyYXRlZE1ldGhvZHMo
ZmlsZV8sIG9wdGlvbnNfKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIlxu
IgotICAgICAgICAgICJuYW1lc3BhY2Uge1xuIgotICAgICAgICAgICJcbiIKLSAgICAgICAgICAi
c3RhdGljIHZvaWQgTWVyZ2VGcm9tRmFpbChpbnQgbGluZSkgR09PR0xFX0FUVFJJQlVURV9DT0xE
O1xuIgotICAgICAgICAgICJHT09HTEVfQVRUUklCVVRFX05PSU5MSU5FIHN0YXRpYyB2b2lkIE1l
cmdlRnJvbUZhaWwoaW50IGxpbmUpIHtcbiIKLSAgICAgICAgICAiICBHT09HTEVfQ0hFQ0soZmFs
c2UpIDw8IF9fRklMRV9fIDw8IFwiOlwiIDw8IGxpbmU7XG4iCi0gICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgIn0gIC8vIG5hbWVzcGFjZVxuIgotICAgICAgICAgICJc
biIpOwotICAgIH0KLSAgICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAgICBwcmludGVyLT5Qcmlu
dChrVGhpY2tTZXBhcmF0b3IpOwotICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICAgIG1lc3Nh
Z2VfZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlQ2xhc3NNZXRob2RzKHByaW50ZXIpOwotCi0gICAg
cHJpbnRlci0+UHJpbnQoIiNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlNcbiIpOwot
ICAgIC8vIEdlbmVyYXRlIGNsYXNzIGlubGluZSBtZXRob2RzLgotICAgIG1lc3NhZ2VfZ2VuZXJh
dG9yc19baV0tPkdlbmVyYXRlSW5saW5lTWV0aG9kcyhwcmludGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc19pbmxpbmUgPSAqLyBmYWxz
ZSk7Ci0gICAgcHJpbnRlci0+UHJpbnQoIiNlbmRpZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9J
Tl9IRUFERVJTXG4iKTsKLSAgfQotCi0gIGlmIChIYXNHZW5lcmljU2VydmljZXMoZmlsZV8sIG9w
dGlvbnNfKSkgewotICAgIC8vIEdlbmVyYXRlIHNlcnZpY2VzLgotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZmlsZV8tPnNlcnZpY2VfY291bnQoKTsgaSsrKSB7Ci0gICAgICBpZiAoaSA9PSAwKSBw
cmludGVyLT5QcmludCgiXG4iKTsKLSAgICAgIHByaW50ZXItPlByaW50KGtUaGlja1NlcGFyYXRv
cik7Ci0gICAgICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAgICAgIHNlcnZpY2VfZ2VuZXJhdG9y
c19baV0tPkdlbmVyYXRlSW1wbGVtZW50YXRpb24ocHJpbnRlcik7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gRGVmaW5lIGV4dGVuc2lvbnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPmV4dGVu
c2lvbl9jb3VudCgpOyBpKyspIHsKLSAgICBleHRlbnNpb25fZ2VuZXJhdG9yc19baV0tPkdlbmVy
YXRlRGVmaW5pdGlvbihwcmludGVyKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICJc
biIKLSAgICAiLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSlcbiIp
OwotCi0gIEdlbmVyYXRlTmFtZXNwYWNlQ2xvc2VycyhwcmludGVyKTsKLQotICBwcmludGVyLT5Q
cmludCgKLSAgICAiXG4iCi0gICAgIi8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxf
c2NvcGUpXG4iKTsKLX0KLQotY2xhc3MgRmlsZUdlbmVyYXRvcjo6Rm9yd2FyZERlY2xhcmF0aW9u
cyB7Ci0gcHVibGljOgotICB+Rm9yd2FyZERlY2xhcmF0aW9ucygpIHsKLSAgICBmb3IgKG1hcDxz
dHJpbmcsIEZvcndhcmREZWNsYXJhdGlvbnMgKj46Oml0ZXJhdG9yIGl0ID0gbmFtZXNwYWNlc18u
YmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZCA9IG5hbWVzcGFjZXNfLmVuZCgpOwotICAgICAgICAgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICBkZWxldGUgaXQtPnNlY29uZDsKLSAgICB9Ci0gICAgbmFtZXNwYWNlc18uY2xl
YXIoKTsKLSAgfQotCi0gIEZvcndhcmREZWNsYXJhdGlvbnMqIEFkZE9yR2V0TmFtZXNwYWNlKGNv
bnN0IHN0cmluZyYgbnNfbmFtZSkgewotICAgIEZvcndhcmREZWNsYXJhdGlvbnMqJiBucyA9IG5h
bWVzcGFjZXNfW25zX25hbWVdOwotICAgIGlmIChucyA9PSBOVUxMKSB7Ci0gICAgICBucyA9IG5l
dyBGb3J3YXJkRGVjbGFyYXRpb25zOwotICAgIH0KLSAgICByZXR1cm4gbnM7Ci0gIH0KLQotICBt
YXA8c3RyaW5nLCBjb25zdCBEZXNjcmlwdG9yKj4mIGNsYXNzZXMoKSB7IHJldHVybiBjbGFzc2Vz
XzsgfQotICBtYXA8c3RyaW5nLCBjb25zdCBFbnVtRGVzY3JpcHRvcio+JiBlbnVtcygpIHsgcmV0
dXJuIGVudW1zXzsgfQotCi0gIHZvaWQgUHJpbnQoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgICBmb3IgKG1hcDxzdHJpbmcsIGNvbnN0IEVudW1EZXNjcmlwdG9yICo+Ojpjb25zdF9p
dGVyYXRvcgotICAgICAgICAgICAgIGl0ID0gZW51bXNfLmJlZ2luKCksCi0gICAgICAgICAgICAg
ZW5kID0gZW51bXNfLmVuZCgpOwotICAgICAgICAgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICBw
cmludGVyLT5QcmludCgiZW51bSAkZW51bW5hbWUkIDogaW50O1xuIiwgImVudW1uYW1lIiwgaXQt
PmZpcnN0KTsKLSAgICAgIHByaW50ZXItPkFubm90YXRlKCJlbnVtbmFtZSIsIGl0LT5zZWNvbmQp
OwotICAgICAgcHJpbnRlci0+UHJpbnQoImJvb2wgJGVudW1uYW1lJF9Jc1ZhbGlkKGludCB2YWx1
ZSk7XG4iLCAiZW51bW5hbWUiLAotICAgICAgICAgICAgICAgICAgICAgaXQtPmZpcnN0KTsKLSAg
ICB9Ci0gICAgZm9yIChtYXA8c3RyaW5nLCBjb25zdCBEZXNjcmlwdG9yICo+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGNsYXNzZXNfLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBjbGFzc2VzXy5lbmQoKTsKLSAgICAg
ICAgIGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgcHJpbnRlci0+UHJpbnQoImNsYXNzICRjbGFz
c25hbWUkO1xuIiwgImNsYXNzbmFtZSIsIGl0LT5maXJzdCk7Ci0gICAgICBwcmludGVyLT5Bbm5v
dGF0ZSgiY2xhc3NuYW1lIiwgaXQtPnNlY29uZCk7Ci0gICAgfQotICAgIGZvciAobWFwPHN0cmlu
ZywgRm9yd2FyZERlY2xhcmF0aW9ucyAqPjo6Y29uc3RfaXRlcmF0b3IKLSAgICAgICAgICAgICBp
dCA9IG5hbWVzcGFjZXNfLmJlZ2luKCksCi0gICAgICAgICAgICAgZW5kID0gbmFtZXNwYWNlc18u
ZW5kKCk7Ci0gICAgICAgICBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgIHByaW50ZXItPlByaW50
KCJuYW1lc3BhY2UgJG5zbmFtZSQge1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICJuc25hbWUi
LCBpdC0+Zmlyc3QpOwotICAgICAgaXQtPnNlY29uZC0+UHJpbnQocHJpbnRlcik7Ci0gICAgICBw
cmludGVyLT5QcmludCgifSAgLy8gbmFtZXNwYWNlICRuc25hbWUkXG4iLAotICAgICAgICAgICAg
ICAgICAgICAgIm5zbmFtZSIsIGl0LT5maXJzdCk7Ci0gICAgfQotICB9Ci0KLQotIHByaXZhdGU6
Ci0gIG1hcDxzdHJpbmcsIEZvcndhcmREZWNsYXJhdGlvbnMqPiBuYW1lc3BhY2VzXzsKLSAgbWFw
PHN0cmluZywgY29uc3QgRGVzY3JpcHRvcio+IGNsYXNzZXNfOwotICBtYXA8c3RyaW5nLCBjb25z
dCBFbnVtRGVzY3JpcHRvcio+IGVudW1zXzsKLX07Ci0KLXZvaWQgRmlsZUdlbmVyYXRvcjo6R2Vu
ZXJhdGVCdWlsZERlc2NyaXB0b3JzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIEFkZERl
c2NyaXB0b3JzKCkgaXMgYSBmaWxlLWxldmVsIHByb2NlZHVyZSB3aGljaCBhZGRzIHRoZSBlbmNv
ZGVkCi0gIC8vIEZpbGVEZXNjcmlwdG9yUHJvdG8gZm9yIHRoaXMgLnByb3RvIGZpbGUgdG8gdGhl
IGdsb2JhbCBEZXNjcmlwdG9yUG9vbCBmb3IKLSAgLy8gZ2VuZXJhdGVkIGZpbGVzIChEZXNjcmlw
dG9yUG9vbDo6Z2VuZXJhdGVkX3Bvb2woKSkuIEl0IGVpdGhlciBydW5zIGF0Ci0gIC8vIHN0YXRp
YyBpbml0aWFsaXphdGlvbiB0aW1lIChieSBkZWZhdWx0KSBvciB3aGVuIGRlZmF1bHRfaW5zdGFu
Y2UoKSBpcwotICAvLyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIChpbiBMSVRFX1JVTlRJTUUg
bW9kZSB3aXRoCi0gIC8vIEdPT0dMRV9QUk9UT0JVRl9OT19TVEFUSUNfSU5JVElBTElaRVIgZmxh
ZyBlbmFibGVkKS4gVGhpcyBwcm9jZWR1cmUgYWxzbwotICAvLyBjb25zdHJ1Y3RzIGRlZmF1bHQg
aW5zdGFuY2VzIGFuZCByZWdpc3RlcnMgZXh0ZW5zaW9ucy4KLSAgLy8KLSAgLy8gSXRzIHNpYmxp
bmcsIEFzc2lnbkRlc2NyaXB0b3JzKCksIGFjdHVhbGx5IHB1bGxzIHRoZSBjb21waWxlZAotICAv
LyBGaWxlRGVzY3JpcHRvciBmcm9tIHRoZSBEZXNjcmlwdG9yUG9vbCBhbmQgdXNlcyBpdCB0byBw
b3B1bGF0ZSBhbGwgb2YKLSAgLy8gdGhlIGdsb2JhbCB2YXJpYWJsZXMgd2hpY2ggc3RvcmUgcG9p
bnRlcnMgdG8gdGhlIGRlc2NyaXB0b3Igb2JqZWN0cy4KLSAgLy8gSXQgYWxzbyBjb25zdHJ1Y3Rz
IHRoZSByZWZsZWN0aW9uIG9iamVjdHMuICBJdCBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUKLSAg
Ly8gYW55b25lIGNhbGxzIGRlc2NyaXB0b3IoKSBvciBHZXRSZWZsZWN0aW9uKCkgb24gb25lIG9m
IHRoZSB0eXBlcyBkZWZpbmVkCi0gIC8vIGluIHRoZSBmaWxlLgotCi0gIC8vIEluIG9wdGltaXpl
X2ZvciA9IExJVEVfUlVOVElNRSBtb2RlLCB3ZSBkb24ndCBnZW5lcmF0ZSBBc3NpZ25EZXNjcmlw
dG9ycygpCi0gIC8vIGFuZCB3ZSBvbmx5IHVzZSBBZGREZXNjcmlwdG9ycygpIHRvIGFsbG9jYXRl
IGRlZmF1bHQgaW5zdGFuY2VzLgotICBpZiAoSGFzRGVzY3JpcHRvck1ldGhvZHMoZmlsZV8sIG9w
dGlvbnNfKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIlxuIgotICAgICAgInZvaWQg
JGFzc2lnbmRlc2NyaXB0b3JzbmFtZSQoKSB7XG4iLAotICAgICAgImFzc2lnbmRlc2NyaXB0b3Jz
bmFtZSIsIEdsb2JhbEFzc2lnbkRlc2NyaXB0b3JzTmFtZShmaWxlXy0+bmFtZSgpKSk7Ci0gICAg
cHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgaGFzIGZvdW5k
IGl0cyB3YXkgaW50byB0aGUgcG9vbC4gIElmIGEgZGVzY3JpcHRvcgotICAgIC8vIGlzIHJlcXVl
c3RlZCAqZHVyaW5nKiBzdGF0aWMgaW5pdCB0aGVuIEFkZERlc2NyaXB0b3JzKCkgbWF5IG5vdCBo
YXZlCi0gICAgLy8gYmVlbiBjYWxsZWQgeWV0LCBzbyB3ZSBjYWxsIGl0IG1hbnVhbGx5LiAgTm90
ZSB0aGF0IGl0J3MgZmluZSBpZgotICAgIC8vIEFkZERlc2NyaXB0b3JzKCkgaXMgY2FsbGVkIG11
bHRpcGxlIHRpbWVzLgotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiRhZGRkZXNjcmlwdG9y
c25hbWUkKCk7XG4iLAotICAgICAgImFkZGRlc2NyaXB0b3JzbmFtZSIsIEdsb2JhbEFkZERlc2Ny
aXB0b3JzTmFtZShmaWxlXy0+bmFtZSgpKSk7Ci0KLSAgICAvLyBHZXQgdGhlIGZpbGUncyBkZXNj
cmlwdG9yIGZyb20gdGhlIHBvb2wuCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpGaWxlRGVzY3JpcHRvciogZmlsZSA9XG4iCi0gICAgICAiICA6
Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQb29sOjpnZW5lcmF0ZWRfcG9vbCgpLT5GaW5k
RmlsZUJ5TmFtZShcbiIKLSAgICAgICIgICAgXCIkZmlsZW5hbWUkXCIpO1xuIgotICAgICAgLy8g
Tm90ZSB0aGF0IHRoaXMgR09PR0xFX0NIRUNLIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGEgd2Fy
bmluZyBhYm91dCAiZmlsZSIKLSAgICAgIC8vIGJlaW5nIHVudXNlZCB3aGVuIGNvbXBpbGluZyBh
biBlbXB0eSAucHJvdG8gZmlsZS4KLSAgICAgICJHT09HTEVfQ0hFQ0soZmlsZSAhPSBOVUxMKTtc
biIsCi0gICAgICAiZmlsZW5hbWUiLCBmaWxlXy0+bmFtZSgpKTsKLQotICAgIC8vIEdvIHRocm91
Z2ggYWxsIHRoZSBzdHVmZiBkZWZpbmVkIGluIHRoaXMgZmlsZSBhbmQgZ2VuZXJhdGVkIGNvZGUg
dG8KLSAgICAvLyBhc3NpZ24gdGhlIGdsb2JhbCBkZXNjcmlwdG9yIHBvaW50ZXJzIGJhc2VkIG9u
IHRoZSBmaWxlIGRlc2NyaXB0b3IuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+bWVz
c2FnZV90eXBlX2NvdW50KCk7IGkrKykgewotICAgICAgbWVzc2FnZV9nZW5lcmF0b3JzX1tpXS0+
R2VuZXJhdGVEZXNjcmlwdG9ySW5pdGlhbGl6ZXIocHJpbnRlciwgaSk7Ci0gICAgfQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPmVudW1fdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAg
IGVudW1fZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlRGVzY3JpcHRvckluaXRpYWxpemVyKHByaW50
ZXIsIGkpOwotICAgIH0KLSAgICBpZiAoSGFzR2VuZXJpY1NlcnZpY2VzKGZpbGVfLCBvcHRpb25z
XykpIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPnNlcnZpY2VfY291bnQoKTsg
aSsrKSB7Ci0gICAgICAgIHNlcnZpY2VfZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlRGVzY3JpcHRv
ckluaXRpYWxpemVyKHByaW50ZXIsIGkpOwotICAgICAgfQotICAgIH0KLQotICAgIHByaW50ZXIt
Pk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJ9XG4iCi0gICAgICAiXG4i
KTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNP
bmNlKCk6ICBUaGUgZmlyc3QgdGltZSBpdCBpcyBjYWxsZWQsIGNhbGxzCi0gICAgLy8gQXNzaWdu
RGVzY3JpcHRvcnMoKS4gIEFsbCBsYXRlciB0aW1lcywgd2FpdHMgZm9yIHRoZSBmaXJzdCBjYWxs
IHRvCi0gICAgLy8gY29tcGxldGUgYW5kIHRoZW4gcmV0dXJucy4KLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJuYW1lc3BhY2Uge1xuIgotICAgICAgIlxuIgotICAgICAgIkdPT0dMRV9QUk9U
T0JVRl9ERUNMQVJFX09OQ0UocHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNfb25jZV8pO1xuIgot
ICAgICAgImlubGluZSB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpIHtcbiIK
LSAgICAgICIgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xlT25jZUluaXQoJnByb3RvYnVmX0Fz
c2lnbkRlc2NyaXB0b3JzX29uY2VfLFxuIgotICAgICAgIiAgICAgICAgICAgICAgICAgJiRhc3Np
Z25kZXNjcmlwdG9yc25hbWUkKTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiXG4iLAotICAgICAg
ImFzc2lnbmRlc2NyaXB0b3JzbmFtZSIsIEdsb2JhbEFzc2lnbkRlc2NyaXB0b3JzTmFtZShmaWxl
Xy0+bmFtZSgpKSk7Ci0KLSAgICAvLyBwcm90b2J1Zl9SZWdpc3RlclR5cGVzKCk6ICBDYWxscwot
ICAgIC8vIE1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkVHlwZSgpIGZv
ciBlYWNoIG1lc3NhZ2UgdHlwZS4KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJ2b2lkIHBy
b3RvYnVmX1JlZ2lzdGVyVHlwZXMoY29uc3QgOjpzdGQ6OnN0cmluZyYpIHtcbiIKLSAgICAgICIg
IHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpO1xuIik7Ci0gICAgcHJpbnRlci0+SW5k
ZW50KCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5tZXNzYWdlX3R5cGVfY291
bnQoKTsgaSsrKSB7Ci0gICAgICBtZXNzYWdlX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZVR5cGVS
ZWdpc3RyYXRpb25zKHByaW50ZXIpOwotICAgIH0KLQotICAgIHByaW50ZXItPk91dGRlbnQoKTsK
LSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJ9XG4iCi0gICAgICAiXG4iCi0gICAgICAifSAg
Ly8gbmFtZXNwYWNlXG4iKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gU2h1dGRvd25G
aWxlKCk6ICBEZWxldGVzIGRlc2NyaXB0b3JzLCBkZWZhdWx0IGluc3RhbmNlcywgZXRjLiBvbiBz
aHV0ZG93bi4KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIlxuIgotICAgICJ2b2lkICRzaHV0ZG93
bmZpbGVuYW1lJCgpIHtcbiIsCi0gICAgInNodXRkb3duZmlsZW5hbWUiLCBHbG9iYWxTaHV0ZG93
bkZpbGVOYW1lKGZpbGVfLT5uYW1lKCkpKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCk7IGkrKykgewotICAg
IG1lc3NhZ2VfZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlU2h1dGRvd25Db2RlKHByaW50ZXIpOwot
ICB9Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAifVxu
XG4iKTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIE5vdyBnZW5lcmF0ZSB0aGUgQWRkRGVzY3Jp
cHRvcnMoKSBmdW5jdGlvbi4KLSAgUHJpbnRIYW5kbGluZ09wdGlvbmFsU3RhdGljSW5pdGlhbGl6
ZXJzKAotICAgICAgZmlsZV8sIG9wdGlvbnNfLCBwcmludGVyLAotICAgICAgLy8gV2l0aCBzdGF0
aWMgaW5pdGlhbGl6ZXJzLgotICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgYW55IHNw
ZWNpYWwgc3luY2hyb25pemF0aW9uIGluIHRoZSBmb2xsb3dpbmcKLSAgICAgIC8vIGNvZGUKLSAg
ICAgIC8vIGJlY2F1c2UgaXQgaXMgY2FsbGVkIGF0IHN0YXRpYyBpbml0IHRpbWUgYmVmb3JlIGFu
eSB0aHJlYWRzIGV4aXN0LgotICAgICAgInZvaWQgJGFkZGRlc2NyaXB0b3JzbmFtZSQoKSB7XG4i
Ci0gICAgICAiICBzdGF0aWMgYm9vbCBhbHJlYWR5X2hlcmUgPSBmYWxzZTtcbiIKLSAgICAgICIg
IGlmIChhbHJlYWR5X2hlcmUpIHJldHVybjtcbiIKLSAgICAgICIgIGFscmVhZHlfaGVyZSA9IHRy
dWU7XG4iCi0gICAgICAiICBHT09HTEVfUFJPVE9CVUZfVkVSSUZZX1ZFUlNJT047XG4iCi0gICAg
ICAiXG4iLAotICAgICAgLy8gV2l0aG91dC4KLSAgICAgICJ2b2lkICRhZGRkZXNjcmlwdG9yc25h
bWUkX2ltcGwoKSB7XG4iCi0gICAgICAiICBHT09HTEVfUFJPVE9CVUZfVkVSSUZZX1ZFUlNJT047
XG4iCi0gICAgICAiXG4iLAotICAgICAgLy8gVmFycy4KLSAgICAgICJhZGRkZXNjcmlwdG9yc25h
bWUiLCBHbG9iYWxBZGREZXNjcmlwdG9yc05hbWUoZmlsZV8tPm5hbWUoKSkpOwotCi0gIHByaW50
ZXItPkluZGVudCgpOwotCi0gIC8vIENhbGwgdGhlIEFkZERlc2NyaXB0b3JzKCkgbWV0aG9kcyBm
b3IgYWxsIG9mIG91ciBkZXBlbmRlbmNpZXMsIHRvIG1ha2UKLSAgLy8gc3VyZSB0aGV5IGdldCBh
ZGRlZCBmaXJzdC4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+ZGVwZW5kZW5jeV9jb3Vu
dCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogZGVwZW5kZW5jeSA9IGZpbGVf
LT5kZXBlbmRlbmN5KGkpOwotICAgIC8vIFByaW50IHRoZSBuYW1lc3BhY2UgcHJlZml4IGZvciB0
aGUgZGVwZW5kZW5jeS4KLSAgICBzdHJpbmcgYWRkX2Rlc2NfbmFtZSA9IFF1YWxpZmllZEZpbGVM
ZXZlbFN5bWJvbCgKLSAgICAgICAgZGVwZW5kZW5jeS0+cGFja2FnZSgpLCBHbG9iYWxBZGREZXNj
cmlwdG9yc05hbWUoZGVwZW5kZW5jeS0+bmFtZSgpKSk7Ci0gICAgLy8gQ2FsbCBpdHMgQWRkRGVz
Y3JpcHRvcnMgZnVuY3Rpb24uCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiJG5hbWUkKCk7
XG4iLAotICAgICAgIm5hbWUiLCBhZGRfZGVzY19uYW1lKTsKLSAgfQotCi0gIGlmIChIYXNEZXNj
cmlwdG9yTWV0aG9kcyhmaWxlXywgb3B0aW9uc18pKSB7Ci0gICAgLy8gRW1iZWQgdGhlIGRlc2Ny
aXB0b3IuICBXZSBzaW1wbHkgc2VyaWFsaXplIHRoZSBlbnRpcmUgRmlsZURlc2NyaXB0b3JQcm90
bwotICAgIC8vIGFuZCBlbWJlZCBpdCBhcyBhIHN0cmluZyBsaXRlcmFsLCB3aGljaCBpcyBwYXJz
ZWQgYW5kIGJ1aWx0IGludG8gcmVhbAotICAgIC8vIGRlc2NyaXB0b3JzIGF0IGluaXRpYWxpemF0
aW9uIHRpbWUuCi0gICAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICAgIGZpbGVf
LT5Db3B5VG8oJmZpbGVfcHJvdG8pOwotICAgIHN0cmluZyBmaWxlX2RhdGE7Ci0gICAgZmlsZV9w
cm90by5TZXJpYWxpemVUb1N0cmluZygmZmlsZV9kYXRhKTsKLQotI2lmZGVmIF9NU0NfVkVSCi0g
ICAgYm9vbCBicmVha2Rvd25fbGFyZ2VfZmlsZSA9IHRydWU7Ci0jZWxzZQotICAgIGJvb2wgYnJl
YWtkb3duX2xhcmdlX2ZpbGUgPSBmYWxzZTsKLSNlbmRpZgotICAgIC8vIFdvcmthcm91bmQgZm9y
IE1TVkM6ICJFcnJvciBDMTA5MTogY29tcGlsZXIgbGltaXQ6IHN0cmluZyBleGNlZWRzIDY1NTM1
Ci0gICAgLy8gYnl0ZXMgaW4gbGVuZ3RoIi4gRGVjbGFyZSBhIHN0YXRpYyBhcnJheSBvZiBjaGFy
YWN0ZXJzIHJhdGhlciB0aGFuIHVzZSBhCi0gICAgLy8gc3RyaW5nIGxpdGVyYWwuCi0gICAgaWYg
KGJyZWFrZG93bl9sYXJnZV9maWxlICYmIGZpbGVfZGF0YS5zaXplKCkgPiA2NTUzNSkgewotICAg
ICAgLy8gVGhpcyBoYXMgdG8gYmUgZXhwbGljaXRseSBtYXJrZWQgYXMgYSBzaWduZWQgY2hhciBi
ZWNhdXNlIHRoZSBnZW5lcmF0ZWQKLSAgICAgIC8vIGNvZGUgcHV0cyBuZWdhdGl2ZSB2YWx1ZXMg
aW4gdGhlIGFycmF5LCBhbmQgc29tZXRpbWVzIHBsYWluIGNoYXIgaXMKLSAgICAgIC8vIHVuc2ln
bmVkLiBUaGF0IGltcGxpY2l0IG5hcnJvd2luZyBjb252ZXJzaW9uIGlzIG5vdCBhbGxvd2VkIGlu
IEMrKzExLgotICAgICAgLy8gPGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDQz
NDE0MC9uYXJyb3dpbmctY29udmVyc2lvbnMtaW4tYzB4LWlzLWl0LWp1c3QtbWUtb3ItZG9lcy10
aGlzLXNvdW5kLWxpa2UtYS1icmVha2luPgotICAgICAgLy8gaGFzIGRldGFpbHMgb24gd2h5Lgot
ICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgInN0YXRpYyBjb25zdCBzaWduZWQgY2hh
ciBkZXNjcmlwdG9yW10gPSB7XG4iKTsKLSAgICAgIHByaW50ZXItPkluZGVudCgpOwotCi0gICAg
ICAvLyBPbmx5IHdyaXRlIDI1IGJ5dGVzIHBlciBsaW5lLgotICAgICAgc3RhdGljIGNvbnN0IGlu
dCBrQnl0ZXNQZXJMaW5lID0gMjU7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfZGF0
YS5zaXplKCk7KSB7Ci0gICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBrQnl0ZXNQZXJMaW5l
ICYmIGkgPCBmaWxlX2RhdGEuc2l6ZSgpOyArK2ksICsraikgewotICAgICAgICAgICAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgICAgICAgICAgICAgIiRjaGFyJCwgIiwKLSAgICAgICAgICAgICAgICAi
Y2hhciIsIFNpbXBsZUl0b2EoZmlsZV9kYXRhW2ldKSk7Ci0gICAgICAgICAgfQotICAgICAgICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICAgICAgICAiXG4iKTsKLSAgICAgIH0KLQotICAgICAg
cHJpbnRlci0+T3V0ZGVudCgpOwotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIn07
XG4iKTsKLQotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIjo6Z29vZ2xlOjpwcm90
b2J1Zjo6RGVzY3JpcHRvclBvb2w6OkludGVybmFsQWRkR2VuZXJhdGVkRmlsZShkZXNjcmlwdG9y
LCAkc2l6ZSQpO1xuIiwKLSAgICAgICAgICAic2l6ZSIsIFNpbXBsZUl0b2EoZmlsZV9kYXRhLnNp
emUoKSkpOwotCi0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAi
Ojpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbDo6SW50ZXJuYWxBZGRHZW5lcmF0ZWRG
aWxlKCIpOwotCi0gICAgICAvLyBPbmx5IHdyaXRlIDQwIGJ5dGVzIHBlciBsaW5lLgotICAgICAg
c3RhdGljIGNvbnN0IGludCBrQnl0ZXNQZXJMaW5lID0gNDA7Ci0gICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGZpbGVfZGF0YS5zaXplKCk7IGkgKz0ga0J5dGVzUGVyTGluZSkgewotICAgICAgICBw
cmludGVyLT5QcmludCgiXG4gIFwiJGRhdGEkXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAi
ZGF0YSIsCi0gICAgICAgICAgICAgICAgICAgICAgIEVzY2FwZVRyaWdyYXBocygKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENFc2NhcGUoZmlsZV9kYXRhLnN1YnN0cihpLCBrQnl0ZXNQZXJM
aW5lKSkpKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIsICRzaXplJCk7
XG4iLAotICAgICAgICAic2l6ZSIsIFNpbXBsZUl0b2EoZmlsZV9kYXRhLnNpemUoKSkpOwotICAg
IH0KLQotICAgIC8vIENhbGwgTWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0
ZWRGaWxlKCkuCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZEZpbGUoXG4iCi0gICAg
ICAiICBcIiRmaWxlbmFtZSRcIiwgJnByb3RvYnVmX1JlZ2lzdGVyVHlwZXMpO1xuIiwKLSAgICAg
ICJmaWxlbmFtZSIsIGZpbGVfLT5uYW1lKCkpOwotICB9Ci0KLSAgLy8gQWxsb2NhdGUgYW5kIGlu
aXRpYWxpemUgZGVmYXVsdCBpbnN0YW5jZXMuICBUaGlzIGNhbid0IGJlIGRvbmUgbGF6aWx5Ci0g
IC8vIHNpbmNlIGRlZmF1bHQgaW5zdGFuY2VzIGFyZSByZXR1cm5lZCBieSBzaW1wbGUgYWNjZXNz
b3JzIGFuZCBhcmUgdXNlZCB3aXRoCi0gIC8vIGV4dGVuc2lvbnMuICBTcGVha2luZyBvZiB3aGlj
aCwgd2UgYWxzbyByZWdpc3RlciBleHRlbnNpb25zIGF0IHRoaXMgdGltZS4KLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBmaWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCk7IGkrKykgewotICAgIG1lc3Nh
Z2VfZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlRGVmYXVsdEluc3RhbmNlQWxsb2NhdG9yKHByaW50
ZXIpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPmV4dGVuc2lvbl9jb3VudCgp
OyBpKyspIHsKLSAgICBleHRlbnNpb25fZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlUmVnaXN0cmF0
aW9uKHByaW50ZXIpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3NhZ2Vf
dHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBtZXNzYWdlX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0
ZURlZmF1bHRJbnN0YW5jZUluaXRpYWxpemVyKHByaW50ZXIpOwotICB9Ci0KLSAgcHJpbnRlci0+
UHJpbnQoCi0gICAgIjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok9uU2h1dGRvd24oJiRz
aHV0ZG93bmZpbGVuYW1lJCk7XG4iLAotICAgICJzaHV0ZG93bmZpbGVuYW1lIiwgR2xvYmFsU2h1
dGRvd25GaWxlTmFtZShmaWxlXy0+bmFtZSgpKSk7Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwot
ICBwcmludGVyLT5QcmludCgKLSAgICAifVxuIgotICAgICJcbiIpOwotCi0gIFByaW50SGFuZGxp
bmdPcHRpb25hbFN0YXRpY0luaXRpYWxpemVycygKLSAgICAgIGZpbGVfLCBvcHRpb25zXywgcHJp
bnRlciwKLSAgICAgIC8vIFdpdGggc3RhdGljIGluaXRpYWxpemVycy4KLSAgICAgICIvLyBGb3Jj
ZSBBZGREZXNjcmlwdG9ycygpIHRvIGJlIGNhbGxlZCBhdCBzdGF0aWMgaW5pdGlhbGl6YXRpb24g
dGltZS5cbiIKLSAgICAgICJzdHJ1Y3QgU3RhdGljRGVzY3JpcHRvckluaXRpYWxpemVyXyRmaWxl
bmFtZSQge1xuIgotICAgICAgIiAgU3RhdGljRGVzY3JpcHRvckluaXRpYWxpemVyXyRmaWxlbmFt
ZSQoKSB7XG4iCi0gICAgICAiICAgICRhZGRkZXNjcmlwdG9yc25hbWUkKCk7XG4iCi0gICAgICAi
ICB9XG4iCi0gICAgICAifSBzdGF0aWNfZGVzY3JpcHRvcl9pbml0aWFsaXplcl8kZmlsZW5hbWUk
XztcbiIsCi0gICAgICAvLyBXaXRob3V0LgotICAgICAgIkdPT0dMRV9QUk9UT0JVRl9ERUNMQVJF
X09OQ0UoJGFkZGRlc2NyaXB0b3JzbmFtZSRfb25jZV8pO1xuIgotICAgICAgInZvaWQgJGFkZGRl
c2NyaXB0b3JzbmFtZSQoKSB7XG4iCi0gICAgICAiICA6Omdvb2dsZTo6cHJvdG9idWY6Okdvb2ds
ZU9uY2VJbml0KCYkYWRkZGVzY3JpcHRvcnNuYW1lJF9vbmNlXyxcbiIKLSAgICAgICIgICAgICAg
ICAgICAgICAgICYkYWRkZGVzY3JpcHRvcnNuYW1lJF9pbXBsKTtcbiIKLSAgICAgICJ9XG4iLAot
ICAgICAgLy8gVmFycy4KLSAgICAgICJhZGRkZXNjcmlwdG9yc25hbWUiLCBHbG9iYWxBZGREZXNj
cmlwdG9yc05hbWUoZmlsZV8tPm5hbWUoKSksICJmaWxlbmFtZSIsCi0gICAgICBGaWxlbmFtZUlk
ZW50aWZpZXIoZmlsZV8tPm5hbWUoKSkpOwotfQotCi12b2lkIEZpbGVHZW5lcmF0b3I6OkdlbmVy
YXRlTmFtZXNwYWNlT3BlbmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBpZiAocGFja2Fn
ZV9wYXJ0c18uc2l6ZSgpID4gMCkgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0KLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBwYWNrYWdlX3BhcnRzXy5zaXplKCk7IGkrKykgewotICAgIHByaW50ZXItPlBy
aW50KCJuYW1lc3BhY2UgJHBhcnQkIHtcbiIsCi0gICAgICAgICAgICAgICAgICAgInBhcnQiLCBw
YWNrYWdlX3BhcnRzX1tpXSk7Ci0gIH0KLX0KLQotdm9pZCBGaWxlR2VuZXJhdG9yOjpHZW5lcmF0
ZU5hbWVzcGFjZUNsb3NlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaWYgKHBhY2thZ2Vf
cGFydHNfLnNpemUoKSA+IDApIHByaW50ZXItPlByaW50KCJcbiIpOwotCi0gIGZvciAoaW50IGkg
PSBwYWNrYWdlX3BhcnRzXy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgIHByaW50ZXIt
PlByaW50KCJ9ICAvLyBuYW1lc3BhY2UgJHBhcnQkXG4iLAotICAgICAgICAgICAgICAgICAgICJw
YXJ0IiwgcGFja2FnZV9wYXJ0c19baV0pOwotICB9Ci19Ci0KLXZvaWQgRmlsZUdlbmVyYXRvcjo6
R2VuZXJhdGVGb3J3YXJkRGVjbGFyYXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIEZv
cndhcmREZWNsYXJhdGlvbnMgZGVjbHM7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPmRl
cGVuZGVuY3lfY291bnQoKTsgaSsrKSB7Ci0gICAgRmlsZUdlbmVyYXRvciBkZXBlbmRlbmN5KGZp
bGVfLT5kZXBlbmRlbmN5KGkpLCBvcHRpb25zXyk7Ci0gICAgZGVwZW5kZW5jeS5GaWxsRm9yd2Fy
ZERlY2xhcmF0aW9ucygmZGVjbHMpOwotICB9Ci0gIEZpbGxGb3J3YXJkRGVjbGFyYXRpb25zKCZk
ZWNscyk7Ci0gIGRlY2xzLlByaW50KHByaW50ZXIpOwotfQotCi12b2lkIEZpbGVHZW5lcmF0b3I6
OkZpbGxGb3J3YXJkRGVjbGFyYXRpb25zKEZvcndhcmREZWNsYXJhdGlvbnMqIGRlY2xzKSB7Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPnB1YmxpY19kZXBlbmRlbmN5X2NvdW50KCk7IGkr
KykgewotICAgIEZpbGVHZW5lcmF0b3IgZGVwZW5kZW5jeShmaWxlXy0+cHVibGljX2RlcGVuZGVu
Y3koaSksIG9wdGlvbnNfKTsKLSAgICBkZXBlbmRlbmN5LkZpbGxGb3J3YXJkRGVjbGFyYXRpb25z
KGRlY2xzKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IHBhY2thZ2VfcGFydHNfLnNpemUo
KTsgaSsrKSB7Ci0gICAgZGVjbHMgPSBkZWNscy0+QWRkT3JHZXROYW1lc3BhY2UocGFja2FnZV9w
YXJ0c19baV0pOwotICB9Ci0gIC8vIEdlbmVyYXRlIGVudW0gZGVmaW5pdGlvbnMuCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBt
ZXNzYWdlX2dlbmVyYXRvcnNfW2ldLT5GaWxsRW51bUZvcndhcmREZWNsYXJhdGlvbnMoJmRlY2xz
LT5lbnVtcygpKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5lbnVtX3R5cGVf
Y291bnQoKTsgaSsrKSB7Ci0gICAgZW51bV9nZW5lcmF0b3JzX1tpXS0+RmlsbEZvcndhcmREZWNs
YXJhdGlvbigmZGVjbHMtPmVudW1zKCkpOwotICB9Ci0gIC8vIEdlbmVyYXRlIGZvcndhcmQgZGVj
bGFyYXRpb25zIG9mIGNsYXNzZXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3Nh
Z2VfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBtZXNzYWdlX2dlbmVyYXRvcnNfW2ldLT5GaWxs
TWVzc2FnZUZvcndhcmREZWNsYXJhdGlvbnMoCi0gICAgICAgICZkZWNscy0+Y2xhc3NlcygpKTsK
LSAgfQotfQotCi12b2lkIEZpbGVHZW5lcmF0b3I6OkdlbmVyYXRlVG9wSGVhZGVyR3VhcmQoaW86
OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RyaW5nJiBmaWxlbmFtZV9pZGVudGlmaWVyKSB7Ci0gIC8vIEdlbmVyYXRl
IHRvcCBvZiBoZWFkZXIuCi0gIHByaW50ZXItPlByaW50KAotICAgICAgIi8vIEdlbmVyYXRlZCBi
eSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhXG4iCi0gICAgICAi
Ly8gc291cmNlOiAkZmlsZW5hbWUkXG4iCi0gICAgICAiXG4iCi0gICAgICAiI2lmbmRlZiBQUk9U
T0JVRl8kZmlsZW5hbWVfaWRlbnRpZmllciRfX0lOQ0xVREVEXG4iCi0gICAgICAiI2RlZmluZSBQ
Uk9UT0JVRl8kZmlsZW5hbWVfaWRlbnRpZmllciRfX0lOQ0xVREVEXG4iCi0gICAgICAiXG4iCi0g
ICAgICAiI2luY2x1ZGUgPHN0cmluZz5cbiIsCi0gICAgICAiZmlsZW5hbWUiLCBmaWxlXy0+bmFt
ZSgpLCAiZmlsZW5hbWVfaWRlbnRpZmllciIsIGZpbGVuYW1lX2lkZW50aWZpZXIpOwotICBwcmlu
dGVyLT5QcmludCgiXG4iKTsKLX0KLQotdm9pZCBGaWxlR2VuZXJhdG9yOjpHZW5lcmF0ZUJvdHRv
bUhlYWRlckd1YXJkKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLCBjb25zdCBzdHJpbmcmIGZp
bGVuYW1lX2lkZW50aWZpZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiNlbmRpZiAgLy8g
UFJPVE9CVUZfJGZpbGVuYW1lX2lkZW50aWZpZXIkX19JTkNMVURFRFxuIiwKLSAgICAiZmlsZW5h
bWVfaWRlbnRpZmllciIsIGZpbGVuYW1lX2lkZW50aWZpZXIpOwotfQotCi12b2lkIEZpbGVHZW5l
cmF0b3I6OkdlbmVyYXRlTGlicmFyeUluY2x1ZGVzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0K
LSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
Y29tbW9uLmg+XG4iCi0gICAgIlxuIik7Ci0KLSAgLy8gVmVyaWZ5IHRoZSBwcm90b2J1ZiBsaWJy
YXJ5IGhlYWRlciB2ZXJzaW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvdG9jCi0gIC8vIHZl
cnNpb24gYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLgotICBwcmludGVyLT5QcmludCgKLSAgICAi
I2lmIEdPT0dMRV9QUk9UT0JVRl9WRVJTSU9OIDwgJG1pbl9oZWFkZXJfdmVyc2lvbiRcbiIKLSAg
ICAiI2Vycm9yIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGEgbmV3ZXIgdmVyc2lvbiBvZiBw
cm90b2Mgd2hpY2ggaXNcbiIKLSAgICAiI2Vycm9yIGluY29tcGF0aWJsZSB3aXRoIHlvdXIgUHJv
dG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQbGVhc2UgdXBkYXRlXG4iCi0gICAgIiNlcnJvciB5b3Vy
IGhlYWRlcnMuXG4iCi0gICAgIiNlbmRpZlxuIgotICAgICIjaWYgJHByb3RvY192ZXJzaW9uJCA8
IEdPT0dMRV9QUk9UT0JVRl9NSU5fUFJPVE9DX1ZFUlNJT05cbiIKLSAgICAiI2Vycm9yIFRoaXMg
ZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGFuIG9sZGVyIHZlcnNpb24gb2YgcHJvdG9jIHdoaWNoIGlz
XG4iCi0gICAgIiNlcnJvciBpbmNvbXBhdGlibGUgd2l0aCB5b3VyIFByb3RvY29sIEJ1ZmZlciBo
ZWFkZXJzLiAgUGxlYXNlXG4iCi0gICAgIiNlcnJvciByZWdlbmVyYXRlIHRoaXMgZmlsZSB3aXRo
IGEgbmV3ZXIgdmVyc2lvbiBvZiBwcm90b2MuXG4iCi0gICAgIiNlbmRpZlxuIgotICAgICJcbiIs
Ci0gICAgIm1pbl9oZWFkZXJfdmVyc2lvbiIsCi0gICAgICBTaW1wbGVJdG9hKHByb3RvYnVmOjpp
bnRlcm5hbDo6a01pbkhlYWRlclZlcnNpb25Gb3JQcm90b2MpLAotICAgICJwcm90b2NfdmVyc2lv
biIsIFNpbXBsZUl0b2EoR09PR0xFX1BST1RPQlVGX1ZFUlNJT04pKTsKLQotICAvLyBPSywgaXQn
cyBub3cgc2FmZSB0byAjaW5jbHVkZSBvdGhlciBmaWxlcy4KLSAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgIiNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYXJlbmEuaD5cbiIKLSAgICAiI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5oPlxuIgotICAgICIjaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3V0aWwuaD5cbiIpOwotICBpZiAoVXNlVW5rbm93
bkZpZWxkU2V0KGZpbGVfLCBvcHRpb25zXykpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICIjaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21ldGFkYXRhLmg+XG4iKTsKLSAgfQotICBpZiAo
ZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3VudCgpID4gMCkgewotICAgIGlmIChIYXNEZXNjcmlwdG9y
TWV0aG9kcyhmaWxlXywgb3B0aW9uc18pKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgIiNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPlxuIik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9tZXNzYWdlX2xpdGUuaD5cbiIpOwotICAgIH0KLSAgfQotICBwcmludGVyLT5QcmludCgK
LSAgICAiI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZC5oPlxuIgotICAg
ICIjaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2V4dGVuc2lvbl9zZXQuaD5cbiIpOwotICBpZiAo
SGFzTWFwRmllbGRzKGZpbGVfKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXAuaD5cbiIpOwotICAgIGlmIChIYXNEZXNjcmlwdG9y
TWV0aG9kcyhmaWxlXywgb3B0aW9uc18pKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgICAiI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfaW5sLmg+XG4iKTsKLSAg
ICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIiNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkX2xpdGUuaD5cbiIpOwotICAgIH0KLSAgfQotCi0gIGlm
IChIYXNFbnVtRGVmaW5pdGlvbnMoZmlsZV8pKSB7Ci0gICAgaWYgKEhhc0Rlc2NyaXB0b3JNZXRo
b2RzKGZpbGVfLCBvcHRpb25zXykpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAg
ICIjaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9lbnVtX3JlZmxlY3Rpb24uaD5c
biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAiI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfZW51bV91dGlsLmg+XG4iKTsKLSAgICB9
Ci0gIH0KLQotICBpZiAoSGFzR2VuZXJpY1NlcnZpY2VzKGZpbGVfLCBvcHRpb25zXykpIHsKLSAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICIjaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3NlcnZp
Y2UuaD5cbiIpOwotICB9Ci0KLSAgaWYgKFVzZVVua25vd25GaWVsZFNldChmaWxlXywgb3B0aW9u
c18pICYmIGZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKSA+IDApIHsKLSAgICBwcmludGVyLT5Q
cmludCgKLSAgICAgICIjaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0
Lmg+XG4iKTsKLSAgfQotCi0KLSAgaWYgKElzQW55TWVzc2FnZShmaWxlXykpIHsKLSAgICBwcmlu
dGVyLT5QcmludCgKLSAgICAgICIjaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FueS5oPlxuIik7
Ci0gIH0KLX0KLQotdm9pZCBGaWxlR2VuZXJhdG9yOjpHZW5lcmF0ZU1ldGFkYXRhUHJhZ21hKGlv
OjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0cmluZyYgaW5mb19wYXRoKSB7Ci0gIGlmICghaW5mb19wYXRoLmVtcHR5
KCkgJiYgIW9wdGlvbnNfLmFubm90YXRpb25fcHJhZ21hX25hbWUuZW1wdHkoKSAmJgotICAgICAg
IW9wdGlvbnNfLmFubm90YXRpb25fZ3VhcmRfbmFtZS5lbXB0eSgpKSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgICIjaWZkZWYgJGd1YXJkJFxuIgotICAgICAgICAiI3ByYWdtYSAkcHJh
Z21hJCBcIiRpbmZvX3BhdGgkXCJcbiIKLSAgICAgICAgIiNlbmRpZiAgLy8gJGd1YXJkJFxuIiwK
LSAgICAgICAgImd1YXJkIiwgb3B0aW9uc18uYW5ub3RhdGlvbl9ndWFyZF9uYW1lLCAicHJhZ21h
IiwKLSAgICAgICAgb3B0aW9uc18uYW5ub3RhdGlvbl9wcmFnbWFfbmFtZSwgImluZm9fcGF0aCIs
IGluZm9fcGF0aCk7Ci0gIH0KLX0KLQotdm9pZCBGaWxlR2VuZXJhdG9yOjpHZW5lcmF0ZURlcGVu
ZGVuY3lJbmNsdWRlcyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBzZXQ8c3RyaW5nPiBwdWJs
aWNfaW1wb3J0X25hbWVzOwotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5wdWJsaWNfZGVw
ZW5kZW5jeV9jb3VudCgpOyBpKyspIHsKLSAgICBwdWJsaWNfaW1wb3J0X25hbWVzLmluc2VydChm
aWxlXy0+cHVibGljX2RlcGVuZGVuY3koaSktPm5hbWUoKSk7Ci0gIH0KLQotICBmb3IgKGludCBp
ID0gMDsgaSA8IGZpbGVfLT5kZXBlbmRlbmN5X2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IGJv
b2wgdXNlX3N5c3RlbV9pbmNsdWRlID0gSXNXZWxsS25vd25NZXNzYWdlKGZpbGVfLT5kZXBlbmRl
bmN5KGkpKTsKLSAgICBjb25zdCBzdHJpbmcmIG5hbWUgPSBmaWxlXy0+ZGVwZW5kZW5jeShpKS0+
bmFtZSgpOwotICAgIGJvb2wgcHVibGljX2ltcG9ydCA9IChwdWJsaWNfaW1wb3J0X25hbWVzLmNv
dW50KG5hbWUpICE9IDApOwotCi0KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICIjaW5jbHVk
ZSAkbGVmdCQkZGVwZW5kZW5jeSQucGIuaCRyaWdodCQkaXd5dSRcbiIsCi0gICAgICAiZGVwZW5k
ZW5jeSIsIFN0cmlwUHJvdG8obmFtZSksCi0gICAgICAiaXd5dSIsIChwdWJsaWNfaW1wb3J0KSA/
ICIgIC8vIElXWVUgcHJhZ21hOiBleHBvcnQiIDogIiIsCi0gICAgICAibGVmdCIsIHVzZV9zeXN0
ZW1faW5jbHVkZSA/ICI8IiA6ICJcIiIsCi0gICAgICAicmlnaHQiLCB1c2Vfc3lzdGVtX2luY2x1
ZGUgPyAiPiIgOiAiXCIiKTsKLSAgfQotfQotCi12b2lkIEZpbGVHZW5lcmF0b3I6OkdlbmVyYXRl
R2xvYmFsU3RhdGVGdW5jdGlvbkRlY2xhcmF0aW9ucygKLSAgICBpbzo6UHJpbnRlciogcHJpbnRl
cikgewotICAvLyBGb3J3YXJkLWRlY2xhcmUgdGhlIEFkZERlc2NyaXB0b3JzLCBBc3NpZ25EZXNj
cmlwdG9ycywgYW5kIFNodXRkb3duRmlsZQotICAvLyBmdW5jdGlvbnMsIHNvIHRoYXQgd2UgY2Fu
IGRlY2xhcmUgdGhlbSB0byBiZSBmcmllbmRzIG9mIGVhY2ggY2xhc3MuCi0gIHByaW50ZXItPlBy
aW50KAotICAgICJcbiIKLSAgICAiLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIC0t
IGRvIG5vdCBjYWxsIHRoZXNlLlxuIgotICAgICJ2b2lkICRkbGxleHBvcnRfZGVjbCQkYWRkZGVz
Y3JpcHRvcnNuYW1lJCgpO1xuIiwKLSAgICAiYWRkZGVzY3JpcHRvcnNuYW1lIiwgR2xvYmFsQWRk
RGVzY3JpcHRvcnNOYW1lKGZpbGVfLT5uYW1lKCkpLAotICAgICJkbGxleHBvcnRfZGVjbCIsCi0g
ICAgb3B0aW9uc18uZGxsZXhwb3J0X2RlY2wuZW1wdHkoKSA/ICIiIDogb3B0aW9uc18uZGxsZXhw
b3J0X2RlY2wgKyAiICIpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgIC8vIE5vdGUgdGhhdCB3
ZSBkb24ndCBwdXQgZGxsZXhwb3J0X2RlY2wgb24gdGhlc2UgYmVjYXVzZSB0aGV5IGFyZSBvbmx5
Ci0gICAgLy8gY2FsbGVkIGJ5IHRoZSAucGIuY2MgZmlsZSBpbiB3aGljaCB0aGV5IGFyZSBkZWZp
bmVkLgotICAgICJ2b2lkICRhc3NpZ25kZXNjcmlwdG9yc25hbWUkKCk7XG4iCi0gICAgInZvaWQg
JHNodXRkb3duZmlsZW5hbWUkKCk7XG4iCi0gICAgIlxuIiwKLSAgICAiYXNzaWduZGVzY3JpcHRv
cnNuYW1lIiwgR2xvYmFsQXNzaWduRGVzY3JpcHRvcnNOYW1lKGZpbGVfLT5uYW1lKCkpLAotICAg
ICJzaHV0ZG93bmZpbGVuYW1lIiwgR2xvYmFsU2h1dGRvd25GaWxlTmFtZShmaWxlXy0+bmFtZSgp
KSk7Ci19Ci0KLXZvaWQgRmlsZUdlbmVyYXRvcjo6R2VuZXJhdGVNZXNzYWdlRm9yd2FyZERlY2xh
cmF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBtYXA8c3RyaW5nLCBjb25zdCBEZXNj
cmlwdG9yKj4gY2xhc3NlczsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+bWVzc2FnZV90
eXBlX2NvdW50KCk7IGkrKykgewotICAgIG1lc3NhZ2VfZ2VuZXJhdG9yc19baV0tPkZpbGxNZXNz
YWdlRm9yd2FyZERlY2xhcmF0aW9ucygmY2xhc3Nlcyk7Ci0gIH0KLSAgZm9yIChtYXA8c3RyaW5n
LCBjb25zdCBEZXNjcmlwdG9yICo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNsYXNzZXMuYmVnaW4o
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQgPSBjbGFzc2VzLmVuZCgpOwotICAgICAgIGl0ICE9IGVuZDsgKytpdCkgewotICAgIHBy
aW50ZXItPlByaW50KCJjbGFzcyAkY2xhc3NuYW1lJDtcbiIsICJjbGFzc25hbWUiLCBpdC0+Zmly
c3QpOwotICAgIHByaW50ZXItPkFubm90YXRlKCJjbGFzc25hbWUiLCBpdC0+c2Vjb25kKTsKLSAg
fQotfQotCi12b2lkIEZpbGVHZW5lcmF0b3I6OkdlbmVyYXRlTWVzc2FnZURlZmluaXRpb25zKGlv
OjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIEdlbmVyYXRlIGNsYXNzIGRlZmluaXRpb25zLgot
ICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaSsrKSB7
Ci0gICAgaWYgKGkgPiAwKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAgICAgIHBy
aW50ZXItPlByaW50KGtUaGluU2VwYXJhdG9yKTsKLSAgICAgIHByaW50ZXItPlByaW50KCJcbiIp
OwotICAgIH0KLSAgICBtZXNzYWdlX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZUNsYXNzRGVmaW5p
dGlvbihwcmludGVyKTsKLSAgfQotfQotCi12b2lkIEZpbGVHZW5lcmF0b3I6OkdlbmVyYXRlRW51
bURlZmluaXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIEdlbmVyYXRlIGVudW0g
ZGVmaW5pdGlvbnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3NhZ2VfdHlwZV9j
b3VudCgpOyBpKyspIHsKLSAgICBtZXNzYWdlX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZUVudW1E
ZWZpbml0aW9ucyhwcmludGVyKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5l
bnVtX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgZW51bV9nZW5lcmF0b3JzX1tpXS0+R2VuZXJh
dGVEZWZpbml0aW9uKHByaW50ZXIpOwotICB9Ci19Ci0KLXZvaWQgRmlsZUdlbmVyYXRvcjo6R2Vu
ZXJhdGVTZXJ2aWNlRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaWYgKEhh
c0dlbmVyaWNTZXJ2aWNlcyhmaWxlXywgb3B0aW9uc18pKSB7Ci0gICAgLy8gR2VuZXJhdGUgc2Vy
dmljZSBkZWZpbml0aW9ucy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5zZXJ2aWNl
X2NvdW50KCk7IGkrKykgewotICAgICAgaWYgKGkgPiAwKSB7Ci0gICAgICAgIHByaW50ZXItPlBy
aW50KCJcbiIpOwotICAgICAgICBwcmludGVyLT5QcmludChrVGhpblNlcGFyYXRvcik7Ci0gICAg
ICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICAgICAgfQotICAgICAgc2VydmljZV9nZW5lcmF0
b3JzX1tpXS0+R2VuZXJhdGVEZWNsYXJhdGlvbnMocHJpbnRlcik7Ci0gICAgfQotCi0gICAgcHJp
bnRlci0+UHJpbnQoIlxuIik7Ci0gICAgcHJpbnRlci0+UHJpbnQoa1RoaWNrU2VwYXJhdG9yKTsK
LSAgICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAgfQotfQotCi12b2lkIEZpbGVHZW5lcmF0b3I6
OkdlbmVyYXRlRXh0ZW5zaW9uSWRlbnRpZmllcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAg
Ly8gRGVjbGFyZSBleHRlbnNpb24gaWRlbnRpZmllcnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwg
ZmlsZV8tPmV4dGVuc2lvbl9jb3VudCgpOyBpKyspIHsKLSAgICBleHRlbnNpb25fZ2VuZXJhdG9y
c19baV0tPkdlbmVyYXRlRGVjbGFyYXRpb24ocHJpbnRlcik7Ci0gIH0KLX0KLQotdm9pZCBGaWxl
R2VuZXJhdG9yOjpHZW5lcmF0ZUlubGluZUZ1bmN0aW9uRGVmaW5pdGlvbnMoaW86OlByaW50ZXIq
IHByaW50ZXIpIHsKLSAgLy8gQW4gYXNpZGUgYWJvdXQgaW5saW5lIGZ1bmN0aW9ucyBpbiAucHJv
dG8uaCBtb2RlOgotICAvLwotICAvLyBUaGUgUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJT
IHN5bWJvbCBjb250cm9scyBjb25kaXRpb25hbGx5Ci0gIC8vIG1vdmluZyBtdWNoIG9mIHRoZSBp
bmxpbmUgZnVuY3Rpb25zIHRvIHRoZSAucGIuY2MgZmlsZSwgd2hpY2ggY2FuIGJlIGEKLSAgLy8g
c2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGlsYXRpb24gdGltZSwgYXQg
dGhlIGV4cGVuc2UKLSAgLy8gb2Ygbm9uLWlubGluZSBmdW5jdGlvbiBjYWxscy4KLSAgLy8KLSAg
Ly8gSG93ZXZlciwgaW4gLnByb3RvLmggbW9kZSwgdGhlIGRlZmluaXRpb24gb2YgdGhlIGludGVy
bmFsIGRlcGVuZGVudAotICAvLyBiYXNlIGNsYXNzIG11c3QgcmVtYWluIGluIHRoZSBoZWFkZXIs
IGFuZCBjYW4gbmV2ZXIgYmUgb3V0LWxpbmVkLiBUaGUKLSAgLy8gZGVwZW5kZW50IGJhc2UgY2xh
c3MgYWxzbyBuZWVkcyBhY2Nlc3MgdG8gaGFzLWJpdCBtYW5pcHVhdGlvbgotICAvLyBmdW5jdGlv
bnMsIHNvIHRoZSBoYXMtYml0IGZ1bmN0aW9ucyBtdXN0IGJlIHVuY29uZGl0aW9uYWxseSBpbmxp
bmVkIGluCi0gIC8vIHByb3RvX2ggbW9kZS4KLSAgLy8KLSAgLy8gVGhpcyBnaXZlcyB1cyB0aHJl
ZSBmbGF2b3JzIG9mIGZ1bmN0aW9uczoKLSAgLy8KLSAgLy8gIDEuIEZ1bmN0aW9ucyBvbiB0aGUg
bWVzc2FnZSBub3QgdXNlZCBieSB0aGUgaW50ZXJuYWwgZGVwZW5kZW50IGJhc2UKLSAgLy8gICAg
IGNsYXNzOiBpbiAucHJvdG8uaCBtb2RlLCBvbmx5IHNvbWUgZnVuY3Rpb25zIGFyZSBkZWZpbmVk
IG9uIHRoZQotICAvLyAgICAgbWVzc2FnZSBjbGFzczsgb3RoZXJzIGFyZSBkZWZpbmVkIG9uIHRo
ZSBkZXBlbmRlbnQgYmFzZSBjbGFzcy4KLSAgLy8gICAgIFRoZXNlIGFyZSBndWFyZGVkIGFuZCBj
YW4gYmUgb3V0LWxpbmVkLiBUaGVzZSBhcmUgZ2VuZXJhdGVkIGJ5Ci0gIC8vICAgICBHZW5lcmF0
ZUlubGluZU1ldGhvZHMsIGFuZCBpbmNsdWRlIGhhc18qIGJpdCBmdW5jdGlvbnMgaW4KLSAgLy8g
ICAgIG5vbi1wcm90b19oIG1vZGUuCi0gIC8vCi0gIC8vICAyLiBGdW5jdGlvbnMgb24gdGhlIGlu
dGVybmFsIGRlcGVuZGVudCBiYXNlIGNsYXNzOiB0aGVzZSBmdW5jdGlvbnMKLSAgLy8gICAgIGFy
ZSBkZXBlbmRlbnQgb24gYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIsIHNvIHRoZXkgYWx3YXlzIG5lZWQg
dG8KLSAgLy8gICAgIHJlbWFpbiBpbiB0aGUgaGVhZGVyLgotICAvLwotICAvLyAgMy4gRnVuY3Rp
b25zIG9uIHRoZSBtZXNzYWdlIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGRlcGVuZGVudCBiYXNlOiB0
aGUKLSAgLy8gICAgIGRlcGVuZGVudCBiYXNlIGNsYXNzIGRvd24gY2FzdHMgaXRzZWxmIHRvIHRo
ZSBtZXNzYWdlCi0gIC8vICAgICBpbXBsZW1lbnRhdGlvbiBjbGFzcyB0byBhY2Nlc3MgdGhlc2Ug
ZnVuY3Rpb25zICh0aGUgaGFzXyogYml0Ci0gIC8vICAgICBtYW5pcHVsYXRpb24gZnVuY3Rpb25z
KS4gVW5saWtlICMxLCB0aGVzZSBmdW5jdGlvbnMgbXVzdAotICAvLyAgICAgdW5jb25kaXRpb25h
bGx5IHJlbWFpbiBpbiB0aGUgaGVhZGVyLiBUaGVzZSBhcmUgZW1pdHRlZCBieQotICAvLyAgICAg
R2VuZXJhdGVEZXBlbmRlbnRJbmxpbmVNZXRob2RzLCBldmVuIHRob3VnaCB0aGV5IGFyZSBub3Qg
YWN0dWFsbHkKLSAgLy8gICAgIGRlcGVuZGVudC4KLQotICBwcmludGVyLT5QcmludCgiI2lmICFQ
Uk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlNcbiIpOwotICAvLyBHZW5lcmF0ZSBjbGFzcyBp
bmxpbmUgbWV0aG9kcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+bWVzc2FnZV90eXBl
X2NvdW50KCk7IGkrKykgewotICAgIGlmIChpID4gMCkgewotICAgICAgcHJpbnRlci0+UHJpbnQo
a1RoaW5TZXBhcmF0b3IpOwotICAgICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gICAgfQotICAg
IG1lc3NhZ2VfZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlSW5saW5lTWV0aG9kcyhwcmludGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc19p
bmxpbmUgPSAqLyB0cnVlKTsKLSAgfQotICBwcmludGVyLT5QcmludCgiI2VuZGlmICAvLyAhUFJP
VE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTXG4iKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8
IGZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKGkgPiAwKSB7Ci0g
ICAgICBwcmludGVyLT5QcmludChrVGhpblNlcGFyYXRvcik7Ci0gICAgICBwcmludGVyLT5Qcmlu
dCgiXG4iKTsKLSAgICB9Ci0gICAgLy8gTWV0aG9kcyBvZiB0aGUgZGVwZW5kZW50IGJhc2UgY2xh
c3MgbXVzdCBhbHdheXMgYmUgaW5saW5lIGluIHRoZSBoZWFkZXIuCi0gICAgbWVzc2FnZV9nZW5l
cmF0b3JzX1tpXS0+R2VuZXJhdGVEZXBlbmRlbnRJbmxpbmVNZXRob2RzKHByaW50ZXIpOwotICB9
Ci19Ci0KLXZvaWQgRmlsZUdlbmVyYXRvcjo6R2VuZXJhdGVQcm90bzJOYW1lc3BhY2VFbnVtU3Bl
Y2lhbGl6YXRpb25zKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIEVtaXQgR2V0
RW51bURlc2NyaXB0b3Igc3BlY2lhbGl6YXRpb25zIGludG8gZ29vZ2xlOjpwcm90b2J1ZiBuYW1l
c3BhY2U6Ci0gIGlmIChIYXNFbnVtRGVmaW5pdGlvbnMoZmlsZV8pKSB7Ci0gICAgLy8gVGhlIFNX
SUcgY29uZGl0aW9uYWwgaXMgdG8gYXZvaWQgYSBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UKLSAg
ICAvLyAoYnVnIDE5ODQ5NjQpIGluIHN3aWctMS4zLjIxIHJlc3VsdGluZyBmcm9tIHRoZSBmb2xs
b3dpbmcgc3ludGF4OgotICAgIC8vICAgbmFtZXNwYWNlIFggeyB2b2lkIFk8Wjo6Vz4oKTsgfQot
ICAgIC8vIHdoaWNoIGFwcGVhcnMgaW4gR2V0RW51bURlc2NyaXB0b3IoKSBzcGVjaWFsaXphdGlv
bnMuCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJcbiIKLSAgICAgICAgIiNpZm5kZWYg
U1dJR1xuIgotICAgICAgICAibmFtZXNwYWNlIGdvb2dsZSB7XG5uYW1lc3BhY2UgcHJvdG9idWYg
e1xuIgotICAgICAgICAiXG4iKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5tZXNz
YWdlX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgICBtZXNzYWdlX2dlbmVyYXRvcnNfW2ldLT5H
ZW5lcmF0ZUdldEVudW1EZXNjcmlwdG9yU3BlY2lhbGl6YXRpb25zKHByaW50ZXIpOwotICAgIH0K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5lbnVtX3R5cGVfY291bnQoKTsgaSsrKSB7
Ci0gICAgICBlbnVtX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZUdldEVudW1EZXNjcmlwdG9yU3Bl
Y2lhbGl6YXRpb25zKHByaW50ZXIpOwotICAgIH0KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgIlxuIgotICAgICAgICAifSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmXG59ICAvLyBuYW1lc3Bh
Y2UgZ29vZ2xlXG4iCi0gICAgICAgICIjZW5kaWYgIC8vIFNXSUdcbiIpOwotICB9Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNw
YWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9maWxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3BwL2NwcF9maWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVk
Y2Y2OTJiY2RlYWYwM2ViYjI4NDdkM2VhNDc5Mzk5OTQ4MDFhZDEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfZmlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29t
IChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBk
ZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQot
I2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1BQX0ZJTEVfSF9fCi0jZGVmaW5lIEdP
T0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DUFBfRklMRV9IX18KLQotI2luY2x1ZGUgPG1lbW9yeT4K
LSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9z
aGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9y
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX29wdGlvbnMuaD4KLQotbmFtZXNwYWNlIGdvb2ds
ZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotICBjbGFzcyBGaWxlRGVzY3JpcHRvcjsgICAgICAg
IC8vIGRlc2NyaXB0b3IuaAotICBuYW1lc3BhY2UgaW8gewotICAgIGNsYXNzIFByaW50ZXI7ICAg
ICAgICAgICAgIC8vIHByaW50ZXIuaAotICB9Ci19Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGNwcCB7Ci0KLWNsYXNzIEVudW1HZW5lcmF0
b3I7ICAgICAgICAgICAvLyBlbnVtLmgKLWNsYXNzIE1lc3NhZ2VHZW5lcmF0b3I7ICAgICAgICAv
LyBtZXNzYWdlLmgKLWNsYXNzIFNlcnZpY2VHZW5lcmF0b3I7ICAgICAgICAvLyBzZXJ2aWNlLmgK
LWNsYXNzIEV4dGVuc2lvbkdlbmVyYXRvcjsgICAgICAvLyBleHRlbnNpb24uaAotCi1jbGFzcyBG
aWxlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIC8vIFNlZSBnZW5lcmF0b3IuY2MgZm9yIHRoZSBt
ZWFuaW5nIG9mIGRsbGV4cG9ydF9kZWNsLgotICBGaWxlR2VuZXJhdG9yKGNvbnN0IEZpbGVEZXNj
cmlwdG9yKiBmaWxlLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKTsKLSAgfkZpbGVHZW5lcmF0b3Io
KTsKLQotICAvLyBpbmZvX3BhdGgsIGlmIG5vbi1lbXB0eSwgc2hvdWxkIGJlIHRoZSBwYXRoIChy
ZWxhdGl2ZSB0byBwcmludGVyJ3Mgb3V0cHV0KQotICAvLyB0byB0aGUgbWV0YWRhdGEgZmlsZSBk
ZXNjcmliaW5nIHRoaXMgcHJvdG8gaGVhZGVyLgotICB2b2lkIEdlbmVyYXRlUHJvdG9IZWFkZXIo
aW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJpbmcmIGluZm9fcGF0aCk7Ci0gIC8vIGluZm9fcGF0aCwgaWYgbm9uLWVtcHR5LCBzaG91bGQg
YmUgdGhlIHBhdGggKHJlbGF0aXZlIHRvIHByaW50ZXIncyBvdXRwdXQpCi0gIC8vIHRvIHRoZSBt
ZXRhZGF0YSBmaWxlIGRlc2NyaWJpbmcgdGhpcyBQQiBoZWFkZXIuCi0gIHZvaWQgR2VuZXJhdGVQ
QkhlYWRlcihpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cmluZyYgaW5mb19wYXRoKTsKLSAgdm9pZCBHZW5lcmF0ZVNvdXJjZShpbzo6UHJpbnRl
ciogcHJpbnRlcik7Ci0KLSBwcml2YXRlOgotICAvLyBJbnRlcm5hbCB0eXBlIHVzZWQgYnkgR2Vu
ZXJhdGVGb3J3YXJkRGVjbGFyYXRpb25zIChkZWZpbmVkIGluIGZpbGUuY2MpLgotICBjbGFzcyBG
b3J3YXJkRGVjbGFyYXRpb25zOwotCi0gIC8vIEdlbmVyYXRlIHRoZSBCdWlsZERlc2NyaXB0b3Jz
KCkgcHJvY2VkdXJlLCB3aGljaCBidWlsZHMgYWxsIGRlc2NyaXB0b3JzCi0gIC8vIGZvciB0eXBl
cyBkZWZpbmVkIGluIHRoZSBmaWxlLgotICB2b2lkIEdlbmVyYXRlQnVpbGREZXNjcmlwdG9ycyhp
bzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgdm9pZCBHZW5lcmF0ZU5hbWVzcGFjZU9wZW5lcnMo
aW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlTmFtZXNwYWNlQ2xvc2Vycyhp
bzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8gRm9yIG90aGVyIGltcG9ydHMsIGdlbmVyYXRl
cyB0aGVpciBmb3J3YXJkLWRlY2xhcmF0aW9ucy4KLSAgdm9pZCBHZW5lcmF0ZUZvcndhcmREZWNs
YXJhdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIC8vIEludGVybmFsIGhlbHBlciB1
c2VkIGJ5IEdlbmVyYXRlRm9yd2FyZERlY2xhcmF0aW9uczogZmlsbHMgJ2RlY2xzJwotICAvLyB3
aXRoIGFsbCBuZWNlc3NhcnkgZm9yd2FyZC1kZWNsYXJhdGlvbnMgZm9yIHRoaXMgZmlsZSBhbmQg
aXRzCi0gIC8vIHRyYW5zaWVudCBkZXBlZG5lbmNpZXMuCi0gIHZvaWQgRmlsbEZvcndhcmREZWNs
YXJhdGlvbnMoRm9yd2FyZERlY2xhcmF0aW9ucyogZGVjbHMpOwotCi0gIC8vIEdlbmVyYXRlcyB0
b3Agb3IgYm90dG9tIG9mIGEgaGVhZGVyIGZpbGUuCi0gIHZvaWQgR2VuZXJhdGVUb3BIZWFkZXJH
dWFyZChpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0cmluZyYgZmlsZW5hbWVfaWRlbnRpZmllcik7Ci0gIHZvaWQgR2VuZXJhdGVCb3R0
b21IZWFkZXJHdWFyZChpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZmlsZW5hbWVfaWRlbnRpZmllcik7Ci0KLSAgLy8g
R2VuZXJhdGVzICNpbmNsdWRlIGRpcmVjdGl2ZXMuCi0gIHZvaWQgR2VuZXJhdGVMaWJyYXJ5SW5j
bHVkZXMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlRGVwZW5kZW5jeUlu
Y2x1ZGVzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBHZW5lcmF0ZSBhIHByYWdtYSB0
byBwdWxsIGluIG1ldGFkYXRhIHVzaW5nIHRoZSBnaXZlbiBpbmZvX3BhdGggKGlmCi0gIC8vIG5v
bi1lbXB0eSkuIGluZm9fcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gcHJpbnRlcidzIG91dHB1
dC4KLSAgdm9pZCBHZW5lcmF0ZU1ldGFkYXRhUHJhZ21hKGlvOjpQcmludGVyKiBwcmludGVyLCBj
b25zdCBzdHJpbmcmIGluZm9fcGF0aCk7Ci0KLSAgLy8gR2VuZXJhdGVzIGEgY291cGxlIG9mIGRp
ZmZlcmVudCBwaWVjZXMgYmVmb3JlIGRlZmluaXRpb25zOgotICB2b2lkIEdlbmVyYXRlR2xvYmFs
U3RhdGVGdW5jdGlvbkRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8g
R2VuZXJhdGVzIHR5cGVzIGZvciBjbGFzc2VzLgotICB2b2lkIEdlbmVyYXRlTWVzc2FnZURlZmlu
aXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBHZW5lcmF0ZXMgZm9yd2FyZC1k
ZWNsYXJhdGlvbnMgZm9yIGp1c3QgdGhpcyBmaWxlJ3MgY2xhc3Nlcy4gVGhpcyBpcwotICAvLyB1
c2VkIGZvciAucGIuaCBoZWFkZXJzLCBidXQgbm90IGluIHByb3RvX2ggbW9kZS4KLSAgdm9pZCBH
ZW5lcmF0ZU1lc3NhZ2VGb3J3YXJkRGVjbGFyYXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKTsK
LQotICAvLyBGaWxscyBpbiB0eXBlcyBmb3IgZm9yd2FyZCBkZWNsYXJhdGlvbnMuIFRoaXMgaXMg
dXNlZCBpbnRlcm5hbGx5LCBhbmQKLSAgLy8gYWxzbyBieSBvdGhlciBGaWxlR2VuZXJhdG9ycyB0
byBkZXRlcm1pbmUgaW1wb3J0cycgZGVjbGFyYXRpb25zLgotICB2b2lkIEZpbGxNZXNzYWdlRm9y
d2FyZERlY2xhcmF0aW9ucyhGb3J3YXJkRGVjbGFyYXRpb25zKiBkZWNscyk7Ci0gIHZvaWQgRmls
bE1lc3NhZ2VEZWZpbml0aW9ucyhGb3J3YXJkRGVjbGFyYXRpb25zKiBkZWNscyk7Ci0KLSAgLy8g
R2VuZXJhdGVzIGVudW0gZGVmaW5pdGlvbnMuCi0gIHZvaWQgR2VuZXJhdGVFbnVtRm9yd2FyZERl
Y2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgRmlsbEVudW1Gb3J3YXJk
RGVjbGFyYXRpb25zKEZvcndhcmREZWNsYXJhdGlvbnMqIGRlY2xzKTsKLSAgdm9pZCBHZW5lcmF0
ZUVudW1EZWZpbml0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8gR2VuZXJhdGVz
IGdlbmVyaWMgc2VydmljZSBkZWZpbml0aW9ucy4KLSAgdm9pZCBHZW5lcmF0ZVNlcnZpY2VEZWZp
bml0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8gR2VuZXJhdGVzIGV4dGVuc2lv
biBpZGVudGlmaWVycy4KLSAgdm9pZCBHZW5lcmF0ZUV4dGVuc2lvbklkZW50aWZpZXJzKGlvOjpQ
cmludGVyKiBwcmludGVyKTsKLQotICAvLyBHZW5lcmF0ZXMgaW5saW5lIGZ1bmN0aW9uIGRlZmlu
dGlvbnMuCi0gIHZvaWQgR2VuZXJhdGVJbmxpbmVGdW5jdGlvbkRlZmluaXRpb25zKGlvOjpQcmlu
dGVyKiBwcmludGVyKTsKLQotICB2b2lkIEdlbmVyYXRlUHJvdG8yTmFtZXNwYWNlRW51bVNwZWNp
YWxpemF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgY29uc3QgRmlsZURlc2NyaXB0
b3IqIGZpbGVfOwotICBjb25zdCBPcHRpb25zIG9wdGlvbnNfOwotCi0gIGdvb2dsZTo6cHJvdG9i
dWY6OnNjb3BlZF9hcnJheTxnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2VHZW5l
cmF0b3I+ID4gbWVzc2FnZV9nZW5lcmF0b3JzXzsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVk
X2FycmF5PGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8RW51bUdlbmVyYXRvcj4gPiBlbnVt
X2dlbmVyYXRvcnNfOwotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfYXJyYXk8Z29vZ2xlOjpw
cm90b2J1Zjo6c2NvcGVkX3B0cjxTZXJ2aWNlR2VuZXJhdG9yPiA+IHNlcnZpY2VfZ2VuZXJhdG9y
c187Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9hcnJheTxnb29nbGU6OnByb3RvYnVmOjpz
Y29wZWRfcHRyPEV4dGVuc2lvbkdlbmVyYXRvcj4gPiBleHRlbnNpb25fZ2VuZXJhdG9yc187Ci0K
LSAgLy8gRS5nLiBpZiB0aGUgcGFja2FnZSBpcyBmb28uYmFyLCBwYWNrYWdlX3BhcnRzXyBpcyB7
ImZvbyIsICJiYXIifS4KLSAgdmVjdG9yPHN0cmluZz4gcGFja2FnZV9wYXJ0c187Ci0KLSAgR09P
R0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEZpbGVHZW5lcmF0b3IpOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIGNwcAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVf
UFJPVE9CVUZfQ09NUElMRVJfQ1BQX0ZJTEVfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvY3BwL2NwcF9nZW5lcmF0b3IuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3BwL2NwcF9nZW5lcmF0b3IuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDMxZDE4OWMyNTVhYWU4ZTM0OTZkMjBhNDI3MzgzNmQ3YTM2N2M0MDMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2NwcC9jcHBfZ2VuZXJhdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRv
bkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9j
b2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5k
IG90aGVycy4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2dl
bmVyYXRvci5oPgotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5k
ZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRf
cHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZmlsZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jcHAvY3BwX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
aW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3Ry
ZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVy
IHsKLW5hbWVzcGFjZSBjcHAgewotCi1DcHBHZW5lcmF0b3I6OkNwcEdlbmVyYXRvcigpIHt9Ci1D
cHBHZW5lcmF0b3I6On5DcHBHZW5lcmF0b3IoKSB7fQotCi1ib29sIENwcEdlbmVyYXRvcjo6R2Vu
ZXJhdGUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR2VuZXJhdG9yQ29udGV4dCogZ2VuZXJhdG9yX2NvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyaW5nKiBlcnJvcikgY29uc3QgewotICB2ZWN0b3I8cGFpcjxzdHJpbmcs
IHN0cmluZz4gPiBvcHRpb25zOwotICBQYXJzZUdlbmVyYXRvclBhcmFtZXRlcihwYXJhbWV0ZXIs
ICZvcHRpb25zKTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBwYXJzZSBnZW5lcmF0b3Igb3B0aW9u
cwotCi0gIC8vIFRPRE8oa2VudG9uKTogIElmIHdlIGV2ZXIgaGF2ZSBtb3JlIG9wdGlvbnMsIHdl
IG1heSB3YW50IHRvIGNyZWF0ZSBhCi0gIC8vICAgY2xhc3MgdGhhdCBlbmNhcHN1bGF0ZXMgdGhl
bSB3aGljaCB3ZSBjYW4gcGFzcyBkb3duIHRvIGFsbCB0aGUKLSAgLy8gICBnZW5lcmF0b3IgY2xh
c3Nlcy4gIEN1cnJlbnRseSB3ZSBwYXNzIGRsbGV4cG9ydF9kZWNsIGRvd24gdG8gYWxsIG9mCi0g
IC8vICAgdGhlbSB2aWEgdGhlIGNvbnN0cnVjdG9ycywgYnV0IHdlIGRvbid0IHdhbnQgdG8gaGF2
ZSB0byBhZGQgYW5vdGhlcgotICAvLyAgIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBmb3IgZXZlcnkg
b3B0aW9uLgotCi0gIC8vIElmIHRoZSBkbGxleHBvcnRfZGVjbCBvcHRpb24gaXMgcGFzc2VkIHRv
IHRoZSBjb21waWxlciwgd2UgbmVlZCB0byB3cml0ZQotICAvLyBpdCBpbiBmcm9udCBvZiBldmVy
eSBzeW1ib2wgdGhhdCBzaG91bGQgYmUgZXhwb3J0ZWQgaWYgdGhpcyAucHJvdG8gaXMKLSAgLy8g
Y29tcGlsZWQgaW50byBhIFdpbmRvd3MgRExMLiAgRS5nLiwgaWYgdGhlIHVzZXIgaW52b2tlcyB0
aGUgcHJvdG9jb2wKLSAgLy8gY29tcGlsZXIgYXM6Ci0gIC8vICAgcHJvdG9jIC0tY3BwX291dD1k
bGxleHBvcnRfZGVjbD1GT09fRVhQT1JUOm91dGRpciBmb28ucHJvdG8KLSAgLy8gdGhlbiB3ZSds
bCBkZWZpbmUgY2xhc3NlcyBsaWtlIHRoaXM6Ci0gIC8vICAgY2xhc3MgRk9PX0VYUE9SVCBGb28g
ewotICAvLyAgICAgLi4uCi0gIC8vICAgfQotICAvLyBGT09fRVhQT1JUIGlzIGEgbWFjcm8gd2hp
Y2ggc2hvdWxkIGV4cGFuZCB0byBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgb3IKLSAgLy8gX19kZWNs
c3BlYyhkbGxpbXBvcnQpIGRlcGVuZGluZyBvbiB3aGF0IGlzIGJlaW5nIGNvbXBpbGVkLgotICAv
LwotICBPcHRpb25zIGZpbGVfb3B0aW9uczsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IG9wdGlv
bnMuc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAob3B0aW9uc1tpXS5maXJzdCA9PSAiZGxsZXhwb3J0
X2RlY2wiKSB7Ci0gICAgICBmaWxlX29wdGlvbnMuZGxsZXhwb3J0X2RlY2wgPSBvcHRpb25zW2ld
LnNlY29uZDsKLSAgICB9IGVsc2UgaWYgKG9wdGlvbnNbaV0uZmlyc3QgPT0gInNhZmVfYm91bmRh
cnlfY2hlY2siKSB7Ci0gICAgICBmaWxlX29wdGlvbnMuc2FmZV9ib3VuZGFyeV9jaGVjayA9IHRy
dWU7Ci0gICAgfSBlbHNlIGlmIChvcHRpb25zW2ldLmZpcnN0ID09ICJhbm5vdGF0ZV9oZWFkZXJz
IikgewotICAgICAgZmlsZV9vcHRpb25zLmFubm90YXRlX2hlYWRlcnMgPSB0cnVlOwotICAgIH0g
ZWxzZSBpZiAob3B0aW9uc1tpXS5maXJzdCA9PSAiYW5ub3RhdGlvbl9wcmFnbWFfbmFtZSIpIHsK
LSAgICAgIGZpbGVfb3B0aW9ucy5hbm5vdGF0aW9uX3ByYWdtYV9uYW1lID0gb3B0aW9uc1tpXS5z
ZWNvbmQ7Ci0gICAgfSBlbHNlIGlmIChvcHRpb25zW2ldLmZpcnN0ID09ICJhbm5vdGF0aW9uX2d1
YXJkX25hbWUiKSB7Ci0gICAgICBmaWxlX29wdGlvbnMuYW5ub3RhdGlvbl9ndWFyZF9uYW1lID0g
b3B0aW9uc1tpXS5zZWNvbmQ7Ci0gICAgfSBlbHNlIGlmIChvcHRpb25zW2ldLmZpcnN0ID09ICJs
aXRlIikgewotICAgICAgZmlsZV9vcHRpb25zLmVuZm9yY2VfbGl0ZSA9IHRydWU7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICplcnJvciA9ICJVbmtub3duIGdlbmVyYXRvciBvcHRpb246ICIgKyBvcHRp
b25zW2ldLmZpcnN0OwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLQotICBzdHJpbmcgYmFzZW5hbWUgPSBTdHJpcFByb3RvKGZpbGUtPm5hbWUoKSk7
Ci0KLSAgRmlsZUdlbmVyYXRvciBmaWxlX2dlbmVyYXRvcihmaWxlLCBmaWxlX29wdGlvbnMpOwot
Ci0gIC8vIEdlbmVyYXRlIGhlYWRlcihzKS4KLSAgaWYgKGZpbGVfb3B0aW9ucy5wcm90b19oKSB7
Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxpbzo6WmVyb0NvcHlPdXRwdXRTdHJl
YW0+IG91dHB1dCgKLSAgICAgICAgZ2VuZXJhdG9yX2NvbnRleHQtPk9wZW4oYmFzZW5hbWUgKyAi
LnByb3RvLmgiKSk7Ci0gICAgR2VuZXJhdGVkQ29kZUluZm8gYW5ub3RhdGlvbnM7Ci0gICAgaW86
OkFubm90YXRpb25Qcm90b0NvbGxlY3RvcjxHZW5lcmF0ZWRDb2RlSW5mbz4gYW5ub3RhdGlvbl9j
b2xsZWN0b3IoCi0gICAgICAgICZhbm5vdGF0aW9ucyk7Ci0gICAgc3RyaW5nIGluZm9fcGF0aCA9
IGJhc2VuYW1lICsgIi5wcm90by5oLm1ldGEiOwotICAgIGlvOjpQcmludGVyIHByaW50ZXIob3V0
cHV0LmdldCgpLCAnJCcsIGZpbGVfb3B0aW9ucy5hbm5vdGF0ZV9oZWFkZXJzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJmFubm90YXRpb25fY29sbGVj
dG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVM
TCk7Ci0gICAgZmlsZV9nZW5lcmF0b3IuR2VuZXJhdGVQcm90b0hlYWRlcigKLSAgICAgICAgJnBy
aW50ZXIsIGZpbGVfb3B0aW9ucy5hbm5vdGF0ZV9oZWFkZXJzID8gaW5mb19wYXRoIDogIiIpOwot
ICAgIGlmIChmaWxlX29wdGlvbnMuYW5ub3RhdGVfaGVhZGVycykgewotICAgICAgZ29vZ2xlOjpw
cm90b2J1Zjo6c2NvcGVkX3B0cjxpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0+IGluZm9fb3V0cHV0
KAotICAgICAgICAgIGdlbmVyYXRvcl9jb250ZXh0LT5PcGVuKGluZm9fcGF0aCkpOwotICAgICAg
YW5ub3RhdGlvbnMuU2VyaWFsaXplVG9aZXJvQ29weVN0cmVhbShpbmZvX291dHB1dC5nZXQoKSk7
Ci0gICAgfQotICB9Ci0KLSAgYmFzZW5hbWUuYXBwZW5kKCIucGIiKTsKLSAgewotICAgIGdvb2ds
ZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8aW86Olplcm9Db3B5T3V0cHV0U3RyZWFtPiBvdXRwdXQo
Ci0gICAgICAgIGdlbmVyYXRvcl9jb250ZXh0LT5PcGVuKGJhc2VuYW1lICsgIi5oIikpOwotICAg
IEdlbmVyYXRlZENvZGVJbmZvIGFubm90YXRpb25zOwotICAgIGlvOjpBbm5vdGF0aW9uUHJvdG9D
b2xsZWN0b3I8R2VuZXJhdGVkQ29kZUluZm8+IGFubm90YXRpb25fY29sbGVjdG9yKAotICAgICAg
ICAmYW5ub3RhdGlvbnMpOwotICAgIHN0cmluZyBpbmZvX3BhdGggPSBiYXNlbmFtZSArICIuaC5t
ZXRhIjsKLSAgICBpbzo6UHJpbnRlciBwcmludGVyKG91dHB1dC5nZXQoKSwgJyQnLCBmaWxlX29w
dGlvbnMuYW5ub3RhdGVfaGVhZGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/ICZhbm5vdGF0aW9uX2NvbGxlY3RvcgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpOwotICAgIGZpbGVfZ2VuZXJhdG9y
LkdlbmVyYXRlUEJIZWFkZXIoCi0gICAgICAgICZwcmludGVyLCBmaWxlX29wdGlvbnMuYW5ub3Rh
dGVfaGVhZGVycyA/IGluZm9fcGF0aCA6ICIiKTsKLSAgICBpZiAoZmlsZV9vcHRpb25zLmFubm90
YXRlX2hlYWRlcnMpIHsKLSAgICAgIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8aW86Olpl
cm9Db3B5T3V0cHV0U3RyZWFtPiBpbmZvX291dHB1dCgKLSAgICAgICAgICBnZW5lcmF0b3JfY29u
dGV4dC0+T3BlbihpbmZvX3BhdGgpKTsKLSAgICAgIGFubm90YXRpb25zLlNlcmlhbGl6ZVRvWmVy
b0NvcHlTdHJlYW0oaW5mb19vdXRwdXQuZ2V0KCkpOwotICAgIH0KLSAgfQotCi0gIC8vIEdlbmVy
YXRlIGNjIGZpbGUuCi0gIHsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPGlvOjpa
ZXJvQ29weU91dHB1dFN0cmVhbT4gb3V0cHV0KAotICAgICAgICBnZW5lcmF0b3JfY29udGV4dC0+
T3BlbihiYXNlbmFtZSArICIuY2MiKSk7Ci0gICAgaW86OlByaW50ZXIgcHJpbnRlcihvdXRwdXQu
Z2V0KCksICckJyk7Ci0gICAgZmlsZV9nZW5lcmF0b3IuR2VuZXJhdGVTb3VyY2UoJnByaW50ZXIp
OwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8v
IG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3Bw
L2NwcF9nZW5lcmF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2dl
bmVyYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDUxN2NmNGE1YmExYTlk
MGE3YjUyZmNlMWU1MjFmYWRhOGIwYTFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2dlbmVy
YXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBW
YXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQot
Ly8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIEdlbmVy
YXRlcyBDKysgY29kZSBmb3IgYSBnaXZlbiAucHJvdG8gZmlsZS4KLQotI2lmbmRlZiBHT09HTEVf
UFJPVE9CVUZfQ09NUElMRVJfQ1BQX0dFTkVSQVRPUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RP
QlVGX0NPTVBJTEVSX0NQUF9HRU5FUkFUT1JfSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+Ci0KLW5hbWVz
cGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7
Ci1uYW1lc3BhY2UgY3BwIHsKLQotLy8gQ29kZUdlbmVyYXRvciBpbXBsZW1lbnRhdGlvbiB3aGlj
aCBnZW5lcmF0ZXMgYSBDKysgc291cmNlIGZpbGUgYW5kCi0vLyBoZWFkZXIuICBJZiB5b3UgY3Jl
YXRlIHlvdXIgb3duIHByb3RvY29sIGNvbXBpbGVyIGJpbmFyeSBhbmQgeW91IHdhbnQKLS8vIGl0
IHRvIHN1cHBvcnQgQysrIG91dHB1dCwgeW91IGNhbiBkbyBzbyBieSByZWdpc3RlcmluZyBhbiBp
bnN0YW5jZSBvZiB0aGlzCi0vLyBDb2RlR2VuZXJhdG9yIHdpdGggdGhlIENvbW1hbmRMaW5lSW50
ZXJmYWNlIGluIHlvdXIgbWFpbigpIGZ1bmN0aW9uLgotY2xhc3MgTElCUFJPVE9DX0VYUE9SVCBD
cHBHZW5lcmF0b3IgOiBwdWJsaWMgQ29kZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBDcHBHZW5l
cmF0b3IoKTsKLSAgfkNwcEdlbmVyYXRvcigpOwotCi0gIC8vIGltcGxlbWVudHMgQ29kZUdlbmVy
YXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wgR2Vu
ZXJhdGUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgY29uc3Qg
c3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yQ29udGV4dCogZ2Vu
ZXJhdG9yX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgc3RyaW5nKiBlcnJvcikgY29uc3Q7Ci0K
LSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQ3BwR2VuZXJh
dG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxl
cgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNl
bmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9HRU5FUkFUT1JfSF9fCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9oZWxwZXJzLmNjIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfaGVscGVycy5jYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMmFkNGQzNmE1ODM0ZDZlNWZjYWQ5MWFkNGY0MTJjMDllODVk
N2Q2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9oZWxwZXJzLmNjCisrKyAvZGV2L251bGwK
QEAgLTEsNzA0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24g
b3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQs
IEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxt
YXA+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9o
YXNoLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9oZWxw
ZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3Ry
dXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmg+Ci0K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNv
bXBpbGVyIHsKLW5hbWVzcGFjZSBjcHAgewotCi1uYW1lc3BhY2UgewotCi1zdGF0aWMgY29uc3Qg
Y2hhciBrQW55TWVzc2FnZU5hbWVbXSA9ICJBbnkiOwotc3RhdGljIGNvbnN0IGNoYXIga0FueVBy
b3RvRmlsZVtdID0gImdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8iOwotc3RhdGljIGNvbnN0IGNo
YXIga0dvb2dsZVByb3RvYnVmUHJlZml4W10gPSAiZ29vZ2xlL3Byb3RvYnVmLyI7Ci0KLXN0cmlu
ZyBEb3RzVG9VbmRlcnNjb3Jlcyhjb25zdCBzdHJpbmcmIG5hbWUpIHsKLSAgcmV0dXJuIFN0cmlu
Z1JlcGxhY2UobmFtZSwgIi4iLCAiXyIsIHRydWUpOwotfQotCi1zdHJpbmcgRG90c1RvQ29sb25z
KGNvbnN0IHN0cmluZyYgbmFtZSkgewotICByZXR1cm4gU3RyaW5nUmVwbGFjZShuYW1lLCAiLiIs
ICI6OiIsIHRydWUpOwotfQotCi1jb25zdCBjaGFyKiBjb25zdCBrS2V5d29yZExpc3RbXSA9IHsK
LSAgImFsaWduYXMiLCAiYWxpZ25vZiIsICJhbmQiLCAiYW5kX2VxIiwgImFzbSIsICJhdXRvIiwg
ImJpdGFuZCIsICJiaXRvciIsCi0gICJib29sIiwgImJyZWFrIiwgImNhc2UiLCAiY2F0Y2giLCAi
Y2hhciIsICJjbGFzcyIsICJjb21wbCIsICJjb25zdCIsCi0gICJjb25zdGV4cHIiLCAiY29uc3Rf
Y2FzdCIsICJjb250aW51ZSIsICJkZWNsdHlwZSIsICJkZWZhdWx0IiwgImRlbGV0ZSIsICJkbyIs
Ci0gICJkb3VibGUiLCAiZHluYW1pY19jYXN0IiwgImVsc2UiLCAiZW51bSIsICJleHBsaWNpdCIs
ICJleHBvcnQiLCAiZXh0ZXJuIiwKLSAgImZhbHNlIiwgImZsb2F0IiwgImZvciIsICJmcmllbmQi
LCAiZ290byIsICJpZiIsICJpbmxpbmUiLCAiaW50IiwgImxvbmciLAotICAibXV0YWJsZSIsICJu
YW1lc3BhY2UiLCAibmV3IiwgIm5vZXhjZXB0IiwgIm5vdCIsICJub3RfZXEiLCAiTlVMTCIsCi0g
ICJvcGVyYXRvciIsICJvciIsICJvcl9lcSIsICJwcml2YXRlIiwgInByb3RlY3RlZCIsICJwdWJs
aWMiLCAicmVnaXN0ZXIiLAotICAicmVpbnRlcnByZXRfY2FzdCIsICJyZXR1cm4iLCAic2hvcnQi
LCAic2lnbmVkIiwgInNpemVvZiIsICJzdGF0aWMiLAotICAic3RhdGljX2Fzc2VydCIsICJzdGF0
aWNfY2FzdCIsICJzdHJ1Y3QiLCAic3dpdGNoIiwgInRlbXBsYXRlIiwgInRoaXMiLAotICAidGhy
ZWFkX2xvY2FsIiwgInRocm93IiwgInRydWUiLCAidHJ5IiwgInR5cGVkZWYiLCAidHlwZWlkIiwg
InR5cGVuYW1lIiwKLSAgInVuaW9uIiwgInVuc2lnbmVkIiwgInVzaW5nIiwgInZpcnR1YWwiLCAi
dm9pZCIsICJ2b2xhdGlsZSIsICJ3Y2hhcl90IiwKLSAgIndoaWxlIiwgInhvciIsICJ4b3JfZXEi
Ci19OwotCi1oYXNoX3NldDxzdHJpbmc+IE1ha2VLZXl3b3Jkc01hcCgpIHsKLSAgaGFzaF9zZXQ8
c3RyaW5nPiByZXN1bHQ7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgR09PR0xFX0FSUkFZU0laRShr
S2V5d29yZExpc3QpOyBpKyspIHsKLSAgICByZXN1bHQuaW5zZXJ0KGtLZXl3b3JkTGlzdFtpXSk7
Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaGFzaF9zZXQ8c3RyaW5nPiBrS2V5d29yZHMg
PSBNYWtlS2V5d29yZHNNYXAoKTsKLQotLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBk
ZXNjcmlwdG9yIGhhcyBhbiBleHRlbnNpb24uIFRoaXMgaW5jbHVkZXMgaXRzCi0vLyBuZXN0ZWQg
dHlwZXMuCi1ib29sIEhhc0V4dGVuc2lvbihjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7
Ci0gIGlmIChkZXNjcmlwdG9yLT5leHRlbnNpb25fY291bnQoKSA+IDApIHsKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPm5lc3RlZF90eXBl
X2NvdW50KCk7ICsraSkgewotICAgIGlmIChIYXNFeHRlbnNpb24oZGVzY3JpcHRvci0+bmVzdGVk
X3R5cGUoaSkpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGZh
bHNlOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotc3RyaW5nIFVuZGVyc2NvcmVzVG9DYW1lbENh
c2UoY29uc3Qgc3RyaW5nJiBpbnB1dCwgYm9vbCBjYXBfbmV4dF9sZXR0ZXIpIHsKLSAgc3RyaW5n
IHJlc3VsdDsKLSAgLy8gTm90ZTogIEkgZGlzdHJ1c3QgY3R5cGUuaCBkdWUgdG8gbG9jYWxlcy4K
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7IGkrKykgewotICAgIGlmICgnYScg
PD0gaW5wdXRbaV0gJiYgaW5wdXRbaV0gPD0gJ3onKSB7Ci0gICAgICBpZiAoY2FwX25leHRfbGV0
dGVyKSB7Ci0gICAgICAgIHJlc3VsdCArPSBpbnB1dFtpXSArICgnQScgLSAnYScpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ICs9IGlucHV0W2ldOwotICAgICAgfQotICAgICAgY2Fw
X25leHRfbGV0dGVyID0gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICgnQScgPD0gaW5wdXRbaV0gJiYg
aW5wdXRbaV0gPD0gJ1onKSB7Ci0gICAgICAvLyBDYXBpdGFsIGxldHRlcnMgYXJlIGxlZnQgYXMt
aXMuCi0gICAgICByZXN1bHQgKz0gaW5wdXRbaV07Ci0gICAgICBjYXBfbmV4dF9sZXR0ZXIgPSBm
YWxzZTsKLSAgICB9IGVsc2UgaWYgKCcwJyA8PSBpbnB1dFtpXSAmJiBpbnB1dFtpXSA8PSAnOScp
IHsKLSAgICAgIHJlc3VsdCArPSBpbnB1dFtpXTsKLSAgICAgIGNhcF9uZXh0X2xldHRlciA9IHRy
dWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNhcF9uZXh0X2xldHRlciA9IHRydWU7Ci0gICAgfQot
ICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWNvbnN0IGNoYXIga1RoaWNrU2VwYXJhdG9yW10g
PQotICAiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PVxuIjsKLWNvbnN0IGNoYXIga1RoaW5TZXBhcmF0b3JbXSA9Ci0g
ICIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tXG4iOwotCi1zdHJpbmcgQ2xhc3NOYW1lKGNvbnN0IERlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IsIGJvb2wgcXVhbGlmaWVkKSB7Ci0KLSAgLy8gRmluZCAib3V0ZXIiLCB0aGUg
ZGVzY3JpcHRvciBvZiB0aGUgdG9wLWxldmVsIG1lc3NhZ2UgaW4gd2hpY2gKLSAgLy8gImRlc2Ny
aXB0b3IiIGlzIGVtYmVkZGVkLgotICBjb25zdCBEZXNjcmlwdG9yKiBvdXRlciA9IGRlc2NyaXB0
b3I7Ci0gIHdoaWxlIChvdXRlci0+Y29udGFpbmluZ190eXBlKCkgIT0gTlVMTCkgb3V0ZXIgPSBv
dXRlci0+Y29udGFpbmluZ190eXBlKCk7Ci0KLSAgY29uc3Qgc3RyaW5nJiBvdXRlcl9uYW1lID0g
b3V0ZXItPmZ1bGxfbmFtZSgpOwotICBzdHJpbmcgaW5uZXJfbmFtZSA9IGRlc2NyaXB0b3ItPmZ1
bGxfbmFtZSgpLnN1YnN0cihvdXRlcl9uYW1lLnNpemUoKSk7Ci0KLSAgaWYgKHF1YWxpZmllZCkg
ewotICAgIHJldHVybiAiOjoiICsgRG90c1RvQ29sb25zKG91dGVyX25hbWUpICsgRG90c1RvVW5k
ZXJzY29yZXMoaW5uZXJfbmFtZSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG91dGVyLT5uYW1l
KCkgKyBEb3RzVG9VbmRlcnNjb3Jlcyhpbm5lcl9uYW1lKTsKLSAgfQotfQotCi1zdHJpbmcgQ2xh
c3NOYW1lKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBlbnVtX2Rlc2NyaXB0b3IsIGJvb2wgcXVhbGlm
aWVkKSB7Ci0gIGlmIChlbnVtX2Rlc2NyaXB0b3ItPmNvbnRhaW5pbmdfdHlwZSgpID09IE5VTEwp
IHsKLSAgICBpZiAocXVhbGlmaWVkKSB7Ci0gICAgICByZXR1cm4gIjo6IiArIERvdHNUb0NvbG9u
cyhlbnVtX2Rlc2NyaXB0b3ItPmZ1bGxfbmFtZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0
dXJuIGVudW1fZGVzY3JpcHRvci0+bmFtZSgpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBzdHJp
bmcgcmVzdWx0ID0gQ2xhc3NOYW1lKGVudW1fZGVzY3JpcHRvci0+Y29udGFpbmluZ190eXBlKCks
IHF1YWxpZmllZCk7Ci0gICAgcmVzdWx0ICs9ICdfJzsKLSAgICByZXN1bHQgKz0gZW51bV9kZXNj
cmlwdG9yLT5uYW1lKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi0KLXN0cmluZyBE
ZXBlbmRlbnRCYXNlQ2xhc3NUZW1wbGF0ZU5hbWUoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRv
cikgewotICByZXR1cm4gQ2xhc3NOYW1lKGRlc2NyaXB0b3IsIGZhbHNlKSArICJfSW50ZXJuYWxC
YXNlIjsKLX0KLQotc3RyaW5nIFN1cGVyQ2xhc3NOYW1lKGNvbnN0IERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpIHsKLSAgcmV0dXJuIEhhc0Rlc2NyaXB0b3JN
ZXRob2RzKGRlc2NyaXB0b3ItPmZpbGUoKSwgb3B0aW9ucykKLSAgICAgICAgICAgICA/ICI6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UiCi0gICAgICAgICAgICAgOiAiOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlTGl0ZSI7Ci19Ci0KLXN0cmluZyBEZXBlbmRlbnRCYXNlRG93bkNhc3QoKSB7
Ci0gIHJldHVybiAicmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyktPiI7Ci19Ci0KLXN0cmluZyBE
ZXBlbmRlbnRCYXNlQ29uc3REb3duQ2FzdCgpIHsKLSAgcmV0dXJuICJyZWludGVycHJldF9jYXN0
PGNvbnN0IFQqPih0aGlzKS0+IjsKLX0KLQotc3RyaW5nIEZpZWxkTmFtZShjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHN0cmluZyByZXN1bHQgPSBmaWVsZC0+bmFtZSgpOwotICBM
b3dlclN0cmluZygmcmVzdWx0KTsKLSAgaWYgKGtLZXl3b3Jkcy5jb3VudChyZXN1bHQpID4gMCkg
ewotICAgIHJlc3VsdC5hcHBlbmQoIl8iKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1z
dHJpbmcgRW51bVZhbHVlTmFtZShjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBlbnVtX3ZhbHVl
KSB7Ci0gIHN0cmluZyByZXN1bHQgPSBlbnVtX3ZhbHVlLT5uYW1lKCk7Ci0gIGlmIChrS2V5d29y
ZHMuY291bnQocmVzdWx0KSA+IDApIHsKLSAgICByZXN1bHQuYXBwZW5kKCJfIik7Ci0gIH0KLSAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotc3RyaW5nIEZpZWxkQ29uc3RhbnROYW1lKGNvbnN0IEZpZWxk
RGVzY3JpcHRvciAqZmllbGQpIHsKLSAgc3RyaW5nIGZpZWxkX25hbWUgPSBVbmRlcnNjb3Jlc1Rv
Q2FtZWxDYXNlKGZpZWxkLT5uYW1lKCksIHRydWUpOwotICBzdHJpbmcgcmVzdWx0ID0gImsiICsg
ZmllbGRfbmFtZSArICJGaWVsZE51bWJlciI7Ci0KLSAgaWYgKCFmaWVsZC0+aXNfZXh0ZW5zaW9u
KCkgJiYKLSAgICAgIGZpZWxkLT5jb250YWluaW5nX3R5cGUoKS0+RmluZEZpZWxkQnlDYW1lbGNh
c2VOYW1lKAotICAgICAgICBmaWVsZC0+Y2FtZWxjYXNlX25hbWUoKSkgIT0gZmllbGQpIHsKLSAg
ICAvLyBUaGlzIGZpZWxkJ3MgY2FtZWxjYXNlIG5hbWUgaXMgbm90IHVuaXF1ZS4gIEFzIGEgaGFj
aywgYWRkIHRoZSBmaWVsZAotICAgIC8vIG51bWJlciB0byB0aGUgY29uc3RhbnQgbmFtZS4gIFRo
aXMgbWFrZXMgdGhlIGNvbnN0YW50IHJhdGhlciB1c2VsZXNzLAotICAgIC8vIGJ1dCB3aGF0IGNh
biB3ZSBkbz8KLSAgICByZXN1bHQgKz0gIl8iICsgU2ltcGxlSXRvYShmaWVsZC0+bnVtYmVyKCkp
OwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJc0ZpZWxkRGVwZW5kZW50KGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgaWYgKGZpZWxkLT5jb250YWluaW5nX29u
ZW9mKCkgIT0gTlVMTCAmJgotICAgICAgZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX1NUUklORykgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGlmIChmaWVs
ZC0+aXNfbWFwKCkpIHsKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBtYXBfZGVzY3JpcHRvciA9IGZp
ZWxkLT5tZXNzYWdlX3R5cGUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcF9kZXNjcmlw
dG9yLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICAgIGlmIChJc0ZpZWxkRGVwZW5kZW50KG1h
cF9kZXNjcmlwdG9yLT5maWVsZChpKSkpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoZmllbGQtPmNwcF90eXBlKCkg
IT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLSAgaWYgKGZpZWxkLT5jb250YWluaW5nX29uZW9mKCkgIT0gTlVMTCkgewotICAgIC8v
IE9uZW9mIGZpZWxkcyB3aWxsIGFsd2F5cyBiZSBkZXBlbmRlbnQuCi0gICAgLy8KLSAgICAvLyBU
aGlzIGlzIGEgdW5pcXVlIGNhc2UgZm9yIGZpZWxkIGNvZGVnZW4uIEZpZWxkIGdlbmVyYXRvcnMg
YXJlCi0gICAgLy8gcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgYWxsIHRoZSBmaWVsZC1zcGVj
aWZpYyBhY2Nlc3NvcgotICAgIC8vIGZ1bmN0aW9ucywgZXhjZXB0IGZvciB0aGUgY2xlYXJfKigp
IGZ1bmN0aW9uOyBpbnN0ZWFkLCBmaWVsZAotICAgIC8vIGdlbmVyYXRvcnMgcHJvZHVjZSBpbmxp
bmUgY2xlYXJpbmcgY29kZS4KLSAgICAvLwotICAgIC8vIEZvciBub24tb25lb2YgZmllbGRzLCB0
aGUgTWVzc2FnZSBjbGFzcyB1c2VzIHRoZSBpbmxpbmUgY2xlYXJpbmcKLSAgICAvLyBjb2RlIHRv
IGRlZmluZSB0aGUgZmllbGQncyBjbGVhcl8qKCkgZnVuY3Rpb24sIGFzIHdlbGwgYXMgaW4gdGhl
Ci0gICAgLy8gZGVzdHJ1Y3Rvci4gRm9yIG9uZW9mIGZpZWxkcywgdGhlIE1lc3NhZ2UgY2xhc3Mg
Z2VuZXJhdGVzIGEgbXVjaAotICAgIC8vIG1vcmUgY29tcGxpY2F0ZWQgY2xlYXJfKigpIGZ1bmN0
aW9uLCB3aGljaCBjbGVhcnMgb25seSB0aGUgb25lb2YKLSAgICAvLyBtZW1iZXIgdGhhdCBpcyBz
ZXQsIGluIGFkZGl0aW9uIHRvIGNsZWFyaW5nIG1ldGhvZHMgZm9yIGVhY2ggb2YgdGhlCi0gICAg
Ly8gb25lb2YgbWVtYmVycyBpbmRpdmlkdWFsbHkuCi0gICAgLy8KLSAgICAvLyBTaW5jZSBvbmVv
ZnMgZG8gbm90IGhhdmUgdGhlaXIgb3duIGdlbmVyYXRvciBjbGFzcywgdGhlIE1lc3NhZ2UgY29k
ZQotICAgIC8vIGdlbmVyYXRpb24gbG9naWMgd291bGQgYmUgc2lnbmlmaWNhbnRseSBjb21wbGlj
YXRlZCBpbiBvcmRlciB0bwotICAgIC8vIHNwbGl0IGRlcGVuZGVudCBhbmQgbm9uLWRlcGVuZGVu
dCBtYW5pcHVsYXRpb24gbG9naWMgYmFzZWQgb24KLSAgICAvLyB3aGV0aGVyIHRoZSBvbmVvZiB0
cnVseSBuZWVkcyB0byBiZSBkZXBlbmRlbnQ7IHNvLCBmb3Igb25lb2YgZmllbGRzLAotICAgIC8v
IHdlIGp1c3QgYXNzdW1lIGl0IChhbmQgaXRzIGNvbnN0aXR1ZW50cykgc2hvdWxkIGJlIG1hbmlw
dWxhdGVkIGJ5IGEKLSAgICAvLyBkZXBlbmRlbnQgYmFzZSBjbGFzcyBmdW5jdGlvbi4KLSAgICAv
LwotICAgIC8vIFRoaXMgaXMgbGVzcyBwcmVjaXNlIHRoYW4gaG93IGRlcGVuZGVudCBtZXNzYWdl
LXR5cGVkIGZpZWxkcyBhcmUKLSAgICAvLyBoYW5kbGVkLCBidXQgdGhlIGNvc3QgaXMgbGltaXRl
ZCB0byBvbmx5IHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlCi0gICAgLy8gb25lb2YgZmllbGQs
IHdoaWNoIHNlZW1zIGxpa2UgYW4gYWNjZXB0YWJsZSB0cmFkZW9mZi4KLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotICBpZiAoZmllbGQtPmZpbGUoKSA9PSBmaWVsZC0+bWVzc2FnZV90eXBlKCktPmZp
bGUoKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Ry
aW5nIERlcGVuZGVudFR5cGVOYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAg
cmV0dXJuICJJbnRlcm5hbEJhc2VfIiArIGZpZWxkLT5uYW1lKCkgKyAiX1QiOwotfQotCi1zdHJp
bmcgRmllbGRNZXNzYWdlVHlwZU5hbWUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewot
ICAvLyBOb3RlOiAgVGhlIEdvb2dsZS1pbnRlcm5hbCB2ZXJzaW9uIG9mIFByb3RvY29sIEJ1ZmZl
cnMgdXNlcyB0aGlzIGZ1bmN0aW9uCi0gIC8vICAgYXMgYSBob29rIHBvaW50IGZvciBoYWNrcyB0
byBzdXBwb3J0IGxlZ2FjeSBjb2RlLgotICByZXR1cm4gQ2xhc3NOYW1lKGZpZWxkLT5tZXNzYWdl
X3R5cGUoKSwgdHJ1ZSk7Ci19Ci0KLXN0cmluZyBTdHJpcFByb3RvKGNvbnN0IHN0cmluZyYgZmls
ZW5hbWUpIHsKLSAgaWYgKEhhc1N1ZmZpeFN0cmluZyhmaWxlbmFtZSwgIi5wcm90b2RldmVsIikp
IHsKLSAgICByZXR1cm4gU3RyaXBTdWZmaXhTdHJpbmcoZmlsZW5hbWUsICIucHJvdG9kZXZlbCIp
OwotICB9IGVsc2UgewotICAgIHJldHVybiBTdHJpcFN1ZmZpeFN0cmluZyhmaWxlbmFtZSwgIi5w
cm90byIpOwotICB9Ci19Ci0KLWNvbnN0IGNoYXIqIFByaW1pdGl2ZVR5cGVOYW1lKEZpZWxkRGVz
Y3JpcHRvcjo6Q3BwVHlwZSB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyICA6IHJldHVybiAiOjpnb29nbGU6OnByb3RvYnVm
OjppbnQzMiI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UNjQgIDogcmV0
dXJuICI6Omdvb2dsZTo6cHJvdG9idWY6OmludDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9VSU5UMzIgOiByZXR1cm4gIjo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIjsK
LSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UNjQgOiByZXR1cm4gIjo6Z29v
Z2xlOjpwcm90b2J1Zjo6dWludDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9ET1VCTEUgOiByZXR1cm4gImRvdWJsZSI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfRkxPQVQgIDogcmV0dXJuICJmbG9hdCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfQk9PTCAgIDogcmV0dXJuICJib29sIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9FTlVNICAgOiByZXR1cm4gImludCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfU1RSSU5HIDogcmV0dXJuICI6OnN0ZDo6c3RyaW5nIjsKLSAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOiByZXR1cm4gTlVMTDsKLQotICAgIC8vIE5v
IGRlZmF1bHQgYmVjYXVzZSB3ZSB3YW50IHRoZSBjb21waWxlciB0byBjb21wbGFpbiBpZiBhbnkg
bmV3Ci0gICAgLy8gQ3BwVHlwZXMgYXJlIGFkZGVkLgotICB9Ci0KLSAgR09PR0xFX0xPRyhGQVRB
TCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJldHVybiBOVUxMOwotfQotCi1jb25zdCBjaGFy
KiBEZWNsYXJlZFR5cGVNZXRob2ROYW1lKEZpZWxkRGVzY3JpcHRvcjo6VHlwZSB0eXBlKSB7Ci0g
IHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDMyICAg
OiByZXR1cm4gIkludDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQ2NCAg
IDogcmV0dXJuICJJbnQ2NCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfVUlOVDMy
ICA6IHJldHVybiAiVUludDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5U
NjQgIDogcmV0dXJuICJVSW50NjQiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJ
TlQzMiAgOiByZXR1cm4gIlNJbnQzMiI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
U0lOVDY0ICA6IHJldHVybiAiU0ludDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9GSVhFRDMyIDogcmV0dXJuICJGaXhlZDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV9GSVhFRDY0IDogcmV0dXJuICJGaXhlZDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9TRklYRUQzMjogcmV0dXJuICJTRml4ZWQzMiI7Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OlRZUEVfU0ZJWEVENjQ6IHJldHVybiAiU0ZpeGVkNjQiOwotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX0ZMT0FUICAgOiByZXR1cm4gIkZsb2F0IjsKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9ET1VCTEUgIDogcmV0dXJuICJEb3VibGUiOwotCi0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfQk9PTCAgICA6IHJldHVybiAiQm9vbCI7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfRU5VTSAgICA6IHJldHVybiAiRW51bSI7Ci0KLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcgIDogcmV0dXJuICJTdHJpbmciOwotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTICAgOiByZXR1cm4gIkJ5dGVzIjsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCAgIDogcmV0dXJuICJHcm91cCI7Ci0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSA6IHJldHVybiAiTWVzc2FnZSI7Ci0K
LSAgICAvLyBObyBkZWZhdWx0IGJlY2F1c2Ugd2Ugd2FudCB0aGUgY29tcGlsZXIgdG8gY29tcGxh
aW4gaWYgYW55IG5ldwotICAgIC8vIHR5cGVzIGFyZSBhZGRlZC4KLSAgfQotICBHT09HTEVfTE9H
KEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuICIiOwotfQotCi1zdHJpbmcg
SW50MzJUb1N0cmluZyhpbnQgbnVtYmVyKSB7Ci0gIC8vIGdjYyByZWplY3RzIHRoZSBkZWNpbWFs
IGZvcm0gb2Yga2ludDMybWluLgotICBpZiAobnVtYmVyID09IGtpbnQzMm1pbikgewotICAgIEdP
T0dMRV9DT01QSUxFX0FTU0VSVChraW50MzJtaW4gPT0gKH4weDdmZmZmZmZmKSwga2ludDMybWlu
X3ZhbHVlX2Vycm9yKTsKLSAgICByZXR1cm4gIih+MHg3ZmZmZmZmZikiOwotICB9IGVsc2Ugewot
ICAgIHJldHVybiBTaW1wbGVJdG9hKG51bWJlcik7Ci0gIH0KLX0KLQotc3RyaW5nIEludDY0VG9T
dHJpbmcoaW50NjQgbnVtYmVyKSB7Ci0gIC8vIGdjYyByZWplY3RzIHRoZSBkZWNpbWFsIGZvcm0g
b2Yga2ludDY0bWluCi0gIGlmIChudW1iZXIgPT0ga2ludDY0bWluKSB7Ci0gICAgLy8gTWFrZSBz
dXJlIHdlIGFyZSBpbiBhIDIncyBjb21wbGVtZW50IHN5c3RlbS4KLSAgICBHT09HTEVfQ09NUElM
RV9BU1NFUlQoa2ludDY0bWluID09IEdPT0dMRV9MT05HTE9ORyh+MHg3ZmZmZmZmZmZmZmZmZmZm
KSwKLSAgICAgICAgICAgICAgICAgICBraW50NjRtaW5fdmFsdWVfZXJyb3IpOwotICAgIHJldHVy
biAiR09PR0xFX0xPTkdMT05HKH4weDdmZmZmZmZmZmZmZmZmZmYpIjsKLSAgfQotICByZXR1cm4g
IkdPT0dMRV9MT05HTE9ORygiICsgU2ltcGxlSXRvYShudW1iZXIpICsgIikiOwotfQotCi1zdHJp
bmcgRGVmYXVsdFZhbHVlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgc3dpdGNo
IChmaWVsZC0+Y3BwX3R5cGUoKSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X0lOVDMyOgotICAgICAgcmV0dXJuIEludDMyVG9TdHJpbmcoZmllbGQtPmRlZmF1bHRfdmFsdWVf
aW50MzIoKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMyOgotICAg
ICAgcmV0dXJuIFNpbXBsZUl0b2EoZmllbGQtPmRlZmF1bHRfdmFsdWVfdWludDMyKCkpICsgInUi
OwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OgotICAgICAgcmV0dXJu
IEludDY0VG9TdHJpbmcoZmllbGQtPmRlZmF1bHRfdmFsdWVfaW50NjQoKSk7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDY0OgotICAgICAgcmV0dXJuICJHT09HTEVfVUxP
TkdMT05HKCIgKyBTaW1wbGVJdG9hKGZpZWxkLT5kZWZhdWx0X3ZhbHVlX3VpbnQ2NCgpKSsgIiki
OwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRTogewotICAgICAgZG91
YmxlIHZhbHVlID0gZmllbGQtPmRlZmF1bHRfdmFsdWVfZG91YmxlKCk7Ci0gICAgICBpZiAodmFs
dWUgPT0gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewotICAgICAgICByZXR1
cm4gIjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkluZmluaXR5KCkiOwotICAgICAgfSBl
bHNlIGlmICh2YWx1ZSA9PSAtbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewot
ICAgICAgICByZXR1cm4gIi06Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJbmZpbml0eSgp
IjsKLSAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuICI6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpOYU4oKSI7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICByZXR1cm4gU2ltcGxlRHRvYSh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FUOgotICAgICAgewotICAgICAgICBmbG9hdCB2
YWx1ZSA9IGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2Zsb2F0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9
PSBudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpIHsKLSAgICAgICAgICByZXR1cm4g
InN0YXRpY19jYXN0PGZsb2F0Pig6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJbmZpbml0
eSgpKSI7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gLW51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6aW5maW5pdHkoKSkgewotICAgICAgICAgIHJldHVybiAic3RhdGljX2Nhc3Q8ZmxvYXQ+KC06
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJbmZpbml0eSgpKSI7Ci0gICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUgIT0gdmFsdWUpIHsKLSAgICAgICAgICByZXR1cm4gInN0YXRpY19jYXN0PGZs
b2F0Pig6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpOYU4oKSkiOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHN0cmluZyBmbG9hdF92YWx1ZSA9IFNpbXBsZUZ0b2EodmFsdWUpOwot
ICAgICAgICAgIC8vIElmIGZsb2F0aW5nIHBvaW50IHZhbHVlIGNvbnRhaW5zIGEgcGVyaW9kICgu
KSBvciBhbiBleHBvbmVudAotICAgICAgICAgIC8vIChlaXRoZXIgRSBvciBlKSwgdGhlbiBhcHBl
bmQgc3VmZml4ICdmJyB0byBtYWtlIGl0IGEgZmxvYXQKLSAgICAgICAgICAvLyBsaXRlcmFsLgot
ICAgICAgICAgIGlmIChmbG9hdF92YWx1ZS5maW5kX2ZpcnN0X29mKCIuZUUiKSAhPSBzdHJpbmc6
Om5wb3MpIHsKLSAgICAgICAgICAgIGZsb2F0X3ZhbHVlLnB1c2hfYmFjaygnZicpOwotICAgICAg
ICAgIH0KLSAgICAgICAgICByZXR1cm4gZmxvYXRfdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9CT09MOgotICAgICAgcmV0dXJuIGZp
ZWxkLT5kZWZhdWx0X3ZhbHVlX2Jvb2woKSA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTToKLSAgICAgIC8vIExhenk6ICBHZW5lcmF0ZSBh
IHN0YXRpY19jYXN0IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIGhlbHBlciBmdW5jdGlvbgotICAg
ICAgLy8gICB0aGF0IGNvbnN0cnVjdHMgdGhlIGZ1bGwgbmFtZSBvZiBhbiBlbnVtIHZhbHVlLgot
ICAgICAgcmV0dXJuIHN0cmluZ3M6OlN1YnN0aXR1dGUoCi0gICAgICAgICAgInN0YXRpY19jYXN0
PCAkMCA+KCQxKSIsCi0gICAgICAgICAgQ2xhc3NOYW1lKGZpZWxkLT5lbnVtX3R5cGUoKSwgdHJ1
ZSksCi0gICAgICAgICAgSW50MzJUb1N0cmluZyhmaWVsZC0+ZGVmYXVsdF92YWx1ZV9lbnVtKCkt
Pm51bWJlcigpKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOgot
ICAgICAgcmV0dXJuICJcIiIgKyBFc2NhcGVUcmlncmFwaHMoCi0gICAgICAgIENFc2NhcGUoZmll
bGQtPmRlZmF1bHRfdmFsdWVfc3RyaW5nKCkpKSArCi0gICAgICAgICJcIiI7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgIHJldHVybiBGaWVsZE1lc3Nh
Z2VUeXBlTmFtZShmaWVsZCkgKyAiOjpkZWZhdWx0X2luc3RhbmNlKCkiOwotICB9Ci0gIC8vIENh
bid0IGFjdHVhbGx5IGdldCBoZXJlOyBtYWtlIGNvbXBpbGVyIGhhcHB5LiAgKFdlIGNvdWxkIGFk
ZCBhIGRlZmF1bHQKLSAgLy8gY2FzZSBhYm92ZSBidXQgdGhlbiB3ZSB3b3VsZG4ndCBnZXQgdGhl
IG5pY2UgY29tcGlsZXIgd2FybmluZyB3aGVuIGEKLSAgLy8gbmV3IHR5cGUgaXMgYWRkZWQuKQot
ICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuICIiOwot
fQotCi0vLyBDb252ZXJ0IGEgZmlsZSBuYW1lIGludG8gYSB2YWxpZCBpZGVudGlmaWVyLgotc3Ry
aW5nIEZpbGVuYW1lSWRlbnRpZmllcihjb25zdCBzdHJpbmcmIGZpbGVuYW1lKSB7Ci0gIHN0cmlu
ZyByZXN1bHQ7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZW5hbWUuc2l6ZSgpOyBpKyspIHsK
LSAgICBpZiAoYXNjaWlfaXNhbG51bShmaWxlbmFtZVtpXSkpIHsKLSAgICAgIHJlc3VsdC5wdXNo
X2JhY2soZmlsZW5hbWVbaV0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBOb3QgYWxwaGFudW1l
cmljLiAgVG8gYXZvaWQgYW55IHBvc3NpYmlsaXR5IG9mIG5hbWUgY29uZmxpY3RzIHdlCi0gICAg
ICAvLyB1c2UgdGhlIGhleCBjb2RlIGZvciB0aGUgY2hhcmFjdGVyLgotICAgICAgU3RyQXBwZW5k
KCZyZXN1bHQsICJfIiwgc3RyaW5nczo6SGV4KHN0YXRpY19jYXN0PHVpbnQ4PihmaWxlbmFtZVtp
XSkpKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gUmV0dXJuIHRoZSBu
YW1lIG9mIHRoZSBBZGREZXNjcmlwdG9ycygpIGZ1bmN0aW9uIGZvciBhIGdpdmVuIGZpbGUuCi1z
dHJpbmcgR2xvYmFsQWRkRGVzY3JpcHRvcnNOYW1lKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsK
LSAgcmV0dXJuICJwcm90b2J1Zl9BZGREZXNjXyIgKyBGaWxlbmFtZUlkZW50aWZpZXIoZmlsZW5h
bWUpOwotfQotCi0vLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIEFzc2lnbkRlc2NyaXB0b3JzKCkg
ZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gZmlsZS4KLXN0cmluZyBHbG9iYWxBc3NpZ25EZXNjcmlwdG9y
c05hbWUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSkgewotICByZXR1cm4gInByb3RvYnVmX0Fzc2ln
bkRlc2NfIiArIEZpbGVuYW1lSWRlbnRpZmllcihmaWxlbmFtZSk7Ci19Ci0KLS8vIFJldHVybiB0
aGUgbmFtZSBvZiB0aGUgU2h1dGRvd25GaWxlKCkgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gZmlsZS4K
LXN0cmluZyBHbG9iYWxTaHV0ZG93bkZpbGVOYW1lKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsK
LSAgcmV0dXJuICJwcm90b2J1Zl9TaHV0ZG93bkZpbGVfIiArIEZpbGVuYW1lSWRlbnRpZmllcihm
aWxlbmFtZSk7Ci19Ci0KLS8vIFJldHVybiB0aGUgcXVhbGlmaWVkIEMrKyBuYW1lIGZvciBhIGZp
bGUgbGV2ZWwgc3ltYm9sLgotc3RyaW5nIFF1YWxpZmllZEZpbGVMZXZlbFN5bWJvbChjb25zdCBz
dHJpbmcmIHBhY2thZ2UsIGNvbnN0IHN0cmluZyYgbmFtZSkgewotICBpZiAocGFja2FnZS5lbXB0
eSgpKSB7Ci0gICAgcmV0dXJuIFN0ckNhdCgiOjoiLCBuYW1lKTsKLSAgfQotICByZXR1cm4gU3Ry
Q2F0KCI6OiIsIERvdHNUb0NvbG9ucyhwYWNrYWdlKSwgIjo6IiwgbmFtZSk7Ci19Ci0KLS8vIEVz
Y2FwZSBDKysgdHJpZ3JhcGhzIGJ5IGVzY2FwaW5nIHF1ZXN0aW9uIG1hcmtzIHRvIFw/Ci1zdHJp
bmcgRXNjYXBlVHJpZ3JhcGhzKGNvbnN0IHN0cmluZyYgdG9fZXNjYXBlKSB7Ci0gIHJldHVybiBT
dHJpbmdSZXBsYWNlKHRvX2VzY2FwZSwgIj8iLCAiXFw/IiwgdHJ1ZSk7Ci19Ci0KLS8vIEVzY2Fw
ZWQgZnVuY3Rpb24gbmFtZSB0byBlbGltaW5hdGUgbmFtaW5nIGNvbmZsaWN0Lgotc3RyaW5nIFNh
ZmVGdW5jdGlvbk5hbWUoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdHJpbmcmIHByZWZpeCkgewotICAvLyBEbyBub3QgdXNlIEZpZWxk
TmFtZSgpIHNpbmNlIGl0IHdpbGwgZXNjYXBlIGtleXdvcmRzLgotICBzdHJpbmcgbmFtZSA9IGZp
ZWxkLT5uYW1lKCk7Ci0gIExvd2VyU3RyaW5nKCZuYW1lKTsKLSAgc3RyaW5nIGZ1bmN0aW9uX25h
bWUgPSBwcmVmaXggKyBuYW1lOwotICBpZiAoZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKGZ1
bmN0aW9uX25hbWUpKSB7Ci0gICAgLy8gU2luZ2xlIHVuZGVyc2NvcmUgd2lsbCBhbHNvIG1ha2Ug
aXQgY29uZmxpY3Rpbmcgd2l0aCB0aGUgcHJpdmF0ZSBkYXRhCi0gICAgLy8gbWVtYmVyLiBXZSB1
c2UgZG91YmxlIHVuZGVyc2NvcmUgdG8gZXNjYXBlIGZ1bmN0aW9uIG5hbWVzLgotICAgIGZ1bmN0
aW9uX25hbWUuYXBwZW5kKCJfXyIpOwotICB9IGVsc2UgaWYgKGtLZXl3b3Jkcy5jb3VudChuYW1l
KSA+IDApIHsKLSAgICAvLyBJZiB0aGUgZmllbGQgbmFtZSBpcyBhIGtleXdvcmQsIHdlIGFwcGVu
ZCB0aGUgdW5kZXJzY29yZSBiYWNrIHRvIGtlZXAgaXQKLSAgICAvLyBjb25zaXN0ZW50IHdpdGgg
b3RoZXIgZnVuY3Rpb24gbmFtZXMuCi0gICAgZnVuY3Rpb25fbmFtZS5hcHBlbmQoIl8iKTsKLSAg
fQotICByZXR1cm4gZnVuY3Rpb25fbmFtZTsKLX0KLQotYm9vbCBTdGF0aWNJbml0aWFsaXplcnNG
b3JjZWQoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKSB7Ci0gIGlmIChIYXNEZXNjcmlwdG9yTWV0
aG9kcyhmaWxlLCBvcHRpb25zKSB8fCBmaWxlLT5leHRlbnNpb25fY291bnQoKSA+IDApIHsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGUtPm1lc3NhZ2Vf
dHlwZV9jb3VudCgpOyArK2kpIHsKLSAgICBpZiAoSGFzRXh0ZW5zaW9uKGZpbGUtPm1lc3NhZ2Vf
dHlwZShpKSkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgUHJpbnRIYW5kbGluZ09wdGlvbmFsU3RhdGljSW5pdGlhbGl6ZXJzKAot
ICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLCBjb25zdCBPcHRpb25zJiBvcHRpb25zLCBp
bzo6UHJpbnRlciogcHJpbnRlciwKLSAgICBjb25zdCBjaGFyKiB3aXRoX3N0YXRpY19pbml0LCBj
b25zdCBjaGFyKiB3aXRob3V0X3N0YXRpY19pbml0LAotICAgIGNvbnN0IGNoYXIqIHZhcjEsIGNv
bnN0IHN0cmluZyYgdmFsMSwgY29uc3QgY2hhciogdmFyMiwKLSAgICBjb25zdCBzdHJpbmcmIHZh
bDIpIHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICBpZiAodmFyMSkgewotICAgIHZh
cnNbdmFyMV0gPSB2YWwxOwotICB9Ci0gIGlmICh2YXIyKSB7Ci0gICAgdmFyc1t2YXIyXSA9IHZh
bDI7Ci0gIH0KLSAgUHJpbnRIYW5kbGluZ09wdGlvbmFsU3RhdGljSW5pdGlhbGl6ZXJzKAotICAg
ICAgdmFycywgZmlsZSwgb3B0aW9ucywgcHJpbnRlciwgd2l0aF9zdGF0aWNfaW5pdCwgd2l0aG91
dF9zdGF0aWNfaW5pdCk7Ci19Ci0KLXZvaWQgUHJpbnRIYW5kbGluZ09wdGlvbmFsU3RhdGljSW5p
dGlhbGl6ZXJzKGNvbnN0IG1hcDxzdHJpbmcsIHN0cmluZz4mIHZhcnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9w
dGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHdpdGhfc3RhdGljX2luaXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB3aXRob3V0X3N0
YXRpY19pbml0KSB7Ci0gIGlmIChTdGF0aWNJbml0aWFsaXplcnNGb3JjZWQoZmlsZSwgb3B0aW9u
cykpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLCB3aXRoX3N0YXRpY19pbml0KTsKLSAgfSBl
bHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLCAoc3RyaW5nKAotICAgICAgIiNpZmRlZiBH
T09HTEVfUFJPVE9CVUZfTk9fU1RBVElDX0lOSVRJQUxJWkVSXG4iKSArCi0gICAgICB3aXRob3V0
X3N0YXRpY19pbml0ICsKLSAgICAgICIjZWxzZVxuIiArCi0gICAgICB3aXRoX3N0YXRpY19pbml0
ICsKLSAgICAgICIjZW5kaWZcbiIpLmNfc3RyKCkpOwotICB9Ci19Ci0KLQotc3RhdGljIGJvb2wg
SGFzTWFwRmllbGRzKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5maWVsZF9jb3VudCgpOyArK2kpIHsKLSAgICBpZiAoZGVz
Y3JpcHRvci0+ZmllbGQoaSktPmlzX21hcCgpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5uZXN0ZWRfdHlwZV9jb3Vu
dCgpOyArK2kpIHsKLSAgICBpZiAoSGFzTWFwRmllbGRzKGRlc2NyaXB0b3ItPm5lc3RlZF90eXBl
KGkpKSkgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEhhc01h
cEZpZWxkcyhjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSkgewotICBmb3IgKGludCBpID0gMDsg
aSA8IGZpbGUtPm1lc3NhZ2VfdHlwZV9jb3VudCgpOyArK2kpIHsKLSAgICBpZiAoSGFzTWFwRmll
bGRzKGZpbGUtPm1lc3NhZ2VfdHlwZShpKSkpIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotc3RhdGljIGJvb2wgSGFzRW51bURlZmluaXRpb25zKGNvbnN0IERlc2NyaXB0
b3IqIG1lc3NhZ2VfdHlwZSkgewotICBpZiAobWVzc2FnZV90eXBlLT5lbnVtX3R5cGVfY291bnQo
KSA+IDApIHJldHVybiB0cnVlOwotICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2VfdHlwZS0+
bmVzdGVkX3R5cGVfY291bnQoKTsgKytpKSB7Ci0gICAgaWYgKEhhc0VudW1EZWZpbml0aW9ucyht
ZXNzYWdlX3R5cGUtPm5lc3RlZF90eXBlKGkpKSkgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEhhc0VudW1EZWZpbml0aW9ucyhjb25zdCBGaWxlRGVzY3JpcHRv
ciogZmlsZSkgewotICBpZiAoZmlsZS0+ZW51bV90eXBlX2NvdW50KCkgPiAwKSByZXR1cm4gdHJ1
ZTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgKytp
KSB7Ci0gICAgaWYgKEhhc0VudW1EZWZpbml0aW9ucyhmaWxlLT5tZXNzYWdlX3R5cGUoaSkpKSBy
ZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSXNTdHJpbmdPck1l
c3NhZ2UoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBzd2l0Y2ggKGZpZWxkLT5j
cHBfdHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UMzI6Ci0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UNjQ6Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMyOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX1VJTlQ2NDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9ET1VCTEU6Ci0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQ6Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9FTlVNOgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX1NUUklORzoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdF
OgotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2Fu
J3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1GaWVsZE9wdGlvbnM6OkNUeXBl
IEVmZmVjdGl2ZVN0cmluZ0NUeXBlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAg
R09PR0xFX0RDSEVDSyhmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfU1RSSU5HKTsKLSAgLy8gT3Blbi1zb3VyY2UgcHJvdG9idWYgcmVsZWFzZSBvbmx5IHN1cHBv
cnRzIFNUUklORyBjdHlwZS4KLSAgcmV0dXJuIEZpZWxkT3B0aW9uczo6U1RSSU5HOwotCi19Ci0K
LWJvb2wgSXNBbnlNZXNzYWdlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0g
IHJldHVybiBkZXNjcmlwdG9yLT5uYW1lKCkgPT0ga0FueVByb3RvRmlsZTsKLX0KLQotYm9vbCBJ
c0FueU1lc3NhZ2UoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICByZXR1cm4gZGVz
Y3JpcHRvci0+bmFtZSgpID09IGtBbnlNZXNzYWdlTmFtZSAmJgotICAgICAgICAgZGVzY3JpcHRv
ci0+ZmlsZSgpLT5uYW1lKCkgPT0ga0FueVByb3RvRmlsZTsKLX0KLQotYm9vbCBJc1dlbGxLbm93
bk1lc3NhZ2UoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJuICFk
ZXNjcmlwdG9yLT5uYW1lKCkuY29tcGFyZSgwLCAxNiwga0dvb2dsZVByb3RvYnVmUHJlZml4KTsK
LX0KLQotZW51bSBVdGY4Q2hlY2tNb2RlIHsKLSAgU1RSSUNUID0gMCwgIC8vIFBhcnNpbmcgd2ls
bCBmYWlsIGlmIG5vbiBVVEYtOCBkYXRhIGlzIGluIHN0cmluZyBmaWVsZHMuCi0gIFZFUklGWSA9
IDEsICAvLyBPbmx5IGxvZyBhbiBlcnJvciBidXQgcGFyc2luZyB3aWxsIHN1Y2NlZWQuCi0gIE5P
TkUgPSAyLCAgLy8gTm8gVVRGLTggY2hlY2suCi19OwotCi0vLyBXaGljaCBsZXZlbCBvZiBVVEYt
OCBlbmZvcmNlbWFudCBpcyBwbGFjZWQgb24gdGhpcyBmaWxlLgotc3RhdGljIFV0ZjhDaGVja01v
ZGUgR2V0VXRmOENoZWNrTW9kZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKSB7
Ci0gIGlmIChmaWVsZC0+ZmlsZSgpLT5zeW50YXgoKSA9PSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFY
X1BST1RPMykgewotICAgIHJldHVybiBTVFJJQ1Q7Ci0gIH0gZWxzZSBpZiAoR2V0T3B0aW1pemVG
b3IoZmllbGQtPmZpbGUoKSwgb3B0aW9ucykgIT0KLSAgICAgICAgICAgICBGaWxlT3B0aW9uczo6
TElURV9SVU5USU1FKSB7Ci0gICAgcmV0dXJuIFZFUklGWTsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gTk9ORTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBHZW5lcmF0ZVV0ZjhDaGVja0NvZGUoY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zLCBib29sIGZvcl9wYXJzZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8c3RyaW5nLCBzdHJpbmc+JiB2YXJpYWJs
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFyYW1l
dGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdHJp
Y3RfZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogdmVyaWZ5X2Z1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlv
OjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHN3aXRjaCAoR2V0VXRmOENoZWNrTW9kZShmaWVsZCwg
b3B0aW9ucykpIHsKLSAgICBjYXNlIFNUUklDVDogewotICAgICAgaWYgKGZvcl9wYXJzZSkgewot
ICAgICAgICBwcmludGVyLT5QcmludCgiRE9fKCIpOwotICAgICAgfQotICAgICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgICAgIjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjokZnVuY3Rpb24kKFxuIiwKLSAgICAgICAgICAiZnVuY3Rpb24iLCBzdHJpY3RfZnVu
Y3Rpb24pOwotICAgICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXMsIHBhcmFtZXRlcnMpOwotICAgICAgaWYgKGZvcl9wYXJzZSkgewotICAgICAgICBw
cmludGVyLT5QcmludCgiOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlBBUlNFLFxuIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGVyLT5QcmludCgi
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSxc
biIpOwotICAgICAgfQotICAgICAgcHJpbnRlci0+UHJpbnQoIlwiJGZ1bGxfbmFtZSRcIikiLCAi
ZnVsbF9uYW1lIiwgZmllbGQtPmZ1bGxfbmFtZSgpKTsKLSAgICAgIGlmIChmb3JfcGFyc2UpIHsK
LSAgICAgICAgcHJpbnRlci0+UHJpbnQoIikiKTsKLSAgICAgIH0KLSAgICAgIHByaW50ZXItPlBy
aW50KCI7XG4iKTsKLSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIFZFUklGWTogewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAg
Ijo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OiRmdW5jdGlvbiQoXG4i
LAotICAgICAgICAgICJmdW5jdGlvbiIsIHZlcmlmeV9mdW5jdGlvbik7Ci0gICAgICBwcmludGVy
LT5JbmRlbnQoKTsKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlcywgcGFyYW1ldGVycyk7
Ci0gICAgICBpZiAoZm9yX3BhcnNlKSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KCI6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpQQVJTRSxcbiIpOwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQoIjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSxcbiIpOwotICAgICAgfQotICAgICAgcHJpbnRlci0+
UHJpbnQoIlwiJGZ1bGxfbmFtZSRcIik7XG4iLCAiZnVsbF9uYW1lIiwgZmllbGQtPmZ1bGxfbmFt
ZSgpKTsKLSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIE5PTkU6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi12b2lkIEdlbmVyYXRlVXRmOENo
ZWNrQ29kZUZvclN0cmluZyhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucywgYm9vbCBm
b3JfcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8
c3RyaW5nLCBzdHJpbmc+JiB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgR2VuZXJhdGVVdGY4Q2hlY2tD
b2RlKGZpZWxkLCBvcHRpb25zLCBmb3JfcGFyc2UsIHZhcmlhYmxlcywgcGFyYW1ldGVycywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICJWZXJpZnlVdGY4U3RyaW5nIiwgIlZlcmlmeVVURjhTdHJp
bmdOYW1lZEZpZWxkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZXIpOwotfQotCi12
b2lkIEdlbmVyYXRlVXRmOENoZWNrQ29kZUZvckNvcmQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBv
cHRpb25zLCBib29sIGZvcl9wYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtYXA8c3RyaW5nLCBzdHJpbmc+JiB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBHZW5lcmF0ZVV0
ZjhDaGVja0NvZGUoZmllbGQsIG9wdGlvbnMsIGZvcl9wYXJzZSwgdmFyaWFibGVzLCBwYXJhbWV0
ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgIlZlcmlmeVV0ZjhDb3JkIiwgIlZlcmlmeVVU
RjhDb3JkTmFtZWRGaWVsZCIsIHByaW50ZXIpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgY3BwCi19
ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8g
bmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfaGVscGVycy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBf
aGVscGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMThhY2ZjYWQwZjBmNzhm
NmUzOTZkMzIwZDgzZjFlNDQ3YWQ4NTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2hlbHBl
cnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZh
cmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0v
LyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5kZWYgR09P
R0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9IRUxQRVJTX0hfXwotI2RlZmluZSBHT09HTEVfUFJP
VE9CVUZfQ09NUElMRVJfQ1BQX0hFTFBFUlNfSF9fCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX29w
dGlvbnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotbmFtZXNwYWNlIGlvIHsKLWNsYXNzIFByaW50ZXI7
Ci19Ci0KLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsKLQotLy8gQ29tbW9u
bHktdXNlZCBzZXBhcmF0b3IgY29tbWVudHMuICBUaGljayBpcyBhIGxpbmUgb2YgJz0nLCB0aGlu
IGlzIGEgbGluZQotLy8gb2YgJy0nLgotZXh0ZXJuIGNvbnN0IGNoYXIga1RoaWNrU2VwYXJhdG9y
W107Ci1leHRlcm4gY29uc3QgY2hhciBrVGhpblNlcGFyYXRvcltdOwotCi0vLyBSZXR1cm5zIHRo
ZSBub24tbmVzdGVkIHR5cGUgbmFtZSBmb3IgdGhlIGdpdmVuIHR5cGUuICBJZiAicXVhbGlmaWVk
IiBpcwotLy8gdHJ1ZSwgcHJlZml4IHRoZSB0eXBlIHdpdGggdGhlIGZ1bGwgbmFtZXNwYWNlLiAg
Rm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQ6Ci0vLyAgIHBhY2thZ2UgZm9vLmJhcjsKLS8vICAgbWVz
c2FnZSBCYXogeyBtZXNzYWdlIFF1eCB7fSB9Ci0vLyBUaGVuIHRoZSBxdWFsaWZpZWQgQ2xhc3NO
YW1lIGZvciBRdXggd291bGQgYmU6Ci0vLyAgIDo6Zm9vOjpiYXI6OkJhel9RdXgKLS8vIFdoaWxl
IHRoZSBub24tcXVhbGlmaWVkIHZlcnNpb24gd291bGQgYmU6Ci0vLyAgIEJhel9RdXgKLXN0cmlu
ZyBDbGFzc05hbWUoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwgYm9vbCBxdWFsaWZpZWQp
Owotc3RyaW5nIENsYXNzTmFtZShjb25zdCBFbnVtRGVzY3JpcHRvciogZW51bV9kZXNjcmlwdG9y
LCBib29sIHF1YWxpZmllZCk7Ci0KLS8vIE5hbWUgb2YgdGhlIENSVFAgY2xhc3MgdGVtcGxhdGUg
KGZvciB1c2Ugd2l0aCBwcm90b19oKS4KLS8vIFRoaXMgaXMgYSBjbGFzcyBuYW1lLCBsaWtlICJQ
cm90b05hbWVfSW50ZXJuYWxCYXNlIi4KLXN0cmluZyBEZXBlbmRlbnRCYXNlQ2xhc3NUZW1wbGF0
ZU5hbWUoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLS8vIE5hbWUgb2YgdGhlIGJh
c2UgY2xhc3M6IGVpdGhlciB0aGUgZGVwZW5kZW50IGJhc2UgY2xhc3MgKGZvciB1c2Ugd2l0aAot
Ly8gcHJvdG9faCkgb3IgZ29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZS4KLXN0cmluZyBTdXBlckNs
YXNzTmFtZShjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBPcHRpb25zJiBvcHRp
b25zKTsKLQotLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGRvd24tY2FzdHMgZnJvbSB0aGUgZGVw
ZW5kZW50IGJhc2UgY2xhc3MgdG8gdGhlCi0vLyBkZXJpdmVkIGNsYXNzLgotc3RyaW5nIERlcGVu
ZGVudEJhc2VEb3duQ2FzdCgpOwotc3RyaW5nIERlcGVuZGVudEJhc2VDb25zdERvd25DYXN0KCk7
Ci0KLS8vIEdldCB0aGUgKHVucXVhbGlmaWVkKSBuYW1lIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9y
IHRoaXMgZmllbGQgaW4gQysrIGNvZGUuCi0vLyBUaGUgbmFtZSBpcyBjb2VyY2VkIHRvIGxvd2Vy
LWNhc2UgdG8gZW11bGF0ZSBwcm90bzEgYmVoYXZpb3IuICBQZW9wbGUKLS8vIHNob3VsZCBiZSB1
c2luZyBsb3dlcmNhc2Utd2l0aC11bmRlcnNjb3JlcyBzdHlsZSBmb3IgcHJvdG8gZmllbGQgbmFt
ZXMKLS8vIGFueXdheSwgc28gbm9ybWFsbHkgdGhpcyBqdXN0IHJldHVybnMgZmllbGQtPm5hbWUo
KS4KLXN0cmluZyBGaWVsZE5hbWUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLS8v
IEdldCB0aGUgc2FuaXRpemVkIG5hbWUgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIGdpdmVu
IGVudW0gaW4gQysrIGNvZGUuCi1zdHJpbmcgRW51bVZhbHVlTmFtZShjb25zdCBFbnVtVmFsdWVE
ZXNjcmlwdG9yKiBlbnVtX3ZhbHVlKTsKLQotLy8gR2V0IHRoZSB1bnF1YWxpZmllZCBuYW1lIHRo
YXQgc2hvdWxkIGJlIHVzZWQgZm9yIGEgZmllbGQncyBmaWVsZAotLy8gbnVtYmVyIGNvbnN0YW50
Lgotc3RyaW5nIEZpZWxkQ29uc3RhbnROYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciAqZmllbGQp
OwotCi0vLyBSZXR1cm5zIHRoZSBzY29wZSB3aGVyZSB0aGUgZmllbGQgd2FzIGRlZmluZWQgKGZv
ciBleHRlbnNpb25zLCB0aGlzIGlzCi0vLyBkaWZmZXJlbnQgZnJvbSB0aGUgbWVzc2FnZSB0eXBl
IHRvIHdoaWNoIHRoZSBmaWVsZCBhcHBsaWVzKS4KLWlubGluZSBjb25zdCBEZXNjcmlwdG9yKiBG
aWVsZFNjb3BlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgcmV0dXJuIGZpZWxk
LT5pc19leHRlbnNpb24oKSA/Ci0gICAgZmllbGQtPmV4dGVuc2lvbl9zY29wZSgpIDogZmllbGQt
PmNvbnRhaW5pbmdfdHlwZSgpOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuICdm
aWVsZF9kZXNjcmlwdG9yJyBoYXMgYSBtZXNzYWdlIHR5cGUgdGhhdCBpcwotLy8gYSBkZXBlbmRl
bmN5IG9mIHRoZSBmaWxlIHdoZXJlIHRoZSBmaWVsZCBpcyBkZWZpbmVkIChpLmUuLCB0aGUgZmll
bGQKLS8vIHR5cGUgaXMgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBmaWxlIHRoYW4gdGhlIG1lc3Nh
Z2UgaG9sZGluZyB0aGUgZmllbGQpLgotLy8KLS8vIFRoaXMgb25seSBhcHBsaWVzIHRvIE1lc3Nh
Z2UtdHlwZWQgZmllbGRzLiBFbnVtLXR5cGVkIGZpZWxkcyBtYXkgcmVmZXIKLS8vIHRvIGFuIGVu
dW0gaW4gYSBkZXBlbmRlbmN5OyBob3dldmVyLCBlbnVtcyBhcmUgc3BlY2lmaWVkIGFuZAotLy8g
Zm9yd2FyZC1kZWNsYXJlZCB3aXRoIGFuIGVudW0tYmFzZSwgc28gdGhlIGRlZmluaXRpb24gaXMg
bm90IHJlcXVpcmVkIHRvCi0vLyBtYW5pcHVsYXRlIHRoZSBmaWVsZCB2YWx1ZS4KLWJvb2wgSXNG
aWVsZERlcGVuZGVudChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3IpOwot
Ci0vLyBSZXR1cm5zIHRoZSBuYW1lIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGZvcmNpbmcgZGVw
ZW5kZW50IGxvb2t1cCBmcm9tIGEKLS8vIGRlcGVuZGVudCBiYXNlIGNsYXNzLgotc3RyaW5nIERl
cGVuZGVudFR5cGVOYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpOwotCi0vLyBSZXR1
cm5zIHRoZSBmdWxseS1xdWFsaWZpZWQgdHlwZSBuYW1lIGZpZWxkLT5tZXNzYWdlX3R5cGUoKS4g
IFVzdWFsbHkgdGhpcwotLy8gaXMganVzdCBDbGFzc05hbWUoZmllbGQtPm1lc3NhZ2VfdHlwZSgp
LCB0cnVlKTsKLXN0cmluZyBGaWVsZE1lc3NhZ2VUeXBlTmFtZShjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkKTsKLQotLy8gU3RyaXBzICIucHJvdG8iIG9yICIucHJvdG9kZXZlbCIgZnJvbSB0
aGUgZW5kIG9mIGEgZmlsZW5hbWUuCi1MSUJQUk9UT0NfRVhQT1JUIHN0cmluZyBTdHJpcFByb3Rv
KGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpOwotCi0vLyBHZXQgdGhlIEMrKyB0eXBlIG5hbWUgZm9y
IGEgcHJpbWl0aXZlIHR5cGUgKGUuZy4gImRvdWJsZSIsICI6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dDMyIiwgZXRjLikuCi0vLyBOb3RlOiAgbm9uLWJ1aWx0LWluIHR5cGUgbmFtZXMgd2lsbCBiZSBx
dWFsaWZpZWQsIG1lYW5pbmcgdGhleSB3aWxsIHN0YXJ0Ci0vLyB3aXRoIGEgOjouICBJZiB5b3Ug
YXJlIHVzaW5nIHRoZSB0eXBlIGFzIGEgdGVtcGxhdGUgcGFyYW1ldGVyLCB5b3Ugd2lsbAotLy8g
bmVlZCB0byBpbnN1cmUgdGhlcmUgaXMgYSBzcGFjZSBiZXR3ZWVuIHRoZSA8IGFuZCB0aGUgOjos
IGJlY2F1c2UgdGhlCi0vLyByaWRpY3Vsb3VzIEMrKyBzdGFuZGFyZCBkZWZpbmVzICI8OiIgdG8g
YmUgYSBzeW5vbnltIGZvciAiWyIuCi1jb25zdCBjaGFyKiBQcmltaXRpdmVUeXBlTmFtZShGaWVs
ZERlc2NyaXB0b3I6OkNwcFR5cGUgdHlwZSk7Ci0KLS8vIEdldCB0aGUgZGVjbGFyZWQgdHlwZSBu
YW1lIGluIENhbWVsQ2FzZSBmb3JtYXQsIGFzIGlzIHVzZWQgZS5nLiBmb3IgdGhlCi0vLyBtZXRo
b2RzIG9mIFdpcmVGb3JtYXQuICBGb3IgZXhhbXBsZSwgVFlQRV9JTlQzMiBiZWNvbWVzICJJbnQz
MiIuCi1jb25zdCBjaGFyKiBEZWNsYXJlZFR5cGVNZXRob2ROYW1lKEZpZWxkRGVzY3JpcHRvcjo6
VHlwZSB0eXBlKTsKLQotLy8gUmV0dXJuIHRoZSBjb2RlIHRoYXQgZXZhbHVhdGVzIHRvIHRoZSBu
dW1iZXIgd2hlbiBjb21waWxlZC4KLXN0cmluZyBJbnQzMlRvU3RyaW5nKGludCBudW1iZXIpOwot
Ci0vLyBSZXR1cm4gdGhlIGNvZGUgdGhhdCBldmFsdWF0ZXMgdG8gdGhlIG51bWJlciB3aGVuIGNv
bXBpbGVkLgotc3RyaW5nIEludDY0VG9TdHJpbmcoaW50NjQgbnVtYmVyKTsKLQotLy8gR2V0IGNv
ZGUgdGhhdCBldmFsdWF0ZXMgdG8gdGhlIGZpZWxkJ3MgZGVmYXVsdCB2YWx1ZS4KLXN0cmluZyBE
ZWZhdWx0VmFsdWUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLS8vIENvbnZlcnQg
YSBmaWxlIG5hbWUgaW50byBhIHZhbGlkIGlkZW50aWZpZXIuCi1zdHJpbmcgRmlsZW5hbWVJZGVu
dGlmaWVyKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpOwotCi0vLyBSZXR1cm4gdGhlIG5hbWUgb2Yg
dGhlIEFkZERlc2NyaXB0b3JzKCkgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gZmlsZS4KLXN0cmluZyBH
bG9iYWxBZGREZXNjcmlwdG9yc05hbWUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSk7Ci0KLS8vIFJl
dHVybiB0aGUgbmFtZSBvZiB0aGUgQXNzaWduRGVzY3JpcHRvcnMoKSBmdW5jdGlvbiBmb3IgYSBn
aXZlbiBmaWxlLgotc3RyaW5nIEdsb2JhbEFzc2lnbkRlc2NyaXB0b3JzTmFtZShjb25zdCBzdHJp
bmcmIGZpbGVuYW1lKTsKLQotLy8gUmV0dXJuIHRoZSBxdWFsaWZpZWQgQysrIG5hbWUgZm9yIGEg
ZmlsZSBsZXZlbCBzeW1ib2wuCi1zdHJpbmcgUXVhbGlmaWVkRmlsZUxldmVsU3ltYm9sKGNvbnN0
IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lKTsKLQotLy8gUmV0dXJuIHRoZSBu
YW1lIG9mIHRoZSBTaHV0ZG93bkZpbGUoKSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBmaWxlLgotc3Ry
aW5nIEdsb2JhbFNodXRkb3duRmlsZU5hbWUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSk7Ci0KLS8v
IEVzY2FwZSBDKysgdHJpZ3JhcGhzIGJ5IGVzY2FwaW5nIHF1ZXN0aW9uIG1hcmtzIHRvIFw/Ci1z
dHJpbmcgRXNjYXBlVHJpZ3JhcGhzKGNvbnN0IHN0cmluZyYgdG9fZXNjYXBlKTsKLQotLy8gRXNj
YXBlZCBmdW5jdGlvbiBuYW1lIHRvIGVsaW1pbmF0ZSBuYW1pbmcgY29uZmxpY3QuCi1zdHJpbmcg
U2FmZUZ1bmN0aW9uTmFtZShjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcHJlZml4KTsKLQotLy8gUmV0dXJucyB0cnVlIGlm
IHVua25vd24gZmllbGRzIGFyZSBwcmVzZXZlZCBhZnRlciBwYXJzaW5nLgotaW5saW5lIGJvb2wg
UHJlc2VydmVVbmtub3duRmllbGRzKGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UpIHsKLSAgcmV0
dXJuIG1lc3NhZ2UtPmZpbGUoKS0+c3ludGF4KCkgIT0gRmlsZURlc2NyaXB0b3I6OlNZTlRBWF9Q
Uk9UTzM7Ci19Ci0KLS8vIFJldHVybnMgdGhlIG9wdGltaXplIG1vZGUgZm9yIDxmaWxlPiwgcmVz
cGVjdGluZyA8b3B0aW9ucy5lbmZvcmNlX2xpdGU+LgotOjpnb29nbGU6OnByb3RvYnVmOjpGaWxl
T3B0aW9uc19PcHRpbWl6ZU1vZGUgR2V0T3B0aW1pemVGb3IoCi0gICAgY29uc3QgRmlsZURlc2Ny
aXB0b3IqIGZpbGUsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotCi0vLyBJZiBQcmVzZXJ2ZVVu
a25vd25GaWVsZHMoKSBpcyB0cnVlLCBkZXRlcm1pbmVzIHdoZXRoZXIgdW5rbm93bgotLy8gZmll
bGRzIHdpbGwgYmUgc3RvcmVkIGluIGFuIFVua25vd25GaWVsZFNldCBvciBhIHN0cmluZy4KLS8v
IElmIFByZXNlcnZlVW5rbm93bkZpZWxkcygpIGlzIGZhbHNlLCB0aGlzIG1ldGhvZCB3aWxsIG5v
dCBiZQotLy8gdXNlZC4KLWlubGluZSBib29sIFVzZVVua25vd25GaWVsZFNldChjb25zdCBGaWxl
RGVzY3JpcHRvciogZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBP
cHRpb25zJiBvcHRpb25zKSB7Ci0gIHJldHVybiBHZXRPcHRpbWl6ZUZvcihmaWxlLCBvcHRpb25z
KSAhPSBGaWxlT3B0aW9uczo6TElURV9SVU5USU1FOwotfQotCi0KLS8vIERvZXMgdGhlIGZpbGUg
aGF2ZSBhbnkgbWFwIGZpZWxkcywgbmVjZXNzaXRhdGluZyB0aGUgZmlsZSB0byBpbmNsdWRlCi0v
LyBtYXBfZmllbGRfaW5sLmggYW5kIG1hcC5oLgotYm9vbCBIYXNNYXBGaWVsZHMoY29uc3QgRmls
ZURlc2NyaXB0b3IqIGZpbGUpOwotCi0vLyBEb2VzIHRoaXMgZmlsZSBoYXZlIGFueSBlbnVtIHR5
cGUgZGVmaW5pdGlvbnM/Ci1ib29sIEhhc0VudW1EZWZpbml0aW9ucyhjb25zdCBGaWxlRGVzY3Jp
cHRvciogZmlsZSk7Ci0KLS8vIERvZXMgdGhpcyBmaWxlIGhhdmUgZ2VuZXJhdGVkIHBhcnNpbmcs
IHNlcmlhbGl6YXRpb24sIGFuZCBvdGhlcgotLy8gc3RhbmRhcmQgbWV0aG9kcyBmb3Igd2hpY2gg
cmVmbGVjdGlvbi1iYXNlZCBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbnMgZXhpc3Q/Ci1pbmxpbmUg
Ym9vbCBIYXNHZW5lcmF0ZWRNZXRob2RzKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKSB7Ci0g
IHJldHVybiBHZXRPcHRpbWl6ZUZvcihmaWxlLCBvcHRpb25zKSAhPSBGaWxlT3B0aW9uczo6Q09E
RV9TSVpFOwotfQotCi0vLyBEbyBtZXNzYWdlIGNsYXNzZXMgaW4gdGhpcyBmaWxlIGhhdmUgZGVz
Y3JpcHRvciBhbmQgcmVmbGVjdGlvbiBtZXRob2RzPwotaW5saW5lIGJvb2wgSGFzRGVzY3JpcHRv
ck1ldGhvZHMoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKSB7Ci0gIHJldHVybiBHZXRPcHRp
bWl6ZUZvcihmaWxlLCBvcHRpb25zKSAhPSBGaWxlT3B0aW9uczo6TElURV9SVU5USU1FOwotfQot
Ci0vLyBTaG91bGQgd2UgZ2VuZXJhdGUgZ2VuZXJpYyBzZXJ2aWNlcyBmb3IgdGhpcyBmaWxlPwot
aW5saW5lIGJvb2wgSGFzR2VuZXJpY1NlcnZpY2VzKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMp
IHsKLSAgcmV0dXJuIGZpbGUtPnNlcnZpY2VfY291bnQoKSA+IDAgJiYKLSAgICAgICAgIEdldE9w
dGltaXplRm9yKGZpbGUsIG9wdGlvbnMpICE9IEZpbGVPcHRpb25zOjpMSVRFX1JVTlRJTUUgJiYK
LSAgICAgICAgIGZpbGUtPm9wdGlvbnMoKS5jY19nZW5lcmljX3NlcnZpY2VzKCk7Ci19Ci0KLS8v
IFNob3VsZCB3ZSBnZW5lcmF0ZSBhIHNlcGFyYXRlLCBzdXBlci1vcHRpbWl6ZWQgY29kZSBwYXRo
IGZvciBzZXJpYWxpemluZyB0bwotLy8gZmxhdCBhcnJheXM/ICBXZSBkb24ndCBkbyB0aGlzIGlu
IExpdGUgbW9kZSBiZWNhdXNlIHdlJ2QgcmF0aGVyIHJlZHVjZSBjb2RlCi0vLyBzaXplLgotaW5s
aW5lIGJvb2wgSGFzRmFzdEFycmF5U2VyaWFsaXphdGlvbihjb25zdCBGaWxlRGVzY3JpcHRvciog
ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9u
cyYgb3B0aW9ucykgewotICByZXR1cm4gR2V0T3B0aW1pemVGb3IoZmlsZSwgb3B0aW9ucykgPT0g
RmlsZU9wdGlvbnM6OlNQRUVEOwotfQotCi0vLyBSZXR1cm5zIHdoZXRoZXIgd2UgaGF2ZSB0byBn
ZW5lcmF0ZSBjb2RlIHdpdGggc3RhdGljIGluaXRpYWxpemVycy4KLWJvb2wgU3RhdGljSW5pdGlh
bGl6ZXJzRm9yY2VkKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0KLS8vIFByaW50cyAnd2l0
aF9zdGF0aWNfaW5pdCcgaWYgc3RhdGljIGluaXRpYWxpemVycyBoYXZlIHRvIGJlIHVzZWQgZm9y
IHRoZQotLy8gcHJvdmlkZWQgZmlsZS4gT3RoZXJ3aXNlIGVtaXRzIGJvdGggJ3dpdGhfc3RhdGlj
X2luaXQnIGFuZAotLy8gJ3dpdGhvdXRfc3RhdGljX2luaXQnIHVzaW5nICNpZmRlZi4KLXZvaWQg
UHJpbnRIYW5kbGluZ09wdGlvbmFsU3RhdGljSW5pdGlhbGl6ZXJzKAotICAgIGNvbnN0IEZpbGVE
ZXNjcmlwdG9yKiBmaWxlLCBjb25zdCBPcHRpb25zJiBvcHRpb25zLCBpbzo6UHJpbnRlciogcHJp
bnRlciwKLSAgICBjb25zdCBjaGFyKiB3aXRoX3N0YXRpY19pbml0LCBjb25zdCBjaGFyKiB3aXRo
b3V0X3N0YXRpY19pbml0LAotICAgIGNvbnN0IGNoYXIqIHZhcjEgPSBOVUxMLCBjb25zdCBzdHJp
bmcmIHZhbDEgPSAiIiwgY29uc3QgY2hhciogdmFyMiA9IE5VTEwsCi0gICAgY29uc3Qgc3RyaW5n
JiB2YWwyID0gIiIpOwotCi12b2lkIFByaW50SGFuZGxpbmdPcHRpb25hbFN0YXRpY0luaXRpYWxp
emVycyhjb25zdCBtYXA8c3RyaW5nLCBzdHJpbmc+JiB2YXJzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25z
JiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiB3aXRoX3N0YXRpY19pbml0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogd2l0aG91dF9zdGF0aWNf
aW5pdCk7Ci0KLQotaW5saW5lIGJvb2wgSXNNYXBFbnRyeU1lc3NhZ2UoY29uc3QgRGVzY3JpcHRv
ciogZGVzY3JpcHRvcikgewotICByZXR1cm4gZGVzY3JpcHRvci0+b3B0aW9ucygpLm1hcF9lbnRy
eSgpOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkJ3MgQ1BQVFlQRSBpcyBzdHJp
bmcgb3IgbWVzc2FnZS4KLWJvb2wgSXNTdHJpbmdPck1lc3NhZ2UoY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCk7Ci0KLS8vIEZvciBhIHN0cmluZyBmaWVsZCwgcmV0dXJucyB0aGUgZWZmZWN0
aXZlIGN0eXBlLiAgSWYgdGhlIGFjdHVhbCBjdHlwZSBpcwotLy8gbm90IHN1cHBvcnRlZCwgcmV0
dXJucyB0aGUgZGVmYXVsdCBvZiBTVFJJTkcuCi1GaWVsZE9wdGlvbnM6OkNUeXBlIEVmZmVjdGl2
ZVN0cmluZ0NUeXBlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpOwotCi1zdHJpbmcgVW5k
ZXJzY29yZXNUb0NhbWVsQ2FzZShjb25zdCBzdHJpbmcmIGlucHV0LCBib29sIGNhcF9uZXh0X2xl
dHRlcik7Ci0KLWlubGluZSBib29sIEhhc0ZpZWxkUHJlc2VuY2UoY29uc3QgRmlsZURlc2NyaXB0
b3IqIGZpbGUpIHsKLSAgcmV0dXJuIGZpbGUtPnN5bnRheCgpICE9IEZpbGVEZXNjcmlwdG9yOjpT
WU5UQVhfUFJPVE8zOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgJ2VudW0nIHNlbWFudGljcyBh
cmUgc3VjaCB0aGF0IHVua25vd24gdmFsdWVzIGFyZSBwcmVzZXJ2ZWQKLS8vIGluIHRoZSBlbnVt
IGZpZWxkIGl0c2VsZiwgcmF0aGVyIHRoYW4gZ29pbmcgdG8gdGhlIFVua25vd25GaWVsZFNldC4K
LWlubGluZSBib29sIEhhc1ByZXNlcnZpbmdVbmtub3duRW51bVNlbWFudGljcyhjb25zdCBGaWxl
RGVzY3JpcHRvciogZmlsZSkgewotICByZXR1cm4gZmlsZS0+c3ludGF4KCkgPT0gRmlsZURlc2Ny
aXB0b3I6OlNZTlRBWF9QUk9UTzM7Ci19Ci0KLWlubGluZSBib29sIFN1cHBvcnRzQXJlbmFzKGNv
bnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKSB7Ci0gIHJldHVybiBmaWxlLT5vcHRpb25zKCkuY2Nf
ZW5hYmxlX2FyZW5hcygpOwotfQotCi1pbmxpbmUgYm9vbCBTdXBwb3J0c0FyZW5hcyhjb25zdCBE
ZXNjcmlwdG9yKiBkZXNjKSB7Ci0gIHJldHVybiBTdXBwb3J0c0FyZW5hcyhkZXNjLT5maWxlKCkp
OwotfQotCi1pbmxpbmUgYm9vbCBTdXBwb3J0c0FyZW5hcyhjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkKSB7Ci0gIHJldHVybiBTdXBwb3J0c0FyZW5hcyhmaWVsZC0+ZmlsZSgpKTsKLX0KLQot
Ym9vbCBJc0FueU1lc3NhZ2UoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotYm9v
bCBJc0FueU1lc3NhZ2UoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLWJvb2wgSXNX
ZWxsS25vd25NZXNzYWdlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLQotdm9p
ZCBHZW5lcmF0ZVV0ZjhDaGVja0NvZGVGb3JTdHJpbmcoY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMm
IG9wdGlvbnMsIGJvb2wgZm9yX3BhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbWFwPHN0cmluZywgc3RyaW5nPiYgdmFyaWFibGVzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFyYW1ldGVycywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotdm9p
ZCBHZW5lcmF0ZVV0ZjhDaGVja0NvZGVGb3JDb3JkKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmll
bGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0
aW9ucywgYm9vbCBmb3JfcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbWFwPHN0cmluZywgc3RyaW5nPiYgdmFyaWFibGVzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhcmFtZXRlcnMsIGlvOjpQcmludGVyKiBwcmlu
dGVyKTsKLQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9wdGlvbnNfT3B0aW1pemVN
b2RlIEdldE9wdGltaXplRm9yKAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLCBjb25z
dCBPcHRpb25zJiBvcHRpb25zKSB7Ci0gIHJldHVybiBvcHRpb25zLmVuZm9yY2VfbGl0ZQotICAg
ICAgPyBGaWxlT3B0aW9uczo6TElURV9SVU5USU1FCi0gICAgICA6IGZpbGUtPm9wdGlvbnMoKS5v
cHRpbWl6ZV9mb3IoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGNwcAotfSAgLy8gbmFtZXNwYWNl
IGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdv
b2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1BQX0hFTFBFUlNfSF9f
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tYXBfZmll
bGQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tYXBfZmllbGQuY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ODVjMzFiNGJmOGViZmI5YTJiYjVkOTY5
NjhiZjYzZjljNmQ0NzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfbWFwX2ZpZWxkLmNjCisr
KyAvZGV2L251bGwKQEAgLTEsNDExICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfbWFw
X2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfaGVs
cGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJv
dG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBjcHAgewotCi1ib29sIElz
UHJvdG8zRmllbGQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9kZXNjcmlwdG9yKSB7Ci0g
IGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlX2Rlc2NyaXB0b3IgPSBmaWVsZF9kZXNjcmlwdG9y
LT5maWxlKCk7Ci0gIHJldHVybiBmaWxlX2Rlc2NyaXB0b3ItPnN5bnRheCgpID09IEZpbGVEZXNj
cmlwdG9yOjpTWU5UQVhfUFJPVE8zOwotfQotCi12b2lkIFNldE1lc3NhZ2VWYXJpYWJsZXMoY29u
c3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
IG1hcDxzdHJpbmcsIHN0cmluZz4qIHZhcmlhYmxlcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBPcHRpb25zJiBvcHRpb25zKSB7Ci0gIFNldENvbW1vbkZpZWxkVmFyaWFibGVzKGRl
c2NyaXB0b3IsIHZhcmlhYmxlcywgb3B0aW9ucyk7Ci0gICgqdmFyaWFibGVzKVsidHlwZSJdID0g
RmllbGRNZXNzYWdlVHlwZU5hbWUoZGVzY3JpcHRvcik7Ci0gICgqdmFyaWFibGVzKVsic3RyZWFt
X3dyaXRlciJdID0KLSAgICAgICgqdmFyaWFibGVzKVsiZGVjbGFyZWRfdHlwZSJdICsKLSAgICAg
IChIYXNGYXN0QXJyYXlTZXJpYWxpemF0aW9uKGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5m
aWxlKCksIG9wdGlvbnMpCi0gICAgICAgICAgID8gIk1heWJlVG9BcnJheSIKLSAgICAgICAgICAg
OiAiIik7Ci0gICgqdmFyaWFibGVzKVsiZnVsbF9uYW1lIl0gPSBkZXNjcmlwdG9yLT5mdWxsX25h
bWUoKTsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGtleSA9Ci0gICAgICBkZXNjcmlwdG9y
LT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiB2YWwgPQotICAgICAgZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCktPkZpbmRG
aWVsZEJ5TmFtZSgidmFsdWUiKTsKLSAgKCp2YXJpYWJsZXMpWyJrZXlfY3BwIl0gPSBQcmltaXRp
dmVUeXBlTmFtZShrZXktPmNwcF90eXBlKCkpOwotICBzd2l0Y2ggKHZhbC0+Y3BwX3R5cGUoKSkg
ewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICAoKnZh
cmlhYmxlcylbInZhbF9jcHAiXSA9IEZpZWxkTWVzc2FnZVR5cGVOYW1lKHZhbCk7Ci0gICAgICAo
KnZhcmlhYmxlcylbIndyYXBwZXIiXSA9ICJFbnRyeVdyYXBwZXIiOwotICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTToKLSAgICAgICgqdmFyaWFibGVz
KVsidmFsX2NwcCJdID0gQ2xhc3NOYW1lKHZhbC0+ZW51bV90eXBlKCksIHRydWUpOwotICAgICAg
KCp2YXJpYWJsZXMpWyJ3cmFwcGVyIl0gPSAiRW51bUVudHJ5V3JhcHBlciI7Ci0gICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgKCp2YXJpYWJsZXMpWyJ2YWxfY3BwIl0gPSBQcmltaXRp
dmVUeXBlTmFtZSh2YWwtPmNwcF90eXBlKCkpOwotICAgICAgKCp2YXJpYWJsZXMpWyJ3cmFwcGVy
Il0gPSAiRW50cnlXcmFwcGVyIjsKLSAgfQotICAoKnZhcmlhYmxlcylbImtleV93aXJlX3R5cGUi
XSA9Ci0gICAgICAiOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OlRZUEVfIiArCi0gICAgICBUb1VwcGVyKERlY2xhcmVkVHlwZU1ldGhvZE5hbWUoa2V5LT50eXBl
KCkpKTsKLSAgKCp2YXJpYWJsZXMpWyJ2YWxfd2lyZV90eXBlIl0gPQotICAgICAgIjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFXyIgKwotICAgICAgVG9V
cHBlcihEZWNsYXJlZFR5cGVNZXRob2ROYW1lKHZhbC0+dHlwZSgpKSk7Ci0gICgqdmFyaWFibGVz
KVsibWFwX2NsYXNzbmFtZSJdID0gQ2xhc3NOYW1lKGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgp
LCBmYWxzZSk7Ci0gICgqdmFyaWFibGVzKVsibnVtYmVyIl0gPSBTaW1wbGVJdG9hKGRlc2NyaXB0
b3ItPm51bWJlcigpKTsKLSAgKCp2YXJpYWJsZXMpWyJ0YWciXSA9IFNpbXBsZUl0b2EoaW50ZXJu
YWw6OldpcmVGb3JtYXQ6Ok1ha2VUYWcoZGVzY3JpcHRvcikpOwotCi0gIGlmIChIYXNEZXNjcmlw
dG9yTWV0aG9kcyhkZXNjcmlwdG9yLT5maWxlKCksIG9wdGlvbnMpKSB7Ci0gICAgKCp2YXJpYWJs
ZXMpWyJsaXRlIl0gPSAiIjsKLSAgfSBlbHNlIHsKLSAgICAoKnZhcmlhYmxlcylbImxpdGUiXSA9
ICJMaXRlIjsKLSAgfQotCi0gIGlmICghSXNQcm90bzNGaWVsZChkZXNjcmlwdG9yKSAmJgotICAg
ICAgdmFsLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU0pIHsKLSAgICBjb25z
dCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBkZWZhdWx0X3ZhbHVlID0gdmFsLT5kZWZhdWx0X3ZhbHVl
X2VudW0oKTsKLSAgICAoKnZhcmlhYmxlcylbImRlZmF1bHRfZW51bV92YWx1ZSJdID0gSW50MzJU
b1N0cmluZyhkZWZhdWx0X3ZhbHVlLT5udW1iZXIoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgKCp2YXJp
YWJsZXMpWyJkZWZhdWx0X2VudW1fdmFsdWUiXSA9ICIwIjsKLSAgfQotfQotCi1NYXBGaWVsZEdl
bmVyYXRvcjo6TWFwRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMm
IG9wdGlvbnMpCi0gICAgOiBGaWVsZEdlbmVyYXRvcihvcHRpb25zKSwKLSAgICAgIGRlc2NyaXB0
b3JfKGRlc2NyaXB0b3IpLAotICAgICAgZGVwZW5kZW50X2ZpZWxkXyhvcHRpb25zLnByb3RvX2gg
JiYgSXNGaWVsZERlcGVuZGVudChkZXNjcmlwdG9yKSkgewotICBTZXRNZXNzYWdlVmFyaWFibGVz
KGRlc2NyaXB0b3IsICZ2YXJpYWJsZXNfLCBvcHRpb25zKTsKLX0KLQotTWFwRmllbGRHZW5lcmF0
b3I6On5NYXBGaWVsZEdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgTWFwRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVQcml2YXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgInR5cGVkZWYgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6TWFwRW50cnlMaXRlPFxuIgotICAgICAgIiAgICAka2V5X2NwcCQsICR2
YWxfY3BwJCxcbiIKLSAgICAgICIgICAgJGtleV93aXJlX3R5cGUkLFxuIgotICAgICAgIiAgICAk
dmFsX3dpcmVfdHlwZSQsXG4iCi0gICAgICAiICAgICRkZWZhdWx0X2VudW1fdmFsdWUkID5cbiIK
LSAgICAgICIgICAgJG1hcF9jbGFzc25hbWUkO1xuIgotICAgICAgIjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6Ok1hcEZpZWxkJGxpdGUkPFxuIgotICAgICAgIiAgICAka2V5X2NwcCQsICR2
YWxfY3BwJCxcbiIKLSAgICAgICIgICAgJGtleV93aXJlX3R5cGUkLFxuIgotICAgICAgIiAgICAk
dmFsX3dpcmVfdHlwZSQsXG4iCi0gICAgICAiICAgICRkZWZhdWx0X2VudW1fdmFsdWUkID4gJG5h
bWUkXztcbiIpOwotfQotCi12b2lkIE1hcEZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQWNjZXNz
b3JEZWNsYXJhdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRlZF9hdHRyJGNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWFwPCAka2V5X2NwcCQsICR2YWxfY3BwJCA+JlxuIgotICAgICAgIiAgICAk
bmFtZSQoKSBjb25zdDtcbiIKLSAgICAgICIkZGVwcmVjYXRlZF9hdHRyJDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWFwPCAka2V5X2NwcCQsICR2YWxfY3BwJCA+KlxuIgotICAgICAgIiAgICBtdXRhYmxl
XyRuYW1lJCgpO1xuIik7Ci19Ci0KLXZvaWQgTWFwRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJ
bmxpbmVBY2Nlc3NvckRlZmluaXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfaW5saW5lKSBjb25zdCB7Ci0gIG1hcDxz
dHJpbmcsIHN0cmluZz4gdmFyaWFibGVzKHZhcmlhYmxlc18pOwotICB2YXJpYWJsZXNbImlubGlu
ZSJdID0gaXNfaW5saW5lID8gImlubGluZSIgOiAiIjsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzLAotICAgICAgIiRpbmxpbmUkIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWFwPCAka2V5
X2NwcCQsICR2YWxfY3BwJCA+JlxuIgotICAgICAgIiRjbGFzc25hbWUkOjokbmFtZSQoKSBjb25z
dCB7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbWFwOiRm
dWxsX25hbWUkKVxuIgotICAgICAgIiAgcmV0dXJuICRuYW1lJF8uR2V0TWFwKCk7XG4iCi0gICAg
ICAifVxuIgotICAgICAgIiRpbmxpbmUkIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWFwPCAka2V5X2Nw
cCQsICR2YWxfY3BwJCA+KlxuIgotICAgICAgIiRjbGFzc25hbWUkOjptdXRhYmxlXyRuYW1lJCgp
IHtcbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxl
X21hcDokZnVsbF9uYW1lJClcbiIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfLk11dGFibGVNYXAo
KTtcbiIKLSAgICAgICJ9XG4iKTsKLX0KLQotdm9pZCBNYXBGaWVsZEdlbmVyYXRvcjo6Ci1HZW5l
cmF0ZUNsZWFyaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBtYXA8c3Ry
aW5nLCBzdHJpbmc+IHZhcmlhYmxlcyh2YXJpYWJsZXNfKTsKLSAgdmFyaWFibGVzWyJ0aGlzX21l
c3NhZ2UiXSA9IGRlcGVuZGVudF9maWVsZF8gPyBEZXBlbmRlbnRCYXNlRG93bkNhc3QoKSA6ICIi
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsICIkdGhpc19tZXNzYWdlJCRuYW1lJF8uQ2xl
YXIoKTtcbiIpOwotfQotCi12b2lkIE1hcEZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVyZ2lu
Z0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywgIiRuYW1lJF8uTWVyZ2VGcm9tKGZyb20uJG5hbWUkXyk7XG4iKTsKLX0KLQotdm9p
ZCBNYXBGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVN3YXBwaW5nQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiJG5hbWUkXy5T
d2FwKCZvdGhlci0+JG5hbWUkXyk7XG4iKTsKLX0KLQotdm9pZCBNYXBGaWVsZEdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUNvbnN0cnVjdG9yQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qgewot
ICBpZiAoSGFzRGVzY3JpcHRvck1ldGhvZHMoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18p
KSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIiRuYW1lJF8uU2V0
QXNzaWduRGVzY3JpcHRvckNhbGxiYWNrKFxuIgotICAgICAgICAiICAgIHByb3RvYnVmX0Fzc2ln
bkRlc2NyaXB0b3JzT25jZSk7XG4iCi0gICAgICAgICIkbmFtZSRfLlNldEVudHJ5RGVzY3JpcHRv
cihcbiIKLSAgICAgICAgIiAgICAmJHR5cGUkX2Rlc2NyaXB0b3JfKTtcbiIpOwotICB9Ci19Ci0K
LXZvaWQgTWFwRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZXJnZUZyb21Db2RlZFN0cmVhbShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZh
bHVlX2ZpZWxkID0KLSAgICAgIGRlc2NyaXB0b3JfLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxk
QnlOYW1lKCJ2YWx1ZSIpOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIjo6
Z29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjwkbWFwX2NsYXNzbmFtZSQ+IGVudHJ5KCRuYW1l
JF8uTmV3RW50cnkoKSk7XG4iKTsKLQotICBpZiAoSXNQcm90bzNGaWVsZChkZXNjcmlwdG9yXykg
fHwKLSAgICAgIHZhbHVlX2ZpZWxkLT50eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0VO
VU0pIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiRE9fKDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmly
dHVhbChcbiIKLSAgICAgICAgIiAgICBpbnB1dCwgZW50cnkuZ2V0KCkpKTtcbiIpOwotICAgIHN3
aXRjaCAodmFsdWVfZmllbGQtPmNwcF90eXBlKCkpIHsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgICAgICAgICAiKCptdXRhYmxlXyRuYW1lJCgpKVtlbnRyeS0+a2V5KCldLlN3YXAoIgot
ICAgICAgICAgICAgImVudHJ5LT5tdXRhYmxlX3ZhbHVlKCkpO1xuIik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTToKLSAgICAgICAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgICAgICIoKm11dGFibGVfJG5hbWUkKCkp
W2VudHJ5LT5rZXkoKV0gPVxuIgotICAgICAgICAgICAgIiAgICBzdGF0aWNfY2FzdDwgJHZhbF9j
cHAkID4oKmVudHJ5LT5tdXRhYmxlX3ZhbHVlKCkpO1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAg
ICAgICIoKm11dGFibGVfJG5hbWUkKCkpW2VudHJ5LT5rZXkoKV0gPSAqZW50cnktPm11dGFibGVf
dmFsdWUoKTtcbiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIntcbiIKLSAgICAgICAgIiAgOjpzdGQ6
OnN0cmluZyBkYXRhO1xuIgotICAgICAgICAiICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoaW5wdXQsICZkYXRhKSk7XG4iCi0gICAg
ICAgICIgIERPXyhlbnRyeS0+UGFyc2VGcm9tU3RyaW5nKGRhdGEpKTtcbiIKLSAgICAgICAgIiAg
aWYgKCR2YWxfY3BwJF9Jc1ZhbGlkKCplbnRyeS0+bXV0YWJsZV92YWx1ZSgpKSkge1xuIgotICAg
ICAgICAiICAgICgqbXV0YWJsZV8kbmFtZSQoKSlbZW50cnktPmtleSgpXSA9XG4iCi0gICAgICAg
ICIgICAgICAgIHN0YXRpY19jYXN0PCAkdmFsX2NwcCQgPigqZW50cnktPm11dGFibGVfdmFsdWUo
KSk7XG4iCi0gICAgICAgICIgIH0gZWxzZSB7XG4iKTsKLSAgICBpZiAoSGFzRGVzY3JpcHRvck1l
dGhvZHMoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICAgICAgICIgICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygp
IgotICAgICAgICAgICItPkFkZExlbmd0aERlbGltaXRlZCgkbnVtYmVyJCwgZGF0YSk7XG4iKTsK
LSAgICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAg
ICAiICAgIHVua25vd25fZmllbGRzX3N0cmVhbS5Xcml0ZVZhcmludDMyKCR0YWckKTtcbiIKLSAg
ICAgICAgICAiICAgIHVua25vd25fZmllbGRzX3N0cmVhbS5Xcml0ZVZhcmludDMyKGRhdGEuc2l6
ZSgpKTtcbiIKLSAgICAgICAgICAiICAgIHVua25vd25fZmllbGRzX3N0cmVhbS5Xcml0ZVN0cmlu
ZyhkYXRhKTtcbiIpOwotICAgIH0KLQotCi0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAgICAgIiAgfVxuIgotICAgICAgICAifVxuIik7Ci0gIH0KLQotICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGtleV9maWVsZCA9Ci0gICAgICBkZXNjcmlwdG9yXy0+bWVzc2FnZV90eXBlKCkt
PkZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gIGlmIChrZXlfZmllbGQtPnR5cGUoKSA9PSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfU1RSSU5HKSB7Ci0gICAgR2VuZXJhdGVVdGY4Q2hlY2tDb2RlRm9y
U3RyaW5nKAotICAgICAgICBrZXlfZmllbGQsIG9wdGlvbnNfLCB0cnVlLCB2YXJpYWJsZXNfLAot
ICAgICAgICAiZW50cnktPmtleSgpLmRhdGEoKSwgZW50cnktPmtleSgpLmxlbmd0aCgpLFxuIiwg
cHJpbnRlcik7Ci0gIH0KLSAgaWYgKHZhbHVlX2ZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlw
dG9yOjpUWVBFX1NUUklORykgewotICAgIEdlbmVyYXRlVXRmOENoZWNrQ29kZUZvclN0cmluZyh2
YWx1ZV9maWVsZCwgb3B0aW9uc18sIHRydWUsIHZhcmlhYmxlc18sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJlbnRyeS0+bXV0YWJsZV92YWx1ZSgpLT5kYXRhKCksXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbnRyeS0+bXV0YWJsZV92YWx1ZSgp
LT5sZW5ndGgoKSxcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50
ZXIpOwotICB9Ci0KLSAgLy8gSWYgZW50cnkgaXMgYWxsb2NhdGVkIGJ5IGFyZW5hLCBpdHMgZGVz
Y3RydWN0b3Igc2hvdWxkIGJlIGF2b2lkZWQuCi0gIGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlw
dG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiaWYgKGVu
dHJ5LT5HZXRBcmVuYSgpICE9IE5VTEwpIGVudHJ5LnJlbGVhc2UoKTtcbiIpOwotICB9Ci19Ci0K
LXZvaWQgTWFwRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6
ZXMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAgICJ7XG4iCi0gICAgICAiICA6Omdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9w
dHI8JG1hcF9jbGFzc25hbWUkPiBlbnRyeTtcbiIKLSAgICAgICIgIGZvciAoOjpnb29nbGU6OnBy
b3RvYnVmOjpNYXA8ICRrZXlfY3BwJCwgJHZhbF9jcHAkID46OmNvbnN0X2l0ZXJhdG9yXG4iCi0g
ICAgICAiICAgICAgaXQgPSB0aGlzLT4kbmFtZSQoKS5iZWdpbigpO1xuIgotICAgICAgIiAgICAg
IGl0ICE9IHRoaXMtPiRuYW1lJCgpLmVuZCgpOyArK2l0KSB7XG4iKTsKLQotICAvLyBJZiBlbnRy
eSBpcyBhbGxvY2F0ZWQgYnkgYXJlbmEsIGl0cyBkZXNjdHJ1Y3RvciBzaG91bGQgYmUgYXZvaWRl
ZC4KLSAgaWYgKFN1cHBvcnRzQXJlbmFzKGRlc2NyaXB0b3JfKSkgewotICAgIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgICAgICIgICAgaWYgKGVudHJ5LmdldCgpICE9IE5VTEwgJiYg
ZW50cnktPkdldEFyZW5hKCkgIT0gTlVMTCkge1xuIgotICAgICAgICAiICAgICAgZW50cnkucmVs
ZWFzZSgpO1xuIgotICAgICAgICAiICAgIH1cbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAgICIgICAgZW50cnkucmVzZXQoJG5hbWUkXy5OZXckd3JhcHBlciQo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKSk7XG4iCi0gICAgICAiICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZSRzdHJlYW1fd3JpdGVyJChcbiIKLSAg
ICAgICIgICAgICAgICRudW1iZXIkLCAqZW50cnksIG91dHB1dCk7XG4iKTsKLQotICBwcmludGVy
LT5JbmRlbnQoKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBrZXlfZmllbGQgPQotICAgICAgZGVzY3JpcHRvcl8tPm1lc3NhZ2VfdHlwZSgpLT5GaW5k
RmllbGRCeU5hbWUoImtleSIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbHVlX2ZpZWxk
ID0KLSAgICAgIGRlc2NyaXB0b3JfLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJ2
YWx1ZSIpOwotICBpZiAoa2V5X2ZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBF
X1NUUklORykgewotICAgIEdlbmVyYXRlVXRmOENoZWNrQ29kZUZvclN0cmluZyhrZXlfZmllbGQs
IG9wdGlvbnNfLCBmYWxzZSwgdmFyaWFibGVzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIml0LT5maXJzdC5kYXRhKCksIGl0LT5maXJzdC5sZW5ndGgoKSxcbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZXIpOwotICB9Ci0gIGlmICh2YWx1
ZV9maWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcpIHsKLSAgICBH
ZW5lcmF0ZVV0ZjhDaGVja0NvZGVGb3JTdHJpbmcodmFsdWVfZmllbGQsIG9wdGlvbnNfLCBmYWxz
ZSwgdmFyaWFibGVzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIml0LT5z
ZWNvbmQuZGF0YSgpLCBpdC0+c2Vjb25kLmxlbmd0aCgpLFxuIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpbnRlcik7Ci0gIH0KLQotICBwcmludGVyLT5PdXRkZW50KCk7
Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAgICIgIH1c
biIpOwotCi0gIC8vIElmIGVudHJ5IGlzIGFsbG9jYXRlZCBieSBhcmVuYSwgaXRzIGRlc2N0cnVj
dG9yIHNob3VsZCBiZSBhdm9pZGVkLgotICBpZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8p
KSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIiAgaWYgKGVudHJ5
LmdldCgpICE9IE5VTEwgJiYgZW50cnktPkdldEFyZW5hKCkgIT0gTlVMTCkge1xuIgotICAgICAg
ICAiICAgIGVudHJ5LnJlbGVhc2UoKTtcbiIKLSAgICAgICAgIiAgfVxuIik7Ci0gIH0KLQotICBw
cmludGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQgTWFwRmllbGRHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAie1xuIgotICAg
ICAgIiAgOjpnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPCRtYXBfY2xhc3NuYW1lJD4gZW50
cnk7XG4iCi0gICAgICAiICBmb3IgKDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWFwPCAka2V5X2NwcCQs
ICR2YWxfY3BwJCA+Ojpjb25zdF9pdGVyYXRvclxuIgotICAgICAgIiAgICAgIGl0ID0gdGhpcy0+
JG5hbWUkKCkuYmVnaW4oKTtcbiIKLSAgICAgICIgICAgICBpdCAhPSB0aGlzLT4kbmFtZSQoKS5l
bmQoKTsgKytpdCkge1xuIik7Ci0KLSAgLy8gSWYgZW50cnkgaXMgYWxsb2NhdGVkIGJ5IGFyZW5h
LCBpdHMgZGVzY3RydWN0b3Igc2hvdWxkIGJlIGF2b2lkZWQuCi0gIGlmIChTdXBwb3J0c0FyZW5h
cyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
ICAiICAgIGlmIChlbnRyeS5nZXQoKSAhPSBOVUxMICYmIGVudHJ5LT5HZXRBcmVuYSgpICE9IE5V
TEwpIHtcbiIKLSAgICAgICAgIiAgICAgIGVudHJ5LnJlbGVhc2UoKTtcbiIKLSAgICAgICAgIiAg
ICB9XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiICAg
IGVudHJ5LnJlc2V0KCRuYW1lJF8uTmV3JHdyYXBwZXIkKGl0LT5maXJzdCwgaXQtPnNlY29uZCkp
O1xuIgotICAgICAgIiAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6XG4iCi0gICAgICAiICAgICAgICBXcml0ZSRkZWNsYXJlZF90eXBlJE5v
VmlydHVhbFRvQXJyYXkoXG4iCi0gICAgICAiICAgICAgICAgICAgJG51bWJlciQsICplbnRyeSwg
dGFyZ2V0KTtcbiIpOwotCi0gIHByaW50ZXItPkluZGVudCgpOwotICBwcmludGVyLT5JbmRlbnQo
KTsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGtleV9maWVsZCA9Ci0gICAgICBkZXNjcmlw
dG9yXy0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogdmFsdWVfZmllbGQgPQotICAgICAgZGVzY3JpcHRvcl8tPm1lc3NhZ2Vf
dHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gIGlmIChrZXlfZmllbGQtPnR5cGUo
KSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU1RSSU5HKSB7Ci0gICAgR2VuZXJhdGVVdGY4Q2hl
Y2tDb2RlRm9yU3RyaW5nKGtleV9maWVsZCwgb3B0aW9uc18sIGZhbHNlLCB2YXJpYWJsZXNfLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXQtPmZpcnN0LmRhdGEoKSwgaXQt
PmZpcnN0Lmxlbmd0aCgpLFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbnRlcik7Ci0gIH0KLSAgaWYgKHZhbHVlX2ZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlw
dG9yOjpUWVBFX1NUUklORykgewotICAgIEdlbmVyYXRlVXRmOENoZWNrQ29kZUZvclN0cmluZyh2
YWx1ZV9maWVsZCwgb3B0aW9uc18sIGZhbHNlLCB2YXJpYWJsZXNfLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaXQtPnNlY29uZC5kYXRhKCksIGl0LT5zZWNvbmQubGVuZ3Ro
KCksXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVyKTsKLSAg
fQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmlu
dGVyLT5QcmludCgKLSAgICAgICIgIH1cbiIpOwotCi0gIC8vIElmIGVudHJ5IGlzIGFsbG9jYXRl
ZCBieSBhcmVuYSwgaXRzIGRlc2N0cnVjdG9yIHNob3VsZCBiZSBhdm9pZGVkLgotICBpZiAoU3Vw
cG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICAgIiAgaWYgKGVudHJ5LmdldCgpICE9IE5VTEwgJiYgZW50cnktPkdldEFyZW5h
KCkgIT0gTlVMTCkge1xuIgotICAgICAgICAiICAgIGVudHJ5LnJlbGVhc2UoKTtcbiIKLSAgICAg
ICAgIiAgfVxuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQg
TWFwRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCeXRlU2l6ZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgInRvdGFsX3Np
emUgKz0gJHRhZ19zaXplJCAqIHRoaXMtPiRuYW1lJF9zaXplKCk7XG4iCi0gICAgICAie1xuIgot
ICAgICAgIiAgOjpnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPCRtYXBfY2xhc3NuYW1lJD4g
ZW50cnk7XG4iCi0gICAgICAiICBmb3IgKDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWFwPCAka2V5X2Nw
cCQsICR2YWxfY3BwJCA+Ojpjb25zdF9pdGVyYXRvclxuIgotICAgICAgIiAgICAgIGl0ID0gdGhp
cy0+JG5hbWUkKCkuYmVnaW4oKTtcbiIKLSAgICAgICIgICAgICBpdCAhPSB0aGlzLT4kbmFtZSQo
KS5lbmQoKTsgKytpdCkge1xuIik7Ci0KLSAgLy8gSWYgZW50cnkgaXMgYWxsb2NhdGVkIGJ5IGFy
ZW5hLCBpdHMgZGVzY3RydWN0b3Igc2hvdWxkIGJlIGF2b2lkZWQuCi0gIGlmIChTdXBwb3J0c0Fy
ZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICAgICAiICAgIGlmIChlbnRyeS5nZXQoKSAhPSBOVUxMICYmIGVudHJ5LT5HZXRBcmVuYSgpICE9
IE5VTEwpIHtcbiIKLSAgICAgICAgIiAgICAgIGVudHJ5LnJlbGVhc2UoKTtcbiIKLSAgICAgICAg
IiAgICB9XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAi
ICAgIGVudHJ5LnJlc2V0KCRuYW1lJF8uTmV3JHdyYXBwZXIkKGl0LT5maXJzdCwgaXQtPnNlY29u
ZCkpO1xuIgotICAgICAgIiAgICB0b3RhbF9zaXplICs9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpcbiIKLSAgICAgICIgICAgICAgICRkZWNsYXJlZF90eXBl
JFNpemVOb1ZpcnR1YWwoKmVudHJ5KTtcbiIKLSAgICAgICIgIH1cbiIpOwotCi0gIC8vIElmIGVu
dHJ5IGlzIGFsbG9jYXRlZCBieSBhcmVuYSwgaXRzIGRlc2N0cnVjdG9yIHNob3VsZCBiZSBhdm9p
ZGVkLgotICBpZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIiAgaWYgKGVudHJ5LmdldCgpICE9IE5VTEwgJiYg
ZW50cnktPkdldEFyZW5hKCkgIT0gTlVMTCkge1xuIgotICAgICAgICAiICAgIGVudHJ5LnJlbGVh
c2UoKTtcbiIKLSAgICAgICAgIiAgfVxuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgifVxu
Iik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tYXBfZmllbGQuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21hcF9maWVsZC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwODdkY2RlMGY0ZWVhODQ3NmZkNjNlMjQ2NDY4YzM5NGQyZmVj
NGE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21hcF9maWVsZC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNzYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNp
Zm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9NQVBfRklFTERfSF9fCi0jZGVmaW5l
IEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DUFBfTUFQX0ZJRUxEX0hfXwotCi0jaW5jbHVkZSA8
bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jcHAvY3BwX21lc3NhZ2VfZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1l
c3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBjcHAgewot
Ci1jbGFzcyBNYXBGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBGaWVsZEdlbmVyYXRvciB7Ci0gcHVi
bGljOgotICBNYXBGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0
b3IsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotICB+TWFwRmllbGRHZW5lcmF0b3IoKTsKLQot
ICAvLyBpbXBsZW1lbnRzIEZpZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICB2b2lkIEdlbmVyYXRlUHJpdmF0ZU1lbWJlcnMoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQWNjZXNzb3JEZWNsYXJhdGlvbnMoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSW5saW5lQWNjZXNzb3JE
ZWZpbml0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBpc19pbmxpbmUpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
Q2xlYXJpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZVN3YXBwaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVDb25zdHJ1Y3RvckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlTWVyZ2VGcm9tQ29kZWRTdHJlYW0oaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJy
YXkoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnl0ZVNpemUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAgY29uc3QgYm9vbCBkZXBlbmRlbnRfZmllbGRfOwot
ICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VW
SUxfQ09OU1RSVUNUT1JTKE1hcEZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVm
Ci0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NP
TVBJTEVSX0NQUF9NQVBfRklFTERfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3BwL2NwcF9tZXNzYWdlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfbWVzc2FnZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y4ZTNi
N2Y4ZGQwZmJkNDhmNTA0ODNjNWVlYWFjZTdlMjM2YjBmZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3Bw
L2NwcF9tZXNzYWdlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzc5OCArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNv
bSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMg
ZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2hh
c2guaD4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVE
X1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNl
bmRpZgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvY3BwL2NwcF9leHRlbnNpb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvY3BwL2NwcF9oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvZGVzY3JpcHRvci5wYi5oPgotCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsKLQotdXNpbmcg
aW50ZXJuYWw6OldpcmVGb3JtYXQ7Ci11c2luZyBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU7Ci0K
LW5hbWVzcGFjZSB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBQcmludEZpZWxkQ29tbWVu
dChpbzo6UHJpbnRlciogcHJpbnRlciwgY29uc3QgVCogZmllbGQpIHsKLSAgLy8gUHJpbnQgdGhl
IGZpZWxkJ3MgKG9yIG9uZW9mJ3MpIHByb3RvLXN5bnRheCBkZWZpbml0aW9uIGFzIGEgY29tbWVu
dC4KLSAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwcmludCBncm91cCBib2RpZXMgc28gd2UgY3V0IG9m
ZiBhZnRlciB0aGUgZmlyc3QKLSAgLy8gbGluZS4KLSAgRGVidWdTdHJpbmdPcHRpb25zIG9wdGlv
bnM7Ci0gIG9wdGlvbnMuZWxpZGVfZ3JvdXBfYm9keSA9IHRydWU7Ci0gIG9wdGlvbnMuZWxpZGVf
b25lb2ZfYm9keSA9IHRydWU7Ci0gIHN0cmluZyBkZWYgPSBmaWVsZC0+RGVidWdTdHJpbmdXaXRo
T3B0aW9ucyhvcHRpb25zKTsKLSAgcHJpbnRlci0+UHJpbnQoIi8vICRkZWYkXG4iLAotICAgICJk
ZWYiLCBkZWYuc3Vic3RyKDAsIGRlZi5maW5kX2ZpcnN0X29mKCdcbicpKSk7Ci19Ci0KLXN0cnVj
dCBGaWVsZE9yZGVyaW5nQnlOdW1iZXIgewotICBpbmxpbmUgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGIpIGNvbnN0IHsKLSAgICByZXR1cm4gYS0+bnVtYmVyKCkgPCBiLT5udW1i
ZXIoKTsKLSAgfQotfTsKLQotLy8gU29ydCB0aGUgZmllbGRzIG9mIHRoZSBnaXZlbiBEZXNjcmlw
dG9yIGJ5IG51bWJlciBpbnRvIGEgbmV3W10nZCBhcnJheQotLy8gYW5kIHJldHVybiBpdC4KLWNv
bnN0IEZpZWxkRGVzY3JpcHRvcioqIFNvcnRGaWVsZHNCeU51bWJlcihjb25zdCBEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yKSB7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioqIGZpZWxkcyA9Ci0gICAg
bmV3IGNvbnN0IEZpZWxkRGVzY3JpcHRvcipbZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKV07Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0g
ICAgZmllbGRzW2ldID0gZGVzY3JpcHRvci0+ZmllbGQoaSk7Ci0gIH0KLSAgc3RkOjpzb3J0KGZp
ZWxkcywgZmllbGRzICsgZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKSwKLSAgICAgICAgICAgIEZp
ZWxkT3JkZXJpbmdCeU51bWJlcigpKTsKLSAgcmV0dXJuIGZpZWxkczsKLX0KLQotLy8gRnVuY3Rv
ciBmb3Igc29ydGluZyBleHRlbnNpb24gcmFuZ2VzIGJ5IHRoZWlyICJzdGFydCIgZmllbGQgbnVt
YmVyLgotc3RydWN0IEV4dGVuc2lvblJhbmdlU29ydGVyIHsKLSAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlKiBsZWZ0LAotICAgICAgICAgICAgICAgICAg
Y29uc3QgRGVzY3JpcHRvcjo6RXh0ZW5zaW9uUmFuZ2UqIHJpZ2h0KSBjb25zdCB7Ci0gICAgcmV0
dXJuIGxlZnQtPnN0YXJ0IDwgcmlnaHQtPnN0YXJ0OwotICB9Ci19OwotCi0vLyBSZXR1cm5zIHRy
dWUgaWYgdGhlICJyZXF1aXJlZCIgcmVzdHJpY3Rpb24gY2hlY2sgc2hvdWxkIGJlIGlnbm9yZWQg
Zm9yIHRoZQotLy8gZ2l2ZW4gZmllbGQuCi1pbmxpbmUgc3RhdGljIGJvb2wgU2hvdWxkSWdub3Jl
UmVxdWlyZWRGaWVsZENoZWNrKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMm
IG9wdGlvbnMpIHsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhl
IG1lc3NhZ2UgdHlwZSBoYXMgYW55IHJlcXVpcmVkIGZpZWxkcy4gIElmIGl0IGRvZXNuJ3QsCi0v
LyB3ZSBjYW4gb3B0aW1pemUgb3V0IGNhbGxzIHRvIGl0cyBJc0luaXRpYWxpemVkKCkgbWV0aG9k
LgotLy8KLS8vIGFscmVhZHlfc2VlbiBpcyB1c2VkIHRvIGF2b2lkIGNoZWNraW5nIHRoZSBzYW1l
IHR5cGUgbXVsdGlwbGUgdGltZXMKLS8vIChhbmQgYWxzbyB0byBwcm90ZWN0IGFnYWluc3QgcmVj
dXJzaW9uKS4KLXN0YXRpYyBib29sIEhhc1JlcXVpcmVkRmllbGRzKGNvbnN0IERlc2NyaXB0b3Iq
IHR5cGUsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYXNoX3NldDxjb25zdCBEZXNjcmlwdG9yKj4qIGFscmVhZHlfc2VlbikgewotICBpZiAo
YWxyZWFkeV9zZWVuLT5jb3VudCh0eXBlKSA+IDApIHsKLSAgICAvLyBTaW5jZSB0aGUgZmlyc3Qg
b2NjdXJyZW5jZSBvZiBhIHJlcXVpcmVkIGZpZWxkIGNhdXNlcyB0aGUgd2hvbGUKLSAgICAvLyBm
dW5jdGlvbiB0byByZXR1cm4gdHJ1ZSwgd2UgY2FuIGFzc3VtZSB0aGF0IGlmIHRoZSB0eXBlIGlz
IGFscmVhZHkKLSAgICAvLyBpbiB0aGUgY2FjaGUgaXQgZGlkbid0IGhhdmUgYW55IHJlcXVpcmVk
IGZpZWxkcy4KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgYWxyZWFkeV9zZWVuLT5pbnNlcnQo
dHlwZSk7Ci0KLSAgLy8gSWYgdGhlIHR5cGUgaGFzIGV4dGVuc2lvbnMsIGFuIGV4dGVuc2lvbiB3
aXRoIG1lc3NhZ2UgdHlwZSBjb3VsZCBjb250YWluCi0gIC8vIHJlcXVpcmVkIGZpZWxkcywgc28g
d2UgaGF2ZSB0byBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZSBzdWNoIGFuCi0gIC8vIGV4dGVu
c2lvbiBleGlzdHMuCi0gIGlmICh0eXBlLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+IDApIHJl
dHVybiB0cnVlOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS0+ZmllbGRfY291bnQoKTsg
aSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IHR5cGUtPmZpZWxkKGkp
OwotICAgIGlmIChmaWVsZC0+aXNfcmVxdWlyZWQoKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfTUVTU0FHRSAmJgotICAgICAgICAhU2hvdWxkSWdub3JlUmVxdWlyZWRGaWVsZENoZWNrKGZp
ZWxkLCBvcHRpb25zKSkgewotICAgICAgaWYgKEhhc1JlcXVpcmVkRmllbGRzKGZpZWxkLT5tZXNz
YWdlX3R5cGUoKSwgb3B0aW9ucywgYWxyZWFkeV9zZWVuKSkgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBi
b29sIEhhc1JlcXVpcmVkRmllbGRzKGNvbnN0IERlc2NyaXB0b3IqIHR5cGUsIGNvbnN0IE9wdGlv
bnMmIG9wdGlvbnMpIHsKLSAgaGFzaF9zZXQ8Y29uc3QgRGVzY3JpcHRvcio+IGFscmVhZHlfc2Vl
bjsKLSAgcmV0dXJuIEhhc1JlcXVpcmVkRmllbGRzKHR5cGUsIG9wdGlvbnMsICZhbHJlYWR5X3Nl
ZW4pOwotfQotCi0vLyBUaGlzIHJldHVybnMgYW4gZXN0aW1hdGUgb2YgdGhlIGNvbXBpbGVyJ3Mg
YWxpZ25tZW50IGZvciB0aGUgZmllbGQuICBUaGlzCi0vLyBjYW4ndCBndWFyYW50ZWUgdG8gYmUg
Y29ycmVjdCBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgY29kZSBjb3VsZCBiZSBjb21waWxlZCBvbgot
Ly8gZGlmZmVyZW50IHN5c3RlbXMgd2l0aCBkaWZmZXJlbnQgYWxpZ25tZW50IHJ1bGVzLiAgVGhl
IGVzdGltYXRlcyBiZWxvdyBhc3N1bWUKLS8vIDY0LWJpdCBwb2ludGVycy4KLWludCBFc3RpbWF0
ZUFsaWdubWVudFNpemUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBpZiAoZmll
bGQgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgcmV0dXJu
IDg7Ci0gIHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9CT09MOgotICAgICAgcmV0dXJuIDE7Ci0KLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV9JTlQzMjoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9VSU5UMzI6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTToKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9GTE9BVDoKLSAgICAgIHJldHVybiA0OwotCi0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UNjQ6Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfVUlOVDY0OgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX0RPVUJMRToKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6Ci0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgIHJldHVybiA4
OwotICB9Ci0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4ndCBnZXQgaGVyZS4iOwotICByZXR1
cm4gLTE7ICAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5LgotfQotCi0vLyBGaWVsZEdyb3VwIGlzIGp1
c3QgYSBoZWxwZXIgZm9yIE9wdGltaXplUGFkZGluZyBiZWxvdy4gIEl0IGhvbGRzIGEgdmVjdG9y
IG9mCi0vLyBmaWVsZHMgdGhhdCBhcmUgZ3JvdXBlZCB0b2dldGhlciBiZWNhdXNlIHRoZXkgaGF2
ZSBjb21wYXRpYmxlIGFsaWdubWVudCwgYW5kCi0vLyBhIHByZWZlcnJlZCBsb2NhdGlvbiBpbiB0
aGUgZmluYWwgZmllbGQgb3JkZXJpbmcuCi1jbGFzcyBGaWVsZEdyb3VwIHsKLSBwdWJsaWM6Ci0g
IEZpZWxkR3JvdXAoKQotICAgICAgOiBwcmVmZXJyZWRfbG9jYXRpb25fKDApIHt9Ci0KLSAgLy8g
QSBncm91cCB3aXRoIGEgc2luZ2xlIGZpZWxkLgotICBGaWVsZEdyb3VwKGZsb2F0IHByZWZlcnJl
ZF9sb2NhdGlvbiwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkKLSAgICAgIDogcHJlZmVy
cmVkX2xvY2F0aW9uXyhwcmVmZXJyZWRfbG9jYXRpb24pLAotICAgICAgICBmaWVsZHNfKDEsIGZp
ZWxkKSB7fQotCi0gIC8vIEFwcGVuZCB0aGUgZmllbGRzIGluICdvdGhlcicgdG8gdGhpcyBncm91
cC4KLSAgdm9pZCBBcHBlbmQoY29uc3QgRmllbGRHcm91cCYgb3RoZXIpIHsKLSAgICBpZiAob3Ro
ZXIuZmllbGRzXy5lbXB0eSgpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFByZWZl
cnJlZCBsb2NhdGlvbiBpcyB0aGUgYXZlcmFnZSBhbW9uZyBhbGwgdGhlIGZpZWxkcywgc28gd2Ug
d2VpZ2h0IGJ5Ci0gICAgLy8gdGhlIG51bWJlciBvZiBmaWVsZHMgb24gZWFjaCBGaWVsZEdyb3Vw
IG9iamVjdC4KLSAgICBwcmVmZXJyZWRfbG9jYXRpb25fID0KLSAgICAgICAgKHByZWZlcnJlZF9s
b2NhdGlvbl8gKiBmaWVsZHNfLnNpemUoKSArCi0gICAgICAgICAob3RoZXIucHJlZmVycmVkX2xv
Y2F0aW9uXyAqIG90aGVyLmZpZWxkc18uc2l6ZSgpKSkgLwotICAgICAgICAoZmllbGRzXy5zaXpl
KCkgKyBvdGhlci5maWVsZHNfLnNpemUoKSk7Ci0gICAgZmllbGRzXy5pbnNlcnQoZmllbGRzXy5l
bmQoKSwgb3RoZXIuZmllbGRzXy5iZWdpbigpLCBvdGhlci5maWVsZHNfLmVuZCgpKTsKLSAgfQot
Ci0gIHZvaWQgU2V0UHJlZmVycmVkTG9jYXRpb24oZmxvYXQgbG9jYXRpb24pIHsgcHJlZmVycmVk
X2xvY2F0aW9uXyA9IGxvY2F0aW9uOyB9Ci0gIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWVsZERlc2Ny
aXB0b3IqPiYgZmllbGRzKCkgY29uc3QgeyByZXR1cm4gZmllbGRzXzsgfQotCi0gIC8vIEZpZWxk
R3JvdXAgb2JqZWN0cyBzb3J0IGJ5IHRoZWlyIHByZWZlcnJlZCBsb2NhdGlvbi4KLSAgYm9vbCBv
cGVyYXRvcjwoY29uc3QgRmllbGRHcm91cCYgb3RoZXIpIGNvbnN0IHsKLSAgICByZXR1cm4gcHJl
ZmVycmVkX2xvY2F0aW9uXyA8IG90aGVyLnByZWZlcnJlZF9sb2NhdGlvbl87Ci0gIH0KLQotIHBy
aXZhdGU6Ci0gIC8vICJwcmVmZXJyZWRfbG9jYXRpb25fIiBpcyBhbiBlc3RpbWF0ZSBvZiB3aGVy
ZSB0aGlzIGdyb3VwIHNob3VsZCBnbyBpbiB0aGUKLSAgLy8gZmluYWwgbGlzdCBvZiBmaWVsZHMu
ICBXZSBjb21wdXRlIHRoaXMgYnkgdGFraW5nIHRoZSBhdmVyYWdlIGluZGV4IG9mIGVhY2gKLSAg
Ly8gZmllbGQgaW4gdGhpcyBncm91cCBpbiB0aGUgb3JpZ2luYWwgb3JkZXJpbmcgb2YgZmllbGRz
LiAgVGhpcyBpcyB2ZXJ5Ci0gIC8vIGFwcHJveGltYXRlLCBidXQgc2hvdWxkIHB1dCB0aGlzIGdy
b3VwIGNsb3NlIHRvIHdoZXJlIGl0cyBtZW1iZXIgZmllbGRzCi0gIC8vIG9yaWdpbmFsbHkgd2Vu
dC4KLSAgZmxvYXQgcHJlZmVycmVkX2xvY2F0aW9uXzsKLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVz
Y3JpcHRvcio+IGZpZWxkc187Ci0gIC8vIFdlIHJlbHkgb24gdGhlIGRlZmF1bHQgY29weSBjb25z
dHJ1Y3RvciBhbmQgb3BlcmF0b3I9IHNvIHRoaXMgdHlwZSBjYW4gYmUKLSAgLy8gdXNlZCBpbiBh
IHZlY3Rvci4KLX07Ci0KLS8vIFJlb3JkZXIgJ2ZpZWxkcycgc28gdGhhdCBpZiB0aGUgZmllbGRz
IGFyZSBvdXRwdXQgaW50byBhIGMrKyBjbGFzcyBpbiB0aGUgbmV3Ci0vLyBvcmRlciwgdGhlIGFs
aWdubWVudCBwYWRkaW5nIGlzIG1pbmltaXplZC4gIFdlIHRyeSB0byBkbyB0aGlzIHdoaWxlIGtl
ZXBpbmcKLS8vIGVhY2ggZmllbGQgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gaXRzIG9yaWdpbmFs
IHBvc2l0aW9uIHNvIHRoYXQgd2UgZG9uJ3QKLS8vIHJlZHVjZSBjYWNoZSBsb2NhbGl0eSBtdWNo
IGZvciBmdW5jdGlvbiB0aGF0IGFjY2VzcyBlYWNoIGZpZWxkIGluIG9yZGVyLgotdm9pZCBPcHRp
bWl6ZVBhZGRpbmcodmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+KiBmaWVsZHMpIHsKLSAg
Ly8gRmlyc3QgZGl2aWRlIGZpZWxkcyBpbnRvIHRob3NlIHRoYXQgYWxpZ24gdG8gMSBieXRlLCA0
IGJ5dGVzIG9yIDggYnl0ZXMuCi0gIHZlY3RvcjxGaWVsZEdyb3VwPiBhbGlnbmVkX3RvXzEsIGFs
aWduZWRfdG9fNCwgYWxpZ25lZF90b184OwotICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy0+
c2l6ZSgpOyArK2kpIHsKLSAgICBzd2l0Y2ggKEVzdGltYXRlQWxpZ25tZW50U2l6ZSgoKmZpZWxk
cylbaV0pKSB7Ci0gICAgICBjYXNlIDE6IGFsaWduZWRfdG9fMS5wdXNoX2JhY2soRmllbGRHcm91
cChpLCAoKmZpZWxkcylbaV0pKTsgYnJlYWs7Ci0gICAgICBjYXNlIDQ6IGFsaWduZWRfdG9fNC5w
dXNoX2JhY2soRmllbGRHcm91cChpLCAoKmZpZWxkcylbaV0pKTsgYnJlYWs7Ci0gICAgICBjYXNl
IDg6IGFsaWduZWRfdG9fOC5wdXNoX2JhY2soRmllbGRHcm91cChpLCAoKmZpZWxkcylbaV0pKTsg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiVW5r
bm93biBhbGlnbm1lbnQgc2l6ZS4iOwotICAgIH0KLSAgfQotCi0gIC8vIE5vdyBncm91cCBmaWVs
ZHMgYWxpZ25lZCB0byAxIGJ5dGUgaW50byBzZXRzIG9mIDQsIGFuZCB0cmVhdCB0aG9zZSBsaWtl
IGEKLSAgLy8gc2luZ2xlIGZpZWxkIGFsaWduZWQgdG8gNCBieXRlcy4KLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhbGlnbmVkX3RvXzEuc2l6ZSgpOyBpICs9IDQpIHsKLSAgICBGaWVsZEdyb3VwIGZp
ZWxkX2dyb3VwOwotICAgIGZvciAoaW50IGogPSBpOyBqIDwgYWxpZ25lZF90b18xLnNpemUoKSAm
JiBqIDwgaSArIDQ7ICsraikgewotICAgICAgZmllbGRfZ3JvdXAuQXBwZW5kKGFsaWduZWRfdG9f
MVtqXSk7Ci0gICAgfQotICAgIGFsaWduZWRfdG9fNC5wdXNoX2JhY2soZmllbGRfZ3JvdXApOwot
ICB9Ci0gIC8vIFNvcnQgYnkgcHJlZmVycmVkIGxvY2F0aW9uIHRvIGtlZXAgZmllbGRzIGFzIGNs
b3NlIHRvIHRoZWlyIG9yaWdpbmFsCi0gIC8vIGxvY2F0aW9uIGFzIHBvc3NpYmxlLiAgVXNpbmcg
c3RhYmxlX3NvcnQgZW5zdXJlcyB0aGF0IHRoZSBvdXRwdXQgaXMKLSAgLy8gY29uc2lzdGVudCBh
Y3Jvc3MgcnVucy4KLSAgc3RkOjpzdGFibGVfc29ydChhbGlnbmVkX3RvXzQuYmVnaW4oKSwgYWxp
Z25lZF90b180LmVuZCgpKTsKLQotICAvLyBOb3cgZ3JvdXAgZmllbGRzIGFsaWduZWQgdG8gNCBi
eXRlcyAob3IgdGhlIDQtZmllbGQgZ3JvdXBzIGNyZWF0ZWQgYWJvdmUpCi0gIC8vIGludG8gcGFp
cnMsIGFuZCB0cmVhdCB0aG9zZSBsaWtlIGEgc2luZ2xlIGZpZWxkIGFsaWduZWQgdG8gOCBieXRl
cy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGlnbmVkX3RvXzQuc2l6ZSgpOyBpICs9IDIpIHsK
LSAgICBGaWVsZEdyb3VwIGZpZWxkX2dyb3VwOwotICAgIGZvciAoaW50IGogPSBpOyBqIDwgYWxp
Z25lZF90b180LnNpemUoKSAmJiBqIDwgaSArIDI7ICsraikgewotICAgICAgZmllbGRfZ3JvdXAu
QXBwZW5kKGFsaWduZWRfdG9fNFtqXSk7Ci0gICAgfQotICAgIGlmIChpID09IGFsaWduZWRfdG9f
NC5zaXplKCkgLSAxKSB7Ci0gICAgICAvLyBNb3ZlIGluY29tcGxldGUgNC1ieXRlIGJsb2NrIHRv
IHRoZSBlbmQuCi0gICAgICBmaWVsZF9ncm91cC5TZXRQcmVmZXJyZWRMb2NhdGlvbihmaWVsZHMt
PnNpemUoKSArIDEpOwotICAgIH0KLSAgICBhbGlnbmVkX3RvXzgucHVzaF9iYWNrKGZpZWxkX2dy
b3VwKTsKLSAgfQotICAvLyBTb3J0IGJ5IHByZWZlcnJlZCBsb2NhdGlvbi4KLSAgc3RkOjpzdGFi
bGVfc29ydChhbGlnbmVkX3RvXzguYmVnaW4oKSwgYWxpZ25lZF90b184LmVuZCgpKTsKLQotICAv
LyBOb3cgcHVsbCBvdXQgYWxsIHRoZSBGaWVsZERlc2NyaXB0b3JzIGluIG9yZGVyLgotICBmaWVs
ZHMtPmNsZWFyKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgYWxpZ25lZF90b184LnNpemUoKTsg
KytpKSB7Ci0gICAgZmllbGRzLT5pbnNlcnQoZmllbGRzLT5lbmQoKSwKLSAgICAgICAgICAgICAg
ICAgICBhbGlnbmVkX3RvXzhbaV0uZmllbGRzKCkuYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAg
ICBhbGlnbmVkX3RvXzhbaV0uZmllbGRzKCkuZW5kKCkpOwotICB9Ci19Ci0KLXN0cmluZyBNZXNz
YWdlVHlwZVByb3RvTmFtZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHJldHVy
biBmaWVsZC0+bWVzc2FnZV90eXBlKCktPmZ1bGxfbmFtZSgpOwotfQotCi0vLyBFbWl0cyBhbiBp
Zi1zdGF0ZW1lbnQgd2l0aCBhIGNvbmRpdGlvbiB0aGF0IGV2YWx1YXRlcyB0byB0cnVlIGlmIHxm
aWVsZHwgaXMKLS8vIGNvbnNpZGVyZWQgbm9uLWRlZmF1bHQgKHdpbGwgYmUgc2VudCBvdmVyIHRo
ZSB3aXJlKSwgZm9yIG1lc3NhZ2UgdHlwZXMKLS8vIHdpdGhvdXQgdHJ1ZSBmaWVsZCBwcmVzZW5j
ZS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmCi0vLyAhSGFzRmllbGRQcmVzZW5jZShtZXNzYWdl
X2Rlc2NyaXB0b3IpLgotYm9vbCBFbWl0RmllbGROb25EZWZhdWx0Q29uZGl0aW9uKGlvOjpQcmlu
dGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
cmluZyYgcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgLy8gTWVyZ2UgYW5kIHNlcmlhbGl6ZSBzZW1hbnRp
Y3M6IHByaW1pdGl2ZSBmaWVsZHMgYXJlIG1lcmdlZC9zZXJpYWxpemVkIG9ubHkKLSAgLy8gaWYg
bm9uLXplcm8gKG51bWVyaWMpIG9yIG5vbi1lbXB0eSAoc3RyaW5nKS4KLSAgaWYgKCFmaWVsZC0+
aXNfcmVwZWF0ZWQoKSAmJiAhZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSkgewotICAgIGlmIChm
aWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HKSB7Ci0g
ICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAiaWYgKCRwcmVmaXgkJG5hbWUkKCkuc2l6
ZSgpID4gMCkge1xuIiwKLSAgICAgICAgICAicHJlZml4IiwgcHJlZml4LAotICAgICAgICAgICJu
YW1lIiwgRmllbGROYW1lKGZpZWxkKSk7Ci0gICAgfSBlbHNlIGlmIChmaWVsZC0+Y3BwX3R5cGUo
KSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAgICAgLy8gTWVzc2Fn
ZSBmaWVsZHMgc3RpbGwgaGF2ZSBoYXNfJG5hbWUkKCkgbWV0aG9kcy4KLSAgICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgICAgICJpZiAoJHByZWZpeCRoYXNfJG5hbWUkKCkpIHtcbiIsCi0gICAg
ICAgICAgInByZWZpeCIsIHByZWZpeCwKLSAgICAgICAgICAibmFtZSIsIEZpZWxkTmFtZShmaWVs
ZCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAiaWYg
KCRwcmVmaXgkJG5hbWUkKCkgIT0gMCkge1xuIiwKLSAgICAgICAgICAicHJlZml4IiwgcHJlZml4
LAotICAgICAgICAgICJuYW1lIiwgRmllbGROYW1lKGZpZWxkKSk7Ci0gICAgfQotICAgIHByaW50
ZXItPkluZGVudCgpOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgaWYgKGZpZWxkLT5jb250
YWluaW5nX29uZW9mKCkpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImlmIChoYXNf
JG5hbWUkKCkpIHtcbiIsCi0gICAgICAgICJuYW1lIiwgRmllbGROYW1lKGZpZWxkKSk7Ci0gICAg
cHJpbnRlci0+SW5kZW50KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNl
OwotfQotCi0vLyBEb2VzIHRoZSBnaXZlbiBmaWVsZCBoYXZlIGEgaGFzXyRuYW1lJCgpIG1ldGhv
ZD8KLWJvb2wgSGFzSGFzTWV0aG9kKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAg
aWYgKEhhc0ZpZWxkUHJlc2VuY2UoZmllbGQtPmZpbGUoKSkpIHsKLSAgICAvLyBJbiBwcm90bzEv
cHJvdG8yLCBldmVyeSBmaWVsZCBoYXMgYSBoYXNfJG5hbWUkKCkgbWV0aG9kLgotICAgIHJldHVy
biB0cnVlOwotICB9Ci0gIC8vIEZvciBtZXNzYWdlIHR5cGVzIHdpdGhvdXQgdHJ1ZSBmaWVsZCBw
cmVzZW5jZSwgb25seSBmaWVsZHMgd2l0aCBhIG1lc3NhZ2UKLSAgLy8gdHlwZSBoYXZlIGEgaGFz
XyRuYW1lJCgpIG1ldGhvZC4KLSAgcmV0dXJuIGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOwotfQotCi0vLyBDb2xsZWN0cyBtYXAgZW50cnkgbWVz
c2FnZSB0eXBlIGluZm9ybWF0aW9uLgotdm9pZCBDb2xsZWN0TWFwSW5mbyhjb25zdCBEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICBtYXA8c3RyaW5nLCBzdHJpbmc+
KiB2YXJpYWJsZXMpIHsKLSAgR09PR0xFX0NIRUNLKElzTWFwRW50cnlNZXNzYWdlKGRlc2NyaXB0
b3IpKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXkgPSBkZXNjcmlwdG9yLT5GaW5kRmll
bGRCeU5hbWUoImtleSIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbCA9IGRlc2NyaXB0
b3ItPkZpbmRGaWVsZEJ5TmFtZSgidmFsdWUiKTsKLSAgKCp2YXJpYWJsZXMpWyJrZXkiXSA9IFBy
aW1pdGl2ZVR5cGVOYW1lKGtleS0+Y3BwX3R5cGUoKSk7Ci0gIHN3aXRjaCAodmFsLT5jcHBfdHlw
ZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAg
ICgqdmFyaWFibGVzKVsidmFsIl0gPSBGaWVsZE1lc3NhZ2VUeXBlTmFtZSh2YWwpOwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTToKLSAgICAgICgq
dmFyaWFibGVzKVsidmFsIl0gPSBDbGFzc05hbWUodmFsLT5lbnVtX3R5cGUoKSwgdHJ1ZSk7Ci0g
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgKCp2YXJpYWJsZXMpWyJ2YWwiXSA9IFBy
aW1pdGl2ZVR5cGVOYW1lKHZhbC0+Y3BwX3R5cGUoKSk7Ci0gIH0KLSAgKCp2YXJpYWJsZXMpWyJr
ZXlfd2lyZV90eXBlIl0gPQotICAgICAgIjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpUWVBFXyIgKwotICAgICAgVG9VcHBlcihEZWNsYXJlZFR5cGVNZXRob2RO
YW1lKGtleS0+dHlwZSgpKSk7Ci0gICgqdmFyaWFibGVzKVsidmFsX3dpcmVfdHlwZSJdID0KLSAg
ICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV8i
ICsKLSAgICAgIFRvVXBwZXIoRGVjbGFyZWRUeXBlTWV0aG9kTmFtZSh2YWwtPnR5cGUoKSkpOwot
fQotCi0vLyBEb2VzIHRoZSBnaXZlbiBmaWVsZCBoYXZlIGEgcHJpdmF0ZSAoaW50ZXJuYWwgaGVs
cGVyIG9ubHkpIGhhc18kbmFtZSQoKQotLy8gbWV0aG9kPwotYm9vbCBIYXNQcml2YXRlSGFzTWV0
aG9kKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgLy8gT25seSBmb3Igb25lb2Zz
IGluIG1lc3NhZ2UgdHlwZXMgd2l0aCBubyBmaWVsZCBwcmVzZW5jZS4gaGFzXyRuYW1lJCgpLAot
ICAvLyBiYXNlZCBvbiB0aGUgb25lb2YgY2FzZSwgaXMgc3RpbGwgdXNlZnVsIGludGVybmFsbHkg
Zm9yIGdlbmVyYXRlZCBjb2RlLgotICByZXR1cm4gKCFIYXNGaWVsZFByZXNlbmNlKGZpZWxkLT5m
aWxlKCkpICYmCi0gICAgICAgICAgZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSAhPSBOVUxMKTsK
LX0KLQotfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU1lc3Nh
Z2VHZW5lcmF0b3I6Ok1lc3NhZ2VHZW5lcmF0b3IoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRv
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0
aW9ucykKLSAgICA6IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpLAotICAgICAgY2xhc3NuYW1lXyhD
bGFzc05hbWUoZGVzY3JpcHRvciwgZmFsc2UpKSwKLSAgICAgIG9wdGlvbnNfKG9wdGlvbnMpLAot
ICAgICAgZmllbGRfZ2VuZXJhdG9yc18oZGVzY3JpcHRvciwgb3B0aW9ucyksCi0gICAgICBuZXN0
ZWRfZ2VuZXJhdG9yc18obmV3IGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8Ci0gICAgICAg
ICAgTWVzc2FnZUdlbmVyYXRvcj5bZGVzY3JpcHRvci0+bmVzdGVkX3R5cGVfY291bnQoKV0pLAot
ICAgICAgZW51bV9nZW5lcmF0b3JzXygKLSAgICAgICAgICBuZXcgZ29vZ2xlOjpwcm90b2J1Zjo6
c2NvcGVkX3B0cjxFbnVtR2VuZXJhdG9yPltkZXNjcmlwdG9yLT5lbnVtX3R5cGVfY291bnQoKV0p
LAotICAgICAgZXh0ZW5zaW9uX2dlbmVyYXRvcnNfKG5ldyBnb29nbGU6OnByb3RvYnVmOjpzY29w
ZWRfcHRyPAotICAgICAgICAgIEV4dGVuc2lvbkdlbmVyYXRvcj5bZGVzY3JpcHRvci0+ZXh0ZW5z
aW9uX2NvdW50KCldKSwKLSAgICAgIHVzZV9kZXBlbmRlbnRfYmFzZV8oZmFsc2UpIHsKLQotICBm
b3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykg
ewotICAgIG5lc3RlZF9nZW5lcmF0b3JzX1tpXS5yZXNldCgKLSAgICAgIG5ldyBNZXNzYWdlR2Vu
ZXJhdG9yKGRlc2NyaXB0b3ItPm5lc3RlZF90eXBlKGkpLCBvcHRpb25zKSk7Ci0gIH0KLQotICBm
b3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPmVudW1fdHlwZV9jb3VudCgpOyBpKyspIHsK
LSAgICBlbnVtX2dlbmVyYXRvcnNfW2ldLnJlc2V0KAotICAgICAgbmV3IEVudW1HZW5lcmF0b3Io
ZGVzY3JpcHRvci0+ZW51bV90eXBlKGkpLCBvcHRpb25zKSk7Ci0gIH0KLQotICBmb3IgKGludCBp
ID0gMDsgaSA8IGRlc2NyaXB0b3ItPmV4dGVuc2lvbl9jb3VudCgpOyBpKyspIHsKLSAgICBleHRl
bnNpb25fZ2VuZXJhdG9yc19baV0ucmVzZXQoCi0gICAgICBuZXcgRXh0ZW5zaW9uR2VuZXJhdG9y
KGRlc2NyaXB0b3ItPmV4dGVuc2lvbihpKSwgb3B0aW9ucykpOwotICB9Ci0KLSAgbnVtX3JlcXVp
cmVkX2ZpZWxkc18gPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPmZpZWxk
X2NvdW50KCk7IGkrKykgewotICAgIGlmIChkZXNjcmlwdG9yLT5maWVsZChpKS0+aXNfcmVxdWly
ZWQoKSkgewotICAgICAgKytudW1fcmVxdWlyZWRfZmllbGRzXzsKLSAgICB9Ci0gICAgaWYgKG9w
dGlvbnMucHJvdG9faCAmJiBJc0ZpZWxkRGVwZW5kZW50KGRlc2NyaXB0b3ItPmZpZWxkKGkpKSkg
ewotICAgICAgdXNlX2RlcGVuZGVudF9iYXNlXyA9IHRydWU7Ci0gICAgfQotICB9Ci0gIGlmIChv
cHRpb25zLnByb3RvX2ggJiYgZGVzY3JpcHRvci0+b25lb2ZfZGVjbF9jb3VudCgpID4gMCkgewot
ICAgIC8vIEFsd2F5cyBtYWtlIG9uZW9mcyBkZXBlbmRlbnQuCi0gICAgdXNlX2RlcGVuZGVudF9i
YXNlXyA9IHRydWU7Ci0gIH0KLX0KLQotTWVzc2FnZUdlbmVyYXRvcjo6fk1lc3NhZ2VHZW5lcmF0
b3IoKSB7fQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotRmlsbE1lc3NhZ2VGb3J3YXJkRGVj
bGFyYXRpb25zKG1hcDxzdHJpbmcsIGNvbnN0IERlc2NyaXB0b3IqPiogY2xhc3NfbmFtZXMpIHsK
LSAgKCpjbGFzc19uYW1lcylbY2xhc3NuYW1lX10gPSBkZXNjcmlwdG9yXzsKLQotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAg
ICAvLyBtYXAgZW50cnkgbWVzc2FnZSBkb2Vzbid0IG5lZWQgZm9yd2FyZCBkZWNsYXJhdGlvbi4g
U2luY2UgbWFwIGVudHJ5Ci0gICAgLy8gbWVzc2FnZSBjYW5ub3QgYmUgYSB0b3AgbGV2ZWwgY2xh
c3MsIHdlIGp1c3QgbmVlZCB0byBhdm9pZCBjYWxsaW5nCi0gICAgLy8gR2VuZXJhdGVGb3J3YXJk
RGVjbGFyYXRpb24gaGVyZS4KLSAgICBpZiAoSXNNYXBFbnRyeU1lc3NhZ2UoZGVzY3JpcHRvcl8t
Pm5lc3RlZF90eXBlKGkpKSkgY29udGludWU7Ci0gICAgbmVzdGVkX2dlbmVyYXRvcnNfW2ldLT5G
aWxsTWVzc2FnZUZvcndhcmREZWNsYXJhdGlvbnMoY2xhc3NfbmFtZXMpOwotICB9Ci19Ci0KLXZv
aWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1GaWxsRW51bUZvcndhcmREZWNsYXJhdGlvbnMobWFwPHN0
cmluZywgY29uc3QgRW51bURlc2NyaXB0b3IqPiogZW51bV9uYW1lcykgewotICBmb3IgKGludCBp
ID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBu
ZXN0ZWRfZ2VuZXJhdG9yc19baV0tPkZpbGxFbnVtRm9yd2FyZERlY2xhcmF0aW9ucyhlbnVtX25h
bWVzKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5lbnVtX3R5cGVf
Y291bnQoKTsgaSsrKSB7Ci0gICAgZW51bV9nZW5lcmF0b3JzX1tpXS0+RmlsbEZvcndhcmREZWNs
YXJhdGlvbihlbnVtX25hbWVzKTsKLSAgfQotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6Ogot
R2VuZXJhdGVFbnVtRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+bmVzdGVkX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0g
ICAgbmVzdGVkX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZUVudW1EZWZpbml0aW9ucyhwcmludGVy
KTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmVudW1fdHlwZV9j
b3VudCgpOyBpKyspIHsKLSAgICBlbnVtX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZURlZmluaXRp
b24ocHJpbnRlcik7Ci0gIH0KLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRl
R2V0RW51bURlc2NyaXB0b3JTcGVjaWFsaXphdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+bmVzdGVkX3R5cGVfY291bnQoKTsg
aSsrKSB7Ci0gICAgbmVzdGVkX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZUdldEVudW1EZXNjcmlw
dG9yU3BlY2lhbGl6YXRpb25zKHByaW50ZXIpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGVzY3JpcHRvcl8tPmVudW1fdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBlbnVtX2dlbmVyYXRv
cnNfW2ldLT5HZW5lcmF0ZUdldEVudW1EZXNjcmlwdG9yU3BlY2lhbGl6YXRpb25zKHByaW50ZXIp
OwotICB9Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZURlcGVuZGVudEZp
ZWxkQWNjZXNzb3JEZWNsYXJhdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVsZChpKTsKLQotICAg
IFByaW50RmllbGRDb21tZW50KHByaW50ZXIsIGZpZWxkKTsKLQotICAgIG1hcDxzdHJpbmcsIHN0
cmluZz4gdmFyczsKLSAgICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhmaWVsZCwgJnZhcnMsIG9w
dGlvbnNfKTsKLQotICAgIGlmICh1c2VfZGVwZW5kZW50X2Jhc2VfICYmIElzRmllbGREZXBlbmRl
bnQoZmllbGQpKSB7Ci0gICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBkZXBlbmRlbnQsIHRoZSBp
bmxpbmUgY2xlYXJfKigpIG1ldGhvZCB3aWxsIG5lZWQKLSAgICAgIC8vIHRvIGRlbGV0ZSB0aGUg
bWVzc2FnZSB0eXBlLCBzbyBpdCBtdXN0IGJlIGluIHRoZSBkZXBlbmRlbnQgYmFzZQotICAgICAg
Ly8gY2xhc3MuIChTZWUgYWxzbyBHZW5lcmF0ZUZpZWxkQWNjZXNzb3JEZWNsYXJhdGlvbnMuKQot
ICAgICAgcHJpbnRlci0+UHJpbnQodmFycywgIiRkZXByZWNhdGVkX2F0dHIkdm9pZCBjbGVhcl8k
bmFtZSQoKTtcbiIpOwotICAgIH0KLSAgICAvLyBHZW5lcmF0ZSB0eXBlLXNwZWNpZmljIGFjY2Vz
c29yIGRlY2xhcmF0aW9ucy4KLSAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpLkdlbmVy
YXRlRGVwZW5kZW50QWNjZXNzb3JEZWNsYXJhdGlvbnMocHJpbnRlcik7Ci0gICAgcHJpbnRlci0+
UHJpbnQoIlxuIik7Ci0gIH0KLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRl
RmllbGRBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBmb3Ig
KGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotCi0g
ICAgUHJpbnRGaWVsZENvbW1lbnQocHJpbnRlciwgZmllbGQpOwotCi0gICAgbWFwPHN0cmluZywg
c3RyaW5nPiB2YXJzOwotICAgIFNldENvbW1vbkZpZWxkVmFyaWFibGVzKGZpZWxkLCAmdmFycywg
b3B0aW9uc18pOwotICAgIHZhcnNbImNvbnN0YW50X25hbWUiXSA9IEZpZWxkQ29uc3RhbnROYW1l
KGZpZWxkKTsKLQotICAgIGJvb2wgZGVwZW5kZW50X2ZpZWxkID0gdXNlX2RlcGVuZGVudF9iYXNl
XyAmJiBJc0ZpZWxkRGVwZW5kZW50KGZpZWxkKTsKLSAgICBpZiAoZGVwZW5kZW50X2ZpZWxkICYm
Ci0gICAgICAgIGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9N
RVNTQUdFICYmCi0gICAgICAgICFmaWVsZC0+aXNfbWFwKCkpIHsKLSAgICAgIC8vIElmIHRoaXMg
ZmllbGQgaXMgZGVwZW5kZW50LCB0aGUgZGVwZW5kZW50IGJhc2UgY2xhc3MgZGV0ZXJtaW5lcwot
ICAgICAgLy8gdGhlIG1lc3NhZ2UgdHlwZSBmcm9tIHRoZSBkZXJpdmVkIGNsYXNzICh3aGljaCBp
cyBhIHRlbXBsYXRlCi0gICAgICAvLyBwYXJhbWV0ZXIpLiBUaGlzIHR5cGVkZWYgaXMgZm9yIHRo
YXQ6Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAicHJpdmF0ZTpcbiIKLSAgICAg
ICAgICAidHlwZWRlZiAkZmllbGRfdHlwZSQgJGRlcGVuZGVudF90eXBlJDtcbiIKLSAgICAgICAg
ICAicHVibGljOlxuIiwKLSAgICAgICAgICAiZmllbGRfdHlwZSIsIEZpZWxkTWVzc2FnZVR5cGVO
YW1lKGZpZWxkKSwKLSAgICAgICAgICAiZGVwZW5kZW50X3R5cGUiLCBEZXBlbmRlbnRUeXBlTmFt
ZShmaWVsZCkpOwotICAgIH0KLQotICAgIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAg
ICAgcHJpbnRlci0+UHJpbnQodmFycywgIiRkZXByZWNhdGVkX2F0dHIkaW50ICRuYW1lJF9zaXpl
KCkgY29uc3Q7XG4iKTsKLSAgICB9IGVsc2UgaWYgKEhhc0hhc01ldGhvZChmaWVsZCkpIHsKLSAg
ICAgIHByaW50ZXItPlByaW50KHZhcnMsICIkZGVwcmVjYXRlZF9hdHRyJGJvb2wgaGFzXyRuYW1l
JCgpIGNvbnN0O1xuIik7Ci0gICAgfSBlbHNlIGlmIChIYXNQcml2YXRlSGFzTWV0aG9kKGZpZWxk
KSkgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICAgICAicHJpdmF0ZTpcbiIK
LSAgICAgICAgICAiYm9vbCBoYXNfJG5hbWUkKCkgY29uc3Q7XG4iCi0gICAgICAgICAgInB1Ymxp
YzpcbiIpOwotICAgIH0KLQotICAgIGlmICghZGVwZW5kZW50X2ZpZWxkKSB7Ci0gICAgICAvLyBJ
ZiB0aGlzIGZpZWxkIGlzIGRlcGVuZGVudCwgdGhlbiBpdHMgY2xlYXJfKCkgbWV0aG9kIGlzIGlu
IHRoZQotICAgICAgLy8gZGVwZW5lbnQgYmFzZSBjbGFzcy4gKFNlZSBhbHNvIEdlbmVyYXRlRGVw
ZW5kZW50QWNjZXNzb3JEZWNsYXJhdGlvbnMuKQotICAgICAgcHJpbnRlci0+UHJpbnQodmFycywg
IiRkZXByZWNhdGVkX2F0dHIkdm9pZCBjbGVhcl8kbmFtZSQoKTtcbiIpOwotICAgIH0KLSAgICBw
cmludGVyLT5QcmludCh2YXJzLAotICAgICAgICAgICAgICAgICAgICIkZGVwcmVjYXRlZF9hdHRy
JHN0YXRpYyBjb25zdCBpbnQgJGNvbnN0YW50X25hbWUkID0gIgotICAgICAgICAgICAgICAgICAg
ICIkbnVtYmVyJDtcbiIpOwotCi0gICAgLy8gR2VuZXJhdGUgdHlwZS1zcGVjaWZpYyBhY2Nlc3Nv
ciBkZWNsYXJhdGlvbnMuCi0gICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0
ZUFjY2Vzc29yRGVjbGFyYXRpb25zKHByaW50ZXIpOwotCi0gICAgcHJpbnRlci0+UHJpbnQoIlxu
Iik7Ci0gIH0KLQotICBpZiAoZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgpID4g
MCkgewotICAgIC8vIEdlbmVyYXRlIGFjY2Vzc29ycyBmb3IgZXh0ZW5zaW9ucy4gIFdlIGp1c3Qg
Y2FsbCBhIG1hY3JvIGxvY2F0ZWQgaW4KLSAgICAvLyBleHRlbnNpb25fc2V0Lmggc2luY2UgdGhl
IGFjY2Vzc29ycyBhYm91dCA4MCBsaW5lcyBvZiBzdGF0aWMgY29kZS4KLSAgICBwcmludGVyLT5Q
cmludCgKLSAgICAgICJHT09HTEVfUFJPVE9CVUZfRVhURU5TSU9OX0FDQ0VTU09SUygkY2xhc3Nu
YW1lJClcbiIsCi0gICAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXyk7Ci0gIH0KLQotICBmb3Ig
KGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewot
ICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiJGNhbWVsX29uZW9mX25hbWUkQ2FzZSAkb25l
b2ZfbmFtZSRfY2FzZSgpIGNvbnN0O1xuIiwKLSAgICAgICAgImNhbWVsX29uZW9mX25hbWUiLAot
ICAgICAgICBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkp
LT5uYW1lKCksIHRydWUpLAotICAgICAgICAib25lb2ZfbmFtZSIsIGRlc2NyaXB0b3JfLT5vbmVv
Zl9kZWNsKGkpLT5uYW1lKCkpOwotICB9Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1H
ZW5lcmF0ZURlcGVuZGVudEZpZWxkQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6UHJpbnRlciogcHJp
bnRlcikgewotICBpZiAoIXVzZV9kZXBlbmRlbnRfYmFzZV8pIHJldHVybjsKLQotICBwcmludGVy
LT5QcmludCgiLy8gJGNsYXNzbmFtZSRcblxuIiwgImNsYXNzbmFtZSIsCi0gICAgICAgICAgICAg
ICAgIERlcGVuZGVudEJhc2VDbGFzc1RlbXBsYXRlTmFtZShkZXNjcmlwdG9yXykpOwotCi0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+ZmllbGQoaSk7Ci0K
LSAgICBQcmludEZpZWxkQ29tbWVudChwcmludGVyLCBmaWVsZCk7Ci0KLSAgICAvLyBUaGVzZSBm
dW5jdGlvbnMgYXJlIG5vdCByZWFsbHkgZGVwZW5kZW50OiB0aGV5IGFyZSBwYXJ0IG9mIHRoZQot
ICAgIC8vIChub24tZGVwZW5kZW50KSBkZXJpdmVkIGNsYXNzLiBIb3dldmVyLCB0aGV5IG5lZWQg
dG8gbGl2ZSBvdXRzaWRlCi0gICAgLy8gYW55ICNpZmRlZiBndWFyZHMsIHNvIHdlIHRyZWF0IHRo
ZW0gYXMgaWYgdGhleSB3ZXJlIGRlcGVuZGVudC4KLSAgICAvLwotICAgIC8vIFNlZSB0aGUgY29t
bWVudCBpbiBGaWxlR2VuZXJhdG9yOjpHZW5lcmF0ZUlubGluZUZ1bmN0aW9uRGVmaW5pdGlvbnMK
LSAgICAvLyBmb3IgYSBtb3JlIGNvbXBsZXRlIGV4cGxhbmF0aW9uLgotICAgIGlmICh1c2VfZGVw
ZW5kZW50X2Jhc2VfICYmIElzRmllbGREZXBlbmRlbnQoZmllbGQpKSB7Ci0gICAgICBtYXA8c3Ry
aW5nLCBzdHJpbmc+IHZhcnM7Ci0gICAgICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhmaWVsZCwg
JnZhcnMsIG9wdGlvbnNfKTsKLSAgICAgIHZhcnNbImlubGluZSJdID0gImlubGluZSAiOwotICAg
ICAgaWYgKGZpZWxkLT5jb250YWluaW5nX29uZW9mKCkpIHsKLSAgICAgICAgdmFyc1siZmllbGRf
bmFtZSJdID0gVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShmaWVsZC0+bmFtZSgpLCB0cnVlKTsKLSAg
ICAgICAgdmFyc1sib25lb2ZfbmFtZSJdID0gZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKS0+bmFt
ZSgpOwotICAgICAgICB2YXJzWyJvbmVvZl9pbmRleCJdID0gU2ltcGxlSXRvYShmaWVsZC0+Y29u
dGFpbmluZ19vbmVvZigpLT5pbmRleCgpKTsKLSAgICAgICAgR2VuZXJhdGVPbmVvZk1lbWJlckhh
c0JpdHMoZmllbGQsIHZhcnMsIHByaW50ZXIpOwotICAgICAgfSBlbHNlIGlmICghZmllbGQtPmlz
X3JlcGVhdGVkKCkpIHsKLSAgICAgICAgLy8gVGhlcmUgd2lsbCBiZSBubyBoZWFkZXIgZ3VhcmQs
IHNvIHRoaXMgYWx3YXlzIGhhcyB0byBiZSBpbmxpbmUuCi0gICAgICAgIEdlbmVyYXRlU2luZ3Vs
YXJGaWVsZEhhc0JpdHMoZmllbGQsIHZhcnMsIHByaW50ZXIpOwotICAgICAgfQotICAgICAgLy8g
dmFycyBuZWVkZWQgZm9yIGNsZWFyXygpLCB3aGljaCBpcyBpbiB0aGUgZGVwZW5kZW50IGJhc2U6
Ci0gICAgICAvLyAoU2VlIGFsc28gR2VuZXJhdGVEZXBlbmRlbnRGaWVsZEFjY2Vzc29yRGVjbGFy
YXRpb25zLikKLSAgICAgIHZhcnNbInRtcGwiXSA9ICJ0ZW1wbGF0ZTxjbGFzcyBUPlxuIjsKLSAg
ICAgIHZhcnNbImRlcGVuZGVudF9jbGFzc25hbWUiXSA9Ci0gICAgICAgICAgRGVwZW5kZW50QmFz
ZUNsYXNzVGVtcGxhdGVOYW1lKGRlc2NyaXB0b3JfKSArICI8VD4iOwotICAgICAgdmFyc1sidGhp
c19tZXNzYWdlIl0gPSBEZXBlbmRlbnRCYXNlRG93bkNhc3QoKTsKLSAgICAgIHZhcnNbInRoaXNf
Y29uc3RfbWVzc2FnZSJdID0gRGVwZW5kZW50QmFzZUNvbnN0RG93bkNhc3QoKTsKLSAgICAgIEdl
bmVyYXRlRmllbGRDbGVhcihmaWVsZCwgdmFycywgcHJpbnRlcik7Ci0gICAgfQotCi0gICAgLy8g
R2VuZXJhdGUgdHlwZS1zcGVjaWZpYyBhY2Nlc3NvcnMuCi0gICAgZmllbGRfZ2VuZXJhdG9yc18u
Z2V0KGZpZWxkKQotICAgICAgICAuR2VuZXJhdGVEZXBlbmRlbnRJbmxpbmVBY2Nlc3NvckRlZmlu
aXRpb25zKHByaW50ZXIpOwotCi0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gIH0KLQotICAv
LyBHZW5lcmF0ZSBoYXNfJG5hbWUkKCkgYW5kIGNsZWFyX2hhc18kbmFtZSQoKSBmdW5jdGlvbnMg
Zm9yIG9uZW9mcwotICAvLyBTaW1pbGFyIHRvIG90aGVyIGhhcy1iaXRzLCB0aGVzZSBtdXN0IGFs
d2F5cyBiZSBpbiB0aGUgaGVhZGVyIGlmIHdlCi0gIC8vIGFyZSB1c2luZyBhIGRlcGVuZGVudCBi
YXNlIGNsYXNzLgotICBHZW5lcmF0ZU9uZW9mSGFzQml0cyhwcmludGVyLCB0cnVlIC8qIGlzX2lu
bGluZSAqLyk7Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNpbmd1bGFy
RmllbGRIYXNCaXRzKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFycywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaWYgKEhhc0ZpZWxkUHJl
c2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICAvLyBOLkIuOiB3aXRob3V0IGZpZWxk
IHByZXNlbmNlLCB3ZSBkbyBub3QgdXNlIGhhcy1iaXRzIG9yIGdlbmVyYXRlCi0gICAgLy8gaGFz
XyRuYW1lJCgpIG1ldGhvZHMuCi0gICAgdmFyc1siaGFzX2FycmF5X2luZGV4Il0gPSBTaW1wbGVJ
dG9hKGZpZWxkLT5pbmRleCgpIC8gMzIpOwotICAgIHZhcnNbImhhc19tYXNrIl0gPSBTdHJDYXQo
c3RyaW5nczo6SGV4KDF1IDw8IChmaWVsZC0+aW5kZXgoKSAlIDMyKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzOjpaRVJPX1BBRF84KSk7Ci0gICAg
cHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICIkaW5saW5lJCIKLSAgICAgICJib29sICRjbGFz
c25hbWUkOjpoYXNfJG5hbWUkKCkgY29uc3Qge1xuIgotICAgICAgIiAgcmV0dXJuIChfaGFzX2Jp
dHNfWyRoYXNfYXJyYXlfaW5kZXgkXSAmIDB4JGhhc19tYXNrJHUpICE9IDA7XG4iCi0gICAgICAi
fVxuIgotICAgICAgIiRpbmxpbmUkIgotICAgICAgInZvaWQgJGNsYXNzbmFtZSQ6OnNldF9oYXNf
JG5hbWUkKCkge1xuIgotICAgICAgIiAgX2hhc19iaXRzX1skaGFzX2FycmF5X2luZGV4JF0gfD0g
MHgkaGFzX21hc2skdTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlubGluZSQiCi0gICAgICAi
dm9pZCAkY2xhc3NuYW1lJDo6Y2xlYXJfaGFzXyRuYW1lJCgpIHtcbiIKLSAgICAgICIgIF9oYXNf
Yml0c19bJGhhc19hcnJheV9pbmRleCRdICY9IH4weCRoYXNfbWFzayR1O1xuIgotICAgICAgIn1c
biIpOwotICB9IGVsc2UgewotICAgIC8vIE1lc3NhZ2UgZmllbGRzIGhhdmUgYSBoYXNfJG5hbWUk
KCkgbWV0aG9kLgotICAgIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfTUVTU0FHRSkgewotICAgICAgYm9vbCBpc19sYXp5ID0gZmFsc2U7Ci0gICAgICBp
ZiAoaXNfbGF6eSkgewotICAgICAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgICAgICIk
aW5saW5lJCIKLSAgICAgICAgICAiYm9vbCAkY2xhc3NuYW1lJDo6aGFzXyRuYW1lJCgpIGNvbnN0
IHtcbiIKLSAgICAgICAgICAiICByZXR1cm4gISRuYW1lJF8uSXNDbGVhcmVkKCk7XG4iCi0gICAg
ICAgICAgIn1cbiIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQodmFy
cywKLSAgICAgICAgICAiJGlubGluZSQiCi0gICAgICAgICAgImJvb2wgJGNsYXNzbmFtZSQ6Omhh
c18kbmFtZSQoKSBjb25zdCB7XG4iCi0gICAgICAgICAgIiAgcmV0dXJuICFfaXNfZGVmYXVsdF9p
bnN0YW5jZV8gJiYgJG5hbWUkXyAhPSBOVUxMO1xuIgotICAgICAgICAgICJ9XG4iKTsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRlT25l
b2ZIYXNCaXRzKGlvOjpQcmludGVyKiBwcmludGVyLCBib29sIGlzX2lubGluZSkgewotICBmb3Ig
KGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewot
ICAgIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgICB2YXJzWyJvbmVvZl9uYW1lIl0gPSBk
ZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+bmFtZSgpOwotICAgIHZhcnNbIm9uZW9mX2luZGV4
Il0gPSBTaW1wbGVJdG9hKGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5pbmRleCgpKTsKLSAg
ICB2YXJzWyJjYXBfb25lb2ZfbmFtZSJdID0KLSAgICAgICAgVG9VcHBlcihkZXNjcmlwdG9yXy0+
b25lb2ZfZGVjbChpKS0+bmFtZSgpKTsKLSAgICB2YXJzWyJjbGFzc25hbWUiXSA9IGNsYXNzbmFt
ZV87Ci0gICAgdmFyc1siaW5saW5lIl0gPSAoaXNfaW5saW5lID8gImlubGluZSAiIDogIiIpOwot
ICAgIHByaW50ZXItPlByaW50KAotICAgICAgICB2YXJzLAotICAgICAgICAiJGlubGluZSQiCi0g
ICAgICAgICJib29sICRjbGFzc25hbWUkOjpoYXNfJG9uZW9mX25hbWUkKCkgY29uc3Qge1xuIgot
ICAgICAgICAiICByZXR1cm4gJG9uZW9mX25hbWUkX2Nhc2UoKSAhPSAkY2FwX29uZW9mX25hbWUk
X05PVF9TRVQ7XG4iCi0gICAgICAgICJ9XG4iCi0gICAgICAgICIkaW5saW5lJCIKLSAgICAgICAg
InZvaWQgJGNsYXNzbmFtZSQ6OmNsZWFyX2hhc18kb25lb2ZfbmFtZSQoKSB7XG4iCi0gICAgICAg
ICIgIF9vbmVvZl9jYXNlX1skb25lb2ZfaW5kZXgkXSA9ICRjYXBfb25lb2ZfbmFtZSRfTk9UX1NF
VDtcbiIKLSAgICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZU9uZW9mTWVtYmVySGFzQml0cyhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPHN0cmluZywgc3RyaW5nPiYg
dmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyKSB7
Ci0gIC8vIFNpbmd1bGFyIGZpZWxkIGluIGEgb25lb2YKLSAgLy8gTi5CLjogV2l0aG91dCBmaWVs
ZCBwcmVzZW5jZSwgd2UgZG8gbm90IHVzZSBoYXMtYml0cyBvciBnZW5lcmF0ZQotICAvLyBoYXNf
JG5hbWUkKCkgbWV0aG9kcywgYnV0IG9uZW9mcyBzdGlsbCBoYXZlIHNldF9oYXNfJG5hbWUkKCku
Ci0gIC8vIE9uZW9mcyBhbHNvIGhhdmUgaGFzXyRuYW1lJCgpIGJ1dCBvbmx5IGFzIGEgcHJpdmF0
ZSBoZWxwZXIKLSAgLy8gbWV0aG9kLCBzbyB0aGF0IGdlbmVyYXRlZCBjb2RlIGlzIHNsaWdodGx5
IGNsZWFuZXIgKHZzLiAgY29tcGFyaW5nCi0gIC8vIF9vbmVvZl9jYXNlX1tpbmRleF0gYWdhaW5z
dCBhIGNvbnN0YW50IGV2ZXJ5d2hlcmUpLgotICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICIk
aW5saW5lJCIKLSAgICAiYm9vbCAkY2xhc3NuYW1lJDo6aGFzXyRuYW1lJCgpIGNvbnN0IHtcbiIK
LSAgICAiICByZXR1cm4gJG9uZW9mX25hbWUkX2Nhc2UoKSA9PSBrJGZpZWxkX25hbWUkO1xuIgot
ICAgICJ9XG4iKTsKLSAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAiJGlubGluZSQiCi0gICAg
InZvaWQgJGNsYXNzbmFtZSQ6OnNldF9oYXNfJG5hbWUkKCkge1xuIgotICAgICIgIF9vbmVvZl9j
YXNlX1skb25lb2ZfaW5kZXgkXSA9IGskZmllbGRfbmFtZSQ7XG4iCi0gICAgIn1cbiIpOwotfQot
Ci12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVGaWVsZENsZWFyKGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPHN0cmluZywg
c3RyaW5nPiYgdmFycywKLSAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlcikg
ewotICAvLyBHZW5lcmF0ZSBjbGVhcl8kbmFtZSQoKSAoU2VlIEdlbmVyYXRlRmllbGRBY2Nlc3Nv
ckRlY2xhcmF0aW9ucyBhbmQKLSAgLy8gR2VuZXJhdGVEZXBlbmRlbnRGaWVsZEFjY2Vzc29yRGVj
bGFyYXRpb25zLCAkZGVwZW5kZW50X2NsYXNzbmFtZSQgaXMKLSAgLy8gc2V0IGJ5IHRoZSBHZW5l
cmF0ZSpEZWZpbml0aW9ucyBmdW5jdGlvbnMuKQotICBwcmludGVyLT5QcmludCh2YXJzLAotICAg
ICIkdG1wbCQiCi0gICAgIiRpbmxpbmUkIgotICAgICJ2b2lkICRkZXBlbmRlbnRfY2xhc3NuYW1l
JDo6Y2xlYXJfJG5hbWUkKCkge1xuIik7Ci0KLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgaWYg
KGZpZWxkLT5jb250YWluaW5nX29uZW9mKCkpIHsKLSAgICAvLyBDbGVhciB0aGlzIGZpZWxkIG9u
bHkgaWYgaXQgaXMgdGhlIGFjdGl2ZSBmaWVsZCBpbiB0aGlzIG9uZW9mLAotICAgIC8vIG90aGVy
d2lzZSBpZ25vcmUKLSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgImlmICgkdGhpc19t
ZXNzYWdlJGhhc18kbmFtZSQoKSkge1xuIik7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAg
ZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGZpZWxkKQotICAgICAgICAuR2VuZXJhdGVDbGVhcmluZ0Nv
ZGUocHJpbnRlcik7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICIkdGhpc19tZXNz
YWdlJGNsZWFyX2hhc18kb25lb2ZfbmFtZSQoKTtcbiIpOwotICAgIHByaW50ZXItPk91dGRlbnQo
KTsKLSAgICBwcmludGVyLT5QcmludCgifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgZmllbGRfZ2Vu
ZXJhdG9yc18uZ2V0KGZpZWxkKQotICAgICAgICAuR2VuZXJhdGVDbGVhcmluZ0NvZGUocHJpbnRl
cik7Ci0gICAgaWYgKEhhc0ZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAg
ICAgIGlmICghZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQo
dmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgIiR0aGlzX21lc3NhZ2UkY2xlYXJfaGFzXyRu
YW1lJCgpO1xuIik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgp
OwotICBwcmludGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUZpZWxkQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlciwg
Ym9vbCBpc19pbmxpbmUpIHsKLSAgcHJpbnRlci0+UHJpbnQoIi8vICRjbGFzc25hbWUkXG5cbiIs
ICJjbGFzc25hbWUiLCBjbGFzc25hbWVfKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2Ny
aXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotCi0gICAgUHJpbnRGaWVsZENvbW1lbnQo
cHJpbnRlciwgZmllbGQpOwotCi0gICAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICAgIFNl
dENvbW1vbkZpZWxkVmFyaWFibGVzKGZpZWxkLCAmdmFycywgb3B0aW9uc18pOwotICAgIHZhcnNb
ImlubGluZSJdID0gaXNfaW5saW5lID8gImlubGluZSAiIDogIiI7Ci0gICAgaWYgKHVzZV9kZXBl
bmRlbnRfYmFzZV8gJiYgSXNGaWVsZERlcGVuZGVudChmaWVsZCkpIHsKLSAgICAgIHZhcnNbInRt
cGwiXSA9ICJ0ZW1wbGF0ZTxjbGFzcyBUPlxuIjsKLSAgICAgIHZhcnNbImRlcGVuZGVudF9jbGFz
c25hbWUiXSA9Ci0gICAgICAgICAgRGVwZW5kZW50QmFzZUNsYXNzVGVtcGxhdGVOYW1lKGRlc2Ny
aXB0b3JfKSArICI8VD4iOwotICAgICAgdmFyc1sidGhpc19tZXNzYWdlIl0gPSAicmVpbnRlcnBy
ZXRfY2FzdDxUKj4odGhpcyktPiI7Ci0gICAgICB2YXJzWyJ0aGlzX2NvbnN0X21lc3NhZ2UiXSA9
ICJyZWludGVycHJldF9jYXN0PGNvbnN0IFQqPih0aGlzKS0+IjsKLSAgICB9IGVsc2UgewotICAg
ICAgdmFyc1sidG1wbCJdID0gIiI7Ci0gICAgICB2YXJzWyJkZXBlbmRlbnRfY2xhc3NuYW1lIl0g
PSB2YXJzWyJjbGFzc25hbWUiXTsKLSAgICAgIHZhcnNbInRoaXNfbWVzc2FnZSJdID0gIiI7Ci0g
ICAgICB2YXJzWyJ0aGlzX2NvbnN0X21lc3NhZ2UiXSA9ICIiOwotICAgIH0KLQotICAgIC8vIEdl
bmVyYXRlIGhhc18kbmFtZSQoKSBvciAkbmFtZSRfc2l6ZSgpLgotICAgIGlmIChmaWVsZC0+aXNf
cmVwZWF0ZWQoKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICAgIiRpbmxp
bmUkIgotICAgICAgICAiaW50ICRjbGFzc25hbWUkOjokbmFtZSRfc2l6ZSgpIGNvbnN0IHtcbiIK
LSAgICAgICAgIiAgcmV0dXJuICRuYW1lJF8uc2l6ZSgpO1xuIgotICAgICAgICAifVxuIik7Ci0g
ICAgfSBlbHNlIGlmIChmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgICB2YXJzWyJm
aWVsZF9uYW1lIl0gPSBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGZpZWxkLT5uYW1lKCksIHRydWUp
OwotICAgICAgdmFyc1sib25lb2ZfbmFtZSJdID0gZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKS0+
bmFtZSgpOwotICAgICAgdmFyc1sib25lb2ZfaW5kZXgiXSA9IFNpbXBsZUl0b2EoZmllbGQtPmNv
bnRhaW5pbmdfb25lb2YoKS0+aW5kZXgoKSk7Ci0gICAgICBpZiAoIXVzZV9kZXBlbmRlbnRfYmFz
ZV8gfHwgIUlzRmllbGREZXBlbmRlbnQoZmllbGQpKSB7Ci0gICAgICAgIEdlbmVyYXRlT25lb2ZN
ZW1iZXJIYXNCaXRzKGZpZWxkLCB2YXJzLCBwcmludGVyKTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgLy8gU2luZ3VsYXIgZmllbGQuCi0gICAgICBpZiAoIXVzZV9kZXBlbmRlbnRfYmFz
ZV8gfHwgIUlzRmllbGREZXBlbmRlbnQoZmllbGQpKSB7Ci0gICAgICAgIEdlbmVyYXRlU2luZ3Vs
YXJGaWVsZEhhc0JpdHMoZmllbGQsIHZhcnMsIHByaW50ZXIpOwotICAgICAgfQotICAgIH0KLQot
ICAgIGlmICghdXNlX2RlcGVuZGVudF9iYXNlXyB8fCAhSXNGaWVsZERlcGVuZGVudChmaWVsZCkp
IHsKLSAgICAgIEdlbmVyYXRlRmllbGRDbGVhcihmaWVsZCwgdmFycywgcHJpbnRlcik7Ci0gICAg
fQotCi0gICAgLy8gR2VuZXJhdGUgdHlwZS1zcGVjaWZpYyBhY2Nlc3NvcnMuCi0gICAgZmllbGRf
Z2VuZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZUlubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMo
cHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpc19pbmxpbmUpOwotCi0gICAgcHJpbnRlci0+UHJpbnQoIlxu
Iik7Ci0gIH0KLQotICBpZiAoIXVzZV9kZXBlbmRlbnRfYmFzZV8pIHsKLSAgICAvLyBHZW5lcmF0
ZSBoYXNfJG5hbWUkKCkgYW5kIGNsZWFyX2hhc18kbmFtZSQoKSBmdW5jdGlvbnMgZm9yIG9uZW9m
cwotICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBhIGRlcGVuZGVudCBiYXNlLCB0aGV5IGNhbiBi
ZSB3aXRoIHRoZSBvdGhlciBmdW5jdGlvbnMKLSAgICAvLyB0aGF0IGFyZSAjaWZkZWYtZ3VhcmRl
ZC4KLSAgICBHZW5lcmF0ZU9uZW9mSGFzQml0cyhwcmludGVyLCBpc19pbmxpbmUpOwotICB9Ci19
Ci0KLS8vIEhlbHBlciBmb3IgdGhlIGNvZGUgdGhhdCBlbWl0cyB0aGUgQ2xlYXIoKSBtZXRob2Qu
Ci1zdGF0aWMgYm9vbCBDYW5DbGVhckJ5WmVyb2luZyhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkKSB7Ci0gIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSB8fCBmaWVsZC0+aXNfZXh0ZW5zaW9u
KCkpIHJldHVybiBmYWxzZTsKLSAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotICAgIGNh
c2UgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0VOVU06Ci0gICAgICByZXR1cm4g
ZmllbGQtPmRlZmF1bHRfdmFsdWVfZW51bSgpLT5udW1iZXIoKSA9PSAwOwotICAgIGNhc2UgaW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0lOVDMyOgotICAgICAgcmV0dXJuIGZpZWxk
LT5kZWZhdWx0X3ZhbHVlX2ludDMyKCkgPT0gMDsKLSAgICBjYXNlIGludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6Q1BQVFlQRV9JTlQ2NDoKLSAgICAgIHJldHVybiBmaWVsZC0+ZGVmYXVsdF92YWx1
ZV9pbnQ2NCgpID09IDA7Ci0gICAgY2FzZSBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkNQUFRZ
UEVfVUlOVDMyOgotICAgICAgcmV0dXJuIGZpZWxkLT5kZWZhdWx0X3ZhbHVlX3VpbnQzMigpID09
IDA7Ci0gICAgY2FzZSBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfVUlOVDY0Ogot
ICAgICAgcmV0dXJuIGZpZWxkLT5kZWZhdWx0X3ZhbHVlX3VpbnQ2NCgpID09IDA7Ci0gICAgY2Fz
ZSBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfRkxPQVQ6Ci0gICAgICByZXR1cm4g
ZmllbGQtPmRlZmF1bHRfdmFsdWVfZmxvYXQoKSA9PSAwOwotICAgIGNhc2UgaW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpDUFBUWVBFX0RPVUJMRToKLSAgICAgIHJldHVybiBmaWVsZC0+ZGVmYXVs
dF92YWx1ZV9kb3VibGUoKSA9PSAwOwotICAgIGNhc2UgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpDUFBUWVBFX0JPT0w6Ci0gICAgICByZXR1cm4gZmllbGQtPmRlZmF1bHRfdmFsdWVfYm9vbCgp
ID09IGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KLQot
dm9pZCBNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRlRGVwZW5kZW50QmFzZUNsYXNzRGVmaW5p
dGlvbihpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBpZiAoIXVzZV9kZXBlbmRlbnRfYmFzZV8p
IHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gIHZh
cnNbImNsYXNzbmFtZSJdID0gRGVwZW5kZW50QmFzZUNsYXNzVGVtcGxhdGVOYW1lKGRlc2NyaXB0
b3JfKTsKLSAgdmFyc1sic3VwZXJjbGFzcyJdID0gU3VwZXJDbGFzc05hbWUoZGVzY3JpcHRvcl8s
IG9wdGlvbnNfKTsKLQotICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICJ0ZW1wbGF0ZSA8Y2xh
c3MgVD5cbiIKLSAgICAiY2xhc3MgJGNsYXNzbmFtZSQgOiBwdWJsaWMgJHN1cGVyY2xhc3MkIHtc
biIKLSAgICAiIHB1YmxpYzpcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBwcmludGVy
LT5QcmludCh2YXJzLAotICAgICIkY2xhc3NuYW1lJCgpIHt9XG4iCi0gICAgInZpcnR1YWwgfiRj
bGFzc25hbWUkKCkge31cbiIKLSAgICAiXG4iKTsKLQotICAvLyBHZW5lcmF0ZSBkZXBlbmRlbnQg
YWNjZXNzb3IgbWV0aG9kcyBmb3IgYWxsIGZpZWxkcy4KLSAgR2VuZXJhdGVEZXBlbmRlbnRGaWVs
ZEFjY2Vzc29yRGVjbGFyYXRpb25zKHByaW50ZXIpOwotCi0gIHByaW50ZXItPk91dGRlbnQoKTsK
LSAgcHJpbnRlci0+UHJpbnQoIn07XG4iKTsKLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjoK
LUdlbmVyYXRlQ2xhc3NEZWZpbml0aW9uKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykgewot
ICAgIC8vIG1hcCBlbnRyeSBtZXNzYWdlIGRvZXNuJ3QgbmVlZCBjbGFzcyBkZWZpbml0aW9uLiBT
aW5jZSBtYXAgZW50cnkgbWVzc2FnZQotICAgIC8vIGNhbm5vdCBiZSBhIHRvcCBsZXZlbCBjbGFz
cywgd2UganVzdCBuZWVkIHRvIGF2b2lkIGNhbGxpbmcKLSAgICAvLyBHZW5lcmF0ZUNsYXNzRGVm
aW5pdGlvbiBoZXJlLgotICAgIGlmIChJc01hcEVudHJ5TWVzc2FnZShkZXNjcmlwdG9yXy0+bmVz
dGVkX3R5cGUoaSkpKSBjb250aW51ZTsKLSAgICBuZXN0ZWRfZ2VuZXJhdG9yc19baV0tPkdlbmVy
YXRlQ2xhc3NEZWZpbml0aW9uKHByaW50ZXIpOwotICAgIHByaW50ZXItPlByaW50KCJcbiIpOwot
ICAgIHByaW50ZXItPlByaW50KGtUaGluU2VwYXJhdG9yKTsKLSAgICBwcmludGVyLT5QcmludCgi
XG4iKTsKLSAgfQotCi0gIGlmICh1c2VfZGVwZW5kZW50X2Jhc2VfKSB7Ci0gICAgR2VuZXJhdGVE
ZXBlbmRlbnRCYXNlQ2xhc3NEZWZpbml0aW9uKHByaW50ZXIpOwotICAgICAgcHJpbnRlci0+UHJp
bnQoIlxuIik7Ci0gIH0KLQotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gIHZhcnNbImNs
YXNzbmFtZSJdID0gY2xhc3NuYW1lXzsKLSAgdmFyc1siZmllbGRfY291bnQiXSA9IFNpbXBsZUl0
b2EoZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCkpOwotICB2YXJzWyJvbmVvZl9kZWNsX2NvdW50
Il0gPSBTaW1wbGVJdG9hKGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCkpOwotICBpZiAo
b3B0aW9uc18uZGxsZXhwb3J0X2RlY2wuZW1wdHkoKSkgewotICAgIHZhcnNbImRsbGV4cG9ydCJd
ID0gIiI7Ci0gIH0gZWxzZSB7Ci0gICAgdmFyc1siZGxsZXhwb3J0Il0gPSBvcHRpb25zXy5kbGxl
eHBvcnRfZGVjbCArICIgIjsKLSAgfQotICBpZiAodXNlX2RlcGVuZGVudF9iYXNlXykgewotICAg
IHZhcnNbInN1cGVyY2xhc3MiXSA9Ci0gICAgICAgIERlcGVuZGVudEJhc2VDbGFzc1RlbXBsYXRl
TmFtZShkZXNjcmlwdG9yXykgKyAiPCIgKyBjbGFzc25hbWVfICsgIj4iOwotICB9IGVsc2Ugewot
ICAgIHZhcnNbInN1cGVyY2xhc3MiXSA9IFN1cGVyQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLCBvcHRp
b25zXyk7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAiY2xhc3MgJGRsbGV4cG9y
dCQkY2xhc3NuYW1lJCA6IHB1YmxpYyAkc3VwZXJjbGFzcyQge1xuIik7Ci0gIHByaW50ZXItPkFu
bm90YXRlKCJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXyk7Ci0gIGlmICh1c2VfZGVwZW5kZW50X2Jh
c2VfKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywgIiAgZnJpZW5kIGNsYXNzICRzdXBlcmNs
YXNzJDtcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KCIgcHVibGljOlxuIik7Ci0gIHByaW50
ZXItPkluZGVudCgpOwotCi0gIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgIiRjbGFzc25hbWUk
KCk7XG4iCi0gICAgInZpcnR1YWwgfiRjbGFzc25hbWUkKCk7XG4iCi0gICAgIlxuIgotICAgICIk
Y2xhc3NuYW1lJChjb25zdCAkY2xhc3NuYW1lJCYgZnJvbSk7XG4iCi0gICAgIlxuIgotICAgICJp
bmxpbmUgJGNsYXNzbmFtZSQmIG9wZXJhdG9yPShjb25zdCAkY2xhc3NuYW1lJCYgZnJvbSkge1xu
IgotICAgICIgIENvcHlGcm9tKGZyb20pO1xuIgotICAgICIgIHJldHVybiAqdGhpcztcbiIKLSAg
ICAifVxuIgotICAgICJcbiIpOwotCi0gIGlmIChQcmVzZXJ2ZVVua25vd25GaWVsZHMoZGVzY3Jp
cHRvcl8pKSB7Ci0gICAgaWYgKFVzZVVua25vd25GaWVsZFNldChkZXNjcmlwdG9yXy0+ZmlsZSgp
LCBvcHRpb25zXykpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiaW5saW5lIGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcygp
IGNvbnN0IHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8udW5rbm93
bl9maWVsZHMoKTtcbiIKLSAgICAgICAgIn1cbiIKLSAgICAgICAgIlxuIgotICAgICAgICAiaW5s
aW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0KiBtdXRhYmxlX3Vua25vd25f
ZmllbGRzKCkge1xuIgotICAgICAgICAiICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5tdXRh
YmxlX3Vua25vd25fZmllbGRzKCk7XG4iCi0gICAgICAgICJ9XG4iCi0gICAgICAgICJcbiIpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pKSB7Ci0g
ICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICJpbmxpbmUgY29uc3QgOjpzdGQ6OnN0
cmluZyYgdW5rbm93bl9maWVsZHMoKSBjb25zdCB7XG4iCi0gICAgICAgICAgIiAgcmV0dXJuIF91
bmtub3duX2ZpZWxkc18uR2V0KFxuIgotICAgICAgICAgICIgICAgICAmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpO1xuIgotICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgIlxuIgotICAgICAgICAgICJpbmxpbmUgOjpzdGQ6OnN0cmlu
ZyogbXV0YWJsZV91bmtub3duX2ZpZWxkcygpIHtcbiIKLSAgICAgICAgICAiICByZXR1cm4gX3Vu
a25vd25fZmllbGRzXy5NdXRhYmxlKFxuIgotICAgICAgICAgICIgICAgICAmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksXG4iCi0gICAg
ICAgICAgIiAgICAgIEdldEFyZW5hTm9WaXJ0dWFsKCkpO1xuIgotICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgIlxuIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICAgICAiaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIHVua25vd25fZmllbGRzKCkg
Y29uc3Qge1xuIgotICAgICAgICAgICIgIHJldHVybiBfdW5rbm93bl9maWVsZHNfLkdldE5vQXJl
bmEoXG4iCi0gICAgICAgICAgIiAgICAgICY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7XG4iCi0gICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAiXG4iCi0gICAgICAgICAgImlubGluZSA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX3Vua25v
d25fZmllbGRzKCkge1xuIgotICAgICAgICAgICIgIHJldHVybiBfdW5rbm93bl9maWVsZHNfLk11
dGFibGVOb0FyZW5hKFxuIgotICAgICAgICAgICIgICAgICAmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpO1xuIgotICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgIlxuIik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gTi5CLjog
V2UgZXhjbHVkZSBHZXRBcmVuYSgpIHdoZW4gYXJlbmEgc3VwcG9ydCBpcyBkaXNhYmxlZCwgZmFs
bGluZyBiYWNrIG9uCi0gIC8vIE1lc3NhZ2VMaXRlJ3MgaW1wbGVtZW50YXRpb24gd2hpY2ggcmV0
dXJucyBOVUxMIHJhdGhlciB0aGFuIGdlbmVyYXRpbmcgb3VyCi0gIC8vIG93biBtZXRob2Qgd2hp
Y2ggcmV0dXJucyBOVUxMLCBpbiBvcmRlciB0byByZWR1Y2UgY29kZSBzaXplLgotICBpZiAoU3Vw
cG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgLy8gdmlydHVhbCBtZXRob2QgdmVyc2lv
biBvZiBHZXRBcmVuYU5vVmlydHVhbCgpLCByZXF1aXJlZCBmb3IgZ2VuZXJpYyBkaXNwYXRjaCBn
aXZlbiBhCi0gICAgLy8gTWVzc2FnZUxpdGUqIChlLmcuLCBpbiBSZXBlYXRlZEZpZWxkOjpBZGRB
bGxvY2F0ZWQoKSkuCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJpbmxpbmUgOjpnb29n
bGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmEoKSBjb25zdCB7IHJldHVybiBHZXRBcmVuYU5v
VmlydHVhbCgpOyB9XG4iCi0gICAgICAgICJpbmxpbmUgdm9pZCogR2V0TWF5YmVBcmVuYVBvaW50
ZXIoKSBjb25zdCB7XG4iCi0gICAgICAgICIgIHJldHVybiBNYXliZUFyZW5hUHRyKCk7XG4iCi0g
ICAgICAgICJ9XG4iKTsKLSAgfQotCi0gIC8vIE9ubHkgZ2VuZXJhdGUgdGhpcyBtZW1iZXIgaWYg
aXQncyBub3QgZGlzYWJsZWQuCi0gIGlmIChIYXNEZXNjcmlwdG9yTWV0aG9kcyhkZXNjcmlwdG9y
Xy0+ZmlsZSgpLCBvcHRpb25zXykgJiYKLSAgICAgICFkZXNjcmlwdG9yXy0+b3B0aW9ucygpLm5v
X3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IoKSkgewotICAgIHByaW50ZXItPlByaW50KHZh
cnMsCi0gICAgICAic3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciog
ZGVzY3JpcHRvcigpO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICJz
dGF0aWMgY29uc3QgJGNsYXNzbmFtZSQmIGRlZmF1bHRfaW5zdGFuY2UoKTtcbiIKLSAgICAiXG4i
KTsKLQotICAvLyBHZW5lcmF0ZSBlbnVtIHZhbHVlcyBmb3IgZXZlcnkgZmllbGQgaW4gb25lb2Zz
LiBPbmUgbGlzdCBpcyBnZW5lcmF0ZWQgZm9yCi0gIC8vIGVhY2ggb25lb2Ygd2l0aCBhbiBhZGRp
dGlvbmFsICpfTk9UX1NFVCB2YWx1ZS4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9y
Xy0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgImVudW0gJGNhbWVsX29uZW9mX25hbWUkQ2FzZSB7XG4iLAotICAgICAgICAiY2FtZWxfb25l
b2ZfbmFtZSIsCi0gICAgICAgIFVuZGVyc2NvcmVzVG9DYW1lbENhc2UoZGVzY3JpcHRvcl8tPm9u
ZW9mX2RlY2woaSktPm5hbWUoKSwgdHJ1ZSkpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotICAg
IGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPmZpZWxkX2Nv
dW50KCk7IGorKykgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgImskZmllbGRf
bmFtZSQgPSAkZmllbGRfbnVtYmVyJCxcbiIsCi0gICAgICAgICAgImZpZWxkX25hbWUiLAotICAg
ICAgICAgIFVuZGVyc2NvcmVzVG9DYW1lbENhc2UoCi0gICAgICAgICAgICAgIGRlc2NyaXB0b3Jf
LT5vbmVvZl9kZWNsKGkpLT5maWVsZChqKS0+bmFtZSgpLCB0cnVlKSwKLSAgICAgICAgICAiZmll
bGRfbnVtYmVyIiwKLSAgICAgICAgICBTaW1wbGVJdG9hKGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNs
KGkpLT5maWVsZChqKS0+bnVtYmVyKCkpKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgICAgICIkY2FwX29uZW9mX25hbWUkX05PVF9TRVQgPSAwLFxuIiwKLSAgICAgICAgImNhcF9v
bmVvZl9uYW1lIiwKLSAgICAgICAgVG9VcHBlcihkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+
bmFtZSgpKSk7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgICAifTtcbiIKLSAgICAgICAgIlxuIik7Ci0gIH0KLQotICBpZiAoIVN0YXRpY0luaXRp
YWxpemVyc0ZvcmNlZChkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICBwcmlu
dGVyLT5QcmludCh2YXJzLAotICAgICAgIiNpZmRlZiBHT09HTEVfUFJPVE9CVUZfTk9fU1RBVElD
X0lOSVRJQUxJWkVSXG4iCi0gICAgICAiLy8gUmV0dXJucyB0aGUgaW50ZXJuYWwgZGVmYXVsdCBp
bnN0YW5jZSBwb2ludGVyLiBUaGlzIGZ1bmN0aW9uIGNhblxuIgotICAgICAgIi8vIHJldHVybiBO
VUxMIHRodXMgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IHRoZSB1c2VyLiBUaGlzIGlzIGludGVuZGVk
XG4iCi0gICAgICAiLy8gZm9yIFByb3RvYnVmIGludGVybmFsIGNvZGUuIFBsZWFzZSB1c2UgZGVm
YXVsdF9pbnN0YW5jZSgpIGRlY2xhcmVkXG4iCi0gICAgICAiLy8gYWJvdmUgaW5zdGVhZC5cbiIK
LSAgICAgICJzdGF0aWMgaW5saW5lIGNvbnN0ICRjbGFzc25hbWUkKiBpbnRlcm5hbF9kZWZhdWx0
X2luc3RhbmNlKCkge1xuIgotICAgICAgIiAgcmV0dXJuIGRlZmF1bHRfaW5zdGFuY2VfO1xuIgot
ICAgICAgIn1cbiIKLSAgICAgICIjZW5kaWZcbiIKLSAgICAgICJcbiIpOwotICB9Ci0KLQotICBp
ZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFy
cywKLSAgICAgICJ2b2lkIFVuc2FmZUFyZW5hU3dhcCgkY2xhc3NuYW1lJCogb3RoZXIpO1xuIik7
Ci0gIH0KLQotICBpZiAoSXNBbnlNZXNzYWdlKGRlc2NyaXB0b3JfKSkgewotICAgIHByaW50ZXIt
PlByaW50KHZhcnMsCi0gICAgICAiLy8gaW1wbGVtZW50cyBBbnkgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKLSAgICAgICJcbiIKLSAgICAgICJ2b2lk
IFBhY2tGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgbWVzc2FnZSk7XG4i
Ci0gICAgICAidm9pZCBQYWNrRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2Um
IG1lc3NhZ2UsXG4iCi0gICAgICAiICAgICAgICAgICAgICBjb25zdCA6OnN0ZDo6c3RyaW5nJiB0
eXBlX3VybF9wcmVmaXgpO1xuIgotICAgICAgImJvb2wgVW5wYWNrVG8oOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlKiBtZXNzYWdlKSBjb25zdDtcbiIKLSAgICAgICJ0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBib29sIElzKCkgY29uc3Qge1xuIgotICAgICAgIiAgcmV0dXJuIF9hbnlfbWV0YWRhdGFf
LklzPFQ+KCk7XG4iCi0gICAgICAifVxuIgotICAgICAgIlxuIik7Ci0gIH0KLQotICBwcmludGVy
LT5QcmludCh2YXJzLAotICAgICJHT09HTEVfQVRUUklCVVRFX05PSU5MSU5FIHZvaWQgU3dhcCgk
Y2xhc3NuYW1lJCogb3RoZXIpO1xuIgotICAgICJcbiIKLSAgICAiLy8gaW1wbGVtZW50cyBNZXNz
YWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKLSAg
ICAiXG4iCi0gICAgImlubGluZSAkY2xhc3NuYW1lJCogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3
KE5VTEwpOyB9XG4iCi0gICAgIlxuIgotICAgICIkY2xhc3NuYW1lJCogTmV3KDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDtcbiIpOwotCi0gIGlmIChIYXNHZW5lcmF0ZWRN
ZXRob2RzKGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgIGlmIChIYXNEZXNj
cmlwdG9yTWV0aG9kcyhkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICAgIHBy
aW50ZXItPlByaW50KHZhcnMsCi0gICAgICAgICJ2b2lkIENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7XG4iCi0gICAgICAgICJ2b2lkIE1lcmdlRnJvbShj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pO1xuIik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAgICJ2b2lkIENoZWNrVHlwZUFu
ZE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VMaXRlJiBmcm9tKTtc
biIpOwotICAgIH0KLQotICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAidm9pZCBDb3B5
RnJvbShjb25zdCAkY2xhc3NuYW1lJCYgZnJvbSk7XG4iCi0gICAgICAidm9pZCBNZXJnZUZyb20o
Y29uc3QgJGNsYXNzbmFtZSQmIGZyb20pO1xuIgotICAgICAgInZvaWQgQ2xlYXIoKTtcbiIKLSAg
ICAgICJib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDtcbiIKLSAgICAgICJcbiIKLSAgICAgICJp
bnQgQnl0ZVNpemUoKSBjb25zdDtcbiIKLSAgICAgICJib29sIE1lcmdlUGFydGlhbEZyb21Db2Rl
ZFN0cmVhbShcbiIKLSAgICAgICIgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1
dFN0cmVhbSogaW5wdXQpO1xuIgotICAgICAgInZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KFxuIgotICAgICAgIiAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVh
bSogb3V0cHV0KSBjb25zdDtcbiIpOwotICAgIC8vIERpc2NhcmRVbmtub3duRmllbGRzKCkgaXMg
aW1wbGVtZW50ZWQgaW4gbWVzc2FnZS5jYyB1c2luZyByZWZsZWN0aW9ucy4gV2UKLSAgICAvLyBu
ZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGluIGdlbmVyYXRlZCBjb2RlIGZvciBtZXNz
YWdlcy4KLSAgICBpZiAoIVVzZVVua25vd25GaWVsZFNldChkZXNjcmlwdG9yXy0+ZmlsZSgpLCBv
cHRpb25zXykpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAidm9pZCBEaXNjYXJk
VW5rbm93bkZpZWxkcygpO1xuIik7Ci0gICAgfQotICAgIGlmIChIYXNGYXN0QXJyYXlTZXJpYWxp
emF0aW9uKGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkgY29u
c3Q7XG4iKTsKLSAgICB9Ci0gIH0KLQotICAvLyBDaGVjayBhbGwgRmllbGREZXNjcmlwdG9ycyBp
bmNsdWRpbmcgdGhvc2UgaW4gb25lb2ZzIHRvIGVzdGltYXRlCi0gIC8vIHdoZXRoZXIgOjpzdGQ6
OnN0cmluZyBpcyBsaWtlbHkgdG8gYmUgdXNlZCwgYW5kIGRlcGVuZGluZyBvbiB0aGF0Ci0gIC8v
IGVzdGltYXRlLCBzZXQgdXNlc19zdHJpbmdfIHRvIHRydWUgb3IgZmFsc2UuICBUaGF0IGNvbnRv
bHMKLSAgLy8gd2hldGhlciB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBvZiBlbXB0eV9zdHJpbmdf
IGluIFNoYXJlZEN0b3IoKS4KLSAgLy8gSXQncyBvZnRlbiBhZHZhbnRhZ2VvdXMgdG8gZG8gc28g
dG8ga2VlcCAiaXMgZW1wdHlfc3RyaW5nXwotICAvLyBpbml0ZWQ/IiBjb2RlIGZyb20gYXBwZWFy
aW5nIGFsbCBvdmVyIHRoZSBwbGFjZS4KLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+
IGRlc2NyaXB0b3JzOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9j
b3VudCgpOyBpKyspIHsKLSAgICBkZXNjcmlwdG9ycy5wdXNoX2JhY2soZGVzY3JpcHRvcl8tPmZp
ZWxkKGkpKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9k
ZWNsX2NvdW50KCk7IGkrKykgewotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3JpcHRvcl8t
Pm9uZW9mX2RlY2woaSktPmZpZWxkX2NvdW50KCk7IGorKykgewotICAgICAgZGVzY3JpcHRvcnMu
cHVzaF9iYWNrKGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVsZChqKSk7Ci0gICAgfQot
ICB9Ci0gIHVzZXNfc3RyaW5nXyA9IGZhbHNlOwotICBpZiAoUHJlc2VydmVVbmtub3duRmllbGRz
KGRlc2NyaXB0b3JfKSAmJgotICAgICAgIVVzZVVua25vd25GaWVsZFNldChkZXNjcmlwdG9yXy0+
ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICB1c2VzX3N0cmluZ18gPSB0cnVlOwotICB9Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMuc2l6ZSgpOyBpKyspIHsKLSAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcnNbaV07Ci0gICAgaWYgKGZpZWxkLT5j
cHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkcpIHsKLSAgICAgIHN3
aXRjaCAoZmllbGQtPm9wdGlvbnMoKS5jdHlwZSgpKSB7Ci0gICAgICAgIGRlZmF1bHQ6IHVzZXNf
c3RyaW5nXyA9IHRydWU7IGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaW50ZXIt
PlByaW50KAotICAgICJpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRf
c2l6ZV87IH1cbiIKLSAgICAicHJpdmF0ZTpcbiIKLSAgICAidm9pZCBTaGFyZWRDdG9yKCk7XG4i
Ci0gICAgInZvaWQgU2hhcmVkRHRvcigpO1xuIgotICAgICJ2b2lkIFNldENhY2hlZFNpemUoaW50
IHNpemUpIGNvbnN0O1xuIgotICAgICJ2b2lkIEludGVybmFsU3dhcCgkY2xhc3NuYW1lJCogb3Ro
ZXIpO1xuIiwKLSAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXyk7Ci0gIGlmIChTdXBwb3J0c0Fy
ZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJwcm90ZWN0
ZWQ6XG4iCi0gICAgICAiZXhwbGljaXQgJGNsYXNzbmFtZSQoOjpnb29nbGU6OnByb3RvYnVmOjpB
cmVuYSogYXJlbmEpO1xuIgotICAgICAgInByaXZhdGU6XG4iCi0gICAgICAic3RhdGljIHZvaWQg
QXJlbmFEdG9yKHZvaWQqIG9iamVjdCk7XG4iCi0gICAgICAiaW5saW5lIHZvaWQgUmVnaXN0ZXJB
cmVuYUR0b3IoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpO1xuIiwKLSAgICAgICJj
bGFzc25hbWUiLCBjbGFzc25hbWVfKTsKLSAgfQotCi0gIGlmIChVc2VVbmtub3duRmllbGRTZXQo
ZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgICAicHJpdmF0ZTpcbiIKLSAgICAgICJpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7XG4iCi0gICAgICAiICByZXR1cm4gX2ludGVy
bmFsX21ldGFkYXRhXy5hcmVuYSgpO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJpbmxpbmUgdm9p
ZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHtcbiIKLSAgICAgICIgIHJldHVybiBfaW50ZXJuYWxf
bWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAicHVibGlj
OlxuIgotICAgICAgIlxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAicHJpdmF0ZTpcbiIKLSAgICAgICJpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSog
R2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7XG4iCi0gICAgICAiICByZXR1cm4gX2FyZW5hX3B0
cl87XG4iCi0gICAgICAifVxuIgotICAgICAgImlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFy
ZW5hKiBNYXliZUFyZW5hUHRyKCkgY29uc3Qge1xuIgotICAgICAgIiAgcmV0dXJuIF9hcmVuYV9w
dHJfO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJwdWJsaWM6XG4iCi0gICAgICAiXG4iKTsKLSAg
fQotCi0gIGlmIChIYXNEZXNjcmlwdG9yTWV0aG9kcyhkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRp
b25zXykpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6
Ok1ldGFkYXRhIEdldE1ldGFkYXRhKCkgY29uc3Q7XG4iCi0gICAgICAiXG4iKTsKLSAgfSBlbHNl
IHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICI6OnN0ZDo6c3RyaW5nIEdldFR5cGVOYW1l
KCkgY29uc3Q7XG4iCi0gICAgICAiXG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAg
ICIvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLVxuIgotICAgICJcbiIpOwotCi0gIC8vIEltcG9ydCBhbGwgbmVzdGVkIG1l
c3NhZ2UgY2xhc3NlcyBpbnRvIHRoaXMgY2xhc3MncyBzY29wZSB3aXRoIHR5cGVkZWZzLgotICBm
b3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZV9jb3VudCgpOyBpKysp
IHsKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBuZXN0ZWRfdHlwZSA9IGRlc2NyaXB0b3JfLT5uZXN0
ZWRfdHlwZShpKTsKLSAgICBpZiAoIUlzTWFwRW50cnlNZXNzYWdlKG5lc3RlZF90eXBlKSkgewot
ICAgICAgcHJpbnRlci0+UHJpbnQoInR5cGVkZWYgJG5lc3RlZF9mdWxsX25hbWUkICRuZXN0ZWRf
bmFtZSQ7XG4iLAotICAgICAgICAgICAgICAgICAgICAgIm5lc3RlZF9uYW1lIiwgbmVzdGVkX3R5
cGUtPm5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICJuZXN0ZWRfZnVsbF9uYW1lIiwgQ2xh
c3NOYW1lKG5lc3RlZF90eXBlLCBmYWxzZSkpOwotICAgIH0KLSAgfQotCi0gIGlmIChkZXNjcmlw
dG9yXy0+bmVzdGVkX3R5cGVfY291bnQoKSA+IDApIHsKLSAgICBwcmludGVyLT5QcmludCgiXG4i
KTsKLSAgfQotCi0gIC8vIEltcG9ydCBhbGwgbmVzdGVkIGVudW1zIGFuZCB0aGVpciB2YWx1ZXMg
aW50byB0aGlzIGNsYXNzJ3Mgc2NvcGUgd2l0aAotICAvLyB0eXBlZGVmcyBhbmQgY29uc3RhbnRz
LgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5lbnVtX3R5cGVfY291bnQoKTsg
aSsrKSB7Ci0gICAgZW51bV9nZW5lcmF0b3JzX1tpXS0+R2VuZXJhdGVTeW1ib2xJbXBvcnRzKHBy
aW50ZXIpOwotICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJp
bnQoCi0gICAgIi8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0gICAgIlxuIik7Ci0KLSAgLy8gR2VuZXJhdGUgYWNj
ZXNzb3IgbWV0aG9kcyBmb3IgYWxsIGZpZWxkcy4KLSAgR2VuZXJhdGVGaWVsZEFjY2Vzc29yRGVj
bGFyYXRpb25zKHByaW50ZXIpOwotCi0gIC8vIERlY2xhcmUgZXh0ZW5zaW9uIGlkZW50aWZpZXJz
LgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5leHRlbnNpb25fY291bnQoKTsg
aSsrKSB7Ci0gICAgZXh0ZW5zaW9uX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZURlY2xhcmF0aW9u
KHByaW50ZXIpOwotICB9Ci0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAiLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOiRmdWxsX25hbWUkKVxuIiwKLSAgICAiZnVsbF9u
YW1lIiwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFtZSgpKTsKLQotICAvLyBHZW5lcmF0ZSBwcml2YXRl
IG1lbWJlcnMuCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIiBwcml2
YXRlOlxuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0KLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKCFkZXNjcmlwdG9y
Xy0+ZmllbGQoaSktPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgIC8vIHNldF9oYXNfKioqKCkgZ2Vu
ZXJhdGVkIGluIGFsbCBwcm90bzEvMiBjb2RlIGFuZCBpbiBvbmVvZnMgKG9ubHkpIGZvcgotICAg
ICAgLy8gbWVzc2FnZXMgd2l0aG91dCB0cnVlIGZpZWxkIHByZXNlbmNlLgotICAgICAgaWYgKEhh
c0ZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkgfHwKLSAgICAgICAgICBkZXNjcmlw
dG9yXy0+ZmllbGQoaSktPmNvbnRhaW5pbmdfb25lb2YoKSkgewotICAgICAgICBwcmludGVyLT5Q
cmludCgKLSAgICAgICAgICAiaW5saW5lIHZvaWQgc2V0X2hhc18kbmFtZSQoKTtcbiIsCi0gICAg
ICAgICAgIm5hbWUiLCBGaWVsZE5hbWUoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKSk7Ci0gICAgICB9
Ci0gICAgICAvLyBjbGVhcl9oYXNfKioqKCkgZ2VuZXJhdGVkIG9ubHkgZm9yIG5vbi1vbmVvZiBm
aWVsZHMKLSAgICAgIC8vIGluIHByb3RvMS8yLgotICAgICAgaWYgKCFkZXNjcmlwdG9yXy0+Zmll
bGQoaSktPmNvbnRhaW5pbmdfb25lb2YoKSAmJgotICAgICAgICAgIEhhc0ZpZWxkUHJlc2VuY2Uo
ZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAg
ICAgImlubGluZSB2b2lkIGNsZWFyX2hhc18kbmFtZSQoKTtcbiIsCi0gICAgICAgICAgIm5hbWUi
LCBGaWVsZE5hbWUoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0gIHByaW50ZXItPlByaW50KCJcbiIpOwotCi0gIC8vIEdlbmVyYXRlIG9uZW9mIGZ1bmN0aW9u
IGRlY2xhcmF0aW9ucwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9k
ZWNsX2NvdW50KCk7IGkrKykgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiaW5saW5l
IGJvb2wgaGFzXyRvbmVvZl9uYW1lJCgpIGNvbnN0O1xuIgotICAgICAgICAidm9pZCBjbGVhcl8k
b25lb2ZfbmFtZSQoKTtcbiIKLSAgICAgICAgImlubGluZSB2b2lkIGNsZWFyX2hhc18kb25lb2Zf
bmFtZSQoKTtcblxuIiwKLSAgICAgICAgIm9uZW9mX25hbWUiLCBkZXNjcmlwdG9yXy0+b25lb2Zf
ZGVjbChpKS0+bmFtZSgpKTsKLSAgfQotCi0gIGlmIChIYXNHZW5lcmF0ZWRNZXRob2RzKGRlc2Ny
aXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSAmJgotICAgICAgIWRlc2NyaXB0b3JfLT5vcHRpb25z
KCkubWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSAmJgotICAgICAgbnVtX3JlcXVpcmVkX2ZpZWxk
c18gPiAxKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIvLyBoZWxwZXIgZm9yIEJ5
dGVTaXplKClcbiIKLSAgICAgICAgImludCBSZXF1aXJlZEZpZWxkc0J5dGVTaXplRmFsbGJhY2so
KSBjb25zdDtcblxuIik7Ci0gIH0KLQotICAvLyBQcmVwYXJlIGRlY2xzIGZvciBfY2FjaGVkX3Np
emVfIGFuZCBfaGFzX2JpdHNfLiAgVGhlaXIgcG9zaXRpb24gaW4gdGhlCi0gIC8vIG91dHB1dCB3
aWxsIGJlIGRldGVybWluZWQgbGF0ZXIuCi0KLSAgYm9vbCBuZWVkX3RvX2VtaXRfY2FjaGVkX3Np
emUgPSB0cnVlOwotICAvLyBUT0RPKGtlbnRvbik6ICBNYWtlIF9jYWNoZWRfc2l6ZV8gYW4gYXRv
bWljPGludD4gd2hlbiBDKysgc3VwcG9ydHMgaXQuCi0gIGNvbnN0IHN0cmluZyBjYWNoZWRfc2l6
ZV9kZWNsID0gIm11dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87XG4iOwotCi0gIC8vIFRPRE8oamll
bHVvKSAtIE9wdGltaXplIF9oYXNfYml0c18gZm9yIHJlcGVhdGVkIGFuZCBvbmVvZiBmaWVsZHMu
Ci0gIHNpemVfdCBzaXplb2ZfaGFzX2JpdHMgPSAoZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCkg
KyAzMSkgLyAzMiAqIDQ7Ci0gIGlmIChkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKSA9PSAwKSB7
Ci0gICAgLy8gWmVyby1zaXplIGFycmF5cyBhcmVuJ3QgdGVjaG5pY2FsbHkgYWxsb3dlZCwgYW5k
IE1TVkMgaW4gcGFydGljdWxhcgotICAgIC8vIGRvZXNuJ3QgbGlrZSB0aGVtLiAgV2Ugc3RpbGwg
bmVlZCB0byBkZWNsYXJlIHRoZXNlIGFycmF5cyB0byBtYWtlCi0gICAgLy8gb3RoZXIgY29kZSBj
b21waWxlLiAgU2luY2UgdGhpcyBpcyBhbiB1bmNvbW1vbiBjYXNlLCB3ZSdsbCBqdXN0IGRlY2xh
cmUKLSAgICAvLyB0aGVtIHdpdGggc2l6ZSAxIGFuZCB3YXN0ZSBzb21lIHNwYWNlLiAgT2ggd2Vs
bC4KLSAgICBzaXplb2ZfaGFzX2JpdHMgPSA0OwotICB9Ci0gIGNvbnN0IHN0cmluZyBoYXNfYml0
c19kZWNsID0gc2l6ZW9mX2hhc19iaXRzID09IDAgPyAiIiA6Ci0gICAgICAiOjpnb29nbGU6OnBy
b3RvYnVmOjp1aW50MzIgX2hhc19iaXRzX1siICsgU2ltcGxlSXRvYShzaXplb2ZfaGFzX2JpdHMg
LyA0KSArICJdO1xuIjsKLQotCi0gIC8vIFRvIG1pbmltaXplIHBhZGRpbmcsIGRhdGEgbWVtYmVy
cyBhcmUgZGl2aWRlZCBpbnRvIHRocmVlIHNlY3Rpb25zOgotICAvLyAoMSkgbWVtYmVycyBhc3N1
bWVkIHRvIGFsaWduIHRvIDggYnl0ZXMKLSAgLy8gKDIpIG1lbWJlcnMgY29ycmVzcG9uZGluZyB0
byBtZXNzYWdlIGZpZWxkcywgcmUtb3JkZXJlZCB0byBvcHRpbWl6ZQotICAvLyAgICAgYWxpZ25t
ZW50LgotICAvLyAoMykgbWVtYmVycyBhc3N1bWVkIHRvIGFsaWduIHRvIDQgYnl0ZXMuCi0KLSAg
Ly8gTWVtYmVycyBhc3N1bWVkIHRvIGFsaWduIHRvIDggYnl0ZXM6Ci0KLSAgaWYgKGRlc2NyaXB0
b3JfLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+IDApIHsKLSAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpFeHRlbnNpb25TZXQgX2V4dGVu
c2lvbnNfO1xuIgotICAgICAgIlxuIik7Ci0gIH0KLQotICBpZiAoVXNlVW5rbm93bkZpZWxkU2V0
KGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgIjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRo
QXJlbmEgX2ludGVybmFsX21ldGFkYXRhXztcbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgIjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5n
UHRyIF91bmtub3duX2ZpZWxkc187XG4iCi0gICAgICAiOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YSogX2FyZW5hX3B0cl87XG4iCi0gICAgICAiXG4iKTsKLSAgfQotCi0gIGlmIChTdXBwb3J0c0Fy
ZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJmcmllbmQg
Y2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTtcbiIKLSAgICAgICJ0eXBlZGVmIHZvaWQg
SW50ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfO1xuIgotICAgICAgInR5cGVkZWYgdm9pZCBEZXN0
cnVjdG9yU2tpcHBhYmxlXztcbiIpOwotICB9Ci0KLSAgaWYgKEhhc0ZpZWxkUHJlc2VuY2UoZGVz
Y3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICAvLyBfaGFzX2JpdHNfIGlzIGZyZXF1ZW50bHkgYWNj
ZXNzZWQsIHNvIHRvIHJlZHVjZSBjb2RlIHNpemUgYW5kIGltcHJvdmUKLSAgICAvLyBzcGVlZCwg
aXQgc2hvdWxkIGJlIGNsb3NlIHRvIHRoZSBzdGFydCBvZiB0aGUgb2JqZWN0LiAgQnV0LCB0cnkg
bm90IHRvCi0gICAgLy8gd2FzdGUgc3BhY2U6X2hhc19iaXRzXyBieSBpdHNlbGYgYWx3YXlzIG1h
a2VzIHNlbnNlIGlmIGl0cyBzaXplIGlzIGEKLSAgICAvLyBtdWx0aXBsZSBvZiA4LCBidXQsIG90
aGVyd2lzZSwgbWF5YmUgX2hhc19iaXRzXyBhbmQgY2FjaGVkX3NpemVfIHRvZ2V0aGVyCi0gICAg
Ly8gd2lsbCB3b3JrIHdlbGwuCi0gICAgcHJpbnRlci0+UHJpbnQoaGFzX2JpdHNfZGVjbC5jX3N0
cigpKTsKLSAgICBpZiAoKHNpemVvZl9oYXNfYml0cyAlIDgpICE9IDApIHsKLSAgICAgIHByaW50
ZXItPlByaW50KGNhY2hlZF9zaXplX2RlY2wuY19zdHIoKSk7Ci0gICAgICBuZWVkX3RvX2VtaXRf
Y2FjaGVkX3NpemUgPSBmYWxzZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gV2l0aG91dCBm
aWVsZCBwcmVzZW5jZSwgd2UgbmVlZCBhbm90aGVyIHdheSB0byBkaXNhbWJpZ3VhdGUgdGhlIGRl
ZmF1bHQKLSAgICAvLyBpbnN0YW5jZSwgYmVjYXVzZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSdzIHN1
Ym1lc3NhZ2UgZmllbGRzIChpZiBhbnkpIHN0b3JlCi0gICAgLy8gcG9pbnRlcnMgdG8gdGhlIGRl
ZmF1bHQgaW5zdGFuY2VzIG9mIHRoZSBzdWJtZXNzYWdlcyBldmVuIHdoZW4gdGhleQotICAgIC8v
IGFyZW4ndCBwcmVzZW50LiBBbHRlcm5hdGl2ZXMgdG8gdGhpcyBhcHByb2FjaCBtaWdodCBiZSB0
byAoaSkgdXNlIGEKLSAgICAvLyB0YWdnZWQgcG9pbnRlciBvbiBhbGwgbWVzc2FnZSBmaWVsZHMs
IHNldHRpbmcgYSB0YWcgYml0IGZvciAibm90IHJlYWxseQotICAgIC8vIHByZXNlbnQsIGp1c3Qg
ZGVmYXVsdCBpbnN0YW5jZSI7IG9yIChpaSkgY29tcGFyaW5nIHx0aGlzfCBhZ2FpbnN0IHRoZQot
ICAgIC8vIHJldHVybiB2YWx1ZSBmcm9tIEdlbmVyYXRlZE1lc3NhZ2VGYWN0b3J5OjpHZXRQcm90
b3R5cGUoKSBpbiBhbGwKLSAgICAvLyBoYXNfJGZpZWxkJCgpIGNhbGxzLiBIb3dldmVyLCBib3Ro
IG9mIHRoZXNlIG9wdGlvbnMgYXJlIG11Y2ggbW9yZQotICAgIC8vIGV4cGVuc2l2ZSAoaW4gY29k
ZSBzaXplIGFuZCBDUFUgb3ZlcmhlYWQpIHRoYW4ganVzdCBjaGVja2luZyBhIGZpZWxkIGluCi0g
ICAgLy8gdGhlIG1lc3NhZ2UuIExvbmctdGVybSwgdGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUg
dG8gcmVhcmNoaXRlY3QgdGhlCi0gICAgLy8gZGVmYXVsdCBpbnN0YW5jZSBkZXNpZ24gbm90IHRv
IHN0b3JlIHBvaW50ZXJzIHRvIHN1Ym1lc3NhZ2UgZGVmYXVsdAotICAgIC8vIGluc3RhbmNlcywg
YW5kIGhhdmUgcmVmbGVjdGlvbiBnZXQgdGhvc2Ugc29tZSBvdGhlciB3YXk7IGJ1dCB0aGF0IGNo
YW5nZQotICAgIC8vIHdvdWxkIGhhdmUgdG9vIG11Y2ggaW1wYWN0IG9uIHByb3RvMi4KLSAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICJib29sIF9pc19kZWZhdWx0X2luc3RhbmNlXztcbiIpOwot
ICB9Ci0KLSAgLy8gRmllbGQgbWVtYmVyczoKLQotICAvLyBMaXN0IGZpZWxkcyB3aGljaCBkb2Vz
bid0IGJlbG9uZyB0byBhbnkgb25lb2YKLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+
IGZpZWxkczsKLSAgaGFzaF9tYXA8c3RyaW5nLCBpbnQ+IGZpZWxkbmFtZV90b19jaHVuazsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0g
ICAgaWYgKCFkZXNjcmlwdG9yXy0+ZmllbGQoaSktPmNvbnRhaW5pbmdfb25lb2YoKSkgewotICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVsZChpKTsK
LSAgICAgIGZpZWxkcy5wdXNoX2JhY2soZmllbGQpOwotICAgICAgZmllbGRuYW1lX3RvX2NodW5r
W0ZpZWxkTmFtZShmaWVsZCldID0gaSAvIDg7Ci0gICAgfQotICB9Ci0gIE9wdGltaXplUGFkZGlu
ZygmZmllbGRzKTsKLSAgLy8gRW1pdCBzb21lIHByaXZhdGUgYW5kIHN0YXRpYyBtZW1iZXJzCi0g
IHJ1bnNfb2ZfZmllbGRzXyA9IHZlY3RvcjwgdmVjdG9yPHN0cmluZz4gPigxKTsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkID0gZmllbGRzW2ldOwotICAgIGNvbnN0IEZpZWxkR2VuZXJhdG9yJiBnZW5l
cmF0b3IgPSBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpOwotICAgIGdlbmVyYXRvci5HZW5l
cmF0ZVN0YXRpY01lbWJlcnMocHJpbnRlcik7Ci0gICAgZ2VuZXJhdG9yLkdlbmVyYXRlUHJpdmF0
ZU1lbWJlcnMocHJpbnRlcik7Ci0gICAgaWYgKENhbkNsZWFyQnlaZXJvaW5nKGZpZWxkKSkgewot
ICAgICAgY29uc3Qgc3RyaW5nJiBmaWVsZG5hbWUgPSBGaWVsZE5hbWUoZmllbGQpOwotICAgICAg
aWYgKCFydW5zX29mX2ZpZWxkc18uYmFjaygpLmVtcHR5KCkgJiYKLSAgICAgICAgICAoZmllbGRu
YW1lX3RvX2NodW5rW3J1bnNfb2ZfZmllbGRzXy5iYWNrKCkuYmFjaygpXSAhPQotICAgICAgICAg
ICBmaWVsZG5hbWVfdG9fY2h1bmtbZmllbGRuYW1lXSkpIHsKLSAgICAgICAgcnVuc19vZl9maWVs
ZHNfLnB1c2hfYmFjayh2ZWN0b3I8c3RyaW5nPigpKTsKLSAgICAgIH0KLSAgICAgIHJ1bnNfb2Zf
ZmllbGRzXy5iYWNrKCkucHVzaF9iYWNrKGZpZWxkbmFtZSk7Ci0gICAgfSBlbHNlIGlmICghcnVu
c19vZl9maWVsZHNfLmJhY2soKS5lbXB0eSgpKSB7Ci0gICAgICBydW5zX29mX2ZpZWxkc18ucHVz
aF9iYWNrKHZlY3RvcjxzdHJpbmc+KCkpOwotICAgIH0KLSAgfQotCi0gIC8vIEZvciBlYWNoIG9u
ZW9mIGdlbmVyYXRlIGEgdW5pb24KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+
b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAg
InVuaW9uICRjYW1lbF9vbmVvZl9uYW1lJFVuaW9uIHtcbiIKLSAgICAgICAgLy8gZXhwbGljaXQg
ZW1wdHkgY29uc3RydWN0b3IgaXMgbmVlZGVkIHdoZW4gdW5pb24gY29udGFpbnMKLSAgICAgICAg
Ly8gQXJlbmFTdHJpbmdQdHIgbWVtYmVycyBmb3Igc3RyaW5nIGZpZWxkcy4KLSAgICAgICAgIiAg
JGNhbWVsX29uZW9mX25hbWUkVW5pb24oKSB7fVxuIiwKLSAgICAgICAgImNhbWVsX29uZW9mX25h
bWUiLAotICAgICAgICBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGRlc2NyaXB0b3JfLT5vbmVvZl9k
ZWNsKGkpLT5uYW1lKCksIHRydWUpKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVsZF9jb3VudCgp
OyBqKyspIHsKLSAgICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9yXy0+b25lb2Zf
ZGVjbChpKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQoaikpLkdlbmVyYXRl
UHJpdmF0ZU1lbWJlcnMocHJpbnRlcik7Ci0gICAgfQotICAgIHByaW50ZXItPk91dGRlbnQoKTsK
LSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIn0gJG9uZW9mX25hbWUkXztcbiIsCi0gICAg
ICAgICJvbmVvZl9uYW1lIiwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPm5hbWUoKSk7Ci0g
ICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+ZmllbGRf
Y291bnQoKTsgaisrKSB7Ci0gICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZGVzY3JpcHRvcl8t
Pm9uZW9mX2RlY2woaSktPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkKGopKS5H
ZW5lcmF0ZVN0YXRpY01lbWJlcnMocHJpbnRlcik7Ci0gICAgfQotICB9Ci0KLSAgLy8gTWVtYmVy
cyBhc3N1bWVkIHRvIGFsaWduIHRvIDQgYnl0ZXM6Ci0KLSAgaWYgKG5lZWRfdG9fZW1pdF9jYWNo
ZWRfc2l6ZSkgewotICAgIHByaW50ZXItPlByaW50KGNhY2hlZF9zaXplX2RlY2wuY19zdHIoKSk7
Ci0gICAgbmVlZF90b19lbWl0X2NhY2hlZF9zaXplID0gZmFsc2U7Ci0gIH0KLQotICAvLyBHZW5l
cmF0ZSBfb25lb2ZfY2FzZV8uCi0gIGlmIChkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbF9jb3VudCgp
ID4gMCkgewotICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAiOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50MzIgX29uZW9mX2Nhc2VfWyRvbmVvZl9kZWNsX2NvdW50JF07XG4iCi0gICAgICAi
XG4iKTsKLSAgfQotCi0gIC8vIEdlbmVyYXRlIF9hbnlfbWV0YWRhdGFfIGZvciB0aGUgQW55IHR5
cGUuCi0gIGlmIChJc0FueU1lc3NhZ2UoZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFycywKLSAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBbnlNZXRhZGF0
YSBfYW55X21ldGFkYXRhXztcbiIpOwotICB9Ci0KLSAgLy8gRGVjbGFyZSBBZGREZXNjcmlwdG9y
cygpLCBCdWlsZERlc2NyaXB0b3JzKCksIGFuZCBTaHV0ZG93bkZpbGUoKSBhcwotICAvLyBmcmll
bmRzIHNvIHRoYXQgdGhleSBjYW4gYWNjZXNzIHByaXZhdGUgc3RhdGljIHZhcmlhYmxlcyBsaWtl
Ci0gIC8vIGRlZmF1bHRfaW5zdGFuY2VfIGFuZCByZWZsZWN0aW9uXy4KLSAgUHJpbnRIYW5kbGlu
Z09wdGlvbmFsU3RhdGljSW5pdGlhbGl6ZXJzKAotICAgICAgZGVzY3JpcHRvcl8tPmZpbGUoKSwg
b3B0aW9uc18sIHByaW50ZXIsCi0gICAgICAvLyBXaXRoIHN0YXRpYyBpbml0aWFsaXplcnMuCi0g
ICAgICAiZnJpZW5kIHZvaWQgJGRsbGV4cG9ydF9kZWNsJCAkYWRkZGVzY3JpcHRvcnNuYW1lJCgp
O1xuIiwKLSAgICAgIC8vIFdpdGhvdXQuCi0gICAgICAiZnJpZW5kIHZvaWQgJGRsbGV4cG9ydF9k
ZWNsJCAkYWRkZGVzY3JpcHRvcnNuYW1lJF9pbXBsKCk7XG4iLAotICAgICAgLy8gVmFycy4KLSAg
ICAgICJkbGxleHBvcnRfZGVjbCIsIG9wdGlvbnNfLmRsbGV4cG9ydF9kZWNsLCAiYWRkZGVzY3Jp
cHRvcnNuYW1lIiwKLSAgICAgIEdsb2JhbEFkZERlc2NyaXB0b3JzTmFtZShkZXNjcmlwdG9yXy0+
ZmlsZSgpLT5uYW1lKCkpKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiZnJpZW5kIHZvaWQg
JGFzc2lnbmRlc2NyaXB0b3JzbmFtZSQoKTtcbiIKLSAgICAiZnJpZW5kIHZvaWQgJHNodXRkb3du
ZmlsZW5hbWUkKCk7XG4iCi0gICAgIlxuIiwKLSAgICAiYXNzaWduZGVzY3JpcHRvcnNuYW1lIiwK
LSAgICAgIEdsb2JhbEFzc2lnbkRlc2NyaXB0b3JzTmFtZShkZXNjcmlwdG9yXy0+ZmlsZSgpLT5u
YW1lKCkpLAotICAgICJzaHV0ZG93bmZpbGVuYW1lIiwgR2xvYmFsU2h1dGRvd25GaWxlTmFtZShk
ZXNjcmlwdG9yXy0+ZmlsZSgpLT5uYW1lKCkpKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAi
dm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTtcbiIKLSAgICAic3RhdGljICRjbGFzc25hbWUk
KiBkZWZhdWx0X2luc3RhbmNlXztcbiIsCi0gICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwot
Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQodmFycywgIn07Iik7Ci0g
IEdPT0dMRV9EQ0hFQ0soIW5lZWRfdG9fZW1pdF9jYWNoZWRfc2l6ZSk7Ci19Ci0KLXZvaWQgTWVz
c2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZURlcGVuZGVudElubGluZU1ldGhvZHMoaW86OlByaW50
ZXIqIHByaW50ZXIpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+bmVzdGVk
X3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgLy8gbWFwIGVudHJ5IG1lc3NhZ2UgZG9lc24ndCBu
ZWVkIGlubGluZSBtZXRob2RzLiBTaW5jZSBtYXAgZW50cnkgbWVzc2FnZQotICAgIC8vIGNhbm5v
dCBiZSBhIHRvcCBsZXZlbCBjbGFzcywgd2UganVzdCBuZWVkIHRvIGF2b2lkIGNhbGxpbmcKLSAg
ICAvLyBHZW5lcmF0ZUlubGluZU1ldGhvZHMgaGVyZS4KLSAgICBpZiAoSXNNYXBFbnRyeU1lc3Nh
Z2UoZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpKSkgY29udGludWU7Ci0gICAgbmVzdGVkX2dl
bmVyYXRvcnNfW2ldLT5HZW5lcmF0ZURlcGVuZGVudElubGluZU1ldGhvZHMocHJpbnRlcik7Ci0g
ICAgcHJpbnRlci0+UHJpbnQoa1RoaW5TZXBhcmF0b3IpOwotICAgIHByaW50ZXItPlByaW50KCJc
biIpOwotICB9Ci0KLSAgR2VuZXJhdGVEZXBlbmRlbnRGaWVsZEFjY2Vzc29yRGVmaW5pdGlvbnMo
cHJpbnRlcik7Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUlubGluZU1l
dGhvZHMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgaXNfaW5saW5lKSB7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykgewotICAg
IC8vIG1hcCBlbnRyeSBtZXNzYWdlIGRvZXNuJ3QgbmVlZCBpbmxpbmUgbWV0aG9kcy4gU2luY2Ug
bWFwIGVudHJ5IG1lc3NhZ2UKLSAgICAvLyBjYW5ub3QgYmUgYSB0b3AgbGV2ZWwgY2xhc3MsIHdl
IGp1c3QgbmVlZCB0byBhdm9pZCBjYWxsaW5nCi0gICAgLy8gR2VuZXJhdGVJbmxpbmVNZXRob2Rz
IGhlcmUuCi0gICAgaWYgKElzTWFwRW50cnlNZXNzYWdlKGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlw
ZShpKSkpIGNvbnRpbnVlOwotICAgIG5lc3RlZF9nZW5lcmF0b3JzX1tpXS0+R2VuZXJhdGVJbmxp
bmVNZXRob2RzKHByaW50ZXIsIGlzX2lubGluZSk7Ci0gICAgcHJpbnRlci0+UHJpbnQoa1RoaW5T
ZXBhcmF0b3IpOwotICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICB9Ci0KLSAgR2VuZXJhdGVG
aWVsZEFjY2Vzc29yRGVmaW5pdGlvbnMocHJpbnRlciwgaXNfaW5saW5lKTsKLQotICAvLyBHZW5l
cmF0ZSBvbmVvZl9jYXNlKCkgZnVuY3Rpb25zLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2Ny
aXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewotICAgIG1hcDxzdHJpbmcsIHN0cmlu
Zz4gdmFyczsKLSAgICB2YXJzWyJjbGFzc19uYW1lIl0gPSBjbGFzc25hbWVfOwotICAgIHZhcnNb
ImNhbWVsX29uZW9mX25hbWUiXSA9IFVuZGVyc2NvcmVzVG9DYW1lbENhc2UoCi0gICAgICAgIGRl
c2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5uYW1lKCksIHRydWUpOwotICAgIHZhcnNbIm9uZW9m
X25hbWUiXSA9IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5uYW1lKCk7Ci0gICAgdmFyc1si
b25lb2ZfaW5kZXgiXSA9IFNpbXBsZUl0b2EoZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPmlu
ZGV4KCkpOwotICAgIHZhcnNbImlubGluZSJdID0gaXNfaW5saW5lID8gImlubGluZSAiIDogIiI7
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcnMsCi0gICAgICAgICIkaW5saW5lJCIK
LSAgICAgICAgIiRjbGFzc19uYW1lJDo6JGNhbWVsX29uZW9mX25hbWUkQ2FzZSAkY2xhc3NfbmFt
ZSQ6OiIKLSAgICAgICAgIiRvbmVvZl9uYW1lJF9jYXNlKCkgY29uc3Qge1xuIgotICAgICAgICAi
ICByZXR1cm4gJGNsYXNzX25hbWUkOjokY2FtZWxfb25lb2ZfbmFtZSRDYXNlKCIKLSAgICAgICAg
Il9vbmVvZl9jYXNlX1skb25lb2ZfaW5kZXgkXSk7XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgfQot
fQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVEZXNjcmlwdG9yRGVjbGFyYXRp
b25zKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGlmICghSXNNYXBFbnRyeU1lc3NhZ2UoZGVz
Y3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpEZXNjcmlwdG9yKiAkbmFtZSRfZGVzY3JpcHRvcl8gPSBOVUxMO1xuIgotICAg
ICAgImNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VS
ZWZsZWN0aW9uKlxuIgotICAgICAgIiAgJG5hbWUkX3JlZmxlY3Rpb25fID0gTlVMTDtcbiIsCi0g
ICAgICAibmFtZSIsIGNsYXNzbmFtZV8pOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50
KAotICAgICAgImNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogJG5hbWUkX2Rl
c2NyaXB0b3JfID0gTlVMTDtcbiIsCi0gICAgICAibmFtZSIsIGNsYXNzbmFtZV8pOwotICB9Ci0K
LSAgLy8gR2VuZXJhdGUgb25lb2YgZGVmYXVsdCBpbnN0YW5jZSBmb3IgcmVmbGVjdGlvbiB1c2Fn
ZS4KLSAgaWYgKGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCkgPiAwKSB7Ci0gICAgcHJp
bnRlci0+UHJpbnQoInN0cnVjdCAkbmFtZSRPbmVvZkluc3RhbmNlIHtcbiIsCi0gICAgICAgICAg
ICAgICAgICAgIm5hbWUiLCBjbGFzc25hbWVfKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRl
c2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewotICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+ZmllbGRfY291bnQoKTsgaisrKSB7
Ci0gICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+b25l
b2ZfZGVjbChpKS0+ZmllbGQoaik7Ci0gICAgICAgIHByaW50ZXItPlByaW50KCIgICIpOwotICAg
ICAgICBpZiAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01F
U1NBR0UgfHwKLSAgICAgICAgICAgIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfU1RSSU5HICYmCi0gICAgICAgICAgICAgRWZmZWN0aXZlU3RyaW5nQ1R5cGUo
ZmllbGQpICE9IEZpZWxkT3B0aW9uczo6U1RSSU5HKSkgewotICAgICAgICAgIHByaW50ZXItPlBy
aW50KCJjb25zdCAiKTsKLSAgICAgICAgfQotICAgICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQo
ZmllbGQpLkdlbmVyYXRlUHJpdmF0ZU1lbWJlcnMocHJpbnRlcik7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgcHJpbnRlci0+UHJpbnQoIn0qICRuYW1lJF9kZWZhdWx0X29uZW9mX2luc3RhbmNlXyA9
IE5VTEw7XG4iLAotICAgICAgICAgICAgICAgICAgICJuYW1lIiwgY2xhc3NuYW1lXyk7Ci0gIH0K
LQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZV9jb3VudCgp
OyBpKyspIHsKLSAgICBuZXN0ZWRfZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlRGVzY3JpcHRvckRl
Y2xhcmF0aW9ucyhwcmludGVyKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3Jp
cHRvcl8tPmVudW1fdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICJjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yKiAkbmFtZSRfZGVz
Y3JpcHRvcl8gPSBOVUxMO1xuIiwKLSAgICAgICJuYW1lIiwgQ2xhc3NOYW1lKGRlc2NyaXB0b3Jf
LT5lbnVtX3R5cGUoaSksIGZhbHNlKSk7Ci0gIH0KLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9y
OjoKLUdlbmVyYXRlRGVzY3JpcHRvckluaXRpYWxpemVyKGlvOjpQcmludGVyKiBwcmludGVyLCBp
bnQgaW5kZXgpIHsKLSAgLy8gVE9ETyhrZW50b24pOiAgUGFzc2luZyB0aGUgaW5kZXggdG8gdGhp
cyBtZXRob2QgaXMgcmVkdW5kYW50OyBqdXN0IHVzZQotICAvLyAgIGRlc2NyaXB0b3JfLT5pbmRl
eCgpIGluc3RlYWQuCi0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgdmFyc1siY2xhc3Nu
YW1lIl0gPSBjbGFzc25hbWVfOwotICB2YXJzWyJpbmRleCJdID0gU2ltcGxlSXRvYShpbmRleCk7
Ci0KLSAgLy8gT2J0YWluIHRoZSBkZXNjcmlwdG9yIGZyb20gdGhlIHBhcmVudCdzIGRlc2NyaXB0
b3IuCi0gIGlmIChkZXNjcmlwdG9yXy0+Y29udGFpbmluZ190eXBlKCkgPT0gTlVMTCkgewotICAg
IHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAiJGNsYXNzbmFtZSRfZGVzY3JpcHRvcl8gPSBm
aWxlLT5tZXNzYWdlX3R5cGUoJGluZGV4JCk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICB2YXJzWyJw
YXJlbnQiXSA9IENsYXNzTmFtZShkZXNjcmlwdG9yXy0+Y29udGFpbmluZ190eXBlKCksIGZhbHNl
KTsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgIiRjbGFzc25hbWUkX2Rlc2NyaXB0
b3JfID0gIgotICAgICAgICAiJHBhcmVudCRfZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKCRpbmRl
eCQpO1xuIik7Ci0gIH0KLQotICBpZiAoSXNNYXBFbnRyeU1lc3NhZ2UoZGVzY3JpcHRvcl8pKSBy
ZXR1cm47Ci0KLSAgLy8gR2VuZXJhdGUgdGhlIG9mZnNldHMuCi0gIEdlbmVyYXRlT2Zmc2V0cyhw
cmludGVyKTsKLQotICBjb25zdCBib29sIHBhc3NfcG9vbF9hbmRfZmFjdG9yeSA9IGZhbHNlOwot
ICB2YXJzWyJmbiJdID0gcGFzc19wb29sX2FuZF9mYWN0b3J5ID8KLSAgICAgICJuZXcgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24iIDoKLSAg
ICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVj
dGlvbiIKLSAgICAgICI6Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uIjsKLSAgLy8gQ29u
c3RydWN0IHRoZSByZWZsZWN0aW9uIG9iamVjdC4KLSAgcHJpbnRlci0+UHJpbnQodmFycywKLSAg
ICAiJGNsYXNzbmFtZSRfcmVmbGVjdGlvbl8gPVxuIgotICAgICIgICRmbiQoXG4iCi0gICAgIiAg
ICAkY2xhc3NuYW1lJF9kZXNjcmlwdG9yXyxcbiIKLSAgICAiICAgICRjbGFzc25hbWUkOjpkZWZh
dWx0X2luc3RhbmNlXyxcbiIKLSAgICAiICAgICRjbGFzc25hbWUkX29mZnNldHNfLFxuIik7Ci0g
IGlmICghSGFzRmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIC8vIElm
IHdlIGRvbid0IGhhdmUgZmllbGQgcHJlc2VuY2UsIHRoZW4gX2hhc19iaXRzXyBkb2VzIG5vdCBl
eGlzdC4KLSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICIgICAgLTEsXG4iKTsKLSAgfSBl
bHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICIgICAgR09PR0xFX1BST1RPQlVG
X0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVCgkY2xhc3NuYW1lJCwgX2hhc19iaXRzX1sw
XSksXG4iKTsKLSAgfQotCi0gIC8vIFVua25vd24gZmllbGQgb2Zmc2V0OiBlaXRoZXIgcG9pbnRz
IHRvIHRoZSB1bmtub3duIGZpZWxkIHNldCBpZiBlbWJlZGRlZAotICAvLyBkaXJlY3RseSwgb3Ig
aW5kaWNhdGVzIHRoYXQgdGhlIHVua25vd24gZmllbGQgc2V0IGlzIHN0b3JlZCBhcyBwYXJ0IG9m
IHRoZQotICAvLyBpbnRlcm5hbCBtZXRhZGF0YSBpZiBub3QuCi0gIGlmIChVc2VVbmtub3duRmll
bGRTZXQoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFycywKLSAgICAiICAgIC0xLFxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFycywKLSAgICAiICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVM
RF9PRkZTRVQoIgotICAgICAgIiRjbGFzc25hbWUkLCBfdW5rbm93bl9maWVsZHNfKSxcbiIpOwot
ICB9Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+IDApIHsK
LSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgIiAgICBHT09HTEVfUFJPVE9CVUZfR0VO
RVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKCIKLSAgICAgICAgIiRjbGFzc25hbWUkLCBfZXh0
ZW5zaW9uc18pLFxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gTm8gZXh0ZW5zaW9ucy4KLSAgICBw
cmludGVyLT5QcmludCh2YXJzLAotICAgICAgIiAgICAtMSxcbiIpOwotICB9Ci0KLSAgaWYgKGRl
c2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCkgPiAwKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
dmFycywKLSAgICAiICAgICRjbGFzc25hbWUkX2RlZmF1bHRfb25lb2ZfaW5zdGFuY2VfLFxuIgot
ICAgICIgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVCgi
Ci0gICAgICAiJGNsYXNzbmFtZSQsIF9vbmVvZl9jYXNlX1swXSksXG4iKTsKLSAgfQotCi0gIGlm
IChwYXNzX3Bvb2xfYW5kX2ZhY3RvcnkpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAg
IiAgICA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQb29sOjpnZW5lcmF0ZWRfcG9vbCgp
LFxuIik7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgICAgICAgICAgICAgICAg
IiAgICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFjdG9y
eSgpLFxuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICIgICAgc2l6ZW9m
KCRjbGFzc25hbWUkKSxcbiIpOwotCi0gIC8vIEFyZW5hIG9mZnNldDogZWl0aGVyIGFuIG9mZnNl
dCB0byB0aGUgbWV0YWRhdGEgc3RydWN0IHRoYXQgY29udGFpbnMgdGhlCi0gIC8vIGFyZW5hIHBv
aW50ZXIgYW5kIHVua25vd24gZmllbGQgc2V0IChpbiBhIHNwYWNlLWVmZmljaWVudCB3YXkpIGlm
IHdlIHVzZQotICAvLyB0aGF0IGltcGxlbWVudGF0aW9uIHN0cmF0ZWd5LCBvciBhbiBvZmZzZXQg
ZGlyZWN0bHkgdG8gdGhlIGFyZW5hIHBvaW50ZXIgaWYKLSAgLy8gbm90IChiZWNhdXNlIGUuZy4g
d2UgZG9uJ3QgaGF2ZSBhbiB1bmtub3duIGZpZWxkIHNldCkuCi0gIGlmIChVc2VVbmtub3duRmll
bGRTZXQoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFycywKLSAgICAiICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVM
RF9PRkZTRVQoIgotICAgICIkY2xhc3NuYW1lJCwgX2ludGVybmFsX21ldGFkYXRhXyksXG4iKTsK
LSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICIgICAgR09PR0xFX1BS
T1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVCgiCi0gICAgIiRjbGFzc25hbWUk
LCBfYXJlbmFfKSxcbiIpOwotICB9Ci0KLSAgLy8gaXNfZGVmYXVsdF9pbnN0YW5jZV8gb2Zmc2V0
LgotICBpZiAoSGFzRmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIHBy
aW50ZXItPlByaW50KHZhcnMsCi0gICAgIiAgICAtMSk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBw
cmludGVyLT5QcmludCh2YXJzLAotICAgICIgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9N
RVNTQUdFX0ZJRUxEX09GRlNFVCgiCi0gICAgIiRjbGFzc25hbWUkLCBfaXNfZGVmYXVsdF9pbnN0
YW5jZV8pKTtcbiIpOwotICB9Ci0KLSAgLy8gSGFuZGxlIG5lc3RlZCB0eXBlcy4KLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+bmVzdGVkX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0g
ICAgbmVzdGVkX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZURlc2NyaXB0b3JJbml0aWFsaXplcihw
cmludGVyLCBpKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmVu
dW1fdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBlbnVtX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0
ZURlc2NyaXB0b3JJbml0aWFsaXplcihwcmludGVyLCBpKTsKLSAgfQotfQotCi12b2lkIE1lc3Nh
Z2VHZW5lcmF0b3I6OgotR2VuZXJhdGVUeXBlUmVnaXN0cmF0aW9ucyhpbzo6UHJpbnRlciogcHJp
bnRlcikgewotICAvLyBSZWdpc3RlciB0aGlzIG1lc3NhZ2UgdHlwZSB3aXRoIHRoZSBtZXNzYWdl
IGZhY3RvcnkuCi0gIGlmICghSXNNYXBFbnRyeU1lc3NhZ2UoZGVzY3JpcHRvcl8pKSB7Ci0gICAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAiOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9y
eTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoXG4iCi0gICAgICAiICAgICRjbGFz
c25hbWUkX2Rlc2NyaXB0b3JfLCAmJGNsYXNzbmFtZSQ6OmRlZmF1bHRfaW5zdGFuY2UoKSk7XG4i
LAotICAgICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotICB9Ci0gIGVsc2UgewotICAgIG1h
cDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgICBDb2xsZWN0TWFwSW5mbyhkZXNjcmlwdG9yXywg
JnZhcnMpOwotICAgIHZhcnNbImNsYXNzbmFtZSJdID0gY2xhc3NuYW1lXzsKLQotICAgIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogdmFsID0gZGVzY3JpcHRvcl8tPkZpbmRGaWVsZEJ5TmFtZSgidmFs
dWUiKTsKLSAgICBpZiAoZGVzY3JpcHRvcl8tPmZpbGUoKS0+c3ludGF4KCkgPT0gRmlsZURlc2Ny
aXB0b3I6OlNZTlRBWF9QUk9UTzIgJiYKLSAgICAgICAgdmFsLT50eXBlKCkgPT0gRmllbGREZXNj
cmlwdG9yOjpUWVBFX0VOVU0pIHsKLSAgICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGRl
ZmF1bHRfdmFsdWUgPSB2YWwtPmRlZmF1bHRfdmFsdWVfZW51bSgpOwotICAgICAgdmFyc1siZGVm
YXVsdF9lbnVtX3ZhbHVlIl0gPSBJbnQzMlRvU3RyaW5nKGRlZmF1bHRfdmFsdWUtPm51bWJlcigp
KTsKLSAgICB9IGVsc2UgewotICAgICAgdmFyc1siZGVmYXVsdF9lbnVtX3ZhbHVlIl0gPSAiMCI7
Ci0gICAgfQotCi0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICI6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZShc
biIKLSAgICAgICIgICAgICAkY2xhc3NuYW1lJF9kZXNjcmlwdG9yXyxcbiIKLSAgICAgICIgICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpNYXBFbnRyeTxcbiIKLSAgICAgICIgICAg
ICAgICAgJGtleSQsXG4iCi0gICAgICAiICAgICAgICAgICR2YWwkLFxuIgotICAgICAgIiAgICAg
ICAgICAka2V5X3dpcmVfdHlwZSQsXG4iCi0gICAgICAiICAgICAgICAgICR2YWxfd2lyZV90eXBl
JCxcbiIKLSAgICAgICIgICAgICAgICAgJGRlZmF1bHRfZW51bV92YWx1ZSQ+OjpDcmVhdGVEZWZh
dWx0SW5zdGFuY2UoXG4iCi0gICAgICAiICAgICAgICAgICAgICAkY2xhc3NuYW1lJF9kZXNjcmlw
dG9yXykpO1xuIik7Ci0gIH0KLQotICAvLyBIYW5kbGUgbmVzdGVkIHR5cGVzLgotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAg
ICBuZXN0ZWRfZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlVHlwZVJlZ2lzdHJhdGlvbnMocHJpbnRl
cik7Ci0gIH0KLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRlRGVmYXVsdElu
c3RhbmNlQWxsb2NhdG9yKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIENvbnN0cnVjdCB0
aGUgZGVmYXVsdCBpbnN0YW5jZXMgb2YgYWxsIGZpZWxkcywgYXMgdGhleSB3aWxsIGJlIHVzZWQK
LSAgLy8gd2hlbiBjcmVhdGluZyB0aGUgZGVmYXVsdCBpbnN0YW5jZSBvZiB0aGUgZW50aXJlIG1l
c3NhZ2UuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7
IGkrKykgewotICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9yXy0+ZmllbGQoaSkp
Ci0gICAgICAgICAgICAgICAgICAgICAuR2VuZXJhdGVEZWZhdWx0SW5zdGFuY2VBbGxvY2F0b3Io
cHJpbnRlcik7Ci0gIH0KLQotICBpZiAoSXNNYXBFbnRyeU1lc3NhZ2UoZGVzY3JpcHRvcl8pKSBy
ZXR1cm47Ci0KLSAgLy8gQ29uc3RydWN0IHRoZSBkZWZhdWx0IGluc3RhbmNlLiAgV2UgY2FuJ3Qg
Y2FsbCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB5ZXQKLSAgLy8gYmVjYXVzZSB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSBhbGwgZGVmYXVsdCBpbnN0YW5jZXMgdGhhdCB0aGlzIG9uZSBtaWdodAotICAv
LyBkZXBlbmQgb24gYXJlIGNvbnN0cnVjdGVkIGZpcnN0LgotICBwcmludGVyLT5QcmludCgKLSAg
ICAiJGNsYXNzbmFtZSQ6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3ICRjbGFzc25hbWUkKCk7XG4i
LAotICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfKTsKLQotICBpZiAoKGRlc2NyaXB0b3JfLT5v
bmVvZl9kZWNsX2NvdW50KCkgPiAwKSAmJgotICAgICAgSGFzRGVzY3JpcHRvck1ldGhvZHMoZGVz
Y3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
IiRjbGFzc25hbWUkX2RlZmF1bHRfb25lb2ZfaW5zdGFuY2VfID0gbmV3ICRjbGFzc25hbWUkT25l
b2ZJbnN0YW5jZSgpO1xuIiwKLSAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXyk7Ci0gIH0KLQot
ICAvLyBIYW5kbGUgbmVzdGVkIHR5cGVzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0
b3JfLT5uZXN0ZWRfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBuZXN0ZWRfZ2VuZXJhdG9yc19b
aV0tPkdlbmVyYXRlRGVmYXVsdEluc3RhbmNlQWxsb2NhdG9yKHByaW50ZXIpOwotICB9Ci0KLX0K
LQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRlRGVmYXVsdEluc3RhbmNlSW5pdGlh
bGl6ZXIoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiRj
bGFzc25hbWUkOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7XG4i
LAotICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfKTsKLQotICAvLyBSZWdpc3RlciBleHRlbnNp
b25zLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5leHRlbnNpb25fY291bnQo
KTsgaSsrKSB7Ci0gICAgZXh0ZW5zaW9uX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZVJlZ2lzdHJh
dGlvbihwcmludGVyKTsKLSAgfQotCi0gIC8vIEhhbmRsZSBuZXN0ZWQgdHlwZXMuCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykgewot
ICAgIC8vIG1hcCBlbnRyeSBtZXNzYWdlIGRvZXNuJ3QgbmVlZCB0byBpbml0aWFsaXplIGRlZmF1
bHQgaW5zdGFuY2UgbWFudWFsbHkuCi0gICAgLy8gU2luY2UgbWFwIGVudHJ5IG1lc3NhZ2UgY2Fu
bm90IGJlIGEgdG9wIGxldmVsIGNsYXNzLCB3ZSBqdXN0IG5lZWQgdG8KLSAgICAvLyBhdm9pZCBj
YWxsaW5nIERlZmF1bHRJbnN0YW5jZUluaXRpYWxpemVyIGhlcmUuCi0gICAgaWYgKElzTWFwRW50
cnlNZXNzYWdlKGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZShpKSkpIGNvbnRpbnVlOwotICAgIG5l
c3RlZF9nZW5lcmF0b3JzX1tpXS0+R2VuZXJhdGVEZWZhdWx0SW5zdGFuY2VJbml0aWFsaXplcihw
cmludGVyKTsKLSAgfQotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVTaHV0
ZG93bkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ImRlbGV0ZSAkY2xhc3NuYW1lJDo6ZGVmYXVsdF9pbnN0YW5jZV87XG4iLAotICAgICJjbGFzc25h
bWUiLCBjbGFzc25hbWVfKTsKLQotICBpZiAoSGFzRGVzY3JpcHRvck1ldGhvZHMoZGVzY3JpcHRv
cl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgaWYgKGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNs
X2NvdW50KCkgPiAwKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImRlbGV0ZSAk
Y2xhc3NuYW1lJF9kZWZhdWx0X29uZW9mX2luc3RhbmNlXztcbiIsCi0gICAgICAgICJjbGFzc25h
bWUiLCBjbGFzc25hbWVfKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiZGVs
ZXRlICRjbGFzc25hbWUkX3JlZmxlY3Rpb25fO1xuIiwKLSAgICAgICJjbGFzc25hbWUiLCBjbGFz
c25hbWVfKTsKLSAgfQotCi0gIC8vIEhhbmRsZSBkZWZhdWx0IGluc3RhbmNlcyBvZiBmaWVsZHMu
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykg
ewotICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpCi0gICAg
ICAgICAgICAgICAgICAgICAuR2VuZXJhdGVTaHV0ZG93bkNvZGUocHJpbnRlcik7Ci0gIH0KLQot
ICAvLyBIYW5kbGUgbmVzdGVkIHR5cGVzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0
b3JfLT5uZXN0ZWRfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBpZiAoSXNNYXBFbnRyeU1lc3Nh
Z2UoZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpKSkgY29udGludWU7Ci0gICAgbmVzdGVkX2dl
bmVyYXRvcnNfW2ldLT5HZW5lcmF0ZVNodXRkb3duQ29kZShwcmludGVyKTsKLSAgfQotfQotCi12
b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVDbGFzc01ldGhvZHMoaW86OlByaW50ZXIq
IHByaW50ZXIpIHsKLSAgLy8gbXV0YWJsZV91bmtub3duX2ZpZWxkcyB3cmFwcGVyIGZ1bmN0aW9u
IGZvciBMYXp5U3RyaW5nT3V0cHV0U3RyZWFtCi0gIC8vIGNhbGxiYWNrLgotICBpZiAoUHJlc2Vy
dmVVbmtub3duRmllbGRzKGRlc2NyaXB0b3JfKSAmJgotICAgICAgIVVzZVVua25vd25GaWVsZFNl
dChkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICAgInN0YXRpYyA6OnN0ZDo6c3RyaW5nKiBNdXRhYmxlVW5rbm93bkZpZWxkc0ZvciRj
bGFzc25hbWUkKFxuIgotICAgICAgICAiICAgICRjbGFzc25hbWUkKiBwdHIpIHtcbiIKLSAgICAg
ICAgIiAgcmV0dXJuIHB0ci0+bXV0YWJsZV91bmtub3duX2ZpZWxkcygpO1xuIgotICAgICAgICAi
fVxuIgotICAgICAgICAiXG4iLAotICAgICAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXyk7Ci0g
IH0KLSAgaWYgKElzQW55TWVzc2FnZShkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJ2b2lkICRjbGFzc25hbWUkOjpQYWNrRnJvbShjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2UmIG1lc3NhZ2UpIHtcbiIKLSAgICAgICIgIF9hbnlfbWV0YWRhdGFfLlBh
Y2tGcm9tKG1lc3NhZ2UpO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJcbiIKLSAgICAgICJ2b2lk
ICRjbGFzc25hbWUkOjpQYWNrRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2Um
IG1lc3NhZ2UsXG4iCi0gICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgOjpz
dGQ6OnN0cmluZyYgdHlwZV91cmxfcHJlZml4KSB7XG4iCi0gICAgICAiICBfYW55X21ldGFkYXRh
Xy5QYWNrRnJvbShtZXNzYWdlLCB0eXBlX3VybF9wcmVmaXgpO1xuIgotICAgICAgIn1cbiIKLSAg
ICAgICJcbiIKLSAgICAgICJib29sICRjbGFzc25hbWUkOjpVbnBhY2tUbyg6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2UqIG1lc3NhZ2UpIGNvbnN0IHtcbiIKLSAgICAgICIgIHJldHVybiBfYW55
X21ldGFkYXRhXy5VbnBhY2tUbyhtZXNzYWdlKTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiXG4i
LAotICAgICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZW51bV90eXBlX2NvdW50KCk7IGkrKykgewotICAgIGVudW1f
Z2VuZXJhdG9yc19baV0tPkdlbmVyYXRlTWV0aG9kcyhwcmludGVyKTsKLSAgfQotCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykgewot
ICAgIC8vIG1hcCBlbnRyeSBtZXNzYWdlIGRvZXNuJ3QgbmVlZCBjbGFzcyBtZXRob2RzLiBTaW5j
ZSBtYXAgZW50cnkgbWVzc2FnZQotICAgIC8vIGNhbm5vdCBiZSBhIHRvcCBsZXZlbCBjbGFzcywg
d2UganVzdCBuZWVkIHRvIGF2b2lkIGNhbGxpbmcKLSAgICAvLyBHZW5lcmF0ZUNsYXNzTWV0aG9k
cyBoZXJlLgotICAgIGlmIChJc01hcEVudHJ5TWVzc2FnZShkZXNjcmlwdG9yXy0+bmVzdGVkX3R5
cGUoaSkpKSBjb250aW51ZTsKLSAgICBuZXN0ZWRfZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlQ2xh
c3NNZXRob2RzKHByaW50ZXIpOwotICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICAgIHByaW50
ZXItPlByaW50KGtUaGluU2VwYXJhdG9yKTsKLSAgICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAg
fQotCi0gIC8vIEdlbmVyYXRlIG5vbi1pbmxpbmUgZmllbGQgZGVmaW5pdGlvbnMuCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGZp
ZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpCi0gICAgICAgICAgICAg
ICAgICAgICAuR2VuZXJhdGVOb25JbmxpbmVBY2Nlc3NvckRlZmluaXRpb25zKHByaW50ZXIpOwot
ICB9Ci0KLSAgLy8gR2VuZXJhdGUgZmllbGQgbnVtYmVyIGNvbnN0YW50cy4KLSAgcHJpbnRlci0+
UHJpbnQoIiNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMFxuIik7Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewot
ICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciAqZmllbGQgPSBkZXNjcmlwdG9yXy0+ZmllbGQoaSk7
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiY29uc3QgaW50ICRjbGFzc25hbWUkOjokY29u
c3RhbnRfbmFtZSQ7XG4iLAotICAgICAgImNsYXNzbmFtZSIsIENsYXNzTmFtZShGaWVsZFNjb3Bl
KGZpZWxkKSwgZmFsc2UpLAotICAgICAgImNvbnN0YW50X25hbWUiLCBGaWVsZENvbnN0YW50TmFt
ZShmaWVsZCkpOwotICB9Ci0gIHByaW50ZXItPlByaW50KAotICAgICIjZW5kaWYgIC8vICFkZWZp
bmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwXG4iCi0gICAgIlxuIik7Ci0KLSAgLy8g
RGVmaW5lIGV4dGVuc2lvbiBpZGVudGlmaWVycy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNj
cmlwdG9yXy0+ZXh0ZW5zaW9uX2NvdW50KCk7IGkrKykgewotICAgIGV4dGVuc2lvbl9nZW5lcmF0
b3JzX1tpXS0+R2VuZXJhdGVEZWZpbml0aW9uKHByaW50ZXIpOwotICB9Ci0KLSAgR2VuZXJhdGVT
dHJ1Y3RvcnMocHJpbnRlcik7Ci0gIHByaW50ZXItPlByaW50KCJcbiIpOwotCi0gIGlmIChkZXNj
cmlwdG9yXy0+b25lb2ZfZGVjbF9jb3VudCgpID4gMCkgewotICAgIEdlbmVyYXRlT25lb2ZDbGVh
cihwcmludGVyKTsKLSAgICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAgfQotCi0gIGlmIChIYXNH
ZW5lcmF0ZWRNZXRob2RzKGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgIEdl
bmVyYXRlQ2xlYXIocHJpbnRlcik7Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0KLSAgICBH
ZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtKHByaW50ZXIpOwotICAgIHByaW50ZXItPlByaW50
KCJcbiIpOwotCi0gICAgR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMocHJpbnRlcik7
Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0KLSAgICBpZiAoSGFzRmFzdEFycmF5U2VyaWFs
aXphdGlvbihkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICAgIEdlbmVyYXRl
U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheShwcmludGVyKTsKLSAgICAgIHByaW50ZXIt
PlByaW50KCJcbiIpOwotICAgIH0KLQotICAgIEdlbmVyYXRlQnl0ZVNpemUocHJpbnRlcik7Ci0g
ICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0KLSAgICBHZW5lcmF0ZU1lcmdlRnJvbShwcmludGVy
KTsKLSAgICBwcmludGVyLT5QcmludCgiXG4iKTsKLQotICAgIEdlbmVyYXRlQ29weUZyb20ocHJp
bnRlcik7Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0KLSAgICBHZW5lcmF0ZUlzSW5pdGlh
bGl6ZWQocHJpbnRlcik7Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gIH0KLQotICBHZW5l
cmF0ZVN3YXAocHJpbnRlcik7Ci0gIHByaW50ZXItPlByaW50KCJcbiIpOwotCi0gIGlmIChIYXNE
ZXNjcmlwdG9yTWV0aG9kcyhkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhICRjbGFz
c25hbWUkOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHtcbiIKLSAgICAgICIgIHByb3RvYnVmX0Fzc2ln
bkRlc2NyaXB0b3JzT25jZSgpO1xuIgotICAgICAgIiAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRh
ZGF0YSBtZXRhZGF0YTtcbiIKLSAgICAgICIgIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSAkY2xhc3Nu
YW1lJF9kZXNjcmlwdG9yXztcbiIKLSAgICAgICIgIG1ldGFkYXRhLnJlZmxlY3Rpb24gPSAkY2xh
c3NuYW1lJF9yZWZsZWN0aW9uXztcbiIKLSAgICAgICIgIHJldHVybiBtZXRhZGF0YTtcbiIKLSAg
ICAgICJ9XG4iCi0gICAgICAiXG4iLAotICAgICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwot
ICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIjo6c3RkOjpzdHJpbmcgJGNs
YXNzbmFtZSQ6OkdldFR5cGVOYW1lKCkgY29uc3Qge1xuIgotICAgICAgIiAgcmV0dXJuIFwiJHR5
cGVfbmFtZSRcIjtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiXG4iLAotICAgICAgImNsYXNzbmFt
ZSIsIGNsYXNzbmFtZV8sCi0gICAgICAidHlwZV9uYW1lIiwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFt
ZSgpKTsKLSAgfQotCi19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU9mZnNl
dHMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoInN0YXRpYyBjb25z
dCBpbnQgJGNsYXNzbmFtZSRfb2Zmc2V0c19bJGZpZWxkX2NvdW50JF0gPSB7XG4iLAotICAgICAg
ICAgICAgICAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXywgImZpZWxkX2NvdW50IiwKLSAgICAg
ICAgICAgICAgICAgU2ltcGxlSXRvYShzdGQ6Om1heCgxLCBkZXNjcmlwdG9yXy0+ZmllbGRfY291
bnQoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Ny
aXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCkpKSk7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewot
ICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+ZmllbGQoaSk7
Ci0gICAgaWYgKGZpZWxkLT5jb250YWluaW5nX29uZW9mKCkpIHsKLSAgICAgIHByaW50ZXItPlBy
aW50KAotICAgICAgICAgICJQUk9UTzJfR0VORVJBVEVEX0RFRkFVTFRfT05FT0ZfRklFTERfT0ZG
U0VUKCIKLSAgICAgICAgICAiJGNsYXNzbmFtZSRfZGVmYXVsdF9vbmVvZl9pbnN0YW5jZV8sICRu
YW1lJF8pLFxuIiwKLSAgICAgICAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXywKLSAgICAgICAg
ICAibmFtZSIsIEZpZWxkTmFtZShmaWVsZCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICAgICAiR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJ
RUxEX09GRlNFVCgkY2xhc3NuYW1lJCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIkbmFtZSRfKSxcbiIsCi0gICAgICAgICAgImNsYXNzbmFtZSIs
IGNsYXNzbmFtZV8sCi0gICAgICAgICAgIm5hbWUiLCBGaWVsZE5hbWUoZmllbGQpKTsKLSAgICB9
Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2Nv
dW50KCk7IGkrKykgewotICAgIGNvbnN0IE9uZW9mRGVzY3JpcHRvciogb25lb2YgPSBkZXNjcmlw
dG9yXy0+b25lb2ZfZGVjbChpKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJHT09HTEVf
UFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKCRjbGFzc25hbWUkLCAkbmFt
ZSRfKSxcbiIsCi0gICAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXywKLSAgICAgICJuYW1lIiwg
b25lb2YtPm5hbWUoKSk7Ci0gIH0KLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXIt
PlByaW50KCJ9O1xuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNo
YXJlZENvbnN0cnVjdG9yQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5Q
cmludCgKLSAgICAidm9pZCAkY2xhc3NuYW1lJDo6U2hhcmVkQ3RvcigpIHtcbiIsCi0gICAgImNs
YXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBpZiAoIUhh
c0ZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICIgIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IGZhbHNlO1xuIik7Ci0gIH0KLQot
ICBwcmludGVyLT5QcmludChTdHJDYXQoCi0gICAgICB1c2VzX3N0cmluZ18gPyAiOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmcoKTtcbiIgOiAiIiwKLSAgICAgICJf
Y2FjaGVkX3NpemVfID0gMDtcbiIpLmNfc3RyKCkpOwotCi0gIGlmIChQcmVzZXJ2ZVVua25vd25G
aWVsZHMoZGVzY3JpcHRvcl8pICYmCi0gICAgICAhVXNlVW5rbm93bkZpZWxkU2V0KGRlc2NyaXB0
b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAi
X3Vua25vd25fZmllbGRzXy5VbnNhZmVTZXREZWZhdWx0KFxuIgotICAgICAgICAiICAgICY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
XG4iKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2Nv
dW50KCk7IGkrKykgewotICAgIGlmICghZGVzY3JpcHRvcl8tPmZpZWxkKGkpLT5jb250YWluaW5n
X29uZW9mKCkpIHsKLSAgICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9yXy0+Zmll
bGQoaSkpCi0gICAgICAgICAgLkdlbmVyYXRlQ29uc3RydWN0b3JDb2RlKHByaW50ZXIpOwotICAg
IH0KLSAgfQotCi0gIGlmIChIYXNGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6
ZW9mKF9oYXNfYml0c18pKTtcbiIpOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNj
cmlwdG9yXy0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICAgImNsZWFyX2hhc18kb25lb2ZfbmFtZSQoKTtcbiIsCi0gICAgICAgICJvbmVvZl9u
YW1lIiwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPm5hbWUoKSk7Ci0gIH0KLQotICBwcmlu
dGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9XG5cbiIpOwotfQotCi12b2lkIE1l
c3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVTaGFyZWREZXN0cnVjdG9yQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICAidm9pZCAkY2xhc3NuYW1lJDo6
U2hhcmVkRHRvcigpIHtcbiIsCi0gICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotICBwcmlu
dGVyLT5JbmRlbnQoKTsKLSAgaWYgKFN1cHBvcnRzQXJlbmFzKGRlc2NyaXB0b3JfKSkgewotICAg
IC8vIERvIG5vdGhpbmcgd2hlbiB0aGUgbWVzc2FnZSBpcyBhbGxvY2F0ZWQgaW4gYW4gYXJlbmEu
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiaWYgKEdldEFyZW5hTm9WaXJ0dWFsKCkgIT0g
TlVMTCkge1xuIgotICAgICAgIiAgcmV0dXJuO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJcbiIp
OwotICB9Ci0KLSAgLy8gV3JpdGUgdGhlIGRlc2N0cnVjdG9yIGZvciBfdW5rbm93bl9maWVsZHNf
IGluIGxpdGUgcnVudGltZS4KLSAgaWYgKFByZXNlcnZlVW5rbm93bkZpZWxkcyhkZXNjcmlwdG9y
XykgJiYKLSAgICAgICFVc2VVbmtub3duRmllbGRTZXQoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0
aW9uc18pKSB7Ci0gICAgaWYgKFN1cHBvcnRzQXJlbmFzKGRlc2NyaXB0b3JfKSkgewotICAgICAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIl91bmtub3duX2ZpZWxkc18uRGVzdHJveShcbiIK
LSAgICAgICAgICAiICAgICY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSxcbiIKLSAgICAgICAgICAiICAgIEdldEFyZW5hTm9WaXJ0dWFs
KCkpO1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAg
ICJfdW5rbm93bl9maWVsZHNfLkRlc3Ryb3lOb0FyZW5hKFxuIgotICAgICAgICAgICIgICAgJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTtcbiIpOwotICAgIH0KLSAgfQotCi0gIC8vIFdyaXRlIHRoZSBkZXN0cnVjdG9ycyBmb3IgZWFj
aCBmaWVsZCBleGNlcHQgb25lb2YgbWVtYmVycy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNj
cmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKCFkZXNjcmlwdG9yXy0+Zmll
bGQoaSktPmNvbnRhaW5pbmdfb25lb2YoKSkgewotICAgICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0
KGRlc2NyaXB0b3JfLT5maWVsZChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgLkdlbmVyYXRl
RGVzdHJ1Y3RvckNvZGUocHJpbnRlcik7Ci0gICAgfQotICB9Ci0KLSAgLy8gR2VuZXJhdGUgY29k
ZSB0byBkZXN0cnVjdCBvbmVvZnMuIENsZWFyaW5nIHNob3VsZCBkbyB0aGUgd29yay4KLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsK
LSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImlmIChoYXNfJG9uZW9mX25hbWUkKCkpIHtc
biIKLSAgICAgICAgIiAgY2xlYXJfJG9uZW9mX25hbWUkKCk7XG4iCi0gICAgICAgICJ9XG4iLAot
ICAgICAgICAib25lb2ZfbmFtZSIsIGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5uYW1lKCkp
OwotICB9Ci0KLSAgUHJpbnRIYW5kbGluZ09wdGlvbmFsU3RhdGljSW5pdGlhbGl6ZXJzKAotICAg
ICAgZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18sIHByaW50ZXIsCi0gICAgICAvLyBXaXRo
IHN0YXRpYyBpbml0aWFsaXplcnMuCi0gICAgICAiaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5j
ZV8pIHtcbiIsCi0gICAgICAvLyBXaXRob3V0LgotICAgICAgImlmICh0aGlzICE9ICZkZWZhdWx0
X2luc3RhbmNlKCkpIHtcbiIpOwotCi0gIC8vIFdlIG5lZWQgdG8gZGVsZXRlIGFsbCBlbWJlZGRl
ZCBtZXNzYWdlcy4KLSAgLy8gVE9ETyhrZW50b24pOiAgSWYgd2UgbWFrZSB1bnNldCBtZXNzYWdl
cyBwb2ludCBhdCBkZWZhdWx0IGluc3RhbmNlcwotICAvLyAgIGluc3RlYWQgb2YgTlVMTCwgdGhl
biBpdCB3b3VsZCBtYWtlIHNlbnNlIHRvIG1vdmUgdGhpcyBjb2RlIGludG8KLSAgLy8gICBNZXNz
YWdlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlRGVzdHJ1Y3RvckNvZGUoKS4KLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVsZChpKTsKLQotICAgIGlm
ICghZmllbGQtPmlzX3JlcGVhdGVkKCkgJiYKLSAgICAgICAgZmllbGQtPmNwcF90eXBlKCkgPT0g
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICAgIC8vIFNraXAgb25lb2Yg
bWVtYmVycwotICAgICAgaWYgKCFmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICAgICAgIiAgZGVsZXRlICRuYW1lJF87XG4iLAotICAg
ICAgICAgICAgIm5hbWUiLCBGaWVsZE5hbWUoZmllbGQpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICIgIH1cbiIK
LSAgICAifVxuIgotICAgICJcbiIpOwotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVBcmVuYURlc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIEdl
bmVyYXRlIHRoZSBBcmVuYUR0b3IoKSBtZXRob2QuIFRyYWNrIHdoZXRoZXIgYW55IGZpZWxkcyBh
Y3R1YWxseSBwcm9kdWNlZAotICAvLyBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgY2FsbGVkLgotICBw
cmludGVyLT5QcmludCgKLSAgICAgICJ2b2lkICRjbGFzc25hbWUkOjpBcmVuYUR0b3Iodm9pZCog
b2JqZWN0KSB7XG4iLAotICAgICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotICBwcmludGVy
LT5JbmRlbnQoKTsKLQotICAvLyBUaGlzIGNvZGUgaXMgcGxhY2VkIGluc2lkZSBhIHN0YXRpYyBt
ZXRob2QsIHJhdGhlciB0aGFuIGFuIG9yZGluYXJ5IG9uZSwKLSAgLy8gc2luY2UgdGhhdCBzaW1w
bGlmaWVzIEFyZW5hJ3MgZGVzdHJ1Y3RvciBsaXN0IChvcmRpbmFyeSBmdW5jdGlvbiBwb2ludGVy
cwotICAvLyByYXRoZXIgdGhhbiBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlcnMpLiBfdGhpcyBpcyB0
aGUgb2JqZWN0IGJlaW5nCi0gIC8vIGRlc3RydWN0ZWQuCi0gIHByaW50ZXItPlByaW50KAotICAg
ICAgIiRjbGFzc25hbWUkKiBfdGhpcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8ICRjbGFzc25hbWUkKiA+
KG9iamVjdCk7XG4iCi0gICAgICAvLyBhdm9pZCBhbiAidW51c2VkIHZhcmlhYmxlIiB3YXJuaW5n
IGluIGNhc2Ugbm8gZmllbGRzIGhhdmUgZHRvciBjb2RlLgotICAgICAgIih2b2lkKV90aGlzO1xu
IiwKLSAgICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfKTsKLQotICBib29sIG5lZWRfcmVnaXN0
cmF0aW9uID0gZmFsc2U7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxk
X2NvdW50KCk7IGkrKykgewotICAgIGlmIChmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZGVzY3JpcHRv
cl8tPmZpZWxkKGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgIC5HZW5lcmF0ZUFyZW5hRGVz
dHJ1Y3RvckNvZGUocHJpbnRlcikpIHsKLSAgICAgIG5lZWRfcmVnaXN0cmF0aW9uID0gdHJ1ZTsK
LSAgICB9Ci0gIH0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAg
ICAgICJ9XG4iKTsKLQotICBpZiAobmVlZF9yZWdpc3RyYXRpb24pIHsKLSAgICBwcmludGVyLT5Q
cmludCgKLSAgICAgICAgImlubGluZSB2b2lkICRjbGFzc25hbWUkOjpSZWdpc3RlckFyZW5hRHRv
cig6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkge1xuIgotICAgICAgICAiICBpZiAo
YXJlbmEgIT0gTlVMTCkge1xuIgotICAgICAgICAiICAgIGFyZW5hLT5Pd25DdXN0b21EZXN0cnVj
dG9yKHRoaXMsICYkY2xhc3NuYW1lJDo6QXJlbmFEdG9yKTtcbiIKLSAgICAgICAgIiAgfVxuIgot
ICAgICAgICAifVxuIiwKLSAgICAgICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotICB9IGVs
c2UgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAidm9pZCAkY2xhc3NuYW1lJDo6UmVn
aXN0ZXJBcmVuYUR0b3IoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIHtcbiIKLSAg
ICAgICAgIn1cbiIsCi0gICAgICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfKTsKLSAgfQotfQot
Ci12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVTdHJ1Y3RvcnMoaW86OlByaW50ZXIq
IHByaW50ZXIpIHsKLSAgc3RyaW5nIHN1cGVyY2xhc3M7Ci0gIGlmICh1c2VfZGVwZW5kZW50X2Jh
c2VfKSB7Ci0gICAgc3VwZXJjbGFzcyA9Ci0gICAgICAgIERlcGVuZGVudEJhc2VDbGFzc1RlbXBs
YXRlTmFtZShkZXNjcmlwdG9yXykgKyAiPCIgKyBjbGFzc25hbWVfICsgIj4iOwotICB9IGVsc2Ug
ewotICAgIHN1cGVyY2xhc3MgPSBTdXBlckNsYXNzTmFtZShkZXNjcmlwdG9yXywgb3B0aW9uc18p
OwotICB9Ci0gIHN0cmluZyBpbml0aWFsaXplcl93aXRoX2FyZW5hID0gc3VwZXJjbGFzcyArICIo
KSI7Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+IDApIHsK
LSAgICBpbml0aWFsaXplcl93aXRoX2FyZW5hICs9ICIsXG4gIF9leHRlbnNpb25zXyhhcmVuYSki
OwotICB9Ci0KLSAgaWYgKFVzZVVua25vd25GaWVsZFNldChkZXNjcmlwdG9yXy0+ZmlsZSgpLCBv
cHRpb25zXykpIHsKLSAgICBpbml0aWFsaXplcl93aXRoX2FyZW5hICs9ICIsXG4gIF9pbnRlcm5h
bF9tZXRhZGF0YV8oYXJlbmEpIjsKLSAgfSBlbHNlIHsKLSAgICBpbml0aWFsaXplcl93aXRoX2Fy
ZW5hICs9ICIsXG4gIF9hcmVuYV9wdHJfKGFyZW5hKSI7Ci0gIH0KLQotICAvLyBJbml0aWFsaXpl
IG1lbWJlciB2YXJpYWJsZXMgd2l0aCBhcmVuYSBjb25zdHJ1Y3Rvci4KLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgYm9vbCBoYXNf
YXJlbmFfY29uc3RydWN0b3IgPSBkZXNjcmlwdG9yXy0+ZmllbGQoaSktPmlzX3JlcGVhdGVkKCk7
Ci0gICAgaWYgKGhhc19hcmVuYV9jb25zdHJ1Y3RvcikgewotICAgICAgaW5pdGlhbGl6ZXJfd2l0
aF9hcmVuYSArPSBzdHJpbmcoIixcbiAgIikgKwotICAgICAgICAgIEZpZWxkTmFtZShkZXNjcmlw
dG9yXy0+ZmllbGQoaSkpICsgc3RyaW5nKCJfKGFyZW5hKSIpOwotICAgIH0KLSAgfQotCi0gIGlm
IChJc0FueU1lc3NhZ2UoZGVzY3JpcHRvcl8pKSB7Ci0gICAgaW5pdGlhbGl6ZXJfd2l0aF9hcmVu
YSArPSAiLFxuICBfYW55X21ldGFkYXRhXygmdHlwZV91cmwsICZ2YWx1ZV8pIjsKLSAgfQotCi0g
IHN0cmluZyBpbml0aWFsaXplcl9udWxsOwotICBpbml0aWFsaXplcl9udWxsID0gKFVzZVVua25v
d25GaWVsZFNldChkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykgPwotICAgICIsIF9pbnRl
cm5hbF9tZXRhZGF0YV8oTlVMTCkiIDogIiwgX2FyZW5hX3B0cl8oTlVMTCkiKTsKLSAgaWYgKElz
QW55TWVzc2FnZShkZXNjcmlwdG9yXykpIHsKLSAgICBpbml0aWFsaXplcl9udWxsICs9ICIsIF9h
bnlfbWV0YWRhdGFfKCZ0eXBlX3VybF8sICZ2YWx1ZV8pIjsKLSAgfQotCi0gIHByaW50ZXItPlBy
aW50KAotICAgICAgIiRjbGFzc25hbWUkOjokY2xhc3NuYW1lJCgpXG4iCi0gICAgICAiICA6ICRz
dXBlcmNsYXNzJCgpJGluaXRpYWxpemVyJCB7XG4iCi0gICAgICAiICBTaGFyZWRDdG9yKCk7XG4i
Ci0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6JGZ1bGxf
bmFtZSQpXG4iCi0gICAgICAifVxuIiwKLSAgICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfLAot
ICAgICAgInN1cGVyY2xhc3MiLCBzdXBlcmNsYXNzLAotICAgICAgImZ1bGxfbmFtZSIsIGRlc2Ny
aXB0b3JfLT5mdWxsX25hbWUoKSwKLSAgICAgICJpbml0aWFsaXplciIsIGluaXRpYWxpemVyX251
bGwpOwotCi0gIGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICAgIlxuIgotICAgICAgICAiJGNsYXNzbmFtZSQ6OiRjbGFzc25hbWUk
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKVxuIgotICAgICAgICAiICA6ICRpbml0
aWFsaXplciQge1xuIgotICAgICAgICAiICBTaGFyZWRDdG9yKCk7XG4iCi0gICAgICAgICIgIFJl
Z2lzdGVyQXJlbmFEdG9yKGFyZW5hKTtcbiIKLSAgICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGFyZW5hX2NvbnN0cnVjdG9yOiRmdWxsX25hbWUkKVxuIgotICAgICAgICAifVxu
IiwKLSAgICAgICAgImluaXRpYWxpemVyIiwgaW5pdGlhbGl6ZXJfd2l0aF9hcmVuYSwKLSAgICAg
ICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8sCi0gICAgICAgICJzdXBlcmNsYXNzIiwgc3VwZXJj
bGFzcywKLSAgICAgICAgImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3JfLT5mdWxsX25hbWUoKSk7Ci0g
IH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAiXG4iCi0gICAgInZvaWQgJGNsYXNzbmFtZSQ6
OkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpIHtcbiIsCi0gICAgImNsYXNzbmFtZSIsIGNsYXNzbmFt
ZV8pOwotCi0gIGlmICghSGFzRmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewot
ICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiAgX2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gdHJ1
ZTtcbiIpOwotICB9Ci0KLSAgLy8gVGhlIGRlZmF1bHQgaW5zdGFuY2UgbmVlZHMgYWxsIG9mIGl0
cyBlbWJlZGRlZCBtZXNzYWdlIHBvaW50ZXJzCi0gIC8vIGNyb3NzLWxpbmtlZCB0byBvdGhlciBk
ZWZhdWx0IGluc3RhbmNlcy4gIFdlIGNhbid0IGRvIHRoaXMgaW5pdGlhbGl6YXRpb24KLSAgLy8g
aW4gdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2Ugc29tZSBvdGhlciBkZWZhdWx0IGluc3RhbmNlcyBt
YXkgbm90IGhhdmUgYmVlbgotICAvLyBjb25zdHJ1Y3RlZCB5ZXQgYXQgdGhhdCB0aW1lLgotICAv
LyBUT0RPKGtlbnRvbik6ICBNYXliZSBhbGwgbWVzc2FnZSBmaWVsZHMgKGV2ZW4gZm9yIG5vbi1k
ZWZhdWx0IG1lc3NhZ2VzKQotICAvLyAgIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byBwb2ludCBh
dCBkZWZhdWx0IGluc3RhbmNlcyByYXRoZXIgdGhhbiBOVUxMPwotICBmb3IgKGludCBpID0gMDsg
aSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotCi0gICAgaWYgKCFmaWVs
ZC0+aXNfcmVwZWF0ZWQoKSAmJgotICAgICAgICBmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSAmJgotICAgICAgICAoZmllbGQtPmNvbnRhaW5pbmdf
b25lb2YoKSA9PSBOVUxMIHx8Ci0gICAgICAgICBIYXNEZXNjcmlwdG9yTWV0aG9kcyhkZXNjcmlw
dG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpKSB7Ci0gICAgICBzdHJpbmcgbmFtZTsKLSAgICAgIGlm
IChmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgICAgIG5hbWUgPSBjbGFzc25hbWVf
ICsgIl9kZWZhdWx0X29uZW9mX2luc3RhbmNlXy0+IjsKLSAgICAgIH0KLSAgICAgIG5hbWUgKz0g
RmllbGROYW1lKGZpZWxkKTsKLSAgICAgIFByaW50SGFuZGxpbmdPcHRpb25hbFN0YXRpY0luaXRp
YWxpemVycygKLSAgICAgICAgICBkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXywgcHJpbnRl
ciwKLSAgICAgICAgICAvLyBXaXRoIHN0YXRpYyBpbml0aWFsaXplcnMuCi0gICAgICAgICAgIiAg
JG5hbWUkXyA9IGNvbnN0X2Nhc3Q8ICR0eXBlJCo+KCYkdHlwZSQ6OmRlZmF1bHRfaW5zdGFuY2Uo
KSk7XG4iLAotICAgICAgICAgIC8vIFdpdGhvdXQuCi0gICAgICAgICAgIiAgJG5hbWUkXyA9IGNv
bnN0X2Nhc3Q8ICR0eXBlJCo+KFxuIgotICAgICAgICAgICIgICAgICAkdHlwZSQ6OmludGVybmFs
X2RlZmF1bHRfaW5zdGFuY2UoKSk7XG4iLAotICAgICAgICAgIC8vIFZhcnMuCi0gICAgICAgICAg
Im5hbWUiLCBuYW1lLCAidHlwZSIsIEZpZWxkTWVzc2FnZVR5cGVOYW1lKGZpZWxkKSk7Ci0gICAg
fSBlbHNlIGlmIChmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpICYmCi0gICAgICAgICAgICAgICBI
YXNEZXNjcmlwdG9yTWV0aG9kcyhkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAg
ICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpCi0gICAgICAg
ICAgLkdlbmVyYXRlQ29uc3RydWN0b3JDb2RlKHByaW50ZXIpOwotICAgIH0KLSAgfQotICBwcmlu
dGVyLT5QcmludCgKLSAgICAifVxuIgotICAgICJcbiIpOwotCi0gIC8vIEdlbmVyYXRlIHRoZSBj
b3B5IGNvbnN0cnVjdG9yLgotICBwcmludGVyLT5QcmludCgKLSAgICAiJGNsYXNzbmFtZSQ6OiRj
bGFzc25hbWUkKGNvbnN0ICRjbGFzc25hbWUkJiBmcm9tKVxuIgotICAgICIgIDogJHN1cGVyY2xh
c3MkKCkiLAotICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfLAotICAgICJzdXBlcmNsYXNzIiwg
c3VwZXJjbGFzcywKLSAgICAiZnVsbF9uYW1lIiwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFtZSgpKTsK
LSAgaWYgKFVzZVVua25vd25GaWVsZFNldChkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykp
IHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIixcbiAgICBfaW50ZXJuYWxfbWV0YWRh
dGFfKE5VTEwpIik7Ci0gIH0gZWxzZSBpZiAoIVVzZVVua25vd25GaWVsZFNldChkZXNjcmlwdG9y
Xy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICBwcmludGVyLT5QcmludCgiLFxuICAgIF9hcmVu
YV9wdHJfKE5VTEwpIik7Ci0gIH0KLSAgaWYgKElzQW55TWVzc2FnZShkZXNjcmlwdG9yXykpIHsK
LSAgICBwcmludGVyLT5QcmludCgiLFxuICAgIF9hbnlfbWV0YWRhdGFfKCZ0eXBlX3VybF8sICZ2
YWx1ZV8pIik7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQoIiB7XG4iKTsKLSAgcHJpbnRlci0+UHJp
bnQoCi0gICAgIiAgU2hhcmVkQ3RvcigpO1xuIgotICAgICIgIE1lcmdlRnJvbShmcm9tKTtcbiIK
LSAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9jb25zdHJ1Y3RvcjokZnVs
bF9uYW1lJClcbiIKLSAgICAifVxuIgotICAgICJcbiIsCi0gICAgImNsYXNzbmFtZSIsIGNsYXNz
bmFtZV8sCi0gICAgInN1cGVyY2xhc3MiLCBzdXBlcmNsYXNzLAotICAgICJmdWxsX25hbWUiLCBk
ZXNjcmlwdG9yXy0+ZnVsbF9uYW1lKCkpOwotCi0gIC8vIEdlbmVyYXRlIHRoZSBzaGFyZWQgY29u
c3RydWN0b3IgY29kZS4KLSAgR2VuZXJhdGVTaGFyZWRDb25zdHJ1Y3RvckNvZGUocHJpbnRlcik7
Ci0KLSAgLy8gR2VuZXJhdGUgdGhlIGRlc3RydWN0b3IuCi0gIHByaW50ZXItPlByaW50KAotICAg
ICIkY2xhc3NuYW1lJDo6fiRjbGFzc25hbWUkKCkge1xuIgotICAgICIgIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChkZXN0cnVjdG9yOiRmdWxsX25hbWUkKVxuIgotICAgICIgIFNoYXJlZER0
b3IoKTtcbiIKLSAgICAifVxuIgotICAgICJcbiIsCi0gICAgImNsYXNzbmFtZSIsIGNsYXNzbmFt
ZV8sCi0gICAgImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3JfLT5mdWxsX25hbWUoKSk7Ci0KLSAgLy8g
R2VuZXJhdGUgdGhlIHNoYXJlZCBkZXN0cnVjdG9yIGNvZGUuCi0gIEdlbmVyYXRlU2hhcmVkRGVz
dHJ1Y3RvckNvZGUocHJpbnRlcik7Ci0KLSAgLy8gR2VuZXJhdGUgdGhlIGFyZW5hLXNwZWNpZmlj
IGRlc3RydWN0b3IgY29kZS4KLSAgaWYgKFN1cHBvcnRzQXJlbmFzKGRlc2NyaXB0b3JfKSkgewot
ICAgIEdlbmVyYXRlQXJlbmFEZXN0cnVjdG9yQ29kZShwcmludGVyKTsKLSAgfQotCi0gIC8vIEdl
bmVyYXRlIFNldENhY2hlZFNpemUuCi0gIHByaW50ZXItPlByaW50KAotICAgICJ2b2lkICRjbGFz
c25hbWUkOjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7XG4iCi0gICAgIiAgR09PR0xF
X1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTtcbiIKLSAgICAiICBfY2FjaGVkX3NpemVf
ID0gc2l6ZTtcbiIKLSAgICAiICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTtc
biIKLSAgICAifVxuIiwKLSAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXyk7Ci0KLSAgLy8gT25s
eSBnZW5lcmF0ZSB0aGlzIG1lbWJlciBpZiBpdCdzIG5vdCBkaXNhYmxlZC4KLSAgaWYgKEhhc0Rl
c2NyaXB0b3JNZXRob2RzKGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSAmJgotICAgICAg
IWRlc2NyaXB0b3JfLT5vcHRpb25zKCkubm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3Nvcigp
KSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpEZXNjcmlwdG9yKiAkY2xhc3NuYW1lJDo6ZGVzY3JpcHRvcigpIHtcbiIKLSAgICAgICIgIHBy
b3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpO1xuIgotICAgICAgIiAgcmV0dXJuICRjbGFz
c25hbWUkX2Rlc2NyaXB0b3JfO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJcbiIsCi0gICAgICAi
Y2xhc3NuYW1lIiwgY2xhc3NuYW1lXywKLSAgICAgICJhZGRkZXNjcmlwdG9yc25hbWUiLAotICAg
ICAgR2xvYmFsQWRkRGVzY3JpcHRvcnNOYW1lKGRlc2NyaXB0b3JfLT5maWxlKCktPm5hbWUoKSkp
OwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgImNvbnN0ICRjbGFzc25hbWUkJiAkY2xh
c3NuYW1lJDo6ZGVmYXVsdF9pbnN0YW5jZSgpIHtcbiIsCi0gICAgImNsYXNzbmFtZSIsIGNsYXNz
bmFtZV8pOwotCi0gIFByaW50SGFuZGxpbmdPcHRpb25hbFN0YXRpY0luaXRpYWxpemVycygKLSAg
ICAgIGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfLCBwcmludGVyLAotICAgICAgLy8gV2l0
aCBzdGF0aWMgaW5pdGlhbGl6ZXJzLgotICAgICAgIiAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09
IE5VTEwpICRhZGRkZXNjcmlwdG9yc25hbWUkKCk7XG4iLAotICAgICAgLy8gV2l0aG91dC4KLSAg
ICAgICIgICRhZGRkZXNjcmlwdG9yc25hbWUkKCk7XG4iLAotICAgICAgLy8gVmFycy4KLSAgICAg
ICJhZGRkZXNjcmlwdG9yc25hbWUiLAotICAgICAgR2xvYmFsQWRkRGVzY3JpcHRvcnNOYW1lKGRl
c2NyaXB0b3JfLT5maWxlKCktPm5hbWUoKSkpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICIg
IHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iCi0gICAg
IiRjbGFzc25hbWUkKiAkY2xhc3NuYW1lJDo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMO1xuIgot
ICAgICJcbiIsCi0gICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotCi0gIGlmIChTdXBwb3J0
c0FyZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICIkY2xh
c3NuYW1lJCogJGNsYXNzbmFtZSQ6Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVu
YSkgY29uc3Qge1xuIgotICAgICAgIiAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmE6
OkNyZWF0ZU1lc3NhZ2U8JGNsYXNzbmFtZSQ+KGFyZW5hKTtcbiIKLSAgICAgICJ9XG4iLAotICAg
ICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlBy
aW50KAotICAgICAgIiRjbGFzc25hbWUkKiAkY2xhc3NuYW1lJDo6TmV3KDo6Z29vZ2xlOjpwcm90
b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7XG4iCi0gICAgICAiICAkY2xhc3NuYW1lJCogbiA9
IG5ldyAkY2xhc3NuYW1lJDtcbiIKLSAgICAgICIgIGlmIChhcmVuYSAhPSBOVUxMKSB7XG4iCi0g
ICAgICAiICAgIGFyZW5hLT5Pd24obik7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICByZXR1
cm4gbjtcbiIKLSAgICAgICJ9XG4iLAotICAgICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwot
ICB9Ci0KLX0KLQotLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyBzZXQgaW4gbiwgYSBub24t
bmVnYXRpdmUgaW50ZWdlci4KLXN0YXRpYyBpbnQgcG9wY250KHVpbnQzMiBuKSB7Ci0gIGludCBy
ZXN1bHQgPSAwOwotICB3aGlsZSAobiAhPSAwKSB7Ci0gICAgcmVzdWx0ICs9IChuICYgMSk7Ci0g
ICAgbiA9IG4gLyAyOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgTWVzc2FnZUdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZUNsZWFyKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50
ZXItPlByaW50KAotICAgICAgInZvaWQgJGNsYXNzbmFtZSQ6OkNsZWFyKCkge1xuIgotICAgICAg
Ii8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2NsZWFyX3N0YXJ0OiRmdWxsX25h
bWUkKVxuIiwKLSAgICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfLCAiZnVsbF9uYW1lIiwgZGVz
Y3JpcHRvcl8tPmZ1bGxfbmFtZSgpKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgLy8gU3Rl
cCAxOiBFeHRlbnNpb25zCi0gIGlmIChkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50
KCkgPiAwKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoIl9leHRlbnNpb25zXy5DbGVhcigpO1xuIik7
Ci0gIH0KLQotICAvLyBTdGVwIDI6IEV2ZXJ5dGhpbmcgYnV0IGV4dGVuc2lvbnMsIHJlcGVhdGVk
cywgdW5pb25zLgotICAvLyBUaGVzZSBhcmUgaGFuZGxlZCBpbiBjaHVua3Mgb2YgOC4gIFRoZSBm
aXJzdCBjaHVuayBpcwotICAvLyB0aGUgbm9uLWV4dGVuc2lvbnMtbm9uLXJlcGVhdGVkcy1ub24t
dW5pb25zIGluCi0gIC8vICBkZXNjcmlwdG9yXy0+ZmllbGQoMCksIGRlc2NyaXB0b3JfLT5maWVs
ZCgxKSwgLi4uIGRlc2NyaXB0b3JfLT5maWVsZCg3KSwKLSAgLy8gYW5kIHRoZSBzZWNvbmQgY2h1
bmsgaXMgdGhlIHNhbWUgZm9yCi0gIC8vICBkZXNjcmlwdG9yXy0+ZmllbGQoOCksIGRlc2NyaXB0
b3JfLT5maWVsZCg5KSwgLi4uIGRlc2NyaXB0b3JfLT5maWVsZCgxNSksCi0gIC8vIGV0Yy4KLSAg
c2V0PGludD4gc3RlcDJfaW5kaWNlczsKLSAgaGFzaF9tYXA8c3RyaW5nLCBpbnQ+IGZpZWxkbmFt
ZV90b19jaHVuazsKLSAgaGFzaF9tYXA8aW50LCBzdHJpbmc+IG1lbXNldHNfZm9yX2NodW5rOwot
ICBoYXNoX21hcDxpbnQsIGludD4gbWVtc2V0X2ZpZWxkX2NvdW50X2Zvcl9jaHVuazsKLSAgaGFz
aF9zZXQ8c3RyaW5nPiBoYW5kbGVkOyAgLy8gZmllbGRzIHRoYXQgYXBwZWFyIGFueXdoZXJlIGlu
IG1lbXNldHNfZm9yX2NodW5rCi0gIGhhc2hfbWFwPGludCwgdWludDMyPiBmaWVsZHNfbWFza19m
b3JfY2h1bms7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50
KCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9y
Xy0+ZmllbGQoaSk7Ci0gICAgaWYgKCFmaWVsZC0+aXNfcmVwZWF0ZWQoKSAmJiAhZmllbGQtPmNv
bnRhaW5pbmdfb25lb2YoKSkgewotICAgICAgc3RlcDJfaW5kaWNlcy5pbnNlcnQoaSk7Ci0gICAg
ICBpbnQgY2h1bmsgPSBpIC8gODsKLSAgICAgIGZpZWxkbmFtZV90b19jaHVua1tGaWVsZE5hbWUo
ZmllbGQpXSA9IGNodW5rOwotICAgICAgZmllbGRzX21hc2tfZm9yX2NodW5rW2NodW5rXSB8PSBz
dGF0aWNfY2FzdDx1aW50MzI+KDEpIDw8IChpICUgMzIpOwotICAgIH0KLSAgfQotCi0gIC8vIFN0
ZXAgMmE6IEdyZWVkaWx5IHNlZWsgcnVucyBvZiBmaWVsZHMgdGhhdCBjYW4gYmUgY2xlYXJlZCBi
eSBtZW1zZXQtdG8tMC4KLSAgLy8gVGhlIGdlbmVyYXRlZCBjb2RlIHVzZXMgdHdvIG1hY3JvcyB0
byBoZWxwIGl0IGNsZWFyIHJ1bnMgb2YgZmllbGRzOgotICAvLyBaUl9IRUxQRVJfKGYxKSAtIFpS
X0hFTFBFUl8oZjApIGNvbXB1dGVzIHRoZSBkaWZmZXJlbmNlLCBpbiBieXRlcywgb2YgdGhlCi0g
IC8vIHBvc2l0aW9ucyBvZiB0d28gZmllbGRzIGluIHRoZSBNZXNzYWdlLgotICAvLyBaUl8gemVy
b2VzIGEgbm9uLWVtcHR5IHJhbmdlIG9mIGZpZWxkcyB2aWEgbWVtc2V0LgotICBjb25zdCBjaGFy
KiBtYWNyb3MgPQotICAgICAgIiNpZiBkZWZpbmVkKF9fY2xhbmdfXylcbiIKLSAgICAgICIjZGVm
aW5lIFpSX0hFTFBFUl8oZikgXFxcbiIKLSAgICAgICIgIF9QcmFnbWEoXCJjbGFuZyBkaWFnbm9z
dGljIHB1c2hcIikgXFxcbiIKLSAgICAgICIgIF9QcmFnbWEoXCJjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgXFxcIi1XaW52YWxpZC1vZmZzZXRvZlxcXCJcIikgXFxcbiIKLSAgICAgICIgIF9fYnVp
bHRpbl9vZmZzZXRvZigkY2xhc3NuYW1lJCwgZikgXFxcbiIKLSAgICAgICIgIF9QcmFnbWEoXCJj
bGFuZyBkaWFnbm9zdGljIHBvcFwiKVxuIgotICAgICAgIiNlbHNlXG4iCi0gICAgICAiI2RlZmlu
ZSBaUl9IRUxQRVJfKGYpIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KFxcXG4iCi0gICAgICAiICAm
cmVpbnRlcnByZXRfY2FzdDwkY2xhc3NuYW1lJCo+KDE2KS0+ZilcbiIKLSAgICAgICIjZW5kaWZc
blxuIgotICAgICAgIiNkZWZpbmUgWlJfKGZpcnN0LCBsYXN0KSBkbyB7XFxcbiIKLSAgICAgICIg
IDo6bWVtc2V0KCZmaXJzdCwgMCxcXFxuIgotICAgICAgIiAgICAgICAgICAgWlJfSEVMUEVSXyhs
YXN0KSAtIFpSX0hFTFBFUl8oZmlyc3QpICsgc2l6ZW9mKGxhc3QpKTtcXFxuIgotICAgICAgIn0g
d2hpbGUgKDApXG5cbiI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcnVuc19vZl9maWVsZHNfLnNp
emUoKTsgaSsrKSB7Ci0gICAgY29uc3QgdmVjdG9yPHN0cmluZz4mIHJ1biA9IHJ1bnNfb2ZfZmll
bGRzX1tpXTsKLSAgICBpZiAocnVuLnNpemUoKSA8IDIpIGNvbnRpbnVlOwotICAgIGNvbnN0IHN0
cmluZyYgZmlyc3RfZmllbGRfbmFtZSA9IHJ1blswXTsKLSAgICBjb25zdCBzdHJpbmcmIGxhc3Rf
ZmllbGRfbmFtZSA9IHJ1bi5iYWNrKCk7Ci0gICAgaW50IGNodW5rID0gZmllbGRuYW1lX3RvX2No
dW5rW3J1blswXV07Ci0gICAgbWVtc2V0c19mb3JfY2h1bmtbY2h1bmtdLmFwcGVuZCgKLSAgICAg
ICJaUl8oIiArIGZpcnN0X2ZpZWxkX25hbWUgKyAiXywgIiArIGxhc3RfZmllbGRfbmFtZSArICJf
KTtcbiIpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgcnVuLnNpemUoKTsgaisrKSB7Ci0gICAg
ICBHT09HTEVfRENIRUNLX0VRKGNodW5rLCBmaWVsZG5hbWVfdG9fY2h1bmtbcnVuW2pdXSk7Ci0g
ICAgICBoYW5kbGVkLmluc2VydChydW5bal0pOwotICAgIH0KLSAgICBtZW1zZXRfZmllbGRfY291
bnRfZm9yX2NodW5rW2NodW5rXSArPSBydW4uc2l6ZSgpOwotICB9Ci0gIGNvbnN0IGJvb2wgbWFj
cm9zX2FyZV9uZWVkZWQgPSBoYW5kbGVkLnNpemUoKSA+IDA7Ci0gIGlmIChtYWNyb3NfYXJlX25l
ZWRlZCkgewotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludChtYWNy
b3MsCi0gICAgICAgICAgICAgICAgICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotICAgIHBy
aW50ZXItPkluZGVudCgpOwotICB9Ci0gIC8vIFN0ZXAgMmI6IEZpbmlzaCBzdGVwIDIsIGlnbm9y
aW5nIGZpZWxkcyBoYW5kbGVkIGluIHN0ZXAgMmEuCi0gIGludCBsYXN0X2luZGV4ID0gLTE7Ci0g
IGJvb2wgY2h1bmtfYmxvY2tfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKHN0ZXAyX2lu
ZGljZXMuY291bnQoaSkgPT0gMCkgY29udGludWU7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVsZChpKTsKLSAgICBjb25zdCBzdHJpbmcgZmllbGRu
YW1lID0gRmllbGROYW1lKGZpZWxkKTsKLSAgICBpZiAoaSAvIDggIT0gbGFzdF9pbmRleCAvIDgg
fHwgbGFzdF9pbmRleCA8IDApIHsKLSAgICAgIC8vIEVuZCBwcmV2aW91cyBjaHVuaywgaWYgdGhl
cmUgd2FzIG9uZS4KLSAgICAgIGlmIChjaHVua19ibG9ja19pbl9wcm9ncmVzcykgewotICAgICAg
ICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgICAgIHByaW50ZXItPlByaW50KCJ9XG4iKTsKLSAg
ICAgICAgY2h1bmtfYmxvY2tfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIC8v
IFN0YXJ0IGNodW5rLgotICAgICAgY29uc3Qgc3RyaW5nJiBtZW1zZXRzID0gbWVtc2V0c19mb3Jf
Y2h1bmtbaSAvIDhdOwotICAgICAgdWludDMyIG1hc2sgPSBmaWVsZHNfbWFza19mb3JfY2h1bmtb
aSAvIDhdOwotICAgICAgaW50IGNvdW50ID0gcG9wY250KG1hc2spOwotICAgICAgR09PR0xFX0RD
SEVDS19HRShjb3VudCwgMSk7Ci0gICAgICBpZiAoY291bnQgPT0gMSB8fAotICAgICAgICAgIChj
b3VudCA8PSA0ICYmIGNvdW50ID09IG1lbXNldF9maWVsZF9jb3VudF9mb3JfY2h1bmtbaSAvIDhd
KSkgewotICAgICAgICAvLyBObyAiaWYiIGhlcmUgYmVjYXVzZSB0aGUgY2h1bmsgaXMgdHJpdmlh
bC4KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChIYXNGaWVsZFByZXNlbmNlKGRlc2NyaXB0
b3JfLT5maWxlKCkpKSB7Ci0gICAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgICAi
aWYgKF9oYXNfYml0c19bJGluZGV4JCAvIDMyXSAmICRtYXNrJHUpIHtcbiIsCi0gICAgICAgICAg
ICAiaW5kZXgiLCBTaW1wbGVJdG9hKGkgLyA4ICogOCksCi0gICAgICAgICAgICAibWFzayIsIFNp
bXBsZUl0b2EobWFzaykpOwotICAgICAgICAgIHByaW50ZXItPkluZGVudCgpOwotICAgICAgICAg
IGNodW5rX2Jsb2NrX2luX3Byb2dyZXNzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAg
ICAgcHJpbnRlci0+UHJpbnQobWVtc2V0cy5jX3N0cigpKTsKLSAgICB9Ci0gICAgbGFzdF9pbmRl
eCA9IGk7Ci0gICAgaWYgKGhhbmRsZWQuY291bnQoZmllbGRuYW1lKSA+IDApIGNvbnRpbnVlOwot
Ci0gICAgLy8gSXQncyBmYXN0ZXIgdG8ganVzdCBvdmVyd3JpdGUgcHJpbWl0aXZlIHR5cGVzLCBi
dXQgd2Ugc2hvdWxkCi0gICAgLy8gb25seSBjbGVhciBzdHJpbmdzIGFuZCBtZXNzYWdlcyBpZiB0
aGV5IHdlcmUgc2V0LgotICAgIC8vIFRPRE8oa2VudG9uKTogIExldCB0aGUgQ3BwRmllbGRHZW5l
cmF0b3IgZGVjaWRlIHRoaXMgc29tZWhvdy4KLSAgICBib29sIHNob3VsZF9jaGVja19iaXQgPQot
ICAgICAgZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NB
R0UgfHwKLSAgICAgIGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9TVFJJTkc7Ci0KLSAgICBib29sIGhhdmVfZW5jbG9zaW5nX2lmID0gZmFsc2U7Ci0gICAgaWYg
KHNob3VsZF9jaGVja19iaXQgJiYKLSAgICAgICAgLy8gSWYgbm8gZmllbGQgcHJlc2VuY2UsIHRo
ZW4gYWx3YXlzIGNsZWFyIHN0cmluZ3MvbWVzc2FnZXMgYXMgd2VsbC4KLSAgICAgICAgSGFzRmll
bGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQo
ImlmIChoYXNfJG5hbWUkKCkpIHtcbiIsICJuYW1lIiwgZmllbGRuYW1lKTsKLSAgICAgIHByaW50
ZXItPkluZGVudCgpOwotICAgICAgaGF2ZV9lbmNsb3NpbmdfaWYgPSB0cnVlOwotICAgIH0KLQot
ICAgIGlmICh1c2VfZGVwZW5kZW50X2Jhc2VfICYmIElzRmllbGREZXBlbmRlbnQoZmllbGQpKSB7
Ci0gICAgICBwcmludGVyLT5QcmludCgiY2xlYXJfJG5hbWUkKCk7XG4iLCAibmFtZSIsIGZpZWxk
bmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChmaWVsZCku
R2VuZXJhdGVDbGVhcmluZ0NvZGUocHJpbnRlcik7Ci0gICAgfQotCi0gICAgaWYgKGhhdmVfZW5j
bG9zaW5nX2lmKSB7Ci0gICAgICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgICBwcmludGVyLT5Q
cmludCgifVxuIik7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGNodW5rX2Jsb2NrX2luX3Byb2dyZXNz
KSB7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KCJ9XG4iKTsK
LSAgfQotICBpZiAobWFjcm9zX2FyZV9uZWVkZWQpIHsKLSAgICBwcmludGVyLT5PdXRkZW50KCk7
Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuI3VuZGVmIFpSX0hFTFBFUl9cbiN1bmRlZiBaUl9cblxu
Iik7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gIH0KLQotICAvLyBTdGVwIDM6IFJlcGVhdGVk
IGZpZWxkcyBkb24ndCB1c2UgX2hhc19iaXRzXzsgZW1pdCBjb2RlIHRvIGNsZWFyIHRoZW0gaGVy
ZS4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsr
KSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVs
ZChpKTsKLQotICAgIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgICAgaWYgKHVzZV9k
ZXBlbmRlbnRfYmFzZV8gJiYgSXNGaWVsZERlcGVuZGVudChmaWVsZCkpIHsKLSAgICAgICAgcHJp
bnRlci0+UHJpbnQoImNsZWFyXyRuYW1lJCgpO1xuIiwgIm5hbWUiLCBGaWVsZE5hbWUoZmllbGQp
KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChmaWVsZCku
R2VuZXJhdGVDbGVhcmluZ0NvZGUocHJpbnRlcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
Ly8gU3RlcCA0OiBVbmlvbnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm9u
ZW9mX2RlY2xfY291bnQoKTsgaSsrKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJj
bGVhcl8kb25lb2ZfbmFtZSQoKTtcbiIsCi0gICAgICAgICJvbmVvZl9uYW1lIiwgZGVzY3JpcHRv
cl8tPm9uZW9mX2RlY2woaSktPm5hbWUoKSk7Ci0gIH0KLQotICBpZiAoSGFzRmllbGRQcmVzZW5j
ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIC8vIFN0ZXAgNTogRXZlcnl0aGluZyBlbHNl
LgotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIjo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNp
emVvZihfaGFzX2JpdHNfKSk7XG4iKTsKLSAgfQotCi0gIGlmIChQcmVzZXJ2ZVVua25vd25GaWVs
ZHMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgaWYgKFVzZVVua25vd25GaWVsZFNldChkZXNjcmlwdG9y
Xy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAi
aWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7XG4iCi0gICAg
ICAgICIgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+Q2xlYXIoKTtcbiIKLSAgICAgICAgIn1c
biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8p
KSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICJfdW5rbm93bl9maWVsZHNf
LkNsZWFyVG9FbXB0eShcbiIKLSAgICAgICAgICAiICAgICY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSxcbiIKLSAgICAgICAgICAiICAg
IEdldEFyZW5hTm9WaXJ0dWFsKCkpO1xuIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmlu
dGVyLT5QcmludCgKLSAgICAgICAgICAiX3Vua25vd25fZmllbGRzXy5DbGVhclRvRW1wdHlOb0Fy
ZW5hKFxuIgotICAgICAgICAgICIgICAgJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTtcbiIpOwotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotfQotCi12
b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVPbmVvZkNsZWFyKGlvOjpQcmludGVyKiBw
cmludGVyKSB7Ci0gIC8vIEdlbmVyYXRlZCBmdW5jdGlvbiBjbGVhcnMgdGhlIGFjdGl2ZSBmaWVs
ZCBhbmQgdW5pb24gY2FzZSAoZS5nLiBmb29fY2FzZV8pLgotICBmb3IgKGludCBpID0gMDsgaSA8
IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewotICAgIG1hcDxzdHJpbmcs
IHN0cmluZz4gb25lb2ZfdmFyczsKLSAgICBvbmVvZl92YXJzWyJjbGFzc25hbWUiXSA9IGNsYXNz
bmFtZV87Ci0gICAgb25lb2ZfdmFyc1sib25lb2ZuYW1lIl0gPSBkZXNjcmlwdG9yXy0+b25lb2Zf
ZGVjbChpKS0+bmFtZSgpOwotICAgIG9uZW9mX3ZhcnNbImZ1bGxfbmFtZSJdID0gZGVzY3JpcHRv
cl8tPmZ1bGxfbmFtZSgpOwotICAgIHN0cmluZyBtZXNzYWdlX2NsYXNzOwotCi0gICAgcHJpbnRl
ci0+UHJpbnQob25lb2ZfdmFycywKLSAgICAgICAgICAgICAgICAgICAidm9pZCAkY2xhc3NuYW1l
JDo6Y2xlYXJfJG9uZW9mbmFtZSQoKSB7XG4iCi0gICAgICAgICAgICAgICAgICAgIi8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChvbmVfb2ZfY2xlYXJfc3RhcnQ6IgotICAgICAgICAgICAgICAg
ICAgICIkZnVsbF9uYW1lJClcbiIpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotICAgIHByaW50
ZXItPlByaW50KG9uZW9mX3ZhcnMsCi0gICAgICAgICJzd2l0Y2goJG9uZW9mbmFtZSRfY2FzZSgp
KSB7XG4iKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8
IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVsZF9jb3VudCgpOyBqKyspIHsKLSAgICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChp
KS0+ZmllbGQoaik7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAiY2FzZSBrJGZp
ZWxkX25hbWUkOiB7XG4iLAotICAgICAgICAgICJmaWVsZF9uYW1lIiwgVW5kZXJzY29yZXNUb0Nh
bWVsQ2FzZShmaWVsZC0+bmFtZSgpLCB0cnVlKSk7Ci0gICAgICBwcmludGVyLT5JbmRlbnQoKTsK
LSAgICAgIC8vIFdlIGNsZWFyIG9ubHkgYWxsb2NhdGVkIG9iamVjdHMgaW4gb25lb2ZzCi0gICAg
ICBpZiAoIUlzU3RyaW5nT3JNZXNzYWdlKGZpZWxkKSkgewotICAgICAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICAgICAgICIvLyBObyBuZWVkIHRvIGNsZWFyXG4iKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChmaWVsZCkuR2VuZXJhdGVDbGVhcmluZ0Nv
ZGUocHJpbnRlcik7Ci0gICAgICB9Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAi
YnJlYWs7XG4iKTsKLSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgIHByaW50ZXItPlBy
aW50KAotICAgICAgICAgICJ9XG4iKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICJjYXNlICRjYXBfb25lb2ZfbmFtZSRfTk9UX1NFVDoge1xuIgotICAgICAgICAiICBicmVh
aztcbiIKLSAgICAgICAgIn1cbiIsCi0gICAgICAgICJjYXBfb25lb2ZfbmFtZSIsCi0gICAgICAg
IFRvVXBwZXIoZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPm5hbWUoKSkpOwotICAgIHByaW50
ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIn1cbiIKLSAgICAg
ICAgIl9vbmVvZl9jYXNlX1skb25lb2ZfaW5kZXgkXSA9ICRjYXBfb25lb2ZfbmFtZSRfTk9UX1NF
VDtcbiIsCi0gICAgICAgICJvbmVvZl9pbmRleCIsIFNpbXBsZUl0b2EoaSksCi0gICAgICAgICJj
YXBfb25lb2ZfbmFtZSIsCi0gICAgICAgIFRvVXBwZXIoZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2wo
aSktPm5hbWUoKSkpOwotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICAgIn1cbiIKLSAgICAgICAgIlxuIik7Ci0gIH0KLX0KLQotdm9pZCBNZXNzYWdl
R2VuZXJhdG9yOjoKLUdlbmVyYXRlU3dhcChpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBpZiAo
U3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgLy8gR2VuZXJhdGUgdGhlIFN3YXAg
bWVtYmVyIGZ1bmN0aW9uLiBUaGlzIGlzIGEgbGlnaHR3ZWlnaHQgd3JhcHBlciBhcm91bmQKLSAg
ICAvLyBVbnNhZmVBcmVuYVN3YXAoKSAvIE1lcmdlRnJvbSgpIHdpdGggdGVtcG9yYXJpZXMsIGRl
cGVuZGluZyBvbiB0aGUgbWVtb3J5Ci0gICAgLy8gb3duZXJzaGlwIHNpdHVhdGlvbjogc3dhcHBp
bmcgYWNyb3NzIGFyZW5hcyBvciBiZXR3ZWVuIGFuIGFyZW5hIGFuZCBhCi0gICAgLy8gaGVhcCBy
ZXF1aXJlcyBjb3B5aW5nLgotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiR09PR0xFX0FU
VFJJQlVURV9OT0lOTElORSB2b2lkICRjbGFzc25hbWUkOjpTd2FwKCRjbGFzc25hbWUkKiBvdGhl
cikge1xuIgotICAgICAgICAiICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuO1xuIgotICAgICAg
ICAiICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBvdGhlci0+R2V0QXJlbmFOb1ZpcnR1YWwo
KSkge1xuIgotICAgICAgICAiICAgIEludGVybmFsU3dhcChvdGhlcik7XG4iCi0gICAgICAgICIg
IH0gZWxzZSB7XG4iCi0gICAgICAgICIgICAgJGNsYXNzbmFtZSQgdGVtcDtcbiIKLSAgICAgICAg
IiAgICB0ZW1wLk1lcmdlRnJvbSgqdGhpcyk7XG4iCi0gICAgICAgICIgICAgQ29weUZyb20oKm90
aGVyKTtcbiIKLSAgICAgICAgIiAgICBvdGhlci0+Q29weUZyb20odGVtcCk7XG4iCi0gICAgICAg
ICIgIH1cbiIKLSAgICAgICAgIn1cbiIKLSAgICAgICAgInZvaWQgJGNsYXNzbmFtZSQ6OlVuc2Fm
ZUFyZW5hU3dhcCgkY2xhc3NuYW1lJCogb3RoZXIpIHtcbiIKLSAgICAgICAgIiAgaWYgKG90aGVy
ID09IHRoaXMpIHJldHVybjtcbiIKLSAgICAgICAgIiAgR09PR0xFX0RDSEVDSyhHZXRBcmVuYU5v
VmlydHVhbCgpID09IG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKTtcbiIKLSAgICAgICAgIiAg
SW50ZXJuYWxTd2FwKG90aGVyKTtcbiIKLSAgICAgICAgIn1cbiIsCi0gICAgICAgICJjbGFzc25h
bWUiLCBjbGFzc25hbWVfKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgInZvaWQgJGNsYXNzbmFtZSQ6OlN3YXAoJGNsYXNzbmFtZSQqIG90aGVyKSB7XG4iCi0gICAg
ICAgICIgIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47XG4iCi0gICAgICAgICIgIEludGVybmFs
U3dhcChvdGhlcik7XG4iCi0gICAgICAgICJ9XG4iLAotICAgICAgICAiY2xhc3NuYW1lIiwgY2xh
c3NuYW1lXyk7Ci0gIH0KLQotICAvLyBHZW5lcmF0ZSB0aGUgVW5zYWZlQXJlbmFTd2FwIG1lbWJl
ciBmdW5jdGlvbi4KLSAgcHJpbnRlci0+UHJpbnQoInZvaWQgJGNsYXNzbmFtZSQ6OkludGVybmFs
U3dhcCgkY2xhc3NuYW1lJCogb3RoZXIpIHtcbiIsCi0gICAgICAgICAgICAgICAgICJjbGFzc25h
bWUiLCBjbGFzc25hbWVfKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgaWYgKEhhc0dlbmVy
YXRlZE1ldGhvZHMoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotICAg
ICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZVN3YXBwaW5nQ29kZShwcmlu
dGVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVv
Zl9kZWNsX2NvdW50KCk7IGkrKykgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJz
dGQ6OnN3YXAoJG9uZW9mX25hbWUkXywgb3RoZXItPiRvbmVvZl9uYW1lJF8pO1xuIgotICAgICAg
ICAic3RkOjpzd2FwKF9vbmVvZl9jYXNlX1skaSRdLCBvdGhlci0+X29uZW9mX2Nhc2VfWyRpJF0p
O1xuIiwKLSAgICAgICAgIm9uZW9mX25hbWUiLCBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+
bmFtZSgpLAotICAgICAgICAiaSIsIFNpbXBsZUl0b2EoaSkpOwotICAgIH0KLQotICAgIGlmIChI
YXNGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IChkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKSArIDMxKSAvIDMyOyArK2kpIHsK
LSAgICAgICAgcHJpbnRlci0+UHJpbnQoInN0ZDo6c3dhcChfaGFzX2JpdHNfWyRpJF0sIG90aGVy
LT5faGFzX2JpdHNfWyRpJF0pO1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImkiLCBTaW1w
bGVJdG9hKGkpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZ25vcmUgUHJlc2VydmVVbmtu
b3duRmllbGRzIGhlcmUgLSBhbHdheXMgc3dhcCBpbnRlcm5hbF9tZXRhZGF0YSBhcyBpdAotICAg
IC8vIG1heSBjb250YWluIG1vcmUgdGhhbiBqdXN0IHVua25vd24gZmllbGRzLgotICAgIGlmIChV
c2VVbmtub3duRmllbGRTZXQoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAiX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZv
dGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJp
bnRlci0+UHJpbnQoIl91bmtub3duX2ZpZWxkc18uU3dhcCgmb3RoZXItPl91bmtub3duX2ZpZWxk
c18pO1xuIik7Ci0gICAgfQotCi0gICAgcHJpbnRlci0+UHJpbnQoInN0ZDo6c3dhcChfY2FjaGVk
X3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7XG4iKTsKLSAgICBpZiAoZGVzY3JpcHRvcl8t
PmV4dGVuc2lvbl9yYW5nZV9jb3VudCgpID4gMCkgewotICAgICAgcHJpbnRlci0+UHJpbnQoIl9l
eHRlbnNpb25zXy5Td2FwKCZvdGhlci0+X2V4dGVuc2lvbnNfKTtcbiIpOwotICAgIH0KLSAgfSBl
bHNlIHsKLSAgICBwcmludGVyLT5QcmludCgiR2V0UmVmbGVjdGlvbigpLT5Td2FwKHRoaXMsIG90
aGVyKTsiKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQo
In1cbiIpOwotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVNZXJnZUZyb20o
aW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaWYgKEhhc0Rlc2NyaXB0b3JNZXRob2RzKGRlc2Ny
aXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgIC8vIEdlbmVyYXRlIHRoZSBnZW5lcmFs
aXplZCBNZXJnZUZyb20gKGFrYSB0aGF0IHdoaWNoIHRha2VzIGluIHRoZSBNZXNzYWdlCi0gICAg
Ly8gYmFzZSBjbGFzcyBhcyBhIHBhcmFtZXRlcikuCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICJ2b2lkICRjbGFzc25hbWUkOjpNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlJiBmcm9tKSB7XG4iCi0gICAgICAgICIvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDoiCi0gICAgICAgICIkZnVsbF9uYW1lJClc
biIKLSAgICAgICAgIiAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBN
ZXJnZUZyb21GYWlsKF9fTElORV9fKTtcbiIsCi0gICAgICAgICJjbGFzc25hbWUiLCBjbGFzc25h
bWVfLCAiZnVsbF9uYW1lIiwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFtZSgpKTsKLSAgICBwcmludGVy
LT5JbmRlbnQoKTsKLQotICAgIC8vIENhc3QgdGhlIG1lc3NhZ2UgdG8gdGhlIHByb3BlciB0eXBl
LiBJZiB3ZSBmaW5kIHRoYXQgdGhlIG1lc3NhZ2UgaXMKLSAgICAvLyAqbm90KiBvZiB0aGUgcHJv
cGVyIHR5cGUsIHdlIGNhbiBzdGlsbCBjYWxsIE1lcmdlIHZpYSB0aGUgcmVmbGVjdGlvbgotICAg
IC8vIHN5c3RlbSwgYXMgdGhlIEdPT0dMRV9DSEVDSyBhYm92ZSBlbnN1cmVkIHRoYXQgd2UgaGF2
ZSB0aGUgc2FtZSBkZXNjcmlwdG9yCi0gICAgLy8gZm9yIGVhY2ggbWVzc2FnZS4KLSAgICBwcmlu
dGVyLT5QcmludCgKLSAgICAgICJjb25zdCAkY2xhc3NuYW1lJCogc291cmNlID0gXG4iCi0gICAg
ICAiICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0
ZWQ8Y29uc3QgJGNsYXNzbmFtZSQ+KFxuIgotICAgICAgIiAgICAgICAgJmZyb20pO1xuIgotICAg
ICAgImlmIChzb3VyY2UgPT0gTlVMTCkge1xuIgotICAgICAgIi8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDoiCi0gICAgICAiJGZ1bGxf
bmFtZSQpXG4iCi0gICAgICAiICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0
aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTtcbiIKLSAgICAgICJ9IGVsc2Uge1xuIgotICAgICAg
Ii8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rf
c3VjY2VzczoiCi0gICAgICAiJGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICBNZXJnZUZyb20oKnNv
dXJjZSk7XG4iCi0gICAgICAifVxuIiwKLSAgICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfLCAi
ZnVsbF9uYW1lIiwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFtZSgpKTsKLQotICAgIHByaW50ZXItPk91
dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgifVxuXG4iKTsKLSAgfSBlbHNlIHsKLSAgICAv
LyBHZW5lcmF0ZSBDaGVja1R5cGVBbmRNZXJnZUZyb20oKS4KLSAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICJ2b2lkICRjbGFzc25hbWUkOjpDaGVja1R5cGVBbmRNZXJnZUZyb20oXG4iCi0gICAg
ICAiICAgIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUxpdGUmIGZyb20pIHtcbiIK
LSAgICAgICIgIE1lcmdlRnJvbSgqOjpnb29nbGU6OnByb3RvYnVmOjpkb3duX2Nhc3Q8Y29uc3Qg
JGNsYXNzbmFtZSQqPigmZnJvbSkpO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJcbiIsCi0gICAg
ICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXyk7Ci0gIH0KLQotICAvLyBHZW5lcmF0ZSB0aGUgY2xh
c3Mtc3BlY2lmaWMgTWVyZ2VGcm9tLCB3aGljaCBhdm9pZHMgdGhlIEdPT0dMRV9DSEVDSyBhbmQg
Y2FzdC4KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAidm9pZCAkY2xhc3NuYW1lJDo6TWVyZ2VG
cm9tKGNvbnN0ICRjbGFzc25hbWUkJiBmcm9tKSB7XG4iCi0gICAgICAiLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6IgotICAgICAgIiRm
dWxsX25hbWUkKVxuIgotICAgICAgIiAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09
IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTtcbiIsCi0gICAgICAiY2xhc3NuYW1lIiwg
Y2xhc3NuYW1lXywgImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3JfLT5mdWxsX25hbWUoKSk7Ci0gIHBy
aW50ZXItPkluZGVudCgpOwotCi0gIC8vIE1lcmdlIFJlcGVhdGVkIGZpZWxkcy4gVGhlc2UgZmll
bGRzIGRvIG5vdCByZXF1aXJlIGEKLSAgLy8gY2hlY2sgYXMgd2UgY2FuIHNpbXBseSBpdGVyYXRl
IG92ZXIgdGhlbS4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291
bnQoKTsgKytpKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0
b3JfLT5maWVsZChpKTsKLQotICAgIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgICAg
ZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZU1lcmdpbmdDb2RlKHByaW50ZXIp
OwotICAgIH0KLSAgfQotCi0gIC8vIE1lcmdlIG9uZW9mIGZpZWxkcy4gT25lb2YgZmllbGQgcmVx
dWlyZXMgb25lb2YgY2FzZSBjaGVjay4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9y
Xy0+b25lb2ZfZGVjbF9jb3VudCgpOyArK2kpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgInN3aXRjaCAoZnJvbS4kb25lb2ZuYW1lJF9jYXNlKCkpIHtcbiIsCi0gICAgICAgICJvbmVv
Zm5hbWUiLCBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+bmFtZSgpKTsKLSAgICBwcmludGVy
LT5JbmRlbnQoKTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGRlc2NyaXB0b3JfLT5vbmVvZl9k
ZWNsKGkpLT5maWVsZF9jb3VudCgpOyBqKyspIHsKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQgPSBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+ZmllbGQoaik7Ci0gICAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICAgICAiY2FzZSBrJGZpZWxkX25hbWUkOiB7XG4iLAotICAg
ICAgICAgICJmaWVsZF9uYW1lIiwgVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShmaWVsZC0+bmFtZSgp
LCB0cnVlKSk7Ci0gICAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICAgIGZpZWxkX2dlbmVyYXRv
cnNfLmdldChmaWVsZCkuR2VuZXJhdGVNZXJnaW5nQ29kZShwcmludGVyKTsKLSAgICAgIHByaW50
ZXItPlByaW50KAotICAgICAgICAgICJicmVhaztcbiIpOwotICAgICAgcHJpbnRlci0+T3V0ZGVu
dCgpOwotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIn1cbiIpOwotICAgIH0KLSAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImNhc2UgJGNhcF9vbmVvZl9uYW1lJF9OT1RfU0VU
OiB7XG4iCi0gICAgICAgICIgIGJyZWFrO1xuIgotICAgICAgICAifVxuIiwKLSAgICAgICAgImNh
cF9vbmVvZl9uYW1lIiwKLSAgICAgICAgVG9VcHBlcihkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChp
KS0+bmFtZSgpKSk7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50
KAotICAgICAgICAifVxuIik7Ci0gIH0KLQotICAvLyBNZXJnZSBPcHRpb25hbCBhbmQgUmVxdWly
ZWQgZmllbGRzIChhZnRlciBhIF9oYXNfYml0IGNoZWNrKS4KLSAgaW50IGxhc3RfaW5kZXggPSAt
MTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyAr
K2kpIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZp
ZWxkKGkpOwotCi0gICAgaWYgKCFmaWVsZC0+aXNfcmVwZWF0ZWQoKSAmJiAhZmllbGQtPmNvbnRh
aW5pbmdfb25lb2YoKSkgewotICAgICAgaWYgKEhhc0ZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8t
PmZpbGUoKSkpIHsKLSAgICAgICAgLy8gU2VlIGFib3ZlIGluIEdlbmVyYXRlQ2xlYXIgZm9yIGFu
IGV4cGxhbmF0aW9uIG9mIHRoaXMuCi0gICAgICAgIGlmIChpIC8gOCAhPSBsYXN0X2luZGV4IC8g
OCB8fCBsYXN0X2luZGV4IDwgMCkgewotICAgICAgICAgIGlmIChsYXN0X2luZGV4ID49IDApIHsK
LSAgICAgICAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgICAgICAgIHByaW50ZXItPlBy
aW50KCJ9XG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICAgICAiaWYgKGZyb20uX2hhc19iaXRzX1skaW5kZXgkIC8gMzJdICYgIgotICAgICAgICAg
ICAgIigweGZmdSA8PCAoJGluZGV4JCAlIDMyKSkpIHtcbiIsCi0gICAgICAgICAgICAiaW5kZXgi
LCBTaW1wbGVJdG9hKGZpZWxkLT5pbmRleCgpKSk7Ci0gICAgICAgICAgcHJpbnRlci0+SW5kZW50
KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgbGFzdF9pbmRleCA9IGk7Ci0KLSAgICAg
IGJvb2wgaGF2ZV9lbmNsb3NpbmdfaWYgPSBmYWxzZTsKLSAgICAgIGlmIChIYXNGaWVsZFByZXNl
bmNlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KAotICAg
ICAgICAgICJpZiAoZnJvbS5oYXNfJG5hbWUkKCkpIHtcbiIsCi0gICAgICAgICAgIm5hbWUiLCBG
aWVsZE5hbWUoZmllbGQpKTsKLSAgICAgICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAgICAgIGhh
dmVfZW5jbG9zaW5nX2lmID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE1lcmdl
IHNlbWFudGljcyB3aXRob3V0IHRydWUgZmllbGQgcHJlc2VuY2U6IHByaW1pdGl2ZSBmaWVsZHMg
YXJlCi0gICAgICAgIC8vIG1lcmdlZCBvbmx5IGlmIG5vbi16ZXJvIChudW1lcmljKSBvciBub24t
ZW1wdHkgKHN0cmluZykuCi0gICAgICAgIGhhdmVfZW5jbG9zaW5nX2lmID0gRW1pdEZpZWxkTm9u
RGVmYXVsdENvbmRpdGlvbigKLSAgICAgICAgICAgIHByaW50ZXIsICJmcm9tLiIsIGZpZWxkKTsK
LSAgICAgIH0KLQotICAgICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZU1l
cmdpbmdDb2RlKHByaW50ZXIpOwotCi0gICAgICBpZiAoaGF2ZV9lbmNsb3NpbmdfaWYpIHsKLSAg
ICAgICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgICAgICBwcmludGVyLT5QcmludCgifVxuIik7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKEhhc0ZpZWxkUHJlc2VuY2UoZGVzY3JpcHRv
cl8tPmZpbGUoKSkgJiYKLSAgICAgIGxhc3RfaW5kZXggPj0gMCkgewotICAgIHByaW50ZXItPk91
dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgifVxuIik7Ci0gIH0KLQotICBpZiAoZGVzY3Jp
cHRvcl8tPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgpID4gMCkgewotICAgIHByaW50ZXItPlByaW50
KCJfZXh0ZW5zaW9uc18uTWVyZ2VGcm9tKGZyb20uX2V4dGVuc2lvbnNfKTtcbiIpOwotICB9Ci0K
LSAgaWYgKFByZXNlcnZlVW5rbm93bkZpZWxkcyhkZXNjcmlwdG9yXykpIHsKLSAgICBpZiAoVXNl
VW5rbm93bkZpZWxkU2V0KGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgICAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJpZiAoZnJvbS5faW50ZXJuYWxfbWV0YWRhdGFfLmhh
dmVfdW5rbm93bl9maWVsZHMoKSkge1xuIgotICAgICAgICAiICBtdXRhYmxlX3Vua25vd25fZmll
bGRzKCktPk1lcmdlRnJvbShmcm9tLnVua25vd25fZmllbGRzKCkpO1xuIgotICAgICAgICAifVxu
Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiaWYgKCFm
cm9tLnVua25vd25fZmllbGRzKCkuZW1wdHkoKSkge1xuIgotICAgICAgICAiICBtdXRhYmxlX3Vu
a25vd25fZmllbGRzKCktPmFwcGVuZChmcm9tLnVua25vd25fZmllbGRzKCkpO1xuIgotICAgICAg
ICAifVxuIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVy
LT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNv
cHlGcm9tKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGlmIChIYXNEZXNjcmlwdG9yTWV0aG9k
cyhkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICAvLyBHZW5lcmF0ZSB0aGUg
Z2VuZXJhbGl6ZWQgQ29weUZyb20gKGFrYSB0aGF0IHdoaWNoIHRha2VzIGluIHRoZSBNZXNzYWdl
Ci0gICAgLy8gYmFzZSBjbGFzcyBhcyBhIHBhcmFtZXRlcikuCi0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAgICJ2b2lkICRjbGFzc25hbWUkOjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2UmIGZyb20pIHtcbiIKLSAgICAgICAgIi8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6IgotICAgICAgICAiJGZ1bGxfbmFt
ZSQpXG4iLAotICAgICAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lXywgImZ1bGxfbmFtZSIsIGRl
c2NyaXB0b3JfLT5mdWxsX25hbWUoKSk7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICJpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuO1xuIgotICAg
ICAgIkNsZWFyKCk7XG4iCi0gICAgICAiTWVyZ2VGcm9tKGZyb20pO1xuIik7Ci0KLSAgICBwcmlu
dGVyLT5PdXRkZW50KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoIn1cblxuIik7Ci0gIH0KLQotICAv
LyBHZW5lcmF0ZSB0aGUgY2xhc3Mtc3BlY2lmaWMgQ29weUZyb20uCi0gIHByaW50ZXItPlByaW50
KAotICAgICAgInZvaWQgJGNsYXNzbmFtZSQ6OkNvcHlGcm9tKGNvbnN0ICRjbGFzc25hbWUkJiBm
cm9tKSB7XG4iCi0gICAgICAiLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNp
ZmljX2NvcHlfZnJvbV9zdGFydDoiCi0gICAgICAiJGZ1bGxfbmFtZSQpXG4iLAotICAgICAgImNs
YXNzbmFtZSIsIGNsYXNzbmFtZV8sICJmdWxsX25hbWUiLCBkZXNjcmlwdG9yXy0+ZnVsbF9uYW1l
KCkpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiaWYg
KCZmcm9tID09IHRoaXMpIHJldHVybjtcbiIKLSAgICAiQ2xlYXIoKTtcbiIKLSAgICAiTWVyZ2VG
cm9tKGZyb20pO1xuIik7Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5Qcmlu
dCgifVxuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdlRnJv
bUNvZGVkU3RyZWFtKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGlmIChkZXNjcmlwdG9yXy0+
b3B0aW9ucygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICAvLyBTcGVjaWFsLWNh
c2UgTWVzc2FnZVNldC4KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJib29sICRjbGFzc25h
bWUkOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oXG4iCi0gICAgICAiICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7XG4iLAotICAgICAgImNs
YXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotCi0gICAgUHJpbnRIYW5kbGluZ09wdGlvbmFsU3RhdGlj
SW5pdGlhbGl6ZXJzKAotICAgICAgICBkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXywgcHJp
bnRlciwKLSAgICAgICAgLy8gV2l0aCBzdGF0aWMgaW5pdGlhbGl6ZXJzLgotICAgICAgICAiICBy
ZXR1cm4gX2V4dGVuc2lvbnNfLlBhcnNlTWVzc2FnZVNldChpbnB1dCwgZGVmYXVsdF9pbnN0YW5j
ZV8sXG4iCi0gICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11
dGFibGVfdW5rbm93bl9maWVsZHMoKSk7XG4iLAotICAgICAgICAvLyBXaXRob3V0LgotICAgICAg
ICAiICByZXR1cm4gX2V4dGVuc2lvbnNfLlBhcnNlTWVzc2FnZVNldChpbnB1dCwgJmRlZmF1bHRf
aW5zdGFuY2UoKSxcbiIKLSAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpKTtcbiIsCi0gICAgICAgIC8vIFZhcnMuCi0g
ICAgICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfKTsKLQotICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgIn1cbiIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAg
ICJib29sICRjbGFzc25hbWUkOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oXG4iCi0gICAg
IiAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkge1xu
IgotICAgICIjZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUo
RVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZVxuIgotICAgICIgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
dWludDMyIHRhZztcbiIsCi0gICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8pOwotCi0gIGlmIChQ
cmVzZXJ2ZVVua25vd25GaWVsZHMoZGVzY3JpcHRvcl8pICYmCi0gICAgICAhVXNlVW5rbm93bkZp
ZWxkU2V0KGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSkgewotICAgIC8vIFVzZSBMYXp5
U3RyaW5nT3V0cHV0U3RyaW5nIHRvIGF2b2lkIGluaXRpYWxpemluZyB1bmtub3duIGZpZWxkcyBz
dHJpbmcKLSAgICAvLyB1bmxlc3MgaXQgaXMgYWN0dWFsbHkgbmVlZGVkLiBGb3IgdGhlIHNhbWUg
cmVhc29uLCBkaXNhYmxlIGVhZ2VyIHJlZnJlc2gKLSAgICAvLyBvbiB0aGUgQ29kZWRPdXRwdXRT
dHJlYW0uCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICA6Omdvb2dsZTo6cHJvdG9idWY6
OmlvOjpMYXp5U3RyaW5nT3V0cHV0U3RyZWFtIHVua25vd25fZmllbGRzX3N0cmluZyhcbiIKLSAg
ICAgICIgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpOZXdQZXJtYW5lbnRDYWxs
YmFjayhcbiIKLSAgICAgICIgICAgICAgICAgJk11dGFibGVVbmtub3duRmllbGRzRm9yJGNsYXNz
bmFtZSQsIHRoaXMpKTtcbiIKLSAgICAgICIgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVk
T3V0cHV0U3RyZWFtIHVua25vd25fZmllbGRzX3N0cmVhbShcbiIKLSAgICAgICIgICAgICAmdW5r
bm93bl9maWVsZHNfc3RyaW5nLCBmYWxzZSk7XG4iLAotICAgICAgImNsYXNzbmFtZSIsIGNsYXNz
bmFtZV8pOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0OiRmdWxsX25hbWUkKVxuIiwKLSAgICAiZnVsbF9uYW1l
IiwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFtZSgpKTsKLQotICBwcmludGVyLT5JbmRlbnQoKTsKLSAg
cHJpbnRlci0+UHJpbnQoImZvciAoOzspIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQot
ICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfYXJyYXk8Y29uc3QgRmllbGREZXNjcmlwdG9yICog
PiBvcmRlcmVkX2ZpZWxkcygKLSAgICAgIFNvcnRGaWVsZHNCeU51bWJlcihkZXNjcmlwdG9yXykp
OwotICB1aW50MzIgbWF4dGFnID0gZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCkgPT0gMCA/IDAg
OgotICAgICAgV2lyZUZvcm1hdDo6TWFrZVRhZyhvcmRlcmVkX2ZpZWxkc1tkZXNjcmlwdG9yXy0+
ZmllbGRfY291bnQoKSAtIDFdKTsKLSAgY29uc3QgaW50IGtDdXRvZmYwID0gMTI3OyAgICAgICAg
ICAgICAgIC8vIGZpdHMgaW4gMS1ieXRlIHZhcmludAotICBjb25zdCBpbnQga0N1dG9mZjEgPSAo
MTI3IDw8IDcpICsgMTI3OyAgLy8gZml0cyBpbiAyLWJ5dGUgdmFyaW50Ci0gIHByaW50ZXItPlBy
aW50KCI6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSAi
Ci0gICAgICAgICAgICAgICAgICJpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoJG1heCQpO1xuIgot
ICAgICAgICAgICAgICAgICAidGFnID0gcC5maXJzdDtcbiIKLSAgICAgICAgICAgICAgICAgImlm
ICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7XG4iLAotICAgICAgICAgICAgICAgICAi
bWF4IiwgU2ltcGxlSXRvYShtYXh0YWcgPD0ga0N1dG9mZjAgPyBrQ3V0b2ZmMCA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXh0YWcgPD0ga0N1dG9mZjEgPyBrQ3V0b2Zm
MSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXh0YWcpKSk7Ci0gIGlm
IChkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKSA+IDApIHsKLSAgICAvLyBXZSBkb24ndCBldmVu
IHdhbnQgdG8gcHJpbnQgdGhlIHN3aXRjaCgpIGlmIHdlIGhhdmUgbm8gZmllbGRzIGJlY2F1c2UK
LSAgICAvLyBNU1ZDIGRpc2xpa2VzIHN3aXRjaCgpIHN0YXRlbWVudHMgdGhhdCBjb250YWluIG9u
bHkgYSBkZWZhdWx0IHZhbHVlLgotCi0gICAgLy8gTm90ZTogIElmIHdlIGp1c3Qgc3dpdGNoZWQg
b24gdGhlIHRhZyByYXRoZXIgdGhhbiB0aGUgZmllbGQgbnVtYmVyLCB3ZQotICAgIC8vIGNvdWxk
IGF2b2lkIHRoZSBuZWVkIGZvciB0aGUgaWYoKSB0byBjaGVjayB0aGUgd2lyZSB0eXBlIGF0IHRo
ZSBiZWdpbm5pbmcKLSAgICAvLyBvZiBlYWNoIGNhc2UuICBIb3dldmVyLCB0aGlzIGlzIGFjdHVh
bGx5IGEgYml0IHNsb3dlciBpbiBwcmFjdGljZSBhcyBpdAotICAgIC8vIGNyZWF0ZXMgYSBqdW1w
IHRhYmxlIHRoYXQgaXMgOHggbGFyZ2VyIGFuZCBzcGFyc2VyLCBhbmQgbWVhbndoaWxlIHRoZQot
ICAgIC8vIGlmKClzIGFyZSBoaWdobHkgcHJlZGljdGFibGUuCi0gICAgcHJpbnRlci0+UHJpbnQo
InN3aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OiIK
LSAgICAgICAgICAgICAgICAgICAiR2V0VGFnRmllbGROdW1iZXIodGFnKSkge1xuIik7Ci0KLSAg
ICBwcmludGVyLT5JbmRlbnQoKTsKLQotICAgIC8vIEZpbmQgcmVwZWF0ZWQgbWVzc2FnZXMgYW5k
IGdyb3VwcyBub3csIHRvIHNpbXBsaWZ5IHdoYXQgZm9sbG93cy4KLSAgICBoYXNoX3NldDxpbnQ+
IGZpZWxkc193aXRoX3BhcnNlX2xvb3A7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlw
dG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkID0gb3JkZXJlZF9maWVsZHNbaV07Ci0gICAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVk
KCkgJiYKLSAgICAgICAgICAoZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
TUVTU0FHRSB8fAotICAgICAgICAgICBmaWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV9HUk9VUCkpIHsKLSAgICAgICAgZmllbGRzX3dpdGhfcGFyc2VfbG9vcC5pbnNlcnQoaSk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gbmVlZF9sYWJlbCBpcyB0cnVlIGlmIHdlIGdlbmVy
YXRlZCAiZ290byBwYXJzZV8kbmFtZSQiIHdoaWxlIGhhbmRsaW5nIHRoZQotICAgIC8vIHByZXZp
b3VzIGZpZWxkLgotICAgIGJvb2wgbmVlZF9sYWJlbCA9IGZhbHNlOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IG9yZGVyZWRfZmllbGRzW2ldOwotICAgICAgY29uc3Qg
Ym9vbCBsb29wcyA9IGZpZWxkc193aXRoX3BhcnNlX2xvb3AuY291bnQoaSkgPiAwOwotICAgICAg
Y29uc3QgYm9vbCBuZXh0X2ZpZWxkX2xvb3BzID0gZmllbGRzX3dpdGhfcGFyc2VfbG9vcC5jb3Vu
dChpICsgMSkgPiAwOwotCi0gICAgICBQcmludEZpZWxkQ29tbWVudChwcmludGVyLCBmaWVsZCk7
Ci0KLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiY2FzZSAkbnVtYmVyJDoge1xuIiwK
LSAgICAgICAgIm51bWJlciIsIFNpbXBsZUl0b2EoZmllbGQtPm51bWJlcigpKSk7Ci0gICAgICBw
cmludGVyLT5JbmRlbnQoKTsKLSAgICAgIGNvbnN0IEZpZWxkR2VuZXJhdG9yJiBmaWVsZF9nZW5l
cmF0b3IgPSBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpOwotCi0gICAgICAvLyBFbWl0IGNv
ZGUgdG8gcGFyc2UgdGhlIGNvbW1vbiwgZXhwZWN0ZWQgY2FzZS4KLSAgICAgIHByaW50ZXItPlBy
aW50KCJpZiAodGFnID09ICRjb21tb250YWckKSB7XG4iLAotICAgICAgICAgICAgICAgICAgICAg
ImNvbW1vbnRhZyIsIFNpbXBsZUl0b2EoV2lyZUZvcm1hdDo6TWFrZVRhZyhmaWVsZCkpKTsKLQot
ICAgICAgaWYgKG5lZWRfbGFiZWwgfHwKLSAgICAgICAgICAoZmllbGQtPmlzX3JlcGVhdGVkKCkg
JiYgIWZpZWxkLT5pc19wYWNrZWQoKSAmJiAhbG9vcHMpKSB7Ci0gICAgICAgIHByaW50ZXItPlBy
aW50KAotICAgICAgICAgICAgIiBwYXJzZV8kbmFtZSQ6XG4iLAotICAgICAgICAgICAgIm5hbWUi
LCBmaWVsZC0+bmFtZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChsb29wcykgewotICAgICAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICAgICAiICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lv
bkRlcHRoKCkpO1xuIgotICAgICAgICAgICIgcGFyc2VfbG9vcF8kbmFtZSQ6XG4iLAotICAgICAg
ICAgICJuYW1lIiwgZmllbGQtPm5hbWUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIHByaW50ZXItPklu
ZGVudCgpOwotICAgICAgaWYgKGZpZWxkLT5pc19wYWNrZWQoKSkgewotICAgICAgICBmaWVsZF9n
ZW5lcmF0b3IuR2VuZXJhdGVNZXJnZUZyb21Db2RlZFN0cmVhbVdpdGhQYWNraW5nKHByaW50ZXIp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmllbGRfZ2VuZXJhdG9yLkdlbmVyYXRlTWVyZ2VG
cm9tQ29kZWRTdHJlYW0ocHJpbnRlcik7Ci0gICAgICB9Ci0gICAgICBwcmludGVyLT5PdXRkZW50
KCk7Ci0KLSAgICAgIC8vIEVtaXQgY29kZSB0byBwYXJzZSB1bmV4cGVjdGVkbHkgcGFja2VkIG9y
IHVucGFja2VkIHZhbHVlcy4KLSAgICAgIGlmIChmaWVsZC0+aXNfcGFja2VkKCkpIHsKLSAgICAg
ICAgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXaXJlVHlwZSB3aXJldHlwZSA9Ci0gICAgICAg
ICAgICBXaXJlRm9ybWF0OjpXaXJlVHlwZUZvckZpZWxkVHlwZShmaWVsZC0+dHlwZSgpKTsKLSAg
ICAgICAgcHJpbnRlci0+UHJpbnQoIn0gZWxzZSBpZiAodGFnID09ICR1bmNvbW1vbnRhZyQpIHtc
biIsCi0gICAgICAgICAgICAgICAgICAgICAgICJ1bmNvbW1vbnRhZyIsIFNpbXBsZUl0b2EoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1ha2VU
YWcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPm51bWJlcigpLCB3aXJl
dHlwZSkpKTsKLSAgICAgICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAgICAgIGZpZWxkX2dlbmVy
YXRvci5HZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtKHByaW50ZXIpOwotICAgICAgICBwcmlu
dGVyLT5PdXRkZW50KCk7Ci0gICAgICB9IGVsc2UgaWYgKGZpZWxkLT5pc19wYWNrYWJsZSgpICYm
ICFmaWVsZC0+aXNfcGFja2VkKCkpIHsKLSAgICAgICAgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpXaXJlVHlwZSB3aXJldHlwZSA9Ci0gICAgICAgICAgICBpbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQ7Ci0gICAgICAgIHByaW50ZXItPlByaW50KCJ9
IGVsc2UgaWYgKHRhZyA9PSAkdW5jb21tb250YWckKSB7XG4iLAotICAgICAgICAgICAgICAgICAg
ICAgICAidW5jb21tb250YWciLCBTaW1wbGVJdG9hKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNYWtlVGFnKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpZWxkLT5udW1iZXIoKSwgd2lyZXR5cGUpKSk7Ci0gICAgICAgIHByaW50
ZXItPkluZGVudCgpOwotICAgICAgICBmaWVsZF9nZW5lcmF0b3IuR2VuZXJhdGVNZXJnZUZyb21D
b2RlZFN0cmVhbVdpdGhQYWNraW5nKHByaW50ZXIpOwotICAgICAgICBwcmludGVyLT5PdXRkZW50
KCk7Ci0gICAgICB9Ci0KLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAifSBlbHNlIHtc
biIKLSAgICAgICAgIiAgZ290byBoYW5kbGVfdW51c3VhbDtcbiIKLSAgICAgICAgIn1cbiIpOwot
Ci0gICAgICAvLyBzd2l0Y2goKSBpcyBzbG93IHNpbmNlIGl0IGNhbid0IGJlIHByZWRpY3RlZCB3
ZWxsLiAgSW5zZXJ0IHNvbWUgaWYoKXMKLSAgICAgIC8vIGhlcmUgdGhhdCBhdHRlbXB0IHRvIHBy
ZWRpY3QgdGhlIG5leHQgdGFnLgotICAgICAgLy8gRm9yIG5vbi1wYWNrZWQgcmVwZWF0ZWQgZmll
bGRzLCBleHBlY3QgdGhlIHNhbWUgdGFnIGFnYWluLgotICAgICAgaWYgKGxvb3BzKSB7Ci0gICAg
ICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICJpZiAoaW5wdXQtPkV4cGVjdFRhZygkdGFn
JCkpIGdvdG8gcGFyc2VfbG9vcF8kbmFtZSQ7XG4iLAotICAgICAgICAgICJ0YWciLCBTaW1wbGVJ
dG9hKFdpcmVGb3JtYXQ6Ok1ha2VUYWcoZmllbGQpKSwKLSAgICAgICAgICAibmFtZSIsIGZpZWxk
LT5uYW1lKCkpOwotICAgICAgfSBlbHNlIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSAmJiAhZmll
bGQtPmlzX3BhY2tlZCgpKSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICJp
ZiAoaW5wdXQtPkV4cGVjdFRhZygkdGFnJCkpIGdvdG8gcGFyc2VfJG5hbWUkO1xuIiwKLSAgICAg
ICAgICAidGFnIiwgU2ltcGxlSXRvYShXaXJlRm9ybWF0OjpNYWtlVGFnKGZpZWxkKSksCi0gICAg
ICAgICAgIm5hbWUiLCBmaWVsZC0+bmFtZSgpKTsKLSAgICAgIH0KLQotICAgICAgLy8gSGF2ZSB3
ZSBlbWl0dGVkICJpZiAoaW5wdXQtPkV4cGVjdFRhZygkbmV4dF90YWckKSkgLi4uIiB5ZXQ/Ci0g
ICAgICBib29sIGVtaXR0ZWRfZ290b19uZXh0X3RhZyA9IGZhbHNlOwotCi0gICAgICAvLyBGb3Ig
cmVwZWF0ZWQgbWVzc2FnZXMvZ3JvdXBzLCB3ZSBuZWVkIHRvIGRlY3JlbWVudCByZWN1cnNpb24g
ZGVwdGgsCi0gICAgICAvLyB1bmxlc3MgdGhlIG5leHQgdGFnIGlzIGFsc28gZm9yIGEgcmVwZWF0
ZWQgbWVzc2FnZS9ncm91cC4KLSAgICAgIGlmIChsb29wcykgewotICAgICAgICBpZiAobmV4dF9m
aWVsZF9sb29wcykgewotICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbmV4dF9maWVs
ZCA9IG9yZGVyZWRfZmllbGRzW2kgKyAxXTsKLSAgICAgICAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICAgICAgICJpZiAoaW5wdXQtPkV4cGVjdFRhZygkbmV4dF90YWckKSkgZ290byBwYXJzZV9s
b29wXyRuZXh0X25hbWUkO1xuIiwKLSAgICAgICAgICAgICJuZXh0X3RhZyIsIFNpbXBsZUl0b2Eo
V2lyZUZvcm1hdDo6TWFrZVRhZyhuZXh0X2ZpZWxkKSksCi0gICAgICAgICAgICAibmV4dF9uYW1l
IiwgbmV4dF9maWVsZC0+bmFtZSgpKTsKLSAgICAgICAgICBlbWl0dGVkX2dvdG9fbmV4dF90YWcg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICJp
bnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTtcbiIpOwotICAgICAgfQotCi0g
ICAgICAvLyBJZiB0aGVyZSBhcmUgbW9yZSBmaWVsZHMsIGV4cGVjdCB0aGUgbmV4dCBvbmUuCi0g
ICAgICBuZWVkX2xhYmVsID0gZmFsc2U7Ci0gICAgICBpZiAoIWVtaXR0ZWRfZ290b19uZXh0X3Rh
ZykgewotICAgICAgICBpZiAoaSArIDEgPT0gZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCkpIHsK
LSAgICAgICAgICAvLyBFeHBlY3QgRU9GLgotICAgICAgICAgIC8vIFRPRE8oa2VudG9uKTogIEV4
cGVjdCBncm91cCBlbmQtdGFnPwotICAgICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAg
ICAgImlmIChpbnB1dC0+RXhwZWN0QXRFbmQoKSkgZ290byBzdWNjZXNzO1xuIik7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBuZXh0X2ZpZWxkID0g
b3JkZXJlZF9maWVsZHNbaSArIDFdOwotICAgICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAg
ICAgICAgImlmIChpbnB1dC0+RXhwZWN0VGFnKCRuZXh0X3RhZyQpKSBnb3RvIHBhcnNlXyRuZXh0
X25hbWUkO1xuIiwKLSAgICAgICAgICAgICJuZXh0X3RhZyIsIFNpbXBsZUl0b2EoV2lyZUZvcm1h
dDo6TWFrZVRhZyhuZXh0X2ZpZWxkKSksCi0gICAgICAgICAgICAibmV4dF9uYW1lIiwgbmV4dF9m
aWVsZC0+bmFtZSgpKTsKLSAgICAgICAgICBuZWVkX2xhYmVsID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImJyZWFrO1xuIik7Ci0K
LSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgIHByaW50ZXItPlByaW50KCJ9XG5cbiIp
OwotICAgIH0KLQotICAgIHByaW50ZXItPlByaW50KCJkZWZhdWx0OiB7XG4iKTsKLSAgICBwcmlu
dGVyLT5JbmRlbnQoKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+
UHJpbnQoImhhbmRsZV91bnVzdWFsOlxuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotICAvLyBJ
ZiB0YWcgaXMgMCBvciBhbiBlbmQtZ3JvdXAgdGFnIHRoZW4gdGhpcyBtdXN0IGJlIHRoZSBlbmQg
b2YgdGhlIG1lc3NhZ2UuCi0gIHByaW50ZXItPlByaW50KAotICAgICJpZiAodGFnID09IDAgfHxc
biIKLSAgICAiICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpHZXRUYWdXaXJlVHlwZSh0YWcpID09XG4iCi0gICAgIiAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7XG4iCi0gICAg
IiAgZ290byBzdWNjZXNzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBIYW5kbGUgZXh0ZW5zaW9u
IHJhbmdlcy4KLSAgaWYgKGRlc2NyaXB0b3JfLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+IDAp
IHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJpZiAoIik7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCk7IGkrKykgewotICAg
ICAgY29uc3QgRGVzY3JpcHRvcjo6RXh0ZW5zaW9uUmFuZ2UqIHJhbmdlID0KLSAgICAgICAgZGVz
Y3JpcHRvcl8tPmV4dGVuc2lvbl9yYW5nZShpKTsKLSAgICAgIGlmIChpID4gMCkgcHJpbnRlci0+
UHJpbnQoIiB8fFxuICAgICIpOwotCi0gICAgICB1aW50MzIgc3RhcnRfdGFnID0gV2lyZUZvcm1h
dExpdGU6Ok1ha2VUYWcoCi0gICAgICAgIHJhbmdlLT5zdGFydCwgc3RhdGljX2Nhc3Q8V2lyZUZv
cm1hdExpdGU6OldpcmVUeXBlPigwKSk7Ci0gICAgICB1aW50MzIgZW5kX3RhZyA9IFdpcmVGb3Jt
YXRMaXRlOjpNYWtlVGFnKAotICAgICAgICByYW5nZS0+ZW5kLCBzdGF0aWNfY2FzdDxXaXJlRm9y
bWF0TGl0ZTo6V2lyZVR5cGU+KDApKTsKLQotICAgICAgaWYgKHJhbmdlLT5lbmQgPiBGaWVsZERl
c2NyaXB0b3I6OmtNYXhOdW1iZXIpIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAg
ICAgIigkc3RhcnQkdSA8PSB0YWcpIiwKLSAgICAgICAgICAic3RhcnQiLCBTaW1wbGVJdG9hKHN0
YXJ0X3RhZykpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICAgIigkc3RhcnQkdSA8PSB0YWcgJiYgdGFnIDwgJGVuZCR1KSIsCi0gICAgICAgICAgInN0
YXJ0IiwgU2ltcGxlSXRvYShzdGFydF90YWcpLAotICAgICAgICAgICJlbmQiLCBTaW1wbGVJdG9h
KGVuZF90YWcpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoIikge1xuIik7
Ci0gICAgaWYgKFByZXNlcnZlVW5rbm93bkZpZWxkcyhkZXNjcmlwdG9yXykpIHsKLSAgICAgIGlm
IChVc2VVbmtub3duRmllbGRTZXQoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0g
ICAgICAgIFByaW50SGFuZGxpbmdPcHRpb25hbFN0YXRpY0luaXRpYWxpemVycygKLSAgICAgICAg
ICAgIGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfLCBwcmludGVyLAotICAgICAgICAgICAg
Ly8gV2l0aCBzdGF0aWMgaW5pdGlhbGl6ZXJzLgotICAgICAgICAgICAgIiAgRE9fKF9leHRlbnNp
b25zXy5QYXJzZUZpZWxkKHRhZywgaW5wdXQsIGRlZmF1bHRfaW5zdGFuY2VfLFxuIgotICAgICAg
ICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGVfdW5rbm93bl9maWVs
ZHMoKSkpO1xuIiwKLSAgICAgICAgICAgIC8vIFdpdGhvdXQuCi0gICAgICAgICAgICAiICBET18o
X2V4dGVuc2lvbnNfLlBhcnNlRmllbGQodGFnLCBpbnB1dCwgJmRlZmF1bHRfaW5zdGFuY2UoKSxc
biIKLSAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhYmxlX3Vu
a25vd25fZmllbGRzKCkpKTtcbiIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgUHJpbnRIYW5k
bGluZ09wdGlvbmFsU3RhdGljSW5pdGlhbGl6ZXJzKAotICAgICAgICAgICAgZGVzY3JpcHRvcl8t
PmZpbGUoKSwgb3B0aW9uc18sIHByaW50ZXIsCi0gICAgICAgICAgICAvLyBXaXRoIHN0YXRpYyBp
bml0aWFsaXplcnMuCi0gICAgICAgICAgICAiICBET18oX2V4dGVuc2lvbnNfLlBhcnNlRmllbGQo
dGFnLCBpbnB1dCwgZGVmYXVsdF9pbnN0YW5jZV8sXG4iCi0gICAgICAgICAgICAiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnVua25vd25fZmllbGRzX3N0cmVhbSkpO1xuIiwKLSAgICAg
ICAgICAgIC8vIFdpdGhvdXQuCi0gICAgICAgICAgICAiICBET18oX2V4dGVuc2lvbnNfLlBhcnNl
RmllbGQodGFnLCBpbnB1dCwgJmRlZmF1bHRfaW5zdGFuY2UoKSxcbiIKLSAgICAgICAgICAgICIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdW5rbm93bl9maWVsZHNfc3RyZWFtKSk7XG4i
KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgUHJpbnRIYW5kbGluZ09wdGlvbmFsU3Rh
dGljSW5pdGlhbGl6ZXJzKAotICAgICAgICAgIGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNf
LCBwcmludGVyLAotICAgICAgICAgIC8vIFdpdGggc3RhdGljIGluaXRpYWxpemVycy4KLSAgICAg
ICAgICAiICBET18oX2V4dGVuc2lvbnNfLlBhcnNlRmllbGQodGFnLCBpbnB1dCwgZGVmYXVsdF9p
bnN0YW5jZV8pO1xuIiwKLSAgICAgICAgICAvLyBXaXRob3V0LgotICAgICAgICAgICIgIERPXyhf
ZXh0ZW5zaW9uc18uUGFyc2VGaWVsZCh0YWcsIGlucHV0LCAmZGVmYXVsdF9pbnN0YW5jZSgpKTtc
biIpOwotICAgIH0KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICIgIGNvbnRpbnVlO1xuIgot
ICAgICAgIn1cbiIpOwotICB9Ci0KLSAgLy8gV2UgcmVhbGx5IGRvbid0IHJlY29nbml6ZSB0aGlz
IHRhZy4gIFNraXAgaXQuCi0gIGlmIChQcmVzZXJ2ZVVua25vd25GaWVsZHMoZGVzY3JpcHRvcl8p
KSB7Ci0gICAgaWYgKFVzZVVua25vd25GaWVsZFNldChkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRp
b25zXykpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiRE9fKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNraXBGaWVsZChcbiIKLSAgICAgICAgIiAg
ICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpO1xuIik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiRE9fKDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTa2lwRmllbGQoXG4iCi0gICAgICAgICIg
ICAgaW5wdXQsIHRhZywgJnVua25vd25fZmllbGRzX3N0cmVhbSkpO1xuIik7Ci0gICAgfQotICB9
IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIkRPXyg6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U2tpcEZpZWxkKGlucHV0LCB0YWcpKTtcbiIp
OwotICB9Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpID4gMCkgewotICAgIHBy
aW50ZXItPlByaW50KCJicmVhaztcbiIpOwotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBw
cmludGVyLT5QcmludCgifVxuIik7ICAgIC8vIGRlZmF1bHQ6Ci0gICAgcHJpbnRlci0+T3V0ZGVu
dCgpOwotICAgIHByaW50ZXItPlByaW50KCJ9XG4iKTsgICAgLy8gc3dpdGNoCi0gIH0KLQotICBw
cmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJp
bnQoCi0gICAgIiAgfVxuIiAgICAgICAgICAgICAgICAgICAvLyBmb3IgKDs7KQotICAgICJzdWNj
ZXNzOlxuIgotICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNz
OiRmdWxsX25hbWUkKVxuIgotICAgICIgIHJldHVybiB0cnVlO1xuIgotICAgICJmYWlsdXJlOlxu
IgotICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9mYWlsdXJlOiRmdWxs
X25hbWUkKVxuIgotICAgICIgIHJldHVybiBmYWxzZTtcbiIKLSAgICAiI3VuZGVmIERPX1xuIgot
ICAgICJ9XG4iLCAiZnVsbF9uYW1lIiwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFtZSgpKTsKLX0KLQot
dm9pZCBNZXNzYWdlR2VuZXJhdG9yOjpHZW5lcmF0ZVNlcmlhbGl6ZU9uZUZpZWxkKAotICAgIGlv
OjpQcmludGVyKiBwcmludGVyLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBib29sIHRv
X2FycmF5KSB7Ci0gIFByaW50RmllbGRDb21tZW50KHByaW50ZXIsIGZpZWxkKTsKLQotICBib29s
IGhhdmVfZW5jbG9zaW5nX2lmID0gZmFsc2U7Ci0gIGlmICghZmllbGQtPmlzX3JlcGVhdGVkKCkg
JiYgSGFzRmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgImlmIChoYXNfJG5hbWUkKCkpIHtcbiIsCi0gICAgICAibmFtZSIsIEZp
ZWxkTmFtZShmaWVsZCkpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotICAgIGhhdmVfZW5jbG9z
aW5nX2lmID0gdHJ1ZTsKLSAgfSBlbHNlIGlmICghSGFzRmllbGRQcmVzZW5jZShkZXNjcmlwdG9y
Xy0+ZmlsZSgpKSkgewotICAgIGhhdmVfZW5jbG9zaW5nX2lmID0gRW1pdEZpZWxkTm9uRGVmYXVs
dENvbmRpdGlvbihwcmludGVyLCAidGhpcy0+IiwgZmllbGQpOwotICB9Ci0KLSAgaWYgKHRvX2Fy
cmF5KSB7Ci0gICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZVNlcmlhbGl6
ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgICAgIHByaW50ZXIpOwotICB9IGVsc2Ugewot
ICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChmaWVsZCkuR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXMocHJpbnRlcik7Ci0gIH0KLQotICBpZiAoaGF2ZV9lbmNsb3NpbmdfaWYpIHsKLSAg
ICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotICB9Ci0g
IHByaW50ZXItPlByaW50KCJcbiIpOwotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVy
YXRlU2VyaWFsaXplT25lRXh0ZW5zaW9uUmFuZ2UoCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIs
IGNvbnN0IERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlKiByYW5nZSwKLSAgICBib29sIHRvX2Fy
cmF5KSB7Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgdmFyc1sic3RhcnQiXSA9IFNp
bXBsZUl0b2EocmFuZ2UtPnN0YXJ0KTsKLSAgdmFyc1siZW5kIl0gPSBTaW1wbGVJdG9hKHJhbmdl
LT5lbmQpOwotICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICIvLyBFeHRlbnNpb24gcmFuZ2Ug
WyRzdGFydCQsICRlbmQkKVxuIik7Ci0gIGlmICh0b19hcnJheSkgewotICAgIHByaW50ZXItPlBy
aW50KHZhcnMsCi0gICAgICAidGFyZ2V0ID0gX2V4dGVuc2lvbnNfLlNlcmlhbGl6ZVdpdGhDYWNo
ZWRTaXplc1RvQXJyYXkoXG4iCi0gICAgICAiICAgICRzdGFydCQsICRlbmQkLCB0YXJnZXQpO1xu
XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgIl9leHRl
bnNpb25zXy5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoXG4iCi0gICAgICAiICAgICRzdGFydCQs
ICRlbmQkLCBvdXRwdXQpO1xuXG4iKTsKLSAgfQotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6
OgotR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoaW86OlByaW50ZXIqIHByaW50ZXIp
IHsKLSAgaWYgKGRlc2NyaXB0b3JfLT5vcHRpb25zKCkubWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQo
KSkgewotICAgIC8vIFNwZWNpYWwtY2FzZSBNZXNzYWdlU2V0LgotICAgIHByaW50ZXItPlByaW50
KAotICAgICAgInZvaWQgJGNsYXNzbmFtZSQ6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhcbiIK
LSAgICAgICIgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91
dHB1dCkgY29uc3Qge1xuIgotICAgICAgIiAgX2V4dGVuc2lvbnNfLlNlcmlhbGl6ZU1lc3NhZ2VT
ZXRXaXRoQ2FjaGVkU2l6ZXMob3V0cHV0KTtcbiIsCi0gICAgICAiY2xhc3NuYW1lIiwgY2xhc3Nu
YW1lXyk7Ci0gICAgR09PR0xFX0NIRUNLKFVzZVVua25vd25GaWVsZFNldChkZXNjcmlwdG9yXy0+
ZmlsZSgpLCBvcHRpb25zXykpOwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bk1lc3Nh
Z2VTZXRJdGVtcyhcbiIKLSAgICAgICIgICAgICB1bmtub3duX2ZpZWxkcygpLCBvdXRwdXQpO1xu
Iik7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAifVxuIik7Ci0gICAgcmV0dXJuOwotICB9
Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInZvaWQgJGNsYXNzbmFtZSQ6OlNlcmlhbGl6ZVdp
dGhDYWNoZWRTaXplcyhcbiIKLSAgICAiICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVk
T3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHtcbiIsCi0gICAgImNsYXNzbmFtZSIsIGNsYXNz
bmFtZV8pOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAi
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDokZnVsbF9uYW1lJClc
biIsCi0gICAgImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3JfLT5mdWxsX25hbWUoKSk7Ci0KLSAgR2Vu
ZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNCb2R5KHByaW50ZXIsIGZhbHNlKTsKLQotICBw
cmludGVyLT5QcmludCgKLSAgICAiLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6
ZV9lbmQ6JGZ1bGxfbmFtZSQpXG4iLAotICAgICJmdWxsX25hbWUiLCBkZXNjcmlwdG9yXy0+ZnVs
bF9uYW1lKCkpOwotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgIn1cbiIpOwotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxp
emVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGlmIChk
ZXNjcmlwdG9yXy0+b3B0aW9ucygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICAv
LyBTcGVjaWFsLWNhc2UgTWVzc2FnZVNldC4KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICI6
Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiAkY2xhc3NuYW1lJDo6U2VyaWFsaXplV2l0aENhY2hl
ZFNpemVzVG9BcnJheShcbiIKLSAgICAgICIgICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCog
dGFyZ2V0KSBjb25zdCB7XG4iCi0gICAgICAiICB0YXJnZXQgPVxuIgotICAgICAgIiAgICAgIF9l
eHRlbnNpb25zXy5TZXJpYWxpemVNZXNzYWdlU2V0V2l0aENhY2hlZFNpemVzVG9BcnJheSh0YXJn
ZXQpO1xuIiwKLSAgICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfKTsKLSAgICBHT09HTEVfQ0hF
Q0soVXNlVW5rbm93bkZpZWxkU2V0KGRlc2NyaXB0b3JfLT5maWxlKCksIG9wdGlvbnNfKSk7Ci0g
ICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0OjpcbiIKLSAgICAgICIgICAgICAgICAgICAgU2VyaWFsaXpl
VW5rbm93bk1lc3NhZ2VTZXRJdGVtc1RvQXJyYXkoXG4iCi0gICAgICAiICAgICAgICAgICAgICAg
dW5rbm93bl9maWVsZHMoKSwgdGFyZ2V0KTtcbiIpOwotICAgIHByaW50ZXItPlByaW50KAotICAg
ICAgIiAgcmV0dXJuIHRhcmdldDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgICByZXR1cm47Ci0gIH0K
LQotICBwcmludGVyLT5QcmludCgKLSAgICAiOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogJGNs
YXNzbmFtZSQ6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoXG4iCi0gICAgIiAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHtcbiIsCi0gICAgImNsYXNz
bmFtZSIsIGNsYXNzbmFtZV8pOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBwcmludGVyLT5Q
cmludCgKLSAgICAiLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJh
eV9zdGFydDokZnVsbF9uYW1lJClcbiIsCi0gICAgImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3JfLT5m
dWxsX25hbWUoKSk7Ci0KLSAgR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNCb2R5KHBy
aW50ZXIsIHRydWUpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICIvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDokZnVsbF9uYW1lJClcbiIsCi0gICAg
ImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3JfLT5mdWxsX25hbWUoKSk7Ci0KLSAgcHJpbnRlci0+T3V0
ZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiICByZXR1cm4gdGFyZ2V0O1xuIgotICAg
ICJ9XG4iKTsKLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXpl
V2l0aENhY2hlZFNpemVzQm9keShpbzo6UHJpbnRlciogcHJpbnRlciwgYm9vbCB0b19hcnJheSkg
ewotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfYXJyYXk8Y29uc3QgRmllbGREZXNjcmlwdG9y
ICogPiBvcmRlcmVkX2ZpZWxkcygKLSAgICAgIFNvcnRGaWVsZHNCeU51bWJlcihkZXNjcmlwdG9y
XykpOwotCi0gIHZlY3Rvcjxjb25zdCBEZXNjcmlwdG9yOjpFeHRlbnNpb25SYW5nZSo+IHNvcnRl
ZF9leHRlbnNpb25zOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5leHRlbnNp
b25fcmFuZ2VfY291bnQoKTsgKytpKSB7Ci0gICAgc29ydGVkX2V4dGVuc2lvbnMucHVzaF9iYWNr
KGRlc2NyaXB0b3JfLT5leHRlbnNpb25fcmFuZ2UoaSkpOwotICB9Ci0gIHN0ZDo6c29ydChzb3J0
ZWRfZXh0ZW5zaW9ucy5iZWdpbigpLCBzb3J0ZWRfZXh0ZW5zaW9ucy5lbmQoKSwKLSAgICAgICAg
ICAgIEV4dGVuc2lvblJhbmdlU29ydGVyKCkpOwotCi0gIC8vIE1lcmdlIHRoZSBmaWVsZHMgYW5k
IHRoZSBleHRlbnNpb24gcmFuZ2VzLCBib3RoIHNvcnRlZCBieSBmaWVsZCBudW1iZXIuCi0gIGlu
dCBpLCBqOwotICBmb3IgKGkgPSAwLCBqID0gMDsKLSAgICAgICBpIDwgZGVzY3JpcHRvcl8tPmZp
ZWxkX2NvdW50KCkgfHwgaiA8IHNvcnRlZF9leHRlbnNpb25zLnNpemUoKTsKLSAgICAgICApIHsK
LSAgICBpZiAoaSA9PSBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKSkgewotICAgICAgR2VuZXJh
dGVTZXJpYWxpemVPbmVFeHRlbnNpb25SYW5nZShwcmludGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWRfZXh0ZW5zaW9uc1tqKytdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19hcnJheSk7Ci0gICAgfSBlbHNlIGlm
IChqID09IHNvcnRlZF9leHRlbnNpb25zLnNpemUoKSkgewotICAgICAgR2VuZXJhdGVTZXJpYWxp
emVPbmVGaWVsZChwcmludGVyLCBvcmRlcmVkX2ZpZWxkc1tpKytdLCB0b19hcnJheSk7Ci0gICAg
fSBlbHNlIGlmIChvcmRlcmVkX2ZpZWxkc1tpXS0+bnVtYmVyKCkgPCBzb3J0ZWRfZXh0ZW5zaW9u
c1tqXS0+c3RhcnQpIHsKLSAgICAgIEdlbmVyYXRlU2VyaWFsaXplT25lRmllbGQocHJpbnRlciwg
b3JkZXJlZF9maWVsZHNbaSsrXSwgdG9fYXJyYXkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHZW5l
cmF0ZVNlcmlhbGl6ZU9uZUV4dGVuc2lvblJhbmdlKHByaW50ZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZF9leHRlbnNpb25zW2orK10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX2FycmF5KTsKLSAgICB9Ci0gIH0K
LQotICBpZiAoUHJlc2VydmVVbmtub3duRmllbGRzKGRlc2NyaXB0b3JfKSkgewotICAgIGlmIChV
c2VVbmtub3duRmllbGRTZXQoZGVzY3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAg
ICBwcmludGVyLT5QcmludCgiaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2Zp
ZWxkcygpKSB7XG4iKTsKLSAgICAgIHByaW50ZXItPkluZGVudCgpOwotICAgICAgaWYgKHRvX2Fy
cmF5KSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICJ0YXJnZXQgPSAiCi0g
ICAgICAgICAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpT
ZXJpYWxpemVVbmtub3duRmllbGRzVG9BcnJheShcbiIKLSAgICAgICAgICAiICAgIHVua25vd25f
ZmllbGRzKCksIHRhcmdldCk7XG4iKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzKFxuIgotICAgICAgICAgICIgICAgdW5rbm93bl9m
aWVsZHMoKSwgb3V0cHV0KTtcbiIpOwotICAgICAgfQotICAgICAgcHJpbnRlci0+T3V0ZGVudCgp
OwotCi0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIn1cbiIpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIm91dHB1dC0+V3JpdGVSYXcodW5rbm93
bl9maWVsZHMoKS5kYXRhKCksXG4iCi0gICAgICAgICIgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4odW5rbm93bl9maWVsZHMoKS5zaXplKCkpKTtcbiIpOwotICAgIH0KLSAgfQotfQot
Ci1zdGF0aWMgdmVjdG9yPHVpbnQzMj4gUmVxdWlyZWRGaWVsZHNCaXRNYXNrKGNvbnN0IERlc2Ny
aXB0b3IqIGRlc2MpIHsKLSAgdmVjdG9yPHVpbnQzMj4gcmVzdWx0OwotICB1aW50MzIgbWFzayA9
IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzYy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0g
ICAgaWYgKGkgPiAwICYmIGkgJSAzMiA9PSAwKSB7Ci0gICAgICByZXN1bHQucHVzaF9iYWNrKG1h
c2spOwotICAgICAgbWFzayA9IDA7Ci0gICAgfQotICAgIGlmIChkZXNjLT5maWVsZChpKS0+aXNf
cmVxdWlyZWQoKSkgewotICAgICAgbWFzayB8PSAoMSA8PCAoaSAmIDMxKSk7Ci0gICAgfQotICB9
Ci0gIGlmIChtYXNrICE9IDApIHsKLSAgICByZXN1bHQucHVzaF9iYWNrKG1hc2spOwotICB9Ci0g
IHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIENyZWF0ZSBhbiBleHByZXNzaW9uIHRoYXQgZXZhbHVh
dGVzIHRvCi0vLyAgImZvciBhbGwgaSwgKF9oYXNfYml0c19baV0gJiBtYXNrc1tpXSkgPT0gbWFz
a3NbaV0iCi0vLyBtYXNrcyBpcyBhbGxvd2VkIHRvIGJlIHNob3J0ZXIgdGhhbiBfaGFzX2JpdHNf
LCBidXQgYXQgbGVhc3Qgb25lIGVsZW1lbnQgb2YKLS8vIG1hc2tzIG11c3QgYmUgbm9uLXplcm8u
Ci1zdGF0aWMgc3RyaW5nIENvbmRpdGlvbmFsVG9DaGVja0JpdG1hc2tzKGNvbnN0IHZlY3Rvcjx1
aW50MzI+JiBtYXNrcykgewotICB2ZWN0b3I8c3RyaW5nPiBwYXJ0czsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtYXNrcy5zaXplKCk7IGkrKykgewotICAgIGlmIChtYXNrc1tpXSA9PSAwKSBjb250
aW51ZTsKLSAgICBzdHJpbmcgbSA9IFN0ckNhdCgiMHgiLCBzdHJpbmdzOjpIZXgobWFza3NbaV0s
IHN0cmluZ3M6OlpFUk9fUEFEXzgpKTsKLSAgICAvLyBFYWNoIHhvciBldmFsdWF0ZXMgdG8gMCBp
ZiB0aGUgZXhwZWN0ZWQgYml0cyBhcmUgcHJlc2VudC4KLSAgICBwYXJ0cy5wdXNoX2JhY2soU3Ry
Q2F0KCIoKF9oYXNfYml0c19bIiwgaSwgIl0gJiAiLCBtLCAiKSBeICIsIG0sICIpIikpOwotICB9
Ci0gIEdPT0dMRV9DSEVDSyghcGFydHMuZW1wdHkoKSk7Ci0gIC8vIElmIHdlIGhhdmUgbXVsdGlw
bGUgcGFydHMsIGVhY2ggZXhwZWN0ZWQgdG8gYmUgMCwgdGhlbiBiaXR3aXNlLW9yIHRoZW0uCi0g
IHN0cmluZyByZXN1bHQgPSBwYXJ0cy5zaXplKCkgPT0gMSA/IHBhcnRzWzBdIDoKLSAgICAgIFN0
ckNhdCgiKCIsIEpvaW4ocGFydHMsICJcbiAgICAgICB8ICIpLCAiKSIpOwotICByZXR1cm4gcmVz
dWx0ICsgIiA9PSAwIjsKLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnl0
ZVNpemUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaWYgKGRlc2NyaXB0b3JfLT5vcHRpb25z
KCkubWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSkgewotICAgIC8vIFNwZWNpYWwtY2FzZSBNZXNz
YWdlU2V0LgotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiaW50ICRjbGFzc25hbWUkOjpC
eXRlU2l6ZSgpIGNvbnN0IHtcbiIKLSAgICAgICAgIi8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChtZXNzYWdlX3NldF9ieXRlX3NpemVfc3RhcnQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAgICIg
IGludCB0b3RhbF9zaXplID0gX2V4dGVuc2lvbnNfLk1lc3NhZ2VTZXRCeXRlU2l6ZSgpO1xuIiwK
LSAgICAgICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZV8sICJmdWxsX25hbWUiLCBkZXNjcmlwdG9y
Xy0+ZnVsbF9uYW1lKCkpOwotICAgIEdPT0dMRV9DSEVDSyhVc2VVbmtub3duRmllbGRTZXQoZGVz
Y3JpcHRvcl8tPmZpbGUoKSwgb3B0aW9uc18pKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICJpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHtcbiIKLSAg
ICAgICIgIHRvdGFsX3NpemUgKz0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdDo6XG4iCi0gICAgICAiICAgICAgQ29tcHV0ZVVua25vd25NZXNzYWdlU2V0SXRlbXNTaXpl
KHVua25vd25fZmllbGRzKCkpO1xuIgotICAgICAgIn1cbiIpOwotICAgIHByaW50ZXItPlByaW50
KAotICAgICAgIiAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTtcbiIKLSAg
ICAgICIgIF9jYWNoZWRfc2l6ZV8gPSB0b3RhbF9zaXplO1xuIgotICAgICAgIiAgR09PR0xFX1NB
RkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7XG4iCi0gICAgICAiICByZXR1cm4gdG90YWxfc2l6
ZTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAobnVtX3JlcXVp
cmVkX2ZpZWxkc18gPiAxICYmIEhhc0ZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkp
IHsKLSAgICAvLyBFbWl0IGEgZnVuY3Rpb24gKHJhcmVseSB1c2VkLCB3ZSBob3BlKSB0aGF0IGhh
bmRsZXMgdGhlIHJlcXVpcmVkIGZpZWxkcwotICAgIC8vIGJ5IGNoZWNraW5nIGZvciBlYWNoIG9u
ZSBpbmRpdmlkdWFsbHkuCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJpbnQgJGNsYXNz
bmFtZSQ6OlJlcXVpcmVkRmllbGRzQnl0ZVNpemVGYWxsYmFjaygpIGNvbnN0IHtcbiIKLSAgICAg
ICAgIi8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChyZXF1aXJlZF9maWVsZHNfYnl0ZV9zaXpl
X2ZhbGxiYWNrX3N0YXJ0OiIKLSAgICAgICAgIiRmdWxsX25hbWUkKVxuIiwKLSAgICAgICAgImNs
YXNzbmFtZSIsIGNsYXNzbmFtZV8sICJmdWxsX25hbWUiLCBkZXNjcmlwdG9yXy0+ZnVsbF9uYW1l
KCkpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KCJpbnQgdG90
YWxfc2l6ZSA9IDA7XG4iKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5m
aWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQg
PSBkZXNjcmlwdG9yXy0+ZmllbGQoaSk7Ci0gICAgICBpZiAoZmllbGQtPmlzX3JlcXVpcmVkKCkp
IHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQoIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
aWYgKGhhc18kbmFtZSQoKSkge1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBG
aWVsZE5hbWUoZmllbGQpKTsKLSAgICAgICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAgICAgIFBy
aW50RmllbGRDb21tZW50KHByaW50ZXIsIGZpZWxkKTsKLSAgICAgICAgZmllbGRfZ2VuZXJhdG9y
c18uZ2V0KGZpZWxkKS5HZW5lcmF0ZUJ5dGVTaXplKHByaW50ZXIpOwotICAgICAgICBwcmludGVy
LT5PdXRkZW50KCk7Ci0gICAgICAgIHByaW50ZXItPlByaW50KCJ9XG4iKTsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIgotICAgICAgICAgICAgICAgICAgICJyZXR1cm4g
dG90YWxfc2l6ZTtcbiIpOwotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5Q
cmludCgifVxuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAgICJpbnQgJGNsYXNz
bmFtZSQ6OkJ5dGVTaXplKCkgY29uc3Qge1xuIgotICAgICAgIi8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDokZnVsbF9uYW1lJClcbiIsCi0gICAgICAi
Y2xhc3NuYW1lIiwgY2xhc3NuYW1lXywgImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3JfLT5mdWxsX25h
bWUoKSk7Ci0gIHByaW50ZXItPkluZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiaW50
IHRvdGFsX3NpemUgPSAwO1xuIgotICAgICJcbiIpOwotCi0gIC8vIEhhbmRsZSByZXF1aXJlZCBm
aWVsZHMgKGlmIGFueSkuICBXZSBleHBlY3QgYWxsIG9mIHRoZW0gdG8gYmUKLSAgLy8gcHJlc2Vu
dCwgc28gZW1pdCBvbmUgY29uZGl0aW9uYWwgdGhhdCBjaGVja3MgZm9yIHRoYXQuICBJZiB0aGV5
IGFyZSBhbGwKLSAgLy8gcHJlc2VudCB0aGVuIHRoZSBmYXN0IHBhdGggZXhlY3V0ZXM7IG90aGVy
d2lzZSB0aGUgc2xvdyBwYXRoIGV4ZWN1dGVzLgotICBpZiAobnVtX3JlcXVpcmVkX2ZpZWxkc18g
PiAxICYmIEhhc0ZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICAvLyBU
aGUgZmFzdCBwYXRoIHdvcmtzIGlmIGFsbCByZXF1aXJlZCBmaWVsZHMgYXJlIHByZXNlbnQuCi0g
ICAgdmVjdG9yPHVpbnQzMj4gbWFza3NfZm9yX2hhc19iaXRzID0gUmVxdWlyZWRGaWVsZHNCaXRN
YXNrKGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCgoc3RyaW5nKCJpZiAoIikgKwot
ICAgICAgICAgICAgICAgICAgICBDb25kaXRpb25hbFRvQ2hlY2tCaXRtYXNrcyhtYXNrc19mb3Jf
aGFzX2JpdHMpICsKLSAgICAgICAgICAgICAgICAgICAgIikgeyAgLy8gQWxsIHJlcXVpcmVkIGZp
ZWxkcyBhcmUgcHJlc2VudC5cbiIpLmNfc3RyKCkpOwotICAgIHByaW50ZXItPkluZGVudCgpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykg
ewotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVs
ZChpKTsKLSAgICAgIGlmICghZmllbGQtPmlzX3JlcXVpcmVkKCkpIGNvbnRpbnVlOwotICAgICAg
UHJpbnRGaWVsZENvbW1lbnQocHJpbnRlciwgZmllbGQpOwotICAgICAgZmllbGRfZ2VuZXJhdG9y
c18uZ2V0KGZpZWxkKS5HZW5lcmF0ZUJ5dGVTaXplKHByaW50ZXIpOwotICAgICAgcHJpbnRlci0+
UHJpbnQoIlxuIik7Ci0gICAgfQotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVy
LT5QcmludCgifSBlbHNlIHtcbiIgIC8vIHRoZSBzbG93IHBhdGgKLSAgICAgICAgICAgICAgICAg
ICAiICB0b3RhbF9zaXplICs9IFJlcXVpcmVkRmllbGRzQnl0ZVNpemVGYWxsYmFjaygpO1xuIgot
ICAgICAgICAgICAgICAgICAgICJ9XG4iKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBudW1fcmVxdWly
ZWRfZmllbGRzXyA8PSAxOiBubyBuZWVkIHRvIGJlIHRyaWNreQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVsZChpKTsKLSAgICAgIGlmICgh
ZmllbGQtPmlzX3JlcXVpcmVkKCkpIGNvbnRpbnVlOwotICAgICAgUHJpbnRGaWVsZENvbW1lbnQo
cHJpbnRlciwgZmllbGQpOwotICAgICAgcHJpbnRlci0+UHJpbnQoImlmIChoYXNfJG5hbWUkKCkp
IHtcbiIsCi0gICAgICAgICAgICAgICAgICAgICAibmFtZSIsIEZpZWxkTmFtZShmaWVsZCkpOwot
ICAgICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmll
bGQpLkdlbmVyYXRlQnl0ZVNpemUocHJpbnRlcik7Ci0gICAgICBwcmludGVyLT5PdXRkZW50KCk7
Ci0gICAgICBwcmludGVyLT5QcmludCgifVxuIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gSGFuZGxl
IG9wdGlvbmFsIGZpZWxkcyAod29ycnkgYmVsb3cgYWJvdXQgcmVwZWF0ZWRzLCBvbmVvZnMsIGV0
Yy4pLgotICAvLyBUaGVzZSBhcmUgaGFuZGxlZCBpbiBjaHVua3Mgb2YgOC4gIFRoZSBmaXJzdCBj
aHVuayBpcwotICAvLyB0aGUgbm9uLXJlcXVpcmVkcy1ub24tcmVwZWF0ZWRzLW5vbi11bmlvbnMt
bm9uLWV4dGVuc2lvbnMgaW4KLSAgLy8gIGRlc2NyaXB0b3JfLT5maWVsZCgwKSwgZGVzY3JpcHRv
cl8tPmZpZWxkKDEpLCAuLi4gZGVzY3JpcHRvcl8tPmZpZWxkKDcpLAotICAvLyBhbmQgdGhlIHNl
Y29uZCBjaHVuayBpcyB0aGUgc2FtZSBmb3IKLSAgLy8gIGRlc2NyaXB0b3JfLT5maWVsZCg4KSwg
ZGVzY3JpcHRvcl8tPmZpZWxkKDkpLCAuLi4gZGVzY3JpcHRvcl8tPmZpZWxkKDE1KSwKLSAgLy8g
ZXRjLgotICBoYXNoX21hcDxpbnQsIHVpbnQzMj4gZmllbGRzX21hc2tfZm9yX2NodW5rOwotICBm
b3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwot
ICAgIGlmICghZmllbGQtPmlzX3JlcXVpcmVkKCkgJiYgIWZpZWxkLT5pc19yZXBlYXRlZCgpICYm
Ci0gICAgICAgICFmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgICBmaWVsZHNfbWFz
a19mb3JfY2h1bmtbaSAvIDhdIHw9IHN0YXRpY19jYXN0PHVpbnQzMj4oMSkgPDwgKGkgJSAzMik7
Ci0gICAgfQotICB9Ci0KLSAgaW50IGxhc3RfaW5kZXggPSAtMTsKLSAgYm9vbCBjaHVua19ibG9j
a19pbl9wcm9ncmVzcyA9IGZhbHNlOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3Jf
LT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
ID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotICAgIGlmICghZmllbGQtPmlzX3JlcXVpcmVkKCkg
JiYgIWZpZWxkLT5pc19yZXBlYXRlZCgpICYmCi0gICAgICAgICFmaWVsZC0+Y29udGFpbmluZ19v
bmVvZigpKSB7Ci0gICAgICAvLyBTZWUgYWJvdmUgaW4gR2VuZXJhdGVDbGVhciBmb3IgYW4gZXhw
bGFuYXRpb24gb2YgdGhpcy4KLSAgICAgIC8vIFRPRE8oa2VudG9uKTogIFNoYXJlIGNvZGU/ICBV
bmNsZWFyIGhvdyB0byBkbyBzbyB3aXRob3V0Ci0gICAgICAvLyAgIG92ZXItZW5naW5lZXJpbmcu
Ci0gICAgICBpZiAoaSAvIDggIT0gbGFzdF9pbmRleCAvIDggfHwgbGFzdF9pbmRleCA8IDApIHsK
LSAgICAgICAgLy8gRW5kIHByZXZpb3VzIGNodW5rLCBpZiB0aGVyZSB3YXMgb25lLgotICAgICAg
ICBpZiAoY2h1bmtfYmxvY2tfaW5fcHJvZ3Jlc3MpIHsKLSAgICAgICAgICBwcmludGVyLT5PdXRk
ZW50KCk7Ci0gICAgICAgICAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotICAgICAgICAgIGNodW5r
X2Jsb2NrX2luX3Byb2dyZXNzID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU3RhcnQg
Y2h1bmsuCi0gICAgICAgIHVpbnQzMiBtYXNrID0gZmllbGRzX21hc2tfZm9yX2NodW5rW2kgLyA4
XTsKLSAgICAgICAgaW50IGNvdW50ID0gcG9wY250KG1hc2spOwotICAgICAgICBHT09HTEVfRENI
RUNLX0dFKGNvdW50LCAxKTsKLSAgICAgICAgaWYgKGNvdW50ID09IDEpIHsKLSAgICAgICAgICAv
LyBObyAiaWYiIGhlcmUgYmVjYXVzZSB0aGUgY2h1bmsgaXMgdHJpdmlhbC4KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBpZiAoSGFzRmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgp
KSkgewotICAgICAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgICAgICJpZiAoX2hh
c19iaXRzX1skaW5kZXgkIC8gMzJdICYgJG1hc2skdSkge1xuIiwKLSAgICAgICAgICAgICAgImlu
ZGV4IiwgU2ltcGxlSXRvYShpKSwKLSAgICAgICAgICAgICAgIm1hc2siLCBTaW1wbGVJdG9hKG1h
c2spKTsKLSAgICAgICAgICAgIHByaW50ZXItPkluZGVudCgpOwotICAgICAgICAgICAgY2h1bmtf
YmxvY2tfaW5fcHJvZ3Jlc3MgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
fQotICAgICAgbGFzdF9pbmRleCA9IGk7Ci0KLSAgICAgIFByaW50RmllbGRDb21tZW50KHByaW50
ZXIsIGZpZWxkKTsKLQotICAgICAgYm9vbCBoYXZlX2VuY2xvc2luZ19pZiA9IGZhbHNlOwotICAg
ICAgaWYgKEhhc0ZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICAgICAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgImlmIChoYXNfJG5hbWUkKCkpIHtcbiIsCi0gICAg
ICAgICAgIm5hbWUiLCBGaWVsZE5hbWUoZmllbGQpKTsKLSAgICAgICAgcHJpbnRlci0+SW5kZW50
KCk7Ci0gICAgICAgIGhhdmVfZW5jbG9zaW5nX2lmID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIFdpdGhvdXQgZmllbGQgcHJlc2VuY2U6IGZpZWxkIGlzIHNlcmlhbGl6ZWQgb25s
eSBpZiBpdCBoYXMgYQotICAgICAgICAvLyBub24tZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgaGF2
ZV9lbmNsb3NpbmdfaWYgPSBFbWl0RmllbGROb25EZWZhdWx0Q29uZGl0aW9uKAotICAgICAgICAg
ICAgcHJpbnRlciwgInRoaXMtPiIsIGZpZWxkKTsKLSAgICAgIH0KLQotICAgICAgZmllbGRfZ2Vu
ZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZUJ5dGVTaXplKHByaW50ZXIpOwotCi0gICAgICBp
ZiAoaGF2ZV9lbmNsb3NpbmdfaWYpIHsKLSAgICAgICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAg
ICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAifVxuIgotICAgICAgICAgICJcbiIpOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmIChjaHVua19ibG9ja19pbl9wcm9ncmVzcykgewot
ICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgifVxuIik7Ci0gIH0K
LQotICAvLyBSZXBlYXRlZCBmaWVsZHMgZG9uJ3QgdXNlIF9oYXNfYml0c18gc28gd2UgY291bnQg
dGhlbSBpbiBhIHNlcGFyYXRlCi0gIC8vIHBhc3MuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVz
Y3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQgPSBkZXNjcmlwdG9yXy0+ZmllbGQoaSk7Ci0KLSAgICBpZiAoZmllbGQtPmlzX3Jl
cGVhdGVkKCkpIHsKLSAgICAgIFByaW50RmllbGRDb21tZW50KHByaW50ZXIsIGZpZWxkKTsKLSAg
ICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChmaWVsZCkuR2VuZXJhdGVCeXRlU2l6ZShwcmludGVy
KTsKLSAgICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICAgIH0KLSAgfQotCi0gIC8vIEZpZWxk
cyBpbnNpZGUgYSBvbmVvZiBkb24ndCB1c2UgX2hhc19iaXRzXyBzbyB3ZSBjb3VudCB0aGVtIGlu
IGEgc2VwYXJhdGUKLSAgLy8gcGFzcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9y
Xy0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgInN3aXRjaCAoJG9uZW9mbmFtZSRfY2FzZSgpKSB7XG4iLAotICAgICAgICAib25lb2ZuYW1l
IiwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPm5hbWUoKSk7Ci0gICAgcHJpbnRlci0+SW5k
ZW50KCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChp
KS0+ZmllbGRfY291bnQoKTsgaisrKSB7Ci0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkID0gZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPmZpZWxkKGopOwotICAgICAgUHJpbnRG
aWVsZENvbW1lbnQocHJpbnRlciwgZmllbGQpOwotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICAgImNhc2UgayRmaWVsZF9uYW1lJDoge1xuIiwKLSAgICAgICAgICAiZmllbGRfbmFtZSIs
IFVuZGVyc2NvcmVzVG9DYW1lbENhc2UoZmllbGQtPm5hbWUoKSwgdHJ1ZSkpOwotICAgICAgcHJp
bnRlci0+SW5kZW50KCk7Ci0gICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpLkdlbmVy
YXRlQnl0ZVNpemUocHJpbnRlcik7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAi
YnJlYWs7XG4iKTsKLSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgIHByaW50ZXItPlBy
aW50KAotICAgICAgICAgICJ9XG4iKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICJjYXNlICRjYXBfb25lb2ZfbmFtZSRfTk9UX1NFVDoge1xuIgotICAgICAgICAiICBicmVh
aztcbiIKLSAgICAgICAgIn1cbiIsCi0gICAgICAgICJjYXBfb25lb2ZfbmFtZSIsCi0gICAgICAg
IFRvVXBwZXIoZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPm5hbWUoKSkpOwotICAgIHByaW50
ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIn1cbiIpOwotICB9
Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+IDApIHsKLSAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICJ0b3RhbF9zaXplICs9IF9leHRlbnNpb25zXy5CeXRl
U2l6ZSgpO1xuIgotICAgICAgIlxuIik7Ci0gIH0KLQotICBpZiAoUHJlc2VydmVVbmtub3duRmll
bGRzKGRlc2NyaXB0b3JfKSkgewotICAgIGlmIChVc2VVbmtub3duRmllbGRTZXQoZGVzY3JpcHRv
cl8tPmZpbGUoKSwgb3B0aW9uc18pKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAg
ImlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkge1xuIgotICAg
ICAgICAiICB0b3RhbF9zaXplICs9XG4iCi0gICAgICAgICIgICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6Q29tcHV0ZVVua25vd25GaWVsZHNTaXplKFxuIgotICAg
ICAgICAiICAgICAgdW5rbm93bl9maWVsZHMoKSk7XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgICB9
IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJ0b3RhbF9zaXplICs9IHVu
a25vd25fZmllbGRzKCkuc2l6ZSgpO1xuIgotICAgICAgICAiXG4iKTsKLSAgICB9Ci0gIH0KLQot
ICAvLyBXZSB1cGRhdGUgX2NhY2hlZF9zaXplXyBldmVuIHRob3VnaCB0aGlzIGlzIGEgY29uc3Qg
bWV0aG9kLiAgSW4gdGhlb3J5LAotICAvLyB0aGlzIGlzIG5vdCB0aHJlYWQtY29tcGF0aWJsZSwg
YmVjYXVzZSBjb25jdXJyZW50IHdyaXRlcyBoYXZlIHVuZGVmaW5lZAotICAvLyByZXN1bHRzLiAg
SW4gcHJhY3RpY2UsIHNpbmNlIGFueSBjb25jdXJyZW50IHdyaXRlcyB3aWxsIGJlIHdyaXRpbmcg
dGhlCi0gIC8vIGV4YWN0IHNhbWUgdmFsdWUsIGl0IHdvcmtzIG9uIGFsbCBjb21tb24gcHJvY2Vz
c29ycy4gIEluIGEgZnV0dXJlIHZlcnNpb24KLSAgLy8gb2YgQysrLCBfY2FjaGVkX3NpemVfIHNo
b3VsZCBiZSBtYWRlIGludG8gYW4gYXRvbWljPGludD4uCi0gIHByaW50ZXItPlByaW50KAotICAg
ICJHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpO1xuIgotICAgICJfY2FjaGVk
X3NpemVfID0gdG90YWxfc2l6ZTtcbiIKLSAgICAiR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklU
RVNfRU5EKCk7XG4iCi0gICAgInJldHVybiB0b3RhbF9zaXplO1xuIik7Ci0KLSAgcHJpbnRlci0+
T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZUlzSW5pdGlhbGl6ZWQoaW86OlByaW50ZXIqIHByaW50ZXIpIHsK
LSAgcHJpbnRlci0+UHJpbnQoCi0gICAgImJvb2wgJGNsYXNzbmFtZSQ6OklzSW5pdGlhbGl6ZWQo
KSBjb25zdCB7XG4iLAotICAgICJjbGFzc25hbWUiLCBjbGFzc25hbWVfKTsKLSAgcHJpbnRlci0+
SW5kZW50KCk7Ci0KLSAgaWYgKEhhc0ZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkp
IHsKLSAgICAvLyBDaGVjayB0aGF0IGFsbCByZXF1aXJlZCBmaWVsZHMgaW4gdGhpcyBtZXNzYWdl
IGFyZSBzZXQuICBXZSBjYW4gZG8gdGhpcwotICAgIC8vIG1vc3QgZWZmaWNpZW50bHkgYnkgY2hl
Y2tpbmcgMzIgImhhcyBiaXRzIiBhdCBhIHRpbWUuCi0gICAgaW50IGhhc19iaXRzX2FycmF5X3Np
emUgPSAoZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCkgKyAzMSkgLyAzMjsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGhhc19iaXRzX2FycmF5X3NpemU7IGkrKykgewotICAgICAgdWludDMyIG1h
c2sgPSAwOwotICAgICAgZm9yIChpbnQgYml0ID0gMDsgYml0IDwgMzI7IGJpdCsrKSB7Ci0gICAg
ICAgIGludCBpbmRleCA9IGkgKiAzMiArIGJpdDsKLSAgICAgICAgaWYgKGluZGV4ID49IGRlc2Ny
aXB0b3JfLT5maWVsZF9jb3VudCgpKSBicmVhazsKLSAgICAgICAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVsZChpbmRleCk7Ci0KLSAgICAgICAgaWYgKGZp
ZWxkLT5pc19yZXF1aXJlZCgpKSB7Ci0gICAgICAgICAgbWFzayB8PSAxIDw8IGJpdDsKLSAgICAg
ICAgfQotICAgICAgfQotCi0gICAgICBpZiAobWFzayAhPSAwKSB7Ci0gICAgICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgICAgICJpZiAoKF9oYXNfYml0c19bJGkkXSAmIDB4JG1hc2skKSAhPSAw
eCRtYXNrJCkgcmV0dXJuIGZhbHNlO1xuIiwKLSAgICAgICAgICAiaSIsIFNpbXBsZUl0b2EoaSks
Ci0gICAgICAgICAgIm1hc2siLCBTdHJDYXQoc3RyaW5nczo6SGV4KG1hc2ssIHN0cmluZ3M6OlpF
Uk9fUEFEXzgpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gTm93IGNoZWNrIHRoYXQg
YWxsIGVtYmVkZGVkIG1lc3NhZ2VzIGFyZSBpbml0aWFsaXplZC4KLSAgcHJpbnRlci0+UHJpbnQo
IlxuIik7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7
IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+
ZmllbGQoaSk7Ci0gICAgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9NRVNTQUdFICYmCi0gICAgICAgICFTaG91bGRJZ25vcmVSZXF1aXJlZEZpZWxkQ2hl
Y2soZmllbGQsIG9wdGlvbnNfKSAmJgotICAgICAgICBIYXNSZXF1aXJlZEZpZWxkcyhmaWVsZC0+
bWVzc2FnZV90eXBlKCksIG9wdGlvbnNfKSkgewotICAgICAgaWYgKGZpZWxkLT5pc19yZXBlYXRl
ZCgpKSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICJpZiAoITo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkFsbEFyZUluaXRpYWxpemVkKHRoaXMtPiRuYW1lJCgpKSki
Ci0gICAgICAgICAgIiByZXR1cm4gZmFsc2U7XG4iLAotICAgICAgICAgICJuYW1lIiwgRmllbGRO
YW1lKGZpZWxkKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoZmllbGQtPm9wdGlvbnMo
KS53ZWFrKCkgfHwgIWZpZWxkLT5jb250YWluaW5nX29uZW9mKCkpIHsKLSAgICAgICAgICAvLyBG
b3Igd2VhayBmaWVsZHMsIHVzZSB0aGUgZGF0YSBtZW1iZXIgKDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZSopIGluc3RlYWQKLSAgICAgICAgICAvLyBvZiB0aGUgZ2V0dGVyIHRvIGF2b2lkIGEg
bGluayBkZXBlbmRlbmN5IG9uIHRoZSB3ZWFrIG1lc3NhZ2UgdHlwZQotICAgICAgICAgIC8vIHdo
aWNoIGlzIG9ubHkgZm9yd2FyZCBkZWNsYXJlZC4KLSAgICAgICAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICAgICAgICAgImlmIChoYXNfJG5hbWUkKCkpIHtcbiIKLSAgICAgICAgICAgICAgIiAg
aWYgKCF0aGlzLT4kbmFtZSRfLT5Jc0luaXRpYWxpemVkKCkpIHJldHVybiBmYWxzZTtcbiIKLSAg
ICAgICAgICAgICAgIn1cbiIsCi0gICAgICAgICAgICAibmFtZSIsIEZpZWxkTmFtZShmaWVsZCkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAg
ICAgImlmIChoYXNfJG5hbWUkKCkpIHtcbiIKLSAgICAgICAgICAgICIgIGlmICghdGhpcy0+JG5h
bWUkKCkuSXNJbml0aWFsaXplZCgpKSByZXR1cm4gZmFsc2U7XG4iCi0gICAgICAgICAgICAifVxu
IiwKLSAgICAgICAgICAgICJuYW1lIiwgRmllbGROYW1lKGZpZWxkKSk7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9yYW5nZV9j
b3VudCgpID4gMCkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIlxuIgotICAgICAgImlm
ICghX2V4dGVuc2lvbnNfLklzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuIGZhbHNlOyIpOwotICB9Ci0K
LSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiICByZXR1cm4g
dHJ1ZTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLQotfSAgLy8gbmFtZXNwYWNlIGNwcAotfSAgLy8g
bmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVz
cGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAv
Y3BwX21lc3NhZ2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3Nh
Z2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEyMjNlMTNmZjRkNzM5NTk0MGE0
ZmIwNGNkMGM0ODE1M2YyMzAzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tZXNzYWdlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkK
LS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNh
bmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9Q
Uk9UT0JVRl9DT01QSUxFUl9DUFBfTUVTU0FHRV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVG
X0NPTVBJTEVSX0NQUF9NRVNTQUdFX0hfXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBf
U0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIu
aD4KLSNlbmRpZgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9vcHRpb25zLmg+Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLSAgbmFtZXNwYWNlIGlvIHsKLSAgICBjbGFzcyBQ
cmludGVyOyAgICAgICAgICAgICAvLyBwcmludGVyLmgKLSAgfQotfQotCi1uYW1lc3BhY2UgcHJv
dG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBjcHAgewotCi1jbGFzcyBF
bnVtR2VuZXJhdG9yOyAgICAgICAgICAgLy8gZW51bS5oCi1jbGFzcyBFeHRlbnNpb25HZW5lcmF0
b3I7ICAgICAgLy8gZXh0ZW5zaW9uLmgKLQotY2xhc3MgTWVzc2FnZUdlbmVyYXRvciB7Ci0gcHVi
bGljOgotICAvLyBTZWUgZ2VuZXJhdG9yLmNjIGZvciB0aGUgbWVhbmluZyBvZiBkbGxleHBvcnRf
ZGVjbC4KLSAgTWVzc2FnZUdlbmVyYXRvcihjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBj
b25zdCBPcHRpb25zJiBvcHRpb25zKTsKLSAgfk1lc3NhZ2VHZW5lcmF0b3IoKTsKLQotICAvLyBI
ZWFkZXIgc3R1ZmYuCi0KLSAgLy8gUmV0dXJuIG5hbWVzIGZvciBmb3dhcmQgZGVjbGFyYXRpb25z
IG9mIHRoaXMgY2xhc3MgYW5kIGFsbCBpdHMgbmVzdGVkCi0gIC8vIHR5cGVzLiBBIGdpdmVuIGtl
eSBpbiB7Y2xhc3MsZW51bX1fbmFtZXMgd2lsbCBtYXAgZnJvbSBhIGNsYXNzIG5hbWUgdG8gdGhl
Ci0gIC8vIGRlc2NyaXB0b3IgdGhhdCB3YXMgcmVzcG9uc2libGUgZm9yIGl0cyBpbmNsdXNpb24g
aW4gdGhlIG1hcC4gVGhpcyBjYW4gYmUKLSAgLy8gdXNlZCB0byBhc3NvY2lhdGUgdGhlIGRlc2Ny
aXB0b3Igd2l0aCB0aGUgY29kZSBnZW5lcmF0ZWQgZm9yIGl0LgotICB2b2lkIEZpbGxNZXNzYWdl
Rm9yd2FyZERlY2xhcmF0aW9ucygKLSAgICAgIG1hcDxzdHJpbmcsIGNvbnN0IERlc2NyaXB0b3Iq
PiogY2xhc3NfbmFtZXMpOwotICB2b2lkIEZpbGxFbnVtRm9yd2FyZERlY2xhcmF0aW9ucygKLSAg
ICAgIG1hcDxzdHJpbmcsIGNvbnN0IEVudW1EZXNjcmlwdG9yKj4qIGVudW1fbmFtZXMpOwotCi0g
IC8vIEdlbmVyYXRlIGRlZmluaXRpb25zIG9mIGFsbCBuZXN0ZWQgZW51bXMgKG11c3QgY29tZSBi
ZWZvcmUgY2xhc3MKLSAgLy8gZGVmaW5pdGlvbnMgYmVjYXVzZSB0aG9zZSBjbGFzc2VzIHVzZSB0
aGUgZW51bXMgZGVmaW5pdGlvbnMpLgotICB2b2lkIEdlbmVyYXRlRW51bURlZmluaXRpb25zKGlv
OjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBHZW5lcmF0ZSBzcGVjaWFsaXphdGlvbnMgb2Yg
R2V0RW51bURlc2NyaXB0b3I8TXlFbnVtPigpLgotICAvLyBQcmVjb25kaXRpb246IGluIDo6Z29v
Z2xlOjpwcm90b2J1ZiBuYW1lc3BhY2UuCi0gIHZvaWQgR2VuZXJhdGVHZXRFbnVtRGVzY3JpcHRv
clNwZWNpYWxpemF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8gR2VuZXJhdGUg
ZGVmaW5pdGlvbnMgZm9yIHRoaXMgY2xhc3MgYW5kIGFsbCBpdHMgbmVzdGVkIHR5cGVzLgotICB2
b2lkIEdlbmVyYXRlQ2xhc3NEZWZpbml0aW9uKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAv
LyBHZW5lcmF0ZSBkZWZpbml0aW9ucyBvZiBpbmxpbmUgbWV0aG9kcyAocGxhY2VkIGF0IHRoZSBl
bmQgb2YgdGhlIGhlYWRlcgotICAvLyBmaWxlKS4KLSAgdm9pZCBHZW5lcmF0ZUlubGluZU1ldGhv
ZHMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgaXNfaW5saW5lKTsKLQotICAvLyBEZXBlbmRl
bnQgbWV0aG9kcyBhcmUgYWx3YXlzIGlubGluZS4KLSAgdm9pZCBHZW5lcmF0ZURlcGVuZGVudElu
bGluZU1ldGhvZHMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIC8vIFNvdXJjZSBmaWxlIHN0
dWZmLgotCi0gIC8vIEdlbmVyYXRlIGNvZGUgd2hpY2ggZGVjbGFyZXMgYWxsIHRoZSBnbG9iYWwg
ZGVzY3JpcHRvciBwb2ludGVycyB3aGljaAotICAvLyB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRo
ZSBtZXRob2RzIGJlbG93LgotICB2b2lkIEdlbmVyYXRlRGVzY3JpcHRvckRlY2xhcmF0aW9ucyhp
bzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8gR2VuZXJhdGUgY29kZSB0aGF0IGluaXRpYWxp
emVzIHRoZSBnbG9iYWwgdmFyaWFibGUgc3RvcmluZyB0aGUgbWVzc2FnZSdzCi0gIC8vIGRlc2Ny
aXB0b3IuCi0gIHZvaWQgR2VuZXJhdGVEZXNjcmlwdG9ySW5pdGlhbGl6ZXIoaW86OlByaW50ZXIq
IHByaW50ZXIsIGludCBpbmRleCk7Ci0KLSAgLy8gR2VuZXJhdGUgY29kZSB0aGF0IGNhbGxzIE1l
c3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgpCi0gIC8vIGZv
ciBhbGwgdHlwZXMuCi0gIHZvaWQgR2VuZXJhdGVUeXBlUmVnaXN0cmF0aW9ucyhpbzo6UHJpbnRl
ciogcHJpbnRlcik7Ci0KLSAgLy8gR2VuZXJhdGVzIGNvZGUgdGhhdCBhbGxvY2F0ZXMgdGhlIG1l
c3NhZ2UncyBkZWZhdWx0IGluc3RhbmNlLgotICB2b2lkIEdlbmVyYXRlRGVmYXVsdEluc3RhbmNl
QWxsb2NhdG9yKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBHZW5lcmF0ZXMgY29kZSB0
aGF0IGluaXRpYWxpemVzIHRoZSBtZXNzYWdlJ3MgZGVmYXVsdCBpbnN0YW5jZS4gIFRoaXMKLSAg
Ly8gaXMgc2VwYXJhdGUgZnJvbSBhbGxvY2F0aW5nIGJlY2F1c2UgYWxsIGRlZmF1bHQgaW5zdGFu
Y2VzIG11c3QgYmUKLSAgLy8gYWxsb2NhdGVkIGJlZm9yZSBhbnkgY2FuIGJlIGluaXRpYWxpemVk
LgotICB2b2lkIEdlbmVyYXRlRGVmYXVsdEluc3RhbmNlSW5pdGlhbGl6ZXIoaW86OlByaW50ZXIq
IHByaW50ZXIpOwotCi0gIC8vIEdlbmVyYXRlcyBjb2RlIHRoYXQgc2hvdWxkIGJlIHJ1biB3aGVu
IFNodXRkb3duUHJvdG9idWZMaWJyYXJ5KCkgaXMgY2FsbGVkLAotICAvLyB0byBkZWxldGUgYWxs
IGR5bmFtaWNhbGx5LWFsbG9jYXRlZCBvYmplY3RzLgotICB2b2lkIEdlbmVyYXRlU2h1dGRvd25D
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBHZW5lcmF0ZSBhbGwgbm9uLWlubGlu
ZSBtZXRob2RzIGZvciB0aGlzIGNsYXNzLgotICB2b2lkIEdlbmVyYXRlQ2xhc3NNZXRob2RzKGlv
OjpQcmludGVyKiBwcmludGVyKTsKLQotIHByaXZhdGU6Ci0gIC8vIEdlbmVyYXRlIGRlY2xhcmF0
aW9ucyBhbmQgZGVmaW5pdGlvbnMgb2YgYWNjZXNzb3JzIGZvciBmaWVsZHMuCi0gIHZvaWQgR2Vu
ZXJhdGVEZXBlbmRlbnRCYXNlQ2xhc3NEZWZpbml0aW9uKGlvOjpQcmludGVyKiBwcmludGVyKTsK
LSAgdm9pZCBHZW5lcmF0ZURlcGVuZGVudEZpZWxkQWNjZXNzb3JEZWNsYXJhdGlvbnMoaW86OlBy
aW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlRmllbGRBY2Nlc3NvckRlY2xhcmF0aW9u
cyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVEZXBlbmRlbnRGaWVsZEFj
Y2Vzc29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRl
RmllbGRBY2Nlc3NvckRlZmluaXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyLCBib29sIGlzX2lu
bGluZSk7Ci0KLSAgLy8gR2VuZXJhdGUgdGhlIGZpZWxkIG9mZnNldHMgYXJyYXkuCi0gIHZvaWQg
R2VuZXJhdGVPZmZzZXRzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBHZW5lcmF0ZSBj
b25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IuCi0gIHZvaWQgR2VuZXJhdGVTdHJ1Y3RvcnMoaW86
OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIC8vIFRoZSBjb21waWxlciB0eXBpY2FsbHkgZ2VuZXJh
dGVzIG11bHRpcGxlIGNvcGllcyBvZiBlYWNoIGNvbnN0cnVjdG9yIGFuZAotICAvLyBkZXN0cnVj
dG9yOiBodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sI25vbmJ1Z3NfY3h4Ci0gIC8vIFBsYWNp
bmcgY29tbW9uIGNvZGUgaW4gYSBzZXBhcmF0ZSBtZXRob2QgcmVkdWNlcyB0aGUgZ2VuZXJhdGVk
IGNvZGUgc2l6ZS4KLSAgLy8KLSAgLy8gR2VuZXJhdGUgdGhlIHNoYXJlZCBjb25zdHJ1Y3RvciBj
b2RlLgotICB2b2lkIEdlbmVyYXRlU2hhcmVkQ29uc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKTsKLSAgLy8gR2VuZXJhdGUgdGhlIHNoYXJlZCBkZXN0cnVjdG9yIGNvZGUuCi0gIHZv
aWQgR2VuZXJhdGVTaGFyZWREZXN0cnVjdG9yQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0g
IC8vIEdlbmVyYXRlIHRoZSBhcmVuYS1zcGVjaWZpYyBkZXN0cnVjdG9yIGNvZGUuCi0gIHZvaWQg
R2VuZXJhdGVBcmVuYURlc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAv
LyBHZW5lcmF0ZSBzdGFuZGFyZCBNZXNzYWdlIG1ldGhvZHMuCi0gIHZvaWQgR2VuZXJhdGVDbGVh
cihpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVPbmVvZkNsZWFyKGlvOjpQ
cmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtKGlv
OjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplcyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXNUb0FycmF5KGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0
ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc0JvZHkoaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdG9fYXJyYXkpOwot
ICB2b2lkIEdlbmVyYXRlQnl0ZVNpemUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdl
bmVyYXRlTWVyZ2VGcm9tKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZUNv
cHlGcm9tKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZVN3YXAoaW86OlBy
aW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlSXNJbml0aWFsaXplZChpbzo6UHJpbnRl
ciogcHJpbnRlcik7Ci0KLSAgLy8gSGVscGVycyBmb3IgR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXMoKS4KLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZU9uZUZpZWxkKGlvOjpQcmludGVy
KiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
dW5ib3VuZGVkKTsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZU9uZUV4dGVuc2lvblJhbmdlKAot
ICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsIGNvbnN0IERlc2NyaXB0b3I6OkV4dGVuc2lvblJh
bmdlKiByYW5nZSwKLSAgICAgIGJvb2wgdW5ib3VuZGVkKTsKLQotCi0gIC8vIEdlbmVyYXRlcyBo
YXNfZm9vKCkgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZm9yIHNpbmd1bGFyIGZpZWxkIGhhcy1i
aXRzLgotICB2b2lkIEdlbmVyYXRlU2luZ3VsYXJGaWVsZEhhc0JpdHMoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxz
dHJpbmcsIHN0cmluZz4gdmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgLy8gR2VuZXJhdGVzIGhhc19mb28oKSBmdW5jdGlv
bnMgYW5kIHZhcmlhYmxlcyBmb3Igb25lb2YgZmllbGQgaGFzLWJpdHMuCi0gIHZvaWQgR2VuZXJh
dGVPbmVvZkhhc0JpdHMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgaXNfaW5saW5lKTsKLSAg
Ly8gR2VuZXJhdGVzIGhhc19mb29fYmFyKCkgZnVuY3Rpb25zIGZvciBvbmVvZiBtZW1iZXJzLgot
ICB2b2lkIEdlbmVyYXRlT25lb2ZNZW1iZXJIYXNCaXRzKGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPHN0cmlu
Zywgc3RyaW5nPiYgdmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6
UHJpbnRlciogcHJpbnRlcik7Ci0gIC8vIEdlbmVyYXRlcyB0aGUgY2xlYXJfZm9vKCkgbWV0aG9k
IGZvciBhIGZpZWxkLgotICB2b2lkIEdlbmVyYXRlRmllbGRDbGVhcihjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8c3RyaW5n
LCBzdHJpbmc+JiB2YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciog
cHJpbnRlcik7Ci0KLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIHN0cmluZyBj
bGFzc25hbWVfOwotICBPcHRpb25zIG9wdGlvbnNfOwotICBGaWVsZEdlbmVyYXRvck1hcCBmaWVs
ZF9nZW5lcmF0b3JzXzsKLSAgdmVjdG9yPCB2ZWN0b3I8c3RyaW5nPiA+IHJ1bnNfb2ZfZmllbGRz
XzsgIC8vIHRoYXQgbWlnaHQgYmUgdHJpdmlhbGx5IGNsZWFyZWQKLSAgZ29vZ2xlOjpwcm90b2J1
Zjo6c2NvcGVkX2FycmF5PGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8TWVzc2FnZUdlbmVy
YXRvcj4gPiBuZXN0ZWRfZ2VuZXJhdG9yc187Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9h
cnJheTxnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPEVudW1HZW5lcmF0b3I+ID4gZW51bV9n
ZW5lcmF0b3JzXzsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX2FycmF5PGdvb2dsZTo6cHJv
dG9idWY6OnNjb3BlZF9wdHI8RXh0ZW5zaW9uR2VuZXJhdG9yPiA+IGV4dGVuc2lvbl9nZW5lcmF0
b3JzXzsKLSAgaW50IG51bV9yZXF1aXJlZF9maWVsZHNfOwotICBib29sIHVzZXNfc3RyaW5nXzsK
LSAgYm9vbCB1c2VfZGVwZW5kZW50X2Jhc2VfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NP
TlNUUlVDVE9SUyhNZXNzYWdlR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAK
LX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVS
X0NQUF9NRVNTQUdFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfbWVzc2FnZV9maWVsZC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
cHAvY3BwX21lc3NhZ2VfZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMz
MmMwMjY0ZmM5ZDA1NDdiYTFiMzUxYzFiMmNkMjkyOTI2NGY0NTYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfbWVzc2FnZV9maWVsZC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwNTUgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9u
QGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2Nv
bCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQg
b3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfbWVz
c2FnZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3Bw
X2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3Bh
Y2UgY3BwIHsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBTZXRNZXNzYWdlVmFyaWFibGVzKGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBt
YXA8c3RyaW5nLCBzdHJpbmc+KiB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgT3B0aW9ucyYgb3B0aW9ucykgewotICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhkZXNj
cmlwdG9yLCB2YXJpYWJsZXMsIG9wdGlvbnMpOwotICAoKnZhcmlhYmxlcylbInR5cGUiXSA9IEZp
ZWxkTWVzc2FnZVR5cGVOYW1lKGRlc2NyaXB0b3IpOwotICBpZiAoZGVzY3JpcHRvci0+b3B0aW9u
cygpLndlYWsoKSB8fCAhZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgKCp2
YXJpYWJsZXMpWyJub25fbnVsbF9wdHJfdG9fbmFtZSJdID0KLSAgICAgICAgU3RyQ2F0KCJ0aGlz
LT4iLCAoKnZhcmlhYmxlcylbIm5hbWUiXSwgIl8iKTsKLSAgfQotICAoKnZhcmlhYmxlcylbInN0
cmVhbV93cml0ZXIiXSA9Ci0gICAgICAoKnZhcmlhYmxlcylbImRlY2xhcmVkX3R5cGUiXSArCi0g
ICAgICAoSGFzRmFzdEFycmF5U2VyaWFsaXphdGlvbihkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUo
KS0+ZmlsZSgpLCBvcHRpb25zKQotICAgICAgICAgICA/ICJNYXliZVRvQXJyYXkiCi0gICAgICAg
ICAgIDogIiIpOwotICAvLyBOT1RFOiBFc2NhcGVkIGhlcmUgdG8gdW5ibG9jayBwcm90bzEtPnBy
b3RvMiBtaWdyYXRpb24uCi0gIC8vIFRPRE8obGl1amlzaSk6IEV4dGVuZCB0aGlzIHRvIGFwcGx5
IGZvciBvdGhlciBjb25mbGljdGluZyBtZXRob2RzLgotICAoKnZhcmlhYmxlcylbInJlbGVhc2Vf
bmFtZSJdID0KLSAgICAgIFNhZmVGdW5jdGlvbk5hbWUoZGVzY3JpcHRvci0+Y29udGFpbmluZ190
eXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IsICJyZWxlYXNlXyIpOwot
ICAoKnZhcmlhYmxlcylbImZ1bGxfbmFtZSJdID0gZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCk7Ci0g
IGlmIChvcHRpb25zLnByb3RvX2ggJiYgSXNGaWVsZERlcGVuZGVudChkZXNjcmlwdG9yKSkgewot
ICAgICgqdmFyaWFibGVzKVsiZGVwZW5kZW50X3R5cGUiXSA9ICJUOjoiICsgRGVwZW5kZW50VHlw
ZU5hbWUoZGVzY3JpcHRvcik7Ci0gICAgKCp2YXJpYWJsZXMpWyJkZXBlbmRlbnRfdHlwZW5hbWUi
XSA9Ci0gICAgICAgICJ0eXBlbmFtZSBUOjoiICsgRGVwZW5kZW50VHlwZU5hbWUoZGVzY3JpcHRv
cik7Ci0gIH0gZWxzZSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJkZXBlbmRlbnRfdHlwZSJdID0gRmll
bGRNZXNzYWdlVHlwZU5hbWUoZGVzY3JpcHRvcik7Ci0gICAgKCp2YXJpYWJsZXMpWyJkZXBlbmRl
bnRfdHlwZW5hbWUiXSA9IEZpZWxkTWVzc2FnZVR5cGVOYW1lKGRlc2NyaXB0b3IpOwotICB9Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU1lc3NhZ2VGaWVsZEdlbmVy
YXRvcjo6TWVzc2FnZUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3Jp
cHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBGaWVsZEdlbmVyYXRvcihvcHRpb25zKSwKLSAgICAg
IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpLAotICAgICAgZGVwZW5kZW50X2ZpZWxkXyhvcHRpb25z
LnByb3RvX2ggJiYgSXNGaWVsZERlcGVuZGVudChkZXNjcmlwdG9yKSkgewotICBTZXRNZXNzYWdl
VmFyaWFibGVzKGRlc2NyaXB0b3IsICZ2YXJpYWJsZXNfLCBvcHRpb25zKTsKLX0KLQotTWVzc2Fn
ZUZpZWxkR2VuZXJhdG9yOjp+TWVzc2FnZUZpZWxkR2VuZXJhdG9yKCkge30KLQotdm9pZCBNZXNz
YWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVQcml2YXRlTWVtYmVycyhpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiJHR5cGUkKiAk
bmFtZSRfO1xuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRl
R2V0dGVyRGVjbGFyYXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRlZF9hdHRyJGNvbnN0ICR0eXBl
JCYgJG5hbWUkKCkgY29uc3Q7XG4iKTsKLX0KLQotdm9pZCBNZXNzYWdlRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVEZXBlbmRlbnRBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgewotICBpZiAoIWRlcGVuZGVudF9maWVsZF8pIHsKLSAgICByZXR1cm47Ci0g
IH0KLSAgLy8gQXJlbmEgbWFuaXB1bGF0aW9uIGNvZGUgaXMgb3V0LW9mLWxpbmUgaW4gdGhlIGRl
cml2ZWQgbWVzc2FnZSBjbGFzcy4KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
JGRlcHJlY2F0ZWRfYXR0ciQkdHlwZSQqIG11dGFibGVfJG5hbWUkKCk7XG4iCi0gICAgIiRkZXBy
ZWNhdGVkX2F0dHIkJHR5cGUkKiAkcmVsZWFzZV9uYW1lJCgpO1xuIgotICAgICIkZGVwcmVjYXRl
ZF9hdHRyJHZvaWQgc2V0X2FsbG9jYXRlZF8kbmFtZSQoJHR5cGUkKiAkbmFtZSQpO1xuIik7Ci19
Ci0KLXZvaWQgTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQWNjZXNzb3JEZWNsYXJh
dGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRzQXJlbmFz
KGRlc2NyaXB0b3JfKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAg
InByaXZhdGU6XG4iCi0gICAgICAgInZvaWQgX3Nsb3dfbXV0YWJsZV8kbmFtZSQoKTtcbiIpOwot
ICAgIGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlwdG9yXy0+bWVzc2FnZV90eXBlKCkpKSB7Ci0g
ICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICJ2b2lkIF9zbG93X3NldF9h
bGxvY2F0ZWRfJG5hbWUkKFxuIgotICAgICAgICIgICAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YSogbWVzc2FnZV9hcmVuYSwgJHR5cGUkKiogJG5hbWUkKTtcbiIpOwotICAgIH0KLSAgICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICIkdHlwZSQqIF9zbG93XyRyZWxlYXNlX25h
bWUkKCk7XG4iCi0gICAgICAgInB1YmxpYzpcbiIpOwotICB9Ci0gIEdlbmVyYXRlR2V0dGVyRGVj
bGFyYXRpb24ocHJpbnRlcik7Ci0gIGlmICghZGVwZW5kZW50X2ZpZWxkXykgewotICAgIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0ZWRfYXR0ciQkdHlwZSQqIG11
dGFibGVfJG5hbWUkKCk7XG4iCi0gICAgICAiJGRlcHJlY2F0ZWRfYXR0ciQkdHlwZSQqICRyZWxl
YXNlX25hbWUkKCk7XG4iCi0gICAgICAiJGRlcHJlY2F0ZWRfYXR0ciR2b2lkIHNldF9hbGxvY2F0
ZWRfJG5hbWUkKCR0eXBlJCogJG5hbWUkKTtcbiIpOwotICB9Ci0gIGlmIChTdXBwb3J0c0FyZW5h
cyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
IiRkZXByZWNhdGVkX2F0dHIkJHR5cGUkKiB1bnNhZmVfYXJlbmFfcmVsZWFzZV8kbmFtZSQoKTtc
biIKLSAgICAgICIkZGVwcmVjYXRlZF9hdHRyJHZvaWQgdW5zYWZlX2FyZW5hX3NldF9hbGxvY2F0
ZWRfJG5hbWUkKFxuIgotICAgICAgIiAgICAkdHlwZSQqICRuYW1lJCk7XG4iKTsKLSAgfQotfQot
Ci12b2lkIE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVOb25JbmxpbmVBY2Nlc3NvckRl
ZmluaXRpb25zKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChTdXBw
b3J0c0FyZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICAgInZvaWQgJGNsYXNzbmFtZSQ6Ol9zbG93X211dGFibGVfJG5hbWUkKCkge1xuIik7
Ci0gICAgICBpZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8tPm1lc3NhZ2VfdHlwZSgpKSkg
ewotICAgICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAgICIgICRuYW1l
JF8gPSA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOjpDcmVhdGVNZXNzYWdlPCAkdHlwZSQgPihc
biIKLSAgICAgICAgICAiICAgICAgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7XG4iKTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAgICAgIiAg
JG5hbWUkXyA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmE6OkNyZWF0ZTwgJHR5cGUkID4oXG4i
Ci0gICAgICAgICAgIiAgICAgIEdldEFyZW5hTm9WaXJ0dWFsKCkpO1xuIik7Ci0gICAgICB9Ci0g
ICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJ9XG4iCi0gICAgICAiJHR5cGUk
KiAkY2xhc3NuYW1lJDo6X3Nsb3dfJHJlbGVhc2VfbmFtZSQoKSB7XG4iCi0gICAgICAiICBpZiAo
JG5hbWUkXyA9PSBOVUxMKSB7XG4iCi0gICAgICAiICAgIHJldHVybiBOVUxMO1xuIgotICAgICAg
IiAgfSBlbHNlIHtcbiIKLSAgICAgICIgICAgJHR5cGUkKiB0ZW1wID0gbmV3ICR0eXBlJDtcbiIK
LSAgICAgICIgICAgdGVtcC0+TWVyZ2VGcm9tKCokbmFtZSRfKTtcbiIKLSAgICAgICIgICAgJG5h
bWUkXyA9IE5VTEw7XG4iCi0gICAgICAiICAgIHJldHVybiB0ZW1wO1xuIgotICAgICAgIiAgfVxu
IgotICAgICAgIn1cbiIKLSAgICAgICIkdHlwZSQqICRjbGFzc25hbWUkOjp1bnNhZmVfYXJlbmFf
cmVsZWFzZV8kbmFtZSQoKSB7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfdW5zYWZlX2FyZW5hX3JlbGVhc2U6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICAk
Y2xlYXJfaGFzYml0JFxuIgotICAgICAgIiAgJHR5cGUkKiB0ZW1wID0gJG5hbWUkXztcbiIKLSAg
ICAgICIgICRuYW1lJF8gPSBOVUxMO1xuIgotICAgICAgIiAgcmV0dXJuIHRlbXA7XG4iCi0gICAg
ICAifVxuIik7Ci0gICAgaWYgKFN1cHBvcnRzQXJlbmFzKGRlc2NyaXB0b3JfLT5tZXNzYWdlX3R5
cGUoKSkpIHsKLSAgICAgIC8vIE5PVEU6IHRoZSBzYW1lIGxvZ2ljIGlzIG1pcnJvcmVkIGluIHdl
YWtfbWVzc2FnZV9maWVsZC5jYy4gQW55Ci0gICAgICAvLyBhcmVuYS1yZWxhdGVkIHNlbWFudGlj
cyBjaGFuZ2VzIHNob3VsZCBiZSBtYWRlIGluIGJvdGggcGxhY2VzLgotICAgICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgICAidm9pZCAkY2xhc3NuYW1lJDo6X3Nsb3dfc2V0
X2FsbG9jYXRlZF8kbmFtZSQoXG4iCi0gICAgICAgICAgIiAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OkFyZW5hKiBtZXNzYWdlX2FyZW5hLCAkdHlwZSQqKiAkbmFtZSQpIHtcbiIKLSAgICAgICAgICAi
ICAgIGlmIChtZXNzYWdlX2FyZW5hICE9IE5VTEwgJiYgXG4iCi0gICAgICAgICAgIiAgICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6R2V0QXJlbmEoKiRuYW1lJCkgPT0gTlVMTCkge1xu
IgotICAgICAgICAgICIgICAgICBtZXNzYWdlX2FyZW5hLT5Pd24oKiRuYW1lJCk7XG4iCi0gICAg
ICAgICAgIiAgICB9IGVsc2UgaWYgKG1lc3NhZ2VfYXJlbmEgIT1cbiIKLSAgICAgICAgICAiICAg
ICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6R2V0QXJlbmEoKiRuYW1lJCkp
IHtcbiIKLSAgICAgICAgICAiICAgICAgJHR5cGUkKiBuZXdfJG5hbWUkID0gXG4iCi0gICAgICAg
ICAgIiAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmE6OkNyZWF0ZU1lc3NhZ2U8
ICR0eXBlJCA+KFxuIgotICAgICAgICAgICIgICAgICAgICAgICBtZXNzYWdlX2FyZW5hKTtcbiIK
LSAgICAgICAgICAiICAgICAgbmV3XyRuYW1lJC0+Q29weUZyb20oKiokbmFtZSQpO1xuIgotICAg
ICAgICAgICIgICAgICAqJG5hbWUkID0gbmV3XyRuYW1lJDtcbiIKLSAgICAgICAgICAiICAgIH1c
biIKLSAgICAgICAgICAifVxuIik7Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgICAidm9pZCAkY2xhc3NuYW1lJDo6dW5zYWZlX2FyZW5hX3NldF9hbGxvY2F0ZWRf
JG5hbWUkKFxuIgotICAgICAgIiAgICAkdHlwZSQqICRuYW1lJCkge1xuIgotICAgICAgLy8gSWYg
d2UncmUgbm90IG9uIGFuIGFyZW5hLCBmcmVlIHdoYXRldmVyIHdlIHdlcmUgaG9sZGluZyBiZWZv
cmUuCi0gICAgICAvLyAoSWYgd2UgYXJlIG9uIGFyZW5hLCB3ZSBjYW4ganVzdCBmb3JnZXQgdGhl
IGVhcmxpZXIgcG9pbnRlci4pCi0gICAgICAiICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBO
VUxMKSB7XG4iCi0gICAgICAiICAgIGRlbGV0ZSAkbmFtZSRfO1xuIgotICAgICAgIiAgfVxuIgot
ICAgICAgIiAgJG5hbWUkXyA9ICRuYW1lJDtcbiIKLSAgICAgICIgIGlmICgkbmFtZSQpIHtcbiIK
LSAgICAgICIgICAgJHNldF9oYXNiaXQkXG4iCi0gICAgICAiICB9IGVsc2Uge1xuIgotICAgICAg
IiAgICAkY2xlYXJfaGFzYml0JFxuIgotICAgICAgIiAgfVxuIgotICAgICAgIiAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Vuc2FmZV9hcmVuYV9zZXRfYWxsb2NhdGVkIgotICAg
ICAgIjokZnVsbF9uYW1lJClcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotfQotCi12b2lkIE1lc3Nh
Z2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZURlcGVuZGVudElubGluZUFjY2Vzc29yRGVmaW5p
dGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKCFkZXBlbmRlbnRfZmll
bGRfKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJs
ZXModmFyaWFibGVzXyk7Ci0gIC8vIEZvciB0aGUgQ1JUUCBiYXNlIGNsYXNzLCBhbGwgbXV0YXRp
b24gbWV0aG9kcyBhcmUgZGVwZW5kZW50LCBhbmQgc28KLSAgLy8gdGhleSBtdXN0IGJlIGluIHRo
ZSBoZWFkZXIuCi0gIHZhcmlhYmxlc1siZGVwZW5kZW50X2NsYXNzbmFtZSJdID0KLSAgICAgIERl
cGVuZGVudEJhc2VDbGFzc1RlbXBsYXRlTmFtZShkZXNjcmlwdG9yXy0+Y29udGFpbmluZ190eXBl
KCkpICsgIjxUPiI7Ci0gIHZhcmlhYmxlc1sidGhpc19tZXNzYWdlIl0gPSBEZXBlbmRlbnRCYXNl
RG93bkNhc3QoKTsKLSAgaWYgKCF2YXJpYWJsZXNbInNldF9oYXNiaXQiXS5lbXB0eSgpKSB7Ci0g
ICAgdmFyaWFibGVzWyJzZXRfaGFzYml0Il0gPQotICAgICAgICB2YXJpYWJsZXNbInRoaXNfbWVz
c2FnZSJdICsgdmFyaWFibGVzWyJzZXRfaGFzYml0Il07Ci0gIH0KLSAgaWYgKCF2YXJpYWJsZXNb
ImNsZWFyX2hhc2JpdCJdLmVtcHR5KCkpIHsKLSAgICB2YXJpYWJsZXNbImNsZWFyX2hhc2JpdCJd
ID0KLSAgICAgICAgdmFyaWFibGVzWyJ0aGlzX21lc3NhZ2UiXSArIHZhcmlhYmxlc1siY2xlYXJf
aGFzYml0Il07Ci0gIH0KLQotICBpZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pKSB7Ci0g
ICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICAgInRlbXBsYXRlIDxjbGFzcyBUPlxu
IgotICAgICAgImlubGluZSAkdHlwZSQqICRkZXBlbmRlbnRfY2xhc3NuYW1lJDo6bXV0YWJsZV8k
bmFtZSQoKSB7XG4iCi0gICAgICAiICAkc2V0X2hhc2JpdCRcbiIKLSAgICAgICIgICRkZXBlbmRl
bnRfdHlwZW5hbWUkKiYgJG5hbWUkXyA9ICR0aGlzX21lc3NhZ2UkJG5hbWUkXztcbiIKLSAgICAg
ICIgIGlmICgkbmFtZSRfID09IE5VTEwpIHtcbiIKLSAgICAgICIgICAgJHRoaXNfbWVzc2FnZSRf
c2xvd19tdXRhYmxlXyRuYW1lJCgpO1xuIgotICAgICAgIiAgfVxuIgotICAgICAgIiAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6JGZ1bGxfbmFtZSQpXG4iCi0gICAg
ICAiICByZXR1cm4gJG5hbWUkXztcbiIKLSAgICAgICJ9XG4iCi0gICAgICAidGVtcGxhdGUgPGNs
YXNzIFQ+XG4iCi0gICAgICAiaW5saW5lICR0eXBlJCogJGRlcGVuZGVudF9jbGFzc25hbWUkOjok
cmVsZWFzZV9uYW1lJCgpIHtcbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9yZWxlYXNlOiRmdWxsX25hbWUkKVxuIgotICAgICAgIiAgJGRlcGVuZGVudF90eXBl
bmFtZSQqJiAkbmFtZSRfID0gJHRoaXNfbWVzc2FnZSQkbmFtZSRfO1xuIgotICAgICAgIiAgJGNs
ZWFyX2hhc2JpdCRcbiIKLSAgICAgICIgIGlmICgkdGhpc19tZXNzYWdlJEdldEFyZW5hTm9WaXJ0
dWFsKCkgIT0gTlVMTCkge1xuIgotICAgICAgIiAgICByZXR1cm4gJHRoaXNfbWVzc2FnZSRfc2xv
d18kcmVsZWFzZV9uYW1lJCgpO1xuIgotICAgICAgIiAgfSBlbHNlIHtcbiIKLSAgICAgICIgICAg
JGRlcGVuZGVudF90eXBlbmFtZSQqIHRlbXAgPSAkbmFtZSRfO1xuIgotICAgICAgIiAgICAkbmFt
ZSRfID0gTlVMTDtcbiIKLSAgICAgICIgICAgcmV0dXJuIHRlbXA7XG4iCi0gICAgICAiICB9XG4i
Ci0gICAgICAifVxuIgotICAgICAgInRlbXBsYXRlIDxjbGFzcyBUPlxuIgotICAgICAgImlubGlu
ZSB2b2lkICRkZXBlbmRlbnRfY2xhc3NuYW1lJDo6IgotICAgICAgInNldF9hbGxvY2F0ZWRfJG5h
bWUkKCR0eXBlJCogJG5hbWUkKSB7XG4iCi0gICAgICAiICA6Omdvb2dsZTo6cHJvdG9idWY6OkFy
ZW5hKiBtZXNzYWdlX2FyZW5hID0gJHRoaXNfbWVzc2FnZSRHZXRBcmVuYU5vVmlydHVhbCgpO1xu
IgotICAgICAgIiAgJGRlcGVuZGVudF90eXBlbmFtZSQqJiAkbmFtZSRfID0gJHRoaXNfbWVzc2Fn
ZSQkbmFtZSRfO1xuIgotICAgICAgIiAgaWYgKG1lc3NhZ2VfYXJlbmEgPT0gTlVMTCkge1xuIgot
ICAgICAgIiAgICBkZWxldGUgJG5hbWUkXztcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIGlm
ICgkbmFtZSQgIT0gTlVMTCkge1xuIik7Ci0gICAgaWYgKFN1cHBvcnRzQXJlbmFzKGRlc2NyaXB0
b3JfLT5tZXNzYWdlX3R5cGUoKSkpIHsKLSAgICAgIC8vIElmIHdlJ3JlIG9uIGFuIGFyZW5hIGFu
ZCB0aGUgaW5jb21pbmcgbWVzc2FnZSBpcyBub3QsIHNpbXBseSBPd24oKSBpdAotICAgICAgLy8g
cmF0aGVyIHRoYW4gY29weSB0byB0aGUgYXJlbmEgLS0gZWl0aGVyIHdheSB3ZSBuZWVkIGEgaGVh
cCBkZWFsbG9jLAotICAgICAgLy8gc28gd2UgbWlnaHQgYXMgd2VsbCBkZWZlciBpdC4gT3RoZXJ3
aXNlLCBpZiBpbmNvbWluZyBtZXNzYWdlIGlzIG9uIGEKLSAgICAgIC8vIGRpZmZlcmVudCBvd25l
cnNoaXAgZG9tYWluIChzcGVjaWZpYyBhcmVuYSwgb3IgdGhlIGhlYXApIHRoYW4gd2UgYXJlLAot
ICAgICAgLy8gY29weSB0byBvdXIgYXJlbmEgKG9yIGhlYXAsIGFzIHRoZSBjYXNlIG1heSBiZSku
Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAgICIgICAgJHRoaXNfbWVz
c2FnZSRfc2xvd19zZXRfYWxsb2NhdGVkXyRuYW1lJChtZXNzYWdlX2FyZW5hLCAiCi0gICAgICAg
ICImJG5hbWUkKTtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXMsCi0gICAgICAgICIgICAgaWYgKG1lc3NhZ2VfYXJlbmEgIT0gTlVMTCkge1xuIgotICAg
ICAgICAiICAgICAgbWVzc2FnZV9hcmVuYS0+T3duKCRuYW1lJCk7XG4iCi0gICAgICAgICIgICAg
fVxuIik7Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlcywKLSAgICAgICIgIH1c
biIKLSAgICAgICIgICRuYW1lJF8gPSAkbmFtZSQ7XG4iCi0gICAgICAiICBpZiAoJG5hbWUkKSB7
XG4iCi0gICAgICAiICAgICRzZXRfaGFzYml0JFxuIgotICAgICAgIiAgfSBlbHNlIHtcbiIKLSAg
ICAgICIgICAgJGNsZWFyX2hhc2JpdCRcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgIC8vIFRPRE8o
ZGxqKTogbW92ZSBpbnNlcnRpb24gcG9pbnRzIHRvIG1lc3NhZ2UgY2xhc3MuCi0gICAgICAiICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDokZnVsbF9uYW1l
JClcbiIKLSAgICAgICJ9XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXMsCi0gICAgICAidGVtcGxhdGUgPGNsYXNzIFQ+XG4iCi0gICAgICAiaW5saW5lICR0eXBl
JCogJGRlcGVuZGVudF9jbGFzc25hbWUkOjptdXRhYmxlXyRuYW1lJCgpIHtcbiIKLSAgICAgICIg
ICRzZXRfaGFzYml0JFxuIgotICAgICAgIiAgJGRlcGVuZGVudF90eXBlbmFtZSQqJiAkbmFtZSRf
ID0gJHRoaXNfbWVzc2FnZSQkbmFtZSRfO1xuIgotICAgICAgIiAgaWYgKCRuYW1lJF8gPT0gTlVM
TCkge1xuIgotICAgICAgIiAgICAkbmFtZSRfID0gbmV3ICRkZXBlbmRlbnRfdHlwZW5hbWUkO1xu
IgotICAgICAgIiAgfVxuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX211dGFibGU6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICByZXR1cm4gJG5hbWUkXztcbiIK
LSAgICAgICJ9XG4iCi0gICAgICAidGVtcGxhdGUgPGNsYXNzIFQ+XG4iCi0gICAgICAiaW5saW5l
ICR0eXBlJCogJGRlcGVuZGVudF9jbGFzc25hbWUkOjokcmVsZWFzZV9uYW1lJCgpIHtcbiIKLSAg
ICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOiRmdWxsX25h
bWUkKVxuIgotICAgICAgIiAgJGNsZWFyX2hhc2JpdCRcbiIKLSAgICAgICIgICRkZXBlbmRlbnRf
dHlwZW5hbWUkKiYgJG5hbWUkXyA9ICR0aGlzX21lc3NhZ2UkJG5hbWUkXztcbiIKLSAgICAgICIg
ICRkZXBlbmRlbnRfdHlwZW5hbWUkKiB0ZW1wID0gJG5hbWUkXztcbiIKLSAgICAgICIgICRuYW1l
JF8gPSBOVUxMO1xuIgotICAgICAgIiAgcmV0dXJuIHRlbXA7XG4iCi0gICAgICAifVxuIgotICAg
ICAgInRlbXBsYXRlIDxjbGFzcyBUPlxuIgotICAgICAgImlubGluZSB2b2lkICRkZXBlbmRlbnRf
Y2xhc3NuYW1lJDo6IgotICAgICAgInNldF9hbGxvY2F0ZWRfJG5hbWUkKCR0eXBlJCogJG5hbWUk
KSB7XG4iCi0gICAgICAiICAkZGVwZW5kZW50X3R5cGVuYW1lJComICRuYW1lJF8gPSAkdGhpc19t
ZXNzYWdlJCRuYW1lJF87XG4iCi0gICAgICAiICBkZWxldGUgJG5hbWUkXztcbiIpOwotCi0gICAg
aWYgKFN1cHBvcnRzQXJlbmFzKGRlc2NyaXB0b3JfLT5tZXNzYWdlX3R5cGUoKSkpIHsKLSAgICAg
IHByaW50ZXItPlByaW50KHZhcmlhYmxlcywKLSAgICAgICIgIGlmICgkbmFtZSQgIT0gTlVMTCAm
JiBzdGF0aWNfY2FzdDwgJGRlcGVuZGVudF90eXBlbmFtZSQqID4oJG5hbWUkKSIKLSAgICAgICIt
PkdldEFyZW5hKCkgIT0gTlVMTCkge1xuIgotICAgICAgIiAgICAkZGVwZW5kZW50X3R5cGVuYW1l
JCogbmV3XyRuYW1lJCA9IG5ldyAkZGVwZW5kZW50X3R5cGVuYW1lJDtcbiIKLSAgICAgICIgICAg
bmV3XyRuYW1lJC0+Q29weUZyb20oKiRuYW1lJCk7XG4iCi0gICAgICAiICAgICRuYW1lJCA9IG5l
d18kbmFtZSQ7XG4iCi0gICAgICAiICB9XG4iKTsKLSAgICB9Ci0KLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXMsCi0gICAgICAiICAkbmFtZSRfID0gJG5hbWUkO1xuIgotICAgICAgIiAgaWYg
KCRuYW1lJCkge1xuIgotICAgICAgIiAgICAkc2V0X2hhc2JpdCRcbiIKLSAgICAgICIgIH0gZWxz
ZSB7XG4iCi0gICAgICAiICAgICRjbGVhcl9oYXNiaXQkXG4iCi0gICAgICAiICB9XG4iCi0gICAg
ICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDokZnVs
bF9uYW1lJClcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotfQotCi12b2lkIE1lc3NhZ2VGaWVsZEdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZUlubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIq
IHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19pbmxp
bmUpIGNvbnN0IHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXModmFyaWFibGVzXyk7
Ci0gIHZhcmlhYmxlc1siaW5saW5lIl0gPSBpc19pbmxpbmUgPyAiaW5saW5lICIgOiAiIjsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICIkaW5saW5lJGNvbnN0ICR0eXBlJCYgJGNs
YXNzbmFtZSQ6OiRuYW1lJCgpIGNvbnN0IHtcbiIKLSAgICAiICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfZ2V0OiRmdWxsX25hbWUkKVxuIik7Ci0KLSAgUHJpbnRIYW5kbGluZ09w
dGlvbmFsU3RhdGljSW5pdGlhbGl6ZXJzKAotICAgICAgdmFyaWFibGVzLCBkZXNjcmlwdG9yXy0+
ZmlsZSgpLCBvcHRpb25zXywgcHJpbnRlciwKLSAgICAgIC8vIFdpdGggc3RhdGljIGluaXRpYWxp
emVycy4KLSAgICAgICIgIHJldHVybiAkbmFtZSRfICE9IE5VTEwgPyAqJG5hbWUkXyA6ICpkZWZh
dWx0X2luc3RhbmNlXy0+JG5hbWUkXztcbiIsCi0gICAgICAvLyBXaXRob3V0LgotICAgICAgIiAg
cmV0dXJuICRuYW1lJF8gIT0gTlVMTCA/ICokbmFtZSRfIDogKmRlZmF1bHRfaW5zdGFuY2UoKS4k
bmFtZSRfO1xuIik7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlcywgIn1cbiIpOwotCi0gIGlm
IChkZXBlbmRlbnRfZmllbGRfKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKFN1cHBvcnRz
QXJlbmFzKGRlc2NyaXB0b3JfKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlcywKLSAg
ICAgICIkaW5saW5lJCIKLSAgICAgICIkdHlwZSQqICRjbGFzc25hbWUkOjptdXRhYmxlXyRuYW1l
JCgpIHtcbiIKLSAgICAgICIgICRzZXRfaGFzYml0JFxuIgotICAgICAgIiAgaWYgKCRuYW1lJF8g
PT0gTlVMTCkge1xuIgotICAgICAgIiAgICBfc2xvd19tdXRhYmxlXyRuYW1lJCgpO1xuIgotICAg
ICAgIiAgfVxuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211
dGFibGU6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICByZXR1cm4gJG5hbWUkXztcbiIKLSAgICAg
ICJ9XG4iCi0gICAgICAiJGlubGluZSQiCi0gICAgICAiJHR5cGUkKiAkY2xhc3NuYW1lJDo6JHJl
bGVhc2VfbmFtZSQoKSB7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfcmVsZWFzZTokZnVsbF9uYW1lJClcbiIKLSAgICAgICIgICRjbGVhcl9oYXNiaXQkXG4i
Ci0gICAgICAiICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSAhPSBOVUxMKSB7XG4iCi0gICAgICAi
ICAgIHJldHVybiBfc2xvd18kcmVsZWFzZV9uYW1lJCgpO1xuIgotICAgICAgIiAgfSBlbHNlIHtc
biIKLSAgICAgICIgICAgJHR5cGUkKiB0ZW1wID0gJG5hbWUkXztcbiIKLSAgICAgICIgICAgJG5h
bWUkXyA9IE5VTEw7XG4iCi0gICAgICAiICAgIHJldHVybiB0ZW1wO1xuIgotICAgICAgIiAgfVxu
IgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCAiCi0gICAgICAidm9pZCAkY2xhc3NuYW1l
JDo6c2V0X2FsbG9jYXRlZF8kbmFtZSQoJHR5cGUkKiAkbmFtZSQpIHtcbiIKLSAgICAgICIgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIG1lc3NhZ2VfYXJlbmEgPSBHZXRBcmVuYU5vVmlydHVh
bCgpO1xuIgotICAgICAgIiAgaWYgKG1lc3NhZ2VfYXJlbmEgPT0gTlVMTCkge1xuIgotICAgICAg
IiAgICBkZWxldGUgJG5hbWUkXztcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIGlmICgkbmFt
ZSQgIT0gTlVMTCkge1xuIik7Ci0gICAgaWYgKFN1cHBvcnRzQXJlbmFzKGRlc2NyaXB0b3JfLT5t
ZXNzYWdlX3R5cGUoKSkpIHsKLSAgICAgIC8vIElmIHdlJ3JlIG9uIGFuIGFyZW5hIGFuZCB0aGUg
aW5jb21pbmcgbWVzc2FnZSBpcyBub3QsIHNpbXBseSBPd24oKSBpdAotICAgICAgLy8gcmF0aGVy
IHRoYW4gY29weSB0byB0aGUgYXJlbmEgLS0gZWl0aGVyIHdheSB3ZSBuZWVkIGEgaGVhcCBkZWFs
bG9jLAotICAgICAgLy8gc28gd2UgbWlnaHQgYXMgd2VsbCBkZWZlciBpdC4gT3RoZXJ3aXNlLCBp
ZiBpbmNvbWluZyBtZXNzYWdlIGlzIG9uIGEKLSAgICAgIC8vIGRpZmZlcmVudCBvd25lcnNoaXAg
ZG9tYWluIChzcGVjaWZpYyBhcmVuYSwgb3IgdGhlIGhlYXApIHRoYW4gd2UgYXJlLAotICAgICAg
Ly8gY29weSB0byBvdXIgYXJlbmEgKG9yIGhlYXAsIGFzIHRoZSBjYXNlIG1heSBiZSkuCi0gICAg
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAgICIgICAgX3Nsb3dfc2V0X2FsbG9j
YXRlZF8kbmFtZSQobWVzc2FnZV9hcmVuYSwgJiRuYW1lJCk7XG4iKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICAgICAiICAgIGlmIChtZXNzYWdl
X2FyZW5hICE9IE5VTEwpIHtcbiIKLSAgICAgICAgIiAgICAgIG1lc3NhZ2VfYXJlbmEtPk93bigk
bmFtZSQpO1xuIgotICAgICAgICAiICAgIH1cbiIpOwotICAgIH0KLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXMsCi0gICAgICAiICB9XG4iCi0gICAgICAiICAkbmFtZSRfID0gJG5hbWUkO1xu
IgotICAgICAgIiAgaWYgKCRuYW1lJCkge1xuIgotICAgICAgIiAgICAkc2V0X2hhc2JpdCRcbiIK
LSAgICAgICIgIH0gZWxzZSB7XG4iCi0gICAgICAiICAgICRjbGVhcl9oYXNiaXQkXG4iCi0gICAg
ICAiICB9XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X2FsbG9jYXRlZDokZnVsbF9uYW1lJClcbiIKLSAgICAgICJ9XG4iKTsKLSAgfSBlbHNlIHsKLSAg
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAiJGlubGluZSQiCi0gICAgICAiJHR5
cGUkKiAkY2xhc3NuYW1lJDo6bXV0YWJsZV8kbmFtZSQoKSB7XG4iCi0gICAgICAiICAkc2V0X2hh
c2JpdCRcbiIKLSAgICAgICIgIGlmICgkbmFtZSRfID09IE5VTEwpIHtcbiIKLSAgICAgICIgICAg
JG5hbWUkXyA9IG5ldyAkdHlwZSQ7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTokZnVsbF9uYW1lJClcbiIKLSAgICAg
ICIgIHJldHVybiAkbmFtZSRfO1xuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCIKLSAg
ICAgICIkdHlwZSQqICRjbGFzc25hbWUkOjokcmVsZWFzZV9uYW1lJCgpIHtcbiIKLSAgICAgICIg
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOiRmdWxsX25hbWUkKVxu
IgotICAgICAgIiAgJGNsZWFyX2hhc2JpdCRcbiIKLSAgICAgICIgICR0eXBlJCogdGVtcCA9ICRu
YW1lJF87XG4iCi0gICAgICAiICAkbmFtZSRfID0gTlVMTDtcbiIKLSAgICAgICIgIHJldHVybiB0
ZW1wO1xuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCIKLSAgICAgICJ2b2lkICRjbGFz
c25hbWUkOjpzZXRfYWxsb2NhdGVkXyRuYW1lJCgkdHlwZSQqICRuYW1lJCkge1xuIgotICAgICAg
IiAgZGVsZXRlICRuYW1lJF87XG4iKTsKLQotICAgIGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlw
dG9yXy0+bWVzc2FnZV90eXBlKCkpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMs
Ci0gICAgICAiICBpZiAoJG5hbWUkICE9IE5VTEwgJiYgJG5hbWUkLT5HZXRBcmVuYSgpICE9IE5V
TEwpIHtcbiIKLSAgICAgICIgICAgJHR5cGUkKiBuZXdfJG5hbWUkID0gbmV3ICR0eXBlJDtcbiIK
LSAgICAgICIgICAgbmV3XyRuYW1lJC0+Q29weUZyb20oKiRuYW1lJCk7XG4iCi0gICAgICAiICAg
ICRuYW1lJCA9IG5ld18kbmFtZSQ7XG4iCi0gICAgICAiICB9XG4iKTsKLSAgICB9Ci0KLSAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAiICAkbmFtZSRfID0gJG5hbWUkO1xuIgot
ICAgICAgIiAgaWYgKCRuYW1lJCkge1xuIgotICAgICAgIiAgICAkc2V0X2hhc2JpdCRcbiIKLSAg
ICAgICIgIH0gZWxzZSB7XG4iCi0gICAgICAiICAgICRjbGVhcl9oYXNiaXQkXG4iCi0gICAgICAi
ICB9XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2Fs
bG9jYXRlZDokZnVsbF9uYW1lJClcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotfQotCi12b2lkIE1l
c3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNsZWFyaW5nQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3QgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlcyh2YXJpYWJs
ZXNfKTsKLSAgdmFyaWFibGVzWyJ0aGlzX21lc3NhZ2UiXSA9IGRlcGVuZGVudF9maWVsZF8gPyBE
ZXBlbmRlbnRCYXNlRG93bkNhc3QoKSA6ICIiOwotICBpZiAoIUhhc0ZpZWxkUHJlc2VuY2UoZGVz
Y3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGhhcy1iaXRzLCBt
ZXNzYWdlIHByZXNlbmNlIGlzIGluZGljYXRlZCBvbmx5IGJ5IHB0ciAhPQotICAgIC8vIE5VTEwu
IFRodXMgb24gY2xlYXIsIHdlIG5lZWQgdG8gZGVsZXRlIHRoZSBvYmplY3QuCi0gICAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzLAotICAgICAgImlmICgkdGhpc19tZXNzYWdlJEdldEFyZW5hTm9W
aXJ0dWFsKCkgPT0gTlVMTCAmJiAiCi0gICAgICAiJHRoaXNfbWVzc2FnZSQkbmFtZSRfICE9IE5V
TEwpIGRlbGV0ZSAkdGhpc19tZXNzYWdlJCRuYW1lJF87XG4iCi0gICAgICAiJHRoaXNfbWVzc2Fn
ZSQkbmFtZSRfID0gTlVMTDtcbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlcywKLSAgICAgICJpZiAoJHRoaXNfbWVzc2FnZSQkbmFtZSRfICE9IE5VTEwpICR0aGlz
X21lc3NhZ2UkJG5hbWUkXy0+IgotICAgICAgIiRkZXBlbmRlbnRfdHlwZSQ6OkNsZWFyKCk7XG4i
KTsKLSAgfQotfQotCi12b2lkIE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdp
bmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIm11dGFibGVfJG5hbWUkKCktPiR0eXBlJDo6TWVyZ2VGcm9tKGZyb20u
JG5hbWUkKCkpO1xuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVy
YXRlU3dhcHBpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sICJzdGQ6OnN3YXAoJG5hbWUkXywgb3RoZXItPiRuYW1lJF8pO1xu
Iik7Ci19Ci0KLXZvaWQgTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ29uc3RydWN0
b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sICIkbmFtZSRfID0gTlVMTDtcbiIpOwotfQotCi12b2lkIE1lc3NhZ2VGaWVsZEdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCB7Ci0gIGlmIChkZXNjcmlwdG9yXy0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9NRVNTQUdFKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAg
ICJET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRN
ZXNzYWdlTm9WaXJ0dWFsKFxuIgotICAgICAgIiAgICAgaW5wdXQsIG11dGFibGVfJG5hbWUkKCkp
KTtcbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAiRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFk
R3JvdXBOb1ZpcnR1YWwoXG4iCi0gICAgICAiICAgICAgJG51bWJlciQsIGlucHV0LCBtdXRhYmxl
XyRuYW1lJCgpKSk7XG4iKTsKLSAgfQotfQotCi12b2lkIE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICI6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGUkc3RyZWFtX3dyaXRlciQoXG4i
Ci0gICAgIiAgJG51bWJlciQsICokbm9uX251bGxfcHRyX3RvX25hbWUkLCBvdXRwdXQpO1xuIik7
Ci19Ci0KLXZvaWQgTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplV2l0
aENhY2hlZFNpemVzVG9BcnJheShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJ0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6XG4iCi0gICAgIiAgV3JpdGUkZGVjbGFyZWRfdHlw
ZSROb1ZpcnR1YWxUb0FycmF5KFxuIgotICAgICIgICAgJG51bWJlciQsICokbm9uX251bGxfcHRy
X3RvX25hbWUkLCB0YXJnZXQpO1xuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlQnl0ZVNpemUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAidG90YWxfc2l6ZSArPSAkdGFnX3NpemUkICtc
biIKLSAgICAiICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
JGRlY2xhcmVkX3R5cGUkU2l6ZU5vVmlydHVhbChcbiIKLSAgICAiICAgICokbm9uX251bGxfcHRy
X3RvX25hbWUkKTtcbiIpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU1lc3NhZ2VPbmVvZkZpZWxk
R2VuZXJhdG9yOjoKLU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlv
bnMmIG9wdGlvbnMpCi0gIDogTWVzc2FnZUZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0b3IsIG9wdGlv
bnMpLAotICAgIGRlcGVuZGVudF9iYXNlXyhvcHRpb25zLnByb3RvX2gpIHsKLSAgU2V0Q29tbW9u
T25lb2ZGaWVsZFZhcmlhYmxlcyhkZXNjcmlwdG9yLCAmdmFyaWFibGVzXyk7Ci19Ci0KLU1lc3Nh
Z2VPbmVvZkZpZWxkR2VuZXJhdG9yOjp+TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3IoKSB7fQot
Ci0KLXZvaWQgTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVEZXBlbmRlbnRB
Y2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBP
bmVvZiBmaWVsZCBnZXR0ZXJzIG11c3QgYmUgZGVwZW5kZW50IGFzIHRoZXkgY2FsbCBkZWZhdWx0
X2luc3RhbmNlKCkuCi0gIC8vIE90aGVyd2lzZSwgdGhlIGxvZ2ljIGlzIHRoZSBzYW1lIGFzIE1l
c3NhZ2VGaWVsZHMuCi0gIGlmICghZGVwZW5kZW50X2ZpZWxkXykgewotICAgIHJldHVybjsKLSAg
fQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGVkX2F0dHIk
Y29uc3QgJHR5cGUkJiAkbmFtZSQoKSBjb25zdDtcbiIpOwotICBNZXNzYWdlRmllbGRHZW5lcmF0
b3I6OkdlbmVyYXRlRGVwZW5kZW50QWNjZXNzb3JEZWNsYXJhdGlvbnMocHJpbnRlcik7Ci19Ci0K
LXZvaWQgTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVHZXR0ZXJEZWNsYXJh
dGlvbihpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBPbmVvZiBmaWVsZCBnZXR0
ZXJzIG11c3QgYmUgZGVwZW5kZW50IGFzIHRoZXkgY2FsbCBkZWZhdWx0X2luc3RhbmNlKCkuCi0g
IC8vIFVubGlrZSBNZXNzYWdlRmllbGQsIHRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gKG5vbi1kZXBl
bmRlbnQpIGdldHRlciB0bwotICAvLyBnZW5lcmF0ZS4KLSAgaWYgKGRlcGVuZGVudF9maWVsZF8p
IHsKLSAgICByZXR1cm47Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAg
ICIkZGVwcmVjYXRlZF9hdHRyJGNvbnN0ICR0eXBlJCYgJG5hbWUkKCkgY29uc3Q7XG4iKTsKLX0K
LQotdm9pZCBNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZURlcGVuZGVudElu
bGluZUFjY2Vzc29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAg
Ly8gRm9yIHRoZSBDUlRQIGJhc2UgY2xhc3MsIGFsbCBtdXRhdGlvbiBtZXRob2RzIGFyZSBkZXBl
bmRlbnQsIGFuZCBzbwotICAvLyB0aGV5IG11c3QgYmUgaW4gdGhlIGhlYWRlci4KLSAgaWYgKCFk
ZXBlbmRlbnRfYmFzZV8pIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgbWFwPHN0cmluZywgc3RyaW5n
PiB2YXJpYWJsZXModmFyaWFibGVzXyk7Ci0gIHZhcmlhYmxlc1siaW5saW5lIl0gPSAiaW5saW5l
ICI7Ci0gIHZhcmlhYmxlc1siZGVwZW5kZW50X2NsYXNzbmFtZSJdID0KLSAgICAgIERlcGVuZGVu
dEJhc2VDbGFzc1RlbXBsYXRlTmFtZShkZXNjcmlwdG9yXy0+Y29udGFpbmluZ190eXBlKCkpICsg
IjxUPiI7Ci0gIHZhcmlhYmxlc1sidGhpc19tZXNzYWdlIl0gPSAicmVpbnRlcnByZXRfY2FzdDxU
Kj4odGhpcyktPiI7Ci0gIC8vIENvbnN0IG1lc3NhZ2UgYWNjZXNzIGlzIG5lZWRlZCBmb3IgdGhl
IGRlcGVuZGVudCBnZXR0ZXIuCi0gIHZhcmlhYmxlc1sidGhpc19jb25zdF9tZXNzYWdlIl0gPSAi
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4odGhpcyktPiI7Ci0gIHZhcmlhYmxlc1sidG1wbCJd
ID0gInRlbXBsYXRlIDxjbGFzcyBUPlxuIjsKLSAgdmFyaWFibGVzWyJmaWVsZF9tZW1iZXIiXSA9
IHZhcmlhYmxlc1sidGhpc19tZXNzYWdlIl0gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGVzWyJvbmVvZl9wcmVmaXgiXSArIHZhcmlhYmxlc1sibmFtZSJdICsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJfIjsKLSAgSW50ZXJuYWxHZW5lcmF0ZUlubGluZUFj
Y2Vzc29yRGVmaW5pdGlvbnModmFyaWFibGVzLCBwcmludGVyKTsKLX0KLQotdm9pZCBNZXNzYWdl
T25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUlubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMo
aW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc19pbmxpbmUpIGNvbnN0IHsKLSAgaWYgKGRlcGVuZGVudF9iYXNlXykgewotICAgIHJl
dHVybjsKLSAgfQotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlcyh2YXJpYWJsZXNfKTsK
LSAgdmFyaWFibGVzWyJpbmxpbmUiXSA9IGlzX2lubGluZSA/ICJpbmxpbmUgIiA6ICIiOwotICB2
YXJpYWJsZXNbImRlcGVuZGVudF9jbGFzc25hbWUiXSA9IHZhcmlhYmxlc1siY2xhc3NuYW1lIl07
Ci0gIHZhcmlhYmxlc1sidGhpc19tZXNzYWdlIl0gPSAiIjsKLSAgdmFyaWFibGVzWyJ0aGlzX2Nv
bnN0X21lc3NhZ2UiXSA9ICIiOwotICB2YXJpYWJsZXNbInRtcGwiXSA9ICIiOwotICB2YXJpYWJs
ZXNbImZpZWxkX21lbWJlciJdID0KLSAgICAgIHZhcmlhYmxlc1sib25lb2ZfcHJlZml4Il0gKyB2
YXJpYWJsZXNbIm5hbWUiXSArICJfIjsKLSAgdmFyaWFibGVzWyJkZXBlbmRlbnRfdHlwZSJdID0g
dmFyaWFibGVzWyJ0eXBlIl07Ci0gIEludGVybmFsR2VuZXJhdGVJbmxpbmVBY2Nlc3NvckRlZmlu
aXRpb25zKHZhcmlhYmxlcywgcHJpbnRlcik7Ci19Ci0KLXZvaWQgTWVzc2FnZU9uZW9mRmllbGRH
ZW5lcmF0b3I6OgotR2VuZXJhdGVOb25JbmxpbmVBY2Nlc3NvckRlZmluaXRpb25zKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyaWFibGVzKHZh
cmlhYmxlc18pOwotICB2YXJpYWJsZXNbImZpZWxkX21lbWJlciJdID0KLSAgICAgIHZhcmlhYmxl
c1sib25lb2ZfcHJlZml4Il0gKyB2YXJpYWJsZXNbIm5hbWUiXSArICJfIjsKLQotICAvL3ByaW50
ZXItPlByaW50KHZhcmlhYmxlcywKLX0KLQotdm9pZCBNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRv
cjo6Ci1JbnRlcm5hbEdlbmVyYXRlSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhjb25zdCBtYXA8
c3RyaW5nLCBzdHJpbmc+JiB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXMsCi0gICAgIiR0bXBsJCIKLSAgICAiJGlubGluZSQgIgotICAgICJjb25z
dCAkdHlwZSQmICRkZXBlbmRlbnRfY2xhc3NuYW1lJDo6JG5hbWUkKCkgY29uc3Qge1xuIgotICAg
ICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6JGZ1bGxfbmFtZSQpXG4i
Ci0gICAgIiAgcmV0dXJuICR0aGlzX2NvbnN0X21lc3NhZ2UkaGFzXyRuYW1lJCgpXG4iCi0gICAg
IiAgICAgID8gKiR0aGlzX2NvbnN0X21lc3NhZ2UkJG9uZW9mX3ByZWZpeCQkbmFtZSRfXG4iCi0g
ICAgIiAgICAgIDogJGRlcGVuZGVudF90eXBlJDo6ZGVmYXVsdF9pbnN0YW5jZSgpO1xuIgotICAg
ICJ9XG4iKTsKLQotICBpZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICAgIiR0bXBsJCIKLSAgICAgICIkaW5saW5lJCIK
LSAgICAgICIkdHlwZSQqICRkZXBlbmRlbnRfY2xhc3NuYW1lJDo6bXV0YWJsZV8kbmFtZSQoKSB7
XG4iCi0gICAgICAiICBpZiAoISR0aGlzX21lc3NhZ2UkaGFzXyRuYW1lJCgpKSB7XG4iCi0gICAg
ICAiICAgICR0aGlzX21lc3NhZ2UkY2xlYXJfJG9uZW9mX25hbWUkKCk7XG4iCi0gICAgICAiICAg
ICR0aGlzX21lc3NhZ2Ukc2V0X2hhc18kbmFtZSQoKTtcbiIpOwotICAgIGlmIChTdXBwb3J0c0Fy
ZW5hcyhkZXNjcmlwdG9yXy0+bWVzc2FnZV90eXBlKCkpKSB7Ci0gICAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXMsCi0gICAgICAgICAiICAgICRmaWVsZF9tZW1iZXIkID0gXG4iCi0gICAgICAg
ICAiICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6Q3JlYXRlTWVzc2FnZTwgJGRlcGVu
ZGVudF90eXBlbmFtZSQgPihcbiIKLSAgICAgICAgICIgICAgICAkdGhpc19tZXNzYWdlJEdldEFy
ZW5hTm9WaXJ0dWFsKCkpO1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50
KHZhcmlhYmxlcywKLSAgICAgICAgICIgICAgJHRoaXNfbWVzc2FnZSQkb25lb2ZfcHJlZml4JCRu
YW1lJF8gPSBcbiIKLSAgICAgICAgICIgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOjpD
cmVhdGU8ICRkZXBlbmRlbnRfdHlwZW5hbWUkID4oXG4iCi0gICAgICAgICAiICAgICAgJHRoaXNf
bWVzc2FnZSRHZXRBcmVuYU5vVmlydHVhbCgpKTtcbiIpOwotICAgIH0KLSAgICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXMsCi0gICAgICAiICB9XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTokZnVsbF9uYW1lJClcbiIKLSAgICAgICIgIHJldHVy
biAkZmllbGRfbWVtYmVyJDtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJHRtcGwkIgotICAgICAg
IiRpbmxpbmUkIgotICAgICAgIiR0eXBlJCogJGRlcGVuZGVudF9jbGFzc25hbWUkOjokcmVsZWFz
ZV9uYW1lJCgpIHtcbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9yZWxlYXNlOiRmdWxsX25hbWUkKVxuIgotICAgICAgIiAgaWYgKCR0aGlzX21lc3NhZ2UkaGFz
XyRuYW1lJCgpKSB7XG4iCi0gICAgICAiICAgICR0aGlzX21lc3NhZ2UkY2xlYXJfaGFzXyRvbmVv
Zl9uYW1lJCgpO1xuIgotICAgICAgIiAgICBpZiAoJHRoaXNfbWVzc2FnZSRHZXRBcmVuYU5vVmly
dHVhbCgpICE9IE5VTEwpIHtcbiIKLSAgICAgIC8vIE4uQi46IHNhZmUgdG8gdXNlIHRoZSB1bmRl
cmx5aW5nIGZpZWxkIHBvaW50ZXIgaGVyZSBiZWNhdXNlIHdlIGFyZSBzdXJlCi0gICAgICAvLyB0
aGF0IGl0IGlzIG5vbi1OVUxMIChiZWNhdXNlIGhhc18kbmFtZSQoKSByZXR1cm5lZCB0cnVlKS4K
LSAgICAgICIgICAgICAkZGVwZW5kZW50X3R5cGVuYW1lJCogdGVtcCA9IG5ldyAkZGVwZW5kZW50
X3R5cGVuYW1lJDtcbiIKLSAgICAgICIgICAgICB0ZW1wLT5NZXJnZUZyb20oKiRmaWVsZF9tZW1i
ZXIkKTtcbiIKLSAgICAgICIgICAgICAkZmllbGRfbWVtYmVyJCA9IE5VTEw7XG4iCi0gICAgICAi
ICAgICAgcmV0dXJuIHRlbXA7XG4iCi0gICAgICAiICAgIH0gZWxzZSB7XG4iCi0gICAgICAiICAg
ICAgJGRlcGVuZGVudF90eXBlbmFtZSQqIHRlbXAgPSAkZmllbGRfbWVtYmVyJDtcbiIKLSAgICAg
ICIgICAgICAkZmllbGRfbWVtYmVyJCA9IE5VTEw7XG4iCi0gICAgICAiICAgICAgcmV0dXJuIHRl
bXA7XG4iCi0gICAgICAiICAgIH1cbiIKLSAgICAgICIgIH0gZWxzZSB7XG4iCi0gICAgICAiICAg
IHJldHVybiBOVUxMO1xuIgotICAgICAgIiAgfVxuIgotICAgICAgIn1cbiIKLSAgICAgICIkdG1w
bCQiCi0gICAgICAiJGlubGluZSQiCi0gICAgICAidm9pZCAkZGVwZW5kZW50X2NsYXNzbmFtZSQ6
OiIKLSAgICAgICJzZXRfYWxsb2NhdGVkXyRuYW1lJCgkdHlwZSQqICRuYW1lJCkge1xuIgotICAg
ICAgIiAgJHRoaXNfbWVzc2FnZSRjbGVhcl8kb25lb2ZfbmFtZSQoKTtcbiIKLSAgICAgICIgIGlm
ICgkbmFtZSQpIHtcbiIpOwotCi0gICAgaWYgKFN1cHBvcnRzQXJlbmFzKGRlc2NyaXB0b3JfLT5t
ZXNzYWdlX3R5cGUoKSkpIHsKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlcywKLSAgICAg
ICAgLy8gSWYgaW5jb21pbmcgbWVzc2FnZSBpcyBvbiB0aGUgaGVhcCBhbmQgd2UgYXJlIG9uIGFu
IGFyZW5hLCBqdXN0IE93bigpCi0gICAgICAgIC8vIGl0IChzZWUgYWJvdmUpLiBJZiBpdCdzIG9u
IGEgZGlmZmVyZW50IGFyZW5hIHRoYW4gd2UgYXJlIG9yIG9uZSBvZiB1cwotICAgICAgICAvLyBp
cyBvbiB0aGUgaGVhcCwgd2UgbWFrZSBhIGNvcHkgdG8gb3VyIGFyZW5hL2hlYXAuCi0gICAgICAg
ICIgICAgaWYgKCR0aGlzX21lc3NhZ2UkR2V0QXJlbmFOb1ZpcnR1YWwoKSAhPSBOVUxMICYmXG4i
Ci0gICAgICAgICIgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmE6OkdldEFyZW5hKCRu
YW1lJCkgPT0gTlVMTCkge1xuIgotICAgICAgICAiICAgICAgJHRoaXNfbWVzc2FnZSRHZXRBcmVu
YU5vVmlydHVhbCgpLT5Pd24oJG5hbWUkKTtcbiIKLSAgICAgICAgIiAgICB9IGVsc2UgaWYgKCR0
aGlzX21lc3NhZ2UkR2V0QXJlbmFOb1ZpcnR1YWwoKSAhPVxuIgotICAgICAgICAiICAgICAgICAg
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6R2V0QXJlbmEoJG5hbWUkKSkge1xuIgot
ICAgICAgICAiICAgICAgJGRlcGVuZGVudF90eXBlbmFtZSQqIG5ld18kbmFtZSQgPSBcbiIKLSAg
ICAgICAgIiAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOjpDcmVhdGVNZXNzYWdl
PCAkZGVwZW5kZW50X3R5cGVuYW1lJCA+KFxuIgotICAgICAgICAiICAgICAgICAgICR0aGlzX21l
c3NhZ2UkR2V0QXJlbmFOb1ZpcnR1YWwoKSk7XG4iCi0gICAgICAgICIgICAgICBuZXdfJG5hbWUk
LT5Db3B5RnJvbSgqJG5hbWUkKTtcbiIKLSAgICAgICAgIiAgICAgICRuYW1lJCA9IG5ld18kbmFt
ZSQ7XG4iCi0gICAgICAgICIgICAgfVxuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlcywKLSAgICAgICAgIiAgICBpZiAoJHRoaXNfbWVzc2FnZSRHZXRBcmVu
YU5vVmlydHVhbCgpICE9IE5VTEwpIHtcbiIKLSAgICAgICAgIiAgICAgICR0aGlzX21lc3NhZ2Uk
R2V0QXJlbmFOb1ZpcnR1YWwoKS0+T3duKCRuYW1lJCk7XG4iCi0gICAgICAgICIgICAgfVxuIik7
Ci0gICAgfQotCi0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICAgIiAgICAkdGhp
c19tZXNzYWdlJHNldF9oYXNfJG5hbWUkKCk7XG4iCi0gICAgICAiICAgICRmaWVsZF9tZW1iZXIk
ID0gJG5hbWUkO1xuIgotICAgICAgIiAgfVxuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAifVxu
IgotICAgICAgIiRpbmxpbmUkICR0eXBlJCogJGNsYXNzbmFtZSQ6OnVuc2FmZV9hcmVuYV9yZWxl
YXNlXyRuYW1lJCgpIHtcbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF91bnNhZmVfYXJlbmFfcmVsZWFzZSIKLSAgICAgICI6JGZ1bGxfbmFtZSQpXG4iCi0gICAg
ICAiICBpZiAoaGFzXyRuYW1lJCgpKSB7XG4iCi0gICAgICAiICAgIGNsZWFyX2hhc18kb25lb2Zf
bmFtZSQoKTtcbiIKLSAgICAgICIgICAgJHR5cGUkKiB0ZW1wID0gJG9uZW9mX3ByZWZpeCQkbmFt
ZSRfO1xuIgotICAgICAgIiAgICAkb25lb2ZfcHJlZml4JCRuYW1lJF8gPSBOVUxMO1xuIgotICAg
ICAgIiAgICByZXR1cm4gdGVtcDtcbiIKLSAgICAgICIgIH0gZWxzZSB7XG4iCi0gICAgICAiICAg
IHJldHVybiBOVUxMO1xuIgotICAgICAgIiAgfVxuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5s
aW5lJCB2b2lkICRjbGFzc25hbWUkOjp1bnNhZmVfYXJlbmFfc2V0X2FsbG9jYXRlZF8kbmFtZSQi
Ci0gICAgICAiKCR0eXBlJCogJG5hbWUkKSB7XG4iCi0gICAgICAvLyBXZSByZWx5IG9uIHRoZSBv
bmVvZiBjbGVhciBtZXRob2QgdG8gZnJlZSB0aGUgZWFybGllciBjb250ZW50cyBvZiB0aGlzCi0g
ICAgICAvLyBvbmVvZi4gV2UgY2FuIGRpcmVjdGx5IHVzZSB0aGUgcG9pbnRlciB3ZSdyZSBnaXZl
biB0byBzZXQgdGhlIG5ldwotICAgICAgLy8gdmFsdWUuCi0gICAgICAiICBjbGVhcl8kb25lb2Zf
bmFtZSQoKTtcbiIKLSAgICAgICIgIGlmICgkbmFtZSQpIHtcbiIKLSAgICAgICIgICAgc2V0X2hh
c18kbmFtZSQoKTtcbiIKLSAgICAgICIgICAgJG9uZW9mX3ByZWZpeCQkbmFtZSRfID0gJG5hbWUk
O1xuIgotICAgICAgIiAgfVxuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3Vuc2FmZV9hcmVuYV9zZXRfYWxsb2NhdGVkOiIKLSAgICAgICIkZnVsbF9uYW1lJClc
biIKLSAgICAgICJ9XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXMsCi0gICAgICAiJHRtcGwkIgotICAgICAgIiRpbmxpbmUkIgotICAgICAgIiR0eXBlJCogJGRl
cGVuZGVudF9jbGFzc25hbWUkOjptdXRhYmxlXyRuYW1lJCgpIHtcbiIKLSAgICAgICIgIGlmICgh
JHRoaXNfbWVzc2FnZSRoYXNfJG5hbWUkKCkpIHtcbiIKLSAgICAgICIgICAgJHRoaXNfbWVzc2Fn
ZSRjbGVhcl8kb25lb2ZfbmFtZSQoKTtcbiIKLSAgICAgICIgICAgJHRoaXNfbWVzc2FnZSRzZXRf
aGFzXyRuYW1lJCgpO1xuIgotICAgICAgIiAgICAkZmllbGRfbWVtYmVyJCA9IG5ldyAkZGVwZW5k
ZW50X3R5cGVuYW1lJDtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOiRmdWxsX25hbWUkKVxuIgotICAgICAgIiAgcmV0
dXJuICRmaWVsZF9tZW1iZXIkO1xuIgotICAgICAgIn1cbiIKLSAgICAgICIkdG1wbCQiCi0gICAg
ICAiJGlubGluZSQiCi0gICAgICAiJHR5cGUkKiAkZGVwZW5kZW50X2NsYXNzbmFtZSQ6OiRyZWxl
YXNlX25hbWUkKCkge1xuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3JlbGVhc2U6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICBpZiAoJHRoaXNfbWVzc2FnZSRo
YXNfJG5hbWUkKCkpIHtcbiIKLSAgICAgICIgICAgJHRoaXNfbWVzc2FnZSRjbGVhcl9oYXNfJG9u
ZW9mX25hbWUkKCk7XG4iCi0gICAgICAiICAgICRkZXBlbmRlbnRfdHlwZW5hbWUkKiB0ZW1wID0g
JGZpZWxkX21lbWJlciQ7XG4iCi0gICAgICAiICAgICRmaWVsZF9tZW1iZXIkID0gTlVMTDtcbiIK
LSAgICAgICIgICAgcmV0dXJuIHRlbXA7XG4iCi0gICAgICAiICB9IGVsc2Uge1xuIgotICAgICAg
IiAgICByZXR1cm4gTlVMTDtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICJ9XG4iCi0gICAgICAi
JHRtcGwkIgotICAgICAgIiRpbmxpbmUkIgotICAgICAgInZvaWQgJGRlcGVuZGVudF9jbGFzc25h
bWUkOjoiCi0gICAgICAic2V0X2FsbG9jYXRlZF8kbmFtZSQoJHR5cGUkKiAkbmFtZSQpIHtcbiIK
LSAgICAgICIgICR0aGlzX21lc3NhZ2UkY2xlYXJfJG9uZW9mX25hbWUkKCk7XG4iCi0gICAgICAi
ICBpZiAoJG5hbWUkKSB7XG4iKTsKLSAgICBpZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8t
Pm1lc3NhZ2VfdHlwZSgpKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAg
ICAgICAiICAgIGlmIChzdGF0aWNfY2FzdDwgJGRlcGVuZGVudF90eXBlbmFtZSQqPigkbmFtZSQp
LT4iCi0gICAgICAgICJHZXRBcmVuYSgpICE9IE5VTEwpIHtcbiIKLSAgICAgICAgIiAgICAgICRk
ZXBlbmRlbnRfdHlwZW5hbWUkKiBuZXdfJG5hbWUkID0gbmV3ICRkZXBlbmRlbnRfdHlwZW5hbWUk
O1xuIgotICAgICAgICAiICAgICAgbmV3XyRuYW1lJC0+Q29weUZyb20oKiRuYW1lJCk7XG4iCi0g
ICAgICAgICIgICAgICAkbmFtZSQgPSBuZXdfJG5hbWUkO1xuIgotICAgICAgICAiICAgIH1cbiIp
OwotICAgIH0KLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAiICAgICR0aGlz
X21lc3NhZ2Ukc2V0X2hhc18kbmFtZSQoKTtcbiIKLSAgICAgICIgICAgJGZpZWxkX21lbWJlciQg
PSAkbmFtZSQ7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDokZnVsbF9uYW1lJClcbiIKLSAgICAgICJ9XG4i
KTsKLSAgfQotfQotCi12b2lkIE1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRl
Q2xlYXJpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIG1hcDxzdHJpbmcs
IHN0cmluZz4gdmFyaWFibGVzKHZhcmlhYmxlc18pOwotICB2YXJpYWJsZXNbInRoaXNfbWVzc2Fn
ZSJdID0gZGVwZW5kZW50X2ZpZWxkXyA/IERlcGVuZGVudEJhc2VEb3duQ2FzdCgpIDogIiI7Ci0g
IGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXMsCi0gICAgICAiaWYgKCR0aGlzX21lc3NhZ2UkR2V0QXJlbmFOb1ZpcnR1YWwoKSA9
PSBOVUxMKSB7XG4iCi0gICAgICAiICBkZWxldGUgJHRoaXNfbWVzc2FnZSQkb25lb2ZfcHJlZml4
JCRuYW1lJF87XG4iCi0gICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzLAotICAgICAgImRlbGV0ZSAkdGhpc19tZXNzYWdlJCRvbmVvZl9wcmVmaXgk
JG5hbWUkXztcbiIpOwotICB9Ci19Ci0KLXZvaWQgTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVTd2FwcGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAg
Ly8gRG9uJ3QgcHJpbnQgYW55IHN3YXBwaW5nIGNvZGUuIFN3YXBwaW5nIHRoZSB1bmlvbiB3aWxs
IHN3YXAgdGhpcyBmaWVsZC4KLX0KLQotdm9pZCBNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUNvbnN0cnVjdG9yQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qgewot
ICAvLyBEb24ndCBwcmludCBhbnkgY29uc3RydWN0b3IgY29kZS4gVGhlIGZpZWxkIGlzIGluIGEg
dW5pb24uIFdlIGFsbG9jYXRlCi0gIC8vIHNwYWNlIG9ubHkgd2hlbiB0aGlzIGZpZWxkIGlzIHVz
ZWQuCi19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6
OlJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZGVzY3JpcHRvciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IEZpZWxkR2VuZXJh
dG9yKG9wdGlvbnMpLAotICAgICAgZGVzY3JpcHRvcl8oZGVzY3JpcHRvciksCi0gICAgICBkZXBl
bmRlbnRfZmllbGRfKG9wdGlvbnMucHJvdG9faCAmJiBJc0ZpZWxkRGVwZW5kZW50KGRlc2NyaXB0
b3IpKSwKLSAgICAgIGRlcGVuZGVudF9nZXR0ZXJfKGRlcGVuZGVudF9maWVsZF8gJiYgb3B0aW9u
cy5zYWZlX2JvdW5kYXJ5X2NoZWNrKSB7Ci0gIFNldE1lc3NhZ2VWYXJpYWJsZXMoZGVzY3JpcHRv
ciwgJnZhcmlhYmxlc18sIG9wdGlvbnMpOwotfQotCi1SZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVy
YXRvcjo6flJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yKCkge30KLQotdm9pZCBSZXBlYXRl
ZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVByaXZhdGVNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
Ijo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgJHR5cGUkID4gJG5hbWUkXztc
biIpOwotfQotCi12b2lkIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUludGVybmFs
R2VuZXJhdGVUeXBlRGVwZW5kZW50QWNjZXNzb3JEZWNsYXJhdGlvbnMoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJl
Y2F0ZWRfYXR0ciQkdHlwZSQqIG11dGFibGVfJG5hbWUkKGludCBpbmRleCk7XG4iCi0gICAgIiRk
ZXByZWNhdGVkX2F0dHIkJHR5cGUkKiBhZGRfJG5hbWUkKCk7XG4iKTsKLSAgaWYgKGRlcGVuZGVu
dF9nZXR0ZXJfKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVw
cmVjYXRlZF9hdHRyJGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwg
JHR5cGUkID4mXG4iCi0gICAgICAiICAgICRuYW1lJCgpIGNvbnN0O1xuIik7Ci0gIH0KLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0ZWRfYXR0ciQ6Omdvb2dsZTo6
cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8ICR0eXBlJCA+KlxuIgotICAgICIgICAgbXV0YWJs
ZV8kbmFtZSQoKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlRGVwZW5kZW50QWNjZXNzb3JEZWNsYXJhdGlvbnMoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgaWYgKGRlcGVuZGVudF9nZXR0ZXJfKSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRlZF9hdHRyJGNvbnN0ICR0eXBlJCYg
JG5hbWUkKGludCBpbmRleCkgY29uc3Q7XG4iKTsKLSAgfQotICBpZiAoZGVwZW5kZW50X2ZpZWxk
XykgewotICAgIEludGVybmFsR2VuZXJhdGVUeXBlRGVwZW5kZW50QWNjZXNzb3JEZWNsYXJhdGlv
bnMocHJpbnRlcik7Ci0gIH0KLX0KLQotdm9pZCBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZUFjY2Vzc29yRGVjbGFyYXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIGlmICghZGVwZW5kZW50X2dldHRlcl8pIHsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGVkX2F0dHIkY29uc3QgJHR5cGUkJiAkbmFtZSQo
aW50IGluZGV4KSBjb25zdDtcbiIpOwotICB9Ci0gIGlmICghZGVwZW5kZW50X2ZpZWxkXykgewot
ICAgIEludGVybmFsR2VuZXJhdGVUeXBlRGVwZW5kZW50QWNjZXNzb3JEZWNsYXJhdGlvbnMocHJp
bnRlcik7Ci0gIH0KLSAgaWYgKCFkZXBlbmRlbnRfZ2V0dGVyXykgewotICAgIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0ZWRfYXR0ciRjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8ICR0eXBlJCA+JlxuIgotICAgICAgIiAgICAkbmFt
ZSQoKSBjb25zdDtcbiIpOwotICB9Ci19Ci0KLXZvaWQgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5l
cmF0b3I6OgotR2VuZXJhdGVEZXBlbmRlbnRJbmxpbmVBY2Nlc3NvckRlZmluaXRpb25zKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmICghZGVwZW5kZW50X2ZpZWxkXykgewotICAg
IHJldHVybjsKLSAgfQotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlcyh2YXJpYWJsZXNf
KTsKLSAgLy8gRm9yIHRoZSBDUlRQIGJhc2UgY2xhc3MsIGFsbCBtdXRhdGlvbiBtZXRob2RzIGFy
ZSBkZXBlbmRlbnQsIGFuZCBzbwotICAvLyB0aGV5IG11c3QgYmUgaW4gdGhlIGhlYWRlci4KLSAg
dmFyaWFibGVzWyJkZXBlbmRlbnRfY2xhc3NuYW1lIl0gPQotICAgICAgRGVwZW5kZW50QmFzZUNs
YXNzVGVtcGxhdGVOYW1lKGRlc2NyaXB0b3JfLT5jb250YWluaW5nX3R5cGUoKSkgKyAiPFQ+IjsK
LSAgdmFyaWFibGVzWyJ0aGlzX21lc3NhZ2UiXSA9IERlcGVuZGVudEJhc2VEb3duQ2FzdCgpOwot
ICB2YXJpYWJsZXNbInRoaXNfY29uc3RfbWVzc2FnZSJdID0gRGVwZW5kZW50QmFzZUNvbnN0RG93
bkNhc3QoKTsKLQotICBpZiAoZGVwZW5kZW50X2dldHRlcl8pIHsKLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXMsCi0gICAgICAidGVtcGxhdGUgPGNsYXNzIFQ+XG4iCi0gICAgICAiaW5saW5l
IGNvbnN0ICR0eXBlJCYgJGRlcGVuZGVudF9jbGFzc25hbWUkOjokbmFtZSQoaW50IGluZGV4KSBj
b25zdCB7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0
OiRmdWxsX25hbWUkKVxuIgotICAgICAgIiAgcmV0dXJuICR0aGlzX2NvbnN0X21lc3NhZ2UkJG5h
bWUkXy4kY3BwZ2V0JChpbmRleCk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLQotICAvLyBHZW5l
cmF0ZSBwZXItZWxlbWVudCBhY2Nlc3NvcnM6Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlcywK
LSAgICAidGVtcGxhdGUgPGNsYXNzIFQ+XG4iCi0gICAgImlubGluZSAkdHlwZSQqICRkZXBlbmRl
bnRfY2xhc3NuYW1lJDo6bXV0YWJsZV8kbmFtZSQoaW50IGluZGV4KSB7XG4iCi0gICAgLy8gVE9E
TyhkbGopOiBtb3ZlIGluc2VydGlvbiBwb2ludHMKLSAgICAiICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZTokZnVsbF9uYW1lJClcbiIKLSAgICAiICByZXR1cm4gJHRo
aXNfbWVzc2FnZSQkbmFtZSRfLk11dGFibGUoaW5kZXgpO1xuIgotICAgICJ9XG4iCi0gICAgInRl
bXBsYXRlIDxjbGFzcyBUPlxuIgotICAgICJpbmxpbmUgJHR5cGUkKiAkZGVwZW5kZW50X2NsYXNz
bmFtZSQ6OmFkZF8kbmFtZSQoKSB7XG4iCi0gICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2FkZDokZnVsbF9uYW1lJClcbiIKLSAgICAiICByZXR1cm4gJHRoaXNfbWVzc2Fn
ZSQkbmFtZSRfLkFkZCgpO1xuIgotICAgICJ9XG4iKTsKLQotCi0gIGlmIChkZXBlbmRlbnRfZ2V0
dGVyXykgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlcywKLSAgICAgICJ0ZW1wbGF0ZSA8
Y2xhc3MgVD5cbiIKLSAgICAgICJpbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBl
YXRlZFB0ckZpZWxkPCAkdHlwZSQgPiZcbiIKLSAgICAgICIkZGVwZW5kZW50X2NsYXNzbmFtZSQ6
OiRuYW1lJCgpIGNvbnN0IHtcbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9saXN0OiRmdWxsX25hbWUkKVxuIgotICAgICAgIiAgcmV0dXJuICR0aGlzX2NvbnN0
X21lc3NhZ2UkJG5hbWUkXztcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIC8vIEdlbmVyYXRl
IG11dGFibGUgYWNjZXNzIHRvIHRoZSBlbnRpcmUgbGlzdDoKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzLAotICAgICJ0ZW1wbGF0ZSA8Y2xhc3MgVD5cbiIKLSAgICAiaW5saW5lIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgJHR5cGUkID4qXG4iCi0gICAgIiRkZXBlbmRl
bnRfY2xhc3NuYW1lJDo6bXV0YWJsZV8kbmFtZSQoKSB7XG4iCi0gICAgIiAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDokZnVsbF9uYW1lJClcbiIKLSAgICAi
ICByZXR1cm4gJiR0aGlzX21lc3NhZ2UkJG5hbWUkXztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZv
aWQgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJbmxpbmVBY2Nlc3Nv
ckRlZmluaXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaXNfaW5saW5lKSBjb25zdCB7Ci0gIG1hcDxzdHJpbmcsIHN0cmlu
Zz4gdmFyaWFibGVzKHZhcmlhYmxlc18pOwotICB2YXJpYWJsZXNbImlubGluZSJdID0gaXNfaW5s
aW5lID8gImlubGluZSAiIDogIiI7Ci0KLSAgaWYgKCFkZXBlbmRlbnRfZ2V0dGVyXykgewotICAg
IHByaW50ZXItPlByaW50KHZhcmlhYmxlcywKLSAgICAgICIkaW5saW5lJCIKLSAgICAgICJjb25z
dCAkdHlwZSQmICRjbGFzc25hbWUkOjokbmFtZSQoaW50IGluZGV4KSBjb25zdCB7XG4iCi0gICAg
ICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0OiRmdWxsX25hbWUkKVxu
IgotICAgICAgIiAgcmV0dXJuICRuYW1lJF8uJGNwcGdldCQoaW5kZXgpO1xuIgotICAgICAgIn1c
biIpOwotICB9Ci0KLSAgaWYgKCFkZXBlbmRlbnRfZmllbGRfKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzLAotICAgICAgIiRpbmxpbmUkIgotICAgICAgIiR0eXBlJCogJGNsYXNzbmFt
ZSQ6Om11dGFibGVfJG5hbWUkKGludCBpbmRleCkge1xuIgotICAgICAgLy8gVE9ETyhkbGopOiBt
b3ZlIGluc2VydGlvbiBwb2ludHMKLSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9tdXRhYmxlOiRmdWxsX25hbWUkKVxuIgotICAgICAgIiAgcmV0dXJuICRuYW1lJF8u
TXV0YWJsZShpbmRleCk7XG4iCi0gICAgICAifVxuIgotICAgICAgIiRpbmxpbmUkIgotICAgICAg
IiR0eXBlJCogJGNsYXNzbmFtZSQ6OmFkZF8kbmFtZSQoKSB7XG4iCi0gICAgICAiICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOiRmdWxsX25hbWUkKVxuIgotICAgICAgIiAg
cmV0dXJuICRuYW1lJF8uQWRkKCk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLQotCi0gIGlmICgh
ZGVwZW5kZW50X2ZpZWxkXykgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlcywKLSAgICAg
ICIkaW5saW5lJCIKLSAgICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8
ICR0eXBlJCA+KlxuIgotICAgICAgIiRjbGFzc25hbWUkOjptdXRhYmxlXyRuYW1lJCgpIHtcbiIK
LSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6
JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICByZXR1cm4gJiRuYW1lJF87XG4iCi0gICAgICAifVxu
Iik7Ci0gIH0KLSAgaWYgKCFkZXBlbmRlbnRfZ2V0dGVyXykgewotICAgIHByaW50ZXItPlByaW50
KHZhcmlhYmxlcywKLSAgICAgICIkaW5saW5lJCIKLSAgICAgICJjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8ICR0eXBlJCA+JlxuIgotICAgICAgIiRjbGFzc25hbWUk
OjokbmFtZSQoKSBjb25zdCB7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfbGlzdDokZnVsbF9uYW1lJClcbiIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfO1xu
IgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5l
cmF0b3I6OgotR2VuZXJhdGVDbGVhcmluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXModmFyaWFibGVzXyk7Ci0gIHZhcmlh
Ymxlc1sidGhpc19tZXNzYWdlIl0gPSBkZXBlbmRlbnRfZmllbGRfID8gRGVwZW5kZW50QmFzZURv
d25DYXN0KCkgOiAiIjsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLCAiJHRoaXNfbWVzc2Fn
ZSQkbmFtZSRfLkNsZWFyKCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICIkbmFtZSRfLk1lcmdlRnJvbShmcm9t
LiRuYW1lJF8pO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVTd2FwcGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgIiRuYW1lJF8uVW5zYWZlQXJlbmFTd2FwKCZvdGhl
ci0+JG5hbWUkXyk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZUNvbnN0cnVjdG9yQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
ewotICAvLyBOb3QgbmVlZGVkIGZvciByZXBlYXRlZCBmaWVsZHMuCi19Ci0KLXZvaWQgUmVwZWF0
ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZXJnZUZyb21Db2RlZFN0cmVhbShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoZGVzY3JpcHRvcl8tPnR5cGUoKSA9
PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSkgewotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgICAiRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjoiCi0gICAgICAiUmVhZE1lc3NhZ2VOb1ZpcnR1YWxOb1JlY3Vyc2lvbkRlcHRo
KFxuIgotICAgICAgIiAgICAgIGlucHV0LCBhZGRfJG5hbWUkKCkpKTtcbiIpOwotICB9IGVsc2Ug
ewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiRE9fKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoiCi0gICAgICAiUmVhZEdyb3VwTm9W
aXJ0dWFsTm9SZWN1cnNpb25EZXB0aChcbiIKLSAgICAgICIgICAgICAkbnVtYmVyJCwgaW5wdXQs
IGFkZF8kbmFtZSQoKSkpO1xuIik7Ci0gIH0KLX0KLQotdm9pZCBSZXBlYXRlZE1lc3NhZ2VGaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJm
b3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMtPiRuYW1lJF9zaXplKCk7IGkgPCBuOyBp
KyspIHtcbiIKLSAgICAiICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6V3JpdGUkc3RyZWFtX3dyaXRlciQoXG4iCi0gICAgIiAgICAkbnVtYmVyJCwgdGhpcy0+
JG5hbWUkKGkpLCBvdXRwdXQpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZE1l
c3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1Rv
QXJyYXkoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT4kbmFtZSRf
c2l6ZSgpOyBpIDwgbjsgaSsrKSB7XG4iCi0gICAgIiAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlxuIgotICAgICIgICAgV3JpdGUkZGVjbGFy
ZWRfdHlwZSROb1ZpcnR1YWxUb0FycmF5KFxuIgotICAgICIgICAgICAkbnVtYmVyJCwgdGhpcy0+
JG5hbWUkKGkpLCB0YXJnZXQpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZE1l
c3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ5dGVTaXplKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInRvdGFsX3Np
emUgKz0gJHRhZ19zaXplJCAqIHRoaXMtPiRuYW1lJF9zaXplKCk7XG4iCi0gICAgImZvciAoaW50
IGkgPSAwOyBpIDwgdGhpcy0+JG5hbWUkX3NpemUoKTsgaSsrKSB7XG4iCi0gICAgIiAgdG90YWxf
c2l6ZSArPVxuIgotICAgICIgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OiRkZWNsYXJlZF90eXBlJFNpemVOb1ZpcnR1YWwoXG4iCi0gICAgIiAgICAgIHRo
aXMtPiRuYW1lJChpKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgY3Bw
Ci19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAg
Ly8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NwcC9jcHBfbWVzc2FnZV9maWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfbWVzc2FnZV9maWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
OGQ5Mjc5Yzk3MTIwMjVmYjg0NzY0OTRlNzk2NTc3ZWM1ODkxNzRiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jcHAvY3BwX21lc3NhZ2VfZmllbGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25A
Z29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29s
IEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBv
dGhlcnMuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9NRVNTQUdFX0ZJ
RUxEX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1BQX01FU1NBR0VfRklF
TERfSF9fCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpZWxkLmg+Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3Bh
Y2UgY3BwIHsKLQotY2xhc3MgTWVzc2FnZUZpZWxkR2VuZXJhdG9yIDogcHVibGljIEZpZWxkR2Vu
ZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIE1lc3NhZ2VGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRp
b25zJiBvcHRpb25zKTsKLSAgfk1lc3NhZ2VGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8vIGltcGxl
bWVudHMgRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gIHZvaWQgR2VuZXJhdGVQcml2YXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVEZXBlbmRlbnRBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVBY2Nlc3NvckRlY2xhcmF0
aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVEZXBlbmRl
bnRJbmxpbmVBY2Nlc3NvckRlZmluaXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsK
LSAgdm9pZCBHZW5lcmF0ZUlubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHBy
aW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNf
aW5saW5lKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU5vbklubGluZUFjY2Vzc29yRGVmaW5pdGlv
bnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQ2xlYXJpbmdD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdpbmdD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVN3YXBwaW5n
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDb25zdHJ1
Y3RvckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVy
Z2VGcm9tQ29kZWRTdHJlYW0oaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnl0ZVNpemUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJvdGVjdGVkOgotICB2b2lkIEdlbmVyYXRlQXJlbmFN
YW5pcHVsYXRpb25Db2RlKGNvbnN0IG1hcDxzdHJpbmcsIHN0cmluZz4mIHZhcmlhYmxlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlR2V0dGVyRGVjbGFyYXRpb24oaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3Jp
cHRvcl87Ci0gIGNvbnN0IGJvb2wgZGVwZW5kZW50X2ZpZWxkXzsKLSAgbWFwPHN0cmluZywgc3Ry
aW5nPiB2YXJpYWJsZXNfOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09O
U1RSVUNUT1JTKE1lc3NhZ2VGaWVsZEdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBNZXNzYWdlT25l
b2ZGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBNZXNzYWdlRmllbGRHZW5lcmF0b3IgewotIHB1Ymxp
YzoKLSAgTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBv
cHRpb25zKTsKLSAgfk1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVt
ZW50cyBGaWVsZEdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgdm9pZCBHZW5lcmF0ZURlcGVuZGVudEFjY2Vzc29yRGVjbGFyYXRpb25zKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZURlcGVuZGVudElubGluZUFjY2Vz
c29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19pbmxpbmUpIGNvbnN0
OwotICB2b2lkIEdlbmVyYXRlTm9uSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDbGVhcmluZ0NvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU3dhcHBpbmdDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNvbnN0cnVjdG9yQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZvaWQgR2VuZXJhdGVH
ZXR0ZXJEZWNsYXJhdGlvbihpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSBwcml2YXRl
OgotICB2b2lkIEludGVybmFsR2VuZXJhdGVJbmxpbmVBY2Nlc3NvckRlZmluaXRpb25zKAotICAg
ICAgY29uc3QgbWFwPHN0cmluZywgc3RyaW5nPiYgdmFyaWFibGVzLCBpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0KLSAgY29uc3QgYm9vbCBkZXBlbmRlbnRfYmFzZV87Ci0gIEdPT0dMRV9E
SVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcik7Ci19
OwotCi1jbGFzcyBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBGaWVsZEdl
bmVyYXRvciB7Ci0gcHVibGljOgotICBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcihjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotICB+UmVwZWF0ZWRNZXNzYWdlRmllbGRH
ZW5lcmF0b3IoKTsKLQotICAvLyBpbXBsZW1lbnRzIEZpZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2b2lkIEdlbmVyYXRlUHJpdmF0ZU1lbWJl
cnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRGVwZW5kZW50
QWNjZXNzb3JEZWNsYXJhdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlQWNjZXNzb3JEZWNsYXJhdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
OwotICB2b2lkIEdlbmVyYXRlRGVwZW5kZW50SW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbmxpbmVBY2Nlc3NvckRl
ZmluaXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGlzX2lubGluZSkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVD
bGVhcmluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
TWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
U3dhcHBpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZUNvbnN0cnVjdG9yQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2Vu
ZXJhdGVNZXJnZUZyb21Db2RlZFN0cmVhbShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJh
eShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCeXRlU2l6ZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSBwcml2YXRlOgotICB2b2lkIEludGVybmFs
R2VuZXJhdGVUeXBlRGVwZW5kZW50QWNjZXNzb3JEZWNsYXJhdGlvbnMoCi0gICAgICBpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yXzsKLSAgY29uc3QgYm9vbCBkZXBlbmRlbnRfZmllbGRfOwotICBjb25zdCBib29sIGRlcGVu
ZGVudF9nZXR0ZXJfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0KLSAgR09P
R0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJh
dG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxl
cgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNl
bmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9NRVNTQUdFX0ZJRUxEX0hfXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfb3B0aW9ucy5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfb3B0aW9ucy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjFkMmVkMzhhOGNhZTk5YWMwMWE3ZGRkOGFlMTI4NWRh
MjdmMzZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX29wdGlvbnMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDY3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyBBdXRob3I6IHJlbm5pZUBnb29nbGUuY29tIChKZWZmcmV5IFJlbm5pZSkKLQotI2lmbmRlZiBH
T09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1BQX09QVElPTlNfSF9fCi0jZGVmaW5lIEdPT0dMRV9Q
Uk9UT0JVRl9DT01QSUxFUl9DUFBfT1BUSU9OU19IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3Bh
Y2UgY3BwIHsKLQotLy8gR2VuZXJhdG9yIG9wdGlvbnMgKHNlZSBnZW5lcmF0b3IuY2MgZm9yIGEg
ZGVzY3JpcHRpb24gb2YgZWFjaCk6Ci1zdHJ1Y3QgT3B0aW9ucyB7Ci0gIE9wdGlvbnMoKQotICAg
ICAgOiBzYWZlX2JvdW5kYXJ5X2NoZWNrKGZhbHNlKSwKLSAgICAgICAgcHJvdG9faChmYWxzZSks
Ci0gICAgICAgIGFubm90YXRlX2hlYWRlcnMoZmFsc2UpLAotICAgICAgICBlbmZvcmNlX2xpdGUo
ZmFsc2UpIHt9Ci0KLSAgc3RyaW5nIGRsbGV4cG9ydF9kZWNsOwotICBib29sIHNhZmVfYm91bmRh
cnlfY2hlY2s7Ci0gIGJvb2wgcHJvdG9faDsKLSAgYm9vbCBhbm5vdGF0ZV9oZWFkZXJzOwotICBi
b29sIGVuZm9yY2VfbGl0ZTsKLSAgc3RyaW5nIGFubm90YXRpb25fcHJhZ21hX25hbWU7Ci0gIHN0
cmluZyBhbm5vdGF0aW9uX2d1YXJkX25hbWU7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgY3BwCi19
ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi0KLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVS
X0NQUF9PUFRJT05TX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfcGx1Z2luX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfcGx1Z2luX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzNGE0MWQ4MjMyZWY1NDU0Yjg1NzRjYTE2OTc2MTg4MmFiZWU5M2YwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jcHAvY3BwX3BsdWdpbl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDI1MiAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBr
ZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8KLS8vIFRPRE8oa2VudG9uKTogIFNo
YXJlIGNvZGUgd2l0aCB0aGUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0IGluIG90aGVyIGxhbmd1YWdl
cz8KLS8vICAgSXQgc2VlbWVkIGxpa2UgcGFyYW1ldGVyaXppbmcgaXQgd291bGQgYWRkIG1vcmUg
Y29tcGxleGl0eSB0aGFuIGl0IGlzCi0vLyAgIHdvcnRoLgotCi0jaW5jbHVkZSA8bWVtb3J5Pgot
I2lmbmRlZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3No
YXJlZF9wdHIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfZ2VuZXJhdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NvbW1hbmRfbGluZV9pbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8v
emVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVy
Lmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmlsZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi1u
YW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGls
ZXIgewotbmFtZXNwYWNlIGNwcCB7Ci1uYW1lc3BhY2UgewotCi1jbGFzcyBUZXN0R2VuZXJhdG9y
IDogcHVibGljIENvZGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgVGVzdEdlbmVyYXRvcigpIHt9
Ci0gIH5UZXN0R2VuZXJhdG9yKCkge30KLQotICB2aXJ0dWFsIGJvb2wgR2VuZXJhdGUoY29uc3Qg
RmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmcmIHBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckNvbnRleHQq
IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcqIGVycm9yKSBjb25zdCB7
Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiaW5jbHVkZXMiLCBjb250ZXh0KTsKLSAgICBU
cnlJbnNlcnQoInRlc3QucGIuaCIsICJuYW1lc3BhY2Vfc2NvcGUiLCBjb250ZXh0KTsKLSAgICBU
cnlJbnNlcnQoInRlc3QucGIuaCIsICJnbG9iYWxfc2NvcGUiLCBjb250ZXh0KTsKLSAgICBUcnlJ
bnNlcnQoInRlc3QucGIuaCIsICJjbGFzc19zY29wZTpmb28uQmFyIiwgY29udGV4dCk7Ci0gICAg
VHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiY2xhc3Nfc2NvcGU6Zm9vLkJhci5CYXoiLCBjb250ZXh0
KTsKLQotICAgIFRyeUluc2VydCgidGVzdC5wYi5jYyIsICJpbmNsdWRlcyIsIGNvbnRleHQpOwot
ICAgIFRyeUluc2VydCgidGVzdC5wYi5jYyIsICJuYW1lc3BhY2Vfc2NvcGUiLCBjb250ZXh0KTsK
LSAgICBUcnlJbnNlcnQoInRlc3QucGIuY2MiLCAiZ2xvYmFsX3Njb3BlIiwgY29udGV4dCk7Ci0K
LSAgICAvLyBDaGVjayBmaWVsZCBhY2Nlc3NvcnMgZm9yIGFuIG9wdGlvbmFsIGludDMyOgotICAg
IFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX2dldDpmb28uQmFyLm9wdEludCIsIGNvbnRl
eHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX3NldDpmb28uQmFyLm9wdElu
dCIsIGNvbnRleHQpOwotCi0gICAgLy8gQ2hlY2sgZmllbGQgYWNjZXNzb3JzIGZvciBhIHJlcGVh
dGVkIGludDMyOgotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX2dldDpmb28uQmFy
LnJlcGVhdGVkSW50IiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmll
bGRfc2V0OmZvby5CYXIucmVwZWF0ZWRJbnQiLCBjb250ZXh0KTsKLQotICAgIC8vIENoZWNrIGZp
ZWxkIGFjY2Vzc29ycyBmb3IgYSByZXF1aXJlZCBzdHJpbmc6Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0
LnBiLmgiLCAiZmllbGRfZ2V0OmZvby5CYXIucmVxdWlyZWRTdHJpbmciLCBjb250ZXh0KTsKLSAg
ICBUcnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9zZXQ6Zm9vLkJhci5yZXF1aXJlZFN0cmlu
ZyIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX3NldF9jaGFy
OmZvby5CYXIucmVxdWlyZWRTdHJpbmciLCBjb250ZXh0KTsKLSAgICBUcnlJbnNlcnQoInRlc3Qu
cGIuaCIsICJmaWVsZF9zZXRfcG9pbnRlcjpmb28uQmFyLnJlcXVpcmVkU3RyaW5nIiwgY29udGV4
dCk7Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfbXV0YWJsZTpmb28uQmFyLnJl
cXVpcmVkU3RyaW5nIiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmll
bGRfc2V0X2FsbG9jYXRlZDpmb28uQmFyLnJlcXVpcmVkU3RyaW5nIiwKLSAgICAgICAgICAgICAg
Y29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfc2V0X2NoYXI6Zm9v
LkJhci5yZXF1aXJlZFN0cmluZyIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5o
IiwgImZpZWxkX3NldF9wb2ludGVyOmZvby5CYXIucmVxdWlyZWRTdHJpbmciLCBjb250ZXh0KTsK
LQotICAgIC8vIENoZWNrIGZpZWxkIGFjY2Vzc29ycyBmb3IgYSByZXBlYXRlZCBzdHJpbmc6Ci0g
ICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfZ2V0OmZvby5CYXIucmVwZWF0ZWRTdHJp
bmciLCBjb250ZXh0KTsKLSAgICBUcnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9zZXQ6Zm9v
LkJhci5yZXBlYXRlZFN0cmluZyIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5o
IiwgImZpZWxkX3NldF9jaGFyOmZvby5CYXIucmVwZWF0ZWRTdHJpbmciLCBjb250ZXh0KTsKLSAg
ICBUcnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9zZXRfcG9pbnRlcjpmb28uQmFyLnJlcGVh
dGVkU3RyaW5nIiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRf
bXV0YWJsZTpmb28uQmFyLnJlcGVhdGVkU3RyaW5nIiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0
KCJ0ZXN0LnBiLmgiLCAiZmllbGRfc2V0X2NoYXI6Zm9vLkJhci5yZXBlYXRlZFN0cmluZyIsIGNv
bnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX3NldF9wb2ludGVyOmZv
by5CYXIucmVwZWF0ZWRTdHJpbmciLCBjb250ZXh0KTsKLQotICAgIC8vIENoZWNrIGZpZWxkIGFj
Y2Vzc29ycyBmb3IgYW4gaW50IGluc2lkZSBvbmVvZnt9OgotICAgIFRyeUluc2VydCgidGVzdC5w
Yi5oIiwgImZpZWxkX2dldDpmb28uQmFyLm9uZU9mSW50IiwgY29udGV4dCk7Ci0gICAgVHJ5SW5z
ZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfc2V0OmZvby5CYXIub25lT2ZJbnQiLCBjb250ZXh0KTsK
LQotICAgIC8vIENoZWNrIGZpZWxkIGFjY2Vzc29ycyBmb3IgYSBzdHJpbmcgaW5zaWRlIG9uZW9m
e306Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfZ2V0OmZvby5CYXIub25lT2ZT
dHJpbmciLCBjb250ZXh0KTsKLSAgICBUcnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9zZXQ6
Zm9vLkJhci5vbmVPZlN0cmluZyIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5o
IiwgImZpZWxkX3NldF9jaGFyOmZvby5CYXIub25lT2ZTdHJpbmciLCBjb250ZXh0KTsKLSAgICBU
cnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9zZXRfcG9pbnRlcjpmb28uQmFyLm9uZU9mU3Ry
aW5nIiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfbXV0YWJs
ZTpmb28uQmFyLm9uZU9mU3RyaW5nIiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBi
LmgiLCAiZmllbGRfc2V0X2FsbG9jYXRlZDpmb28uQmFyLm9uZU9mU3RyaW5nIiwgY29udGV4dCk7
Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfc2V0X2NoYXI6Zm9vLkJhci5vbmVP
ZlN0cmluZyIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX3Nl
dF9wb2ludGVyOmZvby5CYXIub25lT2ZTdHJpbmciLCBjb250ZXh0KTsKLQotICAgIC8vIENoZWNr
IGZpZWxkIGFjY2Vzc29ycyBmb3IgYW4gb3B0aW9uYWwgbWVzc2FnZToKLSAgICBUcnlJbnNlcnQo
InRlc3QucGIuaCIsICJmaWVsZF9nZXQ6Zm9vLkJhci5vcHRNZXNzYWdlIiwgY29udGV4dCk7Ci0g
ICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfbXV0YWJsZTpmb28uQmFyLm9wdE1lc3Nh
Z2UiLCBjb250ZXh0KTsKLSAgICBUcnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9zZXRfYWxs
b2NhdGVkOmZvby5CYXIub3B0TWVzc2FnZSIsIGNvbnRleHQpOwotCi0gICAgLy8gQ2hlY2sgZmll
bGQgYWNjZXNzb3JzIGZvciBhIHJlcGVhdGVkIG1lc3NhZ2U6Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0
LnBiLmgiLCAiZmllbGRfYWRkOmZvby5CYXIucmVwZWF0ZWRNZXNzYWdlIiwgY29udGV4dCk7Ci0g
ICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfZ2V0OmZvby5CYXIucmVwZWF0ZWRNZXNz
YWdlIiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfbGlzdDpm
b28uQmFyLnJlcGVhdGVkTWVzc2FnZSIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5w
Yi5oIiwgImZpZWxkX211dGFibGU6Zm9vLkJhci5yZXBlYXRlZE1lc3NhZ2UiLCBjb250ZXh0KTsK
LSAgICBUcnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9tdXRhYmxlX2xpc3Q6Zm9vLkJhci5y
ZXBlYXRlZE1lc3NhZ2UiLAotICAgICAgICAgICAgICBjb250ZXh0KTsKLQotICAgIC8vIENoZWNr
IGZpZWxkIGFjY2Vzc29ycyBmb3IgYSBtZXNzYWdlIGluc2lkZSBvbmVvZnt9OgotICAgIFRyeUlu
c2VydCgidGVzdC5wYi5oIiwgImZpZWxkX2dldDpmb28uQmFyLm9uZU9mTWVzc2FnZSIsIGNvbnRl
eHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX211dGFibGU6Zm9vLkJhci5v
bmVPZk1lc3NhZ2UiLCBjb250ZXh0KTsKLSAgICBUcnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVs
ZF9zZXRfYWxsb2NhdGVkOmZvby5CYXIub25lT2ZNZXNzYWdlIiwgY29udGV4dCk7Ci0KLSAgICAv
LyBDaGVjayBmaWVsZCBhY2Nlc3NvcnMgZm9yIGFuIG9wdGlvbmFsIGVudW06Ci0gICAgVHJ5SW5z
ZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfZ2V0OmZvby5CYXIub3B0RW51bSIsIGNvbnRleHQpOwot
ICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX3NldDpmb28uQmFyLm9wdEVudW0iLCBj
b250ZXh0KTsKLQotICAgIC8vIENoZWNrIGZpZWxkIGFjY2Vzc29ycyBmb3IgYSByZXBlYXRlZCBl
bnVtOgotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX2dldDpmb28uQmFyLnJlcGVh
dGVkRW51bSIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX3Nl
dDpmb28uQmFyLnJlcGVhdGVkRW51bSIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5w
Yi5oIiwgImZpZWxkX2FkZDpmb28uQmFyLnJlcGVhdGVkRW51bSIsIGNvbnRleHQpOwotICAgIFRy
eUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX2xpc3Q6Zm9vLkJhci5yZXBlYXRlZEVudW0iLCBj
b250ZXh0KTsKLSAgICBUcnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9tdXRhYmxlX2xpc3Q6
Zm9vLkJhci5yZXBlYXRlZEVudW0iLCBjb250ZXh0KTsKLQotICAgIC8vIENoZWNrIGZpZWxkIGFj
Y2Vzc29ycyBmb3IgYW4gZW51bSBpbnNpZGUgb25lb2Z7fToKLSAgICBUcnlJbnNlcnQoInRlc3Qu
cGIuaCIsICJmaWVsZF9nZXQ6Zm9vLkJhci5vbmVPZkVudW0iLCBjb250ZXh0KTsKLSAgICBUcnlJ
bnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9zZXQ6Zm9vLkJhci5vbmVPZkVudW0iLCBjb250ZXh0
KTsKLQotICAgIC8vIENoZWNrIGZpZWxkIGFjY2Vzc29ycyBmb3IgYSByZXF1aXJlZCBjb3JkOgot
ICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX2dldDpmb28uQmFyLnJlcXVpcmVkQ29y
ZCIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX3NldDpmb28u
QmFyLnJlcXVpcmVkQ29yZCIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwg
ImZpZWxkX211dGFibGU6Zm9vLkJhci5yZXF1aXJlZENvcmQiLCBjb250ZXh0KTsKLQotICAgIC8v
IENoZWNrIGZpZWxkIGFjY2Vzc29ycyBmb3IgYSByZXBlYXRlZCBjb3JkOgotICAgIFRyeUluc2Vy
dCgidGVzdC5wYi5oIiwgImZpZWxkX2dldDpmb28uQmFyLnJlcGVhdGVkQ29yZCIsIGNvbnRleHQp
OwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX3NldDpmb28uQmFyLnJlcGVhdGVk
Q29yZCIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5oIiwgImZpZWxkX2FkZDpm
b28uQmFyLnJlcGVhdGVkQ29yZCIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdC5wYi5o
IiwgImZpZWxkX2xpc3Q6Zm9vLkJhci5yZXBlYXRlZENvcmQiLCBjb250ZXh0KTsKLSAgICBUcnlJ
bnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9tdXRhYmxlOmZvby5CYXIucmVwZWF0ZWRDb3JkIiwg
Y29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KCJ0ZXN0LnBiLmgiLCAiZmllbGRfbXV0YWJsZV9saXN0
OmZvby5CYXIucmVwZWF0ZWRDb3JkIiwgY29udGV4dCk7Ci0KLSAgICAvLyBDaGVjayBmaWVsZCBh
Y2Nlc3NvcnMgZm9yIGEgY29yZCBpbnNpZGUgb25lb2Z7fToKLSAgICBUcnlJbnNlcnQoInRlc3Qu
cGIuaCIsICJmaWVsZF9nZXQ6Zm9vLkJhci5vbmVPZkNvcmQiLCBjb250ZXh0KTsKLSAgICBUcnlJ
bnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9zZXQ6Zm9vLkJhci5vbmVPZkNvcmQiLCBjb250ZXh0
KTsKLSAgICBUcnlJbnNlcnQoInRlc3QucGIuaCIsICJmaWVsZF9tdXRhYmxlOmZvby5CYXIub25l
T2ZDb3JkIiwgY29udGV4dCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHZvaWQgVHJ5
SW5zZXJ0KGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IHN0cmluZyYgaW5zZXJ0aW9uX3Bv
aW50LAotICAgICAgICAgICAgICAgICBHZW5lcmF0b3JDb250ZXh0KiBjb250ZXh0KSBjb25zdCB7
Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxpbzo6WmVyb0NvcHlPdXRwdXRTdHJl
YW0+IG91dHB1dCgKLSAgICAgICAgY29udGV4dC0+T3BlbkZvckluc2VydChmaWxlbmFtZSwgaW5z
ZXJ0aW9uX3BvaW50KSk7Ci0gICAgaW86OlByaW50ZXIgcHJpbnRlcihvdXRwdXQuZ2V0KCksICck
Jyk7Ci0gICAgcHJpbnRlci5QcmludCgiLy8gaW5zZXJ0ZWQgJG5hbWUkXG4iLCAibmFtZSIsIGlu
c2VydGlvbl9wb2ludCk7Ci0gIH0KLX07Ci0KLS8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGFs
bCB0aGUgZXhwZWN0ZWQgaW5zZXJ0aW9uIHBvaW50cyBleGlzdC4gIEl0IGRvZXMKLS8vIG5vdCB2
ZXJpZnkgdGhhdCB0aGV5IGFyZSBjb3JyZWN0bHktcGxhY2VkOyB0aGF0IHdvdWxkIHJlcXVpcmUg
YWN0dWFsbHkKLS8vIGNvbXBpbGluZyB0aGUgb3V0cHV0IHdoaWNoIGlzIGEgYml0IG1vcmUgdGhh
biBJIGNhcmUgdG8gZG8gZm9yIHRoaXMgdGVzdC4KLVRFU1QoQ3BwUGx1Z2luVGVzdCwgUGx1Z2lu
VGVzdCkgewotICBHT09HTEVfQ0hFQ0tfT0soRmlsZTo6U2V0Q29udGVudHMoVGVzdFRlbXBEaXIo
KSArICIvdGVzdC5wcm90byIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeW50YXgg
PSBcInByb3RvMlwiO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSBm
b287XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImVudW0gVGh1ZCB7IFZBTFVFID0gMDsgfVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXNz
YWdlIEJhciB7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG1lc3NhZ2UgQmF6
IHt9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG9wdGlvbmFsIGludDMyIG9w
dEludCA9IDE7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHJlcGVhdGVkIGlu
dDMyIHJlcGVhdGVkSW50ID0gMjtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICByZXF1aXJlZCBzdHJpbmcgcmVxdWly
ZWRTdHJpbmcgPSAzO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICByZXBlYXRl
ZCBzdHJpbmcgcmVwZWF0ZWRTdHJpbmcgPSA0O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIG9wdGlvbmFsIEJheiBv
cHRNZXNzYWdlID0gNjtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgcmVwZWF0
ZWQgQmF6IHJlcGVhdGVkTWVzc2FnZSA9IDc7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgb3B0aW9uYWwgVGh1ZCBv
cHRFbnVtID0gODtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgcmVwZWF0ZWQg
VGh1ZCByZXBlYXRlZEVudW0gPSA5O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVkIHN0cmluZyByZXF1
aXJlZENvcmQgPSAxMCBbXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgY3R5
cGUgPSBDT1JEXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIF07XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgIHJlcGVhdGVkIHN0cmluZyByZXBlYXRlZENvcmQg
PSAxMSBbXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgY3R5cGUgPSBDT1JE
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIF07XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgb25l
b2YgUXV4IHtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBpbnQ2NCBvbmVP
ZkludCA9IDIwO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0cmluZyBv
bmVPZlN0cmluZyA9IDIxO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIEJh
eiBvbmVPZk1lc3NhZ2UgPSAyMjtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBUaHVkIG9uZU9mRW51bSA9IDIzOyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBzdHJpbmcgb25lT2ZDb3JkID0gMjQgW1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiICAgICAgY3R5cGUgPSBDT1JEXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgXTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgfVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSkpOwotCi0gIGdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyOjpDb21tYW5kTGluZUludGVy
ZmFjZSBjbGk7Ci0gIGNsaS5TZXRJbnB1dHNBcmVQcm90b1BhdGhSZWxhdGl2ZSh0cnVlKTsKLQot
ICBDcHBHZW5lcmF0b3IgY3BwX2dlbmVyYXRvcjsKLSAgVGVzdEdlbmVyYXRvciB0ZXN0X2dlbmVy
YXRvcjsKLSAgY2xpLlJlZ2lzdGVyR2VuZXJhdG9yKCItLWNwcF9vdXQiLCAmY3BwX2dlbmVyYXRv
ciwgIiIpOwotICBjbGkuUmVnaXN0ZXJHZW5lcmF0b3IoIi0tdGVzdF9vdXQiLCAmdGVzdF9nZW5l
cmF0b3IsICIiKTsKLQotICBzdHJpbmcgcHJvdG9fcGF0aCA9ICItSSIgKyBUZXN0VGVtcERpcigp
OwotICBzdHJpbmcgY3BwX291dCA9ICItLWNwcF9vdXQ9IiArIFRlc3RUZW1wRGlyKCk7Ci0gIHN0
cmluZyB0ZXN0X291dCA9ICItLXRlc3Rfb3V0PSIgKyBUZXN0VGVtcERpcigpOwotCi0gIGNvbnN0
IGNoYXIqIGFyZ3ZbXSA9IHsKLSAgICAicHJvdG9jIiwKLSAgICBwcm90b19wYXRoLmNfc3RyKCks
Ci0gICAgY3BwX291dC5jX3N0cigpLAotICAgIHRlc3Rfb3V0LmNfc3RyKCksCi0gICAgInRlc3Qu
cHJvdG8iCi0gIH07Ci0KLSAgRVhQRUNUX0VRKDAsIGNsaS5SdW4oNSwgYXJndikpOwotfQotCi19
ICAvLyBuYW1lc3BhY2UKLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21w
aWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9wcmltaXRpdmVf
ZmllbGQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9wcmltaXRpdmVf
ZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MGYwMzgxZTViMTI0NjIy
MjEyMjQyMzEwOTVmNDk5Y2EzZWMzNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfcHJpbWl0
aXZlX2ZpZWxkLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDU4ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChL
ZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNp
Z24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3ByaW1pdGl2ZV9maWVsZC5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2hlbHBlcnMuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsKLQotdXNpbmcgaW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOwotCi1uYW1lc3BhY2UgewotCi0vLyBGb3IgZW5jb2RpbmdzIHdpdGgg
Zml4ZWQgc2l6ZXMsIHJldHVybnMgdGhhdCBzaXplIGluIGJ5dGVzLiAgT3RoZXJ3aXNlCi0vLyBy
ZXR1cm5zIC0xLgotaW50IEZpeGVkU2l6ZShGaWVsZERlc2NyaXB0b3I6OlR5cGUgdHlwZSkgewot
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQzMiAg
IDogcmV0dXJuIC0xOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDY0ICAgOiBy
ZXR1cm4gLTE7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfVUlOVDMyICA6IHJldHVy
biAtMTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UNjQgIDogcmV0dXJuIC0x
OwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQzMiAgOiByZXR1cm4gLTE7Ci0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDY0ICA6IHJldHVybiAtMTsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhFRDMyIDogcmV0dXJuIFdpcmVGb3JtYXRMaXRl
OjprRml4ZWQzMlNpemU7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRklYRUQ2NCA6
IHJldHVybiBXaXJlRm9ybWF0TGl0ZTo6a0ZpeGVkNjRTaXplOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX1NGSVhFRDMyOiByZXR1cm4gV2lyZUZvcm1hdExpdGU6OmtTRml4ZWQzMlNp
emU7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVENjQ6IHJldHVybiBXaXJl
Rm9ybWF0TGl0ZTo6a1NGaXhlZDY0U2l6ZTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9GTE9BVCAgIDogcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjprRmxvYXRTaXplOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX0RPVUJMRSAgOiByZXR1cm4gV2lyZUZvcm1hdExpdGU6OmtE
b3VibGVTaXplOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQk9PTCAgICA6IHJl
dHVybiBXaXJlRm9ybWF0TGl0ZTo6a0Jvb2xTaXplOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX0VOVU0gICAgOiByZXR1cm4gLTE7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV9TVFJJTkcgIDogcmV0dXJuIC0xOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBF
X0JZVEVTICAgOiByZXR1cm4gLTE7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JP
VVAgICA6IHJldHVybiAtMTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdF
IDogcmV0dXJuIC0xOwotCi0gICAgLy8gTm8gZGVmYXVsdCBiZWNhdXNlIHdlIHdhbnQgdGhlIGNv
bXBpbGVyIHRvIGNvbXBsYWluIGlmIGFueSBuZXcKLSAgICAvLyB0eXBlcyBhcmUgYWRkZWQuCi0g
IH0KLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJldHVybiAt
MTsKLX0KLQotdm9pZCBTZXRQcmltaXRpdmVWYXJpYWJsZXMoY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwPHN0cmluZywgc3Ry
aW5nPiogdmFyaWFibGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9u
cyYgb3B0aW9ucykgewotICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhkZXNjcmlwdG9yLCB2YXJp
YWJsZXMsIG9wdGlvbnMpOwotICAoKnZhcmlhYmxlcylbInR5cGUiXSA9IFByaW1pdGl2ZVR5cGVO
YW1lKGRlc2NyaXB0b3ItPmNwcF90eXBlKCkpOwotICAoKnZhcmlhYmxlcylbImRlZmF1bHQiXSA9
IERlZmF1bHRWYWx1ZShkZXNjcmlwdG9yKTsKLSAgKCp2YXJpYWJsZXMpWyJ0YWciXSA9IFNpbXBs
ZUl0b2EoaW50ZXJuYWw6OldpcmVGb3JtYXQ6Ok1ha2VUYWcoZGVzY3JpcHRvcikpOwotICBpbnQg
Zml4ZWRfc2l6ZSA9IEZpeGVkU2l6ZShkZXNjcmlwdG9yLT50eXBlKCkpOwotICBpZiAoZml4ZWRf
c2l6ZSAhPSAtMSkgewotICAgICgqdmFyaWFibGVzKVsiZml4ZWRfc2l6ZSJdID0gU2ltcGxlSXRv
YShmaXhlZF9zaXplKTsKLSAgfQotICAoKnZhcmlhYmxlcylbIndpcmVfZm9ybWF0X2ZpZWxkX3R5
cGUiXSA9Ci0gICAgICAiOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OiIgKyBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX05hbWUoCi0gICAgICAgICAgc3RhdGlj
X2Nhc3Q8RmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZT4oZGVzY3JpcHRvci0+dHlwZSgpKSk7Ci0g
ICgqdmFyaWFibGVzKVsiZnVsbF9uYW1lIl0gPSBkZXNjcmlwdG9yLT5mdWxsX25hbWUoKTsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUHJpbWl0aXZlRmllbGRHZW5l
cmF0b3I6OlByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZGVzY3JpcHRvciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IEZpZWxkR2VuZXJh
dG9yKG9wdGlvbnMpLCBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSB7Ci0gIFNldFByaW1pdGl2ZVZh
cmlhYmxlcyhkZXNjcmlwdG9yLCAmdmFyaWFibGVzXywgb3B0aW9ucyk7Ci19Ci0KLVByaW1pdGl2
ZUZpZWxkR2VuZXJhdG9yOjp+UHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIFBy
aW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUHJpdmF0ZU1lbWJlcnMoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgIiR0eXBl
JCAkbmFtZSRfO1xuIik7Ci19Ci0KLXZvaWQgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qgewot
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRlZF9hdHRyJCR0eXBl
JCAkbmFtZSQoKSBjb25zdDtcbiIKLSAgICAiJGRlcHJlY2F0ZWRfYXR0ciR2b2lkIHNldF8kbmFt
ZSQoJHR5cGUkIHZhbHVlKTtcbiIpOwotfQotCi12b2lkIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRl
ciwgYm9vbCBpc19pbmxpbmUpIGNvbnN0IHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJs
ZXModmFyaWFibGVzXyk7Ci0gIHZhcmlhYmxlc1siaW5saW5lIl0gPSBpc19pbmxpbmUgPyAiaW5s
aW5lIiA6ICIiOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgIiRpbmxpbmUkICR0
eXBlJCAkY2xhc3NuYW1lJDo6JG5hbWUkKCkgY29uc3Qge1xuIgotICAgICIgIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgIiAgcmV0dXJu
ICRuYW1lJF87XG4iCi0gICAgIn1cbiIKLSAgICAiJGlubGluZSQgdm9pZCAkY2xhc3NuYW1lJDo6
c2V0XyRuYW1lJCgkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiICAkc2V0X2hhc2JpdCRcbiIKLSAg
ICAiICAkbmFtZSRfID0gdmFsdWU7XG4iCi0gICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldDokZnVsbF9uYW1lJClcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUHJp
bWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVDbGVhcmluZ0NvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgIiRuYW1lJF8g
PSAkZGVmYXVsdCQ7XG4iKTsKLX0KLQotdm9pZCBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1H
ZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sICJzZXRfJG5hbWUkKGZyb20uJG5hbWUkKCkpO1xuIik7Ci19
Ci0KLXZvaWQgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTd2FwcGluZ0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywgInN0ZDo6c3dhcCgkbmFtZSRfLCBvdGhlci0+JG5hbWUkXyk7XG4iKTsKLX0KLQotdm9pZCBQ
cmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNvbnN0cnVjdG9yQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiJG5h
bWUkXyA9ICRkZWZhdWx0JDtcbiIpOwotfQotCi12b2lkIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlTWVyZ2VGcm9tQ29kZWRTdHJlYW0oaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiRE9fKCg6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTxcbiIKLSAg
ICAiICAgICAgICAgJHR5cGUkLCAkd2lyZV9mb3JtYXRfZmllbGRfdHlwZSQ+KFxuIgotICAgICIg
ICAgICAgaW5wdXQsICYkbmFtZSRfKSkpO1xuIgotICAgICIkc2V0X2hhc2JpdCRcbiIpOwotfQot
Ci12b2lkIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplV2l0aENh
Y2hlZFNpemVzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgIjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpXcml0ZSRkZWNsYXJlZF90eXBlJCgiCi0gICAgICAiJG51bWJlciQsIHRoaXMtPiRu
YW1lJCgpLCBvdXRwdXQpO1xuIik7Ci19Ci0KLXZvaWQgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInRhcmdl
dCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZSRk
ZWNsYXJlZF90eXBlJFRvQXJyYXkoIgotICAgICAgIiRudW1iZXIkLCB0aGlzLT4kbmFtZSQoKSwg
dGFyZ2V0KTtcbiIpOwotfQotCi12b2lkIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVy
YXRlQnl0ZVNpemUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgaW50IGZpeGVkX3Np
emUgPSBGaXhlZFNpemUoZGVzY3JpcHRvcl8tPnR5cGUoKSk7Ci0gIGlmIChmaXhlZF9zaXplID09
IC0xKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJ0b3RhbF9zaXpl
ICs9ICR0YWdfc2l6ZSQgK1xuIgotICAgICAgIiAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OiRkZWNsYXJlZF90eXBlJFNpemUoXG4iCi0gICAgICAiICAgIHRo
aXMtPiRuYW1lJCgpKTtcbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgICAidG90YWxfc2l6ZSArPSAkdGFnX3NpemUkICsgJGZpeGVkX3NpemUkO1xu
Iik7Ci0gIH0KLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1QcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJh
dG9yOjoKLVByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25z
JiBvcHRpb25zKQotICA6IFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0b3IsIG9wdGlv
bnMpIHsKLSAgU2V0Q29tbW9uT25lb2ZGaWVsZFZhcmlhYmxlcyhkZXNjcmlwdG9yLCAmdmFyaWFi
bGVzXyk7Ci19Ci0KLVByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3I6On5QcmltaXRpdmVPbmVv
ZkZpZWxkR2VuZXJhdG9yKCkge30KLQotdm9pZCBQcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRl
ciwgYm9vbCBpc19pbmxpbmUpIGNvbnN0IHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJs
ZXModmFyaWFibGVzXyk7Ci0gIHZhcmlhYmxlc1siaW5saW5lIl0gPSBpc19pbmxpbmUgPyAiaW5s
aW5lIiA6ICIiOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgIiRpbmxpbmUkICR0
eXBlJCAkY2xhc3NuYW1lJDo6JG5hbWUkKCkgY29uc3Qge1xuIgotICAgICIgIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgIiAgaWYgKGhh
c18kbmFtZSQoKSkge1xuIgotICAgICIgICAgcmV0dXJuICRvbmVvZl9wcmVmaXgkJG5hbWUkXztc
biIKLSAgICAiICB9XG4iCi0gICAgIiAgcmV0dXJuICRkZWZhdWx0JDtcbiIKLSAgICAifVxuIgot
ICAgICIkaW5saW5lJCB2b2lkICRjbGFzc25hbWUkOjpzZXRfJG5hbWUkKCR0eXBlJCB2YWx1ZSkg
e1xuIgotICAgICIgIGlmICghaGFzXyRuYW1lJCgpKSB7XG4iCi0gICAgIiAgICBjbGVhcl8kb25l
b2ZfbmFtZSQoKTtcbiIKLSAgICAiICAgIHNldF9oYXNfJG5hbWUkKCk7XG4iCi0gICAgIiAgfVxu
IgotICAgICIgICRvbmVvZl9wcmVmaXgkJG5hbWUkXyA9IHZhbHVlO1xuIgotICAgICIgIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgIn1c
biIpOwotfQotCi12b2lkIFByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVD
bGVhcmluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywgIiRvbmVvZl9wcmVmaXgkJG5hbWUkXyA9ICRkZWZhdWx0JDtcbiIpOwot
fQotCi12b2lkIFByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTd2FwcGlu
Z0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gRG9uJ3QgcHJpbnQgYW55
IHN3YXBwaW5nIGNvZGUuIFN3YXBwaW5nIHRoZSB1bmlvbiB3aWxsIHN3YXAgdGhpcyBmaWVsZC4K
LX0KLQotdm9pZCBQcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ29uc3Ry
dWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KAotICAgICAgdmFyaWFibGVzXywKLSAgICAgICIgICRjbGFzc25hbWUkX2RlZmF1bHRfb25lb2Zf
aW5zdGFuY2VfLT4kbmFtZSRfID0gJGRlZmF1bHQkO1xuIik7Ci19Ci0KLXZvaWQgUHJpbWl0aXZl
T25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0g
ICAgImNsZWFyXyRvbmVvZl9uYW1lJCgpO1xuIgotICAgICJET18oKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPFxuIgotICAgICIgICAg
ICAgICAkdHlwZSQsICR3aXJlX2Zvcm1hdF9maWVsZF90eXBlJD4oXG4iCi0gICAgIiAgICAgICBp
bnB1dCwgJiRvbmVvZl9wcmVmaXgkJG5hbWUkXykpKTtcbiIKLSAgICAic2V0X2hhc18kbmFtZSQo
KTtcbiIpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5l
cmF0b3I6OlJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoCi0gICAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKQotICAgIDogRmll
bGRHZW5lcmF0b3Iob3B0aW9ucyksIGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpIHsKLSAgU2V0UHJp
bWl0aXZlVmFyaWFibGVzKGRlc2NyaXB0b3IsICZ2YXJpYWJsZXNfLCBvcHRpb25zKTsKLQotICBp
ZiAoZGVzY3JpcHRvci0+aXNfcGFja2VkKCkpIHsKLSAgICB2YXJpYWJsZXNfWyJwYWNrZWRfcmVh
ZGVyIl0gPSAiUmVhZFBhY2tlZFByaW1pdGl2ZSI7Ci0gICAgdmFyaWFibGVzX1sicmVwZWF0ZWRf
cmVhZGVyIl0gPSAiUmVhZFJlcGVhdGVkUHJpbWl0aXZlTm9JbmxpbmUiOwotICB9IGVsc2Ugewot
ICAgIHZhcmlhYmxlc19bInBhY2tlZF9yZWFkZXIiXSA9ICJSZWFkUGFja2VkUHJpbWl0aXZlTm9J
bmxpbmUiOwotICAgIHZhcmlhYmxlc19bInJlcGVhdGVkX3JlYWRlciJdID0gIlJlYWRSZXBlYXRl
ZFByaW1pdGl2ZSI7Ci0gIH0KLX0KLQotUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6
flJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIFJlcGVhdGVkUHJp
bWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVQcml2YXRlTWVtYmVycyhpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICI6
Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8ICR0eXBlJCA+ICRuYW1lJF87XG4iKTsK
LSAgaWYgKGRlc2NyaXB0b3JfLT5pc19wYWNrZWQoKSAmJgotICAgICAgSGFzR2VuZXJhdGVkTWV0
aG9kcyhkZXNjcmlwdG9yXy0+ZmlsZSgpLCBvcHRpb25zXykpIHsKLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICAgIm11dGFibGUgaW50IF8kbmFtZSRfY2FjaGVkX2J5dGVfc2l6
ZV87XG4iKTsKLSAgfQotfQotCi12b2lkIFJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRlZF9hdHRy
JCR0eXBlJCAkbmFtZSQoaW50IGluZGV4KSBjb25zdDtcbiIKLSAgICAiJGRlcHJlY2F0ZWRfYXR0
ciR2b2lkIHNldF8kbmFtZSQoaW50IGluZGV4LCAkdHlwZSQgdmFsdWUpO1xuIgotICAgICIkZGVw
cmVjYXRlZF9hdHRyJHZvaWQgYWRkXyRuYW1lJCgkdHlwZSQgdmFsdWUpO1xuIik7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGVkX2F0dHIkY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpSZXBlYXRlZEZpZWxkPCAkdHlwZSQgPiZcbiIKLSAgICAiICAgICRuYW1l
JCgpIGNvbnN0O1xuIgotICAgICIkZGVwcmVjYXRlZF9hdHRyJDo6Z29vZ2xlOjpwcm90b2J1Zjo6
UmVwZWF0ZWRGaWVsZDwgJHR5cGUkID4qXG4iCi0gICAgIiAgICBtdXRhYmxlXyRuYW1lJCgpO1xu
Iik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZUlubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgaXNf
aW5saW5lKSBjb25zdCB7Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyaWFibGVzKHZhcmlhYmxl
c18pOwotICB2YXJpYWJsZXNbImlubGluZSJdID0gaXNfaW5saW5lID8gImlubGluZSIgOiAiIjsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICIkaW5saW5lJCAkdHlwZSQgJGNsYXNz
bmFtZSQ6OiRuYW1lJChpbnQgaW5kZXgpIGNvbnN0IHtcbiIKLSAgICAiICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0OiRmdWxsX25hbWUkKVxuIgotICAgICIgIHJldHVybiAk
bmFtZSRfLkdldChpbmRleCk7XG4iCi0gICAgIn1cbiIKLSAgICAiJGlubGluZSQgdm9pZCAkY2xh
c3NuYW1lJDo6c2V0XyRuYW1lJChpbnQgaW5kZXgsICR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIg
ICRuYW1lJF8uU2V0KGluZGV4LCB2YWx1ZSk7XG4iCi0gICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldDokZnVsbF9uYW1lJClcbiIKLSAgICAifVxuIgotICAgICIkaW5s
aW5lJCB2b2lkICRjbGFzc25hbWUkOjphZGRfJG5hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAg
ICIgICRuYW1lJF8uQWRkKHZhbHVlKTtcbiIKLSAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfYWRkOiRmdWxsX25hbWUkKVxuIgotICAgICJ9XG4iKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzLAotICAgICIkaW5saW5lJCBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkRmllbGQ8ICR0eXBlJCA+JlxuIgotICAgICIkY2xhc3NuYW1lJDo6JG5hbWUkKCkg
Y29uc3Qge1xuIgotICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0
OiRmdWxsX25hbWUkKVxuIgotICAgICIgIHJldHVybiAkbmFtZSRfO1xuIgotICAgICJ9XG4iCi0g
ICAgIiRpbmxpbmUkIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZDwgJHR5cGUkID4q
XG4iCi0gICAgIiRjbGFzc25hbWUkOjptdXRhYmxlXyRuYW1lJCgpIHtcbiIKLSAgICAiICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0OiRmdWxsX25hbWUkKVxu
IgotICAgICIgIHJldHVybiAmJG5hbWUkXztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUmVw
ZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNsZWFyaW5nQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAi
JG5hbWUkXy5DbGVhcigpO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICIkbmFtZSRfLk1lcmdlRnJvbShmcm9t
LiRuYW1lJF8pO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZVN3YXBwaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qgewot
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiJG5hbWUkXy5VbnNhZmVBcmVuYVN3YXAoJm90
aGVyLT4kbmFtZSRfKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5l
cmF0b3I6OgotR2VuZXJhdGVDb25zdHJ1Y3RvckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgLy8gTm90IG5lZWRlZCBmb3IgcmVwZWF0ZWQgZmllbGRzLgotfQotCi12b2lkIFJl
cGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZXJnZUZyb21Db2RlZFN0
cmVhbShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICJET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjokcmVwZWF0ZWRfcmVhZGVyJDxcbiIKLSAgICAiICAgICAgICAgJHR5cGUkLCAkd2ly
ZV9mb3JtYXRfZmllbGRfdHlwZSQ+KFxuIgotICAgICIgICAgICAgJHRhZ19zaXplJCwgJHRhZyQs
IGlucHV0LCB0aGlzLT5tdXRhYmxlXyRuYW1lJCgpKSkpO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0
ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFt
V2l0aFBhY2tpbmcoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6JHBhY2tlZF9yZWFkZXIkPFxuIgotICAgICIgICAgICAgICAkdHlwZSQs
ICR3aXJlX2Zvcm1hdF9maWVsZF90eXBlJD4oXG4iCi0gICAgIiAgICAgICBpbnB1dCwgdGhpcy0+
bXV0YWJsZV8kbmFtZSQoKSkpKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkUHJpbWl0aXZlRmll
bGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKGRlc2NyaXB0b3JfLT5pc19wYWNrZWQoKSkgewot
ICAgIC8vIFdyaXRlIHRoZSB0YWcgYW5kIHRoZSBzaXplLgotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgICAiaWYgKHRoaXMtPiRuYW1lJF9zaXplKCkgPiAwKSB7XG4iCi0gICAg
ICAiICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVU
YWcoIgotICAgICAgICAgICIkbnVtYmVyJCwgIgotICAgICAgICAgICI6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCwg
IgotICAgICAgICAgICJvdXRwdXQpO1xuIgotICAgICAgIiAgb3V0cHV0LT5Xcml0ZVZhcmludDMy
KF8kbmFtZSRfY2FjaGVkX2J5dGVfc2l6ZV8pO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0gIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlz
LT4kbmFtZSRfc2l6ZSgpOyBpKyspIHtcbiIpOwotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3BhY2tl
ZCgpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZSRkZWNsYXJlZF90eXBl
JE5vVGFnKFxuIgotICAgICAgIiAgICB0aGlzLT4kbmFtZSQoaSksIG91dHB1dCk7XG4iKTsKLSAg
fSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlJGRlY2xhcmVkX3R5
cGUkKFxuIgotICAgICAgIiAgICAkbnVtYmVyJCwgdGhpcy0+JG5hbWUkKGkpLCBvdXRwdXQpO1xu
Iik7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkUHJp
bWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNU
b0FycmF5KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChkZXNjcmlwdG9yXy0+
aXNfcGFja2VkKCkpIHsKLSAgICAvLyBXcml0ZSB0aGUgdGFnIGFuZCB0aGUgc2l6ZS4KLSAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImlmICh0aGlzLT4kbmFtZSRfc2l6ZSgp
ID4gMCkge1xuIgotICAgICAgIiAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OldyaXRlVGFnVG9BcnJheShcbiIKLSAgICAgICIgICAgJG51bWJl
ciQsXG4iCi0gICAgICAiICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELFxuIgotICAgICAgIiAgICB0YXJnZXQp
O1xuIgotICAgICAgIiAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRw
dXRTdHJlYW06OldyaXRlVmFyaW50MzJUb0FycmF5KFxuIgotICAgICAgIiAgICBfJG5hbWUkX2Nh
Y2hlZF9ieXRlX3NpemVfLCB0YXJnZXQpO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT4k
bmFtZSRfc2l6ZSgpOyBpKyspIHtcbiIpOwotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3BhY2tlZCgp
KSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIgIHRhcmdldCA9IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpcbiIKLSAgICAgICIg
ICAgV3JpdGUkZGVjbGFyZWRfdHlwZSROb1RhZ1RvQXJyYXkodGhpcy0+JG5hbWUkKGkpLCB0YXJn
ZXQpO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAgICIgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpcbiIKLSAgICAgICIgICAgV3JpdGUkZGVjbGFyZWRfdHlwZSRUb0FycmF5KCRudW1iZXIk
LCB0aGlzLT4kbmFtZSQoaSksIHRhcmdldCk7XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCgi
fVxuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5l
cmF0ZUJ5dGVTaXplKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgIntcbiIKLSAgICAiICBpbnQgZGF0YV9zaXplID0gMDtcbiIp
OwotICBwcmludGVyLT5JbmRlbnQoKTsKLSAgaW50IGZpeGVkX3NpemUgPSBGaXhlZFNpemUoZGVz
Y3JpcHRvcl8tPnR5cGUoKSk7Ci0gIGlmIChmaXhlZF9zaXplID09IC0xKSB7Ci0gICAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPiRu
YW1lJF9zaXplKCk7IGkrKykge1xuIgotICAgICAgIiAgZGF0YV9zaXplICs9IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpcbiIKLSAgICAgICIgICAgJGRlY2xh
cmVkX3R5cGUkU2l6ZSh0aGlzLT4kbmFtZSQoaSkpO1xuIgotICAgICAgIn1cbiIpOwotICB9IGVs
c2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiZGF0YV9zaXplID0g
JGZpeGVkX3NpemUkICogdGhpcy0+JG5hbWUkX3NpemUoKTtcbiIpOwotICB9Ci0KLSAgaWYgKGRl
c2NyaXB0b3JfLT5pc19wYWNrZWQoKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgICAiaWYgKGRhdGFfc2l6ZSA+IDApIHtcbiIKLSAgICAgICIgIHRvdGFsX3NpemUgKz0g
JHRhZ19zaXplJCArXG4iCi0gICAgICAiICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpJbnQzMlNpemUoZGF0YV9zaXplKTtcbiIKLSAgICAgICJ9XG4iCi0g
ICAgICAiR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTtcbiIKLSAgICAgICJf
JG5hbWUkX2NhY2hlZF9ieXRlX3NpemVfID0gZGF0YV9zaXplO1xuIgotICAgICAgIkdPT0dMRV9T
QUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpO1xuIgotICAgICAgInRvdGFsX3NpemUgKz0gZGF0
YV9zaXplO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAgICJ0b3RhbF9zaXplICs9ICR0YWdfc2l6ZSQgKiB0aGlzLT4kbmFtZSRfc2l6ZSgpICsg
ZGF0YV9zaXplO1xuIik7Ci0gIH0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5Q
cmludCgifVxuIik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBj
b21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9wcmltaXRp
dmVfZmllbGQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3ByaW1pdGl2
ZV9maWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTVlYmRlNDY4Zjc1ODZl
MGQ4OTlhODQwMGE1YTI3MjEwZWI3MmExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3ByaW1p
dGl2ZV9maWVsZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChL
ZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNp
Z24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lm
bmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1BQX1BSSU1JVElWRV9GSUVMRF9IX18KLSNk
ZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9QUklNSVRJVkVfRklFTERfSF9fCi0K
LSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpZWxkLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFt
ZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsK
LQotY2xhc3MgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IgOiBwdWJsaWMgRmllbGRHZW5lcmF0b3Ig
ewotIHB1YmxpYzoKLSAgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlw
dG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25z
JiBvcHRpb25zKTsKLSAgflByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVt
ZW50cyBGaWVsZEdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgdm9pZCBHZW5lcmF0ZVByaXZhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZUFjY2Vzc29yRGVjbGFyYXRpb25zKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUlubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMo
aW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaXNfaW5saW5lKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNsZWFyaW5nQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTd2FwcGluZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQ29uc3RydWN0
b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdl
RnJvbUNvZGVkU3RyZWFtKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ5dGVTaXplKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdDsKLQotIHByb3RlY3RlZDoKLSAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yXzsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotCi0gcHJp
dmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFByaW1pdGl2ZUZpZWxk
R2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIFByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3IgOiBw
dWJsaWMgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgUHJpbWl0aXZlT25l
b2ZGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0gIH5Q
cmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBGaWVsZEdl
bmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBH
ZW5lcmF0ZUlubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfaW5saW5lKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNsZWFyaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTd2FwcGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQ29uc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklM
X0NPTlNUUlVDVE9SUyhQcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNz
IFJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IgOiBwdWJsaWMgRmllbGRHZW5lcmF0b3Ig
ewotIHB1YmxpYzoKLSAgUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0gIH5SZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2Vu
ZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBGaWVsZEdlbmVyYXRvciAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBHZW5lcmF0ZVByaXZhdGVNZW1iZXJz
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUFjY2Vzc29yRGVj
bGFyYXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUlu
bGluZUFjY2Vzc29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfaW5saW5lKSBjb25zdDsKLSAg
dm9pZCBHZW5lcmF0ZUNsZWFyaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVTd2FwcGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlQ29uc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtV2l0aFBhY2tp
bmcoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXpl
V2l0aENhY2hlZFNpemVzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnl0ZVNpemUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsK
LSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotCi0gIEdPT0dMRV9ESVNBTExPV19F
VklMX0NPTlNUUlVDVE9SUyhSZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKTsKLX07Ci0K
LX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09P
R0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9QUklNSVRJVkVfRklFTERfSF9fCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9zZXJ2aWNlLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfc2VydmljZS5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjI2YzJhYTAzYjgwOTRkZmJhMTg0ZDNjY2M3NTBkYThlNzZmOTFlZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9zZXJ2aWNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEs
MzM0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRo
b3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2lu
YWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYg
RGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
cHAvY3BwX3NlcnZpY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3Bw
L2NwcF9oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFt
ZXNwYWNlIGNwcCB7Ci0KLVNlcnZpY2VHZW5lcmF0b3I6OlNlcnZpY2VHZW5lcmF0b3IoY29uc3Qg
U2VydmljZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCi0gIDogZGVzY3JpcHRvcl8oZGVzY3Jp
cHRvcikgewotICB2YXJzX1siY2xhc3NuYW1lIl0gPSBkZXNjcmlwdG9yXy0+bmFtZSgpOwotICB2
YXJzX1siZnVsbF9uYW1lIl0gPSBkZXNjcmlwdG9yXy0+ZnVsbF9uYW1lKCk7Ci0gIGlmIChvcHRp
b25zLmRsbGV4cG9ydF9kZWNsLmVtcHR5KCkpIHsKLSAgICB2YXJzX1siZGxsZXhwb3J0Il0gPSAi
IjsKLSAgfSBlbHNlIHsKLSAgICB2YXJzX1siZGxsZXhwb3J0Il0gPSBvcHRpb25zLmRsbGV4cG9y
dF9kZWNsICsgIiAiOwotICB9Ci19Ci0KLVNlcnZpY2VHZW5lcmF0b3I6On5TZXJ2aWNlR2VuZXJh
dG9yKCkge30KLQotdm9pZCBTZXJ2aWNlR2VuZXJhdG9yOjpHZW5lcmF0ZURlY2xhcmF0aW9ucyhp
bzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBGb3J3YXJkLWRlY2xhcmUgdGhlIHN0dWIgdHlw
ZS4KLSAgcHJpbnRlci0+UHJpbnQodmFyc18sCi0gICAgImNsYXNzICRjbGFzc25hbWUkX1N0dWI7
XG4iCi0gICAgIlxuIik7Ci0KLSAgR2VuZXJhdGVJbnRlcmZhY2UocHJpbnRlcik7Ci0gIEdlbmVy
YXRlU3R1YkRlZmluaXRpb24ocHJpbnRlcik7Ci19Ci0KLXZvaWQgU2VydmljZUdlbmVyYXRvcjo6
R2VuZXJhdGVJbnRlcmZhY2UoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJp
bnQodmFyc18sCi0gICAgImNsYXNzICRkbGxleHBvcnQkJGNsYXNzbmFtZSQgOiBwdWJsaWMgOjpn
b29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlIHtcbiIKLSAgICAiIHByb3RlY3RlZDpcbiIKLSAgICAi
ICAvLyBUaGlzIGNsYXNzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGFic3RyYWN0IGludGVyZmFj
ZS5cbiIKLSAgICAiICBpbmxpbmUgJGNsYXNzbmFtZSQoKSB7fTtcbiIKLSAgICAiIHB1YmxpYzpc
biIKLSAgICAiICB2aXJ0dWFsIH4kY2xhc3NuYW1lJCgpO1xuIik7Ci0gIHByaW50ZXItPkluZGVu
dCgpOwotCi0gIHByaW50ZXItPlByaW50KHZhcnNfLAotICAgICJcbiIKLSAgICAidHlwZWRlZiAk
Y2xhc3NuYW1lJF9TdHViIFN0dWI7XG4iCi0gICAgIlxuIgotICAgICJzdGF0aWMgY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlRGVzY3JpcHRvciogZGVzY3JpcHRvcigpO1xuIgotICAg
ICJcbiIpOwotCi0gIEdlbmVyYXRlTWV0aG9kU2lnbmF0dXJlcyhWSVJUVUFMLCBwcmludGVyKTsK
LQotICBwcmludGVyLT5QcmludCgKLSAgICAiXG4iCi0gICAgIi8vIGltcGxlbWVudHMgU2Vydmlj
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0gICAg
IlxuIgotICAgICJjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlNlcnZpY2VEZXNjcmlwdG9yKiBH
ZXREZXNjcmlwdG9yKCk7XG4iCi0gICAgInZvaWQgQ2FsbE1ldGhvZChjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1ldGhvZERlc2NyaXB0b3IqIG1ldGhvZCxcbiIKLSAgICAiICAgICAgICAgICAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UnBjQ29udHJvbGxlciogY29udHJvbGxlcixcbiIKLSAg
ICAiICAgICAgICAgICAgICAgIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSogcmVx
dWVzdCxcbiIKLSAgICAiICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2Fn
ZSogcmVzcG9uc2UsXG4iCi0gICAgIiAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OkNsb3N1cmUqIGRvbmUpO1xuIgotICAgICJjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3Nh
Z2UmIEdldFJlcXVlc3RQcm90b3R5cGUoXG4iCi0gICAgIiAgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXRob2REZXNjcmlwdG9yKiBtZXRob2QpIGNvbnN0O1xuIgotICAgICJjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIEdldFJlc3BvbnNlUHJvdG90eXBlKFxuIgotICAgICIg
IGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kRGVzY3JpcHRvciogbWV0aG9kKSBjb25z
dDtcbiIpOwotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyc18s
Ci0gICAgIlxuIgotICAgICIgcHJpdmF0ZTpcbiIKLSAgICAiICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoJGNsYXNzbmFtZSQpO1xuIgotICAgICJ9O1xuIgotICAgICJcbiIpOwot
fQotCi12b2lkIFNlcnZpY2VHZW5lcmF0b3I6OkdlbmVyYXRlU3R1YkRlZmluaXRpb24oaW86OlBy
aW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQodmFyc18sCi0gICAgImNsYXNzICRk
bGxleHBvcnQkJGNsYXNzbmFtZSRfU3R1YiA6IHB1YmxpYyAkY2xhc3NuYW1lJCB7XG4iCi0gICAg
IiBwdWJsaWM6XG4iKTsKLQotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBwcmludGVyLT5Qcmlu
dCh2YXJzXywKLSAgICAiJGNsYXNzbmFtZSRfU3R1Yig6Omdvb2dsZTo6cHJvdG9idWY6OlJwY0No
YW5uZWwqIGNoYW5uZWwpO1xuIgotICAgICIkY2xhc3NuYW1lJF9TdHViKDo6Z29vZ2xlOjpwcm90
b2J1Zjo6UnBjQ2hhbm5lbCogY2hhbm5lbCxcbiIKLSAgICAiICAgICAgICAgICAgICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OlNlcnZpY2U6OkNoYW5uZWxPd25lcnNoaXAgb3duZXJzaGlwKTtcbiIK
LSAgICAifiRjbGFzc25hbWUkX1N0dWIoKTtcbiIKLSAgICAiXG4iCi0gICAgImlubGluZSA6Omdv
b2dsZTo6cHJvdG9idWY6OlJwY0NoYW5uZWwqIGNoYW5uZWwoKSB7IHJldHVybiBjaGFubmVsXzsg
fVxuIgotICAgICJcbiIKLSAgICAiLy8gaW1wbGVtZW50cyAkY2xhc3NuYW1lJCAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKLSAgICAiXG4iKTsKLQotICBHZW5l
cmF0ZU1ldGhvZFNpZ25hdHVyZXMoTk9OX1ZJUlRVQUwsIHByaW50ZXIpOwotCi0gIHByaW50ZXIt
Pk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyc18sCi0gICAgIiBwcml2YXRlOlxuIgot
ICAgICIgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UnBjQ2hhbm5lbCogY2hhbm5lbF87XG4iCi0gICAg
IiAgYm9vbCBvd25zX2NoYW5uZWxfO1xuIgotICAgICIgIEdPT0dMRV9ESVNBTExPV19FVklMX0NP
TlNUUlVDVE9SUygkY2xhc3NuYW1lJF9TdHViKTtcbiIKLSAgICAifTtcbiIKLSAgICAiXG4iKTsK
LX0KLQotdm9pZCBTZXJ2aWNlR2VuZXJhdG9yOjpHZW5lcmF0ZU1ldGhvZFNpZ25hdHVyZXMoCi0g
ICAgVmlydHVhbE9yTm9uIHZpcnR1YWxfb3Jfbm9uLCBpbzo6UHJpbnRlciogcHJpbnRlcikgewot
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5tZXRob2RfY291bnQoKTsgaSsrKSB7
Ci0gICAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogbWV0aG9kID0gZGVzY3JpcHRvcl8tPm1ldGhv
ZChpKTsKLSAgICBtYXA8c3RyaW5nLCBzdHJpbmc+IHN1Yl92YXJzOwotICAgIHN1Yl92YXJzWyJu
YW1lIl0gPSBtZXRob2QtPm5hbWUoKTsKLSAgICBzdWJfdmFyc1siaW5wdXRfdHlwZSJdID0gQ2xh
c3NOYW1lKG1ldGhvZC0+aW5wdXRfdHlwZSgpLCB0cnVlKTsKLSAgICBzdWJfdmFyc1sib3V0cHV0
X3R5cGUiXSA9IENsYXNzTmFtZShtZXRob2QtPm91dHB1dF90eXBlKCksIHRydWUpOwotICAgIHN1
Yl92YXJzWyJ2aXJ0dWFsIl0gPSB2aXJ0dWFsX29yX25vbiA9PSBWSVJUVUFMID8gInZpcnR1YWwg
IiA6ICIiOwotCi0gICAgcHJpbnRlci0+UHJpbnQoc3ViX3ZhcnMsCi0gICAgICAiJHZpcnR1YWwk
dm9pZCAkbmFtZSQoOjpnb29nbGU6OnByb3RvYnVmOjpScGNDb250cm9sbGVyKiBjb250cm9sbGVy
LFxuIgotICAgICAgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRpbnB1dF90eXBlJCogcmVx
dWVzdCxcbiIKLSAgICAgICIgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3R5cGUkKiByZXNw
b25zZSxcbiIKLSAgICAgICIgICAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OkNsb3N1cmUqIGRvbmUpO1xuIik7Ci0gIH0KLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkIFNl
cnZpY2VHZW5lcmF0b3I6OkdlbmVyYXRlRGVzY3JpcHRvckluaXRpYWxpemVyKAotICAgIGlvOjpQ
cmludGVyKiBwcmludGVyLCBpbnQgaW5kZXgpIHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJz
OwotICB2YXJzWyJjbGFzc25hbWUiXSA9IGRlc2NyaXB0b3JfLT5uYW1lKCk7Ci0gIHZhcnNbImlu
ZGV4Il0gPSBTaW1wbGVJdG9hKGluZGV4KTsKLQotICBwcmludGVyLT5QcmludCh2YXJzLAotICAg
ICIkY2xhc3NuYW1lJF9kZXNjcmlwdG9yXyA9IGZpbGUtPnNlcnZpY2UoJGluZGV4JCk7XG4iKTsK
LX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi12b2lkIFNlcnZpY2VHZW5lcmF0b3I6OkdlbmVyYXRlSW1w
bGVtZW50YXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
c18sCi0gICAgIiRjbGFzc25hbWUkOjp+JGNsYXNzbmFtZSQoKSB7fVxuIgotICAgICJcbiIKLSAg
ICAiY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlRGVzY3JpcHRvciogJGNsYXNzbmFt
ZSQ6OmRlc2NyaXB0b3IoKSB7XG4iCi0gICAgIiAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNP
bmNlKCk7XG4iCi0gICAgIiAgcmV0dXJuICRjbGFzc25hbWUkX2Rlc2NyaXB0b3JfO1xuIgotICAg
ICJ9XG4iCi0gICAgIlxuIgotICAgICJjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlNlcnZpY2VE
ZXNjcmlwdG9yKiAkY2xhc3NuYW1lJDo6R2V0RGVzY3JpcHRvcigpIHtcbiIKLSAgICAiICBwcm90
b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTtcbiIKLSAgICAiICByZXR1cm4gJGNsYXNzbmFt
ZSRfZGVzY3JpcHRvcl87XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iKTsKLQotICAvLyBHZW5lcmF0
ZSBtZXRob2RzIG9mIHRoZSBpbnRlcmZhY2UuCi0gIEdlbmVyYXRlTm90SW1wbGVtZW50ZWRNZXRo
b2RzKHByaW50ZXIpOwotICBHZW5lcmF0ZUNhbGxNZXRob2QocHJpbnRlcik7Ci0gIEdlbmVyYXRl
R2V0UHJvdG90eXBlKFJFUVVFU1QsIHByaW50ZXIpOwotICBHZW5lcmF0ZUdldFByb3RvdHlwZShS
RVNQT05TRSwgcHJpbnRlcik7Ci0KLSAgLy8gR2VuZXJhdGUgc3R1YiBpbXBsZW1lbnRhdGlvbi4K
LSAgcHJpbnRlci0+UHJpbnQodmFyc18sCi0gICAgIiRjbGFzc25hbWUkX1N0dWI6OiRjbGFzc25h
bWUkX1N0dWIoOjpnb29nbGU6OnByb3RvYnVmOjpScGNDaGFubmVsKiBjaGFubmVsKVxuIgotICAg
ICIgIDogY2hhbm5lbF8oY2hhbm5lbCksIG93bnNfY2hhbm5lbF8oZmFsc2UpIHt9XG4iCi0gICAg
IiRjbGFzc25hbWUkX1N0dWI6OiRjbGFzc25hbWUkX1N0dWIoXG4iCi0gICAgIiAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OlJwY0NoYW5uZWwqIGNoYW5uZWwsXG4iCi0gICAgIiAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OlNlcnZpY2U6OkNoYW5uZWxPd25lcnNoaXAgb3duZXJzaGlwKVxuIgotICAgICIg
IDogY2hhbm5lbF8oY2hhbm5lbCksXG4iCi0gICAgIiAgICBvd25zX2NoYW5uZWxfKG93bmVyc2hp
cCA9PSA6Omdvb2dsZTo6cHJvdG9idWY6OlNlcnZpY2U6OlNUVUJfT1dOU19DSEFOTkVMKSB7fVxu
IgotICAgICIkY2xhc3NuYW1lJF9TdHViOjp+JGNsYXNzbmFtZSRfU3R1YigpIHtcbiIKLSAgICAi
ICBpZiAob3duc19jaGFubmVsXykgZGVsZXRlIGNoYW5uZWxfO1xuIgotICAgICJ9XG4iCi0gICAg
IlxuIik7Ci0KLSAgR2VuZXJhdGVTdHViTWV0aG9kcyhwcmludGVyKTsKLX0KLQotdm9pZCBTZXJ2
aWNlR2VuZXJhdG9yOjpHZW5lcmF0ZU5vdEltcGxlbWVudGVkTWV0aG9kcyhpbzo6UHJpbnRlciog
cHJpbnRlcikgewotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5tZXRob2RfY291
bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogbWV0aG9kID0gZGVzY3Jp
cHRvcl8tPm1ldGhvZChpKTsKLSAgICBtYXA8c3RyaW5nLCBzdHJpbmc+IHN1Yl92YXJzOwotICAg
IHN1Yl92YXJzWyJjbGFzc25hbWUiXSA9IGRlc2NyaXB0b3JfLT5uYW1lKCk7Ci0gICAgc3ViX3Zh
cnNbIm5hbWUiXSA9IG1ldGhvZC0+bmFtZSgpOwotICAgIHN1Yl92YXJzWyJpbmRleCJdID0gU2lt
cGxlSXRvYShpKTsKLSAgICBzdWJfdmFyc1siaW5wdXRfdHlwZSJdID0gQ2xhc3NOYW1lKG1ldGhv
ZC0+aW5wdXRfdHlwZSgpLCB0cnVlKTsKLSAgICBzdWJfdmFyc1sib3V0cHV0X3R5cGUiXSA9IENs
YXNzTmFtZShtZXRob2QtPm91dHB1dF90eXBlKCksIHRydWUpOwotCi0gICAgcHJpbnRlci0+UHJp
bnQoc3ViX3ZhcnMsCi0gICAgICAidm9pZCAkY2xhc3NuYW1lJDo6JG5hbWUkKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6UnBjQ29udHJvbGxlciogY29udHJvbGxlcixcbiIKLSAgICAgICIgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgJGlucHV0X3R5cGUkKixcbiIKLSAgICAgICIgICAgICAgICAg
ICAgICAgICAgICAgICAgJG91dHB1dF90eXBlJCosXG4iCi0gICAgICAiICAgICAgICAgICAgICAg
ICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6Q2xvc3VyZSogZG9uZSkge1xuIgotICAgICAg
IiAgY29udHJvbGxlci0+U2V0RmFpbGVkKFwiTWV0aG9kICRuYW1lJCgpIG5vdCBpbXBsZW1lbnRl
ZC5cIik7XG4iCi0gICAgICAiICBkb25lLT5SdW4oKTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAi
XG4iKTsKLSAgfQotfQotCi12b2lkIFNlcnZpY2VHZW5lcmF0b3I6OkdlbmVyYXRlQ2FsbE1ldGhv
ZChpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCh2YXJzXywKLSAgICAi
dm9pZCAkY2xhc3NuYW1lJDo6Q2FsbE1ldGhvZChjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
dGhvZERlc2NyaXB0b3IqIG1ldGhvZCxcbiIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OlJwY0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIsXG4iCi0g
ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlKiByZXF1ZXN0LFxuIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSogcmVzcG9uc2UsXG4iCi0gICAgIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpDbG9zdXJlKiBkb25lKSB7
XG4iCi0gICAgIiAgR09PR0xFX0RDSEVDS19FUShtZXRob2QtPnNlcnZpY2UoKSwgJGNsYXNzbmFt
ZSRfZGVzY3JpcHRvcl8pO1xuIgotICAgICIgIHN3aXRjaChtZXRob2QtPmluZGV4KCkpIHtcbiIp
OwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm1ldGhvZF9jb3VudCgpOyBp
KyspIHsKLSAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2QgPSBkZXNjcmlwdG9yXy0+
bWV0aG9kKGkpOwotICAgIG1hcDxzdHJpbmcsIHN0cmluZz4gc3ViX3ZhcnM7Ci0gICAgc3ViX3Zh
cnNbIm5hbWUiXSA9IG1ldGhvZC0+bmFtZSgpOwotICAgIHN1Yl92YXJzWyJpbmRleCJdID0gU2lt
cGxlSXRvYShpKTsKLSAgICBzdWJfdmFyc1siaW5wdXRfdHlwZSJdID0gQ2xhc3NOYW1lKG1ldGhv
ZC0+aW5wdXRfdHlwZSgpLCB0cnVlKTsKLSAgICBzdWJfdmFyc1sib3V0cHV0X3R5cGUiXSA9IENs
YXNzTmFtZShtZXRob2QtPm91dHB1dF90eXBlKCksIHRydWUpOwotCi0gICAgLy8gTm90ZTogIGRv
d25fY2FzdCBkb2VzIG5vdCB3b3JrIGhlcmUgYmVjYXVzZSBpdCBvbmx5IHdvcmtzIG9uIHBvaW50
ZXJzLAotICAgIC8vICAgbm90IHJlZmVyZW5jZXMuCi0gICAgcHJpbnRlci0+UHJpbnQoc3ViX3Zh
cnMsCi0gICAgICAiICAgIGNhc2UgJGluZGV4JDpcbiIKLSAgICAgICIgICAgICAkbmFtZSQoY29u
dHJvbGxlcixcbiIKLSAgICAgICIgICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpkb3du
X2Nhc3Q8Y29uc3QgJGlucHV0X3R5cGUkKj4ocmVxdWVzdCksXG4iCi0gICAgICAiICAgICAgICAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6ZG93bl9jYXN0PCAkb3V0cHV0X3R5cGUkKj4ocmVzcG9u
c2UpLFxuIgotICAgICAgIiAgICAgICAgICAgICBkb25lKTtcbiIKLSAgICAgICIgICAgICBicmVh
aztcbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQodmFyc18sCi0gICAgIiAgICBkZWZhdWx0
OlxuIgotICAgICIgICAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCBcIkJhZCBtZXRob2QgaW5kZXg7
IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cIjtcbiIKLSAgICAiICAgICAgYnJlYWs7XG4iCi0g
ICAgIiAgfVxuIgotICAgICJ9XG4iCi0gICAgIlxuIik7Ci19Ci0KLXZvaWQgU2VydmljZUdlbmVy
YXRvcjo6R2VuZXJhdGVHZXRQcm90b3R5cGUoUmVxdWVzdE9yUmVzcG9uc2Ugd2hpY2gsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmlu
dGVyKSB7Ci0gIGlmICh3aGljaCA9PSBSRVFVRVNUKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFy
c18sCi0gICAgICAiY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiAkY2xhc3NuYW1l
JDo6R2V0UmVxdWVzdFByb3RvdHlwZShcbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlBy
aW50KHZhcnNfLAotICAgICAgImNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgJGNs
YXNzbmFtZSQ6OkdldFJlc3BvbnNlUHJvdG90eXBlKFxuIik7Ci0gIH0KLQotICBwcmludGVyLT5Q
cmludCh2YXJzXywKLSAgICAiICAgIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kRGVz
Y3JpcHRvciogbWV0aG9kKSBjb25zdCB7XG4iCi0gICAgIiAgR09PR0xFX0RDSEVDS19FUShtZXRo
b2QtPnNlcnZpY2UoKSwgZGVzY3JpcHRvcigpKTtcbiIKLSAgICAiICBzd2l0Y2gobWV0aG9kLT5p
bmRleCgpKSB7XG4iKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5tZXRo
b2RfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogbWV0aG9kID0g
ZGVzY3JpcHRvcl8tPm1ldGhvZChpKTsKLSAgICBjb25zdCBEZXNjcmlwdG9yKiB0eXBlID0KLSAg
ICAgICh3aGljaCA9PSBSRVFVRVNUKSA/IG1ldGhvZC0+aW5wdXRfdHlwZSgpIDogbWV0aG9kLT5v
dXRwdXRfdHlwZSgpOwotCi0gICAgbWFwPHN0cmluZywgc3RyaW5nPiBzdWJfdmFyczsKLSAgICBz
dWJfdmFyc1siaW5kZXgiXSA9IFNpbXBsZUl0b2EoaSk7Ci0gICAgc3ViX3ZhcnNbInR5cGUiXSA9
IENsYXNzTmFtZSh0eXBlLCB0cnVlKTsKLQotICAgIHByaW50ZXItPlByaW50KHN1Yl92YXJzLAot
ICAgICAgIiAgICBjYXNlICRpbmRleCQ6XG4iCi0gICAgICAiICAgICAgcmV0dXJuICR0eXBlJDo6
ZGVmYXVsdF9pbnN0YW5jZSgpO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCh2YXJzXywK
LSAgICAiICAgIGRlZmF1bHQ6XG4iCi0gICAgIiAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8IFwi
QmFkIG1ldGhvZCBpbmRleDsgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLlwiO1xuIgotICAgICIg
ICAgICByZXR1cm4gKnN0YXRpY19jYXN0PCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UqPihO
VUxMKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iKTsKLX0KLQotdm9pZCBT
ZXJ2aWNlR2VuZXJhdG9yOjpHZW5lcmF0ZVN0dWJNZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVy
KSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm1ldGhvZF9jb3VudCgpOyBp
KyspIHsKLSAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2QgPSBkZXNjcmlwdG9yXy0+
bWV0aG9kKGkpOwotICAgIG1hcDxzdHJpbmcsIHN0cmluZz4gc3ViX3ZhcnM7Ci0gICAgc3ViX3Zh
cnNbImNsYXNzbmFtZSJdID0gZGVzY3JpcHRvcl8tPm5hbWUoKTsKLSAgICBzdWJfdmFyc1sibmFt
ZSJdID0gbWV0aG9kLT5uYW1lKCk7Ci0gICAgc3ViX3ZhcnNbImluZGV4Il0gPSBTaW1wbGVJdG9h
KGkpOwotICAgIHN1Yl92YXJzWyJpbnB1dF90eXBlIl0gPSBDbGFzc05hbWUobWV0aG9kLT5pbnB1
dF90eXBlKCksIHRydWUpOwotICAgIHN1Yl92YXJzWyJvdXRwdXRfdHlwZSJdID0gQ2xhc3NOYW1l
KG1ldGhvZC0+b3V0cHV0X3R5cGUoKSwgdHJ1ZSk7Ci0KLSAgICBwcmludGVyLT5QcmludChzdWJf
dmFycywKLSAgICAgICJ2b2lkICRjbGFzc25hbWUkX1N0dWI6OiRuYW1lJCg6Omdvb2dsZTo6cHJv
dG9idWY6OlJwY0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIsXG4iCi0gICAgICAiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgJGlucHV0X3R5cGUkKiByZXF1ZXN0LFxuIgotICAgICAg
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfdHlwZSQqIHJlc3BvbnNlLFxu
IgotICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6Q2xvc3VyZSogZG9uZSkge1xuIgotICAgICAgIiAgY2hhbm5lbF8tPkNhbGxNZXRob2QoZGVz
Y3JpcHRvcigpLT5tZXRob2QoJGluZGV4JCksXG4iCi0gICAgICAiICAgICAgICAgICAgICAgICAg
ICAgICBjb250cm9sbGVyLCByZXF1ZXN0LCByZXNwb25zZSwgZG9uZSk7XG4iCi0gICAgICAifVxu
Iik7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIGNwcAotfSAgLy8gbmFtZXNwYWNlIGNvbXBp
bGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3NlcnZpY2UuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3NlcnZpY2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlMmZkODBlNjMyMDI5NzFlNzVhZjgwZDg3NjZiNGI4MDNh
NmUzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9zZXJ2aWNlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMTggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8v
IEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBv
cmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwg
SmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxF
Ul9DUFBfU0VSVklDRV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9T
RVJWSUNFX0hfXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9vcHRpb25zLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1l
c3BhY2UgcHJvdG9idWYgewotICBuYW1lc3BhY2UgaW8gewotICAgIGNsYXNzIFByaW50ZXI7ICAg
ICAgICAgICAgIC8vIHByaW50ZXIuaAotICB9Ci19Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGNwcCB7Ci0KLWNsYXNzIFNlcnZpY2VHZW5l
cmF0b3IgewotIHB1YmxpYzoKLSAgLy8gU2VlIGdlbmVyYXRvci5jYyBmb3IgdGhlIG1lYW5pbmcg
b2YgZGxsZXhwb3J0X2RlY2wuCi0gIGV4cGxpY2l0IFNlcnZpY2VHZW5lcmF0b3IoY29uc3QgU2Vy
dmljZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0gIH5TZXJ2aWNlR2VuZXJhdG9yKCk7Ci0KLSAgLy8g
SGVhZGVyIHN0dWZmLgotCi0gIC8vIEdlbmVyYXRlIHRoZSBjbGFzcyBkZWZpbml0aW9ucyBmb3Ig
dGhlIHNlcnZpY2UncyBpbnRlcmZhY2UgYW5kIHRoZQotICAvLyBzdHViIGltcGxlbWVudGF0aW9u
LgotICB2b2lkIEdlbmVyYXRlRGVjbGFyYXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQot
ICAvLyBTb3VyY2UgZmlsZSBzdHVmZi4KLQotICAvLyBHZW5lcmF0ZSBjb2RlIHRoYXQgaW5pdGlh
bGl6ZXMgdGhlIGdsb2JhbCB2YXJpYWJsZSBzdG9yaW5nIHRoZSBzZXJ2aWNlJ3MKLSAgLy8gZGVz
Y3JpcHRvci4KLSAgdm9pZCBHZW5lcmF0ZURlc2NyaXB0b3JJbml0aWFsaXplcihpbzo6UHJpbnRl
ciogcHJpbnRlciwgaW50IGluZGV4KTsKLQotICAvLyBHZW5lcmF0ZSBpbXBsZW1lbnRhdGlvbnMg
b2YgZXZlcnl0aGluZyBkZWNsYXJlZCBieSBHZW5lcmF0ZURlY2xhcmF0aW9ucygpLgotICB2b2lk
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gcHJpdmF0
ZToKLSAgZW51bSBSZXF1ZXN0T3JSZXNwb25zZSB7IFJFUVVFU1QsIFJFU1BPTlNFIH07Ci0gIGVu
dW0gVmlydHVhbE9yTm9uIHsgVklSVFVBTCwgTk9OX1ZJUlRVQUwgfTsKLQotICAvLyBIZWFkZXIg
c3R1ZmYuCi0KLSAgLy8gR2VuZXJhdGUgdGhlIHNlcnZpY2UgYWJzdHJhY3QgaW50ZXJmYWNlLgot
ICB2b2lkIEdlbmVyYXRlSW50ZXJmYWNlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBH
ZW5lcmF0ZSB0aGUgc3R1YiBjbGFzcyBkZWZpbml0aW9uLgotICB2b2lkIEdlbmVyYXRlU3R1YkRl
ZmluaXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIC8vIFByaW50cyBzaWduYXR1cmVz
IGZvciBhbGwgbWV0aG9kcyBpbiB0aGUKLSAgdm9pZCBHZW5lcmF0ZU1ldGhvZFNpZ25hdHVyZXMo
VmlydHVhbE9yTm9uIHZpcnR1YWxfb3Jfbm9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8gU291cmNlIGZpbGUgc3R1ZmYuCi0K
LSAgLy8gR2VuZXJhdGUgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBzZXJ2aWNl
IG1ldGhvZHMsIHdoaWNoCi0gIC8vIHByb2R1Y2UgYSAibm90IGltcGxlbWVudGVkIiBlcnJvci4K
LSAgdm9pZCBHZW5lcmF0ZU5vdEltcGxlbWVudGVkTWV0aG9kcyhpbzo6UHJpbnRlciogcHJpbnRl
cik7Ci0KLSAgLy8gR2VuZXJhdGUgdGhlIENhbGxNZXRob2QoKSBtZXRob2Qgb2YgdGhlIHNlcnZp
Y2UuCi0gIHZvaWQgR2VuZXJhdGVDYWxsTWV0aG9kKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQot
ICAvLyBHZW5lcmF0ZSB0aGUgR2V0e1JlcXVlc3QsUmVzcG9uc2V9UHJvdG90eXBlKCkgbWV0aG9k
cy4KLSAgdm9pZCBHZW5lcmF0ZUdldFByb3RvdHlwZShSZXF1ZXN0T3JSZXNwb25zZSB3aGljaCwg
aW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIC8vIEdlbmVyYXRlIHRoZSBzdHViJ3MgaW1wbGVt
ZW50YXRpb25zIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZHMuCi0gIHZvaWQgR2VuZXJhdGVTdHViTWV0
aG9kcyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgY29uc3QgU2VydmljZURlc2NyaXB0b3Iq
IGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnNfOwotCi0gIEdPT0dMRV9E
SVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTZXJ2aWNlR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BS
T1RPQlVGX0NPTVBJTEVSX0NQUF9TRVJWSUNFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfc3RyaW5nX2ZpZWxkLmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2NwcC9jcHBfc3RyaW5nX2ZpZWxkLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxZDc0MzQ1NzhjZTg3YWQ4MTZkM2M2ZTRkYmY0MDY4YzJkOTMxODE3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jcHAvY3BwX3N0cmluZ19maWVsZC5jYworKysgL2Rldi9udWxsCkBAIC0x
LDg3MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0
aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdp
bmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZm
IERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3BwL2NwcF9zdHJpbmdfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvY3BwL2NwcF9oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50
ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ug
Y3BwIHsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBTZXRTdHJpbmdWYXJpYWJsZXMoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgbWFwPHN0
cmluZywgc3RyaW5nPiogdmFyaWFibGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
T3B0aW9ucyYgb3B0aW9ucykgewotICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhkZXNjcmlwdG9y
LCB2YXJpYWJsZXMsIG9wdGlvbnMpOwotICAoKnZhcmlhYmxlcylbImRlZmF1bHQiXSA9IERlZmF1
bHRWYWx1ZShkZXNjcmlwdG9yKTsKLSAgKCp2YXJpYWJsZXMpWyJkZWZhdWx0X2xlbmd0aCJdID0K
LSAgICAgIFNpbXBsZUl0b2EoZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKS5sZW5n
dGgoKSk7Ci0gIHN0cmluZyBkZWZhdWx0X3ZhcmlhYmxlX3N0cmluZyA9Ci0gICAgICBkZXNjcmlw
dG9yLT5kZWZhdWx0X3ZhbHVlX3N0cmluZygpLmVtcHR5KCkKLSAgICAgICAgICA/ICImOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkiCi0g
ICAgICAgICAgOiAiX2RlZmF1bHRfIiArIEZpZWxkTmFtZShkZXNjcmlwdG9yKSArICJfIjsKLSAg
KCp2YXJpYWJsZXMpWyJkZWZhdWx0X3ZhcmlhYmxlIl0gPSBkZWZhdWx0X3ZhcmlhYmxlX3N0cmlu
ZzsKLSAgKCp2YXJpYWJsZXMpWyJkZWZhdWx0X3ZhbHVlX2luaXQiXSA9Ci0gICAgICBkZXNjcmlw
dG9yLT5kZWZhdWx0X3ZhbHVlX3N0cmluZygpLmVtcHR5KCkKLSAgICAgID8gIiIgOiAiKiIgKyBk
ZWZhdWx0X3ZhcmlhYmxlX3N0cmluZzsKLSAgKCp2YXJpYWJsZXMpWyJwb2ludGVyX3R5cGUiXSA9
Ci0gICAgICBkZXNjcmlwdG9yLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVT
ID8gInZvaWQiIDogImNoYXIiOwotICAvLyBOT1RFOiBFc2NhcGVkIGhlcmUgdG8gdW5ibG9jayBw
cm90bzEtPnByb3RvMiBtaWdyYXRpb24uCi0gIC8vIFRPRE8obGl1amlzaSk6IEV4dGVuZCB0aGlz
IHRvIGFwcGx5IGZvciBvdGhlciBjb25mbGljdGluZyBtZXRob2RzLgotICAoKnZhcmlhYmxlcylb
InJlbGVhc2VfbmFtZSJdID0KLSAgICAgIFNhZmVGdW5jdGlvbk5hbWUoZGVzY3JpcHRvci0+Y29u
dGFpbmluZ190eXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IsICJyZWxl
YXNlXyIpOwotICAoKnZhcmlhYmxlcylbImZ1bGxfbmFtZSJdID0gZGVzY3JpcHRvci0+ZnVsbF9u
YW1lKCk7Ci0KLSAgKCp2YXJpYWJsZXMpWyJzdHJpbmdfcGllY2UiXSA9ICI6OnN0ZDo6c3RyaW5n
IjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU3RyaW5nRmllbGRH
ZW5lcmF0b3I6OlN0cmluZ0ZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVz
Y3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBPcHRpb25zJiBvcHRpb25zKQotICAgIDogRmllbGRHZW5lcmF0b3Iob3B0aW9ucyksIGRlc2Ny
aXB0b3JfKGRlc2NyaXB0b3IpIHsKLSAgU2V0U3RyaW5nVmFyaWFibGVzKGRlc2NyaXB0b3IsICZ2
YXJpYWJsZXNfLCBvcHRpb25zKTsKLX0KLQotU3RyaW5nRmllbGRHZW5lcmF0b3I6On5TdHJpbmdG
aWVsZEdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJh
dGVQcml2YXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBOLkIu
IHRoYXQgd2UgY29udGludWUgdG8gdXNlIHxBcmVuYVN0cmluZ1B0cnwgaW5zdGVhZCBvZiB8c3Ry
aW5nKnwgZm9yCi0gIC8vIHN0cmluZyBmaWVsZHMsIGV2ZW4gd2hlbiBTdXBwb3J0QXJlbmFzKGRl
c2NyaXB0b3JfKSA9PSBmYWxzZS4gV2h5PwotICAvLyBUaGUgc2ltcGxlIGFuc3dlciBpcyB0byBh
dm9pZCB1bm1haW50YWluYWJsZSBjb21wbGV4aXR5LiBUaGUgcmVmbGVjdGlvbgotICAvLyBjb2Rl
IGFzc3VtZXMgQXJlbmFTdHJpbmdQdHJzLiBUaGVzZSBhcmUgKmFsbW9zdCogaW4tbWVtb3J5LWNv
bXBhdGlibGUgd2l0aAotICAvLyBzdHJpbmcqLCBleGNlcHQgZm9yIHRoZSBwb2ludGVyIHRhZ3Mg
YW5kIHJlbGF0ZWQgb3duZXJzaGlwIHNlbWFudGljcy4gV2UKLSAgLy8gY291bGQgbW9kaWZ5IHRo
ZSBydW50aW1lIGNvZGUgdG8gdXNlIHN0cmluZyogZm9yIHRoZSBub3Qtc3VwcG9ydGluZy1hcmVu
YXMKLSAgLy8gY2FzZSwgYnV0IHRoaXMgd291bGQgcmVxdWlyZSBhIHdheSB0byBkZXRlY3Qgd2hp
Y2ggdHlwZSBvZiBjbGFzcyB3YXMKLSAgLy8gZ2VuZXJhdGVkIChhZGRpbmcgb3ZlcmhlYWQgYW5k
IGNvbXBsZXhpdHkgdG8gR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24pCi0gIC8vIGFuZCBsaXR0
ZXJpbmcgdGhlIHJ1bnRpbWUgY29kZSBwYXRocyB3aXRoIGNvbmRpdGlvbmFscy4gSXQncyBzaW1w
bGVyIHRvCi0gIC8vIHN0aWNrIHdpdGggdGhpcyBidXQgdXNlIGxpZ2h0d2VpZ2h0IGFjY2Vzc29y
cyB0aGF0IGFzc3VtZSBhcmVuYSA9PSBOVUxMLgotICAvLyBUaGVyZSBzaG91bGQgYmUgdmVyeSBs
aXR0bGUgb3ZlcmhlYWQgYW55d2F5IGJlY2F1c2UgaXQncyBqdXN0IGEgdGFnZ2VkCi0gIC8vIHBv
aW50ZXIgaW4tbWVtb3J5LgotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgJG5hbWUkXztcbiIpOwotfQotCi12
b2lkIFN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU3RhdGljTWVtYmVycyhpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoIWRlc2NyaXB0b3JfLT5kZWZhdWx0X3ZhbHVl
X3N0cmluZygpLmVtcHR5KCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAic3Rh
dGljIDo6c3RkOjpzdHJpbmcqICRkZWZhdWx0X3ZhcmlhYmxlJDtcbiIpOwotICB9Ci19Ci0KLXZv
aWQgU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVBY2Nlc3NvckRlY2xhcmF0aW9ucyhp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBJZiB3ZSdyZSB1c2luZyBTdHJpbmdG
aWVsZEdlbmVyYXRvciBmb3IgYSBmaWVsZCB3aXRoIGEgY3R5cGUsIGl0J3MKLSAgLy8gYmVjYXVz
ZSB0aGF0IGN0eXBlIGlzbid0IGFjdHVhbGx5IGltcGxlbWVudGVkLiAgSW4gcGFydGljdWxhciwg
dGhpcyBpcwotICAvLyB0cnVlIG9mIGN0eXBlPUNPUkQgYW5kIGN0eXBlPVNUUklOR19QSUVDRSBp
biB0aGUgb3BlbiBzb3VyY2UgcmVsZWFzZS4KLSAgLy8gV2UgYXJlbid0IHJlbGVhc2luZyBDb3Jk
IGJlY2F1c2UgaXQgaGFzIHRvbyBtYW55IEdvb2dsZS1zcGVjaWZpYwotICAvLyBkZXBlbmRlbmNp
ZXMgYW5kIHdlIGFyZW4ndCByZWxlYXNpbmcgU3RyaW5nUGllY2UgYmVjYXVzZSBpdCdzIGhhcmRs
eQotICAvLyB1c2VmdWwgb3V0c2lkZSBvZiBHb29nbGUgYW5kIGJlY2F1c2UgaXQgd291bGQgZ2V0
IGNvbmZ1c2luZyB0byBoYXZlCi0gIC8vIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgU3RyaW5n
UGllY2UgY2xhc3MgaW4gZGlmZmVyZW50IGxpYnJhcmllcyAoUENSRQotICAvLyBhbHJlYWR5IGlu
Y2x1ZGVzIGl0IGZvciB0aGVpciBDKysgYmluZGluZ3MsIHdoaWNoIGNhbWUgZnJvbSBHb29nbGUp
LgotICAvLwotICAvLyBJbiBhbnkgY2FzZSwgd2UgbWFrZSBhbGwgdGhlIGFjY2Vzc29ycyBwcml2
YXRlIHdoaWxlIHN0aWxsIGFjdHVhbGx5Ci0gIC8vIHVzaW5nIGEgc3RyaW5nIHRvIHJlcHJlc2Vu
dCB0aGUgZmllbGQgaW50ZXJuYWxseS4gIFRoaXMgd2F5LCB3ZSBjYW4KLSAgLy8gZ3VhcmFudGVl
IHRoYXQgaWYgd2UgZG8gZXZlciBpbXBsZW1lbnQgdGhlIGN0eXBlLCBpdCB3b24ndCBicmVhayBh
bnkKLSAgLy8gZXhpc3RpbmcgdXNlcnMgd2hvIG1pZ2h0IGJlIC0tIGZvciB3aGF0ZXZlciByZWFz
b24gLS0gYWxyZWFkeSB1c2luZyAucHJvdG8KLSAgLy8gZmlsZXMgdGhhdCBhcHBsaWVkIHRoZSBj
dHlwZS4gIFRoZSBmaWVsZCBjYW4gc3RpbGwgYmUgYWNjZXNzZWQgdmlhIHRoZQotICAvLyByZWZs
ZWN0aW9uIGludGVyZmFjZSBzaW5jZSB0aGUgcmVmbGVjdGlvbiBpbnRlcmZhY2UgaXMgaW5kZXBl
bmRlbnQgb2YKLSAgLy8gdGhlIHN0cmluZydzIHVuZGVybHlpbmcgcmVwcmVzZW50YXRpb24uCi0K
LSAgYm9vbCB1bmtub3duX2N0eXBlID0KLSAgICAgIGRlc2NyaXB0b3JfLT5vcHRpb25zKCkuY3R5
cGUoKSAhPSBFZmZlY3RpdmVTdHJpbmdDVHlwZShkZXNjcmlwdG9yXyk7Ci0KLSAgaWYgKHVua25v
d25fY3R5cGUpIHsKLSAgICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAiIHByaXZhdGU6XG4iCi0gICAgICAiICAvLyBIaWRkZW4gZHVlIHRvIHVua25vd24g
Y3R5cGUgb3B0aW9uLlxuIik7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gIH0KLQotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRlZF9hdHRyJGNvbnN0IDo6c3Rk
OjpzdHJpbmcmICRuYW1lJCgpIGNvbnN0O1xuIgotICAgICIkZGVwcmVjYXRlZF9hdHRyJHZvaWQg
c2V0XyRuYW1lJChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7XG4iCi0gICAgIiRkZXByZWNh
dGVkX2F0dHIkdm9pZCBzZXRfJG5hbWUkKGNvbnN0IGNoYXIqIHZhbHVlKTtcbiIKLSAgICAiJGRl
cHJlY2F0ZWRfYXR0ciR2b2lkIHNldF8kbmFtZSQoY29uc3QgJHBvaW50ZXJfdHlwZSQqIHZhbHVl
LCBzaXplX3Qgc2l6ZSkiCi0gICAgICAgICAgICAgICAgICI7XG4iCi0gICAgIiRkZXByZWNhdGVk
X2F0dHIkOjpzdGQ6OnN0cmluZyogbXV0YWJsZV8kbmFtZSQoKTtcbiIKLSAgICAiJGRlcHJlY2F0
ZWRfYXR0ciQ6OnN0ZDo6c3RyaW5nKiAkcmVsZWFzZV9uYW1lJCgpO1xuIgotICAgICIkZGVwcmVj
YXRlZF9hdHRyJHZvaWQgc2V0X2FsbG9jYXRlZF8kbmFtZSQoOjpzdGQ6OnN0cmluZyogJG5hbWUk
KTtcbiIpOwotICBpZiAoU3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRlZF9hdHRyJDo6c3RkOjpzdHJp
bmcqIHVuc2FmZV9hcmVuYV9yZWxlYXNlXyRuYW1lJCgpO1xuIgotICAgICAgIiRkZXByZWNhdGVk
X2F0dHIkdm9pZCB1bnNhZmVfYXJlbmFfc2V0X2FsbG9jYXRlZF8kbmFtZSQoXG4iCi0gICAgICAi
ICAgIDo6c3RkOjpzdHJpbmcqICRuYW1lJCk7XG4iKTsKLSAgfQotCi0KLSAgaWYgKHVua25vd25f
Y3R5cGUpIHsKLSAgICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoIiBw
dWJsaWM6XG4iKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgfQotfQotCi12b2lkIFN0cmlu
Z0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6
UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGlzX2lubGluZSkgY29uc3QgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlcyh2YXJp
YWJsZXNfKTsKLSAgdmFyaWFibGVzWyJpbmxpbmUiXSA9IGlzX2lubGluZSA/ICJpbmxpbmUiIDog
IiI7Ci0gIGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXMsCi0gICAgICAiJGlubGluZSQgY29uc3QgOjpzdGQ6OnN0cmluZyYgJGNs
YXNzbmFtZSQ6OiRuYW1lJCgpIGNvbnN0IHtcbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9nZXQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICByZXR1cm4gJG5h
bWUkXy5HZXQoJGRlZmF1bHRfdmFyaWFibGUkKTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlu
bGluZSQgdm9pZCAkY2xhc3NuYW1lJDo6c2V0XyRuYW1lJChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2
YWx1ZSkge1xuIgotICAgICAgIiAgJHNldF9oYXNiaXQkXG4iCi0gICAgICAiICAkbmFtZSRfLlNl
dCgkZGVmYXVsdF92YXJpYWJsZSQsIHZhbHVlLCBHZXRBcmVuYU5vVmlydHVhbCgpKTtcbiIKLSAg
ICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6JGZ1bGxfbmFtZSQp
XG4iCi0gICAgICAifVxuIgotICAgICAgIiRpbmxpbmUkIHZvaWQgJGNsYXNzbmFtZSQ6OnNldF8k
bmFtZSQoY29uc3QgY2hhciogdmFsdWUpIHtcbiIKLSAgICAgICIgICRzZXRfaGFzYml0JFxuIgot
ICAgICAgIiAgJG5hbWUkXy5TZXQoJGRlZmF1bHRfdmFyaWFibGUkLCAkc3RyaW5nX3BpZWNlJCh2
YWx1ZSksXG4iCi0gICAgICAiICAgICAgICAgICAgICBHZXRBcmVuYU5vVmlydHVhbCgpKTtcbiIK
LSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjokZnVs
bF9uYW1lJClcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlubGluZSQgIgotICAgICAgInZvaWQg
JGNsYXNzbmFtZSQ6OnNldF8kbmFtZSQoY29uc3QgJHBvaW50ZXJfdHlwZSQqIHZhbHVlLFxuIgot
ICAgICAgIiAgICBzaXplX3Qgc2l6ZSkge1xuIgotICAgICAgIiAgJHNldF9oYXNiaXQkXG4iCi0g
ICAgICAiICAkbmFtZSRfLlNldCgkZGVmYXVsdF92YXJpYWJsZSQsICRzdHJpbmdfcGllY2UkKFxu
IgotICAgICAgIiAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6
ZSksIEdldEFyZW5hTm9WaXJ0dWFsKCkpO1xuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOiRmdWxsX25hbWUkKVxuIgotICAgICAgIn1cbiIK
LSAgICAgICIkaW5saW5lJCA6OnN0ZDo6c3RyaW5nKiAkY2xhc3NuYW1lJDo6bXV0YWJsZV8kbmFt
ZSQoKSB7XG4iCi0gICAgICAiICAkc2V0X2hhc2JpdCRcbiIKLSAgICAgICIgIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOiRmdWxsX25hbWUkKVxuIgotICAgICAgIiAg
cmV0dXJuICRuYW1lJF8uTXV0YWJsZSgkZGVmYXVsdF92YXJpYWJsZSQsIEdldEFyZW5hTm9WaXJ0
dWFsKCkpO1xuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCA6OnN0ZDo6c3RyaW5nKiAk
Y2xhc3NuYW1lJDo6JHJlbGVhc2VfbmFtZSQoKSB7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTokZnVsbF9uYW1lJClcbiIKLSAgICAgICIgICRj
bGVhcl9oYXNiaXQkXG4iCi0gICAgICAiICByZXR1cm4gJG5hbWUkXy5SZWxlYXNlKCRkZWZhdWx0
X3ZhcmlhYmxlJCwgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7XG4iCi0gICAgICAifVxuIgotICAgICAg
IiRpbmxpbmUkIDo6c3RkOjpzdHJpbmcqICRjbGFzc25hbWUkOjp1bnNhZmVfYXJlbmFfcmVsZWFz
ZV8kbmFtZSQoKSB7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfdW5zYWZlX2FyZW5hX3JlbGVhc2U6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICBHT09HTEVf
RENIRUNLKEdldEFyZW5hTm9WaXJ0dWFsKCkgIT0gTlVMTCk7XG4iCi0gICAgICAiICAkY2xlYXJf
aGFzYml0JFxuIgotICAgICAgIiAgcmV0dXJuICRuYW1lJF8uVW5zYWZlQXJlbmFSZWxlYXNlKCRk
ZWZhdWx0X3ZhcmlhYmxlJCxcbiIKLSAgICAgICIgICAgICBHZXRBcmVuYU5vVmlydHVhbCgpKTtc
biIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlubGluZSQgdm9pZCAkY2xhc3NuYW1lJDo6c2V0X2Fs
bG9jYXRlZF8kbmFtZSQoOjpzdGQ6OnN0cmluZyogJG5hbWUkKSB7XG4iCi0gICAgICAiICBpZiAo
JG5hbWUkICE9IE5VTEwpIHtcbiIKLSAgICAgICIgICAgJHNldF9oYXNiaXQkXG4iCi0gICAgICAi
ICB9IGVsc2Uge1xuIgotICAgICAgIiAgICAkY2xlYXJfaGFzYml0JFxuIgotICAgICAgIiAgfVxu
IgotICAgICAgIiAgJG5hbWUkXy5TZXRBbGxvY2F0ZWQoJGRlZmF1bHRfdmFyaWFibGUkLCAkbmFt
ZSQsXG4iCi0gICAgICAiICAgICAgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7XG4iCi0gICAgICAiICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDokZnVsbF9uYW1l
JClcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlubGluZSQgdm9pZCAkY2xhc3NuYW1lJDo6dW5z
YWZlX2FyZW5hX3NldF9hbGxvY2F0ZWRfJG5hbWUkKFxuIgotICAgICAgIiAgICA6OnN0ZDo6c3Ry
aW5nKiAkbmFtZSQpIHtcbiIKLSAgICAgICIgIEdPT0dMRV9EQ0hFQ0soR2V0QXJlbmFOb1ZpcnR1
YWwoKSAhPSBOVUxMKTtcbiIKLSAgICAgICIgIGlmICgkbmFtZSQgIT0gTlVMTCkge1xuIgotICAg
ICAgIiAgICAkc2V0X2hhc2JpdCRcbiIKLSAgICAgICIgIH0gZWxzZSB7XG4iCi0gICAgICAiICAg
ICRjbGVhcl9oYXNiaXQkXG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICAkbmFtZSRfLlVuc2Fm
ZUFyZW5hU2V0QWxsb2NhdGVkKCRkZWZhdWx0X3ZhcmlhYmxlJCxcbiIKLSAgICAgICIgICAgICAk
bmFtZSQsIEdldEFyZW5hTm9WaXJ0dWFsKCkpO1xuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3Vuc2FmZV9hcmVuYV9zZXRfYWxsb2NhdGVkOiIKLSAgICAgICIk
ZnVsbF9uYW1lJClcbiIKLSAgICAgICJ9XG4iKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBOby1hcmVu
YSBjYXNlLgotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlcywKLSAgICAgICIkaW5saW5lJCBj
b25zdCA6OnN0ZDo6c3RyaW5nJiAkY2xhc3NuYW1lJDo6JG5hbWUkKCkgY29uc3Qge1xuIgotICAg
ICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDokZnVsbF9uYW1lJClc
biIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfLkdldE5vQXJlbmEoJGRlZmF1bHRfdmFyaWFibGUk
KTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlubGluZSQgdm9pZCAkY2xhc3NuYW1lJDo6c2V0
XyRuYW1lJChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkge1xuIgotICAgICAgIiAgJHNldF9o
YXNiaXQkXG4iCi0gICAgICAiICAkbmFtZSRfLlNldE5vQXJlbmEoJGRlZmF1bHRfdmFyaWFibGUk
LCB2YWx1ZSk7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0OiRmdWxsX25hbWUkKVxuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCB2b2lkICRj
bGFzc25hbWUkOjpzZXRfJG5hbWUkKGNvbnN0IGNoYXIqIHZhbHVlKSB7XG4iCi0gICAgICAiICAk
c2V0X2hhc2JpdCRcbiIKLSAgICAgICIgICRuYW1lJF8uU2V0Tm9BcmVuYSgkZGVmYXVsdF92YXJp
YWJsZSQsICRzdHJpbmdfcGllY2UkKHZhbHVlKSk7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAifVxu
IgotICAgICAgIiRpbmxpbmUkICIKLSAgICAgICJ2b2lkICRjbGFzc25hbWUkOjpzZXRfJG5hbWUk
KGNvbnN0ICRwb2ludGVyX3R5cGUkKiB2YWx1ZSwgIgotICAgICAgInNpemVfdCBzaXplKSB7XG4i
Ci0gICAgICAiICAkc2V0X2hhc2JpdCRcbiIKLSAgICAgICIgICRuYW1lJF8uU2V0Tm9BcmVuYSgk
ZGVmYXVsdF92YXJpYWJsZSQsXG4iCi0gICAgICAiICAgICAgJHN0cmluZ19waWVjZSQocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7XG4iCi0gICAgICAiICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6JGZ1bGxfbmFtZSQpXG4i
Ci0gICAgICAifVxuIgotICAgICAgIiRpbmxpbmUkIDo6c3RkOjpzdHJpbmcqICRjbGFzc25hbWUk
OjptdXRhYmxlXyRuYW1lJCgpIHtcbiIKLSAgICAgICIgICRzZXRfaGFzYml0JFxuIgotICAgICAg
IiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6JGZ1bGxfbmFtZSQp
XG4iCi0gICAgICAiICByZXR1cm4gJG5hbWUkXy5NdXRhYmxlTm9BcmVuYSgkZGVmYXVsdF92YXJp
YWJsZSQpO1xuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCA6OnN0ZDo6c3RyaW5nKiAk
Y2xhc3NuYW1lJDo6JHJlbGVhc2VfbmFtZSQoKSB7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTokZnVsbF9uYW1lJClcbiIKLSAgICAgICIgICRj
bGVhcl9oYXNiaXQkXG4iCi0gICAgICAiICByZXR1cm4gJG5hbWUkXy5SZWxlYXNlTm9BcmVuYSgk
ZGVmYXVsdF92YXJpYWJsZSQpO1xuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCB2b2lk
ICRjbGFzc25hbWUkOjpzZXRfYWxsb2NhdGVkXyRuYW1lJCg6OnN0ZDo6c3RyaW5nKiAkbmFtZSQp
IHtcbiIKLSAgICAgICIgIGlmICgkbmFtZSQgIT0gTlVMTCkge1xuIgotICAgICAgIiAgICAkc2V0
X2hhc2JpdCRcbiIKLSAgICAgICIgIH0gZWxzZSB7XG4iCi0gICAgICAiICAgICRjbGVhcl9oYXNi
aXQkXG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICAkbmFtZSRfLlNldEFsbG9jYXRlZE5vQXJl
bmEoJGRlZmF1bHRfdmFyaWFibGUkLCAkbmFtZSQpO1xuIgotICAgICAgIiAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAg
ICAifVxuIik7Ci0gIH0KLX0KLQotdm9pZCBTdHJpbmdGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZU5vbklubGluZUFjY2Vzc29yRGVmaW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgaWYgKCFkZXNjcmlwdG9yXy0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKS5lbXB0eSgpKSB7
Ci0gICAgLy8gSW5pdGlhbGl6ZWQgaW4gR2VuZXJhdGVEZWZhdWx0SW5zdGFuY2VBbGxvY2F0b3Iu
Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICI6OnN0ZDo6c3RyaW5nKiAk
Y2xhc3NuYW1lJDo6JGRlZmF1bHRfdmFyaWFibGUkID0gTlVMTDtcbiIpOwotICB9Ci19Ci0KLXZv
aWQgU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVDbGVhcmluZ0NvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gVHdvLWRpbWVuc2lvbiBzcGVjaWFsaXphdGlvbiBo
ZXJlOiBzdXBwb3J0aW5nIGFyZW5hcyBvciBub3QsIGFuZCBkZWZhdWx0Ci0gIC8vIHZhbHVlIGlz
IHRoZSBlbXB0eSBzdHJpbmcgb3Igbm90LiBDb21wbGV4aXR5IGhlcmUgZW5zdXJlcyB0aGUgbWlu
aW1hbAotICAvLyBudW1iZXIgb2YgYnJhbmNoZXMgLyBhbW91bnQgb2YgZXh0cmFuZW91cyBjb2Rl
IGF0IHJ1bnRpbWUgKGdpdmVuIHRoYXQgdGhlCi0gIC8vIGJlbG93IG1ldGhvZHMgYXJlIGlubGlu
ZWQgb25lLWxpbmVycykhCi0gIGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAg
ICBpZiAoZGVzY3JpcHRvcl8tPmRlZmF1bHRfdmFsdWVfc3RyaW5nKCkuZW1wdHkoKSkgewotICAg
ICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIiRuYW1lJF8uQ2xlYXJUb0Vt
cHR5KCRkZWZhdWx0X3ZhcmlhYmxlJCwgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7XG4iKTsKLSAgICB9
IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIiRuYW1l
JF8uQ2xlYXJUb0RlZmF1bHQoJGRlZmF1bHRfdmFyaWFibGUkLCBHZXRBcmVuYU5vVmlydHVhbCgp
KTtcbiIpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoZGVzY3JpcHRvcl8tPmRlZmF1bHRf
dmFsdWVfc3RyaW5nKCkuZW1wdHkoKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICAgIiRuYW1lJF8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgkZGVmYXVsdF92YXJpYWJs
ZSQpO1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgICAgICIkbmFtZSRfLkNsZWFyVG9EZWZhdWx0Tm9BcmVuYSgkZGVmYXVsdF92YXJpYWJs
ZSQpO1xuIik7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgU3RyaW5nRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAo
U3VwcG9ydHNBcmVuYXMoZGVzY3JpcHRvcl8pIHx8IGRlc2NyaXB0b3JfLT5jb250YWluaW5nX29u
ZW9mKCkgIT0gTlVMTCkgewotICAgIC8vIFRPRE8oZ3Bpa2UpOiBpbXByb3ZlIHRoaXMKLSAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAic2V0XyRuYW1lJChmcm9tLiRuYW1lJCgpKTtcbiIp
OwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJHNl
dF9oYXNiaXQkXG4iCi0gICAgICAiJG5hbWUkXy5Bc3NpZ25XaXRoRGVmYXVsdCgkZGVmYXVsdF92
YXJpYWJsZSQsIGZyb20uJG5hbWUkXyk7XG4iKTsKLSAgfQotfQotCi12b2lkIFN0cmluZ0ZpZWxk
R2VuZXJhdG9yOjoKLUdlbmVyYXRlU3dhcHBpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICIkbmFtZSRfLlN3YXAoJm90aGVy
LT4kbmFtZSRfKTtcbiIpOwotfQotCi12b2lkIFN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVy
YXRlQ29uc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJG5hbWUkXy5VbnNhZmVTZXREZWZhdWx0KCRk
ZWZhdWx0X3ZhcmlhYmxlJCk7XG4iKTsKLX0KLQotdm9pZCBTdHJpbmdGaWVsZEdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZURlc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgIiRuYW1lJF8uRGVzdHJveSgkZGVmYXVsdF92YXJpYWJsZSQsIEdl
dEFyZW5hTm9WaXJ0dWFsKCkpO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAgICIkbmFtZSRfLkRlc3Ryb3lOb0FyZW5hKCRkZWZhdWx0X3Zhcmlh
YmxlJCk7XG4iKTsKLSAgfQotfQotCi12b2lkIFN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVy
YXRlRGVmYXVsdEluc3RhbmNlQWxsb2NhdG9yKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7
Ci0gIGlmICghZGVzY3JpcHRvcl8tPmRlZmF1bHRfdmFsdWVfc3RyaW5nKCkuZW1wdHkoKSkgewot
ICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGNsYXNzbmFtZSQ6OiRkZWZh
dWx0X3ZhcmlhYmxlJCA9XG4iCi0gICAgICAiICAgIG5ldyA6OnN0ZDo6c3RyaW5nKCRkZWZhdWx0
JCwgJGRlZmF1bHRfbGVuZ3RoJCk7XG4iKTsKLSAgfQotfQotCi12b2lkIFN0cmluZ0ZpZWxkR2Vu
ZXJhdG9yOjoKLUdlbmVyYXRlU2h1dGRvd25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCB7Ci0gIGlmICghZGVzY3JpcHRvcl8tPmRlZmF1bHRfdmFsdWVfc3RyaW5nKCkuZW1wdHkoKSkg
ewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiZGVsZXRlICRjbGFzc25h
bWUkOjokZGVmYXVsdF92YXJpYWJsZSQ7XG4iKTsKLSAgfQotfQotCi12b2lkIFN0cmluZ0ZpZWxk
R2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVyZ2VGcm9tQ29kZWRTdHJlYW0oaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiRE9fKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkJGRlY2xhcmVk
X3R5cGUkKFxuIgotICAgICIgICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV8kbmFtZSQoKSkpO1xu
Iik7Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBF
X1NUUklORykgewotICAgIEdlbmVyYXRlVXRmOENoZWNrQ29kZUZvclN0cmluZygKLSAgICAgICAg
ZGVzY3JpcHRvcl8sIG9wdGlvbnNfLCB0cnVlLCB2YXJpYWJsZXNfLAotICAgICAgICAidGhpcy0+
JG5hbWUkKCkuZGF0YSgpLCB0aGlzLT4kbmFtZSQoKS5sZW5ndGgoKSxcbiIsIHByaW50ZXIpOwot
ICB9Ci19Ci0KLXZvaWQgU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVX
aXRoQ2FjaGVkU2l6ZXMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKGRlc2Ny
aXB0b3JfLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX1NUUklORykgewotICAgIEdl
bmVyYXRlVXRmOENoZWNrQ29kZUZvclN0cmluZygKLSAgICAgICAgZGVzY3JpcHRvcl8sIG9wdGlv
bnNfLCBmYWxzZSwgdmFyaWFibGVzXywKLSAgICAgICAgInRoaXMtPiRuYW1lJCgpLmRhdGEoKSwg
dGhpcy0+JG5hbWUkKCkubGVuZ3RoKCksXG4iLCBwcmludGVyKTsKLSAgfQotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICI6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6V3JpdGUkZGVjbGFyZWRfdHlwZSRNYXliZUFsaWFzZWQoXG4iCi0gICAgIiAg
JG51bWJlciQsIHRoaXMtPiRuYW1lJCgpLCBvdXRwdXQpO1xuIik7Ci19Ci0KLXZvaWQgU3RyaW5n
RmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChkZXNjcmlwdG9yXy0+dHlwZSgp
ID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcpIHsKLSAgICBHZW5lcmF0ZVV0ZjhDaGVj
a0NvZGVGb3JTdHJpbmcoCi0gICAgICAgIGRlc2NyaXB0b3JfLCBvcHRpb25zXywgZmFsc2UsIHZh
cmlhYmxlc18sCi0gICAgICAgICJ0aGlzLT4kbmFtZSQoKS5kYXRhKCksIHRoaXMtPiRuYW1lJCgp
Lmxlbmd0aCgpLFxuIiwgcHJpbnRlcik7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAidGFyZ2V0ID1cbiIKLSAgICAiICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGUkZGVjbGFyZWRfdHlwZSRUb0FycmF5KFxuIgotICAgICIg
ICAgJG51bWJlciQsIHRoaXMtPiRuYW1lJCgpLCB0YXJnZXQpO1xuIik7Ci19Ci0KLXZvaWQgU3Ry
aW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCeXRlU2l6ZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJ0b3RhbF9zaXpl
ICs9ICR0YWdfc2l6ZSQgK1xuIgotICAgICIgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjokZGVjbGFyZWRfdHlwZSRTaXplKFxuIgotICAgICIgICAgdGhpcy0+
JG5hbWUkKCkpO1xuIik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU3RyaW5nT25lb2ZGaWVsZEdl
bmVyYXRvcjo6Ci1TdHJpbmdPbmVvZkZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYg
b3B0aW9ucykKLSAgICA6IFN0cmluZ0ZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0b3IsIG9wdGlvbnMp
LAotICAgICAgZGVwZW5kZW50X2ZpZWxkXyhvcHRpb25zLnByb3RvX2gpIHsKLSAgU2V0Q29tbW9u
T25lb2ZGaWVsZFZhcmlhYmxlcyhkZXNjcmlwdG9yLCAmdmFyaWFibGVzXyk7Ci19Ci0KLVN0cmlu
Z09uZW9mRmllbGRHZW5lcmF0b3I6On5TdHJpbmdPbmVvZkZpZWxkR2VuZXJhdG9yKCkge30KLQot
dm9pZCBTdHJpbmdPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW5saW5lQWNjZXNzb3JE
ZWZpbml0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGlzX2lubGluZSkgY29uc3QgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+
IHZhcmlhYmxlcyh2YXJpYWJsZXNfKTsKLSAgdmFyaWFibGVzWyJpbmxpbmUiXSA9IGlzX2lubGlu
ZSA/ICJpbmxpbmUiIDogIiI7Ci0gIGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlwdG9yXykpIHsK
LSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAiJGlubGluZSQgY29uc3QgOjpz
dGQ6OnN0cmluZyYgJGNsYXNzbmFtZSQ6OiRuYW1lJCgpIGNvbnN0IHtcbiIKLSAgICAgICIgIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAg
ICAiICBpZiAoaGFzXyRuYW1lJCgpKSB7XG4iCi0gICAgICAiICAgIHJldHVybiAkb25lb2ZfcHJl
Zml4JCRuYW1lJF8uR2V0KCRkZWZhdWx0X3ZhcmlhYmxlJCk7XG4iCi0gICAgICAiICB9XG4iCi0g
ICAgICAiICByZXR1cm4gKiRkZWZhdWx0X3ZhcmlhYmxlJDtcbiIKLSAgICAgICJ9XG4iCi0gICAg
ICAiJGlubGluZSQgdm9pZCAkY2xhc3NuYW1lJDo6c2V0XyRuYW1lJChjb25zdCA6OnN0ZDo6c3Ry
aW5nJiB2YWx1ZSkge1xuIgotICAgICAgIiAgaWYgKCFoYXNfJG5hbWUkKCkpIHtcbiIKLSAgICAg
ICIgICAgY2xlYXJfJG9uZW9mX25hbWUkKCk7XG4iCi0gICAgICAiICAgIHNldF9oYXNfJG5hbWUk
KCk7XG4iCi0gICAgICAiICAgICRvbmVvZl9wcmVmaXgkJG5hbWUkXy5VbnNhZmVTZXREZWZhdWx0
KCRkZWZhdWx0X3ZhcmlhYmxlJCk7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICAkb25lb2Zf
cHJlZml4JCRuYW1lJF8uU2V0KCRkZWZhdWx0X3ZhcmlhYmxlJCwgdmFsdWUsXG4iCi0gICAgICAi
ICAgICAgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0OiRmdWxsX25hbWUkKVxuIgotICAgICAgIn1cbiIKLSAgICAg
ICIkaW5saW5lJCB2b2lkICRjbGFzc25hbWUkOjpzZXRfJG5hbWUkKGNvbnN0IGNoYXIqIHZhbHVl
KSB7XG4iCi0gICAgICAiICBpZiAoIWhhc18kbmFtZSQoKSkge1xuIgotICAgICAgIiAgICBjbGVh
cl8kb25lb2ZfbmFtZSQoKTtcbiIKLSAgICAgICIgICAgc2V0X2hhc18kbmFtZSQoKTtcbiIKLSAg
ICAgICIgICAgJG9uZW9mX3ByZWZpeCQkbmFtZSRfLlVuc2FmZVNldERlZmF1bHQoJGRlZmF1bHRf
dmFyaWFibGUkKTtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgICRvbmVvZl9wcmVmaXgkJG5h
bWUkXy5TZXQoJGRlZmF1bHRfdmFyaWFibGUkLFxuIgotICAgICAgIiAgICAgICRzdHJpbmdfcGll
Y2UkKHZhbHVlKSwgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7XG4iCi0gICAgICAiICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAi
fVxuIgotICAgICAgIiRpbmxpbmUkICIKLSAgICAgICJ2b2lkICRjbGFzc25hbWUkOjpzZXRfJG5h
bWUkKGNvbnN0ICRwb2ludGVyX3R5cGUkKiB2YWx1ZSxcbiIKLSAgICAgICIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKSB7XG4iCi0gICAgICAiICBpZiAoIWhhc18kbmFt
ZSQoKSkge1xuIgotICAgICAgIiAgICBjbGVhcl8kb25lb2ZfbmFtZSQoKTtcbiIKLSAgICAgICIg
ICAgc2V0X2hhc18kbmFtZSQoKTtcbiIKLSAgICAgICIgICAgJG9uZW9mX3ByZWZpeCQkbmFtZSRf
LlVuc2FmZVNldERlZmF1bHQoJGRlZmF1bHRfdmFyaWFibGUkKTtcbiIKLSAgICAgICIgIH1cbiIK
LSAgICAgICIgICRvbmVvZl9wcmVmaXgkJG5hbWUkXy5TZXQoJGRlZmF1bHRfdmFyaWFibGUkLCAk
c3RyaW5nX3BpZWNlJChcbiIKLSAgICAgICIgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPih2YWx1ZSksIHNpemUpLFxuIgotICAgICAgIiAgICAgIEdldEFyZW5hTm9WaXJ0dWFsKCkp
O1xuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2lu
dGVyOiRmdWxsX25hbWUkKVxuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCA6OnN0ZDo6
c3RyaW5nKiAkY2xhc3NuYW1lJDo6bXV0YWJsZV8kbmFtZSQoKSB7XG4iCi0gICAgICAiICBpZiAo
IWhhc18kbmFtZSQoKSkge1xuIgotICAgICAgIiAgICBjbGVhcl8kb25lb2ZfbmFtZSQoKTtcbiIK
LSAgICAgICIgICAgc2V0X2hhc18kbmFtZSQoKTtcbiIKLSAgICAgICIgICAgJG9uZW9mX3ByZWZp
eCQkbmFtZSRfLlVuc2FmZVNldERlZmF1bHQoJGRlZmF1bHRfdmFyaWFibGUkKTtcbiIKLSAgICAg
ICIgIH1cbiIKLSAgICAgICIgIHJldHVybiAkb25lb2ZfcHJlZml4JCRuYW1lJF8uTXV0YWJsZSgk
ZGVmYXVsdF92YXJpYWJsZSQsXG4iCi0gICAgICAiICAgICAgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7
XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTok
ZnVsbF9uYW1lJClcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlubGluZSQgOjpzdGQ6OnN0cmlu
ZyogJGNsYXNzbmFtZSQ6OiRyZWxlYXNlX25hbWUkKCkge1xuIgotICAgICAgIiAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAi
ICBpZiAoaGFzXyRuYW1lJCgpKSB7XG4iCi0gICAgICAiICAgIGNsZWFyX2hhc18kb25lb2ZfbmFt
ZSQoKTtcbiIKLSAgICAgICIgICAgcmV0dXJuICRvbmVvZl9wcmVmaXgkJG5hbWUkXy5SZWxlYXNl
KCRkZWZhdWx0X3ZhcmlhYmxlJCxcbiIKLSAgICAgICIgICAgICAgIEdldEFyZW5hTm9WaXJ0dWFs
KCkpO1xuIgotICAgICAgIiAgfSBlbHNlIHtcbiIKLSAgICAgICIgICAgcmV0dXJuIE5VTEw7XG4i
Ci0gICAgICAiICB9XG4iCi0gICAgICAifVxuIgotICAgICAgIiRpbmxpbmUkIDo6c3RkOjpzdHJp
bmcqICRjbGFzc25hbWUkOjp1bnNhZmVfYXJlbmFfcmVsZWFzZV8kbmFtZSQoKSB7XG4iCi0gICAg
ICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfdW5zYWZlX2FyZW5hX3JlbGVh
c2U6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICBHT09HTEVfRENIRUNLKEdldEFyZW5hTm9WaXJ0
dWFsKCkgIT0gTlVMTCk7XG4iCi0gICAgICAiICBpZiAoaGFzXyRuYW1lJCgpKSB7XG4iCi0gICAg
ICAiICAgIGNsZWFyX2hhc18kb25lb2ZfbmFtZSQoKTtcbiIKLSAgICAgICIgICAgcmV0dXJuICRv
bmVvZl9wcmVmaXgkJG5hbWUkXy5VbnNhZmVBcmVuYVJlbGVhc2UoXG4iCi0gICAgICAiICAgICAg
ICAkZGVmYXVsdF92YXJpYWJsZSQsIEdldEFyZW5hTm9WaXJ0dWFsKCkpO1xuIgotICAgICAgIiAg
fSBlbHNlIHtcbiIKLSAgICAgICIgICAgcmV0dXJuIE5VTEw7XG4iCi0gICAgICAiICB9XG4iCi0g
ICAgICAifVxuIgotICAgICAgIiRpbmxpbmUkIHZvaWQgJGNsYXNzbmFtZSQ6OnNldF9hbGxvY2F0
ZWRfJG5hbWUkKDo6c3RkOjpzdHJpbmcqICRuYW1lJCkge1xuIgotICAgICAgIiAgaWYgKCFoYXNf
JG5hbWUkKCkpIHtcbiIKLSAgICAgICIgICAgJG9uZW9mX3ByZWZpeCQkbmFtZSRfLlVuc2FmZVNl
dERlZmF1bHQoJGRlZmF1bHRfdmFyaWFibGUkKTtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIg
IGNsZWFyXyRvbmVvZl9uYW1lJCgpO1xuIgotICAgICAgIiAgaWYgKCRuYW1lJCAhPSBOVUxMKSB7
XG4iCi0gICAgICAiICAgIHNldF9oYXNfJG5hbWUkKCk7XG4iCi0gICAgICAiICAgICRvbmVvZl9w
cmVmaXgkJG5hbWUkXy5TZXRBbGxvY2F0ZWQoJGRlZmF1bHRfdmFyaWFibGUkLCAkbmFtZSQsXG4i
Ci0gICAgICAiICAgICAgICBHZXRBcmVuYU5vVmlydHVhbCgpKTtcbiIKLSAgICAgICIgIH1cbiIK
LSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVk
OiRmdWxsX25hbWUkKVxuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCB2b2lkICRjbGFz
c25hbWUkOjp1bnNhZmVfYXJlbmFfc2V0X2FsbG9jYXRlZF8kbmFtZSQoIgotICAgICAgIjo6c3Rk
OjpzdHJpbmcqICRuYW1lJCkge1xuIgotICAgICAgIiAgR09PR0xFX0RDSEVDSyhHZXRBcmVuYU5v
VmlydHVhbCgpICE9IE5VTEwpO1xuIgotICAgICAgIiAgaWYgKCFoYXNfJG5hbWUkKCkpIHtcbiIK
LSAgICAgICIgICAgJG9uZW9mX3ByZWZpeCQkbmFtZSRfLlVuc2FmZVNldERlZmF1bHQoJGRlZmF1
bHRfdmFyaWFibGUkKTtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIGNsZWFyXyRvbmVvZl9u
YW1lJCgpO1xuIgotICAgICAgIiAgaWYgKCRuYW1lJCkge1xuIgotICAgICAgIiAgICBzZXRfaGFz
XyRuYW1lJCgpO1xuIgotICAgICAgIiAgICAkb25lb2ZfcHJlZml4JCRuYW1lJF8uVW5zYWZlQXJl
bmFTZXRBbGxvY2F0ZWQoJGRlZmF1bHRfdmFyaWFibGUkLCAiCi0gICAgICAiJG5hbWUkLCBHZXRB
cmVuYU5vVmlydHVhbCgpKTtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF91bnNhZmVfYXJlbmFfc2V0X2FsbG9jYXRlZDoiCi0gICAg
ICAiJGZ1bGxfbmFtZSQpXG4iCi0gICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gTm8t
YXJlbmEgY2FzZS4KLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAiJGlubGlu
ZSQgY29uc3QgOjpzdGQ6OnN0cmluZyYgJGNsYXNzbmFtZSQ6OiRuYW1lJCgpIGNvbnN0IHtcbiIK
LSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6JGZ1bGxfbmFt
ZSQpXG4iCi0gICAgICAiICBpZiAoaGFzXyRuYW1lJCgpKSB7XG4iCi0gICAgICAiICAgIHJldHVy
biAkb25lb2ZfcHJlZml4JCRuYW1lJF8uR2V0Tm9BcmVuYSgkZGVmYXVsdF92YXJpYWJsZSQpO1xu
IgotICAgICAgIiAgfVxuIgotICAgICAgIiAgcmV0dXJuICokZGVmYXVsdF92YXJpYWJsZSQ7XG4i
Ci0gICAgICAifVxuIgotICAgICAgIiRpbmxpbmUkIHZvaWQgJGNsYXNzbmFtZSQ6OnNldF8kbmFt
ZSQoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHtcbiIKLSAgICAgICIgIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6JGZ1bGxfbmFtZSQpXG4iCi0gICAgICAiICBpZiAo
IWhhc18kbmFtZSQoKSkge1xuIgotICAgICAgIiAgICBjbGVhcl8kb25lb2ZfbmFtZSQoKTtcbiIK
LSAgICAgICIgICAgc2V0X2hhc18kbmFtZSQoKTtcbiIKLSAgICAgICIgICAgJG9uZW9mX3ByZWZp
eCQkbmFtZSRfLlVuc2FmZVNldERlZmF1bHQoJGRlZmF1bHRfdmFyaWFibGUkKTtcbiIKLSAgICAg
ICIgIH1cbiIKLSAgICAgICIgICRvbmVvZl9wcmVmaXgkJG5hbWUkXy5TZXROb0FyZW5hKCRkZWZh
dWx0X3ZhcmlhYmxlJCwgdmFsdWUpO1xuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldDokZnVsbF9uYW1lJClcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlu
bGluZSQgdm9pZCAkY2xhc3NuYW1lJDo6c2V0XyRuYW1lJChjb25zdCBjaGFyKiB2YWx1ZSkge1xu
IgotICAgICAgIiAgaWYgKCFoYXNfJG5hbWUkKCkpIHtcbiIKLSAgICAgICIgICAgY2xlYXJfJG9u
ZW9mX25hbWUkKCk7XG4iCi0gICAgICAiICAgIHNldF9oYXNfJG5hbWUkKCk7XG4iCi0gICAgICAi
ICAgICRvbmVvZl9wcmVmaXgkJG5hbWUkXy5VbnNhZmVTZXREZWZhdWx0KCRkZWZhdWx0X3Zhcmlh
YmxlJCk7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICAkb25lb2ZfcHJlZml4JCRuYW1lJF8u
U2V0Tm9BcmVuYSgkZGVmYXVsdF92YXJpYWJsZSQsXG4iCi0gICAgICAiICAgICAgJHN0cmluZ19w
aWVjZSQodmFsdWUpKTtcbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXRfY2hhcjokZnVsbF9uYW1lJClcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlubGlu
ZSQgIgotICAgICAgInZvaWQgJGNsYXNzbmFtZSQ6OnNldF8kbmFtZSQoY29uc3QgJHBvaW50ZXJf
dHlwZSQqIHZhbHVlLCBzaXplX3Qgc2l6ZSkge1xuIgotICAgICAgIiAgaWYgKCFoYXNfJG5hbWUk
KCkpIHtcbiIKLSAgICAgICIgICAgY2xlYXJfJG9uZW9mX25hbWUkKCk7XG4iCi0gICAgICAiICAg
IHNldF9oYXNfJG5hbWUkKCk7XG4iCi0gICAgICAiICAgICRvbmVvZl9wcmVmaXgkJG5hbWUkXy5V
bnNhZmVTZXREZWZhdWx0KCRkZWZhdWx0X3ZhcmlhYmxlJCk7XG4iCi0gICAgICAiICB9XG4iCi0g
ICAgICAiICAkb25lb2ZfcHJlZml4JCRuYW1lJF8uU2V0Tm9BcmVuYSgkZGVmYXVsdF92YXJpYWJs
ZSQsICRzdHJpbmdfcGllY2UkKFxuIgotICAgICAgIiAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpO1xuIgotICAgICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOiRmdWxsX25hbWUkKVxuIgotICAgICAgIn1cbiIK
LSAgICAgICIkaW5saW5lJCA6OnN0ZDo6c3RyaW5nKiAkY2xhc3NuYW1lJDo6bXV0YWJsZV8kbmFt
ZSQoKSB7XG4iCi0gICAgICAiICBpZiAoIWhhc18kbmFtZSQoKSkge1xuIgotICAgICAgIiAgICBj
bGVhcl8kb25lb2ZfbmFtZSQoKTtcbiIKLSAgICAgICIgICAgc2V0X2hhc18kbmFtZSQoKTtcbiIK
LSAgICAgICIgICAgJG9uZW9mX3ByZWZpeCQkbmFtZSRfLlVuc2FmZVNldERlZmF1bHQoJGRlZmF1
bHRfdmFyaWFibGUkKTtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOiRmdWxsX25hbWUkKVxuIgotICAgICAgIiAgcmV0
dXJuICRvbmVvZl9wcmVmaXgkJG5hbWUkXy5NdXRhYmxlTm9BcmVuYSgkZGVmYXVsdF92YXJpYWJs
ZSQpO1xuIgotICAgICAgIn1cbiIKLSAgICAgICIkaW5saW5lJCA6OnN0ZDo6c3RyaW5nKiAkY2xh
c3NuYW1lJDo6JHJlbGVhc2VfbmFtZSQoKSB7XG4iCi0gICAgICAiICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTokZnVsbF9uYW1lJClcbiIKLSAgICAgICIgIGlmICho
YXNfJG5hbWUkKCkpIHtcbiIKLSAgICAgICIgICAgY2xlYXJfaGFzXyRvbmVvZl9uYW1lJCgpO1xu
IgotICAgICAgIiAgICByZXR1cm4gJG9uZW9mX3ByZWZpeCQkbmFtZSRfLlJlbGVhc2VOb0FyZW5h
KCRkZWZhdWx0X3ZhcmlhYmxlJCk7XG4iCi0gICAgICAiICB9IGVsc2Uge1xuIgotICAgICAgIiAg
ICByZXR1cm4gTlVMTDtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICJ9XG4iCi0gICAgICAiJGlu
bGluZSQgdm9pZCAkY2xhc3NuYW1lJDo6c2V0X2FsbG9jYXRlZF8kbmFtZSQoOjpzdGQ6OnN0cmlu
ZyogJG5hbWUkKSB7XG4iCi0gICAgICAiICBpZiAoIWhhc18kbmFtZSQoKSkge1xuIgotICAgICAg
IiAgICAkb25lb2ZfcHJlZml4JCRuYW1lJF8uVW5zYWZlU2V0RGVmYXVsdCgkZGVmYXVsdF92YXJp
YWJsZSQpO1xuIgotICAgICAgIiAgfVxuIgotICAgICAgIiAgY2xlYXJfJG9uZW9mX25hbWUkKCk7
XG4iCi0gICAgICAiICBpZiAoJG5hbWUkICE9IE5VTEwpIHtcbiIKLSAgICAgICIgICAgc2V0X2hh
c18kbmFtZSQoKTtcbiIKLSAgICAgICIgICAgJG9uZW9mX3ByZWZpeCQkbmFtZSRfLlNldEFsbG9j
YXRlZE5vQXJlbmEoJGRlZmF1bHRfdmFyaWFibGUkLFxuIgotICAgICAgIiAgICAgICAgJG5hbWUk
KTtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfYWxsb2NhdGVkOiRmdWxsX25hbWUkKVxuIgotICAgICAgIn1cbiIpOwotICB9
Ci19Ci0KLXZvaWQgU3RyaW5nT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNsZWFyaW5n
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+
IHZhcmlhYmxlcyh2YXJpYWJsZXNfKTsKLSAgaWYgKGRlcGVuZGVudF9maWVsZF8pIHsKLSAgICB2
YXJpYWJsZXNbInRoaXNfbWVzc2FnZSJdID0gRGVwZW5kZW50QmFzZURvd25DYXN0KCk7Ci0gICAg
Ly8gVGhpcyBjbGVhcmluZyBjb2RlIG1heSBiZSBpbiB0aGUgZGVwZW5kZW50IGJhc2UgY2xhc3Mu
IElmIHRoZSBkZWZhdWx0Ci0gICAgLy8gdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nLCB0aGVuIHRo
ZSAkZGVmYXVsdF92YXJpYWJsZSQgaXMgYSBnbG9iYWwKLSAgICAvLyBzaW5nbGV0b24uIElmIHRo
ZSBkZWZhdWx0IGlzIG5vdCBlbXB0eSwgd2UgbmVlZCB0byBkb3duLWNhc3QgdG8gZ2V0IHRoZQot
ICAgIC8vIGRlZmF1bHQgdmFsdWUncyBnbG9iYWwgc2luZ2xldG9uIGluc3RhbmNlLiBTZWUgU2V0
U3RyaW5nVmFyaWFibGVzKCkgZm9yCi0gICAgLy8gcG9zc2libGUgdmFsdWVzIG9mIGRlZmF1bHRf
dmFyaWFibGUuCi0gICAgaWYgKCFkZXNjcmlwdG9yXy0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKS5l
bXB0eSgpKSB7Ci0gICAgICB2YXJpYWJsZXNbImRlZmF1bHRfdmFyaWFibGUiXSA9Ci0gICAgICAg
ICAgRGVwZW5kZW50QmFzZURvd25DYXN0KCkgKyB2YXJpYWJsZXNbImRlZmF1bHRfdmFyaWFibGUi
XTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgdmFyaWFibGVzWyJ0aGlzX21lc3NhZ2UiXSA9ICIi
OwotICB9Ci0gIGlmIChTdXBwb3J0c0FyZW5hcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAiJHRoaXNfbWVzc2FnZSQkb25lb2ZfcHJlZml4JCRu
YW1lJF8uRGVzdHJveSgkZGVmYXVsdF92YXJpYWJsZSQsXG4iCi0gICAgICAiICAgICR0aGlzX21l
c3NhZ2UkR2V0QXJlbmFOb1ZpcnR1YWwoKSk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAiJHRoaXNfbWVzc2FnZSQkb25lb2ZfcHJlZml4JCRu
YW1lJF8uIgotICAgICAgIkRlc3Ryb3lOb0FyZW5hKCRkZWZhdWx0X3ZhcmlhYmxlJCk7XG4iKTsK
LSAgfQotfQotCi12b2lkIFN0cmluZ09uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTd2Fw
cGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gRG9uJ3QgcHJpbnQg
YW55IHN3YXBwaW5nIGNvZGUuIFN3YXBwaW5nIHRoZSB1bmlvbiB3aWxsIHN3YXAgdGhpcyBmaWVs
ZC4KLX0KLQotdm9pZCBTdHJpbmdPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ29uc3Ry
dWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgIiAgJGNsYXNzbmFtZSRfZGVmYXVsdF9vbmVvZl9pbnN0YW5jZV8t
PiRuYW1lJF8uVW5zYWZlU2V0RGVmYXVsdCgiCi0gICAgIiRkZWZhdWx0X3ZhcmlhYmxlJCk7XG4i
KTsKLX0KLQotdm9pZCBTdHJpbmdPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlRGVzdHJ1
Y3RvckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRzQXJl
bmFzKGRlc2NyaXB0b3JfKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAiaWYgKGhhc18kbmFtZSQoKSkge1xuIgotICAgICAgIiAgJG9uZW9mX3ByZWZpeCQkbmFtZSRf
LkRlc3Ryb3koJGRlZmF1bHRfdmFyaWFibGUkLFxuIgotICAgICAgIiAgICAgIEdldEFyZW5hTm9W
aXJ0dWFsKCkpO1xuIgotICAgICAgIn1cbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgICAiaWYgKGhhc18kbmFtZSQoKSkge1xuIgotICAgICAgIiAg
JG9uZW9mX3ByZWZpeCQkbmFtZSRfLkRlc3Ryb3lOb0FyZW5hKCRkZWZhdWx0X3ZhcmlhYmxlJCk7
XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLX0KLQotdm9pZCBTdHJpbmdPbmVvZkZpZWxkR2VuZXJh
dG9yOjoKLUdlbmVyYXRlTWVyZ2VGcm9tQ29kZWRTdHJlYW0oaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIkRPXyg6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZCRkZWNsYXJlZF90
eXBlJChcbiIKLSAgICAgICIgICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV8kbmFtZSQoKSkpO1xu
Iik7Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBF
X1NUUklORykgewotICAgIEdlbmVyYXRlVXRmOENoZWNrQ29kZUZvclN0cmluZygKLSAgICAgICAg
ZGVzY3JpcHRvcl8sIG9wdGlvbnNfLCB0cnVlLCB2YXJpYWJsZXNfLAotICAgICAgICAidGhpcy0+
JG5hbWUkKCkuZGF0YSgpLCB0aGlzLT4kbmFtZSQoKS5sZW5ndGgoKSxcbiIsIHByaW50ZXIpOwot
ICB9Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1SZXBlYXRlZFN0cmluZ0ZpZWxkR2VuZXJhdG9y
OjpSZXBlYXRlZFN0cmluZ0ZpZWxkR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZGVzY3JpcHRvciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IEZpZWxkR2VuZXJh
dG9yKG9wdGlvbnMpLCBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSB7Ci0gIFNldFN0cmluZ1Zhcmlh
YmxlcyhkZXNjcmlwdG9yLCAmdmFyaWFibGVzXywgb3B0aW9ucyk7Ci19Ci0KLVJlcGVhdGVkU3Ry
aW5nRmllbGRHZW5lcmF0b3I6On5SZXBlYXRlZFN0cmluZ0ZpZWxkR2VuZXJhdG9yKCkge30KLQot
dm9pZCBSZXBlYXRlZFN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUHJpdmF0ZU1lbWJl
cnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAiOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6
c3RyaW5nPiAkbmFtZSRfO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRTdHJpbmdGaWVsZEdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZUFjY2Vzc29yRGVjbGFyYXRpb25zKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIC8vIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHVua25vd24gY3R5cGVzLgot
ICBib29sIHVua25vd25fY3R5cGUgPQotICAgICAgZGVzY3JpcHRvcl8tPm9wdGlvbnMoKS5jdHlw
ZSgpICE9IEVmZmVjdGl2ZVN0cmluZ0NUeXBlKGRlc2NyaXB0b3JfKTsKLQotICBpZiAodW5rbm93
bl9jdHlwZSkgewotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICIgcHJpdmF0ZTpcbiIKLSAgICAgICIgIC8vIEhpZGRlbiBkdWUgdG8gdW5rbm93biBj
dHlwZSBvcHRpb24uXG4iKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgfQotCi0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGVkX2F0dHIkY29uc3QgOjpzdGQ6
OnN0cmluZyYgJG5hbWUkKGludCBpbmRleCkgY29uc3Q7XG4iCi0gICAgIiRkZXByZWNhdGVkX2F0
dHIkOjpzdGQ6OnN0cmluZyogbXV0YWJsZV8kbmFtZSQoaW50IGluZGV4KTtcbiIKLSAgICAiJGRl
cHJlY2F0ZWRfYXR0ciR2b2lkIHNldF8kbmFtZSQoaW50IGluZGV4LCBjb25zdCA6OnN0ZDo6c3Ry
aW5nJiB2YWx1ZSk7XG4iCi0gICAgIiRkZXByZWNhdGVkX2F0dHIkdm9pZCBzZXRfJG5hbWUkKGlu
dCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUpO1xuIgotICAgICIiCi0gICAgIiRkZXByZWNhdGVk
X2F0dHIkdm9pZCBzZXRfJG5hbWUkKCIKLSAgICAgICAgICAgICAgICAgImludCBpbmRleCwgY29u
c3QgJHBvaW50ZXJfdHlwZSQqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7XG4iCi0gICAgIiRkZXByZWNh
dGVkX2F0dHIkOjpzdGQ6OnN0cmluZyogYWRkXyRuYW1lJCgpO1xuIgotICAgICIkZGVwcmVjYXRl
ZF9hdHRyJHZvaWQgYWRkXyRuYW1lJChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7XG4iCi0g
ICAgIiRkZXByZWNhdGVkX2F0dHIkdm9pZCBhZGRfJG5hbWUkKGNvbnN0IGNoYXIqIHZhbHVlKTtc
biIKLSAgICAiJGRlcHJlY2F0ZWRfYXR0ciR2b2lkIGFkZF8kbmFtZSQoY29uc3QgJHBvaW50ZXJf
dHlwZSQqIHZhbHVlLCBzaXplX3Qgc2l6ZSkiCi0gICAgICAgICAgICAgICAgICI7XG4iKTsKLQot
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRlZF9hdHRyJGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmluZz4mICRu
YW1lJCgpICIKLSAgICAgICAgICAgICAgICAgImNvbnN0O1xuIgotICAgICIkZGVwcmVjYXRlZF9h
dHRyJDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmluZz4q
IG11dGFibGVfJG5hbWUkKCkiCi0gICAgICAgICAgICAgICAgICI7XG4iKTsKLQotICBpZiAodW5r
bm93bl9jdHlwZSkgewotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5Qcmlu
dCgiIHB1YmxpYzpcbiIpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotICB9Ci19Ci0KLXZvaWQg
UmVwZWF0ZWRTdHJpbmdGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUlubGluZUFjY2Vzc29yRGVm
aW5pdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpc19pbmxpbmUpIGNvbnN0IHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2
YXJpYWJsZXModmFyaWFibGVzXyk7Ci0gIHZhcmlhYmxlc1siaW5saW5lIl0gPSBpc19pbmxpbmUg
PyAiaW5saW5lIiA6ICIiOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0gICAgIiRpbmxp
bmUkIGNvbnN0IDo6c3RkOjpzdHJpbmcmICRjbGFzc25hbWUkOjokbmFtZSQoaW50IGluZGV4KSBj
b25zdCB7XG4iCi0gICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDok
ZnVsbF9uYW1lJClcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXy4kY3BwZ2V0JChpbmRleCk7XG4i
Ci0gICAgIn1cbiIKLSAgICAiJGlubGluZSQgOjpzdGQ6OnN0cmluZyogJGNsYXNzbmFtZSQ6Om11
dGFibGVfJG5hbWUkKGludCBpbmRleCkge1xuIgotICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9tdXRhYmxlOiRmdWxsX25hbWUkKVxuIgotICAgICIgIHJldHVybiAkbmFt
ZSRfLk11dGFibGUoaW5kZXgpO1xuIgotICAgICJ9XG4iCi0gICAgIiRpbmxpbmUkIHZvaWQgJGNs
YXNzbmFtZSQ6OnNldF8kbmFtZSQoaW50IGluZGV4LCBjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1
ZSkge1xuIgotICAgICIgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6JGZ1
bGxfbmFtZSQpXG4iCi0gICAgIiAgJG5hbWUkXy5NdXRhYmxlKGluZGV4KS0+YXNzaWduKHZhbHVl
KTtcbiIKLSAgICAifVxuIgotICAgICIkaW5saW5lJCB2b2lkICRjbGFzc25hbWUkOjpzZXRfJG5h
bWUkKGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUpIHtcbiIKLSAgICAiICAkbmFtZSRfLk11
dGFibGUoaW5kZXgpLT5hc3NpZ24odmFsdWUpO1xuIgotICAgICIgIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjokZnVsbF9uYW1lJClcbiIKLSAgICAifVxuIgotICAg
ICIkaW5saW5lJCB2b2lkICIKLSAgICAiJGNsYXNzbmFtZSQ6OnNldF8kbmFtZSQiCi0gICAgIihp
bnQgaW5kZXgsIGNvbnN0ICRwb2ludGVyX3R5cGUkKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHtcbiIK
LSAgICAiICAkbmFtZSRfLk11dGFibGUoaW5kZXgpLT5hc3NpZ24oXG4iCi0gICAgIiAgICByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpO1xuIgotICAgICIgIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjokZnVsbF9uYW1lJClcbiIK
LSAgICAifVxuIgotICAgICIkaW5saW5lJCA6OnN0ZDo6c3RyaW5nKiAkY2xhc3NuYW1lJDo6YWRk
XyRuYW1lJCgpIHtcbiIKLSAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
YWRkX211dGFibGU6JGZ1bGxfbmFtZSQpXG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF8uQWRkKCk7
XG4iCi0gICAgIn1cbiIKLSAgICAiJGlubGluZSQgdm9pZCAkY2xhc3NuYW1lJDo6YWRkXyRuYW1l
JChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkge1xuIgotICAgICIgICRuYW1lJF8uQWRkKCkt
PmFzc2lnbih2YWx1ZSk7XG4iCi0gICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2FkZDokZnVsbF9uYW1lJClcbiIKLSAgICAifVxuIgotICAgICIkaW5saW5lJCB2b2lkICRj
bGFzc25hbWUkOjphZGRfJG5hbWUkKGNvbnN0IGNoYXIqIHZhbHVlKSB7XG4iCi0gICAgIiAgJG5h
bWUkXy5BZGQoKS0+YXNzaWduKHZhbHVlKTtcbiIKLSAgICAiICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfYWRkX2NoYXI6JGZ1bGxfbmFtZSQpXG4iCi0gICAgIn1cbiIKLSAgICAi
JGlubGluZSQgdm9pZCAiCi0gICAgIiRjbGFzc25hbWUkOjphZGRfJG5hbWUkKGNvbnN0ICRwb2lu
dGVyX3R5cGUkKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHtcbiIKLSAgICAiICAkbmFtZSRfLkFkZCgp
LT5hc3NpZ24ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKTtcbiIK
LSAgICAiICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX3BvaW50ZXI6JGZ1
bGxfbmFtZSQpXG4iCi0gICAgIn1cbiIpOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMsCi0g
ICAgIiRpbmxpbmUkIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwg
OjpzdGQ6OnN0cmluZz4mXG4iCi0gICAgIiRjbGFzc25hbWUkOjokbmFtZSQoKSBjb25zdCB7XG4i
Ci0gICAgIiAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6JGZ1bGxfbmFt
ZSQpXG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF87XG4iCi0gICAgIn1cbiIKLSAgICAiJGlubGlu
ZSQgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPipc
biIKLSAgICAiJGNsYXNzbmFtZSQ6Om11dGFibGVfJG5hbWUkKCkge1xuIgotICAgICIgIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6JGZ1bGxfbmFtZSQpXG4i
Ci0gICAgIiAgcmV0dXJuICYkbmFtZSRfO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBl
YXRlZFN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ2xlYXJpbmdDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICIkbmFt
ZSRfLkNsZWFyKCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZFN0cmluZ0ZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgIiRuYW1lJF8uTWVyZ2VGcm9tKGZyb20uJG5hbWUk
Xyk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZFN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVy
YXRlU3dhcHBpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sICIkbmFtZSRfLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPiRuYW1l
JF8pO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRTdHJpbmdGaWVsZEdlbmVyYXRvcjo6Ci1HZW5l
cmF0ZUNvbnN0cnVjdG9yQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBO
b3QgbmVlZGVkIGZvciByZXBlYXRlZCBmaWVsZHMuCi19Ci0KLXZvaWQgUmVwZWF0ZWRTdHJpbmdG
aWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdlRnJvbUNvZGVkU3RyZWFtKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIkRP
Xyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZCRkZWNs
YXJlZF90eXBlJChcbiIKLSAgICAiICAgICAgaW5wdXQsIHRoaXMtPmFkZF8kbmFtZSQoKSkpO1xu
Iik7Ci0gIGlmIChkZXNjcmlwdG9yXy0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9T
VFJJTkcpIHsKLSAgICBHZW5lcmF0ZVV0ZjhDaGVja0NvZGVGb3JTdHJpbmcoCi0gICAgICAgIGRl
c2NyaXB0b3JfLCBvcHRpb25zXywgdHJ1ZSwgdmFyaWFibGVzXywKLSAgICAgICAgInRoaXMtPiRu
YW1lJCh0aGlzLT4kbmFtZSRfc2l6ZSgpIC0gMSkuZGF0YSgpLFxuIgotICAgICAgICAidGhpcy0+
JG5hbWUkKHRoaXMtPiRuYW1lJF9zaXplKCkgLSAxKS5sZW5ndGgoKSxcbiIsCi0gICAgICAgIHBy
aW50ZXIpOwotICB9Ci19Ci0KLXZvaWQgUmVwZWF0ZWRTdHJpbmdGaWVsZEdlbmVyYXRvcjo6Ci1H
ZW5lcmF0ZVNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJmb3IgKGludCBpID0gMDsg
aSA8IHRoaXMtPiRuYW1lJF9zaXplKCk7IGkrKykge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgp
OwotICBpZiAoZGVzY3JpcHRvcl8tPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU1RS
SU5HKSB7Ci0gICAgR2VuZXJhdGVVdGY4Q2hlY2tDb2RlRm9yU3RyaW5nKAotICAgICAgICBkZXNj
cmlwdG9yXywgb3B0aW9uc18sIGZhbHNlLCB2YXJpYWJsZXNfLAotICAgICAgICAidGhpcy0+JG5h
bWUkKGkpLmRhdGEoKSwgdGhpcy0+JG5hbWUkKGkpLmxlbmd0aCgpLFxuIiwgcHJpbnRlcik7Ci0g
IH0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICIgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0
ZSRkZWNsYXJlZF90eXBlJChcbiIKLSAgICAiICAgICRudW1iZXIkLCB0aGlzLT4kbmFtZSQoaSks
IG91dHB1dCk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkU3RyaW5nRmllbGRH
ZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0g
ICAgImZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+JG5hbWUkX3NpemUoKTsgaSsrKSB7XG4iKTsK
LSAgcHJpbnRlci0+SW5kZW50KCk7Ci0gIGlmIChkZXNjcmlwdG9yXy0+dHlwZSgpID09IEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcpIHsKLSAgICBHZW5lcmF0ZVV0ZjhDaGVja0NvZGVGb3JT
dHJpbmcoCi0gICAgICAgIGRlc2NyaXB0b3JfLCBvcHRpb25zXywgZmFsc2UsIHZhcmlhYmxlc18s
Ci0gICAgICAgICJ0aGlzLT4kbmFtZSQoaSkuZGF0YSgpLCB0aGlzLT4kbmFtZSQoaSkubGVuZ3Ro
KCksXG4iLCBwcmludGVyKTsKLSAgfQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgIiAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlxuIgotICAgICIgICAgV3JpdGUkZGVjbGFyZWRfdHlw
ZSRUb0FycmF5KCRudW1iZXIkLCB0aGlzLT4kbmFtZSQoaSksIHRhcmdldCk7XG4iCi0gICAgIn1c
biIpOwotfQotCi12b2lkIFJlcGVhdGVkU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVC
eXRlU2l6ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICJ0b3RhbF9zaXplICs9ICR0YWdfc2l6ZSQgKiB0aGlzLT4kbmFtZSRf
c2l6ZSgpO1xuIgotICAgICJmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPiRuYW1lJF9zaXplKCk7
IGkrKykge1xuIgotICAgICIgIHRvdGFsX3NpemUgKz0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OiRkZWNsYXJlZF90eXBlJFNpemUoXG4iCi0gICAgIiAgICB0
aGlzLT4kbmFtZSQoaSkpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGNw
cAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jcHAvY3BwX3N0cmluZ19maWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfc3RyaW5nX2ZpZWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNi
NGU4NzcyZDAwNzI1ZThlZDY3NDcwZDZkMzk3MzA2YjMzOThhNjcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NwcC9jcHBfc3RyaW5nX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdv
b2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBC
dWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3Ro
ZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DUFBfU1RSSU5HX0ZJRUxE
X0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1BQX1NUUklOR19GSUVMRF9I
X18KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBj
cHAgewotCi1jbGFzcyBTdHJpbmdGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBGaWVsZEdlbmVyYXRv
ciB7Ci0gcHVibGljOgotICBTdHJpbmdGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9w
dGlvbnMpOwotICB+U3RyaW5nRmllbGRHZW5lcmF0b3IoKTsKLQotICAvLyBpbXBsZW1lbnRzIEZp
ZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2
b2lkIEdlbmVyYXRlUHJpdmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlU3RhdGljTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbmxpbmVBY2Nlc3NvckRlZmluaXRpb25zKGlvOjpQ
cmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzX2lubGluZSkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVOb25JbmxpbmVBY2Nlc3Nv
ckRlZmluaXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZUNsZWFyaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVTd2FwcGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlQ29uc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBH
ZW5lcmF0ZURlc3RydWN0b3JDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZURlZmF1bHRJbnN0YW5jZUFsbG9jYXRvcihpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTaHV0ZG93bkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVyZ2VGcm9tQ29kZWRTdHJlYW0oaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZVdp
dGhDYWNoZWRTaXplc1RvQXJyYXkoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlQnl0ZVNpemUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJvdGVj
dGVkOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5n
LCBzdHJpbmc+IHZhcmlhYmxlc187Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoU3RyaW5nRmllbGRHZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgU3RyaW5n
T25lb2ZGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBTdHJpbmdGaWVsZEdlbmVyYXRvciB7Ci0gcHVi
bGljOgotICBTdHJpbmdPbmVvZkZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBv
cHRpb25zKTsKLSAgflN0cmluZ09uZW9mRmllbGRHZW5lcmF0b3IoKTsKLQotICAvLyBpbXBsZW1l
bnRzIEZpZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICB2b2lkIEdlbmVyYXRlSW5saW5lQWNjZXNzb3JEZWZpbml0aW9ucyhpbzo6UHJpbnRlciog
cHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c19pbmxpbmUpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQ2xlYXJpbmdDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVN3YXBwaW5nQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDb25zdHJ1Y3RvckNvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRGVzdHJ1Y3RvckNvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVyZ2VGcm9tQ29kZWRT
dHJlYW0oaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3Qg
Ym9vbCBkZXBlbmRlbnRfZmllbGRfOwotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RP
UlMoU3RyaW5nT25lb2ZGaWVsZEdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBSZXBlYXRlZFN0cmlu
Z0ZpZWxkR2VuZXJhdG9yIDogcHVibGljIEZpZWxkR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIFJl
cGVhdGVkU3RyaW5nRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlv
bnMpOwotICB+UmVwZWF0ZWRTdHJpbmdGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8vIGltcGxlbWVu
dHMgRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gIHZvaWQgR2VuZXJhdGVQcml2YXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3Q7Ci0gIHZvaWQgR2VuZXJhdGVBY2Nlc3NvckRlY2xhcmF0aW9ucyhpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbmxpbmVBY2Nlc3NvckRlZmluaXRpb25zKGlv
OjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGlzX2lubGluZSkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDbGVhcmluZ0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVyZ2luZ0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU3dhcHBpbmdDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNvbnN0cnVjdG9y
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZXJnZUZy
b21Db2RlZFN0cmVhbShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCeXRlU2l6ZShpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRl
c2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0KLSAgR09PR0xF
X0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlcGVhdGVkU3RyaW5nRmllbGRHZW5lcmF0b3Ip
OwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNwcAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlm
ICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1BQX1NUUklOR19GSUVMRF9IX18KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3Rlc3RfYmFkX2lkZW50
aWZpZXJzLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfdGVzdF9i
YWRfaWRlbnRpZmllcnMucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMjVi
MmVhOGZmZmQ4OTY5YjliZDRlMGQ0YzU1NDI1ZmJmMDk4NzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2Nw
cC9jcHBfdGVzdF9iYWRfaWRlbnRpZmllcnMucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSwxNTYg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjog
a2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQ
cm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFu
LCBhbmQgb3RoZXJzLgotLy8KLS8vIFRoaXMgZmlsZSB0ZXN0cyB0aGF0IHZhcmlvdXMgaWRlbnRp
ZmllcnMgd29yayBhcyBmaWVsZCBhbmQgdHlwZSBuYW1lcyBldmVuCi0vLyB0aG91Z2ggdGhlIHNh
bWUgaWRlbnRpZmllcnMgYXJlIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgQysrIGNvZGUgZ2VuZXJh
dG9yLgotCi1zeW50YXggPSAicHJvdG8yIjsKLQotLy8gU29tZSBnZW5lcmljX3NlcnZpY2VzIG9w
dGlvbihzKSBhZGRlZCBhdXRvbWF0aWNhbGx5LgotLy8gU2VlOiAgaHR0cDovL2dvL3Byb3RvMi1n
ZW5lcmljLXNlcnZpY2VzLWRlZmF1bHQKLW9wdGlvbiBjY19nZW5lcmljX3NlcnZpY2VzID0gdHJ1
ZTsgICAgIC8vIGF1dG8tYWRkZWQKLQotLy8gV2UgZG9uJ3QgcHV0IHRoaXMgaW4gYSBwYWNrYWdl
IHdpdGhpbiBwcm90bzIgYmVjYXVzZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQotLy8gdGhhdCB0aGUg
Z2VuZXJhdGVkIGNvZGUgZG9lc24ndCBkZXBlbmQgb24gYmVpbmcgaW4gdGhlIHByb3RvMiBuYW1l
c3BhY2UuCi1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi0vLyBUZXN0IHRoYXQgZmllbGRz
IGNhbiBoYXZlIG5hbWVzIGxpa2UgImlucHV0IiBhbmQgImkiIHdoaWNoIGFyZSBhbHNvIHVzZWQK
LS8vIGludGVybmFsbHkgYnkgdGhlIGNvZGUgZ2VuZXJhdG9yIGZvciBsb2NhbCB2YXJpYWJsZXMu
Ci1tZXNzYWdlIFRlc3RDb25mbGljdGluZ1N5bWJvbE5hbWVzIHsKLSAgbWVzc2FnZSBCdWlsZERl
c2NyaXB0b3JzIHt9Ci0gIG1lc3NhZ2UgVHlwZVRyYWl0cyB7fQotCi0gIG9wdGlvbmFsIGludDMy
IGlucHV0ID0gMTsKLSAgb3B0aW9uYWwgaW50MzIgb3V0cHV0ID0gMjsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxlbmd0aCA9IDM7Ci0gIHJlcGVhdGVkIGludDMyIGkgPSA0OwotICByZXBlYXRlZCBzdHJp
bmcgbmV3X2VsZW1lbnQgPSA1IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICBvcHRpb25hbCBpbnQz
MiB0b3RhbF9zaXplID0gNjsKLSAgb3B0aW9uYWwgaW50MzIgdGFnID0gNzsKLQotICBlbnVtIFRl
c3RFbnVtIHsgRk9PID0gMDsgfQotICBtZXNzYWdlIERhdGExIHsgcmVwZWF0ZWQgaW50MzIgZGF0
YSA9IDE7IH0KLSAgbWVzc2FnZSBEYXRhMiB7IHJlcGVhdGVkIFRlc3RFbnVtIGRhdGEgPSAxOyB9
Ci0gIG1lc3NhZ2UgRGF0YTMgeyByZXBlYXRlZCBzdHJpbmcgZGF0YSA9IDE7IH0KLSAgbWVzc2Fn
ZSBEYXRhNCB7IHJlcGVhdGVkIERhdGE0IGRhdGEgPSAxOyB9Ci0gIG1lc3NhZ2UgRGF0YTUgeyBy
ZXBlYXRlZCBzdHJpbmcgZGF0YSA9IDEgW2N0eXBlPVNUUklOR19QSUVDRV07IH0KLSAgbWVzc2Fn
ZSBEYXRhNiB7IHJlcGVhdGVkIHN0cmluZyBkYXRhID0gMSBbY3R5cGU9Q09SRF07IH0KLQotICBv
cHRpb25hbCBpbnQzMiBzb3VyY2UgPSA4OwotICBvcHRpb25hbCBpbnQzMiB2YWx1ZSA9IDk7Ci0g
IG9wdGlvbmFsIGludDMyIGZpbGUgPSAxMDsKLSAgb3B0aW9uYWwgaW50MzIgZnJvbSA9IDExOwot
ICBvcHRpb25hbCBpbnQzMiBoYW5kbGVfdW5pbnRlcnByZXRlZCA9IDEyOwotICByZXBlYXRlZCBp
bnQzMiBpbmRleCA9IDEzOwotICBvcHRpb25hbCBpbnQzMiBjb250cm9sbGVyID0gMTQ7Ci0gIG9w
dGlvbmFsIGludDMyIGFscmVhZHlfaGVyZSA9IDE1OwotCi0gIG9wdGlvbmFsIHVpbnQzMiB1aW50
MzIgPSAxNjsKLSAgb3B0aW9uYWwgdWludDY0IHVpbnQ2NCA9IDE3OwotICBvcHRpb25hbCBzdHJp
bmcgc3RyaW5nID0gMTg7Ci0gIG9wdGlvbmFsIGludDMyIG1lbXNldCA9IDE5OwotICBvcHRpb25h
bCBpbnQzMiBpbnQzMiA9IDIwOwotICBvcHRpb25hbCBpbnQ2NCBpbnQ2NCA9IDIxOwotCi0gIG9w
dGlvbmFsIHVpbnQzMiBjYWNoZWRfc2l6ZSA9IDIyOwotICBvcHRpb25hbCB1aW50MzIgZXh0ZW5z
aW9ucyA9IDIzOwotICBvcHRpb25hbCB1aW50MzIgYml0ID0gMjQ7Ci0gIG9wdGlvbmFsIHVpbnQz
MiBiaXRzID0gMjU7Ci0gIG9wdGlvbmFsIHVpbnQzMiBvZmZzZXRzID0gMjY7Ci0gIG9wdGlvbmFs
IHVpbnQzMiByZWZsZWN0aW9uID0gMjc7Ci0KLSAgbWVzc2FnZSBDb3JkIHt9Ci0gIG9wdGlvbmFs
IHN0cmluZyBzb21lX2NvcmQgPSAyOCBbY3R5cGU9Q09SRF07Ci0KLSAgbWVzc2FnZSBTdHJpbmdQ
aWVjZSB7fQotICBvcHRpb25hbCBzdHJpbmcgc29tZV9zdHJpbmdfcGllY2UgPSAyOSBbY3R5cGU9
U1RSSU5HX1BJRUNFXTsKLQotICAvLyBTb21lIGtleXdvcmRzLgotICBvcHRpb25hbCB1aW50MzIg
aW50ID0gMzA7Ci0gIG9wdGlvbmFsIHVpbnQzMiBmcmllbmQgPSAzMTsKLSAgb3B0aW9uYWwgdWlu
dDMyIGNsYXNzID0gMzc7Ci0gIG9wdGlvbmFsIHVpbnQzMiB0eXBlZGVjbCA9IDM5OwotICBvcHRp
b25hbCB1aW50MzIgYXV0byA9IDQwOwotCi0gIC8vIFRoZSBnZW5lcmF0b3IgdXNlZCB0byAjZGVm
aW5lIGEgbWFjcm8gY2FsbGVkICJETyIgaW5zaWRlIHRoZSAuY2MgZmlsZS4KLSAgbWVzc2FnZSBE
TyB7fQotICBvcHRpb25hbCBETyBkbyA9IDMyOwotCi0gIC8vIFNvbWUgdGVtcGxhdGUgcGFyYW1l
dGVyIG5hbWVzIGZvciBleHRlbnNpb25zLgotICBvcHRpb25hbCBpbnQzMiBmaWVsZF90eXBlID0g
MzM7Ci0gIG9wdGlvbmFsIGJvb2wgaXNfcGFja2VkID0gMzQ7Ci0KLSAgLy8gdGVzdCBjb25mbGlj
dGluZyByZWxlYXNlXyRuYW1lJC4gImxlbmd0aCIgYW5kICJkbyIgZmllbGQgaW4gdGhpcyBtZXNz
YWdlCi0gIC8vIG11c3QgcmVtYWluIHN0cmluZyBvciBtZXNzYWdlIGZpZWxkcyB0byBtYWtlIHRo
ZSB0ZXN0IHZhbGlkLgotICBvcHRpb25hbCBzdHJpbmcgcmVsZWFzZV9sZW5ndGggPSAzNTsKLSAg
Ly8gQSBtb3JlIGV4dHJlbWUgY2FzZSwgdGhlIGZpZWxkIG5hbWUgImRvIiBoZXJlIGlzIGEga2V5
d29yZCwgd2hpY2ggd2lsbCBiZQotICAvLyBlc2NhcGVkIHRvICJkb18iIGFscmVhZHkuIFRlc3Qg
dGhlcmUgaXMgbm8gY29uZmxpY3QgZXZlbiB3aXRoIGVzY2FwZWQgZmllbGQKLSAgLy8gbmFtZXMu
Ci0gIG9wdGlvbmFsIERPIHJlbGVhc2VfZG8gPSAzNjsKLQotICAvLyBGb3IgY2xhc2hpbmcgbG9j
YWwgdmFyaWFibGVzIGluIFNlcmlhbGl6ZSBhbmQgQnl0ZVNpemUgY2FsY3VsYXRpb24uCi0gIG9w
dGlvbmFsIHN0cmluZyB0YXJnZXQgPSAzODsKLQotICBleHRlbnNpb25zIDEwMDAgdG8gbWF4OyAg
Ly8gTk9fUFJPVE8zCi19Ci0KLW1lc3NhZ2UgVGVzdENvbmZsaWN0aW5nU3ltYm9sTmFtZXNFeHRl
bnNpb24geyAgICAgICAgICAgICAgICAgICAgLy8gTk9fUFJPVE8zCi0gIGV4dGVuZCBUZXN0Q29u
ZmxpY3RpbmdTeW1ib2xOYW1lcyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PX1BS
T1RPMwotICAgIHJlcGVhdGVkIGludDMyIHJlcGVhdGVkX2ludDMyX2V4dCA9IDIwNDIzNjM4IFtw
YWNrZWQ9dHJ1ZV07ICAvLyBOT19QUk9UTzMKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9fUFJPVE8zCi19ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE5PX1BST1RPMwotCi1tZXNzYWdlIFRlc3RDb25mbGljdGluZ0VudW1OYW1lcyB7ICAvLyBO
T19QUk9UTzMKLSAgZW51bSBOZXN0ZWRDb25mbGljdGluZ0VudW0geyAgICAgIC8vIE5PX1BST1RP
MwotICAgIGFuZCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9fUFJPVE8zCi0gICAg
Y2xhc3MgPSAyOyAgICAgICAgICAgICAgICAgICAgICAvLyBOT19QUk9UTzMKLSAgICBpbnQgPSAz
OyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PX1BST1RPMwotICAgIHR5cGVkZWYgPSA0OyAg
ICAgICAgICAgICAgICAgICAgLy8gTk9fUFJPVE8zCi0gICAgWE9SID0gNTsgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBOT19QUk9UTzMKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5PX1BST1RPMwotCi0gIG9wdGlvbmFsIE5lc3RlZENvbmZsaWN0aW5nRW51bSBjb25m
bGljdGluZ19lbnVtID0gMTsgIC8vIE5PX1BST1RPMwotfSAgLy8gTk9fUFJPVE8zCi0KLWVudW0g
Q29uZmxpY3RpbmdFbnVtIHsgIC8vIE5PX1BST1RPMwotICBOT1RfRVEgPSAxOyAgICAgICAgICAg
Ly8gTk9fUFJPVE8zCi0gIHZvbGF0aWxlID0gMjsgICAgICAgICAvLyBOT19QUk9UTzMKLSAgcmV0
dXJuID0gMzsgICAgICAgICAgIC8vIE5PX1BST1RPMwotfSAgLy8gTk9fUFJPVE8zCi0KLW1lc3Nh
Z2UgRHVtbXlNZXNzYWdlIHt9Ci0KLXNlcnZpY2UgVGVzdENvbmZsaWN0aW5nTWV0aG9kTmFtZXMg
ewotICBycGMgQ2xvc3VyZShEdW1teU1lc3NhZ2UpIHJldHVybnMgKER1bW15TWVzc2FnZSk7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF90ZXN0X2xh
cmdlX2VudW1fdmFsdWUucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2Nw
cF90ZXN0X2xhcmdlX2VudW1fdmFsdWUucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGNiNmNhMWIxNTEyYmFmOTY2OTEzNGNiN2QxNjQwYzYzNTFjYzZiMTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2NwcC9jcHBfdGVzdF9sYXJnZV9lbnVtX3ZhbHVlLnByb3RvCisrKyAvZGV2L251bGwK
QEAgLTEsNDMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8v
IFRlc3QgdGhhdCBwcm90bzIgY29tcGlsZXIgY2FuIGdlbmVyYXRlIHZhbGlkIGNvZGUgd2hlbiB0
aGUgZW51bSB2YWx1ZQotLy8gaXMgSU5UX01BWC4gTm90ZSB0aGF0IHRoaXMgaXMgYSBjb21waWxl
LW9ubHkgdGVzdCBhbmQgdGhpcyBwcm90byBpcyBub3QKLS8vIHJlZmVyZW5jZWQgaW4gYW55IEMr
KyBjb2RlLgotc3ludGF4ID0gInByb3RvMiI7Ci0KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7
Ci0KLW1lc3NhZ2UgVGVzdExhcmdlRW51bVZhbHVlIHsKLSAgZW51bSBFbnVtV2l0aExhcmdlVmFs
dWUgewotICAgIFZBTFVFXzEgPSAxOwotICAgIFZBTFVFX01BWCA9IDB4N2ZmZmZmZmY7Ci0gIH0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX3VuaXR0
ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfdW5pdHRlc3QuY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkODI5NDZkNjE0NTMyODkwMDA3MDAwNGVl
YzY4ZjlkYTZjMTc1N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfdW5pdHRlc3QuY2MKKysr
IC9kZXYvbnVsbApAQCAtMSwyMTM5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0v
LyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5q
YXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBUbyB0ZXN0IHRoZSBj
b2RlIGdlbmVyYXRvciwgd2UgYWN0dWFsbHkgdXNlIGl0IHRvIGdlbmVyYXRlIGNvZGUgZm9yCi0v
LyBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8sIHRoZW4gdGVzdCB0aGF0LiAgVGhpcyBt
ZWFucyB0aGF0IHdlCi0vLyBhcmUgYWN0dWFsbHkgdGVzdGluZyB0aGUgcGFyc2VyIGFuZCBvdGhl
ciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGF0IHRoZSBzYW1lCi0vLyB0aW1lLCBhbmQgdGhhdCBwcm9i
bGVtcyBpbiB0aGUgZ2VuZXJhdG9yIG1heSBzaG93IHVwIGFzIGNvbXBpbGUtdGltZSBlcnJvcnMK
LS8vIHJhdGhlciB0aGFuIHVuaXR0ZXN0IGZhaWx1cmVzLCB3aGljaCBtYXkgYmUgc3VycHJpc2lu
Zy4gIEhvd2V2ZXIsIHRlc3RpbmcKLS8vIHRoZSBvdXRwdXQgb2YgdGhlIEMrKyBnZW5lcmF0b3Ig
ZGlyZWN0bHkgd291bGQgYmUgdmVyeSBoYXJkLiAgV2UgY2FuJ3QgdmVyeQotLy8gd2VsbCBqdXN0
IGNoZWNrIGl0IGFnYWluc3QgZ29sZGVuIGZpbGVzIHNpbmNlIHRob3NlIGZpbGVzIHdvdWxkIGhh
dmUgdG8gYmUKLS8vIHVwZGF0ZWQgZm9yIGFueSBzbWFsbCBjaGFuZ2U7IHN1Y2ggYSB0ZXN0IHdv
dWxkIGJlIHZlcnkgYnJpdHRsZSBhbmQgcHJvYmFibHkKLS8vIG5vdCB2ZXJ5IGhlbHBmdWwuICBX
aGF0IHdlIHJlYWxseSB3YW50IHRvIHRlc3QgaXMgdGhhdCB0aGUgY29kZSBjb21waWxlcwotLy8g
Y29ycmVjdGx5IGFuZCBwcm9kdWNlcyB0aGUgaW50ZXJmYWNlcyB3ZSBleHBlY3QsIHdoaWNoIGlz
IHdoeSB0aGlzIHRlc3QKLS8vIGlzIHdyaXR0ZW4gdGhpcyB3YXkuCi0KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF91bml0dGVzdC5oPgotCi0jaW5jbHVkZSA8bWVt
b3J5PgotI2lmbmRlZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3NoYXJlZF9wdHIuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi91bml0dGVzdF9vcHRpbWl6ZV9mb3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
dW5pdHRlc3RfZW1iZWRfb3B0aW1pemVfZm9yLnBiLmg+Ci0jaWYgIWRlZmluZWQoR09PR0xFX1BS
T1RPQlVGX0NNQUtFX0JVSUxEKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikKLS8vIFdlIGV4Y2x1ZGUg
dGhpcyBsYXJnZSBwcm90byBmcm9tIGNtYWtlIGJ1aWxkIGJlY2F1c2UgaXQncyB0b28gbGFyZ2Ug
Zm9yCi0vLyB2aXN1YWwgc3R1ZGlvIHRvIGNvbXBpbGUgKHJlcG9ydCBpbnRlcm5hbCBlcnJvcnMp
LgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbm9ybW91c19kZXNjcmlwdG9y
LnBiLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fZ2Vu
ZXJpY19zZXJ2aWNlcy5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0X3V0aWwu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9oZWxwZXJzLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfdGVzdF9iYWRfaWRl
bnRpZmllcnMucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvaW1wb3J0
ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZHluYW1pY19t
ZXNzYWdlLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY2FsbGJhY2suaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0
dXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgot
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L3N0bF91dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsKLQotLy8gQ2FuJ3QgdXNlIGFu
IGFub255bW91cyBuYW1lc3BhY2UgaGVyZSBkdWUgdG8gYnJva2VubmVzcyBvZiBUcnU2NCBjb21w
aWxlci4KLW5hbWVzcGFjZSBjcHBfdW5pdHRlc3QgewotCi1uYW1lc3BhY2UgcHJvdG9idWZfdW5p
dHRlc3QgPSA6OnByb3RvYnVmX3VuaXR0ZXN0OwotCi0KLWNsYXNzIE1vY2tFcnJvckNvbGxlY3Rv
ciA6IHB1YmxpYyBNdWx0aUZpbGVFcnJvckNvbGxlY3RvciB7Ci0gcHVibGljOgotICBNb2NrRXJy
b3JDb2xsZWN0b3IoKSB7fQotICB+TW9ja0Vycm9yQ29sbGVjdG9yKCkge30KLQotICBzdHJpbmcg
dGV4dF87Ci0KLSAgLy8gaW1wbGVtZW50cyBFcnJvckNvbGxlY3RvciAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBBZGRFcnJvcihjb25zdCBzdHJpbmcmIGZp
bGVuYW1lLCBpbnQgbGluZSwgaW50IGNvbHVtbiwKLSAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmcmIG1lc3NhZ2UpIHsKLSAgICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5kKCZ0ZXh0Xywg
IiQwOiQxOiQyOiAkM1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVu
YW1lLCBsaW5lLCBjb2x1bW4sIG1lc3NhZ2UpOwotICB9Ci19OwotCi0jaWZuZGVmIFBST1RPQlVG
X1RFU1RfTk9fREVTQ1JJUFRPUlMKLQotLy8gVGVzdCB0aGF0IGdlbmVyYXRlZCBjb2RlIGhhcyBw
cm9wZXIgZGVzY3JpcHRvcnM6Ci0vLyBQYXJzZSBhIGRlc2NyaXB0b3IgZGlyZWN0bHkgKHVzaW5n
IGdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyOjpJbXBvcnRlcikgYW5kCi0vLyBjb21wYXJlIGl0
IHRvIHRoZSBvbmUgdGhhdCB3YXMgcHJvZHVjZWQgYnkgZ2VuZXJhdGVkIGNvZGUuCi1URVNUKEdl
bmVyYXRlZERlc2NyaXB0b3JUZXN0LCBJZGVudGljYWxEZXNjcmlwdG9ycykgewotICBjb25zdCBG
aWxlRGVzY3JpcHRvciogZ2VuZXJhdGVkX2Rlc2NyaXB0b3IgPQotICAgIHVuaXR0ZXN0OjpUZXN0
QWxsVHlwZXM6OmRlc2NyaXB0b3IoKS0+ZmlsZSgpOwotCi0gIC8vIFNldCB1cCB0aGUgSW1wb3J0
ZXIuCi0gIE1vY2tFcnJvckNvbGxlY3RvciBlcnJvcl9jb2xsZWN0b3I7Ci0gIERpc2tTb3VyY2VU
cmVlIHNvdXJjZV90cmVlOwotICBzb3VyY2VfdHJlZS5NYXBQYXRoKCIiLCBUZXN0U291cmNlRGly
KCkpOwotICBJbXBvcnRlciBpbXBvcnRlcigmc291cmNlX3RyZWUsICZlcnJvcl9jb2xsZWN0b3Ip
OwotCi0gIC8vIEltcG9ydCAocGFyc2UpIHVuaXR0ZXN0LnByb3RvLgotICBjb25zdCBGaWxlRGVz
Y3JpcHRvciogcGFyc2VkX2Rlc2NyaXB0b3IgPQotICAgIGltcG9ydGVyLkltcG9ydCgiZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0LnByb3RvIik7Ci0gIEVYUEVDVF9FUSgiIiwgZXJyb3JfY29sbGVj
dG9yLnRleHRfKTsKLSAgQVNTRVJUX1RSVUUocGFyc2VkX2Rlc2NyaXB0b3IgIT0gTlVMTCk7Ci0K
LSAgLy8gVGVzdCB0aGF0IGRlc2NyaXB0b3JzIGFyZSBnZW5lcmF0ZWQgY29ycmVjdGx5IGJ5IGNv
bnZlcnRpbmcgdGhlbSB0bwotICAvLyBGaWxlRGVzY3JpcHRvclByb3RvcyBhbmQgY29tcGFyaW5n
LgotICBGaWxlRGVzY3JpcHRvclByb3RvIGdlbmVyYXRlZF9kZWNzcmlwdG9yX3Byb3RvLCBwYXJz
ZWRfZGVzY3JpcHRvcl9wcm90bzsKLSAgZ2VuZXJhdGVkX2Rlc2NyaXB0b3ItPkNvcHlUbygmZ2Vu
ZXJhdGVkX2RlY3NyaXB0b3JfcHJvdG8pOwotICBwYXJzZWRfZGVzY3JpcHRvci0+Q29weVRvKCZw
YXJzZWRfZGVzY3JpcHRvcl9wcm90byk7Ci0KLSAgRVhQRUNUX0VRKHBhcnNlZF9kZXNjcmlwdG9y
X3Byb3RvLkRlYnVnU3RyaW5nKCksCi0gICAgICAgICAgICBnZW5lcmF0ZWRfZGVjc3JpcHRvcl9w
cm90by5EZWJ1Z1N0cmluZygpKTsKLX0KLQotI2lmICFkZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9D
TUFLRV9CVUlMRCkgJiYgIWRlZmluZWQoX01TQ19WRVIpCi0vLyBUZXN0IHRoYXQgZ2VuZXJhdGVk
IGNvZGUgaGFzIHByb3BlciBkZXNjcmlwdG9yczoKLS8vIFRvdWNoIGEgZGVzY3JpcHRvciBnZW5l
cmF0ZWQgZnJvbSBhbiBlbm9ybW91cyBtZXNzYWdlIHRvIHZhbGlkYXRlIHNwZWNpYWwKLS8vIGhh
bmRsaW5nIGZvciBkZXNjcmlwdG9ycyBleGNlZWRpbmcgdGhlIEMrKyBzdGFuZGFyZCdzIHJlY29t
bWVuZGVkIG1pbmltdW0KLS8vIGxpbWl0IGZvciBzdHJpbmcgbGl0ZXJhbCBzaXplCi1URVNUKEdl
bmVyYXRlZERlc2NyaXB0b3JUZXN0LCBFbm9ybW91c0Rlc2NyaXB0b3IpIHsKLSAgY29uc3QgRGVz
Y3JpcHRvciogZ2VuZXJhdGVkX2Rlc2NyaXB0b3IgPQotICAgIFRlc3RFbm9ybW91c0Rlc2NyaXB0
b3I6OmRlc2NyaXB0b3IoKTsKLQotICBFWFBFQ1RfVFJVRShnZW5lcmF0ZWRfZGVzY3JpcHRvciAh
PSBOVUxMKTsKLX0KLSNlbmRpZgotCi0jZW5kaWYgIC8vICFQUk9UT0JVRl9URVNUX05PX0RFU0NS
SVBUT1JTCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgRGVm
YXVsdHMpIHsKLSAgLy8gQ2hlY2sgdGhhdCBhbGwgZGVmYXVsdCB2YWx1ZXMgYXJlIHNldCBjb3Jy
ZWN0bHkgaW4gdGhlIGluaXRpYWwgbWVzc2FnZS4KLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBt
ZXNzYWdlOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RDbGVhcihtZXNzYWdlKTsKLQotICAvLyBNZXNz
YWdlcyBzaG91bGQgcmV0dXJuIHBvaW50ZXJzIHRvIGRlZmF1bHQgaW5zdGFuY2VzIHVudGlsIGZp
cnN0IHVzZS4KLSAgLy8gKFRoaXMgaXMgbm90IGNoZWNrZWQgYnkgRXhwZWN0Q2xlYXIoKSBzaW5j
ZSBpdCBpcyBub3QgYWN0dWFsbHkgdHJ1ZSBhZnRlcgotICAvLyB0aGUgZmllbGRzIGhhdmUgYmVl
biBzZXQgYW5kIHRoZW4gY2xlYXJlZC4pCi0gIEVYUEVDVF9FUSgmdW5pdHRlc3Q6OlRlc3RBbGxU
eXBlczo6T3B0aW9uYWxHcm91cDo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAgICAgICAgJm1l
c3NhZ2Uub3B0aW9uYWxncm91cCgpKTsKLSAgRVhQRUNUX0VRKCZ1bml0dGVzdDo6VGVzdEFsbFR5
cGVzOjpOZXN0ZWRNZXNzYWdlOjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmbWVz
c2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0VRKCZ1bml0dGVzdDo6
Rm9yZWlnbk1lc3NhZ2U6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZtZXNzYWdl
Lm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0VRKCZ1bml0dGVzdF9pbXBv
cnQ6OkltcG9ydE1lc3NhZ2U6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZtZXNz
YWdlLm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlKCkpOwotfQotCi0jaWZuZGVmIFBST1RPQlVGX1VT
RV9ETExTCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VUZXN0LCBJbnQzMlN0cmluZ0NvbnZlcnNpb24p
IHsKLSAgRVhQRUNUX0VRKCI5NzEiLCBJbnQzMlRvU3RyaW5nKDk3MSkpOwotICBFWFBFQ1RfRVEo
Iih+MHg3ZmZmZmZmZikiLCBJbnQzMlRvU3RyaW5nKGtpbnQzMm1pbikpOwotICBFWFBFQ1RfRVEo
IjIxNDc0ODM2NDciLCBJbnQzMlRvU3RyaW5nKGtpbnQzMm1heCkpOwotfQotCi1URVNUKEdlbmVy
YXRlZE1lc3NhZ2VUZXN0LCBJbnQ2NFN0cmluZ0NvbnZlcnNpb24pIHsKLSAgRVhQRUNUX0VRKCJH
T09HTEVfTE9OR0xPTkcoOTcxKSIsIEludDY0VG9TdHJpbmcoOTcxKSk7Ci0gIEVYUEVDVF9FUSgi
R09PR0xFX0xPTkdMT05HKC0yMTQ3NDgzNjQ4KSIsIEludDY0VG9TdHJpbmcoa2ludDMybWluKSk7
Ci0gIEVYUEVDVF9FUSgiR09PR0xFX0xPTkdMT05HKH4weDdmZmZmZmZmZmZmZmZmZmYpIiwgSW50
NjRUb1N0cmluZyhraW50NjRtaW4pKTsKLSAgRVhQRUNUX0VRKCJHT09HTEVfTE9OR0xPTkcoOTIy
MzM3MjAzNjg1NDc3NTgwNykiLCBJbnQ2NFRvU3RyaW5nKGtpbnQ2NG1heCkpOwotfQotI2VuZGlm
ICAvLyAhUFJPVE9CVUZfVVNFX0RMTFMKLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgRmxv
YXRpbmdQb2ludERlZmF1bHRzKSB7Ci0gIGNvbnN0IHVuaXR0ZXN0OjpUZXN0RXh0cmVtZURlZmF1
bHRWYWx1ZXMmIGV4dHJlbWVfZGVmYXVsdCA9Ci0gICAgICB1bml0dGVzdDo6VGVzdEV4dHJlbWVE
ZWZhdWx0VmFsdWVzOjpkZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgRVhQRUNUX0VRKDAuMGYsIGV4
dHJlbWVfZGVmYXVsdC56ZXJvX2Zsb2F0KCkpOwotICBFWFBFQ1RfRVEoMS4wZiwgZXh0cmVtZV9k
ZWZhdWx0Lm9uZV9mbG9hdCgpKTsKLSAgRVhQRUNUX0VRKDEuNWYsIGV4dHJlbWVfZGVmYXVsdC5z
bWFsbF9mbG9hdCgpKTsKLSAgRVhQRUNUX0VRKC0xLjBmLCBleHRyZW1lX2RlZmF1bHQubmVnYXRp
dmVfb25lX2Zsb2F0KCkpOwotICBFWFBFQ1RfRVEoLTEuNWYsIGV4dHJlbWVfZGVmYXVsdC5uZWdh
dGl2ZV9mbG9hdCgpKTsKLSAgRVhQRUNUX0VRKDIuMGU4ZiwgZXh0cmVtZV9kZWZhdWx0Lmxhcmdl
X2Zsb2F0KCkpOwotICBFWFBFQ1RfRVEoLThlLTI4ZiwgZXh0cmVtZV9kZWZhdWx0LnNtYWxsX25l
Z2F0aXZlX2Zsb2F0KCkpOwotICBFWFBFQ1RfRVEobnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKSwKLSAgICAgICAgICAgIGV4dHJlbWVfZGVmYXVsdC5pbmZfZG91YmxlKCkpOwotICBF
WFBFQ1RfRVEoLW51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCksCi0gICAgICAgICAg
ICBleHRyZW1lX2RlZmF1bHQubmVnX2luZl9kb3VibGUoKSk7Ci0gIEVYUEVDVF9UUlVFKGV4dHJl
bWVfZGVmYXVsdC5uYW5fZG91YmxlKCkgIT0gZXh0cmVtZV9kZWZhdWx0Lm5hbl9kb3VibGUoKSk7
Ci0gIEVYUEVDVF9FUShudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksCi0gICAgICAg
ICAgICBleHRyZW1lX2RlZmF1bHQuaW5mX2Zsb2F0KCkpOwotICBFWFBFQ1RfRVEoLW51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwKLSAgICAgICAgICAgIGV4dHJlbWVfZGVmYXVsdC5u
ZWdfaW5mX2Zsb2F0KCkpOwotICBFWFBFQ1RfVFJVRShleHRyZW1lX2RlZmF1bHQubmFuX2Zsb2F0
KCkgIT0gZXh0cmVtZV9kZWZhdWx0Lm5hbl9mbG9hdCgpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRN
ZXNzYWdlVGVzdCwgVHJpZ3JhcGgpIHsKLSAgY29uc3QgdW5pdHRlc3Q6OlRlc3RFeHRyZW1lRGVm
YXVsdFZhbHVlcyYgZXh0cmVtZV9kZWZhdWx0ID0KLSAgICAgIHVuaXR0ZXN0OjpUZXN0RXh0cmVt
ZURlZmF1bHRWYWx1ZXM6OmRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICBFWFBFQ1RfRVEoIj8gPyA/
PyA/PyA/Pz8gP1w/LyA/XD8tIiwgZXh0cmVtZV9kZWZhdWx0LmNwcF90cmlncmFwaCgpKTsKLX0K
LQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgRXh0cmVtZVNtYWxsSW50ZWdlckRlZmF1bHQp
IHsKLSAgY29uc3QgdW5pdHRlc3Q6OlRlc3RFeHRyZW1lRGVmYXVsdFZhbHVlcyYgZXh0cmVtZV9k
ZWZhdWx0ID0KLSAgICAgIHVuaXR0ZXN0OjpUZXN0RXh0cmVtZURlZmF1bHRWYWx1ZXM6OmRlZmF1
bHRfaW5zdGFuY2UoKTsKLSAgRVhQRUNUX0VRKH4weDdmZmZmZmZmLCBraW50MzJtaW4pOwotICBF
WFBFQ1RfRVEoR09PR0xFX0xPTkdMT05HKH4weDdmZmZmZmZmZmZmZmZmZmYpLCBraW50NjRtaW4p
OwotICBFWFBFQ1RfRVEoa2ludDMybWluLCBleHRyZW1lX2RlZmF1bHQucmVhbGx5X3NtYWxsX2lu
dDMyKCkpOwotICBFWFBFQ1RfRVEoa2ludDY0bWluLCBleHRyZW1lX2RlZmF1bHQucmVhbGx5X3Nt
YWxsX2ludDY0KCkpOwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VUZXN0LCBBY2Nlc3NvcnMp
IHsKLSAgLy8gU2V0IGV2ZXJ5IGZpZWxkIHRvIGEgdW5pcXVlIHZhbHVlIHRoZW4gZ28gYmFjayBh
bmQgY2hlY2sgYWxsIHRob3NlCi0gIC8vIHZhbHVlcy4KLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBl
cyBtZXNzYWdlOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1lc3NhZ2UpOwotICBUZXN0
VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KG1lc3NhZ2UpOwotCi0gIFRlc3RVdGlsOjpNb2RpZnlS
ZXBlYXRlZEZpZWxkcygmbWVzc2FnZSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RSZXBlYXRlZEZpZWxk
c01vZGlmaWVkKG1lc3NhZ2UpOwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VUZXN0LCBNdXRh
YmxlU3RyaW5nRGVmYXVsdCkgewotICAvLyBtdXRhYmxlX2ZvbygpIGZvciBhIHN0cmluZyBzaG91
bGQgcmV0dXJuIGEgc3RyaW5nIGluaXRpYWxpemVkIHRvIGl0cwotICAvLyBkZWZhdWx0IHZhbHVl
LgotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0KLSAgRVhQRUNUX0VRKCJoZWxs
byIsICptZXNzYWdlLm11dGFibGVfZGVmYXVsdF9zdHJpbmcoKSk7Ci0KLSAgLy8gTm90ZSB0aGF0
IHRoZSBmaXJzdCB0aW1lIHdlIGNhbGwgbXV0YWJsZV9mb28oKSwgd2UgZ2V0IGEgbmV3bHktYWxs
b2NhdGVkCi0gIC8vIHN0cmluZywgYnV0IGlmIHdlIGNsZWFyIGl0IGFuZCBjYWxsIGl0IGFnYWlu
LCB3ZSBnZXQgdGhlIHNhbWUgb2JqZWN0IGFnYWluLgotICAvLyBXZSBzaG91bGQgdmVyaWZ5IHRo
YXQgaXQgaGFzIGl0cyBkZWZhdWx0IHZhbHVlIGluIGJvdGggY2FzZXMuCi0gIG1lc3NhZ2Uuc2V0
X2RlZmF1bHRfc3RyaW5nKCJibGFoIik7Ci0gIG1lc3NhZ2UuQ2xlYXIoKTsKLQotICBFWFBFQ1Rf
RVEoImhlbGxvIiwgKm1lc3NhZ2UubXV0YWJsZV9kZWZhdWx0X3N0cmluZygpKTsKLX0KLQotVEVT
VChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgU3RyaW5nRGVmYXVsdHMpIHsKLSAgdW5pdHRlc3Q6OlRl
c3RFeHRyZW1lRGVmYXVsdFZhbHVlcyBtZXNzYWdlOwotICAvLyBDaGVjayBpZiAnXDAwMCcgY2Fu
IGJlIHVzZWQgaW4gZGVmYXVsdCBzdHJpbmcgdmFsdWUuCi0gIEVYUEVDVF9FUShzdHJpbmcoImhl
bFwwMDBsbyIsIDYpLCBtZXNzYWdlLnN0cmluZ193aXRoX3plcm8oKSk7Ci0gIEVYUEVDVF9FUShz
dHJpbmcoIndvclwwMDBsZCIsIDYpLCBtZXNzYWdlLmJ5dGVzX3dpdGhfemVybygpKTsKLX0KLQot
VEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgUmVsZWFzZVN0cmluZykgewotICAvLyBDaGVjayB0
aGF0IHJlbGVhc2VfZm9vKCkgc3RhcnRzIG91dCBOVUxMLCBhbmQgZ2l2ZXMgdXMgYSB2YWx1ZQot
ICAvLyB0aGF0IHdlIGNhbiBkZWxldGUgYWZ0ZXIgaXQncyBiZWVuIHNldC4KLSAgdW5pdHRlc3Q6
OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotCi0gIEVYUEVDVF9FUShOVUxMLCBtZXNzYWdlLnJlbGVh
c2VfZGVmYXVsdF9zdHJpbmcoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19kZWZhdWx0
X3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKCJoZWxsbyIsIG1lc3NhZ2UuZGVmYXVsdF9zdHJpbmco
KSk7Ci0KLSAgbWVzc2FnZS5zZXRfZGVmYXVsdF9zdHJpbmcoImJsYWgiKTsKLSAgRVhQRUNUX1RS
VUUobWVzc2FnZS5oYXNfZGVmYXVsdF9zdHJpbmcoKSk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNj
b3BlZF9wdHI8c3RyaW5nPiBzdHIobWVzc2FnZS5yZWxlYXNlX2RlZmF1bHRfc3RyaW5nKCkpOwot
ICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZGVmYXVsdF9zdHJpbmcoKSk7Ci0gIEFTU0VSVF9U
UlVFKHN0ciAhPSBOVUxMKTsKLSAgRVhQRUNUX0VRKCJibGFoIiwgKnN0cik7Ci0KLSAgRVhQRUNU
X0VRKE5VTEwsIG1lc3NhZ2UucmVsZWFzZV9kZWZhdWx0X3N0cmluZygpKTsKLSAgRVhQRUNUX0ZB
TFNFKG1lc3NhZ2UuaGFzX2RlZmF1bHRfc3RyaW5nKCkpOwotICBFWFBFQ1RfRVEoImhlbGxvIiwg
bWVzc2FnZS5kZWZhdWx0X3N0cmluZygpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVz
dCwgUmVsZWFzZU1lc3NhZ2UpIHsKLSAgLy8gQ2hlY2sgdGhhdCByZWxlYXNlX2ZvbygpIHN0YXJ0
cyBvdXQgTlVMTCwgYW5kIGdpdmVzIHVzIGEgdmFsdWUKLSAgLy8gdGhhdCB3ZSBjYW4gZGVsZXRl
IGFmdGVyIGl0J3MgYmVlbiBzZXQuCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsK
LQotICBFWFBFQ1RfRVEoTlVMTCwgbWVzc2FnZS5yZWxlYXNlX29wdGlvbmFsX25lc3RlZF9tZXNz
YWdlKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UoKSk7Ci0KLSAgbWVzc2FnZS5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCktPnNl
dF9iYigxKTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjx1bml0dGVzdDo6VGVzdEFs
bFR5cGVzOjpOZXN0ZWRNZXNzYWdlPiBuZXN0KAotICAgICAgbWVzc2FnZS5yZWxlYXNlX29wdGlv
bmFsX25lc3RlZF9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9u
YWxfbmVzdGVkX21lc3NhZ2UoKSk7Ci0gIEFTU0VSVF9UUlVFKG5lc3QgIT0gTlVMTCk7Ci0gIEVY
UEVDVF9FUSgxLCBuZXN0LT5iYigpKTsKLQotICBFWFBFQ1RfRVEoTlVMTCwgbWVzc2FnZS5yZWxl
YXNlX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5o
YXNfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2Fn
ZVRlc3QsIFNldEFsbG9jYXRlZFN0cmluZykgewotICAvLyBDaGVjayB0aGF0IHNldF9hbGxvY2F0
ZWRfZm9vKCkgd29ya3MgZm9yIHN0cmluZ3MuCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVz
c2FnZTsKLQotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfc3RyaW5nKCkpOwot
ICBjb25zdCBzdHJpbmcga0hlbGxvKCJoZWxsbyIpOwotICBtZXNzYWdlLnNldF9vcHRpb25hbF9z
dHJpbmcoa0hlbGxvKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0aW9uYWxfc3RyaW5n
KCkpOwotCi0gIG1lc3NhZ2Uuc2V0X2FsbG9jYXRlZF9vcHRpb25hbF9zdHJpbmcoTlVMTCk7Ci0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vcHRpb25hbF9zdHJpbmcoKSk7Ci0gIEVYUEVDVF9F
USgiIiwgbWVzc2FnZS5vcHRpb25hbF9zdHJpbmcoKSk7Ci0KLSAgbWVzc2FnZS5zZXRfYWxsb2Nh
dGVkX29wdGlvbmFsX3N0cmluZyhuZXcgc3RyaW5nKGtIZWxsbykpOwotICBFWFBFQ1RfVFJVRSht
ZXNzYWdlLmhhc19vcHRpb25hbF9zdHJpbmcoKSk7Ci0gIEVYUEVDVF9FUShrSGVsbG8sIG1lc3Nh
Z2Uub3B0aW9uYWxfc3RyaW5nKCkpOwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VUZXN0LCBT
ZXRBbGxvY2F0ZWRNZXNzYWdlKSB7Ci0gIC8vIENoZWNrIHRoYXQgc2V0X2FsbG9jYXRlZF9mb28o
KSBjYW4gYmUgY2FsbGVkIGluIGFsbCBjYXNlcy4KLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBt
ZXNzYWdlOwotCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSgpKTsKLQotICBtZXNzYWdlLm11dGFibGVfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKS0+
c2V0X2JiKDEpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSgpKTsKLQotICBtZXNzYWdlLnNldF9hbGxvY2F0ZWRfb3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UoTlVMTCk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSgpKTsKLSAgRVhQRUNUX0VRKCZ1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNz
YWdlOjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmbWVzc2FnZS5vcHRpb25hbF9u
ZXN0ZWRfbWVzc2FnZSgpKTsKLQotICBtZXNzYWdlLm11dGFibGVfb3B0aW9uYWxfbmVzdGVkX21l
c3NhZ2UoKS0+c2V0X2JiKDEpOwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNz
YWdlKiBuZXN0ID0KLSAgICAgIG1lc3NhZ2UucmVsZWFzZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2Fn
ZSgpOwotICBBU1NFUlRfVFJVRShuZXN0ICE9IE5VTEwpOwotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5oYXNfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKSk7Ci0KLSAgbWVzc2FnZS5zZXRfYWxsb2Nh
dGVkX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKG5lc3QpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lmhhc19vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2Uu
b3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKS5iYigpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNz
YWdlVGVzdCwgQ2xlYXIpIHsKLSAgLy8gU2V0IGV2ZXJ5IGZpZWxkIHRvIGEgdW5pcXVlIHZhbHVl
LCBjbGVhciB0aGUgbWVzc2FnZSwgdGhlbiBjaGVjayB0aGF0Ci0gIC8vIGl0IGlzIGNsZWFyZWQu
Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsKLQotICBUZXN0VXRpbDo6U2V0QWxs
RmllbGRzKCZtZXNzYWdlKTsKLSAgbWVzc2FnZS5DbGVhcigpOwotICBUZXN0VXRpbDo6RXhwZWN0
Q2xlYXIobWVzc2FnZSk7Ci0KLSAgLy8gVW5saWtlIHdpdGggdGhlIGRlZmF1bHRzIHRlc3QsIHdl
IGRvIE5PVCBleHBlY3QgdGhhdCByZXF1ZXN0aW5nIGVtYmVkZGVkCi0gIC8vIG1lc3NhZ2VzIHdp
bGwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZGVmYXVsdCBpbnN0YW5jZS4gIEluc3RlYWQsIHRo
ZXkKLSAgLy8gc2hvdWxkIHJldHVybiB0aGUgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCB3aGVu
IG11dGFibGVfYmxhaCgpIHdhcwotICAvLyBjYWxsZWQuCi0gIEVYUEVDVF9ORSgmdW5pdHRlc3Q6
OlRlc3RBbGxUeXBlczo6T3B0aW9uYWxHcm91cDo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAg
ICAgICAgJm1lc3NhZ2Uub3B0aW9uYWxncm91cCgpKTsKLSAgRVhQRUNUX05FKCZ1bml0dGVzdDo6
VGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlOjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAg
ICAgICAmbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpKTsKLSAgRVhQRUNUX05FKCZ1
bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2U6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAg
ICZtZXNzYWdlLm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSgpKTsKLSAgRVhQRUNUX05FKCZ1bml0
dGVzdF9pbXBvcnQ6OkltcG9ydE1lc3NhZ2U6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAg
ICAgICZtZXNzYWdlLm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlKCkpOwotfQotCi1URVNUKEdlbmVy
YXRlZE1lc3NhZ2VUZXN0LCBFbWJlZGRlZE51bGxzSW5CeXRlc0NoYXJTdGFyKSB7Ci0gIHVuaXR0
ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsKLQotICBjb25zdCBjaGFyKiB2YWx1ZSA9ICJcMGxh
bGFsYVwwXDAiOwotICBtZXNzYWdlLnNldF9vcHRpb25hbF9ieXRlcyh2YWx1ZSwgOSk7Ci0gIEFT
U0VSVF9FUSg5LCBtZXNzYWdlLm9wdGlvbmFsX2J5dGVzKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VR
KDAsIG1lbWNtcCh2YWx1ZSwgbWVzc2FnZS5vcHRpb25hbF9ieXRlcygpLmRhdGEoKSwgOSkpOwot
Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2J5dGVzKHZhbHVlLCA5KTsKLSAgQVNTRVJUX0VRKDks
IG1lc3NhZ2UucmVwZWF0ZWRfYnl0ZXMoMCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lbWNt
cCh2YWx1ZSwgbWVzc2FnZS5yZXBlYXRlZF9ieXRlcygwKS5kYXRhKCksIDkpKTsKLX0KLQotVEVT
VChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgQ2xlYXJPbmVGaWVsZCkgewotICAvLyBTZXQgZXZlcnkg
ZmllbGQgdG8gYSB1bmlxdWUgdmFsdWUsIHRoZW4gY2xlYXIgb25lIHZhbHVlIGFuZCBpbnN1cmUg
dGhhdAotICAvLyBvbmx5IHRoYXQgb25lIHZhbHVlIGlzIGNsZWFyZWQuCi0gIHVuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXMgbWVzc2FnZTsKLQotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtZXNzYWdl
KTsKLSAgaW50NjQgb3JpZ2luYWxfdmFsdWUgPSBtZXNzYWdlLm9wdGlvbmFsX2ludDY0KCk7Ci0K
LSAgLy8gQ2xlYXIgdGhlIGZpZWxkIGFuZCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAgYXMgY2xlYXJl
ZC4KLSAgbWVzc2FnZS5jbGVhcl9vcHRpb25hbF9pbnQ2NCgpOwotICBFWFBFQ1RfRkFMU0UobWVz
c2FnZS5oYXNfb3B0aW9uYWxfaW50NjQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm9wdGlv
bmFsX2ludDY0KCkpOwotCi0gIC8vIE90aGVyIGFkamFjZW50IGZpZWxkcyBzaG91bGQgbm90IGJl
IGNsZWFyZWQuCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX2ludDMyKCkpOwot
ICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF91aW50MzIoKSk7Ci0KLSAgLy8gTWFr
ZSBzdXJlIGlmIHdlIHNldCBpdCBhZ2FpbiwgdGhlbiBhbGwgZmllbGRzIGFyZSBzZXQuCi0gIG1l
c3NhZ2Uuc2V0X29wdGlvbmFsX2ludDY0KG9yaWdpbmFsX3ZhbHVlKTsKLSAgVGVzdFV0aWw6OkV4
cGVjdEFsbEZpZWxkc1NldChtZXNzYWdlKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVz
dCwgU3RyaW5nQ2hhclN0YXJMZW5ndGgpIHsKLSAgLy8gVmVyaWZ5IHRoYXQgd2UgY2FuIHVzZSBh
IGNoYXIqLGxlbmd0aCB0byBzZXQgb25lIG9mIHRoZSBzdHJpbmcgZmllbGRzLgotICB1bml0dGVz
dDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX3N0cmluZygi
YWJjZGVmIiwgMyk7Ci0gIEVYUEVDVF9FUSgiYWJjIiwgbWVzc2FnZS5vcHRpb25hbF9zdHJpbmco
KSk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgd2UgY2FuIHVzZSBhIGNoYXIqLGxlbmd0aCB0byBhZGQg
dG8gYSByZXBlYXRlZCBzdHJpbmcgZmllbGQuCi0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX3N0cmlu
ZygiYWJjZGVmIiwgMyk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZ19z
aXplKCkpOwotICBFWFBFQ1RfRVEoImFiYyIsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nKDApKTsK
LQotICAvLyBWZXJpZnkgdGhhdCB3ZSBjYW4gdXNlIGEgY2hhciosbGVuZ3RoIHRvIHNldCBhIHJl
cGVhdGVkIHN0cmluZyBmaWVsZC4KLSAgbWVzc2FnZS5zZXRfcmVwZWF0ZWRfc3RyaW5nKDAsICJ3
eHl6IiwgMik7Ci0gIEVYUEVDVF9FUSgid3giLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZygwKSk7
Ci19Ci0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgQ29weUZyb20pIHsKLSAgdW5pdHRl
c3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0KLSAgVGVzdFV0aWw6OlNldEFs
bEZpZWxkcygmbWVzc2FnZTEpOwotICBtZXNzYWdlMi5Db3B5RnJvbShtZXNzYWdlMSk7Ci0gIFRl
c3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZTIpOwotCi0gIC8vIENvcHlpbmcgZnJv
bSBzZWxmIHNob3VsZCBiZSBhIG5vLW9wLgotICBtZXNzYWdlMi5Db3B5RnJvbShtZXNzYWdlMik7
Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZTIpOwotfQotCi0KLVRFU1Qo
R2VuZXJhdGVkTWVzc2FnZVRlc3QsIFN3YXBXaXRoRW1wdHkpIHsKLSAgdW5pdHRlc3Q6OlRlc3RB
bGxUeXBlcyBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1l
c3NhZ2UxKTsKLQotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KG1lc3NhZ2UxKTsKLSAg
VGVzdFV0aWw6OkV4cGVjdENsZWFyKG1lc3NhZ2UyKTsKLSAgbWVzc2FnZTEuU3dhcCgmbWVzc2Fn
ZTIpOwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KG1lc3NhZ2UyKTsKLSAgVGVzdFV0
aWw6OkV4cGVjdENsZWFyKG1lc3NhZ2UxKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVz
dCwgU3dhcFdpdGhTZWxmKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsKLSAg
VGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbWVzc2FnZSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxG
aWVsZHNTZXQobWVzc2FnZSk7Ci0gIG1lc3NhZ2UuU3dhcCgmbWVzc2FnZSk7Ci0gIFRlc3RVdGls
OjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2Fn
ZVRlc3QsIFN3YXBXaXRoT3RoZXIpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdl
MSwgbWVzc2FnZTI7Ci0KLSAgbWVzc2FnZTEuc2V0X29wdGlvbmFsX2ludDMyKDEyMyk7Ci0gIG1l
c3NhZ2UxLnNldF9vcHRpb25hbF9zdHJpbmcoImFiYyIpOwotICBtZXNzYWdlMS5tdXRhYmxlX29w
dGlvbmFsX25lc3RlZF9tZXNzYWdlKCktPnNldF9iYigxKTsKLSAgbWVzc2FnZTEuc2V0X29wdGlv
bmFsX25lc3RlZF9lbnVtKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkZPTyk7Ci0gIG1lc3NhZ2Ux
LmFkZF9yZXBlYXRlZF9pbnQzMigxKTsKLSAgbWVzc2FnZTEuYWRkX3JlcGVhdGVkX2ludDMyKDIp
OwotICBtZXNzYWdlMS5hZGRfcmVwZWF0ZWRfc3RyaW5nKCJhIik7Ci0gIG1lc3NhZ2UxLmFkZF9y
ZXBlYXRlZF9zdHJpbmcoImIiKTsKLSAgbWVzc2FnZTEuYWRkX3JlcGVhdGVkX25lc3RlZF9tZXNz
YWdlKCktPnNldF9iYig3KTsKLSAgbWVzc2FnZTEuYWRkX3JlcGVhdGVkX25lc3RlZF9tZXNzYWdl
KCktPnNldF9iYig4KTsKLSAgbWVzc2FnZTEuYWRkX3JlcGVhdGVkX25lc3RlZF9lbnVtKHVuaXR0
ZXN0OjpUZXN0QWxsVHlwZXM6OkZPTyk7Ci0gIG1lc3NhZ2UxLmFkZF9yZXBlYXRlZF9uZXN0ZWRf
ZW51bSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpCQVIpOwotCi0gIG1lc3NhZ2UyLnNldF9vcHRp
b25hbF9pbnQzMig0NTYpOwotICBtZXNzYWdlMi5zZXRfb3B0aW9uYWxfc3RyaW5nKCJkZWYiKTsK
LSAgbWVzc2FnZTIubXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpLT5zZXRfYmIoMik7
Ci0gIG1lc3NhZ2UyLnNldF9vcHRpb25hbF9uZXN0ZWRfZW51bSh1bml0dGVzdDo6VGVzdEFsbFR5
cGVzOjpCQVIpOwotICBtZXNzYWdlMi5hZGRfcmVwZWF0ZWRfaW50MzIoMyk7Ci0gIG1lc3NhZ2Uy
LmFkZF9yZXBlYXRlZF9zdHJpbmcoImMiKTsKLSAgbWVzc2FnZTIuYWRkX3JlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlKCktPnNldF9iYig5KTsKLSAgbWVzc2FnZTIuYWRkX3JlcGVhdGVkX25lc3RlZF9l
bnVtKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkJBWik7Ci0KLSAgbWVzc2FnZTEuU3dhcCgmbWVz
c2FnZTIpOwotCi0gIEVYUEVDVF9FUSg0NTYsIG1lc3NhZ2UxLm9wdGlvbmFsX2ludDMyKCkpOwot
ICBFWFBFQ1RfRVEoImRlZiIsIG1lc3NhZ2UxLm9wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNU
X0VRKDIsIG1lc3NhZ2UxLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCkuYmIoKSk7Ci0gIEVYUEVD
VF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpCQVIsIG1lc3NhZ2UxLm9wdGlvbmFsX25lc3Rl
ZF9lbnVtKCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZTEucmVwZWF0ZWRfaW50MzJfc2l6ZSgp
KTsKLSAgRVhQRUNUX0VRKDMsIG1lc3NhZ2UxLnJlcGVhdGVkX2ludDMyKDApKTsKLSAgQVNTRVJU
X0VRKDEsIG1lc3NhZ2UxLnJlcGVhdGVkX3N0cmluZ19zaXplKCkpOwotICBFWFBFQ1RfRVEoImMi
LCBtZXNzYWdlMS5yZXBlYXRlZF9zdHJpbmcoMCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZTEu
cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Vfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDksIG1lc3NhZ2Ux
LnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKDApLmJiKCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2Fn
ZTEucmVwZWF0ZWRfbmVzdGVkX2VudW1fc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXM6OkJBWiwgbWVzc2FnZTEucmVwZWF0ZWRfbmVzdGVkX2VudW0oMCkpOwotCi0g
IEVYUEVDVF9FUSgxMjMsIG1lc3NhZ2UyLm9wdGlvbmFsX2ludDMyKCkpOwotICBFWFBFQ1RfRVEo
ImFiYyIsIG1lc3NhZ2UyLm9wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3Nh
Z2UyLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCkuYmIoKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVz
dDo6VGVzdEFsbFR5cGVzOjpGT08sIG1lc3NhZ2UyLm9wdGlvbmFsX25lc3RlZF9lbnVtKCkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZTIucmVwZWF0ZWRfaW50MzJfc2l6ZSgpKTsKLSAgRVhQRUNU
X0VRKDEsIG1lc3NhZ2UyLnJlcGVhdGVkX2ludDMyKDApKTsKLSAgRVhQRUNUX0VRKDIsIG1lc3Nh
Z2UyLnJlcGVhdGVkX2ludDMyKDEpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UyLnJlcGVhdGVk
X3N0cmluZ19zaXplKCkpOwotICBFWFBFQ1RfRVEoImEiLCBtZXNzYWdlMi5yZXBlYXRlZF9zdHJp
bmcoMCkpOwotICBFWFBFQ1RfRVEoImIiLCBtZXNzYWdlMi5yZXBlYXRlZF9zdHJpbmcoMSkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZTIucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Vfc2l6ZSgpKTsK
LSAgRVhQRUNUX0VRKDcsIG1lc3NhZ2UyLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKDApLmJiKCkp
OwotICBFWFBFQ1RfRVEoOCwgbWVzc2FnZTIucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UoMSkuYmIo
KSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlMi5yZXBlYXRlZF9uZXN0ZWRfZW51bV9zaXplKCkp
OwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6Rk9PLCBtZXNzYWdlMi5yZXBl
YXRlZF9uZXN0ZWRfZW51bSgwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVz
OjpCQVIsIG1lc3NhZ2UyLnJlcGVhdGVkX25lc3RlZF9lbnVtKDEpKTsKLX0KLQotVEVTVChHZW5l
cmF0ZWRNZXNzYWdlVGVzdCwgQ29weUNvbnN0cnVjdG9yKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxs
VHlwZXMgbWVzc2FnZTE7Ci0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1lc3NhZ2UxKTsKLQot
ICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2UyKG1lc3NhZ2UxKTsKLSAgVGVzdFV0aWw6
OkV4cGVjdEFsbEZpZWxkc1NldChtZXNzYWdlMik7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2Fn
ZVRlc3QsIENvcHlBc3NpZ25tZW50T3BlcmF0b3IpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBl
cyBtZXNzYWdlMTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbWVzc2FnZTEpOwotCi0gIHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTI7Ci0gIG1lc3NhZ2UyID0gbWVzc2FnZTE7Ci0g
IFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZTIpOwotCi0gIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHNlbGYtYXNzaWdubWVudCBkb2VzIHNvbWV0aGluZyBzYW5lLgotICBtZXNzYWdlMi5v
cGVyYXRvcj0obWVzc2FnZTIpOwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KG1lc3Nh
Z2UyKTsKLX0KLQotI2lmICFkZWZpbmVkKFBST1RPQlVGX1RFU1RfTk9fREVTQ1JJUFRPUlMpIHx8
IFwKLSAgICAhZGVmaW5lZChHT09HTEVfUFJPVE9CVUZfTk9fUlRUSSkKLVRFU1QoR2VuZXJhdGVk
TWVzc2FnZVRlc3QsIFVwY2FzdENvcHlGcm9tKSB7Ci0gIC8vIFRlc3QgdGhlIENvcHlGcm9tIG1l
dGhvZCB0aGF0IHRha2VzIGluIHRoZSBnZW5lcmljIGNvbnN0IE1lc3NhZ2UmCi0gIC8vIHBhcmFt
ZXRlci4KLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0KLSAg
VGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbWVzc2FnZTEpOwotCi0gIGNvbnN0IE1lc3NhZ2UqIHNv
dXJjZSA9IGltcGxpY2l0X2Nhc3Q8Y29uc3QgTWVzc2FnZSo+KCZtZXNzYWdlMSk7Ci0gIG1lc3Nh
Z2UyLkNvcHlGcm9tKCpzb3VyY2UpOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQo
bWVzc2FnZTIpOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgUFJPVE9CVUZfVEVTVF9OT19ERVNDUklQ
VE9SUwotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VUZXN0LCBEeW5hbWljTWVzc2FnZUNvcHlGcm9t
KSB7Ci0gIC8vIFRlc3QgY29weWluZyBmcm9tIGEgRHluYW1pY01lc3NhZ2UsIHdoaWNoIG11c3Qg
ZmFsbCBiYWNrIHRvIHVzaW5nCi0gIC8vIHJlZmxlY3Rpb24uCi0gIHVuaXR0ZXN0OjpUZXN0QWxs
VHlwZXMgbWVzc2FnZTI7Ci0KLSAgLy8gQ29uc3RydWN0IGEgbmV3IHZlcnNpb24gb2YgdGhlIGR5
bmFtaWMgbWVzc2FnZSB2aWEgdGhlIGZhY3RvcnkuCi0gIER5bmFtaWNNZXNzYWdlRmFjdG9yeSBm
YWN0b3J5OwotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IG1lc3NhZ2Ux
OwotICBtZXNzYWdlMS5yZXNldChmYWN0b3J5LkdldFByb3RvdHlwZSgKLSAgICAgICAgICAgICAg
ICAgICAgIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRlc2NyaXB0b3IoKSktPk5ldygpKTsKLQot
ICBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3RlciByZWZsZWN0aW9uX3Rlc3RlcigKLSAgICB1bml0
dGVzdDo6VGVzdEFsbFR5cGVzOjpkZXNjcmlwdG9yKCkpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5T
ZXRBbGxGaWVsZHNWaWFSZWZsZWN0aW9uKG1lc3NhZ2UxLmdldCgpKTsKLQotICBtZXNzYWdlMi5D
b3B5RnJvbSgqbWVzc2FnZTEpOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQobWVz
c2FnZTIpOwotfQotCi0jZW5kaWYgIC8vICFQUk9UT0JVRl9URVNUX05PX0RFU0NSSVBUT1JTCi0K
LVRFU1QoR2VuZXJhdGVkTWVzc2FnZVRlc3QsIE5vbkVtcHR5TWVyZ2VGcm9tKSB7Ci0gIC8vIFRl
c3QgbWVyZ2luZyB3aXRoIGEgbm9uLWVtcHR5IG1lc3NhZ2UuIENvZGUgaXMgYSBtb2RpZmllZCBm
b3JtCi0gIC8vIG9mIHRoYXQgZm91bmQgaW4gZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3Bz
X3VuaXR0ZXN0LmNjLgotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2UxLCBtZXNzYWdl
MjsKLQotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtZXNzYWdlMSk7Ci0KLSAgLy8gVGhpcyBm
aWVsZCB3aWxsIHRlc3QgbWVyZ2luZyBpbnRvIGFuIGVtcHR5IHNwb3QuCi0gIG1lc3NhZ2UyLnNl
dF9vcHRpb25hbF9pbnQzMihtZXNzYWdlMS5vcHRpb25hbF9pbnQzMigpKTsKLSAgbWVzc2FnZTEu
Y2xlYXJfb3B0aW9uYWxfaW50MzIoKTsKLQotICAvLyBUaGlzIHRlc3RzIG92ZXJ3cml0aW5nLgot
ICBtZXNzYWdlMi5zZXRfb3B0aW9uYWxfc3RyaW5nKG1lc3NhZ2UxLm9wdGlvbmFsX3N0cmluZygp
KTsKLSAgbWVzc2FnZTEuc2V0X29wdGlvbmFsX3N0cmluZygic29tZXRoaW5nIGVsc2UiKTsKLQot
ICAvLyBUaGlzIHRlc3RzIGNvbmNhdGVuYXRpbmcuCi0gIG1lc3NhZ2UyLmFkZF9yZXBlYXRlZF9p
bnQzMihtZXNzYWdlMS5yZXBlYXRlZF9pbnQzMigxKSk7Ci0gIGludDMyIGkgPSBtZXNzYWdlMS5y
ZXBlYXRlZF9pbnQzMigwKTsKLSAgbWVzc2FnZTEuY2xlYXJfcmVwZWF0ZWRfaW50MzIoKTsKLSAg
bWVzc2FnZTEuYWRkX3JlcGVhdGVkX2ludDMyKGkpOwotCi0gIG1lc3NhZ2UxLk1lcmdlRnJvbSht
ZXNzYWdlMik7Ci0KLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEZpZWxkc1NldChtZXNzYWdlMSk7Ci19
Ci0KLSNpZiAhZGVmaW5lZChQUk9UT0JVRl9URVNUX05PX0RFU0NSSVBUT1JTKSB8fCBcCi0gICAg
IWRlZmluZWQoR09PR0xFX1BST1RPQlVGX05PX1JUVEkpCi0jaWZkZWYgUFJPVE9CVUZfSEFTX0RF
QVRIX1RFU1QKLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgTWVyZ2VGcm9tU2VsZikgewot
ICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIEVYUEVDVF9ERUFUSChtZXNzYWdl
Lk1lcmdlRnJvbShtZXNzYWdlKSwgIkNoZWNrIGZhaWxlZDouKnBiWy5dY2MiKTsKLSAgRVhQRUNU
X0RFQVRIKG1lc3NhZ2UuTWVyZ2VGcm9tKGltcGxpY2l0X2Nhc3Q8Y29uc3QgTWVzc2FnZSY+KG1l
c3NhZ2UpKSwKLSAgICAgICAgICAgICAgICJDaGVjayBmYWlsZWQ6LipwYlsuXWNjIik7Ci19Ci0K
LSNlbmRpZiAgLy8gUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLSNlbmRpZiAgLy8gIVBST1RPQlVG
X1RFU1RfTk9fREVTQ1JJUFRPUlMgfHwgIUdPT0dMRV9QUk9UT0JVRl9OT19SVFRJCi0KLS8vIFRl
c3QgdGhlIGdlbmVyYXRlZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KCksCi1URVNU
KEdlbmVyYXRlZE1lc3NhZ2VUZXN0LCBTZXJpYWxpemF0aW9uVG9BcnJheSkgewotICB1bml0dGVz
dDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLSAgc3RyaW5nIGRhdGE7Ci0gIFRl
c3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1lc3NhZ2UxKTsKLSAgaW50IHNpemUgPSBtZXNzYWdlMS5C
eXRlU2l6ZSgpOwotICBkYXRhLnJlc2l6ZShzaXplKTsKLSAgdWludDgqIHN0YXJ0ID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OCo+KHN0cmluZ19hc19hcnJheSgmZGF0YSkpOwotICB1aW50OCogZW5k
ID0gbWVzc2FnZTEuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheShzdGFydCk7Ci0gIEVY
UEVDVF9FUShzaXplLCBlbmQgLSBzdGFydCk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UyLlBhcnNl
RnJvbVN0cmluZyhkYXRhKSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2Fn
ZTIpOwotCi19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2FnZVRlc3QsIFBhY2tlZEZpZWxkc1Nlcmlh
bGl6YXRpb25Ub0FycmF5KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UGFja2VkVHlwZXMgcGFja2VkX21l
c3NhZ2UxLCBwYWNrZWRfbWVzc2FnZTI7Ci0gIHN0cmluZyBwYWNrZWRfZGF0YTsKLSAgVGVzdFV0
aWw6OlNldFBhY2tlZEZpZWxkcygmcGFja2VkX21lc3NhZ2UxKTsKLSAgaW50IHBhY2tlZF9zaXpl
ID0gcGFja2VkX21lc3NhZ2UxLkJ5dGVTaXplKCk7Ci0gIHBhY2tlZF9kYXRhLnJlc2l6ZShwYWNr
ZWRfc2l6ZSk7Ci0gIHVpbnQ4KiBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihzdHJp
bmdfYXNfYXJyYXkoJnBhY2tlZF9kYXRhKSk7Ci0gIHVpbnQ4KiBlbmQgPSBwYWNrZWRfbWVzc2Fn
ZTEuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheShzdGFydCk7Ci0gIEVYUEVDVF9FUShw
YWNrZWRfc2l6ZSwgZW5kIC0gc3RhcnQpOwotICBFWFBFQ1RfVFJVRShwYWNrZWRfbWVzc2FnZTIu
UGFyc2VGcm9tU3RyaW5nKHBhY2tlZF9kYXRhKSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RQYWNrZWRG
aWVsZHNTZXQocGFja2VkX21lc3NhZ2UyKTsKLX0KLQotLy8gVGVzdCB0aGUgZ2VuZXJhdGVkIFNl
cmlhbGl6ZVdpdGhDYWNoZWRTaXplcygpIGJ5IGZvcmNpbmcgdGhlIGJ1ZmZlciB0byB3cml0ZQot
Ly8gb25lIGJ5dGUgYXQgYSB0aW1lLgotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgU2VyaWFs
aXphdGlvblRvU3RyZWFtKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTEsIG1l
c3NhZ2UyOwotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtZXNzYWdlMSk7Ci0gIGludCBzaXpl
ID0gbWVzc2FnZTEuQnl0ZVNpemUoKTsKLSAgc3RyaW5nIGRhdGE7Ci0gIGRhdGEucmVzaXplKHNp
emUpOwotICB7Ci0gICAgLy8gQWxsb3cgdGhlIG91dHB1dCBzdHJlYW0gdG8gYnVmZmVyIG9ubHkg
b25lIGJ5dGUgYXQgYSB0aW1lLgotICAgIGlvOjpBcnJheU91dHB1dFN0cmVhbSBhcnJheV9zdHJl
YW0oc3RyaW5nX2FzX2FycmF5KCZkYXRhKSwgc2l6ZSwgMSk7Ci0gICAgaW86OkNvZGVkT3V0cHV0
U3RyZWFtIG91dHB1dF9zdHJlYW0oJmFycmF5X3N0cmVhbSk7Ci0gICAgbWVzc2FnZTEuU2VyaWFs
aXplV2l0aENhY2hlZFNpemVzKCZvdXRwdXRfc3RyZWFtKTsKLSAgICBFWFBFQ1RfRkFMU0Uob3V0
cHV0X3N0cmVhbS5IYWRFcnJvcigpKTsKLSAgICBFWFBFQ1RfRVEoc2l6ZSwgb3V0cHV0X3N0cmVh
bS5CeXRlQ291bnQoKSk7Ci0gIH0KLSAgRVhQRUNUX1RSVUUobWVzc2FnZTIuUGFyc2VGcm9tU3Ry
aW5nKGRhdGEpKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEZpZWxkc1NldChtZXNzYWdlMik7Ci0K
LX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgUGFja2VkRmllbGRzU2VyaWFsaXphdGlv
blRvU3RyZWFtKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UGFja2VkVHlwZXMgbWVzc2FnZTEsIG1lc3Nh
Z2UyOwotICBUZXN0VXRpbDo6U2V0UGFja2VkRmllbGRzKCZtZXNzYWdlMSk7Ci0gIGludCBzaXpl
ID0gbWVzc2FnZTEuQnl0ZVNpemUoKTsKLSAgc3RyaW5nIGRhdGE7Ci0gIGRhdGEucmVzaXplKHNp
emUpOwotICB7Ci0gICAgLy8gQWxsb3cgdGhlIG91dHB1dCBzdHJlYW0gdG8gYnVmZmVyIG9ubHkg
b25lIGJ5dGUgYXQgYSB0aW1lLgotICAgIGlvOjpBcnJheU91dHB1dFN0cmVhbSBhcnJheV9zdHJl
YW0oc3RyaW5nX2FzX2FycmF5KCZkYXRhKSwgc2l6ZSwgMSk7Ci0gICAgaW86OkNvZGVkT3V0cHV0
U3RyZWFtIG91dHB1dF9zdHJlYW0oJmFycmF5X3N0cmVhbSk7Ci0gICAgbWVzc2FnZTEuU2VyaWFs
aXplV2l0aENhY2hlZFNpemVzKCZvdXRwdXRfc3RyZWFtKTsKLSAgICBFWFBFQ1RfRkFMU0Uob3V0
cHV0X3N0cmVhbS5IYWRFcnJvcigpKTsKLSAgICBFWFBFQ1RfRVEoc2l6ZSwgb3V0cHV0X3N0cmVh
bS5CeXRlQ291bnQoKSk7Ci0gIH0KLSAgRVhQRUNUX1RSVUUobWVzc2FnZTIuUGFyc2VGcm9tU3Ry
aW5nKGRhdGEpKTsKLSAgVGVzdFV0aWw6OkV4cGVjdFBhY2tlZEZpZWxkc1NldChtZXNzYWdlMik7
Ci19Ci0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgUmVxdWlyZWQpIHsKLSAgLy8gVGVz
dCB0aGF0IElzSW5pdGlhbGl6ZWQoKSByZXR1cm5zIGZhbHNlIGlmIHJlcXVpcmVkIGZpZWxkcyBh
cmUgbWlzc2luZy4KLSAgdW5pdHRlc3Q6OlRlc3RSZXF1aXJlZCBtZXNzYWdlOwotCi0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLklzSW5pdGlhbGl6ZWQoKSk7Ci0gIG1lc3NhZ2Uuc2V0X2EoMSk7Ci0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLklzSW5pdGlhbGl6ZWQoKSk7Ci0gIG1lc3NhZ2Uuc2V0X2Io
Mik7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLklzSW5pdGlhbGl6ZWQoKSk7Ci0gIG1lc3NhZ2Uu
c2V0X2MoMyk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSXNJbml0aWFsaXplZCgpKTsKLX0KLQot
VEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVzdCwgUmVxdWlyZWRGb3JlaWduKSB7Ci0gIC8vIFRlc3Qg
dGhhdCBJc0luaXRpYWxpemVkKCkgcmV0dXJucyBmYWxzZSBpZiByZXF1aXJlZCBmaWVsZHMgaW4g
bmVzdGVkCi0gIC8vIG1lc3NhZ2VzIGFyZSBtaXNzaW5nLgotICB1bml0dGVzdDo6VGVzdFJlcXVp
cmVkRm9yZWlnbiBtZXNzYWdlOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSXNJbml0aWFsaXpl
ZCgpKTsKLQotICBtZXNzYWdlLm11dGFibGVfb3B0aW9uYWxfbWVzc2FnZSgpOwotICBFWFBFQ1Rf
RkFMU0UobWVzc2FnZS5Jc0luaXRpYWxpemVkKCkpOwotCi0gIG1lc3NhZ2UubXV0YWJsZV9vcHRp
b25hbF9tZXNzYWdlKCktPnNldF9hKDEpOwotICBtZXNzYWdlLm11dGFibGVfb3B0aW9uYWxfbWVz
c2FnZSgpLT5zZXRfYigyKTsKLSAgbWVzc2FnZS5tdXRhYmxlX29wdGlvbmFsX21lc3NhZ2UoKS0+
c2V0X2MoMyk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSXNJbml0aWFsaXplZCgpKTsKLQotICBt
ZXNzYWdlLmFkZF9yZXBlYXRlZF9tZXNzYWdlKCk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLklz
SW5pdGlhbGl6ZWQoKSk7Ci0KLSAgbWVzc2FnZS5tdXRhYmxlX3JlcGVhdGVkX21lc3NhZ2UoMCkt
PnNldF9hKDEpOwotICBtZXNzYWdlLm11dGFibGVfcmVwZWF0ZWRfbWVzc2FnZSgwKS0+c2V0X2Io
Mik7Ci0gIG1lc3NhZ2UubXV0YWJsZV9yZXBlYXRlZF9tZXNzYWdlKDApLT5zZXRfYygzKTsKLSAg
RVhQRUNUX1RSVUUobWVzc2FnZS5Jc0luaXRpYWxpemVkKCkpOwotfQotCi1URVNUKEdlbmVyYXRl
ZE1lc3NhZ2VUZXN0LCBGb3JlaWduTmVzdGVkKSB7Ci0gIC8vIFRlc3QgdGhhdCBUZXN0QWxsVHlw
ZXM6Ok5lc3RlZE1lc3NhZ2UgY2FuIGJlIGVtYmVkZGVkIGRpcmVjdGx5IGludG8KLSAgLy8gYW5v
dGhlciBtZXNzYWdlLgotICB1bml0dGVzdDo6VGVzdEZvcmVpZ25OZXN0ZWQgbWVzc2FnZTsKLQot
ICAvLyBJZiB0aGlzIGNvbXBpbGVzIGFuZCBydW5zIHdpdGhvdXQgY3Jhc2hpbmcsIGl0IG11c3Qg
d29yay4gIFdlIGhhdmUKLSAgLy8gbm90aGluZyBtb3JlIHRvIHRlc3QuCi0gIHVuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UqIG5lc3RlZCA9Ci0gICAgbWVzc2FnZS5tdXRhYmxl
X2ZvcmVpZ25fbmVzdGVkKCk7Ci0gIG5lc3RlZC0+c2V0X2JiKDEpOwotfQotCi1URVNUKEdlbmVy
YXRlZE1lc3NhZ2VUZXN0LCBSZWFsbHlMYXJnZVRhZ051bWJlcikgewotICAvLyBUZXN0IHRoYXQg
cmVhbGx5IGxhcmdlIHRhZyBudW1iZXJzIGRvbid0IGJyZWFrIGFueXRoaW5nLgotICB1bml0dGVz
dDo6VGVzdFJlYWxseUxhcmdlVGFnTnVtYmVyIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLSAgc3RyaW5n
IGRhdGE7Ci0KLSAgLy8gRm9yIHRoZSBtb3N0IHBhcnQsIGlmIHRoaXMgY29tcGlsZXMgYW5kIHJ1
bnMgdGhlbiB3ZSdyZSBwcm9iYWJseSBnb29kLgotICAvLyAoVGhlIG1vc3QgbGlrZWx5IGNhdXNl
IGZvciBmYWlsdXJlIHdvdWxkIGJlIGlmIHNvbWV0aGluZyB3ZXJlIGF0dGVtcHRpbmcKLSAgLy8g
dG8gYWxsb2NhdGUgYSBsb29rdXAgdGFibGUgb2Ygc29tZSBzb3J0IHVzaW5nIHRhZyBudW1iZXJz
IGFzIHRoZSBpbmRleC4pCi0gIC8vIFdlJ2xsIHRyeSBzZXJpYWxpemluZyBqdXN0IGZvciBmdW4u
Ci0gIG1lc3NhZ2UxLnNldF9hKDEyMzQpOwotICBtZXNzYWdlMS5zZXRfYmIoNTY3OCk7Ci0gIG1l
c3NhZ2UxLlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRhKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZTIu
UGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgRVhQRUNUX0VRKDEyMzQsIG1lc3NhZ2UyLmEoKSk7
Ci0gIEVYUEVDVF9FUSg1Njc4LCBtZXNzYWdlMi5iYigpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRN
ZXNzYWdlVGVzdCwgTXV0dWFsUmVjdXJzaW9uKSB7Ci0gIC8vIFRlc3QgdGhhdCBtdXR1YWxseS1y
ZWN1cnNpdmUgbWVzc2FnZSB0eXBlcyB3b3JrLgotICB1bml0dGVzdDo6VGVzdE11dHVhbFJlY3Vy
c2lvbkEgbWVzc2FnZTsKLSAgdW5pdHRlc3Q6OlRlc3RNdXR1YWxSZWN1cnNpb25BKiBuZXN0ZWQg
PSBtZXNzYWdlLm11dGFibGVfYmIoKS0+bXV0YWJsZV9hKCk7Ci0gIHVuaXR0ZXN0OjpUZXN0TXV0
dWFsUmVjdXJzaW9uQSogbmVzdGVkMiA9IG5lc3RlZC0+bXV0YWJsZV9iYigpLT5tdXRhYmxlX2Eo
KTsKLQotICAvLyBBZ2FpbiwgaWYgdGhlIGFib3ZlIGNvbXBpbGVzIGFuZCBydW5zLCB0aGF0J3Mg
YWxsIHdlIHJlYWxseSBoYXZlIHRvCi0gIC8vIHRlc3QsIGJ1dCBqdXN0IGZvciBydW4gd2UnbGwg
Y2hlY2sgdGhhdCB0aGUgc3lzdGVtIGRpZG4ndCBzb21laG93IGNvbWUKLSAgLy8gdXAgd2l0aCBh
IHBvaW50ZXIgbG9vcC4uLgotICBFWFBFQ1RfTkUoJm1lc3NhZ2UsIG5lc3RlZCk7Ci0gIEVYUEVD
VF9ORSgmbWVzc2FnZSwgbmVzdGVkMik7Ci0gIEVYUEVDVF9ORShuZXN0ZWQsIG5lc3RlZDIpOwot
fQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VUZXN0LCBDYW1lbENhc2VGaWVsZE5hbWVzKSB7Ci0g
IC8vIFRoaXMgdGVzdCBpcyBtYWlubHkgY2hlY2tpbmcgdGhhdCB0aGUgZm9sbG93aW5nIGNvbXBp
bGVzLCB3aGljaCB2ZXJpZmllcwotICAvLyB0aGF0IHRoZSBmaWVsZCBuYW1lcyB3ZXJlIGNvZXJj
ZWQgdG8gbG93ZXItY2FzZS4KLSAgLy8KLSAgLy8gUHJvdG9jb2wgYnVmZmVycyBzdGFuZGFyZCBz
dHlsZSBpcyB0byB1c2UgbG93ZXJjYXNlLXdpdGgtdW5kZXJzY29yZXMgZm9yCi0gIC8vIGZpZWxk
IG5hbWVzLiAgU29tZSBvbGQgcHJvdG8xIC5wcm90b3MgdW5mb3J0dW5hdGVseSB1c2VkIGNhbWVs
LWNhc2UgZmllbGQKLSAgLy8gbmFtZXMuICBJbiBwcm90bzEsIHRoZXNlIG5hbWVzIHdlcmUgZm9y
Y2VkIHRvIGxvd2VyLWNhc2UuICBTbywgd2UgZG8gdGhlCi0gIC8vIHNhbWUgdGhpbmcgaW4gcHJv
dG8yLgotCi0gIHVuaXR0ZXN0OjpUZXN0Q2FtZWxDYXNlRmllbGROYW1lcyBtZXNzYWdlOwotCi0g
IG1lc3NhZ2Uuc2V0X3ByaW1pdGl2ZWZpZWxkKDIpOwotICBtZXNzYWdlLnNldF9zdHJpbmdmaWVs
ZCgiZm9vIik7Ci0gIG1lc3NhZ2Uuc2V0X2VudW1maWVsZCh1bml0dGVzdDo6Rk9SRUlHTl9GT08p
OwotICBtZXNzYWdlLm11dGFibGVfbWVzc2FnZWZpZWxkKCktPnNldF9jKDYpOwotCi0gIG1lc3Nh
Z2UuYWRkX3JlcGVhdGVkcHJpbWl0aXZlZmllbGQoOCk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVk
c3RyaW5nZmllbGQoInF1eCIpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZGVudW1maWVsZCh1bml0
dGVzdDo6Rk9SRUlHTl9CQVIpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZG1lc3NhZ2VmaWVsZCgp
LT5zZXRfYygxNSk7Ci0KLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UucHJpbWl0aXZlZmllbGQoKSk7
Ci0gIEVYUEVDVF9FUSgiZm9vIiwgbWVzc2FnZS5zdHJpbmdmaWVsZCgpKTsKLSAgRVhQRUNUX0VR
KHVuaXR0ZXN0OjpGT1JFSUdOX0ZPTywgbWVzc2FnZS5lbnVtZmllbGQoKSk7Ci0gIEVYUEVDVF9F
USg2LCBtZXNzYWdlLm1lc3NhZ2VmaWVsZCgpLmMoKSk7Ci0KLSAgRVhQRUNUX0VRKDgsIG1lc3Nh
Z2UucmVwZWF0ZWRwcmltaXRpdmVmaWVsZCgwKSk7Ci0gIEVYUEVDVF9FUSgicXV4IiwgbWVzc2Fn
ZS5yZXBlYXRlZHN0cmluZ2ZpZWxkKDApKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdO
X0JBUiwgbWVzc2FnZS5yZXBlYXRlZGVudW1maWVsZCgwKSk7Ci0gIEVYUEVDVF9FUSgxNSwgbWVz
c2FnZS5yZXBlYXRlZG1lc3NhZ2VmaWVsZCgwKS5jKCkpOwotfQotCi1URVNUKEdlbmVyYXRlZE1l
c3NhZ2VUZXN0LCBUZXN0Q29uZmxpY3RpbmdTeW1ib2xOYW1lcykgewotICAvLyB0ZXN0X2JhZF9p
ZGVudGlmaWVycy5wcm90byBzdWNjZXNzZnVsbHkgY29tcGlsZWQsIHRoZW4gaXQgd29ya3MuICBU
aGUKLSAgLy8gZm9sbG93aW5nIGlzIGp1c3QgYSB0b2tlbiB1c2FnZSB0byBpbnN1cmUgdGhhdCB0
aGUgY29kZSBpcywgaW4gZmFjdCwKLSAgLy8gYmVpbmcgY29tcGlsZWQgYW5kIGxpbmtlZC4KLQot
ICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdENvbmZsaWN0aW5nU3ltYm9sTmFtZXMgbWVzc2FnZTsK
LSAgbWVzc2FnZS5zZXRfdWludDMyKDEpOwotICBFWFBFQ1RfRVEoMywgbWVzc2FnZS5CeXRlU2l6
ZSgpKTsKLQotICBtZXNzYWdlLnNldF9mcmllbmRfKDUpOwotICBFWFBFQ1RfRVEoNSwgbWVzc2Fn
ZS5mcmllbmRfKCkpOwotCi0gIG1lc3NhZ2Uuc2V0X2NsYXNzXyg2KTsKLSAgRVhQRUNUX0VRKDYs
IG1lc3NhZ2UuY2xhc3NfKCkpOwotCi0gIC8vIEluc3RhbnRpYXRlIGV4dGVuc2lvbiB0ZW1wbGF0
ZSBmdW5jdGlvbnMgdG8gdGVzdCBjb25mbGljdGluZyB0ZW1wbGF0ZQotICAvLyBwYXJhbWV0ZXIg
bmFtZXMuCi0gIHR5cGVkZWYgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RDb25mbGljdGluZ1N5bWJv
bE5hbWVzRXh0ZW5zaW9uIEV4dGVuc2lvbk1lc3NhZ2U7Ci0gIG1lc3NhZ2UuQWRkRXh0ZW5zaW9u
KEV4dGVuc2lvbk1lc3NhZ2U6OnJlcGVhdGVkX2ludDMyX2V4dCwgMTIzKTsKLSAgRVhQRUNUX0VR
KDEyMywKLSAgICAgICAgICAgIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKEV4dGVuc2lvbk1lc3NhZ2U6
OnJlcGVhdGVkX2ludDMyX2V4dCwgMCkpOwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VUZXN0
LCBUZXN0Q29uZmxpY3RpbmdFbnVtTmFtZXMpIHsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RD
b25mbGljdGluZ0VudW1OYW1lcyBtZXNzYWdlOwotICBtZXNzYWdlLnNldF9jb25mbGljdGluZ19l
bnVtKHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0Q29uZmxpY3RpbmdFbnVtTmFtZXNfTmVzdGVkQ29u
ZmxpY3RpbmdFbnVtX2FuZF8pOwotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5jb25mbGljdGluZ19l
bnVtKCkpOwotICBtZXNzYWdlLnNldF9jb25mbGljdGluZ19lbnVtKHByb3RvYnVmX3VuaXR0ZXN0
OjpUZXN0Q29uZmxpY3RpbmdFbnVtTmFtZXNfTmVzdGVkQ29uZmxpY3RpbmdFbnVtX1hPUik7Ci0g
IEVYUEVDVF9FUSg1LCBtZXNzYWdlLmNvbmZsaWN0aW5nX2VudW0oKSk7Ci0KLQotICBwcm90b2J1
Zl91bml0dGVzdDo6Q29uZmxpY3RpbmdFbnVtIGNvbmZsaWN0aW5nX2VudW07Ci0gIGNvbmZsaWN0
aW5nX2VudW0gPSBwcm90b2J1Zl91bml0dGVzdDo6Tk9UX0VROwotICBFWFBFQ1RfRVEoMSwgY29u
ZmxpY3RpbmdfZW51bSk7Ci0gIGNvbmZsaWN0aW5nX2VudW0gPSBwcm90b2J1Zl91bml0dGVzdDo6
cmV0dXJuXzsKLSAgRVhQRUNUX0VRKDMsIGNvbmZsaWN0aW5nX2VudW0pOwotfQotCi0jaWZuZGVm
IFBST1RPQlVGX1RFU1RfTk9fREVTQ1JJUFRPUlMKLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlVGVz
dCwgVGVzdE9wdGltaXplZEZvclNpemUpIHsKLSAgLy8gV2UgcmVseSBvbiB0aGUgdGVzdHMgaW4g
cmVmbGVjdGlvbl9vcHNfdW5pdHRlc3QgYW5kIHdpcmVfZm9ybWF0X3VuaXR0ZXN0Ci0gIC8vIHRv
IHJlYWxseSB0ZXN0IHRoYXQgcmVmbGVjdGlvbi1iYXNlZCBtZXRob2RzIHdvcmsuICBIZXJlIHdl
IGFyZSBtb3N0bHkKLSAgLy8ganVzdCBtYWtpbmcgc3VyZSB0aGF0IFRlc3RPcHRpbWl6ZWRGb3JT
aXplIGFjdHVhbGx5IGJ1aWxkcyBhbmQgc2VlbXMgdG8KLSAgLy8gZnVuY3Rpb24uCi0KLSAgcHJv
dG9idWZfdW5pdHRlc3Q6OlRlc3RPcHRpbWl6ZWRGb3JTaXplIG1lc3NhZ2UsIG1lc3NhZ2UyOwot
ICBtZXNzYWdlLnNldF9pKDEpOwotICBtZXNzYWdlLm11dGFibGVfbXNnKCktPnNldF9jKDIpOwot
ICBtZXNzYWdlMi5Db3B5RnJvbShtZXNzYWdlKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UyLmko
KSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlMi5tc2coKS5jKCkpOwotfQotCi1URVNUKEdlbmVy
YXRlZE1lc3NhZ2VUZXN0LCBUZXN0RW1iZWRPcHRpbWl6ZWRGb3JTaXplKSB7Ci0gIC8vIFZlcmlm
aWVzIHRoYXQgc29tZXRoaW5nIG9wdGltaXplZCBmb3Igc3BlZWQgY2FuIGNvbnRhaW4gc29tZXRo
aW5nIG9wdGltaXplZAotICAvLyBmb3Igc2l6ZS4KLQotICBwcm90b2J1Zl91bml0dGVzdDo6VGVz
dEVtYmVkT3B0aW1pemVkRm9yU2l6ZSBtZXNzYWdlLCBtZXNzYWdlMjsKLSAgbWVzc2FnZS5tdXRh
YmxlX29wdGlvbmFsX21lc3NhZ2UoKS0+c2V0X2koMSk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVk
X21lc3NhZ2UoKS0+bXV0YWJsZV9tc2coKS0+c2V0X2MoMik7Ci0gIHN0cmluZyBkYXRhOwotICBt
ZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRhKTsKLSAgQVNTRVJUX1RSVUUobWVzc2FnZTIu
UGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UyLm9wdGlvbmFs
X21lc3NhZ2UoKS5pKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZTIucmVwZWF0ZWRfbWVzc2Fn
ZSgwKS5tc2coKS5jKCkpOwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VUZXN0LCBUZXN0U3Bh
Y2VVc2VkKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTE7Ci0gIC8vIHNpemVv
ZiBwcm92aWRlcyBhIGxvd2VyIGJvdW5kIG9uIFNwYWNlVXNlZCgpLgotICBFWFBFQ1RfTEUoc2l6
ZW9mKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMpLCBtZXNzYWdlMS5TcGFjZVVzZWQoKSk7Ci0gIGNv
bnN0IGludCBlbXB0eV9tZXNzYWdlX3NpemUgPSBtZXNzYWdlMS5TcGFjZVVzZWQoKTsKLQotICAv
LyBTZXR0aW5nIHByaW1pdGl2ZSB0eXBlcyBzaG91bGRuJ3QgYWZmZWN0IHRoZSBzcGFjZSB1c2Vk
LgotICBtZXNzYWdlMS5zZXRfb3B0aW9uYWxfaW50MzIoMTIzKTsKLSAgbWVzc2FnZTEuc2V0X29w
dGlvbmFsX2ludDY0KDEyMzQ1KTsKLSAgbWVzc2FnZTEuc2V0X29wdGlvbmFsX3VpbnQzMigxMjMp
OwotICBtZXNzYWdlMS5zZXRfb3B0aW9uYWxfdWludDY0KDEyMzQ1KTsKLSAgRVhQRUNUX0VRKGVt
cHR5X21lc3NhZ2Vfc2l6ZSwgbWVzc2FnZTEuU3BhY2VVc2VkKCkpOwotCi0gIC8vIE9uIHNvbWUg
U1RMIGltcGxlbWVudGF0aW9ucywgc2V0dGluZyB0aGUgc3RyaW5nIHRvIGEgc21hbGwgdmFsdWUg
c2hvdWxkCi0gIC8vIG9ubHkgaW5jcmVhc2UgU3BhY2VVc2VkKCkgYnkgdGhlIHNpemUgb2YgYSBz
dHJpbmcgb2JqZWN0LCB0aG91Z2ggdGhpcyBpcwotICAvLyBub3QgdHJ1ZSBldmVyeXdoZXJlLgot
ICBtZXNzYWdlMS5zZXRfb3B0aW9uYWxfc3RyaW5nKCJhYmMiKTsKLSAgRVhQRUNUX0xFKGVtcHR5
X21lc3NhZ2Vfc2l6ZSArIHNpemVvZihzdHJpbmcpLCBtZXNzYWdlMS5TcGFjZVVzZWQoKSk7Ci0K
LSAgLy8gU2V0dGluZyBhIHN0cmluZyB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBzdHJpbmcg
b2JqZWN0IGl0c2VsZiBzaG91bGQKLSAgLy8gaW5jcmVhc2UgU3BhY2VVc2VkKCksIGJlY2F1c2Ug
aXQgY2Fubm90IHN0b3JlIHRoZSB2YWx1ZSBpbnRlcm5hbGx5LgotICBtZXNzYWdlMS5zZXRfb3B0
aW9uYWxfc3RyaW5nKHN0cmluZyhzaXplb2Yoc3RyaW5nKSArIDEsICd4JykpOwotICBpbnQgbWlu
X2V4cGVjdGVkX2luY3JlYXNlID0gbWVzc2FnZTEub3B0aW9uYWxfc3RyaW5nKCkuY2FwYWNpdHko
KSArCi0gICAgICBzaXplb2Yoc3RyaW5nKTsKLSAgRVhQRUNUX0xFKGVtcHR5X21lc3NhZ2Vfc2l6
ZSArIG1pbl9leHBlY3RlZF9pbmNyZWFzZSwKLSAgICAgICAgICAgIG1lc3NhZ2UxLlNwYWNlVXNl
ZCgpKTsKLQotICBpbnQgcHJldmlvdXNfc2l6ZSA9IG1lc3NhZ2UxLlNwYWNlVXNlZCgpOwotICAv
LyBBZGRpbmcgYW4gb3B0aW9uYWwgbWVzc2FnZSBzaG91bGQgaW5jcmVhc2UgdGhlIHNpemUgYnkg
dGhlIHNpemUgb2YgdGhlCi0gIC8vIG5lc3RlZCBtZXNzYWdlIHR5cGUuIE5lc3RlZE1lc3NhZ2Ug
aXMgc2ltcGxlIGVub3VnaCAoMSBpbnQgZmllbGQpIHRoYXQgaXQKLSAgLy8gaXMgZXF1YWwgdG8g
c2l6ZW9mKE5lc3RlZE1lc3NhZ2UpCi0gIG1lc3NhZ2UxLm11dGFibGVfb3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UoKTsKLSAgQVNTRVJUX0VRKHNpemVvZih1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpO
ZXN0ZWRNZXNzYWdlKSwKLSAgICAgICAgICAgIG1lc3NhZ2UxLm9wdGlvbmFsX25lc3RlZF9tZXNz
YWdlKCkuU3BhY2VVc2VkKCkpOwotICBFWFBFQ1RfRVEocHJldmlvdXNfc2l6ZSArCi0gICAgICAg
ICAgICBzaXplb2YodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZSksCi0gICAg
ICAgICAgICBtZXNzYWdlMS5TcGFjZVVzZWQoKSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2Fn
ZVRlc3QsIFRlc3RPbmVvZlNwYWNlVXNlZCkgewotICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtZXNz
YWdlMTsKLSAgRVhQRUNUX0xFKHNpemVvZih1bml0dGVzdDo6VGVzdE9uZW9mMiksIG1lc3NhZ2Ux
LlNwYWNlVXNlZCgpKTsKLQotICBjb25zdCBpbnQgZW1wdHlfbWVzc2FnZV9zaXplID0gbWVzc2Fn
ZTEuU3BhY2VVc2VkKCk7Ci0gIC8vIFNldHRpbmcgcHJpbWl0aXZlIHR5cGVzIHNob3VsZG4ndCBh
ZmZlY3QgdGhlIHNwYWNlIHVzZWQuCi0gIG1lc3NhZ2UxLnNldF9mb29faW50KDEyMyk7Ci0gIG1l
c3NhZ2UxLnNldF9iYXJfaW50KDEyMzQ1KTsKLSAgRVhQRUNUX0VRKGVtcHR5X21lc3NhZ2Vfc2l6
ZSwgbWVzc2FnZTEuU3BhY2VVc2VkKCkpOwotCi0gIC8vIFNldHRpbmcgYSBzdHJpbmcgaW4gb25l
b2YgdG8gYSBzbWFsbCB2YWx1ZSBzaG91bGQgb25seSBpbmNyZWFzZSBTcGFjZVVzZWQoKQotICAv
LyBieSB0aGUgc2l6ZSBvZiBhIHN0cmluZyBvYmplY3QuCi0gIG1lc3NhZ2UxLnNldF9mb29fc3Ry
aW5nKCJhYmMiKTsKLSAgRVhQRUNUX0xFKGVtcHR5X21lc3NhZ2Vfc2l6ZSArIHNpemVvZihzdHJp
bmcpLCBtZXNzYWdlMS5TcGFjZVVzZWQoKSk7Ci0KLSAgLy8gU2V0dGluZyBhIHN0cmluZyBpbiBv
bmVvZiB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBzdHJpbmcgb2JqZWN0IGl0c2VsZgotICAv
LyBzaG91bGQgaW5jcmVhc2UgU3BhY2VVc2VkKCksIGJlY2F1c2UgaXQgY2Fubm90IHN0b3JlIHRo
ZSB2YWx1ZSBpbnRlcm5hbGx5LgotICBtZXNzYWdlMS5zZXRfZm9vX3N0cmluZyhzdHJpbmcoc2l6
ZW9mKHN0cmluZykgKyAxLCAneCcpKTsKLSAgaW50IG1pbl9leHBlY3RlZF9pbmNyZWFzZSA9IG1l
c3NhZ2UxLmZvb19zdHJpbmcoKS5jYXBhY2l0eSgpICsKLSAgICAgIHNpemVvZihzdHJpbmcpOwot
ICBFWFBFQ1RfTEUoZW1wdHlfbWVzc2FnZV9zaXplICsgbWluX2V4cGVjdGVkX2luY3JlYXNlLAot
ICAgICAgICAgICAgbWVzc2FnZTEuU3BhY2VVc2VkKCkpOwotCi0gIC8vIFNldHRpbmcgYSBtZXNz
YWdlIGluIG9uZW9mIHNob3VsZCBkZWxldGUgdGhlIG90aGVyIGZpZWxkcyBhbmQgaW5jcmVhc2Ug
dGhlCi0gIC8vIHNpemUgYnkgdGhlIHNpemUgb2YgdGhlIG5lc3RlZCBtZXNzYWdlIHR5cGUuIE5l
c3RlZE1lc3NhZ2UgaXMgc2ltcGxlIGVub3VnaAotICAvLyB0aGF0IGl0IGlzIGVxdWFsIHRvIHNp
emVvZihOZXN0ZWRNZXNzYWdlKQotICBtZXNzYWdlMS5tdXRhYmxlX2Zvb19tZXNzYWdlKCk7Ci0g
IEFTU0VSVF9FUShzaXplb2YodW5pdHRlc3Q6OlRlc3RPbmVvZjI6Ok5lc3RlZE1lc3NhZ2UpLAot
ICAgICAgICAgICAgbWVzc2FnZTEuZm9vX21lc3NhZ2UoKS5TcGFjZVVzZWQoKSk7Ci0gIEVYUEVD
VF9FUShlbXB0eV9tZXNzYWdlX3NpemUgKwotICAgICAgICAgICAgc2l6ZW9mKHVuaXR0ZXN0OjpU
ZXN0T25lb2YyOjpOZXN0ZWRNZXNzYWdlKSwKLSAgICAgICAgICAgIG1lc3NhZ2UxLlNwYWNlVXNl
ZCgpKTsKLX0KLQotI2VuZGlmICAvLyAhUFJPVE9CVUZfVEVTVF9OT19ERVNDUklQVE9SUwotCi0K
LVRFU1QoR2VuZXJhdGVkTWVzc2FnZVRlc3QsIEZpZWxkQ29uc3RhbnRWYWx1ZXMpIHsKLSAgdW5p
dHRlc3Q6OlRlc3RSZXF1aXJlZCBtZXNzYWdlOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RB
bGxUeXBlc19OZXN0ZWRNZXNzYWdlOjprQmJGaWVsZE51bWJlciwgMSk7Ci0gIEVYUEVDVF9FUSh1
bml0dGVzdDo6VGVzdEFsbFR5cGVzOjprT3B0aW9uYWxJbnQzMkZpZWxkTnVtYmVyLCAxKTsKLSAg
RVhQRUNUX0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmtPcHRpb25hbGdyb3VwRmllbGROdW1i
ZXIsIDE2KTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmtPcHRpb25hbE5l
c3RlZE1lc3NhZ2VGaWVsZE51bWJlciwgMTgpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RB
bGxUeXBlczo6a09wdGlvbmFsTmVzdGVkRW51bUZpZWxkTnVtYmVyLCAyMSk7Ci0gIEVYUEVDVF9F
USh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjprUmVwZWF0ZWRJbnQzMkZpZWxkTnVtYmVyLCAzMSk7
Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjprUmVwZWF0ZWRncm91cEZpZWxk
TnVtYmVyLCA0Nik7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjprUmVwZWF0
ZWROZXN0ZWRNZXNzYWdlRmllbGROdW1iZXIsIDQ4KTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXM6OmtSZXBlYXRlZE5lc3RlZEVudW1GaWVsZE51bWJlciwgNTEpOwotfQotCi1U
RVNUKEdlbmVyYXRlZE1lc3NhZ2VUZXN0LCBFeHRlbnNpb25Db25zdGFudFZhbHVlcykgewotICBF
WFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RSZXF1aXJlZDo6a1NpbmdsZUZpZWxkTnVtYmVyLCAxMDAw
KTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQ6OmtNdWx0aUZpZWxkTnVtYmVy
LCAxMDAxKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjprT3B0aW9uYWxJbnQzMkV4dGVuc2lvbkZp
ZWxkTnVtYmVyLCAxKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjprT3B0aW9uYWxncm91cEV4dGVu
c2lvbkZpZWxkTnVtYmVyLCAxNik7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6a09wdGlvbmFsTmVz
dGVkTWVzc2FnZUV4dGVuc2lvbkZpZWxkTnVtYmVyLCAxOCk7Ci0gIEVYUEVDVF9FUSh1bml0dGVz
dDo6a09wdGlvbmFsTmVzdGVkRW51bUV4dGVuc2lvbkZpZWxkTnVtYmVyLCAyMSk7Ci0gIEVYUEVD
VF9FUSh1bml0dGVzdDo6a1JlcGVhdGVkSW50MzJFeHRlbnNpb25GaWVsZE51bWJlciwgMzEpOwot
ICBFWFBFQ1RfRVEodW5pdHRlc3Q6OmtSZXBlYXRlZGdyb3VwRXh0ZW5zaW9uRmllbGROdW1iZXIs
IDQ2KTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjprUmVwZWF0ZWROZXN0ZWRNZXNzYWdlRXh0ZW5z
aW9uRmllbGROdW1iZXIsIDQ4KTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjprUmVwZWF0ZWROZXN0
ZWRFbnVtRXh0ZW5zaW9uRmllbGROdW1iZXIsIDUxKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNz
YWdlVGVzdCwgUGFyc2VGcm9tVHJ1bmNhdGVkKSB7Ci0gIGNvbnN0IHN0cmluZyBsb25nX3N0cmlu
ZyA9IHN0cmluZygxMjgsICdxJyk7Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gcDsKLSAgcC5hZGRf
ZXh0ZW5zaW9uKCktPnNldF9uYW1lKGxvbmdfc3RyaW5nKTsKLSAgY29uc3Qgc3RyaW5nIG1zZyA9
IHAuU2VyaWFsaXplQXNTdHJpbmcoKTsKLSAgaW50IHN1Y2Nlc3NmdWxfY291bnQgPSAwOwotICBm
b3IgKGludCBpID0gMDsgaSA8PSBtc2cuc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAocC5QYXJzZUZy
b21BcnJheShtc2cuY19zdHIoKSwgaSkpIHsKLSAgICAgICsrc3VjY2Vzc2Z1bF9jb3VudDsKLSAg
ICB9Ci0gIH0KLSAgLy8gV2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQgaG93IG9mdGVuIHdlIHN1
Y2NlZWRlZC4KLSAgLy8gQXMgbG9uZyBhcyB3ZSBkaWRuJ3QgY3Jhc2gsIHdlJ3JlIGhhcHB5Lgot
ICBFWFBFQ1RfR0Uoc3VjY2Vzc2Z1bF9jb3VudCwgMSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQot
VEVTVChHZW5lcmF0ZWRFbnVtVGVzdCwgRW51bVZhbHVlc0FzU3dpdGNoQ2FzZXMpIHsKLSAgLy8g
VGVzdCB0aGF0IG91ciBuZXN0ZWQgZW51bSB2YWx1ZXMgY2FuIGJlIHVzZWQgYXMgc3dpdGNoIGNh
c2VzLiAgVGhpcyB0ZXN0Ci0gIC8vIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcsIHRoZSBw
cm9vZiB0aGF0IGl0IHdvcmtzIGlzIHRoYXQgaXQKLSAgLy8gY29tcGlsZXMuCi0gIGludCBpID0w
OwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRFbnVtIGEgPSB1bml0dGVzdDo6VGVz
dEFsbFR5cGVzOjpCQVI7Ci0gIHN3aXRjaCAoYSkgewotICAgIGNhc2UgdW5pdHRlc3Q6OlRlc3RB
bGxUeXBlczo6Rk9POgotICAgICAgaSA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIHVuaXR0
ZXN0OjpUZXN0QWxsVHlwZXM6OkJBUjoKLSAgICAgIGkgPSAyOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpCQVo6Ci0gICAgICBpID0gMzsKLSAgICAgIGJy
ZWFrOwotICAgIGNhc2UgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6TkVHOgotICAgICAgaSA9IC0x
OwotICAgICAgYnJlYWs7Ci0gICAgLy8gbm8gZGVmYXVsdCBjYXNlOiAgV2Ugd2FudCB0byBtYWtl
IHN1cmUgdGhlIGNvbXBpbGVyIHJlY29nbml6ZXMgdGhhdAotICAgIC8vICAgYWxsIGNhc2VzIGFy
ZSBjb3ZlcmVkLiAgKEdDQyB3YXJucyBpZiB5b3UgZG8gbm90IGNvdmVyIGFsbCBjYXNlcyBvZgot
ICAgIC8vICAgYW4gZW51bSBpbiBhIHN3aXRjaC4pCi0gIH0KLQotICAvLyBUb2tlbiBjaGVjayBq
dXN0IGZvciBmdW4uCi0gIEVYUEVDVF9FUSgyLCBpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRFbnVt
VGVzdCwgSXNWYWxpZFZhbHVlKSB7Ci0gIC8vIFRlc3QgZW51bSBJc1ZhbGlkVmFsdWUuCi0gIEVY
UEVDVF9UUlVFKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6Ok5lc3RlZEVudW1fSXNWYWxpZCgxKSk7
Ci0gIEVYUEVDVF9UUlVFKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6Ok5lc3RlZEVudW1fSXNWYWxp
ZCgyKSk7Ci0gIEVYUEVDVF9UUlVFKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6Ok5lc3RlZEVudW1f
SXNWYWxpZCgzKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6Ok5l
c3RlZEVudW1fSXNWYWxpZCgwKSk7Ci0gIEVYUEVDVF9GQUxTRSh1bml0dGVzdDo6VGVzdEFsbFR5
cGVzOjpOZXN0ZWRFbnVtX0lzVmFsaWQoNCkpOwotCi0gIC8vIE1ha2Ugc3VyZSBpdCBhbHNvIHdv
cmtzIHdoZW4gdGhlcmUgYXJlIGR1cHMuCi0gIEVYUEVDVF9UUlVFKHVuaXR0ZXN0OjpUZXN0RW51
bVdpdGhEdXBWYWx1ZV9Jc1ZhbGlkKDEpKTsKLSAgRVhQRUNUX1RSVUUodW5pdHRlc3Q6OlRlc3RF
bnVtV2l0aER1cFZhbHVlX0lzVmFsaWQoMikpOwotICBFWFBFQ1RfVFJVRSh1bml0dGVzdDo6VGVz
dEVudW1XaXRoRHVwVmFsdWVfSXNWYWxpZCgzKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKHVuaXR0ZXN0
OjpUZXN0RW51bVdpdGhEdXBWYWx1ZV9Jc1ZhbGlkKDApKTsKLSAgRVhQRUNUX0ZBTFNFKHVuaXR0
ZXN0OjpUZXN0RW51bVdpdGhEdXBWYWx1ZV9Jc1ZhbGlkKDQpKTsKLX0KLQotVEVTVChHZW5lcmF0
ZWRFbnVtVGVzdCwgTWluQW5kTWF4KSB7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5
cGVzOjpORUcsCi0gICAgICAgICAgICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRFbnVt
X01JTik7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpCQVosCi0gICAgICAg
ICAgICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRFbnVtX01BWCk7Ci0gIEVYUEVDVF9F
USg0LCB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRFbnVtX0FSUkFZU0laRSk7Ci0KLSAg
RVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0ZPTywgdW5pdHRlc3Q6OkZvcmVpZ25FbnVtX01J
Tik7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9CQVosIHVuaXR0ZXN0OjpGb3JlaWdu
RW51bV9NQVgpOwotICBFWFBFQ1RfRVEoNywgdW5pdHRlc3Q6OkZvcmVpZ25FbnVtX0FSUkFZU0la
RSk7Ci0KLSAgRVhQRUNUX0VRKDEsIHVuaXR0ZXN0OjpUZXN0RW51bVdpdGhEdXBWYWx1ZV9NSU4p
OwotICBFWFBFQ1RfRVEoMywgdW5pdHRlc3Q6OlRlc3RFbnVtV2l0aER1cFZhbHVlX01BWCk7Ci0g
IEVYUEVDVF9FUSg0LCB1bml0dGVzdDo6VGVzdEVudW1XaXRoRHVwVmFsdWVfQVJSQVlTSVpFKTsK
LQotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlNQQVJTRV9FLCB1bml0dGVzdDo6VGVzdFNwYXJzZUVu
dW1fTUlOKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpTUEFSU0VfQywgdW5pdHRlc3Q6OlRlc3RT
cGFyc2VFbnVtX01BWCk7Ci0gIEVYUEVDVF9FUSgxMjU4OTIzNSwgdW5pdHRlc3Q6OlRlc3RTcGFy
c2VFbnVtX0FSUkFZU0laRSk7Ci0KLSAgLy8gTWFrZSBzdXJlIHdlIGNhbiB0YWtlIHRoZSBhZGRy
ZXNzIG9mIF9NSU4sIF9NQVggYW5kIF9BUlJBWVNJWkUuCi0gIHZvaWQqIG51bGxfcG9pbnRlciA9
IDA7ICAvLyBOVUxMIG1heSBiZSBpbnRlZ2VyLXR5cGUsIG5vdCBwb2ludGVyLXR5cGUuCi0gIEVY
UEVDVF9ORShudWxsX3BvaW50ZXIsICZ1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRFbnVt
X01JTik7Ci0gIEVYUEVDVF9ORShudWxsX3BvaW50ZXIsICZ1bml0dGVzdDo6VGVzdEFsbFR5cGVz
OjpOZXN0ZWRFbnVtX01BWCk7Ci0gIEVYUEVDVF9ORShudWxsX3BvaW50ZXIsICZ1bml0dGVzdDo6
VGVzdEFsbFR5cGVzOjpOZXN0ZWRFbnVtX0FSUkFZU0laRSk7Ci0KLSAgRVhQRUNUX05FKG51bGxf
cG9pbnRlciwgJnVuaXR0ZXN0OjpGb3JlaWduRW51bV9NSU4pOwotICBFWFBFQ1RfTkUobnVsbF9w
b2ludGVyLCAmdW5pdHRlc3Q6OkZvcmVpZ25FbnVtX01BWCk7Ci0gIEVYUEVDVF9ORShudWxsX3Bv
aW50ZXIsICZ1bml0dGVzdDo6Rm9yZWlnbkVudW1fQVJSQVlTSVpFKTsKLQotICAvLyBNYWtlIHN1
cmUgd2UgY2FuIHVzZSBfTUlOIGFuZCBfTUFYIGFzIHN3aXRjaCBjYXNlcy4KLSAgc3dpdGNoICh1
bml0dGVzdDo6U1BBUlNFX0EpIHsKLSAgICBjYXNlIHVuaXR0ZXN0OjpUZXN0U3BhcnNlRW51bV9N
SU46Ci0gICAgY2FzZSB1bml0dGVzdDo6VGVzdFNwYXJzZUVudW1fTUFYOgotICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLSNpZm5kZWYgUFJPVE9CVUZf
VEVTVF9OT19ERVNDUklQVE9SUwotCi1URVNUKEdlbmVyYXRlZEVudW1UZXN0LCBOYW1lKSB7Ci0g
IC8vICJOYW1lcyIgaW4gdGhlIHByZXNlbmNlIG9mIGR1cCB2YWx1ZXMgYXJlIGEgYml0IGFyYml0
cmFyeS4KLSAgRVhQRUNUX0VRKCJGT08xIiwgdW5pdHRlc3Q6OlRlc3RFbnVtV2l0aER1cFZhbHVl
X05hbWUodW5pdHRlc3Q6OkZPTzEpKTsKLSAgRVhQRUNUX0VRKCJGT08xIiwgdW5pdHRlc3Q6OlRl
c3RFbnVtV2l0aER1cFZhbHVlX05hbWUodW5pdHRlc3Q6OkZPTzIpKTsKLQotICBFWFBFQ1RfRVEo
IlNQQVJTRV9BIiwgdW5pdHRlc3Q6OlRlc3RTcGFyc2VFbnVtX05hbWUodW5pdHRlc3Q6OlNQQVJT
RV9BKSk7Ci0gIEVYUEVDVF9FUSgiU1BBUlNFX0IiLCB1bml0dGVzdDo6VGVzdFNwYXJzZUVudW1f
TmFtZSh1bml0dGVzdDo6U1BBUlNFX0IpKTsKLSAgRVhQRUNUX0VRKCJTUEFSU0VfQyIsIHVuaXR0
ZXN0OjpUZXN0U3BhcnNlRW51bV9OYW1lKHVuaXR0ZXN0OjpTUEFSU0VfQykpOwotICBFWFBFQ1Rf
RVEoIlNQQVJTRV9EIiwgdW5pdHRlc3Q6OlRlc3RTcGFyc2VFbnVtX05hbWUodW5pdHRlc3Q6OlNQ
QVJTRV9EKSk7Ci0gIEVYUEVDVF9FUSgiU1BBUlNFX0UiLCB1bml0dGVzdDo6VGVzdFNwYXJzZUVu
dW1fTmFtZSh1bml0dGVzdDo6U1BBUlNFX0UpKTsKLSAgRVhQRUNUX0VRKCJTUEFSU0VfRiIsIHVu
aXR0ZXN0OjpUZXN0U3BhcnNlRW51bV9OYW1lKHVuaXR0ZXN0OjpTUEFSU0VfRikpOwotICBFWFBF
Q1RfRVEoIlNQQVJTRV9HIiwgdW5pdHRlc3Q6OlRlc3RTcGFyc2VFbnVtX05hbWUodW5pdHRlc3Q6
OlNQQVJTRV9HKSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkRW51bVRlc3QsIFBhcnNlKSB7Ci0gIHVu
aXR0ZXN0OjpUZXN0RW51bVdpdGhEdXBWYWx1ZSBkdXBfdmFsdWUgPSB1bml0dGVzdDo6Rk9PMTsK
LSAgRVhQRUNUX1RSVUUodW5pdHRlc3Q6OlRlc3RFbnVtV2l0aER1cFZhbHVlX1BhcnNlKCJGT08x
IiwgJmR1cF92YWx1ZSkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPTzEsIGR1cF92YWx1ZSk7
Ci0gIEVYUEVDVF9UUlVFKHVuaXR0ZXN0OjpUZXN0RW51bVdpdGhEdXBWYWx1ZV9QYXJzZSgiRk9P
MiIsICZkdXBfdmFsdWUpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT08yLCBkdXBfdmFsdWUp
OwotICBFWFBFQ1RfRkFMU0UodW5pdHRlc3Q6OlRlc3RFbnVtV2l0aER1cFZhbHVlX1BhcnNlKCJG
T08iLCAmZHVwX3ZhbHVlKSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkRW51bVRlc3QsIEdldEVudW1E
ZXNjcmlwdG9yKSB7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRF
bnVtX2Rlc2NyaXB0b3IoKSwKLSAgICAgICAgICAgIEdldEVudW1EZXNjcmlwdG9yPHVuaXR0ZXN0
OjpUZXN0QWxsVHlwZXM6Ok5lc3RlZEVudW0+KCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZv
cmVpZ25FbnVtX2Rlc2NyaXB0b3IoKSwKLSAgICAgICAgICAgIEdldEVudW1EZXNjcmlwdG9yPHVu
aXR0ZXN0OjpGb3JlaWduRW51bT4oKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEVudW1X
aXRoRHVwVmFsdWVfZGVzY3JpcHRvcigpLAotICAgICAgICAgICAgR2V0RW51bURlc2NyaXB0b3I8
dW5pdHRlc3Q6OlRlc3RFbnVtV2l0aER1cFZhbHVlPigpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0
OjpUZXN0U3BhcnNlRW51bV9kZXNjcmlwdG9yKCksCi0gICAgICAgICAgICBHZXRFbnVtRGVzY3Jp
cHRvcjx1bml0dGVzdDo6VGVzdFNwYXJzZUVudW0+KCkpOwotfQotCi1lbnVtIE5vblByb3RvRW51
bSB7Ci0gIGtGb28gPSAxLAotfTsKLQotVEVTVChHZW5lcmF0ZWRFbnVtVGVzdCwgSXNQcm90b0Vu
dW1UeXBlVHJhaXQpIHsKLSAgRVhQRUNUX1RSVUUoaXNfcHJvdG9fZW51bTx1bml0dGVzdDo6VGVz
dEFsbFR5cGVzOjpOZXN0ZWRFbnVtPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShpc19wcm90b19l
bnVtPHVuaXR0ZXN0OjpGb3JlaWduRW51bT46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfcHJv
dG9fZW51bTx1bml0dGVzdDo6VGVzdEVudW1XaXRoRHVwVmFsdWU+Ojp2YWx1ZSk7Ci0gIEVYUEVD
VF9UUlVFKGlzX3Byb3RvX2VudW08dW5pdHRlc3Q6OlRlc3RTcGFyc2VFbnVtPjo6dmFsdWUpOwot
Ci0gIEVYUEVDVF9GQUxTRShpc19wcm90b19lbnVtPGludD46OnZhbHVlKTsKLSAgRVhQRUNUX0ZB
TFNFKGlzX3Byb3RvX2VudW08Tm9uUHJvdG9FbnVtPjo6dmFsdWUpOwotfQotCi0jZW5kaWYgIC8v
IFBST1RPQlVGX1RFU1RfTk9fREVTQ1JJUFRPUlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWZuZGVm
IFBST1RPQlVGX1RFU1RfTk9fREVTQ1JJUFRPUlMKLQotLy8gU3VwcG9ydCBjb2RlIGZvciB0ZXN0
aW5nIHNlcnZpY2VzLgotY2xhc3MgR2VuZXJhdGVkU2VydmljZVRlc3QgOiBwdWJsaWMgdGVzdGlu
Zzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICBjbGFzcyBNb2NrVGVzdFNlcnZpY2UgOiBwdWJsaWMg
dW5pdHRlc3Q6OlRlc3RTZXJ2aWNlIHsKLSAgIHB1YmxpYzoKLSAgICBNb2NrVGVzdFNlcnZpY2Uo
KQotICAgICAgOiBjYWxsZWRfKGZhbHNlKSwKLSAgICAgICAgbWV0aG9kXygiIiksCi0gICAgICAg
IGNvbnRyb2xsZXJfKE5VTEwpLAotICAgICAgICByZXF1ZXN0XyhOVUxMKSwKLSAgICAgICAgcmVz
cG9uc2VfKE5VTEwpLAotICAgICAgICBkb25lXyhOVUxMKSB7fQotCi0gICAgfk1vY2tUZXN0U2Vy
dmljZSgpIHt9Ci0KLSAgICB2b2lkIFJlc2V0KCkgeyBjYWxsZWRfID0gZmFsc2U7IH0KLQotICAg
IC8vIGltcGxlbWVudHMgVGVzdFNlcnZpY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gICAgdm9pZCBGb28oUnBjQ29udHJvbGxlciogY29udHJvbGxlciwKLSAg
ICAgICAgICAgICBjb25zdCB1bml0dGVzdDo6Rm9vUmVxdWVzdCogcmVxdWVzdCwKLSAgICAgICAg
ICAgICB1bml0dGVzdDo6Rm9vUmVzcG9uc2UqIHJlc3BvbnNlLAotICAgICAgICAgICAgIENsb3N1
cmUqIGRvbmUpIHsKLSAgICAgIEFTU0VSVF9GQUxTRShjYWxsZWRfKTsKLSAgICAgIGNhbGxlZF8g
PSB0cnVlOwotICAgICAgbWV0aG9kXyA9ICJGb28iOwotICAgICAgY29udHJvbGxlcl8gPSBjb250
cm9sbGVyOwotICAgICAgcmVxdWVzdF8gPSByZXF1ZXN0OwotICAgICAgcmVzcG9uc2VfID0gcmVz
cG9uc2U7Ci0gICAgICBkb25lXyA9IGRvbmU7Ci0gICAgfQotCi0gICAgdm9pZCBCYXIoUnBjQ29u
dHJvbGxlciogY29udHJvbGxlciwKLSAgICAgICAgICAgICBjb25zdCB1bml0dGVzdDo6QmFyUmVx
dWVzdCogcmVxdWVzdCwKLSAgICAgICAgICAgICB1bml0dGVzdDo6QmFyUmVzcG9uc2UqIHJlc3Bv
bnNlLAotICAgICAgICAgICAgIENsb3N1cmUqIGRvbmUpIHsKLSAgICAgIEFTU0VSVF9GQUxTRShj
YWxsZWRfKTsKLSAgICAgIGNhbGxlZF8gPSB0cnVlOwotICAgICAgbWV0aG9kXyA9ICJCYXIiOwot
ICAgICAgY29udHJvbGxlcl8gPSBjb250cm9sbGVyOwotICAgICAgcmVxdWVzdF8gPSByZXF1ZXN0
OwotICAgICAgcmVzcG9uc2VfID0gcmVzcG9uc2U7Ci0gICAgICBkb25lXyA9IGRvbmU7Ci0gICAg
fQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBib29sIGNhbGxlZF87Ci0gICAgc3RyaW5nIG1ldGhv
ZF87Ci0gICAgUnBjQ29udHJvbGxlciogY29udHJvbGxlcl87Ci0gICAgY29uc3QgTWVzc2FnZSog
cmVxdWVzdF87Ci0gICAgTWVzc2FnZSogcmVzcG9uc2VfOwotICAgIENsb3N1cmUqIGRvbmVfOwot
ICB9OwotCi0gIGNsYXNzIE1vY2tScGNDaGFubmVsIDogcHVibGljIFJwY0NoYW5uZWwgewotICAg
cHVibGljOgotICAgIE1vY2tScGNDaGFubmVsKCkKLSAgICAgIDogY2FsbGVkXyhmYWxzZSksCi0g
ICAgICAgIG1ldGhvZF8oTlVMTCksCi0gICAgICAgIGNvbnRyb2xsZXJfKE5VTEwpLAotICAgICAg
ICByZXF1ZXN0XyhOVUxMKSwKLSAgICAgICAgcmVzcG9uc2VfKE5VTEwpLAotICAgICAgICBkb25l
XyhOVUxMKSwKLSAgICAgICAgZGVzdHJveWVkXyhOVUxMKSB7fQotCi0gICAgfk1vY2tScGNDaGFu
bmVsKCkgewotICAgICAgaWYgKGRlc3Ryb3llZF8gIT0gTlVMTCkgKmRlc3Ryb3llZF8gPSB0cnVl
OwotICAgIH0KLQotICAgIHZvaWQgUmVzZXQoKSB7IGNhbGxlZF8gPSBmYWxzZTsgfQotCi0gICAg
Ly8gaW1wbGVtZW50cyBUZXN0U2VydmljZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgICB2b2lkIENhbGxNZXRob2QoY29uc3QgTWV0aG9kRGVzY3JpcHRvciog
bWV0aG9kLAotICAgICAgICAgICAgICAgICAgICBScGNDb250cm9sbGVyKiBjb250cm9sbGVyLAot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlKiByZXF1ZXN0LAotICAgICAgICAgICAg
ICAgICAgICBNZXNzYWdlKiByZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZSog
ZG9uZSkgewotICAgICAgQVNTRVJUX0ZBTFNFKGNhbGxlZF8pOwotICAgICAgY2FsbGVkXyA9IHRy
dWU7Ci0gICAgICBtZXRob2RfID0gbWV0aG9kOwotICAgICAgY29udHJvbGxlcl8gPSBjb250cm9s
bGVyOwotICAgICAgcmVxdWVzdF8gPSByZXF1ZXN0OwotICAgICAgcmVzcG9uc2VfID0gcmVzcG9u
c2U7Ci0gICAgICBkb25lXyA9IGRvbmU7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBi
b29sIGNhbGxlZF87Ci0gICAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogbWV0aG9kXzsKLSAgICBS
cGNDb250cm9sbGVyKiBjb250cm9sbGVyXzsKLSAgICBjb25zdCBNZXNzYWdlKiByZXF1ZXN0XzsK
LSAgICBNZXNzYWdlKiByZXNwb25zZV87Ci0gICAgQ2xvc3VyZSogZG9uZV87Ci0gICAgYm9vbCog
ZGVzdHJveWVkXzsKLSAgfTsKLQotICBjbGFzcyBNb2NrQ29udHJvbGxlciA6IHB1YmxpYyBScGND
b250cm9sbGVyIHsKLSAgIHB1YmxpYzoKLSAgICB2b2lkIFJlc2V0KCkgewotICAgICAgQUREX0ZB
SUxVUkUoKSA8PCAiUmVzZXQoKSBub3QgZXhwZWN0ZWQgZHVyaW5nIHRoaXMgdGVzdC4iOwotICAg
IH0KLSAgICBib29sIEZhaWxlZCgpIGNvbnN0IHsKLSAgICAgIEFERF9GQUlMVVJFKCkgPDwgIkZh
aWxlZCgpIG5vdCBleHBlY3RlZCBkdXJpbmcgdGhpcyB0ZXN0LiI7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHN0cmluZyBFcnJvclRleHQoKSBjb25zdCB7Ci0gICAgICBBRERfRkFJ
TFVSRSgpIDw8ICJFcnJvclRleHQoKSBub3QgZXhwZWN0ZWQgZHVyaW5nIHRoaXMgdGVzdC4iOwot
ICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgICB2b2lkIFN0YXJ0Q2FuY2VsKCkgewotICAgICAg
QUREX0ZBSUxVUkUoKSA8PCAiU3RhcnRDYW5jZWwoKSBub3QgZXhwZWN0ZWQgZHVyaW5nIHRoaXMg
dGVzdC4iOwotICAgIH0KLSAgICB2b2lkIFNldEZhaWxlZChjb25zdCBzdHJpbmcmIHJlYXNvbikg
ewotICAgICAgQUREX0ZBSUxVUkUoKSA8PCAiU2V0RmFpbGVkKCkgbm90IGV4cGVjdGVkIGR1cmlu
ZyB0aGlzIHRlc3QuIjsKLSAgICB9Ci0gICAgYm9vbCBJc0NhbmNlbGVkKCkgY29uc3QgewotICAg
ICAgQUREX0ZBSUxVUkUoKSA8PCAiSXNDYW5jZWxlZCgpIG5vdCBleHBlY3RlZCBkdXJpbmcgdGhp
cyB0ZXN0LiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHZvaWQgTm90aWZ5T25D
YW5jZWwoQ2xvc3VyZSogY2FsbGJhY2spIHsKLSAgICAgIEFERF9GQUlMVVJFKCkgPDwgIk5vdGlm
eU9uQ2FuY2VsKCkgbm90IGV4cGVjdGVkIGR1cmluZyB0aGlzIHRlc3QuIjsKLSAgICB9Ci0gIH07
Ci0KLSAgR2VuZXJhdGVkU2VydmljZVRlc3QoKQotICAgIDogZGVzY3JpcHRvcl8odW5pdHRlc3Q6
OlRlc3RTZXJ2aWNlOjpkZXNjcmlwdG9yKCkpLAotICAgICAgZm9vXyhkZXNjcmlwdG9yXy0+Rmlu
ZE1ldGhvZEJ5TmFtZSgiRm9vIikpLAotICAgICAgYmFyXyhkZXNjcmlwdG9yXy0+RmluZE1ldGhv
ZEJ5TmFtZSgiQmFyIikpLAotICAgICAgc3R1Yl8oJm1vY2tfY2hhbm5lbF8pLAotICAgICAgZG9u
ZV8oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6TmV3UGVybWFuZW50Q2FsbGJhY2soJkRv
Tm90aGluZykpIHt9Ci0KLSAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIEFTU0VSVF9UUlVF
KGZvb18gIT0gTlVMTCk7Ci0gICAgQVNTRVJUX1RSVUUoYmFyXyAhPSBOVUxMKTsKLSAgfQotCi0g
IGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAgY29uc3QgTWV0aG9kRGVz
Y3JpcHRvciogZm9vXzsKLSAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogYmFyXzsKLQotICBNb2Nr
VGVzdFNlcnZpY2UgbW9ja19zZXJ2aWNlXzsKLSAgTW9ja0NvbnRyb2xsZXIgbW9ja19jb250cm9s
bGVyXzsKLQotICBNb2NrUnBjQ2hhbm5lbCBtb2NrX2NoYW5uZWxfOwotICB1bml0dGVzdDo6VGVz
dFNlcnZpY2U6OlN0dWIgc3R1Yl87Ci0KLSAgLy8gSnVzdCBzbyB3ZSBkb24ndCBoYXZlIHRvIHJl
LWRlZmluZSB0aGVzZSB3aXRoIGV2ZXJ5IHRlc3QuCi0gIHVuaXR0ZXN0OjpGb29SZXF1ZXN0IGZv
b19yZXF1ZXN0XzsKLSAgdW5pdHRlc3Q6OkZvb1Jlc3BvbnNlIGZvb19yZXNwb25zZV87Ci0gIHVu
aXR0ZXN0OjpCYXJSZXF1ZXN0IGJhcl9yZXF1ZXN0XzsKLSAgdW5pdHRlc3Q6OkJhclJlc3BvbnNl
IGJhcl9yZXNwb25zZV87Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8Q2xvc3VyZT4g
ZG9uZV87Ci19OwotCi1URVNUX0YoR2VuZXJhdGVkU2VydmljZVRlc3QsIEdldERlc2NyaXB0b3Ip
IHsKLSAgLy8gVGVzdCB0aGF0IEdldERlc2NyaXB0b3IoKSB3b3Jrcy4KLQotICBFWFBFQ1RfRVEo
ZGVzY3JpcHRvcl8sIG1vY2tfc2VydmljZV8uR2V0RGVzY3JpcHRvcigpKTsKLX0KLQotVEVTVF9G
KEdlbmVyYXRlZFNlcnZpY2VUZXN0LCBHZXRDaGFubmVsKSB7Ci0gIEVYUEVDVF9FUSgmbW9ja19j
aGFubmVsXywgc3R1Yl8uY2hhbm5lbCgpKTsKLX0KLQotVEVTVF9GKEdlbmVyYXRlZFNlcnZpY2VU
ZXN0LCBPd25zQ2hhbm5lbCkgewotICBNb2NrUnBjQ2hhbm5lbCogY2hhbm5lbCA9IG5ldyBNb2Nr
UnBjQ2hhbm5lbDsKLSAgYm9vbCBkZXN0cm95ZWQgPSBmYWxzZTsKLSAgY2hhbm5lbC0+ZGVzdHJv
eWVkXyA9ICZkZXN0cm95ZWQ7Ci0KLSAgewotICAgIHVuaXR0ZXN0OjpUZXN0U2VydmljZTo6U3R1
YiBvd25pbmdfc3R1YihjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTZXJ2aWNlOjpTVFVCX09XTlNfQ0hBTk5FTCk7Ci0gICAgRVhQRUNUX0ZBTFNF
KGRlc3Ryb3llZCk7Ci0gIH0KLQotICBFWFBFQ1RfVFJVRShkZXN0cm95ZWQpOwotfQotCi1URVNU
X0YoR2VuZXJhdGVkU2VydmljZVRlc3QsIENhbGxNZXRob2QpIHsKLSAgLy8gVGVzdCB0aGF0IENh
bGxNZXRob2QoKSB3b3Jrcy4KLQotICAvLyBDYWxsIEZvbygpIHZpYSBDYWxsTWV0aG9kKCkuCi0g
IG1vY2tfc2VydmljZV8uQ2FsbE1ldGhvZChmb29fLCAmbW9ja19jb250cm9sbGVyXywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZmb29fcmVxdWVzdF8sICZmb29fcmVzcG9uc2VfLCBkb25l
Xy5nZXQoKSk7Ci0KLSAgQVNTRVJUX1RSVUUobW9ja19zZXJ2aWNlXy5jYWxsZWRfKTsKLQotICBF
WFBFQ1RfRVEoIkZvbyIgICAgICAgICAgICAsIG1vY2tfc2VydmljZV8ubWV0aG9kXyAgICApOwot
ICBFWFBFQ1RfRVEoJm1vY2tfY29udHJvbGxlcl8sIG1vY2tfc2VydmljZV8uY29udHJvbGxlcl8p
OwotICBFWFBFQ1RfRVEoJmZvb19yZXF1ZXN0XyAgICAsIG1vY2tfc2VydmljZV8ucmVxdWVzdF8g
ICApOwotICBFWFBFQ1RfRVEoJmZvb19yZXNwb25zZV8gICAsIG1vY2tfc2VydmljZV8ucmVzcG9u
c2VfICApOwotICBFWFBFQ1RfRVEoZG9uZV8uZ2V0KCkgICAgICAsIG1vY2tfc2VydmljZV8uZG9u
ZV8gICAgICApOwotCi0gIC8vIFRyeSBhZ2FpbiwgYnV0IGNhbGwgQmFyKCkgaW5zdGVhZC4KLSAg
bW9ja19zZXJ2aWNlXy5SZXNldCgpOwotICBtb2NrX3NlcnZpY2VfLkNhbGxNZXRob2QoYmFyXywg
Jm1vY2tfY29udHJvbGxlcl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmYmFyX3JlcXVl
c3RfLCAmYmFyX3Jlc3BvbnNlXywgZG9uZV8uZ2V0KCkpOwotCi0gIEFTU0VSVF9UUlVFKG1vY2tf
c2VydmljZV8uY2FsbGVkXyk7Ci0gIEVYUEVDVF9FUSgiQmFyIiwgbW9ja19zZXJ2aWNlXy5tZXRo
b2RfKTsKLX0KLQotVEVTVF9GKEdlbmVyYXRlZFNlcnZpY2VUZXN0LCBDYWxsTWV0aG9kVHlwZUZh
aWx1cmUpIHsKLSAgLy8gVmVyaWZ5IGRlYXRoIGlmIHdlIGNhbGwgRm9vKCkgd2l0aCBCYXIncyBt
ZXNzYWdlIHR5cGVzLgotCi0jaWZkZWYgUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QgIC8vIGRlYXRo
IHRlc3RzIGRvIG5vdCB3b3JrIG9uIFdpbmRvd3MgeWV0Ci0gIEVYUEVDVF9ERUJVR19ERUFUSCgK
LSAgICBtb2NrX3NlcnZpY2VfLkNhbGxNZXRob2QoZm9vXywgJm1vY2tfY29udHJvbGxlcl8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb29fcmVxdWVzdF8sICZiYXJfcmVzcG9uc2Vf
LCBkb25lXy5nZXQoKSksCi0gICAgImR5bmFtaWNfY2FzdCIpOwotCi0gIG1vY2tfc2VydmljZV8u
UmVzZXQoKTsKLSAgRVhQRUNUX0RFQlVHX0RFQVRIKAotICAgIG1vY2tfc2VydmljZV8uQ2FsbE1l
dGhvZChmb29fLCAmbW9ja19jb250cm9sbGVyXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmJhcl9yZXF1ZXN0XywgJmZvb19yZXNwb25zZV8sIGRvbmVfLmdldCgpKSwKLSAgICAiZHlu
YW1pY19jYXN0Iik7Ci0jZW5kaWYgIC8vIFBST1RPQlVGX0hBU19ERUFUSF9URVNUCi19Ci0KLVRF
U1RfRihHZW5lcmF0ZWRTZXJ2aWNlVGVzdCwgR2V0UHJvdG90eXBlcykgewotICAvLyBUZXN0IEdl
dHtSZXF1ZXN0LFJlc3BvbnNlfVByb3RvdHlwZSgpIG1ldGhvZHMuCi0KLSAgRVhQRUNUX0VRKCZ1
bml0dGVzdDo6Rm9vUmVxdWVzdDo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAgICAgICAgJm1v
Y2tfc2VydmljZV8uR2V0UmVxdWVzdFByb3RvdHlwZShmb29fKSk7Ci0gIEVYUEVDVF9FUSgmdW5p
dHRlc3Q6OkJhclJlcXVlc3Q6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZtb2Nr
X3NlcnZpY2VfLkdldFJlcXVlc3RQcm90b3R5cGUoYmFyXykpOwotCi0gIEVYUEVDVF9FUSgmdW5p
dHRlc3Q6OkZvb1Jlc3BvbnNlOjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmbW9j
a19zZXJ2aWNlXy5HZXRSZXNwb25zZVByb3RvdHlwZShmb29fKSk7Ci0gIEVYUEVDVF9FUSgmdW5p
dHRlc3Q6OkJhclJlc3BvbnNlOjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmbW9j
a19zZXJ2aWNlXy5HZXRSZXNwb25zZVByb3RvdHlwZShiYXJfKSk7Ci19Ci0KLVRFU1RfRihHZW5l
cmF0ZWRTZXJ2aWNlVGVzdCwgU3R1YikgewotICAvLyBUZXN0IHRoYXQgdGhlIHN0dWIgY2xhc3Mg
d29ya3MuCi0KLSAgLy8gQ2FsbCBGb28oKSB2aWEgdGhlIHN0dWIuCi0gIHN0dWJfLkZvbygmbW9j
a19jb250cm9sbGVyXywgJmZvb19yZXF1ZXN0XywgJmZvb19yZXNwb25zZV8sIGRvbmVfLmdldCgp
KTsKLQotICBBU1NFUlRfVFJVRShtb2NrX2NoYW5uZWxfLmNhbGxlZF8pOwotCi0gIEVYUEVDVF9F
UShmb29fICAgICAgICAgICAgICwgbW9ja19jaGFubmVsXy5tZXRob2RfICAgICk7Ci0gIEVYUEVD
VF9FUSgmbW9ja19jb250cm9sbGVyXywgbW9ja19jaGFubmVsXy5jb250cm9sbGVyXyk7Ci0gIEVY
UEVDVF9FUSgmZm9vX3JlcXVlc3RfICAgICwgbW9ja19jaGFubmVsXy5yZXF1ZXN0XyAgICk7Ci0g
IEVYUEVDVF9FUSgmZm9vX3Jlc3BvbnNlXyAgICwgbW9ja19jaGFubmVsXy5yZXNwb25zZV8gICk7
Ci0gIEVYUEVDVF9FUShkb25lXy5nZXQoKSAgICAgICwgbW9ja19jaGFubmVsXy5kb25lXyAgICAg
ICk7Ci0KLSAgLy8gQ2FsbCBCYXIoKSB2aWEgdGhlIHN0dWIuCi0gIG1vY2tfY2hhbm5lbF8uUmVz
ZXQoKTsKLSAgc3R1Yl8uQmFyKCZtb2NrX2NvbnRyb2xsZXJfLCAmYmFyX3JlcXVlc3RfLCAmYmFy
X3Jlc3BvbnNlXywgZG9uZV8uZ2V0KCkpOwotCi0gIEFTU0VSVF9UUlVFKG1vY2tfY2hhbm5lbF8u
Y2FsbGVkXyk7Ci0gIEVYUEVDVF9FUShiYXJfLCBtb2NrX2NoYW5uZWxfLm1ldGhvZF8pOwotfQot
Ci1URVNUX0YoR2VuZXJhdGVkU2VydmljZVRlc3QsIE5vdEltcGxlbWVudGVkKSB7Ci0gIC8vIFRl
c3QgdGhhdCBmYWlsaW5nIHRvIGltcGxlbWVudCBhIG1ldGhvZCBvZiBhIHNlcnZpY2UgY2F1c2Vz
IGl0IHRvIGZhaWwKLSAgLy8gd2l0aCBhICJub3QgaW1wbGVtZW50ZWQiIGVycm9yIG1lc3NhZ2Uu
Ci0KLSAgLy8gQSBzZXJ2aWNlIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50IGFueSBtZXRob2RzLgot
ICBjbGFzcyBVbmltcGxlbWVudGVkU2VydmljZSA6IHB1YmxpYyB1bml0dGVzdDo6VGVzdFNlcnZp
Y2UgewotICAgcHVibGljOgotICAgIFVuaW1wbGVtZW50ZWRTZXJ2aWNlKCkge30KLSAgfTsKLQot
ICBVbmltcGxlbWVudGVkU2VydmljZSB1bmltcGxlbWVudGVkX3NlcnZpY2U7Ci0KLSAgLy8gQW5k
IGEgY29udHJvbGxlciB3aGljaCBleHBlY3RzIHRvIGdldCBhICJub3QgaW1wbGVtZW50ZWQiIGVy
cm9yLgotICBjbGFzcyBFeHBlY3RVbmltcGxlbWVudGVkQ29udHJvbGxlciA6IHB1YmxpYyBNb2Nr
Q29udHJvbGxlciB7Ci0gICBwdWJsaWM6Ci0gICAgRXhwZWN0VW5pbXBsZW1lbnRlZENvbnRyb2xs
ZXIoKSA6IGNhbGxlZF8oZmFsc2UpIHt9Ci0KLSAgICB2b2lkIFNldEZhaWxlZChjb25zdCBzdHJp
bmcmIHJlYXNvbikgewotICAgICAgRVhQRUNUX0ZBTFNFKGNhbGxlZF8pOwotICAgICAgY2FsbGVk
XyA9IHRydWU7Ci0gICAgICBFWFBFQ1RfRVEoIk1ldGhvZCBGb28oKSBub3QgaW1wbGVtZW50ZWQu
IiwgcmVhc29uKTsKLSAgICB9Ci0KLSAgICBib29sIGNhbGxlZF87Ci0gIH07Ci0KLSAgRXhwZWN0
VW5pbXBsZW1lbnRlZENvbnRyb2xsZXIgY29udHJvbGxlcjsKLQotICAvLyBDYWxsIEZvby4KLSAg
dW5pbXBsZW1lbnRlZF9zZXJ2aWNlLkZvbygmY29udHJvbGxlciwgJmZvb19yZXF1ZXN0XywgJmZv
b19yZXNwb25zZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZV8uZ2V0KCkpOwot
Ci0gIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIuY2FsbGVkXyk7Ci19Ci0KLS8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotY2xhc3MgT25lb2ZUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoK
LSAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICB9Ci0KLSAgdm9pZCBFeHBlY3RFbnVtQ2FzZXNX
b3JrKGNvbnN0IHVuaXR0ZXN0OjpUZXN0T25lb2YyICZtZXNzYWdlKSB7Ci0gICAgc3dpdGNoICht
ZXNzYWdlLmZvb19jYXNlKCkpIHsKLSAgICAgIGNhc2UgdW5pdHRlc3Q6OlRlc3RPbmVvZjI6OmtG
b29JbnQ6Ci0gICAgICAgIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX2Zvb19pbnQoKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSB1bml0dGVzdDo6VGVzdE9uZW9mMjo6a0Zvb1N0cmluZzoK
LSAgICAgICAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9vX3N0cmluZygpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIHVuaXR0ZXN0OjpUZXN0T25lb2YyOjprRm9vQ29yZDoKLSAgICAg
ICAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9vX2NvcmQoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSB1bml0dGVzdDo6VGVzdE9uZW9mMjo6a0Zvb1N0cmluZ1BpZWNlOgotICAgICAg
ICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19mb29fc3RyaW5nX3BpZWNlKCkpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgdW5pdHRlc3Q6OlRlc3RPbmVvZjI6OmtGb29CeXRlczoKLSAgICAg
ICAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9vX2J5dGVzKCkpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgdW5pdHRlc3Q6OlRlc3RPbmVvZjI6OmtGb29FbnVtOgotICAgICAgICBFWFBF
Q1RfVFJVRShtZXNzYWdlLmhhc19mb29fZW51bSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIHVuaXR0ZXN0OjpUZXN0T25lb2YyOjprRm9vTWVzc2FnZToKLSAgICAgICAgRVhQRUNUX1RS
VUUobWVzc2FnZS5oYXNfZm9vX21lc3NhZ2UoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSB1bml0dGVzdDo6VGVzdE9uZW9mMjo6a0Zvb2dyb3VwOgotICAgICAgICBFWFBFQ1RfVFJVRSht
ZXNzYWdlLmhhc19mb29ncm91cCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIHVuaXR0
ZXN0OjpUZXN0T25lb2YyOjprRm9vTGF6eU1lc3NhZ2U6Ci0gICAgICAgIEVYUEVDVF9UUlVFKG1l
c3NhZ2UuaGFzX2Zvb19sYXp5X21lc3NhZ2UoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSB1bml0dGVzdDo6VGVzdE9uZW9mMjo6Rk9PX05PVF9TRVQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgfQotfTsKLQotVEVTVF9GKE9uZW9mVGVzdCwgU2V0dGluZ09uZUZpZWxkQ2xlYXJzT3Ro
ZXJzKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0T25lb2YyIG1lc3NhZ2U7Ci0KLSAgbWVzc2FnZS5zZXRf
Zm9vX2ludCgxMjMpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19mb29faW50KCkpOwotICBU
ZXN0VXRpbDo6RXhwZWN0QXRNb3N0T25lRmllbGRTZXRJbk9uZW9mKG1lc3NhZ2UpOwotCi0gIG1l
c3NhZ2Uuc2V0X2Zvb19zdHJpbmcoImZvbyIpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19m
b29fc3RyaW5nKCkpOwotICBUZXN0VXRpbDo6RXhwZWN0QXRNb3N0T25lRmllbGRTZXRJbk9uZW9m
KG1lc3NhZ2UpOwotCi0KLSAgbWVzc2FnZS5zZXRfZm9vX2J5dGVzKCJxdXgiKTsKLSAgRVhQRUNU
X1RSVUUobWVzc2FnZS5oYXNfZm9vX2J5dGVzKCkpOwotICBUZXN0VXRpbDo6RXhwZWN0QXRNb3N0
T25lRmllbGRTZXRJbk9uZW9mKG1lc3NhZ2UpOwotCi0gIG1lc3NhZ2Uuc2V0X2Zvb19lbnVtKHVu
aXR0ZXN0OjpUZXN0T25lb2YyOjpGT08pOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19mb29f
ZW51bSgpKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEF0TW9zdE9uZUZpZWxkU2V0SW5PbmVvZihtZXNz
YWdlKTsKLQotICBtZXNzYWdlLm11dGFibGVfZm9vX21lc3NhZ2UoKS0+c2V0X3F1eF9pbnQoMjM0
KTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9vX21lc3NhZ2UoKSk7Ci0gIFRlc3RVdGls
OjpFeHBlY3RBdE1vc3RPbmVGaWVsZFNldEluT25lb2YobWVzc2FnZSk7Ci0KLSAgbWVzc2FnZS5t
dXRhYmxlX2Zvb2dyb3VwKCktPnNldF9hKDM0NSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFz
X2Zvb2dyb3VwKCkpOwotICBUZXN0VXRpbDo6RXhwZWN0QXRNb3N0T25lRmllbGRTZXRJbk9uZW9m
KG1lc3NhZ2UpOwotCi0KLSAgLy8gd2UgcmVwZWF0IHRoaXMgYmVjYXVzZSB3ZSBkaWRuJ3QgdGVz
dCBpZiB0aGlzIHByb3Blcmx5IGNsZWFycyBvdGhlciBmaWVsZHMKLSAgLy8gYXQgdGhlIGJlZ2lu
bmluZy4KLSAgbWVzc2FnZS5zZXRfZm9vX2ludCgxMjMpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lmhhc19mb29faW50KCkpOwotICBUZXN0VXRpbDo6RXhwZWN0QXRNb3N0T25lRmllbGRTZXRJbk9u
ZW9mKG1lc3NhZ2UpOwotfQotCi1URVNUX0YoT25lb2ZUZXN0LCBFbnVtQ2FzZXMpIHsKLSAgdW5p
dHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTsKLQotICBtZXNzYWdlLnNldF9mb29faW50KDEyMyk7
Ci0gIEV4cGVjdEVudW1DYXNlc1dvcmsobWVzc2FnZSk7Ci0gIG1lc3NhZ2Uuc2V0X2Zvb19zdHJp
bmcoImZvbyIpOwotICBFeHBlY3RFbnVtQ2FzZXNXb3JrKG1lc3NhZ2UpOwotICBtZXNzYWdlLnNl
dF9mb29fYnl0ZXMoInF1eCIpOwotICBFeHBlY3RFbnVtQ2FzZXNXb3JrKG1lc3NhZ2UpOwotICBt
ZXNzYWdlLnNldF9mb29fZW51bSh1bml0dGVzdDo6VGVzdE9uZW9mMjo6Rk9PKTsKLSAgRXhwZWN0
RW51bUNhc2VzV29yayhtZXNzYWdlKTsKLSAgbWVzc2FnZS5tdXRhYmxlX2Zvb19tZXNzYWdlKCkt
PnNldF9xdXhfaW50KDIzNCk7Ci0gIEV4cGVjdEVudW1DYXNlc1dvcmsobWVzc2FnZSk7Ci0gIG1l
c3NhZ2UubXV0YWJsZV9mb29ncm91cCgpLT5zZXRfYSgzNDUpOwotICBFeHBlY3RFbnVtQ2FzZXNX
b3JrKG1lc3NhZ2UpOwotfQotCi1URVNUX0YoT25lb2ZUZXN0LCBQcmltaXRpdmVUeXBlKSB7Ci0g
IHVuaXR0ZXN0OjpUZXN0T25lb2YyIG1lc3NhZ2U7Ci0gIC8vIFVuc2V0IGZpZWxkIHJldHVybnMg
ZGVmYXVsdCB2YWx1ZQotICBFWFBFQ1RfRVEobWVzc2FnZS5mb29faW50KCksIDApOwotCi0gIG1l
c3NhZ2Uuc2V0X2Zvb19pbnQoMTIzKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9vX2lu
dCgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UuZm9vX2ludCgpLCAxMjMpOwotICBtZXNzYWdlLmNs
ZWFyX2Zvb19pbnQoKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19pbnQoKSk7Ci19
Ci0KLVRFU1RfRihPbmVvZlRlc3QsIEVudW1UeXBlKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0T25lb2Yy
IG1lc3NhZ2U7Ci0gIC8vIFVuc2V0IGZpZWxkIHJldHVybnMgZGVmYXVsdCB2YWx1ZQotICBFWFBF
Q1RfRVEobWVzc2FnZS5mb29fZW51bSgpLCAxKTsKLQotICBtZXNzYWdlLnNldF9mb29fZW51bSh1
bml0dGVzdDo6VGVzdE9uZW9mMjo6Rk9PKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9v
X2VudW0oKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLmZvb19lbnVtKCksIHVuaXR0ZXN0OjpUZXN0
T25lb2YyOjpGT08pOwotICBtZXNzYWdlLmNsZWFyX2Zvb19lbnVtKCk7Ci0gIEVYUEVDVF9GQUxT
RShtZXNzYWdlLmhhc19mb29fZW51bSgpKTsKLX0KLQotVEVTVF9GKE9uZW9mVGVzdCwgU2V0U3Ry
aW5nKSB7Ci0gIC8vIENoZWNrIHRoYXQgc2V0dGluZyBhIHN0cmluZyBmaWVsZCBpbiB2YXJpb3Vz
IHdheXMgd29ya3MKLSAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTsKLQotICAvLyBVbnNl
dCBmaWVsZCByZXR1cm5zIGRlZmF1bHQgdmFsdWUKLSAgRVhQRUNUX0VRKG1lc3NhZ2UuZm9vX3N0
cmluZygpLCAiIik7Ci0KLSAgbWVzc2FnZS5zZXRfZm9vX3N0cmluZygiZm9vIik7Ci0gIEVYUEVD
VF9UUlVFKG1lc3NhZ2UuaGFzX2Zvb19zdHJpbmcoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLmZv
b19zdHJpbmcoKSwgImZvbyIpOwotICBtZXNzYWdlLmNsZWFyX2Zvb19zdHJpbmcoKTsKLSAgRVhQ
RUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19zdHJpbmcoKSk7Ci0KLSAgbWVzc2FnZS5zZXRfZm9v
X3N0cmluZyhzdHJpbmcoImJhciIpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9vX3N0
cmluZygpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UuZm9vX3N0cmluZygpLCAiYmFyIik7Ci0gIG1l
c3NhZ2UuY2xlYXJfZm9vX3N0cmluZygpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZm9v
X3N0cmluZygpKTsKLQotCi0gIG1lc3NhZ2Uuc2V0X2Zvb19zdHJpbmcoInF1eCIsIDMpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlLmhhc19mb29fc3RyaW5nKCkpOwotICBFWFBFQ1RfRVEobWVzc2Fn
ZS5mb29fc3RyaW5nKCksICJxdXgiKTsKLSAgbWVzc2FnZS5jbGVhcl9mb29fc3RyaW5nKCk7Ci0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19mb29fc3RyaW5nKCkpOwotCi0gIG1lc3NhZ2UubXV0
YWJsZV9mb29fc3RyaW5nKCktPmFzc2lnbigicXV1eCIpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lmhhc19mb29fc3RyaW5nKCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZS5mb29fc3RyaW5nKCksICJx
dXV4Iik7Ci0gIG1lc3NhZ2UuY2xlYXJfZm9vX3N0cmluZygpOwotICBFWFBFQ1RfRkFMU0UobWVz
c2FnZS5oYXNfZm9vX3N0cmluZygpKTsKLQotICBtZXNzYWdlLnNldF9mb29fc3RyaW5nKCJjb3Jn
ZSIpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19mb29fc3RyaW5nKCkpOwotICBFWFBFQ1Rf
RVEobWVzc2FnZS5mb29fc3RyaW5nKCksICJjb3JnZSIpOwotICBtZXNzYWdlLmNsZWFyX2Zvb19z
dHJpbmcoKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19zdHJpbmcoKSk7Ci19Ci0K
LVRFU1RfRihPbmVvZlRlc3QsIFJlbGVhc2VTdHJpbmcpIHsKLSAgLy8gQ2hlY2sgdGhhdCByZWxl
YXNlX2ZvbygpIHN0YXJ0cyBvdXQgTlVMTCwgYW5kIGdpdmVzIHVzIGEgdmFsdWUKLSAgLy8gdGhh
dCB3ZSBjYW4gZGVsZXRlIGFmdGVyIGl0J3MgYmVlbiBzZXQuCi0gIHVuaXR0ZXN0OjpUZXN0T25l
b2YyIG1lc3NhZ2U7Ci0KLSAgRVhQRUNUX0VRKE5VTEwsIG1lc3NhZ2UucmVsZWFzZV9mb29fc3Ry
aW5nKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZm9vX3N0cmluZygpKTsKLQotICBt
ZXNzYWdlLnNldF9mb29fc3RyaW5nKCJibGFoIik7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFz
X2Zvb19zdHJpbmcoKSk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8c3RyaW5nPiBz
dHIobWVzc2FnZS5yZWxlYXNlX2Zvb19zdHJpbmcoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdl
Lmhhc19mb29fc3RyaW5nKCkpOwotICBBU1NFUlRfVFJVRShzdHIgIT0gTlVMTCk7Ci0gIEVYUEVD
VF9FUSgiYmxhaCIsICpzdHIpOwotCi0gIEVYUEVDVF9FUShOVUxMLCBtZXNzYWdlLnJlbGVhc2Vf
Zm9vX3N0cmluZygpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19zdHJpbmcoKSk7
Ci19Ci0KLVRFU1RfRihPbmVvZlRlc3QsIFNldEFsbG9jYXRlZFN0cmluZykgewotICAvLyBDaGVj
ayB0aGF0IHNldF9hbGxvY2F0ZWRfZm9vKCkgd29ya3MgZm9yIHN0cmluZ3MuCi0gIHVuaXR0ZXN0
OjpUZXN0T25lb2YyIG1lc3NhZ2U7Ci0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19z
dHJpbmcoKSk7Ci0gIGNvbnN0IHN0cmluZyBrSGVsbG8oImhlbGxvIik7Ci0gIG1lc3NhZ2Uuc2V0
X2Zvb19zdHJpbmcoa0hlbGxvKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9vX3N0cmlu
ZygpKTsKLQotICBtZXNzYWdlLnNldF9hbGxvY2F0ZWRfZm9vX3N0cmluZyhOVUxMKTsKLSAgRVhQ
RUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19zdHJpbmcoKSk7Ci0gIEVYUEVDVF9FUSgiIiwgbWVz
c2FnZS5mb29fc3RyaW5nKCkpOwotCi0gIG1lc3NhZ2Uuc2V0X2FsbG9jYXRlZF9mb29fc3RyaW5n
KG5ldyBzdHJpbmcoa0hlbGxvKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX2Zvb19zdHJp
bmcoKSk7Ci0gIEVYUEVDVF9FUShrSGVsbG8sIG1lc3NhZ2UuZm9vX3N0cmluZygpKTsKLX0KLQot
Ci1URVNUX0YoT25lb2ZUZXN0LCBTZXRNZXNzYWdlKSB7Ci0gIC8vIENoZWNrIHRoYXQgc2V0dGlu
ZyBhIG1lc3NhZ2UgZmllbGQgd29ya3MKLSAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTsK
LQotICAvLyBVbnNldCBmaWVsZCByZXR1cm5zIGRlZmF1bHQgaW5zdGFuY2UKLSAgRVhQRUNUX0VR
KCZtZXNzYWdlLmZvb19tZXNzYWdlKCksCi0gICAgICAgICAgICAmdW5pdHRlc3Q6OlRlc3RPbmVv
ZjJfTmVzdGVkTWVzc2FnZTo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAgRVhQRUNUX0VRKG1lc3Nh
Z2UuZm9vX21lc3NhZ2UoKS5xdXhfaW50KCksIDApOwotCi0gIG1lc3NhZ2UubXV0YWJsZV9mb29f
bWVzc2FnZSgpLT5zZXRfcXV4X2ludCgyMzQpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19m
b29fbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UuZm9vX21lc3NhZ2UoKS5xdXhfaW50
KCksIDIzNCk7Ci0gIG1lc3NhZ2UuY2xlYXJfZm9vX21lc3NhZ2UoKTsKLSAgRVhQRUNUX0ZBTFNF
KG1lc3NhZ2UuaGFzX2Zvb19tZXNzYWdlKCkpOwotfQotCi1URVNUX0YoT25lb2ZUZXN0LCBSZWxl
YXNlTWVzc2FnZSkgewotICAvLyBDaGVjayB0aGF0IHJlbGVhc2VfZm9vKCkgc3RhcnRzIG91dCBO
VUxMLCBhbmQgZ2l2ZXMgdXMgYSB2YWx1ZQotICAvLyB0aGF0IHdlIGNhbiBkZWxldGUgYWZ0ZXIg
aXQncyBiZWVuIHNldC4KLSAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTsKLQotICBFWFBF
Q1RfRVEoTlVMTCwgbWVzc2FnZS5yZWxlYXNlX2Zvb19tZXNzYWdlKCkpOwotICBFWFBFQ1RfRkFM
U0UobWVzc2FnZS5oYXNfZm9vX21lc3NhZ2UoKSk7Ci0KLSAgbWVzc2FnZS5tdXRhYmxlX2Zvb19t
ZXNzYWdlKCktPnNldF9xdXhfaW50KDEpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19mb29f
bWVzc2FnZSgpKTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjx1bml0dGVzdDo6VGVz
dE9uZW9mMl9OZXN0ZWRNZXNzYWdlPiBtZXMoCi0gICAgICBtZXNzYWdlLnJlbGVhc2VfZm9vX21l
c3NhZ2UoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19mb29fbWVzc2FnZSgpKTsKLSAg
QVNTRVJUX1RSVUUobWVzICE9IE5VTEwpOwotICBFWFBFQ1RfRVEoMSwgbWVzLT5xdXhfaW50KCkp
OwotCi0gIEVYUEVDVF9FUShOVUxMLCBtZXNzYWdlLnJlbGVhc2VfZm9vX21lc3NhZ2UoKSk7Ci0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19mb29fbWVzc2FnZSgpKTsKLX0KLQotVEVTVF9GKE9u
ZW9mVGVzdCwgU2V0QWxsb2NhdGVkTWVzc2FnZSkgewotICAvLyBDaGVjayB0aGF0IHNldF9hbGxv
Y2F0ZWRfZm9vKCkgd29ya3MgZm9yIG1lc3NhZ2VzLgotICB1bml0dGVzdDo6VGVzdE9uZW9mMiBt
ZXNzYWdlOwotCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19mb29fbWVzc2FnZSgpKTsKLQot
ICBtZXNzYWdlLm11dGFibGVfZm9vX21lc3NhZ2UoKS0+c2V0X3F1eF9pbnQoMSk7Ci0gIEVYUEVD
VF9UUlVFKG1lc3NhZ2UuaGFzX2Zvb19tZXNzYWdlKCkpOwotCi0gIG1lc3NhZ2Uuc2V0X2FsbG9j
YXRlZF9mb29fbWVzc2FnZShOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19t
ZXNzYWdlKCkpOwotICBFWFBFQ1RfRVEoJm1lc3NhZ2UuZm9vX21lc3NhZ2UoKSwKLSAgICAgICAg
ICAgICZ1bml0dGVzdDo6VGVzdE9uZW9mMl9OZXN0ZWRNZXNzYWdlOjpkZWZhdWx0X2luc3RhbmNl
KCkpOwotCi0gIG1lc3NhZ2UubXV0YWJsZV9mb29fbWVzc2FnZSgpLT5zZXRfcXV4X2ludCgxKTsK
LSAgdW5pdHRlc3Q6OlRlc3RPbmVvZjJfTmVzdGVkTWVzc2FnZSogbWVzID0gbWVzc2FnZS5yZWxl
YXNlX2Zvb19tZXNzYWdlKCk7Ci0gIEFTU0VSVF9UUlVFKG1lcyAhPSBOVUxMKTsKLSAgRVhQRUNU
X0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19tZXNzYWdlKCkpOwotCi0gIG1lc3NhZ2Uuc2V0X2FsbG9j
YXRlZF9mb29fbWVzc2FnZShtZXMpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19mb29fbWVz
c2FnZSgpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UuZm9vX21lc3NhZ2UoKS5xdXhfaW50KCkp
OwotfQotCi0KLVRFU1RfRihPbmVvZlRlc3QsIENsZWFyKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0T25l
b2YyIG1lc3NhZ2U7Ci0KLSAgbWVzc2FnZS5zZXRfZm9vX2ludCgxKTsKLSAgRVhQRUNUX1RSVUUo
bWVzc2FnZS5oYXNfZm9vX2ludCgpKTsKLSAgbWVzc2FnZS5jbGVhcl9mb29faW50KCk7Ci0gIEVY
UEVDVF9GQUxTRShtZXNzYWdlLmhhc19mb29faW50KCkpOwotfQotCi1URVNUX0YoT25lb2ZUZXN0
LCBEZWZhdWx0cykgewotICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtZXNzYWdlOwotCi0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLmhhc19mb29faW50KCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZS5mb29f
aW50KCksIDApOwotCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19mb29fc3RyaW5nKCkpOwot
ICBFWFBFQ1RfRVEobWVzc2FnZS5mb29fc3RyaW5nKCksICIiKTsKLQotCi0gIEVYUEVDVF9GQUxT
RShtZXNzYWdlLmhhc19mb29fYnl0ZXMoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLmZvb19ieXRl
cygpLCAiIik7Ci0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19lbnVtKCkpOwotICBF
WFBFQ1RfRVEobWVzc2FnZS5mb29fZW51bSgpLCAxKTsKLQotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5oYXNfZm9vX21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLmZvb19tZXNzYWdlKCku
cXV4X2ludCgpLCAwKTsKLQotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZm9vZ3JvdXAoKSk7
Ci0gIEVYUEVDVF9FUShtZXNzYWdlLmZvb2dyb3VwKCkuYSgpLCAwKTsKLQotCi0gIEVYUEVDVF9G
QUxTRShtZXNzYWdlLmhhc19iYXJfaW50KCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZS5iYXJfaW50
KCksIDUpOwotCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19iYXJfc3RyaW5nKCkpOwotICBF
WFBFQ1RfRVEobWVzc2FnZS5iYXJfc3RyaW5nKCksICJTVFJJTkciKTsKLQotCi0gIEVYUEVDVF9G
QUxTRShtZXNzYWdlLmhhc19iYXJfYnl0ZXMoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLmJhcl9i
eXRlcygpLCAiQllURVMiKTsKLQotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfYmFyX2VudW0o
KSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLmJhcl9lbnVtKCksIDIpOwotfQotCi1URVNUX0YoT25l
b2ZUZXN0LCBTd2FwV2l0aEVtcHR5KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0T25lb2YyIG1lc3NhZ2Ux
LCBtZXNzYWdlMjsKLSAgbWVzc2FnZTEuc2V0X2Zvb19zdHJpbmcoIkZPTyIpOwotICBFWFBFQ1Rf
VFJVRShtZXNzYWdlMS5oYXNfZm9vX3N0cmluZygpKTsKLSAgbWVzc2FnZTEuU3dhcCgmbWVzc2Fn
ZTIpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZTEuaGFzX2Zvb19zdHJpbmcoKSk7Ci0gIEVYUEVD
VF9UUlVFKG1lc3NhZ2UyLmhhc19mb29fc3RyaW5nKCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZTIu
Zm9vX3N0cmluZygpLCAiRk9PIik7Ci19Ci0KLVRFU1RfRihPbmVvZlRlc3QsIFN3YXBXaXRoU2Vs
ZikgewotICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtZXNzYWdlOwotICBtZXNzYWdlLnNldF9mb29f
c3RyaW5nKCJGT08iKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9vX3N0cmluZygpKTsK
LSAgbWVzc2FnZS5Td2FwKCZtZXNzYWdlKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9v
X3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UuZm9vX3N0cmluZygpLCAiRk9PIik7Ci19
Ci0KLVRFU1RfRihPbmVvZlRlc3QsIFN3YXBCb3RoSGFzRmllbGRzKSB7Ci0gIHVuaXR0ZXN0OjpU
ZXN0T25lb2YyIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLQotICBtZXNzYWdlMS5zZXRfZm9vX3N0cmlu
ZygiRk9PIik7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UxLmhhc19mb29fc3RyaW5nKCkpOwotICBt
ZXNzYWdlMi5tdXRhYmxlX2Zvb19tZXNzYWdlKCktPnNldF9xdXhfaW50KDEpOwotICBFWFBFQ1Rf
VFJVRShtZXNzYWdlMi5oYXNfZm9vX21lc3NhZ2UoKSk7Ci0KLSAgbWVzc2FnZTEuU3dhcCgmbWVz
c2FnZTIpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZTEuaGFzX2Zvb19zdHJpbmcoKSk7Ci0gIEVY
UEVDVF9GQUxTRShtZXNzYWdlMi5oYXNfZm9vX21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9UUlVFKG1l
c3NhZ2UxLmhhc19mb29fbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UxLmZvb19tZXNz
YWdlKCkucXV4X2ludCgpLCAxKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZTIuaGFzX2Zvb19zdHJp
bmcoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlMi5mb29fc3RyaW5nKCksICJGT08iKTsKLX0KLQot
VEVTVF9GKE9uZW9mVGVzdCwgQ29weUNvbnN0cnVjdG9yKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0T25l
b2YyIG1lc3NhZ2UxOwotICBtZXNzYWdlMS5zZXRfZm9vX2J5dGVzKCJGT08iKTsKLQotICB1bml0
dGVzdDo6VGVzdE9uZW9mMiBtZXNzYWdlMihtZXNzYWdlMSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3Nh
Z2UyLmhhc19mb29fYnl0ZXMoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlMi5mb29fYnl0ZXMoKSwg
IkZPTyIpOwotfQotCi1URVNUX0YoT25lb2ZUZXN0LCBDb3B5RnJvbSkgewotICB1bml0dGVzdDo6
VGVzdE9uZW9mMiBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0gIG1lc3NhZ2UxLnNldF9mb29fZW51bSh1
bml0dGVzdDo6VGVzdE9uZW9mMjo6QkFSKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZTEuaGFzX2Zv
b19lbnVtKCkpOwotCi0gIG1lc3NhZ2UyLkNvcHlGcm9tKG1lc3NhZ2UxKTsKLSAgRVhQRUNUX1RS
VUUobWVzc2FnZTIuaGFzX2Zvb19lbnVtKCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZTIuZm9vX2Vu
dW0oKSwgdW5pdHRlc3Q6OlRlc3RPbmVvZjI6OkJBUik7Ci0KLSAgLy8gQ29weWluZyBmcm9tIHNl
bGYgc2hvdWxkIGJlIGEgbm8tb3AuCi0gIG1lc3NhZ2UyLkNvcHlGcm9tKG1lc3NhZ2UyKTsKLSAg
RVhQRUNUX1RSVUUobWVzc2FnZTIuaGFzX2Zvb19lbnVtKCkpOwotICBFWFBFQ1RfRVEobWVzc2Fn
ZTIuZm9vX2VudW0oKSwgdW5pdHRlc3Q6OlRlc3RPbmVvZjI6OkJBUik7Ci19Ci0KLVRFU1RfRihP
bmVvZlRlc3QsIENvcHlBc3NpZ25tZW50T3BlcmF0b3IpIHsKLSAgdW5pdHRlc3Q6OlRlc3RPbmVv
ZjIgbWVzc2FnZTE7Ci0gIG1lc3NhZ2UxLm11dGFibGVfZm9vX21lc3NhZ2UoKS0+c2V0X3F1eF9p
bnQoMTIzKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZTEuaGFzX2Zvb19tZXNzYWdlKCkpOwotCi0g
IHVuaXR0ZXN0OjpUZXN0T25lb2YyIG1lc3NhZ2UyOwotICBtZXNzYWdlMiA9IG1lc3NhZ2UxOwot
ICBFWFBFQ1RfRVEobWVzc2FnZTIuZm9vX21lc3NhZ2UoKS5xdXhfaW50KCksIDEyMyk7Ci0KLSAg
Ly8gTWFrZSBzdXJlIHRoYXQgc2VsZi1hc3NpZ25tZW50IGRvZXMgc29tZXRoaW5nIHNhbmUuCi0g
IG1lc3NhZ2UyID0gbWVzc2FnZTI7Ci0gIEVYUEVDVF9FUShtZXNzYWdlMi5mb29fbWVzc2FnZSgp
LnF1eF9pbnQoKSwgMTIzKTsKLX0KLQotVEVTVF9GKE9uZW9mVGVzdCwgVXBjYXN0Q29weUZyb20p
IHsKLSAgLy8gVGVzdCB0aGUgQ29weUZyb20gbWV0aG9kIHRoYXQgdGFrZXMgaW4gdGhlIGdlbmVy
aWMgY29uc3QgTWVzc2FnZSYKLSAgLy8gcGFyYW1ldGVyLgotICB1bml0dGVzdDo6VGVzdE9uZW9m
MiBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0gIG1lc3NhZ2UxLm11dGFibGVfZm9vZ3JvdXAoKS0+c2V0
X2EoMTIzKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZTEuaGFzX2Zvb2dyb3VwKCkpOwotCi0gIGNv
bnN0IE1lc3NhZ2UqIHNvdXJjZSA9IGltcGxpY2l0X2Nhc3Q8Y29uc3QgTWVzc2FnZSo+KCZtZXNz
YWdlMSk7Ci0gIG1lc3NhZ2UyLkNvcHlGcm9tKCpzb3VyY2UpOwotCi0gIEVYUEVDVF9UUlVFKG1l
c3NhZ2UyLmhhc19mb29ncm91cCgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UyLmZvb2dyb3VwKCku
YSgpLCAxMjMpOwotfQotCi0vLyBUZXN0IHRoZSBnZW5lcmF0ZWQgU2VyaWFsaXplV2l0aENhY2hl
ZFNpemVzVG9BcnJheSgpLAotLy8gVGhpcyBpbmRpcmVjdGx5IHRlc3RzIE1lcmdlUGFydGlhbEZy
b21Db2RlZFN0cmVhbSgpCi0vLyBXZSBoYXZlIHRvIHRlc3QgZWFjaCBmaWVsZCB0eXBlIHNlcGFy
YXRlbHkgYmVjYXVzZSB3ZSBjYW5ub3Qgc2V0IHRoZW0gYXQgdGhlCi0vLyBzYW1lIHRpbWUKLVRF
U1RfRihPbmVvZlRlc3QsIFNlcmlhbGl6YXRpb25Ub0FycmF5KSB7Ci0gIC8vIFByaW1pdGl2ZSB0
eXBlCi0gIHsKLSAgICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0g
ICAgc3RyaW5nIGRhdGE7Ci0gICAgbWVzc2FnZTEuc2V0X2Zvb19pbnQoMTIzKTsKLSAgICBpbnQg
c2l6ZSA9IG1lc3NhZ2UxLkJ5dGVTaXplKCk7Ci0gICAgZGF0YS5yZXNpemUoc2l6ZSk7Ci0gICAg
dWludDgqIHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KHN0cmluZ19hc19hcnJheSgm
ZGF0YSkpOwotICAgIHVpbnQ4KiBlbmQgPSBtZXNzYWdlMS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6
ZXNUb0FycmF5KHN0YXJ0KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZSwgZW5kIC0gc3RhcnQpOwotICAg
IEVYUEVDVF9UUlVFKG1lc3NhZ2UyLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gICAgRVhQRUNU
X0VRKG1lc3NhZ2UyLmZvb19pbnQoKSwgMTIzKTsKLSAgfQotCi0gIC8vIFN0cmluZwotICB7Ci0g
ICAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTEsIG1lc3NhZ2UyOwotICAgIHN0cmluZyBk
YXRhOwotICAgIG1lc3NhZ2UxLnNldF9mb29fc3RyaW5nKCJmb28iKTsKLSAgICBpbnQgc2l6ZSA9
IG1lc3NhZ2UxLkJ5dGVTaXplKCk7Ci0gICAgZGF0YS5yZXNpemUoc2l6ZSk7Ci0gICAgdWludDgq
IHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KHN0cmluZ19hc19hcnJheSgmZGF0YSkp
OwotICAgIHVpbnQ4KiBlbmQgPSBtZXNzYWdlMS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0Fy
cmF5KHN0YXJ0KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZSwgZW5kIC0gc3RhcnQpOwotICAgIEVYUEVD
VF9UUlVFKG1lc3NhZ2UyLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gICAgRVhQRUNUX0VRKG1l
c3NhZ2UyLmZvb19zdHJpbmcoKSwgImZvbyIpOwotICB9Ci0KLQotICAvLyBCeXRlcwotICB7Ci0g
ICAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTEsIG1lc3NhZ2UyOwotICAgIHN0cmluZyBk
YXRhOwotICAgIG1lc3NhZ2UxLnNldF9mb29fYnl0ZXMoInF1eCIpOwotICAgIGludCBzaXplID0g
bWVzc2FnZTEuQnl0ZVNpemUoKTsKLSAgICBkYXRhLnJlc2l6ZShzaXplKTsKLSAgICB1aW50OCog
c3RhcnQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oc3RyaW5nX2FzX2FycmF5KCZkYXRhKSk7
Ci0gICAgdWludDgqIGVuZCA9IG1lc3NhZ2UxLlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJy
YXkoc3RhcnQpOwotICAgIEVYUEVDVF9FUShzaXplLCBlbmQgLSBzdGFydCk7Ci0gICAgRVhQRUNU
X1RSVUUobWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgICBFWFBFQ1RfRVEobWVz
c2FnZTIuZm9vX2J5dGVzKCksICJxdXgiKTsKLSAgfQotCi0gIC8vIEVudW0KLSAgewotICAgIHVu
aXR0ZXN0OjpUZXN0T25lb2YyIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLSAgICBzdHJpbmcgZGF0YTsK
LSAgICBtZXNzYWdlMS5zZXRfZm9vX2VudW0odW5pdHRlc3Q6OlRlc3RPbmVvZjI6OkZPTyk7Ci0g
ICAgaW50IHNpemUgPSBtZXNzYWdlMS5CeXRlU2l6ZSgpOwotICAgIGRhdGEucmVzaXplKHNpemUp
OwotICAgIHVpbnQ4KiBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihzdHJpbmdfYXNf
YXJyYXkoJmRhdGEpKTsKLSAgICB1aW50OCogZW5kID0gbWVzc2FnZTEuU2VyaWFsaXplV2l0aENh
Y2hlZFNpemVzVG9BcnJheShzdGFydCk7Ci0gICAgRVhQRUNUX0VRKHNpemUsIGVuZCAtIHN0YXJ0
KTsKLSAgICBFWFBFQ1RfVFJVRShtZXNzYWdlMi5QYXJzZUZyb21TdHJpbmcoZGF0YSkpOwotICAg
IEVYUEVDVF9FUShtZXNzYWdlMi5mb29fZW51bSgpLCB1bml0dGVzdDo6VGVzdE9uZW9mMjo6Rk9P
KTsKLSAgfQotCi0gIC8vIE1lc3NhZ2UKLSAgewotICAgIHVuaXR0ZXN0OjpUZXN0T25lb2YyIG1l
c3NhZ2UxLCBtZXNzYWdlMjsKLSAgICBzdHJpbmcgZGF0YTsKLSAgICBtZXNzYWdlMS5tdXRhYmxl
X2Zvb19tZXNzYWdlKCktPnNldF9xdXhfaW50KDIzNCk7Ci0gICAgaW50IHNpemUgPSBtZXNzYWdl
MS5CeXRlU2l6ZSgpOwotICAgIGRhdGEucmVzaXplKHNpemUpOwotICAgIHVpbnQ4KiBzdGFydCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihzdHJpbmdfYXNfYXJyYXkoJmRhdGEpKTsKLSAgICB1
aW50OCogZW5kID0gbWVzc2FnZTEuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheShzdGFy
dCk7Ci0gICAgRVhQRUNUX0VRKHNpemUsIGVuZCAtIHN0YXJ0KTsKLSAgICBFWFBFQ1RfVFJVRSht
ZXNzYWdlMi5QYXJzZUZyb21TdHJpbmcoZGF0YSkpOwotICAgIEVYUEVDVF9FUShtZXNzYWdlMi5m
b29fbWVzc2FnZSgpLnF1eF9pbnQoKSwgMjM0KTsKLSAgfQotCi0gIC8vIEdyb3VwCi0gIHsKLSAg
ICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0gICAgc3RyaW5nIGRh
dGE7Ci0gICAgbWVzc2FnZTEubXV0YWJsZV9mb29ncm91cCgpLT5zZXRfYSgzNDUpOwotICAgIGlu
dCBzaXplID0gbWVzc2FnZTEuQnl0ZVNpemUoKTsKLSAgICBkYXRhLnJlc2l6ZShzaXplKTsKLSAg
ICB1aW50OCogc3RhcnQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oc3RyaW5nX2FzX2FycmF5
KCZkYXRhKSk7Ci0gICAgdWludDgqIGVuZCA9IG1lc3NhZ2UxLlNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplc1RvQXJyYXkoc3RhcnQpOwotICAgIEVYUEVDVF9FUShzaXplLCBlbmQgLSBzdGFydCk7Ci0g
ICAgRVhQRUNUX1RSVUUobWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgICBFWFBF
Q1RfRVEobWVzc2FnZTIuZm9vZ3JvdXAoKS5hKCksIDM0NSk7Ci0gIH0KLQotfQotCi0vLyBUZXN0
IHRoZSBnZW5lcmF0ZWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKCkgYnkgZm9yY2luZyB0aGUg
YnVmZmVyIHRvIHdyaXRlCi0vLyBvbmUgYnl0ZSBhdCBhIHRpbWUuCi0vLyBUaGlzIGluZGlyZWN0
bHkgdGVzdHMgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKCkKLS8vIFdlIGhhdmUgdG8gdGVz
dCBlYWNoIGZpZWxkIHR5cGUgc2VwYXJhdGVseSBiZWNhdXNlIHdlIGNhbm5vdCBzZXQgdGhlbSBh
dCB0aGUKLS8vIHNhbWUgdGltZQotVEVTVF9GKE9uZW9mVGVzdCwgU2VyaWFsaXphdGlvblRvU3Ry
ZWFtKSB7Ci0gIC8vIFByaW1pdGl2ZSB0eXBlCi0gIHsKLSAgICB1bml0dGVzdDo6VGVzdE9uZW9m
MiBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0gICAgc3RyaW5nIGRhdGE7Ci0gICAgbWVzc2FnZTEuc2V0
X2Zvb19pbnQoMTIzKTsKLSAgICBpbnQgc2l6ZSA9IG1lc3NhZ2UxLkJ5dGVTaXplKCk7Ci0gICAg
ZGF0YS5yZXNpemUoc2l6ZSk7Ci0KLSAgICB7Ci0gICAgICAvLyBBbGxvdyB0aGUgb3V0cHV0IHN0
cmVhbSB0byBidWZmZXIgb25seSBvbmUgYnl0ZSBhdCBhIHRpbWUuCi0gICAgICBpbzo6QXJyYXlP
dXRwdXRTdHJlYW0gYXJyYXlfc3RyZWFtKHN0cmluZ19hc19hcnJheSgmZGF0YSksIHNpemUsIDEp
OwotICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0oJmFycmF5X3N0cmVh
bSk7Ci0gICAgICBtZXNzYWdlMS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoJm91dHB1dF9zdHJl
YW0pOwotICAgICAgRVhQRUNUX0ZBTFNFKG91dHB1dF9zdHJlYW0uSGFkRXJyb3IoKSk7Ci0gICAg
ICBFWFBFQ1RfRVEoc2l6ZSwgb3V0cHV0X3N0cmVhbS5CeXRlQ291bnQoKSk7Ci0gICAgfQotCi0g
ICAgRVhQRUNUX1RSVUUobWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgICBFWFBF
Q1RfRVEobWVzc2FnZTIuZm9vX2ludCgpLCAxMjMpOwotICB9Ci0KLSAgLy8gU3RyaW5nCi0gIHsK
LSAgICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0gICAgc3RyaW5n
IGRhdGE7Ci0gICAgbWVzc2FnZTEuc2V0X2Zvb19zdHJpbmcoImZvbyIpOwotICAgIGludCBzaXpl
ID0gbWVzc2FnZTEuQnl0ZVNpemUoKTsKLSAgICBkYXRhLnJlc2l6ZShzaXplKTsKLQotICAgIHsK
LSAgICAgIC8vIEFsbG93IHRoZSBvdXRwdXQgc3RyZWFtIHRvIGJ1ZmZlciBvbmx5IG9uZSBieXRl
IGF0IGEgdGltZS4KLSAgICAgIGlvOjpBcnJheU91dHB1dFN0cmVhbSBhcnJheV9zdHJlYW0oc3Ry
aW5nX2FzX2FycmF5KCZkYXRhKSwgc2l6ZSwgMSk7Ci0gICAgICBpbzo6Q29kZWRPdXRwdXRTdHJl
YW0gb3V0cHV0X3N0cmVhbSgmYXJyYXlfc3RyZWFtKTsKLSAgICAgIG1lc3NhZ2UxLlNlcmlhbGl6
ZVdpdGhDYWNoZWRTaXplcygmb3V0cHV0X3N0cmVhbSk7Ci0gICAgICBFWFBFQ1RfRkFMU0Uob3V0
cHV0X3N0cmVhbS5IYWRFcnJvcigpKTsKLSAgICAgIEVYUEVDVF9FUShzaXplLCBvdXRwdXRfc3Ry
ZWFtLkJ5dGVDb3VudCgpKTsKLSAgICB9Ci0KLSAgICBFWFBFQ1RfVFJVRShtZXNzYWdlMi5QYXJz
ZUZyb21TdHJpbmcoZGF0YSkpOwotICAgIEVYUEVDVF9FUShtZXNzYWdlMi5mb29fc3RyaW5nKCks
ICJmb28iKTsKLSAgfQotCi0KLSAgLy8gQnl0ZXMKLSAgewotICAgIHVuaXR0ZXN0OjpUZXN0T25l
b2YyIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLSAgICBzdHJpbmcgZGF0YTsKLSAgICBtZXNzYWdlMS5z
ZXRfZm9vX2J5dGVzKCJxdXgiKTsKLSAgICBpbnQgc2l6ZSA9IG1lc3NhZ2UxLkJ5dGVTaXplKCk7
Ci0gICAgZGF0YS5yZXNpemUoc2l6ZSk7Ci0KLSAgICB7Ci0gICAgICAvLyBBbGxvdyB0aGUgb3V0
cHV0IHN0cmVhbSB0byBidWZmZXIgb25seSBvbmUgYnl0ZSBhdCBhIHRpbWUuCi0gICAgICBpbzo6
QXJyYXlPdXRwdXRTdHJlYW0gYXJyYXlfc3RyZWFtKHN0cmluZ19hc19hcnJheSgmZGF0YSksIHNp
emUsIDEpOwotICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0oJmFycmF5
X3N0cmVhbSk7Ci0gICAgICBtZXNzYWdlMS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoJm91dHB1
dF9zdHJlYW0pOwotICAgICAgRVhQRUNUX0ZBTFNFKG91dHB1dF9zdHJlYW0uSGFkRXJyb3IoKSk7
Ci0gICAgICBFWFBFQ1RfRVEoc2l6ZSwgb3V0cHV0X3N0cmVhbS5CeXRlQ291bnQoKSk7Ci0gICAg
fQotCi0gICAgRVhQRUNUX1RSVUUobWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAg
ICBFWFBFQ1RfRVEobWVzc2FnZTIuZm9vX2J5dGVzKCksICJxdXgiKTsKLSAgfQotCi0gIC8vIEVu
dW0KLSAgewotICAgIHVuaXR0ZXN0OjpUZXN0T25lb2YyIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLSAg
ICBzdHJpbmcgZGF0YTsKLSAgICBtZXNzYWdlMS5zZXRfZm9vX2VudW0odW5pdHRlc3Q6OlRlc3RP
bmVvZjI6OkZPTyk7Ci0gICAgaW50IHNpemUgPSBtZXNzYWdlMS5CeXRlU2l6ZSgpOwotICAgIGRh
dGEucmVzaXplKHNpemUpOwotCi0gICAgewotICAgICAgLy8gQWxsb3cgdGhlIG91dHB1dCBzdHJl
YW0gdG8gYnVmZmVyIG9ubHkgb25lIGJ5dGUgYXQgYSB0aW1lLgotICAgICAgaW86OkFycmF5T3V0
cHV0U3RyZWFtIGFycmF5X3N0cmVhbShzdHJpbmdfYXNfYXJyYXkoJmRhdGEpLCBzaXplLCAxKTsK
LSAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKCZhcnJheV9zdHJlYW0p
OwotICAgICAgbWVzc2FnZTEuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKCZvdXRwdXRfc3RyZWFt
KTsKLSAgICAgIEVYUEVDVF9GQUxTRShvdXRwdXRfc3RyZWFtLkhhZEVycm9yKCkpOwotICAgICAg
RVhQRUNUX0VRKHNpemUsIG91dHB1dF9zdHJlYW0uQnl0ZUNvdW50KCkpOwotICAgIH0KLQotICAg
IEVYUEVDVF9UUlVFKG1lc3NhZ2UyLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gICAgRVhQRUNU
X0VRKG1lc3NhZ2UyLmZvb19lbnVtKCksIHVuaXR0ZXN0OjpUZXN0T25lb2YyOjpGT08pOwotICB9
Ci0KLSAgLy8gTWVzc2FnZQotICB7Ci0gICAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTEs
IG1lc3NhZ2UyOwotICAgIHN0cmluZyBkYXRhOwotICAgIG1lc3NhZ2UxLm11dGFibGVfZm9vX21l
c3NhZ2UoKS0+c2V0X3F1eF9pbnQoMjM0KTsKLSAgICBpbnQgc2l6ZSA9IG1lc3NhZ2UxLkJ5dGVT
aXplKCk7Ci0gICAgZGF0YS5yZXNpemUoc2l6ZSk7Ci0KLSAgICB7Ci0gICAgICAvLyBBbGxvdyB0
aGUgb3V0cHV0IHN0cmVhbSB0byBidWZmZXIgb25seSBvbmUgYnl0ZSBhdCBhIHRpbWUuCi0gICAg
ICBpbzo6QXJyYXlPdXRwdXRTdHJlYW0gYXJyYXlfc3RyZWFtKHN0cmluZ19hc19hcnJheSgmZGF0
YSksIHNpemUsIDEpOwotICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0o
JmFycmF5X3N0cmVhbSk7Ci0gICAgICBtZXNzYWdlMS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMo
Jm91dHB1dF9zdHJlYW0pOwotICAgICAgRVhQRUNUX0ZBTFNFKG91dHB1dF9zdHJlYW0uSGFkRXJy
b3IoKSk7Ci0gICAgICBFWFBFQ1RfRVEoc2l6ZSwgb3V0cHV0X3N0cmVhbS5CeXRlQ291bnQoKSk7
Ci0gICAgfQotCi0gICAgRVhQRUNUX1RSVUUobWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRhdGEp
KTsKLSAgICBFWFBFQ1RfRVEobWVzc2FnZTIuZm9vX21lc3NhZ2UoKS5xdXhfaW50KCksIDIzNCk7
Ci0gIH0KLQotICAvLyBHcm91cAotICB7Ci0gICAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2Fn
ZTEsIG1lc3NhZ2UyOwotICAgIHN0cmluZyBkYXRhOwotICAgIG1lc3NhZ2UxLm11dGFibGVfZm9v
Z3JvdXAoKS0+c2V0X2EoMzQ1KTsKLSAgICBpbnQgc2l6ZSA9IG1lc3NhZ2UxLkJ5dGVTaXplKCk7
Ci0gICAgZGF0YS5yZXNpemUoc2l6ZSk7Ci0KLSAgICB7Ci0gICAgICAvLyBBbGxvdyB0aGUgb3V0
cHV0IHN0cmVhbSB0byBidWZmZXIgb25seSBvbmUgYnl0ZSBhdCBhIHRpbWUuCi0gICAgICBpbzo6
QXJyYXlPdXRwdXRTdHJlYW0gYXJyYXlfc3RyZWFtKHN0cmluZ19hc19hcnJheSgmZGF0YSksIHNp
emUsIDEpOwotICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0oJmFycmF5
X3N0cmVhbSk7Ci0gICAgICBtZXNzYWdlMS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoJm91dHB1
dF9zdHJlYW0pOwotICAgICAgRVhQRUNUX0ZBTFNFKG91dHB1dF9zdHJlYW0uSGFkRXJyb3IoKSk7
Ci0gICAgICBFWFBFQ1RfRVEoc2l6ZSwgb3V0cHV0X3N0cmVhbS5CeXRlQ291bnQoKSk7Ci0gICAg
fQotCi0gICAgRVhQRUNUX1RSVUUobWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAg
ICBFWFBFQ1RfRVEobWVzc2FnZTIuZm9vZ3JvdXAoKS5hKCksIDM0NSk7Ci0gIH0KLQotfQotCi1U
RVNUX0YoT25lb2ZUZXN0LCBNZXJnZUZyb20pIHsKLSAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVz
c2FnZTEsIG1lc3NhZ2UyOwotCi0gIG1lc3NhZ2UxLnNldF9mb29faW50KDEyMyk7Ci0gIG1lc3Nh
Z2UyLk1lcmdlRnJvbShtZXNzYWdlMSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBdE1vc3RPbmVGaWVs
ZFNldEluT25lb2YobWVzc2FnZTIpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlMi5oYXNfZm9vX2lu
dCgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UyLmZvb19pbnQoKSwgMTIzKTsKLQotICBtZXNzYWdl
MS5zZXRfZm9vX3N0cmluZygiZm9vIik7Ci0gIG1lc3NhZ2UyLk1lcmdlRnJvbShtZXNzYWdlMSk7
Ci0gIFRlc3RVdGlsOjpFeHBlY3RBdE1vc3RPbmVGaWVsZFNldEluT25lb2YobWVzc2FnZTIpOwot
ICBFWFBFQ1RfVFJVRShtZXNzYWdlMi5oYXNfZm9vX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKG1l
c3NhZ2UyLmZvb19zdHJpbmcoKSwgImZvbyIpOwotCi0KLSAgbWVzc2FnZTEuc2V0X2Zvb19ieXRl
cygicXV4Iik7Ci0gIG1lc3NhZ2UyLk1lcmdlRnJvbShtZXNzYWdlMSk7Ci0gIFRlc3RVdGlsOjpF
eHBlY3RBdE1vc3RPbmVGaWVsZFNldEluT25lb2YobWVzc2FnZTIpOwotICBFWFBFQ1RfVFJVRSht
ZXNzYWdlMi5oYXNfZm9vX2J5dGVzKCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZTIuZm9vX2J5dGVz
KCksICJxdXgiKTsKLQotICBtZXNzYWdlMS5zZXRfZm9vX2VudW0odW5pdHRlc3Q6OlRlc3RPbmVv
ZjI6OkZPTyk7Ci0gIG1lc3NhZ2UyLk1lcmdlRnJvbShtZXNzYWdlMSk7Ci0gIFRlc3RVdGlsOjpF
eHBlY3RBdE1vc3RPbmVGaWVsZFNldEluT25lb2YobWVzc2FnZTIpOwotICBFWFBFQ1RfVFJVRSht
ZXNzYWdlMi5oYXNfZm9vX2VudW0oKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlMi5mb29fZW51bSgp
LCB1bml0dGVzdDo6VGVzdE9uZW9mMjo6Rk9PKTsKLQotICBtZXNzYWdlMS5tdXRhYmxlX2Zvb19t
ZXNzYWdlKCktPnNldF9xdXhfaW50KDIzNCk7Ci0gIG1lc3NhZ2UyLk1lcmdlRnJvbShtZXNzYWdl
MSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBdE1vc3RPbmVGaWVsZFNldEluT25lb2YobWVzc2FnZTIp
OwotICBFWFBFQ1RfVFJVRShtZXNzYWdlMi5oYXNfZm9vX21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9F
UShtZXNzYWdlMi5mb29fbWVzc2FnZSgpLnF1eF9pbnQoKSwgMjM0KTsKLQotICBtZXNzYWdlMS5t
dXRhYmxlX2Zvb2dyb3VwKCktPnNldF9hKDM0NSk7Ci0gIG1lc3NhZ2UyLk1lcmdlRnJvbShtZXNz
YWdlMSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBdE1vc3RPbmVGaWVsZFNldEluT25lb2YobWVzc2Fn
ZTIpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlMi5oYXNfZm9vZ3JvdXAoKSk7Ci0gIEVYUEVDVF9F
UShtZXNzYWdlMi5mb29ncm91cCgpLmEoKSwgMzQ1KTsKLQotfQotCi19ICAvLyBuYW1lc3BhY2Ug
Y3BwX3VuaXR0ZXN0Ci19ICAvLyBuYW1lc3BhY2UgY3BwCi19ICAvLyBuYW1lc3BhY2UgY29tcGls
ZXIKLQotbmFtZXNwYWNlIG5vX2dlbmVyaWNfc2VydmljZXNfdGVzdCB7Ci0gIC8vIFZlcmlmeSB0
aGF0IG5vIGNsYXNzIGNhbGxlZCAiVGVzdFNlcnZpY2UiIHdhcyBkZWZpbmVkIGluCi0gIC8vIHVu
aXR0ZXN0X25vX2dlbmVyaWNfc2VydmljZXMucGIuaCBieSBkZWZpbmluZyBhIGRpZmZlcmVudCB0
eXBlIGJ5IHRoZSBzYW1lCi0gIC8vIG5hbWUuICBJZiBzdWNoIGEgc2VydmljZSB3YXMgZ2VuZXJh
dGVkLCB0aGlzIHdpbGwgbm90IGNvbXBpbGUuCi0gIHN0cnVjdCBUZXN0U2VydmljZSB7Ci0gICAg
aW50IGk7Ci0gIH07Ci19Ci0KLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsK
LW5hbWVzcGFjZSBjcHBfdW5pdHRlc3QgewotCi1URVNUX0YoR2VuZXJhdGVkU2VydmljZVRlc3Qs
IE5vR2VuZXJpY1NlcnZpY2VzKSB7Ci0gIC8vIFZlcmlmeSB0aGF0IG5vbi1zZXJ2aWNlcyBpbiB1
bml0dGVzdF9ub19nZW5lcmljX3NlcnZpY2VzLnByb3RvIHdlcmUKLSAgLy8gZ2VuZXJhdGVkLgot
ICBub19nZW5lcmljX3NlcnZpY2VzX3Rlc3Q6OlRlc3RNZXNzYWdlIG1lc3NhZ2U7Ci0gIG1lc3Nh
Z2Uuc2V0X2EoMSk7Ci0gIG1lc3NhZ2UuU2V0RXh0ZW5zaW9uKG5vX2dlbmVyaWNfc2VydmljZXNf
dGVzdDo6dGVzdF9leHRlbnNpb24sIDEyMyk7Ci0gIG5vX2dlbmVyaWNfc2VydmljZXNfdGVzdDo6
VGVzdEVudW0gZSA9IG5vX2dlbmVyaWNfc2VydmljZXNfdGVzdDo6Rk9POwotICBFWFBFQ1RfRVEo
ZSwgMSk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgYSBTZXJ2aWNlRGVzY3JpcHRvciBpcyBnZW5lcmF0
ZWQgZm9yIHRoZSBzZXJ2aWNlIGV2ZW4gaWYgdGhlCi0gIC8vIGNsYXNzIGl0c2VsZiBpcyBub3Qu
Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlID0KLSAgICAgIG5vX2dlbmVyaWNfc2Vydmlj
ZXNfdGVzdDo6VGVzdE1lc3NhZ2U6OmRlc2NyaXB0b3IoKS0+ZmlsZSgpOwotCi0gIEFTU0VSVF9F
USgxLCBmaWxlLT5zZXJ2aWNlX2NvdW50KCkpOwotICBFWFBFQ1RfRVEoIlRlc3RTZXJ2aWNlIiwg
ZmlsZS0+c2VydmljZSgwKS0+bmFtZSgpKTsKLSAgQVNTRVJUX0VRKDEsIGZpbGUtPnNlcnZpY2Uo
MCktPm1ldGhvZF9jb3VudCgpKTsKLSAgRVhQRUNUX0VRKCJGb28iLCBmaWxlLT5zZXJ2aWNlKDAp
LT5tZXRob2QoMCktPm5hbWUoKSk7Ci19Ci0KLSNlbmRpZiAgLy8gIVBST1RPQlVGX1RFU1RfTk9f
REVTQ1JJUFRPUlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vLyBUaGlzIHRlc3QgbXVzdCBydW4gbGFz
dC4gIEl0IHZlcmlmaWVzIHRoYXQgZGVzY3JpcHRvcnMgd2VyZSBvciB3ZXJlIG5vdAotLy8gaW5p
dGlhbGl6ZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgUFJPVE9CVUZfVEVTVF9OT19ERVNDUklQVE9S
UyB3YXMgZGVmaW5lZC4KLS8vIFdoZW4gdGhpcyBpcyBkZWZpbmVkLCB3ZSBza2lwIGFsbCB0ZXN0
cyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gdHJpZ2dlcgotLy8gZGVzY3JpcHRvciBpbml0aWFsaXph
dGlvbi4gIFRoaXMgdmVyaWZpZXMgdGhhdCBldmVyeXRoaW5nIGVsc2Ugc3RpbGwgd29ya3MKLS8v
IGlmIGRlc2NyaXB0b3JzIGFyZSBub3QgaW5pdGlhbGl6ZWQuCi1URVNUKERlc2NyaXB0b3JJbml0
aWFsaXphdGlvblRlc3QsIEluaXRpYWxpemVkKSB7Ci0jaWZkZWYgUFJPVE9CVUZfVEVTVF9OT19E
RVNDUklQVE9SUwotICBib29sIHNob3VsZF9oYXZlX2Rlc2NyaXB0b3JzID0gZmFsc2U7Ci0jZWxz
ZQotICBib29sIHNob3VsZF9oYXZlX2Rlc2NyaXB0b3JzID0gdHJ1ZTsKLSNlbmRpZgotCi0gIEVY
UEVDVF9FUShzaG91bGRfaGF2ZV9kZXNjcmlwdG9ycywKLSAgICBEZXNjcmlwdG9yUG9vbDo6Z2Vu
ZXJhdGVkX3Bvb2woKS0+SW50ZXJuYWxJc0ZpbGVMb2FkZWQoCi0gICAgICAiZ29vZ2xlL3Byb3Rv
YnVmL3VuaXR0ZXN0LnByb3RvIikpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgY3BwX3VuaXR0ZXN0
Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8g
bmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF91bml0dGVzdC5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfdW5pdHRlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjljOGY0NGMxZDljYTgyMmUxZDI5ZmVmODBjMDUxNTU2MDhkMjE3MS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvY3BwL2NwcF91bml0dGVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFRoaXMgaGVh
ZGVyIGRlY2xhcmVzIHRoZSBuYW1lc3BhY2UgZ29vZ2xlOjpwcm90b2J1Zjo6cHJvdG9idWZfdW5p
dHRlc3QgaW4gb3JkZXIgdG8gZXhwb3NlCi0vLyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgZ2VuZXJh
dGVkIGNsYXNzIG5hbWVzLiBXZSB1c2UgdGhpcyBoZWFkZXIgdG8gZW5zdXJlCi0vLyB1bml0dGVz
dC5jYyB3aWxsIGRlY2xhcmUgdGhlIG5hbWVzcGFjZSBwcmlvciB0byBvdGhlciBpbmNsdWRlcywg
d2hpbGUgb2JleWluZwotLy8gbm9ybWFsIGluY2x1ZGUgb3JkZXJpbmcuCi0vLwotLy8gV2hlbiBn
ZW5lcmF0aW5nIGEgY2xhc3MgbmFtZSBvZiAiZm9vLkJhciIgd2UgbXVzdCBlbnN1cmUgd2UgcHJl
Zml4IHRoZSBjbGFzcwotLy8gbmFtZSB3aXRoICI6OiIsIGluIGNhc2UgdGhlIG5hbWVzcGFjZSBn
b29nbGU6OnByb3RvYnVmOjpmb28gZXhpc3RzLiBXZSBpbnRlbnRpb25hbGx5Ci0vLyB0cmlnZ2Vy
IHRoYXQgY2FzZSBoZXJlIGJ5IGRlY2xhcmluZyBnb29nbGU6OnByb3RvYnVmOjpwcm90b2J1Zl91
bml0dGVzdC4KLS8vCi0vLyBTZWUgQ2xhc3NOYW1lIGluIGhlbHBlcnMuaCBmb3IgbW9yZSBkZXRh
aWxzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DUFBfVU5JVFRFU1RfSF9f
Ci0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DUFBfVU5JVFRFU1RfSF9fCi0KLW5h
bWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBwcm90b2J1
Zl91bml0dGVzdCB7fQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFj
ZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NQUF9VTklUVEVT
VF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvbWV0YWRh
dGFfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvbWV0YWRhdGFfdGVz
dC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRkMzA3ODBhOWJhMGU3MDI0N2Mw
NzUxY2Y0ZWNhYmQzNmE1Yjc0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL21ldGFkYXRhX3Rlc3Qu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gK
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9oZWxwZXJzLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZ2VuZXJhdG9yLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2Uu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGxfbGl0ZS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90
ZXN0aW5nL2ZpbGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1
ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3BwIHsKLW5hbWVzcGFjZSB7
Ci0KLS8vIEEgQ29kZUdlbmVyYXRvciB0aGF0IGNhcHR1cmVzIHRoZSBGaWxlRGVzY3JpcHRvciBp
dCdzIHBhc3NlZCBhcyBhCi0vLyBGaWxlRGVzY3JpcHRvclByb3RvLgotY2xhc3MgRGVzY3JpcHRv
ckNhcHR1cmluZ0dlbmVyYXRvciA6IHB1YmxpYyBDb2RlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0g
IC8vIERvZXMgbm90IG93biBmaWxlOyBmaWxlIG11c3Qgb3V0bGl2ZSB0aGUgR2VuZXJhdG9yLgot
ICBleHBsaWNpdCBEZXNjcmlwdG9yQ2FwdHVyaW5nR2VuZXJhdG9yKEZpbGVEZXNjcmlwdG9yUHJv
dG8qIGZpbGUpCi0gICAgICA6IGZpbGVfKGZpbGUpIHt9Ci0KLSAgdmlydHVhbCBib29sIEdlbmVy
YXRlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLCBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckNvbnRleHQqIGNvbnRleHQsIHN0cmlu
ZyogZXJyb3IpIGNvbnN0IHsKLSAgICBmaWxlLT5Db3B5VG8oZmlsZV8pOwotICAgIHJldHVybiB0
cnVlOwotICB9Ci0KLSBwcml2YXRlOgotICBGaWxlRGVzY3JpcHRvclByb3RvKiBmaWxlXzsKLX07
Ci0KLWNsYXNzIENwcE1ldGFkYXRhVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHB1
YmxpYzoKLSAgLy8gQWRkcyBhIGZpbGUgd2l0aCBuYW1lIGBmaWxlbmFtZWAgYW5kIGNvbnRlbnQg
YGRhdGFgLgotICB2b2lkIEFkZEZpbGUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qgc3Ry
aW5nJiBkYXRhKSB7Ci0gICAgR09PR0xFX0NIRUNLX09LKEZpbGU6OlNldENvbnRlbnRzKFRlc3RU
ZW1wRGlyKCkgKyAiLyIgKyBmaWxlbmFtZSwgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnVlKSk7Ci0gIH0KLQotICAvLyBUcmllcyB0byBjYXB0dXJlIGEgRmlsZURlc2Ny
aXB0b3JQcm90bywgR2VuZXJhdGVkQ29kZUluZm8sIGFuZCBvdXRwdXQKLSAgLy8gY29kZSBmcm9t
IHRoZSBwcmV2aW91c2x5IGFkZGVkIGZpbGUgd2l0aCBuYW1lIGBmaWxlbmFtZWAuIFJldHVybnMg
dHJ1ZSBvbgotICAvLyBzdWNjZXNzLiBJZiBwYl9oIGlzIG5vbi1udWxsLCBleHBlY3RzIGEgLnBi
LmggYW5kIGEgLnBiLmgubWV0YSAoY29waWVkIHRvCi0gIC8vIHBiX2ggYW5kIHBiX2hfaW5mbyBy
ZXNwZWNmaXZlbHkpOyBzaW1pbGFybHkgZm9yIHByb3RvX2ggYW5kIHByb3RvX2hfaW5mby4KLSAg
Ym9vbCBDYXB0dXJlTWV0YWRhdGEoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwgRmlsZURlc2NyaXB0
b3JQcm90byogZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBwYl9oLCBHZW5l
cmF0ZWRDb2RlSW5mbyogcGJfaF9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcq
IHByb3RvX2gsIEdlbmVyYXRlZENvZGVJbmZvKiBwcm90b19oX2luZm8sCi0gICAgICAgICAgICAg
ICAgICAgICAgIHN0cmluZyogcGJfY2MpIHsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpjb21waWxl
cjo6Q29tbWFuZExpbmVJbnRlcmZhY2UgY2xpOwotICAgIGNsaS5TZXRJbnB1dHNBcmVQcm90b1Bh
dGhSZWxhdGl2ZSh0cnVlKTsKLQotICAgIENwcEdlbmVyYXRvciBjcHBfZ2VuZXJhdG9yOwotICAg
IERlc2NyaXB0b3JDYXB0dXJpbmdHZW5lcmF0b3IgY2FwdHVyaW5nX2dlbmVyYXRvcihmaWxlKTsK
LSAgICBjbGkuUmVnaXN0ZXJHZW5lcmF0b3IoIi0tY3BwX291dCIsICZjcHBfZ2VuZXJhdG9yLCAi
Iik7Ci0gICAgY2xpLlJlZ2lzdGVyR2VuZXJhdG9yKCItLWNhcHR1cmVfb3V0IiwgJmNhcHR1cmlu
Z19nZW5lcmF0b3IsICIiKTsKLQotICAgIHN0cmluZyBwcm90b19wYXRoID0gIi1JIiArIFRlc3RU
ZW1wRGlyKCk7Ci0gICAgc3RyaW5nIGNwcF9vdXQgPQotICAgICAgICAiLS1jcHBfb3V0PWFubm90
YXRlX2hlYWRlcnM9dHJ1ZSwiCi0gICAgICAgICJhbm5vdGF0aW9uX3ByYWdtYV9uYW1lPXByYWdt
YV9uYW1lLCIKLSAgICAgICAgImFubm90YXRpb25fZ3VhcmRfbmFtZT1ndWFyZF9uYW1lOiIgKwot
ICAgICAgICBUZXN0VGVtcERpcigpOwotICAgIHN0cmluZyBjYXB0dXJlX291dCA9ICItLWNhcHR1
cmVfb3V0PSIgKyBUZXN0VGVtcERpcigpOwotCi0gICAgY29uc3QgY2hhciogYXJndltdID0geyJw
cm90b2MiLCBwcm90b19wYXRoLmNfc3RyKCksIGNwcF9vdXQuY19zdHIoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FwdHVyZV9vdXQuY19zdHIoKSwgZmlsZW5hbWUuY19zdHIoKX07Ci0K
LSAgICBpZiAoY2xpLlJ1big1LCBhcmd2KSAhPSAwKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgc3RyaW5nIG91dHB1dF9iYXNlID0gVGVzdFRlbXBEaXIoKSArICIvIiArIFN0
cmlwUHJvdG8oZmlsZW5hbWUpOwotCi0gICAgaWYgKHBiX2NjICE9IE5VTEwpIHsKLSAgICAgIEdP
T0dMRV9DSEVDS19PSygKLSAgICAgICAgICBGaWxlOjpHZXRDb250ZW50cyhvdXRwdXRfYmFzZSAr
ICIucGIuY2MiLCBwYl9jYywgdHJ1ZSkpOwotICAgIH0KLQotICAgIGlmIChwYl9oICE9IE5VTEwg
JiYgcGJfaF9pbmZvICE9IE5VTEwpIHsKLSAgICAgIEdPT0dMRV9DSEVDS19PSygKLSAgICAgICAg
ICBGaWxlOjpHZXRDb250ZW50cyhvdXRwdXRfYmFzZSArICIucGIuaCIsIHBiX2gsIHRydWUpKTsK
LSAgICAgIGlmICghRGVjb2RlTWV0YWRhdGEob3V0cHV0X2Jhc2UgKyAiLnBiLmgubWV0YSIsIHBi
X2hfaW5mbykpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLQotICAg
IGlmIChwcm90b19oICE9IE5VTEwgJiYgcHJvdG9faF9pbmZvICE9IE5VTEwpIHsKLSAgICAgIEdP
T0dMRV9DSEVDS19PSyhGaWxlOjpHZXRDb250ZW50cyhvdXRwdXRfYmFzZSArICIucHJvdG8uaCIs
IHByb3RvX2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSk7Ci0gICAg
ICBpZiAoIURlY29kZU1ldGFkYXRhKG91dHB1dF9iYXNlICsgIi5wcm90by5oLm1ldGEiLCBwcm90
b19oX2luZm8pKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gRGVjb2RlcyBHZW5lcmF0ZWRD
b2RlSW5mbyBzdG9yZWQgaW4gcGF0aCBhbmQgY29waWVzIGl0IHRvIGluZm8uCi0gIC8vIFJldHVy
bnMgdHJ1ZSBvbiBzdWNjZXNzLgotICBib29sIERlY29kZU1ldGFkYXRhKGNvbnN0IHN0cmluZyYg
cGF0aCwgR2VuZXJhdGVkQ29kZUluZm8qIGluZm8pIHsKLSAgICBzdHJpbmcgZGF0YTsKLSAgICBH
T09HTEVfQ0hFQ0tfT0soRmlsZTo6R2V0Q29udGVudHMocGF0aCwgJmRhdGEsIHRydWUpKTsKLSAg
ICBpbzo6QXJyYXlJbnB1dFN0cmVhbSBpbnB1dChkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwot
ICAgIHJldHVybiBpbmZvLT5QYXJzZUZyb21aZXJvQ29weVN0cmVhbSgmaW5wdXQpOwotICB9Ci19
OwotCi1jb25zdCBjaGFyIGtTbWFsbFRlc3RGaWxlW10gPQotICAgICJzeW50YXggPSBcInByb3Rv
MlwiO1xuIgotICAgICJwYWNrYWdlIGZvbztcbiIKLSAgICAiZW51bSBFbnVtIHsgVkFMVUUgPSAw
OyB9XG4iCi0gICAgIm1lc3NhZ2UgTWVzc2FnZSB7IH1cbiI7Ci0KLS8vIEZpbmRzIHRoZSBBbm5v
dGF0aW9uIGZvciBhIGdpdmVuIHNvdXJjZSBmaWxlIGFuZCBwYXRoIChvciByZXR1cm5zIG51bGwg
aWYgaXQKLS8vIGNvdWxkbid0KS4KLWNvbnN0IEdlbmVyYXRlZENvZGVJbmZvOjpBbm5vdGF0aW9u
KiBGaW5kQW5ub3RhdGlvbk9uUGF0aCgKLSAgICBjb25zdCBHZW5lcmF0ZWRDb2RlSW5mbyYgaW5m
bywgY29uc3Qgc3RyaW5nJiBzb3VyY2VfZmlsZSwKLSAgICBjb25zdCB2ZWN0b3I8aW50PiYgcGF0
aCkgewotICBmb3IgKGludCBpID0gMDsgaSA8IGluZm8uYW5ub3RhdGlvbl9zaXplKCk7ICsraSkg
ewotICAgIGNvbnN0IEdlbmVyYXRlZENvZGVJbmZvOjpBbm5vdGF0aW9uKiBhbm5vdGF0aW9uID0g
JmluZm8uYW5ub3RhdGlvbihpKTsKLSAgICBpZiAoYW5ub3RhdGlvbi0+c291cmNlX2ZpbGUoKSAh
PSBzb3VyY2VfZmlsZSB8fAotICAgICAgICBhbm5vdGF0aW9uLT5wYXRoX3NpemUoKSAhPSBwYXRo
LnNpemUoKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGludCBub2RlID0gMDsKLSAg
ICBmb3IgKDsgbm9kZSA8IHBhdGguc2l6ZSgpOyArK25vZGUpIHsKLSAgICAgIGlmIChhbm5vdGF0
aW9uLT5wYXRoKG5vZGUpICE9IHBhdGhbbm9kZV0pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0gICAgfQotICAgIGlmIChub2RlID09IHBhdGguc2l6ZSgpKSB7Ci0gICAgICByZXR1cm4gYW5u
b3RhdGlvbjsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgcHJvdmlkZWQgYW5ub3RhdGlvbiBjb3ZlcnMgYSBnaXZlbiBzdWJzdHJpbmcgaW4K
LS8vIGZpbGVfY29udGVudC4KLWJvb2wgQW5ub3RhdGlvbk1hdGNoZXNTdWJzdHJpbmcoY29uc3Qg
c3RyaW5nJiBmaWxlX2NvbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdlbmVyYXRlZENvZGVJbmZvOjpBbm5vdGF0aW9uKiBhbm5vdGF0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGV4cGVjdGVkX3RleHQpIHsKLSAg
dWludDMyIGJlZ2luID0gYW5ub3RhdGlvbi0+YmVnaW4oKTsKLSAgdWludDMyIGVuZCA9IGFubm90
YXRpb24tPmVuZCgpOwotICBpZiAoZW5kIDwgYmVnaW4gfHwgZW5kID4gZmlsZV9jb250ZW50LnNp
emUoKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gZmlsZV9jb250ZW50LnN1
YnN0cihiZWdpbiwgZW5kIC0gYmVnaW4pID09IGV4cGVjdGVkX3RleHQ7Ci19Ci0KLVRFU1RfRihD
cHBNZXRhZGF0YVRlc3QsIENhcHR1cmVzRW51bU5hbWVzKSB7Ci0gIEZpbGVEZXNjcmlwdG9yUHJv
dG8gZmlsZTsKLSAgR2VuZXJhdGVkQ29kZUluZm8gaW5mbzsKLSAgc3RyaW5nIHBiX2g7Ci0gIEFk
ZEZpbGUoInRlc3QucHJvdG8iLCBrU21hbGxUZXN0RmlsZSk7Ci0gIEVYUEVDVF9UUlVFKAotICAg
ICAgQ2FwdHVyZU1ldGFkYXRhKCJ0ZXN0LnByb3RvIiwgJmZpbGUsICZwYl9oLCAmaW5mbywgTlVM
TCwgTlVMTCwgTlVMTCkpOwotICBFWFBFQ1RfRVEoIkVudW0iLCBmaWxlLmVudW1fdHlwZSgwKS5u
YW1lKCkpOwotICB2ZWN0b3I8aW50PiBlbnVtX3BhdGg7Ci0gIGVudW1fcGF0aC5wdXNoX2JhY2so
RmlsZURlc2NyaXB0b3JQcm90bzo6a0VudW1UeXBlRmllbGROdW1iZXIpOwotICBlbnVtX3BhdGgu
cHVzaF9iYWNrKDApOwotICBjb25zdCBHZW5lcmF0ZWRDb2RlSW5mbzo6QW5ub3RhdGlvbiogZW51
bV9hbm5vdGF0aW9uID0KLSAgICAgIEZpbmRBbm5vdGF0aW9uT25QYXRoKGluZm8sICJ0ZXN0LnBy
b3RvIiwgZW51bV9wYXRoKTsKLSAgRVhQRUNUX1RSVUUoTlVMTCAhPSBlbnVtX2Fubm90YXRpb24p
OwotICBFWFBFQ1RfVFJVRShBbm5vdGF0aW9uTWF0Y2hlc1N1YnN0cmluZyhwYl9oLCBlbnVtX2Fu
bm90YXRpb24sICJFbnVtIikpOwotfQotCi1URVNUX0YoQ3BwTWV0YWRhdGFUZXN0LCBBZGRzUHJh
Z21hKSB7Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgR2VuZXJhdGVkQ29kZUluZm8g
aW5mbzsKLSAgc3RyaW5nIHBiX2g7Ci0gIEFkZEZpbGUoInRlc3QucHJvdG8iLCBrU21hbGxUZXN0
RmlsZSk7Ci0gIEVYUEVDVF9UUlVFKAotICAgICAgQ2FwdHVyZU1ldGFkYXRhKCJ0ZXN0LnByb3Rv
IiwgJmZpbGUsICZwYl9oLCAmaW5mbywgTlVMTCwgTlVMTCwgTlVMTCkpOwotICBFWFBFQ1RfVFJV
RShwYl9oLmZpbmQoIiNpZmRlZiBndWFyZF9uYW1lIikgIT0gc3RyaW5nOjpucG9zKTsKLSAgRVhQ
RUNUX1RSVUUocGJfaC5maW5kKCIjcHJhZ21hIHByYWdtYV9uYW1lIFwidGVzdC5wYi5oLm1ldGFc
IiIpICE9Ci0gICAgICAgICAgICAgIHN0cmluZzo6bnBvcyk7Ci19Ci0KLVRFU1RfRihDcHBNZXRh
ZGF0YVRlc3QsIENhcHR1cmVzTWVzc2FnZU5hbWVzKSB7Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8g
ZmlsZTsKLSAgR2VuZXJhdGVkQ29kZUluZm8gaW5mbzsKLSAgc3RyaW5nIHBiX2g7Ci0gIEFkZEZp
bGUoInRlc3QucHJvdG8iLCBrU21hbGxUZXN0RmlsZSk7Ci0gIEVYUEVDVF9UUlVFKAotICAgICAg
Q2FwdHVyZU1ldGFkYXRhKCJ0ZXN0LnByb3RvIiwgJmZpbGUsICZwYl9oLCAmaW5mbywgTlVMTCwg
TlVMTCwgTlVMTCkpOwotICBFWFBFQ1RfRVEoIk1lc3NhZ2UiLCBmaWxlLm1lc3NhZ2VfdHlwZSgw
KS5uYW1lKCkpOwotICB2ZWN0b3I8aW50PiBtZXNzYWdlX3BhdGg7Ci0gIG1lc3NhZ2VfcGF0aC5w
dXNoX2JhY2soRmlsZURlc2NyaXB0b3JQcm90bzo6a01lc3NhZ2VUeXBlRmllbGROdW1iZXIpOwot
ICBtZXNzYWdlX3BhdGgucHVzaF9iYWNrKDApOwotICBjb25zdCBHZW5lcmF0ZWRDb2RlSW5mbzo6
QW5ub3RhdGlvbiogbWVzc2FnZV9hbm5vdGF0aW9uID0KLSAgICAgIEZpbmRBbm5vdGF0aW9uT25Q
YXRoKGluZm8sICJ0ZXN0LnByb3RvIiwgbWVzc2FnZV9wYXRoKTsKLSAgRVhQRUNUX1RSVUUoTlVM
TCAhPSBtZXNzYWdlX2Fubm90YXRpb24pOwotICBFWFBFQ1RfVFJVRShBbm5vdGF0aW9uTWF0Y2hl
c1N1YnN0cmluZyhwYl9oLCBtZXNzYWdlX2Fubm90YXRpb24sICJNZXNzYWdlIikpOwotfQotCi19
ICAvLyBuYW1lc3BhY2UKLX0gIC8vIG5hbWVzcGFjZSBjcHAKLX0gIC8vIG5hbWVzcGFjZSBjb21w
aWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9kb2Nf
Y29tbWVudC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2Rv
Y19jb21tZW50LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODdlMDIyMjg2YmM4
YTdhZjZiNGQ4NGQyMzYxZTA2ZDQzNTNmMTVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3No
YXJwX2RvY19jb21tZW50LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUu
Y29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVy
cyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9kb2NfY29t
bWVudC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvc3RydXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGNzaGFycCB7Ci0KLS8vIEZ1
bmN0aW9ucyB0byBjcmVhdGUgQyMgWE1MIGRvY3VtZW50YXRpb24gY29tbWVudHMuCi0vLyBDdXJy
ZW50bHkgdGhpcyBvbmx5IGluY2x1ZGVzIGRvY3VtZW50YXRpb24gY29tbWVudHMgY29udGFpbmlu
ZyB0ZXh0IHNwZWNpZmllZCBhcyBjb21tZW50cwotLy8gaW4gdGhlIC5wcm90byBmaWxlOyBkb2N1
bWVudGF0aW9uIGNvbW1lbnRzIGdlbmVyYXRlZCBqdXN0IGZyb20gZmllbGQvbWVzc2FnZS9lbnVt
L3Byb3RvIG5hbWVzCi0vLyBpcyBpbmxpbmVkIGluIHRoZSByZWxldmFudCBjb2RlLiBJZiBtb3Jl
IGNvbnRyb2wgaXMgcmVxdWlyZWQsIHRoYXQgY29kZSBjYW4gYmUgbW92ZWQgaGVyZS4KLQotdm9p
ZCBXcml0ZURvY0NvbW1lbnRCb2R5SW1wbChpbzo6UHJpbnRlciogcHJpbnRlciwgU291cmNlTG9j
YXRpb24gbG9jYXRpb24pIHsKLSAgICBzdHJpbmcgY29tbWVudHMgPSBsb2NhdGlvbi5sZWFkaW5n
X2NvbW1lbnRzLmVtcHR5KCkgPwotICAgICAgICBsb2NhdGlvbi50cmFpbGluZ19jb21tZW50cyA6
IGxvY2F0aW9uLmxlYWRpbmdfY29tbWVudHM7Ci0gICAgaWYgKGNvbW1lbnRzLmVtcHR5KCkpIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBYTUwgZXNjYXBpbmcuLi4gbm8gbmVlZCBm
b3IgYXBvc3Ryb3BoZXMgZXRjIGFzIHRoZSB3aG9sZSB0ZXh0IGlzIGdvaW5nIHRvIGJlIGEgY2hp
bGQKLSAgICAvLyBub2RlIG9mIGEgc3VtbWFyeSBlbGVtZW50LCBub3QgcGFydCBvZiBhbiBhdHRy
aWJ1dGUuCi0gICAgY29tbWVudHMgPSBTdHJpbmdSZXBsYWNlKGNvbW1lbnRzLCAiJiIsICImYW1w
OyIsIHRydWUpOwotICAgIGNvbW1lbnRzID0gU3RyaW5nUmVwbGFjZShjb21tZW50cywgIjwiLCAi
Jmx0OyIsIHRydWUpOwotICAgIHZlY3RvcjxzdHJpbmc+IGxpbmVzID0gU3BsaXQoY29tbWVudHMs
ICJcbiIsIGZhbHNlIC8qIHNraXBfZW1wdHkgKi8pOwotICAgIC8vIFRPRE86IFdlIHJlYWxseSBz
aG91bGQgd29yayBvdXQgd2hpY2ggcGFydCB0byBwdXQgaW4gdGhlIHN1bW1hcnkgYW5kIHdoaWNo
IHRvIHB1dCBpbiB0aGUgcmVtYXJrcy4uLgotICAgIC8vIGJ1dCB0aGF0IG5lZWRzIHRvIGJlIHBh
cnQgb2YgYSBiaWdnZXIgZWZmb3J0IHRvIHVuZGVyc3RhbmQgdGhlIG1hcmtkb3duIGJldHRlciBh
bnl3YXkuCi0gICAgcHJpbnRlci0+UHJpbnQoIi8vLyA8c3VtbWFyeT5cbiIpOwotICAgIGJvb2wg
bGFzdF93YXNfZW1wdHkgPSBmYWxzZTsKLSAgICAvLyBXZSBzcXVhc2ggbXVsdGlwbGUgYmxhbmsg
bGluZXMgZG93biB0byBvbmUsIGFuZCByZW1vdmUgYW55IHRyYWlsaW5nIGJsYW5rIGxpbmVzLiBX
ZSBuZWVkCi0gICAgLy8gdG8gcHJlc2VydmUgdGhlIGJsYW5rIGxpbmVzIHRoZW1zZWx2ZXMsIGFz
IHRoaXMgaXMgcmVsZXZhbnQgaW4gdGhlIG1hcmtkb3duLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBj
YW4ndCByZW1vdmUgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGFzICp0aGF0J3MqIHJl
bGV2YW50IGluIG1hcmtkb3duIHRvby4KLSAgICAvLyAoV2UgZG9uJ3Qgc2tpcCAianVzdCB3aGl0
ZXNwYWNlIiBsaW5lcywgZWl0aGVyLikKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPHN0cmluZz46Oml0
ZXJhdG9yIGl0ID0gbGluZXMuYmVnaW4oKTsgaXQgIT0gbGluZXMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgc3RyaW5nIGxpbmUgPSAqaXQ7Ci0gICAgICAgIGlmIChsaW5lLmVtcHR5KCkpIHsKLSAg
ICAgICAgICAgIGxhc3Rfd2FzX2VtcHR5ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmIChsYXN0X3dhc19lbXB0eSkgewotICAgICAgICAgICAgICAgIHByaW50ZXItPlBy
aW50KCIvLy9cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFzdF93YXNfZW1wdHkg
PSBmYWxzZTsKLSAgICAgICAgICAgIHByaW50ZXItPlByaW50KCIvLy8gJGxpbmUkXG4iLCAibGlu
ZSIsICppdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoIi8vLyA8L3N1
bW1hcnk+XG4iKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIERlc2NyaXB0b3JUeXBlPgotc3Rh
dGljIHZvaWQgV3JpdGVEb2NDb21tZW50Qm9keSgKLSAgICBpbzo6UHJpbnRlciogcHJpbnRlciwg
Y29uc3QgRGVzY3JpcHRvclR5cGUqIGRlc2NyaXB0b3IpIHsKLSAgICBTb3VyY2VMb2NhdGlvbiBs
b2NhdGlvbjsKLSAgICBpZiAoZGVzY3JpcHRvci0+R2V0U291cmNlTG9jYXRpb24oJmxvY2F0aW9u
KSkgewotICAgICAgICBXcml0ZURvY0NvbW1lbnRCb2R5SW1wbChwcmludGVyLCBsb2NhdGlvbik7
Ci0gICAgfQotfQotCi12b2lkIFdyaXRlTWVzc2FnZURvY0NvbW1lbnQoaW86OlByaW50ZXIqIHBy
aW50ZXIsIGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UpIHsKLSAgICBXcml0ZURvY0NvbW1lbnRC
b2R5KHByaW50ZXIsIG1lc3NhZ2UpOwotfQotCi12b2lkIFdyaXRlUHJvcGVydHlEb2NDb21tZW50
KGlvOjpQcmludGVyKiBwcmludGVyLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0g
ICAgV3JpdGVEb2NDb21tZW50Qm9keShwcmludGVyLCBmaWVsZCk7Ci19Ci0KLXZvaWQgV3JpdGVF
bnVtRG9jQ29tbWVudChpbzo6UHJpbnRlciogcHJpbnRlciwgY29uc3QgRW51bURlc2NyaXB0b3Iq
IGVudW1EZXNjcmlwdG9yKSB7Ci0gICAgV3JpdGVEb2NDb21tZW50Qm9keShwcmludGVyLCBlbnVt
RGVzY3JpcHRvcik7Ci19Ci12b2lkIFdyaXRlRW51bVZhbHVlRG9jQ29tbWVudChpbzo6UHJpbnRl
ciogcHJpbnRlciwgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWUpIHsKLSAgICBXcml0
ZURvY0NvbW1lbnRCb2R5KHByaW50ZXIsIHZhbHVlKTsKLX0KLQotdm9pZCBXcml0ZU1ldGhvZERv
Y0NvbW1lbnQoaW86OlByaW50ZXIqIHByaW50ZXIsIGNvbnN0IE1ldGhvZERlc2NyaXB0b3IqIG1l
dGhvZCkgewotICAgIFdyaXRlRG9jQ29tbWVudEJvZHkocHJpbnRlciwgbWV0aG9kKTsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2RvY19jb21tZW50LmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9kb2NfY29tbWVudC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWViMGVhMDRkMTZkNTIzZDVjNWVlN2MyZjBh
MjY2MTc4ZjUxODE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2RvY19jb21tZW50
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBf
RE9DX0NPTU1FTlRfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBf
RE9DX0NPTU1FTlRfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0KLW5hbWVzcGFjZSBn
b29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1l
c3BhY2UgY3NoYXJwIHsKLSAgICB2b2lkIFdyaXRlTWVzc2FnZURvY0NvbW1lbnQoaW86OlByaW50
ZXIqIHByaW50ZXIsIGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UpOwotICAgIHZvaWQgV3JpdGVQ
cm9wZXJ0eURvY0NvbW1lbnQoaW86OlByaW50ZXIqIHByaW50ZXIsIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQpOwotICAgIHZvaWQgV3JpdGVFbnVtRG9jQ29tbWVudChpbzo6UHJpbnRlciog
cHJpbnRlciwgY29uc3QgRW51bURlc2NyaXB0b3IqIGVudW1EZXNjcmlwdG9yKTsKLSAgICB2b2lk
IFdyaXRlRW51bVZhbHVlRG9jQ29tbWVudChpbzo6UHJpbnRlciogcHJpbnRlciwgY29uc3QgRW51
bVZhbHVlRGVzY3JpcHRvciogdmFsdWUpOwotICAgIHZvaWQgV3JpdGVNZXRob2REb2NDb21tZW50
KGlvOjpQcmludGVyKiBwcmludGVyLCBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2QpOwot
fSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09P
R0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFSUF9ET0NfQ09NTUVOVF9IX18KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW0uY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9lbnVtLmNjCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiZGZjYzJiZWVjYjhjOGVmZmRiM2QwNDA3ZmM4MjRkYmI5Nzg3
ZWRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW0uY2MKKysrIC9kZXYvbnVs
bApAQCAtMSw5NSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wt
YnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
I2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y29kZV9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1
Z2luLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29w
eV9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgot
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZG9jX2Nv
bW1lbnQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFy
cF9lbnVtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hh
cnBfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAv
Y3NoYXJwX29wdGlvbnMuaD4KLQotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OnNj
b3BlZF9wdHI7Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5h
bWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3NoYXJwIHsKLQotRW51bUdlbmVyYXRvcjo6
RW51bUdlbmVyYXRvcihjb25zdCBFbnVtRGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3QgT3B0
aW9ucyogb3B0aW9ucykgOgotICAgIFNvdXJjZUdlbmVyYXRvckJhc2UoZGVzY3JpcHRvci0+Zmls
ZSgpLCBvcHRpb25zKSwKLSAgICBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSB7Ci19Ci0KLUVudW1H
ZW5lcmF0b3I6On5FbnVtR2VuZXJhdG9yKCkgewotfQotCi12b2lkIEVudW1HZW5lcmF0b3I6Okdl
bmVyYXRlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIFdyaXRlRW51bURvY0NvbW1lbnQocHJp
bnRlciwgZGVzY3JpcHRvcl8pOwotICBXcml0ZUdlbmVyYXRlZENvZGVBdHRyaWJ1dGVzKHByaW50
ZXIpOwotICBwcmludGVyLT5QcmludCgiJGFjY2Vzc19sZXZlbCQgZW51bSAkbmFtZSQge1xuIiwK
LSAgICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCIsIGNsYXNzX2FjY2Vzc19sZXZlbCgpLAot
ICAgICAgICAgICAgICAgICAibmFtZSIsIGRlc2NyaXB0b3JfLT5uYW1lKCkpOwotICBwcmludGVy
LT5JbmRlbnQoKTsKLSAgc3RkOjpzZXQ8c3RyaW5nPiB1c2VkX25hbWVzOwotICBmb3IgKGludCBp
ID0gMDsgaSA8IGRlc2NyaXB0b3JfLT52YWx1ZV9jb3VudCgpOyBpKyspIHsKLSAgICAgIFdyaXRl
RW51bVZhbHVlRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXy0+dmFsdWUoaSkpOwotICAg
ICAgc3RyaW5nIG9yaWdpbmFsX25hbWUgPSBkZXNjcmlwdG9yXy0+dmFsdWUoaSktPm5hbWUoKTsK
LSAgICAgIHN0cmluZyBuYW1lID0gb3B0aW9ucygpLT5sZWdhY3lfZW51bV92YWx1ZXMKLSAgICAg
ICAgICA/IGRlc2NyaXB0b3JfLT52YWx1ZShpKS0+bmFtZSgpCi0gICAgICAgICAgOiBHZXRFbnVt
VmFsdWVOYW1lKGRlc2NyaXB0b3JfLT5uYW1lKCksIGRlc2NyaXB0b3JfLT52YWx1ZShpKS0+bmFt
ZSgpKTsKLSAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW55IGR1cGxpY2F0ZSBuYW1l
cyBkdWUgdG8gcHJlZml4IHJlbW92YWwuCi0gICAgICB3aGlsZSAoIXVzZWRfbmFtZXMuaW5zZXJ0
KG5hbWUpLnNlY29uZCkgewotICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHdlJ2xsIGVuZCB1cCBn
aXZpbmcgdGhpcyB3YXJuaW5nIG11bHRpcGxlIHRpbWVzLCBidXQgdGhhdCdzIGJldHRlciB0aGFu
IG5vdCBhdCBhbGwuCi0gICAgICAgIEdPT0dMRV9MT0coV0FSTklORykgPDwgIkR1cGxpY2F0ZSBl
bnVtIHZhbHVlICIgPDwgbmFtZSA8PCAiIChvcmlnaW5hbGx5ICIgPDwgb3JpZ2luYWxfbmFtZQot
ICAgICAgICAgIDw8ICIpIGluICIgPDwgZGVzY3JpcHRvcl8tPm5hbWUoKSA8PCAiOyBhZGRpbmcg
dW5kZXJzY29yZSB0byBkaXN0aW5ndWlzaCI7Ci0gICAgICAgIG5hbWUgKz0gIl8iOwotICAgICAg
fQotICAgICAgcHJpbnRlci0+UHJpbnQoIltwYnI6Ok9yaWdpbmFsTmFtZShcIiRvcmlnaW5hbF9u
YW1lJFwiKV0gJG5hbWUkID0gJG51bWJlciQsXG4iLAotICAgICAgICAgIm9yaWdpbmFsX25hbWUi
LCBvcmlnaW5hbF9uYW1lLAotICAgICAgICAgIm5hbWUiLCBuYW1lLAotICAgICAgICAgIm51bWJl
ciIsIFNpbXBsZUl0b2EoZGVzY3JpcHRvcl8tPnZhbHVlKGkpLT5udW1iZXIoKSkpOyAgICAgICAg
IAotICB9Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwot
ICBwcmludGVyLT5QcmludCgiXG4iKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAg
Ly8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
c2hhcnAvY3NoYXJwX2VudW0uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAv
Y3NoYXJwX2VudW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkyNWNkZjJiZWRm
YTcyNGQ3NzQxNmE5MDE3OTU0ZDc2ZTkzOWE3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9lbnVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJf
Q1NIQVJQX0VOVU1fSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBf
RU5VTV9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX3NvdXJjZV9nZW5lcmF0b3JfYmFzZS5oPgotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewot
bmFtZXNwYWNlIGNzaGFycCB7Ci0KLWNsYXNzIEVudW1HZW5lcmF0b3IgOiBwdWJsaWMgU291cmNl
R2VuZXJhdG9yQmFzZSB7Ci0gcHVibGljOgotICBFbnVtR2VuZXJhdG9yKGNvbnN0IEVudW1EZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBPcHRpb25zKiBvcHRpb25zKTsKLSAgfkVudW1HZW5l
cmF0b3IoKTsKLQotICB2b2lkIEdlbmVyYXRlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotIHBy
aXZhdGU6Ci0gIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLQotICBHT09HTEVf
RElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRW51bUdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBu
YW1lc3BhY2UgY3NoYXJwCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFj
ZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9Q
Uk9UT0JVRl9DT01QSUxFUl9DU0hBUlBfRU5VTV9IX18KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZW51bV9maWVsZC5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW1fZmllbGQuY2MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YzBiNTk2MWFjZmNmNTM1MWQ1NGE2ZmY3NjIwNjRhMzFj
NmFiODMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZW51bV9maWVsZC5jYworKysg
L2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvcGx1Z2luLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lv
L3plcm9fY29weV9zdHJlYW0uaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvY3NoYXJwL2NzaGFycF9vcHRpb25zLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZW51bV9maWVsZC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xl
IHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNl
IGNzaGFycCB7Ci0KLUVudW1GaWVsZEdlbmVyYXRvcjo6RW51bUZpZWxkR2VuZXJhdG9yKGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBmaWVsZE9yZGluYWwsIGNvbnN0IE9wdGlvbnMgKm9wdGlvbnMpCi0g
ICAgOiBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcihkZXNjcmlwdG9yLCBmaWVsZE9yZGluYWwsIG9w
dGlvbnMpIHsKLX0KLQotRW51bUZpZWxkR2VuZXJhdG9yOjp+RW51bUZpZWxkR2VuZXJhdG9yKCkg
ewotfQotCi12b2lkIEVudW1GaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIk
bmFtZSRfID0gKCR0eXBlX25hbWUkKSBpbnB1dC5SZWFkRW51bSgpO1xuIik7Ci19Ci0KLXZvaWQg
RW51bUZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICgkaGFz
X3Byb3BlcnR5X2NoZWNrJCkge1xuIgotICAgICIgIG91dHB1dC5Xcml0ZVJhd1RhZygkdGFnX2J5
dGVzJCk7XG4iCi0gICAgIiAgb3V0cHV0LldyaXRlRW51bSgoaW50KSAkcHJvcGVydHlfbmFtZSQp
O1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRl
U2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlBy
aW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgImlmICgkaGFzX3Byb3BlcnR5X2NoZWNrJCkge1xu
IgotICAgICAgIiAgc2l6ZSArPSAkdGFnX3NpemUkICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNv
bXB1dGVFbnVtU2l6ZSgoaW50KSAkcHJvcGVydHlfbmFtZSQpO1xuIgotICAgICJ9XG4iKTsKLX0K
LQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlQ29kZWNDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0g
ICAgICAgICJwYjo6RmllbGRDb2RlYy5Gb3JFbnVtKCR0YWckLCB4ID0+IChpbnQpIHgsIHggPT4g
KCR0eXBlX25hbWUkKSB4KSIpOwotfQotCi1FbnVtT25lb2ZGaWVsZEdlbmVyYXRvcjo6RW51bU9u
ZW9mRmllbGRHZW5lcmF0b3IoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9y
LCBpbnQgZmllbGRPcmRpbmFsLCBjb25zdCBPcHRpb25zICpvcHRpb25zKQotICA6IFByaW1pdGl2
ZU9uZW9mRmllbGRHZW5lcmF0b3IoZGVzY3JpcHRvciwgZmllbGRPcmRpbmFsLCBvcHRpb25zKSB7
Ci19Ci0KLUVudW1PbmVvZkZpZWxkR2VuZXJhdG9yOjp+RW51bU9uZW9mRmllbGRHZW5lcmF0b3Io
KSB7Ci19Ci0KLXZvaWQgRW51bU9uZW9mRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlUGFyc2luZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgLy8gVE9ETyhqb25za2VldCk6IFdoYXQgYWJv
dXQgaWYgd2UgcmVhZCB0aGUgZGVmYXVsdCB2YWx1ZT8KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAg
dmFyaWFibGVzXywKLSAgICAiJG9uZW9mX25hbWUkXyA9IGlucHV0LlJlYWRFbnVtKCk7XG4iCi0g
ICAgIiRvbmVvZl9uYW1lJENhc2VfID0gJG9uZW9mX3Byb3BlcnR5X25hbWUkT25lb2ZDYXNlLiRw
cm9wZXJ0eV9uYW1lJDtcbiIpOwotfQotCi12b2lkIEVudW1PbmVvZkZpZWxkR2VuZXJhdG9yOjpH
ZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50
ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgImlmICgkaGFzX3Byb3BlcnR5X2NoZWNr
JCkge1xuIgotICAgICIgIG91dHB1dC5Xcml0ZVJhd1RhZygkdGFnX2J5dGVzJCk7XG4iCi0gICAg
IiAgb3V0cHV0LldyaXRlRW51bSgoaW50KSAkcHJvcGVydHlfbmFtZSQpO1xuIgotICAgICJ9XG4i
KTsKLX0KLQotdm9pZCBFbnVtT25lb2ZGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVTZXJpYWxpemVk
U2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAg
dmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNfcHJvcGVydHlfY2hlY2skKSB7XG4iCi0gICAgIiAg
c2l6ZSArPSAkdGFnX3NpemUkICsgcGI6OkNvZGVkT3V0cHV0U3RyZWFtLkNvbXB1dGVFbnVtU2l6
ZSgoaW50KSAkcHJvcGVydHlfbmFtZSQpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW1fZmllbGQuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW1fZmllbGQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWI3NjY5YmE1ZGMwNDEyMmEyNjlhN2U5NTA0ZGE3YWVmNWU3YmZl
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9lbnVtX2ZpZWxkLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw4MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX0VOVU1fRklFTERfSF9f
Ci0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBfRU5VTV9GSUVMRF9IX18K
LQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
c2hhcnAvY3NoYXJwX3ByaW1pdGl2ZV9maWVsZC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGNzaGFy
cCB7Ci0KLWNsYXNzIEVudW1GaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBQcmltaXRpdmVGaWVsZEdl
bmVyYXRvciB7Ci0gcHVibGljOgotICBFbnVtRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgaW50IGZpZWxkT3JkaW5h
bCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMgKm9wdGlvbnMpOwotICB+RW51
bUZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlQ29kZWNDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0
aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNl
cmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSBwcml2YXRlOgotICBH
T09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRW51bUZpZWxkR2VuZXJhdG9yKTsKLX07
Ci0KLWNsYXNzIEVudW1PbmVvZkZpZWxkR2VuZXJhdG9yIDogcHVibGljIFByaW1pdGl2ZU9uZW9m
RmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgRW51bU9uZW9mRmllbGRHZW5lcmF0b3IoY29u
c3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZmllbGRPcmRpbmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRp
b25zICpvcHRpb25zKTsKLSAgfkVudW1PbmVvZkZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgdmlydHVh
bCB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0
dWFsIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7
Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcik7Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RP
UlMoRW51bU9uZW9mRmllbGRHZW5lcmF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNzaGFy
cAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfQ1NIQVJQX0VOVU1fRklFTERfSF9fCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9maWVsZF9iYXNlLmNjCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlM2MzNDA0MGI4ZmU0YTM3NjEyZTgyMjg2ZDI5YmRkOTJlMzRiMDU4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuY2MKKysrIC9kZXYvbnVs
bApAQCAtMSw0MjkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9wbHVnaW4uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lv
L3plcm9fY29weV9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWF0
aGxpbWl0cy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9maWVsZF9iYXNlLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfaGVscGVycy5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX25hbWVzLmg+Ci0K
LXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpzY29wZWRfcHRyOwotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewot
bmFtZXNwYWNlIGNzaGFycCB7Ci0KLXZvaWQgRmllbGRHZW5lcmF0b3JCYXNlOjpTZXRDb21tb25G
aWVsZFZhcmlhYmxlcygKLSAgICBtYXA8c3RyaW5nLCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAg
Ly8gTm90ZTogdGhpcyB3aWxsIGJlIHZhbGlkIGV2ZW4gdGhvdWdoIHRoZSB0YWcgZW1pdHRlZCBm
b3IgcGFja2VkIGFuZCB1bnBhY2tlZCB2ZXJzaW9ucyBvZgotICAvLyByZXBlYXRlZCBmaWVsZHMg
dmFyaWVzIGJ5IHdpcmUgZm9ybWF0LiBUaGUgd2lyZSBmb3JtYXQgaXMgZW5jb2RlZCBpbiB0aGUg
Ym90dG9tIDMgYml0cywgd2hpY2gKLSAgLy8gbmV2ZXIgZWZmZWN0cyB0aGUgdGFnIHNpemUuCi0g
IGludCB0YWdfc2l6ZSA9IGludGVybmFsOjpXaXJlRm9ybWF0OjpUYWdTaXplKGRlc2NyaXB0b3Jf
LT5udW1iZXIoKSwgZGVzY3JpcHRvcl8tPnR5cGUoKSk7Ci0gIHVpbnQgdGFnID0gaW50ZXJuYWw6
OldpcmVGb3JtYXQ6Ok1ha2VUYWcoZGVzY3JpcHRvcl8pOwotICB1aW50OCB0YWdfYXJyYXlbNV07
Ci0gIGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVUYWdUb0FycmF5KHRhZywgdGFnX2FycmF5
KTsKLSAgc3RyaW5nIHRhZ19ieXRlcyA9IFNpbXBsZUl0b2EodGFnX2FycmF5WzBdKTsKLSAgZm9y
IChpbnQgaSA9IDE7IGkgPCB0YWdfc2l6ZTsgaSsrKSB7Ci0gICAgdGFnX2J5dGVzICs9ICIsICIg
KyBTaW1wbGVJdG9hKHRhZ19hcnJheVtpXSk7Ci0gIH0KLQotICAoKnZhcmlhYmxlcylbImFjY2Vz
c19sZXZlbCJdID0gInB1YmxpYyI7Ci0gICgqdmFyaWFibGVzKVsidGFnIl0gPSBTaW1wbGVJdG9h
KHRhZyk7Ci0gICgqdmFyaWFibGVzKVsidGFnX3NpemUiXSA9IFNpbXBsZUl0b2EodGFnX3NpemUp
OwotICAoKnZhcmlhYmxlcylbInRhZ19ieXRlcyJdID0gdGFnX2J5dGVzOwotCi0gICgqdmFyaWFi
bGVzKVsicHJvcGVydHlfbmFtZSJdID0gcHJvcGVydHlfbmFtZSgpOwotICAoKnZhcmlhYmxlcylb
InR5cGVfbmFtZSJdID0gdHlwZV9uYW1lKCk7Ci0gICgqdmFyaWFibGVzKVsibmFtZSJdID0gbmFt
ZSgpOwotICAoKnZhcmlhYmxlcylbImRlc2NyaXB0b3JfbmFtZSJdID0gZGVzY3JpcHRvcl8tPm5h
bWUoKTsKLSAgKCp2YXJpYWJsZXMpWyJkZWZhdWx0X3ZhbHVlIl0gPSBkZWZhdWx0X3ZhbHVlKCk7
Ci0gIGlmIChoYXNfZGVmYXVsdF92YWx1ZSgpKSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJuYW1lX2Rl
Zl9tZXNzYWdlIl0gPQotICAgICAgKCp2YXJpYWJsZXMpWyJuYW1lIl0gKyAiXyA9ICIgKyAoKnZh
cmlhYmxlcylbImRlZmF1bHRfdmFsdWUiXTsKLSAgfSBlbHNlIHsKLSAgICAoKnZhcmlhYmxlcylb
Im5hbWVfZGVmX21lc3NhZ2UiXSA9ICgqdmFyaWFibGVzKVsibmFtZSJdICsgIl8iOwotICB9Ci0g
ICgqdmFyaWFibGVzKVsiY2FwaXRhbGl6ZWRfdHlwZV9uYW1lIl0gPSBjYXBpdGFsaXplZF90eXBl
X25hbWUoKTsKLSAgKCp2YXJpYWJsZXMpWyJudW1iZXIiXSA9IG51bWJlcigpOwotICAoKnZhcmlh
YmxlcylbImhhc19wcm9wZXJ0eV9jaGVjayJdID0KLSAgICAoKnZhcmlhYmxlcylbInByb3BlcnR5
X25hbWUiXSArICIgIT0gIiArICgqdmFyaWFibGVzKVsiZGVmYXVsdF92YWx1ZSJdOwotICAoKnZh
cmlhYmxlcylbIm90aGVyX2hhc19wcm9wZXJ0eV9jaGVjayJdID0gIm90aGVyLiIgKwotICAgICgq
dmFyaWFibGVzKVsicHJvcGVydHlfbmFtZSJdICsgIiAhPSAiICsgKCp2YXJpYWJsZXMpWyJkZWZh
dWx0X3ZhbHVlIl07Ci19Ci0KLXZvaWQgRmllbGRHZW5lcmF0b3JCYXNlOjpTZXRDb21tb25PbmVv
ZkZpZWxkVmFyaWFibGVzKAotICAgIG1hcDxzdHJpbmcsIHN0cmluZz4qIHZhcmlhYmxlcykgewot
ICAoKnZhcmlhYmxlcylbIm9uZW9mX25hbWUiXSA9IG9uZW9mX25hbWUoKTsKLSAgKCp2YXJpYWJs
ZXMpWyJoYXNfcHJvcGVydHlfY2hlY2siXSA9Ci0gICAgb25lb2ZfbmFtZSgpICsgIkNhc2VfID09
ICIgKyBvbmVvZl9wcm9wZXJ0eV9uYW1lKCkgKwotICAgICJPbmVvZkNhc2UuIiArIHByb3BlcnR5
X25hbWUoKTsKLSAgKCp2YXJpYWJsZXMpWyJvbmVvZl9wcm9wZXJ0eV9uYW1lIl0gPSBvbmVvZl9w
cm9wZXJ0eV9uYW1lKCk7Ci19Ci0KLUZpZWxkR2VuZXJhdG9yQmFzZTo6RmllbGRHZW5lcmF0b3JC
YXNlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZE9yZGluYWwsIGNvbnN0IE9wdGlvbnMqIG9w
dGlvbnMpCi0gICAgOiBTb3VyY2VHZW5lcmF0b3JCYXNlKGRlc2NyaXB0b3ItPmZpbGUoKSwgb3B0
aW9ucyksCi0gICAgICBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSwKLSAgICAgIGZpZWxkT3JkaW5h
bF8oZmllbGRPcmRpbmFsKSB7Ci0gIFNldENvbW1vbkZpZWxkVmFyaWFibGVzKCZ2YXJpYWJsZXNf
KTsKLX0KLQotRmllbGRHZW5lcmF0b3JCYXNlOjp+RmllbGRHZW5lcmF0b3JCYXNlKCkgewotfQot
Ci12b2lkIEZpZWxkR2VuZXJhdG9yQmFzZTo6R2VuZXJhdGVGcmVlemluZ0NvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIHsKLSAgLy8gTm8tb3A6IG9ubHkgbWVzc2FnZSBmaWVsZHMgYW5kIHJlcGVh
dGVkIGZpZWxkcyBuZWVkCi0gIC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGZyZWV6aW5nLCBzbyBk
ZWZhdWx0IHRvIG5vdCBnZW5lcmF0aW5nIGFueSBjb2RlLgotfQotCi12b2lkIEZpZWxkR2VuZXJh
dG9yQmFzZTo6R2VuZXJhdGVDb2RlY0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgICAv
LyBOby1vcDogZXhwZWN0IHRoaXMgdG8gYmUgb3ZlcnJpZGRlbiBieSBhcHByb3ByaWF0ZSB0eXBl
cy4KLSAgICAvLyBDb3VsZCBmYWlsIGlmIHdlIGdldCBjYWxsZWQgaGVyZSB0aG91Z2guLi4KLX0K
LQotdm9pZCBGaWVsZEdlbmVyYXRvckJhc2U6OkFkZERlcHJlY2F0ZWRGbGFnKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIGlmIChkZXNjcmlwdG9yXy0+b3B0aW9ucygpLmRlcHJlY2F0ZWQoKSkK
LSAgewotICAgIHByaW50ZXItPlByaW50KCJbZ2xvYmFsOjpTeXN0ZW0uT2Jzb2xldGVBdHRyaWJ1
dGUoKV1cbiIpOwotICB9Ci19Ci0KLXZvaWQgRmllbGRHZW5lcmF0b3JCYXNlOjpBZGRQdWJsaWNN
ZW1iZXJBdHRyaWJ1dGVzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIEFkZERlcHJlY2F0ZWRG
bGFnKHByaW50ZXIpOwotfQotCi1zdGQ6OnN0cmluZyBGaWVsZEdlbmVyYXRvckJhc2U6Om9uZW9m
X3Byb3BlcnR5X25hbWUoKSB7Ci0gIHJldHVybiBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGRlc2Ny
aXB0b3JfLT5jb250YWluaW5nX29uZW9mKCktPm5hbWUoKSwgdHJ1ZSk7Ci19Ci0KLXN0ZDo6c3Ry
aW5nIEZpZWxkR2VuZXJhdG9yQmFzZTo6b25lb2ZfbmFtZSgpIHsKLSAgcmV0dXJuIFVuZGVyc2Nv
cmVzVG9DYW1lbENhc2UoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfb25lb2YoKS0+bmFtZSgpLCBm
YWxzZSk7Ci19Ci0KLXN0ZDo6c3RyaW5nIEZpZWxkR2VuZXJhdG9yQmFzZTo6cHJvcGVydHlfbmFt
ZSgpIHsKLSAgcmV0dXJuIEdldFByb3BlcnR5TmFtZShkZXNjcmlwdG9yXyk7Ci19Ci0KLXN0ZDo6
c3RyaW5nIEZpZWxkR2VuZXJhdG9yQmFzZTo6bmFtZSgpIHsKLSAgcmV0dXJuIFVuZGVyc2NvcmVz
VG9DYW1lbENhc2UoR2V0RmllbGROYW1lKGRlc2NyaXB0b3JfKSwgZmFsc2UpOwotfQotCi1zdGQ6
OnN0cmluZyBGaWVsZEdlbmVyYXRvckJhc2U6OnR5cGVfbmFtZSgpIHsKLSAgcmV0dXJuIHR5cGVf
bmFtZShkZXNjcmlwdG9yXyk7Ci19Ci0KLXN0ZDo6c3RyaW5nIEZpZWxkR2VuZXJhdG9yQmFzZTo6
dHlwZV9uYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBzd2l0Y2gg
KGRlc2NyaXB0b3ItPnR5cGUoKSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0VO
VU06Ci0gICAgICByZXR1cm4gR2V0Q2xhc3NOYW1lKGRlc2NyaXB0b3ItPmVudW1fdHlwZSgpKTsK
LSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdFOgotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX0dST1VQOgotICAgICAgaWYgKElzV3JhcHBlclR5cGUoZGVzY3JpcHRv
cikpIHsKLSAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiB3cmFwcGVkX2ZpZWxkID0KLSAg
ICAgICAgICAgIGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5maWVsZCgwKTsKLSAgICAgICAg
c3RyaW5nIHdyYXBwZWRfZmllbGRfdHlwZV9uYW1lID0gdHlwZV9uYW1lKHdyYXBwZWRfZmllbGQp
OwotICAgICAgICAvLyBTdHJpbmcgYW5kIEJ5dGVTdHJpbmcgZ28gdG8gdGhlIHNhbWUgdHlwZTsg
b3RoZXIgd3JhcHBlZCB0eXBlcwotICAgICAgICAvLyBnbyB0byB0aGUgbnVsbGFibGUgZXF1aXZh
bGVudC4KLSAgICAgICAgaWYgKHdyYXBwZWRfZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0
b3I6OlRZUEVfU1RSSU5HIHx8Ci0gICAgICAgICAgICB3cmFwcGVkX2ZpZWxkLT50eXBlKCkgPT0g
RmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTKSB7Ci0gICAgICAgICAgcmV0dXJuIHdyYXBwZWRf
ZmllbGRfdHlwZV9uYW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiB3cmFw
cGVkX2ZpZWxkX3R5cGVfbmFtZSArICI/IjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0
dXJuIEdldENsYXNzTmFtZShkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKSk7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfRE9VQkxFOgotICAgICAgcmV0dXJuICJkb3VibGUiOwotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZMT0FUOgotICAgICAgcmV0dXJuICJmbG9hdCI7
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfSU5UNjQ6Ci0gICAgICByZXR1cm4gImxv
bmciOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJTlQ2NDoKLSAgICAgIHJldHVy
biAidWxvbmciOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDMyOgotICAgICAg
cmV0dXJuICJpbnQiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVENjQ6Ci0g
ICAgICByZXR1cm4gInVsb25nIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhF
RDMyOgotICAgICAgcmV0dXJuICJ1aW50IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9CT09MOgotICAgICAgcmV0dXJuICJib29sIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV9TVFJJTkc6Ci0gICAgICByZXR1cm4gInN0cmluZyI7Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OlRZUEVfQllURVM6Ci0gICAgICByZXR1cm4gInBiOjpCeXRlU3RyaW5nIjsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UMzI6Ci0gICAgICByZXR1cm4gInVpbnQiOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDMyOgotICAgICAgcmV0dXJuICJp
bnQiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDY0OgotICAgICAgcmV0
dXJuICJsb25nIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TSU5UMzI6Ci0gICAg
ICByZXR1cm4gImludCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDY0Ogot
ICAgICAgcmV0dXJuICJsb25nIjsKLSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xPRyhGQVRB
TCk8PCAiVW5rbm93biBmaWVsZCB0eXBlLiI7Ci0gICAgICByZXR1cm4gIiI7Ci0gIH0KLX0KLQot
Ym9vbCBGaWVsZEdlbmVyYXRvckJhc2U6Omhhc19kZWZhdWx0X3ZhbHVlKCkgewotICBzd2l0Y2gg
KGRlc2NyaXB0b3JfLT50eXBlKCkpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9F
TlVNOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0U6Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVA6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9ET1VCTEU6Ci0gICAgICByZXR1cm4gZGVzY3JpcHRvcl8t
PmRlZmF1bHRfdmFsdWVfZG91YmxlKCkgIT0gMC4wOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX0ZMT0FUOgotICAgICAgcmV0dXJuIGRlc2NyaXB0b3JfLT5kZWZhdWx0X3ZhbHVlX2Zs
b2F0KCkgIT0gMC4wOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDY0OgotICAg
ICAgcmV0dXJuIGRlc2NyaXB0b3JfLT5kZWZhdWx0X3ZhbHVlX2ludDY0KCkgIT0gMEw7Ci0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfVUlOVDY0OgotICAgICAgcmV0dXJuIGRlc2NyaXB0
b3JfLT5kZWZhdWx0X3ZhbHVlX3VpbnQ2NCgpICE9IDBMOwotICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpUWVBFX0lOVDMyOgotICAgICAgcmV0dXJuIGRlc2NyaXB0b3JfLT5kZWZhdWx0X3ZhbHVl
X2ludDMyKCkgIT0gMDsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhFRDY0Ogot
ICAgICAgcmV0dXJuIGRlc2NyaXB0b3JfLT5kZWZhdWx0X3ZhbHVlX3VpbnQ2NCgpICE9IDBMOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVEMzI6Ci0gICAgICByZXR1cm4gZGVz
Y3JpcHRvcl8tPmRlZmF1bHRfdmFsdWVfdWludDMyKCkgIT0gMDsKLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6VFlQRV9CT09MOgotICAgICAgcmV0dXJuIGRlc2NyaXB0b3JfLT5kZWZhdWx0X3Zh
bHVlX2Jvb2woKTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkc6Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRFUzoKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJTlQzMjoK
LSAgICAgIHJldHVybiBkZXNjcmlwdG9yXy0+ZGVmYXVsdF92YWx1ZV91aW50MzIoKSAhPSAwOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDMyOgotICAgICAgcmV0dXJuIGRl
c2NyaXB0b3JfLT5kZWZhdWx0X3ZhbHVlX2ludDMyKCkgIT0gMDsKLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6VFlQRV9TRklYRUQ2NDoKLSAgICAgIHJldHVybiBkZXNjcmlwdG9yXy0+ZGVmYXVs
dF92YWx1ZV9pbnQ2NCgpICE9IDBMOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJ
TlQzMjoKLSAgICAgIHJldHVybiBkZXNjcmlwdG9yXy0+ZGVmYXVsdF92YWx1ZV9pbnQzMigpICE9
IDA7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDY0OgotICAgICAgcmV0dXJu
IGRlc2NyaXB0b3JfLT5kZWZhdWx0X3ZhbHVlX2ludDY0KCkgIT0gMEw7Ci0gICAgZGVmYXVsdDoK
LSAgICAgIEdPT0dMRV9MT0coRkFUQUwpPDwgIlVua25vd24gZmllbGQgdHlwZS4iOwotICAgICAg
cmV0dXJuIHRydWU7Ci0gIH0KLX0KLQotYm9vbCBGaWVsZEdlbmVyYXRvckJhc2U6OmlzX251bGxh
YmxlX3R5cGUoKSB7Ci0gIHN3aXRjaCAoZGVzY3JpcHRvcl8tPnR5cGUoKSkgewotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU06Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfRE9VQkxFOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZMT0FUOgotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDY0OgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX1VJTlQ2NDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQzMjoKLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhFRDY0OgotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0ZJWEVEMzI6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQk9P
TDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UMzI6Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVEMzI6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfU0ZJWEVENjQ6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDMyOgotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQ2NDoKLSAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0U6Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfR1JPVVA6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
U1RSSU5HOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTOgotICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xPRyhGQVRBTCk8PCAiVW5r
bm93biBmaWVsZCB0eXBlLiI7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQotCi1ib29sIEFs
bFByaW50YWJsZUFzY2lpKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KSB7Ci0gIGZvcihpbnQgaSA9
IDA7IGkgPCB0ZXh0LnNpemUoKTsgaSsrKSB7Ci0gICAgaWYgKHRleHRbaV0gPCAweDIwIHx8IHRl
eHRbaV0gPiAweDdlKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0gIHJldHVy
biB0cnVlOwotfQotCi1zdGQ6OnN0cmluZyBGaWVsZEdlbmVyYXRvckJhc2U6OkdldFN0cmluZ0Rl
ZmF1bHRWYWx1ZUludGVybmFsKCkgewotICAvLyBObyBvdGhlciBkZWZhdWx0IHZhbHVlcyBuZWVk
ZWQgZm9yIHByb3RvMy4uLgotICByZXR1cm4gIlwiXCIiOwotfQotCi1zdGQ6OnN0cmluZyBGaWVs
ZEdlbmVyYXRvckJhc2U6OkdldEJ5dGVzRGVmYXVsdFZhbHVlSW50ZXJuYWwoKSB7Ci0gIC8vIE5v
IG90aGVyIGRlZmF1bHQgdmFsdWVzIG5lZWRlZCBmb3IgcHJvdG8zLi4uCi0gIHJldHVybiAicGI6
OkJ5dGVTdHJpbmcuRW1wdHkiOwotfQotCi1zdGQ6OnN0cmluZyBGaWVsZEdlbmVyYXRvckJhc2U6
OmRlZmF1bHRfdmFsdWUoKSB7Ci0gICAgcmV0dXJuIGRlZmF1bHRfdmFsdWUoZGVzY3JpcHRvcl8p
OwotfQotCi1zdGQ6OnN0cmluZyBGaWVsZEdlbmVyYXRvckJhc2U6OmRlZmF1bHRfdmFsdWUoY29u
c3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHN3aXRjaCAoZGVzY3JpcHRvci0+
dHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRU5VTToKLSAgICAgIC8v
IEFsbCBwcm90bzMgZW51bXMgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgb2YgMCwgYW5kIHRoZXJlJ3Mg
YW4gaW1wbGljaXQgY29udmVyc2lvbiBmcm9tIHRoZSBjb25zdGFudCAwIHRvCi0gICAgICAvLyBh
bnkgQyMgZW51bS4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHdvcmsgb3V0IHdoYXQgd2Ug
YWN0dWFsbHkgbWFwcGVkIHRoZSBlbnVtIHZhbHVlIG5hbWUgdG8uCi0gICAgIHJldHVybiAiMCI7
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRToKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9HUk9VUDoKLSAgICAgIGlmIChJc1dyYXBwZXJUeXBlKGRlc2NyaXB0
b3IpKSB7Ci0gICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogd3JhcHBlZF9maWVsZCA9IGRl
c2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5maWVsZCgwKTsKLSAgICAgICAgcmV0dXJuIGRlZmF1
bHRfdmFsdWUod3JhcHBlZF9maWVsZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4g
Im51bGwiOwotICAgICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0RPVUJMRTog
ewotICAgICAgZG91YmxlIHZhbHVlID0gZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1ZV9kb3VibGUo
KTsKLSAgICAgIGlmICh2YWx1ZSA9PSBudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgp
KSB7Ci0gICAgICAgIHJldHVybiAiZG91YmxlLlBvc2l0aXZlSW5maW5pdHkiOwotICAgICAgfSBl
bHNlIGlmICh2YWx1ZSA9PSAtbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewot
ICAgICAgICByZXR1cm4gImRvdWJsZS5OZWdhdGl2ZUluZmluaXR5IjsKLSAgICAgIH0gZWxzZSBp
ZiAoTWF0aExpbWl0czxkb3VibGU+OjpJc05hTih2YWx1ZSkpIHsKLSAgICAgICAgcmV0dXJuICJk
b3VibGUuTmFOIjsKLSAgICAgIH0KLSAgICAgIHJldHVybiBTaW1wbGVEdG9hKHZhbHVlKSArICJE
IjsKLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRkxPQVQ6IHsKLSAgICAg
IGZsb2F0IHZhbHVlID0gZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1ZV9mbG9hdCgpOwotICAgICAg
aWYgKHZhbHVlID09IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkgewotICAgICAg
ICByZXR1cm4gImZsb2F0LlBvc2l0aXZlSW5maW5pdHkiOwotICAgICAgfSBlbHNlIGlmICh2YWx1
ZSA9PSAtbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSB7Ci0gICAgICAgIHJldHVy
biAiZmxvYXQuTmVnYXRpdmVJbmZpbml0eSI7Ci0gICAgICB9IGVsc2UgaWYgKE1hdGhMaW1pdHM8
ZmxvYXQ+OjpJc05hTih2YWx1ZSkpIHsKLSAgICAgICAgcmV0dXJuICJmbG9hdC5OYU4iOwotICAg
ICAgfQotICAgICAgcmV0dXJuIFNpbXBsZUZ0b2EodmFsdWUpICsgIkYiOwotICAgIH0KLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQ2NDoKLSAgICAgIHJldHVybiBTaW1wbGVJdG9h
KGRlc2NyaXB0b3ItPmRlZmF1bHRfdmFsdWVfaW50NjQoKSkgKyAiTCI7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfVUlOVDY0OgotICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoZGVzY3Jp
cHRvci0+ZGVmYXVsdF92YWx1ZV91aW50NjQoKSkgKyAiVUwiOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0lOVDMyOgotICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoZGVzY3JpcHRvci0+
ZGVmYXVsdF92YWx1ZV9pbnQzMigpKTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9G
SVhFRDY0OgotICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1
ZV91aW50NjQoKSkgKyAiVUwiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVE
MzI6Ci0gICAgICByZXR1cm4gU2ltcGxlSXRvYShkZXNjcmlwdG9yLT5kZWZhdWx0X3ZhbHVlX3Vp
bnQzMigpKTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CT09MOgotICAgICAgaWYg
KGRlc2NyaXB0b3ItPmRlZmF1bHRfdmFsdWVfYm9vbCgpKSB7Ci0gICAgICAgIHJldHVybiAidHJ1
ZSI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gImZhbHNlIjsKLSAgICAgIH0KLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkc6Ci0gICAgICByZXR1cm4gR2V0U3Ry
aW5nRGVmYXVsdFZhbHVlSW50ZXJuYWwoKTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9CWVRFUzoKLSAgICAgIHJldHVybiBHZXRCeXRlc0RlZmF1bHRWYWx1ZUludGVybmFsKCk7Ci0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfVUlOVDMyOgotICAgICAgcmV0dXJuIFNpbXBs
ZUl0b2EoZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1ZV91aW50MzIoKSk7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVEMzI6Ci0gICAgICByZXR1cm4gU2ltcGxlSXRvYShkZXNj
cmlwdG9yLT5kZWZhdWx0X3ZhbHVlX2ludDMyKCkpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX1NGSVhFRDY0OgotICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoZGVzY3JpcHRvci0+ZGVm
YXVsdF92YWx1ZV9pbnQ2NCgpKSArICJMIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9TSU5UMzI6Ci0gICAgICByZXR1cm4gU2ltcGxlSXRvYShkZXNjcmlwdG9yLT5kZWZhdWx0X3Zh
bHVlX2ludDMyKCkpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQ2NDoKLSAg
ICAgIHJldHVybiBTaW1wbGVJdG9hKGRlc2NyaXB0b3ItPmRlZmF1bHRfdmFsdWVfaW50NjQoKSkg
KyAiTCI7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdPT0dMRV9MT0coRkFUQUwpPDwgIlVua25vd24g
ZmllbGQgdHlwZS4iOwotICAgICAgcmV0dXJuICIiOwotICB9Ci19Ci0KLXN0ZDo6c3RyaW5nIEZp
ZWxkR2VuZXJhdG9yQmFzZTo6bnVtYmVyKCkgewotICByZXR1cm4gU2ltcGxlSXRvYShkZXNjcmlw
dG9yXy0+bnVtYmVyKCkpOwotfQotCi1zdGQ6OnN0cmluZyBGaWVsZEdlbmVyYXRvckJhc2U6OmNh
cGl0YWxpemVkX3R5cGVfbmFtZSgpIHsKLSAgc3dpdGNoIChkZXNjcmlwdG9yXy0+dHlwZSgpKSB7
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRU5VTToKLSAgICAgIHJldHVybiAiRW51
bSI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRToKLSAgICAgIHJldHVy
biAiTWVzc2FnZSI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVA6Ci0gICAg
ICByZXR1cm4gIkdyb3VwIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9ET1VCTEU6
Ci0gICAgICByZXR1cm4gIkRvdWJsZSI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
RkxPQVQ6Ci0gICAgICByZXR1cm4gIkZsb2F0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV9JTlQ2NDoKLSAgICAgIHJldHVybiAiSW50NjQiOwotICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpUWVBFX1VJTlQ2NDoKLSAgICAgIHJldHVybiAiVUludDY0IjsKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9JTlQzMjoKLSAgICAgIHJldHVybiAiSW50MzIiOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVENjQ6Ci0gICAgICByZXR1cm4gIkZpeGVkNjQiOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVEMzI6Ci0gICAgICByZXR1cm4gIkZp
eGVkMzIiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JPT0w6Ci0gICAgICByZXR1
cm4gIkJvb2wiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NUUklORzoKLSAgICAg
IHJldHVybiAiU3RyaW5nIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRFUzoK
LSAgICAgIHJldHVybiAiQnl0ZXMiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJ
TlQzMjoKLSAgICAgIHJldHVybiAiVUludDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV9TRklYRUQzMjoKLSAgICAgIHJldHVybiAiU0ZpeGVkMzIiOwotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDY0OgotICAgICAgcmV0dXJuICJTRml4ZWQ2NCI7Ci0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDMyOgotICAgICAgcmV0dXJuICJTSW50MzIi
OwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQ2NDoKLSAgICAgIHJldHVybiAi
U0ludDY0IjsKLSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xPRyhGQVRBTCk8PCAiVW5rbm93
biBmaWVsZCB0eXBlLiI7Ci0gICAgICByZXR1cm4gIiI7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNw
YWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJv
dG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDEwOWYzY2FhMDE3YWQ4MWNlNWQ3ZWYzNDIwZmE2MDI2MzAxMzUyNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9maWVsZF9iYXNlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFSUF9GSUVMRF9CQVNFX0hfXwot
I2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX0ZJRUxEX0JBU0VfSF9fCi0K
LSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0
aWwuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRv
ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3Nv
dXJjZV9nZW5lcmF0b3JfYmFzZS5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBw
cm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGNzaGFycCB7Ci0KLWNs
YXNzIEZpZWxkR2VuZXJhdG9yQmFzZSA6IHB1YmxpYyBTb3VyY2VHZW5lcmF0b3JCYXNlIHsKLSBw
dWJsaWM6Ci0gIEZpZWxkR2VuZXJhdG9yQmFzZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgZmllbGRPcmRpbmFsLAotICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgT3B0aW9ucyogb3B0aW9ucyk7Ci0gIH5GaWVsZEdlbmVyYXRvckJh
c2UoKTsKLQotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVDbG9uaW5nQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcikgPSAwOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVGcmVlemluZ0NvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVDb2RlY0NvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZU1lcmdpbmdDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVBhcnNpbmdD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNl
cmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSA9IDA7Ci0gIHZpcnR1YWwgdm9p
ZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgPSAwOwot
Ci0gIHZpcnR1YWwgdm9pZCBXcml0ZUhhc2goaW86OlByaW50ZXIqIHByaW50ZXIpID0gMDsKLSAg
dmlydHVhbCB2b2lkIFdyaXRlRXF1YWxzKGlvOjpQcmludGVyKiBwcmludGVyKSA9IDA7Ci0gIC8v
IEN1cnJlbnRseSB1bnVzZWQsIGFzIHdlIHVzZSByZWZsZWN0aW9uIHRvIGdlbmVyYXRlIEpTT04K
LSAgdmlydHVhbCB2b2lkIFdyaXRlVG9TdHJpbmcoaW86OlByaW50ZXIqIHByaW50ZXIpID0gMDsK
LQotIHByb3RlY3RlZDoKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAg
Y29uc3QgaW50IGZpZWxkT3JkaW5hbF87Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyaWFibGVz
XzsKLQotICB2b2lkIEFkZERlcHJlY2F0ZWRGbGFnKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAg
dm9pZCBBZGROdWxsQ2hlY2soaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEFkZE51bGxD
aGVjayhpbzo6UHJpbnRlciogcHJpbnRlciwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwotCi0g
IHZvaWQgQWRkUHVibGljTWVtYmVyQXR0cmlidXRlcyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0g
IHZvaWQgU2V0Q29tbW9uT25lb2ZGaWVsZFZhcmlhYmxlcyhtYXA8c3RyaW5nLCBzdHJpbmc+KiB2
YXJpYWJsZXMpOwotCi0gIHN0ZDo6c3RyaW5nIG9uZW9mX3Byb3BlcnR5X25hbWUoKTsKLSAgc3Rk
OjpzdHJpbmcgb25lb2ZfbmFtZSgpOwotICBzdGQ6OnN0cmluZyBwcm9wZXJ0eV9uYW1lKCk7Ci0g
IHN0ZDo6c3RyaW5nIG5hbWUoKTsKLSAgc3RkOjpzdHJpbmcgdHlwZV9uYW1lKCk7Ci0gIHN0ZDo6
c3RyaW5nIHR5cGVfbmFtZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotICBi
b29sIGhhc19kZWZhdWx0X3ZhbHVlKCk7Ci0gIGJvb2wgaXNfbnVsbGFibGVfdHlwZSgpOwotICBz
dGQ6OnN0cmluZyBkZWZhdWx0X3ZhbHVlKCk7Ci0gIHN0ZDo6c3RyaW5nIGRlZmF1bHRfdmFsdWUo
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLSAgc3RkOjpzdHJpbmcgbnVtYmVy
KCk7Ci0gIHN0ZDo6c3RyaW5nIGNhcGl0YWxpemVkX3R5cGVfbmFtZSgpOwotCi0gcHJpdmF0ZToK
LSAgdm9pZCBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhtYXA8c3RyaW5nLCBzdHJpbmc+KiB2YXJp
YWJsZXMpOwotICBzdGQ6OnN0cmluZyBHZXRTdHJpbmdEZWZhdWx0VmFsdWVJbnRlcm5hbCgpOwot
ICBzdGQ6OnN0cmluZyBHZXRCeXRlc0RlZmF1bHRWYWx1ZUludGVybmFsKCk7Ci0KLSAgR09PR0xF
X0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEZpZWxkR2VuZXJhdG9yQmFzZSk7Ci19OwotCi19
ICAvLyBuYW1lc3BhY2UgY3NoYXJwCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5h
bWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdP
T0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBfRklFTERfQkFTRV9IX18KLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZ2VuZXJhdG9yLmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZ2VuZXJhdG9yLmNj
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzRlOGM4ODQ3MjA4ZmE3ZmEzNTY2OWY2
Y2FlOTUwOWMwMGNmM2QzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2dlbmVyYXRv
ci5jYworKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvcGx1Z2luLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2Ny
aXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvc3RydXRpbC5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2Nz
aGFycC9jc2hhcnBfZ2VuZXJhdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NzaGFycC9jc2hhcnBfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX25hbWVzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfb3B0aW9ucy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlZmxlY3Rpb25fY2xhc3MuaD4KLQotdXNpbmcg
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OnNjb3BlZF9wdHI7Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3Bh
Y2UgY3NoYXJwIHsKLQotdm9pZCBHZW5lcmF0ZUZpbGUoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6
RmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJp
bnRlciwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMqIG9wdGlvbnMpIHsKLSAgUmVm
bGVjdGlvbkNsYXNzR2VuZXJhdG9yIHJlZmxlY3Rpb25DbGFzc0dlbmVyYXRvcihmaWxlLCBvcHRp
b25zKTsKLSAgcmVmbGVjdGlvbkNsYXNzR2VuZXJhdG9yLkdlbmVyYXRlKHByaW50ZXIpOwotfQot
Ci1ib29sIEdlbmVyYXRvcjo6R2VuZXJhdGUoCi0gICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZp
bGUsCi0gICAgY29uc3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgR2VuZXJhdG9yQ29udGV4dCog
Z2VuZXJhdG9yX2NvbnRleHQsCi0gICAgc3RyaW5nKiBlcnJvcikgY29uc3QgewotCi0gIHZlY3Rv
cjxwYWlyPHN0cmluZywgc3RyaW5nPiA+IG9wdGlvbnM7Ci0gIFBhcnNlR2VuZXJhdG9yUGFyYW1l
dGVyKHBhcmFtZXRlciwgJm9wdGlvbnMpOwotCi0gIC8vIFdlIG9ubHkgc3VwcG9ydCBwcm90bzMg
LSBidXQgd2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIGRlc2NyaXB0b3IucHJvdG8uCi0gIGlmIChm
aWxlLT5zeW50YXgoKSAhPSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFYX1BST1RPMyAmJiAhSXNEZXNj
cmlwdG9yUHJvdG8oZmlsZSkpIHsKLSAgICAqZXJyb3IgPSAiQyMgY29kZSBnZW5lcmF0aW9uIG9u
bHkgc3VwcG9ydHMgcHJvdG8zIHN5bnRheCI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
c3RydWN0IE9wdGlvbnMgY2xpX29wdGlvbnM7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHRp
b25zLnNpemUoKTsgaSsrKSB7Ci0gICAgaWYgKG9wdGlvbnNbaV0uZmlyc3QgPT0gImZpbGVfZXh0
ZW5zaW9uIikgewotICAgICAgY2xpX29wdGlvbnMuZmlsZV9leHRlbnNpb24gPSBvcHRpb25zW2ld
LnNlY29uZDsKLSAgICB9IGVsc2UgaWYgKG9wdGlvbnNbaV0uZmlyc3QgPT0gImJhc2VfbmFtZXNw
YWNlIikgewotICAgICAgY2xpX29wdGlvbnMuYmFzZV9uYW1lc3BhY2UgPSBvcHRpb25zW2ldLnNl
Y29uZDsKLSAgICAgIGNsaV9vcHRpb25zLmJhc2VfbmFtZXNwYWNlX3NwZWNpZmllZCA9IHRydWU7
Ci0gICAgfSBlbHNlIGlmIChvcHRpb25zW2ldLmZpcnN0ID09ICJpbnRlcm5hbF9hY2Nlc3MiKSB7
Ci0gICAgICBjbGlfb3B0aW9ucy5pbnRlcm5hbF9hY2Nlc3MgPSB0cnVlOwotICAgIH0gZWxzZSBp
ZiAob3B0aW9uc1tpXS5maXJzdCA9PSAibGVnYWN5X2VudW1fdmFsdWVzIikgewotICAgICAgLy8g
VE9ETzogUmVtb3ZlIHRoaXMgYmVmb3JlIGZpbmFsIHJlbGVhc2UKLSAgICAgIGNsaV9vcHRpb25z
LmxlZ2FjeV9lbnVtX3ZhbHVlcyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICplcnJvciA9
ICJVbmtub3duIGdlbmVyYXRvciBvcHRpb246ICIgKyBvcHRpb25zW2ldLmZpcnN0OwotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHN0cmluZyBmaWxlbmFtZV9lcnJvciA9ICIi
OwotICBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9IEdldE91dHB1dEZpbGUoZmlsZSwKLSAgICAgIGNs
aV9vcHRpb25zLmZpbGVfZXh0ZW5zaW9uLAotICAgICAgY2xpX29wdGlvbnMuYmFzZV9uYW1lc3Bh
Y2Vfc3BlY2lmaWVkLAotICAgICAgY2xpX29wdGlvbnMuYmFzZV9uYW1lc3BhY2UsCi0gICAgICAm
ZmlsZW5hbWVfZXJyb3IpOwotCi0gIGlmIChmaWxlbmFtZS5lbXB0eSgpKSB7Ci0gICAgKmVycm9y
ID0gZmlsZW5hbWVfZXJyb3I7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHNjb3BlZF9wdHI8
aW86Olplcm9Db3B5T3V0cHV0U3RyZWFtPiBvdXRwdXQoCi0gICAgICBnZW5lcmF0b3JfY29udGV4
dC0+T3BlbihmaWxlbmFtZSkpOwotICBpbzo6UHJpbnRlciBwcmludGVyKG91dHB1dC5nZXQoKSwg
JyQnKTsKLQotICBHZW5lcmF0ZUZpbGUoZmlsZSwgJnByaW50ZXIsICZjbGlfb3B0aW9ucyk7Ci0K
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjc2hhcnAKLX0gIC8vIG5hbWVz
cGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2Ug
Z29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9nZW5lcmF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3No
YXJwX2dlbmVyYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjU0ZTkxNDll
N2MyYWZkMTUzM2E5MGE3Yjc4MmZmOTZhZTdiM2I2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAv
Y3NoYXJwX2dlbmVyYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NP
TVBJTEVSX0NTSEFSUF9HRU5FUkFUT1JfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01Q
SUxFUl9DU0hBUlBfR0VORVJBVE9SX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+Ci0KLW5hbWVzcGFj
ZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1u
YW1lc3BhY2UgY3NoYXJwIHsKLQotY2xhc3MgTElCUFJPVE9DX0VYUE9SVCBHZW5lcmF0b3IKLSAg
ICA6IHB1YmxpYyBnb29nbGU6OnByb3RvYnVmOjpjb21waWxlcjo6Q29kZUdlbmVyYXRvciB7Ci0g
IHZpcnR1YWwgYm9vbCBHZW5lcmF0ZSgKLSAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxl
LAotICAgICAgY29uc3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICBHZW5lcmF0b3JDb250ZXh0
KiBnZW5lcmF0b3JfY29udGV4dCwKLSAgICAgIHN0cmluZyogZXJyb3IpIGNvbnN0OwotfTsKLQot
fSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBH
T09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX0dFTkVSQVRPUl9IX18KLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZ2VuZXJhdG9yX3Vu
aXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZ2Vu
ZXJhdG9yX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzU1ZmVl
MDBiMTc0ZWE4NzQ5Mzg5ZGY1YjZhMWMwNmE2YjE3YThlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hh
cnAvY3NoYXJwX2dlbmVyYXRvcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDcwICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8bWVt
b3J5PgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvbW1hbmRfbGluZV9p
bnRlcmZhY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9z
dHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotCi0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmlsZS5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29t
cGlsZXIgewotbmFtZXNwYWNlIGNzaGFycCB7Ci1uYW1lc3BhY2UgewotCi1URVNUKENTaGFycEVu
dW1WYWx1ZSwgUGFzY2FsQ2FzZWRQcmVmaXhTdHJpcHBpbmcpIHsKLSAgRVhQRUNUX0VRKCJCYXIi
LCBHZXRFbnVtVmFsdWVOYW1lKCJGb28iLCAiQkFSIikpOwotICBFWFBFQ1RfRVEoIkJhckJheiIs
IEdldEVudW1WYWx1ZU5hbWUoIkZvbyIsICJCQVJfQkFaIikpOwotICBFWFBFQ1RfRVEoIkJhciIs
IEdldEVudW1WYWx1ZU5hbWUoIkZvbyIsICJGT09fQkFSIikpOwotICBFWFBFQ1RfRVEoIkJhciIs
IEdldEVudW1WYWx1ZU5hbWUoIkZvbyIsICJGT09fX0JBUiIpKTsKLSAgRVhQRUNUX0VRKCJCYXJC
YXoiLCBHZXRFbnVtVmFsdWVOYW1lKCJGb28iLCAiRk9PX0JBUl9CQVoiKSk7Ci0gIEVYUEVDVF9F
USgiQmFyQmF6IiwgR2V0RW51bVZhbHVlTmFtZSgiRm9vIiwgIkZvb19CYXJCYXoiKSk7Ci0gIEVY
UEVDVF9FUSgiQmFyIiwgR2V0RW51bVZhbHVlTmFtZSgiRk9fTyIsICJGT09fQkFSIikpOwotICBF
WFBFQ1RfRVEoIkJhciIsIEdldEVudW1WYWx1ZU5hbWUoIkZPTyIsICJGX09fT19CQVIiKSk7Ci0g
IEVYUEVDVF9FUSgiQmFyIiwgR2V0RW51bVZhbHVlTmFtZSgiRm9vIiwgIkJBUiIpKTsKLSAgRVhQ
RUNUX0VRKCJCYXJCYXoiLCBHZXRFbnVtVmFsdWVOYW1lKCJGb28iLCAiQkFSX0JBWiIpKTsKLSAg
RVhQRUNUX0VRKCJGb28iLCBHZXRFbnVtVmFsdWVOYW1lKCJGb28iLCAiRk9PIikpOwotICBFWFBF
Q1RfRVEoIkZvbyIsIEdldEVudW1WYWx1ZU5hbWUoIkZvbyIsICJGT09fX18iKSk7Ci0gIC8vIElk
ZW50aWZpZXJzIGNhbid0IHN0YXJ0IHdpdGggZGlnaXRzCi0gIEVYUEVDVF9FUSgiXzJCYXIiLCBH
ZXRFbnVtVmFsdWVOYW1lKCJGb28iLCAiRk9PXzJfQkFSIikpOwotICBFWFBFQ1RfRVEoIl8yIiwg
R2V0RW51bVZhbHVlTmFtZSgiRm9vIiwgIkZPT19fXzIiKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFj
ZQotfSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAv
LyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuY2MgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9oZWxwZXJzLmNjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzE1NGM1YTU4NjI5NTBkMTEwZjJkNTA0OWY2Y2Ex
YWYwZTJiNTJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuY2MKKysr
IC9kZXYvbnVsbApAQCAtMSw1MDYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8v
ICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmph
eSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8YWxnb3JpdGht
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8bGlt
aXRzPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
ZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvc3Vic3RpdHV0ZS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NzaGFycC9jc2hhcnBfZmllbGRfYmFzZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX2VudW1fZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tYXBfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tZXNzYWdlX2ZpZWxkLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfb3B0aW9ucy5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3ByaW1pdGl2
ZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3No
YXJwX3JlcGVhdGVkX2VudW1fZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRlZF9tZXNzYWdlX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfcHJpbWl0aXZl
X2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hh
cnBfd3JhcHBlcl9maWVsZC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGNzaGFycCB7Ci0KLUNTaGFy
cFR5cGUgR2V0Q1NoYXJwVHlwZShGaWVsZERlc2NyaXB0b3I6OlR5cGUgdHlwZSkgewotICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQzMjoKLSAgICAg
IHJldHVybiBDU0hBUlBUWVBFX0lOVDMyOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBF
X0lOVDY0OgotICAgICAgcmV0dXJuIENTSEFSUFRZUEVfSU5UNjQ7Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfVUlOVDMyOgotICAgICAgcmV0dXJuIENTSEFSUFRZUEVfVUlOVDMyOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJTlQ2NDoKLSAgICAgIHJldHVybiBDU0hB
UlBUWVBFX1VJTlQzMjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TSU5UMzI6Ci0g
ICAgICByZXR1cm4gQ1NIQVJQVFlQRV9JTlQzMjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV9TSU5UNjQ6Ci0gICAgICByZXR1cm4gQ1NIQVJQVFlQRV9JTlQ2NDsKLSAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhFRDMyOgotICAgICAgcmV0dXJuIENTSEFSUFRZUEVfVUlO
VDMyOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVENjQ6Ci0gICAgICByZXR1
cm4gQ1NIQVJQVFlQRV9VSU5UNjQ7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0ZJ
WEVEMzI6Ci0gICAgICByZXR1cm4gQ1NIQVJQVFlQRV9JTlQzMjsKLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6VFlQRV9TRklYRUQ2NDoKLSAgICAgIHJldHVybiBDU0hBUlBUWVBFX0lOVDY0Owot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZMT0FUOgotICAgICAgcmV0dXJuIENTSEFS
UFRZUEVfRkxPQVQ7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRE9VQkxFOgotICAg
ICAgcmV0dXJuIENTSEFSUFRZUEVfRE9VQkxFOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpU
WVBFX0JPT0w6Ci0gICAgICByZXR1cm4gQ1NIQVJQVFlQRV9CT09MOwotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX0VOVU06Ci0gICAgICByZXR1cm4gQ1NIQVJQVFlQRV9FTlVNOwotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NUUklORzoKLSAgICAgIHJldHVybiBDU0hBUlBU
WVBFX1NUUklORzsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRFUzoKLSAgICAg
IHJldHVybiBDU0hBUlBUWVBFX0JZVEVTVFJJTkc7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OlRZUEVfR1JPVVA6Ci0gICAgICByZXR1cm4gQ1NIQVJQVFlQRV9NRVNTQUdFOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0U6Ci0gICAgICByZXR1cm4gQ1NIQVJQVFlQRV9N
RVNTQUdFOwotCi0gICAgICAvLyBObyBkZWZhdWx0IGJlY2F1c2Ugd2Ugd2FudCB0aGUgY29tcGls
ZXIgdG8gY29tcGxhaW4gaWYgYW55IG5ldwotICAgICAgLy8gdHlwZXMgYXJlIGFkZGVkLgotICB9
Ci0gIEdPT0dMRV9MT0coRkFUQUwpPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJldHVybiAoQ1No
YXJwVHlwZSkgLTE7Ci19Ci0KLXN0ZDo6c3RyaW5nIFN0cmlwRG90UHJvdG8oY29uc3Qgc3RkOjpz
dHJpbmcmIHByb3RvX2ZpbGUpIHsKLSAgaW50IGxhc3RpbmRleCA9IHByb3RvX2ZpbGUuZmluZF9s
YXN0X29mKCIuIik7Ci0gIHJldHVybiBwcm90b19maWxlLnN1YnN0cigwLCBsYXN0aW5kZXgpOwot
fQotCi1zdGQ6OnN0cmluZyBHZXRGaWxlTmFtZXNwYWNlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yKSB7Ci0gIGlmIChkZXNjcmlwdG9yLT5vcHRpb25zKCkuaGFzX2NzaGFycF9uYW1l
c3BhY2UoKSkgewotICAgIHJldHVybiBkZXNjcmlwdG9yLT5vcHRpb25zKCkuY3NoYXJwX25hbWVz
cGFjZSgpOwotICB9Ci0gIHJldHVybiBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGRlc2NyaXB0b3It
PnBhY2thZ2UoKSwgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KLS8vIFJldHVybnMgdGhlIFBhc2NhbC1jYXNl
ZCBsYXN0IHBhcnQgb2YgdGhlIHByb3RvIGZpbGUuIEZvciBleGFtcGxlLAotLy8gaW5wdXQgb2Yg
Imdvb2dsZS9wcm90b2J1Zi9mb29fYmFyLnByb3RvIiB3b3VsZCByZXN1bHQgaW4gIkZvb0JhciIu
Ci1zdGQ6OnN0cmluZyBHZXRGaWxlTmFtZUJhc2UoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IpIHsKLSAgICBzdGQ6OnN0cmluZyBwcm90b19maWxlID0gZGVzY3JpcHRvci0+bmFtZSgp
OwotICAgIGludCBsYXN0c2xhc2ggPSBwcm90b19maWxlLmZpbmRfbGFzdF9vZigiLyIpOwotICAg
IHN0ZDo6c3RyaW5nIGJhc2UgPSBwcm90b19maWxlLnN1YnN0cihsYXN0c2xhc2ggKyAxKTsKLSAg
ICByZXR1cm4gVW5kZXJzY29yZXNUb1Bhc2NhbENhc2UoU3RyaXBEb3RQcm90byhiYXNlKSk7Ci19
Ci0KLXN0ZDo6c3RyaW5nIEdldFJlZmxlY3Rpb25DbGFzc1VucXVhbGlmaWVkTmFtZShjb25zdCBG
aWxlRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICAvLyBUT0RPOiBEZXRlY3QgY29sbGlzaW9u
cyB3aXRoIGV4aXN0aW5nIG1lc3NhZ2VzLAotICAvLyBhbmQgYXBwZW5kIGFuIHVuZGVyc2NvcmUg
aWYgbmVjZXNzYXJ5LgotICByZXR1cm4gR2V0RmlsZU5hbWVCYXNlKGRlc2NyaXB0b3IpICsgIlJl
ZmxlY3Rpb24iOwotfQotCi0vLyBUT0RPKGp0YXR0ZXJtdXNjaCk6IGNhbiB3ZSByZXVzZSBhIHV0
aWxpdHkgZnVuY3Rpb24/Ci1zdGQ6OnN0cmluZyBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGNvbnN0
IHN0ZDo6c3RyaW5nJiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjYXBfbmV4dF9sZXR0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcHJlc2VydmVfcGVyaW9kKSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0gIC8vIE5vdGU6ICBJ
IGRpc3RydXN0IGN0eXBlLmggZHVlIHRvIGxvY2FsZXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwg
aW5wdXQuc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAoJ2EnIDw9IGlucHV0W2ldICYmIGlucHV0W2ld
IDw9ICd6JykgewotICAgICAgaWYgKGNhcF9uZXh0X2xldHRlcikgewotICAgICAgICByZXN1bHQg
Kz0gaW5wdXRbaV0gKyAoJ0EnIC0gJ2EnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3Vs
dCArPSBpbnB1dFtpXTsKLSAgICAgIH0KLSAgICAgIGNhcF9uZXh0X2xldHRlciA9IGZhbHNlOwot
ICAgIH0gZWxzZSBpZiAoJ0EnIDw9IGlucHV0W2ldICYmIGlucHV0W2ldIDw9ICdaJykgewotICAg
ICAgaWYgKGkgPT0gMCAmJiAhY2FwX25leHRfbGV0dGVyKSB7Ci0gICAgICAgIC8vIEZvcmNlIGZp
cnN0IGxldHRlciB0byBsb3dlci1jYXNlIHVubGVzcyBleHBsaWNpdGx5IHRvbGQgdG8KLSAgICAg
ICAgLy8gY2FwaXRhbGl6ZSBpdC4KLSAgICAgICAgcmVzdWx0ICs9IGlucHV0W2ldICsgKCdhJyAt
ICdBJyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBDYXBpdGFsIGxldHRlcnMgYWZ0ZXIg
dGhlIGZpcnN0IGFyZSBsZWZ0IGFzLWlzLgotICAgICAgICByZXN1bHQgKz0gaW5wdXRbaV07Ci0g
ICAgICB9Ci0gICAgICBjYXBfbmV4dF9sZXR0ZXIgPSBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKCcw
JyA8PSBpbnB1dFtpXSAmJiBpbnB1dFtpXSA8PSAnOScpIHsKLSAgICAgIHJlc3VsdCArPSBpbnB1
dFtpXTsKLSAgICAgIGNhcF9uZXh0X2xldHRlciA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGNhcF9uZXh0X2xldHRlciA9IHRydWU7Ci0gICAgICBpZiAoaW5wdXRbaV0gPT0gJy4nICYmIHBy
ZXNlcnZlX3BlcmlvZCkgewotICAgICAgICByZXN1bHQgKz0gJy4nOwotICAgICAgfQotICAgIH0K
LSAgfQotICAvLyBBZGQgYSB0cmFpbGluZyAiXyIgaWYgdGhlIG5hbWUgc2hvdWxkIGJlIGFsdGVy
ZWQuCi0gIGlmIChpbnB1dFtpbnB1dC5zaXplKCkgLSAxXSA9PSAnIycpIHsKLSAgICByZXN1bHQg
Kz0gJ18nOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6c3RyaW5nIFVuZGVyc2Nv
cmVzVG9QYXNjYWxDYXNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCkgewotICByZXR1cm4gVW5k
ZXJzY29yZXNUb0NhbWVsQ2FzZShpbnB1dCwgdHJ1ZSk7Ci19Ci0KLS8vIENvbnZlcnQgYSBzdHJp
bmcgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgU0hPVVRZX0NBU0UgKGJ1dCBtYXkgbm90IGJlICpw
cmVjaXNlbHkqIHNob3V0eSkKLS8vIGludG8gYSBQYXNjYWxDYXNlIHN0cmluZy4gUHJlY2lzZSBy
dWxlcyBpbXBsZW1lbnRlZDoKLQotLy8gUHJldmlvdXMgaW5wdXQgY2hhcmFjdGVyICAgICAgQ3Vy
cmVudCBjaGFyYWN0ZXIgICAgICAgICBDYXNlCi0vLyBBbnkgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb24tYWxwaGFudW1lcmljICAgICAgICAgIFNraXBwZWQKLS8vIE5vbmUgLSBmaXJzdCBj
aGFyIG9mIGlucHV0ICAgIEFscGhhbnVtZXJpYyAgICAgICAgICAgICAgVXBwZXIKLS8vIE5vbi1s
ZXR0ZXIgKGUuZy4gXyBvciAxKSAgICAgIEFscGhhbnVtZXJpYyAgICAgICAgICAgICAgVXBwZXIK
LS8vIE51bWVyaWMgICAgICAgICAgICAgICAgICAgICAgIEFscGhhbnVtZXJpYyAgICAgICAgICAg
ICAgVXBwZXIKLS8vIExvd2VyIGxldHRlciAgICAgICAgICAgICAgICAgIEFscGhhbnVtZXJpYyAg
ICAgICAgICAgICAgU2FtZSBhcyBjdXJyZW50Ci0vLyBVcHBlciBsZXR0ZXIgICAgICAgICAgICAg
ICAgICBBbHBoYW51bWVyaWMgICAgICAgICAgICAgIExvd2VyCi1zdGQ6OnN0cmluZyBTaG91dHlU
b1Bhc2NhbENhc2UoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KSB7Ci0gIHN0cmluZyByZXN1bHQ7
Ci0gIC8vIFNpbXBsZSB3YXkgb2YgaW1wbGVtZW50aW5nICJhbHdheXMgc3RhcnQgd2l0aCB1cHBl
ciIKLSAgY2hhciBwcmV2aW91cyA9ICdfJzsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dC5z
aXplKCk7IGkrKykgewotICAgIGNoYXIgY3VycmVudCA9IGlucHV0W2ldOwotICAgIGlmICghYXNj
aWlfaXNhbG51bShjdXJyZW50KSkgewotICAgICAgcHJldmlvdXMgPSBjdXJyZW50OwotICAgICAg
Y29udGludWU7ICAgICAgCi0gICAgfQotICAgIGlmICghYXNjaWlfaXNhbG51bShwcmV2aW91cykp
IHsKLSAgICAgIHJlc3VsdCArPSBhc2NpaV90b3VwcGVyKGN1cnJlbnQpOwotICAgIH0gZWxzZSBp
ZiAoYXNjaWlfaXNkaWdpdChwcmV2aW91cykpIHsKLSAgICAgIHJlc3VsdCArPSBhc2NpaV90b3Vw
cGVyKGN1cnJlbnQpOwotICAgIH0gZWxzZSBpZiAoYXNjaWlfaXNsb3dlcihwcmV2aW91cykpIHsK
LSAgICAgIHJlc3VsdCArPSBjdXJyZW50OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXN1bHQgKz0g
YXNjaWlfdG9sb3dlcihjdXJyZW50KTsKLSAgICB9Ci0gICAgcHJldmlvdXMgPSBjdXJyZW50Owot
ICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEF0dGVtcHQgdG8gcmVtb3ZlIGEgcHJlZml4
IGZyb20gYSB2YWx1ZSwgaWdub3JpbmcgY2FzaW5nIGFuZCBza2lwcGluZyB1bmRlcnNjb3Jlcy4K
LS8vIChmb28sIGZvb19iYXIpID0+IGJhciAtIHVuZGVyc2NvcmUgYWZ0ZXIgcHJlZml4IGlzIHNr
aXBwZWQKLS8vIChGT08sIGZvb19iYXIpID0+IGJhciAtIGNhc2luZyBpcyBpZ25vcmVkCi0vLyAo
Zm9vX2JhciwgZm9vYmFyYmF6KSA9PiBiYXogLSB1bmRlcnNjb3JlIGluIHByZWZpeCBpcyBpZ25v
cmVkCi0vLyAoZm9vYmFyLCBmb29fYmFyYmF6KSA9PiBiYXogLSB1bmRlcnNjb3JlIGluIHZhbHVl
IGlzIGlnbm9yZWQKLS8vIChmb28sIGJhcikgPT4gYmFyIC0gcHJlZml4IGlzbid0IG1hdGNoZWQ7
IHJldHVybiBvcmlnaW5hbCB2YWx1ZQotc3RkOjpzdHJpbmcgVHJ5UmVtb3ZlUHJlZml4KGNvbnN0
IHN0ZDo6c3RyaW5nJiBwcmVmaXgsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAvLyBG
aXJzdCBub3JtYWxpemUgdG8gYSBsb3dlci1jYXNlIG5vLXVuZGVyc2NvcmVzIHByZWZpeCB0byBt
YXRjaCBhZ2FpbnN0Ci0gIHN0ZDo6c3RyaW5nIHByZWZpeF90b19tYXRjaCA9ICIiOwotICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHByZWZpeC5zaXplKCk7IGkrKykgewotICAgIGlmIChwcmVmaXhb
aV0gIT0gJ18nKSB7Ci0gICAgICBwcmVmaXhfdG9fbWF0Y2ggKz0gYXNjaWlfdG9sb3dlcihwcmVm
aXhbaV0pOwotICAgIH0KLSAgfQotICAKLSAgLy8gVGhpcyBrZWVwcyB0cmFjayBvZiBob3cgbXVj
aCBvZiB2YWx1ZSB3ZSd2ZSBjb25zdW1lZAotICBzaXplX3QgcHJlZml4X2luZGV4LCB2YWx1ZV9p
bmRleDsKLSAgZm9yIChwcmVmaXhfaW5kZXggPSAwLCB2YWx1ZV9pbmRleCA9IDA7Ci0gICAgICBw
cmVmaXhfaW5kZXggPCBwcmVmaXhfdG9fbWF0Y2guc2l6ZSgpICYmIHZhbHVlX2luZGV4IDwgdmFs
dWUuc2l6ZSgpOwotICAgICAgdmFsdWVfaW5kZXgrKykgewotICAgIC8vIFNraXAgb3ZlciB1bmRl
cnNjb3JlcyBpbiB0aGUgdmFsdWUKLSAgICBpZiAodmFsdWVbdmFsdWVfaW5kZXhdID09ICdfJykg
ewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGlmIChhc2NpaV90b2xvd2VyKHZhbHVlW3Zh
bHVlX2luZGV4XSkgIT0gcHJlZml4X3RvX21hdGNoW3ByZWZpeF9pbmRleCsrXSkgewotICAgICAg
Ly8gRmFpbGVkIHRvIG1hdGNoIHRoZSBwcmVmaXggLSBiYWlsIG91dCBlYXJseS4KLSAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBJZiB3ZSBkaWRuJ3QgZmluaXNoIGxvb2tp
bmcgdGhyb3VnaCB0aGUgcHJlZml4LCB3ZSBjYW4ndCBzdHJpcCBpdC4KLSAgaWYgKHByZWZpeF9p
bmRleCA8IHByZWZpeF90b19tYXRjaC5zaXplKCkpIHsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0K
LQotICAvLyBTdGVwIG92ZXIgYW55IHVuZGVyc2NvcmVzIGFmdGVyIHRoZSBwcmVmaXgKLSAgd2hp
bGUgKHZhbHVlX2luZGV4IDwgdmFsdWUuc2l6ZSgpICYmIHZhbHVlW3ZhbHVlX2luZGV4XSA9PSAn
XycpIHsKLSAgICB2YWx1ZV9pbmRleCsrOwotICB9Ci0KLSAgLy8gSWYgdGhlcmUncyBub3RoaW5n
IGxlZnQgKGUuZy4gaXQgd2FzIGEgcHJlZml4IHdpdGggb25seSB1bmRlcnNjb3JlcyBhZnRlcndh
cmRzKSwgZG9uJ3Qgc3RyaXAuCi0gIGlmICh2YWx1ZV9pbmRleCA9PSB2YWx1ZS5zaXplKCkpIHsK
LSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICByZXR1cm4gdmFsdWUuc3Vic3RyKHZhbHVlX2lu
ZGV4KTsKLX0KLQotLy8gRm9ybWF0IHRoZSBlbnVtIHZhbHVlIG5hbWUgaW4gYSBwbGVhc2FudCB3
YXkgZm9yIEMjOgotLy8gLSBTdHJpcCB0aGUgZW51bSBuYW1lIGFzIGEgcHJlZml4IGlmIHBvc3Np
YmxlCi0vLyAtIENvbnZlcnQgdG8gUGFzY2FsQ2FzZS4KLS8vIEZvciBleGFtcGxlLCBhbiBlbnVt
IGNhbGxlZCBDb2xvciB3aXRoIGEgdmFsdWUgb2YgQ09MT1JfQkxVRSBzaG91bGQKLS8vIHJlc3Vs
dCBpbiBhbiBlbnVtIHZhbHVlIGluIEMjIGNhbGxlZCBqdXN0IEJsdWUKLXN0ZDo6c3RyaW5nIEdl
dEVudW1WYWx1ZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGVudW1fbmFtZSwgY29uc3Qgc3RkOjpz
dHJpbmcmIGVudW1fdmFsdWVfbmFtZSkgewotICBzdGQ6OnN0cmluZyBzdHJpcHBlZCA9IFRyeVJl
bW92ZVByZWZpeChlbnVtX25hbWUsIGVudW1fdmFsdWVfbmFtZSk7Ci0gIHN0ZDo6c3RyaW5nIHJl
c3VsdCA9IFNob3V0eVRvUGFzY2FsQ2FzZShzdHJpcHBlZCk7Ci0gIC8vIEp1c3QgaW4gY2FzZSB3
ZSBoYXZlIGFuIGVudW0gbmFtZSBvZiBGT08gYW5kIGEgdmFsdWUgb2YgRk9PXzIuLi4gbWFrZSBz
dXJlIHRoZSByZXR1cm5lZAotICAvLyBzdHJpbmcgaXMgYSB2YWxpZCBpZGVudGlmaWVyLgotICBp
ZiAoYXNjaWlfaXNkaWdpdChyZXN1bHRbMF0pKSB7Ci0gICAgcmVzdWx0ID0gIl8iICsgcmVzdWx0
OwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6c3RyaW5nIFRvQ1NoYXJwTmFtZShj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUpIHsKLSAg
c3RkOjpzdHJpbmcgcmVzdWx0ID0gR2V0RmlsZU5hbWVzcGFjZShmaWxlKTsKLSAgaWYgKHJlc3Vs
dCAhPSAiIikgewotICAgIHJlc3VsdCArPSAnLic7Ci0gIH0KLSAgc3RyaW5nIGNsYXNzbmFtZTsK
LSAgaWYgKGZpbGUtPnBhY2thZ2UoKS5lbXB0eSgpKSB7Ci0gICAgY2xhc3NuYW1lID0gbmFtZTsK
LSAgfSBlbHNlIHsKLSAgICAvLyBTdHJpcCB0aGUgcHJvdG8gcGFja2FnZSBmcm9tIGZ1bGxfbmFt
ZSBzaW5jZSB3ZSd2ZSByZXBsYWNlZCBpdCB3aXRoCi0gICAgLy8gdGhlIEMjIG5hbWVzcGFjZS4K
LSAgICBjbGFzc25hbWUgPSBuYW1lLnN1YnN0cihmaWxlLT5wYWNrYWdlKCkuc2l6ZSgpICsgMSk7
Ci0gIH0KLSAgcmVzdWx0ICs9IFN0cmluZ1JlcGxhY2UoY2xhc3NuYW1lLCAiLiIsICIuVHlwZXMu
IiwgdHJ1ZSk7Ci0gIHJldHVybiAiZ2xvYmFsOjoiICsgcmVzdWx0OwotfQotCi1zdGQ6OnN0cmlu
ZyBHZXRSZWZsZWN0aW9uQ2xhc3NOYW1lKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9y
KSB7Ci0gIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IEdldEZpbGVOYW1lc3BhY2UoZGVzY3JpcHRvcik7
Ci0gIGlmICghcmVzdWx0LmVtcHR5KCkpIHsKLSAgICByZXN1bHQgKz0gJy4nOwotICB9Ci0gIHJl
c3VsdCArPSBHZXRSZWZsZWN0aW9uQ2xhc3NVbnF1YWxpZmllZE5hbWUoZGVzY3JpcHRvcik7Ci0g
IHJldHVybiAiZ2xvYmFsOjoiICsgcmVzdWx0OwotfQotCi1zdGQ6OnN0cmluZyBHZXRDbGFzc05h
bWUoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICByZXR1cm4gVG9DU2hhcnBOYW1l
KGRlc2NyaXB0b3ItPmZ1bGxfbmFtZSgpLCBkZXNjcmlwdG9yLT5maWxlKCkpOwotfQotCi1zdGQ6
OnN0cmluZyBHZXRDbGFzc05hbWUoY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsK
LSAgcmV0dXJuIFRvQ1NoYXJwTmFtZShkZXNjcmlwdG9yLT5mdWxsX25hbWUoKSwgZGVzY3JpcHRv
ci0+ZmlsZSgpKTsKLX0KLQotLy8gR3JvdXBzIGFyZSBoYWNreTogIFRoZSBuYW1lIG9mIHRoZSBm
aWVsZCBpcyBqdXN0IHRoZSBsb3dlci1jYXNlZCBuYW1lCi0vLyBvZiB0aGUgZ3JvdXAgdHlwZS4g
IEluIEMjLCB0aG91Z2gsIHdlIHdvdWxkIGxpa2UgdG8gcmV0YWluIHRoZSBvcmlnaW5hbAotLy8g
Y2FwaXRhbGl6YXRpb24gb2YgdGhlIHR5cGUgbmFtZS4KLXN0ZDo6c3RyaW5nIEdldEZpZWxkTmFt
ZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgaWYgKGRlc2NyaXB0b3It
PnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApIHsKLSAgICByZXR1cm4gZGVz
Y3JpcHRvci0+bWVzc2FnZV90eXBlKCktPm5hbWUoKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4g
ZGVzY3JpcHRvci0+bmFtZSgpOwotICB9Ci19Ci0KLXN0ZDo6c3RyaW5nIEdldEZpZWxkQ29uc3Rh
bnROYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgcmV0dXJuIEdldFByb3Bl
cnR5TmFtZShmaWVsZCkgKyAiRmllbGROdW1iZXIiOwotfQotCi1zdGQ6OnN0cmluZyBHZXRQcm9w
ZXJ0eU5hbWUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIC8vIFRPRE8o
anRhdHRlcm11c2NoKTogY29uc2lkZXIgaW50cm9kdWNpbmcgY3NoYXJwX3Byb3BlcnR5X25hbWUg
ZmllbGQgb3B0aW9uCi0gIHN0ZDo6c3RyaW5nIHByb3BlcnR5X25hbWUgPSBVbmRlcnNjb3Jlc1Rv
UGFzY2FsQ2FzZShHZXRGaWVsZE5hbWUoZGVzY3JpcHRvcikpOwotICAvLyBBdm9pZCBlaXRoZXIg
b3VyIG93biB0eXBlIG5hbWUgb3IgcmVzZXJ2ZWQgbmFtZXMuIE5vdGUgdGhhdCBub3QgYWxsIG5h
bWVzCi0gIC8vIGFyZSByZXNlcnZlZCAtIGEgZmllbGQgY2FsbGVkIHRvX3N0cmluZywgd3JpdGVf
dG8gZXRjIHdvdWxkIHN0aWxsIGNhdXNlIGEgcHJvYmxlbS4KLSAgLy8gVGhlcmUgYXJlIHZhcmlv
dXMgd2F5cyBvZiBlbmRpbmcgdXAgd2l0aCBuYW1pbmcgY29sbGlzaW9ucywgYnV0IHdlIHRyeSB0
byBhdm9pZCBvYnZpb3VzCi0gIC8vIG9uZXMuCi0gIGlmIChwcm9wZXJ0eV9uYW1lID09IGRlc2Ny
aXB0b3ItPmNvbnRhaW5pbmdfdHlwZSgpLT5uYW1lKCkKLSAgICAgIHx8IHByb3BlcnR5X25hbWUg
PT0gIlR5cGVzIgotICAgICAgfHwgcHJvcGVydHlfbmFtZSA9PSAiRGVzY3JpcHRvciIpIHsKLSAg
ICBwcm9wZXJ0eV9uYW1lICs9ICJfIjsKLSAgfQotICByZXR1cm4gcHJvcGVydHlfbmFtZTsKLX0K
LQotc3RkOjpzdHJpbmcgR2V0T3V0cHV0RmlsZSgKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVm
OjpGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxl
X2V4dGVuc2lvbiwKLSAgICBjb25zdCBib29sIGdlbmVyYXRlX2RpcmVjdG9yaWVzLAotICAgIGNv
bnN0IHN0ZDo6c3RyaW5nIGJhc2VfbmFtZXNwYWNlLAotICAgIHN0cmluZyogZXJyb3IpIHsKLSAg
c3RyaW5nIHJlbGF0aXZlX2ZpbGVuYW1lID0gR2V0RmlsZU5hbWVCYXNlKGRlc2NyaXB0b3IpICsg
ZmlsZV9leHRlbnNpb247Ci0gIGlmICghZ2VuZXJhdGVfZGlyZWN0b3JpZXMpIHsKLSAgICByZXR1
cm4gcmVsYXRpdmVfZmlsZW5hbWU7Ci0gIH0KLSAgc3RyaW5nIG5zID0gR2V0RmlsZU5hbWVzcGFj
ZShkZXNjcmlwdG9yKTsKLSAgc3RyaW5nIG5hbWVzcGFjZV9zdWZmaXggPSBuczsKLSAgaWYgKCFi
YXNlX25hbWVzcGFjZS5lbXB0eSgpKSB7Ci0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgYmFzZV9uYW1l
c3BhY2UgaXMgZWl0aGVyIGVxdWFsIHRvIG9yIGEgbGVhZGluZyBwYXJ0IG9mCi0gICAgLy8gdGhl
IGZpbGUgbmFtZXNwYWNlLiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgcHJlZml4OyAiRm9vLkIi
IHNob3VsZG4ndAotICAgIC8vIGJlIHJlZ2FyZGVkIGFzIGEgcHJlZml4IG9mICJGb28uQmFyIi4g
VGhlIHNpbXBsZXN0IG9wdGlvbiBpcyB0byBhZGQgIi4iCi0gICAgLy8gdG8gYm90aC4KLSAgICBz
dHJpbmcgZXh0ZW5kZWRfbnMgPSBucyArICIuIjsKLSAgICBpZiAoZXh0ZW5kZWRfbnMuZmluZChi
YXNlX25hbWVzcGFjZSArICIuIikgIT0gMCkgewotICAgICAgKmVycm9yID0gIk5hbWVzcGFjZSAi
ICsgbnMgKyAiIGlzIG5vdCBhIHByZWZpeCBuYW1lc3BhY2Ugb2YgYmFzZSBuYW1lc3BhY2UgIiAr
IGJhc2VfbmFtZXNwYWNlOwotICAgICAgcmV0dXJuICIiOyAvLyBUaGlzIHdpbGwgYmUgaWdub3Jl
ZCwgYmVjYXVzZSB3ZSd2ZSBzZXQgYW4gZXJyb3IuCi0gICAgfQotICAgIG5hbWVzcGFjZV9zdWZm
aXggPSBucy5zdWJzdHIoYmFzZV9uYW1lc3BhY2UubGVuZ3RoKCkpOwotICAgIGlmIChuYW1lc3Bh
Y2Vfc3VmZml4LmZpbmQoIi4iKSA9PSAwKSB7Ci0gICAgICBuYW1lc3BhY2Vfc3VmZml4ID0gbmFt
ZXNwYWNlX3N1ZmZpeC5zdWJzdHIoMSk7Ci0gICAgfQotICB9Ci0KLSAgc3RyaW5nIG5hbWVzcGFj
ZV9kaXIgPSBTdHJpbmdSZXBsYWNlKG5hbWVzcGFjZV9zdWZmaXgsICIuIiwgIi8iLCB0cnVlKTsK
LSAgaWYgKCFuYW1lc3BhY2VfZGlyLmVtcHR5KCkpIHsKLSAgICBuYW1lc3BhY2VfZGlyICs9ICIv
IjsKLSAgfQotICByZXR1cm4gbmFtZXNwYWNlX2RpciArIHJlbGF0aXZlX2ZpbGVuYW1lOwotfQot
Ci0vLyBUT0RPOiBjJnAgZnJvbSBKYXZhIHByb3RvYyBwbHVnaW4KLS8vIEZvciBlbmNvZGluZ3Mg
d2l0aCBmaXhlZCBzaXplcywgcmV0dXJucyB0aGF0IHNpemUgaW4gYnl0ZXMuICBPdGhlcndpc2UK
LS8vIHJldHVybnMgLTEuCi1pbnQgR2V0Rml4ZWRTaXplKEZpZWxkRGVzY3JpcHRvcjo6VHlwZSB0
eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBF
X0lOVDMyICAgOiByZXR1cm4gLTE7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfSU5U
NjQgICA6IHJldHVybiAtMTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UMzIg
IDogcmV0dXJuIC0xOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJTlQ2NCAgOiBy
ZXR1cm4gLTE7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDMyICA6IHJldHVy
biAtMTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TSU5UNjQgIDogcmV0dXJuIC0x
OwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVEMzIgOiByZXR1cm4gaW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjprRml4ZWQzMlNpemU7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OlRZUEVfRklYRUQ2NCA6IHJldHVybiBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OmtGaXhl
ZDY0U2l6ZTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TRklYRUQzMjogcmV0dXJu
IGludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6a1NGaXhlZDMyU2l6ZTsKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9TRklYRUQ2NDogcmV0dXJuIGludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6a1NGaXhlZDY0U2l6ZTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GTE9BVCAg
IDogcmV0dXJuIGludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6a0Zsb2F0U2l6ZTsKLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9ET1VCTEUgIDogcmV0dXJuIGludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6a0RvdWJsZVNpemU7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9C
T09MICAgIDogcmV0dXJuIGludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6a0Jvb2xTaXplOwotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU0gICAgOiByZXR1cm4gLTE7Ci0KLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcgIDogcmV0dXJuIC0xOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTICAgOiByZXR1cm4gLTE7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfR1JPVVAgICA6IHJldHVybiAtMTsKLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6VFlQRV9NRVNTQUdFIDogcmV0dXJuIC0xOwotCi0gICAgLy8gTm8gZGVmYXVsdCBi
ZWNhdXNlIHdlIHdhbnQgdGhlIGNvbXBpbGVyIHRvIGNvbXBsYWluIGlmIGFueSBuZXcKLSAgICAv
LyB0eXBlcyBhcmUgYWRkZWQuCi0gIH0KLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdl
dCBoZXJlLiI7Ci0gIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgYmFzZTY0X2No
YXJzW10gPQotICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKLQotc3RkOjpzdHJpbmcgU3RyaW5nVG9CYXNlNjQoY29u
c3Qgc3RkOjpzdHJpbmcmIGlucHV0KSB7Ci0gIHN0ZDo6c3RyaW5nIHJlc3VsdDsKLSAgc2l6ZV90
IHJlbWFpbmluZyA9IGlucHV0LnNpemUoKTsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjID0g
KGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBpbnB1dC5jX3N0cigpOwotICB3aGlsZSAocmVtYWluaW5n
ID4gMikgewotICAgIHJlc3VsdCArPSBiYXNlNjRfY2hhcnNbc3JjWzBdID4+IDJdOwotICAgIHJl
c3VsdCArPSBiYXNlNjRfY2hhcnNbKChzcmNbMF0gJiAweDMpIDw8IDQpIHwgKHNyY1sxXSA+PiA0
KV07Ci0gICAgcmVzdWx0ICs9IGJhc2U2NF9jaGFyc1soKHNyY1sxXSAmIDB4ZikgPDwgMikgfCAo
c3JjWzJdID4+IDYpXTsKLSAgICByZXN1bHQgKz0gYmFzZTY0X2NoYXJzW3NyY1syXSAmIDB4M2Zd
OwotICAgIHJlbWFpbmluZyAtPSAzOwotICAgIHNyYyArPSAzOwotICB9Ci0gIHN3aXRjaCAocmVt
YWluaW5nKSB7Ci0gICAgY2FzZSAyOgotICAgICAgcmVzdWx0ICs9IGJhc2U2NF9jaGFyc1tzcmNb
MF0gPj4gMl07Ci0gICAgICByZXN1bHQgKz0gYmFzZTY0X2NoYXJzWygoc3JjWzBdICYgMHgzKSA8
PCA0KSB8IChzcmNbMV0gPj4gNCldOwotICAgICAgcmVzdWx0ICs9IGJhc2U2NF9jaGFyc1soc3Jj
WzFdICYgMHhmKSA8PCAyXTsKLSAgICAgIHJlc3VsdCArPSAnPSc7Ci0gICAgICBzcmMgKz0gMjsK
LSAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgIHJlc3VsdCArPSBiYXNlNjRfY2hhcnNb
c3JjWzBdID4+IDJdOwotICAgICAgcmVzdWx0ICs9IGJhc2U2NF9jaGFyc1soKHNyY1swXSAmIDB4
MykgPDwgNCldOwotICAgICAgcmVzdWx0ICs9ICc9JzsKLSAgICAgIHJlc3VsdCArPSAnPSc7Ci0g
ICAgICBzcmMgKz0gMTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXN0ZDo6c3RyaW5nIEZpbGVEZXNjcmlwdG9yVG9CYXNlNjQoY29uc3QgRmlsZURlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IpIHsKLSAgc3RkOjpzdHJpbmcgZmRwX2J5dGVzOwotICBGaWxlRGVzY3JpcHRv
clByb3RvIGZkcDsKLSAgZGVzY3JpcHRvci0+Q29weVRvKCZmZHApOwotICBmZHAuU2VyaWFsaXpl
VG9TdHJpbmcoJmZkcF9ieXRlcyk7Ci0gIHJldHVybiBTdHJpbmdUb0Jhc2U2NChmZHBfYnl0ZXMp
OwotfQotCi1GaWVsZEdlbmVyYXRvckJhc2UqIENyZWF0ZUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGZpZWxkT3JkaW5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyogb3B0aW9ucykgewotICBzd2l0Y2ggKGRlc2Ny
aXB0b3ItPnR5cGUoKSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQOgot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0U6Ci0gICAgICBpZiAoZGVzY3Jp
cHRvci0+aXNfcmVwZWF0ZWQoKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci0+aXNfbWFwKCkp
IHsKLSAgICAgICAgICByZXR1cm4gbmV3IE1hcEZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0b3IsIGZp
ZWxkT3JkaW5hbCwgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJu
IG5ldyBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcihkZXNjcmlwdG9yLCBmaWVsZE9yZGlu
YWwsIG9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoSXNX
cmFwcGVyVHlwZShkZXNjcmlwdG9yKSkgewotICAgICAgICAgIGlmIChkZXNjcmlwdG9yLT5jb250
YWluaW5nX29uZW9mKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgV3JhcHBlck9uZW9mRmll
bGRHZW5lcmF0b3IoZGVzY3JpcHRvciwgZmllbGRPcmRpbmFsLCBvcHRpb25zKTsKLSAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBXcmFwcGVyRmllbGRHZW5lcmF0b3Io
ZGVzY3JpcHRvciwgZmllbGRPcmRpbmFsLCBvcHRpb25zKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGRlc2NyaXB0b3ItPmNvbnRhaW5pbmdfb25lb2YoKSkg
ewotICAgICAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcihkZXNj
cmlwdG9yLCBmaWVsZE9yZGluYWwsIG9wdGlvbnMpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IE1lc3NhZ2VGaWVsZEdlbmVyYXRvcihkZXNjcmlwdG9yLCBmaWVs
ZE9yZGluYWwsIG9wdGlvbnMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU06Ci0gICAgICBpZiAoZGVzY3JpcHRvci0+
aXNfcmVwZWF0ZWQoKSkgewotICAgICAgICByZXR1cm4gbmV3IFJlcGVhdGVkRW51bUZpZWxkR2Vu
ZXJhdG9yKGRlc2NyaXB0b3IsIGZpZWxkT3JkaW5hbCwgb3B0aW9ucyk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgICAg
ICAgcmV0dXJuIG5ldyBFbnVtT25lb2ZGaWVsZEdlbmVyYXRvcihkZXNjcmlwdG9yLCBmaWVsZE9y
ZGluYWwsIG9wdGlvbnMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiBuZXcg
RW51bUZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0b3IsIGZpZWxkT3JkaW5hbCwgb3B0aW9ucyk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgaWYgKGRlc2NyaXB0b3ItPmlz
X3JlcGVhdGVkKCkpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBSZXBlYXRlZFByaW1pdGl2ZUZpZWxk
R2VuZXJhdG9yKGRlc2NyaXB0b3IsIGZpZWxkT3JkaW5hbCwgb3B0aW9ucyk7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBpZiAoZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAg
ICAgICAgcmV0dXJuIG5ldyBQcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0b3Is
IGZpZWxkT3JkaW5hbCwgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0
dXJuIG5ldyBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcihkZXNjcmlwdG9yLCBmaWVsZE9yZGluYWws
IG9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNl
IGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9i
dWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTU2M2NhN2UxZDk2MzBlMzIzZjdiZDFhZTVmMWRhMGI2Yzk2OWNkYi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3NoYXJwL2NzaGFycF9oZWxwZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjog
a2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQ
cm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFu
LCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBf
SEVMUEVSU19IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFSUF9IRUxQ
RVJTX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9wb3J0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9pby9wcmludGVyLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3NoYXJwIHsKLQotc3Ry
dWN0IE9wdGlvbnM7Ci1jbGFzcyBGaWVsZEdlbmVyYXRvckJhc2U7Ci0KLS8vIFRPRE86IHN0YXJ0
IHVzaW5nIHRoaXMgZW51bS4KLWVudW0gQ1NoYXJwVHlwZSB7Ci0gIENTSEFSUFRZUEVfSU5UMzIg
PSAxLAotICBDU0hBUlBUWVBFX0lOVDY0ID0gMiwKLSAgQ1NIQVJQVFlQRV9VSU5UMzIgPSAzLAot
ICBDU0hBUlBUWVBFX1VJTlQ2NCA9IDQsCi0gIENTSEFSUFRZUEVfRkxPQVQgPSA1LAotICBDU0hB
UlBUWVBFX0RPVUJMRSA9IDYsCi0gIENTSEFSUFRZUEVfQk9PTCA9IDcsCi0gIENTSEFSUFRZUEVf
U1RSSU5HID0gOCwKLSAgQ1NIQVJQVFlQRV9CWVRFU1RSSU5HID0gOSwKLSAgQ1NIQVJQVFlQRV9N
RVNTQUdFID0gMTAsCi0gIENTSEFSUFRZUEVfRU5VTSA9IDExLAotICBNQVhfQ1NIQVJQVFlQRSA9
IDExCi19OwotCi0vLyBDb252ZXJ0cyBmaWVsZCB0eXBlIHRvIGNvcnJlc3BvbmRpbmcgQyMgdHlw
ZS4KLUNTaGFycFR5cGUgR2V0Q1NoYXJwVHlwZShGaWVsZERlc2NyaXB0b3I6OlR5cGUgdHlwZSk7
Ci0KLXN0ZDo6c3RyaW5nIFN0cmlwRG90UHJvdG8oY29uc3Qgc3RkOjpzdHJpbmcmIHByb3RvX2Zp
bGUpOwotCi0vLyBHZXRzIHVucXVhbGlmaWVkIG5hbWUgb2YgdGhlIHJlZmxlY3Rpb24gY2xhc3MK
LXN0ZDo6c3RyaW5nIEdldFJlZmxlY3Rpb25DbGFzc1VucXVhbGlmaWVkTmFtZShjb25zdCBGaWxl
RGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLXN0ZDo6c3RyaW5nIEdldENsYXNzTmFtZShjb25z
dCBFbnVtRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLXN0ZDo6c3RyaW5nIEdldEZpZWxkTmFt
ZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotCi1zdGQ6OnN0cmluZyBHZXRG
aWVsZENvbnN0YW50TmFtZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKTsKLQotc3RkOjpz
dHJpbmcgR2V0UHJvcGVydHlOYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcik7
Ci0KLWludCBHZXRGaXhlZFNpemUoRmllbGREZXNjcmlwdG9yOjpUeXBlIHR5cGUpOwotCi1zdGQ6
OnN0cmluZyBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYXBfbmV4dF9sZXR0ZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVfcGVyaW9k
KTsKLQotaW5saW5lIHN0ZDo6c3RyaW5nIFVuZGVyc2NvcmVzVG9DYW1lbENhc2UoY29uc3Qgc3Rk
OjpzdHJpbmcmIGlucHV0LCBib29sIGNhcF9uZXh0X2xldHRlcikgewotICByZXR1cm4gVW5kZXJz
Y29yZXNUb0NhbWVsQ2FzZShpbnB1dCwgY2FwX25leHRfbGV0dGVyLCBmYWxzZSk7Ci19Ci0KLXN0
ZDo6c3RyaW5nIFVuZGVyc2NvcmVzVG9QYXNjYWxDYXNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1
dCk7Ci0KLS8vIE5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBub3JtYWxseSB3YW50IHRvIGV4cG9ydCB0
aGlzICh3ZSdyZSBub3QgZXhwZWN0aW5nCi0vLyBpdCB0byBiZSB1c2VkIG91dHNpZGUgbGlicHJv
dG9jIGl0c2VsZikgYnV0IHRoaXMgZXhwb3NlcyBpdCBmb3IgdGVzdGluZy4KLXN0ZDo6c3RyaW5n
IExJQlBST1RPQlVGX0VYUE9SVCBHZXRFbnVtVmFsdWVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBl
bnVtX25hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbnVtX3ZhbHVlX25hbWUpOwotCi0vLyBUT0RP
KGp0YXR0ZXJtdXNjaCk6IHBlcmhhcHMgd2UgY291bGQgbW92ZSB0aGlzIHRvIHN0cnV0aWwKLXN0
ZDo6c3RyaW5nIFN0cmluZ1RvQmFzZTY0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCk7Ci0KLXN0
ZDo6c3RyaW5nIEZpbGVEZXNjcmlwdG9yVG9CYXNlNjQoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRl
c2NyaXB0b3IpOwotCi1GaWVsZEdlbmVyYXRvckJhc2UqIENyZWF0ZUZpZWxkR2VuZXJhdG9yKGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZpZWxkT3JkaW5hbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyogb3B0aW9ucyk7Ci0KLS8vIERldGVy
bWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gbWVzc2FnZSBpcyBhIG1hcCBlbnRyeSBtZXNzYWdlLAot
Ly8gaS5lLiBvbmUgaW1wbGljaXRseSBjcmVhdGVkIGJ5IHByb3RvYyBkdWUgdG8gYSBtYXA8a2V5
LCB2YWx1ZT4gZmllbGQuCi1pbmxpbmUgYm9vbCBJc01hcEVudHJ5TWVzc2FnZShjb25zdCBEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yLT5vcHRpb25zKCkubWFw
X2VudHJ5KCk7Ci19Ci0KLS8vIERldGVybWluZXMgd2hldGhlciB3ZSdyZSBnZW5lcmF0aW5nIGNv
ZGUgZm9yIHRoZSBwcm90byByZXByZXNlbnRhdGlvbiBvZgotLy8gZGVzY3JpcHRvcnMgZXRjLCBm
b3IgdXNlIGluIHRoZSBydW50aW1lLiBUaGlzIGlzIHRoZSBvbmx5IHR5cGUgd2hpY2ggaXMKLS8v
IGFsbG93ZWQgdG8gdXNlIHByb3RvMiBzeW50YXgsIGFuZCBpdCBnZW5lcmF0ZXMgaW50ZXJuYWwg
Y2xhc3Nlcy4KLWlubGluZSBib29sIElzRGVzY3JpcHRvclByb3RvKGNvbnN0IEZpbGVEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yLT5uYW1lKCkgPT0gImdvb2ds
ZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvIjsKLX0KLQotaW5saW5lIGJvb2wgSXNXcmFwcGVy
VHlwZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2Ny
aXB0b3ItPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSAmJgotICAgICAg
ZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCktPmZpbGUoKS0+bmFtZSgpID09ICJnb29nbGUvcHJv
dG9idWYvd3JhcHBlcnMucHJvdG8iOwotfQotCi19ICAvLyBuYW1lc3BhY2UgY3NoYXJwCi19ICAv
LyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFt
ZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQ
X0hFTFBFUlNfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3No
YXJwL2NzaGFycF9tYXBfZmllbGQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3No
YXJwL2NzaGFycF9tYXBfZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2
NWQxMjI1OWZkY2UyMGRlMDU2Njk1ZTI2OTVkMGM4NDQ0ZTNjMWMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2NzaGFycC9jc2hhcnBfbWFwX2ZpZWxkLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8c3N0cmVh
bT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4uaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9kb2NfY29tbWVudC5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tYXBfZmllbGQu
aD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNl
IGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBjc2hhcnAgewotCi1NYXBGaWVsZEdlbmVyYXRvcjo6TWFw
RmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZE9yZGluYWwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyogb3B0aW9ucykKLSAg
ICA6IEZpZWxkR2VuZXJhdG9yQmFzZShkZXNjcmlwdG9yLCBmaWVsZE9yZGluYWwsIG9wdGlvbnMp
IHsKLX0KLQotTWFwRmllbGRHZW5lcmF0b3I6On5NYXBGaWVsZEdlbmVyYXRvcigpIHsKLX0KLQot
dm9pZCBNYXBGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmlu
dGVyKSB7ICAgCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioga2V5X2Rlc2NyaXB0b3IgPQotICAg
ICAgZGVzY3JpcHRvcl8tPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoImtleSIpOwot
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbHVlX2Rlc2NyaXB0b3IgPQotICAgICAgZGVzY3Jp
cHRvcl8tPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gIHZhcmlh
Ymxlc19bImtleV90eXBlX25hbWUiXSA9IHR5cGVfbmFtZShrZXlfZGVzY3JpcHRvcik7Ci0gIHZh
cmlhYmxlc19bInZhbHVlX3R5cGVfbmFtZSJdID0gdHlwZV9uYW1lKHZhbHVlX2Rlc2NyaXB0b3Ip
OwotICBzY29wZWRfcHRyPEZpZWxkR2VuZXJhdG9yQmFzZT4ga2V5X2dlbmVyYXRvcigKLSAgICAg
IENyZWF0ZUZpZWxkR2VuZXJhdG9yKGtleV9kZXNjcmlwdG9yLCAxLCB0aGlzLT5vcHRpb25zKCkp
KTsKLSAgc2NvcGVkX3B0cjxGaWVsZEdlbmVyYXRvckJhc2U+IHZhbHVlX2dlbmVyYXRvcigKLSAg
ICAgIENyZWF0ZUZpZWxkR2VuZXJhdG9yKHZhbHVlX2Rlc2NyaXB0b3IsIDIsIHRoaXMtPm9wdGlv
bnMoKSkpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgInByaXZh
dGUgc3RhdGljIHJlYWRvbmx5IHBiYzo6TWFwRmllbGQ8JGtleV90eXBlX25hbWUkLCAkdmFsdWVf
dHlwZV9uYW1lJD4uQ29kZWMgX21hcF8kbmFtZSRfY29kZWNcbiIKLSAgICAiICAgID0gbmV3IHBi
Yzo6TWFwRmllbGQ8JGtleV90eXBlX25hbWUkLCAkdmFsdWVfdHlwZV9uYW1lJD4uQ29kZWMoIik7
Ci0gIGtleV9nZW5lcmF0b3ItPkdlbmVyYXRlQ29kZWNDb2RlKHByaW50ZXIpOwotICBwcmludGVy
LT5QcmludCgiLCAiKTsKLSAgdmFsdWVfZ2VuZXJhdG9yLT5HZW5lcmF0ZUNvZGVjQ29kZShwcmlu
dGVyKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiLCAkdGFnJCk7
XG4iCi0gICAgInByaXZhdGUgcmVhZG9ubHkgcGJjOjpNYXBGaWVsZDwka2V5X3R5cGVfbmFtZSQs
ICR2YWx1ZV90eXBlX25hbWUkPiAkbmFtZSRfID0gbmV3IHBiYzo6TWFwRmllbGQ8JGtleV90eXBl
X25hbWUkLCAkdmFsdWVfdHlwZV9uYW1lJD4oKTtcbiIpOwotICBXcml0ZVByb3BlcnR5RG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIEFkZERlcHJlY2F0ZWRGbGFnKHByaW50ZXIp
OwotICBwcmludGVyLT5QcmludCgKLSAgICB2YXJpYWJsZXNfLAotICAgICIkYWNjZXNzX2xldmVs
JCBwYmM6Ok1hcEZpZWxkPCRrZXlfdHlwZV9uYW1lJCwgJHZhbHVlX3R5cGVfbmFtZSQ+ICRwcm9w
ZXJ0eV9uYW1lJCB7XG4iCi0gICAgIiAgZ2V0IHsgcmV0dXJuICRuYW1lJF87IH1cbiIKLSAgICAi
fVxuIik7Ci19Ci0KLXZvaWQgTWFwRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlTWVyZ2luZ0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICB2YXJpYWJs
ZXNfLAotICAgICAgIiRuYW1lJF8uQWRkKG90aGVyLiRuYW1lJF8pO1xuIik7Ci19Ci0KLXZvaWQg
TWFwRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiJG5hbWUkXy5B
ZGRFbnRyaWVzRnJvbShpbnB1dCwgX21hcF8kbmFtZSRfY29kZWMpO1xuIik7Ci19Ci0KLXZvaWQg
TWFwRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiJG5h
bWUkXy5Xcml0ZVRvKG91dHB1dCwgX21hcF8kbmFtZSRfY29kZWMpO1xuIik7Ci19Ci0KLXZvaWQg
TWFwRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgInNp
emUgKz0gJG5hbWUkXy5DYWxjdWxhdGVTaXplKF9tYXBfJG5hbWUkX2NvZGVjKTtcbiIpOwotfQot
Ci12b2lkIE1hcEZpZWxkR2VuZXJhdG9yOjpXcml0ZUhhc2goaW86OlByaW50ZXIqIHByaW50ZXIp
IHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiaGFzaCBePSAkcHJv
cGVydHlfbmFtZSQuR2V0SGFzaENvZGUoKTtcbiIpOwotfQotdm9pZCBNYXBGaWVsZEdlbmVyYXRv
cjo6V3JpdGVFcXVhbHMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgdmFyaWFibGVzXywKLSAgICAiaWYgKCEkcHJvcGVydHlfbmFtZSQuRXF1YWxzKG90aGVy
LiRwcm9wZXJ0eV9uYW1lJCkpIHJldHVybiBmYWxzZTtcbiIpOwotfQotCi12b2lkIE1hcEZpZWxk
R2VuZXJhdG9yOjpXcml0ZVRvU3RyaW5nKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gICAgLy8g
VE9ETzogSWYgd2UgZXZlciBhY3R1YWxseSB1c2UgVG9TdHJpbmcsIHdlJ2xsIG5lZWQgdG8gaW1w
bGVtZSB0aGlzLi4uCi19Ci0KLXZvaWQgTWFwRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlQ2xvbmlu
Z0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiJG5hbWUkXyA9IG90aGVyLiRuYW1lJF8uQ2xvbmUoKTtcbiIpOwotfQotCi12b2lk
IE1hcEZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZUZyZWV6aW5nQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgewotfQotCi19ICAvLyBuYW1lc3BhY2UgY3NoYXJwCi19ICAvLyBuYW1lc3BhY2UgY29t
cGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfbWFw
X2ZpZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tYXBf
ZmllbGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRhMzNhMDM2NzVhMDIwNzE0
MjJiM2NiOTUyOTYyZjZjOWEwMTRkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9t
YXBfZmllbGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9D
U0hBUlBfTUFQX0ZJRUxEX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NI
QVJQX01BUF9GSUVMRF9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuaD4KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5h
bWVzcGFjZSBjc2hhcnAgewotCi1jbGFzcyBNYXBGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBGaWVs
ZEdlbmVyYXRvckJhc2UgewotIHB1YmxpYzoKLSAgTWFwRmllbGRHZW5lcmF0b3IoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICBpbnQgZmllbGRP
cmRpbmFsLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zKiBvcHRpb25zKTsKLSAg
fk1hcEZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlQ2xvbmluZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVGcmVlemlu
Z0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVNZW1i
ZXJzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlTWVyZ2lu
Z0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVQYXJz
aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNl
cmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdl
bmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICB2aXJ0
dWFsIHZvaWQgV3JpdGVIYXNoKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lk
IFdyaXRlRXF1YWxzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIFdyaXRl
VG9TdHJpbmcoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJ
U0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE1hcEZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZSBjc2hhcnAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNw
YWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xF
X1BST1RPQlVGX0NPTVBJTEVSX0NTSEFSUF9NQVBfRklFTERfSF9fCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2UuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tZXNzYWdlLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzJkYTZiOWUxMDRmYWIwOWUzYjQ2NGM5YmJkZWNlNTJi
ODUzZTNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2UuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSw1MDQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRl
IDxtYXA+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29kZV9nZW5lcmF0
b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmlu
dGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW0uaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93
aXJlX2Zvcm1hdF9saXRlLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3NoYXJwL2NzaGFycF9kb2NfY29tbWVudC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX2VudW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3NoYXJwL2NzaGFycF9maWVsZF9iYXNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9uYW1lcy5oPgotCi11c2luZyBn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6c2NvcGVkX3B0cjsKLQotbmFtZXNwYWNlIGdvb2ds
ZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFj
ZSBjc2hhcnAgewotCi1ib29sIENvbXBhcmVGaWVsZE51bWJlcnMoY29uc3QgRmllbGREZXNjcmlw
dG9yKiBkMSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkMikgewotICByZXR1cm4gZDEtPm51bWJl
cigpIDwgZDItPm51bWJlcigpOwotfQotCi1NZXNzYWdlR2VuZXJhdG9yOjpNZXNzYWdlR2VuZXJh
dG9yKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMqIG9wdGlvbnMpCi0gICAgOiBTb3VyY2VHZW5lcmF0
b3JCYXNlKGRlc2NyaXB0b3ItPmZpbGUoKSwgb3B0aW9ucyksCi0gICAgICBkZXNjcmlwdG9yXyhk
ZXNjcmlwdG9yKSB7Ci0KLSAgLy8gc29ydGVkIGZpZWxkIG5hbWVzCi0gIGZvciAoaW50IGkgPSAw
OyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGZpZWxkX25hbWVz
Xy5wdXNoX2JhY2soZGVzY3JpcHRvcl8tPmZpZWxkKGkpLT5uYW1lKCkpOwotICB9Ci0gIHN0ZDo6
c29ydChmaWVsZF9uYW1lc18uYmVnaW4oKSwgZmllbGRfbmFtZXNfLmVuZCgpKTsKLQotICAvLyBm
aWVsZHMgYnkgbnVtYmVyCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxk
X2NvdW50KCk7IGkrKykgewotICAgIGZpZWxkc19ieV9udW1iZXJfLnB1c2hfYmFjayhkZXNjcmlw
dG9yXy0+ZmllbGQoaSkpOwotICB9Ci0gIHN0ZDo6c29ydChmaWVsZHNfYnlfbnVtYmVyXy5iZWdp
bigpLCBmaWVsZHNfYnlfbnVtYmVyXy5lbmQoKSwKLSAgICAgICAgICAgIENvbXBhcmVGaWVsZE51
bWJlcnMpOwotfQotCi1NZXNzYWdlR2VuZXJhdG9yOjp+TWVzc2FnZUdlbmVyYXRvcigpIHsKLX0K
LQotc3RkOjpzdHJpbmcgTWVzc2FnZUdlbmVyYXRvcjo6Y2xhc3NfbmFtZSgpIHsKLSAgcmV0dXJu
IGRlc2NyaXB0b3JfLT5uYW1lKCk7Ci19Ci0KLXN0ZDo6c3RyaW5nIE1lc3NhZ2VHZW5lcmF0b3I6
OmZ1bGxfY2xhc3NfbmFtZSgpIHsKLSAgcmV0dXJuIEdldENsYXNzTmFtZShkZXNjcmlwdG9yXyk7
Ci19Ci0KLWNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgTWVzc2FnZUdlbmVyYXRvcjo6
ZmllbGRfbmFtZXMoKSB7Ci0gIHJldHVybiBmaWVsZF9uYW1lc187Ci19Ci0KLWNvbnN0IHN0ZDo6
dmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBNZXNzYWdlR2VuZXJhdG9yOjpmaWVsZHNf
YnlfbnVtYmVyKCkgewotICByZXR1cm4gZmllbGRzX2J5X251bWJlcl87Ci19Ci0KLXZvaWQgTWVz
c2FnZUdlbmVyYXRvcjo6R2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgbWFwPHN0
cmluZywgc3RyaW5nPiB2YXJzOwotICB2YXJzWyJjbGFzc19uYW1lIl0gPSBjbGFzc19uYW1lKCk7
Ci0gIHZhcnNbImFjY2Vzc19sZXZlbCJdID0gY2xhc3NfYWNjZXNzX2xldmVsKCk7Ci0KLSAgV3Jp
dGVNZXNzYWdlRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlBy
aW50KAotICAgICJbZ2xvYmFsOjpTeXN0ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJOb25Vc2VyQ29k
ZUF0dHJpYnV0ZSgpXVxuIik7Ci0gIFdyaXRlR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZXMocHJpbnRl
cik7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcnMsCi0gICAgIiRhY2Nlc3NfbGV2ZWwkIHNl
YWxlZCBwYXJ0aWFsIGNsYXNzICRjbGFzc19uYW1lJCA6IHBiOjpJTWVzc2FnZTwkY2xhc3NfbmFt
ZSQ+IHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICAvLyBBbGwgc3RhdGljIGZpZWxk
cyBhbmQgcHJvcGVydGllcwotICBwcmludGVyLT5QcmludCgKLSAgICAgIHZhcnMsCi0gICAgICAi
cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcGI6Ok1lc3NhZ2VQYXJzZXI8JGNsYXNzX25hbWUkPiBf
cGFyc2VyID0gbmV3IHBiOjpNZXNzYWdlUGFyc2VyPCRjbGFzc19uYW1lJD4oKCkgPT4gbmV3ICRj
bGFzc19uYW1lJCgpKTtcbiIKLSAgICAgICJwdWJsaWMgc3RhdGljIHBiOjpNZXNzYWdlUGFyc2Vy
PCRjbGFzc19uYW1lJD4gUGFyc2VyIHsgZ2V0IHsgcmV0dXJuIF9wYXJzZXI7IH0gfVxuXG4iKTsK
LQotICAvLyBBY2Nlc3MgdGhlIG1lc3NhZ2UgZGVzY3JpcHRvciB2aWEgdGhlIHJlbGV2YW50IGZp
bGUgZGVzY3JpcHRvciBvciBjb250YWluaW5nIG1lc3NhZ2UgZGVzY3JpcHRvci4KLSAgaWYgKCFk
ZXNjcmlwdG9yXy0+Y29udGFpbmluZ190eXBlKCkpIHsKLSAgICB2YXJzWyJkZXNjcmlwdG9yX2Fj
Y2Vzc29yIl0gPSBHZXRSZWZsZWN0aW9uQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5maWxlKCkpCi0g
ICAgICAgICsgIi5EZXNjcmlwdG9yLk1lc3NhZ2VUeXBlc1siICsgU2ltcGxlSXRvYShkZXNjcmlw
dG9yXy0+aW5kZXgoKSkgKyAiXSI7Ci0gIH0gZWxzZSB7Ci0gICAgdmFyc1siZGVzY3JpcHRvcl9h
Y2Nlc3NvciJdID0gR2V0Q2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5jb250YWluaW5nX3R5cGUoKSkK
LSAgICAgICAgKyAiLkRlc2NyaXB0b3IuTmVzdGVkVHlwZXNbIiArIFNpbXBsZUl0b2EoZGVzY3Jp
cHRvcl8tPmluZGV4KCkpICsgIl0iOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFy
cywKLSAgICAicHVibGljIHN0YXRpYyBwYnI6Ok1lc3NhZ2VEZXNjcmlwdG9yIERlc2NyaXB0b3Ig
e1xuIgotICAgICIgIGdldCB7IHJldHVybiAkZGVzY3JpcHRvcl9hY2Nlc3NvciQ7IH1cbiIKLSAg
ICAifVxuIgotICAgICJcbiIKLSAgICAicGJyOjpNZXNzYWdlRGVzY3JpcHRvciBwYjo6SU1lc3Nh
Z2UuRGVzY3JpcHRvciB7XG4iCi0gICAgIiAgZ2V0IHsgcmV0dXJuIERlc2NyaXB0b3I7IH1cbiIK
LSAgICAifVxuIgotICAgICJcbiIpOwotCi0gIC8vIFBhcmFtZXRlcmxlc3MgY29uc3RydWN0b3Ig
YW5kIHBhcnRpYWwgT25Db25zdHJ1Y3Rpb24gbWV0aG9kLgotICBwcmludGVyLT5QcmludCgKLSAg
ICB2YXJzLAotICAgICJwdWJsaWMgJGNsYXNzX25hbWUkKCkge1xuIgotICAgICIgIE9uQ29uc3Ry
dWN0aW9uKCk7XG4iCi0gICAgIn1cblxuIgotICAgICJwYXJ0aWFsIHZvaWQgT25Db25zdHJ1Y3Rp
b24oKTtcblxuIik7Ci0KLSAgR2VuZXJhdGVDbG9uaW5nQ29kZShwcmludGVyKTsKLSAgR2VuZXJh
dGVGcmVlemluZ0NvZGUocHJpbnRlcik7Ci0KLSAgLy8gRmllbGRzL3Byb3BlcnRpZXMKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yXy0+Zmll
bGQoaSk7Ci0KLSAgICAvLyBSYXRzOiB3ZSBsb3NlIHRoZSBkZWJ1ZyBjb21tZW50IGhlcmUgOigK
LSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICIvLy8gPHN1bW1hcnk+RmllbGQgbnVtYmVyIGZv
ciB0aGUgXCIkZmllbGRfbmFtZSRcIiBmaWVsZC48L3N1bW1hcnk+XG4iCi0gICAgICAicHVibGlj
IGNvbnN0IGludCAkZmllbGRfY29uc3RhbnRfbmFtZSQgPSAkaW5kZXgkO1xuIiwKLSAgICAgICJm
aWVsZF9uYW1lIiwgZmllbGREZXNjcmlwdG9yLT5uYW1lKCksCi0gICAgICAiZmllbGRfY29uc3Rh
bnRfbmFtZSIsIEdldEZpZWxkQ29uc3RhbnROYW1lKGZpZWxkRGVzY3JpcHRvciksCi0gICAgICAi
aW5kZXgiLCBTaW1wbGVJdG9hKGZpZWxkRGVzY3JpcHRvci0+bnVtYmVyKCkpKTsKLSAgICBzY29w
ZWRfcHRyPEZpZWxkR2VuZXJhdG9yQmFzZT4gZ2VuZXJhdG9yKAotICAgICAgICBDcmVhdGVGaWVs
ZEdlbmVyYXRvckludGVybmFsKGZpZWxkRGVzY3JpcHRvcikpOwotICAgIGdlbmVyYXRvci0+R2Vu
ZXJhdGVNZW1iZXJzKHByaW50ZXIpOwotICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICB9Ci0K
LSAgLy8gb25lb2YgcHJvcGVydGllcwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3Jf
LT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewotICAgIHZhcnNbIm5hbWUiXSA9IFVuZGVyc2Nv
cmVzVG9DYW1lbENhc2UoZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPm5hbWUoKSwgZmFsc2Up
OwotICAgIHZhcnNbInByb3BlcnR5X25hbWUiXSA9IFVuZGVyc2NvcmVzVG9DYW1lbENhc2UoZGVz
Y3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPm5hbWUoKSwgdHJ1ZSk7Ci0gICAgdmFyc1sib3JpZ2lu
YWxfbmFtZSJdID0gZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPm5hbWUoKTsKLSAgICBwcmlu
dGVyLT5QcmludCgKLSAgICAgIHZhcnMsCi0gICAgICAicHJpdmF0ZSBvYmplY3QgJG5hbWUkXztc
biIKLSAgICAgICIvLy8gPHN1bW1hcnk+RW51bSBvZiBwb3NzaWJsZSBjYXNlcyBmb3IgdGhlIFwi
JG9yaWdpbmFsX25hbWUkXCIgb25lb2YuPC9zdW1tYXJ5PlxuIgotICAgICAgInB1YmxpYyBlbnVt
ICRwcm9wZXJ0eV9uYW1lJE9uZW9mQ2FzZSB7XG4iKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsK
LSAgICBwcmludGVyLT5QcmludCgiTm9uZSA9IDAsXG4iKTsKLSAgICBmb3IgKGludCBqID0gMDsg
aiA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVsZF9jb3VudCgpOyBqKyspIHsKLSAg
ICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+b25lb2ZfZGVj
bChpKS0+ZmllbGQoaik7Ci0gICAgICBwcmludGVyLT5QcmludCgiJGZpZWxkX3Byb3BlcnR5X25h
bWUkID0gJGluZGV4JCxcbiIsCi0gICAgICAgICAgICAgICAgICAgICAiZmllbGRfcHJvcGVydHlf
bmFtZSIsIEdldFByb3BlcnR5TmFtZShmaWVsZCksCi0gICAgICAgICAgICAgICAgICAgICAiaW5k
ZXgiLCBTaW1wbGVJdG9hKGZpZWxkLT5udW1iZXIoKSkpOwotICAgIH0KLSAgICBwcmludGVyLT5P
dXRkZW50KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotICAgIC8vIFRPRE86IFNob3Vs
ZCB3ZSBwdXQgdGhlIG9uZW9mIC5wcm90byBjb21tZW50cyBoZXJlPwotICAgIC8vIEl0J3MgdW5j
bGVhciBleGFjdGx5IHdoZXJlIHRoZXkgc2hvdWxkIGdvLgotICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgdmFycywKLSAgICAgICJwcml2YXRlICRwcm9wZXJ0eV9uYW1lJE9uZW9mQ2FzZSAkbmFt
ZSRDYXNlXyA9ICRwcm9wZXJ0eV9uYW1lJE9uZW9mQ2FzZS5Ob25lO1xuIgotICAgICAgInB1Ymxp
YyAkcHJvcGVydHlfbmFtZSRPbmVvZkNhc2UgJHByb3BlcnR5X25hbWUkQ2FzZSB7XG4iCi0gICAg
ICAiICBnZXQgeyByZXR1cm4gJG5hbWUkQ2FzZV87IH1cbiIKLSAgICAgICJ9XG5cbiIKLSAgICAg
ICJwdWJsaWMgdm9pZCBDbGVhciRwcm9wZXJ0eV9uYW1lJCgpIHtcbiIKLSAgICAgICIgICRuYW1l
JENhc2VfID0gJHByb3BlcnR5X25hbWUkT25lb2ZDYXNlLk5vbmU7XG4iCi0gICAgICAiICAkbmFt
ZSRfID0gbnVsbDtcbiIKLSAgICAgICJ9XG5cbiIpOwotICB9Ci0KLSAgLy8gU3RhbmRhcmQgbWV0
aG9kcwotICBHZW5lcmF0ZUZyYW1ld29ya01ldGhvZHMocHJpbnRlcik7Ci0gIEdlbmVyYXRlTWVz
c2FnZVNlcmlhbGl6YXRpb25NZXRob2RzKHByaW50ZXIpOwotICBHZW5lcmF0ZU1lcmdpbmdNZXRo
b2RzKHByaW50ZXIpOwotCi0gIC8vIE5lc3RlZCBtZXNzYWdlcyBhbmQgZW51bXMKLSAgaWYgKEhh
c05lc3RlZEdlbmVyYXRlZFR5cGVzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgIHZh
cnMsCi0gICAgICAiI3JlZ2lvbiBOZXN0ZWQgdHlwZXNcbiIKLSAgICAgICIvLy8gPHN1bW1hcnk+
Q29udGFpbmVyIGZvciBuZXN0ZWQgdHlwZXMgZGVjbGFyZWQgaW4gdGhlICRjbGFzc19uYW1lJCBt
ZXNzYWdlIHR5cGUuPC9zdW1tYXJ5PlxuIgotICAgICAgIltnbG9iYWw6OlN5c3RlbS5EaWFnbm9z
dGljcy5EZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlKCldXG4iKTsKLSAgICBXcml0ZUdlbmVy
YXRlZENvZGVBdHRyaWJ1dGVzKHByaW50ZXIpOwotICAgIHByaW50ZXItPlByaW50KCJwdWJsaWMg
c3RhdGljIHBhcnRpYWwgY2xhc3MgVHlwZXMge1xuIik7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZW51bV90eXBlX2NvdW50KCk7
IGkrKykgewotICAgICAgRW51bUdlbmVyYXRvciBlbnVtR2VuZXJhdG9yKGRlc2NyaXB0b3JfLT5l
bnVtX3R5cGUoaSksIHRoaXMtPm9wdGlvbnMoKSk7Ci0gICAgICBlbnVtR2VuZXJhdG9yLkdlbmVy
YXRlKHByaW50ZXIpOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3Jf
LT5uZXN0ZWRfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAgIC8vIERvbid0IGdlbmVyYXRlIG5l
c3RlZCB0eXBlcyBmb3IgbWFwcy4uLgotICAgICAgaWYgKCFJc01hcEVudHJ5TWVzc2FnZShkZXNj
cmlwdG9yXy0+bmVzdGVkX3R5cGUoaSkpKSB7Ci0gICAgICAgIE1lc3NhZ2VHZW5lcmF0b3IgbWVz
c2FnZUdlbmVyYXRvcigKLSAgICAgICAgICAgIGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZShpKSwg
dGhpcy0+b3B0aW9ucygpKTsKLSAgICAgICAgbWVzc2FnZUdlbmVyYXRvci5HZW5lcmF0ZShwcmlu
dGVyKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50
ZXItPlByaW50KCJ9XG4iCi0gICAgICAgICAgICAgICAgICAgIiNlbmRyZWdpb25cbiIKLSAgICAg
ICAgICAgICAgICAgICAiXG4iKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJp
bnRlci0+UHJpbnQoIn1cbiIpOwotICBwcmludGVyLT5QcmludCgiXG4iKTsKLX0KLQotLy8gSGVs
cGVyIHRvIHdvcmsgb3V0IHdoZXRoZXIgd2UgbmVlZCB0byBnZW5lcmF0ZSBhIGNsYXNzIHRvIGhv
bGQgbmVzdGVkIHR5cGVzL2VudW1zLgotLy8gT25seSB0cmlja3kgYmVjYXVzZSB3ZSBkb24ndCB3
YW50IHRvIGdlbmVyYXRlIG1hcCBlbnRyeSB0eXBlcy4KLWJvb2wgTWVzc2FnZUdlbmVyYXRvcjo6
SGFzTmVzdGVkR2VuZXJhdGVkVHlwZXMoKQotewotICBpZiAoZGVzY3JpcHRvcl8tPmVudW1fdHlw
ZV9jb3VudCgpID4gMCkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykgewotICAgIGlmICgh
SXNNYXBFbnRyeU1lc3NhZ2UoZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpKSkgewotICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBNZXNz
YWdlR2VuZXJhdG9yOjpHZW5lcmF0ZUNsb25pbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7
Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgdmFyc1siY2xhc3NfbmFtZSJdID0gY2xh
c3NfbmFtZSgpOwotICAgIHByaW50ZXItPlByaW50KAotICAgIHZhcnMsCi0gICAgInB1YmxpYyAk
Y2xhc3NfbmFtZSQoJGNsYXNzX25hbWUkIG90aGVyKSA6IHRoaXMoKSB7XG4iKTsKLSAgcHJpbnRl
ci0+SW5kZW50KCk7Ci0gIC8vIENsb25lIG5vbi1vbmVvZiBmaWVsZHMgZmlyc3QKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYg
KCFkZXNjcmlwdG9yXy0+ZmllbGQoaSktPmNvbnRhaW5pbmdfb25lb2YoKSkgewotICAgICAgc2Nv
cGVkX3B0cjxGaWVsZEdlbmVyYXRvckJhc2U+IGdlbmVyYXRvcigKLSAgICAgICAgQ3JlYXRlRmll
bGRHZW5lcmF0b3JJbnRlcm5hbChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpKTsKLSAgICAgIGdlbmVy
YXRvci0+R2VuZXJhdGVDbG9uaW5nQ29kZShwcmludGVyKTsKLSAgICB9Ci0gIH0KLSAgLy8gQ2xv
bmUganVzdCB0aGUgcmlnaHQgZmllbGQgZm9yIGVhY2ggb25lb2YKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbF9jb3VudCgpOyArK2kpIHsKLSAgICB2YXJzWyJu
YW1lIl0gPSBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkp
LT5uYW1lKCksIGZhbHNlKTsKLSAgICB2YXJzWyJwcm9wZXJ0eV9uYW1lIl0gPSBVbmRlcnNjb3Jl
c1RvQ2FtZWxDYXNlKAotICAgICAgICBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+bmFtZSgp
LCB0cnVlKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLCAic3dpdGNoIChvdGhlci4kcHJvcGVy
dHlfbmFtZSRDYXNlKSB7XG4iKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVsZF9jb3VudCgpOyBq
KyspIHsKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+
b25lb2ZfZGVjbChpKS0+ZmllbGQoaik7Ci0gICAgICBzY29wZWRfcHRyPEZpZWxkR2VuZXJhdG9y
QmFzZT4gZ2VuZXJhdG9yKENyZWF0ZUZpZWxkR2VuZXJhdG9ySW50ZXJuYWwoZmllbGQpKTsKLSAg
ICAgIHZhcnNbImZpZWxkX3Byb3BlcnR5X25hbWUiXSA9IEdldFByb3BlcnR5TmFtZShmaWVsZCk7
Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICB2YXJzLAotICAgICAgICAgICJjYXNl
ICRwcm9wZXJ0eV9uYW1lJE9uZW9mQ2FzZS4kZmllbGRfcHJvcGVydHlfbmFtZSQ6XG4iKTsKLSAg
ICAgIHByaW50ZXItPkluZGVudCgpOwotICAgICAgZ2VuZXJhdG9yLT5HZW5lcmF0ZUNsb25pbmdD
b2RlKHByaW50ZXIpOwotICAgICAgcHJpbnRlci0+UHJpbnQoImJyZWFrO1xuIik7Ci0gICAgICBw
cmludGVyLT5PdXRkZW50KCk7Ci0gICAgfQotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBw
cmludGVyLT5QcmludCgifVxuXG4iKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAg
cHJpbnRlci0+UHJpbnQoIn1cblxuIik7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFycywK
LSAgICAicHVibGljICRjbGFzc19uYW1lJCBDbG9uZSgpIHtcbiIKLSAgICAiICByZXR1cm4gbmV3
ICRjbGFzc19uYW1lJCh0aGlzKTtcbiIKLSAgICAifVxuXG4iKTsKLX0KLQotdm9pZCBNZXNzYWdl
R2VuZXJhdG9yOjpHZW5lcmF0ZUZyZWV6aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewot
fQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlRnJhbWV3b3JrTWV0aG9kcyhpbzo6
UHJpbnRlciogcHJpbnRlcikgewotICAgIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgICB2
YXJzWyJjbGFzc19uYW1lIl0gPSBjbGFzc19uYW1lKCk7Ci0KLSAgICAvLyBFcXVhbGl0eQotICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICB2YXJzLAotICAgICAgICAicHVibGljIG92ZXJyaWRl
IGJvb2wgRXF1YWxzKG9iamVjdCBvdGhlcikge1xuIgotICAgICAgICAiICByZXR1cm4gRXF1YWxz
KG90aGVyIGFzICRjbGFzc19uYW1lJCk7XG4iCi0gICAgICAgICJ9XG5cbiIKLSAgICAgICAgInB1
YmxpYyBib29sIEVxdWFscygkY2xhc3NfbmFtZSQgb3RoZXIpIHtcbiIKLSAgICAgICAgIiAgaWYg
KFJlZmVyZW5jZUVxdWFscyhvdGhlciwgbnVsbCkpIHtcbiIKLSAgICAgICAgIiAgICByZXR1cm4g
ZmFsc2U7XG4iCi0gICAgICAgICIgIH1cbiIKLSAgICAgICAgIiAgaWYgKFJlZmVyZW5jZUVxdWFs
cyhvdGhlciwgdGhpcykpIHtcbiIKLSAgICAgICAgIiAgICByZXR1cm4gdHJ1ZTtcbiIKLSAgICAg
ICAgIiAgfVxuIik7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgICAgIHNjb3BlZF9w
dHI8RmllbGRHZW5lcmF0b3JCYXNlPiBnZW5lcmF0b3IoCi0gICAgICAgICAgICBDcmVhdGVGaWVs
ZEdlbmVyYXRvckludGVybmFsKGRlc2NyaXB0b3JfLT5maWVsZChpKSkpOwotICAgICAgICBnZW5l
cmF0b3ItPldyaXRlRXF1YWxzKHByaW50ZXIpOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewotICAgICAgICBwcmlu
dGVyLT5QcmludCgiaWYgKCRwcm9wZXJ0eV9uYW1lJENhc2UgIT0gb3RoZXIuJHByb3BlcnR5X25h
bWUkQ2FzZSkgcmV0dXJuIGZhbHNlO1xuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0eV9uYW1lIiwg
VW5kZXJzY29yZXNUb0NhbWVsQ2FzZShkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+bmFtZSgp
LCB0cnVlKSk7Ci0gICAgfQotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5Q
cmludCgKLSAgICAgICAgIiAgcmV0dXJuIHRydWU7XG4iCi0gICAgICAgICJ9XG5cbiIpOwotCi0g
ICAgLy8gR2V0SGFzaENvZGUKLSAgICAvLyBTdGFydCB3aXRoIGEgbm9uLXplcm8gdmFsdWUgdG8g
ZWFzaWx5IGRpc3Rpbmd1aXNoIGJldHdlZW4gbnVsbCBhbmQgImVtcHR5IiBtZXNzYWdlcy4KLSAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICAgInB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENv
ZGUoKSB7XG4iCi0gICAgICAgICIgIGludCBoYXNoID0gMTtcbiIpOwotICAgIHByaW50ZXItPklu
ZGVudCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50
KCk7IGkrKykgewotICAgICAgICBzY29wZWRfcHRyPEZpZWxkR2VuZXJhdG9yQmFzZT4gZ2VuZXJh
dG9yKAotICAgICAgICAgICAgQ3JlYXRlRmllbGRHZW5lcmF0b3JJbnRlcm5hbChkZXNjcmlwdG9y
Xy0+ZmllbGQoaSkpKTsKLSAgICAgICAgZ2VuZXJhdG9yLT5Xcml0ZUhhc2gocHJpbnRlcik7Ci0g
ICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2xfY291
bnQoKTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KCJoYXNoIF49IChpbnQpICRuYW1l
JENhc2VfO1xuIiwKLSAgICAgICAgICAgICJuYW1lIiwgVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShk
ZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+bmFtZSgpLCBmYWxzZSkpOwotICAgIH0KLSAgICBw
cmludGVyLT5QcmludCgicmV0dXJuIGhhc2g7XG4iKTsKLSAgICBwcmludGVyLT5PdXRkZW50KCk7
Ci0gICAgcHJpbnRlci0+UHJpbnQoIn1cblxuIik7Ci0KLSAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICAgInB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSB7XG4iCi0gICAgICAgICIg
IHJldHVybiBwYjo6SnNvbkZvcm1hdHRlci5Ub0RpYWdub3N0aWNTdHJpbmcodGhpcyk7XG4iCi0g
ICAgICAgICJ9XG5cbiIpOwotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlTWVz
c2FnZVNlcmlhbGl6YXRpb25NZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50
ZXItPlByaW50KAotICAgICAgInB1YmxpYyB2b2lkIFdyaXRlVG8ocGI6OkNvZGVkT3V0cHV0U3Ry
ZWFtIG91dHB1dCkge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIC8vIFNlcmlhbGl6
ZSBhbGwgdGhlIGZpZWxkcwotICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkc19ieV9udW1iZXIo
KS5zaXplKCk7IGkrKykgewotICAgIHNjb3BlZF9wdHI8RmllbGRHZW5lcmF0b3JCYXNlPiBnZW5l
cmF0b3IoCi0gICAgICBDcmVhdGVGaWVsZEdlbmVyYXRvckludGVybmFsKGZpZWxkc19ieV9udW1i
ZXIoKVtpXSkpOwotICAgIGdlbmVyYXRvci0+R2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShwcmlu
dGVyKTsKLSAgfQotCi0gIC8vIFRPRE8oam9uc2tlZXQpOiBNZW1vaXplIHNpemUgb2YgZnJvemVu
IG1lc3NhZ2VzPwotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAg
ICJ9XG4iCi0gICAgIlxuIgotICAgICJwdWJsaWMgaW50IENhbGN1bGF0ZVNpemUoKSB7XG4iKTsK
LSAgcHJpbnRlci0+SW5kZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJpbnQgc2l6ZSA9IDA7XG4i
KTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsr
KSB7Ci0gICAgc2NvcGVkX3B0cjxGaWVsZEdlbmVyYXRvckJhc2U+IGdlbmVyYXRvcigKLSAgICAg
ICAgQ3JlYXRlRmllbGRHZW5lcmF0b3JJbnRlcm5hbChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpKTsK
LSAgICBnZW5lcmF0b3ItPkdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKHByaW50ZXIpOwotICB9
Ci0gIHByaW50ZXItPlByaW50KCJyZXR1cm4gc2l6ZTtcbiIpOwotICBwcmludGVyLT5PdXRkZW50
KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9XG5cbiIpOwotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0
b3I6OkdlbmVyYXRlTWVyZ2luZ01ldGhvZHMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgLy8g
Tm90ZTogIFRoZXNlIGFyZSBzZXBhcmF0ZSBmcm9tIEdlbmVyYXRlTWVzc2FnZVNlcmlhbGl6YXRp
b25NZXRob2RzKCkKLSAgLy8gICBiZWNhdXNlIHRoZXkgbmVlZCB0byBiZSBnZW5lcmF0ZWQgZXZl
biBmb3IgbWVzc2FnZXMgdGhhdCBhcmUgb3B0aW1pemVkCi0gIC8vICAgZm9yIGNvZGUgc2l6ZS4K
LSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICB2YXJzWyJjbGFzc19uYW1lIl0gPSBjbGFz
c19uYW1lKCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFycywKLSAgICAicHVibGljIHZv
aWQgTWVyZ2VGcm9tKCRjbGFzc19uYW1lJCBvdGhlcikge1xuIik7Ci0gIHByaW50ZXItPkluZGVu
dCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiaWYgKG90aGVyID09IG51bGwpIHtcbiIKLSAg
ICAiICByZXR1cm47XG4iCi0gICAgIn1cbiIpOwotICAvLyBNZXJnZSBub24tb25lb2YgZmllbGRz
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykg
ewotICAgIGlmICghZGVzY3JpcHRvcl8tPmZpZWxkKGkpLT5jb250YWluaW5nX29uZW9mKCkpIHsg
ICAgICAKLSAgICAgIHNjb3BlZF9wdHI8RmllbGRHZW5lcmF0b3JCYXNlPiBnZW5lcmF0b3IoCi0g
ICAgICAgICAgQ3JlYXRlRmllbGRHZW5lcmF0b3JJbnRlcm5hbChkZXNjcmlwdG9yXy0+ZmllbGQo
aSkpKTsKLSAgICAgIGdlbmVyYXRvci0+R2VuZXJhdGVNZXJnaW5nQ29kZShwcmludGVyKTsKLSAg
ICB9Ci0gIH0KLSAgLy8gTWVyZ2Ugb25lb2YgZmllbGRzCi0gIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2xfY291bnQoKTsgKytpKSB7Ci0gICAgdmFyc1sibmFtZSJd
ID0gVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+bmFt
ZSgpLCBmYWxzZSk7Ci0gICAgdmFyc1sicHJvcGVydHlfbmFtZSJdID0gVW5kZXJzY29yZXNUb0Nh
bWVsQ2FzZShkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+bmFtZSgpLCB0cnVlKTsKLSAgICBw
cmludGVyLT5QcmludCh2YXJzLCAic3dpdGNoIChvdGhlci4kcHJvcGVydHlfbmFtZSRDYXNlKSB7
XG4iKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGRl
c2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVsZF9jb3VudCgpOyBqKyspIHsKLSAgICAgIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+
ZmllbGQoaik7Ci0gICAgICB2YXJzWyJmaWVsZF9wcm9wZXJ0eV9uYW1lIl0gPSBHZXRQcm9wZXJ0
eU5hbWUoZmllbGQpOwotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcnMsCi0gICAg
ICAgICJjYXNlICRwcm9wZXJ0eV9uYW1lJE9uZW9mQ2FzZS4kZmllbGRfcHJvcGVydHlfbmFtZSQ6
XG4iCi0gICAgICAgICIgICRmaWVsZF9wcm9wZXJ0eV9uYW1lJCA9IG90aGVyLiRmaWVsZF9wcm9w
ZXJ0eV9uYW1lJDtcbiIKLSAgICAgICAgIiAgYnJlYWs7XG4iKTsKLSAgICB9Ci0gICAgcHJpbnRl
ci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KCJ9XG5cbiIpOwotICB9Ci0gIHByaW50
ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1cblxuIik7Ci0gIHByaW50ZXItPlBy
aW50KCJwdWJsaWMgdm9pZCBNZXJnZUZyb20ocGI6OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQpIHtc
biIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInVpbnQg
dGFnO1xuIgotICAgICJ3aGlsZSAoKHRhZyA9IGlucHV0LlJlYWRUYWcoKSkgIT0gMCkge1xuIgot
ICAgICIgIHN3aXRjaCh0YWcpIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLSAgcHJpbnRl
ci0+SW5kZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICJkZWZhdWx0OlxuIgotICAgICIg
IGlucHV0LlNraXBMYXN0RmllbGQoKTtcbiIgLy8gV2UncmUgbm90IHN0b3JpbmcgdGhlIGRhdGEs
IGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGNvbnN1bWUgaXQuCi0gICAgIiAgYnJlYWs7XG4iKTsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHNfYnlfbnVtYmVyKCkuc2l6ZSgpOyBpKyspIHsKLSAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZmllbGRzX2J5X251bWJlcigpW2ldOwot
ICAgIGludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V2lyZVR5cGUgd3QgPQotICAgICAgICBpbnRl
cm5hbDo6V2lyZUZvcm1hdDo6V2lyZVR5cGVGb3JGaWVsZFR5cGUoZmllbGQtPnR5cGUoKSk7Ci0g
ICAgdWludDMyIHRhZyA9IGludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWFrZVRhZyhmaWVsZC0+
bnVtYmVyKCksIHd0KTsKLSAgICAvLyBIYW5kbGUgYm90aCBwYWNrZWQgYW5kIHVucGFja2VkIHJl
cGVhdGVkIGZpZWxkcyB3aXRoIHRoZSBzYW1lIFJlYWQqQXJyYXkgY2FsbDsKLSAgICAvLyB0aGUg
dHdvIGdlbmVyYXRlZCBjYXNlcyBhcmUgdGhlIHBhY2tlZCBhbmQgdW5wYWNrZWQgdGFncy4KLSAg
ICAvLyBUT0RPKGpvbnNrZWV0KTogQ2hlY2sgdGhhdCBpc19wYWNrYWJsZSBpcyBlcXVpdmFsZW50
IHRvCi0gICAgLy8gaXNfcmVwZWF0ZWQgJiYgd3QgaW4geyBWQVJJTlQsIEZJWEVEMzIsIEZJWEVE
NjQgfS4KLSAgICAvLyBJdCBsb29rcyBsaWtlIGl0IGlzLi4uCi0gICAgaWYgKGZpZWxkLT5pc19w
YWNrYWJsZSgpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImNhc2UgJHBhY2tl
ZF90YWckOlxuIiwKLSAgICAgICAgInBhY2tlZF90YWciLAotICAgICAgICBTaW1wbGVJdG9hKAot
ICAgICAgICAgICAgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNYWtlVGFnKAotICAgICAgICAg
ICAgICAgIGZpZWxkLT5udW1iZXIoKSwKLSAgICAgICAgICAgICAgICBpbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpKSk7Ci0gICAgfQotCi0gICAgcHJp
bnRlci0+UHJpbnQoImNhc2UgJHRhZyQ6IHtcbiIsICJ0YWciLCBTaW1wbGVJdG9hKHRhZykpOwot
ICAgIHByaW50ZXItPkluZGVudCgpOwotICAgIHNjb3BlZF9wdHI8RmllbGRHZW5lcmF0b3JCYXNl
PiBnZW5lcmF0b3IoCi0gICAgICAgIENyZWF0ZUZpZWxkR2VuZXJhdG9ySW50ZXJuYWwoZmllbGQp
KTsKLSAgICBnZW5lcmF0b3ItPkdlbmVyYXRlUGFyc2luZ0NvZGUocHJpbnRlcik7Ci0gICAgcHJp
bnRlci0+UHJpbnQoImJyZWFrO1xuIik7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHBy
aW50ZXItPlByaW50KCJ9XG4iKTsKLSAgfQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50
ZXItPlByaW50KCJ9XG4iKTsgLy8gc3dpdGNoCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJp
bnRlci0+UHJpbnQoIn1cbiIpOyAvLyB3aGlsZQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHBy
aW50ZXItPlByaW50KCJ9XG5cbiIpOyAvLyBtZXRob2QKLX0KLQotaW50IE1lc3NhZ2VHZW5lcmF0
b3I6OkdldEZpZWxkT3JkaW5hbChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZF9uYW1lcygpLnNpemUoKTsgaSsrKSB7Ci0gICAg
aWYgKGZpZWxkX25hbWVzKClbaV0gPT0gZGVzY3JpcHRvci0+bmFtZSgpKSB7Ci0gICAgICByZXR1
cm4gaTsKLSAgICB9Ci0gIH0KLSAgR09PR0xFX0xPRyhERkFUQUwpPDwgIkNvdWxkIG5vdCBmaW5k
IG9yZGluYWwgZm9yIGZpZWxkICIgPDwgZGVzY3JpcHRvci0+bmFtZSgpOwotICByZXR1cm4gLTE7
Ci19Ci0KLUZpZWxkR2VuZXJhdG9yQmFzZSogTWVzc2FnZUdlbmVyYXRvcjo6Q3JlYXRlRmllbGRH
ZW5lcmF0b3JJbnRlcm5hbCgKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3Ip
IHsKLSAgcmV0dXJuIENyZWF0ZUZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0b3IsIEdldEZpZWxkT3Jk
aW5hbChkZXNjcmlwdG9yKSwgdGhpcy0+b3B0aW9ucygpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
IGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9i
dWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjc5NGQ2OGRmZGM0OWY2YTkwYzRjNmViZDMyYTZmY2IyZGY5MWZhNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3NoYXJwL2NzaGFycF9tZXNzYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09H
TEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX01FU1NBR0VfSF9fCi0jZGVmaW5lIEdPT0dMRV9Q
Uk9UT0JVRl9DT01QSUxFUl9DU0hBUlBfTUVTU0FHRV9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4K
LSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y29kZV9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3No
YXJwL2NzaGFycF9zb3VyY2VfZ2VuZXJhdG9yX2Jhc2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9oZWxwZXJzLmg+Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3Bh
Y2UgY3NoYXJwIHsKLQotY2xhc3MgRmllbGRHZW5lcmF0b3JCYXNlOwotCi1jbGFzcyBNZXNzYWdl
R2VuZXJhdG9yIDogcHVibGljIFNvdXJjZUdlbmVyYXRvckJhc2UgewotIHB1YmxpYzoKLSAgTWVz
c2FnZUdlbmVyYXRvcihjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBPcHRpb25z
KiBvcHRpb25zKTsKLSAgfk1lc3NhZ2VHZW5lcmF0b3IoKTsKLQotICB2b2lkIEdlbmVyYXRlQ2xv
bmluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlRnJlZXppbmdD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZUZyYW1ld29ya01ldGhv
ZHMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlKGlvOjpQcmludGVyKiBw
cmludGVyKTsKLQotIHByaXZhdGU6Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwot
ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmllbGRfbmFtZXNfOwotICBzdGQ6OnZlY3Rvcjxj
b25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHNfYnlfbnVtYmVyXzsKLQotICB2b2lkIEdlbmVy
YXRlTWVzc2FnZVNlcmlhbGl6YXRpb25NZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAg
dm9pZCBHZW5lcmF0ZU1lcmdpbmdNZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICBp
bnQgR2V0RmllbGRPcmRpbmFsKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0g
IEZpZWxkR2VuZXJhdG9yQmFzZSogQ3JlYXRlRmllbGRHZW5lcmF0b3JJbnRlcm5hbCgKLSAgICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLSAgYm9vbCBIYXNOZXN0ZWRH
ZW5lcmF0ZWRUeXBlcygpOwotCi0gIHN0ZDo6c3RyaW5nIGNsYXNzX25hbWUoKTsKLSAgc3RkOjpz
dHJpbmcgZnVsbF9jbGFzc19uYW1lKCk7Ci0KLSAgLy8gZmllbGQgbmFtZXMgc29ydGVkIGFscGhh
YmV0aWNhbGx5Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZmllbGRfbmFtZXMo
KTsKLQotICAvLyBmaWVsZCBkZXNjcmlwdG9ycyBzb3J0ZWQgYnkgbnVtYmVyCi0gIGNvbnN0IHN0
ZDo6dmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBmaWVsZHNfYnlfbnVtYmVyKCk7Ci0K
LSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE1lc3NhZ2VHZW5lcmF0b3IpOwot
fTsKLQotfSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlm
ICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX01FU1NBR0VfSF9fCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tZXNzYWdlX2Zp
ZWxkLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfbWVzc2Fn
ZV9maWVsZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM4NjkyZjhjNzM2NjRi
MTYxNzY3ZWVkMjM0YzI4MjhmZWZlYWE5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFy
cF9tZXNzYWdlX2ZpZWxkLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4uaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlw
dG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9kb2NfY29tbWVudC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tZXNzYWdlX2ZpZWxkLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfb3B0aW9ucy5o
PgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ug
Y29tcGlsZXIgewotbmFtZXNwYWNlIGNzaGFycCB7Ci0KLU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6
TWVzc2FnZUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZE9y
ZGluYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBPcHRpb25zICpvcHRpb25zKQotICAgIDogRmllbGRHZW5lcmF0b3JCYXNlKGRlc2NyaXB0b3Is
IGZpZWxkT3JkaW5hbCwgb3B0aW9ucykgewotICB2YXJpYWJsZXNfWyJoYXNfcHJvcGVydHlfY2hl
Y2siXSA9IG5hbWUoKSArICJfICE9IG51bGwiOwotICB2YXJpYWJsZXNfWyJoYXNfbm90X3Byb3Bl
cnR5X2NoZWNrIl0gPSBuYW1lKCkgKyAiXyA9PSBudWxsIjsKLX0KLQotTWVzc2FnZUZpZWxkR2Vu
ZXJhdG9yOjp+TWVzc2FnZUZpZWxkR2VuZXJhdG9yKCkgewotCi19Ci0KLXZvaWQgTWVzc2FnZUZp
ZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAg
cHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSAkdHlwZV9uYW1l
JCAkbmFtZSRfO1xuIik7Ci0gIFdyaXRlUHJvcGVydHlEb2NDb21tZW50KHByaW50ZXIsIGRlc2Ny
aXB0b3JfKTsKLSAgQWRkRGVwcmVjYXRlZEZsYWcocHJpbnRlcik7Ci0gIHByaW50ZXItPlByaW50
KAotICAgIHZhcmlhYmxlc18sCi0gICAgIiRhY2Nlc3NfbGV2ZWwkICR0eXBlX25hbWUkICRwcm9w
ZXJ0eV9uYW1lJCB7XG4iCi0gICAgIiAgZ2V0IHsgcmV0dXJuICRuYW1lJF87IH1cbiIKLSAgICAi
ICBzZXQge1xuIgotICAgICIgICAgJG5hbWUkXyA9IHZhbHVlO1xuIgotICAgICIgIH1cbiIKLSAg
ICAifVxuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZU1lcmdp
bmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZh
cmlhYmxlc18sCi0gICAgImlmIChvdGhlci4kaGFzX3Byb3BlcnR5X2NoZWNrJCkge1xuIgotICAg
ICIgIGlmICgkaGFzX25vdF9wcm9wZXJ0eV9jaGVjayQpIHtcbiIKLSAgICAiICAgICRuYW1lJF8g
PSBuZXcgJHR5cGVfbmFtZSQoKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgJHByb3BlcnR5X25h
bWUkLk1lcmdlRnJvbShvdGhlci4kcHJvcGVydHlfbmFtZSQpO1xuIgotICAgICJ9XG4iKTsKLX0K
LQotdm9pZCBNZXNzYWdlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAg
ICAiaWYgKCRoYXNfbm90X3Byb3BlcnR5X2NoZWNrJCkge1xuIgotICAgICIgICRuYW1lJF8gPSBu
ZXcgJHR5cGVfbmFtZSQoKTtcbiIKLSAgICAifVxuIgotICAgIC8vIFRPRE8oam9uc2tlZXQpOiBE
byB3ZSByZWFsbHkgbmVlZCBtZXJnaW5nIGJlaGF2aW91ciBsaWtlIHRoaXM/Ci0gICAgImlucHV0
LlJlYWRNZXNzYWdlKCRuYW1lJF8pO1xuIik7IC8vIE5vIG5lZWQgdG8gc3VwcG9ydCBUWVBFX0dS
T1VQLi4uCi19Ci0KLXZvaWQgTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVNlcmlhbGl6
YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAg
IHZhcmlhYmxlc18sCi0gICAgImlmICgkaGFzX3Byb3BlcnR5X2NoZWNrJCkge1xuIgotICAgICIg
IG91dHB1dC5Xcml0ZVJhd1RhZygkdGFnX2J5dGVzJCk7XG4iCi0gICAgIiAgb3V0cHV0LldyaXRl
TWVzc2FnZSgkcHJvcGVydHlfbmFtZSQpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBNZXNz
YWdlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgImlm
ICgkaGFzX3Byb3BlcnR5X2NoZWNrJCkge1xuIgotICAgICIgIHNpemUgKz0gJHRhZ19zaXplJCAr
IHBiOjpDb2RlZE91dHB1dFN0cmVhbS5Db21wdXRlTWVzc2FnZVNpemUoJHByb3BlcnR5X25hbWUk
KTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjpXcml0
ZUhhc2goaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFy
aWFibGVzXywKLSAgICAiaWYgKCRoYXNfcHJvcGVydHlfY2hlY2skKSBoYXNoIF49ICRwcm9wZXJ0
eV9uYW1lJC5HZXRIYXNoQ29kZSgpO1xuIik7Ci19Ci12b2lkIE1lc3NhZ2VGaWVsZEdlbmVyYXRv
cjo6V3JpdGVFcXVhbHMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgdmFyaWFibGVzXywKLSAgICAiaWYgKCFvYmplY3QuRXF1YWxzKCRwcm9wZXJ0eV9uYW1l
JCwgb3RoZXIuJHByb3BlcnR5X25hbWUkKSkgcmV0dXJuIGZhbHNlO1xuIik7Ci19Ci12b2lkIE1l
c3NhZ2VGaWVsZEdlbmVyYXRvcjo6V3JpdGVUb1N0cmluZyhpbzo6UHJpbnRlciogcHJpbnRlcikg
ewotICB2YXJpYWJsZXNfWyJmaWVsZF9uYW1lIl0gPSBHZXRGaWVsZE5hbWUoZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCgKLSAgICB2YXJpYWJsZXNfLAotICAgICJQcmludEZpZWxkKFwi
JGZpZWxkX25hbWUkXCIsIGhhcyRwcm9wZXJ0eV9uYW1lJCwgJG5hbWUkXywgd3JpdGVyKTtcbiIp
OwotfQotCi12b2lkIE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVDbG9uaW5nQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICIkcHJvcGVydHlfbmFtZSQgPSBvdGhlci4kaGFzX3Byb3BlcnR5X2NoZWNrJCA/IG90aGVyLiRw
cm9wZXJ0eV9uYW1lJC5DbG9uZSgpIDogbnVsbDtcbiIpOwotfQotCi12b2lkIE1lc3NhZ2VGaWVs
ZEdlbmVyYXRvcjo6R2VuZXJhdGVGcmVlemluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsK
LX0KLQotdm9pZCBNZXNzYWdlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlQ29kZWNDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0g
ICAgInBiOjpGaWVsZENvZGVjLkZvck1lc3NhZ2UoJHRhZyQsICR0eXBlX25hbWUkLlBhcnNlciki
KTsKLX0KLQotTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6Ok1lc3NhZ2VPbmVvZkZpZWxkR2Vu
ZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLQkgIGludCBm
aWVsZE9yZGluYWwsCi0gICAgY29uc3QgT3B0aW9ucyAqb3B0aW9ucykKLSAgICA6IE1lc3NhZ2VG
aWVsZEdlbmVyYXRvcihkZXNjcmlwdG9yLCBmaWVsZE9yZGluYWwsIG9wdGlvbnMpIHsKLSAgU2V0
Q29tbW9uT25lb2ZGaWVsZFZhcmlhYmxlcygmdmFyaWFibGVzXyk7Ci19Ci0KLU1lc3NhZ2VPbmVv
ZkZpZWxkR2VuZXJhdG9yOjp+TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3IoKSB7Ci0KLX0KLQot
dm9pZCBNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSB7Ci0gIFdyaXRlUHJvcGVydHlEb2NDb21tZW50KHByaW50ZXIsIGRlc2Ny
aXB0b3JfKTsKLSAgQWRkRGVwcmVjYXRlZEZsYWcocHJpbnRlcik7Ci0gIHByaW50ZXItPlByaW50
KAotICAgIHZhcmlhYmxlc18sCi0gICAgIiRhY2Nlc3NfbGV2ZWwkICR0eXBlX25hbWUkICRwcm9w
ZXJ0eV9uYW1lJCB7XG4iCi0gICAgIiAgZ2V0IHsgcmV0dXJuICRoYXNfcHJvcGVydHlfY2hlY2sk
ID8gKCR0eXBlX25hbWUkKSAkb25lb2ZfbmFtZSRfIDogbnVsbDsgfVxuIgotICAgICIgIHNldCB7
XG4iCi0gICAgIiAgICAkb25lb2ZfbmFtZSRfID0gdmFsdWU7XG4iCi0gICAgIiAgICAkb25lb2Zf
bmFtZSRDYXNlXyA9IHZhbHVlID09IG51bGwgPyAkb25lb2ZfcHJvcGVydHlfbmFtZSRPbmVvZkNh
c2UuTm9uZSA6ICRvbmVvZl9wcm9wZXJ0eV9uYW1lJE9uZW9mQ2FzZS4kcHJvcGVydHlfbmFtZSQ7
XG4iCi0gICAgIiAgfVxuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBNZXNzYWdlT25lb2ZGaWVs
ZEdlbmVyYXRvcjo6R2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewot
ICAvLyBUT0RPKGpvbnNrZWV0KTogV2UgbWF5IGJlIGFibGUgdG8gZG8gYmV0dGVyIHRoYW4gdGhp
cwotICBwcmludGVyLT5QcmludCgKLSAgICB2YXJpYWJsZXNfLAotICAgICIkdHlwZV9uYW1lJCBz
dWJCdWlsZGVyID0gbmV3ICR0eXBlX25hbWUkKCk7XG4iCi0gICAgImlmICgkaGFzX3Byb3BlcnR5
X2NoZWNrJCkge1xuIgotICAgICIgIHN1YkJ1aWxkZXIuTWVyZ2VGcm9tKCRwcm9wZXJ0eV9uYW1l
JCk7XG4iCi0gICAgIn1cbiIKLSAgICAiaW5wdXQuUmVhZE1lc3NhZ2Uoc3ViQnVpbGRlcik7XG4i
IC8vIE5vIHN1cHBvcnQgb2YgVFlQRV9HUk9VUAotICAgICIkcHJvcGVydHlfbmFtZSQgPSBzdWJC
dWlsZGVyO1xuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OldyaXRl
VG9TdHJpbmcoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAg
dmFyaWFibGVzXywKLSAgICAiUHJpbnRGaWVsZChcIiRkZXNjcmlwdG9yX25hbWUkXCIsICRoYXNf
cHJvcGVydHlfY2hlY2skLCAkb25lb2ZfbmFtZSRfLCB3cml0ZXIpO1xuIik7Ci19Ci0KLXZvaWQg
TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlQ2xvbmluZ0NvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJHByb3Bl
cnR5X25hbWUkID0gb3RoZXIuJHByb3BlcnR5X25hbWUkLkNsb25lKCk7XG4iKTsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2VfZmllbGQuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2VfZmllbGQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2MTQ3NTZmYTAzMjU0Y2Y1NDlhZTMwMjQ0
NmRiYTVkYTVhNjNjMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tZXNzYWdlX2Zp
ZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQ
X01FU1NBR0VfRklFTERfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hB
UlBfTUVTU0FHRV9GSUVMRF9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuaD4KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsK
LW5hbWVzcGFjZSBjc2hhcnAgewotCi1jbGFzcyBNZXNzYWdlRmllbGRHZW5lcmF0b3IgOiBwdWJs
aWMgRmllbGRHZW5lcmF0b3JCYXNlIHsKLSBwdWJsaWM6Ci0gIE1lc3NhZ2VGaWVsZEdlbmVyYXRv
cihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZmllbGRPcmRpbmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0
aW9ucyAqb3B0aW9ucyk7Ci0gIH5NZXNzYWdlRmllbGRHZW5lcmF0b3IoKTsKLQotICB2aXJ0dWFs
IHZvaWQgR2VuZXJhdGVDb2RlY0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFs
IHZvaWQgR2VuZXJhdGVDbG9uaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1
YWwgdm9pZCBHZW5lcmF0ZUZyZWV6aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZp
cnR1YWwgdm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0
dWFsIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZp
cnR1YWwgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAg
dmlydHVhbCB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpOwotCi0gIHZpcnR1YWwgdm9pZCBXcml0ZUhhc2goaW86OlByaW50ZXIqIHBy
aW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgV3JpdGVFcXVhbHMoaW86OlByaW50ZXIqIHByaW50ZXIp
OwotICB2aXJ0dWFsIHZvaWQgV3JpdGVUb1N0cmluZyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0K
LSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTWVzc2FnZUZp
ZWxkR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIE1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yIDog
cHVibGljIE1lc3NhZ2VGaWVsZEdlbmVyYXRvciB7Ci0gcHVibGljOgotICBNZXNzYWdlT25lb2ZG
aWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZE9yZGluYWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMgKm9wdGlvbnMpOwotICB+TWVzc2FnZU9uZW9mRmll
bGRHZW5lcmF0b3IoKTsKLQotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVDbG9uaW5nQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlBy
aW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgV3JpdGVUb1N0cmluZyhpbzo6UHJpbnRl
ciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKTsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNU
UlVDVE9SUyhNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBuYW1lc3Bh
Y2UgY3NoYXJwCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JV
Rl9DT01QSUxFUl9DU0hBUlBfTUVTU0FHRV9GSUVMRF9IX18KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfbmFtZXMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX25hbWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDMwODA1MTg3MWMxMDI3NjMxYzNkOTE1MTEwMTZhNmE3OGYxNDIxYjQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfbmFtZXMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDEwMyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0
aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdp
bmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZm
IERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gUHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIG1hcHBp
bmcgYSBkZXNjcmlwdG9yIHRvIHRoZQotLy8gZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNv
cnJlc3BvbmRpbmcgQyMgY2xhc3MuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVS
X0NTSEFSUF9OQU1FU19IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFS
UF9OQU1FU19IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1u
YW1lc3BhY2UgcHJvdG9idWYgewotCi1jbGFzcyBEZXNjcmlwdG9yOwotY2xhc3MgRW51bURlc2Ny
aXB0b3I7Ci1jbGFzcyBGaWxlRGVzY3JpcHRvcjsKLWNsYXNzIFNlcnZpY2VEZXNjcmlwdG9yOwot
Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGNzaGFycCB7Ci0KLS8vIFJlcXVpcmVz
OgotLy8gICBkZXNjcmlwdG9yICE9IE5VTEwKLS8vCi0vLyBSZXR1cm5zOgotLy8gICBUaGUgbmFt
ZXNwYWNlIHRvIHVzZSBmb3IgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLgotc3RyaW5nIEdldEZpbGVO
YW1lc3BhY2UoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotCi0vLyBSZXF1aXJl
czoKLS8vICAgZGVzY3JpcHRvciAhPSBOVUxMCi0vLwotLy8gUmV0dXJuczoKLS8vICAgVGhlIGZ1
bGx5LXF1YWxpZmllZCBDIyBjbGFzcyBuYW1lLgotc3RyaW5nIEdldENsYXNzTmFtZShjb25zdCBE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLQotLy8gUmVxdWlyZXM6Ci0vLyAgIGRlc2NyaXB0b3Ig
IT0gTlVMTAotLy8KLS8vIFJldHVybnM6Ci0vLyAgIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBv
ZiB0aGUgQyMgY2xhc3MgdGhhdCBwcm92aWRlcwotLy8gICBhY2Nlc3MgdG8gdGhlIGZpbGUgZGVz
Y3JpcHRvci4gUHJvdG8gY29tcGlsZXIgZ2VuZXJhdGVzCi0vLyAgIHN1Y2ggY2xhc3MgZm9yIGVh
Y2ggLnByb3RvIGZpbGUgcHJvY2Vzc2VkLgotc3RyaW5nIEdldFJlZmxlY3Rpb25DbGFzc05hbWUo
Y29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotCi0vLyBHZW5lcmF0ZXMgb3V0cHV0
IGZpbGUgbmFtZSBmb3IgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLiBJZiBnZW5lcmF0ZV9kaXJlY3Rv
cmllcwotLy8gaXMgdHJ1ZSwgdGhlIG91dHB1dCBmaWxlIHdpbGwgYmUgcHV0IHVuZGVyIGRpcmVj
dG9yeSBjb3JyZXNwb25kaW5nIHRvIGZpbGUncwotLy8gbmFtZXNwYWNlLiBiYXNlX25hbWVzcGFj
ZSBjYW4gYmUgdXNlZCB0byBzdHJpcCBzb21lIG9mIHRoZSB0b3AgbGV2ZWwKLS8vIGRpcmVjdG9y
aWVzLiBFLmcuIGZvciBmaWxlIHdpdGggbmFtZXNwYWNlICJCYXIuRm9vIiBhbmQgYmFzZV9uYW1l
c3BhY2U9IkJhciIsCi0vLyB0aGUgcmVzdWx0aW5nIGZpbGUgd2lsbCBiZSBwdXQgdW5kZXIgZGly
ZWN0b3J5ICJGb28iIChhbmQgbm90ICJCYXIvRm9vIikuCi0vLwotLy8gUmVxdWlyZXM6Ci0vLyAg
IGRlc2NyaXB0b3IgIT0gTlVMTAotLy8gICBlcnJvciAhPSBOVUxMCi0vLwotLy8gIFJldHVybnM6
Ci0vLyAgICBUaGUgZmlsZSBuYW1lIHRvIHVzZSBhcyBvdXRwdXQgZmlsZSBmb3IgZ2l2ZW4gZmls
ZSBkZXNjcmlwdG9yLiBJbiBjYXNlCi0vLyAgICBvZiBmYWlsdXJlLCB0aGlzIGZ1bmN0aW9uIHdp
bGwgcmV0dXJuIGVtcHR5IHN0cmluZyBhbmQgZXJyb3IgcGFyYW1ldGVyCi0vLyAgICB3aWxsIGNv
bnRhaW4gdGhlIGVycm9yIG1lc3NhZ2UuCi1zdHJpbmcgR2V0T3V0cHV0RmlsZSgKLSAgICBjb25z
dCBnb29nbGU6OnByb3RvYnVmOjpGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICBjb25z
dCBzdHJpbmcgZmlsZV9leHRlbnNpb24sCi0gICAgY29uc3QgYm9vbCBnZW5lcmF0ZV9kaXJlY3Rv
cmllcywKLSAgICBjb25zdCBzdHJpbmcgYmFzZV9uYW1lc3BhY2UsCi0gICAgc3RyaW5nKiBlcnJv
cik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBjc2hhcnAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRp
ZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFSUF9OQU1FU19IX18KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX29wdGlvbnMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX29wdGlvbnMuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3OWJmN2YzMjhlNjIxNmQ5NWViOGRhMTJmMWRi
ZTBkY2FmODczZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9vcHRpb25zLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX09QVElPTlNf
SF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBfT1BUSU9OU19IX18K
LQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9j
b21tb24uaD4KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3NoYXJwIHsKLQotLy8gR2VuZXJhdG9yIG9wdGlv
bnMgKHVzZWQgYnkgY3NoYXJwX2dlbmVyYXRvci5jYyk6Ci1zdHJ1Y3QgT3B0aW9ucyB7Ci0gIE9w
dGlvbnMoKSA6Ci0gICAgICBmaWxlX2V4dGVuc2lvbigiLmNzIiksCi0gICAgICBiYXNlX25hbWVz
cGFjZSgiIiksCi0gICAgICBiYXNlX25hbWVzcGFjZV9zcGVjaWZpZWQoZmFsc2UpLAotICAgICAg
aW50ZXJuYWxfYWNjZXNzKGZhbHNlKSwKLSAgICAgIGxlZ2FjeV9lbnVtX3ZhbHVlcyhmYWxzZSkg
ewotICB9Ci0gIC8vIEV4dGVuc2lvbiBvZiB0aGUgZ2VuZXJhdGVkIGZpbGUuIERlZmF1bHRzIHRv
ICIuY3MiCi0gIHN0cmluZyBmaWxlX2V4dGVuc2lvbjsKLSAgLy8gQmFzZSBuYW1lc3BhY2UgdG8g
dXNlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgaGllcmFyY2h5LiBEZWZhdWx0cyB0byAiIi4KLSAgLy8g
VGhpcyBvcHRpb24gYWxsb3dzIHRoZSBzaW1wbGUgY3JlYXRpb24gb2YgYSBjb252ZW50aW9uYWwg
QyMgZmlsZSBsYXlvdXQsCi0gIC8vIHdoZXJlIGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkIHJlbGF0
aXZlIHRvIGEgcHJvamVjdC1zcGVjaWZpYyBiYXNlCi0gIC8vIG5hbWVzcGFjZS4gRm9yIGV4YW1w
bGUsIGluIGEgcHJvamVjdCB3aXRoIGEgYmFzZSBuYW1lc3BhY2Ugb2YgUGV0U2hvcCwgYQotICAv
LyBwcm90byBvZiB1c2VyLnByb3RvIHdpdGggYSBDIyBuYW1lc3BhY2Ugb2YgUGV0U2hvcC5Nb2Rl
bC5TaGFyZWQgd291bGQKLSAgLy8gZ2VuZXJhdGUgTW9kZWwvU2hhcmVkL1VzZXIuY3MgdW5kZXJu
ZWF0aCB0aGUgc3BlY2lmaWVkIC0tY3NoYXJwX291dAotICAvLyBkaXJlY3RvcnkuCi0gIC8vCi0g
IC8vIElmIG5vIGJhc2UgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwgYWxsIGZpbGVzIGFyZSBnZW5l
cmF0ZWQgaW4gdGhlCi0gIC8vIC0tY3NoYXJwX291dCBkaXJlY3RvcnksIHdpdGggbm8gc3ViZGly
ZWN0b3JpZXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LgotICBzdHJpbmcgYmFzZV9uYW1lc3BhY2U7
Ci0gIC8vIFdoZXRoZXIgdGhlIGJhc2UgbmFtZXNwYWNlIGhhcyBiZWVuIGV4cGxpY2l0bHkgc3Bl
Y2lmaWVkIGJ5IHRoZSB1c2VyLgotICAvLyBUaGlzIGlzIHJlcXVpcmVkIGFzIHRoZSBiYXNlIG5h
bWVzcGFjZSBjYW4gYmUgZXhwbGljaXRseSBzZXQgdG8gdGhlIGVtcHR5Ci0gIC8vIHN0cmluZywg
bWVhbmluZyAiY3JlYXRlIGEgZnVsbCBkaXJlY3RvcnkgaGllcmFyY2h5LCBzdGFydGluZyBmcm9t
IHRoZSBmaXJzdAotICAvLyBzZWdtZW50IG9mIHRoZSBuYW1lc3BhY2UuIgotICBib29sIGJhc2Vf
bmFtZXNwYWNlX3NwZWNpZmllZDsKLSAgLy8gV2hldGhlciB0aGUgZ2VuZXJhdGVkIGNsYXNzZXMg
c2hvdWxkIGhhdmUgYWNjZXNzaWJpbGl0eSBsZXZlbCBvZiAiaW50ZXJuYWwiLgotICAvLyBEZWZh
dWx0cyB0byBmYWxzZSB0aGF0IGdlbmVyYXRlcyAicHVibGljIiBjbGFzc2VzLgotICBib29sIGlu
dGVybmFsX2FjY2VzczsKLSAgLy8gQnkgZGVmYXVsdCwgQyMgY29kZWdlbiBub3cgdXNlcyBQYXNj
YWxDYXNlZCBlbnVtIHZhbHVlcyBuYW1lcywgYWZ0ZXIKLSAgLy8gcmVtb3ZpbmcgdGhlIGVudW0g
dHlwZSBuYW1lIGFzIGEgcHJlZml4IChpZiBpdCAqaXMqIGEgcHJlZml4IG9mIHRoZSB2YWx1ZSku
Ci0gIC8vIFNldHRpbmcgdGhpcyBvcHRpb24gcmV2ZXJ0cyB0byB0aGUgcHJldmlvdXMgYmVoYXZp
b3Igb2YganVzdCBjb3B5aW5nIHRoZQotICAvLyB2YWx1ZSBuYW1lIHNwZWNpZmllZCBpbiB0aGUg
LnByb3RvIGZpbGUsIGFsbG93aW5nIGdyYWR1YWwgbWlncmF0aW9uLgotICAvLyBUaGlzIG9wdGlv
biB3aWxsIGJlIHJlbW92ZWQgYmVmb3JlIGZpbmFsIHJlbGVhc2UuCi0gIGJvb2wgbGVnYWN5X2Vu
dW1fdmFsdWVzOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNl
IGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotCi19ICAvLyBuYW1lc3BhY2Ug
Z29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBfT1BUSU9O
U19IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3No
YXJwX3ByaW1pdGl2ZV9maWVsZC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hh
cnAvY3NoYXJwX3ByaW1pdGl2ZV9maWVsZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggM2I3Y2E3NWFiODZkNTc3ZDlmY2RkY2U1OWJhYmJmY2UyZWM5OTVmZS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvY3NoYXJwL2NzaGFycF9wcmltaXRpdmVfZmllbGQuY2MKKysrIC9kZXYvbnVsbApAQCAt
MSwyMTggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNs
dWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVf
Z2VuZXJhdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
aW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3Ry
ZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2RvY19jb21tZW50
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfaGVs
cGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJw
X29wdGlvbnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9wcmltaXRpdmVfZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2Ug
cHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBjc2hhcnAgewotCi1Q
cmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6UHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoCi0gICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQgZmllbGRPcmRpbmFsLCBjb25zdCBP
cHRpb25zICpvcHRpb25zKQotICAgIDogRmllbGRHZW5lcmF0b3JCYXNlKGRlc2NyaXB0b3IsIGZp
ZWxkT3JkaW5hbCwgb3B0aW9ucykgewotICAvLyBUT0RPKGpvbnNrZWV0KTogTWFrZSB0aGlzIGNs
ZWFuZXIuLi4KLSAgaXNfdmFsdWVfdHlwZSA9IGRlc2NyaXB0b3ItPnR5cGUoKSAhPSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfU1RSSU5HCi0gICAgICAmJiBkZXNjcmlwdG9yLT50eXBlKCkgIT0gRmll
bGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTOwotICBpZiAoIWlzX3ZhbHVlX3R5cGUpIHsKLSAgICB2
YXJpYWJsZXNfWyJoYXNfcHJvcGVydHlfY2hlY2siXSA9IHZhcmlhYmxlc19bInByb3BlcnR5X25h
bWUiXSArICIuTGVuZ3RoICE9IDAiOwotICAgIHZhcmlhYmxlc19bIm90aGVyX2hhc19wcm9wZXJ0
eV9jaGVjayJdID0gIm90aGVyLiIgKyB2YXJpYWJsZXNfWyJwcm9wZXJ0eV9uYW1lIl0gKyAiLkxl
bmd0aCAhPSAwIjsKLSAgfQotfQotCi1QcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6flByaW1pdGl2
ZUZpZWxkR2VuZXJhdG9yKCkgewotfQotCi12b2lkIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjpH
ZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgLy8gVE9ETyhqb25za2Vl
dCk6IFdvcmsgb3V0IHdoZXRoZXIgd2Ugd2FudCB0byBwcmV2ZW50IHRoZSBmaWVsZHMgZnJvbSBl
dmVyIGJlaW5nCi0gIC8vIG51bGwsIG9yIHdoZXRoZXIgd2UganVzdCBoYW5kbGUgaXQsIGluIHRo
ZSBjYXNlcyBvZiBieXRlcyBhbmQgc3RyaW5nLgotICAvLyAoQmFzaWNhbGx5LCBzaG91bGQgbnVs
bC1oYW5kbGluZyBjb2RlIGJlIGluIHRoZSBnZXR0ZXIgb3IgdGhlIHNldHRlcj8pCi0gIHByaW50
ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgJHR5cGVfbmFtZSQgJG5h
bWVfZGVmX21lc3NhZ2UkO1xuIik7Ci0gIFdyaXRlUHJvcGVydHlEb2NDb21tZW50KHByaW50ZXIs
IGRlc2NyaXB0b3JfKTsKLSAgQWRkRGVwcmVjYXRlZEZsYWcocHJpbnRlcik7Ci0gIHByaW50ZXIt
PlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgIiRhY2Nlc3NfbGV2ZWwkICR0eXBlX25hbWUk
ICRwcm9wZXJ0eV9uYW1lJCB7XG4iCi0gICAgIiAgZ2V0IHsgcmV0dXJuICRuYW1lJF87IH1cbiIK
LSAgICAiICBzZXQge1xuIik7Ci0gIGlmIChpc192YWx1ZV90eXBlKSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICB2YXJpYWJsZXNfLAotICAgICAgIiAgICAkbmFtZSRfID0gdmFsdWU7XG4i
KTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgIHZhcmlhYmxlc18sCi0g
ICAgICAiICAgICRuYW1lJF8gPSBwYjo6UHJvdG9QcmVjb25kaXRpb25zLkNoZWNrTm90TnVsbCh2
YWx1ZSwgXCJ2YWx1ZVwiKTtcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KAotICAgICIgIH1c
biIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OkdlbmVy
YXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgdmFyaWFibGVzXywKLSAgICAiaWYgKCRvdGhlcl9oYXNfcHJvcGVydHlfY2hlY2skKSB7
XG4iCi0gICAgIiAgJHByb3BlcnR5X25hbWUkID0gb3RoZXIuJHByb3BlcnR5X25hbWUkO1xuIgot
ICAgICJ9XG4iKTsKLX0KLQotdm9pZCBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVQ
YXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBOb3RlOiBpbnZva2UgdGhl
IHByb3BlcnR5IHNldHRlciByYXRoZXIgdGhhbiB3cml0aW5nIHN0cmFpZ2h0IHRvIHRoZSBmaWVs
ZCwKLSAgLy8gc28gdGhhdCB3ZSBjYW4gbm9ybWFsaXplICJudWxsIHRvIGVtcHR5IiBmb3Igc3Ry
aW5ncyBhbmQgYnl0ZXMuCi0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAg
IiRwcm9wZXJ0eV9uYW1lJCA9IGlucHV0LlJlYWQkY2FwaXRhbGl6ZWRfdHlwZV9uYW1lJCgpO1xu
Iik7Ci19Ci0KLXZvaWQgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlU2VyaWFsaXph
dGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAg
dmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNfcHJvcGVydHlfY2hlY2skKSB7XG4iCi0gICAgIiAg
b3V0cHV0LldyaXRlUmF3VGFnKCR0YWdfYnl0ZXMkKTtcbiIKLSAgICAiICBvdXRwdXQuV3JpdGUk
Y2FwaXRhbGl6ZWRfdHlwZV9uYW1lJCgkcHJvcGVydHlfbmFtZSQpO1xuIgotICAgICJ9XG4iKTsK
LX0KLQotdm9pZCBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVTZXJpYWxpemVkU2l6
ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFy
aWFibGVzXywKLSAgICAiaWYgKCRoYXNfcHJvcGVydHlfY2hlY2skKSB7XG4iKTsKLSAgcHJpbnRl
ci0+SW5kZW50KCk7Ci0gIGludCBmaXhlZFNpemUgPSBHZXRGaXhlZFNpemUoZGVzY3JpcHRvcl8t
PnR5cGUoKSk7Ci0gIGlmIChmaXhlZFNpemUgPT0gLTEpIHsKLSAgICBwcmludGVyLT5QcmludCgK
LSAgICAgIHZhcmlhYmxlc18sCi0gICAgICAic2l6ZSArPSAkdGFnX3NpemUkICsgcGI6OkNvZGVk
T3V0cHV0U3RyZWFtLkNvbXB1dGUkY2FwaXRhbGl6ZWRfdHlwZV9uYW1lJFNpemUoJHByb3BlcnR5
X25hbWUkKTtcbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgInNp
emUgKz0gJHRhZ19zaXplJCArICRmaXhlZF9zaXplJDtcbiIsCi0gICAgICAiZml4ZWRfc2l6ZSIs
IFNpbXBsZUl0b2EoZml4ZWRTaXplKSwKLSAgICAgICJ0YWdfc2l6ZSIsIHZhcmlhYmxlc19bInRh
Z19zaXplIl0pOwotICB9Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQo
In1cbiIpOwotfQotCi12b2lkIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjpXcml0ZUhhc2goaW86
OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywK
LSAgICAiaWYgKCRoYXNfcHJvcGVydHlfY2hlY2skKSBoYXNoIF49ICRwcm9wZXJ0eV9uYW1lJC5H
ZXRIYXNoQ29kZSgpO1xuIik7Ci19Ci12b2lkIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjpXcml0
ZUVxdWFscyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICB2
YXJpYWJsZXNfLAotICAgICJpZiAoJHByb3BlcnR5X25hbWUkICE9IG90aGVyLiRwcm9wZXJ0eV9u
YW1lJCkgcmV0dXJuIGZhbHNlO1xuIik7Ci19Ci12b2lkIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9y
OjpXcml0ZVRvU3RyaW5nKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50
KAotICAgIHZhcmlhYmxlc18sCi0gICAgIlByaW50RmllbGQoXCIkZGVzY3JpcHRvcl9uYW1lJFwi
LCAkaGFzX3Byb3BlcnR5X2NoZWNrJCwgJHByb3BlcnR5X25hbWUkLCB3cml0ZXIpO1xuIik7Ci19
Ci0KLXZvaWQgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlQ2xvbmluZ0NvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
JG5hbWUkXyA9IG90aGVyLiRuYW1lJF87XG4iKTsKLX0KLQotdm9pZCBQcmltaXRpdmVGaWVsZEdl
bmVyYXRvcjo6R2VuZXJhdGVDb2RlY0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJp
bnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAicGI6OkZpZWxkQ29kZWMuRm9yJGNh
cGl0YWxpemVkX3R5cGVfbmFtZSQoJHRhZyQpIik7Ci19Ci0KLVByaW1pdGl2ZU9uZW9mRmllbGRH
ZW5lcmF0b3I6OlByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3IoCi0gICAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQgZmllbGRPcmRpbmFsLCBjb25zdCBPcHRpb25zICpv
cHRpb25zKQotICAgIDogUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoZGVzY3JpcHRvciwgZmllbGRP
cmRpbmFsLCBvcHRpb25zKSB7Ci0gIFNldENvbW1vbk9uZW9mRmllbGRWYXJpYWJsZXMoJnZhcmlh
Ymxlc18pOwotfQotCi1QcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yOjp+UHJpbWl0aXZlT25l
b2ZGaWVsZEdlbmVyYXRvcigpIHsKLX0KLQotdm9pZCBQcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJh
dG9yOjpHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgV3JpdGVQcm9w
ZXJ0eURvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBBZGREZXByZWNhdGVkRmxh
ZyhwcmludGVyKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiJGFj
Y2Vzc19sZXZlbCQgJHR5cGVfbmFtZSQgJHByb3BlcnR5X25hbWUkIHtcbiIKLSAgICAiICBnZXQg
eyByZXR1cm4gJGhhc19wcm9wZXJ0eV9jaGVjayQgPyAoJHR5cGVfbmFtZSQpICRvbmVvZl9uYW1l
JF8gOiAkZGVmYXVsdF92YWx1ZSQ7IH1cbiIKLSAgICAiICBzZXQge1xuIik7Ci0gICAgaWYgKGlz
X3ZhbHVlX3R5cGUpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICB2YXJpYWJsZXNf
LAotICAgICAgICAiICAgICRvbmVvZl9uYW1lJF8gPSB2YWx1ZTtcbiIpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgIiAg
ICAkb25lb2ZfbmFtZSRfID0gcGI6OlByb3RvUHJlY29uZGl0aW9ucy5DaGVja05vdE51bGwodmFs
dWUsIFwidmFsdWVcIik7XG4iKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICB2
YXJpYWJsZXNfLAotICAgICAgIiAgICAkb25lb2ZfbmFtZSRDYXNlXyA9ICRvbmVvZl9wcm9wZXJ0
eV9uYW1lJE9uZW9mQ2FzZS4kcHJvcGVydHlfbmFtZSQ7XG4iCi0gICAgICAiICB9XG4iCi0gICAg
ICAifVxuIik7Ci19Ci0KLXZvaWQgUHJpbWl0aXZlT25lb2ZGaWVsZEdlbmVyYXRvcjo6V3JpdGVU
b1N0cmluZyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICJQcmludEZpZWxkKFwiJGRlc2NyaXB0b3JfbmFtZSRcIiwgJGhhc19wcm9wZXJ0
eV9jaGVjayQsICRvbmVvZl9uYW1lJF8sIHdyaXRlcik7XG4iKTsKLX0KLQotdm9pZCBQcmltaXRp
dmVPbmVvZkZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICB2YXJpYWJsZXNfLAotICAgICAg
IiRwcm9wZXJ0eV9uYW1lJCA9IGlucHV0LlJlYWQkY2FwaXRhbGl6ZWRfdHlwZV9uYW1lJCgpO1xu
Iik7Ci19Ci0KLXZvaWQgUHJpbWl0aXZlT25lb2ZGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVDbG9u
aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICIkcHJvcGVydHlfbmFtZSQgPSBvdGhlci4kcHJvcGVydHlfbmFtZSQ7XG4iKTsK
LX0KLQotfSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3ByaW1pdGl2ZV9m
aWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcHJpbWl0
aXZlX2ZpZWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNDY2ZmM0N2NjMjJh
YTE2YWRiNDM2YWI3NTliNjIwZjdmM2FiNDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hh
cnBfcHJpbWl0aXZlX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZf
Q09NUElMRVJfQ1NIQVJQX1BSSU1JVElWRV9GSUVMRF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RP
QlVGX0NPTVBJTEVSX0NTSEFSUF9QUklNSVRJVkVfRklFTERfSF9fCi0KLSNpbmNsdWRlIDxzdHJp
bmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29kZV9nZW5lcmF0b3Iu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9maWVs
ZF9iYXNlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5h
bWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3NoYXJwIHsKLQotc3RydWN0IE9wdGlvbnM7
Ci0KLWNsYXNzIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yIDogcHVibGljIEZpZWxkR2VuZXJhdG9y
QmFzZSB7Ci0gcHVibGljOgotICBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVs
ZE9yZGluYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMgKm9wdGlv
bnMpOwotICB+UHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoKTsKLQotICB2aXJ0dWFsIHZvaWQgR2Vu
ZXJhdGVDb2RlY0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2Vu
ZXJhdGVDbG9uaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBH
ZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2Vu
ZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBH
ZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lk
IEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0
dWFsIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
OwotCi0gIHZpcnR1YWwgdm9pZCBXcml0ZUhhc2goaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2
aXJ0dWFsIHZvaWQgV3JpdGVFcXVhbHMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFs
IHZvaWQgV3JpdGVUb1N0cmluZyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSBwcm90ZWN0ZWQ6
Ci0gIGJvb2wgaXNfdmFsdWVfdHlwZTsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19F
VklMX0NPTlNUUlVDVE9SUyhQcmltaXRpdmVGaWVsZEdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBQ
cmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yIDogcHVibGljIFByaW1pdGl2ZUZpZWxkR2VuZXJh
dG9yIHsKLSBwdWJsaWM6Ci0gIFByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3IoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBmaWVsZE9yZGluYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
T3B0aW9ucyAqb3B0aW9ucyk7Ci0gIH5QcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yKCk7Ci0K
LSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlQ2xvbmluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
OwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKTsK
LSAgdmlydHVhbCB2b2lkIFdyaXRlVG9TdHJpbmcoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2
aXJ0dWFsIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0K
LSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUHJpbWl0aXZl
T25lb2ZGaWVsZEdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgY3NoYXJwCi19ICAv
LyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFt
ZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hB
UlBfUFJJTUlUSVZFX0ZJRUxEX0hfXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZWZsZWN0aW9uX2NsYXNzLmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVmbGVjdGlvbl9jbGFzcy5jYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczOTdjMGY2ZTVmYzNiNmYzNzc0ZjI4NjIzNTcxZmRk
YTBlYmI2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZWZsZWN0aW9uX2NsYXNz
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9wbHVnaW4uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3Jp
cHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdHJ1dGlsLmg+Ci0KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
c2hhcnAvY3NoYXJwX2VudW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3NoYXJwL2NzaGFycF9oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NzaGFycC9jc2hhcnBfbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9jc2hhcnAvY3NoYXJwX25hbWVzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfb3B0aW9ucy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlZmxlY3Rpb25fY2xhc3MuaD4KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsK
LW5hbWVzcGFjZSBjc2hhcnAgewotCi1SZWZsZWN0aW9uQ2xhc3NHZW5lcmF0b3I6OlJlZmxlY3Rp
b25DbGFzc0dlbmVyYXRvcihjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMqIG9w
dGlvbnMpCi0gICAgOiBTb3VyY2VHZW5lcmF0b3JCYXNlKGZpbGUsIG9wdGlvbnMpLAotICAgICAg
ZmlsZV8oZmlsZSkgewotICBuYW1lc3BhY2VfID0gR2V0RmlsZU5hbWVzcGFjZShmaWxlKTsKLSAg
cmVmbGVjdGlvbkNsYXNzbmFtZV8gPSBHZXRSZWZsZWN0aW9uQ2xhc3NVbnF1YWxpZmllZE5hbWUo
ZmlsZSk7Ci19Ci0KLVJlZmxlY3Rpb25DbGFzc0dlbmVyYXRvcjo6flJlZmxlY3Rpb25DbGFzc0dl
bmVyYXRvcigpIHsKLX0KLQotdm9pZCBSZWZsZWN0aW9uQ2xhc3NHZW5lcmF0b3I6OkdlbmVyYXRl
KGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIFdyaXRlSW50cm9kdWN0aW9uKHByaW50ZXIpOwot
Ci0gIFdyaXRlRGVzY3JpcHRvcihwcmludGVyKTsKLSAgLy8gQ2xvc2UgdGhlIGNsYXNzIGRlY2xh
cmF0aW9uLgotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9XG4iKTsK
LQotICAvLyB3cml0ZSBjaGlsZHJlbjogRW51bXMKLSAgaWYgKGZpbGVfLT5lbnVtX3R5cGVfY291
bnQoKSA+IDApIHsKLSAgICBwcmludGVyLT5QcmludCgiI3JlZ2lvbiBFbnVtc1xuIik7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+ZW51bV90eXBlX2NvdW50KCk7IGkrKykgewotICAg
ICAgRW51bUdlbmVyYXRvciBlbnVtR2VuZXJhdG9yKGZpbGVfLT5lbnVtX3R5cGUoaSksIHRoaXMt
Pm9wdGlvbnMoKSk7Ci0gICAgICBlbnVtR2VuZXJhdG9yLkdlbmVyYXRlKHByaW50ZXIpOwotICAg
IH0KLSAgICBwcmludGVyLT5QcmludCgiI2VuZHJlZ2lvblxuIik7Ci0gICAgcHJpbnRlci0+UHJp
bnQoIlxuIik7Ci0gIH0KLQotICAvLyB3cml0ZSBjaGlsZHJlbjogTWVzc2FnZXMKLSAgaWYgKGZp
bGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKSA+IDApIHsKLSAgICBwcmludGVyLT5QcmludCgiI3Jl
Z2lvbiBNZXNzYWdlc1xuIik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+bWVzc2Fn
ZV90eXBlX2NvdW50KCk7IGkrKykgewotICAgICAgTWVzc2FnZUdlbmVyYXRvciBtZXNzYWdlR2Vu
ZXJhdG9yKGZpbGVfLT5tZXNzYWdlX3R5cGUoaSksIHRoaXMtPm9wdGlvbnMoKSk7Ci0gICAgICBt
ZXNzYWdlR2VuZXJhdG9yLkdlbmVyYXRlKHByaW50ZXIpOwotICAgIH0KLSAgICBwcmludGVyLT5Q
cmludCgiI2VuZHJlZ2lvblxuIik7Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gIH0KLQot
ICAvLyBUT0RPKGp0YXR0ZXJtdXNjaCk6IGFkZCBpbnNlcnRpb24gcG9pbnQgZm9yIHNlcnZpY2Vz
LgotCi0gIGlmICghbmFtZXNwYWNlXy5lbXB0eSgpKSB7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgp
OwotICAgIHByaW50ZXItPlByaW50KCJ9XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCgiXG4i
KTsKLSAgcHJpbnRlci0+UHJpbnQoIiNlbmRyZWdpb24gRGVzaWduZXIgZ2VuZXJhdGVkIGNvZGVc
biIpOwotfQotCi12b2lkIFJlZmxlY3Rpb25DbGFzc0dlbmVyYXRvcjo6V3JpdGVJbnRyb2R1Y3Rp
b24oaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIi8vIEdl
bmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhXG4i
Ci0gICAgIi8vIHNvdXJjZTogJGZpbGVfbmFtZSRcbiIKLSAgICAiI3ByYWdtYSB3YXJuaW5nIGRp
c2FibGUgMTU5MSwgMDYxMiwgMzAyMVxuIgotICAgICIjcmVnaW9uIERlc2lnbmVyIGdlbmVyYXRl
ZCBjb2RlXG4iCi0gICAgIlxuIgotICAgICJ1c2luZyBwYiA9IGdsb2JhbDo6R29vZ2xlLlByb3Rv
YnVmO1xuIgotICAgICJ1c2luZyBwYmMgPSBnbG9iYWw6Okdvb2dsZS5Qcm90b2J1Zi5Db2xsZWN0
aW9ucztcbiIKLSAgICAidXNpbmcgcGJyID0gZ2xvYmFsOjpHb29nbGUuUHJvdG9idWYuUmVmbGVj
dGlvbjtcbiIKLSAgICAidXNpbmcgc2NnID0gZ2xvYmFsOjpTeXN0ZW0uQ29sbGVjdGlvbnMuR2Vu
ZXJpYztcbiIsCi0gICAgImZpbGVfbmFtZSIsIGZpbGVfLT5uYW1lKCkpOwotCi0gIGlmICghbmFt
ZXNwYWNlXy5lbXB0eSgpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoIm5hbWVzcGFjZSAkbmFtZXNw
YWNlJCB7XG4iLCAibmFtZXNwYWNlIiwgbmFtZXNwYWNlXyk7Ci0gICAgcHJpbnRlci0+SW5kZW50
KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgK
LSAgICAiLy8vIDxzdW1tYXJ5PkhvbGRlciBmb3IgcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiBnZW5l
cmF0ZWQgZnJvbSAkZmlsZV9uYW1lJDwvc3VtbWFyeT5cbiIKLSAgICAiW2dsb2JhbDo6U3lzdGVt
LkRpYWdub3N0aWNzLkRlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUoKV1cbiIsCi0gICAgImZp
bGVfbmFtZSIsIGZpbGVfLT5uYW1lKCkpOwotICBXcml0ZUdlbmVyYXRlZENvZGVBdHRyaWJ1dGVz
KHByaW50ZXIpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiJGFjY2Vzc19sZXZlbCQgc3RhdGlj
IHBhcnRpYWwgY2xhc3MgJHJlZmxlY3Rpb25fY2xhc3NfbmFtZSQge1xuIgotICAgICJcbiIsCi0g
ICAgImFjY2Vzc19sZXZlbCIsIGNsYXNzX2FjY2Vzc19sZXZlbCgpLAotICAgICJyZWZsZWN0aW9u
X2NsYXNzX25hbWUiLCByZWZsZWN0aW9uQ2xhc3NuYW1lXyk7Ci0gIHByaW50ZXItPkluZGVudCgp
OwotfQotCi12b2lkIFJlZmxlY3Rpb25DbGFzc0dlbmVyYXRvcjo6V3JpdGVEZXNjcmlwdG9yKGlv
OjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICIjcmVnaW9uIERl
c2NyaXB0b3JcbiIKLSAgICAiLy8vIDxzdW1tYXJ5PkZpbGUgZGVzY3JpcHRvciBmb3IgJGZpbGVf
bmFtZSQ8L3N1bW1hcnk+XG4iCi0gICAgInB1YmxpYyBzdGF0aWMgcGJyOjpGaWxlRGVzY3JpcHRv
ciBEZXNjcmlwdG9yIHtcbiIKLSAgICAiICBnZXQgeyByZXR1cm4gZGVzY3JpcHRvcjsgfVxuIgot
ICAgICJ9XG4iCi0gICAgInByaXZhdGUgc3RhdGljIHBicjo6RmlsZURlc2NyaXB0b3IgZGVzY3Jp
cHRvcjtcbiIKLSAgICAiXG4iCi0gICAgInN0YXRpYyAkcmVmbGVjdGlvbl9jbGFzc19uYW1lJCgp
IHtcbiIsCi0gICAgImZpbGVfbmFtZSIsIGZpbGVfLT5uYW1lKCksCi0gICAgInJlZmxlY3Rpb25f
Y2xhc3NfbmFtZSIsIHJlZmxlY3Rpb25DbGFzc25hbWVfKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7
Ci0gIHByaW50ZXItPlByaW50KAotICAgICJieXRlW10gZGVzY3JpcHRvckRhdGEgPSBnbG9iYWw6
OlN5c3RlbS5Db252ZXJ0LkZyb21CYXNlNjRTdHJpbmcoXG4iKTsKLSAgcHJpbnRlci0+SW5kZW50
KCk7Ci0gIHByaW50ZXItPkluZGVudCgpOwotICBwcmludGVyLT5QcmludCgic3RyaW5nLkNvbmNh
dChcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICAvLyBUT0RPKGpvbnNrZWV0KTogQ29u
c2lkZXIgYSBDIy1lc2NhcGluZyBmb3JtYXQgaGVyZSBpbnN0ZWFkIG9mIGp1c3QgQmFzZTY0Lgot
ICBzdGQ6OnN0cmluZyBiYXNlNjQgPSBGaWxlRGVzY3JpcHRvclRvQmFzZTY0KGZpbGVfKTsKLSAg
d2hpbGUgKGJhc2U2NC5zaXplKCkgPiA2MCkgewotICAgIHByaW50ZXItPlByaW50KCJcIiRiYXNl
NjQkXCIsXG4iLCAiYmFzZTY0IiwgYmFzZTY0LnN1YnN0cigwLCA2MCkpOwotICAgIGJhc2U2NCA9
IGJhc2U2NC5zdWJzdHIoNjApOwotICB9Ci0gIHByaW50ZXItPlByaW50KCJcIiRiYXNlNjQkXCIp
KTtcbiIsICJiYXNlNjQiLCBiYXNlNjQpOwotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50
ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotCi0gIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
IC8vIEludm9rZSBJbnRlcm5hbEJ1aWxkR2VuZXJhdGVkRmlsZUZyb20oKSB0byBidWlsZCB0aGUg
ZmlsZS4KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiZGVzY3JpcHRvciA9IHBicjo6RmlsZURl
c2NyaXB0b3IuRnJvbUdlbmVyYXRlZENvZGUoZGVzY3JpcHRvckRhdGEsXG4iKTsKLSAgcHJpbnRl
ci0+UHJpbnQoIiAgICBuZXcgcGJyOjpGaWxlRGVzY3JpcHRvcltdIHsgIik7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgZmlsZV8tPmRlcGVuZGVuY3lfY291bnQoKTsgaSsrKSB7Ci0gICAgLy8gZGVz
Y3JpcHRvci5wcm90byBpcyBzcGVjaWFsOiB3ZSBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gdGhlIGdl
bmVyYXRlZCBjb2RlLCBidXQgdGhlcmUncwotICAgIC8vIGEgc2VwYXJhdGVseS1leHBvc2VkIHBy
b3BlcnR5IHRvIGdldCBhdCB0aGUgZmlsZSBkZXNjcmlwdG9yLCBzcGVjaWZpY2FsbHkgdG8gYWxs
b3cgdGhpcwotICAgIC8vIGtpbmQgb2YgZGVwZW5kZW5jeS4KLSAgICBpZiAoSXNEZXNjcmlwdG9y
UHJvdG8oZmlsZV8tPmRlcGVuZGVuY3koaSkpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgicGJy
OjpGaWxlRGVzY3JpcHRvci5EZXNjcmlwdG9yUHJvdG9GaWxlRGVzY3JpcHRvciwgIik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiRmdWxsX3JlZmxlY3Rpb25f
Y2xhc3NfbmFtZSQuRGVzY3JpcHRvciwgIiwKLSAgICAgICJmdWxsX3JlZmxlY3Rpb25fY2xhc3Nf
bmFtZSIsCi0gICAgICBHZXRSZWZsZWN0aW9uQ2xhc3NOYW1lKGZpbGVfLT5kZXBlbmRlbmN5KGkp
KSk7Ci0gICAgfQotICB9Ci0gIHByaW50ZXItPlByaW50KCJ9LFxuIgotICAgICAgIiAgICBuZXcg
cGJyOjpHZW5lcmF0ZWRDbHJUeXBlSW5mbygiKTsKLSAgLy8gU3BlY2lmeSBhbGwgdGhlIGdlbmVy
YXRlZCBjb2RlIGluZm9ybWF0aW9uLCByZWN1cnNpdmVseS4KLSAgaWYgKGZpbGVfLT5lbnVtX3R5
cGVfY291bnQoKSA+IDApIHsKLSAgICAgIHByaW50ZXItPlByaW50KCJuZXdbXSB7Iik7Ci0gICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5lbnVtX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0g
ICAgICAgICAgcHJpbnRlci0+UHJpbnQoInR5cGVvZigkdHlwZV9uYW1lJCksICIsICJ0eXBlX25h
bWUiLCBHZXRDbGFzc05hbWUoZmlsZV8tPmVudW1fdHlwZShpKSkpOwotICAgICAgfQotICAgICAg
cHJpbnRlci0+UHJpbnQoIn0sICIpOwotICB9Ci0gIGVsc2UgewotICAgICAgcHJpbnRlci0+UHJp
bnQoIm51bGwsICIpOwotICB9Ci0gIGlmIChmaWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCkgPiAw
KSB7Ci0gICAgICBwcmludGVyLT5QcmludCgibmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUluZm9b
XSB7XG4iKTsKLSAgICAgIHByaW50ZXItPkluZGVudCgpOwotICAgICAgcHJpbnRlci0+SW5kZW50
KCk7Ci0gICAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAgICAgICBXcml0ZUdlbmVy
YXRlZENvZGVJbmZvKGZpbGVfLT5tZXNzYWdlX3R5cGUoaSksIHByaW50ZXIsIGkgPT0gZmlsZV8t
Pm1lc3NhZ2VfdHlwZV9jb3VudCgpIC0gMSk7Ci0gICAgICB9Ci0gICAgICBwcmludGVyLT5PdXRk
ZW50KCk7Ci0gICAgICBwcmludGVyLT5QcmludCgiXG59KSk7XG4iKTsKLSAgICAgIHByaW50ZXIt
Pk91dGRlbnQoKTsKLSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgfQotICBlbHNlIHsKLSAg
ICAgIHByaW50ZXItPlByaW50KCJudWxsKSk7XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRl
bnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotICBwcmludGVyLT5QcmludCgiI2VuZHJl
Z2lvblxuXG4iKTsKLX0KLQotLy8gV3JpdGUgb3V0IHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgYSBw
YXJ0aWN1bGFyIG1lc3NhZ2UuIFRoaXMgY29uc2lzdHMgb2YgdGhlIENMUiB0eXBlLCBwcm9wZXJ0
eSBuYW1lcwotLy8gY29ycmVzcG9uZGluZyB0byBmaWVsZHMsIG5hbWVzIGNvcnJlc3BvbmRpbmcg
dG8gb25lb2ZzLCBuZXN0ZWQgZW51bXMsIGFuZCBuZXN0ZWQgdHlwZXMuIEVhY2ggYXJyYXkgcGFy
dAotLy8gY2FuIGJlIHNwZWNpZmllZCBhcyBudWxsIGlmIGl0IHdvdWxkIGJlIGVtcHR5LCB0byBt
YWtlIHRoZSBnZW5lcmF0ZWQgY29kZSBzb21ld2hhdCBzaW1wbGVyIHRvIHJlYWQuCi0vLyBXZSB3
cml0ZSBhIGxpbmUgYnJlYWsgYXQgdGhlIGVuZCBvZiBlYWNoIGdlbmVyYXRlZCBjb2RlIGluZm8s
IHNvIHRoYXQgaW4gdGhlIGZpbmFsIGZpbGUgd2UnbGwgc2VlIGFsbAotLy8gdGhlIHR5cGVzLCBw
cmUtb3JkZXJlZCBkZXB0aCBmaXJzdCwgb25lIHBlciBsaW5lLiBUaGUgaW5kZW50YXRpb24gd2ls
bCBiZSBzbGlnaHRseSB1bnVzdWFsLAotLy8gaW4gdGhhdCBpdCB3aWxsIGxvb2sgbGlrZSBhIHNp
bmdsZSBhcnJheSB3aGVuIGl0J3MgYWN0dWFsbHkgY29uc3RydWN0aW5nIGEgdHJlZSwgYnV0IGl0
J2xsIGJlIGVhc3kgdG8KLS8vIHJlYWQgZXZlbiB3aXRoIG11bHRpcGxlIGxldmVscyBvZiBuZXN0
aW5nLgotLy8gVGhlICJsYXN0IiBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBtZXNz
YWdlIGRlc2NyaXB0b3IgaXMgdGhlIGxhc3Qgb25lIGJlaW5nIHByaW50ZWQgaW4gdGhpcyBpbW1l
ZGlhdGUKLS8vIGNvbnRleHQuIEl0IGdvdmVybnMgd2hldGhlciBvciBub3QgYSB0cmFpbGluZyBj
b21tYSBhbmQgbmV3bGluZSBpcyB3cml0dGVuIGFmdGVyIHRoZSBjb25zdHJ1Y3RvciwgZWZmZWN0
aXZlbHkKLS8vIGp1c3QgY29udHJvbGxpbmcgdGhlIGZvcm1hdHRpbmcgaW4gdGhlIGdlbmVyYXRl
ZCBjb2RlLgotdm9pZCBSZWZsZWN0aW9uQ2xhc3NHZW5lcmF0b3I6OldyaXRlR2VuZXJhdGVkQ29k
ZUluZm8oY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW86OlByaW50ZXIqIHByaW50ZXIs
IGJvb2wgbGFzdCkgewotICBpZiAoSXNNYXBFbnRyeU1lc3NhZ2UoZGVzY3JpcHRvcikpIHsKLSAg
ICBwcmludGVyLT5QcmludCgibnVsbCwgIik7Ci0gICAgcmV0dXJuOwotICB9Ci0gIC8vIEdlbmVy
YXRlZCBtZXNzYWdlIHR5cGUKLSAgcHJpbnRlci0+UHJpbnQoIm5ldyBwYnI6OkdlbmVyYXRlZENs
clR5cGVJbmZvKHR5cGVvZigkdHlwZV9uYW1lJCksICR0eXBlX25hbWUkLlBhcnNlciwgIiwgInR5
cGVfbmFtZSIsIEdldENsYXNzTmFtZShkZXNjcmlwdG9yKSk7Ci0gIAotICAvLyBGaWVsZHMKLSAg
aWYgKGRlc2NyaXB0b3ItPmZpZWxkX2NvdW50KCkgPiAwKSB7Ci0gICAgICBzdGQ6OnZlY3Rvcjxz
dGQ6OnN0cmluZz4gZmllbGRzOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9y
LT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICAgICAgICBmaWVsZHMucHVzaF9iYWNrKEdldFBy
b3BlcnR5TmFtZShkZXNjcmlwdG9yLT5maWVsZChpKSkpOwotICAgICAgfQotICAgICAgcHJpbnRl
ci0+UHJpbnQoIm5ld1tdeyBcIiRmaWVsZHMkXCIgfSwgIiwgImZpZWxkcyIsIEpvaW5TdHJpbmdz
KGZpZWxkcywgIlwiLCBcIiIpKTsKLSAgfQotICBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50
KCJudWxsLCAiKTsKLSAgfQotCi0gIC8vIE9uZW9mcwotICBpZiAoZGVzY3JpcHRvci0+b25lb2Zf
ZGVjbF9jb3VudCgpID4gMCkgewotICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9uZW9m
czsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+b25lb2ZfZGVjbF9jb3Vu
dCgpOyBpKyspIHsKLSAgICAgICAgICBvbmVvZnMucHVzaF9iYWNrKFVuZGVyc2NvcmVzVG9DYW1l
bENhc2UoZGVzY3JpcHRvci0+b25lb2ZfZGVjbChpKS0+bmFtZSgpLCB0cnVlKSk7Ci0gICAgICB9
Ci0gICAgICBwcmludGVyLT5QcmludCgibmV3W117IFwiJG9uZW9mcyRcIiB9LCAiLCAib25lb2Zz
IiwgSm9pblN0cmluZ3Mob25lb2ZzLCAiXCIsIFwiIikpOwotICB9Ci0gIGVsc2UgewotICAgICAg
cHJpbnRlci0+UHJpbnQoIm51bGwsICIpOwotICB9Ci0KLSAgLy8gTmVzdGVkIGVudW1zCi0gIGlm
IChkZXNjcmlwdG9yLT5lbnVtX3R5cGVfY291bnQoKSA+IDApIHsKLSAgICAgIHN0ZDo6dmVjdG9y
PHN0ZDo6c3RyaW5nPiBlbnVtczsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRv
ci0+ZW51bV90eXBlX2NvdW50KCk7IGkrKykgewotICAgICAgICAgIGVudW1zLnB1c2hfYmFjayhH
ZXRDbGFzc05hbWUoZGVzY3JpcHRvci0+ZW51bV90eXBlKGkpKSk7Ci0gICAgICB9Ci0gICAgICBw
cmludGVyLT5QcmludCgibmV3W117IHR5cGVvZigkZW51bXMkKSB9LCAiLCAiZW51bXMiLCBKb2lu
U3RyaW5ncyhlbnVtcywgIiksIHR5cGVvZigiKSk7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgICBwcmlu
dGVyLT5QcmludCgibnVsbCwgIik7Ci0gIH0KLQotICAvLyBOZXN0ZWQgdHlwZXMKLSAgaWYgKGRl
c2NyaXB0b3ItPm5lc3RlZF90eXBlX2NvdW50KCkgPiAwKSB7Ci0gICAgICAvLyBOZWVkIHRvIHNw
ZWNpZnkgYXJyYXkgdHlwZSBleHBsaWNpdGx5IGhlcmUsIGFzIGFsbCBlbGVtZW50cyBtYXkgYmUg
bnVsbC4gCi0gICAgICBwcmludGVyLT5QcmludCgibmV3IHBicjo6R2VuZXJhdGVkQ2xyVHlwZUlu
Zm9bXSB7ICIpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5uZXN0ZWRf
dHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAgICAgICBXcml0ZUdlbmVyYXRlZENvZGVJbmZvKGRl
c2NyaXB0b3ItPm5lc3RlZF90eXBlKGkpLCBwcmludGVyLCBpID09IGRlc2NyaXB0b3ItPm5lc3Rl
ZF90eXBlX2NvdW50KCkgLSAxKTsKLSAgICAgIH0KLSAgICAgIHByaW50ZXItPlByaW50KCJ9Iik7
Ci0gIH0KLSAgZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCgibnVsbCIpOwotICB9Ci0gIHBy
aW50ZXItPlByaW50KGxhc3QgPyAiKSIgOiAiKSxcbiIpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
Y3NoYXJwCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVmbGVjdGlvbl9jbGFzcy5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVmbGVjdGlvbl9jbGFzcy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGM2OWYzMWZiODhiOWM3YmZjMzg4NTc2MjdmNGZlYTRj
NjFkZDc2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlZmxlY3Rpb25fY2xhc3Mu
aAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBfUkVG
TEVDVElPTl9DTEFTU19IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFS
UF9SRUZMRUNUSU9OX0NMQVNTX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfc291cmNlX2dlbmVyYXRvcl9iYXNl
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFj
ZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3NoYXJwIHsKLQotY2xhc3MgUmVmbGVjdGlvbkNsYXNz
R2VuZXJhdG9yIDogcHVibGljIFNvdXJjZUdlbmVyYXRvckJhc2UgewotIHB1YmxpYzoKLSAgUmVm
bGVjdGlvbkNsYXNzR2VuZXJhdG9yKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLCBjb25zdCBP
cHRpb25zKiBvcHRpb25zKTsKLSAgflJlZmxlY3Rpb25DbGFzc0dlbmVyYXRvcigpOwotCi0gIHZv
aWQgR2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gcHJpdmF0ZToKLSAgY29uc3Qg
RmlsZURlc2NyaXB0b3IqIGZpbGVfOwotCi0gIHN0ZDo6c3RyaW5nIG5hbWVzcGFjZV87Ci0gIHN0
ZDo6c3RyaW5nIHJlZmxlY3Rpb25DbGFzc25hbWVfOwotCi0gIHZvaWQgV3JpdGVJbnRyb2R1Y3Rp
b24oaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIFdyaXRlRGVzY3JpcHRvcihpbzo6UHJp
bnRlciogcHJpbnRlcik7Ci0gIHZvaWQgV3JpdGVHZW5lcmF0ZWRDb2RlSW5mbyhjb25zdCBEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlBy
aW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxhc3Qp
OwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhSZWZsZWN0aW9uQ2xhc3NH
ZW5lcmF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNl
IGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29n
bGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX1JFRkxFQ1RJ
T05fQ0xBU1NfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3No
YXJwL2NzaGFycF9yZXBlYXRlZF9lbnVtX2ZpZWxkLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfZW51bV9maWVsZC5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWJlZmRjMTUxMTJhNTJhZTBhODE0MGMwYTFkODE0YjIyMTFiODM5
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRlZF9lbnVtX2ZpZWxkLmNj
CisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9wbHVnaW4uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRv
ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJl
X2Zvcm1hdC5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9j
c2hhcnBfZG9jX2NvbW1lbnQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
Y3NoYXJwL2NzaGFycF9oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfZW51bV9maWVsZC5oPgotCi1uYW1lc3BhY2UgZ29v
Z2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNw
YWNlIGNzaGFycCB7Ci0KLVJlcGVhdGVkRW51bUZpZWxkR2VuZXJhdG9yOjpSZXBlYXRlZEVudW1G
aWVsZEdlbmVyYXRvcigKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGlu
dCBmaWVsZE9yZGluYWwsIGNvbnN0IE9wdGlvbnMgKm9wdGlvbnMpCi0gICAgOiBGaWVsZEdlbmVy
YXRvckJhc2UoZGVzY3JpcHRvciwgZmllbGRPcmRpbmFsLCBvcHRpb25zKSB7Ci19Ci0KLVJlcGVh
dGVkRW51bUZpZWxkR2VuZXJhdG9yOjp+UmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3IoKSB7Ci0K
LX0KLQotdm9pZCBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVNZW1iZXJzKGlv
OjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18s
Ci0gICAgInByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVsZENvZGVjPCR0eXBlX25hbWUk
PiBfcmVwZWF0ZWRfJG5hbWUkX2NvZGVjXG4iCi0gICAgIiAgICA9IHBiOjpGaWVsZENvZGVjLkZv
ckVudW0oJHRhZyQsIHggPT4gKGludCkgeCwgeCA9PiAoJHR5cGVfbmFtZSQpIHgpO1xuIik7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgcmVhZG9ubHkgcGJjOjpS
ZXBlYXRlZEZpZWxkPCR0eXBlX25hbWUkPiAkbmFtZSRfID0gbmV3IHBiYzo6UmVwZWF0ZWRGaWVs
ZDwkdHlwZV9uYW1lJD4oKTtcbiIpOwotICBXcml0ZVByb3BlcnR5RG9jQ29tbWVudChwcmludGVy
LCBkZXNjcmlwdG9yXyk7Ci0gIEFkZERlcHJlY2F0ZWRGbGFnKHByaW50ZXIpOwotICBwcmludGVy
LT5QcmludCgKLSAgICB2YXJpYWJsZXNfLAotICAgICIkYWNjZXNzX2xldmVsJCBwYmM6OlJlcGVh
dGVkRmllbGQ8JHR5cGVfbmFtZSQ+ICRwcm9wZXJ0eV9uYW1lJCB7XG4iCi0gICAgIiAgZ2V0IHsg
cmV0dXJuICRuYW1lJF87IH1cbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRFbnVt
RmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiJG5hbWUkXy5BZGQo
b3RoZXIuJG5hbWUkXyk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRv
cjo6R2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVy
LT5QcmludCgKLSAgICB2YXJpYWJsZXNfLAotICAgICIkbmFtZSRfLkFkZEVudHJpZXNGcm9tKGlu
cHV0LCBfcmVwZWF0ZWRfJG5hbWUkX2NvZGVjKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkRW51
bUZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgIiRuYW1l
JF8uV3JpdGVUbyhvdXRwdXQsIF9yZXBlYXRlZF8kbmFtZSRfY29kZWMpO1xuIik7Ci19Ci0KLXZv
aWQgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSB7ICAKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFi
bGVzXywKLSAgICAic2l6ZSArPSAkbmFtZSRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkXyRuYW1l
JF9jb2RlYyk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcjo6V3Jp
dGVIYXNoKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZh
cmlhYmxlc18sCi0gICAgImhhc2ggXj0gJG5hbWUkXy5HZXRIYXNoQ29kZSgpO1xuIik7Ci19Ci0K
LXZvaWQgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OldyaXRlRXF1YWxzKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgImlm
KCEkbmFtZSRfLkVxdWFscyhvdGhlci4kbmFtZSRfKSkgcmV0dXJuIGZhbHNlO1xuIik7Ci19Ci0K
LXZvaWQgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OldyaXRlVG9TdHJpbmcoaW86OlByaW50
ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiUHJpbnRG
aWVsZChcIiRkZXNjcmlwdG9yX25hbWUkXCIsICRuYW1lJF8sIHdyaXRlcik7XG4iKTsKLX0KLQot
dm9pZCBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVDbG9uaW5nQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIk
bmFtZSRfID0gb3RoZXIuJG5hbWUkXy5DbG9uZSgpO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRF
bnVtRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlRnJlZXppbmdDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSB7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjc2hhcnAKLX0gIC8vIG5hbWVzcGFjZSBjb21w
aWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBl
YXRlZF9lbnVtX2ZpZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9yZXBlYXRlZF9lbnVtX2ZpZWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDgxOWI1ODMyNjJlYWYyNmUyMGIyMzA1NTVjZWYwMTI0N2Q1OTY5NjguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfZW51bV9maWVsZC5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5k
ZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFSUF9SRVBFQVRFRF9FTlVNX0ZJRUxEX0hf
XwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX1JFUEVBVEVEX0VOVU1f
RklFTERfSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3NoYXJwL2NzaGFycF9maWVsZF9iYXNlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ug
Y3NoYXJwIHsKLQotLy8gVE9ETyhqb25za2VldCk6IFJlZmFjdG9yIHJlcGVhdGVkIGZpZWxkIHN1
cHBvcnQ7IGFsbCB0aGUgaW1wbGVtZW50YXRpb25zIGFyZSAqcmVhbGx5KiBzaW1pbGFyLiBXZQot
Ly8gc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBSZXBlYXRlZEZpZWxkR2VuZXJhdG9yQmFzZS4KLWNs
YXNzIFJlcGVhdGVkRW51bUZpZWxkR2VuZXJhdG9yIDogcHVibGljIEZpZWxkR2VuZXJhdG9yQmFz
ZSB7Ci0gcHVibGljOgotICBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBm
aWVsZE9yZGluYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMg
Km9wdGlvbnMpOwotICB+UmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3IoKTsKLQotICB2aXJ0dWFs
IHZvaWQgR2VuZXJhdGVDbG9uaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1
YWwgdm9pZCBHZW5lcmF0ZUZyZWV6aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZp
cnR1YWwgdm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0
dWFsIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZp
cnR1YWwgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAg
dmlydHVhbCB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpOwotCi0gIHZpcnR1YWwgdm9pZCBXcml0ZUhhc2goaW86OlByaW50ZXIqIHBy
aW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgV3JpdGVFcXVhbHMoaW86OlByaW50ZXIqIHByaW50ZXIp
OwotICB2aXJ0dWFsIHZvaWQgV3JpdGVUb1N0cmluZyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0K
LSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUmVwZWF0ZWRF
bnVtRmllbGRHZW5lcmF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8g
bmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVz
cGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQ
X1JFUEVBVEVEX0VOVU1fRklFTERfSF9fCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX21lc3NhZ2VfZmllbGQuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRlZF9tZXNzYWdlX2Zp
ZWxkLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFlNjM4YTljNjU5MWQ2ZmRl
NzA0ZWMzOGQyOWRjZGQyN2QyNWZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3Jl
cGVhdGVkX21lc3NhZ2VfZmllbGQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxzc3RyZWFtPgot
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rl
c2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtLmg+Ci0KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9kb2NfY29tbWVudC5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2hlbHBl
cnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9y
ZXBlYXRlZF9tZXNzYWdlX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NzaGFycC9jc2hhcnBfbWVzc2FnZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3dyYXBwZXJfZmllbGQuaD4KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5h
bWVzcGFjZSBjc2hhcnAgewotCi1SZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6UmVwZWF0
ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3IoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNj
cmlwdG9yLCBpbnQgZmllbGRPcmRpbmFsLCBjb25zdCBPcHRpb25zICpvcHRpb25zKQotICAgIDog
RmllbGRHZW5lcmF0b3JCYXNlKGRlc2NyaXB0b3IsIGZpZWxkT3JkaW5hbCwgb3B0aW9ucykgewot
fQotCi1SZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6flJlcGVhdGVkTWVzc2FnZUZpZWxk
R2VuZXJhdG9yKCkgewotCi19Ci0KLXZvaWQgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6
OkdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5Qcmlu
dCgKLSAgICB2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6Rmll
bGRDb2RlYzwkdHlwZV9uYW1lJD4gX3JlcGVhdGVkXyRuYW1lJF9jb2RlY1xuIgotICAgICIgICAg
PSAiKTsKLSAgLy8gRG9uJ3Qgd2FudCB0byBkdXBsaWNhdGUgdGhlIGNvZGVjIGNvZGUgaGVyZS4u
LiBtYXliZSB3ZSBzaG91bGQgaGF2ZSBhCi0gIC8vICJjcmVhdGUgc2luZ2xlIGZpZWxkIGdlbmVy
YXRvciBmb3IgdGhpcyByZXBlYXRlZCBmaWVsZCIKLSAgLy8gZnVuY3Rpb24sIGJ1dCBpdCBkb2Vz
bid0IHNlZW0gd29ydGggaXQgZm9yIGp1c3QgdGhpcy4KLSAgaWYgKElzV3JhcHBlclR5cGUoZGVz
Y3JpcHRvcl8pKSB7Ci0gICAgc2NvcGVkX3B0cjxGaWVsZEdlbmVyYXRvckJhc2U+IHNpbmdsZV9n
ZW5lcmF0b3IoCi0gICAgICBuZXcgV3JhcHBlckZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0b3JfLCBm
aWVsZE9yZGluYWxfLCB0aGlzLT5vcHRpb25zKCkpKTsKLSAgICBzaW5nbGVfZ2VuZXJhdG9yLT5H
ZW5lcmF0ZUNvZGVjQ29kZShwcmludGVyKTsKLSAgfSBlbHNlIHsKLSAgICBzY29wZWRfcHRyPEZp
ZWxkR2VuZXJhdG9yQmFzZT4gc2luZ2xlX2dlbmVyYXRvcigKLSAgICAgIG5ldyBNZXNzYWdlRmll
bGRHZW5lcmF0b3IoZGVzY3JpcHRvcl8sIGZpZWxkT3JkaW5hbF8sIHRoaXMtPm9wdGlvbnMoKSkp
OwotICAgIHNpbmdsZV9nZW5lcmF0b3ItPkdlbmVyYXRlQ29kZWNDb2RlKHByaW50ZXIpOwotICB9
Ci0gIHByaW50ZXItPlByaW50KCI7XG4iKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFi
bGVzXywKLSAgICAicHJpdmF0ZSByZWFkb25seSBwYmM6OlJlcGVhdGVkRmllbGQ8JHR5cGVfbmFt
ZSQ+ICRuYW1lJF8gPSBuZXcgcGJjOjpSZXBlYXRlZEZpZWxkPCR0eXBlX25hbWUkPigpO1xuIik7
Ci0gIFdyaXRlUHJvcGVydHlEb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgQWRk
RGVwcmVjYXRlZEZsYWcocHJpbnRlcik7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxl
c18sCi0gICAgIiRhY2Nlc3NfbGV2ZWwkIHBiYzo6UmVwZWF0ZWRGaWVsZDwkdHlwZV9uYW1lJD4g
JHByb3BlcnR5X25hbWUkIHtcbiIKLSAgICAiICBnZXQgeyByZXR1cm4gJG5hbWUkXzsgfVxuIgot
ICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6R2Vu
ZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5Qcmlu
dCgKLSAgICB2YXJpYWJsZXNfLAotICAgICIkbmFtZSRfLkFkZChvdGhlci4kbmFtZSRfKTtcbiIp
OwotfQotCi12b2lkIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVBhcnNp
bmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZh
cmlhYmxlc18sCi0gICAgIiRuYW1lJF8uQWRkRW50cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF8k
bmFtZSRfY29kZWMpO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0
b3I6OkdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAg
cHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiJG5hbWUkXy5Xcml0ZVRvKG91
dHB1dCwgX3JlcGVhdGVkXyRuYW1lJF9jb2RlYyk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZE1l
c3NhZ2VGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAi
c2l6ZSArPSAkbmFtZSRfLkNhbGN1bGF0ZVNpemUoX3JlcGVhdGVkXyRuYW1lJF9jb2RlYyk7XG4i
KTsKLX0KLQotdm9pZCBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6V3JpdGVIYXNoKGlv
OjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18s
Ci0gICAgImhhc2ggXj0gJG5hbWUkXy5HZXRIYXNoQ29kZSgpO1xuIik7Ci19Ci0KLXZvaWQgUmVw
ZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6OldyaXRlRXF1YWxzKGlvOjpQcmludGVyKiBwcmlu
dGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgImlmKCEkbmFt
ZSRfLkVxdWFscyhvdGhlci4kbmFtZSRfKSkgcmV0dXJuIGZhbHNlO1xuIik7Ci19Ci0KLXZvaWQg
UmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6OldyaXRlVG9TdHJpbmcoaW86OlByaW50ZXIq
IHByaW50ZXIpIHsKLSAgdmFyaWFibGVzX1siZmllbGRfbmFtZSJdID0gR2V0RmllbGROYW1lKGRl
c2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiUHJp
bnRGaWVsZChcIiRmaWVsZF9uYW1lJFwiLCAkbmFtZSRfLCB3cml0ZXIpO1xuIik7Ci19Ci0KLXZv
aWQgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlQ2xvbmluZ0NvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
JG5hbWUkXyA9IG90aGVyLiRuYW1lJF8uQ2xvbmUoKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVk
TWVzc2FnZUZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZUZyZWV6aW5nQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcikgewotfQotCi19ICAvLyBuYW1lc3BhY2UgY3NoYXJwCi19ICAvLyBuYW1lc3BhY2Ug
Y29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2ds
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBf
cmVwZWF0ZWRfbWVzc2FnZV9maWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2Nz
aGFycC9jc2hhcnBfcmVwZWF0ZWRfbWVzc2FnZV9maWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2ZTMzNjQ4YjZjOTkwYzFmNTYxYzYwZDFjN2MzYTU3Y2QwMDBjOGZlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX21lc3NhZ2VfZmllbGQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBfUkVQRUFURURf
TUVTU0FHRV9GSUVMRF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFS
UF9SRVBFQVRFRF9NRVNTQUdFX0ZJRUxEX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZmllbGRfYmFzZS5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29t
cGlsZXIgewotbmFtZXNwYWNlIGNzaGFycCB7Ci0KLXN0cnVjdCBPcHRpb25zOwotCi1jbGFzcyBS
ZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBGaWVsZEdlbmVyYXRvckJhc2Ug
ewotIHB1YmxpYzoKLSAgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZmllbGRPcmRpbmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBP
cHRpb25zICpvcHRpb25zKTsKLSAgflJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yKCk7Ci0K
LSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlQ2xvbmluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
OwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVGcmVlemluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVy
KTsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICB2aXJ0dWFsIHZvaWQgV3JpdGVIYXNoKGlvOjpQ
cmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIFdyaXRlRXF1YWxzKGlvOjpQcmludGVy
KiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIFdyaXRlVG9TdHJpbmcoaW86OlByaW50ZXIqIHBy
aW50ZXIpOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JT
KFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBj
c2hhcnAKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVm
Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NP
TVBJTEVSX0NTSEFSUF9SRVBFQVRFRF9NRVNTQUdFX0ZJRUxEX0hfXwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRlZF9wcmltaXRp
dmVfZmllbGQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9y
ZXBlYXRlZF9wcmltaXRpdmVfZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJlZTNmMzYzMGYyY2NmYTEyNTFjMGQ4NTBmOWE1NGFlMTQzZWY2NjEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfcHJpbWl0aXZlX2ZpZWxkLmNjCisrKyAvZGV2L251
bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9w
bHVnaW4uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19j
b3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgot
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZG9jX2Nv
bW1lbnQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFy
cF9oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9j
c2hhcnBfcmVwZWF0ZWRfcHJpbWl0aXZlX2ZpZWxkLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewot
bmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3No
YXJwIHsKLQotUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6UmVwZWF0ZWRQcmltaXRp
dmVGaWVsZEdlbmVyYXRvcigKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3Is
IGludCBmaWVsZE9yZGluYWwsIGNvbnN0IE9wdGlvbnMgKm9wdGlvbnMpCi0gICAgOiBGaWVsZEdl
bmVyYXRvckJhc2UoZGVzY3JpcHRvciwgZmllbGRPcmRpbmFsLCBvcHRpb25zKSB7Ci19Ci0KLVJl
cGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6On5SZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2Vu
ZXJhdG9yKCkgewotCi19Ci0KLXZvaWQgUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6
R2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50
KAotICAgIHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHBiOjpGaWVs
ZENvZGVjPCR0eXBlX25hbWUkPiBfcmVwZWF0ZWRfJG5hbWUkX2NvZGVjXG4iCi0gICAgIiAgICA9
IHBiOjpGaWVsZENvZGVjLkZvciRjYXBpdGFsaXplZF90eXBlX25hbWUkKCR0YWckKTtcbiIpOwot
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHJlYWRvbmx5IHBiYzo6
UmVwZWF0ZWRGaWVsZDwkdHlwZV9uYW1lJD4gJG5hbWUkXyA9IG5ldyBwYmM6OlJlcGVhdGVkRmll
bGQ8JHR5cGVfbmFtZSQ+KCk7XG4iKTsKLSAgV3JpdGVQcm9wZXJ0eURvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBBZGREZXByZWNhdGVkRmxhZyhwcmludGVyKTsKLSAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiJGFjY2Vzc19sZXZlbCQgcGJjOjpSZXBl
YXRlZEZpZWxkPCR0eXBlX25hbWUkPiAkcHJvcGVydHlfbmFtZSQge1xuIgotICAgICIgIGdldCB7
IHJldHVybiAkbmFtZSRfOyB9XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkUHJp
bWl0aXZlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiJG5hbWUk
Xy5BZGQob3RoZXIuJG5hbWUkXyk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZFByaW1pdGl2ZUZp
ZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7
Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgIiRuYW1lJF8uQWRkRW50
cmllc0Zyb20oaW5wdXQsIF9yZXBlYXRlZF8kbmFtZSRfY29kZWMpO1xuIik7Ci19Ci0KLXZvaWQg
UmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVTZXJpYWxpemF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICB2YXJpYWJs
ZXNfLAotICAgICIkbmFtZSRfLldyaXRlVG8ob3V0cHV0LCBfcmVwZWF0ZWRfJG5hbWUkX2NvZGVj
KTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OkdlbmVy
YXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXIt
PlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgInNpemUgKz0gJG5hbWUkXy5DYWxjdWxhdGVT
aXplKF9yZXBlYXRlZF8kbmFtZSRfY29kZWMpO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRQcmlt
aXRpdmVGaWVsZEdlbmVyYXRvcjo6V3JpdGVIYXNoKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0g
IHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgImhhc2ggXj0gJG5hbWUkXy5H
ZXRIYXNoQ29kZSgpO1xuIik7Ci19Ci12b2lkIFJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0
b3I6OldyaXRlRXF1YWxzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50
KAotICAgIHZhcmlhYmxlc18sCi0gICAgImlmKCEkbmFtZSRfLkVxdWFscyhvdGhlci4kbmFtZSRf
KSkgcmV0dXJuIGZhbHNlO1xuIik7Ci19Ci12b2lkIFJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5l
cmF0b3I6OldyaXRlVG9TdHJpbmcoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiUHJpbnRGaWVsZChcIiRkZXNjcmlwdG9yX25hbWUkXCIs
ICRuYW1lJF8sIHdyaXRlcik7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZFByaW1pdGl2ZUZpZWxk
R2VuZXJhdG9yOjpHZW5lcmF0ZUNsb25pbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRuYW1lJF8gPSBvdGhlci4kbmFtZSRf
LkNsb25lKCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9y
OjpHZW5lcmF0ZUZyZWV6aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotfQotCi19ICAv
LyBuYW1lc3BhY2UgY3NoYXJwCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfcHJpbWl0aXZlX2Zp
ZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRl
ZF9wcmltaXRpdmVfZmllbGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU5MzQ4
YTk1ZjUyZGE5YzZiMGNmYjFiMzRlZTU4ZDc3NWMxMjU5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3No
YXJwL2NzaGFycF9yZXBlYXRlZF9wcmltaXRpdmVfZmllbGQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDcxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVm
IEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBfUkVQRUFURURfUFJJTUlUSVZFX0ZJRUxE
X0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX1JFUEVBVEVEX1BS
SU1JVElWRV9GSUVMRF9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuaD4KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5h
bWVzcGFjZSBjc2hhcnAgewotCi1jbGFzcyBSZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9y
IDogcHVibGljIEZpZWxkR2VuZXJhdG9yQmFzZSB7Ci0gcHVibGljOgotICBSZXBlYXRlZFByaW1p
dGl2ZUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50
IGZpZWxkT3JkaW5hbCwgY29uc3QgT3B0aW9ucyAqb3B0aW9ucyk7Ci0gIH5SZXBlYXRlZFByaW1p
dGl2ZUZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlQ2xvbmluZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVGcmVlemlu
Z0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVNZW1i
ZXJzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlTWVyZ2lu
Z0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVQYXJz
aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNl
cmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdl
bmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICB2aXJ0
dWFsIHZvaWQgV3JpdGVIYXNoKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lk
IFdyaXRlRXF1YWxzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIFdyaXRl
VG9TdHJpbmcoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJ
U0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3Ip
OwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVy
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2Vu
ZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX1JFUEVBVEVEX1BSSU1JVElW
RV9GSUVMRF9IX18KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2Nz
aGFycC9jc2hhcnBfc291cmNlX2dlbmVyYXRvcl9iYXNlLmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfc291cmNlX2dlbmVyYXRvcl9iYXNlLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjQxMWU0OWM3MDQ3NWJkN2ZhZDE4NGExNjhkNDUzYjM5
ZTNjNGQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3NvdXJjZV9nZW5lcmF0b3Jf
YmFzZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9wbHVnaW4uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfc291cmNlX2dlbmVyYXRvcl9iYXNlLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfaGVscGVycy5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX25hbWVzLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfb3B0aW9u
cy5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3Bh
Y2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGNzaGFycCB7Ci0KLVNvdXJjZUdlbmVyYXRvckJhc2U6
OlNvdXJjZUdlbmVyYXRvckJhc2UoY29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMgKm9w
dGlvbnMpCi0gICAgOiBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSwgb3B0aW9uc18ob3B0aW9ucykg
ewotfQotCi1Tb3VyY2VHZW5lcmF0b3JCYXNlOjp+U291cmNlR2VuZXJhdG9yQmFzZSgpIHsKLX0K
LQotdm9pZCBTb3VyY2VHZW5lcmF0b3JCYXNlOjpXcml0ZUdlbmVyYXRlZENvZGVBdHRyaWJ1dGVz
KGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIFRoaXMgaG9vayBjYW4gYmUgdXNlZCB0byBy
ZWludHJvZHVjZSBnZW5lcmF0ZWQgY29kZSBhdHRyaWJ1dGVzIGluIHRoZSBmdXR1cmUuCi19Ci0K
LXN0ZDo6c3RyaW5nIFNvdXJjZUdlbmVyYXRvckJhc2U6OmNsYXNzX2FjY2Vzc19sZXZlbCgpIHsK
LSAgcmV0dXJuIChJc0Rlc2NyaXB0b3JQcm90byhkZXNjcmlwdG9yXykgfHwgdGhpcy0+b3B0aW9u
cygpLT5pbnRlcm5hbF9hY2Nlc3MpID8gImludGVybmFsIiA6ICJwdWJsaWMiOwotfQotCi1jb25z
dCBPcHRpb25zKiBTb3VyY2VHZW5lcmF0b3JCYXNlOjpvcHRpb25zKCkgewotICByZXR1cm4gdGhp
cy0+b3B0aW9uc187Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjc2hhcnAKLX0gIC8vIG5hbWVzcGFj
ZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFy
cF9zb3VyY2VfZ2VuZXJhdG9yX2Jhc2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9j
c2hhcnAvY3NoYXJwX3NvdXJjZV9nZW5lcmF0b3JfYmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyZTczNDU4MTIxMjhjOGZlMTAxMTY0MDNkNDhlZjEzYjM2ZjUyMGU0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3NvdXJjZV9nZW5lcmF0b3JfYmFzZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFSUF9TT1VSQ0VfR0VO
RVJBVE9SX0JBU0VfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9DU0hBUlBf
U09VUkNFX0dFTkVSQVRPUl9CQVNFX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+Ci0KLW5hbWVzcGFj
ZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1u
YW1lc3BhY2UgY3NoYXJwIHsKLQotc3RydWN0IE9wdGlvbnM7Ci0KLWNsYXNzIFNvdXJjZUdlbmVy
YXRvckJhc2UgewotIHByb3RlY3RlZDoKLSAgU291cmNlR2VuZXJhdG9yQmFzZShjb25zdCBGaWxl
RGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3QgT3B0aW9ucyogb3B0aW9ucyk7Ci0gIHZpcnR1
YWwgflNvdXJjZUdlbmVyYXRvckJhc2UoKTsKLQotICBzdGQ6OnN0cmluZyBjbGFzc19hY2Nlc3Nf
bGV2ZWwoKTsKLSAgY29uc3QgT3B0aW9ucyogb3B0aW9ucygpOwotCi0gIHZvaWQgV3JpdGVHZW5l
cmF0ZWRDb2RlQXR0cmlidXRlcyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSBwcml2YXRlOgot
ICBjb25zdCBGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIGNvbnN0IE9wdGlvbnMgKm9w
dGlvbnNfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTb3VyY2VHZW5l
cmF0b3JCYXNlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjc2hhcnAKLX0gIC8vIG5hbWVzcGFj
ZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFSUF9TT1VSQ0Vf
R0VORVJBVE9SX0JBU0VfSF9fCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jc2hhcnAvY3NoYXJwX3dyYXBwZXJfZmllbGQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3NoYXJwL2NzaGFycF93cmFwcGVyX2ZpZWxkLmNjCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1Y2I4NmI2YjI2MjRmMjEwNDZmMzcwMmVmZTZkYzA0MDE1NDUxN2E0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3dyYXBwZXJfZmllbGQuY2MKKysrIC9kZXYv
bnVsbApAQCAtMSwyMTEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NvZGVfZ2VuZXJhdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L3BsdWdpbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJv
X2NvcHlfc3RyZWFtLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3No
YXJwL2NzaGFycF9kb2NfY29tbWVudC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY3NoYXJwL2NzaGFycF9vcHRpb25zLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfd3JhcHBlcl9maWVsZC5oPgotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFt
ZXNwYWNlIGNzaGFycCB7Ci0KLVdyYXBwZXJGaWVsZEdlbmVyYXRvcjo6V3JhcHBlckZpZWxkR2Vu
ZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZE9yZGluYWwsIGNvbnN0IE9wdGlvbnMg
Km9wdGlvbnMpCi0gICAgOiBGaWVsZEdlbmVyYXRvckJhc2UoZGVzY3JpcHRvciwgZmllbGRPcmRp
bmFsLCBvcHRpb25zKSB7Ci0gIHZhcmlhYmxlc19bImhhc19wcm9wZXJ0eV9jaGVjayJdID0gbmFt
ZSgpICsgIl8gIT0gbnVsbCI7Ci0gIHZhcmlhYmxlc19bImhhc19ub3RfcHJvcGVydHlfY2hlY2si
XSA9IG5hbWUoKSArICJfID09IG51bGwiOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHdyYXBw
ZWRfZmllbGQgPSBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+ZmllbGQoMCk7Ci0gIGlzX3Zh
bHVlX3R5cGUgPSB3cmFwcGVkX2ZpZWxkLT50eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpUWVBF
X1NUUklORyAmJgotICAgICAgd3JhcHBlZF9maWVsZC0+dHlwZSgpICE9IEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9CWVRFUzsKLSAgaWYgKGlzX3ZhbHVlX3R5cGUpIHsKLSAgICB2YXJpYWJsZXNfWyJu
b25udWxsYWJsZV90eXBlX25hbWUiXSA9IHR5cGVfbmFtZSh3cmFwcGVkX2ZpZWxkKTsKLSAgfQot
fQotCi1XcmFwcGVyRmllbGRHZW5lcmF0b3I6On5XcmFwcGVyRmllbGRHZW5lcmF0b3IoKSB7Ci19
Ci0KLXZvaWQgV3JhcHBlckZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50
ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0g
ICAgICAgICJwcml2YXRlIHN0YXRpYyByZWFkb25seSBwYjo6RmllbGRDb2RlYzwkdHlwZV9uYW1l
JD4gX3NpbmdsZV8kbmFtZSRfY29kZWMgPSAiKTsKLSAgR2VuZXJhdGVDb2RlY0NvZGUocHJpbnRl
cik7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgIjtcbiIKLSAgICAi
cHJpdmF0ZSAkdHlwZV9uYW1lJCAkbmFtZSRfO1xuIik7Ci0gIFdyaXRlUHJvcGVydHlEb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgQWRkRGVwcmVjYXRlZEZsYWcocHJpbnRlcik7
Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgIiRhY2Nlc3NfbGV2ZWwk
ICR0eXBlX25hbWUkICRwcm9wZXJ0eV9uYW1lJCB7XG4iCi0gICAgIiAgZ2V0IHsgcmV0dXJuICRu
YW1lJF87IH1cbiIKLSAgICAiICBzZXQge1xuIgotICAgICIgICAgJG5hbWUkXyA9IHZhbHVlO1xu
IgotICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgV3JhcHBlckZpZWxkR2VuZXJh
dG9yOjpHZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50
ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgImlmIChvdGhlci4kaGFzX3Byb3BlcnR5
X2NoZWNrJCkge1xuIgotICAgICIgIGlmICgkaGFzX25vdF9wcm9wZXJ0eV9jaGVjayQgfHwgb3Ro
ZXIuJHByb3BlcnR5X25hbWUkICE9ICRkZWZhdWx0X3ZhbHVlJCkge1xuIgotICAgICIgICAgJHBy
b3BlcnR5X25hbWUkID0gb3RoZXIuJHByb3BlcnR5X25hbWUkO1xuIgotICAgICIgIH1cbiIKLSAg
ICAifVxuIik7Ci19Ci0KLXZvaWQgV3JhcHBlckZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVBhcnNp
bmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZh
cmlhYmxlc18sCi0gICAgIiR0eXBlX25hbWUkIHZhbHVlID0gX3NpbmdsZV8kbmFtZSRfY29kZWMu
UmVhZChpbnB1dCk7XG4iCi0gICAgImlmICgkaGFzX25vdF9wcm9wZXJ0eV9jaGVjayQgfHwgdmFs
dWUgIT0gJGRlZmF1bHRfdmFsdWUkKSB7XG4iCi0gICAgIiAgJHByb3BlcnR5X25hbWUkID0gdmFs
dWU7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFdyYXBwZXJGaWVsZEdlbmVyYXRvcjo6R2Vu
ZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVy
LT5QcmludCgKLSAgICB2YXJpYWJsZXNfLAotICAgICJpZiAoJGhhc19wcm9wZXJ0eV9jaGVjayQp
IHtcbiIKLSAgICAiICBfc2luZ2xlXyRuYW1lJF9jb2RlYy5Xcml0ZVRhZ0FuZFZhbHVlKG91dHB1
dCwgJHByb3BlcnR5X25hbWUkKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgV3JhcHBlckZp
ZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICB2YXJpYWJsZXNfLAotICAgICJpZiAoJGhh
c19wcm9wZXJ0eV9jaGVjayQpIHtcbiIKLSAgICAiICBzaXplICs9IF9zaW5nbGVfJG5hbWUkX2Nv
ZGVjLkNhbGN1bGF0ZVNpemVXaXRoVGFnKCRwcm9wZXJ0eV9uYW1lJCk7XG4iCi0gICAgIn1cbiIp
OwotfQotCi12b2lkIFdyYXBwZXJGaWVsZEdlbmVyYXRvcjo6V3JpdGVIYXNoKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgImlm
ICgkaGFzX3Byb3BlcnR5X2NoZWNrJCkgaGFzaCBePSAkcHJvcGVydHlfbmFtZSQuR2V0SGFzaENv
ZGUoKTtcbiIpOwotfQotCi12b2lkIFdyYXBwZXJGaWVsZEdlbmVyYXRvcjo6V3JpdGVFcXVhbHMo
aW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVz
XywKLSAgICAiaWYgKCRwcm9wZXJ0eV9uYW1lJCAhPSBvdGhlci4kcHJvcGVydHlfbmFtZSQpIHJl
dHVybiBmYWxzZTtcbiIpOwotfQotCi12b2lkIFdyYXBwZXJGaWVsZEdlbmVyYXRvcjo6V3JpdGVU
b1N0cmluZyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBUT0RPOiBJbXBsZW1lbnQgaWYg
d2UgZXZlciBhY3R1YWxseSBuZWVkIGl0Li4uCi19Ci0KLXZvaWQgV3JhcHBlckZpZWxkR2VuZXJh
dG9yOjpHZW5lcmF0ZUNsb25pbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRwcm9wZXJ0eV9uYW1lJCA9IG90aGVyLiRwcm9w
ZXJ0eV9uYW1lJDtcbiIpOwotfQotCi12b2lkIFdyYXBwZXJGaWVsZEdlbmVyYXRvcjo6R2VuZXJh
dGVDb2RlY0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaWYgKGlzX3ZhbHVlX3R5cGUp
IHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgIHZhcmlhYmxlc18sCi0gICAgICAicGI6OkZp
ZWxkQ29kZWMuRm9yU3RydWN0V3JhcHBlcjwkbm9ubnVsbGFibGVfdHlwZV9uYW1lJD4oJHRhZyQp
Iik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICB2YXJpYWJsZXNfLAot
ICAgICAgInBiOjpGaWVsZENvZGVjLkZvckNsYXNzV3JhcHBlcjwkdHlwZV9uYW1lJD4oJHRhZyQp
Iik7Ci0gIH0KLX0KLQotV3JhcHBlck9uZW9mRmllbGRHZW5lcmF0b3I6OldyYXBwZXJPbmVvZkZp
ZWxkR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50
IGZpZWxkT3JkaW5hbCwgY29uc3QgT3B0aW9ucyAqb3B0aW9ucykKLSAgICA6IFdyYXBwZXJGaWVs
ZEdlbmVyYXRvcihkZXNjcmlwdG9yLCBmaWVsZE9yZGluYWwsIG9wdGlvbnMpIHsKLSAgICBTZXRD
b21tb25PbmVvZkZpZWxkVmFyaWFibGVzKCZ2YXJpYWJsZXNfKTsKLX0KLQotV3JhcHBlck9uZW9m
RmllbGRHZW5lcmF0b3I6On5XcmFwcGVyT25lb2ZGaWVsZEdlbmVyYXRvcigpIHsKLX0KLQotdm9p
ZCBXcmFwcGVyT25lb2ZGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIC8vIE5vdGU6IGRlbGliZXJhdGVseSBfb25lb2ZfJG5hbWUkX2NvZGVj
LCBub3QgXyRvbmVvZl9uYW1lJF9jb2RlYy4uLiB3ZSBoYXZlIG9uZSBjb2RlYyBwZXIgZmllbGQu
Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAicHJpdmF0
ZSBzdGF0aWMgcmVhZG9ubHkgcGI6OkZpZWxkQ29kZWM8JHR5cGVfbmFtZSQ+IF9vbmVvZl8kbmFt
ZSRfY29kZWMgPSAiKTsKLSAgR2VuZXJhdGVDb2RlY0NvZGUocHJpbnRlcik7Ci0gIHByaW50ZXIt
PlByaW50KCI7XG4iKTsKLSAgV3JpdGVQcm9wZXJ0eURvY0NvbW1lbnQocHJpbnRlciwgZGVzY3Jp
cHRvcl8pOwotICBBZGREZXByZWNhdGVkRmxhZyhwcmludGVyKTsKLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgdmFyaWFibGVzXywKLSAgICAiJGFjY2Vzc19sZXZlbCQgJHR5cGVfbmFtZSQgJHByb3Bl
cnR5X25hbWUkIHtcbiIKLSAgICAiICBnZXQgeyByZXR1cm4gJGhhc19wcm9wZXJ0eV9jaGVjayQg
PyAoJHR5cGVfbmFtZSQpICRvbmVvZl9uYW1lJF8gOiAoJHR5cGVfbmFtZSQpIG51bGw7IH1cbiIK
LSAgICAiICBzZXQge1xuIgotICAgICIgICAgJG9uZW9mX25hbWUkXyA9IHZhbHVlO1xuIgotICAg
ICIgICAgJG9uZW9mX25hbWUkQ2FzZV8gPSB2YWx1ZSA9PSBudWxsID8gJG9uZW9mX3Byb3BlcnR5
X25hbWUkT25lb2ZDYXNlLk5vbmUgOiAkb25lb2ZfcHJvcGVydHlfbmFtZSRPbmVvZkNhc2UuJHBy
b3BlcnR5X25hbWUkO1xuIgotICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgV3Jh
cHBlck9uZW9mRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgdmFyaWFibGVzXywKLSAgICAiJHBy
b3BlcnR5X25hbWUkID0gX29uZW9mXyRuYW1lJF9jb2RlYy5SZWFkKGlucHV0KTtcbiIpOwotfQot
Ci12b2lkIFdyYXBwZXJPbmVvZkZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVNlcmlhbGl6YXRpb25D
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIFRPRE86IEkgc3VzcGVjdCB0aGlzIGlz
IHdyb25nLi4uCi0gIHByaW50ZXItPlByaW50KAotICAgIHZhcmlhYmxlc18sCi0gICAgImlmICgk
aGFzX3Byb3BlcnR5X2NoZWNrJCkge1xuIgotICAgICIgIF9vbmVvZl8kbmFtZSRfY29kZWMuV3Jp
dGVUYWdBbmRWYWx1ZShvdXRwdXQsICgkdHlwZV9uYW1lJCkgJG9uZW9mX25hbWUkXyk7XG4iCi0g
ICAgIn1cbiIpOwotfQotCi12b2lkIFdyYXBwZXJPbmVvZkZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0
ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBUT0RPOiBJ
IHN1c3BlY3QgdGhpcyBpcyB3cm9uZy4uLgotICBwcmludGVyLT5QcmludCgKLSAgICB2YXJpYWJs
ZXNfLAotICAgICJpZiAoJGhhc19wcm9wZXJ0eV9jaGVjayQpIHtcbiIKLSAgICAiICBzaXplICs9
IF9vbmVvZl8kbmFtZSRfY29kZWMuQ2FsY3VsYXRlU2l6ZVdpdGhUYWcoJHByb3BlcnR5X25hbWUk
KTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjc2hhcnAKLX0gIC8vIG5h
bWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3Bh
Y2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJw
L2NzaGFycF93cmFwcGVyX2ZpZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3No
YXJwL2NzaGFycF93cmFwcGVyX2ZpZWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDI1MGRmZDI1NDg2ZDFjZTAwZTk2MWYxZWY0NDEzZTdkNjgxZGYyMWIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2NzaGFycC9jc2hhcnBfd3JhcHBlcl9maWVsZC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09P
R0xFX1BST1RPQlVGX0NPTVBJTEVSX0NTSEFSUF9XUkFQUEVSX0ZJRUxEX0hfXwotI2RlZmluZSBH
T09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX1dSQVBQRVJfRklFTERfSF9fCi0KLSNpbmNs
dWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29kZV9n
ZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2Nz
aGFycF9maWVsZF9iYXNlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgY3NoYXJwIHsKLQotc3RydWN0
IE9wdGlvbnM7Ci0KLWNsYXNzIFdyYXBwZXJGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBGaWVsZEdl
bmVyYXRvckJhc2UgewotIHB1YmxpYzoKLSAgV3JhcHBlckZpZWxkR2VuZXJhdG9yKGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBm
aWVsZE9yZGluYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zICpvcHRp
b25zKTsKLSAgfldyYXBwZXJGaWVsZEdlbmVyYXRvcigpOwotCi0gIHZpcnR1YWwgdm9pZCBHZW5l
cmF0ZUNvZGVjQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5l
cmF0ZUNsb25pbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdl
bmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5l
cmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdl
bmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQg
R2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1
YWwgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7
Ci0KLSAgdmlydHVhbCB2b2lkIFdyaXRlSGFzaChpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZp
cnR1YWwgdm9pZCBXcml0ZUVxdWFscyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwg
dm9pZCBXcml0ZVRvU3RyaW5nKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotIHByaXZhdGU6Ci0g
IGJvb2wgaXNfdmFsdWVfdHlwZTsgLy8gVHJ1ZSBmb3IgaW50MzIgZXRjOyBmYWxzZSBmb3IgYnl0
ZXMgYW5kIHN0cmluZwotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoV3JhcHBl
ckZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIFdyYXBwZXJPbmVvZkZpZWxkR2VuZXJhdG9y
IDogcHVibGljIFdyYXBwZXJGaWVsZEdlbmVyYXRvciB7Ci0gcHVibGljOgotICBXcmFwcGVyT25l
b2ZGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZE9yZGluYWwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMgKm9wdGlvbnMpOwotICB+V3JhcHBlck9uZW9m
RmllbGRHZW5lcmF0b3IoKTsKLQotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQ
cmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9u
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNlcmlh
bGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSBwcml2YXRlOgotICBHT09H
TEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoV3JhcHBlck9uZW9mRmllbGRHZW5lcmF0b3Ip
OwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNzaGFycAotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVy
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2Vu
ZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfQ1NIQVJQX1dSQVBQRVJfRklFTERfSF9f
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvaW1wb3J0ZXIuY2MgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvaW1wb3J0ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDBkOTA5M2MwNDdlYWUzYWYwYzA5OTExNGI4Y2NjOGE1YThhOWNiMTMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2ltcG9ydGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDk2ICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRv
bkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9j
b2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5k
IG90aGVycy4KLQotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aW8uaD4KLSNlbHNlCi0jaW5j
bHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRl
IDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURf
UFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvaW1wb3J0ZXIuaD4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wYXJzZXIuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvaW8vdG9rZW5pemVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci0KLSNpZmRlZiBfV0lOMzIKLSNpZm5kZWYgRl9PSwot
I2RlZmluZSBGX09LIDAwICAvLyBub3QgZGVmaW5lZCBieSBNU1ZDIGZvciB3aGF0ZXZlciByZWFz
b24KLSNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jZW5kaWYKLQotLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSB0ZXh0IGxvb2tzIGxpa2UgYSBXaW5kb3dzLXN0eWxlIGFic29sdXRlIHBhdGgsIHN0
YXJ0aW5nCi0vLyB3aXRoIGEgZHJpdmUgbGV0dGVyLiAgRXhhbXBsZTogICJDOlxmb28iLiAgVE9E
TyhrZW50b24pOiAgU2hhcmUgdGhpcyB3aXRoCi0vLyBjb3B5IGluIGNvbW1hbmRfbGluZV9pbnRl
cmZhY2UuY2M/Ci1zdGF0aWMgYm9vbCBJc1dpbmRvd3NBYnNvbHV0ZVBhdGgoY29uc3Qgc3RyaW5n
JiB0ZXh0KSB7Ci0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKLSAg
cmV0dXJuIHRleHQuc2l6ZSgpID49IDMgJiYgdGV4dFsxXSA9PSAnOicgJiYKLSAgICAgICAgIGlz
YWxwaGEodGV4dFswXSkgJiYKLSAgICAgICAgICh0ZXh0WzJdID09ICcvJyB8fCB0ZXh0WzJdID09
ICdcXCcpICYmCi0gICAgICAgICB0ZXh0LmZpbmRfbGFzdF9vZignOicpID09IDE7Ci0jZWxzZQot
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotTXVsdGlGaWxlRXJyb3JDb2xsZWN0b3I6On5N
dWx0aUZpbGVFcnJvckNvbGxlY3RvcigpIHt9Ci0KLS8vIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBw
dXJwb3NlczoKLS8vIC0gSXQgaW1wbGVtZW50cyB0aGUgRXJyb3JDb2xsZWN0b3IgaW50ZXJmYWNl
ICh1c2VkIGJ5IFRva2VuaXplciBhbmQgUGFyc2VyKQotLy8gICBpbiB0ZXJtcyBvZiBNdWx0aUZp
bGVFcnJvckNvbGxlY3RvciwgdXNpbmcgYSBwYXJ0aWN1bGFyIGZpbGVuYW1lLgotLy8gLSBJdCBs
ZXRzIHVzIGNoZWNrIGlmIGFueSBlcnJvcnMgaGF2ZSBvY2N1cnJlZC4KLWNsYXNzIFNvdXJjZVRy
ZWVEZXNjcmlwdG9yRGF0YWJhc2U6OlNpbmdsZUZpbGVFcnJvckNvbGxlY3RvcgotICAgIDogcHVi
bGljIGlvOjpFcnJvckNvbGxlY3RvciB7Ci0gcHVibGljOgotICBTaW5nbGVGaWxlRXJyb3JDb2xs
ZWN0b3IoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IE11bHRpRmlsZUVycm9yQ29sbGVjdG9yKiBtdWx0aV9maWxlX2Vycm9yX2NvbGxlY3RvcikKLSAg
ICA6IGZpbGVuYW1lXyhmaWxlbmFtZSksCi0gICAgICBtdWx0aV9maWxlX2Vycm9yX2NvbGxlY3Rv
cl8obXVsdGlfZmlsZV9lcnJvcl9jb2xsZWN0b3IpLAotICAgICAgaGFkX2Vycm9yc18oZmFsc2Up
IHt9Ci0gIH5TaW5nbGVGaWxlRXJyb3JDb2xsZWN0b3IoKSB7fQotCi0gIGJvb2wgaGFkX2Vycm9y
cygpIHsgcmV0dXJuIGhhZF9lcnJvcnNfOyB9Ci0KLSAgLy8gaW1wbGVtZW50cyBFcnJvckNvbGxl
Y3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBBZGRF
cnJvcihpbnQgbGluZSwgaW50IGNvbHVtbiwgY29uc3Qgc3RyaW5nJiBtZXNzYWdlKSB7Ci0gICAg
aWYgKG11bHRpX2ZpbGVfZXJyb3JfY29sbGVjdG9yXyAhPSBOVUxMKSB7Ci0gICAgICBtdWx0aV9m
aWxlX2Vycm9yX2NvbGxlY3Rvcl8tPkFkZEVycm9yKGZpbGVuYW1lXywgbGluZSwgY29sdW1uLCBt
ZXNzYWdlKTsKLSAgICB9Ci0gICAgaGFkX2Vycm9yc18gPSB0cnVlOwotICB9Ci0KLSBwcml2YXRl
OgotICBzdHJpbmcgZmlsZW5hbWVfOwotICBNdWx0aUZpbGVFcnJvckNvbGxlY3RvciogbXVsdGlf
ZmlsZV9lcnJvcl9jb2xsZWN0b3JfOwotICBib29sIGhhZF9lcnJvcnNfOwotfTsKLQotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi1Tb3VyY2VUcmVlRGVzY3JpcHRvckRhdGFiYXNlOjpTb3VyY2VUcmVlRGVzY3Jp
cHRvckRhdGFiYXNlKAotICAgIFNvdXJjZVRyZWUqIHNvdXJjZV90cmVlKQotICA6IHNvdXJjZV90
cmVlXyhzb3VyY2VfdHJlZSksCi0gICAgZXJyb3JfY29sbGVjdG9yXyhOVUxMKSwKLSAgICB1c2lu
Z192YWxpZGF0aW9uX2Vycm9yX2NvbGxlY3Rvcl8oZmFsc2UpLAotICAgIHZhbGlkYXRpb25fZXJy
b3JfY29sbGVjdG9yXyh0aGlzKSB7fQotCi1Tb3VyY2VUcmVlRGVzY3JpcHRvckRhdGFiYXNlOjp+
U291cmNlVHJlZURlc2NyaXB0b3JEYXRhYmFzZSgpIHt9Ci0KLWJvb2wgU291cmNlVHJlZURlc2Ny
aXB0b3JEYXRhYmFzZTo6RmluZEZpbGVCeU5hbWUoCi0gICAgY29uc3Qgc3RyaW5nJiBmaWxlbmFt
ZSwgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNj
b3BlZF9wdHI8aW86Olplcm9Db3B5SW5wdXRTdHJlYW0+IGlucHV0KHNvdXJjZV90cmVlXy0+T3Bl
bihmaWxlbmFtZSkpOwotICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgIGlmIChlcnJvcl9jb2xs
ZWN0b3JfICE9IE5VTEwpIHsKLSAgICAgIGVycm9yX2NvbGxlY3Rvcl8tPkFkZEVycm9yKGZpbGVu
YW1lLCAtMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV90cmVl
Xy0+R2V0TGFzdEVycm9yTWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgLy8gU2V0IHVwIHRoZSB0b2tlbml6ZXIgYW5kIHBhcnNlci4KLSAgU2luZ2xlRmlsZUVy
cm9yQ29sbGVjdG9yIGZpbGVfZXJyb3JfY29sbGVjdG9yKGZpbGVuYW1lLCBlcnJvcl9jb2xsZWN0
b3JfKTsKLSAgaW86OlRva2VuaXplciB0b2tlbml6ZXIoaW5wdXQuZ2V0KCksICZmaWxlX2Vycm9y
X2NvbGxlY3Rvcik7Ci0KLSAgUGFyc2VyIHBhcnNlcjsKLSAgaWYgKGVycm9yX2NvbGxlY3Rvcl8g
IT0gTlVMTCkgewotICAgIHBhcnNlci5SZWNvcmRFcnJvcnNUbygmZmlsZV9lcnJvcl9jb2xsZWN0
b3IpOwotICB9Ci0gIGlmICh1c2luZ192YWxpZGF0aW9uX2Vycm9yX2NvbGxlY3Rvcl8pIHsKLSAg
ICBwYXJzZXIuUmVjb3JkU291cmNlTG9jYXRpb25zVG8oJnNvdXJjZV9sb2NhdGlvbnNfKTsKLSAg
fQotCi0gIC8vIFBhcnNlIGl0LgotICBvdXRwdXQtPnNldF9uYW1lKGZpbGVuYW1lKTsKLSAgcmV0
dXJuIHBhcnNlci5QYXJzZSgmdG9rZW5pemVyLCBvdXRwdXQpICYmCi0gICAgICAgICAhZmlsZV9l
cnJvcl9jb2xsZWN0b3IuaGFkX2Vycm9ycygpOwotfQotCi1ib29sIFNvdXJjZVRyZWVEZXNjcmlw
dG9yRGF0YWJhc2U6OkZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbCgKLSAgICBjb25zdCBzdHJpbmcm
IHN5bWJvbF9uYW1lLCBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIFNvdXJjZVRyZWVEZXNjcmlwdG9yRGF0YWJhc2U6OkZpbmRGaWxlQ29u
dGFpbmluZ0V4dGVuc2lvbigKLSAgICBjb25zdCBzdHJpbmcmIGNvbnRhaW5pbmdfdHlwZSwgaW50
IGZpZWxkX251bWJlciwKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgcmV0
dXJuIGZhbHNlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNvdXJjZVRyZWVEZXNjcmlwdG9yRGF0
YWJhc2U6OlZhbGlkYXRpb25FcnJvckNvbGxlY3Rvcjo6Ci1WYWxpZGF0aW9uRXJyb3JDb2xsZWN0
b3IoU291cmNlVHJlZURlc2NyaXB0b3JEYXRhYmFzZSogb3duZXIpCi0gIDogb3duZXJfKG93bmVy
KSB7fQotCi1Tb3VyY2VUcmVlRGVzY3JpcHRvckRhdGFiYXNlOjpWYWxpZGF0aW9uRXJyb3JDb2xs
ZWN0b3I6OgotflZhbGlkYXRpb25FcnJvckNvbGxlY3RvcigpIHt9Ci0KLXZvaWQgU291cmNlVHJl
ZURlc2NyaXB0b3JEYXRhYmFzZTo6VmFsaWRhdGlvbkVycm9yQ29sbGVjdG9yOjpBZGRFcnJvcigK
LSAgICBjb25zdCBzdHJpbmcmIGZpbGVuYW1lLAotICAgIGNvbnN0IHN0cmluZyYgZWxlbWVudF9u
YW1lLAotICAgIGNvbnN0IE1lc3NhZ2UqIGRlc2NyaXB0b3IsCi0gICAgRXJyb3JMb2NhdGlvbiBs
b2NhdGlvbiwKLSAgICBjb25zdCBzdHJpbmcmIG1lc3NhZ2UpIHsKLSAgaWYgKG93bmVyXy0+ZXJy
b3JfY29sbGVjdG9yXyA9PSBOVUxMKSByZXR1cm47Ci0KLSAgaW50IGxpbmUsIGNvbHVtbjsKLSAg
b3duZXJfLT5zb3VyY2VfbG9jYXRpb25zXy5GaW5kKGRlc2NyaXB0b3IsIGxvY2F0aW9uLCAmbGlu
ZSwgJmNvbHVtbik7Ci0gIG93bmVyXy0+ZXJyb3JfY29sbGVjdG9yXy0+QWRkRXJyb3IoZmlsZW5h
bWUsIGxpbmUsIGNvbHVtbiwgbWVzc2FnZSk7Ci19Ci0KLXZvaWQgU291cmNlVHJlZURlc2NyaXB0
b3JEYXRhYmFzZTo6VmFsaWRhdGlvbkVycm9yQ29sbGVjdG9yOjpBZGRXYXJuaW5nKAotICAgIGNv
bnN0IHN0cmluZyYgZmlsZW5hbWUsCi0gICAgY29uc3Qgc3RyaW5nJiBlbGVtZW50X25hbWUsCi0g
ICAgY29uc3QgTWVzc2FnZSogZGVzY3JpcHRvciwKLSAgICBFcnJvckxvY2F0aW9uIGxvY2F0aW9u
LAotICAgIGNvbnN0IHN0cmluZyYgbWVzc2FnZSkgewotICBpZiAob3duZXJfLT5lcnJvcl9jb2xs
ZWN0b3JfID09IE5VTEwpIHJldHVybjsKLQotICBpbnQgbGluZSwgY29sdW1uOwotICBvd25lcl8t
PnNvdXJjZV9sb2NhdGlvbnNfLkZpbmQoZGVzY3JpcHRvciwgbG9jYXRpb24sICZsaW5lLCAmY29s
dW1uKTsKLSAgb3duZXJfLT5lcnJvcl9jb2xsZWN0b3JfLT5BZGRXYXJuaW5nKGZpbGVuYW1lLCBs
aW5lLCBjb2x1bW4sIG1lc3NhZ2UpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUltcG9ydGVyOjpJ
bXBvcnRlcihTb3VyY2VUcmVlKiBzb3VyY2VfdHJlZSwKLSAgICAgICAgICAgICAgICAgICBNdWx0
aUZpbGVFcnJvckNvbGxlY3RvciogZXJyb3JfY29sbGVjdG9yKQotICA6IGRhdGFiYXNlXyhzb3Vy
Y2VfdHJlZSksCi0gICAgcG9vbF8oJmRhdGFiYXNlXywgZGF0YWJhc2VfLkdldFZhbGlkYXRpb25F
cnJvckNvbGxlY3RvcigpKSB7Ci0gIHBvb2xfLkVuZm9yY2VXZWFrRGVwZW5kZW5jaWVzKHRydWUp
OwotICBkYXRhYmFzZV8uUmVjb3JkRXJyb3JzVG8oZXJyb3JfY29sbGVjdG9yKTsKLX0KLQotSW1w
b3J0ZXI6On5JbXBvcnRlcigpIHt9Ci0KLWNvbnN0IEZpbGVEZXNjcmlwdG9yKiBJbXBvcnRlcjo6
SW1wb3J0KGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsKLSAgcmV0dXJuIHBvb2xfLkZpbmRGaWxl
QnlOYW1lKGZpbGVuYW1lKTsKLX0KLQotdm9pZCBJbXBvcnRlcjo6QWRkVW51c2VkSW1wb3J0VHJh
Y2tGaWxlKGNvbnN0IHN0cmluZyYgZmlsZV9uYW1lKSB7Ci0gIHBvb2xfLkFkZFVudXNlZEltcG9y
dFRyYWNrRmlsZShmaWxlX25hbWUpOwotfQotCi12b2lkIEltcG9ydGVyOjpDbGVhclVudXNlZElt
cG9ydFRyYWNrRmlsZXMoKSB7Ci0gIHBvb2xfLkNsZWFyVW51c2VkSW1wb3J0VHJhY2tGaWxlcygp
OwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0KLVNvdXJjZVRyZWU6On5Tb3VyY2VUcmVlKCkge30KLQot
c3RyaW5nIFNvdXJjZVRyZWU6OkdldExhc3RFcnJvck1lc3NhZ2UoKSB7Ci0gIHJldHVybiAiRmls
ZSBub3QgZm91bmQuIjsKLX0KLQotRGlza1NvdXJjZVRyZWU6OkRpc2tTb3VyY2VUcmVlKCkge30K
LQotRGlza1NvdXJjZVRyZWU6On5EaXNrU291cmNlVHJlZSgpIHt9Ci0KLXN0YXRpYyBpbmxpbmUg
Y2hhciBMYXN0Q2hhcihjb25zdCBzdHJpbmcmIHN0cikgewotICByZXR1cm4gc3RyW3N0ci5zaXpl
KCkgLSAxXTsKLX0KLQotLy8gR2l2ZW4gYSBwYXRoLCByZXR1cm5zIGFuIGVxdWl2YWxlbnQgcGF0
aCB3aXRoIHRoZXNlIGNoYW5nZXM6Ci0vLyAtIE9uIFdpbmRvd3MsIGFueSBiYWNrc2xhc2hlcyBh
cmUgcmVwbGFjZWQgd2l0aCBmb3J3YXJkIHNsYXNoZXMuCi0vLyAtIEFueSBpbnN0YW5jZXMgb2Yg
dGhlIGRpcmVjdG9yeSAiLiIgYXJlIHJlbW92ZWQuCi0vLyAtIEFueSBjb25zZWN1dGl2ZSAnLydz
IGFyZSBjb2xsYXBzZWQgaW50byBhIHNpbmdsZSBzbGFzaC4KLS8vIE5vdGUgdGhhdCB0aGUgcmVz
dWx0aW5nIHN0cmluZyBtYXkgYmUgZW1wdHkuCi0vLwotLy8gVE9ETyhrZW50b24pOiAgSXQgd291
bGQgYmUgbmljZSB0byBoYW5kbGUgIi4uIiwgZS5nLiBzbyB0aGF0IHdlIGNhbiBmaWd1cmUKLS8v
ICAgb3V0IHRoYXQgImZvby9iYXIucHJvdG8iIGlzIGluc2lkZSAiYmF6Ly4uL2ZvbyIuICBIb3dl
dmVyLCBpZiBiYXogaXMgYQotLy8gICBzeW1saW5rIG9yIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhp
bmdzIGdldCBjb21wbGljYXRlZCwgYW5kIHdlIGNhbid0Ci0vLyAgIGFjdHVhbGx5IGRldGVybWlu
ZSB0aGlzIHdpdGhvdXQgaW52ZXN0aWdhdGluZyB0aGUgZmlsZXN5c3RlbSwgcHJvYmFibHkKLS8v
ICAgaW4gbm9uLXBvcnRhYmxlIHdheXMuICBTbywgd2UgcHVudC4KLS8vCi0vLyBUT0RPKGtlbnRv
bik6ICBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSByZWFscGF0aCgpIGhlcmUgZXhjZXB0IHRoYXQg
aXQKLS8vICAgcmVzb2x2ZXMgc3ltYm9saWMgbGlua3MuICBUaGlzIGNvdWxkIGNhdXNlIHByb2Js
ZW1zIGlmIHBlb3BsZSBwbGFjZQotLy8gICBzeW1ib2xpYyBsaW5rcyBpbiB0aGVpciBzb3VyY2Ug
dHJlZS4gIEZvciBleGFtcGxlLCBpZiB5b3UgZXhlY3V0ZWQ6Ci0vLyAgICAgcHJvdG9jIC0tcHJv
dG9fcGF0aD1mb28gZm9vL2Jhci9iYXoucHJvdG8KLS8vICAgdGhlbiBpZiBmb28vYmFyIGlzIGEg
c3ltYm9saWMgbGluaywgZm9vL2Jhci9iYXoucHJvdG8gd2lsbCBjYW5vbmljYWxpemUKLS8vICAg
dG8gYSBwYXRoIHdoaWNoIGRvZXMgbm90IGFwcGVhciB0byBiZSB1bmRlciBmb28sIGFuZCB0aHVz
IHRoZSBjb21waWxlcgotLy8gICB3aWxsIGNvbXBsYWluIHRoYXQgYmF6LnByb3RvIGlzIG5vdCBp
bnNpZGUgdGhlIC0tcHJvdG9fcGF0aC4KLXN0YXRpYyBzdHJpbmcgQ2Fub25pY2FsaXplUGF0aChz
dHJpbmcgcGF0aCkgewotI2lmZGVmIF9XSU4zMgotICAvLyBUaGUgV2luMzIgQVBJIGFjY2VwdHMg
Zm9yd2FyZCBzbGFzaGVzIGFzIGEgcGF0aCBkZWxpbWl0ZXIgZXZlbiB0aG91Z2gKLSAgLy8gYmFj
a3NsYXNoZXMgYXJlIHN0YW5kYXJkLiAgTGV0J3MgYXZvaWQgY29uZnVzaW9uIGFuZCB1c2Ugb25s
eSBmb3J3YXJkCi0gIC8vIHNsYXNoZXMuCi0gIGlmIChIYXNQcmVmaXhTdHJpbmcocGF0aCwgIlxc
XFwiKSkgewotICAgIC8vIEF2b2lkIGNvbnZlcnRpbmcgdHdvIGxlYWRpbmcgYmFja3NsYXNoZXMu
Ci0gICAgcGF0aCA9ICJcXFxcIiArIFN0cmluZ1JlcGxhY2UocGF0aC5zdWJzdHIoMiksICJcXCIs
ICIvIiwgdHJ1ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgcGF0aCA9IFN0cmluZ1JlcGxhY2UocGF0aCwg
IlxcIiwgIi8iLCB0cnVlKTsKLSAgfQotI2VuZGlmCi0KLSAgdmVjdG9yPHN0cmluZz4gY2Fub25p
Y2FsX3BhcnRzOwotICB2ZWN0b3I8c3RyaW5nPiBwYXJ0cyA9IFNwbGl0KAotICAgICAgcGF0aCwg
Ii8iLCB0cnVlKTsgIC8vIE5vdGU6ICBSZW1vdmVzIGVtcHR5IHBhcnRzLgotICBmb3IgKGludCBp
ID0gMDsgaSA8IHBhcnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgaWYgKHBhcnRzW2ldID09ICIuIikg
ewotICAgICAgLy8gSWdub3JlLgotICAgIH0gZWxzZSB7Ci0gICAgICBjYW5vbmljYWxfcGFydHMu
cHVzaF9iYWNrKHBhcnRzW2ldKTsKLSAgICB9Ci0gIH0KLSAgc3RyaW5nIHJlc3VsdCA9IEpvaW4o
Y2Fub25pY2FsX3BhcnRzLCAiLyIpOwotICBpZiAoIXBhdGguZW1wdHkoKSAmJiBwYXRoWzBdID09
ICcvJykgewotICAgIC8vIFJlc3RvcmUgbGVhZGluZyBzbGFzaC4KLSAgICByZXN1bHQgPSAnLycg
KyByZXN1bHQ7Ci0gIH0KLSAgaWYgKCFwYXRoLmVtcHR5KCkgJiYgTGFzdENoYXIocGF0aCkgPT0g
Jy8nICYmCi0gICAgICAhcmVzdWx0LmVtcHR5KCkgJiYgTGFzdENoYXIocmVzdWx0KSAhPSAnLycp
IHsKLSAgICAvLyBSZXN0b3JlIHRyYWlsaW5nIHNsYXNoLgotICAgIHJlc3VsdCArPSAnLyc7Ci0g
IH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBib29sIENvbnRhaW5zUGFy
ZW50UmVmZXJlbmNlKGNvbnN0IHN0cmluZyYgcGF0aCkgewotICByZXR1cm4gcGF0aCA9PSAiLi4i
IHx8Ci0gICAgICAgICBIYXNQcmVmaXhTdHJpbmcocGF0aCwgIi4uLyIpIHx8Ci0gICAgICAgICBI
YXNTdWZmaXhTdHJpbmcocGF0aCwgIi8uLiIpIHx8Ci0gICAgICAgICBwYXRoLmZpbmQoIi8uLi8i
KSAhPSBzdHJpbmc6Om5wb3M7Ci19Ci0KLS8vIE1hcHMgYSBmaWxlIGZyb20gYW4gb2xkIGxvY2F0
aW9uIHRvIGEgbmV3IG9uZS4gIFR5cGljYWxseSwgb2xkX3ByZWZpeCBpcwotLy8gYSB2aXJ0dWFs
IHBhdGggYW5kIG5ld19wcmVmaXggaXMgaXRzIGNvcnJlc3BvbmRpbmcgZGlzayBwYXRoLiAgUmV0
dXJucwotLy8gZmFsc2UgaWYgdGhlIGZpbGVuYW1lIGRpZCBub3Qgc3RhcnQgd2l0aCBvbGRfcHJl
Zml4LCBvdGhlcndpc2UgcmVwbGFjZXMKLS8vIG9sZF9wcmVmaXggd2l0aCBuZXdfcHJlZml4IGFu
ZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiAqcmVzdWx0LiAgRXhhbXBsZXM6Ci0vLyAgIHN0cmluZyBy
ZXN1bHQ7Ci0vLyAgIGFzc2VydChBcHBseU1hcHBpbmcoImZvby9iYXIiLCAiIiwgImJheiIsICZy
ZXN1bHQpKTsKLS8vICAgYXNzZXJ0KHJlc3VsdCA9PSAiYmF6L2Zvby9iYXIiKTsKLS8vCi0vLyAg
IGFzc2VydChBcHBseU1hcHBpbmcoImZvby9iYXIiLCAiZm9vIiwgImJheiIsICZyZXN1bHQpKTsK
LS8vICAgYXNzZXJ0KHJlc3VsdCA9PSAiYmF6L2JhciIpOwotLy8KLS8vICAgYXNzZXJ0KEFwcGx5
TWFwcGluZygiZm9vIiwgImZvbyIsICJiYXIiLCAmcmVzdWx0KSk7Ci0vLyAgIGFzc2VydChyZXN1
bHQgPT0gImJhciIpOwotLy8KLS8vICAgYXNzZXJ0KCFBcHBseU1hcHBpbmcoImZvby9iYXIiLCAi
YmF6IiwgInF1eCIsICZyZXN1bHQpKTsKLS8vICAgYXNzZXJ0KCFBcHBseU1hcHBpbmcoImZvby9i
YXIiLCAiYmF6IiwgInF1eCIsICZyZXN1bHQpKTsKLS8vICAgYXNzZXJ0KCFBcHBseU1hcHBpbmco
ImZvb2JhciIsICJmb28iLCAiYmF6IiwgJnJlc3VsdCkpOwotc3RhdGljIGJvb2wgQXBwbHlNYXBw
aW5nKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RyaW5nJiBvbGRfcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
cmluZyYgbmV3X3ByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcqIHJlc3Vs
dCkgewotICBpZiAob2xkX3ByZWZpeC5lbXB0eSgpKSB7Ci0gICAgLy8gb2xkX3ByZWZpeCBtYXRj
aGVzIGFueSByZWxhdGl2ZSBwYXRoLgotICAgIGlmIChDb250YWluc1BhcmVudFJlZmVyZW5jZShm
aWxlbmFtZSkpIHsKLSAgICAgIC8vIFdlIGRvIG5vdCBhbGxvdyB0aGUgZmlsZSBuYW1lIHRvIHVz
ZSAiLi4iLgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoSGFzUHJlZml4U3Ry
aW5nKGZpbGVuYW1lLCAiLyIpIHx8Ci0gICAgICAgIElzV2luZG93c0Fic29sdXRlUGF0aChmaWxl
bmFtZSkpIHsKLSAgICAgIC8vIFRoaXMgaXMgYW4gYWJzb2x1dGUgcGF0aCwgc28gaXQgaXNuJ3Qg
bWF0Y2hlZCBieSB0aGUgZW1wdHkgc3RyaW5nLgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXN1bHQtPmFzc2lnbihuZXdfcHJlZml4KTsKLSAgICBpZiAoIXJlc3VsdC0+ZW1wdHko
KSkgcmVzdWx0LT5wdXNoX2JhY2soJy8nKTsKLSAgICByZXN1bHQtPmFwcGVuZChmaWxlbmFtZSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSBpZiAoSGFzUHJlZml4U3RyaW5nKGZpbGVuYW1l
LCBvbGRfcHJlZml4KSkgewotICAgIC8vIG9sZF9wcmVmaXggaXMgYSBwcmVmaXggb2YgdGhlIGZp
bGVuYW1lLiAgSXMgaXQgdGhlIHdob2xlIGZpbGVuYW1lPwotICAgIGlmIChmaWxlbmFtZS5zaXpl
KCkgPT0gb2xkX3ByZWZpeC5zaXplKCkpIHsKLSAgICAgIC8vIFllcCwgaXQncyBhbiBleGFjdCBt
YXRjaC4KLSAgICAgICpyZXN1bHQgPSBuZXdfcHJlZml4OwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIC8vIE5vdCBhbiBleGFjdCBtYXRjaC4gIElzIHRoZSBuZXh0IGNo
YXJhY3RlciBhICcvJz8gIE90aGVyd2lzZSwKLSAgICAgIC8vIHRoaXMgaXNuJ3QgYWN0dWFsbHkg
YSBtYXRjaCBhdCBhbGwuICBFLmcuIHRoZSBwcmVmaXggImZvby9iYXIiCi0gICAgICAvLyBkb2Vz
IG5vdCBtYXRjaCB0aGUgZmlsZW5hbWUgImZvby9iYXJiYXoiLgotICAgICAgaW50IGFmdGVyX3By
ZWZpeF9zdGFydCA9IC0xOwotICAgICAgaWYgKGZpbGVuYW1lW29sZF9wcmVmaXguc2l6ZSgpXSA9
PSAnLycpIHsKLSAgICAgICAgYWZ0ZXJfcHJlZml4X3N0YXJ0ID0gb2xkX3ByZWZpeC5zaXplKCkg
KyAxOwotICAgICAgfSBlbHNlIGlmIChmaWxlbmFtZVtvbGRfcHJlZml4LnNpemUoKSAtIDFdID09
ICcvJykgewotICAgICAgICAvLyBvbGRfcHJlZml4IGlzIG5ldmVyIGVtcHR5LCBhbmQgY2Fub25p
Y2FsaXplZCBwYXRocyBuZXZlciBoYXZlCi0gICAgICAgIC8vIGNvbnNlY3V0aXZlICcvJyBjaGFy
YWN0ZXJzLgotICAgICAgICBhZnRlcl9wcmVmaXhfc3RhcnQgPSBvbGRfcHJlZml4LnNpemUoKTsK
LSAgICAgIH0KLSAgICAgIGlmIChhZnRlcl9wcmVmaXhfc3RhcnQgIT0gLTEpIHsKLSAgICAgICAg
Ly8gWWVwLiAgU28gdGhlIHByZWZpeGVzIGFyZSBkaXJlY3RvcmllcyBhbmQgdGhlIGZpbGVuYW1l
IGlzIGEgZmlsZQotICAgICAgICAvLyBpbnNpZGUgdGhlbS4KLSAgICAgICAgc3RyaW5nIGFmdGVy
X3ByZWZpeCA9IGZpbGVuYW1lLnN1YnN0cihhZnRlcl9wcmVmaXhfc3RhcnQpOwotICAgICAgICBp
ZiAoQ29udGFpbnNQYXJlbnRSZWZlcmVuY2UoYWZ0ZXJfcHJlZml4KSkgewotICAgICAgICAgIC8v
IFdlIGRvIG5vdCBhbGxvdyB0aGUgZmlsZSBuYW1lIHRvIHVzZSAiLi4iLgotICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQtPmFzc2lnbihuZXdfcHJlZml4
KTsKLSAgICAgICAgaWYgKCFyZXN1bHQtPmVtcHR5KCkpIHJlc3VsdC0+cHVzaF9iYWNrKCcvJyk7
Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKGFmdGVyX3ByZWZpeCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBE
aXNrU291cmNlVHJlZTo6TWFwUGF0aChjb25zdCBzdHJpbmcmIHZpcnR1YWxfcGF0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBkaXNrX3BhdGgpIHsKLSAgbWFw
cGluZ3NfLnB1c2hfYmFjayhNYXBwaW5nKHZpcnR1YWxfcGF0aCwgQ2Fub25pY2FsaXplUGF0aChk
aXNrX3BhdGgpKSk7Ci19Ci0KLURpc2tTb3VyY2VUcmVlOjpEaXNrRmlsZVRvVmlydHVhbEZpbGVS
ZXN1bHQKLURpc2tTb3VyY2VUcmVlOjpEaXNrRmlsZVRvVmlydHVhbEZpbGUoCi0gICAgY29uc3Qg
c3RyaW5nJiBkaXNrX2ZpbGUsCi0gICAgc3RyaW5nKiB2aXJ0dWFsX2ZpbGUsCi0gICAgc3RyaW5n
KiBzaGFkb3dpbmdfZGlza19maWxlKSB7Ci0gIGludCBtYXBwaW5nX2luZGV4ID0gLTE7Ci0gIHN0
cmluZyBjYW5vbmljYWxfZGlza19maWxlID0gQ2Fub25pY2FsaXplUGF0aChkaXNrX2ZpbGUpOwot
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWFwcGluZ3NfLnNpemUoKTsgaSsrKSB7Ci0gICAgLy8g
QXBwbHkgdGhlIG1hcHBpbmcgaW4gcmV2ZXJzZS4KLSAgICBpZiAoQXBwbHlNYXBwaW5nKGNhbm9u
aWNhbF9kaXNrX2ZpbGUsIG1hcHBpbmdzX1tpXS5kaXNrX3BhdGgsCi0gICAgICAgICAgICAgICAg
ICAgICBtYXBwaW5nc19baV0udmlydHVhbF9wYXRoLCB2aXJ0dWFsX2ZpbGUpKSB7Ci0gICAgICAv
LyBTdWNjZXNzLgotICAgICAgbWFwcGluZ19pbmRleCA9IGk7Ci0gICAgICBicmVhazsKLSAgICB9
Ci0gIH0KLQotICBpZiAobWFwcGluZ19pbmRleCA9PSAtMSkgewotICAgIHJldHVybiBOT19NQVBQ
SU5HOwotICB9Ci0KLSAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBtYXBwaW5ncyB3aXRoIGhpZ2hl
ciBwcmVjZWRlbmNlIGFuZCB2ZXJpZnkgdGhhdCBub25lCi0gIC8vIG9mIHRoZW0gbWFwIHRoaXMg
ZmlsZSB0byBzb21lIG90aGVyIGV4aXN0aW5nIGZpbGUuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwg
bWFwcGluZ19pbmRleDsgaSsrKSB7Ci0gICAgaWYgKEFwcGx5TWFwcGluZygqdmlydHVhbF9maWxl
LCBtYXBwaW5nc19baV0udmlydHVhbF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgbWFwcGlu
Z3NfW2ldLmRpc2tfcGF0aCwgc2hhZG93aW5nX2Rpc2tfZmlsZSkpIHsKLSAgICAgIGlmIChhY2Nl
c3Moc2hhZG93aW5nX2Rpc2tfZmlsZS0+Y19zdHIoKSwgRl9PSykgPj0gMCkgewotICAgICAgICAv
LyBGaWxlIGV4aXN0cy4KLSAgICAgICAgcmV0dXJuIFNIQURPV0VEOwotICAgICAgfQotICAgIH0K
LSAgfQotICBzaGFkb3dpbmdfZGlza19maWxlLT5jbGVhcigpOwotCi0gIC8vIFZlcmlmeSB0aGF0
IHdlIGNhbiBvcGVuIHRoZSBmaWxlLiAgTm90ZSB0aGF0IHRoaXMgYWxzbyBoYXMgdGhlIHNpZGUt
ZWZmZWN0Ci0gIC8vIG9mIHZlcmlmeWluZyB0aGF0IHdlIGFyZSBub3QgY2Fub25pY2FsaXppbmcg
YXdheSBhbnkgbm9uLWV4aXN0ZW50Ci0gIC8vIGRpcmVjdG9yaWVzLgotICBnb29nbGU6OnByb3Rv
YnVmOjpzY29wZWRfcHRyPGlvOjpaZXJvQ29weUlucHV0U3RyZWFtPiBzdHJlYW0oT3BlbkRpc2tG
aWxlKGRpc2tfZmlsZSkpOwotICBpZiAoc3RyZWFtID09IE5VTEwpIHsKLSAgICByZXR1cm4gQ0FO
Tk9UX09QRU47Ci0gIH0KLQotICByZXR1cm4gU1VDQ0VTUzsKLX0KLQotYm9vbCBEaXNrU291cmNl
VHJlZTo6VmlydHVhbEZpbGVUb0Rpc2tGaWxlKGNvbnN0IHN0cmluZyYgdmlydHVhbF9maWxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogZGlza19m
aWxlKSB7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8aW86Olplcm9Db3B5SW5wdXRT
dHJlYW0+IHN0cmVhbSgKLSAgICAgIE9wZW5WaXJ0dWFsRmlsZSh2aXJ0dWFsX2ZpbGUsIGRpc2tf
ZmlsZSkpOwotICByZXR1cm4gc3RyZWFtICE9IE5VTEw7Ci19Ci0KLWlvOjpaZXJvQ29weUlucHV0
U3RyZWFtKiBEaXNrU291cmNlVHJlZTo6T3Blbihjb25zdCBzdHJpbmcmIGZpbGVuYW1lKSB7Ci0g
IHJldHVybiBPcGVuVmlydHVhbEZpbGUoZmlsZW5hbWUsIE5VTEwpOwotfQotCi1zdHJpbmcgRGlz
a1NvdXJjZVRyZWU6OkdldExhc3RFcnJvck1lc3NhZ2UoKSB7Ci0gIHJldHVybiBsYXN0X2Vycm9y
X21lc3NhZ2VfOwotfQotCi1pbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogRGlza1NvdXJjZVRyZWU6
Ok9wZW5WaXJ0dWFsRmlsZSgKLSAgICBjb25zdCBzdHJpbmcmIHZpcnR1YWxfZmlsZSwKLSAgICBz
dHJpbmcqIGRpc2tfZmlsZSkgewotICBpZiAodmlydHVhbF9maWxlICE9IENhbm9uaWNhbGl6ZVBh
dGgodmlydHVhbF9maWxlKSB8fAotICAgICAgQ29udGFpbnNQYXJlbnRSZWZlcmVuY2UodmlydHVh
bF9maWxlKSkgewotICAgIC8vIFdlIGRvIG5vdCBhbGxvdyBpbXBvcnRpbmcgb2YgcGF0aHMgY29u
dGFpbmluZyB0aGluZ3MgbGlrZSAiLi4iIG9yCi0gICAgLy8gY29uc2VjdXRpdmUgc2xhc2hlcyBz
aW5jZSB0aGUgY29tcGlsZXIgZXhwZWN0cyBmaWxlcyB0byBiZSB1bmlxdWVseQotICAgIC8vIGlk
ZW50aWZpZWQgYnkgZmlsZSBuYW1lLgotICAgIGxhc3RfZXJyb3JfbWVzc2FnZV8gPSAiQmFja3Ns
YXNoZXMsIGNvbnNlY3V0aXZlIHNsYXNoZXMsIFwiLlwiLCBvciBcIi4uXCIgIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAiYXJlIG5vdCBhbGxvd2VkIGluIHRoZSB2aXJ0dWFsIHBhdGgiOwot
ICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXBwaW5nc18u
c2l6ZSgpOyBpKyspIHsKLSAgICBzdHJpbmcgdGVtcF9kaXNrX2ZpbGU7Ci0gICAgaWYgKEFwcGx5
TWFwcGluZyh2aXJ0dWFsX2ZpbGUsIG1hcHBpbmdzX1tpXS52aXJ0dWFsX3BhdGgsCi0gICAgICAg
ICAgICAgICAgICAgICBtYXBwaW5nc19baV0uZGlza19wYXRoLCAmdGVtcF9kaXNrX2ZpbGUpKSB7
Ci0gICAgICBpbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogc3RyZWFtID0gT3BlbkRpc2tGaWxlKHRl
bXBfZGlza19maWxlKTsKLSAgICAgIGlmIChzdHJlYW0gIT0gTlVMTCkgewotICAgICAgICBpZiAo
ZGlza19maWxlICE9IE5VTEwpIHsKLSAgICAgICAgICAqZGlza19maWxlID0gdGVtcF9kaXNrX2Zp
bGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0cmVhbTsKLSAgICAgIH0KLQotICAgICAg
aWYgKGVycm5vID09IEVBQ0NFUykgewotICAgICAgICAvLyBUaGUgZmlsZSBleGlzdHMgYnV0IGlz
IG5vdCByZWFkYWJsZS4KLSAgICAgICAgbGFzdF9lcnJvcl9tZXNzYWdlXyA9ICJSZWFkIGFjY2Vz
cyBpcyBkZW5pZWQgZm9yIGZpbGU6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcF9kaXNrX2ZpbGU7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotICAgIH0KLSAg
fQotICBsYXN0X2Vycm9yX21lc3NhZ2VfID0gIkZpbGUgbm90IGZvdW5kLiI7Ci0gIHJldHVybiBO
VUxMOwotfQotCi1pbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogRGlza1NvdXJjZVRyZWU6Ok9wZW5E
aXNrRmlsZSgKLSAgICBjb25zdCBzdHJpbmcmIGZpbGVuYW1lKSB7Ci0gIGludCBmaWxlX2Rlc2Ny
aXB0b3I7Ci0gIGRvIHsKLSAgICBmaWxlX2Rlc2NyaXB0b3IgPSBvcGVuKGZpbGVuYW1lLmNfc3Ry
KCksIE9fUkRPTkxZKTsKLSAgfSB3aGlsZSAoZmlsZV9kZXNjcmlwdG9yIDwgMCAmJiBlcnJubyA9
PSBFSU5UUik7Ci0gIGlmIChmaWxlX2Rlc2NyaXB0b3IgPj0gMCkgewotICAgIGlvOjpGaWxlSW5w
dXRTdHJlYW0qIHJlc3VsdCA9IG5ldyBpbzo6RmlsZUlucHV0U3RyZWFtKGZpbGVfZGVzY3JpcHRv
cik7Ci0gICAgcmVzdWx0LT5TZXRDbG9zZU9uRGVsZXRlKHRydWUpOwotICAgIHJldHVybiByZXN1
bHQ7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNw
YWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9pbXBvcnRlci5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ltcG9ydGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNjOGZjYzM5YjA5YzdkNTVkMTk0MGEzZTY2YzFkNTE3YzkxYTQxOGUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2ltcG9ydGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2Vu
dG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90
b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBh
bmQgb3RoZXJzLgotLy8KLS8vIFRoaXMgZmlsZSBpcyB0aGUgcHVibGljIGludGVyZmFjZSB0byB0
aGUgLnByb3RvIGZpbGUgcGFyc2VyLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxF
Ul9JTVBPUlRFUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0lNUE9SVEVS
X0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxz
ZXQ+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3Jp
cHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX2RhdGFiYXNlLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BhcnNlci5oPgotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5hbWVzcGFjZSBpbyB7IGNsYXNz
IFplcm9Db3B5SW5wdXRTdHJlYW07IH0KLQotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLQotLy8gRGVm
aW5lZCBpbiB0aGlzIGZpbGUuCi1jbGFzcyBJbXBvcnRlcjsKLWNsYXNzIE11bHRpRmlsZUVycm9y
Q29sbGVjdG9yOwotY2xhc3MgU291cmNlVHJlZTsKLWNsYXNzIERpc2tTb3VyY2VUcmVlOwotCi0v
LyBUT0RPKGtlbnRvbik6ICBNb3ZlIGFsbCBTb3VyY2VUcmVlIHN0dWZmIHRvIGEgc2VwYXJhdGUg
ZmlsZT8KLQotLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgRGVzY3JpcHRvckRhdGFiYXNlIHdoaWNo
IGxvYWRzIGZpbGVzIGZyb20gYSBTb3VyY2VUcmVlCi0vLyBhbmQgcGFyc2VzIHRoZW0uCi0vLwot
Ly8gTm90ZTogIFRoaXMgY2xhc3MgaXMgbm90IHRocmVhZC1zYWZlIHNpbmNlIGl0IG1haW50YWlu
cyBhIHRhYmxlIG9mIHNvdXJjZQotLy8gICBjb2RlIGxvY2F0aW9ucyBmb3IgZXJyb3IgcmVwb3J0
aW5nLiAgSG93ZXZlciwgd2hlbiBhIERlc2NyaXB0b3JQb29sIHdyYXBzCi0vLyAgIGEgRGVzY3Jp
cHRvckRhdGFiYXNlLCBpdCB1c2VzIG11dGV4IGxvY2tpbmcgdG8gbWFrZSBzdXJlIG9ubHkgb25l
IG1ldGhvZAotLy8gICBvZiB0aGUgZGF0YWJhc2UgaXMgY2FsbGVkIGF0IGEgdGltZSwgZXZlbiBp
ZiB0aGUgRGVzY3JpcHRvclBvb2wgaXMgdXNlZAotLy8gICBmcm9tIG11bHRpcGxlIHRocmVhZHMu
ICBUaGVyZWZvcmUsIHRoZXJlIGlzIG9ubHkgYSBwcm9ibGVtIGlmIHlvdSBjcmVhdGUKLS8vICAg
bXVsdGlwbGUgRGVzY3JpcHRvclBvb2xzIHdyYXBwaW5nIHRoZSBzYW1lIFNvdXJjZVRyZWVEZXNj
cmlwdG9yRGF0YWJhc2UKLS8vICAgYW5kIHVzZSB0aGVtIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4K
LS8vCi0vLyBOb3RlOiAgVGhpcyBjbGFzcyBkb2VzIG5vdCBpbXBsZW1lbnQgRmluZEZpbGVDb250
YWluaW5nU3ltYm9sKCkgb3IKLS8vICAgRmluZEZpbGVDb250YWluaW5nRXh0ZW5zaW9uKCk7IHRo
ZXNlIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBT
b3VyY2VUcmVlRGVzY3JpcHRvckRhdGFiYXNlIDogcHVibGljIERlc2NyaXB0b3JEYXRhYmFzZSB7
Ci0gcHVibGljOgotICBTb3VyY2VUcmVlRGVzY3JpcHRvckRhdGFiYXNlKFNvdXJjZVRyZWUqIHNv
dXJjZV90cmVlKTsKLSAgflNvdXJjZVRyZWVEZXNjcmlwdG9yRGF0YWJhc2UoKTsKLQotICAvLyBJ
bnN0cnVjdHMgdGhlIFNvdXJjZVRyZWVEZXNjcmlwdG9yRGF0YWJhc2UgdG8gcmVwb3J0IGFueSBw
YXJzZSBlcnJvcnMKLSAgLy8gdG8gdGhlIGdpdmVuIE11bHRpRmlsZUVycm9yQ29sbGVjdG9yLiAg
VGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZQotICAvLyBwYXJzaW5nLiAgZXJyb3JfY29sbGVj
dG9yIG11c3QgcmVtYWluIHZhbGlkIHVudGlsIGVpdGhlciB0aGlzIG1ldGhvZAotICAvLyBpcyBj
YWxsZWQgYWdhaW4gb3IgdGhlIFNvdXJjZVRyZWVEZXNjcmlwdG9yRGF0YWJhc2UgaXMgZGVzdHJv
eWVkLgotICB2b2lkIFJlY29yZEVycm9yc1RvKE11bHRpRmlsZUVycm9yQ29sbGVjdG9yKiBlcnJv
cl9jb2xsZWN0b3IpIHsKLSAgICBlcnJvcl9jb2xsZWN0b3JfID0gZXJyb3JfY29sbGVjdG9yOwot
ICB9Ci0KLSAgLy8gR2V0cyBhIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3RvciB3aGljaCBy
ZWNvcmRzIGVycm9ycyB0byB0aGUKLSAgLy8gTXVsdGlGaWxlRXJyb3JDb2xsZWN0b3Igc3BlY2lm
aWVkIHdpdGggUmVjb3JkRXJyb3JzVG8oKS4gIFRoaXMgY29sbGVjdG9yCi0gIC8vIGhhcyB0aGUg
YWJpbGl0eSB0byBkZXRlcm1pbmUgZXhhY3QgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgb2YgZXJy
b3JzCi0gIC8vIGZyb20gdGhlIGluZm9ybWF0aW9uIGdpdmVuIHRvIGl0IGJ5IHRoZSBEZXNjcmlw
dG9yUG9vbC4KLSAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yKiBHZXRWYWxpZGF0aW9u
RXJyb3JDb2xsZWN0b3IoKSB7Ci0gICAgdXNpbmdfdmFsaWRhdGlvbl9lcnJvcl9jb2xsZWN0b3Jf
ID0gdHJ1ZTsKLSAgICByZXR1cm4gJnZhbGlkYXRpb25fZXJyb3JfY29sbGVjdG9yXzsKLSAgfQot
Ci0gIC8vIGltcGxlbWVudHMgRGVzY3JpcHRvckRhdGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wgRmluZEZpbGVCeU5hbWUoY29uc3Qgc3RyaW5nJiBmaWxl
bmFtZSwgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KTsKLSAgYm9vbCBGaW5kRmlsZUNvbnRh
aW5pbmdTeW1ib2woY29uc3Qgc3RyaW5nJiBzeW1ib2xfbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KTsKLSAgYm9vbCBGaW5k
RmlsZUNvbnRhaW5pbmdFeHRlbnNpb24oY29uc3Qgc3RyaW5nJiBjb250YWluaW5nX3R5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZF9udW1iZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8qIG91dHB1
dCk7Ci0KLSBwcml2YXRlOgotICBjbGFzcyBTaW5nbGVGaWxlRXJyb3JDb2xsZWN0b3I7Ci0KLSAg
U291cmNlVHJlZSogc291cmNlX3RyZWVfOwotICBNdWx0aUZpbGVFcnJvckNvbGxlY3RvciogZXJy
b3JfY29sbGVjdG9yXzsKLQotICBjbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgVmFsaWRhdGlvbkVy
cm9yQ29sbGVjdG9yIDogcHVibGljIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3RvciB7Ci0g
ICBwdWJsaWM6Ci0gICAgVmFsaWRhdGlvbkVycm9yQ29sbGVjdG9yKFNvdXJjZVRyZWVEZXNjcmlw
dG9yRGF0YWJhc2UqIG93bmVyKTsKLSAgICB+VmFsaWRhdGlvbkVycm9yQ29sbGVjdG9yKCk7Ci0K
LSAgICAvLyBpbXBsZW1lbnRzIEVycm9yQ29sbGVjdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgIHZvaWQgQWRkRXJyb3IoY29uc3Qgc3RyaW5nJiBmaWxlbmFt
ZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZWxlbWVudF9uYW1lLAotICAgICAg
ICAgICAgICAgICAgY29uc3QgTWVzc2FnZSogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAg
IEVycm9yTG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcm
IG1lc3NhZ2UpOwotCi0gICAgdmlydHVhbCB2b2lkIEFkZFdhcm5pbmcoY29uc3Qgc3RyaW5nJiBm
aWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGVsZW1l
bnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlKiBkZXNj
cmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yTG9jYXRpb24gbG9jYXRp
b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBtZXNzYWdlKTsK
LQotICAgcHJpdmF0ZToKLSAgICBTb3VyY2VUcmVlRGVzY3JpcHRvckRhdGFiYXNlKiBvd25lcl87
Ci0gIH07Ci0gIGZyaWVuZCBjbGFzcyBWYWxpZGF0aW9uRXJyb3JDb2xsZWN0b3I7Ci0KLSAgYm9v
bCB1c2luZ192YWxpZGF0aW9uX2Vycm9yX2NvbGxlY3Rvcl87Ci0gIFNvdXJjZUxvY2F0aW9uVGFi
bGUgc291cmNlX2xvY2F0aW9uc187Ci0gIFZhbGlkYXRpb25FcnJvckNvbGxlY3RvciB2YWxpZGF0
aW9uX2Vycm9yX2NvbGxlY3Rvcl87Ci19OwotCi0vLyBTaW1wbGUgaW50ZXJmYWNlIGZvciBwYXJz
aW5nIC5wcm90byBmaWxlcy4gIFRoaXMgd3JhcHMgdGhlIHByb2Nlc3MKLS8vIG9mIG9wZW5pbmcg
dGhlIGZpbGUsIHBhcnNpbmcgaXQgd2l0aCBhIFBhcnNlciwgcmVjdXJzaXZlbHkgcGFyc2luZyBh
bGwgaXRzCi0vLyBpbXBvcnRzLCBhbmQgdGhlbiBjcm9zcy1saW5raW5nIHRoZSByZXN1bHRzIHRv
IHByb2R1Y2UgYSBGaWxlRGVzY3JpcHRvci4KLS8vCi0vLyBUaGlzIGlzIHJlYWxseSBqdXN0IGEg
dGhpbiB3cmFwcGVyIGFyb3VuZCBTb3VyY2VUcmVlRGVzY3JpcHRvckRhdGFiYXNlLgotLy8gWW91
IG1heSBmaW5kIHRoYXQgU291cmNlVHJlZURlc2NyaXB0b3JEYXRhYmFzZSBpcyBtb3JlIGZsZXhp
YmxlLgotLy8KLS8vIFRPRE8oa2VudG9uKTogIEkgZmVlbCBsaWtlIHRoaXMgY2xhc3MgaXMgbm90
IHdlbGwtbmFtZWQuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgSW1wb3J0ZXIgewotIHB1Ymxp
YzoKLSAgSW1wb3J0ZXIoU291cmNlVHJlZSogc291cmNlX3RyZWUsCi0gICAgICAgICAgIE11bHRp
RmlsZUVycm9yQ29sbGVjdG9yKiBlcnJvcl9jb2xsZWN0b3IpOwotICB+SW1wb3J0ZXIoKTsKLQot
ICAvLyBJbXBvcnQgdGhlIGdpdmVuIGZpbGUgYW5kIGJ1aWxkIGEgRmlsZURlc2NyaXB0b3IgcmVw
cmVzZW50aW5nIGl0LiAgSWYKLSAgLy8gdGhlIGZpbGUgaXMgYWxyZWFkeSBpbiB0aGUgRGVzY3Jp
cHRvclBvb2wsIHRoZSBleGlzdGluZyBGaWxlRGVzY3JpcHRvcgotICAvLyB3aWxsIGJlIHJldHVy
bmVkLiAgVGhlIEZpbGVEZXNjcmlwdG9yIGlzIHByb3BlcnR5IG9mIHRoZSBEZXNjcmlwdG9yUG9v
bCwKLSAgLy8gYW5kIHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIGl0IGlzIGRlc3Ryb3llZC4gIElm
IGFueSBlcnJvcnMgb2NjdXIsIHRoZXkKLSAgLy8gd2lsbCBiZSByZXBvcnRlZCB1c2luZyB0aGUg
ZXJyb3IgY29sbGVjdG9yIGFuZCBJbXBvcnQoKSB3aWxsIHJldHVybiBOVUxMLgotICAvLwotICAv
LyBBIHBhcnRpY3VsYXIgSW1wb3J0ZXIgb2JqZWN0IHdpbGwgb25seSByZXBvcnQgZXJyb3JzIGZv
ciBhIHBhcnRpY3VsYXIKLSAgLy8gZmlsZSBvbmNlLiAgQWxsIGZ1dHVyZSBhdHRlbXB0cyB0byBp
bXBvcnQgdGhlIHNhbWUgZmlsZSB3aWxsIHJldHVybiBOVUxMCi0gIC8vIHdpdGhvdXQgcmVwb3J0
aW5nIGFueSBlcnJvcnMuICBUaGUgaWRlYSBpcyB0aGF0IHlvdSBtaWdodCB3YW50IHRvIGltcG9y
dAotICAvLyBhIGxvdCBvZiBmaWxlcyB3aXRob3V0IHNlZWluZyB0aGUgc2FtZSBlcnJvcnMgb3Zl
ciBhbmQgb3ZlciBhZ2Fpbi4gIElmCi0gIC8vIHlvdSB3YW50IHRvIHNlZSBlcnJvcnMgZm9yIHRo
ZSBzYW1lIGZpbGVzIHJlcGVhdGVkbHksIHlvdSBjYW4gdXNlIGEKLSAgLy8gc2VwYXJhdGUgSW1w
b3J0ZXIgb2JqZWN0IHRvIGltcG9ydCBlYWNoIG9uZSAoYnV0IHVzZSB0aGUgc2FtZQotICAvLyBE
ZXNjcmlwdG9yUG9vbCBzbyB0aGF0IHRoZXkgY2FuIGJlIGNyb3NzLWxpbmtlZCkuCi0gIGNvbnN0
IEZpbGVEZXNjcmlwdG9yKiBJbXBvcnQoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSk7Ci0KLSAgLy8g
VGhlIERlc2NyaXB0b3JQb29sIGluIHdoaWNoIGFsbCBpbXBvcnRlZCBGaWxlRGVzY3JpcHRvcnMg
YW5kIHRoZWlyCi0gIC8vIGNvbnRlbnRzIGFyZSBzdG9yZWQuCi0gIGlubGluZSBjb25zdCBEZXNj
cmlwdG9yUG9vbCogcG9vbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gJnBvb2xfOwotICB9Ci0KLSAg
dm9pZCBBZGRVbnVzZWRJbXBvcnRUcmFja0ZpbGUoY29uc3Qgc3RyaW5nJiBmaWxlX25hbWUpOwot
ICB2b2lkIENsZWFyVW51c2VkSW1wb3J0VHJhY2tGaWxlcygpOwotCi0gcHJpdmF0ZToKLSAgU291
cmNlVHJlZURlc2NyaXB0b3JEYXRhYmFzZSBkYXRhYmFzZV87Ci0gIERlc2NyaXB0b3JQb29sIHBv
b2xfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhJbXBvcnRlcik7Ci19
OwotCi0vLyBJZiB0aGUgaW1wb3J0ZXIgZW5jb3VudGVycyBwcm9ibGVtcyB3aGlsZSB0cnlpbmcg
dG8gaW1wb3J0IHRoZSBwcm90byBmaWxlcywKLS8vIGl0IHJlcG9ydHMgdGhlbSB0byBhIE11bHRp
RmlsZUVycm9yQ29sbGVjdG9yLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE11bHRpRmlsZUVy
cm9yQ29sbGVjdG9yIHsKLSBwdWJsaWM6Ci0gIGlubGluZSBNdWx0aUZpbGVFcnJvckNvbGxlY3Rv
cigpIHt9Ci0gIHZpcnR1YWwgfk11bHRpRmlsZUVycm9yQ29sbGVjdG9yKCk7Ci0KLSAgLy8gTGlu
ZSBhbmQgY29sdW1uIG51bWJlcnMgYXJlIHplcm8tYmFzZWQuICBBIGxpbmUgbnVtYmVyIG9mIC0x
IGluZGljYXRlcwotICAvLyBhbiBlcnJvciB3aXRoIHRoZSBlbnRpcmUgZmlsZSAoZS5nLiAibm90
IGZvdW5kIikuCi0gIHZpcnR1YWwgdm9pZCBBZGRFcnJvcihjb25zdCBzdHJpbmcmIGZpbGVuYW1l
LCBpbnQgbGluZSwgaW50IGNvbHVtbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
cmluZyYgbWVzc2FnZSkgPSAwOwotCi0gIHZpcnR1YWwgdm9pZCBBZGRXYXJuaW5nKGNvbnN0IHN0
cmluZyYgZmlsZW5hbWUsIGludCBsaW5lLCBpbnQgY29sdW1uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmcmIG1lc3NhZ2UpIHt9Ci0KLSBwcml2YXRlOgotICBHT09HTEVf
RElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTXVsdGlGaWxlRXJyb3JDb2xsZWN0b3IpOwotfTsK
LQotLy8gQWJzdHJhY3QgaW50ZXJmYWNlIHdoaWNoIHJlcHJlc2VudHMgYSBkaXJlY3RvcnkgdHJl
ZSBjb250YWluaW5nIHByb3RvIGZpbGVzLgotLy8gVXNlZCBieSB0aGUgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBvZiBJbXBvcnRlciB0byByZXNvbHZlIGltcG9ydCBzdGF0ZW1lbnRzCi0vLyBNb3N0
IHVzZXJzIHdpbGwgcHJvYmFibHkgd2FudCB0byB1c2UgdGhlIERpc2tTb3VyY2VUcmVlIGltcGxl
bWVudGF0aW9uLAotLy8gYmVsb3cuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgU291cmNlVHJl
ZSB7Ci0gcHVibGljOgotICBpbmxpbmUgU291cmNlVHJlZSgpIHt9Ci0gIHZpcnR1YWwgflNvdXJj
ZVRyZWUoKTsKLQotICAvLyBPcGVuIHRoZSBnaXZlbiBmaWxlIGFuZCByZXR1cm4gYSBzdHJlYW0g
dGhhdCByZWFkcyBpdCwgb3IgTlVMTCBpZiBub3QKLSAgLy8gZm91bmQuICBUaGUgY2FsbGVyIHRh
a2VzIG93bmVyc2hpcCBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0LiAgVGhlIGZpbGVuYW1lCi0gIC8v
IG11c3QgYmUgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZSBh
bmQgbXVzdCBub3QKLSAgLy8gY29udGFpbiAiLiIgb3IgIi4uIiBjb21wb25lbnRzLgotICB2aXJ0
dWFsIGlvOjpaZXJvQ29weUlucHV0U3RyZWFtKiBPcGVuKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUp
ID0gMDsKLQotICAvLyBJZiBPcGVuKCkgcmV0dXJucyBOVUxMLCBjYWxsaW5nIHRoaXMgbWV0aG9k
IGltbWVkaWF0ZWx5IHdpbGwgcmV0dXJuIGFuCi0gIC8vIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJv
ci4KLSAgLy8gU3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHRoaXMgbWV0aG9kIGFuZCByZXR1
cm4gYSBtZWFuaW5nZnVsIHZhbHVlIGZvcgotICAvLyBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nLgot
ICAvLyBUT0RPKHhpYW9mZW5nKTogY2hhbmdlIHRoaXMgdG8gYSBwdXJlIHZpcnR1YWwgZnVuY3Rp
b24uCi0gIHZpcnR1YWwgc3RyaW5nIEdldExhc3RFcnJvck1lc3NhZ2UoKTsKLQotIHByaXZhdGU6
Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTb3VyY2VUcmVlKTsKLX07Ci0K
LS8vIEFuIGltcGxlbWVudGF0aW9uIG9mIFNvdXJjZVRyZWUgd2hpY2ggbG9hZHMgZmlsZXMgZnJv
bSBsb2NhdGlvbnMgb24gZGlzay4KLS8vIE11bHRpcGxlIG1hcHBpbmdzIGNhbiBiZSBzZXQgdXAg
dG8gbWFwIGxvY2F0aW9ucyBpbiB0aGUgRGlza1NvdXJjZVRyZWUgdG8KLS8vIGxvY2F0aW9ucyBp
biB0aGUgcGh5c2ljYWwgZmlsZXN5c3RlbS4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBEaXNr
U291cmNlVHJlZSA6IHB1YmxpYyBTb3VyY2VUcmVlIHsKLSBwdWJsaWM6Ci0gIERpc2tTb3VyY2VU
cmVlKCk7Ci0gIH5EaXNrU291cmNlVHJlZSgpOwotCi0gIC8vIE1hcCBhIHBhdGggb24gZGlzayB0
byBhIGxvY2F0aW9uIGluIHRoZSBTb3VyY2VUcmVlLiAgVGhlIHBhdGggbWF5IGJlCi0gIC8vIGVp
dGhlciBhIGZpbGUgb3IgYSBkaXJlY3RvcnkuICBJZiBpdCBpcyBhIGRpcmVjdG9yeSwgdGhlIGVu
dGlyZSB0cmVlCi0gIC8vIHVuZGVyIGl0IHdpbGwgYmUgbWFwcGVkIHRvIHRoZSBnaXZlbiB2aXJ0
dWFsIGxvY2F0aW9uLiAgVG8gbWFwIGEgZGlyZWN0b3J5Ci0gIC8vIHRvIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZSwgcGFzcyBhbiBlbXB0eSBzdHJpbmcgZm9yIHZpcnR1YWxfcGF0aC4KLSAg
Ly8KLSAgLy8gSWYgbXVsdGlwbGUgbWFwcGVkIHBhdGhzIGFwcGx5IHdoZW4gb3BlbmluZyBhIGZp
bGUsIHRoZXkgd2lsbCBiZSBzZWFyY2hlZAotICAvLyBpbiBvcmRlci4gIEZvciBleGFtcGxlLCBp
ZiB5b3UgZG86Ci0gIC8vICAgTWFwUGF0aCgiYmFyIiwgImZvby9iYXIiKTsKLSAgLy8gICBNYXBQ
YXRoKCIiLCAiYmF6Iik7Ci0gIC8vIGFuZCB0aGVuIHlvdSBkbzoKLSAgLy8gICBPcGVuKCJiYXIv
cXV4Iik7Ci0gIC8vIHRoZSBEaXNrU291cmNlVHJlZSB3aWxsIGZpcnN0IHRyeSB0byBvcGVuIGZv
by9iYXIvcXV4LCB0aGVuIGJhei9iYXIvcXV4LAotICAvLyByZXR1cm5pbmcgdGhlIGZpcnN0IG9u
ZSB0aGF0IG9wZW5zIHN1Y2Nlc3NmdWx5LgotICAvLwotICAvLyBkaXNrX3BhdGggbWF5IGJlIGFu
IGFic29sdXRlIHBhdGggb3IgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LAotICAv
LyBqdXN0IGxpa2UgYSBwYXRoIHlvdSdkIHBhc3MgdG8gb3BlbigpLgotICB2b2lkIE1hcFBhdGgo
Y29uc3Qgc3RyaW5nJiB2aXJ0dWFsX3BhdGgsIGNvbnN0IHN0cmluZyYgZGlza19wYXRoKTsKLQot
ICAvLyBSZXR1cm4gdHlwZSBmb3IgRGlza0ZpbGVUb1ZpcnR1YWxGaWxlKCkuCi0gIGVudW0gRGlz
a0ZpbGVUb1ZpcnR1YWxGaWxlUmVzdWx0IHsKLSAgICBTVUNDRVNTLAotICAgIFNIQURPV0VELAot
ICAgIENBTk5PVF9PUEVOLAotICAgIE5PX01BUFBJTkcKLSAgfTsKLQotICAvLyBHaXZlbiBhIHBh
dGggdG8gYSBmaWxlIG9uIGRpc2ssIGZpbmQgYSB2aXJ0dWFsIHBhdGggbWFwcGluZyB0byB0aGF0
Ci0gIC8vIGZpbGUuICBUaGUgZmlyc3QgbWFwcGluZyBjcmVhdGVkIHdpdGggTWFwUGF0aCgpIHdo
b3NlIGRpc2tfcGF0aCBjb250YWlucwotICAvLyB0aGUgZmlsZW5hbWUgaXMgdXNlZC4gIEhvd2V2
ZXIsIHRoYXQgdmlydHVhbCBwYXRoIG1heSBub3QgYWN0dWFsbHkgYmUKLSAgLy8gdXNhYmxlIHRv
IG9wZW4gdGhlIGdpdmVuIGZpbGUuICBQb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFyZToKLSAgLy8g
KiBTVUNDRVNTOiBUaGUgbWFwcGluZyB3YXMgZm91bmQuICAqdmlydHVhbF9maWxlIGlzIGZpbGxl
ZCBpbiBzbyB0aGF0Ci0gIC8vICAgY2FsbGluZyBPcGVuKCp2aXJ0dWFsX2ZpbGUpIHdpbGwgb3Bl
biB0aGUgZmlsZSBuYW1lZCBieSBkaXNrX2ZpbGUuCi0gIC8vICogU0hBRE9XRUQ6IEEgbWFwcGlu
ZyB3YXMgZm91bmQsIGJ1dCB1c2luZyBPcGVuKCkgdG8gb3BlbiB0aGlzIHZpcnR1YWwKLSAgLy8g
ICBwYXRoIHdpbGwgZW5kIHVwIHJldHVybmluZyBzb21lIGRpZmZlcmVudCBmaWxlLiAgVGhpcyBp
cyBiZWNhdXNlIHNvbWUKLSAgLy8gICBvdGhlciBtYXBwaW5nIHdpdGggYSBoaWdoZXIgcHJlY2Vk
ZW5jZSBhbHNvIG1hdGNoZXMgdGhpcyB2aXJ0dWFsIHBhdGgKLSAgLy8gICBhbmQgbWFwcyBpdCB0
byBhIGRpZmZlcmVudCBmaWxlIHRoYXQgZXhpc3RzIG9uIGRpc2suICAqdmlydHVhbF9maWxlCi0g
IC8vICAgaXMgZmlsbGVkIGluIGFzIGl0IHdvdWxkIGJlIGluIHRoZSBTVUNDRVNTIGNhc2UuICAq
c2hhZG93aW5nX2Rpc2tfZmlsZQotICAvLyAgIGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBkaXNrIHBh
dGggb2YgdGhlIGZpbGUgd2hpY2ggd291bGQgYmUgb3BlbmVkIGlmCi0gIC8vICAgeW91IHdlcmUg
dG8gY2FsbCBPcGVuKCp2aXJ0dWFsX2ZpbGUpLgotICAvLyAqIENBTk5PVF9PUEVOOiBUaGUgbWFw
cGluZyB3YXMgZm91bmQgYW5kIHdhcyBub3Qgc2hhZG93ZWQsIGJ1dCB0aGUKLSAgLy8gICBmaWxl
IHNwZWNpZmllZCBjYW5ub3QgYmUgb3BlbmVkLiAgV2hlbiB0aGlzIHZhbHVlIGlzIHJldHVybmVk
LAotICAvLyAgIGVycm5vIHdpbGwgaW5kaWNhdGUgdGhlIHJlYXNvbiB0aGUgZmlsZSBjYW5ub3Qg
YmUgb3BlbmVkLiAgKnZpcnR1YWxfZmlsZQotICAvLyAgIHdpbGwgYmUgc2V0IHRvIHRoZSB2aXJ0
dWFsIHBhdGggYXMgaW4gdGhlIFNVQ0NFU1MgY2FzZSwgZXZlbiB0aG91Z2gKLSAgLy8gICBpdCBp
cyBub3QgdXNlZnVsLgotICAvLyAqIE5PX01BUFBJTkc6IEluZGljYXRlcyB0aGF0IG5vIG1hcHBp
bmcgd2FzIGZvdW5kIHdoaWNoIGNvbnRhaW5zIHRoaXMKLSAgLy8gICBmaWxlLgotICBEaXNrRmls
ZVRvVmlydHVhbEZpbGVSZXN1bHQKLSAgICBEaXNrRmlsZVRvVmlydHVhbEZpbGUoY29uc3Qgc3Ry
aW5nJiBkaXNrX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogdmlydHVh
bF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcqIHNoYWRvd2luZ19kaXNr
X2ZpbGUpOwotCi0gIC8vIEdpdmVuIGEgdmlydHVhbCBwYXRoLCBmaW5kIHRoZSBwYXRoIHRvIHRo
ZSBmaWxlIG9uIGRpc2suCi0gIC8vIFJldHVybiB0cnVlIGFuZCB1cGRhdGUgZGlza19maWxlIHdp
dGggdGhlIG9uLWRpc2sgcGF0aCBpZiB0aGUgZmlsZSBleGlzdHMuCi0gIC8vIFJldHVybiBmYWxz
ZSBhbmQgbGVhdmUgZGlza19maWxlIHVudG91Y2hlZCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0
LgotICBib29sIFZpcnR1YWxGaWxlVG9EaXNrRmlsZShjb25zdCBzdHJpbmcmIHZpcnR1YWxfZmls
ZSwgc3RyaW5nKiBkaXNrX2ZpbGUpOwotCi0gIC8vIGltcGxlbWVudHMgU291cmNlVHJlZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIHZpcnR1YWwgaW86Olpl
cm9Db3B5SW5wdXRTdHJlYW0qIE9wZW4oY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSk7Ci0KLSAgdmly
dHVhbCBzdHJpbmcgR2V0TGFzdEVycm9yTWVzc2FnZSgpOwotCi0gcHJpdmF0ZToKLSAgc3RydWN0
IE1hcHBpbmcgewotICAgIHN0cmluZyB2aXJ0dWFsX3BhdGg7Ci0gICAgc3RyaW5nIGRpc2tfcGF0
aDsKLQotICAgIGlubGluZSBNYXBwaW5nKGNvbnN0IHN0cmluZyYgdmlydHVhbF9wYXRoX3BhcmFt
LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZGlza19wYXRoX3BhcmFtKQotICAg
ICAgOiB2aXJ0dWFsX3BhdGgodmlydHVhbF9wYXRoX3BhcmFtKSwgZGlza19wYXRoKGRpc2tfcGF0
aF9wYXJhbSkge30KLSAgfTsKLSAgdmVjdG9yPE1hcHBpbmc+IG1hcHBpbmdzXzsKLSAgc3RyaW5n
IGxhc3RfZXJyb3JfbWVzc2FnZV87Ci0KLSAgLy8gTGlrZSBPcGVuKCksIGJ1dCByZXR1cm5zIHRo
ZSBvbi1kaXNrIHBhdGggaW4gZGlza19maWxlIGlmIGRpc2tfZmlsZSBpcwotICAvLyBub24tTlVM
TCBhbmQgdGhlIGZpbGUgY291bGQgYmUgc3VjY2Vzc2Z1bGx5IG9wZW5lZC4KLSAgaW86Olplcm9D
b3B5SW5wdXRTdHJlYW0qIE9wZW5WaXJ0dWFsRmlsZShjb25zdCBzdHJpbmcmIHZpcnR1YWxfZmls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcqIGRp
c2tfZmlsZSk7Ci0KLSAgLy8gTGlrZSBPcGVuKCkgYnV0IGdpdmVuIHRoZSBhY3R1YWwgb24tZGlz
ayBwYXRoLgotICBpbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogT3BlbkRpc2tGaWxlKGNvbnN0IHN0
cmluZyYgZmlsZW5hbWUpOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhE
aXNrU291cmNlVHJlZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5h
bWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdP
T0dMRV9QUk9UT0JVRl9DT01QSUxFUl9JTVBPUlRFUl9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9pbXBvcnRlcl91bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9pbXBvcnRlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWI2ZTk3MDA3MTQ0MzA4OWQ0ZjI0ZmVhNTgyN2Q0N2U5ZTMyMDVjNi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvaW1wb3J0ZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1MjMg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjog
a2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQ
cm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFu
LCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ltcG9y
dGVyLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oPgotI2luY2x1
ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Nv
bW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2ZpbGUuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3Rlc3RpbmcvZmlsZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJv
X2NvcHlfc3RyZWFtX2ltcGwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRv
ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1dGUuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0Lmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwuaD4KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLQot
bmFtZXNwYWNlIHsKLQotYm9vbCBGaWxlRXhpc3RzKGNvbnN0IHN0cmluZyYgcGF0aCkgewotICBy
ZXR1cm4gRmlsZTo6RXhpc3RzKHBhdGgpOwotfQotCi0jZGVmaW5lIEVYUEVDVF9TVUJTVFJJTkco
bmVlZGxlLCBoYXlzdGFjaykgXAotICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHRlc3Rpbmc6OklzU3Vi
c3RyaW5nLCAobmVlZGxlKSwgKGhheXN0YWNrKSkKLQotY2xhc3MgTW9ja0Vycm9yQ29sbGVjdG9y
IDogcHVibGljIE11bHRpRmlsZUVycm9yQ29sbGVjdG9yIHsKLSBwdWJsaWM6Ci0gIE1vY2tFcnJv
ckNvbGxlY3RvcigpIHt9Ci0gIH5Nb2NrRXJyb3JDb2xsZWN0b3IoKSB7fQotCi0gIHN0cmluZyB0
ZXh0XzsKLSAgc3RyaW5nIHdhcm5pbmdfdGV4dF87Ci0KLSAgLy8gaW1wbGVtZW50cyBFcnJvckNv
bGxlY3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBB
ZGRFcnJvcihjb25zdCBzdHJpbmcmIGZpbGVuYW1lLCBpbnQgbGluZSwgaW50IGNvbHVtbiwKLSAg
ICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIG1lc3NhZ2UpIHsKLSAgICBzdHJpbmdzOjpTdWJz
dGl0dXRlQW5kQXBwZW5kKCZ0ZXh0XywgIiQwOiQxOiQyOiAkM1xuIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lLCBjb2x1bW4sIG1lc3NhZ2UpOwotICB9
Ci0KLSAgdm9pZCBBZGRXYXJuaW5nKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGludCBsaW5lLCBp
bnQgY29sdW1uLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBtZXNzYWdlKSB7Ci0g
ICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZCgmd2FybmluZ190ZXh0XywgIiQwOiQxOiQy
OiAkM1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5l
LCBjb2x1bW4sIG1lc3NhZ2UpOwotICB9Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEEgZHVt
bXkgaW1wbGVtZW50YXRpb24gb2YgU291cmNlVHJlZSBiYWNrZWQgYnkgYSBzaW1wbGUgbWFwLgot
Y2xhc3MgTW9ja1NvdXJjZVRyZWUgOiBwdWJsaWMgU291cmNlVHJlZSB7Ci0gcHVibGljOgotICBN
b2NrU291cmNlVHJlZSgpIHt9Ci0gIH5Nb2NrU291cmNlVHJlZSgpIHt9Ci0KLSAgdm9pZCBBZGRG
aWxlKGNvbnN0IHN0cmluZyYgbmFtZSwgY29uc3QgY2hhciogY29udGVudHMpIHsKLSAgICBmaWxl
c19bbmFtZV0gPSBjb250ZW50czsKLSAgfQotCi0gIC8vIGltcGxlbWVudHMgU291cmNlVHJlZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGlvOjpaZXJvQ29w
eUlucHV0U3RyZWFtKiBPcGVuKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsKLSAgICBjb25zdCBj
aGFyKiBjb250ZW50cyA9IEZpbmRQdHJPck51bGwoZmlsZXNfLCBmaWxlbmFtZSk7Ci0gICAgaWYg
KGNvbnRlbnRzID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0gZWxzZSB7Ci0g
ICAgICByZXR1cm4gbmV3IGlvOjpBcnJheUlucHV0U3RyZWFtKGNvbnRlbnRzLCBzdHJsZW4oY29u
dGVudHMpKTsKLSAgICB9Ci0gIH0KLQotICBzdHJpbmcgR2V0TGFzdEVycm9yTWVzc2FnZSgpIHsK
LSAgICByZXR1cm4gIkZpbGUgbm90IGZvdW5kLiI7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGhhc2hf
bWFwPHN0cmluZywgY29uc3QgY2hhcio+IGZpbGVzXzsKLX07Ci0KLS8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQot
Y2xhc3MgSW1wb3J0ZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoK
LSAgSW1wb3J0ZXJUZXN0KCkKLSAgICA6IGltcG9ydGVyXygmc291cmNlX3RyZWVfLCAmZXJyb3Jf
Y29sbGVjdG9yXykge30KLQotICB2b2lkIEFkZEZpbGUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgY2hhciogdGV4dCkgewotICAgIHNvdXJjZV90cmVlXy5BZGRGaWxlKGZpbGVuYW1lLCB0
ZXh0KTsKLSAgfQotCi0gIC8vIFJldHVybiB0aGUgY29sbGVjdGVkIGVycm9yIHRleHQKLSAgc3Ry
aW5nIGVycm9yKCkgY29uc3QgeyByZXR1cm4gZXJyb3JfY29sbGVjdG9yXy50ZXh0XzsgfQotICBz
dHJpbmcgd2FybmluZygpIGNvbnN0IHsgcmV0dXJuIGVycm9yX2NvbGxlY3Rvcl8ud2FybmluZ190
ZXh0XzsgfQotCi0gIE1vY2tFcnJvckNvbGxlY3RvciBlcnJvcl9jb2xsZWN0b3JfOwotICBNb2Nr
U291cmNlVHJlZSBzb3VyY2VfdHJlZV87Ci0gIEltcG9ydGVyIGltcG9ydGVyXzsKLX07Ci0KLVRF
U1RfRihJbXBvcnRlclRlc3QsIEltcG9ydCkgewotICAvLyBUZXN0IG5vcm1hbCBpbXBvcnRpbmcu
Ci0gIEFkZEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0g
ICAgIm1lc3NhZ2UgRm9vIHt9XG4iKTsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSA9
IGltcG9ydGVyXy5JbXBvcnQoImZvby5wcm90byIpOwotICBFWFBFQ1RfRVEoIiIsIGVycm9yX2Nv
bGxlY3Rvcl8udGV4dF8pOwotICBBU1NFUlRfVFJVRShmaWxlICE9IE5VTEwpOwotCi0gIEFTU0VS
VF9FUSgxLCBmaWxlLT5tZXNzYWdlX3R5cGVfY291bnQoKSk7Ci0gIEVYUEVDVF9FUSgiRm9vIiwg
ZmlsZS0+bWVzc2FnZV90eXBlKDApLT5uYW1lKCkpOwotCi0gIC8vIEltcG9ydGluZyBhZ2FpbiBz
aG91bGQgcmV0dXJuIHNhbWUgb2JqZWN0LgotICBFWFBFQ1RfRVEoZmlsZSwgaW1wb3J0ZXJfLklt
cG9ydCgiZm9vLnByb3RvIikpOwotfQotCi1URVNUX0YoSW1wb3J0ZXJUZXN0LCBJbXBvcnROZXN0
ZWQpIHsKLSAgLy8gVGVzdCB0aGF0IGltcG9ydGluZyBhIGZpbGUgd2hpY2ggaW1wb3J0cyBhbm90
aGVyIGZpbGUgd29ya3MuCi0gIEFkZEZpbGUoImZvby5wcm90byIsCi0gICAgInN5bnRheCA9IFwi
cHJvdG8yXCI7XG4iCi0gICAgImltcG9ydCBcImJhci5wcm90b1wiO1xuIgotICAgICJtZXNzYWdl
IEZvbyB7XG4iCi0gICAgIiAgb3B0aW9uYWwgQmFyIGJhciA9IDE7XG4iCi0gICAgIn1cbiIpOwot
ICBBZGRGaWxlKCJiYXIucHJvdG8iLAotICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAg
ICJtZXNzYWdlIEJhciB7fVxuIik7Ci0KLSAgLy8gTm90ZSB0aGF0IGJvdGggZmlsZXMgYXJlIGFj
dHVhbGx5IHBhcnNlZCBieSB0aGUgZmlyc3QgY2FsbCB0byBJbXBvcnQoKQotICAvLyBoZXJlLCBz
aW5jZSBmb28ucHJvdG8gaW1wb3J0cyBiYXIucHJvdG8uICBUaGUgc2Vjb25kIGNhbGwganVzdCBy
ZXR1cm5zCi0gIC8vIHRoZSBzYW1lIFByb3RvRmlsZSBmb3IgYmFyLnByb3RvIHdoaWNoIHdhcyBj
b25zdHJ1Y3RlZCB3aGlsZSBpbXBvcnRpbmcKLSAgLy8gZm9vLnByb3RvLiAgV2UgdGVzdCB0aGF0
IHRoaXMgaXMgdGhlIGNhc2UgYmVsb3cgYnkgY2hlY2tpbmcgdGhhdCBiYXIKLSAgLy8gaXMgYW1v
bmcgZm9vJ3MgZGVwZW5kZW5jaWVzIChieSBwb2ludGVyKS4KLSAgY29uc3QgRmlsZURlc2NyaXB0
b3IqIGZvbyA9IGltcG9ydGVyXy5JbXBvcnQoImZvby5wcm90byIpOwotICBjb25zdCBGaWxlRGVz
Y3JpcHRvciogYmFyID0gaW1wb3J0ZXJfLkltcG9ydCgiYmFyLnByb3RvIik7Ci0gIEVYUEVDVF9F
USgiIiwgZXJyb3JfY29sbGVjdG9yXy50ZXh0Xyk7Ci0gIEFTU0VSVF9UUlVFKGZvbyAhPSBOVUxM
KTsKLSAgQVNTRVJUX1RSVUUoYmFyICE9IE5VTEwpOwotCi0gIC8vIENoZWNrIHRoYXQgZm9vJ3Mg
ZGVwZW5kZW5jeSBpcyB0aGUgc2FtZSBvYmplY3QgYXMgYmFyLgotICBBU1NFUlRfRVEoMSwgZm9v
LT5kZXBlbmRlbmN5X2NvdW50KCkpOwotICBFWFBFQ1RfRVEoYmFyLCBmb28tPmRlcGVuZGVuY3ko
MCkpOwotCi0gIC8vIENoZWNrIHRoYXQgZm9vIHByb3Blcmx5IGNyb3NzLWxpbmtzIGJhci4KLSAg
QVNTRVJUX0VRKDEsIGZvby0+bWVzc2FnZV90eXBlX2NvdW50KCkpOwotICBBU1NFUlRfRVEoMSwg
YmFyLT5tZXNzYWdlX3R5cGVfY291bnQoKSk7Ci0gIEFTU0VSVF9FUSgxLCBmb28tPm1lc3NhZ2Vf
dHlwZSgwKS0+ZmllbGRfY291bnQoKSk7Ci0gIEFTU0VSVF9FUShGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfTUVTU0FHRSwKLSAgICAgICAgICAgIGZvby0+bWVzc2FnZV90eXBlKDApLT5maWVsZCgwKS0+
dHlwZSgpKTsKLSAgRVhQRUNUX0VRKGJhci0+bWVzc2FnZV90eXBlKDApLAotICAgICAgICAgICAg
Zm9vLT5tZXNzYWdlX3R5cGUoMCktPmZpZWxkKDApLT5tZXNzYWdlX3R5cGUoKSk7Ci19Ci0KLVRF
U1RfRihJbXBvcnRlclRlc3QsIEZpbGVOb3RGb3VuZCkgewotICAvLyBFcnJvcjogIFBhcnNpbmcg
YSBmaWxlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgRVhQRUNUX1RSVUUoaW1wb3J0ZXJfLkltcG9y
dCgiZm9vLnByb3RvIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9FUSgKLSAgICAiZm9vLnByb3RvOi0x
OjA6IEZpbGUgbm90IGZvdW5kLlxuIiwKLSAgICBlcnJvcl9jb2xsZWN0b3JfLnRleHRfKTsKLX0K
LQotVEVTVF9GKEltcG9ydGVyVGVzdCwgSW1wb3J0Tm90Rm91bmQpIHsKLSAgLy8gRXJyb3I6ICBJ
bXBvcnRpbmcgYSBmaWxlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgQWRkRmlsZSgiZm9vLnByb3Rv
IiwKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAiaW1wb3J0IFwiYmFyLnByb3Rv
XCI7XG4iKTsKLQotICBFWFBFQ1RfVFJVRShpbXBvcnRlcl8uSW1wb3J0KCJmb28ucHJvdG8iKSA9
PSBOVUxMKTsKLSAgRVhQRUNUX0VRKAotICAgICJiYXIucHJvdG86LTE6MDogRmlsZSBub3QgZm91
bmQuXG4iCi0gICAgImZvby5wcm90bzotMTowOiBJbXBvcnQgXCJiYXIucHJvdG9cIiB3YXMgbm90
IGZvdW5kIG9yIGhhZCBlcnJvcnMuXG4iLAotICAgIGVycm9yX2NvbGxlY3Rvcl8udGV4dF8pOwot
fQotCi1URVNUX0YoSW1wb3J0ZXJUZXN0LCBSZWN1cnNpdmVJbXBvcnQpIHsKLSAgLy8gRXJyb3I6
ICBSZWN1cnNpdmUgaW1wb3J0LgotICBBZGRGaWxlKCJyZWN1cnNpdmUxLnByb3RvIiwKLSAgICAi
c3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAiaW1wb3J0IFwicmVjdXJzaXZlMi5wcm90b1wi
O1xuIik7Ci0gIEFkZEZpbGUoInJlY3Vyc2l2ZTIucHJvdG8iLAotICAgICJzeW50YXggPSBcInBy
b3RvMlwiO1xuIgotICAgICJpbXBvcnQgXCJyZWN1cnNpdmUxLnByb3RvXCI7XG4iKTsKLQotICBF
WFBFQ1RfVFJVRShpbXBvcnRlcl8uSW1wb3J0KCJyZWN1cnNpdmUxLnByb3RvIikgPT0gTlVMTCk7
Ci0gIEVYUEVDVF9FUSgKLSAgICAicmVjdXJzaXZlMS5wcm90bzotMTowOiBGaWxlIHJlY3Vyc2l2
ZWx5IGltcG9ydHMgaXRzZWxmOiByZWN1cnNpdmUxLnByb3RvICIKLSAgICAgICItPiByZWN1cnNp
dmUyLnByb3RvIC0+IHJlY3Vyc2l2ZTEucHJvdG9cbiIKLSAgICAicmVjdXJzaXZlMi5wcm90bzot
MTowOiBJbXBvcnQgXCJyZWN1cnNpdmUxLnByb3RvXCIgd2FzIG5vdCBmb3VuZCAiCi0gICAgICAi
b3IgaGFkIGVycm9ycy5cbiIKLSAgICAicmVjdXJzaXZlMS5wcm90bzotMTowOiBJbXBvcnQgXCJy
ZWN1cnNpdmUyLnByb3RvXCIgd2FzIG5vdCBmb3VuZCAiCi0gICAgICAib3IgaGFkIGVycm9ycy5c
biIsCi0gICAgZXJyb3JfY29sbGVjdG9yXy50ZXh0Xyk7Ci19Ci0KLQotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ci1jbGFzcyBEaXNrU291cmNlVHJlZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJv
dGVjdGVkOgotICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSB7Ci0gICAgZGlybmFtZXNfLnB1c2hfYmFj
ayhUZXN0VGVtcERpcigpICsgIi90ZXN0X3Byb3RvMl9pbXBvcnRfcGF0aF8xIik7Ci0gICAgZGly
bmFtZXNfLnB1c2hfYmFjayhUZXN0VGVtcERpcigpICsgIi90ZXN0X3Byb3RvMl9pbXBvcnRfcGF0
aF8yIik7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpcm5hbWVzXy5zaXplKCk7IGkrKykg
ewotICAgICAgaWYgKEZpbGVFeGlzdHMoZGlybmFtZXNfW2ldKSkgewotICAgICAgICBGaWxlOjpE
ZWxldGVSZWN1cnNpdmVseShkaXJuYW1lc19baV0sIE5VTEwsIE5VTEwpOwotICAgICAgfQotICAg
ICAgR09PR0xFX0NIRUNLX09LKEZpbGU6OkNyZWF0ZURpcihkaXJuYW1lc19baV0sIDA3NzcpKTsK
LSAgICB9Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSB7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBkaXJuYW1lc18uc2l6ZSgpOyBpKyspIHsKLSAgICAgIGlmIChGaWxlRXhpc3Rz
KGRpcm5hbWVzX1tpXSkpIHsKLSAgICAgICAgRmlsZTo6RGVsZXRlUmVjdXJzaXZlbHkoZGlybmFt
ZXNfW2ldLCBOVUxMLCBOVUxMKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICB2b2lkIEFkZEZp
bGUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgY2hhciogY29udGVudHMpIHsKLSAgICBH
T09HTEVfQ0hFQ0tfT0soRmlsZTo6U2V0Q29udGVudHMoZmlsZW5hbWUsIGNvbnRlbnRzLCB0cnVl
KSk7Ci0gIH0KLQotICB2b2lkIEFkZFN1YmRpcihjb25zdCBzdHJpbmcmIGRpcm5hbWUpIHsKLSAg
ICBHT09HTEVfQ0hFQ0tfT0soRmlsZTo6Q3JlYXRlRGlyKGRpcm5hbWUsIDA3NzcpKTsKLSAgfQot
Ci0gIHZvaWQgRXhwZWN0RmlsZUNvbnRlbnRzKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4cGVjdGVkX2NvbnRlbnRzKSB7Ci0g
ICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxpbzo6WmVyb0NvcHlJbnB1dFN0cmVhbT4g
aW5wdXQoc291cmNlX3RyZWVfLk9wZW4oZmlsZW5hbWUpKTsKLQotICAgIEFTU0VSVF9GQUxTRShp
bnB1dCA9PSBOVUxMKTsKLQotICAgIC8vIFJlYWQgYWxsIHRoZSBkYXRhIGZyb20gdGhlIGZpbGUu
Ci0gICAgc3RyaW5nIGZpbGVfY29udGVudHM7Ci0gICAgY29uc3Qgdm9pZCogZGF0YTsKLSAgICBp
bnQgc2l6ZTsKLSAgICB3aGlsZSAoaW5wdXQtPk5leHQoJmRhdGEsICZzaXplKSkgewotICAgICAg
ZmlsZV9jb250ZW50cy5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSks
IHNpemUpOwotICAgIH0KLQotICAgIEVYUEVDVF9FUShleHBlY3RlZF9jb250ZW50cywgZmlsZV9j
b250ZW50cyk7Ci0gIH0KLQotICB2b2lkIEV4cGVjdENhbm5vdE9wZW5GaWxlKGNvbnN0IHN0cmlu
ZyYgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBl
cnJvcl9tZXNzYWdlKSB7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxpbzo6WmVy
b0NvcHlJbnB1dFN0cmVhbT4gaW5wdXQoc291cmNlX3RyZWVfLk9wZW4oZmlsZW5hbWUpKTsKLSAg
ICBFWFBFQ1RfVFJVRShpbnB1dCA9PSBOVUxMKTsKLSAgICBFWFBFQ1RfRVEoZXJyb3JfbWVzc2Fn
ZSwgc291cmNlX3RyZWVfLkdldExhc3RFcnJvck1lc3NhZ2UoKSk7Ci0gIH0KLQotICBEaXNrU291
cmNlVHJlZSBzb3VyY2VfdHJlZV87Ci0KLSAgLy8gUGF0aHMgb2YgdHdvIG9uLWRpc2sgZGlyZWN0
b3JpZXMgdG8gdXNlIGR1cmluZyB0aGUgdGVzdC4KLSAgdmVjdG9yPHN0cmluZz4gZGlybmFtZXNf
OwotfTsKLQotVEVTVF9GKERpc2tTb3VyY2VUcmVlVGVzdCwgTWFwUm9vdCkgewotICAvLyBUZXN0
IG9wZW5pbmcgYSBmaWxlIGluIGEgZGlyZWN0b3J5IHRoYXQgaXMgbWFwcGVkIHRvIHRoZSByb290
IG9mIHRoZQotICAvLyBzb3VyY2UgdHJlZS4KLSAgQWRkRmlsZShkaXJuYW1lc19bMF0gKyAiL2Zv
byIsICJIZWxsbyBXb3JsZCEiKTsKLSAgc291cmNlX3RyZWVfLk1hcFBhdGgoIiIsIGRpcm5hbWVz
X1swXSk7Ci0KLSAgRXhwZWN0RmlsZUNvbnRlbnRzKCJmb28iLCAiSGVsbG8gV29ybGQhIik7Ci0g
IEV4cGVjdENhbm5vdE9wZW5GaWxlKCJiYXIiLCAiRmlsZSBub3QgZm91bmQuIik7Ci19Ci0KLVRF
U1RfRihEaXNrU291cmNlVHJlZVRlc3QsIE1hcERpcmVjdG9yeSkgewotICAvLyBUZXN0IG9wZW5p
bmcgYSBmaWxlIGluIGEgZGlyZWN0b3J5IHRoYXQgaXMgbWFwcGVkIHRvIHNvbWV3aGVyZSBvdGhl
cgotICAvLyB0aGFuIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLQotICBBZGRGaWxlKGRp
cm5hbWVzX1swXSArICIvZm9vIiwgIkhlbGxvIFdvcmxkISIpOwotICBzb3VyY2VfdHJlZV8uTWFw
UGF0aCgiYmF6IiwgZGlybmFtZXNfWzBdKTsKLQotICBFeHBlY3RGaWxlQ29udGVudHMoImJhei9m
b28iLCAiSGVsbG8gV29ybGQhIik7Ci0gIEV4cGVjdENhbm5vdE9wZW5GaWxlKCJiYXovYmFyIiwg
IkZpbGUgbm90IGZvdW5kLiIpOwotICBFeHBlY3RDYW5ub3RPcGVuRmlsZSgiZm9vIiwgIkZpbGUg
bm90IGZvdW5kLiIpOwotICBFeHBlY3RDYW5ub3RPcGVuRmlsZSgiYmFyIiwgIkZpbGUgbm90IGZv
dW5kLiIpOwotCi0gIC8vIE5vbi1jYW5vbmljYWwgZmlsZSBuYW1lcyBzaG91bGQgbm90IHdvcmsu
Ci0gIEV4cGVjdENhbm5vdE9wZW5GaWxlKCJiYXovL2ZvbyIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICJCYWNrc2xhc2hlcywgY29uc2VjdXRpdmUgc2xhc2hlcywgXCIuXCIsIG9yIFwiLi5cIiBh
cmUgIgotICAgICAgICAgICAgICAgICAgICAgICAibm90IGFsbG93ZWQgaW4gdGhlIHZpcnR1YWwg
cGF0aCIpOwotICBFeHBlY3RDYW5ub3RPcGVuRmlsZSgiYmF6Ly4uL2Jhei9mb28iLAotICAgICAg
ICAgICAgICAgICAgICAgICAiQmFja3NsYXNoZXMsIGNvbnNlY3V0aXZlIHNsYXNoZXMsIFwiLlwi
LCBvciBcIi4uXCIgYXJlICIKLSAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGxvd2VkIGlu
IHRoZSB2aXJ0dWFsIHBhdGgiKTsKLSAgRXhwZWN0Q2Fubm90T3BlbkZpbGUoImJhei8uL2ZvbyIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICJCYWNrc2xhc2hlcywgY29uc2VjdXRpdmUgc2xhc2hl
cywgXCIuXCIsIG9yIFwiLi5cIiBhcmUgIgotICAgICAgICAgICAgICAgICAgICAgICAibm90IGFs
bG93ZWQgaW4gdGhlIHZpcnR1YWwgcGF0aCIpOwotICBFeHBlY3RDYW5ub3RPcGVuRmlsZSgiYmF6
L2Zvby8iLCAiRmlsZSBub3QgZm91bmQuIik7Ci19Ci0KLVRFU1RfRihEaXNrU291cmNlVHJlZVRl
c3QsIE5vUGFyZW50KSB7Ci0gIC8vIFRlc3QgdGhhdCB3ZSBjYW5ub3Qgb3BlbiBmaWxlcyBpbiBh
IHBhcmVudCBvZiBhIG1hcHBlZCBkaXJlY3RvcnkuCi0KLSAgQWRkRmlsZShkaXJuYW1lc19bMF0g
KyAiL2ZvbyIsICJIZWxsbyBXb3JsZCEiKTsKLSAgQWRkU3ViZGlyKGRpcm5hbWVzX1swXSArICIv
YmFyIik7Ci0gIEFkZEZpbGUoZGlybmFtZXNfWzBdICsgIi9iYXIvYmF6IiwgIkJsYWguIik7Ci0g
IHNvdXJjZV90cmVlXy5NYXBQYXRoKCIiLCBkaXJuYW1lc19bMF0gKyAiL2JhciIpOwotCi0gIEV4
cGVjdEZpbGVDb250ZW50cygiYmF6IiwgIkJsYWguIik7Ci0gIEV4cGVjdENhbm5vdE9wZW5GaWxl
KCIuLi9mb28iLAotICAgICAgICAgICAgICAgICAgICAgICAiQmFja3NsYXNoZXMsIGNvbnNlY3V0
aXZlIHNsYXNoZXMsIFwiLlwiLCBvciBcIi4uXCIgYXJlICIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIm5vdCBhbGxvd2VkIGluIHRoZSB2aXJ0dWFsIHBhdGgiKTsKLSAgRXhwZWN0Q2Fubm90T3Bl
bkZpbGUoIi4uL2Jhci9iYXoiLAotICAgICAgICAgICAgICAgICAgICAgICAiQmFja3NsYXNoZXMs
IGNvbnNlY3V0aXZlIHNsYXNoZXMsIFwiLlwiLCBvciBcIi4uXCIgYXJlICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIm5vdCBhbGxvd2VkIGluIHRoZSB2aXJ0dWFsIHBhdGgiKTsKLX0KLQotVEVT
VF9GKERpc2tTb3VyY2VUcmVlVGVzdCwgTWFwRmlsZSkgewotICAvLyBUZXN0IG9wZW5pbmcgYSBm
aWxlIHRoYXQgaXMgbWFwcGVkIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSB0cmVlLgotCi0gIEFk
ZEZpbGUoZGlybmFtZXNfWzBdICsgIi9mb28iLCAiSGVsbG8gV29ybGQhIik7Ci0gIHNvdXJjZV90
cmVlXy5NYXBQYXRoKCJmb28iLCBkaXJuYW1lc19bMF0gKyAiL2ZvbyIpOwotCi0gIEV4cGVjdEZp
bGVDb250ZW50cygiZm9vIiwgIkhlbGxvIFdvcmxkISIpOwotICBFeHBlY3RDYW5ub3RPcGVuRmls
ZSgiYmFyIiwgIkZpbGUgbm90IGZvdW5kLiIpOwotfQotCi1URVNUX0YoRGlza1NvdXJjZVRyZWVU
ZXN0LCBTZWFyY2hNdWx0aXBsZURpcmVjdG9yaWVzKSB7Ci0gIC8vIFRlc3QgbWFwcGluZyBhbmQg
c2VhcmNoaW5nIG11bHRpcGxlIGRpcmVjdG9yaWVzLgotCi0gIEFkZEZpbGUoZGlybmFtZXNfWzBd
ICsgIi9mb28iLCAiSGVsbG8gV29ybGQhIik7Ci0gIEFkZEZpbGUoZGlybmFtZXNfWzFdICsgIi9m
b28iLCAiVGhpcyBmaWxlIHNob3VsZCBiZSBoaWRkZW4uIik7Ci0gIEFkZEZpbGUoZGlybmFtZXNf
WzFdICsgIi9iYXIiLCAiR29vZGJ5ZSBXb3JsZCEiKTsKLSAgc291cmNlX3RyZWVfLk1hcFBhdGgo
IiIsIGRpcm5hbWVzX1swXSk7Ci0gIHNvdXJjZV90cmVlXy5NYXBQYXRoKCIiLCBkaXJuYW1lc19b
MV0pOwotCi0gIEV4cGVjdEZpbGVDb250ZW50cygiZm9vIiwgIkhlbGxvIFdvcmxkISIpOwotICBF
eHBlY3RGaWxlQ29udGVudHMoImJhciIsICJHb29kYnllIFdvcmxkISIpOwotICBFeHBlY3RDYW5u
b3RPcGVuRmlsZSgiYmF6IiwgIkZpbGUgbm90IGZvdW5kLiIpOwotfQotCi1URVNUX0YoRGlza1Nv
dXJjZVRyZWVUZXN0LCBPcmRlcmluZ1RydW1wc1NwZWNpZmljaXR5KSB7Ci0gIC8vIFRlc3QgdGhh
dCBkaXJlY3RvcmllcyBhcmUgYWx3YXlzIHNlYXJjaGVkIGluIG9yZGVyLCBldmVuIHdoZW4gYSBs
YXR0ZXIKLSAgLy8gZGlyZWN0b3J5IGlzIG1vcmUtc3BlY2lmaWMgdGhhbiBhIGZvcm1lciBvbmUu
Ci0KLSAgLy8gQ3JlYXRlIHRoZSAiYmFyIiBkaXJlY3Rvcnkgc28gd2UgY2FuIHB1dCBhIGZpbGUg
aW4gaXQuCi0gIEdPT0dMRV9DSEVDS19PSyhGaWxlOjpDcmVhdGVEaXIoZGlybmFtZXNfWzBdICsg
Ii9iYXIiLCAwNzc3KSk7Ci0KLSAgLy8gQWRkIGZpbGVzIGFuZCBtYXAgcGF0aHMuCi0gIEFkZEZp
bGUoZGlybmFtZXNfWzBdICsgIi9iYXIvZm9vIiwgIkhlbGxvIFdvcmxkISIpOwotICBBZGRGaWxl
KGRpcm5hbWVzX1sxXSArICIvZm9vIiwgIlRoaXMgZmlsZSBzaG91bGQgYmUgaGlkZGVuLiIpOwot
ICBzb3VyY2VfdHJlZV8uTWFwUGF0aCgiIiwgZGlybmFtZXNfWzBdKTsKLSAgc291cmNlX3RyZWVf
Lk1hcFBhdGgoImJhciIsIGRpcm5hbWVzX1sxXSk7Ci0KLSAgLy8gQ2hlY2suCi0gIEV4cGVjdEZp
bGVDb250ZW50cygiYmFyL2ZvbyIsICJIZWxsbyBXb3JsZCEiKTsKLX0KLQotVEVTVF9GKERpc2tT
b3VyY2VUcmVlVGVzdCwgRGlza0ZpbGVUb1ZpcnR1YWxGaWxlKSB7Ci0gIC8vIFRlc3QgRGlza0Zp
bGVUb1ZpcnR1YWxGaWxlLgotCi0gIEFkZEZpbGUoZGlybmFtZXNfWzBdICsgIi9mb28iLCAiSGVs
bG8gV29ybGQhIik7Ci0gIEFkZEZpbGUoZGlybmFtZXNfWzFdICsgIi9mb28iLCAiVGhpcyBmaWxl
IHNob3VsZCBiZSBoaWRkZW4uIik7Ci0gIHNvdXJjZV90cmVlXy5NYXBQYXRoKCJiYXIiLCBkaXJu
YW1lc19bMF0pOwotICBzb3VyY2VfdHJlZV8uTWFwUGF0aCgiYmFyIiwgZGlybmFtZXNfWzFdKTsK
LQotICBzdHJpbmcgdmlydHVhbF9maWxlOwotICBzdHJpbmcgc2hhZG93aW5nX2Rpc2tfZmlsZTsK
LQotICBFWFBFQ1RfRVEoRGlza1NvdXJjZVRyZWU6Ok5PX01BUFBJTkcsCi0gICAgc291cmNlX3Ry
ZWVfLkRpc2tGaWxlVG9WaXJ0dWFsRmlsZSgKLSAgICAgICIvZm9vIiwgJnZpcnR1YWxfZmlsZSwg
JnNoYWRvd2luZ19kaXNrX2ZpbGUpKTsKLQotICBFWFBFQ1RfRVEoRGlza1NvdXJjZVRyZWU6OlNI
QURPV0VELAotICAgIHNvdXJjZV90cmVlXy5EaXNrRmlsZVRvVmlydHVhbEZpbGUoCi0gICAgICBk
aXJuYW1lc19bMV0gKyAiL2ZvbyIsICZ2aXJ0dWFsX2ZpbGUsICZzaGFkb3dpbmdfZGlza19maWxl
KSk7Ci0gIEVYUEVDVF9FUSgiYmFyL2ZvbyIsIHZpcnR1YWxfZmlsZSk7Ci0gIEVYUEVDVF9FUShk
aXJuYW1lc19bMF0gKyAiL2ZvbyIsIHNoYWRvd2luZ19kaXNrX2ZpbGUpOwotCi0gIEVYUEVDVF9F
UShEaXNrU291cmNlVHJlZTo6Q0FOTk9UX09QRU4sCi0gICAgc291cmNlX3RyZWVfLkRpc2tGaWxl
VG9WaXJ0dWFsRmlsZSgKLSAgICAgIGRpcm5hbWVzX1sxXSArICIvYmF6IiwgJnZpcnR1YWxfZmls
ZSwgJnNoYWRvd2luZ19kaXNrX2ZpbGUpKTsKLSAgRVhQRUNUX0VRKCJiYXIvYmF6IiwgdmlydHVh
bF9maWxlKTsKLQotICBFWFBFQ1RfRVEoRGlza1NvdXJjZVRyZWU6OlNVQ0NFU1MsCi0gICAgc291
cmNlX3RyZWVfLkRpc2tGaWxlVG9WaXJ0dWFsRmlsZSgKLSAgICAgIGRpcm5hbWVzX1swXSArICIv
Zm9vIiwgJnZpcnR1YWxfZmlsZSwgJnNoYWRvd2luZ19kaXNrX2ZpbGUpKTsKLSAgRVhQRUNUX0VR
KCJiYXIvZm9vIiwgdmlydHVhbF9maWxlKTsKLX0KLQotVEVTVF9GKERpc2tTb3VyY2VUcmVlVGVz
dCwgRGlza0ZpbGVUb1ZpcnR1YWxGaWxlQ2Fub25pY2FsaXphdGlvbikgewotICAvLyBUZXN0IGhh
bmRsaW5nIG9mICIuLiIsICIuIiwgZXRjLiBpbiBEaXNrRmlsZVRvVmlydHVhbEZpbGUoKS4KLQot
ICBzb3VyY2VfdHJlZV8uTWFwUGF0aCgiZGlyMSIsICIuLiIpOwotICBzb3VyY2VfdHJlZV8uTWFw
UGF0aCgiZGlyMiIsICIuLi8uLi9mb28iKTsKLSAgc291cmNlX3RyZWVfLk1hcFBhdGgoImRpcjMi
LCAiLi9mb28vYmFyLy4iKTsKLSAgc291cmNlX3RyZWVfLk1hcFBhdGgoImRpcjQiLCAiLiIpOwot
ICBzb3VyY2VfdHJlZV8uTWFwUGF0aCgiIiwgIi9xdXgiKTsKLSAgc291cmNlX3RyZWVfLk1hcFBh
dGgoImRpcjUiLCAiL3F1dXgvIik7Ci0KLSAgc3RyaW5nIHZpcnR1YWxfZmlsZTsKLSAgc3RyaW5n
IHNoYWRvd2luZ19kaXNrX2ZpbGU7Ci0KLSAgLy8gIi4uLy4uIiBzaG91bGQgbm90IGJlIGNvbnNp
ZGVyZWQgdG8gYmUgdW5kZXIgIi4uIi4KLSAgRVhQRUNUX0VRKERpc2tTb3VyY2VUcmVlOjpOT19N
QVBQSU5HLAotICAgIHNvdXJjZV90cmVlXy5EaXNrRmlsZVRvVmlydHVhbEZpbGUoCi0gICAgICAi
Li4vLi4vYmF6IiwgJnZpcnR1YWxfZmlsZSwgJnNoYWRvd2luZ19kaXNrX2ZpbGUpKTsKLQotICAv
LyAiL2ZvbyIgaXMgbm90IG1hcHBlZCAoaXQgc2hvdWxkIG5vdCBiZSBtaXNpbnRlcHJldGVkIGFz
IGJlaW5nIHVuZGVyICIuIikuCi0gIEVYUEVDVF9FUShEaXNrU291cmNlVHJlZTo6Tk9fTUFQUElO
RywKLSAgICBzb3VyY2VfdHJlZV8uRGlza0ZpbGVUb1ZpcnR1YWxGaWxlKAotICAgICAgIi9mb28i
LCAmdmlydHVhbF9maWxlLCAmc2hhZG93aW5nX2Rpc2tfZmlsZSkpOwotCi0jaWZkZWYgV0lOMzIK
LSAgLy8gIkM6XGZvbyIgaXMgbm90IG1hcHBlZCAoaXQgc2hvdWxkIG5vdCBiZSBtaXNpbnRlcHJl
dGVkIGFzIGJlaW5nIHVuZGVyICIuIikuCi0gIEVYUEVDVF9FUShEaXNrU291cmNlVHJlZTo6Tk9f
TUFQUElORywKLSAgICBzb3VyY2VfdHJlZV8uRGlza0ZpbGVUb1ZpcnR1YWxGaWxlKAotICAgICAg
IkM6XFxmb28iLCAmdmlydHVhbF9maWxlLCAmc2hhZG93aW5nX2Rpc2tfZmlsZSkpOwotI2VuZGlm
ICAvLyBXSU4zMgotCi0gIC8vIEJ1dCAiLi4vYmF6IiBzaG91bGQgYmUuCi0gIEVYUEVDVF9FUShE
aXNrU291cmNlVHJlZTo6Q0FOTk9UX09QRU4sCi0gICAgc291cmNlX3RyZWVfLkRpc2tGaWxlVG9W
aXJ0dWFsRmlsZSgKLSAgICAgICIuLi9iYXoiLCAmdmlydHVhbF9maWxlLCAmc2hhZG93aW5nX2Rp
c2tfZmlsZSkpOwotICBFWFBFQ1RfRVEoImRpcjEvYmF6IiwgdmlydHVhbF9maWxlKTsKLQotICAv
LyAiLi4vLi4vZm9vL2JheiIgaXMgdW5kZXIgIi4uLy4uL2ZvbyIuCi0gIEVYUEVDVF9FUShEaXNr
U291cmNlVHJlZTo6Q0FOTk9UX09QRU4sCi0gICAgc291cmNlX3RyZWVfLkRpc2tGaWxlVG9WaXJ0
dWFsRmlsZSgKLSAgICAgICIuLi8uLi9mb28vYmF6IiwgJnZpcnR1YWxfZmlsZSwgJnNoYWRvd2lu
Z19kaXNrX2ZpbGUpKTsKLSAgRVhQRUNUX0VRKCJkaXIyL2JheiIsIHZpcnR1YWxfZmlsZSk7Ci0K
LSAgLy8gImZvby8uL2Jhci9iYXoiIGlzIHVuZGVyICIuL2Zvby9iYXIvLiIuCi0gIEVYUEVDVF9F
UShEaXNrU291cmNlVHJlZTo6Q0FOTk9UX09QRU4sCi0gICAgc291cmNlX3RyZWVfLkRpc2tGaWxl
VG9WaXJ0dWFsRmlsZSgKLSAgICAgICJmb28vYmFyL2JheiIsICZ2aXJ0dWFsX2ZpbGUsICZzaGFk
b3dpbmdfZGlza19maWxlKSk7Ci0gIEVYUEVDVF9FUSgiZGlyMy9iYXoiLCB2aXJ0dWFsX2ZpbGUp
OwotCi0gIC8vICJiYXIiIGlzIHVuZGVyICIuIi4KLSAgRVhQRUNUX0VRKERpc2tTb3VyY2VUcmVl
OjpDQU5OT1RfT1BFTiwKLSAgICBzb3VyY2VfdHJlZV8uRGlza0ZpbGVUb1ZpcnR1YWxGaWxlKAot
ICAgICAgImJhciIsICZ2aXJ0dWFsX2ZpbGUsICZzaGFkb3dpbmdfZGlza19maWxlKSk7Ci0gIEVY
UEVDVF9FUSgiZGlyNC9iYXIiLCB2aXJ0dWFsX2ZpbGUpOwotCi0gIC8vICIvcXV4L2JheiIgaXMg
dW5kZXIgIi9xdXgiLgotICBFWFBFQ1RfRVEoRGlza1NvdXJjZVRyZWU6OkNBTk5PVF9PUEVOLAot
ICAgIHNvdXJjZV90cmVlXy5EaXNrRmlsZVRvVmlydHVhbEZpbGUoCi0gICAgICAiL3F1eC9iYXoi
LCAmdmlydHVhbF9maWxlLCAmc2hhZG93aW5nX2Rpc2tfZmlsZSkpOwotICBFWFBFQ1RfRVEoImJh
eiIsIHZpcnR1YWxfZmlsZSk7Ci0KLSAgLy8gIi9xdXV4L2JhciIgaXMgdW5kZXIgIi9xdXV4Ii4K
LSAgRVhQRUNUX0VRKERpc2tTb3VyY2VUcmVlOjpDQU5OT1RfT1BFTiwKLSAgICBzb3VyY2VfdHJl
ZV8uRGlza0ZpbGVUb1ZpcnR1YWxGaWxlKAotICAgICAgIi9xdXV4L2JhciIsICZ2aXJ0dWFsX2Zp
bGUsICZzaGFkb3dpbmdfZGlza19maWxlKSk7Ci0gIEVYUEVDVF9FUSgiZGlyNS9iYXIiLCB2aXJ0
dWFsX2ZpbGUpOwotfQotCi1URVNUX0YoRGlza1NvdXJjZVRyZWVUZXN0LCBWaXJ0dWFsRmlsZVRv
RGlza0ZpbGUpIHsKLSAgLy8gVGVzdCBWaXJ0dWFsRmlsZVRvRGlza0ZpbGUuCi0KLSAgQWRkRmls
ZShkaXJuYW1lc19bMF0gKyAiL2ZvbyIsICJIZWxsbyBXb3JsZCEiKTsKLSAgQWRkRmlsZShkaXJu
YW1lc19bMV0gKyAiL2ZvbyIsICJUaGlzIGZpbGUgc2hvdWxkIGJlIGhpZGRlbi4iKTsKLSAgQWRk
RmlsZShkaXJuYW1lc19bMV0gKyAiL3F1dXgiLCAiVGhpcyBmaWxlIHNob3VsZCBub3QgYmUgaGlk
ZGVuLiIpOwotICBzb3VyY2VfdHJlZV8uTWFwUGF0aCgiYmFyIiwgZGlybmFtZXNfWzBdKTsKLSAg
c291cmNlX3RyZWVfLk1hcFBhdGgoImJhciIsIGRpcm5hbWVzX1sxXSk7Ci0KLSAgLy8gRXhpc3Rl
bnQgZmlsZXMsIHNoYWRvd2VkIGFuZCBub24tc2hhZG93ZWQgY2FzZS4KLSAgc3RyaW5nIGRpc2tf
ZmlsZTsKLSAgRVhQRUNUX1RSVUUoc291cmNlX3RyZWVfLlZpcnR1YWxGaWxlVG9EaXNrRmlsZSgi
YmFyL2ZvbyIsICZkaXNrX2ZpbGUpKTsKLSAgRVhQRUNUX0VRKGRpcm5hbWVzX1swXSArICIvZm9v
IiwgZGlza19maWxlKTsKLSAgRVhQRUNUX1RSVUUoc291cmNlX3RyZWVfLlZpcnR1YWxGaWxlVG9E
aXNrRmlsZSgiYmFyL3F1dXgiLCAmZGlza19maWxlKSk7Ci0gIEVYUEVDVF9FUShkaXJuYW1lc19b
MV0gKyAiL3F1dXgiLCBkaXNrX2ZpbGUpOwotCi0gIC8vIE5vbmV4aXN0ZW50IGZpbGUgaW4gZXhp
c3RlbnQgZGlyZWN0b3J5IGFuZCB2aWNlIHZlcnNhLgotICBzdHJpbmcgbm90X3RvdWNoZWQgPSAi
bm90IHRvdWNoZWQiOwotICBFWFBFQ1RfRkFMU0Uoc291cmNlX3RyZWVfLlZpcnR1YWxGaWxlVG9E
aXNrRmlsZSgiYmFyL2JheiIsICZub3RfdG91Y2hlZCkpOwotICBFWFBFQ1RfRVEoIm5vdCB0b3Vj
aGVkIiwgbm90X3RvdWNoZWQpOwotICBFWFBFQ1RfRkFMU0Uoc291cmNlX3RyZWVfLlZpcnR1YWxG
aWxlVG9EaXNrRmlsZSgiYmF6L2ZvbyIsICZub3RfdG91Y2hlZCkpOwotICBFWFBFQ1RfRVEoIm5v
dCB0b3VjaGVkIiwgbm90X3RvdWNoZWQpOwotCi0gIC8vIEFjY2VwdCBOVUxMIGFzIG91dHB1dCBw
YXJhbWV0ZXIuCi0gIEVYUEVDVF9UUlVFKHNvdXJjZV90cmVlXy5WaXJ0dWFsRmlsZVRvRGlza0Zp
bGUoImJhci9mb28iLCBOVUxMKSk7Ci0gIEVYUEVDVF9GQUxTRShzb3VyY2VfdHJlZV8uVmlydHVh
bEZpbGVUb0Rpc2tGaWxlKCJiYXovZm9vIiwgTlVMTCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UK
LQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfY29udGV4dC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfY29udGV4dC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGExMTI4
ODhjMGJjYTM2MjNlYTQ0ZjcxZjBmMjgxZDJhNmI0ZTZiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2
YS9qYXZhX2NvbnRleHQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2NvbnRleHQuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX25hbWVfcmVzb2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1
dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hcF91dGlsLmg+Ci0KLW5h
bWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxl
ciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLUNvbnRleHQ6OkNvbnRleHQoY29uc3QgRmlsZURlc2Ny
aXB0b3IqIGZpbGUpCi0gICAgOiBuYW1lX3Jlc29sdmVyXyhuZXcgQ2xhc3NOYW1lUmVzb2x2ZXIp
LCBlbmZvcmNlX2xpdGVfKGZhbHNlKSB7Ci0gIEluaXRpYWxpemVGaWVsZEdlbmVyYXRvckluZm8o
ZmlsZSk7Ci19Ci0KLUNvbnRleHQ6On5Db250ZXh0KCkgewotfQotCi1DbGFzc05hbWVSZXNvbHZl
ciogQ29udGV4dDo6R2V0TmFtZVJlc29sdmVyKCkgewotICByZXR1cm4gbmFtZV9yZXNvbHZlcl8u
Z2V0KCk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0vLyBXaGV0aGVyIHR3byBmaWVsZHMgaGF2ZSBjb25m
bGljdGluZyBhY2Nlc3NvcnMgKGFzc3VtaW5nIG5hbWUxIGFuZCBuYW1lMgotLy8gYXJlIGRpZmZl
cmVudCkuIG5hbWUxIGFuZCBuYW1lMiBhcmUgZmllbGQxIGFuZCBmaWVsZDIncyBjYW1lbC1jYXNl
IG5hbWUKLS8vIHJlc3BlY3RpdmVseS4KLWJvb2wgSXNDb25mbGljdGluZyhjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkMSwgY29uc3Qgc3RyaW5nJiBuYW1lMSwKLSAgICAgICAgICAgICAgICAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkMiwgY29uc3Qgc3RyaW5nJiBuYW1lMiwKLSAg
ICAgICAgICAgICAgICAgICBzdHJpbmcqIGluZm8pIHsKLSAgaWYgKGZpZWxkMS0+aXNfcmVwZWF0
ZWQoKSkgewotICAgIGlmIChmaWVsZDItPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgIC8vIEJvdGgg
ZmllbGRzIGFyZSByZXBlYXRlZC4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgLy8gZmllbGQxIGlzIHJlcGVhdGVkLCBhbmQgZmllbGQyIGlzIG5vdC4KLSAgICAgIGlm
IChuYW1lMSArICJDb3VudCIgPT0gbmFtZTIpIHsKLSAgICAgICAgKmluZm8gPSAiYm90aCByZXBl
YXRlZCBmaWVsZCBcIiIgKyBmaWVsZDEtPm5hbWUoKSArICJcIiBhbmQgc2luZ3VsYXIgIiArCi0g
ICAgICAgICAgICAiZmllbGQgXCIiICsgZmllbGQyLT5uYW1lKCkgKyAiXCIgZ2VuZXJhdGVzIHRo
ZSBtZXRob2QgXCIiICsKLSAgICAgICAgICAgICJnZXQiICsgbmFtZTEgKyAiQ291bnQoKVwiIjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAobmFtZTEgKyAiTGlzdCIg
PT0gbmFtZTIpIHsKLSAgICAgICAgKmluZm8gPSAiYm90aCByZXBlYXRlZCBmaWVsZCBcIiIgKyBm
aWVsZDEtPm5hbWUoKSArICJcIiBhbmQgc2luZ3VsYXIgIiArCi0gICAgICAgICAgICAiZmllbGQg
XCIiICsgZmllbGQyLT5uYW1lKCkgKyAiXCIgZ2VuZXJhdGVzIHRoZSBtZXRob2QgXCIiICsKLSAg
ICAgICAgICAgICJnZXQiICsgbmFtZTEgKyAiTGlzdCgpXCIiOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIH0KLSAgICAgIC8vIFdlbGwsIHRoZXJlIGFyZSBvYnZpb3VzbHkgbWFueSBtb3Jl
IGNvbmZsaWN0aW5nIGNhc2VzLCBidXQgaXQgcHJvYmFibHkKLSAgICAgIC8vIGRvZXNuJ3Qgd29y
dGggdGhlIGVmZm9ydCB0byBleGhhdXN0IGFsbCBvZiB0aGVtIGJlY2F1c2UgdGhleSByYXJlbHkK
LSAgICAgIC8vIGhhcHBlbiBhbmQgYXMgd2UgYXJlIGNvbnRpbnVpbmcgYWRkaW5nIG5ldyBtZXRo
b2RzL2NoYW5naW5nIGV4aXN0aW5nCi0gICAgICAvLyBtZXRob2RzIHRoZSBudW1iZXIgb2YgZGlm
ZmVyZW50IGNvbmZsaWN0aW5nIGNhc2VzIHdpbGwga2VlcCBncm93aW5nLgotICAgICAgLy8gV2Ug
Y2FuIGp1c3QgYWRkIG1vcmUgY2FzZXMgaGVyZSB3aGVuIHRoZXkgYXJlIGZvdW5kIGluIHRoZSBy
ZWFsIHdvcmxkLgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBp
ZiAoZmllbGQyLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgICByZXR1cm4gSXNDb25mbGljdGluZyhm
aWVsZDIsIG5hbWUyLCBmaWVsZDEsIG5hbWUxLCBpbmZvKTsKLSAgICB9IGVsc2UgewotICAgICAg
Ly8gTm9uZSBvZiB0aGUgdHdvIGZpZWxkcyBhcmUgcmVwZWF0ZWQuCi0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICB9Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotdm9pZCBDb250ZXh0OjpJbml0
aWFsaXplRmllbGRHZW5lcmF0b3JJbmZvKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKSB7Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+bWVzc2FnZV90eXBlX2NvdW50KCk7ICsraSkgewot
ICAgIEluaXRpYWxpemVGaWVsZEdlbmVyYXRvckluZm9Gb3JNZXNzYWdlKGZpbGUtPm1lc3NhZ2Vf
dHlwZShpKSk7Ci0gIH0KLX0KLQotdm9pZCBDb250ZXh0OjpJbml0aWFsaXplRmllbGRHZW5lcmF0
b3JJbmZvRm9yTWVzc2FnZSgKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBtZXNzYWdlKSB7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+bmVzdGVkX3R5cGVfY291bnQoKTsgKytpKSB7Ci0g
ICAgSW5pdGlhbGl6ZUZpZWxkR2VuZXJhdG9ySW5mb0Zvck1lc3NhZ2UobWVzc2FnZS0+bmVzdGVk
X3R5cGUoaSkpOwotICB9Ci0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+ZmllbGRfY291bnQoKTsgKytpKSB7Ci0g
ICAgZmllbGRzLnB1c2hfYmFjayhtZXNzYWdlLT5maWVsZChpKSk7Ci0gIH0KLSAgSW5pdGlhbGl6
ZUZpZWxkR2VuZXJhdG9ySW5mb0ZvckZpZWxkcyhmaWVsZHMpOwotCi0gIGZvciAoaW50IGkgPSAw
OyBpIDwgbWVzc2FnZS0+b25lb2ZfZGVjbF9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBPbmVv
ZkRlc2NyaXB0b3IqIG9uZW9mID0gbWVzc2FnZS0+b25lb2ZfZGVjbChpKTsKLSAgICBPbmVvZkdl
bmVyYXRvckluZm8gaW5mbzsKLSAgICBpbmZvLm5hbWUgPSBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNl
KG9uZW9mLT5uYW1lKCksIGZhbHNlKTsKLSAgICBpbmZvLmNhcGl0YWxpemVkX25hbWUgPSBVbmRl
cnNjb3Jlc1RvQ2FtZWxDYXNlKG9uZW9mLT5uYW1lKCksIHRydWUpOwotICAgIG9uZW9mX2dlbmVy
YXRvcl9pbmZvX21hcF9bb25lb2ZdID0gaW5mbzsKLSAgfQotfQotCi12b2lkIENvbnRleHQ6Oklu
aXRpYWxpemVGaWVsZEdlbmVyYXRvckluZm9Gb3JGaWVsZHMoCi0gICAgY29uc3QgdmVjdG9yPGNv
bnN0IEZpZWxkRGVzY3JpcHRvcio+JiBmaWVsZHMpIHsKLSAgLy8gRmluZCBvdXQgYWxsIGZpZWxk
cyB0aGF0IGNvbmZsaWN0IHdpdGggc29tZSBvdGhlciBmaWVsZCBpbiB0aGUgc2FtZQotICAvLyBt
ZXNzYWdlLgotICB2ZWN0b3I8Ym9vbD4gaXNfY29uZmxpY3QoZmllbGRzLnNpemUoKSk7Ci0gIHZl
Y3RvcjxzdHJpbmc+IGNvbmZsaWN0X3JlYXNvbihmaWVsZHMuc2l6ZSgpKTsKLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkID0gZmllbGRzW2ldOwotICAgIGNvbnN0IHN0cmluZyYgbmFtZSA9IFVuZGVyc2Nv
cmVzVG9DYXBpdGFsaXplZENhbWVsQ2FzZShmaWVsZCk7Ci0gICAgZm9yIChpbnQgaiA9IGkgKyAx
OyBqIDwgZmllbGRzLnNpemUoKTsgKytqKSB7Ci0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IG90aGVyID0gZmllbGRzW2pdOwotICAgICAgY29uc3Qgc3RyaW5nJiBvdGhlcl9uYW1lID0gVW5k
ZXJzY29yZXNUb0NhcGl0YWxpemVkQ2FtZWxDYXNlKG90aGVyKTsKLSAgICAgIGlmIChuYW1lID09
IG90aGVyX25hbWUpIHsKLSAgICAgICAgaXNfY29uZmxpY3RbaV0gPSBpc19jb25mbGljdFtqXSA9
IHRydWU7Ci0gICAgICAgIGNvbmZsaWN0X3JlYXNvbltpXSA9IGNvbmZsaWN0X3JlYXNvbltqXSA9
Ci0gICAgICAgICAgICAiY2FwaXRhbGl6ZWQgbmFtZSBvZiBmaWVsZCBcIiIgKyBmaWVsZC0+bmFt
ZSgpICsKLSAgICAgICAgICAgICJcIiBjb25mbGljdHMgd2l0aCBmaWVsZCBcIiIgKyBvdGhlci0+
bmFtZSgpICsgIlwiIjsKLSAgICAgIH0gZWxzZSBpZiAoSXNDb25mbGljdGluZyhmaWVsZCwgbmFt
ZSwgb3RoZXIsIG90aGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNv
bmZsaWN0X3JlYXNvbltqXSkpIHsKLSAgICAgICAgaXNfY29uZmxpY3RbaV0gPSBpc19jb25mbGlj
dFtqXSA9IHRydWU7Ci0gICAgICAgIGNvbmZsaWN0X3JlYXNvbltpXSA9IGNvbmZsaWN0X3JlYXNv
bltqXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGlzX2NvbmZsaWN0W2ldKSB7Ci0gICAgICBH
T09HTEVfTE9HKFdBUk5JTkcpIDw8ICJmaWVsZCBcIiIgPDwgZmllbGQtPmZ1bGxfbmFtZSgpIDw8
ICJcIiBpcyBjb25mbGljdGluZyAiCi0gICAgICAgICAgICAgICAgICAgPDwgIndpdGggYW5vdGhl
ciBmaWVsZDogIiA8PCBjb25mbGljdF9yZWFzb25baV07Ci0gICAgfQotICB9Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCA9IGZpZWxkc1tpXTsKLSAgICBGaWVsZEdlbmVyYXRvckluZm8gaW5mbzsKLSAg
ICBpbmZvLm5hbWUgPSBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGZpZWxkKTsKLSAgICBpbmZvLmNh
cGl0YWxpemVkX25hbWUgPSBVbmRlcnNjb3Jlc1RvQ2FwaXRhbGl6ZWRDYW1lbENhc2UoZmllbGQp
OwotICAgIC8vIEZvciBmaWVsZHMgY29uZmxpY3Rpbmcgd2l0aCBzb21lIG90aGVyIGZpZWxkcywg
d2UgYXBwZW5kIHRoZSBmaWVsZAotICAgIC8vIG51bWJlciB0byB0aGVpciBmaWVsZCBuYW1lcyBp
biBnZW5lcmF0ZWQgY29kZSB0byBhdm9pZCBjb25mbGljdHMuCi0gICAgaWYgKGlzX2NvbmZsaWN0
W2ldKSB7Ci0gICAgICBpbmZvLm5hbWUgKz0gU2ltcGxlSXRvYShmaWVsZC0+bnVtYmVyKCkpOwot
ICAgICAgaW5mby5jYXBpdGFsaXplZF9uYW1lICs9IFNpbXBsZUl0b2EoZmllbGQtPm51bWJlcigp
KTsKLSAgICAgIGluZm8uZGlzYW1iaWd1YXRlZF9yZWFzb24gPSBjb25mbGljdF9yZWFzb25baV07
Ci0gICAgfQotICAgIGZpZWxkX2dlbmVyYXRvcl9pbmZvX21hcF9bZmllbGRdID0gaW5mbzsKLSAg
fQotfQotCi1jb25zdCBGaWVsZEdlbmVyYXRvckluZm8qIENvbnRleHQ6OkdldEZpZWxkR2VuZXJh
dG9ySW5mbygKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0gIGNv
bnN0IEZpZWxkR2VuZXJhdG9ySW5mbyogcmVzdWx0ID0KLSAgICAgIEZpbmRPck51bGwoZmllbGRf
Z2VuZXJhdG9yX2luZm9fbWFwXywgZmllbGQpOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAg
ICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuIG5vdCBmaW5kIEZpZWxkR2VuZXJhdG9ySW5mbyBm
b3IgZmllbGQ6ICIKLSAgICAgICAgICAgICAgIDw8IGZpZWxkLT5mdWxsX25hbWUoKTsKLSAgfQot
ICByZXR1cm4gcmVzdWx0OwotfQotCi1jb25zdCBPbmVvZkdlbmVyYXRvckluZm8qIENvbnRleHQ6
OkdldE9uZW9mR2VuZXJhdG9ySW5mbygKLSAgICBjb25zdCBPbmVvZkRlc2NyaXB0b3IqIG9uZW9m
KSBjb25zdCB7Ci0gIGNvbnN0IE9uZW9mR2VuZXJhdG9ySW5mbyogcmVzdWx0ID0KLSAgICAgIEZp
bmRPck51bGwob25lb2ZfZ2VuZXJhdG9yX2luZm9fbWFwXywgb25lb2YpOwotICBpZiAocmVzdWx0
ID09IE5VTEwpIHsKLSAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuIG5vdCBmaW5kIE9uZW9m
R2VuZXJhdG9ySW5mbyBmb3Igb25lb2Y6ICIKLSAgICAgICAgICAgICAgIDw8IG9uZW9mLT5uYW1l
KCk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gRG9lcyB0aGlzIG1lc3NhZ2UgY2xh
c3MgaGF2ZSBnZW5lcmF0ZWQgcGFyc2luZywgc2VyaWFsaXphdGlvbiwgYW5kIG90aGVyCi0vLyBz
dGFuZGFyZCBtZXRob2RzIGZvciB3aGljaCByZWZsZWN0aW9uLWJhc2VkIGZhbGxiYWNrIGltcGxl
bWVudGF0aW9ucyBleGlzdD8KLWJvb2wgQ29udGV4dDo6SGFzR2VuZXJhdGVkTWV0aG9kcyhjb25z
dCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSBjb25zdCB7Ci0gIHJldHVybiBlbmZvcmNlX2xpdGVf
IHx8IGRlc2NyaXB0b3ItPmZpbGUoKS0+b3B0aW9ucygpLm9wdGltaXplX2ZvcigpICE9Ci0gICAg
ICAgICAgIEZpbGVPcHRpb25zOjpDT0RFX1NJWkU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZh
Ci19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAg
Ly8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9jb250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2
YS9qYXZhX2NvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4MGU0NWRj
NDBjZGI5ODA2N2I4NjlmZGRkMzJlODk3N2RjY2VmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9q
YXZhX2NvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfSkFWQV9DT05URVhUX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFW
QV9DT05URVhUX0hfXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5k
ZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRf
cHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLSAgY2xhc3MgRmlsZURlc2NyaXB0b3I7Ci0gIGNsYXNzIEZpZWxkRGVzY3JpcHRv
cjsKLSAgY2xhc3MgT25lb2ZEZXNjcmlwdG9yOwotICBjbGFzcyBEZXNjcmlwdG9yOwotICBjbGFz
cyBFbnVtRGVzY3JpcHRvcjsKLSAgbmFtZXNwYWNlIGNvbXBpbGVyIHsKLSAgICBuYW1lc3BhY2Ug
amF2YSB7Ci0gICAgICBjbGFzcyBDbGFzc05hbWVSZXNvbHZlcjsgIC8vIG5hbWVfcmVzb2x2ZXIu
aAotICAgIH0KLSAgfQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1zdHJ1Y3Qg
RmllbGRHZW5lcmF0b3JJbmZvOwotc3RydWN0IE9uZW9mR2VuZXJhdG9ySW5mbzsKLS8vIEEgY29u
dGV4dCBvYmplY3QgaG9sZHMgdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMgc2hhcmVkIGFtb25nIGFs
bCBjb2RlCi0vLyBnZW5lcmF0b3JzLgotY2xhc3MgQ29udGV4dCB7Ci0gcHVibGljOgotICBleHBs
aWNpdCBDb250ZXh0KGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKTsKLSAgfkNvbnRleHQoKTsK
LQotICAvLyBHZXQgdGhlIG5hbWUgcmVzb2x2ZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4
dC4gVGhlIHJlc29sdmVyCi0gIC8vIGNhbiBiZSB1c2VkIHRvIG1hcCBkZXNjcmlwdG9ycyB0byBK
YXZhIGNsYXNzIG5hbWVzLgotICBDbGFzc05hbWVSZXNvbHZlciogR2V0TmFtZVJlc29sdmVyKCk7
Ci0KLSAgLy8gR2V0IHRoZSBGaWVsZEdlbmVyYXRvckluZm8gZm9yIGEgZ2l2ZW4gZmllbGQuCi0g
IGNvbnN0IEZpZWxkR2VuZXJhdG9ySW5mbyogR2V0RmllbGRHZW5lcmF0b3JJbmZvKAotICAgICAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0KLSAgLy8gR2V0IHRoZSBPbmVv
ZkdlbmVyYXRvckluZm8gZm9yIGEgZ2l2ZW4gb25lb2YuCi0gIGNvbnN0IE9uZW9mR2VuZXJhdG9y
SW5mbyogR2V0T25lb2ZHZW5lcmF0b3JJbmZvKAotICAgICAgY29uc3QgT25lb2ZEZXNjcmlwdG9y
KiBvbmVvZikgY29uc3Q7Ci0KLSAgLy8gRW5mb3JjZXMgYWxsIHRoZSBmaWxlcyAoaW5jbHVkaW5n
IHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzKSB0byB1c2UKLSAgLy8gTGl0ZVJ1bnRpbWUuCi0gIHZv
aWQgU2V0RW5mb3JjZUxpdGUoYm9vbCBlbmZvcmNlX2xpdGUpIHsKLSAgICBlbmZvcmNlX2xpdGVf
ID0gZW5mb3JjZV9saXRlOwotICB9Ci0KLSAgYm9vbCBFbmZvcmNlTGl0ZSgpIGNvbnN0IHsKLSAg
ICByZXR1cm4gZW5mb3JjZV9saXRlXzsKLSAgfQotCi0gIC8vIERvZXMgdGhpcyBtZXNzYWdlIGNs
YXNzIGhhdmUgZ2VuZXJhdGVkIHBhcnNpbmcsIHNlcmlhbGl6YXRpb24sIGFuZCBvdGhlcgotICAv
LyBzdGFuZGFyZCBtZXRob2RzIGZvciB3aGljaCByZWZsZWN0aW9uLWJhc2VkIGZhbGxiYWNrIGlt
cGxlbWVudGF0aW9ucyBleGlzdD8KLSAgYm9vbCBIYXNHZW5lcmF0ZWRNZXRob2RzKGNvbnN0IERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgdm9pZCBJbml0aWFs
aXplRmllbGRHZW5lcmF0b3JJbmZvKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKTsKLSAgdm9p
ZCBJbml0aWFsaXplRmllbGRHZW5lcmF0b3JJbmZvRm9yTWVzc2FnZShjb25zdCBEZXNjcmlwdG9y
KiBtZXNzYWdlKTsKLSAgdm9pZCBJbml0aWFsaXplRmllbGRHZW5lcmF0b3JJbmZvRm9yRmllbGRz
KAotICAgICAgY29uc3QgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBmaWVsZHMpOwot
Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8Q2xhc3NOYW1lUmVzb2x2ZXI+IG5hbWVf
cmVzb2x2ZXJfOwotICBtYXA8Y29uc3QgRmllbGREZXNjcmlwdG9yKiwgRmllbGRHZW5lcmF0b3JJ
bmZvPiBmaWVsZF9nZW5lcmF0b3JfaW5mb19tYXBfOwotICBtYXA8Y29uc3QgT25lb2ZEZXNjcmlw
dG9yKiwgT25lb2ZHZW5lcmF0b3JJbmZvPiBvbmVvZl9nZW5lcmF0b3JfaW5mb19tYXBfOwotICBi
b29sIGVuZm9yY2VfbGl0ZV87Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhD
b250ZXh0KTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29t
cGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xl
Ci0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX0NPTlRFWFRfSF9fCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2RvY19jb21t
ZW50LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVu
dC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI1Y2FiYTQzNGNjYjBmNGU3MjBm
MzE4MTk4NWQ5MGFkMzE0MmJlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2RvY19jb21t
ZW50LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24g
VmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkK
LS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaD4KLQotI2lu
Y2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5h
bWVzcGFjZSBqYXZhIHsKLQotc3RyaW5nIEVzY2FwZUphdmFkb2MoY29uc3Qgc3RyaW5nJiBpbnB1
dCkgewotICBzdHJpbmcgcmVzdWx0OwotICByZXN1bHQucmVzZXJ2ZShpbnB1dC5zaXplKCkgKiAy
KTsKLQotICBjaGFyIHByZXYgPSAnKic7Ci0KLSAgZm9yIChzdHJpbmc6OnNpemVfdHlwZSBpID0g
MDsgaSA8IGlucHV0LnNpemUoKTsgaSsrKSB7Ci0gICAgY2hhciBjID0gaW5wdXRbaV07Ci0gICAg
c3dpdGNoIChjKSB7Ci0gICAgICBjYXNlICcqJzoKLSAgICAgICAgLy8gQXZvaWQgIi8qIi4KLSAg
ICAgICAgaWYgKHByZXYgPT0gJy8nKSB7Ci0gICAgICAgICAgcmVzdWx0LmFwcGVuZCgiJiM0Mjsi
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKGMpOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnLyc6Ci0gICAgICAgIC8vIEF2b2lk
ICIqLyIuCi0gICAgICAgIGlmIChwcmV2ID09ICcqJykgewotICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoIiYjNDc7Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmVzdWx0LnB1c2hfYmFj
ayhjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ0AnOgotICAgICAg
ICAvLyAnQCcgc3RhcnRzIGphdmFkb2MgdGFncyBpbmNsdWRpbmcgdGhlIEBkZXByZWNhdGVkIHRh
Zywgd2hpY2ggd2lsbAotICAgICAgICAvLyBjYXVzZSBhIGNvbXBpbGUtdGltZSBlcnJvciBpZiBp
bnNlcnRlZCBiZWZvcmUgYSBkZWNsYXJhdGlvbiB0aGF0Ci0gICAgICAgIC8vIGRvZXMgbm90IGhh
dmUgYSBjb3JyZXNwb25kaW5nIEBEZXByZWNhdGVkIGFubm90YXRpb24uCi0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoIiYjNjQ7Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnPCc6Ci0gICAg
ICAgIC8vIEF2b2lkIGludGVycHJldGF0aW9uIGFzIEhUTUwuCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIiZsdDsiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICc+JzoKLSAgICAgICAgLy8g
QXZvaWQgaW50ZXJwcmV0YXRpb24gYXMgSFRNTC4KLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiJmd0
OyIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJyYnOgotICAgICAgICAvLyBBdm9pZCBp
bnRlcnByZXRhdGlvbiBhcyBIVE1MLgotICAgICAgICByZXN1bHQuYXBwZW5kKCImYW1wOyIpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgLy8gSmF2YSBpbnRlcnBy
ZXRzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlcyBhbnl3aGVyZSEKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgiJiM5MjsiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXN1bHQucHVzaF9iYWNrKGMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBwcmV2ID0g
YzsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIFdyaXRlRG9jQ29t
bWVudEJvZHlGb3JMb2NhdGlvbigKLSAgICBpbzo6UHJpbnRlciogcHJpbnRlciwgY29uc3QgU291
cmNlTG9jYXRpb24mIGxvY2F0aW9uKSB7Ci0gIHN0cmluZyBjb21tZW50cyA9IGxvY2F0aW9uLmxl
YWRpbmdfY29tbWVudHMuZW1wdHkoKSA/Ci0gICAgICBsb2NhdGlvbi50cmFpbGluZ19jb21tZW50
cyA6IGxvY2F0aW9uLmxlYWRpbmdfY29tbWVudHM7Ci0gIGlmICghY29tbWVudHMuZW1wdHkoKSkg
ewotICAgIC8vIFRPRE8oa2VudG9uKTogIElkZWFsbHkgd2Ugc2hvdWxkIHBhcnNlIHRoZSBjb21t
ZW50IHRleHQgYXMgTWFya2Rvd24gYW5kCi0gICAgLy8gICB3cml0ZSBpdCBiYWNrIGFzIEhUTUws
IGJ1dCB0aGlzIHJlcXVpcmVzIGEgTWFya2Rvd24gcGFyc2VyLiAgRm9yIG5vdwotICAgIC8vICAg
d2UganVzdCB1c2UgPHByZT4gdG8gZ2V0IGZpeGVkLXdpZHRoIHRleHQgZm9ybWF0dGluZy4KLQot
ICAgIC8vIElmIHRoZSBjb21tZW50IGl0c2VsZiBjb250YWlucyBibG9jayBjb21tZW50IHN0YXJ0
IG9yIGVuZCBtYXJrZXJzLAotICAgIC8vIEhUTUwtZXNjYXBlIHRoZW0gc28gdGhhdCB0aGV5IGRv
bid0IGFjY2lkZW50YWxseSBjbG9zZSB0aGUgZG9jIGNvbW1lbnQuCi0gICAgY29tbWVudHMgPSBF
c2NhcGVKYXZhZG9jKGNvbW1lbnRzKTsKLQotICAgIHZlY3RvcjxzdHJpbmc+IGxpbmVzID0gU3Bs
aXQoY29tbWVudHMsICJcbiIpOwotICAgIHdoaWxlICghbGluZXMuZW1wdHkoKSAmJiBsaW5lcy5i
YWNrKCkuZW1wdHkoKSkgewotICAgICAgbGluZXMucG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICBw
cmludGVyLT5QcmludCgiICogPHByZT5cbiIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlu
ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIC8vIE1vc3QgbGluZXMgc2hvdWxkIHN0YXJ0IHdpdGgg
YSBzcGFjZS4gIFdhdGNoIG91dCBmb3IgbGluZXMgdGhhdCBzdGFydAotICAgICAgLy8gd2l0aCBh
IC8sIHNpbmNlIHB1dHRpbmcgdGhhdCByaWdodCBhZnRlciB0aGUgbGVhZGluZyBhc3RlcmlzayB3
aWxsCi0gICAgICAvLyBjbG9zZSB0aGUgY29tbWVudC4KLSAgICAgIGlmICghbGluZXNbaV0uZW1w
dHkoKSAmJiBsaW5lc1tpXVswXSA9PSAnLycpIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQoIiAq
ICRsaW5lJFxuIiwgImxpbmUiLCBsaW5lc1tpXSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBw
cmludGVyLT5QcmludCgiICokbGluZSRcbiIsICJsaW5lIiwgbGluZXNbaV0pOwotICAgICAgfQot
ICAgIH0KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiAqIDwvcHJlPlxuIgotICAgICAg
ICAiICpcbiIpOwotICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEZXNjcmlwdG9yVHlwZT4K
LXN0YXRpYyB2b2lkIFdyaXRlRG9jQ29tbWVudEJvZHkoCi0gICAgaW86OlByaW50ZXIqIHByaW50
ZXIsIGNvbnN0IERlc2NyaXB0b3JUeXBlKiBkZXNjcmlwdG9yKSB7Ci0gIFNvdXJjZUxvY2F0aW9u
IGxvY2F0aW9uOwotICBpZiAoZGVzY3JpcHRvci0+R2V0U291cmNlTG9jYXRpb24oJmxvY2F0aW9u
KSkgewotICAgIFdyaXRlRG9jQ29tbWVudEJvZHlGb3JMb2NhdGlvbihwcmludGVyLCBsb2NhdGlv
bik7Ci0gIH0KLX0KLQotc3RhdGljIHN0cmluZyBGaXJzdExpbmVPZihjb25zdCBzdHJpbmcmIHZh
bHVlKSB7Ci0gIHN0cmluZyByZXN1bHQgPSB2YWx1ZTsKLQotICBzdHJpbmc6OnNpemVfdHlwZSBw
b3MgPSByZXN1bHQuZmluZF9maXJzdF9vZignXG4nKTsKLSAgaWYgKHBvcyAhPSBzdHJpbmc6Om5w
b3MpIHsKLSAgICByZXN1bHQuZXJhc2UocG9zKTsKLSAgfQotCi0gIC8vIElmIGxpbmUgZW5kcyBp
biBhbiBvcGVuaW5nIGJyYWNlLCBtYWtlIGl0ICJ7IC4uLiB9IiBzbyBpdCBsb29rcyBuaWNlLgot
ICBpZiAoIXJlc3VsdC5lbXB0eSgpICYmIHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMV0gPT0gJ3sn
KSB7Ci0gICAgcmVzdWx0LmFwcGVuZCgiIC4uLiB9Iik7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIFdyaXRlTWVzc2FnZURvY0NvbW1lbnQoaW86OlByaW50ZXIqIHByaW50ZXIs
IGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UpIHsKLSAgcHJpbnRlci0+UHJpbnQoIi8qKlxuIik7
Ci0gIFdyaXRlRG9jQ29tbWVudEJvZHkocHJpbnRlciwgbWVzc2FnZSk7Ci0gIHByaW50ZXItPlBy
aW50KAotICAgICIgKiBQcm90b2J1ZiB0eXBlIHtAY29kZSAkZnVsbG5hbWUkfVxuIgotICAgICIg
Ki9cbiIsCi0gICAgImZ1bGxuYW1lIiwgRXNjYXBlSmF2YWRvYyhtZXNzYWdlLT5mdWxsX25hbWUo
KSkpOwotfQotCi12b2lkIFdyaXRlRmllbGREb2NDb21tZW50KGlvOjpQcmludGVyKiBwcmludGVy
LCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIC8vIEluIHRoZW9yeSB3ZSBzaG91
bGQgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgY29tbWVudHMgZm9yIHNldHRlcnMsIGdldHRlcnMs
Ci0gIC8vIGV0Yy4sIGJ1dCBpbiBwcmFjdGljZSBldmVyeW9uZSBhbHJlYWR5IGtub3dzIHRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gdGhlc2UKLSAgLy8gc28gaXQncyByZWR1bmRhbnQgaW5mb3JtYXRp
b24uCi0KLSAgLy8gV2Ugc3RhcnQgdGhlIGNvbW1lbnQgd2l0aCB0aGUgbWFpbiBib2R5IGJhc2Vk
IG9uIHRoZSBjb21tZW50cyBmcm9tIHRoZQotICAvLyAucHJvdG8gZmlsZSAoaWYgcHJlc2VudCku
IFdlIHRoZW4gZW5kIHdpdGggdGhlIGZpZWxkIGRlY2xhcmF0aW9uLCBlLmcuOgotICAvLyAgIG9w
dGlvbmFsIHN0cmluZyBmb28gPSA1OwotICAvLyBJZiB0aGUgZmllbGQgaXMgYSBncm91cCwgdGhl
IGRlYnVnIHN0cmluZyBtaWdodCBlbmQgd2l0aCB7LgotICBwcmludGVyLT5QcmludCgiLyoqXG4i
KTsKLSAgV3JpdGVEb2NDb21tZW50Qm9keShwcmludGVyLCBmaWVsZCk7Ci0gIHByaW50ZXItPlBy
aW50KAotICAgICIgKiA8Y29kZT4kZGVmJDwvY29kZT5cbiIsCi0gICAgImRlZiIsIEVzY2FwZUph
dmFkb2MoRmlyc3RMaW5lT2YoZmllbGQtPkRlYnVnU3RyaW5nKCkpKSk7Ci0gIHByaW50ZXItPlBy
aW50KCIgKi9cbiIpOwotfQotCi12b2lkIFdyaXRlRW51bURvY0NvbW1lbnQoaW86OlByaW50ZXIq
IHByaW50ZXIsIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBlbnVtXykgewotICBwcmludGVyLT5Qcmlu
dCgiLyoqXG4iKTsKLSAgV3JpdGVEb2NDb21tZW50Qm9keShwcmludGVyLCBlbnVtXyk7Ci0gIHBy
aW50ZXItPlByaW50KAotICAgICIgKiBQcm90b2J1ZiBlbnVtIHtAY29kZSAkZnVsbG5hbWUkfVxu
IgotICAgICIgKi9cbiIsCi0gICAgImZ1bGxuYW1lIiwgRXNjYXBlSmF2YWRvYyhlbnVtXy0+ZnVs
bF9uYW1lKCkpKTsKLX0KLQotdm9pZCBXcml0ZUVudW1WYWx1ZURvY0NvbW1lbnQoaW86OlByaW50
ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFbnVtVmFs
dWVEZXNjcmlwdG9yKiB2YWx1ZSkgewotICBwcmludGVyLT5QcmludCgiLyoqXG4iKTsKLSAgV3Jp
dGVEb2NDb21tZW50Qm9keShwcmludGVyLCB2YWx1ZSk7Ci0gIHByaW50ZXItPlByaW50KAotICAg
ICIgKiA8Y29kZT4kZGVmJDwvY29kZT5cbiIKLSAgICAiICovXG4iLAotICAgICJkZWYiLCBFc2Nh
cGVKYXZhZG9jKEZpcnN0TGluZU9mKHZhbHVlLT5EZWJ1Z1N0cmluZygpKSkpOwotfQotCi12b2lk
IFdyaXRlU2VydmljZURvY0NvbW1lbnQoaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2VydmljZURlc2NyaXB0b3IqIHNlcnZpY2UpIHsKLSAg
cHJpbnRlci0+UHJpbnQoIi8qKlxuIik7Ci0gIFdyaXRlRG9jQ29tbWVudEJvZHkocHJpbnRlciwg
c2VydmljZSk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICIgKiBQcm90b2J1ZiBzZXJ2aWNlIHtA
Y29kZSAkZnVsbG5hbWUkfVxuIgotICAgICIgKi9cbiIsCi0gICAgImZ1bGxuYW1lIiwgRXNjYXBl
SmF2YWRvYyhzZXJ2aWNlLT5mdWxsX25hbWUoKSkpOwotfQotCi12b2lkIFdyaXRlTWV0aG9kRG9j
Q29tbWVudChpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE1ldGhvZERlc2NyaXB0b3IqIG1ldGhvZCkgewotICBwcmludGVyLT5QcmludCgiLyoq
XG4iKTsKLSAgV3JpdGVEb2NDb21tZW50Qm9keShwcmludGVyLCBtZXRob2QpOwotICBwcmludGVy
LT5QcmludCgKLSAgICAiICogPGNvZGU+JGRlZiQ8L2NvZGU+XG4iCi0gICAgIiAqL1xuIiwKLSAg
ICAiZGVmIiwgRXNjYXBlSmF2YWRvYyhGaXJzdExpbmVPZihtZXRob2QtPkRlYnVnU3RyaW5nKCkp
KSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIK
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDk1MzVjOTU5ZTJjZWE0Yzg4MzVkMjlmNTdm
NGY4NmYxMGMxYjQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0v
LyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5q
YXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJP
VE9CVUZfQ09NUElMRVJfSkFWQV9ET0NfQ09NTUVOVF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RP
QlVGX0NPTVBJTEVSX0pBVkFfRE9DX0NPTU1FTlRfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvZGVzY3JpcHRvci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci0gIG5hbWVzcGFjZSBpbyB7Ci0gICAgY2xhc3MgUHJpbnRlcjsgICAgICAgICAgICAg
Ly8gcHJpbnRlci5oCi0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBj
b21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLXZvaWQgV3JpdGVNZXNzYWdlRG9jQ29tbWVu
dChpbzo6UHJpbnRlciogcHJpbnRlciwgY29uc3QgRGVzY3JpcHRvciogbWVzc2FnZSk7Ci12b2lk
IFdyaXRlRmllbGREb2NDb21tZW50KGlvOjpQcmludGVyKiBwcmludGVyLCBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkKTsKLXZvaWQgV3JpdGVFbnVtRG9jQ29tbWVudChpbzo6UHJpbnRlciog
cHJpbnRlciwgY29uc3QgRW51bURlc2NyaXB0b3IqIGVudW1fKTsKLXZvaWQgV3JpdGVFbnVtVmFs
dWVEb2NDb21tZW50KGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWUpOwotdm9pZCBXcml0ZVNl
cnZpY2VEb2NDb21tZW50KGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yKiBzZXJ2aWNlKTsKLXZvaWQgV3JpdGVN
ZXRob2REb2NDb21tZW50KGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogbWV0aG9kKTsKLQotLy8gRXhwb3NlZCBm
b3IgdGVzdGluZyBvbmx5LgotTElCUFJPVE9DX0VYUE9SVCBzdHJpbmcgRXNjYXBlSmF2YWRvYyhj
b25zdCBzdHJpbmcmIGlucHV0KTsKLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVz
cGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFj
ZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfRE9DX0NP
TU1FTlRfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9q
YXZhX2RvY19jb21tZW50X3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9kb2NfY29tbWVudF91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWU1ODJlYTY0OTA0MDFmMmM0ZDhhMjBkMGMxNDI0NjRhMDE2NDI0MS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YS9qYXZhX2RvY19jb21tZW50X3VuaXR0ZXN0LmNjCisrKyAvZGV2L251
bGwKQEAgLTEsNjcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaD4KLQotI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci1uYW1lc3Bh
Y2UgewotCi1URVNUKEphdmFEb2NDb21tZW50VGVzdCwgRXNjYXBpbmcpIHsKLSAgRVhQRUNUX0VR
KCJmb28gLyYjNDI7IGJhciAqJiM0NzsgYmF6IiwgRXNjYXBlSmF2YWRvYygiZm9vIC8qIGJhciAq
LyBiYXoiKSk7Ci0gIEVYUEVDVF9FUSgiZm9vIC8mIzQyOyYjNDc7IGJheiIsIEVzY2FwZUphdmFk
b2MoImZvbyAvKi8gYmF6IikpOwotICBFWFBFQ1RfRVEoInsmIzY0O2Zvb30iLCBFc2NhcGVKYXZh
ZG9jKCJ7QGZvb30iKSk7Ci0gIEVYUEVDVF9FUSgiJmx0O2kmZ3Q7JmFtcDsmbHQ7L2kmZ3Q7Iiwg
RXNjYXBlSmF2YWRvYygiPGk+JjwvaT4iKSk7Ci0gIEVYUEVDVF9FUSgiZm9vJiM5Mjt1MTIzNGJh
ciIsIEVzY2FwZUphdmFkb2MoImZvb1xcdTEyMzRiYXIiKSk7Ci0gIEVYUEVDVF9FUSgiJiM2NDtk
ZXByZWNhdGVkIiwgRXNjYXBlSmF2YWRvYygiQGRlcHJlY2F0ZWQiKSk7Ci19Ci0KLS8vIFRPRE8o
a2VudG9uKTogIEl0J3MgaGFyZCB0byB3cml0ZSBhIHJvYnVzdCB0ZXN0IG9mIHRoZSBkb2MgY29t
bWVudHMgLS0gd2UKLS8vICAgY2FuIG9ubHkgcmVhbGx5IGNvbXBhcmUgdGhlIG91dHB1dCBhZ2Fp
bnN0IGEgZ29sZGVuIHZhbHVlLCB3aGljaCBpcyBhCi0vLyAgIGZhaXJseSB0ZWRpb3VzIGFuZCBm
cmFnaWxlIHRlc3Rpbmcgc3RyYXRlZ3kuICBJZiB3ZSB3YW50IHRvIGdvIHRoYXQgcm91dGUsCi0v
LyAgIGl0IHByb2JhYmx5IG1ha2VzIHNlbnNlIHRvIGJpdGUgdGhlIGJ1bGxldCBhbmQgd3JpdGUg
YSB0ZXN0IHRoYXQgY29tcGFyZXMKLS8vICAgdGhlIHdob2xlIGdlbmVyYXRlZCBvdXRwdXQgZm9y
IHVuaXR0ZXN0LnByb3RvIGFnYWluc3QgYSBnb2xkZW4gdmFsdWUsIHdpdGgKLS8vICAgYSB2ZXJ5
IHNpbXBsZSBzY3JpcHQgdGhhdCBjYW4gYmUgcnVuIHRvIHJlZ2VuZXJhdGUgaXQgd2l0aCB0aGUg
bGF0ZXN0IGNvZGUuCi0vLyAgIFRoaXMgd291bGQgbWVhbiB0aGF0IHVwZGF0ZXMgdG8gdGhlIGdv
bGRlbiBmaWxlIHdvdWxkIGhhdmUgdG8gYmUgaW5jbHVkZWQKLS8vICAgaW4gYW55IGNoYW5nZSB0
byB0aGUgY29kZSBnZW5lcmF0b3IsIHdoaWNoIHdvdWxkIGFjdHVhbGx5IGJlIGZhaXJseSB1c2Vm
dWwKLS8vICAgYXMgaXQgYWxsb3dzIHRoZSByZXZpZXdlciB0byBzZWUgY2xlYXJseSBob3cgdGhl
IGdlbmVyYXRlZCBjb2RlIGlzCi0vLyAgIGNoYW5naW5nLgotCi19ICAvLyBuYW1lc3BhY2UKLX0g
IC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtLmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5NDdiODBlNDE0N2QzNjUyMWYwMTllMzMwNGYwZjE0N2VhMDcyZWQ5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfZW51bS5jYworKysgL2Rldi9udWxsCkBAIC0xLDM5NSArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25A
Z29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29s
IEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBv
dGhlcnMuCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
c3RydXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1uYW1lc3BhY2UgewotYm9v
bCBFbnVtSGFzQ3VzdG9tT3B0aW9ucyhjb25zdCBFbnVtRGVzY3JpcHRvciogZGVzY3JpcHRvcikg
ewotICBpZiAoZGVzY3JpcHRvci0+b3B0aW9ucygpLnVua25vd25fZmllbGRzKCkuZmllbGRfY291
bnQoKSA+IDApIHJldHVybiB0cnVlOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3It
PnZhbHVlX2NvdW50KCk7ICsraSkgewotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIHZh
bHVlID0gZGVzY3JpcHRvci0+dmFsdWUoaSk7Ci0gICAgaWYgKHZhbHVlLT5vcHRpb25zKCkudW5r
bm93bl9maWVsZHMoKS5maWVsZF9jb3VudCgpID4gMCkgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0
dXJuIGZhbHNlOwotfQotfSAgLy8gbmFtZXNwYWNlCi0KLUVudW1HZW5lcmF0b3I6OkVudW1HZW5l
cmF0b3IoY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaW1tdXRhYmxlX2FwaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dCogY29udGV4dCkKLSAgOiBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSwgaW1t
dXRhYmxlX2FwaV8oaW1tdXRhYmxlX2FwaSksCi0gICAgY29udGV4dF8oY29udGV4dCksCi0gICAg
bmFtZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpICB7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPnZhbHVlX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0
IEVudW1WYWx1ZURlc2NyaXB0b3IqIHZhbHVlID0gZGVzY3JpcHRvcl8tPnZhbHVlKGkpOwotICAg
IGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGNhbm9uaWNhbF92YWx1ZSA9Ci0gICAgICBkZXNj
cmlwdG9yXy0+RmluZFZhbHVlQnlOdW1iZXIodmFsdWUtPm51bWJlcigpKTsKLQotICAgIGlmICh2
YWx1ZSA9PSBjYW5vbmljYWxfdmFsdWUpIHsKLSAgICAgIGNhbm9uaWNhbF92YWx1ZXNfLnB1c2hf
YmFjayh2YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEFsaWFzIGFsaWFzOwotICAgICAgYWxp
YXMudmFsdWUgPSB2YWx1ZTsKLSAgICAgIGFsaWFzLmNhbm9uaWNhbF92YWx1ZSA9IGNhbm9uaWNh
bF92YWx1ZTsKLSAgICAgIGFsaWFzZXNfLnB1c2hfYmFjayhhbGlhcyk7Ci0gICAgfQotICB9Ci19
Ci0KLUVudW1HZW5lcmF0b3I6On5FbnVtR2VuZXJhdG9yKCkge30KLQotdm9pZCBFbnVtR2VuZXJh
dG9yOjpHZW5lcmF0ZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBXcml0ZUVudW1Eb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInB1Ymxp
YyBlbnVtICRjbGFzc25hbWUkXG4iCi0gICAgIiAgICBpbXBsZW1lbnRzIGNvbS5nb29nbGUucHJv
dG9idWYuUHJvdG9jb2xNZXNzYWdlRW51bSB7XG4iLAotICAgICJjbGFzc25hbWUiLCBkZXNjcmlw
dG9yXy0+bmFtZSgpKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgYm9vbCBvcmRpbmFsX2lz
X2luZGV4ID0gdHJ1ZTsKLSAgc3RyaW5nIGluZGV4X3RleHQgPSAib3JkaW5hbCgpIjsKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjYW5vbmljYWxfdmFsdWVzXy5zaXplKCk7IGkrKykgewotICAgIGlm
IChjYW5vbmljYWxfdmFsdWVzX1tpXS0+aW5kZXgoKSAhPSBpKSB7Ci0gICAgICBvcmRpbmFsX2lz
X2luZGV4ID0gZmFsc2U7Ci0gICAgICBpbmRleF90ZXh0ID0gImluZGV4IjsKLSAgICAgIGJyZWFr
OwotICAgIH0KLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgY2Fub25pY2FsX3ZhbHVlc18u
c2l6ZSgpOyBpKyspIHsKLSAgICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gICAgdmFyc1si
bmFtZSJdID0gY2Fub25pY2FsX3ZhbHVlc19baV0tPm5hbWUoKTsKLSAgICB2YXJzWyJpbmRleCJd
ID0gU2ltcGxlSXRvYShjYW5vbmljYWxfdmFsdWVzX1tpXS0+aW5kZXgoKSk7Ci0gICAgdmFyc1si
bnVtYmVyIl0gPSBTaW1wbGVJdG9hKGNhbm9uaWNhbF92YWx1ZXNfW2ldLT5udW1iZXIoKSk7Ci0g
ICAgV3JpdGVFbnVtVmFsdWVEb2NDb21tZW50KHByaW50ZXIsIGNhbm9uaWNhbF92YWx1ZXNfW2ld
KTsKLSAgICBpZiAoY2Fub25pY2FsX3ZhbHVlc19baV0tPm9wdGlvbnMoKS5kZXByZWNhdGVkKCkp
IHsKLSAgICAgIHByaW50ZXItPlByaW50KCJAamF2YS5sYW5nLkRlcHJlY2F0ZWRcbiIpOwotICAg
IH0KLSAgICBpZiAob3JkaW5hbF9pc19pbmRleCkgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFy
cywKLSAgICAgICAgIiRuYW1lJCgkbnVtYmVyJCksXG4iKTsKLSAgICB9IGVsc2UgewotICAgICAg
cHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICAgIiRuYW1lJCgkaW5kZXgkLCAkbnVtYmVyJCks
XG4iKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoU3VwcG9ydFVua25vd25FbnVtVmFsdWUoZGVzY3Jp
cHRvcl8tPmZpbGUoKSkpIHsKLSAgICBpZiAob3JkaW5hbF9pc19pbmRleCkgewotICAgICAgcHJp
bnRlci0+UHJpbnQoIlVOUkVDT0dOSVpFRCgtMSksXG4iKTsKLSAgICB9IGVsc2UgewotICAgICAg
cHJpbnRlci0+UHJpbnQoIlVOUkVDT0dOSVpFRCgtMSwgLTEpLFxuIik7Ci0gICAgfQotICB9Ci0K
LSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIjtcbiIKLSAgICAiXG4iKTsKLQotICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgYWxpYXNlc18uc2l6ZSgpOyBpKyspIHsKLSAgICBt
YXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gICAgdmFyc1siY2xhc3NuYW1lIl0gPSBkZXNjcmlw
dG9yXy0+bmFtZSgpOwotICAgIHZhcnNbIm5hbWUiXSA9IGFsaWFzZXNfW2ldLnZhbHVlLT5uYW1l
KCk7Ci0gICAgdmFyc1siY2Fub25pY2FsX25hbWUiXSA9IGFsaWFzZXNfW2ldLmNhbm9uaWNhbF92
YWx1ZS0+bmFtZSgpOwotICAgIFdyaXRlRW51bVZhbHVlRG9jQ29tbWVudChwcmludGVyLCBhbGlh
c2VzX1tpXS52YWx1ZSk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICJwdWJsaWMg
c3RhdGljIGZpbmFsICRjbGFzc25hbWUkICRuYW1lJCA9ICRjYW5vbmljYWxfbmFtZSQ7XG4iKTsK
LSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPnZhbHVlX2NvdW50KCk7
IGkrKykgewotICAgIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgICB2YXJzWyJuYW1lIl0g
PSBkZXNjcmlwdG9yXy0+dmFsdWUoaSktPm5hbWUoKTsKLSAgICB2YXJzWyJudW1iZXIiXSA9IFNp
bXBsZUl0b2EoZGVzY3JpcHRvcl8tPnZhbHVlKGkpLT5udW1iZXIoKSk7Ci0gICAgV3JpdGVFbnVt
VmFsdWVEb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfLT52YWx1ZShpKSk7Ci0gICAgcHJp
bnRlci0+UHJpbnQodmFycywKLSAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFsIGludCAkbmFtZSRf
VkFMVUUgPSAkbnVtYmVyJDtcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KCJcbiIpOwotCi0g
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIlxuIgotICAgICJwdWJsaWMg
ZmluYWwgaW50IGdldE51bWJlcigpIHtcbiIpOwotICBpZiAoU3VwcG9ydFVua25vd25FbnVtVmFs
dWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBpZiAob3JkaW5hbF9pc19pbmRleCkgewot
ICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIgIGlmICh0aGlzID09IFVOUkVDT0dOSVpF
RCkge1xuIgotICAgICAgICAiICAgIHRocm93IG5ldyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uKFxuIgotICAgICAgICAiICAgICAgICBcIkNhbid0IGdldCB0aGUgbnVtYmVyIG9m
IGFuIHVua25vd24gZW51bSB2YWx1ZS5cIik7XG4iCi0gICAgICAgICIgIH1cbiIpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiAgaWYgKGluZGV4ID09IC0x
KSB7XG4iCi0gICAgICAgICIgICAgdGhyb3cgbmV3IGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24oXG4iCi0gICAgICAgICIgICAgICAgIFwiQ2FuJ3QgZ2V0IHRoZSBudW1iZXIgb2Yg
YW4gdW5rbm93biBlbnVtIHZhbHVlLlwiKTtcbiIKLSAgICAgICAgIiAgfVxuIik7Ci0gICAgfQot
ICB9Ci0gIHByaW50ZXItPlByaW50KAotICAgICIgIHJldHVybiB2YWx1ZTtcbiIKLSAgICAifVxu
IgotICAgICJcbiIKLSAgICAiLyoqXG4iCi0gICAgIiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsg
I2Zvck51bWJlcihpbnQpfSBpbnN0ZWFkLlxuIgotICAgICIgKi9cbiIKLSAgICAiQGphdmEubGFu
Zy5EZXByZWNhdGVkXG4iCi0gICAgInB1YmxpYyBzdGF0aWMgJGNsYXNzbmFtZSQgdmFsdWVPZihp
bnQgdmFsdWUpIHtcbiIKLSAgICAiICByZXR1cm4gZm9yTnVtYmVyKHZhbHVlKTtcbiIKLSAgICAi
fVxuIgotICAgICJcbiIKLSAgICAicHVibGljIHN0YXRpYyAkY2xhc3NuYW1lJCBmb3JOdW1iZXIo
aW50IHZhbHVlKSB7XG4iCi0gICAgIiAgc3dpdGNoICh2YWx1ZSkge1xuIiwKLSAgICAiY2xhc3Nu
YW1lIiwgZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0gIHByaW50ZXItPkluZGVudCgpOwotICBwcmlu
dGVyLT5JbmRlbnQoKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGNhbm9uaWNhbF92YWx1ZXNf
LnNpemUoKTsgaSsrKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiY2FzZSAkbnVtYmVy
JDogcmV0dXJuICRuYW1lJDtcbiIsCi0gICAgICAibmFtZSIsIGNhbm9uaWNhbF92YWx1ZXNfW2ld
LT5uYW1lKCksCi0gICAgICAibnVtYmVyIiwgU2ltcGxlSXRvYShjYW5vbmljYWxfdmFsdWVzX1tp
XS0+bnVtYmVyKCkpKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+
T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiICAgIGRlZmF1bHQ6IHJldHVybiBu
dWxsO1xuIgotICAgICIgIH1cbiIKLSAgICAifVxuIgotICAgICJcbiIKLSAgICAicHVibGljIHN0
YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLkVudW1MaXRlTWFwPCRjbGFzc25hbWUk
PlxuIgotICAgICIgICAgaW50ZXJuYWxHZXRWYWx1ZU1hcCgpIHtcbiIKLSAgICAiICByZXR1cm4g
aW50ZXJuYWxWYWx1ZU1hcDtcbiIKLSAgICAifVxuIgotICAgICJwcml2YXRlIHN0YXRpYyBmaW5h
bCBjb20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLkVudW1MaXRlTWFwPFxuIgotICAgICIgICAg
JGNsYXNzbmFtZSQ+IGludGVybmFsVmFsdWVNYXAgPVxuIgotICAgICIgICAgICBuZXcgY29tLmdv
b2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5FbnVtTGl0ZU1hcDwkY2xhc3NuYW1lJD4oKSB7XG4iCi0g
ICAgIiAgICAgICAgcHVibGljICRjbGFzc25hbWUkIGZpbmRWYWx1ZUJ5TnVtYmVyKGludCBudW1i
ZXIpIHtcbiIKLSAgICAiICAgICAgICAgIHJldHVybiAkY2xhc3NuYW1lJC5mb3JOdW1iZXIobnVt
YmVyKTtcbiIKLSAgICAiICAgICAgICB9XG4iCi0gICAgIiAgICAgIH07XG4iCi0gICAgIlxuIiwK
LSAgICAiY2xhc3NuYW1lIiwgZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0KLSAgLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgLy8gUmVmbGVjdGlvbgotCi0gIGlmIChIYXNEZXNjcmlwdG9yTWV0aG9kcyhkZXNjcmlwdG9y
XywgY29udGV4dF8tPkVuZm9yY2VMaXRlKCkpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAicHVibGljIGZpbmFsIGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRW51bVZhbHVl
RGVzY3JpcHRvclxuIgotICAgICAgIiAgICBnZXRWYWx1ZURlc2NyaXB0b3IoKSB7XG4iCi0gICAg
ICAiICByZXR1cm4gZ2V0RGVzY3JpcHRvcigpLmdldFZhbHVlcygpLmdldCgkaW5kZXhfdGV4dCQp
O1xuIgotICAgICAgIn1cbiIKLSAgICAgICJwdWJsaWMgZmluYWwgY29tLmdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9ycy5FbnVtRGVzY3JpcHRvclxuIgotICAgICAgIiAgICBnZXREZXNjcmlwdG9y
Rm9yVHlwZSgpIHtcbiIKLSAgICAgICIgIHJldHVybiBnZXREZXNjcmlwdG9yKCk7XG4iCi0gICAg
ICAifVxuIgotICAgICAgInB1YmxpYyBzdGF0aWMgZmluYWwgY29tLmdvb2dsZS5wcm90b2J1Zi5E
ZXNjcmlwdG9ycy5FbnVtRGVzY3JpcHRvclxuIgotICAgICAgIiAgICBnZXREZXNjcmlwdG9yKCkg
e1xuIiwKLSAgICAgICJpbmRleF90ZXh0IiwgaW5kZXhfdGV4dCk7Ci0KLSAgICAvLyBUT0RPKGtl
bnRvbik6ICBDYWNoZSBzdGF0aWNhbGx5PyAgTm90ZSB0aGF0IHdlIGNhbid0IGFjY2VzcyBkZXNj
cmlwdG9ycwotICAgIC8vICAgYXQgbW9kdWxlIGluaXQgdGltZSBiZWNhdXNlIGl0IHdvdWxkbid0
IHdvcmsgd2l0aCBkZXNjcmlwdG9yLnByb3RvLCBidXQKLSAgICAvLyAgIHdlIGNhbiBjYWNoZSB0
aGUgdmFsdWUgdGhlIGZpcnN0IHRpbWUgZ2V0RGVzY3JpcHRvcigpIGlzIGNhbGxlZC4KLSAgICBp
ZiAoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlwZSgpID09IE5VTEwpIHsKLSAgICAgIGlmICgh
TXVsdGlwbGVKYXZhRmlsZXMoZGVzY3JpcHRvcl8tPmZpbGUoKSwgaW1tdXRhYmxlX2FwaV8pKSB7
Ci0gICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICIgIHJldHVybiAkZmlsZSQuZ2V0
RGVzY3JpcHRvcigpLmdldEVudW1UeXBlcygpLmdldCgkaW5kZXgkKTtcbiIsCi0gICAgICAgICAg
ImZpbGUiLCBuYW1lX3Jlc29sdmVyXy0+R2V0Q2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5maWxlKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbXV0YWJs
ZV9hcGlfKSwKLSAgICAgICAgICAiaW5kZXgiLCBTaW1wbGVJdG9hKGRlc2NyaXB0b3JfLT5pbmRl
eCgpKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICAg
ICAgaWYgKEVudW1IYXNDdXN0b21PcHRpb25zKGRlc2NyaXB0b3JfKSkgewotICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gbG9hZCB0aGUgaW1tdXRhYmxlIGNsYXNzZXMgaW4gb3JkZXIgdG8gcGFyc2Ug
Y3VzdG9tCi0gICAgICAgICAgLy8gb3B0aW9ucy4gSG93ZXZlciwgc2luY2UgZmlsZSBsZXZlbCBl
bnVtcyAobm8gb3V0ZXIgY2xhc3MpIGFyZQotICAgICAgICAgIC8vIHNoYXJlZCBieSBpbW11dGFi
bGUgY29kZSBhbmQgbXV0YWJsZSBjb2RlLCB0aGUgaW1tdXRhYmxlIGNsYXNzZXMKLSAgICAgICAg
ICAvLyBtYXkgbm90IGV4aXN0LiBTbyB3ZSB0cnkgdG8gdXNlIEphdmEgcmVmbGVjdGlvbiB0byBy
ZXRyaWV2ZSB0aGUKLSAgICAgICAgICAvLyBkZXNjcmlwdG9yIGZyb20gaW1tdXRhYmxlIGNsYXNz
ZXMuCi0gICAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgICAidHJ5IHtcbiIKLSAg
ICAgICAgICAgICIgIGphdmEubGFuZy5DbGFzcyBpbW11dGFibGVGaWxlQ2xhc3MgPVxuIgotICAg
ICAgICAgICAgIiAgICAgIGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKFwiJGltbXV0YWJsZV9maWxl
X2NsYXNzX25hbWUkXCIpO1xuIgotICAgICAgICAgICAgIiAgQGphdmEubGFuZy5TdXBwcmVzc1dh
cm5pbmdzKFwidW5jaGVja2VkXCIpXG4iCi0gICAgICAgICAgICAiICBqYXZhLmxhbmcucmVmbGVj
dC5NZXRob2QgbSA9XG4iCi0gICAgICAgICAgICAiICAgICAgaW1tdXRhYmxlRmlsZUNsYXNzLmdl
dE1ldGhvZChcImdldERlc2NyaXB0b3JcIik7XG4iCi0gICAgICAgICAgICAiICBjb20uZ29vZ2xl
LnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yIGZpbGUgPVxuIgotICAgICAgICAg
ICAgIiAgICAgIChjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9y
KVxuIgotICAgICAgICAgICAgIiAgICAgICAgICBtLmludm9rZShpbW11dGFibGVGaWxlQ2xhc3Mp
O1xuIgotICAgICAgICAgICAgIiAgcmV0dXJuIGZpbGUuZ2V0RW51bVR5cGVzKCkuZ2V0KCRpbmRl
eCQpO1xuIgotICAgICAgICAgICAgIn0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gZSkge1xu
IgotICAgICAgICAgICAgLy8gSW1tdXRhYmxlIGNsYXNzZXMgY2Fubm90IGJlIGZvdW5kLiBQcm9j
ZWVkIGFzIGlmIGN1c3RvbSBvcHRpb25zCi0gICAgICAgICAgICAvLyBkb24ndCBleGlzdC4KLSAg
ICAgICAgICAgICJ9XG4iLAotICAgICAgICAgICAgImltbXV0YWJsZV9maWxlX2NsYXNzX25hbWUi
LAotICAgICAgICAgICAgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNj
cmlwdG9yXy0+ZmlsZSgpKSwKLSAgICAgICAgICAgICJpbmRleCIsIFNpbXBsZUl0b2EoZGVzY3Jp
cHRvcl8tPmluZGV4KCkpKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICAgICAicmV0dXJuICRpbW11dGFibGVfcGFja2FnZSQuJGRlc2NyaXB0b3JfY2xhc3MkLiRk
ZXNjcmlwdG9yJFxuIgotICAgICAgICAgICIgICAgLmdldEVudW1UeXBlcygpLmdldCgkaW5kZXgk
KTtcbiIsCi0gICAgICAgICAgImltbXV0YWJsZV9wYWNrYWdlIiwgRmlsZUphdmFQYWNrYWdlKGRl
c2NyaXB0b3JfLT5maWxlKCksIHRydWUpLAotICAgICAgICAgICJkZXNjcmlwdG9yX2NsYXNzIiwK
LSAgICAgICAgICBuYW1lX3Jlc29sdmVyXy0+R2V0RGVzY3JpcHRvckNsYXNzTmFtZShkZXNjcmlw
dG9yXy0+ZmlsZSgpKSwKLSAgICAgICAgICAiZGVzY3JpcHRvciIsICJnZXREZXNjcmlwdG9yKCki
LAotICAgICAgICAgICJpbmRleCIsIFNpbXBsZUl0b2EoZGVzY3JpcHRvcl8tPmluZGV4KCkpKTsK
LSAgICAgICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAiICByZXR1cm4gJHBhcmVudCQuJGRlc2NyaXB0
b3IkLmdldEVudW1UeXBlcygpLmdldCgkaW5kZXgkKTtcbiIsCi0gICAgICAgICAgInBhcmVudCIs
IG5hbWVfcmVzb2x2ZXJfLT5HZXRDbGFzc05hbWUoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlw
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlt
bXV0YWJsZV9hcGlfKSwKLSAgICAgICAgICAiZGVzY3JpcHRvciIsIGRlc2NyaXB0b3JfLT5jb250
YWluaW5nX3R5cGUoKS0+b3B0aW9ucygpCi0gICAgICAgICAgICAgICAgICAgICAgICAubm9fc3Rh
bmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICA/ICJn
ZXREZWZhdWx0SW5zdGFuY2UoKS5nZXREZXNjcmlwdG9yRm9yVHlwZSgpIgotICAgICAgICAgICAg
ICAgICAgICAgICAgOiAiZ2V0RGVzY3JpcHRvcigpIiwKLSAgICAgICAgICAiaW5kZXgiLCBTaW1w
bGVJdG9hKGRlc2NyaXB0b3JfLT5pbmRleCgpKSk7Ci0gICAgfQotCi0gICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAifVxuIgotICAgICAgIlxuIgotICAgICAgInByaXZhdGUgc3RhdGljIGZpbmFs
ICRjbGFzc25hbWUkW10gVkFMVUVTID0gIiwKLSAgICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9y
Xy0+bmFtZSgpKTsKLQotICAgIGlmIChDYW5Vc2VFbnVtVmFsdWVzKCkpIHsKLSAgICAgIC8vIElm
IHRoZSBjb25zdGFudHMgd2UgYXJlIGdvaW5nIHRvIG91dHB1dCBhcmUgZXhhY3RseSB0aGUgb25l
cyB3ZQotICAgICAgLy8gaGF2ZSBkZWNsYXJlZCBpbiB0aGUgSmF2YSBlbnVtIGluIHRoZSBzYW1l
IG9yZGVyLCB0aGVuIHdlIGNhbiB1c2UKLSAgICAgIC8vIHRoZSB2YWx1ZXMoKSBtZXRob2QgdGhh
dCB0aGUgSmF2YSBjb21waWxlciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcwotICAgICAgLy8gZm9y
IGV2ZXJ5IGVudW0uCi0gICAgICBwcmludGVyLT5QcmludCgidmFsdWVzKCk7XG4iKTsKLSAgICB9
IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJ7XG4iCi0gICAgICAgICIg
ICIpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+dmFsdWVfY291bnQo
KTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KCIkbmFtZSQsICIsCi0gICAgICAgICAg
Im5hbWUiLCBkZXNjcmlwdG9yXy0+dmFsdWUoaSktPm5hbWUoKSk7Ci0gICAgICB9Ci0gICAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICAgICAiXG4iCi0gICAgICAgICAgIn07XG4iKTsKLSAgICB9
Ci0KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJcbiIKLSAgICAgICJwdWJsaWMgc3RhdGlj
ICRjbGFzc25hbWUkIHZhbHVlT2YoXG4iCi0gICAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYu
RGVzY3JpcHRvcnMuRW51bVZhbHVlRGVzY3JpcHRvciBkZXNjKSB7XG4iCi0gICAgICAiICBpZiAo
ZGVzYy5nZXRUeXBlKCkgIT0gZ2V0RGVzY3JpcHRvcigpKSB7XG4iCi0gICAgICAiICAgIHRocm93
IG5ldyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFxuIgotICAgICAgIiAgICAg
IFwiRW51bVZhbHVlRGVzY3JpcHRvciBpcyBub3QgZm9yIHRoaXMgdHlwZS5cIik7XG4iCi0gICAg
ICAiICB9XG4iLAotICAgICAgImNsYXNzbmFtZSIsIGRlc2NyaXB0b3JfLT5uYW1lKCkpOwotICAg
IGlmIChTdXBwb3J0VW5rbm93bkVudW1WYWx1ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAg
ICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIgIGlmIChkZXNjLmdldEluZGV4KCkgPT0gLTEp
IHtcbiIKLSAgICAgICAgIiAgICByZXR1cm4gVU5SRUNPR05JWkVEO1xuIgotICAgICAgICAiICB9
XG4iKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICByZXR1cm4gVkFMVUVT
W2Rlc2MuZ2V0SW5kZXgoKV07XG4iCi0gICAgICAifVxuIgotICAgICAgIlxuIik7Ci0KLSAgICBp
ZiAoIW9yZGluYWxfaXNfaW5kZXgpIHsKLSAgICAgIHByaW50ZXItPlByaW50KCJwcml2YXRlIGZp
bmFsIGludCBpbmRleDtcbiIpOwotICAgIH0KLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgcHJp
bnRlci0+UHJpbnQoCi0gICAgInByaXZhdGUgZmluYWwgaW50IHZhbHVlO1xuXG4iKTsKLQotICBp
ZiAob3JkaW5hbF9pc19pbmRleCkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgInByaXZh
dGUgJGNsYXNzbmFtZSQoaW50IHZhbHVlKSB7XG4iLAotICAgICAgImNsYXNzbmFtZSIsIGRlc2Ny
aXB0b3JfLT5uYW1lKCkpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAg
InByaXZhdGUgJGNsYXNzbmFtZSQoaW50IGluZGV4LCBpbnQgdmFsdWUpIHtcbiIsCi0gICAgICAi
Y2xhc3NuYW1lIiwgZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0gIH0KLSAgaWYgKEhhc0Rlc2NyaXB0
b3JNZXRob2RzKGRlc2NyaXB0b3JfLCBjb250ZXh0Xy0+RW5mb3JjZUxpdGUoKSkgJiYKLSAgICAg
ICFvcmRpbmFsX2lzX2luZGV4KSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoIiAgdGhpcy5pbmRleCA9
IGluZGV4O1xuIik7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiAgdGhpcy52YWx1ZSA9
IHZhbHVlO1xuIgotICAgICJ9XG4iKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiXG4iCi0g
ICAgIi8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChlbnVtX3Njb3BlOiRmdWxsX25hbWUkKVxu
IiwKLSAgICAiZnVsbF9uYW1lIiwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFtZSgpKTsKLQotICBwcmlu
dGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9XG5cbiIpOwotfQotCi1ib29sIEVu
dW1HZW5lcmF0b3I6OkNhblVzZUVudW1WYWx1ZXMoKSB7Ci0gIGlmIChjYW5vbmljYWxfdmFsdWVz
Xy5zaXplKCkgIT0gZGVzY3JpcHRvcl8tPnZhbHVlX2NvdW50KCkpIHsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+dmFsdWVfY291bnQo
KTsgaSsrKSB7Ci0gICAgaWYgKGRlc2NyaXB0b3JfLT52YWx1ZShpKS0+bmFtZSgpICE9IGNhbm9u
aWNhbF92YWx1ZXNfW2ldLT5uYW1lKCkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
IH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1l
c3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNl
IGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2
YV9lbnVtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW0uaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBkOTFmNWE1NTFlM2RlZmRiZDdhOThkN2Iz
NDBkYzAyNWY3ZjYyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW0uaAorKysgL2Rl
di9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFz
ZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hl
bWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZf
Q09NUElMRVJfSkFWQV9FTlVNX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJf
SkFWQV9FTlVNX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xl
IHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0gIG5hbWVzcGFjZSBjb21waWxlciB7Ci0gICAgbmFt
ZXNwYWNlIGphdmEgewotICAgICAgY2xhc3MgQ29udGV4dDsgICAgICAgICAgIC8vIGNvbnRleHQu
aAotICAgICAgY2xhc3MgQ2xhc3NOYW1lUmVzb2x2ZXI7IC8vIG5hbWVfcmVzb2x2ZXIuaAotICAg
IH0KLSAgfQotICBuYW1lc3BhY2UgaW8gewotICAgIGNsYXNzIFByaW50ZXI7ICAgICAgICAgICAg
IC8vIHByaW50ZXIuaAotICB9Ci19Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ug
Y29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1jbGFzcyBFbnVtR2VuZXJhdG9yIHsKLSBw
dWJsaWM6Ci0gIGV4cGxpY2l0IEVudW1HZW5lcmF0b3IoY29uc3QgRW51bURlc2NyaXB0b3IqIGRl
c2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbW11dGFibGVfYXBpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRleHQpOwotICB+RW51bUdlbmVy
YXRvcigpOwotCi0gIHZvaWQgR2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gcHJp
dmF0ZToKLSAgY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotCi0gIC8vIFRoZSBw
cm90byBsYW5ndWFnZSBhbGxvd3MgbXVsdGlwbGUgZW51bSBjb25zdGFudHMgdG8gaGF2ZSB0aGUg
c2FtZSBudW1lcmljCi0gIC8vIHZhbHVlLiAgSmF2YSwgaG93ZXZlciwgZG9lcyBub3QgYWxsb3cg
bXVsdGlwbGUgZW51bSBjb25zdGFudHMgdG8gYmUKLSAgLy8gY29uc2lkZXJlZCBlcXVpdmFsZW50
LiAgV2UgdHJlYXQgdGhlIGZpcnN0IGRlZmluZWQgY29uc3RhbnQgZm9yIGFueQotICAvLyBnaXZl
biBudW1lcmljIHZhbHVlIGFzICJjYW5vbmljYWwiIGFuZCB0aGUgcmVzdCBhcyBhbGlhc2VzIG9m
IHRoYXQKLSAgLy8gY2Fub25pY2FsIHZhbHVlLgotICB2ZWN0b3I8Y29uc3QgRW51bVZhbHVlRGVz
Y3JpcHRvcio+IGNhbm9uaWNhbF92YWx1ZXNfOwotCi0gIHN0cnVjdCBBbGlhcyB7Ci0gICAgY29u
c3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWU7Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3Jp
cHRvciogY2Fub25pY2FsX3ZhbHVlOwotICB9OwotICB2ZWN0b3I8QWxpYXM+IGFsaWFzZXNfOwot
Ci0gIGJvb2wgaW1tdXRhYmxlX2FwaV87Ci0KLSAgQ29udGV4dCogY29udGV4dF87Ci0gIENsYXNz
TmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLQotICBib29sIENhblVzZUVudW1WYWx1ZXMo
KTsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRW51bUdlbmVyYXRvcik7
Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlm
ICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9FTlVNX0hfXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2ZpZWxkLmNjIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2ZpZWxkLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTU0YmUzZDVhNDk1YmZlZjFiYmQxZGZkZWExNjVkNDhj
OTkyZWQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9maWVsZC5jYworKysgL2Rl
di9udWxsCkBAIC0xLDk2MiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJh
c2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdo
ZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9maWVsZC5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewot
bmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhIHsKLQotbmFtZXNwYWNlIHsKLQot
dm9pZCBTZXRFbnVtVmFyaWFibGVzKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwK
LSAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgICAgICAg
ICAgICAgICAgIGludCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmllbGRHZW5lcmF0b3JJbmZvKiBpbmZvLAotICAgICAgICAgICAgICAgICAgICAgIENsYXNz
TmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyLAotICAgICAgICAgICAgICAgICAgICAgIG1hcDxz
dHJpbmcsIHN0cmluZz4qIHZhcmlhYmxlcykgewotICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhk
ZXNjcmlwdG9yLCBpbmZvLCB2YXJpYWJsZXMpOwotCi0gICgqdmFyaWFibGVzKVsidHlwZSJdID0K
LSAgICAgIG5hbWVfcmVzb2x2ZXItPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yLT5l
bnVtX3R5cGUoKSk7Ci0gICgqdmFyaWFibGVzKVsibXV0YWJsZV90eXBlIl0gPQotICAgICAgbmFt
ZV9yZXNvbHZlci0+R2V0TXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yLT5lbnVtX3R5cGUoKSk7
Ci0gICgqdmFyaWFibGVzKVsiZGVmYXVsdCJdID0gSW1tdXRhYmxlRGVmYXVsdFZhbHVlKGRlc2Ny
aXB0b3IsIG5hbWVfcmVzb2x2ZXIpOwotICAoKnZhcmlhYmxlcylbImRlZmF1bHRfbnVtYmVyIl0g
PSBTaW1wbGVJdG9hKAotICAgICAgZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1ZV9lbnVtKCktPm51
bWJlcigpKTsKLSAgKCp2YXJpYWJsZXMpWyJ0YWciXSA9IFNpbXBsZUl0b2EoaW50ZXJuYWw6Oldp
cmVGb3JtYXQ6Ok1ha2VUYWcoZGVzY3JpcHRvcikpOwotICAoKnZhcmlhYmxlcylbInRhZ19zaXpl
Il0gPSBTaW1wbGVJdG9hKAotICAgICAgaW50ZXJuYWw6OldpcmVGb3JtYXQ6OlRhZ1NpemUoZGVz
Y3JpcHRvci0+bnVtYmVyKCksIEdldFR5cGUoZGVzY3JpcHRvcikpKTsKLSAgLy8gVE9ETyhiaXJk
byk6IEFkZCBAZGVwcmVjYXRlZCBqYXZhZG9jIHdoZW4gZ2VuZXJhdGluZyBqYXZhZG9jIGlzIHN1
cHBvcnRlZAotICAvLyBieSB0aGUgcHJvdG8gY29tcGlsZXIKLSAgKCp2YXJpYWJsZXMpWyJkZXBy
ZWNhdGlvbiJdID0gZGVzY3JpcHRvci0+b3B0aW9ucygpLmRlcHJlY2F0ZWQoKQotICAgICAgPyAi
QGphdmEubGFuZy5EZXByZWNhdGVkICIgOiAiIjsKLSAgKCp2YXJpYWJsZXMpWyJvbl9jaGFuZ2Vk
Il0gPSAib25DaGFuZ2VkKCk7IjsKLQotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3Jp
cHRvci0+ZmlsZSgpKSkgewotICAgIC8vIEZvciBzaW5ndWxhciBtZXNzYWdlcyBhbmQgYnVpbGRl
cnMsIG9uZSBiaXQgaXMgdXNlZCBmb3IgdGhlIGhhc0ZpZWxkIGJpdC4KLSAgICAoKnZhcmlhYmxl
cylbImdldF9oYXNfZmllbGRfYml0X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0Qml0KG1lc3NhZ2VC
aXRJbmRleCk7Ci0gICAgKCp2YXJpYWJsZXMpWyJnZXRfaGFzX2ZpZWxkX2JpdF9idWlsZGVyIl0g
PSBHZW5lcmF0ZUdldEJpdChidWlsZGVyQml0SW5kZXgpOwotCi0gICAgLy8gTm90ZSB0aGF0IHRo
ZXNlIGhhdmUgYSB0cmFpbGluZyAiOyIuCi0gICAgKCp2YXJpYWJsZXMpWyJzZXRfaGFzX2ZpZWxk
X2JpdF9tZXNzYWdlIl0gPQotICAgICAgICBHZW5lcmF0ZVNldEJpdChtZXNzYWdlQml0SW5kZXgp
ICsgIjsiOwotICAgICgqdmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9iaXRfYnVpbGRlciJdID0K
LSAgICAgICAgR2VuZXJhdGVTZXRCaXQoYnVpbGRlckJpdEluZGV4KSArICI7IjsKLSAgICAoKnZh
cmlhYmxlcylbImNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRlciJdID0KLSAgICAgICAgR2VuZXJh
dGVDbGVhckJpdChidWlsZGVyQml0SW5kZXgpICsgIjsiOwotCi0gICAgKCp2YXJpYWJsZXMpWyJp
c19maWVsZF9wcmVzZW50X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0Qml0KG1lc3NhZ2VCaXRJbmRl
eCk7Ci0gIH0gZWxzZSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJzZXRfaGFzX2ZpZWxkX2JpdF9tZXNz
YWdlIl0gPSAiIjsKLSAgICAoKnZhcmlhYmxlcylbInNldF9oYXNfZmllbGRfYml0X2J1aWxkZXIi
XSA9ICIiOwotICAgICgqdmFyaWFibGVzKVsiY2xlYXJfaGFzX2ZpZWxkX2JpdF9idWlsZGVyIl0g
PSAiIjsKLQotICAgICgqdmFyaWFibGVzKVsiaXNfZmllbGRfcHJlc2VudF9tZXNzYWdlIl0gPQot
ICAgICAgICAoKnZhcmlhYmxlcylbIm5hbWUiXSArICJfICE9ICIgKwotICAgICAgICAoKnZhcmlh
YmxlcylbImRlZmF1bHQiXSArICIuZ2V0TnVtYmVyKCkiOwotICB9Ci0KLSAgLy8gRm9yIHJlcGF0
ZWQgYnVpbGRlcnMsIG9uZSBiaXQgaXMgdXNlZCBmb3Igd2hldGhlciB0aGUgYXJyYXkgaXMgaW1t
dXRhYmxlLgotICAoKnZhcmlhYmxlcylbImdldF9tdXRhYmxlX2JpdF9idWlsZGVyIl0gPSBHZW5l
cmF0ZUdldEJpdChidWlsZGVyQml0SW5kZXgpOwotICAoKnZhcmlhYmxlcylbInNldF9tdXRhYmxl
X2JpdF9idWlsZGVyIl0gPSBHZW5lcmF0ZVNldEJpdChidWlsZGVyQml0SW5kZXgpOwotICAoKnZh
cmlhYmxlcylbImNsZWFyX211dGFibGVfYml0X2J1aWxkZXIiXSA9IEdlbmVyYXRlQ2xlYXJCaXQo
YnVpbGRlckJpdEluZGV4KTsKLQotICAvLyBGb3IgcmVwZWF0ZWQgZmllbGRzLCBvbmUgYml0IGlz
IHVzZWQgZm9yIHdoZXRoZXIgdGhlIGFycmF5IGlzIGltbXV0YWJsZQotICAvLyBpbiB0aGUgcGFy
c2luZyBjb25zdHJ1Y3Rvci4KLSAgKCp2YXJpYWJsZXMpWyJnZXRfbXV0YWJsZV9iaXRfcGFyc2Vy
Il0gPQotICAgICAgR2VuZXJhdGVHZXRCaXRNdXRhYmxlTG9jYWwoYnVpbGRlckJpdEluZGV4KTsK
LSAgKCp2YXJpYWJsZXMpWyJzZXRfbXV0YWJsZV9iaXRfcGFyc2VyIl0gPQotICAgICAgR2VuZXJh
dGVTZXRCaXRNdXRhYmxlTG9jYWwoYnVpbGRlckJpdEluZGV4KTsKLQotICAoKnZhcmlhYmxlcylb
ImdldF9oYXNfZmllbGRfYml0X2Zyb21fbG9jYWwiXSA9Ci0gICAgICBHZW5lcmF0ZUdldEJpdEZy
b21Mb2NhbChidWlsZGVyQml0SW5kZXgpOwotICAoKnZhcmlhYmxlcylbInNldF9oYXNfZmllbGRf
Yml0X3RvX2xvY2FsIl0gPQotICAgICAgR2VuZXJhdGVTZXRCaXRUb0xvY2FsKG1lc3NhZ2VCaXRJ
bmRleCk7Ci0KLSAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3ItPmZpbGUo
KSkpIHsKLSAgICAoKnZhcmlhYmxlcylbInVua25vd24iXSA9ICgqdmFyaWFibGVzKVsidHlwZSJd
ICsgIi5VTlJFQ09HTklaRUQiOwotICB9IGVsc2UgewotICAgICgqdmFyaWFibGVzKVsidW5rbm93
biJdID0gKCp2YXJpYWJsZXMpWyJkZWZhdWx0Il07Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNl
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotSW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yOjoKLUltbXV0
YWJsZUVudW1GaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3Is
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVpbGRlckJpdEluZGV4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRleHQpCi0gIDogZGVzY3JpcHRvcl8oZGVzY3Jp
cHRvciksIG1lc3NhZ2VCaXRJbmRleF8obWVzc2FnZUJpdEluZGV4KSwKLSAgICBidWlsZGVyQml0
SW5kZXhfKGJ1aWxkZXJCaXRJbmRleCksCi0gICAgbmFtZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0
TmFtZVJlc29sdmVyKCkpIHsKLSAgU2V0RW51bVZhcmlhYmxlcyhkZXNjcmlwdG9yLCBtZXNzYWdl
Qml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5H
ZXRGaWVsZEdlbmVyYXRvckluZm8oZGVzY3JpcHRvciksCi0gICAgICAgICAgICAgICAgICAgbmFt
ZV9yZXNvbHZlcl8sICZ2YXJpYWJsZXNfKTsKLX0KLQotSW1tdXRhYmxlRW51bUZpZWxkR2VuZXJh
dG9yOjp+SW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yKCkge30KLQotaW50IEltbXV0YWJsZUVu
dW1GaWVsZEdlbmVyYXRvcjo6R2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25zdCB7Ci0gIHJldHVy
biAxOwotfQotCi1pbnQgSW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yOjpHZXROdW1CaXRzRm9y
QnVpbGRlcigpIGNvbnN0IHsKLSAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZp
ZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW50ZXJmYWNlTWVtYmVycyhpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgewotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZp
bGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kYm9v
bGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIpOwotICB9Ci0gIGlmIChTdXBwb3J0VW5r
bm93bkVudW1WYWx1ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2ND
b21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRpbnQgZ2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUo
KTtcbiIpOwotICB9Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJCR0eXBl
JCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZUVudW1G
aWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSBpbnQgJG5h
bWUkXztcbiIpOwotICBQcmludEV4dHJhRmllbGRJbmZvKHZhcmlhYmxlc18sIHByaW50ZXIpOwot
ICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBX
cml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFz
JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRnZXRfaGFzX2ZpZWxk
X2JpdF9tZXNzYWdlJDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotICBpZiAoU3VwcG9ydFVua25v
d25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRW
YWx1ZSgpIHtcbiIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfO1xuIgotICAgICAgIn1cbiIpOwot
ICB9Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQg
Z2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgICR0eXBlJCByZXN1bHQgPSAkdHlw
ZSQuZm9yTnVtYmVyKCRuYW1lJF8pO1xuIgotICAgICIgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/
ICR1bmtub3duJCA6IHJlc3VsdDtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxl
RW51bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJp
dmF0ZSBpbnQgJG5hbWUkXyA9ICRkZWZhdWx0X251bWJlciQ7XG4iKTsKLSAgaWYgKFN1cHBvcnRG
aWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9u
YW1lJCgpIHtcbiIKLSAgICAgICIgIHJldHVybiAkZ2V0X2hhc19maWVsZF9iaXRfYnVpbGRlciQ7
XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLSAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRl
c2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRl
cHJlY2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUoKSB7XG4iCi0g
ICAgICAiICByZXR1cm4gJG5hbWUkXztcbiIKLSAgICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxk
RG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxp
emVkX25hbWUkVmFsdWUoaW50IHZhbHVlKSB7XG4iCi0gICAgICAiICAkbmFtZSRfID0gdmFsdWU7
XG4iCi0gICAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAgICIgIHJldHVybiB0aGlzO1xuIgot
ICAgICAgIn1cbiIpOwotICB9Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2Ny
aXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9u
JHB1YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgICR0eXBl
JCByZXN1bHQgPSAkdHlwZSQuZm9yTnVtYmVyKCRuYW1lJF8pO1xuIgotICAgICIgIHJldHVybiBy
ZXN1bHQgPT0gbnVsbCA/ICR1bmtub3duJCA6IHJlc3VsdDtcbiIKLSAgICAifVxuIik7Ci0gIFdy
aXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRjYXBp
dGFsaXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiICBpZiAodmFsdWUgPT0gbnVs
bCkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7XG4iCi0g
ICAgIiAgfVxuIgotICAgICIgICRzZXRfaGFzX2ZpZWxkX2JpdF9idWlsZGVyJFxuIgotICAgICIg
ICRuYW1lJF8gPSB2YWx1ZS5nZXROdW1iZXIoKTtcbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIK
LSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGNsZWFyJGNhcGl0YWxpemVkX25hbWUk
KCkge1xuIgotICAgICIgICRjbGVhcl9oYXNfZmllbGRfYml0X2J1aWxkZXIkXG4iCi0gICAgIiAg
JG5hbWUkXyA9ICRkZWZhdWx0X251bWJlciQ7XG4iCi0gICAgIiAgJG9uX2NoYW5nZWQkXG4iCi0g
ICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZUVu
dW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgIGNvbnN0IHsKLSAgLy8gbm9vcCBmb3IgZW51bXMKLX0K
LQotdm9pZCBJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJbml0aWFsaXph
dGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywgIiRuYW1lJF8gPSAkZGVmYXVsdF9udW1iZXIkO1xuIik7Ci19Ci0KLXZvaWQg
SW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRlckNsZWFyQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICIkbmFtZSRfID0gJGRlZmF1bHRfbnVtYmVyJDtcbiIKLSAgICAiJGNsZWFyX2hhc19m
aWVsZF9iaXRfYnVpbGRlciRcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZUVudW1GaWVsZEdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7
Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAg
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaWYgKG90aGVyLmhhcyRjYXBpdGFs
aXplZF9uYW1lJCgpKSB7XG4iCi0gICAgICAiICBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQob3RoZXIu
Z2V0JGNhcGl0YWxpemVkX25hbWUkKCkpO1xuIgotICAgICAgIn1cbiIpOwotICB9IGVsc2UgaWYg
KFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJpZiAob3RoZXIuJG5hbWUkXyAhPSAkZGVm
YXVsdF9udW1iZXIkKSB7XG4iCi0gICAgICAiICBzZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZShv
dGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZSgpKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAg
fSBlbHNlIHsKLSAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3QgcmVhY2ggaGVyZS4iOwot
ICB9Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVp
bGRpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChTdXBwb3J0Rmll
bGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgICAiaWYgKCRnZXRfaGFzX2ZpZWxkX2JpdF9mcm9tX2xvY2FsJCkge1xu
IgotICAgICAgIiAgJHNldF9oYXNfZmllbGRfYml0X3RvX2xvY2FsJDtcbiIKLSAgICAgICJ9XG4i
KTsKLSAgfQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJyZXN1bHQuJG5hbWUk
XyA9ICRuYW1lJF87XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBp
ZiAoU3VwcG9ydFVua25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImludCByYXdWYWx1ZSA9IGlucHV0LnJl
YWRFbnVtKCk7XG4iCi0gICAgICAiJHNldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkXG4iCi0gICAg
ICAiJG5hbWUkXyA9IHJhd1ZhbHVlO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICJpbnQgcmF3VmFsdWUgPSBpbnB1dC5yZWFkRW51bSgpO1xu
IgotICAgICAgIiR0eXBlJCB2YWx1ZSA9ICR0eXBlJC5mb3JOdW1iZXIocmF3VmFsdWUpO1xuIgot
ICAgICAgImlmICh2YWx1ZSA9PSBudWxsKSB7XG4iKTsKLSAgICBpZiAoUHJlc2VydmVVbmtub3du
RmllbGRzKGRlc2NyaXB0b3JfLT5jb250YWluaW5nX3R5cGUoKSkpIHsKLSAgICAgIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgICAgICIgIHVua25vd25GaWVsZHMubWVyZ2VWYXJpbnRG
aWVsZCgkbnVtYmVyJCwgcmF3VmFsdWUpO1xuIik7Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgICAifSBlbHNlIHtcbiIKLSAgICAgICIgICRzZXRfaGFzX2ZpZWxk
X2JpdF9tZXNzYWdlJFxuIgotICAgICAgIiAgJG5hbWUkXyA9IHJhd1ZhbHVlO1xuIgotICAgICAg
In1cbiIpOwotICB9Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yOjoKLUdl
bmVyYXRlUGFyc2luZ0RvbmVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8v
IG5vb3AgZm9yIGVudW1zCi19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yOjoK
LUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRpc19maWVsZF9wcmVzZW50
X21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgb3V0cHV0LndyaXRlRW51bSgkbnVtYmVyJCwgJG5hbWUk
Xyk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZUVudW1GaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoJGlzX2ZpZWxkX3By
ZXNlbnRfbWVzc2FnZSQpIHtcbiIKLSAgICAiICBzaXplICs9IGNvbS5nb29nbGUucHJvdG9idWYu
Q29kZWRPdXRwdXRTdHJlYW1cbiIKLSAgICAiICAgIC5jb21wdXRlRW51bVNpemUoJG51bWJlciQs
ICRuYW1lJF8pO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVFbnVtRmllbGRH
ZW5lcmF0b3I6OgotR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInJlc3VsdCA9IHJlc3VsdCAm
JiAkbmFtZSRfID09IG90aGVyLiRuYW1lJF87XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVFbnVt
RmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNoQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJoYXNoID0gKDM3ICog
aGFzaCkgKyAkY29uc3RhbnRfbmFtZSQ7XG4iCi0gICAgImhhc2ggPSAoNTMgKiBoYXNoKSArICRu
YW1lJF87XG4iKTsKLX0KLQotc3RyaW5nIEltbXV0YWJsZUVudW1GaWVsZEdlbmVyYXRvcjo6R2V0
Qm94ZWRUeXBlKCkgY29uc3QgewotICByZXR1cm4gbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJs
ZUNsYXNzTmFtZShkZXNjcmlwdG9yXy0+ZW51bV90eXBlKCkpOwotfQotCi0vLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0KLUltbXV0YWJsZUVudW1PbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUltbXV0YWJsZUVudW1PbmVv
ZkZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVpbGRlckJpdEluZGV4LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29udGV4dCkKLSAgICA6IEltbXV0YWJs
ZUVudW1GaWVsZEdlbmVyYXRvcigKLSAgICAgICAgICBkZXNjcmlwdG9yLCBtZXNzYWdlQml0SW5k
ZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCkgewotICBjb25zdCBPbmVvZkdlbmVyYXRvcklu
Zm8qIGluZm8gPQotICAgICAgY29udGV4dC0+R2V0T25lb2ZHZW5lcmF0b3JJbmZvKGRlc2NyaXB0
b3ItPmNvbnRhaW5pbmdfb25lb2YoKSk7Ci0gIFNldENvbW1vbk9uZW9mVmFyaWFibGVzKGRlc2Ny
aXB0b3IsIGluZm8sICZ2YXJpYWJsZXNfKTsKLX0KLQotSW1tdXRhYmxlRW51bU9uZW9mRmllbGRH
ZW5lcmF0b3I6OgotfkltbXV0YWJsZUVudW1PbmVvZkZpZWxkR2VuZXJhdG9yKCkge30KLQotdm9p
ZCBJbW11dGFibGVFbnVtT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgUHJpbnRFeHRyYUZpZWxkSW5mbyh2YXJpYWJs
ZXNfLCBwcmludGVyKTsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5m
aWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1
YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAgICIgIHJldHVy
biAkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLSAgaWYg
KFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0
YWxpemVkX25hbWUkVmFsdWUoKSB7XG4iCi0gICAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21l
c3NhZ2UkKSB7XG4iCi0gICAgICAiICAgIHJldHVybiAoamF2YS5sYW5nLkludGVnZXIpICRvbmVv
Zl9uYW1lJF87XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICByZXR1cm4gJGRlZmF1bHRfbnVt
YmVyJDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAg
ICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICAkdHlwZSQg
cmVzdWx0ID0gJHR5cGUkLmZvck51bWJlcigoamF2YS5sYW5nLkludGVnZXIpICRvbmVvZl9uYW1l
JF8pO1xuIgotICAgICIgICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gJHVua25vd24kIDogcmVz
dWx0O1xuIgotICAgICIgIH1cbiIKLSAgICAiICByZXR1cm4gJGRlZmF1bHQkO1xuIgotICAgICJ9
XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVFbnVtT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5l
cmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChT
dXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgYm9vbGVhbiBoYXMkY2FwaXRh
bGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAiICByZXR1cm4gJGhhc19vbmVvZl9jYXNlX21lc3Nh
Z2UkO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0gIGlmIChTdXBwb3J0VW5rbm93bkVudW1WYWx1
ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50
ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
IiRkZXByZWNhdGlvbiRwdWJsaWMgaW50IGdldCRjYXBpdGFsaXplZF9uYW1lJFZhbHVlKCkge1xu
IgotICAgICAgIiAgaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICAgIiAg
ICByZXR1cm4gKChqYXZhLmxhbmcuSW50ZWdlcikgJG9uZW9mX25hbWUkXykuaW50VmFsdWUoKTtc
biIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIHJldHVybiAkZGVmYXVsdF9udW1iZXIkO1xuIgot
ICAgICAgIn1cbiIpOwotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0
b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlv
biRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZShpbnQgdmFsdWUpIHtc
biIKLSAgICAgICIgICRzZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAgICIgICRvbmVv
Zl9uYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAgICIgICRvbl9jaGFuZ2VkJFxuIgotICAgICAgIiAg
cmV0dXJuIHRoaXM7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLSAgV3JpdGVGaWVsZERvY0NvbW1l
bnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7
XG4iCi0gICAgIiAgaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgICAg
JHR5cGUkIHJlc3VsdCA9ICR0eXBlJC5mb3JOdW1iZXIoKGphdmEubGFuZy5JbnRlZ2VyKSAkb25l
b2ZfbmFtZSRfKTtcbiIKLSAgICAiICAgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/ICR1bmtub3du
JCA6IHJlc3VsdDtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgcmV0dXJuICRkZWZhdWx0JDtcbiIK
LSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1Ymxp
YyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAi
ICBpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IE51bGxQb2ludGVy
RXhjZXB0aW9uKCk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgICRzZXRfb25lb2ZfY2FzZV9tZXNz
YWdlJDtcbiIKLSAgICAiICAkb25lb2ZfbmFtZSRfID0gdmFsdWUuZ2V0TnVtYmVyKCk7XG4iCi0g
ICAgIiAgJG9uX2NoYW5nZWQkXG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIp
OwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBj
bGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNl
X21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICAkY2xlYXJfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIK
LSAgICAiICAgICRvbmVvZl9uYW1lJF8gPSBudWxsO1xuIgotICAgICIgICAgJG9uX2NoYW5nZWQk
XG4iCi0gICAgIiAgfVxuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLX0K
LQotdm9pZCBJbW11dGFibGVFbnVtT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxk
aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICJpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAg
IiAgcmVzdWx0LiRvbmVvZl9uYW1lJF8gPSAkb25lb2ZfbmFtZSRfO1xuIgotICAgICJ9XG4iKTsK
LX0KLQotdm9pZCBJbW11dGFibGVFbnVtT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1l
cmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChTdXBwb3J0VW5r
bm93bkVudW1WYWx1ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgICAic2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUob3RoZXIuZ2V0
JGNhcGl0YWxpemVkX25hbWUkVmFsdWUoKSk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgInNldCRjYXBpdGFsaXplZF9uYW1lJChvdGhlci5n
ZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7XG4iKTsKLSAgfQotfQotCi12b2lkIEltbXV0YWJsZUVu
dW1PbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0
b3JfLT5maWxlKCkpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJp
bnQgcmF3VmFsdWUgPSBpbnB1dC5yZWFkRW51bSgpO1xuIgotICAgICAgIiRzZXRfb25lb2ZfY2Fz
ZV9tZXNzYWdlJDtcbiIKLSAgICAgICIkb25lb2ZfbmFtZSRfID0gcmF3VmFsdWU7XG4iKTsKLSAg
fSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImludCByYXdW
YWx1ZSA9IGlucHV0LnJlYWRFbnVtKCk7XG4iCi0gICAgICAiJHR5cGUkIHZhbHVlID0gJHR5cGUk
LmZvck51bWJlcihyYXdWYWx1ZSk7XG4iCi0gICAgICAiaWYgKHZhbHVlID09IG51bGwpIHtcbiIp
OwotICAgIGlmIChQcmVzZXJ2ZVVua25vd25GaWVsZHMoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdf
dHlwZSgpKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIiAg
dW5rbm93bkZpZWxkcy5tZXJnZVZhcmludEZpZWxkKCRudW1iZXIkLCByYXdWYWx1ZSk7XG4iKTsK
LSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJ9IGVsc2Uge1xu
IgotICAgICAgIiAgJHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICAgIiAgJG9uZW9m
X25hbWUkXyA9IHJhd1ZhbHVlO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgSW1t
dXRhYmxlRW51bU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICJpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgb3V0
cHV0LndyaXRlRW51bSgkbnVtYmVyJCwgKChqYXZhLmxhbmcuSW50ZWdlcikgJG9uZW9mX25hbWUk
XykpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVFbnVtT25lb2ZGaWVsZEdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoJGhhc19v
bmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgc2l6ZSArPSBjb20uZ29vZ2xlLnByb3Rv
YnVmLkNvZGVkT3V0cHV0U3RyZWFtXG4iCi0gICAgIiAgICAuY29tcHV0ZUVudW1TaXplKCRudW1i
ZXIkLCAoKGphdmEubGFuZy5JbnRlZ2VyKSAkb25lb2ZfbmFtZSRfKSk7XG4iCi0gICAgIn1cbiIp
OwotfQotCi12b2lkIEltbXV0YWJsZUVudW1PbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRl
RXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoU3VwcG9ydFVu
a25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICAgInJlc3VsdCA9IHJlc3VsdCAmJiBnZXQkY2FwaXRhbGl6ZWRf
bmFtZSRWYWx1ZSgpXG4iCi0gICAgICAiICAgID09IG90aGVyLmdldCRjYXBpdGFsaXplZF9uYW1l
JFZhbHVlKCk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICAgInJlc3VsdCA9IHJlc3VsdCAmJiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKVxuIgot
ICAgICAgIiAgICAuZXF1YWxzKG90aGVyLmdldCRjYXBpdGFsaXplZF9uYW1lJCgpKTtcbiIpOwot
ICB9Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJh
dGVIYXNoQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoU3VwcG9ydFVu
a25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICAgImhhc2ggPSAoMzcgKiBoYXNoKSArICRjb25zdGFudF9uYW1l
JDtcbiIKLSAgICAgICJoYXNoID0gKDUzICogaGFzaCkgKyBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRW
YWx1ZSgpO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAgICJoYXNoID0gKDM3ICogaGFzaCkgKyAkY29uc3RhbnRfbmFtZSQ7XG4iCi0gICAgICAi
aGFzaCA9ICg1MyAqIGhhc2gpICsgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkuZ2V0TnVtYmVyKCk7
XG4iKTsKLSAgfQotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVJlcGVhdGVkSW1tdXRhYmxlRW51bUZp
ZWxkR2VuZXJhdG9yOjoKLVJlcGVhdGVkSW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yKGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYnVpbGRlckJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29udGV4dCogY29udGV4dCkKLSAgOiBkZXNjcmlwdG9yXyhkZXNjcmlwdG9y
KSwgbWVzc2FnZUJpdEluZGV4XyhtZXNzYWdlQml0SW5kZXgpLAotICAgIGJ1aWxkZXJCaXRJbmRl
eF8oYnVpbGRlckJpdEluZGV4KSwgY29udGV4dF8oY29udGV4dCksCi0gICAgbmFtZV9yZXNvbHZl
cl8oY29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpIHsKLSAgU2V0RW51bVZhcmlhYmxlcyhkZXNj
cmlwdG9yLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5HZXRGaWVsZEdlbmVyYXRvckluZm8oZGVzY3JpcHRvciksCi0gICAgICAg
ICAgICAgICAgICAgbmFtZV9yZXNvbHZlcl8sICZ2YXJpYWJsZXNfKTsKLX0KLQotUmVwZWF0ZWRJ
bW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6On5SZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZEdl
bmVyYXRvcigpIHt9Ci0KLWludCBSZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZEdlbmVyYXRvcjo6
R2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25zdCB7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgUmVw
ZWF0ZWRJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6OkdldE51bUJpdHNGb3JCdWlsZGVyKCkg
Y29uc3QgewotICByZXR1cm4gMTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZUVudW1GaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUludGVyZmFjZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0IHsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kamF2YS51
dGlsLkxpc3Q8JHR5cGUkPiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCk7XG4iKTsKLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kaW50IGdldCRjYXBpdGFsaXplZF9uYW1l
JENvdW50KCk7XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kJHR5
cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJChpbnQgaW5kZXgpO1xuIik7Ci0gIGlmIChTdXBwb3J0
VW5rbm93bkVudW1WYWx1ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGRE
b2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuSW50
ZWdlcj5cbiIKLSAgICAgICJnZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZUxpc3QoKTtcbiIpOwot
ICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRpbnQgZ2V0JGNhcGl0
YWxpemVkX25hbWUkVmFsdWUoaW50IGluZGV4KTtcbiIpOwotICB9Ci19Ci0KLXZvaWQgUmVwZWF0
ZWRJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
InByaXZhdGUgamF2YS51dGlsLkxpc3Q8amF2YS5sYW5nLkludGVnZXI+ICRuYW1lJF87XG4iCi0g
ICAgInByaXZhdGUgc3RhdGljIGZpbmFsIGNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJuYWwuTGlz
dEFkYXB0ZXIuQ29udmVydGVyPFxuIgotICAgICIgICAgamF2YS5sYW5nLkludGVnZXIsICR0eXBl
JD4gJG5hbWUkX2NvbnZlcnRlcl8gPVxuIgotICAgICIgICAgICAgIG5ldyBjb20uZ29vZ2xlLnBy
b3RvYnVmLkludGVybmFsLkxpc3RBZGFwdGVyLkNvbnZlcnRlcjxcbiIKLSAgICAiICAgICAgICAg
ICAgamF2YS5sYW5nLkludGVnZXIsICR0eXBlJD4oKSB7XG4iCi0gICAgIiAgICAgICAgICBwdWJs
aWMgJHR5cGUkIGNvbnZlcnQoamF2YS5sYW5nLkludGVnZXIgZnJvbSkge1xuIgotICAgICIgICAg
ICAgICAgICAkdHlwZSQgcmVzdWx0ID0gJHR5cGUkLmZvck51bWJlcihmcm9tKTtcbiIKLSAgICAi
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gJHVua25vd24kIDogcmVzdWx0O1xu
IgotICAgICIgICAgICAgICAgfVxuIgotICAgICIgICAgICAgIH07XG4iKTsKLSAgUHJpbnRFeHRy
YUZpZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmludGVyKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQo
cHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRpbC5MaXN0PCR0eXBlJD4gZ2V0JGNhcGl0YWxp
emVkX25hbWUkTGlzdCgpIHtcbiIKLSAgICAiICByZXR1cm4gbmV3IGNvbS5nb29nbGUucHJvdG9i
dWYuSW50ZXJuYWwuTGlzdEFkYXB0ZXI8XG4iCi0gICAgIiAgICAgIGphdmEubGFuZy5JbnRlZ2Vy
LCAkdHlwZSQ+KCRuYW1lJF8sICRuYW1lJF9jb252ZXJ0ZXJfKTtcbiIKLSAgICAifVxuIik7Ci0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0
YWxpemVkX25hbWUkQ291bnQoKSB7XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF8uc2l6ZSgpO1xu
IgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVi
bGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoaW50IGluZGV4KSB7XG4iCi0gICAgIiAg
cmV0dXJuICRuYW1lJF9jb252ZXJ0ZXJfLmNvbnZlcnQoJG5hbWUkXy5nZXQoaW5kZXgpKTtcbiIK
LSAgICAifVxuIik7Ci0gIGlmIChTdXBwb3J0VW5rbm93bkVudW1WYWx1ZShkZXNjcmlwdG9yXy0+
ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRw
dWJsaWMgamF2YS51dGlsLkxpc3Q8amF2YS5sYW5nLkludGVnZXI+XG4iCi0gICAgICAiZ2V0JGNh
cGl0YWxpemVkX25hbWUkVmFsdWVMaXN0KCkge1xuIgotICAgICAgIiAgcmV0dXJuICRuYW1lJF87
XG4iCi0gICAgICAifVxuIik7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJl
Y2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUoaW50IGluZGV4KSB7
XG4iCi0gICAgICAiICByZXR1cm4gJG5hbWUkXy5nZXQoaW5kZXgpO1xuIgotICAgICAgIn1cbiIp
OwotICB9Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT5pc19wYWNrZWQoKSAmJgotICAgICAgY29udGV4
dF8tPkhhc0dlbmVyYXRlZE1ldGhvZHMoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlwZSgpKSkg
ewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAicHJpdmF0ZSBpbnQgJG5h
bWUkTWVtb2l6ZWRTZXJpYWxpemVkU2l6ZTtcbiIpOwotICB9Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJ
bW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgIC8vIE9uZSBmaWVsZCBpcyB0aGUgbGlzdCBhbmQgdGhlIG90aGVyIGZpZWxkIGtlZXBzIHRy
YWNrIG9mIHdoZXRoZXIgdGhlCi0gICAgLy8gbGlzdCBpcyBpbW11dGFibGUuIElmIGl0J3MgaW1t
dXRhYmxlLCB0aGUgaW52YXJpYW50IGlzIHRoYXQgaXQgbXVzdAotICAgIC8vIGVpdGhlciBhbiBp
bnN0YW5jZSBvZiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSBvciBpdCdzIGFuIEFycmF5TGlzdAot
ICAgIC8vIHdyYXBwZWQgaW4gYSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KCkgd3JhcHBl
ciBhbmQgbm9ib2R5IGVsc2UgaGFzCi0gICAgLy8gYSByZWZlcmVyZW5jZSB0byB0aGUgdW5kZXJs
eWluZyBBcnJheUxpc3QuIFRoaXMgaW52YXJpYW50IGFsbG93cyB1cyB0bwotICAgIC8vIHNoYXJl
IGluc3RhbmNlcyBvZiBsaXN0cyBiZXR3ZWVuIHByb3RvY29sIGJ1ZmZlcnMgYXZvaWRpbmcgZXhw
ZW5zaXZlCi0gICAgLy8gbWVtb3J5IGFsbG9jYXRpb25zLiBOb3RlLCBpbW11dGFibGUgaXMgYSBz
dHJvbmcgZ3VhcmFudGVlIGhlcmUgLS0gbm90Ci0gICAgLy8ganVzdCB0aGF0IHRoZSBsaXN0IGNh
bm5vdCBiZSBtb2RpZmllZCB2aWEgdGhlIHJlZmVyZW5jZSBidXQgdGhhdCB0aGUKLSAgICAvLyBs
aXN0IGNhbiBuZXZlciBiZSBtb2RpZmllZC4KLSAgICAicHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDxq
YXZhLmxhbmcuSW50ZWdlcj4gJG5hbWUkXyA9XG4iCi0gICAgIiAgamF2YS51dGlsLkNvbGxlY3Rp
b25zLmVtcHR5TGlzdCgpO1xuIgotCi0gICAgInByaXZhdGUgdm9pZCBlbnN1cmUkY2FwaXRhbGl6
ZWRfbmFtZSRJc011dGFibGUoKSB7XG4iCi0gICAgIiAgaWYgKCEkZ2V0X211dGFibGVfYml0X2J1
aWxkZXIkKSB7XG4iCi0gICAgIiAgICAkbmFtZSRfID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3Q8
amF2YS5sYW5nLkludGVnZXI+KCRuYW1lJF8pO1xuIgotICAgICIgICAgJHNldF9tdXRhYmxlX2Jp
dF9idWlsZGVyJDtcbiIKLSAgICAiICB9XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmllbGRE
b2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAvLyBOb3RlOiAgV2UgcmV0dXJuIGFuIHVubW9kaWZpYWJsZSBsaXN0IGJlY2F1
c2Ugb3RoZXJ3aXNlIHRoZSBjYWxsZXIKLSAgICAvLyAgIGNvdWxkIGhvbGQgb24gdG8gdGhlIHJl
dHVybmVkIGxpc3QgYW5kIG1vZGlmeSBpdCBhZnRlciB0aGUgbWVzc2FnZQotICAgIC8vICAgaGFz
IGJlZW4gYnVpbHQsIHRodXMgbXV0YXRpbmcgdGhlIG1lc3NhZ2Ugd2hpY2ggaXMgc3VwcG9zZWQg
dG8gYmUKLSAgICAvLyAgIGltbXV0YWJsZS4KLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZh
LnV0aWwuTGlzdDwkdHlwZSQ+IGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKSB7XG4iCi0gICAg
IiAgcmV0dXJuIG5ldyBjb20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLkxpc3RBZGFwdGVyPFxu
IgotICAgICIgICAgICBqYXZhLmxhbmcuSW50ZWdlciwgJHR5cGUkPigkbmFtZSRfLCAkbmFtZSRf
Y29udmVydGVyXyk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgaW50IGdldCRjYXBpdGFsaXplZF9uYW1lJENvdW50KCkge1xuIgot
ICAgICIgIHJldHVybiAkbmFtZSRfLnNpemUoKTtcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVk
X25hbWUkKGludCBpbmRleCkge1xuIgotICAgICIgIHJldHVybiAkbmFtZSRfY29udmVydGVyXy5j
b252ZXJ0KCRuYW1lJF8uZ2V0KGluZGV4KSk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxk
RG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRf
bmFtZSQoXG4iCi0gICAgIiAgICBpbnQgaW5kZXgsICR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIg
IGlmICh2YWx1ZSA9PSBudWxsKSB7XG4iCi0gICAgIiAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJF
eGNlcHRpb24oKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgZW5zdXJlJGNhcGl0YWxpemVkX25h
bWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5hbWUkXy5zZXQoaW5kZXgsIHZhbHVlLmdldE51
bWJlcigpKTtcbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAiICByZXR1cm4gdGhpcztc
biIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0
b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1
YmxpYyBCdWlsZGVyIGFkZCRjYXBpdGFsaXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIHtcbiIKLSAg
ICAiICBpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IE51bGxQb2lu
dGVyRXhjZXB0aW9uKCk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgIGVuc3VyZSRjYXBpdGFsaXpl
ZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRuYW1lJF8uYWRkKHZhbHVlLmdldE51bWJl
cigpKTtcbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIK
LSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1Ymxp
YyBCdWlsZGVyIGFkZEFsbCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgIGphdmEubGFu
Zy5JdGVyYWJsZTw/IGV4dGVuZHMgJHR5cGUkPiB2YWx1ZXMpIHtcbiIKLSAgICAiICBlbnN1cmUk
Y2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAiICBmb3IgKCR0eXBlJCB2YWx1
ZSA6IHZhbHVlcykge1xuIgotICAgICIgICAgJG5hbWUkXy5hZGQodmFsdWUuZ2V0TnVtYmVyKCkp
O1xuIgotICAgICIgIH1cbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAiICByZXR1cm4g
dGhpcztcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRl
c2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0
aW9uJHB1YmxpYyBCdWlsZGVyIGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIg
ICRuYW1lJF8gPSBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7XG4iCi0gICAgIiAg
JGNsZWFyX211dGFibGVfYml0X2J1aWxkZXIkO1xuIgotICAgICIgICRvbl9jaGFuZ2VkJFxuIgot
ICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICBpZiAoU3VwcG9ydFVua25v
d25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRpbC5MaXN0PGphdmEubGFuZy5J
bnRlZ2VyPlxuIgotICAgICAgImdldCRjYXBpdGFsaXplZF9uYW1lJFZhbHVlTGlzdCgpIHtcbiIK
LSAgICAgICIgIHJldHVybiBqYXZhLnV0aWwuQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdCgk
bmFtZSRfKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAg
ICIkZGVwcmVjYXRpb24kcHVibGljIGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZShpbnQg
aW5kZXgpIHtcbiIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfLmdldChpbmRleCk7XG4iCi0gICAg
ICAifVxuIik7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1
YmxpYyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJFZhbHVlKFxuIgotICAgICAgIiAgICBp
bnQgaW5kZXgsIGludCB2YWx1ZSkge1xuIgotICAgICAgIiAgZW5zdXJlJGNhcGl0YWxpemVkX25h
bWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgICAiICAkbmFtZSRfLnNldChpbmRleCwgdmFsdWUpO1xu
IgotICAgICAgIiAgJG9uX2NoYW5nZWQkXG4iCi0gICAgICAiICByZXR1cm4gdGhpcztcbiIKLSAg
ICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9y
Xyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24k
cHVibGljIEJ1aWxkZXIgYWRkJGNhcGl0YWxpemVkX25hbWUkVmFsdWUoaW50IHZhbHVlKSB7XG4i
Ci0gICAgICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAg
ICIgICRuYW1lJF8uYWRkKHZhbHVlKTtcbiIKLSAgICAgICIgICRvbl9jaGFuZ2VkJFxuIgotICAg
ICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgICAifVxuIik7Ci0gICAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGFkZEFsbCRjYXBpdGFsaXpl
ZF9uYW1lJFZhbHVlKFxuIgotICAgICAgIiAgICBqYXZhLmxhbmcuSXRlcmFibGU8amF2YS5sYW5n
LkludGVnZXI+IHZhbHVlcykge1xuIgotICAgICAgIiAgZW5zdXJlJGNhcGl0YWxpemVkX25hbWUk
SXNNdXRhYmxlKCk7XG4iCi0gICAgICAiICBmb3IgKGludCB2YWx1ZSA6IHZhbHVlcykge1xuIgot
ICAgICAgIiAgICAkbmFtZSRfLmFkZCh2YWx1ZSk7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAi
ICAkb25fY2hhbmdlZCRcbiIKLSAgICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICAgIn1cbiIp
OwotICB9Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpICBjb25zdCB7Ci0gIC8vIG5vb3AgZm9yIGVudW1zCi19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11
dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywg
IiRuYW1lJF8gPSBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7XG4iKTsKLX0KLQot
dm9pZCBSZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxk
ZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiJG5hbWUkXyA9IGphdmEudXRpbC5Db2xsZWN0aW9ucy5lbXB0
eUxpc3QoKTtcbiIKLSAgICAiJGNsZWFyX211dGFibGVfYml0X2J1aWxkZXIkO1xuIik7Ci19Ci0K
LXZvaWQgUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZXJn
aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBUaGUgY29kZSBiZWxv
dyBkb2VzIHR3byBvcHRpbWl6YXRpb25zOgotICAvLyAgIDEuIElmIHRoZSBvdGhlciBsaXN0IGlz
IGVtcHR5LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uIFRoaXMgZW5zdXJlcyB3ZQotICAvLyAgICAg
IGRvbid0IGFsbG9jYXRlIGEgbmV3IGFycmF5IGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbW11dGFi
bGUgb25lLgotICAvLyAgIDIuIElmIHRoZSBvdGhlciBsaXN0IGlzIG5vbi1lbXB0eSBhbmQgb3Vy
IGN1cnJlbnQgbGlzdCBpcyBlbXB0eSwgd2UgY2FuCi0gIC8vICAgICAgcmV1c2UgdGhlIG90aGVy
IGxpc3Qgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBpbW11dGFibGUuCi0gIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgImlmICghb3RoZXIuJG5hbWUkXy5pc0VtcHR5KCkpIHtcbiIK
LSAgICAiICBpZiAoJG5hbWUkXy5pc0VtcHR5KCkpIHtcbiIKLSAgICAiICAgICRuYW1lJF8gPSBv
dGhlci4kbmFtZSRfO1xuIgotICAgICIgICAgJGNsZWFyX211dGFibGVfYml0X2J1aWxkZXIkO1xu
IgotICAgICIgIH0gZWxzZSB7XG4iCi0gICAgIiAgICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJ
c011dGFibGUoKTtcbiIKLSAgICAiICAgICRuYW1lJF8uYWRkQWxsKG90aGVyLiRuYW1lJF8pO1xu
IgotICAgICIgIH1cbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAifVxuIik7Ci19Ci0K
LXZvaWQgUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWls
ZGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gVGhlIGNvZGUgYmVs
b3cgZW5zdXJlcyB0aGF0IHRoZSByZXN1bHQgaGFzIGFuIGltbXV0YWJsZSBsaXN0LiBJZiBvdXIK
LSAgLy8gbGlzdCBpcyBpbW11dGFibGUsIHdlIGNhbiBqdXN0IHJldXNlIGl0LiBJZiBub3QsIHdl
IG1ha2UgaXQgaW1tdXRhYmxlLgotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJp
ZiAoJGdldF9tdXRhYmxlX2JpdF9idWlsZGVyJCkge1xuIgotICAgICIgICRuYW1lJF8gPSBqYXZh
LnV0aWwuQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdCgkbmFtZSRfKTtcbiIKLSAgICAiICAk
Y2xlYXJfbXV0YWJsZV9iaXRfYnVpbGRlciQ7XG4iCi0gICAgIn1cbiIKLSAgICAicmVzdWx0LiRu
YW1lJF8gPSAkbmFtZSRfO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVFbnVtRmll
bGRHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICAvLyBSZWFkIGFuZCBzdG9yZSB0aGUgZW51bQotICBpZiAoU3VwcG9ydFVua25v
d25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgImludCByYXdWYWx1ZSA9IGlucHV0LnJlYWRFbnVtKCk7XG4iCi0g
ICAgICAiaWYgKCEkZ2V0X211dGFibGVfYml0X3BhcnNlciQpIHtcbiIKLSAgICAgICIgICRuYW1l
JF8gPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdDxqYXZhLmxhbmcuSW50ZWdlcj4oKTtcbiIKLSAg
ICAgICIgICRzZXRfbXV0YWJsZV9iaXRfcGFyc2VyJDtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAi
JG5hbWUkXy5hZGQocmF3VmFsdWUpO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICJpbnQgcmF3VmFsdWUgPSBpbnB1dC5yZWFkRW51bSgpO1xu
IgotICAgICAgIiR0eXBlJCB2YWx1ZSA9ICR0eXBlJC5mb3JOdW1iZXIocmF3VmFsdWUpO1xuIgot
ICAgICAgICAiaWYgKHZhbHVlID09IG51bGwpIHtcbiIpOwotICAgIGlmIChQcmVzZXJ2ZVVua25v
d25GaWVsZHMoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlwZSgpKSkgewotICAgICAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIiAgdW5rbm93bkZpZWxkcy5tZXJnZVZhcmlu
dEZpZWxkKCRudW1iZXIkLCByYXdWYWx1ZSk7XG4iKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICJ9IGVsc2Uge1xuIgotICAgICAgIiAgaWYgKCEkZ2V0X211
dGFibGVfYml0X3BhcnNlciQpIHtcbiIKLSAgICAgICIgICAgJG5hbWUkXyA9IG5ldyBqYXZhLnV0
aWwuQXJyYXlMaXN0PGphdmEubGFuZy5JbnRlZ2VyPigpO1xuIgotICAgICAgIiAgICAkc2V0X211
dGFibGVfYml0X3BhcnNlciQ7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICAkbmFtZSRfLmFk
ZChyYXdWYWx1ZSk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLX0KLQotdm9pZCBSZXBlYXRlZElt
bXV0YWJsZUVudW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdDb2RlRnJvbVBhY2tl
ZChpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBXcmFwIEdlbmVyYXRlUGFyc2lu
Z0NvZGUncyBjb250ZW50cyB3aXRoIGEgd2hpbGUgbG9vcC4KLQotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICJpbnQgbGVuZ3RoID0gaW5wdXQucmVhZFJhd1ZhcmludDMyKCk7XG4i
Ci0gICAgImludCBvbGRMaW1pdCA9IGlucHV0LnB1c2hMaW1pdChsZW5ndGgpO1xuIgotICAgICJ3
aGlsZShpbnB1dC5nZXRCeXRlc1VudGlsTGltaXQoKSA+IDApIHtcbiIpOwotICBwcmludGVyLT5J
bmRlbnQoKTsKLQotICBHZW5lcmF0ZVBhcnNpbmdDb2RlKHByaW50ZXIpOwotCi0gIHByaW50ZXIt
Pk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAifVxuIgotICAg
ICJpbnB1dC5wb3BMaW1pdChvbGRMaW1pdCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0
YWJsZUVudW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdEb25lQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICJpZiAoJGdldF9tdXRhYmxlX2JpdF9wYXJzZXIkKSB7XG4iCi0gICAgIiAgJG5hbWUkXyA9IGph
dmEudXRpbC5Db2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KCRuYW1lJF8pO1xuIgotICAgICJ9
XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZEdlbmVyYXRvcjo6Ci1H
ZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IGlmIChkZXNjcmlwdG9yXy0+aXNfcGFja2VkKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICAgImlmIChnZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkuc2l6ZSgpID4g
MCkge1xuIgotICAgICAgIiAgb3V0cHV0LndyaXRlUmF3VmFyaW50MzIoJHRhZyQpO1xuIgotICAg
ICAgIiAgb3V0cHV0LndyaXRlUmF3VmFyaW50MzIoJG5hbWUkTWVtb2l6ZWRTZXJpYWxpemVkU2l6
ZSk7XG4iCi0gICAgICAifVxuIgotICAgICAgImZvciAoaW50IGkgPSAwOyBpIDwgJG5hbWUkXy5z
aXplKCk7IGkrKykge1xuIgotICAgICAgIiAgb3V0cHV0LndyaXRlRW51bU5vVGFnKCRuYW1lJF8u
Z2V0KGkpKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICAgImZvciAoaW50IGkgPSAwOyBpIDwgJG5hbWUkXy5zaXplKCk7
IGkrKykge1xuIgotICAgICAgIiAgb3V0cHV0LndyaXRlRW51bSgkbnVtYmVyJCwgJG5hbWUkXy5n
ZXQoaSkpO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFi
bGVFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAie1xuIgotICAgICIgIGludCBkYXRhU2l6ZSA9IDA7XG4iKTsKLSAgcHJpbnRlci0+SW5kZW50
KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiZm9yIChpbnQgaSA9IDA7
IGkgPCAkbmFtZSRfLnNpemUoKTsgaSsrKSB7XG4iCi0gICAgIiAgZGF0YVNpemUgKz0gY29tLmdv
b2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAgICIgICAgLmNvbXB1dGVFbnVt
U2l6ZU5vVGFnKCRuYW1lJF8uZ2V0KGkpKTtcbiIKLSAgICAifVxuIik7Ci0gIHByaW50ZXItPlBy
aW50KAotICAgICJzaXplICs9IGRhdGFTaXplO1xuIik7Ci0gIGlmIChkZXNjcmlwdG9yXy0+aXNf
cGFja2VkKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImlmICgh
Z2V0JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpLmlzRW1wdHkoKSkgeyIKLSAgICAgICIgIHNpemUg
Kz0gJHRhZ19zaXplJDtcbiIKLSAgICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1Zi5D
b2RlZE91dHB1dFN0cmVhbVxuIgotICAgICAgIiAgICAuY29tcHV0ZVJhd1ZhcmludDMyU2l6ZShk
YXRhU2l6ZSk7XG4iCi0gICAgICAifSIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgICAic2l6ZSArPSAkdGFnX3NpemUkICogJG5hbWUkXy5zaXplKCk7
XG4iKTsKLSAgfQotCi0gIC8vIGNhY2hlIHRoZSBkYXRhIHNpemUgZm9yIHBhY2tlZCBmaWVsZHMu
Ci0gIGlmIChkZXNjcmlwdG9yXy0+aXNfcGFja2VkKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgIiRuYW1lJE1lbW9pemVkU2VyaWFsaXplZFNpemUgPSBkYXRhU2l6
ZTtcbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgi
fVxuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInJlc3VsdCA9IHJlc3VsdCAmJiAkbmFtZSRfLmVx
dWFscyhvdGhlci4kbmFtZSRfKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlRW51
bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKGdldCRjYXBp
dGFsaXplZF9uYW1lJENvdW50KCkgPiAwKSB7XG4iCi0gICAgIiAgaGFzaCA9ICgzNyAqIGhhc2gp
ICsgJGNvbnN0YW50X25hbWUkO1xuIgotICAgICIgIGhhc2ggPSAoNTMgKiBoYXNoKSArICRuYW1l
JF8uaGFzaENvZGUoKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXN0cmluZyBSZXBlYXRlZEltbXV0
YWJsZUVudW1GaWVsZEdlbmVyYXRvcjo6R2V0Qm94ZWRUeXBlKCkgY29uc3QgewotICByZXR1cm4g
bmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXy0+ZW51bV90
eXBlKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBp
bGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9maWVs
ZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2ZpZWxkLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZmY3MzQzNzNkMjIxMGJlYTIyOThiMzdi
MjZlODU2MzQzYTIwNmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2ZpZWxkLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkK
LS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNh
bmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9Q
Uk9UT0JVRl9DT01QSUxFUl9KQVZBX0VOVU1fRklFTERfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9U
T0JVRl9DT01QSUxFUl9KQVZBX0VOVU1fRklFTERfSF9fCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5j
bHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewot
ICBuYW1lc3BhY2UgY29tcGlsZXIgewotICAgIG5hbWVzcGFjZSBqYXZhIHsKLSAgICAgIGNsYXNz
IENvbnRleHQ7ICAgICAgICAgICAgLy8gY29udGV4dC5oCi0gICAgICBjbGFzcyBDbGFzc05hbWVS
ZXNvbHZlcjsgIC8vIG5hbWVfcmVzb2x2ZXIuaAotICAgIH0KLSAgfQotfQotCi1uYW1lc3BhY2Ug
cHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhIHsKLQotY2xh
c3MgSW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yIDogcHVibGljIEltbXV0YWJsZUZpZWxkR2Vu
ZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEltbXV0YWJsZUVudW1GaWVsZEdlbmVyYXRv
cigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50IG1lc3NhZ2VC
aXRJbmRleCwKLSAgICAgIGludCBidWlsZGVyQml0SW5kZXgsIENvbnRleHQqIGNvbnRleHQpOwot
ICB+SW1tdXRhYmxlRW51bUZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBJbW11
dGFibGVGaWVsZEdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgaW50IEdldE51bUJpdHNGb3JNZXNzYWdlKCkgY29uc3Q7Ci0gIGludCBHZXROdW1CaXRz
Rm9yQnVpbGRlcigpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSW50ZXJmYWNlTWVtYmVycyhpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUluaXRpYWxpemF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGVyQ2xl
YXJDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdp
bmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxk
aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJz
aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJz
aW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
U2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAg
dm9pZCBHZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdDsKLQotICBzdHJpbmcgR2V0Qm94ZWRUeXBlKCkgY29uc3Q7Ci0KLSBwcm90ZWN0
ZWQ6Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIG1hcDxzdHJpbmcs
IHN0cmluZz4gdmFyaWFibGVzXzsKLSAgY29uc3QgaW50IG1lc3NhZ2VCaXRJbmRleF87Ci0gIGNv
bnN0IGludCBidWlsZGVyQml0SW5kZXhfOwotICBDb250ZXh0KiBjb250ZXh0XzsKLSAgQ2xhc3NO
YW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXJfOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FM
TE9XX0VWSUxfQ09OU1RSVUNUT1JTKEltbXV0YWJsZUVudW1GaWVsZEdlbmVyYXRvcik7Ci19Owot
Ci1jbGFzcyBJbW11dGFibGVFbnVtT25lb2ZGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBJbW11dGFi
bGVFbnVtRmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgSW1tdXRhYmxlRW51bU9uZW9mRmll
bGRHZW5lcmF0b3IoCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGlu
dCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICBpbnQgYnVpbGRlckJpdEluZGV4LCBDb250ZXh0KiBj
b250ZXh0KTsKLSAgfkltbXV0YWJsZUVudW1PbmVvZkZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgdm9p
ZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlQnVpbGRpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsK
LSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhJbW11
dGFibGVFbnVtT25lb2ZGaWVsZEdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBSZXBlYXRlZEltbXV0
YWJsZUVudW1GaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBJbW11dGFibGVGaWVsZEdlbmVyYXRvciB7
Ci0gcHVibGljOgotICBleHBsaWNpdCBSZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZEdlbmVyYXRv
cigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50IG1lc3NhZ2VC
aXRJbmRleCwKLSAgICAgIGludCBidWlsZGVyQml0SW5kZXgsIENvbnRleHQqIGNvbnRleHQpOwot
ICB+UmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3IoKTsKLQotICAvLyBpbXBsZW1l
bnRzIEltbXV0YWJsZUZpZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICBpbnQgR2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25zdDsKLSAgaW50IEdl
dE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbnRlcmZhY2VNZW1i
ZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lbWJlcnMo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRlck1lbWJl
cnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSW5pdGlhbGl6
YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1
aWxkZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlQnVpbGRpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZVBhcnNpbmdDb2RlRnJvbVBhY2tlZChpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVQYXJzaW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9u
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVFcXVhbHND
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUhhc2hDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotICBzdHJpbmcgR2V0Qm94ZWRUeXBlKCkg
Y29uc3Q7Ci0KLSBwcml2YXRlOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3Jf
OwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0gIGNvbnN0IGludCBtZXNzYWdl
Qml0SW5kZXhfOwotICBjb25zdCBpbnQgYnVpbGRlckJpdEluZGV4XzsKLSAgQ29udGV4dCogY29u
dGV4dF87Ci0gIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLQotICBHT09HTEVf
RElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRHZW5l
cmF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21w
aWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUK
LSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfRU5VTV9GSUVMRF9IX18K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9m
aWVsZF9saXRlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVt
X2ZpZWxkX2xpdGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwOGQ2ZGI0MTMx
NDRhMjJlN2NkMDlhODMzYmNlNWEwN2ExNGVmMzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2
YV9lbnVtX2ZpZWxkX2xpdGUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw5NjAgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2ds
ZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZm
ZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJz
LgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfY29udGV4dC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfZG9jX2NvbW1lbnQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2
YS9qYXZhX2VudW1fZmllbGRfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5h
bWVzcGFjZSBqYXZhIHsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBTZXRFbnVtVmFyaWFibGVzKGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgIGludCBidWlsZGVyQml0
SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGRHZW5lcmF0b3JJbmZvKiBp
bmZvLAotICAgICAgICAgICAgICAgICAgICAgIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29s
dmVyLAotICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0cmluZz4qIHZhcmlhYmxl
cykgewotICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhkZXNjcmlwdG9yLCBpbmZvLCB2YXJpYWJs
ZXMpOwotCi0gICgqdmFyaWFibGVzKVsidHlwZSJdID0KLSAgICAgIG5hbWVfcmVzb2x2ZXItPkdl
dEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yLT5lbnVtX3R5cGUoKSk7Ci0gICgqdmFyaWFi
bGVzKVsibXV0YWJsZV90eXBlIl0gPQotICAgICAgbmFtZV9yZXNvbHZlci0+R2V0TXV0YWJsZUNs
YXNzTmFtZShkZXNjcmlwdG9yLT5lbnVtX3R5cGUoKSk7Ci0gICgqdmFyaWFibGVzKVsiZGVmYXVs
dCJdID0gSW1tdXRhYmxlRGVmYXVsdFZhbHVlKGRlc2NyaXB0b3IsIG5hbWVfcmVzb2x2ZXIpOwot
ICAoKnZhcmlhYmxlcylbImRlZmF1bHRfbnVtYmVyIl0gPSBTaW1wbGVJdG9hKAotICAgICAgZGVz
Y3JpcHRvci0+ZGVmYXVsdF92YWx1ZV9lbnVtKCktPm51bWJlcigpKTsKLSAgKCp2YXJpYWJsZXMp
WyJ0YWciXSA9IFNpbXBsZUl0b2EoaW50ZXJuYWw6OldpcmVGb3JtYXQ6Ok1ha2VUYWcoZGVzY3Jp
cHRvcikpOwotICAoKnZhcmlhYmxlcylbInRhZ19zaXplIl0gPSBTaW1wbGVJdG9hKAotICAgICAg
aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlRhZ1NpemUoZGVzY3JpcHRvci0+bnVtYmVyKCksIEdldFR5
cGUoZGVzY3JpcHRvcikpKTsKLSAgLy8gVE9ETyhiaXJkbyk6IEFkZCBAZGVwcmVjYXRlZCBqYXZh
ZG9jIHdoZW4gZ2VuZXJhdGluZyBqYXZhZG9jIGlzIHN1cHBvcnRlZAotICAvLyBieSB0aGUgcHJv
dG8gY29tcGlsZXIKLSAgKCp2YXJpYWJsZXMpWyJkZXByZWNhdGlvbiJdID0gZGVzY3JpcHRvci0+
b3B0aW9ucygpLmRlcHJlY2F0ZWQoKQotICAgICAgPyAiQGphdmEubGFuZy5EZXByZWNhdGVkICIg
OiAiIjsKLQotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvci0+ZmlsZSgpKSkg
ewotICAgIC8vIEZvciBzaW5ndWxhciBtZXNzYWdlcyBhbmQgYnVpbGRlcnMsIG9uZSBiaXQgaXMg
dXNlZCBmb3IgdGhlIGhhc0ZpZWxkIGJpdC4KLSAgICAoKnZhcmlhYmxlcylbImdldF9oYXNfZmll
bGRfYml0X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0Qml0KG1lc3NhZ2VCaXRJbmRleCk7Ci0KLSAg
ICAvLyBOb3RlIHRoYXQgdGhlc2UgaGF2ZSBhIHRyYWlsaW5nICI7Ii4KLSAgICAoKnZhcmlhYmxl
cylbInNldF9oYXNfZmllbGRfYml0X21lc3NhZ2UiXSA9Ci0gICAgICAgIEdlbmVyYXRlU2V0Qml0
KG1lc3NhZ2VCaXRJbmRleCkgKyAiOyI7Ci0gICAgKCp2YXJpYWJsZXMpWyJjbGVhcl9oYXNfZmll
bGRfYml0X21lc3NhZ2UiXSA9Ci0gICAgICAgIEdlbmVyYXRlQ2xlYXJCaXQobWVzc2FnZUJpdElu
ZGV4KSArICI7IjsKLQotICAgICgqdmFyaWFibGVzKVsiaXNfZmllbGRfcHJlc2VudF9tZXNzYWdl
Il0gPSBHZW5lcmF0ZUdldEJpdChtZXNzYWdlQml0SW5kZXgpOwotICB9IGVsc2UgewotICAgICgq
dmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSJdID0gIiI7Ci0gICAgKCp2YXJp
YWJsZXMpWyJjbGVhcl9oYXNfZmllbGRfYml0X21lc3NhZ2UiXSA9ICIiOwotCi0gICAgKCp2YXJp
YWJsZXMpWyJpc19maWVsZF9wcmVzZW50X21lc3NhZ2UiXSA9Ci0gICAgICAgICgqdmFyaWFibGVz
KVsibmFtZSJdICsgIl8gIT0gIiArCi0gICAgICAgICgqdmFyaWFibGVzKVsiZGVmYXVsdCJdICsg
Ii5nZXROdW1iZXIoKSI7Ci0gIH0KLQotICAvLyBGb3IgcmVwZWF0ZWQgYnVpbGRlcnMsIHRoZSB1
bmRlcmx5aW5nIGxpc3QgdHJhY2tzIG11dGFiaWxpdHkgc3RhdGUuCi0gICgqdmFyaWFibGVzKVsi
aXNfbXV0YWJsZSJdID0gKCp2YXJpYWJsZXMpWyJuYW1lIl0gKyAiXy5pc01vZGlmaWFibGUoKSI7
Ci0KLSAgKCp2YXJpYWJsZXMpWyJnZXRfaGFzX2ZpZWxkX2JpdF9mcm9tX2xvY2FsIl0gPQotICAg
ICAgR2VuZXJhdGVHZXRCaXRGcm9tTG9jYWwoYnVpbGRlckJpdEluZGV4KTsKLSAgKCp2YXJpYWJs
ZXMpWyJzZXRfaGFzX2ZpZWxkX2JpdF90b19sb2NhbCJdID0KLSAgICAgIEdlbmVyYXRlU2V0Qml0
VG9Mb2NhbChtZXNzYWdlQml0SW5kZXgpOwotCi0gIGlmIChTdXBwb3J0VW5rbm93bkVudW1WYWx1
ZShkZXNjcmlwdG9yLT5maWxlKCkpKSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJ1bmtub3duIl0gPSAo
KnZhcmlhYmxlcylbInR5cGUiXSArICIuVU5SRUNPR05JWkVEIjsKLSAgfSBlbHNlIHsKLSAgICAo
KnZhcmlhYmxlcylbInVua25vd24iXSA9ICgqdmFyaWFibGVzKVsiZGVmYXVsdCJdOwotICB9Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUltbXV0YWJsZUVudW1GaWVs
ZExpdGVHZW5lcmF0b3I6OgotSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcihjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVp
bGRlckJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRl
eHQpCi0gIDogZGVzY3JpcHRvcl8oZGVzY3JpcHRvciksIG1lc3NhZ2VCaXRJbmRleF8obWVzc2Fn
ZUJpdEluZGV4KSwKLSAgICBidWlsZGVyQml0SW5kZXhfKGJ1aWxkZXJCaXRJbmRleCksCi0gICAg
bmFtZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpIHsKLSAgU2V0RW51bVZh
cmlhYmxlcyhkZXNjcmlwdG9yLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwKLSAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5HZXRGaWVsZEdlbmVyYXRvckluZm8oZGVzY3JpcHRv
ciksCi0gICAgICAgICAgICAgICAgICAgbmFtZV9yZXNvbHZlcl8sICZ2YXJpYWJsZXNfKTsKLX0K
LQotSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6fkltbXV0YWJsZUVudW1GaWVsZExp
dGVHZW5lcmF0b3IoKSB7fQotCi1pbnQgSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6
R2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25zdCB7Ci0gIHJldHVybiAxOwotfQotCi1pbnQgSW1t
dXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6R2V0TnVtQml0c0ZvckJ1aWxkZXIoKSBjb25z
dCB7Ci0gIHJldHVybiAwOwotfQotCi12b2lkIEltbXV0YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0
b3I6OgotR2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCB7Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewot
ICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRib29sZWFuIGhhcyRj
YXBpdGFsaXplZF9uYW1lJCgpO1xuIik7Ci0gIH0KLSAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZh
bHVlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJp
bnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAiJGRlcHJlY2F0aW9uJGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZSgpO1xuIik7Ci0g
IH0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kJHR5cGUkIGdldCRjYXBp
dGFsaXplZF9uYW1lJCgpO1xuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSBpbnQgJG5hbWUkXztc
biIpOwotICBQcmludEV4dHJhRmllbGRJbmZvKHZhcmlhYmxlc18sIHByaW50ZXIpOwotICBpZiAo
U3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0
YWxpemVkX25hbWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRnZXRfaGFzX2ZpZWxkX2JpdF9t
ZXNzYWdlJDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotICBpZiAoU3VwcG9ydFVua25vd25FbnVt
VmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChw
cmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAgICIkZGVwcmVjYXRpb24kcHVibGljIGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZSgp
IHtcbiIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQgZ2V0JGNh
cGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgICR0eXBlJCByZXN1bHQgPSAkdHlwZSQuZm9y
TnVtYmVyKCRuYW1lJF8pO1xuIgotICAgICIgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/ICR1bmtu
b3duJCA6IHJlc3VsdDtcbiIKLSAgICAifVxuIik7Ci0KLSAgLy8gR2VuZXJhdGUgcHJpdmF0ZSBz
ZXR0ZXJzIGZvciB0aGUgYnVpbGRlciB0byBwcm94eSBpbnRvLgotICBpZiAoU3VwcG9ydFVua25v
d25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICJwcml2YXRlIHZvaWQgc2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUoaW50IHZh
bHVlKSB7XG4iCi0gICAgICAiICAkc2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSQiCi0gICAgICAi
ICAkbmFtZSRfID0gdmFsdWU7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLSAgV3JpdGVGaWVsZERv
Y0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICJwcml2YXRlIHZvaWQgc2V0JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1
ZSkge1xuIgotICAgICIgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4iCi0gICAgIiAgICB0aHJvdyBu
ZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgJHNldF9o
YXNfZmllbGRfYml0X21lc3NhZ2UkXG4iCi0gICAgIiAgJG5hbWUkXyA9IHZhbHVlLmdldE51bWJl
cigpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZv
aWQgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgJGNsZWFyX2hhc19maWVs
ZF9iaXRfbWVzc2FnZSRcbiIKLSAgICAiICAkbmFtZSRfID0gJGRlZmF1bHRfbnVtYmVyJDtcbiIK
LSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdy
aXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgYm9vbGVhbiBoYXMk
Y2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAiICByZXR1cm4gaW5zdGFuY2UuaGFzJGNh
cGl0YWxpemVkX25hbWUkKCk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLSAgaWYgKFN1cHBvcnRV
bmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERv
Y0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVkX25h
bWUkVmFsdWUoKSB7XG4iCi0gICAgICAiICByZXR1cm4gaW5zdGFuY2UuZ2V0JGNhcGl0YWxpemVk
X25hbWUkVmFsdWUoKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVu
dChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxpemVkX25hbWUk
VmFsdWUoaW50IHZhbHVlKSB7XG4iCi0gICAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICAg
IiAgaW5zdGFuY2Uuc2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUodmFsdWUpO1xuIgotICAgICAg
IiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLSAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQo
KSB7XG4iCi0gICAgIiAgcmV0dXJuIGluc3RhbmNlLmdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xu
IgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVi
bGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAg
ICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2Uuc2V0JGNhcGl0YWxpemVkX25h
bWUkKHZhbHVlKTtcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0gIFdy
aXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGNsZWFyJGNh
cGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAg
aW5zdGFuY2UuY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIKLSAgICAiICByZXR1cm4gdGhp
cztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgIGNvbnN0IHsKLSAgLy8gbm9vcCBmb3IgZW51bXMKLX0KLQotdm9pZCBJbW11
dGFibGVFbnVtRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW5pdGlhbGl6YXRpb25Db2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sICIkbmFtZSRfID0gJGRlZmF1bHRfbnVtYmVyJDtcbiIpOwotfQotCi12b2lkIEltbXV0YWJs
ZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVWaXNpdENvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3Jf
LT5maWxlKCkpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkbmFt
ZSRfID0gdmlzaXRvci52aXNpdEludChoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSwgJG5hbWUkXyxc
biIKLSAgICAgICIgICAgb3RoZXIuaGFzJGNhcGl0YWxpemVkX25hbWUkKCksIG90aGVyLiRuYW1l
JF8pO1xuIik7Ci0gIH0gZWxzZSBpZiAoU3VwcG9ydFVua25vd25FbnVtVmFsdWUoZGVzY3JpcHRv
cl8tPmZpbGUoKSkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRu
YW1lJF8gPSB2aXNpdG9yLnZpc2l0SW50KCRuYW1lJF8gIT0gJGRlZmF1bHRfbnVtYmVyJCwgJG5h
bWUkXywiCi0gICAgICAiICAgIG90aGVyLiRuYW1lJF8gIT0gJGRlZmF1bHRfbnVtYmVyJCwgb3Ro
ZXIuJG5hbWUkXyk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAi
Q2FuJ3QgcmVhY2ggaGVyZS4iOwotICB9Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZpZWxkTGl0
ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUR5bmFtaWNNZXRob2RNYWtlSW1tdXRhYmxlQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBub29wIGZvciBzY2FsYXJzCi19Ci0KLXZv
aWQgSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChTdXBwb3J0VW5rbm93bkVudW1W
YWx1ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgICAiaW50IHJhd1ZhbHVlID0gaW5wdXQucmVhZEVudW0oKTtcbiIKLSAgICAgICIk
c2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSRcbiIKLSAgICAgICIkbmFtZSRfID0gcmF3VmFsdWU7
XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
ImludCByYXdWYWx1ZSA9IGlucHV0LnJlYWRFbnVtKCk7XG4iCi0gICAgICAiJHR5cGUkIHZhbHVl
ID0gJHR5cGUkLmZvck51bWJlcihyYXdWYWx1ZSk7XG4iCi0gICAgICAiaWYgKHZhbHVlID09IG51
bGwpIHtcbiIpOwotICAgIGlmIChQcmVzZXJ2ZVVua25vd25GaWVsZHMoZGVzY3JpcHRvcl8tPmNv
bnRhaW5pbmdfdHlwZSgpKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAgICAgIiAgc3VwZXIubWVyZ2VWYXJpbnRGaWVsZCgkbnVtYmVyJCwgcmF3VmFsdWUpO1xuIik7
Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAifSBlbHNlIHtc
biIKLSAgICAgICIgICRzZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlJFxuIgotICAgICAgIiAgJG5h
bWUkXyA9IHJhd1ZhbHVlO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgSW1tdXRh
YmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdEb25lQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBub29wIGZvciBlbnVtcwotfQotCi12b2lk
IEltbXV0YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemF0aW9u
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICJpZiAoJGlzX2ZpZWxkX3ByZXNlbnRfbWVzc2FnZSQpIHtcbiIKLSAgICAi
ICBvdXRwdXQud3JpdGVFbnVtKCRudW1iZXIkLCAkbmFtZSRfKTtcbiIKLSAgICAifVxuIik7Ci19
Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlh
bGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoJGlzX2ZpZWxkX3ByZXNlbnRfbWVzc2FnZSQpIHtc
biIKLSAgICAiICBzaXplICs9IGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRPdXRwdXRTdHJlYW1c
biIKLSAgICAiICAgIC5jb21wdXRlRW51bVNpemUoJG51bWJlciQsICRuYW1lJF8pO1xuIgotICAg
ICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVFbnVtRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdl
bmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICJyZXN1bHQgPSByZXN1bHQgJiYgJG5hbWUkXyA9PSBv
dGhlci4kbmFtZSRfO1xuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImhhc2ggPSAoMzcgKiBoYXNoKSArICRj
b25zdGFudF9uYW1lJDtcbiIKLSAgICAiaGFzaCA9ICg1MyAqIGhhc2gpICsgJG5hbWUkXztcbiIp
OwotfQotCi1zdHJpbmcgSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6R2V0Qm94ZWRU
eXBlKCkgY29uc3QgewotICByZXR1cm4gbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNz
TmFtZShkZXNjcmlwdG9yXy0+ZW51bV90eXBlKCkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlt
bXV0YWJsZUVudW1PbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1JbW11dGFibGVFbnVtT25lb2ZG
aWVsZExpdGVHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0KiBjb250ZXh0KQotICAgIDogSW1tdXRh
YmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcigKLSAgICAgICAgICBkZXNjcmlwdG9yLCBtZXNzYWdl
Qml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCkgewotICBjb25zdCBPbmVvZkdlbmVy
YXRvckluZm8qIGluZm8gPQotICAgICAgY29udGV4dC0+R2V0T25lb2ZHZW5lcmF0b3JJbmZvKGRl
c2NyaXB0b3ItPmNvbnRhaW5pbmdfb25lb2YoKSk7Ci0gIFNldENvbW1vbk9uZW9mVmFyaWFibGVz
KGRlc2NyaXB0b3IsIGluZm8sICZ2YXJpYWJsZXNfKTsKLX0KLQotSW1tdXRhYmxlRW51bU9uZW9m
RmllbGRMaXRlR2VuZXJhdG9yOjoKLX5JbW11dGFibGVFbnVtT25lb2ZGaWVsZExpdGVHZW5lcmF0
b3IoKSB7fQotCi12b2lkIEltbXV0YWJsZUVudW1PbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1H
ZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgUHJpbnRFeHRy
YUZpZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmludGVyKTsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNl
bmNlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJp
bnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpIHtc
biIKLSAgICAgICIgIHJldHVybiAkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgICAi
fVxuIik7Ci0gIH0KLSAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3JfLT5m
aWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1
YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUoKSB7XG4iCi0gICAgICAiICBpZiAo
JGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgICAiICAgIHJldHVybiAoamF2YS5s
YW5nLkludGVnZXIpICRvbmVvZl9uYW1lJF87XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICBy
ZXR1cm4gJGRlZmF1bHRfbnVtYmVyJDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXpl
ZF9uYW1lJCgpIHtcbiIKLSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4i
Ci0gICAgIiAgICAkdHlwZSQgcmVzdWx0ID0gJHR5cGUkLmZvck51bWJlcigoamF2YS5sYW5nLklu
dGVnZXIpICRvbmVvZl9uYW1lJF8pO1xuIgotICAgICIgICAgcmV0dXJuIHJlc3VsdCA9PSBudWxs
ID8gJHVua25vd24kIDogcmVzdWx0O1xuIgotICAgICIgIH1cbiIKLSAgICAiICByZXR1cm4gJGRl
ZmF1bHQkO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBHZW5lcmF0ZSBwcml2YXRlIHNldHRlcnMg
Zm9yIHRoZSBidWlsZGVyIHRvIHByb3h5IGludG8uCi0gIGlmIChTdXBwb3J0VW5rbm93bkVudW1W
YWx1ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICAgInByaXZhdGUgdm9pZCBzZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZShpbnQgdmFsdWUpIHtc
biIKLSAgICAgICIgICRzZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAgICIgICRvbmVv
Zl9uYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgInByaXZhdGUgdm9pZCBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVl
KSB7XG4iCi0gICAgIiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiIKLSAgICAiICAgIHRocm93IG5l
dyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpO1xuIgotICAgICIgIH1cbiIKLSAgICAiICAkc2V0X29u
ZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgIiAgJG9uZW9mX25hbWUkXyA9IHZhbHVlLmdldE51
bWJlcigpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRl
IHZvaWQgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgaWYgKCRoYXNfb25l
b2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgICAgJGNsZWFyX29uZW9mX2Nhc2VfbWVzc2Fn
ZSQ7XG4iCi0gICAgIiAgICAkb25lb2ZfbmFtZSRfID0gbnVsbDtcbiIKLSAgICAiICB9XG4iCi0g
ICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZUVudW1PbmVvZkZpZWxkTGl0ZUdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7
Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAg
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgYm9vbGVhbiBo
YXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAiICByZXR1cm4gaW5zdGFuY2UuaGFz
JGNhcGl0YWxpemVkX25hbWUkKCk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLSAgaWYgKFN1cHBv
cnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVs
ZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVk
X25hbWUkVmFsdWUoKSB7XG4iCi0gICAgICAiICByZXR1cm4gaW5zdGFuY2UuZ2V0JGNhcGl0YWxp
emVkX25hbWUkVmFsdWUoKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxpemVkX25h
bWUkVmFsdWUoaW50IHZhbHVlKSB7XG4iCi0gICAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAg
ICAgIiAgaW5zdGFuY2Uuc2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUodmFsdWUpO1xuIgotICAg
ICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLSAgV3JpdGVGaWVsZERv
Y0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFt
ZSQoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGluc3RhbmNlLmdldCRjYXBpdGFsaXplZF9uYW1lJCgp
O1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3Jp
cHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24k
cHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgot
ICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2Uuc2V0JGNhcGl0YWxpemVk
X25hbWUkKHZhbHVlKTtcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGNsZWFy
JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAg
IiAgaW5zdGFuY2UuY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIKLSAgICAiICByZXR1cm4g
dGhpcztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bU9uZW9mRmllbGRM
aXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlVmlzaXRDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRvbmVvZl9uYW1lJF8g
PSB2aXNpdG9yLnZpc2l0T25lb2ZJbnQoXG4iCi0gICAgIiAgICRoYXNfb25lb2ZfY2FzZV9tZXNz
YWdlJCwgJG9uZW9mX25hbWUkXywgb3RoZXIuJG9uZW9mX25hbWUkXyk7XG4iKTsKLX0KLQotdm9p
ZCBJbW11dGFibGVFbnVtT25lb2ZGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5n
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoU3VwcG9ydFVua25vd25F
bnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICAgImludCByYXdWYWx1ZSA9IGlucHV0LnJlYWRFbnVtKCk7XG4iCi0gICAg
ICAiJHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICAgIiRvbmVvZl9uYW1lJF8gPSBy
YXdWYWx1ZTtcbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgICAiaW50IHJhd1ZhbHVlID0gaW5wdXQucmVhZEVudW0oKTtcbiIKLSAgICAgICIkdHlw
ZSQgdmFsdWUgPSAkdHlwZSQuZm9yTnVtYmVyKHJhd1ZhbHVlKTtcbiIKLSAgICAgICJpZiAodmFs
dWUgPT0gbnVsbCkge1xuIik7Ci0gICAgaWYgKFByZXNlcnZlVW5rbm93bkZpZWxkcyhkZXNjcmlw
dG9yXy0+Y29udGFpbmluZ190eXBlKCkpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICAgICAiICBzdXBlci5tZXJnZVZhcmludEZpZWxkKCRudW1iZXIkLCByYXdWYWx1
ZSk7XG4iKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJ9
IGVsc2Uge1xuIgotICAgICAgIiAgJHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICAg
IiAgJG9uZW9mX25hbWUkXyA9IHJhd1ZhbHVlO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0K
LXZvaWQgSW1tdXRhYmxlRW51bU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2Vy
aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xu
IgotICAgICIgIG91dHB1dC53cml0ZUVudW0oJG51bWJlciQsICgoamF2YS5sYW5nLkludGVnZXIp
ICRvbmVvZl9uYW1lJF8pKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51
bU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgImlmICgkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIKLSAgICAiICBzaXplICs9
IGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRPdXRwdXRTdHJlYW1cbiIKLSAgICAiICAgIC5jb21w
dXRlRW51bVNpemUoJG51bWJlciQsICgoamF2YS5sYW5nLkludGVnZXIpICRvbmVvZl9uYW1lJF8p
KTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bU9uZW9mRmllbGRMaXRl
R2VuZXJhdG9yOjoKLUdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBpZiAoU3VwcG9ydFVua25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkp
IHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgInJlc3VsdCA9IHJlc3Vs
dCAmJiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZSgpXG4iCi0gICAgICAiICAgID09IG90aGVy
LmdldCRjYXBpdGFsaXplZF9uYW1lJFZhbHVlKCk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgInJlc3VsdCA9IHJlc3VsdCAmJiBnZXQkY2Fw
aXRhbGl6ZWRfbmFtZSQoKVxuIgotICAgICAgIiAgICAuZXF1YWxzKG90aGVyLmdldCRjYXBpdGFs
aXplZF9uYW1lJCgpKTtcbiIpOwotICB9Ci19Ci0KLXZvaWQgSW1tdXRhYmxlRW51bU9uZW9mRmll
bGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3JfLT5maWxl
KCkpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJoYXNoID0gKDM3
ICogaGFzaCkgKyAkY29uc3RhbnRfbmFtZSQ7XG4iCi0gICAgICAiaGFzaCA9ICg1MyAqIGhhc2gp
ICsgZ2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUoKTtcbiIpOwotICB9IGVsc2UgewotICAgIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaGFzaCA9ICgzNyAqIGhhc2gpICsgJGNv
bnN0YW50X25hbWUkO1xuIgotICAgICAgImhhc2ggPSAoNTMgKiBoYXNoKSArIGdldCRjYXBpdGFs
aXplZF9uYW1lJCgpLmdldE51bWJlcigpO1xuIik7Ci0gIH0KLX0KLQotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ci1SZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OgotUmVwZWF0ZWRJbW11
dGFibGVFbnVtRmllbGRMaXRlR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3Jp
cHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlQml0
SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVpbGRlckJp
dEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29u
dGV4dCkKLSAgOiBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSwgbWVzc2FnZUJpdEluZGV4XyhtZXNz
YWdlQml0SW5kZXgpLAotICAgIGJ1aWxkZXJCaXRJbmRleF8oYnVpbGRlckJpdEluZGV4KSwgY29u
dGV4dF8oY29udGV4dCksCi0gICAgbmFtZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJlc29s
dmVyKCkpIHsKLSAgU2V0RW51bVZhcmlhYmxlcyhkZXNjcmlwdG9yLCBtZXNzYWdlQml0SW5kZXgs
IGJ1aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5HZXRGaWVsZEdl
bmVyYXRvckluZm8oZGVzY3JpcHRvciksCi0gICAgICAgICAgICAgICAgICAgbmFtZV9yZXNvbHZl
cl8sICZ2YXJpYWJsZXNfKTsKLX0KLQotUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRMaXRlR2Vu
ZXJhdG9yOjoKLX5SZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0b3IoKSB7fQot
Ci1pbnQgUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRMaXRlR2VuZXJhdG9yOjpHZXROdW1CaXRz
Rm9yTWVzc2FnZSgpIGNvbnN0IHsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBSZXBlYXRlZEltbXV0
YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OkdldE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3Qg
ewotICByZXR1cm4gMDsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZExpdGVH
ZW5lcmF0b3I6OgotR2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJGphdmEudXRp
bC5MaXN0PCR0eXBlJD4gZ2V0JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpO1xuIik7Ci0gIFdyaXRl
RmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRD
b3VudCgpO1xuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJCR0eXBl
JCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoaW50IGluZGV4KTtcbiIpOwotICBpZiAoU3VwcG9ydFVu
a25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kamF2YS51dGlsLkxpc3Q8amF2YS5sYW5nLkludGVn
ZXI+XG4iCi0gICAgICAiZ2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWVMaXN0KCk7XG4iKTsKLSAg
ICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kaW50IGdldCRjYXBpdGFs
aXplZF9uYW1lJFZhbHVlKGludCBpbmRleCk7XG4iKTsKLSAgfQotfQotCi12b2lkIFJlcGVhdGVk
SW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAicHJpdmF0ZSBjb20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLkludExpc3QgJG5hbWUkXztc
biIKLSAgICAicHJpdmF0ZSBzdGF0aWMgZmluYWwgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5h
bC5MaXN0QWRhcHRlci5Db252ZXJ0ZXI8XG4iCi0gICAgIiAgICBqYXZhLmxhbmcuSW50ZWdlciwg
JHR5cGUkPiAkbmFtZSRfY29udmVydGVyXyA9XG4iCi0gICAgIiAgICAgICAgbmV3IGNvbS5nb29n
bGUucHJvdG9idWYuSW50ZXJuYWwuTGlzdEFkYXB0ZXIuQ29udmVydGVyPFxuIgotICAgICIgICAg
ICAgICAgICBqYXZhLmxhbmcuSW50ZWdlciwgJHR5cGUkPigpIHtcbiIKLSAgICAiICAgICAgICAg
IHB1YmxpYyAkdHlwZSQgY29udmVydChqYXZhLmxhbmcuSW50ZWdlciBmcm9tKSB7XG4iCi0gICAg
IiAgICAgICAgICAgICR0eXBlJCByZXN1bHQgPSAkdHlwZSQuZm9yTnVtYmVyKGZyb20pO1xuIgot
ICAgICIgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyAkdW5rbm93biQgOiByZXN1
bHQ7XG4iCi0gICAgIiAgICAgICAgICB9XG4iCi0gICAgIiAgICAgICAgfTtcbiIpOwotICBQcmlu
dEV4dHJhRmllbGRJbmZvKHZhcmlhYmxlc18sIHByaW50ZXIpOwotICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgamF2YS51dGlsLkxpc3Q8JHR5cGUkPiBnZXQkY2Fw
aXRhbGl6ZWRfbmFtZSRMaXN0KCkge1xuIgotICAgICIgIHJldHVybiBuZXcgY29tLmdvb2dsZS5w
cm90b2J1Zi5JbnRlcm5hbC5MaXN0QWRhcHRlcjxcbiIKLSAgICAiICAgICAgamF2YS5sYW5nLklu
dGVnZXIsICR0eXBlJD4oJG5hbWUkXywgJG5hbWUkX2NvbnZlcnRlcl8pO1xuIgotICAgICJ9XG4i
KTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGludCBnZXQk
Y2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpIHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXy5zaXpl
KCk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlv
biRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJChpbnQgaW5kZXgpIHtcbiIKLSAg
ICAiICByZXR1cm4gJG5hbWUkX2NvbnZlcnRlcl8uY29udmVydCgkbmFtZSRfLmdldEludChpbmRl
eCkpO1xuIgotICAgICJ9XG4iKTsKLSAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2Ny
aXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJl
Y2F0aW9uJHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuSW50ZWdlcj5cbiIKLSAgICAg
ICJnZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZUxpc3QoKSB7XG4iCi0gICAgICAiICByZXR1cm4g
JG5hbWUkXztcbiIKLSAgICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAg
ICIkZGVwcmVjYXRpb24kcHVibGljIGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRWYWx1ZShpbnQg
aW5kZXgpIHtcbiIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfLmdldEludChpbmRleCk7XG4iCi0g
ICAgICAifVxuIik7Ci0gIH0KLQotICBpZiAoZGVzY3JpcHRvcl8tPm9wdGlvbnMoKS5wYWNrZWQo
KSAmJgotICAgICAgY29udGV4dF8tPkhhc0dlbmVyYXRlZE1ldGhvZHMoZGVzY3JpcHRvcl8tPmNv
bnRhaW5pbmdfdHlwZSgpKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAicHJpdmF0ZSBpbnQgJG5hbWUkTWVtb2l6ZWRTZXJpYWxpemVkU2l6ZTtcbiIpOwotICB9Ci0K
LSAgLy8gR2VuZXJhdGUgcHJpdmF0ZSBzZXR0ZXJzIGZvciB0aGUgYnVpbGRlciB0byBwcm94eSBp
bnRvLgotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgZW5z
dXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCkge1xuIgotICAgICIgIGlmICghJGlzX211
dGFibGUkKSB7XG4iCi0gICAgIiAgICAkbmFtZSRfID1cbiIKLSAgICAiICAgICAgICBjb20uZ29v
Z2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VMaXRlLm11dGFibGVDb3B5KCRuYW1lJF8pO1xu
IgotICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50
ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJp
dmF0ZSB2b2lkIHNldCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgIGludCBpbmRleCwg
JHR5cGUkIHZhbHVlKSB7XG4iCi0gICAgIiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiIKLSAgICAi
ICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpO1xuIgotICAgICIgIH1cbiIKLSAg
ICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAiICAkbmFt
ZSRfLnNldEludChpbmRleCwgdmFsdWUuZ2V0TnVtYmVyKCkpO1xuIgotICAgICJ9XG4iKTsKLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgYWRkJGNhcGl0YWxpemVkX25hbWUk
KCR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4iCi0gICAg
IiAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTtcbiIKLSAgICAiICB9XG4iCi0g
ICAgIiAgZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5h
bWUkXy5hZGRJbnQodmFsdWUuZ2V0TnVtYmVyKCkpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgYWRkQWxsJGNhcGl0YWxpemVkX25hbWUkKFxu
IgotICAgICIgICAgamF2YS5sYW5nLkl0ZXJhYmxlPD8gZXh0ZW5kcyAkdHlwZSQ+IHZhbHVlcykg
e1xuIgotICAgICIgIGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAg
ICIgIGZvciAoJHR5cGUkIHZhbHVlIDogdmFsdWVzKSB7XG4iCi0gICAgIiAgICAkbmFtZSRfLmFk
ZEludCh2YWx1ZS5nZXROdW1iZXIoKSk7XG4iCi0gICAgIiAgfVxuIgotICAgICJ9XG4iKTsKLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgY2xlYXIkY2FwaXRhbGl6ZWRfbmFt
ZSQoKSB7XG4iCi0gICAgIiAgJG5hbWUkXyA9IGVtcHR5SW50TGlzdCgpO1xuIgotICAgICJ9XG4i
KTsKLQotICBpZiAoU3VwcG9ydFVua25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkp
IHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJwcml2YXRlIHZvaWQgc2V0JGNhcGl0
YWxpemVkX25hbWUkVmFsdWUoXG4iCi0gICAgICAiICAgIGludCBpbmRleCwgaW50IHZhbHVlKSB7
XG4iCi0gICAgICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAg
ICAgICIgICRuYW1lJF8uc2V0SW50KGluZGV4LCB2YWx1ZSk7XG4iCi0gICAgICAifVxuIik7Ci0g
ICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAicHJpdmF0ZSB2b2lkIGFkZCRjYXBpdGFsaXpl
ZF9uYW1lJFZhbHVlKGludCB2YWx1ZSkge1xuIgotICAgICAgIiAgZW5zdXJlJGNhcGl0YWxpemVk
X25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgICAiICAkbmFtZSRfLmFkZEludCh2YWx1ZSk7XG4i
Ci0gICAgICAifVxuIik7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3Jp
cHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAicHJpdmF0ZSB2
b2lkIGFkZEFsbCRjYXBpdGFsaXplZF9uYW1lJFZhbHVlKFxuIgotICAgICAgIiAgICBqYXZhLmxh
bmcuSXRlcmFibGU8amF2YS5sYW5nLkludGVnZXI+IHZhbHVlcykge1xuIgotICAgICAgIiAgZW5z
dXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgICAiICBmb3IgKGludCB2
YWx1ZSA6IHZhbHVlcykge1xuIgotICAgICAgIiAgICAkbmFtZSRfLmFkZEludCh2YWx1ZSk7XG4i
Ci0gICAgICAiICB9XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLX0KLQotdm9pZCBSZXBlYXRlZElt
bXV0YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgamF2YS51dGlsLkxpc3Q8JHR5cGUkPiBnZXQkY2FwaXRhbGl6ZWRf
bmFtZSRMaXN0KCkge1xuIgotICAgICIgIHJldHVybiBpbnN0YW5jZS5nZXQkY2FwaXRhbGl6ZWRf
bmFtZSRMaXN0KCk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgaW50IGdldCRjYXBpdGFsaXplZF9uYW1lJENvdW50KCkge1xuIgot
ICAgICIgIHJldHVybiBpbnN0YW5jZS5nZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpO1xuIgot
ICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGlj
ICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoaW50IGluZGV4KSB7XG4iCi0gICAgIiAgcmV0
dXJuIGluc3RhbmNlLmdldCRjYXBpdGFsaXplZF9uYW1lJChpbmRleCk7XG4iCi0gICAgIn1cbiIp
OwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBz
ZXQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICBpbnQgaW5kZXgsICR0eXBlJCB2YWx1
ZSkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2Uuc2V0JGNh
cGl0YWxpemVkX25hbWUkKGluZGV4LCB2YWx1ZSk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4i
Ci0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9y
Xyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJs
aWMgQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4iCi0gICAg
IiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5hZGQkY2FwaXRhbGl6ZWRfbmFt
ZSQodmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgYWRkQWxsJGNh
cGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgamF2YS5sYW5nLkl0ZXJhYmxlPD8gZXh0ZW5k
cyAkdHlwZSQ+IHZhbHVlcykge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAg
aW5zdGFuY2UuYWRkQWxsJGNhcGl0YWxpemVkX25hbWUkKHZhbHVlcyk7IgotICAgICIgIHJldHVy
biB0aGlzO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVj
YXRpb24kcHVibGljIEJ1aWxkZXIgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAg
IiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5jbGVhciRjYXBpdGFsaXplZF9u
YW1lJCgpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICBpZiAo
U3VwcG9ydFVua25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0
ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRpbC5MaXN0
PGphdmEubGFuZy5JbnRlZ2VyPlxuIgotICAgICAgImdldCRjYXBpdGFsaXplZF9uYW1lJFZhbHVl
TGlzdCgpIHtcbiIKLSAgICAgICIgIHJldHVybiBqYXZhLnV0aWwuQ29sbGVjdGlvbnMudW5tb2Rp
ZmlhYmxlTGlzdChcbiIKLSAgICAgICIgICAgICBpbnN0YW5jZS5nZXQkY2FwaXRhbGl6ZWRfbmFt
ZSRWYWx1ZUxpc3QoKSk7XG4iCi0gICAgICAifVxuIik7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1l
bnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVkX25hbWUkVmFs
dWUoaW50IGluZGV4KSB7XG4iCi0gICAgICAiICByZXR1cm4gaW5zdGFuY2UuZ2V0JGNhcGl0YWxp
emVkX25hbWUkVmFsdWUoaW5kZXgpO1xuIgotICAgICAgIn1cbiIpOwotICAgIFdyaXRlRmllbGRE
b2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6
ZWRfbmFtZSRWYWx1ZShcbiIKLSAgICAgICIgICAgaW50IGluZGV4LCBpbnQgdmFsdWUpIHtcbiIK
LSAgICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgICAiICBpbnN0YW5jZS5zZXQkY2FwaXRh
bGl6ZWRfbmFtZSRWYWx1ZShpbmRleCwgdmFsdWUpO1xuIgotICAgICAgIiAgcmV0dXJuIHRoaXM7
XG4iCi0gICAgICAifVxuIik7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJl
Y2F0aW9uJHB1YmxpYyBCdWlsZGVyIGFkZCRjYXBpdGFsaXplZF9uYW1lJFZhbHVlKGludCB2YWx1
ZSkge1xuIgotICAgICAgIiAgaW5zdGFuY2UuYWRkJGNhcGl0YWxpemVkX25hbWUkVmFsdWUodmFs
dWUpO1xuIgotICAgICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgICAifVxuIik7Ci0gICAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGFkZEFs
bCRjYXBpdGFsaXplZF9uYW1lJFZhbHVlKFxuIgotICAgICAgIiAgICBqYXZhLmxhbmcuSXRlcmFi
bGU8amF2YS5sYW5nLkludGVnZXI+IHZhbHVlcykge1xuIgotICAgICAgIiAgY29weU9uV3JpdGUo
KTtcbiIKLSAgICAgICIgIGluc3RhbmNlLmFkZEFsbCRjYXBpdGFsaXplZF9uYW1lJFZhbHVlKHZh
bHVlcyk7XG4iCi0gICAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQot
fQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5l
cmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
IGNvbnN0IHsKLSAgLy8gbm9vcCBmb3IgZW51bXMKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJs
ZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywg
IiRuYW1lJF8gPSBlbXB0eUludExpc3QoKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRh
YmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVZpc2l0Q29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIk
bmFtZSRfPSB2aXNpdG9yLnZpc2l0SW50TGlzdCgkbmFtZSRfLCBvdGhlci4kbmFtZSRfKTtcbiIp
OwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1H
ZW5lcmF0ZUR5bmFtaWNNZXRob2RNYWtlSW1tdXRhYmxlQ29kZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkbmFtZSRfLm1h
a2VJbW11dGFibGUoKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlRW51bUZpZWxk
TGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIC8vIFJlYWQgYW5kIHN0b3JlIHRoZSBlbnVtCi0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgImlmICghJGlzX211dGFibGUkKSB7XG4iCi0gICAgIiAgJG5hbWUk
XyA9XG4iCi0gICAgIiAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxp
dGUubXV0YWJsZUNvcHkoJG5hbWUkXyk7XG4iCi0gICAgIn1cbiIpOwotCi0gIGlmIChTdXBwb3J0
VW5rbm93bkVudW1WYWx1ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgICAiJG5hbWUkXy5hZGRJbnQoaW5wdXQucmVhZEVudW0oKSk7
XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
ImludCByYXdWYWx1ZSA9IGlucHV0LnJlYWRFbnVtKCk7XG4iCi0gICAgICAiJHR5cGUkIHZhbHVl
ID0gJHR5cGUkLmZvck51bWJlcihyYXdWYWx1ZSk7XG4iCi0gICAgICAiaWYgKHZhbHVlID09IG51
bGwpIHtcbiIKLSAgICAgIC8vIFdlIHN0b3JlIHRoZSB1bmtub3duIHZhbHVlIGluIHVua25vd24g
ZmllbGRzLgotICAgICAgIiAgc3VwZXIubWVyZ2VWYXJpbnRGaWVsZCgkbnVtYmVyJCwgcmF3VmFs
dWUpO1xuIgotICAgICAgIn0gZWxzZSB7XG4iCi0gICAgICAiICAkbmFtZSRfLmFkZEludChyYXdW
YWx1ZSk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJs
ZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29kZUZyb21QYWNrZWQo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiaWYgKCEkaXNfbXV0YWJsZSQpIHtcbiIKLSAgICAiICAkbmFtZSRfID1cbiIKLSAg
ICAiICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5tdXRhYmxl
Q29weSgkbmFtZSRfKTtcbiIKLSAgICAifVxuIik7Ci0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAiaW50IGxlbmd0aCA9IGlucHV0LnJlYWRSYXdWYXJpbnQzMigpO1xuIgotICAg
ICJpbnQgb2xkTGltaXQgPSBpbnB1dC5wdXNoTGltaXQobGVuZ3RoKTtcbiIKLSAgICAid2hpbGUo
aW5wdXQuZ2V0Qnl0ZXNVbnRpbExpbWl0KCkgPiAwKSB7XG4iKTsKLSAgcHJpbnRlci0+SW5kZW50
KCk7Ci0KLSAgLy8gUmVhZCBhbmQgc3RvcmUgdGhlIGVudW0KLSAgaWYgKFN1cHBvcnRVbmtub3du
RW51bVZhbHVlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAgICIkbmFtZSRfLmFkZEludChpbnB1dC5yZWFkRW51bSgpKTtcbiIpOwot
ICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaW50IHJh
d1ZhbHVlID0gaW5wdXQucmVhZEVudW0oKTtcbiIKLSAgICAgICIkdHlwZSQgdmFsdWUgPSAkdHlw
ZSQuZm9yTnVtYmVyKHJhd1ZhbHVlKTtcbiIKLSAgICAgICJpZiAodmFsdWUgPT0gbnVsbCkge1xu
IgotICAgICAgLy8gV2Ugc3RvcmUgdGhlIHVua25vd24gdmFsdWUgaW4gdW5rbm93biBmaWVsZHMu
Ci0gICAgICAiICBzdXBlci5tZXJnZVZhcmludEZpZWxkKCRudW1iZXIkLCByYXdWYWx1ZSk7XG4i
Ci0gICAgICAifSBlbHNlIHtcbiIKLSAgICAgICIgICRuYW1lJF8uYWRkSW50KHJhd1ZhbHVlKTtc
biIKLSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAifVxuIgotICAgICJpbnB1dC5wb3BMaW1pdChvbGRM
aW1pdCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZExpdGVHZW5l
cmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRpc19tdXRhYmxl
JCkge1xuIgotICAgICIgICRuYW1lJF8ubWFrZUltbXV0YWJsZSgpO1xuIgotICAgICJ9XG4iKTsK
LX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBp
ZiAoZGVzY3JpcHRvcl8tPm9wdGlvbnMoKS5wYWNrZWQoKSkgewotICAgIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgICAiaWYgKGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKS5zaXpl
KCkgPiAwKSB7XG4iCi0gICAgICAiICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMigkdGFnJCk7XG4i
Ci0gICAgICAiICBvdXRwdXQud3JpdGVSYXdWYXJpbnQzMigkbmFtZSRNZW1vaXplZFNlcmlhbGl6
ZWRTaXplKTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiZm9yIChpbnQgaSA9IDA7IGkgPCAkbmFt
ZSRfLnNpemUoKTsgaSsrKSB7XG4iCi0gICAgICAiICBvdXRwdXQud3JpdGVFbnVtTm9UYWcoJG5h
bWUkXy5nZXRJbnQoaSkpO1xuIgotICAgICAgIn1cbiIpOwotICB9IGVsc2UgewotICAgIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiZm9yIChpbnQgaSA9IDA7IGkgPCAkbmFtZSRf
LnNpemUoKTsgaSsrKSB7XG4iCi0gICAgICAiICBvdXRwdXQud3JpdGVFbnVtKCRudW1iZXIkLCAk
bmFtZSRfLmdldEludChpKSk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLX0KLQotdm9pZCBSZXBl
YXRlZEltbXV0YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVk
U2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAie1xuIgotICAgICIgIGludCBkYXRhU2l6ZSA9IDA7XG4iKTsKLSAg
cHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
Zm9yIChpbnQgaSA9IDA7IGkgPCAkbmFtZSRfLnNpemUoKTsgaSsrKSB7XG4iCi0gICAgIiAgZGF0
YVNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAgICIg
ICAgLmNvbXB1dGVFbnVtU2l6ZU5vVGFnKCRuYW1lJF8uZ2V0SW50KGkpKTtcbiIKLSAgICAifVxu
Iik7Ci0gIHByaW50ZXItPlByaW50KAotICAgICJzaXplICs9IGRhdGFTaXplO1xuIik7Ci0gIGlm
IChkZXNjcmlwdG9yXy0+b3B0aW9ucygpLnBhY2tlZCgpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAgICJpZiAoIWdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKS5pc0Vt
cHR5KCkpIHsiCi0gICAgICAiICBzaXplICs9ICR0YWdfc2l6ZSQ7XG4iCi0gICAgICAiICBzaXpl
ICs9IGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRPdXRwdXRTdHJlYW1cbiIKLSAgICAgICIgICAg
LmNvbXB1dGVSYXdWYXJpbnQzMlNpemUoZGF0YVNpemUpO1xuIgotICAgICAgIn0iKTsKLSAgfSBl
bHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgInNpemUgKz0gJHRh
Z19zaXplJCAqICRuYW1lJF8uc2l6ZSgpO1xuIik7Ci0gIH0KLQotICAvLyBjYWNoZSB0aGUgZGF0
YSBzaXplIGZvciBwYWNrZWQgZmllbGRzLgotICBpZiAoZGVzY3JpcHRvcl8tPm9wdGlvbnMoKS5w
YWNrZWQoKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJG5hbWUk
TWVtb2l6ZWRTZXJpYWxpemVkU2l6ZSA9IGRhdGFTaXplO1xuIik7Ci0gIH0KLQotICBwcmludGVy
LT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRl
ZEltbXV0YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVFcXVhbHNDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgInJlc3VsdCA9IHJlc3VsdCAmJiAkbmFtZSRfLmVxdWFscyhvdGhlci4kbmFtZSRfKTtc
biIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmIChnZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3Vu
dCgpID4gMCkge1xuIgotICAgICIgIGhhc2ggPSAoMzcgKiBoYXNoKSArICRjb25zdGFudF9uYW1l
JDtcbiIKLSAgICAiICBoYXNoID0gKDUzICogaGFzaCkgKyAkbmFtZSRfLmhhc2hDb2RlKCk7XG4i
Ci0gICAgIn1cbiIpOwotfQotCi1zdHJpbmcgUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRMaXRl
R2VuZXJhdG9yOjpHZXRCb3hlZFR5cGUoKSBjb25zdCB7Ci0gIHJldHVybiBuYW1lX3Jlc29sdmVy
Xy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5lbnVtX3R5cGUoKSk7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5h
bWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2ZpZWxkX2xpdGUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9maWVsZF9saXRlLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMDFiOGQ2NmFjYzE5ZWExZTYyODI4YmM2NTE1
ZTc5ZDQyMWI4ODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2ZpZWxkX2xpdGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRh
KQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAg
U2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5kZWYgR09PR0xF
X1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfRU5VTV9GSUVMRF9MSVRFX0hfXwotI2RlZmluZSBHT09H
TEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9FTlVNX0ZJRUxEX0xJVEVfSF9fCi0KLSNpbmNsdWRl
IDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2Ug
cHJvdG9idWYgewotICBuYW1lc3BhY2UgY29tcGlsZXIgewotICAgIG5hbWVzcGFjZSBqYXZhIHsK
LSAgICAgIGNsYXNzIENvbnRleHQ7ICAgICAgICAgICAgLy8gY29udGV4dC5oCi0gICAgICBjbGFz
cyBDbGFzc05hbWVSZXNvbHZlcjsgIC8vIG5hbWVfcmVzb2x2ZXIuaAotICAgIH0KLSAgfQotfQot
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBq
YXZhIHsKLQotY2xhc3MgSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvciA6IHB1YmxpYyBJ
bW11dGFibGVGaWVsZExpdGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgSW1tdXRh
YmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZGVzY3JpcHRvciwgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgIGludCBidWlsZGVyQml0SW5k
ZXgsIENvbnRleHQqIGNvbnRleHQpOwotICB+SW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRv
cigpOwotCi0gIC8vIGltcGxlbWVudHMgSW1tdXRhYmxlRmllbGRMaXRlR2VuZXJhdG9yIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBpbnQgR2V0TnVtQml0c0Zvck1lc3Nh
Z2UoKSBjb25zdDsKLSAgaW50IEdldE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3Q7Ci0gIHZvaWQg
R2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAg
dm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2
b2lkIEdlbmVyYXRlSW5pdGlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZVZpc2l0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVEeW5hbWljTWV0aG9kTWFrZUltbXV0YWJsZUNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0RvbmVDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRT
aXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVGaWVs
ZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVIYXNoQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSAg
c3RyaW5nIEdldEJveGVkVHlwZSgpIGNvbnN0OwotCi0gcHJvdGVjdGVkOgotICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxl
c187Ci0gIGNvbnN0IGludCBtZXNzYWdlQml0SW5kZXhfOwotICBjb25zdCBpbnQgYnVpbGRlckJp
dEluZGV4XzsKLSAgQ29udGV4dCogY29udGV4dF87Ci0gIENsYXNzTmFtZVJlc29sdmVyKiBuYW1l
X3Jlc29sdmVyXzsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVD
VE9SUyhJbW11dGFibGVFbnVtRmllbGRMaXRlR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIEltbXV0
YWJsZUVudW1PbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcgotICAgIDogcHVibGljIEltbXV0YWJsZUVu
dW1GaWVsZExpdGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgSW1tdXRhYmxlRW51bU9uZW9mRmll
bGRMaXRlR2VuZXJhdG9yKAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9y
LCBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwgQ29udGV4
dCogY29udGV4dCk7Ci0gIH5JbW11dGFibGVFbnVtT25lb2ZGaWVsZExpdGVHZW5lcmF0b3IoKTsK
LQotICB2b2lkIEdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVWaXNpdENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JT
KEltbXV0YWJsZUVudW1PbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBSZXBl
YXRlZEltbXV0YWJsZUVudW1GaWVsZExpdGVHZW5lcmF0b3IKLSAgICA6IHB1YmxpYyBJbW11dGFi
bGVGaWVsZExpdGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgUmVwZWF0ZWRJbW11
dGFibGVFbnVtRmllbGRMaXRlR2VuZXJhdG9yKAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yLCBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgaW50IGJ1aWxkZXJCaXRJ
bmRleCwgQ29udGV4dCogY29udGV4dCk7Ci0gIH5SZXBlYXRlZEltbXV0YWJsZUVudW1GaWVsZExp
dGVHZW5lcmF0b3IoKTsKLQotICAvLyBpbXBsZW1lbnRzIEltbXV0YWJsZUZpZWxkTGl0ZUdlbmVy
YXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgaW50IEdldE51bUJp
dHNGb3JNZXNzYWdlKCkgY29uc3Q7Ci0gIGludCBHZXROdW1CaXRzRm9yQnVpbGRlcigpIGNvbnN0
OwotICB2b2lkIEdlbmVyYXRlSW50ZXJmYWNlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZUluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVWaXNpdENvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRHluYW1pY01ldGhvZE1ha2VJbW11dGFibGVDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2Rl
RnJvbVBhY2tlZChpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQ
YXJzaW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsK
LSAgdm9pZCBHZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdDsKLQotICBzdHJpbmcgR2V0Qm94ZWRUeXBlKCkgY29uc3Q7Ci0KLSBwcml2
YXRlOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5n
LCBzdHJpbmc+IHZhcmlhYmxlc187Ci0gIGNvbnN0IGludCBtZXNzYWdlQml0SW5kZXhfOwotICBj
b25zdCBpbnQgYnVpbGRlckJpdEluZGV4XzsKLSAgQ29udGV4dCogY29udGV4dF87Ci0gIENsYXNz
TmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9D
T05TVFJVQ1RPUlMoUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRMaXRlR2VuZXJhdG9yKTsKLX07
Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8v
IG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8v
IEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX0VOVU1fRklFTERfTElURV9IX18KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9saXRlLmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2xpdGUuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMmRhOGQ3N2Q0Y2E2MjQ4N2EzOTQwNzc4ZDk0
ZDYxNWJjYWU4NmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2xpdGUuY2MKKysr
IC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8v
ICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmph
eSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8bWFwPgotI2lu
Y2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfY29udGV4dC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfZW51bV9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9kb2NfY29tbWVudC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9p
by9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFt
ZXNwYWNlIGphdmEgewotCi1uYW1lc3BhY2UgewotYm9vbCBFbnVtSGFzQ3VzdG9tT3B0aW9ucyhj
b25zdCBFbnVtRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBpZiAoZGVzY3JpcHRvci0+b3B0
aW9ucygpLnVua25vd25fZmllbGRzKCkuZmllbGRfY291bnQoKSA+IDApIHJldHVybiB0cnVlOwot
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPnZhbHVlX2NvdW50KCk7ICsraSkgewot
ICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIHZhbHVlID0gZGVzY3JpcHRvci0+dmFsdWUo
aSk7Ci0gICAgaWYgKHZhbHVlLT5vcHRpb25zKCkudW5rbm93bl9maWVsZHMoKS5maWVsZF9jb3Vu
dCgpID4gMCkgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotfSAgLy8gbmFt
ZXNwYWNlCi0KLUVudW1MaXRlR2VuZXJhdG9yOjpFbnVtTGl0ZUdlbmVyYXRvcihjb25zdCBFbnVt
RGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpbW11dGFibGVfYXBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0KiBj
b250ZXh0KQotICA6IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpLCBpbW11dGFibGVfYXBpXyhpbW11
dGFibGVfYXBpKSwKLSAgICBuYW1lX3Jlc29sdmVyXyhjb250ZXh0LT5HZXROYW1lUmVzb2x2ZXIo
KSkgIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+dmFsdWVfY291bnQoKTsg
aSsrKSB7Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWUgPSBkZXNjcmlwdG9y
Xy0+dmFsdWUoaSk7Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogY2Fub25pY2FsX3Zh
bHVlID0KLSAgICAgIGRlc2NyaXB0b3JfLT5GaW5kVmFsdWVCeU51bWJlcih2YWx1ZS0+bnVtYmVy
KCkpOwotCi0gICAgaWYgKHZhbHVlID09IGNhbm9uaWNhbF92YWx1ZSkgewotICAgICAgY2Fub25p
Y2FsX3ZhbHVlc18ucHVzaF9iYWNrKHZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgQWxpYXMg
YWxpYXM7Ci0gICAgICBhbGlhcy52YWx1ZSA9IHZhbHVlOwotICAgICAgYWxpYXMuY2Fub25pY2Fs
X3ZhbHVlID0gY2Fub25pY2FsX3ZhbHVlOwotICAgICAgYWxpYXNlc18ucHVzaF9iYWNrKGFsaWFz
KTsKLSAgICB9Ci0gIH0KLX0KLQotRW51bUxpdGVHZW5lcmF0b3I6On5FbnVtTGl0ZUdlbmVyYXRv
cigpIHt9Ci0KLXZvaWQgRW51bUxpdGVHZW5lcmF0b3I6OkdlbmVyYXRlKGlvOjpQcmludGVyKiBw
cmludGVyKSB7Ci0gIFdyaXRlRW51bURvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwot
ICBwcmludGVyLT5QcmludCgKLSAgICAicHVibGljIGVudW0gJGNsYXNzbmFtZSRcbiIKLSAgICAi
ICAgIGltcGxlbWVudHMgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5FbnVtTGl0ZSB7XG4i
LAotICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLSAgcHJpbnRlci0+SW5k
ZW50KCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYW5vbmljYWxfdmFsdWVzXy5zaXplKCk7
IGkrKykgewotICAgIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgICB2YXJzWyJuYW1lIl0g
PSBjYW5vbmljYWxfdmFsdWVzX1tpXS0+bmFtZSgpOwotICAgIHZhcnNbIm51bWJlciJdID0gU2lt
cGxlSXRvYShjYW5vbmljYWxfdmFsdWVzX1tpXS0+bnVtYmVyKCkpOwotICAgIFdyaXRlRW51bVZh
bHVlRG9jQ29tbWVudChwcmludGVyLCBjYW5vbmljYWxfdmFsdWVzX1tpXSk7Ci0gICAgaWYgKGNh
bm9uaWNhbF92YWx1ZXNfW2ldLT5vcHRpb25zKCkuZGVwcmVjYXRlZCgpKSB7Ci0gICAgICBwcmlu
dGVyLT5QcmludCgiQGphdmEubGFuZy5EZXByZWNhdGVkXG4iKTsKLSAgICB9Ci0gICAgcHJpbnRl
ci0+UHJpbnQodmFycywKLSAgICAgICIkbmFtZSQoJG51bWJlciQpLFxuIik7Ci0gIH0KLQotICBp
ZiAoU3VwcG9ydFVua25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBw
cmludGVyLT5QcmludCgiVU5SRUNPR05JWkVEKC0xKSxcbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+
UHJpbnQoCi0gICAgIjtcbiIKLSAgICAiXG4iKTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgYWxpYXNlc18uc2l6ZSgpOyBpKyspIHsKLSAgICBtYXA8c3RyaW5nLCBz
dHJpbmc+IHZhcnM7Ci0gICAgdmFyc1siY2xhc3NuYW1lIl0gPSBkZXNjcmlwdG9yXy0+bmFtZSgp
OwotICAgIHZhcnNbIm5hbWUiXSA9IGFsaWFzZXNfW2ldLnZhbHVlLT5uYW1lKCk7Ci0gICAgdmFy
c1siY2Fub25pY2FsX25hbWUiXSA9IGFsaWFzZXNfW2ldLmNhbm9uaWNhbF92YWx1ZS0+bmFtZSgp
OwotICAgIFdyaXRlRW51bVZhbHVlRG9jQ29tbWVudChwcmludGVyLCBhbGlhc2VzX1tpXS52YWx1
ZSk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFs
ICRjbGFzc25hbWUkICRuYW1lJCA9ICRjYW5vbmljYWxfbmFtZSQ7XG4iKTsKLSAgfQotCi0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPnZhbHVlX2NvdW50KCk7IGkrKykgewotICAg
IG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgICB2YXJzWyJuYW1lIl0gPSBkZXNjcmlwdG9y
Xy0+dmFsdWUoaSktPm5hbWUoKTsKLSAgICB2YXJzWyJudW1iZXIiXSA9IFNpbXBsZUl0b2EoZGVz
Y3JpcHRvcl8tPnZhbHVlKGkpLT5udW1iZXIoKSk7Ci0gICAgV3JpdGVFbnVtVmFsdWVEb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfLT52YWx1ZShpKSk7Ci0gICAgcHJpbnRlci0+UHJpbnQo
dmFycywKLSAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFsIGludCAkbmFtZSRfVkFMVUUgPSAkbnVt
YmVyJDtcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KCJcbiIpOwotCi0gIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIlxuIgotICAgICJwdWJsaWMgZmluYWwgaW50IGdl
dE51bWJlcigpIHtcbiIKLSAgICAiICByZXR1cm4gdmFsdWU7XG4iCi0gICAgIn1cbiIKLSAgICAi
XG4iCi0gICAgIi8qKlxuIgotICAgICIgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNmb3JOdW1i
ZXIoaW50KX0gaW5zdGVhZC5cbiIKLSAgICAiICovXG4iCi0gICAgIkBqYXZhLmxhbmcuRGVwcmVj
YXRlZFxuIgotICAgICJwdWJsaWMgc3RhdGljICRjbGFzc25hbWUkIHZhbHVlT2YoaW50IHZhbHVl
KSB7XG4iCi0gICAgIiAgcmV0dXJuIGZvck51bWJlcih2YWx1ZSk7XG4iCi0gICAgIn1cbiIKLSAg
ICAiXG4iCi0gICAgInB1YmxpYyBzdGF0aWMgJGNsYXNzbmFtZSQgZm9yTnVtYmVyKGludCB2YWx1
ZSkge1xuIgotICAgICIgIHN3aXRjaCAodmFsdWUpIHtcbiIsCi0gICAgImNsYXNzbmFtZSIsIGRl
c2NyaXB0b3JfLT5uYW1lKCkpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLSAgcHJpbnRlci0+SW5k
ZW50KCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYW5vbmljYWxfdmFsdWVzXy5zaXplKCk7
IGkrKykgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgImNhc2UgJG51bWJlciQ6IHJldHVy
biAkbmFtZSQ7XG4iLAotICAgICAgIm5hbWUiLCBjYW5vbmljYWxfdmFsdWVzX1tpXS0+bmFtZSgp
LAotICAgICAgIm51bWJlciIsIFNpbXBsZUl0b2EoY2Fub25pY2FsX3ZhbHVlc19baV0tPm51bWJl
cigpKSk7Ci0gIH0KLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPk91dGRlbnQo
KTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcbiIK
LSAgICAiICB9XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iCi0gICAgInB1YmxpYyBzdGF0aWMgY29t
Lmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5FbnVtTGl0ZU1hcDwkY2xhc3NuYW1lJD5cbiIKLSAg
ICAiICAgIGludGVybmFsR2V0VmFsdWVNYXAoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGludGVybmFs
VmFsdWVNYXA7XG4iCi0gICAgIn1cbiIKLSAgICAicHJpdmF0ZSBzdGF0aWMgZmluYWwgY29tLmdv
b2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5FbnVtTGl0ZU1hcDxcbiIKLSAgICAiICAgICRjbGFzc25h
bWUkPiBpbnRlcm5hbFZhbHVlTWFwID1cbiIKLSAgICAiICAgICAgbmV3IGNvbS5nb29nbGUucHJv
dG9idWYuSW50ZXJuYWwuRW51bUxpdGVNYXA8JGNsYXNzbmFtZSQ+KCkge1xuIgotICAgICIgICAg
ICAgIHB1YmxpYyAkY2xhc3NuYW1lJCBmaW5kVmFsdWVCeU51bWJlcihpbnQgbnVtYmVyKSB7XG4i
Ci0gICAgIiAgICAgICAgICByZXR1cm4gJGNsYXNzbmFtZSQuZm9yTnVtYmVyKG51bWJlcik7XG4i
Ci0gICAgIiAgICAgICAgfVxuIgotICAgICIgICAgICB9O1xuIgotICAgICJcbiIsCi0gICAgImNs
YXNzbmFtZSIsIGRlc2NyaXB0b3JfLT5uYW1lKCkpOwotCi0gIHByaW50ZXItPlByaW50KAotICAg
ICJwcml2YXRlIGZpbmFsIGludCB2YWx1ZTtcblxuIgotICAgICJwcml2YXRlICRjbGFzc25hbWUk
KGludCB2YWx1ZSkge1xuIiwKLSAgICAiY2xhc3NuYW1lIiwgZGVzY3JpcHRvcl8tPm5hbWUoKSk7
Ci0gIHByaW50ZXItPlByaW50KAotICAgICIgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiIKLSAgICAi
fVxuIik7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIlxuIgotICAgICIvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZW51bV9zY29wZTokZnVsbF9uYW1lJClcbiIsCi0gICAgImZ1bGxfbmFt
ZSIsIGRlc2NyaXB0b3JfLT5mdWxsX25hbWUoKSk7Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwot
ICBwcmludGVyLT5QcmludCgifVxuXG4iKTsKLX0KLQotYm9vbCBFbnVtTGl0ZUdlbmVyYXRvcjo6
Q2FuVXNlRW51bVZhbHVlcygpIHsKLSAgaWYgKGNhbm9uaWNhbF92YWx1ZXNfLnNpemUoKSAhPSBk
ZXNjcmlwdG9yXy0+dmFsdWVfY291bnQoKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBm
b3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT52YWx1ZV9jb3VudCgpOyBpKyspIHsKLSAg
ICBpZiAoZGVzY3JpcHRvcl8tPnZhbHVlKGkpLT5uYW1lKCkgIT0gY2Fub25pY2FsX3ZhbHVlc19b
aV0tPm5hbWUoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxl
cgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW1fbGl0ZS5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2xpdGUuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUyZjVmN2E4OGM3OWIzN2ExMWRkYWYwNzM4YzJk
MDIwMDcyNTgwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW1fbGl0ZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBC
YXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBH
aGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JV
Rl9DT01QSUxFUl9KQVZBX0VOVU1fTElURV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NP
TVBJTEVSX0pBVkFfRU5VTV9MSVRFX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUg
PHZlY3Rvcj4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotCi1uYW1l
c3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0gIG5hbWVzcGFjZSBjb21waWxl
ciB7Ci0gICAgbmFtZXNwYWNlIGphdmEgewotICAgICAgY2xhc3MgQ29udGV4dDsgICAgICAgICAg
IC8vIGNvbnRleHQuaAotICAgICAgY2xhc3MgQ2xhc3NOYW1lUmVzb2x2ZXI7IC8vIG5hbWVfcmVz
b2x2ZXIuaAotICAgIH0KLSAgfQotICBuYW1lc3BhY2UgaW8gewotICAgIGNsYXNzIFByaW50ZXI7
ICAgICAgICAgICAgIC8vIHByaW50ZXIuaAotICB9Ci19Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1jbGFzcyBFbnVtTGl0
ZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBFbnVtTGl0ZUdlbmVyYXRvcihjb25z
dCBFbnVtRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGltbXV0YWJsZV9hcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29u
dGV4dCk7Ci0gIH5FbnVtTGl0ZUdlbmVyYXRvcigpOwotCi0gIHZvaWQgR2VuZXJhdGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpOwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRW51bURlc2NyaXB0b3IqIGRl
c2NyaXB0b3JfOwotCi0gIC8vIFRoZSBwcm90byBsYW5ndWFnZSBhbGxvd3MgbXVsdGlwbGUgZW51
bSBjb25zdGFudHMgdG8gaGF2ZSB0aGUgc2FtZSBudW1lcmljCi0gIC8vIHZhbHVlLiAgSmF2YSwg
aG93ZXZlciwgZG9lcyBub3QgYWxsb3cgbXVsdGlwbGUgZW51bSBjb25zdGFudHMgdG8gYmUKLSAg
Ly8gY29uc2lkZXJlZCBlcXVpdmFsZW50LiAgV2UgdHJlYXQgdGhlIGZpcnN0IGRlZmluZWQgY29u
c3RhbnQgZm9yIGFueQotICAvLyBnaXZlbiBudW1lcmljIHZhbHVlIGFzICJjYW5vbmljYWwiIGFu
ZCB0aGUgcmVzdCBhcyBhbGlhc2VzIG9mIHRoYXQKLSAgLy8gY2Fub25pY2FsIHZhbHVlLgotICB2
ZWN0b3I8Y29uc3QgRW51bVZhbHVlRGVzY3JpcHRvcio+IGNhbm9uaWNhbF92YWx1ZXNfOwotCi0g
IHN0cnVjdCBBbGlhcyB7Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWU7Ci0g
ICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogY2Fub25pY2FsX3ZhbHVlOwotICB9OwotICB2
ZWN0b3I8QWxpYXM+IGFsaWFzZXNfOwotCi0gIGJvb2wgaW1tdXRhYmxlX2FwaV87Ci0KLSAgQ29u
dGV4dCogY29udGV4dF87Ci0gIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLQot
ICBib29sIENhblVzZUVudW1WYWx1ZXMoKTsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05T
VFJVQ1RPUlMoRW51bUxpdGVHZW5lcmF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGphdmEK
LX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVS
X0pBVkFfRU5VTV9MSVRFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9leHRlbnNpb24uY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX2V4dGVuc2lvbi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZi
NWZhYWE1MDk0NWQ5NzY2YmRiZTZhZTBkMDg3OGI3MTUwYWJiOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX2V4dGVuc2lvbi5jYworKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29v
Z2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1
ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhl
cnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2V4dGVu
c2lvbi5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9j
b250ZXh0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9k
b2NfY29tbWVudC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfbmFtZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVy
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsK
LW5hbWVzcGFjZSBqYXZhIHsKLQotSW1tdXRhYmxlRXh0ZW5zaW9uR2VuZXJhdG9yOjpJbW11dGFi
bGVFeHRlbnNpb25HZW5lcmF0b3IoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yLCBDb250ZXh0KiBjb250ZXh0KQotICA6IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpLCBjb250
ZXh0Xyhjb250ZXh0KSwKLSAgICBuYW1lX3Jlc29sdmVyXyhjb250ZXh0LT5HZXROYW1lUmVzb2x2
ZXIoKSkgewotICBpZiAoZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9zY29wZSgpICE9IE5VTEwpIHsK
LSAgICBzY29wZV8gPSBuYW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKAotICAg
ICAgICBkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3Njb3BlKCkpOwotICB9IGVsc2UgewotICAgIHNj
b3BlXyA9IG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8t
PmZpbGUoKSk7Ci0gIH0KLX0KLQotSW1tdXRhYmxlRXh0ZW5zaW9uR2VuZXJhdG9yOjp+SW1tdXRh
YmxlRXh0ZW5zaW9uR2VuZXJhdG9yKCkge30KLQotLy8gSW5pdGlhbGl6ZXMgdGhlIHZhcnMgcmVm
ZXJlbmNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgdGVtcGxhdGVzLgotdm9pZCBFeHRlbnNpb25H
ZW5lcmF0b3I6OkluaXRUZW1wbGF0ZVZhcnMoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Ry
aW5nJiBzY29wZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaW1tdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXA8c3RyaW5nLCBzdHJpbmc+KiB2YXJzX3BvaW50ZXIpIHsK
LSAgbWFwPHN0cmluZywgc3RyaW5nPiAmdmFycyA9ICp2YXJzX3BvaW50ZXI7Ci0gIHZhcnNbInNj
b3BlIl0gPSBzY29wZTsKLSAgdmFyc1sibmFtZSJdID0gVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShk
ZXNjcmlwdG9yKTsKLSAgdmFyc1siY29udGFpbmluZ190eXBlIl0gPQotICAgICAgbmFtZV9yZXNv
bHZlci0+R2V0Q2xhc3NOYW1lKGRlc2NyaXB0b3ItPmNvbnRhaW5pbmdfdHlwZSgpLCBpbW11dGFi
bGUpOwotICB2YXJzWyJudW1iZXIiXSA9IFNpbXBsZUl0b2EoZGVzY3JpcHRvci0+bnVtYmVyKCkp
OwotICB2YXJzWyJjb25zdGFudF9uYW1lIl0gPSBGaWVsZENvbnN0YW50TmFtZShkZXNjcmlwdG9y
KTsKLSAgdmFyc1siaW5kZXgiXSA9IFNpbXBsZUl0b2EoZGVzY3JpcHRvci0+aW5kZXgoKSk7Ci0g
IHZhcnNbImRlZmF1bHQiXSA9IGRlc2NyaXB0b3ItPmlzX3JlcGVhdGVkKCkgPwotICAgICAgIiIg
OiBEZWZhdWx0VmFsdWUoZGVzY3JpcHRvciwgaW1tdXRhYmxlLCBuYW1lX3Jlc29sdmVyKTsKLSAg
dmFyc1sidHlwZV9jb25zdGFudCJdID0gRmllbGRUeXBlTmFtZShHZXRUeXBlKGRlc2NyaXB0b3Ip
KTsKLSAgdmFyc1sicGFja2VkIl0gPSBkZXNjcmlwdG9yLT5vcHRpb25zKCkucGFja2VkKCkgPyAi
dHJ1ZSIgOiAiZmFsc2UiOwotICB2YXJzWyJlbnVtX21hcCJdID0gIm51bGwiOwotICB2YXJzWyJw
cm90b3R5cGUiXSA9ICJudWxsIjsKLQotICBKYXZhVHlwZSBqYXZhX3R5cGUgPSBHZXRKYXZhVHlw
ZShkZXNjcmlwdG9yKTsKLSAgc3RyaW5nIHNpbmd1bGFyX3R5cGU7Ci0gIHN3aXRjaCAoamF2YV90
eXBlKSB7Ci0gICAgY2FzZSBKQVZBVFlQRV9NRVNTQUdFOgotICAgICAgc2luZ3VsYXJfdHlwZSA9
IG5hbWVfcmVzb2x2ZXItPkdldENsYXNzTmFtZShkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbXV0
YWJsZSk7Ci0gICAgICB2YXJzWyJwcm90b3R5cGUiXSA9IHNpbmd1bGFyX3R5cGUgKyAiLmdldERl
ZmF1bHRJbnN0YW5jZSgpIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSkFWQVRZUEVfRU5VTToK
LSAgICAgIHNpbmd1bGFyX3R5cGUgPSBuYW1lX3Jlc29sdmVyLT5HZXRDbGFzc05hbWUoZGVzY3Jp
cHRvci0+ZW51bV90eXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbW11dGFibGUpOwotICAgICAgdmFyc1siZW51bV9tYXAiXSA9IHNpbmd1
bGFyX3R5cGUgKyAiLmludGVybmFsR2V0VmFsdWVNYXAoKSI7Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIEpBVkFUWVBFX1NUUklORzoKLSAgICAgIHNpbmd1bGFyX3R5cGUgPSAiamF2YS5sYW5nLlN0
cmluZyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEpBVkFUWVBFX0JZVEVTOgotICAgICAgc2lu
Z3VsYXJfdHlwZSA9IGltbXV0YWJsZSA/ICJjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmci
IDogImJ5dGVbXSI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgc2luZ3VsYXJf
dHlwZSA9IEJveGVkUHJpbWl0aXZlVHlwZU5hbWUoamF2YV90eXBlKTsKLSAgICAgIGJyZWFrOwot
ICB9Ci0gIHZhcnNbInR5cGUiXSA9IGRlc2NyaXB0b3ItPmlzX3JlcGVhdGVkKCkgPwotICAgICAg
ImphdmEudXRpbC5MaXN0PCIgKyBzaW5ndWxhcl90eXBlICsgIj4iIDogc2luZ3VsYXJfdHlwZTsK
LSAgdmFyc1sic2luZ3VsYXJfdHlwZSJdID0gc2luZ3VsYXJfdHlwZTsKLX0KLQotdm9pZCBJbW11
dGFibGVFeHRlbnNpb25HZW5lcmF0b3I6OkdlbmVyYXRlKGlvOjpQcmludGVyKiBwcmludGVyKSB7
Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgY29uc3QgYm9vbCBrVXNlSW1tdXRhYmxl
TmFtZXMgPSB0cnVlOwotICBJbml0VGVtcGxhdGVWYXJzKGRlc2NyaXB0b3JfLCBzY29wZV8sIGtV
c2VJbW11dGFibGVOYW1lcywgbmFtZV9yZXNvbHZlcl8sCi0gICAgICAgICAgICAgICAgICAgJnZh
cnMpOwotICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgInB1YmxpYyBzdGF0aWMgZmluYWwg
aW50ICRjb25zdGFudF9uYW1lJCA9ICRudW1iZXIkO1xuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBpZiAoZGVzY3JpcHRvcl8tPmV4dGVuc2lv
bl9zY29wZSgpID09IE5VTEwpIHsKLSAgICAvLyBOb24tbmVzdGVkCi0gICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgIHZhcnMsCi0gICAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFsXG4iCi0gICAg
ICAgICIgIGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZS5HZW5lcmF0ZWRFeHRl
bnNpb248XG4iCi0gICAgICAgICIgICAgJGNvbnRhaW5pbmdfdHlwZSQsXG4iCi0gICAgICAgICIg
ICAgJHR5cGUkPiAkbmFtZSQgPSBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2Vc
biIKLSAgICAgICAgIiAgICAgICAgLm5ld0ZpbGVTY29wZWRHZW5lcmF0ZWRFeHRlbnNpb24oXG4i
Ci0gICAgICAgICIgICAgICAkc2luZ3VsYXJfdHlwZSQuY2xhc3MsXG4iCi0gICAgICAgICIgICAg
ICAkcHJvdG90eXBlJCk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBOZXN0ZWQKLSAgICBwcmlu
dGVyLT5QcmludCgKLSAgICAgICAgdmFycywKLSAgICAgICAgInB1YmxpYyBzdGF0aWMgZmluYWxc
biIKLSAgICAgICAgIiAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlLkdlbmVy
YXRlZEV4dGVuc2lvbjxcbiIKLSAgICAgICAgIiAgICAkY29udGFpbmluZ190eXBlJCxcbiIKLSAg
ICAgICAgIiAgICAkdHlwZSQ+ICRuYW1lJCA9IGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVk
TWVzc2FnZVxuIgotICAgICAgICAiICAgICAgICAubmV3TWVzc2FnZVNjb3BlZEdlbmVyYXRlZEV4
dGVuc2lvbihcbiIKLSAgICAgICAgIiAgICAgICRzY29wZSQuZ2V0RGVmYXVsdEluc3RhbmNlKCks
XG4iCi0gICAgICAgICIgICAgICAkaW5kZXgkLFxuIgotICAgICAgICAiICAgICAgJHNpbmd1bGFy
X3R5cGUkLmNsYXNzLFxuIgotICAgICAgICAiICAgICAgJHByb3RvdHlwZSQpO1xuIik7Ci0gIH0K
LX0KLQotaW50IEltbXV0YWJsZUV4dGVuc2lvbkdlbmVyYXRvcjo6R2VuZXJhdGVOb25OZXN0ZWRJ
bml0aWFsaXphdGlvbkNvZGUoCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaW50IGJ5
dGVjb2RlX2VzdGltYXRlID0gMDsKLSAgaWYgKGRlc2NyaXB0b3JfLT5leHRlbnNpb25fc2NvcGUo
KSA9PSBOVUxMKSB7Ci0gICAgLy8gT25seSBhcHBsaWVzIHRvIG5vbi1uZXN0ZWQgZXh0ZW5zaW9u
cy4KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiRuYW1lJC5pbnRlcm5hbEluaXQoZGVz
Y3JpcHRvci5nZXRFeHRlbnNpb25zKCkuZ2V0KCRpbmRleCQpKTtcbiIsCi0gICAgICAgICJuYW1l
IiwgVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShkZXNjcmlwdG9yXyksCi0gICAgICAgICJpbmRleCIs
IFNpbXBsZUl0b2EoZGVzY3JpcHRvcl8tPmluZGV4KCkpKTsKLSAgICBieXRlY29kZV9lc3RpbWF0
ZSArPSAyMTsKLSAgfQotICByZXR1cm4gYnl0ZWNvZGVfZXN0aW1hdGU7Ci19Ci0KLWludCBJbW11
dGFibGVFeHRlbnNpb25HZW5lcmF0b3I6OkdlbmVyYXRlUmVnaXN0cmF0aW9uQ29kZSgKLSAgICBp
bzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICAicmVnaXN0cnku
YWRkKCRzY29wZSQuJG5hbWUkKTtcbiIsCi0gICAgInNjb3BlIiwgc2NvcGVfLAotICAgICJuYW1l
IiwgVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShkZXNjcmlwdG9yXykpOwotICByZXR1cm4gNzsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8g
bmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2V4dGVuc2lvbi5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9leHRlbnNpb24uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYmRkNDIyNjM3OWIwNGE4MWNjOGI0Y2JkNWFiMGM2YjgwMzQyMWRl
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2V4dGVuc2lvbi5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTEzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24g
b3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQs
IEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfSkFWQV9FWFRFTlNJT05fSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9K
QVZBX0VYVEVOU0lPTl9IX18KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLW5hbWVzcGFjZSBn
b29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLSAgY2xhc3MgRmllbGREZXNjcmlwdG9yOyAg
ICAgICAvLyBkZXNjcmlwdG9yLmgKLSAgbmFtZXNwYWNlIGNvbXBpbGVyIHsKLSAgICBuYW1lc3Bh
Y2UgamF2YSB7Ci0gICAgICBjbGFzcyBDb250ZXh0OyAgICAgICAgICAgLy8gY29udGV4dC5oCi0g
ICAgICBjbGFzcyBDbGFzc05hbWVSZXNvbHZlcjsgLy8gbmFtZV9yZXNvbHZlci5oCi0gICAgfQot
ICB9Ci0gIG5hbWVzcGFjZSBpbyB7Ci0gICAgY2xhc3MgUHJpbnRlcjsgICAgICAgICAgICAgLy8g
cHJpbnRlci5oCi0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21w
aWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLS8vIEdlbmVyYXRlcyBjb2RlIGZvciBhbiBleHRl
bnNpb24sIHdoaWNoIG1heSBiZSB3aXRoaW4gdGhlIHNjb3BlIG9mIHNvbWUKLS8vIG1lc3NhZ2Ug
b3IgbWF5IGJlIGF0IGZpbGUgc2NvcGUuICBUaGlzIGlzIG11Y2ggc2ltcGxlciB0aGFuIEZpZWxk
R2VuZXJhdG9yCi0vLyBzaW5jZSBleHRlbnNpb25zIGFyZSBqdXN0IHNpbXBsZSBpZGVudGlmaWVy
cyB3aXRoIGludGVyZXN0aW5nIHR5cGVzLgotY2xhc3MgRXh0ZW5zaW9uR2VuZXJhdG9yIHsKLSBw
dWJsaWM6Ci0gIGV4cGxpY2l0IEV4dGVuc2lvbkdlbmVyYXRvcigpIHt9Ci0gIHZpcnR1YWwgfkV4
dGVuc2lvbkdlbmVyYXRvcigpIHt9Ci0KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSA9IDA7Ci0KLSAgLy8gUmV0dXJucyBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHRoZSBwcmludGVkIGNvZGUgd2lsbCBjb21waWxlIHRvCi0gIHZpcnR1YWwg
aW50IEdlbmVyYXRlTm9uTmVzdGVkSW5pdGlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSA9IDA7Ci0KLSAgLy8gUmV0dXJucyBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGJ5
dGVzIHRoZSBwcmludGVkIGNvZGUgd2lsbCBjb21waWxlIHRvCi0gIHZpcnR1YWwgaW50IEdlbmVy
YXRlUmVnaXN0cmF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgPSAwOwotCi0gcHJvdGVj
dGVkOgotICBzdGF0aWMgdm9pZCBJbml0VGVtcGxhdGVWYXJzKGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmcmIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW1tdXRhYmxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzTmFtZVJlc29sdmVyKiBuYW1l
X3Jlc29sdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0
cmluZz4qIHZhcnNfcG9pbnRlcik7Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoRXh0ZW5zaW9uR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIEltbXV0YWJs
ZUV4dGVuc2lvbkdlbmVyYXRvciA6IHB1YmxpYyBFeHRlbnNpb25HZW5lcmF0b3IgewotIHB1Ymxp
YzoKLSAgZXhwbGljaXQgSW1tdXRhYmxlRXh0ZW5zaW9uR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbnRleHQqIGNvbnRleHQpOwotICB2aXJ0dWFsIH5JbW11dGFibGVFeHRlbnNpb25HZW5l
cmF0b3IoKTsKLQotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIp
OwotICB2aXJ0dWFsIGludCBHZW5lcmF0ZU5vbk5lc3RlZEluaXRpYWxpemF0aW9uQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgaW50IEdlbmVyYXRlUmVnaXN0cmF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIENvbnRleHQqIGNvbnRleHRfOwotICBDbGFzc05hbWVS
ZXNvbHZlciogbmFtZV9yZXNvbHZlcl87Ci0gIHN0cmluZyBzY29wZV87Ci0KLSBwcml2YXRlOgot
ICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoSW1tdXRhYmxlRXh0ZW5zaW9uR2Vu
ZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29t
cGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xl
Ci0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX0VYVEVOU0lPTl9IX18K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZXh0ZW5z
aW9uX2xpdGUuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2V4dGVu
c2lvbl9saXRlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzI2MWJhYzJmMmZm
NzBiZDcxNmM4OTc5OGY2YTZhY2IwOWNkMDg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
ZXh0ZW5zaW9uX2xpdGUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2V4dGVuc2lvbl9saXRlLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2NvbnRleHQuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2RvY19jb21tZW50Lmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9uYW1lX3Jlc29sdmVyLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvc3RydXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1JbW11dGFi
bGVFeHRlbnNpb25MaXRlR2VuZXJhdG9yOjpJbW11dGFibGVFeHRlbnNpb25MaXRlR2VuZXJhdG9y
KAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgQ29udGV4dCogY29udGV4
dCkKLSAgOiBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSwgY29udGV4dF8oY29udGV4dCksCi0gICAg
bmFtZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpIHsKLSAgaWYgKGRlc2Ny
aXB0b3JfLT5leHRlbnNpb25fc2NvcGUoKSAhPSBOVUxMKSB7Ci0gICAgc2NvcGVfID0gbmFtZV9y
ZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZSgKLSAgICAgICAgZGVzY3JpcHRvcl8tPmV4
dGVuc2lvbl9zY29wZSgpKTsKLSAgfSBlbHNlIHsKLSAgICBzY29wZV8gPSBuYW1lX3Jlc29sdmVy
Xy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5maWxlKCkpOwotICB9Ci19Ci0K
LUltbXV0YWJsZUV4dGVuc2lvbkxpdGVHZW5lcmF0b3I6On5JbW11dGFibGVFeHRlbnNpb25MaXRl
R2VuZXJhdG9yKCkge30KLQotdm9pZCBJbW11dGFibGVFeHRlbnNpb25MaXRlR2VuZXJhdG9yOjpH
ZW5lcmF0ZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZh
cnM7Ci0gIGNvbnN0IGJvb2wga1VzZUltbXV0YWJsZU5hbWVzID0gdHJ1ZTsKLSAgSW5pdFRlbXBs
YXRlVmFycyhkZXNjcmlwdG9yXywgc2NvcGVfLCBrVXNlSW1tdXRhYmxlTmFtZXMsIG5hbWVfcmVz
b2x2ZXJfLAotICAgICAgICAgICAgICAgICAgICZ2YXJzKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
cywKLSAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFsIGludCAkY29uc3RhbnRfbmFtZSQgPSAkbnVt
YmVyJDtcbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgaWYgKGRlc2NyaXB0b3JfLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgIHZhcnMsCi0gICAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFsXG4iCi0gICAg
ICAgICIgIGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxpdGUuR2VuZXJhdGVk
RXh0ZW5zaW9uPFxuIgotICAgICAgICAiICAgICRjb250YWluaW5nX3R5cGUkLFxuIgotICAgICAg
ICAiICAgICR0eXBlJD4gJG5hbWUkID0gY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNz
YWdlTGl0ZVxuIgotICAgICAgICAiICAgICAgICAubmV3UmVwZWF0ZWRHZW5lcmF0ZWRFeHRlbnNp
b24oXG4iCi0gICAgICAgICIgICAgICAkY29udGFpbmluZ190eXBlJC5nZXREZWZhdWx0SW5zdGFu
Y2UoKSxcbiIKLSAgICAgICAgIiAgICAgICRwcm90b3R5cGUkLFxuIgotICAgICAgICAiICAgICAg
JGVudW1fbWFwJCxcbiIKLSAgICAgICAgIiAgICAgICRudW1iZXIkLFxuIgotICAgICAgICAiICAg
ICAgY29tLmdvb2dsZS5wcm90b2J1Zi5XaXJlRm9ybWF0LkZpZWxkVHlwZS4kdHlwZV9jb25zdGFu
dCQsXG4iCi0gICAgICAgICIgICAgICAkcGFja2VkJCxcbiIKLSAgICAgICAgIiAgICAgICRzaW5n
dWxhcl90eXBlJC5jbGFzcyk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICAgdmFycywKLSAgICAgICAgInB1YmxpYyBzdGF0aWMgZmluYWxcbiIKLSAgICAgICAg
IiAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5HZW5lcmF0ZWRFeHRl
bnNpb248XG4iCi0gICAgICAgICIgICAgJGNvbnRhaW5pbmdfdHlwZSQsXG4iCi0gICAgICAgICIg
ICAgJHR5cGUkPiAkbmFtZSQgPSBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VM
aXRlXG4iCi0gICAgICAgICIgICAgICAgIC5uZXdTaW5ndWxhckdlbmVyYXRlZEV4dGVuc2lvbihc
biIKLSAgICAgICAgIiAgICAgICRjb250YWluaW5nX3R5cGUkLmdldERlZmF1bHRJbnN0YW5jZSgp
LFxuIgotICAgICAgICAiICAgICAgJGRlZmF1bHQkLFxuIgotICAgICAgICAiICAgICAgJHByb3Rv
dHlwZSQsXG4iCi0gICAgICAgICIgICAgICAkZW51bV9tYXAkLFxuIgotICAgICAgICAiICAgICAg
JG51bWJlciQsXG4iCi0gICAgICAgICIgICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLldpcmVGb3Jt
YXQuRmllbGRUeXBlLiR0eXBlX2NvbnN0YW50JCxcbiIKLSAgICAgICAgIiAgICAgICRzaW5ndWxh
cl90eXBlJC5jbGFzcyk7XG4iKTsKLSAgfQotfQotCi1pbnQgSW1tdXRhYmxlRXh0ZW5zaW9uTGl0
ZUdlbmVyYXRvcjo6R2VuZXJhdGVOb25OZXN0ZWRJbml0aWFsaXphdGlvbkNvZGUoCi0gICAgaW86
OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBJbW11dGFibGVFeHRl
bnNpb25MaXRlR2VuZXJhdG9yOjpHZW5lcmF0ZVJlZ2lzdHJhdGlvbkNvZGUoCi0gICAgaW86OlBy
aW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInJlZ2lzdHJ5LmFkZCgk
c2NvcGUkLiRuYW1lJCk7XG4iLAotICAgICJzY29wZSIsIHNjb3BlXywKLSAgICAibmFtZSIsIFVu
ZGVyc2NvcmVzVG9DYW1lbENhc2UoZGVzY3JpcHRvcl8pKTsKLSAgcmV0dXJuIDc7Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9leHRlbnNpb25fbGl0ZS5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9leHRlbnNpb25fbGl0ZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2Q0OWJkYTIwZmU4NjliN2ZhYWRjNjUwNmIwMmIyN2Uz
YzBhNzkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZXh0ZW5zaW9uX2xpdGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX0VYVEVOU0lPTl9M
SVRFX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9FWFRFTlNJT05f
TElURV9IX18KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2phdmEvamF2YV9leHRlbnNpb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBq
YXZhIHsKLQotLy8gR2VuZXJhdGVzIGNvZGUgZm9yIGEgbGl0ZSBleHRlbnNpb24sIHdoaWNoIG1h
eSBiZSB3aXRoaW4gdGhlIHNjb3BlIG9mIHNvbWUKLS8vIG1lc3NhZ2Ugb3IgbWF5IGJlIGF0IGZp
bGUgc2NvcGUuICBUaGlzIGlzIG11Y2ggc2ltcGxlciB0aGFuIEZpZWxkR2VuZXJhdG9yCi0vLyBz
aW5jZSBleHRlbnNpb25zIGFyZSBqdXN0IHNpbXBsZSBpZGVudGlmaWVycyB3aXRoIGludGVyZXN0
aW5nIHR5cGVzLgotY2xhc3MgSW1tdXRhYmxlRXh0ZW5zaW9uTGl0ZUdlbmVyYXRvciA6IHB1Ymxp
YyBFeHRlbnNpb25HZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgSW1tdXRhYmxlRXh0
ZW5zaW9uTGl0ZUdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29udGV4
dCk7Ci0gIHZpcnR1YWwgfkltbXV0YWJsZUV4dGVuc2lvbkxpdGVHZW5lcmF0b3IoKTsKLQotICB2
aXJ0dWFsIHZvaWQgR2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIC8vIFJldHVy
bnMgYW4gZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgcHJpbnRlZCBjb2RlIHdp
bGwgY29tcGlsZSB0bwotICB2aXJ0dWFsIGludCBHZW5lcmF0ZU5vbk5lc3RlZEluaXRpYWxpemF0
aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8gUmV0dXJucyBhbiBlc3RpbWF0
ZSBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBwcmludGVkIGNvZGUgd2lsbCBjb21waWxlIHRv
Ci0gIHZpcnR1YWwgaW50IEdlbmVyYXRlUmVnaXN0cmF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcik7Ci0KLSBwcml2YXRlOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3Jf
OwotICBDb250ZXh0KiBjb250ZXh0XzsKLSAgQ2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2
ZXJfOwotICBzdHJpbmcgc2NvcGVfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVD
VE9SUyhJbW11dGFibGVFeHRlbnNpb25MaXRlR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVz
cGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JV
Rl9DT01QSUxFUl9KQVZBX0VYVEVOU0lPTl9MSVRFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9maWVsZC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDNjN2JjNWM0Njc0ZmJmYzZkZmIzYTY2NTk0ODg2Y2I4YjNiOGI3OTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmEvamF2YV9maWVsZC5jYworKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25A
Z29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29s
IEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBv
dGhlcnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2Zp
ZWxkLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvamF2YS9qYXZhX2NvbnRleHQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvamF2YS9qYXZhX2VudW1fZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX2VudW1fZmllbGRfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9sYXp5X21lc3NhZ2VfZmllbGRfbGl0
ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWFwX2Zp
ZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tYXBf
ZmllbGRfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfbWVzc2FnZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfbWVzc2FnZV9maWVsZF9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmEvamF2YV9wcmltaXRpdmVfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3ByaW1pdGl2ZV9maWVsZF9saXRlLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zdHJpbmdfZmllbGQuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3N0cmluZ19maWVs
ZF9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmg+Ci0KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1l
c3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhIHsK
LQotbmFtZXNwYWNlIHsKLQotSW1tdXRhYmxlRmllbGRHZW5lcmF0b3IqIE1ha2VJbW11dGFibGVH
ZW5lcmF0b3IoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IG1lc3NhZ2VC
aXRJbmRleCwgaW50IGJ1aWxkZXJCaXRJbmRleCwKLSAgICBDb250ZXh0KiBjb250ZXh0KSB7Ci0g
IGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgIHN3aXRjaCAoR2V0SmF2YVR5cGUoZmll
bGQpKSB7Ci0gICAgICBjYXNlIEpBVkFUWVBFX01FU1NBR0U6Ci0gICAgICAgIGlmIChJc01hcEVu
dHJ5KGZpZWxkLT5tZXNzYWdlX3R5cGUoKSkpIHsKLSAgICAgICAgICByZXR1cm4gbmV3IEltbXV0
YWJsZU1hcEZpZWxkR2VuZXJhdG9yKAotICAgICAgICAgICAgICBmaWVsZCwgbWVzc2FnZUJpdElu
ZGV4LCBidWlsZGVyQml0SW5kZXgsIGNvbnRleHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIGlmIChJc0xhenkoZmllbGQsIGNvbnRleHQtPkVuZm9yY2VMaXRlKCkpKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IFJlcGVhdGVkSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICBmaWVsZCwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5k
ZXgsIGNvbnRleHQpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3
IFJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
IGZpZWxkLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0gICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICBjYXNlIEpBVkFUWVBFX0VOVU06Ci0gICAgICAgIHJl
dHVybiBuZXcgUmVwZWF0ZWRJbW11dGFibGVFbnVtRmllbGRHZW5lcmF0b3IoCi0gICAgICAgICAg
ICBmaWVsZCwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsIGNvbnRleHQpOwotICAg
ICAgY2FzZSBKQVZBVFlQRV9TVFJJTkc6Ci0gICAgICAgIHJldHVybiBuZXcgUmVwZWF0ZWRJbW11
dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcigKLSAgICAgICAgICAgIGZpZWxkLCBtZXNzYWdlQml0
SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gbmV3IFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoCi0g
ICAgICAgICAgICBmaWVsZCwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsIGNvbnRl
eHQpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoZmllbGQtPmNvbnRhaW5pbmdfb25lb2Yo
KSkgewotICAgICAgc3dpdGNoIChHZXRKYXZhVHlwZShmaWVsZCkpIHsKLSAgICAgICAgY2FzZSBK
QVZBVFlQRV9NRVNTQUdFOgotICAgICAgICAgIGlmIChJc0xhenkoZmllbGQsIGNvbnRleHQtPkVu
Zm9yY2VMaXRlKCkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJsZUxhenlNZXNz
YWdlT25lb2ZGaWVsZEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBmaWVsZCwgbWVzc2FnZUJp
dEluZGV4LCBidWlsZGVyQml0SW5kZXgsIGNvbnRleHQpOwotICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9y
KAotICAgICAgICAgICAgICAgIGZpZWxkLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRl
eCwgY29udGV4dCk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIEpBVkFUWVBFX0VOVU06Ci0g
ICAgICAgICAgcmV0dXJuIG5ldyBJbW11dGFibGVFbnVtT25lb2ZGaWVsZEdlbmVyYXRvcigKLSAg
ICAgICAgICAgICAgZmllbGQsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4LCBjb250
ZXh0KTsKLSAgICAgICAgY2FzZSBKQVZBVFlQRV9TVFJJTkc6Ci0gICAgICAgICAgcmV0dXJuIG5l
dyBJbW11dGFibGVTdHJpbmdPbmVvZkZpZWxkR2VuZXJhdG9yKAotICAgICAgICAgICAgICBmaWVs
ZCwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsIGNvbnRleHQpOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgIHJldHVybiBuZXcgSW1tdXRhYmxlUHJpbWl0aXZlT25lb2ZGaWVs
ZEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgZmllbGQsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRl
ckJpdEluZGV4LCBjb250ZXh0KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgc3dpdGNo
IChHZXRKYXZhVHlwZShmaWVsZCkpIHsKLSAgICAgICAgY2FzZSBKQVZBVFlQRV9NRVNTQUdFOgot
ICAgICAgICAgIGlmIChJc0xhenkoZmllbGQsIGNvbnRleHQtPkVuZm9yY2VMaXRlKCkpKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRHZW5lcmF0b3Io
Ci0gICAgICAgICAgICAgICAgZmllbGQsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4
LCBjb250ZXh0KTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBJ
bW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgZmllbGQsIG1l
c3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4LCBjb250ZXh0KTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgSkFWQVRZUEVfRU5VTToKLSAgICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJs
ZUVudW1GaWVsZEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgZmllbGQsIG1lc3NhZ2VCaXRJbmRl
eCwgYnVpbGRlckJpdEluZGV4LCBjb250ZXh0KTsKLSAgICAgICAgY2FzZSBKQVZBVFlQRV9TVFJJ
Tkc6Ci0gICAgICAgICAgcmV0dXJuIG5ldyBJbW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcigK
LSAgICAgICAgICAgICAgZmllbGQsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4LCBj
b250ZXh0KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJs
ZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKAotICAgICAgICAgICAgICBmaWVsZCwgbWVzc2FnZUJp
dEluZGV4LCBidWlsZGVyQml0SW5kZXgsIGNvbnRleHQpOwotICAgICAgfQotICAgIH0KLSAgfQot
fQotCi1JbW11dGFibGVGaWVsZExpdGVHZW5lcmF0b3IqIE1ha2VJbW11dGFibGVMaXRlR2VuZXJh
dG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGludCBtZXNzYWdlQml0SW5k
ZXgsIGludCBidWlsZGVyQml0SW5kZXgsCi0gICAgQ29udGV4dCogY29udGV4dCkgewotICBpZiAo
ZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICBzd2l0Y2ggKEdldEphdmFUeXBlKGZpZWxkKSkg
ewotICAgICAgY2FzZSBKQVZBVFlQRV9NRVNTQUdFOgotICAgICAgICBpZiAoSXNNYXBFbnRyeShm
aWVsZC0+bWVzc2FnZV90eXBlKCkpKSB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBJbW11dGFibGVN
YXBGaWVsZExpdGVHZW5lcmF0b3IoCi0gICAgICAgICAgICAgIGZpZWxkLCBtZXNzYWdlQml0SW5k
ZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgaWYgKElzTGF6eShmaWVsZCwgY29udGV4dC0+RW5mb3JjZUxpdGUoKSkpIHsKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgUmVwZWF0ZWRJbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkTGl0ZUdlbmVy
YXRvcigKLSAgICAgICAgICAgICAgICBmaWVsZCwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0
SW5kZXgsIGNvbnRleHQpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IFJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcigKLSAgICAgICAg
ICAgICAgICBmaWVsZCwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsIGNvbnRleHQp
OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgY2FzZSBKQVZBVFlQRV9FTlVNOgotICAg
ICAgICByZXR1cm4gbmV3IFJlcGVhdGVkSW1tdXRhYmxlRW51bUZpZWxkTGl0ZUdlbmVyYXRvcigK
LSAgICAgICAgICAgIGZpZWxkLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29u
dGV4dCk7Ci0gICAgICBjYXNlIEpBVkFUWVBFX1NUUklORzoKLSAgICAgICAgcmV0dXJuIG5ldyBS
ZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcigKLSAgICAgICAgICAgIGZp
ZWxkLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gbmV3IFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmll
bGRMaXRlR2VuZXJhdG9yKAotICAgICAgICAgICAgZmllbGQsIG1lc3NhZ2VCaXRJbmRleCwgYnVp
bGRlckJpdEluZGV4LCBjb250ZXh0KTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGZpZWxk
LT5jb250YWluaW5nX29uZW9mKCkpIHsKLSAgICAgIHN3aXRjaCAoR2V0SmF2YVR5cGUoZmllbGQp
KSB7Ci0gICAgICAgIGNhc2UgSkFWQVRZUEVfTUVTU0FHRToKLSAgICAgICAgICBpZiAoSXNMYXp5
KGZpZWxkLCBjb250ZXh0LT5FbmZvcmNlTGl0ZSgpKSkgewotICAgICAgICAgICAgcmV0dXJuIG5l
dyBJbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yKAotICAgICAgICAg
ICAgICAgIGZpZWxkLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgSW1tdXRhYmxlTWVz
c2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIGZpZWxkLCBtZXNz
YWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0gICAgICAgICAgfQotICAg
ICAgICBjYXNlIEpBVkFUWVBFX0VOVU06Ci0gICAgICAgICAgcmV0dXJuIG5ldyBJbW11dGFibGVF
bnVtT25lb2ZGaWVsZExpdGVHZW5lcmF0b3IoCi0gICAgICAgICAgICAgIGZpZWxkLCBtZXNzYWdl
Qml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0gICAgICAgIGNhc2UgSkFWQVRZ
UEVfU1RSSU5HOgotICAgICAgICAgIHJldHVybiBuZXcgSW1tdXRhYmxlU3RyaW5nT25lb2ZGaWVs
ZExpdGVHZW5lcmF0b3IoCi0gICAgICAgICAgICAgIGZpZWxkLCBtZXNzYWdlQml0SW5kZXgsIGJ1
aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmV0
dXJuIG5ldyBJbW11dGFibGVQcmltaXRpdmVPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcigKLSAgICAg
ICAgICAgICAgZmllbGQsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4LCBjb250ZXh0
KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgc3dpdGNoIChHZXRKYXZhVHlwZShmaWVs
ZCkpIHsKLSAgICAgICAgY2FzZSBKQVZBVFlQRV9NRVNTQUdFOgotICAgICAgICAgIGlmIChJc0xh
enkoZmllbGQsIGNvbnRleHQtPkVuZm9yY2VMaXRlKCkpKSB7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yKAotICAgICAgICAgICAg
ICAgIGZpZWxkLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0g
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgSW1tdXRhYmxlTWVzc2Fn
ZUZpZWxkTGl0ZUdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBmaWVsZCwgbWVzc2FnZUJpdElu
ZGV4LCBidWlsZGVyQml0SW5kZXgsIGNvbnRleHQpOwotICAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBKQVZBVFlQRV9FTlVNOgotICAgICAgICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRW51bUZpZWxk
TGl0ZUdlbmVyYXRvcigKLSAgICAgICAgICAgICAgZmllbGQsIG1lc3NhZ2VCaXRJbmRleCwgYnVp
bGRlckJpdEluZGV4LCBjb250ZXh0KTsKLSAgICAgICAgY2FzZSBKQVZBVFlQRV9TVFJJTkc6Ci0g
ICAgICAgICAgcmV0dXJuIG5ldyBJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3IoCi0g
ICAgICAgICAgICAgIGZpZWxkLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29u
dGV4dCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmV0dXJuIG5ldyBJbW11dGFibGVQ
cmltaXRpdmVGaWVsZExpdGVHZW5lcmF0b3IoCi0gICAgICAgICAgICAgIGZpZWxkLCBtZXNzYWdl
Qml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIFJlcG9ydFVuZXhwZWN0ZWRQYWNrZWRGaWVsZHND
YWxsKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIFJlYWNoaW5nIGhlcmUgaW5kaWNhdGVz
IGEgYnVnLiBDYXNlcyBhcmU6Ci0gIC8vICAgLSBUaGlzIEZpZWxkR2VuZXJhdG9yIHNob3VsZCBz
dXBwb3J0IHBhY2tpbmcsCi0gIC8vICAgICBidXQgdGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJy
aWRkZW4uCi0gIC8vICAgLSBUaGlzIEZpZWxkR2VuZXJhdG9yIGRvZXNuJ3Qgc3VwcG9ydCBwYWNr
aW5nLCBhbmQgdGhpcyBtZXRob2QKLSAgLy8gICAgIHNob3VsZCBuZXZlciBoYXZlIGJlZW4gY2Fs
bGVkLgotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiR2VuZXJhdGVQYXJzaW5nQ29kZUZyb21QYWNr
ZWQoKSAiCi0gICAgICAgICAgICAgPDwgImNhbGxlZCBvbiBmaWVsZCBnZW5lcmF0b3IgdGhhdCBk
b2VzIG5vdCBzdXBwb3J0IHBhY2tpbmcuIjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLUltbXV0
YWJsZUZpZWxkR2VuZXJhdG9yOjp+SW1tdXRhYmxlRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lk
IEltbXV0YWJsZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0NvZGVGcm9tUGFja2Vk
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIFJlcG9ydFVuZXhwZWN0ZWRQYWNrZWRG
aWVsZHNDYWxsKHByaW50ZXIpOwotfQotCi1JbW11dGFibGVGaWVsZExpdGVHZW5lcmF0b3I6On5J
bW11dGFibGVGaWVsZExpdGVHZW5lcmF0b3IoKSB7fQotCi12b2lkIEltbXV0YWJsZUZpZWxkTGl0
ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdDb2RlRnJvbVBhY2tlZChpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3QgewotICBSZXBvcnRVbmV4cGVjdGVkUGFja2VkRmllbGRzQ2FsbChwcmlu
dGVyKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotCi10ZW1wbGF0ZSA8PgotRmllbGRHZW5lcmF0b3JN
YXA8SW1tdXRhYmxlRmllbGRHZW5lcmF0b3I+OjpGaWVsZEdlbmVyYXRvck1hcCgKLSAgICBjb25z
dCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBDb250ZXh0KiBjb250ZXh0KQotICAgIDogZGVzY3Jp
cHRvcl8oZGVzY3JpcHRvciksCi0gICAgICBmaWVsZF9nZW5lcmF0b3JzXyhuZXcgZ29vZ2xlOjpw
cm90b2J1Zjo6c2NvcGVkX3B0cjwKLSAgICAgICAgICBJbW11dGFibGVGaWVsZEdlbmVyYXRvcj5b
ZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKV0pIHsKLQotICAvLyBDb25zdHJ1Y3QgYWxsIHRoZSBG
aWVsZEdlbmVyYXRvcnMgYW5kIGFzc2lnbiB0aGVtIGJpdCBpbmRpY2VzIGZvciB0aGVpcgotICAv
LyBiaXQgZmllbGRzLgotICBpbnQgbWVzc2FnZUJpdEluZGV4ID0gMDsKLSAgaW50IGJ1aWxkZXJC
aXRJbmRleCA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+ZmllbGRfY291
bnQoKTsgaSsrKSB7Ci0gICAgSW1tdXRhYmxlRmllbGRHZW5lcmF0b3IqIGdlbmVyYXRvciA9IE1h
a2VJbW11dGFibGVHZW5lcmF0b3IoCi0gICAgICAgIGRlc2NyaXB0b3ItPmZpZWxkKGkpLCBtZXNz
YWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCk7Ci0gICAgZmllbGRfZ2VuZXJh
dG9yc19baV0ucmVzZXQoZ2VuZXJhdG9yKTsKLSAgICBtZXNzYWdlQml0SW5kZXggKz0gZ2VuZXJh
dG9yLT5HZXROdW1CaXRzRm9yTWVzc2FnZSgpOwotICAgIGJ1aWxkZXJCaXRJbmRleCArPSBnZW5l
cmF0b3ItPkdldE51bUJpdHNGb3JCdWlsZGVyKCk7Ci0gIH0KLX0KLQotdGVtcGxhdGU8PgotRmll
bGRHZW5lcmF0b3JNYXA8SW1tdXRhYmxlRmllbGRHZW5lcmF0b3I+Ojp+RmllbGRHZW5lcmF0b3JN
YXAoKSB7fQotCi10ZW1wbGF0ZSA8PgotRmllbGRHZW5lcmF0b3JNYXA8SW1tdXRhYmxlRmllbGRM
aXRlR2VuZXJhdG9yPjo6RmllbGRHZW5lcmF0b3JNYXAoCi0gICAgY29uc3QgRGVzY3JpcHRvciog
ZGVzY3JpcHRvciwgQ29udGV4dCogY29udGV4dCkKLSAgICA6IGRlc2NyaXB0b3JfKGRlc2NyaXB0
b3IpLAotICAgICAgZmllbGRfZ2VuZXJhdG9yc18obmV3IGdvb2dsZTo6cHJvdG9idWY6OnNjb3Bl
ZF9wdHI8Ci0gICAgICAgICAgSW1tdXRhYmxlRmllbGRMaXRlR2VuZXJhdG9yPltkZXNjcmlwdG9y
LT5maWVsZF9jb3VudCgpXSkgewotICAvLyBDb25zdHJ1Y3QgYWxsIHRoZSBGaWVsZEdlbmVyYXRv
cnMgYW5kIGFzc2lnbiB0aGVtIGJpdCBpbmRpY2VzIGZvciB0aGVpcgotICAvLyBiaXQgZmllbGRz
LgotICBpbnQgbWVzc2FnZUJpdEluZGV4ID0gMDsKLSAgaW50IGJ1aWxkZXJCaXRJbmRleCA9IDA7
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKTsgaSsrKSB7
Ci0gICAgSW1tdXRhYmxlRmllbGRMaXRlR2VuZXJhdG9yKiBnZW5lcmF0b3IgPSBNYWtlSW1tdXRh
YmxlTGl0ZUdlbmVyYXRvcigKLSAgICAgICAgZGVzY3JpcHRvci0+ZmllbGQoaSksIG1lc3NhZ2VC
aXRJbmRleCwgYnVpbGRlckJpdEluZGV4LCBjb250ZXh0KTsKLSAgICBmaWVsZF9nZW5lcmF0b3Jz
X1tpXS5yZXNldChnZW5lcmF0b3IpOwotICAgIG1lc3NhZ2VCaXRJbmRleCArPSBnZW5lcmF0b3It
PkdldE51bUJpdHNGb3JNZXNzYWdlKCk7Ci0gICAgYnVpbGRlckJpdEluZGV4ICs9IGdlbmVyYXRv
ci0+R2V0TnVtQml0c0ZvckJ1aWxkZXIoKTsKLSAgfQotfQotCi10ZW1wbGF0ZTw+Ci1GaWVsZEdl
bmVyYXRvck1hcDxJbW11dGFibGVGaWVsZExpdGVHZW5lcmF0b3I+Ojp+RmllbGRHZW5lcmF0b3JN
YXAoKSB7fQotCi0KLXZvaWQgU2V0Q29tbW9uRmllbGRWYXJpYWJsZXMoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
aWVsZEdlbmVyYXRvckluZm8qIGluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
cDxzdHJpbmcsIHN0cmluZz4qIHZhcmlhYmxlcykgewotICAoKnZhcmlhYmxlcylbImZpZWxkX25h
bWUiXSA9IGRlc2NyaXB0b3ItPm5hbWUoKTsKLSAgKCp2YXJpYWJsZXMpWyJuYW1lIl0gPSBpbmZv
LT5uYW1lOwotICAoKnZhcmlhYmxlcylbImNhcGl0YWxpemVkX25hbWUiXSA9IGluZm8tPmNhcGl0
YWxpemVkX25hbWU7Ci0gICgqdmFyaWFibGVzKVsiZGlzYW1iaWd1YXRlZF9yZWFzb24iXSA9IGlu
Zm8tPmRpc2FtYmlndWF0ZWRfcmVhc29uOwotICAoKnZhcmlhYmxlcylbImNvbnN0YW50X25hbWUi
XSA9IEZpZWxkQ29uc3RhbnROYW1lKGRlc2NyaXB0b3IpOwotICAoKnZhcmlhYmxlcylbIm51bWJl
ciJdID0gU2ltcGxlSXRvYShkZXNjcmlwdG9yLT5udW1iZXIoKSk7Ci19Ci0KLXZvaWQgU2V0Q29t
bW9uT25lb2ZWYXJpYWJsZXMoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPbmVvZkdlbmVyYXRvckluZm8qIGluZm8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0cmluZz4qIHZhcmlh
YmxlcykgewotICAoKnZhcmlhYmxlcylbIm9uZW9mX25hbWUiXSA9IGluZm8tPm5hbWU7Ci0gICgq
dmFyaWFibGVzKVsib25lb2ZfY2FwaXRhbGl6ZWRfbmFtZSJdID0gaW5mby0+Y2FwaXRhbGl6ZWRf
bmFtZTsKLSAgKCp2YXJpYWJsZXMpWyJvbmVvZl9pbmRleCJdID0KLSAgICAgIFNpbXBsZUl0b2Eo
ZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVvZigpLT5pbmRleCgpKTsKLSAgKCp2YXJpYWJsZXMp
WyJzZXRfb25lb2ZfY2FzZV9tZXNzYWdlIl0gPSBpbmZvLT5uYW1lICsKLSAgICAgICJDYXNlXyA9
ICIgKyBTaW1wbGVJdG9hKGRlc2NyaXB0b3ItPm51bWJlcigpKTsKLSAgKCp2YXJpYWJsZXMpWyJj
bGVhcl9vbmVvZl9jYXNlX21lc3NhZ2UiXSA9IGluZm8tPm5hbWUgKwotICAgICAgIkNhc2VfID0g
MCI7Ci0gICgqdmFyaWFibGVzKVsiaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSJdID0gaW5mby0+bmFt
ZSArCi0gICAgICAiQ2FzZV8gPT0gIiArIFNpbXBsZUl0b2EoZGVzY3JpcHRvci0+bnVtYmVyKCkp
OwotfQotCi12b2lkIFByaW50RXh0cmFGaWVsZEluZm8oY29uc3QgbWFwPHN0cmluZywgc3RyaW5n
PiYgdmFyaWFibGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmlu
dGVyKSB7Ci0gIGNvbnN0IG1hcDxzdHJpbmcsIHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0K
LSAgICAgIHZhcmlhYmxlcy5maW5kKCJkaXNhbWJpZ3VhdGVkX3JlYXNvbiIpOwotICBpZiAoaXQg
IT0gdmFyaWFibGVzLmVuZCgpICYmICFpdC0+c2Vjb25kLmVtcHR5KCkpIHsKLSAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICAgdmFyaWFibGVzLAotICAgICAgICAiLy8gQW4gYWx0ZXJuYXRpdmUg
bmFtZSBpcyB1c2VkIGZvciBmaWVsZCBcIiRmaWVsZF9uYW1lJFwiIGJlY2F1c2U6XG4iCi0gICAg
ICAgICIvLyAgICAgJGRpc2FtYmlndWF0ZWRfcmVhc29uJFxuIik7Ci0gIH0KLX0KLQotfSAgLy8g
bmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2ZpZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2ZpZWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRkZDRmNTdmNmQwMTQ1OTEwZmE3NmFiMTYxNjczMWY1MjE5YmU1OGYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9maWVsZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29n
bGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVm
ZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVy
cy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9GSUVMRF9IX18KLSNk
ZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfRklFTERfSF9fCi0KLSNpbmNsdWRl
IDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNlbmRpZgotI2luY2x1ZGUg
PHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLSAgbmFtZXNwYWNlIGNvbXBpbGVyIHsKLSAgICBuYW1lc3BhY2UgamF2YSB7
Ci0gICAgICBjbGFzcyBDb250ZXh0OyAgICAgICAgICAgICAgICAvLyBjb250ZXh0LmgKLSAgICAg
IGNsYXNzIENsYXNzTmFtZVJlc29sdmVyOyAgICAgIC8vIG5hbWVfcmVzb2x2ZXIuaAotICAgIH0K
LSAgfQotICBuYW1lc3BhY2UgaW8gewotICAgIGNsYXNzIFByaW50ZXI7ICAgICAgICAgICAgICAg
ICAgLy8gcHJpbnRlci5oCi0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFj
ZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLWNsYXNzIEltbXV0YWJsZUZpZWxkR2Vu
ZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIEltbXV0YWJsZUZpZWxkR2VuZXJhdG9yKCkge30KLSAgdmly
dHVhbCB+SW1tdXRhYmxlRmllbGRHZW5lcmF0b3IoKTsKLQotICB2aXJ0dWFsIGludCBHZXROdW1C
aXRzRm9yTWVzc2FnZSgpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCBpbnQgR2V0TnVtQml0c0ZvckJ1
aWxkZXIoKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZUludGVyZmFjZU1lbWJl
cnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIEdlbmVy
YXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZv
aWQgR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAw
OwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlQnVpbGRlckNsZWFy
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgR2Vu
ZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotICB2aXJ0
dWFsIHZvaWQgR2VuZXJhdGVCdWlsZGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
ID0gMDsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGVGcm9t
UGFja2VkKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdmlydHVhbCB2b2lkIEdlbmVy
YXRlUGFyc2luZ0RvbmVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCA9IDA7Ci0gIHZp
cnR1YWwgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVG
aWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpCi0gICAg
ICBjb25zdCA9IDA7Ci0KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVIYXNoQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotCi0gIHZpcnR1YWwgc3RyaW5nIEdl
dEJveGVkVHlwZSgpIGNvbnN0ID0gMDsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19F
VklMX0NPTlNUUlVDVE9SUyhJbW11dGFibGVGaWVsZEdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBJ
bW11dGFibGVGaWVsZExpdGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgSW1tdXRhYmxlRmllbGRM
aXRlR2VuZXJhdG9yKCkge30KLSAgdmlydHVhbCB+SW1tdXRhYmxlRmllbGRMaXRlR2VuZXJhdG9y
KCk7Ci0KLSAgdmlydHVhbCBpbnQgR2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25zdCA9IDA7Ci0g
IHZpcnR1YWwgaW50IEdldE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3QgPSAwOwotICB2aXJ0dWFs
IHZvaWQgR2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlSW5p
dGlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCA9IDA7Ci0gIHZpcnR1
YWwgdm9pZCBHZW5lcmF0ZVZpc2l0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAw
OwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVEeW5hbWljTWV0aG9kTWFrZUltbXV0YWJsZUNvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpCi0gICAgICBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBH
ZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCA9IDA7Ci0gIHZp
cnR1YWwgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2RlRnJvbVBhY2tlZChpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVBhcnNpbmdEb25lQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVTZXJp
YWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotICB2aXJ0dWFs
IHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlRmllbGRCdWlsZGVySW5pdGlhbGl6YXRp
b25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKQotICAgICAgY29uc3QgPSAwOwotCi0gIHZpcnR1
YWwgdm9pZCBHZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0ID0g
MDsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0ID0gMDsKLQotICB2aXJ0dWFsIHN0cmluZyBHZXRCb3hlZFR5cGUoKSBjb25zdCA9IDA7
Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoSW1tdXRh
YmxlRmllbGRMaXRlR2VuZXJhdG9yKTsKLX07Ci0KLQotLy8gQ29udmVuaWVuY2UgY2xhc3Mgd2hp
Y2ggY29uc3RydWN0cyBGaWVsZEdlbmVyYXRvcnMgZm9yIGEgRGVzY3JpcHRvci4KLXRlbXBsYXRl
PHR5cGVuYW1lIEZpZWxkR2VuZXJhdG9yVHlwZT4KLWNsYXNzIEZpZWxkR2VuZXJhdG9yTWFwIHsK
LSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEZpZWxkR2VuZXJhdG9yTWFwKGNvbnN0IERlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRl
eHQpOwotICB+RmllbGRHZW5lcmF0b3JNYXAoKTsKLQotICBjb25zdCBGaWVsZEdlbmVyYXRvclR5
cGUmIGdldChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLQotIHByaXZhdGU6
Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBDb250ZXh0KiBjb250ZXh0XzsK
LSAgQ2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXJfOwotICBnb29nbGU6OnByb3RvYnVm
OjpzY29wZWRfYXJyYXk8Z29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxGaWVsZEdlbmVyYXRv
clR5cGU+ID4gZmllbGRfZ2VuZXJhdG9yc187Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09O
U1RSVUNUT1JTKEZpZWxkR2VuZXJhdG9yTWFwKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZp
ZWxkR2VuZXJhdG9yVHlwZT4KLWlubGluZSBjb25zdCBGaWVsZEdlbmVyYXRvclR5cGUmCi1GaWVs
ZEdlbmVyYXRvck1hcDxGaWVsZEdlbmVyYXRvclR5cGU+OjpnZXQoY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCkgY29uc3QgewotICBHT09HTEVfQ0hFQ0tfRVEoZmllbGQtPmNvbnRhaW5pbmdf
dHlwZSgpLCBkZXNjcmlwdG9yXyk7Ci0gIHJldHVybiAqZmllbGRfZ2VuZXJhdG9yc19bZmllbGQt
PmluZGV4KCldOwotfQotCi0vLyBJbnN0YW50aWF0ZSB0ZW1wbGF0ZSBmb3IgbXV0YWJsZSBhbmQg
aW1tdXRhYmxlIG1hcHMuCi10ZW1wbGF0ZTw+Ci1GaWVsZEdlbmVyYXRvck1hcDxJbW11dGFibGVG
aWVsZEdlbmVyYXRvcj46OgotRmllbGRHZW5lcmF0b3JNYXAoY29uc3QgRGVzY3JpcHRvciogZGVz
Y3JpcHRvciwKLSAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRleHQpOwotCi10ZW1wbGF0
ZTw+Ci1GaWVsZEdlbmVyYXRvck1hcDxJbW11dGFibGVGaWVsZEdlbmVyYXRvcj46On5GaWVsZEdl
bmVyYXRvck1hcCgpOwotCi0KLS8vIEZpZWxkIGluZm9ybWF0aW9uIHVzZWQgaW4gRmllbGRHZW5l
YXJ0b3JzLgotc3RydWN0IEZpZWxkR2VuZXJhdG9ySW5mbyB7Ci0gIHN0cmluZyBuYW1lOwotICBz
dHJpbmcgY2FwaXRhbGl6ZWRfbmFtZTsKLSAgc3RyaW5nIGRpc2FtYmlndWF0ZWRfcmVhc29uOwot
fTsKLQotLy8gT25lb2YgaW5mb3JtYXRpb24gdXNlZCBpbiBPbmVvZkZpZWxkR2VuZWFydG9ycy4K
LXN0cnVjdCBPbmVvZkdlbmVyYXRvckluZm8gewotICBzdHJpbmcgbmFtZTsKLSAgc3RyaW5nIGNh
cGl0YWxpemVkX25hbWU7Ci19OwotCi0vLyBTZXQgc29tZSBjb21tb24gdmFyaWFibGVzIHVzZWQg
aW4gdmFyaWFibGUgRmllbGRHZW5lcmF0b3JzLgotdm9pZCBTZXRDb21tb25GaWVsZFZhcmlhYmxl
cyhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZpZWxkR2VuZXJhdG9ySW5mbyogaW5mbywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFwPHN0cmluZywgc3RyaW5nPiogdmFyaWFibGVzKTsKLQotLy8gU2V0
IHNvbWUgY29tbW9uIG9uZW9mIHZhcmlhYmxlcyB1c2VkIGluIE9uZW9mRmllbGRHZW5lcmF0b3Jz
Lgotdm9pZCBTZXRDb21tb25PbmVvZlZhcmlhYmxlcyhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9uZW9mR2VuZXJh
dG9ySW5mbyogaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwPHN0cmluZywg
c3RyaW5nPiogdmFyaWFibGVzKTsKLQotLy8gUHJpbnQgdXNlZnVsIGNvbW1lbnRzIGJlZm9yZSBh
IGZpZWxkJ3MgYWNjZXNzb3JzLgotdm9pZCBQcmludEV4dHJhRmllbGRJbmZvKGNvbnN0IG1hcDxz
dHJpbmcsIHN0cmluZz4mIHZhcmlhYmxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6
UHJpbnRlciogcHJpbnRlcik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3Bh
Y2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2Ug
Z29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX0ZJRUxEX0hf
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9maWxl
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9maWxlLmNjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTNhYWU2YjZhYzAxYzgyZTNiMDhlNGUzNjE5OWQw
YjQ2ZWIwYmZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmlsZS5jYworKysgL2Rldi9u
dWxsCkBAIC0xLDYxNiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2Vk
IG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1h
d2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2ZpbGUuaD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYg
X1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRy
Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2NvbnRleHQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2VudW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX2VudW1fbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfZXh0ZW5zaW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3JfZmFjdG9yeS5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2VydmljZS5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2hhcmVkX2NvZGVfZ2VuZXJhdG9y
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNf
bWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0K
LW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21w
aWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBGaWVsZERl
c2NyaXB0b3JDb21wYXJlIHsKLSAgYm9vbCBvcGVyYXRvciAoKShjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGYxLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGYyKSB7Ci0gICAgaWYoZjEgPT0gTlVMTCkg
ewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZihmMiA9PSBOVUxMKSB7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGYxLT5mdWxsX25hbWUoKSA8IGYyLT5m
dWxsX25hbWUoKTsKLSAgfQotfTsKLQotdHlwZWRlZiBzdGQ6OnNldDxjb25zdCBGaWVsZERlc2Ny
aXB0b3IqLCBGaWVsZERlc2NyaXB0b3JDb21wYXJlPiBGaWVsZERlc2NyaXB0b3JTZXQ7Ci0KLS8v
IFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHRoZSBnaXZlbiBtZXNzYWdlIHRvIGNvbGxlY3QgZXh0ZW5z
aW9ucy4KLS8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgdGhlIGV4dGVuc2lvbnMgY2FuIGJlIHJlY29n
bml6ZWQuIFRoZSBleHRlbnNpb25zIHdpbGwgYmUKLS8vIGFwcGVuZGVkIGluIHRvIHRoZSBleHRl
bnNpb25zIHBhcmFtZXRlci4KLS8vIFJldHVybnMgZmFsc2Ugd2hlbiB0aGVyZSBhcmUgdW5rbm93
biBmaWVsZHMsIGluIHdoaWNoIGNhc2UgdGhlIGRhdGEgaW4gdGhlCi0vLyBleHRlbnNpb25zIG91
dHB1dCBwYXJhbWV0ZXIgaXMgbm90IHJlbGlhYmxlIGFuZCBzaG91bGQgYmUgZGlzY2FyZGVkLgot
Ym9vbCBDb2xsZWN0RXh0ZW5zaW9ucyhjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JTZXQqIGV4dGVuc2lvbnMpIHsKLSAgY29uc3Qg
UmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotCi0gIC8v
IFRoZXJlIGFyZSB1bmtub3duIGZpZWxkcyB0aGF0IGNvdWxkIGJlIGV4dGVuc2lvbnMsIHRodXMg
dGhpcyBjYWxsIGZhaWxzLgotICBpZiAocmVmbGVjdGlvbi0+R2V0VW5rbm93bkZpZWxkcyhtZXNz
YWdlKS5maWVsZF9jb3VudCgpID4gMCkgcmV0dXJuIGZhbHNlOwotCi0gIHZlY3Rvcjxjb25zdCBG
aWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIHJlZmxlY3Rpb24tPkxpc3RGaWVsZHMobWVzc2Fn
ZSwgJmZpZWxkcyk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKysp
IHsKLSAgICBpZiAoZmllbGRzW2ldLT5pc19leHRlbnNpb24oKSkgZXh0ZW5zaW9ucy0+aW5zZXJ0
KGZpZWxkc1tpXSk7Ci0KLSAgICBpZiAoR2V0SmF2YVR5cGUoZmllbGRzW2ldKSA9PSBKQVZBVFlQ
RV9NRVNTQUdFKSB7Ci0gICAgICBpZiAoZmllbGRzW2ldLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAg
ICAgIGludCBzaXplID0gcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIGZpZWxkc1tpXSk7
Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0gICAgICAgICAgY29u
c3QgTWVzc2FnZSYgc3ViX21lc3NhZ2UgPQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+R2V0UmVw
ZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIGZpZWxkc1tpXSwgaik7Ci0gICAgICAgICAgaWYgKCFDb2xs
ZWN0RXh0ZW5zaW9ucyhzdWJfbWVzc2FnZSwgZXh0ZW5zaW9ucykpIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgTWVzc2FnZSYgc3ViX21lc3Nh
Z2UgPSByZWZsZWN0aW9uLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIGZpZWxkc1tpXSk7Ci0gICAgICAg
IGlmICghQ29sbGVjdEV4dGVuc2lvbnMoc3ViX21lc3NhZ2UsIGV4dGVuc2lvbnMpKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEZp
bmRzIGFsbCBleHRlbnNpb25zIGluIHRoZSBnaXZlbiBtZXNzYWdlIGFuZCBpdHMgc3ViLW1lc3Nh
Z2VzLiAgSWYgdGhlCi0vLyBtZXNzYWdlIGNvbnRhaW5zIHVua25vd24gZmllbGRzICh3aGljaCBj
b3VsZCBiZSBleHRlbnNpb25zKSwgdGhlbiB0aG9zZQotLy8gZXh0ZW5zaW9ucyBhcmUgZGVmaW5l
ZCBpbiBhbHRlcm5hdGVfcG9vbC4KLS8vIFRoZSBtZXNzYWdlIHdpbGwgYmUgY29udmVydGVkIHRv
IGEgRHluYW1pY01lc3NhZ2UgYmFja2VkIGJ5IGFsdGVybmF0ZV9wb29sCi0vLyBpbiBvcmRlciB0
byBoYW5kbGUgdGhpcyBjYXNlLgotdm9pZCBDb2xsZWN0RXh0ZW5zaW9ucyhjb25zdCBGaWxlRGVz
Y3JpcHRvclByb3RvJiBmaWxlX3Byb3RvLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBE
ZXNjcmlwdG9yUG9vbCYgYWx0ZXJuYXRlX3Bvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgIEZp
ZWxkRGVzY3JpcHRvclNldCogZXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RyaW5nJiBmaWxlX2RhdGEpIHsKLSAgaWYgKCFDb2xsZWN0RXh0ZW5zaW9ucyhmaWxlX3By
b3RvLCBleHRlbnNpb25zKSkgewotICAgIC8vIFRoZXJlIGFyZSB1bmtub3duIGZpZWxkcyBpbiB0
aGUgZmlsZV9wcm90bywgd2hpY2ggYXJlIHByb2JhYmx5Ci0gICAgLy8gZXh0ZW5zaW9ucy4gV2Ug
bmVlZCB0byBwYXJzZSB0aGUgZGF0YSBpbnRvIGEgZHluYW1pYyBtZXNzYWdlIGJhc2VkIG9uIHRo
ZQotICAgIC8vIGJ1aWxkZXItcG9vbCB0byBmaW5kIG91dCBhbGwgZXh0ZW5zaW9ucy4KLSAgICBj
b25zdCBEZXNjcmlwdG9yKiBmaWxlX3Byb3RvX2Rlc2MgPSBhbHRlcm5hdGVfcG9vbC5GaW5kTWVz
c2FnZVR5cGVCeU5hbWUoCi0gICAgICAgIGZpbGVfcHJvdG8uR2V0RGVzY3JpcHRvcigpLT5mdWxs
X25hbWUoKSk7Ci0gICAgR09PR0xFX0NIRUNLKGZpbGVfcHJvdG9fZGVzYykKLSAgICAgICAgPDwg
IkZpbmQgdW5rbm93biBmaWVsZHMgaW4gRmlsZURlc2NyaXB0b3JQcm90byB3aGVuIGJ1aWxkaW5n
ICIKLSAgICAgICAgPDwgZmlsZV9wcm90by5uYW1lKCkKLSAgICAgICAgPDwgIi4gSXQncyBsaWtl
bHkgdGhhdCB0aG9zZSBmaWVsZHMgYXJlIGN1c3RvbSBvcHRpb25zLCBob3dldmVyLCAiCi0gICAg
ICAgICAgICJkZXNjcmlwdG9yLnByb3RvIGlzIG5vdCBpbiB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRl
bmNpZXMuICIKLSAgICAgICAgICAgIlRoaXMgbm9ybWFsbHkgc2hvdWxkIG5vdCBoYXBwZW4uIFBs
ZWFzZSByZXBvcnQgYSBidWcuIjsKLSAgICBEeW5hbWljTWVzc2FnZUZhY3RvcnkgZmFjdG9yeTsK
LSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IGR5bmFtaWNfZmlsZV9w
cm90bygKLSAgICAgICAgZmFjdG9yeS5HZXRQcm90b3R5cGUoZmlsZV9wcm90b19kZXNjKS0+TmV3
KCkpOwotICAgIEdPT0dMRV9DSEVDSyhkeW5hbWljX2ZpbGVfcHJvdG8uZ2V0KCkgIT0gTlVMTCk7
Ci0gICAgR09PR0xFX0NIRUNLKGR5bmFtaWNfZmlsZV9wcm90by0+UGFyc2VGcm9tU3RyaW5nKGZp
bGVfZGF0YSkpOwotCi0gICAgLy8gQ29sbGVjdCB0aGUgZXh0ZW5zaW9ucyBhZ2FpbiBmcm9tIHRo
ZSBkeW5hbWljIG1lc3NhZ2UuIFRoZXJlIHNob3VsZCBiZSBubwotICAgIC8vIG1vcmUgdW5rbm93
biBmaWVsZHMgdGhpcyB0aW1lLCBpLmUuIGFsbCB0aGUgY3VzdG9tIG9wdGlvbnMgc2hvdWxkIGJl
Ci0gICAgLy8gcGFyc2VkIGFzIGV4dGVuc2lvbnMgbm93LgotICAgIGV4dGVuc2lvbnMtPmNsZWFy
KCk7Ci0gICAgR09PR0xFX0NIRUNLKENvbGxlY3RFeHRlbnNpb25zKCpkeW5hbWljX2ZpbGVfcHJv
dG8sIGV4dGVuc2lvbnMpKQotICAgICAgICA8PCAiRmluZCB1bmtub3duIGZpZWxkcyBpbiBGaWxl
RGVzY3JpcHRvclByb3RvIHdoZW4gYnVpbGRpbmcgIgotICAgICAgICA8PCBmaWxlX3Byb3RvLm5h
bWUoKQotICAgICAgICA8PCAiLiBJdCdzIGxpa2VseSB0aGF0IHRob3NlIGZpZWxkcyBhcmUgY3Vz
dG9tIG9wdGlvbnMsIGhvd2V2ZXIsICIKLSAgICAgICAgICAgInRob3NlIG9wdGlvbnMgY2Fubm90
IGJlIHJlY29nbml6ZWQgaW4gdGhlIGJ1aWxkZXIgcG9vbC4gIgotICAgICAgICAgICAiVGhpcyBu
b3JtYWxseSBzaG91bGQgbm90IGhhcHBlbi4gUGxlYXNlIHJlcG9ydCBhIGJ1Zy4iOwotICB9Ci19
Ci0KLS8vIENvbXBhcmUgdHdvIGZpZWxkIGRlc2NyaXB0b3JzLCByZXR1cm5pbmcgdHJ1ZSBpZiB0
aGUgZmlyc3Qgc2hvdWxkIGNvbWUKLS8vIGJlZm9yZSB0aGUgc2Vjb25kLgotYm9vbCBDb21wYXJl
RmllbGRzQnlOYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciAqYSwgY29uc3QgRmllbGREZXNjcmlw
dG9yICpiKSB7Ci0gIHJldHVybiBhLT5mdWxsX25hbWUoKSA8IGItPmZ1bGxfbmFtZSgpOwotfQot
Ci0vLyBPdXIgc3RhdGljIGluaXRpYWxpemF0aW9uIG1ldGhvZHMgY2FuIGJlY29tZSB2ZXJ5LCB2
ZXJ5IGxhcmdlLgotLy8gU28gbGFyZ2UgdGhhdCBpZiB3ZSBhcmVuJ3QgY2FyZWZ1bCB3ZSBlbmQg
dXAgYmxvd2luZyB0aGUgSlZNJ3MKLS8vIDY0SyBieXRlcyBvZiBieXRlY29kZS9tZXRob2QuIEZv
cnR1bmF0ZWx5LCBzaW5jZSB0aGVzZSBzdGF0aWMKLS8vIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIG9u
bHkgb25jZSBuZWFyIHRoZSBiZWdpbm5pbmcgb2YgYSBwcm9ncmFtLAotLy8gdGhlcmUncyB1c3Vh
bGx5IHBsZW50eSBvZiBzdGFjayBzcGFjZSBhdmFpbGFibGUgYW5kIHdlIGNhbgotLy8gZXh0ZW5k
IG91ciBtZXRob2RzIGJ5IHNpbXBseSBjaGFpbmluZyB0aGVtIHRvIGFub3RoZXIgbWV0aG9kCi0v
LyB3aXRoIGEgdGFpbCBjYWxsLiBUaGlzIGluc2VydHMgdGhlIHNlcXVlbmNlIGNhbGwtbmV4dC1t
ZXRob2QsCi0vLyBlbmQgdGhpcyBvbmUsIGJlZ2luLW5leHQtbWV0aG9kIGFzIG5lZWRlZC4KLXZv
aWQgTWF5YmVSZXN0YXJ0SmF2YU1ldGhvZChpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgKmJ5dGVjb2RlX2VzdGltYXRlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqbWV0aG9kX251bSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpjaGFpbl9zdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqbWV0aG9kX2RlY2wpIHsKLSAgLy8gVGhlIGdvYWwgaGVyZSBpcyB0
byBzdGF5IHVuZGVyIDY0SyBieXRlcyBvZiBqdm0gYnl0ZWNvZGUvbWV0aG9kLAotICAvLyBzaW5j
ZSBvdGhlcndpc2Ugd2UgaGl0IGEgaGFyZGNvZGVkIGxpbWl0IGluIHRoZSBqdm0gYW5kIGphdmFj
IHdpbGwKLSAgLy8gdGhlbiBmYWlsIHdpdGggdGhlIGVycm9yICJjb2RlIHRvbyBsYXJnZSIuIFRo
aXMgbGltaXQgbGV0cyBvdXIKLSAgLy8gZXN0aW1hdGVzIGJlIG9mZiBieSBhIGZhY3RvciBvZiB0
d28gYW5kIHN0aWxsIHdlJ3JlIG9rYXkuCi0gIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJNZXRo
b2QgPSBrTWF4U3RhdGljU2l6ZTsKLQotICBpZiAoKCpieXRlY29kZV9lc3RpbWF0ZSkgPiBieXRl
c1Blck1ldGhvZCkgewotICAgICsrKCptZXRob2RfbnVtKTsKLSAgICBwcmludGVyLT5QcmludChj
aGFpbl9zdGF0ZW1lbnQsICJtZXRob2RfbnVtIiwgU2ltcGxlSXRvYSgqbWV0aG9kX251bSkpOwot
ICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgifVxuIik7Ci0gICAg
cHJpbnRlci0+UHJpbnQobWV0aG9kX2RlY2wsICJtZXRob2RfbnVtIiwgU2ltcGxlSXRvYSgqbWV0
aG9kX251bSkpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotICAgICpieXRlY29kZV9lc3RpbWF0
ZSA9IDA7Ci0gIH0KLX0KLQotCi19ICAvLyBuYW1lc3BhY2UKLQotRmlsZUdlbmVyYXRvcjo6Rmls
ZUdlbmVyYXRvcihjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwgYm9vbCBpbW11dGFibGVfYXBp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGVuZm9yY2VfbGl0ZSkKLSAgICA6
IGZpbGVfKGZpbGUpLAotICAgICAgamF2YV9wYWNrYWdlXyhGaWxlSmF2YVBhY2thZ2UoZmlsZSwg
aW1tdXRhYmxlX2FwaSkpLAotICAgICAgbWVzc2FnZV9nZW5lcmF0b3JzXygKLSAgICAgICAgICBu
ZXcgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxNZXNzYWdlR2VuZXJhdG9yPltmaWxlLT5t
ZXNzYWdlX3R5cGVfY291bnQoKV0pLAotICAgICAgZXh0ZW5zaW9uX2dlbmVyYXRvcnNfKAotICAg
ICAgICAgIG5ldyBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPEV4dGVuc2lvbkdlbmVyYXRv
cj5bZmlsZS0+ZXh0ZW5zaW9uX2NvdW50KCldKSwKLSAgICAgIGNvbnRleHRfKG5ldyBDb250ZXh0
KGZpbGUpKSwKLSAgICAgIG5hbWVfcmVzb2x2ZXJfKGNvbnRleHRfLT5HZXROYW1lUmVzb2x2ZXIo
KSksCi0gICAgICBpbW11dGFibGVfYXBpXyhpbW11dGFibGVfYXBpKSB7Ci0gIGNsYXNzbmFtZV8g
PSBuYW1lX3Jlc29sdmVyXy0+R2V0RmlsZUNsYXNzTmFtZShmaWxlLCBpbW11dGFibGVfYXBpKTsK
LSAgY29udGV4dF8tPlNldEVuZm9yY2VMaXRlKGVuZm9yY2VfbGl0ZSk7Ci0gIGdlbmVyYXRvcl9m
YWN0b3J5Xy5yZXNldCgKLSAgICAgIG5ldyBJbW11dGFibGVHZW5lcmF0b3JGYWN0b3J5KGNvbnRl
eHRfLmdldCgpKSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3NhZ2VfdHlwZV9j
b3VudCgpOyArK2kpIHsKLSAgICBtZXNzYWdlX2dlbmVyYXRvcnNfW2ldLnJlc2V0KAotICAgICAg
ICBnZW5lcmF0b3JfZmFjdG9yeV8tPk5ld01lc3NhZ2VHZW5lcmF0b3IoZmlsZV8tPm1lc3NhZ2Vf
dHlwZShpKSkpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPmV4dGVuc2lvbl9j
b3VudCgpOyArK2kpIHsKLSAgICBleHRlbnNpb25fZ2VuZXJhdG9yc19baV0ucmVzZXQoCi0gICAg
ICAgIGdlbmVyYXRvcl9mYWN0b3J5Xy0+TmV3RXh0ZW5zaW9uR2VuZXJhdG9yKGZpbGVfLT5leHRl
bnNpb24oaSkpKTsKLSAgfQotfQotCi1GaWxlR2VuZXJhdG9yOjp+RmlsZUdlbmVyYXRvcigpIHt9
Ci0KLWJvb2wgRmlsZUdlbmVyYXRvcjo6VmFsaWRhdGUoc3RyaW5nKiBlcnJvcikgewotICAvLyBD
aGVjayB0aGF0IG5vIGNsYXNzIG5hbWUgbWF0Y2hlcyB0aGUgZmlsZSdzIGNsYXNzIG5hbWUuICBU
aGlzIGlzIGEgY29tbW9uCi0gIC8vIHByb2JsZW0gdGhhdCBsZWFkcyB0byBKYXZhIGNvbXBpbGUg
ZXJyb3JzIHRoYXQgY2FuIGJlIGhhcmQgdG8gdW5kZXJzdGFuZC4KLSAgLy8gSXQncyBlc3BlY2lh
bGx5IGJhZCB3aGVuIHVzaW5nIHRoZSBqYXZhX211bHRpcGxlX2ZpbGVzLCBzaW5jZSB3ZSB3b3Vs
ZAotICAvLyBlbmQgdXAgb3ZlcndyaXRpbmcgdGhlIG91dGVyIGNsYXNzIHdpdGggb25lIG9mIHRo
ZSBpbm5lciBvbmVzLgotICBpZiAobmFtZV9yZXNvbHZlcl8tPkhhc0NvbmZsaWN0aW5nQ2xhc3NO
YW1lKGZpbGVfLCBjbGFzc25hbWVfKSkgewotICAgIGVycm9yLT5hc3NpZ24oZmlsZV8tPm5hbWUo
KSk7Ci0gICAgZXJyb3ItPmFwcGVuZCgKLSAgICAgICI6IENhbm5vdCBnZW5lcmF0ZSBKYXZhIG91
dHB1dCBiZWNhdXNlIHRoZSBmaWxlJ3Mgb3V0ZXIgY2xhc3MgbmFtZSwgXCIiKTsKLSAgICBlcnJv
ci0+YXBwZW5kKGNsYXNzbmFtZV8pOwotICAgIGVycm9yLT5hcHBlbmQoCi0gICAgICAiXCIsIG1h
dGNoZXMgdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSB0eXBlcyBkZWNsYXJlZCBpbnNpZGUgaXQuICAi
Ci0gICAgICAiUGxlYXNlIGVpdGhlciByZW5hbWUgdGhlIHR5cGUgb3IgdXNlIHRoZSBqYXZhX291
dGVyX2NsYXNzbmFtZSAiCi0gICAgICAib3B0aW9uIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgb3V0
ZXIgY2xhc3MgbmFtZSBmb3IgdGhlIC5wcm90byBmaWxlLiIpOwotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGaWxlR2VuZXJhdG9yOjpHZW5lcmF0ZShp
bzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBXZSBkb24ndCBpbXBvcnQgYW55dGhpbmcgYmVj
YXVzZSB3ZSByZWZlciB0byBhbGwgY2xhc3NlcyBieSB0aGVpcgotICAvLyBmdWxseS1xdWFsaWZp
ZWQgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuCi0gIHByaW50ZXItPlByaW50KAotICAg
ICIvLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBF
RElUIVxuIgotICAgICIvLyBzb3VyY2U6ICRmaWxlbmFtZSRcbiIKLSAgICAiXG4iLAotICAgICJm
aWxlbmFtZSIsIGZpbGVfLT5uYW1lKCkpOwotICBpZiAoIWphdmFfcGFja2FnZV8uZW1wdHkoKSkg
ewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgInBhY2thZ2UgJHBhY2thZ2UkO1xuIgotICAg
ICAgIlxuIiwKLSAgICAgICJwYWNrYWdlIiwgamF2YV9wYWNrYWdlXyk7Ci0gIH0KLSAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgInB1YmxpYyBmaW5hbCBjbGFzcyAkY2xhc3NuYW1lJCB7XG4iCi0gICAg
IiAgcHJpdmF0ZSAkY2xhc3NuYW1lJCgpIHt9XG4iLAotICAgICJjbGFzc25hbWUiLCBjbGFzc25h
bWVfKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBwcmludGVy
LT5QcmludCgKLSAgICAicHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQWxsRXh0ZW5zaW9ucyhc
biIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmVnaXN0cnkkbGl0ZSQg
cmVnaXN0cnkpIHtcbiIsCi0gICAgImxpdGUiLAotICAgIEhhc0Rlc2NyaXB0b3JNZXRob2RzKGZp
bGVfLCBjb250ZXh0Xy0+RW5mb3JjZUxpdGUoKSkgPyAiIiA6ICJMaXRlIik7Ci0KLSAgcHJpbnRl
ci0+SW5kZW50KCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+ZXh0ZW5zaW9uX2Nv
dW50KCk7IGkrKykgewotICAgIGV4dGVuc2lvbl9nZW5lcmF0b3JzX1tpXS0+R2VuZXJhdGVSZWdp
c3RyYXRpb25Db2RlKHByaW50ZXIpOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxl
Xy0+bWVzc2FnZV90eXBlX2NvdW50KCk7IGkrKykgewotICAgIG1lc3NhZ2VfZ2VuZXJhdG9yc19b
aV0tPkdlbmVyYXRlRXh0ZW5zaW9uUmVnaXN0cmF0aW9uQ29kZShwcmludGVyKTsKLSAgfQotCi0g
IHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIn1cbiIpOwotCi0g
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgaWYgKCFNdWx0aXBsZUphdmFGaWxlcyhmaWxlXywgaW1tdXRhYmxl
X2FwaV8pKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+ZW51bV90eXBlX2NvdW50
KCk7IGkrKykgewotICAgICAgaWYgKEhhc0Rlc2NyaXB0b3JNZXRob2RzKGZpbGVfLCBjb250ZXh0
Xy0+RW5mb3JjZUxpdGUoKSkpIHsKLSAgICAgICAgRW51bUdlbmVyYXRvcihmaWxlXy0+ZW51bV90
eXBlKGkpLCBpbW11dGFibGVfYXBpXywgY29udGV4dF8uZ2V0KCkpCi0gICAgICAgICAgICAuR2Vu
ZXJhdGUocHJpbnRlcik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBFbnVtTGl0ZUdlbmVyYXRv
cihmaWxlXy0+ZW51bV90eXBlKGkpLCBpbW11dGFibGVfYXBpXywgY29udGV4dF8uZ2V0KCkpCi0g
ICAgICAgICAgICAuR2VuZXJhdGUocHJpbnRlcik7Ci0gICAgICB9Ci0gICAgfQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAg
IG1lc3NhZ2VfZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlSW50ZXJmYWNlKHByaW50ZXIpOwotICAg
ICAgbWVzc2FnZV9nZW5lcmF0b3JzX1tpXS0+R2VuZXJhdGUocHJpbnRlcik7Ci0gICAgfQotICAg
IGlmIChIYXNHZW5lcmljU2VydmljZXMoZmlsZV8sIGNvbnRleHRfLT5FbmZvcmNlTGl0ZSgpKSkg
ewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+c2VydmljZV9jb3VudCgpOyBpKysp
IHsKLSAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxTZXJ2aWNlR2VuZXJhdG9y
PiBnZW5lcmF0b3IoCi0gICAgICAgICAgICBnZW5lcmF0b3JfZmFjdG9yeV8tPk5ld1NlcnZpY2VH
ZW5lcmF0b3IoZmlsZV8tPnNlcnZpY2UoaSkpKTsKLSAgICAgICAgZ2VuZXJhdG9yLT5HZW5lcmF0
ZShwcmludGVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBFeHRlbnNpb25zIG11c3Qg
YmUgZ2VuZXJhdGVkIGluIHRoZSBvdXRlciBjbGFzcyBzaW5jZSB0aGV5IGFyZSB2YWx1ZXMsCi0g
IC8vIG5vdCBjbGFzc2VzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5leHRlbnNpb25f
Y291bnQoKTsgaSsrKSB7Ci0gICAgZXh0ZW5zaW9uX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZShw
cmludGVyKTsKLSAgfQotCi0gIC8vIFN0YXRpYyB2YXJpYWJsZXMuIFdlJ2QgbGlrZSB0aGVtIHRv
IGJlIGZpbmFsIGlmIHBvc3NpYmxlLCBidXQgZHVlIHRvCi0gIC8vIHRoZSBKVk0ncyA2NGsgc2l6
ZSBsaW1pdCBvbiBzdGF0aWMgYmxvY2tzLCB3ZSBoYXZlIHRvIGluaXRpYWxpemUgc29tZQotICAv
LyBvZiB0aGVtIGluIG1ldGhvZHM7IHRodXMgdGhleSBjYW5ub3QgYmUgZmluYWwuCi0gIGludCBz
dGF0aWNfYmxvY2tfYnl0ZWNvZGVfZXN0aW1hdGUgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8
IGZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgbWVzc2FnZV9nZW5lcmF0
b3JzX1tpXS0+R2VuZXJhdGVTdGF0aWNWYXJpYWJsZXMoCi0gICAgICAgIHByaW50ZXIsICZzdGF0
aWNfYmxvY2tfYnl0ZWNvZGVfZXN0aW1hdGUpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoIlxu
Iik7Ci0KLSAgaWYgKEhhc0Rlc2NyaXB0b3JNZXRob2RzKGZpbGVfLCBjb250ZXh0Xy0+RW5mb3Jj
ZUxpdGUoKSkpIHsKLSAgICBpZiAoaW1tdXRhYmxlX2FwaV8pIHsKLSAgICAgIEdlbmVyYXRlRGVz
Y3JpcHRvckluaXRpYWxpemF0aW9uQ29kZUZvckltbXV0YWJsZShwcmludGVyKTsKLSAgICB9IGVs
c2UgewotICAgICAgR2VuZXJhdGVEZXNjcmlwdG9ySW5pdGlhbGl6YXRpb25Db2RlRm9yTXV0YWJs
ZShwcmludGVyKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAic3RhdGljIHtcbiIpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotICAgIGludCBieXRlY29k
ZV9lc3RpbWF0ZSA9IDA7Ci0gICAgaW50IG1ldGhvZF9udW0gPSAwOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBmaWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCk7IGkrKykgewotICAgICAgYnl0
ZWNvZGVfZXN0aW1hdGUgKz0gbWVzc2FnZV9nZW5lcmF0b3JzX1tpXS0+R2VuZXJhdGVTdGF0aWNW
YXJpYWJsZUluaXRpYWxpemVycyhwcmludGVyKTsKLSAgICAgIE1heWJlUmVzdGFydEphdmFNZXRo
b2QoCi0gICAgICAgIHByaW50ZXIsCi0gICAgICAgICZieXRlY29kZV9lc3RpbWF0ZSwgJm1ldGhv
ZF9udW0sCi0gICAgICAgICJfY2xpbml0X2F1dG9zcGxpdF8kbWV0aG9kX251bSQoKTtcbiIsCi0g
ICAgICAgICJwcml2YXRlIHN0YXRpYyB2b2lkIF9jbGluaXRfYXV0b3NwbGl0XyRtZXRob2RfbnVt
JCgpIHtcbiIpOwotICAgIH0KLQotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICJc
biIKLSAgICAiLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG91dGVyX2NsYXNzX3Njb3BlKVxu
Iik7Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgifVxuIik7Ci19
Ci0KLXZvaWQgRmlsZUdlbmVyYXRvcjo6R2VuZXJhdGVEZXNjcmlwdG9ySW5pdGlhbGl6YXRpb25D
b2RlRm9ySW1tdXRhYmxlKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXIt
PlByaW50KAotICAgICJwdWJsaWMgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
cnMuRmlsZURlc2NyaXB0b3JcbiIKLSAgICAiICAgIGdldERlc2NyaXB0b3IoKSB7XG4iCi0gICAg
IiAgcmV0dXJuIGRlc2NyaXB0b3I7XG4iCi0gICAgIn1cbiIKLSAgICAicHJpdmF0ZSBzdGF0aWMg
JGZpbmFsJCBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yXG4i
Ci0gICAgIiAgICBkZXNjcmlwdG9yO1xuIgotICAgICJzdGF0aWMge1xuIiwKLSAgICAvLyBUT0RP
KGR3ZWlzKTogTWFyayB0aGlzIGFzIGZpbmFsLgotICAgICJmaW5hbCIsICIiKTsKLSAgcHJpbnRl
ci0+SW5kZW50KCk7Ci0KLSAgU2hhcmVkQ29kZUdlbmVyYXRvciBzaGFyZWRfY29kZV9nZW5lcmF0
b3IoZmlsZV8pOwotICBzaGFyZWRfY29kZV9nZW5lcmF0b3IuR2VuZXJhdGVEZXNjcmlwdG9ycyhw
cmludGVyKTsKLQotICBpbnQgYnl0ZWNvZGVfZXN0aW1hdGUgPSAwOwotICBpbnQgbWV0aG9kX251
bSA9IDA7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+bWVzc2FnZV90eXBlX2NvdW50
KCk7IGkrKykgewotICAgIGJ5dGVjb2RlX2VzdGltYXRlICs9IG1lc3NhZ2VfZ2VuZXJhdG9yc19b
aV0tPkdlbmVyYXRlU3RhdGljVmFyaWFibGVJbml0aWFsaXplcnMocHJpbnRlcik7Ci0gICAgTWF5
YmVSZXN0YXJ0SmF2YU1ldGhvZCgKLSAgICAgIHByaW50ZXIsCi0gICAgICAmYnl0ZWNvZGVfZXN0
aW1hdGUsICZtZXRob2RfbnVtLAotICAgICAgIl9jbGluaXRfYXV0b3NwbGl0X2Rpbml0XyRtZXRo
b2RfbnVtJCgpO1xuIiwKLSAgICAgICJwcml2YXRlIHN0YXRpYyB2b2lkIF9jbGluaXRfYXV0b3Nw
bGl0X2Rpbml0XyRtZXRob2RfbnVtJCgpIHtcbiIpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDwgZmlsZV8tPmV4dGVuc2lvbl9jb3VudCgpOyBpKyspIHsKLSAgICBieXRlY29kZV9lc3RpbWF0
ZSArPSBleHRlbnNpb25fZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRlTm9uTmVzdGVkSW5pdGlhbGl6
YXRpb25Db2RlKHByaW50ZXIpOwotICAgIE1heWJlUmVzdGFydEphdmFNZXRob2QoCi0gICAgICBw
cmludGVyLAotICAgICAgJmJ5dGVjb2RlX2VzdGltYXRlLCAmbWV0aG9kX251bSwKLSAgICAgICJf
Y2xpbml0X2F1dG9zcGxpdF9kaW5pdF8kbWV0aG9kX251bSQoKTtcbiIsCi0gICAgICAicHJpdmF0
ZSBzdGF0aWMgdm9pZCBfY2xpbml0X2F1dG9zcGxpdF9kaW5pdF8kbWV0aG9kX251bSQoKSB7XG4i
KTsKLSAgfQotCi0gIC8vIFByb3RvIGNvbXBpbGVyIGJ1aWxkcyBhIERlc2NyaXB0b3JQb29sLCB3
aGljaCBob2xkcyBhbGwgdGhlIGRlc2NyaXB0b3JzIHRvCi0gIC8vIGdlbmVyYXRlLCB3aGVuIHBy
b2Nlc3NpbmcgdGhlICIucHJvdG8iIGZpbGVzLiBXZSBjYWxsIHRoaXMgRGVzY3JpcHRvclBvb2wK
LSAgLy8gdGhlIHBhcnNlZCBwb29sIChhLmsuYS4gZmlsZV8tPnBvb2woKSkuCi0gIC8vCi0gIC8v
IE5vdGUgdGhhdCB3aGVuIHVzZXJzIHRyeSB0byBleHRlbmQgdGhlICguKilEZXNjcmlwdG9yUHJv
dG8gaW4gdGhlaXIKLSAgLy8gIi5wcm90byIgZmlsZXMsIGl0IGRvZXMgbm90IGFmZmVjdCB0aGUg
cHJlLWJ1aWx0IEZpbGVEZXNjcmlwdG9yUHJvdG8gY2xhc3MKLSAgLy8gaW4gcHJvdG8gY29tcGls
ZXIuIFdoZW4gd2UgcHV0IHRoZSBkZXNjcmlwdG9yIGRhdGEgaW4gdGhlIGZpbGVfcHJvdG8sIHRo
b3NlCi0gIC8vIGV4dGVuc2lvbnMgYmVjb21lIHVua25vd24gZmllbGRzLgotICAvLwotICAvLyBO
b3cgd2UgbmVlZCB0byBmaW5kIG91dCBhbGwgdGhlIGV4dGVuc2lvbiB2YWx1ZSB0byB0aGUgKC4q
KURlc2NyaXB0b3JQcm90bwotICAvLyBpbiB0aGUgZmlsZV9wcm90byBtZXNzYWdlLCBhbmQgcHJl
cGFyZSBhbiBFeHRlbnNpb25SZWdpc3RyeSB0byByZXR1cm4uCi0gIC8vCi0gIC8vIFRvIGZpbmQg
dGhvc2UgZXh0ZW5zaW9ucywgd2UgbmVlZCB0byBwYXJzZSB0aGUgZGF0YSBpbnRvIGEgZHluYW1p
YyBtZXNzYWdlCi0gIC8vIG9mIHRoZSBGaWxlRGVzY3JpcHRvciBiYXNlZCBvbiB0aGUgYnVpbGRl
ci1wb29sLCB0aGVuIHdlIGNhbiB1c2UKLSAgLy8gcmVmbGVjdGlvbnMgdG8gZmluZCBhbGwgZXh0
ZW5zaW9uIGZpZWxkcwotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIGZpbGVf
LT5Db3B5VG8oJmZpbGVfcHJvdG8pOwotICBzdHJpbmcgZmlsZV9kYXRhOwotICBmaWxlX3Byb3Rv
LlNlcmlhbGl6ZVRvU3RyaW5nKCZmaWxlX2RhdGEpOwotICBGaWVsZERlc2NyaXB0b3JTZXQgZXh0
ZW5zaW9uczsKLSAgQ29sbGVjdEV4dGVuc2lvbnMoZmlsZV9wcm90bywgKmZpbGVfLT5wb29sKCks
ICZleHRlbnNpb25zLCBmaWxlX2RhdGEpOwotCi0gIGlmIChleHRlbnNpb25zLnNpemUoKSA+IDAp
IHsKLSAgICAvLyBNdXN0IGNvbnN0cnVjdCBhbiBFeHRlbnNpb25SZWdpc3RyeSBjb250YWluaW5n
IGFsbCBleGlzdGluZyBleHRlbnNpb25zCi0gICAgLy8gYW5kIHVzZSBpdCB0byBwYXJzZSB0aGUg
ZGVzY3JpcHRvciBkYXRhIGFnYWluIHRvIHJlY29nbml6ZSBleHRlbnNpb25zLgotICAgIHByaW50
ZXItPlByaW50KAotICAgICAgImNvbS5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmVnaXN0cnkg
cmVnaXN0cnkgPVxuIgotICAgICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJl
Z2lzdHJ5Lm5ld0luc3RhbmNlKCk7XG4iKTsKLSAgICBGaWVsZERlc2NyaXB0b3JTZXQ6Oml0ZXJh
dG9yIGl0OwotICAgIGZvciAoaXQgPSBleHRlbnNpb25zLmJlZ2luKCk7IGl0ICE9IGV4dGVuc2lv
bnMuZW5kKCk7IGl0KyspIHsKLSAgICAgIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8RXh0
ZW5zaW9uR2VuZXJhdG9yPiBnZW5lcmF0b3IoCi0gICAgICAgICAgZ2VuZXJhdG9yX2ZhY3Rvcnlf
LT5OZXdFeHRlbnNpb25HZW5lcmF0b3IoKml0KSk7Ci0gICAgICBieXRlY29kZV9lc3RpbWF0ZSAr
PSBnZW5lcmF0b3ItPkdlbmVyYXRlUmVnaXN0cmF0aW9uQ29kZShwcmludGVyKTsKLSAgICAgIE1h
eWJlUmVzdGFydEphdmFNZXRob2QoCi0gICAgICAgIHByaW50ZXIsCi0gICAgICAgICZieXRlY29k
ZV9lc3RpbWF0ZSwgJm1ldGhvZF9udW0sCi0gICAgICAgICJfY2xpbml0X2F1dG9zcGxpdF9kaW5p
dF8kbWV0aG9kX251bSQocmVnaXN0cnkpO1xuIiwKLSAgICAgICAgInByaXZhdGUgc3RhdGljIHZv
aWQgX2NsaW5pdF9hdXRvc3BsaXRfZGluaXRfJG1ldGhvZF9udW0kKFxuIgotICAgICAgICAiICAg
IGNvbS5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkpIHtcbiIpOwot
ICAgIH0KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJjb20uZ29vZ2xlLnByb3RvYnVmLkRl
c2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yXG4iCi0gICAgICAiICAgIC5pbnRlcm5hbFVwZGF0ZUZp
bGVEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIHJlZ2lzdHJ5KTtcbiIpOwotICB9Ci0KLSAgLy8gRm9y
Y2UgZGVzY3JpcHRvciBpbml0aWFsaXphdGlvbiBvZiBhbGwgZGVwZW5kZW5jaWVzLgotICBmb3Ig
KGludCBpID0gMDsgaSA8IGZpbGVfLT5kZXBlbmRlbmN5X2NvdW50KCk7IGkrKykgewotICAgIGlm
IChTaG91bGRJbmNsdWRlRGVwZW5kZW5jeShmaWxlXy0+ZGVwZW5kZW5jeShpKSwgdHJ1ZSkpIHsK
LSAgICAgIHN0cmluZyBkZXBlbmRlbmN5ID0KLSAgICAgICAgICBuYW1lX3Jlc29sdmVyXy0+R2V0
SW1tdXRhYmxlQ2xhc3NOYW1lKGZpbGVfLT5kZXBlbmRlbmN5KGkpKTsKLSAgICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgICAiJGRlcGVuZGVuY3kkLmdldERlc2NyaXB0b3IoKTtcbiIsCi0gICAg
ICAgICJkZXBlbmRlbmN5IiwgZGVwZW5kZW5jeSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpbnRlci0+
T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgRmls
ZUdlbmVyYXRvcjo6R2VuZXJhdGVEZXNjcmlwdG9ySW5pdGlhbGl6YXRpb25Db2RlRm9yTXV0YWJs
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICAicHVibGlj
IHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yXG4i
Ci0gICAgIiAgICBnZXREZXNjcmlwdG9yKCkge1xuIgotICAgICIgIHJldHVybiBkZXNjcmlwdG9y
O1xuIgotICAgICJ9XG4iCi0gICAgInByaXZhdGUgc3RhdGljIGZpbmFsIGNvbS5nb29nbGUucHJv
dG9idWYuRGVzY3JpcHRvcnMuRmlsZURlc2NyaXB0b3JcbiIKLSAgICAiICAgIGRlc2NyaXB0b3I7
XG4iCi0gICAgInN0YXRpYyB7XG4iKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgImRlc2NyaXB0b3IgPSAkaW1tdXRhYmxlX3BhY2thZ2UkLiRkZXNjcmlw
dG9yX2NsYXNzbmFtZSQuZGVzY3JpcHRvcjtcbiIsCi0gICAgImltbXV0YWJsZV9wYWNrYWdlIiwg
RmlsZUphdmFQYWNrYWdlKGZpbGVfLCB0cnVlKSwKLSAgICAiZGVzY3JpcHRvcl9jbGFzc25hbWUi
LCBuYW1lX3Jlc29sdmVyXy0+R2V0RGVzY3JpcHRvckNsYXNzTmFtZShmaWxlXykpOwotCi0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAg
ICBtZXNzYWdlX2dlbmVyYXRvcnNfW2ldLT5HZW5lcmF0ZVN0YXRpY1ZhcmlhYmxlSW5pdGlhbGl6
ZXJzKHByaW50ZXIpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPmV4dGVuc2lv
bl9jb3VudCgpOyBpKyspIHsKLSAgICBleHRlbnNpb25fZ2VuZXJhdG9yc19baV0tPkdlbmVyYXRl
Tm9uTmVzdGVkSW5pdGlhbGl6YXRpb25Db2RlKHByaW50ZXIpOwotICB9Ci0KLSAgLy8gQ2hlY2sg
aWYgY3VzdG9tIG9wdGlvbnMgZXhpc3QuIElmIGFueSwgdHJ5IHRvIGxvYWQgaW1tdXRhYmxlIGNs
YXNzZXMgc2luY2UKLSAgLy8gY3VzdG9tIG9wdGlvbnMgYXJlIG9ubHkgcmVwcmVzZW50ZWQgd2l0
aCBpbW11dGFibGUgbWVzc2FnZXMuCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsK
LSAgZmlsZV8tPkNvcHlUbygmZmlsZV9wcm90byk7Ci0gIHN0cmluZyBmaWxlX2RhdGE7Ci0gIGZp
bGVfcHJvdG8uU2VyaWFsaXplVG9TdHJpbmcoJmZpbGVfZGF0YSk7Ci0gIEZpZWxkRGVzY3JpcHRv
clNldCBleHRlbnNpb25zOwotICBDb2xsZWN0RXh0ZW5zaW9ucyhmaWxlX3Byb3RvLCAqZmlsZV8t
PnBvb2woKSwgJmV4dGVuc2lvbnMsIGZpbGVfZGF0YSk7Ci0KLSAgaWYgKGV4dGVuc2lvbnMuc2l6
ZSgpID4gMCkgewotICAgIC8vIFRyeSB0byBsb2FkIGltbXV0YWJsZSBtZXNzYWdlcycgb3V0ZXIg
Y2xhc3MuIEl0cyBpbml0aWFsaXphdGlvbiBjb2RlCi0gICAgLy8gd2lsbCB0YWtlIGNhcmUgb2Yg
aW50ZXJwcmV0aW5nIGN1c3RvbSBvcHRpb25zLgotICAgIHByaW50ZXItPlByaW50KAotICAgICAg
InRyeSB7XG4iCi0gICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBsb2FkIHRoZSBpbW11dGFi
bGUgY2xhc3MgZHluYW1pY2FsbHkgaGVyZSBhcwotICAgICAgLy8gd2Ugd2FudCB0aGUgbXV0YWJs
ZSBjb2RlIHRvIGJlIGluZGVwZW5kZW50IGZyb20gdGhlIGltbXV0YWJsZSBjb2RlCi0gICAgICAv
LyBhdCBjb21waWxlIHRpbWUuIEl0IGlzIHJlcXVpcmVkIHRvIGltcGxlbWVudCBkdWFsLWNvbXBp
bGUgZm9yCi0gICAgICAvLyBtdXRhYmxlIGFuZCBpbW11dGFibGUgQVBJIGluIGJsYXplLgotICAg
ICAgIiAgamF2YS5sYW5nLkNsYXNzIGltbXV0YWJsZUNsYXNzID0gamF2YS5sYW5nLkNsYXNzLmZv
ck5hbWUoXG4iCi0gICAgICAiICAgICAgXCIkaW1tdXRhYmxlX2NsYXNzbmFtZSRcIik7XG4iCi0g
ICAgICAifSBjYXRjaCAoamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkge1xuIgot
ICAgICAgLy8gVGhlIGltbXV0YWJsZSBjbGFzcyBjYW4gbm90IGJlIGZvdW5kLiBDdXN0b20gb3B0
aW9ucyBhcmUgbGVmdAotICAgICAgLy8gYXMgdW5rbm93biBmaWVsZHMuCi0gICAgICAvLyBUT0RP
KHhpYW9mZW5nKTogaW5mb3JtIHRoZSB1c2VyIHdpdGggYSB3YXJuaW5nPwotICAgICAgIn1cbiIs
Ci0gICAgICAiaW1tdXRhYmxlX2NsYXNzbmFtZSIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFi
bGVDbGFzc05hbWUoZmlsZV8pKTsKLSAgfQotCi0gIC8vIEZvcmNlIGRlc2NyaXB0b3IgaW5pdGlh
bGl6YXRpb24gb2YgYWxsIGRlcGVuZGVuY2llcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxl
Xy0+ZGVwZW5kZW5jeV9jb3VudCgpOyBpKyspIHsKLSAgICBpZiAoU2hvdWxkSW5jbHVkZURlcGVu
ZGVuY3koZmlsZV8tPmRlcGVuZGVuY3koaSksIGZhbHNlKSkgewotICAgICAgc3RyaW5nIGRlcGVu
ZGVuY3kgPSBuYW1lX3Jlc29sdmVyXy0+R2V0TXV0YWJsZUNsYXNzTmFtZSgKLSAgICAgICAgICBm
aWxlXy0+ZGVwZW5kZW5jeShpKSk7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiRk
ZXBlbmRlbmN5JC5nZXREZXNjcmlwdG9yKCk7XG4iLAotICAgICAgICAiZGVwZW5kZW5jeSIsIGRl
cGVuZGVuY3kpOwotICAgIH0KLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgIn1cbiIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBHZW5lcmF0b3JD
bGFzcywgdHlwZW5hbWUgRGVzY3JpcHRvckNsYXNzPgotc3RhdGljIHZvaWQgR2VuZXJhdGVTaWJs
aW5nKGNvbnN0IHN0cmluZyYgcGFja2FnZV9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RyaW5nJiBqYXZhX3BhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRGVzY3JpcHRvckNsYXNzKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdlbmVyYXRvckNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmVjdG9yPHN0cmluZz4qIGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmcmIG5hbWVfc3VmZml4LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdlbmVyYXRvckNsYXNzKiBnZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAoR2VuZXJhdG9yQ2xhc3M6OipwZm4pKGlvOjpQcmludGVyKiBwcmludGVyKSkg
ewotICBzdHJpbmcgZmlsZW5hbWUgPSBwYWNrYWdlX2RpciArIGRlc2NyaXB0b3ItPm5hbWUoKSAr
IG5hbWVfc3VmZml4ICsgIi5qYXZhIjsKLSAgZmlsZV9saXN0LT5wdXNoX2JhY2soZmlsZW5hbWUp
OwotCi0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8aW86Olplcm9Db3B5T3V0cHV0U3Ry
ZWFtPiBvdXRwdXQoY29udGV4dC0+T3BlbihmaWxlbmFtZSkpOwotICBpbzo6UHJpbnRlciBwcmlu
dGVyKG91dHB1dC5nZXQoKSwgJyQnKTsKLQotICBwcmludGVyLlByaW50KAotICAgICIvLyBHZW5l
cmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIVxuIgot
ICAgICIvLyBzb3VyY2U6ICRmaWxlbmFtZSRcbiIKLSAgICAiXG4iLAotICAgICJmaWxlbmFtZSIs
IGRlc2NyaXB0b3ItPmZpbGUoKS0+bmFtZSgpKTsKLSAgaWYgKCFqYXZhX3BhY2thZ2UuZW1wdHko
KSkgewotICAgIHByaW50ZXIuUHJpbnQoCi0gICAgICAicGFja2FnZSAkcGFja2FnZSQ7XG4iCi0g
ICAgICAiXG4iLAotICAgICAgInBhY2thZ2UiLCBqYXZhX3BhY2thZ2UpOwotICB9Ci0KLSAgKGdl
bmVyYXRvci0+KnBmbikoJnByaW50ZXIpOwotfQotCi12b2lkIEZpbGVHZW5lcmF0b3I6OkdlbmVy
YXRlU2libGluZ3MoY29uc3Qgc3RyaW5nJiBwYWNrYWdlX2RpciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+KiBmaWxlX2xpc3QpIHsK
LSAgaWYgKE11bHRpcGxlSmF2YUZpbGVzKGZpbGVfLCBpbW11dGFibGVfYXBpXykpIHsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5lbnVtX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAg
ICBpZiAoSGFzRGVzY3JpcHRvck1ldGhvZHMoZmlsZV8sIGNvbnRleHRfLT5FbmZvcmNlTGl0ZSgp
KSkgewotICAgICAgICBFbnVtR2VuZXJhdG9yIGdlbmVyYXRvcihmaWxlXy0+ZW51bV90eXBlKGkp
LCBpbW11dGFibGVfYXBpXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dF8uZ2V0KCkpOwotICAgICAgICBHZW5lcmF0ZVNpYmxpbmc8RW51bUdlbmVyYXRvcj4ocGFja2Fn
ZV9kaXIsIGphdmFfcGFja2FnZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWxlXy0+ZW51bV90eXBlKGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dCwgZmlsZV9saXN0LCAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZnZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmRW51bUdlbmVyYXRvcjo6R2VuZXJhdGUpOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgRW51bUxpdGVHZW5lcmF0b3IgZ2VuZXJhdG9yKGZpbGVfLT5lbnVtX3R5cGUoaSksIGlt
bXV0YWJsZV9hcGlfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dF8uZ2V0KCkpOwotICAgICAgICBHZW5lcmF0ZVNpYmxpbmc8RW51bUxpdGVHZW5lcmF0b3I+KHBh
Y2thZ2VfZGlyLCBqYXZhX3BhY2thZ2VfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGVfLT5lbnVtX3R5cGUoaSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgZmlsZV9saXN0LCAiIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2VuZXJhdG9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFbnVtTGl0ZUdlbmVyYXRvcjo6R2VuZXJh
dGUpOwotICAgICAgfQotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5tZXNz
YWdlX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgICBpZiAoaW1tdXRhYmxlX2FwaV8pIHsKLSAg
ICAgICAgR2VuZXJhdGVTaWJsaW5nPE1lc3NhZ2VHZW5lcmF0b3I+KHBhY2thZ2VfZGlyLCBqYXZh
X3BhY2thZ2VfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls
ZV8tPm1lc3NhZ2VfdHlwZShpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQsIGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJPckJ1aWxkZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZV9nZW5lcmF0b3JzX1tpXS5nZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNZXNzYWdlR2VuZXJhdG9yOjpHZW5lcmF0ZUlu
dGVyZmFjZSk7Ci0gICAgICB9Ci0gICAgICBHZW5lcmF0ZVNpYmxpbmc8TWVzc2FnZUdlbmVyYXRv
cj4ocGFja2FnZV9kaXIsIGphdmFfcGFja2FnZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZV8tPm1lc3NhZ2VfdHlwZShpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBmaWxlX2xpc3QsICIiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZ2VuZXJhdG9yc19baV0uZ2V0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1lc3NhZ2VHZW5l
cmF0b3I6OkdlbmVyYXRlKTsKLSAgICB9Ci0gICAgaWYgKEhhc0dlbmVyaWNTZXJ2aWNlcyhmaWxl
XywgY29udGV4dF8tPkVuZm9yY2VMaXRlKCkpKSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGZpbGVfLT5zZXJ2aWNlX2NvdW50KCk7IGkrKykgewotICAgICAgICBnb29nbGU6OnByb3RvYnVm
OjpzY29wZWRfcHRyPFNlcnZpY2VHZW5lcmF0b3I+IGdlbmVyYXRvcigKLSAgICAgICAgICAgIGdl
bmVyYXRvcl9mYWN0b3J5Xy0+TmV3U2VydmljZUdlbmVyYXRvcihmaWxlXy0+c2VydmljZShpKSkp
OwotICAgICAgICBHZW5lcmF0ZVNpYmxpbmc8U2VydmljZUdlbmVyYXRvcj4ocGFja2FnZV9kaXIs
IGphdmFfcGFja2FnZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWxlXy0+c2VydmljZShpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQsIGZpbGVfbGlzdCwgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmU2VydmljZUdlbmVyYXRvcjo6R2VuZXJhdGUpOwotICAgICAg
fQotICAgIH0KLSAgfQotfQotCi1ib29sIEZpbGVHZW5lcmF0b3I6OlNob3VsZEluY2x1ZGVEZXBl
bmRlbmN5KAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBib29sIGltbXV0
YWJsZV9hcGkpIHsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19
ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8g
bmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9maWxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZh
X2ZpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RiZWI5NGVhZjBjYjFlMDM4
NGM4MGI4MDI1NjFkNzZlNTk3ZDZkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2ZpbGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRh
KQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAg
U2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5kZWYgR09PR0xF
X1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfRklMRV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVG
X0NPTVBJTEVSX0pBVkFfRklMRV9IX18KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NI
QVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+
Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1u
YW1lc3BhY2UgcHJvdG9idWYgewotICBjbGFzcyBGaWxlRGVzY3JpcHRvcjsgICAgICAgICAgLy8g
ZGVzY3JpcHRvci5oCi0gIG5hbWVzcGFjZSBpbyB7Ci0gICAgY2xhc3MgUHJpbnRlcjsgICAgICAg
ICAgICAgICAvLyBwcmludGVyLmgKLSAgfQotICBuYW1lc3BhY2UgY29tcGlsZXIgewotICAgIGNs
YXNzIEdlbmVyYXRvckNvbnRleHQ7ICAgICAgLy8gY29kZV9nZW5lcmF0b3IuaAotICAgIG5hbWVz
cGFjZSBqYXZhIHsKLSAgICAgIGNsYXNzIENvbnRleHQ7ICAgICAgICAgICAgIC8vIGNvbnRleHQu
aAotICAgICAgY2xhc3MgTWVzc2FnZUdlbmVyYXRvcjsgICAgLy8gbWVzc2FnZS5oCi0gICAgICBj
bGFzcyBHZW5lcmF0b3JGYWN0b3J5OyAgICAvLyBnZW5lcmF0b3JfZmFjdG9yeS5oCi0gICAgICBj
bGFzcyBFeHRlbnNpb25HZW5lcmF0b3I7ICAvLyBleHRlbnNpb24uaAotICAgICAgY2xhc3MgQ2xh
c3NOYW1lUmVzb2x2ZXI7ICAgLy8gbmFtZV9yZXNvbHZlci5oCi0gICAgfQotICB9Ci19Ci0KLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEg
ewotCi1jbGFzcyBGaWxlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIEZpbGVHZW5lcmF0b3IoY29u
c3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsIGJvb2wgaW1tdXRhYmxlX2FwaSA9IHRydWUsCi0gICAg
ICAgICAgICAgICAgYm9vbCBlbmZvcmNlX2xpdGUgPSBmYWxzZSk7Ci0gIH5GaWxlR2VuZXJhdG9y
KCk7Ci0KLSAgLy8gQ2hlY2tzIGZvciBwcm9ibGVtcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBsZWFk
IHRvIGNyeXB0aWMgY29tcGlsZSBlcnJvcnMuCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBh
cmUgbm8gcHJvYmxlbXMsIG9yIHdyaXRlcyBhbiBlcnJvciBkZXNjcmlwdGlvbiB0bwotICAvLyB0
aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KLSAgYm9vbCBWYWxp
ZGF0ZShzdHJpbmcqIGVycm9yKTsKLQotICB2b2lkIEdlbmVyYXRlKGlvOjpQcmludGVyKiBwcmlu
dGVyKTsKLQotICAvLyBJZiB3ZSBhcmVuJ3QgcHV0dGluZyBldmVyeXRoaW5nIGludG8gb25lIGZp
bGUsIHRoaXMgd2lsbCB3cml0ZSBhbGwgdGhlCi0gIC8vIGZpbGVzIG90aGVyIHRoYW4gdGhlIG91
dGVyIGZpbGUgKGkuZS4gb25lIGZvciBlYWNoIG1lc3NhZ2UsIGVudW0sIGFuZAotICAvLyBzZXJ2
aWNlIHR5cGUpLgotICB2b2lkIEdlbmVyYXRlU2libGluZ3MoY29uc3Qgc3RyaW5nJiBwYWNrYWdl
X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckNvbnRleHQqIGdlbmVyYXRv
cl9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4qIGZpbGVf
bGlzdCk7Ci0KLSAgY29uc3Qgc3RyaW5nJiBqYXZhX3BhY2thZ2UoKSB7IHJldHVybiBqYXZhX3Bh
Y2thZ2VfOyB9Ci0gIGNvbnN0IHN0cmluZyYgY2xhc3NuYW1lKCkgICAgeyByZXR1cm4gY2xhc3Nu
YW1lXzsgICAgfQotCi0KLSBwcml2YXRlOgotICB2b2lkIEdlbmVyYXRlRGVzY3JpcHRvckluaXRp
YWxpemF0aW9uQ29kZUZvckltbXV0YWJsZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQg
R2VuZXJhdGVEZXNjcmlwdG9ySW5pdGlhbGl6YXRpb25Db2RlRm9yTXV0YWJsZShpbzo6UHJpbnRl
ciogcHJpbnRlcik7Ci0KLSAgYm9vbCBTaG91bGRJbmNsdWRlRGVwZW5kZW5jeShjb25zdCBGaWxl
RGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGltbXV0YWJsZV9hcGlfKTsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZV87Ci0g
IHN0cmluZyBqYXZhX3BhY2thZ2VfOwotICBzdHJpbmcgY2xhc3NuYW1lXzsKLQotICBnb29nbGU6
OnByb3RvYnVmOjpzY29wZWRfYXJyYXk8Z29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxNZXNz
YWdlR2VuZXJhdG9yPiA+IG1lc3NhZ2VfZ2VuZXJhdG9yc187Ci0gIGdvb2dsZTo6cHJvdG9idWY6
OnNjb3BlZF9hcnJheTxnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPEV4dGVuc2lvbkdlbmVy
YXRvcj4gPiBleHRlbnNpb25fZ2VuZXJhdG9yc187Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3Bl
ZF9wdHI8R2VuZXJhdG9yRmFjdG9yeT4gZ2VuZXJhdG9yX2ZhY3RvcnlfOwotICBnb29nbGU6OnBy
b3RvYnVmOjpzY29wZWRfcHRyPENvbnRleHQ+IGNvbnRleHRfOwotICBDbGFzc05hbWVSZXNvbHZl
ciogbmFtZV9yZXNvbHZlcl87Ci0gIGJvb2wgaW1tdXRhYmxlX2FwaV87Ci0KLQotICBHT09HTEVf
RElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRmlsZUdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBu
YW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJP
VE9CVUZfQ09NUElMRVJfSkFWQV9GSUxFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3IuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2dlbmVyYXRvci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTQ2YzdmYzQxYTRhNWM3M2Q3ODIyYTQwYzg2NzVkMTA0MzRhMTFlNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2dlbmVyYXRvci5jYworKysgL2Rldi9udWxsCkBAIC0xLDE3NyAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBr
ZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFBy
b3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4s
IGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9q
YXZhX2dlbmVyYXRvci5oPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVEX1BU
Ul9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNlbmRp
ZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9maWxlLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3Jf
ZmFjdG9yeS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
aGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
c2hhcmVkX2NvZGVfZ2VuZXJhdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3By
aW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1u
YW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZh
IHsKLQotCi1KYXZhR2VuZXJhdG9yOjpKYXZhR2VuZXJhdG9yKCkge30KLUphdmFHZW5lcmF0b3I6
On5KYXZhR2VuZXJhdG9yKCkge30KLQotYm9vbCBKYXZhR2VuZXJhdG9yOjpHZW5lcmF0ZShjb25z
dCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVy
YXRvckNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlu
ZyogZXJyb3IpIGNvbnN0IHsKLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gcGFyc2UgZ2VuZXJhdG9yIG9w
dGlvbnMKLQotICAvLyBOYW1lIGEgZmlsZSB3aGVyZSB3ZSB3aWxsIHdyaXRlIGEgbGlzdCBvZiBn
ZW5lcmF0ZWQgZmlsZSBuYW1lcywgb25lCi0gIC8vIHBlciBsaW5lLgotICBzdHJpbmcgb3V0cHV0
X2xpc3RfZmlsZTsKLQotCi0gIHZlY3RvcjxwYWlyPHN0cmluZywgc3RyaW5nPiA+IG9wdGlvbnM7
Ci0gIFBhcnNlR2VuZXJhdG9yUGFyYW1ldGVyKHBhcmFtZXRlciwgJm9wdGlvbnMpOwotCi0gIGJv
b2wgZ2VuZXJhdGVfaW1tdXRhYmxlX2NvZGUgPSBmYWxzZTsKLSAgYm9vbCBnZW5lcmF0ZV9tdXRh
YmxlX2NvZGUgPSBmYWxzZTsKLSAgYm9vbCBnZW5lcmF0ZV9zaGFyZWRfY29kZSA9IGZhbHNlOwot
ICBib29sIGVuZm9yY2VfbGl0ZSA9IGZhbHNlOwotICBmb3IgKGludCBpID0gMDsgaSA8IG9wdGlv
bnMuc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAob3B0aW9uc1tpXS5maXJzdCA9PSAib3V0cHV0X2xp
c3RfZmlsZSIpIHsKLSAgICAgIG91dHB1dF9saXN0X2ZpbGUgPSBvcHRpb25zW2ldLnNlY29uZDsK
LSAgICB9IGVsc2UgaWYgKG9wdGlvbnNbaV0uZmlyc3QgPT0gImltbXV0YWJsZSIpIHsKLSAgICAg
IGdlbmVyYXRlX2ltbXV0YWJsZV9jb2RlID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKG9wdGlvbnNb
aV0uZmlyc3QgPT0gIm11dGFibGUiKSB7Ci0gICAgICBnZW5lcmF0ZV9tdXRhYmxlX2NvZGUgPSB0
cnVlOwotICAgIH0gZWxzZSBpZiAob3B0aW9uc1tpXS5maXJzdCA9PSAic2hhcmVkIikgewotICAg
ICAgZ2VuZXJhdGVfc2hhcmVkX2NvZGUgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAob3B0aW9uc1tp
XS5maXJzdCA9PSAibGl0ZSIpIHsKLSAgICAgIC8vIFdoZW4gc2V0LCB0aGUgcHJvdG9jIHdpbGwg
Z2VuZXJhdGUgdGhlIGN1cnJlbnQgZmlsZXMgYW5kIGFsbCB0aGUKLSAgICAgIC8vIHRyYW5zaXRp
dmUgZGVwZW5kZW5jaWVzIGFzIGxpdGUgcnVudGltZS4KLSAgICAgIGVuZm9yY2VfbGl0ZSA9IHRy
dWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICplcnJvciA9ICJVbmtub3duIGdlbmVyYXRvciBvcHRp
b246ICIgKyBvcHRpb25zW2ldLmZpcnN0OwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
fQotCi0gIGlmIChlbmZvcmNlX2xpdGUgJiYgZ2VuZXJhdGVfbXV0YWJsZV9jb2RlKSB7Ci0gICAg
KmVycm9yID0gImxpdGUgcnVudGltZSBnZW5lcmF0b3Igb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdp
dGggbXV0YWJsZSBBUEkuIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBCeSBkZWZh
dWx0IHdlIGdlbmVyYXRlIGltbXV0YWJsZSBjb2RlIGFuZCBzaGFyZWQgY29kZSBmb3IgaW1tdXRh
YmxlIEFQSS4KLSAgaWYgKCFnZW5lcmF0ZV9pbW11dGFibGVfY29kZSAmJiAhZ2VuZXJhdGVfbXV0
YWJsZV9jb2RlICYmCi0gICAgICAhZ2VuZXJhdGVfc2hhcmVkX2NvZGUpIHsKLSAgICBnZW5lcmF0
ZV9pbW11dGFibGVfY29kZSA9IHRydWU7Ci0gICAgZ2VuZXJhdGVfc2hhcmVkX2NvZGUgPSB0cnVl
OwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi0gIHZlY3RvcjxzdHJpbmc+IGFsbF9maWxlczsK
LQotCi0gIHZlY3RvcjxGaWxlR2VuZXJhdG9yKj4gZmlsZV9nZW5lcmF0b3JzOwotICBpZiAoZ2Vu
ZXJhdGVfaW1tdXRhYmxlX2NvZGUpIHsKLSAgICBmaWxlX2dlbmVyYXRvcnMucHVzaF9iYWNrKAot
ICAgICAgICBuZXcgRmlsZUdlbmVyYXRvcihmaWxlLCAvKiBpbW11dGFibGUgPSAqLyB0cnVlLCBl
bmZvcmNlX2xpdGUpKTsKLSAgfQotICBpZiAoZ2VuZXJhdGVfbXV0YWJsZV9jb2RlKSB7Ci0gICAg
ZmlsZV9nZW5lcmF0b3JzLnB1c2hfYmFjaygKLSAgICAgICAgbmV3IEZpbGVHZW5lcmF0b3IoZmls
ZSwgLyogbXV0YWJsZSA9ICovIGZhbHNlLCBlbmZvcmNlX2xpdGUpKTsKLSAgfQotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZpbGVfZ2VuZXJhdG9ycy5zaXplKCk7ICsraSkgewotICAgIGlmICghZmls
ZV9nZW5lcmF0b3JzW2ldLT5WYWxpZGF0ZShlcnJvcikpIHsKLSAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgZmlsZV9nZW5lcmF0b3JzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgIGRlbGV0ZSBmaWxl
X2dlbmVyYXRvcnNbal07Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9
Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlX2dlbmVyYXRvcnMuc2l6ZSgpOyArK2kpIHsK
LSAgICBGaWxlR2VuZXJhdG9yKiBmaWxlX2dlbmVyYXRvciA9IGZpbGVfZ2VuZXJhdG9yc1tpXTsK
LQotICAgIHN0cmluZyBwYWNrYWdlX2RpciA9IEphdmFQYWNrYWdlVG9EaXIoZmlsZV9nZW5lcmF0
b3ItPmphdmFfcGFja2FnZSgpKTsKLQotICAgIHN0cmluZyBqYXZhX2ZpbGVuYW1lID0gcGFja2Fn
ZV9kaXI7Ci0gICAgamF2YV9maWxlbmFtZSArPSBmaWxlX2dlbmVyYXRvci0+Y2xhc3NuYW1lKCk7
Ci0gICAgamF2YV9maWxlbmFtZSArPSAiLmphdmEiOwotICAgIGFsbF9maWxlcy5wdXNoX2JhY2so
amF2YV9maWxlbmFtZSk7Ci0KLSAgICAvLyBHZW5lcmF0ZSBtYWluIGphdmEgZmlsZS4KLSAgICBn
b29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPGlvOjpaZXJvQ29weU91dHB1dFN0cmVhbT4gb3V0
cHV0KAotICAgICAgICBjb250ZXh0LT5PcGVuKGphdmFfZmlsZW5hbWUpKTsKLSAgICBpbzo6UHJp
bnRlciBwcmludGVyKG91dHB1dC5nZXQoKSwgJyQnKTsKLSAgICBmaWxlX2dlbmVyYXRvci0+R2Vu
ZXJhdGUoJnByaW50ZXIpOwotCi0gICAgLy8gR2VuZXJhdGUgc2libGluZyBmaWxlcy4KLSAgICBm
aWxlX2dlbmVyYXRvci0+R2VuZXJhdGVTaWJsaW5ncyhwYWNrYWdlX2RpciwgY29udGV4dCwgJmFs
bF9maWxlcyk7Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfZ2VuZXJhdG9ycy5z
aXplKCk7ICsraSkgewotICAgIGRlbGV0ZSBmaWxlX2dlbmVyYXRvcnNbaV07Ci0gIH0KLSAgZmls
ZV9nZW5lcmF0b3JzLmNsZWFyKCk7Ci0KLSAgLy8gR2VuZXJhdGUgb3V0cHV0IGxpc3QgaWYgcmVx
dWVzdGVkLgotICBpZiAoIW91dHB1dF9saXN0X2ZpbGUuZW1wdHkoKSkgewotICAgIC8vIEdlbmVy
YXRlIG91dHB1dCBsaXN0LiAgVGhpcyBpcyBqdXN0IGEgc2ltcGxlIHRleHQgZmlsZSBwbGFjZWQg
aW4gYQotICAgIC8vIGRldGVybWluaXN0aWMgbG9jYXRpb24gd2hpY2ggbGlzdHMgdGhlIC5qYXZh
IGZpbGVzIGJlaW5nIGdlbmVyYXRlZC4KLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRy
PGlvOjpaZXJvQ29weU91dHB1dFN0cmVhbT4gc3JjbGlzdF9yYXdfb3V0cHV0KAotICAgICAgICBj
b250ZXh0LT5PcGVuKG91dHB1dF9saXN0X2ZpbGUpKTsKLSAgICBpbzo6UHJpbnRlciBzcmNsaXN0
X3ByaW50ZXIoc3JjbGlzdF9yYXdfb3V0cHV0LmdldCgpLCAnJCcpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYWxsX2ZpbGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBzcmNsaXN0X3ByaW50ZXIu
UHJpbnQoIiRmaWxlbmFtZSRcbiIsICJmaWxlbmFtZSIsIGFsbF9maWxlc1tpXSk7Ci0gICAgfQot
ICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBu
YW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNw
YWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEv
amF2YV9nZW5lcmF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
Z2VuZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Zjc2YmU5ODNkMWFj
MWFlYTFhYjE4N2FjNzQ1MWFhMGM3YzQwOWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9n
ZW5lcmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50
b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24g
YnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBH
ZW5lcmF0ZXMgSmF2YSBjb2RlIGZvciBhIGdpdmVuIC5wcm90byBmaWxlLgotCi0jaWZuZGVmIEdP
T0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX0dFTkVSQVRPUl9IX18KLSNkZWZpbmUgR09PR0xF
X1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfR0VORVJBVE9SX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5n
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29t
cGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi0vLyBDb2RlR2VuZXJhdG9yIGltcGxlbWVudGF0
aW9uIHdoaWNoIGdlbmVyYXRlcyBKYXZhIGNvZGUuICBJZiB5b3UgY3JlYXRlIHlvdXIKLS8vIG93
biBwcm90b2NvbCBjb21waWxlciBiaW5hcnkgYW5kIHlvdSB3YW50IGl0IHRvIHN1cHBvcnQgSmF2
YSBvdXRwdXQsIHlvdQotLy8gY2FuIGRvIHNvIGJ5IHJlZ2lzdGVyaW5nIGFuIGluc3RhbmNlIG9m
IHRoaXMgQ29kZUdlbmVyYXRvciB3aXRoIHRoZQotLy8gQ29tbWFuZExpbmVJbnRlcmZhY2UgaW4g
eW91ciBtYWluKCkgZnVuY3Rpb24uCi1jbGFzcyBMSUJQUk9UT0NfRVhQT1JUIEphdmFHZW5lcmF0
b3IgOiBwdWJsaWMgQ29kZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBKYXZhR2VuZXJhdG9yKCk7
Ci0gIH5KYXZhR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBDb2RlR2VuZXJhdG9yIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgYm9vbCBHZW5lcmF0ZShj
b25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcm
IHBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3JDb250ZXh0KiBjb250ZXh0LAot
ICAgICAgICAgICAgICAgIHN0cmluZyogZXJyb3IpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgR09P
R0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEphdmFHZW5lcmF0b3IpOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNw
YWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xF
X1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfR0VORVJBVE9SX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3JfZmFjdG9yeS5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZ2VuZXJhdG9yX2ZhY3RvcnkuY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMThiNDEwNzY0OGQxNDA2MjUzNDBlNDk5
NTAxZDRlYTQ0NDE1ZmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3JfZmFj
dG9yeS5jYworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGxpdWppc2lAZ29vZ2xlLmNvbSAoUGhlcmwg
TGl1KQotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5l
cmF0b3JfZmFjdG9yeS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9lbnVtX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9leHRlbnNpb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvamF2YS9qYXZhX2V4dGVuc2lvbl9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmEvamF2YV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2phdmEvamF2YV9zZXJ2aWNlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewot
bmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2
YSB7Ci0KLUdlbmVyYXRvckZhY3Rvcnk6OkdlbmVyYXRvckZhY3RvcnkoKSB7fQotR2VuZXJhdG9y
RmFjdG9yeTo6fkdlbmVyYXRvckZhY3RvcnkoKSB7fQotCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUltbXV0
YWJsZUdlbmVyYXRvckZhY3Rvcnk6OkltbXV0YWJsZUdlbmVyYXRvckZhY3RvcnkoCi0gICAgQ29u
dGV4dCogY29udGV4dCkgOiBjb250ZXh0Xyhjb250ZXh0KSB7Ci19Ci1JbW11dGFibGVHZW5lcmF0
b3JGYWN0b3J5Ojp+SW1tdXRhYmxlR2VuZXJhdG9yRmFjdG9yeSgpIHt9Ci0KLU1lc3NhZ2VHZW5l
cmF0b3IqIEltbXV0YWJsZUdlbmVyYXRvckZhY3Rvcnk6Ok5ld01lc3NhZ2VHZW5lcmF0b3IoCi0g
ICAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgY29uc3QgewotICBpZiAoSGFzRGVzY3Jp
cHRvck1ldGhvZHMoZGVzY3JpcHRvciwgY29udGV4dF8tPkVuZm9yY2VMaXRlKCkpKSB7Ci0gICAg
cmV0dXJuIG5ldyBJbW11dGFibGVNZXNzYWdlR2VuZXJhdG9yKGRlc2NyaXB0b3IsIGNvbnRleHRf
KTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gbmV3IEltbXV0YWJsZU1lc3NhZ2VMaXRlR2VuZXJh
dG9yKGRlc2NyaXB0b3IsIGNvbnRleHRfKTsKLSAgfQotfQotCi1FeHRlbnNpb25HZW5lcmF0b3Iq
IEltbXV0YWJsZUdlbmVyYXRvckZhY3Rvcnk6Ok5ld0V4dGVuc2lvbkdlbmVyYXRvcigKLSAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIGNvbnN0IHsKLSAgaWYgKEhhc0Rlc2Ny
aXB0b3JNZXRob2RzKGRlc2NyaXB0b3ItPmZpbGUoKSwgY29udGV4dF8tPkVuZm9yY2VMaXRlKCkp
KSB7Ci0gICAgcmV0dXJuIG5ldyBJbW11dGFibGVFeHRlbnNpb25HZW5lcmF0b3IoZGVzY3JpcHRv
ciwgY29udGV4dF8pOwotICB9IGVsc2UgewotICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRXh0ZW5z
aW9uTGl0ZUdlbmVyYXRvcihkZXNjcmlwdG9yLCBjb250ZXh0Xyk7Ci0gIH0KLX0KLQotU2Vydmlj
ZUdlbmVyYXRvciogSW1tdXRhYmxlR2VuZXJhdG9yRmFjdG9yeTo6TmV3U2VydmljZUdlbmVyYXRv
cigKLSAgICBjb25zdCBTZXJ2aWNlRGVzY3JpcHRvciogZGVzY3JpcHRvcikgY29uc3QgewotICBy
ZXR1cm4gbmV3IEltbXV0YWJsZVNlcnZpY2VHZW5lcmF0b3IoZGVzY3JpcHRvciwgY29udGV4dF8p
OwotfQotCi0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIK
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3JfZmFj
dG9yeS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3Jf
ZmFjdG9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTM2NWE5ZDRlOTRmYWVm
Y2Q4NGY0MWM1ODBiY2E5OTNmNzgyYWUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZ2Vu
ZXJhdG9yX2ZhY3RvcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBsaXVqaXNpQGdvb2dsZS5j
b20gKFBoZXJsIExpdSkKLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9H
RU5FUkFUT1JfRkFDVE9SWV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pB
VkFfR0VORVJBVE9SX0ZBQ1RPUllfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvY29tbW9uLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LSAgY2xhc3MgRmllbGREZXNjcmlwdG9yOyAgICAgICAgIC8vIGRlc2NyaXB0b3IuaAotICBjbGFz
cyBEZXNjcmlwdG9yOyAgICAgICAgICAgICAgLy8gZGVzY3JpcHRvci5oCi0gIGNsYXNzIFNlcnZp
Y2VEZXNjcmlwdG9yOyAgICAgICAvLyBkZXNjcmlwdG9yLmgKLSAgbmFtZXNwYWNlIGNvbXBpbGVy
IHsKLSAgICBuYW1lc3BhY2UgamF2YSB7Ci0gICAgICBjbGFzcyBNZXNzYWdlR2VuZXJhdG9yOyAg
ICAvLyBtZXNzYWdlLmgKLSAgICAgIGNsYXNzIEV4dGVuc2lvbkdlbmVyYXRvcjsgIC8vIGV4dGVu
c2lvbi5oCi0gICAgICBjbGFzcyBTZXJ2aWNlR2VuZXJhdG9yOyAgICAvLyBzZXJ2aWNlLmgKLSAg
ICAgIGNsYXNzIENvbnRleHQ7ICAgICAgICAgICAgIC8vIGNvbnRleHQuaAotICAgIH0KLSAgfQot
fQotCi1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFj
ZSBqYXZhIHsKLQotY2xhc3MgR2VuZXJhdG9yRmFjdG9yeSB7Ci0gcHVibGljOgotICBHZW5lcmF0
b3JGYWN0b3J5KCk7Ci0gIHZpcnR1YWwgfkdlbmVyYXRvckZhY3RvcnkoKTsKLQotICB2aXJ0dWFs
IE1lc3NhZ2VHZW5lcmF0b3IqIE5ld01lc3NhZ2VHZW5lcmF0b3IoCi0gICAgICBjb25zdCBEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yKSBjb25zdCA9IDA7Ci0KLSAgdmlydHVhbCBFeHRlbnNpb25HZW5l
cmF0b3IqIE5ld0V4dGVuc2lvbkdlbmVyYXRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZGVzY3JpcHRvcikgY29uc3QgPSAwOwotCi0gIHZpcnR1YWwgU2VydmljZUdlbmVyYXRvciog
TmV3U2VydmljZUdlbmVyYXRvcigKLSAgICAgIGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yKiBkZXNj
cmlwdG9yKSBjb25zdCA9IDA7Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9D
T05TVFJVQ1RPUlMoR2VuZXJhdG9yRmFjdG9yeSk7Ci19OwotCi0vLyBGYWN0b3J5IHRoYXQgY3Jl
YXRlcyBnZW5lcmF0b3JzIGZvciBpbW11dGFibGUtZGVmYXVsdCBtZXNzYWdlcy4KLWNsYXNzIElt
bXV0YWJsZUdlbmVyYXRvckZhY3RvcnkgOiBwdWJsaWMgR2VuZXJhdG9yRmFjdG9yeSB7Ci0gcHVi
bGljOgotICBJbW11dGFibGVHZW5lcmF0b3JGYWN0b3J5KENvbnRleHQqIGNvbnRleHQpOwotICB2
aXJ0dWFsIH5JbW11dGFibGVHZW5lcmF0b3JGYWN0b3J5KCk7Ci0KLSAgdmlydHVhbCBNZXNzYWdl
R2VuZXJhdG9yKiBOZXdNZXNzYWdlR2VuZXJhdG9yKAotICAgICAgY29uc3QgRGVzY3JpcHRvciog
ZGVzY3JpcHRvcikgY29uc3Q7Ci0KLSAgdmlydHVhbCBFeHRlbnNpb25HZW5lcmF0b3IqIE5ld0V4
dGVuc2lvbkdlbmVyYXRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRv
cikgY29uc3Q7Ci0KLSAgdmlydHVhbCBTZXJ2aWNlR2VuZXJhdG9yKiBOZXdTZXJ2aWNlR2VuZXJh
dG9yKAotICAgICAgY29uc3QgU2VydmljZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIGNvbnN0Owot
Ci0gcHJpdmF0ZToKLSAgQ29udGV4dCogY29udGV4dF87Ci0gIEdPT0dMRV9ESVNBTExPV19FVklM
X0NPTlNUUlVDVE9SUyhJbW11dGFibGVHZW5lcmF0b3JGYWN0b3J5KTsKLX07Ci0KLQotfSAgLy8g
bmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BS
T1RPQlVGX0NPTVBJTEVSX0pBVkFfR0VORVJBVE9SX0ZBQ1RPUllfSF9fCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGUyNDg5NGIxYjk1YjE4YTAxOWE1NDI5ZjY0NjcxMTM1OTdjYzExZmUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9oZWxwZXJzLmNjCisrKyAvZGV2L251bGwKQEAg
LTEsNzU3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBB
dXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3Jp
Z2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEpl
ZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRl
IDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZh
X2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZh
X25hbWVfcmVzb2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5w
Yi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3N1YnN0aXR1dGUuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2Ug
cHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhIHsKLQotdXNp
bmcgaW50ZXJuYWw6OldpcmVGb3JtYXQ7Ci11c2luZyBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU7
Ci0KLWNvbnN0IGNoYXIga1RoaWNrU2VwYXJhdG9yW10gPQotICAiLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsK
LWNvbnN0IGNoYXIga1RoaW5TZXBhcmF0b3JbXSA9Ci0gICIvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwotCi1u
YW1lc3BhY2UgewotCi1jb25zdCBjaGFyKiBrRGVmYXVsdFBhY2thZ2UgPSAiIjsKLQotLy8gTmFt
ZXMgdGhhdCBzaG91bGQgYmUgYXZvaWRlZCBhcyBmaWVsZCBuYW1lcy4KLS8vIFVzaW5nIHRoZW0g
d2lsbCBjYXVzZSB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgYWNjZXNzb3JzIHdob3NlIG5hbWVz
IGFyZQotLy8gY29sbGlkaW5nIHdpdGggbWV0aG9kcyBkZWZpbmVkIGluIGJhc2UgY2xhc3Nlcy4K
LWNvbnN0IGNoYXIqIGtGb3JiaWRkZW5Xb3JkTGlzdFtdID0gewotICAvLyBtZXNzYWdlIGJhc2Ug
Y2xhc3M6Ci0gICJjYWNoZWRfc2l6ZSIsICJzZXJpYWxpemVkX3NpemUiLAotICAvLyBqYXZhLmxh
bmcuT2JqZWN0OgotICAiY2xhc3MiLAotfTsKLQotYm9vbCBJc0ZvcmJpZGRlbihjb25zdCBzdHJp
bmcmIGZpZWxkX25hbWUpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBHT09HTEVfQVJSQVlTSVpF
KGtGb3JiaWRkZW5Xb3JkTGlzdCk7ICsraSkgewotICAgIGlmIChmaWVsZF9uYW1lID09IGtGb3Ji
aWRkZW5Xb3JkTGlzdFtpXSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIHJl
dHVybiBmYWxzZTsKLX0KLQotc3RyaW5nIEZpZWxkTmFtZShjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkKSB7Ci0gIHN0cmluZyBmaWVsZF9uYW1lOwotICAvLyBHcm91cHMgYXJlIGhhY2t5OiAg
VGhlIG5hbWUgb2YgdGhlIGZpZWxkIGlzIGp1c3QgdGhlIGxvd2VyLWNhc2VkIG5hbWUKLSAgLy8g
b2YgdGhlIGdyb3VwIHR5cGUuICBJbiBKYXZhLCB0aG91Z2gsIHdlIHdvdWxkIGxpa2UgdG8gcmV0
YWluIHRoZSBvcmlnaW5hbAotICAvLyBjYXBpdGFsaXphdGlvbiBvZiB0aGUgdHlwZSBuYW1lLgot
ICBpZiAoR2V0VHlwZShmaWVsZCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQKSB7Ci0g
ICAgZmllbGRfbmFtZSA9IGZpZWxkLT5tZXNzYWdlX3R5cGUoKS0+bmFtZSgpOwotICB9IGVsc2Ug
ewotICAgIGZpZWxkX25hbWUgPSBmaWVsZC0+bmFtZSgpOwotICB9Ci0gIGlmIChJc0ZvcmJpZGRl
bihmaWVsZF9uYW1lKSkgewotICAgIC8vIEFwcGVuZCBhIHRyYWlsaW5nICIjIiB0byBpbmRpY2F0
ZSB0aGF0IHRoZSBuYW1lIHNob3VsZCBiZSBkZWNvcmF0ZWQgdG8KLSAgICAvLyBhdm9pZCBjb2xs
aXNpb24gd2l0aCBvdGhlciBuYW1lcy4KLSAgICBmaWVsZF9uYW1lICs9ICIjIjsKLSAgfQotICBy
ZXR1cm4gZmllbGRfbmFtZTsKLX0KLQotCi19ICAvLyBuYW1lc3BhY2UKLQotc3RyaW5nIFVuZGVy
c2NvcmVzVG9DYW1lbENhc2UoY29uc3Qgc3RyaW5nJiBpbnB1dCwgYm9vbCBjYXBfbmV4dF9sZXR0
ZXIpIHsKLSAgc3RyaW5nIHJlc3VsdDsKLSAgLy8gTm90ZTogIEkgZGlzdHJ1c3QgY3R5cGUuaCBk
dWUgdG8gbG9jYWxlcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7IGkrKykg
ewotICAgIGlmICgnYScgPD0gaW5wdXRbaV0gJiYgaW5wdXRbaV0gPD0gJ3onKSB7Ci0gICAgICBp
ZiAoY2FwX25leHRfbGV0dGVyKSB7Ci0gICAgICAgIHJlc3VsdCArPSBpbnB1dFtpXSArICgnQScg
LSAnYScpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ICs9IGlucHV0W2ldOwotICAg
ICAgfQotICAgICAgY2FwX25leHRfbGV0dGVyID0gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICgnQScg
PD0gaW5wdXRbaV0gJiYgaW5wdXRbaV0gPD0gJ1onKSB7Ci0gICAgICBpZiAoaSA9PSAwICYmICFj
YXBfbmV4dF9sZXR0ZXIpIHsKLSAgICAgICAgLy8gRm9yY2UgZmlyc3QgbGV0dGVyIHRvIGxvd2Vy
LWNhc2UgdW5sZXNzIGV4cGxpY2l0bHkgdG9sZCB0bwotICAgICAgICAvLyBjYXBpdGFsaXplIGl0
LgotICAgICAgICByZXN1bHQgKz0gaW5wdXRbaV0gKyAoJ2EnIC0gJ0EnKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIENhcGl0YWwgbGV0dGVycyBhZnRlciB0aGUgZmlyc3QgYXJlIGxlZnQg
YXMtaXMuCi0gICAgICAgIHJlc3VsdCArPSBpbnB1dFtpXTsKLSAgICAgIH0KLSAgICAgIGNhcF9u
ZXh0X2xldHRlciA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAoJzAnIDw9IGlucHV0W2ldICYmIGlu
cHV0W2ldIDw9ICc5JykgewotICAgICAgcmVzdWx0ICs9IGlucHV0W2ldOwotICAgICAgY2FwX25l
eHRfbGV0dGVyID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgY2FwX25leHRfbGV0dGVyID0g
dHJ1ZTsKLSAgICB9Ci0gIH0KLSAgLy8gQWRkIGEgdHJhaWxpbmcgIl8iIGlmIHRoZSBuYW1lIHNo
b3VsZCBiZSBhbHRlcmVkLgotICBpZiAoaW5wdXRbaW5wdXQuc2l6ZSgpIC0gMV0gPT0gJyMnKSB7
Ci0gICAgcmVzdWx0ICs9ICdfJzsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdHJpbmcg
VW5kZXJzY29yZXNUb0NhbWVsQ2FzZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0g
IHJldHVybiBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKEZpZWxkTmFtZShmaWVsZCksIGZhbHNlKTsK
LX0KLQotc3RyaW5nIFVuZGVyc2NvcmVzVG9DYXBpdGFsaXplZENhbWVsQ2FzZShjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHJldHVybiBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKEZp
ZWxkTmFtZShmaWVsZCksIHRydWUpOwotfQotCi1zdHJpbmcgVW5kZXJzY29yZXNUb0NhbWVsQ2Fz
ZShjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2QpIHsKLSAgcmV0dXJuIFVuZGVyc2NvcmVz
VG9DYW1lbENhc2UobWV0aG9kLT5uYW1lKCksIGZhbHNlKTsKLX0KLQotc3RyaW5nIFVuaXF1ZUZp
bGVTY29wZUlkZW50aWZpZXIoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICByZXR1
cm4gInN0YXRpY18iICsgU3RyaW5nUmVwbGFjZShkZXNjcmlwdG9yLT5mdWxsX25hbWUoKSwgIi4i
LCAiXyIsIHRydWUpOwotfQotCi1zdHJpbmcgU3RyaXBQcm90byhjb25zdCBzdHJpbmcmIGZpbGVu
YW1lKSB7Ci0gIGlmIChIYXNTdWZmaXhTdHJpbmcoZmlsZW5hbWUsICIucHJvdG9kZXZlbCIpKSB7
Ci0gICAgcmV0dXJuIFN0cmlwU3VmZml4U3RyaW5nKGZpbGVuYW1lLCAiLnByb3RvZGV2ZWwiKTsK
LSAgfSBlbHNlIHsKLSAgICByZXR1cm4gU3RyaXBTdWZmaXhTdHJpbmcoZmlsZW5hbWUsICIucHJv
dG8iKTsKLSAgfQotfQotCi1zdHJpbmcgRmlsZUNsYXNzTmFtZShjb25zdCBGaWxlRGVzY3JpcHRv
ciogZmlsZSwgYm9vbCBpbW11dGFibGUpIHsKLSAgQ2xhc3NOYW1lUmVzb2x2ZXIgbmFtZV9yZXNv
bHZlcjsKLSAgcmV0dXJuIG5hbWVfcmVzb2x2ZXIuR2V0RmlsZUNsYXNzTmFtZShmaWxlLCBpbW11
dGFibGUpOwotfQotCi1zdHJpbmcgRmlsZUphdmFQYWNrYWdlKGNvbnN0IEZpbGVEZXNjcmlwdG9y
KiBmaWxlLCBib29sIGltbXV0YWJsZSkgewotICBzdHJpbmcgcmVzdWx0OwotCi0gIGlmIChmaWxl
LT5vcHRpb25zKCkuaGFzX2phdmFfcGFja2FnZSgpKSB7Ci0gICAgcmVzdWx0ID0gZmlsZS0+b3B0
aW9ucygpLmphdmFfcGFja2FnZSgpOwotICB9IGVsc2UgewotICAgIHJlc3VsdCA9IGtEZWZhdWx0
UGFja2FnZTsKLSAgICBpZiAoIWZpbGUtPnBhY2thZ2UoKS5lbXB0eSgpKSB7Ci0gICAgICBpZiAo
IXJlc3VsdC5lbXB0eSgpKSByZXN1bHQgKz0gJy4nOwotICAgICAgcmVzdWx0ICs9IGZpbGUtPnBh
Y2thZ2UoKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdHJpbmcgSmF2
YVBhY2thZ2VUb0RpcihzdHJpbmcgcGFja2FnZV9uYW1lKSB7Ci0gIHN0cmluZyBwYWNrYWdlX2Rp
ciA9Ci0gICAgU3RyaW5nUmVwbGFjZShwYWNrYWdlX25hbWUsICIuIiwgIi8iLCB0cnVlKTsKLSAg
aWYgKCFwYWNrYWdlX2Rpci5lbXB0eSgpKSBwYWNrYWdlX2RpciArPSAiLyI7Ci0gIHJldHVybiBw
YWNrYWdlX2RpcjsKLX0KLQotLy8gVE9ETyh4aWFvZmVuZyk6IFRoaXMgZnVuY3Rpb24gaXMgb25s
eSBrZXB0IGZvciBpdCdzIHB1YmxpY2x5IHJlZmVyZW5jZWQuCi0vLyBJdCBzaG91bGQgYmUgcmVt
b3ZlZCBhZnRlciBtdXRhYmxlIEFQSSB1cC1pbnRlZ3JhdGlvbi4KLXN0cmluZyBUb0phdmFOYW1l
KGNvbnN0IHN0cmluZyYgZnVsbF9uYW1lLAotICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURl
c2NyaXB0b3IqIGZpbGUpIHsKLSAgc3RyaW5nIHJlc3VsdDsKLSAgaWYgKGZpbGUtPm9wdGlvbnMo
KS5qYXZhX211bHRpcGxlX2ZpbGVzKCkpIHsKLSAgICByZXN1bHQgPSBGaWxlSmF2YVBhY2thZ2Uo
ZmlsZSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0ID0gQ2xhc3NOYW1lKGZpbGUpOwotICB9Ci0g
IGlmICghcmVzdWx0LmVtcHR5KCkpIHsKLSAgICByZXN1bHQgKz0gJy4nOwotICB9Ci0gIGlmIChm
aWxlLT5wYWNrYWdlKCkuZW1wdHkoKSkgewotICAgIHJlc3VsdCArPSBmdWxsX25hbWU7Ci0gIH0g
ZWxzZSB7Ci0gICAgLy8gU3RyaXAgdGhlIHByb3RvIHBhY2thZ2UgZnJvbSBmdWxsX25hbWUgc2lu
Y2Ugd2UndmUgcmVwbGFjZWQgaXQgd2l0aAotICAgIC8vIHRoZSBKYXZhIHBhY2thZ2UuCi0gICAg
cmVzdWx0ICs9IGZ1bGxfbmFtZS5zdWJzdHIoZmlsZS0+cGFja2FnZSgpLnNpemUoKSArIDEpOwot
ICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0cmluZyBDbGFzc05hbWUoY29uc3QgRGVzY3Jp
cHRvciogZGVzY3JpcHRvcikgewotICBDbGFzc05hbWVSZXNvbHZlciBuYW1lX3Jlc29sdmVyOwot
ICByZXR1cm4gbmFtZV9yZXNvbHZlci5HZXRDbGFzc05hbWUoZGVzY3JpcHRvciwgdHJ1ZSk7Ci19
Ci0KLXN0cmluZyBDbGFzc05hbWUoY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsK
LSAgQ2xhc3NOYW1lUmVzb2x2ZXIgbmFtZV9yZXNvbHZlcjsKLSAgcmV0dXJuIG5hbWVfcmVzb2x2
ZXIuR2V0Q2xhc3NOYW1lKGRlc2NyaXB0b3IsIHRydWUpOwotfQotCi1zdHJpbmcgQ2xhc3NOYW1l
KGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIENsYXNzTmFtZVJlc29s
dmVyIG5hbWVfcmVzb2x2ZXI7Ci0gIHJldHVybiBuYW1lX3Jlc29sdmVyLkdldENsYXNzTmFtZShk
ZXNjcmlwdG9yLCB0cnVlKTsKLX0KLQotc3RyaW5nIENsYXNzTmFtZShjb25zdCBGaWxlRGVzY3Jp
cHRvciogZGVzY3JpcHRvcikgewotICBDbGFzc05hbWVSZXNvbHZlciBuYW1lX3Jlc29sdmVyOwot
ICByZXR1cm4gbmFtZV9yZXNvbHZlci5HZXRDbGFzc05hbWUoZGVzY3JpcHRvciwgdHJ1ZSk7Ci19
Ci0KLXN0cmluZyBFeHRyYU1lc3NhZ2VJbnRlcmZhY2VzKGNvbnN0IERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IpIHsKLSAgc3RyaW5nIGludGVyZmFjZXMgPSAiLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KG1lc3NhZ2VfaW1wbGVtZW50czoiCi0gICAgICArIGRlc2NyaXB0b3ItPmZ1bGxfbmFtZSgp
ICsgIikiOwotICByZXR1cm4gaW50ZXJmYWNlczsKLX0KLQotCi1zdHJpbmcgRXh0cmFCdWlsZGVy
SW50ZXJmYWNlcyhjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHN0cmluZyBpbnRl
cmZhY2VzID0gIi8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChidWlsZGVyX2ltcGxlbWVudHM6
IgotICAgICAgKyBkZXNjcmlwdG9yLT5mdWxsX25hbWUoKSArICIpIjsKLSAgcmV0dXJuIGludGVy
ZmFjZXM7Ci19Ci0KLXN0cmluZyBFeHRyYU1lc3NhZ2VPckJ1aWxkZXJJbnRlcmZhY2VzKGNvbnN0
IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgc3RyaW5nIGludGVyZmFjZXMgPSAiLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGludGVyZmFjZV9leHRlbmRzOiIKLSAgICAgICsgZGVzY3Jp
cHRvci0+ZnVsbF9uYW1lKCkgKyAiKSI7Ci0gIHJldHVybiBpbnRlcmZhY2VzOwotfQotCi1zdHJp
bmcgRmllbGRDb25zdGFudE5hbWUoY29uc3QgRmllbGREZXNjcmlwdG9yICpmaWVsZCkgewotICBz
dHJpbmcgbmFtZSA9IGZpZWxkLT5uYW1lKCkgKyAiX0ZJRUxEX05VTUJFUiI7Ci0gIFVwcGVyU3Ry
aW5nKCZuYW1lKTsKLSAgcmV0dXJuIG5hbWU7Ci19Ci0KLUZpZWxkRGVzY3JpcHRvcjo6VHlwZSBH
ZXRUeXBlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgcmV0dXJuIGZpZWxkLT50
eXBlKCk7Ci19Ci0KLUphdmFUeXBlIEdldEphdmFUeXBlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQpIHsKLSAgc3dpdGNoIChHZXRUeXBlKGZpZWxkKSkgewotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0lOVDMyOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJTlQz
MjoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TSU5UMzI6Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfRklYRUQzMjoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9TRklYRUQzMjoKLSAgICAgIHJldHVybiBKQVZBVFlQRV9JTlQ7Ci0KLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9JTlQ2NDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9V
SU5UNjQ6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDY0OgotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVENjQ6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OlRZUEVfU0ZJWEVENjQ6Ci0gICAgICByZXR1cm4gSkFWQVRZUEVfTE9ORzsKLQotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX0ZMT0FUOgotICAgICAgcmV0dXJuIEpBVkFUWVBFX0ZMT0FU
OwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRE9VQkxFOgotICAgICAgcmV0dXJu
IEpBVkFUWVBFX0RPVUJMRTsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JPT0w6
Ci0gICAgICByZXR1cm4gSkFWQVRZUEVfQk9PTEVBTjsKLQotICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpUWVBFX1NUUklORzoKLSAgICAgIHJldHVybiBKQVZBVFlQRV9TVFJJTkc7Ci0KLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRFUzoKLSAgICAgIHJldHVybiBKQVZBVFlQRV9C
WVRFUzsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU06Ci0gICAgICByZXR1
cm4gSkFWQVRZUEVfRU5VTTsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQ
OgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0U6Ci0gICAgICByZXR1cm4g
SkFWQVRZUEVfTUVTU0FHRTsKLQotICAgIC8vIE5vIGRlZmF1bHQgYmVjYXVzZSB3ZSB3YW50IHRo
ZSBjb21waWxlciB0byBjb21wbGFpbiBpZiBhbnkgbmV3Ci0gICAgLy8gdHlwZXMgYXJlIGFkZGVk
LgotICB9Ci0KLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJl
dHVybiBKQVZBVFlQRV9JTlQ7Ci19Ci0KLWNvbnN0IGNoYXIqIFByaW1pdGl2ZVR5cGVOYW1lKEph
dmFUeXBlIHR5cGUpIHsKLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBKQVZBVFlQRV9JTlQg
ICAgOiByZXR1cm4gImludCI7Ci0gICAgY2FzZSBKQVZBVFlQRV9MT05HICAgOiByZXR1cm4gImxv
bmciOwotICAgIGNhc2UgSkFWQVRZUEVfRkxPQVQgIDogcmV0dXJuICJmbG9hdCI7Ci0gICAgY2Fz
ZSBKQVZBVFlQRV9ET1VCTEUgOiByZXR1cm4gImRvdWJsZSI7Ci0gICAgY2FzZSBKQVZBVFlQRV9C
T09MRUFOOiByZXR1cm4gImJvb2xlYW4iOwotICAgIGNhc2UgSkFWQVRZUEVfU1RSSU5HIDogcmV0
dXJuICJqYXZhLmxhbmcuU3RyaW5nIjsKLSAgICBjYXNlIEpBVkFUWVBFX0JZVEVTICA6IHJldHVy
biAiY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nIjsKLSAgICBjYXNlIEpBVkFUWVBFX0VO
VU0gICA6IHJldHVybiBOVUxMOwotICAgIGNhc2UgSkFWQVRZUEVfTUVTU0FHRTogcmV0dXJuIE5V
TEw7Ci0KLSAgICAvLyBObyBkZWZhdWx0IGJlY2F1c2Ugd2Ugd2FudCB0aGUgY29tcGlsZXIgdG8g
Y29tcGxhaW4gaWYgYW55IG5ldwotICAgIC8vIEphdmFUeXBlcyBhcmUgYWRkZWQuCi0gIH0KLQot
ICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuIE5VTEw7
Ci19Ci0KLWNvbnN0IGNoYXIqIEJveGVkUHJpbWl0aXZlVHlwZU5hbWUoSmF2YVR5cGUgdHlwZSkg
ewotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEpBVkFUWVBFX0lOVCAgICA6IHJldHVybiAi
amF2YS5sYW5nLkludGVnZXIiOwotICAgIGNhc2UgSkFWQVRZUEVfTE9ORyAgIDogcmV0dXJuICJq
YXZhLmxhbmcuTG9uZyI7Ci0gICAgY2FzZSBKQVZBVFlQRV9GTE9BVCAgOiByZXR1cm4gImphdmEu
bGFuZy5GbG9hdCI7Ci0gICAgY2FzZSBKQVZBVFlQRV9ET1VCTEUgOiByZXR1cm4gImphdmEubGFu
Zy5Eb3VibGUiOwotICAgIGNhc2UgSkFWQVRZUEVfQk9PTEVBTjogcmV0dXJuICJqYXZhLmxhbmcu
Qm9vbGVhbiI7Ci0gICAgY2FzZSBKQVZBVFlQRV9TVFJJTkcgOiByZXR1cm4gImphdmEubGFuZy5T
dHJpbmciOwotICAgIGNhc2UgSkFWQVRZUEVfQllURVMgIDogcmV0dXJuICJjb20uZ29vZ2xlLnBy
b3RvYnVmLkJ5dGVTdHJpbmciOwotICAgIGNhc2UgSkFWQVRZUEVfRU5VTSAgIDogcmV0dXJuIE5V
TEw7Ci0gICAgY2FzZSBKQVZBVFlQRV9NRVNTQUdFOiByZXR1cm4gTlVMTDsKLQotICAgIC8vIE5v
IGRlZmF1bHQgYmVjYXVzZSB3ZSB3YW50IHRoZSBjb21waWxlciB0byBjb21wbGFpbiBpZiBhbnkg
bmV3Ci0gICAgLy8gSmF2YVR5cGVzIGFyZSBhZGRlZC4KLSAgfQotCi0gIEdPT0dMRV9MT0coRkFU
QUwpIDw8ICJDYW4ndCBnZXQgaGVyZS4iOwotICByZXR1cm4gTlVMTDsKLX0KLQotY29uc3QgY2hh
ciogRmllbGRUeXBlTmFtZShGaWVsZERlc2NyaXB0b3I6OlR5cGUgZmllbGRfdHlwZSkgewotICBz
d2l0Y2ggKGZpZWxkX3R5cGUpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQz
MiAgIDogcmV0dXJuICJJTlQzMiI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfVUlO
VDMyICA6IHJldHVybiAiVUlOVDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9T
SU5UMzIgIDogcmV0dXJuICJTSU5UMzIiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBF
X0ZJWEVEMzIgOiByZXR1cm4gIkZJWEVEMzIiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpU
WVBFX1NGSVhFRDMyOiByZXR1cm4gIlNGSVhFRDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9JTlQ2NCAgIDogcmV0dXJuICJJTlQ2NCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OlRZUEVfVUlOVDY0ICA6IHJldHVybiAiVUlOVDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9TSU5UNjQgIDogcmV0dXJuICJTSU5UNjQiOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0ZJWEVENjQgOiByZXR1cm4gIkZJWEVENjQiOwotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDY0OiByZXR1cm4gIlNGSVhFRDY0IjsKLSAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvcjo6VFlQRV9GTE9BVCAgIDogcmV0dXJuICJGTE9BVCI7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfRE9VQkxFICA6IHJldHVybiAiRE9VQkxFIjsKLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CT09MICAgIDogcmV0dXJuICJCT09MIjsKLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcgIDogcmV0dXJuICJTVFJJTkciOwotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTICAgOiByZXR1cm4gIkJZVEVTIjsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9FTlVNICAgIDogcmV0dXJuICJFTlVNIjsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCAgIDogcmV0dXJuICJHUk9VUCI7Ci0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSA6IHJldHVybiAiTUVTU0FHRSI7Ci0K
LSAgICAvLyBObyBkZWZhdWx0IGJlY2F1c2Ugd2Ugd2FudCB0aGUgY29tcGlsZXIgdG8gY29tcGxh
aW4gaWYgYW55IG5ldwotICAgIC8vIHR5cGVzIGFyZSBhZGRlZC4KLSAgfQotCi0gIEdPT0dMRV9M
T0coRkFUQUwpIDw8ICJDYW4ndCBnZXQgaGVyZS4iOwotICByZXR1cm4gTlVMTDsKLX0KLQotYm9v
bCBBbGxBc2NpaShjb25zdCBzdHJpbmcmIHRleHQpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0
ZXh0LnNpemUoKTsgaSsrKSB7Ci0gICAgaWYgKCh0ZXh0W2ldICYgMHg4MCkgIT0gMCkgewotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RyaW5n
IERlZmF1bHRWYWx1ZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBib29sIGltbXV0YWJs
ZSwKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXIp
IHsKLSAgLy8gU3dpdGNoIG9uIENwcFR5cGUgc2luY2Ugd2UgbmVlZCB0byBrbm93IHdoaWNoIGRl
ZmF1bHRfdmFsdWVfKiBtZXRob2QKLSAgLy8gb2YgRmllbGREZXNjcmlwdG9yIHRvIGNhbGwuCi0g
IHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9JTlQzMjoKLSAgICAgIHJldHVybiBTaW1wbGVJdG9hKGZpZWxkLT5kZWZhdWx0X3Zh
bHVlX2ludDMyKCkpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQzMjoK
LSAgICAgIC8vIE5lZWQgdG8gcHJpbnQgYXMgYSBzaWduZWQgaW50IHNpbmNlIEphdmEgaGFzIG5v
IHVuc2lnbmVkLgotICAgICAgcmV0dXJuIFNpbXBsZUl0b2Eoc3RhdGljX2Nhc3Q8aW50MzI+KGZp
ZWxkLT5kZWZhdWx0X3ZhbHVlX3VpbnQzMigpKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfSU5UNjQ6Ci0gICAgICByZXR1cm4gU2ltcGxlSXRvYShmaWVsZC0+ZGVmYXVsdF92
YWx1ZV9pbnQ2NCgpKSArICJMIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9V
SU5UNjQ6Ci0gICAgICByZXR1cm4gU2ltcGxlSXRvYShzdGF0aWNfY2FzdDxpbnQ2ND4oZmllbGQt
PmRlZmF1bHRfdmFsdWVfdWludDY0KCkpKSArCi0gICAgICAgICAgICAgIkwiOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRTogewotICAgICAgZG91YmxlIHZhbHVlID0g
ZmllbGQtPmRlZmF1bHRfdmFsdWVfZG91YmxlKCk7Ci0gICAgICBpZiAodmFsdWUgPT0gbnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewotICAgICAgICByZXR1cm4gIkRvdWJsZS5Q
T1NJVElWRV9JTkZJTklUWSI7Ci0gICAgICB9IGVsc2UgaWYgKHZhbHVlID09IC1udW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKSB7Ci0gICAgICAgIHJldHVybiAiRG91YmxlLk5FR0FU
SVZFX0lORklOSVRZIjsKLSAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gdmFsdWUpIHsKLSAgICAg
ICAgcmV0dXJuICJEb3VibGUuTmFOIjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBT
aW1wbGVEdG9hKHZhbHVlKSArICJEIjsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQ6IHsKLSAgICAgIGZsb2F0IHZhbHVlID0gZmllbGQtPmRl
ZmF1bHRfdmFsdWVfZmxvYXQoKTsKLSAgICAgIGlmICh2YWx1ZSA9PSBudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuICJGbG9hdC5QT1NJVElWRV9JTkZJ
TklUWSI7Ci0gICAgICB9IGVsc2UgaWYgKHZhbHVlID09IC1udW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuICJGbG9hdC5ORUdBVElWRV9JTkZJTklUWSI7
Ci0gICAgICB9IGVsc2UgaWYgKHZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAiRmxv
YXQuTmFOIjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGdG9hKHZhbHVl
KSArICJGIjsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfQk9PTDoKLSAgICAgIHJldHVybiBmaWVsZC0+ZGVmYXVsdF92YWx1ZV9ib29sKCkgPyAidHJ1
ZSIgOiAiZmFsc2UiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzoK
LSAgICAgIGlmIChHZXRUeXBlKGZpZWxkKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMp
IHsKLSAgICAgICAgaWYgKGZpZWxkLT5oYXNfZGVmYXVsdF92YWx1ZSgpKSB7Ci0gICAgICAgICAg
Ly8gU2VlIGNvbW1lbnRzIGluIEludGVybmFsLmphdmEgZm9yIGdvcnkgZGV0YWlscy4KLSAgICAg
ICAgICByZXR1cm4gc3RyaW5nczo6U3Vic3RpdHV0ZSgKLSAgICAgICAgICAgICJjb20uZ29vZ2xl
LnByb3RvYnVmLkludGVybmFsLmJ5dGVzRGVmYXVsdFZhbHVlKFwiJDBcIikiLAotICAgICAgICAg
ICAgQ0VzY2FwZShmaWVsZC0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKSkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHJldHVybiAiY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nLkVN
UFRZIjsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEFsbEFzY2lpKGZp
ZWxkLT5kZWZhdWx0X3ZhbHVlX3N0cmluZygpKSkgewotICAgICAgICAgIC8vIEFsbCBjaGFycyBh
cmUgQVNDSUkuICBJbiB0aGlzIGNhc2UgQ0VzY2FwZSgpIHdvcmtzIGZpbmUuCi0gICAgICAgICAg
cmV0dXJuICJcIiIgKyBDRXNjYXBlKGZpZWxkLT5kZWZhdWx0X3ZhbHVlX3N0cmluZygpKSArICJc
IiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gU2VlIGNvbW1lbnRzIGluIEludGVy
bmFsLmphdmEgZm9yIGdvcnkgZGV0YWlscy4KLSAgICAgICAgICByZXR1cm4gc3RyaW5nczo6U3Vi
c3RpdHV0ZSgKLSAgICAgICAgICAgICAgImNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJuYWwuc3Ry
aW5nRGVmYXVsdFZhbHVlKFwiJDBcIikiLAotICAgICAgICAgICAgICBDRXNjYXBlKGZpZWxkLT5k
ZWZhdWx0X3ZhbHVlX3N0cmluZygpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAgICByZXR1cm4gbmFtZV9yZXNvbHZl
ci0+R2V0Q2xhc3NOYW1lKGZpZWxkLT5lbnVtX3R5cGUoKSwgaW1tdXRhYmxlKSArICIuIiArCi0g
ICAgICAgICAgZmllbGQtPmRlZmF1bHRfdmFsdWVfZW51bSgpLT5uYW1lKCk7Ci0KLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgcmV0dXJuIG5hbWVfcmVz
b2x2ZXItPkdldENsYXNzTmFtZShmaWVsZC0+bWVzc2FnZV90eXBlKCksIGltbXV0YWJsZSkgKwot
ICAgICAgICAgICIuZ2V0RGVmYXVsdEluc3RhbmNlKCkiOwotCi0gICAgLy8gTm8gZGVmYXVsdCBi
ZWNhdXNlIHdlIHdhbnQgdGhlIGNvbXBpbGVyIHRvIGNvbXBsYWluIGlmIGFueSBuZXcKLSAgICAv
LyB0eXBlcyBhcmUgYWRkZWQuCi0gIH0KLQotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3Qg
Z2V0IGhlcmUuIjsKLSAgcmV0dXJuICIiOwotfQotCi1ib29sIElzRGVmYXVsdFZhbHVlSmF2YURl
ZmF1bHQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICAvLyBTd2l0Y2ggb24gQ3Bw
VHlwZSBzaW5jZSB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggZGVmYXVsdF92YWx1ZV8qIG1ldGhvZAot
ICAvLyBvZiBGaWVsZERlc2NyaXB0b3IgdG8gY2FsbC4KLSAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5
cGUoKSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyOgotICAgICAg
cmV0dXJuIGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2ludDMyKCkgPT0gMDsKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UMzI6Ci0gICAgICByZXR1cm4gZmllbGQtPmRlZmF1bHRf
dmFsdWVfdWludDMyKCkgPT0gMDsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9J
TlQ2NDoKLSAgICAgIHJldHVybiBmaWVsZC0+ZGVmYXVsdF92YWx1ZV9pbnQ2NCgpID09IDBMOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NDoKLSAgICAgIHJldHVybiBm
aWVsZC0+ZGVmYXVsdF92YWx1ZV91aW50NjQoKSA9PSAwTDsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9ET1VCTEU6Ci0gICAgICByZXR1cm4gZmllbGQtPmRlZmF1bHRfdmFsdWVf
ZG91YmxlKCkgPT0gMC4wOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FU
OgotICAgICAgcmV0dXJuIGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2Zsb2F0KCkgPT0gMC4wOwotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0w6Ci0gICAgICByZXR1cm4gZmllbGQt
PmRlZmF1bHRfdmFsdWVfYm9vbCgpID09IGZhbHNlOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VO
VU06Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIE5vIGRlZmF1bHQgYmVjYXVzZSB3ZSB3YW50IHRoZSBjb21w
aWxlciB0byBjb21wbGFpbiBpZiBhbnkgbmV3Ci0gICAgLy8gdHlwZXMgYXJlIGFkZGVkLgotICB9
Ci0KLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotY29uc3QgY2hhciogYml0X21hc2tzW10gPSB7Ci0gICIweDAwMDAwMDAxIiwK
LSAgIjB4MDAwMDAwMDIiLAotICAiMHgwMDAwMDAwNCIsCi0gICIweDAwMDAwMDA4IiwKLSAgIjB4
MDAwMDAwMTAiLAotICAiMHgwMDAwMDAyMCIsCi0gICIweDAwMDAwMDQwIiwKLSAgIjB4MDAwMDAw
ODAiLAotCi0gICIweDAwMDAwMTAwIiwKLSAgIjB4MDAwMDAyMDAiLAotICAiMHgwMDAwMDQwMCIs
Ci0gICIweDAwMDAwODAwIiwKLSAgIjB4MDAwMDEwMDAiLAotICAiMHgwMDAwMjAwMCIsCi0gICIw
eDAwMDA0MDAwIiwKLSAgIjB4MDAwMDgwMDAiLAotCi0gICIweDAwMDEwMDAwIiwKLSAgIjB4MDAw
MjAwMDAiLAotICAiMHgwMDA0MDAwMCIsCi0gICIweDAwMDgwMDAwIiwKLSAgIjB4MDAxMDAwMDAi
LAotICAiMHgwMDIwMDAwMCIsCi0gICIweDAwNDAwMDAwIiwKLSAgIjB4MDA4MDAwMDAiLAotCi0g
ICIweDAxMDAwMDAwIiwKLSAgIjB4MDIwMDAwMDAiLAotICAiMHgwNDAwMDAwMCIsCi0gICIweDA4
MDAwMDAwIiwKLSAgIjB4MTAwMDAwMDAiLAotICAiMHgyMDAwMDAwMCIsCi0gICIweDQwMDAwMDAw
IiwKLSAgIjB4ODAwMDAwMDAiLAotfTsKLQotc3RyaW5nIEdldEJpdEZpZWxkTmFtZShpbnQgaW5k
ZXgpIHsKLSAgc3RyaW5nIHZhck5hbWUgPSAiYml0RmllbGQiOwotICB2YXJOYW1lICs9IFNpbXBs
ZUl0b2EoaW5kZXgpOwotICB2YXJOYW1lICs9ICJfIjsKLSAgcmV0dXJuIHZhck5hbWU7Ci19Ci0K
LXN0cmluZyBHZXRCaXRGaWVsZE5hbWVGb3JCaXQoaW50IGJpdEluZGV4KSB7Ci0gIHJldHVybiBH
ZXRCaXRGaWVsZE5hbWUoYml0SW5kZXggLyAzMik7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cmlu
ZyBHZW5lcmF0ZUdldEJpdEludGVybmFsKGNvbnN0IHN0cmluZyYgcHJlZml4LCBpbnQgYml0SW5k
ZXgpIHsKLSAgc3RyaW5nIHZhck5hbWUgPSBwcmVmaXggKyBHZXRCaXRGaWVsZE5hbWVGb3JCaXQo
Yml0SW5kZXgpOwotICBpbnQgYml0SW5WYXJJbmRleCA9IGJpdEluZGV4ICUgMzI7Ci0KLSAgc3Ry
aW5nIG1hc2sgPSBiaXRfbWFza3NbYml0SW5WYXJJbmRleF07Ci0gIHN0cmluZyByZXN1bHQgPSAi
KCgiICsgdmFyTmFtZSArICIgJiAiICsgbWFzayArICIpID09ICIgKyBtYXNrICsgIikiOwotICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdHJpbmcgR2VuZXJhdGVTZXRCaXRJbnRlcm5hbChjb25zdCBz
dHJpbmcmIHByZWZpeCwgaW50IGJpdEluZGV4KSB7Ci0gIHN0cmluZyB2YXJOYW1lID0gcHJlZml4
ICsgR2V0Qml0RmllbGROYW1lRm9yQml0KGJpdEluZGV4KTsKLSAgaW50IGJpdEluVmFySW5kZXgg
PSBiaXRJbmRleCAlIDMyOwotCi0gIHN0cmluZyBtYXNrID0gYml0X21hc2tzW2JpdEluVmFySW5k
ZXhdOwotICBzdHJpbmcgcmVzdWx0ID0gdmFyTmFtZSArICIgfD0gIiArIG1hc2s7Ci0gIHJldHVy
biByZXN1bHQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1zdHJpbmcgR2VuZXJhdGVHZXRCaXQo
aW50IGJpdEluZGV4KSB7Ci0gIHJldHVybiBHZW5lcmF0ZUdldEJpdEludGVybmFsKCIiLCBiaXRJ
bmRleCk7Ci19Ci0KLXN0cmluZyBHZW5lcmF0ZVNldEJpdChpbnQgYml0SW5kZXgpIHsKLSAgcmV0
dXJuIEdlbmVyYXRlU2V0Qml0SW50ZXJuYWwoIiIsIGJpdEluZGV4KTsKLX0KLQotc3RyaW5nIEdl
bmVyYXRlQ2xlYXJCaXQoaW50IGJpdEluZGV4KSB7Ci0gIHN0cmluZyB2YXJOYW1lID0gR2V0Qml0
RmllbGROYW1lRm9yQml0KGJpdEluZGV4KTsKLSAgaW50IGJpdEluVmFySW5kZXggPSBiaXRJbmRl
eCAlIDMyOwotCi0gIHN0cmluZyBtYXNrID0gYml0X21hc2tzW2JpdEluVmFySW5kZXhdOwotICBz
dHJpbmcgcmVzdWx0ID0gdmFyTmFtZSArICIgPSAoIiArIHZhck5hbWUgKyAiICYgfiIgKyBtYXNr
ICsgIikiOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdHJpbmcgR2VuZXJhdGVHZXRCaXRGcm9t
TG9jYWwoaW50IGJpdEluZGV4KSB7Ci0gIHJldHVybiBHZW5lcmF0ZUdldEJpdEludGVybmFsKCJm
cm9tXyIsIGJpdEluZGV4KTsKLX0KLQotc3RyaW5nIEdlbmVyYXRlU2V0Qml0VG9Mb2NhbChpbnQg
Yml0SW5kZXgpIHsKLSAgcmV0dXJuIEdlbmVyYXRlU2V0Qml0SW50ZXJuYWwoInRvXyIsIGJpdElu
ZGV4KTsKLX0KLQotc3RyaW5nIEdlbmVyYXRlR2V0Qml0TXV0YWJsZUxvY2FsKGludCBiaXRJbmRl
eCkgewotICByZXR1cm4gR2VuZXJhdGVHZXRCaXRJbnRlcm5hbCgibXV0YWJsZV8iLCBiaXRJbmRl
eCk7Ci19Ci0KLXN0cmluZyBHZW5lcmF0ZVNldEJpdE11dGFibGVMb2NhbChpbnQgYml0SW5kZXgp
IHsKLSAgcmV0dXJuIEdlbmVyYXRlU2V0Qml0SW50ZXJuYWwoIm11dGFibGVfIiwgYml0SW5kZXgp
OwotfQotCi1ib29sIElzUmVmZXJlbmNlVHlwZShKYXZhVHlwZSB0eXBlKSB7Ci0gIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgSkFWQVRZUEVfSU5UICAgIDogcmV0dXJuIGZhbHNlOwotICAgIGNh
c2UgSkFWQVRZUEVfTE9ORyAgIDogcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgSkFWQVRZUEVfRkxP
QVQgIDogcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgSkFWQVRZUEVfRE9VQkxFIDogcmV0dXJuIGZh
bHNlOwotICAgIGNhc2UgSkFWQVRZUEVfQk9PTEVBTjogcmV0dXJuIGZhbHNlOwotICAgIGNhc2Ug
SkFWQVRZUEVfU1RSSU5HIDogcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBKQVZBVFlQRV9CWVRFUyAg
OiByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpBVkFUWVBFX0VOVU0gICA6IHJldHVybiB0cnVlOwot
ICAgIGNhc2UgSkFWQVRZUEVfTUVTU0FHRTogcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBObyBkZWZh
dWx0IGJlY2F1c2Ugd2Ugd2FudCB0aGUgY29tcGlsZXIgdG8gY29tcGxhaW4gaWYgYW55IG5ldwot
ICAgIC8vIEphdmFUeXBlcyBhcmUgYWRkZWQuCi0gIH0KLQotICBHT09HTEVfTE9HKEZBVEFMKSA8
PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1jb25zdCBjaGFyKiBH
ZXRDYXBpdGFsaXplZFR5cGUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgYm9vbCBpbW11
dGFibGUpIHsKLSAgc3dpdGNoIChHZXRUeXBlKGZpZWxkKSkgewotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0lOVDMyICAgOiByZXR1cm4gIkludDMyIjsKLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6VFlQRV9VSU5UMzIgIDogcmV0dXJuICJVSW50MzIiOwotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX1NJTlQzMiAgOiByZXR1cm4gIlNJbnQzMiI7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfRklYRUQzMiA6IHJldHVybiAiRml4ZWQzMiI7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVEMzI6IHJldHVybiAiU0ZpeGVkMzIiOwotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDY0ICAgOiByZXR1cm4gIkludDY0IjsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UNjQgIDogcmV0dXJuICJVSW50NjQiOwotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQ2NCAgOiByZXR1cm4gIlNJbnQ2NCI7Ci0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRklYRUQ2NCA6IHJldHVybiAiRml4ZWQ2NCI7
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVENjQ6IHJldHVybiAiU0ZpeGVk
NjQiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZMT0FUICAgOiByZXR1cm4gIkZs
b2F0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9ET1VCTEUgIDogcmV0dXJuICJE
b3VibGUiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JPT0wgICAgOiByZXR1cm4g
IkJvb2wiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NUUklORyAgOiByZXR1cm4g
IlN0cmluZyI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMgICA6IHsKLSAg
ICAgIHJldHVybiAiQnl0ZXMiOwotICAgIH0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9FTlVNICAgIDogcmV0dXJuICJFbnVtIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9HUk9VUCAgIDogcmV0dXJuICJHcm91cCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfTUVTU0FHRSA6IHJldHVybiAiTWVzc2FnZSI7Ci0KLSAgICAvLyBObyBkZWZhdWx0IGJlY2F1
c2Ugd2Ugd2FudCB0aGUgY29tcGlsZXIgdG8gY29tcGxhaW4gaWYgYW55IG5ldwotICAgIC8vIHR5
cGVzIGFyZSBhZGRlZC4KLSAgfQotCi0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4ndCBnZXQg
aGVyZS4iOwotICByZXR1cm4gTlVMTDsKLX0KLQotLy8gRm9yIGVuY29kaW5ncyB3aXRoIGZpeGVk
IHNpemVzLCByZXR1cm5zIHRoYXQgc2l6ZSBpbiBieXRlcy4gIE90aGVyd2lzZQotLy8gcmV0dXJu
cyAtMS4KLWludCBGaXhlZFNpemUoRmllbGREZXNjcmlwdG9yOjpUeXBlIHR5cGUpIHsKLSAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfSU5UMzIgICA6IHJl
dHVybiAtMTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQ2NCAgIDogcmV0dXJu
IC0xOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJTlQzMiAgOiByZXR1cm4gLTE7
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfVUlOVDY0ICA6IHJldHVybiAtMTsKLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TSU5UMzIgIDogcmV0dXJuIC0xOwotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQ2NCAgOiByZXR1cm4gLTE7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfRklYRUQzMiA6IHJldHVybiBXaXJlRm9ybWF0TGl0ZTo6a0Zp
eGVkMzJTaXplOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVENjQgOiByZXR1
cm4gV2lyZUZvcm1hdExpdGU6OmtGaXhlZDY0U2l6ZTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9TRklYRUQzMjogcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjprU0ZpeGVkMzJTaXplOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDY0OiByZXR1cm4gV2lyZUZvcm1h
dExpdGU6OmtTRml4ZWQ2NFNpemU7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRkxP
QVQgICA6IHJldHVybiBXaXJlRm9ybWF0TGl0ZTo6a0Zsb2F0U2l6ZTsKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9ET1VCTEUgIDogcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjprRG91Ymxl
U2l6ZTsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JPT0wgICAgOiByZXR1cm4g
V2lyZUZvcm1hdExpdGU6OmtCb29sU2l6ZTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9FTlVNICAgIDogcmV0dXJuIC0xOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
U1RSSU5HICA6IHJldHVybiAtMTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRF
UyAgIDogcmV0dXJuIC0xOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQICAg
OiByZXR1cm4gLTE7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSA6IHJl
dHVybiAtMTsKLQotICAgIC8vIE5vIGRlZmF1bHQgYmVjYXVzZSB3ZSB3YW50IHRoZSBjb21waWxl
ciB0byBjb21wbGFpbiBpZiBhbnkgbmV3Ci0gICAgLy8gdHlwZXMgYXJlIGFkZGVkLgotICB9Ci0g
IEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4ndCBnZXQgaGVyZS4iOwotICByZXR1cm4gLTE7Ci19
Ci0KLS8vIFNvcnQgdGhlIGZpZWxkcyBvZiB0aGUgZ2l2ZW4gRGVzY3JpcHRvciBieSBudW1iZXIg
aW50byBhIG5ld1tdJ2QgYXJyYXkKLS8vIGFuZCByZXR1cm4gaXQuIFRoZSBjYWxsZXIgc2hvdWxk
IGRlbGV0ZSB0aGUgcmV0dXJuZWQgYXJyYXkuCi1jb25zdCBGaWVsZERlc2NyaXB0b3IqKiBTb3J0
RmllbGRzQnlOdW1iZXIoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqKiBmaWVsZHMgPQotICAgIG5ldyBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
W2Rlc2NyaXB0b3ItPmZpZWxkX2NvdW50KCldOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2Ny
aXB0b3ItPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGZpZWxkc1tpXSA9IGRlc2NyaXB0b3It
PmZpZWxkKGkpOwotICB9Ci0gIHN0ZDo6c29ydChmaWVsZHMsIGZpZWxkcyArIGRlc2NyaXB0b3It
PmZpZWxkX2NvdW50KCksCi0gICAgICAgICAgICBGaWVsZE9yZGVyaW5nQnlOdW1iZXIoKSk7Ci0g
IHJldHVybiBmaWVsZHM7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVzc2FnZSB0eXBl
IGhhcyBhbnkgcmVxdWlyZWQgZmllbGRzLiAgSWYgaXQgZG9lc24ndCwKLS8vIHdlIGNhbiBvcHRp
bWl6ZSBvdXQgY2FsbHMgdG8gaXRzIGlzSW5pdGlhbGl6ZWQoKSBtZXRob2QuCi0vLwotLy8gYWxy
ZWFkeV9zZWVuIGlzIHVzZWQgdG8gYXZvaWQgY2hlY2tpbmcgdGhlIHNhbWUgdHlwZSBtdWx0aXBs
ZSB0aW1lcwotLy8gKGFuZCBhbHNvIHRvIHByb3RlY3QgYWdhaW5zdCByZWN1cnNpb24pLgotYm9v
bCBIYXNSZXF1aXJlZEZpZWxkcygKLSAgICBjb25zdCBEZXNjcmlwdG9yKiB0eXBlLAotICAgIGhh
c2hfc2V0PGNvbnN0IERlc2NyaXB0b3IqPiogYWxyZWFkeV9zZWVuKSB7Ci0gIGlmIChhbHJlYWR5
X3NlZW4tPmNvdW50KHR5cGUpID4gMCkgewotICAgIC8vIFRoZSB0eXBlIGlzIGFscmVhZHkgaW4g
Y2FjaGUuICBUaGlzIG1lYW5zIHRoYXQgZWl0aGVyOgotICAgIC8vIGEuIFRoZSB0eXBlIGhhcyBu
byByZXF1aXJlZCBmaWVsZHMuCi0gICAgLy8gYi4gV2UgYXJlIGluIHRoZSBtaWRzdCBvZiBjaGVj
a2luZyBpZiB0aGUgdHlwZSBoYXMgcmVxdWlyZWQgZmllbGRzLAotICAgIC8vICAgIHNvbWV3aGVy
ZSB1cCB0aGUgc3RhY2suICBJbiB0aGlzIGNhc2UsIHdlIGtub3cgdGhhdCBpZiB0aGUgdHlwZQot
ICAgIC8vICAgIGhhcyBhbnkgcmVxdWlyZWQgZmllbGRzLCB0aGV5J2xsIGJlIGZvdW5kIHdoZW4g
d2UgcmV0dXJuIHRvIGl0LAotICAgIC8vICAgIGFuZCB0aGUgd2hvbGUgY2FsbCB0byBIYXNSZXF1
aXJlZEZpZWxkcygpIHdpbGwgcmV0dXJuIHRydWUuCi0gICAgLy8gICAgVGhlcmVmb3JlLCB3ZSBk
b24ndCBoYXZlIHRvIGNoZWNrIGlmIHRoaXMgdHlwZSBoYXMgcmVxdWlyZWQgZmllbGRzCi0gICAg
Ly8gICAgaGVyZS4KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgYWxyZWFkeV9zZWVuLT5pbnNl
cnQodHlwZSk7Ci0KLSAgLy8gSWYgdGhlIHR5cGUgaGFzIGV4dGVuc2lvbnMsIGFuIGV4dGVuc2lv
biB3aXRoIG1lc3NhZ2UgdHlwZSBjb3VsZCBjb250YWluCi0gIC8vIHJlcXVpcmVkIGZpZWxkcywg
c28gd2UgaGF2ZSB0byBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZSBzdWNoIGFuCi0gIC8vIGV4
dGVuc2lvbiBleGlzdHMuCi0gIGlmICh0eXBlLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+IDAp
IHJldHVybiB0cnVlOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS0+ZmllbGRfY291bnQo
KTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IHR5cGUtPmZpZWxk
KGkpOwotICAgIGlmIChmaWVsZC0+aXNfcmVxdWlyZWQoKSkgewotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIGlmIChHZXRKYXZhVHlwZShmaWVsZCkgPT0gSkFWQVRZUEVfTUVTU0FHRSkg
ewotICAgICAgaWYgKEhhc1JlcXVpcmVkRmllbGRzKGZpZWxkLT5tZXNzYWdlX3R5cGUoKSwgYWxy
ZWFkeV9zZWVuKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSGFzUmVxdWlyZWRGaWVsZHMoY29uc3QgRGVz
Y3JpcHRvciogdHlwZSkgewotICBoYXNoX3NldDxjb25zdCBEZXNjcmlwdG9yKj4gYWxyZWFkeV9z
ZWVuOwotICByZXR1cm4gSGFzUmVxdWlyZWRGaWVsZHModHlwZSwgJmFscmVhZHlfc2Vlbik7Ci19
Ci0KLWJvb2wgSGFzUmVwZWF0ZWRGaWVsZHMoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikg
ewotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPmZpZWxkX2NvdW50KCk7ICsraSkg
ewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yLT5maWVsZChp
KTsKLSAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19
ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8g
bmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9oZWxwZXJzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9q
YXZhX2hlbHBlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg1MDQyM2U3MTcz
M2E5NDBlNzhmN2RkNTJjN2E4YjY4NjE4ODNlYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZh
X2hlbHBlcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2Vu
dG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWdu
IGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5k
ZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfSEVMUEVSU19IX18KLSNkZWZpbmUgR09P
R0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfSEVMUEVSU19IX18KLQotI2luY2x1ZGUgPHN0cmlu
Zz4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFt
ZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7
Ci0KLS8vIENvbW1vbmx5LXVzZWQgc2VwYXJhdG9yIGNvbW1lbnRzLiAgVGhpY2sgaXMgYSBsaW5l
IG9mICc9JywgdGhpbiBpcyBhIGxpbmUKLS8vIG9mICctJy4KLWV4dGVybiBjb25zdCBjaGFyIGtU
aGlja1NlcGFyYXRvcltdOwotZXh0ZXJuIGNvbnN0IGNoYXIga1RoaW5TZXBhcmF0b3JbXTsKLQot
Ly8gQ29udmVydHMgYSBuYW1lIHRvIGNhbWVsLWNhc2UuIElmIGNhcF9maXJzdF9sZXR0ZXIgaXMg
dHJ1ZSwgY2FwaXRhbGl6ZSB0aGUKLS8vIGZpcnN0IGxldHRlci4KLXN0cmluZyBVbmRlcnNjb3Jl
c1RvQ2FtZWxDYXNlKGNvbnN0IHN0cmluZyYgbmFtZSwgYm9vbCBjYXBfZmlyc3RfbGV0dGVyKTsK
LS8vIENvbnZlcnRzIHRoZSBmaWVsZCdzIG5hbWUgdG8gY2FtZWwtY2FzZSwgZS5nLiAiZm9vX2Jh
cl9iYXoiIGJlY29tZXMKLS8vICJmb29CYXJCYXoiIG9yICJGb29CYXJCYXoiLCByZXNwZWN0aXZl
bHkuCi1zdHJpbmcgVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkKTsKLXN0cmluZyBVbmRlcnNjb3Jlc1RvQ2FwaXRhbGl6ZWRDYW1lbENhc2UoY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLS8vIFNpbWlsYXIsIGJ1dCBmb3IgbWV0aG9kIG5h
bWVzLiAgKFR5cGljYWxseSwgdGhpcyBtZXJlbHkgaGFzIHRoZSBlZmZlY3QKLS8vIG9mIGxvd2Vy
LWNhc2luZyB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBuYW1lLikKLXN0cmluZyBVbmRlcnNjb3Jl
c1RvQ2FtZWxDYXNlKGNvbnN0IE1ldGhvZERlc2NyaXB0b3IqIG1ldGhvZCk7Ci0KLS8vIEdldCBh
biBpZGVudGlmaWVyIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIHR5cGUgd2l0aGluIHRo
ZSBmaWxlLgotLy8gVGhpcyBpcyB1c2VkIHRvIGRlY2xhcmUgc3RhdGljIHZhcmlhYmxlcyByZWxh
dGVkIHRvIHRoaXMgdHlwZSBhdCB0aGUKLS8vIG91dGVybW9zdCBmaWxlIHNjb3BlLgotc3RyaW5n
IFVuaXF1ZUZpbGVTY29wZUlkZW50aWZpZXIoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7
Ci0KLS8vIFN0cmlwcyAiLnByb3RvIiBvciAiLnByb3RvZGV2ZWwiIGZyb20gdGhlIGVuZCBvZiBh
IGZpbGVuYW1lLgotc3RyaW5nIFN0cmlwUHJvdG8oY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSk7Ci0K
LS8vIEdldHMgdGhlIHVucXVhbGlmaWVkIGNsYXNzIG5hbWUgZm9yIHRoZSBmaWxlLiAgRm9yIGVh
Y2ggLnByb3RvIGZpbGUsIHRoZXJlCi0vLyB3aWxsIGJlIG9uZSBKYXZhIGNsYXNzIGNvbnRhaW5p
bmcgYWxsIHRoZSBpbW11dGFibGUgbWVzc2FnZXMgYW5kIGFub3RoZXIKLS8vIEphdmEgY2xhc3Mg
Y29udGFpbmluZyBhbGwgdGhlIG11dGFibGUgbWVzc2FnZXMuCi0vLyBUT0RPKHhpYW9mZW5nKTog
cmVtb3ZlIHRoZSBkZWZhdWx0IHZhbHVlIGFmdGVyIHVwZGF0aW5nIGNsaWVudCBjb2RlLgotc3Ry
aW5nIEZpbGVDbGFzc05hbWUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsIGJvb2wgaW1tdXRh
YmxlID0gdHJ1ZSk7Ci0KLS8vIFJldHVybnMgdGhlIGZpbGUncyBKYXZhIHBhY2thZ2UgbmFtZS4K
LXN0cmluZyBGaWxlSmF2YVBhY2thZ2UoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsIGJvb2wg
aW1tdXRhYmxlID0gdHJ1ZSk7Ci0KLS8vIFJldHVybnMgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhl
IGdpdmVuIHBhY2thZ2UgbmFtZS4KLXN0cmluZyBKYXZhUGFja2FnZVRvRGlyKHN0cmluZyBwYWNr
YWdlX25hbWUpOwotCi0vLyBDb252ZXJ0cyB0aGUgZ2l2ZW4gZnVsbHktcXVhbGlmaWVkIG5hbWUg
aW4gdGhlIHByb3RvIG5hbWVzcGFjZSB0byBpdHMKLS8vIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGlu
IHRoZSBKYXZhIG5hbWVzcGFjZSwgZ2l2ZW4gdGhhdCBpdCBpcyBpbiB0aGUgZ2l2ZW4KLS8vIGZp
bGUuCi0vLyBUT0RPKHhpYW9mZW5nKTogdGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgc2hv
dWxkIGJlIHJlbW92ZWQgaW4gdGhlCi0vLyBmdXR1cmUuCi1zdHJpbmcgVG9KYXZhTmFtZShjb25z
dCBzdHJpbmcmIGZ1bGxfbmFtZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlw
dG9yKiBmaWxlKTsKLQotLy8gVE9ETyh4aWFvZmVuZyk6IHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBh
cmUga2VwdCBmb3IgdGhleSBhcmUgZXhwb3NlZAotLy8gcHVibGljbHkgaW4gLy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvamF2YS9uYW1lcy5oLiBUaGV5IHJldHVybgotLy8gaW1tdXRhYmxlIG5h
bWVzIG9ubHkgYW5kIHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIG11dGFibGUgQVBJIGlzCi0vLyBp
bnRlZ3JhdGVkIGludG8gZ29vZ2xlMy4KLXN0cmluZyBDbGFzc05hbWUoY29uc3QgRGVzY3JpcHRv
ciogZGVzY3JpcHRvcik7Ci1zdHJpbmcgQ2xhc3NOYW1lKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yKTsKLXN0cmluZyBDbGFzc05hbWUoY29uc3QgU2VydmljZURlc2NyaXB0b3IqIGRl
c2NyaXB0b3IpOwotc3RyaW5nIENsYXNzTmFtZShjb25zdCBGaWxlRGVzY3JpcHRvciogZGVzY3Jp
cHRvcik7Ci0KLS8vIENvbW1hLXNlcGFyYXRlIGxpc3Qgb2Ygb3B0aW9uLXNwZWNpZmllZCBpbnRl
cmZhY2VzIGltcGxlbWVudGVkIGJ5IHRoZQotLy8gTWVzc2FnZSwgdG8gZm9sbG93IHRoZSAiaW1w
bGVtZW50cyIgZGVjbGFyYXRpb24gb2YgdGhlIE1lc3NhZ2UgZGVmaW5pdGlvbi4KLXN0cmluZyBF
eHRyYU1lc3NhZ2VJbnRlcmZhY2VzKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotLy8g
Q29tbWEtc2VwYXJhdGUgbGlzdCBvZiBvcHRpb24tc3BlY2lmaWVkIGludGVyZmFjZXMgaW1wbGVt
ZW50ZWQgYnkgdGhlCi0vLyBNdXRhYmxlTWVzc2FnZSwgdG8gZm9sbG93IHRoZSAiaW1wbGVtZW50
cyIgZGVjbGFyYXRpb24gb2YgdGhlIE11dGFibGVNZXNzYWdlCi0vLyBkZWZpbml0aW9uLgotc3Ry
aW5nIEV4dHJhTXV0YWJsZU1lc3NhZ2VJbnRlcmZhY2VzKGNvbnN0IERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IpOwotLy8gQ29tbWEtc2VwYXJhdGUgbGlzdCBvZiBvcHRpb24tc3BlY2lmaWVkIGludGVy
ZmFjZXMgaW1wbGVtZW50ZWQgYnkgdGhlCi0vLyBCdWlsZGVyLCB0byBmb2xsb3cgdGhlICJpbXBs
ZW1lbnRzIiBkZWNsYXJhdGlvbiBvZiB0aGUgQnVpbGRlciBkZWZpbml0aW9uLgotc3RyaW5nIEV4
dHJhQnVpbGRlckludGVyZmFjZXMoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0vLyBD
b21tYS1zZXBhcmF0ZSBsaXN0IG9mIG9wdGlvbi1zcGVjaWZpZWQgaW50ZXJmYWNlcyBleHRlbmRl
ZCBieSB0aGUKLS8vIE1lc3NhZ2VPckJ1aWxkZXIsIHRvIGZvbGxvdyB0aGUgImV4dGVuZHMiIGRl
Y2xhcmF0aW9uIG9mIHRoZQotLy8gTWVzc2FnZU9yQnVpbGRlciBkZWZpbml0aW9uLgotc3RyaW5n
IEV4dHJhTWVzc2FnZU9yQnVpbGRlckludGVyZmFjZXMoY29uc3QgRGVzY3JpcHRvciogZGVzY3Jp
cHRvcik7Ci0KLS8vIEdldCB0aGUgdW5xdWFsaWZpZWQgSmF2YSBjbGFzcyBuYW1lIGZvciBtdXRh
YmxlIG1lc3NhZ2VzLiBpLmUuIHdpdGhvdXQKLS8vIHBhY2thZ2Ugb3Igb3V0ZXIgY2xhc3NuYW1l
cy4KLWlubGluZSBzdHJpbmcgU2hvcnRNdXRhYmxlSmF2YUNsYXNzTmFtZShjb25zdCBEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yLT5uYW1lKCk7Ci19Ci0KLQot
Ly8gV2hldGhlciB3ZSBzaG91bGQgZ2VuZXJhdGUgbXVsdGlwbGUgamF2YSBmaWxlcyBmb3IgbWVz
c2FnZXMuCi1pbmxpbmUgYm9vbCBNdWx0aXBsZUphdmFGaWxlcygKLSAgICBjb25zdCBGaWxlRGVz
Y3JpcHRvciogZGVzY3JpcHRvciwgYm9vbCBpbW11dGFibGUpIHsKLSAgcmV0dXJuIGRlc2NyaXB0
b3ItPm9wdGlvbnMoKS5qYXZhX211bHRpcGxlX2ZpbGVzKCk7Ci19Ci0KLS8vIEdldCB0aGUgdW5x
dWFsaWZpZWQgbmFtZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBhIGZpZWxkJ3MgZmllbGQKLS8v
IG51bWJlciBjb25zdGFudC4KLXN0cmluZyBGaWVsZENvbnN0YW50TmFtZShjb25zdCBGaWVsZERl
c2NyaXB0b3IgKmZpZWxkKTsKLQotLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgRmllbGREZXNj
cmlwdG9yLgotLy8gVGhpcyBkb2VzIG5vdGhpbmcgaW50ZXJlc3RpbmcgZm9yIHRoZSBvcGVuIHNv
dXJjZSByZWxlYXNlLCBidXQgaXMgdXNlZCBmb3IKLS8vIGhhY2tzIHRoYXQgaW1wcm92ZSBjb21w
YXRpYmlsaXR5IHdpdGggdmVyc2lvbiAxIHByb3RvY29sIGJ1ZmZlcnMgYXQgR29vZ2xlLgotRmll
bGREZXNjcmlwdG9yOjpUeXBlIEdldFR5cGUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCk7
Ci0KLWVudW0gSmF2YVR5cGUgewotICBKQVZBVFlQRV9JTlQsCi0gIEpBVkFUWVBFX0xPTkcsCi0g
IEpBVkFUWVBFX0ZMT0FULAotICBKQVZBVFlQRV9ET1VCTEUsCi0gIEpBVkFUWVBFX0JPT0xFQU4s
Ci0gIEpBVkFUWVBFX1NUUklORywKLSAgSkFWQVRZUEVfQllURVMsCi0gIEpBVkFUWVBFX0VOVU0s
Ci0gIEpBVkFUWVBFX01FU1NBR0UKLX07Ci0KLUphdmFUeXBlIEdldEphdmFUeXBlKGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQpOwotCi1jb25zdCBjaGFyKiBQcmltaXRpdmVUeXBlTmFtZShK
YXZhVHlwZSB0eXBlKTsKLQotLy8gR2V0IHRoZSBmdWxseS1xdWFsaWZpZWQgY2xhc3MgbmFtZSBm
b3IgYSBib3hlZCBwcmltaXRpdmUgdHlwZSwgZS5nLgotLy8gImphdmEubGFuZy5JbnRlZ2VyIiBm
b3IgSkFWQVRZUEVfSU5ULiAgUmV0dXJucyBOVUxMIGZvciBlbnVtIGFuZCBtZXNzYWdlCi0vLyB0
eXBlcy4KLWNvbnN0IGNoYXIqIEJveGVkUHJpbWl0aXZlVHlwZU5hbWUoSmF2YVR5cGUgdHlwZSk7
Ci0KLS8vIEdldCB0aGUgbmFtZSBvZiB0aGUgamF2YSBlbnVtIGNvbnN0YW50IHJlcHJlc2VudGlu
ZyB0aGlzIHR5cGUuIEUuZy4sCi0vLyAiSU5UMzIiIGZvciBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
SU5UMzIuIFRoZSBlbnVtIGNvbnN0YW50J3MgZnVsbAotLy8gbmFtZSBpcyAiY29tLmdvb2dsZS5w
cm90b2J1Zi5XaXJlRm9ybWF0LkZpZWxkVHlwZS5JTlQzMiIuCi1jb25zdCBjaGFyKiBGaWVsZFR5
cGVOYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvcjo6VHlwZSBmaWVsZF90eXBlKTsKLQotY2xhc3Mg
Q2xhc3NOYW1lUmVzb2x2ZXI7Ci1zdHJpbmcgRGVmYXVsdFZhbHVlKGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQsIGJvb2wgaW1tdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICBDbGFzc05h
bWVSZXNvbHZlciogbmFtZV9yZXNvbHZlcik7Ci1pbmxpbmUgc3RyaW5nIEltbXV0YWJsZURlZmF1
bHRWYWx1ZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXIpIHsKLSAg
cmV0dXJuIERlZmF1bHRWYWx1ZShmaWVsZCwgdHJ1ZSwgbmFtZV9yZXNvbHZlcik7Ci19Ci1ib29s
IElzRGVmYXVsdFZhbHVlSmF2YURlZmF1bHQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCk7
Ci0KLS8vIERvZXMgdGhpcyBtZXNzYWdlIGhhdmUgc3BlY2lhbGl6ZWQgZXF1YWxzKCkgYW5kIGhh
c2hDb2RlKCkgbWV0aG9kcz8KLWlubGluZSBib29sIEhhc0VxdWFsc0FuZEhhc2hDb2RlKGNvbnN0
IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2NyaXB0b3ItPmZpbGUoKS0+
b3B0aW9ucygpLmphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoKCk7Ci19Ci0KLS8vIERvZXMg
dGhpcyBtZXNzYWdlIGNsYXNzIGhhdmUgZGVzY3JpcHRvciBhbmQgcmVmbGVjdGlvbiBtZXRob2Rz
PwotaW5saW5lIGJvb2wgSGFzRGVzY3JpcHRvck1ldGhvZHMoY29uc3QgRGVzY3JpcHRvciogZGVz
Y3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5mb3JjZV9s
aXRlKSB7Ci0gIHJldHVybiAhZW5mb3JjZV9saXRlICYmCi0gICAgICAgICBkZXNjcmlwdG9yLT5m
aWxlKCktPm9wdGlvbnMoKS5vcHRpbWl6ZV9mb3IoKSAhPQotICAgICAgICAgICAgIEZpbGVPcHRp
b25zOjpMSVRFX1JVTlRJTUU7Ci19Ci1pbmxpbmUgYm9vbCBIYXNEZXNjcmlwdG9yTWV0aG9kcyhj
b25zdCBFbnVtRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZW5mb3JjZV9saXRlKSB7Ci0gIHJldHVybiAhZW5mb3JjZV9saXRlICYm
Ci0gICAgICAgICBkZXNjcmlwdG9yLT5maWxlKCktPm9wdGlvbnMoKS5vcHRpbWl6ZV9mb3IoKSAh
PQotICAgICAgICAgICAgIEZpbGVPcHRpb25zOjpMSVRFX1JVTlRJTUU7Ci19Ci1pbmxpbmUgYm9v
bCBIYXNEZXNjcmlwdG9yTWV0aG9kcyhjb25zdCBGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5mb3JjZV9saXRlKSB7Ci0g
IHJldHVybiAhZW5mb3JjZV9saXRlICYmCi0gICAgICAgICBkZXNjcmlwdG9yLT5vcHRpb25zKCku
b3B0aW1pemVfZm9yKCkgIT0gRmlsZU9wdGlvbnM6OkxJVEVfUlVOVElNRTsKLX0KLQotLy8gU2hv
dWxkIHdlIGdlbmVyYXRlIGdlbmVyaWMgc2VydmljZXMgZm9yIHRoaXMgZmlsZT8KLWlubGluZSBi
b29sIEhhc0dlbmVyaWNTZXJ2aWNlcyhjb25zdCBGaWxlRGVzY3JpcHRvciAqZmlsZSwgYm9vbCBl
bmZvcmNlX2xpdGUpIHsKLSAgcmV0dXJuIGZpbGUtPnNlcnZpY2VfY291bnQoKSA+IDAgJiYKLSAg
ICAgICAgIEhhc0Rlc2NyaXB0b3JNZXRob2RzKGZpbGUsIGVuZm9yY2VfbGl0ZSkgJiYKLSAgICAg
ICAgIGZpbGUtPm9wdGlvbnMoKS5qYXZhX2dlbmVyaWNfc2VydmljZXMoKTsKLX0KLQotaW5saW5l
IGJvb2wgSXNMYXp5KGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgYm9vbCBlbmZv
cmNlX2xpdGUpIHsKLSAgLy8gQ3VycmVudGx5LCB0aGUgcHJvdG8tbGl0ZSB2ZXJzaW9uIHN1cG9y
dHMgbGF6eSBmaWVsZC4KLSAgLy8gVE9ETyhuaXdhc2FraSk6IFN1cHBvcnQgbGF6eSBmaWVsZHMg
YWxzbyBmb3Igb3RoZXIgcHJvdG8gcnVudGltZXMuCi0gIGlmIChIYXNEZXNjcmlwdG9yTWV0aG9k
cyhkZXNjcmlwdG9yLT5maWxlKCksIGVuZm9yY2VfbGl0ZSkpIHsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLSAgcmV0dXJuIGRlc2NyaXB0b3ItPm9wdGlvbnMoKS5sYXp5KCk7Ci19Ci0KLS8vIE1l
dGhvZHMgZm9yIHNoYXJlZCBiaXRmaWVsZHMuCi0KLS8vIEdldHMgdGhlIG5hbWUgb2YgdGhlIHNo
YXJlZCBiaXRmaWVsZCBmb3IgdGhlIGdpdmVuIGluZGV4Lgotc3RyaW5nIEdldEJpdEZpZWxkTmFt
ZShpbnQgaW5kZXgpOwotCi0vLyBHZXRzIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgYml0ZmllbGQg
Zm9yIHRoZSBnaXZlbiBiaXQgaW5kZXguCi0vLyBFZmZlY3RpdmVseSwgR2V0Qml0RmllbGROYW1l
KGJpdEluZGV4IC8gMzIpCi1zdHJpbmcgR2V0Qml0RmllbGROYW1lRm9yQml0KGludCBiaXRJbmRl
eCk7Ci0KLS8vIEdlbmVyYXRlcyB0aGUgamF2YSBjb2RlIGZvciB0aGUgZXhwcmVzc2lvbiB0aGF0
IHJldHVybnMgdGhlIGJvb2xlYW4gdmFsdWUKLS8vIG9mIHRoZSBiaXQgb2YgdGhlIHNoYXJlZCBi
aXRmaWVsZHMgZm9yIHRoZSBnaXZlbiBiaXQgaW5kZXguCi0vLyBFeGFtcGxlOiAiKChiaXRGaWVs
ZDFfICYgMHgwNCkgPT0gMHgwNCkiCi1zdHJpbmcgR2VuZXJhdGVHZXRCaXQoaW50IGJpdEluZGV4
KTsKLQotLy8gR2VuZXJhdGVzIHRoZSBqYXZhIGNvZGUgZm9yIHRoZSBleHByZXNzaW9uIHRoYXQg
c2V0cyB0aGUgYml0IG9mIHRoZSBzaGFyZWQKLS8vIGJpdGZpZWxkcyBmb3IgdGhlIGdpdmVuIGJp
dCBpbmRleC4KLS8vIEV4YW1wbGU6ICJiaXRGaWVsZDFfID0gKGJpdEZpZWxkMV8gfCAweDA0KSIK
LXN0cmluZyBHZW5lcmF0ZVNldEJpdChpbnQgYml0SW5kZXgpOwotCi0vLyBHZW5lcmF0ZXMgdGhl
IGphdmEgY29kZSBmb3IgdGhlIGV4cHJlc3Npb24gdGhhdCBjbGVhcnMgdGhlIGJpdCBvZiB0aGUg
c2hhcmVkCi0vLyBiaXRmaWVsZHMgZm9yIHRoZSBnaXZlbiBiaXQgaW5kZXguCi0vLyBFeGFtcGxl
OiAiYml0RmllbGQxXyA9IChiaXRGaWVsZDFfICYgfjB4MDQpIgotc3RyaW5nIEdlbmVyYXRlQ2xl
YXJCaXQoaW50IGJpdEluZGV4KTsKLQotLy8gRG9lcyB0aGUgc2FtZSBhcyBHZW5lcmF0ZUdldEJp
dCBidXQgb3BlcmF0ZXMgb24gdGhlIGJpdCBmaWVsZCBvbiBhIGxvY2FsCi0vLyB2YXJpYWJsZS4g
VGhpcyBpcyB1c2VkIGJ5IHRoZSBidWlsZGVyIHRvIGNvcHkgdGhlIHZhbHVlIGluIHRoZSBidWls
ZGVyIHRvCi0vLyB0aGUgbWVzc2FnZS4KLS8vIEV4YW1wbGU6ICIoKGZyb21fYml0RmllbGQxXyAm
IDB4MDQpID09IDB4MDQpIgotc3RyaW5nIEdlbmVyYXRlR2V0Qml0RnJvbUxvY2FsKGludCBiaXRJ
bmRleCk7Ci0KLS8vIERvZXMgdGhlIHNhbWUgYXMgR2VuZXJhdGVTZXRCaXQgYnV0IG9wZXJhdGVz
IG9uIHRoZSBiaXQgZmllbGQgb24gYSBsb2NhbAotLy8gdmFyaWFibGUuIFRoaXMgaXMgdXNlZCBi
eSB0aGUgYnVpbGRlciB0byBjb3B5IHRoZSB2YWx1ZSBpbiB0aGUgYnVpbGRlciB0bwotLy8gdGhl
IG1lc3NhZ2UuCi0vLyBFeGFtcGxlOiAidG9fYml0RmllbGQxXyA9ICh0b19iaXRGaWVsZDFfIHwg
MHgwNCkiCi1zdHJpbmcgR2VuZXJhdGVTZXRCaXRUb0xvY2FsKGludCBiaXRJbmRleCk7Ci0KLS8v
IERvZXMgdGhlIHNhbWUgYXMgR2VuZXJhdGVHZXRCaXQgYnV0IG9wZXJhdGVzIG9uIHRoZSBiaXQg
ZmllbGQgb24gYSBsb2NhbAotLy8gdmFyaWFibGUuIFRoaXMgaXMgdXNlZCBieSB0aGUgcGFyc2lu
ZyBjb25zdHJ1Y3RvciB0byByZWNvcmQgaWYgYSByZXBlYXRlZAotLy8gZmllbGQgaXMgbXV0YWJs
ZS4KLS8vIEV4YW1wbGU6ICIoKG11dGFibGVfYml0RmllbGQxXyAmIDB4MDQpID09IDB4MDQpIgot
c3RyaW5nIEdlbmVyYXRlR2V0Qml0TXV0YWJsZUxvY2FsKGludCBiaXRJbmRleCk7Ci0KLS8vIERv
ZXMgdGhlIHNhbWUgYXMgR2VuZXJhdGVTZXRCaXQgYnV0IG9wZXJhdGVzIG9uIHRoZSBiaXQgZmll
bGQgb24gYSBsb2NhbAotLy8gdmFyaWFibGUuIFRoaXMgaXMgdXNlZCBieSB0aGUgcGFyc2luZyBj
b25zdHJ1Y3RvciB0byByZWNvcmQgaWYgYSByZXBlYXRlZAotLy8gZmllbGQgaXMgbXV0YWJsZS4K
LS8vIEV4YW1wbGU6ICJtdXRhYmxlX2JpdEZpZWxkMV8gPSAobXV0YWJsZV9iaXRGaWVsZDFfIHwg
MHgwNCkiCi1zdHJpbmcgR2VuZXJhdGVTZXRCaXRNdXRhYmxlTG9jYWwoaW50IGJpdEluZGV4KTsK
LQotLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBKYXZhVHlwZSBpcyBhIHJlZmVyZW5jZSB0eXBlLgot
Ym9vbCBJc1JlZmVyZW5jZVR5cGUoSmF2YVR5cGUgdHlwZSk7Ci0KLS8vIFJldHVybnMgdGhlIGNh
cGl0YWxpemVkIG5hbWUgZm9yIGNhbGxpbmcgcmVsYXRpdmUgZnVuY3Rpb25zIGluCi0vLyBDb2Rl
ZElucHV0U3RyZWFtCi1jb25zdCBjaGFyKiBHZXRDYXBpdGFsaXplZFR5cGUoY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCwgYm9vbCBpbW11dGFibGUpOwotCi0vLyBGb3IgZW5jb2RpbmdzIHdp
dGggZml4ZWQgc2l6ZXMsIHJldHVybnMgdGhhdCBzaXplIGluIGJ5dGVzLiAgT3RoZXJ3aXNlCi0v
LyByZXR1cm5zIC0xLgotaW50IEZpeGVkU2l6ZShGaWVsZERlc2NyaXB0b3I6OlR5cGUgdHlwZSk7
Ci0KLS8vIENvbXBhcmF0b3JzIHVzZWQgdG8gc29ydCBmaWVsZHMgaW4gTWVzc2FnZUdlbmVyYXRv
cgotc3RydWN0IEZpZWxkT3JkZXJpbmdCeU51bWJlciB7Ci0gIGlubGluZSBib29sIG9wZXJhdG9y
KCkoY29uc3QgRmllbGREZXNjcmlwdG9yKiBhLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogYikgY29uc3QgewotICAgIHJldHVybiBhLT5udW1iZXIoKSA8
IGItPm51bWJlcigpOwotICB9Ci19OwotCi1zdHJ1Y3QgRXh0ZW5zaW9uUmFuZ2VPcmRlcmluZyB7
Ci0gIGJvb2wgb3BlcmF0b3IoKShjb25zdCBEZXNjcmlwdG9yOjpFeHRlbnNpb25SYW5nZSogYSwK
LSAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlKiBiKSBj
b25zdCB7Ci0gICAgcmV0dXJuIGEtPnN0YXJ0IDwgYi0+c3RhcnQ7Ci0gIH0KLX07Ci0KLS8vIFNv
cnQgdGhlIGZpZWxkcyBvZiB0aGUgZ2l2ZW4gRGVzY3JpcHRvciBieSBudW1iZXIgaW50byBhIG5l
d1tdJ2QgYXJyYXkKLS8vIGFuZCByZXR1cm4gaXQuIFRoZSBjYWxsZXIgc2hvdWxkIGRlbGV0ZSB0
aGUgcmV0dXJuZWQgYXJyYXkuCi1jb25zdCBGaWVsZERlc2NyaXB0b3IqKiBTb3J0RmllbGRzQnlO
dW1iZXIoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLS8vIERvZXMgdGhpcyBtZXNz
YWdlIGNsYXNzIGhhdmUgYW55IHBhY2tlZCBmaWVsZHM/Ci1pbmxpbmUgYm9vbCBIYXNQYWNrZWRG
aWVsZHMoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBmb3IgKGludCBpID0gMDsg
aSA8IGRlc2NyaXB0b3ItPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGlmIChkZXNjcmlwdG9y
LT5maWVsZChpKS0+aXNfcGFja2VkKCkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
fQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIENoZWNrIGEgbWVzc2FnZSB0eXBlIGFuZCBpdHMg
c3ViLW1lc3NhZ2UgdHlwZXMgcmVjdXJzaXZlbHkgdG8gc2VlIGlmIGFueSBvZgotLy8gdGhlbSBo
YXMgYSByZXF1aXJlZCBmaWVsZC4gUmV0dXJuIHRydWUgaWYgYSByZXF1aXJlZCBmaWVsZCBpcyBm
b3VuZC4KLWJvb2wgSGFzUmVxdWlyZWRGaWVsZHMoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRv
cik7Ci0KLS8vIFdoZXRoZXIgYSAucHJvdG8gZmlsZSBzdXBwb3J0cyBmaWVsZCBwcmVzZW5jZSB0
ZXN0IGZvciBub24tbWVzc2FnZSB0eXBlcy4KLWlubGluZSBib29sIFN1cHBvcnRGaWVsZFByZXNl
bmNlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlw
dG9yLT5zeW50YXgoKSAhPSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFYX1BST1RPMzsKLX0KLQotLy8g
V2hldGhlciBnZW5lcmF0ZSBjbGFzc2VzIGV4cG9zZSBwdWJsaWMgUEFSU0VSIGluc3RhbmNlcy4K
LWlubGluZSBib29sIEV4cG9zZVB1YmxpY1BhcnNlcihjb25zdCBGaWxlRGVzY3JpcHRvciogZGVz
Y3JpcHRvcikgewotICAvLyBUT0RPKGxpdWppc2kpOiBNYXJrIHRoZSBQQVJTRVIgcHJpdmF0ZSBp
biAzLjEueCByZWxlYXNlcy4KLSAgcmV0dXJuIGRlc2NyaXB0b3ItPnN5bnRheCgpID09IEZpbGVE
ZXNjcmlwdG9yOjpTWU5UQVhfUFJPVE8yOwotfQotCi0vLyBXaGV0aGVyIHVua25vd24gZW51bSB2
YWx1ZXMgYXJlIGtlcHQgKGkuZS4sIG5vdCBzdG9yZWQgaW4gVW5rbm93bkZpZWxkU2V0Ci0vLyBi
dXQgaW4gdGhlIG1lc3NhZ2UgYW5kIGNhbiBiZSBxdWVyaWVkIHVzaW5nIGFkZGl0aW9uYWwgZ2V0
dGVycyB0aGF0IHJldHVybgotLy8gaW50cy4KLWlubGluZSBib29sIFN1cHBvcnRVbmtub3duRW51
bVZhbHVlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNj
cmlwdG9yLT5zeW50YXgoKSA9PSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFYX1BST1RPMzsKLX0KLQot
Ly8gQ2hlY2sgd2hldGhlciBhIG1lc2FzZ2UgaGFzIHJlcGVhdGVkIGZpZWxkcy4KLWJvb2wgSGFz
UmVwZWF0ZWRGaWVsZHMoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLWlubGluZSBi
b29sIElzTWFwRW50cnkoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICByZXR1cm4g
ZGVzY3JpcHRvci0+b3B0aW9ucygpLm1hcF9lbnRyeSgpOwotfQotCi1pbmxpbmUgYm9vbCBJc01h
cEZpZWxkKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICByZXR1cm4gZGVz
Y3JpcHRvci0+aXNfbWFwKCk7Ci19Ci0KLWlubGluZSBib29sIFByZXNlcnZlVW5rbm93bkZpZWxk
cyhjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yLT5m
aWxlKCktPnN5bnRheCgpICE9IEZpbGVEZXNjcmlwdG9yOjpTWU5UQVhfUFJPVE8zOwotfQotCi1p
bmxpbmUgYm9vbCBJc0FueU1lc3NhZ2UoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewot
ICByZXR1cm4gZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCkgPT0gImdvb2dsZS5wcm90b2J1Zi5Bbnki
OwotfQotCi1pbmxpbmUgYm9vbCBDaGVja1V0ZjgoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNj
cmlwdG9yKSB7Ci0gIHJldHVybiBkZXNjcmlwdG9yLT5maWxlKCktPnN5bnRheCgpID09IEZpbGVE
ZXNjcmlwdG9yOjpTWU5UQVhfUFJPVE8zIHx8Ci0gICAgICBkZXNjcmlwdG9yLT5maWxlKCktPm9w
dGlvbnMoKS5qYXZhX3N0cmluZ19jaGVja191dGY4KCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBq
YXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1Zgot
Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01Q
SUxFUl9KQVZBX0hFTFBFUlNfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX2xhenlfbWVzc2FnZV9maWVsZC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkLmNjCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwZGU4Y2JlNTI5YzhiNDU0NjEyM2Q5YWMzMDI4N2UxMjE4MjIwNDM5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkLmNjCisrKyAv
ZGV2L251bGwKQEAgLTEsODE0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0vLyBBdXRob3I6IG5pd2FzYWtpQGdvb2dsZS5jb20gKE5hb2tpIEl3YXNha2kpCi0v
LyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5q
YXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfY29udGV4dC5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ug
amF2YSB7Ci0KLUltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotSW1tdXRhYmxl
TGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRvcigKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IsCi0gICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICBpbnQgYnVpbGRlckJpdElu
ZGV4LAotICAgIENvbnRleHQqIGNvbnRleHQpCi0gICAgOiBJbW11dGFibGVNZXNzYWdlRmllbGRH
ZW5lcmF0b3IoCi0gICAgICAgICAgZGVzY3JpcHRvciwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVy
Qml0SW5kZXgsIGNvbnRleHQpIHsKLX0KLQotSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVy
YXRvcjo6fkltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIElt
bXV0YWJsZUxhenlNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0g
ICAgInByaXZhdGUgY29tLmdvb2dsZS5wcm90b2J1Zi5MYXp5RmllbGRMaXRlICRuYW1lJF8gPVxu
IgotICAgICIgICAgbmV3IGNvbS5nb29nbGUucHJvdG9idWYuTGF6eUZpZWxkTGl0ZSgpO1xuIik7
Ci0KLSAgUHJpbnRFeHRyYUZpZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmludGVyKTsKLSAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0YWxp
emVkX25hbWUkKCkge1xuIgotICAgICIgIHJldHVybiAkZ2V0X2hhc19maWVsZF9iaXRfbWVzc2Fn
ZSQ7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0
aW9uJHB1YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIHJl
dHVybiAoJHR5cGUkKSAkbmFtZSRfLmdldFZhbHVlKCR0eXBlJC5nZXREZWZhdWx0SW5zdGFuY2Uo
KSk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlv
biRwdWJsaWMgJHR5cGUkT3JCdWlsZGVyIGdldCRjYXBpdGFsaXplZF9uYW1lJE9yQnVpbGRlcigp
IHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQg
SW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkZXJNZW1i
ZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIFdoZW4gdXNpbmcgbmVzdGVk
LWJ1aWxkZXJzLCB0aGUgY29kZSBpbml0aWFsbHkgd29ya3MganVzdCBsaWtlIHRoZQotICAvLyBu
b24tbmVzdGVkIGJ1aWxkZXIgY2FzZS4gSXQgb25seSBjcmVhdGVzIGEgbmVzdGVkIGJ1aWxkZXIg
bGF6aWx5IG9uCi0gIC8vIGRlbWFuZCBhbmQgdGhlbiBmb3JldmVyIGRlbGVnYXRlcyB0byBpdCBh
ZnRlciBjcmVhdGlvbi4KLQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2
YXRlIGNvbS5nb29nbGUucHJvdG9idWYuTGF6eUZpZWxkTGl0ZSAkbmFtZSRfID1cbiIKLSAgICAi
ICAgIG5ldyBjb20uZ29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExpdGUoKTtcbiIpOwotCi0gIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgLy8gSWYgdGhpcyBidWlsZGVyIGlzIG5vbi1u
dWxsLCBpdCBpcyB1c2VkIGFuZCB0aGUgb3RoZXIgZmllbGRzIGFyZQotICAgIC8vIGlnbm9yZWQu
Ci0gICAgInByaXZhdGUgY29tLmdvb2dsZS5wcm90b2J1Zi5TaW5nbGVGaWVsZEJ1aWxkZXI8XG4i
Ci0gICAgIiAgICAkdHlwZSQsICR0eXBlJC5CdWlsZGVyLCAkdHlwZSRPckJ1aWxkZXI+ICRuYW1l
JEJ1aWxkZXJfOyIKLSAgICAiXG4iKTsKLQotICAvLyBUaGUgY29tbWVudHMgYWJvdmUgdGhlIG1l
dGhvZHMgYmVsb3cgYXJlIGJhc2VkIG9uIGEgaHlwb3RoZXRpY2FsCi0gIC8vIGZpZWxkIG9mIHR5
cGUgIkZpZWxkIiBjYWxsZWQgIkZpZWxkIi4KLQotICAvLyBib29sZWFuIGhhc0ZpZWxkKCkKLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNh
cGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIHJldHVybiAkZ2V0X2hhc19maWVsZF9iaXRf
YnVpbGRlciQ7XG4iCi0gICAgIn1cbiIpOwotCi0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFt
ZSQoKSB7XG4iCi0gICAgICAiICByZXR1cm4gKCR0eXBlJCkgJG5hbWUkXy5nZXRWYWx1ZSgkdHlw
ZSQuZ2V0RGVmYXVsdEluc3RhbmNlKCkpO1xuIgotICAgICAgIn1cbiIpOwotCi0gIC8vIEZpZWxk
LkJ1aWxkZXIgc2V0RmllbGQoRmllbGQgdmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgUHJpbnROZXN0ZWRCdWlsZGVyRnVuY3Rpb24ocHJpbnRl
ciwKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1l
JCgkdHlwZSQgdmFsdWUpIiwKLQotICAgICJpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICIg
IHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpO1xuIgotICAgICJ9XG4iCi0gICAgIiRu
YW1lJF8uc2V0VmFsdWUodmFsdWUpO1xuIgotICAgICIkb25fY2hhbmdlZCRcbiIsCi0KLSAgICAg
TlVMTCwgIC8vIExhenkgZmllbGRzIGFyZSBzdXBwb3J0ZWQgb25seSBmb3IgbGl0ZS1ydW50aW1l
LgotCi0gICAgIiRzZXRfaGFzX2ZpZWxkX2JpdF9idWlsZGVyJDtcbiIKLSAgICAicmV0dXJuIHRo
aXM7XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIHNldEZpZWxkKEZpZWxkLkJ1aWxkZXIgYnVp
bGRlckZvclZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9y
Xyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNh
dGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICAk
dHlwZSQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpIiwKLQotICAgICIkbmFtZSRfLnNldFZhbHVl
KGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpKTtcbiIKLSAgICAiJG9uX2NoYW5nZWQkXG4iLAotCi0g
ICAgTlVMTCwKLQotICAgICIkc2V0X2hhc19maWVsZF9iaXRfYnVpbGRlciQ7XG4iCi0gICAgInJl
dHVybiB0aGlzO1xuIik7Ci0KLSAgLy8gRmllbGQuQnVpbGRlciBtZXJnZUZpZWxkKEZpZWxkIHZh
bHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFBy
aW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJs
aWMgQnVpbGRlciBtZXJnZSRjYXBpdGFsaXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIiwKLQotICAg
ICJpZiAoJGdldF9oYXNfZmllbGRfYml0X2J1aWxkZXIkICYmXG4iCi0gICAgIiAgICAhJG5hbWUk
Xy5jb250YWluc0RlZmF1bHRJbnN0YW5jZSgpKSB7XG4iCi0gICAgIiAgJG5hbWUkXy5zZXRWYWx1
ZShcbiIKLSAgICAiICAgICR0eXBlJC5uZXdCdWlsZGVyKFxuIgotICAgICIgICAgICAgIGdldCRj
YXBpdGFsaXplZF9uYW1lJCgpKS5tZXJnZUZyb20odmFsdWUpLmJ1aWxkUGFydGlhbCgpKTtcbiIK
LSAgICAifSBlbHNlIHtcbiIKLSAgICAiICAkbmFtZSRfLnNldFZhbHVlKHZhbHVlKTtcbiIKLSAg
ICAifVxuIgotICAgICIkb25fY2hhbmdlZCRcbiIsCi0KLSAgICBOVUxMLAotCi0gICAgIiRzZXRf
aGFzX2ZpZWxkX2JpdF9idWlsZGVyJDtcbiIKLSAgICAicmV0dXJuIHRoaXM7XG4iKTsKLQotICAv
LyBGaWVsZC5CdWlsZGVyIGNsZWFyRmllbGQoKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIs
Ci0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBjbGVhciRjYXBpdGFsaXplZF9uYW1l
JCgpIiwKLQotICAgICIkbmFtZSRfLmNsZWFyKCk7XG4iCi0gICAgIiRvbl9jaGFuZ2VkJFxuIiwK
LQotICAgIE5VTEwsCi0KLSAgICAiJGNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRlciQ7XG4iCi0g
ICAgInJldHVybiB0aGlzO1xuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVj
YXRpb24kcHVibGljICR0eXBlJC5CdWlsZGVyIGdldCRjYXBpdGFsaXplZF9uYW1lJEJ1aWxkZXIo
KSB7XG4iCi0gICAgIiAgJHNldF9oYXNfZmllbGRfYml0X2J1aWxkZXIkO1xuIgotICAgICIgICRv
bl9jaGFuZ2VkJFxuIgotICAgICIgIHJldHVybiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRGaWVsZEJ1
aWxkZXIoKS5nZXRCdWlsZGVyKCk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkT3JCdWlsZGVyIGdldCRjYXBpdGFsaXpl
ZF9uYW1lJE9yQnVpbGRlcigpIHtcbiIKLSAgICAiICBpZiAoJG5hbWUkQnVpbGRlcl8gIT0gbnVs
bCkge1xuIgotICAgICIgICAgcmV0dXJuICRuYW1lJEJ1aWxkZXJfLmdldE1lc3NhZ2VPckJ1aWxk
ZXIoKTtcbiIKLSAgICAiICB9IGVsc2Uge1xuIgotICAgICIgICAgcmV0dXJuICRuYW1lJF87XG4i
Ci0gICAgIiAgfVxuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2
YXRlIGNvbS5nb29nbGUucHJvdG9idWYuU2luZ2xlRmllbGRCdWlsZGVyPFxuIgotICAgICIgICAg
JHR5cGUkLCAkdHlwZSQuQnVpbGRlciwgJHR5cGUkT3JCdWlsZGVyPiBcbiIKLSAgICAiICAgIGdl
dCRjYXBpdGFsaXplZF9uYW1lJEZpZWxkQnVpbGRlcigpIHtcbiIKLSAgICAiICBpZiAoJG5hbWUk
QnVpbGRlcl8gPT0gbnVsbCkge1xuIgotICAgICIgICAgJG5hbWUkQnVpbGRlcl8gPSBuZXcgY29t
Lmdvb2dsZS5wcm90b2J1Zi5TaW5nbGVGaWVsZEJ1aWxkZXI8XG4iCi0gICAgIiAgICAgICAgJHR5
cGUkLCAkdHlwZSQuQnVpbGRlciwgJHR5cGUkT3JCdWlsZGVyPihcbiIKLSAgICAiICAgICAgICAg
ICAgJG5hbWUkXyxcbiIKLSAgICAiICAgICAgICAgICAgZ2V0UGFyZW50Rm9yQ2hpbGRyZW4oKSxc
biIKLSAgICAiICAgICAgICAgICAgaXNDbGVhbigpKTtcbiIKLSAgICAiICAgICRuYW1lJF8gPSBu
dWxsO1xuIgotICAgICIgIH1cbiIKLSAgICAiICByZXR1cm4gJG5hbWUkQnVpbGRlcl87XG4iCi0g
ICAgIn1cbiIpOwotfQotCi0KLXZvaWQgSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZUluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiJG5hbWUkXy5jbGVhcigpO1xuIik7
Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZUJ1aWxkZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywgIiRuYW1lJF8uY2xlYXIoKTtcbiIpOwotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLCAiJGNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRlciQ7XG4iKTsKLX0K
LQotdm9pZCBJbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVy
Z2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAiaWYgKG90aGVyLmhhcyRjYXBpdGFsaXplZF9uYW1lJCgpKSB7XG4i
Ci0gICAgIiAgJG5hbWUkXy5tZXJnZShvdGhlci4kbmFtZSRfKTtcbiIKLSAgICAiICAkc2V0X2hh
c19maWVsZF9iaXRfYnVpbGRlciQ7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJs
ZUxhenlNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGluZ0NvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAgICJpZiAoJGdldF9oYXNfZmllbGRfYml0X2Zyb21fbG9jYWwkKSB7XG4iCi0gICAgICAiICAk
c2V0X2hhc19maWVsZF9iaXRfdG9fbG9jYWwkO1xuIgotICAgICAgIn1cbiIpOwotCi0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAicmVzdWx0LiRuYW1lJF8uc2V0KFxuIgotICAg
ICAgIiAgICAkbmFtZSRfKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZUxhenlNZXNzYWdlRmll
bGRHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkbmFtZSRfLnNldEJ5
dGVTdHJpbmcoaW5wdXQucmVhZEJ5dGVzKCksIGV4dGVuc2lvblJlZ2lzdHJ5KTtcbiIpOwotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkc2V0X2hhc19maWVsZF9iaXRfbWVzc2Fn
ZSQ7XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoK
LUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsK
LSAgLy8gRG8gbm90IGRlLXNlcmlhbGl6ZSBsYXp5IGZpZWxkcy4KLSAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAiaWYgKCRnZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlJCkge1xuIgot
ICAgICIgIG91dHB1dC53cml0ZUJ5dGVzKCRudW1iZXIkLCAkbmFtZSRfLnRvQnl0ZVN0cmluZygp
KTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoJGdldF9o
YXNfZmllbGRfYml0X21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgc2l6ZSArPSBjb20uZ29vZ2xlLnBy
b3RvYnVmLkNvZGVkT3V0cHV0U3RyZWFtXG4iCi0gICAgIiAgICAuY29tcHV0ZUxhenlGaWVsZFNp
emUoJG51bWJlciQsICRuYW1lJF8pO1xuIgotICAgICJ9XG4iKTsKLX0KLQotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi1JbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotSW1tdXRhYmxl
TGF6eU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVz
Y3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVz
c2FnZUJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29udGV4dCogY29udGV4dCkKLSAgICA6IEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRHZW5l
cmF0b3IoCi0gICAgICAgICAgZGVzY3JpcHRvciwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0
SW5kZXgsIGNvbnRleHQpIHsKLSAgY29uc3QgT25lb2ZHZW5lcmF0b3JJbmZvKiBpbmZvID0KLSAg
ICAgIGNvbnRleHQtPkdldE9uZW9mR2VuZXJhdG9ySW5mbyhkZXNjcmlwdG9yLT5jb250YWluaW5n
X29uZW9mKCkpOwotICBTZXRDb21tb25PbmVvZlZhcmlhYmxlcyhkZXNjcmlwdG9yLCBpbmZvLCAm
dmFyaWFibGVzXyk7Ci0gIHZhcmlhYmxlc19bImxhenlfdHlwZSJdID0gImNvbS5nb29nbGUucHJv
dG9idWYuTGF6eUZpZWxkTGl0ZSI7Ci19Ci0KLUltbXV0YWJsZUxhenlNZXNzYWdlT25lb2ZGaWVs
ZEdlbmVyYXRvcjo6Ci1+SW1tdXRhYmxlTGF6eU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yKCkg
e30KLQotdm9pZCBJbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIFByaW50RXh0cmFG
aWVsZEluZm8odmFyaWFibGVzXywgcHJpbnRlcik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0YWxpemVkX25hbWUkKCkge1xu
IgotICAgICIgIHJldHVybiAkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgIn1cbiIp
OwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0KLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQg
Z2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIGlmICgkaGFzX29uZW9mX2Nhc2Vf
bWVzc2FnZSQpIHtcbiIKLSAgICAiICAgIHJldHVybiAoJHR5cGUkKSAoKCRsYXp5X3R5cGUkKSAk
b25lb2ZfbmFtZSRfKS5nZXRWYWx1ZShcbiIKLSAgICAiICAgICAgICAkdHlwZSQuZ2V0RGVmYXVs
dEluc3RhbmNlKCkpO1xuIgotICAgICIgIH1cbiIKLSAgICAiICByZXR1cm4gJHR5cGUkLmdldERl
ZmF1bHRJbnN0YW5jZSgpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVMYXp5
TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBib29sZWFuIGhhc0ZpZWxkKCkKLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0
YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIHJldHVybiAkaGFzX29uZW9mX2Nhc2VfbWVzc2Fn
ZSQ7XG4iCi0gICAgIn1cbiIpOwotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
IiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIK
LSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICByZXR1
cm4gKCR0eXBlJCkgKCgkbGF6eV90eXBlJCkgJG9uZW9mX25hbWUkXykuZ2V0VmFsdWUoXG4iCi0g
ICAgIiAgICAgICAgJHR5cGUkLmdldERlZmF1bHRJbnN0YW5jZSgpKTtcbiIKLSAgICAiICB9XG4i
Ci0gICAgIiAgcmV0dXJuICR0eXBlJC5nZXREZWZhdWx0SW5zdGFuY2UoKTtcbiIKLSAgICAifVxu
Iik7Ci0KLSAgLy8gRmllbGQuQnVpbGRlciBzZXRGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxk
ZXJGdW5jdGlvbihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0
JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkiLAotCi0gICAgImlmICh2YWx1ZSA9PSBu
dWxsKSB7XG4iCi0gICAgIiAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7XG4iCi0g
ICAgIn1cbiIKLSAgICAiaWYgKCEoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSkge1xuIgotICAg
ICIgICRvbmVvZl9uYW1lJF8gPSBuZXcgJGxhenlfdHlwZSQoKTtcbiIKLSAgICAiICAkc2V0X29u
ZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgIn1cbiIKLSAgICAiKCgkbGF6eV90eXBlJCkgJG9u
ZW9mX25hbWUkXykuc2V0VmFsdWUodmFsdWUpO1xuIgotICAgICIkb25fY2hhbmdlZCRcbiIsCi0K
LSAgICAgTlVMTCwgIC8vIExhenkgZmllbGRzIGFyZSBzdXBwb3J0ZWQgb25seSBmb3IgbGl0ZS1y
dW50aW1lLgotCi0gICAgInJldHVybiB0aGlzO1xuIik7Ci0KLSAgLy8gRmllbGQuQnVpbGRlciBz
ZXRGaWVsZChGaWVsZC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkKLSAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxkZXJGdW5jdGlv
bihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxp
emVkX25hbWUkKFxuIgotICAgICIgICAgJHR5cGUkLkJ1aWxkZXIgYnVpbGRlckZvclZhbHVlKSIs
Ci0KLSAgICAiaWYgKCEoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSkge1xuIgotICAgICIgICRv
bmVvZl9uYW1lJF8gPSBuZXcgJGxhenlfdHlwZSQoKTtcbiIKLSAgICAiICAkc2V0X29uZW9mX2Nh
c2VfbWVzc2FnZSQ7XG4iCi0gICAgIn1cbiIKLSAgICAiKCgkbGF6eV90eXBlJCkgJG9uZW9mX25h
bWUkXykuc2V0VmFsdWUoYnVpbGRlckZvclZhbHVlLmJ1aWxkKCkpO1xuIgotICAgICIkb25fY2hh
bmdlZCRcbiIsCi0KLSAgICBOVUxMLAotCi0gICAgInJldHVybiB0aGlzO1xuIik7Ci0KLSAgLy8g
RmllbGQuQnVpbGRlciBtZXJnZUZpZWxkKEZpZWxkIHZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9u
KHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBtZXJnZSRjYXBpdGFs
aXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIiwKLQotICAgICJpZiAoJGhhc19vbmVvZl9jYXNlX21l
c3NhZ2UkICYmXG4iCi0gICAgIiAgICAhKCgkbGF6eV90eXBlJCkgJG9uZW9mX25hbWUkXykuY29u
dGFpbnNEZWZhdWx0SW5zdGFuY2UoKSkge1xuIgotICAgICIgICgoJGxhenlfdHlwZSQpICRvbmVv
Zl9uYW1lJF8pLnNldFZhbHVlKFxuIgotICAgICIgICAgJHR5cGUkLm5ld0J1aWxkZXIoXG4iCi0g
ICAgIiAgICAgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkpLm1lcmdlRnJvbSh2YWx1ZSkuYnVp
bGRQYXJ0aWFsKCkpO1xuIgotICAgICJ9IGVsc2Uge1xuIgotICAgICIgIGlmICghKCRoYXNfb25l
b2ZfY2FzZV9tZXNzYWdlJCkpIHtcbiIKLSAgICAiICAgICRvbmVvZl9uYW1lJF8gPSBuZXcgJGxh
enlfdHlwZSQoKTtcbiIKLSAgICAiICAgICRzZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAg
ICAiICB9XG4iCi0gICAgIiAgKCgkbGF6eV90eXBlJCkgJG9uZW9mX25hbWUkXykuc2V0VmFsdWUo
dmFsdWUpO1xuIgotICAgICJ9XG4iCi0gICAgIiRvbl9jaGFuZ2VkJFxuIiwKLQotICAgIE5VTEws
Ci0KLSAgICAicmV0dXJuIHRoaXM7XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIGNsZWFyRmll
bGQoKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFBy
aW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJs
aWMgQnVpbGRlciBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIiwKLQotICAgICJpZiAoJGhhc19v
bmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgJGNsZWFyX29uZW9mX2Nhc2VfbWVzc2Fn
ZSQ7XG4iCi0gICAgIiAgJG9uZW9mX25hbWUkXyA9IG51bGw7XG4iCi0gICAgIiAgJG9uX2NoYW5n
ZWQkXG4iCi0gICAgIn1cbiIsCi0KLSAgICBOVUxMLAotCi0gICAgInJldHVybiB0aGlzO1xuIik7
Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTGF6eU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdl
bmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCEoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2Uk
KSkge1xuIgotICAgICIgICRvbmVvZl9uYW1lJF8gPSBuZXcgJGxhenlfdHlwZSQoKTtcbiIKLSAg
ICAifVxuIgotICAgICIoKCRsYXp5X3R5cGUkKSAkb25lb2ZfbmFtZSRfKS5tZXJnZShcbiIKLSAg
ICAiICAgICgkbGF6eV90eXBlJCkgb3RoZXIuJG9uZW9mX25hbWUkXyk7XG4iCi0gICAgIiRzZXRf
b25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZUxhenlNZXNzYWdl
T25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkaW5nQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAg
ICAgICAgICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIik7Ci0gIHByaW50ZXIt
PkluZGVudCgpOwotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAicmVzdWx0
LiRvbmVvZl9uYW1lJF8gPSBuZXcgJGxhenlfdHlwZSQoKTtcbiIKLSAgICAgICIoKCRsYXp5X3R5
cGUkKSByZXN1bHQuJG9uZW9mX25hbWUkXykuc2V0KFxuIgotICAgICAgIiAgICAoKCRsYXp5X3R5
cGUkKSAkb25lb2ZfbmFtZSRfKSk7XG4iKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmlu
dGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTGF6eU1lc3NhZ2VPbmVvZkZp
ZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCEoJGhhc19v
bmVvZl9jYXNlX21lc3NhZ2UkKSkge1xuIgotICAgICIgICRvbmVvZl9uYW1lJF8gPSBuZXcgJGxh
enlfdHlwZSQoKTtcbiIKLSAgICAifVxuIgotICAgICIoKCRsYXp5X3R5cGUkKSAkb25lb2ZfbmFt
ZSRfKS5zZXRCeXRlU3RyaW5nKFxuIgotICAgICIgICAgaW5wdXQucmVhZEJ5dGVzKCksIGV4dGVu
c2lvblJlZ2lzdHJ5KTtcbiIKLSAgICAiJHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIik7Ci19
Ci0KLXZvaWQgSW1tdXRhYmxlTGF6eU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVy
YXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8g
RG8gbm90IGRlLXNlcmlhbGl6ZSBsYXp5IGZpZWxkcy4KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgIG91
dHB1dC53cml0ZUJ5dGVzKFxuIgotICAgICIgICAgICAkbnVtYmVyJCwgKCgkbGF6eV90eXBlJCkg
JG9uZW9mX25hbWUkXykudG9CeXRlU3RyaW5nKCkpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9p
ZCBJbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJp
YWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xu
IgotICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0cmVhbVxu
IgotICAgICIgICAgLmNvbXB1dGVMYXp5RmllbGRTaXplKCRudW1iZXIkLCAoJGxhenlfdHlwZSQp
ICRvbmVvZl9uYW1lJF8pO1xuIgotICAgICJ9XG4iKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1S
ZXBlYXRlZEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotUmVwZWF0ZWRJbW11
dGFibGVMYXp5TWVzc2FnZUZpZWxkR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZGVzY3JpcHRvciwKLSAgICBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgIGludCBidWlsZGVy
Qml0SW5kZXgsCi0gICAgQ29udGV4dCogY29udGV4dCkKLSAgICA6IFJlcGVhdGVkSW1tdXRhYmxl
TWVzc2FnZUZpZWxkR2VuZXJhdG9yKAotICAgICAgICAgIGRlc2NyaXB0b3IsIG1lc3NhZ2VCaXRJ
bmRleCwgYnVpbGRlckJpdEluZGV4LCBjb250ZXh0KSB7Ci19Ci0KLQotUmVwZWF0ZWRJbW11dGFi
bGVMYXp5TWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLX5SZXBlYXRlZEltbXV0YWJsZUxhenlNZXNz
YWdlRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlTGF6eU1lc3Nh
Z2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSBqYXZh
LnV0aWwuTGlzdDxjb20uZ29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExpdGU+ICRuYW1lJF87XG4i
KTsKLSAgUHJpbnRFeHRyYUZpZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmludGVyKTsKLSAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRpbC5MaXN0PCR0eXBl
JD5cbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKSB7XG4iCi0gICAgIiAg
amF2YS51dGlsLkxpc3Q8JHR5cGUkPiBsaXN0ID1cbiIKLSAgICAiICAgICAgbmV3IGphdmEudXRp
bC5BcnJheUxpc3Q8JHR5cGUkPigkbmFtZSRfLnNpemUoKSk7XG4iCi0gICAgIiAgZm9yIChjb20u
Z29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExpdGUgbGYgOiAkbmFtZSRfKSB7XG4iCi0gICAgIiAg
ICBsaXN0LmFkZCgoJHR5cGUkKSBsZi5nZXRWYWx1ZSgkdHlwZSQuZ2V0RGVmYXVsdEluc3RhbmNl
KCkpKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgcmV0dXJuIGxpc3Q7XG4iCi0gICAgIn1cbiIp
OwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgamF2YS51dGls
Lkxpc3Q8PyBleHRlbmRzICR0eXBlJE9yQnVpbGRlcj5cbiIKLSAgICAiICAgIGdldCRjYXBpdGFs
aXplZF9uYW1lJE9yQnVpbGRlckxpc3QoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGdldCRjYXBpdGFs
aXplZF9uYW1lJExpc3QoKTtcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50
KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVkX25hbWUkQ291bnQoKSB7
XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF8uc2l6ZSgpO1xuIgotICAgICJ9XG4iKTsKLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRh
bGl6ZWRfbmFtZSQoaW50IGluZGV4KSB7XG4iCi0gICAgIiAgcmV0dXJuICgkdHlwZSQpXG4iCi0g
ICAgIiAgICAgICRuYW1lJF8uZ2V0KGluZGV4KS5nZXRWYWx1ZSgkdHlwZSQuZ2V0RGVmYXVsdElu
c3RhbmNlKCkpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVw
cmVjYXRpb24kcHVibGljICR0eXBlJE9yQnVpbGRlciBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRPckJ1
aWxkZXIoXG4iCi0gICAgIiAgICBpbnQgaW5kZXgpIHtcbiIKLSAgICAiICByZXR1cm4gKCR0eXBl
JE9yQnVpbGRlcilcbiIKLSAgICAiICAgICAgJG5hbWUkXy5nZXQoaW5kZXgpLmdldFZhbHVlKCR0
eXBlJC5nZXREZWZhdWx0SW5zdGFuY2UoKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJl
cGVhdGVkSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxk
ZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIFdoZW4gdXNpbmcg
bmVzdGVkLWJ1aWxkZXJzLCB0aGUgY29kZSBpbml0aWFsbHkgd29ya3MganVzdCBsaWtlIHRoZQot
ICAvLyBub24tbmVzdGVkIGJ1aWxkZXIgY2FzZS4gSXQgb25seSBjcmVhdGVzIGEgbmVzdGVkIGJ1
aWxkZXIgbGF6aWx5IG9uCi0gIC8vIGRlbWFuZCBhbmQgdGhlbiBmb3JldmVyIGRlbGVnYXRlcyB0
byBpdCBhZnRlciBjcmVhdGlvbi4KLQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICJwcml2YXRlIGphdmEudXRpbC5MaXN0PGNvbS5nb29nbGUucHJvdG9idWYuTGF6eUZpZWxkTGl0
ZT4gJG5hbWUkXyA9XG4iCi0gICAgIiAgamF2YS51dGlsLkNvbGxlY3Rpb25zLmVtcHR5TGlzdCgp
O1xuIgotCi0gICAgInByaXZhdGUgdm9pZCBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFi
bGUoKSB7XG4iCi0gICAgIiAgaWYgKCEkZ2V0X211dGFibGVfYml0X2J1aWxkZXIkKSB7XG4iCi0g
ICAgIiAgICAkbmFtZSRfID1cbiIKLSAgICAiICAgICAgICBuZXcgamF2YS51dGlsLkFycmF5TGlz
dDxjb20uZ29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExpdGU+KFxuIgotICAgICIgICAgICAgICAg
ICAkbmFtZSRfKTtcbiIKLSAgICAiICAgICRzZXRfbXV0YWJsZV9iaXRfYnVpbGRlciQ7XG4iCi0g
ICAgIiAgIH1cbiIKLSAgICAifVxuIgotICAgICJcbiIpOwotCi0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgLy8gSWYgdGhpcyBidWlsZGVyIGlzIG5vbi1udWxsLCBpdCBpcyB1c2Vk
IGFuZCB0aGUgb3RoZXIgZmllbGRzIGFyZQotICAgIC8vIGlnbm9yZWQuCi0gICAgInByaXZhdGUg
Y29tLmdvb2dsZS5wcm90b2J1Zi5SZXBlYXRlZEZpZWxkQnVpbGRlcjxcbiIKLSAgICAiICAgICR0
eXBlJCwgJHR5cGUkLkJ1aWxkZXIsICR0eXBlJE9yQnVpbGRlcj4gJG5hbWUkQnVpbGRlcl87XG4i
Ci0gICAgIlxuIik7Ci0KLSAgLy8gVGhlIGNvbW1lbnRzIGFib3ZlIHRoZSBtZXRob2RzIGJlbG93
IGFyZSBiYXNlZCBvbiBhIGh5cG90aGV0aWNhbAotICAvLyByZXBlYXRlZCBmaWVsZCBvZiB0eXBl
ICJGaWVsZCIgY2FsbGVkICJSZXBlYXRlZEZpZWxkIi4KLQotICAvLyBMaXN0PEZpZWxkPiBnZXRS
ZXBlYXRlZEZpZWxkTGlzdCgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2Ny
aXB0b3JfKTsKLSAgUHJpbnROZXN0ZWRCdWlsZGVyRnVuY3Rpb24ocHJpbnRlciwKLSAgICAiJGRl
cHJlY2F0aW9uJHB1YmxpYyBqYXZhLnV0aWwuTGlzdDwkdHlwZSQ+IGdldCRjYXBpdGFsaXplZF9u
YW1lJExpc3QoKSIsCi0KLSAgICAiamF2YS51dGlsLkxpc3Q8JHR5cGUkPiBsaXN0ID1cbiIKLSAg
ICAiICAgIG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0PCR0eXBlJD4oJG5hbWUkXy5zaXplKCkpO1xu
IgotICAgICJmb3IgKGNvbS5nb29nbGUucHJvdG9idWYuTGF6eUZpZWxkTGl0ZSBsZiA6ICRuYW1l
JF8pIHtcbiIKLSAgICAiICBsaXN0LmFkZCgoJHR5cGUkKSBsZi5nZXRWYWx1ZSgkdHlwZSQuZ2V0
RGVmYXVsdEluc3RhbmNlKCkpKTtcbiIKLSAgICAifVxuIgotICAgICJyZXR1cm4gamF2YS51dGls
LkNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QobGlzdCk7XG4iLAotCi0gICAgInJldHVybiAk
bmFtZSRCdWlsZGVyXy5nZXRNZXNzYWdlTGlzdCgpO1xuIiwKLQotICAgIE5VTEwpOwotCi0gIC8v
IGludCBnZXRSZXBlYXRlZEZpZWxkQ291bnQoKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIs
Ci0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgaW50IGdldCRjYXBpdGFsaXplZF9uYW1lJENvdW50
KCkiLAotCi0gICAgInJldHVybiAkbmFtZSRfLnNpemUoKTtcbiIsCi0gICAgInJldHVybiAkbmFt
ZSRCdWlsZGVyXy5nZXRDb3VudCgpO1xuIiwKLQotICAgIE5VTEwpOwotCi0gIC8vIEZpZWxkIGdl
dFJlcGVhdGVkRmllbGQoaW50IGluZGV4KQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVy
LCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0g
ICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJChpbnQg
aW5kZXgpIiwKLQotICAgICJyZXR1cm4gKCR0eXBlJCkgJG5hbWUkXy5nZXQoaW5kZXgpLmdldFZh
bHVlKFxuIgotICAgICIgICAgJHR5cGUkLmdldERlZmF1bHRJbnN0YW5jZSgpKTtcbiIsCi0KLSAg
ICAicmV0dXJuICRuYW1lJEJ1aWxkZXJfLmdldE1lc3NhZ2UoaW5kZXgpO1xuIiwKLQotICAgIE5V
TEwpOwotCi0gIC8vIEJ1aWxkZXIgc2V0UmVwZWF0ZWRGaWVsZChpbnQgaW5kZXgsIEZpZWxkIHZh
bHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFBy
aW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJs
aWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICBpbnQgaW5kZXgs
ICR0eXBlJCB2YWx1ZSkiLAotICAgICJpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICIgIHRo
cm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpO1xuIgotICAgICJ9XG4iCi0gICAgImVuc3Vy
ZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIkbmFtZSRfLnNldChpbmRl
eCwgY29tLmdvb2dsZS5wcm90b2J1Zi5MYXp5RmllbGRMaXRlLmZyb21WYWx1ZSh2YWx1ZSkpO1xu
IgotICAgICIkb25fY2hhbmdlZCRcbiIsCi0gICAgIiRuYW1lJEJ1aWxkZXJfLnNldE1lc3NhZ2Uo
aW5kZXgsIHZhbHVlKTtcbiIsCi0gICAgInJldHVybiB0aGlzO1xuIik7Ci0KLSAgLy8gQnVpbGRl
ciBzZXRSZXBlYXRlZEZpZWxkKGludCBpbmRleCwgRmllbGQuQnVpbGRlciBidWlsZGVyRm9yVmFs
dWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgUHJp
bnROZXN0ZWRCdWlsZGVyRnVuY3Rpb24ocHJpbnRlciwKLSAgICAiJGRlcHJlY2F0aW9uJHB1Ymxp
YyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgIGludCBpbmRleCwg
JHR5cGUkLkJ1aWxkZXIgYnVpbGRlckZvclZhbHVlKSIsCi0KLSAgICAiZW5zdXJlJGNhcGl0YWxp
emVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiRuYW1lJF8uc2V0KGluZGV4LCBjb20uZ29v
Z2xlLnByb3RvYnVmLkxhenlGaWVsZExpdGUuZnJvbVZhbHVlKFxuIgotICAgICIgICAgYnVpbGRl
ckZvclZhbHVlLmJ1aWxkKCkpKTtcbiIKLSAgICAiJG9uX2NoYW5nZWQkXG4iLAotCi0gICAgIiRu
YW1lJEJ1aWxkZXJfLnNldE1lc3NhZ2UoaW5kZXgsIGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpKTtc
biIsCi0KLSAgICAicmV0dXJuIHRoaXM7XG4iKTsKLQotICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVk
RmllbGQoRmllbGQgdmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2Ny
aXB0b3JfKTsKLSAgUHJpbnROZXN0ZWRCdWlsZGVyRnVuY3Rpb24ocHJpbnRlciwKLSAgICAiJGRl
cHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGFkZCRjYXBpdGFsaXplZF9uYW1lJCgkdHlwZSQgdmFs
dWUpIiwKLQotICAgICJpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICIgIHRocm93IG5ldyBO
dWxsUG9pbnRlckV4Y2VwdGlvbigpO1xuIgotICAgICJ9XG4iCi0gICAgImVuc3VyZSRjYXBpdGFs
aXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIkbmFtZSRfLmFkZChjb20uZ29vZ2xlLnBy
b3RvYnVmLkxhenlGaWVsZExpdGUuZnJvbVZhbHVlKHZhbHVlKSk7XG4iCi0KLSAgICAiJG9uX2No
YW5nZWQkXG4iLAotCi0gICAgIiRuYW1lJEJ1aWxkZXJfLmFkZE1lc3NhZ2UodmFsdWUpO1xuIiwK
LQotICAgICJyZXR1cm4gdGhpcztcbiIpOwotCi0gIC8vIEJ1aWxkZXIgYWRkUmVwZWF0ZWRGaWVs
ZChpbnQgaW5kZXgsIEZpZWxkIHZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVy
LCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0g
ICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4i
Ci0gICAgIiAgICBpbnQgaW5kZXgsICR0eXBlJCB2YWx1ZSkiLAotCi0gICAgImlmICh2YWx1ZSA9
PSBudWxsKSB7XG4iCi0gICAgIiAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7XG4i
Ci0gICAgIn1cbiIKLSAgICAiZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4i
Ci0gICAgIiRuYW1lJF8uYWRkKGluZGV4LCBjb20uZ29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExp
dGUuZnJvbVZhbHVlKHZhbHVlKSk7XG4iCi0gICAgIiRvbl9jaGFuZ2VkJFxuIiwKLQotICAgICIk
bmFtZSRCdWlsZGVyXy5hZGRNZXNzYWdlKGluZGV4LCB2YWx1ZSk7XG4iLAotCi0gICAgInJldHVy
biB0aGlzO1xuIik7Ci0KLSAgLy8gQnVpbGRlciBhZGRSZXBlYXRlZEZpZWxkKEZpZWxkLkJ1aWxk
ZXIgYnVpbGRlckZvclZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAg
IiAgICAkdHlwZSQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpIiwKLQotICAgICJlbnN1cmUkY2Fw
aXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAiJG5hbWUkXy5hZGQoY29tLmdvb2ds
ZS5wcm90b2J1Zi5MYXp5RmllbGRMaXRlLmZyb21WYWx1ZShcbiIKLSAgICAiICAgIGJ1aWxkZXJG
b3JWYWx1ZS5idWlsZCgpKSk7XG4iCi0gICAgIiRvbl9jaGFuZ2VkJFxuIiwKLQotICAgICIkbmFt
ZSRCdWlsZGVyXy5hZGRNZXNzYWdlKGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpKTtcbiIsCi0KLSAg
ICAicmV0dXJuIHRoaXM7XG4iKTsKLQotICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVkRmllbGQoaW50
IGluZGV4LCBGaWVsZC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkKLSAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxkZXJGdW5jdGlv
bihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgYWRkJGNhcGl0YWxp
emVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQuQnVpbGRlciBidWlsZGVy
Rm9yVmFsdWUpIiwKLQotICAgICJlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtc
biIKLSAgICAiJG5hbWUkXy5hZGQoaW5kZXgsIGNvbS5nb29nbGUucHJvdG9idWYuTGF6eUZpZWxk
TGl0ZS5mcm9tVmFsdWUoXG4iCi0gICAgIiAgICBidWlsZGVyRm9yVmFsdWUuYnVpbGQoKSkpO1xu
IgotICAgICIkb25fY2hhbmdlZCRcbiIsCi0KLSAgICAiJG5hbWUkQnVpbGRlcl8uYWRkTWVzc2Fn
ZShpbmRleCwgYnVpbGRlckZvclZhbHVlLmJ1aWxkKCkpO1xuIiwKLQotICAgICJyZXR1cm4gdGhp
cztcbiIpOwotCi0gIC8vIEJ1aWxkZXIgYWRkQWxsUmVwZWF0ZWRGaWVsZChJdGVyYWJsZTxGaWVs
ZD4gdmFsdWVzKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlv
biRwdWJsaWMgQnVpbGRlciBhZGRBbGwkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICBq
YXZhLmxhbmcuSXRlcmFibGU8PyBleHRlbmRzICR0eXBlJD4gdmFsdWVzKSIsCi0KLSAgICAiZW5z
dXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgImZvciAoY29tLmdvb2ds
ZS5wcm90b2J1Zi5NZXNzYWdlTGl0ZSB2IDogdmFsdWVzKSB7XG4iCi0gICAgIiAgJG5hbWUkXy5h
ZGQoY29tLmdvb2dsZS5wcm90b2J1Zi5MYXp5RmllbGRMaXRlLmZyb21WYWx1ZSh2KSk7XG4iCi0g
ICAgIn1cbiIKLSAgICAiJG9uX2NoYW5nZWQkXG4iLAotCi0gICAgIiRuYW1lJEJ1aWxkZXJfLmFk
ZEFsbE1lc3NhZ2VzKHZhbHVlcyk7XG4iLAotCi0gICAgInJldHVybiB0aGlzO1xuIik7Ci0KLSAg
Ly8gQnVpbGRlciBjbGVhckFsbFJlcGVhdGVkRmllbGQoKQotICBXcml0ZUZpZWxkRG9jQ29tbWVu
dChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHBy
aW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBjbGVhciRjYXBpdGFsaXpl
ZF9uYW1lJCgpIiwKLQotICAgICIkbmFtZSRfID0gamF2YS51dGlsLkNvbGxlY3Rpb25zLmVtcHR5
TGlzdCgpO1xuIgotICAgICIkY2xlYXJfbXV0YWJsZV9iaXRfYnVpbGRlciQ7XG4iCi0gICAgIiRv
bl9jaGFuZ2VkJFxuIiwKLQotICAgICIkbmFtZSRCdWlsZGVyXy5jbGVhcigpO1xuIiwKLQotICAg
ICJyZXR1cm4gdGhpcztcbiIpOwotCi0gIC8vIEJ1aWxkZXIgcmVtb3ZlUmVwZWF0ZWRGaWVsZChp
bnQgaW5kZXgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsK
LSAgUHJpbnROZXN0ZWRCdWlsZGVyRnVuY3Rpb24ocHJpbnRlciwKLSAgICAiJGRlcHJlY2F0aW9u
JHB1YmxpYyBCdWlsZGVyIHJlbW92ZSRjYXBpdGFsaXplZF9uYW1lJChpbnQgaW5kZXgpIiwKLQot
ICAgICJlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAiJG5hbWUk
Xy5yZW1vdmUoaW5kZXgpO1xuIgotICAgICIkb25fY2hhbmdlZCRcbiIsCi0KLSAgICAiJG5hbWUk
QnVpbGRlcl8ucmVtb3ZlKGluZGV4KTtcbiIsCi0KLSAgICAicmV0dXJuIHRoaXM7XG4iKTsKLQot
ICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkLkJ1aWxk
ZXIgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnVpbGRlcihcbiIKLSAgICAiICAgIGludCBpbmRleCkg
e1xuIgotICAgICIgIHJldHVybiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRGaWVsZEJ1aWxkZXIoKS5n
ZXRCdWlsZGVyKGluZGV4KTtcbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1l
bnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSRPckJ1aWxkZXIgZ2V0JGNhcGl0YWxp
emVkX25hbWUkT3JCdWlsZGVyKFxuIgotICAgICIgICAgaW50IGluZGV4KSB7XG4iCi0gICAgIiAg
aWYgKCRuYW1lJEJ1aWxkZXJfID09IG51bGwpIHtcbiIKLSAgICAiICAgIHJldHVybiAkbmFtZSRf
LmdldChpbmRleCk7IgotICAgICIgIH0gZWxzZSB7XG4iCi0gICAgIiAgICByZXR1cm4gJG5hbWUk
QnVpbGRlcl8uZ2V0TWVzc2FnZU9yQnVpbGRlcihpbmRleCk7XG4iCi0gICAgIiAgfVxuIgotICAg
ICJ9XG4iKTsKLQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVi
bGljIGphdmEudXRpbC5MaXN0PD8gZXh0ZW5kcyAkdHlwZSRPckJ1aWxkZXI+IFxuIgotICAgICIg
ICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJE9yQnVpbGRlckxpc3QoKSB7XG4iCi0gICAgIiAgaWYg
KCRuYW1lJEJ1aWxkZXJfICE9IG51bGwpIHtcbiIKLSAgICAiICAgIHJldHVybiAkbmFtZSRCdWls
ZGVyXy5nZXRNZXNzYWdlT3JCdWlsZGVyTGlzdCgpO1xuIgotICAgICIgIH0gZWxzZSB7XG4iCi0g
ICAgIiAgICByZXR1cm4gamF2YS51dGlsLkNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoJG5h
bWUkXyk7XG4iCi0gICAgIiAgfVxuIgotICAgICJ9XG4iKTsKLQotICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJC5CdWlsZGVyIGFkZCRjYXBpdGFs
aXplZF9uYW1lJEJ1aWxkZXIoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGdldCRjYXBpdGFsaXplZF9u
YW1lJEZpZWxkQnVpbGRlcigpLmFkZEJ1aWxkZXIoXG4iCi0gICAgIiAgICAgICR0eXBlJC5nZXRE
ZWZhdWx0SW5zdGFuY2UoKSk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVu
dChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJC5CdWlsZGVyIGFkZCRjYXBpdGFsaXpl
ZF9uYW1lJEJ1aWxkZXIoXG4iCi0gICAgIiAgICBpbnQgaW5kZXgpIHtcbiIKLSAgICAiICByZXR1
cm4gZ2V0JGNhcGl0YWxpemVkX25hbWUkRmllbGRCdWlsZGVyKCkuYWRkQnVpbGRlcihcbiIKLSAg
ICAiICAgICAgaW5kZXgsICR0eXBlJC5nZXREZWZhdWx0SW5zdGFuY2UoKSk7XG4iCi0gICAgIn1c
biIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAg
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGph
dmEudXRpbC5MaXN0PCR0eXBlJC5CdWlsZGVyPiBcbiIKLSAgICAiICAgICBnZXQkY2FwaXRhbGl6
ZWRfbmFtZSRCdWlsZGVyTGlzdCgpIHtcbiIKLSAgICAiICByZXR1cm4gZ2V0JGNhcGl0YWxpemVk
X25hbWUkRmllbGRCdWlsZGVyKCkuZ2V0QnVpbGRlckxpc3QoKTtcbiIKLSAgICAifVxuIgotICAg
ICJwcml2YXRlIGNvbS5nb29nbGUucHJvdG9idWYuUmVwZWF0ZWRGaWVsZEJ1aWxkZXI8XG4iCi0g
ICAgIiAgICAkdHlwZSQsICR0eXBlJC5CdWlsZGVyLCAkdHlwZSRPckJ1aWxkZXI+IFxuIgotICAg
ICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkRmllbGRCdWlsZGVyKCkge1xuIgotICAgICIgIGlm
ICgkbmFtZSRCdWlsZGVyXyA9PSBudWxsKSB7XG4iCi0gICAgIiAgICAkbmFtZSRCdWlsZGVyXyA9
IG5ldyBjb20uZ29vZ2xlLnByb3RvYnVmLlJlcGVhdGVkRmllbGRCdWlsZGVyPFxuIgotICAgICIg
ICAgICAgICR0eXBlJCwgJHR5cGUkLkJ1aWxkZXIsICR0eXBlJE9yQnVpbGRlcj4oXG4iCi0gICAg
IiAgICAgICAgICAgICRuYW1lJF8sXG4iCi0gICAgIiAgICAgICAgICAgICRnZXRfbXV0YWJsZV9i
aXRfYnVpbGRlciQsXG4iCi0gICAgIiAgICAgICAgICAgIGdldFBhcmVudEZvckNoaWxkcmVuKCks
XG4iCi0gICAgIiAgICAgICAgICAgIGlzQ2xlYW4oKSk7XG4iCi0gICAgIiAgICAkbmFtZSRfID0g
bnVsbDtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJEJ1aWxkZXJfO1xuIgot
ICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRH
ZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoISRnZXRfbXV0YWJs
ZV9iaXRfcGFyc2VyJCkge1xuIgotICAgICIgICRuYW1lJF8gPVxuIgotICAgICIgICAgICBuZXcg
amF2YS51dGlsLkFycmF5TGlzdDxjb20uZ29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExpdGU+KCk7
XG4iCi0gICAgIiAgJHNldF9tdXRhYmxlX2JpdF9wYXJzZXIkO1xuIgotICAgICJ9XG4iCi0gICAg
IiRuYW1lJF8uYWRkKG5ldyBjb20uZ29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExpdGUoXG4iCi0g
ICAgIiAgICBleHRlbnNpb25SZWdpc3RyeSwgaW5wdXQucmVhZEJ5dGVzKCkpKTtcbiIpOwotfQot
Ci12b2lkIFJlcGVhdGVkSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5l
cmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImZvciAoaW50IGkgPSAwOyBpIDwgJG5hbWUk
Xy5zaXplKCk7IGkrKykge1xuIgotICAgICIgIG91dHB1dC53cml0ZUJ5dGVzKCRudW1iZXIkLCAk
bmFtZSRfLmdldChpKS50b0J5dGVTdHJpbmcoKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lk
IFJlcGVhdGVkSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNl
cmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICJmb3IgKGludCBpID0gMDsgaSA8ICRuYW1lJF8uc2l6
ZSgpOyBpKyspIHtcbiIKLSAgICAiICBzaXplICs9IGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRP
dXRwdXRTdHJlYW1cbiIKLSAgICAiICAgIC5jb21wdXRlTGF6eUZpZWxkU2l6ZSgkbnVtYmVyJCwg
JG5hbWUkXy5nZXQoaSkpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGph
dmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19
ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX2xhenlfbWVzc2FnZV9maWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmEvamF2YV9sYXp5X21lc3NhZ2VfZmllbGQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjFiN2YyODIwZTQ5NTVlOGFkNzcyYWE3ZDJlOTNlMDljMDEyZjBkZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2xhenlfbWVzc2FnZV9maWVsZC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyBBdXRob3I6IG5pd2FzYWtpQGdvb2dsZS5jb20gKE5hb2tpIEl3YXNha2kpCi0vLyAg
QmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkg
R2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9C
VUZfQ09NUElMRVJfSkFWQV9MQVpZX01FU1NBR0VfRklFTERfSF9fCi0jZGVmaW5lIEdPT0dMRV9Q
Uk9UT0JVRl9DT01QSUxFUl9KQVZBX0xBWllfTUVTU0FHRV9GSUVMRF9IX18KLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmllbGQuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfZmllbGQuaD4KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotICBuYW1lc3BhY2UgY29tcGls
ZXIgewotICAgIG5hbWVzcGFjZSBqYXZhIHsKLSAgICAgIGNsYXNzIENvbnRleHQ7ICAvLyBjb250
ZXh0LmgKLSAgICB9Ci0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBj
b21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLWNsYXNzIEltbXV0YWJsZUxhenlNZXNzYWdl
RmllbGRHZW5lcmF0b3IKLSAgICA6IHB1YmxpYyBJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0
b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVy
YXRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50IG1lc3Nh
Z2VCaXRJbmRleCwKLSAgICAgIGludCBidWlsZGVyQml0SW5kZXgsIENvbnRleHQqIGNvbnRleHQp
OwotICB+SW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8vIG92ZXJy
b2FkcyBJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGVyQ2xlYXJDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkaW5nQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVk
U2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgR09P
R0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRH
ZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgSW1tdXRhYmxlTGF6eU1lc3NhZ2VPbmVvZkZpZWxkR2Vu
ZXJhdG9yCi0gICAgOiBwdWJsaWMgSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRvciB7
Ci0gcHVibGljOgotICBJbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3IoCi0g
ICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGludCBtZXNzYWdlQml0SW5k
ZXgsCi0gICAgICBpbnQgYnVpbGRlckJpdEluZGV4LCBDb250ZXh0KiBjb250ZXh0KTsKLSAgfklt
bXV0YWJsZUxhenlNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcigpOwotCi0gIHZvaWQgR2VuZXJh
dGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1
aWxkZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZUJ1aWxkaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQg
R2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
Ci0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEltbXV0YWJs
ZUxhenlNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBSZXBlYXRlZElt
bXV0YWJsZUxhenlNZXNzYWdlRmllbGRHZW5lcmF0b3IKLSAgICA6IHB1YmxpYyBSZXBlYXRlZElt
bXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBSZXBl
YXRlZEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRHZW5lcmF0b3IoCi0gICAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICBpbnQg
YnVpbGRlckJpdEluZGV4LCBDb250ZXh0KiBjb250ZXh0KTsKLSAgflJlcGVhdGVkSW1tdXRhYmxl
TGF6eU1lc3NhZ2VGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8vIG92ZXJyb2FkcyBSZXBlYXRlZElt
bXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
IHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAg
dm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAg
dm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RP
UlMoUmVwZWF0ZWRJbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLX0g
IC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dM
RV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX0xBWllfTUVTU0FHRV9GSUVMRF9IX18KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNzYWdlX2Zp
ZWxkX2xpdGUuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2xhenlf
bWVzc2FnZV9maWVsZF9saXRlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmYz
OTMwMmU4MGI0ODY3Yzg3NTAwYTg5ZmM4ZDQ3ODc1NTVjYjM5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkX2xpdGUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw3
MDYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhv
cjogbml3YXNha2lAZ29vZ2xlLmNvbSAoTmFva2kgSXdhc2FraSkKLS8vICBCYXNlZCBvbiBvcmln
aW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVm
ZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9sYXp5X21lc3NhZ2VfZmllbGRfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFj
ZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1J
bW11dGFibGVMYXp5TWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1JbW11dGFibGVMYXp5TWVz
c2FnZUZpZWxkTGl0ZUdlbmVyYXRvcigKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsCi0gICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICBpbnQgYnVpbGRlckJpdEluZGV4
LAotICAgIENvbnRleHQqIGNvbnRleHQpCi0gICAgOiBJbW11dGFibGVNZXNzYWdlRmllbGRMaXRl
R2VuZXJhdG9yKAotICAgICAgICAgIGRlc2NyaXB0b3IsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRl
ckJpdEluZGV4LCBjb250ZXh0KSB7Ci19Ci0KLUltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRMaXRl
R2VuZXJhdG9yOjoKLX5JbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcigpIHt9
Ci0KLXZvaWQgSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJh
dGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgY29tLmdvb2dsZS5wcm90b2J1Zi5MYXp5RmllbGRM
aXRlICRuYW1lJF8gPVxuIgotICAgICIgICAgbmV3IGNvbS5nb29nbGUucHJvdG9idWYuTGF6eUZp
ZWxkTGl0ZSgpO1xuIik7Ci0KLSAgUHJpbnRFeHRyYUZpZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmlu
dGVyKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xl
YW4gaGFzJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIHJldHVybiAkZ2V0X2hhc19m
aWVsZF9iaXRfbWVzc2FnZSQ7XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkg
e1xuIgotICAgICIgIHJldHVybiAoJHR5cGUkKSAkbmFtZSRfLmdldFZhbHVlKCR0eXBlJC5nZXRE
ZWZhdWx0SW5zdGFuY2UoKSk7XG4iCi0gICAifVxuIik7Ci0KLSAgLy8gRmllbGQuQnVpbGRlciBz
ZXRGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZv
aWQgc2V0JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIgIGlmICh2
YWx1ZSA9PSBudWxsKSB7XG4iCi0gICAgIiAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRp
b24oKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgJG5hbWUkXy5zZXRWYWx1ZSh2YWx1ZSk7XG4i
Ci0gICAgIiAgJHNldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkO1xuIgotICAgICJ9XG4iKTsKLQot
ICAvLyBGaWVsZC5CdWlsZGVyIHNldEZpZWxkKEZpZWxkLkJ1aWxkZXIgYnVpbGRlckZvclZhbHVl
KQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgdm9pZCBzZXQkY2FwaXRhbGl6ZWRf
bmFtZSQoXG4iCi0gICAgIiAgICAkdHlwZSQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpIHtcbiIK
LSAgICAiICAkbmFtZSRfLnNldFZhbHVlKGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpKTtcbiIKLSAg
ICAiICAkc2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSQ7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8v
IEZpZWxkLkJ1aWxkZXIgbWVyZ2VGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICJwcml2YXRlIHZvaWQgbWVyZ2UkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVl
KSB7XG4iCi0gICAgIiAgaWYgKCRnZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlJCAmJlxuIgotICAg
ICIgICAgICAhJG5hbWUkXy5jb250YWluc0RlZmF1bHRJbnN0YW5jZSgpKSB7XG4iCi0gICAgIiAg
ICAkbmFtZSRfLnNldFZhbHVlKFxuIgotICAgICIgICAgICAkdHlwZSQubmV3QnVpbGRlcihcbiIK
LSAgICAiICAgICAgICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpKS5tZXJnZUZyb20odmFsdWUp
LmJ1aWxkUGFydGlhbCgpKTtcbiIKLSAgICAiICB9IGVsc2Uge1xuIgotICAgICIgICAgJG5hbWUk
Xy5zZXRWYWx1ZSh2YWx1ZSk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgICRzZXRfaGFzX2ZpZWxk
X2JpdF9tZXNzYWdlJDtcbiIKLSAgICAifVxuIik7Ci0KLSAgLy8gRmllbGQuQnVpbGRlciBjbGVh
ckZpZWxkKCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwot
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgY2xlYXIkY2Fw
aXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgJG5hbWUkXy5jbGVhcigpO1xuIgotICAgICIg
ICRjbGVhcl9oYXNfZmllbGRfYml0X21lc3NhZ2UkO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9p
ZCBJbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxk
ZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIFRoZSBjb21tZW50
cyBhYm92ZSB0aGUgbWV0aG9kcyBiZWxvdyBhcmUgYmFzZWQgb24gYSBoeXBvdGhldGljYWwKLSAg
Ly8gZmllbGQgb2YgdHlwZSAiRmllbGQiIGNhbGxlZCAiRmllbGQiLgotCi0gIC8vIGJvb2xlYW4g
aGFzRmllbGQoKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMg
Ym9vbGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGluc3Rh
bmNlLmhhcyRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIgotICAgICJ9XG4iKTsKLQotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXpl
ZF9uYW1lJCgpIHtcbiIKLSAgICAiICByZXR1cm4gaW5zdGFuY2UuZ2V0JGNhcGl0YWxpemVkX25h
bWUkKCk7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIgc2V0RmllbGQoRmll
bGQgdmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBC
dWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiICBj
b3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNlLnNldCRjYXBpdGFsaXplZF9uYW1lJCh2
YWx1ZSk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEZp
ZWxkLkJ1aWxkZXIgc2V0RmllbGQoRmllbGQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpCi0gIFdy
aXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRjYXBp
dGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgICR0eXBlJC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1
ZSkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2Uuc2V0JGNh
cGl0YWxpemVkX25hbWUkKGJ1aWxkZXJGb3JWYWx1ZSk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7
XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIgbWVyZ2VGaWVsZChGaWVsZCB2
YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxk
ZXIgbWVyZ2UkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4iCi0gICAgIiAgY29w
eU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5tZXJnZSRjYXBpdGFsaXplZF9uYW1lJCh2
YWx1ZSk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEZp
ZWxkLkJ1aWxkZXIgY2xlYXJGaWVsZCgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIs
IGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJl
Y2F0aW9uJHB1YmxpYyBCdWlsZGVyIGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAg
ICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2UuY2xlYXIkY2FwaXRhbGl6ZWRf
bmFtZSQoKTtcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci19Ci0KLQot
dm9pZCBJbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUlu
aXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLCAiJG5hbWUkXy5jbGVhcigpO1xuIik7Ci19Ci0KLXZvaWQgSW1t
dXRhYmxlTGF6eU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVWaXNpdENvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiJG5hbWUkXyA9IHZpc2l0b3IudmlzaXRMYXp5TWVzc2FnZShcbiIKLSAgICAiICAg
IGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpLCAkbmFtZSRfLFxuIgotICAgICIgICAgb3RoZXIuaGFz
JGNhcGl0YWxpemVkX25hbWUkKCksIG90aGVyLiRuYW1lJF8pO1xuIik7Ci19Ci0KLXZvaWQgSW1t
dXRhYmxlTGF6eU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICIkbmFtZSRfLm1lcmdlRnJvbShpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpO1xu
Iik7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRzZXRfaGFzX2ZpZWxkX2Jp
dF9tZXNzYWdlJDtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRMaXRl
R2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0IHsKLSAgLy8gRG8gbm90IGRlLXNlcmlhbGl6ZSBsYXp5IGZpZWxkcy4KLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRnZXRfaGFzX2ZpZWxkX2JpdF9tZXNz
YWdlJCkge1xuIgotICAgICIgIG91dHB1dC53cml0ZUJ5dGVzKCRudW1iZXIkLCAkbmFtZSRfLnRv
Qnl0ZVN0cmluZygpKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTGF6eU1l
c3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAiaWYgKCRnZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlJCkge1xuIgotICAgICIgIHNpemUg
Kz0gY29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAgICIgICAgLmNv
bXB1dGVMYXp5RmllbGRTaXplKCRudW1iZXIkLCAkbmFtZSRfKTtcbiIKLSAgICAifVxuIik7Ci19
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotSW1tdXRhYmxlTGF6eU1lc3NhZ2VPbmVvZkZpZWxkTGl0ZUdl
bmVyYXRvcjo6Ci1JbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yKGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29udGV4dCkK
LSAgICA6IEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yKAotICAgICAgICAg
IGRlc2NyaXB0b3IsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4LCBjb250ZXh0KSB7
Ci0gIGNvbnN0IE9uZW9mR2VuZXJhdG9ySW5mbyogaW5mbyA9Ci0gICAgICBjb250ZXh0LT5HZXRP
bmVvZkdlbmVyYXRvckluZm8oZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVvZigpKTsKLSAgU2V0
Q29tbW9uT25lb2ZWYXJpYWJsZXMoZGVzY3JpcHRvciwgaW5mbywgJnZhcmlhYmxlc18pOwotICB2
YXJpYWJsZXNfWyJsYXp5X3R5cGUiXSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExp
dGUiOwotfQotCi1JbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoK
LX5JbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yKCkge30KLQotdm9p
ZCBJbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRl
TWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBQcmludEV4dHJhRmllbGRJ
bmZvKHZhcmlhYmxlc18sIHByaW50ZXIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVy
LCBkZXNjcmlwdG9yXyk7Ci0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRl
cHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAg
ICAiICByZXR1cm4gJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICJ9XG4iKTsKLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotCi0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRj
YXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3Nh
Z2UkKSB7XG4iCi0gICAgIiAgICByZXR1cm4gKCR0eXBlJCkgKCgkbGF6eV90eXBlJCkgJG9uZW9m
X25hbWUkXykuZ2V0VmFsdWUoXG4iCi0gICAgIiAgICAgICAgJHR5cGUkLmdldERlZmF1bHRJbnN0
YW5jZSgpKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgcmV0dXJuICR0eXBlJC5nZXREZWZhdWx0
SW5zdGFuY2UoKTtcbiIKLSAgICAifVxuIik7Ci0KLSAgLy8gRmllbGQuQnVpbGRlciBzZXRGaWVs
ZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgc2V0
JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIgIGlmICh2YWx1ZSA9
PSBudWxsKSB7XG4iCi0gICAgIiAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTtc
biIKLSAgICAiICB9XG4iCi0gICAgIiAgaWYgKCEoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSkg
e1xuIgotICAgICIgICAgJG9uZW9mX25hbWUkXyA9IG5ldyAkbGF6eV90eXBlJCgpO1xuIgotICAg
ICIgICAgJHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICIgIH1cbiIKLSAgICAiICAo
KCRsYXp5X3R5cGUkKSAkb25lb2ZfbmFtZSRfKS5zZXRWYWx1ZSh2YWx1ZSk7XG4iCi0gICAgIn1c
biIpOwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIgc2V0RmllbGQoRmllbGQuQnVpbGRlciBidWlsZGVy
Rm9yVmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIHNldCRjYXBp
dGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgICR0eXBlJC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1
ZSkge1xuIgotICAgICIgIGlmICghKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkpIHtcbiIKLSAg
ICAiICAgICRvbmVvZl9uYW1lJF8gPSBuZXcgJGxhenlfdHlwZSQoKTtcbiIKLSAgICAiICAgICRz
ZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgKCgkbGF6eV90
eXBlJCkgJG9uZW9mX25hbWUkXykuc2V0VmFsdWUoYnVpbGRlckZvclZhbHVlLmJ1aWxkKCkpO1xu
IgotICAgICJ9XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIG1lcmdlRmllbGQoRmllbGQgdmFs
dWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIG1lcmdlJGNhcGl0YWxp
emVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIgIGlmICgkaGFzX29uZW9mX2Nhc2Vf
bWVzc2FnZSQgJiZcbiIKLSAgICAiICAgICAgISgoJGxhenlfdHlwZSQpICRvbmVvZl9uYW1lJF8p
LmNvbnRhaW5zRGVmYXVsdEluc3RhbmNlKCkpIHtcbiIKLSAgICAiICAgICgoJGxhenlfdHlwZSQp
ICRvbmVvZl9uYW1lJF8pLnNldFZhbHVlKFxuIgotICAgICIgICAgICAgJHR5cGUkLm5ld0J1aWxk
ZXIoXG4iCi0gICAgIiAgICAgICAgICBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSkubWVyZ2VGcm9t
KHZhbHVlKS5idWlsZFBhcnRpYWwoKSk7XG4iCi0gICAgIiAgfSBlbHNlIHtcbiIKLSAgICAiICAg
IGlmICghKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkpIHtcbiIKLSAgICAiICAgICAgJG9uZW9m
X25hbWUkXyA9IG5ldyAkbGF6eV90eXBlJCgpO1xuIgotICAgICIgICAgICAkc2V0X29uZW9mX2Nh
c2VfbWVzc2FnZSQ7XG4iCi0gICAgIiAgICB9XG4iCi0gICAgIiAgICAoKCRsYXp5X3R5cGUkKSAk
b25lb2ZfbmFtZSRfKS5zZXRWYWx1ZSh2YWx1ZSk7XG4iCi0gICAgIiAgfVxuIgotICAgICJ9XG4i
KTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIGNsZWFyRmllbGQoKQotICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgInByaXZhdGUgdm9pZCBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAi
ICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICAkY2xlYXJfb25l
b2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAiICAgICRvbmVvZl9uYW1lJF8gPSBudWxsO1xuIgot
ICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTGF6eU1lc3NhZ2VP
bmVvZkZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIGJvb2xlYW4gaGFzRmllbGQoKQotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgYm9vbGVhbiBoYXMkY2FwaXRhbGl6
ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGluc3RhbmNlLmhhcyRjYXBpdGFsaXplZF9u
YW1lJCgpO1xuIgotICAgICJ9XG4iKTsKLQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7
XG4iCi0gICAgIiAgcmV0dXJuIGluc3RhbmNlLmdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIgot
ICAgICJ9XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIHNldEZpZWxkKEZpZWxkIHZhbHVlKQot
ICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQk
Y2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUo
KTtcbiIKLSAgICAiICBpbnN0YW5jZS5zZXQkY2FwaXRhbGl6ZWRfbmFtZSQodmFsdWUpO1xuIgot
ICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVy
IHNldEZpZWxkKEZpZWxkLkJ1aWxkZXIgYnVpbGRlckZvclZhbHVlKQotICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFt
ZSQoXG4iCi0gICAgIiAgICAkdHlwZSQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpIHtcbiIKLSAg
ICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNlLnNldCRjYXBpdGFsaXplZF9u
YW1lJChidWlsZGVyRm9yVmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9
XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIG1lcmdlRmllbGQoRmllbGQgdmFsdWUpCi0gIFdy
aXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIG1lcmdlJGNh
cGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7
XG4iCi0gICAgIiAgaW5zdGFuY2UubWVyZ2UkY2FwaXRhbGl6ZWRfbmFtZSQodmFsdWUpO1xuIgot
ICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVy
IGNsZWFyRmllbGQoKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9y
Xyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJs
aWMgQnVpbGRlciBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICBjb3B5T25X
cml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNlLmNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCk7XG4i
Ci0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJs
ZUxhenlNZXNzYWdlT25lb2ZGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVWaXNpdENvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiJG9uZW9mX25hbWUkXyA9IHZpc2l0b3IudmlzaXRPbmVvZkxhenlNZXNzYWdlKFxu
IgotICAgICIgICAgJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkLFxuIgotICAgICIgICAgKCRsYXp5
X3R5cGUkKSAkb25lb2ZfbmFtZSRfLFxuIgotICAgICIgICAgKCRsYXp5X3R5cGUkKSBvdGhlci4k
b25lb2ZfbmFtZSRfKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZUxhenlNZXNzYWdlT25lb2ZG
aWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoISgk
aGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpKSB7XG4iCi0gICAgIiAgJG9uZW9mX25hbWUkXyA9IG5l
dyAkbGF6eV90eXBlJCgpO1xuIgotICAgICJ9XG4iCi0gICAgIigoJGxhenlfdHlwZSQpICRvbmVv
Zl9uYW1lJF8pLm1lcmdlRnJvbShpbnB1dCwgZXh0ZW5zaW9uUmVnaXN0cnkpO1xuIgotICAgICIk
c2V0X29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVMYXp5TWVz
c2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gRG8gbm90IGRlLXNlcmlhbGl6ZSBs
YXp5IGZpZWxkcy4KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNf
b25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgIG91dHB1dC53cml0ZUJ5dGVzKFxuIgot
ICAgICIgICAgICAkbnVtYmVyJCwgKCgkbGF6eV90eXBlJCkgJG9uZW9mX25hbWUkXykudG9CeXRl
U3RyaW5nKCkpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVMYXp5TWVzc2Fn
ZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgImlmICgkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIKLSAgICAiICBzaXplICs9
IGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRPdXRwdXRTdHJlYW1cbiIKLSAgICAiICAgIC5jb21w
dXRlTGF6eUZpZWxkU2l6ZSgkbnVtYmVyJCwgKCRsYXp5X3R5cGUkKSAkb25lb2ZfbmFtZSRfKTtc
biIKLSAgICAifVxuIik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVwZWF0ZWRJbW11dGFibGVM
YXp5TWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1SZXBlYXRlZEltbXV0YWJsZUxhenlNZXNz
YWdlRmllbGRMaXRlR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3Jp
cHRvciwKLSAgICBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgIGludCBidWlsZGVyQml0SW5kZXgs
Ci0gICAgQ29udGV4dCogY29udGV4dCkKLSAgICA6IFJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZp
ZWxkTGl0ZUdlbmVyYXRvcigKLSAgICAgICAgICBkZXNjcmlwdG9yLCBtZXNzYWdlQml0SW5kZXgs
IGJ1aWxkZXJCaXRJbmRleCwgY29udGV4dCkgewotfQotCi0KLVJlcGVhdGVkSW1tdXRhYmxlTGF6
eU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotflJlcGVhdGVkSW1tdXRhYmxlTGF6eU1lc3Nh
Z2VGaWVsZExpdGVHZW5lcmF0b3IoKSB7fQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlTGF6eU1l
c3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZh
dGUgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5Qcm90b2J1Zkxpc3Q8XG4iCi0gICAgIiAg
ICBjb20uZ29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExpdGU+ICRuYW1lJF87XG4iKTsKLSAgUHJp
bnRFeHRyYUZpZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmludGVyKTsKLSAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRpbC5MaXN0PCR0eXBlJD5cbiIKLSAg
ICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKSB7XG4iCi0gICAgIiAgamF2YS51dGls
Lkxpc3Q8JHR5cGUkPiBsaXN0ID1cbiIKLSAgICAiICAgICAgbmV3IGphdmEudXRpbC5BcnJheUxp
c3Q8JHR5cGUkPigkbmFtZSRfLnNpemUoKSk7XG4iCi0gICAgIiAgZm9yIChjb20uZ29vZ2xlLnBy
b3RvYnVmLkxhenlGaWVsZExpdGUgbGYgOiAkbmFtZSRfKSB7XG4iCi0gICAgIiAgICBsaXN0LmFk
ZCgoJHR5cGUkKSBsZi5nZXRWYWx1ZSgkdHlwZSQuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTtcbiIK
LSAgICAiICB9XG4iCi0gICAgLy8gVE9ETyhkd2Vpcyk6IE1ha2UgdGhpcyBsaXN0IGltbXV0YWJs
ZT8KLSAgICAiICByZXR1cm4gbGlzdDtcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2ND
b21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgJHR5
cGUkT3JCdWlsZGVyPlxuIgotICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkT3JCdWlsZGVy
TGlzdCgpIHtcbiIKLSAgICAiICByZXR1cm4gZ2V0JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpO1xu
IgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVi
bGljIGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpIHtcbiIKLSAgICAiICByZXR1cm4g
JG5hbWUkXy5zaXplKCk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChw
cmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
IiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJChpbnQgaW5k
ZXgpIHtcbiIKLSAgICAiICByZXR1cm4gKCR0eXBlJClcbiIKLSAgICAiICAgICAgJG5hbWUkXy5n
ZXQoaW5kZXgpLmdldFZhbHVlKCR0eXBlJC5nZXREZWZhdWx0SW5zdGFuY2UoKSk7XG4iCi0gICAg
In1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5
cGUkT3JCdWlsZGVyIGdldCRjYXBpdGFsaXplZF9uYW1lJE9yQnVpbGRlcihcbiIKLSAgICAiICAg
IGludCBpbmRleCkge1xuIgotICAgICIgIHJldHVybiAoJHR5cGUkT3JCdWlsZGVyKVxuIgotICAg
ICIgICAgICAkbmFtZSRfLmdldChpbmRleCkuZ2V0VmFsdWUoJHR5cGUkLmdldERlZmF1bHRJbnN0
YW5jZSgpKTtcbiIKLSAgICAifVxuIik7Ci0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAicHJpdmF0ZSB2b2lkIGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpIHtc
biIKLSAgICAiICBpZiAoISRpc19tdXRhYmxlJCkge1xuIgotICAgICIgICAgJG5hbWUkXyA9XG4i
Ci0gICAgIiAgICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5t
dXRhYmxlQ29weSgkbmFtZSRfKTtcbiIKLSAgICAiICAgfVxuIgotICAgICJ9XG4iCi0gICAgIlxu
Iik7Ci0KLSAgLy8gQnVpbGRlciBzZXRSZXBlYXRlZEZpZWxkKGludCBpbmRleCwgRmllbGQgdmFs
dWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIHNldCRjYXBpdGFsaXpl
ZF9uYW1lJChcbiIKLSAgICAiICAgIGludCBpbmRleCwgJHR5cGUkIHZhbHVlKSB7XG4iCi0gICAg
IiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiIKLSAgICAiICAgIHRocm93IG5ldyBOdWxsUG9pbnRl
ckV4Y2VwdGlvbigpO1xuIgotICAgICIgIH1cbiIKLSAgICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRf
bmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAiICAkbmFtZSRfLnNldChcbiIKLSAgICAiICAgICAg
aW5kZXgsIGNvbS5nb29nbGUucHJvdG9idWYuTGF6eUZpZWxkTGl0ZS5mcm9tVmFsdWUodmFsdWUp
KTtcbiIKLSAgICAifVxuIik7Ci0KLSAgLy8gQnVpbGRlciBzZXRSZXBlYXRlZEZpZWxkKGludCBp
bmRleCwgRmllbGQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAicHJpdmF0ZSB2b2lkIHNldCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgIGlu
dCBpbmRleCwgJHR5cGUkLkJ1aWxkZXIgYnVpbGRlckZvclZhbHVlKSB7XG4iCi0gICAgIiAgZW5z
dXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5hbWUkXy5zZXQo
aW5kZXgsIGNvbS5nb29nbGUucHJvdG9idWYuTGF6eUZpZWxkTGl0ZS5mcm9tVmFsdWUoXG4iCi0g
ICAgIiAgICAgIGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpKSk7XG4iCi0gICAgIn1cbiIpOwotCi0g
IC8vIEJ1aWxkZXIgYWRkUmVwZWF0ZWRGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERv
Y0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICJwcml2YXRlIHZvaWQgYWRkJGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1
ZSkge1xuIgotICAgICIgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4iCi0gICAgIiAgICB0aHJvdyBu
ZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgZW5zdXJl
JGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5hbWUkXy5hZGQoY29t
Lmdvb2dsZS5wcm90b2J1Zi5MYXp5RmllbGRMaXRlLmZyb21WYWx1ZSh2YWx1ZSkpO1xuIgotICAg
ICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVkRmllbGQoaW50IGluZGV4LCBGaWVs
ZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwot
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgYWRkJGNhcGl0
YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQgdmFsdWUpIHtcbiIK
LSAgICAiICBpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IE51bGxQ
b2ludGVyRXhjZXB0aW9uKCk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgIGVuc3VyZSRjYXBpdGFs
aXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRuYW1lJF8uYWRkKFxuIgotICAgICIg
ICAgICBpbmRleCwgY29tLmdvb2dsZS5wcm90b2J1Zi5MYXp5RmllbGRMaXRlLmZyb21WYWx1ZSh2
YWx1ZSkpO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVkRmllbGQo
RmllbGQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
cHJpdmF0ZSB2b2lkIGFkZCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgICR0eXBlJC5C
dWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkge1xuIgotICAgICIgIGVuc3VyZSRjYXBpdGFsaXplZF9u
YW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRuYW1lJF8uYWRkKGNvbS5nb29nbGUucHJvdG9i
dWYuTGF6eUZpZWxkTGl0ZS5mcm9tVmFsdWUoXG4iCi0gICAgIiAgICAgIGJ1aWxkZXJGb3JWYWx1
ZS5idWlsZCgpKSk7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEJ1aWxkZXIgYWRkUmVwZWF0ZWRG
aWVsZChpbnQgaW5kZXgsIEZpZWxkLkJ1aWxkZXIgYnVpbGRlckZvclZhbHVlKQotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgInByaXZhdGUgdm9pZCBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0g
ICAgIiAgICBpbnQgaW5kZXgsICR0eXBlJC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkge1xuIgot
ICAgICIgIGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRu
YW1lJF8uYWRkKGluZGV4LCBjb20uZ29vZ2xlLnByb3RvYnVmLkxhenlGaWVsZExpdGUuZnJvbVZh
bHVlKFxuIgotICAgICIgICAgICBidWlsZGVyRm9yVmFsdWUuYnVpbGQoKSkpO1xuIgotICAgICJ9
XG4iKTsKLQotICAvLyBCdWlsZGVyIGFkZEFsbFJlcGVhdGVkRmllbGQoSXRlcmFibGU8RmllbGQ+
IHZhbHVlcykKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwot
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgYWRkQWxsJGNh
cGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgamF2YS5sYW5nLkl0ZXJhYmxlPD8gZXh0ZW5k
cyAkdHlwZSQ+IHZhbHVlcykge1xuIgotICAgICIgIGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElz
TXV0YWJsZSgpO1xuIgotICAgICIgIGZvciAoY29tLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlTGl0
ZSB2IDogdmFsdWVzKSB7XG4iCi0gICAgIiAgICAkbmFtZSRfLmFkZChjb20uZ29vZ2xlLnByb3Rv
YnVmLkxhenlGaWVsZExpdGUuZnJvbVZhbHVlKHYpKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIn1c
biIpOwotCi0gIC8vIEJ1aWxkZXIgY2xlYXJBbGxSZXBlYXRlZEZpZWxkKCkKLSAgV3JpdGVGaWVs
ZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4i
Ci0gICAgIiAgJG5hbWUkXyA9IGVtcHR5UHJvdG9idWZMaXN0KCk7XG4iCi0gICAgIn1cbiIpOwot
Ci0gIC8vIEJ1aWxkZXIgcmVtb3ZlUmVwZWF0ZWRGaWVsZChpbnQgaW5kZXgpCi0gIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIHJlbW92ZSRjYXBpdGFsaXplZF9uYW1lJChpbnQg
aW5kZXgpIHtcbiIKLSAgICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtc
biIKLSAgICAiICAkbmFtZSRfLnJlbW92ZShpbmRleCk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12
b2lkIFJlcGVhdGVkSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBM
aXN0PEZpZWxkPiBnZXRSZXBlYXRlZEZpZWxkTGlzdCgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50
KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZhLnV0aWwuTGlzdDwkdHlwZSQ+IGdldCRjYXBpdGFs
aXplZF9uYW1lJExpc3QoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGphdmEudXRpbC5Db2xsZWN0aW9u
cy51bm1vZGlmaWFibGVMaXN0KFxuIgotICAgICIgICAgICBpbnN0YW5jZS5nZXQkY2FwaXRhbGl6
ZWRfbmFtZSRMaXN0KCkpO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBpbnQgZ2V0UmVwZWF0ZWRG
aWVsZENvdW50KCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGlj
IGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpIHtcbiIKLSAgICAiICByZXR1cm4gaW5z
dGFuY2UuZ2V0JGNhcGl0YWxpemVkX25hbWUkQ291bnQoKTtcbiIKLSAgICAifVxuIik7Ci0KLSAg
Ly8gRmllbGQgZ2V0UmVwZWF0ZWRGaWVsZChpbnQgaW5kZXgpCi0gIFdyaXRlRmllbGREb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUkKGlu
dCBpbmRleCkge1xuIgotICAgICIgIHJldHVybiBpbnN0YW5jZS5nZXQkY2FwaXRhbGl6ZWRfbmFt
ZSQoaW5kZXgpO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIHNldFJlcGVhdGVkRmll
bGQoaW50IGluZGV4LCBGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVw
cmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIg
ICAgaW50IGluZGV4LCAkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xu
IgotICAgICIgIGluc3RhbmNlLnNldCRjYXBpdGFsaXplZF9uYW1lJChpbmRleCwgdmFsdWUpO1xu
IgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIHNl
dFJlcGVhdGVkRmllbGQoaW50IGluZGV4LCBGaWVsZC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkK
LSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0
JGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQuQnVpbGRl
ciBidWlsZGVyRm9yVmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIg
IGluc3RhbmNlLnNldCRjYXBpdGFsaXplZF9uYW1lJChpbmRleCwgYnVpbGRlckZvclZhbHVlKTtc
biIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0KLSAgLy8gQnVpbGRlciBh
ZGRSZXBlYXRlZEZpZWxkKEZpZWxkIHZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZh
bHVlKSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5hZGQk
Y2FwaXRhbGl6ZWRfbmFtZSQodmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAg
ICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVkRmllbGQoaW50IGluZGV4LCBGaWVs
ZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwot
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1
aWxkZXIgYWRkJGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlw
ZSQgdmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNl
LmFkZCRjYXBpdGFsaXplZF9uYW1lJChpbmRleCwgdmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0
aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVkRmllbGQoRmll
bGQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50
ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRl
cHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGFkZCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAi
ICAgICR0eXBlJC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkge1xuIgotICAgICIgIGNvcHlPbldy
aXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2UuYWRkJGNhcGl0YWxpemVkX25hbWUkKGJ1aWxkZXJG
b3JWYWx1ZSk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8v
IEJ1aWxkZXIgYWRkUmVwZWF0ZWRGaWVsZChpbnQgaW5kZXgsIEZpZWxkLkJ1aWxkZXIgYnVpbGRl
ckZvclZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMg
QnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICBpbnQgaW5kZXgsICR0
eXBlJC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7
XG4iCi0gICAgIiAgaW5zdGFuY2UuYWRkJGNhcGl0YWxpemVkX25hbWUkKGluZGV4LCBidWlsZGVy
Rm9yVmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAv
LyBCdWlsZGVyIGFkZEFsbFJlcGVhdGVkRmllbGQoSXRlcmFibGU8RmllbGQ+IHZhbHVlcykKLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgYWRkQWxs
JGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgamF2YS5sYW5nLkl0ZXJhYmxlPD8gZXh0
ZW5kcyAkdHlwZSQ+IHZhbHVlcykge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAg
IiAgaW5zdGFuY2UuYWRkQWxsJGNhcGl0YWxpemVkX25hbWUkKHZhbHVlcyk7XG4iCi0gICAgIiAg
cmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEJ1aWxkZXIgY2xlYXJBbGxSZXBl
YXRlZEZpZWxkKCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGlj
IEJ1aWxkZXIgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgY29weU9uV3Jp
dGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5jbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIgot
ICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIHJlbW92
ZVJlcGVhdGVkRmllbGQoaW50IGluZGV4KQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVy
LCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXBy
ZWNhdGlvbiRwdWJsaWMgQnVpbGRlciByZW1vdmUkY2FwaXRhbGl6ZWRfbmFtZSQoaW50IGluZGV4
KSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5yZW1vdmUk
Y2FwaXRhbGl6ZWRfbmFtZSQoaW5kZXgpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAg
ICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRMaXRl
R2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCEkaXNfbXV0YWJs
ZSQpIHtcbiIKLSAgICAiICAkbmFtZSRfID1cbiIKLSAgICAiICAgICAgY29tLmdvb2dsZS5wcm90
b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5tdXRhYmxlQ29weSgkbmFtZSRfKTtcbiIKLSAgICAi
fVxuIgotICAgICIkbmFtZSRfLmFkZChuZXcgY29tLmdvb2dsZS5wcm90b2J1Zi5MYXp5RmllbGRM
aXRlKFxuIgotICAgICIgICAgZXh0ZW5zaW9uUmVnaXN0cnksIGlucHV0LnJlYWRCeXRlcygpKSk7
XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRMaXRlR2Vu
ZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiZm9yIChpbnQgaSA9
IDA7IGkgPCAkbmFtZSRfLnNpemUoKTsgaSsrKSB7XG4iCi0gICAgIiAgb3V0cHV0LndyaXRlQnl0
ZXMoJG51bWJlciQsICRuYW1lJF8uZ2V0KGkpLnRvQnl0ZVN0cmluZygpKTtcbiIKLSAgICAifVxu
Iik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkTGl0ZUdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJmb3IgKGludCBpID0g
MDsgaSA8ICRuYW1lJF8uc2l6ZSgpOyBpKyspIHtcbiIKLSAgICAiICBzaXplICs9IGNvbS5nb29n
bGUucHJvdG9idWYuQ29kZWRPdXRwdXRTdHJlYW1cbiIKLSAgICAiICAgIC5jb21wdXRlTGF6eUZp
ZWxkU2l6ZSgkbnVtYmVyJCwgJG5hbWUkXy5nZXQoaSkpO1xuIgotICAgICJ9XG4iKTsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2xhenlfbWVzc2FnZV9maWVsZF9saXRl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2xhenlfbWVzc2FnZV9m
aWVsZF9saXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZWJlYjQ5YTAzZWRi
MTU3OGZkZjg3OGNiNjYwZjhkNDQ0ZjEzZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9s
YXp5X21lc3NhZ2VfZmllbGRfbGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IG5pd2FzYWtp
QGdvb2dsZS5jb20gKE5hb2tpIEl3YXNha2kpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9j
b2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5k
IG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9MQVpZX01F
U1NBR0VfRklFTERfTElURV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pB
VkFfTEFaWV9NRVNTQUdFX0ZJRUxEX0xJVEVfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YS9qYXZhX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2ZpZWxkX2xpdGUuaD4KLQotbmFtZXNwYWNlIGdv
b2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotICBuYW1lc3BhY2UgY29tcGlsZXIgewotICAg
IG5hbWVzcGFjZSBqYXZhIHsKLSAgICAgIGNsYXNzIENvbnRleHQ7ICAvLyBjb250ZXh0LmgKLSAg
ICB9Ci0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7
Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLWNsYXNzIEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRMaXRl
R2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgSW1tdXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRv
ciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBJbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkTGl0ZUdl
bmVyYXRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50IG1l
c3NhZ2VCaXRJbmRleCwKLSAgICAgIGludCBidWlsZGVyQml0SW5kZXgsIENvbnRleHQqIGNvbnRl
eHQpOwotICB+SW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3IoKTsKLQotICAv
LyBvdmVycm9hZHMgSW1tdXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvciAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSW5pdGlhbGl6YXRpb25Db2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVZpc2l0Q29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVk
U2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgR09P
R0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRM
aXRlR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIEltbXV0YWJsZUxhenlNZXNzYWdlT25lb2ZGaWVs
ZExpdGVHZW5lcmF0b3IKLSAgICA6IHB1YmxpYyBJbW11dGFibGVMYXp5TWVzc2FnZUZpZWxkTGl0
ZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBJbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRM
aXRlR2VuZXJhdG9yKAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBp
bnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwgQ29udGV4dCog
Y29udGV4dCk7Ci0gIH5JbW11dGFibGVMYXp5TWVzc2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9y
KCk7Ci0KLSAgdm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
OwotICB2b2lkIEdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlVmlzaXRDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05T
VFJVQ1RPUlMoSW1tdXRhYmxlTGF6eU1lc3NhZ2VPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcik7Ci19
OwotCi1jbGFzcyBSZXBlYXRlZEltbXV0YWJsZUxhenlNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9y
Ci0gICAgOiBwdWJsaWMgUmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9y
IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFJlcGVhdGVkSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVs
ZExpdGVHZW5lcmF0b3IoCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3Is
IGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICBpbnQgYnVpbGRlckJpdEluZGV4LCBDb250ZXh0
KiBjb250ZXh0KTsKLSAgflJlcGVhdGVkSW1tdXRhYmxlTGF6eU1lc3NhZ2VGaWVsZExpdGVHZW5l
cmF0b3IoKTsKLQotICAvLyBvdmVycm9hZHMgUmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRM
aXRlR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBHZW5lcmF0ZU1lbWJl
cnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRlck1l
bWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2lu
Z0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFs
aXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
U2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotIHByaXZh
dGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhSZXBlYXRlZEltbXV0YWJs
ZUxhenlNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBq
YXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1Zgot
Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01Q
SUxFUl9KQVZBX0xBWllfTUVTU0FHRV9GSUVMRF9MSVRFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tYXBfZmllbGQuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21hcF9maWVsZC5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmE1NTFjYTQ3ZWI4MzAwYTdiOGVhOGRiNWUxMjEyNDQxZGU1MDM2OS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21hcF9maWVsZC5jYworKysgL2Rldi9udWxsCkBA
IC0xLDQ5NyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWFwX2ZpZWxkLmg+Ci0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2NvbnRleHQuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2RvY19jb21tZW50
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9oZWxwZXJz
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9uYW1lX3Jl
c29sdmVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVy
IHsKLW5hbWVzcGFjZSBqYXZhIHsKLQotbmFtZXNwYWNlIHsKLQotY29uc3QgRmllbGREZXNjcmlw
dG9yKiBLZXlGaWVsZChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgR09P
R0xFX0NIRUNLX0VRKEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdFLCBkZXNjcmlwdG9yLT50
eXBlKCkpOwotICBjb25zdCBEZXNjcmlwdG9yKiBtZXNzYWdlID0gZGVzY3JpcHRvci0+bWVzc2Fn
ZV90eXBlKCk7Ci0gIEdPT0dMRV9DSEVDSyhtZXNzYWdlLT5vcHRpb25zKCkubWFwX2VudHJ5KCkp
OwotICByZXR1cm4gbWVzc2FnZS0+RmluZEZpZWxkQnlOYW1lKCJrZXkiKTsKLX0KLQotY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBWYWx1ZUZpZWxkKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3Jp
cHRvcikgewotICBHT09HTEVfQ0hFQ0tfRVEoRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0Us
IGRlc2NyaXB0b3ItPnR5cGUoKSk7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UgPSBkZXNj
cmlwdG9yLT5tZXNzYWdlX3R5cGUoKTsKLSAgR09PR0xFX0NIRUNLKG1lc3NhZ2UtPm9wdGlvbnMo
KS5tYXBfZW50cnkoKSk7Ci0gIHJldHVybiBtZXNzYWdlLT5GaW5kRmllbGRCeU5hbWUoInZhbHVl
Iik7Ci19Ci0KLXN0cmluZyBUeXBlTmFtZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAot
ICAgICAgICAgICAgICAgIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyLAotICAgICAg
ICAgICAgICAgIGJvb2wgYm94ZWQpIHsKLSAgaWYgKEdldEphdmFUeXBlKGZpZWxkKSA9PSBKQVZB
VFlQRV9NRVNTQUdFKSB7Ci0gICAgcmV0dXJuIG5hbWVfcmVzb2x2ZXItPkdldEltbXV0YWJsZUNs
YXNzTmFtZShmaWVsZC0+bWVzc2FnZV90eXBlKCkpOwotICB9IGVsc2UgaWYgKEdldEphdmFUeXBl
KGZpZWxkKSA9PSBKQVZBVFlQRV9FTlVNKSB7Ci0gICAgcmV0dXJuIG5hbWVfcmVzb2x2ZXItPkdl
dEltbXV0YWJsZUNsYXNzTmFtZShmaWVsZC0+ZW51bV90eXBlKCkpOwotICB9IGVsc2UgewotICAg
IHJldHVybiBib3hlZCA/IEJveGVkUHJpbWl0aXZlVHlwZU5hbWUoR2V0SmF2YVR5cGUoZmllbGQp
KQotICAgICAgICAgICAgICAgICA6IFByaW1pdGl2ZVR5cGVOYW1lKEdldEphdmFUeXBlKGZpZWxk
KSk7Ci0gIH0KLX0KLQotc3RyaW5nIFdpcmVUeXBlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmll
bGQpIHsKLSAgcmV0dXJuICJjb20uZ29vZ2xlLnByb3RvYnVmLldpcmVGb3JtYXQuRmllbGRUeXBl
LiIgKwotICAgICAgc3RyaW5nKEZpZWxkVHlwZU5hbWUoZmllbGQtPnR5cGUoKSkpOwotfQotCi12
b2lkIFNldE1lc3NhZ2VWYXJpYWJsZXMoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9y
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGaWVsZEdlbmVyYXRvckluZm8qIGluZm8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtYXA8
c3RyaW5nLCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAgU2V0Q29tbW9uRmllbGRWYXJpYWJsZXMo
ZGVzY3JpcHRvciwgaW5mbywgdmFyaWFibGVzKTsKLSAgQ2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVf
cmVzb2x2ZXIgPSBjb250ZXh0LT5HZXROYW1lUmVzb2x2ZXIoKTsKLQotICAoKnZhcmlhYmxlcylb
InR5cGUiXSA9Ci0gICAgICBuYW1lX3Jlc29sdmVyLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVz
Y3JpcHRvci0+bWVzc2FnZV90eXBlKCkpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGtleSA9
IEtleUZpZWxkKGRlc2NyaXB0b3IpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbHVlID0g
VmFsdWVGaWVsZChkZXNjcmlwdG9yKTsKLSAgKCp2YXJpYWJsZXMpWyJrZXlfdHlwZSJdID0gVHlw
ZU5hbWUoa2V5LCBuYW1lX3Jlc29sdmVyLCBmYWxzZSk7Ci0gICgqdmFyaWFibGVzKVsiYm94ZWRf
a2V5X3R5cGUiXSA9IFR5cGVOYW1lKGtleSwgbmFtZV9yZXNvbHZlciwgdHJ1ZSk7Ci0gICgqdmFy
aWFibGVzKVsia2V5X3dpcmVfdHlwZSJdID0gV2lyZVR5cGUoa2V5KTsKLSAgKCp2YXJpYWJsZXMp
WyJrZXlfZGVmYXVsdF92YWx1ZSJdID0gRGVmYXVsdFZhbHVlKGtleSwgdHJ1ZSwgbmFtZV9yZXNv
bHZlcik7Ci0gIGlmIChHZXRKYXZhVHlwZSh2YWx1ZSkgPT0gSkFWQVRZUEVfRU5VTSkgewotICAg
IC8vIFdlIHN0b3JlIGVudW1zIGFzIEludGVnZXJzIGludGVybmFsbHkuCi0gICAgKCp2YXJpYWJs
ZXMpWyJ2YWx1ZV90eXBlIl0gPSAiaW50IjsKLSAgICAoKnZhcmlhYmxlcylbImJveGVkX3ZhbHVl
X3R5cGUiXSA9ICJqYXZhLmxhbmcuSW50ZWdlciI7Ci0gICAgKCp2YXJpYWJsZXMpWyJ2YWx1ZV93
aXJlX3R5cGUiXSA9IFdpcmVUeXBlKHZhbHVlKTsKLSAgICAoKnZhcmlhYmxlcylbInZhbHVlX2Rl
ZmF1bHRfdmFsdWUiXSA9Ci0gICAgICAgIERlZmF1bHRWYWx1ZSh2YWx1ZSwgdHJ1ZSwgbmFtZV9y
ZXNvbHZlcikgKyAiLmdldE51bWJlcigpIjsKLQotICAgICgqdmFyaWFibGVzKVsidmFsdWVfZW51
bV90eXBlIl0gPSBUeXBlTmFtZSh2YWx1ZSwgbmFtZV9yZXNvbHZlciwgZmFsc2UpOwotCi0gICAg
aWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3ItPmZpbGUoKSkpIHsKLSAgICAg
IC8vIE1hcCB1bmtub3duIHZhbHVlcyB0byBhIHNwZWNpYWwgVU5SRUNPR05JWkVEIHZhbHVlIGlm
IHN1cHBvcnRlZC4KLSAgICAgICgqdmFyaWFibGVzKVsidW5yZWNvZ25pemVkX3ZhbHVlIl0gPQot
ICAgICAgICAgICgqdmFyaWFibGVzKVsidmFsdWVfZW51bV90eXBlIl0gKyAiLlVOUkVDT0dOSVpF
RCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIE1hcCB1bmtub3duIHZhbHVlcyB0byB0aGUgZGVm
YXVsdCB2YWx1ZSBpZiB3ZSBkb24ndCBoYXZlIFVOUkVDT0dOSVpFRC4KLSAgICAgICgqdmFyaWFi
bGVzKVsidW5yZWNvZ25pemVkX3ZhbHVlIl0gPQotICAgICAgICAgIERlZmF1bHRWYWx1ZSh2YWx1
ZSwgdHJ1ZSwgbmFtZV9yZXNvbHZlcik7Ci0gICAgfQotICB9IGVsc2UgewotICAgICgqdmFyaWFi
bGVzKVsidmFsdWVfdHlwZSJdID0gVHlwZU5hbWUodmFsdWUsIG5hbWVfcmVzb2x2ZXIsIGZhbHNl
KTsKLSAgICAoKnZhcmlhYmxlcylbImJveGVkX3ZhbHVlX3R5cGUiXSA9IFR5cGVOYW1lKHZhbHVl
LCBuYW1lX3Jlc29sdmVyLCB0cnVlKTsKLSAgICAoKnZhcmlhYmxlcylbInZhbHVlX3dpcmVfdHlw
ZSJdID0gV2lyZVR5cGUodmFsdWUpOwotICAgICgqdmFyaWFibGVzKVsidmFsdWVfZGVmYXVsdF92
YWx1ZSJdID0KLSAgICAgICAgRGVmYXVsdFZhbHVlKHZhbHVlLCB0cnVlLCBuYW1lX3Jlc29sdmVy
KTsKLSAgfQotICAoKnZhcmlhYmxlcylbInR5cGVfcGFyYW1ldGVycyJdID0KLSAgICAgICgqdmFy
aWFibGVzKVsiYm94ZWRfa2V5X3R5cGUiXSArICIsICIgKyAoKnZhcmlhYmxlcylbImJveGVkX3Zh
bHVlX3R5cGUiXTsKLSAgLy8gVE9ETyhiaXJkbyk6IEFkZCBAZGVwcmVjYXRlZCBqYXZhZG9jIHdo
ZW4gZ2VuZXJhdGluZyBqYXZhZG9jIGlzIHN1cHBvcnRlZAotICAvLyBieSB0aGUgcHJvdG8gY29t
cGlsZXIKLSAgKCp2YXJpYWJsZXMpWyJkZXByZWNhdGlvbiJdID0gZGVzY3JpcHRvci0+b3B0aW9u
cygpLmRlcHJlY2F0ZWQoKQotICAgICAgPyAiQGphdmEubGFuZy5EZXByZWNhdGVkICIgOiAiIjsK
LSAgKCp2YXJpYWJsZXMpWyJvbl9jaGFuZ2VkIl0gPSAib25DaGFuZ2VkKCk7IjsKLQotICAvLyBG
b3IgcmVwZWF0ZWQgZmllbGRzLCBvbmUgYml0IGlzIHVzZWQgZm9yIHdoZXRoZXIgdGhlIGFycmF5
IGlzIGltbXV0YWJsZQotICAvLyBpbiB0aGUgcGFyc2luZyBjb25zdHJ1Y3Rvci4KLSAgKCp2YXJp
YWJsZXMpWyJnZXRfbXV0YWJsZV9iaXRfcGFyc2VyIl0gPQotICAgICAgR2VuZXJhdGVHZXRCaXRN
dXRhYmxlTG9jYWwoYnVpbGRlckJpdEluZGV4KTsKLSAgKCp2YXJpYWJsZXMpWyJzZXRfbXV0YWJs
ZV9iaXRfcGFyc2VyIl0gPQotICAgICAgR2VuZXJhdGVTZXRCaXRNdXRhYmxlTG9jYWwoYnVpbGRl
ckJpdEluZGV4KTsKLQotICAoKnZhcmlhYmxlcylbImRlZmF1bHRfZW50cnkiXSA9ICgqdmFyaWFi
bGVzKVsiY2FwaXRhbGl6ZWRfbmFtZSJdICsKLSAgICAgICJEZWZhdWx0RW50cnlIb2xkZXIuZGVm
YXVsdEVudHJ5IjsKLSAgKCp2YXJpYWJsZXMpWyJsaXRlIl0gPSAiIjsKLSAgKCp2YXJpYWJsZXMp
WyJtYXBfZmllbGRfcGFyYW1ldGVyIl0gPSAoKnZhcmlhYmxlcylbImRlZmF1bHRfZW50cnkiXTsK
LSAgKCp2YXJpYWJsZXMpWyJkZXNjcmlwdG9yIl0gPQotICAgICAgbmFtZV9yZXNvbHZlci0+R2V0
SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3ItPmZpbGUoKSkgKwotICAgICAgIi5pbnRlcm5h
bF8iICsgVW5pcXVlRmlsZVNjb3BlSWRlbnRpZmllcihkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUo
KSkgKwotICAgICAgIl9kZXNjcmlwdG9yLCAiOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotSW1t
dXRhYmxlTWFwRmllbGRHZW5lcmF0b3I6OgotSW1tdXRhYmxlTWFwRmllbGRHZW5lcmF0b3IoY29u
c3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0KiBjb250ZXh0KQotICA6IGRlc2NyaXB0b3Jf
KGRlc2NyaXB0b3IpLCBuYW1lX3Jlc29sdmVyXyhjb250ZXh0LT5HZXROYW1lUmVzb2x2ZXIoKSkg
IHsKLSAgU2V0TWVzc2FnZVZhcmlhYmxlcyhkZXNjcmlwdG9yLCBtZXNzYWdlQml0SW5kZXgsIGJ1
aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5HZXRGaWVsZEdl
bmVyYXRvckluZm8oZGVzY3JpcHRvciksCi0gICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwg
JnZhcmlhYmxlc18pOwotfQotCi1JbW11dGFibGVNYXBGaWVsZEdlbmVyYXRvcjo6Ci1+SW1tdXRh
YmxlTWFwRmllbGRHZW5lcmF0b3IoKSB7fQotCi1pbnQgSW1tdXRhYmxlTWFwRmllbGRHZW5lcmF0
b3I6OkdldE51bUJpdHNGb3JNZXNzYWdlKCkgY29uc3QgewotICByZXR1cm4gMDsKLX0KLQotaW50
IEltbXV0YWJsZU1hcEZpZWxkR2VuZXJhdG9yOjpHZXROdW1CaXRzRm9yQnVpbGRlcigpIGNvbnN0
IHsKLSAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWFwRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IGlmIChHZXRKYXZhVHlwZShWYWx1ZUZpZWxkKGRlc2NyaXB0b3JfKSkgPT0gSkFWQVRZUEVfRU5V
TSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgIiRkZXByZWNh
dGlvbiRqYXZhLnV0aWwuTWFwPCRib3hlZF9rZXlfdHlwZSQsICR2YWx1ZV9lbnVtX3R5cGUkPlxu
IgotICAgICAgICAiZ2V0JGNhcGl0YWxpemVkX25hbWUkKCk7XG4iKTsKLSAgICBpZiAoU3VwcG9y
dFVua25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICAgIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICAgIHByaW50ZXItPlByaW50
KAotICAgICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICAgIiRkZXByZWNhdGlvbiRqYXZhLnV0
aWwuTWFwPCR0eXBlX3BhcmFtZXRlcnMkPlxuIgotICAgICAgICAgICJnZXQkY2FwaXRhbGl6ZWRf
bmFtZSRWYWx1ZSgpO1xuIik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIFdyaXRlRmllbGREb2ND
b21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgdmFyaWFibGVzXywKLSAgICAgICAgIiRkZXByZWNhdGlvbiRqYXZhLnV0aWwuTWFwPCR0eXBl
X3BhcmFtZXRlcnMkPlxuIgotICAgICAgICAiZ2V0JGNhcGl0YWxpemVkX25hbWUkKCk7XG4iKTsK
LSAgfQotfQotCi12b2lkIEltbXV0YWJsZU1hcEZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVt
YmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCgKLSAg
ICAgIHZhcmlhYmxlc18sCi0gICAgICAicHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgJGNhcGl0
YWxpemVkX25hbWUkRGVmYXVsdEVudHJ5SG9sZGVyIHtcbiIKLSAgICAgICIgIHN0YXRpYyBmaW5h
bCBjb20uZ29vZ2xlLnByb3RvYnVmLk1hcEVudHJ5JGxpdGUkPFxuIgotICAgICAgIiAgICAgICR0
eXBlX3BhcmFtZXRlcnMkPiBkZWZhdWx0RW50cnkgPVxuIgotICAgICAgIiAgICAgICAgICBjb20u
Z29vZ2xlLnByb3RvYnVmLk1hcEVudHJ5JGxpdGUkXG4iCi0gICAgICAiICAgICAgICAgIC48JHR5
cGVfcGFyYW1ldGVycyQ+bmV3RGVmYXVsdEluc3RhbmNlKFxuIgotICAgICAgIiAgICAgICAgICAg
ICAgJGRlc2NyaXB0b3IkXG4iCi0gICAgICAiICAgICAgICAgICAgICAka2V5X3dpcmVfdHlwZSQs
XG4iCi0gICAgICAiICAgICAgICAgICAgICAka2V5X2RlZmF1bHRfdmFsdWUkLFxuIgotICAgICAg
IiAgICAgICAgICAgICAgJHZhbHVlX3dpcmVfdHlwZSQsXG4iCi0gICAgICAiICAgICAgICAgICAg
ICAkdmFsdWVfZGVmYXVsdF92YWx1ZSQpO1xuIgotICAgICAgIn1cbiIpOwotICBwcmludGVyLT5Q
cmludCgKLSAgICAgIHZhcmlhYmxlc18sCi0gICAgICAicHJpdmF0ZSBjb20uZ29vZ2xlLnByb3Rv
YnVmLk1hcEZpZWxkJGxpdGUkPFxuIgotICAgICAgIiAgICAkdHlwZV9wYXJhbWV0ZXJzJD4gJG5h
bWUkXztcbiIKLSAgICAgICJwcml2YXRlIGNvbS5nb29nbGUucHJvdG9idWYuTWFwRmllbGQkbGl0
ZSQ8JHR5cGVfcGFyYW1ldGVycyQ+XG4iCi0gICAgICAiaW50ZXJuYWxHZXQkY2FwaXRhbGl6ZWRf
bmFtZSQoKSB7XG4iCi0gICAgICAiICBpZiAoJG5hbWUkXyA9PSBudWxsKSB7XG4iCi0gICAgICAi
ICAgIHJldHVybiBjb20uZ29vZ2xlLnByb3RvYnVmLk1hcEZpZWxkJGxpdGUkLmVtcHR5TWFwRmll
bGQoXG4iCi0gICAgICAiICAgICAgICAkbWFwX2ZpZWxkX3BhcmFtZXRlciQpO1xuIgotICAgICAg
IiAgfVxuIgotICAgICAgIiAgcmV0dXJuICRuYW1lJF87XG4iCi0gICAgICAifVxuIik7Ci0gIGlm
IChHZXRKYXZhVHlwZShWYWx1ZUZpZWxkKGRlc2NyaXB0b3JfKSkgPT0gSkFWQVRZUEVfRU5VTSkg
ewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAicHJp
dmF0ZSBzdGF0aWMgZmluYWxcbiIKLSAgICAgICAgImNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJu
YWwuTWFwQWRhcHRlci5Db252ZXJ0ZXI8XG4iCi0gICAgICAgICIgICAgamF2YS5sYW5nLkludGVn
ZXIsICR2YWx1ZV9lbnVtX3R5cGUkPiAkbmFtZSRWYWx1ZUNvbnZlcnRlciA9XG4iCi0gICAgICAg
ICIgICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJuYWwuTWFwQWRhcHRlci5uZXdFbnVt
Q29udmVydGVyKFxuIgotICAgICAgICAiICAgICAgICAgICAgJHZhbHVlX2VudW1fdHlwZSQuaW50
ZXJuYWxHZXRWYWx1ZU1hcCgpLFxuIgotICAgICAgICAiICAgICAgICAgICAgJHVucmVjb2duaXpl
ZF92YWx1ZSQpO1xuIik7Ci0gICAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0
b3JfLT5maWxlKCkpKSB7Ci0gICAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICB2YXJpYWJsZXNfLAot
ICAgICAgICAgICIkZGVwcmVjYXRpb24kXG4iCi0gICAgICAgICAgInB1YmxpYyBqYXZhLnV0aWwu
TWFwPCRib3hlZF9rZXlfdHlwZSQsICRib3hlZF92YWx1ZV90eXBlJD5cbiIKLSAgICAgICAgICAi
Z2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUoKSB7XG4iCi0gICAgICAgICAgIiAgcmV0dXJuIGlu
dGVybmFsR2V0JGNhcGl0YWxpemVkX25hbWUkKCkuZ2V0TWFwKCk7XG4iCi0gICAgICAgICAgIn1c
biIpOwotICAgIH0KLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9y
Xyk7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICIk
ZGVwcmVjYXRpb24kXG4iCi0gICAgICAgICJwdWJsaWMgamF2YS51dGlsLk1hcDwkYm94ZWRfa2V5
X3R5cGUkLCAkdmFsdWVfZW51bV90eXBlJD5cbiIKLSAgICAgICAgImdldCRjYXBpdGFsaXplZF9u
YW1lJCgpIHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIG5ldyBjb20uZ29vZ2xlLnByb3RvYnVmLklu
dGVybmFsLk1hcEFkYXB0ZXI8XG4iCi0gICAgICAgICIgICAgICAkYm94ZWRfa2V5X3R5cGUkLCAk
dmFsdWVfZW51bV90eXBlJCwgamF2YS5sYW5nLkludGVnZXI+KFxuIgotICAgICAgICAiICAgICAg
ICAgIGludGVybmFsR2V0JGNhcGl0YWxpemVkX25hbWUkKCkuZ2V0TWFwKCksXG4iCi0gICAgICAg
ICIgICAgICAgICAgJG5hbWUkVmFsdWVDb252ZXJ0ZXIpO1xuIgotICAgICAgICAifVxuIik7Ci0g
IH0gZWxzZSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAiJGRl
cHJlY2F0aW9uJFxuIgotICAgICAgICAicHVibGljIGphdmEudXRpbC5NYXA8JHR5cGVfcGFyYW1l
dGVycyQ+IGdldCRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIGlu
dGVybmFsR2V0JGNhcGl0YWxpemVkX25hbWUkKCkuZ2V0TWFwKCk7XG4iCi0gICAgICAgICJ9XG4i
KTsKLSAgfQotfQotCi12b2lkIEltbXV0YWJsZU1hcEZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRl
QnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICB2YXJpYWJsZXNfLAotICAgICAgInByaXZhdGUgY29tLmdvb2dsZS5wcm90
b2J1Zi5NYXBGaWVsZCRsaXRlJDxcbiIKLSAgICAgICIgICAgJHR5cGVfcGFyYW1ldGVycyQ+ICRu
YW1lJF87XG4iCi0gICAgICAicHJpdmF0ZSBjb20uZ29vZ2xlLnByb3RvYnVmLk1hcEZpZWxkJGxp
dGUkPCR0eXBlX3BhcmFtZXRlcnMkPlxuIgotICAgICAgImludGVybmFsR2V0JGNhcGl0YWxpemVk
X25hbWUkKCkge1xuIgotICAgICAgIiAgaWYgKCRuYW1lJF8gPT0gbnVsbCkge1xuIgotICAgICAg
IiAgICByZXR1cm4gY29tLmdvb2dsZS5wcm90b2J1Zi5NYXBGaWVsZCRsaXRlJC5lbXB0eU1hcEZp
ZWxkKFxuIgotICAgICAgIiAgICAgICAgJG1hcF9maWVsZF9wYXJhbWV0ZXIkKTtcbiIKLSAgICAg
ICIgIH1cbiIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfO1xuIgotICAgICAgIn1cbiIKLSAgICAg
ICJwcml2YXRlIGNvbS5nb29nbGUucHJvdG9idWYuTWFwRmllbGQkbGl0ZSQ8JHR5cGVfcGFyYW1l
dGVycyQ+XG4iCi0gICAgICAiaW50ZXJuYWxHZXRNdXRhYmxlJGNhcGl0YWxpemVkX25hbWUkKCkg
e1xuIgotICAgICAgIiAgJG9uX2NoYW5nZWQkO1xuIgotICAgICAgIiAgaWYgKCRuYW1lJF8gPT0g
bnVsbCkge1xuIgotICAgICAgIiAgICAkbmFtZSRfID0gY29tLmdvb2dsZS5wcm90b2J1Zi5NYXBG
aWVsZCRsaXRlJC5uZXdNYXBGaWVsZChcbiIKLSAgICAgICIgICAgICAgICRtYXBfZmllbGRfcGFy
YW1ldGVyJCk7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICBpZiAoISRuYW1lJF8uaXNNdXRh
YmxlKCkpIHtcbiIKLSAgICAgICIgICAgJG5hbWUkXyA9ICRuYW1lJF8uY29weSgpO1xuIgotICAg
ICAgIiAgfVxuIgotICAgICAgIiAgcmV0dXJuICRuYW1lJF87XG4iCi0gICAgICAifVxuIik7Ci0g
IGlmIChHZXRKYXZhVHlwZShWYWx1ZUZpZWxkKGRlc2NyaXB0b3JfKSkgPT0gSkFWQVRZUEVfRU5V
TSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgIiRkZXByZWNh
dGlvbiRcbiIKLSAgICAgICAgInB1YmxpYyBqYXZhLnV0aWwuTWFwPCRib3hlZF9rZXlfdHlwZSQs
ICR2YWx1ZV9lbnVtX3R5cGUkPlxuIgotICAgICAgICAiZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkg
e1xuIgotICAgICAgICAiICByZXR1cm4gbmV3IGNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJuYWwu
TWFwQWRhcHRlcjxcbiIKLSAgICAgICAgIiAgICAgICRib3hlZF9rZXlfdHlwZSQsICR2YWx1ZV9l
bnVtX3R5cGUkLCBqYXZhLmxhbmcuSW50ZWdlcj4oXG4iCi0gICAgICAgICIgICAgICAgICAgaW50
ZXJuYWxHZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKS5nZXRNYXAoKSxcbiIKLSAgICAgICAgIiAgICAg
ICAgICAkbmFtZSRWYWx1ZUNvbnZlcnRlcik7XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgICBXcml0
ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICIkZGVwcmVjYXRpb24kXG4iCi0gICAg
ICAgICJwdWJsaWMgamF2YS51dGlsLk1hcDwkYm94ZWRfa2V5X3R5cGUkLCAkdmFsdWVfZW51bV90
eXBlJD5cbiIKLSAgICAgICAgImdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0g
ICAgICAgICIgIHJldHVybiBuZXcgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5NYXBBZGFw
dGVyPFxuIgotICAgICAgICAiICAgICAgJGJveGVkX2tleV90eXBlJCwgJHZhbHVlX2VudW1fdHlw
ZSQsIGphdmEubGFuZy5JbnRlZ2VyPihcbiIKLSAgICAgICAgIiAgICAgICAgICBpbnRlcm5hbEdl
dE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSQoKS5nZXRNdXRhYmxlTWFwKCksXG4iCi0gICAgICAg
ICIgICAgICAgICAgJG5hbWUkVmFsdWVDb252ZXJ0ZXIpO1xuIgotICAgICAgICAifVxuIik7Ci0g
ICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50
ZXItPlByaW50KAotICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAiJGRlcHJlY2F0aW9uJHB1
YmxpYyBCdWlsZGVyIHB1dEFsbCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAgICAgIiAgICBq
YXZhLnV0aWwuTWFwPCRib3hlZF9rZXlfdHlwZSQsICR2YWx1ZV9lbnVtX3R5cGUkPiB2YWx1ZXMp
IHtcbiIKLSAgICAgICAgIiAgZ2V0TXV0YWJsZSRjYXBpdGFsaXplZF9uYW1lJCgpLnB1dEFsbCh2
YWx1ZXMpO1xuIgotICAgICAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAgICAgIn1cbiIpOwot
ICAgIGlmIChTdXBwb3J0VW5rbm93bkVudW1WYWx1ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewot
ICAgICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgICAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgICAiJGRlcHJl
Y2F0aW9uJFxuIgotICAgICAgICAgICJwdWJsaWMgamF2YS51dGlsLk1hcDwkYm94ZWRfa2V5X3R5
cGUkLCAkYm94ZWRfdmFsdWVfdHlwZSQ+XG4iCi0gICAgICAgICAgImdldCRjYXBpdGFsaXplZF9u
YW1lJFZhbHVlKCkge1xuIgotICAgICAgICAgICIgIHJldHVybiBpbnRlcm5hbEdldCRjYXBpdGFs
aXplZF9uYW1lJCgpLmdldE1hcCgpO1xuIgotICAgICAgICAgICJ9XG4iKTsKLSAgICAgIFdyaXRl
RmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICAgIHByaW50ZXItPlBy
aW50KAotICAgICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICAgIiRkZXByZWNhdGlvbiRcbiIK
LSAgICAgICAgICAicHVibGljIGphdmEudXRpbC5NYXA8JGJveGVkX2tleV90eXBlJCwgJGJveGVk
X3ZhbHVlX3R5cGUkPlxuIgotICAgICAgICAgICJnZXRNdXRhYmxlJGNhcGl0YWxpemVkX25hbWUk
VmFsdWUoKSB7XG4iCi0gICAgICAgICAgIiAgcmV0dXJuIGludGVybmFsR2V0TXV0YWJsZSRjYXBp
dGFsaXplZF9uYW1lJCgpLmdldE11dGFibGVNYXAoKTtcbiIKLSAgICAgICAgICAifVxuIik7Ci0g
ICAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAgICIkZGVwcmVj
YXRpb24kcHVibGljIEJ1aWxkZXIgcHV0QWxsJGNhcGl0YWxpemVkX25hbWUkVmFsdWUoXG4iCi0g
ICAgICAgICAgIiAgICBqYXZhLnV0aWwuTWFwPCRib3hlZF9rZXlfdHlwZSQsICRib3hlZF92YWx1
ZV90eXBlJD4gdmFsdWVzKSB7XG4iCi0gICAgICAgICAgIiAgZ2V0TXV0YWJsZSRjYXBpdGFsaXpl
ZF9uYW1lJFZhbHVlKCkucHV0QWxsKHZhbHVlcyk7XG4iCi0gICAgICAgICAgIiAgcmV0dXJuIHRo
aXM7XG4iCi0gICAgICAgICAgIn1cbiIpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICJwdWJsaWMgamF2YS51dGlsLk1hcDwkdHlw
ZV9wYXJhbWV0ZXJzJD4gZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICAgICAiICBy
ZXR1cm4gaW50ZXJuYWxHZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKS5nZXRNYXAoKTtcbiIKLSAgICAg
ICAgIn1cbiIpOwotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgInB1
YmxpYyBqYXZhLnV0aWwuTWFwPCR0eXBlX3BhcmFtZXRlcnMkPlxuIgotICAgICAgICAiZ2V0TXV0
YWJsZSRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIGludGVybmFs
R2V0TXV0YWJsZSRjYXBpdGFsaXplZF9uYW1lJCgpLmdldE11dGFibGVNYXAoKTtcbiIKLSAgICAg
ICAgIn1cbiIpOwotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBwdXRBbGwkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0g
ICAgICAgICIgICAgamF2YS51dGlsLk1hcDwkdHlwZV9wYXJhbWV0ZXJzJD4gdmFsdWVzKSB7XG4i
Ci0gICAgICAgICIgIGdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSQoKS5wdXRBbGwodmFsdWVz
KTtcbiIKLSAgICAgICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgfQot
fQotCi12b2lkIEltbXV0YWJsZU1hcEZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlRmllbGRCdWls
ZGVySW5pdGlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSAgY29uc3QgewotICAv
LyBOb3RoaW5nIHRvIGluaXRpYWxpemUuCi19Ci0KLXZvaWQgSW1tdXRhYmxlTWFwRmllbGRHZW5l
cmF0b3I6OgotR2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgLy8gTm90aGluZyB0byBpbml0aWFsaXplLgotfQotCi12b2lkIEltbXV0YWJs
ZU1hcEZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRlckNsZWFyQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCgKLSAgICAgIHZhcmlhYmxlc18s
Ci0gICAgICAiaW50ZXJuYWxHZXRNdXRhYmxlJGNhcGl0YWxpemVkX25hbWUkKCkuY2xlYXIoKTtc
biIpOwotfQotCi12b2lkIEltbXV0YWJsZU1hcEZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVy
Z2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICB2YXJpYWJsZXNfLAotICAgICAgImludGVybmFsR2V0TXV0YWJsZSRjYXBpdGFsaXpl
ZF9uYW1lJCgpLm1lcmdlRnJvbShcbiIKLSAgICAgICIgICAgb3RoZXIuaW50ZXJuYWxHZXQkY2Fw
aXRhbGl6ZWRfbmFtZSQoKSk7XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVNYXBGaWVsZEdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
ewotICBwcmludGVyLT5QcmludCgKLSAgICAgIHZhcmlhYmxlc18sCi0gICAgICAicmVzdWx0LiRu
YW1lJF8gPSBpbnRlcm5hbEdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIgotICAgICAgInJlc3Vs
dC4kbmFtZSRfLm1ha2VJbW11dGFibGUoKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1hcEZp
ZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICB2YXJpYWJsZXNfLAotICAgICAgImlm
ICghJGdldF9tdXRhYmxlX2JpdF9wYXJzZXIkKSB7XG4iCi0gICAgICAiICAkbmFtZSRfID0gY29t
Lmdvb2dsZS5wcm90b2J1Zi5NYXBGaWVsZCRsaXRlJC5uZXdNYXBGaWVsZChcbiIKLSAgICAgICIg
ICAgICAkbWFwX2ZpZWxkX3BhcmFtZXRlciQpO1xuIgotICAgICAgIiAgJHNldF9tdXRhYmxlX2Jp
dF9wYXJzZXIkO1xuIgotICAgICAgIn1cbiIpOwotICBpZiAoIVN1cHBvcnRVbmtub3duRW51bVZh
bHVlKGRlc2NyaXB0b3JfLT5maWxlKCkpICYmCi0gICAgICBHZXRKYXZhVHlwZShWYWx1ZUZpZWxk
KGRlc2NyaXB0b3JfKSkgPT0gSkFWQVRZUEVfRU5VTSkgewotICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAiY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3Ry
aW5nIGJ5dGVzID0gaW5wdXQucmVhZEJ5dGVzKCk7XG4iCi0gICAgICAgICJjb20uZ29vZ2xlLnBy
b3RvYnVmLk1hcEVudHJ5JGxpdGUkPCR0eXBlX3BhcmFtZXRlcnMkPlxuIgotICAgICAgICAiJG5h
bWUkID0gJGRlZmF1bHRfZW50cnkkLmdldFBhcnNlckZvclR5cGUoKS5wYXJzZUZyb20oYnl0ZXMp
O1xuIik7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAg
ICJpZiAoJHZhbHVlX2VudW1fdHlwZSQuZm9yTnVtYmVyKCRuYW1lJC5nZXRWYWx1ZSgpKSA9PSBu
dWxsKSB7XG4iCi0gICAgICAgICIgIHVua25vd25GaWVsZHMubWVyZ2VMZW5ndGhEZWxpbWl0ZWRG
aWVsZCgkbnVtYmVyJCwgYnl0ZXMpO1xuIgotICAgICAgICAifSBlbHNlIHtcbiIKLSAgICAgICAg
IiAgJG5hbWUkXy5nZXRNdXRhYmxlTWFwKCkucHV0KCRuYW1lJC5nZXRLZXkoKSwgJG5hbWUkLmdl
dFZhbHVlKCkpO1xuIgotICAgICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICJjb20uZ29vZ2xlLnByb3RvYnVm
Lk1hcEVudHJ5JGxpdGUkPCR0eXBlX3BhcmFtZXRlcnMkPlxuIgotICAgICAgICAiJG5hbWUkID0g
aW5wdXQucmVhZE1lc3NhZ2UoXG4iCi0gICAgICAgICIgICAgJGRlZmF1bHRfZW50cnkkLmdldFBh
cnNlckZvclR5cGUoKSwgZXh0ZW5zaW9uUmVnaXN0cnkpO1xuIgotICAgICAgICAiJG5hbWUkXy5n
ZXRNdXRhYmxlTWFwKCkucHV0KCRuYW1lJC5nZXRLZXkoKSwgJG5hbWUkLmdldFZhbHVlKCkpO1xu
Iik7Ci0gIH0KLX0KLQotdm9pZCBJbW11dGFibGVNYXBGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZVBhcnNpbmdEb25lQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBOb3Ro
aW5nIHRvIGRvIGhlcmUuCi19Ci0KLXZvaWQgSW1tdXRhYmxlTWFwRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qgewot
ICBwcmludGVyLT5QcmludCgKLSAgICAgIHZhcmlhYmxlc18sCi0gICAgICAiZm9yIChqYXZhLnV0
aWwuTWFwLkVudHJ5PCR0eXBlX3BhcmFtZXRlcnMkPiBlbnRyeVxuIgotICAgICAgIiAgICAgOiBp
bnRlcm5hbEdldCRjYXBpdGFsaXplZF9uYW1lJCgpLmdldE1hcCgpLmVudHJ5U2V0KCkpIHtcbiIK
LSAgICAgICIgIGNvbS5nb29nbGUucHJvdG9idWYuTWFwRW50cnkkbGl0ZSQ8JHR5cGVfcGFyYW1l
dGVycyQ+XG4iCi0gICAgICAiICAkbmFtZSQgPSAkZGVmYXVsdF9lbnRyeSQubmV3QnVpbGRlckZv
clR5cGUoKVxuIgotICAgICAgIiAgICAgIC5zZXRLZXkoZW50cnkuZ2V0S2V5KCkpXG4iCi0gICAg
ICAiICAgICAgLnNldFZhbHVlKGVudHJ5LmdldFZhbHVlKCkpXG4iCi0gICAgICAiICAgICAgLmJ1
aWxkKCk7XG4iCi0gICAgICAiICBvdXRwdXQud3JpdGVNZXNzYWdlKCRudW1iZXIkLCAkbmFtZSQp
O1xuIgotICAgICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1hcEZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFyaWFibGVzXywKLSAgICAgICJmb3IgKGph
dmEudXRpbC5NYXAuRW50cnk8JHR5cGVfcGFyYW1ldGVycyQ+IGVudHJ5XG4iCi0gICAgICAiICAg
ICA6IGludGVybmFsR2V0JGNhcGl0YWxpemVkX25hbWUkKCkuZ2V0TWFwKCkuZW50cnlTZXQoKSkg
e1xuIgotICAgICAgIiAgY29tLmdvb2dsZS5wcm90b2J1Zi5NYXBFbnRyeSRsaXRlJDwkdHlwZV9w
YXJhbWV0ZXJzJD5cbiIKLSAgICAgICIgICRuYW1lJCA9ICRkZWZhdWx0X2VudHJ5JC5uZXdCdWls
ZGVyRm9yVHlwZSgpXG4iCi0gICAgICAiICAgICAgLnNldEtleShlbnRyeS5nZXRLZXkoKSlcbiIK
LSAgICAgICIgICAgICAuc2V0VmFsdWUoZW50cnkuZ2V0VmFsdWUoKSlcbiIKLSAgICAgICIgICAg
ICAuYnVpbGQoKTtcbiIKLSAgICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1Zi5Db2Rl
ZE91dHB1dFN0cmVhbVxuIgotICAgICAgIiAgICAgIC5jb21wdXRlTWVzc2FnZVNpemUoJG51bWJl
ciQsICRuYW1lJCk7XG4iCi0gICAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWFwRmll
bGRHZW5lcmF0b3I6OgotR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFyaWFibGVzXywKLSAgICAgICJyZXN1
bHQgPSByZXN1bHQgJiYgaW50ZXJuYWxHZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKS5lcXVhbHMoXG4i
Ci0gICAgICAiICAgIG90aGVyLmludGVybmFsR2V0JGNhcGl0YWxpemVkX25hbWUkKCkpO1xuIik7
Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWFwRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNoQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCgKLSAgICAg
IHZhcmlhYmxlc18sCi0gICAgICAiaWYgKCFpbnRlcm5hbEdldCRjYXBpdGFsaXplZF9uYW1lJCgp
LmdldE1hcCgpLmlzRW1wdHkoKSkge1xuIgotICAgICAgIiAgaGFzaCA9ICgzNyAqIGhhc2gpICsg
JGNvbnN0YW50X25hbWUkO1xuIgotICAgICAgIiAgaGFzaCA9ICg1MyAqIGhhc2gpICsgaW50ZXJu
YWxHZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKS5oYXNoQ29kZSgpO1xuIgotICAgICAgIn1cbiIpOwot
fQotCi1zdHJpbmcgSW1tdXRhYmxlTWFwRmllbGRHZW5lcmF0b3I6OkdldEJveGVkVHlwZSgpIGNv
bnN0IHsKLSAgcmV0dXJuIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVz
Y3JpcHRvcl8tPm1lc3NhZ2VfdHlwZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0g
IC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBu
YW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX21hcF9maWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEv
amF2YV9tYXBfZmllbGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3NjhmM2Fl
OTA5Mzg0NTUzNjM4OTk0YzRiNDdhZTJkZjA4MTNhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9q
YXZhX21hcF9maWVsZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJ
TEVSX0pBVkFfTUFQX0ZJRUxEX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJf
SkFWQV9NQVBfRklFTERfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX2ZpZWxkLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLWNsYXNzIElt
bXV0YWJsZU1hcEZpZWxkR2VuZXJhdG9yIDogcHVibGljIEltbXV0YWJsZUZpZWxkR2VuZXJhdG9y
IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEltbXV0YWJsZU1hcEZpZWxkR2VuZXJhdG9yKAotICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQgbWVzc2FnZUJpdEluZGV4
LAotICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwgQ29udGV4dCogY29udGV4dCk7Ci0gIH5JbW11
dGFibGVNYXBGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8vIGltcGxlbWVudHMgSW1tdXRhYmxlRmll
bGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGlu
dCBHZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNvbnN0OwotICBpbnQgR2V0TnVtQml0c0ZvckJ1aWxk
ZXIoKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUludGVyZmFjZU1lbWJlcnMoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRlckNsZWFyQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGluZ0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0RvbmVD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6
YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNl
cmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2Vu
ZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVIYXNoQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3Q7Ci0KLSAgc3RyaW5nIEdldEJveGVkVHlwZSgpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2
YXJpYWJsZXNfOwotICBDbGFzc05hbWVSZXNvbHZlciogbmFtZV9yZXNvbHZlcl87Ci19OwotCi19
ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09H
TEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9NQVBfRklFTERfSF9fCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21hcF9maWVsZF9saXRlLmNjIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tYXBfZmllbGRfbGl0ZS5jYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgwZDQxMzkwMWFjMTMyZDA4MDAwODRhMGRjMWY3
MjBhODVkNDY2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21hcF9maWVsZF9saXRlLmNj
CisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2
YV9tYXBfZmllbGRfbGl0ZS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9kb2NfY29tbWVudC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9pby9wcmludGVyLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLW5hbWVzcGFjZSB7
Ci0KLWNvbnN0IEZpZWxkRGVzY3JpcHRvciogS2V5RmllbGQoY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yKSB7Ci0gIEdPT0dMRV9DSEVDS19FUShGaWVsZERlc2NyaXB0b3I6OlRZUEVf
TUVTU0FHRSwgZGVzY3JpcHRvci0+dHlwZSgpKTsKLSAgY29uc3QgRGVzY3JpcHRvciogbWVzc2Fn
ZSA9IGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpOwotICBHT09HTEVfQ0hFQ0sobWVzc2FnZS0+
b3B0aW9ucygpLm1hcF9lbnRyeSgpKTsKLSAgcmV0dXJuIG1lc3NhZ2UtPkZpbmRGaWVsZEJ5TmFt
ZSgia2V5Iik7Ci19Ci0KLWNvbnN0IEZpZWxkRGVzY3JpcHRvciogVmFsdWVGaWVsZChjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgR09PR0xFX0NIRUNLX0VRKEZpZWxkRGVz
Y3JpcHRvcjo6VFlQRV9NRVNTQUdFLCBkZXNjcmlwdG9yLT50eXBlKCkpOwotICBjb25zdCBEZXNj
cmlwdG9yKiBtZXNzYWdlID0gZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCk7Ci0gIEdPT0dMRV9D
SEVDSyhtZXNzYWdlLT5vcHRpb25zKCkubWFwX2VudHJ5KCkpOwotICByZXR1cm4gbWVzc2FnZS0+
RmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotfQotCi1zdHJpbmcgVHlwZU5hbWUoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICBDbGFzc05hbWVSZXNvbHZlciog
bmFtZV9yZXNvbHZlciwKLSAgICAgICAgICAgICAgICBib29sIGJveGVkKSB7Ci0gIGlmIChHZXRK
YXZhVHlwZShmaWVsZCkgPT0gSkFWQVRZUEVfTUVTU0FHRSkgewotICAgIHJldHVybiBuYW1lX3Jl
c29sdmVyLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZmllbGQtPm1lc3NhZ2VfdHlwZSgpKTsKLSAg
fSBlbHNlIGlmIChHZXRKYXZhVHlwZShmaWVsZCkgPT0gSkFWQVRZUEVfRU5VTSkgewotICAgIHJl
dHVybiBuYW1lX3Jlc29sdmVyLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZmllbGQtPmVudW1fdHlw
ZSgpKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gYm94ZWQgPyBCb3hlZFByaW1pdGl2ZVR5cGVO
YW1lKEdldEphdmFUeXBlKGZpZWxkKSkKLSAgICAgICAgICAgICAgICAgOiBQcmltaXRpdmVUeXBl
TmFtZShHZXRKYXZhVHlwZShmaWVsZCkpOwotICB9Ci19Ci0KLXN0cmluZyBXaXJlVHlwZShjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHJldHVybiAiY29tLmdvb2dsZS5wcm90b2J1
Zi5XaXJlRm9ybWF0LkZpZWxkVHlwZS4iICsKLSAgICAgIHN0cmluZyhGaWVsZFR5cGVOYW1lKGZp
ZWxkLT50eXBlKCkpKTsKLX0KLQotdm9pZCBTZXRNZXNzYWdlVmFyaWFibGVzKGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVz
c2FnZUJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWlsZGVyQml0SW5k
ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGRHZW5lcmF0b3JJbmZvKiBp
bmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwPHN0cmluZywgc3RyaW5nPiogdmFyaWFibGVzKSB7Ci0gIFNl
dENvbW1vbkZpZWxkVmFyaWFibGVzKGRlc2NyaXB0b3IsIGluZm8sIHZhcmlhYmxlcyk7Ci0KLSAg
Q2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXIgPSBjb250ZXh0LT5HZXROYW1lUmVzb2x2
ZXIoKTsKLSAgKCp2YXJpYWJsZXMpWyJ0eXBlIl0gPQotICAgICAgbmFtZV9yZXNvbHZlci0+R2V0
SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpKTsKLSAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBrZXkgPSBLZXlGaWVsZChkZXNjcmlwdG9yKTsKLSAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiB2YWx1ZSA9IFZhbHVlRmllbGQoZGVzY3JpcHRvcik7Ci0gICgqdmFyaWFi
bGVzKVsia2V5X3R5cGUiXSA9IFR5cGVOYW1lKGtleSwgbmFtZV9yZXNvbHZlciwgZmFsc2UpOwot
ICAoKnZhcmlhYmxlcylbImJveGVkX2tleV90eXBlIl0gPSBUeXBlTmFtZShrZXksIG5hbWVfcmVz
b2x2ZXIsIHRydWUpOwotICAoKnZhcmlhYmxlcylbImtleV93aXJlX3R5cGUiXSA9IFdpcmVUeXBl
KGtleSk7Ci0gICgqdmFyaWFibGVzKVsia2V5X2RlZmF1bHRfdmFsdWUiXSA9IERlZmF1bHRWYWx1
ZShrZXksIHRydWUsIG5hbWVfcmVzb2x2ZXIpOwotICBpZiAoR2V0SmF2YVR5cGUodmFsdWUpID09
IEpBVkFUWVBFX0VOVU0pIHsKLSAgICAvLyBXZSBzdG9yZSBlbnVtcyBhcyBJbnRlZ2VycyBpbnRl
cm5hbGx5LgotICAgICgqdmFyaWFibGVzKVsidmFsdWVfdHlwZSJdID0gImludCI7Ci0gICAgKCp2
YXJpYWJsZXMpWyJib3hlZF92YWx1ZV90eXBlIl0gPSAiamF2YS5sYW5nLkludGVnZXIiOwotICAg
ICgqdmFyaWFibGVzKVsidmFsdWVfd2lyZV90eXBlIl0gPSBXaXJlVHlwZSh2YWx1ZSk7Ci0gICAg
KCp2YXJpYWJsZXMpWyJ2YWx1ZV9kZWZhdWx0X3ZhbHVlIl0gPQotICAgICAgICBEZWZhdWx0VmFs
dWUodmFsdWUsIHRydWUsIG5hbWVfcmVzb2x2ZXIpICsgIi5nZXROdW1iZXIoKSI7Ci0KLSAgICAo
KnZhcmlhYmxlcylbInZhbHVlX2VudW1fdHlwZSJdID0gVHlwZU5hbWUodmFsdWUsIG5hbWVfcmVz
b2x2ZXIsIGZhbHNlKTsKLQotICAgIGlmIChTdXBwb3J0VW5rbm93bkVudW1WYWx1ZShkZXNjcmlw
dG9yLT5maWxlKCkpKSB7Ci0gICAgICAvLyBNYXAgdW5rbm93biB2YWx1ZXMgdG8gYSBzcGVjaWFs
IFVOUkVDT0dOSVpFRCB2YWx1ZSBpZiBzdXBwb3J0ZWQuCi0gICAgICAoKnZhcmlhYmxlcylbInVu
cmVjb2duaXplZF92YWx1ZSJdID0KLSAgICAgICAgICAoKnZhcmlhYmxlcylbInZhbHVlX2VudW1f
dHlwZSJdICsgIi5VTlJFQ09HTklaRUQiOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBNYXAgdW5r
bm93biB2YWx1ZXMgdG8gdGhlIGRlZmF1bHQgdmFsdWUgaWYgd2UgZG9uJ3QgaGF2ZSBVTlJFQ09H
TklaRUQuCi0gICAgICAoKnZhcmlhYmxlcylbInVucmVjb2duaXplZF92YWx1ZSJdID0KLSAgICAg
ICAgICBEZWZhdWx0VmFsdWUodmFsdWUsIHRydWUsIG5hbWVfcmVzb2x2ZXIpOwotICAgIH0KLSAg
fSBlbHNlIHsKLSAgICAoKnZhcmlhYmxlcylbInZhbHVlX3R5cGUiXSA9IFR5cGVOYW1lKHZhbHVl
LCBuYW1lX3Jlc29sdmVyLCBmYWxzZSk7Ci0gICAgKCp2YXJpYWJsZXMpWyJib3hlZF92YWx1ZV90
eXBlIl0gPSBUeXBlTmFtZSh2YWx1ZSwgbmFtZV9yZXNvbHZlciwgdHJ1ZSk7Ci0gICAgKCp2YXJp
YWJsZXMpWyJ2YWx1ZV93aXJlX3R5cGUiXSA9IFdpcmVUeXBlKHZhbHVlKTsKLSAgICAoKnZhcmlh
YmxlcylbInZhbHVlX2RlZmF1bHRfdmFsdWUiXSA9Ci0gICAgICAgIERlZmF1bHRWYWx1ZSh2YWx1
ZSwgdHJ1ZSwgbmFtZV9yZXNvbHZlcik7Ci0gIH0KLSAgKCp2YXJpYWJsZXMpWyJ0eXBlX3BhcmFt
ZXRlcnMiXSA9Ci0gICAgICAoKnZhcmlhYmxlcylbImJveGVkX2tleV90eXBlIl0gKyAiLCAiICsg
KCp2YXJpYWJsZXMpWyJib3hlZF92YWx1ZV90eXBlIl07Ci0gIC8vIFRPRE8oYmlyZG8pOiBBZGQg
QGRlcHJlY2F0ZWQgamF2YWRvYyB3aGVuIGdlbmVyYXRpbmcgamF2YWRvYyBpcyBzdXBwb3J0ZWQK
LSAgLy8gYnkgdGhlIHByb3RvIGNvbXBpbGVyCi0gICgqdmFyaWFibGVzKVsiZGVwcmVjYXRpb24i
XSA9IGRlc2NyaXB0b3ItPm9wdGlvbnMoKS5kZXByZWNhdGVkKCkKLSAgICAgID8gIkBqYXZhLmxh
bmcuRGVwcmVjYXRlZCAiIDogIiI7Ci0KLSAgKCp2YXJpYWJsZXMpWyJkZWZhdWx0X2VudHJ5Il0g
PSAoKnZhcmlhYmxlcylbImNhcGl0YWxpemVkX25hbWUiXSArCi0gICAgICAiRGVmYXVsdEVudHJ5
SG9sZGVyLmRlZmF1bHRFbnRyeSI7Ci0gICgqdmFyaWFibGVzKVsibGl0ZSJdID0gIkxpdGUiOwot
ICAoKnZhcmlhYmxlcylbImRlc2NyaXB0b3IiXSA9ICIiOwotfQotCi19ICAvLyBuYW1lc3BhY2UK
LQotSW1tdXRhYmxlTWFwRmllbGRMaXRlR2VuZXJhdG9yOjoKLUltbXV0YWJsZU1hcEZpZWxkTGl0
ZUdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRleHQpCi0g
IDogZGVzY3JpcHRvcl8oZGVzY3JpcHRvciksIG5hbWVfcmVzb2x2ZXJfKGNvbnRleHQtPkdldE5h
bWVSZXNvbHZlcigpKSAgewotICBTZXRNZXNzYWdlVmFyaWFibGVzKGRlc2NyaXB0b3IsIG1lc3Nh
Z2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPkdldEZpZWxkR2VuZXJhdG9ySW5mbyhkZXNjcmlwdG9yKSwKLSAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LCAmdmFyaWFibGVzXyk7Ci19Ci0KLUltbXV0YWJsZU1hcEZpZWxkTGl0ZUdl
bmVyYXRvcjo6Ci1+SW1tdXRhYmxlTWFwRmllbGRMaXRlR2VuZXJhdG9yKCkge30KLQotaW50IElt
bXV0YWJsZU1hcEZpZWxkTGl0ZUdlbmVyYXRvcjo6R2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25z
dCB7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgSW1tdXRhYmxlTWFwRmllbGRMaXRlR2VuZXJhdG9y
OjpHZXROdW1CaXRzRm9yQnVpbGRlcigpIGNvbnN0IHsKLSAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
SW1tdXRhYmxlTWFwRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW50ZXJmYWNlTWVtYmVy
cyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoR2V0SmF2YVR5cGUoVmFsdWVG
aWVsZChkZXNjcmlwdG9yXykpID09IEpBVkFUWVBFX0VOVU0pIHsKLSAgICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgIHZhcmlhYmxlc18sCi0gICAgICAgICIkZGVwcmVjYXRpb24kamF2YS51dGlsLk1hcDwkYm94
ZWRfa2V5X3R5cGUkLCAkdmFsdWVfZW51bV90eXBlJD5cbiIKLSAgICAgICAgImdldCRjYXBpdGFs
aXplZF9uYW1lJCgpO1xuIik7Ci0gICAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2Ny
aXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICB2YXJpYWJsZXNf
LAotICAgICAgICAgICIkZGVwcmVjYXRpb24kamF2YS51dGlsLk1hcDwkdHlwZV9wYXJhbWV0ZXJz
JD5cbiIKLSAgICAgICAgICAiZ2V0JGNhcGl0YWxpemVkX25hbWUkVmFsdWUoKTtcbiIpOwotICAg
IH0KLSAgfSBlbHNlIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlw
dG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAg
ICIkZGVwcmVjYXRpb24kamF2YS51dGlsLk1hcDwkdHlwZV9wYXJhbWV0ZXJzJD5cbiIKLSAgICAg
ICAgImdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIik7Ci0gIH0KLX0KLQotdm9pZCBJbW11dGFi
bGVNYXBGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFyaWFibGVzXywKLSAg
ICAgICJwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyAkY2FwaXRhbGl6ZWRfbmFtZSREZWZhdWx0
RW50cnlIb2xkZXIge1xuIgotICAgICAgIiAgc3RhdGljIGZpbmFsIGNvbS5nb29nbGUucHJvdG9i
dWYuTWFwRW50cnkkbGl0ZSQ8XG4iCi0gICAgICAiICAgICAgJHR5cGVfcGFyYW1ldGVycyQ+IGRl
ZmF1bHRFbnRyeSA9XG4iCi0gICAgICAiICAgICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuTWFw
RW50cnkkbGl0ZSRcbiIKLSAgICAgICIgICAgICAgICAgLjwkdHlwZV9wYXJhbWV0ZXJzJD5uZXdE
ZWZhdWx0SW5zdGFuY2UoXG4iCi0gICAgICAiICAgICAgICAgICAgICAkZGVzY3JpcHRvciRcbiIK
LSAgICAgICIgICAgICAgICAgICAgICRrZXlfd2lyZV90eXBlJCxcbiIKLSAgICAgICIgICAgICAg
ICAgICAgICRrZXlfZGVmYXVsdF92YWx1ZSQsXG4iCi0gICAgICAiICAgICAgICAgICAgICAkdmFs
dWVfd2lyZV90eXBlJCxcbiIKLSAgICAgICIgICAgICAgICAgICAgICR2YWx1ZV9kZWZhdWx0X3Zh
bHVlJCk7XG4iCi0gICAgICAifVxuIik7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFyaWFi
bGVzXywKLSAgICAgICJwcml2YXRlIGNvbS5nb29nbGUucHJvdG9idWYuTWFwRmllbGQkbGl0ZSQ8
XG4iCi0gICAgICAiICAgICR0eXBlX3BhcmFtZXRlcnMkPiAkbmFtZSRfID1cbiIKLSAgICAgICIg
ICAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuTWFwRmllbGQkbGl0ZSQuZW1wdHlNYXBGaWVsZCgp
O1xuIgotICAgICAgInByaXZhdGUgY29tLmdvb2dsZS5wcm90b2J1Zi5NYXBGaWVsZCRsaXRlJDwk
dHlwZV9wYXJhbWV0ZXJzJD5cbiIKLSAgICAgICJpbnRlcm5hbEdldCRjYXBpdGFsaXplZF9uYW1l
JCgpIHtcbiIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfO1xuIgotICAgICAgIn1cbiIKLSAgICAg
ICJwcml2YXRlIGNvbS5nb29nbGUucHJvdG9idWYuTWFwRmllbGQkbGl0ZSQ8JHR5cGVfcGFyYW1l
dGVycyQ+XG4iCi0gICAgICAiaW50ZXJuYWxHZXRNdXRhYmxlJGNhcGl0YWxpemVkX25hbWUkKCkg
e1xuIgotICAgICAgIiAgaWYgKCEkbmFtZSRfLmlzTXV0YWJsZSgpKSB7XG4iCi0gICAgICAiICAg
ICRuYW1lJF8gPSAkbmFtZSRfLmNvcHkoKTtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIHJl
dHVybiAkbmFtZSRfO1xuIgotICAgICAgIn1cbiIpOwotICBpZiAoR2V0SmF2YVR5cGUoVmFsdWVG
aWVsZChkZXNjcmlwdG9yXykpID09IEpBVkFUWVBFX0VOVU0pIHsKLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgInByaXZhdGUgc3RhdGljIGZpbmFsXG4i
Ci0gICAgICAgICJjb20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLk1hcEFkYXB0ZXIuQ29udmVy
dGVyPFxuIgotICAgICAgICAiICAgIGphdmEubGFuZy5JbnRlZ2VyLCAkdmFsdWVfZW51bV90eXBl
JD4gJG5hbWUkVmFsdWVDb252ZXJ0ZXIgPVxuIgotICAgICAgICAiICAgICAgICBjb20uZ29vZ2xl
LnByb3RvYnVmLkludGVybmFsLk1hcEFkYXB0ZXIubmV3RW51bUNvbnZlcnRlcihcbiIKLSAgICAg
ICAgIiAgICAgICAgICAgICR2YWx1ZV9lbnVtX3R5cGUkLmludGVybmFsR2V0VmFsdWVNYXAoKSxc
biIKLSAgICAgICAgIiAgICAgICAgICAgICR1bnJlY29nbml6ZWRfdmFsdWUkKTtcbiIpOwotICAg
IGlmIChTdXBwb3J0VW5rbm93bkVudW1WYWx1ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAg
ICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgICAgcHJp
bnRlci0+UHJpbnQoCi0gICAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgICAiJGRlcHJlY2F0
aW9uJFxuIgotICAgICAgICAgICJwdWJsaWMgamF2YS51dGlsLk1hcDwkYm94ZWRfa2V5X3R5cGUk
LCAkYm94ZWRfdmFsdWVfdHlwZSQ+XG4iCi0gICAgICAgICAgImdldCRjYXBpdGFsaXplZF9uYW1l
JFZhbHVlKCkge1xuIgotICAgICAgICAgICIgIHJldHVybiBpbnRlcm5hbEdldCRjYXBpdGFsaXpl
ZF9uYW1lJCgpLmdldE1hcCgpO1xuIgotICAgICAgICAgICJ9XG4iKTsKLSAgICB9Ci0gICAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlBy
aW50KAotICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAiJGRlcHJlY2F0aW9uJFxuIgotICAg
ICAgICAicHVibGljIGphdmEudXRpbC5NYXA8JGJveGVkX2tleV90eXBlJCwgJHZhbHVlX2VudW1f
dHlwZSQ+XG4iCi0gICAgICAgICJnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAg
ICIgIHJldHVybiBuZXcgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5NYXBBZGFwdGVyPFxu
IgotICAgICAgICAiICAgICAgJGJveGVkX2tleV90eXBlJCwgJHZhbHVlX2VudW1fdHlwZSQsIGph
dmEubGFuZy5JbnRlZ2VyPihcbiIKLSAgICAgICAgIiAgICAgICAgICBpbnRlcm5hbEdldCRjYXBp
dGFsaXplZF9uYW1lJCgpLmdldE1hcCgpLFxuIgotICAgICAgICAiICAgICAgICAgICRuYW1lJFZh
bHVlQ29udmVydGVyKTtcbiIKLSAgICAgICAgIn1cbiIpOwotICB9IGVsc2UgewotICAgIFdyaXRl
RmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgIiRkZXByZWNhdGlvbiRcbiIKLSAgICAg
ICAgInB1YmxpYyBqYXZhLnV0aWwuTWFwPCR0eXBlX3BhcmFtZXRlcnMkPiBnZXQkY2FwaXRhbGl6
ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAgICIgIHJldHVybiBpbnRlcm5hbEdldCRjYXBpdGFsaXpl
ZF9uYW1lJCgpLmdldE1hcCgpO1xuIgotICAgICAgICAifVxuIik7Ci0gIH0KLQotICAvLyBHZW5l
cmF0ZSBwcml2YXRlIHNldHRlcnMgZm9yIHRoZSBidWlsZGVyIHRvIHByb3h5IGludG8uCi0gIGlm
IChHZXRKYXZhVHlwZShWYWx1ZUZpZWxkKGRlc2NyaXB0b3JfKSkgPT0gSkFWQVRZUEVfRU5VTSkg
ewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgInByaXZhdGUgamF2
YS51dGlsLk1hcDwkYm94ZWRfa2V5X3R5cGUkLCAkdmFsdWVfZW51bV90eXBlJD5cbiIKLSAgICAg
ICAgImdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAgICIgIHJldHVy
biBuZXcgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5NYXBBZGFwdGVyPFxuIgotICAgICAg
ICAiICAgICAgJGJveGVkX2tleV90eXBlJCwgJHZhbHVlX2VudW1fdHlwZSQsIGphdmEubGFuZy5J
bnRlZ2VyPihcbiIKLSAgICAgICAgIiAgICAgICAgICBpbnRlcm5hbEdldE11dGFibGUkY2FwaXRh
bGl6ZWRfbmFtZSQoKS5nZXRNdXRhYmxlTWFwKCksXG4iCi0gICAgICAgICIgICAgICAgICAgJG5h
bWUkVmFsdWVDb252ZXJ0ZXIpO1xuIgotICAgICAgICAifVxuIik7Ci0gICAgaWYgKFN1cHBvcnRV
bmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgICBXcml0ZUZpZWxk
RG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAgICJwcml2YXRlIGphdmEudXRpbC5NYXA8
JGJveGVkX2tleV90eXBlJCwgJGJveGVkX3ZhbHVlX3R5cGUkPlxuIgotICAgICAgICAgICJnZXRN
dXRhYmxlJGNhcGl0YWxpemVkX25hbWUkVmFsdWUoKSB7XG4iCi0gICAgICAgICAgIiAgcmV0dXJu
IGludGVybmFsR2V0TXV0YWJsZSRjYXBpdGFsaXplZF9uYW1lJCgpLmdldE11dGFibGVNYXAoKTtc
biIKLSAgICAgICAgICAifVxuIik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIFdyaXRlRmllbGRE
b2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgInByaXZhdGUgamF2YS51dGlsLk1hcDwkdHlwZV9w
YXJhbWV0ZXJzJD5cbiIKLSAgICAgICAgImdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7
XG4iCi0gICAgICAgICIgIHJldHVybiBpbnRlcm5hbEdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFt
ZSQoKS5nZXRNdXRhYmxlTWFwKCk7XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgfQotfQotCi12b2lk
IEltbXV0YWJsZU1hcEZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkZXJNZW1iZXJz
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChHZXRKYXZhVHlwZShWYWx1ZUZp
ZWxkKGRlc2NyaXB0b3JfKSkgPT0gSkFWQVRZUEVfRU5VTSkgewotICAgIFdyaXRlRmllbGREb2ND
b21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgdmFyaWFibGVzXywKLSAgICAgICAgIiRkZXByZWNhdGlvbiRcbiIKLSAgICAgICAgInB1Ymxp
YyBqYXZhLnV0aWwuTWFwPCRib3hlZF9rZXlfdHlwZSQsICR2YWx1ZV9lbnVtX3R5cGUkPlxuIgot
ICAgICAgICAiZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICAgICAiICByZXR1cm4g
aW5zdGFuY2UuZ2V0JGNhcGl0YWxpemVkX25hbWUkKCk7XG4iCi0gICAgICAgICJ9XG4iKTsKLSAg
ICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICIkZGVwcmVjYXRpb24kXG4i
Ci0gICAgICAgICJwdWJsaWMgamF2YS51dGlsLk1hcDwkYm94ZWRfa2V5X3R5cGUkLCAkdmFsdWVf
ZW51bV90eXBlJD5cbiIKLSAgICAgICAgImdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7
XG4iCi0gICAgICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgICAgICIgIHJldHVybiBpbnN0
YW5jZS5nZXRNdXRhYmxlJGNhcGl0YWxpemVkX25hbWUkKCk7XG4iCi0gICAgICAgICJ9XG4iKTsK
LSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJp
bnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICIkZGVwcmVjYXRpb24k
cHVibGljIEJ1aWxkZXIgcHV0QWxsJGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICAgICAiICAg
IGphdmEudXRpbC5NYXA8JGJveGVkX2tleV90eXBlJCwgJHZhbHVlX2VudW1fdHlwZSQ+IHZhbHVl
cykge1xuIgotICAgICAgICAiICBnZXRNdXRhYmxlJGNhcGl0YWxpemVkX25hbWUkKCkucHV0QWxs
KHZhbHVlcyk7XG4iCi0gICAgICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICAgICAifVxuIik7
Ci0gICAgaWYgKFN1cHBvcnRVbmtub3duRW51bVZhbHVlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7
Ci0gICAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAgICIkZGVw
cmVjYXRpb24kXG4iCi0gICAgICAgICAgInB1YmxpYyBqYXZhLnV0aWwuTWFwPCRib3hlZF9rZXlf
dHlwZSQsICRib3hlZF92YWx1ZV90eXBlJD5cbiIKLSAgICAgICAgICAiZ2V0JGNhcGl0YWxpemVk
X25hbWUkVmFsdWUoKSB7XG4iCi0gICAgICAgICAgIiAgcmV0dXJuIGluc3RhbmNlLmdldCRjYXBp
dGFsaXplZF9uYW1lJFZhbHVlKCk7XG4iCi0gICAgICAgICAgIn1cbiIpOwotICAgICAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgICAiJGRlcHJlY2F0aW9uJFxuIgot
ICAgICAgICAgICJwdWJsaWMgamF2YS51dGlsLk1hcDwkYm94ZWRfa2V5X3R5cGUkLCAkYm94ZWRf
dmFsdWVfdHlwZSQ+XG4iCi0gICAgICAgICAgImdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSRW
YWx1ZSgpIHtcbiIKLSAgICAgICAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICAgICAgICIg
IHJldHVybiBpbnN0YW5jZS5nZXRNdXRhYmxlJGNhcGl0YWxpemVkX25hbWUkVmFsdWUoKTtcbiIK
LSAgICAgICAgICAifVxuIik7Ci0gICAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICB2YXJpYWJsZXNf
LAotICAgICAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgcHV0QWxsJGNhcGl0YWxp
emVkX25hbWUkVmFsdWUoXG4iCi0gICAgICAgICAgIiAgICBqYXZhLnV0aWwuTWFwPCRib3hlZF9r
ZXlfdHlwZSQsICRib3hlZF92YWx1ZV90eXBlJD4gdmFsdWVzKSB7XG4iCi0gICAgICAgICAgIiAg
Z2V0TXV0YWJsZSRjYXBpdGFsaXplZF9uYW1lJFZhbHVlKCkucHV0QWxsKHZhbHVlcyk7XG4iCi0g
ICAgICAgICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgICAgICAgIn1cbiIpOwotICAgIH0KLSAg
fSBlbHNlIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICJwdWJs
aWMgamF2YS51dGlsLk1hcDwkdHlwZV9wYXJhbWV0ZXJzJD4gZ2V0JGNhcGl0YWxpemVkX25hbWUk
KCkge1xuIgotICAgICAgICAiICByZXR1cm4gaW5zdGFuY2UuZ2V0JGNhcGl0YWxpemVkX25hbWUk
KCk7XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVy
LCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18s
Ci0gICAgICAgICJwdWJsaWMgamF2YS51dGlsLk1hcDwkdHlwZV9wYXJhbWV0ZXJzJD5cbiIKLSAg
ICAgICAgImdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAgICIgIGNv
cHlPbldyaXRlKCk7XG4iCi0gICAgICAgICIgIHJldHVybiBpbnN0YW5jZS5nZXRNdXRhYmxlJGNh
cGl0YWxpemVkX25hbWUkKCk7XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgIHZhcmlhYmxlc18sCi0gICAgICAgICJwdWJsaWMgQnVpbGRlciBwdXRBbGwkY2FwaXRhbGl6
ZWRfbmFtZSQoXG4iCi0gICAgICAgICIgICAgamF2YS51dGlsLk1hcDwkdHlwZV9wYXJhbWV0ZXJz
JD4gdmFsdWVzKSB7XG4iCi0gICAgICAgICIgIGdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSQo
KS5wdXRBbGwodmFsdWVzKTtcbiIKLSAgICAgICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgICAg
ICJ9XG4iKTsKLSAgfQotfQotCi12b2lkIEltbXV0YWJsZU1hcEZpZWxkTGl0ZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgIGNvbnN0IHsKLSAgLy8gTm90aGluZyB0byBpbml0aWFsaXplLgotfQotCi12b2lkIElt
bXV0YWJsZU1hcEZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUluaXRpYWxpemF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBOb3RoaW5nIHRvIGluaXRpYWxp
emUuCi19Ci0KLXZvaWQgSW1tdXRhYmxlTWFwRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRl
VmlzaXRDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KAotICAgICAgdmFyaWFibGVzXywKLSAgICAgICIkbmFtZSRfID0gdmlzaXRvci52aXNpdE1hcChp
bnRlcm5hbEdldE11dGFibGUkY2FwaXRhbGl6ZWRfbmFtZSQoKSxcbiIKLSAgICAgICIgICAgb3Ro
ZXIuaW50ZXJuYWxHZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7XG4iKTsKLX0KLQotdm9pZCBJbW11
dGFibGVNYXBGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVEeW5hbWljTWV0aG9kTWFrZUlt
bXV0YWJsZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiJG5hbWUkXy5tYWtlSW1tdXRhYmxlKCk7XG4iKTsKLX0KLQot
dm9pZCBJbW11dGFibGVNYXBGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCgKLSAgICAg
IHZhcmlhYmxlc18sCi0gICAgICAiaWYgKCEkbmFtZSRfLmlzTXV0YWJsZSgpKSB7XG4iCi0gICAg
ICAiICAkbmFtZSRfID0gJG5hbWUkXy5jb3B5KCk7XG4iCi0gICAgICAifVxuIik7Ci0gIGlmICgh
U3VwcG9ydFVua25vd25FbnVtVmFsdWUoZGVzY3JpcHRvcl8tPmZpbGUoKSkgJiYKLSAgICAgIEdl
dEphdmFUeXBlKFZhbHVlRmllbGQoZGVzY3JpcHRvcl8pKSA9PSBKQVZBVFlQRV9FTlVNKSB7Ci0g
ICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICJjb20uZ29v
Z2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcgYnl0ZXMgPSBpbnB1dC5yZWFkQnl0ZXMoKTtcbiIKLSAg
ICAgICAgImNvbS5nb29nbGUucHJvdG9idWYuTWFwRW50cnkkbGl0ZSQ8JHR5cGVfcGFyYW1ldGVy
cyQ+XG4iCi0gICAgICAgICIkbmFtZSQgPSAkZGVmYXVsdF9lbnRyeSQuZ2V0UGFyc2VyRm9yVHlw
ZSgpLnBhcnNlRnJvbShieXRlcyk7XG4iKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAg
dmFyaWFibGVzXywKLSAgICAgICAgImlmICgkdmFsdWVfZW51bV90eXBlJC5mb3JOdW1iZXIoJG5h
bWUkLmdldFZhbHVlKCkpID09IG51bGwpIHtcbiIKLSAgICAgICAgIiAgc3VwZXIubWVyZ2VMZW5n
dGhEZWxpbWl0ZWRGaWVsZCgkbnVtYmVyJCwgYnl0ZXMpO1xuIgotICAgICAgICAifSBlbHNlIHtc
biIKLSAgICAgICAgIiAgJG5hbWUkXy5nZXRNdXRhYmxlTWFwKCkucHV0KCRuYW1lJC5nZXRLZXko
KSwgJG5hbWUkLmdldFZhbHVlKCkpO1xuIgotICAgICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0g
ICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICJjb20uZ29v
Z2xlLnByb3RvYnVmLk1hcEVudHJ5JGxpdGUkPCR0eXBlX3BhcmFtZXRlcnMkPlxuIgotICAgICAg
ICAiJG5hbWUkID0gaW5wdXQucmVhZE1lc3NhZ2UoXG4iCi0gICAgICAgICIgICAgJGRlZmF1bHRf
ZW50cnkkLmdldFBhcnNlckZvclR5cGUoKSwgZXh0ZW5zaW9uUmVnaXN0cnkpO1xuIgotICAgICAg
ICAiJG5hbWUkXy5nZXRNdXRhYmxlTWFwKCkucHV0KCRuYW1lJC5nZXRLZXkoKSwgJG5hbWUkLmdl
dFZhbHVlKCkpO1xuIik7Ci0gIH0KLX0KLQotdm9pZCBJbW11dGFibGVNYXBGaWVsZExpdGVHZW5l
cmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgLy8gTm90aGluZyB0byBkbyBoZXJlLgotfQotCi12b2lkIEltbXV0YWJsZU1hcEZp
ZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFyaWFibGVzXywK
LSAgICAgICJmb3IgKGphdmEudXRpbC5NYXAuRW50cnk8JHR5cGVfcGFyYW1ldGVycyQ+IGVudHJ5
XG4iCi0gICAgICAiICAgICA6IGludGVybmFsR2V0JGNhcGl0YWxpemVkX25hbWUkKCkuZ2V0TWFw
KCkuZW50cnlTZXQoKSkge1xuIgotICAgICAgIiAgY29tLmdvb2dsZS5wcm90b2J1Zi5NYXBFbnRy
eSRsaXRlJDwkdHlwZV9wYXJhbWV0ZXJzJD5cbiIKLSAgICAgICIgICRuYW1lJCA9ICRkZWZhdWx0
X2VudHJ5JC5uZXdCdWlsZGVyRm9yVHlwZSgpXG4iCi0gICAgICAiICAgICAgLnNldEtleShlbnRy
eS5nZXRLZXkoKSlcbiIKLSAgICAgICIgICAgICAuc2V0VmFsdWUoZW50cnkuZ2V0VmFsdWUoKSlc
biIKLSAgICAgICIgICAgICAuYnVpbGQoKTtcbiIKLSAgICAgICIgIG91dHB1dC53cml0ZU1lc3Nh
Z2UoJG51bWJlciQsICRuYW1lJCk7XG4iCi0gICAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRh
YmxlTWFwRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFy
aWFibGVzXywKLSAgICAgICJmb3IgKGphdmEudXRpbC5NYXAuRW50cnk8JHR5cGVfcGFyYW1ldGVy
cyQ+IGVudHJ5XG4iCi0gICAgICAiICAgICA6IGludGVybmFsR2V0JGNhcGl0YWxpemVkX25hbWUk
KCkuZ2V0TWFwKCkuZW50cnlTZXQoKSkge1xuIgotICAgICAgIiAgY29tLmdvb2dsZS5wcm90b2J1
Zi5NYXBFbnRyeSRsaXRlJDwkdHlwZV9wYXJhbWV0ZXJzJD5cbiIKLSAgICAgICIgICRuYW1lJCA9
ICRkZWZhdWx0X2VudHJ5JC5uZXdCdWlsZGVyRm9yVHlwZSgpXG4iCi0gICAgICAiICAgICAgLnNl
dEtleShlbnRyeS5nZXRLZXkoKSlcbiIKLSAgICAgICIgICAgICAuc2V0VmFsdWUoZW50cnkuZ2V0
VmFsdWUoKSlcbiIKLSAgICAgICIgICAgICAuYnVpbGQoKTtcbiIKLSAgICAgICIgIHNpemUgKz0g
Y29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAgICAgIiAgICAgIC5j
b21wdXRlTWVzc2FnZVNpemUoJG51bWJlciQsICRuYW1lJCk7XG4iCi0gICAgICAifVxuIik7Ci19
Ci0KLXZvaWQgSW1tdXRhYmxlTWFwRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlRXF1YWxz
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCgKLSAg
ICAgIHZhcmlhYmxlc18sCi0gICAgICAicmVzdWx0ID0gcmVzdWx0ICYmIGludGVybmFsR2V0JGNh
cGl0YWxpemVkX25hbWUkKCkuZXF1YWxzKFxuIgotICAgICAgIiAgICBvdGhlci5pbnRlcm5hbEdl
dCRjYXBpdGFsaXplZF9uYW1lJCgpKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1hcEZpZWxk
TGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFyaWFibGVzXywKLSAgICAgICJpZiAo
IWludGVybmFsR2V0JGNhcGl0YWxpemVkX25hbWUkKCkuZ2V0TWFwKCkuaXNFbXB0eSgpKSB7XG4i
Ci0gICAgICAiICBoYXNoID0gKDM3ICogaGFzaCkgKyAkY29uc3RhbnRfbmFtZSQ7XG4iCi0gICAg
ICAiICBoYXNoID0gKDUzICogaGFzaCkgKyBpbnRlcm5hbEdldCRjYXBpdGFsaXplZF9uYW1lJCgp
Lmhhc2hDb2RlKCk7XG4iCi0gICAgICAifVxuIik7Ci19Ci0KLXN0cmluZyBJbW11dGFibGVNYXBG
aWVsZExpdGVHZW5lcmF0b3I6OkdldEJveGVkVHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG5hbWVf
cmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8tPm1lc3NhZ2VfdHlw
ZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxl
cgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21hcF9maWVsZF9s
aXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21hcF9maWVsZF9s
aXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NWI1YzViZGQ4MWQ0OTU1OWFm
ZmE4Y2NhZWIyNTZhNjU2MGMzYWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tYXBfZmll
bGRfbGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pB
VkFfTUFQX0ZJRUxEX0xJVEVfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9K
QVZBX01BUF9GSUVMRF9MSVRFX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9maWVsZC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBw
cm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1jbGFz
cyBJbW11dGFibGVNYXBGaWVsZExpdGVHZW5lcmF0b3IgOiBwdWJsaWMgSW1tdXRhYmxlRmllbGRM
aXRlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEltbXV0YWJsZU1hcEZpZWxkTGl0
ZUdlbmVyYXRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50
IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgIGludCBidWlsZGVyQml0SW5kZXgsIENvbnRleHQqIGNv
bnRleHQpOwotICB+SW1tdXRhYmxlTWFwRmllbGRMaXRlR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1w
bGVtZW50cyBJbW11dGFibGVGaWVsZExpdGVHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gIGludCBHZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNvbnN0OwotICBp
bnQgR2V0TnVtQml0c0ZvckJ1aWxkZXIoKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUludGVyZmFj
ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVt
YmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGVy
TWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbml0
aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlVmlzaXRDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZUR5bmFtaWNNZXRob2RNYWtlSW1tdXRhYmxlQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxp
emF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVF
cXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUhh
c2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotICBzdHJpbmcgR2V0Qm94ZWRU
eXBlKCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0gIENsYXNzTmFtZVJl
c29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAv
LyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBu
YW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZB
X01BUF9GSUVMRF9MSVRFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9tZXNzYWdlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9tZXNzYWdlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzQ3NGE0
OGE2OTJmMGZlZTJjZWE4NWY0NjYzMmQ5Njk2MzFkZTEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfbWVzc2FnZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDE0NTAgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5j
b20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJz
IGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgot
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlLmg+
Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2hhc2guaD4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hB
UkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4K
LSNlbmRpZgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfY29udGV4dC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2V4dGVuc2lvbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhL2phdmFfZ2VuZXJhdG9yX2ZhY3RvcnkuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfYnVpbGRlci5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9idWlsZGVyX2xp
dGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX25hbWVf
cmVzb2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93
aXJlX2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1dGUuaD4KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsK
LW5hbWVzcGFjZSBqYXZhIHsKLQotdXNpbmcgaW50ZXJuYWw6OldpcmVGb3JtYXQ7Ci11c2luZyBp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU7Ci0KLW5hbWVzcGFjZSB7Ci1ib29sIEdlbmVyYXRlSGFz
Qml0cyhjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBTdXBwb3J0Rmll
bGRQcmVzZW5jZShkZXNjcmlwdG9yLT5maWxlKCkpIHx8Ci0gICAgICBIYXNSZXBlYXRlZEZpZWxk
cyhkZXNjcmlwdG9yKTsKLX0KLQotc3RyaW5nIE1hcFZhbHVlSW1tdXRhYmxlQ2xhc3NkTmFtZShj
b25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDbGFzc05hbWVSZXNvbHZlciogbmFtZV9yZXNvbHZlcikgewotICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIHZhbHVlX2ZpZWxkID0gZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJ2
YWx1ZSIpOwotICBHT09HTEVfQ0hFQ0tfRVEoRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0Us
IHZhbHVlX2ZpZWxkLT50eXBlKCkpOwotICByZXR1cm4gbmFtZV9yZXNvbHZlci0+R2V0SW1tdXRh
YmxlQ2xhc3NOYW1lKHZhbHVlX2ZpZWxkLT5tZXNzYWdlX3R5cGUoKSk7Ci19Ci19ICAvLyBuYW1l
c3BhY2UKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotCi1NZXNzYWdlR2VuZXJhdG9yOjpNZXNzYWdlR2VuZXJh
dG9yKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpCi0gIDogZGVzY3JpcHRvcl8oZGVzY3Jp
cHRvcikge30KLQotTWVzc2FnZUdlbmVyYXRvcjo6fk1lc3NhZ2VHZW5lcmF0b3IoKSB7fQotCi0v
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci1JbW11dGFibGVNZXNzYWdlR2VuZXJhdG9yOjpJbW11dGFibGVNZXNzYWdl
R2VuZXJhdG9yKAotICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIENvbnRleHQqIGNv
bnRleHQpCi0gIDogTWVzc2FnZUdlbmVyYXRvcihkZXNjcmlwdG9yKSwgY29udGV4dF8oY29udGV4
dCksCi0gICAgbmFtZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpLAotICAg
IGZpZWxkX2dlbmVyYXRvcnNfKGRlc2NyaXB0b3IsIGNvbnRleHRfKSB7Ci0gIEdPT0dMRV9DSEVD
SyhIYXNEZXNjcmlwdG9yTWV0aG9kcyhkZXNjcmlwdG9yLT5maWxlKCksIGNvbnRleHQtPkVuZm9y
Y2VMaXRlKCkpKQotICAgICAgPDwgIkdlbmVyYXRvciBmYWN0b3J5IGVycm9yOiBBIG5vbi1saXRl
IG1lc3NhZ2UgZ2VuZXJhdG9yIGlzIHVzZWQgdG8gIgotICAgICAgICAgImdlbmVyYXRlIGxpdGUg
bWVzc2FnZXMuIjsKLX0KLQotSW1tdXRhYmxlTWVzc2FnZUdlbmVyYXRvcjo6fkltbXV0YWJsZU1l
c3NhZ2VHZW5lcmF0b3IoKSB7fQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VHZW5lcmF0b3I6Okdl
bmVyYXRlU3RhdGljVmFyaWFibGVzKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLCBpbnQqIGJ5
dGVjb2RlX2VzdGltYXRlKSB7Ci0gIC8vIEJlY2F1c2UgZGVzY3JpcHRvci5wcm90byAoY29tLmdv
b2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9zKSBpcwotICAvLyB1c2VkIGluIHRoZSBjb25z
dHJ1Y3Rpb24gb2YgZGVzY3JpcHRvcnMsIHdlIGhhdmUgYSB0cmlja3kgYm9vdHN0cmFwcGluZwot
ICAvLyBwcm9ibGVtLiAgVG8gaGVscCBjb250cm9sIHN0YXRpYyBpbml0aWFsaXphdGlvbiBvcmRl
ciwgd2UgbWFrZSBzdXJlIGFsbAotICAvLyBkZXNjcmlwdG9ycyBhbmQgb3RoZXIgc3RhdGljIGRh
dGEgdGhhdCBkZXBlbmRzIG9uIHRoZW0gYXJlIG1lbWJlcnMgb2YKLSAgLy8gdGhlIG91dGVybW9z
dCBjbGFzcyBpbiB0aGUgZmlsZS4gIFRoaXMgd2F5LCB0aGV5IHdpbGwgYmUgaW5pdGlhbGl6ZWQg
aW4KLSAgLy8gYSBkZXRlcm1pbmlzdGljIG9yZGVyLgotCi0gIG1hcDxzdHJpbmcsIHN0cmluZz4g
dmFyczsKLSAgdmFyc1siaWRlbnRpZmllciJdID0gVW5pcXVlRmlsZVNjb3BlSWRlbnRpZmllcihk
ZXNjcmlwdG9yXyk7Ci0gIHZhcnNbImluZGV4Il0gPSBTaW1wbGVJdG9hKGRlc2NyaXB0b3JfLT5p
bmRleCgpKTsKLSAgdmFyc1siY2xhc3NuYW1lIl0gPSBuYW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRh
YmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKTsKLSAgaWYgKGRlc2NyaXB0b3JfLT5jb250YWluaW5n
X3R5cGUoKSAhPSBOVUxMKSB7Ci0gICAgdmFyc1sicGFyZW50Il0gPSBVbmlxdWVGaWxlU2NvcGVJ
ZGVudGlmaWVyKAotICAgICAgICBkZXNjcmlwdG9yXy0+Y29udGFpbmluZ190eXBlKCkpOwotICB9
Ci0gIGlmIChNdWx0aXBsZUphdmFGaWxlcyhkZXNjcmlwdG9yXy0+ZmlsZSgpLCAvKiBpbW11dGFi
bGUgPSAqLyB0cnVlKSkgewotICAgIC8vIFdlIGNhbiBvbmx5IG1ha2UgdGhlc2UgcGFja2FnZS1w
cml2YXRlIHNpbmNlIHRoZSBjbGFzc2VzIHRoYXQgdXNlIHRoZW0KLSAgICAvLyBhcmUgaW4gc2Vw
YXJhdGUgZmlsZXMuCi0gICAgdmFyc1sicHJpdmF0ZSJdID0gIiI7Ci0gIH0gZWxzZSB7Ci0gICAg
dmFyc1sicHJpdmF0ZSJdID0gInByaXZhdGUgIjsKLSAgfQotICBpZiAoKmJ5dGVjb2RlX2VzdGlt
YXRlIDw9IGtNYXhTdGF0aWNTaXplKSB7Ci0gICAgdmFyc1siZmluYWwiXSA9ICJmaW5hbCAiOwot
ICB9IGVsc2UgewotICAgIHZhcnNbImZpbmFsIl0gPSAiIjsKLSAgfQotCi0gIC8vIFRoZSBkZXNj
cmlwdG9yIGZvciB0aGlzIHR5cGUuCi0gIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgLy8gVE9E
Tyh0ZWJvcmluZyk6IGZpbmFsIG5lZWRzIHRvIGJlIGFkZGVkIGJhY2suIFRoZSB3YXkgdG8gZml4
IGl0IGlzIHRvCi0gICAgLy8gZ2VuZXJhdGUgbWV0aG9kcyB0aGF0IGNhbiBjb25zdHJ1Y3QgdGhl
IHR5cGVzLCBhbmQgdGhlbiBzdGlsbCBkZWNsYXJlIHRoZQotICAgIC8vIHR5cGVzLCBhbmQgdGhl
biBpbml0IHRoZW0gaW4gY2xpbml0IHdpdGggdGhlIG5ldyBtZXRob2QgY2FsbHMuCi0gICAgIiRw
cml2YXRlJHN0YXRpYyAkZmluYWwkY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5EZXNj
cmlwdG9yXG4iCi0gICAgIiAgaW50ZXJuYWxfJGlkZW50aWZpZXIkX2Rlc2NyaXB0b3I7XG4iKTsK
LSAgKmJ5dGVjb2RlX2VzdGltYXRlICs9IDMwOwotCi0gIC8vIEFuZCB0aGUgRmllbGRBY2Nlc3Nv
clRhYmxlLgotICBHZW5lcmF0ZUZpZWxkQWNjZXNzb3JUYWJsZShwcmludGVyLCBieXRlY29kZV9l
c3RpbWF0ZSk7Ci0KLSAgLy8gR2VuZXJhdGUgc3RhdGljIG1lbWJlcnMgZm9yIGFsbCBuZXN0ZWQg
dHlwZXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlX2Nv
dW50KCk7IGkrKykgewotICAgIC8vIFRPRE8oa2VudG9uKTogIFJldXNlIE1lc3NhZ2VHZW5lcmF0
b3Igb2JqZWN0cz8KLSAgICBJbW11dGFibGVNZXNzYWdlR2VuZXJhdG9yKGRlc2NyaXB0b3JfLT5u
ZXN0ZWRfdHlwZShpKSwgY29udGV4dF8pCi0gICAgICAgIC5HZW5lcmF0ZVN0YXRpY1ZhcmlhYmxl
cyhwcmludGVyLCBieXRlY29kZV9lc3RpbWF0ZSk7Ci0gIH0KLX0KLQotaW50IEltbXV0YWJsZU1l
c3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlU3RhdGljVmFyaWFibGVJbml0aWFsaXplcnMoCi0gICAg
aW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaW50IGJ5dGVjb2RlX2VzdGltYXRlID0gMDsKLSAg
bWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICB2YXJzWyJpZGVudGlmaWVyIl0gPSBVbmlxdWVG
aWxlU2NvcGVJZGVudGlmaWVyKGRlc2NyaXB0b3JfKTsKLSAgdmFyc1siaW5kZXgiXSA9IFNpbXBs
ZUl0b2EoZGVzY3JpcHRvcl8tPmluZGV4KCkpOwotICB2YXJzWyJjbGFzc25hbWUiXSA9IG5hbWVf
cmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pOwotICBpZiAoZGVz
Y3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlwZSgpICE9IE5VTEwpIHsKLSAgICB2YXJzWyJwYXJlbnQi
XSA9IFVuaXF1ZUZpbGVTY29wZUlkZW50aWZpZXIoCi0gICAgICAgIGRlc2NyaXB0b3JfLT5jb250
YWluaW5nX3R5cGUoKSk7Ci0gIH0KLQotICAvLyBUaGUgZGVzY3JpcHRvciBmb3IgdGhpcyB0eXBl
LgotICBpZiAoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlwZSgpID09IE5VTEwpIHsKLSAgICBw
cmludGVyLT5QcmludCh2YXJzLAotICAgICAgImludGVybmFsXyRpZGVudGlmaWVyJF9kZXNjcmlw
dG9yID1cbiIKLSAgICAgICIgIGdldERlc2NyaXB0b3IoKS5nZXRNZXNzYWdlVHlwZXMoKS5nZXQo
JGluZGV4JCk7XG4iKTsKLSAgICBieXRlY29kZV9lc3RpbWF0ZSArPSAzMDsKLSAgfSBlbHNlIHsK
LSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgImludGVybmFsXyRpZGVudGlmaWVyJF9k
ZXNjcmlwdG9yID1cbiIKLSAgICAgICIgIGludGVybmFsXyRwYXJlbnQkX2Rlc2NyaXB0b3IuZ2V0
TmVzdGVkVHlwZXMoKS5nZXQoJGluZGV4JCk7XG4iKTsKLSAgICBieXRlY29kZV9lc3RpbWF0ZSAr
PSAzMDsKLSAgfQotCi0gIC8vIEFuZCB0aGUgRmllbGRBY2Nlc3NvclRhYmxlLgotICBieXRlY29k
ZV9lc3RpbWF0ZSArPSBHZW5lcmF0ZUZpZWxkQWNjZXNzb3JUYWJsZUluaXRpYWxpemVyKHByaW50
ZXIpOwotCi0gIC8vIEdlbmVyYXRlIHN0YXRpYyBtZW1iZXIgaW5pdGlhbGl6ZXJzIGZvciBhbGwg
bmVzdGVkIHR5cGVzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5uZXN0ZWRf
dHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAvLyBUT0RPKGtlbnRvbik6ICBSZXVzZSBNZXNzYWdl
R2VuZXJhdG9yIG9iamVjdHM/Ci0gICAgYnl0ZWNvZGVfZXN0aW1hdGUgKz0KLSAgICAgICAgSW1t
dXRhYmxlTWVzc2FnZUdlbmVyYXRvcihkZXNjcmlwdG9yXy0+bmVzdGVkX3R5cGUoaSksIGNvbnRl
eHRfKQotICAgICAgICAgICAgLkdlbmVyYXRlU3RhdGljVmFyaWFibGVJbml0aWFsaXplcnMocHJp
bnRlcik7Ci0gIH0KLSAgcmV0dXJuIGJ5dGVjb2RlX2VzdGltYXRlOwotfQotCi12b2lkIEltbXV0
YWJsZU1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVGaWVsZEFjY2Vzc29yVGFibGUoaW86OlBy
aW50ZXIqIHByaW50ZXIsIGludCogYnl0ZWNvZGVfZXN0aW1hdGUpIHsKLSAgbWFwPHN0cmluZywg
c3RyaW5nPiB2YXJzOwotICB2YXJzWyJpZGVudGlmaWVyIl0gPSBVbmlxdWVGaWxlU2NvcGVJZGVu
dGlmaWVyKGRlc2NyaXB0b3JfKTsKLSAgaWYgKE11bHRpcGxlSmF2YUZpbGVzKGRlc2NyaXB0b3Jf
LT5maWxlKCksIC8qIGltbXV0YWJsZSA9ICovIHRydWUpKSB7Ci0gICAgLy8gV2UgY2FuIG9ubHkg
bWFrZSB0aGVzZSBwYWNrYWdlLXByaXZhdGUgc2luY2UgdGhlIGNsYXNzZXMgdGhhdCB1c2UgdGhl
bQotICAgIC8vIGFyZSBpbiBzZXBhcmF0ZSBmaWxlcy4KLSAgICB2YXJzWyJwcml2YXRlIl0gPSAi
IjsKLSAgfSBlbHNlIHsKLSAgICB2YXJzWyJwcml2YXRlIl0gPSAicHJpdmF0ZSAiOwotICB9Ci0g
IGlmICgqYnl0ZWNvZGVfZXN0aW1hdGUgPD0ga01heFN0YXRpY1NpemUpIHsKLSAgICB2YXJzWyJm
aW5hbCJdID0gImZpbmFsICI7Ci0gIH0gZWxzZSB7Ci0gICAgdmFyc1siZmluYWwiXSA9ICIiOwot
ICB9Ci0gIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgIiRwcml2YXRlJHN0YXRpYyAkZmluYWwk
XG4iCi0gICAgIiAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlLkZpZWxkQWNj
ZXNzb3JUYWJsZVxuIgotICAgICIgICAgaW50ZXJuYWxfJGlkZW50aWZpZXIkX2ZpZWxkQWNjZXNz
b3JUYWJsZTtcbiIpOwotCi0gIC8vIDYgYnl0ZXMgcGVyIGZpZWxkIGFuZCBvbmVvZgotICAqYnl0
ZWNvZGVfZXN0aW1hdGUgKz0gMTAgKyA2ICogZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCkKLSAg
ICAgICsgNiAqIGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7Ci19Ci0KLWludCBJbW11
dGFibGVNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRlRmllbGRBY2Nlc3NvclRhYmxlSW5pdGlh
bGl6ZXIoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaW50IGJ5dGVjb2RlX2VzdGltYXRlID0g
MTA7Ci0gIHByaW50ZXItPlByaW50KAotICAgICJpbnRlcm5hbF8kaWRlbnRpZmllciRfZmllbGRB
Y2Nlc3NvclRhYmxlID0gbmV3XG4iCi0gICAgIiAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0
ZWRNZXNzYWdlLkZpZWxkQWNjZXNzb3JUYWJsZShcbiIKLSAgICAiICAgIGludGVybmFsXyRpZGVu
dGlmaWVyJF9kZXNjcmlwdG9yLFxuIgotICAgICIgICAgbmV3IGphdmEubGFuZy5TdHJpbmdbXSB7
ICIsCi0gICAgImlkZW50aWZpZXIiLAotICAgIFVuaXF1ZUZpbGVTY29wZUlkZW50aWZpZXIoZGVz
Y3JpcHRvcl8pKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291
bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0
b3JfLT5maWVsZChpKTsKLSAgICBjb25zdCBGaWVsZEdlbmVyYXRvckluZm8qIGluZm8gPSBjb250
ZXh0Xy0+R2V0RmllbGRHZW5lcmF0b3JJbmZvKGZpZWxkKTsKLSAgICBieXRlY29kZV9lc3RpbWF0
ZSArPSA2OwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIlwiJGZpZWxkX25hbWUkXCIsICIs
Ci0gICAgICAiZmllbGRfbmFtZSIsIGluZm8tPmNhcGl0YWxpemVkX25hbWUpOwotICB9Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2xfY291bnQoKTsgaSsrKSB7
Ci0gICAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZiA9IGRlc2NyaXB0b3JfLT5vbmVvZl9k
ZWNsKGkpOwotICAgIGNvbnN0IE9uZW9mR2VuZXJhdG9ySW5mbyogaW5mbyA9IGNvbnRleHRfLT5H
ZXRPbmVvZkdlbmVyYXRvckluZm8ob25lb2YpOwotICAgIGJ5dGVjb2RlX2VzdGltYXRlICs9IDY7
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiXCIkb25lb2ZfbmFtZSRcIiwgIiwKLSAgICAg
ICJvbmVvZl9uYW1lIiwgaW5mby0+Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0gIH0KLSAgcHJpbnRlci0+
UHJpbnQoIn0pO1xuIik7Ci0gIHJldHVybiBieXRlY29kZV9lc3RpbWF0ZTsKLX0KLQotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlSW50ZXJm
YWNlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGlmIChkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9u
X3JhbmdlX2NvdW50KCkgPiAwKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAicHVibGlj
IGludGVyZmFjZSAkY2xhc3NuYW1lJE9yQnVpbGRlciBleHRlbmRzXG4iCi0gICAgICAiICAgICRl
eHRyYV9pbnRlcmZhY2VzJFxuIgotICAgICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVy
YXRlZE1lc3NhZ2UuXG4iCi0gICAgICAiICAgICAgICBFeHRlbmRhYmxlTWVzc2FnZU9yQnVpbGRl
cjwkY2xhc3NuYW1lJD4ge1xuIiwKLSAgICAgICJleHRyYV9pbnRlcmZhY2VzIiwgRXh0cmFNZXNz
YWdlT3JCdWlsZGVySW50ZXJmYWNlcyhkZXNjcmlwdG9yXyksCi0gICAgICAiY2xhc3NuYW1lIiwg
ZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgICAicHVibGljIGludGVyZmFjZSAkY2xhc3NuYW1lJE9yQnVpbGRlciBleHRlbmRzXG4iCi0g
ICAgICAiICAgICRleHRyYV9pbnRlcmZhY2VzJFxuIgotICAgICAgIiAgICBjb20uZ29vZ2xlLnBy
b3RvYnVmLk1lc3NhZ2VPckJ1aWxkZXIge1xuIiwKLSAgICAgICJleHRyYV9pbnRlcmZhY2VzIiwg
RXh0cmFNZXNzYWdlT3JCdWlsZGVySW50ZXJmYWNlcyhkZXNjcmlwdG9yXyksCi0gICAgICAiY2xh
c3NuYW1lIiwgZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0gIH0KLQotICBwcmludGVyLT5JbmRlbnQo
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBp
KyspIHsKLSAgICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICAgICAgZmllbGRfZ2VuZXJhdG9y
c18uZ2V0KGRlc2NyaXB0b3JfLT5maWVsZChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgLkdl
bmVyYXRlSW50ZXJmYWNlTWVtYmVycyhwcmludGVyKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICAgIHBy
aW50ZXItPlByaW50KAotICAgICAgICAgICJcbiIKLSAgICAgICAgICAicHVibGljICRjbGFzc25h
bWUkLiRvbmVvZl9jYXBpdGFsaXplZF9uYW1lJENhc2UgIgotICAgICAgICAgICJnZXQkb25lb2Zf
Y2FwaXRhbGl6ZWRfbmFtZSRDYXNlKCk7XG4iLAotICAgICAgICAgICJvbmVvZl9jYXBpdGFsaXpl
ZF9uYW1lIiwKLSAgICAgICAgICBjb250ZXh0Xy0+R2V0T25lb2ZHZW5lcmF0b3JJbmZvKAotICAg
ICAgICAgICAgICBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKSktPmNhcGl0YWxpemVkX25hbWUs
Ci0gICAgICAgICAgImNsYXNzbmFtZSIsCi0gICAgICAgICAgY29udGV4dF8tPkdldE5hbWVSZXNv
bHZlcigpLT5HZXRJbW11dGFibGVDbGFzc05hbWUoCi0gICAgICAgICAgICAgIGRlc2NyaXB0b3Jf
KSk7Ci0gICAgfQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoIn1c
biIpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZUdlbmVyYXRv
cjo6R2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgYm9vbCBpc19vd25fZmlsZSA9
Ci0gICAgZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlwZSgpID09IE5VTEwgJiYKLSAgICBNdWx0
aXBsZUphdmFGaWxlcyhkZXNjcmlwdG9yXy0+ZmlsZSgpLCAvKiBpbW11dGFibGUgPSAqLyB0cnVl
KTsKLQotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlczsKLSAgdmFyaWFibGVzWyJzdGF0
aWMiXSA9IGlzX293bl9maWxlID8gIiAiIDogIiBzdGF0aWMgIjsKLSAgdmFyaWFibGVzWyJjbGFz
c25hbWUiXSA9IGRlc2NyaXB0b3JfLT5uYW1lKCk7Ci0gIHZhcmlhYmxlc1siZXh0cmFfaW50ZXJm
YWNlcyJdID0gRXh0cmFNZXNzYWdlSW50ZXJmYWNlcyhkZXNjcmlwdG9yXyk7Ci0KLSAgV3JpdGVN
ZXNzYWdlRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0KLSAgLy8gVGhlIGJ1aWxk
ZXJfdHlwZSBzdG9yZXMgdGhlIHN1cGVyIHR5cGUgbmFtZSBvZiB0aGUgbmVzdGVkIEJ1aWxkZXIg
Y2xhc3MuCi0gIHN0cmluZyBidWlsZGVyX3R5cGU7Ci0gIGlmIChkZXNjcmlwdG9yXy0+ZXh0ZW5z
aW9uX3JhbmdlX2NvdW50KCkgPiAwKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAot
ICAgICAgInB1YmxpYyAkc3RhdGljJGZpbmFsIGNsYXNzICRjbGFzc25hbWUkIGV4dGVuZHNcbiIK
LSAgICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlLkV4dGVuZGFi
bGVNZXNzYWdlPFxuIgotICAgICAgIiAgICAgICRjbGFzc25hbWUkPiBpbXBsZW1lbnRzXG4iCi0g
ICAgICAiICAgICRleHRyYV9pbnRlcmZhY2VzJFxuIgotICAgICAgIiAgICAkY2xhc3NuYW1lJE9y
QnVpbGRlciB7XG4iKTsKLSAgICBidWlsZGVyX3R5cGUgPSBzdHJpbmdzOjpTdWJzdGl0dXRlKAot
ICAgICAgICAgICAgICJjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2UuRXh0ZW5k
YWJsZUJ1aWxkZXI8JDAsID8+IiwKLSAgICAgICAgICAgICBuYW1lX3Jlc29sdmVyXy0+R2V0SW1t
dXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzLAotICAgICAgInB1YmxpYyAkc3RhdGljJGZpbmFsIGNsYXNzICRjbGFz
c25hbWUkIGV4dGVuZHNcbiIKLSAgICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0
ZWRNZXNzYWdlIGltcGxlbWVudHNcbiIKLSAgICAgICIgICAgJGV4dHJhX2ludGVyZmFjZXMkXG4i
Ci0gICAgICAiICAgICRjbGFzc25hbWUkT3JCdWlsZGVyIHtcbiIpOwotICAgIGJ1aWxkZXJfdHlw
ZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlcjw/PiI7Ci0g
IH0KLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0gIC8vIFVzaW5nIGJ1aWxkZXJfdHlwZSwgaW5zdGVh
ZCBvZiBCdWlsZGVyLCBwcmV2ZW50cyB0aGUgQnVpbGRlciBjbGFzcyBmcm9tCi0gIC8vIGJlaW5n
IGxvYWRlZCBpbnRvIFBlcm1HZW4gc3BhY2Ugd2hlbiB0aGUgZGVmYXVsdCBpbnN0YW5jZSBpcyBj
cmVhdGVkLgotICAvLyBUaGlzIG9wdGltaXplcyB0aGUgUGVybUdlbiBzcGFjZSB1c2FnZSBmb3Ig
Y2xpZW50cyB0aGF0IGRvIG5vdCBtb2RpZnkKLSAgLy8gbWVzc2FnZXMuCi0gIHByaW50ZXItPlBy
aW50KAotICAgICIvLyBVc2UgJGNsYXNzbmFtZSQubmV3QnVpbGRlcigpIHRvIGNvbnN0cnVjdC5c
biIKLSAgICAicHJpdmF0ZSAkY2xhc3NuYW1lJCgkYnVpbGRlcnR5cGUkIGJ1aWxkZXIpIHtcbiIK
LSAgICAiICBzdXBlcihidWlsZGVyKTtcbiIKLSAgICAifVxuIiwKLSAgICAiY2xhc3NuYW1lIiwg
ZGVzY3JpcHRvcl8tPm5hbWUoKSwKLSAgICAiYnVpbGRlcnR5cGUiLCBidWlsZGVyX3R5cGUpOwot
ICBwcmludGVyLT5QcmludCgKLSAgICAicHJpdmF0ZSAkY2xhc3NuYW1lJCgpIHtcbiIsCi0gICAg
ImNsYXNzbmFtZSIsIGRlc2NyaXB0b3JfLT5uYW1lKCkpOwotICBwcmludGVyLT5JbmRlbnQoKTsK
LSAgR2VuZXJhdGVJbml0aWFsaXplcnMocHJpbnRlcik7Ci0gIHByaW50ZXItPk91dGRlbnQoKTsK
LSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIn1cbiIKLSAgICAiXG4iKTsKLQotICBwcmludGVyLT5Q
cmludCgKLSAgICAiQGphdmEubGFuZy5PdmVycmlkZVxuIgotICAgICJwdWJsaWMgZmluYWwgY29t
Lmdvb2dsZS5wcm90b2J1Zi5Vbmtub3duRmllbGRTZXRcbiIKLSAgICAiZ2V0VW5rbm93bkZpZWxk
cygpIHtcbiIpOwotICBpZiAoUHJlc2VydmVVbmtub3duRmllbGRzKGRlc2NyaXB0b3JfKSkgewot
ICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiAgcmV0dXJuIHRoaXMudW5rbm93bkZpZWxkcztc
biIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiAgcmV0dXJuIGNv
bS5nb29nbGUucHJvdG9idWYuVW5rbm93bkZpZWxkU2V0LmdldERlZmF1bHRJbnN0YW5jZSgpO1xu
Iik7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIn1cbiIpOwotCi0gIGlmIChjb250ZXh0
Xy0+SGFzR2VuZXJhdGVkTWV0aG9kcyhkZXNjcmlwdG9yXykpIHsKLSAgICBHZW5lcmF0ZVBhcnNp
bmdDb25zdHJ1Y3RvcihwcmludGVyKTsKLSAgfQotCi0gIEdlbmVyYXRlRGVzY3JpcHRvck1ldGhv
ZHMocHJpbnRlcik7Ci0KLSAgLy8gTmVzdGVkIHR5cGVzCi0gIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGVzY3JpcHRvcl8tPmVudW1fdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBFbnVtR2VuZXJhdG9y
KGRlc2NyaXB0b3JfLT5lbnVtX3R5cGUoaSksIHRydWUsIGNvbnRleHRfKQotICAgICAgICAuR2Vu
ZXJhdGUocHJpbnRlcik7Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3Jf
LT5uZXN0ZWRfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAvLyBEb24ndCBnZW5lcmF0ZSBKYXZh
IGNsYXNzZXMgZm9yIG1hcCBlbnRyeSBtZXNzYWdlcy4KLSAgICBpZiAoSXNNYXBFbnRyeShkZXNj
cmlwdG9yXy0+bmVzdGVkX3R5cGUoaSkpKSBjb250aW51ZTsKLSAgICBJbW11dGFibGVNZXNzYWdl
R2VuZXJhdG9yIG1lc3NhZ2VHZW5lcmF0b3IoCi0gICAgICAgIGRlc2NyaXB0b3JfLT5uZXN0ZWRf
dHlwZShpKSwgY29udGV4dF8pOwotICAgIG1lc3NhZ2VHZW5lcmF0b3IuR2VuZXJhdGVJbnRlcmZh
Y2UocHJpbnRlcik7Ci0gICAgbWVzc2FnZUdlbmVyYXRvci5HZW5lcmF0ZShwcmludGVyKTsKLSAg
fQotCi0gIGlmIChHZW5lcmF0ZUhhc0JpdHMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgLy8gSW50ZWdl
cnMgZm9yIGJpdCBmaWVsZHMuCi0gICAgaW50IHRvdGFsQml0cyA9IDA7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgICB0b3Rh
bEJpdHMgKz0gZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGRlc2NyaXB0b3JfLT5maWVsZChpKSkKLSAg
ICAgICAgICAuR2V0TnVtQml0c0Zvck1lc3NhZ2UoKTsKLSAgICB9Ci0gICAgaW50IHRvdGFsSW50
cyA9ICh0b3RhbEJpdHMgKyAzMSkgLyAzMjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFs
SW50czsgaSsrKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgicHJpdmF0ZSBpbnQgJGJpdF9maWVs
ZF9uYW1lJDtcbiIsCi0gICAgICAgICJiaXRfZmllbGRfbmFtZSIsIEdldEJpdEZpZWxkTmFtZShp
KSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gb25lb2YKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJz
OwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7
IGkrKykgewotICAgIHZhcnNbIm9uZW9mX25hbWUiXSA9IGNvbnRleHRfLT5HZXRPbmVvZkdlbmVy
YXRvckluZm8oCi0gICAgICAgIGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpKS0+bmFtZTsKLSAg
ICB2YXJzWyJvbmVvZl9jYXBpdGFsaXplZF9uYW1lIl0gPSBjb250ZXh0Xy0+R2V0T25lb2ZHZW5l
cmF0b3JJbmZvKAotICAgICAgICBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKSktPmNhcGl0YWxp
emVkX25hbWU7Ci0gICAgdmFyc1sib25lb2ZfaW5kZXgiXSA9IFNpbXBsZUl0b2EoZGVzY3JpcHRv
cl8tPm9uZW9mX2RlY2woaSktPmluZGV4KCkpOwotICAgIC8vIG9uZW9mQ2FzZV8gYW5kIG9uZW9m
XwotICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAicHJpdmF0ZSBpbnQgJG9uZW9mX25h
bWUkQ2FzZV8gPSAwO1xuIgotICAgICAgInByaXZhdGUgamF2YS5sYW5nLk9iamVjdCAkb25lb2Zf
bmFtZSRfO1xuIik7Ci0gICAgLy8gT25lb2ZDYXNlIGVudW0KLSAgICBwcmludGVyLT5QcmludCh2
YXJzLAotICAgICAgInB1YmxpYyBlbnVtICRvbmVvZl9jYXBpdGFsaXplZF9uYW1lJENhc2VcbiIK
LSAgICAgICIgICAgaW1wbGVtZW50cyBjb20uZ29vZ2xlLnByb3RvYnVmLkludGVybmFsLkVudW1M
aXRlIHtcbiIpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotICAgIGZvciAoaW50IGogPSAwOyBq
IDwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPmZpZWxkX2NvdW50KCk7IGorKykgewotICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNs
KGkpLT5maWVsZChqKTsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiJGZpZWxkX25h
bWUkKCRmaWVsZF9udW1iZXIkKSxcbiIsCi0gICAgICAgICJmaWVsZF9uYW1lIiwKLSAgICAgICAg
VG9VcHBlcihmaWVsZC0+bmFtZSgpKSwKLSAgICAgICAgImZpZWxkX251bWJlciIsCi0gICAgICAg
IFNpbXBsZUl0b2EoZmllbGQtPm51bWJlcigpKSk7Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50
KAotICAgICAgIiRjYXBfb25lb2ZfbmFtZSRfTk9UX1NFVCgwKTtcbiIsCi0gICAgICAiY2FwX29u
ZW9mX25hbWUiLAotICAgICAgVG9VcHBlcih2YXJzWyJvbmVvZl9uYW1lIl0pKTsKLSAgICBwcmlu
dGVyLT5QcmludCh2YXJzLAotICAgICAgInByaXZhdGUgZmluYWwgaW50IHZhbHVlO1xuIgotICAg
ICAgInByaXZhdGUgJG9uZW9mX2NhcGl0YWxpemVkX25hbWUkQ2FzZShpbnQgdmFsdWUpIHtcbiIK
LSAgICAgICIgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgICBwcmlu
dGVyLT5QcmludCh2YXJzLAotICAgICAgIi8qKlxuIgotICAgICAgIiAqIEBkZXByZWNhdGVkIFVz
ZSB7QGxpbmsgI2Zvck51bWJlcihpbnQpfSBpbnN0ZWFkLlxuIgotICAgICAgIiAqL1xuIgotICAg
ICAgIkBqYXZhLmxhbmcuRGVwcmVjYXRlZFxuIgotICAgICAgInB1YmxpYyBzdGF0aWMgJG9uZW9m
X2NhcGl0YWxpemVkX25hbWUkQ2FzZSB2YWx1ZU9mKGludCB2YWx1ZSkge1xuIgotICAgICAgIiAg
cmV0dXJuIGZvck51bWJlcih2YWx1ZSk7XG4iCi0gICAgICAifVxuIgotICAgICAgIlxuIgotICAg
ICAgInB1YmxpYyBzdGF0aWMgJG9uZW9mX2NhcGl0YWxpemVkX25hbWUkQ2FzZSBmb3JOdW1iZXIo
aW50IHZhbHVlKSB7XG4iCi0gICAgICAiICBzd2l0Y2ggKHZhbHVlKSB7XG4iKTsKLSAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVsZF9jb3VudCgp
OyBqKyspIHsKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9y
Xy0+b25lb2ZfZGVjbChpKS0+ZmllbGQoaik7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgIiAgICBjYXNlICRmaWVsZF9udW1iZXIkOiByZXR1cm4gJGZpZWxkX25hbWUkO1xuIiwKLSAg
ICAgICAgImZpZWxkX251bWJlciIsCi0gICAgICAgIFNpbXBsZUl0b2EoZmllbGQtPm51bWJlcigp
KSwKLSAgICAgICAgImZpZWxkX25hbWUiLAotICAgICAgICBUb1VwcGVyKGZpZWxkLT5uYW1lKCkp
KTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICAgIGNhc2UgMDogcmV0dXJu
ICRjYXBfb25lb2ZfbmFtZSRfTk9UX1NFVDtcbiIKLSAgICAgICIgICAgZGVmYXVsdDogcmV0dXJu
IG51bGw7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAifVxuIgotICAgICAgInB1YmxpYyBpbnQg
Z2V0TnVtYmVyKCkge1xuIgotICAgICAgIiAgcmV0dXJuIHRoaXMudmFsdWU7XG4iCi0gICAgICAi
fVxuIiwKLSAgICAgICJjYXBfb25lb2ZfbmFtZSIsIFRvVXBwZXIodmFyc1sib25lb2ZfbmFtZSJd
KSk7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KCJ9O1xuXG4i
KTsKLSAgICAvLyBvbmVvZkNhc2UoKQotICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAi
cHVibGljICRvbmVvZl9jYXBpdGFsaXplZF9uYW1lJENhc2VcbiIKLSAgICAgICJnZXQkb25lb2Zf
Y2FwaXRhbGl6ZWRfbmFtZSRDYXNlKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRvbmVvZl9jYXBp
dGFsaXplZF9uYW1lJENhc2UuZm9yTnVtYmVyKFxuIgotICAgICAgIiAgICAgICRvbmVvZl9uYW1l
JENhc2VfKTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiXG4iKTsKLSAgfQotCi0gIGlmIChJc0Fu
eU1lc3NhZ2UoZGVzY3JpcHRvcl8pKSB7Ci0gICAgR2VuZXJhdGVBbnlNZXRob2RzKHByaW50ZXIp
OwotICB9Ci0KLSAgLy8gRmllbGRzCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8t
PmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIHByaW50ZXItPlByaW50KCJwdWJsaWMgc3RhdGlj
IGZpbmFsIGludCAkY29uc3RhbnRfbmFtZSQgPSAkbnVtYmVyJDtcbiIsCi0gICAgICAiY29uc3Rh
bnRfbmFtZSIsIEZpZWxkQ29uc3RhbnROYW1lKGRlc2NyaXB0b3JfLT5maWVsZChpKSksCi0gICAg
ICAibnVtYmVyIiwgU2ltcGxlSXRvYShkZXNjcmlwdG9yXy0+ZmllbGQoaSktPm51bWJlcigpKSk7
Ci0gICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGRlc2NyaXB0b3JfLT5maWVsZChpKSkuR2VuZXJh
dGVNZW1iZXJzKHByaW50ZXIpOwotICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICB9Ci0KLSAg
aWYgKGNvbnRleHRfLT5IYXNHZW5lcmF0ZWRNZXRob2RzKGRlc2NyaXB0b3JfKSkgewotICAgIEdl
bmVyYXRlSXNJbml0aWFsaXplZChwcmludGVyKTsKLSAgICBHZW5lcmF0ZU1lc3NhZ2VTZXJpYWxp
emF0aW9uTWV0aG9kcyhwcmludGVyKTsKLSAgfQotCi0gIGlmIChIYXNFcXVhbHNBbmRIYXNoQ29k
ZShkZXNjcmlwdG9yXykpIHsKLSAgICBHZW5lcmF0ZUVxdWFsc0FuZEhhc2hDb2RlKHByaW50ZXIp
OwotICB9Ci0KLQotICBHZW5lcmF0ZVBhcnNlRnJvbU1ldGhvZHMocHJpbnRlcik7Ci0gIEdlbmVy
YXRlQnVpbGRlcihwcmludGVyKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiXG4iCi0gICAg
Ii8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTokZnVsbF9uYW1lJClcbiIs
Ci0gICAgImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3JfLT5mdWxsX25hbWUoKSk7Ci0KLQotICAvLyBD
YXJlZnVsbHkgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSBpbiBzdWNoIGEgd2F5IHRo
YXQgaXQgZG9lc24ndAotICAvLyBjb25mbGljdCB3aXRoIG90aGVyIGluaXRpYWxpemF0aW9uLgot
ICBwcmludGVyLT5QcmludCgKLSAgICAicHJpdmF0ZSBzdGF0aWMgZmluYWwgJGNsYXNzbmFtZSQg
REVGQVVMVF9JTlNUQU5DRTtcbiIsCi0gICAgImNsYXNzbmFtZSIsIG5hbWVfcmVzb2x2ZXJfLT5H
ZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgInN0YXRpYyB7XG4iCi0gICAgIiAgREVGQVVMVF9JTlNUQU5DRSA9IG5ldyAkY2xhc3NuYW1l
JCgpO1xuIgotICAgICJ9XG4iCi0gICAgIlxuIiwKLSAgICAiY2xhc3NuYW1lIiwgbmFtZV9yZXNv
bHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXykpOwotCi0gIHByaW50ZXIt
PlByaW50KAotICAgICAgInB1YmxpYyBzdGF0aWMgJGNsYXNzbmFtZSQgZ2V0RGVmYXVsdEluc3Rh
bmNlKCkge1xuIgotICAgICAgIiAgcmV0dXJuIERFRkFVTFRfSU5TVEFOQ0U7XG4iCi0gICAgICAi
fVxuIgotICAgICAgIlxuIiwKLSAgICAgICJjbGFzc25hbWUiLCBuYW1lX3Jlc29sdmVyXy0+R2V0
SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKSk7Ci0KLSAgR2VuZXJhdGVQYXJzZXIocHJp
bnRlcik7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInB1YmxpYyAkY2xhc3NuYW1lJCBnZXRE
ZWZhdWx0SW5zdGFuY2VGb3JUeXBlKCkge1xuIgotICAgICIgIHJldHVybiBERUZBVUxUX0lOU1RB
TkNFO1xuIgotICAgICJ9XG4iCi0gICAgIlxuIiwKLSAgICAiY2xhc3NuYW1lIiwgbmFtZV9yZXNv
bHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXykpOwotCi0gIC8vIEV4dGVu
c2lvbnMgbXVzdCBiZSBkZWNsYXJlZCBhZnRlciB0aGUgREVGQVVMVF9JTlNUQU5DRSBpcyBpbml0
aWFsaXplZAotICAvLyBiZWNhdXNlIHRoZSBERUZBVUxUX0lOU1RBTkNFIGlzIHVzZWQgYnkgdGhl
IGV4dGVuc2lvbiB0byBsYXppbHkgcmV0cmlldmUKLSAgLy8gdGhlIG91dGVyIGNsYXNzJ3MgRmls
ZURlc2NyaXB0b3IuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmV4dGVuc2lv
bl9jb3VudCgpOyBpKyspIHsKLSAgICBJbW11dGFibGVFeHRlbnNpb25HZW5lcmF0b3IoZGVzY3Jp
cHRvcl8tPmV4dGVuc2lvbihpKSwgY29udGV4dF8pCi0gICAgICAgIC5HZW5lcmF0ZShwcmludGVy
KTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1cblxu
Iik7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VHZW5lcmF0
b3I6OgotR2VuZXJhdGVNZXNzYWdlU2VyaWFsaXphdGlvbk1ldGhvZHMoaW86OlByaW50ZXIqIHBy
aW50ZXIpIHsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX2FycmF5PGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciAqID4gc29ydGVkX2ZpZWxkcygKLSAgICAgIFNvcnRGaWVsZHNCeU51bWJlcihkZXNj
cmlwdG9yXykpOwotCi0gIHZlY3Rvcjxjb25zdCBEZXNjcmlwdG9yOjpFeHRlbnNpb25SYW5nZSo+
IHNvcnRlZF9leHRlbnNpb25zOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5l
eHRlbnNpb25fcmFuZ2VfY291bnQoKTsgKytpKSB7Ci0gICAgc29ydGVkX2V4dGVuc2lvbnMucHVz
aF9iYWNrKGRlc2NyaXB0b3JfLT5leHRlbnNpb25fcmFuZ2UoaSkpOwotICB9Ci0gIHN0ZDo6c29y
dChzb3J0ZWRfZXh0ZW5zaW9ucy5iZWdpbigpLCBzb3J0ZWRfZXh0ZW5zaW9ucy5lbmQoKSwKLSAg
ICAgICAgICAgIEV4dGVuc2lvblJhbmdlT3JkZXJpbmcoKSk7Ci0KLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgInB1YmxpYyB2b2lkIHdyaXRlVG8oY29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1
dFN0cmVhbSBvdXRwdXQpXG4iCi0gICAgIiAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEu
aW8uSU9FeGNlcHRpb24ge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotICBpZiAoSGFzUGFj
a2VkRmllbGRzKGRlc2NyaXB0b3JfKSkgewotICAgIC8vIHdyaXRlVG8oQ29kZWRPdXRwdXRTdHJl
YW0gb3V0cHV0KSBtaWdodCBiZSBpbnZva2VkIHdpdGhvdXQKLSAgICAvLyBnZXRTZXJpYWxpemVk
U2l6ZSgpIGV2ZXIgYmVpbmcgY2FsbGVkLCBidXQgd2UgbmVlZCB0aGUgbWVtb2l6ZWQKLSAgICAv
LyBzaXplcyBpbiBjYXNlIHRoaXMgbWVzc2FnZSBoYXMgcGFja2VkIGZpZWxkcy4gUmF0aGVyIHRo
YW4gZW1pdCBjaGVja3MgZm9yCi0gICAgLy8gZWFjaCBwYWNrZWQgZmllbGQsIGp1c3QgY2FsbCBn
ZXRTZXJpYWxpemVkU2l6ZSgpIHVwIGZyb250LgotICAgIC8vIEluIG1vc3QgY2FzZXMsIGdldFNl
cmlhbGl6ZWRTaXplKCkgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYW55d2F5Ci0gICAg
Ly8gYnkgb25lIG9mIHRoZSB3cmFwcGVyIHdyaXRlVG8oKSBtZXRob2RzLCBtYWtpbmcgdGhpcyBj
YWxsIGNoZWFwLgotICAgIHByaW50ZXItPlByaW50KAotICAgICAgImdldFNlcmlhbGl6ZWRTaXpl
KCk7XG4iKTsKLSAgfQotCi0gIGlmIChkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50
KCkgPiAwKSB7Ci0gICAgaWYgKGRlc2NyaXB0b3JfLT5vcHRpb25zKCkubWVzc2FnZV9zZXRfd2ly
ZV9mb3JtYXQoKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJjb20uZ29vZ2xl
LnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VcbiIKLSAgICAgICAgIiAgLkV4dGVuZGFibGVNZXNz
YWdlPCRjbGFzc25hbWUkPi5FeHRlbnNpb25Xcml0ZXJcbiIKLSAgICAgICAgIiAgICBleHRlbnNp
b25Xcml0ZXIgPSBuZXdNZXNzYWdlU2V0RXh0ZW5zaW9uV3JpdGVyKCk7XG4iLAotICAgICAgICAi
Y2xhc3NuYW1lIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlw
dG9yXykpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImNv
bS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZVxuIgotICAgICAgICAiICAuRXh0ZW5k
YWJsZU1lc3NhZ2U8JGNsYXNzbmFtZSQ+LkV4dGVuc2lvbldyaXRlclxuIgotICAgICAgICAiICAg
IGV4dGVuc2lvbldyaXRlciA9IG5ld0V4dGVuc2lvbldyaXRlcigpO1xuIiwKLSAgICAgICAgImNs
YXNzbmFtZSIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRv
cl8pKTsKLSAgICB9Ci0gIH0KLQotICAvLyBNZXJnZSB0aGUgZmllbGRzIGFuZCB0aGUgZXh0ZW5z
aW9uIHJhbmdlcywgYm90aCBzb3J0ZWQgYnkgZmllbGQgbnVtYmVyLgotICBmb3IgKGludCBpID0g
MCwgaiA9IDA7Ci0gICAgICAgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpIHx8IGogPCBz
b3J0ZWRfZXh0ZW5zaW9ucy5zaXplKCk7Ci0gICAgICAgKSB7Ci0gICAgaWYgKGkgPT0gZGVzY3Jp
cHRvcl8tPmZpZWxkX2NvdW50KCkpIHsKLSAgICAgIEdlbmVyYXRlU2VyaWFsaXplT25lRXh0ZW5z
aW9uUmFuZ2UocHJpbnRlciwgc29ydGVkX2V4dGVuc2lvbnNbaisrXSk7Ci0gICAgfSBlbHNlIGlm
IChqID09IHNvcnRlZF9leHRlbnNpb25zLnNpemUoKSkgewotICAgICAgR2VuZXJhdGVTZXJpYWxp
emVPbmVGaWVsZChwcmludGVyLCBzb3J0ZWRfZmllbGRzW2krK10pOwotICAgIH0gZWxzZSBpZiAo
c29ydGVkX2ZpZWxkc1tpXS0+bnVtYmVyKCkgPCBzb3J0ZWRfZXh0ZW5zaW9uc1tqXS0+c3RhcnQp
IHsKLSAgICAgIEdlbmVyYXRlU2VyaWFsaXplT25lRmllbGQocHJpbnRlciwgc29ydGVkX2ZpZWxk
c1tpKytdKTsKLSAgICB9IGVsc2UgewotICAgICAgR2VuZXJhdGVTZXJpYWxpemVPbmVFeHRlbnNp
b25SYW5nZShwcmludGVyLCBzb3J0ZWRfZXh0ZW5zaW9uc1tqKytdKTsKLSAgICB9Ci0gIH0KLQot
ICBpZiAoUHJlc2VydmVVbmtub3duRmllbGRzKGRlc2NyaXB0b3JfKSkgewotICAgIGlmIChkZXNj
cmlwdG9yXy0+b3B0aW9ucygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICAgIHBy
aW50ZXItPlByaW50KAotICAgICAgICAidW5rbm93bkZpZWxkcy53cml0ZUFzTWVzc2FnZVNldFRv
KG91dHB1dCk7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICJ1bmtub3duRmllbGRzLndyaXRlVG8ob3V0cHV0KTtcbiIpOwotICAgIH0KLSAgfQotCi0g
IHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIn1cbiIKLSAgICAi
XG4iCi0gICAgInB1YmxpYyBpbnQgZ2V0U2VyaWFsaXplZFNpemUoKSB7XG4iCi0gICAgIiAgaW50
IHNpemUgPSBtZW1vaXplZFNpemU7XG4iCi0gICAgIiAgaWYgKHNpemUgIT0gLTEpIHJldHVybiBz
aXplO1xuIgotICAgICJcbiIKLSAgICAiICBzaXplID0gMDtcbiIpOwotICBwcmludGVyLT5JbmRl
bnQoKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgp
OyBpKyspIHsKLSAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoc29ydGVkX2ZpZWxkc1tpXSkuR2Vu
ZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUocHJpbnRlcik7Ci0gIH0KLQotICBpZiAoZGVzY3JpcHRv
cl8tPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgpID4gMCkgewotICAgIGlmIChkZXNjcmlwdG9yXy0+
b3B0aW9ucygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICAgIHByaW50ZXItPlBy
aW50KAotICAgICAgICAic2l6ZSArPSBleHRlbnNpb25zU2VyaWFsaXplZFNpemVBc01lc3NhZ2VT
ZXQoKTtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAg
InNpemUgKz0gZXh0ZW5zaW9uc1NlcmlhbGl6ZWRTaXplKCk7XG4iKTsKLSAgICB9Ci0gIH0KLQot
ICBpZiAoUHJlc2VydmVVbmtub3duRmllbGRzKGRlc2NyaXB0b3JfKSkgewotICAgIGlmIChkZXNj
cmlwdG9yXy0+b3B0aW9ucygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICAgIHBy
aW50ZXItPlByaW50KAotICAgICAgICAic2l6ZSArPSB1bmtub3duRmllbGRzLmdldFNlcmlhbGl6
ZWRTaXplQXNNZXNzYWdlU2V0KCk7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgICJzaXplICs9IHVua25vd25GaWVsZHMuZ2V0U2VyaWFsaXplZFNpemUo
KTtcbiIpOwotICAgIH0KLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+
UHJpbnQoCi0gICAgIiAgbWVtb2l6ZWRTaXplID0gc2l6ZTtcbiIKLSAgICAiICByZXR1cm4gc2l6
ZTtcbiIKLSAgICAifVxuIgotICAgICJcbiIpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICJw
cml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAwTDtcbiIpOwotfQot
Ci12b2lkIEltbXV0YWJsZU1lc3NhZ2VHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzZUZyb21NZXRo
b2RzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIC8vIE5vdGU6ICBUaGVzZSBhcmUgc2VwYXJh
dGUgZnJvbSBHZW5lcmF0ZU1lc3NhZ2VTZXJpYWxpemF0aW9uTWV0aG9kcygpCi0gIC8vICAgYmVj
YXVzZSB0aGV5IG5lZWQgdG8gYmUgZ2VuZXJhdGVkIGV2ZW4gZm9yIG1lc3NhZ2VzIHRoYXQgYXJl
IG9wdGltaXplZAotICAvLyAgIGZvciBjb2RlIHNpemUuCi0gIHByaW50ZXItPlByaW50KAotICAg
ICJwdWJsaWMgc3RhdGljICRjbGFzc25hbWUkIHBhcnNlRnJvbShcbiIKLSAgICAiICAgIGNvbS5n
b29nbGUucHJvdG9idWYuQnl0ZVN0cmluZyBkYXRhKVxuIgotICAgICIgICAgdGhyb3dzIGNvbS5n
b29nbGUucHJvdG9idWYuSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHtcbiIKLSAgICAi
ICByZXR1cm4gUEFSU0VSLnBhcnNlRnJvbShkYXRhKTtcbiIKLSAgICAifVxuIgotICAgICJwdWJs
aWMgc3RhdGljICRjbGFzc25hbWUkIHBhcnNlRnJvbShcbiIKLSAgICAiICAgIGNvbS5nb29nbGUu
cHJvdG9idWYuQnl0ZVN0cmluZyBkYXRhLFxuIgotICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1
Zi5FeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5zaW9uUmVnaXN0cnkpXG4iCi0gICAgIiAgICB0
aHJvd3MgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24g
e1xuIgotICAgICIgIHJldHVybiBQQVJTRVIucGFyc2VGcm9tKGRhdGEsIGV4dGVuc2lvblJlZ2lz
dHJ5KTtcbiIKLSAgICAifVxuIgotICAgICJwdWJsaWMgc3RhdGljICRjbGFzc25hbWUkIHBhcnNl
RnJvbShieXRlW10gZGF0YSlcbiIKLSAgICAiICAgIHRocm93cyBjb20uZ29vZ2xlLnByb3RvYnVm
LkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbiB7XG4iCi0gICAgIiAgcmV0dXJuIFBBUlNF
Ui5wYXJzZUZyb20oZGF0YSk7XG4iCi0gICAgIn1cbiIKLSAgICAicHVibGljIHN0YXRpYyAkY2xh
c3NuYW1lJCBwYXJzZUZyb20oXG4iCi0gICAgIiAgICBieXRlW10gZGF0YSxcbiIKLSAgICAiICAg
IGNvbS5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lz
dHJ5KVxuIgotICAgICIgICAgdGhyb3dzIGNvbS5nb29nbGUucHJvdG9idWYuSW52YWxpZFByb3Rv
Y29sQnVmZmVyRXhjZXB0aW9uIHtcbiIKLSAgICAiICByZXR1cm4gUEFSU0VSLnBhcnNlRnJvbShk
YXRhLCBleHRlbnNpb25SZWdpc3RyeSk7XG4iCi0gICAgIn1cbiIKLSAgICAicHVibGljIHN0YXRp
YyAkY2xhc3NuYW1lJCBwYXJzZUZyb20oamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dClcbiIKLSAg
ICAiICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHtcbiIKLSAgICAiICByZXR1cm4gY29t
Lmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlXG4iCi0gICAgIiAgICAgIC5wYXJzZVdp
dGhJT0V4Y2VwdGlvbihQQVJTRVIsIGlucHV0KTtcbiIKLSAgICAifVxuIgotICAgICJwdWJsaWMg
c3RhdGljICRjbGFzc25hbWUkIHBhcnNlRnJvbShcbiIKLSAgICAiICAgIGphdmEuaW8uSW5wdXRT
dHJlYW0gaW5wdXQsXG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJl
Z2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSlcbiIKLSAgICAiICAgIHRocm93cyBqYXZhLmlv
LklPRXhjZXB0aW9uIHtcbiIKLSAgICAiICByZXR1cm4gY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5l
cmF0ZWRNZXNzYWdlXG4iCi0gICAgIiAgICAgIC5wYXJzZVdpdGhJT0V4Y2VwdGlvbihQQVJTRVIs
IGlucHV0LCBleHRlbnNpb25SZWdpc3RyeSk7XG4iCi0gICAgIn1cbiIKLSAgICAicHVibGljIHN0
YXRpYyAkY2xhc3NuYW1lJCBwYXJzZURlbGltaXRlZEZyb20oamF2YS5pby5JbnB1dFN0cmVhbSBp
bnB1dClcbiIKLSAgICAiICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHtcbiIKLSAgICAi
ICByZXR1cm4gY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlXG4iCi0gICAgIiAg
ICAgIC5wYXJzZURlbGltaXRlZFdpdGhJT0V4Y2VwdGlvbihQQVJTRVIsIGlucHV0KTtcbiIKLSAg
ICAifVxuIgotICAgICJwdWJsaWMgc3RhdGljICRjbGFzc25hbWUkIHBhcnNlRGVsaW1pdGVkRnJv
bShcbiIKLSAgICAiICAgIGphdmEuaW8uSW5wdXRTdHJlYW0gaW5wdXQsXG4iCi0gICAgIiAgICBj
b20uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3Ry
eSlcbiIKLSAgICAiICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHtcbiIKLSAgICAiICBy
ZXR1cm4gY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlXG4iCi0gICAgIiAgICAg
IC5wYXJzZURlbGltaXRlZFdpdGhJT0V4Y2VwdGlvbihQQVJTRVIsIGlucHV0LCBleHRlbnNpb25S
ZWdpc3RyeSk7XG4iCi0gICAgIn1cbiIKLSAgICAicHVibGljIHN0YXRpYyAkY2xhc3NuYW1lJCBw
YXJzZUZyb20oXG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkNvZGVkSW5wdXRTdHJl
YW0gaW5wdXQpXG4iCi0gICAgIiAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7XG4iCi0g
ICAgIiAgcmV0dXJuIGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZVxuIgotICAg
ICIgICAgICAucGFyc2VXaXRoSU9FeGNlcHRpb24oUEFSU0VSLCBpbnB1dCk7XG4iCi0gICAgIn1c
biIKLSAgICAicHVibGljIHN0YXRpYyAkY2xhc3NuYW1lJCBwYXJzZUZyb20oXG4iCi0gICAgIiAg
ICBjb20uZ29vZ2xlLnByb3RvYnVmLkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQsXG4iCi0gICAgIiAg
ICBjb20uZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdp
c3RyeSlcbiIKLSAgICAiICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHtcbiIKLSAgICAi
ICByZXR1cm4gY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlXG4iCi0gICAgIiAg
ICAgIC5wYXJzZVdpdGhJT0V4Y2VwdGlvbihQQVJTRVIsIGlucHV0LCBleHRlbnNpb25SZWdpc3Ry
eSk7XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iLAotICAgICJjbGFzc25hbWUiLCBuYW1lX3Jlc29s
dmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKSk7Ci19Ci0KLXZvaWQgSW1t
dXRhYmxlTWVzc2FnZUdlbmVyYXRvcjo6R2VuZXJhdGVTZXJpYWxpemVPbmVGaWVsZCgKLSAgICBp
bzo6UHJpbnRlciogcHJpbnRlciwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBm
aWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpLkdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUocHJp
bnRlcik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZUdlbmVyYXRvcjo6R2VuZXJhdGVTZXJp
YWxpemVPbmVFeHRlbnNpb25SYW5nZSgKLSAgICBpbzo6UHJpbnRlciogcHJpbnRlciwgY29uc3Qg
RGVzY3JpcHRvcjo6RXh0ZW5zaW9uUmFuZ2UqIHJhbmdlKSB7Ci0gIHByaW50ZXItPlByaW50KAot
ICAgICJleHRlbnNpb25Xcml0ZXIud3JpdGVVbnRpbCgkZW5kJCwgb3V0cHV0KTtcbiIsCi0gICAg
ImVuZCIsIFNpbXBsZUl0b2EocmFuZ2UtPmVuZCkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXZv
aWQgSW1tdXRhYmxlTWVzc2FnZUdlbmVyYXRvcjo6R2VuZXJhdGVCdWlsZGVyKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIC8vIExJVEVfUlVOVElNRSBpbXBsZW1lbnRzIHRoaXMgYXQgdGhlIEdl
bmVyYXRlZE1lc3NhZ2VMaXRlIGxldmVsLgotICBwcmludGVyLT5QcmludCgKLSAgICAicHVibGlj
IEJ1aWxkZXIgbmV3QnVpbGRlckZvclR5cGUoKSB7IHJldHVybiBuZXdCdWlsZGVyKCk7IH1cbiIp
OwotCi0gIHByaW50ZXItPlByaW50KAotICAgICJwdWJsaWMgc3RhdGljIEJ1aWxkZXIgbmV3QnVp
bGRlcigpIHtcbiIKLSAgICAiICByZXR1cm4gREVGQVVMVF9JTlNUQU5DRS50b0J1aWxkZXIoKTtc
biIKLSAgICAifVxuIgotICAgICJwdWJsaWMgc3RhdGljIEJ1aWxkZXIgbmV3QnVpbGRlcigkY2xh
c3NuYW1lJCBwcm90b3R5cGUpIHtcbiIKLSAgICAiICByZXR1cm4gREVGQVVMVF9JTlNUQU5DRS50
b0J1aWxkZXIoKS5tZXJnZUZyb20ocHJvdG90eXBlKTtcbiIKLSAgICAifVxuIgotICAgICJwdWJs
aWMgQnVpbGRlciB0b0J1aWxkZXIoKSB7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXMgPT0gREVGQVVM
VF9JTlNUQU5DRVxuIgotICAgICIgICAgICA/IG5ldyBCdWlsZGVyKCkgOiBuZXcgQnVpbGRlcigp
Lm1lcmdlRnJvbSh0aGlzKTtcbiIKLSAgICAifVxuIgotICAgICJcbiIsCi0gICAgImNsYXNzbmFt
ZSIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pKTsK
LQotICBwcmludGVyLT5QcmludCgKLSAgICAiQGphdmEubGFuZy5PdmVycmlkZVxuIgotICAgICJw
cm90ZWN0ZWQgQnVpbGRlciBuZXdCdWlsZGVyRm9yVHlwZShcbiIKLSAgICAiICAgIGNvbS5nb29n
bGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyUGFyZW50IHBhcmVudCkge1xuIgot
ICAgICIgIEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBCdWlsZGVyKHBhcmVudCk7XG4iCi0gICAgIiAg
cmV0dXJuIGJ1aWxkZXI7XG4iCi0gICAgIn1cbiIpOwotCi0gIE1lc3NhZ2VCdWlsZGVyR2VuZXJh
dG9yIGJ1aWxkZXJHZW5lcmF0b3IoZGVzY3JpcHRvcl8sIGNvbnRleHRfKTsKLSAgYnVpbGRlckdl
bmVyYXRvci5HZW5lcmF0ZShwcmludGVyKTsKLX0KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlR2Vu
ZXJhdG9yOjoKLUdlbmVyYXRlRGVzY3JpcHRvck1ldGhvZHMoaW86OlByaW50ZXIqIHByaW50ZXIp
IHsKLSAgaWYgKCFkZXNjcmlwdG9yXy0+b3B0aW9ucygpLm5vX3N0YW5kYXJkX2Rlc2NyaXB0b3Jf
YWNjZXNzb3IoKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgInB1YmxpYyBzdGF0aWMg
ZmluYWwgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5EZXNjcmlwdG9yXG4iCi0gICAg
ICAiICAgIGdldERlc2NyaXB0b3IoKSB7XG4iCi0gICAgICAiICByZXR1cm4gJGZpbGVjbGFzcyQu
aW50ZXJuYWxfJGlkZW50aWZpZXIkX2Rlc2NyaXB0b3I7XG4iCi0gICAgICAifVxuIgotICAgICAg
IlxuIiwKLSAgICAgICJmaWxlY2xhc3MiLCBuYW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xh
c3NOYW1lKGRlc2NyaXB0b3JfLT5maWxlKCkpLAotICAgICAgImlkZW50aWZpZXIiLCBVbmlxdWVG
aWxlU2NvcGVJZGVudGlmaWVyKGRlc2NyaXB0b3JfKSk7Ci0gIH0KLSAgdmVjdG9yPGNvbnN0IEZp
ZWxkRGVzY3JpcHRvcio+IG1hcF9maWVsZHM7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3Jp
cHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQgPSBkZXNjcmlwdG9yXy0+ZmllbGQoaSk7Ci0gICAgaWYgKEdldEphdmFUeXBlKGZpZWxk
KSA9PSBKQVZBVFlQRV9NRVNTQUdFICYmCi0gICAgICAgIElzTWFwRW50cnkoZmllbGQtPm1lc3Nh
Z2VfdHlwZSgpKSkgewotICAgICAgbWFwX2ZpZWxkcy5wdXNoX2JhY2soZmllbGQpOwotICAgIH0K
LSAgfQotICBpZiAoIW1hcF9maWVsZHMuZW1wdHkoKSkgewotICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgIkBTdXBwcmVzc1dhcm5pbmdzKHtcInJhd3R5cGVzXCJ9KVxuIgotICAgICAgInByb3Rl
Y3RlZCBjb20uZ29vZ2xlLnByb3RvYnVmLk1hcEZpZWxkIGludGVybmFsR2V0TWFwRmllbGQoXG4i
Ci0gICAgICAiICAgIGludCBudW1iZXIpIHtcbiIKLSAgICAgICIgIHN3aXRjaCAobnVtYmVyKSB7
XG4iKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1hcF9maWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBtYXBfZmllbGRzW2ldOwotICAgICAgY29uc3Qg
RmllbGRHZW5lcmF0b3JJbmZvKiBpbmZvID0gY29udGV4dF8tPkdldEZpZWxkR2VuZXJhdG9ySW5m
byhmaWVsZCk7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImNhc2UgJG51bWJlciQ6
XG4iCi0gICAgICAgICIgIHJldHVybiBpbnRlcm5hbEdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xu
IiwKLSAgICAgICAgIm51bWJlciIsIFNpbXBsZUl0b2EoZmllbGQtPm51bWJlcigpKSwKLSAgICAg
ICAgImNhcGl0YWxpemVkX25hbWUiLCBpbmZvLT5jYXBpdGFsaXplZF9uYW1lKTsKLSAgICB9Ci0g
ICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJkZWZhdWx0OlxuIgotICAgICAgICAiICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbihcbiIKLSAgICAgICAgIiAgICAgIFwiSW52YWxpZCBtYXAg
ZmllbGQgbnVtYmVyOiBcIiArIG51bWJlcik7XG4iKTsKLSAgICBwcmludGVyLT5PdXRkZW50KCk7
Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAi
ICB9XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCgKLSAgICAicHJv
dGVjdGVkIGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZS5GaWVsZEFjY2Vzc29y
VGFibGVcbiIKLSAgICAiICAgIGludGVybmFsR2V0RmllbGRBY2Nlc3NvclRhYmxlKCkge1xuIgot
ICAgICIgIHJldHVybiAkZmlsZWNsYXNzJC5pbnRlcm5hbF8kaWRlbnRpZmllciRfZmllbGRBY2Nl
c3NvclRhYmxlXG4iCi0gICAgIiAgICAgIC5lbnN1cmVGaWVsZEFjY2Vzc29yc0luaXRpYWxpemVk
KFxuIgotICAgICIgICAgICAgICAgJGNsYXNzbmFtZSQuY2xhc3MsICRjbGFzc25hbWUkLkJ1aWxk
ZXIuY2xhc3MpO1xuIgotICAgICJ9XG4iCi0gICAgIlxuIiwKLSAgICAiY2xhc3NuYW1lIiwgbmFt
ZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXyksCi0gICAgImZp
bGVjbGFzcyIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRv
cl8tPmZpbGUoKSksCi0gICAgImlkZW50aWZpZXIiLCBVbmlxdWVGaWxlU2NvcGVJZGVudGlmaWVy
KGRlc2NyaXB0b3JfKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotdm9pZCBJbW11dGFibGVNZXNz
YWdlR2VuZXJhdG9yOjpHZW5lcmF0ZUlzSW5pdGlhbGl6ZWQoCi0gICAgaW86OlByaW50ZXIqIHBy
aW50ZXIpIHsKLSAgLy8gTWVtb2l6ZXMgd2hldGhlciB0aGUgcHJvdG9jb2wgYnVmZmVyIGlzIGZ1
bGx5IGluaXRpYWxpemVkIChoYXMgYWxsCi0gIC8vIHJlcXVpcmVkIGZpZWxkcykuIC0xIG1lYW5z
IG5vdCB5ZXQgY29tcHV0ZWQuIDAgbWVhbnMgZmFsc2UgYW5kIDEgbWVhbnMKLSAgLy8gdHJ1ZS4K
LSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInByaXZhdGUgYnl0ZSBtZW1vaXplZElzSW5pdGlhbGl6
ZWQgPSAtMTtcbiIpOwotICBwcmludGVyLT5QcmludCgKLSAgICAicHVibGljIGZpbmFsIGJvb2xl
YW4gaXNJbml0aWFsaXplZCgpIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICAvLyBE
b24ndCBkaXJlY3RseSBjb21wYXJlIHRvIC0xIHRvIGF2b2lkIGFuIEFuZHJvaWQgeDg2IEpJVCBi
dWcuCi0gIHByaW50ZXItPlByaW50KAotICAgICJieXRlIGlzSW5pdGlhbGl6ZWQgPSBtZW1vaXpl
ZElzSW5pdGlhbGl6ZWQ7XG4iCi0gICAgImlmIChpc0luaXRpYWxpemVkID09IDEpIHJldHVybiB0
cnVlO1xuIgotICAgICJpZiAoaXNJbml0aWFsaXplZCA9PSAwKSByZXR1cm4gZmFsc2U7XG4iCi0g
ICAgIlxuIik7Ci0KLSAgLy8gQ2hlY2sgdGhhdCBhbGwgcmVxdWlyZWQgZmllbGRzIGluIHRoaXMg
bWVzc2FnZSBhcmUgc2V0LgotICAvLyBUT0RPKGtlbnRvbik6ICBXZSBjYW4gb3B0aW1pemUgdGhp
cyB3aGVuIHdlIHN3aXRjaCB0byBwdXR0aW5nIGFsbCB0aGUKLSAgLy8gICAiaGFzIiBmaWVsZHMg
aW50byBhIHNpbmdsZSBiaXRmaWVsZC4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9y
Xy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCA9IGRlc2NyaXB0b3JfLT5maWVsZChpKTsKLSAgICBjb25zdCBGaWVsZEdlbmVyYXRvckluZm8q
IGluZm8gPSBjb250ZXh0Xy0+R2V0RmllbGRHZW5lcmF0b3JJbmZvKGZpZWxkKTsKLQotICAgIGlm
IChmaWVsZC0+aXNfcmVxdWlyZWQoKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAg
ICJpZiAoIWhhcyRuYW1lJCgpKSB7XG4iCi0gICAgICAgICIgIG1lbW9pemVkSXNJbml0aWFsaXpl
ZCA9IDA7XG4iCi0gICAgICAgICIgIHJldHVybiBmYWxzZTtcbiIKLSAgICAgICAgIn1cbiIsCi0g
ICAgICAgICJuYW1lIiwgaW5mby0+Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gTm93IGNoZWNrIHRoYXQgYWxsIGVtYmVkZGVkIG1lc3NhZ2VzIGFyZSBpbml0aWFsaXplZC4K
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7
Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVsZChp
KTsKLSAgICBjb25zdCBGaWVsZEdlbmVyYXRvckluZm8qIGluZm8gPSBjb250ZXh0Xy0+R2V0Rmll
bGRHZW5lcmF0b3JJbmZvKGZpZWxkKTsKLSAgICBpZiAoR2V0SmF2YVR5cGUoZmllbGQpID09IEpB
VkFUWVBFX01FU1NBR0UgJiYKLSAgICAgICAgSGFzUmVxdWlyZWRGaWVsZHMoZmllbGQtPm1lc3Nh
Z2VfdHlwZSgpKSkgewotICAgICAgc3dpdGNoIChmaWVsZC0+bGFiZWwoKSkgewotICAgICAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfUkVRVUlSRUQ6Ci0gICAgICAgICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgICAgICAiaWYgKCFnZXQkbmFtZSQoKS5pc0luaXRpYWxpemVkKCkpIHtc
biIKLSAgICAgICAgICAgICAiICBtZW1vaXplZElzSW5pdGlhbGl6ZWQgPSAwO1xuIgotICAgICAg
ICAgICAgICIgIHJldHVybiBmYWxzZTtcbiIKLSAgICAgICAgICAgICAifVxuIiwKLSAgICAgICAg
ICAgICJ0eXBlIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZSgKLSAgICAg
ICAgICAgICAgICBmaWVsZC0+bWVzc2FnZV90eXBlKCkpLAotICAgICAgICAgICAgIm5hbWUiLCBp
bmZvLT5jYXBpdGFsaXplZF9uYW1lKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OkxBQkVMX09QVElPTkFMOgotICAgICAgICAgIGlmICghU3VwcG9ydEZp
ZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkgJiYKLSAgICAgICAgICAgICAgZmllbGQt
PmNvbnRhaW5pbmdfb25lb2YoKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjb25zdCBPbmVvZkRl
c2NyaXB0b3IqIG9uZW9mID0gZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKTsKLSAgICAgICAgICAg
IGNvbnN0IE9uZW9mR2VuZXJhdG9ySW5mbyogb25lb2ZfaW5mbyA9Ci0gICAgICAgICAgICAgICAg
Y29udGV4dF8tPkdldE9uZW9mR2VuZXJhdG9ySW5mbyhvbmVvZik7Ci0gICAgICAgICAgICBwcmlu
dGVyLT5QcmludCgKLSAgICAgICAgICAgICAgImlmICgkb25lb2ZfbmFtZSRDYXNlXyA9PSAkZmll
bGRfbnVtYmVyJCkge1xuIiwKLSAgICAgICAgICAgICAgIm9uZW9mX25hbWUiLCBvbmVvZl9pbmZv
LT5uYW1lLAotICAgICAgICAgICAgICAiZmllbGRfbnVtYmVyIiwgU2ltcGxlSXRvYShmaWVsZC0+
bnVtYmVyKCkpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgICAgICAgICJpZiAoaGFzJG5hbWUkKCkpIHtcbiIsCi0gICAgICAgICAgICAg
ICJuYW1lIiwgaW5mby0+Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0gICAgICAgICAgfQotICAgICAgICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICAgICAgIiAgaWYgKCFnZXQkbmFtZSQoKS5pc0luaXRp
YWxpemVkKCkpIHtcbiIKLSAgICAgICAgICAgICIgICAgbWVtb2l6ZWRJc0luaXRpYWxpemVkID0g
MDtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIGZhbHNlO1xuIgotICAgICAgICAgICAgIiAg
fVxuIgotICAgICAgICAgICAgIn1cbiIsCi0gICAgICAgICAgICAibmFtZSIsIGluZm8tPmNhcGl0
YWxpemVkX25hbWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6TEFCRUxfUkVQRUFURUQ6Ci0gICAgICAgICAgaWYgKElzTWFwRW50cnkoZmllbGQtPm1l
c3NhZ2VfdHlwZSgpKSkgewotICAgICAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAg
ICAgICJmb3IgKCR0eXBlJCBpdGVtIDogZ2V0JG5hbWUkKCkudmFsdWVzKCkpIHtcbiIKLSAgICAg
ICAgICAgICAgIiAgaWYgKCFpdGVtLmlzSW5pdGlhbGl6ZWQoKSkge1xuIgotICAgICAgICAgICAg
ICAiICAgIG1lbW9pemVkSXNJbml0aWFsaXplZCA9IDA7XG4iCi0gICAgICAgICAgICAgICIgICAg
cmV0dXJuIGZhbHNlO1xuIgotICAgICAgICAgICAgICAiICB9XG4iCi0gICAgICAgICAgICAgICJ9
XG4iLAotICAgICAgICAgICAgICAidHlwZSIsIE1hcFZhbHVlSW1tdXRhYmxlQ2xhc3NkTmFtZShm
aWVsZC0+bWVzc2FnZV90eXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWVfcmVzb2x2ZXJfKSwKLSAgICAgICAgICAgICAgIm5hbWUiLCBp
bmZvLT5jYXBpdGFsaXplZF9uYW1lKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgICAgICJmb3IgKGludCBpID0gMDsgaSA8IGdldCRu
YW1lJENvdW50KCk7IGkrKykge1xuIgotICAgICAgICAgICAgICAiICBpZiAoIWdldCRuYW1lJChp
KS5pc0luaXRpYWxpemVkKCkpIHtcbiIKLSAgICAgICAgICAgICAgIiAgICBtZW1vaXplZElzSW5p
dGlhbGl6ZWQgPSAwO1xuIgotICAgICAgICAgICAgICAiICAgIHJldHVybiBmYWxzZTtcbiIKLSAg
ICAgICAgICAgICAgIiAgfVxuIgotICAgICAgICAgICAgICAifVxuIiwKLSAgICAgICAgICAgICAg
InR5cGUiLCBuYW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKAotICAgICAgICAg
ICAgICAgICAgZmllbGQtPm1lc3NhZ2VfdHlwZSgpKSwKLSAgICAgICAgICAgICAgIm5hbWUiLCBp
bmZvLT5jYXBpdGFsaXplZF9uYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT5leHRlbnNpb25fcmFuZ2Vf
Y291bnQoKSA+IDApIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJpZiAoIWV4dGVuc2lv
bnNBcmVJbml0aWFsaXplZCgpKSB7XG4iCi0gICAgICAiICBtZW1vaXplZElzSW5pdGlhbGl6ZWQg
PSAwO1xuIgotICAgICAgIiAgcmV0dXJuIGZhbHNlO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0K
LSAgcHJpbnRlci0+T3V0ZGVudCgpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICIgIG1lbW9p
emVkSXNJbml0aWFsaXplZCA9IDE7XG4iKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiICBy
ZXR1cm4gdHJ1ZTtcbiIKLSAgICAifVxuIgotICAgICJcbiIpOwotfQotCi0vLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0KLW5hbWVzcGFjZSB7Ci1ib29sIENoZWNrSGFzQml0c0ZvckVxdWFsc0FuZEhhc2hDb2RlKGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgaWYgKGZpZWxkLT5pc19yZXBlYXRlZCgp
KSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShm
aWVsZC0+ZmlsZSgpKSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBHZXRKYXZh
VHlwZShmaWVsZCkgPT0gSkFWQVRZUEVfTUVTU0FHRSAmJgotICAgICAgZmllbGQtPmNvbnRhaW5p
bmdfb25lb2YoKSA9PSBOVUxMOwotfQotfSAgLy8gbmFtZXNwYWNlCi0KLXZvaWQgSW1tdXRhYmxl
TWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUVxdWFsc0FuZEhhc2hDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICJAamF2YS5sYW5nLk92ZXJyaWRl
XG4iCi0gICAgInB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBqYXZhLmxhbmcuT2JqZWN0IG9i
aikge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAi
aWYgKG9iaiA9PSB0aGlzKSB7XG4iCi0gICAgIiByZXR1cm4gdHJ1ZTtcbiIKLSAgICAifVxuIgot
ICAgICJpZiAoIShvYmogaW5zdGFuY2VvZiAkY2xhc3NuYW1lJCkpIHtcbiIKLSAgICAiICByZXR1
cm4gc3VwZXIuZXF1YWxzKG9iaik7XG4iCi0gICAgIn1cbiIKLSAgICAiJGNsYXNzbmFtZSQgb3Ro
ZXIgPSAoJGNsYXNzbmFtZSQpIG9iajtcbiIKLSAgICAiXG4iLAotICAgICJjbGFzc25hbWUiLCBu
YW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKSk7Ci0KLSAg
cHJpbnRlci0+UHJpbnQoImJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTtcbiIpOwotICBmb3IgKGludCBp
ID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotICAgIGlmIChm
aWVsZC0+Y29udGFpbmluZ19vbmVvZigpID09IE5VTEwpIHsKLSAgICAgIGNvbnN0IEZpZWxkR2Vu
ZXJhdG9ySW5mbyogaW5mbyA9IGNvbnRleHRfLT5HZXRGaWVsZEdlbmVyYXRvckluZm8oZmllbGQp
OwotICAgICAgYm9vbCBjaGVja19oYXNfYml0cyA9IENoZWNrSGFzQml0c0ZvckVxdWFsc0FuZEhh
c2hDb2RlKGZpZWxkKTsKLSAgICAgIGlmIChjaGVja19oYXNfYml0cykgewotICAgICAgICBwcmlu
dGVyLT5QcmludCgKLSAgICAgICAgICAicmVzdWx0ID0gcmVzdWx0ICYmIChoYXMkbmFtZSQoKSA9
PSBvdGhlci5oYXMkbmFtZSQoKSk7XG4iCi0gICAgICAgICAgImlmIChoYXMkbmFtZSQoKSkge1xu
IiwKLSAgICAgICAgICAibmFtZSIsIGluZm8tPmNhcGl0YWxpemVkX25hbWUpOwotICAgICAgICBw
cmludGVyLT5JbmRlbnQoKTsKLSAgICAgIH0KLSAgICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChm
aWVsZCkuR2VuZXJhdGVFcXVhbHNDb2RlKHByaW50ZXIpOwotICAgICAgaWYgKGNoZWNrX2hhc19i
aXRzKSB7Ci0gICAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgICAgIn1cbiIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIENvbXBh
cmUgb25lb2ZzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNs
X2NvdW50KCk7IGkrKykgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgInJlc3VsdCA9IHJl
c3VsdCAmJiBnZXQkb25lb2ZfY2FwaXRhbGl6ZWRfbmFtZSRDYXNlKCkuZXF1YWxzKFxuIgotICAg
ICAgIiAgICBvdGhlci5nZXQkb25lb2ZfY2FwaXRhbGl6ZWRfbmFtZSRDYXNlKCkpO1xuIiwKLSAg
ICAgICJvbmVvZl9jYXBpdGFsaXplZF9uYW1lIiwKLSAgICAgIGNvbnRleHRfLT5HZXRPbmVvZkdl
bmVyYXRvckluZm8oCi0gICAgICAgICAgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSkpLT5jYXBp
dGFsaXplZF9uYW1lKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJpZiAoIXJlc3VsdCkg
cmV0dXJuIGZhbHNlO1xuIgotICAgICAgInN3aXRjaCAoJG9uZW9mX25hbWUkQ2FzZV8pIHtcbiIs
Ci0gICAgICAib25lb2ZfbmFtZSIsCi0gICAgICBjb250ZXh0Xy0+R2V0T25lb2ZHZW5lcmF0b3JJ
bmZvKAotICAgICAgICAgIGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpKS0+bmFtZSk7Ci0gICAg
cHJpbnRlci0+SW5kZW50KCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXNjcmlwdG9yXy0+
b25lb2ZfZGVjbChpKS0+ZmllbGRfY291bnQoKTsgaisrKSB7Ci0gICAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPmZpZWxkKGopOwot
ICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJjYXNlICRmaWVsZF9udW1iZXIkOlxuIiwK
LSAgICAgICAgImZpZWxkX251bWJlciIsCi0gICAgICAgIFNpbXBsZUl0b2EoZmllbGQtPm51bWJl
cigpKSk7Ci0gICAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICAgIGZpZWxkX2dlbmVyYXRvcnNf
LmdldChmaWVsZCkuR2VuZXJhdGVFcXVhbHNDb2RlKHByaW50ZXIpOwotICAgICAgcHJpbnRlci0+
UHJpbnQoImJyZWFrO1xuIik7Ci0gICAgICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgfQotICAg
IHByaW50ZXItPlByaW50KAotICAgICAgImNhc2UgMDpcbiIKLSAgICAgICJkZWZhdWx0OlxuIik7
Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KCJ9XG4iKTsKLSAg
fQotCi0gIGlmIChQcmVzZXJ2ZVVua25vd25GaWVsZHMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgLy8g
QWx3YXlzIGNvbnNpZGVyIHVua25vd24gZmllbGRzIGZvciBlcXVhbGl0eS4gVGhpcyB3aWxsIHNv
bWV0aW1lcyByZXR1cm4KLSAgICAvLyBmYWxzZSBmb3Igbm9uLWNhbm9uaWNhbCBvcmRlcmluZyB3
aGVuIHJ1bm5pbmcgaW4gTElURV9SVU5USU1FIGJ1dCBpdCdzCi0gICAgLy8gdGhlIGJlc3Qgd2Ug
Y2FuIGRvLgotICAgIHByaW50ZXItPlByaW50KAotICAgICAgInJlc3VsdCA9IHJlc3VsdCAmJiB1
bmtub3duRmllbGRzLmVxdWFscyhvdGhlci51bmtub3duRmllbGRzKTtcbiIpOwotICB9Ci0gIGlm
IChkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCkgPiAwKSB7Ci0gICAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgICAicmVzdWx0ID0gcmVzdWx0ICYmXG4iCi0gICAgICAiICAgIGdldEV4
dGVuc2lvbkZpZWxkcygpLmVxdWFscyhvdGhlci5nZXRFeHRlbnNpb25GaWVsZHMoKSk7XG4iKTsK
LSAgfQotICBwcmludGVyLT5QcmludCgKLSAgICAicmV0dXJuIHJlc3VsdDtcbiIpOwotICBwcmlu
dGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICJ9XG4iCi0gICAgIlxuIik7
Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIkBqYXZhLmxhbmcuT3ZlcnJpZGVcbiIKLSAgICAi
cHVibGljIGludCBoYXNoQ29kZSgpIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLSAgcHJp
bnRlci0+UHJpbnQoCi0gICAgImlmIChtZW1vaXplZEhhc2hDb2RlICE9IDApIHtcbiIpOwotICBw
cmludGVyLT5JbmRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInJldHVybiBtZW1vaXpl
ZEhhc2hDb2RlO1xuIik7Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgIn1cbiIKLSAgICAiaW50IGhhc2ggPSA0MTtcbiIpOwotCi0gIHByaW50ZXItPlByaW50
KCJoYXNoID0gKDE5ICogaGFzaCkgKyBnZXREZXNjcmlwdG9yRm9yVHlwZSgpLmhhc2hDb2RlKCk7
XG4iKTsKLQotICAvLyBoYXNoQ29kZSBub24tb25lb2ZzLgotICBmb3IgKGludCBpID0gMDsgaSA8
IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotICAgIGlmIChmaWVsZC0+Y29u
dGFpbmluZ19vbmVvZigpID09IE5VTEwpIHsKLSAgICAgIGNvbnN0IEZpZWxkR2VuZXJhdG9ySW5m
byogaW5mbyA9IGNvbnRleHRfLT5HZXRGaWVsZEdlbmVyYXRvckluZm8oZmllbGQpOwotICAgICAg
Ym9vbCBjaGVja19oYXNfYml0cyA9IENoZWNrSGFzQml0c0ZvckVxdWFsc0FuZEhhc2hDb2RlKGZp
ZWxkKTsKLSAgICAgIGlmIChjaGVja19oYXNfYml0cykgewotICAgICAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICAgICAiaWYgKGhhcyRuYW1lJCgpKSB7XG4iLAotICAgICAgICAgICJuYW1lIiwg
aW5mby0+Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0gICAgICAgIHByaW50ZXItPkluZGVudCgpOwotICAg
ICAgfQotICAgICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZUhhc2hDb2Rl
KHByaW50ZXIpOwotICAgICAgaWYgKGNoZWNrX2hhc19iaXRzKSB7Ci0gICAgICAgIHByaW50ZXIt
Pk91dGRlbnQoKTsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIC8vIGhhc2hDb2RlIG9uZW9mcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBk
ZXNjcmlwdG9yXy0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJzd2l0Y2ggKCRvbmVvZl9uYW1lJENhc2VfKSB7XG4iLAotICAgICAgIm9uZW9m
X25hbWUiLAotICAgICAgY29udGV4dF8tPkdldE9uZW9mR2VuZXJhdG9ySW5mbygKLSAgICAgICAg
ICBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKSktPm5hbWUpOwotICAgIHByaW50ZXItPkluZGVu
dCgpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSkt
PmZpZWxkX2NvdW50KCk7IGorKykgewotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCA9IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVsZChqKTsKLSAgICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgICAiY2FzZSAkZmllbGRfbnVtYmVyJDpcbiIsCi0gICAgICAgICJmaWVs
ZF9udW1iZXIiLAotICAgICAgICBTaW1wbGVJdG9hKGZpZWxkLT5udW1iZXIoKSkpOwotICAgICAg
cHJpbnRlci0+SW5kZW50KCk7Ci0gICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpLkdl
bmVyYXRlSGFzaENvZGUocHJpbnRlcik7Ci0gICAgICBwcmludGVyLT5QcmludCgiYnJlYWs7XG4i
KTsKLSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAiY2FzZSAwOlxuIgotICAgICAgImRlZmF1bHQ6XG4iKTsKLSAgICBwcmludGVyLT5P
dXRkZW50KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotICB9Ci0KLSAgaWYgKGRlc2Ny
aXB0b3JfLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+IDApIHsKLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJoYXNoID0gaGFzaEZpZWxkcyhoYXNoLCBnZXRFeHRlbnNpb25GaWVsZHMoKSk7
XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICJoYXNoID0gKDI5ICogaGFzaCkg
KyB1bmtub3duRmllbGRzLmhhc2hDb2RlKCk7XG4iKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAg
Im1lbW9pemVkSGFzaENvZGUgPSBoYXNoO1xuIgotICAgICJyZXR1cm4gaGFzaDtcbiIpOwotICBw
cmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICJ9XG4iCi0gICAgIlxu
Iik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlR2VuZXJhdG9y
OjoKLUdlbmVyYXRlRXh0ZW5zaW9uUmVnaXN0cmF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRl
cikgewotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5leHRlbnNpb25fY291bnQo
KTsgaSsrKSB7Ci0gICAgSW1tdXRhYmxlRXh0ZW5zaW9uR2VuZXJhdG9yKGRlc2NyaXB0b3JfLT5l
eHRlbnNpb24oaSksIGNvbnRleHRfKQotICAgICAgLkdlbmVyYXRlUmVnaXN0cmF0aW9uQ29kZShw
cmludGVyKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm5lc3Rl
ZF90eXBlX2NvdW50KCk7IGkrKykgewotICAgIEltbXV0YWJsZU1lc3NhZ2VHZW5lcmF0b3IoZGVz
Y3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpLCBjb250ZXh0XykKLSAgICAgIC5HZW5lcmF0ZUV4dGVu
c2lvblJlZ2lzdHJhdGlvbkNvZGUocHJpbnRlcik7Ci0gIH0KLX0KLQotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
dm9pZCBJbW11dGFibGVNZXNzYWdlR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0NvbnN0cnVj
dG9yKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9h
cnJheTxjb25zdCBGaWVsZERlc2NyaXB0b3IgKiA+IHNvcnRlZF9maWVsZHMoCi0gICAgICBTb3J0
RmllbGRzQnlOdW1iZXIoZGVzY3JpcHRvcl8pKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAg
ICJwcml2YXRlICRjbGFzc25hbWUkKFxuIgotICAgICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVm
LkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQsXG4iCi0gICAgICAiICAgIGNvbS5nb29nbGUucHJvdG9i
dWYuRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KVxuIgotICAgICAgIiAg
ICB0aHJvd3MgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRp
b24ge1xuIiwKLSAgICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLSAgcHJp
bnRlci0+SW5kZW50KCk7Ci0KLSAgLy8gSW5pdGlhbGl6ZSBhbGwgZmllbGRzIHRvIGRlZmF1bHQu
Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgInRoaXMoKTtcbiIpOwotCi0gIC8vIFVzZSBidWls
ZGVyIGJpdHMgdG8gdHJhY2sgbXV0YWJsZSByZXBlYXRlZCBmaWVsZHMuCi0gIGludCB0b3RhbEJ1
aWxkZXJCaXRzID0gMDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRf
Y291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgSW1tdXRhYmxlRmllbGRHZW5lcmF0b3ImIGZpZWxk
ID0KLSAgICAgICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGRlc2NyaXB0b3JfLT5maWVsZChpKSk7
Ci0gICAgdG90YWxCdWlsZGVyQml0cyArPSBmaWVsZC5HZXROdW1CaXRzRm9yQnVpbGRlcigpOwot
ICB9Ci0gIGludCB0b3RhbEJ1aWxkZXJJbnRzID0gKHRvdGFsQnVpbGRlckJpdHMgKyAzMSkgLyAz
MjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ1aWxkZXJJbnRzOyBpKyspIHsKLSAgICBw
cmludGVyLT5QcmludCgiaW50IG11dGFibGVfJGJpdF9maWVsZF9uYW1lJCA9IDA7XG4iLAotICAg
ICAgImJpdF9maWVsZF9uYW1lIiwgR2V0Qml0RmllbGROYW1lKGkpKTsKLSAgfQotCi0gIGlmIChQ
cmVzZXJ2ZVVua25vd25GaWVsZHMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAiY29tLmdvb2dsZS5wcm90b2J1Zi5Vbmtub3duRmllbGRTZXQuQnVpbGRlciB1bmtu
b3duRmllbGRzID1cbiIKLSAgICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5Vbmtub3duRmll
bGRTZXQubmV3QnVpbGRlcigpO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAg
ICJ0cnkge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIHByaW50ZXItPlByaW50KAot
ICAgICJib29sZWFuIGRvbmUgPSBmYWxzZTtcbiIKLSAgICAid2hpbGUgKCFkb25lKSB7XG4iKTsK
LSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgImludCB0YWcg
PSBpbnB1dC5yZWFkVGFnKCk7XG4iCi0gICAgInN3aXRjaCAodGFnKSB7XG4iKTsKLSAgcHJpbnRl
ci0+SW5kZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgImNhc2UgMDpcbiIgICAgICAg
ICAgLy8gemVybyBzaWduYWxzIEVPRiAvIGxpbWl0IHJlYWNoZWQKLSAgICAiICBkb25lID0gdHJ1
ZTtcbiIKLSAgICAiICBicmVhaztcbiIpOwotCi0gIGlmIChQcmVzZXJ2ZVVua25vd25GaWVsZHMo
ZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiZGVmYXVsdDoge1xu
IgotICAgICAgIiAgaWYgKCFwYXJzZVVua25vd25GaWVsZChpbnB1dCwgdW5rbm93bkZpZWxkcyxc
biIKLSAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uUmVnaXN0cnksIHRh
ZykpIHtcbiIKLSAgICAgICIgICAgZG9uZSA9IHRydWU7XG4iICAvLyBpdCdzIGFuIGVuZGdyb3Vw
IHRhZwotICAgICAgIiAgfVxuIgotICAgICAgIiAgYnJlYWs7XG4iCi0gICAgICAifVxuIik7Ci0g
IH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiZGVmYXVsdDoge1xuIgotICAg
ICAgIiAgaWYgKCFpbnB1dC5za2lwRmllbGQodGFnKSkge1xuIgotICAgICAgIiAgICBkb25lID0g
dHJ1ZTtcbiIgIC8vIGl0J3MgYW4gZW5kZ3JvdXAgdGFnCi0gICAgICAiICB9XG4iKTsKLSAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICIgIGJyZWFrO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0K
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7
Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IHNvcnRlZF9maWVsZHNbaV07Ci0g
ICAgdWludDMyIHRhZyA9IFdpcmVGb3JtYXRMaXRlOjpNYWtlVGFnKGZpZWxkLT5udW1iZXIoKSwK
LSAgICAgIFdpcmVGb3JtYXQ6OldpcmVUeXBlRm9yRmllbGRUeXBlKGZpZWxkLT50eXBlKCkpKTsK
LQotICAgIHByaW50ZXItPlByaW50KAotICAgICAgImNhc2UgJHRhZyQ6IHtcbiIsCi0gICAgICAi
dGFnIiwgU2ltcGxlSXRvYSh0YWcpKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLQotICAgIGZp
ZWxkX2dlbmVyYXRvcnNfLmdldChmaWVsZCkuR2VuZXJhdGVQYXJzaW5nQ29kZShwcmludGVyKTsK
LQotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICIg
IGJyZWFrO1xuIgotICAgICAgIn1cbiIpOwotCi0gICAgaWYgKGZpZWxkLT5pc19wYWNrYWJsZSgp
KSB7Ci0gICAgICAvLyBUbyBtYWtlIHBhY2tlZCA9IHRydWUgd2lyZSBjb21wYXRpYmxlLCB3ZSBn
ZW5lcmF0ZSBwYXJzaW5nIGNvZGUgZnJvbSBhCi0gICAgICAvLyBwYWNrZWQgdmVyc2lvbiBvZiB0
aGlzIGZpZWxkIHJlZ2FyZGxlc3Mgb2YgZmllbGQtPm9wdGlvbnMoKS5wYWNrZWQoKS4KLSAgICAg
IHVpbnQzMiBwYWNrZWRfdGFnID0gV2lyZUZvcm1hdExpdGU6Ok1ha2VUYWcoZmllbGQtPm51bWJl
cigpLAotICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCk7
Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImNhc2UgJHRhZyQ6IHtcbiIsCi0gICAg
ICAgICJ0YWciLCBTaW1wbGVJdG9hKHBhY2tlZF90YWcpKTsKLSAgICAgIHByaW50ZXItPkluZGVu
dCgpOwotCi0gICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpLkdlbmVyYXRlUGFyc2lu
Z0NvZGVGcm9tUGFja2VkKHByaW50ZXIpOwotCi0gICAgICBwcmludGVyLT5PdXRkZW50KCk7Ci0g
ICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiAgYnJlYWs7XG4iCi0gICAgICAgICJ9XG4i
KTsKLSAgICB9Ci0gIH0KLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPk91dGRl
bnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICB9XG4iICAgICAvLyBzd2l0Y2ggKHRh
ZykKLSAgICAgICJ9XG4iKTsgICAgIC8vIHdoaWxlICghZG9uZSkKLQotICBwcmludGVyLT5PdXRk
ZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgIn0gY2F0Y2ggKGNvbS5nb29nbGUucHJv
dG9idWYuSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIGUpIHtcbiIKLSAgICAgICIgIHRo
cm93IGUuc2V0VW5maW5pc2hlZE1lc3NhZ2UodGhpcyk7XG4iCi0gICAgICAifSBjYXRjaCAoamF2
YS5pby5JT0V4Y2VwdGlvbiBlKSB7XG4iCi0gICAgICAiICB0aHJvdyBuZXcgY29tLmdvb2dsZS5w
cm90b2J1Zi5JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24oXG4iCi0gICAgICAiICAgICAg
ZSkuc2V0VW5maW5pc2hlZE1lc3NhZ2UodGhpcyk7XG4iCi0gICAgICAifSBmaW5hbGx5IHtcbiIp
OwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICAvLyBNYWtlIHJlcGVhdGVkIGZpZWxkIGxpc3Qg
aW1tdXRhYmxlLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3Vu
dCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gc29ydGVkX2Zp
ZWxkc1tpXTsKLSAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpLkdlbmVyYXRlUGFyc2lu
Z0RvbmVDb2RlKHByaW50ZXIpOwotICB9Ci0KLSAgaWYgKFByZXNlcnZlVW5rbm93bkZpZWxkcyhk
ZXNjcmlwdG9yXykpIHsKLSAgICAvLyBNYWtlIHVua25vd24gZmllbGRzIGltbXV0YWJsZS4KLSAg
ICBwcmludGVyLT5QcmludCgidGhpcy51bmtub3duRmllbGRzID0gdW5rbm93bkZpZWxkcy5idWls
ZCgpO1xuIik7Ci0gIH0KLQotICAvLyBNYWtlIGV4dGVuc2lvbnMgaW1tdXRhYmxlLgotICBwcmlu
dGVyLT5QcmludCgKLSAgICAgICJtYWtlRXh0ZW5zaW9uc0ltbXV0YWJsZSgpO1xuIik7Ci0KLSAg
cHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlBy
aW50KAotICAgICAgIiAgfVxuIiAgICAgLy8gZmluYWxseQotICAgICAgIn1cbiIpOwotfQotCi0v
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci12b2lkIEltbXV0YWJsZU1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlUGFy
c2VyKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgIiR2
aXNpYmlsaXR5JCBzdGF0aWMgZmluYWwgY29tLmdvb2dsZS5wcm90b2J1Zi5QYXJzZXI8JGNsYXNz
bmFtZSQ+XG4iCi0gICAgICAiICAgIFBBUlNFUiA9IG5ldyBjb20uZ29vZ2xlLnByb3RvYnVmLkFi
c3RyYWN0UGFyc2VyPCRjbGFzc25hbWUkPigpIHtcbiIsCi0gICAgICAidmlzaWJpbGl0eSIsCi0g
ICAgICBFeHBvc2VQdWJsaWNQYXJzZXIoZGVzY3JpcHRvcl8tPmZpbGUoKSkgPyAiQGphdmEubGFu
Zy5EZXByZWNhdGVkIHB1YmxpYyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6ICJwcml2YXRlIiwKLSAgICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+
bmFtZSgpKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAg
InB1YmxpYyAkY2xhc3NuYW1lJCBwYXJzZVBhcnRpYWxGcm9tKFxuIgotICAgICAgIiAgICBjb20u
Z29vZ2xlLnByb3RvYnVmLkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQsXG4iCi0gICAgICAiICAgIGNv
bS5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5
KVxuIgotICAgICAgIiAgICB0aHJvd3MgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnZhbGlkUHJvdG9j
b2xCdWZmZXJFeGNlcHRpb24ge1xuIiwKLSAgICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+
bmFtZSgpKTsKLSAgaWYgKGNvbnRleHRfLT5IYXNHZW5lcmF0ZWRNZXRob2RzKGRlc2NyaXB0b3Jf
KSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiICAgIHJldHVybiBuZXcgJGNsYXNz
bmFtZSQoaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KTtcbiIsCi0gICAgICAgICJjbGFzc25hbWUi
LCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBXaGVuIHBhcnNpbmcg
Y29uc3RydWN0b3IgaXNuJ3QgZ2VuZXJhdGVkLCB1c2UgYnVpbGRlciB0byBwYXJzZQotICAgIC8v
IG1lc3NhZ2VzLiBOb3RlLCB3aWxsIGZhbGxiYWNrIHRvIHVzZSByZWZsZWN0aW9uIGJhc2VkIG1l
cmdlRmllbGRGcm9tKCkKLSAgICAvLyBpbiBBYnN0cmFjdE1lc3NhZ2UuQnVpbGRlci4KLSAgICBw
cmludGVyLT5JbmRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIkJ1aWxkZXIg
YnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiIKLSAgICAgICAgInRyeSB7XG4iCi0gICAgICAgICIg
IGJ1aWxkZXIubWVyZ2VGcm9tKGlucHV0LCBleHRlbnNpb25SZWdpc3RyeSk7XG4iCi0gICAgICAg
ICJ9IGNhdGNoIChjb20uZ29vZ2xlLnByb3RvYnVmLkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbiBlKSB7XG4iCi0gICAgICAgICIgIHRocm93IGUuc2V0VW5maW5pc2hlZE1lc3NhZ2UoYnVp
bGRlci5idWlsZFBhcnRpYWwoKSk7XG4iCi0gICAgICAgICJ9IGNhdGNoIChqYXZhLmlvLklPRXhj
ZXB0aW9uIGUpIHtcbiIKLSAgICAgICAgIiAgdGhyb3cgbmV3IGNvbS5nb29nbGUucHJvdG9idWYu
SW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKFxuIgotICAgICAgICAiICAgICAgZS5nZXRN
ZXNzYWdlKCkpLnNldFVuZmluaXNoZWRNZXNzYWdlKFxuIgotICAgICAgICAiICAgICAgICAgIGJ1
aWxkZXIuYnVpbGRQYXJ0aWFsKCkpO1xuIgotICAgICAgICAifVxuIgotICAgICAgICAicmV0dXJu
IGJ1aWxkZXIuYnVpbGRQYXJ0aWFsKCk7XG4iKTsKLSAgICBwcmludGVyLT5PdXRkZW50KCk7Ci0g
IH0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJ9XG4iKTsKLSAgcHJpbnRlci0+T3V0ZGVu
dCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAgICJ9O1xuIgotICAgICAgIlxuIik7Ci0KLSAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAicHVibGljIHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVm
LlBhcnNlcjwkY2xhc3NuYW1lJD4gcGFyc2VyKCkge1xuIgotICAgICAgIiAgcmV0dXJuIFBBUlNF
UjtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiXG4iCi0gICAgICAiQGphdmEubGFuZy5PdmVycmlk
ZVxuIgotICAgICAgInB1YmxpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlBhcnNlcjwkY2xhc3NuYW1l
JD4gZ2V0UGFyc2VyRm9yVHlwZSgpIHtcbiIKLSAgICAgICIgIHJldHVybiBQQVJTRVI7XG4iCi0g
ICAgICAifVxuIgotICAgICAgIlxuIiwKLSAgICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+
bmFtZSgpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdm9pZCBJbW11dGFibGVNZXNzYWdlR2VuZXJh
dG9yOjpHZW5lcmF0ZUluaXRpYWxpemVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBmb3Ig
KGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBp
ZiAoIWRlc2NyaXB0b3JfLT5maWVsZChpKS0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgICBm
aWVsZF9nZW5lcmF0b3JzXy5nZXQoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKQotICAgICAgICAgIC5H
ZW5lcmF0ZUluaXRpYWxpemF0aW9uQ29kZShwcmludGVyKTsKLSAgICB9Ci0gIH0KLX0KLQotCi12
b2lkIEltbXV0YWJsZU1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlQW55TWV0aG9kcyhpbzo6UHJp
bnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICAicHJpdmF0ZSBzdGF0aWMg
U3RyaW5nIGdldFR5cGVVcmwoXG4iCi0gICAgIiAgICBqYXZhLmxhbmcuU3RyaW5nIHR5cGVVcmxQ
cmVmaXgsXG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkRlc2Ny
aXB0b3IgZGVzY3JpcHRvcikge1xuIgotICAgICIgIHJldHVybiB0eXBlVXJsUHJlZml4LmVuZHNX
aXRoKFwiL1wiKVxuIgotICAgICIgICAgICA/IHR5cGVVcmxQcmVmaXggKyBkZXNjcmlwdG9yLmdl
dEZ1bGxOYW1lKClcbiIKLSAgICAiICAgICAgOiB0eXBlVXJsUHJlZml4ICsgXCIvXCIgKyBkZXNj
cmlwdG9yLmdldEZ1bGxOYW1lKCk7XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iCi0gICAgInByaXZh
dGUgc3RhdGljIFN0cmluZyBnZXRUeXBlTmFtZUZyb21UeXBlVXJsKFxuIgotICAgICIgICAgamF2
YS5sYW5nLlN0cmluZyB0eXBlVXJsKSB7XG4iCi0gICAgIiAgaW50IHBvcyA9IHR5cGVVcmwubGFz
dEluZGV4T2YoJy8nKTtcbiIKLSAgICAiICByZXR1cm4gcG9zID09IC0xID8gXCJcIiA6IHR5cGVV
cmwuc3Vic3RyaW5nKHBvcyArIDEpO1xuIgotICAgICJ9XG4iCi0gICAgIlxuIgotICAgICJwdWJs
aWMgc3RhdGljIDxUIGV4dGVuZHMgY29tLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlPiBBbnkgcGFj
ayhcbiIKLSAgICAiICAgIFQgbWVzc2FnZSkge1xuIgotICAgICIgIHJldHVybiBBbnkubmV3QnVp
bGRlcigpXG4iCi0gICAgIiAgICAgIC5zZXRUeXBlVXJsKGdldFR5cGVVcmwoXCJ0eXBlLmdvb2ds
ZWFwaXMuY29tXCIsXG4iCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZS5nZXREZXNjcmlwdG9yRm9yVHlwZSgpKSlcbiIKLSAgICAiICAgICAgLnNldFZhbHVlKG1lc3Nh
Z2UudG9CeXRlU3RyaW5nKCkpXG4iCi0gICAgIiAgICAgIC5idWlsZCgpO1xuIgotICAgICJ9XG4i
Ci0gICAgIlxuIgotICAgICIvKipcbiIKLSAgICAiICogUGFja3MgYSBtZXNzYWdlIHVpc25nIHRo
ZSBnaXZlbiB0eXBlIFVSTCBwcmVmaXguIFRoZSB0eXBlIFVSTCB3aWxsXG4iCi0gICAgIiAqIGJl
IGNvbnN0cnVjdGVkIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIG1lc3NhZ2UgdHlwZSdzIGZ1bGwgbmFt
ZSB0byB0aGVcbiIKLSAgICAiICogcHJlZml4IHdpdGggYW4gb3B0aW9uYWwgXCIvXCIgc2VwYXJh
dG9yIGlmIHRoZSBwcmVmaXggZG9lc24ndCBlbmRcbiIKLSAgICAiICogd2l0aCBcIi9cIiBhbHJl
YWR5LlxuIgotICAgICIgKi9cbiIKLSAgICAicHVibGljIHN0YXRpYyA8VCBleHRlbmRzIGNvbS5n
b29nbGUucHJvdG9idWYuTWVzc2FnZT4gQW55IHBhY2soXG4iCi0gICAgIiAgICBUIG1lc3NhZ2Us
IGphdmEubGFuZy5TdHJpbmcgdHlwZVVybFByZWZpeCkge1xuIgotICAgICIgIHJldHVybiBBbnku
bmV3QnVpbGRlcigpXG4iCi0gICAgIiAgICAgIC5zZXRUeXBlVXJsKGdldFR5cGVVcmwodHlwZVVy
bFByZWZpeCxcbiIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmdl
dERlc2NyaXB0b3JGb3JUeXBlKCkpKVxuIgotICAgICIgICAgICAuc2V0VmFsdWUobWVzc2FnZS50
b0J5dGVTdHJpbmcoKSlcbiIKLSAgICAiICAgICAgLmJ1aWxkKCk7XG4iCi0gICAgIn1cbiIKLSAg
ICAiXG4iCi0gICAgInB1YmxpYyA8VCBleHRlbmRzIGNvbS5nb29nbGUucHJvdG9idWYuTWVzc2Fn
ZT4gYm9vbGVhbiBpcyhcbiIKLSAgICAiICAgIGphdmEubGFuZy5DbGFzczxUPiBjbGF6eikge1xu
IgotICAgICIgIFQgZGVmYXVsdEluc3RhbmNlID1cbiIKLSAgICAiICAgICAgY29tLmdvb2dsZS5w
cm90b2J1Zi5JbnRlcm5hbC5nZXREZWZhdWx0SW5zdGFuY2UoY2xhenopO1xuIgotICAgICIgIHJl
dHVybiBnZXRUeXBlTmFtZUZyb21UeXBlVXJsKGdldFR5cGVVcmwoKSkuZXF1YWxzKFxuIgotICAg
ICIgICAgICBkZWZhdWx0SW5zdGFuY2UuZ2V0RGVzY3JpcHRvckZvclR5cGUoKS5nZXRGdWxsTmFt
ZSgpKTtcbiIKLSAgICAifVxuIgotICAgICJcbiIKLSAgICAicHJpdmF0ZSB2b2xhdGlsZSBjb20u
Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2UgY2FjaGVkVW5wYWNrVmFsdWU7XG4iCi0gICAgIlxuIgot
ICAgICJwdWJsaWMgPFQgZXh0ZW5kcyBjb20uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2U+IFQgdW5w
YWNrKFxuIgotICAgICIgICAgamF2YS5sYW5nLkNsYXNzPFQ+IGNsYXp6KVxuIgotICAgICIgICAg
dGhyb3dzIGNvbS5nb29nbGUucHJvdG9idWYuSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9u
IHtcbiIKLSAgICAiICBpZiAoIWlzKGNsYXp6KSkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IGNv
bS5nb29nbGUucHJvdG9idWYuSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uKFxuIgotICAg
ICIgICAgICAgIFwiVHlwZSBvZiB0aGUgQW55IG1lc3NhZ2UgZG9lcyBub3QgbWF0Y2ggdGhlIGdp
dmVuIGNsYXNzLlwiKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgaWYgKGNhY2hlZFVucGFja1Zh
bHVlICE9IG51bGwpIHtcbiIKLSAgICAiICAgIHJldHVybiAoVCkgY2FjaGVkVW5wYWNrVmFsdWU7
XG4iCi0gICAgIiAgfVxuIgotICAgICIgIFQgZGVmYXVsdEluc3RhbmNlID1cbiIKLSAgICAiICAg
ICAgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5nZXREZWZhdWx0SW5zdGFuY2UoY2xhenop
O1xuIgotICAgICIgIFQgcmVzdWx0ID0gKFQpIGRlZmF1bHRJbnN0YW5jZS5nZXRQYXJzZXJGb3JU
eXBlKClcbiIKLSAgICAiICAgICAgLnBhcnNlRnJvbShnZXRWYWx1ZSgpKTtcbiIKLSAgICAiICBj
YWNoZWRVbnBhY2tWYWx1ZSA9IHJlc3VsdDtcbiIKLSAgICAiICByZXR1cm4gcmVzdWx0O1xuIgot
ICAgICJ9XG4iKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBj
b21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3Nh
Z2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWZjNTdjMjZhYWFhMWI0YWQwMTJjOWE5MTM5
YjVjNWZiNjUxYzljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAg
QmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkg
R2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9C
VUZfQ09NUElMRVJfSkFWQV9NRVNTQUdFX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09N
UElMRVJfSkFWQV9NRVNTQUdFX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPG1h
cD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2ZpZWxkLmg+
Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLSAgbmFtZXNwYWNl
IGNvbXBpbGVyIHsKLSAgICBuYW1lc3BhY2UgamF2YSB7Ci0gICAgICBjbGFzcyBDb250ZXh0OyAg
ICAgICAgICAgLy8gY29udGV4dC5oCi0gICAgICBjbGFzcyBDbGFzc05hbWVSZXNvbHZlcjsgLy8g
bmFtZV9yZXNvbHZlci5oCi0gICAgfQotICB9Ci0gIG5hbWVzcGFjZSBpbyB7Ci0gICAgY2xhc3Mg
UHJpbnRlcjsgICAgICAgICAgICAgLy8gcHJpbnRlci5oCi0gIH0KLX0KLQotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLXN0YXRp
YyBjb25zdCBpbnQga01heFN0YXRpY1NpemUgPSAxIDw8IDE1OyAgLy8gYWthIDMyawotCi1jbGFz
cyBNZXNzYWdlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IE1lc3NhZ2VHZW5lcmF0
b3IoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0gIHZpcnR1YWwgfk1lc3NhZ2VHZW5l
cmF0b3IoKTsKLQotICAvLyBBbGwgc3RhdGljIHZhcmlhYmxlcyBoYXZlIHRvIGJlIGRlY2xhcmVk
IGF0IHRoZSB0b3AtbGV2ZWwgb2YgdGhlIGZpbGUKLSAgLy8gc28gdGhhdCB3ZSBjYW4gY29udHJv
bCBpbml0aWFsaXphdGlvbiBvcmRlciwgd2hpY2ggaXMgaW1wb3J0YW50IGZvcgotICAvLyBEZXNj
cmlwdG9yUHJvdG8gYm9vdHN0cmFwcGluZyB0byB3b3JrLgotICB2aXJ0dWFsIHZvaWQgR2VuZXJh
dGVTdGF0aWNWYXJpYWJsZXMoCi0gICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwgaW50KiBieXRl
Y29kZV9lc3RpbWF0ZSkgPSAwOwotCi0gIC8vIE91dHB1dCBjb2RlIHdoaWNoIGluaXRpYWxpemVz
IHRoZSBzdGF0aWMgdmFyaWFibGVzIGdlbmVyYXRlZCBieQotICAvLyBHZW5lcmF0ZVN0YXRpY1Zh
cmlhYmxlcygpLiBSZXR1cm5zIGFuIGVzdGltYXRlIG9mIGJ5dGVjb2RlIHNpemUuCi0gIHZpcnR1
YWwgaW50IEdlbmVyYXRlU3RhdGljVmFyaWFibGVJbml0aWFsaXplcnMoaW86OlByaW50ZXIqIHBy
aW50ZXIpID0gMDsKLQotICAvLyBHZW5lcmF0ZSB0aGUgY2xhc3MgaXRzZWxmLgotICB2aXJ0dWFs
IHZvaWQgR2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIpID0gMDsKLQotICAvLyBHZW5lcmF0
ZXMgdGhlIGJhc2UgaW50ZXJmYWNlIHRoYXQgYm90aCB0aGUgY2xhc3MgYW5kIGl0cyBidWlsZGVy
IGltcGxlbWVudAotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVJbnRlcmZhY2UoaW86OlByaW50ZXIq
IHByaW50ZXIpID0gMDsKLQotICAvLyBHZW5lcmF0ZSBjb2RlIHRvIHJlZ2lzdGVyIGFsbCBjb250
YWluZWQgZXh0ZW5zaW9ucyB3aXRoIGFuCi0gIC8vIEV4dGVuc2lvblJlZ2lzdHJ5LgotICB2aXJ0
dWFsIHZvaWQgR2VuZXJhdGVFeHRlbnNpb25SZWdpc3RyYXRpb25Db2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSA9IDA7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0
b3JfOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE1l
c3NhZ2VHZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgSW1tdXRhYmxlTWVzc2FnZUdlbmVyYXRvciA6
IHB1YmxpYyBNZXNzYWdlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEltbXV0YWJs
ZU1lc3NhZ2VHZW5lcmF0b3IoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0KiBjb250ZXh0KTsKLSAgdmlydHVh
bCB+SW1tdXRhYmxlTWVzc2FnZUdlbmVyYXRvcigpOwotCi0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0
ZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZUludGVyZmFj
ZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZUV4dGVuc2lv
blJlZ2lzdHJhdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2aXJ0dWFsIHZvaWQg
R2VuZXJhdGVTdGF0aWNWYXJpYWJsZXMoCi0gICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwgaW50
KiBieXRlY29kZV9lc3RpbWF0ZSk7Ci0KLSAgLy8gUmV0dXJucyBhbiBlc3RpbWF0ZSBvZiB0aGUg
bnVtYmVyIG9mIGJ5dGVzIHRoZSBwcmludGVkIGNvZGUgd2lsbCBjb21waWxlIHRvCi0gIHZpcnR1
YWwgaW50IEdlbmVyYXRlU3RhdGljVmFyaWFibGVJbml0aWFsaXplcnMoaW86OlByaW50ZXIqIHBy
aW50ZXIpOwotCi0gcHJpdmF0ZToKLQotICB2b2lkIEdlbmVyYXRlRmllbGRBY2Nlc3NvclRhYmxl
KGlvOjpQcmludGVyKiBwcmludGVyLCBpbnQqIGJ5dGVjb2RlX2VzdGltYXRlKTsKLQotICAvLyBS
ZXR1cm5zIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIHByaW50ZWQgY29k
ZSB3aWxsIGNvbXBpbGUgdG8KLSAgaW50IEdlbmVyYXRlRmllbGRBY2Nlc3NvclRhYmxlSW5pdGlh
bGl6ZXIoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIHZvaWQgR2VuZXJhdGVNZXNzYWdlU2Vy
aWFsaXphdGlvbk1ldGhvZHMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRl
UGFyc2VGcm9tTWV0aG9kcyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVT
ZXJpYWxpemVPbmVGaWVsZChpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpOwotICB2b2lkIEdl
bmVyYXRlU2VyaWFsaXplT25lRXh0ZW5zaW9uUmFuZ2UoCi0gICAgICBpbzo6UHJpbnRlciogcHJp
bnRlciwgY29uc3QgRGVzY3JpcHRvcjo6RXh0ZW5zaW9uUmFuZ2UqIHJhbmdlKTsKLQotICB2b2lk
IEdlbmVyYXRlQnVpbGRlcihpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVJ
c0luaXRpYWxpemVkKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZURlc2Ny
aXB0b3JNZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZUluaXRp
YWxpemVycyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVFcXVhbHNBbmRI
YXNoQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzZXIoaW86
OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvbnN0cnVjdG9yKGlv
OjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZUFueU1ldGhvZHMoaW86OlByaW50
ZXIqIHByaW50ZXIpOwotCi0gIENvbnRleHQqIGNvbnRleHRfOwotICBDbGFzc05hbWVSZXNvbHZl
ciogbmFtZV9yZXNvbHZlcl87Ci0gIEZpZWxkR2VuZXJhdG9yTWFwPEltbXV0YWJsZUZpZWxkR2Vu
ZXJhdG9yPiBmaWVsZF9nZW5lcmF0b3JzXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05T
VFJVQ1RPUlMoSW1tdXRhYmxlTWVzc2FnZUdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBuYW1lc3Bh
Y2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9i
dWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZf
Q09NUElMRVJfSkFWQV9NRVNTQUdFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2J1aWxkZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfYnVpbGRlci5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjNlOWU5ODZjNDc4MjlmMTE3NjhjNTYwM2M1ZWVmMzVjNjU0MTdhNy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfYnVpbGRlci5jYworKysgL2Rldi9u
dWxsCkBAIC0xLDY2MiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotLy8gQXV0aG9yOiBkd2Vpc0Bnb29nbGUuY29tIChEYW5pZWwgV2VpcykKLS8vICBCYXNlZCBv
biBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdh
dCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2J1aWxkZXIuaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRo
bT4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oPgotI2luY2x1ZGUgPG1h
cD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dmVj
dG9yPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9jb250
ZXh0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2Nf
Y29tbWVudC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
ZW51bS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZXh0
ZW5zaW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9n
ZW5lcmF0b3JfZmFjdG9yeS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfbmFtZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9j
b2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3Vic3RpdHV0
ZS5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3Bh
Y2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1uYW1lc3BhY2UgewotYm9vbCBHZW5l
cmF0ZUhhc0JpdHMoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICByZXR1cm4gU3Vw
cG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvci0+ZmlsZSgpKSB8fAotICAgICAgSGFzUmVwZWF0
ZWRGaWVsZHMoZGVzY3JpcHRvcik7Ci19Ci0KLXN0cmluZyBNYXBWYWx1ZUltbXV0YWJsZUNsYXNz
ZE5hbWUoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXIpIHsKLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiB2YWx1ZV9maWVsZCA9IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5
TmFtZSgidmFsdWUiKTsKLSAgR09PR0xFX0NIRUNLX0VRKEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9N
RVNTQUdFLCB2YWx1ZV9maWVsZC0+dHlwZSgpKTsKLSAgcmV0dXJuIG5hbWVfcmVzb2x2ZXItPkdl
dEltbXV0YWJsZUNsYXNzTmFtZSh2YWx1ZV9maWVsZC0+bWVzc2FnZV90eXBlKCkpOwotfQotfSAg
Ly8gbmFtZXNwYWNlCi0KLU1lc3NhZ2VCdWlsZGVyR2VuZXJhdG9yOjpNZXNzYWdlQnVpbGRlckdl
bmVyYXRvcigKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBDb250ZXh0KiBjb250
ZXh0KQotICA6IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpLCBjb250ZXh0Xyhjb250ZXh0KSwKLSAg
ICBuYW1lX3Jlc29sdmVyXyhjb250ZXh0LT5HZXROYW1lUmVzb2x2ZXIoKSksCi0gICAgZmllbGRf
Z2VuZXJhdG9yc18oZGVzY3JpcHRvciwgY29udGV4dF8pIHsKLSAgR09PR0xFX0NIRUNLKEhhc0Rl
c2NyaXB0b3JNZXRob2RzKGRlc2NyaXB0b3ItPmZpbGUoKSwgY29udGV4dC0+RW5mb3JjZUxpdGUo
KSkpCi0gICAgICA8PCAiR2VuZXJhdG9yIGZhY3RvcnkgZXJyb3I6IEEgbm9uLWxpdGUgbWVzc2Fn
ZSBnZW5lcmF0b3IgaXMgdXNlZCB0byAiCi0gICAgICAgICAiZ2VuZXJhdGUgbGl0ZSBtZXNzYWdl
cy4iOwotfQotCi1NZXNzYWdlQnVpbGRlckdlbmVyYXRvcjo6fk1lc3NhZ2VCdWlsZGVyR2VuZXJh
dG9yKCkge30KLQotdm9pZCBNZXNzYWdlQnVpbGRlckdlbmVyYXRvcjo6Ci1HZW5lcmF0ZShpbzo6
UHJpbnRlciogcHJpbnRlcikgewotICBXcml0ZU1lc3NhZ2VEb2NDb21tZW50KHByaW50ZXIsIGRl
c2NyaXB0b3JfKTsKLSAgaWYgKGRlc2NyaXB0b3JfLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+
IDApIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFsIGNs
YXNzIEJ1aWxkZXIgZXh0ZW5kc1xuIgotICAgICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkdl
bmVyYXRlZE1lc3NhZ2UuRXh0ZW5kYWJsZUJ1aWxkZXI8XG4iCi0gICAgICAiICAgICAgJGNsYXNz
bmFtZSQsIEJ1aWxkZXI+IGltcGxlbWVudHNcbiIKLSAgICAgICIgICAgJGV4dHJhX2ludGVyZmFj
ZXMkXG4iCi0gICAgICAiICAgICRjbGFzc25hbWUkT3JCdWlsZGVyIHtcbiIsCi0gICAgICAiY2xh
c3NuYW1lIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9y
XyksCi0gICAgICAiZXh0cmFfaW50ZXJmYWNlcyIsIEV4dHJhQnVpbGRlckludGVyZmFjZXMoZGVz
Y3JpcHRvcl8pKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJwdWJs
aWMgc3RhdGljIGZpbmFsIGNsYXNzIEJ1aWxkZXIgZXh0ZW5kc1xuIgotICAgICAgIiAgICBjb20u
Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2UuQnVpbGRlcjxCdWlsZGVyPiBpbXBsZW1l
bnRzXG4iCi0gICAgICAiICAgICRleHRyYV9pbnRlcmZhY2VzJFxuIgotICAgICAgIiAgICAkY2xh
c3NuYW1lJE9yQnVpbGRlciB7XG4iLAotICAgICAgImNsYXNzbmFtZSIsIG5hbWVfcmVzb2x2ZXJf
LT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pLAotICAgICAgImV4dHJhX2ludGVy
ZmFjZXMiLCBFeHRyYUJ1aWxkZXJJbnRlcmZhY2VzKGRlc2NyaXB0b3JfKSk7Ci0gIH0KLSAgcHJp
bnRlci0+SW5kZW50KCk7Ci0KLSAgR2VuZXJhdGVEZXNjcmlwdG9yTWV0aG9kcyhwcmludGVyKTsK
LSAgR2VuZXJhdGVDb21tb25CdWlsZGVyTWV0aG9kcyhwcmludGVyKTsKLQotICBpZiAoY29udGV4
dF8tPkhhc0dlbmVyYXRlZE1ldGhvZHMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgR2VuZXJhdGVJc0lu
aXRpYWxpemVkKHByaW50ZXIpOwotICAgIEdlbmVyYXRlQnVpbGRlclBhcnNpbmdNZXRob2RzKHBy
aW50ZXIpOwotICB9Ci0KLSAgLy8gb25lb2YKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwot
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkr
KykgewotICAgIHZhcnNbIm9uZW9mX25hbWUiXSA9IGNvbnRleHRfLT5HZXRPbmVvZkdlbmVyYXRv
ckluZm8oCi0gICAgICAgIGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpKS0+bmFtZTsKLSAgICB2
YXJzWyJvbmVvZl9jYXBpdGFsaXplZF9uYW1lIl0gPSBjb250ZXh0Xy0+R2V0T25lb2ZHZW5lcmF0
b3JJbmZvKAotICAgICAgICBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKSktPmNhcGl0YWxpemVk
X25hbWU7Ci0gICAgdmFyc1sib25lb2ZfaW5kZXgiXSA9IFNpbXBsZUl0b2EoZGVzY3JpcHRvcl8t
Pm9uZW9mX2RlY2woaSktPmluZGV4KCkpOwotICAgIC8vIG9uZW9mQ2FzZV8gYW5kIG9uZW9mXwot
ICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAicHJpdmF0ZSBpbnQgJG9uZW9mX25hbWUk
Q2FzZV8gPSAwO1xuIgotICAgICAgInByaXZhdGUgamF2YS5sYW5nLk9iamVjdCAkb25lb2ZfbmFt
ZSRfO1xuIik7Ci0gICAgLy8gb25lb2ZDYXNlKCkgYW5kIGNsZWFyT25lb2YoKQotICAgIHByaW50
ZXItPlByaW50KHZhcnMsCi0gICAgICAicHVibGljICRvbmVvZl9jYXBpdGFsaXplZF9uYW1lJENh
c2VcbiIKLSAgICAgICIgICAgZ2V0JG9uZW9mX2NhcGl0YWxpemVkX25hbWUkQ2FzZSgpIHtcbiIK
LSAgICAgICIgIHJldHVybiAkb25lb2ZfY2FwaXRhbGl6ZWRfbmFtZSRDYXNlLmZvck51bWJlcihc
biIKLSAgICAgICIgICAgICAkb25lb2ZfbmFtZSRDYXNlXyk7XG4iCi0gICAgICAifVxuIgotICAg
ICAgIlxuIgotICAgICAgInB1YmxpYyBCdWlsZGVyIGNsZWFyJG9uZW9mX2NhcGl0YWxpemVkX25h
bWUkKCkge1xuIgotICAgICAgIiAgJG9uZW9mX25hbWUkQ2FzZV8gPSAwO1xuIgotICAgICAgIiAg
JG9uZW9mX25hbWUkXyA9IG51bGw7XG4iKTsKLSAgICBwcmludGVyLT5QcmludCgiICBvbkNoYW5n
ZWQoKTtcbiIpOwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiAgcmV0dXJuIHRoaXM7XG4i
Ci0gICAgICAifVxuIgotICAgICAgIlxuIik7Ci0gIH0KLQotICBpZiAoR2VuZXJhdGVIYXNCaXRz
KGRlc2NyaXB0b3JfKSkgewotICAgIC8vIEludGVnZXJzIGZvciBiaXQgZmllbGRzLgotICAgIGlu
dCB0b3RhbEJpdHMgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZp
ZWxkX2NvdW50KCk7IGkrKykgewotICAgICAgdG90YWxCaXRzICs9IGZpZWxkX2dlbmVyYXRvcnNf
LmdldChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpCi0gICAgICAgICAgLkdldE51bUJpdHNGb3JCdWls
ZGVyKCk7Ci0gICAgfQotICAgIGludCB0b3RhbEludHMgPSAodG90YWxCaXRzICsgMzEpIC8gMzI7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEludHM7IGkrKykgewotICAgICAgcHJpbnRl
ci0+UHJpbnQoInByaXZhdGUgaW50ICRiaXRfZmllbGRfbmFtZSQ7XG4iLAotICAgICAgICAiYml0
X2ZpZWxkX25hbWUiLCBHZXRCaXRGaWVsZE5hbWUoaSkpOwotICAgIH0KLSAgfQotCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIHBy
aW50ZXItPlByaW50KCJcbiIpOwotICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9y
Xy0+ZmllbGQoaSkpCi0gICAgICAgICAgICAgICAgICAgICAuR2VuZXJhdGVCdWlsZGVyTWVtYmVy
cyhwcmludGVyKTsKLSAgfQotCi0gIGlmICghUHJlc2VydmVVbmtub3duRmllbGRzKGRlc2NyaXB0
b3JfKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgInB1YmxpYyBmaW5hbCBCdWlsZGVy
IHNldFVua25vd25GaWVsZHMoXG4iCi0gICAgICAiICAgIGZpbmFsIGNvbS5nb29nbGUucHJvdG9i
dWYuVW5rbm93bkZpZWxkU2V0IHVua25vd25GaWVsZHMpIHtcbiIKLSAgICAgICIgIHJldHVybiB0
aGlzO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJcbiIKLSAgICAgICJwdWJsaWMgZmluYWwgQnVp
bGRlciBtZXJnZVVua25vd25GaWVsZHMoXG4iCi0gICAgICAiICAgIGZpbmFsIGNvbS5nb29nbGUu
cHJvdG9idWYuVW5rbm93bkZpZWxkU2V0IHVua25vd25GaWVsZHMpIHtcbiIKLSAgICAgICIgIHJl
dHVybiB0aGlzO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJcbiIpOwotICB9Ci0KLSAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgIlxuIgotICAgICIvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoYnVp
bGRlcl9zY29wZTokZnVsbF9uYW1lJClcbiIsCi0gICAgImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3Jf
LT5mdWxsX25hbWUoKSk7Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5Qcmlu
dCgifVxuIik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotdm9pZCBNZXNzYWdlQnVpbGRlckdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZURlc2NyaXB0b3JNZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVyKSB7
Ci0gIGlmICghZGVzY3JpcHRvcl8tPm9wdGlvbnMoKS5ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2Fj
Y2Vzc29yKCkpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJwdWJsaWMgc3RhdGljIGZp
bmFsIGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRGVzY3JpcHRvclxuIgotICAgICAg
IiAgICBnZXREZXNjcmlwdG9yKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRmaWxlY2xhc3MkLmlu
dGVybmFsXyRpZGVudGlmaWVyJF9kZXNjcmlwdG9yO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJc
biIsCi0gICAgICAiZmlsZWNsYXNzIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNz
TmFtZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSwKLSAgICAgICJpZGVudGlmaWVyIiwgVW5pcXVlRmls
ZVNjb3BlSWRlbnRpZmllcihkZXNjcmlwdG9yXykpOwotICB9Ci0gIHZlY3Rvcjxjb25zdCBGaWVs
ZERlc2NyaXB0b3IqPiBtYXBfZmllbGRzOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0
b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotICAgIGlmIChHZXRKYXZhVHlwZShmaWVsZCkg
PT0gSkFWQVRZUEVfTUVTU0FHRSAmJgotICAgICAgICBJc01hcEVudHJ5KGZpZWxkLT5tZXNzYWdl
X3R5cGUoKSkpIHsKLSAgICAgIG1hcF9maWVsZHMucHVzaF9iYWNrKGZpZWxkKTsKLSAgICB9Ci0g
IH0KLSAgaWYgKCFtYXBfZmllbGRzLmVtcHR5KCkpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICJAU3VwcHJlc3NXYXJuaW5ncyh7XCJyYXd0eXBlc1wifSlcbiIKLSAgICAgICJwcm90ZWN0
ZWQgY29tLmdvb2dsZS5wcm90b2J1Zi5NYXBGaWVsZCBpbnRlcm5hbEdldE1hcEZpZWxkKFxuIgot
ICAgICAgIiAgICBpbnQgbnVtYmVyKSB7XG4iCi0gICAgICAiICBzd2l0Y2ggKG51bWJlcikge1xu
Iik7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtYXBfZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gbWFwX2ZpZWxkc1tpXTsKLSAgICAgIGNvbnN0IEZp
ZWxkR2VuZXJhdG9ySW5mbyogaW5mbyA9IGNvbnRleHRfLT5HZXRGaWVsZEdlbmVyYXRvckluZm8o
ZmllbGQpOwotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJjYXNlICRudW1iZXIkOlxu
IgotICAgICAgICAiICByZXR1cm4gaW50ZXJuYWxHZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIs
Ci0gICAgICAgICJudW1iZXIiLCBTaW1wbGVJdG9hKGZpZWxkLT5udW1iZXIoKSksCi0gICAgICAg
ICJjYXBpdGFsaXplZF9uYW1lIiwgaW5mby0+Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0gICAgfQotICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICAiZGVmYXVsdDpcbiIKLSAgICAgICAgIiAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oXG4iCi0gICAgICAgICIgICAgICBcIkludmFsaWQgbWFwIGZp
ZWxkIG51bWJlcjogXCIgKyBudW1iZXIpO1xuIik7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwot
ICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiAg
fVxuIgotICAgICAgICAifVxuIik7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiQFN1cHBy
ZXNzV2FybmluZ3Moe1wicmF3dHlwZXNcIn0pXG4iCi0gICAgICAicHJvdGVjdGVkIGNvbS5nb29n
bGUucHJvdG9idWYuTWFwRmllbGQgaW50ZXJuYWxHZXRNdXRhYmxlTWFwRmllbGQoXG4iCi0gICAg
ICAiICAgIGludCBudW1iZXIpIHtcbiIKLSAgICAgICIgIHN3aXRjaCAobnVtYmVyKSB7XG4iKTsK
LSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1hcF9maWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQgPSBtYXBfZmllbGRzW2ldOwotICAgICAgY29uc3QgRmllbGRH
ZW5lcmF0b3JJbmZvKiBpbmZvID0KLSAgICAgICAgICBjb250ZXh0Xy0+R2V0RmllbGRHZW5lcmF0
b3JJbmZvKGZpZWxkKTsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiY2FzZSAkbnVt
YmVyJDpcbiIKLSAgICAgICAgIiAgcmV0dXJuIGludGVybmFsR2V0TXV0YWJsZSRjYXBpdGFsaXpl
ZF9uYW1lJCgpO1xuIiwKLSAgICAgICAgIm51bWJlciIsIFNpbXBsZUl0b2EoZmllbGQtPm51bWJl
cigpKSwKLSAgICAgICAgImNhcGl0YWxpemVkX25hbWUiLCBpbmZvLT5jYXBpdGFsaXplZF9uYW1l
KTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJkZWZhdWx0OlxuIgotICAg
ICAgICAiICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihcbiIKLSAgICAgICAgIiAgICAgIFwi
SW52YWxpZCBtYXAgZmllbGQgbnVtYmVyOiBcIiArIG51bWJlcik7XG4iKTsKLSAgICBwcmludGVy
LT5PdXRkZW50KCk7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50
KAotICAgICAgICAiICB9XG4iCi0gICAgICAgICJ9XG4iKTsKLSAgfQotICBwcmludGVyLT5Qcmlu
dCgKLSAgICAicHJvdGVjdGVkIGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZS5G
aWVsZEFjY2Vzc29yVGFibGVcbiIKLSAgICAiICAgIGludGVybmFsR2V0RmllbGRBY2Nlc3NvclRh
YmxlKCkge1xuIgotICAgICIgIHJldHVybiAkZmlsZWNsYXNzJC5pbnRlcm5hbF8kaWRlbnRpZmll
ciRfZmllbGRBY2Nlc3NvclRhYmxlXG4iCi0gICAgIiAgICAgIC5lbnN1cmVGaWVsZEFjY2Vzc29y
c0luaXRpYWxpemVkKFxuIgotICAgICIgICAgICAgICAgJGNsYXNzbmFtZSQuY2xhc3MsICRjbGFz
c25hbWUkLkJ1aWxkZXIuY2xhc3MpO1xuIgotICAgICJ9XG4iCi0gICAgIlxuIiwKLSAgICAiY2xh
c3NuYW1lIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9y
XyksCi0gICAgImZpbGVjbGFzcyIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05h
bWUoZGVzY3JpcHRvcl8tPmZpbGUoKSksCi0gICAgImlkZW50aWZpZXIiLCBVbmlxdWVGaWxlU2Nv
cGVJZGVudGlmaWVyKGRlc2NyaXB0b3JfKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotdm9pZCBN
ZXNzYWdlQnVpbGRlckdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNvbW1vbkJ1aWxkZXJNZXRob2RzKGlv
OjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgIi8vIENvbnN0
cnVjdCB1c2luZyAkY2xhc3NuYW1lJC5uZXdCdWlsZGVyKClcbiIKLSAgICAgICJwcml2YXRlIEJ1
aWxkZXIoKSB7XG4iCi0gICAgICAiICBtYXliZUZvcmNlQnVpbGRlckluaXRpYWxpemF0aW9uKCk7
XG4iCi0gICAgICAifVxuIgotICAgICAgIlxuIiwKLSAgICAgICJjbGFzc25hbWUiLCBuYW1lX3Jl
c29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKSk7Ci0KLSAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgInByaXZhdGUgQnVpbGRlcihcbiIKLSAgICAiICAgIGNvbS5nb29nbGUu
cHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZS5CdWlsZGVyUGFyZW50IHBhcmVudCkge1xuIgotICAg
ICIgIHN1cGVyKHBhcmVudCk7XG4iCi0gICAgIiAgbWF5YmVGb3JjZUJ1aWxkZXJJbml0aWFsaXph
dGlvbigpO1xuIgotICAgICJ9XG4iLAotICAgICJjbGFzc25hbWUiLCBuYW1lX3Jlc29sdmVyXy0+
R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKSk7Ci0KLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgInByaXZhdGUgdm9pZCBtYXliZUZvcmNlQnVpbGRlckluaXRpYWxpemF0aW9uKCkge1xu
IgotICAgICIgIGlmIChjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2UuYWx3YXlz
VXNlRmllbGRCdWlsZGVycykge1xuIik7Ci0KLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0gIHByaW50
ZXItPkluZGVudCgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9j
b3VudCgpOyBpKyspIHsKLSAgICBpZiAoIWRlc2NyaXB0b3JfLT5maWVsZChpKS0+Y29udGFpbmlu
Z19vbmVvZigpKSB7Ci0gICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZGVzY3JpcHRvcl8tPmZp
ZWxkKGkpKQotICAgICAgICAgIC5HZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29k
ZShwcmludGVyKTsKLSAgICB9Ci0gIH0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVy
LT5PdXRkZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiAgfVxuIgotICAgICJ9XG4i
KTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAicHVibGljIEJ1aWxkZXIgY2xlYXIoKSB7XG4i
Ci0gICAgIiAgc3VwZXIuY2xlYXIoKTtcbiIpOwotCi0gIHByaW50ZXItPkluZGVudCgpOwotCi0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewot
ICAgIGlmICghZGVzY3JpcHRvcl8tPmZpZWxkKGkpLT5jb250YWluaW5nX29uZW9mKCkpIHsKLSAg
ICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpCi0gICAgICAg
ICAgLkdlbmVyYXRlQnVpbGRlckNsZWFyQ29kZShwcmludGVyKTsKLSAgICB9Ci0gIH0KLQotICBm
b3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykg
ewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiRvbmVvZl9uYW1lJENhc2VfID0gMDtcbiIK
LSAgICAgICIkb25lb2ZfbmFtZSRfID0gbnVsbDtcbiIsCi0gICAgICAib25lb2ZfbmFtZSIsIGNv
bnRleHRfLT5HZXRPbmVvZkdlbmVyYXRvckluZm8oCi0gICAgICAgICAgZGVzY3JpcHRvcl8tPm9u
ZW9mX2RlY2woaSkpLT5uYW1lKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLQotICBw
cmludGVyLT5QcmludCgKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIgotICAgICJc
biIpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICJwdWJsaWMgY29tLmdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9ycy5EZXNjcmlwdG9yXG4iCi0gICAgIiAgICBnZXREZXNjcmlwdG9yRm9yVHlw
ZSgpIHtcbiIKLSAgICAiICByZXR1cm4gJGZpbGVjbGFzcyQuaW50ZXJuYWxfJGlkZW50aWZpZXIk
X2Rlc2NyaXB0b3I7XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iLAotICAgICJmaWxlY2xhc3MiLCBu
YW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5maWxlKCkp
LAotICAgICJpZGVudGlmaWVyIiwgVW5pcXVlRmlsZVNjb3BlSWRlbnRpZmllcihkZXNjcmlwdG9y
XykpOwotCi0gIC8vIExJVEUgcnVudGltZSBpbXBsZW1lbnRzIHRoaXMgaW4gR2VuZXJhdGVkTWVz
c2FnZUxpdGUuCi0gIHByaW50ZXItPlByaW50KAotICAgICJwdWJsaWMgJGNsYXNzbmFtZSQgZ2V0
RGVmYXVsdEluc3RhbmNlRm9yVHlwZSgpIHtcbiIKLSAgICAiICByZXR1cm4gJGNsYXNzbmFtZSQu
Z2V0RGVmYXVsdEluc3RhbmNlKCk7XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iLAotICAgICJjbGFz
c25hbWUiLCBuYW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3Jf
KSk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInB1YmxpYyAkY2xhc3NuYW1lJCBidWlsZCgp
IHtcbiIKLSAgICAiICAkY2xhc3NuYW1lJCByZXN1bHQgPSBidWlsZFBhcnRpYWwoKTtcbiIKLSAg
ICAiICBpZiAoIXJlc3VsdC5pc0luaXRpYWxpemVkKCkpIHtcbiIKLSAgICAiICAgIHRocm93IG5l
d1VuaW5pdGlhbGl6ZWRNZXNzYWdlRXhjZXB0aW9uKHJlc3VsdCk7XG4iCi0gICAgIiAgfVxuIgot
ICAgICIgIHJldHVybiByZXN1bHQ7XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iLAotICAgICJjbGFz
c25hbWUiLCBuYW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3Jf
KSk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInB1YmxpYyAkY2xhc3NuYW1lJCBidWlsZFBh
cnRpYWwoKSB7XG4iCi0gICAgIiAgJGNsYXNzbmFtZSQgcmVzdWx0ID0gbmV3ICRjbGFzc25hbWUk
KHRoaXMpO1xuIiwKLSAgICAiY2xhc3NuYW1lIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJs
ZUNsYXNzTmFtZShkZXNjcmlwdG9yXykpOwotCi0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIGlu
dCB0b3RhbEJ1aWxkZXJCaXRzID0gMDsKLSAgaW50IHRvdGFsTWVzc2FnZUJpdHMgPSAwOwotICBm
b3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAg
ICBjb25zdCBJbW11dGFibGVGaWVsZEdlbmVyYXRvciYgZmllbGQgPQotICAgICAgICBmaWVsZF9n
ZW5lcmF0b3JzXy5nZXQoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKTsKLSAgICB0b3RhbEJ1aWxkZXJC
aXRzICs9IGZpZWxkLkdldE51bUJpdHNGb3JCdWlsZGVyKCk7Ci0gICAgdG90YWxNZXNzYWdlQml0
cyArPSBmaWVsZC5HZXROdW1CaXRzRm9yTWVzc2FnZSgpOwotICB9Ci0gIGludCB0b3RhbEJ1aWxk
ZXJJbnRzID0gKHRvdGFsQnVpbGRlckJpdHMgKyAzMSkgLyAzMjsKLSAgaW50IHRvdGFsTWVzc2Fn
ZUludHMgPSAodG90YWxNZXNzYWdlQml0cyArIDMxKSAvIDMyOwotCi0gIGlmIChHZW5lcmF0ZUhh
c0JpdHMoZGVzY3JpcHRvcl8pKSB7Ci0gICAgLy8gTG9jYWwgdmFycyBmb3IgZnJvbSBhbmQgdG8g
Yml0IGZpZWxkcyB0byBhdm9pZCBhY2Nlc3NpbmcgdGhlIGJ1aWxkZXIgYW5kCi0gICAgLy8gbWVz
c2FnZSBvdmVyIGFuZCBvdmVyIGZvciB0aGVzZSBmaWVsZHMuIFNlZW1zIHRvIHByb3ZpZGUgYSBz
bGlnaHQKLSAgICAvLyBwZXJmb3JhbWFuY2UgaW1wcm92ZW1lbnQgaW4gbWljcm8gYmVuY2htYXJr
IGFuZCB0aGlzIGlzIGFsc28gd2hhdCBwcm90bzEKLSAgICAvLyBjb2RlIGRvZXMuCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ1aWxkZXJJbnRzOyBpKyspIHsKLSAgICAgIHByaW50ZXIt
PlByaW50KCJpbnQgZnJvbV8kYml0X2ZpZWxkX25hbWUkID0gJGJpdF9maWVsZF9uYW1lJDtcbiIs
Ci0gICAgICAgICJiaXRfZmllbGRfbmFtZSIsIEdldEJpdEZpZWxkTmFtZShpKSk7Ci0gICAgfQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxNZXNzYWdlSW50czsgaSsrKSB7Ci0gICAgICBw
cmludGVyLT5QcmludCgiaW50IHRvXyRiaXRfZmllbGRfbmFtZSQgPSAwO1xuIiwKLSAgICAgICAg
ImJpdF9maWVsZF9uYW1lIiwgR2V0Qml0RmllbGROYW1lKGkpKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBPdXRwdXQgZ2VuZXJhdGlvbiBjb2RlIGZvciBlYWNoIGZpZWxkLgotICBmb3IgKGludCBpID0g
MDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBmaWVsZF9nZW5l
cmF0b3JzXy5nZXQoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKS5HZW5lcmF0ZUJ1aWxkaW5nQ29kZShw
cmludGVyKTsKLSAgfQotCi0gIGlmIChHZW5lcmF0ZUhhc0JpdHMoZGVzY3JpcHRvcl8pKSB7Ci0g
ICAgLy8gQ29weSB0aGUgYml0IGZpZWxkIHJlc3VsdHMgdG8gdGhlIGdlbmVyYXRlZCBtZXNzYWdl
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbE1lc3NhZ2VJbnRzOyBpKyspIHsKLSAgICAg
IHByaW50ZXItPlByaW50KCJyZXN1bHQuJGJpdF9maWVsZF9uYW1lJCA9IHRvXyRiaXRfZmllbGRf
bmFtZSQ7XG4iLAotICAgICAgICAiYml0X2ZpZWxkX25hbWUiLCBHZXRCaXRGaWVsZE5hbWUoaSkp
OwotICAgIH0KLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm9uZW9m
X2RlY2xfY291bnQoKTsgaSsrKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoInJlc3VsdC4kb25lb2Zf
bmFtZSRDYXNlXyA9ICRvbmVvZl9uYW1lJENhc2VfO1xuIiwKLSAgICAgICAgICAgICAgICAgICAi
b25lb2ZfbmFtZSIsIGNvbnRleHRfLT5HZXRPbmVvZkdlbmVyYXRvckluZm8oCi0gICAgICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpKS0+bmFtZSk7Ci0gIH0KLQot
ICBwcmludGVyLT5PdXRkZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiAgb25CdWls
dCgpO1xuIik7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiAgcmV0dXJuIHJlc3VsdDtcbiIK
LSAgICAifVxuIgotICAgICJcbiIsCi0gICAgImNsYXNzbmFtZSIsIG5hbWVfcmVzb2x2ZXJfLT5H
ZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pKTsKLQotICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IGlmIChjb250ZXh0Xy0+SGFzR2VuZXJhdGVkTWV0aG9kcyhkZXNjcmlwdG9yXykpIHsKLSAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICJwdWJsaWMgQnVpbGRlciBtZXJnZUZyb20oY29tLmdvb2ds
ZS5wcm90b2J1Zi5NZXNzYWdlIG90aGVyKSB7XG4iCi0gICAgICAiICBpZiAob3RoZXIgaW5zdGFu
Y2VvZiAkY2xhc3NuYW1lJCkge1xuIgotICAgICAgIiAgICByZXR1cm4gbWVyZ2VGcm9tKCgkY2xh
c3NuYW1lJClvdGhlcik7XG4iCi0gICAgICAiICB9IGVsc2Uge1xuIgotICAgICAgIiAgICBzdXBl
ci5tZXJnZUZyb20ob3RoZXIpO1xuIgotICAgICAgIiAgICByZXR1cm4gdGhpcztcbiIKLSAgICAg
ICIgIH1cbiIKLSAgICAgICJ9XG4iCi0gICAgICAiXG4iLAotICAgICAgImNsYXNzbmFtZSIsIG5h
bWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pKTsKLQotICAg
IHByaW50ZXItPlByaW50KAotICAgICAgInB1YmxpYyBCdWlsZGVyIG1lcmdlRnJvbSgkY2xhc3Nu
YW1lJCBvdGhlcikge1xuIgotICAgICAgLy8gT3B0aW1pemF0aW9uOiAgSWYgb3RoZXIgaXMgdGhl
IGRlZmF1bHQgaW5zdGFuY2UsIHdlIGtub3cgbm9uZSBvZiBpdHMKLSAgICAgIC8vICAgZmllbGRz
IGFyZSBzZXQgc28gd2UgY2FuIHNraXAgdGhlIG1lcmdlLgotICAgICAgIiAgaWYgKG90aGVyID09
ICRjbGFzc25hbWUkLmdldERlZmF1bHRJbnN0YW5jZSgpKSByZXR1cm4gdGhpcztcbiIsCi0gICAg
ICAiY2xhc3NuYW1lIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNj
cmlwdG9yXykpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgICBpZiAoIWRlc2Ny
aXB0b3JfLT5maWVsZChpKS0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgICAgIGZpZWxkX2dl
bmVyYXRvcnNfLmdldCgKLSAgICAgICAgICAgIGRlc2NyaXB0b3JfLT5maWVsZChpKSkuR2VuZXJh
dGVNZXJnaW5nQ29kZShwcmludGVyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBNZXJnZSBv
bmVvZiBmaWVsZHMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+b25lb2Zf
ZGVjbF9jb3VudCgpOyArK2kpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAic3dp
dGNoIChvdGhlci5nZXQkb25lb2ZfY2FwaXRhbGl6ZWRfbmFtZSRDYXNlKCkpIHtcbiIsCi0gICAg
ICAgICJvbmVvZl9jYXBpdGFsaXplZF9uYW1lIiwKLSAgICAgICAgY29udGV4dF8tPkdldE9uZW9m
R2VuZXJhdG9ySW5mbygKLSAgICAgICAgICAgIGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpKS0+
Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0gICAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPmZpZWxkX2NvdW50KCk7
IGorKykgewotICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRv
cl8tPm9uZW9mX2RlY2woaSktPmZpZWxkKGopOwotICAgICAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICAgICAiY2FzZSAkZmllbGRfbmFtZSQ6IHtcbiIsCi0gICAgICAgICAgImZpZWxkX25hbWUi
LAotICAgICAgICAgIFRvVXBwZXIoZmllbGQtPm5hbWUoKSkpOwotICAgICAgICBwcmludGVyLT5J
bmRlbnQoKTsKLSAgICAgICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZU1l
cmdpbmdDb2RlKHByaW50ZXIpOwotICAgICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAg
ICJicmVhaztcbiIpOwotICAgICAgICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgICAgIHByaW50
ZXItPlByaW50KAotICAgICAgICAgICAgIn1cbiIpOwotICAgICAgfQotICAgICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgICJjYXNlICRjYXBfb25lb2ZfbmFtZSRfTk9UX1NFVDoge1xuIgotICAg
ICAgICAiICBicmVhaztcbiIKLSAgICAgICAgIn1cbiIsCi0gICAgICAgICJjYXBfb25lb2ZfbmFt
ZSIsCi0gICAgICAgIFRvVXBwZXIoY29udGV4dF8tPkdldE9uZW9mR2VuZXJhdG9ySW5mbygKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpKS0+bmFtZSkpOwotICAgICAgcHJp
bnRlci0+T3V0ZGVudCgpOwotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIn1cbiIp
OwotICAgIH0KLQotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLQotICAgIC8vIGlmIG1lc3NhZ2Ug
dHlwZSBoYXMgZXh0ZW5zaW9ucwotICAgIGlmIChkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3Jhbmdl
X2NvdW50KCkgPiAwKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiAgdGhpcy5t
ZXJnZUV4dGVuc2lvbkZpZWxkcyhvdGhlcik7XG4iKTsKLSAgICB9Ci0KLSAgICBpZiAoUHJlc2Vy
dmVVbmtub3duRmllbGRzKGRlc2NyaXB0b3JfKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgICAgICIgIHRoaXMubWVyZ2VVbmtub3duRmllbGRzKG90aGVyLnVua25vd25GaWVsZHMpO1xu
Iik7Ci0gICAgfQotCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICBvbkNoYW5nZWQoKTtc
biIpOwotCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICByZXR1cm4gdGhpcztcbiIKLSAg
ICAgICJ9XG4iCi0gICAgICAiXG4iKTsKLSAgfQotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXZvaWQg
TWVzc2FnZUJ1aWxkZXJHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyUGFyc2luZ01ldGhvZHMo
aW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInB1YmxpYyBC
dWlsZGVyIG1lcmdlRnJvbShcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRJ
bnB1dFN0cmVhbSBpbnB1dCxcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuRXh0ZW5z
aW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KVxuIgotICAgICIgICAgdGhyb3dzIGph
dmEuaW8uSU9FeGNlcHRpb24ge1xuIgotICAgICIgICRjbGFzc25hbWUkIHBhcnNlZE1lc3NhZ2Ug
PSBudWxsO1xuIgotICAgICIgIHRyeSB7XG4iCi0gICAgIiAgICBwYXJzZWRNZXNzYWdlID0gUEFS
U0VSLnBhcnNlUGFydGlhbEZyb20oaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KTtcbiIKLSAgICAi
ICB9IGNhdGNoIChjb20uZ29vZ2xlLnByb3RvYnVmLkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2Vw
dGlvbiBlKSB7XG4iCi0gICAgIiAgICBwYXJzZWRNZXNzYWdlID0gKCRjbGFzc25hbWUkKSBlLmdl
dFVuZmluaXNoZWRNZXNzYWdlKCk7XG4iCi0gICAgIiAgICB0aHJvdyBlLnVud3JhcElPRXhjZXB0
aW9uKCk7XG4iCi0gICAgIiAgfSBmaW5hbGx5IHtcbiIKLSAgICAiICAgIGlmIChwYXJzZWRNZXNz
YWdlICE9IG51bGwpIHtcbiIKLSAgICAiICAgICAgbWVyZ2VGcm9tKHBhcnNlZE1lc3NhZ2UpO1xu
IgotICAgICIgICAgfVxuIgotICAgICIgIH1cbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAg
ICAifVxuIiwKLSAgICAiY2xhc3NuYW1lIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNs
YXNzTmFtZShkZXNjcmlwdG9yXykpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXZvaWQgTWVzc2Fn
ZUJ1aWxkZXJHZW5lcmF0b3I6OkdlbmVyYXRlSXNJbml0aWFsaXplZCgKLSAgICBpbzo6UHJpbnRl
ciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICAicHVibGljIGZpbmFsIGJvb2xl
YW4gaXNJbml0aWFsaXplZCgpIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICAvLyBD
aGVjayB0aGF0IGFsbCByZXF1aXJlZCBmaWVsZHMgaW4gdGhpcyBtZXNzYWdlIGFyZSBzZXQuCi0g
IC8vIFRPRE8oa2VudG9uKTogIFdlIGNhbiBvcHRpbWl6ZSB0aGlzIHdoZW4gd2Ugc3dpdGNoIHRv
IHB1dHRpbmcgYWxsIHRoZQotICAvLyAgICJoYXMiIGZpZWxkcyBpbnRvIGEgc2luZ2xlIGJpdGZp
ZWxkLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBp
KyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZp
ZWxkKGkpOwotICAgIGNvbnN0IEZpZWxkR2VuZXJhdG9ySW5mbyogaW5mbyA9IGNvbnRleHRfLT5H
ZXRGaWVsZEdlbmVyYXRvckluZm8oZmllbGQpOwotCi0gICAgaWYgKGZpZWxkLT5pc19yZXF1aXJl
ZCgpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImlmICghaGFzJG5hbWUkKCkp
IHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIGZhbHNlO1xuIgotICAgICAgICAifVxuIiwKLSAgICAg
ICAgIm5hbWUiLCBpbmZvLT5jYXBpdGFsaXplZF9uYW1lKTsKLSAgICB9Ci0gIH0KLQotICAvLyBO
b3cgY2hlY2sgdGhhdCBhbGwgZW1iZWRkZWQgbWVzc2FnZXMgYXJlIGluaXRpYWxpemVkLgotICBm
b3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwot
ICAgIGNvbnN0IEZpZWxkR2VuZXJhdG9ySW5mbyogaW5mbyA9IGNvbnRleHRfLT5HZXRGaWVsZEdl
bmVyYXRvckluZm8oZmllbGQpOwotICAgIGlmIChHZXRKYXZhVHlwZShmaWVsZCkgPT0gSkFWQVRZ
UEVfTUVTU0FHRSAmJgotICAgICAgICBIYXNSZXF1aXJlZEZpZWxkcyhmaWVsZC0+bWVzc2FnZV90
eXBlKCkpKSB7Ci0gICAgICBzd2l0Y2ggKGZpZWxkLT5sYWJlbCgpKSB7Ci0gICAgICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpMQUJFTF9SRVFVSVJFRDoKLSAgICAgICAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICAgICAgICJpZiAoIWdldCRuYW1lJCgpLmlzSW5pdGlhbGl6ZWQoKSkge1xuIgot
ICAgICAgICAgICAgICIgIHJldHVybiBmYWxzZTtcbiIKLSAgICAgICAgICAgICAifVxuIiwKLSAg
ICAgICAgICAgICJ0eXBlIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZSgK
LSAgICAgICAgICAgICAgICBmaWVsZC0+bWVzc2FnZV90eXBlKCkpLAotICAgICAgICAgICAgIm5h
bWUiLCBpbmZvLT5jYXBpdGFsaXplZF9uYW1lKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX09QVElPTkFMOgotICAgICAgICAgIGlmICghU3Vw
cG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkgJiYKLSAgICAgICAgICAgICAg
ZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjb25zdCBP
bmVvZkRlc2NyaXB0b3IqIG9uZW9mID0gZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKTsKLSAgICAg
ICAgICAgIGNvbnN0IE9uZW9mR2VuZXJhdG9ySW5mbyogb25lb2ZfaW5mbyA9Ci0gICAgICAgICAg
ICAgICAgY29udGV4dF8tPkdldE9uZW9mR2VuZXJhdG9ySW5mbyhvbmVvZik7Ci0gICAgICAgICAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAgICAgImlmICgkb25lb2ZfbmFtZSRDYXNlXyA9
PSAkZmllbGRfbnVtYmVyJCkge1xuIiwKLSAgICAgICAgICAgICAgIm9uZW9mX25hbWUiLCBvbmVv
Zl9pbmZvLT5uYW1lLAotICAgICAgICAgICAgICAiZmllbGRfbnVtYmVyIiwgU2ltcGxlSXRvYShm
aWVsZC0+bnVtYmVyKCkpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgICAgICAgICAgICJpZiAoaGFzJG5hbWUkKCkpIHtcbiIsCi0gICAgICAg
ICAgICAgICJuYW1lIiwgaW5mby0+Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICAgIiAgaWYgKCFnZXQkbmFtZSQoKS5p
c0luaXRpYWxpemVkKCkpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIGZhbHNlO1xuIgot
ICAgICAgICAgICAgIiAgfVxuIgotICAgICAgICAgICAgIn1cbiIsCi0gICAgICAgICAgICAibmFt
ZSIsIGluZm8tPmNhcGl0YWxpemVkX25hbWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfUkVQRUFURUQ6Ci0gICAgICAgICAgaWYgKElzTWFw
RW50cnkoZmllbGQtPm1lc3NhZ2VfdHlwZSgpKSkgewotICAgICAgICAgICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgICAgICAgICJmb3IgKCR0eXBlJCBpdGVtIDogZ2V0JG5hbWUkKCkudmFsdWVz
KCkpIHtcbiIKLSAgICAgICAgICAgICAgIiAgaWYgKCFpdGVtLmlzSW5pdGlhbGl6ZWQoKSkge1xu
IgotICAgICAgICAgICAgICAiICAgIHJldHVybiBmYWxzZTtcbiIKLSAgICAgICAgICAgICAgIiAg
fVxuIgotICAgICAgICAgICAgICAifVxuIiwKLSAgICAgICAgICAgICAgInR5cGUiLCBNYXBWYWx1
ZUltbXV0YWJsZUNsYXNzZE5hbWUoZmllbGQtPm1lc3NhZ2VfdHlwZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3Jlc29sdmVyXyksCi0g
ICAgICAgICAgICAgICJuYW1lIiwgaW5mby0+Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0gICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICAgICAiZm9y
IChpbnQgaSA9IDA7IGkgPCBnZXQkbmFtZSRDb3VudCgpOyBpKyspIHtcbiIKLSAgICAgICAgICAg
ICAgIiAgaWYgKCFnZXQkbmFtZSQoaSkuaXNJbml0aWFsaXplZCgpKSB7XG4iCi0gICAgICAgICAg
ICAgICIgICAgcmV0dXJuIGZhbHNlO1xuIgotICAgICAgICAgICAgICAiICB9XG4iCi0gICAgICAg
ICAgICAgICJ9XG4iLAotICAgICAgICAgICAgICAidHlwZSIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJ
bW11dGFibGVDbGFzc05hbWUoCi0gICAgICAgICAgICAgICAgICBmaWVsZC0+bWVzc2FnZV90eXBl
KCkpLAotICAgICAgICAgICAgICAibmFtZSIsIGluZm8tPmNhcGl0YWxpemVkX25hbWUpOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAo
ZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgpID4gMCkgewotICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgImlmICghZXh0ZW5zaW9uc0FyZUluaXRpYWxpemVkKCkpIHtcbiIKLSAg
ICAgICIgIHJldHVybiBmYWxzZTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIHByaW50ZXIt
Pk91dGRlbnQoKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiICByZXR1cm4gdHJ1ZTtcbiIK
LSAgICAifVxuIgotICAgICJcbiIpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLX0gIC8vIG5hbWVz
cGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2J1aWxkZXIuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9idWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAxNWVhMDYyMDZjOTYxMGRjMWU2NTVkNDgzYjAwZTA1NDQ0ZjY2ZGQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2J1aWxkZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDg2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0vLyBBdXRob3I6IGR3ZWlzQGdvb2dsZS5jb20gKERhbmllbCBXZWlzKQotLy8gIEJhc2VkIG9u
IG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0
LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJ
TEVSX0pBVkFfTUVTU0FHRV9CVUlMREVSX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09N
UElMRVJfSkFWQV9NRVNTQUdFX0JVSUxERVJfSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5j
bHVkZSA8bWFwPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
ZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotICBu
YW1lc3BhY2UgY29tcGlsZXIgewotICAgIG5hbWVzcGFjZSBqYXZhIHsKLSAgICAgIGNsYXNzIENv
bnRleHQ7ICAgICAgICAgICAvLyBjb250ZXh0LmgKLSAgICAgIGNsYXNzIENsYXNzTmFtZVJlc29s
dmVyOyAvLyBuYW1lX3Jlc29sdmVyLmgKLSAgICB9Ci0gIH0KLSAgbmFtZXNwYWNlIGlvIHsKLSAg
ICBjbGFzcyBQcmludGVyOyAgICAgICAgICAgICAvLyBwcmludGVyLmgKLSAgfQotfQotCi1uYW1l
c3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhIHsK
LQotY2xhc3MgTWVzc2FnZUJ1aWxkZXJHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQg
TWVzc2FnZUJ1aWxkZXJHZW5lcmF0b3IoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29udGV4dCk7Ci0gIHZp
cnR1YWwgfk1lc3NhZ2VCdWlsZGVyR2VuZXJhdG9yKCk7Ci0KLSAgdmlydHVhbCB2b2lkIEdlbmVy
YXRlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotIHByaXZhdGU6Ci0gIHZvaWQgR2VuZXJhdGVD
b21tb25CdWlsZGVyTWV0aG9kcyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJh
dGVEZXNjcmlwdG9yTWV0aG9kcyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJh
dGVCdWlsZGVyUGFyc2luZ01ldGhvZHMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdl
bmVyYXRlSXNJbml0aWFsaXplZChpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgY29uc3QgRGVz
Y3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIENvbnRleHQqIGNvbnRleHRfOwotICBDbGFzc05hbWVS
ZXNvbHZlciogbmFtZV9yZXNvbHZlcl87Ci0gIEZpZWxkR2VuZXJhdG9yTWFwPEltbXV0YWJsZUZp
ZWxkR2VuZXJhdG9yPiBmaWVsZF9nZW5lcmF0b3JzXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoTWVzc2FnZUJ1aWxkZXJHZW5lcmF0b3IpOwotfTsKLQotfSAgLy8gbmFt
ZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHBy
b3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RP
QlVGX0NPTVBJTEVSX0pBVkFfTUVTU0FHRV9CVUlMREVSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2J1aWxkZXJfbGl0ZS5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9idWlsZGVyX2xp
dGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNDI5ZGM5M2U3MGJiNzVkMjNj
NGQzMzlkYjBiYTk5NzkwOTQwN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdl
X2J1aWxkZXJfbGl0ZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBkd2Vpc0Bnb29nbGUuY29t
IChEYW5pZWwgV2VpcykKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRl
c2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2J1aWxk
ZXJfbGl0ZS5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNp
Zm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFy
ZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2NvbnRleHQuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2RvY19jb21tZW50Lmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9leHRlbnNpb24uaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2dlbmVyYXRvcl9mYWN0b3J5Lmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9oZWxwZXJzLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9uYW1lX3Jlc29sdmVyLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ug
amF2YSB7Ci0KLW5hbWVzcGFjZSB7Ci1ib29sIEdlbmVyYXRlSGFzQml0cyhjb25zdCBEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlw
dG9yLT5maWxlKCkpIHx8Ci0gICAgICBIYXNSZXBlYXRlZEZpZWxkcyhkZXNjcmlwdG9yKTsKLX0K
LQotc3RyaW5nIE1hcFZhbHVlSW1tdXRhYmxlQ2xhc3NkTmFtZShjb25zdCBEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc05hbWVS
ZXNvbHZlciogbmFtZV9yZXNvbHZlcikgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbHVl
X2ZpZWxkID0gZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICBHT09HTEVf
Q0hFQ0tfRVEoRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0UsIHZhbHVlX2ZpZWxkLT50eXBl
KCkpOwotICByZXR1cm4gbmFtZV9yZXNvbHZlci0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKHZhbHVl
X2ZpZWxkLT5tZXNzYWdlX3R5cGUoKSk7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotTWVzc2FnZUJ1
aWxkZXJMaXRlR2VuZXJhdG9yOjpNZXNzYWdlQnVpbGRlckxpdGVHZW5lcmF0b3IoCi0gICAgY29u
c3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwgQ29udGV4dCogY29udGV4dCkKLSAgOiBkZXNjcmlw
dG9yXyhkZXNjcmlwdG9yKSwgY29udGV4dF8oY29udGV4dCksCi0gICAgbmFtZV9yZXNvbHZlcl8o
Y29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpLAotICAgIGZpZWxkX2dlbmVyYXRvcnNfKGRlc2Ny
aXB0b3IsIGNvbnRleHRfKSB7Ci0gIEdPT0dMRV9DSEVDSyghSGFzRGVzY3JpcHRvck1ldGhvZHMo
ZGVzY3JpcHRvci0+ZmlsZSgpLCBjb250ZXh0LT5FbmZvcmNlTGl0ZSgpKSkKLSAgICAgIDw8ICJH
ZW5lcmF0b3IgZmFjdG9yeSBlcnJvcjogQSBsaXRlIG1lc3NhZ2UgZ2VuZXJhdG9yIGlzIHVzZWQg
dG8gIgotICAgICAgICAgImdlbmVyYXRlIG5vbi1saXRlIG1lc3NhZ2VzLiI7Ci19Ci0KLU1lc3Nh
Z2VCdWlsZGVyTGl0ZUdlbmVyYXRvcjo6fk1lc3NhZ2VCdWlsZGVyTGl0ZUdlbmVyYXRvcigpIHt9
Ci0KLXZvaWQgTWVzc2FnZUJ1aWxkZXJMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSB7Ci0gIFdyaXRlTWVzc2FnZURvY0NvbW1lbnQocHJpbnRlciwgZGVzY3Jp
cHRvcl8pOwotICBwcmludGVyLT5QcmludCgKLSAgICAicHVibGljIHN0YXRpYyBmaW5hbCBjbGFz
cyBCdWlsZGVyIGV4dGVuZHNcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJh
dGVkTWVzc2FnZUxpdGUuJGV4dGVuZGlibGUkQnVpbGRlcjxcbiIKLSAgICAiICAgICAgJGNsYXNz
bmFtZSQsIEJ1aWxkZXI+IGltcGxlbWVudHNcbiIKLSAgICAiICAgICRleHRyYV9pbnRlcmZhY2Vz
JFxuIgotICAgICIgICAgJGNsYXNzbmFtZSRPckJ1aWxkZXIge1xuIiwKLSAgICAiY2xhc3NuYW1l
IiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXyksCi0g
ICAgImV4dHJhX2ludGVyZmFjZXMiLCBFeHRyYUJ1aWxkZXJJbnRlcmZhY2VzKGRlc2NyaXB0b3Jf
KSwKLSAgICAiZXh0ZW5kaWJsZSIsCi0gICAgZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9yYW5nZV9j
b3VudCgpID4gMCA/ICJFeHRlbmRhYmxlIiA6ICIiKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0K
LSAgR2VuZXJhdGVDb21tb25CdWlsZGVyTWV0aG9kcyhwcmludGVyKTsKLQotICAvLyBvbmVvZgot
ICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3Jp
cHRvcl8tPm9uZW9mX2RlY2xfY291bnQoKTsgaSsrKSB7Ci0gICAgdmFyc1sib25lb2ZfbmFtZSJd
ID0gY29udGV4dF8tPkdldE9uZW9mR2VuZXJhdG9ySW5mbygKLSAgICAgICAgZGVzY3JpcHRvcl8t
Pm9uZW9mX2RlY2woaSkpLT5uYW1lOwotICAgIHZhcnNbIm9uZW9mX2NhcGl0YWxpemVkX25hbWUi
XSA9IGNvbnRleHRfLT5HZXRPbmVvZkdlbmVyYXRvckluZm8oCi0gICAgICAgIGRlc2NyaXB0b3Jf
LT5vbmVvZl9kZWNsKGkpKS0+Y2FwaXRhbGl6ZWRfbmFtZTsKLSAgICB2YXJzWyJvbmVvZl9pbmRl
eCJdID0gU2ltcGxlSXRvYShkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+aW5kZXgoKSk7Ci0K
LSAgICAvLyBvbmVvZkNhc2UoKSBhbmQgY2xlYXJPbmVvZigpCi0gICAgcHJpbnRlci0+UHJpbnQo
dmFycywKLSAgICAgICJwdWJsaWMgJG9uZW9mX2NhcGl0YWxpemVkX25hbWUkQ2FzZVxuIgotICAg
ICAgIiAgICBnZXQkb25lb2ZfY2FwaXRhbGl6ZWRfbmFtZSRDYXNlKCkge1xuIgotICAgICAgIiAg
cmV0dXJuIGluc3RhbmNlLmdldCRvbmVvZl9jYXBpdGFsaXplZF9uYW1lJENhc2UoKTtcbiIKLSAg
ICAgICJ9XG4iCi0gICAgICAiXG4iCi0gICAgICAicHVibGljIEJ1aWxkZXIgY2xlYXIkb25lb2Zf
Y2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAg
ICAgIiAgaW5zdGFuY2UuY2xlYXIkb25lb2ZfY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIKLSAgICAg
ICIgIHJldHVybiB0aGlzO1xuIgotICAgICAgIn1cbiIKLSAgICAgICJcbiIpOwotICB9Ci0KLSAg
aWYgKEdlbmVyYXRlSGFzQml0cyhkZXNjcmlwdG9yXykpIHsKLSAgICAvLyBJbnRlZ2VycyBmb3Ig
Yml0IGZpZWxkcy4KLSAgICBpbnQgdG90YWxCaXRzID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICAgIHRvdGFsQml0cyAr
PSBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKQotICAgICAgICAg
IC5HZXROdW1CaXRzRm9yQnVpbGRlcigpOwotICAgIH0KLSAgICBpbnQgdG90YWxJbnRzID0gKHRv
dGFsQml0cyArIDMxKSAvIDMyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxJbnRzOyBp
KyspIHsKLSAgICAgIHByaW50ZXItPlByaW50KCJwcml2YXRlIGludCAkYml0X2ZpZWxkX25hbWUk
O1xuIiwKLSAgICAgICAgImJpdF9maWVsZF9uYW1lIiwgR2V0Qml0RmllbGROYW1lKGkpKTsKLSAg
ICB9Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3Vu
dCgpOyBpKyspIHsKLSAgICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAgICBmaWVsZF9nZW5lcmF0
b3JzXy5nZXQoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKQotICAgICAgICAgICAgICAgICAgICAgLkdl
bmVyYXRlQnVpbGRlck1lbWJlcnMocHJpbnRlcik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgK
LSAgICAiXG4iCi0gICAgIi8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChidWlsZGVyX3Njb3Bl
OiRmdWxsX25hbWUkKVxuIiwKLSAgICAiZnVsbF9uYW1lIiwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFt
ZSgpKTsKLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9XG4iKTsK
LX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi12b2lkIE1lc3NhZ2VCdWlsZGVyTGl0ZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUNvbW1vbkJ1aWxkZXJNZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0g
IHByaW50ZXItPlByaW50KAotICAgICIvLyBDb25zdHJ1Y3QgdXNpbmcgJGNsYXNzbmFtZSQubmV3
QnVpbGRlcigpXG4iCi0gICAgInByaXZhdGUgQnVpbGRlcigpIHtcbiIKLSAgICAiICBzdXBlcihE
RUZBVUxUX0lOU1RBTkNFKTtcbiIKLSAgICAifVxuIgotICAgICJcbiIsCi0gICAgImNsYXNzbmFt
ZSIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pKTsK
LX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNw
YWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
bWVzc2FnZV9idWlsZGVyX2xpdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfbWVzc2FnZV9idWlsZGVyX2xpdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODU5N2IyZTY2ZjM4OTAxOWNhNDM4YzUxYTc4NDJhZjU1YzU5ZGY5NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfYnVpbGRlcl9saXRlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw4MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0
aG9yOiBkd2Vpc0Bnb29nbGUuY29tIChEYW5pZWwgV2VpcykKLS8vICBCYXNlZCBvbiBvcmlnaW5h
bCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBE
ZWFuLCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZB
X01FU1NBR0VfQlVJTERFUl9MSVRFX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfSkFWQV9NRVNTQUdFX0JVSUxERVJfTElURV9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNp
bmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2
YV9maWVsZC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0g
IG5hbWVzcGFjZSBjb21waWxlciB7Ci0gICAgbmFtZXNwYWNlIGphdmEgewotICAgICAgY2xhc3Mg
Q29udGV4dDsgICAgICAgICAgIC8vIGNvbnRleHQuaAotICAgICAgY2xhc3MgQ2xhc3NOYW1lUmVz
b2x2ZXI7IC8vIG5hbWVfcmVzb2x2ZXIuaAotICAgIH0KLSAgfQotICBuYW1lc3BhY2UgaW8gewot
ICAgIGNsYXNzIFByaW50ZXI7ICAgICAgICAgICAgIC8vIHByaW50ZXIuaAotICB9Ci19Ci0KLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEg
ewotCi1jbGFzcyBNZXNzYWdlQnVpbGRlckxpdGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhw
bGljaXQgTWVzc2FnZUJ1aWxkZXJMaXRlR2VuZXJhdG9yKGNvbnN0IERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRl
eHQpOwotICB2aXJ0dWFsIH5NZXNzYWdlQnVpbGRlckxpdGVHZW5lcmF0b3IoKTsKLQotICB2aXJ0
dWFsIHZvaWQgR2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gcHJpdmF0ZToKLSAg
dm9pZCBHZW5lcmF0ZUNvbW1vbkJ1aWxkZXJNZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVyKTsK
LQotICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAgQ29udGV4dCogY29udGV4dF87
Ci0gIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLSAgRmllbGRHZW5lcmF0b3JN
YXA8SW1tdXRhYmxlRmllbGRMaXRlR2VuZXJhdG9yPiBmaWVsZF9nZW5lcmF0b3JzXzsKLQotICBH
T09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTWVzc2FnZUJ1aWxkZXJMaXRlR2VuZXJh
dG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGls
ZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0j
ZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX01FU1NBR0VfQlVJTERFUl9M
SVRFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2
YV9tZXNzYWdlX2ZpZWxkLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2
YV9tZXNzYWdlX2ZpZWxkLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTU1MTZm
Njc3NTZhY2QyZjE0ZTI1NWNlZDc5Yzg0ODVlNzc5YWMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfbWVzc2FnZV9maWVsZC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyOTEgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdv
b2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBC
dWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3Ro
ZXJzLgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfY29udGV4dC5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9maWVsZC5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX25hbWVfcmVzb2x2ZXIu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLW5hbWVzcGFjZSB7
Ci0KLXZvaWQgU2V0TWVzc2FnZVZhcmlhYmxlcyhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVpbGRlckJpdEluZGV4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZpZWxkR2VuZXJhdG9ySW5mbyogaW5mbywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBDbGFzc05hbWVSZXNvbHZlciogbmFtZV9yZXNvbHZlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXA8c3RyaW5nLCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAgU2V0
Q29tbW9uRmllbGRWYXJpYWJsZXMoZGVzY3JpcHRvciwgaW5mbywgdmFyaWFibGVzKTsKLQotICAo
KnZhcmlhYmxlcylbInR5cGUiXSA9Ci0gICAgICBuYW1lX3Jlc29sdmVyLT5HZXRJbW11dGFibGVD
bGFzc05hbWUoZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCkpOwotICAoKnZhcmlhYmxlcylbIm11
dGFibGVfdHlwZSJdID0KLSAgICAgIG5hbWVfcmVzb2x2ZXItPkdldE11dGFibGVDbGFzc05hbWUo
ZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCkpOwotICAoKnZhcmlhYmxlcylbImdyb3VwX29yX21l
c3NhZ2UiXSA9Ci0gICAgKEdldFR5cGUoZGVzY3JpcHRvcikgPT0gRmllbGREZXNjcmlwdG9yOjpU
WVBFX0dST1VQKSA/Ci0gICAgIkdyb3VwIiA6ICJNZXNzYWdlIjsKLSAgLy8gVE9ETyhiaXJkbyk6
IEFkZCBAZGVwcmVjYXRlZCBqYXZhZG9jIHdoZW4gZ2VuZXJhdGluZyBqYXZhZG9jIGlzIHN1cHBv
cnRlZAotICAvLyBieSB0aGUgcHJvdG8gY29tcGlsZXIKLSAgKCp2YXJpYWJsZXMpWyJkZXByZWNh
dGlvbiJdID0gZGVzY3JpcHRvci0+b3B0aW9ucygpLmRlcHJlY2F0ZWQoKQotICAgICAgPyAiQGph
dmEubGFuZy5EZXByZWNhdGVkICIgOiAiIjsKLSAgKCp2YXJpYWJsZXMpWyJvbl9jaGFuZ2VkIl0g
PSAib25DaGFuZ2VkKCk7IjsKLQotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRv
ci0+ZmlsZSgpKSkgewotICAgIC8vIEZvciBzaW5ndWxhciBtZXNzYWdlcyBhbmQgYnVpbGRlcnMs
IG9uZSBiaXQgaXMgdXNlZCBmb3IgdGhlIGhhc0ZpZWxkIGJpdC4KLSAgICAoKnZhcmlhYmxlcylb
ImdldF9oYXNfZmllbGRfYml0X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0Qml0KG1lc3NhZ2VCaXRJ
bmRleCk7Ci0gICAgKCp2YXJpYWJsZXMpWyJnZXRfaGFzX2ZpZWxkX2JpdF9idWlsZGVyIl0gPSBH
ZW5lcmF0ZUdldEJpdChidWlsZGVyQml0SW5kZXgpOwotCi0gICAgLy8gTm90ZSB0aGF0IHRoZXNl
IGhhdmUgYSB0cmFpbGluZyAiOyIuCi0gICAgKCp2YXJpYWJsZXMpWyJzZXRfaGFzX2ZpZWxkX2Jp
dF9tZXNzYWdlIl0gPQotICAgICAgICBHZW5lcmF0ZVNldEJpdChtZXNzYWdlQml0SW5kZXgpICsg
IjsiOwotICAgICgqdmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9iaXRfYnVpbGRlciJdID0KLSAg
ICAgICAgR2VuZXJhdGVTZXRCaXQoYnVpbGRlckJpdEluZGV4KSArICI7IjsKLSAgICAoKnZhcmlh
YmxlcylbImNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRlciJdID0KLSAgICAgICAgR2VuZXJhdGVD
bGVhckJpdChidWlsZGVyQml0SW5kZXgpICsgIjsiOwotCi0gICAgKCp2YXJpYWJsZXMpWyJpc19m
aWVsZF9wcmVzZW50X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0Qml0KG1lc3NhZ2VCaXRJbmRleCk7
Ci0gIH0gZWxzZSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJzZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdl
Il0gPSAiIjsKLSAgICAoKnZhcmlhYmxlcylbInNldF9oYXNfZmllbGRfYml0X2J1aWxkZXIiXSA9
ICIiOwotICAgICgqdmFyaWFibGVzKVsiY2xlYXJfaGFzX2ZpZWxkX2JpdF9idWlsZGVyIl0gPSAi
IjsKLQotICAgICgqdmFyaWFibGVzKVsiaXNfZmllbGRfcHJlc2VudF9tZXNzYWdlIl0gPQotICAg
ICAgICAoKnZhcmlhYmxlcylbIm5hbWUiXSArICJfICE9IG51bGwiOwotICB9Ci0KLSAgLy8gRm9y
IHJlcGF0ZWQgYnVpbGRlcnMsIG9uZSBiaXQgaXMgdXNlZCBmb3Igd2hldGhlciB0aGUgYXJyYXkg
aXMgaW1tdXRhYmxlLgotICAoKnZhcmlhYmxlcylbImdldF9tdXRhYmxlX2JpdF9idWlsZGVyIl0g
PSBHZW5lcmF0ZUdldEJpdChidWlsZGVyQml0SW5kZXgpOwotICAoKnZhcmlhYmxlcylbInNldF9t
dXRhYmxlX2JpdF9idWlsZGVyIl0gPSBHZW5lcmF0ZVNldEJpdChidWlsZGVyQml0SW5kZXgpOwot
ICAoKnZhcmlhYmxlcylbImNsZWFyX211dGFibGVfYml0X2J1aWxkZXIiXSA9IEdlbmVyYXRlQ2xl
YXJCaXQoYnVpbGRlckJpdEluZGV4KTsKLQotICAvLyBGb3IgcmVwZWF0ZWQgZmllbGRzLCBvbmUg
Yml0IGlzIHVzZWQgZm9yIHdoZXRoZXIgdGhlIGFycmF5IGlzIGltbXV0YWJsZQotICAvLyBpbiB0
aGUgcGFyc2luZyBjb25zdHJ1Y3Rvci4KLSAgKCp2YXJpYWJsZXMpWyJnZXRfbXV0YWJsZV9iaXRf
cGFyc2VyIl0gPQotICAgICAgR2VuZXJhdGVHZXRCaXRNdXRhYmxlTG9jYWwoYnVpbGRlckJpdElu
ZGV4KTsKLSAgKCp2YXJpYWJsZXMpWyJzZXRfbXV0YWJsZV9iaXRfcGFyc2VyIl0gPQotICAgICAg
R2VuZXJhdGVTZXRCaXRNdXRhYmxlTG9jYWwoYnVpbGRlckJpdEluZGV4KTsKLQotICAoKnZhcmlh
YmxlcylbImdldF9oYXNfZmllbGRfYml0X2Zyb21fbG9jYWwiXSA9Ci0gICAgICBHZW5lcmF0ZUdl
dEJpdEZyb21Mb2NhbChidWlsZGVyQml0SW5kZXgpOwotICAoKnZhcmlhYmxlcylbInNldF9oYXNf
ZmllbGRfYml0X3RvX2xvY2FsIl0gPQotICAgICAgR2VuZXJhdGVTZXRCaXRUb0xvY2FsKG1lc3Nh
Z2VCaXRJbmRleCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlt
bXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1JbW11dGFibGVNZXNzYWdlRmllbGRHZW5l
cmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAg
ICAgICAgIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGJ1
aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0KiBjb250ZXh0KQot
ICA6IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpLCBtZXNzYWdlQml0SW5kZXhfKG1lc3NhZ2VCaXRJ
bmRleCksCi0gICAgYnVpbGRlckJpdEluZGV4XyhidWlsZGVyQml0SW5kZXgpLCBjb250ZXh0Xyhj
b250ZXh0KSwKLSAgICBuYW1lX3Jlc29sdmVyXyhjb250ZXh0LT5HZXROYW1lUmVzb2x2ZXIoKSkg
ewotICAgIFNldE1lc3NhZ2VWYXJpYWJsZXMoZGVzY3JpcHRvciwgbWVzc2FnZUJpdEluZGV4LCBi
dWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5HZXRGaWVs
ZEdlbmVyYXRvckluZm8oZGVzY3JpcHRvciksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1l
X3Jlc29sdmVyXywgJnZhcmlhYmxlc18pOwotfQotCi1JbW11dGFibGVNZXNzYWdlRmllbGRHZW5l
cmF0b3I6On5JbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3IoKSB7fQotCi1pbnQgSW1tdXRh
YmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjpHZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNvbnN0IHsK
LSAgcmV0dXJuIDE7Ci19Ci0KLWludCBJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6Okdl
dE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3QgewotICByZXR1cm4gMTsKLX0KLQotdm9pZCBJbW11
dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIFRPRE8oam9ucCk6IEluIHRoZSBmdXR1
cmUsIGNvbnNpZGVyIGhhdmluZyBhIG1ldGhvZCBzcGVjaWZpYyB0byB0aGUKLSAgLy8gaW50ZXJm
YWNlIHNvIHRoYXQgYnVpbGRlcnMgY2FuIGNob29zZSBkeW5hbWljYWxseSB0byBlaXRoZXIgcmV0
dXJuIGEKLSAgLy8gbWVzc2FnZSBvciBhIG5lc3RlZCBidWlsZGVyLCBzbyB0aGF0IGFza2luZyBm
b3IgdGhlIGludGVyZmFjZSBkb2Vzbid0Ci0gIC8vIGNhdXNlIGEgbWVzc2FnZSB0byBldmVyIGJl
IGJ1aWx0LgotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkg
fHwKLSAgICAgIGRlc2NyaXB0b3JfLT5jb250YWluaW5nX29uZW9mKCkgPT0gTlVMTCkgewotICAg
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRib29sZWFuIGhhcyRjYXBp
dGFsaXplZF9uYW1lJCgpO1xuIik7Ci0gIH0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVw
cmVjYXRpb24kJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIik7Ci0KLSAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kJHR5cGUkT3JCdWlsZGVyIGdldCRjYXBpdGFs
aXplZF9uYW1lJE9yQnVpbGRlcigpO1xuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZUZp
ZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlICR0eXBlJCAk
bmFtZSRfO1xuIik7Ci0gIFByaW50RXh0cmFGaWVsZEluZm8odmFyaWFibGVzXywgcHJpbnRlcik7
Ci0KLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0g
ICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFu
IGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAgICIgIHJldHVybiAkZ2V0X2hhc19m
aWVsZF9iaXRfbWVzc2FnZSQ7XG4iCi0gICAgICAifVxuIik7Ci0gICAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25h
bWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRuYW1lJF8gPT0gbnVsbCA/ICR0eXBlJC5nZXRE
ZWZhdWx0SW5zdGFuY2UoKSA6ICRuYW1lJF87XG4iCi0gICAgICAifVxuIik7Ci0KLSAgICBXcml0
ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJE9yQnVpbGRl
ciAiCi0gICAgICAiZ2V0JGNhcGl0YWxpemVkX25hbWUkT3JCdWlsZGVyKCkge1xuIgotICAgICAg
IiAgcmV0dXJuICRuYW1lJF8gPT0gbnVsbCA/ICR0eXBlJC5nZXREZWZhdWx0SW5zdGFuY2UoKSA6
ICRuYW1lJF87XG4iCi0gICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgV3JpdGVGaWVsZERv
Y0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXpl
ZF9uYW1lJCgpIHtcbiIKLSAgICAgICIgIHJldHVybiAkbmFtZSRfICE9IG51bGw7XG4iCi0gICAg
ICAifVxuIik7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1
YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJu
ICRuYW1lJF8gPT0gbnVsbCA/ICR0eXBlJC5nZXREZWZhdWx0SW5zdGFuY2UoKSA6ICRuYW1lJF87
XG4iCi0gICAgICAifVxuIik7Ci0KLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVw
cmVjYXRpb24kcHVibGljICR0eXBlJE9yQnVpbGRlciAiCi0gICAgICAiZ2V0JGNhcGl0YWxpemVk
X25hbWUkT3JCdWlsZGVyKCkge1xuIgotICAgICAgIiAgcmV0dXJuIGdldCRjYXBpdGFsaXplZF9u
YW1lJCgpO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2Fn
ZUZpZWxkR2VuZXJhdG9yOjpQcmludE5lc3RlZEJ1aWxkZXJDb25kaXRpb24oCi0gICAgaW86OlBy
aW50ZXIqIHByaW50ZXIsCi0gICAgY29uc3QgY2hhciogcmVndWxhcl9jYXNlLAotICAgIGNvbnN0
IGNoYXIqIG5lc3RlZF9idWlsZGVyX2Nhc2UpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywgImlmICgkbmFtZSRCdWlsZGVyXyA9PSBudWxsKSB7XG4iKTsKLSAgcHJpbnRlci0+
SW5kZW50KCk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sIHJlZ3VsYXJfY2FzZSk7Ci0g
IHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn0gZWxzZSB7XG4iKTsKLSAg
cHJpbnRlci0+SW5kZW50KCk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sIG5lc3RlZF9i
dWlsZGVyX2Nhc2UpOwotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9
XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OlByaW50TmVz
dGVkQnVpbGRlckZ1bmN0aW9uKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgIGNvbnN0
IGNoYXIqIG1ldGhvZF9wcm90b3R5cGUsCi0gICAgY29uc3QgY2hhciogcmVndWxhcl9jYXNlLAot
ICAgIGNvbnN0IGNoYXIqIG5lc3RlZF9idWlsZGVyX2Nhc2UsCi0gICAgY29uc3QgY2hhciogdHJh
aWxpbmdfY29kZSkgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCBtZXRob2Rf
cHJvdG90eXBlKTsKLSAgcHJpbnRlci0+UHJpbnQoIiB7XG4iKTsKLSAgcHJpbnRlci0+SW5kZW50
KCk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckNvbmRpdGlvbihwcmludGVyLCByZWd1bGFyX2Nhc2Us
IG5lc3RlZF9idWlsZGVyX2Nhc2UpOwotICBpZiAodHJhaWxpbmdfY29kZSAhPSBOVUxMKSB7Ci0g
ICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgdHJhaWxpbmdfY29kZSk7Ci0gIH0KLSAgcHJp
bnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQgSW1t
dXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gV2hlbiB1c2luZyBuZXN0ZWQtYnVpbGRl
cnMsIHRoZSBjb2RlIGluaXRpYWxseSB3b3JrcyBqdXN0IGxpa2UgdGhlCi0gIC8vIG5vbi1uZXN0
ZWQgYnVpbGRlciBjYXNlLiBJdCBvbmx5IGNyZWF0ZXMgYSBuZXN0ZWQgYnVpbGRlciBsYXppbHkg
b24KLSAgLy8gZGVtYW5kIGFuZCB0aGVuIGZvcmV2ZXIgZGVsZWdhdGVzIHRvIGl0IGFmdGVyIGNy
ZWF0aW9uLgotCi0gIGJvb2wgc3VwcG9ydF9maWVsZF9wcmVzZW5jZSA9IFN1cHBvcnRGaWVsZFBy
ZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxlKCkpOwotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgInByaXZhdGUgJHR5cGUkICRuYW1lJF8gPSBudWxsO1xuIik7Ci0KLSAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgIC8vIElmIHRoaXMgYnVpbGRlciBpcyBub24tbnVs
bCwgaXQgaXMgdXNlZCBhbmQgdGhlIG90aGVyIGZpZWxkcyBhcmUKLSAgICAgIC8vIGlnbm9yZWQu
Ci0gICAgICAicHJpdmF0ZSBjb20uZ29vZ2xlLnByb3RvYnVmLlNpbmdsZUZpZWxkQnVpbGRlcjxc
biIKLSAgICAgICIgICAgJHR5cGUkLCAkdHlwZSQuQnVpbGRlciwgJHR5cGUkT3JCdWlsZGVyPiAk
bmFtZSRCdWlsZGVyXzsiCi0gICAgICAiXG4iKTsKLQotICAvLyBUaGUgY29tbWVudHMgYWJvdmUg
dGhlIG1ldGhvZHMgYmVsb3cgYXJlIGJhc2VkIG9uIGEgaHlwb3RoZXRpY2FsCi0gIC8vIGZpZWxk
IG9mIHR5cGUgIkZpZWxkIiBjYWxsZWQgIkZpZWxkIi4KLQotICAvLyBib29sZWFuIGhhc0ZpZWxk
KCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBpZiAo
c3VwcG9ydF9maWVsZF9wcmVzZW5jZSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1l
JCgpIHtcbiIKLSAgICAgICIgIHJldHVybiAkZ2V0X2hhc19maWVsZF9iaXRfYnVpbGRlciQ7XG4i
Ci0gICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0YWxpemVkX25h
bWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRuYW1lJEJ1aWxkZXJfICE9IG51bGwgfHwgJG5h
bWUkXyAhPSBudWxsO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0KLSAgLy8gRmllbGQgZ2V0Rmll
bGQoKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFBy
aW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJs
aWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpIiwKLSAgICAicmV0dXJuICRuYW1lJF8g
PT0gbnVsbCA/ICR0eXBlJC5nZXREZWZhdWx0SW5zdGFuY2UoKSA6ICRuYW1lJF87XG4iLAotICAg
ICJyZXR1cm4gJG5hbWUkQnVpbGRlcl8uZ2V0TWVzc2FnZSgpO1xuIiwKLSAgICBOVUxMKTsKLQot
ICAvLyBGaWVsZC5CdWlsZGVyIHNldEZpZWxkKEZpZWxkIHZhbHVlKQotICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0
aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRh
bGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSIsCi0KLSAgICAiaWYgKHZhbHVlID09IG51bGwpIHtc
biIKLSAgICAiICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTtcbiIKLSAgICAifVxu
IgotICAgICIkbmFtZSRfID0gdmFsdWU7XG4iCi0gICAgIiRvbl9jaGFuZ2VkJFxuIiwKLQotICAg
ICIkbmFtZSRCdWlsZGVyXy5zZXRNZXNzYWdlKHZhbHVlKTtcbiIsCi0KLSAgICAiJHNldF9oYXNf
ZmllbGRfYml0X2J1aWxkZXIkXG4iCi0gICAgInJldHVybiB0aGlzO1xuIik7Ci0KLSAgLy8gRmll
bGQuQnVpbGRlciBzZXRGaWVsZChGaWVsZC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkKLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1
aWxkZXJGdW5jdGlvbihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIg
c2V0JGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgJHR5cGUkLkJ1aWxkZXIgYnVpbGRl
ckZvclZhbHVlKSIsCi0KLSAgICAiJG5hbWUkXyA9IGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpO1xu
IgotICAgICIkb25fY2hhbmdlZCRcbiIsCi0KLSAgICAiJG5hbWUkQnVpbGRlcl8uc2V0TWVzc2Fn
ZShidWlsZGVyRm9yVmFsdWUuYnVpbGQoKSk7XG4iLAotCi0gICAgIiRzZXRfaGFzX2ZpZWxkX2Jp
dF9idWlsZGVyJFxuIgotICAgICJyZXR1cm4gdGhpcztcbiIpOwotCi0gIC8vIEZpZWxkLkJ1aWxk
ZXIgbWVyZ2VGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxkZXJGdW5jdGlvbihwcmludGVyLAot
ICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgbWVyZ2UkY2FwaXRhbGl6ZWRfbmFtZSQo
JHR5cGUkIHZhbHVlKSIsCi0KLSAgICBzdXBwb3J0X2ZpZWxkX3ByZXNlbmNlCi0gICAgICAgID8g
ImlmICgkZ2V0X2hhc19maWVsZF9iaXRfYnVpbGRlciQgJiZcbiIKLSAgICAgICAgICAiICAgICRu
YW1lJF8gIT0gbnVsbCAmJlxuIgotICAgICAgICAgICIgICAgJG5hbWUkXyAhPSAkdHlwZSQuZ2V0
RGVmYXVsdEluc3RhbmNlKCkpIHtcbiIKLSAgICAgICAgICAiICAkbmFtZSRfID1cbiIKLSAgICAg
ICAgICAiICAgICR0eXBlJC5uZXdCdWlsZGVyKCRuYW1lJF8pLm1lcmdlRnJvbSh2YWx1ZSkuYnVp
bGRQYXJ0aWFsKCk7XG4iCi0gICAgICAgICAgIn0gZWxzZSB7XG4iCi0gICAgICAgICAgIiAgJG5h
bWUkXyA9IHZhbHVlO1xuIgotICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgIiRvbl9jaGFuZ2Vk
JFxuIgotICAgICAgICA6ICJpZiAoJG5hbWUkXyAhPSBudWxsKSB7XG4iCi0gICAgICAgICAgIiAg
JG5hbWUkXyA9XG4iCi0gICAgICAgICAgIiAgICAkdHlwZSQubmV3QnVpbGRlcigkbmFtZSRfKS5t
ZXJnZUZyb20odmFsdWUpLmJ1aWxkUGFydGlhbCgpO1xuIgotICAgICAgICAgICJ9IGVsc2Uge1xu
IgotICAgICAgICAgICIgICRuYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAgICAgICAifVxuIgotICAg
ICAgICAgICIkb25fY2hhbmdlZCRcbiIsCi0KLSAgICAiJG5hbWUkQnVpbGRlcl8ubWVyZ2VGcm9t
KHZhbHVlKTtcbiIsCi0KLSAgICAiJHNldF9oYXNfZmllbGRfYml0X2J1aWxkZXIkXG4iCi0gICAg
InJldHVybiB0aGlzO1xuIik7Ci0KLSAgLy8gRmllbGQuQnVpbGRlciBjbGVhckZpZWxkKCkKLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3Rl
ZEJ1aWxkZXJGdW5jdGlvbihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxk
ZXIgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSIsCi0KLSAgICAiJG5hbWUkXyA9IG51bGw7XG4i
Ci0gICAgIiRvbl9jaGFuZ2VkJFxuIiwKLQotICAgIHN1cHBvcnRfZmllbGRfcHJlc2VuY2UKLSAg
ICAgICAgPyAiJG5hbWUkQnVpbGRlcl8uY2xlYXIoKTtcbiIKLSAgICAgICAgOiAiJG5hbWUkXyA9
IG51bGw7XG4iCi0gICAgICAgICAgIiRuYW1lJEJ1aWxkZXJfID0gbnVsbDtcbiIsCi0KLSAgICAi
JGNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRlciRcbiIKLSAgICAicmV0dXJuIHRoaXM7XG4iKTsK
LQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkLkJ1
aWxkZXIgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnVpbGRlcigpIHtcbiIKLSAgICAiICAkc2V0X2hh
c19maWVsZF9iaXRfYnVpbGRlciRcbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAiICBy
ZXR1cm4gZ2V0JGNhcGl0YWxpemVkX25hbWUkRmllbGRCdWlsZGVyKCkuZ2V0QnVpbGRlcigpO1xu
IgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVi
bGljICR0eXBlJE9yQnVpbGRlciBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRPckJ1aWxkZXIoKSB7XG4i
Ci0gICAgIiAgaWYgKCRuYW1lJEJ1aWxkZXJfICE9IG51bGwpIHtcbiIKLSAgICAiICAgIHJldHVy
biAkbmFtZSRCdWlsZGVyXy5nZXRNZXNzYWdlT3JCdWlsZGVyKCk7XG4iCi0gICAgIiAgfSBlbHNl
IHtcbiIKLSAgICAiICAgIHJldHVybiAkbmFtZSRfID09IG51bGwgP1xuIgotICAgICIgICAgICAg
ICR0eXBlJC5nZXREZWZhdWx0SW5zdGFuY2UoKSA6ICRuYW1lJF87XG4iCi0gICAgIiAgfVxuIgot
ICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIGNvbS5nb29nbGUu
cHJvdG9idWYuU2luZ2xlRmllbGRCdWlsZGVyPFxuIgotICAgICIgICAgJHR5cGUkLCAkdHlwZSQu
QnVpbGRlciwgJHR5cGUkT3JCdWlsZGVyPiBcbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9u
YW1lJEZpZWxkQnVpbGRlcigpIHtcbiIKLSAgICAiICBpZiAoJG5hbWUkQnVpbGRlcl8gPT0gbnVs
bCkge1xuIgotICAgICIgICAgJG5hbWUkQnVpbGRlcl8gPSBuZXcgY29tLmdvb2dsZS5wcm90b2J1
Zi5TaW5nbGVGaWVsZEJ1aWxkZXI8XG4iCi0gICAgIiAgICAgICAgJHR5cGUkLCAkdHlwZSQuQnVp
bGRlciwgJHR5cGUkT3JCdWlsZGVyPihcbiIKLSAgICAiICAgICAgICAgICAgZ2V0JGNhcGl0YWxp
emVkX25hbWUkKCksXG4iCi0gICAgIiAgICAgICAgICAgIGdldFBhcmVudEZvckNoaWxkcmVuKCks
XG4iCi0gICAgIiAgICAgICAgICAgIGlzQ2xlYW4oKSk7XG4iCi0gICAgIiAgICAkbmFtZSRfID0g
bnVsbDtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJEJ1aWxkZXJfO1xuIgot
ICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpICBjb25zdCB7Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+Zmls
ZSgpKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiZ2V0JGNhcGl0
YWxpemVkX25hbWUkRmllbGRCdWlsZGVyKCk7XG4iKTsKLSAgfQotfQotCi0KLXZvaWQgSW1tdXRh
YmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW5pdGlhbGl6YXRpb25Db2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7fQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VGaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxl
KCkpKSB7Ci0gICAgUHJpbnROZXN0ZWRCdWlsZGVyQ29uZGl0aW9uKHByaW50ZXIsCi0gICAgICAi
JG5hbWUkXyA9IG51bGw7XG4iLAotCi0gICAgICAiJG5hbWUkQnVpbGRlcl8uY2xlYXIoKTtcbiIp
OwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICIkY2xlYXJfaGFzX2ZpZWxkX2JpdF9i
dWlsZGVyJFxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgUHJpbnROZXN0ZWRCdWlsZGVyQ29uZGl0aW9u
KHByaW50ZXIsCi0gICAgICAiJG5hbWUkXyA9IG51bGw7XG4iLAotCi0gICAgICAiJG5hbWUkXyA9
IG51bGw7XG4iCi0gICAgICAiJG5hbWUkQnVpbGRlcl8gPSBudWxsO1xuIik7Ci0gIH0KLX0KLQot
dm9pZCBJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZXJnaW5nQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICJpZiAob3RoZXIuaGFzJGNhcGl0YWxpemVkX25hbWUkKCkpIHtcbiIKLSAgICAi
ICBtZXJnZSRjYXBpdGFsaXplZF9uYW1lJChvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7
XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZUJ1aWxkaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qgewot
ICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiaWYgKCRnZXRfaGFzX2ZpZWxkX2Jp
dF9mcm9tX2xvY2FsJCkge1xuIgotICAgICAgICAiICAkc2V0X2hhc19maWVsZF9iaXRfdG9fbG9j
YWwkO1xuIgotICAgICAgICAifVxuIik7Ci0gIH0KLQotICBQcmludE5lc3RlZEJ1aWxkZXJDb25k
aXRpb24ocHJpbnRlciwKLSAgICAicmVzdWx0LiRuYW1lJF8gPSAkbmFtZSRfO1xuIiwKLQotICAg
ICJyZXN1bHQuJG5hbWUkXyA9ICRuYW1lJEJ1aWxkZXJfLmJ1aWxkKCk7XG4iKTsKLX0KLQotdm9p
ZCBJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICIkdHlwZSQuQnVpbGRlciBzdWJCdWlsZGVyID0gbnVsbDtcbiIKLSAgICAiaWYgKCRp
c19maWVsZF9wcmVzZW50X21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgc3ViQnVpbGRlciA9ICRuYW1l
JF8udG9CdWlsZGVyKCk7XG4iCi0gICAgIn1cbiIpOwotCi0gIGlmIChHZXRUeXBlKGRlc2NyaXB0
b3JfKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApIHsKLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICAgIiRuYW1lJF8gPSBpbnB1dC5yZWFkR3JvdXAoJG51bWJlciQs
ICR0eXBlJC5wYXJzZXIoKSxcbiIKLSAgICAgICIgICAgZXh0ZW5zaW9uUmVnaXN0cnkpO1xuIik7
Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkbmFt
ZSRfID0gaW5wdXQucmVhZE1lc3NhZ2UoJHR5cGUkLnBhcnNlcigpLCBleHRlbnNpb25SZWdpc3Ry
eSk7XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmIChz
dWJCdWlsZGVyICE9IG51bGwpIHtcbiIKLSAgICAiICBzdWJCdWlsZGVyLm1lcmdlRnJvbSgkbmFt
ZSRfKTtcbiIKLSAgICAiICAkbmFtZSRfID0gc3ViQnVpbGRlci5idWlsZFBhcnRpYWwoKTtcbiIK
LSAgICAifVxuIgotICAgICIkc2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSRcbiIpOwotfQotCi12
b2lkIEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdEb25l
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBub29wIGZvciBtZXNzYWdl
cy4KLX0KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVT
ZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoJGlzX2ZpZWxkX3ByZXNlbnRfbWVzc2FnZSQp
IHtcbiIKLSAgICAiICBvdXRwdXQud3JpdGUkZ3JvdXBfb3JfbWVzc2FnZSQoJG51bWJlciQsIGdl
dCRjYXBpdGFsaXplZF9uYW1lJCgpKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRh
YmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgImlmICgkaXNfZmllbGRfcHJlc2VudF9tZXNzYWdlJCkge1xuIgotICAgICIgIHNpemUg
Kz0gY29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAgICIgICAgLmNv
bXB1dGUkZ3JvdXBfb3JfbWVzc2FnZSRTaXplKCRudW1iZXIkLCBnZXQkY2FwaXRhbGl6ZWRfbmFt
ZSQoKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicmVzdWx0ID0gcmVzdWx0ICYm
IGdldCRjYXBpdGFsaXplZF9uYW1lJCgpXG4iCi0gICAgIiAgICAuZXF1YWxzKG90aGVyLmdldCRj
YXBpdGFsaXplZF9uYW1lJCgpKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VGaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImhhc2ggPSAoMzcgKiBoYXNo
KSArICRjb25zdGFudF9uYW1lJDtcbiIKLSAgICAiaGFzaCA9ICg1MyAqIGhhc2gpICsgZ2V0JGNh
cGl0YWxpemVkX25hbWUkKCkuaGFzaENvZGUoKTtcbiIpOwotfQotCi1zdHJpbmcgSW1tdXRhYmxl
TWVzc2FnZUZpZWxkR2VuZXJhdG9yOjpHZXRCb3hlZFR5cGUoKSBjb25zdCB7Ci0gIHJldHVybiBu
YW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5tZXNzYWdl
X3R5cGUoKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSW1tdXRhYmxlTWVzc2FnZU9uZW9mRmll
bGRHZW5lcmF0b3I6OgotSW1tdXRhYmxlTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3IoY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb250ZXh0KiBjb250ZXh0KQotICAgIDogSW1tdXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9y
KAotICAgICAgICAgIGRlc2NyaXB0b3IsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4
LCBjb250ZXh0KSB7Ci0gIGNvbnN0IE9uZW9mR2VuZXJhdG9ySW5mbyogaW5mbyA9Ci0gICAgICBj
b250ZXh0LT5HZXRPbmVvZkdlbmVyYXRvckluZm8oZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVv
ZigpKTsKLSAgU2V0Q29tbW9uT25lb2ZWYXJpYWJsZXMoZGVzY3JpcHRvciwgaW5mbywgJnZhcmlh
Ymxlc18pOwotfQotCi1JbW11dGFibGVNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1+SW1t
dXRhYmxlTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIEltbXV0YWJsZU1l
c3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3QgewotICBQcmludEV4dHJhRmllbGRJbmZvKHZhcmlhYmxlc18sIHByaW50
ZXIpOwotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsK
LSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xl
YW4gaGFzJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRoYXNfb25l
b2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1l
JCgpIHtcbiIKLSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAg
IiAgICAgcmV0dXJuICgkdHlwZSQpICRvbmVvZl9uYW1lJF87XG4iCi0gICAgIiAgfVxuIgotICAg
ICIgIHJldHVybiAkdHlwZSQuZ2V0RGVmYXVsdEluc3RhbmNlKCk7XG4iCi0gICAgIn1cbiIpOwot
Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSRPckJ1
aWxkZXIgZ2V0JGNhcGl0YWxpemVkX25hbWUkT3JCdWlsZGVyKCkge1xuIgotICAgICIgIGlmICgk
aGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIKLSAgICAiICAgICByZXR1cm4gKCR0eXBlJCkg
JG9uZW9mX25hbWUkXztcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgcmV0dXJuICR0eXBlJC5nZXRE
ZWZhdWx0SW5zdGFuY2UoKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWVz
c2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBXaGVuIHVzaW5nIG5lc3RlZC1idWlsZGVycywg
dGhlIGNvZGUgaW5pdGlhbGx5IHdvcmtzIGp1c3QgbGlrZSB0aGUKLSAgLy8gbm9uLW5lc3RlZCBi
dWlsZGVyIGNhc2UuIEl0IG9ubHkgY3JlYXRlcyBhIG5lc3RlZCBidWlsZGVyIGxhemlseSBvbgot
ICAvLyBkZW1hbmQgYW5kIHRoZW4gZm9yZXZlciBkZWxlZ2F0ZXMgdG8gaXQgYWZ0ZXIgY3JlYXRp
b24uCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgLy8gSWYgdGhpcyBidWlsZGVy
IGlzIG5vbi1udWxsLCBpdCBpcyB1c2VkIGFuZCB0aGUgb3RoZXIgZmllbGRzIGFyZQotICAgIC8v
IGlnbm9yZWQuCi0gICAgInByaXZhdGUgY29tLmdvb2dsZS5wcm90b2J1Zi5TaW5nbGVGaWVsZEJ1
aWxkZXI8XG4iCi0gICAgIiAgICAkdHlwZSQsICR0eXBlJC5CdWlsZGVyLCAkdHlwZSRPckJ1aWxk
ZXI+ICRuYW1lJEJ1aWxkZXJfOyIKLSAgICAiXG4iKTsKLQotICAvLyBUaGUgY29tbWVudHMgYWJv
dmUgdGhlIG1ldGhvZHMgYmVsb3cgYXJlIGJhc2VkIG9uIGEgaHlwb3RoZXRpY2FsCi0gIC8vIGZp
ZWxkIG9mIHR5cGUgIkZpZWxkIiBjYWxsZWQgIkZpZWxkIi4KLQotICBpZiAoU3VwcG9ydEZpZWxk
UHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICAvLyBib29sZWFuIGhhc0ZpZWxk
KCkKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJv
b2xlYW4gaGFzJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRoYXNf
b25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIC8vIEZpZWxk
IGdldEZpZWxkKCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBQcmludE5lc3RlZEJ1aWxkZXJGdW5jdGlvbihwcmludGVyLAotICAgICIkZGVwcmVjYXRp
b24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSIsCi0KLSAgICAiaWYgKCRo
YXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgIHJldHVybiAoJHR5cGUkKSAkb25l
b2ZfbmFtZSRfO1xuIgotICAgICJ9XG4iCi0gICAgInJldHVybiAkdHlwZSQuZ2V0RGVmYXVsdElu
c3RhbmNlKCk7XG4iLAotCi0gICAgImlmICgkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIK
LSAgICAiICByZXR1cm4gJG5hbWUkQnVpbGRlcl8uZ2V0TWVzc2FnZSgpO1xuIgotICAgICJ9XG4i
Ci0gICAgInJldHVybiAkdHlwZSQuZ2V0RGVmYXVsdEluc3RhbmNlKCk7XG4iLAotCi0gICAgTlVM
TCk7Ci0KLSAgLy8gRmllbGQuQnVpbGRlciBzZXRGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxk
ZXJGdW5jdGlvbihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0
JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkiLAotCi0gICAgImlmICh2YWx1ZSA9PSBu
dWxsKSB7XG4iCi0gICAgIiAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7XG4iCi0g
ICAgIn1cbiIKLSAgICAiJG9uZW9mX25hbWUkXyA9IHZhbHVlO1xuIgotICAgICIkb25fY2hhbmdl
ZCRcbiIsCi0KLSAgICAiJG5hbWUkQnVpbGRlcl8uc2V0TWVzc2FnZSh2YWx1ZSk7XG4iLAotCi0g
ICAgIiRzZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAicmV0dXJuIHRoaXM7XG4iKTsK
LQotICAvLyBGaWVsZC5CdWlsZGVyIHNldEZpZWxkKEZpZWxkLkJ1aWxkZXIgYnVpbGRlckZvclZh
bHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFBy
aW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJs
aWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICAkdHlwZSQuQnVp
bGRlciBidWlsZGVyRm9yVmFsdWUpIiwKLQotICAgICIkb25lb2ZfbmFtZSRfID0gYnVpbGRlckZv
clZhbHVlLmJ1aWxkKCk7XG4iCi0gICAgIiRvbl9jaGFuZ2VkJFxuIiwKLQotICAgICIkbmFtZSRC
dWlsZGVyXy5zZXRNZXNzYWdlKGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpKTtcbiIsCi0KLSAgICAi
JHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICJyZXR1cm4gdGhpcztcbiIpOwotCi0g
IC8vIEZpZWxkLkJ1aWxkZXIgbWVyZ2VGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERv
Y0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxkZXJGdW5j
dGlvbihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgbWVyZ2UkY2Fw
aXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSIsCi0KLSAgICAiaWYgKCRoYXNfb25lb2ZfY2Fz
ZV9tZXNzYWdlJCAmJlxuIgotICAgICIgICAgJG9uZW9mX25hbWUkXyAhPSAkdHlwZSQuZ2V0RGVm
YXVsdEluc3RhbmNlKCkpIHtcbiIKLSAgICAiICAkb25lb2ZfbmFtZSRfID0gJHR5cGUkLm5ld0J1
aWxkZXIoKCR0eXBlJCkgJG9uZW9mX25hbWUkXylcbiIKLSAgICAiICAgICAgLm1lcmdlRnJvbSh2
YWx1ZSkuYnVpbGRQYXJ0aWFsKCk7XG4iCi0gICAgIn0gZWxzZSB7XG4iCi0gICAgIiAgJG9uZW9m
X25hbWUkXyA9IHZhbHVlO1xuIgotICAgICJ9XG4iCi0gICAgIiRvbl9jaGFuZ2VkJFxuIiwKLQot
ICAgICJpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgJG5hbWUkQnVp
bGRlcl8ubWVyZ2VGcm9tKHZhbHVlKTtcbiIKLSAgICAifVxuIgotICAgICIkbmFtZSRCdWlsZGVy
Xy5zZXRNZXNzYWdlKHZhbHVlKTtcbiIsCi0KLSAgICAiJHNldF9vbmVvZl9jYXNlX21lc3NhZ2Uk
O1xuIgotICAgICJyZXR1cm4gdGhpcztcbiIpOwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIgY2xlYXJG
aWVsZCgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
UHJpbnROZXN0ZWRCdWlsZGVyRnVuY3Rpb24ocHJpbnRlciwKLSAgICAiJGRlcHJlY2F0aW9uJHB1
YmxpYyBCdWlsZGVyIGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkiLAotCi0gICAgImlmICgkaGFz
X29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIKLSAgICAiICAkY2xlYXJfb25lb2ZfY2FzZV9tZXNz
YWdlJDtcbiIKLSAgICAiICAkb25lb2ZfbmFtZSRfID0gbnVsbDtcbiIKLSAgICAiICAkb25fY2hh
bmdlZCRcbiIKLSAgICAifVxuIiwKLQotICAgICJpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2Uk
KSB7XG4iCi0gICAgIiAgJGNsZWFyX29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgIiAgJG9u
ZW9mX25hbWUkXyA9IG51bGw7XG4iCi0gICAgIn1cbiIKLSAgICAiJG5hbWUkQnVpbGRlcl8uY2xl
YXIoKTtcbiIsCi0KLSAgICAicmV0dXJuIHRoaXM7XG4iKTsKLQotICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkLkJ1aWxkZXIgZ2V0JGNhcGl0YWxpemVk
X25hbWUkQnVpbGRlcigpIHtcbiIKLSAgICAiICByZXR1cm4gZ2V0JGNhcGl0YWxpemVkX25hbWUk
RmllbGRCdWlsZGVyKCkuZ2V0QnVpbGRlcigpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVs
ZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJE9yQnVpbGRlciBnZXQkY2Fw
aXRhbGl6ZWRfbmFtZSRPckJ1aWxkZXIoKSB7XG4iCi0gICAgIiAgaWYgKCgkaGFzX29uZW9mX2Nh
c2VfbWVzc2FnZSQpICYmICgkbmFtZSRCdWlsZGVyXyAhPSBudWxsKSkge1xuIgotICAgICIgICAg
cmV0dXJuICRuYW1lJEJ1aWxkZXJfLmdldE1lc3NhZ2VPckJ1aWxkZXIoKTtcbiIKLSAgICAiICB9
IGVsc2Uge1xuIgotICAgICIgICAgaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgot
ICAgICIgICAgICByZXR1cm4gKCR0eXBlJCkgJG9uZW9mX25hbWUkXztcbiIKLSAgICAiICAgIH1c
biIKLSAgICAiICAgIHJldHVybiAkdHlwZSQuZ2V0RGVmYXVsdEluc3RhbmNlKCk7XG4iCi0gICAg
IiAgfVxuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIGNv
bS5nb29nbGUucHJvdG9idWYuU2luZ2xlRmllbGRCdWlsZGVyPFxuIgotICAgICIgICAgJHR5cGUk
LCAkdHlwZSQuQnVpbGRlciwgJHR5cGUkT3JCdWlsZGVyPiBcbiIKLSAgICAiICAgIGdldCRjYXBp
dGFsaXplZF9uYW1lJEZpZWxkQnVpbGRlcigpIHtcbiIKLSAgICAiICBpZiAoJG5hbWUkQnVpbGRl
cl8gPT0gbnVsbCkge1xuIgotICAgICIgICAgaWYgKCEoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2Uk
KSkge1xuIgotICAgICIgICAgICAkb25lb2ZfbmFtZSRfID0gJHR5cGUkLmdldERlZmF1bHRJbnN0
YW5jZSgpO1xuIgotICAgICIgICAgfVxuIgotICAgICIgICAgJG5hbWUkQnVpbGRlcl8gPSBuZXcg
Y29tLmdvb2dsZS5wcm90b2J1Zi5TaW5nbGVGaWVsZEJ1aWxkZXI8XG4iCi0gICAgIiAgICAgICAg
JHR5cGUkLCAkdHlwZSQuQnVpbGRlciwgJHR5cGUkT3JCdWlsZGVyPihcbiIKLSAgICAiICAgICAg
ICAgICAgKCR0eXBlJCkgJG9uZW9mX25hbWUkXyxcbiIKLSAgICAiICAgICAgICAgICAgZ2V0UGFy
ZW50Rm9yQ2hpbGRyZW4oKSxcbiIKLSAgICAiICAgICAgICAgICAgaXNDbGVhbigpKTtcbiIKLSAg
ICAiICAgICRvbmVvZl9uYW1lJF8gPSBudWxsO1xuIgotICAgICIgIH1cbiIKLSAgICAiICAkc2V0
X29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgIiAgJG9uX2NoYW5nZWQkO1xuIgotICAgICIg
IHJldHVybiAkbmFtZSRCdWlsZGVyXztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRh
YmxlTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGluZ0NvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICAgICAgICAgICAgICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIik7
Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIFByaW50TmVzdGVkQnVpbGRlckNvbmRpdGlvbihw
cmludGVyLAotICAgICJyZXN1bHQuJG9uZW9mX25hbWUkXyA9ICRvbmVvZl9uYW1lJF87XG4iLAot
Ci0gICAgInJlc3VsdC4kb25lb2ZfbmFtZSRfID0gJG5hbWUkQnVpbGRlcl8uYnVpbGQoKTtcbiIp
OwotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotfQot
Ci12b2lkIEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVy
Z2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAibWVyZ2UkY2FwaXRhbGl6ZWRfbmFtZSQob3RoZXIuZ2V0JGNhcGl0
YWxpemVkX25hbWUkKCkpO1xuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZU9uZW9mRmll
bGRHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkdHlwZSQuQnVpbGRl
ciBzdWJCdWlsZGVyID0gbnVsbDtcbiIKLSAgICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdl
JCkge1xuIgotICAgICIgIHN1YkJ1aWxkZXIgPSAoKCR0eXBlJCkgJG9uZW9mX25hbWUkXykudG9C
dWlsZGVyKCk7XG4iCi0gICAgIn1cbiIpOwotCi0gIGlmIChHZXRUeXBlKGRlc2NyaXB0b3JfKSA9
PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICAgIiRvbmVvZl9uYW1lJF8gPSBpbnB1dC5yZWFkR3JvdXAoJG51bWJlciQs
ICR0eXBlJC5wYXJzZXIoKSxcbiIKLSAgICAgICIgICAgZXh0ZW5zaW9uUmVnaXN0cnkpO1xuIik7
Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkb25l
b2ZfbmFtZSRfID1cbiIKLSAgICAgICIgICAgaW5wdXQucmVhZE1lc3NhZ2UoJHR5cGUkLnBhcnNl
cigpLCBleHRlbnNpb25SZWdpc3RyeSk7XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgImlmIChzdWJCdWlsZGVyICE9IG51bGwpIHtcbiIKLSAgICAiICBzdWJC
dWlsZGVyLm1lcmdlRnJvbSgoJHR5cGUkKSAkb25lb2ZfbmFtZSRfKTtcbiIKLSAgICAiICAkb25l
b2ZfbmFtZSRfID0gc3ViQnVpbGRlci5idWlsZFBhcnRpYWwoKTtcbiIKLSAgICAifVxuIik7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRzZXRfb25lb2ZfY2FzZV9tZXNzYWdl
JDtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoK
LUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9t
ZXNzYWdlJCkge1xuIgotICAgICIgIG91dHB1dC53cml0ZSRncm91cF9vcl9tZXNzYWdlJCgkbnVt
YmVyJCwgKCR0eXBlJCkgJG9uZW9mX25hbWUkXyk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lk
IEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXpl
ZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgImlmICgkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIKLSAg
ICAiICBzaXplICs9IGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRPdXRwdXRTdHJlYW1cbiIKLSAg
ICAiICAgIC5jb21wdXRlJGdyb3VwX29yX21lc3NhZ2UkU2l6ZSgkbnVtYmVyJCwgKCR0eXBlJCkg
JG9uZW9mX25hbWUkXyk7XG4iCi0gICAgIn1cbiIpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVJl
cGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLVJlcGVhdGVkSW1tdXRhYmxl
TWVzc2FnZUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlQml0SW5k
ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVpbGRlckJp
dEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCog
Y29udGV4dCkKLSAgOiBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSwgbWVzc2FnZUJpdEluZGV4Xyht
ZXNzYWdlQml0SW5kZXgpLAotICAgIGJ1aWxkZXJCaXRJbmRleF8oYnVpbGRlckJpdEluZGV4KSwg
Y29udGV4dF8oY29udGV4dCksCi0gICAgbmFtZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJl
c29sdmVyKCkpICB7Ci0gIFNldE1lc3NhZ2VWYXJpYWJsZXMoZGVzY3JpcHRvciwgbWVzc2FnZUJp
dEluZGV4LCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
R2V0RmllbGRHZW5lcmF0b3JJbmZvKGRlc2NyaXB0b3IpLAotICAgICAgICAgICAgICAgICAgICAg
IG5hbWVfcmVzb2x2ZXJfLCAmdmFyaWFibGVzXyk7Ci19Ci0KLVJlcGVhdGVkSW1tdXRhYmxlTWVz
c2FnZUZpZWxkR2VuZXJhdG9yOjoKLX5SZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVy
YXRvcigpIHt9Ci0KLWludCBSZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6
R2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25zdCB7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgUmVw
ZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OkdldE51bUJpdHNGb3JCdWlsZGVy
KCkgY29uc3QgewotICByZXR1cm4gMTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZU1lc3Nh
Z2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUludGVyZmFjZU1lbWJlcnMoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gVE9ETyhqb25wKTogSW4gdGhlIGZ1dHVyZSwgY29uc2lk
ZXIgaGF2aW5nIG1ldGhvZHMgc3BlY2lmaWMgdG8gdGhlCi0gIC8vIGludGVyZmFjZSBzbyB0aGF0
IGJ1aWxkZXJzIGNhbiBjaG9vc2UgZHluYW1pY2FsbHkgdG8gZWl0aGVyIHJldHVybiBhCi0gIC8v
IG1lc3NhZ2Ugb3IgYSBuZXN0ZWQgYnVpbGRlciwgc28gdGhhdCBhc2tpbmcgZm9yIHRoZSBpbnRl
cmZhY2UgZG9lc24ndAotICAvLyBjYXVzZSBhIG1lc3NhZ2UgdG8gZXZlciBiZSBidWlsdC4KLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kamF2YS51dGlsLkxpc3Q8JHR5cGUk
PiBcbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKTtcbiIpOwotICBXcml0
ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiQkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25h
bWUkKGludCBpbmRleCk7XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRp
b24kaW50IGdldCRjYXBpdGFsaXplZF9uYW1lJENvdW50KCk7XG4iKTsKLQotICBXcml0ZUZpZWxk
RG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRqYXZhLnV0aWwuTGlzdDw/IGV4dGVuZHMgJHR5cGUk
T3JCdWlsZGVyPiBcbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJE9yQnVpbGRlckxp
c3QoKTtcbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiQkdHlwZSRP
ckJ1aWxkZXIgZ2V0JGNhcGl0YWxpemVkX25hbWUkT3JCdWlsZGVyKFxuIgotICAgICIgICAgaW50
IGluZGV4KTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkR2Vu
ZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qgewot
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIGphdmEudXRpbC5MaXN0
PCR0eXBlJD4gJG5hbWUkXztcbiIpOwotICBQcmludEV4dHJhRmllbGRJbmZvKHZhcmlhYmxlc18s
IHByaW50ZXIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMg
amF2YS51dGlsLkxpc3Q8JHR5cGUkPiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkge1xuIgot
ICAgICIgIHJldHVybiAkbmFtZSRfO1xuIiAgIC8vIG5vdGU6ICB1bm1vZGlmaWFibGUgbGlzdAot
ICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGlj
IGphdmEudXRpbC5MaXN0PD8gZXh0ZW5kcyAkdHlwZSRPckJ1aWxkZXI+IFxuIgotICAgICIgICAg
Z2V0JGNhcGl0YWxpemVkX25hbWUkT3JCdWlsZGVyTGlzdCgpIHtcbiIKLSAgICAiICByZXR1cm4g
JG5hbWUkXztcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIs
IGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJl
Y2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVkX25hbWUkQ291bnQoKSB7XG4iCi0gICAg
IiAgcmV0dXJuICRuYW1lJF8uc2l6ZSgpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERv
Y0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFt
ZSQoaW50IGluZGV4KSB7XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF8uZ2V0KGluZGV4KTtcbiIK
LSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1Ymxp
YyAkdHlwZSRPckJ1aWxkZXIgZ2V0JGNhcGl0YWxpemVkX25hbWUkT3JCdWlsZGVyKFxuIgotICAg
ICIgICAgaW50IGluZGV4KSB7XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF8uZ2V0KGluZGV4KTtc
biIKLSAgICAifVxuIik7Ci0KLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVs
ZEdlbmVyYXRvcjo6UHJpbnROZXN0ZWRCdWlsZGVyQ29uZGl0aW9uKAotICAgIGlvOjpQcmludGVy
KiBwcmludGVyLAotICAgIGNvbnN0IGNoYXIqIHJlZ3VsYXJfY2FzZSwKLSAgICBjb25zdCBjaGFy
KiBuZXN0ZWRfYnVpbGRlcl9jYXNlKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sICJpZiAoJG5hbWUkQnVpbGRlcl8gPT0gbnVsbCkge1xuIik7Ci0gIHByaW50ZXItPkluZGVu
dCgpOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCByZWd1bGFyX2Nhc2UpOwotICBwcmlu
dGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9IGVsc2Uge1xuIik7Ci0gIHByaW50
ZXItPkluZGVudCgpOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCBuZXN0ZWRfYnVpbGRl
cl9jYXNlKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgifVxuIik7
Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OlByaW50
TmVzdGVkQnVpbGRlckZ1bmN0aW9uKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgIGNv
bnN0IGNoYXIqIG1ldGhvZF9wcm90b3R5cGUsCi0gICAgY29uc3QgY2hhciogcmVndWxhcl9jYXNl
LAotICAgIGNvbnN0IGNoYXIqIG5lc3RlZF9idWlsZGVyX2Nhc2UsCi0gICAgY29uc3QgY2hhciog
dHJhaWxpbmdfY29kZSkgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCBtZXRo
b2RfcHJvdG90eXBlKTsKLSAgcHJpbnRlci0+UHJpbnQoIiB7XG4iKTsKLSAgcHJpbnRlci0+SW5k
ZW50KCk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckNvbmRpdGlvbihwcmludGVyLCByZWd1bGFyX2Nh
c2UsIG5lc3RlZF9idWlsZGVyX2Nhc2UpOwotICBpZiAodHJhaWxpbmdfY29kZSAhPSBOVUxMKSB7
Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgdHJhaWxpbmdfY29kZSk7Ci0gIH0KLSAg
cHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQg
UmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVy
TWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBXaGVuIHVzaW5nIG5l
c3RlZC1idWlsZGVycywgdGhlIGNvZGUgaW5pdGlhbGx5IHdvcmtzIGp1c3QgbGlrZSB0aGUKLSAg
Ly8gbm9uLW5lc3RlZCBidWlsZGVyIGNhc2UuIEl0IG9ubHkgY3JlYXRlcyBhIG5lc3RlZCBidWls
ZGVyIGxhemlseSBvbgotICAvLyBkZW1hbmQgYW5kIHRoZW4gZm9yZXZlciBkZWxlZ2F0ZXMgdG8g
aXQgYWZ0ZXIgY3JlYXRpb24uCi0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAv
LyBVc2VkIHdoZW4gdGhlIGJ1aWxkZXIgaXMgbnVsbC4KLSAgICAvLyBPbmUgZmllbGQgaXMgdGhl
IGxpc3QgYW5kIHRoZSBvdGhlciBmaWVsZCBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZQotICAg
IC8vIGxpc3QgaXMgaW1tdXRhYmxlLiBJZiBpdCdzIGltbXV0YWJsZSwgdGhlIGludmFyaWFudCBp
cyB0aGF0IGl0IG11c3QKLSAgICAvLyBlaXRoZXIgYW4gaW5zdGFuY2Ugb2YgQ29sbGVjdGlvbnMu
ZW1wdHlMaXN0KCkgb3IgaXQncyBhbiBBcnJheUxpc3QKLSAgICAvLyB3cmFwcGVkIGluIGEgQ29s
bGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdCgpIHdyYXBwZXIgYW5kIG5vYm9keSBlbHNlIGhhcwot
ICAgIC8vIGEgcmVmZXJlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgQXJyYXlMaXN0LiBUaGlzIGlu
dmFyaWFudCBhbGxvd3MgdXMgdG8KLSAgICAvLyBzaGFyZSBpbnN0YW5jZXMgb2YgbGlzdHMgYmV0
d2VlbiBwcm90b2NvbCBidWZmZXJzIGF2b2lkaW5nIGV4cGVuc2l2ZQotICAgIC8vIG1lbW9yeSBh
bGxvY2F0aW9ucy4gTm90ZSwgaW1tdXRhYmxlIGlzIGEgc3Ryb25nIGd1YXJhbnRlZSBoZXJlIC0t
IG5vdAotICAgIC8vIGp1c3QgdGhhdCB0aGUgbGlzdCBjYW5ub3QgYmUgbW9kaWZpZWQgdmlhIHRo
ZSByZWZlcmVuY2UgYnV0IHRoYXQgdGhlCi0gICAgLy8gbGlzdCBjYW4gbmV2ZXIgYmUgbW9kaWZp
ZWQuCi0gICAgInByaXZhdGUgamF2YS51dGlsLkxpc3Q8JHR5cGUkPiAkbmFtZSRfID1cbiIKLSAg
ICAiICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7XG4iCi0KLSAgICAicHJpdmF0
ZSB2b2lkIGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpIHtcbiIKLSAgICAiICBp
ZiAoISRnZXRfbXV0YWJsZV9iaXRfYnVpbGRlciQpIHtcbiIKLSAgICAiICAgICRuYW1lJF8gPSBu
ZXcgamF2YS51dGlsLkFycmF5TGlzdDwkdHlwZSQ+KCRuYW1lJF8pO1xuIgotICAgICIgICAgJHNl
dF9tdXRhYmxlX2JpdF9idWlsZGVyJDtcbiIKLSAgICAiICAgfVxuIgotICAgICJ9XG4iCi0gICAg
IlxuIik7Ci0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAvLyBJZiB0aGlzIGJ1
aWxkZXIgaXMgbm9uLW51bGwsIGl0IGlzIHVzZWQgYW5kIHRoZSBvdGhlciBmaWVsZHMgYXJlCi0g
ICAgLy8gaWdub3JlZC4KLSAgICAicHJpdmF0ZSBjb20uZ29vZ2xlLnByb3RvYnVmLlJlcGVhdGVk
RmllbGRCdWlsZGVyPFxuIgotICAgICIgICAgJHR5cGUkLCAkdHlwZSQuQnVpbGRlciwgJHR5cGUk
T3JCdWlsZGVyPiAkbmFtZSRCdWlsZGVyXztcbiIKLSAgICAiXG4iKTsKLQotICAvLyBUaGUgY29t
bWVudHMgYWJvdmUgdGhlIG1ldGhvZHMgYmVsb3cgYXJlIGJhc2VkIG9uIGEgaHlwb3RoZXRpY2Fs
Ci0gIC8vIHJlcGVhdGVkIGZpZWxkIG9mIHR5cGUgIkZpZWxkIiBjYWxsZWQgIlJlcGVhdGVkRmll
bGQiLgotCi0gIC8vIExpc3Q8RmllbGQ+IGdldFJlcGVhdGVkRmllbGRMaXN0KCkKLSAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxk
ZXJGdW5jdGlvbihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRpbC5M
aXN0PCR0eXBlJD4gZ2V0JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpIiwKLQotICAgICJyZXR1cm4g
amF2YS51dGlsLkNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoJG5hbWUkXyk7XG4iLAotICAg
ICJyZXR1cm4gJG5hbWUkQnVpbGRlcl8uZ2V0TWVzc2FnZUxpc3QoKTtcbiIsCi0KLSAgICBOVUxM
KTsKLQotICAvLyBpbnQgZ2V0UmVwZWF0ZWRGaWVsZENvdW50KCkKLSAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxkZXJGdW5jdGlv
bihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGludCBnZXQkY2FwaXRhbGl6ZWRf
bmFtZSRDb3VudCgpIiwKLQotICAgICJyZXR1cm4gJG5hbWUkXy5zaXplKCk7XG4iLAotICAgICJy
ZXR1cm4gJG5hbWUkQnVpbGRlcl8uZ2V0Q291bnQoKTtcbiIsCi0KLSAgICBOVUxMKTsKLQotICAv
LyBGaWVsZCBnZXRSZXBlYXRlZEZpZWxkKGludCBpbmRleCkKLSAgV3JpdGVGaWVsZERvY0NvbW1l
bnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxkZXJGdW5jdGlvbihw
cmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRf
bmFtZSQoaW50IGluZGV4KSIsCi0KLSAgICAicmV0dXJuICRuYW1lJF8uZ2V0KGluZGV4KTtcbiIs
Ci0KLSAgICAicmV0dXJuICRuYW1lJEJ1aWxkZXJfLmdldE1lc3NhZ2UoaW5kZXgpO1xuIiwKLQot
ICAgIE5VTEwpOwotCi0gIC8vIEJ1aWxkZXIgc2V0UmVwZWF0ZWRGaWVsZChpbnQgaW5kZXgsIEZp
ZWxkIHZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlv
biRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICBpbnQg
aW5kZXgsICR0eXBlJCB2YWx1ZSkiLAotICAgICJpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAg
ICIgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpO1xuIgotICAgICJ9XG4iCi0gICAg
ImVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIkbmFtZSRfLnNl
dChpbmRleCwgdmFsdWUpO1xuIgotICAgICIkb25fY2hhbmdlZCRcbiIsCi0gICAgIiRuYW1lJEJ1
aWxkZXJfLnNldE1lc3NhZ2UoaW5kZXgsIHZhbHVlKTtcbiIsCi0gICAgInJldHVybiB0aGlzO1xu
Iik7Ci0KLSAgLy8gQnVpbGRlciBzZXRSZXBlYXRlZEZpZWxkKGludCBpbmRleCwgRmllbGQuQnVp
bGRlciBidWlsZGVyRm9yVmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRl
c2NyaXB0b3JfKTsKLSAgUHJpbnROZXN0ZWRCdWlsZGVyRnVuY3Rpb24ocHJpbnRlciwKLSAgICAi
JGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAg
ICAiICAgIGludCBpbmRleCwgJHR5cGUkLkJ1aWxkZXIgYnVpbGRlckZvclZhbHVlKSIsCi0KLSAg
ICAiZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiRuYW1lJF8u
c2V0KGluZGV4LCBidWlsZGVyRm9yVmFsdWUuYnVpbGQoKSk7XG4iCi0gICAgIiRvbl9jaGFuZ2Vk
JFxuIiwKLQotICAgICIkbmFtZSRCdWlsZGVyXy5zZXRNZXNzYWdlKGluZGV4LCBidWlsZGVyRm9y
VmFsdWUuYnVpbGQoKSk7XG4iLAotCi0gICAgInJldHVybiB0aGlzO1xuIik7Ci0KLSAgLy8gQnVp
bGRlciBhZGRSZXBlYXRlZEZpZWxkKEZpZWxkIHZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVu
dChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHBy
aW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRf
bmFtZSQoJHR5cGUkIHZhbHVlKSIsCi0KLSAgICAiaWYgKHZhbHVlID09IG51bGwpIHtcbiIKLSAg
ICAiICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTtcbiIKLSAgICAifVxuIgotICAg
ICJlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAiJG5hbWUkXy5h
ZGQodmFsdWUpO1xuIgotCi0gICAgIiRvbl9jaGFuZ2VkJFxuIiwKLQotICAgICIkbmFtZSRCdWls
ZGVyXy5hZGRNZXNzYWdlKHZhbHVlKTtcbiIsCi0KLSAgICAicmV0dXJuIHRoaXM7XG4iKTsKLQot
ICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVkRmllbGQoaW50IGluZGV4LCBGaWVsZCB2YWx1ZSkKLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3Rl
ZEJ1aWxkZXJGdW5jdGlvbihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxk
ZXIgYWRkJGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQg
dmFsdWUpIiwKLQotICAgICJpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICIgIHRocm93IG5l
dyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpO1xuIgotICAgICJ9XG4iCi0gICAgImVuc3VyZSRjYXBp
dGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIkbmFtZSRfLmFkZChpbmRleCwgdmFs
dWUpO1xuIgotICAgICIkb25fY2hhbmdlZCRcbiIsCi0KLSAgICAiJG5hbWUkQnVpbGRlcl8uYWRk
TWVzc2FnZShpbmRleCwgdmFsdWUpO1xuIiwKLQotICAgICJyZXR1cm4gdGhpcztcbiIpOwotCi0g
IC8vIEJ1aWxkZXIgYWRkUmVwZWF0ZWRGaWVsZChGaWVsZC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1
ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBQcmlu
dE5lc3RlZEJ1aWxkZXJGdW5jdGlvbihwcmludGVyLAotICAgICIkZGVwcmVjYXRpb24kcHVibGlj
IEJ1aWxkZXIgYWRkJGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgJHR5cGUkLkJ1aWxk
ZXIgYnVpbGRlckZvclZhbHVlKSIsCi0KLSAgICAiZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNN
dXRhYmxlKCk7XG4iCi0gICAgIiRuYW1lJF8uYWRkKGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpKTtc
biIKLSAgICAiJG9uX2NoYW5nZWQkXG4iLAotCi0gICAgIiRuYW1lJEJ1aWxkZXJfLmFkZE1lc3Nh
Z2UoYnVpbGRlckZvclZhbHVlLmJ1aWxkKCkpO1xuIiwKLQotICAgICJyZXR1cm4gdGhpcztcbiIp
OwotCi0gIC8vIEJ1aWxkZXIgYWRkUmVwZWF0ZWRGaWVsZChpbnQgaW5kZXgsIEZpZWxkLkJ1aWxk
ZXIgYnVpbGRlckZvclZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAg
IiAgICBpbnQgaW5kZXgsICR0eXBlJC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkiLAotCi0gICAg
ImVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIkbmFtZSRfLmFk
ZChpbmRleCwgYnVpbGRlckZvclZhbHVlLmJ1aWxkKCkpO1xuIgotICAgICIkb25fY2hhbmdlZCRc
biIsCi0KLSAgICAiJG5hbWUkQnVpbGRlcl8uYWRkTWVzc2FnZShpbmRleCwgYnVpbGRlckZvclZh
bHVlLmJ1aWxkKCkpO1xuIiwKLQotICAgICJyZXR1cm4gdGhpcztcbiIpOwotCi0gIC8vIEJ1aWxk
ZXIgYWRkQWxsUmVwZWF0ZWRGaWVsZChJdGVyYWJsZTxGaWVsZD4gdmFsdWVzKQotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVzdGVkQnVpbGRl
ckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBhZGRB
bGwkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICBqYXZhLmxhbmcuSXRlcmFibGU8PyBl
eHRlbmRzICR0eXBlJD4gdmFsdWVzKSIsCi0KLSAgICAiZW5zdXJlJGNhcGl0YWxpemVkX25hbWUk
SXNNdXRhYmxlKCk7XG4iCi0gICAgImNvbS5nb29nbGUucHJvdG9idWYuQWJzdHJhY3RNZXNzYWdl
TGl0ZS5CdWlsZGVyLmFkZEFsbChcbiIKLSAgICAiICAgIHZhbHVlcywgJG5hbWUkXyk7XG4iCi0g
ICAgIiRvbl9jaGFuZ2VkJFxuIiwKLQotICAgICIkbmFtZSRCdWlsZGVyXy5hZGRBbGxNZXNzYWdl
cyh2YWx1ZXMpO1xuIiwKLQotICAgICJyZXR1cm4gdGhpcztcbiIpOwotCi0gIC8vIEJ1aWxkZXIg
Y2xlYXJBbGxSZXBlYXRlZEZpZWxkKCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICBQcmludE5lc3RlZEJ1aWxkZXJGdW5jdGlvbihwcmludGVyLAotICAg
ICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSIs
Ci0KLSAgICAiJG5hbWUkXyA9IGphdmEudXRpbC5Db2xsZWN0aW9ucy5lbXB0eUxpc3QoKTtcbiIK
LSAgICAiJGNsZWFyX211dGFibGVfYml0X2J1aWxkZXIkO1xuIgotICAgICIkb25fY2hhbmdlZCRc
biIsCi0KLSAgICAiJG5hbWUkQnVpbGRlcl8uY2xlYXIoKTtcbiIsCi0KLSAgICAicmV0dXJuIHRo
aXM7XG4iKTsKLQotICAvLyBCdWlsZGVyIHJlbW92ZVJlcGVhdGVkRmllbGQoaW50IGluZGV4KQot
ICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIFByaW50TmVz
dGVkQnVpbGRlckZ1bmN0aW9uKHByaW50ZXIsCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVp
bGRlciByZW1vdmUkY2FwaXRhbGl6ZWRfbmFtZSQoaW50IGluZGV4KSIsCi0KLSAgICAiZW5zdXJl
JGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiRuYW1lJF8ucmVtb3ZlKGlu
ZGV4KTtcbiIKLSAgICAiJG9uX2NoYW5nZWQkXG4iLAotCi0gICAgIiRuYW1lJEJ1aWxkZXJfLnJl
bW92ZShpbmRleCk7XG4iLAotCi0gICAgInJldHVybiB0aGlzO1xuIik7Ci0KLSAgV3JpdGVGaWVs
ZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJC5CdWlsZGVyIGdldCRjYXBp
dGFsaXplZF9uYW1lJEJ1aWxkZXIoXG4iCi0gICAgIiAgICBpbnQgaW5kZXgpIHtcbiIKLSAgICAi
ICByZXR1cm4gZ2V0JGNhcGl0YWxpemVkX25hbWUkRmllbGRCdWlsZGVyKCkuZ2V0QnVpbGRlcihp
bmRleCk7XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIs
IGRlc2NyaXB0b3JfKTsKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkT3JCdWlsZGVyIGdldCRjYXBpdGFsaXplZF9uYW1lJE9y
QnVpbGRlcihcbiIKLSAgICAiICAgIGludCBpbmRleCkge1xuIgotICAgICIgIGlmICgkbmFtZSRC
dWlsZGVyXyA9PSBudWxsKSB7XG4iCi0gICAgIiAgICByZXR1cm4gJG5hbWUkXy5nZXQoaW5kZXgp
OyIKLSAgICAiICB9IGVsc2Uge1xuIgotICAgICIgICAgcmV0dXJuICRuYW1lJEJ1aWxkZXJfLmdl
dE1lc3NhZ2VPckJ1aWxkZXIoaW5kZXgpO1xuIgotICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci0K
LSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgICAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZhLnV0
aWwuTGlzdDw/IGV4dGVuZHMgJHR5cGUkT3JCdWlsZGVyPiBcbiIKLSAgICAiICAgICBnZXQkY2Fw
aXRhbGl6ZWRfbmFtZSRPckJ1aWxkZXJMaXN0KCkge1xuIgotICAgICIgIGlmICgkbmFtZSRCdWls
ZGVyXyAhPSBudWxsKSB7XG4iCi0gICAgIiAgICByZXR1cm4gJG5hbWUkQnVpbGRlcl8uZ2V0TWVz
c2FnZU9yQnVpbGRlckxpc3QoKTtcbiIKLSAgICAiICB9IGVsc2Uge1xuIgotICAgICIgICAgcmV0
dXJuIGphdmEudXRpbC5Db2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KCRuYW1lJF8pO1xuIgot
ICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
JGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQuQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSRC
dWlsZGVyKCkge1xuIgotICAgICIgIHJldHVybiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRGaWVsZEJ1
aWxkZXIoKS5hZGRCdWlsZGVyKFxuIgotICAgICIgICAgICAkdHlwZSQuZ2V0RGVmYXVsdEluc3Rh
bmNlKCkpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRl
cHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQuQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSRCdWls
ZGVyKFxuIgotICAgICIgICAgaW50IGluZGV4KSB7XG4iCi0gICAgIiAgcmV0dXJuIGdldCRjYXBp
dGFsaXplZF9uYW1lJEZpZWxkQnVpbGRlcigpLmFkZEJ1aWxkZXIoXG4iCi0gICAgIiAgICAgIGlu
ZGV4LCAkdHlwZSQuZ2V0RGVmYXVsdEluc3RhbmNlKCkpO1xuIgotICAgICJ9XG4iKTsKLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZhLnV0aWwuTGlz
dDwkdHlwZSQuQnVpbGRlcj4gXG4iCi0gICAgIiAgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnVp
bGRlckxpc3QoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGdldCRjYXBpdGFsaXplZF9uYW1lJEZpZWxk
QnVpbGRlcigpLmdldEJ1aWxkZXJMaXN0KCk7XG4iCi0gICAgIn1cbiIKLSAgICAicHJpdmF0ZSBj
b20uZ29vZ2xlLnByb3RvYnVmLlJlcGVhdGVkRmllbGRCdWlsZGVyPFxuIgotICAgICIgICAgJHR5
cGUkLCAkdHlwZSQuQnVpbGRlciwgJHR5cGUkT3JCdWlsZGVyPiBcbiIKLSAgICAiICAgIGdldCRj
YXBpdGFsaXplZF9uYW1lJEZpZWxkQnVpbGRlcigpIHtcbiIKLSAgICAiICBpZiAoJG5hbWUkQnVp
bGRlcl8gPT0gbnVsbCkge1xuIgotICAgICIgICAgJG5hbWUkQnVpbGRlcl8gPSBuZXcgY29tLmdv
b2dsZS5wcm90b2J1Zi5SZXBlYXRlZEZpZWxkQnVpbGRlcjxcbiIKLSAgICAiICAgICAgICAkdHlw
ZSQsICR0eXBlJC5CdWlsZGVyLCAkdHlwZSRPckJ1aWxkZXI+KFxuIgotICAgICIgICAgICAgICAg
ICAkbmFtZSRfLFxuIgotICAgICIgICAgICAgICAgICAkZ2V0X211dGFibGVfYml0X2J1aWxkZXIk
LFxuIgotICAgICIgICAgICAgICAgICBnZXRQYXJlbnRGb3JDaGlsZHJlbigpLFxuIgotICAgICIg
ICAgICAgICAgICBpc0NsZWFuKCkpO1xuIgotICAgICIgICAgJG5hbWUkXyA9IG51bGw7XG4iCi0g
ICAgIiAgfVxuIgotICAgICIgIHJldHVybiAkbmFtZSRCdWlsZGVyXztcbiIKLSAgICAifVxuIik7
Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
ICBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImdldCRjYXBpdGFs
aXplZF9uYW1lJEZpZWxkQnVpbGRlcigpO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFi
bGVNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywg
IiRuYW1lJF8gPSBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7XG4iKTsKLX0KLQot
dm9pZCBSZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1
aWxkZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgUHJpbnROZXN0
ZWRCdWlsZGVyQ29uZGl0aW9uKHByaW50ZXIsCi0gICAgIiRuYW1lJF8gPSBqYXZhLnV0aWwuQ29s
bGVjdGlvbnMuZW1wdHlMaXN0KCk7XG4iCi0gICAgIiRjbGVhcl9tdXRhYmxlX2JpdF9idWlsZGVy
JDtcbiIsCi0KLSAgICAiJG5hbWUkQnVpbGRlcl8uY2xlYXIoKTtcbiIpOwotfQotCi12b2lkIFJl
cGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVyZ2luZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gVGhlIGNvZGUgYmVsb3cgZG9l
cyB0d28gb3B0aW1pemF0aW9ucyAobm9uLW5lc3RlZCBidWlsZGVyIGNhc2UpOgotICAvLyAgIDEu
IElmIHRoZSBvdGhlciBsaXN0IGlzIGVtcHR5LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uIFRoaXMg
ZW5zdXJlcyB3ZQotICAvLyAgICAgIGRvbid0IGFsbG9jYXRlIGEgbmV3IGFycmF5IGlmIHdlIGFs
cmVhZHkgaGF2ZSBhbiBpbW11dGFibGUgb25lLgotICAvLyAgIDIuIElmIHRoZSBvdGhlciBsaXN0
IGlzIG5vbi1lbXB0eSBhbmQgb3VyIGN1cnJlbnQgbGlzdCBpcyBlbXB0eSwgd2UgY2FuCi0gIC8v
ICAgICAgcmV1c2UgdGhlIG90aGVyIGxpc3Qgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBpbW11
dGFibGUuCi0gIFByaW50TmVzdGVkQnVpbGRlckNvbmRpdGlvbihwcmludGVyLAotICAgICJpZiAo
IW90aGVyLiRuYW1lJF8uaXNFbXB0eSgpKSB7XG4iCi0gICAgIiAgaWYgKCRuYW1lJF8uaXNFbXB0
eSgpKSB7XG4iCi0gICAgIiAgICAkbmFtZSRfID0gb3RoZXIuJG5hbWUkXztcbiIKLSAgICAiICAg
ICRjbGVhcl9tdXRhYmxlX2JpdF9idWlsZGVyJDtcbiIKLSAgICAiICB9IGVsc2Uge1xuIgotICAg
ICIgICAgZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgICAk
bmFtZSRfLmFkZEFsbChvdGhlci4kbmFtZSRfKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgJG9u
X2NoYW5nZWQkXG4iCi0gICAgIn1cbiIsCi0KLSAgICAiaWYgKCFvdGhlci4kbmFtZSRfLmlzRW1w
dHkoKSkge1xuIgotICAgICIgIGlmICgkbmFtZSRCdWlsZGVyXy5pc0VtcHR5KCkpIHtcbiIKLSAg
ICAiICAgICRuYW1lJEJ1aWxkZXJfLmRpc3Bvc2UoKTtcbiIKLSAgICAiICAgICRuYW1lJEJ1aWxk
ZXJfID0gbnVsbDtcbiIKLSAgICAiICAgICRuYW1lJF8gPSBvdGhlci4kbmFtZSRfO1xuIgotICAg
ICIgICAgJGNsZWFyX211dGFibGVfYml0X2J1aWxkZXIkO1xuIgotICAgICIgICAgJG5hbWUkQnVp
bGRlcl8gPSBcbiIKLSAgICAiICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNz
YWdlLmFsd2F5c1VzZUZpZWxkQnVpbGRlcnMgP1xuIgotICAgICIgICAgICAgICBnZXQkY2FwaXRh
bGl6ZWRfbmFtZSRGaWVsZEJ1aWxkZXIoKSA6IG51bGw7XG4iCi0gICAgIiAgfSBlbHNlIHtcbiIK
LSAgICAiICAgICRuYW1lJEJ1aWxkZXJfLmFkZEFsbE1lc3NhZ2VzKG90aGVyLiRuYW1lJF8pO1xu
IgotICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVN
ZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGluZ0NvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gVGhlIGNvZGUgYmVsb3cgKG5vbi1uZXN0ZWQgYnVpbGRl
ciBjYXNlKSBlbnN1cmVzIHRoYXQgdGhlIHJlc3VsdCBoYXMgYW4KLSAgLy8gaW1tdXRhYmxlIGxp
c3QuIElmIG91ciBsaXN0IGlzIGltbXV0YWJsZSwgd2UgY2FuIGp1c3QgcmV1c2UgaXQuIElmIG5v
dCwKLSAgLy8gd2UgbWFrZSBpdCBpbW11dGFibGUuCi0gIFByaW50TmVzdGVkQnVpbGRlckNvbmRp
dGlvbihwcmludGVyLAotICAgICJpZiAoJGdldF9tdXRhYmxlX2JpdF9idWlsZGVyJCkge1xuIgot
ICAgICIgICRuYW1lJF8gPSBqYXZhLnV0aWwuQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdCgk
bmFtZSRfKTtcbiIKLSAgICAiICAkY2xlYXJfbXV0YWJsZV9iaXRfYnVpbGRlciQ7XG4iCi0gICAg
In1cbiIKLSAgICAicmVzdWx0LiRuYW1lJF8gPSAkbmFtZSRfO1xuIiwKLQotICAgICJyZXN1bHQu
JG5hbWUkXyA9ICRuYW1lJEJ1aWxkZXJfLmJ1aWxkKCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRl
ZEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgImlmICghJGdldF9tdXRhYmxlX2JpdF9wYXJzZXIkKSB7XG4iCi0gICAgIiAgJG5hbWUk
XyA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0PCR0eXBlJD4oKTtcbiIKLSAgICAiICAkc2V0X211
dGFibGVfYml0X3BhcnNlciQ7XG4iCi0gICAgIn1cbiIpOwotCi0gIGlmIChHZXRUeXBlKGRlc2Ny
aXB0b3JfKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApIHsKLSAgICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICAgIiRuYW1lJF8uYWRkKGlucHV0LnJlYWRHcm91cCgkbnVt
YmVyJCwgJHR5cGUkLnBhcnNlcigpLFxuIgotICAgICAgIiAgICBleHRlbnNpb25SZWdpc3RyeSkp
O1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAg
ICIkbmFtZSRfLmFkZChpbnB1dC5yZWFkTWVzc2FnZSgkdHlwZSQucGFyc2VyKCksIGV4dGVuc2lv
blJlZ2lzdHJ5KSk7XG4iKTsKLSAgfQotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlTWVzc2Fn
ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0RvbmVDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICgk
Z2V0X211dGFibGVfYml0X3BhcnNlciQpIHtcbiIKLSAgICAiICAkbmFtZSRfID0gamF2YS51dGls
LkNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoJG5hbWUkXyk7XG4iCi0gICAgIn1cbiIpOwot
fQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVy
YXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiZm9yIChpbnQgaSA9IDA7IGkgPCAkbmFtZSRf
LnNpemUoKTsgaSsrKSB7XG4iCi0gICAgIiAgb3V0cHV0LndyaXRlJGdyb3VwX29yX21lc3NhZ2Uk
KCRudW1iZXIkLCAkbmFtZSRfLmdldChpKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJl
cGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXpl
ZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgImZvciAoaW50IGkgPSAwOyBpIDwgJG5hbWUkXy5zaXplKCk7IGkr
Kykge1xuIgotICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0
cmVhbVxuIgotICAgICIgICAgLmNvbXB1dGUkZ3JvdXBfb3JfbWVzc2FnZSRTaXplKCRudW1iZXIk
LCAkbmFtZSRfLmdldChpKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1t
dXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICJyZXN1bHQgPSByZXN1bHQgJiYgZ2V0JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpXG4iCi0gICAg
IiAgICAuZXF1YWxzKG90aGVyLmdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKSk7XG4iKTsKLX0K
LQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgImlmIChnZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpID4gMCkg
e1xuIgotICAgICIgIGhhc2ggPSAoMzcgKiBoYXNoKSArICRjb25zdGFudF9uYW1lJDtcbiIKLSAg
ICAiICBoYXNoID0gKDUzICogaGFzaCkgKyBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkuaGFz
aENvZGUoKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXN0cmluZyBSZXBlYXRlZEltbXV0YWJsZU1l
c3NhZ2VGaWVsZEdlbmVyYXRvcjo6R2V0Qm94ZWRUeXBlKCkgY29uc3QgewotICByZXR1cm4gbmFt
ZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXy0+bWVzc2FnZV90
eXBlKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBp
bGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9m
aWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2Zp
ZWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODIyNWE1ZmFhNjMwOTdhMWUz
ZjZmNDk2MmM5NWE5NjY4NzljMWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdl
X2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRv
biBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBi
eQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaWZuZGVm
IEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX01FU1NBR0VfRklFTERfSF9fCi0jZGVmaW5l
IEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX01FU1NBR0VfRklFTERfSF9fCi0KLSNpbmNs
dWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3Bh
Y2UgcHJvdG9idWYgewotICBuYW1lc3BhY2UgY29tcGlsZXIgewotICAgIG5hbWVzcGFjZSBqYXZh
IHsKLSAgICAgIGNsYXNzIENvbnRleHQ7ICAgICAgICAgICAvLyBjb250ZXh0LmgKLSAgICAgIGNs
YXNzIENsYXNzTmFtZVJlc29sdmVyOyAvLyBuYW1lX3Jlc29sdmVyLmgKLSAgICB9Ci0gIH0KLX0K
LQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ug
amF2YSB7Ci0KLWNsYXNzIEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBJ
bW11dGFibGVGaWVsZEdlbmVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBJbW11dGFibGVN
ZXNzYWdlRmllbGRHZW5lcmF0b3IoCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICBpbnQgYnVpbGRlckJpdEluZGV4LCBD
b250ZXh0KiBjb250ZXh0KTsKLSAgfkltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvcigpOwot
Ci0gIC8vIGltcGxlbWVudHMgSW1tdXRhYmxlRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGludCBHZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNv
bnN0OwotICBpbnQgR2V0TnVtQml0c0ZvckJ1aWxkZXIoKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZUludGVyZmFjZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2Vu
ZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2
b2lkIEdlbmVyYXRlQnVpbGRlckNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0RvbmVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFsaXph
dGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRXF1
YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVIYXNo
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSAgc3RyaW5nIEdldEJveGVkVHlw
ZSgpIGNvbnN0OwotCi0gcHJvdGVjdGVkOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0gIGNvbnN0IGludCBt
ZXNzYWdlQml0SW5kZXhfOwotICBjb25zdCBpbnQgYnVpbGRlckJpdEluZGV4XzsKLSAgQ29udGV4
dCogY29udGV4dF87Ci0gIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLQotICB2
b2lkIFByaW50TmVzdGVkQnVpbGRlckNvbmRpdGlvbihpbzo6UHJpbnRlciogcHJpbnRlciwKLSAg
ICAgIGNvbnN0IGNoYXIqIHJlZ3VsYXJfY2FzZSwgY29uc3QgY2hhciogbmVzdGVkX2J1aWxkZXJf
Y2FzZSkgY29uc3Q7Ci0gIHZvaWQgUHJpbnROZXN0ZWRCdWlsZGVyRnVuY3Rpb24oaW86OlByaW50
ZXIqIHByaW50ZXIsCi0gICAgICBjb25zdCBjaGFyKiBtZXRob2RfcHJvdG90eXBlLCBjb25zdCBj
aGFyKiByZWd1bGFyX2Nhc2UsCi0gICAgICBjb25zdCBjaGFyKiBuZXN0ZWRfYnVpbGRlcl9jYXNl
LAotICAgICAgY29uc3QgY2hhciogdHJhaWxpbmdfY29kZSkgY29uc3Q7Ci0KLSBwcml2YXRlOgot
ICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoSW1tdXRhYmxlTWVzc2FnZUZpZWxk
R2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJh
dG9yCi0gICAgOiBwdWJsaWMgSW1tdXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yIHsKLSBwdWJs
aWM6Ci0gIEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yKAotICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAg
aW50IGJ1aWxkZXJCaXRJbmRleCwgQ29udGV4dCogY29udGV4dCk7Ci0gIH5JbW11dGFibGVNZXNz
YWdlT25lb2ZGaWVsZEdlbmVyYXRvcigpOwotCi0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkaW5nQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9u
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxp
emVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAg
R09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZp
ZWxkR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIFJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxk
R2VuZXJhdG9yIDogcHVibGljIEltbXV0YWJsZUZpZWxkR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0g
IGV4cGxpY2l0IFJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkR2VuZXJhdG9yKAotICAgICAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQgbWVzc2FnZUJpdEluZGV4LAot
ICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwgQ29udGV4dCogY29udGV4dCk7Ci0gIH5SZXBlYXRl
ZEltbXV0YWJsZU1lc3NhZ2VGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8vIGltcGxlbWVudHMgSW1t
dXRhYmxlRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gIGludCBHZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNvbnN0OwotICBpbnQgR2V0TnVtQml0
c0ZvckJ1aWxkZXIoKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUludGVyZmFjZU1lbWJlcnMoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVtYmVycyhpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbml0aWFsaXphdGlvbkNv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRlckNs
ZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZXJn
aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWls
ZGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFy
c2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFy
c2luZ0RvbmVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBH
ZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVIYXNoQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0KLSAgc3RyaW5nIEdldEJveGVkVHlwZSgpIGNvbnN0OwotCi0gcHJvdGVj
dGVkOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5n
LCBzdHJpbmc+IHZhcmlhYmxlc187Ci0gIGNvbnN0IGludCBtZXNzYWdlQml0SW5kZXhfOwotICBj
b25zdCBpbnQgYnVpbGRlckJpdEluZGV4XzsKLSAgQ29udGV4dCogY29udGV4dF87Ci0gIENsYXNz
TmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLQotICB2b2lkIFByaW50TmVzdGVkQnVpbGRl
ckNvbmRpdGlvbihpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgIGNvbnN0IGNoYXIqIHJlZ3Vs
YXJfY2FzZSwgY29uc3QgY2hhciogbmVzdGVkX2J1aWxkZXJfY2FzZSkgY29uc3Q7Ci0gIHZvaWQg
UHJpbnROZXN0ZWRCdWlsZGVyRnVuY3Rpb24oaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICBj
b25zdCBjaGFyKiBtZXRob2RfcHJvdG90eXBlLCBjb25zdCBjaGFyKiByZWd1bGFyX2Nhc2UsCi0g
ICAgICBjb25zdCBjaGFyKiBuZXN0ZWRfYnVpbGRlcl9jYXNlLAotICAgICAgY29uc3QgY2hhciog
dHJhaWxpbmdfY29kZSkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoUmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRHZW5lcmF0b3IpOwot
fTsKLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAg
Ly8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAg
Ly8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfTUVTU0FHRV9GSUVMRF9IX18KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9maWVs
ZF9saXRlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdl
X2ZpZWxkX2xpdGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MjgxODE2OWRi
Y2YxN2YwN2Q3ZmMzZGY5ZDBhNjZlMTg3ZmY5Y2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2
YV9tZXNzYWdlX2ZpZWxkX2xpdGUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw5NDEgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdv
b2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBC
dWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3Ro
ZXJzLgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfY29udGV4dC5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9maWVsZF9saXRlLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNv
bHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJv
dG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhIHsKLQotbmFtZXNw
YWNlIHsKLQotdm9pZCBTZXRNZXNzYWdlVmFyaWFibGVzKGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZUJpdEluZGV4
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGRHZW5lcmF0b3JJbmZvKiBpbmZvLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0cmluZz4qIHZhcmlhYmxlcykgewot
ICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhkZXNjcmlwdG9yLCBpbmZvLCB2YXJpYWJsZXMpOwot
Ci0gICgqdmFyaWFibGVzKVsidHlwZSJdID0KLSAgICAgIG5hbWVfcmVzb2x2ZXItPkdldEltbXV0
YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKSk7Ci0gICgqdmFyaWFibGVz
KVsibXV0YWJsZV90eXBlIl0gPQotICAgICAgbmFtZV9yZXNvbHZlci0+R2V0TXV0YWJsZUNsYXNz
TmFtZShkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKSk7Ci0gICgqdmFyaWFibGVzKVsiZ3JvdXBf
b3JfbWVzc2FnZSJdID0KLSAgICAoR2V0VHlwZShkZXNjcmlwdG9yKSA9PSBGaWVsZERlc2NyaXB0
b3I6OlRZUEVfR1JPVVApID8KLSAgICAiR3JvdXAiIDogIk1lc3NhZ2UiOwotICAvLyBUT0RPKGJp
cmRvKTogQWRkIEBkZXByZWNhdGVkIGphdmFkb2Mgd2hlbiBnZW5lcmF0aW5nIGphdmFkb2MgaXMg
c3VwcG9ydGVkCi0gIC8vIGJ5IHRoZSBwcm90byBjb21waWxlcgotICAoKnZhcmlhYmxlcylbImRl
cHJlY2F0aW9uIl0gPSBkZXNjcmlwdG9yLT5vcHRpb25zKCkuZGVwcmVjYXRlZCgpCi0gICAgICA/
ICJAamF2YS5sYW5nLkRlcHJlY2F0ZWQgIiA6ICIiOwotCi0gIGlmIChTdXBwb3J0RmllbGRQcmVz
ZW5jZShkZXNjcmlwdG9yLT5maWxlKCkpKSB7Ci0gICAgLy8gRm9yIHNpbmd1bGFyIG1lc3NhZ2Vz
IGFuZCBidWlsZGVycywgb25lIGJpdCBpcyB1c2VkIGZvciB0aGUgaGFzRmllbGQgYml0LgotICAg
ICgqdmFyaWFibGVzKVsiZ2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSJdID0gR2VuZXJhdGVHZXRC
aXQobWVzc2FnZUJpdEluZGV4KTsKLQotICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBoYXZlIGEgdHJh
aWxpbmcgIjsiLgotICAgICgqdmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSJd
ID0KLSAgICAgICAgR2VuZXJhdGVTZXRCaXQobWVzc2FnZUJpdEluZGV4KSArICI7IjsKLSAgICAo
KnZhcmlhYmxlcylbImNsZWFyX2hhc19maWVsZF9iaXRfbWVzc2FnZSJdID0KLSAgICAgICAgR2Vu
ZXJhdGVDbGVhckJpdChtZXNzYWdlQml0SW5kZXgpICsgIjsiOwotCi0gICAgKCp2YXJpYWJsZXMp
WyJpc19maWVsZF9wcmVzZW50X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0Qml0KG1lc3NhZ2VCaXRJ
bmRleCk7Ci0gIH0gZWxzZSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJzZXRfaGFzX2ZpZWxkX2JpdF9t
ZXNzYWdlIl0gPSAiIjsKLSAgICAoKnZhcmlhYmxlcylbImNsZWFyX2hhc19maWVsZF9iaXRfbWVz
c2FnZSJdID0gIiI7Ci0KLSAgICAoKnZhcmlhYmxlcylbImlzX2ZpZWxkX3ByZXNlbnRfbWVzc2Fn
ZSJdID0KLSAgICAgICAgKCp2YXJpYWJsZXMpWyJuYW1lIl0gKyAiXyAhPSBudWxsIjsKLSAgfQot
Ci0gIC8vIEZvciByZXBlYXRlZCBidWlsZGVycywgdGhlIHVuZGVybHlpbmcgbGlzdCB0cmFja3Mg
bXV0YWJpbGl0eSBzdGF0ZS4KLSAgKCp2YXJpYWJsZXMpWyJpc19tdXRhYmxlIl0gPSAoKnZhcmlh
YmxlcylbIm5hbWUiXSArICJfLmlzTW9kaWZpYWJsZSgpIjsKLQotICAoKnZhcmlhYmxlcylbImdl
dF9oYXNfZmllbGRfYml0X2Zyb21fbG9jYWwiXSA9Ci0gICAgICBHZW5lcmF0ZUdldEJpdEZyb21M
b2NhbChidWlsZGVyQml0SW5kZXgpOwotICAoKnZhcmlhYmxlcylbInNldF9oYXNfZmllbGRfYml0
X3RvX2xvY2FsIl0gPQotICAgICAgR2VuZXJhdGVTZXRCaXRUb0xvY2FsKG1lc3NhZ2VCaXRJbmRl
eCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUltbXV0YWJsZU1l
c3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotSW1tdXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVy
YXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAg
ICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVp
bGRlckJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRleHQpCi0g
IDogZGVzY3JpcHRvcl8oZGVzY3JpcHRvciksIG1lc3NhZ2VCaXRJbmRleF8obWVzc2FnZUJpdElu
ZGV4KSwKLSAgICBidWlsZGVyQml0SW5kZXhfKGJ1aWxkZXJCaXRJbmRleCksIGNvbnRleHRfKGNv
bnRleHQpLAotICAgIG5hbWVfcmVzb2x2ZXJfKGNvbnRleHQtPkdldE5hbWVSZXNvbHZlcigpKSB7
Ci0gICAgU2V0TWVzc2FnZVZhcmlhYmxlcyhkZXNjcmlwdG9yLCBtZXNzYWdlQml0SW5kZXgsIGJ1
aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPkdldEZpZWxk
R2VuZXJhdG9ySW5mbyhkZXNjcmlwdG9yKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVf
cmVzb2x2ZXJfLCAmdmFyaWFibGVzXyk7Ci19Ci0KLUltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVH
ZW5lcmF0b3I6On5JbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yKCkge30KLQotaW50
IEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OkdldE51bUJpdHNGb3JNZXNzYWdl
KCkgY29uc3QgewotICByZXR1cm4gMTsKLX0KLQotaW50IEltbXV0YWJsZU1lc3NhZ2VGaWVsZExp
dGVHZW5lcmF0b3I6OkdldE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3QgewotICByZXR1cm4gMDsK
LX0KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRl
SW50ZXJmYWNlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBUT0RP
KGpvbnApOiBJbiB0aGUgZnV0dXJlLCBjb25zaWRlciBoYXZpbmcgYSBtZXRob2Qgc3BlY2lmaWMg
dG8gdGhlCi0gIC8vIGludGVyZmFjZSBzbyB0aGF0IGJ1aWxkZXJzIGNhbiBjaG9vc2UgZHluYW1p
Y2FsbHkgdG8gZWl0aGVyIHJldHVybiBhCi0gIC8vIG1lc3NhZ2Ugb3IgYSBuZXN0ZWQgYnVpbGRl
ciwgc28gdGhhdCBhc2tpbmcgZm9yIHRoZSBpbnRlcmZhY2UgZG9lc24ndAotICAvLyBjYXVzZSBh
IG1lc3NhZ2UgdG8gZXZlciBiZSBidWlsdC4KLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRl
c2NyaXB0b3JfLT5maWxlKCkpIHx8Ci0gICAgICBkZXNjcmlwdG9yXy0+Y29udGFpbmluZ19vbmVv
ZigpID09IE5VTEwpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlw
dG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRp
b24kYm9vbGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIpOwotICB9Ci0gIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJCR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQo
KTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6Ogot
R2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgJHR5cGUkICRuYW1lJF87XG4iKTsKLSAg
UHJpbnRFeHRyYUZpZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmludGVyKTsKLQotICBpZiAoU3VwcG9y
dEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0YWxpemVk
X25hbWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRnZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdl
JDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVw
cmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAg
ICAiICByZXR1cm4gJG5hbWUkXyA9PSBudWxsID8gJHR5cGUkLmdldERlZmF1bHRJbnN0YW5jZSgp
IDogJG5hbWUkXztcbiIKLSAgICAgICJ9XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBXcml0ZUZpZWxk
RG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0YWxp
emVkX25hbWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRuYW1lJF8gIT0gbnVsbDtcbiIKLSAg
ICAgICJ9XG4iKTsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9y
Xyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24k
cHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAiICByZXR1
cm4gJG5hbWUkXyA9PSBudWxsID8gJHR5cGUkLmdldERlZmF1bHRJbnN0YW5jZSgpIDogJG5hbWUk
XztcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIC8vIEZpZWxkLkJ1aWxkZXIgc2V0RmllbGQo
RmllbGQgdmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIHNldCRj
YXBpdGFsaXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiICBpZiAodmFsdWUgPT0g
bnVsbCkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7XG4i
Ci0gICAgIiAgfVxuIgotICAgICIgICRuYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAiICAkc2V0X2hh
c19maWVsZF9iaXRfbWVzc2FnZSRcbiIKLSAgICAiICB9XG4iKTsKLQotICAvLyBGaWVsZC5CdWls
ZGVyIHNldEZpZWxkKEZpZWxkLkJ1aWxkZXIgYnVpbGRlckZvclZhbHVlKQotICBXcml0ZUZpZWxk
RG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgInByaXZhdGUgdm9pZCBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAg
IiAgICAkdHlwZSQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpIHtcbiIKLSAgICAiICAkbmFtZSRf
ID0gYnVpbGRlckZvclZhbHVlLmJ1aWxkKCk7XG4iCi0gICAgIiAgJHNldF9oYXNfZmllbGRfYml0
X21lc3NhZ2UkXG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIgbWVyZ2VGaWVs
ZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgbWVy
Z2UkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4iCi0gICAgIiAgaWYgKCRuYW1l
JF8gIT0gbnVsbCAmJlxuIgotICAgICIgICAgICAkbmFtZSRfICE9ICR0eXBlJC5nZXREZWZhdWx0
SW5zdGFuY2UoKSkge1xuIgotICAgICIgICAgJG5hbWUkXyA9XG4iCi0gICAgIiAgICAgICR0eXBl
JC5uZXdCdWlsZGVyKCRuYW1lJF8pLm1lcmdlRnJvbSh2YWx1ZSkuYnVpbGRQYXJ0aWFsKCk7XG4i
Ci0gICAgIiAgfSBlbHNlIHtcbiIKLSAgICAiICAgICRuYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAi
ICB9XG4iCi0gICAgIiAgJHNldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkXG4iCi0gICAgIn1cbiIp
OwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIgY2xlYXJGaWVsZCgpCi0gIFdyaXRlRmllbGREb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAicHJpdmF0ZSB2b2lkIGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkgeyIKLSAgICAiICAk
bmFtZSRfID0gbnVsbDtcbiIKLSAgICAiICAkY2xlYXJfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlJFxu
IgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJh
dG9yOjoKLUdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgLy8gVGhlIGNvbW1lbnRzIGFib3ZlIHRoZSBtZXRob2RzIGJlbG93IGFyZSBiYXNlZCBv
biBhIGh5cG90aGV0aWNhbAotICAvLyBmaWVsZCBvZiB0eXBlICJGaWVsZCIgY2FsbGVkICJGaWVs
ZCIuCi0KLSAgLy8gYm9vbGVhbiBoYXNGaWVsZCgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
JGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIK
LSAgICAiICByZXR1cm4gaW5zdGFuY2UuaGFzJGNhcGl0YWxpemVkX25hbWUkKCk7XG4iCi0gICAg
In1cbiIpOwotCi0gIC8vIEZpZWxkIGdldEZpZWxkKCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQo
cHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4i
Ci0gICAgIiAgcmV0dXJuIGluc3RhbmNlLmdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIgotICAg
ICJ9XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIHNldEZpZWxkKEZpZWxkIHZhbHVlKQotICBX
cml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2Fw
aXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtc
biIKLSAgICAiICBpbnN0YW5jZS5zZXQkY2FwaXRhbGl6ZWRfbmFtZSQodmFsdWUpO1xuIgotICAg
ICIgIHJldHVybiB0aGlzO1xuIgotICAgICIgIH1cbiIpOwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIg
c2V0RmllbGQoRmllbGQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpCi0gIFdyaXRlRmllbGREb2ND
b21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1l
JChcbiIKLSAgICAiICAgICR0eXBlJC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkge1xuIgotICAg
ICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2Uuc2V0JGNhcGl0YWxpemVkX25h
bWUkKGJ1aWxkZXJGb3JWYWx1ZSk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1c
biIpOwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIgbWVyZ2VGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgbWVyZ2UkY2Fw
aXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtc
biIKLSAgICAiICBpbnN0YW5jZS5tZXJnZSRjYXBpdGFsaXplZF9uYW1lJCh2YWx1ZSk7XG4iCi0g
ICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIg
Y2xlYXJGaWVsZCgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3Jf
KTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1Ymxp
YyBCdWlsZGVyIGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkgeyIKLSAgICAiICBjb3B5T25Xcml0
ZSgpO1xuIgotICAgICIgIGluc3RhbmNlLmNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCk7XG4iCi0g
ICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1l
c3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFsaXph
dGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpICBjb25zdCB7Ci0gIGlmIChTdXBwb3J0Rmll
bGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgICAiZ2V0JGNhcGl0YWxpemVkX25hbWUkRmllbGRCdWlsZGVyKCk7XG4i
KTsKLSAgfQotfQotCi0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
e30KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRl
VmlzaXRDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgIiRuYW1lJF8gPSB2aXNpdG9yLnZpc2l0TWVzc2FnZSgkbmFtZSRf
LCBvdGhlci4kbmFtZSRfKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VGaWVsZExp
dGVHZW5lcmF0b3I6OgotR2VuZXJhdGVEeW5hbWljTWV0aG9kTWFrZUltbXV0YWJsZUNvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gbm9vcCBmb3Igc2NhbGFycwotfQotCi12
b2lkIEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5n
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBUT0RPKGR3ZWlzKTogVXBk
YXRlIHRoaXMgY29kZSB0byBhdm9pZCB0aGUgYnVpbGRlciBhbGxvY2F0aW9uIGFuZCBpbnN0ZWFk
Ci0gIC8vIG9ubHkgYWxsb2NhdGUgYSBzdWJtZXNzYWdlIHRoYXQgaXNuJ3QgbWFkZSBpbW11dGFi
bGUuIFJlbHkgb24gdGhlIHRvcAotICAvLyBtZXNzYWdlIGNhbGxpbmcgbWFrZUltbXV0YWJsZSBv
bmNlIGRvbmUgdG8gYWN0dWFsbHkgdHJhdmVyc2UgdGhlIHRyZWUgYW5kCi0gIC8vIGZpbmFsaXpl
IHN0YXRlLiBUaGlzIHdpbGwgYXZvaWQ6Ci0gIC8vIC0gdHJhbnNpdGl2ZSBidWlsZGVyIGFsbG9j
YXRpb25zCi0gIC8vIC0gdGhlIGV4dHJhIHRyYW5zaXRpdmUgaXRlcmF0aW9uIGZvciBzdHJlYW1l
ZCBmaWVsZHMKLSAgLy8gLSByZWFsbG9jYXRpb25zIGZvciBjb3B5aW5nIHJlcGVhdGVkIGZpZWxk
cwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiR0eXBlJC5CdWlsZGVyIHN1
YkJ1aWxkZXIgPSBudWxsO1xuIgotICAgICAgImlmICgkaXNfZmllbGRfcHJlc2VudF9tZXNzYWdl
JCkge1xuIgotICAgICAgIiAgc3ViQnVpbGRlciA9ICRuYW1lJF8udG9CdWlsZGVyKCk7XG4iCi0g
ICAgICAifVxuIik7Ci0KLSAgICBpZiAoR2V0VHlwZShkZXNjcmlwdG9yXykgPT0gRmllbGREZXNj
cmlwdG9yOjpUWVBFX0dST1VQKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICAgICAiJG5hbWUkXyA9IGlucHV0LnJlYWRHcm91cCgkbnVtYmVyJCwgJHR5cGUkLnBhcnNl
cigpLFxuIgotICAgICAgICAiICAgIGV4dGVuc2lvblJlZ2lzdHJ5KTtcbiIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiJG5hbWUkXyA9
IGlucHV0LnJlYWRNZXNzYWdlKCR0eXBlJC5wYXJzZXIoKSwgZXh0ZW5zaW9uUmVnaXN0cnkpO1xu
Iik7Ci0gICAgfQotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmIChzdWJC
dWlsZGVyICE9IG51bGwpIHtcbiIKLSAgICAiICBzdWJCdWlsZGVyLm1lcmdlRnJvbSgkbmFtZSRf
KTtcbiIKLSAgICAiICAkbmFtZSRfID0gc3ViQnVpbGRlci5idWlsZFBhcnRpYWwoKTtcbiIKLSAg
ICAifVxuIgotICAgICIkc2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSRcbiIpOwotfQotCi12b2lk
IEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nRG9u
ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gbm9vcCBmb3IgbWVzc2Fn
ZXMuCi19Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5l
cmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICgkaXNfZmllbGRfcHJlc2VudF9tZXNz
YWdlJCkge1xuIgotICAgICIgIG91dHB1dC53cml0ZSRncm91cF9vcl9tZXNzYWdlJCgkbnVtYmVy
JCwgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJ
bW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNp
emVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgImlmICgkaXNfZmllbGRfcHJlc2VudF9tZXNzYWdlJCkge1xuIgotICAg
ICIgIHNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAg
ICIgICAgLmNvbXB1dGUkZ3JvdXBfb3JfbWVzc2FnZSRTaXplKCRudW1iZXIkLCBnZXQkY2FwaXRh
bGl6ZWRfbmFtZSQoKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3Nh
Z2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInJlc3Vs
dCA9IHJlc3VsdCAmJiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKVxuIgotICAgICIgICAgLmVxdWFs
cyhvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7XG4iKTsKLX0KLQotdm9pZCBJbW11dGFi
bGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
aGFzaCA9ICgzNyAqIGhhc2gpICsgJGNvbnN0YW50X25hbWUkO1xuIgotICAgICJoYXNoID0gKDUz
ICogaGFzaCkgKyBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKS5oYXNoQ29kZSgpO1xuIik7Ci19Ci0K
LXN0cmluZyBJbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yOjpHZXRCb3hlZFR5cGUo
KSBjb25zdCB7Ci0gIHJldHVybiBuYW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1l
KGRlc2NyaXB0b3JfLT5tZXNzYWdlX3R5cGUoKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSW1t
dXRhYmxlTWVzc2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLUltbXV0YWJsZU1lc3NhZ2VP
bmVvZkZpZWxkTGl0ZUdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3Is
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZUJpdEluZGV4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRleHQpCi0gICAgOiBJ
bW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yKAotICAgICAgICAgIGRlc2NyaXB0b3Is
IG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4LCBjb250ZXh0KSB7Ci0gIGNvbnN0IE9u
ZW9mR2VuZXJhdG9ySW5mbyogaW5mbyA9Ci0gICAgICBjb250ZXh0LT5HZXRPbmVvZkdlbmVyYXRv
ckluZm8oZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVvZigpKTsKLSAgU2V0Q29tbW9uT25lb2ZW
YXJpYWJsZXMoZGVzY3JpcHRvciwgaW5mbywgJnZhcmlhYmxlc18pOwotfQotCi1JbW11dGFibGVN
ZXNzYWdlT25lb2ZGaWVsZExpdGVHZW5lcmF0b3I6OgotfkltbXV0YWJsZU1lc3NhZ2VPbmVvZkZp
ZWxkTGl0ZUdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZU9uZW9mRmllbGRM
aXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBQcmludEV4dHJhRmllbGRJbmZvKHZhcmlhYmxlc18sIHByaW50ZXIpOwotICBpZiAo
U3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0
YWxpemVkX25hbWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJuICRoYXNfb25lb2ZfY2FzZV9tZXNz
YWdlJDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAg
ICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICAgcmV0dXJu
ICgkdHlwZSQpICRvbmVvZl9uYW1lJF87XG4iCi0gICAgIiAgfVxuIgotICAgICIgIHJldHVybiAk
dHlwZSQuZ2V0RGVmYXVsdEluc3RhbmNlKCk7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEZpZWxk
LkJ1aWxkZXIgc2V0RmllbGQoRmllbGQgdmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
cHJpdmF0ZSB2b2lkIHNldCRjYXBpdGFsaXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIHtcbiIKLSAg
ICAiICBpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IE51bGxQb2lu
dGVyRXhjZXB0aW9uKCk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgICRvbmVvZl9uYW1lJF8gPSB2
YWx1ZTtcbiIKLSAgICAiICAkc2V0X29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgIn1cbiIp
OwotCi0gIC8vIEZpZWxkLkJ1aWxkZXIgc2V0RmllbGQoRmllbGQuQnVpbGRlciBidWlsZGVyRm9y
VmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIHNldCRjYXBpdGFs
aXplZF9uYW1lJChcbiIKLSAgICAiICAgICR0eXBlJC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkg
e1xuIgotICAgICIgICRvbmVvZl9uYW1lJF8gPSBidWlsZGVyRm9yVmFsdWUuYnVpbGQoKTtcbiIK
LSAgICAiICAkc2V0X29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8v
IEZpZWxkLkJ1aWxkZXIgbWVyZ2VGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICJwcml2YXRlIHZvaWQgbWVyZ2UkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVl
KSB7XG4iCi0gICAgIiAgaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCAmJlxuIgotICAgICIg
ICAgICAkb25lb2ZfbmFtZSRfICE9ICR0eXBlJC5nZXREZWZhdWx0SW5zdGFuY2UoKSkge1xuIgot
ICAgICIgICAgJG9uZW9mX25hbWUkXyA9ICR0eXBlJC5uZXdCdWlsZGVyKCgkdHlwZSQpICRvbmVv
Zl9uYW1lJF8pXG4iCi0gICAgIiAgICAgICAgLm1lcmdlRnJvbSh2YWx1ZSkuYnVpbGRQYXJ0aWFs
KCk7XG4iCi0gICAgIiAgfSBlbHNlIHtcbiIKLSAgICAiICAgICRvbmVvZl9uYW1lJF8gPSB2YWx1
ZTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgJHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgot
ICAgICJ9XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIGNsZWFyRmllbGQoKQotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgInByaXZhdGUgdm9pZCBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtc
biIKLSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICAk
Y2xlYXJfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAiICAgICRvbmVvZl9uYW1lJF8gPSBu
dWxsO1xuIgotICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWVz
c2FnZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gVGhlIGNvbW1lbnRzIGFib3ZlIHRoZSBt
ZXRob2RzIGJlbG93IGFyZSBiYXNlZCBvbiBhIGh5cG90aGV0aWNhbAotICAvLyBmaWVsZCBvZiB0
eXBlICJGaWVsZCIgY2FsbGVkICJGaWVsZCIuCi0KLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNl
KGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgLy8gYm9vbGVhbiBoYXNGaWVsZCgpCi0gICAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhh
cyRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAgICIgIHJldHVybiBpbnN0YW5jZS5oYXMk
Y2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIC8vIEZpZWxk
IGdldEZpZWxkKCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGlj
ICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGluc3Rh
bmNlLmdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBGaWVs
ZC5CdWlsZGVyIHNldEZpZWxkKEZpZWxkIHZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChw
cmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
IiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUk
IHZhbHVlKSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5z
ZXQkY2FwaXRhbGl6ZWRfbmFtZSQodmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgot
ICAgICJ9XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIHNldEZpZWxkKEZpZWxkLkJ1aWxkZXIg
YnVpbGRlckZvclZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlw
dG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRw
dWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICAkdHlwZSQu
QnVpbGRlciBidWlsZGVyRm9yVmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgot
ICAgICIgIGluc3RhbmNlLnNldCRjYXBpdGFsaXplZF9uYW1lJChidWlsZGVyRm9yVmFsdWUpO1xu
IgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBGaWVsZC5CdWls
ZGVyIG1lcmdlRmllbGQoRmllbGQgdmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50
ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRl
cHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIG1lcmdlJGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2
YWx1ZSkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2UubWVy
Z2UkY2FwaXRhbGl6ZWRfbmFtZSQodmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgot
ICAgICJ9XG4iKTsKLQotICAvLyBGaWVsZC5CdWlsZGVyIGNsZWFyRmllbGQoKQotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBjbGVhciRjYXBpdGFs
aXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3Rh
bmNlLmNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4i
Ci0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkTGl0ZUdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZVZpc2l0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
ewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkb25lb2ZfbmFtZSRfID0gdmlz
aXRvci52aXNpdE9uZW9mTWVzc2FnZShcbiIKLSAgICAiICAgICRoYXNfb25lb2ZfY2FzZV9tZXNz
YWdlJCxcbiIKLSAgICAiICAgICRvbmVvZl9uYW1lJF8sXG4iCi0gICAgIiAgICBvdGhlci4kb25l
b2ZfbmFtZSRfKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkTGl0
ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiR0eXBlJC5CdWlsZGVy
IHN1YkJ1aWxkZXIgPSBudWxsO1xuIgotICAgICJpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2Uk
KSB7XG4iCi0gICAgIiAgc3ViQnVpbGRlciA9ICgoJHR5cGUkKSAkb25lb2ZfbmFtZSRfKS50b0J1
aWxkZXIoKTtcbiIKLSAgICAifVxuIik7Ci0KLSAgICBpZiAoR2V0VHlwZShkZXNjcmlwdG9yXykg
PT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgICAiJG9uZW9mX25hbWUkXyA9IGlucHV0LnJlYWRHcm91cCgkbnVt
YmVyJCwgJHR5cGUkLnBhcnNlcigpLFxuIgotICAgICAgICAiICAgIGV4dGVuc2lvblJlZ2lzdHJ5
KTtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICAgICAiJG9uZW9mX25hbWUkXyA9XG4iCi0gICAgICAgICIgICAgIGlucHV0LnJlYWRNZXNz
YWdlKCR0eXBlJC5wYXJzZXIoKSwgZXh0ZW5zaW9uUmVnaXN0cnkpO1xuIik7Ci0gICAgfQotCi0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmIChzdWJCdWlsZGVyICE9IG51bGwp
IHtcbiIKLSAgICAiICBzdWJCdWlsZGVyLm1lcmdlRnJvbSgoJHR5cGUkKSAkb25lb2ZfbmFtZSRf
KTtcbiIKLSAgICAiICAkb25lb2ZfbmFtZSRfID0gc3ViQnVpbGRlci5idWlsZFBhcnRpYWwoKTtc
biIKLSAgICAifVxuIik7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRzZXRf
b25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VPbmVv
ZkZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ImlmICgkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIKLSAgICAiICBvdXRwdXQud3JpdGUk
Z3JvdXBfb3JfbWVzc2FnZSQoJG51bWJlciQsICgkdHlwZSQpICRvbmVvZl9uYW1lJF8pO1xuIgot
ICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlT25lb2ZGaWVsZExpdGVHZW5l
cmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNfb25l
b2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1
Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAgICIgICAgLmNvbXB1dGUkZ3JvdXBfb3JfbWVzc2Fn
ZSRTaXplKCRudW1iZXIkLCAoJHR5cGUkKSAkb25lb2ZfbmFtZSRfKTtcbiIKLSAgICAifVxuIik7
Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotUmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRMaXRl
R2VuZXJhdG9yOjoKLVJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcihj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQqIGNvbnRleHQpCi0gIDogZGVzY3JpcHRv
cl8oZGVzY3JpcHRvciksIG1lc3NhZ2VCaXRJbmRleF8obWVzc2FnZUJpdEluZGV4KSwKLSAgICBi
dWlsZGVyQml0SW5kZXhfKGJ1aWxkZXJCaXRJbmRleCksIGNvbnRleHRfKGNvbnRleHQpLAotICAg
IG5hbWVfcmVzb2x2ZXJfKGNvbnRleHQtPkdldE5hbWVSZXNvbHZlcigpKSAgewotICBTZXRNZXNz
YWdlVmFyaWFibGVzKGRlc2NyaXB0b3IsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4
LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPkdldEZpZWxkR2VuZXJhdG9ySW5mbyhk
ZXNjcmlwdG9yKSwKLSAgICAgICAgICAgICAgICAgICAgICBuYW1lX3Jlc29sdmVyXywgJnZhcmlh
Ymxlc18pOwotfQotCi1SZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6
OgotflJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcigpIHt9Ci0KLWlu
dCBSZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OkdldE51bUJpdHNG
b3JNZXNzYWdlKCkgY29uc3QgewotICByZXR1cm4gMDsKLX0KLQotaW50IFJlcGVhdGVkSW1tdXRh
YmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6R2V0TnVtQml0c0ZvckJ1aWxkZXIoKSBjb25z
dCB7Ci0gIHJldHVybiAwOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxk
TGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUludGVyZmFjZU1lbWJlcnMoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgLy8gVE9ETyhqb25wKTogSW4gdGhlIGZ1dHVyZSwgY29uc2lkZXIg
aGF2aW5nIG1ldGhvZHMgc3BlY2lmaWMgdG8gdGhlCi0gIC8vIGludGVyZmFjZSBzbyB0aGF0IGJ1
aWxkZXJzIGNhbiBjaG9vc2UgZHluYW1pY2FsbHkgdG8gZWl0aGVyIHJldHVybiBhCi0gIC8vIG1l
c3NhZ2Ugb3IgYSBuZXN0ZWQgYnVpbGRlciwgc28gdGhhdCBhc2tpbmcgZm9yIHRoZSBpbnRlcmZh
Y2UgZG9lc24ndAotICAvLyBjYXVzZSBhIG1lc3NhZ2UgdG8gZXZlciBiZSBidWlsdC4KLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kamF2YS51dGlsLkxpc3Q8JHR5cGUkPiBc
biIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKTtcbiIpOwotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiQkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUk
KGludCBpbmRleCk7XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3Jp
cHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24k
aW50IGdldCRjYXBpdGFsaXplZF9uYW1lJENvdW50KCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRl
ZEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgInByaXZhdGUgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5Qcm90b2J1Zkxpc3Q8
JHR5cGUkPiAkbmFtZSRfO1xuIik7Ci0gIFByaW50RXh0cmFGaWVsZEluZm8odmFyaWFibGVzXywg
cHJpbnRlcik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBq
YXZhLnV0aWwuTGlzdDwkdHlwZSQ+IGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKSB7XG4iCi0g
ICAgIiAgcmV0dXJuICRuYW1lJF87XG4iICAgLy8gbm90ZTogIHVubW9kaWZpYWJsZSBsaXN0Ci0g
ICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMg
amF2YS51dGlsLkxpc3Q8PyBleHRlbmRzICR0eXBlJE9yQnVpbGRlcj4gXG4iCi0gICAgIiAgICBn
ZXQkY2FwaXRhbGl6ZWRfbmFtZSRPckJ1aWxkZXJMaXN0KCkge1xuIgotICAgICIgIHJldHVybiAk
bmFtZSRfO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVj
YXRpb24kcHVibGljIGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpIHtcbiIKLSAgICAi
ICByZXR1cm4gJG5hbWUkXy5zaXplKCk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1l
JChpbnQgaW5kZXgpIHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXy5nZXQoaW5kZXgpO1xuIgot
ICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGlj
ICR0eXBlJE9yQnVpbGRlciBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRPckJ1aWxkZXIoXG4iCi0gICAg
IiAgICBpbnQgaW5kZXgpIHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXy5nZXQoaW5kZXgpO1xu
IgotICAgICJ9XG4iKTsKLQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2
YXRlIHZvaWQgZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCkge1xuIgotICAgICIg
IGlmICghJGlzX211dGFibGUkKSB7XG4iCi0gICAgIiAgICAkbmFtZSRfID1cbiIKLSAgICAiICAg
ICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VMaXRlLm11dGFibGVDb3B5
KCRuYW1lJF8pO1xuIgotICAgICIgICB9XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iKTsKLQotICAv
LyBCdWlsZGVyIHNldFJlcGVhdGVkRmllbGQoaW50IGluZGV4LCBGaWVsZCB2YWx1ZSkKLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgc2V0JGNhcGl0YWxpemVkX25hbWUkKFxu
IgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiICBpZiAodmFs
dWUgPT0gbnVsbCkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9u
KCk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgIGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0
YWJsZSgpO1xuIgotICAgICIgICRuYW1lJF8uc2V0KGluZGV4LCB2YWx1ZSk7XG4iCi0gICAgIn1c
biIpOwotCi0gIC8vIEJ1aWxkZXIgc2V0UmVwZWF0ZWRGaWVsZChpbnQgaW5kZXgsIEZpZWxkLkJ1
aWxkZXIgYnVpbGRlckZvclZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUg
dm9pZCBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICBpbnQgaW5kZXgsICR0eXBl
JC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkge1xuIgotICAgICIgIGVuc3VyZSRjYXBpdGFsaXpl
ZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRuYW1lJF8uc2V0KGluZGV4LCBidWlsZGVy
Rm9yVmFsdWUuYnVpbGQoKSk7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIEJ1aWxkZXIgYWRkUmVw
ZWF0ZWRGaWVsZChGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRl
IHZvaWQgYWRkJGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIgIGlm
ICh2YWx1ZSA9PSBudWxsKSB7XG4iCi0gICAgIiAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNl
cHRpb24oKTtcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgZW5zdXJlJGNhcGl0YWxpemVkX25hbWUk
SXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5hbWUkXy5hZGQodmFsdWUpO1xuIgotICAgICJ9XG4i
KTsKLQotICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVkRmllbGQoaW50IGluZGV4LCBGaWVsZCB2YWx1
ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgYWRkJGNhcGl0YWxpemVk
X25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAi
ICBpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IE51bGxQb2ludGVy
RXhjZXB0aW9uKCk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgIGVuc3VyZSRjYXBpdGFsaXplZF9u
YW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRuYW1lJF8uYWRkKGluZGV4LCB2YWx1ZSk7XG4i
Ci0gICAgIn1cbiIpOwotICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVkRmllbGQoRmllbGQuQnVpbGRl
ciBidWlsZGVyRm9yVmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2Ny
aXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lk
IGFkZCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgICR0eXBlJC5CdWlsZGVyIGJ1aWxk
ZXJGb3JWYWx1ZSkge1xuIgotICAgICIgIGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJs
ZSgpO1xuIgotICAgICIgICRuYW1lJF8uYWRkKGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpKTtcbiIK
LSAgICAifVxuIik7Ci0KLSAgLy8gQnVpbGRlciBhZGRSZXBlYXRlZEZpZWxkKGludCBpbmRleCwg
RmllbGQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
cHJpdmF0ZSB2b2lkIGFkZCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgIGludCBpbmRl
eCwgJHR5cGUkLkJ1aWxkZXIgYnVpbGRlckZvclZhbHVlKSB7XG4iCi0gICAgIiAgZW5zdXJlJGNh
cGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5hbWUkXy5hZGQoaW5kZXgs
IGJ1aWxkZXJGb3JWYWx1ZS5idWlsZCgpKTtcbiIKLSAgICAifVxuIik7Ci0KLSAgLy8gQnVpbGRl
ciBhZGRBbGxSZXBlYXRlZEZpZWxkKEl0ZXJhYmxlPEZpZWxkPiB2YWx1ZXMpCi0gIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIGFkZEFsbCRjYXBpdGFsaXplZF9uYW1lJChcbiIK
LSAgICAiICAgIGphdmEubGFuZy5JdGVyYWJsZTw/IGV4dGVuZHMgJHR5cGUkPiB2YWx1ZXMpIHtc
biIKLSAgICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAi
ICBjb20uZ29vZ2xlLnByb3RvYnVmLkFic3RyYWN0TWVzc2FnZUxpdGUuYWRkQWxsKFxuIgotICAg
ICIgICAgICB2YWx1ZXMsICRuYW1lJF8pO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVy
IGNsZWFyQWxsUmVwZWF0ZWRGaWVsZCgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIs
IGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0
ZSB2b2lkIGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgICRuYW1lJF8gPSBl
bXB0eVByb3RvYnVmTGlzdCgpO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIHJlbW92
ZVJlcGVhdGVkRmllbGQoaW50IGluZGV4KQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVy
LCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZh
dGUgdm9pZCByZW1vdmUkY2FwaXRhbGl6ZWRfbmFtZSQoaW50IGluZGV4KSB7XG4iCi0gICAgIiAg
ZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5hbWUkXy5y
ZW1vdmUoaW5kZXgpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJs
ZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBUaGUgY29tbWVudHMgYWJvdmUgdGhlIG1l
dGhvZHMgYmVsb3cgYXJlIGJhc2VkIG9uIGEgaHlwb3RoZXRpY2FsCi0gIC8vIHJlcGVhdGVkIGZp
ZWxkIG9mIHR5cGUgIkZpZWxkIiBjYWxsZWQgIlJlcGVhdGVkRmllbGQiLgotCi0gIC8vIExpc3Q8
RmllbGQ+IGdldFJlcGVhdGVkRmllbGRMaXN0KCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJp
bnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIk
ZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRpbC5MaXN0PCR0eXBlJD4gZ2V0JGNhcGl0YWxpemVk
X25hbWUkTGlzdCgpIHtcbiIKLSAgICAiICByZXR1cm4gamF2YS51dGlsLkNvbGxlY3Rpb25zLnVu
bW9kaWZpYWJsZUxpc3QoXG4iCi0gICAgIiAgICAgIGluc3RhbmNlLmdldCRjYXBpdGFsaXplZF9u
YW1lJExpc3QoKSk7XG4iCi0gICAgIn1cbiIpOwotCi0gIC8vIGludCBnZXRSZXBlYXRlZEZpZWxk
Q291bnQoKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgaW50
IGdldCRjYXBpdGFsaXplZF9uYW1lJENvdW50KCkge1xuIgotICAgICIgIHJldHVybiBpbnN0YW5j
ZS5nZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpO1xuIgotICAgICJ9Iik7Ci0KLSAgLy8gRmll
bGQgZ2V0UmVwZWF0ZWRGaWVsZChpbnQgaW5kZXgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
JGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUkKGludCBpbmRl
eCkge1xuIgotICAgICIgIHJldHVybiBpbnN0YW5jZS5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoaW5k
ZXgpO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIHNldFJlcGVhdGVkRmllbGQoaW50
IGluZGV4LCBGaWVsZCB2YWx1ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRp
b24kcHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50
IGluZGV4LCAkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAg
ICIgIGluc3RhbmNlLnNldCRjYXBpdGFsaXplZF9uYW1lJChpbmRleCwgdmFsdWUpO1xuIgotICAg
ICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIHNldFJlcGVh
dGVkRmllbGQoaW50IGluZGV4LCBGaWVsZC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1ZSkKLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0
YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQuQnVpbGRlciBidWls
ZGVyRm9yVmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3Rh
bmNlLnNldCRjYXBpdGFsaXplZF9uYW1lJChpbmRleCwgYnVpbGRlckZvclZhbHVlKTtcbiIKLSAg
ICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0KLSAgLy8gQnVpbGRlciBhZGRSZXBl
YXRlZEZpZWxkKEZpZWxkIHZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNh
dGlvbiRwdWJsaWMgQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7
XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5hZGQkY2FwaXRh
bGl6ZWRfbmFtZSQodmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4i
KTsKLQotICAvLyBCdWlsZGVyIGFkZFJlcGVhdGVkRmllbGQoaW50IGluZGV4LCBGaWVsZCB2YWx1
ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIg
YWRkJGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQgdmFs
dWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNlLmFkZCRj
YXBpdGFsaXplZF9uYW1lJChpbmRleCwgdmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xu
IgotICAgICJ9XG4iKTsKLSAgLy8gQnVpbGRlciBhZGRSZXBlYXRlZEZpZWxkKEZpZWxkLkJ1aWxk
ZXIgYnVpbGRlckZvclZhbHVlKQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlv
biRwdWJsaWMgQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICAkdHlw
ZSQuQnVpbGRlciBidWlsZGVyRm9yVmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xu
IgotICAgICIgIGluc3RhbmNlLmFkZCRjYXBpdGFsaXplZF9uYW1lJChidWlsZGVyRm9yVmFsdWUp
O1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVy
IGFkZFJlcGVhdGVkRmllbGQoaW50IGluZGV4LCBGaWVsZC5CdWlsZGVyIGJ1aWxkZXJGb3JWYWx1
ZSkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIg
YWRkJGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQuQnVp
bGRlciBidWlsZGVyRm9yVmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAg
ICIgIGluc3RhbmNlLmFkZCRjYXBpdGFsaXplZF9uYW1lJChpbmRleCwgYnVpbGRlckZvclZhbHVl
KTtcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0KLSAgLy8gQnVpbGRl
ciBhZGRBbGxSZXBlYXRlZEZpZWxkKEl0ZXJhYmxlPEZpZWxkPiB2YWx1ZXMpCi0gIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGFkZEFsbCRjYXBpdGFs
aXplZF9uYW1lJChcbiIKLSAgICAiICAgIGphdmEubGFuZy5JdGVyYWJsZTw/IGV4dGVuZHMgJHR5
cGUkPiB2YWx1ZXMpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3Rh
bmNlLmFkZEFsbCRjYXBpdGFsaXplZF9uYW1lJCh2YWx1ZXMpO1xuIgotICAgICIgIHJldHVybiB0
aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICAvLyBCdWlsZGVyIGNsZWFyQWxsUmVwZWF0ZWRGaWVs
ZCgpCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVy
IGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4i
Ci0gICAgIiAgaW5zdGFuY2UuY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIKLSAgICAiICBy
ZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0KLSAgLy8gQnVpbGRlciByZW1vdmVSZXBlYXRl
ZEZpZWxkKGludCBpbmRleCkKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3Jp
cHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24k
cHVibGljIEJ1aWxkZXIgcmVtb3ZlJGNhcGl0YWxpemVkX25hbWUkKGludCBpbmRleCkge1xuIgot
ICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2UucmVtb3ZlJGNhcGl0YWxp
emVkX25hbWUkKGluZGV4KTtcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7
Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yOjoK
LUdlbmVyYXRlRmllbGRCdWlsZGVySW5pdGlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSAgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJnZXQkY2Fw
aXRhbGl6ZWRfbmFtZSRGaWVsZEJ1aWxkZXIoKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1t
dXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUluaXRpYWxpemF0aW9u
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLCAiJG5hbWUkXyA9IGVtcHR5UHJvdG9idWZMaXN0KCk7XG4iKTsKLX0KLQotdm9pZCBS
ZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVWaXNp
dENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAgICIkbmFtZSRfPSB2aXNpdG9yLnZpc2l0TGlzdCgkbmFtZSRfLCBvdGhl
ci4kbmFtZSRfKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlTWVzc2FnZUZpZWxk
TGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUR5bmFtaWNNZXRob2RNYWtlSW1tdXRhYmxlQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICIkbmFtZSRfLm1ha2VJbW11dGFibGUoKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVk
SW1tdXRhYmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgImlmICghJGlzX211dGFibGUkKSB7XG4iCi0gICAgIiAgJG5hbWUkXyA9XG4iCi0g
ICAgIiAgICAgIGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxpdGUubXV0YWJs
ZUNvcHkoJG5hbWUkXyk7XG4iCi0gICAgIn1cbiIpOwotCi0gICAgaWYgKEdldFR5cGUoZGVzY3Jp
cHRvcl8pID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCkgewotICAgICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgIiRuYW1lJF8uYWRkKGlucHV0LnJlYWRHcm91cCgk
bnVtYmVyJCwgJHR5cGUkLnBhcnNlcigpLFxuIgotICAgICAgICAiICAgIGV4dGVuc2lvblJlZ2lz
dHJ5KSk7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICAgIiRuYW1lJF8uYWRkKFxuIgotICAgICAgICAiICAgIGlucHV0LnJlYWRNZXNz
YWdlKCR0eXBlJC5wYXJzZXIoKSwgZXh0ZW5zaW9uUmVnaXN0cnkpKTtcbiIpOwotICAgIH0KLX0K
LQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVQYXJzaW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRpc19tdXRhYmxlJCkge1xuIgotICAg
ICIgICRuYW1lJF8ubWFrZUltbXV0YWJsZSgpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBS
ZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJp
YWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICJmb3IgKGludCBpID0gMDsgaSA8ICRuYW1lJF8uc2l6ZSgp
OyBpKyspIHtcbiIKLSAgICAiICBvdXRwdXQud3JpdGUkZ3JvdXBfb3JfbWVzc2FnZSQoJG51bWJl
ciQsICRuYW1lJF8uZ2V0KGkpKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJ
bW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNp
emVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgImZvciAoaW50IGkgPSAwOyBpIDwgJG5hbWUkXy5zaXplKCk7IGkrKykg
e1xuIgotICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0cmVh
bVxuIgotICAgICIgICAgLmNvbXB1dGUkZ3JvdXBfb3JfbWVzc2FnZSRTaXplKCRudW1iZXIkLCAk
bmFtZSRfLmdldChpKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRh
YmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAicmVzdWx0ID0gcmVzdWx0ICYmIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKVxuIgotICAg
ICIgICAgLmVxdWFscyhvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkpO1xuIik7Ci19
Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdl
bmVyYXRlSGFzaENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKGdldCRjYXBpdGFsaXplZF9uYW1lJENvdW50KCkg
PiAwKSB7XG4iCi0gICAgIiAgaGFzaCA9ICgzNyAqIGhhc2gpICsgJGNvbnN0YW50X25hbWUkO1xu
IgotICAgICIgIGhhc2ggPSAoNTMgKiBoYXNoKSArIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3Qo
KS5oYXNoQ29kZSgpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotc3RyaW5nIFJlcGVhdGVkSW1tdXRh
YmxlTWVzc2FnZUZpZWxkTGl0ZUdlbmVyYXRvcjo6R2V0Qm94ZWRUeXBlKCkgY29uc3QgewotICBy
ZXR1cm4gbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXy0+
bWVzc2FnZV90eXBlKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNw
YWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFf
bWVzc2FnZV9maWVsZF9saXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9q
YXZhX21lc3NhZ2VfZmllbGRfbGl0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
MTMyMTU0Nzc4NDkxZTFkYTA3NzFlMGQwOGFiYWQ2YmJkYmRmOWY5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfbWVzc2FnZV9maWVsZF9saXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjog
a2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQ
cm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFu
LCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX01F
U1NBR0VfRklFTERfTElURV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pB
VkFfTUVTU0FHRV9GSUVMRF9MSVRFX0hfXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0
cmluZz4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2ZpZWxk
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLSAgbmFtZXNw
YWNlIGNvbXBpbGVyIHsKLSAgICBuYW1lc3BhY2UgamF2YSB7Ci0gICAgICBjbGFzcyBDb250ZXh0
OyAgICAgICAgICAgLy8gY29udGV4dC5oCi0gICAgICBjbGFzcyBDbGFzc05hbWVSZXNvbHZlcjsg
Ly8gbmFtZV9yZXNvbHZlci5oCi0gICAgfQotICB9Ci19Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1jbGFzcyBJbW11dGFi
bGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yIDogcHVibGljIEltbXV0YWJsZUZpZWxkTGl0ZUdl
bmVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBJbW11dGFibGVNZXNzYWdlRmllbGRMaXRl
R2VuZXJhdG9yKAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQg
bWVzc2FnZUJpdEluZGV4LAotICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwgQ29udGV4dCogY29u
dGV4dCk7Ci0gIH5JbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yKCk7Ci0KLSAgLy8g
aW1wbGVtZW50cyBJbW11dGFibGVGaWVsZExpdGVHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gIGludCBHZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNvbnN0Owot
ICBpbnQgR2V0TnVtQml0c0ZvckJ1aWxkZXIoKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUludGVy
ZmFjZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
TWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWls
ZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJ
bml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlVmlzaXRDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZUR5bmFtaWNNZXRob2RNYWtlSW1tdXRhYmxlQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRp
YWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotICBzdHJpbmcgR2V0Qm94
ZWRUeXBlKCkgY29uc3Q7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZGVzY3JpcHRvcl87Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyaWFibGVzXzsKLSAgY29uc3Qg
aW50IG1lc3NhZ2VCaXRJbmRleF87Ci0gIGNvbnN0IGludCBidWlsZGVyQml0SW5kZXhfOwotICBD
b250ZXh0KiBjb250ZXh0XzsKLSAgQ2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXJfOwot
Ci0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEltbXV0YWJs
ZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgSW1tdXRhYmxlTWVzc2Fn
ZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgSW1tdXRhYmxlTWVzc2FnZUZp
ZWxkTGl0ZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBJbW11dGFibGVNZXNzYWdlT25lb2ZGaWVs
ZExpdGVHZW5lcmF0b3IoCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3Is
IGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICBpbnQgYnVpbGRlckJpdEluZGV4LCBDb250ZXh0
KiBjb250ZXh0KTsKLSAgfkltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcigp
OwotCi0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsK
LSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZVZpc2l0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RS
VUNUT1JTKEltbXV0YWJsZU1lc3NhZ2VPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcik7Ci19OwotCi1j
bGFzcyBSZXBlYXRlZEltbXV0YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3IKLSAgICA6IHB1
YmxpYyBJbW11dGFibGVGaWVsZExpdGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQg
UmVwZWF0ZWRJbW11dGFibGVNZXNzYWdlRmllbGRMaXRlR2VuZXJhdG9yKAotICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAg
aW50IGJ1aWxkZXJCaXRJbmRleCwgQ29udGV4dCogY29udGV4dCk7Ci0gIH5SZXBlYXRlZEltbXV0
YWJsZU1lc3NhZ2VGaWVsZExpdGVHZW5lcmF0b3IoKTsKLQotICAvLyBpbXBsZW1lbnRzIEltbXV0
YWJsZUZpZWxkTGl0ZUdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgaW50IEdldE51bUJpdHNGb3JNZXNzYWdlKCkgY29uc3Q7Ci0gIGludCBHZXROdW1CaXRz
Rm9yQnVpbGRlcigpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSW50ZXJmYWNlTWVtYmVycyhpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUluaXRpYWxpemF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVWaXNpdENvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRHluYW1pY01ldGhv
ZE1ha2VJbW11dGFibGVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBH
ZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBH
ZW5lcmF0ZVBhcnNpbmdEb25lQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZv
aWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRmllbGRCdWlsZGVySW5pdGlhbGl6YXRpb25Db2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUVxdWFsc0NvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSGFzaENvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gIHN0cmluZyBHZXRCb3hlZFR5cGUoKSBjb25zdDsK
LQotIHByb3RlY3RlZDoKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAg
bWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotICBjb25zdCBpbnQgbWVzc2FnZUJpdElu
ZGV4XzsKLSAgY29uc3QgaW50IGJ1aWxkZXJCaXRJbmRleF87Ci0gIENvbnRleHQqIGNvbnRleHRf
OwotICBDbGFzc05hbWVSZXNvbHZlciogbmFtZV9yZXNvbHZlcl87Ci0KLSBwcml2YXRlOgotICBH
T09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUmVwZWF0ZWRJbW11dGFibGVNZXNzYWdl
RmllbGRMaXRlR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBu
YW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX01F
U1NBR0VfRklFTERfTElURV9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9qYXZhL2phdmFfbWVzc2FnZV9saXRlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9tZXNzYWdlX2xpdGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ0ZDI1OTNhNjZiOTE2YWI2NWM5ZGI0ZGI2MWFkZTBhMjAwZWU3MmEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2xpdGUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDk0
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6
IGR3ZWlzQGdvb2dsZS5jb20gKERhbmllbCBXZWlzKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFBy
b3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4s
IGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9q
YXZhX21lc3NhZ2VfbGl0ZS5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1l
bW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2NvbnRleHQuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2RvY19jb21tZW50Lmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2xpdGUuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2V4dGVuc2lvbl9saXRl
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0
b3JfZmFjdG9yeS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfbWVzc2FnZV9idWlsZGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9tZXNzYWdlX2J1aWxkZXJfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
aW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvc3Vic3RpdHV0ZS5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi11c2luZyBp
bnRlcm5hbDo6V2lyZUZvcm1hdDsKLXVzaW5nIGludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTsKLQot
bmFtZXNwYWNlIHsKLWJvb2wgR2VuZXJhdGVIYXNCaXRzKGNvbnN0IERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IpIHsKLSAgcmV0dXJuIFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3ItPmZpbGUo
KSkgfHwKLSAgICAgIEhhc1JlcGVhdGVkRmllbGRzKGRlc2NyaXB0b3IpOwotfQotCi1zdHJpbmcg
TWFwVmFsdWVJbW11dGFibGVDbGFzc2ROYW1lKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3Is
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzTmFtZVJlc29sdmVyKiBu
YW1lX3Jlc29sdmVyKSB7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdmFsdWVfZmllbGQgPSBk
ZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gIEdPT0dMRV9DSEVDS19FUShG
aWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSwgdmFsdWVfZmllbGQtPnR5cGUoKSk7Ci0gIHJl
dHVybiBuYW1lX3Jlc29sdmVyLT5HZXRJbW11dGFibGVDbGFzc05hbWUodmFsdWVfZmllbGQtPm1l
c3NhZ2VfdHlwZSgpKTsKLX0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1JbW11
dGFibGVNZXNzYWdlTGl0ZUdlbmVyYXRvcjo6SW1tdXRhYmxlTWVzc2FnZUxpdGVHZW5lcmF0b3Io
Ci0gICAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwgQ29udGV4dCogY29udGV4dCkKLSAg
OiBNZXNzYWdlR2VuZXJhdG9yKGRlc2NyaXB0b3IpLCBjb250ZXh0Xyhjb250ZXh0KSwKLSAgICBu
YW1lX3Jlc29sdmVyXyhjb250ZXh0LT5HZXROYW1lUmVzb2x2ZXIoKSksCi0gICAgZmllbGRfZ2Vu
ZXJhdG9yc18oZGVzY3JpcHRvciwgY29udGV4dF8pIHsKLSAgR09PR0xFX0NIRUNLKCFIYXNEZXNj
cmlwdG9yTWV0aG9kcyhkZXNjcmlwdG9yLT5maWxlKCksIGNvbnRleHQtPkVuZm9yY2VMaXRlKCkp
KQotICAgICAgPDwgIkdlbmVyYXRvciBmYWN0b3J5IGVycm9yOiBBIGxpdGUgbWVzc2FnZSBnZW5l
cmF0b3IgaXMgdXNlZCB0byAiCi0gICAgICAgICAiZ2VuZXJhdGUgbm9uLWxpdGUgbWVzc2FnZXMu
IjsKLX0KLQotSW1tdXRhYmxlTWVzc2FnZUxpdGVHZW5lcmF0b3I6On5JbW11dGFibGVNZXNzYWdl
TGl0ZUdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZUxpdGVHZW5lcmF0b3I6
OkdlbmVyYXRlU3RhdGljVmFyaWFibGVzKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLCBpbnQq
IGJ5dGVjb2RlX2VzdGltYXRlKSB7Ci0gIC8vIEdlbmVyYXRlIHN0YXRpYyBtZW1iZXJzIGZvciBh
bGwgbmVzdGVkIHR5cGVzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5uZXN0
ZWRfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAvLyBUT0RPKGtlbnRvbik6ICBSZXVzZSBNZXNz
YWdlR2VuZXJhdG9yIG9iamVjdHM/Ci0gICAgSW1tdXRhYmxlTWVzc2FnZUxpdGVHZW5lcmF0b3Io
ZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpLCBjb250ZXh0XykKLSAgICAgICAgLkdlbmVyYXRl
U3RhdGljVmFyaWFibGVzKHByaW50ZXIsIGJ5dGVjb2RlX2VzdGltYXRlKTsKLSAgfQotfQotCi1p
bnQgSW1tdXRhYmxlTWVzc2FnZUxpdGVHZW5lcmF0b3I6OkdlbmVyYXRlU3RhdGljVmFyaWFibGVJ
bml0aWFsaXplcnMoCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaW50IGJ5dGVjb2Rl
X2VzdGltYXRlID0gMDsKLSAgLy8gR2VuZXJhdGUgc3RhdGljIG1lbWJlciBpbml0aWFsaXplcnMg
Zm9yIGFsbCBuZXN0ZWQgdHlwZXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8t
Pm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykgewotICAgIC8vIFRPRE8oa2VudG9uKTogIFJldXNl
IE1lc3NhZ2VHZW5lcmF0b3Igb2JqZWN0cz8KLSAgICBieXRlY29kZV9lc3RpbWF0ZSArPQotICAg
ICAgICBJbW11dGFibGVNZXNzYWdlTGl0ZUdlbmVyYXRvcihkZXNjcmlwdG9yXy0+bmVzdGVkX3R5
cGUoaSksIGNvbnRleHRfKQotICAgICAgICAgICAgLkdlbmVyYXRlU3RhdGljVmFyaWFibGVJbml0
aWFsaXplcnMocHJpbnRlcik7Ci0gIH0KLSAgcmV0dXJuIGJ5dGVjb2RlX2VzdGltYXRlOwotfQot
Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZUxpdGVHZW5lcmF0b3I6Okdl
bmVyYXRlSW50ZXJmYWNlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGlmIChkZXNjcmlwdG9y
Xy0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCkgPiAwKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgICAicHVibGljIGludGVyZmFjZSAkY2xhc3NuYW1lJE9yQnVpbGRlciBleHRlbmRzIFxuIgot
ICAgICAgIiAgICAkZXh0cmFfaW50ZXJmYWNlcyRcbiIKLSAgICAgICIgICAgIGNvbS5nb29nbGUu
cHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxpdGUuXG4iCi0gICAgICAiICAgICAgICAgIEV4dGVu
ZGFibGVNZXNzYWdlT3JCdWlsZGVyPFxuIgotICAgICAgIiAgICAgICAgICAgICAgJGNsYXNzbmFt
ZSQsICRjbGFzc25hbWUkLkJ1aWxkZXI+IHtcbiIsCi0gICAgICAiZXh0cmFfaW50ZXJmYWNlcyIs
IEV4dHJhTWVzc2FnZU9yQnVpbGRlckludGVyZmFjZXMoZGVzY3JpcHRvcl8pLAotICAgICAgImNs
YXNzbmFtZSIsIGRlc2NyaXB0b3JfLT5uYW1lKCkpOwotICB9IGVsc2UgewotICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgInB1YmxpYyBpbnRlcmZhY2UgJGNsYXNzbmFtZSRPckJ1aWxkZXIgZXh0
ZW5kc1xuIgotICAgICAgIiAgICAkZXh0cmFfaW50ZXJmYWNlcyRcbiIKLSAgICAgICIgICAgY29t
Lmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlTGl0ZU9yQnVpbGRlciB7XG4iLAotICAgICAgImV4dHJh
X2ludGVyZmFjZXMiLCBFeHRyYU1lc3NhZ2VPckJ1aWxkZXJJbnRlcmZhY2VzKGRlc2NyaXB0b3Jf
KSwKLSAgICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLSAgfQotCi0gIHBy
aW50ZXItPkluZGVudCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZp
ZWxkX2NvdW50KCk7IGkrKykgewotICAgICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gICAgICBm
aWVsZF9nZW5lcmF0b3JzXy5nZXQoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKQotICAgICAgICAgICAg
ICAgICAgICAgICAuR2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKHByaW50ZXIpOwotICAgIH0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkr
KykgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIlxuIgotICAgICAgICAgICJw
dWJsaWMgJGNsYXNzbmFtZSQuJG9uZW9mX2NhcGl0YWxpemVkX25hbWUkQ2FzZSAiCi0gICAgICAg
ICAgImdldCRvbmVvZl9jYXBpdGFsaXplZF9uYW1lJENhc2UoKTtcbiIsCi0gICAgICAgICAgIm9u
ZW9mX2NhcGl0YWxpemVkX25hbWUiLAotICAgICAgICAgIGNvbnRleHRfLT5HZXRPbmVvZkdlbmVy
YXRvckluZm8oCi0gICAgICAgICAgICAgIGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpKS0+Y2Fw
aXRhbGl6ZWRfbmFtZSwKLSAgICAgICAgICAiY2xhc3NuYW1lIiwKLSAgICAgICAgICBjb250ZXh0
Xy0+R2V0TmFtZVJlc29sdmVyKCktPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXykp
OwotICAgIH0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotCi0gIHByaW50ZXItPlByaW50KCJ9XG4i
KTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VMaXRlR2VuZXJh
dG9yOjpHZW5lcmF0ZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBib29sIGlzX293bl9maWxl
ID0KLSAgICBkZXNjcmlwdG9yXy0+Y29udGFpbmluZ190eXBlKCkgPT0gTlVMTCAmJgotICAgIE11
bHRpcGxlSmF2YUZpbGVzKGRlc2NyaXB0b3JfLT5maWxlKCksIC8qIGltbXV0YWJsZSA9ICovIHRy
dWUpOwotCi0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyaWFibGVzOwotICB2YXJpYWJsZXNbInN0
YXRpYyJdID0gaXNfb3duX2ZpbGUgPyAiICIgOiAiIHN0YXRpYyAiOwotICB2YXJpYWJsZXNbImNs
YXNzbmFtZSJdID0gZGVzY3JpcHRvcl8tPm5hbWUoKTsKLSAgdmFyaWFibGVzWyJleHRyYV9pbnRl
cmZhY2VzIl0gPSBFeHRyYU1lc3NhZ2VJbnRlcmZhY2VzKGRlc2NyaXB0b3JfKTsKLQotICBXcml0
ZU1lc3NhZ2VEb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLQotICAvLyBUaGUgYnVp
bGRlcl90eXBlIHN0b3JlcyB0aGUgc3VwZXIgdHlwZSBuYW1lIG9mIHRoZSBuZXN0ZWQgQnVpbGRl
ciBjbGFzcy4KLSAgc3RyaW5nIGJ1aWxkZXJfdHlwZTsKLSAgaWYgKGRlc2NyaXB0b3JfLT5leHRl
bnNpb25fcmFuZ2VfY291bnQoKSA+IDApIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXMs
Ci0gICAgICAicHVibGljICRzdGF0aWMkZmluYWwgY2xhc3MgJGNsYXNzbmFtZSQgZXh0ZW5kc1xu
IgotICAgICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VMaXRlLkV4
dGVuZGFibGVNZXNzYWdlPFxuIgotICAgICAgIiAgICAgICRjbGFzc25hbWUkLCAkY2xhc3NuYW1l
JC5CdWlsZGVyPiBpbXBsZW1lbnRzXG4iCi0gICAgICAiICAgICRleHRyYV9pbnRlcmZhY2VzJFxu
IgotICAgICAgIiAgICAkY2xhc3NuYW1lJE9yQnVpbGRlciB7XG4iKTsKLSAgICBidWlsZGVyX3R5
cGUgPSBzdHJpbmdzOjpTdWJzdGl0dXRlKAotICAgICAgICAiY29tLmdvb2dsZS5wcm90b2J1Zi5H
ZW5lcmF0ZWRNZXNzYWdlTGl0ZS5FeHRlbmRhYmxlQnVpbGRlcjwkMCwgPz4iLAotICAgICAgICBu
YW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKSk7Ci0gIH0g
ZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICAgICAicHVibGljICRz
dGF0aWMkZmluYWwgY2xhc3MgJGNsYXNzbmFtZSQgZXh0ZW5kc1xuIgotICAgICAgICAiICAgIGNv
bS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxpdGU8XG4iCi0gICAgICAgICIgICAg
ICAgICRjbGFzc25hbWUkLCAkY2xhc3NuYW1lJC5CdWlsZGVyPiBpbXBsZW1lbnRzXG4iCi0gICAg
ICAgICIgICAgJGV4dHJhX2ludGVyZmFjZXMkXG4iCi0gICAgICAgICIgICAgJGNsYXNzbmFtZSRP
ckJ1aWxkZXIge1xuIik7Ci0KLSAgICBidWlsZGVyX3R5cGUgPSAiY29tLmdvb2dsZS5wcm90b2J1
Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5CdWlsZGVyIjsKLSAgfQotICBwcmludGVyLT5JbmRlbnQo
KTsKLQotCi0gIEdlbmVyYXRlQ29uc3RydWN0b3IocHJpbnRlcik7Ci0KLSAgLy8gTmVzdGVkIHR5
cGVzCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmVudW1fdHlwZV9jb3VudCgp
OyBpKyspIHsKLSAgICBFbnVtTGl0ZUdlbmVyYXRvcihkZXNjcmlwdG9yXy0+ZW51bV90eXBlKGkp
LCB0cnVlLCBjb250ZXh0XykKLSAgICAgICAgLkdlbmVyYXRlKHByaW50ZXIpOwotICB9Ci0KLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+bmVzdGVkX3R5cGVfY291bnQoKTsgaSsr
KSB7Ci0gICAgLy8gRG9uJ3QgZ2VuZXJhdGUgSmF2YSBjbGFzc2VzIGZvciBtYXAgZW50cnkgbWVz
c2FnZXMuCi0gICAgaWYgKElzTWFwRW50cnkoZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpKSkg
Y29udGludWU7Ci0gICAgSW1tdXRhYmxlTWVzc2FnZUxpdGVHZW5lcmF0b3IgbWVzc2FnZUdlbmVy
YXRvcigKLSAgICAgICAgZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpLCBjb250ZXh0Xyk7Ci0g
ICAgbWVzc2FnZUdlbmVyYXRvci5HZW5lcmF0ZUludGVyZmFjZShwcmludGVyKTsKLSAgICBtZXNz
YWdlR2VuZXJhdG9yLkdlbmVyYXRlKHByaW50ZXIpOwotICB9Ci0KLSAgaWYgKEdlbmVyYXRlSGFz
Qml0cyhkZXNjcmlwdG9yXykpIHsKLSAgICAvLyBJbnRlZ2VycyBmb3IgYml0IGZpZWxkcy4KLSAg
ICBpbnQgdG90YWxCaXRzID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3Jf
LT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICAgIHRvdGFsQml0cyArPSBmaWVsZF9nZW5lcmF0
b3JzXy5nZXQoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKQotICAgICAgICAgIC5HZXROdW1CaXRzRm9y
TWVzc2FnZSgpOwotICAgIH0KLSAgICBpbnQgdG90YWxJbnRzID0gKHRvdGFsQml0cyArIDMxKSAv
IDMyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxJbnRzOyBpKyspIHsKLSAgICAgIHBy
aW50ZXItPlByaW50KCJwcml2YXRlIGludCAkYml0X2ZpZWxkX25hbWUkO1xuIiwKLSAgICAgICAg
ImJpdF9maWVsZF9uYW1lIiwgR2V0Qml0RmllbGROYW1lKGkpKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBvbmVvZgotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDwgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2xfY291bnQoKTsgaSsrKSB7Ci0gICAgdmFyc1sib25l
b2ZfbmFtZSJdID0gY29udGV4dF8tPkdldE9uZW9mR2VuZXJhdG9ySW5mbygKLSAgICAgICAgZGVz
Y3JpcHRvcl8tPm9uZW9mX2RlY2woaSkpLT5uYW1lOwotICAgIHZhcnNbIm9uZW9mX2NhcGl0YWxp
emVkX25hbWUiXSA9IGNvbnRleHRfLT5HZXRPbmVvZkdlbmVyYXRvckluZm8oCi0gICAgICAgIGRl
c2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpKS0+Y2FwaXRhbGl6ZWRfbmFtZTsKLSAgICB2YXJzWyJv
bmVvZl9pbmRleCJdID0gU2ltcGxlSXRvYShkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKS0+aW5k
ZXgoKSk7Ci0gICAgLy8gb25lb2ZDYXNlXyBhbmQgb25lb2ZfCi0gICAgcHJpbnRlci0+UHJpbnQo
dmFycywKLSAgICAgICJwcml2YXRlIGludCAkb25lb2ZfbmFtZSRDYXNlXyA9IDA7XG4iCi0gICAg
ICAicHJpdmF0ZSBqYXZhLmxhbmcuT2JqZWN0ICRvbmVvZl9uYW1lJF87XG4iKTsKLSAgICAvLyBP
bmVvZkNhc2UgZW51bQotICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAicHVibGljIGVu
dW0gJG9uZW9mX2NhcGl0YWxpemVkX25hbWUkQ2FzZVxuIgotICAgICAgIiAgICBpbXBsZW1lbnRz
IGNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJuYWwuRW51bUxpdGUge1xuIik7Ci0gICAgcHJpbnRl
ci0+SW5kZW50KCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBkZXNjcmlwdG9yXy0+b25lb2Zf
ZGVjbChpKS0+ZmllbGRfY291bnQoKTsgaisrKSB7Ci0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSktPmZpZWxkKGopOwotICAgICAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIkZmllbGRfbmFtZSQoJGZpZWxkX251bWJlciQpLFxu
IiwKLSAgICAgICAgImZpZWxkX25hbWUiLAotICAgICAgICBUb1VwcGVyKGZpZWxkLT5uYW1lKCkp
LAotICAgICAgICAiZmllbGRfbnVtYmVyIiwKLSAgICAgICAgU2ltcGxlSXRvYShmaWVsZC0+bnVt
YmVyKCkpKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiJGNhcF9vbmVvZl9u
YW1lJF9OT1RfU0VUKDApO1xuIiwKLSAgICAgICJjYXBfb25lb2ZfbmFtZSIsCi0gICAgICBUb1Vw
cGVyKHZhcnNbIm9uZW9mX25hbWUiXSkpOwotICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAg
ICAicHJpdmF0ZSBmaW5hbCBpbnQgdmFsdWU7XG4iCi0gICAgICAicHJpdmF0ZSAkb25lb2ZfY2Fw
aXRhbGl6ZWRfbmFtZSRDYXNlKGludCB2YWx1ZSkge1xuIgotICAgICAgIiAgdGhpcy52YWx1ZSA9
IHZhbHVlO1xuIgotICAgICAgIn1cbiIpOwotICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAg
ICAiLyoqXG4iCi0gICAgICAiICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayAjZm9yTnVtYmVyKGlu
dCl9IGluc3RlYWQuXG4iCi0gICAgICAiICovXG4iCi0gICAgICAiQGphdmEubGFuZy5EZXByZWNh
dGVkXG4iCi0gICAgICAicHVibGljIHN0YXRpYyAkb25lb2ZfY2FwaXRhbGl6ZWRfbmFtZSRDYXNl
IHZhbHVlT2YoaW50IHZhbHVlKSB7XG4iCi0gICAgICAiICByZXR1cm4gZm9yTnVtYmVyKHZhbHVl
KTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiXG4iCi0gICAgICAicHVibGljIHN0YXRpYyAkb25l
b2ZfY2FwaXRhbGl6ZWRfbmFtZSRDYXNlIGZvck51bWJlcihpbnQgdmFsdWUpIHtcbiIKLSAgICAg
ICIgIHN3aXRjaCAodmFsdWUpIHtcbiIpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGVzY3Jp
cHRvcl8tPm9uZW9mX2RlY2woaSktPmZpZWxkX2NvdW50KCk7IGorKykgewotICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVs
ZChqKTsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiICAgIGNhc2UgJGZpZWxkX251
bWJlciQ6IHJldHVybiAkZmllbGRfbmFtZSQ7XG4iLAotICAgICAgICAiZmllbGRfbnVtYmVyIiwK
LSAgICAgICAgU2ltcGxlSXRvYShmaWVsZC0+bnVtYmVyKCkpLAotICAgICAgICAiZmllbGRfbmFt
ZSIsCi0gICAgICAgIFRvVXBwZXIoZmllbGQtPm5hbWUoKSkpOwotICAgIH0KLSAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICIgICAgY2FzZSAwOiByZXR1cm4gJGNhcF9vbmVvZl9uYW1lJF9OT1Rf
U0VUO1xuIgotICAgICAgIiAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcbiIKLSAgICAgICIgIH1c
biIKLSAgICAgICJ9XG4iCi0gICAgICAicHVibGljIGludCBnZXROdW1iZXIoKSB7XG4iCi0gICAg
ICAiICByZXR1cm4gdGhpcy52YWx1ZTtcbiIKLSAgICAgICJ9XG4iLAotICAgICAgImNhcF9vbmVv
Zl9uYW1lIiwgVG9VcHBlcih2YXJzWyJvbmVvZl9uYW1lIl0pKTsKLSAgICBwcmludGVyLT5PdXRk
ZW50KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoIn07XG5cbiIpOwotICAgIC8vIG9uZW9mQ2FzZSgp
Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICJwdWJsaWMgJG9uZW9mX2NhcGl0YWxp
emVkX25hbWUkQ2FzZVxuIgotICAgICAgImdldCRvbmVvZl9jYXBpdGFsaXplZF9uYW1lJENhc2Uo
KSB7XG4iCi0gICAgICAiICByZXR1cm4gJG9uZW9mX2NhcGl0YWxpemVkX25hbWUkQ2FzZS5mb3JO
dW1iZXIoXG4iCi0gICAgICAiICAgICAgJG9uZW9mX25hbWUkQ2FzZV8pO1xuIgotICAgICAgIn1c
biIKLSAgICAgICJcbiIKLSAgICAgICJwcml2YXRlIHZvaWQgY2xlYXIkb25lb2ZfY2FwaXRhbGl6
ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAiICAkb25lb2ZfbmFtZSRDYXNlXyA9IDA7XG4iCi0gICAg
ICAiICAkb25lb2ZfbmFtZSRfID0gbnVsbDtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiXG4iKTsK
LSAgfQotCi0gIC8vIEZpZWxkcwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5m
aWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBwcmludGVyLT5QcmludCgicHVibGljIHN0YXRpYyBm
aW5hbCBpbnQgJGNvbnN0YW50X25hbWUkID0gJG51bWJlciQ7XG4iLAotICAgICAgImNvbnN0YW50
X25hbWUiLCBGaWVsZENvbnN0YW50TmFtZShkZXNjcmlwdG9yXy0+ZmllbGQoaSkpLAotICAgICAg
Im51bWJlciIsIFNpbXBsZUl0b2EoZGVzY3JpcHRvcl8tPmZpZWxkKGkpLT5udW1iZXIoKSkpOwot
ICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpLkdlbmVyYXRl
TWVtYmVycyhwcmludGVyKTsKLSAgICBwcmludGVyLT5QcmludCgiXG4iKTsKLSAgfQotCi0gIEdl
bmVyYXRlTWVzc2FnZVNlcmlhbGl6YXRpb25NZXRob2RzKHByaW50ZXIpOwotCi0gIEdlbmVyYXRl
UGFyc2VGcm9tTWV0aG9kcyhwcmludGVyKTsKLSAgR2VuZXJhdGVCdWlsZGVyKHByaW50ZXIpOwot
Ci0gIGlmIChIYXNSZXF1aXJlZEZpZWxkcyhkZXNjcmlwdG9yXykpIHsKLSAgICAvLyBNZW1vaXpl
cyB3aGV0aGVyIHRoZSBwcm90b2NvbCBidWZmZXIgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGhhcyBh
bGwKLSAgICAvLyByZXF1aXJlZCBmaWVsZHMpLiAtMSBtZWFucyBub3QgeWV0IGNvbXB1dGVkLiAw
IG1lYW5zIGZhbHNlIGFuZCAxIG1lYW5zCi0gICAgLy8gdHJ1ZS4KLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJwcml2YXRlIGJ5dGUgbWVtb2l6ZWRJc0luaXRpYWxpemVkID0gLTE7XG4iKTsK
LSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICJwcm90ZWN0ZWQgZmluYWwgT2JqZWN0IGR5
bmFtaWNNZXRob2QoXG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1l
c3NhZ2VMaXRlLk1ldGhvZFRvSW52b2tlIG1ldGhvZCxcbiIKLSAgICAiICAgIE9iamVjdCBhcmcw
LCBPYmplY3QgYXJnMSkge1xuIgotICAgICIgIHN3aXRjaCAobWV0aG9kKSB7XG4iCi0gICAgIiAg
ICBjYXNlIE5FV19NVVRBQkxFX0lOU1RBTkNFOiB7XG4iCi0gICAgIiAgICAgIHJldHVybiBuZXcg
JGNsYXNzbmFtZSQoKTtcbiIKLSAgICAiICAgIH1cbiIsCi0gICAgImNsYXNzbmFtZSIsIG5hbWVf
cmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pKTsKLQotICBwcmlu
dGVyLT5JbmRlbnQoKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgImNhc2UgSVNfSU5JVElBTElaRUQ6IHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsK
LSAgR2VuZXJhdGVEeW5hbWljTWV0aG9kSXNJbml0aWFsaXplZChwcmludGVyKTsKLSAgcHJpbnRl
ci0+T3V0ZGVudCgpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICJ9XG4iCi0gICAgImNhc2Ug
TUFLRV9JTU1VVEFCTEU6IHtcbiIpOwotCi0gIHByaW50ZXItPkluZGVudCgpOwotICBHZW5lcmF0
ZUR5bmFtaWNNZXRob2RNYWtlSW1tdXRhYmxlKHByaW50ZXIpOwotICBwcmludGVyLT5PdXRkZW50
KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIn1cbiIKLSAgICAiY2FzZSBORVdfQlVJTERF
Ujoge1xuIik7Ci0KLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0gIEdlbmVyYXRlRHluYW1pY01ldGhv
ZE5ld0J1aWxkZXIocHJpbnRlcik7Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLQotICBwcmludGVy
LT5QcmludCgKLSAgICAifVxuIgotICAgICJjYXNlIFZJU0lUOiB7XG4iKTsKLQotICBwcmludGVy
LT5JbmRlbnQoKTsKLSAgR2VuZXJhdGVEeW5hbWljTWV0aG9kVmlzaXQocHJpbnRlcik7Ci0gIHBy
aW50ZXItPk91dGRlbnQoKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAifVxuIgotICAgICJj
YXNlIE1FUkdFX0ZST01fU1RSRUFNOiB7XG4iKTsKLQotICBwcmludGVyLT5JbmRlbnQoKTsKLSAg
R2VuZXJhdGVEeW5hbWljTWV0aG9kTWVyZ2VGcm9tU3RyZWFtKHByaW50ZXIpOwotICBwcmludGVy
LT5PdXRkZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIn1cbiIKLSAgICAiY2FzZSBH
RVRfREVGQVVMVF9JTlNUQU5DRToge1xuIgotICAgICIgIHJldHVybiBERUZBVUxUX0lOU1RBTkNF
O1xuIgotICAgICJ9XG4iCi0gICAgImNhc2UgR0VUX1BBUlNFUjoge1xuIgotICAgIC8vIEdlbmVy
YWxseSBvbmUgd291bGQgdXNlIHRoZSBsYXp5IGluaXRpYWxpemF0aW9uIGhvbGRlciBwYXR0ZXJu
IGZvcgotICAgIC8vIG1hbmlwdWxhdGluZyBzdGF0aWMgZmllbGRzIGJ1dCB0aGF0IGhhcyBleGNl
cHRpb25hbCBjb3N0IG9uIEFuZHJvaWQgYXMKLSAgICAvLyBpdCB3aWxsIGdlbmVyYXRlIGFuIGV4
dHJhIGNsYXNzIGZvciBldmVyeSBtZXNzYWdlLiBJbnN0ZWFkLCB1c2UgdGhlCi0gICAgLy8gZG91
YmxlLWNoZWNrIGxvY2tpbmcgcGF0dGVybiB3aGljaCB3b3JrcyBqdXN0IGFzIHdlbGwuCi0gICAg
IiAgaWYgKFBBUlNFUiA9PSBudWxsKSB7IgotICAgICIgICAgc3luY2hyb25pemVkICgkY2xhc3Nu
YW1lJC5jbGFzcykge1xuIgotICAgICIgICAgICBpZiAoUEFSU0VSID09IG51bGwpIHtcbiIKLSAg
ICAiICAgICAgICBQQVJTRVIgPSBuZXcgRGVmYXVsdEluc3RhbmNlQmFzZWRQYXJzZXIoREVGQVVM
VF9JTlNUQU5DRSk7XG4iCi0gICAgIiAgICAgIH1cbiIKLSAgICAiICAgIH1cbiIKLSAgICAiICB9
XG4iCi0gICAgIiAgcmV0dXJuIFBBUlNFUjtcbiIKLSAgICAifVxuIiwKLSAgICAiY2xhc3NuYW1l
IiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXykpOwot
Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotCi0gIHByaW50
ZXItPlByaW50KAotICAgICIgIH1cbiIKLSAgICAiICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVy
YXRpb25FeGNlcHRpb24oKTtcbiIKLSAgICAifVxuIgotICAgICJcbiIsCi0gICAgImNsYXNzbmFt
ZSIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pKTsK
LQotICBwcmludGVyLT5QcmludCgKLSAgICAiXG4iCi0gICAgIi8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChjbGFzc19zY29wZTokZnVsbF9uYW1lJClcbiIsCi0gICAgImZ1bGxfbmFtZSIsIGRl
c2NyaXB0b3JfLT5mdWxsX25hbWUoKSk7Ci0KLQotICAvLyBDYXJlZnVsbHkgaW5pdGlhbGl6ZSB0
aGUgZGVmYXVsdCBpbnN0YW5jZSBpbiBzdWNoIGEgd2F5IHRoYXQgaXQgZG9lc24ndAotICAvLyBj
b25mbGljdCB3aXRoIG90aGVyIGluaXRpYWxpemF0aW9uLgotICBwcmludGVyLT5QcmludCgKLSAg
ICAicHJpdmF0ZSBzdGF0aWMgZmluYWwgJGNsYXNzbmFtZSQgREVGQVVMVF9JTlNUQU5DRTtcbiIs
Ci0gICAgImNsYXNzbmFtZSIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUo
ZGVzY3JpcHRvcl8pKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAic3RhdGljIHtcbiIKLSAg
ICAiICBERUZBVUxUX0lOU1RBTkNFID0gbmV3ICRjbGFzc25hbWUkKCk7XG4iCi0gICAgIiAgREVG
QVVMVF9JTlNUQU5DRS5tYWtlSW1tdXRhYmxlKCk7XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iLAot
ICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAicHVibGljIHN0YXRpYyAkY2xhc3NuYW1lJCBnZXREZWZhdWx0SW5zdGFuY2UoKSB7
XG4iCi0gICAgICAiICByZXR1cm4gREVGQVVMVF9JTlNUQU5DRTtcbiIKLSAgICAgICJ9XG4iCi0g
ICAgICAiXG4iLAotICAgICAgImNsYXNzbmFtZSIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFi
bGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pKTsKLQotICBHZW5lcmF0ZVBhcnNlcihwcmludGVyKTsK
LQotICAvLyBFeHRlbnNpb25zIG11c3QgYmUgZGVjbGFyZWQgYWZ0ZXIgdGhlIERFRkFVTFRfSU5T
VEFOQ0UgaXMgaW5pdGlhbGl6ZWQKLSAgLy8gYmVjYXVzZSB0aGUgREVGQVVMVF9JTlNUQU5DRSBp
cyB1c2VkIGJ5IHRoZSBleHRlbnNpb24gdG8gbGF6aWx5IHJldHJpZXZlCi0gIC8vIHRoZSBvdXRl
ciBjbGFzcydzIEZpbGVEZXNjcmlwdG9yLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0
b3JfLT5leHRlbnNpb25fY291bnQoKTsgaSsrKSB7Ci0gICAgSW1tdXRhYmxlRXh0ZW5zaW9uTGl0
ZUdlbmVyYXRvcihkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uKGkpLCBjb250ZXh0XykKLSAgICAgICAg
LkdlbmVyYXRlKHByaW50ZXIpOwotICB9Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmlu
dGVyLT5QcmludCgifVxuXG4iKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkIEltbXV0YWJs
ZU1lc3NhZ2VMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVzc2FnZVNlcmlhbGl6YXRpb25NZXRo
b2RzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9h
cnJheTxjb25zdCBGaWVsZERlc2NyaXB0b3IgKiA+IHNvcnRlZF9maWVsZHMoCi0gICAgICBTb3J0
RmllbGRzQnlOdW1iZXIoZGVzY3JpcHRvcl8pKTsKLQotICB2ZWN0b3I8Y29uc3QgRGVzY3JpcHRv
cjo6RXh0ZW5zaW9uUmFuZ2UqPiBzb3J0ZWRfZXh0ZW5zaW9uczsKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCk7ICsraSkgewotICAgIHNv
cnRlZF9leHRlbnNpb25zLnB1c2hfYmFjayhkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3JhbmdlKGkp
KTsKLSAgfQotICBzdGQ6OnNvcnQoc29ydGVkX2V4dGVuc2lvbnMuYmVnaW4oKSwgc29ydGVkX2V4
dGVuc2lvbnMuZW5kKCksCi0gICAgICAgICAgICBFeHRlbnNpb25SYW5nZU9yZGVyaW5nKCkpOwot
Ci0gIHByaW50ZXItPlByaW50KAotICAgICJwdWJsaWMgdm9pZCB3cml0ZVRvKGNvbS5nb29nbGUu
cHJvdG9idWYuQ29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KVxuIgotICAgICIgICAgICAgICAgICAg
ICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHtcbiIpOwotICBwcmludGVyLT5JbmRl
bnQoKTsKLSAgaWYgKEhhc1BhY2tlZEZpZWxkcyhkZXNjcmlwdG9yXykpIHsKLSAgICAvLyB3cml0
ZVRvKENvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCkgbWlnaHQgYmUgaW52b2tlZCB3aXRob3V0Ci0g
ICAgLy8gZ2V0U2VyaWFsaXplZFNpemUoKSBldmVyIGJlaW5nIGNhbGxlZCwgYnV0IHdlIG5lZWQg
dGhlIG1lbW9pemVkCi0gICAgLy8gc2l6ZXMgaW4gY2FzZSB0aGlzIG1lc3NhZ2UgaGFzIHBhY2tl
ZCBmaWVsZHMuIFJhdGhlciB0aGFuIGVtaXQgY2hlY2tzIGZvcgotICAgIC8vIGVhY2ggcGFja2Vk
IGZpZWxkLCBqdXN0IGNhbGwgZ2V0U2VyaWFsaXplZFNpemUoKSB1cCBmcm9udC4KLSAgICAvLyBJ
biBtb3N0IGNhc2VzLCBnZXRTZXJpYWxpemVkU2l6ZSgpIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4g
Y2FsbGVkIGFueXdheQotICAgIC8vIGJ5IG9uZSBvZiB0aGUgd3JhcHBlciB3cml0ZVRvKCkgbWV0
aG9kcywgbWFraW5nIHRoaXMgY2FsbCBjaGVhcC4KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICJnZXRTZXJpYWxpemVkU2l6ZSgpO1xuIik7Ci0gIH0KLQotICBpZiAoZGVzY3JpcHRvcl8tPmV4
dGVuc2lvbl9yYW5nZV9jb3VudCgpID4gMCkgewotICAgIGlmIChkZXNjcmlwdG9yXy0+b3B0aW9u
cygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgICAiY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZVxuIgotICAg
ICAgICAiICAuRXh0ZW5kYWJsZU1lc3NhZ2U8JGNsYXNzbmFtZSQsICRjbGFzc25hbWUkLkJ1aWxk
ZXI+XG4iCi0gICAgICAgICIgICAgLkV4dGVuc2lvbldyaXRlciBleHRlbnNpb25Xcml0ZXIgPVxu
IgotICAgICAgICAiICAgICAgbmV3TWVzc2FnZVNldEV4dGVuc2lvbldyaXRlcigpO1xuIiwKLSAg
ICAgICAgImNsYXNzbmFtZSIsIG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUo
ZGVzY3JpcHRvcl8pKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICJjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VMaXRlXG4iCi0gICAgICAg
ICIgIC5FeHRlbmRhYmxlTWVzc2FnZTwkY2xhc3NuYW1lJCwgJGNsYXNzbmFtZSQuQnVpbGRlcj5c
biIKLSAgICAgICAgIiAgICAuRXh0ZW5zaW9uV3JpdGVyIGV4dGVuc2lvbldyaXRlciA9XG4iCi0g
ICAgICAgICIgICAgICBuZXdFeHRlbnNpb25Xcml0ZXIoKTtcbiIsCi0gICAgICAgICJjbGFzc25h
bWUiLCBuYW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3JfKSk7
Ci0gICAgfQotICB9Ci0KLSAgLy8gTWVyZ2UgdGhlIGZpZWxkcyBhbmQgdGhlIGV4dGVuc2lvbiBy
YW5nZXMsIGJvdGggc29ydGVkIGJ5IGZpZWxkIG51bWJlci4KLSAgZm9yIChpbnQgaSA9IDAsIGog
PSAwOwotICAgICAgIGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKSB8fCBqIDwgc29ydGVk
X2V4dGVuc2lvbnMuc2l6ZSgpOwotICAgICAgICkgewotICAgIGlmIChpID09IGRlc2NyaXB0b3Jf
LT5maWVsZF9jb3VudCgpKSB7Ci0gICAgICBHZW5lcmF0ZVNlcmlhbGl6ZU9uZUV4dGVuc2lvblJh
bmdlKHByaW50ZXIsIHNvcnRlZF9leHRlbnNpb25zW2orK10pOwotICAgIH0gZWxzZSBpZiAoaiA9
PSBzb3J0ZWRfZXh0ZW5zaW9ucy5zaXplKCkpIHsKLSAgICAgIEdlbmVyYXRlU2VyaWFsaXplT25l
RmllbGQocHJpbnRlciwgc29ydGVkX2ZpZWxkc1tpKytdKTsKLSAgICB9IGVsc2UgaWYgKHNvcnRl
ZF9maWVsZHNbaV0tPm51bWJlcigpIDwgc29ydGVkX2V4dGVuc2lvbnNbal0tPnN0YXJ0KSB7Ci0g
ICAgICBHZW5lcmF0ZVNlcmlhbGl6ZU9uZUZpZWxkKHByaW50ZXIsIHNvcnRlZF9maWVsZHNbaSsr
XSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdlbmVyYXRlU2VyaWFsaXplT25lRXh0ZW5zaW9uUmFu
Z2UocHJpbnRlciwgc29ydGVkX2V4dGVuc2lvbnNbaisrXSk7Ci0gICAgfQotICB9Ci0KLSAgaWYg
KFByZXNlcnZlVW5rbm93bkZpZWxkcyhkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJ1bmtub3duRmllbGRzLndyaXRlVG8ob3V0cHV0KTtcbiIpOwotICB9Ci0KLSAg
cHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAifVxuIgotICAgICJc
biIKLSAgICAicHVibGljIGludCBnZXRTZXJpYWxpemVkU2l6ZSgpIHtcbiIKLSAgICAiICBpbnQg
c2l6ZSA9IG1lbW9pemVkU2VyaWFsaXplZFNpemU7XG4iCi0gICAgIiAgaWYgKHNpemUgIT0gLTEp
IHJldHVybiBzaXplO1xuIgotICAgICJcbiIKLSAgICAiICBzaXplID0gMDtcbiIpOwotICBwcmlu
dGVyLT5JbmRlbnQoKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVs
ZF9jb3VudCgpOyBpKyspIHsKLSAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoc29ydGVkX2ZpZWxk
c1tpXSkuR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUocHJpbnRlcik7Ci0gIH0KLQotICBpZiAo
ZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgpID4gMCkgewotICAgIGlmIChkZXNj
cmlwdG9yXy0+b3B0aW9ucygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICAgIHBy
aW50ZXItPlByaW50KAotICAgICAgICAic2l6ZSArPSBleHRlbnNpb25zU2VyaWFsaXplZFNpemVB
c01lc3NhZ2VTZXQoKTtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICAgInNpemUgKz0gZXh0ZW5zaW9uc1NlcmlhbGl6ZWRTaXplKCk7XG4iKTsKLSAgICB9
Ci0gIH0KLQotICBpZiAoUHJlc2VydmVVbmtub3duRmllbGRzKGRlc2NyaXB0b3JfKSkgewotICAg
IHByaW50ZXItPlByaW50KAotICAgICAgInNpemUgKz0gdW5rbm93bkZpZWxkcy5nZXRTZXJpYWxp
emVkU2l6ZSgpO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXIt
PlByaW50KAotICAgICIgIG1lbW9pemVkU2VyaWFsaXplZFNpemUgPSBzaXplO1xuIgotICAgICIg
IHJldHVybiBzaXplO1xuIgotICAgICJ9XG4iCi0gICAgIlxuIik7Ci19Ci0KLXZvaWQgSW1tdXRh
YmxlTWVzc2FnZUxpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzZUZyb21NZXRob2RzKGlvOjpQ
cmludGVyKiBwcmludGVyKSB7Ci0gIC8vIE5vdGU6ICBUaGVzZSBhcmUgc2VwYXJhdGUgZnJvbSBH
ZW5lcmF0ZU1lc3NhZ2VTZXJpYWxpemF0aW9uTWV0aG9kcygpCi0gIC8vICAgYmVjYXVzZSB0aGV5
IG5lZWQgdG8gYmUgZ2VuZXJhdGVkIGV2ZW4gZm9yIG1lc3NhZ2VzIHRoYXQgYXJlIG9wdGltaXpl
ZAotICAvLyAgIGZvciBjb2RlIHNpemUuCi0gIHByaW50ZXItPlByaW50KAotICAgICJwdWJsaWMg
c3RhdGljICRjbGFzc25hbWUkIHBhcnNlRnJvbShcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJv
dG9idWYuQnl0ZVN0cmluZyBkYXRhKVxuIgotICAgICIgICAgdGhyb3dzIGNvbS5nb29nbGUucHJv
dG9idWYuSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHtcbiIKLSAgICAiICByZXR1cm4g
Y29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5wYXJzZUZyb20oXG4iCi0g
ICAgIiAgICAgIERFRkFVTFRfSU5TVEFOQ0UsIGRhdGEpO1xuIgotICAgICJ9XG4iCi0gICAgInB1
YmxpYyBzdGF0aWMgJGNsYXNzbmFtZSQgcGFyc2VGcm9tKFxuIgotICAgICIgICAgY29tLmdvb2ds
ZS5wcm90b2J1Zi5CeXRlU3RyaW5nIGRhdGEsXG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnByb3Rv
YnVmLkV4dGVuc2lvblJlZ2lzdHJ5TGl0ZSBleHRlbnNpb25SZWdpc3RyeSlcbiIKLSAgICAiICAg
IHRocm93cyBjb20uZ29vZ2xlLnByb3RvYnVmLkludmFsaWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlv
biB7XG4iCi0gICAgIiAgcmV0dXJuIGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2Fn
ZUxpdGUucGFyc2VGcm9tKFxuIgotICAgICIgICAgICBERUZBVUxUX0lOU1RBTkNFLCBkYXRhLCBl
eHRlbnNpb25SZWdpc3RyeSk7XG4iCi0gICAgIn1cbiIKLSAgICAicHVibGljIHN0YXRpYyAkY2xh
c3NuYW1lJCBwYXJzZUZyb20oYnl0ZVtdIGRhdGEpXG4iCi0gICAgIiAgICB0aHJvd3MgY29tLmdv
b2dsZS5wcm90b2J1Zi5JbnZhbGlkUHJvdG9jb2xCdWZmZXJFeGNlcHRpb24ge1xuIgotICAgICIg
IHJldHVybiBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VMaXRlLnBhcnNlRnJv
bShcbiIKLSAgICAiICAgICAgREVGQVVMVF9JTlNUQU5DRSwgZGF0YSk7XG4iCi0gICAgIn1cbiIK
LSAgICAicHVibGljIHN0YXRpYyAkY2xhc3NuYW1lJCBwYXJzZUZyb20oXG4iCi0gICAgIiAgICBi
eXRlW10gZGF0YSxcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmVn
aXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KVxuIgotICAgICIgICAgdGhyb3dzIGNvbS5nb29n
bGUucHJvdG9idWYuSW52YWxpZFByb3RvY29sQnVmZmVyRXhjZXB0aW9uIHtcbiIKLSAgICAiICBy
ZXR1cm4gY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5wYXJzZUZyb20o
XG4iCi0gICAgIiAgICAgIERFRkFVTFRfSU5TVEFOQ0UsIGRhdGEsIGV4dGVuc2lvblJlZ2lzdHJ5
KTtcbiIKLSAgICAifVxuIgotICAgICJwdWJsaWMgc3RhdGljICRjbGFzc25hbWUkIHBhcnNlRnJv
bShqYXZhLmlvLklucHV0U3RyZWFtIGlucHV0KVxuIgotICAgICIgICAgdGhyb3dzIGphdmEuaW8u
SU9FeGNlcHRpb24ge1xuIgotICAgICIgIHJldHVybiBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVy
YXRlZE1lc3NhZ2VMaXRlLnBhcnNlRnJvbShcbiIKLSAgICAiICAgICAgREVGQVVMVF9JTlNUQU5D
RSwgaW5wdXQpO1xuIgotICAgICJ9XG4iCi0gICAgInB1YmxpYyBzdGF0aWMgJGNsYXNzbmFtZSQg
cGFyc2VGcm9tKFxuIgotICAgICIgICAgamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dCxcbiIKLSAg
ICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lv
blJlZ2lzdHJ5KVxuIgotICAgICIgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24ge1xuIgot
ICAgICIgIHJldHVybiBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VMaXRlLnBh
cnNlRnJvbShcbiIKLSAgICAiICAgICAgREVGQVVMVF9JTlNUQU5DRSwgaW5wdXQsIGV4dGVuc2lv
blJlZ2lzdHJ5KTtcbiIKLSAgICAifVxuIgotICAgICJwdWJsaWMgc3RhdGljICRjbGFzc25hbWUk
IHBhcnNlRGVsaW1pdGVkRnJvbShqYXZhLmlvLklucHV0U3RyZWFtIGlucHV0KVxuIgotICAgICIg
ICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24ge1xuIgotICAgICIgIHJldHVybiBwYXJzZURl
bGltaXRlZEZyb20oREVGQVVMVF9JTlNUQU5DRSwgaW5wdXQpO1xuIgotICAgICJ9XG4iCi0gICAg
InB1YmxpYyBzdGF0aWMgJGNsYXNzbmFtZSQgcGFyc2VEZWxpbWl0ZWRGcm9tKFxuIgotICAgICIg
ICAgamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dCxcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJv
dG9idWYuRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KVxuIgotICAgICIg
ICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24ge1xuIgotICAgICIgIHJldHVybiBwYXJzZURl
bGltaXRlZEZyb20oREVGQVVMVF9JTlNUQU5DRSwgaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KTtc
biIKLSAgICAifVxuIgotICAgICJwdWJsaWMgc3RhdGljICRjbGFzc25hbWUkIHBhcnNlRnJvbShc
biIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRJbnB1dFN0cmVhbSBpbnB1dClc
biIKLSAgICAiICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHtcbiIKLSAgICAiICByZXR1
cm4gY29tLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRNZXNzYWdlTGl0ZS5wYXJzZUZyb20oXG4i
Ci0gICAgIiAgICAgIERFRkFVTFRfSU5TVEFOQ0UsIGlucHV0KTtcbiIKLSAgICAifVxuIgotICAg
ICJwdWJsaWMgc3RhdGljICRjbGFzc25hbWUkIHBhcnNlRnJvbShcbiIKLSAgICAiICAgIGNvbS5n
b29nbGUucHJvdG9idWYuQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCxcbiIKLSAgICAiICAgIGNvbS5n
b29nbGUucHJvdG9idWYuRXh0ZW5zaW9uUmVnaXN0cnlMaXRlIGV4dGVuc2lvblJlZ2lzdHJ5KVxu
IgotICAgICIgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24ge1xuIgotICAgICIgIHJldHVy
biBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VMaXRlLnBhcnNlRnJvbShcbiIK
LSAgICAiICAgICAgREVGQVVMVF9JTlNUQU5DRSwgaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5KTtc
biIKLSAgICAifVxuIgotICAgICJcbiIsCi0gICAgImNsYXNzbmFtZSIsIG5hbWVfcmVzb2x2ZXJf
LT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8pKTsKLX0KLQotdm9pZCBJbW11dGFi
bGVNZXNzYWdlTGl0ZUdlbmVyYXRvcjo6R2VuZXJhdGVTZXJpYWxpemVPbmVGaWVsZCgKLSAgICBp
bzo6UHJpbnRlciogcHJpbnRlciwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBm
aWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpLkdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUocHJp
bnRlcik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlTWVzc2FnZUxpdGVHZW5lcmF0b3I6OkdlbmVyYXRl
U2VyaWFsaXplT25lRXh0ZW5zaW9uUmFuZ2UoCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIsIGNv
bnN0IERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlKiByYW5nZSkgewotICBwcmludGVyLT5Qcmlu
dCgKLSAgICAiZXh0ZW5zaW9uV3JpdGVyLndyaXRlVW50aWwoJGVuZCQsIG91dHB1dCk7XG4iLAot
ICAgICJlbmQiLCBTaW1wbGVJdG9hKHJhbmdlLT5lbmQpKTsKLX0KLQotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ci12b2lkIEltbXV0YWJsZU1lc3NhZ2VMaXRlR2VuZXJhdG9yOjpHZW5lcmF0ZUJ1aWxkZXIoaW86
OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInB1YmxpYyBzdGF0
aWMgQnVpbGRlciBuZXdCdWlsZGVyKCkge1xuIgotICAgICIgIHJldHVybiBERUZBVUxUX0lOU1RB
TkNFLnRvQnVpbGRlcigpO1xuIgotICAgICJ9XG4iCi0gICAgInB1YmxpYyBzdGF0aWMgQnVpbGRl
ciBuZXdCdWlsZGVyKCRjbGFzc25hbWUkIHByb3RvdHlwZSkge1xuIgotICAgICIgIHJldHVybiBE
RUZBVUxUX0lOU1RBTkNFLnRvQnVpbGRlcigpLm1lcmdlRnJvbShwcm90b3R5cGUpO1xuIgotICAg
ICJ9XG4iCi0gICAgIlxuIiwKLSAgICAiY2xhc3NuYW1lIiwgbmFtZV9yZXNvbHZlcl8tPkdldElt
bXV0YWJsZUNsYXNzTmFtZShkZXNjcmlwdG9yXykpOwotCi0gIE1lc3NhZ2VCdWlsZGVyTGl0ZUdl
bmVyYXRvciBidWlsZGVyR2VuZXJhdG9yKGRlc2NyaXB0b3JfLCBjb250ZXh0Xyk7Ci0gIGJ1aWxk
ZXJHZW5lcmF0b3IuR2VuZXJhdGUocHJpbnRlcik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotdm9p
ZCBJbW11dGFibGVNZXNzYWdlTGl0ZUdlbmVyYXRvcjo6R2VuZXJhdGVEeW5hbWljTWV0aG9kSXNJ
bml0aWFsaXplZCgKLSAgICBpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBSZXR1cm5zIG51
bGwgZm9yIGZhbHNlLCBERUZBVUxUX0lOU1RBTkNFIGZvciB0cnVlLgotICBpZiAoIUhhc1JlcXVp
cmVkRmllbGRzKGRlc2NyaXB0b3JfKSkgewotICAgIHByaW50ZXItPlByaW50KCJyZXR1cm4gREVG
QVVMVF9JTlNUQU5DRTtcbiIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIERvbid0IGRpcmVj
dGx5IGNvbXBhcmUgdG8gLTEgdG8gYXZvaWQgYW4gQW5kcm9pZCB4ODYgSklUIGJ1Zy4KLSAgcHJp
bnRlci0+UHJpbnQoCi0gICAgImJ5dGUgaXNJbml0aWFsaXplZCA9IG1lbW9pemVkSXNJbml0aWFs
aXplZDtcbiIKLSAgICAiaWYgKGlzSW5pdGlhbGl6ZWQgPT0gMSkgcmV0dXJuIERFRkFVTFRfSU5T
VEFOQ0U7XG4iCi0gICAgImlmIChpc0luaXRpYWxpemVkID09IDApIHJldHVybiBudWxsO1xuIgot
ICAgICJcbiIKLSAgICAiYm9vbGVhbiBzaG91bGRNZW1vaXplID0gKChCb29sZWFuKSBhcmcwKS5i
b29sZWFuVmFsdWUoKTtcbiIpOwotCi0gIC8vIENoZWNrIHRoYXQgYWxsIHJlcXVpcmVkIGZpZWxk
cyBpbiB0aGlzIG1lc3NhZ2UgYXJlIHNldC4KLSAgLy8gVE9ETyhrZW50b24pOiAgV2UgY2FuIG9w
dGltaXplIHRoaXMgd2hlbiB3ZSBzd2l0Y2ggdG8gcHV0dGluZyBhbGwgdGhlCi0gIC8vICAgImhh
cyIgZmllbGRzIGludG8gYSBzaW5nbGUgYml0ZmllbGQuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+ZmllbGQoaSk7Ci0gICAgY29uc3QgRmllbGRHZW5l
cmF0b3JJbmZvKiBpbmZvID0gY29udGV4dF8tPkdldEZpZWxkR2VuZXJhdG9ySW5mbyhmaWVsZCk7
Ci0KLSAgICBpZiAoZmllbGQtPmlzX3JlcXVpcmVkKCkpIHsKLSAgICAgIHByaW50ZXItPlByaW50
KAotICAgICAgICAiaWYgKCFoYXMkbmFtZSQoKSkge1xuIgotICAgICAgICAiICBpZiAoc2hvdWxk
TWVtb2l6ZSkge1xuIgotICAgICAgICAiICAgIG1lbW9pemVkSXNJbml0aWFsaXplZCA9IDA7XG4i
Ci0gICAgICAgICIgIH1cbiIKLSAgICAgICAgIiAgcmV0dXJuIG51bGw7XG4iCi0gICAgICAgICJ9
XG4iLAotICAgICAgICAibmFtZSIsIGluZm8tPmNhcGl0YWxpemVkX25hbWUpOwotICAgIH0KLSAg
fQotCi0gIC8vIE5vdyBjaGVjayB0aGF0IGFsbCBlbWJlZGRlZCBtZXNzYWdlcyBhcmUgaW5pdGlh
bGl6ZWQuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7
IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+
ZmllbGQoaSk7Ci0gICAgY29uc3QgRmllbGRHZW5lcmF0b3JJbmZvKiBpbmZvID0gY29udGV4dF8t
PkdldEZpZWxkR2VuZXJhdG9ySW5mbyhmaWVsZCk7Ci0gICAgaWYgKEdldEphdmFUeXBlKGZpZWxk
KSA9PSBKQVZBVFlQRV9NRVNTQUdFICYmCi0gICAgICAgIEhhc1JlcXVpcmVkRmllbGRzKGZpZWxk
LT5tZXNzYWdlX3R5cGUoKSkpIHsKLSAgICAgIHN3aXRjaCAoZmllbGQtPmxhYmVsKCkpIHsKLSAg
ICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX1JFUVVJUkVEOgotICAgICAgICAgIHBy
aW50ZXItPlByaW50KAotICAgICAgICAgICAgImlmICghZ2V0JG5hbWUkKCkuaXNJbml0aWFsaXpl
ZCgpKSB7XG4iCi0gICAgICAgICAgICAiICBpZiAoc2hvdWxkTWVtb2l6ZSkge1xuIgotICAgICAg
ICAgICAgIiAgICBtZW1vaXplZElzSW5pdGlhbGl6ZWQgPSAwO1xuIgotICAgICAgICAgICAgIiAg
fVxuIgotICAgICAgICAgICAgIiAgcmV0dXJuIG51bGw7XG4iCi0gICAgICAgICAgICAifVxuIiwK
LSAgICAgICAgICAgICJ0eXBlIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFt
ZSgKLSAgICAgICAgICAgICAgICBmaWVsZC0+bWVzc2FnZV90eXBlKCkpLAotICAgICAgICAgICAg
Im5hbWUiLCBpbmZvLT5jYXBpdGFsaXplZF9uYW1lKTsKLSAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX09QVElPTkFMOgotICAgICAgICAgIGlmICgh
U3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkgJiYKLSAgICAgICAgICAg
ICAgZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjb25z
dCBPbmVvZkRlc2NyaXB0b3IqIG9uZW9mID0gZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKTsKLSAg
ICAgICAgICAgIGNvbnN0IE9uZW9mR2VuZXJhdG9ySW5mbyogb25lb2ZfaW5mbyA9Ci0gICAgICAg
ICAgICAgICAgY29udGV4dF8tPkdldE9uZW9mR2VuZXJhdG9ySW5mbyhvbmVvZik7Ci0gICAgICAg
ICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAgICAgImlmICgkb25lb2ZfbmFtZSRDYXNl
XyA9PSAkZmllbGRfbnVtYmVyJCkge1xuIiwKLSAgICAgICAgICAgICAgIm9uZW9mX25hbWUiLCBv
bmVvZl9pbmZvLT5uYW1lLAotICAgICAgICAgICAgICAiZmllbGRfbnVtYmVyIiwgU2ltcGxlSXRv
YShmaWVsZC0+bnVtYmVyKCkpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJp
bnRlci0+UHJpbnQoCi0gICAgICAgICAgICAgICJpZiAoaGFzJG5hbWUkKCkpIHtcbiIsCi0gICAg
ICAgICAgICAgICJuYW1lIiwgaW5mby0+Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICAgIiAgaWYgKCFnZXQkbmFtZSQo
KS5pc0luaXRpYWxpemVkKCkpIHtcbiIKLSAgICAgICAgICAgICIgICAgaWYgKHNob3VsZE1lbW9p
emUpIHtcbiIKLSAgICAgICAgICAgICIgICAgICBtZW1vaXplZElzSW5pdGlhbGl6ZWQgPSAwO1xu
IgotICAgICAgICAgICAgIiAgICB9XG4iCi0gICAgICAgICAgICAiICAgIHJldHVybiBudWxsO1xu
IgotICAgICAgICAgICAgIiAgfVxuIgotICAgICAgICAgICAgIn1cbiIsCi0gICAgICAgICAgICAi
bmFtZSIsIGluZm8tPmNhcGl0YWxpemVkX25hbWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfUkVQRUFURUQ6Ci0gICAgICAgICAgaWYgKElz
TWFwRW50cnkoZmllbGQtPm1lc3NhZ2VfdHlwZSgpKSkgewotICAgICAgICAgICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgICAgICAgICJmb3IgKCR0eXBlJCBpdGVtIDogZ2V0JG5hbWUkKCkudmFs
dWVzKCkpIHtcbiIKLSAgICAgICAgICAgICAgIiAgaWYgKCFpdGVtLmlzSW5pdGlhbGl6ZWQoKSkg
e1xuIgotICAgICAgICAgICAgICAiICAgIGlmIChzaG91bGRNZW1vaXplKSB7XG4iCi0gICAgICAg
ICAgICAgICIgICAgICBtZW1vaXplZElzSW5pdGlhbGl6ZWQgPSAwO1xuIgotICAgICAgICAgICAg
ICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgIiAgICByZXR1cm4gbnVsbDtcbiIKLSAgICAgICAg
ICAgICAgIiAgfVxuIgotICAgICAgICAgICAgICAifVxuIiwKLSAgICAgICAgICAgICAgInR5cGUi
LCBNYXBWYWx1ZUltbXV0YWJsZUNsYXNzZE5hbWUoZmllbGQtPm1lc3NhZ2VfdHlwZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3Jlc29s
dmVyXyksCi0gICAgICAgICAgICAgICJuYW1lIiwgaW5mby0+Y2FwaXRhbGl6ZWRfbmFtZSk7Ci0g
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAg
ICAgICAiZm9yIChpbnQgaSA9IDA7IGkgPCBnZXQkbmFtZSRDb3VudCgpOyBpKyspIHtcbiIKLSAg
ICAgICAgICAgICAgIiAgaWYgKCFnZXQkbmFtZSQoaSkuaXNJbml0aWFsaXplZCgpKSB7XG4iCi0g
ICAgICAgICAgICAgICIgICAgaWYgKHNob3VsZE1lbW9pemUpIHtcbiIKLSAgICAgICAgICAgICAg
IiAgICAgIG1lbW9pemVkSXNJbml0aWFsaXplZCA9IDA7XG4iCi0gICAgICAgICAgICAgICIgICAg
fVxuIgotICAgICAgICAgICAgICAiICAgIHJldHVybiBudWxsO1xuIgotICAgICAgICAgICAgICAi
ICB9XG4iCi0gICAgICAgICAgICAgICJ9XG4iLAotICAgICAgICAgICAgICAidHlwZSIsIG5hbWVf
cmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoCi0gICAgICAgICAgICAgICAgICBmaWVs
ZC0+bWVzc2FnZV90eXBlKCkpLAotICAgICAgICAgICAgICAibmFtZSIsIGluZm8tPmNhcGl0YWxp
emVkX25hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLQotICBpZiAoZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9yYW5nZV9jb3VudCgpID4gMCkg
ewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgImlmICghZXh0ZW5zaW9uc0FyZUluaXRpYWxp
emVkKCkpIHtcbiIKLSAgICAgICIgIGlmIChzaG91bGRNZW1vaXplKSB7XG4iCi0gICAgICAiICAg
IG1lbW9pemVkSXNJbml0aWFsaXplZCA9IDA7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICBy
ZXR1cm4gbnVsbDtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAot
ICAgICJpZiAoc2hvdWxkTWVtb2l6ZSkgbWVtb2l6ZWRJc0luaXRpYWxpemVkID0gMTtcbiIpOwot
Ci0gIHByaW50ZXItPlByaW50KAotICAgICJyZXR1cm4gREVGQVVMVF9JTlNUQU5DRTtcbiIKLSAg
ICAiXG4iKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VMaXRl
R2VuZXJhdG9yOjpHZW5lcmF0ZUR5bmFtaWNNZXRob2RNYWtlSW1tdXRhYmxlKAotICAgIGlvOjpQ
cmludGVyKiBwcmludGVyKSB7Ci0KLSAgLy8gT3V0cHV0IGdlbmVyYXRpb24gY29kZSBmb3IgZWFj
aCBmaWVsZC4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQo
KTsgaSsrKSB7Ci0gICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGRlc2NyaXB0b3JfLT5maWVsZChp
KSkKLSAgICAgICAgLkdlbmVyYXRlRHluYW1pY01ldGhvZE1ha2VJbW11dGFibGVDb2RlKHByaW50
ZXIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInJldHVybiBudWxsO1xuIik7Ci19
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotdm9pZCBJbW11dGFibGVNZXNzYWdlTGl0ZUdlbmVyYXRvcjo6
R2VuZXJhdGVEeW5hbWljTWV0aG9kTmV3QnVpbGRlcigKLSAgICBpbzo6UHJpbnRlciogcHJpbnRl
cikgewotICBwcmludGVyLT5QcmludCgKLSAgICAicmV0dXJuIG5ldyBCdWlsZGVyKCk7XG4iKTsK
LX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VMaXRlR2VuZXJhdG9y
OjpHZW5lcmF0ZUR5bmFtaWNNZXRob2RWaXNpdCgKLSAgICBpbzo6UHJpbnRlciogcHJpbnRlcikg
ewotICBwcmludGVyLT5QcmludCgKLSAgICAiVmlzaXRvciB2aXNpdG9yID0gKFZpc2l0b3IpIGFy
ZzA7XG4iCi0gICAgIiRjbGFzc25hbWUkIG90aGVyID0gKCRjbGFzc25hbWUkKSBhcmcxO1xuIiwK
LSAgICAiY2xhc3NuYW1lIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShk
ZXNjcmlwdG9yXykpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxk
X2NvdW50KCk7IGkrKykgewotICAgIGlmICghZGVzY3JpcHRvcl8tPmZpZWxkKGkpLT5jb250YWlu
aW5nX29uZW9mKCkpIHsKLSAgICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldCgKLSAgICAgICAgICBk
ZXNjcmlwdG9yXy0+ZmllbGQoaSkpLkdlbmVyYXRlVmlzaXRDb2RlKHByaW50ZXIpOwotICAgIH0K
LSAgfQotCi0gIC8vIE1lcmdlIG9uZW9mIGZpZWxkcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBk
ZXNjcmlwdG9yXy0+b25lb2ZfZGVjbF9jb3VudCgpOyArK2kpIHsKLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJzd2l0Y2ggKG90aGVyLmdldCRvbmVvZl9jYXBpdGFsaXplZF9uYW1lJENhc2Uo
KSkge1xuIiwKLSAgICAgICJvbmVvZl9jYXBpdGFsaXplZF9uYW1lIiwKLSAgICAgIGNvbnRleHRf
LT5HZXRPbmVvZkdlbmVyYXRvckluZm8oCi0gICAgICAgICAgZGVzY3JpcHRvcl8tPm9uZW9mX2Rl
Y2woaSkpLT5jYXBpdGFsaXplZF9uYW1lKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBm
b3IgKGludCBqID0gMDsgaiA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsKGkpLT5maWVsZF9jb3Vu
dCgpOyBqKyspIHsKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlw
dG9yXy0+b25lb2ZfZGVjbChpKS0+ZmllbGQoaik7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICAgImNhc2UgJGZpZWxkX25hbWUkOiB7XG4iLAotICAgICAgICAiZmllbGRfbmFtZSIsCi0g
ICAgICAgIFRvVXBwZXIoZmllbGQtPm5hbWUoKSkpOwotICAgICAgcHJpbnRlci0+SW5kZW50KCk7
Ci0gICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpLkdlbmVyYXRlVmlzaXRDb2RlKHBy
aW50ZXIpOwotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgImJyZWFrO1xuIik7Ci0g
ICAgICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAg
ICAifVxuIik7Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50KAotICAgICAgImNhc2UgJGNhcF9v
bmVvZl9uYW1lJF9OT1RfU0VUOiB7XG4iCi0gICAgICAiICB2aXNpdG9yLnZpc2l0T25lb2ZOb3RT
ZXQoJG9uZW9mX25hbWUkQ2FzZV8gIT0gMCk7XG4iCi0gICAgICAiICBicmVhaztcbiIKLSAgICAg
ICJ9XG4iLAotICAgICAgImNhcF9vbmVvZl9uYW1lIiwKLSAgICAgIFRvVXBwZXIoY29udGV4dF8t
PkdldE9uZW9mR2VuZXJhdG9ySW5mbygKLSAgICAgICAgICBkZXNjcmlwdG9yXy0+b25lb2ZfZGVj
bChpKSktPm5hbWUpLAotICAgICAgIm9uZW9mX25hbWUiLAotICAgICAgY29udGV4dF8tPkdldE9u
ZW9mR2VuZXJhdG9ySW5mbygKLSAgICAgICAgICBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKSkt
Pm5hbWUpOwotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICJ9XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICJpZiAodmlzaXRvciA9
PSBjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VMaXRlLk1lcmdlRnJvbVZpc2l0
b3JcbiIKLSAgICAiICAgIC5JTlNUQU5DRSkge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwot
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7ICsr
aSkgewotICAgIGNvbnN0IE9uZW9mRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+b25l
b2ZfZGVjbChpKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJpZiAob3RoZXIuJG9uZW9m
X25hbWUkQ2FzZV8gIT0gMCkge1xuIgotICAgICAgIiAgJG9uZW9mX25hbWUkQ2FzZV8gPSBvdGhl
ci4kb25lb2ZfbmFtZSRDYXNlXztcbiIKLSAgICAgICJ9XG4iLAotICAgICAgIm9uZW9mX25hbWUi
LCBjb250ZXh0Xy0+R2V0T25lb2ZHZW5lcmF0b3JJbmZvKGZpZWxkKS0+bmFtZSk7Ci0gIH0KLQot
ICBpZiAoR2VuZXJhdGVIYXNCaXRzKGRlc2NyaXB0b3JfKSkgewotICAgIC8vIEludGVnZXJzIGZv
ciBiaXQgZmllbGRzLgotICAgIGludCB0b3RhbEJpdHMgPSAwOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgICAgdG90YWxCaXRz
ICs9IGZpZWxkX2dlbmVyYXRvcnNfLmdldChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpCi0gICAgICAg
ICAgLkdldE51bUJpdHNGb3JNZXNzYWdlKCk7Ci0gICAgfQotICAgIGludCB0b3RhbEludHMgPSAo
dG90YWxCaXRzICsgMzEpIC8gMzI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsSW50
czsgaSsrKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiRiaXRfZmllbGRfbmFt
ZSQgfD0gb3RoZXIuJGJpdF9maWVsZF9uYW1lJDtcbiIsCi0gICAgICAgICJiaXRfZmllbGRfbmFt
ZSIsIEdldEJpdEZpZWxkTmFtZShpKSk7Ci0gICAgfQotICB9Ci0gIHByaW50ZXItPk91dGRlbnQo
KTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIn1cbiIpOwotCi0KLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgInJldHVybiB0aGlzO1xuIik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotdm9pZCBJbW11
dGFibGVNZXNzYWdlTGl0ZUdlbmVyYXRvcjo6R2VuZXJhdGVEeW5hbWljTWV0aG9kTWVyZ2VGcm9t
U3RyZWFtKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAot
ICAgICAgImNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCA9XG4iCi0g
ICAgICAiICAgIChjb20uZ29vZ2xlLnByb3RvYnVmLkNvZGVkSW5wdXRTdHJlYW0pIGFyZzA7XG4i
Ci0gICAgICAiY29tLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SZWdpc3RyeUxpdGUgZXh0ZW5z
aW9uUmVnaXN0cnkgPVxuIgotICAgICAgIiAgICAoY29tLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNp
b25SZWdpc3RyeUxpdGUpIGFyZzE7XG4iCi0gICAgICAidHJ5IHtcbiIpOwotICBwcmludGVyLT5J
bmRlbnQoKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiYm9vbGVhbiBkb25lID0gZmFsc2U7
XG4iCi0gICAgIndoaWxlICghZG9uZSkge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0g
IHByaW50ZXItPlByaW50KAotICAgICJpbnQgdGFnID0gaW5wdXQucmVhZFRhZygpO1xuIgotICAg
ICJzd2l0Y2ggKHRhZykge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIHByaW50ZXIt
PlByaW50KAotICAgICJjYXNlIDA6XG4iICAgICAgICAgIC8vIHplcm8gc2lnbmFscyBFT0YgLyBs
aW1pdCByZWFjaGVkCi0gICAgIiAgZG9uZSA9IHRydWU7XG4iCi0gICAgIiAgYnJlYWs7XG4iKTsK
LQotICBpZiAoUHJlc2VydmVVbmtub3duRmllbGRzKGRlc2NyaXB0b3JfKSkgewotICAgIGlmIChk
ZXNjcmlwdG9yXy0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCkgPiAwKSB7Ci0gICAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICAgImRlZmF1bHQ6IHtcbiIKLSAgICAgICAgIiAgaWYgKCFwYXJzZVVu
a25vd25GaWVsZChnZXREZWZhdWx0SW5zdGFuY2VGb3JUeXBlKCksXG4iCi0gICAgICAgICIgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIGV4dGVuc2lvblJlZ2lzdHJ5LCB0YWcpKSB7XG4i
Ci0gICAgICAgICIgICAgZG9uZSA9IHRydWU7XG4iICAvLyBpdCdzIGFuIGVuZGdyb3VwIHRhZwot
ICAgICAgICAiICB9XG4iCi0gICAgICAgICIgIGJyZWFrO1xuIgotICAgICAgICAifVxuIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiZGVmYXVsdDoge1xu
IgotICAgICAgICAiICBpZiAoIXBhcnNlVW5rbm93bkZpZWxkKHRhZywgaW5wdXQpKSB7XG4iCi0g
ICAgICAgICIgICAgZG9uZSA9IHRydWU7XG4iICAvLyBpdCdzIGFuIGVuZGdyb3VwIHRhZwotICAg
ICAgICAiICB9XG4iCi0gICAgICAgICIgIGJyZWFrO1xuIgotICAgICAgICAifVxuIik7Ci0gICAg
fQotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgImRlZmF1bHQ6IHtcbiIK
LSAgICAgICIgIGlmICghaW5wdXQuc2tpcEZpZWxkKHRhZykpIHtcbiIKLSAgICAgICIgICAgZG9u
ZSA9IHRydWU7XG4iICAvLyBpdCdzIGFuIGVuZGdyb3VwIHRhZwotICAgICAgIiAgfVxuIgotICAg
ICAgIiAgYnJlYWs7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLQotICBnb29nbGU6OnByb3RvYnVm
OjpzY29wZWRfYXJyYXk8Y29uc3QgRmllbGREZXNjcmlwdG9yICogPiBzb3J0ZWRfZmllbGRzKAot
ICAgICAgU29ydEZpZWxkc0J5TnVtYmVyKGRlc2NyaXB0b3JfKSk7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZmllbGQgPSBzb3J0ZWRfZmllbGRzW2ldOwotICAgIHVpbnQzMiB0YWcgPSBX
aXJlRm9ybWF0TGl0ZTo6TWFrZVRhZyhmaWVsZC0+bnVtYmVyKCksCi0gICAgICBXaXJlRm9ybWF0
OjpXaXJlVHlwZUZvckZpZWxkVHlwZShmaWVsZC0+dHlwZSgpKSk7Ci0KLSAgICBwcmludGVyLT5Q
cmludCgKLSAgICAgICJjYXNlICR0YWckOiB7XG4iLAotICAgICAgInRhZyIsIFNpbXBsZUl0b2Eo
dGFnKSk7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgICBmaWVsZF9nZW5lcmF0b3JzXy5n
ZXQoZmllbGQpLkdlbmVyYXRlUGFyc2luZ0NvZGUocHJpbnRlcik7Ci0KLSAgICBwcmludGVyLT5P
dXRkZW50KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICBicmVhaztcbiIKLSAgICAg
ICJ9XG4iKTsKLQotICAgIGlmIChmaWVsZC0+aXNfcGFja2FibGUoKSkgewotICAgICAgLy8gVG8g
bWFrZSBwYWNrZWQgPSB0cnVlIHdpcmUgY29tcGF0aWJsZSwgd2UgZ2VuZXJhdGUgcGFyc2luZyBj
b2RlIGZyb20gYQotICAgICAgLy8gcGFja2VkIHZlcnNpb24gb2YgdGhpcyBmaWVsZCByZWdhcmRs
ZXNzIG9mIGZpZWxkLT5vcHRpb25zKCkucGFja2VkKCkuCi0gICAgICB1aW50MzIgcGFja2VkX3Rh
ZyA9IFdpcmVGb3JtYXRMaXRlOjpNYWtlVGFnKGZpZWxkLT5udW1iZXIoKSwKLSAgICAgICAgV2ly
ZUZvcm1hdExpdGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpOwotICAgICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgICJjYXNlICR0YWckOiB7XG4iLAotICAgICAgICAidGFnIiwgU2ltcGxl
SXRvYShwYWNrZWRfdGFnKSk7Ci0gICAgICBwcmludGVyLT5JbmRlbnQoKTsKLQotICAgICAgZmll
bGRfZ2VuZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZVBhcnNpbmdDb2RlRnJvbVBhY2tlZChw
cmludGVyKTsKLQotICAgICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgICIgIGJyZWFrO1xuIgotICAgICAgICAifVxuIik7Ci0gICAgfQotICB9Ci0K
LSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXIt
PlByaW50KAotICAgICAgIiAgfVxuIiAgICAgLy8gc3dpdGNoICh0YWcpCi0gICAgICAifVxuIik7
ICAgICAvLyB3aGlsZSAoIWRvbmUpCi0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVy
LT5QcmludCgKLSAgICAgICJ9IGNhdGNoIChjb20uZ29vZ2xlLnByb3RvYnVmLkludmFsaWRQcm90
b2NvbEJ1ZmZlckV4Y2VwdGlvbiBlKSB7XG4iCi0gICAgICAiICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbihlLnNldFVuZmluaXNoZWRNZXNzYWdlKHRoaXMpKTtcbiIKLSAgICAgICJ9IGNhdGNo
IChqYXZhLmlvLklPRXhjZXB0aW9uIGUpIHtcbiIKLSAgICAgICIgIHRocm93IG5ldyBSdW50aW1l
RXhjZXB0aW9uKFxuIgotICAgICAgIiAgICAgIG5ldyBjb20uZ29vZ2xlLnByb3RvYnVmLkludmFs
aWRQcm90b2NvbEJ1ZmZlckV4Y2VwdGlvbihcbiIKLSAgICAgICIgICAgICAgICAgZS5nZXRNZXNz
YWdlKCkpLnNldFVuZmluaXNoZWRNZXNzYWdlKHRoaXMpKTtcbiIKLSAgICAgICJ9IGZpbmFsbHkg
e1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAifVxuIik7ICAgICAvLyBmaW5hbGx5Ci19Ci0KLS8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLQotbmFtZXNwYWNlIHsKLWJvb2wgQ2hlY2tIYXNCaXRzRm9yRXF1YWxzQW5kSGFz
aENvZGUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBpZiAoZmllbGQtPmlzX3Jl
cGVhdGVkKCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKFN1cHBvcnRGaWVsZFBy
ZXNlbmNlKGZpZWxkLT5maWxlKCkpKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJu
IEdldEphdmFUeXBlKGZpZWxkKSA9PSBKQVZBVFlQRV9NRVNTQUdFICYmCi0gICAgICBmaWVsZC0+
Y29udGFpbmluZ19vbmVvZigpID09IE5VTEw7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi12b2lkIEltbXV0YWJsZU1lc3NhZ2VMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRl
RXh0ZW5zaW9uUmVnaXN0cmF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBmb3Ig
KGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5leHRlbnNpb25fY291bnQoKTsgaSsrKSB7Ci0g
ICAgSW1tdXRhYmxlRXh0ZW5zaW9uTGl0ZUdlbmVyYXRvcihkZXNjcmlwdG9yXy0+ZXh0ZW5zaW9u
KGkpLCBjb250ZXh0XykKLSAgICAgIC5HZW5lcmF0ZVJlZ2lzdHJhdGlvbkNvZGUocHJpbnRlcik7
Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZV9j
b3VudCgpOyBpKyspIHsKLSAgICBJbW11dGFibGVNZXNzYWdlTGl0ZUdlbmVyYXRvcihkZXNjcmlw
dG9yXy0+bmVzdGVkX3R5cGUoaSksIGNvbnRleHRfKQotICAgICAgLkdlbmVyYXRlRXh0ZW5zaW9u
UmVnaXN0cmF0aW9uQ29kZShwcmludGVyKTsKLSAgfQotfQotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lk
IEltbXV0YWJsZU1lc3NhZ2VMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ29uc3RydWN0b3IoaW86
OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAicHJpdmF0ZSAk
Y2xhc3NuYW1lJCgpIHtcbiIsCi0gICAgICAiY2xhc3NuYW1lIiwgZGVzY3JpcHRvcl8tPm5hbWUo
KSk7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIC8vIEluaXRpYWxpemUgYWxsIGZpZWxkcyB0
byBkZWZhdWx0LgotICBHZW5lcmF0ZUluaXRpYWxpemVycyhwcmludGVyKTsKLQotICBwcmludGVy
LT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgIn1cbiIpOwotfQotCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci12b2lkIEltbXV0YWJsZU1lc3NhZ2VMaXRlR2VuZXJhdG9yOjpHZW5lcmF0ZVBh
cnNlcihpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICAgICJw
cml2YXRlIHN0YXRpYyB2b2xhdGlsZSBjb20uZ29vZ2xlLnByb3RvYnVmLlBhcnNlcjwkY2xhc3Nu
YW1lJD4gUEFSU0VSO1xuIgotICAgICAgIlxuIgotICAgICAgInB1YmxpYyBzdGF0aWMgY29tLmdv
b2dsZS5wcm90b2J1Zi5QYXJzZXI8JGNsYXNzbmFtZSQ+IHBhcnNlcigpIHtcbiIKLSAgICAgICIg
IHJldHVybiBERUZBVUxUX0lOU1RBTkNFLmdldFBhcnNlckZvclR5cGUoKTtcbiIKLSAgICAgICJ9
XG4iLAotICAgICAgImNsYXNzbmFtZSIsIGRlc2NyaXB0b3JfLT5uYW1lKCkpOwotfQotCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci12b2lkIEltbXV0YWJsZU1lc3NhZ2VMaXRlR2VuZXJhdG9yOjpHZW5lcmF0ZUlu
aXRpYWxpemVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBmb3IgKGludCBpID0gMDsgaSA8
IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBpZiAoIWRlc2NyaXB0b3Jf
LT5maWVsZChpKS0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgICBmaWVsZF9nZW5lcmF0b3Jz
Xy5nZXQoZGVzY3JpcHRvcl8tPmZpZWxkKGkpKQotICAgICAgICAgIC5HZW5lcmF0ZUluaXRpYWxp
emF0aW9uQ29kZShwcmludGVyKTsKLSAgICB9Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIGph
dmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19
ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfbGl0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmEvamF2YV9tZXNzYWdlX2xpdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjkyYzFjNTZmM2JmMDk4YmY1MDJmNThlMTE2OTVhOThkMzM4NTRmNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfbGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogZHdl
aXNAZ29vZ2xlLmNvbSAoRGFuaWVsIFdlaXMpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9j
b2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5k
IG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9NRVNTQUdF
X0xJVEVfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX01FU1NBR0Vf
TElURV9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9maWVsZC5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZS5oPgotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFt
ZXNwYWNlIGphdmEgewotCi1jbGFzcyBJbW11dGFibGVNZXNzYWdlTGl0ZUdlbmVyYXRvciA6IHB1
YmxpYyBNZXNzYWdlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEltbXV0YWJsZU1l
c3NhZ2VMaXRlR2VuZXJhdG9yKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29udGV4dCk7Ci0gIHZpcnR1
YWwgfkltbXV0YWJsZU1lc3NhZ2VMaXRlR2VuZXJhdG9yKCk7Ci0KLSAgdmlydHVhbCB2b2lkIEdl
bmVyYXRlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlSW50
ZXJmYWNlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlRXh0
ZW5zaW9uUmVnaXN0cmF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZpcnR1YWwg
dm9pZCBHZW5lcmF0ZVN0YXRpY1ZhcmlhYmxlcygKLSAgICAgIGlvOjpQcmludGVyKiBwcmludGVy
LCBpbnQqIGJ5dGVjb2RlX2VzdGltYXRlKTsKLSAgdmlydHVhbCBpbnQgR2VuZXJhdGVTdGF0aWNW
YXJpYWJsZUluaXRpYWxpemVycyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSBwcml2YXRlOgot
Ci0gIHZvaWQgR2VuZXJhdGVNZXNzYWdlU2VyaWFsaXphdGlvbk1ldGhvZHMoaW86OlByaW50ZXIq
IHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlUGFyc2VGcm9tTWV0aG9kcyhpbzo6UHJpbnRlciog
cHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVPbmVGaWVsZChpbzo6UHJpbnRlciog
cHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGQpOwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplT25lRXh0ZW5zaW9uUmFu
Z2UoCi0gICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwgY29uc3QgRGVzY3JpcHRvcjo6RXh0ZW5z
aW9uUmFuZ2UqIHJhbmdlKTsKLQotICB2b2lkIEdlbmVyYXRlQnVpbGRlcihpbzo6UHJpbnRlciog
cHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVEeW5hbWljTWV0aG9kSXNJbml0aWFsaXplZChpbzo6
UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVEeW5hbWljTWV0aG9kTWFrZUltbXV0
YWJsZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVEeW5hbWljTWV0aG9k
VmlzaXQoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlRHluYW1pY01ldGhv
ZE1lcmdlRnJvbVN0cmVhbShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVE
eW5hbWljTWV0aG9kTmV3QnVpbGRlcihpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2Vu
ZXJhdGVJbml0aWFsaXplcnMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRl
RXF1YWxzQW5kSGFzaENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRl
UGFyc2VyKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZUNvbnN0cnVjdG9y
KGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICBDb250ZXh0KiBjb250ZXh0XzsKLSAgQ2xhc3NO
YW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXJfOwotICBGaWVsZEdlbmVyYXRvck1hcDxJbW11dGFi
bGVGaWVsZExpdGVHZW5lcmF0b3I+IGZpZWxkX2dlbmVyYXRvcnNfOwotCi0gIEdPT0dMRV9ESVNB
TExPV19FVklMX0NPTlNUUlVDVE9SUyhJbW11dGFibGVNZXNzYWdlTGl0ZUdlbmVyYXRvcik7Ci19
OwotCi19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAv
LyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAv
LyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9NRVNTQUdFX0xJVEVfSF9fCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX25hbWVfcmVzb2x2ZXIu
Y2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX25hbWVfcmVzb2x2ZXIu
Y2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZmU0ZjE2ZTc5MTU1OWUwYTMxMzI4
Njk3ZjM2MTM2MzE5MjMyMGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9uYW1lX3Jlc29s
dmVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9uYW1lX3Jlc29sdmVyLmg+Ci0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9oZWxw
ZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1dGUuaD4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBp
bGVyIHsKLW5hbWVzcGFjZSBqYXZhIHsKLQotbmFtZXNwYWNlIHsKLS8vIEEgc3VmZml4IHRoYXQg
d2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZmlsZSdzIG91dGVyIGNsYXNzIG5hbWUgaWYgdGhlIG5h
bWUKLS8vIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgdHlwZXMgZGVmaW5lZCBpbiB0aGUgZmls
ZS4KLWNvbnN0IGNoYXIqIGtPdXRlckNsYXNzTmFtZVN1ZmZpeCA9ICJPdXRlckNsYXNzIjsKLQot
Ly8gU3RyaXAgcGFja2FnZSBuYW1lIGZyb20gYSBkZXNjcmlwdG9yJ3MgZnVsbCBuYW1lLgotLy8g
Rm9yIGV4YW1wbGU6Ci0vLyAgIEZ1bGwgbmFtZSAgIDogZm9vLkJhci5CYXoKLS8vICAgUGFja2Fn
ZSBuYW1lOiBmb28KLS8vICAgQWZ0ZXIgc3RyaXAgOiBCYXIuQmF6Ci1zdHJpbmcgU3RyaXBQYWNr
YWdlTmFtZShjb25zdCBzdHJpbmcmIGZ1bGxfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKSB7Ci0gIGlmIChmaWxlLT5wYWNrYWdlKCkuZW1w
dHkoKSkgewotICAgIHJldHVybiBmdWxsX25hbWU7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gU3RyaXAg
cGFja2FnZSBuYW1lCi0gICAgcmV0dXJuIGZ1bGxfbmFtZS5zdWJzdHIoZmlsZS0+cGFja2FnZSgp
LnNpemUoKSArIDEpOwotICB9Ci19Ci0KLS8vIEdldCB0aGUgbmFtZSBvZiBhIG1lc3NhZ2UncyBK
YXZhIGNsYXNzIHdpdGhvdXQgcGFja2FnZSBuYW1lIHByZWZpeC4KLXN0cmluZyBDbGFzc05hbWVX
aXRob3V0UGFja2FnZShjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaW1tdXRhYmxlKSB7Ci0gIHJldHVybiBTdHJpcFBhY2th
Z2VOYW1lKGRlc2NyaXB0b3ItPmZ1bGxfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXNjcmlwdG9yLT5maWxlKCkpOwotfQotCi0vLyBHZXQgdGhlIG5hbWUgb2YgYW4gZW51bSdz
IEphdmEgY2xhc3Mgd2l0aG91dCBwYWNrYWdlIG5hbWUgcHJlZml4Lgotc3RyaW5nIENsYXNzTmFt
ZVdpdGhvdXRQYWNrYWdlKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW1tdXRhYmxlKSB7Ci0gIC8vIERvZXNuJ3Qg
YXBwZW5kICJNdXRhYmxlIiBmb3IgZW51bSB0eXBlJ3MgbmFtZS4KLSAgY29uc3QgRGVzY3JpcHRv
ciogbWVzc2FnZV9kZXNjcmlwdG9yID0gZGVzY3JpcHRvci0+Y29udGFpbmluZ190eXBlKCk7Ci0g
IGlmIChtZXNzYWdlX2Rlc2NyaXB0b3IgPT0gTlVMTCkgewotICAgIHJldHVybiBkZXNjcmlwdG9y
LT5uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIENsYXNzTmFtZVdpdGhvdXRQYWNrYWdl
KG1lc3NhZ2VfZGVzY3JpcHRvciwgaW1tdXRhYmxlKSArCi0gICAgICAgICAgICIuIiArIGRlc2Ny
aXB0b3ItPm5hbWUoKTsKLSAgfQotfQotCi0vLyBHZXQgdGhlIG5hbWUgb2YgYSBzZXJ2aWNlJ3Mg
SmF2YSBjbGFzcyB3aXRob3V0IHBhY2thZ2UgbmFtZSBwcmVmaXguCi1zdHJpbmcgQ2xhc3NOYW1l
V2l0aG91dFBhY2thZ2UoY29uc3QgU2VydmljZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbW11dGFibGUpIHsKLSAgc3RyaW5nIGZ1
bGxfbmFtZSA9IFN0cmlwUGFja2FnZU5hbWUoZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItPmZpbGUoKSk7Ci0g
IC8vIFdlIGRvbid0IGFsbG93IG5lc3RlZCBzZXJ2aWNlIGRlZmluaXRpb25zLgotICBHT09HTEVf
Q0hFQ0soZnVsbF9uYW1lLmZpbmQoJy4nKSA9PSBzdHJpbmc6Om5wb3MpOwotICByZXR1cm4gZnVs
bF9uYW1lOwotfQotCi0vLyBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gbWVzc2FnZSBvciBpdHMgbmVz
dGVkIHR5cGVzIGhhcyB0aGUgZ2l2ZW4gY2xhc3MgbmFtZS4KLWJvb2wgTWVzc2FnZUhhc0NvbmZs
aWN0aW5nQ2xhc3NOYW1lKGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGNsYXNzbmFtZSkgewotICBpZiAo
bWVzc2FnZS0+bmFtZSgpID09IGNsYXNzbmFtZSkgcmV0dXJuIHRydWU7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgbWVzc2FnZS0+bmVzdGVkX3R5cGVfY291bnQoKTsgKytpKSB7Ci0gICAgaWYgKE1l
c3NhZ2VIYXNDb25mbGljdGluZ0NsYXNzTmFtZShtZXNzYWdlLT5uZXN0ZWRfdHlwZShpKSwgY2xh
c3NuYW1lKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgbWVzc2FnZS0+ZW51bV90eXBlX2NvdW50KCk7ICsraSkgewotICAgIGlmIChtZXNz
YWdlLT5lbnVtX3R5cGUoaSktPm5hbWUoKSA9PSBjbGFzc25hbWUpIHsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQot
Ci1DbGFzc05hbWVSZXNvbHZlcjo6Q2xhc3NOYW1lUmVzb2x2ZXIoKSB7Ci19Ci0KLUNsYXNzTmFt
ZVJlc29sdmVyOjp+Q2xhc3NOYW1lUmVzb2x2ZXIoKSB7Ci19Ci0KLXN0cmluZyBDbGFzc05hbWVS
ZXNvbHZlcjo6R2V0RmlsZURlZmF1bHRJbW11dGFibGVDbGFzc05hbWUoCi0gICAgY29uc3QgRmls
ZURlc2NyaXB0b3IqIGZpbGUpIHsKLSAgc3RyaW5nIGJhc2VuYW1lOwotICBzdHJpbmc6OnNpemVf
dHlwZSBsYXN0X3NsYXNoID0gZmlsZS0+bmFtZSgpLmZpbmRfbGFzdF9vZignLycpOwotICBpZiAo
bGFzdF9zbGFzaCA9PSBzdHJpbmc6Om5wb3MpIHsKLSAgICBiYXNlbmFtZSA9IGZpbGUtPm5hbWUo
KTsKLSAgfSBlbHNlIHsKLSAgICBiYXNlbmFtZSA9IGZpbGUtPm5hbWUoKS5zdWJzdHIobGFzdF9z
bGFzaCArIDEpOwotICB9Ci0gIHJldHVybiBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKFN0cmlwUHJv
dG8oYmFzZW5hbWUpLCB0cnVlKTsKLX0KLQotc3RyaW5nIENsYXNzTmFtZVJlc29sdmVyOjpHZXRG
aWxlSW1tdXRhYmxlQ2xhc3NOYW1lKAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKSB7
Ci0gIHN0cmluZyYgY2xhc3NfbmFtZSA9IGZpbGVfaW1tdXRhYmxlX291dGVyX2NsYXNzX25hbWVz
X1tmaWxlXTsKLSAgaWYgKGNsYXNzX25hbWUuZW1wdHkoKSkgewotICAgIGlmIChmaWxlLT5vcHRp
b25zKCkuaGFzX2phdmFfb3V0ZXJfY2xhc3NuYW1lKCkpIHsKLSAgICAgIGNsYXNzX25hbWUgPSBm
aWxlLT5vcHRpb25zKCkuamF2YV9vdXRlcl9jbGFzc25hbWUoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgY2xhc3NfbmFtZSA9IEdldEZpbGVEZWZhdWx0SW1tdXRhYmxlQ2xhc3NOYW1lKGZpbGUpOwot
ICAgICAgaWYgKEhhc0NvbmZsaWN0aW5nQ2xhc3NOYW1lKGZpbGUsIGNsYXNzX25hbWUpKSB7Ci0g
ICAgICAgIGNsYXNzX25hbWUgKz0ga091dGVyQ2xhc3NOYW1lU3VmZml4OwotICAgICAgfQotICAg
IH0KLSAgfQotICByZXR1cm4gY2xhc3NfbmFtZTsKLX0KLQotc3RyaW5nIENsYXNzTmFtZVJlc29s
dmVyOjpHZXRGaWxlQ2xhc3NOYW1lKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW1tdXRhYmxlKSB7Ci0g
IGlmIChpbW11dGFibGUpIHsKLSAgICByZXR1cm4gR2V0RmlsZUltbXV0YWJsZUNsYXNzTmFtZShm
aWxlKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gIk11dGFibGUiICsgR2V0RmlsZUltbXV0YWJs
ZUNsYXNzTmFtZShmaWxlKTsKLSAgfQotfQotCi0vLyBDaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFu
eSB0eXBlIGRlZmluZWQgaW4gdGhlIHByb3RvIGZpbGUgdGhhdCBoYXMKLS8vIHRoZSBnaXZlbiBj
bGFzcyBuYW1lLgotYm9vbCBDbGFzc05hbWVSZXNvbHZlcjo6SGFzQ29uZmxpY3RpbmdDbGFzc05h
bWUoCi0gICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsIGNvbnN0IHN0cmluZyYgY2xhc3Nu
YW1lKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+ZW51bV90eXBlX2NvdW50KCk7IGkr
KykgewotICAgIGlmIChmaWxlLT5lbnVtX3R5cGUoaSktPm5hbWUoKSA9PSBjbGFzc25hbWUpIHsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGZp
bGUtPnNlcnZpY2VfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKGZpbGUtPnNlcnZpY2UoaSktPm5h
bWUoKSA9PSBjbGFzc25hbWUpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICBm
b3IgKGludCBpID0gMDsgaSA8IGZpbGUtPm1lc3NhZ2VfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAg
ICBpZiAoTWVzc2FnZUhhc0NvbmZsaWN0aW5nQ2xhc3NOYW1lKGZpbGUtPm1lc3NhZ2VfdHlwZShp
KSwgY2xhc3NuYW1lKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIHJldHVy
biBmYWxzZTsKLX0KLQotc3RyaW5nIENsYXNzTmFtZVJlc29sdmVyOjpHZXREZXNjcmlwdG9yQ2xh
c3NOYW1lKAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVy
biBHZXRGaWxlSW1tdXRhYmxlQ2xhc3NOYW1lKGRlc2NyaXB0b3IpOwotfQotCi1zdHJpbmcgQ2xh
c3NOYW1lUmVzb2x2ZXI6OkdldENsYXNzTmFtZShjb25zdCBGaWxlRGVzY3JpcHRvciogZGVzY3Jp
cHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW1tdXRh
YmxlKSB7Ci0gIHN0cmluZyByZXN1bHQgPSBGaWxlSmF2YVBhY2thZ2UoZGVzY3JpcHRvciwgaW1t
dXRhYmxlKTsKLSAgaWYgKCFyZXN1bHQuZW1wdHkoKSkgcmVzdWx0ICs9ICcuJzsKLSAgcmVzdWx0
ICs9IEdldEZpbGVDbGFzc05hbWUoZGVzY3JpcHRvciwgaW1tdXRhYmxlKTsKLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotLy8gR2V0IHRoZSBmdWxsIG5hbWUgb2YgYSBKYXZhIGNsYXNzIGJ5IHByZXBl
bmRpbmcgdGhlIEphdmEgcGFja2FnZSBuYW1lCi0vLyBvciBvdXRlciBjbGFzcyBuYW1lLgotc3Ry
aW5nIENsYXNzTmFtZVJlc29sdmVyOjpHZXRDbGFzc0Z1bGxOYW1lKGNvbnN0IHN0cmluZyYgbmFt
ZV93aXRob3V0X3BhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbW11dGFibGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXBsZV9maWxlcykgewotICBzdHJpbmcg
cmVzdWx0OwotICBpZiAobXVsdGlwbGVfZmlsZXMpIHsKLSAgICByZXN1bHQgPSBGaWxlSmF2YVBh
Y2thZ2UoZmlsZSwgaW1tdXRhYmxlKTsKLSAgfSBlbHNlIHsKLSAgICByZXN1bHQgPSBHZXRDbGFz
c05hbWUoZmlsZSwgaW1tdXRhYmxlKTsKLSAgfQotICBpZiAoIXJlc3VsdC5lbXB0eSgpKSB7Ci0g
ICAgcmVzdWx0ICs9ICcuJzsKLSAgfQotICByZXN1bHQgKz0gbmFtZV93aXRob3V0X3BhY2thZ2U7
Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0cmluZyBDbGFzc05hbWVSZXNvbHZlcjo6R2V0Q2xh
c3NOYW1lKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGltbXV0YWJsZSkgewotICByZXR1cm4gR2V0Q2xhc3NG
dWxsTmFtZShDbGFzc05hbWVXaXRob3V0UGFja2FnZShkZXNjcmlwdG9yLCBpbW11dGFibGUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5maWxlKCksIGltbXV0YWJsZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGVKYXZhRmlsZXMoZGVzY3JpcHRvci0+
ZmlsZSgpLCBpbW11dGFibGUpKTsKLX0KLQotc3RyaW5nIENsYXNzTmFtZVJlc29sdmVyOjpHZXRD
bGFzc05hbWUoY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGltbXV0YWJsZSkgewotICByZXR1cm4gR2V0
Q2xhc3NGdWxsTmFtZShDbGFzc05hbWVXaXRob3V0UGFja2FnZShkZXNjcmlwdG9yLCBpbW11dGFi
bGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5maWxlKCksIGltbXV0
YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGVKYXZhRmlsZXMoZGVzY3Jp
cHRvci0+ZmlsZSgpLCBpbW11dGFibGUpKTsKLX0KLQotc3RyaW5nIENsYXNzTmFtZVJlc29sdmVy
OjpHZXRDbGFzc05hbWUoY29uc3QgU2VydmljZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGltbXV0YWJsZSkgewotICBy
ZXR1cm4gR2V0Q2xhc3NGdWxsTmFtZShDbGFzc05hbWVXaXRob3V0UGFja2FnZShkZXNjcmlwdG9y
LCBpbW11dGFibGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5maWxl
KCksIGltbXV0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGVKYXZhRmls
ZXMoZGVzY3JpcHRvci0+ZmlsZSgpLCBpbW11dGFibGUpKTsKLX0KLQotLy8gR2V0IHRoZSBKYXZh
IENsYXNzIHN0eWxlIGZ1bGwgbmFtZSBvZiBhIG1lc3NhZ2UuCi1zdHJpbmcgQ2xhc3NOYW1lUmVz
b2x2ZXI6OkdldEphdmFDbGFzc0Z1bGxOYW1lKAotICAgIGNvbnN0IHN0cmluZyYgbmFtZV93aXRo
b3V0X3BhY2thZ2UsCi0gICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgYm9vbCBp
bW11dGFibGUpIHsKLSAgc3RyaW5nIHJlc3VsdDsKLSAgaWYgKE11bHRpcGxlSmF2YUZpbGVzKGZp
bGUsIGltbXV0YWJsZSkpIHsKLSAgICByZXN1bHQgPSBGaWxlSmF2YVBhY2thZ2UoZmlsZSwgaW1t
dXRhYmxlKTsKLSAgICBpZiAoIXJlc3VsdC5lbXB0eSgpKSByZXN1bHQgKz0gJy4nOwotICB9IGVs
c2UgewotICAgIHJlc3VsdCA9IEdldENsYXNzTmFtZShmaWxlLCBpbW11dGFibGUpOwotICAgIGlm
ICghcmVzdWx0LmVtcHR5KCkpIHJlc3VsdCArPSAnJCc7Ci0gIH0KLSAgcmVzdWx0ICs9IFN0cmlu
Z1JlcGxhY2UobmFtZV93aXRob3V0X3BhY2thZ2UsICIuIiwgIiQiLCB0cnVlKTsKLSAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotc3RyaW5nIENsYXNzTmFtZVJlc29sdmVyOjpHZXRFeHRlbnNpb25JZGVu
dGlmaWVyTmFtZSgKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGJvb2wg
aW1tdXRhYmxlKSB7Ci0gIHJldHVybiBHZXRDbGFzc05hbWUoZGVzY3JpcHRvci0+Y29udGFpbmlu
Z190eXBlKCksIGltbXV0YWJsZSkgKyAiLiIgKwotICAgICAgICAgZGVzY3JpcHRvci0+bmFtZSgp
OwotfQotCi0KLXN0cmluZyBDbGFzc05hbWVSZXNvbHZlcjo6R2V0SmF2YUltbXV0YWJsZUNsYXNz
TmFtZSgKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBHZXRK
YXZhQ2xhc3NGdWxsTmFtZSgKLSAgICAgIENsYXNzTmFtZVdpdGhvdXRQYWNrYWdlKGRlc2NyaXB0
b3IsIHRydWUpLAotICAgICAgZGVzY3JpcHRvci0+ZmlsZSgpLCB0cnVlKTsKLX0KLQotc3RyaW5n
IENsYXNzTmFtZVJlc29sdmVyOjpHZXRKYXZhSW1tdXRhYmxlQ2xhc3NOYW1lKAotICAgIGNvbnN0
IEVudW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBHZXRKYXZhQ2xhc3NGdWxs
TmFtZSgKLSAgICAgIENsYXNzTmFtZVdpdGhvdXRQYWNrYWdlKGRlc2NyaXB0b3IsIHRydWUpLAot
ICAgICAgZGVzY3JpcHRvci0+ZmlsZSgpLCB0cnVlKTsKLX0KLQotCi19ICAvLyBuYW1lc3BhY2Ug
amF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYK
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmEvamF2YV9uYW1lX3Jlc29sdmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDU3MGQ4ZDhmMWZhODI5MThlMWEyMDg0MGEyZTM0NTBlNmJkMzAwNzEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmEvamF2YV9uYW1lX3Jlc29sdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYg
R09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfTkFNRV9SRVNPTFZFUl9IX18KLSNkZWZpbmUg
R09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfTkFNRV9SRVNPTFZFUl9IX18KLQotI2luY2x1
ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvY29tbW9uLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLWNsYXNzIERlc2NyaXB0b3I7Ci1jbGFzcyBFbnVtRGVzY3JpcHRvcjsKLWNsYXNzIEZpZWxk
RGVzY3JpcHRvcjsKLWNsYXNzIEZpbGVEZXNjcmlwdG9yOwotY2xhc3MgU2VydmljZURlc2NyaXB0
b3I7Ci0KLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLS8vIFVzZWQg
dG8gZ2V0IHRoZSBKYXZhIGNsYXNzIHJlbGF0ZWQgbmFtZXMgZm9yIGEgZ2l2ZW4gZGVzY3JpcHRv
ci4gSXQgY2FjaGVzCi0vLyB0aGUgcmVzdWx0cyB0byBhdm9pZCByZWR1bmRhbnQgY2FsY3VsYXRp
b24gYWNyb3NzIG11bHRpcGxlIG5hbWUgcXVlcmllcy4KLS8vIFRocmVhZC1zYWZldHkgbm90ZTog
VGhpcyBjbGFzcyBpcyAqbm90KiB0aHJlYWQtc2FmZS4KLWNsYXNzIENsYXNzTmFtZVJlc29sdmVy
IHsKLSBwdWJsaWM6Ci0gIENsYXNzTmFtZVJlc29sdmVyKCk7Ci0gIH5DbGFzc05hbWVSZXNvbHZl
cigpOwotCi0gIC8vIEdldHMgdGhlIHVucXVhbGlmaWVkIG91dGVyIGNsYXNzIG5hbWUgZm9yIHRo
ZSBmaWxlLgotICBzdHJpbmcgR2V0RmlsZUNsYXNzTmFtZShjb25zdCBGaWxlRGVzY3JpcHRvciog
ZmlsZSwgYm9vbCBpbW11dGFibGUpOwotICAvLyBHZXRzIHRoZSB1bnF1YWxpZmllZCBpbW11dGFi
bGUgb3V0ZXIgY2xhc3MgbmFtZSBvZiBhIGZpbGUuCi0gIHN0cmluZyBHZXRGaWxlSW1tdXRhYmxl
Q2xhc3NOYW1lKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKTsKLSAgLy8gR2V0cyB0aGUgdW5x
dWFsaWZpZWQgZGVmYXVsdCBpbW11dGFibGUgb3V0ZXIgY2xhc3MgbmFtZSBvZiBhIGZpbGUKLSAg
Ly8gKGNvbnZlcnRlZCBmcm9tIHRoZSBwcm90byBmaWxlJ3MgbmFtZSkuCi0gIHN0cmluZyBHZXRG
aWxlRGVmYXVsdEltbXV0YWJsZUNsYXNzTmFtZShjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSk7
Ci0KLSAgLy8gQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbnkgdHlwZSBkZWZpbmVkIGluIHRoZSBw
cm90byBmaWxlIHRoYXQgaGFzCi0gIC8vIHRoZSBnaXZlbiBjbGFzcyBuYW1lLgotICBib29sIEhh
c0NvbmZsaWN0aW5nQ2xhc3NOYW1lKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgY2xhc3NuYW1lKTsKLQotICAv
LyBHZXRzIHRoZSBuYW1lIG9mIHRoZSBvdXRlciBjbGFzcyB0aGF0IGhvbGRzIGRlc2NyaXB0b3Ig
aW5mb3JtYXRpb24uCi0gIC8vIERlc2NyaXB0b3JzIGFyZSBzaGFyZWQgYmV0d2VlbiBpbW11dGFi
bGUgbWVzc2FnZXMgYW5kIG11dGFibGUgbWVzc2FnZXMuCi0gIC8vIFNpbmNlIGJvdGggb2YgdGhl
bSBhcmUgZ2VuZXJhdGVkIG9wdGlvbmFsbHksIHRoZSBkZXNjcmlwdG9ycyBuZWVkIHRvIGJlCi0g
IC8vIHB1dCBpbiBhbm90aGVyIGNvbW1vbiBwbGFjZS4KLSAgc3RyaW5nIEdldERlc2NyaXB0b3JD
bGFzc05hbWUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUpOwotCi0gIC8vIEdldHMgdGhlIGZ1
bGx5LXF1YWxpZmllZCBjbGFzcyBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGRlc2Ny
aXB0b3IuCi0gIHN0cmluZyBHZXRDbGFzc05hbWUoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRv
ciwgYm9vbCBpbW11dGFibGUpOwotICBzdHJpbmcgR2V0Q2xhc3NOYW1lKGNvbnN0IEVudW1EZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLCBib29sIGltbXV0YWJsZSk7Ci0gIHN0cmluZyBHZXRDbGFzc05h
bWUoY29uc3QgU2VydmljZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGJvb2wgaW1tdXRhYmxlKTsK
LSAgc3RyaW5nIEdldENsYXNzTmFtZShjb25zdCBGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvciwg
Ym9vbCBpbW11dGFibGUpOwotCi0gIHRlbXBsYXRlPGNsYXNzIERlc2NyaXB0b3JUeXBlPgotICBz
dHJpbmcgR2V0SW1tdXRhYmxlQ2xhc3NOYW1lKGNvbnN0IERlc2NyaXB0b3JUeXBlKiBkZXNjcmlw
dG9yKSB7Ci0gICAgcmV0dXJuIEdldENsYXNzTmFtZShkZXNjcmlwdG9yLCB0cnVlKTsKLSAgfQot
ICB0ZW1wbGF0ZTxjbGFzcyBEZXNjcmlwdG9yVHlwZT4KLSAgc3RyaW5nIEdldE11dGFibGVDbGFz
c05hbWUoY29uc3QgRGVzY3JpcHRvclR5cGUqIGRlc2NyaXB0b3IpIHsKLSAgICByZXR1cm4gR2V0
Q2xhc3NOYW1lKGRlc2NyaXB0b3IsIGZhbHNlKTsKLSAgfQotCi0gIC8vIEdldHMgdGhlIGZ1bGx5
IHF1YWxpZmllZCBuYW1lIG9mIGFuIGV4dGVuc2lvbiBpZGVudGlmaWVyLgotICBzdHJpbmcgR2V0
RXh0ZW5zaW9uSWRlbnRpZmllck5hbWUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbW11dGFibGUpOwot
Ci0gIC8vIEdldHMgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGZvciBnZW5lcmF0ZWQgY2xhc3Nl
cyBpbiBKYXZhIGNvbnZlbnRpb24uCi0gIC8vIE5lc3RlZCBjbGFzc2VzIHdpbGwgYmUgc2VwYXJh
dGVkIHVzaW5nICckJyBpbnN0ZWFkIG9mICcuJwotICAvLyBGb3IgZXhhbXBsZToKLSAgLy8gICBj
b20ucGFja2FnZS5PdXRlckNsYXNzJE91dGVyTWVzc2FnZSRJbm5lck1lc3NhZ2UKLSAgc3RyaW5n
IEdldEphdmFJbW11dGFibGVDbGFzc05hbWUoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7
Ci0gIHN0cmluZyBHZXRKYXZhSW1tdXRhYmxlQ2xhc3NOYW1lKGNvbnN0IEVudW1EZXNjcmlwdG9y
KiBkZXNjcmlwdG9yKTsKLSBwcml2YXRlOgotICAvLyBHZXQgdGhlIGZ1bGwgbmFtZSBvZiBhIEph
dmEgY2xhc3MgYnkgcHJlcGVuZGluZyB0aGUgSmF2YSBwYWNrYWdlIG5hbWUKLSAgLy8gb3Igb3V0
ZXIgY2xhc3MgbmFtZS4KLSAgc3RyaW5nIEdldENsYXNzRnVsbE5hbWUoY29uc3Qgc3RyaW5nJiBu
YW1lX3dpdGhvdXRfcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmls
ZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW1tdXRh
YmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpcGxlX2ZpbGVzKTsKLSAg
Ly8gR2V0IHRoZSBKYXZhIENsYXNzIHN0eWxlIGZ1bGwgbmFtZSBvZiBhIG1lc3NhZ2UuCi0gIHN0
cmluZyBHZXRKYXZhQ2xhc3NGdWxsTmFtZSgKLSAgICAgIGNvbnN0IHN0cmluZyYgbmFtZV93aXRo
b3V0X3BhY2thZ2UsCi0gICAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAgIGJv
b2wgaW1tdXRhYmxlKTsKLSAgLy8gQ2FjaGVzIHRoZSByZXN1bHQgdG8gcHJvdmlkZSBiZXR0ZXIg
cGVyZm9ybWFuY2UuCi0gIG1hcDxjb25zdCBGaWxlRGVzY3JpcHRvciosIHN0cmluZz4gZmlsZV9p
bW11dGFibGVfb3V0ZXJfY2xhc3NfbmFtZXNfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NP
TlNUUlVDVE9SUyhDbGFzc05hbWVSZXNvbHZlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgamF2
YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfSkFWQV9OQU1FX1JFU09MVkVSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmEvamF2YV9uYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9uYW1lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDYxNDMz
NTNhMDAwNmNlMThjNzYwYTU3MDM2MzQ2ZTE3Y2E0MjllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZh
L2phdmFfbmFtZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChL
ZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNp
Z24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0v
LyBQcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgbWFwcGluZyBhIGRlc2NyaXB0b3IgdG8gdGhlCi0v
LyBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBKYXZhIGNsYXNzLgot
Ci0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX05BTUVTX0hfXwotI2RlZmlu
ZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9OQU1FU19IX18KLQotI2luY2x1ZGUgPHN0
cmluZz4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1jbGFz
cyBEZXNjcmlwdG9yOwotY2xhc3MgRW51bURlc2NyaXB0b3I7Ci1jbGFzcyBGaWxlRGVzY3JpcHRv
cjsKLWNsYXNzIFNlcnZpY2VEZXNjcmlwdG9yOwotCi1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFt
ZXNwYWNlIGphdmEgewotCi0vLyBSZXF1aXJlczoKLS8vICAgZGVzY3JpcHRvciAhPSBOVUxMCi0v
LwotLy8gUmV0dXJuczoKLS8vICAgVGhlIGZ1bGx5LXF1YWxpZmllZCBKYXZhIGNsYXNzIG5hbWUu
Ci1zdHJpbmcgQ2xhc3NOYW1lKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotCi0vLyBS
ZXF1aXJlczoKLS8vICAgZGVzY3JpcHRvciAhPSBOVUxMCi0vLwotLy8gUmV0dXJuczoKLS8vICAg
VGhlIGZ1bGx5LXF1YWxpZmllZCBKYXZhIGNsYXNzIG5hbWUuCi1zdHJpbmcgQ2xhc3NOYW1lKGNv
bnN0IEVudW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLQotLy8gUmVxdWlyZXM6Ci0vLyAgIGRl
c2NyaXB0b3IgIT0gTlVMTAotLy8KLS8vIFJldHVybnM6Ci0vLyAgIFRoZSBmdWxseS1xdWFsaWZp
ZWQgSmF2YSBjbGFzcyBuYW1lLgotc3RyaW5nIENsYXNzTmFtZShjb25zdCBGaWxlRGVzY3JpcHRv
ciogZGVzY3JpcHRvcik7Ci0KLS8vIFJlcXVpcmVzOgotLy8gICBkZXNjcmlwdG9yICE9IE5VTEwK
LS8vCi0vLyBSZXR1cm5zOgotLy8gICBUaGUgZnVsbHktcXVhbGlmaWVkIEphdmEgY2xhc3MgbmFt
ZS4KLXN0cmluZyBDbGFzc05hbWUoY29uc3QgU2VydmljZURlc2NyaXB0b3IqIGRlc2NyaXB0b3Ip
OwotCi19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAv
LyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAv
LyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9OQU1FU19IX18KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfcGx1Z2luX3VuaXR0ZXN0LmNjIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9wbHVnaW5fdW5pdHRlc3QuY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNDkxMGM4OGFiMTA0N2MxNjFhMDJlM2Zj
MjUxNTEyYTdiOTZlYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9wbHVnaW5fdW5pdHRl
c3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBW
YXJkYSkKLS8vCi0vLyBUT0RPKGtlbnRvbik6ICBTaGFyZSBjb2RlIHdpdGggdGhlIHZlcnNpb25z
IG9mIHRoaXMgdGVzdCBpbiBvdGhlciBsYW5ndWFnZXM/Ci0vLyAgIEl0IHNlZW1lZCBsaWtlIHBh
cmFtZXRlcml6aW5nIGl0IHdvdWxkIGFkZCBtb3JlIGNvbXBsZXhpdHkgdGhhbiBpdCBpcwotLy8g
ICB3b3J0aC4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZ2VuZXJhdG9yLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2Uu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvdGVzdGluZy9maWxlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3Rp
bmcvZmlsZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3Qu
aD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVz
cGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewot
bmFtZXNwYWNlIHsKLQotY2xhc3MgVGVzdEdlbmVyYXRvciA6IHB1YmxpYyBDb2RlR2VuZXJhdG9y
IHsKLSBwdWJsaWM6Ci0gIFRlc3RHZW5lcmF0b3IoKSB7fQotICB+VGVzdEdlbmVyYXRvcigpIHt9
Ci0KLSAgdmlydHVhbCBib29sIEdlbmVyYXRlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBHZW5lcmF0b3JDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyaW5nKiBlcnJvcikgY29uc3QgewotICAgIHN0cmluZyBmaWxlbmFtZSA9
ICJUZXN0LmphdmEiOwotICAgIFRyeUluc2VydChmaWxlbmFtZSwgIm91dGVyX2NsYXNzX3Njb3Bl
IiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KGZpbGVuYW1lLCAiY2xhc3Nfc2NvcGU6Zm9vLkJh
ciIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydChmaWxlbmFtZSwgImNsYXNzX3Njb3BlOmZvby5C
YXIuQmF6IiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KGZpbGVuYW1lLCAiYnVpbGRlcl9zY29w
ZTpmb28uQmFyIiwgY29udGV4dCk7Ci0gICAgVHJ5SW5zZXJ0KGZpbGVuYW1lLCAiYnVpbGRlcl9z
Y29wZTpmb28uQmFyLkJheiIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydChmaWxlbmFtZSwgImVu
dW1fc2NvcGU6Zm9vLlF1eCIsIGNvbnRleHQpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAg
dm9pZCBUcnlJbnNlcnQoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qgc3RyaW5nJiBpbnNl
cnRpb25fcG9pbnQsCi0gICAgICAgICAgICAgICAgIEdlbmVyYXRvckNvbnRleHQqIGNvbnRleHQp
IGNvbnN0IHsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPGlvOjpaZXJvQ29weU91
dHB1dFN0cmVhbT4gb3V0cHV0KAotICAgICAgICBjb250ZXh0LT5PcGVuRm9ySW5zZXJ0KGZpbGVu
YW1lLCBpbnNlcnRpb25fcG9pbnQpKTsKLSAgICBpbzo6UHJpbnRlciBwcmludGVyKG91dHB1dC5n
ZXQoKSwgJyQnKTsKLSAgICBwcmludGVyLlByaW50KCIvLyBpbnNlcnRlZCAkbmFtZSRcbiIsICJu
YW1lIiwgaW5zZXJ0aW9uX3BvaW50KTsKLSAgfQotfTsKLQotLy8gVGhpcyB0ZXN0IHZlcmlmaWVz
IHRoYXQgYWxsIHRoZSBleHBlY3RlZCBpbnNlcnRpb24gcG9pbnRzIGV4aXN0LiAgSXQgZG9lcwot
Ly8gbm90IHZlcmlmeSB0aGF0IHRoZXkgYXJlIGNvcnJlY3RseS1wbGFjZWQ7IHRoYXQgd291bGQg
cmVxdWlyZSBhY3R1YWxseQotLy8gY29tcGlsaW5nIHRoZSBvdXRwdXQgd2hpY2ggaXMgYSBiaXQg
bW9yZSB0aGFuIEkgY2FyZSB0byBkbyBmb3IgdGhpcyB0ZXN0LgotVEVTVChKYXZhUGx1Z2luVGVz
dCwgUGx1Z2luVGVzdCkgewotICBHT09HTEVfQ0hFQ0tfT0soRmlsZTo6U2V0Q29udGVudHMoVGVz
dFRlbXBEaXIoKSArICIvdGVzdC5wcm90byIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cGFja2FnZSBmb287XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24gamF2
YV9wYWNrYWdlID0gXCJcIjtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlv
biBqYXZhX291dGVyX2NsYXNzbmFtZSA9IFwiVGVzdFwiO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibWVzc2FnZSBCYXIge1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiICBtZXNzYWdlIEJheiB7fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW51bSBRdXggeyBCTEFIID0gMTsgfVxu
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSkpOwotCi0gIGdvb2dsZTo6cHJv
dG9idWY6OmNvbXBpbGVyOjpDb21tYW5kTGluZUludGVyZmFjZSBjbGk7Ci0gIGNsaS5TZXRJbnB1
dHNBcmVQcm90b1BhdGhSZWxhdGl2ZSh0cnVlKTsKLQotICBKYXZhR2VuZXJhdG9yIGphdmFfZ2Vu
ZXJhdG9yOwotICBUZXN0R2VuZXJhdG9yIHRlc3RfZ2VuZXJhdG9yOwotICBjbGkuUmVnaXN0ZXJH
ZW5lcmF0b3IoIi0tamF2YV9vdXQiLCAmamF2YV9nZW5lcmF0b3IsICIiKTsKLSAgY2xpLlJlZ2lz
dGVyR2VuZXJhdG9yKCItLXRlc3Rfb3V0IiwgJnRlc3RfZ2VuZXJhdG9yLCAiIik7Ci0KLSAgc3Ry
aW5nIHByb3RvX3BhdGggPSAiLUkiICsgVGVzdFRlbXBEaXIoKTsKLSAgc3RyaW5nIGphdmFfb3V0
ID0gIi0tamF2YV9vdXQ9IiArIFRlc3RUZW1wRGlyKCk7Ci0gIHN0cmluZyB0ZXN0X291dCA9ICIt
LXRlc3Rfb3V0PSIgKyBUZXN0VGVtcERpcigpOwotCi0gIGNvbnN0IGNoYXIqIGFyZ3ZbXSA9IHsK
LSAgICAicHJvdG9jIiwKLSAgICBwcm90b19wYXRoLmNfc3RyKCksCi0gICAgamF2YV9vdXQuY19z
dHIoKSwKLSAgICB0ZXN0X291dC5jX3N0cigpLAotICAgICJ0ZXN0LnByb3RvIgotICB9OwotCi0g
IEVYUEVDVF9FUSgwLCBjbGkuUnVuKDUsIGFyZ3YpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi19
ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfcHJpbWl0aXZlX2ZpZWxkLmNjIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9wcmltaXRpdmVfZmllbGQuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MmVjMjgwMWZjYjI2OWE1ZjNkZTFkN2QzMzY1
NDljZGY0YWY4ZWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9wcmltaXRpdmVfZmllbGQu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSw4NjAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJk
YSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8g
IFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8bWFw
PgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9s
b2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfY29udGV4dC5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX25hbWVfcmVzb2x2
ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3ByaW1p
dGl2ZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3Bh
Y2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhIHsKLQot
dXNpbmcgaW50ZXJuYWw6OldpcmVGb3JtYXQ7Ci11c2luZyBpbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU7Ci0KLW5hbWVzcGFjZSB7Ci0KLXZvaWQgU2V0UHJpbWl0aXZlVmFyaWFibGVzKGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVpbGRl
ckJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGRHZW5lcmF0
b3JJbmZvKiBpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NOYW1lUmVzb2x2
ZXIqIG5hbWVfcmVzb2x2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXA8c3RyaW5n
LCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAgU2V0Q29tbW9uRmllbGRWYXJpYWJsZXMoZGVzY3Jp
cHRvciwgaW5mbywgdmFyaWFibGVzKTsKLQotICAoKnZhcmlhYmxlcylbInR5cGUiXSA9IFByaW1p
dGl2ZVR5cGVOYW1lKEdldEphdmFUeXBlKGRlc2NyaXB0b3IpKTsKLSAgKCp2YXJpYWJsZXMpWyJi
b3hlZF90eXBlIl0gPSBCb3hlZFByaW1pdGl2ZVR5cGVOYW1lKEdldEphdmFUeXBlKGRlc2NyaXB0
b3IpKTsKLSAgKCp2YXJpYWJsZXMpWyJmaWVsZF90eXBlIl0gPSAoKnZhcmlhYmxlcylbInR5cGUi
XTsKLSAgKCp2YXJpYWJsZXMpWyJmaWVsZF9saXN0X3R5cGUiXSA9ICJqYXZhLnV0aWwuTGlzdDwi
ICsKLSAgICAgICgqdmFyaWFibGVzKVsiYm94ZWRfdHlwZSJdICsgIj4iOwotICAoKnZhcmlhYmxl
cylbImVtcHR5X2xpc3QiXSA9ICJqYXZhLnV0aWwuQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkiOwot
ICAoKnZhcmlhYmxlcylbImRlZmF1bHQiXSA9IEltbXV0YWJsZURlZmF1bHRWYWx1ZShkZXNjcmlw
dG9yLCBuYW1lX3Jlc29sdmVyKTsKLSAgKCp2YXJpYWJsZXMpWyJkZWZhdWx0X2luaXQiXSA9IElz
RGVmYXVsdFZhbHVlSmF2YURlZmF1bHQoZGVzY3JpcHRvcikgPwotICAgICAgIiIgOiAoIj0gIiAr
IEltbXV0YWJsZURlZmF1bHRWYWx1ZShkZXNjcmlwdG9yLCBuYW1lX3Jlc29sdmVyKSk7Ci0gICgq
dmFyaWFibGVzKVsiY2FwaXRhbGl6ZWRfdHlwZSJdID0KLSAgICAgIEdldENhcGl0YWxpemVkVHlw
ZShkZXNjcmlwdG9yLCAvKiBpbW11dGFibGUgPSAqLyB0cnVlKTsKLSAgKCp2YXJpYWJsZXMpWyJ0
YWciXSA9IFNpbXBsZUl0b2EoV2lyZUZvcm1hdDo6TWFrZVRhZyhkZXNjcmlwdG9yKSk7Ci0gICgq
dmFyaWFibGVzKVsidGFnX3NpemUiXSA9IFNpbXBsZUl0b2EoCi0gICAgICBXaXJlRm9ybWF0OjpU
YWdTaXplKGRlc2NyaXB0b3ItPm51bWJlcigpLCBHZXRUeXBlKGRlc2NyaXB0b3IpKSk7Ci0gIGlm
IChJc1JlZmVyZW5jZVR5cGUoR2V0SmF2YVR5cGUoZGVzY3JpcHRvcikpKSB7Ci0gICAgKCp2YXJp
YWJsZXMpWyJudWxsX2NoZWNrIl0gPQotICAgICAgICAiICBpZiAodmFsdWUgPT0gbnVsbCkge1xu
IgotICAgICAgICAiICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpO1xuIgotICAg
ICAgICAiICB9XG4iOwotICB9IGVsc2UgewotICAgICgqdmFyaWFibGVzKVsibnVsbF9jaGVjayJd
ID0gIiI7Ci0gIH0KLSAgLy8gVE9ETyhiaXJkbyk6IEFkZCBAZGVwcmVjYXRlZCBqYXZhZG9jIHdo
ZW4gZ2VuZXJhdGluZyBqYXZhZG9jIGlzIHN1cHBvcnRlZAotICAvLyBieSB0aGUgcHJvdG8gY29t
cGlsZXIKLSAgKCp2YXJpYWJsZXMpWyJkZXByZWNhdGlvbiJdID0gZGVzY3JpcHRvci0+b3B0aW9u
cygpLmRlcHJlY2F0ZWQoKQotICAgICAgPyAiQGphdmEubGFuZy5EZXByZWNhdGVkICIgOiAiIjsK
LSAgaW50IGZpeGVkX3NpemUgPSBGaXhlZFNpemUoR2V0VHlwZShkZXNjcmlwdG9yKSk7Ci0gIGlm
IChmaXhlZF9zaXplICE9IC0xKSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJmaXhlZF9zaXplIl0gPSBT
aW1wbGVJdG9hKGZpeGVkX3NpemUpOwotICB9Ci0gICgqdmFyaWFibGVzKVsib25fY2hhbmdlZCJd
ID0gIm9uQ2hhbmdlZCgpOyI7Ci0KLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0
b3ItPmZpbGUoKSkpIHsKLSAgICAvLyBGb3Igc2luZ3VsYXIgbWVzc2FnZXMgYW5kIGJ1aWxkZXJz
LCBvbmUgYml0IGlzIHVzZWQgZm9yIHRoZSBoYXNGaWVsZCBiaXQuCi0gICAgKCp2YXJpYWJsZXMp
WyJnZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlIl0gPSBHZW5lcmF0ZUdldEJpdChtZXNzYWdlQml0
SW5kZXgpOwotICAgICgqdmFyaWFibGVzKVsiZ2V0X2hhc19maWVsZF9iaXRfYnVpbGRlciJdID0g
R2VuZXJhdGVHZXRCaXQoYnVpbGRlckJpdEluZGV4KTsKLQotICAgIC8vIE5vdGUgdGhhdCB0aGVz
ZSBoYXZlIGEgdHJhaWxpbmcgIjsiLgotICAgICgqdmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9i
aXRfbWVzc2FnZSJdID0KLSAgICAgICAgR2VuZXJhdGVTZXRCaXQobWVzc2FnZUJpdEluZGV4KSAr
ICI7IjsKLSAgICAoKnZhcmlhYmxlcylbInNldF9oYXNfZmllbGRfYml0X2J1aWxkZXIiXSA9Ci0g
ICAgICAgIEdlbmVyYXRlU2V0Qml0KGJ1aWxkZXJCaXRJbmRleCkgKyAiOyI7Ci0gICAgKCp2YXJp
YWJsZXMpWyJjbGVhcl9oYXNfZmllbGRfYml0X2J1aWxkZXIiXSA9Ci0gICAgICAgIEdlbmVyYXRl
Q2xlYXJCaXQoYnVpbGRlckJpdEluZGV4KSArICI7IjsKLQotICAgICgqdmFyaWFibGVzKVsiaXNf
ZmllbGRfcHJlc2VudF9tZXNzYWdlIl0gPSBHZW5lcmF0ZUdldEJpdChtZXNzYWdlQml0SW5kZXgp
OwotICB9IGVsc2UgewotICAgICgqdmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9iaXRfbWVzc2Fn
ZSJdID0gIiI7Ci0gICAgKCp2YXJpYWJsZXMpWyJzZXRfaGFzX2ZpZWxkX2JpdF9idWlsZGVyIl0g
PSAiIjsKLSAgICAoKnZhcmlhYmxlcylbImNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRlciJdID0g
IiI7Ci0KLSAgICBpZiAoZGVzY3JpcHRvci0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9CWVRFUykgewotICAgICAgKCp2YXJpYWJsZXMpWyJpc19maWVsZF9wcmVzZW50X21lc3NhZ2Ui
XSA9Ci0gICAgICAgICAgIiEiICsgKCp2YXJpYWJsZXMpWyJuYW1lIl0gKyAiXy5pc0VtcHR5KCki
OwotICAgIH0gZWxzZSB7Ci0gICAgICAoKnZhcmlhYmxlcylbImlzX2ZpZWxkX3ByZXNlbnRfbWVz
c2FnZSJdID0KLSAgICAgICAgICAoKnZhcmlhYmxlcylbIm5hbWUiXSArICJfICE9ICIgKyAoKnZh
cmlhYmxlcylbImRlZmF1bHQiXTsKLSAgICB9Ci0gIH0KLQotICAvLyBGb3IgcmVwYXRlZCBidWls
ZGVycywgb25lIGJpdCBpcyB1c2VkIGZvciB3aGV0aGVyIHRoZSBhcnJheSBpcyBpbW11dGFibGUu
Ci0gICgqdmFyaWFibGVzKVsiZ2V0X211dGFibGVfYml0X2J1aWxkZXIiXSA9IEdlbmVyYXRlR2V0
Qml0KGJ1aWxkZXJCaXRJbmRleCk7Ci0gICgqdmFyaWFibGVzKVsic2V0X211dGFibGVfYml0X2J1
aWxkZXIiXSA9IEdlbmVyYXRlU2V0Qml0KGJ1aWxkZXJCaXRJbmRleCk7Ci0gICgqdmFyaWFibGVz
KVsiY2xlYXJfbXV0YWJsZV9iaXRfYnVpbGRlciJdID0gR2VuZXJhdGVDbGVhckJpdChidWlsZGVy
Qml0SW5kZXgpOwotCi0gIC8vIEZvciByZXBlYXRlZCBmaWVsZHMsIG9uZSBiaXQgaXMgdXNlZCBm
b3Igd2hldGhlciB0aGUgYXJyYXkgaXMgaW1tdXRhYmxlCi0gIC8vIGluIHRoZSBwYXJzaW5nIGNv
bnN0cnVjdG9yLgotICAoKnZhcmlhYmxlcylbImdldF9tdXRhYmxlX2JpdF9wYXJzZXIiXSA9Ci0g
ICAgICBHZW5lcmF0ZUdldEJpdE11dGFibGVMb2NhbChidWlsZGVyQml0SW5kZXgpOwotICAoKnZh
cmlhYmxlcylbInNldF9tdXRhYmxlX2JpdF9wYXJzZXIiXSA9Ci0gICAgICBHZW5lcmF0ZVNldEJp
dE11dGFibGVMb2NhbChidWlsZGVyQml0SW5kZXgpOwotCi0gICgqdmFyaWFibGVzKVsiZ2V0X2hh
c19maWVsZF9iaXRfZnJvbV9sb2NhbCJdID0KLSAgICAgIEdlbmVyYXRlR2V0Qml0RnJvbUxvY2Fs
KGJ1aWxkZXJCaXRJbmRleCk7Ci0gICgqdmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9iaXRfdG9f
bG9jYWwiXSA9Ci0gICAgICBHZW5lcmF0ZVNldEJpdFRvTG9jYWwobWVzc2FnZUJpdEluZGV4KTsK
LX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSW1tdXRhYmxlUHJpbWl0
aXZlRmllbGRHZW5lcmF0b3I6OgotSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoY29u
c3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb250ZXh0KiBjb250ZXh0KQotICA6IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpLCBtZXNz
YWdlQml0SW5kZXhfKG1lc3NhZ2VCaXRJbmRleCksCi0gICAgYnVpbGRlckJpdEluZGV4XyhidWls
ZGVyQml0SW5kZXgpLCBjb250ZXh0Xyhjb250ZXh0KSwKLSAgICBuYW1lX3Jlc29sdmVyXyhjb250
ZXh0LT5HZXROYW1lUmVzb2x2ZXIoKSkgewotICBTZXRQcmltaXRpdmVWYXJpYWJsZXMoZGVzY3Jp
cHRvciwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5HZXRGaWVsZEdlbmVyYXRvckluZm8oZGVzY3JpcHRvciksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lX3Jlc29sdmVyXywgJnZhcmlhYmxlc18pOwotfQotCi1J
bW11dGFibGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6fkltbXV0YWJsZVByaW1pdGl2ZUZpZWxk
R2VuZXJhdG9yKCkge30KLQotaW50IEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjpH
ZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNvbnN0IHsKLSAgcmV0dXJuIDE7Ci19Ci0KLWludCBJbW11
dGFibGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6R2V0TnVtQml0c0ZvckJ1aWxkZXIoKSBjb25z
dCB7Ci0gIHJldHVybiAxOwotfQotCi12b2lkIEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJh
dG9yOjoKLUdlbmVyYXRlSW50ZXJmYWNlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsK
LSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kYm9vbGVhbiBoYXMk
Y2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIpOwotICB9Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
JGRlcHJlY2F0aW9uJCR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIpOwotfQotCi12
b2lkIEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICJwcml2YXRlICRmaWVsZF90eXBlJCAkbmFtZSRfO1xuIik7Ci0gIFByaW50RXh0cmFG
aWVsZEluZm8odmFyaWFibGVzXywgcHJpbnRlcik7Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5j
ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50
ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
IiRkZXByZWNhdGlvbiRwdWJsaWMgYm9vbGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4i
Ci0gICAgICAiICByZXR1cm4gJGdldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkO1xuIgotICAgICAg
In1cbiIpOwotICB9Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVi
bGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgcmV0dXJuICRu
YW1lJF87XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVByaW1pdGl2ZUZpZWxk
R2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSAkZmll
bGRfdHlwZSQgJG5hbWUkXyAkZGVmYXVsdF9pbml0JDtcbiIpOwotCi0gIGlmIChTdXBwb3J0Rmll
bGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgYm9vbGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFt
ZSQoKSB7XG4iCi0gICAgICAiICByZXR1cm4gJGdldF9oYXNfZmllbGRfYml0X2J1aWxkZXIkO1xu
IgotICAgICAgIn1cbiIpOwotICB9Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVj
YXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAg
cmV0dXJuICRuYW1lJF87XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50
KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJCgkdHlw
ZSQgdmFsdWUpIHtcbiIKLSAgICAiJG51bGxfY2hlY2skIgotICAgICIgICRzZXRfaGFzX2ZpZWxk
X2JpdF9idWlsZGVyJFxuIgotICAgICIgICRuYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAiICAkb25f
Y2hhbmdlZCRcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0KLSAgV3Jp
dGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgY2xlYXIkY2Fw
aXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgJGNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRl
ciRcbiIpOwotICBKYXZhVHlwZSB0eXBlID0gR2V0SmF2YVR5cGUoZGVzY3JpcHRvcl8pOwotICBp
ZiAodHlwZSA9PSBKQVZBVFlQRV9TVFJJTkcgfHwgdHlwZSA9PSBKQVZBVFlQRV9CWVRFUykgewot
ICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5vdCBhIHNpbXBsZSBsaXRlcmFsIHNvIHdlIHdh
bnQgdG8gYXZvaWQgZXhlY3V0aW5nCi0gICAgLy8gaXQgbXVsdGlwbGUgdGltZXMuICBJbnN0ZWFk
LCBnZXQgdGhlIGRlZmF1bHQgb3V0IG9mIHRoZSBkZWZhdWx0IGluc3RhbmNlLgotICAgIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiICAkbmFtZSRfID0gZ2V0RGVmYXVsdEluc3Rh
bmNlKCkuZ2V0JGNhcGl0YWxpemVkX25hbWUkKCk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiAgJG5hbWUkXyA9ICRkZWZhdWx0JDtcbiIp
OwotICB9Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiAgJG9uX2NoYW5nZWQk
XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0
YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlRmllbGRCdWlsZGVySW5pdGlh
bGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSAgY29uc3QgewotICAvLyBub29wIGZv
ciBwcmltaXRpdmVzCi19Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgIiRuYW1lJF8gPSAkZGVmYXVsdCQ7XG4i
KTsKLX0KLQotdm9pZCBJbW11dGFibGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZUJ1aWxkZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJG5hbWUkXyA9ICRkZWZhdWx0JDtcbiIKLSAgICAi
JGNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRlciRcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVBy
aW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3Jf
LT5maWxlKCkpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJpZiAo
b3RoZXIuaGFzJGNhcGl0YWxpemVkX25hbWUkKCkpIHtcbiIKLSAgICAgICIgIHNldCRjYXBpdGFs
aXplZF9uYW1lJChvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7XG4iCi0gICAgICAifVxu
Iik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJp
ZiAob3RoZXIuZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkgIT0gJGRlZmF1bHQkKSB7XG4iCi0gICAg
ICAiICBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQob3RoZXIuZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkp
O1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZlRmll
bGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxlKCkp
KSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJpZiAoJGdldF9oYXNf
ZmllbGRfYml0X2Zyb21fbG9jYWwkKSB7XG4iCi0gICAgICAiICAkc2V0X2hhc19maWVsZF9iaXRf
dG9fbG9jYWwkO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgInJlc3VsdC4kbmFtZSRfID0gJG5hbWUkXztcbiIpOwotfQotCi12b2lkIElt
bXV0YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0NvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAiJHNldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkXG4iCi0gICAgIiRuYW1lJF8gPSBpbnB1
dC5yZWFkJGNhcGl0YWxpemVkX3R5cGUkKCk7XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVQcmlt
aXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdEb25lQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgewotICAvLyBub29wIGZvciBwcmltaXRpdmVzLgotfQotCi12b2lk
IEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXphdGlv
bkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiaWYgKCRpc19maWVsZF9wcmVzZW50X21lc3NhZ2UkKSB7XG4iCi0gICAg
IiAgb3V0cHV0LndyaXRlJGNhcGl0YWxpemVkX3R5cGUkKCRudW1iZXIkLCAkbmFtZSRfKTtcbiIK
LSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRpc19maWVsZF9wcmVz
ZW50X21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgc2l6ZSArPSBjb20uZ29vZ2xlLnByb3RvYnVmLkNv
ZGVkT3V0cHV0U3RyZWFtXG4iCi0gICAgIiAgICAuY29tcHV0ZSRjYXBpdGFsaXplZF90eXBlJFNp
emUoJG51bWJlciQsICRuYW1lJF8pO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFi
bGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgc3dpdGNoIChHZXRKYXZhVHlwZShkZXNjcmlwdG9yXykp
IHsKLSAgICBjYXNlIEpBVkFUWVBFX0lOVDoKLSAgICBjYXNlIEpBVkFUWVBFX0xPTkc6Ci0gICAg
Y2FzZSBKQVZBVFlQRV9CT09MRUFOOgotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAgICAgInJlc3VsdCA9IHJlc3VsdCAmJiAoZ2V0JGNhcGl0YWxpemVkX25hbWUkKClcbiIK
LSAgICAgICAgIiAgICA9PSBvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7XG4iKTsKLSAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBKQVZBVFlQRV9GTE9BVDoKLSAgICAgIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgICAgICJyZXN1bHQgPSByZXN1bHQgJiYgKFxuIgotICAgICAg
ICAiICAgIGphdmEubGFuZy5GbG9hdC5mbG9hdFRvSW50Qml0cyhnZXQkY2FwaXRhbGl6ZWRfbmFt
ZSQoKSlcbiIKLSAgICAgICAgIiAgICA9PSBqYXZhLmxhbmcuRmxvYXQuZmxvYXRUb0ludEJpdHMo
XG4iCi0gICAgICAgICIgICAgICAgIG90aGVyLmdldCRjYXBpdGFsaXplZF9uYW1lJCgpKSk7XG4i
KTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBKQVZBVFlQRV9ET1VCTEU6Ci0gICAgICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAicmVzdWx0ID0gcmVzdWx0ICYmIChcbiIK
LSAgICAgICAgIiAgICBqYXZhLmxhbmcuRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHMoZ2V0JGNhcGl0
YWxpemVkX25hbWUkKCkpXG4iCi0gICAgICAgICIgICAgPT0gamF2YS5sYW5nLkRvdWJsZS5kb3Vi
bGVUb0xvbmdCaXRzKFxuIgotICAgICAgICAiICAgICAgICBvdGhlci5nZXQkY2FwaXRhbGl6ZWRf
bmFtZSQoKSkpO1xuIik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgSkFWQVRZUEVfU1RSSU5H
OgotICAgIGNhc2UgSkFWQVRZUEVfQllURVM6Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICAgICAicmVzdWx0ID0gcmVzdWx0ICYmIGdldCRjYXBpdGFsaXplZF9uYW1lJCgp
XG4iCi0gICAgICAgICIgICAgLmVxdWFscyhvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7
XG4iKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBKQVZBVFlQRV9FTlVNOgotICAgIGNhc2Ug
SkFWQVRZUEVfTUVTU0FHRToKLSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xPRyhGQVRBTCkg
PDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi12b2lkIEltbXV0
YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
aGFzaCA9ICgzNyAqIGhhc2gpICsgJGNvbnN0YW50X25hbWUkO1xuIik7Ci0gIHN3aXRjaCAoR2V0
SmF2YVR5cGUoZGVzY3JpcHRvcl8pKSB7Ci0gICAgY2FzZSBKQVZBVFlQRV9JTlQ6Ci0gICAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiaGFzaCA9ICg1MyAqIGhhc2gpICsg
Z2V0JGNhcGl0YWxpemVkX25hbWUkKCk7XG4iKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBK
QVZBVFlQRV9MT05HOgotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAg
Imhhc2ggPSAoNTMgKiBoYXNoKSArIGNvbS5nb29nbGUucHJvdG9idWYuSW50ZXJuYWwuaGFzaExv
bmcoXG4iCi0gICAgICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkpO1xuIik7Ci0gICAg
ICBicmVhazsKLQotICAgIGNhc2UgSkFWQVRZUEVfQk9PTEVBTjoKLSAgICAgIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgICAgICJoYXNoID0gKDUzICogaGFzaCkgKyBjb20uZ29vZ2xl
LnByb3RvYnVmLkludGVybmFsLmhhc2hCb29sZWFuKFxuIgotICAgICAgICAiICAgIGdldCRjYXBp
dGFsaXplZF9uYW1lJCgpKTtcbiIpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEpBVkFUWVBF
X0ZMT0FUOgotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgImhhc2gg
PSAoNTMgKiBoYXNoKSArIGphdmEubGFuZy5GbG9hdC5mbG9hdFRvSW50Qml0cyhcbiIKLSAgICAg
ICAgIiAgICBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7XG4iKTsKLSAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBKQVZBVFlQRV9ET1VCTEU6Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICAgICAiaGFzaCA9ICg1MyAqIGhhc2gpICsgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRl
cm5hbC5oYXNoTG9uZyhcbiIKLSAgICAgICAgIiAgICBqYXZhLmxhbmcuRG91YmxlLmRvdWJsZVRv
TG9uZ0JpdHMoZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkpKTtcbiIpOwotICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIEpBVkFUWVBFX1NUUklORzoKLSAgICBjYXNlIEpBVkFUWVBFX0JZVEVTOgotICAg
ICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgImhhc2ggPSAoNTMgKiBoYXNo
KSArIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpLmhhc2hDb2RlKCk7XG4iKTsKLSAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBKQVZBVFlQRV9FTlVNOgotICAgIGNhc2UgSkFWQVRZUEVfTUVTU0FHRToK
LSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJl
LiI7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdHJpbmcgSW1tdXRhYmxlUHJpbWl0aXZlRmll
bGRHZW5lcmF0b3I6OkdldEJveGVkVHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJuIEJveGVkUHJpbWl0
aXZlVHlwZU5hbWUoR2V0SmF2YVR5cGUoZGVzY3JpcHRvcl8pKTsKLX0KLQotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi1JbW11dGFibGVQcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUltbXV0YWJsZVBy
aW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJbmRl
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWlsZGVyQml0SW5kZXgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0KiBjb250ZXh0KQotICAg
IDogSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoCi0gICAgICAgICAgZGVzY3JpcHRv
ciwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsIGNvbnRleHQpIHsKLSAgY29uc3Qg
T25lb2ZHZW5lcmF0b3JJbmZvKiBpbmZvID0KLSAgICAgIGNvbnRleHQtPkdldE9uZW9mR2VuZXJh
dG9ySW5mbyhkZXNjcmlwdG9yLT5jb250YWluaW5nX29uZW9mKCkpOwotICBTZXRDb21tb25PbmVv
ZlZhcmlhYmxlcyhkZXNjcmlwdG9yLCBpbmZvLCAmdmFyaWFibGVzXyk7Ci19Ci0KLUltbXV0YWJs
ZVByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotfkltbXV0YWJsZVByaW1pdGl2ZU9uZW9m
RmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIEltbXV0YWJsZVByaW1pdGl2ZU9uZW9mRmllbGRH
ZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7
Ci0gIFByaW50RXh0cmFGaWVsZEluZm8odmFyaWFibGVzXywgcHJpbnRlcik7Ci0gIGlmIChTdXBw
b3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGRE
b2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgYm9vbGVhbiBoYXMkY2FwaXRhbGl6
ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAiICByZXR1cm4gJGhhc19vbmVvZl9jYXNlX21lc3NhZ2Uk
O1xuIgotICAgICAgIn1cbiIpOwotICB9Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVw
cmVjYXRpb24kcHVibGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAg
IiAgaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgICAgcmV0dXJuICgk
Ym94ZWRfdHlwZSQpICRvbmVvZl9uYW1lJF87XG4iCi0gICAgIiAgfVxuIgotICAgICIgIHJldHVy
biAkZGVmYXVsdCQ7XG4iCi0gICAgIn1cbiIpOwotfQotCi0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0
aXZlT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlw
dG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2Ny
aXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNh
dGlvbiRwdWJsaWMgYm9vbGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAi
ICByZXR1cm4gJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICAgIn1cbiIpOwotICB9
Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBn
ZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgaWYgKCRoYXNfb25lb2ZfY2FzZV9t
ZXNzYWdlJCkge1xuIgotICAgICIgICAgcmV0dXJuICgkYm94ZWRfdHlwZSQpICRvbmVvZl9uYW1l
JF87XG4iCi0gICAgIiAgfVxuIgotICAgICIgIHJldHVybiAkZGVmYXVsdCQ7XG4iCi0gICAgIn1c
biIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWls
ZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiJG51bGxf
Y2hlY2skIgotICAgICIgICRzZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAiICAkb25l
b2ZfbmFtZSRfID0gdmFsdWU7XG4iCi0gICAgIiAgJG9uX2NoYW5nZWQkXG4iCi0gICAgIiAgcmV0
dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50
ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRl
cHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgot
ICAgICIgIGlmICgkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIKLSAgICAiICAgICRjbGVh
cl9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICIgICAgJG9uZW9mX25hbWUkXyA9IG51bGw7
XG4iCi0gICAgIiAgICAkb25fY2hhbmdlZCRcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgcmV0dXJu
IHRoaXM7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVByaW1pdGl2ZU9uZW9m
RmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNf
b25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgIHJlc3VsdC4kb25lb2ZfbmFtZSRfID0g
JG9uZW9mX25hbWUkXztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0
aXZlT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInNl
dCRjYXBpdGFsaXplZF9uYW1lJChvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7XG4iKTsK
LX0KLQotdm9pZCBJbW11dGFibGVQcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVy
YXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAg
ICIkb25lb2ZfbmFtZSRfID0gaW5wdXQucmVhZCRjYXBpdGFsaXplZF90eXBlJCgpO1xuIik7Ci19
Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZlT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICgkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQp
IHtcbiIKLSAgICAiICBvdXRwdXQud3JpdGUkY2FwaXRhbGl6ZWRfdHlwZSQoXG4iCi0gICAgIiAg
ICAgICRudW1iZXIkLCAoJHR5cGUkKSgoJGJveGVkX3R5cGUkKSAkb25lb2ZfbmFtZSRfKSk7XG4i
Ci0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVByaW1pdGl2ZU9uZW9mRmllbGRHZW5l
cmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNfb25l
b2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1
Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAgICIgICAgLmNvbXB1dGUkY2FwaXRhbGl6ZWRfdHlw
ZSRTaXplKFxuIgotICAgICIgICAgICAgICRudW1iZXIkLCAoJHR5cGUkKSgoJGJveGVkX3R5cGUk
KSAkb25lb2ZfbmFtZSRfKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi0vLyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0K
LVJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotUmVwZWF0ZWRJbW11
dGFibGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNz
YWdlQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbnRleHQqIGNvbnRleHQpCi0gIDogZGVzY3JpcHRvcl8oZGVzY3JpcHRvciksIG1lc3Nh
Z2VCaXRJbmRleF8obWVzc2FnZUJpdEluZGV4KSwKLSAgICBidWlsZGVyQml0SW5kZXhfKGJ1aWxk
ZXJCaXRJbmRleCksIGNvbnRleHRfKGNvbnRleHQpLAotICAgIG5hbWVfcmVzb2x2ZXJfKGNvbnRl
eHQtPkdldE5hbWVSZXNvbHZlcigpKSB7Ci0gIFNldFByaW1pdGl2ZVZhcmlhYmxlcyhkZXNjcmlw
dG9yLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPkdldEZpZWxkR2VuZXJhdG9ySW5mbyhkZXNjcmlwdG9yKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWVfcmVzb2x2ZXJfLCAmdmFyaWFibGVzXyk7Ci19Ci0KLVJl
cGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotflJlcGVhdGVkSW1tdXRh
YmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoKSB7fQotCi1pbnQgUmVwZWF0ZWRJbW11dGFibGVQ
cmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6R2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25zdCB7Ci0g
IHJldHVybiAwOwotfQotCi1pbnQgUmVwZWF0ZWRJbW11dGFibGVQcmltaXRpdmVGaWVsZEdlbmVy
YXRvcjo6R2V0TnVtQml0c0ZvckJ1aWxkZXIoKSBjb25zdCB7Ci0gIHJldHVybiAxOwotfQotCi12
b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJ
bnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJGphdmEudXRpbC5MaXN0PCRib3hlZF90eXBlJD4g
Z2V0JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpO1xuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50
KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAiJGRlcHJlY2F0aW9uJGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpO1xuIik7Ci0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJCR0eXBlJCBnZXQkY2FwaXRhbGl6
ZWRfbmFtZSQoaW50IGluZGV4KTtcbiIpOwotfQotCi0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVQ
cmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0
ZSAkZmllbGRfbGlzdF90eXBlJCAkbmFtZSRfO1xuIik7Ci0gIFByaW50RXh0cmFGaWVsZEluZm8o
dmFyaWFibGVzXywgcHJpbnRlcik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRl
c2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0
aW9uJHB1YmxpYyBqYXZhLnV0aWwuTGlzdDwkYm94ZWRfdHlwZSQ+XG4iCi0gICAgIiAgICBnZXQk
Y2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkge1xuIgotICAgICIgIHJldHVybiAkbmFtZSRfO1xuIiAg
IC8vIG5vdGU6ICB1bm1vZGlmaWFibGUgbGlzdAotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERv
Y0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRD
b3VudCgpIHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXy5zaXplKCk7XG4iCi0gICAgIn1cbiIp
OwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdl
dCRjYXBpdGFsaXplZF9uYW1lJChpbnQgaW5kZXgpIHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUk
Xy5nZXQoaW5kZXgpO1xuIgotICAgICJ9XG4iKTsKLQotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3Bh
Y2tlZCgpICYmCi0gICAgICBjb250ZXh0Xy0+SGFzR2VuZXJhdGVkTWV0aG9kcyhkZXNjcmlwdG9y
Xy0+Y29udGFpbmluZ190eXBlKCkpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAgICJwcml2YXRlIGludCAkbmFtZSRNZW1vaXplZFNlcmlhbGl6ZWRTaXplID0gLTE7XG4i
KTsKLSAgfQotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0
b3I6OgotR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
ewotICAvLyBPbmUgZmllbGQgaXMgdGhlIGxpc3QgYW5kIHRoZSBiaXQgZmllbGQga2VlcHMgdHJh
Y2sgb2Ygd2hldGhlciB0aGUKLSAgLy8gbGlzdCBpcyBpbW11dGFibGUuIElmIGl0J3MgaW1tdXRh
YmxlLCB0aGUgaW52YXJpYW50IGlzIHRoYXQgaXQgbXVzdAotICAvLyBlaXRoZXIgYW4gaW5zdGFu
Y2Ugb2YgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkgb3IgaXQncyBhbiBBcnJheUxpc3QKLSAgLy8g
d3JhcHBlZCBpbiBhIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoKSB3cmFwcGVyIGFuZCBu
b2JvZHkgZWxzZSBoYXMKLSAgLy8gYSByZWZlcmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyBBcnJh
eUxpc3QuIFRoaXMgaW52YXJpYW50IGFsbG93cyB1cyB0bwotICAvLyBzaGFyZSBpbnN0YW5jZXMg
b2YgbGlzdHMgYmV0d2VlbiBwcm90b2NvbCBidWZmZXJzIGF2b2lkaW5nIGV4cGVuc2l2ZQotICAv
LyBtZW1vcnkgYWxsb2NhdGlvbnMuIE5vdGUsIGltbXV0YWJsZSBpcyBhIHN0cm9uZyBndWFyYW50
ZWUgaGVyZSAtLSBub3QKLSAgLy8ganVzdCB0aGF0IHRoZSBsaXN0IGNhbm5vdCBiZSBtb2RpZmll
ZCB2aWEgdGhlIHJlZmVyZW5jZSBidXQgdGhhdCB0aGUKLSAgLy8gbGlzdCBjYW4gbmV2ZXIgYmUg
bW9kaWZpZWQuCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgJGZp
ZWxkX2xpc3RfdHlwZSQgJG5hbWUkXyA9ICRlbXB0eV9saXN0JDtcbiIpOwotCi0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgdm9pZCBlbnN1cmUkY2FwaXRhbGl6ZWRf
bmFtZSRJc011dGFibGUoKSB7XG4iCi0gICAgIiAgaWYgKCEkZ2V0X211dGFibGVfYml0X2J1aWxk
ZXIkKSB7XG4iCi0gICAgIiAgICAkbmFtZSRfID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3Q8JGJv
eGVkX3R5cGUkPigkbmFtZSRfKTtcbiIKLSAgICAiICAgICRzZXRfbXV0YWJsZV9iaXRfYnVpbGRl
ciQ7XG4iCi0gICAgIiAgIH1cbiIKLSAgICAifVxuIik7Ci0KLSAgICAvLyBOb3RlOiAgV2UgcmV0
dXJuIGFuIHVubW9kaWZpYWJsZSBsaXN0IGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBjYWxsZXIKLSAg
ICAvLyAgIGNvdWxkIGhvbGQgb24gdG8gdGhlIHJldHVybmVkIGxpc3QgYW5kIG1vZGlmeSBpdCBh
ZnRlciB0aGUgbWVzc2FnZQotICAgIC8vICAgaGFzIGJlZW4gYnVpbHQsIHRodXMgbXV0YXRpbmcg
dGhlIG1lc3NhZ2Ugd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUKLSAgICAvLyAgIGltbXV0YWJsZS4K
LSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRpbC5M
aXN0PCRib3hlZF90eXBlJD5cbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3Qo
KSB7XG4iCi0gICAgIiAgcmV0dXJuIGphdmEudXRpbC5Db2xsZWN0aW9ucy51bm1vZGlmaWFibGVM
aXN0KCRuYW1lJF8pO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJp
bnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIk
ZGVwcmVjYXRpb24kcHVibGljIGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpIHtcbiIK
LSAgICAiICByZXR1cm4gJG5hbWUkXy5zaXplKCk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXpl
ZF9uYW1lJChpbnQgaW5kZXgpIHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXy5nZXQoaW5kZXgp
O1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3Jp
cHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24k
cHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGlu
ZGV4LCAkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiJG51bGxfY2hlY2skIgotICAgICIgIGVuc3Vy
ZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRuYW1lJF8uc2V0KGlu
ZGV4LCB2YWx1ZSk7XG4iCi0gICAgIiAgJG9uX2NoYW5nZWQkXG4iCi0gICAgIiAgcmV0dXJuIHRo
aXM7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlv
biRwdWJsaWMgQnVpbGRlciBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4i
Ci0gICAgIiRudWxsX2NoZWNrJCIKLSAgICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011
dGFibGUoKTtcbiIKLSAgICAiICAkbmFtZSRfLmFkZCh2YWx1ZSk7XG4iCi0gICAgIiAgJG9uX2No
YW5nZWQkXG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBhZGRBbGwkY2FwaXRh
bGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICBqYXZhLmxhbmcuSXRlcmFibGU8PyBleHRlbmRzICRi
b3hlZF90eXBlJD4gdmFsdWVzKSB7XG4iCi0gICAgIiAgZW5zdXJlJGNhcGl0YWxpemVkX25hbWUk
SXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgY29tLmdvb2dsZS5wcm90b2J1Zi5BYnN0cmFjdE1lc3Nh
Z2VMaXRlLkJ1aWxkZXIuYWRkQWxsKFxuIgotICAgICIgICAgICB2YWx1ZXMsICRuYW1lJF8pO1xu
IgotICAgICIgICRvbl9jaGFuZ2VkJFxuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9
XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxk
ZXIgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgJG5hbWUkXyA9ICRlbXB0
eV9saXN0JDtcbiIKLSAgICAiICAkY2xlYXJfbXV0YWJsZV9iaXRfYnVpbGRlciQ7XG4iCi0gICAg
IiAgJG9uX2NoYW5nZWQkXG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwot
fQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
ICBjb25zdCB7Ci0gIC8vIG5vb3AgZm9yIHByaW1pdGl2ZXMKLX0KLQotdm9pZCBSZXBlYXRlZElt
bXV0YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW5pdGlhbGl6YXRpb25D
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sICIkbmFtZSRfID0gJGVtcHR5X2xpc3QkO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJ
bW11dGFibGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkZXJDbGVhckNv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAiJG5hbWUkXyA9ICRlbXB0eV9saXN0JDtcbiIKLSAgICAiJGNsZWFyX211dGFi
bGVfYml0X2J1aWxkZXIkO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVQcmltaXRp
dmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCB7Ci0gIC8vIFRoZSBjb2RlIGJlbG93IGRvZXMgdHdvIG9wdGltaXphdGlvbnM6
Ci0gIC8vICAgMS4gSWYgdGhlIG90aGVyIGxpc3QgaXMgZW1wdHksIHRoZXJlJ3Mgbm90aGluZyB0
byBkby4gVGhpcyBlbnN1cmVzIHdlCi0gIC8vICAgICAgZG9uJ3QgYWxsb2NhdGUgYSBuZXcgYXJy
YXkgaWYgd2UgYWxyZWFkeSBoYXZlIGFuIGltbXV0YWJsZSBvbmUuCi0gIC8vICAgMi4gSWYgdGhl
IG90aGVyIGxpc3QgaXMgbm9uLWVtcHR5IGFuZCBvdXIgY3VycmVudCBsaXN0IGlzIGVtcHR5LCB3
ZSBjYW4KLSAgLy8gICAgICByZXVzZSB0aGUgb3RoZXIgbGlzdCB3aGljaCBpcyBndWFyYW50ZWVk
IHRvIGJlIGltbXV0YWJsZS4KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYg
KCFvdGhlci4kbmFtZSRfLmlzRW1wdHkoKSkge1xuIgotICAgICIgIGlmICgkbmFtZSRfLmlzRW1w
dHkoKSkge1xuIgotICAgICIgICAgJG5hbWUkXyA9IG90aGVyLiRuYW1lJF87XG4iCi0gICAgIiAg
ICAkY2xlYXJfbXV0YWJsZV9iaXRfYnVpbGRlciQ7XG4iCi0gICAgIiAgfSBlbHNlIHtcbiIKLSAg
ICAiICAgIGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICAg
JG5hbWUkXy5hZGRBbGwob3RoZXIuJG5hbWUkXyk7XG4iCi0gICAgIiAgfVxuIgotICAgICIgICRv
bl9jaGFuZ2VkJFxuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVBy
aW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRpbmdDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIFRoZSBjb2RlIGJlbG93IGVuc3VyZXMgdGhhdCB0aGUg
cmVzdWx0IGhhcyBhbiBpbW11dGFibGUgbGlzdC4gSWYgb3VyCi0gIC8vIGxpc3QgaXMgaW1tdXRh
YmxlLCB3ZSBjYW4ganVzdCByZXVzZSBpdC4gSWYgbm90LCB3ZSBtYWtlIGl0IGltbXV0YWJsZS4K
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRnZXRfbXV0YWJsZV9iaXRf
YnVpbGRlciQpIHtcbiIKLSAgICAiICAkbmFtZSRfID0gamF2YS51dGlsLkNvbGxlY3Rpb25zLnVu
bW9kaWZpYWJsZUxpc3QoJG5hbWUkXyk7XG4iCi0gICAgIiAgJGNsZWFyX211dGFibGVfYml0X2J1
aWxkZXIkO1xuIgotICAgICJ9XG4iCi0gICAgInJlc3VsdC4kbmFtZSRfID0gJG5hbWUkXztcbiIp
OwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoISRnZXRfbXV0YWJsZV9iaXRfcGFyc2Vy
JCkge1xuIgotICAgICIgICRuYW1lJF8gPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdDwkYm94ZWRf
dHlwZSQ+KCk7XG4iCi0gICAgIiAgJHNldF9tdXRhYmxlX2JpdF9wYXJzZXIkO1xuIgotICAgICJ9
XG4iCi0gICAgIiRuYW1lJF8uYWRkKGlucHV0LnJlYWQkY2FwaXRhbGl6ZWRfdHlwZSQoKSk7XG4i
KTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoK
LUdlbmVyYXRlUGFyc2luZ0NvZGVGcm9tUGFja2VkKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImludCBsZW5ndGggPSBpbnB1
dC5yZWFkUmF3VmFyaW50MzIoKTtcbiIKLSAgICAiaW50IGxpbWl0ID0gaW5wdXQucHVzaExpbWl0
KGxlbmd0aCk7XG4iCi0gICAgImlmICghJGdldF9tdXRhYmxlX2JpdF9wYXJzZXIkICYmIGlucHV0
LmdldEJ5dGVzVW50aWxMaW1pdCgpID4gMCkge1xuIgotICAgICIgICRuYW1lJF8gPSBuZXcgamF2
YS51dGlsLkFycmF5TGlzdDwkYm94ZWRfdHlwZSQ+KCk7XG4iCi0gICAgIiAgJHNldF9tdXRhYmxl
X2JpdF9wYXJzZXIkO1xuIgotICAgICJ9XG4iCi0gICAgIndoaWxlIChpbnB1dC5nZXRCeXRlc1Vu
dGlsTGltaXQoKSA+IDApIHtcbiIKLSAgICAiICAkbmFtZSRfLmFkZChpbnB1dC5yZWFkJGNhcGl0
YWxpemVkX3R5cGUkKCkpO1xuIgotICAgICJ9XG4iCi0gICAgImlucHV0LnBvcExpbWl0KGxpbWl0
KTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0
b3I6OgotR2VuZXJhdGVQYXJzaW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRnZXRfbXV0YWJsZV9i
aXRfcGFyc2VyJCkge1xuIgotICAgICIgICRuYW1lJF8gPSBqYXZhLnV0aWwuQ29sbGVjdGlvbnMu
dW5tb2RpZmlhYmxlTGlzdCgkbmFtZSRfKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUmVw
ZWF0ZWRJbW11dGFibGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6
YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChkZXNjcmlwdG9y
Xy0+aXNfcGFja2VkKCkpIHsKLSAgICAvLyBXZSBpbnZva2UgZ2V0U2VyaWFsaXplZFNpemUgaW4g
d3JpdGVUbyBmb3IgbWVzc2FnZXMgdGhhdCBoYXZlIHBhY2tlZAotICAgIC8vIGZpZWxkcyBpbiBJ
bW11dGFibGVNZXNzYWdlR2VuZXJhdG9yOjpHZW5lcmF0ZU1lc3NhZ2VTZXJpYWxpemF0aW9uTWV0
aG9kcy4KLSAgICAvLyBUaGF0IG1ha2VzIGl0IHNhZmUgdG8gcmVseSBvbiB0aGUgbWVtb2l6ZWQg
c2l6ZSBoZXJlLgotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaWYgKGdl
dCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKS5zaXplKCkgPiAwKSB7XG4iCi0gICAgICAiICBvdXRw
dXQud3JpdGVSYXdWYXJpbnQzMigkdGFnJCk7XG4iCi0gICAgICAiICBvdXRwdXQud3JpdGVSYXdW
YXJpbnQzMigkbmFtZSRNZW1vaXplZFNlcmlhbGl6ZWRTaXplKTtcbiIKLSAgICAgICJ9XG4iCi0g
ICAgICAiZm9yIChpbnQgaSA9IDA7IGkgPCAkbmFtZSRfLnNpemUoKTsgaSsrKSB7XG4iCi0gICAg
ICAiICBvdXRwdXQud3JpdGUkY2FwaXRhbGl6ZWRfdHlwZSROb1RhZygkbmFtZSRfLmdldChpKSk7
XG4iCi0gICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAgICJmb3IgKGludCBpID0gMDsgaSA8ICRuYW1lJF8uc2l6ZSgpOyBpKyspIHtc
biIKLSAgICAgICIgIG91dHB1dC53cml0ZSRjYXBpdGFsaXplZF90eXBlJCgkbnVtYmVyJCwgJG5h
bWUkXy5nZXQoaSkpO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJ
bW11dGFibGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXpl
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICJ7XG4iCi0gICAgIiAgaW50IGRhdGFTaXplID0gMDtcbiIpOwotICBwcmlu
dGVyLT5JbmRlbnQoKTsKLQotICBpZiAoRml4ZWRTaXplKEdldFR5cGUoZGVzY3JpcHRvcl8pKSA9
PSAtMSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiZm9yIChpbnQg
aSA9IDA7IGkgPCAkbmFtZSRfLnNpemUoKTsgaSsrKSB7XG4iCi0gICAgICAiICBkYXRhU2l6ZSAr
PSBjb20uZ29vZ2xlLnByb3RvYnVmLkNvZGVkT3V0cHV0U3RyZWFtXG4iCi0gICAgICAiICAgIC5j
b21wdXRlJGNhcGl0YWxpemVkX3R5cGUkU2l6ZU5vVGFnKCRuYW1lJF8uZ2V0KGkpKTtcbiIKLSAg
ICAgICJ9XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICAgImRhdGFTaXplID0gJGZpeGVkX3NpemUkICogZ2V0JGNhcGl0YWxpemVkX25hbWUkTGlz
dCgpLnNpemUoKTtcbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAic2l6ZSAr
PSBkYXRhU2l6ZTtcbiIpOwotCi0gIGlmIChkZXNjcmlwdG9yXy0+aXNfcGFja2VkKCkpIHsKLSAg
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImlmICghZ2V0JGNhcGl0YWxpemVk
X25hbWUkTGlzdCgpLmlzRW1wdHkoKSkge1xuIgotICAgICAgIiAgc2l6ZSArPSAkdGFnX3NpemUk
O1xuIgotICAgICAgIiAgc2l6ZSArPSBjb20uZ29vZ2xlLnByb3RvYnVmLkNvZGVkT3V0cHV0U3Ry
ZWFtXG4iCi0gICAgICAiICAgICAgLmNvbXB1dGVJbnQzMlNpemVOb1RhZyhkYXRhU2l6ZSk7XG4i
Ci0gICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICJzaXplICs9ICR0YWdfc2l6ZSQgKiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0
KCkuc2l6ZSgpO1xuIik7Ci0gIH0KLQotICAvLyBjYWNoZSB0aGUgZGF0YSBzaXplIGZvciBwYWNr
ZWQgZmllbGRzLgotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3BhY2tlZCgpKSB7Ci0gICAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkbmFtZSRNZW1vaXplZFNlcmlhbGl6ZWRTaXpl
ID0gZGF0YVNpemU7XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRl
ci0+UHJpbnQoIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmll
bGRHZW5lcmF0b3I6OgotR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInJlc3VsdCA9IHJlc3Vs
dCAmJiBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KClcbiIKLSAgICAiICAgIC5lcXVhbHMob3Ro
ZXIuZ2V0JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVk
SW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNoQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICJpZiAoZ2V0JGNhcGl0YWxpemVkX25hbWUkQ291bnQoKSA+IDApIHtcbiIKLSAgICAiICBo
YXNoID0gKDM3ICogaGFzaCkgKyAkY29uc3RhbnRfbmFtZSQ7XG4iCi0gICAgIiAgaGFzaCA9ICg1
MyAqIGhhc2gpICsgZ2V0JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpLmhhc2hDb2RlKCk7XG4iCi0g
ICAgIn1cbiIpOwotfQotCi1zdHJpbmcgUmVwZWF0ZWRJbW11dGFibGVQcmltaXRpdmVGaWVsZEdl
bmVyYXRvcjo6R2V0Qm94ZWRUeXBlKCkgY29uc3QgewotICByZXR1cm4gQm94ZWRQcmltaXRpdmVU
eXBlTmFtZShHZXRKYXZhVHlwZShkZXNjcmlwdG9yXykpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
amF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYK
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfcHJpbWl0aXZlX2ZpZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX3ByaW1pdGl2ZV9maWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMGNkMTJkOTc2ZDIzOGJhOWU1ZDAxY2JlZjU4YmRkNGM2NDVmYTEyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfcHJpbWl0aXZlX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNjAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8v
IEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBv
cmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwg
SmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxF
Ul9KQVZBX1BSSU1JVElWRV9GSUVMRF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJ
TEVSX0pBVkFfUFJJTUlUSVZFX0ZJRUxEX0hfXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2Zp
ZWxkLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLSAgbmFt
ZXNwYWNlIGNvbXBpbGVyIHsKLSAgICBuYW1lc3BhY2UgamF2YSB7Ci0gICAgICBjbGFzcyBDb250
ZXh0OyAgICAgICAgICAgLy8gY29udGV4dC5oCi0gICAgICBjbGFzcyBDbGFzc05hbWVSZXNvbHZl
cjsgLy8gbmFtZV9yZXNvbHZlci5oCi0gICAgfQotICB9Ci19Ci0KLW5hbWVzcGFjZSBwcm90b2J1
ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi1jbGFzcyBJbW11
dGFibGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBJbW11dGFibGVGaWVsZEdlbmVy
YXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBJbW11dGFibGVQcmltaXRpdmVGaWVsZEdlbmVy
YXRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50IG1lc3Nh
Z2VCaXRJbmRleCwKLSAgICAgIGludCBidWlsZGVyQml0SW5kZXgsIENvbnRleHQqIGNvbnRleHQp
OwotICB+SW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoKTsKLQotICAvLyBpbXBsZW1l
bnRzIEltbXV0YWJsZUZpZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICBpbnQgR2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25zdDsKLSAgaW50IEdl
dE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbnRlcmZhY2VNZW1i
ZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lbWJlcnMo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRlck1lbWJl
cnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSW5pdGlhbGl6
YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1
aWxkZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlQnVpbGRpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZVBhcnNpbmdEb25lQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQg
R2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlRmllbGRCdWlsZGVySW5pdGlhbGl6YXRpb25Db2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gIHN0cmluZyBHZXRCb3hlZFR5cGUoKSBjb25zdDsKLQot
IHByb3RlY3RlZDoKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAgbWFw
PHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotICBjb25zdCBpbnQgbWVzc2FnZUJpdEluZGV4
XzsKLSAgY29uc3QgaW50IGJ1aWxkZXJCaXRJbmRleF87Ci0gIENvbnRleHQqIGNvbnRleHRfOwot
ICBDbGFzc05hbWVSZXNvbHZlciogbmFtZV9yZXNvbHZlcl87Ci0KLSBwcml2YXRlOgotICBHT09H
TEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5l
cmF0b3IpOwotfTsKLQotY2xhc3MgSW1tdXRhYmxlUHJpbWl0aXZlT25lb2ZGaWVsZEdlbmVyYXRv
cgotICAgIDogcHVibGljIEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yIHsKLSBwdWJs
aWM6Ci0gIEltbXV0YWJsZVByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3IoCi0gICAgICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAg
ICBpbnQgYnVpbGRlckJpdEluZGV4LCBDb250ZXh0KiBjb250ZXh0KTsKLSAgfkltbXV0YWJsZVBy
aW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3IoKTsKLQotICB2b2lkIEdlbmVyYXRlTWVtYmVycyhp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGVyTWVtYmVy
cyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGluZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVyZ2luZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXph
dGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2Vy
aWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotIHByaXZhdGU6
Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhJbW11dGFibGVQcmltaXRpdmVP
bmVvZkZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0
aXZlRmllbGRHZW5lcmF0b3IKLSAgICA6IHB1YmxpYyBJbW11dGFibGVGaWVsZEdlbmVyYXRvciB7
Ci0gcHVibGljOgotICBleHBsaWNpdCBSZXBlYXRlZEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkR2Vu
ZXJhdG9yKAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQgbWVz
c2FnZUJpdEluZGV4LAotICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwgQ29udGV4dCogY29udGV4
dCk7Ci0gIHZpcnR1YWwgflJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRHZW5lcmF0b3Io
KTsKLQotICAvLyBpbXBsZW1lbnRzIEltbXV0YWJsZUZpZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBpbnQgR2V0TnVtQml0c0Zvck1lc3NhZ2Uo
KSBjb25zdDsKLSAgaW50IEdldE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3Q7Ci0gIHZvaWQgR2Vu
ZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlSW5pdGlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsK
LSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2RlRnJvbVBhY2tlZChpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nRG9uZUNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUZpZWxkQnVp
bGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZv
aWQgR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotICBzdHJp
bmcgR2V0Qm94ZWRUeXBlKCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0g
IGNvbnN0IGludCBtZXNzYWdlQml0SW5kZXhfOwotICBjb25zdCBpbnQgYnVpbGRlckJpdEluZGV4
XzsKLSAgQ29udGV4dCogY29udGV4dF87Ci0gIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29s
dmVyXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUmVwZWF0ZWRJbW11
dGFibGVQcmltaXRpdmVGaWVsZEdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgamF2
YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfSkFWQV9QUklNSVRJVkVfRklFTERfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YS9qYXZhX3ByaW1pdGl2ZV9maWVsZF9saXRlLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9wcmltaXRpdmVfZmllbGRfbGl0ZS5jYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkwZGFkMTI4ZmM2ZTQ4YWYzNmU3NzYzNTBjOTJl
MDhkNzBjZjMzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3ByaW1pdGl2ZV9maWVsZF9s
aXRlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsOTAwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24g
VmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkK
LS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUg
PG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2NvbnRleHQuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2RvY19jb21tZW50
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9oZWxwZXJz
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9uYW1lX3Jl
c29sdmVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9w
cmltaXRpdmVfZmllbGRfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmlu
dGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBq
YXZhIHsKLQotdXNpbmcgaW50ZXJuYWw6OldpcmVGb3JtYXQ7Ci11c2luZyBpbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU7Ci0KLW5hbWVzcGFjZSB7Ci0KLXZvaWQgU2V0UHJpbWl0aXZlVmFyaWFibGVz
KGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYnVpbGRlckJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGRHZW5lcmF0b3JJbmZvKiBpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NO
YW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXA8c3RyaW5nLCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAgU2V0Q29tbW9uRmllbGRWYXJpYWJs
ZXMoZGVzY3JpcHRvciwgaW5mbywgdmFyaWFibGVzKTsKLQotICAoKnZhcmlhYmxlcylbInR5cGUi
XSA9IFByaW1pdGl2ZVR5cGVOYW1lKEdldEphdmFUeXBlKGRlc2NyaXB0b3IpKTsKLSAgKCp2YXJp
YWJsZXMpWyJib3hlZF90eXBlIl0gPSBCb3hlZFByaW1pdGl2ZVR5cGVOYW1lKEdldEphdmFUeXBl
KGRlc2NyaXB0b3IpKTsKLSAgKCp2YXJpYWJsZXMpWyJmaWVsZF90eXBlIl0gPSAoKnZhcmlhYmxl
cylbInR5cGUiXTsKLSAgKCp2YXJpYWJsZXMpWyJkZWZhdWx0Il0gPSBJbW11dGFibGVEZWZhdWx0
VmFsdWUoZGVzY3JpcHRvciwgbmFtZV9yZXNvbHZlcik7Ci0gICgqdmFyaWFibGVzKVsiZGVmYXVs
dF9pbml0Il0gPSBJc0RlZmF1bHRWYWx1ZUphdmFEZWZhdWx0KGRlc2NyaXB0b3IpID8KLSAgICAg
ICIiIDogKCI9ICIgKyBJbW11dGFibGVEZWZhdWx0VmFsdWUoZGVzY3JpcHRvciwgbmFtZV9yZXNv
bHZlcikpOwotICAoKnZhcmlhYmxlcylbImNhcGl0YWxpemVkX3R5cGUiXSA9Ci0gICAgICBHZXRD
YXBpdGFsaXplZFR5cGUoZGVzY3JpcHRvciwgLyogaW1tdXRhYmxlID0gKi8gdHJ1ZSk7Ci0gICgq
dmFyaWFibGVzKVsidGFnIl0gPSBTaW1wbGVJdG9hKFdpcmVGb3JtYXQ6Ok1ha2VUYWcoZGVzY3Jp
cHRvcikpOwotICAoKnZhcmlhYmxlcylbInRhZ19zaXplIl0gPSBTaW1wbGVJdG9hKAotICAgICAg
V2lyZUZvcm1hdDo6VGFnU2l6ZShkZXNjcmlwdG9yLT5udW1iZXIoKSwgR2V0VHlwZShkZXNjcmlw
dG9yKSkpOwotCi0gIHN0cmluZyBjYXBpdGFsaXplZF90eXBlID0gVW5kZXJzY29yZXNUb0NhbWVs
Q2FzZShQcmltaXRpdmVUeXBlTmFtZSgKLSAgICAgICAgR2V0SmF2YVR5cGUoZGVzY3JpcHRvcikp
LCB0cnVlIC8qIGNhcF9uZXh0X2xldHRlciAqLyk7Ci0gIHN3aXRjaCAoR2V0SmF2YVR5cGUoZGVz
Y3JpcHRvcikpIHsKLSAgICBjYXNlIEpBVkFUWVBFX0lOVDoKLSAgICBjYXNlIEpBVkFUWVBFX0xP
Tkc6Ci0gICAgY2FzZSBKQVZBVFlQRV9GTE9BVDoKLSAgICBjYXNlIEpBVkFUWVBFX0RPVUJMRToK
LSAgICBjYXNlIEpBVkFUWVBFX0JPT0xFQU46Ci0gICAgICAoKnZhcmlhYmxlcylbImZpZWxkX2xp
c3RfdHlwZSJdID0KLSAgICAgICAgICAiY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC4iICsg
Y2FwaXRhbGl6ZWRfdHlwZSArICJMaXN0IjsKLSAgICAgICgqdmFyaWFibGVzKVsiZW1wdHlfbGlz
dCJdID0gImVtcHR5IiArIGNhcGl0YWxpemVkX3R5cGUgKyAiTGlzdCgpIjsKLSAgICAgICgqdmFy
aWFibGVzKVsibWFrZV9uYW1lX3VubW9kaWZpYWJsZSJdID0KLSAgICAgICAgICAoKnZhcmlhYmxl
cylbIm5hbWUiXSArICJfLm1ha2VJbW11dGFibGUoKSI7Ci0gICAgICAoKnZhcmlhYmxlcylbInJl
cGVhdGVkX2dldCJdID0KLSAgICAgICAgICAoKnZhcmlhYmxlcylbIm5hbWUiXSArICJfLmdldCIg
KyBjYXBpdGFsaXplZF90eXBlOwotICAgICAgKCp2YXJpYWJsZXMpWyJyZXBlYXRlZF9hZGQiXSA9
Ci0gICAgICAgICAgKCp2YXJpYWJsZXMpWyJuYW1lIl0gKyAiXy5hZGQiICsgY2FwaXRhbGl6ZWRf
dHlwZTsKLSAgICAgICgqdmFyaWFibGVzKVsicmVwZWF0ZWRfc2V0Il0gPQotICAgICAgICAgICgq
dmFyaWFibGVzKVsibmFtZSJdICsgIl8uc2V0IiArIGNhcGl0YWxpemVkX3R5cGU7Ci0gICAgICAo
KnZhcmlhYmxlcylbInZpc2l0X3R5cGUiXSA9IGNhcGl0YWxpemVkX3R5cGU7Ci0gICAgICAoKnZh
cmlhYmxlcylbInZpc2l0X3R5cGVfbGlzdCJdID0gInZpc2l0IiArIGNhcGl0YWxpemVkX3R5cGUg
KyAiTGlzdCI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgKCp2YXJpYWJsZXMp
WyJmaWVsZF9saXN0X3R5cGUiXSA9Ci0gICAgICAgICAgImNvbS5nb29nbGUucHJvdG9idWYuSW50
ZXJuYWwuUHJvdG9idWZMaXN0PCIgKwotICAgICAgICAgICgqdmFyaWFibGVzKVsiYm94ZWRfdHlw
ZSJdICsgIj4iOwotICAgICAgKCp2YXJpYWJsZXMpWyJlbXB0eV9saXN0Il0gPSAiZW1wdHlQcm90
b2J1Zkxpc3QoKSI7Ci0gICAgICAoKnZhcmlhYmxlcylbIm1ha2VfbmFtZV91bm1vZGlmaWFibGUi
XSA9Ci0gICAgICAgICAgKCp2YXJpYWJsZXMpWyJuYW1lIl0gKyAiXy5tYWtlSW1tdXRhYmxlKCki
OwotICAgICAgKCp2YXJpYWJsZXMpWyJyZXBlYXRlZF9nZXQiXSA9ICgqdmFyaWFibGVzKVsibmFt
ZSJdICsgIl8uZ2V0IjsKLSAgICAgICgqdmFyaWFibGVzKVsicmVwZWF0ZWRfYWRkIl0gPSAoKnZh
cmlhYmxlcylbIm5hbWUiXSArICJfLmFkZCI7Ci0gICAgICAoKnZhcmlhYmxlcylbInJlcGVhdGVk
X3NldCJdID0gKCp2YXJpYWJsZXMpWyJuYW1lIl0gKyAiXy5zZXQiOwotICAgICAgKCp2YXJpYWJs
ZXMpWyJ2aXNpdF90eXBlIl0gPSAiQnl0ZVN0cmluZyI7Ci0gICAgICAoKnZhcmlhYmxlcylbInZp
c2l0X3R5cGVfbGlzdCJdID0gInZpc2l0TGlzdCI7Ci0gIH0KLQotICBpZiAoSXNSZWZlcmVuY2VU
eXBlKEdldEphdmFUeXBlKGRlc2NyaXB0b3IpKSkgewotICAgICgqdmFyaWFibGVzKVsibnVsbF9j
aGVjayJdID0KLSAgICAgICAgIiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiIKLSAgICAgICAgIiAg
ICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTtcbiIKLSAgICAgICAgIiAgfVxuIjsK
LSAgfSBlbHNlIHsKLSAgICAoKnZhcmlhYmxlcylbIm51bGxfY2hlY2siXSA9ICIiOwotICB9Ci0g
IC8vIFRPRE8oYmlyZG8pOiBBZGQgQGRlcHJlY2F0ZWQgamF2YWRvYyB3aGVuIGdlbmVyYXRpbmcg
amF2YWRvYyBpcyBzdXBwb3J0ZWQKLSAgLy8gYnkgdGhlIHByb3RvIGNvbXBpbGVyCi0gICgqdmFy
aWFibGVzKVsiZGVwcmVjYXRpb24iXSA9IGRlc2NyaXB0b3ItPm9wdGlvbnMoKS5kZXByZWNhdGVk
KCkKLSAgICAgID8gIkBqYXZhLmxhbmcuRGVwcmVjYXRlZCAiIDogIiI7Ci0gIGludCBmaXhlZF9z
aXplID0gRml4ZWRTaXplKEdldFR5cGUoZGVzY3JpcHRvcikpOwotICBpZiAoZml4ZWRfc2l6ZSAh
PSAtMSkgewotICAgICgqdmFyaWFibGVzKVsiZml4ZWRfc2l6ZSJdID0gU2ltcGxlSXRvYShmaXhl
ZF9zaXplKTsKLSAgfQotCi0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yLT5m
aWxlKCkpKSB7Ci0gICAgLy8gRm9yIHNpbmd1bGFyIG1lc3NhZ2VzIGFuZCBidWlsZGVycywgb25l
IGJpdCBpcyB1c2VkIGZvciB0aGUgaGFzRmllbGQgYml0LgotICAgICgqdmFyaWFibGVzKVsiZ2V0
X2hhc19maWVsZF9iaXRfbWVzc2FnZSJdID0gR2VuZXJhdGVHZXRCaXQobWVzc2FnZUJpdEluZGV4
KTsKLQotICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBoYXZlIGEgdHJhaWxpbmcgIjsiLgotICAgICgq
dmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSJdID0KLSAgICAgICAgR2VuZXJh
dGVTZXRCaXQobWVzc2FnZUJpdEluZGV4KSArICI7IjsKLSAgICAoKnZhcmlhYmxlcylbImNsZWFy
X2hhc19maWVsZF9iaXRfbWVzc2FnZSJdID0KLSAgICAgICAgR2VuZXJhdGVDbGVhckJpdChtZXNz
YWdlQml0SW5kZXgpICsgIjsiOwotCi0gICAgKCp2YXJpYWJsZXMpWyJpc19maWVsZF9wcmVzZW50
X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0Qml0KG1lc3NhZ2VCaXRJbmRleCk7Ci0gIH0gZWxzZSB7
Ci0gICAgKCp2YXJpYWJsZXMpWyJzZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlIl0gPSAiIjsKLSAg
ICAoKnZhcmlhYmxlcylbInNldF9oYXNfZmllbGRfYml0X21lc3NhZ2UiXSA9ICIiOwotICAgICgq
dmFyaWFibGVzKVsiY2xlYXJfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlIl0gPSAiIjsKLQotICAgIGlm
IChkZXNjcmlwdG9yLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTKSB7Ci0g
ICAgICAoKnZhcmlhYmxlcylbImlzX2ZpZWxkX3ByZXNlbnRfbWVzc2FnZSJdID0KLSAgICAgICAg
ICAiISIgKyAoKnZhcmlhYmxlcylbIm5hbWUiXSArICJfLmlzRW1wdHkoKSI7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICgqdmFyaWFibGVzKVsiaXNfZmllbGRfcHJlc2VudF9tZXNzYWdlIl0gPQotICAg
ICAgICAgICgqdmFyaWFibGVzKVsibmFtZSJdICsgIl8gIT0gIiArICgqdmFyaWFibGVzKVsiZGVm
YXVsdCJdOwotICAgIH0KLSAgfQotCi0gIC8vIEZvciByZXBlYXRlZCBidWlsZGVycywgdGhlIHVu
ZGVybHlpbmcgbGlzdCB0cmFja3MgbXV0YWJpbGl0eSBzdGF0ZS4KLSAgKCp2YXJpYWJsZXMpWyJp
c19tdXRhYmxlIl0gPSAoKnZhcmlhYmxlcylbIm5hbWUiXSArICJfLmlzTW9kaWZpYWJsZSgpIjsK
LQotICAoKnZhcmlhYmxlcylbImdldF9oYXNfZmllbGRfYml0X2Zyb21fbG9jYWwiXSA9Ci0gICAg
ICBHZW5lcmF0ZUdldEJpdEZyb21Mb2NhbChidWlsZGVyQml0SW5kZXgpOwotICAoKnZhcmlhYmxl
cylbInNldF9oYXNfZmllbGRfYml0X3RvX2xvY2FsIl0gPQotICAgICAgR2VuZXJhdGVTZXRCaXRU
b0xvY2FsKG1lc3NhZ2VCaXRJbmRleCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0KLUltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1JbW11dGFi
bGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNj
cmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJ
bmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWlsZGVyQml0SW5k
ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0KiBjb250ZXh0KQot
ICA6IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpLCBtZXNzYWdlQml0SW5kZXhfKG1lc3NhZ2VCaXRJ
bmRleCksCi0gICAgYnVpbGRlckJpdEluZGV4XyhidWlsZGVyQml0SW5kZXgpLCBjb250ZXh0Xyhj
b250ZXh0KSwKLSAgICBuYW1lX3Jlc29sdmVyXyhjb250ZXh0LT5HZXROYW1lUmVzb2x2ZXIoKSkg
ewotICBTZXRQcmltaXRpdmVWYXJpYWJsZXMoZGVzY3JpcHRvciwgbWVzc2FnZUJpdEluZGV4LCBi
dWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5HZXRGaWVs
ZEdlbmVyYXRvckluZm8oZGVzY3JpcHRvciksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1l
X3Jlc29sdmVyXywgJnZhcmlhYmxlc18pOwotfQotCi1JbW11dGFibGVQcmltaXRpdmVGaWVsZExp
dGVHZW5lcmF0b3I6On5JbW11dGFibGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0b3IoKSB7fQot
Ci1pbnQgSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yOjpHZXROdW1CaXRzRm9y
TWVzc2FnZSgpIGNvbnN0IHsKLSAgcmV0dXJuIDE7Ci19Ci0KLWludCBJbW11dGFibGVQcmltaXRp
dmVGaWVsZExpdGVHZW5lcmF0b3I6OkdldE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3QgewotICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBJbW11dGFibGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0b3I6
OgotR2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7
Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAg
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRib29sZWFuIGhhcyRjYXBp
dGFsaXplZF9uYW1lJCgpO1xuIik7Ci0gIH0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVw
cmVjYXRpb24kJHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIik7Ci19Ci0KLXZvaWQg
SW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICJwcml2YXRlICRmaWVsZF90eXBlJCAkbmFtZSRfO1xuIik7Ci0gIFByaW50RXh0cmFG
aWVsZEluZm8odmFyaWFibGVzXywgcHJpbnRlcik7Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5j
ZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50
ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
IiRkZXByZWNhdGlvbiRwdWJsaWMgYm9vbGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4i
Ci0gICAgICAiICByZXR1cm4gJGdldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkO1xuIgotICAgICAg
In1cbiIpOwotICB9Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVi
bGljICR0eXBlJCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgcmV0dXJuICRu
YW1lJF87XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIs
IGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0
ZSB2b2lkIHNldCRjYXBpdGFsaXplZF9uYW1lJCgkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiJG51
bGxfY2hlY2skIgotICAgICIgICRzZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlJFxuIgotICAgICIg
ICRuYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1l
bnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICJwcml2YXRlIHZvaWQgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAg
JGNsZWFyX2hhc19maWVsZF9iaXRfbWVzc2FnZSRcbiIpOwotICBKYXZhVHlwZSB0eXBlID0gR2V0
SmF2YVR5cGUoZGVzY3JpcHRvcl8pOwotICBpZiAodHlwZSA9PSBKQVZBVFlQRV9TVFJJTkcgfHwg
dHlwZSA9PSBKQVZBVFlQRV9CWVRFUykgewotICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5v
dCBhIHNpbXBsZSBsaXRlcmFsIHNvIHdlIHdhbnQgdG8gYXZvaWQgZXhlY3V0aW5nCi0gICAgLy8g
aXQgbXVsdGlwbGUgdGltZXMuICBJbnN0ZWFkLCBnZXQgdGhlIGRlZmF1bHQgb3V0IG9mIHRoZSBk
ZWZhdWx0IGluc3RhbmNlLgotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAi
ICAkbmFtZSRfID0gZ2V0RGVmYXVsdEluc3RhbmNlKCkuZ2V0JGNhcGl0YWxpemVkX25hbWUkKCk7
XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
IiAgJG5hbWUkXyA9ICRkZWZhdWx0JDtcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0
ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgp
KSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRwdWJsaWMg
Ym9vbGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAiICByZXR1cm4gaW5z
dGFuY2UuaGFzJGNhcGl0YWxpemVkX25hbWUkKCk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLQot
ICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgJHR5cGUkIGdldCRj
YXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICByZXR1cm4gaW5zdGFuY2UuZ2V0JGNhcGl0
YWxpemVkX25hbWUkKCk7XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50
KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJCgkdHlw
ZSQgdmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNl
LnNldCRjYXBpdGFsaXplZF9uYW1lJCh2YWx1ZSk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4i
Ci0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0
b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1
YmxpYyBCdWlsZGVyIGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIGNvcHlP
bldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2UuY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKTtc
biIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRh
YmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlRmllbGRCdWlsZGVySW5p
dGlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSAgY29uc3QgewotICAvLyBub29w
IGZvciBwcmltaXRpdmVzCi19Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2Vu
ZXJhdG9yOjoKLUdlbmVyYXRlSW5pdGlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICIkbmFtZSRfID0gJGRlZmF1
bHQkO1xuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9y
OjoKLUdlbmVyYXRlQnVpbGRlckNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
ewotICAvLyBub29wIGZvciBwcmltaXRpdmVzCi19Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZl
RmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlVmlzaXRDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCB7Ci0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+Zmls
ZSgpKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJG5hbWUkXyA9
IHZpc2l0b3IudmlzaXQkdmlzaXRfdHlwZSQoXG4iCi0gICAgICAiICAgIGhhcyRjYXBpdGFsaXpl
ZF9uYW1lJCgpLCAkbmFtZSRfLFxuIgotICAgICAgIiAgICBvdGhlci5oYXMkY2FwaXRhbGl6ZWRf
bmFtZSQoKSwgb3RoZXIuJG5hbWUkXyk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICAgIiRuYW1lJF8gPSB2aXNpdG9yLnZpc2l0JHZpc2l0X3R5
cGUkKCRuYW1lJF8gIT0gJGRlZmF1bHQkLCAkbmFtZSRfLFxuIgotICAgICAgIiAgICBvdGhlci4k
bmFtZSRfICE9ICRkZWZhdWx0JCwgb3RoZXIuJG5hbWUkXyk7XG4iKTsKLSAgfQotfQotCi12b2lk
IEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkaW5n
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBub29wIGZvciBwcmltaXRp
dmVzCi19Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdl
bmVyYXRlRHluYW1pY01ldGhvZE1ha2VJbW11dGFibGVDb2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIC8vIG5vb3AgZm9yIHNjYWxhcnMKLX0KLQotdm9pZCBJbW11dGFibGVQcmlt
aXRpdmVGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIk
c2V0X2hhc19maWVsZF9iaXRfbWVzc2FnZSRcbiIKLSAgICAiJG5hbWUkXyA9IGlucHV0LnJlYWQk
Y2FwaXRhbGl6ZWRfdHlwZSQoKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVByaW1pdGl2ZUZp
ZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdEb25lQ29kZShpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3QgewotICAvLyBub29wIGZvciBwcmltaXRpdmVzLgotfQotCi12b2lkIElt
bXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6YXRp
b25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgImlmICgkaXNfZmllbGRfcHJlc2VudF9tZXNzYWdlJCkge1xuIgotICAg
ICIgIG91dHB1dC53cml0ZSRjYXBpdGFsaXplZF90eXBlJCgkbnVtYmVyJCwgJG5hbWUkXyk7XG4i
Ci0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoJGlzX2ZpZWxk
X3ByZXNlbnRfbWVzc2FnZSQpIHtcbiIKLSAgICAiICBzaXplICs9IGNvbS5nb29nbGUucHJvdG9i
dWYuQ29kZWRPdXRwdXRTdHJlYW1cbiIKLSAgICAiICAgIC5jb21wdXRlJGNhcGl0YWxpemVkX3R5
cGUkU2l6ZSgkbnVtYmVyJCwgJG5hbWUkXyk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIElt
bXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUVxdWFsc0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgc3dpdGNoIChHZXRKYXZhVHlwZShkZXNj
cmlwdG9yXykpIHsKLSAgICBjYXNlIEpBVkFUWVBFX0lOVDoKLSAgICBjYXNlIEpBVkFUWVBFX0xP
Tkc6Ci0gICAgY2FzZSBKQVZBVFlQRV9CT09MRUFOOgotICAgICAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAgICAgInJlc3VsdCA9IHJlc3VsdCAmJiAoZ2V0JGNhcGl0YWxpemVkX25h
bWUkKClcbiIKLSAgICAgICAgIiAgICA9PSBvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7
XG4iKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBKQVZBVFlQRV9GTE9BVDoKLSAgICAgIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAgICJyZXN1bHQgPSByZXN1bHQgJiYgKFxu
IgotICAgICAgICAiICAgIGphdmEubGFuZy5GbG9hdC5mbG9hdFRvSW50Qml0cyhnZXQkY2FwaXRh
bGl6ZWRfbmFtZSQoKSlcbiIKLSAgICAgICAgIiAgICA9PSBqYXZhLmxhbmcuRmxvYXQuZmxvYXRU
b0ludEJpdHMoXG4iCi0gICAgICAgICIgICAgICAgIG90aGVyLmdldCRjYXBpdGFsaXplZF9uYW1l
JCgpKSk7XG4iKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBKQVZBVFlQRV9ET1VCTEU6Ci0g
ICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAicmVzdWx0ID0gcmVzdWx0
ICYmIChcbiIKLSAgICAgICAgIiAgICBqYXZhLmxhbmcuRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHMo
Z2V0JGNhcGl0YWxpemVkX25hbWUkKCkpXG4iCi0gICAgICAgICIgICAgPT0gamF2YS5sYW5nLkRv
dWJsZS5kb3VibGVUb0xvbmdCaXRzKFxuIgotICAgICAgICAiICAgICAgICBvdGhlci5nZXQkY2Fw
aXRhbGl6ZWRfbmFtZSQoKSkpO1xuIik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgSkFWQVRZ
UEVfU1RSSU5HOgotICAgIGNhc2UgSkFWQVRZUEVfQllURVM6Ci0gICAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICAgICAicmVzdWx0ID0gcmVzdWx0ICYmIGdldCRjYXBpdGFsaXpl
ZF9uYW1lJCgpXG4iCi0gICAgICAgICIgICAgLmVxdWFscyhvdGhlci5nZXQkY2FwaXRhbGl6ZWRf
bmFtZSQoKSk7XG4iKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBKQVZBVFlQRV9FTlVNOgot
ICAgIGNhc2UgSkFWQVRZUEVfTUVTU0FHRToKLSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xP
RyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi12
b2lkIEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUhhc2hD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgImhhc2ggPSAoMzcgKiBoYXNoKSArICRjb25zdGFudF9uYW1lJDtcbiIpOwot
ICBzd2l0Y2ggKEdldEphdmFUeXBlKGRlc2NyaXB0b3JfKSkgewotICAgIGNhc2UgSkFWQVRZUEVf
SU5UOgotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgImhhc2ggPSAo
NTMgKiBoYXNoKSArIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIik7Ci0gICAgICBicmVhazsK
LQotICAgIGNhc2UgSkFWQVRZUEVfTE9ORzoKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgICAgICJoYXNoID0gKDUzICogaGFzaCkgKyBjb20uZ29vZ2xlLnByb3RvYnVmLklu
dGVybmFsLmhhc2hMb25nKFxuIgotICAgICAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJCgp
KTtcbiIpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEpBVkFUWVBFX0JPT0xFQU46Ci0gICAg
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiaGFzaCA9ICg1MyAqIGhhc2gp
ICsgY29tLmdvb2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5oYXNoQm9vbGVhbihcbiIKLSAgICAgICAg
IiAgICBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7XG4iKTsKLSAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBKQVZBVFlQRV9GTE9BVDoKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0g
ICAgICAgICJoYXNoID0gKDUzICogaGFzaCkgKyBqYXZhLmxhbmcuRmxvYXQuZmxvYXRUb0ludEJp
dHMoXG4iCi0gICAgICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkpO1xuIik7Ci0gICAg
ICBicmVhazsKLQotICAgIGNhc2UgSkFWQVRZUEVfRE9VQkxFOgotICAgICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICAgImhhc2ggPSAoNTMgKiBoYXNoKSArIGNvbS5nb29nbGUu
cHJvdG9idWYuSW50ZXJuYWwuaGFzaExvbmcoXG4iCi0gICAgICAgICIgICAgamF2YS5sYW5nLkRv
dWJsZS5kb3VibGVUb0xvbmdCaXRzKGdldCRjYXBpdGFsaXplZF9uYW1lJCgpKSk7XG4iKTsKLSAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBKQVZBVFlQRV9TVFJJTkc6Ci0gICAgY2FzZSBKQVZBVFlQ
RV9CWVRFUzoKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAgICJoYXNo
ID0gKDUzICogaGFzaCkgKyBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKS5oYXNoQ29kZSgpO1xuIik7
Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgSkFWQVRZUEVfRU5VTToKLSAgICBjYXNlIEpBVkFU
WVBFX01FU1NBR0U6Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJD
YW4ndCBnZXQgaGVyZS4iOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RyaW5nIEltbXV0YWJs
ZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6R2V0Qm94ZWRUeXBlKCkgY29uc3QgewotICBy
ZXR1cm4gQm94ZWRQcmltaXRpdmVUeXBlTmFtZShHZXRKYXZhVHlwZShkZXNjcmlwdG9yXykpOwot
fQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLUltbXV0YWJsZVByaW1pdGl2ZU9uZW9mRmllbGRMaXRlR2Vu
ZXJhdG9yOjoKLUltbXV0YWJsZVByaW1pdGl2ZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yKGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgYnVpbGRlckJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29udGV4dCogY29udGV4dCkKLSAgICA6IEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdl
bmVyYXRvcigKLSAgICAgICAgICBkZXNjcmlwdG9yLCBtZXNzYWdlQml0SW5kZXgsIGJ1aWxkZXJC
aXRJbmRleCwgY29udGV4dCkgewotICBjb25zdCBPbmVvZkdlbmVyYXRvckluZm8qIGluZm8gPQot
ICAgICAgY29udGV4dC0+R2V0T25lb2ZHZW5lcmF0b3JJbmZvKGRlc2NyaXB0b3ItPmNvbnRhaW5p
bmdfb25lb2YoKSk7Ci0gIFNldENvbW1vbk9uZW9mVmFyaWFibGVzKGRlc2NyaXB0b3IsIGluZm8s
ICZ2YXJpYWJsZXNfKTsKLX0KLQotSW1tdXRhYmxlUHJpbWl0aXZlT25lb2ZGaWVsZExpdGVHZW5l
cmF0b3I6OgotfkltbXV0YWJsZVByaW1pdGl2ZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yKCkge30K
LQotdm9pZCBJbW11dGFibGVQcmltaXRpdmVPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5l
cmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgUHJpbnRFeHRyYUZp
ZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmludGVyKTsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNl
KGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAi
JGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIK
LSAgICAgICIgIHJldHVybiAkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgICAifVxu
Iik7Ci0gIH0KLQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMg
JHR5cGUkIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICBpZiAoJGhhc19vbmVv
Zl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICByZXR1cm4gKCRib3hlZF90eXBlJCkgJG9u
ZW9mX25hbWUkXztcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgcmV0dXJuICRkZWZhdWx0JDtcbiIK
LSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIHZvaWQgc2V0
JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIkbnVsbF9jaGVjayQi
Ci0gICAgIiAgJHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICIgICRvbmVvZl9uYW1l
JF8gPSB2YWx1ZTtcbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJp
bnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJw
cml2YXRlIHZvaWQgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgaWYgKCRo
YXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgICAgJGNsZWFyX29uZW9mX2Nhc2Vf
bWVzc2FnZSQ7XG4iCi0gICAgIiAgICAkb25lb2ZfbmFtZSRfID0gbnVsbDtcbiIKLSAgICAiICB9
XG4iCi0gICAgIn1cbiIpOwotfQotCi0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZlT25lb2ZGaWVs
ZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgewotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZp
bGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVjYXRpb24kcHVi
bGljIGJvb2xlYW4gaGFzJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICAgIiAgcmV0dXJu
IGluc3RhbmNlLmhhcyRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIgotICAgICAgIn1cbiIpOwotICB9
Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljICR0eXBlJCBn
ZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGluc3RhbmNlLmdldCRj
YXBpdGFsaXplZF9uYW1lJCgpO1xuIgotICAgICJ9XG4iKTsKLQotICBXcml0ZUZpZWxkRG9jQ29t
bWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQo
JHR5cGUkIHZhbHVlKSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0
YW5jZS5zZXQkY2FwaXRhbGl6ZWRfbmFtZSQodmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlz
O1xuIgotICAgICJ9XG4iKTsKLQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlv
biRwdWJsaWMgQnVpbGRlciBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICBj
b3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNlLmNsZWFyJGNhcGl0YWxpemVkX25hbWUk
KCk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIElt
bXV0YWJsZVByaW1pdGl2ZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRp
bmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIG5vb3AgZm9yIHByaW1p
dGl2ZXMKLX0KLQotdm9pZCBJbW11dGFibGVQcmltaXRpdmVPbmVvZkZpZWxkTGl0ZUdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZVZpc2l0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRvbmVvZl9uYW1lJF8gPSB2aXNpdG9y
LnZpc2l0T25lb2YkdmlzaXRfdHlwZSQoXG4iCi0gICAgICAiICAgICRoYXNfb25lb2ZfY2FzZV9t
ZXNzYWdlJCwgJG9uZW9mX25hbWUkXywgb3RoZXIuJG9uZW9mX25hbWUkXyk7XG4iKTsKLX0KLQot
dm9pZCBJbW11dGFibGVQcmltaXRpdmVPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgIiRzZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAi
JG9uZW9mX25hbWUkXyA9IGlucHV0LnJlYWQkY2FwaXRhbGl6ZWRfdHlwZSQoKTtcbiIpOwotfQot
Ci12b2lkIEltbXV0YWJsZVByaW1pdGl2ZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVy
YXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdl
JCkge1xuIgotICAgICIgIG91dHB1dC53cml0ZSRjYXBpdGFsaXplZF90eXBlJChcbiIKLSAgICAi
ICAgICAgJG51bWJlciQsICgkdHlwZSQpKCgkYm94ZWRfdHlwZSQpICRvbmVvZl9uYW1lJF8pKTtc
biIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlUHJpbWl0aXZlT25lb2ZGaWVsZExp
dGVHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRo
YXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5w
cm90b2J1Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAgICIgICAgLmNvbXB1dGUkY2FwaXRhbGl6
ZWRfdHlwZSRTaXplKFxuIgotICAgICIgICAgICAgICRudW1iZXIkLCAoJHR5cGUkKSgoJGJveGVk
X3R5cGUkKSAkb25lb2ZfbmFtZSRfKSk7XG4iCi0gICAgIn1cbiIpOwotfQotCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0KLVJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yOjoKLVJl
cGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29udGV4dCkKLSAgOiBkZXNjcmlwdG9yXyhkZXNj
cmlwdG9yKSwgbWVzc2FnZUJpdEluZGV4XyhtZXNzYWdlQml0SW5kZXgpLAotICAgIGJ1aWxkZXJC
aXRJbmRleF8oYnVpbGRlckJpdEluZGV4KSwgY29udGV4dF8oY29udGV4dCksCi0gICAgbmFtZV9y
ZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpIHsKLSAgU2V0UHJpbWl0aXZlVmFy
aWFibGVzKGRlc2NyaXB0b3IsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4LAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+R2V0RmllbGRHZW5lcmF0b3JJbmZvKGRlc2Ny
aXB0b3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9yZXNvbHZlcl8sICZ2YXJpYWJs
ZXNfKTsKLX0KLQotUmVwZWF0ZWRJbW11dGFibGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0b3I6
OgotflJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yKCkge30KLQot
aW50IFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yOjpHZXROdW1C
aXRzRm9yTWVzc2FnZSgpIGNvbnN0IHsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBSZXBlYXRlZElt
bXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6R2V0TnVtQml0c0ZvckJ1aWxkZXIo
KSBjb25zdCB7Ci0gIHJldHVybiAwOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0
aXZlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW50ZXJmYWNlTWVtYmVycyhpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNh
dGlvbiRqYXZhLnV0aWwuTGlzdDwkYm94ZWRfdHlwZSQ+IGdldCRjYXBpdGFsaXplZF9uYW1lJExp
c3QoKTtcbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRpbnQgZ2V0
JGNhcGl0YWxpemVkX25hbWUkQ291bnQoKTtcbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChw
cmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
IiRkZXByZWNhdGlvbiQkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUkKGludCBpbmRleCk7XG4i
KTsKLX0KLQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJh
dG9yOjoKLUdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlICRmaWVsZF9saXN0X3R5cGUk
ICRuYW1lJF87XG4iKTsKLSAgUHJpbnRFeHRyYUZpZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmludGVy
KTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRp
bC5MaXN0PCRib3hlZF90eXBlJD5cbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJExp
c3QoKSB7XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF87XG4iICAgLy8gbm90ZTogIHVubW9kaWZp
YWJsZSBsaXN0Ci0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNh
dGlvbiRwdWJsaWMgaW50IGdldCRjYXBpdGFsaXplZF9uYW1lJENvdW50KCkge1xuIgotICAgICIg
IHJldHVybiAkbmFtZSRfLnNpemUoKTtcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2ND
b21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUk
KGludCBpbmRleCkge1xuIgotICAgICIgIHJldHVybiAkcmVwZWF0ZWRfZ2V0JChpbmRleCk7XG4i
Ci0gICAgIn1cbiIpOwotCi0gIGlmIChkZXNjcmlwdG9yXy0+b3B0aW9ucygpLnBhY2tlZCgpICYm
Ci0gICAgICBjb250ZXh0Xy0+SGFzR2VuZXJhdGVkTWV0aG9kcyhkZXNjcmlwdG9yXy0+Y29udGFp
bmluZ190eXBlKCkpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJw
cml2YXRlIGludCAkbmFtZSRNZW1vaXplZFNlcmlhbGl6ZWRTaXplID0gLTE7XG4iKTsKLSAgfQot
Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgdm9pZCBlbnN1cmUk
Y2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKSB7XG4iCi0gICAgIiAgaWYgKCEkaXNfbXV0YWJs
ZSQpIHtcbiIKLSAgICAiICAgICRuYW1lJF8gPVxuIgotICAgICIgICAgICAgIGNvbS5nb29nbGUu
cHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxpdGUubXV0YWJsZUNvcHkoJG5hbWUkXyk7XG4iCi0g
ICAgIiAgIH1cbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2
YXRlIHZvaWQgc2V0JGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAk
dHlwZSQgdmFsdWUpIHtcbiIKLSAgICAiJG51bGxfY2hlY2skIgotICAgICIgIGVuc3VyZSRjYXBp
dGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRyZXBlYXRlZF9zZXQkKGluZGV4
LCB2YWx1ZSk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVy
LCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZh
dGUgdm9pZCBhZGQkY2FwaXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4iCi0gICAgIiRu
dWxsX2NoZWNrJCIKLSAgICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtc
biIKLSAgICAiICAkcmVwZWF0ZWRfYWRkJCh2YWx1ZSk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0
ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgdm9pZCBhZGRBbGwkY2FwaXRhbGl6ZWRfbmFtZSQo
XG4iCi0gICAgIiAgICBqYXZhLmxhbmcuSXRlcmFibGU8PyBleHRlbmRzICRib3hlZF90eXBlJD4g
dmFsdWVzKSB7XG4iCi0gICAgIiAgZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7
XG4iCi0gICAgIiAgY29tLmdvb2dsZS5wcm90b2J1Zi5BYnN0cmFjdE1lc3NhZ2VMaXRlLmFkZEFs
bChcbiIKLSAgICAiICAgICAgdmFsdWVzLCAkbmFtZSRfKTtcbiIKLSAgICAifVxuIik7Ci0gIFdy
aXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIGNsZWFyJGNhcGl0YWxpemVkX25hbWUk
KCkge1xuIgotICAgICIgICRuYW1lJF8gPSAkZW1wdHlfbGlzdCQ7XG4iCi0gICAgIn1cbiIpOwot
fQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yOjoK
LUdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEudXRpbC5MaXN0
PCRib3hlZF90eXBlJD5cbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKSB7
XG4iCi0gICAgIiAgcmV0dXJuIGphdmEudXRpbC5Db2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0
KFxuIgotICAgICIgICAgICBpbnN0YW5jZS5nZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkpO1xu
IgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVi
bGljIGludCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRDb3VudCgpIHtcbiIKLSAgICAiICByZXR1cm4g
aW5zdGFuY2UuZ2V0JGNhcGl0YWxpemVkX25hbWUkQ291bnQoKTtcbiIKLSAgICAifVxuIik7Ci0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyAkdHlwZSQgZ2V0JGNh
cGl0YWxpemVkX25hbWUkKGludCBpbmRleCkge1xuIgotICAgICIgIHJldHVybiBpbnN0YW5jZS5n
ZXQkY2FwaXRhbGl6ZWRfbmFtZSQoaW5kZXgpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVs
ZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0JGNhcGl0YWxpemVk
X25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCAkdHlwZSQgdmFsdWUpIHtcbiIKLSAgICAi
ICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNlLnNldCRjYXBpdGFsaXplZF9uYW1l
JChpbmRleCwgdmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsK
LSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgYWRk
JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIgIGNvcHlPbldyaXRl
KCk7XG4iCi0gICAgIiAgaW5zdGFuY2UuYWRkJGNhcGl0YWxpemVkX25hbWUkKHZhbHVlKTtcbiIK
LSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGFkZEFsbCRjYXBpdGFsaXplZF9uYW1l
JChcbiIKLSAgICAiICAgIGphdmEubGFuZy5JdGVyYWJsZTw/IGV4dGVuZHMgJGJveGVkX3R5cGUk
PiB2YWx1ZXMpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNl
LmFkZEFsbCRjYXBpdGFsaXplZF9uYW1lJCh2YWx1ZXMpO1xuIgotICAgICIgIHJldHVybiB0aGlz
O1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3Jp
cHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24k
cHVibGljIEJ1aWxkZXIgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgY29w
eU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5jbGVhciRjYXBpdGFsaXplZF9uYW1lJCgp
O1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBl
YXRlZEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUZpZWxk
QnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgIGNvbnN0IHsK
LSAgLy8gbm9vcCBmb3IgcHJpbWl0aXZlcwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJp
bWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW5pdGlhbGl6YXRpb25Db2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
ICIkbmFtZSRfID0gJGVtcHR5X2xpc3QkO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFi
bGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyQ2xlYXJDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIG5vb3AgZm9yIHByaW1pdGl2ZXMK
LX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZVZpc2l0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRuYW1lJF89IHZpc2l0b3IuJHZpc2l0X3R5
cGVfbGlzdCQoJG5hbWUkXywgb3RoZXIuJG5hbWUkXyk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRl
ZEltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkaW5n
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBub29wIGZvciBwcmltaXRp
dmVzCi19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0
b3I6OgotR2VuZXJhdGVEeW5hbWljTWV0aG9kTWFrZUltbXV0YWJsZUNvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJG5h
bWUkXy5tYWtlSW1tdXRhYmxlKCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVBy
aW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIFRPRE8oZHdlaXMpOiBTY2FuIHRoZSBpbnB1dCBi
dWZmZXIgdG8gY291bnQsIHRoZW4gaW5pdGlhbGl6ZQotICAvLyBhcHByb3ByaWF0ZWx5LgotICAv
LyBUT0RPKGR3ZWlzKTogU2NhbiB0aGUgaW5wdXQgYnVmZmVyIHRvIGNvdW50IGFuZCBlbnN1cmUg
Y2FwYWNpdHkuCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICghJGlzX211
dGFibGUkKSB7XG4iCi0gICAgIiAgJG5hbWUkXyA9XG4iCi0gICAgIiAgICAgIGNvbS5nb29nbGUu
cHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxpdGUubXV0YWJsZUNvcHkoJG5hbWUkXyk7XG4iCi0g
ICAgIn1cbiIKLSAgICAiJHJlcGVhdGVkX2FkZCQoaW5wdXQucmVhZCRjYXBpdGFsaXplZF90eXBl
JCgpKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRMaXRl
R2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0NvZGVGcm9tUGFja2VkKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImludCBs
ZW5ndGggPSBpbnB1dC5yZWFkUmF3VmFyaW50MzIoKTtcbiIKLSAgICAiaW50IGxpbWl0ID0gaW5w
dXQucHVzaExpbWl0KGxlbmd0aCk7XG4iCi0gICAgImlmICghJGlzX211dGFibGUkICYmIGlucHV0
LmdldEJ5dGVzVW50aWxMaW1pdCgpID4gMCkge1xuIik7Ci0KLSAgaW50IGZpeGVkX3NpemUgPSBG
aXhlZFNpemUoR2V0VHlwZShkZXNjcmlwdG9yXykpOwotICBpZiAoZml4ZWRfc2l6ZSA9PSAtMSkg
ewotICAgIC8vIFRPRE8oZHdlaXMpOiBTY2FuIHRoZSBpbnB1dCBidWZmZXIgdG8gY291bnQsIHRo
ZW4gaW5pdGlhbGl6ZQotICAgIC8vIGFwcHJvcHJpYXRlbHkuCi0gICAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAgICIgICRuYW1lJF8gPVxuIgotICAgICAgIiAgICAgIGNvbS5nb29n
bGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxpdGUubXV0YWJsZUNvcHkoJG5hbWUkXyk7XG4i
KTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiAg
ZmluYWwgaW50IGN1cnJlbnRTaXplID0gJG5hbWUkXy5zaXplKCk7XG4iCi0gICAgICAiICAkbmFt
ZSRfID0gJG5hbWUkXy5tdXRhYmxlQ29weVdpdGhDYXBhY2l0eShcbiIKLSAgICAgICIgICAgICBj
dXJyZW50U2l6ZSArIChsZW5ndGgvJGZpeGVkX3NpemUkKSk7XG4iKTsKLSAgfQotCi0gIC8vIFRP
RE8oZHdlaXMpOiBTY2FuIHRoZSBpbnB1dCBidWZmZXIgdG8gY291bnQgYW5kIGVuc3VyZSBjYXBh
Y2l0eS4KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAifVxuIgotICAgICJ3aGls
ZSAoaW5wdXQuZ2V0Qnl0ZXNVbnRpbExpbWl0KCkgPiAwKSB7XG4iCi0gICAgIiAgJHJlcGVhdGVk
X2FkZCQoaW5wdXQucmVhZCRjYXBpdGFsaXplZF90eXBlJCgpKTtcbiIKLSAgICAifVxuIgotICAg
ICJpbnB1dC5wb3BMaW1pdChsaW1pdCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJs
ZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdEb25lQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICJpZiAoJGlzX211dGFibGUkKSB7XG4iCi0gICAgIiAgJG1ha2VfbmFtZV91bm1vZGlm
aWFibGUkO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVByaW1p
dGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChkZXNjcmlwdG9yXy0+b3B0aW9ucygpLnBh
Y2tlZCgpKSB7Ci0gICAgLy8gV2UgaW52b2tlIGdldFNlcmlhbGl6ZWRTaXplIGluIHdyaXRlVG8g
Zm9yIG1lc3NhZ2VzIHRoYXQgaGF2ZSBwYWNrZWQKLSAgICAvLyBmaWVsZHMgaW4gSW1tdXRhYmxl
TWVzc2FnZUdlbmVyYXRvcjo6R2VuZXJhdGVNZXNzYWdlU2VyaWFsaXphdGlvbk1ldGhvZHMuCi0g
ICAgLy8gVGhhdCBtYWtlcyBpdCBzYWZlIHRvIHJlbHkgb24gdGhlIG1lbW9pemVkIHNpemUgaGVy
ZS4KLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImlmIChnZXQkY2FwaXRh
bGl6ZWRfbmFtZSRMaXN0KCkuc2l6ZSgpID4gMCkge1xuIgotICAgICAgIiAgb3V0cHV0LndyaXRl
UmF3VmFyaW50MzIoJHRhZyQpO1xuIgotICAgICAgIiAgb3V0cHV0LndyaXRlUmF3VmFyaW50MzIo
JG5hbWUkTWVtb2l6ZWRTZXJpYWxpemVkU2l6ZSk7XG4iCi0gICAgICAifVxuIgotICAgICAgImZv
ciAoaW50IGkgPSAwOyBpIDwgJG5hbWUkXy5zaXplKCk7IGkrKykge1xuIgotICAgICAgIiAgb3V0
cHV0LndyaXRlJGNhcGl0YWxpemVkX3R5cGUkTm9UYWcoJHJlcGVhdGVkX2dldCQoaSkpO1xuIgot
ICAgICAgIn1cbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgICAiZm9yIChpbnQgaSA9IDA7IGkgPCAkbmFtZSRfLnNpemUoKTsgaSsrKSB7XG4iCi0g
ICAgICAiICBvdXRwdXQud3JpdGUkY2FwaXRhbGl6ZWRfdHlwZSQoJG51bWJlciQsICRyZXBlYXRl
ZF9nZXQkKGkpKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotfQotCi12b2lkIFJlcGVhdGVkSW1t
dXRhYmxlUHJpbWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNp
emVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIntcbiIKLSAgICAiICBpbnQgZGF0YVNpemUgPSAwO1xuIik7Ci0gIHBy
aW50ZXItPkluZGVudCgpOwotCi0gIGlmIChGaXhlZFNpemUoR2V0VHlwZShkZXNjcmlwdG9yXykp
ID09IC0xKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJmb3IgKGlu
dCBpID0gMDsgaSA8ICRuYW1lJF8uc2l6ZSgpOyBpKyspIHtcbiIKLSAgICAgICIgIGRhdGFTaXpl
ICs9IGNvbS5nb29nbGUucHJvdG9idWYuQ29kZWRPdXRwdXRTdHJlYW1cbiIKLSAgICAgICIgICAg
LmNvbXB1dGUkY2FwaXRhbGl6ZWRfdHlwZSRTaXplTm9UYWcoJHJlcGVhdGVkX2dldCQoaSkpO1xu
IgotICAgICAgIn1cbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgICAiZGF0YVNpemUgPSAkZml4ZWRfc2l6ZSQgKiBnZXQkY2FwaXRhbGl6ZWRfbmFt
ZSRMaXN0KCkuc2l6ZSgpO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAgICJz
aXplICs9IGRhdGFTaXplO1xuIik7Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT5vcHRpb25zKCkucGFj
a2VkKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImlmICghZ2V0
JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpLmlzRW1wdHkoKSkge1xuIgotICAgICAgIiAgc2l6ZSAr
PSAkdGFnX3NpemUkO1xuIgotICAgICAgIiAgc2l6ZSArPSBjb20uZ29vZ2xlLnByb3RvYnVmLkNv
ZGVkT3V0cHV0U3RyZWFtXG4iCi0gICAgICAiICAgICAgLmNvbXB1dGVJbnQzMlNpemVOb1RhZyhk
YXRhU2l6ZSk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICJzaXplICs9ICR0YWdfc2l6ZSQgKiBnZXQkY2FwaXRhbGl6
ZWRfbmFtZSRMaXN0KCkuc2l6ZSgpO1xuIik7Ci0gIH0KLQotICAvLyBjYWNoZSB0aGUgZGF0YSBz
aXplIGZvciBwYWNrZWQgZmllbGRzLgotICBpZiAoZGVzY3JpcHRvcl8tPm9wdGlvbnMoKS5wYWNr
ZWQoKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJG5hbWUkTWVt
b2l6ZWRTZXJpYWxpemVkU2l6ZSA9IGRhdGFTaXplO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5P
dXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZElt
bXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUVxdWFsc0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAicmVzdWx0ID0gcmVzdWx0ICYmIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKVxu
IgotICAgICIgICAgLmVxdWFscyhvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkpO1xu
Iik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0
b3I6OgotR2VuZXJhdGVIYXNoQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoZ2V0JGNhcGl0YWxpemVkX25hbWUk
Q291bnQoKSA+IDApIHtcbiIKLSAgICAiICBoYXNoID0gKDM3ICogaGFzaCkgKyAkY29uc3RhbnRf
bmFtZSQ7XG4iCi0gICAgIiAgaGFzaCA9ICg1MyAqIGhhc2gpICsgZ2V0JGNhcGl0YWxpemVkX25h
bWUkTGlzdCgpLmhhc2hDb2RlKCk7XG4iCi0gICAgIn1cbiIpOwotfQotCi1zdHJpbmcgUmVwZWF0
ZWRJbW11dGFibGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0b3I6OkdldEJveGVkVHlwZSgpIGNv
bnN0IHsKLSAgcmV0dXJuIEJveGVkUHJpbWl0aXZlVHlwZU5hbWUoR2V0SmF2YVR5cGUoZGVzY3Jp
cHRvcl8pKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21w
aWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3ByaW1pdGl2
ZV9maWVsZF9saXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3By
aW1pdGl2ZV9maWVsZF9saXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZmJi
Yjk4Y2YzOTgxMmJmMDJmNGNlOWRhYjdkMjM4MDczYTQ1NjguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ph
dmEvamF2YV9wcmltaXRpdmVfZmllbGRfbGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtl
bnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJv
dG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwg
YW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9QUklN
SVRJVkVfRklFTERfTElURV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pB
VkFfUFJJTUlUSVZFX0ZJRUxEX0xJVEVfSF9fCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8
c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmll
bGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotICBuYW1l
c3BhY2UgY29tcGlsZXIgewotICAgIG5hbWVzcGFjZSBqYXZhIHsKLSAgICAgIGNsYXNzIENvbnRl
eHQ7ICAgICAgICAgICAvLyBjb250ZXh0LmgKLSAgICAgIGNsYXNzIENsYXNzTmFtZVJlc29sdmVy
OyAvLyBuYW1lX3Jlc29sdmVyLmgKLSAgICB9Ci0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLWNsYXNzIEltbXV0
YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRvcgotICAgIDogcHVibGljIEltbXV0YWJsZUZp
ZWxkTGl0ZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBJbW11dGFibGVQcmltaXRp
dmVGaWVsZExpdGVHZW5lcmF0b3IoCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICBpbnQgYnVpbGRlckJpdEluZGV4LCBD
b250ZXh0KiBjb250ZXh0KTsKLSAgfkltbXV0YWJsZVByaW1pdGl2ZUZpZWxkTGl0ZUdlbmVyYXRv
cigpOwotCi0gIC8vIGltcGxlbWVudHMgSW1tdXRhYmxlRmllbGRMaXRlR2VuZXJhdG9yIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBpbnQgR2V0TnVtQml0c0Zvck1lc3Nh
Z2UoKSBjb25zdDsKLSAgaW50IEdldE51bUJpdHNGb3JCdWlsZGVyKCkgY29uc3Q7Ci0gIHZvaWQg
R2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAg
dm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2
b2lkIEdlbmVyYXRlSW5pdGlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlVmlzaXRDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVEeW5hbWljTWV0aG9kTWFrZUltbXV0YWJsZUNvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0RvbmVDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRp
b25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlh
bGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVGaWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3Q7Ci0gIHZvaWQgR2VuZXJhdGVIYXNoQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0KLSAgc3RyaW5nIEdldEJveGVkVHlwZSgpIGNvbnN0OwotCi0gcHJvdGVjdGVkOgotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZh
cmlhYmxlc187Ci0gIGNvbnN0IGludCBtZXNzYWdlQml0SW5kZXhfOwotICBjb25zdCBpbnQgYnVp
bGRlckJpdEluZGV4XzsKLSAgQ29udGV4dCogY29udGV4dF87Ci0gIENsYXNzTmFtZVJlc29sdmVy
KiBuYW1lX3Jlc29sdmVyXzsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NP
TlNUUlVDVE9SUyhJbW11dGFibGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0b3IpOwotfTsKLQot
Y2xhc3MgSW1tdXRhYmxlUHJpbWl0aXZlT25lb2ZGaWVsZExpdGVHZW5lcmF0b3IKLSAgICA6IHB1
YmxpYyBJbW11dGFibGVQcmltaXRpdmVGaWVsZExpdGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAg
SW1tdXRhYmxlUHJpbWl0aXZlT25lb2ZGaWVsZExpdGVHZW5lcmF0b3IoCi0gICAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGludCBtZXNzYWdlQml0SW5kZXgsCi0gICAgICBp
bnQgYnVpbGRlckJpdEluZGV4LCBDb250ZXh0KiBjb250ZXh0KTsKLSAgfkltbXV0YWJsZVByaW1p
dGl2ZU9uZW9mRmllbGRMaXRlR2VuZXJhdG9yKCk7Ci0KLSAgdm9pZCBHZW5lcmF0ZU1lbWJlcnMo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRlck1lbWJl
cnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRpbmdD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVZpc2l0Q29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0
aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJp
YWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToK
LSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEltbXV0YWJsZVByaW1pdGl2ZU9u
ZW9mRmllbGRMaXRlR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIFJlcGVhdGVkSW1tdXRhYmxlUHJp
bWl0aXZlRmllbGRMaXRlR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgSW1tdXRhYmxlRmllbGRMaXRl
R2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0
aXZlRmllbGRMaXRlR2VuZXJhdG9yKAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNj
cmlwdG9yLCBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwg
Q29udGV4dCogY29udGV4dCk7Ci0gIHZpcnR1YWwgflJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZl
RmllbGRMaXRlR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBJbW11dGFibGVGaWVsZExp
dGVHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGludCBH
ZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNvbnN0OwotICBpbnQgR2V0TnVtQml0c0ZvckJ1aWxkZXIo
KSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUludGVyZmFjZU1lbWJlcnMoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRlckNsZWFyQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVWaXNpdENvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQnVpbGRpbmdDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUR5bmFtaWNNZXRob2RNYWtl
SW1tdXRhYmxlQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVQYXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVQYXJzaW5nQ29kZUZyb21QYWNrZWQoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2
b2lkIEdlbmVyYXRlUGFyc2luZ0RvbmVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsK
LSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRXF1YWxzQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVIYXNoQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSAgc3RyaW5nIEdldEJveGVkVHlwZSgpIGNv
bnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsK
LSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotICBjb25zdCBpbnQgbWVzc2FnZUJp
dEluZGV4XzsKLSAgY29uc3QgaW50IGJ1aWxkZXJCaXRJbmRleF87Ci0gIENvbnRleHQqIGNvbnRl
eHRfOwotICBDbGFzc05hbWVSZXNvbHZlciogbmFtZV9yZXNvbHZlcl87Ci0KLSAgR09PR0xFX0RJ
U0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlcGVhdGVkSW1tdXRhYmxlUHJpbWl0aXZlRmllbGRM
aXRlR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3Bh
Y2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2Ug
Z29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX1BSSU1JVElW
RV9GSUVMRF9MSVRFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmEvamF2YV9zZXJ2aWNlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEv
amF2YV9zZXJ2aWNlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWJmYzEyZDFi
MzA2YzExYzhkODgwODMxMDFmNzM4YTUzY2ZjYmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2ph
dmFfc2VydmljZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ3MiArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAo
S2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVz
aWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3NlcnZpY2UuaD4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfY29udGV4dC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX25hbWVfcmVz
b2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ug
amF2YSB7Ci0KLVNlcnZpY2VHZW5lcmF0b3I6OlNlcnZpY2VHZW5lcmF0b3IoY29uc3QgU2Vydmlj
ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpCi0gIDogZGVzY3JpcHRvcl8oZGVzY3JpcHRvcikge30K
LQotU2VydmljZUdlbmVyYXRvcjo6flNlcnZpY2VHZW5lcmF0b3IoKSB7fQotCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci1JbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9yOjpJbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9y
KAotICAgIGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBDb250ZXh0KiBjb250
ZXh0KQotICAgIDogU2VydmljZUdlbmVyYXRvcihkZXNjcmlwdG9yKSwgY29udGV4dF8oY29udGV4
dCksCi0gICAgbmFtZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpIHt9Ci0K
LUltbXV0YWJsZVNlcnZpY2VHZW5lcmF0b3I6On5JbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9yKCkg
e30KLQotdm9pZCBJbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9yOjpHZW5lcmF0ZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgewotICBib29sIGlzX293bl9maWxlID0KLSAgICBNdWx0aXBsZUphdmFGaWxl
cyhkZXNjcmlwdG9yXy0+ZmlsZSgpLCAvKiBpbW11dGFibGUgPSAqLyB0cnVlKTsKLSAgV3JpdGVT
ZXJ2aWNlRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50
KAotICAgICJwdWJsaWMgJHN0YXRpYyQgYWJzdHJhY3QgY2xhc3MgJGNsYXNzbmFtZSRcbiIKLSAg
ICAiICAgIGltcGxlbWVudHMgY29tLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlIHtcbiIsCi0gICAg
InN0YXRpYyIsIGlzX293bl9maWxlID8gIiIgOiAic3RhdGljIiwKLSAgICAiY2xhc3NuYW1lIiwg
ZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIHByaW50ZXIt
PlByaW50KAotICAgICJwcm90ZWN0ZWQgJGNsYXNzbmFtZSQoKSB7fVxuXG4iLAotICAgICJjbGFz
c25hbWUiLCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLQotICBHZW5lcmF0ZUludGVyZmFjZShwcmlu
dGVyKTsKLQotICBHZW5lcmF0ZU5ld1JlZmxlY3RpdmVTZXJ2aWNlTWV0aG9kKHByaW50ZXIpOwot
ICBHZW5lcmF0ZU5ld1JlZmxlY3RpdmVCbG9ja2luZ1NlcnZpY2VNZXRob2QocHJpbnRlcik7Ci0K
LSAgR2VuZXJhdGVBYnN0cmFjdE1ldGhvZHMocHJpbnRlcik7Ci0KLSAgLy8gR2VuZXJhdGUgZ2V0
RGVzY3JpcHRvcigpIGFuZCBnZXREZXNjcmlwdG9yRm9yVHlwZSgpLgotICBwcmludGVyLT5Qcmlu
dCgKLSAgICAicHVibGljIHN0YXRpYyBmaW5hbFxuIgotICAgICIgICAgY29tLmdvb2dsZS5wcm90
b2J1Zi5EZXNjcmlwdG9ycy5TZXJ2aWNlRGVzY3JpcHRvclxuIgotICAgICIgICAgZ2V0RGVzY3Jp
cHRvcigpIHtcbiIKLSAgICAiICByZXR1cm4gJGZpbGUkLmdldERlc2NyaXB0b3IoKS5nZXRTZXJ2
aWNlcygpLmdldCgkaW5kZXgkKTtcbiIKLSAgICAifVxuIiwKLSAgICAiZmlsZSIsIG5hbWVfcmVz
b2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoZGVzY3JpcHRvcl8tPmZpbGUoKSksCi0gICAg
ImluZGV4IiwgU2ltcGxlSXRvYShkZXNjcmlwdG9yXy0+aW5kZXgoKSkpOwotICBHZW5lcmF0ZUdl
dERlc2NyaXB0b3JGb3JUeXBlKHByaW50ZXIpOwotCi0gIC8vIEdlbmVyYXRlIG1vcmUgc3R1ZmYu
Ci0gIEdlbmVyYXRlQ2FsbE1ldGhvZChwcmludGVyKTsKLSAgR2VuZXJhdGVHZXRQcm90b3R5cGUo
UkVRVUVTVCwgcHJpbnRlcik7Ci0gIEdlbmVyYXRlR2V0UHJvdG90eXBlKFJFU1BPTlNFLCBwcmlu
dGVyKTsKLSAgR2VuZXJhdGVTdHViKHByaW50ZXIpOwotICBHZW5lcmF0ZUJsb2NraW5nU3R1Yihw
cmludGVyKTsKLQotICAvLyBBZGQgYW4gaW5zZXJ0aW9uIHBvaW50LgotICBwcmludGVyLT5Qcmlu
dCgKLSAgICAiXG4iCi0gICAgIi8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29w
ZTokZnVsbF9uYW1lJClcbiIsCi0gICAgImZ1bGxfbmFtZSIsIGRlc2NyaXB0b3JfLT5mdWxsX25h
bWUoKSk7Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgifVxuXG4i
KTsKLX0KLQotdm9pZCBJbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9yOjpHZW5lcmF0ZUdldERlc2Ny
aXB0b3JGb3JUeXBlKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlBy
aW50KAotICAgICJwdWJsaWMgZmluYWwgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5T
ZXJ2aWNlRGVzY3JpcHRvclxuIgotICAgICIgICAgZ2V0RGVzY3JpcHRvckZvclR5cGUoKSB7XG4i
Ci0gICAgIiAgcmV0dXJuIGdldERlc2NyaXB0b3IoKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZv
aWQgSW1tdXRhYmxlU2VydmljZUdlbmVyYXRvcjo6R2VuZXJhdGVJbnRlcmZhY2UoaW86OlByaW50
ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoInB1YmxpYyBpbnRlcmZhY2UgSW50ZXJm
YWNlIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLSAgR2VuZXJhdGVBYnN0cmFjdE1ldGhv
ZHMocHJpbnRlcik7Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1c
blxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlU2VydmljZUdlbmVyYXRvcjo6R2VuZXJhdGVOZXdS
ZWZsZWN0aXZlU2VydmljZU1ldGhvZCgKLSAgICBpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBw
cmludGVyLT5QcmludCgKLSAgICAicHVibGljIHN0YXRpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlNl
cnZpY2UgbmV3UmVmbGVjdGl2ZVNlcnZpY2UoXG4iCi0gICAgIiAgICBmaW5hbCBJbnRlcmZhY2Ug
aW1wbCkge1xuIgotICAgICIgIHJldHVybiBuZXcgJGNsYXNzbmFtZSQoKSB7XG4iLAotICAgICJj
bGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0g
IHByaW50ZXItPkluZGVudCgpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8t
Pm1ldGhvZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRo
b2QgPSBkZXNjcmlwdG9yXy0+bWV0aG9kKGkpOwotICAgIHByaW50ZXItPlByaW50KCJAamF2YS5s
YW5nLk92ZXJyaWRlXG4iKTsKLSAgICBHZW5lcmF0ZU1ldGhvZFNpZ25hdHVyZShwcmludGVyLCBt
ZXRob2QsIElTX0NPTkNSRVRFKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICIge1xuIgot
ICAgICAgIiAgaW1wbC4kbWV0aG9kJChjb250cm9sbGVyLCByZXF1ZXN0LCBkb25lKTtcbiIKLSAg
ICAgICJ9XG5cbiIsCi0gICAgICAibWV0aG9kIiwgVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShtZXRo
b2QpKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn07
XG4iKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgifVxuXG4iKTsK
LX0KLQotdm9pZCBJbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9yOjpHZW5lcmF0ZU5ld1JlZmxlY3Rp
dmVCbG9ja2luZ1NlcnZpY2VNZXRob2QoCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAg
cHJpbnRlci0+UHJpbnQoCi0gICAgInB1YmxpYyBzdGF0aWMgY29tLmdvb2dsZS5wcm90b2J1Zi5C
bG9ja2luZ1NlcnZpY2VcbiIKLSAgICAiICAgIG5ld1JlZmxlY3RpdmVCbG9ja2luZ1NlcnZpY2Uo
ZmluYWwgQmxvY2tpbmdJbnRlcmZhY2UgaW1wbCkge1xuIgotICAgICIgIHJldHVybiBuZXcgY29t
Lmdvb2dsZS5wcm90b2J1Zi5CbG9ja2luZ1NlcnZpY2UoKSB7XG4iKTsKLSAgcHJpbnRlci0+SW5k
ZW50KCk7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIEdlbmVyYXRlR2V0RGVzY3JpcHRvckZv
clR5cGUocHJpbnRlcik7Ci0KLSAgR2VuZXJhdGVDYWxsQmxvY2tpbmdNZXRob2QocHJpbnRlcik7
Ci0gIEdlbmVyYXRlR2V0UHJvdG90eXBlKFJFUVVFU1QsIHByaW50ZXIpOwotICBHZW5lcmF0ZUdl
dFByb3RvdHlwZShSRVNQT05TRSwgcHJpbnRlcik7Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwot
ICBwcmludGVyLT5QcmludCgifTtcbiIpOwotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50
ZXItPlByaW50KCJ9XG5cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVNlcnZpY2VHZW5lcmF0b3I6
OkdlbmVyYXRlQWJzdHJhY3RNZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm1ldGhvZF9jb3VudCgpOyBpKyspIHsKLSAgICBj
b25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2QgPSBkZXNjcmlwdG9yXy0+bWV0aG9kKGkpOwot
ICAgIFdyaXRlTWV0aG9kRG9jQ29tbWVudChwcmludGVyLCBtZXRob2QpOwotICAgIEdlbmVyYXRl
TWV0aG9kU2lnbmF0dXJlKHByaW50ZXIsIG1ldGhvZCwgSVNfQUJTVFJBQ1QpOwotICAgIHByaW50
ZXItPlByaW50KCI7XG5cbiIpOwotICB9Ci19Ci0KLXZvaWQgSW1tdXRhYmxlU2VydmljZUdlbmVy
YXRvcjo6R2VuZXJhdGVDYWxsTWV0aG9kKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50
ZXItPlByaW50KAotICAgICJcbiIKLSAgICAicHVibGljIGZpbmFsIHZvaWQgY2FsbE1ldGhvZChc
biIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvcnMuTWV0aG9kRGVzY3Jp
cHRvciBtZXRob2QsXG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLlJwY0NvbnRyb2xs
ZXIgY29udHJvbGxlcixcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuTWVzc2FnZSBy
ZXF1ZXN0LFxuIgotICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5ScGNDYWxsYmFjazxcbiIK
LSAgICAiICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlPiBkb25lKSB7XG4iCi0gICAg
IiAgaWYgKG1ldGhvZC5nZXRTZXJ2aWNlKCkgIT0gZ2V0RGVzY3JpcHRvcigpKSB7XG4iCi0gICAg
IiAgICB0aHJvdyBuZXcgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihcbiIKLSAg
ICAiICAgICAgXCJTZXJ2aWNlLmNhbGxNZXRob2QoKSBnaXZlbiBtZXRob2QgZGVzY3JpcHRvciBm
b3Igd3JvbmcgXCIgK1xuIgotICAgICIgICAgICBcInNlcnZpY2UgdHlwZS5cIik7XG4iCi0gICAg
IiAgfVxuIgotICAgICIgIHN3aXRjaChtZXRob2QuZ2V0SW5kZXgoKSkge1xuIik7Ci0gIHByaW50
ZXItPkluZGVudCgpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBmb3IgKGludCBpID0gMDsg
aSA8IGRlc2NyaXB0b3JfLT5tZXRob2RfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgTWV0aG9k
RGVzY3JpcHRvciogbWV0aG9kID0gZGVzY3JpcHRvcl8tPm1ldGhvZChpKTsKLSAgICBtYXA8c3Ry
aW5nLCBzdHJpbmc+IHZhcnM7Ci0gICAgdmFyc1siaW5kZXgiXSA9IFNpbXBsZUl0b2EoaSk7Ci0g
ICAgdmFyc1sibWV0aG9kIl0gPSBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKG1ldGhvZCk7Ci0gICAg
dmFyc1siaW5wdXQiXSA9IG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoCi0g
ICAgICAgIG1ldGhvZC0+aW5wdXRfdHlwZSgpKTsKLSAgICB2YXJzWyJvdXRwdXQiXSA9IG5hbWVf
cmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoCi0gICAgICAgIG1ldGhvZC0+b3V0cHV0
X3R5cGUoKSk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICJjYXNlICRpbmRleCQ6
XG4iCi0gICAgICAiICB0aGlzLiRtZXRob2QkKGNvbnRyb2xsZXIsICgkaW5wdXQkKXJlcXVlc3Qs
XG4iCi0gICAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuUnBjVXRpbC48JG91dHB1dCQ+c3Bl
Y2lhbGl6ZUNhbGxiYWNrKFxuIgotICAgICAgIiAgICAgIGRvbmUpKTtcbiIKLSAgICAgICIgIHJl
dHVybjtcbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgImRlZmF1bHQ6XG4iCi0g
ICAgIiAgdGhyb3cgbmV3IGphdmEubGFuZy5Bc3NlcnRpb25FcnJvcihcIkNhbid0IGdldCBoZXJl
LlwiKTtcbiIpOwotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgp
OwotCi0gIHByaW50ZXItPlByaW50KAotICAgICIgIH1cbiIKLSAgICAifVxuIgotICAgICJcbiIp
OwotfQotCi12b2lkIEltbXV0YWJsZVNlcnZpY2VHZW5lcmF0b3I6OkdlbmVyYXRlQ2FsbEJsb2Nr
aW5nTWV0aG9kKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50
KAotICAgICJcbiIKLSAgICAicHVibGljIGZpbmFsIGNvbS5nb29nbGUucHJvdG9idWYuTWVzc2Fn
ZSBjYWxsQmxvY2tpbmdNZXRob2QoXG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkRl
c2NyaXB0b3JzLk1ldGhvZERlc2NyaXB0b3IgbWV0aG9kLFxuIgotICAgICIgICAgY29tLmdvb2ds
ZS5wcm90b2J1Zi5ScGNDb250cm9sbGVyIGNvbnRyb2xsZXIsXG4iCi0gICAgIiAgICBjb20uZ29v
Z2xlLnByb3RvYnVmLk1lc3NhZ2UgcmVxdWVzdClcbiIKLSAgICAiICAgIHRocm93cyBjb20uZ29v
Z2xlLnByb3RvYnVmLlNlcnZpY2VFeGNlcHRpb24ge1xuIgotICAgICIgIGlmIChtZXRob2QuZ2V0
U2VydmljZSgpICE9IGdldERlc2NyaXB0b3IoKSkge1xuIgotICAgICIgICAgdGhyb3cgbmV3IGph
dmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oXG4iCi0gICAgIiAgICAgIFwiU2Vydmlj
ZS5jYWxsQmxvY2tpbmdNZXRob2QoKSBnaXZlbiBtZXRob2QgZGVzY3JpcHRvciBmb3IgXCIgK1xu
IgotICAgICIgICAgICBcIndyb25nIHNlcnZpY2UgdHlwZS5cIik7XG4iCi0gICAgIiAgfVxuIgot
ICAgICIgIHN3aXRjaChtZXRob2QuZ2V0SW5kZXgoKSkge1xuIik7Ci0gIHByaW50ZXItPkluZGVu
dCgpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2Ny
aXB0b3JfLT5tZXRob2RfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgTWV0aG9kRGVzY3JpcHRv
ciogbWV0aG9kID0gZGVzY3JpcHRvcl8tPm1ldGhvZChpKTsKLSAgICBtYXA8c3RyaW5nLCBzdHJp
bmc+IHZhcnM7Ci0gICAgdmFyc1siaW5kZXgiXSA9IFNpbXBsZUl0b2EoaSk7Ci0gICAgdmFyc1si
bWV0aG9kIl0gPSBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKG1ldGhvZCk7Ci0gICAgdmFyc1siaW5w
dXQiXSA9IG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUoCi0gICAgICAgIG1l
dGhvZC0+aW5wdXRfdHlwZSgpKTsKLSAgICB2YXJzWyJvdXRwdXQiXSA9IG5hbWVfcmVzb2x2ZXJf
LT5HZXRJbW11dGFibGVDbGFzc05hbWUoCi0gICAgICAgIG1ldGhvZC0+b3V0cHV0X3R5cGUoKSk7
Ci0gICAgcHJpbnRlci0+UHJpbnQodmFycywKLSAgICAgICJjYXNlICRpbmRleCQ6XG4iCi0gICAg
ICAiICByZXR1cm4gaW1wbC4kbWV0aG9kJChjb250cm9sbGVyLCAoJGlucHV0JClyZXF1ZXN0KTtc
biIpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgImRlZmF1bHQ6XG4iCi0gICAgIiAg
dGhyb3cgbmV3IGphdmEubGFuZy5Bc3NlcnRpb25FcnJvcihcIkNhbid0IGdldCBoZXJlLlwiKTtc
biIpOwotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotCi0g
IHByaW50ZXItPlByaW50KAotICAgICIgIH1cbiIKLSAgICAifVxuIgotICAgICJcbiIpOwotfQot
Ci12b2lkIEltbXV0YWJsZVNlcnZpY2VHZW5lcmF0b3I6OkdlbmVyYXRlR2V0UHJvdG90eXBlKFJl
cXVlc3RPclJlc3BvbnNlIHdoaWNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvKgotICAgKiBUT0RPKGNwb3Zp
cmspOiBUaGUgZXhjZXB0aW9uIG1lc3NhZ2Ugc2F5cyAiU2VydmljZS5mb28iIHdoZW4gaXQgbWF5
IGJlCi0gICAqICJCbG9ja2luZ1NlcnZpY2UuZm9vLiIgIENvbnNpZGVyIGZpeGluZy4KLSAgICov
Ci0gIHByaW50ZXItPlByaW50KAotICAgICJwdWJsaWMgZmluYWwgY29tLmdvb2dsZS5wcm90b2J1
Zi5NZXNzYWdlXG4iCi0gICAgIiAgICBnZXQkcmVxdWVzdF9vcl9yZXNwb25zZSRQcm90b3R5cGUo
XG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLk1ldGhvZERlc2Ny
aXB0b3IgbWV0aG9kKSB7XG4iCi0gICAgIiAgaWYgKG1ldGhvZC5nZXRTZXJ2aWNlKCkgIT0gZ2V0
RGVzY3JpcHRvcigpKSB7XG4iCi0gICAgIiAgICB0aHJvdyBuZXcgamF2YS5sYW5nLklsbGVnYWxB
cmd1bWVudEV4Y2VwdGlvbihcbiIKLSAgICAiICAgICAgXCJTZXJ2aWNlLmdldCRyZXF1ZXN0X29y
X3Jlc3BvbnNlJFByb3RvdHlwZSgpIGdpdmVuIG1ldGhvZCBcIiArXG4iCi0gICAgIiAgICAgIFwi
ZGVzY3JpcHRvciBmb3Igd3Jvbmcgc2VydmljZSB0eXBlLlwiKTtcbiIKLSAgICAiICB9XG4iCi0g
ICAgIiAgc3dpdGNoKG1ldGhvZC5nZXRJbmRleCgpKSB7XG4iLAotICAgICJyZXF1ZXN0X29yX3Jl
c3BvbnNlIiwgKHdoaWNoID09IFJFUVVFU1QpID8gIlJlcXVlc3QiIDogIlJlc3BvbnNlIik7Ci0g
IHByaW50ZXItPkluZGVudCgpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBmb3IgKGludCBp
ID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5tZXRob2RfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3Qg
TWV0aG9kRGVzY3JpcHRvciogbWV0aG9kID0gZGVzY3JpcHRvcl8tPm1ldGhvZChpKTsKLSAgICBt
YXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gICAgdmFyc1siaW5kZXgiXSA9IFNpbXBsZUl0b2Eo
aSk7Ci0gICAgdmFyc1sidHlwZSJdID0gbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNz
TmFtZSgKLSAgICAgICh3aGljaCA9PSBSRVFVRVNUKSA/IG1ldGhvZC0+aW5wdXRfdHlwZSgpIDog
bWV0aG9kLT5vdXRwdXRfdHlwZSgpKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAg
ImNhc2UgJGluZGV4JDpcbiIKLSAgICAgICIgIHJldHVybiAkdHlwZSQuZ2V0RGVmYXVsdEluc3Rh
bmNlKCk7XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICJkZWZhdWx0OlxuIgot
ICAgICIgIHRocm93IG5ldyBqYXZhLmxhbmcuQXNzZXJ0aW9uRXJyb3IoXCJDYW4ndCBnZXQgaGVy
ZS5cIik7XG4iKTsKLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPk91dGRlbnQo
KTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiICB9XG4iCi0gICAgIn1cbiIKLSAgICAiXG4i
KTsKLX0KLQotdm9pZCBJbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9yOjpHZW5lcmF0ZVN0dWIoaW86
OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInB1YmxpYyBzdGF0
aWMgU3R1YiBuZXdTdHViKFxuIgotICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5ScGNDaGFu
bmVsIGNoYW5uZWwpIHtcbiIKLSAgICAiICByZXR1cm4gbmV3IFN0dWIoY2hhbm5lbCk7XG4iCi0g
ICAgIn1cbiIKLSAgICAiXG4iCi0gICAgInB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgU3R1YiBl
eHRlbmRzICRjbGFzc25hbWUkIGltcGxlbWVudHMgSW50ZXJmYWNlIHsiCi0gICAgIlxuIiwKLSAg
ICAiY2xhc3NuYW1lIiwgbmFtZV9yZXNvbHZlcl8tPkdldEltbXV0YWJsZUNsYXNzTmFtZShkZXNj
cmlwdG9yXykpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBwcmludGVyLT5QcmludCgKLSAg
ICAicHJpdmF0ZSBTdHViKGNvbS5nb29nbGUucHJvdG9idWYuUnBjQ2hhbm5lbCBjaGFubmVsKSB7
XG4iCi0gICAgIiAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcbiIKLSAgICAifVxuIgotICAgICJc
biIKLSAgICAicHJpdmF0ZSBmaW5hbCBjb20uZ29vZ2xlLnByb3RvYnVmLlJwY0NoYW5uZWwgY2hh
bm5lbDtcbiIKLSAgICAiXG4iCi0gICAgInB1YmxpYyBjb20uZ29vZ2xlLnByb3RvYnVmLlJwY0No
YW5uZWwgZ2V0Q2hhbm5lbCgpIHtcbiIKLSAgICAiICByZXR1cm4gY2hhbm5lbDtcbiIKLSAgICAi
fVxuIik7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+bWV0aG9kX2NvdW50
KCk7IGkrKykgewotICAgIGNvbnN0IE1ldGhvZERlc2NyaXB0b3IqIG1ldGhvZCA9IGRlc2NyaXB0
b3JfLT5tZXRob2QoaSk7Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gICAgR2VuZXJhdGVN
ZXRob2RTaWduYXR1cmUocHJpbnRlciwgbWV0aG9kLCBJU19DT05DUkVURSk7Ci0gICAgcHJpbnRl
ci0+UHJpbnQoIiB7XG4iKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLQotICAgIG1hcDxzdHJp
bmcsIHN0cmluZz4gdmFyczsKLSAgICB2YXJzWyJpbmRleCJdID0gU2ltcGxlSXRvYShpKTsKLSAg
ICB2YXJzWyJvdXRwdXQiXSA9IG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUo
Ci0gICAgICAgIG1ldGhvZC0+b3V0cHV0X3R5cGUoKSk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFy
cywKLSAgICAgICJjaGFubmVsLmNhbGxNZXRob2QoXG4iCi0gICAgICAiICBnZXREZXNjcmlwdG9y
KCkuZ2V0TWV0aG9kcygpLmdldCgkaW5kZXgkKSxcbiIKLSAgICAgICIgIGNvbnRyb2xsZXIsXG4i
Ci0gICAgICAiICByZXF1ZXN0LFxuIgotICAgICAgIiAgJG91dHB1dCQuZ2V0RGVmYXVsdEluc3Rh
bmNlKCksXG4iCi0gICAgICAiICBjb20uZ29vZ2xlLnByb3RvYnVmLlJwY1V0aWwuZ2VuZXJhbGl6
ZUNhbGxiYWNrKFxuIgotICAgICAgIiAgICBkb25lLFxuIgotICAgICAgIiAgICAkb3V0cHV0JC5j
bGFzcyxcbiIKLSAgICAgICIgICAgJG91dHB1dCQuZ2V0RGVmYXVsdEluc3RhbmNlKCkpKTtcbiIp
OwotCi0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KCJ9XG4iKTsK
LSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIn1c
biIKLSAgICAiXG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9yOjpHZW5l
cmF0ZUJsb2NraW5nU3R1Yihpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5Qcmlu
dCgKLSAgICAicHVibGljIHN0YXRpYyBCbG9ja2luZ0ludGVyZmFjZSBuZXdCbG9ja2luZ1N0dWIo
XG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkJsb2NraW5nUnBjQ2hhbm5lbCBjaGFu
bmVsKSB7XG4iCi0gICAgIiAgcmV0dXJuIG5ldyBCbG9ja2luZ1N0dWIoY2hhbm5lbCk7XG4iCi0g
ICAgIn1cbiIKLSAgICAiXG4iKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAicHVibGljIGlu
dGVyZmFjZSBCbG9ja2luZ0ludGVyZmFjZSB7Iik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm1ldGhvZF9jb3VudCgpOyBpKyspIHsK
LSAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2QgPSBkZXNjcmlwdG9yXy0+bWV0aG9k
KGkpOwotICAgIEdlbmVyYXRlQmxvY2tpbmdNZXRob2RTaWduYXR1cmUocHJpbnRlciwgbWV0aG9k
KTsKLSAgICBwcmludGVyLT5QcmludCgiO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5PdXRkZW50
KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICJ9XG4iCi0gICAgIlxuIik7Ci0KLSAgcHJpbnRl
ci0+UHJpbnQoCi0gICAgInByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEJsb2NraW5nU3R1YiBp
bXBsZW1lbnRzIEJsb2NraW5nSW50ZXJmYWNlIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsK
LQotICBwcmludGVyLT5QcmludCgKLSAgICAicHJpdmF0ZSBCbG9ja2luZ1N0dWIoY29tLmdvb2ds
ZS5wcm90b2J1Zi5CbG9ja2luZ1JwY0NoYW5uZWwgY2hhbm5lbCkge1xuIgotICAgICIgIHRoaXMu
Y2hhbm5lbCA9IGNoYW5uZWw7XG4iCi0gICAgIn1cbiIKLSAgICAiXG4iCi0gICAgInByaXZhdGUg
ZmluYWwgY29tLmdvb2dsZS5wcm90b2J1Zi5CbG9ja2luZ1JwY0NoYW5uZWwgY2hhbm5lbDtcbiIp
OwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm1ldGhvZF9jb3VudCgpOyBp
KyspIHsKLSAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2QgPSBkZXNjcmlwdG9yXy0+
bWV0aG9kKGkpOwotICAgIEdlbmVyYXRlQmxvY2tpbmdNZXRob2RTaWduYXR1cmUocHJpbnRlciwg
bWV0aG9kKTsKLSAgICBwcmludGVyLT5QcmludCgiIHtcbiIpOwotICAgIHByaW50ZXItPkluZGVu
dCgpOwotCi0gICAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICAgIHZhcnNbImluZGV4Il0g
PSBTaW1wbGVJdG9hKGkpOwotICAgIHZhcnNbIm91dHB1dCJdID0gbmFtZV9yZXNvbHZlcl8tPkdl
dEltbXV0YWJsZUNsYXNzTmFtZSgKLSAgICAgICAgbWV0aG9kLT5vdXRwdXRfdHlwZSgpKTsKLSAg
ICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgInJldHVybiAoJG91dHB1dCQpIGNoYW5uZWwu
Y2FsbEJsb2NraW5nTWV0aG9kKFxuIgotICAgICAgIiAgZ2V0RGVzY3JpcHRvcigpLmdldE1ldGhv
ZHMoKS5nZXQoJGluZGV4JCksXG4iCi0gICAgICAiICBjb250cm9sbGVyLFxuIgotICAgICAgIiAg
cmVxdWVzdCxcbiIKLSAgICAgICIgICRvdXRwdXQkLmdldERlZmF1bHRJbnN0YW5jZSgpKTtcbiIp
OwotCi0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KAotICAgICAg
In1cbiIKLSAgICAgICJcbiIpOwotICB9Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmlu
dGVyLT5QcmludCgifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlU2VydmljZUdlbmVyYXRvcjo6
R2VuZXJhdGVNZXRob2RTaWduYXR1cmUoaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1ldGhvZERlc2NyaXB0
b3IqIG1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSXNBYnN0cmFjdCBpc19hYnN0cmFjdCkgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7
Ci0gIHZhcnNbIm5hbWUiXSA9IFVuZGVyc2NvcmVzVG9DYW1lbENhc2UobWV0aG9kKTsKLSAgdmFy
c1siaW5wdXQiXSA9IG5hbWVfcmVzb2x2ZXJfLT5HZXRJbW11dGFibGVDbGFzc05hbWUobWV0aG9k
LT5pbnB1dF90eXBlKCkpOwotICB2YXJzWyJvdXRwdXQiXSA9IG5hbWVfcmVzb2x2ZXJfLT5HZXRJ
bW11dGFibGVDbGFzc05hbWUobWV0aG9kLT5vdXRwdXRfdHlwZSgpKTsKLSAgdmFyc1siYWJzdHJh
Y3QiXSA9IChpc19hYnN0cmFjdCA9PSBJU19BQlNUUkFDVCkgPyAiYWJzdHJhY3QiIDogIiI7Ci0g
IHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgInB1YmxpYyAkYWJzdHJhY3QkIHZvaWQgJG5hbWUk
KFxuIgotICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5ScGNDb250cm9sbGVyIGNvbnRyb2xs
ZXIsXG4iCi0gICAgIiAgICAkaW5wdXQkIHJlcXVlc3QsXG4iCi0gICAgIiAgICBjb20uZ29vZ2xl
LnByb3RvYnVmLlJwY0NhbGxiYWNrPCRvdXRwdXQkPiBkb25lKSIpOwotfQotCi12b2lkIEltbXV0
YWJsZVNlcnZpY2VHZW5lcmF0b3I6OkdlbmVyYXRlQmxvY2tpbmdNZXRob2RTaWduYXR1cmUoCi0g
ICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogbWV0
aG9kKSB7Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAgdmFyc1sibWV0aG9kIl0gPSBV
bmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKG1ldGhvZCk7Ci0gIHZhcnNbImlucHV0Il0gPSBuYW1lX3Jl
c29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKG1ldGhvZC0+aW5wdXRfdHlwZSgpKTsKLSAg
dmFyc1sib3V0cHV0Il0gPSBuYW1lX3Jlc29sdmVyXy0+R2V0SW1tdXRhYmxlQ2xhc3NOYW1lKG1l
dGhvZC0+b3V0cHV0X3R5cGUoKSk7Ci0gIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgIlxuIgot
ICAgICJwdWJsaWMgJG91dHB1dCQgJG1ldGhvZCQoXG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnBy
b3RvYnVmLlJwY0NvbnRyb2xsZXIgY29udHJvbGxlcixcbiIKLSAgICAiICAgICRpbnB1dCQgcmVx
dWVzdClcbiIKLSAgICAiICAgIHRocm93cyBjb20uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VFeGNl
cHRpb24iKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21w
aWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3NlcnZpY2Uu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2VydmljZS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzA3ZTgyMWE5ZjJmYjYwNzY2YzgzNDJiMzY5Mjkz
MzJhNzNhMTM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2VydmljZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFz
ZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hl
bWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZf
Q09NUElMRVJfSkFWQV9TRVJWSUNFX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfSkFWQV9TRVJWSUNFX0hfXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLSAgbmFtZXNwYWNlIGNvbXBpbGVyIHsKLSAgICBuYW1lc3BhY2UgamF2YSB7Ci0g
ICAgICBjbGFzcyBDb250ZXh0OyAgICAgICAgICAgIC8vIGNvbnRleHQuaAotICAgICAgY2xhc3Mg
Q2xhc3NOYW1lUmVzb2x2ZXI7ICAvLyBuYW1lX3Jlc29sdmVyLmgKLSAgICB9Ci0gIH0KLSAgbmFt
ZXNwYWNlIGlvIHsKLSAgICBjbGFzcyBQcmludGVyOyAgICAgICAgICAgICAgLy8gcHJpbnRlci5o
Ci0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1u
YW1lc3BhY2UgamF2YSB7Ci0KLWNsYXNzIFNlcnZpY2VHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAg
ZXhwbGljaXQgU2VydmljZUdlbmVyYXRvcihjb25zdCBTZXJ2aWNlRGVzY3JpcHRvciogZGVzY3Jp
cHRvcik7Ci0gIHZpcnR1YWwgflNlcnZpY2VHZW5lcmF0b3IoKTsKLQotICB2aXJ0dWFsIHZvaWQg
R2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIpID0gMDsKLQotICBlbnVtIFJlcXVlc3RPclJl
c3BvbnNlIHsgUkVRVUVTVCwgUkVTUE9OU0UgfTsKLSAgZW51bSBJc0Fic3RyYWN0IHsgSVNfQUJT
VFJBQ1QsIElTX0NPTkNSRVRFIH07Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGNvbnN0IFNlcnZpY2VEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yXzsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklM
X0NPTlNUUlVDVE9SUyhTZXJ2aWNlR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIEltbXV0YWJsZVNl
cnZpY2VHZW5lcmF0b3IgOiBwdWJsaWMgU2VydmljZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBl
eHBsaWNpdCBJbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9yKGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRl
eHQqIGNvbnRleHQpOwotICB2aXJ0dWFsIH5JbW11dGFibGVTZXJ2aWNlR2VuZXJhdG9yKCk7Ci0K
LSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotIHByaXZh
dGU6Ci0KLSAgLy8gR2VuZXJhdGUgdGhlIGdldERlc2NyaXB0b3JGb3JUeXBlKCkgbWV0aG9kLgot
ICB2b2lkIEdlbmVyYXRlR2V0RGVzY3JpcHRvckZvclR5cGUoaW86OlByaW50ZXIqIHByaW50ZXIp
OwotCi0gIC8vIEdlbmVyYXRlIGEgSmF2YSBpbnRlcmZhY2UgZm9yIHRoZSBzZXJ2aWNlLgotICB2
b2lkIEdlbmVyYXRlSW50ZXJmYWNlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBHZW5l
cmF0ZSBuZXdSZWZsZWN0aXZlU2VydmljZSgpIG1ldGhvZC4KLSAgdm9pZCBHZW5lcmF0ZU5ld1Jl
ZmxlY3RpdmVTZXJ2aWNlTWV0aG9kKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICAvLyBHZW5l
cmF0ZSBuZXdSZWZsZWN0aXZlQmxvY2tpbmdTZXJ2aWNlKCkgbWV0aG9kLgotICB2b2lkIEdlbmVy
YXRlTmV3UmVmbGVjdGl2ZUJsb2NraW5nU2VydmljZU1ldGhvZChpbzo6UHJpbnRlciogcHJpbnRl
cik7Ci0KLSAgLy8gR2VuZXJhdGUgYWJzdHJhY3QgbWV0aG9kIGRlY2xhcmF0aW9ucyBmb3IgYWxs
IG1ldGhvZHMuCi0gIHZvaWQgR2VuZXJhdGVBYnN0cmFjdE1ldGhvZHMoaW86OlByaW50ZXIqIHBy
aW50ZXIpOwotCi0gIC8vIEdlbmVyYXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBTZXJ2aWNlLmNh
bGxNZXRob2QoKS4KLSAgdm9pZCBHZW5lcmF0ZUNhbGxNZXRob2QoaW86OlByaW50ZXIqIHByaW50
ZXIpOwotCi0gIC8vIEdlbmVyYXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBCbG9ja2luZ1NlcnZp
Y2UuY2FsbEJsb2NraW5nTWV0aG9kKCkuCi0gIHZvaWQgR2VuZXJhdGVDYWxsQmxvY2tpbmdNZXRo
b2QoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gIC8vIEdlbmVyYXRlIHRoZSBpbXBsZW1lbnRh
dGlvbnMgb2YgU2VydmljZS5nZXR7UmVxdWVzdCxSZXNwb25zZX1Qcm90b3R5cGUoKS4KLSAgdm9p
ZCBHZW5lcmF0ZUdldFByb3RvdHlwZShSZXF1ZXN0T3JSZXNwb25zZSB3aGljaCwgaW86OlByaW50
ZXIqIHByaW50ZXIpOwotCi0gIC8vIEdlbmVyYXRlIGEgc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiB0
aGUgc2VydmljZS4KLSAgdm9pZCBHZW5lcmF0ZVN0dWIoaW86OlByaW50ZXIqIHByaW50ZXIpOwot
Ci0gIC8vIEdlbmVyYXRlIGEgbWV0aG9kIHNpZ25hdHVyZSwgcG9zc2libHkgYWJzdHJhY3QsIHdp
dGhvdXQgYm9keSBvciB0cmFpbGluZwotICAvLyBzZW1pY29sb24uCi0gIHZvaWQgR2VuZXJhdGVN
ZXRob2RTaWduYXR1cmUoaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogbWV0aG9kLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElzQWJzdHJhY3QgaXNfYWJzdHJhY3QpOwotCi0gIC8vIEdlbmVy
YXRlIGEgYmxvY2tpbmcgc3R1YiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZSBz
ZXJ2aWNlLgotICB2b2lkIEdlbmVyYXRlQmxvY2tpbmdTdHViKGlvOjpQcmludGVyKiBwcmludGVy
KTsKLQotICAvLyBHZW5lcmF0ZSB0aGUgbWV0aG9kIHNpZ25hdHVyZSBmb3Igb25lIG1ldGhvZCBv
ZiBhIGJsb2NraW5nIHN0dWIuCi0gIHZvaWQgR2VuZXJhdGVCbG9ja2luZ01ldGhvZFNpZ25hdHVy
ZShpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE1ldGhvZERlc2NyaXB0b3IqIG1ldGhvZCk7Ci0KLSAgQ29udGV4dCogY29u
dGV4dF87Ci0gIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLSAgR09PR0xFX0RJ
U0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEltbXV0YWJsZVNlcnZpY2VHZW5lcmF0b3IpOwotfTsK
LQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8g
bmFtZXNwYWNlIHByb3RvYnVmCi0KLSNlbmRpZiAgLy8gTkVUX1BST1RPMl9DT01QSUxFUl9KQVZB
X1NFUlZJQ0VfSF9fCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3NoYXJlZF9jb2RlX2dlbmVyYXRvci5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2hhcmVkX2NvZGVfZ2VuZXJh
dG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDI1M2MzZmI3YTMwNjU0NjJi
MzEwYjgzZGFiYWE2ZGIxMmFiMTRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2hhcmVk
X2NvZGVfZ2VuZXJhdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IHhpYW9mZW5nQGdvb2ds
ZS5jb20gKEZlbmcgWGlhbykKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9q
YXZhL2phdmFfc2hhcmVkX2NvZGVfZ2VuZXJhdG9yLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0j
aWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hh
cmVkX3B0ci5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YS9qYXZhX25hbWVfcmVzb2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvY29kZV9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJp
bnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLVNoYXJlZENvZGVH
ZW5lcmF0b3I6OlNoYXJlZENvZGVHZW5lcmF0b3IoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUp
Ci0gICAgOiBuYW1lX3Jlc29sdmVyXyhuZXcgQ2xhc3NOYW1lUmVzb2x2ZXIpLAotICAgICAgZW5m
b3JjZV9saXRlXyhmYWxzZSksCi0gICAgICBmaWxlXyhmaWxlKSB7fQotCi1TaGFyZWRDb2RlR2Vu
ZXJhdG9yOjp+U2hhcmVkQ29kZUdlbmVyYXRvcigpIHsKLX0KLQotdm9pZCBTaGFyZWRDb2RlR2Vu
ZXJhdG9yOjpHZW5lcmF0ZShHZW5lcmF0b3JDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8c3RyaW5nPiogZmlsZV9saXN0KSB7Ci0gIHN0
cmluZyBqYXZhX3BhY2thZ2UgPSBGaWxlSmF2YVBhY2thZ2UoZmlsZV8pOwotICBzdHJpbmcgcGFj
a2FnZV9kaXIgPSBKYXZhUGFja2FnZVRvRGlyKGphdmFfcGFja2FnZSk7Ci0KLSAgaWYgKEhhc0Rl
c2NyaXB0b3JNZXRob2RzKGZpbGVfLCBlbmZvcmNlX2xpdGVfKSkgewotICAgIC8vIEdlbmVyYXRl
IGRlc2NyaXB0b3JzLgotICAgIHN0cmluZyBjbGFzc25hbWUgPSBuYW1lX3Jlc29sdmVyXy0+R2V0
RGVzY3JpcHRvckNsYXNzTmFtZShmaWxlXyk7Ci0gICAgc3RyaW5nIGZpbGVuYW1lID0gcGFja2Fn
ZV9kaXIgKyBjbGFzc25hbWUgKyAiLmphdmEiOwotICAgIGZpbGVfbGlzdC0+cHVzaF9iYWNrKGZp
bGVuYW1lKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPGlvOjpaZXJvQ29weU91
dHB1dFN0cmVhbT4gb3V0cHV0KGNvbnRleHQtPk9wZW4oZmlsZW5hbWUpKTsKLSAgICBnb29nbGU6
OnByb3RvYnVmOjpzY29wZWRfcHRyPGlvOjpQcmludGVyPiBwcmludGVyKG5ldyBpbzo6UHJpbnRl
cihvdXRwdXQuZ2V0KCksICckJykpOwotCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiLy8g
R2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCFc
biIKLSAgICAgICIvLyBzb3VyY2U6ICRmaWxlbmFtZSRcbiIKLSAgICAgICJcbiIsCi0gICAgICAi
ZmlsZW5hbWUiLCBmaWxlXy0+bmFtZSgpKTsKLSAgICBpZiAoIWphdmFfcGFja2FnZS5lbXB0eSgp
KSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgInBhY2thZ2UgJHBhY2thZ2UkO1xu
IgotICAgICAgICAiXG4iLAotICAgICAgICAicGFja2FnZSIsIGphdmFfcGFja2FnZSk7Ci0gICAg
fQotICAgIHByaW50ZXItPlByaW50KAotICAgICAgInB1YmxpYyBmaW5hbCBjbGFzcyAkY2xhc3Nu
YW1lJCB7XG4iCi0gICAgICAiICBwdWJsaWMgc3RhdGljIGNvbS5nb29nbGUucHJvdG9idWYuRGVz
Y3JpcHRvcnMuRmlsZURlc2NyaXB0b3JcbiIKLSAgICAgICIgICAgICBkZXNjcmlwdG9yO1xuIgot
ICAgICAgIiAgc3RhdGljIHtcbiIsCi0gICAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lKTsKLSAg
ICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBHZW5lcmF0
ZURlc2NyaXB0b3JzKHByaW50ZXIuZ2V0KCkpOwotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAg
ICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICB9XG4i
Ci0gICAgICAifVxuIik7Ci0KLSAgICBwcmludGVyLnJlc2V0KCk7Ci0gICAgb3V0cHV0LnJlc2V0
KCk7Ci0gIH0KLX0KLQotCi12b2lkIFNoYXJlZENvZGVHZW5lcmF0b3I6OkdlbmVyYXRlRGVzY3Jp
cHRvcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgLy8gRW1iZWQgdGhlIGRlc2NyaXB0b3Iu
ICBXZSBzaW1wbHkgc2VyaWFsaXplIHRoZSBlbnRpcmUgRmlsZURlc2NyaXB0b3JQcm90bwotICAv
LyBhbmQgZW1iZWQgaXQgYXMgYSBzdHJpbmcgbGl0ZXJhbCwgd2hpY2ggaXMgcGFyc2VkIGFuZCBi
dWlsdCBpbnRvIHJlYWwKLSAgLy8gZGVzY3JpcHRvcnMgYXQgaW5pdGlhbGl6YXRpb24gdGltZS4g
IFdlIHVuZm9ydHVuYXRlbHkgaGF2ZSB0byBwdXQgaXQgaW4KLSAgLy8gYSBzdHJpbmcgbGl0ZXJh
bCwgbm90IGEgYnl0ZSBhcnJheSwgYmVjYXVzZSBhcHBhcmVudGx5IHVzaW5nIGEgbGl0ZXJhbAot
ICAvLyBieXRlIGFycmF5IGNhdXNlcyB0aGUgSmF2YSBjb21waWxlciB0byBnZW5lcmF0ZSAqaW5z
dHJ1Y3Rpb25zKiB0bwotICAvLyBpbml0aWFsaXplIGVhY2ggYW5kIGV2ZXJ5IGJ5dGUgb2YgdGhl
IGFycmF5LCBlLmcuIGFzIGlmIHlvdSB0eXBlZDoKLSAgLy8gICBiWzBdID0gMTIzOyBiWzFdID0g
NDU2OyBiWzJdID0gNzg5OwotICAvLyBUaGlzIG1ha2VzIGh1Z2UgYnl0ZWNvZGUgZmlsZXMgYW5k
IGNhbiBlYXNpbHkgaGl0IHRoZSBjb21waWxlcidzIGludGVybmFsCi0gIC8vIGNvZGUgc2l6ZSBs
aW1pdHMgKGVycm9yICJjb2RlIHRvIGxhcmdlIikuICBTdHJpbmcgbGl0ZXJhbHMgYXJlIGFwcGFy
ZW50bHkKLSAgLy8gZW1iZWRkZWQgcmF3LCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuCi0gIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgZmlsZV8tPkNvcHlUbygmZmlsZV9wcm90byk7
Ci0KLQotICBzdHJpbmcgZmlsZV9kYXRhOwotICBmaWxlX3Byb3RvLlNlcmlhbGl6ZVRvU3RyaW5n
KCZmaWxlX2RhdGEpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICJqYXZhLmxhbmcuU3RyaW5n
W10gZGVzY3JpcHRvckRhdGEgPSB7XG4iKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgLy8g
T25seSB3cml0ZSA0MCBieXRlcyBwZXIgbGluZS4KLSAgc3RhdGljIGNvbnN0IGludCBrQnl0ZXNQ
ZXJMaW5lID0gNDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV9kYXRhLnNpemUoKTsgaSAr
PSBrQnl0ZXNQZXJMaW5lKSB7Ci0gICAgaWYgKGkgPiAwKSB7Ci0gICAgICAvLyBFdmVyeSA0MDAg
bGluZXMsIHN0YXJ0IGEgbmV3IHN0cmluZyBsaXRlcmFsLCBpbiBvcmRlciB0byBhdm9pZCB0aGUK
LSAgICAgIC8vIDY0ayBsZW5ndGggbGltaXQuCi0gICAgICBpZiAoaSAlIDQwMCA9PSAwKSB7Ci0g
ICAgICAgIHByaW50ZXItPlByaW50KCIsXG4iKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBy
aW50ZXItPlByaW50KCIgK1xuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50
KCJcIiRkYXRhJFwiIiwKLSAgICAgICJkYXRhIiwgQ0VzY2FwZShmaWxlX2RhdGEuc3Vic3RyKGks
IGtCeXRlc1BlckxpbmUpKSk7Ci0gIH0KLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50
ZXItPlByaW50KCJcbn07XG4iKTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBDcmVhdGUgdGhlIElu
dGVybmFsRGVzY3JpcHRvckFzc2lnbmVyLgotCi0gIHByaW50ZXItPlByaW50KAotICAgICJjb20u
Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yLiIKLSAgICAiSW50ZXJu
YWxEZXNjcmlwdG9yQXNzaWduZXIgYXNzaWduZXIgPVxuIgotICAgICIgICAgbmV3IGNvbS5nb29n
bGUucHJvdG9idWYuRGVzY3JpcHRvcnMuRmlsZURlc2NyaXB0b3IuIgotICAgICIgICAgSW50ZXJu
YWxEZXNjcmlwdG9yQXNzaWduZXIoKSB7XG4iCi0gICAgIiAgICAgIHB1YmxpYyBjb20uZ29vZ2xl
LnByb3RvYnVmLkV4dGVuc2lvblJlZ2lzdHJ5IGFzc2lnbkRlc2NyaXB0b3JzKFxuIgotICAgICIg
ICAgICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9ycy5GaWxlRGVzY3JpcHRvciBy
b290KSB7XG4iCi0gICAgIiAgICAgICAgZGVzY3JpcHRvciA9IHJvb3Q7XG4iCi0gICAgLy8gQ3Vz
dG9tIG9wdGlvbnMgd2lsbCBiZSBoYW5kbGVkIHdoZW4gaW1tdXRhYmxlIG1lc3NhZ2VzJyBvdXRl
ciBjbGFzcyBpcwotICAgIC8vIGxvYWRlZC4gSGVyZSB3ZSBqdXN0IHJldHVybiBudWxsIGFuZCBs
ZXQgY3VzdG9tIG9wdGlvbnMgYmUgdW5rbm93bgotICAgIC8vIGZpZWxkcy4KLSAgICAiICAgICAg
ICByZXR1cm4gbnVsbDtcbiIKLSAgICAiICAgICAgfVxuIgotICAgICIgICAgfTtcbiIpOwotCi0g
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gIC8vIEZpbmQgb3V0IGFsbCBkZXBlbmRlbmNpZXMuCi0gIHZlY3Rvcjxw
YWlyPHN0cmluZywgc3RyaW5nPiA+IGRlcGVuZGVuY2llczsKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmaWxlXy0+ZGVwZW5kZW5jeV9jb3VudCgpOyBpKyspIHsKLSAgICBpZiAoU2hvdWxkSW5jbHVk
ZURlcGVuZGVuY3koZmlsZV8tPmRlcGVuZGVuY3koaSkpKSB7Ci0gICAgICBzdHJpbmcgZmlsZW5h
bWUgPSBmaWxlXy0+ZGVwZW5kZW5jeShpKS0+bmFtZSgpOwotICAgICAgc3RyaW5nIGNsYXNzbmFt
ZSA9IEZpbGVKYXZhUGFja2FnZShmaWxlXy0+ZGVwZW5kZW5jeShpKSkgKyAiLiIgKwotICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWVfcmVzb2x2ZXJfLT5HZXREZXNjcmlwdG9yQ2xhc3NOYW1l
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlXy0+ZGVwZW5kZW5jeShpKSk7Ci0g
ICAgICBkZXBlbmRlbmNpZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV9wYWlyKGZpbGVuYW1lLCBjbGFz
c25hbWUpKTsKLSAgICB9Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBJbnZva2UgaW50ZXJu
YWxCdWlsZEdlbmVyYXRlZEZpbGVGcm9tKCkgdG8gYnVpbGQgdGhlIGZpbGUuCi0gIHByaW50ZXIt
PlByaW50KAotICAgICJjb20uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlw
dG9yXG4iCi0gICAgIiAgLmludGVybmFsQnVpbGRHZW5lcmF0ZWRGaWxlRnJvbShkZXNjcmlwdG9y
RGF0YSxcbiIpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiICAgIG5ldyBjb20uZ29vZ2xlLnBy
b3RvYnVmLkRlc2NyaXB0b3JzLkZpbGVEZXNjcmlwdG9yW10ge1xuIik7Ci0KLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMuc2l6ZSgpOyBpKyspIHsKLSAgICBjb25zdCBzdHJpbmcm
IGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbaV0uc2Vjb25kOwotICAgIHByaW50ZXItPlByaW50
KAotICAgICAgICAiICAgICAgJGRlcGVuZGVuY3kkLmdldERlc2NyaXB0b3IoKSxcbiIsCi0gICAg
ICAgICJkZXBlbmRlbmN5IiwgZGVwZW5kZW5jeSk7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgK
LSAgICAiICAgIH0sIGFzc2lnbmVyKTtcbiIpOwotfQotCi1ib29sIFNoYXJlZENvZGVHZW5lcmF0
b3I6OlNob3VsZEluY2x1ZGVEZXBlbmRlbmN5KAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yKSB7Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgamF2YQot
fSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhL2phdmFfc2hhcmVkX2NvZGVfZ2VuZXJhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX3NoYXJlZF9jb2RlX2dlbmVyYXRvci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzYjU3M2MwNzU4NThhMzRlNmIxMmViZTg0ZjI5YzFmMGU1Y2ZkNmZj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2hhcmVkX2NvZGVfZ2VuZXJhdG9yLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotLy8gQXV0aG9yOiB4aWFvZmVuZ0Bnb29nbGUuY29tIChGZW5nIFhpYW8pCi0vLwot
Ly8gR2VuZXJhdG9ycyB0aGF0IGdlbmVyYXRlIHNoYXJlZCBjb2RlIGJldHdlZW4gaW1tdXRhYmxl
IEFQSSBhbmQgbXV0YWJsZSBBUEkuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVS
X0pBVkFfU0hBUkVEX0NPREVfR0VORVJBVE9SX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZf
Q09NUElMRVJfSkFWQV9TSEFSRURfQ09ERV9HRU5FUkFUT1JfSF9fCi0KLSNpbmNsdWRlIDxtZW1v
cnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZl
Y3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotICBjbGFzcyBGaWxlRGVzY3Jp
cHRvcjsgICAgICAgIC8vIGRlc2NyaXB0b3IuaAotICBuYW1lc3BhY2UgY29tcGlsZXIgewotICAg
IGNsYXNzIEdlbmVyYXRvckNvbnRleHQ7ICAgIC8vIGNvZGVfZ2VuZXJhdG9yLmgKLSAgICBuYW1l
c3BhY2UgamF2YSB7Ci0gICAgICBjbGFzcyBDbGFzc05hbWVSZXNvbHZlcjsgICAgICAgLy8gbmFt
ZV9yZXNvbHZlci5oCi0gICAgfQotICB9Ci0gIG5hbWVzcGFjZSBpbyB7Ci0gICAgY2xhc3MgUHJp
bnRlcjsgICAgICAgICAgICAgLy8gcHJpbnRlci5oCi0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YSB7Ci0KLS8vIEEgZ2Vu
ZXJhdG9yIHRoYXQgZ2VuZXJhdGVzIGNvZGUgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gaW1tdXRh
YmxlIEFQSQotLy8gYW5kIG11dGFibGUgQVBJLiBDdXJyZW50bHkgb25seSBkZXNjcmlwdG9ycyBh
cmUgc2hhcmVkLgotY2xhc3MgU2hhcmVkQ29kZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBleHBs
aWNpdCBTaGFyZWRDb2RlR2VuZXJhdG9yKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKTsKLSAg
flNoYXJlZENvZGVHZW5lcmF0b3IoKTsKLQotICB2b2lkIEdlbmVyYXRlKEdlbmVyYXRvckNvbnRl
eHQqIGdlbmVyYXRvcl9jb250ZXh0LAotICAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+KiBm
aWxlX2xpc3QpOwotCi0gIHZvaWQgU2V0RW5mb3JjZUxpdGUoYm9vbCB2YWx1ZSkgewotICAgIGVu
Zm9yY2VfbGl0ZV8gPSB2YWx1ZTsKLSAgfQotCi0gIHZvaWQgR2VuZXJhdGVEZXNjcmlwdG9ycyhp
bzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSBwcml2YXRlOgotICAvLyBSZXR1cm5zIHdoZXRoZXIg
dGhlIGRlcGVuZGVuY3kgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZS4KLSAg
Ly8gQWx3YXlzIHJldHVybnMgdHJ1ZSBmb3Igb3BlbnNvdXJjZSwgYnV0IHVzZWQgaW50ZXJuYWxs
eSBhdCBHb29nbGUgdG8gaGVscAotICAvLyBpbXByb3ZlIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJz
aW9uIDEgb2YgcHJvdG9jb2wgYnVmZmVycy4KLSAgYm9vbCBTaG91bGRJbmNsdWRlRGVwZW5kZW5j
eShjb25zdCBGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLSAgZ29vZ2xlOjpwcm90b2J1
Zjo6c2NvcGVkX3B0cjxDbGFzc05hbWVSZXNvbHZlcj4gbmFtZV9yZXNvbHZlcl87Ci0gIGJvb2wg
ZW5mb3JjZV9saXRlXzsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGVfOwotICBHT09HTEVf
RElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoU2hhcmVkQ29kZUdlbmVyYXRvcik7Ci19OwotCi0K
LX0gIC8vIG5hbWVzcGFjZSBqYXZhCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5h
bWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdP
T0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX1NIQVJFRF9DT0RFX0dFTkVSQVRPUl9IX18KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc3RyaW5nX2Zp
ZWxkLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zdHJpbmdfZmll
bGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2N2VlYjUzMjZjOGYyNTVkZjRj
ODQxOThlYjEzMjc3ZDczNGU1NDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zdHJpbmdf
ZmllbGQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw5OTcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRv
biBWYXJkYSkKLS8vIEF1dGhvcjogam9ucEBnb29nbGUuY29tIChKb24gUGVybG93KQotLy8gIEJh
c2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdo
ZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc3RyaW5nX2ZpZWxkLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvc3RydXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi11c2luZyBpbnRlcm5h
bDo6V2lyZUZvcm1hdDsKLXVzaW5nIGludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTsKLQotbmFtZXNw
YWNlIHsKLQotdm9pZCBTZXRQcmltaXRpdmVWYXJpYWJsZXMoY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJ
bmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWlsZGVyQml0SW5kZXgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZEdlbmVyYXRvckluZm8qIGluZm8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc05hbWVSZXNvbHZlciogbmFtZV9yZXNv
bHZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0cmluZz4qIHZh
cmlhYmxlcykgewotICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhkZXNjcmlwdG9yLCBpbmZvLCB2
YXJpYWJsZXMpOwotCi0gICgqdmFyaWFibGVzKVsiZW1wdHlfbGlzdCJdID0gImNvbS5nb29nbGUu
cHJvdG9idWYuTGF6eVN0cmluZ0FycmF5TGlzdC5FTVBUWSI7Ci0KLSAgKCp2YXJpYWJsZXMpWyJk
ZWZhdWx0Il0gPSBJbW11dGFibGVEZWZhdWx0VmFsdWUoZGVzY3JpcHRvciwgbmFtZV9yZXNvbHZl
cik7Ci0gICgqdmFyaWFibGVzKVsiZGVmYXVsdF9pbml0Il0gPQotICAgICAgIj0gIiArIEltbXV0
YWJsZURlZmF1bHRWYWx1ZShkZXNjcmlwdG9yLCBuYW1lX3Jlc29sdmVyKTsKLSAgKCp2YXJpYWJs
ZXMpWyJjYXBpdGFsaXplZF90eXBlIl0gPSAiU3RyaW5nIjsKLSAgKCp2YXJpYWJsZXMpWyJ0YWci
XSA9IFNpbXBsZUl0b2EoV2lyZUZvcm1hdDo6TWFrZVRhZyhkZXNjcmlwdG9yKSk7Ci0gICgqdmFy
aWFibGVzKVsidGFnX3NpemUiXSA9IFNpbXBsZUl0b2EoCi0gICAgICBXaXJlRm9ybWF0OjpUYWdT
aXplKGRlc2NyaXB0b3ItPm51bWJlcigpLCBHZXRUeXBlKGRlc2NyaXB0b3IpKSk7Ci0gICgqdmFy
aWFibGVzKVsibnVsbF9jaGVjayJdID0KLSAgICAgICIgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4i
Ci0gICAgICAiICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpO1xuIgotICAgICAg
IiAgfVxuIjsKLSAgKCp2YXJpYWJsZXMpWyJ3cml0ZVN0cmluZyJdID0KLSAgICAgICJjb20uZ29v
Z2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2Uud3JpdGVTdHJpbmciOwotICAoKnZhcmlhYmxl
cylbImNvbXB1dGVTdHJpbmdTaXplIl0gPQotICAgICAgImNvbS5nb29nbGUucHJvdG9idWYuR2Vu
ZXJhdGVkTWVzc2FnZS5jb21wdXRlU3RyaW5nU2l6ZSI7Ci0KLSAgLy8gVE9ETyhiaXJkbyk6IEFk
ZCBAZGVwcmVjYXRlZCBqYXZhZG9jIHdoZW4gZ2VuZXJhdGluZyBqYXZhZG9jIGlzIHN1cHBvcnRl
ZAotICAvLyBieSB0aGUgcHJvdG8gY29tcGlsZXIKLSAgKCp2YXJpYWJsZXMpWyJkZXByZWNhdGlv
biJdID0gZGVzY3JpcHRvci0+b3B0aW9ucygpLmRlcHJlY2F0ZWQoKQotICAgICAgPyAiQGphdmEu
bGFuZy5EZXByZWNhdGVkICIgOiAiIjsKLSAgKCp2YXJpYWJsZXMpWyJvbl9jaGFuZ2VkIl0gPSAi
b25DaGFuZ2VkKCk7IjsKLQotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvci0+
ZmlsZSgpKSkgewotICAgIC8vIEZvciBzaW5ndWxhciBtZXNzYWdlcyBhbmQgYnVpbGRlcnMsIG9u
ZSBiaXQgaXMgdXNlZCBmb3IgdGhlIGhhc0ZpZWxkIGJpdC4KLSAgICAoKnZhcmlhYmxlcylbImdl
dF9oYXNfZmllbGRfYml0X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0Qml0KG1lc3NhZ2VCaXRJbmRl
eCk7Ci0gICAgKCp2YXJpYWJsZXMpWyJnZXRfaGFzX2ZpZWxkX2JpdF9idWlsZGVyIl0gPSBHZW5l
cmF0ZUdldEJpdChidWlsZGVyQml0SW5kZXgpOwotCi0gICAgLy8gTm90ZSB0aGF0IHRoZXNlIGhh
dmUgYSB0cmFpbGluZyAiOyIuCi0gICAgKCp2YXJpYWJsZXMpWyJzZXRfaGFzX2ZpZWxkX2JpdF9t
ZXNzYWdlIl0gPQotICAgICAgICBHZW5lcmF0ZVNldEJpdChtZXNzYWdlQml0SW5kZXgpICsgIjsi
OwotICAgICgqdmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9iaXRfYnVpbGRlciJdID0KLSAgICAg
ICAgR2VuZXJhdGVTZXRCaXQoYnVpbGRlckJpdEluZGV4KSArICI7IjsKLSAgICAoKnZhcmlhYmxl
cylbImNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRlciJdID0KLSAgICAgICAgR2VuZXJhdGVDbGVh
ckJpdChidWlsZGVyQml0SW5kZXgpICsgIjsiOwotCi0gICAgKCp2YXJpYWJsZXMpWyJpc19maWVs
ZF9wcmVzZW50X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0Qml0KG1lc3NhZ2VCaXRJbmRleCk7Ci0g
IH0gZWxzZSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJzZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlIl0g
PSAiIjsKLSAgICAoKnZhcmlhYmxlcylbInNldF9oYXNfZmllbGRfYml0X2J1aWxkZXIiXSA9ICIi
OwotICAgICgqdmFyaWFibGVzKVsiY2xlYXJfaGFzX2ZpZWxkX2JpdF9idWlsZGVyIl0gPSAiIjsK
LQotICAgICgqdmFyaWFibGVzKVsiaXNfZmllbGRfcHJlc2VudF9tZXNzYWdlIl0gPQotICAgICAg
ICAiIWdldCIgKyAoKnZhcmlhYmxlcylbImNhcGl0YWxpemVkX25hbWUiXSArICJCeXRlcygpLmlz
RW1wdHkoKSI7Ci0gIH0KLQotICAvLyBGb3IgcmVwZWF0ZWQgYnVpbGRlcnMsIG9uZSBiaXQgaXMg
dXNlZCBmb3Igd2hldGhlciB0aGUgYXJyYXkgaXMgaW1tdXRhYmxlLgotICAoKnZhcmlhYmxlcylb
ImdldF9tdXRhYmxlX2JpdF9idWlsZGVyIl0gPSBHZW5lcmF0ZUdldEJpdChidWlsZGVyQml0SW5k
ZXgpOwotICAoKnZhcmlhYmxlcylbInNldF9tdXRhYmxlX2JpdF9idWlsZGVyIl0gPSBHZW5lcmF0
ZVNldEJpdChidWlsZGVyQml0SW5kZXgpOwotICAoKnZhcmlhYmxlcylbImNsZWFyX211dGFibGVf
Yml0X2J1aWxkZXIiXSA9IEdlbmVyYXRlQ2xlYXJCaXQoYnVpbGRlckJpdEluZGV4KTsKLQotICAv
LyBGb3IgcmVwZWF0ZWQgZmllbGRzLCBvbmUgYml0IGlzIHVzZWQgZm9yIHdoZXRoZXIgdGhlIGFy
cmF5IGlzIGltbXV0YWJsZQotICAvLyBpbiB0aGUgcGFyc2luZyBjb25zdHJ1Y3Rvci4KLSAgKCp2
YXJpYWJsZXMpWyJnZXRfbXV0YWJsZV9iaXRfcGFyc2VyIl0gPQotICAgICAgR2VuZXJhdGVHZXRC
aXRNdXRhYmxlTG9jYWwoYnVpbGRlckJpdEluZGV4KTsKLSAgKCp2YXJpYWJsZXMpWyJzZXRfbXV0
YWJsZV9iaXRfcGFyc2VyIl0gPQotICAgICAgR2VuZXJhdGVTZXRCaXRNdXRhYmxlTG9jYWwoYnVp
bGRlckJpdEluZGV4KTsKLQotICAoKnZhcmlhYmxlcylbImdldF9oYXNfZmllbGRfYml0X2Zyb21f
bG9jYWwiXSA9Ci0gICAgICBHZW5lcmF0ZUdldEJpdEZyb21Mb2NhbChidWlsZGVyQml0SW5kZXgp
OwotICAoKnZhcmlhYmxlcylbInNldF9oYXNfZmllbGRfYml0X3RvX2xvY2FsIl0gPQotICAgICAg
R2VuZXJhdGVTZXRCaXRUb0xvY2FsKG1lc3NhZ2VCaXRJbmRleCk7Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0KLUltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoK
LUltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVz
Y3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlQml0SW5k
ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVpbGRlckJpdEluZGV4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29udGV4dCkKLSAgOiBkZXNj
cmlwdG9yXyhkZXNjcmlwdG9yKSwgbWVzc2FnZUJpdEluZGV4XyhtZXNzYWdlQml0SW5kZXgpLAot
ICAgIGJ1aWxkZXJCaXRJbmRleF8oYnVpbGRlckJpdEluZGV4KSwgY29udGV4dF8oY29udGV4dCks
Ci0gICAgbmFtZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpIHsKLSAgU2V0
UHJpbWl0aXZlVmFyaWFibGVzKGRlc2NyaXB0b3IsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJp
dEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+R2V0RmllbGRHZW5lcmF0
b3JJbmZvKGRlc2NyaXB0b3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9yZXNvbHZl
cl8sICZ2YXJpYWJsZXNfKTsKLX0KLQotSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3I6On5J
bW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcigpIHt9Ci0KLWludCBJbW11dGFibGVTdHJpbmdG
aWVsZEdlbmVyYXRvcjo6R2V0TnVtQml0c0Zvck1lc3NhZ2UoKSBjb25zdCB7Ci0gIHJldHVybiAx
OwotfQotCi1pbnQgSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3I6OkdldE51bUJpdHNGb3JC
dWlsZGVyKCkgY29uc3QgewotICByZXR1cm4gMTsKLX0KLQotLy8gQSBub3RlIGFib3V0IGhvdyBz
dHJpbmdzIGFyZSBoYW5kbGVkLiBUaGlzIGNvZGUgdXNlZCB0byBqdXN0IHN0b3JlIGEgU3RyaW5n
Ci0vLyBpbiB0aGUgTWVzc2FnZS4gVGhpcyBoYWQgdHdvIGlzc3VlczoKLS8vCi0vLyAgMS4gSXQg
d291bGRuJ3Qgcm91bmR0cmlwIGJ5dGUgYXJyYXlzIHRoYXQgd2VyZSBub3QgdmFpZCBVVEYtOCBl
bmNvZGVkCi0vLyAgICAgc3RyaW5ncywgYnV0IHJhdGhlciBmaWVsZHMgdGhhdCB3ZXJlIHJhdyBi
eXRlcyBpbmNvcnJlY3RseSBtYXJrZWQKLS8vICAgICBhcyBzdHJpbmdzIGluIHRoZSBwcm90byBm
aWxlLiBUaGlzIGlzIGNvbW1vbiBiZWNhdXNlIGluIHRoZSBwcm90bzEKLS8vICAgICBzeW50YXgs
IHN0cmluZyB3YXMgdGhlIHdheSB0byBpbmRpY2F0ZSBieXRlcyBhbmQgQysrIGVuZ2luZWVycyBj
YW4KLS8vICAgICBlYXNpbHkgbWFrZSB0aGlzIG1pc3Rha2Ugd2l0aG91dCBhZmZlY3RpbmcgdGhl
IEMrKyBBUEkuIEJ5IGNvbnZlcnRpbmcgdG8KLS8vICAgICBzdHJpbmdzIGltbWVkaWF0ZWx5LCBz
b21lIGphdmEgY29kZSBtaWdodCBjb3JydXB0IHRoZXNlIGJ5dGUgYXJyYXlzIGFzCi0vLyAgICAg
aXQgcGFzc2VzIHRocm91Z2ggYSBqYXZhIHNlcnZlciBldmVuIGlmIHRoZSBmaWVsZCB3YXMgbmV2
ZXIgYWNjZXNzZWQgYnkKLS8vICAgICBhcHBsaWNhdGlvbiBjb2RlLgotLy8KLS8vICAyLiBUaGVy
ZSdzIGEgcGVyZm9ybWFuY2UgaGl0IHRvIGNvbnZlcnRpbmcgYmV0d2VlbiBieXRlcyBhbmQgc3Ry
aW5ncyBhbmQKLS8vICAgICBpdCBtYW55IGNhc2VzLCB0aGUgZmllbGQgaXMgbmV2ZXIgZXZlbiBy
ZWFkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlLiBUaGlzCi0vLyAgICAgYXZvaWRzIHVubmVjZXNz
YXJ5IGNvbnZlcnNpb25zIGluIHRoZSBjb21tb24gdXNlIGNhc2VzLgotLy8KLS8vIFNvIG5vdywg
dGhlIGZpZWxkIGZvciBTdHJpbmcgaXMgbWFpbnRhaW5lZCBhcyBhbiBPYmplY3QgcmVmZXJlbmNl
IHdoaWNoIGNhbgotLy8gZWl0aGVyIHN0b3JlIGEgU3RyaW5nIG9yIGEgQnl0ZVN0cmluZy4gVGhl
IGNvZGUgdXNlcyBhbiBpbnN0YW5jZW9mIGNoZWNrCi0vLyB0byBzZWUgd2hpY2ggb25lIGl0IGhh
cyBhbmQgY29udmVydHMgdG8gdGhlIG90aGVyIG9uZSBpZiBuZWVkZWQuIEl0IHJlbWVtYmVycwot
Ly8gdGhlIGxhc3QgdmFsdWUgcmVxdWVzdGVkIChpbiBhIHRocmVhZCBzYWZlIG1hbm5lcikgYXMg
dGhpcyBpcyBtb3N0IGxpa2VseQotLy8gdGhlIG9uZSBuZWVkZWQgbmV4dC4gVGhlIHRocmVhZCBz
YWZldHkgaXMgc3VjaCB0aGF0IGlmIHR3byB0aHJlYWRzIGJvdGgKLS8vIGNvbnZlcnQgdGhlIGZp
ZWxkIGJlY2F1c2UgdGhlIGNoYW5nZXMgbWFkZSBieSBlYWNoIHRocmVhZCB3ZXJlIG5vdCB2aXNp
YmxlIHRvCi0vLyB0aGUgb3RoZXIsIHRoZXkgbWF5IGNhdXNlIGEgY29udmVyc2lvbiB0byBoYXBw
ZW4gbW9yZSB0aW1lcyB0aGFuIHdvdWxkCi0vLyBvdGhlcndpc2UgYmUgbmVjZXNzYXJ5LiBUaGlz
IHdhcyBkZWVtZWQgYmV0dGVyIHRoYW4gYWRkaW5nIHN5bmNocm9uaXphdGlvbgotLy8gb3Zlcmhl
YWQuIEl0IHdpbGwgbm90IGNhdXNlIGFueSBjb3JydXB0aW9uIGlzc3VlcyBvciBhZmZlY3QgdGhl
IGJlaGF2aW9yIG9mCi0vLyB0aGUgQVBJLiBUaGUgaW5zdGFuY2VvZiBjaGVjayBpcyBhbHNvIGhp
Z2hseSBvcHRpbWl6ZWQgaW4gdGhlIEpWTSBhbmQgd2UKLS8vIGRlY2lkZWQgaXQgd2FzIGJldHRl
ciB0byByZWR1Y2UgdGhlIG1lbW9yeSBvdmVyaGVhZCBieSBub3QgaGF2aW5nIHR3bwotLy8gc2Vw
YXJhdGUgZmllbGRzIGJ1dCByYXRoZXIgdXNlIGR5bmFtaWMgdHlwZSBjaGVja2luZy4KLS8vCi0v
LyBGb3Igc2luZ2xlIGZpZWxkcywgdGhlIGxvZ2ljIGZvciB0aGlzIGlzIGRvbmUgaW5zaWRlIHRo
ZSBnZW5lcmF0ZWQgY29kZS4gRm9yCi0vLyByZXBlYXRlZCBmaWVsZHMsIHRoZSBsb2dpYyBpcyBk
b25lIGluIExhenlTdHJpbmdBcnJheUxpc3QgYW5kCi0vLyBVbm1vZGlmaWFibGVMYXp5U3RyaW5n
TGlzdC4KLXZvaWQgSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJbnRl
cmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChTdXBwb3J0
RmllbGRQcmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2ND
b21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICAgIiRkZXByZWNhdGlvbiRib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJCgp
O1xuIik7Ci0gIH0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kamF2YS5s
YW5nLlN0cmluZyBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIpOwotICBXcml0ZUZpZWxkRG9j
Q29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgIiRkZXByZWNhdGlvbiRjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmdcbiIK
LSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJEJ5dGVzKCk7XG4iKTsKLX0KLQotdm9pZCBJ
bW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
cHJpdmF0ZSB2b2xhdGlsZSBqYXZhLmxhbmcuT2JqZWN0ICRuYW1lJF87XG4iKTsKLSAgUHJpbnRF
eHRyYUZpZWxkSW5mbyh2YXJpYWJsZXNfLCBwcmludGVyKTsKLQotICBpZiAoU3VwcG9ydEZpZWxk
UHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVu
dChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAgICIkZGVwcmVjYXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0YWxpemVkX25hbWUk
KCkge1xuIgotICAgICAgIiAgcmV0dXJuICRnZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlJDtcbiIK
LSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRl
c2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0
aW9uJHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIK
LSAgICAiICBqYXZhLmxhbmcuT2JqZWN0IHJlZiA9ICRuYW1lJF87XG4iCi0gICAgIiAgaWYgKHJl
ZiBpbnN0YW5jZW9mIGphdmEubGFuZy5TdHJpbmcpIHtcbiIKLSAgICAiICAgIHJldHVybiAoamF2
YS5sYW5nLlN0cmluZykgcmVmO1xuIgotICAgICIgIH0gZWxzZSB7XG4iCi0gICAgIiAgICBjb20u
Z29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcgYnMgPSBcbiIKLSAgICAiICAgICAgICAoY29tLmdv
b2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nKSByZWY7XG4iCi0gICAgICAiICAgIGphdmEubGFuZy5T
dHJpbmcgcyA9IGJzLnRvU3RyaW5nVXRmOCgpO1xuIik7Ci0gIGlmIChDaGVja1V0ZjgoZGVzY3Jp
cHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIgICAgJG5h
bWUkXyA9IHM7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICAgIiAgICBpZiAoYnMuaXNWYWxpZFV0ZjgoKSkge1xuIgotICAgICAgIiAgICAgICRu
YW1lJF8gPSBzO1xuIgotICAgICAgIiAgICB9XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICIgICAgcmV0dXJuIHM7XG4iCi0gICAgIiAgfVxuIgotICAgICJ9XG4i
KTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGNvbS5nb29n
bGUucHJvdG9idWYuQnl0ZVN0cmluZ1xuIgotICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUk
Qnl0ZXMoKSB7XG4iCi0gICAgIiAgamF2YS5sYW5nLk9iamVjdCByZWYgPSAkbmFtZSRfO1xuIgot
ICAgICIgIGlmIChyZWYgaW5zdGFuY2VvZiBqYXZhLmxhbmcuU3RyaW5nKSB7XG4iCi0gICAgIiAg
ICBjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcgYiA9IFxuIgotICAgICIgICAgICAgIGNv
bS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoXG4iCi0gICAgIiAgICAg
ICAgICAgIChqYXZhLmxhbmcuU3RyaW5nKSByZWYpO1xuIgotICAgICIgICAgJG5hbWUkXyA9IGI7
XG4iCi0gICAgIiAgICByZXR1cm4gYjtcbiIKLSAgICAiICB9IGVsc2Uge1xuIgotICAgICIgICAg
cmV0dXJuIChjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcpIHJlZjtcbiIKLSAgICAiICB9
XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSBqYXZhLmxhbmcuT2Jq
ZWN0ICRuYW1lJF8gJGRlZmF1bHRfaW5pdCQ7XG4iKTsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNl
bmNlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJp
bnRlciwgZGVzY3JpcHRvcl8pOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpIHtc
biIKLSAgICAgICIgIHJldHVybiAkZ2V0X2hhc19maWVsZF9iaXRfYnVpbGRlciQ7XG4iCi0gICAg
ICAifVxuIik7Ci0gIH0KLQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlw
dG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRw
dWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAg
IiAgamF2YS5sYW5nLk9iamVjdCByZWYgPSAkbmFtZSRfO1xuIgotICAgICIgIGlmICghKHJlZiBp
bnN0YW5jZW9mIGphdmEubGFuZy5TdHJpbmcpKSB7XG4iCi0gICAgIiAgICBjb20uZ29vZ2xlLnBy
b3RvYnVmLkJ5dGVTdHJpbmcgYnMgPVxuIgotICAgICIgICAgICAgIChjb20uZ29vZ2xlLnByb3Rv
YnVmLkJ5dGVTdHJpbmcpIHJlZjtcbiIKLSAgICAiICAgIGphdmEubGFuZy5TdHJpbmcgcyA9IGJz
LnRvU3RyaW5nVXRmOCgpO1xuIik7Ci0gIGlmIChDaGVja1V0ZjgoZGVzY3JpcHRvcl8pKSB7Ci0g
ICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIgICAgJG5hbWUkXyA9IHM7XG4i
KTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiAg
ICBpZiAoYnMuaXNWYWxpZFV0ZjgoKSkge1xuIgotICAgICAgIiAgICAgICRuYW1lJF8gPSBzO1xu
IgotICAgICAgIiAgICB9XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICIgICAgcmV0dXJuIHM7XG4iCi0gICAgIiAgfSBlbHNlIHtcbiIKLSAgICAiICAgIHJldHVy
biAoamF2YS5sYW5nLlN0cmluZykgcmVmO1xuIgotICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci0K
LSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGNvbS5nb29nbGUu
cHJvdG9idWYuQnl0ZVN0cmluZ1xuIgotICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnl0
ZXMoKSB7XG4iCi0gICAgIiAgamF2YS5sYW5nLk9iamVjdCByZWYgPSAkbmFtZSRfO1xuIgotICAg
ICIgIGlmIChyZWYgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiIKLSAgICAiICAgIGNvbS5nb29nbGUu
cHJvdG9idWYuQnl0ZVN0cmluZyBiID0gXG4iCi0gICAgIiAgICAgICAgY29tLmdvb2dsZS5wcm90
b2J1Zi5CeXRlU3RyaW5nLmNvcHlGcm9tVXRmOChcbiIKLSAgICAiICAgICAgICAgICAgKGphdmEu
bGFuZy5TdHJpbmcpIHJlZik7XG4iCi0gICAgIiAgICAkbmFtZSRfID0gYjtcbiIKLSAgICAiICAg
IHJldHVybiBiO1xuIgotICAgICIgIH0gZWxzZSB7XG4iCi0gICAgIiAgICByZXR1cm4gKGNvbS5n
b29nbGUucHJvdG9idWYuQnl0ZVN0cmluZykgcmVmO1xuIgotICAgICIgIH1cbiIKLSAgICAifVxu
Iik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxk
ZXIgc2V0JGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgamF2YS5sYW5nLlN0cmluZyB2
YWx1ZSkge1xuIgotICAgICIkbnVsbF9jaGVjayQiCi0gICAgIiAgJHNldF9oYXNfZmllbGRfYml0
X2J1aWxkZXIkXG4iCi0gICAgIiAgJG5hbWUkXyA9IHZhbHVlO1xuIgotICAgICIgICRvbl9jaGFu
Z2VkJFxuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVs
ZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgY2xlYXIkY2FwaXRhbGl6
ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAgJGNsZWFyX2hhc19maWVsZF9iaXRfYnVpbGRlciRcbiIp
OwotICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBub3QgYSBzaW1wbGUgbGl0ZXJhbCBzbyB3ZSB3
YW50IHRvIGF2b2lkIGV4ZWN1dGluZwotICAvLyBpdCBtdWx0aXBsZSB0aW1lcy4gIEluc3RlYWQs
IGdldCB0aGUgZGVmYXVsdCBvdXQgb2YgdGhlIGRlZmF1bHQgaW5zdGFuY2UuCi0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgIiAgJG5hbWUkXyA9IGdldERlZmF1bHRJbnN0YW5jZSgp
LmdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIik7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgIiAgJG9uX2NoYW5nZWQkXG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAg
In1cbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBC
dWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJEJ5dGVzKFxuIgotICAgICIgICAgY29tLmdvb2ds
ZS5wcm90b2J1Zi5CeXRlU3RyaW5nIHZhbHVlKSB7XG4iCi0gICAgIiRudWxsX2NoZWNrJCIpOwot
ICBpZiAoQ2hlY2tVdGY4KGRlc2NyaXB0b3JfKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgICAiICBjaGVja0J5dGVTdHJpbmdJc1V0ZjgodmFsdWUpO1xuIik7Ci0gIH0K
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiICAkc2V0X2hhc19maWVsZF9iaXRf
YnVpbGRlciRcbiIKLSAgICAiICAkbmFtZSRfID0gdmFsdWU7XG4iCi0gICAgIiAgJG9uX2NoYW5n
ZWQkXG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIElt
bXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlRmllbGRCdWlsZGVySW5pdGlh
bGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSAgY29uc3QgewotICAvLyBub29wIGZv
ciBwcmltaXRpdmVzCi19Ci0KLXZvaWQgSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3I6Ogot
R2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgIiRuYW1lJF8gPSAkZGVmYXVsdCQ7XG4iKTsK
LX0KLQotdm9pZCBJbW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxk
ZXJDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiJG5hbWUkXyA9ICRkZWZhdWx0JDtcbiIKLSAgICAiJGNsZWFy
X2hhc19maWVsZF9iaXRfYnVpbGRlciRcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVN0cmluZ0Zp
ZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxlKCkp
KSB7Ci0gICAgLy8gQWxsb3cgYSBzbGlnaHQgYnJlYWNoIG9mIGFic3RyYWN0aW9uIGhlcmUgaW4g
b3JkZXIgdG8gYXZvaWQgZm9yY2luZwotICAgIC8vIGFsbCBzdHJpbmcgZmllbGRzIHRvIFN0cmlu
Z3Mgd2hlbiBjb3B5aW5nIGZpZWxkcyBmcm9tIGEgTWVzc2FnZS4KLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICAgImlmIChvdGhlci5oYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSkg
e1xuIgotICAgICAgIiAgJHNldF9oYXNfZmllbGRfYml0X2J1aWxkZXIkXG4iCi0gICAgICAiICAk
bmFtZSRfID0gb3RoZXIuJG5hbWUkXztcbiIKLSAgICAgICIgICRvbl9jaGFuZ2VkJFxuIgotICAg
ICAgIn1cbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0g
ICAgICAiaWYgKCFvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKS5pc0VtcHR5KCkpIHtcbiIK
LSAgICAgICIgICRuYW1lJF8gPSBvdGhlci4kbmFtZSRfO1xuIgotICAgICAgIiAgJG9uX2NoYW5n
ZWQkXG4iCi0gICAgICAifVxuIik7Ci0gIH0KLX0KLQotdm9pZCBJbW11dGFibGVTdHJpbmdGaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3JpcHRvcl8tPmZpbGUoKSkp
IHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImlmICgkZ2V0X2hhc19m
aWVsZF9iaXRfZnJvbV9sb2NhbCQpIHtcbiIKLSAgICAgICIgICRzZXRfaGFzX2ZpZWxkX2JpdF90
b19sb2NhbCQ7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAicmVzdWx0LiRuYW1lJF8gPSAkbmFtZSRfO1xuIik7Ci19Ci0KLXZvaWQgSW1t
dXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5nQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoQ2hlY2tVdGY4KGRlc2NyaXB0b3JfKSkgewot
ICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiamF2YS5sYW5nLlN0cmluZyBz
ID0gaW5wdXQucmVhZFN0cmluZ1JlcXVpcmVVdGY4KCk7XG4iCi0gICAgICAiJHNldF9oYXNfZmll
bGRfYml0X21lc3NhZ2UkXG4iCi0gICAgICAiJG5hbWUkXyA9IHM7XG4iKTsKLSAgfSBlbHNlIHsK
LSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImNvbS5nb29nbGUucHJvdG9i
dWYuQnl0ZVN0cmluZyBicyA9IGlucHV0LnJlYWRCeXRlcygpO1xuIgotICAgICAgIiRzZXRfaGFz
X2ZpZWxkX2JpdF9tZXNzYWdlJFxuIgotICAgICAgIiRuYW1lJF8gPSBicztcbiIpOwotICB9Ci19
Ci0KLXZvaWQgSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJzaW5n
RG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gbm9vcCBmb3Igc3Ry
aW5ncy4KLX0KLQotdm9pZCBJbW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICgkaXNfZmllbGRfcHJlc2VudF9tZXNzYWdl
JCkge1xuIgotICAgICIgICR3cml0ZVN0cmluZyQob3V0cHV0LCAkbnVtYmVyJCwgJG5hbWUkXyk7
XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICgkaXNfZmllbGRfcHJl
c2VudF9tZXNzYWdlJCkge1xuIgotICAgICIgIHNpemUgKz0gJGNvbXB1dGVTdHJpbmdTaXplJCgk
bnVtYmVyJCwgJG5hbWUkXyk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVN0
cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJyZXN1bHQg
PSByZXN1bHQgJiYgZ2V0JGNhcGl0YWxpemVkX25hbWUkKClcbiIKLSAgICAiICAgIC5lcXVhbHMo
b3RoZXIuZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkpO1xuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxl
U3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNoQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJoYXNoID0g
KDM3ICogaGFzaCkgKyAkY29uc3RhbnRfbmFtZSQ7XG4iKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiaGFzaCA9ICg1MyAqIGhhc2gpICsgZ2V0JGNhcGl0YWxpemVkX25hbWUk
KCkuaGFzaENvZGUoKTtcbiIpOwotfQotCi1zdHJpbmcgSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5l
cmF0b3I6OkdldEJveGVkVHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJuICJqYXZhLmxhbmcuU3RyaW5n
IjsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotCi1JbW11dGFibGVTdHJpbmdPbmVvZkZpZWxkR2VuZXJh
dG9yOjoKLUltbXV0YWJsZVN0cmluZ09uZW9mRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYnVpbGRlckJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b250ZXh0KiBjb250ZXh0KQotICAgIDogSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3IoCi0g
ICAgICAgICAgZGVzY3JpcHRvciwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsIGNv
bnRleHQpIHsKLSAgY29uc3QgT25lb2ZHZW5lcmF0b3JJbmZvKiBpbmZvID0KLSAgICAgIGNvbnRl
eHQtPkdldE9uZW9mR2VuZXJhdG9ySW5mbyhkZXNjcmlwdG9yLT5jb250YWluaW5nX29uZW9mKCkp
OwotICBTZXRDb21tb25PbmVvZlZhcmlhYmxlcyhkZXNjcmlwdG9yLCBpbmZvLCAmdmFyaWFibGVz
Xyk7Ci19Ci0KLUltbXV0YWJsZVN0cmluZ09uZW9mRmllbGRHZW5lcmF0b3I6OgotfkltbXV0YWJs
ZVN0cmluZ09uZW9mRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIEltbXV0YWJsZVN0cmluZ09u
ZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIFByaW50RXh0cmFGaWVsZEluZm8odmFyaWFibGVzXywgcHJpbnRlcik7Ci0K
LSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gIFdy
aXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBib29sZWFuIGhhcyRjYXBp
dGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICByZXR1cm4gJGhhc19vbmVvZl9jYXNlX21lc3Nh
Z2UkO1xuIgotICAgICJ9XG4iKTsKLSAgfQotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50
ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRl
cHJlY2F0aW9uJHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldCRjYXBpdGFsaXplZF9uYW1lJCgp
IHtcbiIKLSAgICAiICBqYXZhLmxhbmcuT2JqZWN0IHJlZiAkZGVmYXVsdF9pbml0JDtcbiIKLSAg
ICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICByZWYgPSAk
b25lb2ZfbmFtZSRfO1xuIgotICAgICIgIH1cbiIKLSAgICAiICBpZiAocmVmIGluc3RhbmNlb2Yg
amF2YS5sYW5nLlN0cmluZykge1xuIgotICAgICIgICAgcmV0dXJuIChqYXZhLmxhbmcuU3RyaW5n
KSByZWY7XG4iCi0gICAgIiAgfSBlbHNlIHtcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9i
dWYuQnl0ZVN0cmluZyBicyA9IFxuIgotICAgICIgICAgICAgIChjb20uZ29vZ2xlLnByb3RvYnVm
LkJ5dGVTdHJpbmcpIHJlZjtcbiIKLSAgICAiICAgIGphdmEubGFuZy5TdHJpbmcgcyA9IGJzLnRv
U3RyaW5nVXRmOCgpO1xuIik7Ci0gIGlmIChDaGVja1V0ZjgoZGVzY3JpcHRvcl8pKSB7Ci0gICAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiICAgIGlmICgkaGFzX29uZW9mX2Nhc2Vf
bWVzc2FnZSQpIHtcbiIKLSAgICAiICAgICAgJG9uZW9mX25hbWUkXyA9IHM7XG4iCi0gICAgIiAg
ICB9XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICIgICAgaWYgKGJzLmlzVmFsaWRVdGY4KCkgJiYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkp
IHtcbiIKLSAgICAiICAgICAgJG9uZW9mX25hbWUkXyA9IHM7XG4iCi0gICAgIiAgICB9XG4iKTsK
LSAgfQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIgICAgcmV0dXJuIHM7XG4i
Ci0gICAgIiAgfVxuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nXG4iCi0gICAg
IiAgICBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRCeXRlcygpIHtcbiIKLSAgICAiICBqYXZhLmxhbmcu
T2JqZWN0IHJlZiAkZGVmYXVsdF9pbml0JDtcbiIKLSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNl
X21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICByZWYgPSAkb25lb2ZfbmFtZSRfO1xuIgotICAgICIg
IH1cbiIKLSAgICAiICBpZiAocmVmIGluc3RhbmNlb2YgamF2YS5sYW5nLlN0cmluZykge1xuIgot
ICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nIGIgPSBcbiIKLSAgICAiICAg
ICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcuY29weUZyb21VdGY4KFxuIgotICAg
ICIgICAgICAgICAgICAoamF2YS5sYW5nLlN0cmluZykgcmVmKTtcbiIKLSAgICAiICAgIGlmICgk
aGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIKLSAgICAiICAgICAgJG9uZW9mX25hbWUkXyA9
IGI7XG4iCi0gICAgIiAgICB9XG4iCi0gICAgIiAgICByZXR1cm4gYjtcbiIKLSAgICAiICB9IGVs
c2Uge1xuIgotICAgICIgICAgcmV0dXJuIChjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcp
IHJlZjtcbiIKLSAgICAiICB9XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVN0
cmluZ09uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3Jp
cHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVj
YXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICAg
IiAgcmV0dXJuICRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAgICJ9XG4iKTsKLSAg
fQotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZhLmxh
bmcuU3RyaW5nIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICBqYXZhLmxhbmcu
T2JqZWN0IHJlZiAkZGVmYXVsdF9pbml0JDtcbiIKLSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNl
X21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICByZWYgPSAkb25lb2ZfbmFtZSRfO1xuIgotICAgICIg
IH1cbiIKLSAgICAiICBpZiAoIShyZWYgaW5zdGFuY2VvZiBqYXZhLmxhbmcuU3RyaW5nKSkge1xu
IgotICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nIGJzID1cbiIKLSAgICAi
ICAgICAgICAoY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nKSByZWY7XG4iCi0gICAgIiAg
ICBqYXZhLmxhbmcuU3RyaW5nIHMgPSBicy50b1N0cmluZ1V0ZjgoKTtcbiIKLSAgICAiICAgIGlm
ICgkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIpOwotICBpZiAoQ2hlY2tVdGY4KGRlc2Ny
aXB0b3JfKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiICAgICAg
JG9uZW9mX25hbWUkXyA9IHM7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgIiAgICAgIGlmIChicy5pc1ZhbGlkVXRmOCgpKSB7XG4iCi0gICAg
ICAiICAgICAgICAkb25lb2ZfbmFtZSRfID0gcztcbiIKLSAgICAgICIgICAgICB9XG4iKTsKLSAg
fQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIgICAgfVxuIgotICAgICIgICAg
cmV0dXJuIHM7XG4iCi0gICAgIiAgfSBlbHNlIHtcbiIKLSAgICAiICAgIHJldHVybiAoamF2YS5s
YW5nLlN0cmluZykgcmVmO1xuIgotICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGNvbS5nb29nbGUucHJvdG9idWYu
Qnl0ZVN0cmluZ1xuIgotICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnl0ZXMoKSB7XG4i
Ci0gICAgIiAgamF2YS5sYW5nLk9iamVjdCByZWYgJGRlZmF1bHRfaW5pdCQ7XG4iCi0gICAgIiAg
aWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgICAgcmVmID0gJG9uZW9m
X25hbWUkXztcbiIKLSAgICAiICB9XG4iCi0gICAgIiAgaWYgKHJlZiBpbnN0YW5jZW9mIFN0cmlu
Zykge1xuIgotICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nIGIgPSBcbiIK
LSAgICAiICAgICAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcuY29weUZyb21VdGY4
KFxuIgotICAgICIgICAgICAgICAgICAoamF2YS5sYW5nLlN0cmluZykgcmVmKTtcbiIKLSAgICAi
ICAgIGlmICgkaGFzX29uZW9mX2Nhc2VfbWVzc2FnZSQpIHtcbiIKLSAgICAiICAgICAgJG9uZW9m
X25hbWUkXyA9IGI7XG4iCi0gICAgIiAgICB9XG4iCi0gICAgIiAgICByZXR1cm4gYjtcbiIKLSAg
ICAiICB9IGVsc2Uge1xuIgotICAgICIgICAgcmV0dXJuIChjb20uZ29vZ2xlLnByb3RvYnVmLkJ5
dGVTdHJpbmcpIHJlZjtcbiIKLSAgICAiICB9XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRjYXBpdGFsaXpl
ZF9uYW1lJChcbiIKLSAgICAiICAgIGphdmEubGFuZy5TdHJpbmcgdmFsdWUpIHtcbiIKLSAgICAi
JG51bGxfY2hlY2skIgotICAgICIgICRzZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAi
ICAkb25lb2ZfbmFtZSRfID0gdmFsdWU7XG4iCi0gICAgIiAgJG9uX2NoYW5nZWQkXG4iCi0gICAg
IiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChw
cmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
IiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtc
biIKLSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICAk
Y2xlYXJfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAiICAgICRvbmVvZl9uYW1lJF8gPSBu
dWxsO1xuIgotICAgICIgICAgJG9uX2NoYW5nZWQkXG4iCi0gICAgIiAgfVxuIgotICAgICIgIHJl
dHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSRCeXRlcyhcbiIK
LSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZyB2YWx1ZSkge1xuIgotICAg
ICIkbnVsbF9jaGVjayQiKTsKLSAgaWYgKENoZWNrVXRmOChkZXNjcmlwdG9yXykpIHsKLSAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiAgY2hlY2tCeXRlU3RyaW5nSXNVdGY4
KHZhbHVlKTtcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiAg
JHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICIgICRvbmVvZl9uYW1lJF8gPSB2YWx1
ZTtcbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAg
ICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlU3RyaW5nT25lb2ZGaWVsZEdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8v
IEFsbG93IGEgc2xpZ2h0IGJyZWFjaCBvZiBhYnN0cmFjdGlvbiBoZXJlIGluIG9yZGVyIHRvIGF2
b2lkIGZvcmNpbmcKLSAgLy8gYWxsIHN0cmluZyBmaWVsZHMgdG8gU3RyaW5ncyB3aGVuIGNvcHlp
bmcgZmllbGRzIGZyb20gYSBNZXNzYWdlLgotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICIkc2V0X29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgIiRvbmVvZl9uYW1lJF8gPSBv
dGhlci4kb25lb2ZfbmFtZSRfO1xuIgotICAgICIkb25fY2hhbmdlZCRcbiIpOwotfQotCi12b2lk
IEltbXV0YWJsZVN0cmluZ09uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGluZ0Nv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgIHJl
c3VsdC4kb25lb2ZfbmFtZSRfID0gJG9uZW9mX25hbWUkXztcbiIKLSAgICAifVxuIik7Ci19Ci0K
LXZvaWQgSW1tdXRhYmxlU3RyaW5nT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNp
bmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChDaGVja1V0ZjgoZGVz
Y3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJqYXZh
LmxhbmcuU3RyaW5nIHMgPSBpbnB1dC5yZWFkU3RyaW5nUmVxdWlyZVV0ZjgoKTtcbiIKLSAgICAg
ICIkc2V0X29uZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgICAiJG9uZW9mX25hbWUkXyA9IHM7
XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
ImNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZyBicyA9IGlucHV0LnJlYWRCeXRlcygpO1xu
IgotICAgICAgIiRzZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAgICIkb25lb2ZfbmFt
ZSRfID0gYnM7XG4iKTsKLSAgfQotfQotCi12b2lkIEltbXV0YWJsZVN0cmluZ09uZW9mRmllbGRH
ZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoJGhhc19v
bmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgJHdyaXRlU3RyaW5nJChvdXRwdXQsICRu
dW1iZXIkLCAkb25lb2ZfbmFtZSRfKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRh
YmxlU3RyaW5nT25lb2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICJpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgc2l6
ZSArPSAkY29tcHV0ZVN0cmluZ1NpemUkKCRudW1iZXIkLCAkb25lb2ZfbmFtZSRfKTtcbiIKLSAg
ICAifVxuIik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdG
aWVsZEdlbmVyYXRvcjo6Ci1SZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yKGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCogY29udGV4dCkKLSAgOiBkZXNjcmlwdG9yXyhk
ZXNjcmlwdG9yKSwgbWVzc2FnZUJpdEluZGV4XyhtZXNzYWdlQml0SW5kZXgpLAotICAgIGJ1aWxk
ZXJCaXRJbmRleF8oYnVpbGRlckJpdEluZGV4KSwgY29udGV4dF8oY29udGV4dCksCi0gICAgbmFt
ZV9yZXNvbHZlcl8oY29udGV4dC0+R2V0TmFtZVJlc29sdmVyKCkpIHsKLSAgU2V0UHJpbWl0aXZl
VmFyaWFibGVzKGRlc2NyaXB0b3IsIG1lc3NhZ2VCaXRJbmRleCwgYnVpbGRlckJpdEluZGV4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+R2V0RmllbGRHZW5lcmF0b3JJbmZvKGRl
c2NyaXB0b3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9yZXNvbHZlcl8sICZ2YXJp
YWJsZXNfKTsKLX0KLQotUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcjo6Ci1+
UmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcigpIHt9Ci0KLWludCBSZXBlYXRl
ZEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yOjpHZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNv
bnN0IHsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxk
R2VuZXJhdG9yOjpHZXROdW1CaXRzRm9yQnVpbGRlcigpIGNvbnN0IHsKLSAgcmV0dXJuIDE7Ci19
Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZUludGVyZmFjZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgV3JpdGVG
aWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kY29tLmdvb2dsZS5wcm90b2J1Zi5Qcm90b2Nv
bFN0cmluZ0xpc3RcbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKTtcbiIp
OwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRpbnQgZ2V0JGNhcGl0YWxp
emVkX25hbWUkQ291bnQoKTtcbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNh
dGlvbiRqYXZhLmxhbmcuU3RyaW5nIGdldCRjYXBpdGFsaXplZF9uYW1lJChpbnQgaW5kZXgpO1xu
Iik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJGNvbS5nb29nbGUucHJv
dG9idWYuQnl0ZVN0cmluZ1xuIgotICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnl0ZXMo
aW50IGluZGV4KTtcbiIpOwotfQotCi0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSBjb20uZ29vZ2xl
LnByb3RvYnVmLkxhenlTdHJpbmdMaXN0ICRuYW1lJF87XG4iKTsKLSAgUHJpbnRFeHRyYUZpZWxk
SW5mbyh2YXJpYWJsZXNfLCBwcmludGVyKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVw
cmVjYXRpb24kcHVibGljIGNvbS5nb29nbGUucHJvdG9idWYuUHJvdG9jb2xTdHJpbmdMaXN0XG4i
Ci0gICAgIiAgICBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkge1xuIgotICAgICIgIHJldHVy
biAkbmFtZSRfO1xuIiAgIC8vIG5vdGU6ICB1bm1vZGlmaWFibGUgbGlzdAotICAgICJ9XG4iKTsK
LSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGludCBnZXQkY2Fw
aXRhbGl6ZWRfbmFtZSRDb3VudCgpIHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXy5zaXplKCk7
XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlw
dG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRw
dWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoaW50IGluZGV4KSB7
XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF8uZ2V0KGluZGV4KTtcbiIKLSAgICAifVxuIik7Ci0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBjb20uZ29vZ2xlLnBy
b3RvYnVmLkJ5dGVTdHJpbmdcbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJEJ5dGVz
KGludCBpbmRleCkge1xuIgotICAgICIgIHJldHVybiAkbmFtZSRfLmdldEJ5dGVTdHJpbmcoaW5k
ZXgpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0Zp
ZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0IHsKLSAgLy8gT25lIGZpZWxkIGlzIHRoZSBsaXN0IGFuZCB0aGUgYml0IGZpZWxk
IGtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlCi0gIC8vIGxpc3QgaXMgaW1tdXRhYmxlLiBJZiBp
dCdzIGltbXV0YWJsZSwgdGhlIGludmFyaWFudCBpcyB0aGF0IGl0IG11c3QKLSAgLy8gZWl0aGVy
IGFuIGluc3RhbmNlIG9mIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpIG9yIGl0J3MgYW4gQXJyYXlM
aXN0Ci0gIC8vIHdyYXBwZWQgaW4gYSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KCkgd3Jh
cHBlciBhbmQgbm9ib2R5IGVsc2UgaGFzCi0gIC8vIGEgcmVmZXJlcmVuY2UgdG8gdGhlIHVuZGVy
bHlpbmcgQXJyYXlMaXN0LiBUaGlzIGludmFyaWFudCBhbGxvd3MgdXMgdG8KLSAgLy8gc2hhcmUg
aW5zdGFuY2VzIG9mIGxpc3RzIGJldHdlZW4gcHJvdG9jb2wgYnVmZmVycyBhdm9pZGluZyBleHBl
bnNpdmUKLSAgLy8gbWVtb3J5IGFsbG9jYXRpb25zLiBOb3RlLCBpbW11dGFibGUgaXMgYSBzdHJv
bmcgZ3VhcmFudGVlIGhlcmUgLS0gbm90Ci0gIC8vIGp1c3QgdGhhdCB0aGUgbGlzdCBjYW5ub3Qg
YmUgbW9kaWZpZWQgdmlhIHRoZSByZWZlcmVuY2UgYnV0IHRoYXQgdGhlCi0gIC8vIGxpc3QgY2Fu
IG5ldmVyIGJlIG1vZGlmaWVkLgotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJw
cml2YXRlIGNvbS5nb29nbGUucHJvdG9idWYuTGF6eVN0cmluZ0xpc3QgJG5hbWUkXyA9ICRlbXB0
eV9saXN0JDtcbiIpOwotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZh
dGUgdm9pZCBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKSB7XG4iCi0gICAgIiAg
aWYgKCEkZ2V0X211dGFibGVfYml0X2J1aWxkZXIkKSB7XG4iCi0gICAgIiAgICAkbmFtZSRfID0g
bmV3IGNvbS5nb29nbGUucHJvdG9idWYuTGF6eVN0cmluZ0FycmF5TGlzdCgkbmFtZSRfKTtcbiIK
LSAgICAiICAgICRzZXRfbXV0YWJsZV9iaXRfYnVpbGRlciQ7XG4iCi0gICAgIiAgIH1cbiIKLSAg
ICAifVxuIik7Ci0KLSAgICAvLyBOb3RlOiAgV2UgcmV0dXJuIGFuIHVubW9kaWZpYWJsZSBsaXN0
IGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBjYWxsZXIKLSAgICAvLyAgIGNvdWxkIGhvbGQgb24gdG8g
dGhlIHJldHVybmVkIGxpc3QgYW5kIG1vZGlmeSBpdCBhZnRlciB0aGUgbWVzc2FnZQotICAgIC8v
ICAgaGFzIGJlZW4gYnVpbHQsIHRodXMgbXV0YXRpbmcgdGhlIG1lc3NhZ2Ugd2hpY2ggaXMgc3Vw
cG9zZWQgdG8gYmUKLSAgICAvLyAgIGltbXV0YWJsZS4KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQo
cHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICIkZGVwcmVjYXRpb24kcHVibGljIGNvbS5nb29nbGUucHJvdG9idWYuUHJvdG9jb2xTdHJpbmdM
aXN0XG4iCi0gICAgIiAgICBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkge1xuIgotICAgICIg
IHJldHVybiAkbmFtZSRfLmdldFVubW9kaWZpYWJsZVZpZXcoKTtcbiIKLSAgICAifVxuIik7Ci0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0
YWxpemVkX25hbWUkQ291bnQoKSB7XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF8uc2l6ZSgpO1xu
IgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRv
cl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVi
bGljIGphdmEubGFuZy5TdHJpbmcgZ2V0JGNhcGl0YWxpemVkX25hbWUkKGludCBpbmRleCkge1xu
IgotICAgICIgIHJldHVybiAkbmFtZSRfLmdldChpbmRleCk7XG4iCi0gICAgIn1cbiIpOwotICBX
cml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgY29tLmdvb2dsZS5wcm90
b2J1Zi5CeXRlU3RyaW5nXG4iCi0gICAgIiAgICBnZXQkY2FwaXRhbGl6ZWRfbmFtZSRCeXRlcyhp
bnQgaW5kZXgpIHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXy5nZXRCeXRlU3RyaW5nKGluZGV4
KTtcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2Ny
aXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9u
JHB1YmxpYyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgIGludCBp
bmRleCwgamF2YS5sYW5nLlN0cmluZyB2YWx1ZSkge1xuIgotICAgICIkbnVsbF9jaGVjayQiCi0g
ICAgIiAgZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5h
bWUkXy5zZXQoaW5kZXgsIHZhbHVlKTtcbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAi
ICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHBy
aW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
JGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGFkZCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAg
ICAiICAgIGphdmEubGFuZy5TdHJpbmcgdmFsdWUpIHtcbiIKLSAgICAiJG51bGxfY2hlY2skIgot
ICAgICIgIGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRu
YW1lJF8uYWRkKHZhbHVlKTtcbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAiICByZXR1
cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIs
IGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJl
Y2F0aW9uJHB1YmxpYyBCdWlsZGVyIGFkZEFsbCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAi
ICAgIGphdmEubGFuZy5JdGVyYWJsZTxqYXZhLmxhbmcuU3RyaW5nPiB2YWx1ZXMpIHtcbiIKLSAg
ICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAiICBjb20u
Z29vZ2xlLnByb3RvYnVmLkFic3RyYWN0TWVzc2FnZUxpdGUuQnVpbGRlci5hZGRBbGwoXG4iCi0g
ICAgIiAgICAgIHZhbHVlcywgJG5hbWUkXyk7XG4iCi0gICAgIiAgJG9uX2NoYW5nZWQkXG4iCi0g
ICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVu
dChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0g
ICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgp
IHtcbiIKLSAgICAiICAkbmFtZSRfID0gJGVtcHR5X2xpc3QkO1xuIgotICAgICIgICRjbGVhcl9t
dXRhYmxlX2JpdF9idWlsZGVyJDtcbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAiICBy
ZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJp
bnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIk
ZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgYWRkJGNhcGl0YWxpemVkX25hbWUkQnl0ZXMoXG4i
Ci0gICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcgdmFsdWUpIHtcbiIKLSAg
ICAiJG51bGxfY2hlY2skIik7Ci0gIGlmIChDaGVja1V0ZjgoZGVzY3JpcHRvcl8pKSB7Ci0gICAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIgIGNoZWNrQnl0ZVN0cmluZ0lzVXRm
OCh2YWx1ZSk7XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIg
IGVuc3VyZSRjYXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgICRuYW1lJF8u
YWRkKHZhbHVlKTtcbiIKLSAgICAiICAkb25fY2hhbmdlZCRcbiIKLSAgICAiICByZXR1cm4gdGhp
cztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgIGNvbnN0IHsKLSAgLy8gbm9vcCBmb3IgcHJpbWl0aXZlcwotfQot
Ci12b2lkIFJlcGVhdGVkSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVJ
bml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywgIiRuYW1lJF8gPSAkZW1wdHlfbGlzdCQ7XG4iKTsKLX0KLQot
dm9pZCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVp
bGRlckNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICIkbmFtZSRfID0gJGVtcHR5X2xpc3QkO1xuIgotICAgICIk
Y2xlYXJfbXV0YWJsZV9iaXRfYnVpbGRlciQ7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0
YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gVGhlIGNvZGUgYmVsb3cgZG9lcyB0d28gb3B0aW1p
emF0aW9uczoKLSAgLy8gICAxLiBJZiB0aGUgb3RoZXIgbGlzdCBpcyBlbXB0eSwgdGhlcmUncyBu
b3RoaW5nIHRvIGRvLiBUaGlzIGVuc3VyZXMgd2UKLSAgLy8gICAgICBkb24ndCBhbGxvY2F0ZSBh
IG5ldyBhcnJheSBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW1tdXRhYmxlIG9uZS4KLSAgLy8gICAy
LiBJZiB0aGUgb3RoZXIgbGlzdCBpcyBub24tZW1wdHkgYW5kIG91ciBjdXJyZW50IGxpc3QgaXMg
ZW1wdHksIHdlIGNhbgotICAvLyAgICAgIHJldXNlIHRoZSBvdGhlciBsaXN0IHdoaWNoIGlzIGd1
YXJhbnRlZWQgdG8gYmUgaW1tdXRhYmxlLgotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICJpZiAoIW90aGVyLiRuYW1lJF8uaXNFbXB0eSgpKSB7XG4iCi0gICAgIiAgaWYgKCRuYW1l
JF8uaXNFbXB0eSgpKSB7XG4iCi0gICAgIiAgICAkbmFtZSRfID0gb3RoZXIuJG5hbWUkXztcbiIK
LSAgICAiICAgICRjbGVhcl9tdXRhYmxlX2JpdF9idWlsZGVyJDtcbiIKLSAgICAiICB9IGVsc2Ug
e1xuIgotICAgICIgICAgZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0g
ICAgIiAgICAkbmFtZSRfLmFkZEFsbChvdGhlci4kbmFtZSRfKTtcbiIKLSAgICAiICB9XG4iCi0g
ICAgIiAgJG9uX2NoYW5nZWQkXG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1t
dXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGluZ0NvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gVGhlIGNvZGUgYmVsb3cgZW5zdXJlcyB0aGF0
IHRoZSByZXN1bHQgaGFzIGFuIGltbXV0YWJsZSBsaXN0LiBJZiBvdXIKLSAgLy8gbGlzdCBpcyBp
bW11dGFibGUsIHdlIGNhbiBqdXN0IHJldXNlIGl0LiBJZiBub3QsIHdlIG1ha2UgaXQgaW1tdXRh
YmxlLgotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICgkZ2V0X211dGFi
bGVfYml0X2J1aWxkZXIkKSB7XG4iCi0gICAgIiAgJG5hbWUkXyA9ICRuYW1lJF8uZ2V0VW5tb2Rp
ZmlhYmxlVmlldygpO1xuIgotICAgICIgICRjbGVhcl9tdXRhYmxlX2JpdF9idWlsZGVyJDtcbiIK
LSAgICAifVxuIgotICAgICJyZXN1bHQuJG5hbWUkXyA9ICRuYW1lJF87XG4iKTsKLX0KLQotdm9p
ZCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2lu
Z0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKENoZWNrVXRmOChkZXNj
cmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJqYXZhLmxh
bmcuU3RyaW5nIHMgPSBpbnB1dC5yZWFkU3RyaW5nUmVxdWlyZVV0ZjgoKTtcbiIpOwotICB9IGVs
c2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImNvbS5nb29nbGUucHJv
dG9idWYuQnl0ZVN0cmluZyBicyA9IGlucHV0LnJlYWRCeXRlcygpO1xuIik7Ci0gIH0KLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCEkZ2V0X211dGFibGVfYml0X3BhcnNl
ciQpIHtcbiIKLSAgICAiICAkbmFtZSRfID0gbmV3IGNvbS5nb29nbGUucHJvdG9idWYuTGF6eVN0
cmluZ0FycmF5TGlzdCgpO1xuIgotICAgICIgICRzZXRfbXV0YWJsZV9iaXRfcGFyc2VyJDtcbiIK
LSAgICAifVxuIik7Ci0gIGlmIChDaGVja1V0ZjgoZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkbmFtZSRfLmFkZChzKTtcbiIpOwotICB9IGVs
c2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJG5hbWUkXy5hZGQo
YnMpO1xuIik7Ci0gIH0KLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkR2Vu
ZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0RvbmVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICgkZ2V0X211dGFi
bGVfYml0X3BhcnNlciQpIHtcbiIKLSAgICAiICAkbmFtZSRfID0gJG5hbWUkXy5nZXRVbm1vZGlm
aWFibGVWaWV3KCk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxl
U3RyaW5nRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICJmb3IgKGludCBpID0gMDsgaSA8ICRuYW1lJF8uc2l6ZSgpOyBpKyspIHtcbiIKLSAgICAiICAk
d3JpdGVTdHJpbmckKG91dHB1dCwgJG51bWJlciQsICRuYW1lJF8uZ2V0UmF3KGkpKTtcbiIKLSAg
ICAifVxuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJ7XG4iCi0gICAgIiAgaW50
IGRhdGFTaXplID0gMDtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICJmb3IgKGludCBpID0gMDsgaSA8ICRuYW1lJF8uc2l6ZSgp
OyBpKyspIHtcbiIKLSAgICAiICBkYXRhU2l6ZSArPSBjb21wdXRlU3RyaW5nU2l6ZU5vVGFnKCRu
YW1lJF8uZ2V0UmF3KGkpKTtcbiIKLSAgICAifVxuIik7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgICAic2l6ZSArPSBkYXRhU2l6ZTtcbiIpOwotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgInNpemUgKz0gJHRhZ19zaXplJCAqIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3Qo
KS5zaXplKCk7XG4iKTsKLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50
KCJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9y
OjoKLUdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJyZXN1bHQgPSByZXN1bHQgJiYgZ2V0JGNh
cGl0YWxpemVkX25hbWUkTGlzdCgpXG4iCi0gICAgIiAgICAuZXF1YWxzKG90aGVyLmdldCRjYXBp
dGFsaXplZF9uYW1lJExpc3QoKSk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVN0
cmluZ0ZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKGdldCRj
YXBpdGFsaXplZF9uYW1lJENvdW50KCkgPiAwKSB7XG4iCi0gICAgIiAgaGFzaCA9ICgzNyAqIGhh
c2gpICsgJGNvbnN0YW50X25hbWUkO1xuIgotICAgICIgIGhhc2ggPSAoNTMgKiBoYXNoKSArIGdl
dCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKS5oYXNoQ29kZSgpO1xuIgotICAgICJ9XG4iKTsKLX0K
LQotc3RyaW5nIFJlcGVhdGVkSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3I6OkdldEJveGVk
VHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJuICJTdHJpbmciOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
amF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYK
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfc3RyaW5nX2ZpZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YS9qYXZhX3N0cmluZ19maWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhM2I1NzM1MWRjYWUzNmQyYjIyMzFkNjliNjk3N2ZmNDFkNzA4Y2FiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9qYXZhL2phdmFfc3RyaW5nX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjog
a2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vIEF1dGhvcjogam9ucEBnb29nbGUu
Y29tIChKb24gUGVybG93KQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMg
ZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0K
LSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfU1RSSU5HX0ZJRUxEX0hfXwot
I2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9TVFJJTkdfRklFTERfSF9fCi0K
LSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1u
YW1lc3BhY2UgcHJvdG9idWYgewotICBuYW1lc3BhY2UgY29tcGlsZXIgewotICAgIG5hbWVzcGFj
ZSBqYXZhIHsKLSAgICAgIGNsYXNzIENvbnRleHQ7ICAgICAgICAgICAvLyBjb250ZXh0LmgKLSAg
ICAgIGNsYXNzIENsYXNzTmFtZVJlc29sdmVyOyAvLyBuYW1lX3Jlc29sdmVyLmgKLSAgICB9Ci0g
IH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1l
c3BhY2UgamF2YSB7Ci0KLWNsYXNzIEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yIDogcHVi
bGljIEltbXV0YWJsZUZpZWxkR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEltbXV0
YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yKAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yLCBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgaW50IGJ1aWxkZXJCaXRJbmRl
eCwgQ29udGV4dCogY29udGV4dCk7Ci0gIH5JbW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcigp
OwotCi0gIC8vIGltcGxlbWVudHMgSW1tdXRhYmxlRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGludCBHZXROdW1CaXRzRm9yTWVzc2FnZSgp
IGNvbnN0OwotICBpbnQgR2V0TnVtQml0c0ZvckJ1aWxkZXIoKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZUludGVyZmFjZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2Vu
ZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQg
R2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlQnVpbGRlckNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGluZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlUGFyc2luZ0RvbmVDb2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVGaWVsZEJ1aWxkZXJJbml0aWFs
aXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
RXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVI
YXNoQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSAgc3RyaW5nIEdldEJveGVk
VHlwZSgpIGNvbnN0OwotCi0gcHJvdGVjdGVkOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRl
c2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0gIGNvbnN0IGlu
dCBtZXNzYWdlQml0SW5kZXhfOwotICBjb25zdCBpbnQgYnVpbGRlckJpdEluZGV4XzsKLSAgQ29u
dGV4dCogY29udGV4dF87Ci0gIENsYXNzTmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLQot
IHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhJbW11dGFibGVT
dHJpbmdGaWVsZEdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBJbW11dGFibGVTdHJpbmdPbmVvZkZp
ZWxkR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgSW1tdXRhYmxlU3RyaW5nRmllbGRHZW5lcmF0b3Ig
ewotIHB1YmxpYzoKLSAgSW1tdXRhYmxlU3RyaW5nT25lb2ZGaWVsZEdlbmVyYXRvcigKLSAgICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50IG1lc3NhZ2VCaXRJbmRleCwK
LSAgICAgIGludCBidWlsZGVyQml0SW5kZXgsIENvbnRleHQqIGNvbnRleHQpOwotICB+SW1tdXRh
YmxlU3RyaW5nT25lb2ZGaWVsZEdlbmVyYXRvcigpOwotCi0gcHJpdmF0ZToKLSAgdm9pZCBHZW5l
cmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
QnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlQnVpbGRpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEltbXV0YWJsZVN0cmluZ09u
ZW9mRmllbGRHZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdG
aWVsZEdlbmVyYXRvciA6IHB1YmxpYyBJbW11dGFibGVGaWVsZEdlbmVyYXRvciB7Ci0gcHVibGlj
OgotICBleHBsaWNpdCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yKAotICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQgbWVzc2FnZUJpdEluZGV4
LAotICAgICAgaW50IGJ1aWxkZXJCaXRJbmRleCwgQ29udGV4dCogY29udGV4dCk7Ci0gIH5SZXBl
YXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBJ
bW11dGFibGVGaWVsZEdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgaW50IEdldE51bUJpdHNGb3JNZXNzYWdlKCkgY29uc3Q7Ci0gIGludCBHZXROdW1C
aXRzRm9yQnVpbGRlcigpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSW50ZXJmYWNlTWVtYmVycyhp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUluaXRpYWxpemF0aW9u
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGVy
Q2xlYXJDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1l
cmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1
aWxkaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQ
YXJzaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQ
YXJzaW5nRG9uZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lk
IEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsK
LSAgdm9pZCBHZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdDsKLQotICBzdHJpbmcgR2V0Qm94ZWRUeXBlKCkgY29uc3Q7Ci0KLSBwcml2
YXRlOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5n
LCBzdHJpbmc+IHZhcmlhYmxlc187Ci0gIGNvbnN0IGludCBtZXNzYWdlQml0SW5kZXhfOwotICBj
b25zdCBpbnQgYnVpbGRlckJpdEluZGV4XzsKLSAgQ29udGV4dCogY29udGV4dF87Ci0gIENsYXNz
TmFtZVJlc29sdmVyKiBuYW1lX3Jlc29sdmVyXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9D
T05TVFJVQ1RPUlMoUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZEdlbmVyYXRvcik7Ci19Owot
Ci19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBH
T09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9TVFJJTkdfRklFTERfSF9fCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3N0cmluZ19maWVsZF9saXRl
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zdHJpbmdfZmllbGRf
bGl0ZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5MmMwMjE4NTJkODM2MDZh
OTIwNmNmMDlmNGJiOTRmZDI2ZjdhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3N0cmlu
Z19maWVsZF9saXRlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsODcyICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29t
IChLZW50b24gVmFyZGEpCi0vLyBBdXRob3I6IGpvbnBAZ29vZ2xlLmNvbSAoSm9uIFBlcmxvdykK
LS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNh
bmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8bWFwPgot
I2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dn
aW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfY29udGV4dC5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX25hbWVfcmVzb2x2ZXIu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3N0cmluZ19m
aWVsZF9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFj
ZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmEgewotCi11
c2luZyBpbnRlcm5hbDo6V2lyZUZvcm1hdDsKLXVzaW5nIGludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBTZXRQcmltaXRpdmVWYXJpYWJsZXMoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWlsZGVy
Qml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZEdlbmVyYXRv
ckluZm8qIGluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc05hbWVSZXNvbHZl
ciogbmFtZV9yZXNvbHZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcs
IHN0cmluZz4qIHZhcmlhYmxlcykgewotICBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhkZXNjcmlw
dG9yLCBpbmZvLCB2YXJpYWJsZXMpOwotCi0gICgqdmFyaWFibGVzKVsiZW1wdHlfbGlzdCJdID0K
LSAgICAgICJjb20uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZE1lc3NhZ2VMaXRlLmVtcHR5UHJv
dG9idWZMaXN0KCkiOwotCi0gICgqdmFyaWFibGVzKVsiZGVmYXVsdCJdID0gSW1tdXRhYmxlRGVm
YXVsdFZhbHVlKGRlc2NyaXB0b3IsIG5hbWVfcmVzb2x2ZXIpOwotICAoKnZhcmlhYmxlcylbImRl
ZmF1bHRfaW5pdCJdID0KLSAgICAgICI9ICIgKyBJbW11dGFibGVEZWZhdWx0VmFsdWUoZGVzY3Jp
cHRvciwgbmFtZV9yZXNvbHZlcik7Ci0gICgqdmFyaWFibGVzKVsiY2FwaXRhbGl6ZWRfdHlwZSJd
ID0gIlN0cmluZyI7Ci0gICgqdmFyaWFibGVzKVsidGFnIl0gPSBTaW1wbGVJdG9hKFdpcmVGb3Jt
YXQ6Ok1ha2VUYWcoZGVzY3JpcHRvcikpOwotICAoKnZhcmlhYmxlcylbInRhZ19zaXplIl0gPSBT
aW1wbGVJdG9hKAotICAgICAgV2lyZUZvcm1hdDo6VGFnU2l6ZShkZXNjcmlwdG9yLT5udW1iZXIo
KSwgR2V0VHlwZShkZXNjcmlwdG9yKSkpOwotICAoKnZhcmlhYmxlcylbIm51bGxfY2hlY2siXSA9
Ci0gICAgICAiICBpZiAodmFsdWUgPT0gbnVsbCkge1xuIgotICAgICAgIiAgICB0aHJvdyBuZXcg
TnVsbFBvaW50ZXJFeGNlcHRpb24oKTtcbiIKLSAgICAgICIgIH1cbiI7Ci0KLSAgLy8gVE9ETyhi
aXJkbyk6IEFkZCBAZGVwcmVjYXRlZCBqYXZhZG9jIHdoZW4gZ2VuZXJhdGluZyBqYXZhZG9jIGlz
IHN1cHBvcnRlZAotICAvLyBieSB0aGUgcHJvdG8gY29tcGlsZXIKLSAgKCp2YXJpYWJsZXMpWyJk
ZXByZWNhdGlvbiJdID0gZGVzY3JpcHRvci0+b3B0aW9ucygpLmRlcHJlY2F0ZWQoKQotICAgICAg
PyAiQGphdmEubGFuZy5EZXByZWNhdGVkICIgOiAiIjsKLQotICBpZiAoU3VwcG9ydEZpZWxkUHJl
c2VuY2UoZGVzY3JpcHRvci0+ZmlsZSgpKSkgewotICAgIC8vIEZvciBzaW5ndWxhciBtZXNzYWdl
cyBhbmQgYnVpbGRlcnMsIG9uZSBiaXQgaXMgdXNlZCBmb3IgdGhlIGhhc0ZpZWxkIGJpdC4KLSAg
ICAoKnZhcmlhYmxlcylbImdldF9oYXNfZmllbGRfYml0X21lc3NhZ2UiXSA9IEdlbmVyYXRlR2V0
Qml0KG1lc3NhZ2VCaXRJbmRleCk7Ci0KLSAgICAvLyBOb3RlIHRoYXQgdGhlc2UgaGF2ZSBhIHRy
YWlsaW5nICI7Ii4KLSAgICAoKnZhcmlhYmxlcylbInNldF9oYXNfZmllbGRfYml0X21lc3NhZ2Ui
XSA9Ci0gICAgICAgIEdlbmVyYXRlU2V0Qml0KG1lc3NhZ2VCaXRJbmRleCkgKyAiOyI7Ci0gICAg
KCp2YXJpYWJsZXMpWyJjbGVhcl9oYXNfZmllbGRfYml0X21lc3NhZ2UiXSA9Ci0gICAgICAgIEdl
bmVyYXRlQ2xlYXJCaXQobWVzc2FnZUJpdEluZGV4KSArICI7IjsKLQotICAgICgqdmFyaWFibGVz
KVsiaXNfZmllbGRfcHJlc2VudF9tZXNzYWdlIl0gPSBHZW5lcmF0ZUdldEJpdChtZXNzYWdlQml0
SW5kZXgpOwotICB9IGVsc2UgewotICAgICgqdmFyaWFibGVzKVsic2V0X2hhc19maWVsZF9iaXRf
bWVzc2FnZSJdID0gIiI7Ci0gICAgKCp2YXJpYWJsZXMpWyJjbGVhcl9oYXNfZmllbGRfYml0X21l
c3NhZ2UiXSA9ICIiOwotCi0gICAgKCp2YXJpYWJsZXMpWyJpc19maWVsZF9wcmVzZW50X21lc3Nh
Z2UiXSA9Ci0gICAgICAgICIhIiArICgqdmFyaWFibGVzKVsibmFtZSJdICsgIl8uaXNFbXB0eSgp
IjsKLSAgfQotCi0gIC8vIEZvciByZXBlYXRlZCBidWlsZGVycywgdGhlIHVuZGVybHlpbmcgbGlz
dCB0cmFja3MgbXV0YWJpbGl0eSBzdGF0ZS4KLSAgKCp2YXJpYWJsZXMpWyJpc19tdXRhYmxlIl0g
PSAoKnZhcmlhYmxlcylbIm5hbWUiXSArICJfLmlzTW9kaWZpYWJsZSgpIjsKLQotICAoKnZhcmlh
YmxlcylbImdldF9oYXNfZmllbGRfYml0X2Zyb21fbG9jYWwiXSA9Ci0gICAgICBHZW5lcmF0ZUdl
dEJpdEZyb21Mb2NhbChidWlsZGVyQml0SW5kZXgpOwotICAoKnZhcmlhYmxlcylbInNldF9oYXNf
ZmllbGRfYml0X3RvX2xvY2FsIl0gPQotICAgICAgR2VuZXJhdGVTZXRCaXRUb0xvY2FsKG1lc3Nh
Z2VCaXRJbmRleCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlt
bXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1JbW11dGFibGVTdHJpbmdGaWVsZExp
dGVHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb250ZXh0KiBjb250ZXh0KQotICA6IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3Ip
LCBtZXNzYWdlQml0SW5kZXhfKG1lc3NhZ2VCaXRJbmRleCksCi0gICAgYnVpbGRlckJpdEluZGV4
XyhidWlsZGVyQml0SW5kZXgpLCBjb250ZXh0Xyhjb250ZXh0KSwKLSAgICBuYW1lX3Jlc29sdmVy
Xyhjb250ZXh0LT5HZXROYW1lUmVzb2x2ZXIoKSkgewotICBTZXRQcmltaXRpdmVWYXJpYWJsZXMo
ZGVzY3JpcHRvciwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5HZXRGaWVsZEdlbmVyYXRvckluZm8oZGVzY3JpcHRvciks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3Jlc29sdmVyXywgJnZhcmlhYmxlc18pOwot
fQotCi1JbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3I6On5JbW11dGFibGVTdHJpbmdG
aWVsZExpdGVHZW5lcmF0b3IoKSB7fQotCi1pbnQgSW1tdXRhYmxlU3RyaW5nRmllbGRMaXRlR2Vu
ZXJhdG9yOjpHZXROdW1CaXRzRm9yTWVzc2FnZSgpIGNvbnN0IHsKLSAgcmV0dXJuIDE7Ci19Ci0K
LWludCBJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3I6OkdldE51bUJpdHNGb3JCdWls
ZGVyKCkgY29uc3QgewotICByZXR1cm4gMDsKLX0KLQotLy8gQSBub3RlIGFib3V0IGhvdyBzdHJp
bmdzIGFyZSBoYW5kbGVkLiBJbiB0aGUgU1BFRUQgYW5kIENPREVfU0laRSBydW50aW1lcywKLS8v
IHN0cmluZ3MgYXJlIG5vdCBzdG9yZWQgYXMgamF2YS5sYW5nLlN0cmluZyBpbiB0aGUgTWVzc2Fn
ZSBiZWNhdXNlIG9mIHR3bwotLy8gaXNzdWVzOgotLy8KLS8vICAxLiBJdCB3b3VsZG4ndCByb3Vu
ZHRyaXAgYnl0ZSBhcnJheXMgdGhhdCB3ZXJlIG5vdCB2YWlkIFVURi04IGVuY29kZWQKLS8vICAg
ICBzdHJpbmdzLCBidXQgcmF0aGVyIGZpZWxkcyB0aGF0IHdlcmUgcmF3IGJ5dGVzIGluY29ycmVj
dGx5IG1hcmtlZAotLy8gICAgIGFzIHN0cmluZ3MgaW4gdGhlIHByb3RvIGZpbGUuIFRoaXMgaXMg
Y29tbW9uIGJlY2F1c2UgaW4gdGhlIHByb3RvMQotLy8gICAgIHN5bnRheCwgc3RyaW5nIHdhcyB0
aGUgd2F5IHRvIGluZGljYXRlIGJ5dGVzIGFuZCBDKysgZW5naW5lZXJzIGNhbgotLy8gICAgIGVh
c2lseSBtYWtlIHRoaXMgbWlzdGFrZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgQysrIEFQSS4gQnkg
Y29udmVydGluZyB0bwotLy8gICAgIHN0cmluZ3MgaW1tZWRpYXRlbHksIHNvbWUgamF2YSBjb2Rl
IG1pZ2h0IGNvcnJ1cHQgdGhlc2UgYnl0ZSBhcnJheXMgYXMKLS8vICAgICBpdCBwYXNzZXMgdGhy
b3VnaCBhIGphdmEgc2VydmVyIGV2ZW4gaWYgdGhlIGZpZWxkIHdhcyBuZXZlciBhY2Nlc3NlZCBi
eQotLy8gICAgIGFwcGxpY2F0aW9uIGNvZGUuCi0vLwotLy8gIDIuIFRoZXJlJ3MgYSBwZXJmb3Jt
YW5jZSBoaXQgdG8gY29udmVydGluZyBiZXR3ZWVuIGJ5dGVzIGFuZCBzdHJpbmdzIGFuZAotLy8g
ICAgIGl0IG1hbnkgY2FzZXMsIHRoZSBmaWVsZCBpcyBuZXZlciBldmVuIHJlYWQgYnkgdGhlIGFw
cGxpY2F0aW9uIGNvZGUuIFRoaXMKLS8vICAgICBhdm9pZHMgdW5uZWNlc3NhcnkgY29udmVyc2lv
bnMgaW4gdGhlIGNvbW1vbiB1c2UgY2FzZXMuCi0vLwotLy8gSW4gdGhlIExJVEVfUlVOVElNRSwg
d2Ugc3RvcmUgc3RyaW5ncyBhcyBqYXZhLmxhbmcuU3RyaW5nIGJlY2F1c2Ugd2UgYXNzdW1lCi0v
LyB0aGF0IHRoZSB1c2VycyBvZiB0aGlzIHJ1bnRpbWUgYXJlIG5vdCBzdWJqZWN0IHRvIHByb3Rv
MSBjb25zdHJhaW50cyBhbmQgYXJlCi0vLyBydW5uaW5nIGNvZGUgb24gZGV2aWNlcyB0aGF0IGFy
ZSB1c2VyIGZhY2luZy4gVGhhdCBpcywgdGhlIGRldmVsb3BlcnMgYXJlCi0vLyBwcm9wZXJseSBp
bmNlbnRpdml6ZWQgdG8gb25seSBmZXRjaCB0aGUgZGF0YSB0aGV5IG5lZWQgdG8gcmVhZCBhbmQg
d2lzaCB0bwotLy8gcmVkdWNlIHRoZSBudW1iZXIgb2YgYWxsb2NhdGlvbnMgaW5jdXJyZWQgd2hl
biBydW5uaW5nIG9uIGEgdXNlcidzIGRldmljZS4KLQotLy8gVE9ETyhkd2Vpcyk6IENvbnNpZGVy
IGRyb3BwaW5nIGFsbCBvZiB0aGUgKkJ5dGVzKCkgbWV0aG9kcy4gVGhleSByZWFsbHkKLS8vICAg
ICBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IG9yIHVzZWQgb24gZGV2aWNlcy4KLXZvaWQgSW1tdXRh
YmxlU3RyaW5nRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW50ZXJmYWNlTWVtYmVycyhp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2Uo
ZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVy
LCBkZXNjcmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIk
ZGVwcmVjYXRpb24kYm9vbGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIpOwotICB9Ci0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJGphdmEubGFuZy5TdHJpbmcgZ2V0
JGNhcGl0YWxpemVkX25hbWUkKCk7XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVw
cmVjYXRpb24kY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nXG4iCi0gICAgIiAgICBnZXQk
Y2FwaXRhbGl6ZWRfbmFtZSRCeXRlcygpO1xuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlU3RyaW5n
RmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRlIGph
dmEubGFuZy5TdHJpbmcgJG5hbWUkXztcbiIpOwotICBQcmludEV4dHJhRmllbGRJbmZvKHZhcmlh
Ymxlc18sIHByaW50ZXIpOwotCi0gIGlmIChTdXBwb3J0RmllbGRQcmVzZW5jZShkZXNjcmlwdG9y
Xy0+ZmlsZSgpKSkgewotICAgIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0
b3JfKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiRkZXByZWNhdGlv
biRwdWJsaWMgYm9vbGVhbiBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgICAiICBy
ZXR1cm4gJGdldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkO1xuIgotICAgICAgIn1cbiIpOwotICB9
Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGphdmEubGFu
Zy5TdHJpbmcgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIHJldHVybiAkbmFt
ZSRfO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRp
b24kcHVibGljIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZ1xuIgotICAgICIgICAgZ2V0
JGNhcGl0YWxpemVkX25hbWUkQnl0ZXMoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGNvbS5nb29nbGUu
cHJvdG9idWYuQnl0ZVN0cmluZy5jb3B5RnJvbVV0ZjgoJG5hbWUkXyk7XG4iCi0gICAgIn1cbiIp
OwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIHNldCRjYXBpdGFsaXpl
ZF9uYW1lJChcbiIKLSAgICAiICAgIGphdmEubGFuZy5TdHJpbmcgdmFsdWUpIHtcbiIKLSAgICAi
JG51bGxfY2hlY2skIgotICAgICIgICRzZXRfaGFzX2ZpZWxkX2JpdF9tZXNzYWdlJFxuIgotICAg
ICIgICRuYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21t
ZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAicHJpdmF0ZSB2b2lkIGNsZWFyJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIg
ICRjbGVhcl9oYXNfZmllbGRfYml0X21lc3NhZ2UkXG4iCi0gICAgLy8gVGhlIGRlZmF1bHQgdmFs
dWUgaXMgbm90IGEgc2ltcGxlIGxpdGVyYWwgc28gd2Ugd2FudCB0byBhdm9pZCBleGVjdXRpbmcK
LSAgICAvLyBpdCBtdWx0aXBsZSB0aW1lcy4gIEluc3RlYWQsIGdldCB0aGUgZGVmYXVsdCBvdXQg
b2YgdGhlIGRlZmF1bHQgaW5zdGFuY2UuCi0gICAgIiAgJG5hbWUkXyA9IGdldERlZmF1bHRJbnN0
YW5jZSgpLmdldCRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIgotICAgICJ9XG4iKTsKLQotICBXcml0
ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgdm9pZCBzZXQkY2FwaXRhbGl6ZWRfbmFtZSRCeXRl
cyhcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZyB2YWx1ZSkge1xu
IgotICAgICIkbnVsbF9jaGVjayQiKTsKLSAgaWYgKENoZWNrVXRmOChkZXNjcmlwdG9yXykpIHsK
LSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiAgY2hlY2tCeXRlU3RyaW5n
SXNVdGY4KHZhbHVlKTtcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0g
ICAgIiAgJHNldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkXG4iCi0gICAgIiAgJG5hbWUkXyA9IHZh
bHVlLnRvU3RyaW5nVXRmOCgpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVT
dHJpbmdGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVzY3Jp
cHRvcl8tPmZpbGUoKSkpIHsKLSAgICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNj
cmlwdG9yXyk7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkZGVwcmVj
YXRpb24kcHVibGljIGJvb2xlYW4gaGFzJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICAg
IiAgcmV0dXJuIGluc3RhbmNlLmhhcyRjYXBpdGFsaXplZF9uYW1lJCgpO1xuIgotICAgICAgIn1c
biIpOwotICB9Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGlj
IGphdmEubGFuZy5TdHJpbmcgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIHJl
dHVybiBpbnN0YW5jZS5nZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIKLSAgICAifVxuIik7Ci0K
LSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGNvbS5nb29nbGUu
cHJvdG9idWYuQnl0ZVN0cmluZ1xuIgotICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnl0
ZXMoKSB7XG4iCi0gICAgIiAgcmV0dXJuIGluc3RhbmNlLmdldCRjYXBpdGFsaXplZF9uYW1lJEJ5
dGVzKCk7XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIs
IGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJl
Y2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAg
IGphdmEubGFuZy5TdHJpbmcgdmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgot
ICAgICIgIGluc3RhbmNlLnNldCRjYXBpdGFsaXplZF9uYW1lJCh2YWx1ZSk7XG4iCi0gICAgIiAg
cmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRk
ZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIK
LSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNlLmNsZWFyJGNhcGl0YWxp
emVkX25hbWUkKCk7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotCi0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIHNldCRj
YXBpdGFsaXplZF9uYW1lJEJ5dGVzKFxuIgotICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5C
eXRlU3RyaW5nIHZhbHVlKSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBp
bnN0YW5jZS5zZXQkY2FwaXRhbGl6ZWRfbmFtZSRCeXRlcyh2YWx1ZSk7XG4iCi0gICAgIiAgcmV0
dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVN0cmluZ0ZpZWxk
TGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgIGNvbnN0IHsKLSAgLy8gbm9vcCBmb3Igc3RyaW5ncwotfQot
Ci12b2lkIEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUluaXRp
YWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLCAiJG5hbWUkXyA9ICRkZWZhdWx0JDtcbiIpOwotfQotCi12b2lkIElt
bXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVZpc2l0Q29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoU3VwcG9ydEZpZWxkUHJlc2VuY2UoZGVz
Y3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICAgIiRuYW1lJF8gPSB2aXNpdG9yLnZpc2l0U3RyaW5nKFxuIgotICAgICAgIiAgICBoYXMkY2Fw
aXRhbGl6ZWRfbmFtZSQoKSwgJG5hbWUkXyxcbiIKLSAgICAgICIgICAgb3RoZXIuaGFzJGNhcGl0
YWxpemVkX25hbWUkKCksIG90aGVyLiRuYW1lJF8pO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkbmFtZSRfID0gdmlzaXRvci52aXNpdFN0
cmluZyghJG5hbWUkXy5pc0VtcHR5KCksICRuYW1lJF8sXG4iCi0gICAgICAiICAgICFvdGhlci4k
bmFtZSRfLmlzRW1wdHkoKSwgb3RoZXIuJG5hbWUkXyk7XG4iKTsKLSAgfQotfQotCi12b2lkIElt
bXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUR5bmFtaWNNZXRob2RN
YWtlSW1tdXRhYmxlQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBub29w
IGZvciBzY2FsYXJzCi19Ci0KLXZvaWQgSW1tdXRhYmxlU3RyaW5nRmllbGRMaXRlR2VuZXJhdG9y
OjoKLUdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAg
aWYgKENoZWNrVXRmOChkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICAgIlN0cmluZyBzID0gaW5wdXQucmVhZFN0cmluZ1JlcXVpcmVVdGY4KCk7XG4i
Ci0gICAgICAiJHNldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkXG4iCi0gICAgICAiJG5hbWUkXyA9
IHM7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBMaXRlIHJ1bnRpbWUgc2hvdWxkIGF0dGVtcHQg
dG8gcmVkdWNlIGFsbG9jYXRpb25zIGJ5IGF0dGVtcHRpbmcgdG8KLSAgICAvLyBjb25zdHJ1Y3Qg
dGhlIHN0cmluZyBkaXJlY3RseSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gYnVmZmVyLiBUaGlzIGF2
b2lkcwotICAgIC8vIHNwdXJpb3VzIGludGVybWVkaWFyeSBCeXRlU3RyaW5nIGFsbG9jYXRpb25z
LCBjdXR0aW5nIG92ZXJhbGwgYWxsb2NhdGlvbnMKLSAgICAvLyBpbiBoYWxmLgotICAgIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiU3RyaW5nIHMgPSBpbnB1dC5yZWFkU3RyaW5n
KCk7XG4iCi0gICAgICAiJHNldF9oYXNfZmllbGRfYml0X21lc3NhZ2UkXG4iCi0gICAgICAiJG5h
bWUkXyA9IHM7XG4iKTsKLSAgfQotfQotCi12b2lkIEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdl
bmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNpbmdEb25lQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICAvLyBub29wIGZvciBzdHJpbmdzCi19Ci0KLXZvaWQgSW1tdXRhYmxlU3RyaW5n
RmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gTGl0ZSBydW50aW1lIHNob3VsZCByZWR1Y2UgYWxs
b2NhdGlvbnMgYnkgc2VyaWFsaXppbmcgdGhlIHN0cmluZyBkaXJlY3RseS4KLSAgLy8gVGhpcyBh
dm9pZHMgc3B1cmlvdXMgaW50ZXJtZWRpYXJ5IEJ5dGVTdHJpbmcgYWxsb2NhdGlvbnMsIGN1dHRp
bmcgb3ZlcmFsbAotICAvLyBhbGxvY2F0aW9ucyBpbiBoYWxmLgotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICJpZiAoJGlzX2ZpZWxkX3ByZXNlbnRfbWVzc2FnZSQpIHtcbiIKLSAg
ICAiICBvdXRwdXQud3JpdGVTdHJpbmcoJG51bWJlciQsIGdldCRjYXBpdGFsaXplZF9uYW1lJCgp
KTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgSW1tdXRhYmxlU3RyaW5nRmllbGRMaXRlR2Vu
ZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIC8vIExpdGUgcnVudGltZSBzaG91bGQgcmVkdWNlIGFsbG9jYXRpb25zIGJ5
IGNvbXB1dGluZyBvbiB0aGUgc3RyaW5nIGRpcmVjdGx5LgotICAvLyBUaGlzIGF2b2lkcyBzcHVy
aW91cyBpbnRlcm1lZGlhcnkgQnl0ZVN0cmluZyBhbGxvY2F0aW9ucywgY3V0dGluZyBvdmVyYWxs
Ci0gIC8vIGFsbG9jYXRpb25zIGluIGhhbGYuCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgImlmICgkaXNfZmllbGRfcHJlc2VudF9tZXNzYWdlJCkge1xuIgotICAgICIgIHNpemUg
Kz0gY29tLmdvb2dsZS5wcm90b2J1Zi5Db2RlZE91dHB1dFN0cmVhbVxuIgotICAgICIgICAgLmNv
bXB1dGVTdHJpbmdTaXplKCRudW1iZXIkLCBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKSk7XG4iCi0g
ICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicmVzdWx0ID0gcmVzdWx0ICYmIGdldCRjYXBp
dGFsaXplZF9uYW1lJCgpXG4iCi0gICAgIiAgICAuZXF1YWxzKG90aGVyLmdldCRjYXBpdGFsaXpl
ZF9uYW1lJCgpKTtcbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImhhc2ggPSAoMzcgKiBoYXNoKSArICRj
b25zdGFudF9uYW1lJDtcbiIpOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJo
YXNoID0gKDUzICogaGFzaCkgKyBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoKS5oYXNoQ29kZSgpO1xu
Iik7Ci19Ci0KLXN0cmluZyBJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3I6OkdldEJv
eGVkVHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJuICJqYXZhLmxhbmcuU3RyaW5nIjsKLX0KLQotLy8g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotCi1JbW11dGFibGVTdHJpbmdPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1J
bW11dGFibGVTdHJpbmdPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBt
ZXNzYWdlQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBi
dWlsZGVyQml0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRl
eHQqIGNvbnRleHQpCi0gICAgOiBJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3IoCi0g
ICAgICAgICAgZGVzY3JpcHRvciwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsIGNv
bnRleHQpIHsKLSAgY29uc3QgT25lb2ZHZW5lcmF0b3JJbmZvKiBpbmZvID0KLSAgICAgIGNvbnRl
eHQtPkdldE9uZW9mR2VuZXJhdG9ySW5mbyhkZXNjcmlwdG9yLT5jb250YWluaW5nX29uZW9mKCkp
OwotICBTZXRDb21tb25PbmVvZlZhcmlhYmxlcyhkZXNjcmlwdG9yLCBpbmZvLCAmdmFyaWFibGVz
Xyk7Ci19Ci0KLUltbXV0YWJsZVN0cmluZ09uZW9mRmllbGRMaXRlR2VuZXJhdG9yOjoKLX5JbW11
dGFibGVTdHJpbmdPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgSW1tdXRhYmxl
U3RyaW5nT25lb2ZGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIFByaW50RXh0cmFGaWVsZEluZm8odmFyaWFibGVzXywg
cHJpbnRlcik7Ci0KLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5maWxl
KCkpKSB7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBib29s
ZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICByZXR1cm4gJGhhc19vbmVv
Zl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICJ9XG4iKTsKLSAgfQotCi0gIFdyaXRlRmllbGREb2ND
b21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldCRjYXBpdGFs
aXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICBqYXZhLmxhbmcuU3RyaW5nIHJlZiAkZGVmYXVsdF9p
bml0JDtcbiIKLSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAg
IiAgICByZWYgPSAoamF2YS5sYW5nLlN0cmluZykgJG9uZW9mX25hbWUkXztcbiIKLSAgICAiICB9
XG4iCi0gICAgIiAgcmV0dXJuIHJlZjtcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2ND
b21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLQotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0
cmluZ1xuIgotICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnl0ZXMoKSB7XG4iCi0gICAg
IiAgamF2YS5sYW5nLlN0cmluZyByZWYgJGRlZmF1bHRfaW5pdCQ7XG4iCi0gICAgIiAgaWYgKCRo
YXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgICAgcmVmID0gKGphdmEubGFuZy5T
dHJpbmcpICRvbmVvZl9uYW1lJF87XG4iCi0gICAgIiAgfVxuIgotICAgICIgIHJldHVybiBjb20u
Z29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcuY29weUZyb21VdGY4KHJlZik7XG4iCi0gICAgIn1c
biIpOwotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHJpdmF0ZSB2b2lkIHNldCRjYXBpdGFs
aXplZF9uYW1lJChcbiIKLSAgICAiICAgIGphdmEubGFuZy5TdHJpbmcgdmFsdWUpIHtcbiIKLSAg
ICAiJG51bGxfY2hlY2skIgotICAgICIgICRzZXRfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAg
ICAiICAkb25lb2ZfbmFtZSRfID0gdmFsdWU7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxk
RG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgInByaXZhdGUgdm9pZCBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIK
LSAgICAiICBpZiAoJGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgICAkY2xl
YXJfb25lb2ZfY2FzZV9tZXNzYWdlJDtcbiIKLSAgICAiICAgICRvbmVvZl9uYW1lJF8gPSBudWxs
O1xuIgotICAgICIgIH1cbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQo
cHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICJwcml2YXRlIHZvaWQgc2V0JGNhcGl0YWxpemVkX25hbWUkQnl0ZXMoXG4iCi0gICAgIiAgICBj
b20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcgdmFsdWUpIHtcbiIKLSAgICAiJG51bGxfY2hl
Y2skIik7Ci0gIGlmIChDaGVja1V0ZjgoZGVzY3JpcHRvcl8pKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICIgIGNoZWNrQnl0ZVN0cmluZ0lzVXRmOCh2YWx1ZSk7XG4i
KTsKLSAgfQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIgICRzZXRfb25lb2Zf
Y2FzZV9tZXNzYWdlJDtcbiIKLSAgICAiICAkb25lb2ZfbmFtZSRfID0gdmFsdWUudG9TdHJpbmdV
dGY4KCk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEltbXV0YWJsZVN0cmluZ09uZW9mRmll
bGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlQnVpbGRlck1lbWJlcnMoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgaWYgKFN1cHBvcnRGaWVsZFByZXNlbmNlKGRlc2NyaXB0b3JfLT5m
aWxlKCkpKSB7Ci0gICAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8p
OwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlcHJlY2F0aW9uJHB1
YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAgICIgIHJldHVy
biBpbnN0YW5jZS5oYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAg
fQotCi0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZhLmxh
bmcuU3RyaW5nIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICByZXR1cm4gaW5z
dGFuY2UuZ2V0JGNhcGl0YWxpemVkX25hbWUkKCk7XG4iCi0gICAgIn1cbiIpOwotCi0gIFdyaXRl
RmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBjb20uZ29vZ2xlLnByb3RvYnVm
LkJ5dGVTdHJpbmdcbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJEJ5dGVzKCkge1xu
IgotICAgICIgIHJldHVybiBpbnN0YW5jZS5nZXQkY2FwaXRhbGl6ZWRfbmFtZSRCeXRlcygpO1xu
IgotICAgICJ9XG4iKTsKLQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlw
dG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRw
dWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAgICBqYXZhLmxh
bmcuU3RyaW5nIHZhbHVlKSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBp
bnN0YW5jZS5zZXQkY2FwaXRhbGl6ZWRfbmFtZSQodmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0
aGlzO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRp
b24kcHVibGljIEJ1aWxkZXIgY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKSB7XG4iCi0gICAgIiAg
Y29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5jbGVhciRjYXBpdGFsaXplZF9uYW1l
JCgpO1xuIgotICAgICIgIHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLQotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgQnVpbGRlciBzZXQkY2FwaXRhbGl6
ZWRfbmFtZSRCeXRlcyhcbiIKLSAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmlu
ZyB2YWx1ZSkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAgIiAgaW5zdGFuY2Uu
c2V0JGNhcGl0YWxpemVkX25hbWUkQnl0ZXModmFsdWUpO1xuIgotICAgICIgIHJldHVybiB0aGlz
O1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBJbW11dGFibGVTdHJpbmdPbmVvZkZpZWxkTGl0
ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVZpc2l0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkb25lb2ZfbmFtZSRfID0g
dmlzaXRvci52aXNpdE9uZW9mU3RyaW5nKFxuIgotICAgICIgICAkaGFzX29uZW9mX2Nhc2VfbWVz
c2FnZSQsICRvbmVvZl9uYW1lJF8sIG90aGVyLiRvbmVvZl9uYW1lJF8pO1xuIik7Ci19Ci0KLXZv
aWQgSW1tdXRhYmxlU3RyaW5nT25lb2ZGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVQYXJz
aW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoQ2hlY2tVdGY4KGRl
c2NyaXB0b3JfKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiU3Ry
aW5nIHMgPSBpbnB1dC5yZWFkU3RyaW5nUmVxdWlyZVV0ZjgoKTtcbiIKLSAgICAgICIkc2V0X29u
ZW9mX2Nhc2VfbWVzc2FnZSQ7XG4iCi0gICAgICAiJG9uZW9mX25hbWUkXyA9IHM7XG4iKTsKLSAg
fSBlbHNlIHsKLSAgICAvLyBMaXRlIHJ1bnRpbWUgc2hvdWxkIGF0dGVtcHQgdG8gcmVkdWNlIGFs
bG9jYXRpb25zIGJ5IGF0dGVtcHRpbmcgdG8KLSAgICAvLyBjb25zdHJ1Y3QgdGhlIHN0cmluZyBk
aXJlY3RseSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gYnVmZmVyLiBUaGlzIGF2b2lkcwotICAgIC8v
IHNwdXJpb3VzIGludGVybWVkaWFyeSBCeXRlU3RyaW5nIGFsbG9jYXRpb25zLCBjdXR0aW5nIG92
ZXJhbGwgYWxsb2NhdGlvbnMKLSAgICAvLyBpbiBoYWxmLgotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgICAiU3RyaW5nIHMgPSBpbnB1dC5yZWFkU3RyaW5nKCk7XG4iCi0gICAg
ICAiJHNldF9vbmVvZl9jYXNlX21lc3NhZ2UkO1xuIgotICAgICAgIiRvbmVvZl9uYW1lJF8gPSBz
O1xuIik7Ci0gIH0KLX0KLQotdm9pZCBJbW11dGFibGVTdHJpbmdPbmVvZkZpZWxkTGl0ZUdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIC8vIExpdGUgcnVudGltZSBzaG91bGQgcmVkdWNlIGFsbG9jYXRpb25zIGJ5IHNl
cmlhbGl6aW5nIHRoZSBzdHJpbmcgZGlyZWN0bHkuCi0gIC8vIFRoaXMgYXZvaWRzIHNwdXJpb3Vz
IGludGVybWVkaWFyeSBCeXRlU3RyaW5nIGFsbG9jYXRpb25zLCBjdXR0aW5nIG92ZXJhbGwKLSAg
Ly8gYWxsb2NhdGlvbnMgaW4gaGFsZi4KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAiaWYgKCRoYXNfb25lb2ZfY2FzZV9tZXNzYWdlJCkge1xuIgotICAgICIgIG91dHB1dC53cml0
ZVN0cmluZygkbnVtYmVyJCwgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkpO1xuIgotICAgICJ9XG4i
KTsKLX0KLQotdm9pZCBJbW11dGFibGVTdHJpbmdPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1H
ZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qgewot
ICAvLyBMaXRlIHJ1bnRpbWUgc2hvdWxkIHJlZHVjZSBhbGxvY2F0aW9ucyBieSBjb21wdXRpbmcg
b24gdGhlIHN0cmluZyBkaXJlY3RseS4KLSAgLy8gVGhpcyBhdm9pZHMgc3B1cmlvdXMgaW50ZXJt
ZWRpYXJ5IEJ5dGVTdHJpbmcgYWxsb2NhdGlvbnMsIGN1dHRpbmcgb3ZlcmFsbAotICAvLyBhbGxv
Y2F0aW9ucyBpbiBoYWxmLgotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAo
JGhhc19vbmVvZl9jYXNlX21lc3NhZ2UkKSB7XG4iCi0gICAgIiAgc2l6ZSArPSBjb20uZ29vZ2xl
LnByb3RvYnVmLkNvZGVkT3V0cHV0U3RyZWFtXG4iCi0gICAgIiAgICAuY29tcHV0ZVN0cmluZ1Np
emUoJG51bWJlciQsIGdldCRjYXBpdGFsaXplZF9uYW1lJCgpKTtcbiIKLSAgICAifVxuIik7Ci19
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5l
cmF0b3I6OgotUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3IoY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbWVzc2FnZUJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgYnVpbGRlckJpdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb250ZXh0KiBjb250ZXh0KQotICA6IGRlc2NyaXB0b3JfKGRlc2Ny
aXB0b3IpLCBtZXNzYWdlQml0SW5kZXhfKG1lc3NhZ2VCaXRJbmRleCksCi0gICAgYnVpbGRlckJp
dEluZGV4XyhidWlsZGVyQml0SW5kZXgpLCBjb250ZXh0Xyhjb250ZXh0KSwKLSAgICBuYW1lX3Jl
c29sdmVyXyhjb250ZXh0LT5HZXROYW1lUmVzb2x2ZXIoKSkgewotICBTZXRQcmltaXRpdmVWYXJp
YWJsZXMoZGVzY3JpcHRvciwgbWVzc2FnZUJpdEluZGV4LCBidWlsZGVyQml0SW5kZXgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5HZXRGaWVsZEdlbmVyYXRvckluZm8oZGVzY3Jp
cHRvciksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3Jlc29sdmVyXywgJnZhcmlhYmxl
c18pOwotfQotCi1SZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1+
UmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3IoKSB7fQotCi1pbnQgUmVw
ZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3I6OkdldE51bUJpdHNGb3JNZXNz
YWdlKCkgY29uc3QgewotICByZXR1cm4gMDsKLX0KLQotaW50IFJlcGVhdGVkSW1tdXRhYmxlU3Ry
aW5nRmllbGRMaXRlR2VuZXJhdG9yOjpHZXROdW1CaXRzRm9yQnVpbGRlcigpIGNvbnN0IHsKLSAg
cmV0dXJuIDA7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5l
cmF0b3I6OgotR2VuZXJhdGVJbnRlcmZhY2VNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJGphdmEudXRpbC5M
aXN0PFN0cmluZz5cbiIKLSAgICAiICAgIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKTtcbiIp
OwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRpbnQgZ2V0JGNhcGl0YWxp
emVkX25hbWUkQ291bnQoKTtcbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNh
dGlvbiRqYXZhLmxhbmcuU3RyaW5nIGdldCRjYXBpdGFsaXplZF9uYW1lJChpbnQgaW5kZXgpO1xu
Iik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJGNvbS5nb29nbGUucHJv
dG9idWYuQnl0ZVN0cmluZ1xuIgotICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnl0ZXMo
aW50IGluZGV4KTtcbiIpOwotfQotCi0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVs
ZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgY29tLmdv
b2dsZS5wcm90b2J1Zi5JbnRlcm5hbC5Qcm90b2J1Zkxpc3Q8U3RyaW5nPiAkbmFtZSRfO1xuIik7
Ci0gIFByaW50RXh0cmFGaWVsZEluZm8odmFyaWFibGVzXywgcHJpbnRlcik7Ci0gIFdyaXRlRmll
bGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxTdHJpbmc+
IGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKSB7XG4iCi0gICAgIiAgcmV0dXJuICRuYW1lJF87
XG4iICAgLy8gbm90ZTogIHVubW9kaWZpYWJsZSBsaXN0Ci0gICAgIn1cbiIpOwotICBXcml0ZUZp
ZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRwdWJsaWMgaW50IGdldCRjYXBpdGFsaXplZF9u
YW1lJENvdW50KCkge1xuIgotICAgICIgIHJldHVybiAkbmFtZSRfLnNpemUoKTtcbiIKLSAgICAi
fVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBqYXZh
LmxhbmcuU3RyaW5nIGdldCRjYXBpdGFsaXplZF9uYW1lJChpbnQgaW5kZXgpIHtcbiIKLSAgICAi
ICByZXR1cm4gJG5hbWUkXy5nZXQoaW5kZXgpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVs
ZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIGNvbS5nb29nbGUucHJvdG9idWYuQnl0
ZVN0cmluZ1xuIgotICAgICIgICAgZ2V0JGNhcGl0YWxpemVkX25hbWUkQnl0ZXMoaW50IGluZGV4
KSB7XG4iCi0gICAgIiAgcmV0dXJuIGNvbS5nb29nbGUucHJvdG9idWYuQnl0ZVN0cmluZy5jb3B5
RnJvbVV0ZjgoXG4iCi0gICAgIiAgICAgICRuYW1lJF8uZ2V0KGluZGV4KSk7XG4iCi0gICAgIn1c
biIpOwotCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUgdm9pZCBl
bnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKSB7XG4iCi0gICAgIiAgaWYgKCEkaXNf
bXV0YWJsZSQpIHtcbiIKLSAgICAiICAgICRuYW1lJF8gPVxuIgotICAgICIgICAgICAgIGNvbS5n
b29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxpdGUubXV0YWJsZUNvcHkoJG5hbWUkXyk7
XG4iCi0gICAgIiAgIH1cbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQo
cHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICJwcml2YXRlIHZvaWQgc2V0JGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGlu
ZGV4LCBqYXZhLmxhbmcuU3RyaW5nIHZhbHVlKSB7XG4iCi0gICAgIiRudWxsX2NoZWNrJCIKLSAg
ICAiICBlbnN1cmUkY2FwaXRhbGl6ZWRfbmFtZSRJc011dGFibGUoKTtcbiIKLSAgICAiICAkbmFt
ZSRfLnNldChpbmRleCwgdmFsdWUpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0Nv
bW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICJwcml2YXRlIHZvaWQgYWRkJGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAg
amF2YS5sYW5nLlN0cmluZyB2YWx1ZSkge1xuIgotICAgICIkbnVsbF9jaGVjayQiCi0gICAgIiAg
ZW5zdXJlJGNhcGl0YWxpemVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5hbWUkXy5h
ZGQodmFsdWUpO1xuIgotICAgICJ9XG4iKTsKLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRl
ciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2
YXRlIHZvaWQgYWRkQWxsJGNhcGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgamF2YS5sYW5n
Lkl0ZXJhYmxlPGphdmEubGFuZy5TdHJpbmc+IHZhbHVlcykge1xuIgotICAgICIgIGVuc3VyZSRj
YXBpdGFsaXplZF9uYW1lJElzTXV0YWJsZSgpO1xuIgotICAgICIgIGNvbS5nb29nbGUucHJvdG9i
dWYuQWJzdHJhY3RNZXNzYWdlTGl0ZS5hZGRBbGwoXG4iCi0gICAgIiAgICAgIHZhbHVlcywgJG5h
bWUkXyk7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInByaXZhdGUg
dm9pZCBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAiICAkbmFtZSRfID0gJGVt
cHR5X2xpc3QkO1xuIgotICAgICJ9XG4iKTsKLQotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmlu
dGVyLCBkZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInBy
aXZhdGUgdm9pZCBhZGQkY2FwaXRhbGl6ZWRfbmFtZSRCeXRlcyhcbiIKLSAgICAiICAgIGNvbS5n
b29nbGUucHJvdG9idWYuQnl0ZVN0cmluZyB2YWx1ZSkge1xuIgotICAgICIkbnVsbF9jaGVjayQi
KTsKLSAgaWYgKENoZWNrVXRmOChkZXNjcmlwdG9yXykpIHsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgIiAgY2hlY2tCeXRlU3RyaW5nSXNVdGY4KHZhbHVlKTtcbiIpOwot
ICB9Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiAgZW5zdXJlJGNhcGl0YWxp
emVkX25hbWUkSXNNdXRhYmxlKCk7XG4iCi0gICAgIiAgJG5hbWUkXy5hZGQodmFsdWUudG9TdHJp
bmdVdGY4KCkpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVN0
cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUJ1aWxkZXJNZW1iZXJzKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRl
c2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0
aW9uJHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxTdHJpbmc+XG4iCi0gICAgIiAgICBnZXQkY2FwaXRh
bGl6ZWRfbmFtZSRMaXN0KCkge1xuIgotICAgICIgIHJldHVybiBqYXZhLnV0aWwuQ29sbGVjdGlv
bnMudW5tb2RpZmlhYmxlTGlzdChcbiIKLSAgICAiICAgICAgaW5zdGFuY2UuZ2V0JGNhcGl0YWxp
emVkX25hbWUkTGlzdCgpKTtcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50
KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVkX25hbWUkQ291bnQoKSB7
XG4iCi0gICAgIiAgcmV0dXJuIGluc3RhbmNlLmdldCRjYXBpdGFsaXplZF9uYW1lJENvdW50KCk7
XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlw
dG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRw
dWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXQkY2FwaXRhbGl6ZWRfbmFtZSQoaW50IGluZGV4KSB7
XG4iCi0gICAgIiAgcmV0dXJuIGluc3RhbmNlLmdldCRjYXBpdGFsaXplZF9uYW1lJChpbmRleCk7
XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBkZXNjcmlw
dG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNhdGlvbiRw
dWJsaWMgY29tLmdvb2dsZS5wcm90b2J1Zi5CeXRlU3RyaW5nXG4iCi0gICAgIiAgICBnZXQkY2Fw
aXRhbGl6ZWRfbmFtZSRCeXRlcyhpbnQgaW5kZXgpIHtcbiIKLSAgICAiICByZXR1cm4gaW5zdGFu
Y2UuZ2V0JGNhcGl0YWxpemVkX25hbWUkQnl0ZXMoaW5kZXgpO1xuIgotICAgICJ9XG4iKTsKLSAg
V3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwgZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVjYXRpb24kcHVibGljIEJ1aWxkZXIgc2V0JGNh
cGl0YWxpemVkX25hbWUkKFxuIgotICAgICIgICAgaW50IGluZGV4LCBqYXZhLmxhbmcuU3RyaW5n
IHZhbHVlKSB7XG4iCi0gICAgIiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5z
ZXQkY2FwaXRhbGl6ZWRfbmFtZSQoaW5kZXgsIHZhbHVlKTtcbiIKLSAgICAiICByZXR1cm4gdGhp
cztcbiIKLSAgICAifVxuIik7Ci0gIFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2Ny
aXB0b3JfKTsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9u
JHB1YmxpYyBCdWlsZGVyIGFkZCRjYXBpdGFsaXplZF9uYW1lJChcbiIKLSAgICAiICAgIGphdmEu
bGFuZy5TdHJpbmcgdmFsdWUpIHtcbiIKLSAgICAiICBjb3B5T25Xcml0ZSgpO1xuIgotICAgICIg
IGluc3RhbmNlLmFkZCRjYXBpdGFsaXplZF9uYW1lJCh2YWx1ZSk7XG4iCi0gICAgIiAgcmV0dXJu
IHRoaXM7XG4iCi0gICAgIn1cbiIpOwotICBXcml0ZUZpZWxkRG9jQ29tbWVudChwcmludGVyLCBk
ZXNjcmlwdG9yXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRkZXByZWNh
dGlvbiRwdWJsaWMgQnVpbGRlciBhZGRBbGwkY2FwaXRhbGl6ZWRfbmFtZSQoXG4iCi0gICAgIiAg
ICBqYXZhLmxhbmcuSXRlcmFibGU8amF2YS5sYW5nLlN0cmluZz4gdmFsdWVzKSB7XG4iCi0gICAg
IiAgY29weU9uV3JpdGUoKTtcbiIKLSAgICAiICBpbnN0YW5jZS5hZGRBbGwkY2FwaXRhbGl6ZWRf
bmFtZSQodmFsdWVzKTtcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci0g
IFdyaXRlRmllbGREb2NDb21tZW50KHByaW50ZXIsIGRlc2NyaXB0b3JfKTsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJGRlcHJlY2F0aW9uJHB1YmxpYyBCdWlsZGVyIGNsZWFy
JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIGNvcHlPbldyaXRlKCk7XG4iCi0gICAg
IiAgaW5zdGFuY2UuY2xlYXIkY2FwaXRhbGl6ZWRfbmFtZSQoKTtcbiIKLSAgICAiICByZXR1cm4g
dGhpcztcbiIKLSAgICAifVxuIik7Ci0KLSAgV3JpdGVGaWVsZERvY0NvbW1lbnQocHJpbnRlciwg
ZGVzY3JpcHRvcl8pOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkZGVwcmVj
YXRpb24kcHVibGljIEJ1aWxkZXIgYWRkJGNhcGl0YWxpemVkX25hbWUkQnl0ZXMoXG4iCi0gICAg
IiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLkJ5dGVTdHJpbmcgdmFsdWUpIHtcbiIKLSAgICAiICBj
b3B5T25Xcml0ZSgpO1xuIgotICAgICIgIGluc3RhbmNlLmFkZCRjYXBpdGFsaXplZF9uYW1lJEJ5
dGVzKHZhbHVlKTtcbiIKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci19Ci0K
LXZvaWQgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJh
dGVGaWVsZEJ1aWxkZXJJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpICBj
b25zdCB7Ci0gIC8vIG5vb3AgZm9yIHN0cmluZ3MKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJs
ZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUluaXRpYWxpemF0aW9uQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LCAiJG5hbWUkXyA9ICRlbXB0eV9saXN0JDtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRh
YmxlU3RyaW5nRmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlVmlzaXRDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAiJG5hbWUkXz0gdmlzaXRvci52aXNpdExpc3QoJG5hbWUkXywgb3RoZXIuJG5hbWUkXyk7XG4i
KTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcjo6
Ci1HZW5lcmF0ZUR5bmFtaWNNZXRob2RNYWtlSW1tdXRhYmxlQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkbmFtZSRf
Lm1ha2VJbW11dGFibGUoKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlU3RyaW5n
RmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0NvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgaWYgKENoZWNrVXRmOChkZXNjcmlwdG9yXykpIHsKLSAgICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJTdHJpbmcgcyA9IGlucHV0LnJlYWRTdHJpbmdS
ZXF1aXJlVXRmOCgpO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gTGl0ZSBydW50aW1lIHNob3Vs
ZCBhdHRlbXB0IHRvIHJlZHVjZSBhbGxvY2F0aW9ucyBieSBhdHRlbXB0aW5nIHRvCi0gICAgLy8g
Y29uc3RydWN0IHRoZSBzdHJpbmcgZGlyZWN0bHkgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIGJ1ZmZl
ci4gVGhpcyBhdm9pZHMKLSAgICAvLyBzcHVyaW91cyBpbnRlcm1lZGlhcnkgQnl0ZVN0cmluZyBh
bGxvY2F0aW9ucywgY3V0dGluZyBvdmVyYWxsIGFsbG9jYXRpb25zCi0gICAgLy8gaW4gaGFsZi4K
LSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJTdHJpbmcgcyA9IGlucHV0LnJl
YWRTdHJpbmcoKTtcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ImlmICghJGlzX211dGFibGUkKSB7XG4iCi0gICAgIiAgJG5hbWUkXyA9XG4iCi0gICAgIiAgICAg
IGNvbS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkTWVzc2FnZUxpdGUubXV0YWJsZUNvcHkoJG5h
bWUkXyk7XG4iCi0gICAgIn1cbiIpOwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICIkbmFtZSRfLmFkZChzKTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkSW1tdXRhYmxlU3RyaW5n
RmllbGRMaXRlR2VuZXJhdG9yOjoKLUdlbmVyYXRlUGFyc2luZ0RvbmVDb2RlKGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlm
ICgkaXNfbXV0YWJsZSQpIHtcbiIKLSAgICAiICAkbmFtZSRfLm1ha2VJbW11dGFibGUoKTtcbiIK
LSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZExpdGVH
ZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICAvLyBMaXRlIHJ1bnRpbWUgc2hvdWxkIHJlZHVjZSBhbGxvY2F0aW9ucyBi
eSBzZXJpYWxpemluZyB0aGUgc3RyaW5nIGRpcmVjdGx5LgotICAvLyBUaGlzIGF2b2lkcyBzcHVy
aW91cyBpbnRlcm1lZGlhcnkgQnl0ZVN0cmluZyBhbGxvY2F0aW9ucywgY3V0dGluZyBvdmVyYWxs
Ci0gIC8vIGFsbG9jYXRpb25zIGluIGhhbGYuCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgImZvciAoaW50IGkgPSAwOyBpIDwgJG5hbWUkXy5zaXplKCk7IGkrKykge1xuIgotICAg
ICIgIG91dHB1dC53cml0ZVN0cmluZygkbnVtYmVyJCwgJG5hbWUkXy5nZXQoaSkpO1xuIgotICAg
ICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICAvLyBMaXRlIHJ1bnRpbWUgc2hvdWxkIHJlZHVjZSBhbGxvY2F0aW9ucyBieSBj
b21wdXRpbmcgb24gdGhlIHN0cmluZyBkaXJlY3RseS4KLSAgLy8gVGhpcyBhdm9pZHMgc3B1cmlv
dXMgaW50ZXJtZWRpYXJ5IEJ5dGVTdHJpbmcgYWxsb2NhdGlvbnMsIGN1dHRpbmcgb3ZlcmFsbAot
ICAvLyBhbGxvY2F0aW9ucyBpbiBoYWxmLgotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICJ7XG4iCi0gICAgIiAgaW50IGRhdGFTaXplID0gMDtcbiIpOwotICBwcmludGVyLT5JbmRl
bnQoKTsKLQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJmb3IgKGludCBpID0g
MDsgaSA8ICRuYW1lJF8uc2l6ZSgpOyBpKyspIHtcbiIKLSAgICAiICBkYXRhU2l6ZSArPSBjb20u
Z29vZ2xlLnByb3RvYnVmLkNvZGVkT3V0cHV0U3RyZWFtXG4iCi0gICAgIiAgICAuY29tcHV0ZVN0
cmluZ1NpemVOb1RhZygkbmFtZSRfLmdldChpKSk7XG4iCi0gICAgIn1cbiIpOwotCi0gIHByaW50
ZXItPlByaW50KAotICAgICAgInNpemUgKz0gZGF0YVNpemU7XG4iKTsKLQotCi0gIHByaW50ZXIt
PlByaW50KHZhcmlhYmxlc18sCi0gICAgInNpemUgKz0gJHRhZ19zaXplJCAqIGdldCRjYXBpdGFs
aXplZF9uYW1lJExpc3QoKS5zaXplKCk7XG4iKTsKLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0g
IHByaW50ZXItPlByaW50KCJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEltbXV0YWJsZVN0cmlu
Z0ZpZWxkTGl0ZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicmVzdWx0
ID0gcmVzdWx0ICYmIGdldCRjYXBpdGFsaXplZF9uYW1lJExpc3QoKVxuIgotICAgICIgICAgLmVx
dWFscyhvdGhlci5nZXQkY2FwaXRhbGl6ZWRfbmFtZSRMaXN0KCkpO1xuIik7Ci19Ci0KLXZvaWQg
UmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNo
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICJpZiAoZ2V0JGNhcGl0YWxpemVkX25hbWUkQ291bnQoKSA+IDApIHtcbiIK
LSAgICAiICBoYXNoID0gKDM3ICogaGFzaCkgKyAkY29uc3RhbnRfbmFtZSQ7XG4iCi0gICAgIiAg
aGFzaCA9ICg1MyAqIGhhc2gpICsgZ2V0JGNhcGl0YWxpemVkX25hbWUkTGlzdCgpLmhhc2hDb2Rl
KCk7XG4iCi0gICAgIn1cbiIpOwotfQotCi1zdHJpbmcgUmVwZWF0ZWRJbW11dGFibGVTdHJpbmdG
aWVsZExpdGVHZW5lcmF0b3I6OkdldEJveGVkVHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJuICJTdHJp
bmciOwotfQotCi19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVy
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc3RyaW5nX2ZpZWxk
X2xpdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc3RyaW5nX2Zp
ZWxkX2xpdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE0OGFhNGRmYmYzNTIy
NjkzZmZhNmM4YzdhMjM2ODdkMDJkOTMwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3N0
cmluZ19maWVsZF9saXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5j
b20gKEtlbnRvbiBWYXJkYSkKLS8vIEF1dGhvcjogam9ucEBnb29nbGUuY29tIChKb24gUGVybG93
KQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAg
U2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5kZWYgR09PR0xF
X1BST1RPQlVGX0NPTVBJTEVSX0pBVkFfU1RSSU5HX0ZJRUxEX0xJVEVfSF9fCi0jZGVmaW5lIEdP
T0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBX1NUUklOR19GSUVMRF9MSVRFX0hfXwotCi0jaW5j
bHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvamF2YS9qYXZhX2ZpZWxkLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNw
YWNlIHByb3RvYnVmIHsKLSAgbmFtZXNwYWNlIGNvbXBpbGVyIHsKLSAgICBuYW1lc3BhY2UgamF2
YSB7Ci0gICAgICBjbGFzcyBDb250ZXh0OyAgICAgICAgICAgLy8gY29udGV4dC5oCi0gICAgICBj
bGFzcyBDbGFzc05hbWVSZXNvbHZlcjsgLy8gbmFtZV9yZXNvbHZlci5oCi0gICAgfQotICB9Ci19
Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNl
IGphdmEgewotCi1jbGFzcyBJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3IgOiBwdWJs
aWMgSW1tdXRhYmxlRmllbGRMaXRlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IElt
bXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZGVzY3JpcHRvciwgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgIGludCBidWlsZGVy
Qml0SW5kZXgsIENvbnRleHQqIGNvbnRleHQpOwotICB+SW1tdXRhYmxlU3RyaW5nRmllbGRMaXRl
R2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBJbW11dGFibGVGaWVsZExpdGVHZW5lcmF0
b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGludCBHZXROdW1CaXRz
Rm9yTWVzc2FnZSgpIGNvbnN0OwotICBpbnQgR2V0TnVtQml0c0ZvckJ1aWxkZXIoKSBjb25zdDsK
LSAgdm9pZCBHZW5lcmF0ZUludGVyZmFjZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVCdWlsZGVyTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3Q7Ci0gIHZvaWQgR2VuZXJhdGVJbml0aWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlVmlzaXRDb2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUR5bmFtaWNNZXRob2RNYWtlSW1tdXRhYmxlQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nRG9uZUNv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXph
dGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2Vy
aWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZUZpZWxkQnVpbGRlckluaXRpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZUhhc2hDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLQotICBzdHJpbmcgR2V0Qm94ZWRUeXBlKCkgY29uc3Q7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4g
dmFyaWFibGVzXzsKLSAgY29uc3QgaW50IG1lc3NhZ2VCaXRJbmRleF87Ci0gIGNvbnN0IGludCBi
dWlsZGVyQml0SW5kZXhfOwotICBDb250ZXh0KiBjb250ZXh0XzsKLSAgQ2xhc3NOYW1lUmVzb2x2
ZXIqIG5hbWVfcmVzb2x2ZXJfOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxf
Q09OU1RSVUNUT1JTKEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcik7Ci19OwotCi1j
bGFzcyBJbW11dGFibGVTdHJpbmdPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcgotICAgIDogcHVibGlj
IEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvciB7Ci0gcHVibGljOgotICBJbW11dGFi
bGVTdHJpbmdPbmVvZkZpZWxkTGl0ZUdlbmVyYXRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZGVzY3JpcHRvciwgaW50IG1lc3NhZ2VCaXRJbmRleCwKLSAgICAgIGludCBidWlsZGVy
Qml0SW5kZXgsIENvbnRleHQqIGNvbnRleHQpOwotICB+SW1tdXRhYmxlU3RyaW5nT25lb2ZGaWVs
ZExpdGVHZW5lcmF0b3IoKTsKLQotIHByaXZhdGU6Ci0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJNZW1iZXJz
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZVZpc2l0Q29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVQYXJzaW5nQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9u
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxp
emVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gIEdPT0dMRV9ESVNB
TExPV19FVklMX0NPTlNUUlVDVE9SUyhJbW11dGFibGVTdHJpbmdPbmVvZkZpZWxkTGl0ZUdlbmVy
YXRvcik7Ci19OwotCi1jbGFzcyBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVy
YXRvcgotICAgIDogcHVibGljIEltbXV0YWJsZUZpZWxkTGl0ZUdlbmVyYXRvciB7Ci0gcHVibGlj
OgotICBleHBsaWNpdCBSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0ZpZWxkTGl0ZUdlbmVyYXRvcigK
LSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgaW50IG1lc3NhZ2VCaXRJ
bmRleCwKLSAgICAgIGludCBidWlsZGVyQml0SW5kZXgsIENvbnRleHQqIGNvbnRleHQpOwotICB+
UmVwZWF0ZWRJbW11dGFibGVTdHJpbmdGaWVsZExpdGVHZW5lcmF0b3IoKTsKLQotICAvLyBpbXBs
ZW1lbnRzIEltbXV0YWJsZUZpZWxkTGl0ZUdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAgaW50IEdldE51bUJpdHNGb3JNZXNzYWdlKCkgY29uc3Q7Ci0gIGlu
dCBHZXROdW1CaXRzRm9yQnVpbGRlcigpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSW50ZXJmYWNl
TWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZW1i
ZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUJ1aWxkZXJN
ZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUluaXRp
YWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVWaXNpdENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
RHluYW1pY01ldGhvZE1ha2VJbW11dGFibGVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZVBhcnNpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25z
dDsKLSAgdm9pZCBHZW5lcmF0ZVBhcnNpbmdEb25lQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRmllbGRCdWlsZGVySW5pdGlhbGl6
YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUVx
dWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSGFz
aENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gIHN0cmluZyBHZXRCb3hlZFR5
cGUoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3Jp
cHRvcl87Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyaWFibGVzXzsKLSAgY29uc3QgaW50IG1l
c3NhZ2VCaXRJbmRleF87Ci0gIGNvbnN0IGludCBidWlsZGVyQml0SW5kZXhfOwotICBDb250ZXh0
KiBjb250ZXh0XzsKLSAgQ2xhc3NOYW1lUmVzb2x2ZXIqIG5hbWVfcmVzb2x2ZXJfOwotCi0gIEdP
T0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhSZXBlYXRlZEltbXV0YWJsZVN0cmluZ0Zp
ZWxkTGl0ZUdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgamF2YQotfSAgLy8gbmFt
ZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNw
YWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQV9TVFJJ
TkdfRklFTERfTElURV9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhbmFuby9qYXZhbmFub19lbnVtLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmFuYW5vL2phdmFuYW5vX2VudW0uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGM2ZThkZmU5MGQyODg4ZGUwMjkyNjk2NWUyZTg4MGI5NGM1ZDk0MmIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmFuYW5vL2phdmFuYW5vX2VudW0uY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNv
bSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMg
ZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0K
LSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX3BhcmFtcy5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19lbnVtLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2hlbHBlcnMuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhbmFubyB7Ci0KLUVudW1HZW5l
cmF0b3I6OkVudW1HZW5lcmF0b3IoY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGNv
bnN0IFBhcmFtcyYgcGFyYW1zKQotICA6IHBhcmFtc18ocGFyYW1zKSwgZGVzY3JpcHRvcl8oZGVz
Y3JpcHRvcikgewotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT52YWx1ZV9jb3Vu
dCgpOyBpKyspIHsKLSAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiB2YWx1ZSA9IGRlc2Ny
aXB0b3JfLT52YWx1ZShpKTsKLSAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBjYW5vbmlj
YWxfdmFsdWUgPQotICAgICAgZGVzY3JpcHRvcl8tPkZpbmRWYWx1ZUJ5TnVtYmVyKHZhbHVlLT5u
dW1iZXIoKSk7Ci0KLSAgICBpZiAodmFsdWUgPT0gY2Fub25pY2FsX3ZhbHVlKSB7Ci0gICAgICBj
YW5vbmljYWxfdmFsdWVzXy5wdXNoX2JhY2sodmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBB
bGlhcyBhbGlhczsKLSAgICAgIGFsaWFzLnZhbHVlID0gdmFsdWU7Ci0gICAgICBhbGlhcy5jYW5v
bmljYWxfdmFsdWUgPSBjYW5vbmljYWxfdmFsdWU7Ci0gICAgICBhbGlhc2VzXy5wdXNoX2JhY2so
YWxpYXMpOwotICAgIH0KLSAgfQotfQotCi1FbnVtR2VuZXJhdG9yOjp+RW51bUdlbmVyYXRvcigp
IHt9Ci0KLXZvaWQgRW51bUdlbmVyYXRvcjo6R2VuZXJhdGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiXG4iCi0gICAgICAiLy8gZW51bSAkY2xhc3Nu
YW1lJFxuIiwKLSAgICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLQotICBj
b25zdCBzdHJpbmcgY2xhc3NuYW1lID0gUmVuYW1lSmF2YUtleXdvcmRzKGRlc2NyaXB0b3JfLT5u
YW1lKCkpOwotCi0gIC8vIFN0YXJ0IG9mIGNvbnRhaW5lciBpbnRlcmZhY2UKLSAgLy8gSWYgZ2Vu
ZXJhdGluZyBpbnRkZWZzLCB3ZSB1c2UgdGhlIGNvbnRhaW5lciBpbnRlcmZhY2UgYXMgdGhlIGlu
dGRlZiBpZgotICAvLyBwcmVzZW50LiBPdGhlcndpc2UsIHdlIGp1c3QgbWFrZSBhbiBlbXB0eSBA
aW50ZXJmYWNlIHBhcmFsbGVsIHRvIHRoZQotICAvLyBjb25zdGFudHMuCi0gIGJvb2wgdXNlX2lu
dGRlZiA9IHBhcmFtc18uZ2VuZXJhdGVfaW50ZGVmcygpOwotICBib29sIHVzZV9zaGVsbF9jbGFz
cyA9IHBhcmFtc18uamF2YV9lbnVtX3N0eWxlKCk7Ci0gIGlmICh1c2VfaW50ZGVmKSB7Ci0gICAg
Ly8gQEludERlZiBhbm5vdGF0aW9uIHNvIHRvb2xzIGNhbiBlbmZvcmNlIGNvcnJlY3RuZXNzCi0g
ICAgLy8gQW5ub3RhdGlvbnMgd2lsbCBiZSBkaXNjYXJkZWQgYnkgdGhlIGNvbXBpbGVyCi0gICAg
cHJpbnRlci0+UHJpbnQoIkBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oIgotICAgICAg
ImphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS5TT1VSQ0UpXG4iCi0gICAgICAi
QGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLkludERlZih7XG4iKTsKLSAgICBwcmludGVyLT5J
bmRlbnQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbm9uaWNhbF92YWx1ZXNfLnNpemUo
KTsgaSsrKSB7Ci0gICAgICBjb25zdCBzdHJpbmcgY29uc3RhbnRfbmFtZSA9Ci0gICAgICAgICAg
UmVuYW1lSmF2YUtleXdvcmRzKGNhbm9uaWNhbF92YWx1ZXNfW2ldLT5uYW1lKCkpOwotICAgICAg
aWYgKHVzZV9zaGVsbF9jbGFzcykgewotICAgICAgICBwcmludGVyLT5QcmludCgiJGNsYXNzbmFt
ZSQuJG5hbWUkLFxuIiwKLSAgICAgICAgICAiY2xhc3NuYW1lIiwgY2xhc3NuYW1lLAotICAgICAg
ICAgICJuYW1lIiwgY29uc3RhbnRfbmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmlu
dGVyLT5QcmludCgiJG5hbWUkLFxuIiwgIm5hbWUiLCBjb25zdGFudF9uYW1lKTsKLSAgICAgIH0K
LSAgICB9Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KCJ9KVxu
Iik7Ci0gIH0KLSAgaWYgKHVzZV9zaGVsbF9jbGFzcyB8fCB1c2VfaW50ZGVmKSB7Ci0gICAgcHJp
bnRlci0+UHJpbnQoCi0gICAgICAicHVibGljICRhdF9mb3JfaW50ZGVmJGludGVyZmFjZSAkY2xh
c3NuYW1lJCB7XG4iLAotICAgICAgImNsYXNzbmFtZSIsIGNsYXNzbmFtZSwKLSAgICAgICJhdF9m
b3JfaW50ZGVmIiwgdXNlX2ludGRlZiA/ICJAIiA6ICIiKTsKLSAgICBpZiAodXNlX3NoZWxsX2Ns
YXNzKSB7Ci0gICAgICAgIHByaW50ZXItPkluZGVudCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHByaW50ZXItPlByaW50KCJ9XG5cbiIpOwotICAgIH0KLSAgfQotCi0gIC8vIENhbm9uaWNhbCB2
YWx1ZXMKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYW5vbmljYWxfdmFsdWVzXy5zaXplKCk7IGkr
KykgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgInB1YmxpYyBzdGF0aWMgZmluYWwgaW50
ICRuYW1lJCA9ICRjYW5vbmljYWxfdmFsdWUkO1xuIiwKLSAgICAgICJuYW1lIiwgUmVuYW1lSmF2
YUtleXdvcmRzKGNhbm9uaWNhbF92YWx1ZXNfW2ldLT5uYW1lKCkpLAotICAgICAgImNhbm9uaWNh
bF92YWx1ZSIsIFNpbXBsZUl0b2EoY2Fub25pY2FsX3ZhbHVlc19baV0tPm51bWJlcigpKSk7Ci0g
IH0KLQotICAvLyBBbGlhc2VzCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgYWxpYXNlc18uc2l6ZSgp
OyBpKyspIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFs
IGludCAkbmFtZSQgPSAkY2Fub25pY2FsX25hbWUkO1xuIiwKLSAgICAgICJuYW1lIiwgUmVuYW1l
SmF2YUtleXdvcmRzKGFsaWFzZXNfW2ldLnZhbHVlLT5uYW1lKCkpLAotICAgICAgImNhbm9uaWNh
bF9uYW1lIiwgUmVuYW1lSmF2YUtleXdvcmRzKGFsaWFzZXNfW2ldLmNhbm9uaWNhbF92YWx1ZS0+
bmFtZSgpKSk7Ci0gIH0KLQotICAvLyBFbmQgb2YgY29udGFpbmVyIGludGVyZmFjZQotICBpZiAo
dXNlX3NoZWxsX2NsYXNzKSB7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXIt
PlByaW50KCJ9XG4iKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgamF2YW5hbm8KLX0gIC8v
IG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2
YW5hbm8vamF2YW5hbm9fZW51bS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFu
YW5vL2phdmFuYW5vX2VudW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkZDM2
NDg3NmY5YzZkZTY1ZjU4ZDRkMDM1NThhYTA5YjUyZGMzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2
YW5hbm8vamF2YW5hbm9fZW51bS5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHA6
Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9u
IFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5
Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5kZWYg
R09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX0VOVU1fSF9fCi0jZGVmaW5lIEdPT0dM
RV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBTkFOT19FTlVNX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5n
PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhbmFuby9qYXZhbmFub19wYXJhbXMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
ZGVzY3JpcHRvci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci0gIG5hbWVzcGFjZSBpbyB7Ci0gICAgY2xhc3MgUHJpbnRlcjsgICAgICAgICAgICAgLy8gcHJp
bnRlci5oCi0gIH0KLX0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxl
ciB7Ci1uYW1lc3BhY2UgamF2YW5hbm8gewotCi1jbGFzcyBFbnVtR2VuZXJhdG9yIHsKLSBwdWJs
aWM6Ci0gIGV4cGxpY2l0IEVudW1HZW5lcmF0b3IoY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsIGNvbnN0IFBhcmFtcyYgcGFyYW1zKTsKLSAgfkVudW1HZW5lcmF0b3IoKTsKLQotICB2
b2lkIEdlbmVyYXRlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotIHByaXZhdGU6Ci0gIGNvbnN0
IFBhcmFtcyYgcGFyYW1zXzsKLSAgY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwot
Ci0gIC8vIFRoZSBwcm90byBsYW5ndWFnZSBhbGxvd3MgbXVsdGlwbGUgZW51bSBjb25zdGFudHMg
dG8gaGF2ZSB0aGUgc2FtZSBudW1lcmljCi0gIC8vIHZhbHVlLiAgSmF2YSwgaG93ZXZlciwgZG9l
cyBub3QgYWxsb3cgbXVsdGlwbGUgZW51bSBjb25zdGFudHMgdG8gYmUKLSAgLy8gY29uc2lkZXJl
ZCBlcXVpdmFsZW50LiAgV2UgdHJlYXQgdGhlIGZpcnN0IGRlZmluZWQgY29uc3RhbnQgZm9yIGFu
eQotICAvLyBnaXZlbiBudW1lcmljIHZhbHVlIGFzICJjYW5vbmljYWwiIGFuZCB0aGUgcmVzdCBh
cyBhbGlhc2VzIG9mIHRoYXQKLSAgLy8gY2Fub25pY2FsIHZhbHVlLgotICB2ZWN0b3I8Y29uc3Qg
RW51bVZhbHVlRGVzY3JpcHRvcio+IGNhbm9uaWNhbF92YWx1ZXNfOwotCi0gIHN0cnVjdCBBbGlh
cyB7Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWU7Ci0gICAgY29uc3QgRW51
bVZhbHVlRGVzY3JpcHRvciogY2Fub25pY2FsX3ZhbHVlOwotICB9OwotICB2ZWN0b3I8QWxpYXM+
IGFsaWFzZXNfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhFbnVtR2Vu
ZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhbmFubwotfSAgLy8gbmFtZXNwYWNl
IGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdv
b2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQU5BTk9fRU5VTV9I
X18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZh
bmFub19lbnVtX2ZpZWxkLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5v
L2phdmFuYW5vX2VudW1fZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2
NjZkYjM4YTI0N2I0YTIxOTNmYzEyY2E4NTJhMmRhMjljNmYyMmUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmFuYW5vL2phdmFuYW5vX2VudW1fZmllbGQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1NDQg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xl
LmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZl
cnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMu
Ci0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2VudW1fZmllbGQuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93
aXJlX2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+
Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBj
b21waWxlciB7Ci1uYW1lc3BhY2UgamF2YW5hbm8gewotCi1uYW1lc3BhY2UgewotCi0vLyBUT0RP
KGtlbnRvbik6ICBGYWN0b3Igb3V0IGEgIlNldENvbW1vbkZpZWxkVmFyaWFibGVzKCkiIHRvIGdl
dCByaWQgb2YKLS8vICAgcmVwZWF0IGNvZGUgYmV0d2VlbiB0aGlzIGFuZCB0aGUgb3RoZXIgZmll
bGQgdHlwZXMuCi12b2lkIFNldEVudW1WYXJpYWJsZXMoY29uc3QgUGFyYW1zJiBwYXJhbXMsCi0g
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBtYXA8c3RyaW5nLCBzdHJpbmc+
KiB2YXJpYWJsZXMpIHsKLSAgKCp2YXJpYWJsZXMpWyJuYW1lIl0gPQotICAgIFJlbmFtZUphdmFL
ZXl3b3JkcyhVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGRlc2NyaXB0b3IpKTsKLSAgKCp2YXJpYWJs
ZXMpWyJjYXBpdGFsaXplZF9uYW1lIl0gPQotICAgIFJlbmFtZUphdmFLZXl3b3JkcyhVbmRlcnNj
b3Jlc1RvQ2FwaXRhbGl6ZWRDYW1lbENhc2UoZGVzY3JpcHRvcikpOwotICAoKnZhcmlhYmxlcylb
Im51bWJlciJdID0gU2ltcGxlSXRvYShkZXNjcmlwdG9yLT5udW1iZXIoKSk7Ci0gIGlmIChwYXJh
bXMudXNlX3JlZmVyZW5jZV90eXBlc19mb3JfcHJpbWl0aXZlcygpCi0gICAgICAmJiAhcGFyYW1z
LnJlZnR5cGVzX3ByaW1pdGl2ZV9lbnVtcygpCi0gICAgICAmJiAhZGVzY3JpcHRvci0+aXNfcmVw
ZWF0ZWQoKSkgewotICAgICgqdmFyaWFibGVzKVsidHlwZSJdID0gImphdmEubGFuZy5JbnRlZ2Vy
IjsKLSAgICAoKnZhcmlhYmxlcylbImRlZmF1bHQiXSA9ICJudWxsIjsKLSAgfSBlbHNlIHsKLSAg
ICAoKnZhcmlhYmxlcylbInR5cGUiXSA9ICJpbnQiOwotICAgICgqdmFyaWFibGVzKVsiZGVmYXVs
dCJdID0gRGVmYXVsdFZhbHVlKHBhcmFtcywgZGVzY3JpcHRvcik7Ci0gIH0KLSAgKCp2YXJpYWJs
ZXMpWyJyZXBlYXRlZF9kZWZhdWx0Il0gPQotICAgICAgImNvbS5nb29nbGUucHJvdG9idWYubmFu
by5XaXJlRm9ybWF0TmFuby5FTVBUWV9JTlRfQVJSQVkiOwotICAoKnZhcmlhYmxlcylbInRhZyJd
ID0gU2ltcGxlSXRvYShpbnRlcm5hbDo6V2lyZUZvcm1hdDo6TWFrZVRhZyhkZXNjcmlwdG9yKSk7
Ci0gICgqdmFyaWFibGVzKVsidGFnX3NpemUiXSA9IFNpbXBsZUl0b2EoCi0gICAgICBpbnRlcm5h
bDo6V2lyZUZvcm1hdDo6VGFnU2l6ZShkZXNjcmlwdG9yLT5udW1iZXIoKSwgZGVzY3JpcHRvci0+
dHlwZSgpKSk7Ci0gICgqdmFyaWFibGVzKVsibm9uX3BhY2tlZF90YWciXSA9IFNpbXBsZUl0b2Eo
Ci0gICAgICBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1ha2VUYWcoZGVzY3JpcHRvci0+bnVt
YmVyKCksCi0gICAgICAgICAgaW50ZXJuYWw6OldpcmVGb3JtYXQ6OldpcmVUeXBlRm9yRmllbGRU
eXBlKGRlc2NyaXB0b3ItPnR5cGUoKSkpKTsKLSAgKCp2YXJpYWJsZXMpWyJtZXNzYWdlX25hbWUi
XSA9IGRlc2NyaXB0b3ItPmNvbnRhaW5pbmdfdHlwZSgpLT5uYW1lKCk7Ci0gIGNvbnN0IEVudW1E
ZXNjcmlwdG9yKiBlbnVtX3R5cGUgPSBkZXNjcmlwdG9yLT5lbnVtX3R5cGUoKTsKLSAgKCp2YXJp
YWJsZXMpWyJtZXNzYWdlX3R5cGVfaW50ZGVmIl0gPSAiQCIKLSAgICAgICsgVG9KYXZhTmFtZShw
YXJhbXMsIGVudW1fdHlwZS0+bmFtZSgpLCB0cnVlLAotICAgICAgICAgIGVudW1fdHlwZS0+Y29u
dGFpbmluZ190eXBlKCksIGVudW1fdHlwZS0+ZmlsZSgpKTsKLX0KLQotdm9pZCBMb2FkRW51bVZh
bHVlcyhjb25zdCBQYXJhbXMmIHBhcmFtcywKLSAgICBjb25zdCBFbnVtRGVzY3JpcHRvciogZW51
bV9kZXNjcmlwdG9yLCB2ZWN0b3I8c3RyaW5nPiogY2Fub25pY2FsX3ZhbHVlcykgewotICBzdHJp
bmcgZW51bV9jbGFzc19uYW1lID0gQ2xhc3NOYW1lKHBhcmFtcywgZW51bV9kZXNjcmlwdG9yKTsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnVtX2Rlc2NyaXB0b3ItPnZhbHVlX2NvdW50KCk7IGkr
KykgewotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIHZhbHVlID0gZW51bV9kZXNjcmlw
dG9yLT52YWx1ZShpKTsKLSAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBjYW5vbmljYWxf
dmFsdWUgPQotICAgICAgICBlbnVtX2Rlc2NyaXB0b3ItPkZpbmRWYWx1ZUJ5TnVtYmVyKHZhbHVl
LT5udW1iZXIoKSk7Ci0gICAgaWYgKHZhbHVlID09IGNhbm9uaWNhbF92YWx1ZSkgewotICAgICAg
Y2Fub25pY2FsX3ZhbHVlcy0+cHVzaF9iYWNrKAotICAgICAgICAgIGVudW1fY2xhc3NfbmFtZSAr
ICIuIiArIFJlbmFtZUphdmFLZXl3b3Jkcyh2YWx1ZS0+bmFtZSgpKSk7Ci0gICAgfQotICB9Ci19
Ci0KLXZvaWQgUHJpbnRDYXNlTGFiZWxzKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLCBjb25z
dCB2ZWN0b3I8c3RyaW5nPiYgY2Fub25pY2FsX3ZhbHVlcykgewotICBmb3IgKGludCBpID0gMDsg
aSA8IGNhbm9uaWNhbF92YWx1ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICBwcmludGVyLT5QcmludCgK
LSAgICAgICIgIGNhc2UgJHZhbHVlJDpcbiIsCi0gICAgICAidmFsdWUiLCBjYW5vbmljYWxfdmFs
dWVzW2ldKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1F
bnVtRmllbGRHZW5lcmF0b3I6OgotRW51bUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZGVzY3JpcHRvciwgY29uc3QgUGFyYW1zJiBwYXJhbXMpCi0gIDogRmllbGRHZW5lcmF0
b3IocGFyYW1zKSwgZGVzY3JpcHRvcl8oZGVzY3JpcHRvcikgewotICBTZXRFbnVtVmFyaWFibGVz
KHBhcmFtcywgZGVzY3JpcHRvciwgJnZhcmlhYmxlc18pOwotICBMb2FkRW51bVZhbHVlcyhwYXJh
bXMsIGRlc2NyaXB0b3ItPmVudW1fdHlwZSgpLCAmY2Fub25pY2FsX3ZhbHVlc18pOwotfQotCi1F
bnVtRmllbGRHZW5lcmF0b3I6On5FbnVtRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIEVudW1G
aWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJv
b2wgLyogdW51c2VkIGxhenlfaW5pdCAqLykgY29uc3QgewotICBpZiAocGFyYW1zXy5nZW5lcmF0
ZV9pbnRkZWZzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiJG1lc3NhZ2Vf
dHlwZV9pbnRkZWYkXG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAicHVi
bGljICR0eXBlJCAkbmFtZSQ7XG4iKTsKLQotICBpZiAocGFyYW1zXy5nZW5lcmF0ZV9oYXMoKSkg
ewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAicHVibGljIGJvb2xlYW4g
aGFzJGNhcGl0YWxpemVkX25hbWUkO1xuIik7Ci0gIH0KLX0KLQotdm9pZCBFbnVtRmllbGRHZW5l
cmF0b3I6OgotR2VuZXJhdGVDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJG5hbWUkID0gJGRlZmF1bHQkO1xu
Iik7Ci0KLSAgaWYgKHBhcmFtc18uZ2VuZXJhdGVfaGFzKCkpIHsKLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICAgImhhcyRjYXBpdGFsaXplZF9uYW1lJCA9IGZhbHNlO1xuIik7
Ci0gIH0KLX0KLQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZXJnaW5nQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICJpbnQgdmFsdWUgPSBpbnB1dC5yZWFkSW50MzIoKTtcbiIKLSAgICAic3dpdGNo
ICh2YWx1ZSkge1xuIik7Ci0gIFByaW50Q2FzZUxhYmVscyhwcmludGVyLCBjYW5vbmljYWxfdmFs
dWVzXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiAgICB0aGlzLiRuYW1l
JCA9IHZhbHVlO1xuIik7Ci0gIGlmIChwYXJhbXNfLmdlbmVyYXRlX2hhcygpKSB7Ci0gICAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIgICAgaGFzJGNhcGl0YWxpemVkX25hbWUk
ID0gdHJ1ZTtcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KAotICAgICIgICAgYnJlYWs7XG4i
Ci0gICAgIn1cbiIpOwotICAvLyBObyBkZWZhdWx0IGNhc2U6IGluIGNhc2Ugb2YgaW52YWxpZCB2
YWx1ZSBmcm9tIHRoZSB3aXJlLCBwcmVzZXJ2ZSBvbGQKLSAgLy8gZmllbGQgdmFsdWUuIEFsc28g
d2UgYXJlIG5vdCBzdG9yaW5nIHRoZSBpbnZhbGlkIHZhbHVlIGludG8gdGhlIHVua25vd24KLSAg
Ly8gZmllbGRzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byBnZXQgdGhlIHZhbHVlIG91dC4K
LX0KLQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29k
ZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3Jl
cXVpcmVkKCkgJiYgIXBhcmFtc18uZ2VuZXJhdGVfaGFzKCkpIHsKLSAgICAvLyBBbHdheXMgc2Vy
aWFsaXplIGEgcmVxdWlyZWQgZmllbGQgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgJ2hhcycgc2lnbmFs
LgotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAib3V0cHV0LndyaXRlSW50
MzIoJG51bWJlciQsIHRoaXMuJG5hbWUkKTtcbiIpOwotICB9IGVsc2UgewotICAgIGlmIChwYXJh
bXNfLmdlbmVyYXRlX2hhcygpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICAgICAiaWYgKHRoaXMuJG5hbWUkICE9ICRkZWZhdWx0JCB8fCBoYXMkY2FwaXRhbGl6ZWRf
bmFtZSQpIHtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJs
ZXNfLAotICAgICAgICAiaWYgKHRoaXMuJG5hbWUkICE9ICRkZWZhdWx0JCkge1xuIik7Ci0gICAg
fQotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiICBvdXRwdXQud3JpdGVJ
bnQzMigkbnVtYmVyJCwgdGhpcy4kbmFtZSQpO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0K
LXZvaWQgRW51bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChkZXNjcmlwdG9yXy0+aXNfcmVxdWly
ZWQoKSAmJiAhcGFyYW1zXy5nZW5lcmF0ZV9oYXMoKSkgewotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgICAic2l6ZSArPSBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uQ29kZWRP
dXRwdXRCeXRlQnVmZmVyTmFub1xuIgotICAgICAgIiAgLmNvbXB1dGVJbnQzMlNpemUoJG51bWJl
ciQsIHRoaXMuJG5hbWUkKTtcbiIpOwotICB9IGVsc2UgewotICAgIGlmIChwYXJhbXNfLmdlbmVy
YXRlX2hhcygpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAi
aWYgKHRoaXMuJG5hbWUkICE9ICRkZWZhdWx0JCB8fCBoYXMkY2FwaXRhbGl6ZWRfbmFtZSQpIHtc
biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICAgICAiaWYgKHRoaXMuJG5hbWUkICE9ICRkZWZhdWx0JCkge1xuIik7Ci0gICAgfQotICAgIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiICBzaXplICs9IGNvbS5nb29nbGUucHJv
dG9idWYubmFuby5Db2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vXG4iCi0gICAgICAiICAgIC5jb21w
dXRlSW50MzJTaXplKCRudW1iZXIkLCB0aGlzLiRuYW1lJCk7XG4iCi0gICAgICAifVxuIik7Ci0g
IH0KLX0KLQotdm9pZCBFbnVtRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlRXF1YWxzQ29kZShpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAocGFyYW1zXy51c2VfcmVmZXJlbmNlX3R5
cGVzX2Zvcl9wcmltaXRpdmVzKCkKLSAgICAgICAgJiYgIXBhcmFtc18ucmVmdHlwZXNfcHJpbWl0
aXZlX2VudW1zKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImlm
ICh0aGlzLiRuYW1lJCA9PSBudWxsKSB7XG4iCi0gICAgICAiICBpZiAob3RoZXIuJG5hbWUkICE9
IG51bGwpIHtcbiIKLSAgICAgICIgICAgcmV0dXJuIGZhbHNlO1xuIgotICAgICAgIiAgfVxuIgot
ICAgICAgIn0gZWxzZSBpZiAoIXRoaXMuJG5hbWUkLmVxdWFscyhvdGhlci4kbmFtZSQpKSB7XG4i
Ci0gICAgICAiICByZXR1cm4gZmFsc2U7IgotICAgICAgIn1cbiIpOwotICB9IGVsc2UgewotICAg
IC8vIFdlIGRlZmluZSBlcXVhbGl0eSBhcyBzZXJpYWxpemVkIGZvcm0gZXF1YWxpdHkuIElmIGdl
bmVyYXRlX2hhcygpLAotICAgIC8vIHRoZW4gaWYgdGhlIGZpZWxkIHZhbHVlIGVxdWFscyB0aGUg
ZGVmYXVsdCB2YWx1ZSBpbiBib3RoIG1lc3NhZ2VzLAotICAgIC8vIGJ1dCBvbmUncyAnaGFzJyBm
aWVsZCBpcyBzZXQgYW5kIHRoZSBvdGhlcidzIGlzIG5vdCwgdGhlIHNlcmlhbGl6ZWQKLSAgICAv
LyBmb3JtcyBhcmUgZGlmZmVyZW50IGFuZCB3ZSBzaG91bGQgcmV0dXJuIGZhbHNlLgotICAgIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaWYgKHRoaXMuJG5hbWUkICE9IG90aGVy
LiRuYW1lJCIpOwotICAgIGlmIChwYXJhbXNfLmdlbmVyYXRlX2hhcygpKSB7Ci0gICAgICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiXG4iCi0gICAgICAgICIgICAgfHwgKHRo
aXMuJG5hbWUkID09ICRkZWZhdWx0JFxuIgotICAgICAgICAiICAgICAgICAmJiB0aGlzLmhhcyRj
YXBpdGFsaXplZF9uYW1lJCAhPSBvdGhlci5oYXMkY2FwaXRhbGl6ZWRfbmFtZSQpIik7Ci0gICAg
fQotICAgIHByaW50ZXItPlByaW50KCIpIHtcbiIKLSAgICAgICIgIHJldHVybiBmYWxzZTtcbiIK
LSAgICAgICJ9XG4iKTsKLSAgfQotfQotCi12b2lkIEVudW1GaWVsZEdlbmVyYXRvcjo6R2VuZXJh
dGVIYXNoQ29kZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+
UHJpbnQoCi0gICAgInJlc3VsdCA9IDMxICogcmVzdWx0ICsgIik7Ci0gIGlmIChwYXJhbXNfLnVz
ZV9yZWZlcmVuY2VfdHlwZXNfZm9yX3ByaW1pdGl2ZXMoKQotICAgICAgICAmJiAhcGFyYW1zXy5y
ZWZ0eXBlc19wcmltaXRpdmVfZW51bXMoKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgICAiKHRoaXMuJG5hbWUkID09IG51bGwgPyAwIDogdGhpcy4kbmFtZSQpIik7Ci0g
IH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJ0aGlzLiRu
YW1lJCIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KCI7XG4iKTsKLX0KLQotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi1BY2Nlc3NvckVudW1GaWVsZEdlbmVyYXRvcjo6Ci1BY2Nlc3NvckVudW1GaWVsZEdlbmVy
YXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgY29uc3QgUGFyYW1z
JiBwYXJhbXMsIGludCBoYXNfYml0X2luZGV4KQotICA6IEZpZWxkR2VuZXJhdG9yKHBhcmFtcyks
IGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpIHsKLSAgU2V0RW51bVZhcmlhYmxlcyhwYXJhbXMsIGRl
c2NyaXB0b3IsICZ2YXJpYWJsZXNfKTsKLSAgTG9hZEVudW1WYWx1ZXMocGFyYW1zLCBkZXNjcmlw
dG9yLT5lbnVtX3R5cGUoKSwgJmNhbm9uaWNhbF92YWx1ZXNfKTsKLSAgU2V0Qml0T3BlcmF0aW9u
VmFyaWFibGVzKCJoYXMiLCBoYXNfYml0X2luZGV4LCAmdmFyaWFibGVzXyk7Ci19Ci0KLUFjY2Vz
c29yRW51bUZpZWxkR2VuZXJhdG9yOjp+QWNjZXNzb3JFbnVtRmllbGRHZW5lcmF0b3IoKSB7fQot
Ci12b2lkIEFjY2Vzc29yRW51bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhpbzo6
UHJpbnRlciogcHJpbnRlciwgYm9vbCAvKiB1bnVzZWQgbGF6eV9pbml0ICovKSBjb25zdCB7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICJwcml2YXRlIGludCAkbmFtZSRfO1xuIik7Ci0g
IGlmIChwYXJhbXNfLmdlbmVyYXRlX2ludGRlZnMoKSkgewotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sICIkbWVzc2FnZV90eXBlX2ludGRlZiRcbiIpOwotICB9Ci0gIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgInB1YmxpYyBpbnQgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkg
e1xuIgotICAgICIgIHJldHVybiAkbmFtZSRfO1xuIgotICAgICJ9XG4iCi0gICAgInB1YmxpYyAk
bWVzc2FnZV9uYW1lJCBzZXQkY2FwaXRhbGl6ZWRfbmFtZSQoIik7Ci0gIGlmIChwYXJhbXNfLmdl
bmVyYXRlX2ludGRlZnMoKSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAiXG4iCi0gICAgICAiICAgICRtZXNzYWdlX3R5cGVfaW50ZGVmJCAiKTsKLSAgfQotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpbnQgdmFsdWUpIHtcbiIKLSAgICAiICAkbmFt
ZSRfID0gdmFsdWU7XG4iCi0gICAgIiAgJHNldF9oYXMkO1xuIgotICAgICIgIHJldHVybiB0aGlz
O1xuIgotICAgICJ9XG4iCi0gICAgInB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1l
JCgpIHtcbiIKLSAgICAiICByZXR1cm4gJGdldF9oYXMkO1xuIgotICAgICJ9XG4iCi0gICAgInB1
YmxpYyAkbWVzc2FnZV9uYW1lJCBjbGVhciRjYXBpdGFsaXplZF9uYW1lJCgpIHtcbiIKLSAgICAi
ICAkbmFtZSRfID0gJGRlZmF1bHQkO1xuIgotICAgICIgICRjbGVhcl9oYXMkO1xuIgotICAgICIg
IHJldHVybiB0aGlzO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBBY2Nlc3NvckVudW1GaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkbmFtZSRfID0gJGRlZmF1
bHQkO1xuIik7Ci19Ci0KLXZvaWQgQWNjZXNzb3JFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJh
dGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICJpbnQgdmFsdWUgPSBpbnB1dC5yZWFkSW50MzIoKTtcbiIK
LSAgICAic3dpdGNoICh2YWx1ZSkge1xuIik7Ci0gIFByaW50Q2FzZUxhYmVscyhwcmludGVyLCBj
YW5vbmljYWxfdmFsdWVzXyk7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiAg
ICAkbmFtZSRfID0gdmFsdWU7XG4iCi0gICAgIiAgICAkc2V0X2hhcyQ7XG4iCi0gICAgIiAgICBi
cmVhaztcbiIKLSAgICAifVxuIik7Ci0gIC8vIE5vIGRlZmF1bHQgY2FzZTogaW4gY2FzZSBvZiBp
bnZhbGlkIHZhbHVlIGZyb20gdGhlIHdpcmUsIHByZXNlcnZlIG9sZAotICAvLyBmaWVsZCB2YWx1
ZS4gQWxzbyB3ZSBhcmUgbm90IHN0b3JpbmcgdGhlIGludmFsaWQgdmFsdWUgaW50byB0aGUgdW5r
bm93bgotICAvLyBmaWVsZHMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvIGdldCB0aGUgdmFs
dWUgb3V0LgotfQotCi12b2lkIEFjY2Vzc29yRW51bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRl
U2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKCRnZXRfaGFzJCkge1xuIgotICAgICIgIG91
dHB1dC53cml0ZUludDMyKCRudW1iZXIkLCAkbmFtZSRfKTtcbiIKLSAgICAifVxuIik7Ci19Ci0K
LXZvaWQgQWNjZXNzb3JFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6
ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAiaWYgKCRnZXRfaGFzJCkge1xuIgotICAgICIgIHNpemUgKz0gY29tLmdv
b2dsZS5wcm90b2J1Zi5uYW5vLkNvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm9cbiIKLSAgICAiICAg
IC5jb21wdXRlSW50MzJTaXplKCRudW1iZXIkLCAkbmFtZSRfKTtcbiIKLSAgICAifVxuIik7Ci19
Ci0KLXZvaWQgQWNjZXNzb3JFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVFcXVhbHNDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgImlmICgkZGlmZmVyZW50X2hhcyRcbiIKLSAgICAiICAgIHx8ICRuYW1lJF8gIT0g
b3RoZXIuJG5hbWUkXykge1xuIgotICAgICIgIHJldHVybiBmYWxzZTtcbiIKLSAgICAifVxuIik7
Ci19Ci0KLXZvaWQgQWNjZXNzb3JFbnVtRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNoQ29k
ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAicmVzdWx0ID0gMzEgKiByZXN1bHQgKyAkbmFtZSRfO1xuIik7Ci19Ci0K
LS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLQotUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3I6OgotUmVwZWF0ZWRF
bnVtRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25z
dCBQYXJhbXMmIHBhcmFtcykKLSAgOiBGaWVsZEdlbmVyYXRvcihwYXJhbXMpLCBkZXNjcmlwdG9y
XyhkZXNjcmlwdG9yKSB7Ci0gIFNldEVudW1WYXJpYWJsZXMocGFyYW1zLCBkZXNjcmlwdG9yLCAm
dmFyaWFibGVzXyk7Ci0gIExvYWRFbnVtVmFsdWVzKHBhcmFtcywgZGVzY3JpcHRvci0+ZW51bV90
eXBlKCksICZjYW5vbmljYWxfdmFsdWVzXyk7Ci19Ci0KLVJlcGVhdGVkRW51bUZpZWxkR2VuZXJh
dG9yOjp+UmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIFJlcGVhdGVkRW51
bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlciwg
Ym9vbCAvKiB1bnVzZWQgbGF6eV9pbml0ICovKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgInB1YmxpYyAkdHlwZSRbXSAkbmFtZSQ7XG4iKTsKLX0KLQotdm9pZCBS
ZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUNsZWFyQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIk
bmFtZSQgPSAkcmVwZWF0ZWRfZGVmYXVsdCQ7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEVudW1G
aWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCB7Ci0gIC8vIEZpcnN0LCBmaWd1cmUgb3V0IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0
aGUgYXJyYXksIHRoZW4gcGFyc2UsCi0gIC8vIGFuZCBmaW5hbGx5IGNvcHkgdGhlIHZhbGlkIHZh
bHVlcyB0byB0aGUgZmllbGQuCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlu
dCBsZW5ndGggPSBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uV2lyZUZvcm1hdE5hbm9cbiIKLSAg
ICAiICAgIC5nZXRSZXBlYXRlZEZpZWxkQXJyYXlMZW5ndGgoaW5wdXQsICRub25fcGFja2VkX3Rh
ZyQpO1xuIgotICAgICJpbnRbXSB2YWxpZFZhbHVlcyA9IG5ldyBpbnRbbGVuZ3RoXTtcbiIKLSAg
ICAiaW50IHZhbGlkQ291bnQgPSAwO1xuIgotICAgICJmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7XG4iCi0gICAgIiAgaWYgKGkgIT0gMCkgeyAvLyB0YWcgZm9yIGZpcnN0IHZhbHVl
IGFscmVhZHkgY29uc3VtZWQuXG4iCi0gICAgIiAgICBpbnB1dC5yZWFkVGFnKCk7XG4iCi0gICAg
IiAgfVxuIgotICAgICIgIGludCB2YWx1ZSA9IGlucHV0LnJlYWRJbnQzMigpO1xuIgotICAgICIg
IHN3aXRjaCAodmFsdWUpIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLSAgUHJpbnRDYXNl
TGFiZWxzKHByaW50ZXIsIGNhbm9uaWNhbF92YWx1ZXNfKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgp
OwotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIgICAgICB2YWxpZFZhbHVlc1t2
YWxpZENvdW50KytdID0gdmFsdWU7XG4iCi0gICAgIiAgICAgIGJyZWFrO1xuIgotICAgICIgIH1c
biIKLSAgICAifVxuIgotICAgICJpZiAodmFsaWRDb3VudCAhPSAwKSB7XG4iCi0gICAgIiAgaW50
IGkgPSB0aGlzLiRuYW1lJCA9PSBudWxsID8gMCA6IHRoaXMuJG5hbWUkLmxlbmd0aDtcbiIKLSAg
ICAiICBpZiAoaSA9PSAwICYmIHZhbGlkQ291bnQgPT0gdmFsaWRWYWx1ZXMubGVuZ3RoKSB7XG4i
Ci0gICAgIiAgICB0aGlzLiRuYW1lJCA9IHZhbGlkVmFsdWVzO1xuIgotICAgICIgIH0gZWxzZSB7
XG4iCi0gICAgIiAgICBpbnRbXSBuZXdBcnJheSA9IG5ldyBpbnRbaSArIHZhbGlkQ291bnRdO1xu
IgotICAgICIgICAgaWYgKGkgIT0gMCkge1xuIgotICAgICIgICAgICBqYXZhLmxhbmcuU3lzdGVt
LmFycmF5Y29weSh0aGlzLiRuYW1lJCwgMCwgbmV3QXJyYXksIDAsIGkpO1xuIgotICAgICIgICAg
fVxuIgotICAgICIgICAgamF2YS5sYW5nLlN5c3RlbS5hcnJheWNvcHkodmFsaWRWYWx1ZXMsIDAs
IG5ld0FycmF5LCBpLCB2YWxpZENvdW50KTtcbiIKLSAgICAiICAgIHRoaXMuJG5hbWUkID0gbmV3
QXJyYXk7XG4iCi0gICAgIiAgfVxuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZEVu
dW1GaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlRnJvbVBhY2tlZChpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICJpbnQgYnl0ZXMgPSBpbnB1dC5yZWFkUmF3VmFyaW50MzIoKTtcbiIKLSAgICAiaW50IGxpbWl0
ID0gaW5wdXQucHVzaExpbWl0KGJ5dGVzKTtcbiIKLSAgICAiLy8gRmlyc3QgcGFzcyB0byBjb21w
dXRlIGFycmF5IGxlbmd0aC5cbiIKLSAgICAiaW50IGFycmF5TGVuZ3RoID0gMDtcbiIKLSAgICAi
aW50IHN0YXJ0UG9zID0gaW5wdXQuZ2V0UG9zaXRpb24oKTtcbiIKLSAgICAid2hpbGUgKGlucHV0
LmdldEJ5dGVzVW50aWxMaW1pdCgpID4gMCkge1xuIgotICAgICIgIHN3aXRjaCAoaW5wdXQucmVh
ZEludDMyKCkpIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLSAgUHJpbnRDYXNlTGFiZWxz
KHByaW50ZXIsIGNhbm9uaWNhbF92YWx1ZXNfKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICIgICAgICBhcnJheUxlbmd0aCsrO1xuIgot
ICAgICIgICAgICBicmVhaztcbiIKLSAgICAiICB9XG4iCi0gICAgIn1cbiIKLSAgICAiaWYgKGFy
cmF5TGVuZ3RoICE9IDApIHtcbiIKLSAgICAiICBpbnB1dC5yZXdpbmRUb1Bvc2l0aW9uKHN0YXJ0
UG9zKTtcbiIKLSAgICAiICBpbnQgaSA9IHRoaXMuJG5hbWUkID09IG51bGwgPyAwIDogdGhpcy4k
bmFtZSQubGVuZ3RoO1xuIgotICAgICIgIGludFtdIG5ld0FycmF5ID0gbmV3IGludFtpICsgYXJy
YXlMZW5ndGhdO1xuIgotICAgICIgIGlmIChpICE9IDApIHtcbiIKLSAgICAiICAgIGphdmEubGFu
Zy5TeXN0ZW0uYXJyYXljb3B5KHRoaXMuJG5hbWUkLCAwLCBuZXdBcnJheSwgMCwgaSk7XG4iCi0g
ICAgIiAgfVxuIgotICAgICIgIHdoaWxlIChpbnB1dC5nZXRCeXRlc1VudGlsTGltaXQoKSA+IDAp
IHtcbiIKLSAgICAiICAgIGludCB2YWx1ZSA9IGlucHV0LnJlYWRJbnQzMigpO1xuIgotICAgICIg
ICAgc3dpdGNoICh2YWx1ZSkge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotICBwcmludGVy
LT5JbmRlbnQoKTsKLSAgUHJpbnRDYXNlTGFiZWxzKHByaW50ZXIsIGNhbm9uaWNhbF92YWx1ZXNf
KTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiAgICAgICAgbmV3QXJyYXlbaSsrXSA9IHZhbHVl
O1xuIgotICAgICIgICAgICAgIGJyZWFrO1xuIgotICAgICIgICAgfVxuIgotICAgICIgIH1cbiIK
LSAgICAiICB0aGlzLiRuYW1lJCA9IG5ld0FycmF5O1xuIgotICAgICJ9XG4iCi0gICAgImlucHV0
LnBvcExpbWl0KGxpbWl0KTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkRW51bUZpZWxkR2VuZXJh
dG9yOjoKLUdlbmVyYXRlUmVwZWF0ZWREYXRhU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgLy8gQ3JlYXRlcyBhIHZhcmlhYmxlIGRhdGFTaXplIGFuZCBwdXRzIHRoZSBz
ZXJpYWxpemVkIHNpemUgaW4gdGhlcmUuCi0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0g
ICAgImludCBkYXRhU2l6ZSA9IDA7XG4iCi0gICAgImZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy4k
bmFtZSQubGVuZ3RoOyBpKyspIHtcbiIKLSAgICAiICBpbnQgZWxlbWVudCA9IHRoaXMuJG5hbWUk
W2ldO1xuIgotICAgICIgIGRhdGFTaXplICs9IGNvbS5nb29nbGUucHJvdG9idWYubmFuby5Db2Rl
ZE91dHB1dEJ5dGVCdWZmZXJOYW5vXG4iCi0gICAgIiAgICAgIC5jb21wdXRlSW50MzJTaXplTm9U
YWcoZWxlbWVudCk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkRW51bUZpZWxk
R2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKHRoaXMu
JG5hbWUkICE9IG51bGwgJiYgdGhpcy4kbmFtZSQubGVuZ3RoID4gMCkge1xuIik7Ci0gIHByaW50
ZXItPkluZGVudCgpOwotCi0gIGlmIChkZXNjcmlwdG9yXy0+b3B0aW9ucygpLnBhY2tlZCgpKSB7
Ci0gICAgR2VuZXJhdGVSZXBlYXRlZERhdGFTaXplQ29kZShwcmludGVyKTsKLSAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIm91dHB1dC53cml0ZVJhd1ZhcmludDMyKCR0YWck
KTtcbiIKLSAgICAgICJvdXRwdXQud3JpdGVSYXdWYXJpbnQzMihkYXRhU2l6ZSk7XG4iCi0gICAg
ICAiZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLiRuYW1lJC5sZW5ndGg7IGkrKykge1xuIgotICAg
ICAgIiAgb3V0cHV0LndyaXRlUmF3VmFyaW50MzIodGhpcy4kbmFtZSRbaV0pO1xuIgotICAgICAg
In1cbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAiZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLiRuYW1lJC5sZW5ndGg7IGkrKykge1xuIgotICAg
ICAgIiAgb3V0cHV0LndyaXRlSW50MzIoJG51bWJlciQsIHRoaXMuJG5hbWUkW2ldKTtcbiIKLSAg
ICAgICJ9XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRFbnVtRmllbGRH
ZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKHRoaXMu
JG5hbWUkICE9IG51bGwgJiYgdGhpcy4kbmFtZSQubGVuZ3RoID4gMCkge1xuIik7Ci0gIHByaW50
ZXItPkluZGVudCgpOwotCi0gIEdlbmVyYXRlUmVwZWF0ZWREYXRhU2l6ZUNvZGUocHJpbnRlcik7
Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInNpemUgKz0gZGF0YVNpemU7XG4iKTsKLSAgaWYg
KGRlc2NyaXB0b3JfLT5vcHRpb25zKCkucGFja2VkKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgInNpemUgKz0gJHRhZ19zaXplJDtcbiIKLSAgICAgICJzaXplICs9
IGNvbS5nb29nbGUucHJvdG9idWYubmFuby5Db2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vXG4iCi0g
ICAgICAiICAgIC5jb21wdXRlUmF3VmFyaW50MzJTaXplKGRhdGFTaXplKTtcbiIpOwotICB9IGVs
c2UgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAic2l6ZSArPSAkdGFn
X3NpemUkICogdGhpcy4kbmFtZSQubGVuZ3RoO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5PdXRk
ZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVh
dGVkRW51bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlRml4Q2xvbmVkQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJp
ZiAodGhpcy4kbmFtZSQgIT0gbnVsbCAmJiB0aGlzLiRuYW1lJC5sZW5ndGggPiAwKSB7XG4iCi0g
ICAgIiAgY2xvbmVkLiRuYW1lJCA9IHRoaXMuJG5hbWUkLmNsb25lKCk7XG4iCi0gICAgIn1cbiIp
OwotfQotCi12b2lkIFJlcGVhdGVkRW51bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlRXF1YWxz
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICJpZiAoIWNvbS5nb29nbGUucHJvdG9idWYubmFuby5JbnRlcm5hbE5hbm8u
ZXF1YWxzKFxuIgotICAgICIgICAgdGhpcy4kbmFtZSQsIG90aGVyLiRuYW1lJCkpIHtcbiIKLSAg
ICAiICByZXR1cm4gZmFsc2U7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkRW51
bUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSGFzaENvZGVDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInJlc3VsdCA9
IDMxICogcmVzdWx0XG4iCi0gICAgIiAgICArIGNvbS5nb29nbGUucHJvdG9idWYubmFuby5JbnRl
cm5hbE5hbm8uaGFzaENvZGUodGhpcy4kbmFtZSQpO1xuIik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBqYXZhbmFubwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJv
dG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19lbnVtX2ZpZWxkLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZW51bV9maWVsZC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTQ3OTBkNmJkMWI2ODM5Mjc0YmJkMWE5OGUzMDMwZjZk
ODc5YzE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19lbnVtX2ZpZWxkLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9w
cm90b2J1Zi8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ly8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9u
IG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0
LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJ
TEVSX0pBVkFOQU5PX0VOVU1fRklFTERfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01Q
SUxFUl9KQVZBTkFOT19FTlVNX0ZJRUxEX0hfXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2ZpZWxkLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewot
bmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2
YW5hbm8gewotCi1jbGFzcyBFbnVtRmllbGRHZW5lcmF0b3IgOiBwdWJsaWMgRmllbGRHZW5lcmF0
b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgRW51bUZpZWxkR2VuZXJhdG9yKAotICAgICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBQYXJhbXMmIHBhcmFtcyk7Ci0g
IH5FbnVtRmllbGRHZW5lcmF0b3IoKTsKLQotICAvLyBpbXBsZW1lbnRzIEZpZWxkR2VuZXJhdG9y
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2b2lkIEdlbmVyYXRl
TWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRlciwgYm9vbCBsYXp5X2luaXQpIGNvbnN0OwotICB2
b2lkIEdlbmVyYXRlQ2xlYXJDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9p
ZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsK
LSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZUhhc2hDb2RlQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0KLSBwcml2YXRlOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3Jf
OwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0gIHZlY3RvcjxzdHJpbmc+IGNh
bm9uaWNhbF92YWx1ZXNfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhF
bnVtRmllbGRHZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgQWNjZXNzb3JFbnVtRmllbGRHZW5lcmF0
b3IgOiBwdWJsaWMgRmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgQWNjZXNz
b3JFbnVtRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAot
ICAgICAgY29uc3QgUGFyYW1zJiBwYXJhbXMsIGludCBoYXNfYml0X2luZGV4KTsKLSAgfkFjY2Vz
c29yRW51bUZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBGaWVsZEdlbmVyYXRv
ciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBHZW5lcmF0
ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgbGF6eV9pbml0KSBjb25zdDsKLSAg
dm9pZCBHZW5lcmF0ZUNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZv
aWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZv
aWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVIYXNoQ29kZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9y
XzsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotICB2ZWN0b3I8c3RyaW5nPiBj
YW5vbmljYWxfdmFsdWVzXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMo
QWNjZXNzb3JFbnVtRmllbGRHZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgUmVwZWF0ZWRFbnVtRmll
bGRHZW5lcmF0b3IgOiBwdWJsaWMgRmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGlj
aXQgUmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3IoCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGRlc2NyaXB0b3IsIGNvbnN0IFBhcmFtcyYgcGFyYW1zKTsKLSAgflJlcGVhdGVkRW51bUZp
ZWxkR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBGaWVsZEdlbmVyYXRvciAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBHZW5lcmF0ZU1lbWJlcnMo
aW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgbGF6eV9pbml0KSBjb25zdDsKLSAgdm9pZCBHZW5l
cmF0ZUNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJh
dGVNZXJnaW5nQ29kZUZyb21QYWNrZWQoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2
b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSGFzaENvZGVDb2RlKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUZpeENsb25lZENvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgdm9pZCBHZW5lcmF0ZVJlcGVhdGVkRGF0YVNpemVD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0gIHZl
Y3RvcjxzdHJpbmc+IGNhbm9uaWNhbF92YWx1ZXNfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklM
X0NPTlNUUlVDVE9SUyhSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBu
YW1lc3BhY2UgamF2YW5hbm8KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNw
YWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xF
X1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX0VOVU1fRklFTERfSF9fCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZXh0ZW5zaW9uLmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2V4dGVuc2lv
bi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5ZDFkOGRlNzQyOWU0YTMxY2Nk
NDE1Mjk5NjJjNGNmZjc3MTdhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9f
ZXh0ZW5zaW9uLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwOi8vY29kZS5n
b29nbGUuY29tL3AvcHJvdG9idWYvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogYmR1ZmZAZ29vZ2xlLmNvbSAoQnJpYW4gRHVmZikKLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19leHRl
bnNpb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2
YW5hbm9faGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1l
c3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhbmFu
byB7Ci0KLXVzaW5nIGludGVybmFsOjpXaXJlRm9ybWF0OwotdXNpbmcgaW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOwotCi1uYW1lc3BhY2UgewotCi1jb25zdCBjaGFyKiBHZXRUeXBlQ29uc3RhbnRO
YW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvcjo6VHlwZSB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDMyICAgOiByZXR1cm4gIlRZUEVf
SU5UMzIiICAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJTlQzMiAgOiByZXR1
cm4gIlRZUEVfVUlOVDMyIiAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQz
MiAgOiByZXR1cm4gIlRZUEVfU0lOVDMyIiAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpU
WVBFX0ZJWEVEMzIgOiByZXR1cm4gIlRZUEVfRklYRUQzMiIgOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX1NGSVhFRDMyOiByZXR1cm4gIlRZUEVfU0ZJWEVEMzIiOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDY0ICAgOiByZXR1cm4gIlRZUEVfSU5UNjQiICAgOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJTlQ2NCAgOiByZXR1cm4gIlRZUEVfVUlO
VDY0IiAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQ2NCAgOiByZXR1cm4g
IlRZUEVfU0lOVDY0IiAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVENjQg
OiByZXR1cm4gIlRZUEVfRklYRUQ2NCIgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBF
X1NGSVhFRDY0OiByZXR1cm4gIlRZUEVfU0ZJWEVENjQiOwotICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpUWVBFX0ZMT0FUICAgOiByZXR1cm4gIlRZUEVfRkxPQVQiICAgOwotICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpUWVBFX0RPVUJMRSAgOiByZXR1cm4gIlRZUEVfRE9VQkxFIiAgOwotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JPT0wgICAgOiByZXR1cm4gIlRZUEVfQk9PTCIg
ICAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NUUklORyAgOiByZXR1cm4gIlRZ
UEVfU1RSSU5HIiAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTICAgOiBy
ZXR1cm4gIlRZUEVfQllURVMiICAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0VO
VU0gICAgOiByZXR1cm4gIlRZUEVfRU5VTSIgICAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX0dST1VQICAgOiByZXR1cm4gIlRZUEVfR1JPVVAiICAgOwotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX01FU1NBR0UgOiByZXR1cm4gIlRZUEVfTUVTU0FHRSIgOwotCi0gICAg
Ly8gTm8gZGVmYXVsdCBiZWNhdXNlIHdlIHdhbnQgdGhlIGNvbXBpbGVyIHRvIGNvbXBsYWluIGlm
IGFueSBuZXcKLSAgICAvLyB0eXBlcyBhcmUgYWRkZWQuCi0gIH0KLQotICBHT09HTEVfTE9HKEZB
VEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLX0gIC8vIG5h
bWVzcGFjZQotCi12b2lkIFNldFZhcmlhYmxlcyhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsIGNvbnN0IFBhcmFtcyBwYXJhbXMsCi0gICAgICAgICAgICAgICAgICBtYXA8c3RyaW5n
LCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAgKCp2YXJpYWJsZXMpWyJleHRlbmRzIl0gPSBDbGFz
c05hbWUocGFyYW1zLCBkZXNjcmlwdG9yLT5jb250YWluaW5nX3R5cGUoKSk7Ci0gICgqdmFyaWFi
bGVzKVsibmFtZSJdID0gUmVuYW1lSmF2YUtleXdvcmRzKFVuZGVyc2NvcmVzVG9DYW1lbENhc2Uo
ZGVzY3JpcHRvcikpOwotICBib29sIHJlcGVhdGVkID0gZGVzY3JpcHRvci0+aXNfcmVwZWF0ZWQo
KTsKLSAgKCp2YXJpYWJsZXMpWyJyZXBlYXRlZCJdID0gcmVwZWF0ZWQgPyAiUmVwZWF0ZWQiIDog
IiI7Ci0gICgqdmFyaWFibGVzKVsidHlwZSJdID0gR2V0VHlwZUNvbnN0YW50TmFtZShkZXNjcmlw
dG9yLT50eXBlKCkpOwotICBKYXZhVHlwZSBqYXZhX3R5cGUgPSBHZXRKYXZhVHlwZShkZXNjcmlw
dG9yLT50eXBlKCkpOwotICBzdHJpbmcgdGFnID0gU2ltcGxlSXRvYShXaXJlRm9ybWF0OjpNYWtl
VGFnKGRlc2NyaXB0b3IpKTsKLSAgaWYgKGphdmFfdHlwZSA9PSBKQVZBVFlQRV9NRVNTQUdFKSB7
Ci0gICAgKCp2YXJpYWJsZXMpWyJleHRfdHlwZSJdID0gIk1lc3NhZ2VUeXBlZCI7Ci0gICAgc3Ry
aW5nIG1lc3NhZ2VfdHlwZSA9IENsYXNzTmFtZShwYXJhbXMsIGRlc2NyaXB0b3ItPm1lc3NhZ2Vf
dHlwZSgpKTsKLSAgICBpZiAocmVwZWF0ZWQpIHsKLSAgICAgIG1lc3NhZ2VfdHlwZSArPSAiW10i
OwotICAgIH0KLSAgICAoKnZhcmlhYmxlcylbImNsYXNzIl0gPSBtZXNzYWdlX3R5cGU7Ci0gICAg
Ly8gRm9yIG1lc3NhZ2UgdHlwZWQgZXh0ZW5zaW9ucywgdGFnc19wYXJhbXMgY29udGFpbnMgYSBz
aW5nbGUgdGFnCi0gICAgLy8gZm9yIGJvdGggc2luZ3VsYXIgYW5kIHJlcGVhdGVkIGNhc2VzLgot
ICAgICgqdmFyaWFibGVzKVsidGFnX3BhcmFtcyJdID0gdGFnOwotICB9IGVsc2UgewotICAgICgq
dmFyaWFibGVzKVsiZXh0X3R5cGUiXSA9ICJQcmltaXRpdmVUeXBlZCI7Ci0gICAgaWYgKCFyZXBl
YXRlZCkgewotICAgICAgKCp2YXJpYWJsZXMpWyJjbGFzcyJdID0gQm94ZWRQcmltaXRpdmVUeXBl
TmFtZShqYXZhX3R5cGUpOwotICAgICAgKCp2YXJpYWJsZXMpWyJ0YWdfcGFyYW1zIl0gPSB0YWc7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICgqdmFyaWFibGVzKVsiY2xhc3MiXSA9IFByaW1pdGl2ZVR5
cGVOYW1lKGphdmFfdHlwZSkgKyAiW10iOwotICAgICAgaWYgKCFkZXNjcmlwdG9yLT5pc19wYWNr
YWJsZSgpKSB7Ci0gICAgICAgIC8vIE5vbi1wYWNrYWJsZTogbm9uUGFja2VkVGFnID09IHRhZywg
cGFja2VkVGFnID09IDAKLSAgICAgICAgKCp2YXJpYWJsZXMpWyJ0YWdfcGFyYW1zIl0gPSB0YWcg
KyAiLCAiICsgdGFnICsgIiwgMCI7Ci0gICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3ItPm9wdGlv
bnMoKS5wYWNrZWQoKSkgewotICAgICAgICAvLyBQYWNrYWJsZSBhbmQgcGFja2VkOiB0YWcgPT0g
cGFja2VkVGFnCi0gICAgICAgIHN0cmluZyBub25fcGFja2VkX3RhZyA9IFNpbXBsZUl0b2EoV2ly
ZUZvcm1hdExpdGU6Ok1ha2VUYWcoCi0gICAgICAgICAgICBkZXNjcmlwdG9yLT5udW1iZXIoKSwK
LSAgICAgICAgICAgIFdpcmVGb3JtYXQ6OldpcmVUeXBlRm9yRmllbGRUeXBlKGRlc2NyaXB0b3It
PnR5cGUoKSkpKTsKLSAgICAgICAgKCp2YXJpYWJsZXMpWyJ0YWdfcGFyYW1zIl0gPSB0YWcgKyAi
LCAiICsgbm9uX3BhY2tlZF90YWcgKyAiLCAiICsgdGFnOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gUGFja2FibGUgYW5kIG5vdCBwYWNrZWQ6IHRhZyA9PSBub25QYWNrZWRUYWcKLSAgICAg
ICAgc3RyaW5nIHBhY2tlZF90YWcgPSBTaW1wbGVJdG9hKFdpcmVGb3JtYXRMaXRlOjpNYWtlVGFn
KAotICAgICAgICAgICAgZGVzY3JpcHRvci0+bnVtYmVyKCksIFdpcmVGb3JtYXRMaXRlOjpXSVJF
VFlQRV9MRU5HVEhfREVMSU1JVEVEKSk7Ci0gICAgICAgICgqdmFyaWFibGVzKVsidGFnX3BhcmFt
cyJdID0gdGFnICsgIiwgIiArIHRhZyArICIsICIgKyBwYWNrZWRfdGFnOwotICAgICAgfQotICAg
IH0KLSAgfQotfQotCi1FeHRlbnNpb25HZW5lcmF0b3I6OgotRXh0ZW5zaW9uR2VuZXJhdG9yKGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3QgUGFyYW1zJiBwYXJhbXMpCi0g
IDogcGFyYW1zXyhwYXJhbXMpLCBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSB7Ci0gIFNldFZhcmlh
YmxlcyhkZXNjcmlwdG9yLCBwYXJhbXMsICZ2YXJpYWJsZXNfKTsKLX0KLQotRXh0ZW5zaW9uR2Vu
ZXJhdG9yOjp+RXh0ZW5zaW9uR2VuZXJhdG9yKCkge30KLQotdm9pZCBFeHRlbnNpb25HZW5lcmF0
b3I6OkdlbmVyYXRlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlBy
aW50KCJcbiIpOwotICBQcmludEZpZWxkQ29tbWVudChwcmludGVyLCBkZXNjcmlwdG9yXyk7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInB1YmxpYyBzdGF0aWMgZmluYWwgY29t
Lmdvb2dsZS5wcm90b2J1Zi5uYW5vLkV4dGVuc2lvbjxcbiIKLSAgICAiICAgICRleHRlbmRzJCxc
biIKLSAgICAiICAgICRjbGFzcyQ+ICRuYW1lJCA9XG4iCi0gICAgIiAgICAgICAgY29tLmdvb2ds
ZS5wcm90b2J1Zi5uYW5vLkV4dGVuc2lvbi5jcmVhdGUkcmVwZWF0ZWQkJGV4dF90eXBlJChcbiIK
LSAgICAiICAgICAgICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLkV4dGVuc2lvbi4kdHlw
ZSQsXG4iCi0gICAgIiAgICAgICAgICAgICRjbGFzcyQuY2xhc3MsXG4iCi0gICAgIiAgICAgICAg
ICAgICR0YWdfcGFyYW1zJEwpO1xuIik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhbmFubwot
fSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmFuYW5vL2phdmFuYW5vX2V4dGVuc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2V4dGVuc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0ODQzZTI5NjIyYTZjOTdlMWU3MWRiNmNiNzIyNmM4OGE5NGJjZjVkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19leHRlbnNpb24uaAorKysgL2Rldi9udWxs
CkBAIC0xLDc0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogYmR1
ZmZAZ29vZ2xlLmNvbSAoQnJpYW4gRHVmZikKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2Nv
bCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQg
b3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBTkFOT19FWFRF
TlNJT05fSF8KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX0VYVEVO
U0lPTl9IXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wYXJhbXMu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotCi0KLW5hbWVz
cGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLSAgbmFtZXNwYWNlIGlvIHsKLSAg
ICBjbGFzcyBQcmludGVyOyAgICAgICAgICAgICAvLyBwcmludGVyLmgKLSAgfQotfQotCi1uYW1l
c3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhbmFu
byB7Ci0KLWNsYXNzIEV4dGVuc2lvbkdlbmVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBF
eHRlbnNpb25HZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25z
dCBQYXJhbXMmIHBhcmFtcyk7Ci0gIH5FeHRlbnNpb25HZW5lcmF0b3IoKTsKLQotICB2b2lkIEdl
bmVyYXRlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGNvbnN0
IFBhcmFtcyYgcGFyYW1zXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsK
LSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotCi0gIEdPT0dMRV9ESVNBTExPV19F
VklMX0NPTlNUUlVDVE9SUyhFeHRlbnNpb25HZW5lcmF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNw
YWNlIGphdmFuYW5vCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBw
cm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9U
T0JVRl9DT01QSUxFUl9KQVZBTkFOT19FWFRFTlNJT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWVsZC5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWVsZC5jYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODUyNTdmM2Y3MzJkNWJjOTAzNDBiODBjMjA1ZWVlMDNmMjdj
YzExOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZmllbGQuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1
Zi8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0
aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdp
bmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZm
IERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YW5hbm8vamF2YW5hbm9fZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvamF2YW5hbm8vamF2YW5hbm9faGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wcmltaXRpdmVfZmllbGQuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZW51bV9maWVs
ZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFu
b19tYXBfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5h
bm8vamF2YW5hbm9fbWVzc2FnZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9jb21tb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhbmFubyB7Ci0KLUZpZWxkR2Vu
ZXJhdG9yOjp+RmllbGRHZW5lcmF0b3IoKSB7fQotCi1ib29sIEZpZWxkR2VuZXJhdG9yOjpTYXZl
ZERlZmF1bHROZWVkZWQoKSBjb25zdCB7Ci0gIC8vIE5vIHNhdmVkIGRlZmF1bHQgZm9yIHRoaXMg
ZmllbGQgYnkgZGVmYXVsdC4KLSAgLy8gU3ViY2xhc3NlcyB3aG9zZSBpbnN0YW5jZXMgbWF5IG5l
ZWQgc2F2ZWQgZGVmYXVsdHMgd2lsbCBvdmVycmlkZSB0aGlzCi0gIC8vIGFuZCByZXR1cm4gdGhl
IGFwcHJvcHJpYXRlIHZhbHVlLgotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRmllbGRHZW5l
cmF0b3I6OkdlbmVyYXRlSW5pdFNhdmVkRGVmYXVsdENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgLy8gTm8gc2F2ZWQgZGVmYXVsdCBmb3IgdGhpcyBmaWVsZCBieSBkZWZhdWx0
LgotICAvLyBTdWJjbGFzc2VzIHdob3NlIGluc3RhbmNlcyBtYXkgbmVlZCBzYXZlZCBkZWZhdWx0
cyB3aWxsIG92ZXJyaWRlIHRoaXMKLSAgLy8gYW5kIGdlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZSBp
bml0IGNvZGUgdG8gdGhlIHByaW50ZXIuCi19Ci0KLXZvaWQgRmllbGRHZW5lcmF0b3I6OkdlbmVy
YXRlTWVyZ2luZ0NvZGVGcm9tUGFja2VkKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IC8vIFJlYWNoaW5nIGhlcmUgaW5kaWNhdGVzIGEgYnVnLiBDYXNlcyBhcmU6Ci0gIC8vICAgLSBU
aGlzIEZpZWxkR2VuZXJhdG9yIHNob3VsZCBzdXBwb3J0IHBhY2tpbmcsIGJ1dCB0aGlzIG1ldGhv
ZCBzaG91bGQgYmUKLSAgLy8gICAgIG92ZXJyaWRkZW4uCi0gIC8vICAgLSBUaGlzIEZpZWxkR2Vu
ZXJhdG9yIGRvZXNuJ3Qgc3VwcG9ydCBwYWNraW5nLCBhbmQgdGhpcyBtZXRob2Qgc2hvdWxkCi0g
IC8vICAgICBuZXZlciBoYXZlIGJlZW4gY2FsbGVkLgotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAi
R2VuZXJhdGVQYXJzaW5nQ29kZUZyb21QYWNrZWQoKSAiCi0gICAgICAgICAgICAgPDwgImNhbGxl
ZCBvbiBmaWVsZCBnZW5lcmF0b3IgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHBhY2tpbmcuIjsKLX0K
LQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUZp
ZWxkR2VuZXJhdG9yTWFwOjpGaWVsZEdlbmVyYXRvck1hcCgKLSAgICBjb25zdCBEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yLCBjb25zdCBQYXJhbXMgJnBhcmFtcykKLSAgOiBkZXNjcmlwdG9yXyhkZXNj
cmlwdG9yKSwKLSAgICBmaWVsZF9nZW5lcmF0b3JzXygKLSAgICAgIG5ldyBzY29wZWRfcHRyPEZp
ZWxkR2VuZXJhdG9yPltkZXNjcmlwdG9yLT5maWVsZF9jb3VudCgpXSkgewotCi0gIGludCBuZXh0
X2hhc19iaXRfaW5kZXggPSAwOwotICBib29sIHNhdmVkX2RlZmF1bHRzX25lZWRlZCA9IGZhbHNl
OwotICAvLyBDb25zdHJ1Y3QgYWxsIHRoZSBGaWVsZEdlbmVyYXRvcnMuCi0gIGZvciAoaW50IGkg
PSAwOyBpIDwgZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgRmllbGRHZW5l
cmF0b3IqIGZpZWxkX2dlbmVyYXRvciA9IE1ha2VHZW5lcmF0b3IoCi0gICAgICAgIGRlc2NyaXB0
b3ItPmZpZWxkKGkpLCBwYXJhbXMsICZuZXh0X2hhc19iaXRfaW5kZXgpOwotICAgIHNhdmVkX2Rl
ZmF1bHRzX25lZWRlZCA9IHNhdmVkX2RlZmF1bHRzX25lZWRlZAotICAgICAgICB8fCBmaWVsZF9n
ZW5lcmF0b3ItPlNhdmVkRGVmYXVsdE5lZWRlZCgpOwotICAgIGZpZWxkX2dlbmVyYXRvcnNfW2ld
LnJlc2V0KGZpZWxkX2dlbmVyYXRvcik7Ci0gIH0KLSAgdG90YWxfYml0c18gPSBuZXh0X2hhc19i
aXRfaW5kZXg7Ci0gIHNhdmVkX2RlZmF1bHRzX25lZWRlZF8gPSBzYXZlZF9kZWZhdWx0c19uZWVk
ZWQ7Ci19Ci0KLUZpZWxkR2VuZXJhdG9yKiBGaWVsZEdlbmVyYXRvck1hcDo6TWFrZUdlbmVyYXRv
cihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIGNvbnN0IFBhcmFtcyAmcGFyYW1z
LCBpbnQqIG5leHRfaGFzX2JpdF9pbmRleCkgewotICBKYXZhVHlwZSBqYXZhX3R5cGUgPSBHZXRK
YXZhVHlwZShmaWVsZCk7Ci0gIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgIHN3aXRj
aCAoamF2YV90eXBlKSB7Ci0gICAgICBjYXNlIEpBVkFUWVBFX01FU1NBR0U6Ci0gICAgICAgIGlm
IChJc01hcEVudHJ5KGZpZWxkLT5tZXNzYWdlX3R5cGUoKSkpIHsKLSAgICAgICAgICByZXR1cm4g
bmV3IE1hcEZpZWxkR2VuZXJhdG9yKGZpZWxkLCBwYXJhbXMpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIHJldHVybiBuZXcgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3IoZmllbGQs
IHBhcmFtcyk7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgSkFWQVRZUEVfRU5VTToKLSAgICAgICAg
cmV0dXJuIG5ldyBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcihmaWVsZCwgcGFyYW1zKTsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBuZXcgUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdl
bmVyYXRvcihmaWVsZCwgcGFyYW1zKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoZmllbGQtPmNvbnRh
aW5pbmdfb25lb2YoKSkgewotICAgIHN3aXRjaCAoamF2YV90eXBlKSB7Ci0gICAgICBjYXNlIEpB
VkFUWVBFX01FU1NBR0U6Ci0gICAgICAgIHJldHVybiBuZXcgTWVzc2FnZU9uZW9mRmllbGRHZW5l
cmF0b3IoZmllbGQsIHBhcmFtcyk7Ci0gICAgICBjYXNlIEpBVkFUWVBFX0VOVU06Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gbmV3IFByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3Io
ZmllbGQsIHBhcmFtcyk7Ci0gICAgfQotICB9IGVsc2UgaWYgKHBhcmFtcy5vcHRpb25hbF9maWVs
ZF9hY2Nlc3NvcnMoKSAmJiBmaWVsZC0+aXNfb3B0aW9uYWwoKQotICAgICAgJiYgamF2YV90eXBl
ICE9IEpBVkFUWVBFX01FU1NBR0UpIHsKLSAgICAvLyBXZSBuZWVkIGEgaGFzLWJpdCBmb3IgZWFj
aCBwcmltaXRpdmUvZW51bSBmaWVsZCBiZWNhdXNlIHRoZWlyIGRlZmF1bHQKLSAgICAvLyB2YWx1
ZXMgY291bGQgYmUgc2FtZSBhcyBleHBsaWNpdGx5IHNldCB2YWx1ZXMuIEJ1dCB3ZSBkb24ndCBu
ZWVkIGl0Ci0gICAgLy8gZm9yIGEgbWVzc2FnZSBmaWVsZCBiZWNhdXNlIHRoZXkgaGF2ZSBubyBk
ZWZhdWx0cyBhbmQgTmFubyB1c2VzICdudWxsJwotICAgIC8vIGZvciB1bnNldCBtZXNzYWdlcywg
d2hpY2ggY2Fubm90IGJlIHNldCBleHBsaWNpdGx5LgotICAgIHN3aXRjaCAoamF2YV90eXBlKSB7
Ci0gICAgICBjYXNlIEpBVkFUWVBFX0VOVU06Ci0gICAgICAgIHJldHVybiBuZXcgQWNjZXNzb3JF
bnVtRmllbGRHZW5lcmF0b3IoCi0gICAgICAgICAgICBmaWVsZCwgcGFyYW1zLCAoKm5leHRfaGFz
X2JpdF9pbmRleCkrKyk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbmV3IEFjY2Vz
c29yUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoCi0gICAgICAgICAgICBmaWVsZCwgcGFyYW1zLCAo
Km5leHRfaGFzX2JpdF9pbmRleCkrKyk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHN3aXRjaCAo
amF2YV90eXBlKSB7Ci0gICAgICBjYXNlIEpBVkFUWVBFX01FU1NBR0U6Ci0gICAgICAgIHJldHVy
biBuZXcgTWVzc2FnZUZpZWxkR2VuZXJhdG9yKGZpZWxkLCBwYXJhbXMpOwotICAgICAgY2FzZSBK
QVZBVFlQRV9FTlVNOgotICAgICAgICByZXR1cm4gbmV3IEVudW1GaWVsZEdlbmVyYXRvcihmaWVs
ZCwgcGFyYW1zKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBuZXcgUHJpbWl0aXZl
RmllbGRHZW5lcmF0b3IoZmllbGQsIHBhcmFtcyk7Ci0gICAgfQotICB9Ci19Ci0KLUZpZWxkR2Vu
ZXJhdG9yTWFwOjp+RmllbGRHZW5lcmF0b3JNYXAoKSB7fQotCi1jb25zdCBGaWVsZEdlbmVyYXRv
ciYgRmllbGRHZW5lcmF0b3JNYXA6OmdldCgKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkKSBjb25zdCB7Ci0gIEdPT0dMRV9DSEVDS19FUShmaWVsZC0+Y29udGFpbmluZ190eXBlKCks
IGRlc2NyaXB0b3JfKTsKLSAgcmV0dXJuICpmaWVsZF9nZW5lcmF0b3JzX1tmaWVsZC0+aW5kZXgo
KV07Ci19Ci0KLXZvaWQgU2V0Q29tbW9uT25lb2ZWYXJpYWJsZXMoY29uc3QgRmllbGREZXNjcmlw
dG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXA8c3RyaW5n
LCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAgKCp2YXJpYWJsZXMpWyJvbmVvZl9uYW1lIl0gPQot
ICAgICAgVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShkZXNjcmlwdG9yLT5jb250YWluaW5nX29uZW9m
KCkpOwotICAoKnZhcmlhYmxlcylbIm9uZW9mX2NhcGl0YWxpemVkX25hbWUiXSA9Ci0gICAgICBV
bmRlcnNjb3Jlc1RvQ2FwaXRhbGl6ZWRDYW1lbENhc2UoZGVzY3JpcHRvci0+Y29udGFpbmluZ19v
bmVvZigpKTsKLSAgKCp2YXJpYWJsZXMpWyJvbmVvZl9pbmRleCJdID0KLSAgICAgIFNpbXBsZUl0
b2EoZGVzY3JpcHRvci0+Y29udGFpbmluZ19vbmVvZigpLT5pbmRleCgpKTsKLSAgKCp2YXJpYWJs
ZXMpWyJzZXRfb25lb2ZfY2FzZSJdID0KLSAgICAgICJ0aGlzLiIgKyAoKnZhcmlhYmxlcylbIm9u
ZW9mX25hbWUiXSArCi0gICAgICAiQ2FzZV8gPSAiICsgU2ltcGxlSXRvYShkZXNjcmlwdG9yLT5u
dW1iZXIoKSk7Ci0gICgqdmFyaWFibGVzKVsiY2xlYXJfb25lb2ZfY2FzZSJdID0KLSAgICAgICJ0
aGlzLiIgKyAoKnZhcmlhYmxlcylbIm9uZW9mX25hbWUiXSArICJDYXNlXyA9IDAiOwotICAoKnZh
cmlhYmxlcylbImhhc19vbmVvZl9jYXNlIl0gPQotICAgICAgInRoaXMuIiArICgqdmFyaWFibGVz
KVsib25lb2ZfbmFtZSJdICsgIkNhc2VfID09ICIgKwotICAgICAgU2ltcGxlSXRvYShkZXNjcmlw
dG9yLT5udW1iZXIoKSk7Ci19Ci0KLXZvaWQgR2VuZXJhdGVPbmVvZkZpZWxkRXF1YWxzKGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG1hcDxzdHJpbmcsIHN0cmluZz4mIHZhcmlhYmxlcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGlmIChHZXRKYXZhVHlw
ZShkZXNjcmlwdG9yKSA9PSBKQVZBVFlQRV9CWVRFUykgewotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlcywKLSAgICAgICJpZiAodGhpcy5oYXMkY2FwaXRhbGl6ZWRfbmFtZSQoKSkge1xuIgot
ICAgICAgIiAgaWYgKCFqYXZhLnV0aWwuQXJyYXlzLmVxdWFscygoYnl0ZVtdKSB0aGlzLiRvbmVv
Zl9uYW1lJF8sXG4iCi0gICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRl
W10pIG90aGVyLiRvbmVvZl9uYW1lJF8pKSB7XG4iCi0gICAgICAiICAgIHJldHVybiBmYWxzZTtc
biIKLSAgICAgICIgIH1cbiIKLSAgICAgICJ9XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXMsCi0gICAgICAiaWYgKHRoaXMuaGFzJGNhcGl0YWxpemVkX25hbWUk
KCkpIHtcbiIKLSAgICAgICIgIGlmICghdGhpcy4kb25lb2ZfbmFtZSRfLmVxdWFscyhvdGhlci4k
b25lb2ZfbmFtZSRfKSkge1xuIgotICAgICAgIiAgICByZXR1cm4gZmFsc2U7XG4iCi0gICAgICAi
ICB9XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0ZU9uZW9mRmllbGRI
YXNoQ29kZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxzdHJpbmcsIHN0cmluZz4mIHZhcmlhYmxlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIpIHsK
LSAgaWYgKEdldEphdmFUeXBlKGRlc2NyaXB0b3IpID09IEpBVkFUWVBFX0JZVEVTKSB7Ci0gICAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICAgInJlc3VsdCA9IDMxICogcmVzdWx0ICsg
KCRoYXNfb25lb2ZfY2FzZSRcbiIKLSAgICAgICIgICA/IGphdmEudXRpbC5BcnJheXMuaGFzaENv
ZGUoKGJ5dGVbXSkgdGhpcy4kb25lb2ZfbmFtZSRfKSA6IDApO1xuIik7Ci0gIH0gZWxzZSB7Ci0g
ICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzLAotICAgICAgInJlc3VsdCA9IDMxICogcmVzdWx0
ICtcbiIKLSAgICAgICIgICgkaGFzX29uZW9mX2Nhc2UkID8gdGhpcy4kb25lb2ZfbmFtZSRfLmhh
c2hDb2RlKCkgOiAwKTtcbiIpOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhbmFubwot
fSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9qYXZhbmFuby9qYXZhbmFub19maWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmFuYW5vL2phdmFuYW5vX2ZpZWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU3YzIyMWY0N2NhYWFmYTkxMTk2MmFmYTY2OTlkMDRjN2UzMjlhOWYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL2phdmFuYW5vL2phdmFuYW5vX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNv
bSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMg
ZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0K
LSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX0ZJRUxEX0hfXwotI2Rl
ZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQU5BTk9fRklFTERfSF9fCi0KLSNpbmNs
dWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wYXJh
bXMuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotICBuYW1l
c3BhY2UgaW8gewotICAgIGNsYXNzIFByaW50ZXI7ICAgICAgICAgICAgIC8vIHByaW50ZXIuaAot
ICB9Ci19Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFt
ZXNwYWNlIGphdmFuYW5vIHsKLQotY2xhc3MgRmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAg
RmllbGRHZW5lcmF0b3IoY29uc3QgUGFyYW1zJiBwYXJhbXMpIDogcGFyYW1zXyhwYXJhbXMpIHt9
Ci0gIHZpcnR1YWwgfkZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgdmlydHVhbCBib29sIFNhdmVkRGVm
YXVsdE5lZWRlZCgpIGNvbnN0OwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVJbml0U2F2ZWREZWZh
dWx0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSAgLy8gR2VuZXJhdGVzIGNv
ZGUgZm9yIEphdmEgZmllbGRzIGFuZCBtZXRob2RzIHN1cHBvcnRpbmcgdGhpcyBmaWVsZC4KLSAg
Ly8gSWYgdGhpcyBmaWVsZCBuZWVkcyBhIHNhdmVkIGRlZmF1bHQgKFNhdmVkRGVmYXVsdE5lZWRl
ZCgpIGlzIHRydWUpLAotICAvLyB0aGVuIEBsYXp5X2luaXQgY29udHJvbHMgaG93IHRoZSBzdGF0
aWMgZmllbGQgZm9yIHRoYXQgZGVmYXVsdCB2YWx1ZQotICAvLyBhbmQgaXRzIGluaXRpYWxpemF0
aW9uIGNvZGUgc2hvdWxkIGJlIGdlbmVyYXRlZC4gSWYgQGxhenlfaW5pdCBpcwotICAvLyB0cnVl
LCB0aGUgc3RhdGljIGZpZWxkIGlzIG5vdCBkZWNsYXJlZCBmaW5hbCBhbmQgdGhlIGluaXRpYWxp
emF0aW9uCi0gIC8vIGNvZGUgaXMgZ2VuZXJhdGVkIG9ubHkgd2hlbiBHZW5lcmF0ZUluaXRTYXZl
ZERlZmF1bHRDb2RlIGlzIGNhbGxlZDsKLSAgLy8gb3RoZXJ3aXNlLCB0aGUgc3RhdGljIGZpZWxk
IGlzIGRlY2xhcmVkIGZpbmFsIGFuZCBpbml0aWFsaXplZCBpbmxpbmUuCi0gIC8vIEdlbmVyYXRl
SW5pdFNhdmVkRGVmYXVsdENvZGUgd2lsbCBub3QgYmUgY2FsbGVkIGluIHRoZSBsYXR0ZXIgY2Fz
ZS4KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlTWVtYmVycygKLSAgICAgIGlvOjpQcmludGVyKiBw
cmludGVyLCBib29sIGxhenlfaW5pdCkgY29uc3QgPSAwOwotCi0gIHZpcnR1YWwgdm9pZCBHZW5l
cmF0ZUNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwotICB2aXJ0dWFs
IHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAw
OwotCi0gIC8vIEdlbmVyYXRlcyBjb2RlIHRvIG1lcmdlIGZyb20gcGFja2VkIHNlcmlhbGl6ZWQg
Zm9ybS4gVGhlIGRlZmF1bHQKLSAgLy8gaW1wbGVtZW50YXRpb24gd2lsbCBmYWlsOyBzdWJjbGFz
c2VzIHdoaWNoIGNhbiBoYW5kbGUgcGFja2VkIHNlcmlhbGl6ZWQKLSAgLy8gZm9ybXMgd2lsbCBv
dmVycmlkZSB0aGlzIGFuZCBwcmludCBhcHByb3ByaWF0ZSBjb2RlIHRvIHRoZSBwcmludGVyLgot
ICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZUZyb21QYWNrZWQoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotCi0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6YXRpb25D
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBHZW5l
cmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwot
ICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZUhhc2hDb2RlQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVGaXhDbG9uZWRD
b2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7fQotCi0gcHJvdGVjdGVkOgotICBjb25z
dCBQYXJhbXMmIHBhcmFtc187Ci0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09O
U1RSVUNUT1JTKEZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLS8vIENvbnZlbmllbmNlIGNsYXNzIHdo
aWNoIGNvbnN0cnVjdHMgRmllbGRHZW5lcmF0b3JzIGZvciBhIERlc2NyaXB0b3IuCi1jbGFzcyBG
aWVsZEdlbmVyYXRvck1hcCB7Ci0gcHVibGljOgotICBleHBsaWNpdCBGaWVsZEdlbmVyYXRvck1h
cChjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBQYXJhbXMgJnBhcmFtcyk7Ci0g
IH5GaWVsZEdlbmVyYXRvck1hcCgpOwotCi0gIGNvbnN0IEZpZWxkR2VuZXJhdG9yJiBnZXQoY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0gIGludCB0b3RhbF9iaXRzKCkgY29u
c3QgeyByZXR1cm4gdG90YWxfYml0c187IH0KLSAgYm9vbCBzYXZlZF9kZWZhdWx0c19uZWVkZWQo
KSBjb25zdCB7IHJldHVybiBzYXZlZF9kZWZhdWx0c19uZWVkZWRfOyB9Ci0KLSBwcml2YXRlOgot
ICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAgc2NvcGVkX2FycmF5PHNjb3BlZF9w
dHI8RmllbGRHZW5lcmF0b3I+ID4gZmllbGRfZ2VuZXJhdG9yc187Ci0gIGludCB0b3RhbF9iaXRz
XzsKLSAgYm9vbCBzYXZlZF9kZWZhdWx0c19uZWVkZWRfOwotCi0gIHN0YXRpYyBGaWVsZEdlbmVy
YXRvciogTWFrZUdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAg
Y29uc3QgUGFyYW1zICZwYXJhbXMsIGludCogbmV4dF9oYXNfYml0X2luZGV4KTsKLQotICBHT09H
TEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRmllbGRHZW5lcmF0b3JNYXApOwotfTsKLQot
dm9pZCBTZXRDb21tb25PbmVvZlZhcmlhYmxlcyhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0cmluZz4q
IHZhcmlhYmxlcyk7Ci12b2lkIEdlbmVyYXRlT25lb2ZGaWVsZEVxdWFscyhjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBtYXA8c3RyaW5nLCBzdHJpbmc+JiB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlcik7Ci12b2lkIEdlbmVyYXRlT25lb2ZGaWVsZEhh
c2hDb2RlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPHN0cmluZywgc3RyaW5nPiYgdmFyaWFibGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0K
LX0gIC8vIG5hbWVzcGFjZSBqYXZhbmFubwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAv
LyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAv
LyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQU5BTk9fRklFTERfSF9fCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZmlsZS5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWxlLmNjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjc2YWI5ZDE5NjU1OTAzZGIyMzE5MDUzZTUy
ZDhlZmI0NzQ1ZTNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWxlLmNj
CisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
cHJvdG9idWYvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBv
biBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdh
dCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZmlsZS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19lbnVt
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5v
X2V4dGVuc2lvbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFu
by9qYXZhbmFub19oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8v
cHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFt
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGph
dmFuYW5vIHsKLQotbmFtZXNwYWNlIHsKLQotLy8gUmVjdXJzaXZlbHkgc2VhcmNoZXMgdGhlIGdp
dmVuIG1lc3NhZ2UgdG8gc2VlIGlmIGl0IGNvbnRhaW5zIGFueSBleHRlbnNpb25zLgotYm9vbCBV
c2VzRXh0ZW5zaW9ucyhjb25zdCBNZXNzYWdlJiBtZXNzYWdlKSB7Ci0gIGNvbnN0IFJlZmxlY3Rp
b24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLQotICAvLyBXZSBjb25z
ZXJ2YXRpdmVseSBhc3N1bWUgdGhhdCB1bmtub3duIGZpZWxkcyBhcmUgZXh0ZW5zaW9ucy4KLSAg
aWYgKHJlZmxlY3Rpb24tPkdldFVua25vd25GaWVsZHMobWVzc2FnZSkuZmllbGRfY291bnQoKSA+
IDApIHJldHVybiB0cnVlOwotCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVs
ZHM7Ci0gIHJlZmxlY3Rpb24tPkxpc3RGaWVsZHMobWVzc2FnZSwgJmZpZWxkcyk7Ci0KLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAoZmllbGRzW2ld
LT5pc19leHRlbnNpb24oKSkgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoZmllbGRzW2ldLT5jcHBf
dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSB7Ci0gICAgICBpZiAo
ZmllbGRzW2ldLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgICAgIGludCBzaXplID0gcmVmbGVjdGlv
bi0+RmllbGRTaXplKG1lc3NhZ2UsIGZpZWxkc1tpXSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgc2l6ZTsgaisrKSB7Ci0gICAgICAgICAgY29uc3QgTWVzc2FnZSYgc3ViX21lc3NhZ2Ug
PQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIGZp
ZWxkc1tpXSwgaik7Ci0gICAgICAgICAgaWYgKFVzZXNFeHRlbnNpb25zKHN1Yl9tZXNzYWdlKSkg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IE1l
c3NhZ2UmIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+R2V0TWVzc2FnZShtZXNzYWdlLCBmaWVs
ZHNbaV0pOwotICAgICAgICBpZiAoVXNlc0V4dGVuc2lvbnMoc3ViX21lc3NhZ2UpKSByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZQotCi1GaWxlR2VuZXJhdG9yOjpGaWxlR2VuZXJhdG9yKGNvbnN0IEZpbGVEZXNj
cmlwdG9yKiBmaWxlLCBjb25zdCBQYXJhbXMmIHBhcmFtcykKLSAgOiBmaWxlXyhmaWxlKSwKLSAg
ICBwYXJhbXNfKHBhcmFtcyksCi0gICAgamF2YV9wYWNrYWdlXyhGaWxlSmF2YVBhY2thZ2UocGFy
YW1zLCBmaWxlKSksCi0gICAgY2xhc3NuYW1lXyhGaWxlQ2xhc3NOYW1lKHBhcmFtcywgZmlsZSkp
IHt9Ci0KLUZpbGVHZW5lcmF0b3I6On5GaWxlR2VuZXJhdG9yKCkge30KLQotYm9vbCBGaWxlR2Vu
ZXJhdG9yOjpWYWxpZGF0ZShzdHJpbmcqIGVycm9yKSB7Ci0gIC8vIENoZWNrIGZvciBleHRlbnNp
b25zCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgZmlsZV8tPkNvcHlUbygm
ZmlsZV9wcm90byk7Ci0gIGlmIChVc2VzRXh0ZW5zaW9ucyhmaWxlX3Byb3RvKSAmJiAhcGFyYW1z
Xy5zdG9yZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgZXJyb3ItPmFzc2lnbihmaWxlXy0+bmFt
ZSgpKTsKLSAgICBlcnJvci0+YXBwZW5kKAotICAgICAgICAiOiBKYXZhIE5BTk9fUlVOVElNRSBv
bmx5IHN1cHBvcnRzIGV4dGVuc2lvbnMgd2hlbiB0aGUgIgotICAgICAgICAiJ3N0b3JlX3Vua25v
d25fZmllbGRzJyBnZW5lcmF0b3Igb3B0aW9uIGlzICd0cnVlJy4iKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLQotICBpZiAoZmlsZV8tPnNlcnZpY2VfY291bnQoKSAhPSAwICYmICFwYXJhbXNf
Lmlnbm9yZV9zZXJ2aWNlcygpKSB7Ci0gICAgZXJyb3ItPmFzc2lnbihmaWxlXy0+bmFtZSgpKTsK
LSAgICBlcnJvci0+YXBwZW5kKAotICAgICAgIjogSmF2YSBOQU5PX1JVTlRJTUUgZG9lcyBub3Qg
c3VwcG9ydCBzZXJ2aWNlc1wiIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKCFJ
c091dGVyQ2xhc3NOZWVkZWQocGFyYW1zXywgZmlsZV8pKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0g
IH0KLQotICAvLyBDaGVjayB3aGV0aGVyIGxlZ2FjeSBqYXZhbmFubyBnZW5lcmF0b3Igd291bGQg
b21pdCB0aGUgb3V0ZXIgY2xhc3MuCi0gIGlmICghcGFyYW1zXy5oYXNfamF2YV9vdXRlcl9jbGFz
c25hbWUoZmlsZV8tPm5hbWUoKSkKLSAgICAgICYmIGZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQo
KSA9PSAxCi0gICAgICAmJiBmaWxlXy0+ZW51bV90eXBlX2NvdW50KCkgPT0gMCAmJiBmaWxlXy0+
ZXh0ZW5zaW9uX2NvdW50KCkgPT0gMCkgewotICAgIGNvdXQgPDwgIklORk86ICIgPDwgZmlsZV8t
Pm5hbWUoKSA8PCAiOiIgPDwgZW5kbDsKLSAgICBjb3V0IDw8ICJKYXZhbmFubyBnZW5lcmF0b3Ig
aGFzIGNoYW5nZWQgdG8gYWxpZ24gd2l0aCBqYXZhIGdlbmVyYXRvci4gIgotICAgICAgICAiQW4g
b3V0ZXIgY2xhc3Mgd2lsbCBiZSBjcmVhdGVkIGZvciB0aGlzIGZpbGUgYW5kIHRoZSBzaW5nbGUg
bWVzc2FnZSAiCi0gICAgICAgICJpbiB0aGUgZmlsZSB3aWxsIGJlY29tZSBhIG5lc3RlZCBjbGFz
cy4gVXNlIGphdmFfbXVsdGlwbGVfZmlsZXMgdG8gIgotICAgICAgICAic2tpcCBnZW5lcmF0aW5n
IHRoZSBvdXRlciBjbGFzcywgb3Igc2V0IGFuIGV4cGxpY2l0ICIKLSAgICAgICAgImphdmFfb3V0
ZXJfY2xhc3NuYW1lIHRvIHN1cHByZXNzIHRoaXMgbWVzc2FnZS4iIDw8IGVuZGw7Ci0gIH0KLQot
ICAvLyBDaGVjayB0aGF0IG5vIGNsYXNzIG5hbWUgbWF0Y2hlcyB0aGUgZmlsZSdzIGNsYXNzIG5h
bWUuICBUaGlzIGlzIGEgY29tbW9uCi0gIC8vIHByb2JsZW0gdGhhdCBsZWFkcyB0byBKYXZhIGNv
bXBpbGUgZXJyb3JzIHRoYXQgY2FuIGJlIGhhcmQgdG8gdW5kZXJzdGFuZC4KLSAgLy8gSXQncyBl
c3BlY2lhbGx5IGJhZCB3aGVuIHVzaW5nIHRoZSBqYXZhX211bHRpcGxlX2ZpbGVzLCBzaW5jZSB3
ZSB3b3VsZAotICAvLyBlbmQgdXAgb3ZlcndyaXRpbmcgdGhlIG91dGVyIGNsYXNzIHdpdGggb25l
IG9mIHRoZSBpbm5lciBvbmVzLgotICBib29sIGZvdW5kX2NvbmZsaWN0ID0gZmFsc2U7Ci0gIGZv
ciAoaW50IGkgPSAwOyAhZm91bmRfY29uZmxpY3QgJiYgaSA8IGZpbGVfLT5tZXNzYWdlX3R5cGVf
Y291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKGZpbGVfLT5tZXNzYWdlX3R5cGUoaSktPm5hbWUoKSA9
PSBjbGFzc25hbWVfKSB7Ci0gICAgICBmb3VuZF9jb25mbGljdCA9IHRydWU7Ci0gICAgfQotICB9
Ci0gIGlmIChwYXJhbXNfLmphdmFfZW51bV9zdHlsZSgpKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7
ICFmb3VuZF9jb25mbGljdCAmJiBpIDwgZmlsZV8tPmVudW1fdHlwZV9jb3VudCgpOyBpKyspIHsK
LSAgICAgIGlmIChmaWxlXy0+ZW51bV90eXBlKGkpLT5uYW1lKCkgPT0gY2xhc3NuYW1lXykgewot
ICAgICAgICBmb3VuZF9jb25mbGljdCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlm
IChmb3VuZF9jb25mbGljdCkgewotICAgIGVycm9yLT5hc3NpZ24oZmlsZV8tPm5hbWUoKSk7Ci0g
ICAgZXJyb3ItPmFwcGVuZCgKLSAgICAgICI6IENhbm5vdCBnZW5lcmF0ZSBKYXZhIG91dHB1dCBi
ZWNhdXNlIHRoZSBmaWxlJ3Mgb3V0ZXIgY2xhc3MgbmFtZSwgXCIiKTsKLSAgICBlcnJvci0+YXBw
ZW5kKGNsYXNzbmFtZV8pOwotICAgIGVycm9yLT5hcHBlbmQoCi0gICAgICAiXCIsIG1hdGNoZXMg
dGhlIG5hbWUgb2Ygb25lIG9mIHRoZSB0eXBlcyBkZWNsYXJlZCBpbnNpZGUgaXQuICAiCi0gICAg
ICAiUGxlYXNlIGVpdGhlciByZW5hbWUgdGhlIHR5cGUgb3IgdXNlIHRoZSBqYXZhX291dGVyX2Ns
YXNzbmFtZSAiCi0gICAgICAib3B0aW9uIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgb3V0ZXIgY2xh
c3MgbmFtZSBmb3IgdGhlIC5wcm90byBmaWxlLiIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGaWxlR2VuZXJhdG9yOjpHZW5lcmF0ZShpbzo6UHJp
bnRlciogcHJpbnRlcikgewotICAvLyBXZSBkb24ndCBpbXBvcnQgYW55dGhpbmcgYmVjYXVzZSB3
ZSByZWZlciB0byBhbGwgY2xhc3NlcyBieSB0aGVpcgotICAvLyBmdWxseS1xdWFsaWZpZWQgbmFt
ZXMgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuCi0gIHByaW50ZXItPlByaW50KAotICAgICIvLyBH
ZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIVxu
Iik7Ci0gIGlmICghamF2YV9wYWNrYWdlXy5lbXB0eSgpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAiXG4iCi0gICAgICAicGFja2FnZSAkcGFja2FnZSQ7XG4iLAotICAgICAgInBhY2th
Z2UiLCBqYXZhX3BhY2thZ2VfKTsKLSAgfQotCi0gIC8vIE5vdGU6IGNvbnN0YW50cyAoZnJvbSBl
bnVtcywgZW1pdHRlZCBpbiB0aGUgbG9vcCBiZWxvdykgbWF5IGhhdmUgdGhlIHNhbWUgbmFtZXMg
YXMgY29uc3RhbnRzCi0gIC8vIGluIHRoZSBuZXN0ZWQgY2xhc3Nlcy4gVGhpcyBjYXVzZXMgSmF2
YSB3YXJuaW5ncywgYnV0IGlzIG5vdCBmYXRhbCwgc28gd2Ugc3VwcHJlc3MgdGhvc2UKLSAgLy8g
d2FybmluZ3MgaGVyZSBpbiB0aGUgdG9wLW1vc3QgY2xhc3MgZGVjbGFyYXRpb24uCi0gIHByaW50
ZXItPlByaW50KAotICAgICJcbiIKLSAgICAiQFN1cHByZXNzV2FybmluZ3MoXCJoaWRpbmdcIilc
biIKLSAgICAicHVibGljIGludGVyZmFjZSAkY2xhc3NuYW1lJCB7XG4iLAotICAgICJjbGFzc25h
bWUiLCBjbGFzc25hbWVfKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAvLyBFeHRlbnNpb25zLgotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5leHRlbnNp
b25fY291bnQoKTsgaSsrKSB7Ci0gICAgRXh0ZW5zaW9uR2VuZXJhdG9yKGZpbGVfLT5leHRlbnNp
b24oaSksIHBhcmFtc18pLkdlbmVyYXRlKHByaW50ZXIpOwotICB9Ci0KLSAgLy8gRW51bXMuCi0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPmVudW1fdHlwZV9jb3VudCgpOyBpKyspIHsKLSAg
ICBFbnVtR2VuZXJhdG9yKGZpbGVfLT5lbnVtX3R5cGUoaSksIHBhcmFtc18pLkdlbmVyYXRlKHBy
aW50ZXIpOwotICB9Ci0KLSAgLy8gTWVzc2FnZXMuCi0gIGlmICghcGFyYW1zXy5qYXZhX211bHRp
cGxlX2ZpbGVzKGZpbGVfLT5uYW1lKCkpKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxl
Xy0+bWVzc2FnZV90eXBlX2NvdW50KCk7IGkrKykgewotICAgICAgTWVzc2FnZUdlbmVyYXRvcihm
aWxlXy0+bWVzc2FnZV90eXBlKGkpLCBwYXJhbXNfKS5HZW5lcmF0ZShwcmludGVyKTsKLSAgICB9
Ci0gIH0KLQotICAvLyBTdGF0aWMgdmFyaWFibGVzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGZp
bGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgLy8gVE9ETyhrZW50b24pOiAg
UmV1c2UgTWVzc2FnZUdlbmVyYXRvciBvYmplY3RzPwotICAgIE1lc3NhZ2VHZW5lcmF0b3IoZmls
ZV8tPm1lc3NhZ2VfdHlwZShpKSwgcGFyYW1zXykuR2VuZXJhdGVTdGF0aWNWYXJpYWJsZXMocHJp
bnRlcik7Ci0gIH0KLQotICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAot
ICAgICJ9XG4iKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgR2VuZXJhdG9yQ2xhc3MsIHR5cGVu
YW1lIERlc2NyaXB0b3JDbGFzcz4KLXN0YXRpYyB2b2lkIEdlbmVyYXRlU2libGluZyhjb25zdCBz
dHJpbmcmIHBhY2thZ2VfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
cmluZyYgamF2YV9wYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERl
c2NyaXB0b3JDbGFzcyogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
ZW5lcmF0b3JDb250ZXh0KiBvdXRwdXRfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlY3RvcjxzdHJpbmc+KiBmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUGFyYW1zJiBwYXJhbXMpIHsKLSAgc3RyaW5nIGZpbGVuYW1lID0gcGFja2Fn
ZV9kaXIgKyBkZXNjcmlwdG9yLT5uYW1lKCkgKyAiLmphdmEiOwotICBmaWxlX2xpc3QtPnB1c2hf
YmFjayhmaWxlbmFtZSk7Ci0KLSAgc2NvcGVkX3B0cjxpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0+
IG91dHB1dCgKLSAgICBvdXRwdXRfZGlyZWN0b3J5LT5PcGVuKGZpbGVuYW1lKSk7Ci0gIGlvOjpQ
cmludGVyIHByaW50ZXIob3V0cHV0LmdldCgpLCAnJCcpOwotCi0gIHByaW50ZXIuUHJpbnQoCi0g
ICAgIi8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9U
IEVESVQhXG4iKTsKLSAgaWYgKCFqYXZhX3BhY2thZ2UuZW1wdHkoKSkgewotICAgIHByaW50ZXIu
UHJpbnQoCi0gICAgICAiXG4iCi0gICAgICAicGFja2FnZSAkcGFja2FnZSQ7XG4iLAotICAgICAg
InBhY2thZ2UiLCBqYXZhX3BhY2thZ2UpOwotICB9Ci0KLSAgR2VuZXJhdG9yQ2xhc3MoZGVzY3Jp
cHRvciwgcGFyYW1zKS5HZW5lcmF0ZSgmcHJpbnRlcik7Ci19Ci0KLXZvaWQgRmlsZUdlbmVyYXRv
cjo6R2VuZXJhdGVTaWJsaW5ncyhjb25zdCBzdHJpbmcmIHBhY2thZ2VfZGlyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckNvbnRleHQqIG91dHB1dF9kaXJl
Y3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmlu
Zz4qIGZpbGVfbGlzdCkgewotICBpZiAocGFyYW1zXy5qYXZhX211bHRpcGxlX2ZpbGVzKGZpbGVf
LT5uYW1lKCkpKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+bWVzc2FnZV90eXBl
X2NvdW50KCk7IGkrKykgewotICAgICAgR2VuZXJhdGVTaWJsaW5nPE1lc3NhZ2VHZW5lcmF0b3I+
KHBhY2thZ2VfZGlyLCBqYXZhX3BhY2thZ2VfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGVfLT5tZXNzYWdlX3R5cGUoaSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RpcmVjdG9yeSwgZmlsZV9saXN0LCBwYXJhbXNf
KTsKLSAgICB9Ci0KLSAgICBpZiAocGFyYW1zXy5qYXZhX2VudW1fc3R5bGUoKSkgewotICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+ZW51bV90eXBlX2NvdW50KCk7IGkrKykgewotICAg
ICAgICBHZW5lcmF0ZVNpYmxpbmc8RW51bUdlbmVyYXRvcj4ocGFja2FnZV9kaXIsIGphdmFfcGFj
a2FnZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlXy0+ZW51
bV90eXBlKGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
X2RpcmVjdG9yeSwgZmlsZV9saXN0LCBwYXJhbXNfKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0K
LQotfSAgLy8gbmFtZXNwYWNlIGphdmFuYW5vCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0g
IC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2ZpbGUuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWxlLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxN2VhZmUyYTg4ZTZmZDUxMjU5MzQ2MDI0NzE4
MzkxNDdkYTJkMDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2ZpbGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJv
dG9idWYvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8v
IEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBv
cmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwg
SmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxF
Ul9KQVZBTkFOT19GSUxFX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFW
QU5BTk9fRklMRV9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wYXJhbXMuaD4KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotICBjbGFzcyBGaWxlRGVzY3JpcHRv
cjsgICAgICAgIC8vIGRlc2NyaXB0b3IuaAotICBuYW1lc3BhY2UgaW8gewotICAgIGNsYXNzIFBy
aW50ZXI7ICAgICAgICAgICAgIC8vIHByaW50ZXIuaAotICB9Ci0gIG5hbWVzcGFjZSBjb21waWxl
ciB7Ci0gICAgY2xhc3MgR2VuZXJhdG9yQ29udGV4dDsgICAgIC8vIGNvZGVfZ2VuZXJhdG9yLmgK
LSAgfQotfQotCi1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5h
bWVzcGFjZSBqYXZhbmFubyB7Ci0KLWNsYXNzIEZpbGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAg
ZXhwbGljaXQgRmlsZUdlbmVyYXRvcihjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwgY29uc3Qg
UGFyYW1zJiBwYXJhbXMpOwotICB+RmlsZUdlbmVyYXRvcigpOwotCi0gIC8vIENoZWNrcyBmb3Ig
cHJvYmxlbXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgbGVhZCB0byBjcnlwdGljIGNvbXBpbGUgZXJy
b3JzLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIHByb2JsZW1zLCBvciB3cml0
ZXMgYW4gZXJyb3IgZGVzY3JpcHRpb24gdG8KLSAgLy8gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0
dXJucyBmYWxzZSBvdGhlcndpc2UuCi0gIGJvb2wgVmFsaWRhdGUoc3RyaW5nKiBlcnJvcik7Ci0K
LSAgdm9pZCBHZW5lcmF0ZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8gSWYgd2UgYXJl
bid0IHB1dHRpbmcgZXZlcnl0aGluZyBpbnRvIG9uZSBmaWxlLCB0aGlzIHdpbGwgd3JpdGUgYWxs
IHRoZQotICAvLyBmaWxlcyBvdGhlciB0aGFuIHRoZSBvdXRlciBmaWxlIChpLmUuIG9uZSBmb3Ig
ZWFjaCBtZXNzYWdlLCBlbnVtLCBhbmQKLSAgLy8gc2VydmljZSB0eXBlKS4KLSAgdm9pZCBHZW5l
cmF0ZVNpYmxpbmdzKGNvbnN0IHN0cmluZyYgcGFja2FnZV9kaXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBHZW5lcmF0b3JDb250ZXh0KiBvdXRwdXRfZGlyZWN0b3J5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4qIGZpbGVfbGlzdCk7Ci0KLSAgY29uc3Qgc3RyaW5n
JiBqYXZhX3BhY2thZ2UoKSB7IHJldHVybiBqYXZhX3BhY2thZ2VfOyB9Ci0gIGNvbnN0IHN0cmlu
ZyYgY2xhc3NuYW1lKCkgICAgeyByZXR1cm4gY2xhc3NuYW1lXzsgICAgfQotCi0gcHJpdmF0ZToK
LSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGVfOwotICBjb25zdCBQYXJhbXMmIHBhcmFtc187
Ci0gIHN0cmluZyBqYXZhX3BhY2thZ2VfOwotICBzdHJpbmcgY2xhc3NuYW1lXzsKLQotICBHT09H
TEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRmlsZUdlbmVyYXRvcik7Ci19OwotCi19ICAv
LyBuYW1lc3BhY2UgamF2YW5hbm8KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09P
R0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX0ZJTEVfSF9fCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZ2VuZXJhdG9yLmNjIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2dlbmVyYXRvci5j
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzYTA0MjEyZmIwNzMwMjMwOTAwYzY4
YjQzOTE0MzVjMjdmMDM1Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZ2Vu
ZXJhdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwOi8vY29kZS5nb29n
bGUuY29tL3AvcHJvdG9idWYvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8v
ICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmph
eSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX3BhcmFtcy5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19nZW5lcmF0b3IuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZmlsZS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19o
ZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9i
dWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhbmFubyB7Ci0KLW5hbWVz
cGFjZSB7Ci0KLXN0cmluZyBUcmltU3RyaW5nKGNvbnN0IHN0cmluZyYgcykgewotICBzdHJpbmc6
OnNpemVfdHlwZSBzdGFydCA9IHMuZmluZF9maXJzdF9ub3Rfb2YoIiBcblxyXHQiKTsKLSAgaWYg
KHN0YXJ0ID09IHN0cmluZzo6bnBvcykgewotICAgIHJldHVybiAiIjsKLSAgfQotICBzdHJpbmc6
OnNpemVfdHlwZSBlbmQgPSBzLmZpbmRfbGFzdF9ub3Rfb2YoIiBcblxyXHQiKSArIDE7Ci0gIHJl
dHVybiBzLnN1YnN0cihzdGFydCwgZW5kIC0gc3RhcnQpOwotfQotCi19IC8vIG5hbWVzcGFjZQot
Ci12b2lkIFVwZGF0ZVBhcmFtc1JlY3Vyc2l2ZWx5KFBhcmFtcyYgcGFyYW1zLAotICAgIGNvbnN0
IEZpbGVEZXNjcmlwdG9yKiBmaWxlKSB7Ci0gIC8vIEFkZCBhbnkgcGFyYW1ldGVycyBmb3IgdGhp
cyBmaWxlCi0gIGlmIChmaWxlLT5vcHRpb25zKCkuaGFzX2phdmFfb3V0ZXJfY2xhc3NuYW1lKCkp
IHsKLSAgICBwYXJhbXMuc2V0X2phdmFfb3V0ZXJfY2xhc3NuYW1lKAotICAgICAgZmlsZS0+bmFt
ZSgpLCBmaWxlLT5vcHRpb25zKCkuamF2YV9vdXRlcl9jbGFzc25hbWUoKSk7Ci0gIH0KLSAgaWYg
KGZpbGUtPm9wdGlvbnMoKS5oYXNfamF2YV9wYWNrYWdlKCkpIHsKLSAgICBzdHJpbmcgcmVzdWx0
ID0gZmlsZS0+b3B0aW9ucygpLmphdmFfcGFja2FnZSgpOwotICAgIGlmICghcmVzdWx0LmVtcHR5
KCkpIHsKLSAgICAgIHJlc3VsdCArPSAiLiI7Ci0gICAgfQotICAgIHJlc3VsdCArPSAibmFubyI7
Ci0gICAgcGFyYW1zLnNldF9qYXZhX3BhY2thZ2UoCi0gICAgICBmaWxlLT5uYW1lKCksIHJlc3Vs
dCk7Ci0gIH0KLSAgaWYgKGZpbGUtPm9wdGlvbnMoKS5oYXNfamF2YV9tdWx0aXBsZV9maWxlcygp
KSB7Ci0gICAgcGFyYW1zLnNldF9qYXZhX211bHRpcGxlX2ZpbGVzKAotICAgICAgZmlsZS0+bmFt
ZSgpLCBmaWxlLT5vcHRpb25zKCkuamF2YV9tdWx0aXBsZV9maWxlcygpKTsKLSAgfQotCi0gIC8v
IExvb3AgdGhyb3VnaCBhbGwgZGVwZW5kZW50IGZpbGVzIHJlY3Vyc2l2ZWx5Ci0gIC8vIGFkZGlu
ZyBkZXAKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5kZXBlbmRlbmN5X2NvdW50KCk7IGkr
KykgewotICAgIFVwZGF0ZVBhcmFtc1JlY3Vyc2l2ZWx5KHBhcmFtcywgZmlsZS0+ZGVwZW5kZW5j
eShpKSk7Ci0gIH0KLX0KLQotSmF2YU5hbm9HZW5lcmF0b3I6OkphdmFOYW5vR2VuZXJhdG9yKCkg
e30KLUphdmFOYW5vR2VuZXJhdG9yOjp+SmF2YU5hbm9HZW5lcmF0b3IoKSB7fQotCi1ib29sIEph
dmFOYW5vR2VuZXJhdG9yOjpHZW5lcmF0ZShjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckNvbnRleHQqIG91dHB1dF9kaXJlY3Rv
cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogZXJyb3IpIGNvbnN0IHsK
LSAgdmVjdG9yPHBhaXI8c3RyaW5nLCBzdHJpbmc+ID4gb3B0aW9uczsKLQotICBQYXJzZUdlbmVy
YXRvclBhcmFtZXRlcihwYXJhbWV0ZXIsICZvcHRpb25zKTsKLQotICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAv
LyBwYXJzZSBnZW5lcmF0b3Igb3B0aW9ucwotCi0gIC8vIE5hbWUgYSBmaWxlIHdoZXJlIHdlIHdp
bGwgd3JpdGUgYSBsaXN0IG9mIGdlbmVyYXRlZCBmaWxlIG5hbWVzLCBvbmUKLSAgLy8gcGVyIGxp
bmUuCi0gIHN0cmluZyBvdXRwdXRfbGlzdF9maWxlOwotICBQYXJhbXMgcGFyYW1zKGZpbGUtPm5h
bWUoKSk7Ci0KLSAgLy8gVXBkYXRlIHBlciBmaWxlIHBhcmFtcwotICBVcGRhdGVQYXJhbXNSZWN1
cnNpdmVseShwYXJhbXMsIGZpbGUpOwotCi0gIC8vIFJlcGxhY2UgYW55IGV4aXN0aW5nIG9wdGlv
bnMgd2l0aCBvbmVzIGZyb20gY29tbWFuZCBsaW5lCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgb3B0
aW9ucy5zaXplKCk7IGkrKykgewotICAgIHN0cmluZyBvcHRpb25fbmFtZSA9IFRyaW1TdHJpbmco
b3B0aW9uc1tpXS5maXJzdCk7Ci0gICAgc3RyaW5nIG9wdGlvbl92YWx1ZSA9IFRyaW1TdHJpbmco
b3B0aW9uc1tpXS5zZWNvbmQpOwotICAgIGlmIChvcHRpb25fbmFtZSA9PSAib3V0cHV0X2xpc3Rf
ZmlsZSIpIHsKLSAgICAgIG91dHB1dF9saXN0X2ZpbGUgPSBvcHRpb25fdmFsdWU7Ci0gICAgfSBl
bHNlIGlmIChvcHRpb25fbmFtZSA9PSAiamF2YV9wYWNrYWdlIikgewotICAgICAgICB2ZWN0b3I8
c3RyaW5nPiBwYXJ0czsKLSAgICAgICAgU3BsaXRTdHJpbmdVc2luZyhvcHRpb25fdmFsdWUsICJ8
IiwgJnBhcnRzKTsKLSAgICAgICAgaWYgKHBhcnRzLnNpemUoKSAhPSAyKSB7Ci0gICAgICAgICAg
KmVycm9yID0gIkJhZCBqYXZhX3BhY2thZ2UsIGV4cGVjdGluZyBmaWxlbmFtZXxQYWNrYWdlTmFt
ZSBmb3VuZCAnIgotICAgICAgICAgICAgKyBvcHRpb25fdmFsdWUgKyAiJyI7Ci0gICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHBhcmFtcy5zZXRfamF2YV9wYWNrYWdl
KHBhcnRzWzBdLCBwYXJ0c1sxXSk7Ci0gICAgfSBlbHNlIGlmIChvcHRpb25fbmFtZSA9PSAiamF2
YV9vdXRlcl9jbGFzc25hbWUiKSB7Ci0gICAgICAgIHZlY3RvcjxzdHJpbmc+IHBhcnRzOwotICAg
ICAgICBTcGxpdFN0cmluZ1VzaW5nKG9wdGlvbl92YWx1ZSwgInwiLCAmcGFydHMpOwotICAgICAg
ICBpZiAocGFydHMuc2l6ZSgpICE9IDIpIHsKLSAgICAgICAgICAqZXJyb3IgPSAiQmFkIGphdmFf
b3V0ZXJfY2xhc3NuYW1lLCAiCi0gICAgICAgICAgICAgICAgICAgImV4cGVjdGluZyBmaWxlbmFt
ZXxDbGFzc05hbWUgZm91bmQgJyIKLSAgICAgICAgICAgICAgICAgICArIG9wdGlvbl92YWx1ZSAr
ICInIjsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyYW1z
LnNldF9qYXZhX291dGVyX2NsYXNzbmFtZShwYXJ0c1swXSwgcGFydHNbMV0pOwotICAgIH0gZWxz
ZSBpZiAob3B0aW9uX25hbWUgPT0gInN0b3JlX3Vua25vd25fZmllbGRzIikgewotICAgICAgcGFy
YW1zLnNldF9zdG9yZV91bmtub3duX2ZpZWxkcyhvcHRpb25fdmFsdWUgPT0gInRydWUiKTsKLSAg
ICB9IGVsc2UgaWYgKG9wdGlvbl9uYW1lID09ICJqYXZhX211bHRpcGxlX2ZpbGVzIikgewotICAg
ICAgcGFyYW1zLnNldF9vdmVycmlkZV9qYXZhX211bHRpcGxlX2ZpbGVzKG9wdGlvbl92YWx1ZSA9
PSAidHJ1ZSIpOwotICAgIH0gZWxzZSBpZiAob3B0aW9uX25hbWUgPT0gImphdmFfbmFub19nZW5l
cmF0ZV9oYXMiKSB7Ci0gICAgICBwYXJhbXMuc2V0X2dlbmVyYXRlX2hhcyhvcHRpb25fdmFsdWUg
PT0gInRydWUiKTsKLSAgICB9IGVsc2UgaWYgKG9wdGlvbl9uYW1lID09ICJlbnVtX3N0eWxlIikg
ewotICAgICAgcGFyYW1zLnNldF9qYXZhX2VudW1fc3R5bGUob3B0aW9uX3ZhbHVlID09ICJqYXZh
Iik7Ci0gICAgfSBlbHNlIGlmIChvcHRpb25fbmFtZSA9PSAib3B0aW9uYWxfZmllbGRfc3R5bGUi
KSB7Ci0gICAgICBwYXJhbXMuc2V0X29wdGlvbmFsX2ZpZWxkX2FjY2Vzc29ycyhvcHRpb25fdmFs
dWUgPT0gImFjY2Vzc29ycyIpOwotICAgICAgcGFyYW1zLnNldF91c2VfcmVmZXJlbmNlX3R5cGVz
X2Zvcl9wcmltaXRpdmVzKG9wdGlvbl92YWx1ZSA9PSAicmVmdHlwZXMiCi0gICAgICAgICAgfHwg
b3B0aW9uX3ZhbHVlID09ICJyZWZ0eXBlc19jb21wYXRfbW9kZSIpOwotICAgICAgcGFyYW1zLnNl
dF9yZWZ0eXBlc19wcmltaXRpdmVfZW51bXMoCi0gICAgICAgICAgb3B0aW9uX3ZhbHVlID09ICJy
ZWZ0eXBlc19jb21wYXRfbW9kZSIpOwotICAgICAgaWYgKG9wdGlvbl92YWx1ZSA9PSAicmVmdHlw
ZXNfY29tcGF0X21vZGUiKSB7Ci0gICAgICAgIHBhcmFtcy5zZXRfZ2VuZXJhdGVfY2xlYXIoZmFs
c2UpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAob3B0aW9uX25hbWUgPT0gImdlbmVyYXRlX2Vx
dWFscyIpIHsKLSAgICAgIHBhcmFtcy5zZXRfZ2VuZXJhdGVfZXF1YWxzKG9wdGlvbl92YWx1ZSA9
PSAidHJ1ZSIpOwotICAgIH0gZWxzZSBpZiAob3B0aW9uX25hbWUgPT0gImlnbm9yZV9zZXJ2aWNl
cyIpIHsKLSAgICAgIHBhcmFtcy5zZXRfaWdub3JlX3NlcnZpY2VzKG9wdGlvbl92YWx1ZSA9PSAi
dHJ1ZSIpOwotICAgIH0gZWxzZSBpZiAob3B0aW9uX25hbWUgPT0gInBhcmNlbGFibGVfbWVzc2Fn
ZXMiKSB7Ci0gICAgICBwYXJhbXMuc2V0X3BhcmNlbGFibGVfbWVzc2FnZXMob3B0aW9uX3ZhbHVl
ID09ICJ0cnVlIik7Ci0gICAgfSBlbHNlIGlmIChvcHRpb25fbmFtZSA9PSAiZ2VuZXJhdGVfY2xv
bmUiKSB7Ci0gICAgICBwYXJhbXMuc2V0X2dlbmVyYXRlX2Nsb25lKG9wdGlvbl92YWx1ZSA9PSAi
dHJ1ZSIpOwotICAgIH0gZWxzZSBpZiAob3B0aW9uX25hbWUgPT0gImdlbmVyYXRlX2ludGRlZnMi
KSB7Ci0gICAgICBwYXJhbXMuc2V0X2dlbmVyYXRlX2ludGRlZnMob3B0aW9uX3ZhbHVlID09ICJ0
cnVlIik7Ci0gICAgfSBlbHNlIGlmIChvcHRpb25fbmFtZSA9PSAiZ2VuZXJhdGVfY2xlYXIiKSB7
Ci0gICAgICBwYXJhbXMuc2V0X2dlbmVyYXRlX2NsZWFyKG9wdGlvbl92YWx1ZSA9PSAidHJ1ZSIp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAqZXJyb3IgPSAiSWdub3JlIHVua25vd24gamF2YW5hbm8g
Z2VuZXJhdG9yIG9wdGlvbjogIiArIG9wdGlvbl9uYW1lOwotICAgIH0KLSAgfQotCi0gIC8vIENo
ZWNrIGlsbGVnYWwgcGFyYW1ldGVyIGNvbWJpbmF0aW9ucwotICAvLyBOb3RlOiB0aGUgZW51bS1s
aWtlIG9wdGlvbmFsX2ZpZWxkX3N0eWxlIGdlbmVyYXRvciBwYXJhbSBlbnN1cmVzCi0gIC8vIHRo
YXQgd2UgY2FuIG5ldmVyIGhhdmUgaWxsZWdhbCBjb21iaW5hdGlvbnMgb2YgZmllbGQgc3R5bGVz
Ci0gIC8vIChlLmcuIHJlZnR5cGVzIGFuZCBhY2Nlc3NvcnMgY2FuJ3QgYmUgb24gYXQgdGhlIHNh
bWUgdGltZSkuCi0gIGlmIChwYXJhbXMuZ2VuZXJhdGVfaGFzKCkKLSAgICAgICYmIChwYXJhbXMu
b3B0aW9uYWxfZmllbGRfYWNjZXNzb3JzKCkKLSAgICAgICAgICB8fCBwYXJhbXMudXNlX3JlZmVy
ZW5jZV90eXBlc19mb3JfcHJpbWl0aXZlcygpKSkgewotICAgIGVycm9yLT5hc3NpZ24oImphdmFf
bmFub19nZW5lcmF0ZV9oYXM9dHJ1ZSBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiIKLSAg
ICAgICAgIiB3aXRoIG9wdGlvbmFsX2ZpZWxkX3N0eWxlPWFjY2Vzc29ycyBvciBvcHRpb25hbF9m
aWVsZF9zdHlsZT1yZWZ0eXBlcyIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgRmlsZUdlbmVyYXRvciBmaWxlX2dlbmVyYXRvcihmaWxlLCBwYXJhbXMpOwot
ICBpZiAoIWZpbGVfZ2VuZXJhdG9yLlZhbGlkYXRlKGVycm9yKSkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotCi0gIHN0cmluZyBwYWNrYWdlX2RpciA9Ci0gICAgU3RyaW5nUmVwbGFjZShmaWxl
X2dlbmVyYXRvci5qYXZhX3BhY2thZ2UoKSwgIi4iLCAiLyIsIHRydWUpOwotICBpZiAoIXBhY2th
Z2VfZGlyLmVtcHR5KCkpIHBhY2thZ2VfZGlyICs9ICIvIjsKLQotICB2ZWN0b3I8c3RyaW5nPiBh
bGxfZmlsZXM7Ci0KLSAgaWYgKElzT3V0ZXJDbGFzc05lZWRlZChwYXJhbXMsIGZpbGUpKSB7Ci0g
ICAgc3RyaW5nIGphdmFfZmlsZW5hbWUgPSBwYWNrYWdlX2RpcjsKLSAgICBqYXZhX2ZpbGVuYW1l
ICs9IGZpbGVfZ2VuZXJhdG9yLmNsYXNzbmFtZSgpOwotICAgIGphdmFfZmlsZW5hbWUgKz0gIi5q
YXZhIjsKLSAgICBhbGxfZmlsZXMucHVzaF9iYWNrKGphdmFfZmlsZW5hbWUpOwotCi0gICAgLy8g
R2VuZXJhdGUgbWFpbiBqYXZhIGZpbGUuCi0gICAgc2NvcGVkX3B0cjxpbzo6WmVyb0NvcHlPdXRw
dXRTdHJlYW0+IG91dHB1dCgKLSAgICAgIG91dHB1dF9kaXJlY3RvcnktPk9wZW4oamF2YV9maWxl
bmFtZSkpOwotICAgIGlvOjpQcmludGVyIHByaW50ZXIob3V0cHV0LmdldCgpLCAnJCcpOwotICAg
IGZpbGVfZ2VuZXJhdG9yLkdlbmVyYXRlKCZwcmludGVyKTsKLSAgfQotCi0gIC8vIEdlbmVyYXRl
IHNpYmxpbmcgZmlsZXMuCi0gIGZpbGVfZ2VuZXJhdG9yLkdlbmVyYXRlU2libGluZ3MocGFja2Fn
ZV9kaXIsIG91dHB1dF9kaXJlY3RvcnksICZhbGxfZmlsZXMpOwotCi0gIC8vIEdlbmVyYXRlIG91
dHB1dCBsaXN0IGlmIHJlcXVlc3RlZC4KLSAgaWYgKCFvdXRwdXRfbGlzdF9maWxlLmVtcHR5KCkp
IHsKLSAgICAvLyBHZW5lcmF0ZSBvdXRwdXQgbGlzdC4gIFRoaXMgaXMganVzdCBhIHNpbXBsZSB0
ZXh0IGZpbGUgcGxhY2VkIGluIGEKLSAgICAvLyBkZXRlcm1pbmlzdGljIGxvY2F0aW9uIHdoaWNo
IGxpc3RzIHRoZSAuamF2YSBmaWxlcyBiZWluZyBnZW5lcmF0ZWQuCi0gICAgc2NvcGVkX3B0cjxp
bzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0+IHNyY2xpc3RfcmF3X291dHB1dCgKLSAgICAgIG91dHB1
dF9kaXJlY3RvcnktPk9wZW4ob3V0cHV0X2xpc3RfZmlsZSkpOwotICAgIGlvOjpQcmludGVyIHNy
Y2xpc3RfcHJpbnRlcihzcmNsaXN0X3Jhd19vdXRwdXQuZ2V0KCksICckJyk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhbGxfZmlsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIHNyY2xpc3RfcHJp
bnRlci5QcmludCgiJGZpbGVuYW1lJFxuIiwgImZpbGVuYW1lIiwgYWxsX2ZpbGVzW2ldKTsKLSAg
ICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGphdmEKLX0g
IC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBu
YW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
amF2YW5hbm8vamF2YW5hbm9fZ2VuZXJhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvamF2YW5hbm8vamF2YW5hbm9fZ2VuZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZmOWY3ZjJhNGEwMWQ5N2NjM2I1ZDBhZjVjNTA5NTAwNjU0NTlhNDQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2dlbmVyYXRvci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25A
Z29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29s
IEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBv
dGhlcnMuCi0vLwotLy8gR2VuZXJhdGVzIEphdmEgbmFubyBjb2RlIGZvciBhIGdpdmVuIC5wcm90
byBmaWxlLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBTkFOT19OQU5P
X0dFTkVSQVRPUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5P
X05BTk9fR0VORVJBVE9SX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xl
IHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNl
IGphdmFuYW5vIHsKLQotLy8gQ29kZUdlbmVyYXRvciBpbXBsZW1lbnRhdGlvbiB3aGljaCBnZW5l
cmF0ZXMgSmF2YSBuYW5vIGNvZGUuICBJZiB5b3UgY3JlYXRlIHlvdXIKLS8vIG93biBwcm90b2Nv
bCBjb21waWxlciBiaW5hcnkgYW5kIHlvdSB3YW50IGl0IHRvIHN1cHBvcnQgSmF2YSBvdXRwdXQg
Zm9yIHRoZQotLy8gbmFubyBydW50aW1lLCB5b3UgY2FuIGRvIHNvIGJ5IHJlZ2lzdGVyaW5nIGFu
IGluc3RhbmNlIG9mIHRoaXMgQ29kZUdlbmVyYXRvciB3aXRoCi0vLyB0aGUgQ29tbWFuZExpbmVJ
bnRlcmZhY2UgaW4geW91ciBtYWluKCkgZnVuY3Rpb24uCi1jbGFzcyBMSUJQUk9UT0NfRVhQT1JU
IEphdmFOYW5vR2VuZXJhdG9yIDogcHVibGljIENvZGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAg
SmF2YU5hbm9HZW5lcmF0b3IoKTsKLSAgfkphdmFOYW5vR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1w
bGVtZW50cyBDb2RlR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgYm9vbCBHZW5lcmF0ZShjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAg
ICAgICAgICAgICBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICBHZW5l
cmF0b3JDb250ZXh0KiBvdXRwdXRfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgIHN0cmluZyog
ZXJyb3IpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RS
VUNUT1JTKEphdmFOYW5vR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhbmFu
bwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfSkFWQU5BTk9fTkFOT19HRU5FUkFUT1JfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9faGVscGVycy5jYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19oZWxwZXJzLmNjCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMjgxMWEyNGRjYmI5MjBlNTYyYWJkOGFlYzMxZjMxYmY5MDdj
MjA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19oZWxwZXJzLmNjCisrKyAv
ZGV2L251bGwKQEAgLTEsNTkxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9i
dWYvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1
dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmln
aW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVm
ZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHZlY3Rv
cj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFu
b19oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5v
L2phdmFuYW5vX3BhcmFtcy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9y
LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2hhc2guaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgamF2YW5hbm8gewot
Ci1jb25zdCBjaGFyIGtUaGlja1NlcGFyYXRvcltdID0KLSAgIi8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7Ci1j
b25zdCBjaGFyIGtUaGluU2VwYXJhdG9yW10gPQotICAiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKLQotY2xh
c3MgUmVuYW1lS2V5d29yZHMgewotIHByaXZhdGU6Ci0gIGhhc2hfc2V0PHN0cmluZz4gamF2YV9r
ZXl3b3Jkc19zZXRfOwotCi0gcHVibGljOgotICBSZW5hbWVLZXl3b3JkcygpIHsKLSAgICBzdGF0
aWMgY29uc3QgY2hhcioga0phdmFLZXl3b3Jkc0xpc3RbXSA9IHsKLSAgICAgIC8vIFJlc2VydmVk
IEphdmEgS2V5d29yZHMKLSAgICAgICJhYnN0cmFjdCIsICJhc3NlcnQiLCAiYm9vbGVhbiIsICJi
cmVhayIsICJieXRlIiwgImNhc2UiLCAiY2F0Y2giLAotICAgICAgImNoYXIiLCAiY2xhc3MiLCAi
Y29uc3QiLCAiY29udGludWUiLCAiZGVmYXVsdCIsICJkbyIsICJkb3VibGUiLCAiZWxzZSIsCi0g
ICAgICAiZW51bSIsICJleHRlbmRzIiwgImZpbmFsIiwgImZpbmFsbHkiLCAiZmxvYXQiLCAiZm9y
IiwgImdvdG8iLCAiaWYiLAotICAgICAgImltcGxlbWVudHMiLCAiaW1wb3J0IiwgImluc3RhbmNl
b2YiLCAiaW50IiwgImludGVyZmFjZSIsICJsb25nIiwKLSAgICAgICJuYXRpdmUiLCAibmV3Iiwg
InBhY2thZ2UiLCAicHJpdmF0ZSIsICJwcm90ZWN0ZWQiLCAicHVibGljIiwgInJldHVybiIsCi0g
ICAgICAic2hvcnQiLCAic3RhdGljIiwgInN0cmljdGZwIiwgInN1cGVyIiwgInN3aXRjaCIsICJz
eW5jaHJvbml6ZWQiLAotICAgICAgInRoaXMiLCAidGhyb3ciLCAidGhyb3dzIiwgInRyYW5zaWVu
dCIsICJ0cnkiLCAidm9pZCIsICJ2b2xhdGlsZSIsICJ3aGlsZSIsCi0KLSAgICAgIC8vIFJlc2Vy
dmVkIEtleXdvcmRzIGZvciBMaXRlcmFscwotICAgICAgImZhbHNlIiwgIm51bGwiLCAidHJ1ZSIK
LSAgICB9OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBHT09HTEVfQVJSQVlTSVpFKGtKYXZh
S2V5d29yZHNMaXN0KTsgaSsrKSB7Ci0gICAgICBqYXZhX2tleXdvcmRzX3NldF8uaW5zZXJ0KGtK
YXZhS2V5d29yZHNMaXN0W2ldKTsKLSAgICB9Ci0gIH0KLQotICAvLyBVc2VkIHRvIHJlbmFtZSB0
aGUgYSBmaWVsZCBuYW1lIGlmIGl0J3MgYSBqYXZhIGtleXdvcmQuICBTcGVjaWZpY2FsbHkKLSAg
Ly8gdGhpcyBpcyB1c2VkIHRvIHJlbmFtZSB0aGUgWyJuYW1lIl0gb3IgWyJjYXBpdGFsaXplZF9u
YW1lIl0gZmllbGQgcGFyYW1zLgotICAvLyAoaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uv
dHV0b3JpYWwvamF2YS9udXRzYW5kYm9sdHMvX2tleXdvcmRzLmh0bWwpCi0gIHN0cmluZyBSZW5h
bWVKYXZhS2V5d29yZHNJbXBsKGNvbnN0IHN0cmluZyYgaW5wdXQpIHsKLSAgICBzdHJpbmcgcmVz
dWx0ID0gaW5wdXQ7Ci0KLSAgICBpZiAoamF2YV9rZXl3b3Jkc19zZXRfLmZpbmQocmVzdWx0KSAh
PSBqYXZhX2tleXdvcmRzX3NldF8uZW5kKCkpIHsKLSAgICAgIHJlc3VsdCArPSAiXyI7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi19OwotCi1zdGF0aWMgUmVuYW1lS2V5d29y
ZHMgc1JlbmFtZUtleXdvcmRzOwotCi1uYW1lc3BhY2UgewotCi1jb25zdCBjaGFyKiBrRGVmYXVs
dFBhY2thZ2UgPSAiIjsKLQotY29uc3Qgc3RyaW5nJiBGaWVsZE5hbWUoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCkgewotICAvLyBHcm91cHMgYXJlIGhhY2t5OiAgVGhlIG5hbWUgb2YgdGhl
IGZpZWxkIGlzIGp1c3QgdGhlIGxvd2VyLWNhc2VkIG5hbWUKLSAgLy8gb2YgdGhlIGdyb3VwIHR5
cGUuICBJbiBKYXZhLCB0aG91Z2gsIHdlIHdvdWxkIGxpa2UgdG8gcmV0YWluIHRoZSBvcmlnaW5h
bAotICAvLyBjYXBpdGFsaXphdGlvbiBvZiB0aGUgdHlwZSBuYW1lLgotICBpZiAoZmllbGQtPnR5
cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApIHsKLSAgICByZXR1cm4gZmllbGQt
Pm1lc3NhZ2VfdHlwZSgpLT5uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGZpZWxkLT5u
YW1lKCk7Ci0gIH0KLX0KLQotc3RyaW5nIFVuZGVyc2NvcmVzVG9DYW1lbENhc2VJbXBsKGNvbnN0
IHN0cmluZyYgaW5wdXQsIGJvb2wgY2FwX25leHRfbGV0dGVyKSB7Ci0gIHN0cmluZyByZXN1bHQ7
Ci0gIC8vIE5vdGU6ICBJIGRpc3RydXN0IGN0eXBlLmggZHVlIHRvIGxvY2FsZXMuCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgaW5wdXQuc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAoJ2EnIDw9IGlucHV0
W2ldICYmIGlucHV0W2ldIDw9ICd6JykgewotICAgICAgaWYgKGNhcF9uZXh0X2xldHRlcikgewot
ICAgICAgICByZXN1bHQgKz0gaW5wdXRbaV0gKyAoJ0EnIC0gJ2EnKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJlc3VsdCArPSBpbnB1dFtpXTsKLSAgICAgIH0KLSAgICAgIGNhcF9uZXh0X2xl
dHRlciA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAoJ0EnIDw9IGlucHV0W2ldICYmIGlucHV0W2ld
IDw9ICdaJykgewotICAgICAgaWYgKGkgPT0gMCAmJiAhY2FwX25leHRfbGV0dGVyKSB7Ci0gICAg
ICAgIC8vIEZvcmNlIGZpcnN0IGxldHRlciB0byBsb3dlci1jYXNlIHVubGVzcyBleHBsaWNpdGx5
IHRvbGQgdG8KLSAgICAgICAgLy8gY2FwaXRhbGl6ZSBpdC4KLSAgICAgICAgcmVzdWx0ICs9IGlu
cHV0W2ldICsgKCdhJyAtICdBJyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBDYXBpdGFs
IGxldHRlcnMgYWZ0ZXIgdGhlIGZpcnN0IGFyZSBsZWZ0IGFzLWlzLgotICAgICAgICByZXN1bHQg
Kz0gaW5wdXRbaV07Ci0gICAgICB9Ci0gICAgICBjYXBfbmV4dF9sZXR0ZXIgPSBmYWxzZTsKLSAg
ICB9IGVsc2UgaWYgKCcwJyA8PSBpbnB1dFtpXSAmJiBpbnB1dFtpXSA8PSAnOScpIHsKLSAgICAg
IHJlc3VsdCArPSBpbnB1dFtpXTsKLSAgICAgIGNhcF9uZXh0X2xldHRlciA9IHRydWU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIGNhcF9uZXh0X2xldHRlciA9IHRydWU7Ci0gICAgfQotICB9Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1zdHJpbmcgVW5kZXJzY29yZXNU
b0NhbWVsQ2FzZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHJldHVybiBVbmRl
cnNjb3Jlc1RvQ2FtZWxDYXNlSW1wbChGaWVsZE5hbWUoZmllbGQpLCBmYWxzZSk7Ci19Ci0KLXN0
cmluZyBVbmRlcnNjb3Jlc1RvQ2FwaXRhbGl6ZWRDYW1lbENhc2UoY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCkgewotICByZXR1cm4gVW5kZXJzY29yZXNUb0NhbWVsQ2FzZUltcGwoRmllbGRO
YW1lKGZpZWxkKSwgdHJ1ZSk7Ci19Ci0KLXN0cmluZyBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGNv
bnN0IE1ldGhvZERlc2NyaXB0b3IqIG1ldGhvZCkgewotICByZXR1cm4gVW5kZXJzY29yZXNUb0Nh
bWVsQ2FzZUltcGwobWV0aG9kLT5uYW1lKCksIGZhbHNlKTsKLX0KLQotc3RyaW5nIFVuZGVyc2Nv
cmVzVG9DYW1lbENhc2UoY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZikgewotICByZXR1cm4g
VW5kZXJzY29yZXNUb0NhbWVsQ2FzZUltcGwob25lb2YtPm5hbWUoKSwgZmFsc2UpOwotfQotCi1z
dHJpbmcgVW5kZXJzY29yZXNUb0NhcGl0YWxpemVkQ2FtZWxDYXNlKGNvbnN0IE9uZW9mRGVzY3Jp
cHRvciogb25lb2YpIHsKLSAgcmV0dXJuIFVuZGVyc2NvcmVzVG9DYW1lbENhc2VJbXBsKG9uZW9m
LT5uYW1lKCksIHRydWUpOwotfQotCi1zdHJpbmcgUmVuYW1lSmF2YUtleXdvcmRzKGNvbnN0IHN0
cmluZyYgaW5wdXQpIHsKLSAgcmV0dXJuIHNSZW5hbWVLZXl3b3Jkcy5SZW5hbWVKYXZhS2V5d29y
ZHNJbXBsKGlucHV0KTsKLX0KLQotc3RyaW5nIFN0cmlwUHJvdG8oY29uc3Qgc3RyaW5nJiBmaWxl
bmFtZSkgewotICBpZiAoSGFzU3VmZml4U3RyaW5nKGZpbGVuYW1lLCAiLnByb3RvZGV2ZWwiKSkg
ewotICAgIHJldHVybiBTdHJpcFN1ZmZpeFN0cmluZyhmaWxlbmFtZSwgIi5wcm90b2RldmVsIik7
Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIFN0cmlwU3VmZml4U3RyaW5nKGZpbGVuYW1lLCAiLnBy
b3RvIik7Ci0gIH0KLX0KLQotc3RyaW5nIEZpbGVDbGFzc05hbWUoY29uc3QgUGFyYW1zJiBwYXJh
bXMsIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKSB7Ci0gIGlmIChwYXJhbXMuaGFzX2phdmFf
b3V0ZXJfY2xhc3NuYW1lKGZpbGUtPm5hbWUoKSkpIHsKLSAgICByZXR1cm4gcGFyYW1zLmphdmFf
b3V0ZXJfY2xhc3NuYW1lKGZpbGUtPm5hbWUoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gVXNlIHRo
ZSBmaWxlbmFtZSBpdHNlbGYgd2l0aCB1bmRlcnNjb3JlcyByZW1vdmVkCi0gICAgLy8gYW5kIGEg
Q2FtZWxDYXNlIHN0eWxlIG5hbWUuCi0gICAgc3RyaW5nIGJhc2VuYW1lOwotICAgIHN0cmluZzo6
c2l6ZV90eXBlIGxhc3Rfc2xhc2ggPSBmaWxlLT5uYW1lKCkuZmluZF9sYXN0X29mKCcvJyk7Ci0g
ICAgaWYgKGxhc3Rfc2xhc2ggPT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICBiYXNlbmFtZSA9IGZp
bGUtPm5hbWUoKTsKLSAgICB9IGVsc2UgewotICAgICAgYmFzZW5hbWUgPSBmaWxlLT5uYW1lKCku
c3Vic3RyKGxhc3Rfc2xhc2ggKyAxKTsKLSAgICB9Ci0gICAgcmV0dXJuIFVuZGVyc2NvcmVzVG9D
YW1lbENhc2VJbXBsKFN0cmlwUHJvdG8oYmFzZW5hbWUpLCB0cnVlKTsKLSAgfQotfQotCi1zdHJp
bmcgRmlsZUphdmFQYWNrYWdlKGNvbnN0IFBhcmFtcyYgcGFyYW1zLCBjb25zdCBGaWxlRGVzY3Jp
cHRvciogZmlsZSkgewotICBpZiAocGFyYW1zLmhhc19qYXZhX3BhY2thZ2UoZmlsZS0+bmFtZSgp
KSkgewotICAgIHJldHVybiBwYXJhbXMuamF2YV9wYWNrYWdlKGZpbGUtPm5hbWUoKSk7Ci0gIH0g
ZWxzZSB7Ci0gICAgc3RyaW5nIHJlc3VsdCA9IGtEZWZhdWx0UGFja2FnZTsKLSAgICBpZiAoIWZp
bGUtPnBhY2thZ2UoKS5lbXB0eSgpKSB7Ci0gICAgICBpZiAoIXJlc3VsdC5lbXB0eSgpKSByZXN1
bHQgKz0gJy4nOwotICAgICAgcmVzdWx0ICs9IGZpbGUtPnBhY2thZ2UoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIXJlc3VsdC5lbXB0eSgpKSB7Ci0gICAgICByZXN1bHQgKz0gIi4iOwotICAgIH0KLSAg
ICByZXN1bHQgKz0gIm5hbm8iOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi1ib29s
IElzT3V0ZXJDbGFzc05lZWRlZChjb25zdCBQYXJhbXMmIHBhcmFtcywgY29uc3QgRmlsZURlc2Ny
aXB0b3IqIGZpbGUpIHsKLSAgLy8gSWYgamF2YV9tdWx0aXBsZV9maWxlcyBpcyBmYWxzZSwgdGhl
IG91dGVyIGNsYXNzIGlzIGFsd2F5cyBuZWVkZWQuCi0gIGlmICghcGFyYW1zLmphdmFfbXVsdGlw
bGVfZmlsZXMoZmlsZS0+bmFtZSgpKSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8g
RmlsZS1zY29wZSBleHRlbnNpb25zIG5lZWQgdGhlIG91dGVyIGNsYXNzIGFzIHRoZSBzY29wZS4K
LSAgaWYgKGZpbGUtPmV4dGVuc2lvbl9jb3VudCgpICE9IDApIHsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotCi0gIC8vIElmIGNvbnRhaW5lciBpbnRlcmZhY2VzIGFyZSBub3QgZ2VuZXJhdGVkLCBm
aWxlLXNjb3BlIGVudW1zIG5lZWQgdGhlCi0gIC8vIG91dGVyIGNsYXNzIGFzIHRoZSBzY29wZS4K
LSAgaWYgKGZpbGUtPmVudW1fdHlwZV9jb3VudCgpICE9IDAgJiYgIXBhcmFtcy5qYXZhX2VudW1f
c3R5bGUoKSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIGZhbHNlOwotfQot
Ci1zdHJpbmcgVG9KYXZhTmFtZShjb25zdCBQYXJhbXMmIHBhcmFtcywgY29uc3Qgc3RyaW5nJiBu
YW1lLCBib29sIGlzX2NsYXNzLAotICAgIGNvbnN0IERlc2NyaXB0b3IqIHBhcmVudCwgY29uc3Qg
RmlsZURlc2NyaXB0b3IqIGZpbGUpIHsKLSAgc3RyaW5nIHJlc3VsdDsKLSAgaWYgKHBhcmVudCAh
PSBOVUxMKSB7Ci0gICAgcmVzdWx0LmFwcGVuZChDbGFzc05hbWUocGFyYW1zLCBwYXJlbnQpKTsK
LSAgfSBlbHNlIGlmIChpc19jbGFzcyAmJiBwYXJhbXMuamF2YV9tdWx0aXBsZV9maWxlcyhmaWxl
LT5uYW1lKCkpKSB7Ci0gICAgcmVzdWx0LmFwcGVuZChGaWxlSmF2YVBhY2thZ2UocGFyYW1zLCBm
aWxlKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0LmFwcGVuZChDbGFzc05hbWUocGFyYW1zLCBm
aWxlKSk7Ci0gIH0KLSAgaWYgKCFyZXN1bHQuZW1wdHkoKSkgcmVzdWx0LmFwcGVuZCgxLCAnLicp
OwotICByZXN1bHQuYXBwZW5kKFJlbmFtZUphdmFLZXl3b3JkcyhuYW1lKSk7Ci0gIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXN0cmluZyBDbGFzc05hbWUoY29uc3QgUGFyYW1zJiBwYXJhbXMsIGNvbnN0
IEZpbGVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHN0cmluZyByZXN1bHQgPSBGaWxlSmF2
YVBhY2thZ2UocGFyYW1zLCBkZXNjcmlwdG9yKTsKLSAgaWYgKCFyZXN1bHQuZW1wdHkoKSkgcmVz
dWx0ICs9ICcuJzsKLSAgcmVzdWx0ICs9IEZpbGVDbGFzc05hbWUocGFyYW1zLCBkZXNjcmlwdG9y
KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RyaW5nIENsYXNzTmFtZShjb25zdCBQYXJhbXMm
IHBhcmFtcywgY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgY29uc3QgRGVz
Y3JpcHRvciogcGFyZW50ID0gZGVzY3JpcHRvci0+Y29udGFpbmluZ190eXBlKCk7Ci0gIC8vIFdo
ZW4gdXNpbmcgSmF2YSBlbnVtIHN0eWxlLCBhbiBlbnVtJ3MgY2xhc3MgbmFtZSBjb250YWlucyB0
aGUgZW51bSBuYW1lLgotICAvLyBVc2UgdGhlIHN0YW5kYXJkIFRvSmF2YU5hbWUgdHJhbnNsYXRp
b24uCi0gIGlmIChwYXJhbXMuamF2YV9lbnVtX3N0eWxlKCkpIHsKLSAgICByZXR1cm4gVG9KYXZh
TmFtZShwYXJhbXMsIGRlc2NyaXB0b3ItPm5hbWUoKSwgdHJ1ZSwgcGFyZW50LAotICAgICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3ItPmZpbGUoKSk7Ci0gIH0KLSAgLy8gT3RoZXJ3aXNlIHRo
ZSBlbnVtIG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGZyb20gdGhlIGVuY2xvc2luZyBjbGFzcy4KLSAg
aWYgKHBhcmVudCAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuIENsYXNzTmFtZShwYXJhbXMsIHBhcmVu
dCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIENsYXNzTmFtZShwYXJhbXMsIGRlc2NyaXB0b3It
PmZpbGUoKSk7Ci0gIH0KLX0KLQotc3RyaW5nIEZpZWxkQ29uc3RhbnROYW1lKGNvbnN0IEZpZWxk
RGVzY3JpcHRvciAqZmllbGQpIHsKLSAgc3RyaW5nIG5hbWUgPSBmaWVsZC0+bmFtZSgpICsgIl9G
SUVMRF9OVU1CRVIiOwotICBVcHBlclN0cmluZygmbmFtZSk7Ci0gIHJldHVybiBuYW1lOwotfQot
Ci1zdHJpbmcgRmllbGREZWZhdWx0Q29uc3RhbnROYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciAq
ZmllbGQpIHsKLSAgcmV0dXJuICJfIiArIFJlbmFtZUphdmFLZXl3b3JkcyhVbmRlcnNjb3Jlc1Rv
Q2FtZWxDYXNlKGZpZWxkKSkgKyAiRGVmYXVsdCI7Ci19Ci0KLXZvaWQgUHJpbnRGaWVsZENvbW1l
bnQoaW86OlByaW50ZXIqIHByaW50ZXIsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsK
LSAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwcmludCBncm91cCBib2RpZXMgc28gd2UgY3V0IG9mZiBh
ZnRlciB0aGUgZmlyc3QgbGluZQotICAvLyAodGhlIHNlY29uZCBsaW5lIGZvciBleHRlbnNpb25z
KS4KLSAgc3RyaW5nIGRlZiA9IGZpZWxkLT5EZWJ1Z1N0cmluZygpOwotICBzdHJpbmc6OnNpemVf
dHlwZSBmaXJzdF9saW5lX2VuZCA9IGRlZi5maW5kX2ZpcnN0X29mKCdcbicpOwotICBwcmludGVy
LT5QcmludCgiLy8gJGRlZiRcbiIsCi0gICAgImRlZiIsIGRlZi5zdWJzdHIoMCwgZmlyc3RfbGlu
ZV9lbmQpKTsKLSAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24oKSkgewotICAgIHN0cmluZzo6c2l6
ZV90eXBlIHNlY29uZF9saW5lX3N0YXJ0ID0gZmlyc3RfbGluZV9lbmQgKyAxOwotICAgIHN0cmlu
Zzo6c2l6ZV90eXBlIHNlY29uZF9saW5lX2xlbmd0aCA9Ci0gICAgICAgIGRlZi5maW5kKCdcbics
IHNlY29uZF9saW5lX3N0YXJ0KSAtIHNlY29uZF9saW5lX3N0YXJ0OwotICAgIHByaW50ZXItPlBy
aW50KCIvLyAkZGVmJFxuIiwKLSAgICAgICJkZWYiLCBkZWYuc3Vic3RyKHNlY29uZF9saW5lX3N0
YXJ0LCBzZWNvbmRfbGluZV9sZW5ndGgpKTsKLSAgfQotfQotCi1KYXZhVHlwZSBHZXRKYXZhVHlw
ZShGaWVsZERlc2NyaXB0b3I6OlR5cGUgZmllbGRfdHlwZSkgewotICBzd2l0Y2ggKGZpZWxkX3R5
cGUpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQzMjoKLSAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UMzI6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfU0lOVDMyOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVEMzI6Ci0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVEMzI6Ci0gICAgICByZXR1cm4gSkFWQVRZ
UEVfSU5UOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfSU5UNjQ6Ci0gICAgY2Fz
ZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfVUlOVDY0OgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX1NJTlQ2NDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhFRDY0Ogot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDY0OgotICAgICAgcmV0dXJuIEpB
VkFUWVBFX0xPTkc7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GTE9BVDoKLSAg
ICAgIHJldHVybiBKQVZBVFlQRV9GTE9BVDsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpU
WVBFX0RPVUJMRToKLSAgICAgIHJldHVybiBKQVZBVFlQRV9ET1VCTEU7Ci0KLSAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvcjo6VFlQRV9CT09MOgotICAgICAgcmV0dXJuIEpBVkFUWVBFX0JPT0xFQU47
Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkc6Ci0gICAgICByZXR1cm4g
SkFWQVRZUEVfU1RSSU5HOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVM6
Ci0gICAgICByZXR1cm4gSkFWQVRZUEVfQllURVM7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9FTlVNOgotICAgICAgcmV0dXJuIEpBVkFUWVBFX0VOVU07Ci0KLSAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9NRVNTQUdFOgotICAgICAgcmV0dXJuIEpBVkFUWVBFX01FU1NBR0U7Ci0KLSAgICAvLyBObyBk
ZWZhdWx0IGJlY2F1c2Ugd2Ugd2FudCB0aGUgY29tcGlsZXIgdG8gY29tcGxhaW4gaWYgYW55IG5l
dwotICAgIC8vIHR5cGVzIGFyZSBhZGRlZC4KLSAgfQotCi0gIEdPT0dMRV9MT0coRkFUQUwpIDw8
ICJDYW4ndCBnZXQgaGVyZS4iOwotICByZXR1cm4gSkFWQVRZUEVfSU5UOwotfQotCi1zdHJpbmcg
UHJpbWl0aXZlVHlwZU5hbWUoSmF2YVR5cGUgdHlwZSkgewotICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIEpBVkFUWVBFX0lOVCAgICA6IHJldHVybiAiaW50IjsKLSAgICBjYXNlIEpBVkFUWVBF
X0xPTkcgICA6IHJldHVybiAibG9uZyI7Ci0gICAgY2FzZSBKQVZBVFlQRV9GTE9BVCAgOiByZXR1
cm4gImZsb2F0IjsKLSAgICBjYXNlIEpBVkFUWVBFX0RPVUJMRSA6IHJldHVybiAiZG91YmxlIjsK
LSAgICBjYXNlIEpBVkFUWVBFX0JPT0xFQU46IHJldHVybiAiYm9vbGVhbiI7Ci0gICAgY2FzZSBK
QVZBVFlQRV9TVFJJTkcgOiByZXR1cm4gImphdmEubGFuZy5TdHJpbmciOwotICAgIGNhc2UgSkFW
QVRZUEVfQllURVMgIDogcmV0dXJuICJieXRlW10iOwotICAgIGNhc2UgSkFWQVRZUEVfRU5VTSAg
IDogcmV0dXJuICJpbnQiOwotICAgIGNhc2UgSkFWQVRZUEVfTUVTU0FHRTogcmV0dXJuICIiOwot
Ci0gICAgLy8gTm8gZGVmYXVsdCBiZWNhdXNlIHdlIHdhbnQgdGhlIGNvbXBpbGVyIHRvIGNvbXBs
YWluIGlmIGFueSBuZXcKLSAgICAvLyBKYXZhVHlwZXMgYXJlIGFkZGVkLgotICB9Ci0KLSAgR09P
R0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJldHVybiAiIjsKLX0KLQot
c3RyaW5nIEJveGVkUHJpbWl0aXZlVHlwZU5hbWUoSmF2YVR5cGUgdHlwZSkgewotICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICBjYXNlIEpBVkFUWVBFX0lOVCAgICA6IHJldHVybiAiamF2YS5sYW5nLklu
dGVnZXIiOwotICAgIGNhc2UgSkFWQVRZUEVfTE9ORyAgIDogcmV0dXJuICJqYXZhLmxhbmcuTG9u
ZyI7Ci0gICAgY2FzZSBKQVZBVFlQRV9GTE9BVCAgOiByZXR1cm4gImphdmEubGFuZy5GbG9hdCI7
Ci0gICAgY2FzZSBKQVZBVFlQRV9ET1VCTEUgOiByZXR1cm4gImphdmEubGFuZy5Eb3VibGUiOwot
ICAgIGNhc2UgSkFWQVRZUEVfQk9PTEVBTjogcmV0dXJuICJqYXZhLmxhbmcuQm9vbGVhbiI7Ci0g
ICAgY2FzZSBKQVZBVFlQRV9TVFJJTkcgOiByZXR1cm4gImphdmEubGFuZy5TdHJpbmciOwotICAg
IGNhc2UgSkFWQVRZUEVfQllURVMgIDogcmV0dXJuICJieXRlW10iOwotICAgIGNhc2UgSkFWQVRZ
UEVfRU5VTSAgIDogcmV0dXJuICJqYXZhLmxhbmcuSW50ZWdlciI7Ci0gICAgY2FzZSBKQVZBVFlQ
RV9NRVNTQUdFOiByZXR1cm4gIiI7Ci0KLSAgICAvLyBObyBkZWZhdWx0IGJlY2F1c2Ugd2Ugd2Fu
dCB0aGUgY29tcGlsZXIgdG8gY29tcGxhaW4gaWYgYW55IG5ldwotICAgIC8vIEphdmFUeXBlcyBh
cmUgYWRkZWQuCi0gIH0KLQotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUu
IjsKLSAgcmV0dXJuICIiOwotfQotCi1zdHJpbmcgRW1wdHlBcnJheU5hbWUoY29uc3QgUGFyYW1z
JiBwYXJhbXMsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgc3dpdGNoIChHZXRK
YXZhVHlwZShmaWVsZCkpIHsKLSAgICBjYXNlIEpBVkFUWVBFX0lOVCAgICA6IHJldHVybiAiY29t
Lmdvb2dsZS5wcm90b2J1Zi5uYW5vLldpcmVGb3JtYXROYW5vLkVNUFRZX0lOVF9BUlJBWSI7Ci0g
ICAgY2FzZSBKQVZBVFlQRV9MT05HICAgOiByZXR1cm4gImNvbS5nb29nbGUucHJvdG9idWYubmFu
by5XaXJlRm9ybWF0TmFuby5FTVBUWV9MT05HX0FSUkFZIjsKLSAgICBjYXNlIEpBVkFUWVBFX0ZM
T0FUICA6IHJldHVybiAiY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLldpcmVGb3JtYXROYW5vLkVN
UFRZX0ZMT0FUX0FSUkFZIjsKLSAgICBjYXNlIEpBVkFUWVBFX0RPVUJMRSA6IHJldHVybiAiY29t
Lmdvb2dsZS5wcm90b2J1Zi5uYW5vLldpcmVGb3JtYXROYW5vLkVNUFRZX0RPVUJMRV9BUlJBWSI7
Ci0gICAgY2FzZSBKQVZBVFlQRV9CT09MRUFOOiByZXR1cm4gImNvbS5nb29nbGUucHJvdG9idWYu
bmFuby5XaXJlRm9ybWF0TmFuby5FTVBUWV9CT09MRUFOX0FSUkFZIjsKLSAgICBjYXNlIEpBVkFU
WVBFX1NUUklORyA6IHJldHVybiAiY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLldpcmVGb3JtYXRO
YW5vLkVNUFRZX1NUUklOR19BUlJBWSI7Ci0gICAgY2FzZSBKQVZBVFlQRV9CWVRFUyAgOiByZXR1
cm4gImNvbS5nb29nbGUucHJvdG9idWYubmFuby5XaXJlRm9ybWF0TmFuby5FTVBUWV9CWVRFU19B
UlJBWSI7Ci0gICAgY2FzZSBKQVZBVFlQRV9FTlVNICAgOiByZXR1cm4gImNvbS5nb29nbGUucHJv
dG9idWYubmFuby5XaXJlRm9ybWF0TmFuby5FTVBUWV9JTlRfQVJSQVkiOwotICAgIGNhc2UgSkFW
QVRZUEVfTUVTU0FHRTogcmV0dXJuIENsYXNzTmFtZShwYXJhbXMsIGZpZWxkLT5tZXNzYWdlX3R5
cGUoKSkgKyAiLkVNUFRZX0FSUkFZIjsKLQotICAgIC8vIE5vIGRlZmF1bHQgYmVjYXVzZSB3ZSB3
YW50IHRoZSBjb21waWxlciB0byBjb21wbGFpbiBpZiBhbnkgbmV3Ci0gICAgLy8gSmF2YVR5cGVz
IGFyZSBhZGRlZC4KLSAgfQotCi0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4ndCBnZXQgaGVy
ZS4iOwotICByZXR1cm4gIiI7Ci19Ci0KLXN0cmluZyBEZWZhdWx0VmFsdWUoY29uc3QgUGFyYW1z
JiBwYXJhbXMsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgaWYgKGZpZWxkLT5s
YWJlbCgpID09IEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfUkVQRUFURUQpIHsKLSAgICByZXR1cm4g
RW1wdHlBcnJheU5hbWUocGFyYW1zLCBmaWVsZCk7Ci0gIH0KLQotICBpZiAocGFyYW1zLnVzZV9y
ZWZlcmVuY2VfdHlwZXNfZm9yX3ByaW1pdGl2ZXMoKSkgewotICAgIGlmIChwYXJhbXMucmVmdHlw
ZXNfcHJpbWl0aXZlX2VudW1zKCkKLSAgICAgICAgICAmJiBmaWVsZC0+Y3BwX3R5cGUoKSA9PSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTSkgewotICAgICAgcmV0dXJuICJJbnRlZ2VyLk1J
Tl9WQUxVRSI7Ci0gICAgfQotICAgIHJldHVybiAibnVsbCI7Ci0gIH0KLQotICAvLyBTd2l0Y2gg
b24gY3BwX3R5cGUgc2luY2Ugd2UgbmVlZCB0byBrbm93IHdoaWNoIGRlZmF1bHRfdmFsdWVfKiBt
ZXRob2QKLSAgLy8gb2YgRmllbGREZXNjcmlwdG9yIHRvIGNhbGwuCi0gIHN3aXRjaCAoZmllbGQt
PmNwcF90eXBlKCkpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQzMjoK
LSAgICAgIHJldHVybiBTaW1wbGVJdG9hKGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2ludDMyKCkpOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQzMjoKLSAgICAgIC8vIE5lZWQg
dG8gcHJpbnQgYXMgYSBzaWduZWQgaW50IHNpbmNlIEphdmEgaGFzIG5vIHVuc2lnbmVkLgotICAg
ICAgcmV0dXJuIFNpbXBsZUl0b2Eoc3RhdGljX2Nhc3Q8aW50MzI+KGZpZWxkLT5kZWZhdWx0X3Zh
bHVlX3VpbnQzMigpKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UNjQ6
Ci0gICAgICByZXR1cm4gU2ltcGxlSXRvYShmaWVsZC0+ZGVmYXVsdF92YWx1ZV9pbnQ2NCgpKSAr
ICJMIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UNjQ6Ci0gICAgICBy
ZXR1cm4gU2ltcGxlSXRvYShzdGF0aWNfY2FzdDxpbnQ2ND4oZmllbGQtPmRlZmF1bHRfdmFsdWVf
dWludDY0KCkpKSArCi0gICAgICAgICAgICAgIkwiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpDUFBUWVBFX0RPVUJMRTogewotICAgICAgZG91YmxlIHZhbHVlID0gZmllbGQtPmRlZmF1bHRf
dmFsdWVfZG91YmxlKCk7Ci0gICAgICBpZiAodmFsdWUgPT0gbnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKSkgewotICAgICAgICByZXR1cm4gIkRvdWJsZS5QT1NJVElWRV9JTkZJTklU
WSI7Ci0gICAgICB9IGVsc2UgaWYgKHZhbHVlID09IC1udW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpKSB7Ci0gICAgICAgIHJldHVybiAiRG91YmxlLk5FR0FUSVZFX0lORklOSVRZIjsK
LSAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuICJEb3Vi
bGUuTmFOIjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBTaW1wbGVEdG9hKHZhbHVl
KSArICJEIjsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfRkxPQVQ6IHsKLSAgICAgIGZsb2F0IHZhbHVlID0gZmllbGQtPmRlZmF1bHRfdmFsdWVfZmxv
YXQoKTsKLSAgICAgIGlmICh2YWx1ZSA9PSBudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5
KCkpIHsKLSAgICAgICAgcmV0dXJuICJGbG9hdC5QT1NJVElWRV9JTkZJTklUWSI7Ci0gICAgICB9
IGVsc2UgaWYgKHZhbHVlID09IC1udW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpIHsK
LSAgICAgICAgcmV0dXJuICJGbG9hdC5ORUdBVElWRV9JTkZJTklUWSI7Ci0gICAgICB9IGVsc2Ug
aWYgKHZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAiRmxvYXQuTmFOIjsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGdG9hKHZhbHVlKSArICJGIjsKLSAgICAg
IH0KLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICAg
IHJldHVybiBmaWVsZC0+ZGVmYXVsdF92YWx1ZV9ib29sKCkgPyAidHJ1ZSIgOiAiZmFsc2UiOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzoKLSAgICAgIGlmICghZmll
bGQtPmRlZmF1bHRfdmFsdWVfc3RyaW5nKCkuZW1wdHkoKSkgewotICAgICAgICAvLyBQb2ludCBp
dCB0byB0aGUgc3RhdGljIGZpbmFsIGluIHRoZSBnZW5lcmF0ZWQgY29kZS4KLSAgICAgICAgcmV0
dXJuIEZpZWxkRGVmYXVsdENvbnN0YW50TmFtZShmaWVsZCk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMpIHsK
LSAgICAgICAgICByZXR1cm4gImNvbS5nb29nbGUucHJvdG9idWYubmFuby5XaXJlRm9ybWF0TmFu
by5FTVBUWV9CWVRFUyI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuICJcIlwi
IjsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfRU5VTToKLSAgICAgIHJldHVybiBDbGFzc05hbWUocGFyYW1zLCBmaWVsZC0+ZW51bV90eXBl
KCkpICsgIi4iICsKLSAgICAgICAgICAgICBSZW5hbWVKYXZhS2V5d29yZHMoZmllbGQtPmRlZmF1
bHRfdmFsdWVfZW51bSgpLT5uYW1lKCkpOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfTUVTU0FHRToKLSAgICAgIHJldHVybiAibnVsbCI7Ci0KLSAgICAvLyBObyBkZWZhdWx0
IGJlY2F1c2Ugd2Ugd2FudCB0aGUgY29tcGlsZXIgdG8gY29tcGxhaW4gaWYgYW55IG5ldwotICAg
IC8vIHR5cGVzIGFyZSBhZGRlZC4KLSAgfQotCi0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4n
dCBnZXQgaGVyZS4iOwotICByZXR1cm4gIiI7Ci19Ci0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGtC
aXRNYXNrc1tdID0gewotICAiMHgwMDAwMDAwMSIsCi0gICIweDAwMDAwMDAyIiwKLSAgIjB4MDAw
MDAwMDQiLAotICAiMHgwMDAwMDAwOCIsCi0gICIweDAwMDAwMDEwIiwKLSAgIjB4MDAwMDAwMjAi
LAotICAiMHgwMDAwMDA0MCIsCi0gICIweDAwMDAwMDgwIiwKLQotICAiMHgwMDAwMDEwMCIsCi0g
ICIweDAwMDAwMjAwIiwKLSAgIjB4MDAwMDA0MDAiLAotICAiMHgwMDAwMDgwMCIsCi0gICIweDAw
MDAxMDAwIiwKLSAgIjB4MDAwMDIwMDAiLAotICAiMHgwMDAwNDAwMCIsCi0gICIweDAwMDA4MDAw
IiwKLQotICAiMHgwMDAxMDAwMCIsCi0gICIweDAwMDIwMDAwIiwKLSAgIjB4MDAwNDAwMDAiLAot
ICAiMHgwMDA4MDAwMCIsCi0gICIweDAwMTAwMDAwIiwKLSAgIjB4MDAyMDAwMDAiLAotICAiMHgw
MDQwMDAwMCIsCi0gICIweDAwODAwMDAwIiwKLQotICAiMHgwMTAwMDAwMCIsCi0gICIweDAyMDAw
MDAwIiwKLSAgIjB4MDQwMDAwMDAiLAotICAiMHgwODAwMDAwMCIsCi0gICIweDEwMDAwMDAwIiwK
LSAgIjB4MjAwMDAwMDAiLAotICAiMHg0MDAwMDAwMCIsCi0gICIweDgwMDAwMDAwIiwKLX07Ci0K
LXN0cmluZyBHZXRCaXRGaWVsZE5hbWUoaW50IGluZGV4KSB7Ci0gIHN0cmluZyB2YXJfbmFtZSA9
ICJiaXRGaWVsZCI7Ci0gIHZhcl9uYW1lICs9IFNpbXBsZUl0b2EoaW5kZXgpOwotICB2YXJfbmFt
ZSArPSAiXyI7Ci0gIHJldHVybiB2YXJfbmFtZTsKLX0KLQotc3RyaW5nIEdldEJpdEZpZWxkTmFt
ZUZvckJpdChpbnQgYml0X2luZGV4KSB7Ci0gIHJldHVybiBHZXRCaXRGaWVsZE5hbWUoYml0X2lu
ZGV4IC8gMzIpOwotfQotCi1zdHJpbmcgR2VuZXJhdGVHZXRCaXQoaW50IGJpdF9pbmRleCkgewot
ICBzdHJpbmcgdmFyX25hbWUgPSBHZXRCaXRGaWVsZE5hbWVGb3JCaXQoYml0X2luZGV4KTsKLSAg
aW50IGJpdF9pbl92YXJfaW5kZXggPSBiaXRfaW5kZXggJSAzMjsKLQotICBzdHJpbmcgbWFzayA9
IGtCaXRNYXNrc1tiaXRfaW5fdmFyX2luZGV4XTsKLSAgc3RyaW5nIHJlc3VsdCA9ICIoKCIgKyB2
YXJfbmFtZSArICIgJiAiICsgbWFzayArICIpICE9IDApIjsKLSAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RyaW5nIEdlbmVyYXRlU2V0Qml0KGludCBiaXRfaW5kZXgpIHsKLSAgc3RyaW5nIHZhcl9u
YW1lID0gR2V0Qml0RmllbGROYW1lRm9yQml0KGJpdF9pbmRleCk7Ci0gIGludCBiaXRfaW5fdmFy
X2luZGV4ID0gYml0X2luZGV4ICUgMzI7Ci0KLSAgc3RyaW5nIG1hc2sgPSBrQml0TWFza3NbYml0
X2luX3Zhcl9pbmRleF07Ci0gIHN0cmluZyByZXN1bHQgPSB2YXJfbmFtZSArICIgfD0gIiArIG1h
c2s7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0cmluZyBHZW5lcmF0ZUNsZWFyQml0KGludCBi
aXRfaW5kZXgpIHsKLSAgc3RyaW5nIHZhcl9uYW1lID0gR2V0Qml0RmllbGROYW1lRm9yQml0KGJp
dF9pbmRleCk7Ci0gIGludCBiaXRfaW5fdmFyX2luZGV4ID0gYml0X2luZGV4ICUgMzI7Ci0KLSAg
c3RyaW5nIG1hc2sgPSBrQml0TWFza3NbYml0X2luX3Zhcl9pbmRleF07Ci0gIHN0cmluZyByZXN1
bHQgPSB2YXJfbmFtZSArICIgPSAoIiArIHZhcl9uYW1lICsgIiAmIH4iICsgbWFzayArICIpIjsK
LSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RyaW5nIEdlbmVyYXRlRGlmZmVyZW50Qml0KGludCBi
aXRfaW5kZXgpIHsKLSAgc3RyaW5nIHZhcl9uYW1lID0gR2V0Qml0RmllbGROYW1lRm9yQml0KGJp
dF9pbmRleCk7Ci0gIGludCBiaXRfaW5fdmFyX2luZGV4ID0gYml0X2luZGV4ICUgMzI7Ci0KLSAg
c3RyaW5nIG1hc2sgPSBrQml0TWFza3NbYml0X2luX3Zhcl9pbmRleF07Ci0gIHN0cmluZyByZXN1
bHQgPSAiKCgiICsgdmFyX25hbWUgKyAiICYgIiArIG1hc2sKLSAgICAgICsgIikgIT0gKG90aGVy
LiIgKyB2YXJfbmFtZSArICIgJiAiICsgbWFzayArICIpKSI7Ci0gIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXZvaWQgU2V0Qml0T3BlcmF0aW9uVmFyaWFibGVzKGNvbnN0IHN0cmluZyBuYW1lLAotICAg
IGludCBiaXRJbmRleCwgbWFwPHN0cmluZywgc3RyaW5nPiogdmFyaWFibGVzKSB7Ci0gICgqdmFy
aWFibGVzKVsiZ2V0XyIgKyBuYW1lXSA9IEdlbmVyYXRlR2V0Qml0KGJpdEluZGV4KTsKLSAgKCp2
YXJpYWJsZXMpWyJzZXRfIiArIG5hbWVdID0gR2VuZXJhdGVTZXRCaXQoYml0SW5kZXgpOwotICAo
KnZhcmlhYmxlcylbImNsZWFyXyIgKyBuYW1lXSA9IEdlbmVyYXRlQ2xlYXJCaXQoYml0SW5kZXgp
OwotICAoKnZhcmlhYmxlcylbImRpZmZlcmVudF8iICsgbmFtZV0gPSBHZW5lcmF0ZURpZmZlcmVu
dEJpdChiaXRJbmRleCk7Ci19Ci0KLWJvb2wgSGFzTWFwRmllbGQoY29uc3QgRGVzY3JpcHRvciog
ZGVzY3JpcHRvcikgewotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPmZpZWxkX2Nv
dW50KCk7ICsraSkgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlw
dG9yLT5maWVsZChpKTsKLSAgICBpZiAoZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6
OlRZUEVfTUVTU0FHRSAmJgotICAgICAgICBJc01hcEVudHJ5KGZpZWxkLT5tZXNzYWdlX3R5cGUo
KSkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhbmFubwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19oZWxwZXJz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9faGVscGVy
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTRjODVhZWUzNjYyM2VhYmQ3NWM1
MTdiYjczYzRlYWVhMWVlZmJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19o
ZWxwZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHA6Ly9jb2RlLmdvb2ds
ZS5jb20vcC9wcm90b2J1Zi8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8g
IEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5
IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RP
QlVGX0NPTVBJTEVSX0pBVkFOQU5PX0hFTFBFUlNfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JV
Rl9DT01QSUxFUl9KQVZBTkFOT19IRUxQRVJTX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wYXJhbXMu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2lvL3ByaW50ZXIuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhbmFubyB7Ci0KLS8vIENvbW1v
bmx5LXVzZWQgc2VwYXJhdG9yIGNvbW1lbnRzLiAgVGhpY2sgaXMgYSBsaW5lIG9mICc9JywgdGhp
biBpcyBhIGxpbmUKLS8vIG9mICctJy4KLWV4dGVybiBjb25zdCBjaGFyIGtUaGlja1NlcGFyYXRv
cltdOwotZXh0ZXJuIGNvbnN0IGNoYXIga1RoaW5TZXBhcmF0b3JbXTsKLQotLy8gQ29udmVydHMg
dGhlIGZpZWxkJ3MgbmFtZSB0byBjYW1lbC1jYXNlLCBlLmcuICJmb29fYmFyX2JheiIgYmVjb21l
cwotLy8gImZvb0JhckJheiIgb3IgIkZvb0JhckJheiIsIHJlc3BlY3RpdmVseS4KLXN0cmluZyBV
bmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpOwotc3Ry
aW5nIFVuZGVyc2NvcmVzVG9DYW1lbENhc2UoY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZik7
Ci1zdHJpbmcgVW5kZXJzY29yZXNUb0NhcGl0YWxpemVkQ2FtZWxDYXNlKGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGQpOwotc3RyaW5nIFVuZGVyc2NvcmVzVG9DYXBpdGFsaXplZENhbWVsQ2Fz
ZShjb25zdCBPbmVvZkRlc2NyaXB0b3IqIG9uZW9mKTsKLQotLy8gQXBwZW5kcyBhbiAiXyIgdG8g
dGhlIGVuZCBvZiBhIGZpZWxkIHdoZXJlIHRoZSBuYW1lIGlzIGEgcmVzZXJ2ZWQgamF2YQotLy8g
a2V5d29yZC4gIEZvciBleGFtcGxlIGludDMyIHB1YmxpYyA9IDEgd2lsbCBnZW5lcmF0ZSBpbnQg
cHVibGljXy4KLXN0cmluZyBSZW5hbWVKYXZhS2V5d29yZHMoY29uc3Qgc3RyaW5nJiBpbnB1dCk7
Ci0KLS8vIFNpbWlsYXIsIGJ1dCBmb3IgbWV0aG9kIG5hbWVzLiAgKFR5cGljYWxseSwgdGhpcyBt
ZXJlbHkgaGFzIHRoZSBlZmZlY3QKLS8vIG9mIGxvd2VyLWNhc2luZyB0aGUgZmlyc3QgbGV0dGVy
IG9mIHRoZSBuYW1lLikKLXN0cmluZyBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGNvbnN0IE1ldGhv
ZERlc2NyaXB0b3IqIG1ldGhvZCk7Ci0KLS8vIFN0cmlwcyAiLnByb3RvIiBvciAiLnByb3RvZGV2
ZWwiIGZyb20gdGhlIGVuZCBvZiBhIGZpbGVuYW1lLgotc3RyaW5nIFN0cmlwUHJvdG8oY29uc3Qg
c3RyaW5nJiBmaWxlbmFtZSk7Ci0KLS8vIEdldHMgdGhlIHVucXVhbGlmaWVkIGNsYXNzIG5hbWUg
Zm9yIHRoZSBmaWxlLiAgRWFjaCAucHJvdG8gZmlsZSBiZWNvbWVzIGEKLS8vIHNpbmdsZSBKYXZh
IGNsYXNzLCB3aXRoIGFsbCBpdHMgY29udGVudHMgbmVzdGVkIGluIHRoYXQgY2xhc3MuCi1zdHJp
bmcgRmlsZUNsYXNzTmFtZShjb25zdCBQYXJhbXMmIHBhcmFtcywgY29uc3QgRmlsZURlc2NyaXB0
b3IqIGZpbGUpOwotCi0vLyBSZXR1cm5zIHRoZSBmaWxlJ3MgSmF2YSBwYWNrYWdlIG5hbWUuCi1z
dHJpbmcgRmlsZUphdmFQYWNrYWdlKGNvbnN0IFBhcmFtcyYgcGFyYW1zLCBjb25zdCBGaWxlRGVz
Y3JpcHRvciogZmlsZSk7Ci0KLS8vIFJldHVybnMgd2hldGhlciB0aGUgSmF2YSBvdXRlciBjbGFz
cyBpcyBuZWVkZWQsIGkuZS4gd2hldGhlciB0aGUgb3B0aW9uCi0vLyBqYXZhX211bHRpcGxlX2Zp
bGVzIGlzIGZhbHNlLCBvciB0aGUgcHJvdG8gZmlsZSBjb250YWlucyBhbnkgZmlsZS1zY29wZQot
Ly8gZW51bXMvZXh0ZW5zaW9ucy4KLWJvb2wgSXNPdXRlckNsYXNzTmVlZGVkKGNvbnN0IFBhcmFt
cyYgcGFyYW1zLCBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSk7Ci0KLS8vIENvbnZlcnRzIHRo
ZSBnaXZlbiBzaW1wbGUgbmFtZSBvZiBhIHByb3RvIGVudGl0eSB0byBpdHMgZnVsbHktcXVhbGlm
aWVkIG5hbWUKLS8vIGluIHRoZSBKYXZhIG5hbWVzcGFjZSwgZ2l2ZW4gdGhhdCBpdCBpcyBpbiB0
aGUgZ2l2ZW4gZmlsZSBlbmNsb3NlZCBpbiB0aGUKLS8vIGdpdmVuIHBhcmVudCBtZXNzYWdlIChv
ciBOVUxMIGZvciBmaWxlLXNjb3BlIGVudGl0aWVzKS4gV2hldGhlciB0aGUgZmlsZSdzCi0vLyBv
dXRlciBjbGFzcyBuYW1lIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuIHZhbHVlIGRl
cGVuZHMgb24gZmFjdG9ycwotLy8gaW5mZXJyYWJsZSBmcm9tIHRoZSBnaXZlbiBhcmd1bWVudHMs
IGluY2x1ZGluZyBpc19jbGFzcyB3aGljaCBpbmRpY2F0ZXMKLS8vIHdoZXRoZXIgdGhlIGVudGl0
eSB0cmFuc2xhdGVzIHRvIGEgSmF2YSBjbGFzcy4KLXN0cmluZyBUb0phdmFOYW1lKGNvbnN0IFBh
cmFtcyYgcGFyYW1zLCBjb25zdCBzdHJpbmcmIG5hbWUsIGJvb2wgaXNfY2xhc3MsCi0gICAgY29u
c3QgRGVzY3JpcHRvciogcGFyZW50LCBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSk7Ci0KLS8v
IFRoZXNlIHJldHVybiB0aGUgZnVsbHktcXVhbGlmaWVkIGNsYXNzIG5hbWUgY29ycmVzcG9uZGlu
ZyB0byB0aGUgZ2l2ZW4KLS8vIGRlc2NyaXB0b3IuCi1pbmxpbmUgc3RyaW5nIENsYXNzTmFtZShj
b25zdCBQYXJhbXMmIHBhcmFtcywgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBy
ZXR1cm4gVG9KYXZhTmFtZShwYXJhbXMsIGRlc2NyaXB0b3ItPm5hbWUoKSwgdHJ1ZSwKLSAgICAg
ICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+Y29udGFpbmluZ190eXBlKCksIGRlc2NyaXB0b3It
PmZpbGUoKSk7Ci19Ci1zdHJpbmcgQ2xhc3NOYW1lKGNvbnN0IFBhcmFtcyYgcGFyYW1zLCBjb25z
dCBFbnVtRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci1pbmxpbmUgc3RyaW5nIENsYXNzTmFtZShj
b25zdCBQYXJhbXMmIHBhcmFtcywKLSAgICBjb25zdCBTZXJ2aWNlRGVzY3JpcHRvciogZGVzY3Jp
cHRvcikgewotICByZXR1cm4gVG9KYXZhTmFtZShwYXJhbXMsIGRlc2NyaXB0b3ItPm5hbWUoKSwg
dHJ1ZSwgTlVMTCwgZGVzY3JpcHRvci0+ZmlsZSgpKTsKLX0KLWlubGluZSBzdHJpbmcgRXh0ZW5z
aW9uSWRlbnRpZmllck5hbWUoY29uc3QgUGFyYW1zJiBwYXJhbXMsCi0gICAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVybiBUb0phdmFOYW1lKHBhcmFtcywgZGVz
Y3JpcHRvci0+bmFtZSgpLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+
ZXh0ZW5zaW9uX3Njb3BlKCksIGRlc2NyaXB0b3ItPmZpbGUoKSk7Ci19Ci1zdHJpbmcgQ2xhc3NO
YW1lKGNvbnN0IFBhcmFtcyYgcGFyYW1zLCBjb25zdCBGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRv
cik7Ci0KLS8vIEdldCB0aGUgdW5xdWFsaWZpZWQgbmFtZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZv
ciBhIGZpZWxkJ3MgZmllbGQKLS8vIG51bWJlciBjb25zdGFudC4KLXN0cmluZyBGaWVsZENvbnN0
YW50TmFtZShjb25zdCBGaWVsZERlc2NyaXB0b3IgKmZpZWxkKTsKLQotc3RyaW5nIEZpZWxkRGVm
YXVsdENvbnN0YW50TmFtZShjb25zdCBGaWVsZERlc2NyaXB0b3IgKmZpZWxkKTsKLQotLy8gUHJp
bnQgdGhlIGZpZWxkJ3MgcHJvdG8tc3ludGF4IGRlZmluaXRpb24gYXMgYSBjb21tZW50Lgotdm9p
ZCBQcmludEZpZWxkQ29tbWVudChpbzo6UHJpbnRlciogcHJpbnRlciwgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCk7Ci0KLWVudW0gSmF2YVR5cGUgewotICBKQVZBVFlQRV9JTlQsCi0gIEpB
VkFUWVBFX0xPTkcsCi0gIEpBVkFUWVBFX0ZMT0FULAotICBKQVZBVFlQRV9ET1VCTEUsCi0gIEpB
VkFUWVBFX0JPT0xFQU4sCi0gIEpBVkFUWVBFX1NUUklORywKLSAgSkFWQVRZUEVfQllURVMsCi0g
IEpBVkFUWVBFX0VOVU0sCi0gIEpBVkFUWVBFX01FU1NBR0UKLX07Ci0KLUphdmFUeXBlIEdldEph
dmFUeXBlKEZpZWxkRGVzY3JpcHRvcjo6VHlwZSBmaWVsZF90eXBlKTsKLQotaW5saW5lIEphdmFU
eXBlIEdldEphdmFUeXBlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgcmV0dXJu
IEdldEphdmFUeXBlKGZpZWxkLT50eXBlKCkpOwotfQotCi1zdHJpbmcgUHJpbWl0aXZlVHlwZU5h
bWUoSmF2YVR5cGUgdHlwZSk7Ci0KLS8vIEdldCB0aGUgZnVsbHktcXVhbGlmaWVkIGNsYXNzIG5h
bWUgZm9yIGEgYm94ZWQgcHJpbWl0aXZlIHR5cGUsIGUuZy4KLS8vICJqYXZhLmxhbmcuSW50ZWdl
ciIgZm9yIEpBVkFUWVBFX0lOVC4gIFJldHVybnMgTlVMTCBmb3IgZW51bSBhbmQgbWVzc2FnZQot
Ly8gdHlwZXMuCi1zdHJpbmcgQm94ZWRQcmltaXRpdmVUeXBlTmFtZShKYXZhVHlwZSB0eXBlKTsK
LQotc3RyaW5nIEVtcHR5QXJyYXlOYW1lKGNvbnN0IFBhcmFtcyYgcGFyYW1zLCBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkKTsKLQotc3RyaW5nIERlZmF1bHRWYWx1ZShjb25zdCBQYXJhbXMm
IHBhcmFtcywgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLQotLy8gTWV0aG9kcyBm
b3Igc2hhcmVkIGJpdGZpZWxkcy4KLQotLy8gR2V0cyB0aGUgbmFtZSBvZiB0aGUgc2hhcmVkIGJp
dGZpZWxkIGZvciB0aGUgZ2l2ZW4gZmllbGQgaW5kZXguCi1zdHJpbmcgR2V0Qml0RmllbGROYW1l
KGludCBpbmRleCk7Ci0KLS8vIEdldHMgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBiaXRmaWVsZCBm
b3IgdGhlIGdpdmVuIGJpdCBpbmRleC4KLS8vIEVmZmVjdGl2ZWx5LCBHZXRCaXRGaWVsZE5hbWUo
Yml0X2luZGV4IC8gMzIpCi1zdHJpbmcgR2V0Qml0RmllbGROYW1lRm9yQml0KGludCBiaXRfaW5k
ZXgpOwotCi0vLyBHZW5lcmF0ZXMgdGhlIGphdmEgY29kZSBmb3IgdGhlIGV4cHJlc3Npb24gdGhh
dCByZXR1cm5zIHdoZXRoZXIgdGhlIGJpdCBhdAotLy8gdGhlIGdpdmVuIGJpdCBpbmRleCBpcyBz
ZXQuCi0vLyBFeGFtcGxlOiAiKChiaXRGaWVsZDFfICYgMHgwNDAwMDAwMCkgIT0gMCkiCi1zdHJp
bmcgR2VuZXJhdGVHZXRCaXQoaW50IGJpdF9pbmRleCk7Ci0KLS8vIEdlbmVyYXRlcyB0aGUgamF2
YSBjb2RlIGZvciB0aGUgZXhwcmVzc2lvbiB0aGF0IHNldHMgdGhlIGJpdCBhdCB0aGUgZ2l2ZW4K
LS8vIGJpdCBpbmRleC4KLS8vIEV4YW1wbGU6ICJiaXRGaWVsZDFfIHw9IDB4MDQwMDAwMDAiCi1z
dHJpbmcgR2VuZXJhdGVTZXRCaXQoaW50IGJpdF9pbmRleCk7Ci0KLS8vIEdlbmVyYXRlcyB0aGUg
amF2YSBjb2RlIGZvciB0aGUgZXhwcmVzc2lvbiB0aGF0IGNsZWFycyB0aGUgYml0IGF0IHRoZSBn
aXZlbgotLy8gYml0IGluZGV4LgotLy8gRXhhbXBsZTogImJpdEZpZWxkMV8gPSAoYml0RmllbGQx
XyAmIH4weDA0MDAwMDAwKSIKLXN0cmluZyBHZW5lcmF0ZUNsZWFyQml0KGludCBiaXRfaW5kZXgp
OwotCi0vLyBHZW5lcmF0ZXMgdGhlIGphdmEgY29kZSBmb3IgdGhlIGV4cHJlc3Npb24gdGhhdCBy
ZXR1cm5zIHdoZXRoZXIgdGhlIGJpdCBhdAotLy8gdGhlIGdpdmVuIGJpdCBpbmRleCBjb250YWlu
cyBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSBjdXJyZW50IG9iamVjdCBhbmQKLS8vIGFub3RoZXIg
b2JqZWN0IGFjY2Vzc2libGUgdmlhIHRoZSB2YXJpYWJsZSAnb3RoZXInLgotLy8gRXhhbXBsZTog
IigoYml0RmllbGQxXyAmIDB4MDQwMDAwMDApICE9IChvdGhlci5iaXRGaWVsZDFfICYgMHgwNDAw
MDAwMCkpIgotc3RyaW5nIEdlbmVyYXRlRGlmZmVyZW50Qml0KGludCBiaXRfaW5kZXgpOwotCi0v
LyBTZXRzIHRoZSAnZ2V0XyonLCAnc2V0XyonLCAnY2xlYXJfKicgYW5kICdkaWZmZXJlbnRfKicg
dmFyaWFibGVzLCB3aGVyZSAqIGlzCi0vLyB0aGUgZ2l2ZW4gbmFtZSBvZiB0aGUgYml0LCB0byB0
aGUgYXBwcm9wcmlhdGUgSmF2YSBleHByZXNzaW9ucyBmb3IgdGhlIGdpdmVuCi0vLyBiaXQgaW5k
ZXguCi12b2lkIFNldEJpdE9wZXJhdGlvblZhcmlhYmxlcyhjb25zdCBzdHJpbmcgbmFtZSwKLSAg
ICBpbnQgYml0SW5kZXgsIG1hcDxzdHJpbmcsIHN0cmluZz4qIHZhcmlhYmxlcyk7Ci0KLWlubGlu
ZSBib29sIElzTWFwRW50cnkoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICAvLyBU
T0RPKGxpdWppc2kpOiBBZGQgYW4gb3B0aW9uIHRvIHR1cm4gb24gbWFwcyBmb3IgcHJvdG8yIHN5
bnRheCBhcyB3ZWxsLgotICByZXR1cm4gZGVzY3JpcHRvci0+b3B0aW9ucygpLm1hcF9lbnRyeSgp
ICYmCi0gICAgICBkZXNjcmlwdG9yLT5maWxlKCktPnN5bnRheCgpID09IEZpbGVEZXNjcmlwdG9y
OjpTWU5UQVhfUFJPVE8zOwotfQotCi1ib29sIEhhc01hcEZpZWxkKGNvbnN0IERlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IpOwotCi19ICAvLyBuYW1lc3BhY2UgamF2YW5hbm8KLX0gIC8vIG5hbWVzcGFj
ZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX0hFTFBF
UlNfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8v
amF2YW5hbm9fbWFwX2ZpZWxkLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFu
YW5vL2phdmFuYW5vX21hcF9maWVsZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODNiMmIwY2U4ZjgzNmMyZmRjZjhmNDY2Mjc1MjZlMWEyMGQzNzUxMi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvamF2YW5hbm8vamF2YW5hbm9fbWFwX2ZpZWxkLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTg2
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fbWFwX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2hlbHBlcnMuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3Jt
YXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotCi1uYW1l
c3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIg
ewotbmFtZXNwYWNlIGphdmFuYW5vIHsKLQotbmFtZXNwYWNlIHsKLQotc3RyaW5nIFR5cGVOYW1l
KGNvbnN0IFBhcmFtcyYgcGFyYW1zLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAg
ICAgICAgICAgICAgIGJvb2wgYm94ZWQpIHsKLSAgSmF2YVR5cGUgamF2YV90eXBlID0gR2V0SmF2
YVR5cGUoZmllbGQpOwotICBzd2l0Y2ggKGphdmFfdHlwZSkgewotICAgIGNhc2UgSkFWQVRZUEVf
TUVTU0FHRToKLSAgICAgIHJldHVybiBDbGFzc05hbWUocGFyYW1zLCBmaWVsZC0+bWVzc2FnZV90
eXBlKCkpOwotICAgIGNhc2UgSkFWQVRZUEVfSU5UOgotICAgIGNhc2UgSkFWQVRZUEVfTE9ORzoK
LSAgICBjYXNlIEpBVkFUWVBFX0ZMT0FUOgotICAgIGNhc2UgSkFWQVRZUEVfRE9VQkxFOgotICAg
IGNhc2UgSkFWQVRZUEVfQk9PTEVBTjoKLSAgICBjYXNlIEpBVkFUWVBFX1NUUklORzoKLSAgICBj
YXNlIEpBVkFUWVBFX0JZVEVTOgotICAgIGNhc2UgSkFWQVRZUEVfRU5VTToKLSAgICAgIGlmIChi
b3hlZCkgewotICAgICAgICByZXR1cm4gQm94ZWRQcmltaXRpdmVUeXBlTmFtZShqYXZhX3R5cGUp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIFByaW1pdGl2ZVR5cGVOYW1lKGphdmFf
dHlwZSk7Ci0gICAgICB9Ci0gICAgLy8gTm8gZGVmYXVsdCBiZWNhdXNlIHdlIHdhbnQgdGhlIGNv
bXBpbGVyIHRvIGNvbXBsYWluIGlmIGFueSBuZXcgSmF2YVR5cGVzCi0gICAgLy8gYXJlIGFkZGVk
Li4KLSAgfQotCi0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJzaG91bGQgbm90IHJlYWNoIGhlcmUu
IjsKLSAgcmV0dXJuICIiOwotfQotCi1jb25zdCBGaWVsZERlc2NyaXB0b3IqIEtleUZpZWxkKGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBHT09HTEVfQ0hFQ0tfRVEoRmll
bGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0UsIGRlc2NyaXB0b3ItPnR5cGUoKSk7Ci0gIGNvbnN0
IERlc2NyaXB0b3IqIG1lc3NhZ2UgPSBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKTsKLSAgR09P
R0xFX0NIRUNLKG1lc3NhZ2UtPm9wdGlvbnMoKS5tYXBfZW50cnkoKSk7Ci0gIHJldHVybiBtZXNz
YWdlLT5GaW5kRmllbGRCeU5hbWUoImtleSIpOwotfQotCi1jb25zdCBGaWVsZERlc2NyaXB0b3Iq
IFZhbHVlRmllbGQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIEdPT0dM
RV9DSEVDS19FUShGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSwgZGVzY3JpcHRvci0+dHlw
ZSgpKTsKLSAgY29uc3QgRGVzY3JpcHRvciogbWVzc2FnZSA9IGRlc2NyaXB0b3ItPm1lc3NhZ2Vf
dHlwZSgpOwotICBHT09HTEVfQ0hFQ0sobWVzc2FnZS0+b3B0aW9ucygpLm1hcF9lbnRyeSgpKTsK
LSAgcmV0dXJuIG1lc3NhZ2UtPkZpbmRGaWVsZEJ5TmFtZSgidmFsdWUiKTsKLX0KLQotdm9pZCBT
ZXRNYXBWYXJpYWJsZXMoY29uc3QgUGFyYW1zJiBwYXJhbXMsCi0gICAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLCBtYXA8c3RyaW5nLCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXkgPSBLZXlGaWVsZChkZXNjcmlwdG9yKTsKLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiB2YWx1ZSA9IFZhbHVlRmllbGQoZGVzY3JpcHRvcik7Ci0gICgq
dmFyaWFibGVzKVsibmFtZSJdID0KLSAgICBSZW5hbWVKYXZhS2V5d29yZHMoVW5kZXJzY29yZXNU
b0NhbWVsQ2FzZShkZXNjcmlwdG9yKSk7Ci0gICgqdmFyaWFibGVzKVsibnVtYmVyIl0gPSBTaW1w
bGVJdG9hKGRlc2NyaXB0b3ItPm51bWJlcigpKTsKLSAgKCp2YXJpYWJsZXMpWyJrZXlfdHlwZSJd
ID0gVHlwZU5hbWUocGFyYW1zLCBrZXksIGZhbHNlKTsKLSAgKCp2YXJpYWJsZXMpWyJib3hlZF9r
ZXlfdHlwZSJdID0gVHlwZU5hbWUocGFyYW1zLGtleSwgdHJ1ZSk7Ci0gICgqdmFyaWFibGVzKVsi
a2V5X2Rlc2NfdHlwZSJdID0KLSAgICAgICJUWVBFXyIgKyBUb1VwcGVyKEZpZWxkRGVzY3JpcHRv
cjo6VHlwZU5hbWUoa2V5LT50eXBlKCkpKTsKLSAgKCp2YXJpYWJsZXMpWyJrZXlfdGFnIl0gPSBT
aW1wbGVJdG9hKGludGVybmFsOjpXaXJlRm9ybWF0OjpNYWtlVGFnKGtleSkpOwotICAoKnZhcmlh
YmxlcylbInZhbHVlX3R5cGUiXSA9IFR5cGVOYW1lKHBhcmFtcywgdmFsdWUsIGZhbHNlKTsKLSAg
KCp2YXJpYWJsZXMpWyJib3hlZF92YWx1ZV90eXBlIl0gPSBUeXBlTmFtZShwYXJhbXMsIHZhbHVl
LCB0cnVlKTsKLSAgKCp2YXJpYWJsZXMpWyJ2YWx1ZV9kZXNjX3R5cGUiXSA9Ci0gICAgICAiVFlQ
RV8iICsgVG9VcHBlcihGaWVsZERlc2NyaXB0b3I6OlR5cGVOYW1lKHZhbHVlLT50eXBlKCkpKTsK
LSAgKCp2YXJpYWJsZXMpWyJ2YWx1ZV90YWciXSA9IFNpbXBsZUl0b2EoaW50ZXJuYWw6OldpcmVG
b3JtYXQ6Ok1ha2VUYWcodmFsdWUpKTsKLSAgKCp2YXJpYWJsZXMpWyJ0eXBlX3BhcmFtZXRlcnMi
XSA9Ci0gICAgICAoKnZhcmlhYmxlcylbImJveGVkX2tleV90eXBlIl0gKyAiLCAiICsgKCp2YXJp
YWJsZXMpWyJib3hlZF92YWx1ZV90eXBlIl07Ci0gICgqdmFyaWFibGVzKVsidmFsdWVfZGVmYXVs
dCJdID0KLSAgICAgIHZhbHVlLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NB
R0UKLSAgICAgICAgICA/ICJuZXcgIiArICgqdmFyaWFibGVzKVsidmFsdWVfdHlwZSJdICsgIigp
IgotICAgICAgICAgIDogIm51bGwiOwotfQotfSAgLy8gbmFtZXNwYWNlCi0KLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLU1hcEZpZWxkR2VuZXJhdG9yOjpNYXBGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUGFyYW1zJiBwYXJhbXMpCi0gICAgOiBGaWVsZEdlbmVyYXRvcihwYXJhbXMpLCBkZXNj
cmlwdG9yXyhkZXNjcmlwdG9yKSB7Ci0gIFNldE1hcFZhcmlhYmxlcyhwYXJhbXMsIGRlc2NyaXB0
b3IsICZ2YXJpYWJsZXNfKTsKLX0KLQotTWFwRmllbGRHZW5lcmF0b3I6On5NYXBGaWVsZEdlbmVy
YXRvcigpIHt9Ci0KLXZvaWQgTWFwRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJzKGlv
OjpQcmludGVyKiBwcmludGVyLCBib29sIC8qIHVudXNlZCBsYXp5X2luaXQgKi8pIGNvbnN0IHsK
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHVibGljIGphdmEudXRpbC5NYXA8
JHR5cGVfcGFyYW1ldGVycyQ+ICRuYW1lJDtcbiIpOwotfQotCi12b2lkIE1hcEZpZWxkR2VuZXJh
dG9yOjoKLUdlbmVyYXRlQ2xlYXJDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRuYW1lJCA9IG51bGw7XG4iKTsKLX0K
LQotdm9pZCBNYXBGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
InRoaXMuJG5hbWUkID0gY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLkludGVybmFsTmFuby5tZXJn
ZU1hcEVudHJ5KFxuIgotICAgICIgIGlucHV0LCB0aGlzLiRuYW1lJCwgbWFwRmFjdG9yeSxcbiIK
LSAgICAiICBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uSW50ZXJuYWxOYW5vLiRrZXlfZGVzY190
eXBlJCxcbiIKLSAgICAiICBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uSW50ZXJuYWxOYW5vLiR2
YWx1ZV9kZXNjX3R5cGUkLFxuIgotICAgICIgICR2YWx1ZV9kZWZhdWx0JCxcbiIKLSAgICAiICAk
a2V5X3RhZyQsICR2YWx1ZV90YWckKTtcbiIKLSAgICAiXG4iKTsKLX0KLQotdm9pZCBNYXBGaWVs
ZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICh0aGlz
LiRuYW1lJCAhPSBudWxsKSB7XG4iCi0gICAgIiAgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLklu
dGVybmFsTmFuby5zZXJpYWxpemVNYXBGaWVsZChcbiIKLSAgICAiICAgIG91dHB1dCwgdGhpcy4k
bmFtZSQsICRudW1iZXIkLFxuIgotICAgICIgIGNvbS5nb29nbGUucHJvdG9idWYubmFuby5JbnRl
cm5hbE5hbm8uJGtleV9kZXNjX3R5cGUkLFxuIgotICAgICIgIGNvbS5nb29nbGUucHJvdG9idWYu
bmFuby5JbnRlcm5hbE5hbm8uJHZhbHVlX2Rlc2NfdHlwZSQpO1xuIgotICAgICJ9XG4iKTsKLX0K
LQotdm9pZCBNYXBGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICJpZiAodGhpcy4kbmFtZSQgIT0gbnVsbCkge1xuIgotICAgICIgIHNpemUgKz0gY29t
Lmdvb2dsZS5wcm90b2J1Zi5uYW5vLkludGVybmFsTmFuby5jb21wdXRlTWFwRmllbGRTaXplKFxu
IgotICAgICIgICAgdGhpcy4kbmFtZSQsICRudW1iZXIkLFxuIgotICAgICIgIGNvbS5nb29nbGUu
cHJvdG9idWYubmFuby5JbnRlcm5hbE5hbm8uJGtleV9kZXNjX3R5cGUkLFxuIgotICAgICIgIGNv
bS5nb29nbGUucHJvdG9idWYubmFuby5JbnRlcm5hbE5hbm8uJHZhbHVlX2Rlc2NfdHlwZSQpO1xu
IgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBNYXBGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUVx
dWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAiaWYgKCFjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uSW50ZXJuYWxO
YW5vLmVxdWFscyhcbiIKLSAgICAiICB0aGlzLiRuYW1lJCwgb3RoZXIuJG5hbWUkKSkge1xuIgot
ICAgICIgIHJldHVybiBmYWxzZTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgTWFwRmllbGRH
ZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNoQ29kZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicmVzdWx0ID0gMzEgKiBy
ZXN1bHQgK1xuIgotICAgICIgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLkludGVybmFsTmFu
by5oYXNoQ29kZSh0aGlzLiRuYW1lJCk7XG4iKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGphdmFu
YW5vCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1Zgot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21hcF9maWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21hcF9maWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjMDFiZGUzODE1MDE3ZGE3MDE1YTE3ZDBiMmFjMzEyMjEzNjY5MmJkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tYXBfZmllbGQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDcwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09P
R0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX01BUF9GSUVMRF9IX18KLSNkZWZpbmUgR09P
R0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX01BUF9GSUVMRF9IX18KLQotI2luY2x1ZGUg
PG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWVsZC5oPgotCi1uYW1l
c3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIg
ewotbmFtZXNwYWNlIGphdmFuYW5vIHsKLQotY2xhc3MgTWFwRmllbGRHZW5lcmF0b3IgOiBwdWJs
aWMgRmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgTWFwRmllbGRHZW5lcmF0
b3IoCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGNvbnN0IFBhcmFt
cyYgcGFyYW1zKTsKLSAgfk1hcEZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBG
aWVsZEdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
dm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgbGF6eV9pbml0
KSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVIYXNoQ29kZUNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yXzsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotCi0gIEdP
T0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhNYXBGaWVsZEdlbmVyYXRvcik7Ci19Owot
Ci19ICAvLyBuYW1lc3BhY2UgamF2YW5hbm8KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAg
Ly8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8v
IEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBTkFOT19NQVBfRklFTERfSF9fCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fbWVzc2Fn
ZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tZXNz
YWdlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDFkYTVhZTMzMDFlMWRhNTc0
NTNhNWY5OGYzZDA0M2ZiMWM0ZjM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFu
b19tZXNzYWdlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjc2ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwOi8vY29kZS5n
b29nbGUuY29tL3AvcHJvdG9idWYvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkK
LS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNh
bmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2UuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZW51bS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19l
eHRlbnNpb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8v
amF2YW5hbm9faGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1
dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0
b3IucGIuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFt
ZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhbmFubyB7Ci0KLXVzaW5nIGludGVybmFs
OjpXaXJlRm9ybWF0OwotdXNpbmcgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOwotCi1uYW1lc3Bh
Y2UgewotCi1zdHJ1Y3QgRmllbGRPcmRlcmluZ0J5TnVtYmVyIHsKLSAgaW5saW5lIGJvb2wgb3Bl
cmF0b3IoKShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBiKSBjb25zdCB7Ci0gICAgcmV0dXJuIGEtPm51bWJl
cigpIDwgYi0+bnVtYmVyKCk7Ci0gIH0KLX07Ci0KLS8vIFNvcnQgdGhlIGZpZWxkcyBvZiB0aGUg
Z2l2ZW4gRGVzY3JpcHRvciBieSBudW1iZXIgaW50byBhIG5ld1tdJ2QgYXJyYXkKLS8vIGFuZCBy
ZXR1cm4gaXQuCi1jb25zdCBGaWVsZERlc2NyaXB0b3IqKiBTb3J0RmllbGRzQnlOdW1iZXIoY29u
c3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqKiBm
aWVsZHMgPQotICAgIG5ldyBjb25zdCBGaWVsZERlc2NyaXB0b3IqW2Rlc2NyaXB0b3ItPmZpZWxk
X2NvdW50KCldOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPmZpZWxkX2NvdW50
KCk7IGkrKykgewotICAgIGZpZWxkc1tpXSA9IGRlc2NyaXB0b3ItPmZpZWxkKGkpOwotICB9Ci0g
IHNvcnQoZmllbGRzLCBmaWVsZHMgKyBkZXNjcmlwdG9yLT5maWVsZF9jb3VudCgpLAotICAgICAg
IEZpZWxkT3JkZXJpbmdCeU51bWJlcigpKTsKLSAgcmV0dXJuIGZpZWxkczsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotTWVzc2FnZUdlbmVyYXRvcjo6TWVzc2FnZUdl
bmVyYXRvcihjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBQYXJhbXMmIHBhcmFt
cykKLSAgOiBwYXJhbXNfKHBhcmFtcyksCi0gICAgZGVzY3JpcHRvcl8oZGVzY3JpcHRvciksCi0g
ICAgZmllbGRfZ2VuZXJhdG9yc18oZGVzY3JpcHRvciwgcGFyYW1zKSB7Ci19Ci0KLU1lc3NhZ2VH
ZW5lcmF0b3I6On5NZXNzYWdlR2VuZXJhdG9yKCkge30KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9y
OjpHZW5lcmF0ZVN0YXRpY1ZhcmlhYmxlcyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBH
ZW5lcmF0ZSBzdGF0aWMgbWVtYmVycyBmb3IgYWxsIG5lc3RlZCB0eXBlcy4KLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+bmVzdGVkX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAg
Ly8gVE9ETyhrZW50b24pOiAgUmV1c2UgTWVzc2FnZUdlbmVyYXRvciBvYmplY3RzPwotICAgIGlm
IChJc01hcEVudHJ5KGRlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZShpKSkpIGNvbnRpbnVlOwotICAg
IE1lc3NhZ2VHZW5lcmF0b3IoZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpLCBwYXJhbXNfKQot
ICAgICAgLkdlbmVyYXRlU3RhdGljVmFyaWFibGVzKHByaW50ZXIpOwotICB9Ci19Ci0KLXZvaWQg
TWVzc2FnZUdlbmVyYXRvcjo6R2VuZXJhdGVTdGF0aWNWYXJpYWJsZUluaXRpYWxpemVycygKLSAg
ICBpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBHZW5lcmF0ZSBzdGF0aWMgbWVtYmVyIGlu
aXRpYWxpemVycyBmb3IgYWxsIG5lc3RlZCB0eXBlcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBk
ZXNjcmlwdG9yXy0+bmVzdGVkX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAvLyBUT0RPKGtlbnRv
bik6ICBSZXVzZSBNZXNzYWdlR2VuZXJhdG9yIG9iamVjdHM/Ci0gICAgaWYgKElzTWFwRW50cnko
ZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpKSkgY29udGludWU7Ci0gICAgTWVzc2FnZUdlbmVy
YXRvcihkZXNjcmlwdG9yXy0+bmVzdGVkX3R5cGUoaSksIHBhcmFtc18pCi0gICAgICAuR2VuZXJh
dGVTdGF0aWNWYXJpYWJsZUluaXRpYWxpemVycyhwcmludGVyKTsKLSAgfQotfQotCi12b2lkIE1l
c3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGlmICgh
cGFyYW1zXy5zdG9yZV91bmtub3duX2ZpZWxkcygpICYmCi0gICAgICAoZGVzY3JpcHRvcl8tPmV4
dGVuc2lvbl9jb3VudCgpICE9IDAgfHwgZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9yYW5nZV9jb3Vu
dCgpICE9IDApKSB7Ci0gICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkV4dGVuc2lvbnMgYXJlIG9u
bHkgc3VwcG9ydGVkIGluIE5BTk9fUlVOVElNRSBpZiB0aGUgIgotICAgICAgICAiJ3N0b3JlX3Vu
a25vd25fZmllbGRzJyBnZW5lcmF0b3Igb3B0aW9uIGlzICd0cnVlJ1xuIjsKLSAgfQotCi0gIGNv
bnN0IHN0cmluZyYgZmlsZV9uYW1lID0gZGVzY3JpcHRvcl8tPmZpbGUoKS0+bmFtZSgpOwotICBi
b29sIGlzX293bl9maWxlID0KLSAgICBwYXJhbXNfLmphdmFfbXVsdGlwbGVfZmlsZXMoZmlsZV9u
YW1lKQotICAgICAgJiYgZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfdHlwZSgpID09IE5VTEw7Ci0K
LSAgaWYgKGlzX293bl9maWxlKSB7Ci0gICAgLy8gTm90ZTogY29uc3RhbnRzIChmcm9tIGVudW1z
IGFuZCBmaWVsZHMgcmVxdWlyaW5nIHN0b3JlZCBkZWZhdWx0cywgZW1pdHRlZCBpbiB0aGUgbG9v
cCBiZWxvdykKLSAgICAvLyBtYXkgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyBjb25zdGFudHMgaW4g
dGhlIG5lc3RlZCBjbGFzc2VzLiBUaGlzIGNhdXNlcyBKYXZhIHdhcm5pbmdzLCBidXQKLSAgICAv
LyBpcyBub3QgZmF0YWwsIHNvIHdlIHN1cHByZXNzIHRob3NlIHdhcm5pbmdzIGhlcmUgaW4gdGhl
IHRvcC1tb3N0IGNsYXNzIGRlY2xhcmF0aW9uLgotICAgIHByaW50ZXItPlByaW50KAotICAgICAg
IlxuIgotICAgICAgIkBTdXBwcmVzc1dhcm5pbmdzKFwiaGlkaW5nXCIpXG4iCi0gICAgICAicHVi
bGljIGZpbmFsIGNsYXNzICRjbGFzc25hbWUkIGV4dGVuZHNcbiIsCi0gICAgICAiY2xhc3NuYW1l
IiwgZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAiXG4iCi0gICAgICAicHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyAkY2xhc3NuYW1l
JCBleHRlbmRzXG4iLAotICAgICAgImNsYXNzbmFtZSIsIGRlc2NyaXB0b3JfLT5uYW1lKCkpOwot
ICB9Ci0gIGlmIChwYXJhbXNfLnN0b3JlX3Vua25vd25fZmllbGRzKCkgJiYgcGFyYW1zXy5wYXJj
ZWxhYmxlX21lc3NhZ2VzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICIgICAgY29t
Lmdvb2dsZS5wcm90b2J1Zi5uYW5vLmFuZHJvaWQuUGFyY2VsYWJsZUV4dGVuZGFibGVNZXNzYWdl
TmFubzwkY2xhc3NuYW1lJD4iLAotICAgICAgImNsYXNzbmFtZSIsIGRlc2NyaXB0b3JfLT5uYW1l
KCkpOwotICB9IGVsc2UgaWYgKHBhcmFtc18uc3RvcmVfdW5rbm93bl9maWVsZHMoKSkgewotICAg
IHByaW50ZXItPlByaW50KAotICAgICAgIiAgICBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uRXh0
ZW5kYWJsZU1lc3NhZ2VOYW5vPCRjbGFzc25hbWUkPiIsCi0gICAgICAiY2xhc3NuYW1lIiwgZGVz
Y3JpcHRvcl8tPm5hbWUoKSk7Ci0gIH0gZWxzZSBpZiAocGFyYW1zXy5wYXJjZWxhYmxlX21lc3Nh
Z2VzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICIgICAgY29tLmdvb2dsZS5wcm90
b2J1Zi5uYW5vLmFuZHJvaWQuUGFyY2VsYWJsZU1lc3NhZ2VOYW5vIik7Ci0gIH0gZWxzZSB7Ci0g
ICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICAgIGNvbS5nb29nbGUucHJvdG9idWYubmFuby5N
ZXNzYWdlTmFubyIpOwotICB9Ci0gIGlmIChwYXJhbXNfLmdlbmVyYXRlX2Nsb25lKCkpIHsKLSAg
ICBwcmludGVyLT5QcmludCgiIGltcGxlbWVudHMgamF2YS5sYW5nLkNsb25lYWJsZSB7XG4iKTsK
LSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCgiIHtcbiIpOwotICB9Ci0gIHByaW50ZXIt
PkluZGVudCgpOwotCi0gIGlmIChwYXJhbXNfLnBhcmNlbGFibGVfbWVzc2FnZXMoKSkgewotICAg
IHByaW50ZXItPlByaW50KAotICAgICAgIlxuIgotICAgICAgIi8vIFVzZWQgYnkgUGFyY2VsYWJs
ZVxuIgotICAgICAgIkBTdXBwcmVzc1dhcm5pbmdzKHtcInVudXNlZFwifSlcbiIKLSAgICAgICJw
dWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPCRjbGFzc25h
bWUkPiBDUkVBVE9SID1cbiIKLSAgICAgICIgICAgbmV3IGNvbS5nb29nbGUucHJvdG9idWYubmFu
by5hbmRyb2lkLlBhcmNlbGFibGVNZXNzYWdlTmFub0NyZWF0b3I8XG4iCi0gICAgICAiICAgICAg
ICAkY2xhc3NuYW1lJD4oJGNsYXNzbmFtZSQuY2xhc3MpO1xuIiwKLSAgICAgICJjbGFzc25hbWUi
LCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLSAgfQotCi0gIC8vIE5lc3RlZCB0eXBlcyBhbmQgZXh0
ZW5zaW9ucwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5leHRlbnNpb25fY291
bnQoKTsgaSsrKSB7Ci0gICAgRXh0ZW5zaW9uR2VuZXJhdG9yKGRlc2NyaXB0b3JfLT5leHRlbnNp
b24oaSksIHBhcmFtc18pLkdlbmVyYXRlKHByaW50ZXIpOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZW51bV90eXBlX2NvdW50KCk7IGkrKykgewotICAgIEVudW1H
ZW5lcmF0b3IoZGVzY3JpcHRvcl8tPmVudW1fdHlwZShpKSwgcGFyYW1zXykuR2VuZXJhdGUocHJp
bnRlcik7Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5uZXN0ZWRf
dHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBpZiAoSXNNYXBFbnRyeShkZXNjcmlwdG9yXy0+bmVz
dGVkX3R5cGUoaSkpKSBjb250aW51ZTsKLSAgICBNZXNzYWdlR2VuZXJhdG9yKGRlc2NyaXB0b3Jf
LT5uZXN0ZWRfdHlwZShpKSwgcGFyYW1zXykuR2VuZXJhdGUocHJpbnRlcik7Ci0gIH0KLQotICAv
LyBvbmVvZgotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gIHZhcnNbIm1lc3NhZ2VfbmFt
ZSJdID0gZGVzY3JpcHRvcl8tPm5hbWUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlw
dG9yXy0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBPbmVvZkRlc2NyaXB0
b3IqIG9uZW9mX2Rlc2MgPSBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKTsKLSAgICB2YXJzWyJv
bmVvZl9uYW1lIl0gPSBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKG9uZW9mX2Rlc2MpOwotICAgIHZh
cnNbIm9uZW9mX2NhcGl0YWxpemVkX25hbWUiXSA9Ci0gICAgICAgIFVuZGVyc2NvcmVzVG9DYXBp
dGFsaXplZENhbWVsQ2FzZShvbmVvZl9kZXNjKTsKLSAgICB2YXJzWyJvbmVvZl9pbmRleCJdID0g
U2ltcGxlSXRvYShvbmVvZl9kZXNjLT5pbmRleCgpKTsKLSAgICAvLyBPbmVvZiBDb25zdGFudHMK
LSAgICBmb3IgKGludCBqID0gMDsgaiA8IG9uZW9mX2Rlc2MtPmZpZWxkX2NvdW50KCk7IGorKykg
ewotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IG9uZW9mX2Rlc2MtPmZpZWxk
KGopOwotICAgICAgdmFyc1sibnVtYmVyIl0gPSBTaW1wbGVJdG9hKGZpZWxkLT5udW1iZXIoKSk7
Ci0gICAgICB2YXJzWyJjYXBfZmllbGRfbmFtZSJdID0gVG9VcHBlcihmaWVsZC0+bmFtZSgpKTsK
LSAgICAgIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAgICAgICJwdWJsaWMgc3RhdGljIGZpbmFs
IGludCAkY2FwX2ZpZWxkX25hbWUkX0ZJRUxEX05VTUJFUiA9ICRudW1iZXIkO1xuIik7Ci0gICAg
fQotICAgIC8vIG9uZW9mQ2FzZV8gYW5kIG9uZW9mXwotICAgIHByaW50ZXItPlByaW50KHZhcnMs
Ci0gICAgICAicHJpdmF0ZSBpbnQgJG9uZW9mX25hbWUkQ2FzZV8gPSAwO1xuIgotICAgICAgInBy
aXZhdGUgamF2YS5sYW5nLk9iamVjdCAkb25lb2ZfbmFtZSRfO1xuIik7Ci0gICAgcHJpbnRlci0+
UHJpbnQodmFycywKLSAgICAgICJwdWJsaWMgaW50IGdldCRvbmVvZl9jYXBpdGFsaXplZF9uYW1l
JENhc2UoKSB7XG4iCi0gICAgICAiICByZXR1cm4gdGhpcy4kb25lb2ZfbmFtZSRDYXNlXztcbiIK
LSAgICAgICJ9XG4iKTsKLSAgICAvLyBPbmVvZiBjbGVhcgotICAgIHByaW50ZXItPlByaW50KHZh
cnMsCi0gICAgICAicHVibGljICRtZXNzYWdlX25hbWUkIGNsZWFyJG9uZW9mX2NhcGl0YWxpemVk
X25hbWUkKCkge1xuIgotICAgICAgIiAgdGhpcy4kb25lb2ZfbmFtZSRDYXNlXyA9IDA7XG4iCi0g
ICAgICAiICB0aGlzLiRvbmVvZl9uYW1lJF8gPSBudWxsO1xuIgotICAgICAgIiAgcmV0dXJuIHRo
aXM7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLQotICAvLyBMYXp5IGluaXRpYWxpemF0aW9uIG9m
IG90aGVyd2lzZSBzdGF0aWMgZmluYWwgZmllbGRzIGNhbiBoZWxwIHByZXZlbnQgdGhlCi0gIC8v
IGNsYXNzIGluaXRpYWxpemVyIGZyb20gYmVpbmcgZ2VuZXJhdGVkLiBXZSB3YW50IHRvIHByZXZl
bnQgaXQgYmVjYXVzZSBpdAotICAvLyBzdG9wcyBQcm9HdWFyZCBmcm9tIGlubGluaW5nIGFueSBt
ZXRob2RzIGluIHRoaXMgY2xhc3MgaW50byBjYWxsIHNpdGVzIGFuZAotICAvLyB0aGVyZWZvcmUg
cmVkdWNpbmcgdGhlIG1ldGhvZCBjb3VudC4gSG93ZXZlciwgZXh0ZW5zaW9ucyBhcmUgYmVzdCBr
ZXB0IGFzCi0gIC8vIHB1YmxpYyBzdGF0aWMgZmluYWwgZmllbGRzIHdpdGggaW5pdGlhbGl6ZXJz
LCBzbyB3aXRoIHRoZWlyIGV4aXN0ZW5jZSB3ZQotICAvLyB3b24ndCBib3RoZXIgd2l0aCBsYXp5
IGluaXRpYWxpemF0aW9uLgotICBib29sIGxhenlfaW5pdCA9IGRlc2NyaXB0b3JfLT5leHRlbnNp
b25fY291bnQoKSA9PSAwOwotCi0gIC8vIEVtcHR5IGFycmF5Ci0gIGlmIChsYXp5X2luaXQpIHsK
LSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJcbiIKLSAgICAgICJwcml2YXRlIHN0YXRpYyB2
b2xhdGlsZSAkY2xhc3NuYW1lJFtdIF9lbXB0eUFycmF5O1xuIgotICAgICAgInB1YmxpYyBzdGF0
aWMgJGNsYXNzbmFtZSRbXSBlbXB0eUFycmF5KCkge1xuIgotICAgICAgIiAgLy8gTGF6aWx5IGlu
aXRpYWxpemVzIHRoZSBlbXB0eSBhcnJheVxuIgotICAgICAgIiAgaWYgKF9lbXB0eUFycmF5ID09
IG51bGwpIHtcbiIKLSAgICAgICIgICAgc3luY2hyb25pemVkIChcbiIKLSAgICAgICIgICAgICAg
IGNvbS5nb29nbGUucHJvdG9idWYubmFuby5JbnRlcm5hbE5hbm8uTEFaWV9JTklUX0xPQ0spIHtc
biIKLSAgICAgICIgICAgICBpZiAoX2VtcHR5QXJyYXkgPT0gbnVsbCkge1xuIgotICAgICAgIiAg
ICAgICAgX2VtcHR5QXJyYXkgPSBuZXcgJGNsYXNzbmFtZSRbMF07XG4iCi0gICAgICAiICAgICAg
fVxuIgotICAgICAgIiAgICB9XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICByZXR1cm4gX2Vt
cHR5QXJyYXk7XG4iCi0gICAgICAifVxuIiwKLSAgICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9y
Xy0+bmFtZSgpKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJcbiIK
LSAgICAgICJwcml2YXRlIHN0YXRpYyBmaW5hbCAkY2xhc3NuYW1lJFtdIEVNUFRZX0FSUkFZID0g
e307XG4iCi0gICAgICAicHVibGljIHN0YXRpYyAkY2xhc3NuYW1lJFtdIGVtcHR5QXJyYXkoKSB7
XG4iCi0gICAgICAiICByZXR1cm4gRU1QVFlfQVJSQVk7XG4iCi0gICAgICAifVxuIiwKLSAgICAg
ICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLSAgfQotCi0gIC8vIEludGVnZXJz
IGZvciBiaXQgZmllbGRzCi0gIGludCB0b3RhbEludHMgPSAoZmllbGRfZ2VuZXJhdG9yc18udG90
YWxfYml0cygpICsgMzEpIC8gMzI7Ci0gIGlmICh0b3RhbEludHMgPiAwKSB7Ci0gICAgcHJpbnRl
ci0+UHJpbnQoIlxuIik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEludHM7IGkrKykg
ewotICAgICAgcHJpbnRlci0+UHJpbnQoInByaXZhdGUgaW50ICRiaXRfZmllbGRfbmFtZSQ7XG4i
LAotICAgICAgICAiYml0X2ZpZWxkX25hbWUiLCBHZXRCaXRGaWVsZE5hbWUoaSkpOwotICAgIH0K
LSAgfQotCi0gIC8vIEZpZWxkcyBhbmQgbWF5YmUgdGhlaXIgZGVmYXVsdCB2YWx1ZXMKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAg
cHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gICAgUHJpbnRGaWVsZENvbW1lbnQocHJpbnRlciwgZGVz
Y3JpcHRvcl8tPmZpZWxkKGkpKTsKLSAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZGVzY3JpcHRv
cl8tPmZpZWxkKGkpKS5HZW5lcmF0ZU1lbWJlcnMoCi0gICAgICAgIHByaW50ZXIsIGxhenlfaW5p
dCk7Ci0gIH0KLQotICAvLyBDb25zdHJ1Y3Rvciwgd2l0aCBsYXp5IGluaXQgY29kZSBpZiBuZWVk
ZWQKLSAgaWYgKGxhenlfaW5pdCAmJiBmaWVsZF9nZW5lcmF0b3JzXy5zYXZlZF9kZWZhdWx0c19u
ZWVkZWQoKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIlxuIgotICAgICAgInByaXZh
dGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gX2NsYXNzSW5pdGlhbGl6ZWQ7XG4iCi0gICAgICAi
XG4iCi0gICAgICAicHVibGljICRjbGFzc25hbWUkKCkge1xuIgotICAgICAgIiAgLy8gTGF6aWx5
IGluaXRpYWxpemVzIHRoZSBmaWVsZCBkZWZhdWx0c1xuIgotICAgICAgIiAgaWYgKCFfY2xhc3NJ
bml0aWFsaXplZCkge1xuIgotICAgICAgIiAgICBzeW5jaHJvbml6ZWQgKFxuIgotICAgICAgIiAg
ICAgICAgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLkludGVybmFsTmFuby5MQVpZX0lOSVRfTE9D
Sykge1xuIgotICAgICAgIiAgICAgIGlmICghX2NsYXNzSW5pdGlhbGl6ZWQpIHtcbiIsCi0gICAg
ICAiY2xhc3NuYW1lIiwgZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0gICAgcHJpbnRlci0+SW5kZW50
KCk7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAg
cHJpbnRlci0+SW5kZW50KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+
ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZGVzY3Jp
cHRvcl8tPmZpZWxkKGkpKQotICAgICAgICAgIC5HZW5lcmF0ZUluaXRTYXZlZERlZmF1bHRDb2Rl
KHByaW50ZXIpOwotICAgIH0KLSAgICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgcHJpbnRlci0+
T3V0ZGVudCgpOwotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICBwcmludGVyLT5PdXRkZW50
KCk7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICAgICAgICBfY2xhc3NJbml0aWFsaXpl
ZCA9IHRydWU7XG4iCi0gICAgICAiICAgICAgfVxuIgotICAgICAgIiAgICB9XG4iCi0gICAgICAi
ICB9XG4iKTsKLSAgICBpZiAocGFyYW1zXy5nZW5lcmF0ZV9jbGVhcigpKSB7Ci0gICAgICBwcmlu
dGVyLT5QcmludCgiICBjbGVhcigpO1xuIik7Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50KCJ9
XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICJcbiIKLSAgICAg
ICJwdWJsaWMgJGNsYXNzbmFtZSQoKSB7XG4iLAotICAgICAgImNsYXNzbmFtZSIsIGRlc2NyaXB0
b3JfLT5uYW1lKCkpOwotICAgIGlmIChwYXJhbXNfLmdlbmVyYXRlX2NsZWFyKCkpIHsKLSAgICAg
IHByaW50ZXItPlByaW50KCIgIGNsZWFyKCk7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJp
bnRlci0+SW5kZW50KCk7Ci0gICAgICBHZW5lcmF0ZUZpZWxkSW5pdGlhbGl6ZXJzKHByaW50ZXIp
OwotICAgICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIH0KLSAgICBwcmludGVyLT5QcmludCgi
fVxuIik7Ci0gIH0KLQotICAvLyBPdGhlciBtZXRob2RzIGluIHRoaXMgY2xhc3MKLQotICBHZW5l
cmF0ZUNsZWFyKHByaW50ZXIpOwotCi0gIGlmIChwYXJhbXNfLmdlbmVyYXRlX2Nsb25lKCkpIHsK
LSAgICBHZW5lcmF0ZUNsb25lKHByaW50ZXIpOwotICB9Ci0KLSAgaWYgKHBhcmFtc18uZ2VuZXJh
dGVfZXF1YWxzKCkpIHsKLSAgICBHZW5lcmF0ZUVxdWFscyhwcmludGVyKTsKLSAgICBHZW5lcmF0
ZUhhc2hDb2RlKHByaW50ZXIpOwotICB9Ci0KLSAgR2VuZXJhdGVNZXNzYWdlU2VyaWFsaXphdGlv
bk1ldGhvZHMocHJpbnRlcik7Ci0gIEdlbmVyYXRlTWVyZ2VGcm9tTWV0aG9kcyhwcmludGVyKTsK
LSAgR2VuZXJhdGVQYXJzZUZyb21NZXRob2RzKHByaW50ZXIpOwotCi0gIHByaW50ZXItPk91dGRl
bnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXZv
aWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lc3NhZ2VTZXJpYWxpemF0aW9uTWV0aG9k
cyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBSZWx5IG9uIHRoZSBwYXJlbnQgaW1wbGVt
ZW50YXRpb25zIG9mIHdyaXRlVG8oKSBhbmQgZ2V0U2VyaWFsaXplZFNpemUoKQotICAvLyBpZiB0
aGVyZSBhcmUgbm8gZmllbGRzIHRvIHNlcmlhbGl6ZSBpbiB0aGlzIG1lc3NhZ2UuCi0gIGlmIChk
ZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKSA9PSAwKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAg
c2NvcGVkX2FycmF5PGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IHNvcnRlZF9maWVsZHMoCi0gICAg
U29ydEZpZWxkc0J5TnVtYmVyKGRlc2NyaXB0b3JfKSk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgIlxuIgotICAgICJAT3ZlcnJpZGVcbiIKLSAgICAicHVibGljIHZvaWQgd3JpdGVUbyhjb20u
Z29vZ2xlLnByb3RvYnVmLm5hbm8uQ29kZWRPdXRwdXRCeXRlQnVmZmVyTmFubyBvdXRwdXQpXG4i
Ci0gICAgIiAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7XG4iKTsKLSAgcHJpbnRlci0+
SW5kZW50KCk7Ci0KLSAgLy8gT3V0cHV0IHRoZSBmaWVsZHMgaW4gc29ydGVkIG9yZGVyCi0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAg
IEdlbmVyYXRlU2VyaWFsaXplT25lRmllbGQocHJpbnRlciwgc29ydGVkX2ZpZWxkc1tpXSk7Ci0g
IH0KLQotICAvLyBUaGUgcGFyZW50IGltcGxlbWVudGF0aW9uIHdpbGwgd3JpdGUgYW55IHVua25v
d24gZmllbGRzIGlmIG5lY2Vzc2FyeS4KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInN1cGVyLndy
aXRlVG8ob3V0cHV0KTtcbiIpOwotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+
UHJpbnQoIn1cbiIpOwotCi0gIC8vIFRoZSBwYXJlbnQgaW1wbGVtZW50YXRpb24gd2lsbCBnZXQg
dGhlIHNlcmlhbGl6ZWQgc2l6ZSBmb3IgdW5rbm93bgotICAvLyBmaWVsZHMgaWYgbmVjZXNzYXJ5
LgotICBwcmludGVyLT5QcmludCgKLSAgICAiXG4iCi0gICAgIkBPdmVycmlkZVxuIgotICAgICJw
cm90ZWN0ZWQgaW50IGNvbXB1dGVTZXJpYWxpemVkU2l6ZSgpIHtcbiIKLSAgICAiICBpbnQgc2l6
ZSA9IHN1cGVyLmNvbXB1dGVTZXJpYWxpemVkU2l6ZSgpO1xuIik7Ci0gIHByaW50ZXItPkluZGVu
dCgpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7
IGkrKykgewotICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChzb3J0ZWRfZmllbGRzW2ldKS5HZW5l
cmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShwcmludGVyKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRl
bnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiAgcmV0dXJuIHNpemU7XG4iCi0gICAgIn1c
biIpOwotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlTWVyZ2VGcm9tTWV0aG9k
cyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBzY29wZWRfYXJyYXk8Y29uc3QgRmllbGREZXNj
cmlwdG9yKj4gc29ydGVkX2ZpZWxkcygKLSAgICBTb3J0RmllbGRzQnlOdW1iZXIoZGVzY3JpcHRv
cl8pKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiXG4iCi0gICAgIkBPdmVycmlkZVxuIgot
ICAgICJwdWJsaWMgJGNsYXNzbmFtZSQgbWVyZ2VGcm9tKFxuIgotICAgICIgICAgICAgIGNvbS5n
b29nbGUucHJvdG9idWYubmFuby5Db2RlZElucHV0Qnl0ZUJ1ZmZlck5hbm8gaW5wdXQpXG4iCi0g
ICAgIiAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7XG4iLAotICAgICJjbGFzc25hbWUi
LCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLQotICBwcmludGVyLT5JbmRlbnQoKTsKLSAgaWYgKEhh
c01hcEZpZWxkKGRlc2NyaXB0b3JfKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgImNv
bS5nb29nbGUucHJvdG9idWYubmFuby5NYXBGYWN0b3JpZXMuTWFwRmFjdG9yeSBtYXBGYWN0b3J5
ID1cbiIKLSAgICAgICIgIGNvbS5nb29nbGUucHJvdG9idWYubmFuby5NYXBGYWN0b3JpZXMuZ2V0
TWFwRmFjdG9yeSgpO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAid2hpbGUg
KHRydWUpIHtcbiIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBwcmludGVyLT5QcmludCgK
LSAgICAiaW50IHRhZyA9IGlucHV0LnJlYWRUYWcoKTtcbiIKLSAgICAic3dpdGNoICh0YWcpIHtc
biIpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBwcmludGVyLT5QcmludCgKLSAgICAiY2Fz
ZSAwOlxuIiAgICAgICAgICAvLyB6ZXJvIHNpZ25hbHMgRU9GIC8gbGltaXQgcmVhY2hlZAotICAg
ICIgIHJldHVybiB0aGlzO1xuIgotICAgICJkZWZhdWx0OiB7XG4iKTsKLQotICBwcmludGVyLT5J
bmRlbnQoKTsKLSAgaWYgKHBhcmFtc18uc3RvcmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHBy
aW50ZXItPlByaW50KAotICAgICAgICAiaWYgKCFzdG9yZVVua25vd25GaWVsZChpbnB1dCwgdGFn
KSkge1xuIgotICAgICAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAgICAgIn1cbiIpOwotICB9
IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiaWYgKCFjb20uZ29vZ2xlLnBy
b3RvYnVmLm5hbm8uV2lyZUZvcm1hdE5hbm8ucGFyc2VVbmtub3duRmllbGQoaW5wdXQsIHRhZykp
IHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIHRoaXM7XG4iICAgLy8gaXQncyBhbiBlbmRncm91cCB0
YWcKLSAgICAgICAgIn1cbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KCJicmVhaztcbiIpOwot
ICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KCJ9XG4iKTsKLQotICBmb3Ig
KGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gc29ydGVkX2ZpZWxkc1tpXTsKLSAgICB1aW50
MzIgdGFnID0gV2lyZUZvcm1hdExpdGU6Ok1ha2VUYWcoZmllbGQtPm51bWJlcigpLAotICAgICAg
V2lyZUZvcm1hdDo6V2lyZVR5cGVGb3JGaWVsZFR5cGUoZmllbGQtPnR5cGUoKSkpOwotCi0gICAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAiY2FzZSAkdGFnJDoge1xuIiwKLSAgICAgICJ0YWciLCBT
aW1wbGVJdG9hKHRhZykpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotCi0gICAgZmllbGRfZ2Vu
ZXJhdG9yc18uZ2V0KGZpZWxkKS5HZW5lcmF0ZU1lcmdpbmdDb2RlKHByaW50ZXIpOwotCi0gICAg
cHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIiAgYnJlYWs7
XG4iCi0gICAgICAifVxuIik7Ci0KLSAgICBpZiAoZmllbGQtPmlzX3BhY2thYmxlKCkpIHsKLSAg
ICAgIC8vIFRvIG1ha2UgcGFja2VkID0gdHJ1ZSB3aXJlIGNvbXBhdGlibGUsIHdlIGdlbmVyYXRl
IHBhcnNpbmcgY29kZSBmcm9tIGEKLSAgICAgIC8vIHBhY2tlZCB2ZXJzaW9uIG9mIHRoaXMgZmll
bGQgcmVnYXJkbGVzcyBvZiBmaWVsZC0+b3B0aW9ucygpLnBhY2tlZCgpLgotICAgICAgdWludDMy
IHBhY2tlZF90YWcgPSBXaXJlRm9ybWF0TGl0ZTo6TWFrZVRhZyhmaWVsZC0+bnVtYmVyKCksCi0g
ICAgICAgIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICAiY2FzZSAkdGFnJDoge1xuIiwKLSAgICAgICAgInRh
ZyIsIFNpbXBsZUl0b2EocGFja2VkX3RhZykpOwotICAgICAgcHJpbnRlci0+SW5kZW50KCk7Ci0K
LSAgICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChmaWVsZCkuR2VuZXJhdGVNZXJnaW5nQ29kZUZy
b21QYWNrZWQocHJpbnRlcik7Ci0KLSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgIHBy
aW50ZXItPlByaW50KAotICAgICAgICAiICBicmVhaztcbiIKLSAgICAgICAgIn1cbiIpOwotICAg
IH0KLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+T3V0ZGVudCgpOwot
ICBwcmludGVyLT5PdXRkZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICIgICAgfVxuIiAg
ICAgLy8gc3dpdGNoICh0YWcpCi0gICAgIiAgfVxuIiAgICAgICAvLyB3aGlsZSAodHJ1ZSkKLSAg
ICAifVxuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVBhcnNlRnJv
bU1ldGhvZHMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgLy8gTm90ZTogIFRoZXNlIGFyZSBz
ZXBhcmF0ZSBmcm9tIEdlbmVyYXRlTWVzc2FnZVNlcmlhbGl6YXRpb25NZXRob2RzKCkKLSAgLy8g
ICBiZWNhdXNlIHRoZXkgbmVlZCB0byBiZSBnZW5lcmF0ZWQgZXZlbiBmb3IgbWVzc2FnZXMgdGhh
dCBhcmUgb3B0aW1pemVkCi0gIC8vICAgZm9yIGNvZGUgc2l6ZS4KLSAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgIlxuIgotICAgICJwdWJsaWMgc3RhdGljICRjbGFzc25hbWUkIHBhcnNlRnJvbShieXRl
W10gZGF0YSlcbiIKLSAgICAiICAgIHRocm93cyBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uSW52
YWxpZFByb3RvY29sQnVmZmVyTmFub0V4Y2VwdGlvbiB7XG4iCi0gICAgIiAgcmV0dXJuIGNvbS5n
b29nbGUucHJvdG9idWYubmFuby5NZXNzYWdlTmFuby5tZXJnZUZyb20obmV3ICRjbGFzc25hbWUk
KCksIGRhdGEpO1xuIgotICAgICJ9XG4iCi0gICAgIlxuIgotICAgICJwdWJsaWMgc3RhdGljICRj
bGFzc25hbWUkIHBhcnNlRnJvbShcbiIKLSAgICAiICAgICAgICBjb20uZ29vZ2xlLnByb3RvYnVm
Lm5hbm8uQ29kZWRJbnB1dEJ5dGVCdWZmZXJOYW5vIGlucHV0KVxuIgotICAgICIgICAgdGhyb3dz
IGphdmEuaW8uSU9FeGNlcHRpb24ge1xuIgotICAgICIgIHJldHVybiBuZXcgJGNsYXNzbmFtZSQo
KS5tZXJnZUZyb20oaW5wdXQpO1xuIgotICAgICJ9XG4iLAotICAgICJjbGFzc25hbWUiLCBkZXNj
cmlwdG9yXy0+bmFtZSgpKTsKLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjpHZW5lcmF0ZVNl
cmlhbGl6ZU9uZUZpZWxkKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLCBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkKSB7Ci0gIGZpZWxkX2dlbmVyYXRvcnNfLmdldChmaWVsZCkuR2VuZXJh
dGVTZXJpYWxpemF0aW9uQ29kZShwcmludGVyKTsKLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9y
OjpHZW5lcmF0ZUNsZWFyKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGlmICghcGFyYW1zXy5n
ZW5lcmF0ZV9jbGVhcigpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIHByaW50ZXItPlByaW50KAot
ICAgICJcbiIKLSAgICAicHVibGljICRjbGFzc25hbWUkIGNsZWFyKCkge1xuIiwKLSAgICAiY2xh
c3NuYW1lIiwgZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0g
IEdlbmVyYXRlRmllbGRJbml0aWFsaXplcnMocHJpbnRlcik7Ci0KLSAgcHJpbnRlci0+T3V0ZGVu
dCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiICByZXR1cm4gdGhpcztcbiIKLSAgICAifVxu
Iik7Ci19Ci0KLXZvaWQgTWVzc2FnZUdlbmVyYXRvcjo6R2VuZXJhdGVGaWVsZEluaXRpYWxpemVy
cyhpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBDbGVhciBiaXQgZmllbGRzLgotICBpbnQg
dG90YWxJbnRzID0gKGZpZWxkX2dlbmVyYXRvcnNfLnRvdGFsX2JpdHMoKSArIDMxKSAvIDMyOwot
ICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsSW50czsgaSsrKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQoIiRiaXRfZmllbGRfbmFtZSQgPSAwO1xuIiwKLSAgICAgICJiaXRfZmllbGRfbmFtZSIsIEdl
dEJpdEZpZWxkTmFtZShpKSk7Ci0gIH0KLQotICAvLyBDYWxsIGNsZWFyIGZvciBhbGwgb2YgdGhl
IGZpZWxkcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQo
KTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3Jf
LT5maWVsZChpKTsKLSAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGQpLkdlbmVyYXRlQ2xl
YXJDb2RlKHByaW50ZXIpOwotICB9Ci0KLSAgLy8gQ2xlYXIgb25lb2ZzLgotICBmb3IgKGludCBp
ID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewotICAgIHBy
aW50ZXItPlByaW50KAotICAgICAgImNsZWFyJG9uZW9mX2NhcGl0YWxpemVkX25hbWUkKCk7XG4i
LAotICAgICAgIm9uZW9mX2NhcGl0YWxpemVkX25hbWUiLCBVbmRlcnNjb3Jlc1RvQ2FwaXRhbGl6
ZWRDYW1lbENhc2UoCi0gICAgICAgICAgZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2woaSkpKTsKLSAg
fQotCi0gIC8vIENsZWFyIHVua25vd24gZmllbGRzLgotICBpZiAocGFyYW1zXy5zdG9yZV91bmtu
b3duX2ZpZWxkcygpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoInVua25vd25GaWVsZERhdGEgPSBu
dWxsO1xuIik7Ci0gIH0KLSAgcHJpbnRlci0+UHJpbnQoImNhY2hlZFNpemUgPSAtMTtcbiIpOwot
fQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlQ2xvbmUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIkBPdmVycmlkZVxuIgotICAgICJwdWJs
aWMgJGNsYXNzbmFtZSQgY2xvbmUoKSB7XG4iLAotICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9y
Xy0+bmFtZSgpKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgIiRjbGFzc25hbWUkIGNsb25lZDtcbiIKLSAgICAidHJ5IHtcbiIKLSAgICAiICBjbG9uZWQg
PSAoJGNsYXNzbmFtZSQpIHN1cGVyLmNsb25lKCk7XG4iCi0gICAgIn0gY2F0Y2ggKGphdmEubGFu
Zy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7XG4iCi0gICAgIiAgdGhyb3cgbmV3IGph
dmEubGFuZy5Bc3NlcnRpb25FcnJvcihlKTtcbiIKLSAgICAifVxuIiwKLSAgICAiY2xhc3NuYW1l
IiwgZGVzY3JpcHRvcl8tPm5hbWUoKSk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlw
dG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGRl
c2NyaXB0b3JfLT5maWVsZChpKSkuR2VuZXJhdGVGaXhDbG9uZWRDb2RlKHByaW50ZXIpOwotICB9
Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiICByZXR1
cm4gY2xvbmVkO1xuIgotICAgICJ9XG4iCi0gICAgIlxuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZUdl
bmVyYXRvcjo6R2VuZXJhdGVFcXVhbHMoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgLy8gRG9u
J3Qgb3ZlcnJpZGUgaWYgdGhlcmUgYXJlIG5vIGZpZWxkcy4gV2UgY291bGQgZ2VuZXJhdGUgYW4K
LSAgLy8gZXF1YWxzIG1ldGhvZCB0aGF0IGNvbXBhcmVzIHR5cGVzLCBidXQgb2Z0ZW4gZW1wdHkg
bWVzc2FnZXMKLSAgLy8gYXJlIHVzZWQgYXMgbmFtZXNwYWNlcy4KLSAgaWYgKGRlc2NyaXB0b3Jf
LT5maWVsZF9jb3VudCgpID09IDAgJiYgIXBhcmFtc18uc3RvcmVfdW5rbm93bl9maWVsZHMoKSkg
ewotICAgIHJldHVybjsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICJcbiIKLSAgICAi
QE92ZXJyaWRlXG4iCi0gICAgInB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgbykge1xuIik7
Ci0gIHByaW50ZXItPkluZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAgICAiaWYgKG8gPT0g
dGhpcykge1xuIgotICAgICIgIHJldHVybiB0cnVlO1xuIgotICAgICJ9XG4iCi0gICAgImlmICgh
KG8gaW5zdGFuY2VvZiAkY2xhc3NuYW1lJCkpIHtcbiIKLSAgICAiICByZXR1cm4gZmFsc2U7XG4i
Ci0gICAgIn1cbiIKLSAgICAiJGNsYXNzbmFtZSQgb3RoZXIgPSAoJGNsYXNzbmFtZSQpIG87XG4i
LAotICAgICJjbGFzc25hbWUiLCBkZXNjcmlwdG9yXy0+bmFtZSgpKTsKLQotICAvLyBDaGVja2lu
ZyBvbmVvZiBjYXNlIGJlZm9yZSBjaGVja2luZyBlYWNoIG9uZW9mIGZpZWxkLgotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewotICAg
IGNvbnN0IE9uZW9mRGVzY3JpcHRvciogb25lb2ZfZGVzYyA9IGRlc2NyaXB0b3JfLT5vbmVvZl9k
ZWNsKGkpOwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgImlmICh0aGlzLiRvbmVvZl9uYW1l
JENhc2VfICE9IG90aGVyLiRvbmVvZl9uYW1lJENhc2VfKSB7XG4iCi0gICAgICAiICByZXR1cm4g
ZmFsc2U7XG4iCi0gICAgICAifVxuIiwKLSAgICAgICJvbmVvZl9uYW1lIiwgVW5kZXJzY29yZXNU
b0NhbWVsQ2FzZShvbmVvZl9kZXNjKSk7Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRl
c2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotICAgIGZpZWxkX2dlbmVyYXRvcnNf
LmdldChmaWVsZCkuR2VuZXJhdGVFcXVhbHNDb2RlKHByaW50ZXIpOwotICB9Ci0KLSAgaWYgKHBh
cmFtc18uc3RvcmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAg
ICAgImlmICh1bmtub3duRmllbGREYXRhID09IG51bGwgfHwgdW5rbm93bkZpZWxkRGF0YS5pc0Vt
cHR5KCkpIHtcbiIKLSAgICAgICIgIHJldHVybiBvdGhlci51bmtub3duRmllbGREYXRhID09IG51
bGwgfHwgb3RoZXIudW5rbm93bkZpZWxkRGF0YS5pc0VtcHR5KCk7XG4iCi0gICAgICAifSBlbHNl
IHtcbiIKLSAgICAgICIgIHJldHVybiB1bmtub3duRmllbGREYXRhLmVxdWFscyhvdGhlci51bmtu
b3duRmllbGREYXRhKTtcbiIKLSAgICAgICJ9Iik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAicmV0dXJuIHRydWU7XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRl
bnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0
b3I6OkdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgaWYgKGRlc2Ny
aXB0b3JfLT5maWVsZF9jb3VudCgpID09IDAgJiYgIXBhcmFtc18uc3RvcmVfdW5rbm93bl9maWVs
ZHMoKSkgewotICAgIHJldHVybjsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICJcbiIK
LSAgICAiQE92ZXJyaWRlXG4iCi0gICAgInB1YmxpYyBpbnQgaGFzaENvZGUoKSB7XG4iKTsKLSAg
cHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoImludCByZXN1bHQgPSAxNztc
biIpOwotICBwcmludGVyLT5QcmludCgicmVzdWx0ID0gMzEgKiByZXN1bHQgKyBnZXRDbGFzcygp
LmdldE5hbWUoKS5oYXNoQ29kZSgpO1xuIik7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3Jp
cHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQgPSBkZXNjcmlwdG9yXy0+ZmllbGQoaSk7Ci0gICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0
KGZpZWxkKS5HZW5lcmF0ZUhhc2hDb2RlQ29kZShwcmludGVyKTsKLSAgfQotCi0gIGlmIChwYXJh
bXNfLnN0b3JlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICJyZXN1bHQgPSAzMSAqIHJlc3VsdCArIFxuIgotICAgICAgIiAgKHVua25vd25GaWVsZERhdGEg
PT0gbnVsbCB8fCB1bmtub3duRmllbGREYXRhLmlzRW1wdHkoKSA/IDAgOiBcbiIKLSAgICAgICIg
IHVua25vd25GaWVsZERhdGEuaGFzaENvZGUoKSk7XG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlBy
aW50KCJyZXR1cm4gcmVzdWx0O1xuIik7Ci0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmlu
dGVyLT5QcmludCgifVxuIik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotfSAgLy8gbmFtZXNwYWNl
IGphdmFuYW5vCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2UuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tZXNzYWdlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI4MWVjNjRmZGRhODU3NjdhNzVkZWVmODA0ODdmNGM4ODRmNTYzZDEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2UuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDk3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHJvdG9idWYvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjog
a2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQ
cm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFu
LCBhbmQgb3RoZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBTkFO
T19NRVNTQUdFX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQU5BTk9f
TUVTU0FHRV9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9faGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWVsZC5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wYXJhbXMuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLSAgbmFtZXNwYWNlIGlvIHsKLSAgICBjbGFzcyBQ
cmludGVyOyAgICAgICAgICAgICAvLyBwcmludGVyLmgKLSAgfQotfQotCi1uYW1lc3BhY2UgcHJv
dG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhbmFubyB7Ci0KLWNs
YXNzIE1lc3NhZ2VHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgTWVzc2FnZUdlbmVy
YXRvcihjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBQYXJhbXMmIHBhcmFtcyk7
Ci0gIH5NZXNzYWdlR2VuZXJhdG9yKCk7Ci0KLSAgLy8gQWxsIHN0YXRpYyB2YXJpYWJsZXMgaGF2
ZSB0byBiZSBkZWNsYXJlZCBhdCB0aGUgdG9wLWxldmVsIG9mIHRoZSBmaWxlCi0gIC8vIHNvIHRo
YXQgd2UgY2FuIGNvbnRyb2wgaW5pdGlhbGl6YXRpb24gb3JkZXIsIHdoaWNoIGlzIGltcG9ydGFu
dCBmb3IKLSAgLy8gRGVzY3JpcHRvclByb3RvIGJvb3RzdHJhcHBpbmcgdG8gd29yay4KLSAgdm9p
ZCBHZW5lcmF0ZVN0YXRpY1ZhcmlhYmxlcyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8g
T3V0cHV0IGNvZGUgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIHN0YXRpYyB2YXJpYWJsZXMgZ2VuZXJh
dGVkIGJ5Ci0gIC8vIEdlbmVyYXRlU3RhdGljVmFyaWFibGVzKCkuCi0gIHZvaWQgR2VuZXJhdGVT
dGF0aWNWYXJpYWJsZUluaXRpYWxpemVycyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0KLSAgLy8g
R2VuZXJhdGUgdGhlIGNsYXNzIGl0c2VsZi4KLSAgdm9pZCBHZW5lcmF0ZShpbzo6UHJpbnRlciog
cHJpbnRlcik7Ci0KLSBwcml2YXRlOgotICB2b2lkIEdlbmVyYXRlTWVzc2FnZVNlcmlhbGl6YXRp
b25NZXRob2RzKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdlRnJv
bU1ldGhvZHMoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlUGFyc2VGcm9t
TWV0aG9kcyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVP
bmVGaWVsZChpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpOwotCi0gIHZvaWQgR2VuZXJhdGVD
bGVhcihpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVGaWVsZEluaXRpYWxp
emVycyhpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVFcXVhbHMoaW86OlBy
aW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlSGFzaENvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpOwotICB2b2lkIEdlbmVyYXRlQ2xvbmUoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0g
IGNvbnN0IFBhcmFtcyYgcGFyYW1zXzsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcl87
Ci0gIEZpZWxkR2VuZXJhdG9yTWFwIGZpZWxkX2dlbmVyYXRvcnNfOwotCi0gIEdPT0dMRV9ESVNB
TExPV19FVklMX0NPTlNUUlVDVE9SUyhNZXNzYWdlR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5h
bWVzcGFjZSBqYXZhbmFubwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVf
UFJPVE9CVUZfQ09NUElMRVJfSkFWQU5BTk9fTUVTU0FHRV9IX18KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tZXNzYWdlX2ZpZWxkLmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2Vf
ZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZDA0YjUyYTQwMjMzZTdj
ZTczYTg5Zjk4ZmJhMmVlZmQyMjExYTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFu
YW5vX21lc3NhZ2VfZmllbGQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzNjMgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHA6
Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9u
IFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5
Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRl
IDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2VfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9faGVscGVycy5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0
aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNw
YWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBqYXZhbmFubyB7Ci0KLXVzaW5nIGludGVybmFsOjpX
aXJlRm9ybWF0OwotdXNpbmcgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOwotCi1uYW1lc3BhY2Ug
ewotCi0vLyBUT0RPKGtlbnRvbik6ICBGYWN0b3Igb3V0IGEgIlNldENvbW1vbkZpZWxkVmFyaWFi
bGVzKCkiIHRvIGdldCByaWQgb2YKLS8vICAgcmVwZWF0IGNvZGUgYmV0d2VlbiB0aGlzIGFuZCB0
aGUgb3RoZXIgZmllbGQgdHlwZXMuCi12b2lkIFNldE1lc3NhZ2VWYXJpYWJsZXMoY29uc3QgUGFy
YW1zJiBwYXJhbXMsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBtYXA8
c3RyaW5nLCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAgKCp2YXJpYWJsZXMpWyJuYW1lIl0gPQot
ICAgIFJlbmFtZUphdmFLZXl3b3JkcyhVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGRlc2NyaXB0b3Ip
KTsKLSAgKCp2YXJpYWJsZXMpWyJjYXBpdGFsaXplZF9uYW1lIl0gPQotICAgIFJlbmFtZUphdmFL
ZXl3b3JkcyhVbmRlcnNjb3Jlc1RvQ2FwaXRhbGl6ZWRDYW1lbENhc2UoZGVzY3JpcHRvcikpOwot
ICAoKnZhcmlhYmxlcylbIm51bWJlciJdID0gU2ltcGxlSXRvYShkZXNjcmlwdG9yLT5udW1iZXIo
KSk7Ci0gICgqdmFyaWFibGVzKVsidHlwZSJdID0gQ2xhc3NOYW1lKHBhcmFtcywgZGVzY3JpcHRv
ci0+bWVzc2FnZV90eXBlKCkpOwotICAoKnZhcmlhYmxlcylbImdyb3VwX29yX21lc3NhZ2UiXSA9
Ci0gICAgKGRlc2NyaXB0b3ItPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVAp
ID8KLSAgICAiR3JvdXAiIDogIk1lc3NhZ2UiOwotICAoKnZhcmlhYmxlcylbIm1lc3NhZ2VfbmFt
ZSJdID0gZGVzY3JpcHRvci0+Y29udGFpbmluZ190eXBlKCktPm5hbWUoKTsKLSAgLy8oKnZhcmlh
YmxlcylbIm1lc3NhZ2VfdHlwZSJdID0gZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCktPm5hbWUo
KTsKLSAgKCp2YXJpYWJsZXMpWyJ0YWciXSA9IFNpbXBsZUl0b2EoV2lyZUZvcm1hdDo6TWFrZVRh
ZyhkZXNjcmlwdG9yKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0K
LU1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1NZXNzYWdlRmllbGRHZW5lcmF0b3IoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBQYXJhbXMmIHBhcmFtcykKLSAgOiBGaWVs
ZEdlbmVyYXRvcihwYXJhbXMpLCBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSB7Ci0gIFNldE1lc3Nh
Z2VWYXJpYWJsZXMocGFyYW1zLCBkZXNjcmlwdG9yLCAmdmFyaWFibGVzXyk7Ci19Ci0KLU1lc3Nh
Z2VGaWVsZEdlbmVyYXRvcjo6fk1lc3NhZ2VGaWVsZEdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgTWVz
c2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRl
ciwgYm9vbCAvKiB1bnVzZWQgbGF6eV9pbml0ICovKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgInB1YmxpYyAkdHlwZSQgJG5hbWUkO1xuIik7Ci19Ci0KLXZvaWQg
TWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ2xlYXJDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgIiRuYW1l
JCA9IG51bGw7XG4iKTsKLX0KLQotdm9pZCBNZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJh
dGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICJpZiAodGhpcy4kbmFtZSQgPT0gbnVsbCkge1xuIgotICAg
ICIgIHRoaXMuJG5hbWUkID0gbmV3ICR0eXBlJCgpO1xuIgotICAgICJ9XG4iKTsKLQotICBpZiAo
ZGVzY3JpcHRvcl8tPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApIHsKLSAg
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImlucHV0LnJlYWRHcm91cCh0aGlz
LiRuYW1lJCwgJG51bWJlciQpO1xuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAgICJpbnB1dC5yZWFkTWVzc2FnZSh0aGlzLiRuYW1lJCk7XG4iKTsK
LSAgfQotfQotCi12b2lkIE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6
YXRpb25Db2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgImlmICh0aGlzLiRuYW1lJCAhPSBudWxsKSB7XG4iCi0gICAgIiAg
b3V0cHV0LndyaXRlJGdyb3VwX29yX21lc3NhZ2UkKCRudW1iZXIkLCB0aGlzLiRuYW1lJCk7XG4i
Ci0gICAgIn1cbiIpOwotfQotCi12b2lkIE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAodGhpcy4kbmFtZSQgIT0gbnVsbCkge1xu
IgotICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLkNvZGVkT3V0cHV0Qnl0
ZUJ1ZmZlck5hbm9cbiIKLSAgICAiICAgIC5jb21wdXRlJGdyb3VwX29yX21lc3NhZ2UkU2l6ZSgk
bnVtYmVyJCwgdGhpcy4kbmFtZSQpO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBNZXNzYWdl
RmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVGaXhDbG9uZWRDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICh0aGlz
LiRuYW1lJCAhPSBudWxsKSB7XG4iCi0gICAgIiAgY2xvbmVkLiRuYW1lJCA9IHRoaXMuJG5hbWUk
LmNsb25lKCk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIE1lc3NhZ2VGaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKHRoaXMuJG5hbWUkID09IG51bGwp
IHsgXG4iCi0gICAgIiAgaWYgKG90aGVyLiRuYW1lJCAhPSBudWxsKSB7XG4iCi0gICAgIiAgICBy
ZXR1cm4gZmFsc2U7XG4iCi0gICAgIiAgfVxuIgotICAgICJ9IGVsc2Uge1xuIgotICAgICIgIGlm
ICghdGhpcy4kbmFtZSQuZXF1YWxzKG90aGVyLiRuYW1lJCkpIHtcbiIKLSAgICAiICAgIHJldHVy
biBmYWxzZTtcbiIKLSAgICAiICB9XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIE1lc3NhZ2VG
aWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUhhc2hDb2RlQ29kZShpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJyZXN1bHQgPSAz
MSAqIHJlc3VsdCArXG4iCi0gICAgIiAgICAodGhpcy4kbmFtZSQgPT0gbnVsbCA/IDAgOiB0aGlz
LiRuYW1lJC5oYXNoQ29kZSgpKTtcbiIpOwotfQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1NZXNzYWdlT25l
b2ZGaWVsZEdlbmVyYXRvcjo6TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3IoCi0gICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBQYXJhbXMmIHBhcmFtcykKLSAgICA6
IEZpZWxkR2VuZXJhdG9yKHBhcmFtcyksIGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpIHsKLSAgICBT
ZXRNZXNzYWdlVmFyaWFibGVzKHBhcmFtcywgZGVzY3JpcHRvciwgJnZhcmlhYmxlc18pOwotICAg
IFNldENvbW1vbk9uZW9mVmFyaWFibGVzKGRlc2NyaXB0b3IsICZ2YXJpYWJsZXNfKTsKLX0KLQot
TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6On5NZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcigp
IHt9Ci0KLXZvaWQgTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZW1iZXJz
KGlvOjpQcmludGVyKiBwcmludGVyLCBib29sIC8qIHVudXNlZCBsYXp5X2luaXQgKi8pIGNvbnN0
IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicHVibGljIGJvb2xlYW4gaGFz
JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIHJldHVybiAkaGFzX29uZW9mX2Nhc2Uk
O1xuIgotICAgICJ9XG4iCi0gICAgInB1YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUk
KCkge1xuIgotICAgICIgIGlmICgkaGFzX29uZW9mX2Nhc2UkKSB7XG4iCi0gICAgIiAgICByZXR1
cm4gKCR0eXBlJCkgdGhpcy4kb25lb2ZfbmFtZSRfO1xuIgotICAgICIgIH1cbiIKLSAgICAiICBy
ZXR1cm4gbnVsbDtcbiIKLSAgICAifVxuIgotICAgICJwdWJsaWMgJG1lc3NhZ2VfbmFtZSQgc2V0
JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkge1xuIgotICAgICIgIGlmICh2YWx1ZSA9
PSBudWxsKSB7IHRocm93IG5ldyBqYXZhLmxhbmcuTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsgfVxu
IgotICAgICIgICRzZXRfb25lb2ZfY2FzZSQ7XG4iCi0gICAgIiAgdGhpcy4kb25lb2ZfbmFtZSRf
ID0gdmFsdWU7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIpOwotfQotCi12
b2lkIE1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ2xlYXJDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIC8vIE5vIGNsZWFyIG1ldGhvZCBmb3Igb25lb2Yg
ZmllbGRzLgotfQotCi12b2lkIE1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRl
TWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAiaWYgKCEoJGhhc19vbmVvZl9jYXNlJCkpIHtcbiIKLSAgICAi
ICB0aGlzLiRvbmVvZl9uYW1lJF8gPSBuZXcgJHR5cGUkKCk7XG4iCi0gICAgIn1cbiIKLSAgICAi
aW5wdXQucmVhZE1lc3NhZ2UoXG4iCi0gICAgIiAgICAoY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5v
Lk1lc3NhZ2VOYW5vKSB0aGlzLiRvbmVvZl9uYW1lJF8pO1xuIgotICAgICIkc2V0X29uZW9mX2Nh
c2UkO1xuIik7Ci19Ci0KLXZvaWQgTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJh
dGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoJGhhc19vbmVvZl9jYXNlJCkge1xuIgot
ICAgICIgIG91dHB1dC53cml0ZU1lc3NhZ2UoJG51bWJlciQsXG4iCi0gICAgIiAgICAgIChjb20u
Z29vZ2xlLnByb3RvYnVmLm5hbm8uTWVzc2FnZU5hbm8pIHRoaXMuJG9uZW9mX25hbWUkXyk7XG4i
Ci0gICAgIn1cbiIpOwotfQotCi12b2lkIE1lc3NhZ2VPbmVvZkZpZWxkR2VuZXJhdG9yOjoKLUdl
bmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0g
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICgkaGFzX29uZW9mX2Nhc2UkKSB7
XG4iCi0gICAgIiAgc2l6ZSArPSBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uQ29kZWRPdXRwdXRC
eXRlQnVmZmVyTmFub1xuIgotICAgICIgICAgLmNvbXB1dGVNZXNzYWdlU2l6ZSgkbnVtYmVyJCxc
biIKLSAgICAiICAgICAgICAoY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLk1lc3NhZ2VOYW5vKSB0
aGlzLiRvbmVvZl9uYW1lJF8pO1xuIgotICAgICJ9XG4iKTsKLX0KLQotdm9pZCBNZXNzYWdlT25l
b2ZGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUZpeENsb25lZENvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaWYgKHRo
aXMuJG9uZW9mX25hbWUkICE9IG51bGwpIHtcbiIKLSAgICAiICBjbG9uZWQuJG9uZW9mX25hbWUk
ID0gdGhpcy4kb25lb2ZfbmFtZSQuY2xvbmUoKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQg
TWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVFcXVhbHNDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIEdlbmVyYXRlT25lb2ZGaWVsZEVxdWFscyhkZXNjcmlw
dG9yXywgdmFyaWFibGVzXywgcHJpbnRlcik7Ci19Ci0KLXZvaWQgTWVzc2FnZU9uZW9mRmllbGRH
ZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNoQ29kZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgR2VuZXJhdGVPbmVvZkZpZWxkSGFzaENvZGUoZGVzY3JpcHRvcl8sIHZhcmlhYmxl
c18sIHByaW50ZXIpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVJlcGVhdGVkTWVzc2FnZUZpZWxk
R2VuZXJhdG9yOjpSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcigKLSAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGNvbnN0IFBhcmFtcyYgcGFyYW1zKQotICAgIDogRmll
bGRHZW5lcmF0b3IocGFyYW1zKSwgZGVzY3JpcHRvcl8oZGVzY3JpcHRvcikgewotICBTZXRNZXNz
YWdlVmFyaWFibGVzKHBhcmFtcywgZGVzY3JpcHRvciwgJnZhcmlhYmxlc18pOwotfQotCi1SZXBl
YXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6flJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9y
KCkge30KLQotdm9pZCBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1l
bWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgLyogdW51c2VkIGxhenlfaW5pdCAqLykg
Y29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwdWJsaWMgJHR5cGUk
W10gJG5hbWUkO1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJp
bnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiJG5hbWUkID0gJHR5cGUkLmVtcHR5QXJyYXko
KTtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVy
YXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gRmlyc3Qs
IGZpZ3VyZSBvdXQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXksIHRoZW4gcGFyc2UuCi0gIHByaW50
ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImludCBhcnJheUxlbmd0aCA9IGNvbS5nb29nbGUu
cHJvdG9idWYubmFuby5XaXJlRm9ybWF0TmFub1xuIgotICAgICIgICAgLmdldFJlcGVhdGVkRmll
bGRBcnJheUxlbmd0aChpbnB1dCwgJHRhZyQpO1xuIgotICAgICJpbnQgaSA9IHRoaXMuJG5hbWUk
ID09IG51bGwgPyAwIDogdGhpcy4kbmFtZSQubGVuZ3RoO1xuIgotICAgICIkdHlwZSRbXSBuZXdB
cnJheSA9XG4iCi0gICAgIiAgICBuZXcgJHR5cGUkW2kgKyBhcnJheUxlbmd0aF07XG4iCi0gICAg
ImlmIChpICE9IDApIHtcbiIKLSAgICAiICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weSh0aGlz
LiRuYW1lJCwgMCwgbmV3QXJyYXksIDAsIGkpO1xuIgotICAgICJ9XG4iCi0gICAgImZvciAoOyBp
IDwgbmV3QXJyYXkubGVuZ3RoIC0gMTsgaSsrKSB7XG4iCi0gICAgIiAgbmV3QXJyYXlbaV0gPSBu
ZXcgJHR5cGUkKCk7XG4iKTsKLQotICBpZiAoZGVzY3JpcHRvcl8tPnR5cGUoKSA9PSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfR1JPVVApIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICAgIiAgaW5wdXQucmVhZEdyb3VwKG5ld0FycmF5W2ldLCAkbnVtYmVyJCk7XG4iKTsKLSAg
fSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgIiAgaW5wdXQu
cmVhZE1lc3NhZ2UobmV3QXJyYXlbaV0pO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICIgIGlucHV0LnJlYWRUYWcoKTtcbiIKLSAgICAifVxuIgotICAgICIv
LyBMYXN0IG9uZSB3aXRob3V0IHJlYWRUYWcuXG4iCi0gICAgIm5ld0FycmF5W2ldID0gbmV3ICR0
eXBlJCgpO1xuIik7Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT50eXBlKCkgPT0gRmllbGREZXNjcmlw
dG9yOjpUWVBFX0dST1VQKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAg
ICJpbnB1dC5yZWFkR3JvdXAobmV3QXJyYXlbaV0sICRudW1iZXIkKTtcbiIpOwotICB9IGVsc2Ug
ewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaW5wdXQucmVhZE1lc3Nh
Z2UobmV3QXJyYXlbaV0pO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICJ0aGlzLiRuYW1lJCA9IG5ld0FycmF5O1xuIik7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRN
ZXNzYWdlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICJpZiAodGhpcy4kbmFtZSQgIT0gbnVsbCAmJiB0aGlzLiRuYW1lJC5sZW5ndGggPiAwKSB7XG4i
Ci0gICAgIiAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLiRuYW1lJC5sZW5ndGg7IGkrKykge1xu
IgotICAgICIgICAgJHR5cGUkIGVsZW1lbnQgPSB0aGlzLiRuYW1lJFtpXTtcbiIKLSAgICAiICAg
IGlmIChlbGVtZW50ICE9IG51bGwpIHtcbiIKLSAgICAiICAgICAgb3V0cHV0LndyaXRlJGdyb3Vw
X29yX21lc3NhZ2UkKCRudW1iZXIkLCBlbGVtZW50KTtcbiIKLSAgICAiICAgIH1cbiIKLSAgICAi
ICB9XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJh
dG9yOjoKLUdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmICh0aGlzLiRuYW1l
JCAhPSBudWxsICYmIHRoaXMuJG5hbWUkLmxlbmd0aCA+IDApIHtcbiIKLSAgICAiICBmb3IgKGlu
dCBpID0gMDsgaSA8IHRoaXMuJG5hbWUkLmxlbmd0aDsgaSsrKSB7XG4iCi0gICAgIiAgICAkdHlw
ZSQgZWxlbWVudCA9IHRoaXMuJG5hbWUkW2ldO1xuIgotICAgICIgICAgaWYgKGVsZW1lbnQgIT0g
bnVsbCkge1xuIgotICAgICIgICAgICBzaXplICs9IGNvbS5nb29nbGUucHJvdG9idWYubmFuby5D
b2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vXG4iCi0gICAgIiAgICAgICAgLmNvbXB1dGUkZ3JvdXBf
b3JfbWVzc2FnZSRTaXplKCRudW1iZXIkLCBlbGVtZW50KTtcbiIKLSAgICAiICAgIH1cbiIKLSAg
ICAiICB9XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2Vu
ZXJhdG9yOjoKLUdlbmVyYXRlRml4Q2xvbmVkQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAodGhpcy4kbmFtZSQg
IT0gbnVsbCAmJiB0aGlzLiRuYW1lJC5sZW5ndGggPiAwKSB7XG4iCi0gICAgIiAgY2xvbmVkLiRu
YW1lJCA9IG5ldyAkdHlwZSRbdGhpcy4kbmFtZSQubGVuZ3RoXTtcbiIKLSAgICAiICBmb3IgKGlu
dCBpID0gMDsgaSA8IHRoaXMuJG5hbWUkLmxlbmd0aDsgaSsrKSB7XG4iCi0gICAgIiAgICBpZiAo
dGhpcy4kbmFtZSRbaV0gIT0gbnVsbCkge1xuIgotICAgICIgICAgICBjbG9uZWQuJG5hbWUkW2ld
ID0gdGhpcy4kbmFtZSRbaV0uY2xvbmUoKTtcbiIKLSAgICAiICAgIH1cbiIKLSAgICAiICB9XG4i
Ci0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoK
LUdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmlu
dGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAoIWNvbS5nb29nbGUucHJvdG9idWYubmFu
by5JbnRlcm5hbE5hbm8uZXF1YWxzKFxuIgotICAgICIgICAgdGhpcy4kbmFtZSQsIG90aGVyLiRu
YW1lJCkpIHtcbiIKLSAgICAiICByZXR1cm4gZmFsc2U7XG4iCi0gICAgIn1cbiIpOwotfQotCi12
b2lkIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSGFzaENvZGVDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sCi0gICAgInJlc3VsdCA9IDMxICogcmVzdWx0XG4iCi0gICAgIiAgICArIGNvbS5nb29nbGUu
cHJvdG9idWYubmFuby5JbnRlcm5hbE5hbm8uaGFzaENvZGUodGhpcy4kbmFtZSQpO1xuIik7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhbmFubwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19tZXNzYWdl
X2ZpZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9f
bWVzc2FnZV9maWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDc0NzM1Yzcw
NTU0MDNlMzhjMTIwODdlMjZmYTg1ZmNkMmM2ZTg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFu
by9qYXZhbmFub19tZXNzYWdlX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAo
S2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVz
aWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNp
Zm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX01FU1NBR0VfRklFTERfSF9f
Ci0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9KQVZBTkFOT19NRVNTQUdFX0ZJRUxE
X0hfXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZmllbGQuaD4KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsK
LW5hbWVzcGFjZSBqYXZhbmFubyB7Ci0KLWNsYXNzIE1lc3NhZ2VGaWVsZEdlbmVyYXRvciA6IHB1
YmxpYyBGaWVsZEdlbmVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBNZXNzYWdlRmllbGRH
ZW5lcmF0b3IoCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGNvbnN0
IFBhcmFtcyYgcGFyYW1zKTsKLSAgfk1lc3NhZ2VGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8vIGlt
cGxlbWVudHMgRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyLCBib29s
IGxhenlfaW5pdCkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDbGVhckNvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUVxdWFsc0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSGFzaENvZGVDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUZpeENsb25lZENv
ZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJs
ZXNfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhNZXNzYWdlRmllbGRH
ZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgTWVzc2FnZU9uZW9mRmllbGRHZW5lcmF0b3IgOiBwdWJs
aWMgRmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgTWVzc2FnZU9uZW9mRmll
bGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYXJhbXMmIHBhcmFtcyk7Ci0gIH5N
ZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8vIGltcGxlbWVudHMgRmllbGRHZW5l
cmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIHZvaWQgR2Vu
ZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyLCBib29sIGxhenlfaW5pdCkgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSGFzaENvZGVDb2RlKGlvOjpQcmludGVyKiBwcmlu
dGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUZpeENsb25lZENvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNj
cmlwdG9yXzsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotCi0gIEdPT0dMRV9E
SVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhNZXNzYWdlT25lb2ZGaWVsZEdlbmVyYXRvcik7Ci19
OwotCi1jbGFzcyBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBGaWVsZEdl
bmVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBSZXBlYXRlZE1lc3NhZ2VGaWVsZEdlbmVy
YXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgIGNvbnN0IFBh
cmFtcyYgcGFyYW1zKTsKLSAgflJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAg
Ly8gaW1wbGVtZW50cyBGaWVsZEdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgdm9pZCBHZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIs
IGJvb2wgbGF6eV9pbml0KSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNsZWFyQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJp
bnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6
ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRXF1YWxz
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVIYXNoQ29k
ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRml4Q2xv
bmVkQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZh
cmlhYmxlc187Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlcGVhdGVk
TWVzc2FnZUZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBqYXZhbmFubwot
fSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAg
Ly8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJf
SkFWQU5BTk9fTUVTU0FHRV9GSUVMRF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wYXJhbXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wYXJhbXMuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTNiNGJiOTM2OGIyNzIwYTE3ZjI3MjI5YmE0ZThiYmQ5Y2IzZjNhNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fcGFyYW1zLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwyNTggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wcm90b2J1Zi8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiB3aW5r
QGdvb2dsZS5jb20gKFdpbmsgU2F2aWxsZSkKLQotI2lmbmRlZiBQUk9UT0JVRl9DT01QSUxFUl9K
QVZBTkFOT19KQVZBTkFOT19QQVJBTVNfSF8KLSNkZWZpbmUgUFJPVE9CVUZfQ09NUElMRVJfSkFW
QU5BTk9fSkFWQU5BTk9fUEFSQU1TX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFj
ZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1u
YW1lc3BhY2UgamF2YW5hbm8gewotCi1lbnVtIGVNdWx0aXBsZUZpbGVzIHsgSkFWQU5BTk9fTVVM
X1VOU0VULCBKQVZBTkFOT19NVUxfRkFMU0UsIEpBVkFOQU5PX01VTF9UUlVFIH07Ci0KLS8vIFBh
cmFtZXRlcnMgZm9yIHVzZWQgYnkgdGhlIGdlbmVyYXRvcnMKLWNsYXNzIFBhcmFtcyB7Ci0gcHVi
bGljOgotICB0eXBlZGVmIG1hcDxzdHJpbmcsIHN0cmluZz4gTmFtZU1hcDsKLSAgdHlwZWRlZiBz
ZXQ8c3RyaW5nPiBOYW1lU2V0OwotIHByaXZhdGU6Ci0gIHN0cmluZyBlbXB0eV87Ci0gIHN0cmlu
ZyBiYXNlX25hbWVfOwotICBlTXVsdGlwbGVGaWxlcyBvdmVycmlkZV9qYXZhX211bHRpcGxlX2Zp
bGVzXzsKLSAgYm9vbCBzdG9yZV91bmtub3duX2ZpZWxkc187Ci0gIE5hbWVNYXAgamF2YV9wYWNr
YWdlc187Ci0gIE5hbWVNYXAgamF2YV9vdXRlcl9jbGFzc25hbWVzXzsKLSAgTmFtZVNldCBqYXZh
X211bHRpcGxlX2ZpbGVzXzsKLSAgYm9vbCBnZW5lcmF0ZV9oYXNfOwotICBib29sIGphdmFfZW51
bV9zdHlsZV87Ci0gIGJvb2wgb3B0aW9uYWxfZmllbGRfYWNjZXNzb3JzXzsKLSAgYm9vbCB1c2Vf
cmVmZXJlbmNlX3R5cGVzX2Zvcl9wcmltaXRpdmVzXzsKLSAgYm9vbCBnZW5lcmF0ZV9lcXVhbHNf
OwotICBib29sIGlnbm9yZV9zZXJ2aWNlc187Ci0gIGJvb2wgcGFyY2VsYWJsZV9tZXNzYWdlc187
Ci0gIGJvb2wgcmVmdHlwZXNfcHJpbWl0aXZlX2VudW1zXzsKLSAgYm9vbCBnZW5lcmF0ZV9jbGVh
cl87Ci0gIGJvb2wgZ2VuZXJhdGVfY2xvbmVfOwotICBib29sIGdlbmVyYXRlX2ludGRlZnNfOwot
Ci0gcHVibGljOgotICBQYXJhbXMoY29uc3Qgc3RyaW5nICYgYmFzZV9uYW1lKSA6Ci0gICAgZW1w
dHlfKCIiKSwKLSAgICBiYXNlX25hbWVfKGJhc2VfbmFtZSksCi0gICAgb3ZlcnJpZGVfamF2YV9t
dWx0aXBsZV9maWxlc18oSkFWQU5BTk9fTVVMX1VOU0VUKSwKLSAgICBzdG9yZV91bmtub3duX2Zp
ZWxkc18oZmFsc2UpLAotICAgIGdlbmVyYXRlX2hhc18oZmFsc2UpLAotICAgIGphdmFfZW51bV9z
dHlsZV8oZmFsc2UpLAotICAgIG9wdGlvbmFsX2ZpZWxkX2FjY2Vzc29yc18oZmFsc2UpLAotICAg
IHVzZV9yZWZlcmVuY2VfdHlwZXNfZm9yX3ByaW1pdGl2ZXNfKGZhbHNlKSwKLSAgICBnZW5lcmF0
ZV9lcXVhbHNfKGZhbHNlKSwKLSAgICBpZ25vcmVfc2VydmljZXNfKGZhbHNlKSwKLSAgICBwYXJj
ZWxhYmxlX21lc3NhZ2VzXyhmYWxzZSksCi0gICAgcmVmdHlwZXNfcHJpbWl0aXZlX2VudW1zXyhm
YWxzZSksCi0gICAgZ2VuZXJhdGVfY2xlYXJfKHRydWUpLAotICAgIGdlbmVyYXRlX2Nsb25lXyhm
YWxzZSksCi0gICAgZ2VuZXJhdGVfaW50ZGVmc18oZmFsc2UpIHsKLSAgfQotCi0gIGNvbnN0IHN0
cmluZyYgYmFzZV9uYW1lKCkgY29uc3QgewotICAgIHJldHVybiBiYXNlX25hbWVfOwotICB9Ci0K
LSAgYm9vbCBoYXNfamF2YV9wYWNrYWdlKGNvbnN0IHN0cmluZyYgZmlsZV9uYW1lKSBjb25zdCB7
Ci0gICAgcmV0dXJuIGphdmFfcGFja2FnZXNfLmZpbmQoZmlsZV9uYW1lKQotICAgICAgICAgICAg
ICAgICAgICAgICAgIT0gamF2YV9wYWNrYWdlc18uZW5kKCk7Ci0gIH0KLSAgdm9pZCBzZXRfamF2
YV9wYWNrYWdlKGNvbnN0IHN0cmluZyYgZmlsZV9uYW1lLAotICAgICAgY29uc3Qgc3RyaW5nJiBq
YXZhX3BhY2thZ2UpIHsKLSAgICBqYXZhX3BhY2thZ2VzX1tmaWxlX25hbWVdID0gamF2YV9wYWNr
YWdlOwotICB9Ci0gIGNvbnN0IHN0cmluZyYgamF2YV9wYWNrYWdlKGNvbnN0IHN0cmluZyYgZmls
ZV9uYW1lKSBjb25zdCB7Ci0gICAgTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRyOwotCi0gICAg
aXRyID0gamF2YV9wYWNrYWdlc18uZmluZChmaWxlX25hbWUpOwotICAgIGlmICAoaXRyID09IGph
dmFfcGFja2FnZXNfLmVuZCgpKSB7Ci0gICAgICByZXR1cm4gZW1wdHlfOwotICAgIH0gZWxzZSB7
Ci0gICAgICByZXR1cm4gaXRyLT5zZWNvbmQ7Ci0gICAgfQotICB9Ci0gIGNvbnN0IE5hbWVNYXAm
IGphdmFfcGFja2FnZXMoKSB7Ci0gICAgcmV0dXJuIGphdmFfcGFja2FnZXNfOwotICB9Ci0KLSAg
Ym9vbCBoYXNfamF2YV9vdXRlcl9jbGFzc25hbWUoY29uc3Qgc3RyaW5nJiBmaWxlX25hbWUpIGNv
bnN0IHsKLSAgICByZXR1cm4gamF2YV9vdXRlcl9jbGFzc25hbWVzXy5maW5kKGZpbGVfbmFtZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICE9IGphdmFfb3V0ZXJfY2xhc3NuYW1lc18uZW5kKCk7
Ci0gIH0KLSAgdm9pZCBzZXRfamF2YV9vdXRlcl9jbGFzc25hbWUoY29uc3Qgc3RyaW5nJiBmaWxl
X25hbWUsCi0gICAgICBjb25zdCBzdHJpbmcmIGphdmFfb3V0ZXJfY2xhc3NuYW1lKSB7Ci0gICAg
amF2YV9vdXRlcl9jbGFzc25hbWVzX1tmaWxlX25hbWVdID0gamF2YV9vdXRlcl9jbGFzc25hbWU7
Ci0gIH0KLSAgY29uc3Qgc3RyaW5nJiBqYXZhX291dGVyX2NsYXNzbmFtZShjb25zdCBzdHJpbmcm
IGZpbGVfbmFtZSkgY29uc3QgewotICAgIE5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0cjsKLQot
ICAgIGl0ciA9IGphdmFfb3V0ZXJfY2xhc3NuYW1lc18uZmluZChmaWxlX25hbWUpOwotICAgIGlm
ICAoaXRyID09IGphdmFfb3V0ZXJfY2xhc3NuYW1lc18uZW5kKCkpIHsKLSAgICAgIHJldHVybiBl
bXB0eV87Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBpdHItPnNlY29uZDsKLSAgICB9Ci0g
IH0KLSAgY29uc3QgTmFtZU1hcCYgamF2YV9vdXRlcl9jbGFzc25hbWVzKCkgewotICAgIHJldHVy
biBqYXZhX291dGVyX2NsYXNzbmFtZXNfOwotICB9Ci0KLSAgdm9pZCBzZXRfb3ZlcnJpZGVfamF2
YV9tdWx0aXBsZV9maWxlcyhib29sIGphdmFfbXVsdGlwbGVfZmlsZXMpIHsKLSAgICBpZiAoamF2
YV9tdWx0aXBsZV9maWxlcykgewotICAgICAgb3ZlcnJpZGVfamF2YV9tdWx0aXBsZV9maWxlc18g
PSBKQVZBTkFOT19NVUxfVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgb3ZlcnJpZGVfamF2YV9t
dWx0aXBsZV9maWxlc18gPSBKQVZBTkFOT19NVUxfRkFMU0U7Ci0gICAgfQotICB9Ci0gIHZvaWQg
Y2xlYXJfb3ZlcnJpZGVfamF2YV9tdWx0aXBsZV9maWxlcygpIHsKLSAgICBvdmVycmlkZV9qYXZh
X211bHRpcGxlX2ZpbGVzXyA9IEpBVkFOQU5PX01VTF9VTlNFVDsKLSAgfQotCi0gIHZvaWQgc2V0
X2phdmFfbXVsdGlwbGVfZmlsZXMoY29uc3Qgc3RyaW5nJiBmaWxlX25hbWUsIGJvb2wgdmFsdWUp
IHsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgIGphdmFfbXVsdGlwbGVfZmlsZXNfLmluc2VydChm
aWxlX25hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBqYXZhX211bHRpcGxlX2ZpbGVzXy5lcmFz
ZShmaWxlX25hbWUpOwotICAgIH0KLSAgfQotICBib29sIGphdmFfbXVsdGlwbGVfZmlsZXMoY29u
c3Qgc3RyaW5nJiBmaWxlX25hbWUpIGNvbnN0IHsKLSAgICBzd2l0Y2ggKG92ZXJyaWRlX2phdmFf
bXVsdGlwbGVfZmlsZXNfKSB7Ci0gICAgICBjYXNlIEpBVkFOQU5PX01VTF9GQUxTRToKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBKQVZBTkFOT19NVUxfVFJVRToKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gamF2YV9tdWx0aXBs
ZV9maWxlc18uZmluZChmaWxlX25hbWUpCi0gICAgICAgICAgICAgICAgIT0gamF2YV9tdWx0aXBs
ZV9maWxlc18uZW5kKCk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBzZXRfc3RvcmVfdW5rbm93bl9m
aWVsZHMoYm9vbCB2YWx1ZSkgewotICAgIHN0b3JlX3Vua25vd25fZmllbGRzXyA9IHZhbHVlOwot
ICB9Ci0gIGJvb2wgc3RvcmVfdW5rbm93bl9maWVsZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0
b3JlX3Vua25vd25fZmllbGRzXzsKLSAgfQotCi0gIHZvaWQgc2V0X2dlbmVyYXRlX2hhcyhib29s
IHZhbHVlKSB7Ci0gICAgZ2VuZXJhdGVfaGFzXyA9IHZhbHVlOwotICB9Ci0gIGJvb2wgZ2VuZXJh
dGVfaGFzKCkgY29uc3QgewotICAgIHJldHVybiBnZW5lcmF0ZV9oYXNfOwotICB9Ci0KLSAgdm9p
ZCBzZXRfamF2YV9lbnVtX3N0eWxlKGJvb2wgdmFsdWUpIHsKLSAgICBqYXZhX2VudW1fc3R5bGVf
ID0gdmFsdWU7Ci0gIH0KLSAgYm9vbCBqYXZhX2VudW1fc3R5bGUoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIGphdmFfZW51bV9zdHlsZV87Ci0gIH0KLQotICB2b2lkIHNldF9vcHRpb25hbF9maWVsZF9h
Y2Nlc3NvcnMoYm9vbCB2YWx1ZSkgewotICAgIG9wdGlvbmFsX2ZpZWxkX2FjY2Vzc29yc18gPSB2
YWx1ZTsKLSAgfQotICBib29sIG9wdGlvbmFsX2ZpZWxkX2FjY2Vzc29ycygpIGNvbnN0IHsKLSAg
ICByZXR1cm4gb3B0aW9uYWxfZmllbGRfYWNjZXNzb3JzXzsKLSAgfQotCi0gIHZvaWQgc2V0X3Vz
ZV9yZWZlcmVuY2VfdHlwZXNfZm9yX3ByaW1pdGl2ZXMoYm9vbCB2YWx1ZSkgewotICAgIHVzZV9y
ZWZlcmVuY2VfdHlwZXNfZm9yX3ByaW1pdGl2ZXNfID0gdmFsdWU7Ci0gIH0KLSAgYm9vbCB1c2Vf
cmVmZXJlbmNlX3R5cGVzX2Zvcl9wcmltaXRpdmVzKCkgY29uc3QgewotICAgIHJldHVybiB1c2Vf
cmVmZXJlbmNlX3R5cGVzX2Zvcl9wcmltaXRpdmVzXzsKLSAgfQotCi0gIHZvaWQgc2V0X2dlbmVy
YXRlX2VxdWFscyhib29sIHZhbHVlKSB7Ci0gICAgZ2VuZXJhdGVfZXF1YWxzXyA9IHZhbHVlOwot
ICB9Ci0gIGJvb2wgZ2VuZXJhdGVfZXF1YWxzKCkgY29uc3QgewotICAgIHJldHVybiBnZW5lcmF0
ZV9lcXVhbHNfOwotICB9Ci0KLSAgdm9pZCBzZXRfaWdub3JlX3NlcnZpY2VzKGJvb2wgdmFsdWUp
IHsKLSAgICBpZ25vcmVfc2VydmljZXNfID0gdmFsdWU7Ci0gIH0KLSAgYm9vbCBpZ25vcmVfc2Vy
dmljZXMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGlnbm9yZV9zZXJ2aWNlc187Ci0gIH0KLQotICB2
b2lkIHNldF9wYXJjZWxhYmxlX21lc3NhZ2VzKGJvb2wgdmFsdWUpIHsKLSAgICBwYXJjZWxhYmxl
X21lc3NhZ2VzXyA9IHZhbHVlOwotICB9Ci0gIGJvb2wgcGFyY2VsYWJsZV9tZXNzYWdlcygpIGNv
bnN0IHsKLSAgICByZXR1cm4gcGFyY2VsYWJsZV9tZXNzYWdlc187Ci0gIH0KLQotICB2b2lkIHNl
dF9yZWZ0eXBlc19wcmltaXRpdmVfZW51bXMoYm9vbCB2YWx1ZSkgewotICAgIHJlZnR5cGVzX3By
aW1pdGl2ZV9lbnVtc18gPSB2YWx1ZTsKLSAgfQotICBib29sIHJlZnR5cGVzX3ByaW1pdGl2ZV9l
bnVtcygpIGNvbnN0IHsKLSAgICByZXR1cm4gcmVmdHlwZXNfcHJpbWl0aXZlX2VudW1zXzsKLSAg
fQotCi0gIHZvaWQgc2V0X2dlbmVyYXRlX2NsZWFyKGJvb2wgdmFsdWUpIHsKLSAgICBnZW5lcmF0
ZV9jbGVhcl8gPSB2YWx1ZTsKLSAgfQotICBib29sIGdlbmVyYXRlX2NsZWFyKCkgY29uc3Qgewot
ICAgIHJldHVybiBnZW5lcmF0ZV9jbGVhcl87Ci0gIH0KLQotICB2b2lkIHNldF9nZW5lcmF0ZV9j
bG9uZShib29sIHZhbHVlKSB7Ci0gICAgZ2VuZXJhdGVfY2xvbmVfID0gdmFsdWU7Ci0gIH0KLSAg
Ym9vbCBnZW5lcmF0ZV9jbG9uZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gZ2VuZXJhdGVfY2xvbmVf
OwotICB9Ci0KLSAgdm9pZCBzZXRfZ2VuZXJhdGVfaW50ZGVmcyhib29sIHZhbHVlKSB7Ci0gICAg
Z2VuZXJhdGVfaW50ZGVmc18gPSB2YWx1ZTsKLSAgfQotICBib29sIGdlbmVyYXRlX2ludGRlZnMo
KSBjb25zdCB7Ci0gICAgcmV0dXJuIGdlbmVyYXRlX2ludGRlZnNfOwotICB9Ci19OwotCi19ICAv
LyBuYW1lc3BhY2UgamF2YW5hbm8KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIFBST1RP
QlVGX0NPTVBJTEVSX0pBVkFOQU5PX0pBVkFOQU5PX1BBUkFNU19IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX3ByaW1pdGl2ZV9maWVs
ZC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wcmlt
aXRpdmVfZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3OGFiZjJjZTQw
NDU5MmU2MmQzMzA2MDk0NGJkODJiNGJkODlkZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5v
L2phdmFuYW5vX3ByaW1pdGl2ZV9maWVsZC5jYworKysgL2Rldi9udWxsCkBAIC0xLDk2OCArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Byb3RvYnVmLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29t
IChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBk
ZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQot
I2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX3ByaW1p
dGl2ZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9faGVs
cGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3Vi
c3RpdHV0ZS5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGphdmFuYW5vIHsKLQotdXNpbmcgaW50ZXJu
YWw6OldpcmVGb3JtYXQ7Ci11c2luZyBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU7Ci0KLW5hbWVz
cGFjZSB7Ci0KLWJvb2wgSXNSZWZlcmVuY2VUeXBlKEphdmFUeXBlIHR5cGUpIHsKLSAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgY2FzZSBKQVZBVFlQRV9JTlQgICAgOiByZXR1cm4gZmFsc2U7Ci0gICAg
Y2FzZSBKQVZBVFlQRV9MT05HICAgOiByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBKQVZBVFlQRV9G
TE9BVCAgOiByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBKQVZBVFlQRV9ET1VCTEUgOiByZXR1cm4g
ZmFsc2U7Ci0gICAgY2FzZSBKQVZBVFlQRV9CT09MRUFOOiByZXR1cm4gZmFsc2U7Ci0gICAgY2Fz
ZSBKQVZBVFlQRV9TVFJJTkcgOiByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEpBVkFUWVBFX0JZVEVT
ICA6IHJldHVybiB0cnVlOwotICAgIGNhc2UgSkFWQVRZUEVfRU5VTSAgIDogcmV0dXJuIGZhbHNl
OwotICAgIGNhc2UgSkFWQVRZUEVfTUVTU0FHRTogcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBObyBk
ZWZhdWx0IGJlY2F1c2Ugd2Ugd2FudCB0aGUgY29tcGlsZXIgdG8gY29tcGxhaW4gaWYgYW55IG5l
dwotICAgIC8vIEphdmFUeXBlcyBhcmUgYWRkZWQuCi0gIH0KLQotICBHT09HTEVfTE9HKEZBVEFM
KSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElzQXJy
YXlUeXBlKEphdmFUeXBlIHR5cGUpIHsKLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBKQVZB
VFlQRV9JTlQgICAgOiByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBKQVZBVFlQRV9MT05HICAgOiBy
ZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBKQVZBVFlQRV9GTE9BVCAgOiByZXR1cm4gZmFsc2U7Ci0g
ICAgY2FzZSBKQVZBVFlQRV9ET1VCTEUgOiByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBKQVZBVFlQ
RV9CT09MRUFOOiByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBKQVZBVFlQRV9TVFJJTkcgOiByZXR1
cm4gZmFsc2U7Ci0gICAgY2FzZSBKQVZBVFlQRV9CWVRFUyAgOiByZXR1cm4gdHJ1ZTsKLSAgICBj
YXNlIEpBVkFUWVBFX0VOVU0gICA6IHJldHVybiBmYWxzZTsKLSAgICBjYXNlIEpBVkFUWVBFX01F
U1NBR0U6IHJldHVybiBmYWxzZTsKLQotICAgIC8vIE5vIGRlZmF1bHQgYmVjYXVzZSB3ZSB3YW50
IHRoZSBjb21waWxlciB0byBjb21wbGFpbiBpZiBhbnkgbmV3Ci0gICAgLy8gSmF2YVR5cGVzIGFy
ZSBhZGRlZC4KLSAgfQotCi0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4ndCBnZXQgaGVyZS4i
OwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWNvbnN0IGNoYXIqIEdldENhcGl0YWxpemVkVHlwZShj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHN3aXRjaCAoZmllbGQtPnR5cGUoKSkg
ewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDMyICAgOiByZXR1cm4gIkludDMy
IiAgIDsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UMzIgIDogcmV0dXJuICJV
SW50MzIiICA7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDMyICA6IHJldHVy
biAiU0ludDMyIiAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVEMzIgOiBy
ZXR1cm4gIkZpeGVkMzIiIDsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TRklYRUQz
MjogcmV0dXJuICJTRml4ZWQzMiI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfSU5U
NjQgICA6IHJldHVybiAiSW50NjQiICAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBF
X1VJTlQ2NCAgOiByZXR1cm4gIlVJbnQ2NCIgIDsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV9TSU5UNjQgIDogcmV0dXJuICJTSW50NjQiICA7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OlRZUEVfRklYRUQ2NCA6IHJldHVybiAiRml4ZWQ2NCIgOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX1NGSVhFRDY0OiByZXR1cm4gIlNGaXhlZDY0IjsKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9GTE9BVCAgIDogcmV0dXJuICJGbG9hdCIgICA7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfRE9VQkxFICA6IHJldHVybiAiRG91YmxlIiAgOwotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JPT0wgICAgOiByZXR1cm4gIkJvb2wiICAgIDsKLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcgIDogcmV0dXJuICJTdHJpbmciICA7
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMgICA6IHJldHVybiAiQnl0ZXMi
ICAgOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU0gICAgOiByZXR1cm4gIkVu
dW0iICAgIDsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCAgIDogcmV0dXJu
ICJHcm91cCIgICA7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSA6IHJl
dHVybiAiTWVzc2FnZSIgOwotCi0gICAgLy8gTm8gZGVmYXVsdCBiZWNhdXNlIHdlIHdhbnQgdGhl
IGNvbXBpbGVyIHRvIGNvbXBsYWluIGlmIGFueSBuZXcKLSAgICAvLyB0eXBlcyBhcmUgYWRkZWQu
Ci0gIH0KLQotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0
dXJuIE5VTEw7Ci19Ci0KLS8vIEZvciBlbmNvZGluZ3Mgd2l0aCBmaXhlZCBzaXplcywgcmV0dXJu
cyB0aGF0IHNpemUgaW4gYnl0ZXMuICBPdGhlcndpc2UKLS8vIHJldHVybnMgLTEuCi1pbnQgRml4
ZWRTaXplKEZpZWxkRGVzY3JpcHRvcjo6VHlwZSB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDMyICAgOiByZXR1cm4gLTE7Ci0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfSU5UNjQgICA6IHJldHVybiAtMTsKLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UMzIgIDogcmV0dXJuIC0xOwotICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpUWVBFX1VJTlQ2NCAgOiByZXR1cm4gLTE7Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfU0lOVDMyICA6IHJldHVybiAtMTsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9TSU5UNjQgIDogcmV0dXJuIC0xOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX0ZJWEVEMzIgOiByZXR1cm4gV2lyZUZvcm1hdExpdGU6OmtGaXhlZDMyU2l6ZTsKLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhFRDY0IDogcmV0dXJuIFdpcmVGb3JtYXRM
aXRlOjprRml4ZWQ2NFNpemU7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVE
MzI6IHJldHVybiBXaXJlRm9ybWF0TGl0ZTo6a1NGaXhlZDMyU2l6ZTsKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9TRklYRUQ2NDogcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjprU0ZpeGVk
NjRTaXplOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZMT0FUICAgOiByZXR1cm4g
V2lyZUZvcm1hdExpdGU6OmtGbG9hdFNpemU7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfRE9VQkxFICA6IHJldHVybiBXaXJlRm9ybWF0TGl0ZTo6a0RvdWJsZVNpemU7Ci0KLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CT09MICAgIDogcmV0dXJuIFdpcmVGb3JtYXRMaXRl
OjprQm9vbFNpemU7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRU5VTSAgICA6IHJl
dHVybiAtMTsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NUUklORyAgOiByZXR1
cm4gLTE7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMgICA6IHJldHVybiAt
MTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCAgIDogcmV0dXJuIC0xOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0UgOiByZXR1cm4gLTE7Ci0KLSAg
ICAvLyBObyBkZWZhdWx0IGJlY2F1c2Ugd2Ugd2FudCB0aGUgY29tcGlsZXIgdG8gY29tcGxhaW4g
aWYgYW55IG5ldwotICAgIC8vIHR5cGVzIGFyZSBhZGRlZC4KLSAgfQotICBHT09HTEVfTE9HKEZB
VEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuIC0xOwotfQotCi1ib29sIEFsbEFz
Y2lpKGNvbnN0IHN0cmluZyYgdGV4dCkgewotICBmb3IgKGludCBpID0gMDsgaSA8IHRleHQuc2l6
ZSgpOyBpKyspIHsKLSAgICBpZiAoKHRleHRbaV0gJiAweDgwKSAhPSAwKSB7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0KLXZvaWQgU2V0UHJp
bWl0aXZlVmFyaWFibGVzKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3Qg
UGFyYW1zIHBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0
cmluZz4qIHZhcmlhYmxlcykgewotICAoKnZhcmlhYmxlcylbIm5hbWUiXSA9Ci0gICAgUmVuYW1l
SmF2YUtleXdvcmRzKFVuZGVyc2NvcmVzVG9DYW1lbENhc2UoZGVzY3JpcHRvcikpOwotICAoKnZh
cmlhYmxlcylbImNhcGl0YWxpemVkX25hbWUiXSA9Ci0gICAgUmVuYW1lSmF2YUtleXdvcmRzKFVu
ZGVyc2NvcmVzVG9DYXBpdGFsaXplZENhbWVsQ2FzZShkZXNjcmlwdG9yKSk7Ci0gICgqdmFyaWFi
bGVzKVsibnVtYmVyIl0gPSBTaW1wbGVJdG9hKGRlc2NyaXB0b3ItPm51bWJlcigpKTsKLSAgaWYg
KHBhcmFtcy51c2VfcmVmZXJlbmNlX3R5cGVzX2Zvcl9wcmltaXRpdmVzKCkKLSAgICAgICYmICFk
ZXNjcmlwdG9yLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJ0eXBlIl0gPSBC
b3hlZFByaW1pdGl2ZVR5cGVOYW1lKEdldEphdmFUeXBlKGRlc2NyaXB0b3IpKTsKLSAgfSBlbHNl
IHsKLSAgICAoKnZhcmlhYmxlcylbInR5cGUiXSA9IFByaW1pdGl2ZVR5cGVOYW1lKEdldEphdmFU
eXBlKGRlc2NyaXB0b3IpKTsKLSAgfQotICAvLyBEZWFscyB3aXRoIGRlZmF1bHRzLiBGb3IgQysr
LXN0cmluZyB0eXBlcyAoc3RyaW5nIGFuZCBieXRlcyksCi0gIC8vIHdlIG1pZ2h0IG5lZWQgdG8g
aGF2ZSB0aGUgZ2VuZXJhdGVkIGNvZGUgZG8gdGhlIHVuaWNvZGUgZGVjb2RpbmcKLSAgLy8gKHNl
ZSBjb21tZW50cyBpbiBJbnRlcm5hbE5hbm8uamF2YSBmb3IgZ29yeSBkZXRhaWxzLikuIFdlIHdv
dWxkCi0gIC8vIGxpa2UgdG8gZG8gdGhpcyBvbmNlIGludG8gYSBzdGF0aWMgZmllbGQgYW5kIHJl
LXVzZSB0aGF0IGZyb20KLSAgLy8gdGhlbiBvbi4KLSAgaWYgKGRlc2NyaXB0b3ItPmNwcF90eXBl
KCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORyAmJgotICAgICAgIWRlc2NyaXB0
b3ItPmRlZmF1bHRfdmFsdWVfc3RyaW5nKCkuZW1wdHkoKSAmJgotICAgICAgIXBhcmFtcy51c2Vf
cmVmZXJlbmNlX3R5cGVzX2Zvcl9wcmltaXRpdmVzKCkpIHsKLSAgICBpZiAoZGVzY3JpcHRvci0+
dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRFUykgewotICAgICAgKCp2YXJpYWJs
ZXMpWyJkZWZhdWx0Il0gPSBEZWZhdWx0VmFsdWUocGFyYW1zLCBkZXNjcmlwdG9yKTsKLSAgICAg
ICgqdmFyaWFibGVzKVsiZGVmYXVsdF9jb25zdGFudCJdID0gRmllbGREZWZhdWx0Q29uc3RhbnRO
YW1lKGRlc2NyaXB0b3IpOwotICAgICAgKCp2YXJpYWJsZXMpWyJkZWZhdWx0X2NvbnN0YW50X3Zh
bHVlIl0gPSBzdHJpbmdzOjpTdWJzdGl0dXRlKAotICAgICAgICAgICJjb20uZ29vZ2xlLnByb3Rv
YnVmLm5hbm8uSW50ZXJuYWxOYW5vLmJ5dGVzRGVmYXVsdFZhbHVlKFwiJDBcIikiLAotICAgICAg
ICAgIENFc2NhcGUoZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKSkpOwotICAgICAg
KCp2YXJpYWJsZXMpWyJkZWZhdWx0X2NvcHlfaWZfbmVlZGVkIl0gPQotICAgICAgICAgICgqdmFy
aWFibGVzKVsiZGVmYXVsdCJdICsgIi5jbG9uZSgpIjsKLSAgICB9IGVsc2UgaWYgKEFsbEFzY2lp
KGRlc2NyaXB0b3ItPmRlZmF1bHRfdmFsdWVfc3RyaW5nKCkpKSB7Ci0gICAgICAvLyBBbGwgY2hh
cnMgYXJlIEFTQ0lJLiAgSW4gdGhpcyBjYXNlIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGEKLSAgICAg
IC8vIENFc2NhcGUoKSdkIHN0cmluZyBsaXRlcmFsIHdvcmtzIGZpbmUuCi0gICAgICAoKnZhcmlh
YmxlcylbImRlZmF1bHQiXSA9Ci0gICAgICAgICAgIlwiIiArIENFc2NhcGUoZGVzY3JpcHRvci0+
ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKSkgKyAiXCIiOwotICAgICAgKCp2YXJpYWJsZXMpWyJkZWZh
dWx0X2NvcHlfaWZfbmVlZGVkIl0gPSAoKnZhcmlhYmxlcylbImRlZmF1bHQiXTsKLSAgICB9IGVs
c2UgewotICAgICAgLy8gU3RyaW5ncyB3aGVyZSBzb21lIGNoYXJzIGFyZSBub24tQVNDSUkuIFdl
IG5lZWQgdG8gc2F2ZSB0aGUKLSAgICAgIC8vIGRlZmF1bHQgdmFsdWUuCi0gICAgICAoKnZhcmlh
YmxlcylbImRlZmF1bHQiXSA9IERlZmF1bHRWYWx1ZShwYXJhbXMsIGRlc2NyaXB0b3IpOwotICAg
ICAgKCp2YXJpYWJsZXMpWyJkZWZhdWx0X2NvbnN0YW50Il0gPSBGaWVsZERlZmF1bHRDb25zdGFu
dE5hbWUoZGVzY3JpcHRvcik7Ci0gICAgICAoKnZhcmlhYmxlcylbImRlZmF1bHRfY29uc3RhbnRf
dmFsdWUiXSA9IHN0cmluZ3M6OlN1YnN0aXR1dGUoCi0gICAgICAgICAgImNvbS5nb29nbGUucHJv
dG9idWYubmFuby5JbnRlcm5hbE5hbm8uc3RyaW5nRGVmYXVsdFZhbHVlKFwiJDBcIikiLAotICAg
ICAgICAgIENFc2NhcGUoZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKSkpOwotICAg
ICAgKCp2YXJpYWJsZXMpWyJkZWZhdWx0X2NvcHlfaWZfbmVlZGVkIl0gPSAoKnZhcmlhYmxlcylb
ImRlZmF1bHQiXTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gTm9uLXN0cmluZywgbm9uLWJ5
dGVzIGZpZWxkLiBEZWZhdWx0cyBhcmUgbGl0ZXJhbHMuCi0gICAgKCp2YXJpYWJsZXMpWyJkZWZh
dWx0Il0gPSBEZWZhdWx0VmFsdWUocGFyYW1zLCBkZXNjcmlwdG9yKTsKLSAgICAoKnZhcmlhYmxl
cylbImRlZmF1bHRfY29weV9pZl9uZWVkZWQiXSA9ICgqdmFyaWFibGVzKVsiZGVmYXVsdCJdOwot
ICB9Ci0gICgqdmFyaWFibGVzKVsiYm94ZWRfdHlwZSJdID0gQm94ZWRQcmltaXRpdmVUeXBlTmFt
ZShHZXRKYXZhVHlwZShkZXNjcmlwdG9yKSk7Ci0gICgqdmFyaWFibGVzKVsiY2FwaXRhbGl6ZWRf
dHlwZSJdID0gR2V0Q2FwaXRhbGl6ZWRUeXBlKGRlc2NyaXB0b3IpOwotICAoKnZhcmlhYmxlcylb
InRhZyJdID0gU2ltcGxlSXRvYShXaXJlRm9ybWF0OjpNYWtlVGFnKGRlc2NyaXB0b3IpKTsKLSAg
KCp2YXJpYWJsZXMpWyJ0YWdfc2l6ZSJdID0gU2ltcGxlSXRvYSgKLSAgICAgIFdpcmVGb3JtYXQ6
OlRhZ1NpemUoZGVzY3JpcHRvci0+bnVtYmVyKCksIGRlc2NyaXB0b3ItPnR5cGUoKSkpOwotICAo
KnZhcmlhYmxlcylbIm5vbl9wYWNrZWRfdGFnIl0gPSBTaW1wbGVJdG9hKAotICAgICAgaW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpNYWtlVGFnKGRlc2NyaXB0b3ItPm51bWJlcigpLAotICAgICAg
ICAgIGludGVybmFsOjpXaXJlRm9ybWF0OjpXaXJlVHlwZUZvckZpZWxkVHlwZShkZXNjcmlwdG9y
LT50eXBlKCkpKSk7Ci0gIGludCBmaXhlZF9zaXplID0gRml4ZWRTaXplKGRlc2NyaXB0b3ItPnR5
cGUoKSk7Ci0gIGlmIChmaXhlZF9zaXplICE9IC0xKSB7Ci0gICAgKCp2YXJpYWJsZXMpWyJmaXhl
ZF9zaXplIl0gPSBTaW1wbGVJdG9hKGZpeGVkX3NpemUpOwotICB9Ci0gICgqdmFyaWFibGVzKVsi
bWVzc2FnZV9uYW1lIl0gPSBkZXNjcmlwdG9yLT5jb250YWluaW5nX3R5cGUoKS0+bmFtZSgpOwot
ICAoKnZhcmlhYmxlcylbImVtcHR5X2FycmF5X25hbWUiXSA9IEVtcHR5QXJyYXlOYW1lKHBhcmFt
cywgZGVzY3JpcHRvcik7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1Q
cmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1QcmltaXRpdmVGaWVsZEdlbmVyYXRvcihjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGNvbnN0IFBhcmFtcyYgcGFyYW1zKQotICA6IEZp
ZWxkR2VuZXJhdG9yKHBhcmFtcyksIGRlc2NyaXB0b3JfKGRlc2NyaXB0b3IpIHsKLSAgU2V0UHJp
bWl0aXZlVmFyaWFibGVzKGRlc2NyaXB0b3IsIHBhcmFtcywgJnZhcmlhYmxlc18pOwotfQotCi1Q
cmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6flByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKCkge30KLQot
Ym9vbCBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6U2F2ZWREZWZhdWx0TmVlZGVkKCkgY29uc3Qg
ewotICByZXR1cm4gdmFyaWFibGVzXy5maW5kKCJkZWZhdWx0X2NvbnN0YW50IikgIT0gdmFyaWFi
bGVzXy5lbmQoKTsKLX0KLQotdm9pZCBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVJ
bml0U2F2ZWREZWZhdWx0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBpZiAo
dmFyaWFibGVzXy5maW5kKCJkZWZhdWx0X2NvbnN0YW50IikgIT0gdmFyaWFibGVzXy5lbmQoKSkg
ewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiJGRlZmF1bHRfY29uc3Rh
bnQkID0gJGRlZmF1bHRfY29uc3RhbnRfdmFsdWUkO1xuIik7Ci0gIH0KLX0KLQotdm9pZCBQcmlt
aXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50
ZXIsIGJvb2wgbGF6eV9pbml0KSBjb25zdCB7Ci0gIGlmICh2YXJpYWJsZXNfLmZpbmQoImRlZmF1
bHRfY29uc3RhbnQiKSAhPSB2YXJpYWJsZXNfLmVuZCgpKSB7Ci0gICAgLy8gVGhvc2UgcHJpbWl0
aXZlIHR5cGVzIHRoYXQgbmVlZCBhIHNhdmVkIGRlZmF1bHQuCi0gICAgaWYgKGxhenlfaW5pdCkg
ewotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgInByaXZhdGUgc3Rh
dGljICR0eXBlJCAkZGVmYXVsdF9jb25zdGFudCQ7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAg
cHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgInByaXZhdGUgc3RhdGljIGZpbmFs
ICR0eXBlJCAkZGVmYXVsdF9jb25zdGFudCQgPVxuIgotICAgICAgICAiICAgICRkZWZhdWx0X2Nv
bnN0YW50X3ZhbHVlJDtcbiIpOwotICAgIH0KLSAgfQotCi0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgInB1YmxpYyAkdHlwZSQgJG5hbWUkO1xuIik7Ci0KLSAgaWYgKHBhcmFtc18u
Z2VuZXJhdGVfaGFzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
InB1YmxpYyBib29sZWFuIGhhcyRjYXBpdGFsaXplZF9uYW1lJDtcbiIpOwotICB9Ci19Ci0KLXZv
aWQgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVDbGVhckNvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAi
JG5hbWUkID0gJGRlZmF1bHRfY29weV9pZl9uZWVkZWQkO1xuIik7Ci0KLSAgaWYgKHBhcmFtc18u
Z2VuZXJhdGVfaGFzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
ImhhcyRjYXBpdGFsaXplZF9uYW1lJCA9IGZhbHNlO1xuIik7Ci0gIH0KLX0KLQotdm9pZCBQcmlt
aXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQcmludGVyKiBw
cmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgInRoaXMu
JG5hbWUkID0gaW5wdXQucmVhZCRjYXBpdGFsaXplZF90eXBlJCgpO1xuIik7Ci0KLSAgaWYgKHBh
cmFtc18uZ2VuZXJhdGVfaGFzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICAgImhhcyRjYXBpdGFsaXplZF9uYW1lJCA9IHRydWU7XG4iKTsKLSAgfQotfQotCi12b2lk
IFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvbmRpdGlv
bmFsKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIGlmIChwYXJhbXNfLnVzZV9yZWZl
cmVuY2VfdHlwZXNfZm9yX3ByaW1pdGl2ZXMoKSkgewotICAgIC8vIEZvciByZWZlcmVuY2UgdHlw
ZSBtb2RlLCBzZXJpYWxpemUgYmFzZWQgb24gZXF1YWxpdHkKLSAgICAvLyB0byBudWxsLgotICAg
IHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaWYgKHRoaXMuJG5hbWUkICE9IG51
bGwpIHtcbiIpOwotICAgIHJldHVybjsKLSAgfQotICBpZiAocGFyYW1zXy5nZW5lcmF0ZV9oYXMo
KSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaWYgKGhhcyRjYXBp
dGFsaXplZF9uYW1lJCB8fCAiKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICAgImlmICgiKTsKLSAgfQotICBKYXZhVHlwZSBqYXZhX3R5cGUgPSBHZXRK
YXZhVHlwZShkZXNjcmlwdG9yXyk7Ci0gIGlmIChJc0FycmF5VHlwZShqYXZhX3R5cGUpKSB7Ci0g
ICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIhamF2YS51dGlsLkFycmF5cy5l
cXVhbHModGhpcy4kbmFtZSQsICRkZWZhdWx0JCkpIHtcbiIpOwotICB9IGVsc2UgaWYgKElzUmVm
ZXJlbmNlVHlwZShqYXZhX3R5cGUpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywK
LSAgICAgICIhdGhpcy4kbmFtZSQuZXF1YWxzKCRkZWZhdWx0JCkpIHtcbiIpOwotICB9IGVsc2Ug
aWYgKGphdmFfdHlwZSA9PSBKQVZBVFlQRV9GTE9BVCkgewotICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgICAiamF2YS5sYW5nLkZsb2F0LmZsb2F0VG9JbnRCaXRzKHRoaXMuJG5h
bWUkKVxuIgotICAgICAgIiAgICAhPSBqYXZhLmxhbmcuRmxvYXQuZmxvYXRUb0ludEJpdHMoJGRl
ZmF1bHQkKSkge1xuIik7Ci0gIH0gZWxzZSBpZiAoamF2YV90eXBlID09IEpBVkFUWVBFX0RPVUJM
RSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiamF2YS5sYW5nLkRv
dWJsZS5kb3VibGVUb0xvbmdCaXRzKHRoaXMuJG5hbWUkKVxuIgotICAgICAgIiAgICAhPSBqYXZh
LmxhbmcuRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHMoJGRlZmF1bHQkKSkge1xuIik7Ci0gIH0gZWxz
ZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJ0aGlzLiRuYW1lJCAh
PSAkZGVmYXVsdCQpIHtcbiIpOwotICB9Ci19Ci0KLXZvaWQgUHJpbWl0aXZlRmllbGRHZW5lcmF0
b3I6OgotR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29u
c3QgewotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3JlcXVpcmVkKCkgJiYgIXBhcmFtc18uZ2VuZXJh
dGVfaGFzKCkpIHsKLSAgICAvLyBBbHdheXMgc2VyaWFsaXplIGEgcmVxdWlyZWQgZmllbGQgaWYg
d2UgZG9uJ3QgaGF2ZSB0aGUgJ2hhcycgc2lnbmFsLgotICAgIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgICAib3V0cHV0LndyaXRlJGNhcGl0YWxpemVkX3R5cGUkKCRudW1iZXIkLCB0
aGlzLiRuYW1lJCk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBHZW5lcmF0ZVNlcmlhbGl6YXRpb25D
b25kaXRpb25hbChwcmludGVyKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICAgIiAgb3V0cHV0LndyaXRlJGNhcGl0YWxpemVkX3R5cGUkKCRudW1iZXIkLCB0aGlzLiRuYW1l
JCk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0KLX0KLQotdm9pZCBQcmltaXRpdmVGaWVsZEdlbmVy
YXRvcjo6Ci1HZW5lcmF0ZVNlcmlhbGl6ZWRTaXplQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3QgewotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3JlcXVpcmVkKCkgJiYgIXBhcmFtc18uZ2Vu
ZXJhdGVfaGFzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgInNp
emUgKz0gY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLkNvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm9c
biIKLSAgICAgICIgICAgLmNvbXB1dGUkY2FwaXRhbGl6ZWRfdHlwZSRTaXplKCRudW1iZXIkLCB0
aGlzLiRuYW1lJCk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBHZW5lcmF0ZVNlcmlhbGl6YXRpb25D
b25kaXRpb25hbChwcmludGVyKTsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICAgIiAgc2l6ZSArPSBjb20uZ29vZ2xlLnByb3RvYnVmLm5hbm8uQ29kZWRPdXRwdXRCeXRlQnVm
ZmVyTmFub1xuIgotICAgICAgIiAgICAgIC5jb21wdXRlJGNhcGl0YWxpemVkX3R5cGUkU2l6ZSgk
bnVtYmVyJCwgdGhpcy4kbmFtZSQpO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQg
UmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZUZpeENsb25lZENvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiaWYgKHRoaXMuJG5hbWUkICE9IG51bGwgJiYgdGhpcy4kbmFtZSQubGVuZ3RoID4g
MCkge1xuIgotICAgICIgIGNsb25lZC4kbmFtZSQgPSB0aGlzLiRuYW1lJC5jbG9uZSgpO1xuIgot
ICAgICJ9XG4iKTsKLX0KLQotdm9pZCBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0
ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gV2UgZGVmaW5l
IGVxdWFsaXR5IGFzIHNlcmlhbGl6ZWQgZm9ybSBlcXVhbGl0eS4gSWYgZ2VuZXJhdGVfaGFzKCks
Ci0gIC8vIHRoZW4gaWYgdGhlIGZpZWxkIHZhbHVlIGVxdWFscyB0aGUgZGVmYXVsdCB2YWx1ZSBp
biBib3RoIG1lc3NhZ2VzLAotICAvLyBidXQgb25lJ3MgJ2hhcycgZmllbGQgaXMgc2V0IGFuZCB0
aGUgb3RoZXIncyBpcyBub3QsIHRoZSBzZXJpYWxpemVkCi0gIC8vIGZvcm1zIGFyZSBkaWZmZXJl
bnQgYW5kIHdlIHNob3VsZCByZXR1cm4gZmFsc2UuCi0gIEphdmFUeXBlIGphdmFfdHlwZSA9IEdl
dEphdmFUeXBlKGRlc2NyaXB0b3JfKTsKLSAgaWYgKGphdmFfdHlwZSA9PSBKQVZBVFlQRV9CWVRF
UykgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiaWYgKCFqYXZhLnV0
aWwuQXJyYXlzLmVxdWFscyh0aGlzLiRuYW1lJCwgb3RoZXIuJG5hbWUkKSIpOwotICAgIGlmIChw
YXJhbXNfLmdlbmVyYXRlX2hhcygpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICAgICAiXG4iCi0gICAgICAgICIgICAgfHwgKGphdmEudXRpbC5BcnJheXMuZXF1YWxz
KHRoaXMuJG5hbWUkLCAkZGVmYXVsdCQpXG4iCi0gICAgICAgICIgICAgICAgICYmIHRoaXMuaGFz
JGNhcGl0YWxpemVkX25hbWUkICE9IG90aGVyLmhhcyRjYXBpdGFsaXplZF9uYW1lJCkiKTsKLSAg
ICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoIikge1xuIgotICAgICAgIiAgcmV0dXJuIGZhbHNlO1xu
IgotICAgICAgIn1cbiIpOwotICB9IGVsc2UgaWYgKGphdmFfdHlwZSA9PSBKQVZBVFlQRV9TVFJJ
TkcKLSAgICAgIHx8IHBhcmFtc18udXNlX3JlZmVyZW5jZV90eXBlc19mb3JfcHJpbWl0aXZlcygp
KSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJpZiAodGhpcy4kbmFt
ZSQgPT0gbnVsbCkge1xuIgotICAgICAgIiAgaWYgKG90aGVyLiRuYW1lJCAhPSBudWxsKSB7XG4i
Ci0gICAgICAiICAgIHJldHVybiBmYWxzZTtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICJ9IGVs
c2UgaWYgKCF0aGlzLiRuYW1lJC5lcXVhbHMob3RoZXIuJG5hbWUkKSIpOwotICAgIGlmIChwYXJh
bXNfLmdlbmVyYXRlX2hhcygpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICAgICAiXG4iCi0gICAgICAgICIgICAgfHwgKHRoaXMuJG5hbWUkLmVxdWFscygkZGVmYXVs
dCQpXG4iCi0gICAgICAgICIgICAgICAgICYmIHRoaXMuaGFzJGNhcGl0YWxpemVkX25hbWUkICE9
IG90aGVyLmhhcyRjYXBpdGFsaXplZF9uYW1lJCkiKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJp
bnQoIikge1xuIgotICAgICAgIiAgcmV0dXJuIGZhbHNlO1xuIgotICAgICAgIn1cbiIpOwotICB9
IGVsc2UgaWYgKGphdmFfdHlwZSA9PSBKQVZBVFlQRV9GTE9BVCkgewotICAgIHByaW50ZXItPlBy
aW50KHZhcmlhYmxlc18sCi0gICAgICAie1xuIgotICAgICAgIiAgaW50IGJpdHMgPSBqYXZhLmxh
bmcuRmxvYXQuZmxvYXRUb0ludEJpdHModGhpcy4kbmFtZSQpO1xuIgotICAgICAgIiAgaWYgKGJp
dHMgIT0gamF2YS5sYW5nLkZsb2F0LmZsb2F0VG9JbnRCaXRzKG90aGVyLiRuYW1lJCkiKTsKLSAg
ICBpZiAocGFyYW1zXy5nZW5lcmF0ZV9oYXMoKSkgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAgICAgIlxuIgotICAgICAgICAiICAgICAgfHwgKGJpdHMgPT0gamF2YS5s
YW5nLkZsb2F0LmZsb2F0VG9JbnRCaXRzKCRkZWZhdWx0JClcbiIKLSAgICAgICAgIiAgICAgICAg
ICAmJiB0aGlzLmhhcyRjYXBpdGFsaXplZF9uYW1lJCAhPSBvdGhlci5oYXMkY2FwaXRhbGl6ZWRf
bmFtZSQpIik7Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50KCIpIHtcbiIKLSAgICAgICIgICAg
cmV0dXJuIGZhbHNlO1xuIgotICAgICAgIiAgfVxuIgotICAgICAgIn1cbiIpOwotICB9IGVsc2Ug
aWYgKGphdmFfdHlwZSA9PSBKQVZBVFlQRV9ET1VCTEUpIHsKLSAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgIntcbiIKLSAgICAgICIgIGxvbmcgYml0cyA9IGphdmEubGFuZy5E
b3VibGUuZG91YmxlVG9Mb25nQml0cyh0aGlzLiRuYW1lJCk7XG4iCi0gICAgICAiICBpZiAoYml0
cyAhPSBqYXZhLmxhbmcuRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHMob3RoZXIuJG5hbWUkKSIpOwot
ICAgIGlmIChwYXJhbXNfLmdlbmVyYXRlX2hhcygpKSB7Ci0gICAgICBwcmludGVyLT5QcmludCh2
YXJpYWJsZXNfLAotICAgICAgICAiXG4iCi0gICAgICAgICIgICAgICB8fCAoYml0cyA9PSBqYXZh
LmxhbmcuRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHMoJGRlZmF1bHQkKVxuIgotICAgICAgICAiICAg
ICAgICAgICYmIHRoaXMuaGFzJGNhcGl0YWxpemVkX25hbWUkICE9IG90aGVyLmhhcyRjYXBpdGFs
aXplZF9uYW1lJCkiKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoIikge1xuIgotICAgICAg
IiAgICByZXR1cm4gZmFsc2U7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAifVxuIik7Ci0gIH0g
ZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJpZiAodGhpcy4k
bmFtZSQgIT0gb3RoZXIuJG5hbWUkIik7Ci0gICAgaWYgKHBhcmFtc18uZ2VuZXJhdGVfaGFzKCkp
IHsKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAgICJcbiIKLSAgICAg
ICAgIiAgICB8fCAodGhpcy4kbmFtZSQgPT0gJGRlZmF1bHQkXG4iCi0gICAgICAgICIgICAgICAg
ICYmIHRoaXMuaGFzJGNhcGl0YWxpemVkX25hbWUkICE9IG90aGVyLmhhcyRjYXBpdGFsaXplZF9u
YW1lJCkiKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoIikge1xuIgotICAgICAgIiAgcmV0
dXJuIGZhbHNlO1xuIgotICAgICAgIn1cbiIpOwotICB9Ci19Ci0KLXZvaWQgUHJpbWl0aXZlRmll
bGRHZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNoQ29kZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0IHsKLSAgSmF2YVR5cGUgamF2YV90eXBlID0gR2V0SmF2YVR5cGUoZGVzY3JpcHRvcl8p
OwotICBpZiAoamF2YV90eXBlID09IEpBVkFUWVBFX0JZVEVTKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQodmFyaWFibGVzXywKLSAgICAgICJyZXN1bHQgPSAzMSAqIHJlc3VsdCArIGphdmEudXRpbC5B
cnJheXMuaGFzaENvZGUodGhpcy4kbmFtZSQpO1xuIik7Ci0gIH0gZWxzZSBpZiAoamF2YV90eXBl
ID09IEpBVkFUWVBFX1NUUklORwotICAgICAgfHwgcGFyYW1zXy51c2VfcmVmZXJlbmNlX3R5cGVz
X2Zvcl9wcmltaXRpdmVzKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICAgInJlc3VsdCA9IDMxICogcmVzdWx0XG4iCi0gICAgICAiICAgICsgKHRoaXMuJG5hbWUkID09
IG51bGwgPyAwIDogdGhpcy4kbmFtZSQuaGFzaENvZGUoKSk7XG4iKTsKLSAgfSBlbHNlIHsKLSAg
ICBzd2l0Y2ggKGphdmFfdHlwZSkgewotICAgICAgLy8gRm9yIGFsbCBKYXZhIHByaW1pdGl2ZSB0
eXBlcyBiZWxvdywgdGhlIGhhc2ggY29kZXMgbWF0Y2ggdGhlCi0gICAgICAvLyByZXN1bHRzIG9m
IEJveGVkVHlwZS52YWx1ZU9mKHByaW1pdGl2ZVZhbHVlKS5oYXNoQ29kZSgpLgotICAgICAgY2Fz
ZSBKQVZBVFlQRV9JTlQ6Ci0gICAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAgICAgInJlc3VsdCA9IDMxICogcmVzdWx0ICsgdGhpcy4kbmFtZSQ7XG4iKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEpBVkFUWVBFX0xPTkc6Ci0gICAgICAgIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgICAgICAgInJlc3VsdCA9IDMxICogcmVzdWx0XG4iCi0gICAgICAg
ICAgIiAgICArIChpbnQpICh0aGlzLiRuYW1lJCBeICh0aGlzLiRuYW1lJCA+Pj4gMzIpKTtcbiIp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSkFWQVRZUEVfRkxPQVQ6Ci0gICAgICAgIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAgICAgInJlc3VsdCA9IDMxICogcmVzdWx0
XG4iCi0gICAgICAgICAgIiAgICArIGphdmEubGFuZy5GbG9hdC5mbG9hdFRvSW50Qml0cyh0aGlz
LiRuYW1lJCk7XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEpBVkFUWVBFX0RPVUJM
RToKLSAgICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgICAie1xuIgot
ICAgICAgICAgICIgIGxvbmcgdiA9IGphdmEubGFuZy5Eb3VibGUuZG91YmxlVG9Mb25nQml0cyh0
aGlzLiRuYW1lJCk7XG4iCi0gICAgICAgICAgIiAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyAoaW50
KSAodiBeICh2ID4+PiAzMikpO1xuIgotICAgICAgICAgICJ9XG4iKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEpBVkFUWVBFX0JPT0xFQU46Ci0gICAgICAgIHByaW50ZXItPlByaW50KHZh
cmlhYmxlc18sCi0gICAgICAgICAgInJlc3VsdCA9IDMxICogcmVzdWx0ICsgKHRoaXMuJG5hbWUk
ID8gMTIzMSA6IDEyMzcpO1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgR09PR0xFX0xPRyhFUlJPUikgPDwgInVua25vd24gamF2YSB0eXBlIGZvciBwcmltaXRp
dmUgZmllbGQiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi1BY2Nlc3NvclByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUFjY2Vzc29yUHJpbWl0aXZl
RmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICBj
b25zdCBQYXJhbXMmIHBhcmFtcywgaW50IGhhc19iaXRfaW5kZXgpCi0gIDogRmllbGRHZW5lcmF0
b3IocGFyYW1zKSwgZGVzY3JpcHRvcl8oZGVzY3JpcHRvcikgewotICBTZXRQcmltaXRpdmVWYXJp
YWJsZXMoZGVzY3JpcHRvciwgcGFyYW1zLCAmdmFyaWFibGVzXyk7Ci0gIFNldEJpdE9wZXJhdGlv
blZhcmlhYmxlcygiaGFzIiwgaGFzX2JpdF9pbmRleCwgJnZhcmlhYmxlc18pOwotfQotCi1BY2Nl
c3NvclByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjp+QWNjZXNzb3JQcmltaXRpdmVGaWVsZEdlbmVy
YXRvcigpIHt9Ci0KLWJvb2wgQWNjZXNzb3JQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6U2F2ZWRE
ZWZhdWx0TmVlZGVkKCkgY29uc3QgewotICByZXR1cm4gdmFyaWFibGVzXy5maW5kKCJkZWZhdWx0
X2NvbnN0YW50IikgIT0gdmFyaWFibGVzXy5lbmQoKTsKLX0KLQotdm9pZCBBY2Nlc3NvclByaW1p
dGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlSW5pdFNhdmVkRGVmYXVsdENvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgaWYgKHZhcmlhYmxlc18uZmluZCgiZGVmYXVsdF9j
b25zdGFudCIpICE9IHZhcmlhYmxlc18uZW5kKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICAgIiRkZWZhdWx0X2NvbnN0YW50JCA9ICRkZWZhdWx0X2NvbnN0YW50X3Zh
bHVlJDtcbiIpOwotICB9Ci19Ci0KLXZvaWQgQWNjZXNzb3JQcmltaXRpdmVGaWVsZEdlbmVyYXRv
cjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgbGF6eV9pbml0
KSBjb25zdCB7Ci0gIGlmICh2YXJpYWJsZXNfLmZpbmQoImRlZmF1bHRfY29uc3RhbnQiKSAhPSB2
YXJpYWJsZXNfLmVuZCgpKSB7Ci0gICAgLy8gVGhvc2UgcHJpbWl0aXZlIHR5cGVzIHRoYXQgbmVl
ZCBhIHNhdmVkIGRlZmF1bHQuCi0gICAgaWYgKGxhenlfaW5pdCkgewotICAgICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgInByaXZhdGUgc3RhdGljICR0eXBlJCAkZGVmYXVs
dF9jb25zdGFudCQ7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAgICAgInByaXZhdGUgc3RhdGljIGZpbmFsICR0eXBlJCAkZGVmYXVsdF9j
b25zdGFudCQgPVxuIgotICAgICAgICAiICAgICRkZWZhdWx0X2NvbnN0YW50X3ZhbHVlJDtcbiIp
OwotICAgIH0KLSAgfQotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJwcml2YXRl
ICR0eXBlJCAkbmFtZSRfO1xuIgotICAgICJwdWJsaWMgJHR5cGUkIGdldCRjYXBpdGFsaXplZF9u
YW1lJCgpIHtcbiIKLSAgICAiICByZXR1cm4gJG5hbWUkXztcbiIKLSAgICAifVxuIgotICAgICJw
dWJsaWMgJG1lc3NhZ2VfbmFtZSQgc2V0JGNhcGl0YWxpemVkX25hbWUkKCR0eXBlJCB2YWx1ZSkg
e1xuIik7Ci0gIGlmIChJc1JlZmVyZW5jZVR5cGUoR2V0SmF2YVR5cGUoZGVzY3JpcHRvcl8pKSkg
ewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiICBpZiAodmFsdWUgPT0g
bnVsbCkge1xuIgotICAgICAgIiAgICB0aHJvdyBuZXcgamF2YS5sYW5nLk51bGxQb2ludGVyRXhj
ZXB0aW9uKCk7XG4iCi0gICAgICAiICB9XG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICIgICRuYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAiICAkc2V0X2hhcyQ7XG4i
Ci0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAgIn1cbiIKLSAgICAicHVibGljIGJvb2xlYW4g
aGFzJGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIHJldHVybiAkZ2V0X2hhcyQ7XG4i
Ci0gICAgIn1cbiIKLSAgICAicHVibGljICRtZXNzYWdlX25hbWUkIGNsZWFyJGNhcGl0YWxpemVk
X25hbWUkKCkge1xuIgotICAgICIgICRuYW1lJF8gPSAkZGVmYXVsdF9jb3B5X2lmX25lZWRlZCQ7
XG4iCi0gICAgIiAgJGNsZWFyX2hhcyQ7XG4iCi0gICAgIiAgcmV0dXJuIHRoaXM7XG4iCi0gICAg
In1cbiIpOwotfQotCi12b2lkIEFjY2Vzc29yUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAiJG5hbWUkXyA9ICRkZWZhdWx0X2NvcHlfaWZfbmVlZGVk
JDtcbiIpOwotfQotCi12b2lkIEFjY2Vzc29yUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2Vu
ZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVy
LT5QcmludCh2YXJpYWJsZXNfLAotICAgICIkbmFtZSRfID0gaW5wdXQucmVhZCRjYXBpdGFsaXpl
ZF90eXBlJCgpO1xuIgotICAgICIkc2V0X2hhcyQ7XG4iKTsKLX0KLQotdm9pZCBBY2Nlc3NvclBy
aW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAiaWYgKCRnZXRfaGFzJCkge1xuIgotICAgICIgIG91dHB1dC53cml0ZSRjYXBpdGFsaXplZF90
eXBlJCgkbnVtYmVyJCwgJG5hbWUkXyk7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIEFjY2Vz
c29yUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiaWYgKCRnZXRfaGFzJCkge1xuIgotICAgICIgIHNpemUgKz0gY29tLmdvb2dsZS5w
cm90b2J1Zi5uYW5vLkNvZGVkT3V0cHV0Qnl0ZUJ1ZmZlck5hbm9cbiIKLSAgICAiICAgICAgLmNv
bXB1dGUkY2FwaXRhbGl6ZWRfdHlwZSRTaXplKCRudW1iZXIkLCAkbmFtZSRfKTtcbiIKLSAgICAi
fVxuIik7Ci19Ci0KLXZvaWQgQWNjZXNzb3JQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5l
cmF0ZUVxdWFsc0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgc3dpdGNoIChH
ZXRKYXZhVHlwZShkZXNjcmlwdG9yXykpIHsKLSAgICAvLyBGb3IgYWxsIEphdmEgcHJpbWl0aXZl
IHR5cGVzIGJlbG93LCB0aGUgZXF1YWxpdHkgY2hlY2tzIG1hdGNoIHRoZQotICAgIC8vIHJlc3Vs
dHMgb2YgQm94ZWRUeXBlLnZhbHVlT2YocHJpbWl0aXZlVmFsdWUpLmVxdWFscyhvdGhlclZhbHVl
KS4KLSAgICBjYXNlIEpBVkFUWVBFX0ZMT0FUOgotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFi
bGVzXywKLSAgICAgICAgImlmICgkZGlmZmVyZW50X2hhcyRcbiIKLSAgICAgICAgIiAgICB8fCBq
YXZhLmxhbmcuRmxvYXQuZmxvYXRUb0ludEJpdHMoJG5hbWUkXylcbiIKLSAgICAgICAgIiAgICAg
ICAgIT0gamF2YS5sYW5nLkZsb2F0LmZsb2F0VG9JbnRCaXRzKG90aGVyLiRuYW1lJF8pKSB7XG4i
Ci0gICAgICAgICIgIHJldHVybiBmYWxzZTtcbiIKLSAgICAgICAgIn1cbiIpOwotICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBKQVZBVFlQRV9ET1VCTEU6Ci0gICAgICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICAgICAiaWYgKCRkaWZmZXJlbnRfaGFzJFxuIgotICAgICAgICAiICAgIHx8
IGphdmEubGFuZy5Eb3VibGUuZG91YmxlVG9Mb25nQml0cygkbmFtZSRfKVxuIgotICAgICAgICAi
ICAgICAgICAhPSBqYXZhLmxhbmcuRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHMob3RoZXIuJG5hbWUk
XykpIHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIGZhbHNlO1xuIgotICAgICAgICAifVxuIik7Ci0g
ICAgICBicmVhazsKLSAgICBjYXNlIEpBVkFUWVBFX0lOVDoKLSAgICBjYXNlIEpBVkFUWVBFX0xP
Tkc6Ci0gICAgY2FzZSBKQVZBVFlQRV9CT09MRUFOOgotICAgICAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAgICAgImlmICgkZGlmZmVyZW50X2hhcyRcbiIKLSAgICAgICAgIiAgICB8
fCAkbmFtZSRfICE9IG90aGVyLiRuYW1lJF8pIHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIGZhbHNl
O1xuIgotICAgICAgICAifVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEpBVkFUWVBFX1NU
UklORzoKLSAgICAgIC8vIEFjY2Vzc29yIHN0eWxlIHdvdWxkIGd1YXJhbnRlZSAkbmFtZSRfIG5v
bi1udWxsCi0gICAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAiaWYgKCRk
aWZmZXJlbnRfaGFzJFxuIgotICAgICAgICAiICAgIHx8ICEkbmFtZSRfLmVxdWFscyhvdGhlci4k
bmFtZSRfKSkge1xuIgotICAgICAgICAiICByZXR1cm4gZmFsc2U7XG4iCi0gICAgICAgICJ9XG4i
KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSkFWQVRZUEVfQllURVM6Ci0gICAgICAvLyBBY2Nl
c3NvciBzdHlsZSB3b3VsZCBndWFyYW50ZWUgJG5hbWUkXyBub24tbnVsbAotICAgICAgcHJpbnRl
ci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgImlmICgkZGlmZmVyZW50X2hhcyRcbiIKLSAg
ICAgICAgIiAgICB8fCAhamF2YS51dGlsLkFycmF5cy5lcXVhbHMoJG5hbWUkXywgb3RoZXIuJG5h
bWUkXykpIHtcbiIKLSAgICAgICAgIiAgcmV0dXJuIGZhbHNlO1xuIgotICAgICAgICAifVxuIik7
Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xPRyhFUlJPUikgPDwg
InVua25vd24gamF2YSB0eXBlIGZvciBwcmltaXRpdmUgZmllbGQiOwotICAgICAgYnJlYWs7Ci0g
IH0KLX0KLQotdm9pZCBBY2Nlc3NvclByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRl
SGFzaENvZGVDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHN3aXRjaCAoR2V0
SmF2YVR5cGUoZGVzY3JpcHRvcl8pKSB7Ci0gICAgLy8gRm9yIGFsbCBKYXZhIHByaW1pdGl2ZSB0
eXBlcyBiZWxvdywgdGhlIGhhc2ggY29kZXMgbWF0Y2ggdGhlCi0gICAgLy8gcmVzdWx0cyBvZiBC
b3hlZFR5cGUudmFsdWVPZihwcmltaXRpdmVWYWx1ZSkuaGFzaENvZGUoKS4KLSAgICBjYXNlIEpB
VkFUWVBFX0lOVDoKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAgICJy
ZXN1bHQgPSAzMSAqIHJlc3VsdCArICRuYW1lJF87XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh
c2UgSkFWQVRZUEVfTE9ORzoKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAg
ICAgICJyZXN1bHQgPSAzMSAqIHJlc3VsdCArIChpbnQpICgkbmFtZSRfIF4gKCRuYW1lJF8gPj4+
IDMyKSk7XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSkFWQVRZUEVfRkxPQVQ6Ci0gICAg
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAicmVzdWx0ID0gMzEgKiByZXN1
bHQgK1xuIgotICAgICAgICAiICAgIGphdmEubGFuZy5GbG9hdC5mbG9hdFRvSW50Qml0cygkbmFt
ZSRfKTtcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKQVZBVFlQRV9ET1VCTEU6Ci0gICAg
ICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAie1xuIgotICAgICAgICAiICBs
b25nIHYgPSBqYXZhLmxhbmcuRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHMoJG5hbWUkXyk7XG4iCi0g
ICAgICAgICIgIHJlc3VsdCA9IDMxICogcmVzdWx0ICsgKGludCkgKHYgXiAodiA+Pj4gMzIpKTtc
biIKLSAgICAgICAgIn1cbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKQVZBVFlQRV9CT09M
RUFOOgotICAgICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICAgInJlc3VsdCA9
IDMxICogcmVzdWx0ICsgKCRuYW1lJF8gPyAxMjMxIDogMTIzNyk7XG4iKTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgSkFWQVRZUEVfU1RSSU5HOgotICAgICAgLy8gQWNjZXNzb3Igc3R5bGUgd291
bGQgZ3VhcmFudGVlICRuYW1lJF8gbm9uLW51bGwKLSAgICAgIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sCi0gICAgICAgICJyZXN1bHQgPSAzMSAqIHJlc3VsdCArICRuYW1lJF8uaGFzaENvZGUo
KTtcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKQVZBVFlQRV9CWVRFUzoKLSAgICAgIC8v
IEFjY2Vzc29yIHN0eWxlIHdvdWxkIGd1YXJhbnRlZSAkbmFtZSRfIG5vbi1udWxsCi0gICAgICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgICAicmVzdWx0ID0gMzEgKiByZXN1bHQg
KyBqYXZhLnV0aWwuQXJyYXlzLmhhc2hDb2RlKCRuYW1lJF8pO1xuIik7Ci0gICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xPRyhFUlJPUikgPDwgInVua25vd24gamF2YSB0
eXBlIGZvciBwcmltaXRpdmUgZmllbGQiOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi1QcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yOjpQcmltaXRpdmVPbmVvZkZp
ZWxkR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29u
c3QgUGFyYW1zJiBwYXJhbXMpCi0gIDogRmllbGRHZW5lcmF0b3IocGFyYW1zKSwgZGVzY3JpcHRv
cl8oZGVzY3JpcHRvcikgewotICAgIFNldFByaW1pdGl2ZVZhcmlhYmxlcyhkZXNjcmlwdG9yLCBw
YXJhbXMsICZ2YXJpYWJsZXNfKTsKLSAgICBTZXRDb21tb25PbmVvZlZhcmlhYmxlcyhkZXNjcmlw
dG9yLCAmdmFyaWFibGVzXyk7Ci19Ci0KLVByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3I6On5Q
cmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yKCkge30KLQotdm9pZCBQcmltaXRpdmVPbmVvZkZp
ZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZU1lbWJlcnMoCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIs
IGJvb2wgLyp1bnVzZWQgbGF6eV9pbml0Ki8pIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFy
aWFibGVzXywKLSAgICAicHVibGljIGJvb2xlYW4gaGFzJGNhcGl0YWxpemVkX25hbWUkKCkge1xu
IgotICAgICIgIHJldHVybiAkaGFzX29uZW9mX2Nhc2UkO1xuIgotICAgICJ9XG4iCi0gICAgInB1
YmxpYyAkdHlwZSQgZ2V0JGNhcGl0YWxpemVkX25hbWUkKCkge1xuIgotICAgICIgIGlmICgkaGFz
X29uZW9mX2Nhc2UkKSB7XG4iCi0gICAgIiAgICByZXR1cm4gKCR0eXBlJCkgKCRib3hlZF90eXBl
JCkgdGhpcy4kb25lb2ZfbmFtZSRfO1xuIgotICAgICIgIH1cbiIKLSAgICAiICByZXR1cm4gJGRl
ZmF1bHQkO1xuIgotICAgICJ9XG4iCi0gICAgInB1YmxpYyAkbWVzc2FnZV9uYW1lJCBzZXQkY2Fw
aXRhbGl6ZWRfbmFtZSQoJHR5cGUkIHZhbHVlKSB7XG4iCi0gICAgIiAgJHNldF9vbmVvZl9jYXNl
JDtcbiIKLSAgICAiICB0aGlzLiRvbmVvZl9uYW1lJF8gPSB2YWx1ZTtcbiIKLSAgICAiICByZXR1
cm4gdGhpcztcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUHJpbWl0aXZlT25lb2ZGaWVsZEdl
bmVyYXRvcjo6R2VuZXJhdGVDbGVhckNvZGUoCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgLy8gTm8gY2xlYXIgbWV0aG9kIGZvciBvbmVvZiBmaWVsZHMuCi19Ci0KLXZvaWQg
UHJpbWl0aXZlT25lb2ZGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVNZXJnaW5nQ29kZSgKLSAgICBp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICJ0aGlzLiRvbmVvZl9uYW1lJF8gPSBpbnB1dC5yZWFkJGNhcGl0YWxpemVkX3R5cGUk
KCk7XG4iCi0gICAgIiRzZXRfb25lb2ZfY2FzZSQ7XG4iKTsKLX0KLQotdm9pZCBQcmltaXRpdmVP
bmVvZkZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZVNlcmlhbGl6YXRpb25Db2RlKAotICAgIGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0g
ICAgImlmICgkaGFzX29uZW9mX2Nhc2UkKSB7XG4iCi0gICAgIiAgb3V0cHV0LndyaXRlJGNhcGl0
YWxpemVkX3R5cGUkKFxuIgotICAgICIgICAgICAkbnVtYmVyJCwgKCRib3hlZF90eXBlJCkgdGhp
cy4kb25lb2ZfbmFtZSRfKTtcbiIKLSAgICAifVxuIik7Ci19Ci0KLXZvaWQgUHJpbWl0aXZlT25l
b2ZGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoCi0gICAgaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAg
ICAiaWYgKCRoYXNfb25lb2ZfY2FzZSQpIHtcbiIKLSAgICAiICBzaXplICs9IGNvbS5nb29nbGUu
cHJvdG9idWYubmFuby5Db2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vXG4iCi0gICAgIiAgICAgIC5j
b21wdXRlJGNhcGl0YWxpemVkX3R5cGUkU2l6ZShcbiIKLSAgICAiICAgICAgICAgICRudW1iZXIk
LCAoJGJveGVkX3R5cGUkKSB0aGlzLiRvbmVvZl9uYW1lJF8pO1xuIgotICAgICJ9XG4iKTsKLX0K
LQotdm9pZCBQcmltaXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZUVxdWFsc0NvZGUo
Ci0gICAgaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgR2VuZXJhdGVPbmVvZkZpZWxk
RXF1YWxzKGRlc2NyaXB0b3JfLCB2YXJpYWJsZXNfLCBwcmludGVyKTsKLX0KLQotdm9pZCBQcmlt
aXRpdmVPbmVvZkZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZUhhc2hDb2RlQ29kZSgKLSAgICBpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBHZW5lcmF0ZU9uZW9mRmllbGRIYXNoQ29kZShk
ZXNjcmlwdG9yXywgdmFyaWFibGVzXywgcHJpbnRlcik7Ci19Ci0KLS8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQot
UmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6UmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdl
bmVyYXRvcigKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGNvbnN0IFBh
cmFtcyYgcGFyYW1zKQotICA6IEZpZWxkR2VuZXJhdG9yKHBhcmFtcyksIGRlc2NyaXB0b3JfKGRl
c2NyaXB0b3IpIHsKLSAgU2V0UHJpbWl0aXZlVmFyaWFibGVzKGRlc2NyaXB0b3IsIHBhcmFtcywg
JnZhcmlhYmxlc18pOwotfQotCi1SZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjp+UmVw
ZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgUmVwZWF0ZWRQcmltaXRp
dmVGaWVsZEdlbmVyYXRvcjo6Ci1HZW5lcmF0ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIs
IGJvb2wgLyp1bnVzZWQgaW5pdF9kZWZhdWx0cyovKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgInB1YmxpYyAkdHlwZSRbXSAkbmFtZSQ7XG4iKTsKLX0KLQotdm9p
ZCBSZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlQ2xlYXJDb2RlKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18s
Ci0gICAgIiRuYW1lJCA9ICRkZWZhdWx0JDtcbiIpOwotfQotCi12b2lkIFJlcGVhdGVkUHJpbWl0
aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJp
bnRlcikgY29uc3QgewotICAvLyBGaXJzdCwgZmlndXJlIG91dCB0aGUgbGVuZ3RoIG9mIHRoZSBh
cnJheSwgdGhlbiBwYXJzZS4KLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaW50
IGFycmF5TGVuZ3RoID0gY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5vLldpcmVGb3JtYXROYW5vXG4i
Ci0gICAgIiAgICAuZ2V0UmVwZWF0ZWRGaWVsZEFycmF5TGVuZ3RoKGlucHV0LCAkbm9uX3BhY2tl
ZF90YWckKTtcbiIKLSAgICAiaW50IGkgPSB0aGlzLiRuYW1lJCA9PSBudWxsID8gMCA6IHRoaXMu
JG5hbWUkLmxlbmd0aDtcbiIpOwotCi0gIGlmIChHZXRKYXZhVHlwZShkZXNjcmlwdG9yXykgPT0g
SkFWQVRZUEVfQllURVMpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
ImJ5dGVbXVtdIG5ld0FycmF5ID0gbmV3IGJ5dGVbaSArIGFycmF5TGVuZ3RoXVtdO1xuIik7Ci0g
IH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAgICIkdHlwZSRb
XSBuZXdBcnJheSA9IG5ldyAkdHlwZSRbaSArIGFycmF5TGVuZ3RoXTtcbiIpOwotICB9Ci0gIHBy
aW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgImlmIChpICE9IDApIHtcbiIKLSAgICAiICBq
YXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weSh0aGlzLiRuYW1lJCwgMCwgbmV3QXJyYXksIDAsIGkp
O1xuIgotICAgICJ9XG4iCi0gICAgImZvciAoOyBpIDwgbmV3QXJyYXkubGVuZ3RoIC0gMTsgaSsr
KSB7XG4iCi0gICAgIiAgbmV3QXJyYXlbaV0gPSBpbnB1dC5yZWFkJGNhcGl0YWxpemVkX3R5cGUk
KCk7XG4iCi0gICAgIiAgaW5wdXQucmVhZFRhZygpO1xuIgotICAgICJ9XG4iCi0gICAgIi8vIExh
c3Qgb25lIHdpdGhvdXQgcmVhZFRhZy5cbiIKLSAgICAibmV3QXJyYXlbaV0gPSBpbnB1dC5yZWFk
JGNhcGl0YWxpemVkX3R5cGUkKCk7XG4iCi0gICAgInRoaXMuJG5hbWUkID0gbmV3QXJyYXk7XG4i
KTsKLX0KLQotdm9pZCBSZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRl
TWVyZ2luZ0NvZGVGcm9tUGFja2VkKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHBy
aW50ZXItPlByaW50KAotICAgICJpbnQgbGVuZ3RoID0gaW5wdXQucmVhZFJhd1ZhcmludDMyKCk7
XG4iCi0gICAgImludCBsaW1pdCA9IGlucHV0LnB1c2hMaW1pdChsZW5ndGgpO1xuIik7Ci0KLSAg
Ly8gSWYgd2Uga25vdyB0aGUgZWxlbWVudHMgd2lsbCBhbGwgYmUgb2YgdGhlIHNhbWUgc2l6ZSwg
dGhlIGFycmF5TGVuZ3RoCi0gIC8vIGNhbiBiZSBjYWxjdWxhdGVkIG11Y2ggbW9yZSBlYXNpbHku
IEhvd2V2ZXIsIEZpeGVkU2l6ZSgpIHJldHVybnMgMSBmb3IKLSAgLy8gcmVwZWF0ZWQgYm9vbCBm
aWVsZHMsIHdoaWNoIGFyZSBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIGZpeGVkIHNpemUgb2YKLSAg
Ly8gMSBieXRlIHBlciB2YWx1ZSBvbmx5IGlmIHdlIGNvbnRyb2wgdGhlIG91dHB1dC4gT24gdGhl
IHdpcmUgdGhleSBjYW4KLSAgLy8gbGVnYWxseSBhcHBlYXIgYXMgdmFyaWFibGUtc2l6ZSBpbnRl
Z2Vycywgc28gd2UgbmVlZCB0byB1c2UgdGhlIHNsb3cKLSAgLy8gd2F5IGZvciByZXBlYXRlZCBi
b29sIGZpZWxkcy4KLSAgaWYgKGRlc2NyaXB0b3JfLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9y
OjpUWVBFX0JPT0wKLSAgICAgIHx8IEZpeGVkU2l6ZShkZXNjcmlwdG9yXy0+dHlwZSgpKSA9PSAt
MSkgewotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAiLy8gRmlyc3QgcGFz
cyB0byBjb21wdXRlIGFycmF5IGxlbmd0aC5cbiIKLSAgICAgICJpbnQgYXJyYXlMZW5ndGggPSAw
O1xuIgotICAgICAgImludCBzdGFydFBvcyA9IGlucHV0LmdldFBvc2l0aW9uKCk7XG4iCi0gICAg
ICAid2hpbGUgKGlucHV0LmdldEJ5dGVzVW50aWxMaW1pdCgpID4gMCkge1xuIgotICAgICAgIiAg
aW5wdXQucmVhZCRjYXBpdGFsaXplZF90eXBlJCgpO1xuIgotICAgICAgIiAgYXJyYXlMZW5ndGgr
KztcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiaW5wdXQucmV3aW5kVG9Qb3NpdGlvbihzdGFydFBv
cyk7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAg
ICAgImludCBhcnJheUxlbmd0aCA9IGxlbmd0aCAvICRmaXhlZF9zaXplJDtcbiIpOwotICB9Ci0K
LSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAiaW50IGkgPSB0aGlzLiRuYW1lJCA9
PSBudWxsID8gMCA6IHRoaXMuJG5hbWUkLmxlbmd0aDtcbiIKLSAgICAiJHR5cGUkW10gbmV3QXJy
YXkgPSBuZXcgJHR5cGUkW2kgKyBhcnJheUxlbmd0aF07XG4iCi0gICAgImlmIChpICE9IDApIHtc
biIKLSAgICAiICBqYXZhLmxhbmcuU3lzdGVtLmFycmF5Y29weSh0aGlzLiRuYW1lJCwgMCwgbmV3
QXJyYXksIDAsIGkpO1xuIgotICAgICJ9XG4iCi0gICAgImZvciAoOyBpIDwgbmV3QXJyYXkubGVu
Z3RoOyBpKyspIHtcbiIKLSAgICAiICBuZXdBcnJheVtpXSA9IGlucHV0LnJlYWQkY2FwaXRhbGl6
ZWRfdHlwZSQoKTtcbiIKLSAgICAifVxuIgotICAgICJ0aGlzLiRuYW1lJCA9IG5ld0FycmF5O1xu
IgotICAgICJpbnB1dC5wb3BMaW1pdChsaW1pdCk7XG4iKTsKLX0KLQotdm9pZCBSZXBlYXRlZFBy
aW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlUmVwZWF0ZWREYXRhU2l6ZUNvZGUoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gQ3JlYXRlcyBhIHZhcmlhYmxlIGRhdGFT
aXplIGFuZCBwdXRzIHRoZSBzZXJpYWxpemVkIHNpemUgaW4gdGhlcmUuCi0gIC8vIElmIHRoZSBl
bGVtZW50IHR5cGUgaXMgYSBKYXZhIHJlZmVyZW5jZSB0eXBlLCBhbHNvIGdlbmVyYXRlcwotICAv
LyBkYXRhQ291bnQgd2hpY2ggc3RvcmVzIHRoZSBudW1iZXIgb2Ygbm9uLW51bGwgZWxlbWVudHMg
aW4gdGhlIGZpZWxkLgotICBpZiAoSXNSZWZlcmVuY2VUeXBlKEdldEphdmFUeXBlKGRlc2NyaXB0
b3JfKSkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAgImludCBkYXRh
Q291bnQgPSAwO1xuIgotICAgICAgImludCBkYXRhU2l6ZSA9IDA7XG4iCi0gICAgICAiZm9yIChp
bnQgaSA9IDA7IGkgPCB0aGlzLiRuYW1lJC5sZW5ndGg7IGkrKykge1xuIgotICAgICAgIiAgJHR5
cGUkIGVsZW1lbnQgPSB0aGlzLiRuYW1lJFtpXTtcbiIKLSAgICAgICIgIGlmIChlbGVtZW50ICE9
IG51bGwpIHtcbiIKLSAgICAgICIgICAgZGF0YUNvdW50Kys7XG4iCi0gICAgICAiICAgIGRhdGFT
aXplICs9IGNvbS5nb29nbGUucHJvdG9idWYubmFuby5Db2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5v
XG4iCi0gICAgICAiICAgICAgICAuY29tcHV0ZSRjYXBpdGFsaXplZF90eXBlJFNpemVOb1RhZyhl
bGVtZW50KTtcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICJ9XG4iKTsKLSAgfSBlbHNlIGlmIChG
aXhlZFNpemUoZGVzY3JpcHRvcl8tPnR5cGUoKSkgPT0gLTEpIHsKLSAgICBwcmludGVyLT5Qcmlu
dCh2YXJpYWJsZXNfLAotICAgICAgImludCBkYXRhU2l6ZSA9IDA7XG4iCi0gICAgICAiZm9yIChp
bnQgaSA9IDA7IGkgPCB0aGlzLiRuYW1lJC5sZW5ndGg7IGkrKykge1xuIgotICAgICAgIiAgJHR5
cGUkIGVsZW1lbnQgPSB0aGlzLiRuYW1lJFtpXTtcbiIKLSAgICAgICIgIGRhdGFTaXplICs9IGNv
bS5nb29nbGUucHJvdG9idWYubmFuby5Db2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vXG4iCi0gICAg
ICAiICAgICAgLmNvbXB1dGUkY2FwaXRhbGl6ZWRfdHlwZSRTaXplTm9UYWcoZWxlbWVudCk7XG4i
Ci0gICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAgICJpbnQgZGF0YVNpemUgPSAkZml4ZWRfc2l6ZSQgKiB0aGlzLiRuYW1lJC5sZW5n
dGg7XG4iKTsKLSAgfQotfQotCi12b2lkIFJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6
OgotR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qg
ewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICJpZiAodGhpcy4kbmFtZSQgIT0g
bnVsbCAmJiB0aGlzLiRuYW1lJC5sZW5ndGggPiAwKSB7XG4iKTsKLSAgcHJpbnRlci0+SW5kZW50
KCk7Ci0KLSAgaWYgKGRlc2NyaXB0b3JfLT5pc19wYWNrYWJsZSgpICYmIGRlc2NyaXB0b3JfLT5v
cHRpb25zKCkucGFja2VkKCkpIHsKLSAgICBHZW5lcmF0ZVJlcGVhdGVkRGF0YVNpemVDb2RlKHBy
aW50ZXIpOwotICAgIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sCi0gICAgICAib3V0cHV0Lndy
aXRlUmF3VmFyaW50MzIoJHRhZyQpO1xuIgotICAgICAgIm91dHB1dC53cml0ZVJhd1ZhcmludDMy
KGRhdGFTaXplKTtcbiIKLSAgICAgICJmb3IgKGludCBpID0gMDsgaSA8IHRoaXMuJG5hbWUkLmxl
bmd0aDsgaSsrKSB7XG4iCi0gICAgICAiICBvdXRwdXQud3JpdGUkY2FwaXRhbGl6ZWRfdHlwZSRO
b1RhZyh0aGlzLiRuYW1lJFtpXSk7XG4iCi0gICAgICAifVxuIik7Ci0gIH0gZWxzZSBpZiAoSXNS
ZWZlcmVuY2VUeXBlKEdldEphdmFUeXBlKGRlc2NyaXB0b3JfKSkpIHsKLSAgICBwcmludGVyLT5Q
cmludCh2YXJpYWJsZXNfLAotICAgICAgImZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy4kbmFtZSQu
bGVuZ3RoOyBpKyspIHtcbiIKLSAgICAgICIgICR0eXBlJCBlbGVtZW50ID0gdGhpcy4kbmFtZSRb
aV07XG4iCi0gICAgICAiICBpZiAoZWxlbWVudCAhPSBudWxsKSB7XG4iCi0gICAgICAiICAgIG91
dHB1dC53cml0ZSRjYXBpdGFsaXplZF90eXBlJCgkbnVtYmVyJCwgZWxlbWVudCk7XG4iCi0gICAg
ICAiICB9XG4iCi0gICAgICAifVxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
dmFyaWFibGVzXywKLSAgICAgICJmb3IgKGludCBpID0gMDsgaSA8IHRoaXMuJG5hbWUkLmxlbmd0
aDsgaSsrKSB7XG4iCi0gICAgICAiICBvdXRwdXQud3JpdGUkY2FwaXRhbGl6ZWRfdHlwZSQoJG51
bWJlciQsIHRoaXMuJG5hbWUkW2ldKTtcbiIKLSAgICAgICJ9XG4iKTsKLSAgfQotCi0gIHByaW50
ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoIn1cbiIpOwotfQotCi12b2lkIFJlcGVh
dGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywKLSAgICAiaWYgKHRoaXMuJG5hbWUkICE9IG51bGwgJiYgdGhpcy4kbmFtZSQubGVuZ3RoID4g
MCkge1xuIik7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIEdlbmVyYXRlUmVwZWF0ZWREYXRh
U2l6ZUNvZGUocHJpbnRlcik7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInNpemUgKz0gZGF0
YVNpemU7XG4iKTsKLSAgaWYgKGRlc2NyaXB0b3JfLT5pc19wYWNrYWJsZSgpICYmIGRlc2NyaXB0
b3JfLT5vcHRpb25zKCkucGFja2VkKCkpIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNf
LAotICAgICAgInNpemUgKz0gJHRhZ19zaXplJDtcbiIKLSAgICAgICJzaXplICs9IGNvbS5nb29n
bGUucHJvdG9idWYubmFuby5Db2RlZE91dHB1dEJ5dGVCdWZmZXJOYW5vXG4iCi0gICAgICAiICAg
IC5jb21wdXRlUmF3VmFyaW50MzJTaXplKGRhdGFTaXplKTtcbiIpOwotICB9IGVsc2UgaWYgKElz
UmVmZXJlbmNlVHlwZShHZXRKYXZhVHlwZShkZXNjcmlwdG9yXykpKSB7Ci0gICAgcHJpbnRlci0+
UHJpbnQodmFyaWFibGVzXywKLSAgICAgICJzaXplICs9ICR0YWdfc2l6ZSQgKiBkYXRhQ291bnQ7
XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAotICAgICAg
InNpemUgKz0gJHRhZ19zaXplJCAqIHRoaXMuJG5hbWUkLmxlbmd0aDtcbiIpOwotICB9Ci0KLSAg
cHJpbnRlci0+T3V0ZGVudCgpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICJ9XG4iKTsKLX0K
LQotdm9pZCBSZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yOjoKLUdlbmVyYXRlRXF1YWxz
Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJp
YWJsZXNfLAotICAgICJpZiAoIWNvbS5nb29nbGUucHJvdG9idWYubmFuby5JbnRlcm5hbE5hbm8u
ZXF1YWxzKFxuIgotICAgICIgICAgdGhpcy4kbmFtZSQsIG90aGVyLiRuYW1lJCkpIHtcbiIKLSAg
ICAiICByZXR1cm4gZmFsc2U7XG4iCi0gICAgIn1cbiIpOwotfQotCi12b2lkIFJlcGVhdGVkUHJp
bWl0aXZlRmllbGRHZW5lcmF0b3I6OgotR2VuZXJhdGVIYXNoQ29kZUNvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0IHsKLSAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywKLSAgICAicmVz
dWx0ID0gMzEgKiByZXN1bHRcbiIKLSAgICAiICAgICsgY29tLmdvb2dsZS5wcm90b2J1Zi5uYW5v
LkludGVybmFsTmFuby5oYXNoQ29kZSh0aGlzLiRuYW1lJCk7XG4iKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIGphdmFuYW5vCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFj
ZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX3ByaW1pdGl2ZV9maWVsZC5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX3ByaW1pdGl2ZV9m
aWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDE5ODFkZDQ4MWFmNGU5ZDdm
YjBiNTI5NjRjNDVkOTVmNjZjMmI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFu
b19wcmltaXRpdmVfZmllbGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cDov
L2NvZGUuZ29vZ2xlLmNvbS9wL3Byb3RvYnVmLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24g
VmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkK
LS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBH
T09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQU5BTk9fUFJJTUlUSVZFX0ZJRUxEX0hfXwotI2Rl
ZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfSkFWQU5BTk9fUFJJTUlUSVZFX0ZJRUxEX0hf
XwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZmllbGQuaD4KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5h
bWVzcGFjZSBqYXZhbmFubyB7Ci0KLWNsYXNzIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yIDogcHVi
bGljIEZpZWxkR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFByaW1pdGl2ZUZpZWxk
R2VuZXJhdG9yKAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25z
dCBQYXJhbXMmIHBhcmFtcyk7Ci0gIH5QcmltaXRpdmVGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8v
IGltcGxlbWVudHMgRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gIGJvb2wgU2F2ZWREZWZhdWx0TmVlZGVkKCkgY29uc3Q7Ci0gIHZvaWQgR2Vu
ZXJhdGVJbml0U2F2ZWREZWZhdWx0Q29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyLCBib29sIGxhenlfaW5p
dCkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDbGVhckNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUVxdWFsc0NvZGUoaW86OlByaW50
ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSGFzaENvZGVDb2RlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxp
emF0aW9uQ29uZGl0aW9uYWwoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFy
aWFibGVzXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUHJpbWl0aXZl
RmllbGRHZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgQWNjZXNzb3JQcmltaXRpdmVGaWVsZEdlbmVy
YXRvciA6IHB1YmxpYyBGaWVsZEdlbmVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBBY2Nl
c3NvclByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3Jp
cHRvciwKLSAgICAgIGNvbnN0IFBhcmFtcyAmcGFyYW1zLCBpbnQgaGFzX2JpdF9pbmRleCk7Ci0g
IH5BY2Nlc3NvclByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBG
aWVsZEdlbmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
Ym9vbCBTYXZlZERlZmF1bHROZWVkZWQoKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUluaXRTYXZl
ZERlZmF1bHRDb2RlKGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZU1lbWJlcnMoaW86OlByaW50ZXIqIHByaW50ZXIsIGJvb2wgbGF6eV9pbml0KSBjb25zdDsKLSAg
dm9pZCBHZW5lcmF0ZUNsZWFyQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZv
aWQgR2VuZXJhdGVNZXJnaW5nQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZv
aWQgR2VuZXJhdGVTZXJpYWxpemF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7
Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVIYXNoQ29kZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIp
IGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9y
XzsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJpYWJsZXNfOwotCi0gIEdPT0dMRV9ESVNBTExP
V19FVklMX0NPTlNUUlVDVE9SUyhBY2Nlc3NvclByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKTsKLX07
Ci0KLWNsYXNzIFByaW1pdGl2ZU9uZW9mRmllbGRHZW5lcmF0b3IgOiBwdWJsaWMgRmllbGRHZW5l
cmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgUHJpbWl0aXZlT25lb2ZGaWVsZEdlbmVyYXRv
cigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3QgUGFyYW1z
JiBwYXJhbXMpOwotICB+UHJpbWl0aXZlT25lb2ZGaWVsZEdlbmVyYXRvcigpOwotCi0gIC8vIGlt
cGxlbWVudHMgRmllbGRHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gIHZvaWQgR2VuZXJhdGVNZW1iZXJzKGlvOjpQcmludGVyKiBwcmludGVyLCBib29s
IGxhenlfaW5pdCkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDbGVhckNvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlTWVyZ2luZ0NvZGUoaW86OlByaW50ZXIq
IHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXphdGlvbkNvZGUoaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplZFNpemVDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUVxdWFsc0NvZGUo
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlSGFzaENvZGVDb2Rl
KGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyaWFibGVz
XzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUHJpbWl0aXZlT25lb2ZG
aWVsZEdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBSZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJh
dG9yIDogcHVibGljIEZpZWxkR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFJlcGVh
dGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBh
cmFtcyYgcGFyYW1zKTsKLSAgflJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoKTsKLQot
ICAvLyBpbXBsZW1lbnRzIEZpZWxkR2VuZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICB2b2lkIEdlbmVyYXRlTWVtYmVycyhpbzo6UHJpbnRlciogcHJpbnRl
ciwgYm9vbCBsYXp5X2luaXQpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQ2xlYXJDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdpbmdDb2RlKGlvOjpQ
cmludGVyKiBwcmludGVyKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZU1lcmdpbmdDb2RlRnJvbVBh
Y2tlZChpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVTZXJpYWxp
emF0aW9uQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVT
ZXJpYWxpemVkU2l6ZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlRXF1YWxzQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZvaWQgR2Vu
ZXJhdGVIYXNoQ29kZUNvZGUoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlRml4Q2xvbmVkQ29kZShpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0KLSBwcml2
YXRlOgotICB2b2lkIEdlbmVyYXRlUmVwZWF0ZWREYXRhU2l6ZUNvZGUoaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0OwotCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcl87Ci0g
IG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyaWFibGVzXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoUmVwZWF0ZWRQcmltaXRpdmVGaWVsZEdlbmVyYXRvcik7Ci19OwotCi19
ICAvLyBuYW1lc3BhY2UgamF2YW5hbm8KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8g
bmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8g
R09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pBVkFOQU5PX1BSSU1JVElWRV9GSUVMRF9IX18KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qcy9qc19nZW5lcmF0b3IuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvanMvanNfZ2VuZXJhdG9yLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhNjZkMjhlZmU1ODQ2NWVmOTQxZDBhZWZlNDg0NjQzYjg2
OWFjYzMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qcy9qc19nZW5lcmF0b3IuY2MKKysrIC9kZXYvbnVs
bApAQCAtMSwzMDUzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2pzL2pzX2dlbmVyYXRvci5oPgot
Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGxp
bWl0cz4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVE
X1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNl
bmRpZgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHZl
Y3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9zdHJpbmdwcmludGYuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
aW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3Ry
ZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UganMgewotCi0vLyBTb3J0
ZWQgbGlzdCBvZiBKYXZhU2NyaXB0IGtleXdvcmRzLiBUaGVzZSBjYW5ub3QgYmUgdXNlZCBhcyBu
YW1lcy4gSWYgdGhleQotLy8gYXBwZWFyLCB3ZSBwcmVmaXggdGhlbSB3aXRoICJwYl8iLgotY29u
c3QgY2hhcioga0tleXdvcmRbXSA9IHsKLSAgImFic3RyYWN0IiwKLSAgImJvb2xlYW4iLAotICAi
YnJlYWsiLAotICAiYnl0ZSIsCi0gICJjYXNlIiwKLSAgImNhdGNoIiwKLSAgImNoYXIiLAotICAi
Y2xhc3MiLAotICAiY29uc3QiLAotICAiY29udGludWUiLAotICAiZGVidWdnZXIiLAotICAiZGVm
YXVsdCIsCi0gICJkZWxldGUiLAotICAiZG8iLAotICAiZG91YmxlIiwKLSAgImVsc2UiLAotICAi
ZW51bSIsCi0gICJleHBvcnQiLAotICAiZXh0ZW5kcyIsCi0gICJmYWxzZSIsCi0gICJmaW5hbCIs
Ci0gICJmaW5hbGx5IiwKLSAgImZsb2F0IiwKLSAgImZvciIsCi0gICJmdW5jdGlvbiIsCi0gICJn
b3RvIiwKLSAgImlmIiwKLSAgImltcGxlbWVudHMiLAotICAiaW1wb3J0IiwKLSAgImluIiwKLSAg
Imluc3RhbmNlb2YiLAotICAiaW50IiwKLSAgImludGVyZmFjZSIsCi0gICJsb25nIiwKLSAgIm5h
dGl2ZSIsCi0gICJuZXciLAotICAibnVsbCIsCi0gICJwYWNrYWdlIiwKLSAgInByaXZhdGUiLAot
ICAicHJvdGVjdGVkIiwKLSAgInB1YmxpYyIsCi0gICJyZXR1cm4iLAotICAic2hvcnQiLAotICAi
c3RhdGljIiwKLSAgInN1cGVyIiwKLSAgInN3aXRjaCIsCi0gICJzeW5jaHJvbml6ZWQiLAotICAi
dGhpcyIsCi0gICJ0aHJvdyIsCi0gICJ0aHJvd3MiLAotICAidHJhbnNpZW50IiwKLSAgInRyeSIs
Ci0gICJ0eXBlb2YiLAotICAidmFyIiwKLSAgInZvaWQiLAotICAidm9sYXRpbGUiLAotICAid2hp
bGUiLAotICAid2l0aCIsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IGtOdW1LZXl3b3JkID0gc2l6
ZW9mKGtLZXl3b3JkKSAvIHNpemVvZihjaGFyKik7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRoZSBt
b2RlIG9mIG9wZXJhdGlvbiBmb3IgYnl0ZXMgZmllbGRzLiBIaXN0b3JpY2FsbHkgSlNQQiBhbHdh
eXMgY2FycmllZAotLy8gYnl0ZXMgYXMgSlMge3N0cmluZ30sIGNvbnRhaW5pbmcgYmFzZTY0IGNv
bnRlbnQgYnkgY29udmVudGlvbi4gV2l0aCBiaW5hcnkKLS8vIGFuZCBwcm90bzMgc2VyaWFsaXph
dGlvbiB0aGUgbmV3IGNvbnZlbnRpb24gaXMgdG8gcmVwcmVzZW50IGl0IGFzIGJpbmFyeQotLy8g
ZGF0YSBpbiBVaW50OEFycmF5LiBTZWUgYi8yNjE3MzcwMSBmb3IgYmFja2dyb3VuZCBvbiB0aGUg
bWlncmF0aW9uLgotZW51bSBCeXRlc01vZGUgewotICBCWVRFU19ERUZBVUxULCAgLy8gRGVmYXVs
dCB0eXBlIGZvciBnZXRCeXRlc0ZpZWxkIHRvIHJldHVybi4KLSAgQllURVNfQjY0LCAgICAgIC8v
IEV4cGxpY2l0bHkgY29lcmNlIHRvIGJhc2U2NCBzdHJpbmcgd2hlcmUgbmVlZGVkLgotICBCWVRF
U19VOCwgICAgICAgLy8gRXhwbGljaXRseSBjb2VyY2UgdG8gVWludDhBcnJheSB3aGVyZSBuZWVk
ZWQuCi19OwotCi1ib29sIElzUmVzZXJ2ZWQoY29uc3Qgc3RyaW5nJiBpZGVudCkgewotICBmb3Ig
KGludCBpID0gMDsgaSA8IGtOdW1LZXl3b3JkOyBpKyspIHsKLSAgICBpZiAoaWRlbnQgPT0ga0tl
eXdvcmRbaV0pIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICByZXR1cm4gZmFs
c2U7Ci19Ci0KLS8vIFJldHVybnMgYSBjb3B5IG9mIHxmaWxlbmFtZXwgd2l0aCBhbnkgdHJhaWxp
bmcgIi5wcm90b2RldmVsIiBvciAiLnByb3RvCi0vLyBzdWZmaXggc3RyaXBwZWQuCi0vLyBUT0RP
KGhhYmVybWFuKTogVW5pZnkgd2l0aCBjb3B5IGluIGNvbXBpbGVyL2NwcC9pbnRlcm5hbC9oZWxw
ZXJzLmNjLgotc3RyaW5nIFN0cmlwUHJvdG8oY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSkgewotICBj
b25zdCBjaGFyKiBzdWZmaXggPSBIYXNTdWZmaXhTdHJpbmcoZmlsZW5hbWUsICIucHJvdG9kZXZl
bCIpCi0gICAgICA/ICIucHJvdG9kZXZlbCIgOiAiLnByb3RvIjsKLSAgcmV0dXJuIFN0cmlwU3Vm
Zml4U3RyaW5nKGZpbGVuYW1lLCBzdWZmaXgpOwotfQotCi0vLyBHaXZlbiBhIGZpbGVuYW1lIGxp
a2UgZm9vL2Jhci9iYXoucHJvdG8sIHJldHVybnMgdGhlIGNvcnJlc3BvZGluZyBKYXZhU2NyaXB0
Ci0vLyBmaWxlIGZvby9iYXIvYmF6LmpzLgotc3RyaW5nIEdldEpTRmlsZW5hbWUoY29uc3Qgc3Ry
aW5nJiBmaWxlbmFtZSkgewotICByZXR1cm4gU3RyaXBQcm90byhmaWxlbmFtZSkgKyAiX3BiLmpz
IjsKLX0KLQotLy8gR2l2ZW4gYSBmaWxlbmFtZSBsaWtlIGZvby9iYXIvYmF6LnByb3RvLCByZXR1
cm5zIHRoZSByb290IGRpcmVjdG9yeQotLy8gcGF0aCAuLi8uLi8KLXN0cmluZyBHZXRSb290UGF0
aChjb25zdCBzdHJpbmcmIGZpbGVuYW1lKSB7Ci0gIHNpemVfdCBzbGFzaGVzID0gc3RkOjpjb3Vu
dChmaWxlbmFtZS5iZWdpbigpLCBmaWxlbmFtZS5lbmQoKSwgJy8nKTsKLSAgaWYgKHNsYXNoZXMg
PT0gMCkgewotICAgIHJldHVybiAiLi8iOwotICB9Ci0gIHN0cmluZyByZXN1bHQgPSAiIjsKLSAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzbGFzaGVzOyBpKyspIHsKLSAgICByZXN1bHQgKz0gIi4u
LyI7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gUmV0dXJucyB0aGUgYWxpYXMgd2Ug
YXNzaWduIHRvIHRoZSBtb2R1bGUgb2YgdGhlIGdpdmVuIC5wcm90byBmaWxlbmFtZQotLy8gd2hl
biBpbXBvcnRpbmcuCi1zdHJpbmcgTW9kdWxlQWxpYXMoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSkg
ewotICAvLyBUaGlzIHNjaGVtZSBjb3VsZCB0ZWNobmljYWxseSBjYXVzZSBwcm9ibGVtcyBpZiBh
IGZpbGUgaW5jbHVkZXMgYW55IDIgb2Y6Ci0gIC8vICAgZm9vL2Jhcl9iYXoucHJvdG8KLSAgLy8g
ICBmb29fYmFyX2Jhei5wcm90bwotICAvLyAgIGZvb19iYXIvYmF6LnByb3RvCi0gIC8vCi0gIC8v
IFdlJ2xsIHdvcnJ5IGFib3V0IHRoaXMgcHJvYmxlbSBpZi93aGVuIHdlIGFjdHVhbGx5IHNlZSBp
dC4gIFRoaXMgbmFtZSBpc24ndAotICAvLyBleHBvc2VkIHRvIHVzZXJzIHNvIHdlIGNhbiBjaGFu
Z2UgaXQgbGF0ZXIgaWYgd2UgbmVlZCB0by4KLSAgc3RyaW5nIGJhc2VuYW1lID0gU3RyaXBQcm90
byhmaWxlbmFtZSk7Ci0gIFN0cmlwU3RyaW5nKCZiYXNlbmFtZSwgIi0iLCAnJCcpOwotICBTdHJp
cFN0cmluZygmYmFzZW5hbWUsICIvIiwgJ18nKTsKLSAgcmV0dXJuIGJhc2VuYW1lICsgIl9wYiI7
Ci19Ci0KLS8vIFJldHVybnMgdGhlIGZ1bGx5IG5vcm1hbGl6ZWQgSmF2YVNjcmlwdCBwYXRoIGZv
ciB0aGUgZ2l2ZW4KLS8vIGZpbGUgZGVzY3JpcHRvcidzIHBhY2thZ2UuCi1zdHJpbmcgR2V0UGF0
aChjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgY29uc3Qg
RmlsZURlc2NyaXB0b3IqIGZpbGUpIHsKLSAgaWYgKCFvcHRpb25zLm5hbWVzcGFjZV9wcmVmaXgu
ZW1wdHkoKSkgewotICAgIHJldHVybiBvcHRpb25zLm5hbWVzcGFjZV9wcmVmaXg7Ci0gIH0gZWxz
ZSBpZiAoIWZpbGUtPnBhY2thZ2UoKS5lbXB0eSgpKSB7Ci0gICAgcmV0dXJuICJwcm90by4iICsg
ZmlsZS0+cGFja2FnZSgpOwotICB9IGVsc2UgewotICAgIHJldHVybiAicHJvdG8iOwotICB9Ci19
Ci0KLS8vIEZvcndhcmQgZGVjbGFyZSwgc28gdGhhdCBHZXRQcmVmaXggY2FuIGNhbGwgdGhpcyBt
ZXRob2QsCi0vLyB3aGljaCBpbiB0dXJuLCBjYWxscyBHZXRQcmVmaXguCi1zdHJpbmcgR2V0UGF0
aChjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgY29uc3Qg
RGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLS8vIFJldHVybnMgdGhlIHBhdGggcHJlZml4IGZv
ciBhIG1lc3NhZ2Ugb3IgZW51bWVyYXRpb24gdGhhdAotLy8gbGl2ZXMgdW5kZXIgdGhlIGdpdmVu
IGZpbGUgYW5kIGNvbnRhaW5pbmcgdHlwZS4KLXN0cmluZyBHZXRQcmVmaXgoY29uc3QgR2VuZXJh
dG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0
b3IqIGZpbGVfZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciog
Y29udGFpbmluZ190eXBlKSB7Ci0gIHN0cmluZyBwcmVmaXggPSAiIjsKLQotICBpZiAoY29udGFp
bmluZ190eXBlID09IE5VTEwpIHsKLSAgICBwcmVmaXggPSBHZXRQYXRoKG9wdGlvbnMsIGZpbGVf
ZGVzY3JpcHRvcik7Ci0gIH0gZWxzZSB7Ci0gICAgcHJlZml4ID0gR2V0UGF0aChvcHRpb25zLCBj
b250YWluaW5nX3R5cGUpOwotICB9Ci0KLSAgaWYgKCFwcmVmaXguZW1wdHkoKSkgewotICAgIHBy
ZWZpeCArPSAiLiI7Ci0gIH0KLQotICByZXR1cm4gcHJlZml4OwotfQotCi0KLS8vIFJldHVybnMg
dGhlIGZ1bGx5IG5vcm1hbGl6ZWQgSmF2YVNjcmlwdCBwYXRoIGZvciB0aGUgZ2l2ZW4KLS8vIG1l
c3NhZ2UgZGVzY3JpcHRvci4KLXN0cmluZyBHZXRQYXRoKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMm
IG9wdGlvbnMsCi0gICAgICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7
Ci0gIHJldHVybiBHZXRQcmVmaXgoCi0gICAgICBvcHRpb25zLCBkZXNjcmlwdG9yLT5maWxlKCks
Ci0gICAgICBkZXNjcmlwdG9yLT5jb250YWluaW5nX3R5cGUoKSkgKyBkZXNjcmlwdG9yLT5uYW1l
KCk7Ci19Ci0KLQotLy8gUmV0dXJucyB0aGUgZnVsbHkgbm9ybWFsaXplZCBKYXZhU2NyaXB0IHBh
dGggZm9yIHRoZSBnaXZlbgotLy8gZmllbGQncyBjb250YWluaW5nIG1lc3NhZ2UgZGVzY3JpcHRv
ci4KLXN0cmluZyBHZXRQYXRoKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJu
IEdldFBhdGgob3B0aW9ucywgZGVzY3JpcHRvci0+Y29udGFpbmluZ190eXBlKCkpOwotfQotCi0v
LyBSZXR1cm5zIHRoZSBmdWxseSBub3JtYWxpemVkIEphdmFTY3JpcHQgcGF0aCBmb3IgdGhlIGdp
dmVuCi0vLyBlbnVtZXJhdGlvbiBkZXNjcmlwdG9yLgotc3RyaW5nIEdldFBhdGgoY29uc3QgR2Vu
ZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgIGNvbnN0IEVudW1EZXNjcmlw
dG9yKiBlbnVtX2Rlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIEdldFByZWZpeCgKLSAgICAgIG9wdGlv
bnMsIGVudW1fZGVzY3JpcHRvci0+ZmlsZSgpLAotICAgICAgZW51bV9kZXNjcmlwdG9yLT5jb250
YWluaW5nX3R5cGUoKSkgKyBlbnVtX2Rlc2NyaXB0b3ItPm5hbWUoKTsKLX0KLQotCi0vLyBSZXR1
cm5zIHRoZSBmdWxseSBub3JtYWxpemVkIEphdmFTY3JpcHQgcGF0aCBmb3IgdGhlIGdpdmVuCi0v
LyBlbnVtZXJhdGlvbiB2YWx1ZSBkZXNjcmlwdG9yLgotc3RyaW5nIEdldFBhdGgoY29uc3QgR2Vu
ZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgIGNvbnN0IEVudW1WYWx1ZURl
c2NyaXB0b3IqIHZhbHVlX2Rlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIEdldFBhdGgoCi0gICAgICBv
cHRpb25zLAotICAgICAgdmFsdWVfZGVzY3JpcHRvci0+dHlwZSgpKSArICIuIiArIHZhbHVlX2Rl
c2NyaXB0b3ItPm5hbWUoKTsKLX0KLQotc3RyaW5nIE1heWJlQ3Jvc3NGaWxlUmVmKGNvbnN0IEdl
bmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmlsZURlc2NyaXB0b3IqIGZyb21fZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBEZXNjcmlwdG9yKiB0b19tZXNzYWdlKSB7Ci0gIGlmIChvcHRpb25zLmltcG9ydF9zdHlsZSA9
PSBHZW5lcmF0b3JPcHRpb25zOjpJTVBPUlRfQ09NTU9OSlMgJiYKLSAgICAgIGZyb21fZmlsZSAh
PSB0b19tZXNzYWdlLT5maWxlKCkpIHsKLSAgICAvLyBDcm9zcy1maWxlIHJlZiBpbiBDb21tb25K
UyBuZWVkcyB0byB1c2UgdGhlIG1vZHVsZSBhbGlhcyBpbnN0ZWFkIG9mCi0gICAgLy8gdGhlIGds
b2JhbCBuYW1lLgotICAgIHJldHVybiBNb2R1bGVBbGlhcyh0b19tZXNzYWdlLT5maWxlKCktPm5h
bWUoKSkgKyAiLiIgKyB0b19tZXNzYWdlLT5uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gV2l0
aGluIGEgc2luZ2xlIGZpbGUgd2UgdXNlIGEgZnVsbCBuYW1lLgotICAgIHJldHVybiBHZXRQYXRo
KG9wdGlvbnMsIHRvX21lc3NhZ2UpOwotICB9Ci19Ci0KLXN0cmluZyBTdWJtZXNzYWdlVHlwZVJl
Zihjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgR09PR0xFX0NIRUNLKGZpZWxk
LT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFKTsKLSAgcmV0
dXJuIE1heWJlQ3Jvc3NGaWxlUmVmKG9wdGlvbnMsIGZpZWxkLT5maWxlKCksIGZpZWxkLT5tZXNz
YWdlX3R5cGUoKSk7Ci19Ci0KLS8vIC0gT2JqZWN0IGZpZWxkIG5hbWU6IExPV0VSX1VOREVSU0NP
UkUgLT4gTE9XRVJfQ0FNRUwsIGV4Y2VwdCBmb3IgZ3JvdXAgZmllbGRzCi0vLyAoVVBQRVJfQ0FN
RUwgLT4gTE9XRVJfQ0FNRUwpLCB3aXRoICJMaXN0IiAob3IgIk1hcCIpIGFwcGVuZGVkIGlmIGFw
cHJvcHJpYXRlLAotLy8gYW5kIHdpdGggcmVzZXJ2ZWQgd29yZHMgdHJpZ2dlcmluZyBhICJwYl8i
IHByZWZpeC4KLS8vIC0gR2V0dGVycy9zZXR0ZXJzOiBMT1dFUl9VTkRFUlNDT1JFIC0+IFVQUEVS
X0NBTUVMLCBleGNlcHQgZm9yIGdyb3VwIGZpZWxkcwotLy8gKHVzZSB0aGUgbmFtZSBkaXJlY3Rs
eSksIHRoZW4gYXBwZW5kICJMaXN0IiBpZiBhcHByb3ByaWF0ZSwgdGhlbiBhcHBlbmQgIiQiCi0v
LyBpZiByZXN1bHRpbmcgbmFtZSBpcyBlcXVhbCB0byBhIHJlc2VydmVkIHdvcmQuCi0vLyAtIEVu
dW1zOiBqdXN0IHVwcGVyY2FzZS4KLQotLy8gTG9jYWxlLWluZGVwZW5kZW50IHZlcnNpb24gb2Yg
VG9Mb3dlciB0aGF0IGRlYWxzIG9ubHkgd2l0aCBBU0NJSSBBLVouCi1jaGFyIFRvTG93ZXJBU0NJ
SShjaGFyIGMpIHsKLSAgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB7Ci0gICAgcmV0dXJuIChj
IC0gJ0EnKSArICdhJzsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gYzsKLSAgfQotfQotCi12ZWN0
b3I8c3RyaW5nPiBQYXJzZUxvd2VyVW5kZXJzY29yZShjb25zdCBzdHJpbmcmIGlucHV0KSB7Ci0g
IHZlY3RvcjxzdHJpbmc+IHdvcmRzOwotICBzdHJpbmcgcnVubmluZyA9ICIiOwotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGlucHV0LnNpemUoKTsgaSsrKSB7Ci0gICAgaWYgKGlucHV0W2ldID09ICdf
JykgewotICAgICAgaWYgKCFydW5uaW5nLmVtcHR5KCkpIHsKLSAgICAgICAgd29yZHMucHVzaF9i
YWNrKHJ1bm5pbmcpOwotICAgICAgICBydW5uaW5nLmNsZWFyKCk7Ci0gICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHJ1bm5pbmcgKz0gVG9Mb3dlckFTQ0lJKGlucHV0W2ldKTsKLSAgICB9Ci0g
IH0KLSAgaWYgKCFydW5uaW5nLmVtcHR5KCkpIHsKLSAgICB3b3Jkcy5wdXNoX2JhY2socnVubmlu
Zyk7Ci0gIH0KLSAgcmV0dXJuIHdvcmRzOwotfQotCi12ZWN0b3I8c3RyaW5nPiBQYXJzZVVwcGVy
Q2FtZWwoY29uc3Qgc3RyaW5nJiBpbnB1dCkgewotICB2ZWN0b3I8c3RyaW5nPiB3b3JkczsKLSAg
c3RyaW5nIHJ1bm5pbmcgPSAiIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7
IGkrKykgewotICAgIGlmIChpbnB1dFtpXSA+PSAnQScgJiYgaW5wdXRbaV0gPD0gJ1onICYmICFy
dW5uaW5nLmVtcHR5KCkpIHsKLSAgICAgIHdvcmRzLnB1c2hfYmFjayhydW5uaW5nKTsKLSAgICAg
IHJ1bm5pbmcuY2xlYXIoKTsKLSAgICB9Ci0gICAgcnVubmluZyArPSBUb0xvd2VyQVNDSUkoaW5w
dXRbaV0pOwotICB9Ci0gIGlmICghcnVubmluZy5lbXB0eSgpKSB7Ci0gICAgd29yZHMucHVzaF9i
YWNrKHJ1bm5pbmcpOwotICB9Ci0gIHJldHVybiB3b3JkczsKLX0KLQotc3RyaW5nIFRvTG93ZXJD
YW1lbChjb25zdCB2ZWN0b3I8c3RyaW5nPiYgd29yZHMpIHsKLSAgc3RyaW5nIHJlc3VsdDsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB3b3Jkcy5zaXplKCk7IGkrKykgewotICAgIHN0cmluZyB3b3Jk
ID0gd29yZHNbaV07Ci0gICAgaWYgKGkgPT0gMCAmJiAod29yZFswXSA+PSAnQScgJiYgd29yZFsw
XSA8PSAnWicpKSB7Ci0gICAgICB3b3JkWzBdID0gKHdvcmRbMF0gLSAnQScpICsgJ2EnOwotICAg
IH0gZWxzZSBpZiAoaSAhPSAwICYmICh3b3JkWzBdID49ICdhJyAmJiB3b3JkWzBdIDw9ICd6Jykp
IHsKLSAgICAgIHdvcmRbMF0gPSAod29yZFswXSAtICdhJykgKyAnQSc7Ci0gICAgfQotICAgIHJl
c3VsdCArPSB3b3JkOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0cmluZyBUb1VwcGVy
Q2FtZWwoY29uc3QgdmVjdG9yPHN0cmluZz4mIHdvcmRzKSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgd29yZHMuc2l6ZSgpOyBpKyspIHsKLSAgICBzdHJpbmcgd29y
ZCA9IHdvcmRzW2ldOwotICAgIGlmICh3b3JkWzBdID49ICdhJyAmJiB3b3JkWzBdIDw9ICd6Jykg
ewotICAgICAgd29yZFswXSA9ICh3b3JkWzBdIC0gJ2EnKSArICdBJzsKLSAgICB9Ci0gICAgcmVz
dWx0ICs9IHdvcmQ7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gQmFzZWQgb24gY29k
ZSBmcm9tIGRlc2NyaXB0b3IuY2MgKFRoYW5rcyBLZW50b24hKQotLy8gVXBwZXJjYXNlcyB0aGUg
ZW50aXJlIHN0cmluZywgdHVybmluZyBWYWx1ZU5hbWUgaW50bwotLy8gVkFMVUVOQU1FLgotc3Ry
aW5nIFRvRW51bUNhc2UoY29uc3Qgc3RyaW5nJiBpbnB1dCkgewotICBzdHJpbmcgcmVzdWx0Owot
ICByZXN1bHQucmVzZXJ2ZShpbnB1dC5zaXplKCkpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwg
aW5wdXQuc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAoJ2EnIDw9IGlucHV0W2ldICYmIGlucHV0W2ld
IDw9ICd6JykgewotICAgICAgcmVzdWx0LnB1c2hfYmFjayhpbnB1dFtpXSAtICdhJyArICdBJyk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdC5wdXNoX2JhY2soaW5wdXRbaV0pOwotICAgIH0K
LSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0cmluZyBUb0ZpbGVOYW1lKGNvbnN0IHN0
cmluZyYgaW5wdXQpIHsKLSAgc3RyaW5nIHJlc3VsdDsKLSAgcmVzdWx0LnJlc2VydmUoaW5wdXQu
c2l6ZSgpKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0LnNpemUoKTsgaSsrKSB7Ci0g
ICAgaWYgKCdBJyA8PSBpbnB1dFtpXSAmJiBpbnB1dFtpXSA8PSAnWicpIHsKLSAgICAgIHJlc3Vs
dC5wdXNoX2JhY2soaW5wdXRbaV0gLSAnQScgKyAnYScpOwotICAgIH0gZWxzZSB7Ci0gICAgICBy
ZXN1bHQucHVzaF9iYWNrKGlucHV0W2ldKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0
OwotfQotCi0vLyBXaGVuIHdlJ3JlIGdlbmVyYXRpbmcgb25lIG91dHB1dCBmaWxlIHBlciB0eXBl
IG5hbWUsIHRoaXMgaXMgdGhlIGZpbGVuYW1lCi0vLyB0aGF0IHRvcC1sZXZlbCBleHRlbnNpb25z
IHNob3VsZCBnbyBpbi4KLXN0cmluZyBHZXRFeHRlbnNpb25GaWxlTmFtZShjb25zdCBHZW5lcmF0
b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZp
bGVEZXNjcmlwdG9yKiBmaWxlKSB7Ci0gIHJldHVybiBvcHRpb25zLm91dHB1dF9kaXIgKyAiLyIg
KyBUb0ZpbGVOYW1lKEdldFBhdGgob3B0aW9ucywgZmlsZSkpICsgIi5qcyI7Ci19Ci0KLS8vIFdo
ZW4gd2UncmUgZ2VuZXJhdGluZyBvbmUgb3V0cHV0IGZpbGUgcGVyIHR5cGUgbmFtZSwgdGhpcyBp
cyB0aGUgZmlsZW5hbWUKLS8vIHRoYXQgYSB0b3AtbGV2ZWwgbWVzc2FnZSBzaG91bGQgZ28gaW4u
Ci1zdHJpbmcgR2V0TWVzc2FnZUZpbGVOYW1lKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlv
bnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MpIHsK
LSAgcmV0dXJuIG9wdGlvbnMub3V0cHV0X2RpciArICIvIiArIFRvRmlsZU5hbWUoZGVzYy0+bmFt
ZSgpKSArICIuanMiOwotfQotCi0vLyBXaGVuIHdlJ3JlIGdlbmVyYXRpbmcgb25lIG91dHB1dCBm
aWxlIHBlciB0eXBlIG5hbWUsIHRoaXMgaXMgdGhlIGZpbGVuYW1lCi0vLyB0aGF0IGEgdG9wLWxl
dmVsIG1lc3NhZ2Ugc2hvdWxkIGdvIGluLgotc3RyaW5nIEdldEVudW1GaWxlTmFtZShjb25zdCBH
ZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBF
bnVtRGVzY3JpcHRvciogZGVzYykgewotICByZXR1cm4gb3B0aW9ucy5vdXRwdXRfZGlyICsgIi8i
ICsgVG9GaWxlTmFtZShkZXNjLT5uYW1lKCkpICsgIi5qcyI7Ci19Ci0KLS8vIFJldHVybnMgdGhl
IG1lc3NhZ2UvcmVzcG9uc2UgSUQsIGlmIHNldC4KLXN0cmluZyBHZXRNZXNzYWdlSWQoY29uc3Qg
RGVzY3JpcHRvciogZGVzYykgewotICByZXR1cm4gc3RyaW5nKCk7Ci19Ci0KLWJvb2wgSWdub3Jl
RXh0ZW5zaW9uRmllbGQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICAvLyBFeGNs
dWRlIGRlc2NyaXB0b3IgZXh0ZW5zaW9ucyBmcm9tIG91dHB1dCAidG8gYXZvaWQgY2x1dHRlciIg
KGZyb20gb3JpZ2luYWwKLSAgLy8gY29kZWdlbikuCi0gIHJldHVybiBmaWVsZC0+aXNfZXh0ZW5z
aW9uKCkgJiYKLSAgICAgICAgIGZpZWxkLT5jb250YWluaW5nX3R5cGUoKS0+ZmlsZSgpLT5uYW1l
KCkgPT0KLSAgICAgICAgICAgICAiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8iOwot
fQotCi0KLS8vIFVzZWQgaW5zaWRlIEdvb2dsZSBvbmx5IC0tIGRvIG5vdCByZW1vdmUuCi1ib29s
IElzUmVzcG9uc2UoY29uc3QgRGVzY3JpcHRvciogZGVzYykgeyByZXR1cm4gZmFsc2U7IH0KLQot
Ym9vbCBJZ25vcmVGaWVsZChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHJldHVy
biBJZ25vcmVFeHRlbnNpb25GaWVsZChmaWVsZCk7Ci19Ci0KLQotLy8gRG9lcyBKU1BCIGlnbm9y
ZSB0aGlzIGVudGlyZSBvbmVvZj8gVHJ1ZSBvbmx5IGlmIGFsbCBmaWVsZHMgYXJlIGlnbm9yZWQu
Ci1ib29sIElnbm9yZU9uZW9mKGNvbnN0IE9uZW9mRGVzY3JpcHRvciogb25lb2YpIHsKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBvbmVvZi0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKCFJ
Z25vcmVGaWVsZChvbmVvZi0+ZmllbGQoaSkpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdHJpbmcgSlNJZGVudChjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgYm9vbCBpc191cHBlcl9jYW1lbCwKLSAg
ICAgICAgICAgICAgIGJvb2wgaXNfbWFwKSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0gIGlmIChmaWVs
ZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCkgewotICAgIHJlc3VsdCA9
IGlzX3VwcGVyX2NhbWVsID8KLSAgICAgICAgVG9VcHBlckNhbWVsKFBhcnNlVXBwZXJDYW1lbChm
aWVsZC0+bWVzc2FnZV90eXBlKCktPm5hbWUoKSkpIDoKLSAgICAgICAgVG9Mb3dlckNhbWVsKFBh
cnNlVXBwZXJDYW1lbChmaWVsZC0+bWVzc2FnZV90eXBlKCktPm5hbWUoKSkpOwotICB9IGVsc2Ug
ewotICAgIHJlc3VsdCA9IGlzX3VwcGVyX2NhbWVsID8KLSAgICAgICAgVG9VcHBlckNhbWVsKFBh
cnNlTG93ZXJVbmRlcnNjb3JlKGZpZWxkLT5uYW1lKCkpKSA6Ci0gICAgICAgIFRvTG93ZXJDYW1l
bChQYXJzZUxvd2VyVW5kZXJzY29yZShmaWVsZC0+bmFtZSgpKSk7Ci0gIH0KLSAgaWYgKGlzX21h
cCkgewotICAgIHJlc3VsdCArPSAiTWFwIjsKLSAgfSBlbHNlIGlmIChmaWVsZC0+aXNfcmVwZWF0
ZWQoKSkgewotICAgIHJlc3VsdCArPSAiTGlzdCI7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RyaW5nIEpTT2JqZWN0RmllbGROYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQp
IHsKLSAgc3RyaW5nIG5hbWUgPSBKU0lkZW50KAotICAgICAgZmllbGQsCi0gICAgICAvKiBpc191
cHBlcl9jYW1lbCA9ICovIGZhbHNlLAotICAgICAgLyogaXNfbWFwID0gKi8gZmFsc2UpOwotICBp
ZiAoSXNSZXNlcnZlZChuYW1lKSkgewotICAgIG5hbWUgPSAicGJfIiArIG5hbWU7Ci0gIH0KLSAg
cmV0dXJuIG5hbWU7Ci19Ci0KLXN0cmluZyBKU0J5dGVHZXR0ZXJTdWZmaXgoQnl0ZXNNb2RlIGJ5
dGVzX21vZGUpIHsKLSAgc3dpdGNoIChieXRlc19tb2RlKSB7Ci0gICAgY2FzZSBCWVRFU19ERUZB
VUxUOgotICAgICAgcmV0dXJuICIiOwotICAgIGNhc2UgQllURVNfQjY0OgotICAgICAgcmV0dXJu
ICJCNjQiOwotICAgIGNhc2UgQllURVNfVTg6Ci0gICAgICByZXR1cm4gIlU4IjsKLSAgICBkZWZh
dWx0OgotICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBmaWVs
ZCBuYW1lIGFzIGEgY2FwaXRhbGl6ZWQgcG9ydGlvbiBvZiBhIGdldHRlci9zZXR0ZXIgbWV0aG9k
Ci0vLyBuYW1lLCBlLmcuIE15RmllbGQgZm9yIC5nZXRNeUZpZWxkKCkuCi1zdHJpbmcgSlNHZXR0
ZXJOYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAg
IEJ5dGVzTW9kZSBieXRlc19tb2RlID0gQllURVNfREVGQVVMVCkgewotICBzdHJpbmcgbmFtZSA9
IEpTSWRlbnQoZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBpc191cHBlcl9jYW1l
bCA9ICovIHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBpc19tYXAgPSAqLyBmYWxz
ZSk7Ci0gIGlmIChmaWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRFUykg
ewotICAgIHN0cmluZyBzdWZmaXggPSBKU0J5dGVHZXR0ZXJTdWZmaXgoYnl0ZXNfbW9kZSk7Ci0g
ICAgaWYgKCFzdWZmaXguZW1wdHkoKSkgewotICAgICAgbmFtZSArPSAiX2FzIiArIHN1ZmZpeDsK
LSAgICB9Ci0gIH0KLSAgaWYgKG5hbWUgPT0gIkV4dGVuc2lvbiIgfHwgbmFtZSA9PSAiSnNQYk1l
c3NhZ2VJZCIpIHsKLSAgICAvLyBBdm9pZCBjb25mbGljdHMgd2l0aCBiYXNlLWNsYXNzIG5hbWVz
LgotICAgIG5hbWUgKz0gIiQiOwotICB9Ci0gIHJldHVybiBuYW1lOwotfQotCi1zdHJpbmcgSlNN
YXBHZXR0ZXJOYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgcmV0dXJuIEpT
SWRlbnQoZmllbGQsCi0gICAgICAgICAgICAgICAgIC8qIGlzX3VwcGVyX2NhbWVsID0gKi8gdHJ1
ZSwKLSAgICAgICAgICAgICAgICAgLyogaXNfbWFwID0gKi8gdHJ1ZSk7Ci19Ci0KLQotCi1zdHJp
bmcgSlNPbmVvZk5hbWUoY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZikgewotICByZXR1cm4g
VG9VcHBlckNhbWVsKFBhcnNlTG93ZXJVbmRlcnNjb3JlKG9uZW9mLT5uYW1lKCkpKTsKLX0KLQot
Ly8gUmV0dXJucyB0aGUgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGlzIGZpZWxkIGluIHRoZSBK
U1BCIGFycmF5ICh1bmRlcmx5aW5nCi0vLyBkYXRhIHN0b3JhZ2UgYXJyYXkpLgotc3RyaW5nIEpT
RmllbGRJbmRleChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIC8vIERldGVybWlu
ZSB3aGV0aGVyIHRoaXMgZmllbGQgaXMgYSBtZW1iZXIgb2YgYSBncm91cC4gR3JvdXAgZmllbGRz
IGFyZSBhIGJpdAotICAvLyB3b25reTogdGhlaXIgImNvbnRhaW5pbmcgdHlwZSIgaXMgYSBtZXNz
YWdlIHR5cGUgY3JlYXRlZCBqdXN0IGZvciB0aGUKLSAgLy8gZ3JvdXAsIGFuZCB0aGF0IHR5cGUn
cyBwYXJlbnQgdHlwZSBoYXMgYSBmaWVsZCB3aXRoIHRoZSBncm91cC1tZXNzYWdlIHR5cGUKLSAg
Ly8gYXMgaXRzIG1lc3NhZ2UgdHlwZSBhbmQgVFlQRV9HUk9VUCBhcyBpdHMgZmllbGQgdHlwZS4g
Rm9yIHN1Y2ggZmllbGRzLCB0aGUKLSAgLy8gaW5kZXggd2UgdXNlIGlzIHJlbGF0aXZlIHRvIHRo
ZSBmaWVsZCBudW1iZXIgb2YgdGhlIGdyb3VwIHN1Ym1lc3NhZ2UgZmllbGQuCi0gIC8vIEZvciBh
bGwgb3RoZXIgZmllbGRzLCB3ZSBqdXN0IHVzZSB0aGUgZmllbGQgbnVtYmVyLgotICBjb25zdCBE
ZXNjcmlwdG9yKiBjb250YWluaW5nX3R5cGUgPSBmaWVsZC0+Y29udGFpbmluZ190eXBlKCk7Ci0g
IGNvbnN0IERlc2NyaXB0b3IqIHBhcmVudF90eXBlID0gY29udGFpbmluZ190eXBlLT5jb250YWlu
aW5nX3R5cGUoKTsKLSAgaWYgKHBhcmVudF90eXBlICE9IE5VTEwpIHsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHBhcmVudF90eXBlLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICAgIGlmIChw
YXJlbnRfdHlwZS0+ZmllbGQoaSktPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JP
VVAgJiYKLSAgICAgICAgICBwYXJlbnRfdHlwZS0+ZmllbGQoaSktPm1lc3NhZ2VfdHlwZSgpID09
IGNvbnRhaW5pbmdfdHlwZSkgewotICAgICAgICByZXR1cm4gU2ltcGxlSXRvYShmaWVsZC0+bnVt
YmVyKCkgLSBwYXJlbnRfdHlwZS0+ZmllbGQoaSktPm51bWJlcigpKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLSAgcmV0dXJuIFNpbXBsZUl0b2EoZmllbGQtPm51bWJlcigpKTsKLX0KLQotc3RyaW5n
IEpTT25lb2ZJbmRleChjb25zdCBPbmVvZkRlc2NyaXB0b3IqIG9uZW9mKSB7Ci0gIGludCBpbmRl
eCA9IC0xOwotICBmb3IgKGludCBpID0gMDsgaSA8IG9uZW9mLT5jb250YWluaW5nX3R5cGUoKS0+
b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBPbmVvZkRlc2NyaXB0b3IqIG8g
PSBvbmVvZi0+Y29udGFpbmluZ190eXBlKCktPm9uZW9mX2RlY2woaSk7Ci0gICAgLy8gSWYgYXQg
bGVhc3Qgb25lIGZpZWxkIGluIHRoaXMgb25lb2YgaXMgbm90IEpTUEItaWdub3JlZCwgY291bnQg
dGhlIG9uZW9mLgotICAgIGZvciAoaW50IGogPSAwOyBqIDwgby0+ZmllbGRfY291bnQoKTsgaisr
KSB7Ci0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGYgPSBvLT5maWVsZChqKTsKLSAgICAg
IGlmICghSWdub3JlRmllbGQoZikpIHsKLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgYnJlYWs7
ICAvLyBpbm5lciBsb29wCi0gICAgICB9Ci0gICAgfQotICAgIGlmIChvID09IG9uZW9mKSB7Ci0g
ICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFNpbXBsZUl0b2EoaW5kZXgpOwotfQot
Ci0vLyBEZWNvZGVzIGEgY29kZXBvaW50IGluIFx4MDAwMCAtLSBceEZGRkYuCi11aW50MTYgRGVj
b2RlVVRGOENvZGVwb2ludCh1aW50OCogYnl0ZXMsIHNpemVfdCogbGVuZ3RoKSB7Ci0gIGlmICgq
bGVuZ3RoID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBzaXplX3QgZXhwZWN0ZWQgPSAw
OwotICBpZiAoKCpieXRlcyAmIDB4ODApID09IDApIHsKLSAgICBleHBlY3RlZCA9IDE7Ci0gIH0g
ZWxzZSBpZiAoKCpieXRlcyAmIDB4ZTApID09IDB4YzApIHsKLSAgICBleHBlY3RlZCA9IDI7Ci0g
IH0gZWxzZSBpZiAoKCpieXRlcyAmIDB4ZjApID09IDB4ZTApIHsKLSAgICBleHBlY3RlZCA9IDM7
Ci0gIH0gZWxzZSB7Ci0gICAgLy8gVG9vIGxvbmcgLS0gZG9uJ3QgYWNjZXB0LgotICAgICpsZW5n
dGggPSAwOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKCpsZW5ndGggPCBleHBlY3RlZCkg
ewotICAgIC8vIE5vdCBlbm91Z2ggYnl0ZXMgLS0gZG9uJ3QgYWNjZXB0LgotICAgICpsZW5ndGgg
PSAwOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgKmxlbmd0aCA9IGV4cGVjdGVkOwotICBzd2l0
Y2ggKGV4cGVjdGVkKSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gYnl0ZXNbMF07Ci0gICAgY2FzZSAy
OiByZXR1cm4gKChieXRlc1swXSAmIDB4MUYpIDw8IDYpICB8Ci0gICAgICAgICAgICAgICAgICAg
KChieXRlc1sxXSAmIDB4M0YpIDw8IDApOwotICAgIGNhc2UgMzogcmV0dXJuICgoYnl0ZXNbMF0g
JiAweDBGKSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICgoYnl0ZXNbMV0gJiAweDNGKSA8
PCA2KSAgfAotICAgICAgICAgICAgICAgICAgICgoYnl0ZXNbMl0gJiAweDNGKSA8PCAwKTsKLSAg
ICBkZWZhdWx0OiByZXR1cm4gMDsKLSAgfQotfQotCi0vLyBFc2NhcGVzIHRoZSBjb250ZW50cyBv
ZiBhIHN0cmluZyB0byBiZSBpbmNsdWRlZCB3aXRoaW4gZG91YmxlLXF1b3RlcyAoIiIpIGluCi0v
LyBKYXZhU2NyaXB0LiBUaGUgaW5wdXQgZGF0YSBzaG91bGQgYmUgYSBVVEYtOCBlbmNvZGVkIEMr
KyBzdHJpbmcgb2YgY2hhcnMuCi0vLyBSZXR1cm5zIGZhbHNlIGlmIHxvdXR8IHdhcyB0cnVuY2F0
ZWQgYmVjYXVzZSB8aW58IGNvbnRhaW5lZCBpbnZhbGlkIFVURi04IG9yCi0vLyBjb2RlcG9pbnRz
IG91dHNpZGUgdGhlIEJNUC4KLS8vIFRPRE8obHVrZXN0ZWJiaW5nKTogU3VwcG9ydCBjb2RlcG9p
bnRzIG91dHNpZGUgdGhlIEJNUC4KLWJvb2wgRXNjYXBlSlNTdHJpbmcoY29uc3Qgc3RyaW5nJiBp
biwgc3RyaW5nKiBvdXQpIHsKLSAgc2l6ZV90IGRlY29kZWQgPSAwOwotICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGluLnNpemUoKTsgaSArPSBkZWNvZGVkKSB7Ci0gICAgdWludDE2IGNvZGVwb2lu
dCA9IDA7Ci0gICAgLy8gRGVjb2RlIHRoZSBuZXh0IFVURi04IGNvZGVwb2ludC4KLSAgICBzaXpl
X3QgaGF2ZV9ieXRlcyA9IGluLnNpemUoKSAtIGk7Ci0gICAgdWludDggYnl0ZXNbM10gPSB7Ci0g
ICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4PihpbltpXSksCi0gICAgICAgIHN0YXRpY19jYXN0PHVp
bnQ4PigoKGkgKyAxKSA8IGluLnNpemUoKSkgPyBpbltpICsgMV0gOiAwKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDg+KCgoaSArIDIpIDwgaW4uc2l6ZSgpKSA/IGluW2kgKyAyXSA6IDApLAot
ICAgIH07Ci0gICAgY29kZXBvaW50ID0gRGVjb2RlVVRGOENvZGVwb2ludChieXRlcywgJmhhdmVf
Ynl0ZXMpOwotICAgIGlmIChoYXZlX2J5dGVzID09IDApIHsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgZGVjb2RlZCA9IGhhdmVfYnl0ZXM7Ci0KLSAgICBzd2l0Y2ggKGNvZGVwb2lu
dCkgewotICAgICAgY2FzZSAnXCcnOiAqb3V0ICs9ICJcXHgyNyI7IGJyZWFrOwotICAgICAgY2Fz
ZSAnIic6ICpvdXQgKz0gIlxceDIyIjsgYnJlYWs7Ci0gICAgICBjYXNlICc8JzogKm91dCArPSAi
XFx4M2MiOyBicmVhazsKLSAgICAgIGNhc2UgJz0nOiAqb3V0ICs9ICJcXHgzZCI7IGJyZWFrOwot
ICAgICAgY2FzZSAnPic6ICpvdXQgKz0gIlxceDNlIjsgYnJlYWs7Ci0gICAgICBjYXNlICcmJzog
Km91dCArPSAiXFx4MjYiOyBicmVhazsKLSAgICAgIGNhc2UgJ1xiJzogKm91dCArPSAiXFxiIjsg
YnJlYWs7Ci0gICAgICBjYXNlICdcdCc6ICpvdXQgKz0gIlxcdCI7IGJyZWFrOwotICAgICAgY2Fz
ZSAnXG4nOiAqb3V0ICs9ICJcXG4iOyBicmVhazsKLSAgICAgIGNhc2UgJ1xmJzogKm91dCArPSAi
XFxmIjsgYnJlYWs7Ci0gICAgICBjYXNlICdccic6ICpvdXQgKz0gIlxcciI7IGJyZWFrOwotICAg
ICAgY2FzZSAnXFwnOiAqb3V0ICs9ICJcXFxcIjsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICAvLyBUT0RPKGx1a2VzdGViYmluZyk6IE9uY2Ugd2UncmUgc3VwcG9ydGluZyBjb2RlcG9p
bnRzIG91dHNpZGUgdGhlIEJNUCwKLSAgICAgICAgLy8gdXNlIGEgc2luZ2xlIFVuaWNvZGUgY29k
ZXBvaW50IGVzY2FwZSBpZiB0aGUgb3V0cHV0IGxhbmd1YWdlIGlzCi0gICAgICAgIC8vIEVDTUFT
Y3JpcHQgMjAxNSBvciBhYm92ZS4gT3RoZXJ3aXNlLCB1c2UgYSBzdXJyb2dhdGUgcGFpci4KLSAg
ICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2
YVNjcmlwdC9SZWZlcmVuY2UvTGV4aWNhbF9ncmFtbWFyI1N0cmluZ19saXRlcmFscwotICAgICAg
ICBpZiAoY29kZXBvaW50ID49IDB4MjAgJiYgY29kZXBvaW50IDw9IDB4N2UpIHsKLSAgICAgICAg
ICAqb3V0ICs9IHN0YXRpY19jYXN0PGNoYXI+KGNvZGVwb2ludCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoY29kZXBvaW50ID49IDB4MTAwKSB7Ci0gICAgICAgICAgKm91dCArPSBTdHJpbmdQcmludGYo
IlxcdSUwNHgiLCBjb2RlcG9pbnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICpvdXQg
Kz0gU3RyaW5nUHJpbnRmKCJcXHglMDJ4IiwgY29kZXBvaW50KTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0cmluZyBFc2NhcGVC
YXNlNjQoY29uc3Qgc3RyaW5nJiBpbikgewotICBzdGF0aWMgY29uc3QgY2hhcioga0FscGhhYmV0
ID0KLSAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0
dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKLSAgc3RyaW5nIHJlc3VsdDsKLQotICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGluLnNpemUoKTsgaSArPSAzKSB7Ci0gICAgaW50IHZhbHVlID0gKGluW2ldIDw8
IDE2KSB8Ci0gICAgICAgICgoKGkgKyAxKSA8IGluLnNpemUoKSkgPyAoaW5baSArIDFdIDw8IDgp
IDogMCkgfAotICAgICAgICAoKChpICsgMikgPCBpbi5zaXplKCkpID8gKGluW2kgKyAyXSA8PCAw
KSA6IDApOwotICAgIHJlc3VsdCArPSBrQWxwaGFiZXRbKHZhbHVlID4+IDE4KSAmIDB4M2ZdOwot
ICAgIHJlc3VsdCArPSBrQWxwaGFiZXRbKHZhbHVlID4+IDEyKSAmIDB4M2ZdOwotICAgIGlmICgo
aSArIDEpIDwgaW4uc2l6ZSgpKSB7Ci0gICAgICByZXN1bHQgKz0ga0FscGhhYmV0Wyh2YWx1ZSA+
PiAgNikgJiAweDNmXTsKLSAgICB9IGVsc2UgewotICAgICAgcmVzdWx0ICs9ICc9JzsKLSAgICB9
Ci0gICAgaWYgKChpICsgMikgPCBpbi5zaXplKCkpIHsKLSAgICAgIHJlc3VsdCArPSBrQWxwaGFi
ZXRbKHZhbHVlID4+ICAwKSAmIDB4M2ZdOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXN1bHQgKz0g
Jz0nOwotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIFBvc3QtcHJvY2Vz
cyB0aGUgcmVzdWx0IG9mIFNpbXBsZUZ0b2EvU2ltcGxlRHRvYSB0byAqZXhhY3RseSogbWF0Y2gg
dGhlCi0vLyBvcmlnaW5hbCBjb2RlZ2VuJ3MgZm9ybWF0dGluZyAod2hpY2ggaXMganVzdCAudG9T
dHJpbmcoKSBvbiBqYXZhLmxhbmcuRG91YmxlCi0vLyBvciBqYXZhLmxhbmcuRmxvYXQpLgotc3Ry
aW5nIFBvc3RQcm9jZXNzRmxvYXQoc3RyaW5nIHJlc3VsdCkgewotICAvLyBJZiBpbmYsIC1pbmYg
b3IgbmFuLCByZXBsYWNlIHdpdGggK0luZmluaXR5LCAtSW5maW5pdHkgb3IgTmFOLgotICBpZiAo
cmVzdWx0ID09ICJpbmYiKSB7Ci0gICAgcmV0dXJuICJJbmZpbml0eSI7Ci0gIH0gZWxzZSBpZiAo
cmVzdWx0ID09ICItaW5mIikgewotICAgIHJldHVybiAiLUluZmluaXR5IjsKLSAgfSBlbHNlIGlm
IChyZXN1bHQgPT0gIm5hbiIpIHsKLSAgICByZXR1cm4gIk5hTiI7Ci0gIH0KLQotICAvLyBJZiBz
Y2llbnRpZmljIG5vdGF0aW9uIChlLmcuLCAiMWUxMCIpLCAoaSkgY2FwaXRhbGl6ZSB0aGUgImUi
LCAoaWkpCi0gIC8vIGVuc3VyZSB0aGF0IHRoZSBtYW50aXNzYSAocG9ydGlvbiBwcmlvciB0byB0
aGUgImUiKSBoYXMgYXQgbGVhc3Qgb25lCi0gIC8vIGZyYWN0aW9uYWwgZGlnaXQgKGFmdGVyIHRo
ZSBkZWNpbWFsIHBvaW50KSwgYW5kIChpaWkpIHN0cmlwIGFueSB1bm5lY2Vzc2FyeQotICAvLyBs
ZWFkaW5nIHplcm9lcyBhbmQvb3IgJysnIHNpZ25zIGZyb20gdGhlIGV4cG9uZW50LgotICBzdHJp
bmc6OnNpemVfdHlwZSBleHBfcG9zID0gcmVzdWx0LmZpbmQoJ2UnKTsKLSAgaWYgKGV4cF9wb3Mg
IT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgc3RyaW5nIG1hbnRpc3NhID0gcmVzdWx0LnN1YnN0cigw
LCBleHBfcG9zKTsKLSAgICBzdHJpbmcgZXhwb25lbnQgPSByZXN1bHQuc3Vic3RyKGV4cF9wb3Mg
KyAxKTsKLQotICAgIC8vIEFkZCAiLjAiIHRvIG1hbnRpc3NhIGlmIG5vIGZyYWN0aW9uYWwgcGFy
dCBleGlzdHMuCi0gICAgaWYgKG1hbnRpc3NhLmZpbmQoJy4nKSA9PSBzdHJpbmc6Om5wb3MpIHsK
LSAgICAgIG1hbnRpc3NhICs9ICIuMCI7Ci0gICAgfQotCi0gICAgLy8gU3RyaXAgdGhlIHNpZ24g
b2ZmIHRoZSBleHBvbmVudCBhbmQgc3RvcmUgYXMgfGV4cF9uZWd8LgotICAgIGJvb2wgZXhwX25l
ZyA9IGZhbHNlOwotICAgIGlmICghZXhwb25lbnQuZW1wdHkoKSAmJiBleHBvbmVudFswXSA9PSAn
KycpIHsKLSAgICAgIGV4cG9uZW50ID0gZXhwb25lbnQuc3Vic3RyKDEpOwotICAgIH0gZWxzZSBp
ZiAoIWV4cG9uZW50LmVtcHR5KCkgJiYgZXhwb25lbnRbMF0gPT0gJy0nKSB7Ci0gICAgICBleHBf
bmVnID0gdHJ1ZTsKLSAgICAgIGV4cG9uZW50ID0gZXhwb25lbnQuc3Vic3RyKDEpOwotICAgIH0K
LQotICAgIC8vIFN0cmlwIGFueSBsZWFkaW5nIHplcm9lcyBvZmYgdGhlIGV4cG9uZW50LgotICAg
IHdoaWxlIChleHBvbmVudC5zaXplKCkgPiAxICYmIGV4cG9uZW50WzBdID09ICcwJykgewotICAg
ICAgZXhwb25lbnQgPSBleHBvbmVudC5zdWJzdHIoMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1h
bnRpc3NhICsgIkUiICsgc3RyaW5nKGV4cF9uZWcgPyAiLSIgOiAiIikgKyBleHBvbmVudDsKLSAg
fQotCi0gIC8vIE90aGVyd2lzZSwgdGhpcyBpcyBhbiBvcmRpbmFyeSBkZWNpbWFsIG51bWJlci4g
QXBwZW5kICIuMCIgaWYgcmVzdWx0IGhhcyBubwotICAvLyBkZWNpbWFsL2ZyYWN0aW9uYWwgcGFy
dCBpbiBvcmRlciB0byBtYXRjaCBvdXRwdXQgb2Ygb3JpZ2luYWwgY29kZWdlbi4KLSAgaWYgKHJl
c3VsdC5maW5kKCcuJykgPT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgcmVzdWx0ICs9ICIuMCI7Ci0g
IH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdHJpbmcgRmxvYXRUb1N0cmluZyhmbG9hdCB2
YWx1ZSkgewotICBzdHJpbmcgcmVzdWx0ID0gU2ltcGxlRnRvYSh2YWx1ZSk7Ci0gIHJldHVybiBQ
b3N0UHJvY2Vzc0Zsb2F0KHJlc3VsdCk7Ci19Ci0KLXN0cmluZyBEb3VibGVUb1N0cmluZyhkb3Vi
bGUgdmFsdWUpIHsKLSAgc3RyaW5nIHJlc3VsdCA9IFNpbXBsZUR0b2EodmFsdWUpOwotICByZXR1
cm4gUG9zdFByb2Nlc3NGbG9hdChyZXN1bHQpOwotfQotCi1zdHJpbmcgTWF5YmVOdW1iZXJTdHJp
bmcoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgY29uc3Qgc3RyaW5nJiBvcmlnKSB7Ci0g
IHJldHVybiBvcmlnOwotfQotCi1zdHJpbmcgSlNGaWVsZERlZmF1bHQoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCkgewotICBhc3NlcnQoZmllbGQtPmhhc19kZWZhdWx0X3ZhbHVlKCkpOwot
ICBzd2l0Y2ggKGZpZWxkLT5jcHBfdHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfSU5UMzI6Ci0gICAgICByZXR1cm4gTWF5YmVOdW1iZXJTdHJpbmcoCi0gICAgICAg
ICAgZmllbGQsIFNpbXBsZUl0b2EoZmllbGQtPmRlZmF1bHRfdmFsdWVfaW50MzIoKSkpOwotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQzMjoKLSAgICAgIC8vIFRoZSBvcmln
aW5hbCBjb2RlZ2VuIGlzIGluIEphdmEsIGFuZCBKYXZhIHByb3RvYnVmcyBzdG9yZSB1bnNpZ25l
ZAotICAgICAgLy8gaW50ZWdlciB2YWx1ZXMgYXMgc2lnbmVkIGludGVnZXIgdmFsdWVzLiBJbiBv
cmRlciB0byBleGFjdGx5IG1hdGNoIHRoZQotICAgICAgLy8gb3V0cHV0LCB3ZSBuZWVkIHRvIHJl
aW50ZXJwcmV0IGFzIGJhc2UtMiBzaWduZWQuIFVnaC4KLSAgICAgIHJldHVybiBNYXliZU51bWJl
clN0cmluZygKLSAgICAgICAgICBmaWVsZCwgU2ltcGxlSXRvYShzdGF0aWNfY2FzdDxpbnQzMj4o
ZmllbGQtPmRlZmF1bHRfdmFsdWVfdWludDMyKCkpKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfSU5UNjQ6Ci0gICAgICByZXR1cm4gTWF5YmVOdW1iZXJTdHJpbmcoCi0gICAg
ICAgICAgZmllbGQsIFNpbXBsZUl0b2EoZmllbGQtPmRlZmF1bHRfdmFsdWVfaW50NjQoKSkpOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NDoKLSAgICAgIC8vIFNlZSBh
Ym92ZSBub3RlIGZvciB1aW50MzIgLS0gcmVpbnRlcnByZXRpbmcgYXMgc2lnbmVkLgotICAgICAg
cmV0dXJuIE1heWJlTnVtYmVyU3RyaW5nKAotICAgICAgICAgIGZpZWxkLCBTaW1wbGVJdG9hKHN0
YXRpY19jYXN0PGludDY0PihmaWVsZC0+ZGVmYXVsdF92YWx1ZV91aW50NjQoKSkpKTsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNOgotICAgICAgcmV0dXJuIFNpbXBsZUl0
b2EoZmllbGQtPmRlZmF1bHRfdmFsdWVfZW51bSgpLT5udW1iZXIoKSk7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICAgIHJldHVybiBmaWVsZC0+ZGVmYXVsdF92
YWx1ZV9ib29sKCkgPyAidHJ1ZSIgOiAiZmFsc2UiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpDUFBUWVBFX0ZMT0FUOgotICAgICAgcmV0dXJuIEZsb2F0VG9TdHJpbmcoZmllbGQtPmRlZmF1
bHRfdmFsdWVfZmxvYXQoKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRE9V
QkxFOgotICAgICAgcmV0dXJuIERvdWJsZVRvU3RyaW5nKGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2Rv
dWJsZSgpKTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6Ci0gICAg
ICBpZiAoZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU1RSSU5HKSB7Ci0g
ICAgICAgIHN0cmluZyBvdXQ7Ci0gICAgICAgIGJvb2wgaXNfdmFsaWQgPSBFc2NhcGVKU1N0cmlu
ZyhmaWVsZC0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKSwgJm91dCk7Ci0gICAgICAgIGlmICghaXNf
dmFsaWQpIHsKLSAgICAgICAgICAvLyBUT0RPKGx1a2VzdGViYmluZyk6IERlY2lkZSB3aGV0aGVy
IHRoaXMgc2hvdWxkIGJlIGEgaGFyZCBlcnJvci4KLSAgICAgICAgICBHT09HTEVfTE9HKFdBUk5J
TkcpIDw8ICJUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZmllbGQgIiA8PCBmaWVsZC0+ZnVsbF9uYW1l
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgIiB3YXMgdHJ1bmNhdGVkIHNpbmNlIGl0IGNv
bnRhaW5lZCBpbnZhbGlkIFVURi04IG9yIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNv
ZGVwb2ludHMgb3V0c2lkZSB0aGUgYmFzaWMgbXVsdGlsaW5ndWFsIHBsYW5lLiI7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuICJcIiIgKyBvdXQgKyAiXCIiOwotICAgICAgfSBlbHNlIHsgIC8v
IEJ5dGVzCi0gICAgICAgIHJldHVybiAiXCIiICsgRXNjYXBlQmFzZTY0KGZpZWxkLT5kZWZhdWx0
X3ZhbHVlX3N0cmluZygpKSArICJcIiI7Ci0gICAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgIHJldHVybiAibnVsbCI7Ci0gIH0KLSAgR09PR0xF
X0xPRyhGQVRBTCkgPDwgIlNob3VsZG4ndCByZWFjaCBoZXJlLiI7Ci0gIHJldHVybiAiIjsKLX0K
LQotc3RyaW5nIFByb3RvVHlwZU5hbWUoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywK
LSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAg
c3dpdGNoIChmaWVsZC0+dHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
Qk9PTDoKLSAgICAgIHJldHVybiAiYm9vbCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfSU5UMzI6Ci0gICAgICByZXR1cm4gImludDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9VSU5UMzI6Ci0gICAgICByZXR1cm4gInVpbnQzMiI7Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfU0lOVDMyOgotICAgICAgcmV0dXJuICJzaW50MzIiOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVEMzI6Ci0gICAgICByZXR1cm4gImZpeGVkMzIiOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDMyOgotICAgICAgcmV0dXJuICJz
Zml4ZWQzMiI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfSU5UNjQ6Ci0gICAgICBy
ZXR1cm4gImludDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UNjQ6Ci0g
ICAgICByZXR1cm4gInVpbnQ2NCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lO
VDY0OgotICAgICAgcmV0dXJuICJzaW50NjQiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpU
WVBFX0ZJWEVENjQ6Ci0gICAgICByZXR1cm4gImZpeGVkNjQiOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX1NGSVhFRDY0OgotICAgICAgcmV0dXJuICJzZml4ZWQ2NCI7Ci0gICAgY2Fz
ZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRkxPQVQ6Ci0gICAgICByZXR1cm4gImZsb2F0IjsKLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9ET1VCTEU6Ci0gICAgICByZXR1cm4gImRvdWJs
ZSI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU1RSSU5HOgotICAgICAgcmV0dXJu
ICJzdHJpbmciOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTOgotICAgICAg
cmV0dXJuICJieXRlcyI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVA6Ci0g
ICAgICByZXR1cm4gR2V0UGF0aChvcHRpb25zLCBmaWVsZC0+bWVzc2FnZV90eXBlKCkpOwotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU06Ci0gICAgICByZXR1cm4gR2V0UGF0aChv
cHRpb25zLCBmaWVsZC0+ZW51bV90eXBlKCkpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpU
WVBFX01FU1NBR0U6Ci0gICAgICByZXR1cm4gR2V0UGF0aChvcHRpb25zLCBmaWVsZC0+bWVzc2Fn
ZV90eXBlKCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gIiI7Ci0gIH0KLX0KLQotc3Ry
aW5nIEpTSW50ZWdlclR5cGVOYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAg
cmV0dXJuICJudW1iZXIiOwotfQotCi1zdHJpbmcgSlNTdHJpbmdUeXBlTmFtZShjb25zdCBHZW5l
cmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVzTW9kZSBi
eXRlc19tb2RlKSB7Ci0gIGlmIChmaWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9CWVRFUykgewotICAgIHN3aXRjaCAoYnl0ZXNfbW9kZSkgewotICAgICAgY2FzZSBCWVRFU19E
RUZBVUxUOgotICAgICAgICByZXR1cm4gIihzdHJpbmd8VWludDhBcnJheSkiOwotICAgICAgY2Fz
ZSBCWVRFU19CNjQ6Ci0gICAgICAgIHJldHVybiAic3RyaW5nIjsKLSAgICAgIGNhc2UgQllURVNf
VTg6Ci0gICAgICAgIHJldHVybiAiVWludDhBcnJheSI7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBhc3NlcnQoZmFsc2UpOwotICAgIH0KLSAgfQotICByZXR1cm4gInN0cmluZyI7Ci19Ci0KLXN0
cmluZyBKU1R5cGVOYW1lKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAg
ICAgQnl0ZXNNb2RlIGJ5dGVzX21vZGUpIHsKLSAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkg
ewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0w6Ci0gICAgICByZXR1cm4g
ImJvb2xlYW4iOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyOgotICAg
ICAgcmV0dXJuIEpTSW50ZWdlclR5cGVOYW1lKGZpZWxkKTsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9JTlQ2NDoKLSAgICAgIHJldHVybiBKU0ludGVnZXJUeXBlTmFtZShmaWVs
ZCk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMyOgotICAgICAgcmV0
dXJuIEpTSW50ZWdlclR5cGVOYW1lKGZpZWxkKTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9VSU5UNjQ6Ci0gICAgICByZXR1cm4gSlNJbnRlZ2VyVHlwZU5hbWUoZmllbGQpOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FUOgotICAgICAgcmV0dXJuICJu
dW1iZXIiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRToKLSAgICAg
IHJldHVybiAibnVtYmVyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJ
Tkc6Ci0gICAgICByZXR1cm4gSlNTdHJpbmdUeXBlTmFtZShvcHRpb25zLCBmaWVsZCwgYnl0ZXNf
bW9kZSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTToKLSAgICAgIHJl
dHVybiBHZXRQYXRoKG9wdGlvbnMsIGZpZWxkLT5lbnVtX3R5cGUoKSk7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgIHJldHVybiBHZXRQYXRoKG9wdGlv
bnMsIGZpZWxkLT5tZXNzYWdlX3R5cGUoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAi
IjsKLSAgfQotfQotCi1ib29sIEhhc0ZpZWxkUHJlc2VuY2UoY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCk7Ci0KLXN0cmluZyBKU0ZpZWxkVHlwZUFubm90YXRpb24oY29uc3QgR2VuZXJhdG9y
T3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBm
b3JjZV9vcHRpb25hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZV9w
cmVzZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNpbmd1bGFyX2lmX25v
dF9wYWNrZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVzTW9kZSBieXRlc19t
b2RlID0gQllURVNfREVGQVVMVCkgewotICBib29sIGlzX3ByaW1pdGl2ZSA9Ci0gICAgICAoZmll
bGQtPmNwcF90eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU0gJiYKLSAgICAg
ICBmaWVsZC0+Y3BwX3R5cGUoKSAhPSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSAm
JgotICAgICAgICAoZmllbGQtPnR5cGUoKSAhPSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMg
fHwKLSAgICAgICAgICAgIGJ5dGVzX21vZGUgPT0gQllURVNfQjY0KSk7Ci0KLSAgc3RyaW5nIGpz
dHlwZSA9IEpTVHlwZU5hbWUob3B0aW9ucywgZmllbGQsIGJ5dGVzX21vZGUpOwotCi0gIGlmIChm
aWVsZC0+aXNfcmVwZWF0ZWQoKSAmJgotICAgICAgKGZpZWxkLT5pc19wYWNrZWQoKSB8fCAhc2lu
Z3VsYXJfaWZfbm90X3BhY2tlZCkpIHsKLSAgICBpZiAoZmllbGQtPnR5cGUoKSA9PSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfQllURVMgJiYKLSAgICAgICAgYnl0ZXNfbW9kZSA9PSBCWVRFU19ERUZB
VUxUKSB7Ci0gICAgICBqc3R5cGUgPSAiKEFycmF5PCFVaW50OEFycmF5PnxBcnJheTxzdHJpbmc+
KSI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICghaXNfcHJpbWl0aXZlKSB7Ci0gICAgICAgIGpz
dHlwZSA9ICIhIiArIGpzdHlwZTsKLSAgICAgIH0KLSAgICAgIGpzdHlwZSA9ICJBcnJheS48IiAr
IGpzdHlwZSArICI+IjsKLSAgICB9Ci0gICAgaWYgKCFmb3JjZV9vcHRpb25hbCkgewotICAgICAg
anN0eXBlID0gIiEiICsganN0eXBlOwotICAgIH0KLSAgfQotCi0gIGlmIChmaWVsZC0+aXNfb3B0
aW9uYWwoKSAmJiBpc19wcmltaXRpdmUgJiYKLSAgICAgICghZmllbGQtPmhhc19kZWZhdWx0X3Zh
bHVlKCkgfHwgZm9yY2Vfb3B0aW9uYWwpICYmICFmb3JjZV9wcmVzZW50KSB7Ci0gICAganN0eXBl
ICs9ICI/IjsKLSAgfSBlbHNlIGlmIChmaWVsZC0+aXNfcmVxdWlyZWQoKSAmJiAhaXNfcHJpbWl0
aXZlICYmICFmb3JjZV9vcHRpb25hbCkgewotICAgIGpzdHlwZSA9ICIhIiArIGpzdHlwZTsKLSAg
fQotCi0gIGlmIChmb3JjZV9vcHRpb25hbCAmJiBIYXNGaWVsZFByZXNlbmNlKGZpZWxkKSkgewot
ICAgIGpzdHlwZSArPSAifHVuZGVmaW5lZCI7Ci0gIH0KLSAgaWYgKGZvcmNlX3ByZXNlbnQgJiYg
anN0eXBlWzBdICE9ICchJyAmJiAhaXNfcHJpbWl0aXZlKSB7Ci0gICAganN0eXBlID0gIiEiICsg
anN0eXBlOwotICB9Ci0KLSAgcmV0dXJuIGpzdHlwZTsKLX0KLQotc3RyaW5nIEpTQmluYXJ5UmVh
ZGVyTWV0aG9kVHlwZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHN0cmluZyBu
YW1lID0gZmllbGQtPnR5cGVfbmFtZSgpOwotICBpZiAobmFtZVswXSA+PSAnYScgJiYgbmFtZVsw
XSA8PSAneicpIHsKLSAgICBuYW1lWzBdID0gKG5hbWVbMF0gLSAnYScpICsgJ0EnOwotICB9Ci0K
LSAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0cmluZyBKU0JpbmFyeVJlYWRXcml0ZU1ldGhvZE5hbWUo
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpc193cml0ZXIpIHsKLSAgc3RyaW5nIG5hbWUgPSBKU0JpbmFyeVJlYWRl
ck1ldGhvZFR5cGUoZmllbGQpOwotICBpZiAoZmllbGQtPmlzX3BhY2tlZCgpKSB7Ci0gICAgbmFt
ZSA9ICJQYWNrZWQiICsgbmFtZTsKLSAgfSBlbHNlIGlmIChpc193cml0ZXIgJiYgZmllbGQtPmlz
X3JlcGVhdGVkKCkpIHsKLSAgICBuYW1lID0gIlJlcGVhdGVkIiArIG5hbWU7Ci0gIH0KLSAgcmV0
dXJuIG5hbWU7Ci19Ci0KLXN0cmluZyBKU0JpbmFyeVJlYWRlck1ldGhvZE5hbWUoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCkgewotICByZXR1cm4gInJlYWQiICsgSlNCaW5hcnlSZWFkV3Jp
dGVNZXRob2ROYW1lKGZpZWxkLCAvKiBpc193cml0ZXIgPSAqLyBmYWxzZSk7Ci19Ci0KLXN0cmlu
ZyBKU0JpbmFyeVdyaXRlck1ldGhvZE5hbWUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkg
ewotICByZXR1cm4gIndyaXRlIiArIEpTQmluYXJ5UmVhZFdyaXRlTWV0aG9kTmFtZShmaWVsZCwg
LyogaXNfd3JpdGVyID0gKi8gdHJ1ZSk7Ci19Ci0KLXN0cmluZyBKU1JldHVybkNsYXVzZShjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGRlc2MpIHsKLSAgcmV0dXJuICIiOwotfQotCi1zdHJpbmcgSlNS
ZXR1cm5Eb2MoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAg
ICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2MpIHsKLSAgcmV0dXJuICIiOwotfQotCi1i
b29sIEhhc1JlcGVhdGVkRmllbGRzKGNvbnN0IERlc2NyaXB0b3IqIGRlc2MpIHsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXNjLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBpZiAoZGVzYy0+
ZmllbGQoaSktPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
fQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrUmVwZWF0ZWRGaWVs
ZEFycmF5TmFtZSA9ICIucmVwZWF0ZWRGaWVsZHNfIjsKLQotc3RyaW5nIFJlcGVhdGVkRmllbGRz
QXJyYXlOYW1lKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYykgewotICByZXR1cm4gSGFz
UmVwZWF0ZWRGaWVsZHMoZGVzYykgPwotICAgICAgKEdldFBhdGgob3B0aW9ucywgZGVzYykgKyBr
UmVwZWF0ZWRGaWVsZEFycmF5TmFtZSkgOiAibnVsbCI7Ci19Ci0KLWJvb2wgSGFzT25lb2ZGaWVs
ZHMoY29uc3QgRGVzY3JpcHRvciogZGVzYykgewotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2Mt
PmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGlmIChkZXNjLT5maWVsZChpKS0+Y29udGFpbmlu
Z19vbmVvZigpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGZh
bHNlOwotfQotCi1zdGF0aWMgY29uc3QgY2hhcioga09uZW9mR3JvdXBBcnJheU5hbWUgPSAiLm9u
ZW9mR3JvdXBzXyI7Ci0KLXN0cmluZyBPbmVvZkZpZWxkc0FycmF5TmFtZShjb25zdCBHZW5lcmF0
b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERl
c2NyaXB0b3IqIGRlc2MpIHsKLSAgcmV0dXJuIEhhc09uZW9mRmllbGRzKGRlc2MpID8KLSAgICAg
IChHZXRQYXRoKG9wdGlvbnMsIGRlc2MpICsga09uZW9mR3JvdXBBcnJheU5hbWUpIDogIm51bGwi
OwotfQotCi1zdHJpbmcgUmVwZWF0ZWRGaWVsZE51bWJlckxpc3QoY29uc3QgRGVzY3JpcHRvciog
ZGVzYykgewotICBzdGQ6OnZlY3RvcjxzdHJpbmc+IG51bWJlcnM7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgZGVzYy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKGRlc2MtPmZpZWxkKGkp
LT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgICBudW1iZXJzLnB1c2hfYmFjayhKU0ZpZWxkSW5kZXgo
ZGVzYy0+ZmllbGQoaSkpKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuICJbIiArIEpvaW4obnVtYmVy
cywgIiwiKSArICJdIjsKLX0KLQotc3RyaW5nIE9uZW9mR3JvdXBMaXN0KGNvbnN0IERlc2NyaXB0
b3IqIGRlc2MpIHsKLSAgLy8gTGlzdCBvZiBhcnJheXMgKG9uZSBwZXIgb25lb2YpLCBlYWNoIG9m
IHdoaWNoIGlzIGEgbGlzdCBvZiBmaWVsZCBpbmRpY2VzCi0gIHN0ZDo6dmVjdG9yPHN0cmluZz4g
b25lb2ZfZW50cmllczsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5vbmVvZl9kZWNsX2Nv
dW50KCk7IGkrKykgewotICAgIGNvbnN0IE9uZW9mRGVzY3JpcHRvciogb25lb2YgPSBkZXNjLT5v
bmVvZl9kZWNsKGkpOwotICAgIGlmIChJZ25vcmVPbmVvZihvbmVvZikpIHsKLSAgICAgIGNvbnRp
bnVlOwotICAgIH0KLQotICAgIHN0ZDo6dmVjdG9yPHN0cmluZz4gb25lb2ZfZmllbGRzOwotICAg
IGZvciAoaW50IGogPSAwOyBqIDwgb25lb2YtPmZpZWxkX2NvdW50KCk7IGorKykgewotICAgICAg
aWYgKElnbm9yZUZpZWxkKG9uZW9mLT5maWVsZChqKSkpIHsKLSAgICAgICAgY29udGludWU7Ci0g
ICAgICB9Ci0gICAgICBvbmVvZl9maWVsZHMucHVzaF9iYWNrKEpTRmllbGRJbmRleChvbmVvZi0+
ZmllbGQoaikpKTsKLSAgICB9Ci0gICAgb25lb2ZfZW50cmllcy5wdXNoX2JhY2soIlsiICsgSm9p
bihvbmVvZl9maWVsZHMsICIsIikgKyAiXSIpOwotICB9Ci0gIHJldHVybiAiWyIgKyBKb2luKG9u
ZW9mX2VudHJpZXMsICIsIikgKyAiXSI7Ci19Ci0KLXN0cmluZyBKU09uZW9mQXJyYXkoY29uc3Qg
R2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCkgewotICByZXR1cm4gT25lb2ZGaWVsZHNBcnJheU5hbWUob3B0
aW9ucywgZmllbGQtPmNvbnRhaW5pbmdfdHlwZSgpKSArICJbIiArCi0gICAgICBKU09uZW9mSW5k
ZXgoZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSkgKyAiXSI7Ci19Ci0KLXN0cmluZyBSZWxhdGl2
ZVR5cGVOYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgYXNzZXJ0KGZpZWxk
LT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNIHx8Ci0gICAgICAg
ICBmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSk7
Ci0gIC8vIEZvciBhIGZpZWxkIHdpdGggYW4gZW51bSBvciBtZXNzYWdlIHR5cGUsIGNvbXB1dGUg
YSBuYW1lIHJlbGF0aXZlIHRvIHRoZQotICAvLyBwYXRoIG5hbWUgb2YgdGhlIG1lc3NhZ2UgdHlw
ZSBjb250YWluaW5nIHRoaXMgZmllbGQuCi0gIHN0cmluZyBwYWNrYWdlID0gZmllbGQtPmZpbGUo
KS0+cGFja2FnZSgpOwotICBzdHJpbmcgY29udGFpbmluZ190eXBlID0gZmllbGQtPmNvbnRhaW5p
bmdfdHlwZSgpLT5mdWxsX25hbWUoKSArICIuIjsKLSAgc3RyaW5nIHR5cGUgPSAoZmllbGQtPmNw
cF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU0pID8KLSAgICAgIGZpZWxk
LT5lbnVtX3R5cGUoKS0+ZnVsbF9uYW1lKCkgOiBmaWVsZC0+bWVzc2FnZV90eXBlKCktPmZ1bGxf
bmFtZSgpOwotCi0gIC8vIHxwcmVmaXh8IGlzIGFkdmFuY2VkIGFzIHdlIGZpbmQgc2VwYXJhdG9y
cyAnLicgcGFzdCB0aGUgY29tbW9uIHBhY2thZ2UKLSAgLy8gcHJlZml4IHRoYXQgeWllbGQgY29t
bW9uIHByZWZpeGVzIGluIHRoZSBjb250YWluaW5nIHR5cGUncyBuYW1lIGFuZCB0aGlzCi0gIC8v
IHR5cGUncyBuYW1lLgotICBpbnQgcHJlZml4ID0gMDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0
eXBlLnNpemUoKSAmJiBpIDwgY29udGFpbmluZ190eXBlLnNpemUoKTsgaSsrKSB7Ci0gICAgaWYg
KHR5cGVbaV0gIT0gY29udGFpbmluZ190eXBlW2ldKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
ICAgaWYgKHR5cGVbaV0gPT0gJy4nICYmIGkgPj0gcGFja2FnZS5zaXplKCkpIHsKLSAgICAgIHBy
ZWZpeCA9IGkgKyAxOwotICAgIH0KLSAgfQotCi0gIHJldHVybiB0eXBlLnN1YnN0cihwcmVmaXgp
OwotfQotCi1zdHJpbmcgSlNFeHRlbnNpb25zT2JqZWN0TmFtZShjb25zdCBHZW5lcmF0b3JPcHRp
b25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURl
c2NyaXB0b3IqIGZyb21fZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IERlc2NyaXB0b3IqIGRlc2MpIHsKLSAgaWYgKGRlc2MtPmZ1bGxfbmFtZSgpID09ICJnb29nbGUu
cHJvdG9idWYuYnJpZGdlLk1lc3NhZ2VTZXQiKSB7Ci0gICAgLy8gVE9ETyhoYWJlcm1hbik6IGZp
eCB0aGlzIGZvciB0aGUgSU1QT1JUX0NPTU1PTkpTIGNhc2UuCi0gICAgcmV0dXJuICJqc3BiLk1l
c3NhZ2UubWVzc2FnZVNldEV4dGVuc2lvbnMiOwotICB9IGVsc2UgewotICAgIHJldHVybiBNYXli
ZUNyb3NzRmlsZVJlZihvcHRpb25zLCBmcm9tX2ZpbGUsIGRlc2MpICsgIi5leHRlbnNpb25zIjsK
LSAgfQotfQotCi1zdHJpbmcgRmllbGREZWZpbml0aW9uKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMm
IG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQpIHsKLSAgc3RyaW5nIHF1YWxpZmllciA9IGZpZWxkLT5pc19yZXBlYXRlZCgpID8gInJl
cGVhdGVkIiA6Ci0gICAgICAoZmllbGQtPmlzX29wdGlvbmFsKCkgPyAib3B0aW9uYWwiIDogInJl
cXVpcmVkIik7Ci0gIHN0cmluZyB0eXBlLCBuYW1lOwotICBpZiAoZmllbGQtPnR5cGUoKSA9PSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfRU5VTSB8fAotICAgICAgZmllbGQtPnR5cGUoKSA9PSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSkgewotICAgIHR5cGUgPSBSZWxhdGl2ZVR5cGVOYW1l
KGZpZWxkKTsKLSAgICBuYW1lID0gZmllbGQtPm5hbWUoKTsKLSAgfSBlbHNlIGlmIChmaWVsZC0+
dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCkgewotICAgIHR5cGUgPSAiZ3Jv
dXAiOwotICAgIG5hbWUgPSBmaWVsZC0+bWVzc2FnZV90eXBlKCktPm5hbWUoKTsKLSAgfSBlbHNl
IHsKLSAgICB0eXBlID0gUHJvdG9UeXBlTmFtZShvcHRpb25zLCBmaWVsZCk7Ci0gICAgbmFtZSA9
IGZpZWxkLT5uYW1lKCk7Ci0gIH0KLSAgcmV0dXJuIFN0cmluZ1ByaW50ZigiJXMgJXMgJXMgPSAl
ZDsiLAotICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllci5jX3N0cigpLAotICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuYW1lLmNf
c3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgZmllbGQtPm51bWJlcigpKTsKLX0KLQotc3Ry
aW5nIEZpZWxkQ29tbWVudHMoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgQnl0ZXNNb2Rl
IGJ5dGVzX21vZGUpIHsKLSAgc3RyaW5nIGNvbW1lbnRzOwotICBpZiAoZmllbGQtPmNwcF90eXBl
KCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0wpIHsKLSAgICBjb21tZW50cyArPQot
ICAgICAgICAiICogTm90ZSB0aGF0IEJvb2xlYW4gZmllbGRzIG1heSBiZSBzZXQgdG8gMC8xIHdo
ZW4gc2VyaWFsaXplZCBmcm9tICIKLSAgICAgICAgImEgSmF2YSBzZXJ2ZXIuXG4iCi0gICAgICAg
ICIgKiBZb3Ugc2hvdWxkIGF2b2lkIGNvbXBhcmlzb25zIGxpa2Uge0Bjb2RlIHZhbCA9PT0gdHJ1
ZS9mYWxzZX0gaW4gIgotICAgICAgICAidGhvc2UgY2FzZXMuXG4iOwotICB9Ci0gIGlmIChmaWVs
ZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgIGNvbW1lbnRzICs9Ci0gICAgICAgICIgKiBJZiB5b3Ug
Y2hhbmdlIHRoaXMgYXJyYXkgYnkgYWRkaW5nLCByZW1vdmluZyBvciByZXBsYWNpbmcgIgotICAg
ICAgICAiZWxlbWVudHMsIG9yIGlmIHlvdVxuIgotICAgICAgICAiICogcmVwbGFjZSB0aGUgYXJy
YXkgaXRzZWxmLCB0aGVuIHlvdSBtdXN0IGNhbGwgdGhlIHNldHRlciB0byAiCi0gICAgICAgICJ1
cGRhdGUgaXQuXG4iOwotICB9Ci0gIGlmIChmaWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9CWVRFUyAmJiBieXRlc19tb2RlID09IEJZVEVTX1U4KSB7Ci0gICAgY29tbWVudHMg
Kz0KLSAgICAgICAgIiAqIE5vdGUgdGhhdCBVaW50OEFycmF5IGlzIG5vdCBzdXBwb3J0ZWQgb24g
YWxsIGJyb3dzZXJzLlxuIgotICAgICAgICAiICogQHNlZSBodHRwOi8vY2FuaXVzZS5jb20vVWlu
dDhBcnJheVxuIjsKLSAgfQotICByZXR1cm4gY29tbWVudHM7Ci19Ci0KLWJvb2wgU2hvdWxkR2Vu
ZXJhdGVFeHRlbnNpb24oY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICByZXR1cm4K
LSAgICAgIGZpZWxkLT5pc19leHRlbnNpb24oKSAmJgotICAgICAgIUlnbm9yZUZpZWxkKGZpZWxk
KTsKLX0KLQotYm9vbCBIYXNFeHRlbnNpb25zKGNvbnN0IERlc2NyaXB0b3IqIGRlc2MpIHsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5leHRlbnNpb25fY291bnQoKTsgaSsrKSB7Ci0gICAg
aWYgKFNob3VsZEdlbmVyYXRlRXh0ZW5zaW9uKGRlc2MtPmV4dGVuc2lvbihpKSkpIHsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPm5l
c3RlZF90eXBlX2NvdW50KCk7IGkrKykgewotICAgIGlmIChIYXNFeHRlbnNpb25zKGRlc2MtPm5l
c3RlZF90eXBlKGkpKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBIYXNFeHRlbnNpb25zKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBm
aWxlKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+ZXh0ZW5zaW9uX2NvdW50KCk7IGkr
KykgewotICAgIGlmIChTaG91bGRHZW5lcmF0ZUV4dGVuc2lvbihmaWxlLT5leHRlbnNpb24oaSkp
KSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmaWxlLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKEhhc0V4dGVuc2lv
bnMoZmlsZS0+bWVzc2FnZV90eXBlKGkpKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJc0V4dGVuZGFibGUoY29uc3QgRGVzY3Jp
cHRvciogZGVzYykgewotICByZXR1cm4gZGVzYy0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCkgPiAw
OwotfQotCi0vLyBSZXR1cm5zIHRoZSBtYXggaW5kZXggaW4gdGhlIHVuZGVybHlpbmcgZGF0YSBz
dG9yYWdlIGFycmF5IGJleW9uZCB3aGljaCB0aGUKLS8vIGV4dGVuc2lvbiBvYmplY3QgaXMgdXNl
ZC4KLXN0cmluZyBHZXRQaXZvdChjb25zdCBEZXNjcmlwdG9yKiBkZXNjKSB7Ci0gIHN0YXRpYyBj
b25zdCBpbnQga0RlZmF1bHRQaXZvdCA9ICgxIDw8IDI5KTsgIC8vIG1heCBmaWVsZCBudW1iZXIg
KDI5IGJpdHMpCi0KLSAgLy8gRmluZCB0aGUgbWF4IGZpZWxkIG51bWJlcgotICBpbnQgbWF4X2Zp
ZWxkX251bWJlciA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzYy0+ZmllbGRfY291bnQo
KTsgaSsrKSB7Ci0gICAgaWYgKCFJZ25vcmVGaWVsZChkZXNjLT5maWVsZChpKSkgJiYKLSAgICAg
ICAgZGVzYy0+ZmllbGQoaSktPm51bWJlcigpID4gbWF4X2ZpZWxkX251bWJlcikgewotICAgICAg
bWF4X2ZpZWxkX251bWJlciA9IGRlc2MtPmZpZWxkKGkpLT5udW1iZXIoKTsKLSAgICB9Ci0gIH0K
LQotICBpbnQgcGl2b3QgPSAtMTsKLSAgaWYgKElzRXh0ZW5kYWJsZShkZXNjKSkgewotICAgIHBp
dm90ID0gKChtYXhfZmllbGRfbnVtYmVyICsgMSkgPCBrRGVmYXVsdFBpdm90KSA/Ci0gICAgICAg
IChtYXhfZmllbGRfbnVtYmVyICsgMSkgOiBrRGVmYXVsdFBpdm90OwotICB9Ci0KLSAgcmV0dXJu
IFNpbXBsZUl0b2EocGl2b3QpOwotfQotCi0vLyBSZXR1cm5zIHRydWUgZm9yIGZpZWxkcyB0aGF0
IHJlcHJlc2VudCAibnVsbCIgYXMgZGlzdGluY3QgZnJvbSB0aGUgZGVmYXVsdAotLy8gdmFsdWUu
IFNlZSBodHRwOi8vZ28vcHJvdG8zI2hlYWRpbmc9aC5rb3pld3FxY3FodXogZm9yIG1vcmUgaW5m
b3JtYXRpb24uCi1ib29sIEhhc0ZpZWxkUHJlc2VuY2UoY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCkgewotICByZXR1cm4KLSAgICAgIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgfHwKLSAgICAgIChmaWVsZC0+Y29udGFpbmluZ19vbmVv
ZigpICE9IE5VTEwpIHx8Ci0gICAgICAoZmllbGQtPmZpbGUoKS0+c3ludGF4KCkgIT0gRmlsZURl
c2NyaXB0b3I6OlNZTlRBWF9QUk9UTzMpOwotfQotCi0vLyBGb3IgcHJvdG8zIGZpZWxkcyB3aXRo
b3V0IHByZXNlbmNlLCByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZGVmYXVsdAot
Ly8gdmFsdWUgaW4gSmF2YVNjcmlwdC4gU2VlIGh0dHA6Ly9nby9wcm90bzMjaGVhZGluZz1oLmtv
emV3cXFjcWh1eiBmb3IgbW9yZQotLy8gaW5mb3JtYXRpb24uCi1zdHJpbmcgUHJvdG8zUHJpbWl0
aXZlRmllbGREZWZhdWx0KGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgc3dpdGNo
IChmaWVsZC0+Y3BwX3R5cGUoKSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X0lOVDMyOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OgotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQzMjoKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9VSU5UNjQ6IHsKLSAgICAgIHJldHVybiAiMCI7Ci0gICAgfQotCi0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTToKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9GTE9BVDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9E
T1VCTEU6Ci0gICAgICByZXR1cm4gIjAiOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfQk9PTDoKLSAgICAgIHJldHVybiAiZmFsc2UiOwotCi0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfU1RSSU5HOiAgLy8gaW5jbHVkZXMgQllURVMKLSAgICAgIHJldHVybiAi
XCJcIiI7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgLy8gTUVTU0FHRSBpcyBoYW5kbGVkIHNlcGFy
YXRlbHkuCi0gICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgcmV0dXJuICIiOwotICB9Ci19Ci0K
LS8vIFdlIHVzZSB0aGlzIHRvIGltcGxlbWVudCB0aGUgc2VtYW50aWNzIHRoYXQgc2FtZSBmaWxl
IGNhbiBiZSBnZW5lcmF0ZWQKLS8vIG11bHRpcGxlIHRpbWVzLCBidXQgdGhlIGxhc3Qgb25lIHdp
bnMuICBXZSBuZXZlciBhY3R1YWxseSB3cml0ZSB0aGUgZmlsZXMsCi0vLyBidXQgd2Uga2VlcCBh
IHNldCBvZiB3aGljaCBkZXNjcmlwdG9ycyB3ZXJlIHRoZSBmaW5hbCBvbmUgZm9yIGEgZ2l2ZW4K
LS8vIGZpbGVuYW1lLgotY2xhc3MgRmlsZURlZHVwbGljYXRvciB7Ci0gcHVibGljOgotICBleHBs
aWNpdCBGaWxlRGVkdXBsaWNhdG9yKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMpCi0g
ICAgICA6IGVycm9yX29uX2NvbmZsaWN0XyhvcHRpb25zLmVycm9yX29uX25hbWVfY29uZmxpY3Qp
IHt9Ci0KLSAgYm9vbCBBZGRGaWxlKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IHZvaWQq
IGRlc2MsIHN0cmluZyogZXJyb3IpIHsKLSAgICBpZiAoZGVzY3NfYnlfZmlsZW5hbWVfLmZpbmQo
ZmlsZW5hbWUpICE9IGRlc2NzX2J5X2ZpbGVuYW1lXy5lbmQoKSkgewotICAgICAgaWYgKGVycm9y
X29uX2NvbmZsaWN0XykgewotICAgICAgICAqZXJyb3IgPSAiTmFtZSBjb25mbGljdDogZmlsZSBu
YW1lICIgKyBmaWxlbmFtZSArCi0gICAgICAgICAgICAgICAgICIgd291bGQgYmUgZ2VuZXJhdGVk
IGJ5IHR3byBkZXNjcmlwdG9ycyI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAg
ICAgIGFsbG93ZWRfZGVzY3NfLmVyYXNlKGRlc2NzX2J5X2ZpbGVuYW1lX1tmaWxlbmFtZV0pOwot
ICAgIH0KLQotICAgIGRlc2NzX2J5X2ZpbGVuYW1lX1tmaWxlbmFtZV0gPSBkZXNjOwotICAgIGFs
bG93ZWRfZGVzY3NfLmluc2VydChkZXNjKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHZv
aWQgR2V0QWxsb3dlZFNldChzZXQ8Y29uc3Qgdm9pZCo+KiBhbGxvd2VkX3NldCkgewotICAgICph
bGxvd2VkX3NldCA9IGFsbG93ZWRfZGVzY3NfOwotICB9Ci0KLSBwcml2YXRlOgotICBib29sIGVy
cm9yX29uX2NvbmZsaWN0XzsKLSAgbWFwPHN0cmluZywgY29uc3Qgdm9pZCo+IGRlc2NzX2J5X2Zp
bGVuYW1lXzsKLSAgc2V0PGNvbnN0IHZvaWQqPiBhbGxvd2VkX2Rlc2NzXzsKLX07Ci0KLXZvaWQg
RGVwdGhGaXJzdFNlYXJjaChjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAgICAgICAg
ICAgICAgICAgICB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiogbGlzdCwKLSAgICAgICAg
ICAgICAgICAgICAgICBzZXQ8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiogc2VlbikgewotICBpZiAo
IXNlZW4tPmluc2VydChmaWxlKS5zZWNvbmQpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBB
ZGQgYWxsIGRlcGVuZGVuY2llcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5kZXBlbmRl
bmN5X2NvdW50KCk7IGkrKykgewotICAgIERlcHRoRmlyc3RTZWFyY2goZmlsZS0+ZGVwZW5kZW5j
eShpKSwgbGlzdCwgc2Vlbik7Ci0gIH0KLQotICAvLyBBZGQgdGhpcyBmaWxlLgotICBsaXN0LT5w
dXNoX2JhY2soZmlsZSk7Ci19Ci0KLS8vIEEgZnVuY3RvciBmb3IgdGhlIHByZWRpY2F0ZSB0byBy
ZW1vdmVfaWYoKSBiZWxvdy4gIFJldHVybnMgdHJ1ZSBpZiBhIGdpdmVuCi0vLyBGaWxlRGVzY3Jp
cHRvciBpcyBub3QgaW4gdGhlIGdpdmVuIHNldC4KLWNsYXNzIE5vdEluU2V0IHsKLSBwdWJsaWM6
Ci0gIGV4cGxpY2l0IE5vdEluU2V0KGNvbnN0IHNldDxjb25zdCBGaWxlRGVzY3JpcHRvcio+JiBm
aWxlX3NldCkKLSAgICAgIDogZmlsZV9zZXRfKGZpbGVfc2V0KSB7fQotCi0gIGJvb2wgb3BlcmF0
b3IoKShjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSkgewotICAgIHJldHVybiBmaWxlX3NldF8u
Y291bnQoZmlsZSkgPT0gMDsKLSAgfQotCi0gcHJpdmF0ZToKLSAgY29uc3Qgc2V0PGNvbnN0IEZp
bGVEZXNjcmlwdG9yKj4mIGZpbGVfc2V0XzsKLX07Ci0KLS8vIFRoaXMgZnVuY3Rpb24gZ2VuZXJh
dGVzIGFuIG9yZGVyaW5nIG9mIHRoZSBpbnB1dCBGaWxlRGVzY3JpcHRvcnMgdGhhdCBtYXRjaGVz
Ci0vLyB0aGUgbG9naWMgb2YgdGhlIG9sZCBjb2RlIGdlbmVyYXRvci4gIFRoZSBvcmRlciBpcyBz
aWduaWZpY2FudCBiZWNhdXNlIHR3bwotLy8gZGlmZmVyZW50IGlucHV0IGZpbGVzIGNhbiBnZW5l
cmF0ZSB0aGUgc2FtZSBvdXRwdXQgZmlsZSwgYW5kIHRoZSBsYXN0IG9uZQotLy8gbmVlZHMgdG8g
d2luLgotdm9pZCBHZW5lcmF0ZUpzcGJGaWxlT3JkZXIoY29uc3QgdmVjdG9yPGNvbnN0IEZpbGVE
ZXNjcmlwdG9yKj4mIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPGNv
bnN0IEZpbGVEZXNjcmlwdG9yKj4qIG9yZGVyZWQpIHsKLSAgLy8gRmlyc3QgZ2VuZXJhdGUgYW4g
b3JkZXJpbmcgb2YgYWxsIHJlYWNoYWJsZSBmaWxlcyAoaW5jbHVkaW5nIGRlcGVuZGVuY2llcykK
LSAgLy8gd2l0aCBkZXB0aC1maXJzdCBzZWFyY2guICBUaGlzIG1pbWljcyB0aGUgYmVoYXZpb3Ig
b2YgLS1pbmNsdWRlX2ltcG9ydHMsCi0gIC8vIHdoaWNoIGlzIHdoYXQgdGhlIG9sZCBjb2RlZ2Vu
IHVzZWQuCi0gIG9yZGVyZWQtPmNsZWFyKCk7Ci0gIHNldDxjb25zdCBGaWxlRGVzY3JpcHRvcio+
IHNlZW47Ci0gIHNldDxjb25zdCBGaWxlRGVzY3JpcHRvcio+IGlucHV0X3NldDsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7IGkrKykgewotICAgIERlcHRoRmlyc3RTZWFyY2go
aW5wdXRbaV0sIG9yZGVyZWQsICZzZWVuKTsKLSAgICBpbnB1dF9zZXQuaW5zZXJ0KGlucHV0W2ld
KTsKLSAgfQotCi0gIC8vIE5vdyByZW1vdmUgdGhlIGVudHJpZXMgdGhhdCBhcmUgbm90IGFjdHVh
bGx5IGluIG91ciBpbnB1dCBsaXN0LgotICBvcmRlcmVkLT5lcmFzZSgKLSAgICAgIHN0ZDo6cmVt
b3ZlX2lmKG9yZGVyZWQtPmJlZ2luKCksIG9yZGVyZWQtPmVuZCgpLCBOb3RJblNldChpbnB1dF9z
ZXQpKSwKLSAgICAgIG9yZGVyZWQtPmVuZCgpKTsKLX0KLQotLy8gSWYgd2UncmUgZ2VuZXJhdGlu
ZyBjb2RlIGluIGZpbGUtcGVyLXR5cGUgbW9kZSwgYXZvaWQgb3ZlcndyaXRpbmcgZmlsZXMKLS8v
IGJ5IGNob29zaW5nIHRoZSBsYXN0IGRlc2NyaXB0b3IgdGhhdCB3cml0ZXMgZWFjaCBmaWxlbmFt
ZSBhbmQgcGVybWl0dGluZwotLy8gb25seSB0aG9zZSB0byBnZW5lcmF0ZSBjb2RlLgotCi1ib29s
IEdlbmVyYXRlSnNwYkFsbG93ZWRTZXQoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8Y29uc3QgRmlsZURlc2Ny
aXB0b3IqPiYgZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0PGNvbnN0IHZv
aWQqPiogYWxsb3dlZF9zZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBl
cnJvcikgewotICB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiBmaWxlc19vcmRlcmVkOwot
ICBHZW5lcmF0ZUpzcGJGaWxlT3JkZXIoZmlsZXMsICZmaWxlc19vcmRlcmVkKTsKLQotICAvLyBD
aG9vc2UgdGhlIGxhc3QgZGVzY3JpcHRvciBmb3IgZWFjaCBmaWxlbmFtZS4KLSAgRmlsZURlZHVw
bGljYXRvciBkZWR1cChvcHRpb25zKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlc19vcmRl
cmVkLnNpemUoKTsgaSsrKSB7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBmaWxlc19vcmRlcmVk
W2ldLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaisrKSB7Ci0gICAgICBjb25zdCBEZXNjcmlwdG9y
KiBkZXNjID0gZmlsZXNfb3JkZXJlZFtpXS0+bWVzc2FnZV90eXBlKGopOwotICAgICAgaWYgKCFk
ZWR1cC5BZGRGaWxlKEdldE1lc3NhZ2VGaWxlTmFtZShvcHRpb25zLCBkZXNjKSwgZGVzYywgZXJy
b3IpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChp
bnQgaiA9IDA7IGogPCBmaWxlc19vcmRlcmVkW2ldLT5lbnVtX3R5cGVfY291bnQoKTsgaisrKSB7
Ci0gICAgICBjb25zdCBFbnVtRGVzY3JpcHRvciogZGVzYyA9IGZpbGVzX29yZGVyZWRbaV0tPmVu
dW1fdHlwZShqKTsKLSAgICAgIGlmICghZGVkdXAuQWRkRmlsZShHZXRFbnVtRmlsZU5hbWUob3B0
aW9ucywgZGVzYyksIGRlc2MsIGVycm9yKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gUHVsbCBvdXQgYWxsIGZyZWUtZmxvYXRpbmcgZXh0ZW5zaW9u
cyBhbmQgZ2VuZXJhdGUgZmlsZXMgZm9yIHRob3NlIHRvby4KLSAgICBib29sIGhhc19leHRlbnNp
b24gPSBmYWxzZTsKLQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZmlsZXNfb3JkZXJlZFtpXS0+
ZXh0ZW5zaW9uX2NvdW50KCk7IGorKykgewotICAgICAgaWYgKFNob3VsZEdlbmVyYXRlRXh0ZW5z
aW9uKGZpbGVzX29yZGVyZWRbaV0tPmV4dGVuc2lvbihqKSkpIHsKLSAgICAgICAgaGFzX2V4dGVu
c2lvbiA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhhc19leHRlbnNpb24pIHsK
LSAgICAgIGlmICghZGVkdXAuQWRkRmlsZShHZXRFeHRlbnNpb25GaWxlTmFtZShvcHRpb25zLCBm
aWxlc19vcmRlcmVkW2ldKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc19vcmRlcmVk
W2ldLCBlcnJvcikpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIGRlZHVwLkdldEFsbG93ZWRTZXQoYWxsb3dlZF9zZXQpOwotCi0gIHJldHVybiB0cnVl
OwotfQotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgR2VuZXJhdG9yOjpHZW5l
cmF0ZUhlYWRlcihjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50
ZXItPlByaW50KCIvKipcbiIKLSAgICAgICAgICAgICAgICAgIiAqIEBmaWxlb3ZlcnZpZXdcbiIK
LSAgICAgICAgICAgICAgICAgIiAqIEBlbmhhbmNlYWJsZVxuIgotICAgICAgICAgICAgICAgICAi
ICogQHB1YmxpY1xuIgotICAgICAgICAgICAgICAgICAiICovXG4iCi0gICAgICAgICAgICAgICAg
ICIvLyBHRU5FUkFURUQgQ09ERSAtLSBETyBOT1QgRURJVCFcbiIKLSAgICAgICAgICAgICAgICAg
IlxuIik7Ci19Ci0KLXZvaWQgR2VuZXJhdG9yOjpGaW5kUHJvdmlkZXNGb3JGaWxlKGNvbnN0IEdl
bmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RyaW5nPiogcHJvdmlkZWQpIGNvbnN0IHsKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBmaWxlLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAg
RmluZFByb3ZpZGVzRm9yTWVzc2FnZShvcHRpb25zLCBwcmludGVyLCBmaWxlLT5tZXNzYWdlX3R5
cGUoaSksIHByb3ZpZGVkKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGUtPmVudW1f
dHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBGaW5kUHJvdmlkZXNGb3JFbnVtKG9wdGlvbnMsIHBy
aW50ZXIsIGZpbGUtPmVudW1fdHlwZShpKSwgcHJvdmlkZWQpOwotICB9Ci19Ci0KLXZvaWQgR2Vu
ZXJhdG9yOjpGaW5kUHJvdmlkZXMoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWxlRGVzY3JpcHRvcio+
JiBmaWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RyaW5nPiog
cHJvdmlkZWQpIGNvbnN0IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkr
KykgewotICAgIEZpbmRQcm92aWRlc0ZvckZpbGUob3B0aW9ucywgcHJpbnRlciwgZmlsZXNbaV0s
IHByb3ZpZGVkKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KCJcbiIpOwotfQotCi12b2lkIEdl
bmVyYXRvcjo6RmluZFByb3ZpZGVzRm9yTWVzc2FnZSgKLSAgICBjb25zdCBHZW5lcmF0b3JPcHRp
b25zJiBvcHRpb25zLAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgIGNvbnN0IERlc2Ny
aXB0b3IqIGRlc2MsCi0gICAgc3RkOjpzZXQ8c3RyaW5nPiogcHJvdmlkZWQpIGNvbnN0IHsKLSAg
c3RyaW5nIG5hbWUgPSBHZXRQYXRoKG9wdGlvbnMsIGRlc2MpOwotICBwcm92aWRlZC0+aW5zZXJ0
KG5hbWUpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzYy0+ZW51bV90eXBlX2NvdW50KCk7
IGkrKykgewotICAgIEZpbmRQcm92aWRlc0ZvckVudW0ob3B0aW9ucywgcHJpbnRlciwgZGVzYy0+
ZW51bV90eXBlKGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQpOwotICB9Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZGVzYy0+bmVzdGVkX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0g
ICAgRmluZFByb3ZpZGVzRm9yTWVzc2FnZShvcHRpb25zLCBwcmludGVyLCBkZXNjLT5uZXN0ZWRf
dHlwZShpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkKTsKLSAgfQotfQot
Ci12b2lkIEdlbmVyYXRvcjo6RmluZFByb3ZpZGVzRm9yRW51bShjb25zdCBHZW5lcmF0b3JPcHRp
b25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlBy
aW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBFbnVtRGVzY3JpcHRvciogZW51bWRlc2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiBwcm92aWRlZCkgY29uc3QgewotICBzdHJpbmcgbmFt
ZSA9IEdldFBhdGgob3B0aW9ucywgZW51bWRlc2MpOwotICBwcm92aWRlZC0+aW5zZXJ0KG5hbWUp
OwotfQotCi12b2lkIEdlbmVyYXRvcjo6RmluZFByb3ZpZGVzRm9yRmllbGRzKAotICAgIGNvbnN0
IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0g
ICAgY29uc3QgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBmaWVsZHMsCi0gICAgc3Rk
OjpzZXQ8c3RyaW5nPiogcHJvdmlkZWQpIGNvbnN0IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
aWVsZHMuc2l6ZSgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0g
ZmllbGRzW2ldOwotCi0gICAgaWYgKElnbm9yZUZpZWxkKGZpZWxkKSkgewotICAgICAgY29udGlu
dWU7Ci0gICAgfQotCi0gICAgc3RyaW5nIG5hbWUgPQotICAgICAgICBHZXRQYXRoKG9wdGlvbnMs
IGZpZWxkLT5maWxlKCkpICsgIi4iICsgSlNPYmplY3RGaWVsZE5hbWUoZmllbGQpOwotICAgIHBy
b3ZpZGVkLT5pbnNlcnQobmFtZSk7Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRl
UHJvdmlkZXMoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RyaW5nPiogcHJvdmlkZWQpIGNvbnN0IHsKLSAg
Zm9yIChzdGQ6OnNldDxzdHJpbmc+OjppdGVyYXRvciBpdCA9IHByb3ZpZGVkLT5iZWdpbigpOwot
ICAgICAgIGl0ICE9IHByb3ZpZGVkLT5lbmQoKTsgKytpdCkgewotICAgIHByaW50ZXItPlByaW50
KCJnb29nLnByb3ZpZGUoJyRuYW1lJCcpO1xuIiwKLSAgICAgICAgICAgICAgICAgICAibmFtZSIs
ICppdCk7Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRlUmVxdWlyZXNGb3JNZXNz
YWdlKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNldDxzdHJp
bmc+KiBwcm92aWRlZCkgY29uc3QgewotICBzdGQ6OnNldDxzdHJpbmc+IHJlcXVpcmVkOwotICBz
dGQ6OnNldDxzdHJpbmc+IGZvcndhcmRzOwotICBib29sIGhhdmVfbWVzc2FnZSA9IGZhbHNlOwot
ICBGaW5kUmVxdWlyZXNGb3JNZXNzYWdlKG9wdGlvbnMsIGRlc2MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJnJlcXVpcmVkLCAmZm9yd2FyZHMsICZoYXZlX21lc3NhZ2UpOwotCi0gIEdlbmVy
YXRlUmVxdWlyZXNJbXBsKG9wdGlvbnMsIHByaW50ZXIsICZyZXF1aXJlZCwgJmZvcndhcmRzLCBw
cm92aWRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgLyogcmVxdWlyZV9qc3BiID0gKi8gaGF2
ZV9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAvKiByZXF1aXJlX2V4dGVuc2lvbiA9
ICovIEhhc0V4dGVuc2lvbnMoZGVzYykpOwotfQotCi12b2lkIEdlbmVyYXRvcjo6R2VuZXJhdGVS
ZXF1aXJlc0ZvckxpYnJhcnkoCi0gICAgY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywg
aW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgY29uc3QgdmVjdG9yPGNvbnN0IEZpbGVEZXNjcmlw
dG9yKj4mIGZpbGVzLAotICAgIHN0ZDo6c2V0PHN0cmluZz4qIHByb3ZpZGVkKSBjb25zdCB7Ci0g
IEdPT0dMRV9DSEVDS19FUShvcHRpb25zLmltcG9ydF9zdHlsZSwgR2VuZXJhdG9yT3B0aW9uczo6
SU1QT1JUX0NMT1NVUkUpOwotICAvLyBGb3IgQ2xvc3VyZSBpbXBvcnRzIHdlIG5lZWQgdG8gaW1w
b3J0IGV2ZXJ5IG1lc3NhZ2UgdHlwZSBpbmRpdmlkdWFsbHkuCi0gIHN0ZDo6c2V0PHN0cmluZz4g
cmVxdWlyZWQ7Ci0gIHN0ZDo6c2V0PHN0cmluZz4gZm9yd2FyZHM7Ci0gIGJvb2wgaGF2ZV9leHRl
bnNpb25zID0gZmFsc2U7Ci0gIGJvb2wgaGF2ZV9tZXNzYWdlID0gZmFsc2U7Ci0KLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkrKykgewotICAgIGZvciAoaW50IGogPSAwOyBq
IDwgZmlsZXNbaV0tPm1lc3NhZ2VfdHlwZV9jb3VudCgpOyBqKyspIHsKLSAgICAgIEZpbmRSZXF1
aXJlc0Zvck1lc3NhZ2Uob3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls
ZXNbaV0tPm1lc3NhZ2VfdHlwZShqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJl
cXVpcmVkLCAmZm9yd2FyZHMsICZoYXZlX21lc3NhZ2UpOwotICAgIH0KLSAgICBpZiAoIWhhdmVf
ZXh0ZW5zaW9ucyAmJiBIYXNFeHRlbnNpb25zKGZpbGVzW2ldKSkgewotICAgICAgaGF2ZV9leHRl
bnNpb25zID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGZpbGVzW2ld
LT5leHRlbnNpb25fY291bnQoKTsgaisrKSB7Ci0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGV4dGVuc2lvbiA9IGZpbGVzW2ldLT5leHRlbnNpb24oaik7Ci0gICAgICBpZiAoSWdub3JlRmll
bGQoZXh0ZW5zaW9uKSkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGlmIChl
eHRlbnNpb24tPmNvbnRhaW5pbmdfdHlwZSgpLT5mdWxsX25hbWUoKSAhPQotICAgICAgICAiZ29v
Z2xlLnByb3RvYnVmLmJyaWRnZS5NZXNzYWdlU2V0IikgewotICAgICAgICByZXF1aXJlZC5pbnNl
cnQoR2V0UGF0aChvcHRpb25zLCBleHRlbnNpb24tPmNvbnRhaW5pbmdfdHlwZSgpKSk7Ci0gICAg
ICB9Ci0gICAgICBGaW5kUmVxdWlyZXNGb3JGaWVsZChvcHRpb25zLCBleHRlbnNpb24sICZyZXF1
aXJlZCwgJmZvcndhcmRzKTsKLSAgICAgIGhhdmVfZXh0ZW5zaW9ucyA9IHRydWU7Ci0gICAgfQot
ICB9Ci0KLSAgR2VuZXJhdGVSZXF1aXJlc0ltcGwob3B0aW9ucywgcHJpbnRlciwgJnJlcXVpcmVk
LCAmZm9yd2FyZHMsIHByb3ZpZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAvKiByZXF1aXJl
X2pzcGIgPSAqLyBoYXZlX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgIC8qIHJlcXVp
cmVfZXh0ZW5zaW9uID0gKi8gaGF2ZV9leHRlbnNpb25zKTsKLX0KLQotdm9pZCBHZW5lcmF0b3I6
OkdlbmVyYXRlUmVxdWlyZXNGb3JFeHRlbnNpb25zKAotICAgIGNvbnN0IEdlbmVyYXRvck9wdGlv
bnMmIG9wdGlvbnMsIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgIGNvbnN0IHZlY3Rvcjxjb25z
dCBGaWVsZERlc2NyaXB0b3IqPiYgZmllbGRzLAotICAgIHN0ZDo6c2V0PHN0cmluZz4qIHByb3Zp
ZGVkKSBjb25zdCB7Ci0gIHN0ZDo6c2V0PHN0cmluZz4gcmVxdWlyZWQ7Ci0gIHN0ZDo6c2V0PHN0
cmluZz4gZm9yd2FyZHM7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsr
KSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGZpZWxkc1tpXTsKLSAgICBp
ZiAoSWdub3JlRmllbGQoZmllbGQpKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgRmlu
ZFJlcXVpcmVzRm9yRXh0ZW5zaW9uKG9wdGlvbnMsIGZpZWxkLCAmcmVxdWlyZWQsICZmb3J3YXJk
cyk7Ci0gIH0KLQotICBHZW5lcmF0ZVJlcXVpcmVzSW1wbChvcHRpb25zLCBwcmludGVyLCAmcmVx
dWlyZWQsICZmb3J3YXJkcywgcHJvdmlkZWQsCi0gICAgICAgICAgICAgICAgICAgICAgIC8qIHJl
cXVpcmVfanNwYiA9ICovIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAvKiByZXF1aXJl
X2V4dGVuc2lvbiA9ICovIGZpZWxkcy5zaXplKCkgPiAwKTsKLX0KLQotdm9pZCBHZW5lcmF0b3I6
OkdlbmVyYXRlUmVxdWlyZXNJbXBsKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RyaW5nPiog
cmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8
c3RyaW5nPiogZm9yd2FyZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjpzZXQ8c3RyaW5nPiogcHJvdmlkZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCByZXF1aXJlX2pzcGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCByZXF1aXJlX2V4dGVuc2lvbikgY29uc3QgewotICBpZiAocmVxdWlyZV9q
c3BiKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJnb29nLnJlcXVpcmUoJ2pzcGIu
TWVzc2FnZScpO1xuIik7Ci0gICAgaWYgKG9wdGlvbnMuYmluYXJ5KSB7Ci0gICAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICAgICAiZ29vZy5yZXF1aXJlKCdqc3BiLkJpbmFyeVJlYWRlcicpO1xu
IgotICAgICAgICAgICJnb29nLnJlcXVpcmUoJ2pzcGIuQmluYXJ5V3JpdGVyJyk7XG4iKTsKLSAg
ICB9Ci0gIH0KLSAgaWYgKHJlcXVpcmVfZXh0ZW5zaW9uKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAgICJnb29nLnJlcXVpcmUoJ2pzcGIuRXh0ZW5zaW9uRmllbGRJbmZvJyk7XG4iKTsK
LSAgfQotCi0gIHN0ZDo6c2V0PHN0cmluZz46Oml0ZXJhdG9yIGl0OwotICBmb3IgKGl0ID0gcmVx
dWlyZWQtPmJlZ2luKCk7IGl0ICE9IHJlcXVpcmVkLT5lbmQoKTsgKytpdCkgewotICAgIGlmIChw
cm92aWRlZC0+ZmluZCgqaXQpICE9IHByb3ZpZGVkLT5lbmQoKSkgewotICAgICAgY29udGludWU7
Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50KCJnb29nLnJlcXVpcmUoJyRuYW1lJCcpO1xuIiwK
LSAgICAgICAgICAgICAgICAgICAibmFtZSIsICppdCk7Ci0gIH0KLQotICBwcmludGVyLT5Qcmlu
dCgiXG4iKTsKLQotICBmb3IgKGl0ID0gZm9yd2FyZHMtPmJlZ2luKCk7IGl0ICE9IGZvcndhcmRz
LT5lbmQoKTsgKytpdCkgewotICAgIGlmIChwcm92aWRlZC0+ZmluZCgqaXQpICE9IHByb3ZpZGVk
LT5lbmQoKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50KCJn
b29nLmZvcndhcmREZWNsYXJlKCckbmFtZSQnKTtcbiIsCi0gICAgICAgICAgICAgICAgICAgIm5h
bWUiLCAqaXQpOwotICB9Ci19Ci0KLWJvb2wgTmFtZXNwYWNlT25seShjb25zdCBEZXNjcmlwdG9y
KiBkZXNjKSB7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHZW5lcmF0b3I6OkZpbmRSZXF1
aXJlc0Zvck1lc3NhZ2UoCi0gICAgY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAg
ICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjLAotICAgIHN0ZDo6c2V0PHN0cmluZz4qIHJlcXVpcmVk
LAotICAgIHN0ZDo6c2V0PHN0cmluZz4qIGZvcndhcmRzLAotICAgIGJvb2wqIGhhdmVfbWVzc2Fn
ZSkgY29uc3QgewotCi0KLSAgaWYgKCFOYW1lc3BhY2VPbmx5KGRlc2MpKSB7Ci0gICAgKmhhdmVf
bWVzc2FnZSA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5maWVsZF9jb3Vu
dCgpOyBpKyspIHsKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjLT5m
aWVsZChpKTsKLSAgICAgIGlmIChJZ25vcmVGaWVsZChmaWVsZCkpIHsKLSAgICAgICAgY29udGlu
dWU7Ci0gICAgICB9Ci0gICAgICBGaW5kUmVxdWlyZXNGb3JGaWVsZChvcHRpb25zLCBmaWVsZCwg
cmVxdWlyZWQsIGZvcndhcmRzKTsKLSAgICB9Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8
IGRlc2MtPmV4dGVuc2lvbl9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkID0gZGVzYy0+ZXh0ZW5zaW9uKGkpOwotICAgIGlmIChJZ25vcmVGaWVsZChmaWVs
ZCkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBGaW5kUmVxdWlyZXNGb3JFeHRlbnNp
b24ob3B0aW9ucywgZmllbGQsIHJlcXVpcmVkLCBmb3J3YXJkcyk7Ci0gIH0KLQotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGRlc2MtPm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykgewotICAgIEZpbmRS
ZXF1aXJlc0Zvck1lc3NhZ2Uob3B0aW9ucywgZGVzYy0+bmVzdGVkX3R5cGUoaSksIHJlcXVpcmVk
LCBmb3J3YXJkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVfbWVzc2FnZSk7Ci0g
IH0KLX0KLQotdm9pZCBHZW5lcmF0b3I6OkZpbmRSZXF1aXJlc0ZvckZpZWxkKGNvbnN0IEdlbmVy
YXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiByZXF1aXJlZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiBmb3J3YXJkcykgY29uc3Qg
ewotICAgIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
RU5VTSAmJgotICAgICAgICAvLyBOLkIuOiBmaWxlLWxldmVsIGV4dGVuc2lvbnMgd2l0aCBlbnVt
IHR5cGUgZG8gKm5vdCogY3JlYXRlCi0gICAgICAgIC8vIGRlcGVuZGVuY2llcywgYXMgcGVyIG9y
aWdpbmFsIGNvZGVnZW4uCi0gICAgICAgICEoZmllbGQtPmlzX2V4dGVuc2lvbigpICYmIGZpZWxk
LT5leHRlbnNpb25fc2NvcGUoKSA9PSBOVUxMKSkgewotICAgICAgaWYgKG9wdGlvbnMuYWRkX3Jl
cXVpcmVfZm9yX2VudW1zKSB7Ci0gICAgICAgIHJlcXVpcmVkLT5pbnNlcnQoR2V0UGF0aChvcHRp
b25zLCBmaWVsZC0+ZW51bV90eXBlKCkpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvcndh
cmRzLT5pbnNlcnQoR2V0UGF0aChvcHRpb25zLCBmaWVsZC0+ZW51bV90eXBlKCkpKTsKLSAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9NRVNTQUdFKSB7Ci0gICAgICByZXF1aXJlZC0+aW5zZXJ0KEdldFBhdGgob3B0aW9u
cywgZmllbGQtPm1lc3NhZ2VfdHlwZSgpKSk7Ci0gICAgfQotfQotCi12b2lkIEdlbmVyYXRvcjo6
RmluZFJlcXVpcmVzRm9yRXh0ZW5zaW9uKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c2V0PHN0cmluZz4qIHJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiBmb3J3YXJkcykgY29uc3QgewotICAgIGlm
IChmaWVsZC0+Y29udGFpbmluZ190eXBlKCktPmZ1bGxfbmFtZSgpICE9ICJnb29nbGUucHJvdG9i
dWYuYnJpZGdlLk1lc3NhZ2VTZXQiKSB7Ci0gICAgICByZXF1aXJlZC0+aW5zZXJ0KEdldFBhdGgo
b3B0aW9ucywgZmllbGQtPmNvbnRhaW5pbmdfdHlwZSgpKSk7Ci0gICAgfQotICAgIEZpbmRSZXF1
aXJlc0ZvckZpZWxkKG9wdGlvbnMsIGZpZWxkLCByZXF1aXJlZCwgZm9yd2FyZHMpOwotfQotCi12
b2lkIEdlbmVyYXRvcjo6R2VuZXJhdGVUZXN0T25seShjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBv
cHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0IHsKLSAgaWYgKG9wdGlvbnMudGVzdG9ubHkpIHsKLSAgICBwcmludGVyLT5Q
cmludCgiZ29vZy5zZXRUZXN0T25seSgpO1xuXG4iKTsKLSAgfQotICBwcmludGVyLT5QcmludCgi
XG4iKTsKLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRlQ2xhc3Nlc0FuZEVudW1zKGNvbnN0
IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUpIGNvbnN0IHsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0g
ICAgR2VuZXJhdGVDbGFzcyhvcHRpb25zLCBwcmludGVyLCBmaWxlLT5tZXNzYWdlX3R5cGUoaSkp
OwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+ZW51bV90eXBlX2NvdW50KCk7IGkr
KykgewotICAgIEdlbmVyYXRlRW51bShvcHRpb25zLCBwcmludGVyLCBmaWxlLT5lbnVtX3R5cGUo
aSkpOwotICB9Ci19Ci0KLXZvaWQgR2VuZXJhdG9yOjpHZW5lcmF0ZUNsYXNzKGNvbnN0IEdlbmVy
YXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6
UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERl
c2NyaXB0b3IqIGRlc2MpIGNvbnN0IHsKLSAgaWYgKCFOYW1lc3BhY2VPbmx5KGRlc2MpKSB7Ci0g
ICAgcHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gICAgR2VuZXJhdGVDbGFzc0NvbnN0cnVjdG9yKG9w
dGlvbnMsIHByaW50ZXIsIGRlc2MpOwotICAgIEdlbmVyYXRlQ2xhc3NGaWVsZEluZm8ob3B0aW9u
cywgcHJpbnRlciwgZGVzYyk7Ci0KLQotICAgIEdlbmVyYXRlQ2xhc3NUb09iamVjdChvcHRpb25z
LCBwcmludGVyLCBkZXNjKTsKLSAgICBpZiAob3B0aW9ucy5iaW5hcnkpIHsKLSAgICAgIC8vIFRo
ZXNlIG11c3QgY29tZSAqYmVmb3JlKiB0aGUgZXh0ZW5zaW9uLWZpZWxkIGluZm8gZ2VuZXJhdGlv
biBpbgotICAgICAgLy8gR2VuZXJhdGVDbGFzc1JlZ2lzdHJhdGlvbiBzbyB0aGF0IHJlZmVyZW5j
ZXMgdG8gdGhlIGJpbmFyeQotICAgICAgLy8gc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24g
ZnVuY3Rpb25zIG1heSBiZSBwbGFjZWQgaW4gdGhlIGV4dGVuc2lvbgotICAgICAgLy8gb2JqZWN0
cy4KLSAgICAgIEdlbmVyYXRlQ2xhc3NEZXNlcmlhbGl6ZUJpbmFyeShvcHRpb25zLCBwcmludGVy
LCBkZXNjKTsKLSAgICAgIEdlbmVyYXRlQ2xhc3NTZXJpYWxpemVCaW5hcnkob3B0aW9ucywgcHJp
bnRlciwgZGVzYyk7Ci0gICAgfQotICAgIEdlbmVyYXRlQ2xhc3NDbG9uZShvcHRpb25zLCBwcmlu
dGVyLCBkZXNjKTsKLSAgICBHZW5lcmF0ZUNsYXNzUmVnaXN0cmF0aW9uKG9wdGlvbnMsIHByaW50
ZXIsIGRlc2MpOwotICAgIEdlbmVyYXRlQ2xhc3NGaWVsZHMob3B0aW9ucywgcHJpbnRlciwgZGVz
Yyk7Ci0gICAgaWYgKElzRXh0ZW5kYWJsZShkZXNjKSAmJiBkZXNjLT5mdWxsX25hbWUoKSAhPSAi
Z29vZ2xlLnByb3RvYnVmLmJyaWRnZS5NZXNzYWdlU2V0IikgewotICAgICAgR2VuZXJhdGVDbGFz
c0V4dGVuc2lvbkZpZWxkSW5mbyhvcHRpb25zLCBwcmludGVyLCBkZXNjKTsKLSAgICB9Ci0KLSAg
ICBpZiAob3B0aW9ucy5pbXBvcnRfc3R5bGUgIT0gR2VuZXJhdG9yT3B0aW9uczo6IElNUE9SVF9D
TE9TVVJFKSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPmV4dGVuc2lvbl9jb3Vu
dCgpOyBpKyspIHsKLSAgICAgICAgR2VuZXJhdGVFeHRlbnNpb24ob3B0aW9ucywgcHJpbnRlciwg
ZGVzYy0+ZXh0ZW5zaW9uKGkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBSZWN1cnNl
IG9uIG5lc3RlZCB0eXBlcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5lbnVtX3R5cGVf
Y291bnQoKTsgaSsrKSB7Ci0gICAgR2VuZXJhdGVFbnVtKG9wdGlvbnMsIHByaW50ZXIsIGRlc2Mt
PmVudW1fdHlwZShpKSk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5uZXN0ZWRf
dHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBHZW5lcmF0ZUNsYXNzKG9wdGlvbnMsIHByaW50ZXIs
IGRlc2MtPm5lc3RlZF90eXBlKGkpKTsKLSAgfQotfQotCi12b2lkIEdlbmVyYXRvcjo6R2VuZXJh
dGVDbGFzc0NvbnN0cnVjdG9yKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXNjcmlw
dG9yKiBkZXNjKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgIi8qKlxuIgotICAg
ICAgIiAqIEdlbmVyYXRlZCBieSBKc1BiQ29kZUdlbmVyYXRvci5cbiIKLSAgICAgICIgKiBAcGFy
YW0ge0FycmF5PX0gb3B0X2RhdGEgT3B0aW9uYWwgaW5pdGlhbCBkYXRhIGFycmF5LCB0eXBpY2Fs
bHkgIgotICAgICAgImZyb20gYVxuIgotICAgICAgIiAqIHNlcnZlciByZXNwb25zZSwgb3IgY29u
c3RydWN0ZWQgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdC4gVGhlIGFycmF5ICIKLSAgICAgICJpcyB1
c2VkXG4iCi0gICAgICAiICogaW4gcGxhY2UgYW5kIGJlY29tZXMgcGFydCBvZiB0aGUgY29uc3Ry
dWN0ZWQgb2JqZWN0LiBJdCBpcyBub3QgIgotICAgICAgImNsb25lZC5cbiIKLSAgICAgICIgKiBJ
ZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgZW1w
dHksIGJ1dCAiCi0gICAgICAic3RpbGxcbiIKLSAgICAgICIgKiB2YWxpZC5cbiIKLSAgICAgICIg
KiBAZXh0ZW5kcyB7anNwYi5NZXNzYWdlfVxuIgotICAgICAgIiAqIEBjb25zdHJ1Y3RvclxuIgot
ICAgICAgIiAqL1xuIgotICAgICAgIiRjbGFzc25hbWUkID0gZnVuY3Rpb24ob3B0X2RhdGEpIHtc
biIsCi0gICAgICAiY2xhc3NuYW1lIiwgR2V0UGF0aChvcHRpb25zLCBkZXNjKSk7Ci0gIHN0cmlu
ZyBtZXNzYWdlX2lkID0gR2V0TWVzc2FnZUlkKGRlc2MpOwotICBwcmludGVyLT5QcmludCgKLSAg
ICAgICIgIGpzcGIuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsIG9wdF9kYXRhLCAkbWVzc2FnZUlk
JCwgJHBpdm90JCwgIgotICAgICAgIiRycHRmaWVsZHMkLCAkb25lb2ZmaWVsZHMkKTtcbiIsCi0g
ICAgICAibWVzc2FnZUlkIiwgIW1lc3NhZ2VfaWQuZW1wdHkoKSA/Ci0gICAgICAgICAgICAgICAg
ICAgKCInIiArIG1lc3NhZ2VfaWQgKyAiJyIpIDoKLSAgICAgICAgICAgICAgICAgICAoSXNSZXNw
b25zZShkZXNjKSA/ICInJyIgOiAiMCIpLAotICAgICAgInBpdm90IiwgR2V0UGl2b3QoZGVzYyks
Ci0gICAgICAicnB0ZmllbGRzIiwgUmVwZWF0ZWRGaWVsZHNBcnJheU5hbWUob3B0aW9ucywgZGVz
YyksCi0gICAgICAib25lb2ZmaWVsZHMiLCBPbmVvZkZpZWxkc0FycmF5TmFtZShvcHRpb25zLCBk
ZXNjKSk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgIn07XG4iCi0gICAgICAiZ29vZy5pbmhl
cml0cygkY2xhc3NuYW1lJCwganNwYi5NZXNzYWdlKTtcbiIKLSAgICAgICJpZiAoZ29vZy5ERUJV
RyAmJiAhQ09NUElMRUQpIHtcbiIKLSAgICAgICIgICRjbGFzc25hbWUkLmRpc3BsYXlOYW1lID0g
JyRjbGFzc25hbWUkJztcbiIKLSAgICAgICJ9XG4iLAotICAgICAgImNsYXNzbmFtZSIsIEdldFBh
dGgob3B0aW9ucywgZGVzYykpOwotfQotCi12b2lkIEdlbmVyYXRvcjo6R2VuZXJhdGVDbGFzc0Zp
ZWxkSW5mbyhjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjKSBjb25z
dCB7Ci0gIGlmIChIYXNSZXBlYXRlZEZpZWxkcyhkZXNjKSkgewotICAgIHByaW50ZXItPlByaW50
KAotICAgICAgICAiLyoqXG4iCi0gICAgICAgICIgKiBMaXN0IG9mIHJlcGVhdGVkIGZpZWxkcyB3
aXRoaW4gdGhpcyBtZXNzYWdlIHR5cGUuXG4iCi0gICAgICAgICIgKiBAcHJpdmF0ZSB7IUFycmF5
PG51bWJlcj59XG4iCi0gICAgICAgICIgKiBAY29uc3RcbiIKLSAgICAgICAgIiAqL1xuIgotICAg
ICAgICAiJGNsYXNzbmFtZSQkcnB0ZmllbGRhcnJheSQgPSAkcnB0ZmllbGRzJDtcbiIKLSAgICAg
ICAgIlxuIiwKLSAgICAgICAgImNsYXNzbmFtZSIsIEdldFBhdGgob3B0aW9ucywgZGVzYyksCi0g
ICAgICAgICJycHRmaWVsZGFycmF5Iiwga1JlcGVhdGVkRmllbGRBcnJheU5hbWUsCi0gICAgICAg
ICJycHRmaWVsZHMiLCBSZXBlYXRlZEZpZWxkTnVtYmVyTGlzdChkZXNjKSk7Ci0gIH0KLQotICBp
ZiAoSGFzT25lb2ZGaWVsZHMoZGVzYykpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAg
Ii8qKlxuIgotICAgICAgICAiICogT25lb2YgZ3JvdXAgZGVmaW5pdGlvbnMgZm9yIHRoaXMgbWVz
c2FnZS4gRWFjaCBncm91cCBkZWZpbmVzIHRoZSAiCi0gICAgICAgICJmaWVsZFxuIgotICAgICAg
ICAiICogbnVtYmVycyBiZWxvbmdpbmcgdG8gdGhhdCBncm91cC4gV2hlbiBvZiB0aGVzZSBmaWVs
ZHMnIHZhbHVlIGlzICIKLSAgICAgICAgInNldCwgYWxsXG4iCi0gICAgICAgICIgKiBvdGhlciBm
aWVsZHMgaW4gdGhlIGdyb3VwIGFyZSBjbGVhcmVkLiBEdXJpbmcgZGVzZXJpYWxpemF0aW9uLCBp
ZiAiCi0gICAgICAgICJtdWx0aXBsZVxuIgotICAgICAgICAiICogZmllbGRzIGFyZSBlbmNvdW50
ZXJlZCBmb3IgYSBncm91cCwgb25seSB0aGUgbGFzdCB2YWx1ZSBzZWVuIHdpbGwgIgotICAgICAg
ICAiYmUga2VwdC5cbiIKLSAgICAgICAgIiAqIEBwcml2YXRlIHshQXJyYXk8IUFycmF5PG51bWJl
cj4+fVxuIgotICAgICAgICAiICogQGNvbnN0XG4iCi0gICAgICAgICIgKi9cbiIKLSAgICAgICAg
IiRjbGFzc25hbWUkJG9uZW9mZ3JvdXBhcnJheSQgPSAkb25lb2Zncm91cHMkO1xuIgotICAgICAg
ICAiXG4iLAotICAgICAgICAiY2xhc3NuYW1lIiwgR2V0UGF0aChvcHRpb25zLCBkZXNjKSwKLSAg
ICAgICAgIm9uZW9mZ3JvdXBhcnJheSIsIGtPbmVvZkdyb3VwQXJyYXlOYW1lLAotICAgICAgICAi
b25lb2Zncm91cHMiLCBPbmVvZkdyb3VwTGlzdChkZXNjKSk7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGRlc2MtPm9uZW9mX2RlY2xfY291bnQoKTsgaSsrKSB7Ci0gICAgICBpZiAoSWdub3Jl
T25lb2YoZGVzYy0+b25lb2ZfZGVjbChpKSkpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9
Ci0gICAgICBHZW5lcmF0ZU9uZW9mQ2FzZURlZmluaXRpb24ob3B0aW9ucywgcHJpbnRlciwgZGVz
Yy0+b25lb2ZfZGVjbChpKSk7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgR2VuZXJhdG9yOjpHZW5l
cmF0ZUNsYXNzWGlkKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MpIGNvbnN0IHsKLSAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAiXG4iCi0gICAgICAiXG4iCi0gICAgICAiJGNsYXNzJC5w
cm90b3R5cGUubWVzc2FnZVhpZCA9IHhpZCgnJGNsYXNzJCcpO1xuIiwKLSAgICAgICJjbGFzcyIs
IEdldFBhdGgob3B0aW9ucywgZGVzYykpOwotfQotCi12b2lkIEdlbmVyYXRvcjo6R2VuZXJhdGVP
bmVvZkNhc2VEZWZpbml0aW9uKAotICAgIGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMs
Ci0gICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBv
bmVvZikgY29uc3QgewotICBwcmludGVyLT5QcmludCgKLSAgICAgICIvKipcbiIKLSAgICAgICIg
KiBAZW51bSB7bnVtYmVyfVxuIgotICAgICAgIiAqL1xuIgotICAgICAgIiRjbGFzc25hbWUkLiRv
bmVvZiRDYXNlID0ge1xuIgotICAgICAgIiAgJHVwY2FzZSRfTk9UX1NFVDogMCIsCi0gICAgICAi
Y2xhc3NuYW1lIiwgR2V0UGF0aChvcHRpb25zLCBvbmVvZi0+Y29udGFpbmluZ190eXBlKCkpLAot
ICAgICAgIm9uZW9mIiwgSlNPbmVvZk5hbWUob25lb2YpLAotICAgICAgInVwY2FzZSIsIFRvRW51
bUNhc2Uob25lb2YtPm5hbWUoKSkpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgb25lb2YtPmZp
ZWxkX2NvdW50KCk7IGkrKykgewotICAgIGlmIChJZ25vcmVGaWVsZChvbmVvZi0+ZmllbGQoaSkp
KSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgIixcbiIKLSAgICAgICAgIiAgJHVwY2FzZSQ6ICRudW1iZXIkIiwKLSAgICAgICAgInVwY2Fz
ZSIsIFRvRW51bUNhc2Uob25lb2YtPmZpZWxkKGkpLT5uYW1lKCkpLAotICAgICAgICAibnVtYmVy
IiwgSlNGaWVsZEluZGV4KG9uZW9mLT5maWVsZChpKSkpOwotICB9Ci0KLSAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAiXG4iCi0gICAgICAifTtcbiIKLSAgICAgICJcbiIKLSAgICAgICIvKipcbiIK
LSAgICAgICIgKiBAcmV0dXJuIHskY2xhc3MkLiRvbmVvZiRDYXNlfVxuIgotICAgICAgIiAqL1xu
IgotICAgICAgIiRjbGFzcyQucHJvdG90eXBlLmdldCRvbmVvZiRDYXNlID0gZnVuY3Rpb24oKSB7
XG4iCi0gICAgICAiICByZXR1cm4gLyoqIEB0eXBlIHskY2xhc3MkLiRvbmVvZiRDYXNlfSAqLyhq
c3BiLk1lc3NhZ2UuIgotICAgICAgImNvbXB1dGVPbmVvZkNhc2UodGhpcywgJGNsYXNzJC5vbmVv
Zkdyb3Vwc19bJG9uZW9maW5kZXgkXSkpO1xuIgotICAgICAgIn07XG4iCi0gICAgICAiXG4iLAot
ICAgICAgImNsYXNzIiwgR2V0UGF0aChvcHRpb25zLCBvbmVvZi0+Y29udGFpbmluZ190eXBlKCkp
LAotICAgICAgIm9uZW9mIiwgSlNPbmVvZk5hbWUob25lb2YpLAotICAgICAgIm9uZW9maW5kZXgi
LCBKU09uZW9mSW5kZXgob25lb2YpKTsKLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRlQ2xh
c3NUb09iamVjdChjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYykgY29u
c3QgewotICBwcmludGVyLT5QcmludCgKLSAgICAgICJcbiIKLSAgICAgICJcbiIKLSAgICAgICJp
ZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCkge1xuIgotICAgICAgIi8qKlxuIgot
ICAgICAgIiAqIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcHJvdG8g
c3VpdGFibGUgZm9yIHVzZSBpbiAiCi0gICAgICAiU295IHRlbXBsYXRlcy5cbiIKLSAgICAgICIg
KiBGaWVsZCBuYW1lcyB0aGF0IGFyZSByZXNlcnZlZCBpbiBKYXZhU2NyaXB0IGFuZCB3aWxsIGJl
IHJlbmFtZWQgdG8gIgotICAgICAgInBiX25hbWUuXG4iCi0gICAgICAiICogVG8gYWNjZXNzIGEg
cmVzZXJ2ZWQgZmllbGQgdXNlLCBmb28ucGJfPG5hbWU+LCBlZywgZm9vLnBiX2RlZmF1bHQuXG4i
Ci0gICAgICAiICogRm9yIHRoZSBsaXN0IG9mIHJlc2VydmVkIG5hbWVzIHBsZWFzZSBzZWU6XG4i
Ci0gICAgICAiICogICAgIGNvbS5nb29nbGUuYXBwcy5qc3BiLkpzQ2xhc3NUZW1wbGF0ZS5KU19S
RVNFUlZFRF9XT1JEUy5cbiIKLSAgICAgICIgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfaW5jbHVk
ZUluc3RhbmNlIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgSlNQQiAiCi0gICAgICAiaW5zdGFuY2Vc
biIKLSAgICAgICIgKiAgICAgZm9yIHRyYW5zaXRpb25hbCBzb3kgcHJvdG8gc3VwcG9ydDogaHR0
cDovL2dvdG8vc295LXBhcmFtLSIKLSAgICAgICJtaWdyYXRpb25cbiIKLSAgICAgICIgKiBAcmV0
dXJuIHshT2JqZWN0fVxuIgotICAgICAgIiAqL1xuIgotICAgICAgIiRjbGFzc25hbWUkLnByb3Rv
dHlwZS50b09iamVjdCA9IGZ1bmN0aW9uKG9wdF9pbmNsdWRlSW5zdGFuY2UpIHtcbiIKLSAgICAg
ICIgIHJldHVybiAkY2xhc3NuYW1lJC50b09iamVjdChvcHRfaW5jbHVkZUluc3RhbmNlLCB0aGlz
KTtcbiIKLSAgICAgICJ9O1xuIgotICAgICAgIlxuIgotICAgICAgIlxuIgotICAgICAgIi8qKlxu
IgotICAgICAgIiAqIFN0YXRpYyB2ZXJzaW9uIG9mIHRoZSB7QHNlZSB0b09iamVjdH0gbWV0aG9k
LlxuIgotICAgICAgIiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGluY2x1ZGVJbnN0YW5j
ZSBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlICIKLSAgICAgICJKU1BCXG4iCi0gICAgICAiICogICAg
IGluc3RhbmNlIGZvciB0cmFuc2l0aW9uYWwgc295IHByb3RvIHN1cHBvcnQ6XG4iCi0gICAgICAi
ICogICAgIGh0dHA6Ly9nb3RvL3NveS1wYXJhbS1taWdyYXRpb25cbiIKLSAgICAgICIgKiBAcGFy
YW0geyEkY2xhc3NuYW1lJH0gbXNnIFRoZSBtc2cgaW5zdGFuY2UgdG8gdHJhbnNmb3JtLlxuIgot
ICAgICAgIiAqIEByZXR1cm4geyFPYmplY3R9XG4iCi0gICAgICAiICovXG4iCi0gICAgICAiJGNs
YXNzbmFtZSQudG9PYmplY3QgPSBmdW5jdGlvbihpbmNsdWRlSW5zdGFuY2UsIG1zZykge1xuIgot
ICAgICAgIiAgdmFyIGYsIG9iaiA9IHsiLAotICAgICAgImNsYXNzbmFtZSIsIEdldFBhdGgob3B0
aW9ucywgZGVzYykpOwotCi0gIGJvb2wgZmlyc3QgPSB0cnVlOwotICBmb3IgKGludCBpID0gMDsg
aSA8IGRlc2MtPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQgPSBkZXNjLT5maWVsZChpKTsKLSAgICBpZiAoSWdub3JlRmllbGQoZmllbGQpKSB7
Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWZpcnN0KSB7Ci0gICAgICBwcmlu
dGVyLT5QcmludCgiLFxuICAgICIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5Qcmlu
dCgiXG4gICAgIik7Ci0gICAgICBmaXJzdCA9IGZhbHNlOwotICAgIH0KLQotICAgIEdlbmVyYXRl
Q2xhc3NGaWVsZFRvT2JqZWN0KG9wdGlvbnMsIHByaW50ZXIsIGZpZWxkKTsKLSAgfQotCi0gIGlm
ICghZmlyc3QpIHsKLSAgICBwcmludGVyLT5QcmludCgiXG4gIH07XG5cbiIpOwotICB9IGVsc2Ug
ewotICAgIHByaW50ZXItPlByaW50KCJcblxuICB9O1xuXG4iKTsKLSAgfQotCi0gIGlmIChJc0V4
dGVuZGFibGUoZGVzYykpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiAganNwYi5N
ZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uKC8qKiBAdHlwZSB7IWpzcGIuTWVzc2FnZX0gKi8gKG1z
ZyksICIKLSAgICAgICAgIm9iaixcbiIKLSAgICAgICAgIiAgICAgICRleHRPYmplY3QkLCAkY2xh
c3MkLnByb3RvdHlwZS5nZXRFeHRlbnNpb24sXG4iCi0gICAgICAgICIgICAgICBpbmNsdWRlSW5z
dGFuY2UpO1xuIiwKLSAgICAgICAgImV4dE9iamVjdCIsIEpTRXh0ZW5zaW9uc09iamVjdE5hbWUo
b3B0aW9ucywgZGVzYy0+ZmlsZSgpLCBkZXNjKSwKLSAgICAgICAgImNsYXNzIiwgR2V0UGF0aChv
cHRpb25zLCBkZXNjKSk7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAgICIgIGlmIChp
bmNsdWRlSW5zdGFuY2UpIHtcbiIKLSAgICAgICIgICAgb2JqLiQkanNwYk1lc3NhZ2VJbnN0YW5j
ZSA9IG1zZztcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICIgIHJldHVybiBvYmo7XG4iCi0gICAg
ICAifTtcbiIKLSAgICAgICJ9XG4iCi0gICAgICAiXG4iCi0gICAgICAiXG4iLAotICAgICAgImNs
YXNzbmFtZSIsIEdldFBhdGgob3B0aW9ucywgZGVzYykpOwotfQotCi12b2lkIEdlbmVyYXRvcjo6
R2VuZXJhdGVDbGFzc0ZpZWxkVG9PYmplY3QoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9u
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRl
ciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KCIk
ZmllbGRuYW1lJDogIiwKLSAgICAgICAgICAgICAgICAgImZpZWxkbmFtZSIsIEpTT2JqZWN0Rmll
bGROYW1lKGZpZWxkKSk7Ci0KLSAgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSB7Ci0gICAgLy8gTWVzc2FnZSBmaWVsZC4KLSAgICBpZiAo
ZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQo
ImpzcGIuTWVzc2FnZS50b09iamVjdExpc3QobXNnLmdldCRnZXR0ZXIkKCksXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgJHR5cGUkLnRvT2JqZWN0LCBpbmNsdWRlSW5zdGFuY2UpIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgImdldHRlciIsIEpTR2V0dGVyTmFtZShmaWVsZCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiwgU3VibWVzc2FnZVR5cGVSZWYob3B0aW9ucywg
ZmllbGQpKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRlci0+UHJpbnQoIihm
ID0gbXNnLmdldCRnZXR0ZXIkKCkpICYmICIKLSAgICAgICAgICAgICAgICAgICAgICIkdHlwZSQu
dG9PYmplY3QoaW5jbHVkZUluc3RhbmNlLCBmKSIsCi0gICAgICAgICAgICAgICAgICAgICAiZ2V0
dGVyIiwgSlNHZXR0ZXJOYW1lKGZpZWxkKSwKLSAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiwg
U3VibWVzc2FnZVR5cGVSZWYob3B0aW9ucywgZmllbGQpKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0g
ICAgLy8gU2ltcGxlIGZpZWxkIChzaW5ndWxhciBvciByZXBlYXRlZCkuCi0gICAgaWYgKCghSGFz
RmllbGRQcmVzZW5jZShmaWVsZCkgJiYgIWZpZWxkLT5pc19yZXBlYXRlZCgpKSB8fAotICAgICAg
ICBmaWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRFUykgewotICAgICAg
Ly8gRGVsZWdhdGUgdG8gdGhlIGdlbmVyYXRlZCBnZXQ8ZmllbGQ+KCkgbWV0aG9kIGluIG9yZGVy
IG5vdCB0byBkdXBsaWNhdGUKLSAgICAgIC8vIHRoZSBwcm90bzMtZmllbGQtZGVmYXVsdC12YWx1
ZSBvciBieXRlLWNvZXJjaW9uIGxvZ2ljIGhlcmUuCi0gICAgICBwcmludGVyLT5QcmludCgibXNn
LmdldCRnZXR0ZXIkKCkiLAotICAgICAgICAgICAgICAgICAgICAgImdldHRlciIsIEpTR2V0dGVy
TmFtZShmaWVsZCwgQllURVNfQjY0KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChmaWVsZC0+
aGFzX2RlZmF1bHRfdmFsdWUoKSkgewotICAgICAgICBwcmludGVyLT5QcmludCgianNwYi5NZXNz
YWdlLmdldEZpZWxkKG1zZywgJGluZGV4JCkgPT0gbnVsbCA/ICIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiRkZWZhdWx0VmFsdWUkIDogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImluZGV4
IiwgSlNGaWVsZEluZGV4KGZpZWxkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHRW
YWx1ZSIsIEpTRmllbGREZWZhdWx0KGZpZWxkKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZmllbGQt
PmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FUIHx8Ci0gICAgICAg
ICAgZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRSkg
ewotICAgICAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgICAgICBwcmludGVy
LT5QcmludCgianNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKCIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAibXNnLCAkaW5kZXgkKSIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgImluZGV4IiwgSlNGaWVsZEluZGV4KGZpZWxkKSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoZmllbGQtPmlzX29wdGlvbmFsKCkgJiYgIWZpZWxkLT5oYXNfZGVmYXVsdF92YWx1ZSgpKSB7
Ci0gICAgICAgICAgcHJpbnRlci0+UHJpbnQoImpzcGIuTWVzc2FnZS5nZXRPcHRpb25hbEZsb2F0
aW5nUG9pbnRGaWVsZCgiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm1zZywgJGluZGV4JCki
LAotICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleCIsIEpTRmllbGRJbmRleChmaWVsZCkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIENvbnZlcnQgIk5hTiIgdG8gTmFOLgot
ICAgICAgICAgIHByaW50ZXItPlByaW50KCIranNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgJGlu
ZGV4JCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleCIsIEpTRmllbGRJbmRleChm
aWVsZCkpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGVyLT5Qcmlu
dCgianNwYi5NZXNzYWdlLmdldEZpZWxkKG1zZywgJGluZGV4JCkiLAotICAgICAgICAgICAgICAg
ICAgICAgICAiaW5kZXgiLCBKU0ZpZWxkSW5kZXgoZmllbGQpKTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRlQ2xhc3NGcm9tT2JqZWN0KGNvbnN0IEdl
bmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYykgY29uc3QgewotICBwcmludGVy
LT5QcmludCgKLSAgICAgICJpZiAoanNwYi5NZXNzYWdlLkdFTkVSQVRFX0ZST01fT0JKRUNUKSB7
XG4iCi0gICAgICAiLyoqXG4iCi0gICAgICAiICogTG9hZHMgZGF0YSBmcm9tIGFuIG9iamVjdCBp
bnRvIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgcHJvdG8uXG4iCi0gICAgICAiICogQHBhcmFtIHsh
T2JqZWN0fSBvYmogVGhlIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHByb3RvIHRvXG4i
Ci0gICAgICAiICogICAgIGxvYWQgdGhlIGRhdGEgZnJvbS5cbiIKLSAgICAgICIgKiBAcmV0dXJu
IHshJGNsYXNzbmFtZSR9XG4iCi0gICAgICAiICovXG4iCi0gICAgICAiJGNsYXNzbmFtZSQuZnJv
bU9iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuIgotICAgICAgIiAgdmFyIGYsIG1zZyA9IG5ldyAk
Y2xhc3NuYW1lJCgpO1xuIiwKLSAgICAgICJjbGFzc25hbWUiLCBHZXRQYXRoKG9wdGlvbnMsIGRl
c2MpKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPmZpZWxkX2NvdW50KCk7IGkrKykg
ewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjLT5maWVsZChpKTsKLSAg
ICBHZW5lcmF0ZUNsYXNzRmllbGRGcm9tT2JqZWN0KG9wdGlvbnMsIHByaW50ZXIsIGZpZWxkKTsK
LSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICAgIiAgcmV0dXJuIG1zZztcbiIKLSAgICAg
ICJ9O1xuIgotICAgICAgIn1cbiIpOwotfQotCi12b2lkIEdlbmVyYXRvcjo6R2VuZXJhdGVDbGFz
c0ZpZWxkRnJvbU9iamVjdCgKLSAgICBjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAot
ICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmll
bGQpIGNvbnN0IHsKLSAgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9NRVNTQUdFKSB7Ci0gICAgLy8gTWVzc2FnZSBmaWVsZCAoc2luZ3VsYXIgb3IgcmVw
ZWF0ZWQpCi0gICAgaWYgKGZpZWxkLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgICB7Ci0gICAgICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICAgICAgIiAgZ29vZy5pc0RlZihvYmouJG5hbWUkKSAm
JiAiCi0gICAgICAgICAgICAianNwYi5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKFxu
IgotICAgICAgICAgICAgIiAgICAgIG1zZywgJGluZGV4JCwgZ29vZy5hcnJheS5tYXAob2JqLiRu
YW1lJCwgZnVuY3Rpb24oaSkge1xuIgotICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuICRmaWVs
ZGNsYXNzJC5mcm9tT2JqZWN0KGkpO1xuIgotICAgICAgICAgICAgIiAgICAgIH0pKTtcbiIsCi0g
ICAgICAgICAgICAibmFtZSIsIEpTT2JqZWN0RmllbGROYW1lKGZpZWxkKSwKLSAgICAgICAgICAg
ICJpbmRleCIsIEpTRmllbGRJbmRleChmaWVsZCksCi0gICAgICAgICAgICAiZmllbGRjbGFzcyIs
IFN1Ym1lc3NhZ2VUeXBlUmVmKG9wdGlvbnMsIGZpZWxkKSk7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICIgIGdvb2cuaXNEZWYob2JqLiRu
YW1lJCkgJiYganNwYi5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZChcbiIKLSAgICAgICAgICAiICAg
ICAgbXNnLCAkaW5kZXgkLCAkZmllbGRjbGFzcyQuZnJvbU9iamVjdChvYmouJG5hbWUkKSk7XG4i
LAotICAgICAgICAgICJuYW1lIiwgSlNPYmplY3RGaWVsZE5hbWUoZmllbGQpLAotICAgICAgICAg
ICJpbmRleCIsIEpTRmllbGRJbmRleChmaWVsZCksCi0gICAgICAgICAgImZpZWxkY2xhc3MiLCBT
dWJtZXNzYWdlVHlwZVJlZihvcHRpb25zLCBmaWVsZCkpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAg
ICAvLyBTaW1wbGUgKHByaW1pdGl2ZSkgZmllbGQuCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICIgIGdvb2cuaXNEZWYob2JqLiRuYW1lJCkgJiYganNwYi5NZXNzYWdlLnNldEZpZWxkKG1z
ZywgJGluZGV4JCwgIgotICAgICAgICAib2JqLiRuYW1lJCk7XG4iLAotICAgICAgICAibmFtZSIs
IEpTT2JqZWN0RmllbGROYW1lKGZpZWxkKSwKLSAgICAgICAgImluZGV4IiwgSlNGaWVsZEluZGV4
KGZpZWxkKSk7Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRlQ2xhc3NDbG9uZShj
b25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYykgY29uc3QgewotICBwcmludGVyLT5Q
cmludCgKLSAgICAgICIvKipcbiIKLSAgICAgICIgKiBDcmVhdGVzIGEgZGVlcCBjbG9uZSBvZiB0
aGlzIHByb3RvLiBObyBkYXRhIGlzIHNoYXJlZCB3aXRoIHRoZSAiCi0gICAgICAib3JpZ2luYWwu
XG4iCi0gICAgICAiICogQHJldHVybiB7ISRuYW1lJH0gVGhlIGNsb25lLlxuIgotICAgICAgIiAq
L1xuIgotICAgICAgIiRuYW1lJC5wcm90b3R5cGUuY2xvbmVNZXNzYWdlID0gZnVuY3Rpb24oKSB7
XG4iCi0gICAgICAiICByZXR1cm4gLyoqIEB0eXBlIHshJG5hbWUkfSAqLyAoanNwYi5NZXNzYWdl
LmNsb25lTWVzc2FnZSh0aGlzKSk7XG4iCi0gICAgICAifTtcblxuXG4iLAotICAgICAgIm5hbWUi
LCBHZXRQYXRoKG9wdGlvbnMsIGRlc2MpKTsKLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRl
Q2xhc3NSZWdpc3RyYXRpb24oY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3Jp
cHRvciogZGVzYykgY29uc3QgewotICAvLyBSZWdpc3RlciBhbnkgZXh0ZW5zaW9ucyBkZWZpbmVk
IGluc2lkZSB0aGlzIG1lc3NhZ2UgdHlwZS4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5l
eHRlbnNpb25fY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBleHRl
bnNpb24gPSBkZXNjLT5leHRlbnNpb24oaSk7Ci0gICAgaWYgKFNob3VsZEdlbmVyYXRlRXh0ZW5z
aW9uKGV4dGVuc2lvbikpIHsKLSAgICAgIEdlbmVyYXRlRXh0ZW5zaW9uKG9wdGlvbnMsIHByaW50
ZXIsIGV4dGVuc2lvbik7Ci0gICAgfQotICB9Ci0KLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVy
YXRlQ2xhc3NGaWVsZHMoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYykgY29u
c3QgewotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPmZpZWxkX2NvdW50KCk7IGkrKykgewot
ICAgIGlmICghSWdub3JlRmllbGQoZGVzYy0+ZmllbGQoaSkpKSB7Ci0gICAgICBHZW5lcmF0ZUNs
YXNzRmllbGQob3B0aW9ucywgcHJpbnRlciwgZGVzYy0+ZmllbGQoaSkpOwotICAgIH0KLSAgfQot
fQotCi12b2lkIEdlbmVyYXRlQnl0ZXNXcmFwcGVyKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9w
dGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlc01vZGUgYnl0ZXNfbW9kZSkgewotICBzdHJp
bmcgdHlwZSA9Ci0gICAgICBKU0ZpZWxkVHlwZUFubm90YXRpb24ob3B0aW9ucywgZmllbGQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yY2Vfb3B0aW9uYWwgPSAqLyBmYWxzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3JjZV9wcmVzZW50ID0gKi8gIUhhc0Zp
ZWxkUHJlc2VuY2UoZmllbGQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpbmd1
bGFyX2lmX25vdF9wYWNrZWQgPSAqLyBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBieXRlc19tb2RlKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiLyoqXG4iCi0gICAgICAi
ICogJGZpZWxkZGVmJFxuIgotICAgICAgIiRjb21tZW50JCIKLSAgICAgICIgKiBUaGlzIGlzIGEg
dHlwZS1jb252ZXJzaW9uIHdyYXBwZXIgYXJvdW5kIGBnZXQkZGVmbmFtZSQoKWBcbiIKLSAgICAg
ICIgKiBAcmV0dXJuIHskdHlwZSR9XG4iCi0gICAgICAiICovXG4iCi0gICAgICAiJGNsYXNzJC5w
cm90b3R5cGUuZ2V0JG5hbWUkID0gZnVuY3Rpb24oKSB7XG4iCi0gICAgICAiICByZXR1cm4gLyoq
IEB0eXBlIHskdHlwZSR9ICovIChqc3BiLk1lc3NhZ2UuYnl0ZXMkbGlzdCRBcyRzdWZmaXgkKFxu
IgotICAgICAgIiAgICAgIHRoaXMuZ2V0JGRlZm5hbWUkKCkpKTtcbiIKLSAgICAgICJ9O1xuIgot
ICAgICAgIlxuIgotICAgICAgIlxuIiwKLSAgICAgICJmaWVsZGRlZiIsIEZpZWxkRGVmaW5pdGlv
bihvcHRpb25zLCBmaWVsZCksCi0gICAgICAiY29tbWVudCIsIEZpZWxkQ29tbWVudHMoZmllbGQs
IGJ5dGVzX21vZGUpLAotICAgICAgInR5cGUiLCB0eXBlLAotICAgICAgImNsYXNzIiwgR2V0UGF0
aChvcHRpb25zLCBmaWVsZC0+Y29udGFpbmluZ190eXBlKCkpLAotICAgICAgIm5hbWUiLCBKU0dl
dHRlck5hbWUoZmllbGQsIGJ5dGVzX21vZGUpLAotICAgICAgImxpc3QiLCBmaWVsZC0+aXNfcmVw
ZWF0ZWQoKSA/ICJMaXN0IiA6ICIiLAotICAgICAgInN1ZmZpeCIsIEpTQnl0ZUdldHRlclN1ZmZp
eChieXRlc19tb2RlKSwKLSAgICAgICJkZWZuYW1lIiwgSlNHZXR0ZXJOYW1lKGZpZWxkLCBCWVRF
U19ERUZBVUxUKSk7Ci19Ci0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRlQ2xhc3NGaWVsZChj
b25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgewotICBpZiAo
ZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsK
LSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIi8qKlxuIgotICAgICAgICAiICogJGZpZWxk
ZGVmJFxuIgotICAgICAgICAiJGNvbW1lbnQkIgotICAgICAgICAiICogQHJldHVybiB7JHR5cGUk
fVxuIgotICAgICAgICAiICovXG4iLAotICAgICAgICAiZmllbGRkZWYiLCBGaWVsZERlZmluaXRp
b24ob3B0aW9ucywgZmllbGQpLAotICAgICAgICAiY29tbWVudCIsIEZpZWxkQ29tbWVudHMoZmll
bGQsIEJZVEVTX0RFRkFVTFQpLAotICAgICAgICAidHlwZSIsIEpTRmllbGRUeXBlQW5ub3RhdGlv
bihvcHRpb25zLCBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogZm9yY2Vfb3B0aW9uYWwgPSAqLyBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLyogZm9yY2VfcHJlc2VudCA9ICovIGZhbHNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBzaW5ndWxhcl9pZl9ub3RfcGFja2VkID0gKi8gZmFs
c2UpKTsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiRjbGFzcyQucHJvdG90eXBlLmdl
dCRuYW1lJCA9IGZ1bmN0aW9uKCkge1xuIgotICAgICAgICAiICByZXR1cm4gLyoqIEB0eXBleyR0
eXBlJH0gKi8gKFxuIgotICAgICAgICAiICAgIGpzcGIuTWVzc2FnZS5nZXQkcnB0JFdyYXBwZXJG
aWVsZCh0aGlzLCAkd3JhcHBlcmNsYXNzJCwgIgotICAgICAgICAiJGluZGV4JCRyZXF1aXJlZCQp
KTtcbiIKLSAgICAgICAgIn07XG4iCi0gICAgICAgICJcbiIKLSAgICAgICAgIlxuIiwKLSAgICAg
ICAgImNsYXNzIiwgR2V0UGF0aChvcHRpb25zLCBmaWVsZC0+Y29udGFpbmluZ190eXBlKCkpLAot
ICAgICAgICAibmFtZSIsIEpTR2V0dGVyTmFtZShmaWVsZCksCi0gICAgICAgICJ0eXBlIiwgSlNG
aWVsZFR5cGVBbm5vdGF0aW9uKG9wdGlvbnMsIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBmb3JjZV9vcHRpb25hbCA9ICovIGZhbHNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3JjZV9wcmVzZW50ID0gKi8gZmFsc2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpbmd1bGFyX2lmX25v
dF9wYWNrZWQgPSAqLyBmYWxzZSksCi0gICAgICAgICJycHQiLCAoZmllbGQtPmlzX3JlcGVhdGVk
KCkgPyAiUmVwZWF0ZWQiIDogIiIpLAotICAgICAgICAiaW5kZXgiLCBKU0ZpZWxkSW5kZXgoZmll
bGQpLAotICAgICAgICAid3JhcHBlcmNsYXNzIiwgU3VibWVzc2FnZVR5cGVSZWYob3B0aW9ucywg
ZmllbGQpLAotICAgICAgICAicmVxdWlyZWQiLCAoZmllbGQtPmxhYmVsKCkgPT0gRmllbGREZXNj
cmlwdG9yOjpMQUJFTF9SRVFVSVJFRCA/Ci0gICAgICAgICAgICAgICAgICAgICAiLCAxIiA6ICIi
KSk7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIvKiogQHBhcmFtIHskb3B0aW9uYWx0
eXBlJH0gdmFsdWUgJHJldHVybmRvYyQgKi9cbiIKLSAgICAgICAgIiRjbGFzcyQucHJvdG90eXBl
LnNldCRuYW1lJCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4iCi0gICAgICAgICIgIGpzcGIuTWVzc2Fn
ZS5zZXQkb25lb2Z0YWckJHJlcGVhdGVkdGFnJFdyYXBwZXJGaWVsZCgiLAotICAgICAgICAib3B0
aW9uYWx0eXBlIiwKLSAgICAgICAgSlNGaWVsZFR5cGVBbm5vdGF0aW9uKG9wdGlvbnMsIGZpZWxk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yY2Vfb3B0aW9uYWwgPSAqLyB0
cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yY2VfcHJlc2VudCA9ICov
IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2luZ3VsYXJfaWZfbm90
X3BhY2tlZCA9ICovIGZhbHNlKSwKLSAgICAgICAgInJldHVybmRvYyIsIEpTUmV0dXJuRG9jKG9w
dGlvbnMsIGZpZWxkKSwKLSAgICAgICAgImNsYXNzIiwgR2V0UGF0aChvcHRpb25zLCBmaWVsZC0+
Y29udGFpbmluZ190eXBlKCkpLAotICAgICAgICAibmFtZSIsIEpTR2V0dGVyTmFtZShmaWVsZCks
Ci0gICAgICAgICJvbmVvZnRhZyIsIChmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpID8gIk9uZW9m
IiA6ICIiKSwKLSAgICAgICAgInJlcGVhdGVkdGFnIiwgKGZpZWxkLT5pc19yZXBlYXRlZCgpID8g
IlJlcGVhdGVkIiA6ICIiKSk7Ci0KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgInRoaXMs
ICRpbmRleCQkb25lb2Zncm91cCQsIHZhbHVlKTskcmV0dXJudmFsdWUkXG4iCi0gICAgICAgICJ9
O1xuIgotICAgICAgICAiXG4iCi0gICAgICAgICJcbiIsCi0gICAgICAgICJpbmRleCIsIEpTRmll
bGRJbmRleChmaWVsZCksCi0gICAgICAgICJvbmVvZmdyb3VwIiwgKGZpZWxkLT5jb250YWluaW5n
X29uZW9mKCkgPwotICAgICAgICAgICAgICAgICAgICAgICAoIiwgIiArIEpTT25lb2ZBcnJheShv
cHRpb25zLCBmaWVsZCkpIDogIiIpLAotICAgICAgICAicmV0dXJudmFsdWUiLCBKU1JldHVybkNs
YXVzZShmaWVsZCkpOwotCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIkY2xhc3MkLnBy
b3RvdHlwZS5jbGVhciRuYW1lJCA9IGZ1bmN0aW9uKCkge1xuIgotICAgICAgICAiICB0aGlzLnNl
dCRuYW1lJCgkY2xlYXJlZHZhbHVlJCk7JHJldHVybnZhbHVlJFxuIgotICAgICAgICAifTtcbiIK
LSAgICAgICAgIlxuIgotICAgICAgICAiXG4iLAotICAgICAgICAiY2xhc3MiLCBHZXRQYXRoKG9w
dGlvbnMsIGZpZWxkLT5jb250YWluaW5nX3R5cGUoKSksCi0gICAgICAgICJuYW1lIiwgSlNHZXR0
ZXJOYW1lKGZpZWxkKSwKLSAgICAgICAgImNsZWFyZWR2YWx1ZSIsIChmaWVsZC0+aXNfcmVwZWF0
ZWQoKSA/ICJbXSIgOiAidW5kZWZpbmVkIiksCi0gICAgICAgICJyZXR1cm52YWx1ZSIsIEpTUmV0
dXJuQ2xhdXNlKGZpZWxkKSk7Ci0KLSAgfSBlbHNlIHsKLSAgICBib29sIHVudHlwZWQgPQotICAg
ICAgICBmYWxzZTsKLQotICAgIC8vIFNpbXBsZSAocHJpbWl0aXZlKSBmaWVsZCwgZWl0aGVyIHNp
bmd1bGFyIG9yIHJlcGVhdGVkLgotCi0gICAgLy8gVE9ETyhiLzI2MTczNzAxKTogQWx3YXlzIHVz
ZSBCWVRFU19ERUZBVUxUIGZvciB0aGUgZ2V0dGVyIHJldHVybiB0eXBlOwotICAgIC8vIGF0IHRo
aXMgcG9pbnQgd2UgImxpZSIgdG8gbm9uLWJpbmFyeSB1c2VycyBhbmQgdGVsbCB0aGUgdGhlIHJl
dHVybgotICAgIC8vIHR5cGUgaXMgYWx3YXlzIGJhc2U2NCBzdHJpbmcsIHBlbmRpbmcgYSBMU0Mg
dG8gbWlncmF0ZSB0byB0eXBlZCBnZXR0ZXJzLgotICAgIEJ5dGVzTW9kZSBieXRlc19tb2RlID0K
LSAgICAgICAgZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMgJiYg
IW9wdGlvbnMuYmluYXJ5ID8KLSAgICAgICAgICAgIEJZVEVTX0I2NCA6IEJZVEVTX0RFRkFVTFQ7
Ci0gICAgc3RyaW5nIHR5cGVkX2Fubm90YXRpb24gPQotICAgICAgICBKU0ZpZWxkVHlwZUFubm90
YXRpb24ob3B0aW9ucywgZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBm
b3JjZV9vcHRpb25hbCA9ICovIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogZm9yY2VfcHJlc2VudCA9ICovICFIYXNGaWVsZFByZXNlbmNlKGZpZWxkKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIHNpbmd1bGFyX2lmX25vdF9wYWNrZWQgPSAqLyBmYWxz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ5dGVzX21vZGUgPSAqLyBieXRl
c19tb2RlKTsKLSAgICBpZiAodW50eXBlZCkgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICAgIi8qKlxuIgotICAgICAgICAgICIgKiBAcmV0dXJuIHs/fSBSYXcgZmllbGQsIHVudHlw
ZWQuXG4iCi0gICAgICAgICAgIiAqL1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXIt
PlByaW50KAotICAgICAgICAgICIvKipcbiIKLSAgICAgICAgICAiICogJGZpZWxkZGVmJFxuIgot
ICAgICAgICAgICIkY29tbWVudCQiCi0gICAgICAgICAgIiAqIEByZXR1cm4geyR0eXBlJH1cbiIK
LSAgICAgICAgICAiICovXG4iLAotICAgICAgICAgICJmaWVsZGRlZiIsIEZpZWxkRGVmaW5pdGlv
bihvcHRpb25zLCBmaWVsZCksCi0gICAgICAgICAgImNvbW1lbnQiLCBGaWVsZENvbW1lbnRzKGZp
ZWxkLCBieXRlc19tb2RlKSwKLSAgICAgICAgICAidHlwZSIsIHR5cGVkX2Fubm90YXRpb24pOwot
ICAgIH0KLQotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiJGNsYXNzJC5wcm90b3R5cGUu
Z2V0JG5hbWUkID0gZnVuY3Rpb24oKSB7XG4iLAotICAgICAgICAiY2xhc3MiLCBHZXRQYXRoKG9w
dGlvbnMsIGZpZWxkLT5jb250YWluaW5nX3R5cGUoKSksCi0gICAgICAgICJuYW1lIiwgSlNHZXR0
ZXJOYW1lKGZpZWxkKSk7Ci0KLSAgICBpZiAodW50eXBlZCkgewotICAgICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgICAgIiAgcmV0dXJuICIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICAgICAiICByZXR1cm4gLyoqIEB0eXBlIHskdHlwZSR9ICovICgiLAot
ICAgICAgICAgICJ0eXBlIiwgdHlwZWRfYW5ub3RhdGlvbik7Ci0gICAgfQotCi0gICAgLy8gRm9y
IHByb3RvMyBmaWVsZHMgd2l0aG91dCBwcmVzZW5jZSwgdXNlIHNwZWNpYWwgZ2V0dGVycyB0aGF0
IHdpbGwgcmV0dXJuCi0gICAgLy8gZGVmYXVsdHMgd2hlbiB0aGUgZmllbGQgaXMgdW5zZXQsIHBv
c3NpYmx5IGNvbnN0cnVjdGluZyBhIHZhbHVlIGlmCi0gICAgLy8gcmVxdWlyZWQuCi0gICAgaWYg
KCFIYXNGaWVsZFByZXNlbmNlKGZpZWxkKSAmJiAhZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAg
ICAgIHByaW50ZXItPlByaW50KCJqc3BiLk1lc3NhZ2UuZ2V0RmllbGRQcm90bzModGhpcywgJGlu
ZGV4JCwgJGRlZmF1bHQkKSIsCi0gICAgICAgICAgICAgICAgICAgICAiaW5kZXgiLCBKU0ZpZWxk
SW5kZXgoZmllbGQpLAotICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQiLCBQcm90bzNQcmlt
aXRpdmVGaWVsZERlZmF1bHQoZmllbGQpKTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKGZpZWxk
LT5oYXNfZGVmYXVsdF92YWx1ZSgpKSB7Ci0gICAgICAgIHByaW50ZXItPlByaW50KCJqc3BiLk1l
c3NhZ2UuZ2V0RmllbGQodGhpcywgJGluZGV4JCkgPT0gbnVsbCA/ICIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiRkZWZhdWx0VmFsdWUkIDogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImlu
ZGV4IiwgSlNGaWVsZEluZGV4KGZpZWxkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1
bHRWYWx1ZSIsIEpTRmllbGREZWZhdWx0KGZpZWxkKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZmll
bGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FUIHx8Ci0gICAg
ICAgICAgZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJM
RSkgewotICAgICAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgICAgICBwcmlu
dGVyLT5QcmludCgianNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkKCIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcywgJGluZGV4JCkiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbmRleCIsIEpTRmllbGRJbmRleChmaWVsZCkpOwotICAgICAgICB9IGVs
c2UgaWYgKGZpZWxkLT5pc19vcHRpb25hbCgpICYmICFmaWVsZC0+aGFzX2RlZmF1bHRfdmFsdWUo
KSkgewotICAgICAgICAgIHByaW50ZXItPlByaW50KCJqc3BiLk1lc3NhZ2UuZ2V0T3B0aW9uYWxG
bG9hdGluZ1BvaW50RmllbGQoIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzLCAkaW5k
ZXgkKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4IiwgSlNGaWVsZEluZGV4KGZp
ZWxkKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gQ29udmVydCAiTmFOIiB0byBO
YU4uCi0gICAgICAgICAgcHJpbnRlci0+UHJpbnQoIitqc3BiLk1lc3NhZ2UuZ2V0RmllbGQodGhp
cywgJGluZGV4JCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleCIsIEpTRmllbGRJ
bmRleChmaWVsZCkpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGVy
LT5QcmludCgianNwYi5NZXNzYWdlLmdldEZpZWxkKHRoaXMsICRpbmRleCQpIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgImluZGV4IiwgSlNGaWVsZEluZGV4KGZpZWxkKSk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHVudHlwZWQpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAg
ICAgICI7XG4iCi0gICAgICAgICAgIn07XG4iCi0gICAgICAgICAgIlxuIgotICAgICAgICAgICJc
biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAiKTtc
biIKLSAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAiXG4iCi0gICAgICAgICAgIlxuIik7Ci0g
ICAgfQotCi0gICAgaWYgKGZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZ
VEVTICYmICF1bnR5cGVkKSB7Ci0gICAgICBHZW5lcmF0ZUJ5dGVzV3JhcHBlcihvcHRpb25zLCBw
cmludGVyLCBmaWVsZCwgQllURVNfQjY0KTsKLSAgICAgIEdlbmVyYXRlQnl0ZXNXcmFwcGVyKG9w
dGlvbnMsIHByaW50ZXIsIGZpZWxkLCBCWVRFU19VOCk7Ci0gICAgfQotCi0gICAgaWYgKHVudHlw
ZWQpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICIvKipcbiIKLSAgICAgICAg
ICAiICogQHBhcmFtIHsqfSB2YWx1ZSAkcmV0dXJuZG9jJFxuIgotICAgICAgICAgICIgKi9cbiIs
Ci0gICAgICAgICAgInJldHVybmRvYyIsIEpTUmV0dXJuRG9jKG9wdGlvbnMsIGZpZWxkKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICIvKiogQHBhcmFt
IHskb3B0aW9uYWx0eXBlJH0gdmFsdWUgJHJldHVybmRvYyQgKi9cbiIsCi0gICAgICAgICAgIm9w
dGlvbmFsdHlwZSIsCi0gICAgICAgICAgSlNGaWVsZFR5cGVBbm5vdGF0aW9uKG9wdGlvbnMsIGZp
ZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3JjZV9vcHRpb25hbCA9
ICovIHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvcmNlX3ByZXNl
bnQgPSAqLyAhSGFzRmllbGRQcmVzZW5jZShmaWVsZCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIHNpbmd1bGFyX2lmX25vdF9wYWNrZWQgPSAqLyBmYWxzZSksCi0gICAgICAg
ICAgInJldHVybmRvYyIsIEpTUmV0dXJuRG9jKG9wdGlvbnMsIGZpZWxkKSk7Ci0gICAgfQotICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICAiJGNsYXNzJC5wcm90b3R5cGUuc2V0JG5hbWUkID0g
ZnVuY3Rpb24odmFsdWUpIHtcbiIKLSAgICAgICAgIiAganNwYi5NZXNzYWdlLnNldCRvbmVvZnRh
ZyRGaWVsZCh0aGlzLCAkaW5kZXgkIiwKLSAgICAgICAgImNsYXNzIiwgR2V0UGF0aChvcHRpb25z
LCBmaWVsZC0+Y29udGFpbmluZ190eXBlKCkpLAotICAgICAgICAibmFtZSIsIEpTR2V0dGVyTmFt
ZShmaWVsZCksCi0gICAgICAgICJvbmVvZnRhZyIsIChmaWVsZC0+Y29udGFpbmluZ19vbmVvZigp
ID8gIk9uZW9mIiA6ICIiKSwKLSAgICAgICAgImluZGV4IiwgSlNGaWVsZEluZGV4KGZpZWxkKSk7
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIkb25lb2Zncm91cCQsICR0eXBlJHZhbHVl
JHJwdHZhbHVlaW5pdCQkdHlwZWNsb3NlJCk7JHJldHVybnZhbHVlJFxuIgotICAgICAgICAifTtc
biIKLSAgICAgICAgIlxuIgotICAgICAgICAiXG4iLAotICAgICAgICAidHlwZSIsCi0gICAgICAg
IHVudHlwZWQgPyAiLyoqIEB0eXBle3N0cmluZ3xudW1iZXJ8Ym9vbGVhbnxBcnJheXx1bmRlZmlu
ZWR9ICovKCIgOiAiIiwKLSAgICAgICAgInR5cGVjbG9zZSIsIHVudHlwZWQgPyAiKSIgOiAiIiwK
LSAgICAgICAgIm9uZW9mZ3JvdXAiLAotICAgICAgICAoZmllbGQtPmNvbnRhaW5pbmdfb25lb2Yo
KSA/ICgiLCAiICsgSlNPbmVvZkFycmF5KG9wdGlvbnMsIGZpZWxkKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAiIiksCi0gICAgICAgICJyZXR1cm52YWx1ZSIsIEpTUmV0
dXJuQ2xhdXNlKGZpZWxkKSwgInJwdHZhbHVlaW5pdCIsCi0gICAgICAgIChmaWVsZC0+aXNfcmVw
ZWF0ZWQoKSA/ICIgfHwgW10iIDogIiIpKTsKLQotICAgIGlmICh1bnR5cGVkKSB7Ci0gICAgICBw
cmludGVyLT5QcmludCgKLSAgICAgICAgICAiLyoqXG4iCi0gICAgICAgICAgIiAqIENsZWFycyB0
aGUgdmFsdWUuICRyZXR1cm5kb2MkXG4iCi0gICAgICAgICAgIiAqL1xuIiwKLSAgICAgICAgICAi
cmV0dXJuZG9jIiwgSlNSZXR1cm5Eb2Mob3B0aW9ucywgZmllbGQpKTsKLSAgICB9Ci0KLSAgICBp
ZiAoSGFzRmllbGRQcmVzZW5jZShmaWVsZCkpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAg
ICAgICAgICIkY2xhc3MkLnByb3RvdHlwZS5jbGVhciRuYW1lJCA9IGZ1bmN0aW9uKCkge1xuIgot
ICAgICAgICAgICIgIGpzcGIuTWVzc2FnZS5zZXQkb25lb2Z0YWckRmllbGQodGhpcywgJGluZGV4
JCRvbmVvZmdyb3VwJCwgIiwKLSAgICAgICAgICAiY2xhc3MiLCBHZXRQYXRoKG9wdGlvbnMsIGZp
ZWxkLT5jb250YWluaW5nX3R5cGUoKSksCi0gICAgICAgICAgIm5hbWUiLCBKU0dldHRlck5hbWUo
ZmllbGQpLAotICAgICAgICAgICJvbmVvZnRhZyIsIChmaWVsZC0+Y29udGFpbmluZ19vbmVvZigp
ID8gIk9uZW9mIiA6ICIiKSwKLSAgICAgICAgICAib25lb2Zncm91cCIsIChmaWVsZC0+Y29udGFp
bmluZ19vbmVvZigpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAoIiwgIiArIEpTT25lb2ZB
cnJheShvcHRpb25zLCBmaWVsZCkpIDogIiIpLAotICAgICAgICAgICJpbmRleCIsIEpTRmllbGRJ
bmRleChmaWVsZCkpOwotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIiRjbGVhcmVk
dmFsdWUkKTskcmV0dXJudmFsdWUkXG4iCi0gICAgICAgICAgIn07XG4iCi0gICAgICAgICAgIlxu
IgotICAgICAgICAgICJcbiIsCi0gICAgICAgICAgImNsZWFyZWR2YWx1ZSIsIChmaWVsZC0+aXNf
cmVwZWF0ZWQoKSA/ICJbXSIgOiAidW5kZWZpbmVkIiksCi0gICAgICAgICAgInJldHVybnZhbHVl
IiwgSlNSZXR1cm5DbGF1c2UoZmllbGQpKTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0
b3I6OkdlbmVyYXRlQ2xhc3NFeHRlbnNpb25GaWVsZEluZm8oY29uc3QgR2VuZXJhdG9yT3B0aW9u
cyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYykgY29uc3QgewotICBpZiAo
SXNFeHRlbmRhYmxlKGRlc2MpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJcbiIK
LSAgICAgICAgIi8qKlxuIgotICAgICAgICAiICogVGhlIGV4dGVuc2lvbnMgcmVnaXN0ZXJlZCB3
aXRoIHRoaXMgbWVzc2FnZSBjbGFzcy4gVGhpcyBpcyBhICIKLSAgICAgICAgIm1hcCBvZlxuIgot
ICAgICAgICAiICogZXh0ZW5zaW9uIGZpZWxkIG51bWJlciB0byBmaWVsZEluZm8gb2JqZWN0Llxu
IgotICAgICAgICAiICpcbiIKLSAgICAgICAgIiAqIEZvciBleGFtcGxlOlxuIgotICAgICAgICAi
ICogICAgIHsgMTIzOiB7ZmllbGRJbmRleDogMTIzLCBmaWVsZE5hbWU6IHtteV9maWVsZF9uYW1l
OiAwfSwgIgotICAgICAgICAiY3RvcjogcHJvdG8uZXhhbXBsZS5NeU1lc3NhZ2V9IH1cbiIKLSAg
ICAgICAgIiAqXG4iCi0gICAgICAgICIgKiBmaWVsZE5hbWUgY29udGFpbnMgdGhlIEpzQ29tcGls
ZXIgcmVuYW1lZCBmaWVsZCBuYW1lIHByb3BlcnR5ICIKLSAgICAgICAgInNvIHRoYXQgaXRcbiIK
LSAgICAgICAgIiAqIHdvcmtzIGluIE9QVElNSVpFRCBtb2RlLlxuIgotICAgICAgICAiICpcbiIK
LSAgICAgICAgIiAqIEB0eXBlIHshT2JqZWN0LjxudW1iZXIsIGpzcGIuRXh0ZW5zaW9uRmllbGRJ
bmZvPn1cbiIKLSAgICAgICAgIiAqL1xuIgotICAgICAgICAiJGNsYXNzJC5leHRlbnNpb25zID0g
e307XG4iCi0gICAgICAgICJcbiIsCi0gICAgICAgICJjbGFzcyIsIEdldFBhdGgob3B0aW9ucywg
ZGVzYykpOwotICB9Ci19Ci0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRlQ2xhc3NEZXNlcmlh
bGl6ZUJpbmFyeShjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVz
Y3JpcHRvciogZGVzYykgY29uc3QgewotICAvLyBUT0RPKGNmYWxsaW4pOiBIYW5kbGUgbGF6eSBk
ZWNvZGluZyB3aGVuIHJlcXVlc3RlZCBieSBmaWVsZCBvcHRpb24gYW5kL29yCi0gIC8vIGJ5IGRl
ZmF1bHQgZm9yICdieXRlcycgZmllbGRzIGFuZCBwYWNrZWQgcmVwZWF0ZWQgZmllbGRzLgotCi0g
IHByaW50ZXItPlByaW50KAotICAgICAgIi8qKlxuIgotICAgICAgIiAqIERlc2VyaWFsaXplcyBi
aW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLlxuIgotICAgICAgIiAqIEBwYXJh
bSB7anNwYi5CeXRlU291cmNlfSBieXRlcyBUaGUgYnl0ZXMgdG8gZGVzZXJpYWxpemUuXG4iCi0g
ICAgICAiICogQHJldHVybiB7ISRjbGFzcyR9XG4iCi0gICAgICAiICovXG4iCi0gICAgICAiJGNs
YXNzJC5kZXNlcmlhbGl6ZUJpbmFyeSA9IGZ1bmN0aW9uKGJ5dGVzKSB7XG4iCi0gICAgICAiICB2
YXIgcmVhZGVyID0gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGJ5dGVzKTtcbiIKLSAgICAgICIgIHZh
ciBtc2cgPSBuZXcgJGNsYXNzJDtcbiIKLSAgICAgICIgIHJldHVybiAkY2xhc3MkLmRlc2VyaWFs
aXplQmluYXJ5RnJvbVJlYWRlcihtc2csIHJlYWRlcik7XG4iCi0gICAgICAifTtcbiIKLSAgICAg
ICJcbiIKLSAgICAgICJcbiIKLSAgICAgICIvKipcbiIKLSAgICAgICIgKiBEZXNlcmlhbGl6ZXMg
YmluYXJ5IGRhdGEgKGluIHByb3RvYnVmIHdpcmUgZm9ybWF0KSBmcm9tIHRoZVxuIgotICAgICAg
IiAqIGdpdmVuIHJlYWRlciBpbnRvIHRoZSBnaXZlbiBtZXNzYWdlIG9iamVjdC5cbiIKLSAgICAg
ICIgKiBAcGFyYW0geyEkY2xhc3MkfSBtc2cgVGhlIG1lc3NhZ2Ugb2JqZWN0IHRvIGRlc2VyaWFs
aXplIGludG8uXG4iCi0gICAgICAiICogQHBhcmFtIHshanNwYi5CaW5hcnlSZWFkZXJ9IHJlYWRl
ciBUaGUgQmluYXJ5UmVhZGVyIHRvIHVzZS5cbiIKLSAgICAgICIgKiBAcmV0dXJuIHshJGNsYXNz
JH1cbiIKLSAgICAgICIgKi9cbiIKLSAgICAgICIkY2xhc3MkLmRlc2VyaWFsaXplQmluYXJ5RnJv
bVJlYWRlciA9IGZ1bmN0aW9uKG1zZywgcmVhZGVyKSB7XG4iCi0gICAgICAiICB3aGlsZSAocmVh
ZGVyLm5leHRGaWVsZCgpKSB7XG4iCi0gICAgICAiICAgIGlmIChyZWFkZXIuaXNFbmRHcm91cCgp
KSB7XG4iCi0gICAgICAiICAgICAgYnJlYWs7XG4iCi0gICAgICAiICAgIH1cbiIKLSAgICAgICIg
ICAgdmFyIGZpZWxkID0gcmVhZGVyLmdldEZpZWxkTnVtYmVyKCk7XG4iCi0gICAgICAiICAgIHN3
aXRjaCAoZmllbGQpIHtcbiIsCi0gICAgICAiY2xhc3MiLCBHZXRQYXRoKG9wdGlvbnMsIGRlc2Mp
KTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPmZpZWxkX2NvdW50KCk7IGkrKykgewot
ICAgIEdlbmVyYXRlQ2xhc3NEZXNlcmlhbGl6ZUJpbmFyeUZpZWxkKG9wdGlvbnMsIHByaW50ZXIs
IGRlc2MtPmZpZWxkKGkpKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICAgIiAgICBk
ZWZhdWx0OlxuIik7Ci0gIGlmIChJc0V4dGVuZGFibGUoZGVzYykpIHsKLSAgICBwcmludGVyLT5Q
cmludCgKLSAgICAgICAgIiAgICAgIGpzcGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uKG1z
ZywgcmVhZGVyLCAkZXh0b2JqJCxcbiIKLSAgICAgICAgIiAgICAgICAgJGNsYXNzJC5wcm90b3R5
cGUuZ2V0RXh0ZW5zaW9uLFxuIgotICAgICAgICAiICAgICAgICAkY2xhc3MkLnByb3RvdHlwZS5z
ZXRFeHRlbnNpb24pO1xuIgotICAgICAgICAiICAgICAgYnJlYWs7XG4iLAotICAgICAgICAiZXh0
b2JqIiwgSlNFeHRlbnNpb25zT2JqZWN0TmFtZShvcHRpb25zLCBkZXNjLT5maWxlKCksIGRlc2Mp
LAotICAgICAgICAiY2xhc3MiLCBHZXRQYXRoKG9wdGlvbnMsIGRlc2MpKTsKLSAgfSBlbHNlIHsK
LSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiAgICAgIHJlYWRlci5za2lwRmllbGQoKTtc
biIKLSAgICAgICAgIiAgICAgIGJyZWFrO1xuIik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgK
LSAgICAgICIgICAgfVxuIgotICAgICAgIiAgfVxuIgotICAgICAgIiAgcmV0dXJuIG1zZztcbiIK
LSAgICAgICJ9O1xuIgotICAgICAgIlxuIgotICAgICAgIlxuIik7Ci19Ci0KLXZvaWQgR2VuZXJh
dG9yOjpHZW5lcmF0ZUNsYXNzRGVzZXJpYWxpemVCaW5hcnlGaWVsZCgKLSAgICBjb25zdCBHZW5l
cmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsKLQotICBwcmludGVyLT5QcmludCgi
ICAgIGNhc2UgJG51bSQ6XG4iLAotICAgICAgICAgICAgICAgICAibnVtIiwgU2ltcGxlSXRvYShm
aWVsZC0+bnVtYmVyKCkpKTsKLQotICBpZiAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAg
IiAgICAgIHZhciB2YWx1ZSA9IG5ldyAkZmllbGRjbGFzcyQ7XG4iCi0gICAgICAgICIgICAgICBy
ZWFkZXIucmVhZCRtc2dPckdyb3VwJCgkZ3JwZmllbGQkdmFsdWUsIgotICAgICAgICAiJGZpZWxk
Y2xhc3MkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcik7XG4iLAotICAgICAgICAiZmllbGRj
bGFzcyIsIFN1Ym1lc3NhZ2VUeXBlUmVmKG9wdGlvbnMsIGZpZWxkKSwKLSAgICAgICAgIm1zZ09y
R3JvdXAiLCAoZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApID8K
LSAgICAgICAgICAgICAgICAgICAgICAiR3JvdXAiIDogIk1lc3NhZ2UiLAotICAgICAgICAiZ3Jw
ZmllbGQiLCAoZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApID8K
LSAgICAgICAgICAgICAgICAgICAgKFNpbXBsZUl0b2EoZmllbGQtPm51bWJlcigpKSArICIsICIp
IDogIiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiICAgICAg
dmFyIHZhbHVlID0gLyoqIEB0eXBlIHskZmllbGR0eXBlJH0gKi8gKHJlYWRlci4kcmVhZGVyJCgp
KTtcbiIsCi0gICAgICAgICJmaWVsZHR5cGUiLCBKU0ZpZWxkVHlwZUFubm90YXRpb24ob3B0aW9u
cywgZmllbGQsIGZhbHNlLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIHNpbmd1bGFyX2lmX25vdF9wYWNrZWQgPSAqLyB0cnVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVTX1U4KSwKLSAgICAgICAgInJl
YWRlciIsIEpTQmluYXJ5UmVhZGVyTWV0aG9kTmFtZShmaWVsZCkpOwotICB9Ci0KLSAgaWYgKGZp
ZWxkLT5pc19yZXBlYXRlZCgpICYmICFmaWVsZC0+aXNfcGFja2VkKCkpIHsKLSAgICAvLyBSZXBl
YXRlZCBmaWVsZHMgcmVjZWl2ZSBhIHx2YWx1ZXwgb25lIGF0IGF0IGEgdGltZTsgYXBwZW5kIHRv
IGFycmF5Ci0gICAgLy8gcmV0dXJuZWQgYnkgZ2V0JG5hbWUkKCkuIEFubm95aW5nbHksIHdlIGhh
dmUgdG8gY2FsbCAnc2V0JyBhZnRlcgotICAgIC8vIGNoYW5naW5nIHRoZSBhcnJheS4KLSAgICBw
cmludGVyLT5QcmludCgiICAgICAgbXNnLmdldCRuYW1lJCgpLnB1c2godmFsdWUpO1xuIiwgIm5h
bWUiLAotICAgICAgICAgICAgICAgICAgIEpTR2V0dGVyTmFtZShmaWVsZCkpOwotICAgIHByaW50
ZXItPlByaW50KCIgICAgICBtc2cuc2V0JG5hbWUkKG1zZy5nZXQkbmFtZSQoKSk7XG4iLCAibmFt
ZSIsCi0gICAgICAgICAgICAgICAgICAgSlNHZXR0ZXJOYW1lKGZpZWxkKSk7Ci0gIH0gZWxzZSB7
Ci0gICAgLy8gU2luZ3VsYXIgZmllbGRzLCBhbmQgcGFja2VkIHJlcGVhdGVkIGZpZWxkcywgcmVj
ZWl2ZSBhIHx2YWx1ZXwgZWl0aGVyIGFzCi0gICAgLy8gdGhlIGZpZWxkJ3MgdmFsdWUgb3IgYXMg
dGhlIGFycmF5IG9mIGFsbCB0aGUgZmllbGQncyB2YWx1ZXM7IHNldCB0aGlzIGFzCi0gICAgLy8g
dGhlIGZpZWxkJ3MgdmFsdWUgZGlyZWN0bHkuCi0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAg
ICIgICAgICBtc2cuc2V0JG5hbWUkKHZhbHVlKTtcbiIsCi0gICAgICAgICJuYW1lIiwgSlNHZXR0
ZXJOYW1lKGZpZWxkKSk7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgiICAgICAgYnJlYWs7XG4i
KTsKLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRlQ2xhc3NTZXJpYWxpemVCaW5hcnkoY29u
c3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYykgY29u
c3QgewotICBwcmludGVyLT5QcmludCgKLSAgICAgICIvKipcbiIKLSAgICAgICIgKiBDbGFzcyBt
ZXRob2QgdmFyaWFudDogc2VyaWFsaXplcyB0aGUgZ2l2ZW4gbWVzc2FnZSB0byBiaW5hcnkgZGF0
YVxuIgotICAgICAgIiAqIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCksIHdyaXRpbmcgdG8gdGhl
IGdpdmVuIEJpbmFyeVdyaXRlci5cbiIKLSAgICAgICIgKiBAcGFyYW0geyEkY2xhc3MkfSBtZXNz
YWdlXG4iCi0gICAgICAiICogQHBhcmFtIHshanNwYi5CaW5hcnlXcml0ZXJ9IHdyaXRlclxuIgot
ICAgICAgIiAqL1xuIgotICAgICAgIiRjbGFzcyQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBm
dW5jdGlvbihtZXNzYWdlLCAiCi0gICAgICAid3JpdGVyKSB7XG4iCi0gICAgICAiICBtZXNzYWdl
LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHdyaXRlcik7XG4iCi0gICAgICAifTtcbiIKLSAgICAg
ICJcbiIKLSAgICAgICJcbiIKLSAgICAgICIvKipcbiIKLSAgICAgICIgKiBTZXJpYWxpemVzIHRo
ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhIChpbiBwcm90b2J1ZiB3aXJlIGZvcm1hdCkuXG4iCi0g
ICAgICAiICogQHJldHVybiB7IVVpbnQ4QXJyYXl9XG4iCi0gICAgICAiICovXG4iCi0gICAgICAi
JGNsYXNzJC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5ID0gZnVuY3Rpb24oKSB7XG4iCi0gICAg
ICAiICB2YXIgd3JpdGVyID0gbmV3IGpzcGIuQmluYXJ5V3JpdGVyKCk7XG4iCi0gICAgICAiICB0
aGlzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHdyaXRlcik7XG4iCi0gICAgICAiICByZXR1cm4g
d3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuIgotICAgICAgIn07XG4iCi0gICAgICAiXG4iCi0g
ICAgICAiXG4iCi0gICAgICAiLyoqXG4iCi0gICAgICAiICogU2VyaWFsaXplcyB0aGUgbWVzc2Fn
ZSB0byBiaW5hcnkgZGF0YSAoaW4gcHJvdG9idWYgd2lyZSBmb3JtYXQpLFxuIgotICAgICAgIiAq
IHdyaXRpbmcgdG8gdGhlIGdpdmVuIEJpbmFyeVdyaXRlci5cbiIKLSAgICAgICIgKiBAcGFyYW0g
eyFqc3BiLkJpbmFyeVdyaXRlcn0gd3JpdGVyXG4iCi0gICAgICAiICovXG4iCi0gICAgICAiJGNs
YXNzJC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIgPSBmdW5jdGlvbiAod3JpdGVy
KSB7XG4iCi0gICAgICAiICB2YXIgZiA9IHVuZGVmaW5lZDtcbiIsCi0gICAgICAiY2xhc3MiLCBH
ZXRQYXRoKG9wdGlvbnMsIGRlc2MpKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPmZp
ZWxkX2NvdW50KCk7IGkrKykgewotICAgIEdlbmVyYXRlQ2xhc3NTZXJpYWxpemVCaW5hcnlGaWVs
ZChvcHRpb25zLCBwcmludGVyLCBkZXNjLT5maWVsZChpKSk7Ci0gIH0KLQotICBpZiAoSXNFeHRl
bmRhYmxlKGRlc2MpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIgIGpzcGIuTWVz
c2FnZS5zZXJpYWxpemVCaW5hcnlFeHRlbnNpb25zKHRoaXMsIHdyaXRlciwgJGV4dG9iaiQsXG4i
Ci0gICAgICAgICIgICAgJGNsYXNzJC5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uKTtcbiIsCi0gICAg
ICAgICJleHRvYmoiLCBKU0V4dGVuc2lvbnNPYmplY3ROYW1lKG9wdGlvbnMsIGRlc2MtPmZpbGUo
KSwgZGVzYyksCi0gICAgICAgICJjbGFzcyIsIEdldFBhdGgob3B0aW9ucywgZGVzYykpOwotICB9
Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAifTtcbiIKLSAgICAgICJcbiIKLSAgICAgICJc
biIpOwotfQotCi12b2lkIEdlbmVyYXRvcjo6R2VuZXJhdGVDbGFzc1NlcmlhbGl6ZUJpbmFyeUZp
ZWxkKAotICAgIGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgaW86OlByaW50
ZXIqIHByaW50ZXIsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Qgewot
ICBwcmludGVyLT5QcmludCgKLSAgICAgICIgIGYgPSB0aGlzLmdldCRuYW1lJCgpO1xuIiwKLSAg
ICAgICJuYW1lIiwgSlNHZXR0ZXJOYW1lKGZpZWxkLCBCWVRFU19VOCkpOwotCi0gIGlmIChmaWVs
ZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiICBpZiAo
Zi5sZW5ndGggPiAwKSB7XG4iKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoSGFzRmllbGRQcmVzZW5j
ZShmaWVsZCkpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICIgIGlmIChmICE9
IG51bGwpIHtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBObyBmaWVsZCBwcmVzZW5jZTog
c2VyaWFsaXplIG9udG8gdGhlIHdpcmUgb25seSBpZiB2YWx1ZSBpcwotICAgICAgLy8gbm9uLWRl
ZmF1bHQuICBEZWZhdWx0cyBhcmUgZG9jdW1lbnRlZCBoZXJlOgotICAgICAgLy8gaHR0cHM6Ly9n
b3RvLmdvb2dsZS5jb20vbGhkZm0KLSAgICAgIHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsK
LSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UMzI6Ci0gICAgICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OgotICAgICAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV9VSU5UMzI6Ci0gICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX1VJTlQ2NDogewotICAgICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZXItPlByaW50
KCIgIGlmIChmICE9PSAwKSB7XG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNOgot
ICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9GTE9BVDoKLSAgICAgICAgY2Fz
ZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRE9VQkxFOgotICAgICAgICAgIHByaW50ZXItPlBy
aW50KAotICAgICAgICAgICAgICAiICBpZiAoZiAhPT0gMC4wKSB7XG4iKTsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICAg
ICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAgICAgIiAgaWYgKGYpIHtcbiIpOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJ
Tkc6Ci0gICAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgICAgICIgIGlmIChmLmxl
bmd0aCA+IDApIHtcbiIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICAgIHdyaXRlci4kd3JpdGVyJChcbiIK
LSAgICAgICIgICAgICAkaW5kZXgkLFxuIgotICAgICAgIiAgICAgIGYiLAotICAgICAgIndyaXRl
ciIsIEpTQmluYXJ5V3JpdGVyTWV0aG9kTmFtZShmaWVsZCksCi0gICAgICAiaW5kZXgiLCBTaW1w
bGVJdG9hKGZpZWxkLT5udW1iZXIoKSkpOwotCi0gIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgICAiLFxuIgotICAgICAgICAiICAgICAgJHN1Ym1zZyQuc2VyaWFsaXplQmluYXJ5VG9X
cml0ZXJcbiIsCi0gICAgICAgICJzdWJtc2ciLCBTdWJtZXNzYWdlVHlwZVJlZihvcHRpb25zLCBm
aWVsZCkpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KCJcbiIpOwotICB9Ci0gIHBy
aW50ZXItPlByaW50KAotICAgICAgIiAgICApO1xuIgotICAgICAgIiAgfVxuIik7Ci19Ci0KLXZv
aWQgR2VuZXJhdG9yOjpHZW5lcmF0ZUVudW0oY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9u
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBlbnVtZGVz
YykgY29uc3QgewotICBwcmludGVyLT5QcmludCgKLSAgICAgICIvKipcbiIKLSAgICAgICIgKiBA
ZW51bSB7bnVtYmVyfVxuIgotICAgICAgIiAqL1xuIgotICAgICAgIiRuYW1lJCA9IHtcbiIsCi0g
ICAgICAibmFtZSIsIEdldFBhdGgob3B0aW9ucywgZW51bWRlc2MpKTsKLQotICBmb3IgKGludCBp
ID0gMDsgaSA8IGVudW1kZXNjLT52YWx1ZV9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBFbnVt
VmFsdWVEZXNjcmlwdG9yKiB2YWx1ZSA9IGVudW1kZXNjLT52YWx1ZShpKTsKLSAgICBwcmludGVy
LT5QcmludCgKLSAgICAgICAgIiAgJG5hbWUkOiAkdmFsdWUkJGNvbW1hJFxuIiwKLSAgICAgICAg
Im5hbWUiLCBUb0VudW1DYXNlKHZhbHVlLT5uYW1lKCkpLAotICAgICAgICAidmFsdWUiLCBTaW1w
bGVJdG9hKHZhbHVlLT5udW1iZXIoKSksCi0gICAgICAgICJjb21tYSIsIChpID09IGVudW1kZXNj
LT52YWx1ZV9jb3VudCgpIC0gMSkgPyAiIiA6ICIsIik7Ci0gIH0KLQotICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJ9O1xuIgotICAgICAgIlxuIik7Ci19Ci0KLXZvaWQgR2VuZXJhdG9yOjpHZW5l
cmF0ZUV4dGVuc2lvbihjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNv
bnN0IHsKLSAgc3RyaW5nIGV4dGVuc2lvbl9zY29wZSA9Ci0gICAgICAoZmllbGQtPmV4dGVuc2lv
bl9zY29wZSgpID8KLSAgICAgICBHZXRQYXRoKG9wdGlvbnMsIGZpZWxkLT5leHRlbnNpb25fc2Nv
cGUoKSkgOgotICAgICAgIEdldFBhdGgob3B0aW9ucywgZmllbGQtPmZpbGUoKSkpOwotCi0gIHBy
aW50ZXItPlByaW50KAotICAgICAgIlxuIgotICAgICAgIi8qKlxuIgotICAgICAgIiAqIEEgdHVw
bGUgb2Yge2ZpZWxkIG51bWJlciwgY2xhc3MgY29uc3RydWN0b3J9IGZvciB0aGUgZXh0ZW5zaW9u
XG4iCi0gICAgICAiICogZmllbGQgbmFtZWQgYCRuYW1lJGAuXG4iCi0gICAgICAiICogQHR5cGUg
eyFqc3BiLkV4dGVuc2lvbkZpZWxkSW5mby48JGV4dGVuc2lvblR5cGUkPn1cbiIKLSAgICAgICIg
Ki9cbiIKLSAgICAgICIkY2xhc3MkLiRuYW1lJCA9IG5ldyBqc3BiLkV4dGVuc2lvbkZpZWxkSW5m
byhcbiIsCi0gICAgICAibmFtZSIsIEpTT2JqZWN0RmllbGROYW1lKGZpZWxkKSwKLSAgICAgICJj
bGFzcyIsIGV4dGVuc2lvbl9zY29wZSwKLSAgICAgICJleHRlbnNpb25UeXBlIiwgSlNGaWVsZFR5
cGVBbm5vdGF0aW9uKAotICAgICAgICAgIG9wdGlvbnMsIGZpZWxkLAotICAgICAgICAgIC8qIGZv
cmNlX29wdGlvbmFsID0gKi8gZmFsc2UsCi0gICAgICAgICAgLyogZm9yY2VfcHJlc2VudCA9ICov
IHRydWUsCi0gICAgICAgICAgLyogc2luZ3VsYXJfaWZfbm90X3BhY2tlZCA9ICovIGZhbHNlKSk7
Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgIiAgICAkaW5kZXgkLFxuIgotICAgICAgIiAgICB7
JG5hbWUkOiAwfSxcbiIKLSAgICAgICIgICAgJGN0b3IkLFxuIgotICAgICAgIiAgICAgLyoqIEB0
eXBlIHs/ZnVuY3Rpb24oKGJvb2xlYW58dW5kZWZpbmVkKSwhanNwYi5NZXNzYWdlPSk6ICIKLSAg
ICAgICIhT2JqZWN0fSAqLyAoXG4iCi0gICAgICAiICAgICAgICAgJHRvT2JqZWN0JCksXG4iCi0g
ICAgICAiICAgICRyZXBlYXRlZCQiLAotICAgICAgImluZGV4IiwgU2ltcGxlSXRvYShmaWVsZC0+
bnVtYmVyKCkpLAotICAgICAgIm5hbWUiLCBKU09iamVjdEZpZWxkTmFtZShmaWVsZCksCi0gICAg
ICAiY3RvciIsIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
TUVTU0FHRSA/Ci0gICAgICAgICAgICAgICBTdWJtZXNzYWdlVHlwZVJlZihvcHRpb25zLCBmaWVs
ZCkgOiBzdHJpbmcoIm51bGwiKSksCi0gICAgICAidG9PYmplY3QiLCAoZmllbGQtPmNwcF90eXBl
KCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UgPwotICAgICAgICAgICAgICAg
ICAgIChTdWJtZXNzYWdlVHlwZVJlZihvcHRpb25zLCBmaWVsZCkgKyAiLnRvT2JqZWN0IikgOgot
ICAgICAgICAgICAgICAgICAgIHN0cmluZygibnVsbCIpKSwKLSAgICAgICJyZXBlYXRlZCIsIChm
aWVsZC0+aXNfcmVwZWF0ZWQoKSA/ICIxIiA6ICIwIikpOwotCi0gIGlmIChvcHRpb25zLmJpbmFy
eSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiLFxuIgotICAgICAgICAiICAgIGpz
cGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS4kYmluYXJ5UmVhZGVyRm4kLFxuIgotICAgICAgICAi
ICAgIGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS4kYmluYXJ5V3JpdGVyRm4kLFxuIgotICAg
ICAgICAiICAgICRiaW5hcnlNZXNzYWdlU2VyaWFsaXplRm4kLFxuIgotICAgICAgICAiICAgICRi
aW5hcnlNZXNzYWdlRGVzZXJpYWxpemVGbiQsXG4iCi0gICAgICAgICIgICAgJGlzUGFja2VkJCk7
XG4iLAotICAgICAgICAiYmluYXJ5UmVhZGVyRm4iLCBKU0JpbmFyeVJlYWRlck1ldGhvZE5hbWUo
ZmllbGQpLAotICAgICAgICAiYmluYXJ5V3JpdGVyRm4iLCBKU0JpbmFyeVdyaXRlck1ldGhvZE5h
bWUoZmllbGQpLAotICAgICAgICAiYmluYXJ5TWVzc2FnZVNlcmlhbGl6ZUZuIiwKLSAgICAgICAg
KGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSA/
Ci0gICAgICAgIChTdWJtZXNzYWdlVHlwZVJlZihvcHRpb25zLCBmaWVsZCkgKwotICAgICAgICAg
Ii5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciIpIDogIm51bGwiLAotICAgICAgICAiYmluYXJ5TWVz
c2FnZURlc2VyaWFsaXplRm4iLAotICAgICAgICAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpID8KLSAgICAgICAgKFN1Ym1lc3NhZ2VUeXBlUmVm
KG9wdGlvbnMsIGZpZWxkKSArCi0gICAgICAgICAiLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRl
ciIpIDogIm51bGwiLAotICAgICAgICAiaXNQYWNrZWQiLCAoZmllbGQtPmlzX3BhY2tlZCgpID8g
InRydWUiIDogImZhbHNlIikpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KCIpO1xu
Iik7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAgICIvLyBUaGlzIHJlZ2lzdGVycyB0
aGUgZXh0ZW5zaW9uIGZpZWxkIHdpdGggdGhlIGV4dGVuZGVkIGNsYXNzLCBzbyB0aGF0XG4iCi0g
ICAgICAiLy8gdG9PYmplY3QoKSB3aWxsIGZ1bmN0aW9uIGNvcnJlY3RseS5cbiIKLSAgICAgICIk
ZXh0ZW5kTmFtZSRbJGluZGV4JF0gPSAkY2xhc3MkLiRuYW1lJDtcbiIKLSAgICAgICJcbiIsCi0g
ICAgICAiZXh0ZW5kTmFtZSIsIEpTRXh0ZW5zaW9uc09iamVjdE5hbWUob3B0aW9ucywgZmllbGQt
PmZpbGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVs
ZC0+Y29udGFpbmluZ190eXBlKCkpLAotICAgICAgImluZGV4IiwgU2ltcGxlSXRvYShmaWVsZC0+
bnVtYmVyKCkpLAotICAgICAgImNsYXNzIiwgZXh0ZW5zaW9uX3Njb3BlLAotICAgICAgIm5hbWUi
LCBKU09iamVjdEZpZWxkTmFtZShmaWVsZCkpOwotfQotCi1ib29sIEdlbmVyYXRvck9wdGlvbnM6
OlBhcnNlRnJvbU9wdGlvbnMoCi0gICAgY29uc3QgdmVjdG9yPCBwYWlyPCBzdHJpbmcsIHN0cmlu
ZyA+ID4mIG9wdGlvbnMsCi0gICAgc3RyaW5nKiBlcnJvcikgewotICBmb3IgKGludCBpID0gMDsg
aSA8IG9wdGlvbnMuc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAob3B0aW9uc1tpXS5maXJzdCA9PSAi
YWRkX3JlcXVpcmVfZm9yX2VudW1zIikgewotICAgICAgaWYgKG9wdGlvbnNbaV0uc2Vjb25kICE9
ICIiKSB7Ci0gICAgICAgICplcnJvciA9ICJVbmV4cGVjdGVkIG9wdGlvbiB2YWx1ZSBmb3IgYWRk
X3JlcXVpcmVfZm9yX2VudW1zIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAg
ICAgYWRkX3JlcXVpcmVfZm9yX2VudW1zID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKG9wdGlvbnNb
aV0uZmlyc3QgPT0gImJpbmFyeSIpIHsKLSAgICAgIGlmIChvcHRpb25zW2ldLnNlY29uZCAhPSAi
IikgewotICAgICAgICAqZXJyb3IgPSAiVW5leHBlY3RlZCBvcHRpb24gdmFsdWUgZm9yIGJpbmFy
eSI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGJpbmFyeSA9IHRydWU7
Ci0gICAgfSBlbHNlIGlmIChvcHRpb25zW2ldLmZpcnN0ID09ICJ0ZXN0b25seSIpIHsKLSAgICAg
IGlmIChvcHRpb25zW2ldLnNlY29uZCAhPSAiIikgewotICAgICAgICAqZXJyb3IgPSAiVW5leHBl
Y3RlZCBvcHRpb24gdmFsdWUgZm9yIHRlc3Rvbmx5IjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgfQotICAgICAgdGVzdG9ubHkgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAob3B0aW9uc1tp
XS5maXJzdCA9PSAiZXJyb3Jfb25fbmFtZV9jb25mbGljdCIpIHsKLSAgICAgIGlmIChvcHRpb25z
W2ldLnNlY29uZCAhPSAiIikgewotICAgICAgICAqZXJyb3IgPSAiVW5leHBlY3RlZCBvcHRpb24g
dmFsdWUgZm9yIGVycm9yX29uX25hbWVfY29uZmxpY3QiOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICB9Ci0gICAgICBlcnJvcl9vbl9uYW1lX2NvbmZsaWN0ID0gdHJ1ZTsKLSAgICB9IGVs
c2UgaWYgKG9wdGlvbnNbaV0uZmlyc3QgPT0gIm91dHB1dF9kaXIiKSB7Ci0gICAgICBvdXRwdXRf
ZGlyID0gb3B0aW9uc1tpXS5zZWNvbmQ7Ci0gICAgfSBlbHNlIGlmIChvcHRpb25zW2ldLmZpcnN0
ID09ICJuYW1lc3BhY2VfcHJlZml4IikgewotICAgICAgbmFtZXNwYWNlX3ByZWZpeCA9IG9wdGlv
bnNbaV0uc2Vjb25kOwotICAgIH0gZWxzZSBpZiAob3B0aW9uc1tpXS5maXJzdCA9PSAibGlicmFy
eSIpIHsKLSAgICAgIGxpYnJhcnkgPSBvcHRpb25zW2ldLnNlY29uZDsKLSAgICB9IGVsc2UgaWYg
KG9wdGlvbnNbaV0uZmlyc3QgPT0gImltcG9ydF9zdHlsZSIpIHsKLSAgICAgIGlmIChvcHRpb25z
W2ldLnNlY29uZCA9PSAiY2xvc3VyZSIpIHsKLSAgICAgICAgaW1wb3J0X3N0eWxlID0gSU1QT1JU
X0NMT1NVUkU7Ci0gICAgICB9IGVsc2UgaWYgKG9wdGlvbnNbaV0uc2Vjb25kID09ICJjb21tb25q
cyIpIHsKLSAgICAgICAgaW1wb3J0X3N0eWxlID0gSU1QT1JUX0NPTU1PTkpTOwotICAgICAgfSBl
bHNlIGlmIChvcHRpb25zW2ldLnNlY29uZCA9PSAiYnJvd3NlciIpIHsKLSAgICAgICAgaW1wb3J0
X3N0eWxlID0gSU1QT1JUX0JST1dTRVI7Ci0gICAgICB9IGVsc2UgaWYgKG9wdGlvbnNbaV0uc2Vj
b25kID09ICJlczYiKSB7Ci0gICAgICAgIGltcG9ydF9zdHlsZSA9IElNUE9SVF9FUzY7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICAqZXJyb3IgPSAiVW5rbm93biBpbXBvcnQgc3R5bGUgIiArIG9w
dGlvbnNbaV0uc2Vjb25kICsgIiwgZXhwZWN0ZWQgIiArCi0gICAgICAgICAgICAgICAgICJvbmUg
b2Y6IGNsb3N1cmUsIGNvbW1vbmpzLCBicm93c2VyLCBlczYuIjsKLSAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgLy8gQXNzdW1lIGFueSBvdGhlciBvcHRpb24gaXMgYW4gb3V0cHV0IGRpcmVj
dG9yeSwgYXMgbG9uZyBhcyBpdCBpcyBhIGJhcmUKLSAgICAgIC8vIGBrZXlgIHJhdGhlciB0aGFu
IGEgYGtleT12YWx1ZWAgb3B0aW9uLgotICAgICAgaWYgKG9wdGlvbnNbaV0uc2Vjb25kICE9ICIi
KSB7Ci0gICAgICAgICplcnJvciA9ICJVbmtub3duIG9wdGlvbjogIiArIG9wdGlvbnNbaV0uZmly
c3Q7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIG91dHB1dF9kaXIgPSBv
cHRpb25zW2ldLmZpcnN0OwotICAgIH0KLSAgfQotCi0gIGlmICghbGlicmFyeS5lbXB0eSgpICYm
IGltcG9ydF9zdHlsZSAhPSBJTVBPUlRfQ0xPU1VSRSkgewotICAgICplcnJvciA9ICJUaGUgbGli
cmFyeSBvcHRpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgIgotICAgICAgICAgICAgICJpbXBv
cnRfc3R5bGU9Y2xvc3VyZSI7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHZW5l
cmF0b3I6OkdlbmVyYXRlRmlsZXNJbkRlcE9yZGVyKAotICAgIGNvbnN0IEdlbmVyYXRvck9wdGlv
bnMmIG9wdGlvbnMsCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgY29uc3QgdmVjdG9y
PGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4mIGZpbGVzKSBjb25zdCB7Ci0gIC8vIEJ1aWxkIGEgc3Rk
OjpzZXQgb3ZlciBhbGwgZmlsZXMgc28gdGhhdCB0aGUgREZTIGNhbiBkZXRlY3Qgd2hlbiBpdCBy
ZWN1cnNlcwotICAvLyBpbnRvIGEgZGVwIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHVzZXIncyBjb21t
YW5kIGxpbmUuCi0gIHN0ZDo6c2V0PGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4gYWxsX2ZpbGVzKGZp
bGVzLmJlZ2luKCksIGZpbGVzLmVuZCgpKTsKLSAgLy8gVHJhY2sgdGhlIGluLXByb2dyZXNzIHNl
dCBvZiBmaWxlcyB0aGF0IGhhdmUgYmVlbiBnZW5lcmF0ZWQgYWxyZWFkeS4KLSAgc3RkOjpzZXQ8
Y29uc3QgRmlsZURlc2NyaXB0b3IqPiBnZW5lcmF0ZWQ7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwg
ZmlsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICBHZW5lcmF0ZUZpbGVBbmREZXBzKG9wdGlvbnMsIHBy
aW50ZXIsIGZpbGVzW2ldLCAmYWxsX2ZpbGVzLCAmZ2VuZXJhdGVkKTsKLSAgfQotfQotCi12b2lk
IEdlbmVyYXRvcjo6R2VuZXJhdGVGaWxlQW5kRGVwcygKLSAgICBjb25zdCBHZW5lcmF0b3JPcHRp
b25zJiBvcHRpb25zLAotICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgIGNvbnN0IEZpbGVE
ZXNjcmlwdG9yKiByb290LAotICAgIHN0ZDo6c2V0PGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4qIGFs
bF9maWxlcywKLSAgICBzdGQ6OnNldDxjb25zdCBGaWxlRGVzY3JpcHRvcio+KiBnZW5lcmF0ZWQp
IGNvbnN0IHsKLSAgLy8gU2tpcCBpZiBhbHJlYWR5IGdlbmVyYXRlZC4KLSAgaWYgKGdlbmVyYXRl
ZC0+ZmluZChyb290KSAhPSBnZW5lcmF0ZWQtPmVuZCgpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0g
IGdlbmVyYXRlZC0+aW5zZXJ0KHJvb3QpOwotCi0gIC8vIEdlbmVyYXRlIGFsbCBkZXBlbmRlbmNp
ZXMgYmVmb3JlIHRoaXMgZmlsZSdzIGNvbnRlbnQuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgcm9v
dC0+ZGVwZW5kZW5jeV9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWxlRGVzY3JpcHRvciog
ZGVwID0gcm9vdC0+ZGVwZW5kZW5jeShpKTsKLSAgICBHZW5lcmF0ZUZpbGVBbmREZXBzKG9wdGlv
bnMsIHByaW50ZXIsIGRlcCwgYWxsX2ZpbGVzLCBnZW5lcmF0ZWQpOwotICB9Ci0KLSAgLy8gR2Vu
ZXJhdGUgdGhpcyBmaWxlJ3MgY29udGVudC4gIE9ubHkgZ2VuZXJhdGUgaWYgdGhlIGZpbGUgaXMg
cGFydCBvZiB0aGUKLSAgLy8gb3JpZ2luYWwgc2V0IHJlcXVlc3RlZCB0byBiZSBnZW5lcmF0ZWQ7
IGkuZS4sIGRvbid0IHRha2UgYWxsIHRyYW5zaXRpdmUKLSAgLy8gZGVwcyBkb3duIHRvIHRoZSBy
b290cy4KLSAgaWYgKGFsbF9maWxlcy0+ZmluZChyb290KSAhPSBhbGxfZmlsZXMtPmVuZCgpKSB7
Ci0gICAgR2VuZXJhdGVDbGFzc2VzQW5kRW51bXMob3B0aW9ucywgcHJpbnRlciwgcm9vdCk7Ci0g
IH0KLX0KLQotdm9pZCBHZW5lcmF0b3I6OkdlbmVyYXRlRmlsZShjb25zdCBHZW5lcmF0b3JPcHRp
b25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciog
cHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0
b3IqIGZpbGUpIGNvbnN0IHsKLSAgR2VuZXJhdGVIZWFkZXIob3B0aW9ucywgcHJpbnRlcik7Ci0K
LSAgLy8gR2VuZXJhdGUgInJlcXVpcmUiIHN0YXRlbWVudHMuCi0gIGlmIChvcHRpb25zLmltcG9y
dF9zdHlsZSA9PSBHZW5lcmF0b3JPcHRpb25zOjpJTVBPUlRfQ09NTU9OSlMpIHsKLSAgICBwcmlu
dGVyLT5QcmludCgidmFyIGpzcGIgPSByZXF1aXJlKCdnb29nbGUtcHJvdG9idWYnKTtcbiIpOwot
ICAgIHByaW50ZXItPlByaW50KCJ2YXIgZ29vZyA9IGpzcGI7XG4iKTsKLSAgICBwcmludGVyLT5Q
cmludCgidmFyIGdsb2JhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbiIpOwotCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5kZXBlbmRlbmN5X2NvdW50KCk7IGkrKykgewot
ICAgICAgY29uc3Qgc3RyaW5nJiBuYW1lID0gZmlsZS0+ZGVwZW5kZW5jeShpKS0+bmFtZSgpOwot
ICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgInZhciAkYWxpYXMkID0gcmVxdWlyZSgn
JGZpbGUkJyk7XG4iLAotICAgICAgICAgICJhbGlhcyIsIE1vZHVsZUFsaWFzKG5hbWUpLAotICAg
ICAgICAgICJmaWxlIiwgR2V0Um9vdFBhdGgoZmlsZS0+bmFtZSgpKSArIEdldEpTRmlsZW5hbWUo
bmFtZSkpOwotICAgIH0KLSAgfQotCi0gIC8vIFdlIGFyZW4ndCB1c2luZyBDbG9zdXJlJ3MgaW1w
b3J0IHN5c3RlbSwgYnV0IHdlIHVzZSBnb29nLmV4cG9ydFN5bWJvbCgpCi0gIC8vIHRvIGNvbnN0
cnVjdCB0aGUgZXhwZWN0ZWQgdHJlZSBvZiBvYmplY3RzLCBlZy4KLSAgLy8KLSAgLy8gICBnb29n
LmV4cG9ydFN5bWJvbCgnZm9vLmJhci5CYXonLCBudWxsLCB0aGlzKTsKLSAgLy8KLSAgLy8gICAv
LyBMYXRlciBnZW5lcmF0ZWQgY29kZSBleHBlY3RzIGZvby5iYXIgPSB7fSB0byBleGlzdDoKLSAg
Ly8gICBmb28uYmFyLkJheiA9IGZ1bmN0aW9uKCkgeyAvKiAuLi4gKi8gfQotICBzZXQ8c3RyaW5n
PiBwcm92aWRlZDsKLQotICAvLyBDb3ZlciB0aGUgY2FzZSB3aGVyZSB0aGlzIGZpbGUgZGVjbGFy
ZXMgZXh0ZW5zaW9ucyBidXQgbm8gbWVzc2FnZXMuCi0gIC8vIFRoaXMgd2lsbCBlbnN1cmUgdGhh
dCB0aGUgZmlsZS1sZXZlbCBvYmplY3Qgd2lsbCBiZSBkZWNsYXJlZCB0byBob2xkCi0gIC8vIHRo
ZSBleHRlbnNpb25zLgotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGUtPmV4dGVuc2lvbl9jb3Vu
dCgpOyBpKyspIHsKLSAgICBwcm92aWRlZC5pbnNlcnQoZmlsZS0+ZXh0ZW5zaW9uKGkpLT5mdWxs
X25hbWUoKSk7Ci0gIH0KLQotICBGaW5kUHJvdmlkZXNGb3JGaWxlKG9wdGlvbnMsIHByaW50ZXIs
IGZpbGUsICZwcm92aWRlZCk7Ci0gIGZvciAoc3RkOjpzZXQ8c3RyaW5nPjo6aXRlcmF0b3IgaXQg
PSBwcm92aWRlZC5iZWdpbigpOwotICAgICAgIGl0ICE9IHByb3ZpZGVkLmVuZCgpOyArK2l0KSB7
Ci0gICAgcHJpbnRlci0+UHJpbnQoImdvb2cuZXhwb3J0U3ltYm9sKCckbmFtZSQnLCBudWxsLCBn
bG9iYWwpO1xuIiwKLSAgICAgICAgICAgICAgICAgICAibmFtZSIsICppdCk7Ci0gIH0KLQotICBH
ZW5lcmF0ZUNsYXNzZXNBbmRFbnVtcyhvcHRpb25zLCBwcmludGVyLCBmaWxlKTsKLQotICAvLyBF
eHRlbnNpb25zIG5lc3RlZCBpbnNpZGUgbWVzc2FnZXMgYXJlIGVtaXR0ZWQgaW5zaWRlCi0gIC8v
IEdlbmVyYXRlQ2xhc3Nlc0FuZEVudW1zKCkuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+
ZXh0ZW5zaW9uX2NvdW50KCk7IGkrKykgewotICAgIEdlbmVyYXRlRXh0ZW5zaW9uKG9wdGlvbnMs
IHByaW50ZXIsIGZpbGUtPmV4dGVuc2lvbihpKSk7Ci0gIH0KLQotICBpZiAob3B0aW9ucy5pbXBv
cnRfc3R5bGUgPT0gR2VuZXJhdG9yT3B0aW9uczo6SU1QT1JUX0NPTU1PTkpTKSB7Ci0gICAgcHJp
bnRlci0+UHJpbnQoImdvb2cub2JqZWN0LmV4dGVuZChleHBvcnRzLCAkcGFja2FnZSQpO1xuIiwK
LSAgICAgICAgICAgICAgICAgICAicGFja2FnZSIsIEdldFBhdGgob3B0aW9ucywgZmlsZSkpOwot
ICB9Ci19Ci0KLWJvb2wgR2VuZXJhdG9yOjpHZW5lcmF0ZUFsbChjb25zdCB2ZWN0b3I8Y29uc3Qg
RmlsZURlc2NyaXB0b3IqPiYgZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJh
dG9yQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcq
IGVycm9yKSBjb25zdCB7Ci0gIHZlY3RvcjwgcGFpcjwgc3RyaW5nLCBzdHJpbmcgPiA+IG9wdGlv
bl9wYWlyczsKLSAgUGFyc2VHZW5lcmF0b3JQYXJhbWV0ZXIocGFyYW1ldGVyLCAmb3B0aW9uX3Bh
aXJzKTsKLSAgR2VuZXJhdG9yT3B0aW9ucyBvcHRpb25zOwotICBpZiAoIW9wdGlvbnMuUGFyc2VG
cm9tT3B0aW9ucyhvcHRpb25fcGFpcnMsIGVycm9yKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0KLSAgLy8gVGhlcmUgYXJlIHRocmVlIHNjaGVtZXMgZm9yIHdoZXJlIG91dHB1dCBmaWxl
cyBnbzoKLSAgLy8KLSAgLy8gLSBpbXBvcnRfc3R5bGUgPSBJTVBPUlRfQ0xPU1VSRSwgbGlicmFy
eSBub24tZW1wdHk6IGFsbCBvdXRwdXQgaW4gb25lIGZpbGUKLSAgLy8gLSBpbXBvcnRfc3R5bGUg
PSBJTVBPUlRfQ0xPU1VSRSwgbGlicmFyeSBlbXB0eTogb25lIG91dHB1dCBmaWxlIHBlciB0eXBl
Ci0gIC8vIC0gaW1wb3J0X3N0eWxlICE9IElNUE9SVF9DTE9TVVJFOiBvbmUgb3V0cHV0IGZpbGUg
cGVyIC5wcm90byBmaWxlCi0gIGlmIChvcHRpb25zLmltcG9ydF9zdHlsZSA9PSBHZW5lcmF0b3JP
cHRpb25zOjpJTVBPUlRfQ0xPU1VSRSAmJgotICAgICAgb3B0aW9ucy5saWJyYXJ5ICE9ICIiKSB7
Ci0gICAgLy8gQWxsIG91dHB1dCBzaG91bGQgZ28gaW4gYSBzaW5nbGUgZmlsZS4KLSAgICBzdHJp
bmcgZmlsZW5hbWUgPSBvcHRpb25zLm91dHB1dF9kaXIgKyAiLyIgKyBvcHRpb25zLmxpYnJhcnkg
KyAiLmpzIjsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPGlvOjpaZXJvQ29weU91
dHB1dFN0cmVhbT4gb3V0cHV0KGNvbnRleHQtPk9wZW4oZmlsZW5hbWUpKTsKLSAgICBHT09HTEVf
Q0hFQ0sob3V0cHV0LmdldCgpKTsKLSAgICBpbzo6UHJpbnRlciBwcmludGVyKG91dHB1dC5nZXQo
KSwgJyQnKTsKLQotICAgIC8vIFB1bGwgb3V0IGFsbCBleHRlbnNpb25zIC0tIHdlIG5lZWQgdGhl
c2UgdG8gZ2VuZXJhdGUgYWxsCi0gICAgLy8gcHJvdmlkZXMvcmVxdWlyZXMuCi0gICAgdmVjdG9y
PGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGV4dGVuc2lvbnM7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBmaWxlcy5zaXplKCk7IGkrKykgewotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmaWxl
c1tpXS0+ZXh0ZW5zaW9uX2NvdW50KCk7IGorKykgewotICAgICAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGV4dGVuc2lvbiA9IGZpbGVzW2ldLT5leHRlbnNpb24oaik7Ci0gICAgICAgIGV4dGVu
c2lvbnMucHVzaF9iYWNrKGV4dGVuc2lvbik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgR2VuZXJh
dGVIZWFkZXIob3B0aW9ucywgJnByaW50ZXIpOwotCi0gICAgc3RkOjpzZXQ8c3RyaW5nPiBwcm92
aWRlZDsKLSAgICBGaW5kUHJvdmlkZXMob3B0aW9ucywgJnByaW50ZXIsIGZpbGVzLCAmcHJvdmlk
ZWQpOwotICAgIEZpbmRQcm92aWRlc0ZvckZpZWxkcyhvcHRpb25zLCAmcHJpbnRlciwgZXh0ZW5z
aW9ucywgJnByb3ZpZGVkKTsKLSAgICBHZW5lcmF0ZVByb3ZpZGVzKG9wdGlvbnMsICZwcmludGVy
LCAmcHJvdmlkZWQpOwotICAgIEdlbmVyYXRlVGVzdE9ubHkob3B0aW9ucywgJnByaW50ZXIpOwot
ICAgIEdlbmVyYXRlUmVxdWlyZXNGb3JMaWJyYXJ5KG9wdGlvbnMsICZwcmludGVyLCBmaWxlcywg
JnByb3ZpZGVkKTsKLQotICAgIEdlbmVyYXRlRmlsZXNJbkRlcE9yZGVyKG9wdGlvbnMsICZwcmlu
dGVyLCBmaWxlcyk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgIGlmIChTaG91bGRHZW5lcmF0ZUV4dGVuc2lvbihleHRlbnNpb25zW2ld
KSkgewotICAgICAgICBHZW5lcmF0ZUV4dGVuc2lvbihvcHRpb25zLCAmcHJpbnRlciwgZXh0ZW5z
aW9uc1tpXSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHByaW50ZXIuZmFpbGVkKCkpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAob3B0aW9ucy5pbXBvcnRf
c3R5bGUgPT0gR2VuZXJhdG9yT3B0aW9uczo6SU1QT1JUX0NMT1NVUkUpIHsKLSAgICBzZXQ8Y29u
c3Qgdm9pZCo+IGFsbG93ZWRfc2V0OwotICAgIGlmICghR2VuZXJhdGVKc3BiQWxsb3dlZFNldChv
cHRpb25zLCBmaWxlcywgJmFsbG93ZWRfc2V0LCBlcnJvcikpIHsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSA9IGZpbGVzW2ldOwotICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCBmaWxlLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaisrKSB7Ci0gICAg
ICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MgPSBmaWxlLT5tZXNzYWdlX3R5cGUoaik7Ci0gICAg
ICAgIGlmIChhbGxvd2VkX3NldC5jb3VudChkZXNjKSA9PSAwKSB7Ci0gICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJpbmcgZmlsZW5hbWUgPSBHZXRNZXNzYWdlRmls
ZU5hbWUob3B0aW9ucywgZGVzYyk7Ci0gICAgICAgIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9w
dHI8aW86Olplcm9Db3B5T3V0cHV0U3RyZWFtPiBvdXRwdXQoCi0gICAgICAgICAgICBjb250ZXh0
LT5PcGVuKGZpbGVuYW1lKSk7Ci0gICAgICAgIEdPT0dMRV9DSEVDSyhvdXRwdXQuZ2V0KCkpOwot
ICAgICAgICBpbzo6UHJpbnRlciBwcmludGVyKG91dHB1dC5nZXQoKSwgJyQnKTsKLQotICAgICAg
ICBHZW5lcmF0ZUhlYWRlcihvcHRpb25zLCAmcHJpbnRlcik7Ci0KLSAgICAgICAgc3RkOjpzZXQ8
c3RyaW5nPiBwcm92aWRlZDsKLSAgICAgICAgRmluZFByb3ZpZGVzRm9yTWVzc2FnZShvcHRpb25z
LCAmcHJpbnRlciwgZGVzYywgJnByb3ZpZGVkKTsKLSAgICAgICAgR2VuZXJhdGVQcm92aWRlcyhv
cHRpb25zLCAmcHJpbnRlciwgJnByb3ZpZGVkKTsKLSAgICAgICAgR2VuZXJhdGVUZXN0T25seShv
cHRpb25zLCAmcHJpbnRlcik7Ci0gICAgICAgIEdlbmVyYXRlUmVxdWlyZXNGb3JNZXNzYWdlKG9w
dGlvbnMsICZwcmludGVyLCBkZXNjLCAmcHJvdmlkZWQpOwotCi0gICAgICAgIEdlbmVyYXRlQ2xh
c3Mob3B0aW9ucywgJnByaW50ZXIsIGRlc2MpOwotCi0gICAgICAgIGlmIChwcmludGVyLmZhaWxl
ZCgpKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IGZpbGUtPmVudW1fdHlwZV9jb3VudCgpOyBqKyspIHsKLSAg
ICAgICAgY29uc3QgRW51bURlc2NyaXB0b3IqIGVudW1kZXNjID0gZmlsZS0+ZW51bV90eXBlKGop
OwotICAgICAgICBpZiAoYWxsb3dlZF9zZXQuY291bnQoZW51bWRlc2MpID09IDApIHsKLSAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cmluZyBmaWxlbmFtZSA9IEdl
dEVudW1GaWxlTmFtZShvcHRpb25zLCBlbnVtZGVzYyk7Ci0gICAgICAgIGdvb2dsZTo6cHJvdG9i
dWY6OnNjb3BlZF9wdHI8aW86Olplcm9Db3B5T3V0cHV0U3RyZWFtPiBvdXRwdXQoCi0gICAgICAg
ICAgICBjb250ZXh0LT5PcGVuKGZpbGVuYW1lKSk7Ci0gICAgICAgIEdPT0dMRV9DSEVDSyhvdXRw
dXQuZ2V0KCkpOwotICAgICAgICBpbzo6UHJpbnRlciBwcmludGVyKG91dHB1dC5nZXQoKSwgJyQn
KTsKLQotICAgICAgICBHZW5lcmF0ZUhlYWRlcihvcHRpb25zLCAmcHJpbnRlcik7Ci0KLSAgICAg
ICAgc3RkOjpzZXQ8c3RyaW5nPiBwcm92aWRlZDsKLSAgICAgICAgRmluZFByb3ZpZGVzRm9yRW51
bShvcHRpb25zLCAmcHJpbnRlciwgZW51bWRlc2MsICZwcm92aWRlZCk7Ci0gICAgICAgIEdlbmVy
YXRlUHJvdmlkZXMob3B0aW9ucywgJnByaW50ZXIsICZwcm92aWRlZCk7Ci0gICAgICAgIEdlbmVy
YXRlVGVzdE9ubHkob3B0aW9ucywgJnByaW50ZXIpOwotCi0gICAgICAgIEdlbmVyYXRlRW51bShv
cHRpb25zLCAmcHJpbnRlciwgZW51bWRlc2MpOwotCi0gICAgICAgIGlmIChwcmludGVyLmZhaWxl
ZCgpKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
ICAvLyBGaWxlLWxldmVsIGV4dGVuc2lvbnMgKG1lc3NhZ2UtbGV2ZWwgZXh0ZW5zaW9ucyBhcmUg
Z2VuZXJhdGVkIHVuZGVyCi0gICAgICAvLyB0aGUgZW5jbG9zaW5nIG1lc3NhZ2UpLgotICAgICAg
aWYgKGFsbG93ZWRfc2V0LmNvdW50KGZpbGUpID09IDEpIHsKLSAgICAgICAgc3RyaW5nIGZpbGVu
YW1lID0gR2V0RXh0ZW5zaW9uRmlsZU5hbWUob3B0aW9ucywgZmlsZSk7Ci0KLSAgICAgICAgZ29v
Z2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0+IG91dHB1
dCgKLSAgICAgICAgICAgIGNvbnRleHQtPk9wZW4oZmlsZW5hbWUpKTsKLSAgICAgICAgR09PR0xF
X0NIRUNLKG91dHB1dC5nZXQoKSk7Ci0gICAgICAgIGlvOjpQcmludGVyIHByaW50ZXIob3V0cHV0
LmdldCgpLCAnJCcpOwotCi0gICAgICAgIEdlbmVyYXRlSGVhZGVyKG9wdGlvbnMsICZwcmludGVy
KTsKLQotICAgICAgICBzdGQ6OnNldDxzdHJpbmc+IHByb3ZpZGVkOwotICAgICAgICB2ZWN0b3I8
Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmllbGRzOwotCi0gICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgZmlsZXNbaV0tPmV4dGVuc2lvbl9jb3VudCgpOyBqKyspIHsKLSAgICAgICAgICBpZiAo
U2hvdWxkR2VuZXJhdGVFeHRlbnNpb24oZmlsZXNbaV0tPmV4dGVuc2lvbihqKSkpIHsKLSAgICAg
ICAgICAgIGZpZWxkcy5wdXNoX2JhY2soZmlsZXNbaV0tPmV4dGVuc2lvbihqKSk7Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgRmluZFByb3ZpZGVzRm9yRmllbGRzKG9wdGlvbnMs
ICZwcmludGVyLCBmaWVsZHMsICZwcm92aWRlZCk7Ci0gICAgICAgIEdlbmVyYXRlUHJvdmlkZXMo
b3B0aW9ucywgJnByaW50ZXIsICZwcm92aWRlZCk7Ci0gICAgICAgIEdlbmVyYXRlVGVzdE9ubHko
b3B0aW9ucywgJnByaW50ZXIpOwotICAgICAgICBHZW5lcmF0ZVJlcXVpcmVzRm9yRXh0ZW5zaW9u
cyhvcHRpb25zLCAmcHJpbnRlciwgZmllbGRzLCAmcHJvdmlkZWQpOwotCi0gICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgZmlsZXNbaV0tPmV4dGVuc2lvbl9jb3VudCgpOyBqKyspIHsKLSAgICAg
ICAgICBpZiAoU2hvdWxkR2VuZXJhdGVFeHRlbnNpb24oZmlsZXNbaV0tPmV4dGVuc2lvbihqKSkp
IHsKLSAgICAgICAgICAgIEdlbmVyYXRlRXh0ZW5zaW9uKG9wdGlvbnMsICZwcmludGVyLCBmaWxl
c1tpXS0+ZXh0ZW5zaW9uKGopKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gR2VuZXJhdGUgb25lIG91dHB1dCBmaWxlIHBlciBpbnB1
dCAoLnByb3RvKSBmaWxlLgotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7
IGkrKykgewotICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3IqIGZp
bGUgPSBmaWxlc1tpXTsKLQotICAgICAgc3RyaW5nIGZpbGVuYW1lID0gb3B0aW9ucy5vdXRwdXRf
ZGlyICsgIi8iICsgR2V0SlNGaWxlbmFtZShmaWxlLT5uYW1lKCkpOwotICAgICAgZ29vZ2xlOjpw
cm90b2J1Zjo6c2NvcGVkX3B0cjxpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0+IG91dHB1dChjb250
ZXh0LT5PcGVuKGZpbGVuYW1lKSk7Ci0gICAgICBHT09HTEVfQ0hFQ0sob3V0cHV0LmdldCgpKTsK
LSAgICAgIGlvOjpQcmludGVyIHByaW50ZXIob3V0cHV0LmdldCgpLCAnJCcpOwotCi0gICAgICBH
ZW5lcmF0ZUZpbGUob3B0aW9ucywgJnByaW50ZXIsIGZpbGUpOwotCi0gICAgICBpZiAocHJpbnRl
ci5mYWlsZWQoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBqcwotfSAgLy8gbmFtZXNw
YWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qcy9qc19nZW5l
cmF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qcy9qc19nZW5lcmF0b3IuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNmZkN2NhNTA3MGEzNDRmMzZlYmM2MjcwZjEy
ZjVkN2NkMDY3YTQyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvanMvanNfZ2VuZXJhdG9yLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pTX0dFTkVSQVRPUl9IX18K
LSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX0pTX0dFTkVSQVRPUl9IX18KLQotI2lu
Y2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1l
c3BhY2UgcHJvdG9idWYgewotCi1jbGFzcyBEZXNjcmlwdG9yOwotY2xhc3MgRW51bURlc2NyaXB0
b3I7Ci1jbGFzcyBGaWVsZERlc2NyaXB0b3I7Ci1jbGFzcyBPbmVvZkRlc2NyaXB0b3I7Ci1jbGFz
cyBGaWxlRGVzY3JpcHRvcjsKLQotbmFtZXNwYWNlIGlvIHsgY2xhc3MgUHJpbnRlcjsgfQotCi1u
YW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIGpzIHsKLQotc3RydWN0IEdlbmVyYXRvck9w
dGlvbnMgewotICAvLyBBZGQgYSBgZ29vZy5yZXF1aXJlcygpYCBjYWxsIGZvciBlYWNoIGVudW0g
dHlwZSB1c2VkLiBJZiBub3Qgc2V0LCBhIGZvcndhcmQKLSAgLy8gZGVjbGFyYXRpb24gd2l0aCBg
Z29vZy5mb3J3YXJkRGVjbGFyZWAgaXMgcHJvZHVjZWQgaW5zdGVhZC4KLSAgYm9vbCBhZGRfcmVx
dWlyZV9mb3JfZW51bXM7Ci0gIC8vIFNldCB0aGlzIGFzIGEgdGVzdC1vbmx5IG1vZHVsZSB2aWEg
YGdvb2cuc2V0VGVzdE9ubHkoKTtgLgotICBib29sIHRlc3Rvbmx5OwotICAvLyBPdXRwdXQgcGF0
aC4KLSAgc3RyaW5nIG91dHB1dF9kaXI7Ci0gIC8vIE5hbWVzcGFjZSBwcmVmaXguCi0gIHN0cmlu
ZyBuYW1lc3BhY2VfcHJlZml4OwotICAvLyBDcmVhdGUgYSBsaWJyYXJ5IHdpdGggbmFtZSA8bmFt
ZT5fbGliLmpzIHJhdGhlciB0aGFuIGEgc2VwYXJhdGUgLmpzIGZpbGUKLSAgLy8gcGVyIHR5cGU/
Ci0gIHN0cmluZyBsaWJyYXJ5OwotICAvLyBFcnJvciBpZiB0aGVyZSBhcmUgdHdvIHR5cGVzIHRo
YXQgd291bGQgZ2VuZXJhdGUgdGhlIHNhbWUgb3V0cHV0IGZpbGU/Ci0gIGJvb2wgZXJyb3Jfb25f
bmFtZV9jb25mbGljdDsKLSAgLy8gRW5hYmxlIGJpbmFyeS1mb3JtYXQgc3VwcG9ydD8KLSAgYm9v
bCBiaW5hcnk7Ci0gIC8vIFdoYXQgc3R5bGUgb2YgaW1wb3J0cyBzaG91bGQgYmUgdXNlZC4KLSAg
ZW51bSBJbXBvcnRTdHlsZSB7Ci0gICAgSU1QT1JUX0NMT1NVUkUsICAgIC8vIGdvb2cucmVxdWly
ZSgpCi0gICAgSU1QT1JUX0NPTU1PTkpTLCAgIC8vIHJlcXVpcmUoKQotICAgIElNUE9SVF9CUk9X
U0VSLCAgICAvLyBubyBpbXBvcnQgc3RhdGVtZW50cwotICAgIElNUE9SVF9FUzYsICAgICAgICAv
LyBpbXBvcnQgeyBtZW1iZXIgfSBmcm9tICcnCi0gIH0gaW1wb3J0X3N0eWxlOwotCi0gIEdlbmVy
YXRvck9wdGlvbnMoKQotICAgICAgOiBhZGRfcmVxdWlyZV9mb3JfZW51bXMoZmFsc2UpLAotICAg
ICAgICB0ZXN0b25seShmYWxzZSksCi0gICAgICAgIG91dHB1dF9kaXIoIi4iKSwKLSAgICAgICAg
bmFtZXNwYWNlX3ByZWZpeCgiIiksCi0gICAgICAgIGxpYnJhcnkoIiIpLAotICAgICAgICBlcnJv
cl9vbl9uYW1lX2NvbmZsaWN0KGZhbHNlKSwKLSAgICAgICAgYmluYXJ5KGZhbHNlKSwKLSAgICAg
ICAgaW1wb3J0X3N0eWxlKElNUE9SVF9DTE9TVVJFKSB7fQotCi0gIGJvb2wgUGFyc2VGcm9tT3B0
aW9ucygKLSAgICAgIGNvbnN0IHZlY3RvcjwgcGFpcjwgc3RyaW5nLCBzdHJpbmcgPiA+JiBvcHRp
b25zLAotICAgICAgc3RyaW5nKiBlcnJvcik7Ci19OwotCi1jbGFzcyBMSUJQUk9UT0NfRVhQT1JU
IEdlbmVyYXRvciA6IHB1YmxpYyBDb2RlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIEdlbmVyYXRv
cigpIHt9Ci0gIHZpcnR1YWwgfkdlbmVyYXRvcigpIHt9Ci0KLSAgdmlydHVhbCBib29sIEdlbmVy
YXRlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0
b3JDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBlcnJv
cikgY29uc3QgewotICAgICplcnJvciA9ICJVbmltcGxlbWVudGVkIEdlbmVyYXRlKCkgbWV0aG9k
LiBDYWxsIEdlbmVyYXRlQWxsKCkgaW5zdGVhZC4iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
Ci0gIHZpcnR1YWwgYm9vbCBIYXNHZW5lcmF0ZUFsbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LQotICB2aXJ0dWFsIGJvb2wgR2VuZXJhdGVBbGwoY29uc3QgdmVjdG9yPGNvbnN0IEZpbGVEZXNj
cmlwdG9yKj4mIGZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5n
JiBwYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JDb250ZXh0
KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBlcnJvcikgY29u
c3Q7Ci0KLSBwcml2YXRlOgotICB2b2lkIEdlbmVyYXRlSGVhZGVyKGNvbnN0IEdlbmVyYXRvck9w
dGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50
ZXIpIGNvbnN0OwotCi0gIC8vIEdlbmVyYXRlIGdvb2cucHJvdmlkZXMoKSBjYWxscy4KLSAgdm9p
ZCBGaW5kUHJvdmlkZXMoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAg
ICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZlY3Rvcjxjb25zdCBGaWxlRGVzY3JpcHRvcio+JiBmaWxlLAotICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnNldDxzdHJpbmc+KiBwcm92aWRlZCkgY29uc3Q7Ci0gIHZvaWQgRmluZFByb3Zp
ZGVzRm9yRmlsZShjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6c2V0PHN0cmluZz4qIHByb3ZpZGVkKSBjb25zdDsKLSAgdm9pZCBGaW5kUHJv
dmlkZXNGb3JNZXNzYWdlKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiBwcm92aWRlZCkgY29uc3Q7Ci0gIHZv
aWQgRmluZFByb3ZpZGVzRm9yRW51bShjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBFbnVtRGVzY3JpcHRvciogZW51bWRlc2MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiBwcm92aWRlZCkgY29uc3Q7
Ci0gIC8vIEZvciBleHRlbnNpb24gZmllbGRzIGF0IGZpbGUgc2NvcGUuCi0gIHZvaWQgRmluZFBy
b3ZpZGVzRm9yRmllbGRzKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4mIGZp
ZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RyaW5nPiogcHJv
dmlkZWQpIGNvbnN0OwotICAvLyBQcmludCB0aGUgZ29vZy5wcm92aWRlcygpIGZvdW5kIGJ5IHRo
ZSBtZXRob2RzIGFib3ZlLgotICB2b2lkIEdlbmVyYXRlUHJvdmlkZXMoY29uc3QgR2VuZXJhdG9y
T3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBw
cmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RyaW5nPiogcHJvdmlk
ZWQpIGNvbnN0OwotCi0gIC8vIEdlbmVyYXRlIGdvb2cuc2V0VGVzdE9ubHkoKSBpZiBpbmRpY2F0
ZWQuCi0gIHZvaWQgR2VuZXJhdGVUZXN0T25seShjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRp
b25zLAotICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0
OwotCi0gIC8vIEdlbmVyYXRlIGdvb2cucmVxdWlyZXMoKSBjYWxscy4KLSAgdm9pZCBHZW5lcmF0
ZVJlcXVpcmVzRm9yTGlicmFyeShjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWxlRGVz
Y3JpcHRvcio+JiBmaWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnNldDxzdHJpbmc+KiBwcm92aWRlZCkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVSZXF1aXJlc0Zv
ck1lc3NhZ2UoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRGVzY3JpcHRvciogZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0
PHN0cmluZz4qIHByb3ZpZGVkKSBjb25zdDsKLSAgLy8gRm9yIGV4dGVuc2lvbiBmaWVsZHMgYXQg
ZmlsZSBzY29wZS4KLSAgdm9pZCBHZW5lcmF0ZVJlcXVpcmVzRm9yRXh0ZW5zaW9ucygKLSAgICAg
IGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsIGlvOjpQcmludGVyKiBwcmludGVyLAot
ICAgICAgY29uc3QgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBmaWVsZHMsCi0gICAg
ICBzdGQ6OnNldDxzdHJpbmc+KiBwcm92aWRlZCkgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVSZXF1
aXJlc0ltcGwoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiByZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiBmb3J3YXJkcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiBwcm92aWRlZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHJlcXVpcmVfanNwYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHJlcXVpcmVfZXh0ZW5zaW9uKSBjb25zdDsKLSAgdm9pZCBGaW5kUmVxdWlyZXNGb3JNZXNz
YWdlKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpzZXQ8c3RyaW5nPiogcmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnNldDxzdHJpbmc+KiBmb3J3YXJkcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wqIGhhdmVfbWVzc2FnZSkgY29uc3Q7Ci0gIHZvaWQgRmluZFJlcXVp
cmVzRm9yRmllbGQoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0cmluZz4qIHJlcXVpcmVkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0cmluZz4qIGZvcndhcmRzKSBjb25zdDsKLSAg
dm9pZCBGaW5kUmVxdWlyZXNGb3JFeHRlbnNpb24oY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0
aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3Ry
aW5nPiogcmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0
PHN0cmluZz4qIGZvcndhcmRzKSBjb25zdDsKLQotICB2b2lkIEdlbmVyYXRlRmlsZShjb25zdCBH
ZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRl
ciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZp
bGUpIGNvbnN0OwotCi0gIC8vIEdlbmVyYXRlIGRlZmluaXRpb25zIGZvciBhbGwgbWVzc2FnZSBj
bGFzc2VzIGFuZCBlbnVtcyBpbiBhbGwgZmlsZXMsCi0gIC8vIHByb2Nlc3NpbmcgdGhlIGZpbGVz
IGluIGRlcGVuZGVuY2Ugb3JkZXIuCi0gIHZvaWQgR2VuZXJhdGVGaWxlc0luRGVwT3JkZXIoY29u
c3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiYgZmlsZSkgY29uc3Q7Ci0gIC8v
IEhlbHBlciBmb3IgYWJvdmUuCi0gIHZvaWQgR2VuZXJhdGVGaWxlQW5kRGVwcyhjb25zdCBHZW5l
cmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlBy
aW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVz
Y3JpcHRvciogcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PGNvbnN0
IEZpbGVEZXNjcmlwdG9yKj4qIGFsbF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c2V0PGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4qIGdlbmVyYXRlZCkgY29uc3Q7Ci0KLSAg
Ly8gR2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIGFsbCBtZXNzYWdlIGNsYXNzZXMgYW5kIGVudW1z
LgotICB2b2lkIEdlbmVyYXRlQ2xhc3Nlc0FuZEVudW1zKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMm
IG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHBy
aW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0
b3IqIGZpbGUpIGNvbnN0OwotCi0gIC8vIEdlbmVyYXRlIGRlZmluaXRpb24gZm9yIG9uZSBjbGFz
cy4KLSAgdm9pZCBHZW5lcmF0ZUNsYXNzKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMs
Ci0gICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRl
Q2xhc3NDb25zdHJ1Y3Rvcihjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYykgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVDbGFzc0ZpZWxkSW5mbyhjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRp
b25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjKSBj
b25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNsYXNzWGlkKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9w
dGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MpIGNvbnN0OwotICB2
b2lkIEdlbmVyYXRlT25lb2ZDYXNlRGVmaW5pdGlvbihjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBv
cHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciog
cHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT25lb2ZE
ZXNjcmlwdG9yKiBvbmVvZikgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDbGFzc1RvT2JqZWN0KGNv
bnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBEZXNjcmlwdG9yKiBkZXNjKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNsYXNzRmllbGRU
b09iamVjdChjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0Owot
ICB2b2lkIEdlbmVyYXRlQ2xhc3NGcm9tT2JqZWN0KGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9w
dGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVz
YykgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDbGFzc0ZpZWxkRnJvbU9iamVjdChjb25zdCBHZW5l
cmF0b3JPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0
ZUNsYXNzQ2xvbmUoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MpIGNvbnN0OwotICB2b2lkIEdlbmVyYXRlQ2xh
c3NSZWdpc3RyYXRpb24oY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzYykgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVDbGFzc0ZpZWxkcyhjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRpb25z
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjKSBjb25zdDsKLSAg
dm9pZCBHZW5lcmF0ZUNsYXNzRmllbGQoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzYykgY29uc3Q7Ci0g
IHZvaWQgR2VuZXJhdGVDbGFzc0V4dGVuc2lvbkZpZWxkSW5mbyhjb25zdCBHZW5lcmF0b3JPcHRp
b25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86
OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNsYXNzRGVz
ZXJpYWxpemUoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MpIGNvbnN0OwotICB2b2lkIEdl
bmVyYXRlQ2xhc3NEZXNlcmlhbGl6ZUJpbmFyeShjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRp
b25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciog
cHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVz
Y3JpcHRvciogZGVzYykgY29uc3Q7Ci0gIHZvaWQgR2VuZXJhdGVDbGFzc0Rlc2VyaWFsaXplQmlu
YXJ5RmllbGQoY29uc3QgR2VuZXJhdG9yT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkKSBjb25zdDsKLSAgdm9pZCBHZW5lcmF0ZUNsYXNzU2VyaWFsaXplQmluYXJ5KGNv
bnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MpIGNvbnN0OwotICB2b2lkIEdlbmVy
YXRlQ2xhc3NTZXJpYWxpemVCaW5hcnlGaWVsZChjb25zdCBHZW5lcmF0b3JPcHRpb25zJiBvcHRp
b25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6UHJpbnRl
ciogcHJpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0KLSAgLy8gR2VuZXJhdGUgZGVmaW5p
dGlvbiBmb3Igb25lIGVudW0uCi0gIHZvaWQgR2VuZXJhdGVFbnVtKGNvbnN0IEdlbmVyYXRvck9w
dGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVy
LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBFbnVtRGVzY3JpcHRvciogZW51bWRlc2MpIGNv
bnN0OwotCi0gIC8vIEdlbmVyYXRlIGFuIGV4dGVuc2lvbiBkZWZpbml0aW9uLgotICB2b2lkIEdl
bmVyYXRlRXh0ZW5zaW9uKGNvbnN0IEdlbmVyYXRvck9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0KLSAgR09PR0xF
X0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBuYW1l
c3BhY2UganMKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3Rv
YnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVG
X0NPTVBJTEVSX0pTX0dFTkVSQVRPUl9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9tYWluLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL21haW4uY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YWQxM2I3NDljOGMyZWViMmM3ZDdlNTFk
OWE0OWNjMzY3MTkxMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL21haW4uY2MKKysrIC9kZXYvbnVsbApA
QCAtMSw5MCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8g
QXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2UuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9nZW5lcmF0b3IuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhvbl9nZW5lcmF0b3IuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2dlbmVyYXRvci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19nZW5l
cmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcnVieS9ydWJ5X2dl
bmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3No
YXJwX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmpl
Y3RpdmVjL29iamVjdGl2ZWNfZ2VuZXJhdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL2pzL2pzX2dlbmVyYXRvci5oPgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciog
YXJndltdKSB7Ci0KLSAgZ29vZ2xlOjpwcm90b2J1Zjo6Y29tcGlsZXI6OkNvbW1hbmRMaW5lSW50
ZXJmYWNlIGNsaTsKLSAgY2xpLkFsbG93UGx1Z2lucygicHJvdG9jLSIpOwotCi0gIC8vIFByb3Rv
MiBDKysKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6Y29tcGlsZXI6OmNwcDo6Q3BwR2VuZXJhdG9yIGNw
cF9nZW5lcmF0b3I7Ci0gIGNsaS5SZWdpc3RlckdlbmVyYXRvcigiLS1jcHBfb3V0IiwgIi0tY3Bw
X29wdCIsICZjcHBfZ2VuZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkdlbmVyYXRl
IEMrKyBoZWFkZXIgYW5kIHNvdXJjZS4iKTsKLQotICAvLyBQcm90bzIgSmF2YQotICBnb29nbGU6
OnByb3RvYnVmOjpjb21waWxlcjo6amF2YTo6SmF2YUdlbmVyYXRvciBqYXZhX2dlbmVyYXRvcjsK
LSAgY2xpLlJlZ2lzdGVyR2VuZXJhdG9yKCItLWphdmFfb3V0IiwgJmphdmFfZ2VuZXJhdG9yLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIkdlbmVyYXRlIEphdmEgc291cmNlIGZpbGUuIik7Ci0K
LQotICAvLyBQcm90bzIgUHl0aG9uCi0gIGdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyOjpweXRo
b246OkdlbmVyYXRvciBweV9nZW5lcmF0b3I7Ci0gIGNsaS5SZWdpc3RlckdlbmVyYXRvcigiLS1w
eXRob25fb3V0IiwgJnB5X2dlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJHZW5l
cmF0ZSBQeXRob24gc291cmNlIGZpbGUuIik7Ci0KLSAgLy8gSmF2YSBOYW5vCi0gIGdvb2dsZTo6
cHJvdG9idWY6OmNvbXBpbGVyOjpqYXZhbmFubzo6SmF2YU5hbm9HZW5lcmF0b3IgamF2YW5hbm9f
Z2VuZXJhdG9yOwotICBjbGkuUmVnaXN0ZXJHZW5lcmF0b3IoIi0tamF2YW5hbm9fb3V0IiwgJmph
dmFuYW5vX2dlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJHZW5lcmF0ZSBKYXZh
IE5hbm8gc291cmNlIGZpbGUuIik7Ci0KLSAgLy8gUnVieQotICBnb29nbGU6OnByb3RvYnVmOjpj
b21waWxlcjo6cnVieTo6R2VuZXJhdG9yIHJiX2dlbmVyYXRvcjsKLSAgY2xpLlJlZ2lzdGVyR2Vu
ZXJhdG9yKCItLXJ1Ynlfb3V0IiwgJnJiX2dlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICJHZW5lcmF0ZSBSdWJ5IHNvdXJjZSBmaWxlLiIpOwotCi0gIC8vIENTaGFycAotICBnb29n
bGU6OnByb3RvYnVmOjpjb21waWxlcjo6Y3NoYXJwOjpHZW5lcmF0b3IgY3NoYXJwX2dlbmVyYXRv
cjsKLSAgY2xpLlJlZ2lzdGVyR2VuZXJhdG9yKCItLWNzaGFycF9vdXQiLCAiLS1jc2hhcnBfb3B0
IiwgJmNzaGFycF9nZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiR2VuZXJhdGUg
QyMgc291cmNlIGZpbGUuIik7Ci0KLSAgLy8gT2JqZWN0aXZlIEMKLSAgZ29vZ2xlOjpwcm90b2J1
Zjo6Y29tcGlsZXI6Om9iamVjdGl2ZWM6Ok9iamVjdGl2ZUNHZW5lcmF0b3Igb2JqY19nZW5lcmF0
b3I7Ci0gIGNsaS5SZWdpc3RlckdlbmVyYXRvcigiLS1vYmpjX291dCIsICItLW9iamNfb3B0Iiwg
Jm9iamNfZ2VuZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkdlbmVyYXRlIE9iamVj
dGl2ZSBDIGhlYWRlciBhbmQgc291cmNlLiIpOwotCi0gIC8vIEphdmFTY3JpcHQKLSAgZ29vZ2xl
Ojpwcm90b2J1Zjo6Y29tcGlsZXI6OmpzOjpHZW5lcmF0b3IganNfZ2VuZXJhdG9yOwotICBjbGku
UmVnaXN0ZXJHZW5lcmF0b3IoIi0tanNfb3V0IiwgJmpzX2dlbmVyYXRvciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICJHZW5lcmF0ZSBKYXZhU2NyaXB0IHNvdXJjZS4iKTsKLQotICByZXR1cm4g
Y2xpLlJ1bihhcmdjLCBhcmd2KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9tb2NrX2NvZGVfZ2VuZXJhdG9yLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL21vY2tfY29kZV9nZW5lcmF0b3IuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDgyYmIzNDI3NDdjODg4Y2RhYTRhNjAyZDc0ZmE5ZDI2N2M3NWVhOWUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL21vY2tfY29kZV9nZW5lcmF0b3IuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9u
QGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9tb2NrX2NvZGVfZ2VuZXJhdG9yLmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNp
bmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRS
X0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlm
Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xv
Z2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmlsZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi90ZXN0aW5nL2ZpbGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGlu
Zy9maWxlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmg+Ci0jaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9i
dWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLQotLy8gUmV0dXJucyB0aGUgbGlzdCBvZiB0aGUg
bmFtZXMgb2YgZmlsZXMgaW4gYWxsX2ZpbGVzIGluIHRoZSBmb3JtIG9mIGEKLS8vIGNvbW1hLXNl
cGFyYXRlZCBzdHJpbmcuCi1zdHJpbmcgQ29tbWFTZXBhcmF0ZWRMaXN0KGNvbnN0IHZlY3Rvcjxj
b25zdCBGaWxlRGVzY3JpcHRvcio+IGFsbF9maWxlcykgewotICB2ZWN0b3I8c3RyaW5nPiBuYW1l
czsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxfZmlsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICBu
YW1lcy5wdXNoX2JhY2soYWxsX2ZpbGVzW2ldLT5uYW1lKCkpOwotICB9Ci0gIHJldHVybiBKb2lu
KG5hbWVzLCAiLCIpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhcioga0ZpcnN0SW5zZXJ0aW9uUG9p
bnROYW1lID0gImZpcnN0X21vY2tfaW5zZXJ0aW9uX3BvaW50IjsKLXN0YXRpYyBjb25zdCBjaGFy
KiBrU2Vjb25kSW5zZXJ0aW9uUG9pbnROYW1lID0gInNlY29uZF9tb2NrX2luc2VydGlvbl9wb2lu
dCI7Ci1zdGF0aWMgY29uc3QgY2hhcioga0ZpcnN0SW5zZXJ0aW9uUG9pbnQgPQotICAgICIjIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaXJzdF9tb2NrX2luc2VydGlvbl9wb2ludCkgaXMgaGVy
ZVxuIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrU2Vjb25kSW5zZXJ0aW9uUG9pbnQgPQotICAgICIg
ICMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlY29uZF9tb2NrX2luc2VydGlvbl9wb2ludCkg
aXMgaGVyZVxuIjsKLQotTW9ja0NvZGVHZW5lcmF0b3I6Ok1vY2tDb2RlR2VuZXJhdG9yKGNvbnN0
IHN0cmluZyYgbmFtZSkKLSAgICA6IG5hbWVfKG5hbWUpIHt9Ci0KLU1vY2tDb2RlR2VuZXJhdG9y
Ojp+TW9ja0NvZGVHZW5lcmF0b3IoKSB7fQotCi12b2lkIE1vY2tDb2RlR2VuZXJhdG9yOjpFeHBl
Y3RHZW5lcmF0ZWQoCi0gICAgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgIGNvbnN0IHN0cmluZyYg
cGFyYW1ldGVyLAotICAgIGNvbnN0IHN0cmluZyYgaW5zZXJ0aW9ucywKLSAgICBjb25zdCBzdHJp
bmcmIGZpbGUsCi0gICAgY29uc3Qgc3RyaW5nJiBmaXJzdF9tZXNzYWdlX25hbWUsCi0gICAgY29u
c3Qgc3RyaW5nJiBmaXJzdF9wYXJzZWRfZmlsZV9uYW1lLAotICAgIGNvbnN0IHN0cmluZyYgb3V0
cHV0X2RpcmVjdG9yeSkgewotICBzdHJpbmcgY29udGVudDsKLSAgR09PR0xFX0NIRUNLX09LKAot
ICAgICAgRmlsZTo6R2V0Q29udGVudHMob3V0cHV0X2RpcmVjdG9yeSArICIvIiArIEdldE91dHB1
dEZpbGVOYW1lKG5hbWUsIGZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRlbnQs
IHRydWUpKTsKLQotICB2ZWN0b3I8c3RyaW5nPiBsaW5lcyA9IFNwbGl0KGNvbnRlbnQsICJcbiIs
IHRydWUpOwotCi0gIHdoaWxlICghbGluZXMuZW1wdHkoKSAmJiBsaW5lcy5iYWNrKCkuZW1wdHko
KSkgewotICAgIGxpbmVzLnBvcF9iYWNrKCk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
aW5lcy5zaXplKCk7IGkrKykgewotICAgIGxpbmVzW2ldICs9ICJcbiI7Ci0gIH0KLQotICB2ZWN0
b3I8c3RyaW5nPiBpbnNlcnRpb25fbGlzdDsKLSAgaWYgKCFpbnNlcnRpb25zLmVtcHR5KCkpIHsK
LSAgICBTcGxpdFN0cmluZ1VzaW5nKGluc2VydGlvbnMsICIsIiwgJmluc2VydGlvbl9saXN0KTsK
LSAgfQotCi0gIEVYUEVDVF9FUShsaW5lcy5zaXplKCksIDMgKyBpbnNlcnRpb25fbGlzdC5zaXpl
KCkgKiAyKTsKLSAgRVhQRUNUX0VRKEdldE91dHB1dEZpbGVDb250ZW50KG5hbWUsIHBhcmFtZXRl
ciwgZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X3BhcnNlZF9m
aWxlX25hbWUsIGZpcnN0X21lc3NhZ2VfbmFtZSksCi0gICAgICAgICAgICBsaW5lc1swXSk7Ci0K
LSAgRVhQRUNUX0VRKGtGaXJzdEluc2VydGlvblBvaW50LCBsaW5lc1sxICsgaW5zZXJ0aW9uX2xp
c3Quc2l6ZSgpXSk7Ci0gIEVYUEVDVF9FUShrU2Vjb25kSW5zZXJ0aW9uUG9pbnQsIGxpbmVzWzIg
KyBpbnNlcnRpb25fbGlzdC5zaXplKCkgKiAyXSk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBp
bnNlcnRpb25fbGlzdC5zaXplKCk7IGkrKykgewotICAgIEVYUEVDVF9FUShHZXRPdXRwdXRGaWxl
Q29udGVudChpbnNlcnRpb25fbGlzdFtpXSwgImZpcnN0X2luc2VydCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbGUsIGZpbGUsIGZpcnN0X21lc3NhZ2VfbmFtZSksCi0g
ICAgICAgICAgICAgIGxpbmVzWzEgKyBpXSk7Ci0gICAgLy8gU2Vjb25kIGluc2VydGlvbiBwb2lu
dCBpcyBpbmRlbnRlZCwgc28gdGhlIGluc2VydGVkIHRleHQgc2hvdWxkCi0gICAgLy8gYXV0b21h
dGljYWxseSBiZSBpbmRlbnRlZCB0b28uCi0gICAgRVhQRUNUX0VRKCIgICIgKyBHZXRPdXRwdXRG
aWxlQ29udGVudChpbnNlcnRpb25fbGlzdFtpXSwgInNlY29uZF9pbnNlcnQiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSwgZmlsZSwgZmlyc3RfbWVzc2Fn
ZV9uYW1lKSwKLSAgICAgICAgICAgICAgbGluZXNbMiArIGluc2VydGlvbl9saXN0LnNpemUoKSAr
IGldKTsKLSAgfQotfQotCi1ib29sIE1vY2tDb2RlR2VuZXJhdG9yOjpHZW5lcmF0ZSgKLSAgICBj
b25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwK
LSAgICBHZW5lcmF0b3JDb250ZXh0KiBjb250ZXh0LAotICAgIHN0cmluZyogZXJyb3IpIGNvbnN0
IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5tZXNzYWdlX3R5cGVfY291bnQoKTsgaSsr
KSB7Ci0gICAgaWYgKEhhc1ByZWZpeFN0cmluZyhmaWxlLT5tZXNzYWdlX3R5cGUoaSktPm5hbWUo
KSwgIk1vY2tDb2RlR2VuZXJhdG9yXyIpKSB7Ci0gICAgICBzdHJpbmcgY29tbWFuZCA9IFN0cmlw
UHJlZml4U3RyaW5nKGZpbGUtPm1lc3NhZ2VfdHlwZShpKS0+bmFtZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW9ja0NvZGVHZW5lcmF0b3JfIik7Ci0gICAg
ICBpZiAoY29tbWFuZCA9PSAiRXJyb3IiKSB7Ci0gICAgICAgICplcnJvciA9ICJTYXcgbWVzc2Fn
ZSB0eXBlIE1vY2tDb2RlR2VuZXJhdG9yX0Vycm9yLiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSAiRXhpdCIpIHsKLSAgICAgICAgc3RkOjpjZXJy
IDw8ICJTYXcgbWVzc2FnZSB0eXBlIE1vY2tDb2RlR2VuZXJhdG9yX0V4aXQuIiA8PCBzdGQ6OmVu
ZGw7Ci0gICAgICAgIGV4aXQoMTIzKTsKLSAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSAiQWJv
cnQiKSB7Ci0gICAgICAgIHN0ZDo6Y2VyciA8PCAiU2F3IG1lc3NhZ2UgdHlwZSBNb2NrQ29kZUdl
bmVyYXRvcl9BYm9ydC4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgYWJvcnQoKTsKLSAgICAgIH0g
ZWxzZSBpZiAoY29tbWFuZCA9PSAiSGFzU291cmNlQ29kZUluZm8iKSB7Ci0gICAgICAgIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gZmlsZV9kZXNjcmlwdG9yX3Byb3RvOwotICAgICAgICBmaWxlLT5Db3B5
U291cmNlQ29kZUluZm9UbygmZmlsZV9kZXNjcmlwdG9yX3Byb3RvKTsKLSAgICAgICAgYm9vbCBo
YXNfc291cmNlX2NvZGVfaW5mbyA9Ci0gICAgICAgICAgICBmaWxlX2Rlc2NyaXB0b3JfcHJvdG8u
aGFzX3NvdXJjZV9jb2RlX2luZm8oKSAmJgotICAgICAgICAgICAgZmlsZV9kZXNjcmlwdG9yX3By
b3RvLnNvdXJjZV9jb2RlX2luZm8oKS5sb2NhdGlvbl9zaXplKCkgPiAwOwotICAgICAgICBzdGQ6
OmNlcnIgPDwgIlNhdyBtZXNzYWdlIHR5cGUgTW9ja0NvZGVHZW5lcmF0b3JfSGFzU291cmNlQ29k
ZUluZm86ICIKLSAgICAgICAgICAgICAgICAgIDw8IGhhc19zb3VyY2VfY29kZV9pbmZvIDw8ICIu
IiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIGFib3J0KCk7Ci0gICAgICB9IGVsc2UgaWYgKGNvbW1h
bmQgPT0gIkhhc0pzb25OYW1lIikgewotICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90byBmaWVs
ZF9kZXNjcmlwdG9yX3Byb3RvOwotICAgICAgICBmaWxlLT5tZXNzYWdlX3R5cGUoaSktPmZpZWxk
KDApLT5Db3B5VG8oJmZpZWxkX2Rlc2NyaXB0b3JfcHJvdG8pOwotICAgICAgICBzdGQ6OmNlcnIg
PDwgIlNhdyBqc29uX25hbWU6ICIKLSAgICAgICAgICAgICAgICAgIDw8IGZpZWxkX2Rlc2NyaXB0
b3JfcHJvdG8uaGFzX2pzb25fbmFtZSgpIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgYWJvcnQoKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJVbmtub3duIE1v
Y2tDb2RlR2VuZXJhdG9yIGNvbW1hbmQ6ICIgPDwgY29tbWFuZDsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICBpZiAoSGFzUHJlZml4U3RyaW5nKHBhcmFtZXRlciwgImluc2VydD0iKSkgewotICAg
IHZlY3RvcjxzdHJpbmc+IGluc2VydF9pbnRvOwotICAgIFNwbGl0U3RyaW5nVXNpbmcoU3RyaXBQ
cmVmaXhTdHJpbmcocGFyYW1ldGVyLCAiaW5zZXJ0PSIpLAotICAgICAgICAgICAgICAgICAgICAg
IiwiLCAmaW5zZXJ0X2ludG8pOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnNlcnRfaW50
by5zaXplKCk7IGkrKykgewotICAgICAgewotICAgICAgICBnb29nbGU6OnByb3RvYnVmOjpzY29w
ZWRfcHRyPGlvOjpaZXJvQ29weU91dHB1dFN0cmVhbT4gb3V0cHV0KGNvbnRleHQtPk9wZW5Gb3JJ
bnNlcnQoCi0gICAgICAgICAgICBHZXRPdXRwdXRGaWxlTmFtZShpbnNlcnRfaW50b1tpXSwgZmls
ZSksIGtGaXJzdEluc2VydGlvblBvaW50TmFtZSkpOwotICAgICAgICBpbzo6UHJpbnRlciBwcmlu
dGVyKG91dHB1dC5nZXQoKSwgJyQnKTsKLSAgICAgICAgcHJpbnRlci5QcmludFJhdyhHZXRPdXRw
dXRGaWxlQ29udGVudChuYW1lXywgImZpcnN0X2luc2VydCIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSwgY29udGV4dCkpOwotICAgICAgICBpZiAo
cHJpbnRlci5mYWlsZWQoKSkgewotICAgICAgICAgICplcnJvciA9ICJNb2NrQ29kZUdlbmVyYXRv
ciBkZXRlY3RlZCB3cml0ZSBlcnJvci4iOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgfQotCi0gICAgICB7Ci0gICAgICAgIGdvb2dsZTo6cHJvdG9idWY6OnNjb3Bl
ZF9wdHI8aW86Olplcm9Db3B5T3V0cHV0U3RyZWFtPiBvdXRwdXQoCi0gICAgICAgICAgICBjb250
ZXh0LT5PcGVuRm9ySW5zZXJ0KEdldE91dHB1dEZpbGVOYW1lKGluc2VydF9pbnRvW2ldLCBmaWxl
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NlY29uZEluc2VydGlvblBv
aW50TmFtZSkpOwotICAgICAgICBpbzo6UHJpbnRlciBwcmludGVyKG91dHB1dC5nZXQoKSwgJyQn
KTsKLSAgICAgICAgcHJpbnRlci5QcmludFJhdyhHZXRPdXRwdXRGaWxlQ29udGVudChuYW1lXywg
InNlY29uZF9pbnNlcnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbGUsIGNvbnRleHQpKTsKLSAgICAgICAgaWYgKHByaW50ZXIuZmFpbGVkKCkpIHsK
LSAgICAgICAgICAqZXJyb3IgPSAiTW9ja0NvZGVHZW5lcmF0b3IgZGV0ZWN0ZWQgd3JpdGUgZXJy
b3IuIjsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
Ci0gIH0gZWxzZSB7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxpbzo6WmVyb0Nv
cHlPdXRwdXRTdHJlYW0+IG91dHB1dCgKLSAgICAgICAgY29udGV4dC0+T3BlbihHZXRPdXRwdXRG
aWxlTmFtZShuYW1lXywgZmlsZSkpKTsKLQotICAgIGlvOjpQcmludGVyIHByaW50ZXIob3V0cHV0
LmdldCgpLCAnJCcpOwotICAgIHByaW50ZXIuUHJpbnRSYXcoR2V0T3V0cHV0RmlsZUNvbnRlbnQo
bmFtZV8sIHBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbGUsIGNvbnRleHQpKTsKLSAgICBwcmludGVyLlByaW50UmF3KGtGaXJzdEluc2VydGlv
blBvaW50KTsKLSAgICBwcmludGVyLlByaW50UmF3KGtTZWNvbmRJbnNlcnRpb25Qb2ludCk7Ci0K
LSAgICBpZiAocHJpbnRlci5mYWlsZWQoKSkgewotICAgICAgKmVycm9yID0gIk1vY2tDb2RlR2Vu
ZXJhdG9yIGRldGVjdGVkIHdyaXRlIGVycm9yLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0cmluZyBNb2NrQ29kZUdlbmVyYXRvcjo6
R2V0T3V0cHV0RmlsZU5hbWUoY29uc3Qgc3RyaW5nJiBnZW5lcmF0b3JfbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3Iq
IGZpbGUpIHsKLSAgcmV0dXJuIEdldE91dHB1dEZpbGVOYW1lKGdlbmVyYXRvcl9uYW1lLCBmaWxl
LT5uYW1lKCkpOwotfQotCi1zdHJpbmcgTW9ja0NvZGVHZW5lcmF0b3I6OkdldE91dHB1dEZpbGVO
YW1lKGNvbnN0IHN0cmluZyYgZ2VuZXJhdG9yX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZmlsZSkgewotICByZXR1cm4gZmls
ZSArICIuTW9ja0NvZGVHZW5lcmF0b3IuIiArIGdlbmVyYXRvcl9uYW1lOwotfQotCi1zdHJpbmcg
TW9ja0NvZGVHZW5lcmF0b3I6OkdldE91dHB1dEZpbGVDb250ZW50KAotICAgIGNvbnN0IHN0cmlu
ZyYgZ2VuZXJhdG9yX25hbWUsCi0gICAgY29uc3Qgc3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgY29u
c3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgR2VuZXJhdG9yQ29udGV4dCAqY29udGV4dCkg
ewotICB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiBhbGxfZmlsZXM7Ci0gIGNvbnRleHQt
Pkxpc3RQYXJzZWRGaWxlcygmYWxsX2ZpbGVzKTsKLSAgcmV0dXJuIEdldE91dHB1dEZpbGVDb250
ZW50KAotICAgICAgZ2VuZXJhdG9yX25hbWUsIHBhcmFtZXRlciwgZmlsZS0+bmFtZSgpLAotICAg
ICAgQ29tbWFTZXBhcmF0ZWRMaXN0KGFsbF9maWxlcyksCi0gICAgICBmaWxlLT5tZXNzYWdlX3R5
cGVfY291bnQoKSA+IDAgPwotICAgICAgICAgIGZpbGUtPm1lc3NhZ2VfdHlwZSgwKS0+bmFtZSgp
IDogIihub25lKSIpOwotfQotCi1zdHJpbmcgTW9ja0NvZGVHZW5lcmF0b3I6OkdldE91dHB1dEZp
bGVDb250ZW50KAotICAgIGNvbnN0IHN0cmluZyYgZ2VuZXJhdG9yX25hbWUsCi0gICAgY29uc3Qg
c3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgY29uc3Qgc3RyaW5nJiBmaWxlLAotICAgIGNvbnN0IHN0
cmluZyYgcGFyc2VkX2ZpbGVfbGlzdCwKLSAgICBjb25zdCBzdHJpbmcmIGZpcnN0X21lc3NhZ2Vf
bmFtZSkgewotICByZXR1cm4gc3RyaW5nczo6U3Vic3RpdHV0ZSgiJDA6ICQxLCAkMiwgJDMsICQ0
XG4iLAotICAgICAgZ2VuZXJhdG9yX25hbWUsIHBhcmFtZXRlciwgZmlsZSwKLSAgICAgIGZpcnN0
X21lc3NhZ2VfbmFtZSwgcGFyc2VkX2ZpbGVfbGlzdCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBj
b21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvbW9ja19jb2RlX2dlbmVy
YXRvci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL21vY2tfY29kZV9nZW5lcmF0b3Iu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE2NjVmODhjZWYxOWMxMzJlYjcyMWZj
YTU0NTgwOTQ5MWYzZWZmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvbW9ja19jb2RlX2dlbmVyYXRvci5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEp
Ci0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX01PQ0tfQ09ERV9HRU5FUkFUT1Jf
SF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9NT0NLX0NPREVfR0VORVJBVE9S
X0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLWNsYXNzIEZpbGVEZXNjcmlwdG9yOwotfSAgLy8gbmFtZXNwYWNlIHByb3Rv
YnVmCi0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotCi0vLyBB
IG1vY2sgQ29kZUdlbmVyYXRvciwgdXNlZCBieSBjb21tYW5kX2xpbmVfaW50ZXJmYWNlX3VuaXR0
ZXN0LiAgVGhpcyBpcyBpbgotLy8gaXRzIG93biBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQg
Ym90aCBkaXJlY3RseSBhbmQgYXMgYSBwbHVnaW4uCi0vLwotLy8gR2VuZXJhdGUoKSBwcm9kdWNl
cyBzb21lIG91dHB1dCB3aGljaCBjYW4gYmUgY2hlY2tlZCBieSBFeHBlY3RDYWxsZWQoKS4gIFRo
ZQotLy8gZ2VuZXJhdG9yIGNhbiBydW4gaW4gYSBkaWZmZXJlbnQgcHJvY2VzcyAoZS5nLiBhIHBs
dWdpbikuCi0vLwotLy8gSWYgdGhlIHBhcmFtZXRlciBpcyAiaW5zZXJ0PU5BTUVTIiwgdGhlIE1v
Y2tDb2RlR2VuZXJhdG9yIHdpbGwgaW5zZXJ0IGxpbmVzCi0vLyBpbnRvIHRoZSBmaWxlcyBnZW5l
cmF0ZWQgYnkgb3RoZXIgTW9ja0NvZGVHZW5lcmF0b3JzIGluc3RlYWQgb2YgY3JlYXRpbmcKLS8v
IGl0cyBvd24gZmlsZS4gIE5BTUVTIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIG5h
bWVzIG9mIHRob3NlIG90aGVyCi0vLyBNb2NrQ29kZUdlbmVyYXRvcnMuCi0vLwotLy8gTW9ja0Nv
ZGVHZW5lcmF0b3Igd2lsbCBhbHNvIG1vZGlmeSBpdHMgYmVoYXZpb3Igc2xpZ2h0bHkgaWYgdGhl
IGlucHV0IGZpbGUKLS8vIGNvbnRhaW5zIGEgbWVzc2FnZSB0eXBlIHdpdGggb25lIG9mIHRoZSBm
b2xsb3dpbmcgbmFtZXM6Ci0vLyAgIE1vY2tDb2RlR2VuZXJhdG9yX0Vycm9yOiAgQ2F1c2VzIEdl
bmVyYXRlKCkgdG8gcmV0dXJuIGZhbHNlIGFuZCBzZXQgdGhlCi0vLyAgICAgZXJyb3IgbWVzc2Fn
ZSB0byAiU2F3IG1lc3NhZ2UgdHlwZSBNb2NrQ29kZUdlbmVyYXRvcl9FcnJvci4iCi0vLyAgIE1v
Y2tDb2RlR2VuZXJhdG9yX0V4aXQ6ICBHZW5lcmF0ZSgpIHByaW50cyAiU2F3IG1lc3NhZ2UgdHlw
ZQotLy8gICAgIE1vY2tDb2RlR2VuZXJhdG9yX0V4aXQuIiB0byBzdGRlcnIgYW5kIHRoZW4gY2Fs
bHMgZXhpdCgxMjMpLgotLy8gICBNb2NrQ29kZUdlbmVyYXRvcl9BYm9ydDogIEdlbmVyYXRlKCkg
cHJpbnRzICJTYXcgbWVzc2FnZSB0eXBlCi0vLyAgICAgTW9ja0NvZGVHZW5lcmF0b3JfQWJvcnQu
IiB0byBzdGRlcnIgYW5kIHRoZW4gY2FsbHMgYWJvcnQoKS4KLS8vICAgTW9ja0NvZGVHZW5lcmF0
b3JfSGFzU291cmNlQ29kZUluZm86ICBDYXVzZXMgR2VuZXJhdGUoKSB0byBhYm9ydCBhZnRlcgot
Ly8gICAgIHByaW50aW5nICJTYXcgbWVzc2FnZSB0eXBlIE1vY2tDb2RlR2VuZXJhdG9yX0hhc1Nv
dXJjZUNvZGVJbmZvOiBGT08uIiB0bwotLy8gICAgIHN0ZGVyciwgd2hlcmUgRk9PIGlzICIxIiBp
ZiB0aGUgc3VwcGxpZWQgRmlsZURlc2NyaXB0b3JQcm90byBoYXMgc291cmNlCi0vLyAgICAgY29k
ZSBpbmZvLCBhbmQgIjAiIG90aGVyd2lzZS4KLWNsYXNzIE1vY2tDb2RlR2VuZXJhdG9yIDogcHVi
bGljIENvZGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgTW9ja0NvZGVHZW5lcmF0b3IoY29uc3Qg
c3RyaW5nJiBuYW1lKTsKLSAgdmlydHVhbCB+TW9ja0NvZGVHZW5lcmF0b3IoKTsKLQotICAvLyBF
eHBlY3QgKHZpYSBnVGVzdCkgdGhhdCBhIE1vY2tDb2RlR2VuZXJhdG9yIHdpdGggdGhlIGdpdmVu
IG5hbWUgd2FzIGNhbGxlZAotICAvLyB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGJ5IGluc3Bl
Y3RpbmcgdGhlIG91dHB1dCBsb2NhdGlvbi4KLSAgLy8KLSAgLy8gfGluc2VydGlvbnN8IGlzIGEg
Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbmFtZXMgb2YgTW9ja0NvZGVHZW5lcmF0b3JzIHdoaWNo
Ci0gIC8vIHNob3VsZCBoYXZlIGluc2VydGVkIGxpbmVzIGludG8gdGhpcyBmaWxlLgotICAvLyB8
cGFyc2VkX2ZpbGVfbGlzdHwgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBuYW1lcyBvZiB0
aGUgZmlsZXMKLSAgLy8gdGhhdCBhcmUgYmVpbmcgY29tcGlsZWQgdG9nZXRoZXIgaW4gdGhpcyBy
dW4uCi0gIHN0YXRpYyB2b2lkIEV4cGVjdEdlbmVyYXRlZChjb25zdCBzdHJpbmcmIG5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgaW5zZXJ0aW9ucywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZmlsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZmlyc3RfbWVzc2FnZV9uYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBwYXJzZWRfZmlsZV9s
aXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBvdXRwdXRf
ZGlyZWN0b3J5KTsKLQotICAvLyBHZXQgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2hpY2ggd291bGQg
YmUgd3JpdHRlbiBieSB0aGUgZ2l2ZW4gZ2VuZXJhdG9yLgotICBzdGF0aWMgc3RyaW5nIEdldE91
dHB1dEZpbGVOYW1lKGNvbnN0IHN0cmluZyYgZ2VuZXJhdG9yX25hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUpOwotICBzdGF0
aWMgc3RyaW5nIEdldE91dHB1dEZpbGVOYW1lKGNvbnN0IHN0cmluZyYgZ2VuZXJhdG9yX25hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBmaWxlKTsK
LQotICAvLyBpbXBsZW1lbnRzIENvZGVHZW5lcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gIHZpcnR1YWwgYm9vbCBHZW5lcmF0ZShjb25zdCBGaWxlRGVz
Y3JpcHRvciogZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcGFy
YW1ldGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yQ29udGV4dCogY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogZXJyb3IpIGNvbnN0OwotCi0gcHJp
dmF0ZToKLSAgc3RyaW5nIG5hbWVfOwotCi0gIHN0YXRpYyBzdHJpbmcgR2V0T3V0cHV0RmlsZUNv
bnRlbnQoY29uc3Qgc3RyaW5nJiBnZW5lcmF0b3JfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JDb250ZXh0ICpjb250ZXh0
KTsKLSAgc3RhdGljIHN0cmluZyBHZXRPdXRwdXRGaWxlQ29udGVudChjb25zdCBzdHJpbmcmIGdl
bmVyYXRvcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0cmluZyYgcGFyYW1ldGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0cmluZyYgZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdHJpbmcmIHBhcnNlZF9maWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBmaXJzdF9tZXNzYWdlX25hbWUpOwotfTsKLQot
fSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAg
Ly8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJf
TU9DS19DT0RFX0dFTkVSQVRPUl9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bS5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTc2ZjhlOTkxNTRiNmMwMTVkZDI2NTgwNTg3NGY0YjE3YmEzZjgzYS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW0uY2MKKysrIC9kZXYv
bnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19lbnVtLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJz
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIG9iamVj
dGl2ZWMgewotCi1FbnVtR2VuZXJhdG9yOjpFbnVtR2VuZXJhdG9yKGNvbnN0IEVudW1EZXNjcmlw
dG9yKiBkZXNjcmlwdG9yKQotICAgIDogZGVzY3JpcHRvcl8oZGVzY3JpcHRvciksCi0gICAgICBu
YW1lXyhFbnVtTmFtZShkZXNjcmlwdG9yXykpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNj
cmlwdG9yXy0+dmFsdWVfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3Jp
cHRvciogdmFsdWUgPSBkZXNjcmlwdG9yXy0+dmFsdWUoaSk7Ci0gICAgY29uc3QgRW51bVZhbHVl
RGVzY3JpcHRvciogY2Fub25pY2FsX3ZhbHVlID0KLSAgICAgICAgZGVzY3JpcHRvcl8tPkZpbmRW
YWx1ZUJ5TnVtYmVyKHZhbHVlLT5udW1iZXIoKSk7Ci0KLSAgICBpZiAodmFsdWUgPT0gY2Fub25p
Y2FsX3ZhbHVlKSB7Ci0gICAgICBiYXNlX3ZhbHVlc18ucHVzaF9iYWNrKHZhbHVlKTsKLSAgICB9
Ci0gICAgYWxsX3ZhbHVlc18ucHVzaF9iYWNrKHZhbHVlKTsKLSAgfQotfQotCi1FbnVtR2VuZXJh
dG9yOjp+RW51bUdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgRW51bUdlbmVyYXRvcjo6R2VuZXJhdGVI
ZWFkZXIoaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgc3RyaW5nIGVudW1fY29tbWVudHM7Ci0g
IFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOwotICBpZiAoZGVzY3JpcHRvcl8tPkdldFNvdXJjZUxv
Y2F0aW9uKCZsb2NhdGlvbikpIHsKLSAgICBlbnVtX2NvbW1lbnRzID0gQnVpbGRDb21tZW50c1N0
cmluZyhsb2NhdGlvbik7Ci0gIH0gZWxzZSB7Ci0gICAgZW51bV9jb21tZW50cyA9ICIiOwotICB9
Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiI3ByYWdtYSBtYXJrIC0gRW51bSAkbmFtZSRc
biIKLSAgICAgICJcbiIsCi0gICAgICAibmFtZSIsIG5hbWVfKTsKLQotICBwcmludGVyLT5Qcmlu
dCgiJGNvbW1lbnRzJHR5cGVkZWYkZGVwcmVjYXRlZF9hdHRyaWJ1dGUkIEdQQl9FTlVNKCRuYW1l
JCkge1xuIiwKLSAgICAgICAgICAgICAgICAgImNvbW1lbnRzIiwgZW51bV9jb21tZW50cywKLSAg
ICAgICAgICAgICAgICAgImRlcHJlY2F0ZWRfYXR0cmlidXRlIiwgR2V0T3B0aW9uYWxEZXByZWNh
dGVkQXR0cmlidXRlKGRlc2NyaXB0b3JfKSwKLSAgICAgICAgICAgICAgICAgIm5hbWUiLCBuYW1l
Xyk7Ci0gIHByaW50ZXItPkluZGVudCgpOwotCi0gIGlmIChIYXNQcmVzZXJ2aW5nVW5rbm93bkVu
dW1TZW1hbnRpY3MoZGVzY3JpcHRvcl8tPmZpbGUoKSkpIHsKLSAgICAvLyBJbmNsdWRlIHRoZSB1
bmtub3duIHZhbHVlLgotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIi8vLyBWYWx1ZSB1c2Vk
IGlmIGFueSBtZXNzYWdlJ3MgZmllbGQgZW5jb3VudGVycyBhIHZhbHVlIHRoYXQgaXMgbm90IGRl
ZmluZWRcbiIKLSAgICAgICIvLy8gYnkgdGhpcyBlbnVtLiBUaGUgbWVzc2FnZSB3aWxsIGFsc28g
aGF2ZSBDIGZ1bmN0aW9ucyB0byBnZXQvc2V0IHRoZSByYXdWYWx1ZVxuIgotICAgICAgIi8vLyBv
ZiB0aGUgZmllbGQuXG4iCi0gICAgICAiJG5hbWUkX0dQQlVucmVjb2duaXplZEVudW1lcmF0b3JW
YWx1ZSA9IGtHUEJVbnJlY29nbml6ZWRFbnVtZXJhdG9yVmFsdWUsXG4iLAotICAgICAgIm5hbWUi
LCBuYW1lXyk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxfdmFsdWVzXy5zaXplKCk7
IGkrKykgewotICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOwotICAgIGlmIChhbGxfdmFsdWVz
X1tpXS0+R2V0U291cmNlTG9jYXRpb24oJmxvY2F0aW9uKSkgewotICAgICAgc3RyaW5nIGNvbW1l
bnRzID0gQnVpbGRDb21tZW50c1N0cmluZyhsb2NhdGlvbikuY19zdHIoKTsKLSAgICAgIGlmIChj
b21tZW50cy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgaWYgKGkgPiAwKSB7Ci0gICAgICAgICAg
cHJpbnRlci0+UHJpbnQoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRlci0+UHJpbnQo
Y29tbWVudHMuY19zdHIoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAgICIkbmFtZSQkZGVwcmVjYXRlZF9hdHRyaWJ1dGUkID0gJHZhbHVlJCxcbiIsCi0g
ICAgICAgICJuYW1lIiwgRW51bVZhbHVlTmFtZShhbGxfdmFsdWVzX1tpXSksCi0gICAgICAgICJk
ZXByZWNhdGVkX2F0dHJpYnV0ZSIsIEdldE9wdGlvbmFsRGVwcmVjYXRlZEF0dHJpYnV0ZShhbGxf
dmFsdWVzX1tpXSksCi0gICAgICAgICJ2YWx1ZSIsIFNpbXBsZUl0b2EoYWxsX3ZhbHVlc19baV0t
Pm51bWJlcigpKSk7Ci0gIH0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJ9O1xuIgotICAgICAgIlxuIgotICAgICAgIkdQQkVudW1EZXNjcmlwdG9yICok
bmFtZSRfRW51bURlc2NyaXB0b3Iodm9pZCk7XG4iCi0gICAgICAiXG4iCi0gICAgICAiLy8vIENo
ZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGRlZmluZWQgYnkgdGhlIGVudW0gb3Ig
d2FzIG5vdCBrbm93biBhdFxuIgotICAgICAgIi8vLyB0aGUgdGltZSB0aGlzIHNvdXJjZSB3YXMg
Z2VuZXJhdGVkLlxuIgotICAgICAgIkJPT0wgJG5hbWUkX0lzVmFsaWRWYWx1ZShpbnQzMl90IHZh
bHVlKTtcbiIKLSAgICAgICJcbiIsCi0gICAgICAibmFtZSIsIG5hbWVfKTsKLX0KLQotdm9pZCBF
bnVtR2VuZXJhdG9yOjpHZW5lcmF0ZVNvdXJjZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBw
cmludGVyLT5QcmludCgKLSAgICAgICIjcHJhZ21hIG1hcmsgLSBFbnVtICRuYW1lJFxuIgotICAg
ICAgIlxuIiwKLSAgICAgICJuYW1lIiwgbmFtZV8pOwotCi0gIC8vIE5vdGU6IEZvciB0aGUgVGV4
dEZvcm1hdCBkZWNvZGUgaW5mbywgd2UgY2FuJ3QgdXNlIHRoZSBlbnVtIHZhbHVlIGFzCi0gIC8v
IHRoZSBrZXkgYmVjYXVzZSBwcm90b2NvbCBidWZmZXIgZW51bXMgaGF2ZSAnYWxsb3dfYWxpYXMn
LCB3aGljaCBsZXRzCi0gIC8vIGEgdmFsdWUgYmUgdXNlZCBtb3JlIHRoYW4gb25jZS4gSW5zdGVh
ZCwgdGhlIGluZGV4IGludG8gdGhlIGxpc3Qgb2YKLSAgLy8gZW51bSB2YWx1ZSBkZXNjcmlwdGlv
bnMgaXMgdXNlZC4gTm90ZTogc3RhcnQgd2l0aCAtMSBzbyB0aGUgZmlyc3Qgb25lCi0gIC8vIHdp
bGwgYmUgemVyby4KLSAgVGV4dEZvcm1hdERlY29kZURhdGEgdGV4dF9mb3JtYXRfZGVjb2RlX2Rh
dGE7Ci0gIGludCBlbnVtX3ZhbHVlX2Rlc2NyaXB0aW9uX2tleSA9IC0xOwotICBzdHJpbmcgdGV4
dF9ibG9iOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsX3ZhbHVlc18uc2l6ZSgpOyBpKysp
IHsKLSAgICArK2VudW1fdmFsdWVfZGVzY3JpcHRpb25fa2V5OwotICAgIHN0cmluZyBzaG9ydF9u
YW1lKEVudW1WYWx1ZVNob3J0TmFtZShhbGxfdmFsdWVzX1tpXSkpOwotICAgIHRleHRfYmxvYiAr
PSBzaG9ydF9uYW1lICsgJ1wwJzsKLSAgICBpZiAoVW5DYW1lbENhc2VFbnVtU2hvcnROYW1lKHNo
b3J0X25hbWUpICE9IGFsbF92YWx1ZXNfW2ldLT5uYW1lKCkpIHsKLSAgICAgIHRleHRfZm9ybWF0
X2RlY29kZV9kYXRhLkFkZFN0cmluZyhlbnVtX3ZhbHVlX2Rlc2NyaXB0aW9uX2tleSwgc2hvcnRf
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfdmFsdWVz
X1tpXS0+bmFtZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAgICJH
UEJFbnVtRGVzY3JpcHRvciAqJG5hbWUkX0VudW1EZXNjcmlwdG9yKHZvaWQpIHtcbiIKLSAgICAg
ICIgIHN0YXRpYyBHUEJFbnVtRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IE5VTEw7XG4iCi0gICAg
ICAiICBpZiAoIWRlc2NyaXB0b3IpIHtcbiIsCi0gICAgICAibmFtZSIsIG5hbWVfKTsKLQotICBz
dGF0aWMgY29uc3QgaW50IGtCeXRlc1BlckxpbmUgPSA0MDsgIC8vIGFsbG93IGZvciBlc2NhcGlu
ZwotICBwcmludGVyLT5QcmludCgKLSAgICAgICIgICAgc3RhdGljIGNvbnN0IGNoYXIgKnZhbHVl
TmFtZXMgPSIpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRleHRfYmxvYi5zaXplKCk7IGkgKz0g
a0J5dGVzUGVyTGluZSkgewotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiXG4gICAgICAg
IFwiJGRhdGEkXCIiLAotICAgICAgICAiZGF0YSIsIEVzY2FwZVRyaWdyYXBocyhDRXNjYXBlKHRl
eHRfYmxvYi5zdWJzdHIoaSwga0J5dGVzUGVyTGluZSkpKSk7Ci0gIH0KLSAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAiO1xuIgotICAgICAgIiAgICBzdGF0aWMgY29uc3QgaW50MzJfdCB2YWx1ZXNb
XSA9IHtcbiIpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGFsbF92YWx1ZXNfLnNpemUoKTsgaSsr
KSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoIiAgICAgICAgJG5hbWUkLFxuIiwgICJuYW1lIiwgRW51
bVZhbHVlTmFtZShhbGxfdmFsdWVzX1tpXSkpOwotICB9Ci0gIHByaW50ZXItPlByaW50KCIgICAg
fTtcbiIpOwotCi0gIGlmICh0ZXh0X2Zvcm1hdF9kZWNvZGVfZGF0YS5udW1fZW50cmllcygpID09
IDApIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiAgICBHUEJFbnVtRGVzY3JpcHRv
ciAqd29ya2VyID1cbiIKLSAgICAgICAgIiAgICAgICAgW0dQQkVudW1EZXNjcmlwdG9yIGFsbG9j
RGVzY3JpcHRvckZvck5hbWU6R1BCTlNTdHJpbmdpZnlTeW1ib2woJG5hbWUkKVxuIgotICAgICAg
ICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVOYW1lczp2YWx1
ZU5hbWVzXG4iCi0gICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVzOnZhbHVlc1xuIgotICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudDoodWludDMyX3QpKHNpemVvZih2YWx1ZXMpIC8gc2l6
ZW9mKGludDMyX3QpKVxuIgotICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1WZXJpZmllcjokbmFtZSRfSXNWYWxpZFZhbHVlXTtcbiIsCi0gICAgICAgICJu
YW1lIiwgbmFtZV8pOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAg
ICAgIiAgICBzdGF0aWMgY29uc3QgY2hhciAqZXh0cmFUZXh0Rm9ybWF0SW5mbyA9IFwiJGV4dHJh
VGV4dEZvcm1hdEluZm8kXCI7XG4iCi0gICAgICAgICIgICAgR1BCRW51bURlc2NyaXB0b3IgKndv
cmtlciA9XG4iCi0gICAgICAgICIgICAgICAgIFtHUEJFbnVtRGVzY3JpcHRvciBhbGxvY0Rlc2Ny
aXB0b3JGb3JOYW1lOkdQQk5TU3RyaW5naWZ5U3ltYm9sKCRuYW1lJClcbiIKLSAgICAgICAgIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTmFtZXM6dmFsdWVOYW1l
c1xuIgotICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlczp2YWx1ZXNcbiIKLSAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY291bnQ6KHVpbnQzMl90KShzaXplb2YodmFsdWVzKSAvIHNpemVvZihp
bnQzMl90KSlcbiIKLSAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnVtVmVyaWZpZXI6JG5hbWUkX0lzVmFsaWRWYWx1ZVxuIgotICAgICAgICAiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0cmFUZXh0Rm9ybWF0SW5mbzpleHRyYVRleHRGb3JtYXRJ
bmZvXTtcbiIsCi0gICAgICAgICJuYW1lIiwgbmFtZV8sCi0gICAgICAgICJleHRyYVRleHRGb3Jt
YXRJbmZvIiwgQ0VzY2FwZSh0ZXh0X2Zvcm1hdF9kZWNvZGVfZGF0YS5EYXRhKCkpKTsKLSAgICB9
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiICAgIGlmICghT1NBdG9taWNDb21wYXJlQW5k
U3dhcFB0ckJhcnJpZXIobmlsLCB3b3JrZXIsICh2b2lkICogdm9sYXRpbGUgKikmZGVzY3JpcHRv
cikpIHtcbiIKLSAgICAgICIgICAgICBbd29ya2VyIHJlbGVhc2VdO1xuIgotICAgICAgIiAgICB9
XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAiICByZXR1cm4gZGVzY3JpcHRvcjtcbiIKLSAgICAg
ICJ9XG5cbiIpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICAgIkJPT0wgJG5hbWUkX0lzVmFs
aWRWYWx1ZShpbnQzMl90IHZhbHVlX18pIHtcbiIKLSAgICAgICIgIHN3aXRjaCAodmFsdWVfXykg
e1xuIiwKLSAgICAgICJuYW1lIiwgbmFtZV8pOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgYmFz
ZV92YWx1ZXNfLnNpemUoKTsgaSsrKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIg
ICAgY2FzZSAkbmFtZSQ6XG4iLAotICAgICAgICAibmFtZSIsIEVudW1WYWx1ZU5hbWUoYmFzZV92
YWx1ZXNfW2ldKSk7Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAgICIgICAgICByZXR1
cm4gWUVTO1xuIgotICAgICAgIiAgICBkZWZhdWx0OlxuIgotICAgICAgIiAgICAgIHJldHVybiBO
TztcbiIKLSAgICAgICIgIH1cbiIKLSAgICAgICJ9XG5cbiIpOwotfQotfSAgLy8gbmFtZXNwYWNl
IG9iamVjdGl2ZWMKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHBy
b3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW0uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwYjQxY2Y3MzUyZWZiYzVlMmM3NjUyOTIzMzZlYTY2N2MzNGU5
NGRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfRU5VTV9I
X18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfRU5VTV9IX18K
LQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbyB7Ci1jbGFzcyBQcmludGVy
OyAgLy8gcHJpbnRlci5oCi19Ci19Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ug
Y29tcGlsZXIgewotbmFtZXNwYWNlIG9iamVjdGl2ZWMgewotCi1jbGFzcyBFbnVtR2VuZXJhdG9y
IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEVudW1HZW5lcmF0b3IoY29uc3QgRW51bURlc2NyaXB0
b3IqIGRlc2NyaXB0b3IpOwotICB+RW51bUdlbmVyYXRvcigpOwotCi0gIHZvaWQgR2VuZXJhdGVI
ZWFkZXIoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlU291cmNlKGlvOjpQ
cmludGVyKiBwcmludGVyKTsKLQotICBjb25zdCBzdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biBuYW1lXzsgfQotCi0gcHJpdmF0ZToKLSAgY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0
b3JfOwotICB2ZWN0b3I8Y29uc3QgRW51bVZhbHVlRGVzY3JpcHRvcio+IGJhc2VfdmFsdWVzXzsK
LSAgdmVjdG9yPGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqPiBhbGxfdmFsdWVzXzsKLSAgY29u
c3Qgc3RyaW5nIG5hbWVfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhF
bnVtR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBvYmplY3RpdmVjCi19ICAvLyBu
YW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNw
YWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfT0JKRUNUSVZF
Q19FTlVNX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVj
dGl2ZWMvb2JqZWN0aXZlY19lbnVtX2ZpZWxkLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19lbnVtX2ZpZWxkLmNjCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiNjNiYzBkZTYzMjJiZDMwN2VlMWY3NTZhZGE0MmI5MTllNjA1Nzg0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bV9maWVsZC5jYworKysg
L2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW1fZmllbGQu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvc3RydXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIG9iamVjdGl2ZWMgewotCi1uYW1lc3Bh
Y2UgewotCi12b2lkIFNldEVudW1WYXJpYWJsZXMoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNj
cmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0cmluZz4qIHZhcmlh
YmxlcykgewotICBzdHJpbmcgdHlwZSA9IEVudW1OYW1lKGRlc2NyaXB0b3ItPmVudW1fdHlwZSgp
KTsKLSAgKCp2YXJpYWJsZXMpWyJzdG9yYWdlX3R5cGUiXSA9IHR5cGU7Ci0gIC8vIEZvciBub24g
cmVwZWF0ZWQgZmllbGRzLCBpZiBpdCB3YXMgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBmaWxlLCB0
aGUKLSAgLy8gcHJvcGVydHkgZGVjbHMgbmVlZCB0byB1c2UgImVudW0gTkFNRSIgcmF0aGVyIHRo
YW4ganVzdCAiTkFNRSIgdG8gc3VwcG9ydAotICAvLyB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbiBv
ZiB0aGUgZW51bXMuCi0gIGlmICghZGVzY3JpcHRvci0+aXNfcmVwZWF0ZWQoKSAmJgotICAgICAg
KGRlc2NyaXB0b3ItPmZpbGUoKSAhPSBkZXNjcmlwdG9yLT5lbnVtX3R5cGUoKS0+ZmlsZSgpKSkg
ewotICAgICgqdmFyaWFibGVzKVsicHJvcGVydHlfdHlwZSJdID0gImVudW0gIiArIHR5cGU7Ci0g
IH0KLSAgKCp2YXJpYWJsZXMpWyJlbnVtX3ZlcmlmaWVyIl0gPSB0eXBlICsgIl9Jc1ZhbGlkVmFs
dWUiOwotICAoKnZhcmlhYmxlcylbImVudW1fZGVzY19mdW5jIl0gPSB0eXBlICsgIl9FbnVtRGVz
Y3JpcHRvciI7Ci0KLSAgKCp2YXJpYWJsZXMpWyJkYXRhVHlwZVNwZWNpZmljX25hbWUiXSA9ICJl
bnVtRGVzY0Z1bmMiOwotICAoKnZhcmlhYmxlcylbImRhdGFUeXBlU3BlY2lmaWNfdmFsdWUiXSA9
ICgqdmFyaWFibGVzKVsiZW51bV9kZXNjX2Z1bmMiXTsKLQotICBjb25zdCBEZXNjcmlwdG9yKiBt
c2dfZGVzY3JpcHRvciA9IGRlc2NyaXB0b3ItPmNvbnRhaW5pbmdfdHlwZSgpOwotICAoKnZhcmlh
YmxlcylbIm93bmluZ19tZXNzYWdlX2NsYXNzIl0gPSBDbGFzc05hbWUobXNnX2Rlc2NyaXB0b3Ip
OwotfQotfSAgLy8gbmFtZXNwYWNlCi0KLUVudW1GaWVsZEdlbmVyYXRvcjo6RW51bUZpZWxkR2Vu
ZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBT
aW5nbGVGaWVsZEdlbmVyYXRvcihkZXNjcmlwdG9yLCBvcHRpb25zKSB7Ci0gIFNldEVudW1WYXJp
YWJsZXMoZGVzY3JpcHRvciwgJnZhcmlhYmxlc18pOwotfQotCi1FbnVtRmllbGRHZW5lcmF0b3I6
On5FbnVtRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIEVudW1GaWVsZEdlbmVyYXRvcjo6R2Vu
ZXJhdGVDRnVuY3Rpb25EZWNsYXJhdGlvbnMoCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLSAgaWYgKCFIYXNQcmVzZXJ2aW5nVW5rbm93bkVudW1TZW1hbnRpY3MoZGVzY3JpcHRv
cl8tPmZpbGUoKSkpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAg
ICAgIHZhcmlhYmxlc18sCi0gICAgICAiLy8vIEZldGNoZXMgdGhlIHJhdyB2YWx1ZSBvZiBhIEBj
ICRvd25pbmdfbWVzc2FnZV9jbGFzcyQncyBAYyAkbmFtZSQgcHJvcGVydHksIGV2ZW5cbiIKLSAg
ICAgICIvLy8gaWYgdGhlIHZhbHVlIHdhcyBub3QgZGVmaW5lZCBieSB0aGUgZW51bSBhdCB0aGUg
dGltZSB0aGUgY29kZSB3YXMgZ2VuZXJhdGVkLlxuIgotICAgICAgImludDMyX3QgJG93bmluZ19t
ZXNzYWdlX2NsYXNzJF8kY2FwaXRhbGl6ZWRfbmFtZSRfUmF3VmFsdWUoJG93bmluZ19tZXNzYWdl
X2NsYXNzJCAqbWVzc2FnZSk7XG4iCi0gICAgICAiLy8vIFNldHMgdGhlIHJhdyB2YWx1ZSBvZiBh
biBAYyAkb3duaW5nX21lc3NhZ2VfY2xhc3MkJ3MgQGMgJG5hbWUkIHByb3BlcnR5LCBhbGxvd2lu
Z1xuIgotICAgICAgIi8vLyBpdCB0byBiZSBzZXQgdG8gYSB2YWx1ZSB0aGF0IHdhcyBub3QgZGVm
aW5lZCBieSB0aGUgZW51bSBhdCB0aGUgdGltZSB0aGUgY29kZVxuIgotICAgICAgIi8vLyB3YXMg
Z2VuZXJhdGVkLlxuIgotICAgICAgInZvaWQgU2V0JG93bmluZ19tZXNzYWdlX2NsYXNzJF8kY2Fw
aXRhbGl6ZWRfbmFtZSRfUmF3VmFsdWUoJG93bmluZ19tZXNzYWdlX2NsYXNzJCAqbWVzc2FnZSwg
aW50MzJfdCB2YWx1ZSk7XG4iCi0gICAgICAiXG4iKTsKLX0KLQotdm9pZCBFbnVtRmllbGRHZW5l
cmF0b3I6OkdlbmVyYXRlQ0Z1bmN0aW9uSW1wbGVtZW50YXRpb25zKAotICAgIGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdCB7Ci0gIGlmICghSGFzUHJlc2VydmluZ1Vua25vd25FbnVtU2VtYW50
aWNzKGRlc2NyaXB0b3JfLT5maWxlKCkpKSByZXR1cm47Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgICB2YXJpYWJsZXNfLAotICAgICAgImludDMyX3QgJG93bmluZ19tZXNzYWdlX2NsYXNzJF8k
Y2FwaXRhbGl6ZWRfbmFtZSRfUmF3VmFsdWUoJG93bmluZ19tZXNzYWdlX2NsYXNzJCAqbWVzc2Fn
ZSkge1xuIgotICAgICAgIiAgR1BCRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IFskb3duaW5nX21l
c3NhZ2VfY2xhc3MkIGRlc2NyaXB0b3JdO1xuIgotICAgICAgIiAgR1BCRmllbGREZXNjcmlwdG9y
ICpmaWVsZCA9IFtkZXNjcmlwdG9yIGZpZWxkV2l0aE51bWJlcjokZmllbGRfbnVtYmVyX25hbWUk
XTtcbiIKLSAgICAgICIgIHJldHVybiBHUEJHZXRNZXNzYWdlSW50MzJGaWVsZChtZXNzYWdlLCBm
aWVsZCk7XG4iCi0gICAgICAifVxuIgotICAgICAgIlxuIgotICAgICAgInZvaWQgU2V0JG93bmlu
Z19tZXNzYWdlX2NsYXNzJF8kY2FwaXRhbGl6ZWRfbmFtZSRfUmF3VmFsdWUoJG93bmluZ19tZXNz
YWdlX2NsYXNzJCAqbWVzc2FnZSwgaW50MzJfdCB2YWx1ZSkge1xuIgotICAgICAgIiAgR1BCRGVz
Y3JpcHRvciAqZGVzY3JpcHRvciA9IFskb3duaW5nX21lc3NhZ2VfY2xhc3MkIGRlc2NyaXB0b3Jd
O1xuIgotICAgICAgIiAgR1BCRmllbGREZXNjcmlwdG9yICpmaWVsZCA9IFtkZXNjcmlwdG9yIGZp
ZWxkV2l0aE51bWJlcjokZmllbGRfbnVtYmVyX25hbWUkXTtcbiIKLSAgICAgICIgIEdQQlNldElu
dDMySXZhcldpdGhGaWVsZEludGVybmFsKG1lc3NhZ2UsIGZpZWxkLCB2YWx1ZSwgZGVzY3JpcHRv
ci5maWxlLnN5bnRheCk7XG4iCi0gICAgICAifVxuIgotICAgICAgIlxuIik7Ci19Ci0KLXZvaWQg
RW51bUZpZWxkR2VuZXJhdG9yOjpEZXRlcm1pbmVGb3J3YXJkRGVjbGFyYXRpb25zKAotICAgIHNl
dDxzdHJpbmc+KiBmd2RfZGVjbHMpIGNvbnN0IHsKLSAgU2luZ2xlRmllbGRHZW5lcmF0b3I6OkRl
dGVybWluZUZvcndhcmREZWNsYXJhdGlvbnMoZndkX2RlY2xzKTsKLSAgLy8gSWYgaXQgaXMgYW4g
ZW51bSBkZWZpbmVkIGluIGEgZGlmZmVyZW50IGZpbGUsIHRoZW4gd2UnbGwgbmVlZCBhIGZvcndh
cmQKLSAgLy8gZGVjbGFyYXRpb24gZm9yIGl0LiAgV2hlbiBpdCBpcyBpbiBvdXIgZmlsZSwgYWxs
IHRoZSBlbnVtcyBhcmUgb3V0cHV0Ci0gIC8vIGJlZm9yZSB0aGUgbWVzc2FnZSwgc28gaXQgd2ls
bCBiZSBkZWNsYXJlZCBiZWZvcmUgaXQgaXMgbmVlZGVkLgotICBpZiAoZGVzY3JpcHRvcl8tPmZp
bGUoKSAhPSBkZXNjcmlwdG9yXy0+ZW51bV90eXBlKCktPmZpbGUoKSkgewotICAgIC8vIEVudW0g
bmFtZSBpcyBhbHJlYWR5IGluICJzdG9yYWdlX3R5cGUiLgotICAgIGNvbnN0IHN0cmluZyYgbmFt
ZSA9IHZhcmlhYmxlKCJzdG9yYWdlX3R5cGUiKTsKLSAgICBmd2RfZGVjbHMtPmluc2VydCgiR1BC
X0VOVU1fRldEX0RFQ0xBUkUoIiArIG5hbWUgKyAiKSIpOwotICB9Ci19Ci0KLVJlcGVhdGVkRW51
bUZpZWxkR2VuZXJhdG9yOjpSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcigKLSAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCi0gICAg
OiBSZXBlYXRlZEZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0b3IsIG9wdGlvbnMpIHsKLSAgU2V0RW51
bVZhcmlhYmxlcyhkZXNjcmlwdG9yLCAmdmFyaWFibGVzXyk7Ci0gIHZhcmlhYmxlc19bImFycmF5
X3N0b3JhZ2VfdHlwZSJdID0gIkdQQkVudW1BcnJheSI7Ci19Ci0KLVJlcGVhdGVkRW51bUZpZWxk
R2VuZXJhdG9yOjp+UmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIFJlcGVh
dGVkRW51bUZpZWxkR2VuZXJhdG9yOjpGaW5pc2hJbml0aWFsaXphdGlvbih2b2lkKSB7Ci0gIFJl
cGVhdGVkRmllbGRHZW5lcmF0b3I6OkZpbmlzaEluaXRpYWxpemF0aW9uKCk7Ci0gIHZhcmlhYmxl
c19bImFycmF5X2NvbW1lbnQiXSA9Ci0gICAgICAiLy8gfCIgKyB2YXJpYWJsZXNfWyJuYW1lIl0g
KyAifCBjb250YWlucyB8IiArIHZhcmlhYmxlc19bInN0b3JhZ2VfdHlwZSJdICsgInxcbiI7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBvYmplY3RpdmVjCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIK
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19l
bnVtX2ZpZWxkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmpl
Y3RpdmVjX2VudW1fZmllbGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2ZmFh
ODE5YTlmYzcwNGNjZGQ0ODI0NzQ2OTU2NjUyYTM1ZTM0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2Jq
ZWN0aXZlYy9vYmplY3RpdmVjX2VudW1fZmllbGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dM
RV9QUk9UT0JVRl9DT01QSUxFUl9PQkpFQ1RJVkVDX0VOVU1fRklFTERfSF9fCi0jZGVmaW5lIEdP
T0dMRV9QUk9UT0JVRl9DT01QSUxFUl9PQkpFQ1RJVkVDX0VOVU1fRklFTERfSF9fCi0KLSNpbmNs
dWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2ds
ZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFj
ZSBvYmplY3RpdmVjIHsKLQotY2xhc3MgRW51bUZpZWxkR2VuZXJhdG9yIDogcHVibGljIFNpbmds
ZUZpZWxkR2VuZXJhdG9yIHsKLSAgZnJpZW5kIEZpZWxkR2VuZXJhdG9yKiBGaWVsZEdlbmVyYXRv
cjo6TWFrZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotCi0g
cHVibGljOgotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVDRnVuY3Rpb25EZWNsYXJhdGlvbnMoaW86
OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVDRnVuY3Rp
b25JbXBsZW1lbnRhdGlvbnMoaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotICB2aXJ0dWFs
IHZvaWQgRGV0ZXJtaW5lRm9yd2FyZERlY2xhcmF0aW9ucyhzZXQ8c3RyaW5nPiogZndkX2RlY2xz
KSBjb25zdDsKLQotIHByb3RlY3RlZDoKLSAgRW51bUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0gIHZpcnR1
YWwgfkVudW1GaWVsZEdlbmVyYXRvcigpOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9X
X0VWSUxfQ09OU1RSVUNUT1JTKEVudW1GaWVsZEdlbmVyYXRvcik7Ci19OwotCi1jbGFzcyBSZXBl
YXRlZEVudW1GaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBSZXBlYXRlZEZpZWxkR2VuZXJhdG9yIHsK
LSAgZnJpZW5kIEZpZWxkR2VuZXJhdG9yKiBGaWVsZEdlbmVyYXRvcjo6TWFrZShjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotCi0gcHVibGljOgotICB2aXJ0dWFs
IHZvaWQgRmluaXNoSW5pdGlhbGl6YXRpb24oKTsKLQotIHByb3RlY3RlZDoKLSAgUmVwZWF0ZWRF
bnVtRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKTsKLSAgdmly
dHVhbCB+UmVwZWF0ZWRFbnVtRmllbGRHZW5lcmF0b3IoKTsKLQotIHByaXZhdGU6Ci0gIEdPT0dM
RV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcik7
Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugb2JqZWN0aXZlYwotfSAgLy8gbmFtZXNwYWNlIGNvbXBp
bGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNl
bmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfRU5VTV9GSUVMRF9I
X18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29i
amVjdGl2ZWNfZXh0ZW5zaW9uLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVj
dGl2ZWMvb2JqZWN0aXZlY19leHRlbnNpb24uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDNmN2FiOWQzOTIzNmRmZjJkZTAwM2RkYjA5OTRiZjlkOThjOWM0NzkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19leHRlbnNpb24uY2MKKysrIC9kZXYvbnVsbApA
QCAtMSwxMzYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50
ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1
ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNp
bmNsdWRlIDxpb3N0cmVhbT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9v
YmplY3RpdmVjL29iamVjdGl2ZWNfZXh0ZW5zaW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVy
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFj
ZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ugb2JqZWN0aXZlYyB7Ci0KLUV4dGVuc2lvbkdlbmVyYXRv
cjo6RXh0ZW5zaW9uR2VuZXJhdG9yKGNvbnN0IHN0cmluZyYgcm9vdF9jbGFzc19uYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yKQotICAgIDogbWV0aG9kX25hbWVfKEV4dGVuc2lvbk1ldGhvZE5hbWUoZGVz
Y3JpcHRvcikpLAotICAgICAgcm9vdF9jbGFzc19hbmRfbWV0aG9kX25hbWVfKHJvb3RfY2xhc3Nf
bmFtZSArICJfIiArIG1ldGhvZF9uYW1lXyksCi0gICAgICBkZXNjcmlwdG9yXyhkZXNjcmlwdG9y
KSB7Ci0gIGlmIChkZXNjcmlwdG9yLT5pc19tYXAoKSkgewotICAgIC8vIE5PVEU6IHNyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmNjIG1ha2VzIHVzZSBvZiBjZXJyIGZvciBzb21l
Ci0gICAgLy8gZXJyb3IgY2FzZXMsIHNvIGl0IHNlZW1zIHRvIGJlIG9rIHRvIHVzZSBhcyBhIGJh
Y2sgZG9vciBmb3IgZXJyb3JzLgotICAgIGNlcnIgPDwgImVycm9yOiBFeHRlbnNpb24gaXMgYSBt
YXA8PiEiCi0gICAgICAgICA8PCAiIFRoYXQgdXNlZCB0byBiZSBibG9ja2VkIGJ5IHRoZSBjb21w
aWxlci4iIDw8IGVuZGw7Ci0gICAgY2Vyci5mbHVzaCgpOwotICAgIGFib3J0KCk7Ci0gIH0KLX0K
LQotRXh0ZW5zaW9uR2VuZXJhdG9yOjp+RXh0ZW5zaW9uR2VuZXJhdG9yKCkge30KLQotdm9pZCBF
eHRlbnNpb25HZW5lcmF0b3I6OkdlbmVyYXRlTWVtYmVyc0hlYWRlcihpbzo6UHJpbnRlciogcHJp
bnRlcikgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gIHZhcnNbIm1ldGhvZF9uYW1l
Il0gPSBtZXRob2RfbmFtZV87Ci0gIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOwotICBpZiAoZGVz
Y3JpcHRvcl8tPkdldFNvdXJjZUxvY2F0aW9uKCZsb2NhdGlvbikpIHsKLSAgICB2YXJzWyJjb21t
ZW50cyJdID0gQnVpbGRDb21tZW50c1N0cmluZyhsb2NhdGlvbik7Ci0gIH0gZWxzZSB7Ci0gICAg
dmFyc1siY29tbWVudHMiXSA9ICIiOwotICB9Ci0gIHByaW50ZXItPlByaW50KHZhcnMsCi0gICAg
ICAgICAgICAgICAgICIkY29tbWVudHMkIgotICAgICAgICAgICAgICAgICAiKyAoR1BCRXh0ZW5z
aW9uRGVzY3JpcHRvciAqKSRtZXRob2RfbmFtZSQ7XG4iKTsKLX0KLQotdm9pZCBFeHRlbnNpb25H
ZW5lcmF0b3I6OkdlbmVyYXRlU3RhdGljVmFyaWFibGVzSW5pdGlhbGl6YXRpb24oCi0gICAgaW86
OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICB2YXJz
WyJyb290X2NsYXNzX2FuZF9tZXRob2RfbmFtZSJdID0gcm9vdF9jbGFzc19hbmRfbWV0aG9kX25h
bWVfOwotICB2YXJzWyJleHRlbmRlZF90eXBlIl0gPSBDbGFzc05hbWUoZGVzY3JpcHRvcl8tPmNv
bnRhaW5pbmdfdHlwZSgpKTsKLSAgdmFyc1sibnVtYmVyIl0gPSBTaW1wbGVJdG9hKGRlc2NyaXB0
b3JfLT5udW1iZXIoKSk7Ci0KLSAgc3RkOjp2ZWN0b3I8c3RyaW5nPiBvcHRpb25zOwotICBpZiAo
ZGVzY3JpcHRvcl8tPmlzX3JlcGVhdGVkKCkpIG9wdGlvbnMucHVzaF9iYWNrKCJHUEJFeHRlbnNp
b25SZXBlYXRlZCIpOwotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3BhY2tlZCgpKSBvcHRpb25zLnB1
c2hfYmFjaygiR1BCRXh0ZW5zaW9uUGFja2VkIik7Ci0gIGlmIChkZXNjcmlwdG9yXy0+Y29udGFp
bmluZ190eXBlKCktPm9wdGlvbnMoKS5tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCgpKQotICAgIG9w
dGlvbnMucHVzaF9iYWNrKCJHUEJFeHRlbnNpb25TZXRXaXJlRm9ybWF0Iik7Ci0KLSAgdmFyc1si
b3B0aW9ucyJdID0gQnVpbGRGbGFnc1N0cmluZyhvcHRpb25zKTsKLQotICBPYmplY3RpdmVDVHlw
ZSBvYmpjX3R5cGUgPSBHZXRPYmplY3RpdmVDVHlwZShkZXNjcmlwdG9yXyk7Ci0gIHN0cmluZyBz
aW5ndWxhcl90eXBlOwotICBpZiAob2JqY190eXBlID09IE9CSkVDVElWRUNUWVBFX01FU1NBR0Up
IHsKLSAgICB2YXJzWyJ0eXBlIl0gPSBzdHJpbmcoIkdQQlN0cmluZ2lmeVN5bWJvbCgiKSArCi0g
ICAgICAgICAgICAgICAgICAgQ2xhc3NOYW1lKGRlc2NyaXB0b3JfLT5tZXNzYWdlX3R5cGUoKSkg
KyAiKSI7Ci0gIH0gZWxzZSB7Ci0gICAgdmFyc1sidHlwZSJdID0gIk5VTEwiOwotICB9Ci0KLSAg
dmFyc1siZGVmYXVsdF9uYW1lIl0gPSBHUEJHZW5lcmljVmFsdWVGaWVsZE5hbWUoZGVzY3JpcHRv
cl8pOwotICBpZiAoZGVzY3JpcHRvcl8tPmlzX3JlcGVhdGVkKCkpIHsKLSAgICB2YXJzWyJkZWZh
dWx0Il0gPSAibmlsIjsKLSAgfSBlbHNlIHsKLSAgICB2YXJzWyJkZWZhdWx0Il0gPSBEZWZhdWx0
VmFsdWUoZGVzY3JpcHRvcl8pOwotICB9Ci0gIHN0cmluZyB0eXBlID0gR2V0Q2FwaXRhbGl6ZWRU
eXBlKGRlc2NyaXB0b3JfKTsKLSAgdmFyc1siZXh0ZW5zaW9uX3R5cGUiXSA9IHN0cmluZygiR1BC
RGF0YVR5cGUiKSArIHR5cGU7Ci0KLSAgaWYgKG9iamNfdHlwZSA9PSBPQkpFQ1RJVkVDVFlQRV9F
TlVNKSB7Ci0gICAgdmFyc1siZW51bV9kZXNjX2Z1bmNfbmFtZSJdID0KLSAgICAgICAgIEVudW1O
YW1lKGRlc2NyaXB0b3JfLT5lbnVtX3R5cGUoKSkgKyAiX0VudW1EZXNjcmlwdG9yIjsKLSAgfSBl
bHNlIHsKLSAgICB2YXJzWyJlbnVtX2Rlc2NfZnVuY19uYW1lIl0gPSAiTlVMTCI7Ci0gIH0KLQot
ICBwcmludGVyLT5QcmludCh2YXJzLAotICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAiICAuZGVmYXVsdFZhbHVlLiRkZWZhdWx0X25hbWUkID0gJGRlZmF1bHQkLFxuIgot
ICAgICAgICAgICAgICAgICAiICAuc2luZ2xldG9uTmFtZSA9IEdQQlN0cmluZ2lmeVN5bWJvbCgk
cm9vdF9jbGFzc19hbmRfbWV0aG9kX25hbWUkKSxcbiIKLSAgICAgICAgICAgICAgICAgIiAgLmV4
dGVuZGVkQ2xhc3MgPSBHUEJTdHJpbmdpZnlTeW1ib2woJGV4dGVuZGVkX3R5cGUkKSxcbiIKLSAg
ICAgICAgICAgICAgICAgIiAgLm1lc3NhZ2VPckdyb3VwQ2xhc3NOYW1lID0gJHR5cGUkLFxuIgot
ICAgICAgICAgICAgICAgICAiICAuZW51bURlc2NyaXB0b3JGdW5jID0gJGVudW1fZGVzY19mdW5j
X25hbWUkLFxuIgotICAgICAgICAgICAgICAgICAiICAuZmllbGROdW1iZXIgPSAkbnVtYmVyJCxc
biIKLSAgICAgICAgICAgICAgICAgIiAgLmRhdGFUeXBlID0gJGV4dGVuc2lvbl90eXBlJCxcbiIK
LSAgICAgICAgICAgICAgICAgIiAgLm9wdGlvbnMgPSAkb3B0aW9ucyQsXG4iCi0gICAgICAgICAg
ICAgICAgICJ9LFxuIik7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uR2VuZXJhdG9yOjpHZW5lcmF0ZVJl
Z2lzdHJhdGlvblNvdXJjZShpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICJbcmVnaXN0cnkgYWRkRXh0ZW5zaW9uOiRyb290X2NsYXNzX2FuZF9tZXRob2Rf
bmFtZSRdO1xuIiwKLSAgICAgICJyb290X2NsYXNzX2FuZF9tZXRob2RfbmFtZSIsIHJvb3RfY2xh
c3NfYW5kX21ldGhvZF9uYW1lXyk7Ci19Ci19ICAvLyBuYW1lc3BhY2Ugb2JqZWN0aXZlYwotfSAg
Ly8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9v
YmplY3RpdmVjL29iamVjdGl2ZWNfZXh0ZW5zaW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2V4dGVuc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlMzYxZTYzOWJkNjQ0NWI1N2I5NjI2MWE4OGJkZGMzODExMjg4ZGM0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZXh0ZW5zaW9uLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfT0JKRUNUSVZFQ19FWFRFTlNJ
T05fSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9PQkpFQ1RJVkVDX0VYVEVO
U0lPTl9IX18KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotY2xhc3MgRmllbGREZXNj
cmlwdG9yOyAgLy8gZGVzY3JpcHRvci5oCi1uYW1lc3BhY2UgaW8gewotY2xhc3MgUHJpbnRlcjsg
IC8vIHByaW50ZXIuaAotfQotfQotCi1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNv
bXBpbGVyIHsKLW5hbWVzcGFjZSBvYmplY3RpdmVjIHsKLQotY2xhc3MgRXh0ZW5zaW9uR2VuZXJh
dG9yIHsKLSBwdWJsaWM6Ci0gIEV4dGVuc2lvbkdlbmVyYXRvcihjb25zdCBzdHJpbmcmIHJvb3Rf
Y2xhc3NfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZGVzY3JpcHRvcik7Ci0gIH5FeHRlbnNpb25HZW5lcmF0b3IoKTsKLQotICB2b2lkIEdlbmVyYXRl
TWVtYmVyc0hlYWRlcihpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVTdGF0
aWNWYXJpYWJsZXNJbml0aWFsaXphdGlvbihpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQg
R2VuZXJhdGVSZWdpc3RyYXRpb25Tb3VyY2UoaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0gcHJp
dmF0ZToKLSAgc3RyaW5nIG1ldGhvZF9uYW1lXzsKLSAgc3RyaW5nIHJvb3RfY2xhc3NfYW5kX21l
dGhvZF9uYW1lXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLQotICBH
T09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRXh0ZW5zaW9uR2VuZXJhdG9yKTsKLX07
Ci19ICAvLyBuYW1lc3BhY2Ugb2JqZWN0aXZlYwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAg
Ly8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfTUVTU0FHRV9IX18KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNf
ZmllbGQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3Rp
dmVjX2ZpZWxkLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmNiNGExNjA4NGEw
MzcyNjg3YmY3NWQzMjRmYWE5NmRmYTM1YmQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVj
L29iamVjdGl2ZWNfZmllbGQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNf
ZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9v
YmplY3RpdmVjX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
b2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW1fZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21hcF9maWVsZC5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWVzc2Fn
ZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVj
L29iamVjdGl2ZWNfcHJpbWl0aXZlX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1l
c3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBvYmplY3Rp
dmVjIHsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBTZXRDb21tb25GaWVsZFZhcmlhYmxlcyhjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hcDxzdHJpbmcsIHN0cmluZz4qIHZhcmlhYmxlcykgewotICBzdHJpbmcgY2FtZWxfY2Fz
ZV9uYW1lID0gRmllbGROYW1lKGRlc2NyaXB0b3IpOwotICBzdHJpbmcgcmF3X2ZpZWxkX25hbWU7
Ci0gIGlmIChkZXNjcmlwdG9yLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQ
KSB7Ci0gICAgcmF3X2ZpZWxkX25hbWUgPSBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+bmFt
ZSgpOwotICB9IGVsc2UgewotICAgIHJhd19maWVsZF9uYW1lID0gZGVzY3JpcHRvci0+bmFtZSgp
OwotICB9Ci0gIC8vIFRoZSBsb2dpYyBoZXJlIGhhcyB0byBtYXRjaCAtW0dHUEJGaWVsZERlc2Ny
aXB0b3IgdGV4dEZvcm1hdE5hbWVdLgotICBjb25zdCBzdHJpbmcgdW5fY2FtZWxfY2FzZV9uYW1l
KAotICAgICAgVW5DYW1lbENhc2VGaWVsZE5hbWUoY2FtZWxfY2FzZV9uYW1lLCBkZXNjcmlwdG9y
KSk7Ci0gIGNvbnN0IGJvb2wgbmVlZHNfY3VzdG9tX25hbWUgPSAocmF3X2ZpZWxkX25hbWUgIT0g
dW5fY2FtZWxfY2FzZV9uYW1lKTsKLQotICBTb3VyY2VMb2NhdGlvbiBsb2NhdGlvbjsKLSAgaWYg
KGRlc2NyaXB0b3ItPkdldFNvdXJjZUxvY2F0aW9uKCZsb2NhdGlvbikpIHsKLSAgICAoKnZhcmlh
YmxlcylbImNvbW1lbnRzIl0gPSBCdWlsZENvbW1lbnRzU3RyaW5nKGxvY2F0aW9uKTsKLSAgfSBl
bHNlIHsKLSAgICAoKnZhcmlhYmxlcylbImNvbW1lbnRzIl0gPSAiXG4iOwotICB9Ci0gIGNvbnN0
IHN0cmluZyYgY2xhc3NuYW1lID0gQ2xhc3NOYW1lKGRlc2NyaXB0b3ItPmNvbnRhaW5pbmdfdHlw
ZSgpKTsKLSAgKCp2YXJpYWJsZXMpWyJjbGFzc25hbWUiXSA9IGNsYXNzbmFtZTsKLSAgKCp2YXJp
YWJsZXMpWyJuYW1lIl0gPSBjYW1lbF9jYXNlX25hbWU7Ci0gIGNvbnN0IHN0cmluZyYgY2FwaXRh
bGl6ZWRfbmFtZSA9IEZpZWxkTmFtZUNhcGl0YWxpemVkKGRlc2NyaXB0b3IpOwotICAoKnZhcmlh
YmxlcylbImNhcGl0YWxpemVkX25hbWUiXSA9IGNhcGl0YWxpemVkX25hbWU7Ci0gICgqdmFyaWFi
bGVzKVsicmF3X2ZpZWxkX25hbWUiXSA9IHJhd19maWVsZF9uYW1lOwotICAoKnZhcmlhYmxlcylb
ImZpZWxkX251bWJlcl9uYW1lIl0gPQotICAgICAgY2xhc3NuYW1lICsgIl9GaWVsZE51bWJlcl8i
ICsgY2FwaXRhbGl6ZWRfbmFtZTsKLSAgKCp2YXJpYWJsZXMpWyJmaWVsZF9udW1iZXIiXSA9IFNp
bXBsZUl0b2EoZGVzY3JpcHRvci0+bnVtYmVyKCkpOwotICAoKnZhcmlhYmxlcylbImZpZWxkX3R5
cGUiXSA9IEdldENhcGl0YWxpemVkVHlwZShkZXNjcmlwdG9yKTsKLSAgKCp2YXJpYWJsZXMpWyJk
ZXByZWNhdGVkX2F0dHJpYnV0ZSJdID0gR2V0T3B0aW9uYWxEZXByZWNhdGVkQXR0cmlidXRlKGRl
c2NyaXB0b3IpOwotICBzdGQ6OnZlY3RvcjxzdHJpbmc+IGZpZWxkX2ZsYWdzOwotICBpZiAoZGVz
Y3JpcHRvci0+aXNfcmVwZWF0ZWQoKSkgZmllbGRfZmxhZ3MucHVzaF9iYWNrKCJHUEJGaWVsZFJl
cGVhdGVkIik7Ci0gIGlmIChkZXNjcmlwdG9yLT5pc19yZXF1aXJlZCgpKSBmaWVsZF9mbGFncy5w
dXNoX2JhY2soIkdQQkZpZWxkUmVxdWlyZWQiKTsKLSAgaWYgKGRlc2NyaXB0b3ItPmlzX29wdGlv
bmFsKCkpIGZpZWxkX2ZsYWdzLnB1c2hfYmFjaygiR1BCRmllbGRPcHRpb25hbCIpOwotICBpZiAo
ZGVzY3JpcHRvci0+aXNfcGFja2VkKCkpIGZpZWxkX2ZsYWdzLnB1c2hfYmFjaygiR1BCRmllbGRQ
YWNrZWQiKTsKLQotICAvLyBPYmpDIGN1c3RvbSBmbGFncy4KLSAgaWYgKGRlc2NyaXB0b3ItPmhh
c19kZWZhdWx0X3ZhbHVlKCkpCi0gICAgZmllbGRfZmxhZ3MucHVzaF9iYWNrKCJHUEJGaWVsZEhh
c0RlZmF1bHRWYWx1ZSIpOwotICBpZiAobmVlZHNfY3VzdG9tX25hbWUpIGZpZWxkX2ZsYWdzLnB1
c2hfYmFjaygiR1BCRmllbGRUZXh0Rm9ybWF0TmFtZUN1c3RvbSIpOwotICBpZiAoZGVzY3JpcHRv
ci0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9FTlVNKSB7Ci0gICAgZmllbGRfZmxh
Z3MucHVzaF9iYWNrKCJHUEJGaWVsZEhhc0VudW1EZXNjcmlwdG9yIik7Ci0gIH0KLQotICAoKnZh
cmlhYmxlcylbImZpZWxkZmxhZ3MiXSA9IEJ1aWxkRmxhZ3NTdHJpbmcoZmllbGRfZmxhZ3MpOwot
Ci0gICgqdmFyaWFibGVzKVsiZGVmYXVsdCJdID0gRGVmYXVsdFZhbHVlKGRlc2NyaXB0b3IpOwot
ICAoKnZhcmlhYmxlcylbImRlZmF1bHRfbmFtZSJdID0gR1BCR2VuZXJpY1ZhbHVlRmllbGROYW1l
KGRlc2NyaXB0b3IpOwotCi0gICgqdmFyaWFibGVzKVsiZGF0YVR5cGVTcGVjaWZpY19uYW1lIl0g
PSAiY2xhc3NOYW1lIjsKLSAgKCp2YXJpYWJsZXMpWyJkYXRhVHlwZVNwZWNpZmljX3ZhbHVlIl0g
PSAiTlVMTCI7Ci0KLSAgKCp2YXJpYWJsZXMpWyJzdG9yYWdlX29mZnNldF92YWx1ZSJdID0KLSAg
ICAgICIodWludDMyX3Qpb2Zmc2V0b2YoIiArIGNsYXNzbmFtZSArICJfX3N0b3JhZ2VfLCAiICsg
Y2FtZWxfY2FzZV9uYW1lICsgIikiOwotICAoKnZhcmlhYmxlcylbInN0b3JhZ2Vfb2Zmc2V0X2Nv
bW1lbnQiXSA9ICIiOwotCi0gIC8vIENsZWFyIHNvbWUgY29tbW9uIHRoaW5ncyBzbyB0aGV5IGNh
biBiZSBzZXQganVzdCB3aGVuIG5lZWRlZC4KLSAgKCp2YXJpYWJsZXMpWyJzdG9yYWdlX2F0dHJp
YnV0ZSJdID0gIiI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1GaWVsZEdlbmVyYXRvciogRmll
bGRHZW5lcmF0b3I6Ok1ha2UoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKSB7Ci0g
IEZpZWxkR2VuZXJhdG9yKiByZXN1bHQgPSBOVUxMOwotICBpZiAoZmllbGQtPmlzX3JlcGVhdGVk
KCkpIHsKLSAgICBzd2l0Y2ggKEdldE9iamVjdGl2ZUNUeXBlKGZpZWxkKSkgewotICAgICAgY2Fz
ZSBPQkpFQ1RJVkVDVFlQRV9NRVNTQUdFOiB7Ci0gICAgICAgIGlmIChmaWVsZC0+aXNfbWFwKCkp
IHsKLSAgICAgICAgICByZXN1bHQgPSBuZXcgTWFwRmllbGRHZW5lcmF0b3IoZmllbGQsIG9wdGlv
bnMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJlc3VsdCA9IG5ldyBSZXBlYXRlZE1l
c3NhZ2VGaWVsZEdlbmVyYXRvcihmaWVsZCwgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIE9CSkVDVElWRUNUWVBFX0VOVU06Ci0gICAgICAg
IHJlc3VsdCA9IG5ldyBSZXBlYXRlZEVudW1GaWVsZEdlbmVyYXRvcihmaWVsZCwgb3B0aW9ucyk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmVzdWx0ID0gbmV3IFJl
cGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoZmllbGQsIG9wdGlvbnMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNoIChHZXRPYmplY3RpdmVDVHlwZShm
aWVsZCkpIHsKLSAgICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfTUVTU0FHRTogewotICAgICAgICBy
ZXN1bHQgPSBuZXcgTWVzc2FnZUZpZWxkR2VuZXJhdG9yKGZpZWxkLCBvcHRpb25zKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIE9CSkVDVElWRUNUWVBFX0VOVU06Ci0gICAg
ICAgIHJlc3VsdCA9IG5ldyBFbnVtRmllbGRHZW5lcmF0b3IoZmllbGQsIG9wdGlvbnMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChJc1JlZmVyZW5jZVR5cGUo
ZmllbGQpKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gbmV3IFByaW1pdGl2ZU9iakZpZWxkR2VuZXJh
dG9yKGZpZWxkLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXN1bHQg
PSBuZXcgUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoZmllbGQsIG9wdGlvbnMpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICByZXN1bHQtPkZpbmlzaEluaXRpYWxpemF0
aW9uKCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLUZpZWxkR2VuZXJhdG9yOjpGaWVsZEdlbmVy
YXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IGRlc2NyaXB0b3Jf
KGRlc2NyaXB0b3IpIHsKLSAgU2V0Q29tbW9uRmllbGRWYXJpYWJsZXMoZGVzY3JpcHRvciwgJnZh
cmlhYmxlc18pOwotfQotCi1GaWVsZEdlbmVyYXRvcjo6fkZpZWxkR2VuZXJhdG9yKCkge30KLQot
dm9pZCBGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVGaWVsZE51bWJlckNvbnN0YW50KGlvOjpQcmlu
dGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFyaWFibGVz
XywKLSAgICAgICIkZmllbGRfbnVtYmVyX25hbWUkID0gJGZpZWxkX251bWJlciQsXG4iKTsKLX0K
LQotdm9pZCBGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVDRnVuY3Rpb25EZWNsYXJhdGlvbnMoCi0g
ICAgaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0IHsKLSAgLy8gTm90aGluZwotfQotCi12b2lk
IEZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZUNGdW5jdGlvbkltcGxlbWVudGF0aW9ucygKLSAgICBp
bzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICAvLyBOb3RoaW5nCi19Ci0KLXZvaWQgRmll
bGRHZW5lcmF0b3I6OkRldGVybWluZUZvcndhcmREZWNsYXJhdGlvbnMoCi0gICAgc2V0PHN0cmlu
Zz4qIGZ3ZF9kZWNscykgY29uc3QgewotICAvLyBOb3RoaW5nCi19Ci0KLXZvaWQgRmllbGRHZW5l
cmF0b3I6OkdlbmVyYXRlRmllbGREZXNjcmlwdGlvbigKLSAgICBpbzo6UHJpbnRlciogcHJpbnRl
ciwgYm9vbCBpbmNsdWRlX2RlZmF1bHQpIGNvbnN0IHsKLSAgLy8gUHJpbnRlZCBpbiB0aGUgc2Ft
ZSBvcmRlciBhcyB0aGUgc3RydWN0dXJlIGRlY2wuCi0gIGlmIChpbmNsdWRlX2RlZmF1bHQpIHsK
LSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgdmFyaWFibGVzXywKLSAgICAgICAgIntcbiIK
LSAgICAgICAgIiAgLmRlZmF1bHRWYWx1ZS4kZGVmYXVsdF9uYW1lJCA9ICRkZWZhdWx0JCxcbiIK
LSAgICAgICAgIiAgLmNvcmUubmFtZSA9IFwiJG5hbWUkXCIsXG4iCi0gICAgICAgICIgIC5jb3Jl
LmRhdGFUeXBlU3BlY2lmaWMuJGRhdGFUeXBlU3BlY2lmaWNfbmFtZSQgPSAkZGF0YVR5cGVTcGVj
aWZpY192YWx1ZSQsXG4iCi0gICAgICAgICIgIC5jb3JlLm51bWJlciA9ICRmaWVsZF9udW1iZXJf
bmFtZSQsXG4iCi0gICAgICAgICIgIC5jb3JlLmhhc0luZGV4ID0gJGhhc19pbmRleCQsXG4iCi0g
ICAgICAgICIgIC5jb3JlLm9mZnNldCA9ICRzdG9yYWdlX29mZnNldF92YWx1ZSQsJHN0b3JhZ2Vf
b2Zmc2V0X2NvbW1lbnQkXG4iCi0gICAgICAgICIgIC5jb3JlLmZsYWdzID0gJGZpZWxkZmxhZ3Mk
LFxuIgotICAgICAgICAiICAuY29yZS5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlJGZpZWxkX3R5cGUk
LFxuIgotICAgICAgICAifSxcbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgICB2YXJpYWJsZXNfLAotICAgICAgICAie1xuIgotICAgICAgICAiICAubmFtZSA9IFwi
JG5hbWUkXCIsXG4iCi0gICAgICAgICIgIC5kYXRhVHlwZVNwZWNpZmljLiRkYXRhVHlwZVNwZWNp
ZmljX25hbWUkID0gJGRhdGFUeXBlU3BlY2lmaWNfdmFsdWUkLFxuIgotICAgICAgICAiICAubnVt
YmVyID0gJGZpZWxkX251bWJlcl9uYW1lJCxcbiIKLSAgICAgICAgIiAgLmhhc0luZGV4ID0gJGhh
c19pbmRleCQsXG4iCi0gICAgICAgICIgIC5vZmZzZXQgPSAkc3RvcmFnZV9vZmZzZXRfdmFsdWUk
LCRzdG9yYWdlX29mZnNldF9jb21tZW50JFxuIgotICAgICAgICAiICAuZmxhZ3MgPSAkZmllbGRm
bGFncyQsXG4iCi0gICAgICAgICIgIC5kYXRhVHlwZSA9IEdQQkRhdGFUeXBlJGZpZWxkX3R5cGUk
LFxuIgotICAgICAgICAifSxcbiIpOwotICB9Ci19Ci0KLXZvaWQgRmllbGRHZW5lcmF0b3I6OlNl
dFJ1bnRpbWVIYXNCaXQoaW50IGhhc19pbmRleCkgewotICB2YXJpYWJsZXNfWyJoYXNfaW5kZXgi
XSA9IFNpbXBsZUl0b2EoaGFzX2luZGV4KTsKLX0KLQotdm9pZCBGaWVsZEdlbmVyYXRvcjo6U2V0
Tm9IYXNCaXQodm9pZCkgewotICB2YXJpYWJsZXNfWyJoYXNfaW5kZXgiXSA9ICJHUEJOb0hhc0Jp
dCI7Ci19Ci0KLWludCBGaWVsZEdlbmVyYXRvcjo6RXh0cmFSdW50aW1lSGFzQml0c05lZWRlZCh2
b2lkKSBjb25zdCB7Ci0gIHJldHVybiAwOwotfQotCi12b2lkIEZpZWxkR2VuZXJhdG9yOjpTZXRF
eHRyYVJ1bnRpbWVIYXNCaXRzQmFzZShpbnQgaW5kZXhfYmFzZSkgewotICAvLyBOT1RFOiBzcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5jYyBtYWtlcyB1c2Ugb2YgY2VyciBmb3Ig
c29tZQotICAvLyBlcnJvciBjYXNlcywgc28gaXQgc2VlbXMgdG8gYmUgb2sgdG8gdXNlIGFzIGEg
YmFjayBkb29yIGZvciBlcnJvcnMuCi0gIGNlcnIgPDwgIkVycm9yOiBzaG91bGQgaGF2ZSBvdmVy
cmlkZW4gU2V0RXh0cmFSdW50aW1lSGFzQml0c0Jhc2UoKS4iIDw8IGVuZGw7Ci0gIGNlcnIuZmx1
c2goKTsKLSAgYWJvcnQoKTsKLX0KLQotdm9pZCBGaWVsZEdlbmVyYXRvcjo6U2V0T25lb2ZJbmRl
eEJhc2UoaW50IGluZGV4X2Jhc2UpIHsKLSAgaWYgKGRlc2NyaXB0b3JfLT5jb250YWluaW5nX29u
ZW9mKCkgIT0gTlVMTCkgewotICAgIGludCBpbmRleCA9IGRlc2NyaXB0b3JfLT5jb250YWluaW5n
X29uZW9mKCktPmluZGV4KCkgKyBpbmRleF9iYXNlOwotICAgIC8vIEZsaXAgdGhlIHNpZ24gdG8g
bWFyayBpdCBhcyBhIG9uZW9mLgotICAgIHZhcmlhYmxlc19bImhhc19pbmRleCJdID0gU2ltcGxl
SXRvYSgtaW5kZXgpOwotICB9Ci19Ci0KLXZvaWQgRmllbGRHZW5lcmF0b3I6OkZpbmlzaEluaXRp
YWxpemF0aW9uKHZvaWQpIHsKLSAgLy8gSWYgInByb3BlcnR5X3R5cGUiIHdhc24ndCBzZXQsIG1h
a2UgaXQgInN0b3JhZ2VfdHlwZSIuCi0gIGlmICgodmFyaWFibGVzXy5maW5kKCJwcm9wZXJ0eV90
eXBlIikgPT0gdmFyaWFibGVzXy5lbmQoKSkgJiYKLSAgICAgICh2YXJpYWJsZXNfLmZpbmQoInN0
b3JhZ2VfdHlwZSIpICE9IHZhcmlhYmxlc18uZW5kKCkpKSB7Ci0gICAgdmFyaWFibGVzX1sicHJv
cGVydHlfdHlwZSJdID0gdmFyaWFibGUoInN0b3JhZ2VfdHlwZSIpOwotICB9Ci19Ci0KLVNpbmds
ZUZpZWxkR2VuZXJhdG9yOjpTaW5nbGVGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IEZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0
b3IsIG9wdGlvbnMpIHsKLSAgLy8gTm90aGluZwotfQotCi1TaW5nbGVGaWVsZEdlbmVyYXRvcjo6
flNpbmdsZUZpZWxkR2VuZXJhdG9yKCkge30KLQotdm9pZCBTaW5nbGVGaWVsZEdlbmVyYXRvcjo6
R2VuZXJhdGVGaWVsZFN0b3JhZ2VEZWNsYXJhdGlvbigKLSAgICBpbzo6UHJpbnRlciogcHJpbnRl
cikgY29uc3QgewotICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiJHN0b3JhZ2VfdHlwZSQg
JG5hbWUkO1xuIik7Ci19Ci0KLXZvaWQgU2luZ2xlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlUHJv
cGVydHlEZWNsYXJhdGlvbigKLSAgICBpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBw
cmludGVyLT5QcmludCh2YXJpYWJsZXNfLCAiJGNvbW1lbnRzJCIpOwotICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgIHZhcmlhYmxlc18sCi0gICAgICAiQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZHdy
aXRlKSAkcHJvcGVydHlfdHlwZSQgJG5hbWUkJGRlcHJlY2F0ZWRfYXR0cmlidXRlJDtcbiIKLSAg
ICAgICJcbiIpOwotICBpZiAoV2FudHNIYXNQcm9wZXJ0eSgpKSB7Ci0gICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgIHZhcmlhYmxlc18sCi0gICAgICAgICJAcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkd3JpdGUpIEJPT0wgaGFzJGNhcGl0YWxpemVkX25hbWUkJGRlcHJlY2F0ZWRfYXR0cmlidXRl
JDtcbiIpOwotICB9Ci19Ci0KLXZvaWQgU2luZ2xlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlUHJv
cGVydHlJbXBsZW1lbnRhdGlvbigKLSAgICBpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Qgewot
ICBpZiAoV2FudHNIYXNQcm9wZXJ0eSgpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVz
XywgIkBkeW5hbWljIGhhcyRjYXBpdGFsaXplZF9uYW1lJCwgJG5hbWUkO1xuIik7Ci0gIH0gZWxz
ZSB7Ci0gICAgcHJpbnRlci0+UHJpbnQodmFyaWFibGVzXywgIkBkeW5hbWljICRuYW1lJDtcbiIp
OwotICB9Ci19Ci0KLWJvb2wgU2luZ2xlRmllbGRHZW5lcmF0b3I6OldhbnRzSGFzUHJvcGVydHko
dm9pZCkgY29uc3QgewotICBpZiAoZGVzY3JpcHRvcl8tPmNvbnRhaW5pbmdfb25lb2YoKSAhPSBO
VUxMKSB7Ci0gICAgLy8gSWYgaW4gYSBvbmVvZiwgaXQgdXNlcyB0aGUgb25lb2ZjYXNlIGluc3Rl
YWQgb2YgYSBoYXMgYml0LgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoSGFzRmllbGRQ
cmVzZW5jZShkZXNjcmlwdG9yXy0+ZmlsZSgpKSkgewotICAgIC8vIEluIHByb3RvMS9wcm90bzIs
IGV2ZXJ5IGZpZWxkIGhhcyBhIGhhc18kbmFtZSQoKSBtZXRob2QuCi0gICAgcmV0dXJuIHRydWU7
Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNpbmdsZUZpZWxkR2VuZXJhdG9yOjpS
dW50aW1lVXNlc0hhc0JpdCh2b2lkKSBjb25zdCB7Ci0gIGlmIChkZXNjcmlwdG9yXy0+Y29udGFp
bmluZ19vbmVvZigpICE9IE5VTEwpIHsKLSAgICAvLyBUaGUgb25lb2YgdHJhY2tzIHdoYXQgaXMg
c2V0IGluc3RlYWQuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQot
Ci1PYmpDT2JqRmllbGRHZW5lcmF0b3I6Ok9iakNPYmpGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKQotICAgIDogU2luZ2xlRmllbGRH
ZW5lcmF0b3IoZGVzY3JpcHRvciwgb3B0aW9ucykgewotICB2YXJpYWJsZXNfWyJwcm9wZXJ0eV9z
dG9yYWdlX2F0dHJpYnV0ZSJdID0gInN0cm9uZyI7Ci0gIGlmIChJc1JldGFpbmVkTmFtZSh2YXJp
YWJsZXNfWyJuYW1lIl0pKSB7Ci0gICAgdmFyaWFibGVzX1sic3RvcmFnZV9hdHRyaWJ1dGUiXSA9
ICIgTlNfUkVUVVJOU19OT1RfUkVUQUlORUQiOwotICB9Ci19Ci0KLU9iakNPYmpGaWVsZEdlbmVy
YXRvcjo6fk9iakNPYmpGaWVsZEdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgT2JqQ09iakZpZWxkR2Vu
ZXJhdG9yOjpHZW5lcmF0ZUZpZWxkU3RvcmFnZURlY2xhcmF0aW9uKAotICAgIGlvOjpQcmludGVy
KiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxlc18sICIkc3RvcmFn
ZV90eXBlJCAqJG5hbWUkO1xuIik7Ci19Ci0KLXZvaWQgT2JqQ09iakZpZWxkR2VuZXJhdG9yOjpH
ZW5lcmF0ZVByb3BlcnR5RGVjbGFyYXRpb24oCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIpIGNv
bnN0IHsKLQotICAvLyBEaWZmZXJzIGZyb20gU2luZ2xlRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRl
UHJvcGVydHlEZWNsYXJhdGlvbigpIGluIHRoYXQKLSAgLy8gaXQgdXNlcyBwb2ludGVycyBhbmQg
ZGVhbHMgd2l0aCBPYmplY3RpdmUgQydzIHJ1bGVzIGFyb3VuZCBzdG9yYWdlIG5hbWUKLSAgLy8g
Y29udmVudGlvbnMgKGluaXQqLCBuZXcqLCBldGMuKQotCi0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sICIkY29tbWVudHMkIik7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFyaWFibGVz
XywKLSAgICAgICJAcHJvcGVydHkobm9uYXRvbWljLCByZWFkd3JpdGUsICRwcm9wZXJ0eV9zdG9y
YWdlX2F0dHJpYnV0ZSQsIG51bGxfcmVzZXR0YWJsZSkgJHByb3BlcnR5X3R5cGUkICokbmFtZSQk
c3RvcmFnZV9hdHRyaWJ1dGUkJGRlcHJlY2F0ZWRfYXR0cmlidXRlJDtcbiIpOwotICBpZiAoV2Fu
dHNIYXNQcm9wZXJ0eSgpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgIHZhcmlhYmxl
c18sCi0gICAgICAgICIvLy8gVGVzdCB0byBzZWUgaWYgQGMgJG5hbWUkIGhhcyBiZWVuIHNldC5c
biIKLSAgICAgICAgIkBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSkgQk9PTCBoYXMkY2Fw
aXRhbGl6ZWRfbmFtZSQkZGVwcmVjYXRlZF9hdHRyaWJ1dGUkO1xuIik7Ci0gIH0KLSAgaWYgKElz
SW5pdE5hbWUodmFyaWFibGVzXy5maW5kKCJuYW1lIiktPnNlY29uZCkpIHsKLSAgICAvLyBJZiBw
cm9wZXJ0eSBuYW1lIHN0YXJ0cyB3aXRoIGluaXQgd2UgbmVlZCB0byBhbm5vdGF0ZSBpdCB0byBn
ZXQgcGFzdCBBUkMuCi0gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8x
ODcyMzIyNi9ob3ctZG8taS1hbm5vdGF0ZS1hbi1vYmplY3RpdmUtYy1wcm9wZXJ0eS13aXRoLWFu
LW9iamMtbWV0aG9kLWZhbWlseS8xODcyMzIyNyMxODcyMzIyNwotICAgIHByaW50ZXItPlByaW50
KHZhcmlhYmxlc18sCi0gICAgICAgICAgICAgICAgICAgIi0gKCRwcm9wZXJ0eV90eXBlJCAqKSRu
YW1lJCBHUEJfTUVUSE9EX0ZBTUlMWV9OT05FJGRlcHJlY2F0ZWRfYXR0cmlidXRlJDtcbiIpOwot
ICB9Ci0gIHByaW50ZXItPlByaW50KCJcbiIpOwotfQotCi1SZXBlYXRlZEZpZWxkR2VuZXJhdG9y
OjpSZXBlYXRlZEZpZWxkR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVz
Y3JpcHRvciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IE9iakNPYmpGaWVsZEdlbmVy
YXRvcihkZXNjcmlwdG9yLCBvcHRpb25zKSB7Ci0gIC8vIERlZmF1bHQgdG8gbm8gY29tbWVudCBh
bmQgbGV0IHRoZSBjYXNlcyBuZWVkaW5nIGl0IGZpbGwgaXQgaW4uCi0gIHZhcmlhYmxlc19bImFy
cmF5X2NvbW1lbnQiXSA9ICIiOwotfQotCi1SZXBlYXRlZEZpZWxkR2VuZXJhdG9yOjp+UmVwZWF0
ZWRGaWVsZEdlbmVyYXRvcigpIHt9Ci0KLXZvaWQgUmVwZWF0ZWRGaWVsZEdlbmVyYXRvcjo6Rmlu
aXNoSW5pdGlhbGl6YXRpb24odm9pZCkgewotICBGaWVsZEdlbmVyYXRvcjo6RmluaXNoSW5pdGlh
bGl6YXRpb24oKTsKLSAgaWYgKHZhcmlhYmxlc18uZmluZCgiYXJyYXlfcHJvcGVydHlfdHlwZSIp
ID09IHZhcmlhYmxlc18uZW5kKCkpIHsKLSAgICB2YXJpYWJsZXNfWyJhcnJheV9wcm9wZXJ0eV90
eXBlIl0gPSB2YXJpYWJsZSgiYXJyYXlfc3RvcmFnZV90eXBlIik7Ci0gIH0KLX0KLQotdm9pZCBS
ZXBlYXRlZEZpZWxkR2VuZXJhdG9yOjpHZW5lcmF0ZUZpZWxkU3RvcmFnZURlY2xhcmF0aW9uKAot
ICAgIGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlh
Ymxlc18sICIkYXJyYXlfc3RvcmFnZV90eXBlJCAqJG5hbWUkO1xuIik7Ci19Ci0KLXZvaWQgUmVw
ZWF0ZWRGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVQcm9wZXJ0eUltcGxlbWVudGF0aW9uKAotICAg
IGlvOjpQcmludGVyKiBwcmludGVyKSBjb25zdCB7Ci0gIHByaW50ZXItPlByaW50KHZhcmlhYmxl
c18sICJAZHluYW1pYyAkbmFtZSQsICRuYW1lJF9Db3VudDtcbiIpOwotfQotCi12b2lkIFJlcGVh
dGVkRmllbGRHZW5lcmF0b3I6OkdlbmVyYXRlUHJvcGVydHlEZWNsYXJhdGlvbigKLSAgICBpbzo6
UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotCi0gIC8vIFJlcGVhdGVkIGZpZWxkcyBkb24ndCBu
ZWVkIHRoZSBoYXMqIHByb3BlcnRpZXMsIGJ1dCB0aGV5IGRvIGV4cG9zZSBhCi0gIC8vICpDb3Vu
dCAodG8gY2hlY2sgd2l0aG91dCBhdXRvY3JlYXRpb24pLiAgU28gZm9yIHRoZSBmaWVsZCBwcm9w
ZXJ0eSB3ZSBuZWVkCi0gIC8vIHRoZSBzYW1lIGxvZ2ljIGFzIE9iakNPYmpGaWVsZEdlbmVyYXRv
cjo6R2VuZXJhdGVQcm9wZXJ0eURlY2xhcmF0aW9uKCkgZm9yCi0gIC8vIGRlYWxpbmcgd2l0aCBu
ZWVkaW5nIE9iamVjdGl2ZSBDJ3MgcnVsZXMgYXJvdW5kIHN0b3JhZ2UgbmFtZSBjb252ZW50aW9u
cwotICAvLyAoaW5pdCosIG5ldyosIGV0Yy4pCi0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICB2
YXJpYWJsZXNfLAotICAgICAgIiRjb21tZW50cyQiCi0gICAgICAiJGFycmF5X2NvbW1lbnQkIgot
ICAgICAgIkBwcm9wZXJ0eShub25hdG9taWMsIHJlYWR3cml0ZSwgc3Ryb25nLCBudWxsX3Jlc2V0
dGFibGUpICRhcnJheV9wcm9wZXJ0eV90eXBlJCAqJG5hbWUkJHN0b3JhZ2VfYXR0cmlidXRlJCRk
ZXByZWNhdGVkX2F0dHJpYnV0ZSQ7XG4iCi0gICAgICAiLy8vIFRoZSBudW1iZXIgb2YgaXRlbXMg
aW4gQGMgJG5hbWUkIHdpdGhvdXQgY2F1c2luZyB0aGUgYXJyYXkgdG8gYmUgY3JlYXRlZC5cbiIK
LSAgICAgICJAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciAkbmFtZSRf
Q291bnQkZGVwcmVjYXRlZF9hdHRyaWJ1dGUkO1xuIik7Ci0gIGlmIChJc0luaXROYW1lKHZhcmlh
Ymxlc18uZmluZCgibmFtZSIpLT5zZWNvbmQpKSB7Ci0gICAgLy8gSWYgcHJvcGVydHkgbmFtZSBz
dGFydHMgd2l0aCBpbml0IHdlIG5lZWQgdG8gYW5ub3RhdGUgaXQgdG8gZ2V0IHBhc3QgQVJDLgot
ICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTg3MjMyMjYvaG93LWRv
LWktYW5ub3RhdGUtYW4tb2JqZWN0aXZlLWMtcHJvcGVydHktd2l0aC1hbi1vYmpjLW1ldGhvZC1m
YW1pbHkvMTg3MjMyMjcjMTg3MjMyMjcKLSAgICBwcmludGVyLT5QcmludCh2YXJpYWJsZXNfLAot
ICAgICAgICAgICAgICAgICAgICItICgkYXJyYXlfcHJvcGVydHlfdHlwZSQgKikkbmFtZSQgR1BC
X01FVEhPRF9GQU1JTFlfTk9ORSRkZXByZWNhdGVkX2F0dHJpYnV0ZSQ7XG4iKTsKLSAgfQotICBw
cmludGVyLT5QcmludCgiXG4iKTsKLX0KLQotYm9vbCBSZXBlYXRlZEZpZWxkR2VuZXJhdG9yOjpX
YW50c0hhc1Byb3BlcnR5KHZvaWQpIGNvbnN0IHsKLSAgLy8gQ29uc3VtZXIgY2hlY2sgdGhlIGFy
cmF5IHNpemUvZXhpc3RhbmNlIHJhdGhlciB0aGFuIGEgaGFzIGJpdC4KLSAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFJlcGVhdGVkRmllbGRHZW5lcmF0b3I6OlJ1bnRpbWVVc2VzSGFzQml0KHZv
aWQpIGNvbnN0IHsKLSAgcmV0dXJuIGZhbHNlOyAgLy8gVGhlIGFycmF5IGhhdmluZyBhbnl0aGlu
ZyBpcyB3aGF0IGlzIHVzZWQuCi19Ci0KLUZpZWxkR2VuZXJhdG9yTWFwOjpGaWVsZEdlbmVyYXRv
ck1hcChjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBkZXNjcmlwdG9y
XyhkZXNjcmlwdG9yKSwKLSAgICAgIGZpZWxkX2dlbmVyYXRvcnNfKAotICAgICAgICAgIG5ldyBz
Y29wZWRfcHRyPEZpZWxkR2VuZXJhdG9yPltkZXNjcmlwdG9yLT5maWVsZF9jb3VudCgpXSksCi0g
ICAgICBleHRlbnNpb25fZ2VuZXJhdG9yc18oCi0gICAgICAgICAgbmV3IHNjb3BlZF9wdHI8Rmll
bGRHZW5lcmF0b3I+W2Rlc2NyaXB0b3ItPmV4dGVuc2lvbl9jb3VudCgpXSkgewotICAvLyBDb25z
dHJ1Y3QgYWxsIHRoZSBGaWVsZEdlbmVyYXRvcnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVz
Y3JpcHRvci0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgZmllbGRfZ2VuZXJhdG9yc19baV0u
cmVzZXQoCi0gICAgICAgIEZpZWxkR2VuZXJhdG9yOjpNYWtlKGRlc2NyaXB0b3ItPmZpZWxkKGkp
LCBvcHRpb25zKSk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5leHRl
bnNpb25fY291bnQoKTsgaSsrKSB7Ci0gICAgZXh0ZW5zaW9uX2dlbmVyYXRvcnNfW2ldLnJlc2V0
KAotICAgICAgICBGaWVsZEdlbmVyYXRvcjo6TWFrZShkZXNjcmlwdG9yLT5leHRlbnNpb24oaSks
IG9wdGlvbnMpKTsKLSAgfQotfQotCi1GaWVsZEdlbmVyYXRvck1hcDo6fkZpZWxkR2VuZXJhdG9y
TWFwKCkge30KLQotY29uc3QgRmllbGRHZW5lcmF0b3ImIEZpZWxkR2VuZXJhdG9yTWFwOjpnZXQo
Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgewotICBHT09HTEVfQ0hF
Q0tfRVEoZmllbGQtPmNvbnRhaW5pbmdfdHlwZSgpLCBkZXNjcmlwdG9yXyk7Ci0gIHJldHVybiAq
ZmllbGRfZ2VuZXJhdG9yc19bZmllbGQtPmluZGV4KCldOwotfQotCi1jb25zdCBGaWVsZEdlbmVy
YXRvciYgRmllbGRHZW5lcmF0b3JNYXA6OmdldF9leHRlbnNpb24oaW50IGluZGV4KSBjb25zdCB7
Ci0gIHJldHVybiAqZXh0ZW5zaW9uX2dlbmVyYXRvcnNfW2luZGV4XTsKLX0KLQotaW50IEZpZWxk
R2VuZXJhdG9yTWFwOjpDYWxjdWxhdGVIYXNCaXRzKHZvaWQpIHsKLSAgaW50IHRvdGFsX2JpdHMg
PSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBp
KyspIHsKLSAgICBpZiAoZmllbGRfZ2VuZXJhdG9yc19baV0tPlJ1bnRpbWVVc2VzSGFzQml0KCkp
IHsKLSAgICAgIGZpZWxkX2dlbmVyYXRvcnNfW2ldLT5TZXRSdW50aW1lSGFzQml0KHRvdGFsX2Jp
dHMpOwotICAgICAgKyt0b3RhbF9iaXRzOwotICAgIH0gZWxzZSB7Ci0gICAgICBmaWVsZF9nZW5l
cmF0b3JzX1tpXS0+U2V0Tm9IYXNCaXQoKTsKLSAgICB9Ci0gICAgaW50IGV4dHJhX2JpdHMgPSBm
aWVsZF9nZW5lcmF0b3JzX1tpXS0+RXh0cmFSdW50aW1lSGFzQml0c05lZWRlZCgpOwotICAgIGlm
IChleHRyYV9iaXRzKSB7Ci0gICAgICBmaWVsZF9nZW5lcmF0b3JzX1tpXS0+U2V0RXh0cmFSdW50
aW1lSGFzQml0c0Jhc2UodG90YWxfYml0cyk7Ci0gICAgICB0b3RhbF9iaXRzICs9IGV4dHJhX2Jp
dHM7Ci0gICAgfQotICB9Ci0gIHJldHVybiB0b3RhbF9iaXRzOwotfQotCi12b2lkIEZpZWxkR2Vu
ZXJhdG9yTWFwOjpTZXRPbmVvZkluZGV4QmFzZShpbnQgaW5kZXhfYmFzZSkgewotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBmaWVs
ZF9nZW5lcmF0b3JzX1tpXS0+U2V0T25lb2ZJbmRleEJhc2UoaW5kZXhfYmFzZSk7Ci0gIH0KLX0K
LQotYm9vbCBGaWVsZEdlbmVyYXRvck1hcDo6RG9lc0FueUZpZWxkSGF2ZU5vblplcm9EZWZhdWx0
KHZvaWQpIGNvbnN0IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRf
Y291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKEhhc05vblplcm9EZWZhdWx0VmFsdWUoZGVzY3JpcHRv
cl8tPmZpZWxkKGkpKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcmV0
dXJuIGZhbHNlOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugb2JqZWN0aXZlYwotfSAgLy8gbmFtZXNw
YWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVj
L29iamVjdGl2ZWNfZmllbGQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3Rp
dmVjL29iamVjdGl2ZWNfZmllbGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNh
NGIxYjZlMjA4Yzc3OGIyYWY2YzFhNjBkODBkMDk5ZjJmNDRkZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIv
b2JqZWN0aXZlYy9vYmplY3RpdmVjX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xF
X1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfRklFTERfSF9fCi0jZGVmaW5lIEdPT0dMRV9Q
Uk9UT0JVRl9DT01QSUxFUl9PQkpFQ1RJVkVDX0ZJRUxEX0hfXwotCi0jaW5jbHVkZSA8bWFwPgot
I2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2Jq
ZWN0aXZlYy9vYmplY3RpdmVjX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1uYW1lc3BhY2Ug
aW8gewotY2xhc3MgUHJpbnRlcjsgIC8vIHByaW50ZXIuaAotfSAgLy8gbmFtZXNwYWNlIGlvCi0K
LW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ugb2JqZWN0aXZlYyB7Ci0KLWNsYXNzIEZp
ZWxkR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIHN0YXRpYyBGaWVsZEdlbmVyYXRvciogTWFrZShj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0KLSAgdmlydHVhbCB+RmllbGRHZW5lcmF0b3Io
KTsKLQotICAvLyBFeHBvc2VkIGZvciBzdWJjbGFzc2VzIHRvIGZpbGwgaW4uCi0gIHZpcnR1YWwg
dm9pZCBHZW5lcmF0ZUZpZWxkU3RvcmFnZURlY2xhcmF0aW9uKGlvOjpQcmludGVyKiBwcmludGVy
KSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVByb3BlcnR5RGVjbGFyYXRpb24o
aW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRl
UHJvcGVydHlJbXBsZW1lbnRhdGlvbihpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgPSAwOwot
Ci0gIC8vIENhbGxlZCBieSBHZW5lcmF0ZUZpZWxkRGVzY3JpcHRpb24sIGV4cG9zZWQgZm9yIGNs
YXNzZXMgdGhhdCBuZWVkIGN1c3RvbQotICAvLyBnZW5lcmF0aW9uLgotCi0gIC8vIEV4cG9zZWQg
Zm9yIHN1YmNsYXNzZXMgdG8gZXh0ZW5kLCBiYXNlIGRvZXMgbm90aGluZy4KLSAgdmlydHVhbCB2
b2lkIEdlbmVyYXRlQ0Z1bmN0aW9uRGVjbGFyYXRpb25zKGlvOjpQcmludGVyKiBwcmludGVyKSBj
b25zdDsKLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlQ0Z1bmN0aW9uSW1wbGVtZW50YXRpb25zKGlv
OjpQcmludGVyKiBwcmludGVyKSBjb25zdDsKLQotICAvLyBFeHBvc2VkIGZvciBzdWJjbGFzc2Vz
LCBzaG91bGQgYWx3YXlzIGNhbGwgaXQgb24gdGhlIHBhcmVudCBjbGFzcyBhbHNvLgotICB2aXJ0
dWFsIHZvaWQgRGV0ZXJtaW5lRm9yd2FyZERlY2xhcmF0aW9ucyhzZXQ8c3RyaW5nPiogZndkX2Rl
Y2xzKSBjb25zdDsKLQotICAvLyBVc2VkIGR1cmluZyBnZW5lcmF0aW9uLCBub3QgaW50ZW5kZWQg
dG8gYmUgZXh0ZW5kZWQgYnkgc3ViY2xhc3Nlcy4KLSAgdm9pZCBHZW5lcmF0ZUZpZWxkRGVzY3Jp
cHRpb24oCi0gICAgICBpbzo6UHJpbnRlciogcHJpbnRlciwgYm9vbCBpbmNsdWRlX2RlZmF1bHQp
IGNvbnN0OwotICB2b2lkIEdlbmVyYXRlRmllbGROdW1iZXJDb25zdGFudChpbzo6UHJpbnRlciog
cHJpbnRlcikgY29uc3Q7Ci0KLSAgLy8gRXhwb3NlZCB0byBnZXQgYW5kIHNldCB0aGUgaGFzIGJp
dHMgaW5mb3JtYXRpb24uCi0gIHZpcnR1YWwgYm9vbCBSdW50aW1lVXNlc0hhc0JpdCh2b2lkKSBj
b25zdCA9IDA7Ci0gIHZvaWQgU2V0UnVudGltZUhhc0JpdChpbnQgaGFzX2luZGV4KTsKLSAgdm9p
ZCBTZXROb0hhc0JpdCh2b2lkKTsKLSAgdmlydHVhbCBpbnQgRXh0cmFSdW50aW1lSGFzQml0c05l
ZWRlZCh2b2lkKSBjb25zdDsKLSAgdmlydHVhbCB2b2lkIFNldEV4dHJhUnVudGltZUhhc0JpdHNC
YXNlKGludCBpbmRleF9iYXNlKTsKLSAgdm9pZCBTZXRPbmVvZkluZGV4QmFzZShpbnQgaW5kZXhf
YmFzZSk7Ci0KLSAgc3RyaW5nIHZhcmlhYmxlKGNvbnN0IGNoYXIqIGtleSkgY29uc3QgewotICAg
IHJldHVybiB2YXJpYWJsZXNfLmZpbmQoa2V5KS0+c2Vjb25kOwotICB9Ci0KLSAgYm9vbCBuZWVk
c190ZXh0Zm9ybWF0X25hbWVfc3VwcG9ydCgpIGNvbnN0IHsKLSAgICBjb25zdCBzdHJpbmcmIGZp
ZWxkX2ZsYWdzID0gdmFyaWFibGUoImZpZWxkZmxhZ3MiKTsKLSAgICByZXR1cm4gZmllbGRfZmxh
Z3MuZmluZCgiR1BCRmllbGRUZXh0Rm9ybWF0TmFtZUN1c3RvbSIpICE9IHN0cmluZzo6bnBvczsK
LSAgfQotICBzdHJpbmcgZ2VuZXJhdGVkX29iamNfbmFtZSgpIGNvbnN0IHsgcmV0dXJuIHZhcmlh
YmxlKCJuYW1lIik7IH0KLSAgc3RyaW5nIHJhd19maWVsZF9uYW1lKCkgY29uc3QgeyByZXR1cm4g
dmFyaWFibGUoInJhd19maWVsZF9uYW1lIik7IH0KLQotIHByb3RlY3RlZDoKLSAgRmllbGRHZW5l
cmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBPcHRpb25zJiBv
cHRpb25zKTsKLQotICB2aXJ0dWFsIHZvaWQgRmluaXNoSW5pdGlhbGl6YXRpb24odm9pZCk7Ci0g
IHZpcnR1YWwgYm9vbCBXYW50c0hhc1Byb3BlcnR5KHZvaWQpIGNvbnN0ID0gMDsKLQotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZh
cmlhYmxlc187Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RP
UlMoRmllbGRHZW5lcmF0b3IpOwotfTsKLQotY2xhc3MgU2luZ2xlRmllbGRHZW5lcmF0b3IgOiBw
dWJsaWMgRmllbGRHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+U2luZ2xlRmllbGRH
ZW5lcmF0b3IoKTsKLQotICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVGaWVsZFN0b3JhZ2VEZWNsYXJh
dGlvbihpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3Q7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0
ZVByb3BlcnR5RGVjbGFyYXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gIHZp
cnR1YWwgdm9pZCBHZW5lcmF0ZVByb3BlcnR5SW1wbGVtZW50YXRpb24oaW86OlByaW50ZXIqIHBy
aW50ZXIpIGNvbnN0OwotCi0gIHZpcnR1YWwgYm9vbCBSdW50aW1lVXNlc0hhc0JpdCh2b2lkKSBj
b25zdDsKLQotIHByb3RlY3RlZDoKLSAgU2luZ2xlRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRp
b25zJiBvcHRpb25zKTsKLSAgdmlydHVhbCBib29sIFdhbnRzSGFzUHJvcGVydHkodm9pZCkgY29u
c3Q7Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoU2lu
Z2xlRmllbGRHZW5lcmF0b3IpOwotfTsKLQotLy8gU3ViY2xhc3Mgd2l0aCBjb21tb24gc3VwcG9y
dCBmb3Igd2hlbiB0aGUgZmllbGQgZW5kcyB1cCBhcyBhbiBPYmpDIE9iamVjdC4KLWNsYXNzIE9i
akNPYmpGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBTaW5nbGVGaWVsZEdlbmVyYXRvciB7Ci0gcHVi
bGljOgotICB2aXJ0dWFsIH5PYmpDT2JqRmllbGRHZW5lcmF0b3IoKTsKLQotICB2aXJ0dWFsIHZv
aWQgR2VuZXJhdGVGaWVsZFN0b3JhZ2VEZWNsYXJhdGlvbihpbzo6UHJpbnRlciogcHJpbnRlcikg
Y29uc3Q7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVByb3BlcnR5RGVjbGFyYXRpb24oaW86OlBy
aW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gcHJvdGVjdGVkOgotICBPYmpDT2JqRmllbGRHZW5l
cmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0KLSBwcml2YXRlOgotICBHT09HTEVf
RElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoT2JqQ09iakZpZWxkR2VuZXJhdG9yKTsKLX07Ci0K
LWNsYXNzIFJlcGVhdGVkRmllbGRHZW5lcmF0b3IgOiBwdWJsaWMgT2JqQ09iakZpZWxkR2VuZXJh
dG9yIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgflJlcGVhdGVkRmllbGRHZW5lcmF0b3IoKTsKLQot
ICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVGaWVsZFN0b3JhZ2VEZWNsYXJhdGlvbihpbzo6UHJpbnRl
ciogcHJpbnRlcikgY29uc3Q7Ci0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZVByb3BlcnR5RGVjbGFy
YXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gIHZpcnR1YWwgdm9pZCBHZW5l
cmF0ZVByb3BlcnR5SW1wbGVtZW50YXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0Owot
Ci0gIHZpcnR1YWwgYm9vbCBSdW50aW1lVXNlc0hhc0JpdCh2b2lkKSBjb25zdDsKLQotIHByb3Rl
Y3RlZDoKLSAgUmVwZWF0ZWRGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9u
cyk7Ci0gIHZpcnR1YWwgdm9pZCBGaW5pc2hJbml0aWFsaXphdGlvbih2b2lkKTsKLSAgdmlydHVh
bCBib29sIFdhbnRzSGFzUHJvcGVydHkodm9pZCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBHT09H
TEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUmVwZWF0ZWRGaWVsZEdlbmVyYXRvcik7Ci19
OwotCi0vLyBDb252ZW5pZW5jZSBjbGFzcyB3aGljaCBjb25zdHJ1Y3RzIEZpZWxkR2VuZXJhdG9y
cyBmb3IgYSBEZXNjcmlwdG9yLgotY2xhc3MgRmllbGRHZW5lcmF0b3JNYXAgewotIHB1YmxpYzoK
LSAgRmllbGRHZW5lcmF0b3JNYXAoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3Qg
T3B0aW9ucyYgb3B0aW9ucyk7Ci0gIH5GaWVsZEdlbmVyYXRvck1hcCgpOwotCi0gIGNvbnN0IEZp
ZWxkR2VuZXJhdG9yJiBnZXQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0g
IGNvbnN0IEZpZWxkR2VuZXJhdG9yJiBnZXRfZXh0ZW5zaW9uKGludCBpbmRleCkgY29uc3Q7Ci0K
LSAgLy8gQXNzaWducyB0aGUgaGFzIGJpdHMgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRz
IG5lZWRlZC4KLSAgaW50IENhbGN1bGF0ZUhhc0JpdHModm9pZCk7Ci0KLSAgdm9pZCBTZXRPbmVv
ZkluZGV4QmFzZShpbnQgaW5kZXhfYmFzZSk7Ci0KLSAgLy8gQ2hlY2sgaWYgYW55IGZpZWxkIG9m
IHRoaXMgbWVzc2FnZSBoYXMgYSBub24gemVybyBkZWZhdWx0LgotICBib29sIERvZXNBbnlGaWVs
ZEhhdmVOb25aZXJvRGVmYXVsdCh2b2lkKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGNvbnN0IERl
c2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICBzY29wZWRfYXJyYXk8c2NvcGVkX3B0cjxGaWVsZEdl
bmVyYXRvcj4gPiBmaWVsZF9nZW5lcmF0b3JzXzsKLSAgc2NvcGVkX2FycmF5PHNjb3BlZF9wdHI8
RmllbGRHZW5lcmF0b3I+ID4gZXh0ZW5zaW9uX2dlbmVyYXRvcnNfOwotCi0gIEdPT0dMRV9ESVNB
TExPV19FVklMX0NPTlNUUlVDVE9SUyhGaWVsZEdlbmVyYXRvck1hcCk7Ci19OwotfSAgLy8gbmFt
ZXNwYWNlIG9iamVjdGl2ZWMKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNw
YWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9Q
Uk9UT0JVRl9DT01QSUxFUl9PQkpFQ1RJVkVDX0ZJRUxEX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWxlLmNjIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWxlLmNjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRmYzZhM2EyNWMyM2Q5YWRlZmU3ODM2NGNm
MjNlNjJhODBmZjczLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZmls
ZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDM4MiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmpl
Y3RpdmVjL29iamVjdGl2ZWNfZmlsZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZXh0ZW5zaW9uLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19tZXNzYWdl
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvZGVfZ2VuZXJhdG9yLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL3N0bF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLS8vIFRoaXMgaXMgYWxzbyBmb3VuZCBpbiBHUEJCb290
c3RyYXAuaCwgYW5kIG5lZWRzIHRvIGJlIGtlcHQgaW4gc3luYy4gIEl0Ci0vLyBpcyB0aGUgdmVy
c2lvbiBjaGVjayBkb25lIHRvIGVuc3VyZSBnZW5lcmF0ZWQgY29kZSB3b3JrcyB3aXRoIHRoZSBj
dXJyZW50Ci0vLyBydW50aW1lIGJlaW5nIHVzZWQuCi1jb25zdCBpbnQzMiBHT09HTEVfUFJPVE9C
VUZfT0JKQ19HRU5fVkVSU0lPTiA9IDMwMDAxOwotCi1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFt
ZXNwYWNlIG9iamVjdGl2ZWMgewotCi1GaWxlR2VuZXJhdG9yOjpGaWxlR2VuZXJhdG9yKGNvbnN0
IEZpbGVEZXNjcmlwdG9yICpmaWxlLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKQotICAgIDogZmls
ZV8oZmlsZSksCi0gICAgICByb290X2NsYXNzX25hbWVfKEZpbGVDbGFzc05hbWUoZmlsZSkpLAot
ICAgICAgaXNfcHVibGljX2RlcF8oZmFsc2UpLAotICAgICAgb3B0aW9uc18ob3B0aW9ucykgewot
ICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5lbnVtX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0g
ICAgRW51bUdlbmVyYXRvciAqZ2VuZXJhdG9yID0gbmV3IEVudW1HZW5lcmF0b3IoZmlsZV8tPmVu
dW1fdHlwZShpKSk7Ci0gICAgZW51bV9nZW5lcmF0b3JzXy5wdXNoX2JhY2soZ2VuZXJhdG9yKTsK
LSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKTsg
aSsrKSB7Ci0gICAgTWVzc2FnZUdlbmVyYXRvciAqZ2VuZXJhdG9yID0KLSAgICAgICAgbmV3IE1l
c3NhZ2VHZW5lcmF0b3Iocm9vdF9jbGFzc19uYW1lXywgZmlsZV8tPm1lc3NhZ2VfdHlwZShpKSwg
b3B0aW9uc18pOwotICAgIG1lc3NhZ2VfZ2VuZXJhdG9yc18ucHVzaF9iYWNrKGdlbmVyYXRvcik7
Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+ZXh0ZW5zaW9uX2NvdW50KCk7IGkr
KykgewotICAgIEV4dGVuc2lvbkdlbmVyYXRvciAqZ2VuZXJhdG9yID0KLSAgICAgICAgbmV3IEV4
dGVuc2lvbkdlbmVyYXRvcihyb290X2NsYXNzX25hbWVfLCBmaWxlXy0+ZXh0ZW5zaW9uKGkpKTsK
LSAgICBleHRlbnNpb25fZ2VuZXJhdG9yc18ucHVzaF9iYWNrKGdlbmVyYXRvcik7Ci0gIH0KLX0K
LQotRmlsZUdlbmVyYXRvcjo6fkZpbGVHZW5lcmF0b3IoKSB7Ci0gIFNUTERlbGV0ZUNvbnRhaW5l
clBvaW50ZXJzKGRlcGVuZGVuY3lfZ2VuZXJhdG9yc18uYmVnaW4oKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVwZW5kZW5jeV9nZW5lcmF0b3JzXy5lbmQoKSk7Ci0gIFNUTERlbGV0
ZUNvbnRhaW5lclBvaW50ZXJzKGVudW1fZ2VuZXJhdG9yc18uYmVnaW4oKSwgZW51bV9nZW5lcmF0
b3JzXy5lbmQoKSk7Ci0gIFNUTERlbGV0ZUNvbnRhaW5lclBvaW50ZXJzKG1lc3NhZ2VfZ2VuZXJh
dG9yc18uYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9nZW5l
cmF0b3JzXy5lbmQoKSk7Ci0gIFNUTERlbGV0ZUNvbnRhaW5lclBvaW50ZXJzKGV4dGVuc2lvbl9n
ZW5lcmF0b3JzXy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNp
b25fZ2VuZXJhdG9yc18uZW5kKCkpOwotfQotCi12b2lkIEZpbGVHZW5lcmF0b3I6OkdlbmVyYXRl
SGVhZGVyKGlvOjpQcmludGVyICpwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAg
Ii8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVE
SVQhXG4iCi0gICAgICAiLy8gc291cmNlOiAkZmlsZW5hbWUkXG4iCi0gICAgICAiXG4iLAotICAg
ICAgImZpbGVuYW1lIiwgZmlsZV8tPm5hbWUoKSk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAiI2ltcG9ydCBcIkdQQlByb3RvY29sQnVmZmVycy5oXCJcbiIKLSAgICAgICJcbiIpOwotCi0g
IC8vIEFkZCBzb21lIHZlcmlmaWNhdGlvbiB0aGF0IHRoZSBnZW5lcmF0ZWQgY29kZSBtYXRjaGVz
IHRoZSBzb3VyY2UgdGhlCi0gIC8vIGNvZGUgaXMgYmVpbmcgY29tcGlsZWQgd2l0aC4KLSAgcHJp
bnRlci0+UHJpbnQoCi0gICAgICAiI2lmIEdPT0dMRV9QUk9UT0JVRl9PQkpDX0dFTl9WRVJTSU9O
ICE9ICRwcm90b2NfZ2VuX29iamNfdmVyc2lvbiRcbiIKLSAgICAgICIjZXJyb3IgVGhpcyBmaWxl
IHdhcyBnZW5lcmF0ZWQgYnkgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBwcm90b2Mgd2hpY2ggaXMg
aW5jb21wYXRpYmxlIHdpdGggeW91ciBQcm90b2NvbCBCdWZmZXIgbGlicmFyeSBzb3VyY2VzLlxu
IgotICAgICAgIiNlbmRpZlxuIgotICAgICAgIlxuIiwKLSAgICAgICJwcm90b2NfZ2VuX29iamNf
dmVyc2lvbiIsCi0gICAgICBTaW1wbGVJdG9hKEdPT0dMRV9QUk9UT0JVRl9PQkpDX0dFTl9WRVJT
SU9OKSk7Ci0KLSAgY29uc3QgdmVjdG9yPEZpbGVHZW5lcmF0b3IgKj4gJmRlcGVuZGVuY3lfZ2Vu
ZXJhdG9ycyA9IERlcGVuZGVuY3lHZW5lcmF0b3JzKCk7Ci0gIGZvciAodmVjdG9yPEZpbGVHZW5l
cmF0b3IgKj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPQotICAgICAgICAgICBkZXBlbmRlbmN5X2dl
bmVyYXRvcnMuYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IGRlcGVuZGVuY3lfZ2VuZXJhdG9ycy5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgaWYgKCgqaXRlciktPklzUHVibGljRGVwZW5kZW5jeSgpKSB7
Ci0gICAgICBwcmludGVyLT5QcmludCgiI2ltcG9ydCBcIiRoZWFkZXIkLnBib2JqYy5oXCJcbiIs
Ci0gICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIiwgKCppdGVyKS0+UGF0aCgpKTsKLSAgICB9
Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAgICIvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoaW1wb3J0cylcbiIKLSAgICAgICJcbiIKLSAgICAgICIjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaFxuIgotICAgICAgIiNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwi
LVdkZXByZWNhdGVkLWRlY2xhcmF0aW9uc1wiXG4iCi0gICAgICAiXG4iCi0gICAgICAiQ0ZfRVhU
RVJOX0NfQkVHSU5cbiIKLSAgICAgICJcbiIpOwotCi0gIHNldDxzdHJpbmc+IGZ3ZF9kZWNsczsK
LSAgZm9yICh2ZWN0b3I8TWVzc2FnZUdlbmVyYXRvciAqPjo6aXRlcmF0b3IgaXRlciA9IG1lc3Nh
Z2VfZ2VuZXJhdG9yc18uYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IG1lc3NhZ2VfZ2VuZXJhdG9y
c18uZW5kKCk7ICsraXRlcikgewotICAgICgqaXRlciktPkRldGVybWluZUZvcndhcmREZWNsYXJh
dGlvbnMoJmZ3ZF9kZWNscyk7Ci0gIH0KLSAgZm9yIChzZXQ8c3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgaShmd2RfZGVjbHMuYmVnaW4oKSk7Ci0gICAgICAgaSAhPSBmd2RfZGVjbHMuZW5kKCk7ICsr
aSkgewotICAgIHByaW50ZXItPlByaW50KCIkdmFsdWUkO1xuIiwgInZhbHVlIiwgKmkpOwotICB9
Ci0gIGlmIChmd2RfZGVjbHMuYmVnaW4oKSAhPSBmd2RfZGVjbHMuZW5kKCkpIHsKLSAgICBwcmlu
dGVyLT5QcmludCgiXG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICAgIk5TX0FT
U1VNRV9OT05OVUxMX0JFR0lOXG4iCi0gICAgICAiXG4iKTsKLQotICAvLyBuZWVkIHRvIHdyaXRl
IG91dCBhbGwgZW51bXMgZmlyc3QKLSAgZm9yICh2ZWN0b3I8RW51bUdlbmVyYXRvciAqPjo6aXRl
cmF0b3IgaXRlciA9IGVudW1fZ2VuZXJhdG9yc18uYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IGVu
dW1fZ2VuZXJhdG9yc18uZW5kKCk7ICsraXRlcikgewotICAgICgqaXRlciktPkdlbmVyYXRlSGVh
ZGVyKHByaW50ZXIpOwotICB9Ci0KLSAgZm9yICh2ZWN0b3I8TWVzc2FnZUdlbmVyYXRvciAqPjo6
aXRlcmF0b3IgaXRlciA9IG1lc3NhZ2VfZ2VuZXJhdG9yc18uYmVnaW4oKTsKLSAgICAgICBpdGVy
ICE9IG1lc3NhZ2VfZ2VuZXJhdG9yc18uZW5kKCk7ICsraXRlcikgewotICAgICgqaXRlciktPkdl
bmVyYXRlRW51bUhlYWRlcihwcmludGVyKTsKLSAgfQotCi0gIC8vIEZvciBleHRlbnNpb25zIHRv
IGNoYWluIHRvZ2V0aGVyLCB0aGUgUm9vdCBnZXRzIGNyZWF0ZWQgZXZlbiBpZiB0aGVyZQotICAv
LyBhcmUgbm8gZXh0ZW5zaW9ucy4KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiI3ByYWdtYSBt
YXJrIC0gJHJvb3RfY2xhc3NfbmFtZSRcbiIKLSAgICAgICJcbiIKLSAgICAgICIvLy8gRXhwb3Nl
cyB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IGZvciB0aGlzIGZpbGUuXG4iCi0gICAgICAiLy8vXG4i
Ci0gICAgICAiLy8vIFRoZSBiYXNlIGNsYXNzIHByb3ZpZGVzOlxuIgotICAgICAgIi8vLyBAY29k
ZVxuIgotICAgICAgIi8vLyAgICsgKEdQQkV4dGVuc2lvblJlZ2lzdHJ5ICopZXh0ZW5zaW9uUmVn
aXN0cnk7XG4iCi0gICAgICAiLy8vIEBlbmRjb2RlXG4iCi0gICAgICAiLy8vIHdoaWNoIGlzIGEg
QGMgR1BCRXh0ZW5zaW9uUmVnaXN0cnkgdGhhdCBpbmNsdWRlcyBhbGwgdGhlIGV4dGVuc2lvbnMg
ZGVmaW5lZCBieVxuIgotICAgICAgIi8vLyB0aGlzIGZpbGUgYW5kIGFsbCBmaWxlcyB0aGF0IGl0
IGRlcGVuZHMgb24uXG4iCi0gICAgICAiQGludGVyZmFjZSAkcm9vdF9jbGFzc19uYW1lJCA6IEdQ
QlJvb3RPYmplY3RcbiIKLSAgICAgICJAZW5kXG4iCi0gICAgICAiXG4iLAotICAgICAgInJvb3Rf
Y2xhc3NfbmFtZSIsIHJvb3RfY2xhc3NfbmFtZV8pOwotCi0gIGlmIChleHRlbnNpb25fZ2VuZXJh
dG9yc18uc2l6ZSgpID4gMCkgewotICAgIC8vIFRoZSBkeW5hbWljIG1ldGhvZHMgYmxvY2sgaXMg
b25seSBuZWVkZWQgaWYgdGhlcmUgYXJlIGV4dGVuc2lvbnMuCi0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAgICJAaW50ZXJmYWNlICRyb290X2NsYXNzX25hbWUkIChEeW5hbWljTWV0aG9kcylc
biIsCi0gICAgICAgICJyb290X2NsYXNzX25hbWUiLCByb290X2NsYXNzX25hbWVfKTsKLQotICAg
IGZvciAodmVjdG9yPEV4dGVuc2lvbkdlbmVyYXRvciAqPjo6aXRlcmF0b3IgaXRlciA9Ci0gICAg
ICAgICAgICAgZXh0ZW5zaW9uX2dlbmVyYXRvcnNfLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9
IGV4dGVuc2lvbl9nZW5lcmF0b3JzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAoKml0ZXIpLT5H
ZW5lcmF0ZU1lbWJlcnNIZWFkZXIocHJpbnRlcik7Ci0gICAgfQotCi0gICAgcHJpbnRlci0+UHJp
bnQoIkBlbmRcblxuIik7Ci0gIH0gIC8vIGV4dGVuc2lvbl9nZW5lcmF0b3JzXy5zaXplKCkgPiAw
Ci0KLSAgZm9yICh2ZWN0b3I8TWVzc2FnZUdlbmVyYXRvciAqPjo6aXRlcmF0b3IgaXRlciA9IG1l
c3NhZ2VfZ2VuZXJhdG9yc18uYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IG1lc3NhZ2VfZ2VuZXJh
dG9yc18uZW5kKCk7ICsraXRlcikgewotICAgICgqaXRlciktPkdlbmVyYXRlTWVzc2FnZUhlYWRl
cihwcmludGVyKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KAotICAgICAgIk5TX0FTU1VNRV9O
T05OVUxMX0VORFxuIgotICAgICAgIlxuIgotICAgICAgIkNGX0VYVEVSTl9DX0VORFxuIgotICAg
ICAgIlxuIgotICAgICAgIiNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3BcbiIKLSAgICAgICJc
biIKLSAgICAgICIvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2xvYmFsX3Njb3BlKVxuIik7
Ci19Ci0KLXZvaWQgRmlsZUdlbmVyYXRvcjo6R2VuZXJhdGVTb3VyY2UoaW86OlByaW50ZXIgKnBy
aW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiLy8gR2VuZXJhdGVkIGJ5IHRoZSBw
cm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCFcbiIKLSAgICAgICIvLyBzb3Vy
Y2U6ICRmaWxlbmFtZSRcbiIKLSAgICAgICJcbiIsCi0gICAgICAiZmlsZW5hbWUiLCBmaWxlXy0+
bmFtZSgpKTsKLQotICBzdHJpbmcgaGVhZGVyX2ZpbGUgPSBQYXRoKCkgKyAiLnBib2JqYy5oIjsK
LSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiI2ltcG9ydCBcIkdQQlByb3RvY29sQnVmZmVyc19S
dW50aW1lU3VwcG9ydC5oXCJcbiIKLSAgICAgICIjaW1wb3J0IFwiJGhlYWRlcl9maWxlJFwiXG4i
LAotICAgICAgImhlYWRlcl9maWxlIiwgaGVhZGVyX2ZpbGUpOwotICBjb25zdCB2ZWN0b3I8Rmls
ZUdlbmVyYXRvciAqPiAmZGVwZW5kZW5jeV9nZW5lcmF0b3JzID0KLSAgICAgIERlcGVuZGVuY3lH
ZW5lcmF0b3JzKCk7Ci0gIGZvciAodmVjdG9yPEZpbGVHZW5lcmF0b3IgKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPQotICAgICAgICAgICBkZXBlbmRlbmN5X2dlbmVyYXRvcnMuYmVnaW4oKTsKLSAg
ICAgICBpdGVyICE9IGRlcGVuZGVuY3lfZ2VuZXJhdG9ycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
aWYgKCEoKml0ZXIpLT5Jc1B1YmxpY0RlcGVuZGVuY3koKSkgewotICAgICAgcHJpbnRlci0+UHJp
bnQoIiNpbXBvcnQgXCIkaGVhZGVyJC5wYm9iamMuaFwiXG4iLAotICAgICAgICAgICAgICAgICAg
ICAgImhlYWRlciIsICgqaXRlciktPlBhdGgoKSk7Ci0gICAgfQotICB9Ci0gIHByaW50ZXItPlBy
aW50KAotICAgICAgIi8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbXBvcnRzKVxuIgotICAg
ICAgIlxuIgotICAgICAgIiNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoXG4iCi0gICAgICAi
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2RlcHJlY2F0ZWQtZGVjbGFyYXRp
b25zXCJcbiIKLSAgICAgICJcbiIpOwotCi0gIHByaW50ZXItPlByaW50KAotICAgICAgIiNwcmFn
bWEgbWFyayAtICRyb290X2NsYXNzX25hbWUkXG4iCi0gICAgICAiXG4iCi0gICAgICAiQGltcGxl
bWVudGF0aW9uICRyb290X2NsYXNzX25hbWUkXG5cbiIsCi0gICAgICAicm9vdF9jbGFzc19uYW1l
Iiwgcm9vdF9jbGFzc19uYW1lXyk7Ci0KLSAgLy8gR2VuZXJhdGUgdGhlIGV4dGVuc2lvbiBpbml0
aWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGZvciB0aGUgdG9wIGxldmVsIGFuZAotICAvLyBhbnkgbmVz
dGVkIG1lc3NhZ2VzLgotICBvc3RyaW5nc3RyZWFtIGV4dGVuc2lvbnNfc3RyaW5nc3RyZWFtOwot
ICBpZiAoZmlsZV8tPmV4dGVuc2lvbl9jb3VudCgpICsgZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3Vu
dCgpID4gMCkgewotICAgIGlvOjpPc3RyZWFtT3V0cHV0U3RyZWFtIGV4dGVuc2lvbnNfb3V0cHV0
c3RyZWFtKCZleHRlbnNpb25zX3N0cmluZ3N0cmVhbSk7Ci0gICAgaW86OlByaW50ZXIgZXh0ZW5z
aW9uc19wcmludGVyKCZleHRlbnNpb25zX291dHB1dHN0cmVhbSwgJyQnKTsKLSAgICBmb3IgKHZl
Y3RvcjxFeHRlbnNpb25HZW5lcmF0b3IgKj46Oml0ZXJhdG9yIGl0ZXIgPQotICAgICAgICAgICAg
IGV4dGVuc2lvbl9nZW5lcmF0b3JzXy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBleHRlbnNp
b25fZ2VuZXJhdG9yc18uZW5kKCk7ICsraXRlcikgewotICAgICAgKCppdGVyKS0+R2VuZXJhdGVT
dGF0aWNWYXJpYWJsZXNJbml0aWFsaXphdGlvbigmZXh0ZW5zaW9uc19wcmludGVyKTsKLSAgICB9
Ci0gICAgZm9yICh2ZWN0b3I8TWVzc2FnZUdlbmVyYXRvciAqPjo6aXRlcmF0b3IgaXRlciA9Ci0g
ICAgICAgICAgICAgbWVzc2FnZV9nZW5lcmF0b3JzXy5iZWdpbigpOwotICAgICAgICAgaXRlciAh
PSBtZXNzYWdlX2dlbmVyYXRvcnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICgqaXRlciktPkdl
bmVyYXRlU3RhdGljVmFyaWFibGVzSW5pdGlhbGl6YXRpb24oJmV4dGVuc2lvbnNfcHJpbnRlcik7
Ci0gICAgfQotICAgIGV4dGVuc2lvbnNfc3RyaW5nc3RyZWFtLmZsdXNoKCk7Ci0gIH0KLQotICAv
LyBJZiB0aGVyZSB3ZXJlIGFueSBleHRlbnNpb25zIG9yIHRoaXMgZmlsZSBoYXMgYW55IGRlcGVu
ZGVuY2llcywgb3V0cHV0Ci0gIC8vIGEgcmVnaXN0cnkgdG8gb3ZlcnJpZGUgdG8gY3JlYXRlIHRo
ZSBmaWxlIHNwZWNpZmljIHJlZ2lzdHJ5LgotICBjb25zdCBzdHJpbmcmIGV4dGVuc2lvbnNfc3Ry
ID0gZXh0ZW5zaW9uc19zdHJpbmdzdHJlYW0uc3RyKCk7Ci0gIGlmIChleHRlbnNpb25zX3N0ci5s
ZW5ndGgoKSA+IDAgfHwgZmlsZV8tPmRlcGVuZGVuY3lfY291bnQoKSA+IDApIHsKLSAgICBwcmlu
dGVyLT5QcmludCgKLSAgICAgICAgIisgKEdQQkV4dGVuc2lvblJlZ2lzdHJ5KilleHRlbnNpb25S
ZWdpc3RyeSB7XG4iCi0gICAgICAgICIgIC8vIFRoaXMgaXMgY2FsbGVkIGJ5ICtpbml0aWFsaXpl
IHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gd29ycnlcbiIKLSAgICAgICAgIiAgLy8gYWJvdXQgdGhy
ZWFkIHNhZmV0eSBhbmQgaW5pdGlhbGl6YXRpb24gb2YgcmVnaXN0cnkuXG4iCi0gICAgICAgICIg
IHN0YXRpYyBHUEJFeHRlbnNpb25SZWdpc3RyeSogcmVnaXN0cnkgPSBuaWw7XG4iCi0gICAgICAg
ICIgIGlmICghcmVnaXN0cnkpIHtcbiIKLSAgICAgICAgIiAgICBHUEJEZWJ1Z0NoZWNrUnVudGlt
ZVZlcnNpb24oKTtcbiIKLSAgICAgICAgIiAgICByZWdpc3RyeSA9IFtbR1BCRXh0ZW5zaW9uUmVn
aXN0cnkgYWxsb2NdIGluaXRdO1xuIik7Ci0KLSAgICBwcmludGVyLT5JbmRlbnQoKTsKLSAgICBw
cmludGVyLT5JbmRlbnQoKTsKLQotICAgIGlmIChleHRlbnNpb25zX3N0ci5sZW5ndGgoKSA+IDAp
IHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICJzdGF0aWMgR1BCRXh0ZW5zaW9u
RGVzY3JpcHRpb24gZGVzY3JpcHRpb25zW10gPSB7XG4iKTsKLSAgICAgIHByaW50ZXItPkluZGVu
dCgpOwotICAgICAgcHJpbnRlci0+UHJpbnQoZXh0ZW5zaW9uc19zdHIuY19zdHIoKSk7Ci0gICAg
ICBwcmludGVyLT5PdXRkZW50KCk7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAi
fTtcbiIKLSAgICAgICAgICAiZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZGVzY3JpcHRp
b25zKSAvIHNpemVvZihkZXNjcmlwdGlvbnNbMF0pOyArK2kpIHtcbiIKLSAgICAgICAgICAiICBH
UEJFeHRlbnNpb25EZXNjcmlwdG9yICpleHRlbnNpb24gPVxuIgotICAgICAgICAgICIgICAgICBb
W0dQQkV4dGVuc2lvbkRlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoRXh0ZW5zaW9uRGVzY3JpcHRp
b246JmRlc2NyaXB0aW9uc1tpXV07XG4iCi0gICAgICAgICAgIiAgW3JlZ2lzdHJ5IGFkZEV4dGVu
c2lvbjpleHRlbnNpb25dO1xuIgotICAgICAgICAgICIgIFtzZWxmIGdsb2JhbGx5UmVnaXN0ZXJF
eHRlbnNpb246ZXh0ZW5zaW9uXTtcbiIKLSAgICAgICAgICAiICBbZXh0ZW5zaW9uIHJlbGVhc2Vd
O1xuIgotICAgICAgICAgICJ9XG4iKTsKLSAgICB9Ci0KLSAgICBjb25zdCB2ZWN0b3I8RmlsZUdl
bmVyYXRvciAqPiAmZGVwZW5kZW5jeV9nZW5lcmF0b3JzID0KLSAgICAgICAgRGVwZW5kZW5jeUdl
bmVyYXRvcnMoKTsKLSAgICBmb3IgKHZlY3RvcjxGaWxlR2VuZXJhdG9yICo+Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0KLSAgICAgICAgICAgICBkZXBlbmRlbmN5X2dlbmVyYXRvcnMuYmVnaW4oKTsK
LSAgICAgICAgIGl0ZXIgIT0gZGVwZW5kZW5jeV9nZW5lcmF0b3JzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICJbcmVnaXN0cnkgYWRkRXh0ZW5zaW9u
czpbJGRlcGVuZGVuY3kkIGV4dGVuc2lvblJlZ2lzdHJ5XV07XG4iLAotICAgICAgICAgICJkZXBl
bmRlbmN5IiwgKCppdGVyKS0+Um9vdENsYXNzTmFtZSgpKTsKLSAgICB9Ci0KLSAgICBwcmludGVy
LT5PdXRkZW50KCk7Ci0gICAgcHJpbnRlci0+T3V0ZGVudCgpOwotCi0gICAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAgICIgIH1cbiIKLSAgICAgICAgIiAgcmV0dXJuIHJlZ2lzdHJ5O1xuIgotICAg
ICAgICAifVxuIgotICAgICAgICAiXG4iKTsKLSAgfQotCi0gIHByaW50ZXItPlByaW50KCJAZW5k
XG5cbiIpOwotCi0gIC8vIEZpbGUgZGVzY3JpcHRvciBvbmx5IG5lZWRlZCBpZiB0aGVyZSBhcmUg
bWVzc2FnZXMgdG8gdXNlIGl0LgotICBpZiAobWVzc2FnZV9nZW5lcmF0b3JzXy5zaXplKCkgPiAw
KSB7Ci0gICAgc3RyaW5nIHN5bnRheDsKLSAgICBzd2l0Y2ggKGZpbGVfLT5zeW50YXgoKSkgewot
ICAgICAgY2FzZSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFYX1VOS05PV046Ci0gICAgICAgIHN5bnRh
eCA9ICJHUEJGaWxlU3ludGF4VW5rbm93biI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBG
aWxlRGVzY3JpcHRvcjo6U1lOVEFYX1BST1RPMjoKLSAgICAgICAgc3ludGF4ID0gIkdQQkZpbGVT
eW50YXhQcm90bzIiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRmlsZURlc2NyaXB0b3I6
OlNZTlRBWF9QUk9UTzM6Ci0gICAgICAgIHN5bnRheCA9ICJHUEJGaWxlU3ludGF4UHJvdG8zIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiI3By
YWdtYSBtYXJrIC0gJHJvb3RfY2xhc3NfbmFtZSRfRmlsZURlc2NyaXB0b3JcbiIKLSAgICAgICAg
IlxuIgotICAgICAgICAic3RhdGljIEdQQkZpbGVEZXNjcmlwdG9yICokcm9vdF9jbGFzc19uYW1l
JF9GaWxlRGVzY3JpcHRvcih2b2lkKSB7XG4iCi0gICAgICAgICIgIC8vIFRoaXMgaXMgY2FsbGVk
IGJ5ICtpbml0aWFsaXplIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gd29ycnlcbiIKLSAgICAgICAg
IiAgLy8gYWJvdXQgdGhyZWFkIHNhZmV0eSBvZiB0aGUgc2luZ2xldG9uLlxuIgotICAgICAgICAi
ICBzdGF0aWMgR1BCRmlsZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBOVUxMO1xuIgotICAgICAg
ICAiICBpZiAoIWRlc2NyaXB0b3IpIHtcbiIKLSAgICAgICAgIiAgICBHUEJEZWJ1Z0NoZWNrUnVu
dGltZVZlcnNpb24oKTtcbiIKLSAgICAgICAgIiAgICBkZXNjcmlwdG9yID0gW1tHUEJGaWxlRGVz
Y3JpcHRvciBhbGxvY10gaW5pdFdpdGhQYWNrYWdlOkBcIiRwYWNrYWdlJFwiXG4iCi0gICAgICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5
bnRheDokc3ludGF4JF07XG4iCi0gICAgICAgICIgIH1cbiIKLSAgICAgICAgIiAgcmV0dXJuIGRl
c2NyaXB0b3I7XG4iCi0gICAgICAgICJ9XG4iCi0gICAgICAgICJcbiIsCi0gICAgICAgICJyb290
X2NsYXNzX25hbWUiLCByb290X2NsYXNzX25hbWVfLAotICAgICAgICAicGFja2FnZSIsIGZpbGVf
LT5wYWNrYWdlKCksCi0gICAgICAgICJzeW50YXgiLCBzeW50YXgpOwotICB9Ci0KLSAgZm9yICh2
ZWN0b3I8RW51bUdlbmVyYXRvciAqPjo6aXRlcmF0b3IgaXRlciA9IGVudW1fZ2VuZXJhdG9yc18u
YmVnaW4oKTsKLSAgICAgICBpdGVyICE9IGVudW1fZ2VuZXJhdG9yc18uZW5kKCk7ICsraXRlcikg
ewotICAgICgqaXRlciktPkdlbmVyYXRlU291cmNlKHByaW50ZXIpOwotICB9Ci0gIGZvciAodmVj
dG9yPE1lc3NhZ2VHZW5lcmF0b3IgKj46Oml0ZXJhdG9yIGl0ZXIgPSBtZXNzYWdlX2dlbmVyYXRv
cnNfLmJlZ2luKCk7Ci0gICAgICAgaXRlciAhPSBtZXNzYWdlX2dlbmVyYXRvcnNfLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAoKml0ZXIpLT5HZW5lcmF0ZVNvdXJjZShwcmludGVyKTsKLSAgfQotCi0g
IHByaW50ZXItPlByaW50KAotICAgICJcbiIKLSAgICAiI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHBvcFxuIgotICAgICJcbiIKLSAgICAiLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2Jh
bF9zY29wZSlcbiIpOwotfQotCi1jb25zdCBzdHJpbmcgRmlsZUdlbmVyYXRvcjo6UGF0aCgpIGNv
bnN0IHsgcmV0dXJuIEZpbGVQYXRoKGZpbGVfKTsgfQotCi1jb25zdCB2ZWN0b3I8RmlsZUdlbmVy
YXRvciAqPiAmRmlsZUdlbmVyYXRvcjo6RGVwZW5kZW5jeUdlbmVyYXRvcnMoKSB7Ci0gIGlmIChm
aWxlXy0+ZGVwZW5kZW5jeV9jb3VudCgpICE9IGRlcGVuZGVuY3lfZ2VuZXJhdG9yc18uc2l6ZSgp
KSB7Ci0gICAgc2V0PHN0cmluZz4gcHVibGljX2ltcG9ydF9uYW1lczsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGZpbGVfLT5wdWJsaWNfZGVwZW5kZW5jeV9jb3VudCgpOyBpKyspIHsKLSAgICAg
IHB1YmxpY19pbXBvcnRfbmFtZXMuaW5zZXJ0KGZpbGVfLT5wdWJsaWNfZGVwZW5kZW5jeShpKS0+
bmFtZSgpKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+ZGVwZW5kZW5j
eV9jb3VudCgpOyBpKyspIHsKLSAgICAgIEZpbGVHZW5lcmF0b3IgKmdlbmVyYXRvciA9Ci0gICAg
ICAgICAgbmV3IEZpbGVHZW5lcmF0b3IoZmlsZV8tPmRlcGVuZGVuY3koaSksIG9wdGlvbnNfKTsK
LSAgICAgIGNvbnN0IHN0cmluZyYgbmFtZSA9IGZpbGVfLT5kZXBlbmRlbmN5KGkpLT5uYW1lKCk7
Ci0gICAgICBib29sIHB1YmxpY19pbXBvcnQgPSAocHVibGljX2ltcG9ydF9uYW1lcy5jb3VudChu
YW1lKSAhPSAwKTsKLSAgICAgIGdlbmVyYXRvci0+U2V0SXNQdWJsaWNEZXBlbmRlbmN5KHB1Ymxp
Y19pbXBvcnQpOwotICAgICAgZGVwZW5kZW5jeV9nZW5lcmF0b3JzXy5wdXNoX2JhY2soZ2VuZXJh
dG9yKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGRlcGVuZGVuY3lfZ2VuZXJhdG9yc187Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBvYmplY3RpdmVjCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0g
IC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWxl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2Zp
bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwZmNkM2Y0MTUxMTc0NDU2ZWY0
ODdhMDRjNDNiYzUzMDQzNTU5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3Rp
dmVjX2ZpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9P
QkpFQ1RJVkVDX0ZJTEVfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9PQkpF
Q1RJVkVDX0ZJTEVfSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8c2V0PgotI2lu
Y2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0
aXZlYy9vYmplY3RpdmVjX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvY29tbW9uLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LWNsYXNzIEZpbGVEZXNjcmlwdG9yOyAgLy8gZGVzY3JpcHRvci5oCi1uYW1lc3BhY2UgaW8gewot
Y2xhc3MgUHJpbnRlcjsgIC8vIHByaW50ZXIuaAotfQotfQotCi1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBvYmplY3RpdmVjIHsKLQotY2xhc3Mg
RW51bUdlbmVyYXRvcjsKLWNsYXNzIEV4dGVuc2lvbkdlbmVyYXRvcjsKLWNsYXNzIE1lc3NhZ2VH
ZW5lcmF0b3I7Ci0KLWNsYXNzIEZpbGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgRmlsZUdlbmVy
YXRvcihjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7
Ci0gIH5GaWxlR2VuZXJhdG9yKCk7Ci0KLSAgdm9pZCBHZW5lcmF0ZVNvdXJjZShpbzo6UHJpbnRl
ciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJhdGVIZWFkZXIoaW86OlByaW50ZXIqIHByaW50ZXIp
OwotCi0gIGNvbnN0IHN0cmluZyYgUm9vdENsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuIHJvb3Rf
Y2xhc3NfbmFtZV87IH0KLSAgY29uc3Qgc3RyaW5nIFBhdGgoKSBjb25zdDsKLQotICBib29sIElz
UHVibGljRGVwZW5kZW5jeSgpIGNvbnN0IHsgcmV0dXJuIGlzX3B1YmxpY19kZXBfOyB9Ci0KLSBw
cm90ZWN0ZWQ6Ci0gIHZvaWQgU2V0SXNQdWJsaWNEZXBlbmRlbmN5KGJvb2wgaXNfcHVibGljX2Rl
cCkgewotICAgIGlzX3B1YmxpY19kZXBfID0gaXNfcHVibGljX2RlcDsKLSAgfQotCi0gcHJpdmF0
ZToKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGVfOwotICBzdHJpbmcgcm9vdF9jbGFzc19u
YW1lXzsKLQotICAvLyBBY2Nlc3MgdGhpcyBmaWVsZCB0aHJvdWdoIHRoZSBEZXBlbmRlbmN5R2Vu
ZXJhdG9ycyBhY2Nlc3NvciBjYWxsIGJlbG93LgotICAvLyBEbyBub3QgcmVmZXJlbmNlIGl0IGRp
cmVjdGx5LgotICB2ZWN0b3I8RmlsZUdlbmVyYXRvcio+IGRlcGVuZGVuY3lfZ2VuZXJhdG9yc187
Ci0KLSAgdmVjdG9yPEVudW1HZW5lcmF0b3IqPiBlbnVtX2dlbmVyYXRvcnNfOwotICB2ZWN0b3I8
TWVzc2FnZUdlbmVyYXRvcio+IG1lc3NhZ2VfZ2VuZXJhdG9yc187Ci0gIHZlY3RvcjxFeHRlbnNp
b25HZW5lcmF0b3IqPiBleHRlbnNpb25fZ2VuZXJhdG9yc187Ci0gIGJvb2wgaXNfcHVibGljX2Rl
cF87Ci0KLSAgY29uc3QgT3B0aW9ucyBvcHRpb25zXzsKLQotICBjb25zdCB2ZWN0b3I8RmlsZUdl
bmVyYXRvcio+JiBEZXBlbmRlbmN5R2VuZXJhdG9ycygpOwotCi0gIEdPT0dMRV9ESVNBTExPV19F
VklMX0NPTlNUUlVDVE9SUyhGaWxlR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBv
YmplY3RpdmVjCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JV
Rl9DT01QSUxFUl9PQkpFQ1RJVkVDX0ZJTEVfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2dlbmVyYXRvci5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZ2VuZXJhdG9yLmNj
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmUyOTVkZTQ5NzdhMGNhYjgyNjcwOGE1
OTFkNmY4ZTIyODVkZmFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNf
Z2VuZXJhdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19nZW5lcmF0b3Iu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3Rp
dmVjX2ZpbGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZl
Yy9vYmplY3RpdmVjX2hlbHBlcnMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJp
bnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5h
bWVzcGFjZSBvYmplY3RpdmVjIHsKLQotT2JqZWN0aXZlQ0dlbmVyYXRvcjo6T2JqZWN0aXZlQ0dl
bmVyYXRvcigpIHt9Ci0KLU9iamVjdGl2ZUNHZW5lcmF0b3I6On5PYmplY3RpdmVDR2VuZXJhdG9y
KCkge30KLQotYm9vbCBPYmplY3RpdmVDR2VuZXJhdG9yOjpHZW5lcmF0ZShjb25zdCBGaWxlRGVz
Y3JpcHRvciogZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RyaW5nJiBwYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91
dHB1dERpcmVjdG9yeSogb3V0cHV0X2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyaW5nKiBlcnJvcikgY29uc3QgewotICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBQ
YXJzZSBnZW5lcmF0b3Igb3B0aW9ucy4KLQotICBPcHRpb25zIGdlbmVyYXRpb25fb3B0aW9uczsK
LQotICB2ZWN0b3I8cGFpcjxzdHJpbmcsIHN0cmluZz4gPiBvcHRpb25zOwotICBQYXJzZUdlbmVy
YXRvclBhcmFtZXRlcihwYXJhbWV0ZXIsICZvcHRpb25zKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBvcHRpb25zLnNpemUoKTsgaSsrKSB7Ci0gICAgaWYgKG9wdGlvbnNbaV0uZmlyc3QgPT0gImV4
cGVjdGVkX3ByZWZpeGVzX3BhdGgiKSB7Ci0gICAgICBnZW5lcmF0aW9uX29wdGlvbnMuZXhwZWN0
ZWRfcHJlZml4ZXNfcGF0aCA9IG9wdGlvbnNbaV0uc2Vjb25kOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAqZXJyb3IgPSAiZXJyb3I6IFVua25vd24gZ2VuZXJhdG9yIG9wdGlvbjogIiArIG9wdGlvbnNb
aV0uZmlyc3Q7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotICAvLyBWYWxpZGF0ZSB0aGUgb2JqYyBwcmVmaXgvcGFja2FnZSBwYWlyaW5nLgotICBp
ZiAoIVZhbGlkYXRlT2JqQ0NsYXNzUHJlZml4KGZpbGUsIGdlbmVyYXRpb25fb3B0aW9ucywgZXJy
b3IpKSB7Ci0gICAgLy8gKmVycm9yIHdpbGwgaGF2ZSBiZWVuIGZpbGxlZCBpbi4KLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLQotICBGaWxlR2VuZXJhdG9yIGZpbGVfZ2VuZXJhdG9yKGZpbGUsIGdl
bmVyYXRpb25fb3B0aW9ucyk7Ci0gIHN0cmluZyBmaWxlcGF0aCA9IEZpbGVQYXRoKGZpbGUpOwot
Ci0gIC8vIEdlbmVyYXRlIGhlYWRlci4KLSAgewotICAgIHNjb3BlZF9wdHI8aW86Olplcm9Db3B5
T3V0cHV0U3RyZWFtPiBvdXRwdXQoCi0gICAgICAgIG91dHB1dF9kaXJlY3RvcnktPk9wZW4oZmls
ZXBhdGggKyAiLnBib2JqYy5oIikpOwotICAgIGlvOjpQcmludGVyIHByaW50ZXIob3V0cHV0Lmdl
dCgpLCAnJCcpOwotICAgIGZpbGVfZ2VuZXJhdG9yLkdlbmVyYXRlSGVhZGVyKCZwcmludGVyKTsK
LSAgfQotCi0gIC8vIEdlbmVyYXRlIG0gZmlsZS4KLSAgewotICAgIHNjb3BlZF9wdHI8aW86Olpl
cm9Db3B5T3V0cHV0U3RyZWFtPiBvdXRwdXQoCi0gICAgICAgIG91dHB1dF9kaXJlY3RvcnktPk9w
ZW4oZmlsZXBhdGggKyAiLnBib2JqYy5tIikpOwotICAgIGlvOjpQcmludGVyIHByaW50ZXIob3V0
cHV0LmdldCgpLCAnJCcpOwotICAgIGZpbGVfZ2VuZXJhdG9yLkdlbmVyYXRlU291cmNlKCZwcmlu
dGVyKTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugb2JqZWN0
aXZlYwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYK
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZ2VuZXJhdG9yLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2dlbmVyYXRvci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTI2NmIwNDJmNWRiZGRiNTNiOGY2YjdjYjY5YTMxMWE0
NzY4ODZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZ2VuZXJhdG9y
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotLy8gR2VuZXJhdGVzIE9iamVjdGl2ZUMgY29kZSBmb3IgYSBnaXZlbiAu
cHJvdG8gZmlsZS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfT0JKRUNUSVZF
Q19HRU5FUkFUT1JfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9PQkpFQ1RJ
VkVDX0dFTkVSQVRPUl9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBv
YmplY3RpdmVjIHsKLQotY2xhc3MgTElCUFJPVE9DX0VYUE9SVCBPYmplY3RpdmVDR2VuZXJhdG9y
IDogcHVibGljIENvZGVHZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgT2JqZWN0aXZlQ0dlbmVyYXRv
cigpOwotICB+T2JqZWN0aXZlQ0dlbmVyYXRvcigpOwotCi0gIC8vIGltcGxlbWVudHMgQ29kZUdl
bmVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wg
R2VuZXJhdGUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsIGNvbnN0IHN0cmluZyYgcGFyYW1l
dGVyLAotICAgICAgICAgICAgICAgIE91dHB1dERpcmVjdG9yeSogb3V0cHV0X2RpcmVjdG9yeSwg
c3RyaW5nKiBlcnJvcikgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoT2JqZWN0aXZlQ0dlbmVyYXRvcik7Ci19OwotCi19ICAvLyBuYW1lc3Bh
Y2Ugb2JqZWN0aXZlYwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RP
QlVGX0NPTVBJTEVSX09CSkVDVElWRUNfR0VORVJBVE9SX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmNjIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJz
LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTZiMzlkZDkzMjA3ZTU1MjlhOGU1
YTA3MDFhZmNiNzJiNjU4YzJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2
ZWNfaGVscGVycy5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyOTUgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGlv
Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8Y2xpbWl0
cz4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZnN0
cmVhbT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVj
dGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lv
L2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlf
c3RyZWFtX2ltcGwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotCi0vLyBOT1RFOiBzcmMvZ29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5jYyBtYWtlcyB1c2Ugb2YgY2VyciBmb3Igc29tZQotLy8g
ZXJyb3IgY2FzZXMsIHNvIGl0IHNlZW1zIHRvIGJlIG9rIHRvIHVzZSBhcyBhIGJhY2sgZG9vciBm
b3IgZXJyb3JzLgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIG9iamVjdGl2ZWMgewotCi1PcHRpb25zOjpP
cHRpb25zKCkgewotICAvLyBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZW52IGZvciB0aGUg
cGFja2FnZSBwcmVmaXhlcy4KLSAgY29uc3QgY2hhciogZmlsZV9wYXRoID0gZ2V0ZW52KCJHUEJf
T0JKQ19FWFBFQ1RFRF9QQUNLQUdFX1BSRUZJWEVTIik7Ci0gIGlmIChmaWxlX3BhdGgpIHsKLSAg
ICBleHBlY3RlZF9wcmVmaXhlc19wYXRoID0gZmlsZV9wYXRoOwotICB9Ci19Ci0KLW5hbWVzcGFj
ZSB7Ci0KLWhhc2hfc2V0PHN0cmluZz4gTWFrZVdvcmRzTWFwKGNvbnN0IGNoYXIqIGNvbnN0IHdv
cmRzW10sIHNpemVfdCBudW1fd29yZHMpIHsKLSAgaGFzaF9zZXQ8c3RyaW5nPiByZXN1bHQ7Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3dvcmRzOyBpKyspIHsKLSAgICByZXN1bHQuaW5zZXJ0
KHdvcmRzW2ldKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1jb25zdCBjaGFyKiBjb25z
dCBrVXBwZXJTZWdtZW50c0xpc3RbXSA9IHsidXJsIiwgImh0dHAiLCAiaHR0cHMifTsKLQotaGFz
aF9zZXQ8c3RyaW5nPiBrVXBwZXJTZWdtZW50cyA9Ci0gICAgTWFrZVdvcmRzTWFwKGtVcHBlclNl
Z21lbnRzTGlzdCwgR09PR0xFX0FSUkFZU0laRShrVXBwZXJTZWdtZW50c0xpc3QpKTsKLQotLy8g
SW50ZXJuYWwgaGVscGVyIGZvciBuYW1lIGhhbmRpbmcuCi0vLyBEbyBub3QgZXhwb3NlIHRoaXMg
b3V0c2lkZSBvZiBoZWxwZXJzLCBzdGljayB0byBoYXZpbmcgZnVuY3Rpb25zIGZvciBzcGVjaWZp
YwotLy8gY2FzZXMgKENsYXNzTmFtZSgpLCBGaWVsZE5hbWUoKSksIHNvIHRoZXJlIGlzIGFsd2F5
cyBjb25zaXN0ZW50IHN1ZmZpeCBydWxlcy4KLXN0cmluZyBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNl
KGNvbnN0IHN0cmluZyYgaW5wdXQsIGJvb2wgZmlyc3RfY2FwaXRhbGl6ZWQpIHsKLSAgdmVjdG9y
PHN0cmluZz4gdmFsdWVzOwotICBzdHJpbmcgY3VycmVudDsKLQotICBib29sIGxhc3RfY2hhcl93
YXNfbnVtYmVyID0gZmFsc2U7Ci0gIGJvb2wgbGFzdF9jaGFyX3dhc19sb3dlciA9IGZhbHNlOwot
ICBib29sIGxhc3RfY2hhcl93YXNfdXBwZXIgPSBmYWxzZTsKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBpbnB1dC5zaXplKCk7IGkrKykgewotICAgIGNoYXIgYyA9IGlucHV0W2ldOwotICAgIGlmIChh
c2NpaV9pc2RpZ2l0KGMpKSB7Ci0gICAgICBpZiAoIWxhc3RfY2hhcl93YXNfbnVtYmVyKSB7Ci0g
ICAgICAgIHZhbHVlcy5wdXNoX2JhY2soY3VycmVudCk7Ci0gICAgICAgIGN1cnJlbnQgPSAiIjsK
LSAgICAgIH0KLSAgICAgIGN1cnJlbnQgKz0gYzsKLSAgICAgIGxhc3RfY2hhcl93YXNfbnVtYmVy
ID0gbGFzdF9jaGFyX3dhc19sb3dlciA9IGxhc3RfY2hhcl93YXNfdXBwZXIgPSBmYWxzZTsKLSAg
ICAgIGxhc3RfY2hhcl93YXNfbnVtYmVyID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFzY2lpX2lz
bG93ZXIoYykpIHsKLSAgICAgIC8vIGxvd2VyY2FzZSBsZXR0ZXIgY2FuIGZvbGxvdyBhIGxvd2Vy
Y2FzZSBvciB1cHBlcmNhc2UgbGV0dGVyCi0gICAgICBpZiAoIWxhc3RfY2hhcl93YXNfbG93ZXIg
JiYgIWxhc3RfY2hhcl93YXNfdXBwZXIpIHsKLSAgICAgICAgdmFsdWVzLnB1c2hfYmFjayhjdXJy
ZW50KTsKLSAgICAgICAgY3VycmVudCA9ICIiOwotICAgICAgfQotICAgICAgY3VycmVudCArPSBj
OyAgLy8gYWxyZWFkeSBsb3dlcgotICAgICAgbGFzdF9jaGFyX3dhc19udW1iZXIgPSBsYXN0X2No
YXJfd2FzX2xvd2VyID0gbGFzdF9jaGFyX3dhc191cHBlciA9IGZhbHNlOwotICAgICAgbGFzdF9j
aGFyX3dhc19sb3dlciA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhc2NpaV9pc3VwcGVyKGMpKSB7
Ci0gICAgICBpZiAoIWxhc3RfY2hhcl93YXNfdXBwZXIpIHsKLSAgICAgICAgdmFsdWVzLnB1c2hf
YmFjayhjdXJyZW50KTsKLSAgICAgICAgY3VycmVudCA9ICIiOwotICAgICAgfQotICAgICAgY3Vy
cmVudCArPSBhc2NpaV90b2xvd2VyKGMpOwotICAgICAgbGFzdF9jaGFyX3dhc19udW1iZXIgPSBs
YXN0X2NoYXJfd2FzX2xvd2VyID0gbGFzdF9jaGFyX3dhc191cHBlciA9IGZhbHNlOwotICAgICAg
bGFzdF9jaGFyX3dhc191cHBlciA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGxhc3RfY2hh
cl93YXNfbnVtYmVyID0gbGFzdF9jaGFyX3dhc19sb3dlciA9IGxhc3RfY2hhcl93YXNfdXBwZXIg
PSBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgdmFsdWVzLnB1c2hfYmFjayhjdXJyZW50KTsKLQotICBz
dHJpbmcgcmVzdWx0OwotICBib29sIGZpcnN0X3NlZ21lbnRfZm9yY2VzX3VwcGVyID0gZmFsc2U7
Ci0gIGZvciAodmVjdG9yPHN0cmluZz46Oml0ZXJhdG9yIGkgPSB2YWx1ZXMuYmVnaW4oKTsgaSAh
PSB2YWx1ZXMuZW5kKCk7ICsraSkgewotICAgIHN0cmluZyB2YWx1ZSA9ICppOwotICAgIGJvb2wg
YWxsX3VwcGVyID0gKGtVcHBlclNlZ21lbnRzLmNvdW50KHZhbHVlKSA+IDApOwotICAgIGlmIChh
bGxfdXBwZXIgJiYgKHJlc3VsdC5sZW5ndGgoKSA9PSAwKSkgewotICAgICAgZmlyc3Rfc2VnbWVu
dF9mb3JjZXNfdXBwZXIgPSB0cnVlOwotICAgIH0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHZh
bHVlLmxlbmd0aCgpOyBqKyspIHsKLSAgICAgIGlmIChqID09IDAgfHwgYWxsX3VwcGVyKSB7Ci0g
ICAgICAgIHZhbHVlW2pdID0gYXNjaWlfdG91cHBlcih2YWx1ZVtqXSk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBOb3RoaW5nLCBhbHJlYWR5IGluIGxvd2VyLgotICAgICAgfQotICAgIH0K
LSAgICByZXN1bHQgKz0gdmFsdWU7Ci0gIH0KLSAgaWYgKChyZXN1bHQubGVuZ3RoKCkgIT0gMCkg
JiYKLSAgICAgICFmaXJzdF9jYXBpdGFsaXplZCAmJgotICAgICAgIWZpcnN0X3NlZ21lbnRfZm9y
Y2VzX3VwcGVyKSB7Ci0gICAgcmVzdWx0WzBdID0gYXNjaWlfdG9sb3dlcihyZXN1bHRbMF0pOwot
ICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IGtSZXNlcnZlZFdv
cmRMaXN0W10gPSB7Ci0gICAgLy8gT2JqZWN0aXZlIEMgImtleXdvcmRzIiB0aGF0IGFyZW4ndCBp
biBDCi0gICAgLy8gRnJvbQotICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlv
bnMvMTg3MzYzMC9yZXNlcnZlZC1rZXl3b3Jkcy1pbi1vYmplY3RpdmUtYwotICAgICJpZCIsICJf
Y21kIiwgInN1cGVyIiwgImluIiwgIm91dCIsICJpbm91dCIsICJieWNvcHkiLCAiYnlyZWYiLCAi
b25ld2F5IiwKLSAgICAic2VsZiIsCi0KLSAgICAvLyBDL0MrKyBrZXl3b3JkcyAoSW5jbCBDKysg
MHgxMSkKLSAgICAvLyBGcm9tIGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2tleXdv
cmRzCi0gICAgImFuZCIsICJhbmRfZXEiLCAiYWxpZ25hcyIsICJhbGlnbm9mIiwgImFzbSIsICJh
dXRvIiwgImJpdGFuZCIsICJiaXRvciIsCi0gICAgImJvb2wiLCAiYnJlYWsiLCAiY2FzZSIsICJj
YXRjaCIsICJjaGFyIiwgImNoYXIxNl90IiwgImNoYXIzMl90IiwgImNsYXNzIiwKLSAgICAiY29t
cGwiLCAiY29uc3QiLCAiY29uc3RleHByIiwgImNvbnN0X2Nhc3QiLCAiY29udGludWUiLCAiZGVj
bHR5cGUiLAotICAgICJkZWZhdWx0IiwgImRlbGV0ZSIsICJkb3VibGUiLCAiZHluYW1pY19jYXN0
IiwgImVsc2UiLCAiZW51bSIsICJleHBsaWNpdCIsCi0gICAgImV4cG9ydCIsICJleHRlcm4gIiwg
ImZhbHNlIiwgImZsb2F0IiwgImZvciIsICJmcmllbmQiLCAiZ290byIsICJpZiIsCi0gICAgImlu
bGluZSIsICJpbnQiLCAibG9uZyIsICJtdXRhYmxlIiwgIm5hbWVzcGFjZSIsICJuZXciLCAibm9l
eGNlcHQiLCAibm90IiwKLSAgICAibm90X2VxIiwgIm51bGxwdHIiLCAib3BlcmF0b3IiLCAib3Ii
LCAib3JfZXEiLCAicHJpdmF0ZSIsICJwcm90ZWN0ZWQiLAotICAgICJwdWJsaWMiLCAicmVnaXN0
ZXIiLCAicmVpbnRlcnByZXRfY2FzdCIsICJyZXR1cm4iLCAic2hvcnQiLCAic2lnbmVkIiwKLSAg
ICAic2l6ZW9mIiwgInN0YXRpYyIsICJzdGF0aWNfYXNzZXJ0IiwgInN0YXRpY19jYXN0IiwgInN0
cnVjdCIsICJzd2l0Y2giLAotICAgICJ0ZW1wbGF0ZSIsICJ0aGlzIiwgInRocmVhZF9sb2NhbCIs
ICJ0aHJvdyIsICJ0cnVlIiwgInRyeSIsICJ0eXBlZGVmIiwKLSAgICAidHlwZWlkIiwgInR5cGVu
YW1lIiwgInVuaW9uIiwgInVuc2lnbmVkIiwgInVzaW5nIiwgInZpcnR1YWwiLCAidm9pZCIsCi0g
ICAgInZvbGF0aWxlIiwgIndjaGFyX3QiLCAid2hpbGUiLCAieG9yIiwgInhvcl9lcSIsCi0KLSAg
ICAvLyBDOTkga2V5d29yZHMKLSAgICAvLyBGcm9tCi0gICAgLy8gaHR0cDovL3B1YmxpYi5ib3Vs
ZGVyLmlibS5jb20vaW5mb2NlbnRlci9sbnhwY29tcC92OHYxMDEvaW5kZXguanNwP3RvcGljPSUy
RmNvbS5pYm0ueGxjcHA4bC5kb2MlMkZsYW5ndWFnZSUyRnJlZiUyRmtleXcuaHRtCi0gICAgInJl
c3RyaWN0IiwKLQotICAgIC8vIE9iamVjdGl2ZS1DIFJ1bnRpbWUgdHlwZWRlZnMKLSAgICAvLyBG
cm9tIDxvYmMvcnVudGltZS5oPgotICAgICJDYXRlZ29yeSIsICJJdmFyIiwgIk1ldGhvZCIsICJQ
cm90b2NvbCIsCi0KLSAgICAvLyBOU09iamVjdCBNZXRob2RzCi0gICAgLy8gbmV3IGlzIGNvdmVy
ZWQgYnkgQysrIGtleXdvcmRzLgotICAgICJkZXNjcmlwdGlvbiIsICJkZWJ1Z0Rlc2NyaXB0aW9u
IiwgImZpbmFsaXplIiwgImhhc2giLCAiZGVhbGxvYyIsICJpbml0IiwKLSAgICAiY2xhc3MiLCAi
c3VwZXJjbGFzcyIsICJyZXRhaW4iLCAicmVsZWFzZSIsICJhdXRvcmVsZWFzZSIsICJyZXRhaW5D
b3VudCIsCi0gICAgInpvbmUiLCAiaXNQcm94eSIsICJjb3B5IiwgIm11dGFibGVDb3B5IiwgImNs
YXNzRm9yQ29kZXIiLAotCi0gICAgLy8gR1BCTWVzc2FnZSBNZXRob2RzCi0gICAgLy8gT25seSBu
ZWVkIHRvIGFkZCBpbnN0YW5jZSBtZXRob2RzIHRoYXQgbWF5IGNvbmZsaWN0IHdpdGgKLSAgICAv
LyBtZXRob2QgZGVjbGFyZWQgaW4gcHJvdG9zLiBUaGUgbWFpbiBjYXNlcyBhcmUgbWV0aG9kcwot
ICAgIC8vIHRoYXQgdGFrZSBubyBhcmd1bWVudHMsIG9yIHNldEZvbzovaGFzRm9vOiB0eXBlIG1l
dGhvZHMuCi0gICAgImNsZWFyIiwgImRhdGEiLCAiZGVsaW1pdGVkRGF0YSIsICJkZXNjcmlwdG9y
IiwgImV4dGVuc2lvblJlZ2lzdHJ5IiwKLSAgICAiZXh0ZW5zaW9uc0N1cnJlbnRseVNldCIsICJp
c0luaXRpYWxpemVkIiwgInNlcmlhbGl6ZWRTaXplIiwKLSAgICAic29ydGVkRXh0ZW5zaW9uc0lu
VXNlIiwgInVua25vd25GaWVsZHMiLAotCi0gICAgLy8gTWFjVHlwZXMuaCBuYW1lcwotICAgICJG
aXhlZCIsICJGcmFjdCIsICJTaXplIiwgIkxvZ2ljYWxBZGRyZXNzIiwgIlBoeXNpY2FsQWRkcmVz
cyIsICJCeXRlQ291bnQiLAotICAgICJCeXRlT2Zmc2V0IiwgIkR1cmF0aW9uIiwgIkFic29sdXRl
VGltZSIsICJPcHRpb25CaXRzIiwgIkl0ZW1Db3VudCIsCi0gICAgIlBCVmVyc2lvbiIsICJTY3Jp
cHRDb2RlIiwgIkxhbmdDb2RlIiwgIlJlZ2lvbkNvZGUiLCAiT1NUeXBlIiwKLSAgICAiUHJvY2Vz
c1NlcmlhbE51bWJlciIsICJQb2ludCIsICJSZWN0IiwgIkZpeGVkUG9pbnQiLCAiRml4ZWRSZWN0
IiwgIlN0eWxlIiwKLSAgICAiU3R5bGVQYXJhbWV0ZXIiLCAiU3R5bGVGaWVsZCIsICJUaW1lU2Nh
bGUiLCAiVGltZUJhc2UiLCAiVGltZVJlY29yZCIsCi19OwotCi1oYXNoX3NldDxzdHJpbmc+IGtS
ZXNlcnZlZFdvcmRzID0KLSAgICBNYWtlV29yZHNNYXAoa1Jlc2VydmVkV29yZExpc3QsIEdPT0dM
RV9BUlJBWVNJWkUoa1Jlc2VydmVkV29yZExpc3QpKTsKLQotc3RyaW5nIFNhbml0aXplTmFtZUZv
ck9iakMoY29uc3Qgc3RyaW5nJiBpbnB1dCwgY29uc3Qgc3RyaW5nJiBleHRlbnNpb24pIHsKLSAg
aWYgKGtSZXNlcnZlZFdvcmRzLmNvdW50KGlucHV0KSA+IDApIHsKLSAgICByZXR1cm4gaW5wdXQg
KyBleHRlbnNpb247Ci0gIH0KLSAgcmV0dXJuIGlucHV0OwotfQotCi1zdHJpbmcgTmFtZUZyb21G
aWVsZERlc2NyaXB0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBpZiAoZmll
bGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApIHsKLSAgICByZXR1cm4g
ZmllbGQtPm1lc3NhZ2VfdHlwZSgpLT5uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGZp
ZWxkLT5uYW1lKCk7Ci0gIH0KLX0KLQotdm9pZCBQYXRoU3BsaXQoY29uc3Qgc3RyaW5nJiBwYXRo
LCBzdHJpbmcqIGRpcmVjdG9yeSwgc3RyaW5nKiBiYXNlbmFtZSkgewotICBzdHJpbmc6OnNpemVf
dHlwZSBsYXN0X3NsYXNoID0gcGF0aC5yZmluZCgnLycpOwotICBpZiAobGFzdF9zbGFzaCA9PSBz
dHJpbmc6Om5wb3MpIHsKLSAgICBpZiAoZGlyZWN0b3J5KSB7Ci0gICAgICAqZGlyZWN0b3J5ID0g
IiI7Ci0gICAgfQotICAgIGlmIChiYXNlbmFtZSkgewotICAgICAgKmJhc2VuYW1lID0gcGF0aDsK
LSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGRpcmVjdG9yeSkgewotICAgICAgKmRpcmVjdG9y
eSA9IHBhdGguc3Vic3RyKDAsIGxhc3Rfc2xhc2gpOwotICAgIH0KLSAgICBpZiAoYmFzZW5hbWUp
IHsKLSAgICAgICpiYXNlbmFtZSA9IHBhdGguc3Vic3RyKGxhc3Rfc2xhc2ggKyAxKTsKLSAgICB9
Ci0gIH0KLX0KLQotYm9vbCBJc1NwZWNpYWxOYW1lKGNvbnN0IHN0cmluZyYgbmFtZSwgY29uc3Qg
c3RyaW5nKiBzcGVjaWFsX25hbWVzLAotICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCkg
ewotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICBzaXplX3QgbGVu
Z3RoID0gc3BlY2lhbF9uYW1lc1tpXS5sZW5ndGgoKTsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAs
IGxlbmd0aCwgc3BlY2lhbF9uYW1lc1tpXSkgPT0gMCkgewotICAgICAgaWYgKG5hbWUubGVuZ3Ro
KCkgPiBsZW5ndGgpIHsKLSAgICAgICAgLy8gSWYgbmFtZSBpcyBsb25nZXIgdGhhbiB0aGUgcmV0
YWluZWRfbmFtZVtpXSB0aGF0IGl0IG1hdGNoZXMKLSAgICAgICAgLy8gdGhlIG5leHQgY2hhcmFj
dGVyIG11c3QgYmUgbm90IGxvd2VyIGNhc2UgKG5ld3RvbiB2cyBuZXdUb24gdnMKLSAgICAgICAg
Ly8gbmV3X3RvbikuCi0gICAgICAgIHJldHVybiAhYXNjaWlfaXNsb3dlcihuYW1lW2xlbmd0aF0p
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLS8vIEVzY2FwZSBD
KysgdHJpZ3JhcGhzIGJ5IGVzY2FwaW5nIHF1ZXN0aW9uIG1hcmtzIHRvIFw/Ci1zdHJpbmcgRXNj
YXBlVHJpZ3JhcGhzKGNvbnN0IHN0cmluZyYgdG9fZXNjYXBlKSB7Ci0gIHJldHVybiBTdHJpbmdS
ZXBsYWNlKHRvX2VzY2FwZSwgIj8iLCAiXFw/IiwgdHJ1ZSk7Ci19Ci0KLXN0cmluZyBTdHJpcFBy
b3RvKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsKLSAgaWYgKEhhc1N1ZmZpeFN0cmluZyhmaWxl
bmFtZSwgIi5wcm90b2RldmVsIikpIHsKLSAgICByZXR1cm4gU3RyaXBTdWZmaXhTdHJpbmcoZmls
ZW5hbWUsICIucHJvdG9kZXZlbCIpOwotICB9IGVsc2UgewotICAgIHJldHVybiBTdHJpcFN1ZmZp
eFN0cmluZyhmaWxlbmFtZSwgIi5wcm90byIpOwotICB9Ci19Ci0KLWJvb2wgSXNSZXRhaW5lZE5h
bWUoY29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIC8vIExpc3Qgb2YgcHJlZml4ZXMgZnJvbQotICAv
LyBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L21hYy8jZG9jdW1lbnRhdGlvbi9D
b2NvYS9Db25jZXB0dWFsL01lbW9yeU1nbXQvQXJ0aWNsZXMvbW1SdWxlcy5odG1sCi0gIHN0YXRp
YyBjb25zdCBzdHJpbmcgcmV0YWluZWRfbmFtZXNbXSA9IHsibmV3IiwgImFsbG9jIiwgImNvcHki
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11dGFibGVDb3B5
In07Ci0gIHJldHVybiBJc1NwZWNpYWxOYW1lKG5hbWUsIHJldGFpbmVkX25hbWVzLAotICAgICAg
ICAgICAgICAgICAgICAgICBzaXplb2YocmV0YWluZWRfbmFtZXMpIC8gc2l6ZW9mKHJldGFpbmVk
X25hbWVzWzBdKSk7Ci19Ci0KLWJvb2wgSXNJbml0TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIHsK
LSAgc3RhdGljIGNvbnN0IHN0cmluZyBpbml0X25hbWVzW10gPSB7ImluaXQifTsKLSAgcmV0dXJu
IElzU3BlY2lhbE5hbWUobmFtZSwgaW5pdF9uYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZW9mKGluaXRfbmFtZXMpIC8gc2l6ZW9mKGluaXRfbmFtZXNbMF0pKTsKLX0KLQotc3RyaW5n
IEJhc2VGaWxlTmFtZShjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSkgewotICBzdHJpbmcgYmFz
ZW5hbWU7Ci0gIFBhdGhTcGxpdChmaWxlLT5uYW1lKCksIE5VTEwsICZiYXNlbmFtZSk7Ci0gIHJl
dHVybiBiYXNlbmFtZTsKLX0KLQotc3RyaW5nIEZpbGVOYW1lKGNvbnN0IEZpbGVEZXNjcmlwdG9y
KiBmaWxlKSB7Ci0gIHN0cmluZyBwYXRoID0gRmlsZVBhdGgoZmlsZSk7Ci0gIHN0cmluZyBiYXNl
bmFtZTsKLSAgUGF0aFNwbGl0KHBhdGgsIE5VTEwsICZiYXNlbmFtZSk7Ci0gIHJldHVybiBiYXNl
bmFtZTsKLX0KLQotc3RyaW5nIEZpbGVQYXRoKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKSB7
Ci0gIHN0cmluZyBvdXRwdXQ7Ci0gIHN0cmluZyBiYXNlbmFtZTsKLSAgc3RyaW5nIGRpcmVjdG9y
eTsKLSAgUGF0aFNwbGl0KGZpbGUtPm5hbWUoKSwgJmRpcmVjdG9yeSwgJmJhc2VuYW1lKTsKLSAg
aWYgKGRpcmVjdG9yeS5sZW5ndGgoKSA+IDApIHsKLSAgICBvdXRwdXQgPSBkaXJlY3RvcnkgKyAi
LyI7Ci0gIH0KLSAgYmFzZW5hbWUgPSBTdHJpcFByb3RvKGJhc2VuYW1lKTsKLQotICAvLyBDYW1l
bENhc2UgdG8gYmUgbW9yZSBPYmpDIGZyaWVuZGx5LgotICBiYXNlbmFtZSA9IFVuZGVyc2NvcmVz
VG9DYW1lbENhc2UoYmFzZW5hbWUsIHRydWUpOwotCi0gIG91dHB1dCArPSBiYXNlbmFtZTsKLSAg
cmV0dXJuIG91dHB1dDsKLX0KLQotc3RyaW5nIEZpbGVDbGFzc1ByZWZpeChjb25zdCBGaWxlRGVz
Y3JpcHRvciogZmlsZSkgewotICAvLyBEZWZhdWx0IGlzIGVtcHR5IHN0cmluZywgbm8gbmVlZCB0
byBjaGVjayBoYXNfb2JqY19jbGFzc19wcmVmaXguCi0gIHN0cmluZyByZXN1bHQgPSBmaWxlLT5v
cHRpb25zKCkub2JqY19jbGFzc19wcmVmaXgoKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3Ry
aW5nIEZpbGVDbGFzc05hbWUoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUpIHsKLSAgc3RyaW5n
IG5hbWUgPSBGaWxlQ2xhc3NQcmVmaXgoZmlsZSk7Ci0gIG5hbWUgKz0gVW5kZXJzY29yZXNUb0Nh
bWVsQ2FzZShTdHJpcFByb3RvKEJhc2VGaWxlTmFtZShmaWxlKSksIHRydWUpOwotICBuYW1lICs9
ICJSb290IjsKLSAgLy8gVGhlcmUgYXJlbid0IHJlYWxseSBhbnkgcmVzZXJ2ZWQgd29yZHMgdGhh
dCBlbmQgaW4gIlJvb3QiLCBidXQgcGxheWluZwotICAvLyBpdCBzYWZlIGFuZCBjaGVja2luZy4K
LSAgcmV0dXJuIFNhbml0aXplTmFtZUZvck9iakMobmFtZSwgIl9Sb290Q2xhc3MiKTsKLX0KLQot
c3RyaW5nIENsYXNzTmFtZVdvcmtlcihjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0g
IHN0cmluZyBuYW1lOwotICBpZiAoZGVzY3JpcHRvci0+Y29udGFpbmluZ190eXBlKCkgIT0gTlVM
TCkgewotICAgIG5hbWUgPSBDbGFzc05hbWVXb3JrZXIoZGVzY3JpcHRvci0+Y29udGFpbmluZ190
eXBlKCkpOwotICAgIG5hbWUgKz0gIl8iOwotICB9Ci0gIHJldHVybiBuYW1lICsgZGVzY3JpcHRv
ci0+bmFtZSgpOwotfQotCi1zdHJpbmcgQ2xhc3NOYW1lV29ya2VyKGNvbnN0IEVudW1EZXNjcmlw
dG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHN0cmluZyBuYW1lOwotICBpZiAoZGVzY3JpcHRvci0+Y29u
dGFpbmluZ190eXBlKCkgIT0gTlVMTCkgewotICAgIG5hbWUgPSBDbGFzc05hbWVXb3JrZXIoZGVz
Y3JpcHRvci0+Y29udGFpbmluZ190eXBlKCkpOwotICAgIG5hbWUgKz0gIl8iOwotICB9Ci0gIHJl
dHVybiBuYW1lICsgZGVzY3JpcHRvci0+bmFtZSgpOwotfQotCi1zdHJpbmcgQ2xhc3NOYW1lKGNv
bnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgLy8gMS4gTWVzc2FnZSBuYW1lcyBhcmUg
dXNlZCBhcyBpcyAoc3R5bGUgY2FsbHMgZm9yIENhbWVsQ2FzZSwgdHJ1c3QgaXQpLgotICAvLyAy
LiBDaGVjayBmb3IgcmVzZXJ2ZWQgd29yZCBhdCB0aGUgdmVyeSBlbmQgYW5kIHRoZW4gc3VmZml4
IHRoaW5ncy4KLSAgc3RyaW5nIHByZWZpeCA9IEZpbGVDbGFzc1ByZWZpeChkZXNjcmlwdG9yLT5m
aWxlKCkpOwotICBzdHJpbmcgbmFtZSA9IENsYXNzTmFtZVdvcmtlcihkZXNjcmlwdG9yKTsKLSAg
cmV0dXJuIFNhbml0aXplTmFtZUZvck9iakMocHJlZml4ICsgbmFtZSwgIl9DbGFzcyIpOwotfQot
Ci1zdHJpbmcgRW51bU5hbWUoY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAg
Ly8gMS4gRW51bSBuYW1lcyBhcmUgdXNlZCBhcyBpcyAoc3R5bGUgY2FsbHMgZm9yIENhbWVsQ2Fz
ZSwgdHJ1c3QgaXQpLgotICAvLyAyLiBDaGVjayBmb3IgcmVzZXJ2ZWQgd29yZCBhdCB0aGUgZXZl
cnkgZW5kIGFuZCB0aGVuIHN1ZmZpeCB0aGluZ3MuCi0gIC8vICAgICAgbWVzc2FnZSBGaXhlZCB7
Ci0gIC8vICAgICAgICBtZXNzYWdlIFNpemUgey4uLn0KLSAgLy8gICAgICAgIGVudW0gTXVtYmxl
IHsuLi59Ci0gIC8vICAgICAgLi4uCi0gIC8vICAgICAgfQotICAvLyAgICB5aWVsZHMgRml4ZWRf
Q2xhc3MsIEZpeGVkX1NpemUuCi0gIHN0cmluZyBuYW1lID0gRmlsZUNsYXNzUHJlZml4KGRlc2Ny
aXB0b3ItPmZpbGUoKSk7Ci0gIG5hbWUgKz0gQ2xhc3NOYW1lV29ya2VyKGRlc2NyaXB0b3IpOwot
ICByZXR1cm4gU2FuaXRpemVOYW1lRm9yT2JqQyhuYW1lLCAiX0VudW0iKTsKLX0KLQotc3RyaW5n
IEVudW1WYWx1ZU5hbWUoY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewot
ICAvLyBCZWNhdXNlIG9mIHRoZSBTd2l0Y2ggZW51bSBjb21wYXRpYmlsaXR5LCB0aGUgbmFtZSBv
biB0aGUgZW51bSBoYXMgdG8gaGF2ZQotICAvLyB0aGUgc3VmZml4IGhhbmRpbmcsIHNvIGl0IHNs
aWdodGx5IGRpdmVyZ2VzIGZyb20gaG93IG5lc3RlZCBjbGFzc2VzIHdvcmsuCi0gIC8vICAgZW51
bSBGaXhlZCB7Ci0gIC8vICAgICBGT08gPSAxCi0gIC8vICAgfQotICAvLyB5aWVsZHMgRml4ZWRf
RW51bSBhbmQgRml4ZWRfRW51bV9Gb28gKG5vdCBGaXhlZF9Gb28pLgotICBjb25zdCBzdHJpbmcm
IGNsYXNzX25hbWUgPSBFbnVtTmFtZShkZXNjcmlwdG9yLT50eXBlKCkpOwotICBjb25zdCBzdHJp
bmcmIHZhbHVlX3N0ciA9IFVuZGVyc2NvcmVzVG9DYW1lbENhc2UoZGVzY3JpcHRvci0+bmFtZSgp
LCB0cnVlKTsKLSAgY29uc3Qgc3RyaW5nJiBuYW1lID0gY2xhc3NfbmFtZSArICJfIiArIHZhbHVl
X3N0cjsKLSAgLy8gVGhlcmUgYXJlbid0IHJlYWxseSBhbnkgcmVzZXJ2ZWQgd29yZHMgd2l0aCBh
biB1bmRlcnNjb3JlIGFuZCBhIGxlYWRpbmcKLSAgLy8gY2FwaXRhbCBsZXR0ZXIsIGJ1dCBwbGF5
aW5nIGl0IHNhZmUgYW5kIGNoZWNraW5nLgotICByZXR1cm4gU2FuaXRpemVOYW1lRm9yT2JqQyhu
YW1lLCAiX1ZhbHVlIik7Ci19Ci0KLXN0cmluZyBFbnVtVmFsdWVTaG9ydE5hbWUoY29uc3QgRW51
bVZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICAvLyBFbnVtIHZhbHVlIG5hbWVzIChF
bnVtVmFsdWVOYW1lIGFib3ZlKSBhcmUgdGhlIGVudW0gbmFtZSB0dXJuZWQgaW50bwotICAvLyBh
IGNsYXNzIG5hbWUgYW5kIHRoZW4gdGhlIHZhbHVlIG5hbWUgaXMgQ2FtZWxDYXNlZCBhbmQgY29u
Y2F0ZW5hdGVkOyB0aGUKLSAgLy8gd2hvbGUgdGhpbmcgdGhlbiBnZXRzIHNhbml0aXplZCBmb3Ig
cmVzZXJ2ZWQgd29yZHMuCi0gIC8vIFRoZSAic2hvcnQgbmFtZSIgaXMgaW50ZW5kZWQgdG8gYmUg
dGhlIGZpbmFsIGxlYWYsIHRoZSB2YWx1ZSBuYW1lOyBidXQKLSAgLy8geW91IGNhbid0IHNpbXBs
eSBzZW5kIHRoYXQgb2ZmIHRvIHNhbml0aXplIGFzIHRoYXQgY291bGQgcmVzdWx0IGluIGl0Ci0g
IC8vIGdldHRpbmcgbW9kaWZpZWQgd2hlbiB0aGUgZnVsbCBuYW1lIGRpZG4ndC4gIEZvciBleGFt
cGxlIGVudW0KLSAgLy8gIlN0b3JhZ2VNb2RlcyIgaGFzIGEgdmFsdWUgInJldGFpbiIuICBTbyB0
aGUgZnVsbCBuYW1lIGlzCi0gIC8vICJTdG9yYWdlTW9kZXNfUmV0YWluIiwgYnV0IGlmIHdlIHNh
bml0aXplICJyZXRhaW4iIGl0IHdvdWxkIGJlY29tZQotICAvLyAiUmV0YWluVmFsdWUiLgotICAv
LyBTbyB0aGUgcmlnaHQgd2F5IHRvIGdldCB0aGUgc2hvcnQgbmFtZSBpcyB0byB0YWtlIHRoZSBm
dWxsIGVudW0gbmFtZQotICAvLyBhbmQgdGhlbiBzdHJpcCBvZmYgdGhlIGVudW0gbmFtZSAobGVh
dmluZyB0aGUgdmFsdWUgbmFtZSBhbmQgYW55dGhpbmcKLSAgLy8gZG9uZSBieSBzYW5pdGl6ZSku
Ci0gIGNvbnN0IHN0cmluZyYgY2xhc3NfbmFtZSA9IEVudW1OYW1lKGRlc2NyaXB0b3ItPnR5cGUo
KSk7Ci0gIGNvbnN0IHN0cmluZyYgbG9uZ19uYW1lX3ByZWZpeCA9IGNsYXNzX25hbWUgKyAiXyI7
Ci0gIGNvbnN0IHN0cmluZyYgbG9uZ19uYW1lID0gRW51bVZhbHVlTmFtZShkZXNjcmlwdG9yKTsK
LSAgcmV0dXJuIFN0cmlwUHJlZml4U3RyaW5nKGxvbmdfbmFtZSwgbG9uZ19uYW1lX3ByZWZpeCk7
Ci19Ci0KLXN0cmluZyBVbkNhbWVsQ2FzZUVudW1TaG9ydE5hbWUoY29uc3Qgc3RyaW5nJiBuYW1l
KSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZS5zaXplKCk7
IGkrKykgewotICAgIGNoYXIgYyA9IG5hbWVbaV07Ci0gICAgaWYgKGkgPiAwICYmIGFzY2lpX2lz
dXBwZXIoYykpIHsKLSAgICAgIHJlc3VsdCArPSAnXyc7Ci0gICAgfQotICAgIHJlc3VsdCArPSBh
c2NpaV90b3VwcGVyKGMpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0cmluZyBFeHRl
bnNpb25NZXRob2ROYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBj
b25zdCBzdHJpbmcmIG5hbWUgPSBOYW1lRnJvbUZpZWxkRGVzY3JpcHRvcihkZXNjcmlwdG9yKTsK
LSAgY29uc3Qgc3RyaW5nJiByZXN1bHQgPSBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKG5hbWUsIGZh
bHNlKTsKLSAgcmV0dXJuIFNhbml0aXplTmFtZUZvck9iakMocmVzdWx0LCAiX0V4dGVuc2lvbiIp
OwotfQotCi1zdHJpbmcgRmllbGROYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsK
LSAgY29uc3Qgc3RyaW5nJiBuYW1lID0gTmFtZUZyb21GaWVsZERlc2NyaXB0b3IoZmllbGQpOwot
ICBzdHJpbmcgcmVzdWx0ID0gVW5kZXJzY29yZXNUb0NhbWVsQ2FzZShuYW1lLCBmYWxzZSk7Ci0g
IGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSAmJiAhZmllbGQtPmlzX21hcCgpKSB7Ci0gICAgLy8g
QWRkICJBcnJheSIgYmVmb3JlIGRvIGNoZWNrIGZvciByZXNlcnZlZCB3b3JsZHMuCi0gICAgcmVz
dWx0ICs9ICJBcnJheSI7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gSWYgaXQgd2Fzbid0IHJlcGVhdGVk
LCBidXQgZW5kcyBpbiAiQXJyYXkiLCBmb3JjZSBvbiB0aGUgX3Agc3VmZml4LgotICAgIGlmIChI
YXNTdWZmaXhTdHJpbmcocmVzdWx0LCAiQXJyYXkiKSkgewotICAgICAgcmVzdWx0ICs9ICJfcCI7
Ci0gICAgfQotICB9Ci0gIHJldHVybiBTYW5pdGl6ZU5hbWVGb3JPYmpDKHJlc3VsdCwgIl9wIik7
Ci19Ci0KLXN0cmluZyBGaWVsZE5hbWVDYXBpdGFsaXplZChjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkKSB7Ci0gIC8vIFdhbnQgdGhlIHNhbWUgc3VmZml4IGhhbmRsaW5nLCBzbyB1cGNhc2Ug
dGhlIGZpcnN0IGxldHRlciBvZiB0aGUgb3RoZXIKLSAgLy8gbmFtZS4KLSAgc3RyaW5nIHJlc3Vs
dCA9IEZpZWxkTmFtZShmaWVsZCk7Ci0gIGlmIChyZXN1bHQubGVuZ3RoKCkgPiAwKSB7Ci0gICAg
cmVzdWx0WzBdID0gYXNjaWlfdG91cHBlcihyZXN1bHRbMF0pOwotICB9Ci0gIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0cmluZyBPbmVvZkVudW1OYW1lKGNvbnN0IE9uZW9mRGVzY3JpcHRvciogZGVz
Y3JpcHRvcikgewotICBjb25zdCBEZXNjcmlwdG9yKiBmaWVsZERlc2NyaXB0b3IgPSBkZXNjcmlw
dG9yLT5jb250YWluaW5nX3R5cGUoKTsKLSAgc3RyaW5nIG5hbWUgPSBDbGFzc05hbWUoZmllbGRE
ZXNjcmlwdG9yKTsKLSAgbmFtZSArPSAiXyIgKyBVbmRlcnNjb3Jlc1RvQ2FtZWxDYXNlKGRlc2Ny
aXB0b3ItPm5hbWUoKSwgdHJ1ZSkgKyAiX09uZU9mQ2FzZSI7Ci0gIC8vIE5vIHNhbml0aXplIG5l
ZWRlZCBiZWNhdXNlIHRoZSBPUyBuZXZlciBoYXMgbmFtZXMgdGhhdCBlbmQgaW4gX09uZU9mQ2Fz
ZS4KLSAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0cmluZyBPbmVvZk5hbWUoY29uc3QgT25lb2ZEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHN0cmluZyBuYW1lID0gVW5kZXJzY29yZXNUb0NhbWVs
Q2FzZShkZXNjcmlwdG9yLT5uYW1lKCksIGZhbHNlKTsKLSAgLy8gTm8gc2FuaXRpemUgbmVlZGVk
IGJlY2F1c2UgaXQgZ2V0cyBPbmVPZkNhc2UgYWRkZWQgYW5kIHRoYXQgc2hvdWxkbid0Ci0gIC8v
IGV2ZXIgY29uZmxpY3QuCi0gIHJldHVybiBuYW1lOwotfQotCi1zdHJpbmcgT25lb2ZOYW1lQ2Fw
aXRhbGl6ZWQoY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIC8vIFVzZSB0
aGUgY29tbW9uIGhhbmRsaW5nIGFuZCB0aGVuIHVwLWNhc2UgdGhlIGZpcnN0IGxldHRlci4KLSAg
c3RyaW5nIHJlc3VsdCA9IE9uZW9mTmFtZShkZXNjcmlwdG9yKTsKLSAgaWYgKHJlc3VsdC5sZW5n
dGgoKSA+IDApIHsKLSAgICByZXN1bHRbMF0gPSBhc2NpaV90b3VwcGVyKHJlc3VsdFswXSk7Ci0g
IH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RyaW5nIFVuQ2FtZWxDYXNlRmllbGROYW1lKGNv
bnN0IHN0cmluZyYgbmFtZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBzdHJp
bmcgd29ya2VyKG5hbWUpOwotICBpZiAoSGFzU3VmZml4U3RyaW5nKHdvcmtlciwgIl9wIikpIHsK
LSAgICB3b3JrZXIgPSBTdHJpcFN1ZmZpeFN0cmluZyh3b3JrZXIsICJfcCIpOwotICB9Ci0gIGlm
IChmaWVsZC0+aXNfcmVwZWF0ZWQoKSAmJiBIYXNTdWZmaXhTdHJpbmcod29ya2VyLCAiQXJyYXki
KSkgewotICAgIHdvcmtlciA9IFN0cmlwU3VmZml4U3RyaW5nKHdvcmtlciwgIkFycmF5Iik7Ci0g
IH0KLSAgaWYgKGZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQKSB7
Ci0gICAgaWYgKHdvcmtlci5sZW5ndGgoKSA+IDApIHsKLSAgICAgIGlmIChhc2NpaV9pc2xvd2Vy
KHdvcmtlclswXSkpIHsKLSAgICAgICAgd29ya2VyWzBdID0gYXNjaWlfdG91cHBlcih3b3JrZXJb
MF0pOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gd29ya2VyOwotICB9IGVsc2UgewotICAg
IHN0cmluZyByZXN1bHQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3b3JrZXIuc2l6ZSgpOyBp
KyspIHsKLSAgICAgIGNoYXIgYyA9IHdvcmtlcltpXTsKLSAgICAgIGlmIChhc2NpaV9pc3VwcGVy
KGMpKSB7Ci0gICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgIHJlc3VsdCArPSAnXyc7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmVzdWx0ICs9IGFzY2lpX3RvbG93ZXIoYyk7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICByZXN1bHQgKz0gYzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLSAgfQotfQotCi1zdHJpbmcgR2V0Q2FwaXRhbGl6ZWRUeXBlKGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGQpIHsKLSAgc3dpdGNoIChmaWVsZC0+dHlwZSgpKSB7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfSU5UMzI6Ci0gICAgICByZXR1cm4gIkludDMyIjsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UMzI6Ci0gICAgICByZXR1cm4gIlVJbnQzMiI7
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDMyOgotICAgICAgcmV0dXJuICJT
SW50MzIiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVEMzI6Ci0gICAgICBy
ZXR1cm4gIkZpeGVkMzIiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDMy
OgotICAgICAgcmV0dXJuICJTRml4ZWQzMiI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfSU5UNjQ6Ci0gICAgICByZXR1cm4gIkludDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9VSU5UNjQ6Ci0gICAgICByZXR1cm4gIlVJbnQ2NCI7Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfU0lOVDY0OgotICAgICAgcmV0dXJuICJTSW50NjQiOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX0ZJWEVENjQ6Ci0gICAgICByZXR1cm4gIkZpeGVkNjQiOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDY0OgotICAgICAgcmV0dXJuICJT
Rml4ZWQ2NCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRkxPQVQ6Ci0gICAgICBy
ZXR1cm4gIkZsb2F0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9ET1VCTEU6Ci0g
ICAgICByZXR1cm4gIkRvdWJsZSI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQk9P
TDoKLSAgICAgIHJldHVybiAiQm9vbCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
U1RSSU5HOgotICAgICAgcmV0dXJuICJTdHJpbmciOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX0JZVEVTOgotICAgICAgcmV0dXJuICJCeXRlcyI7Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OlRZUEVfRU5VTToKLSAgICAgIHJldHVybiAiRW51bSI7Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfR1JPVVA6Ci0gICAgICByZXR1cm4gIkdyb3VwIjsKLSAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdFOgotICAgICAgcmV0dXJuICJNZXNzYWdlIjsKLSAg
fQotCi0gIC8vIFNvbWUgY29tcGlsZXJzIHJlcG9ydCByZWFjaGluZyBlbmQgb2YgZnVuY3Rpb24g
ZXZlbiB0aG91Z2ggYWxsIGNhc2VzIG9mCi0gIC8vIHRoZSBlbnVtIGFyZSBoYW5kZWQgaW4gdGhl
IHN3aXRjaC4KLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJl
dHVybiBOVUxMOwotfQotCi1PYmplY3RpdmVDVHlwZSBHZXRPYmplY3RpdmVDVHlwZShGaWVsZERl
c2NyaXB0b3I6OlR5cGUgZmllbGRfdHlwZSkgewotICBzd2l0Y2ggKGZpZWxkX3R5cGUpIHsKLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQzMjoKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9TSU5UMzI6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVE
MzI6Ci0gICAgICByZXR1cm4gT0JKRUNUSVZFQ1RZUEVfSU5UMzI7Ci0KLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9VSU5UMzI6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
RklYRUQzMjoKLSAgICAgIHJldHVybiBPQkpFQ1RJVkVDVFlQRV9VSU5UMzI7Ci0KLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQ2NDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV9TSU5UNjQ6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVENjQ6Ci0g
ICAgICByZXR1cm4gT0JKRUNUSVZFQ1RZUEVfSU5UNjQ7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9VSU5UNjQ6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRklYRUQ2
NDoKLSAgICAgIHJldHVybiBPQkpFQ1RJVkVDVFlQRV9VSU5UNjQ7Ci0KLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9GTE9BVDoKLSAgICAgIHJldHVybiBPQkpFQ1RJVkVDVFlQRV9GTE9B
VDsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0RPVUJMRToKLSAgICAgIHJldHVy
biBPQkpFQ1RJVkVDVFlQRV9ET1VCTEU7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9CT09MOgotICAgICAgcmV0dXJuIE9CSkVDVElWRUNUWVBFX0JPT0xFQU47Ci0KLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkc6Ci0gICAgICByZXR1cm4gT0JKRUNUSVZFQ1RZ
UEVfU1RSSU5HOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVM6Ci0gICAg
ICByZXR1cm4gT0JKRUNUSVZFQ1RZUEVfREFUQTsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX0VOVU06Ci0gICAgICByZXR1cm4gT0JKRUNUSVZFQ1RZUEVfRU5VTTsKLQotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX01FU1NBR0U6Ci0gICAgICByZXR1cm4gT0JKRUNUSVZFQ1RZUEVfTUVTU0FHRTsKLSAg
fQotCi0gIC8vIFNvbWUgY29tcGlsZXJzIHJlcG9ydCByZWFjaGluZyBlbmQgb2YgZnVuY3Rpb24g
ZXZlbiB0aG91Z2ggYWxsIGNhc2VzIG9mCi0gIC8vIHRoZSBlbnVtIGFyZSBoYW5kZWQgaW4gdGhl
IHN3aXRjaC4KLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJl
dHVybiBPQkpFQ1RJVkVDVFlQRV9JTlQzMjsKLX0KLQotYm9vbCBJc1ByaW1pdGl2ZVR5cGUoY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBPYmplY3RpdmVDVHlwZSB0eXBlID0gR2V0
T2JqZWN0aXZlQ1R5cGUoZmllbGQpOwotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE9CSkVD
VElWRUNUWVBFX0lOVDMyOgotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfVUlOVDMyOgotICAgIGNh
c2UgT0JKRUNUSVZFQ1RZUEVfSU5UNjQ6Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9VSU5UNjQ6
Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9GTE9BVDoKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBF
X0RPVUJMRToKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX0JPT0xFQU46Ci0gICAgY2FzZSBPQkpF
Q1RJVkVDVFlQRV9FTlVNOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLWJvb2wgSXNSZWZlcmVuY2VU
eXBlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgcmV0dXJuICFJc1ByaW1pdGl2
ZVR5cGUoZmllbGQpOwotfQotCi1zdGF0aWMgc3RyaW5nIEhhbmRsZUV4dHJlbWVGbG9hdGluZ1Bv
aW50KHN0cmluZyB2YWwsIGJvb2wgYWRkX2Zsb2F0X3N1ZmZpeCkgewotICBpZiAodmFsID09ICJu
YW4iKSB7Ci0gICAgcmV0dXJuICJOQU4iOwotICB9IGVsc2UgaWYgKHZhbCA9PSAiaW5mIikgewot
ICAgIHJldHVybiAiSU5GSU5JVFkiOwotICB9IGVsc2UgaWYgKHZhbCA9PSAiLWluZiIpIHsKLSAg
ICByZXR1cm4gIi1JTkZJTklUWSI7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gZmxvYXQgc3RyaW5ncyB3
aXRoIC4sIGUgb3IgRSBuZWVkIHRvIGhhdmUgZiBhcHBlbmRlZAotICAgIGlmIChhZGRfZmxvYXRf
c3VmZml4ICYmCi0gICAgICAgICh2YWwuZmluZCgiLiIpICE9IHN0cmluZzo6bnBvcyB8fCB2YWwu
ZmluZCgiZSIpICE9IHN0cmluZzo6bnBvcyB8fAotICAgICAgICAgdmFsLmZpbmQoIkUiKSAhPSBz
dHJpbmc6Om5wb3MpKSB7Ci0gICAgICB2YWwgKz0gImYiOwotICAgIH0KLSAgICByZXR1cm4gdmFs
OwotICB9Ci19Ci0KLXN0cmluZyBHUEJHZW5lcmljVmFsdWVGaWVsZE5hbWUoY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCkgewotICAvLyBSZXR1cm5zIHRoZSBmaWVsZCB3aXRoaW4gdGhlIEdQ
QkdlbmVyaWNWYWx1ZSB1bmlvbiB0byB1c2UgZm9yIHRoZSBnaXZlbgotICAvLyBmaWVsZC4KLSAg
aWYgKGZpZWxkLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgICByZXR1cm4gInZhbHVlTWVzc2FnZSI7
Ci0gIH0KLSAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFX0lOVDMyOgotICAgICAgcmV0dXJuICJ2YWx1ZUludDMyIjsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UMzI6Ci0gICAgICByZXR1cm4gInZhbHVl
VUludDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQ2NDoKLSAgICAg
IHJldHVybiAidmFsdWVJbnQ2NCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
VUlOVDY0OgotICAgICAgcmV0dXJuICJ2YWx1ZVVJbnQ2NCI7Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfRkxPQVQ6Ci0gICAgICByZXR1cm4gInZhbHVlRmxvYXQiOwotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRToKLSAgICAgIHJldHVybiAidmFsdWVE
b3VibGUiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0w6Ci0gICAgICBy
ZXR1cm4gInZhbHVlQm9vbCI7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RS
SU5HOgotICAgICAgaWYgKGZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZ
VEVTKSB7Ci0gICAgICAgIHJldHVybiAidmFsdWVEYXRhIjsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHJldHVybiAidmFsdWVTdHJpbmciOwotICAgICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX0VOVU06Ci0gICAgICByZXR1cm4gInZhbHVlRW51bSI7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgIHJldHVybiAidmFsdWVNZXNz
YWdlIjsKLSAgfQotCi0gIC8vIFNvbWUgY29tcGlsZXJzIHJlcG9ydCByZWFjaGluZyBlbmQgb2Yg
ZnVuY3Rpb24gZXZlbiB0aG91Z2ggYWxsIGNhc2VzIG9mCi0gIC8vIHRoZSBlbnVtIGFyZSBoYW5k
ZWQgaW4gdGhlIHN3aXRjaC4KLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJl
LiI7Ci0gIHJldHVybiBOVUxMOwotfQotCi0KLXN0cmluZyBEZWZhdWx0VmFsdWUoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCkgewotICAvLyBSZXBlYXRlZCBmaWVsZHMgZG9uJ3QgaGF2ZSBk
ZWZhdWx0cy4KLSAgaWYgKGZpZWxkLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgcmV0dXJuICJuaWwi
OwotICB9Ci0KLSAgLy8gU3dpdGNoIG9uIGNwcF90eXBlIHNpbmNlIHdlIG5lZWQgdG8ga25vdyB3
aGljaCBkZWZhdWx0X3ZhbHVlXyogbWV0aG9kCi0gIC8vIG9mIEZpZWxkRGVzY3JpcHRvciB0byBj
YWxsLgotICBzd2l0Y2ggKGZpZWxkLT5jcHBfdHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfSU5UMzI6Ci0gICAgICAvLyBnY2MgYW5kIGxsdm0gcmVqZWN0IHRoZSBk
ZWNpbWFsIGZvcm0gb2Yga2ludDMybWluIGFuZCBraW50NjRtaW4uCi0gICAgICBpZiAoZmllbGQt
PmRlZmF1bHRfdmFsdWVfaW50MzIoKSA9PSBJTlRfTUlOKSB7Ci0gICAgICAgIHJldHVybiAiLTB4
ODAwMDAwMDAiOwotICAgICAgfQotICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoZmllbGQtPmRlZmF1
bHRfdmFsdWVfaW50MzIoKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlO
VDMyOgotICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoZmllbGQtPmRlZmF1bHRfdmFsdWVfdWludDMy
KCkpICsgIlUiOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OgotICAg
ICAgLy8gZ2NjIGFuZCBsbHZtIHJlamVjdCB0aGUgZGVjaW1hbCBmb3JtIG9mIGtpbnQzMm1pbiBh
bmQga2ludDY0bWluLgotICAgICAgaWYgKGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2ludDY0KCkgPT0g
TExPTkdfTUlOKSB7Ci0gICAgICAgIHJldHVybiAiLTB4ODAwMDAwMDAwMDAwMDAwMExMIjsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiBTaW1wbGVJdG9hKGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2ludDY0
KCkpICsgIkxMIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UNjQ6Ci0g
ICAgICByZXR1cm4gU2ltcGxlSXRvYShmaWVsZC0+ZGVmYXVsdF92YWx1ZV91aW50NjQoKSkgKyAi
VUxMIjsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9ET1VCTEU6Ci0gICAgICBy
ZXR1cm4gSGFuZGxlRXh0cmVtZUZsb2F0aW5nUG9pbnQoCi0gICAgICAgICAgU2ltcGxlRHRvYShm
aWVsZC0+ZGVmYXVsdF92YWx1ZV9kb3VibGUoKSksIGZhbHNlKTsKLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV9GTE9BVDoKLSAgICAgIHJldHVybiBIYW5kbGVFeHRyZW1lRmxvYXRp
bmdQb2ludCgKLSAgICAgICAgICBTaW1wbGVGdG9hKGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2Zsb2F0
KCkpLCB0cnVlKTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9CT09MOgotICAg
ICAgcmV0dXJuIGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2Jvb2woKSA/ICJZRVMiIDogIk5PIjsKLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6IHsKLSAgICAgIGNvbnN0IGJv
b2wgaGFzX2RlZmF1bHRfdmFsdWUgPSBmaWVsZC0+aGFzX2RlZmF1bHRfdmFsdWUoKTsKLSAgICAg
IGNvbnN0IHN0cmluZyYgZGVmYXVsdF9zdHJpbmcgPSBmaWVsZC0+ZGVmYXVsdF92YWx1ZV9zdHJp
bmcoKTsKLSAgICAgIGlmICghaGFzX2RlZmF1bHRfdmFsdWUgfHwgZGVmYXVsdF9zdHJpbmcubGVu
Z3RoKCkgPT0gMCkgewotICAgICAgICAvLyBJZiB0aGUgZmllbGQgaXMgZGVmaW5lZCBhcyBiZWlu
ZyB0aGUgZW1wdHkgc3RyaW5nLAotICAgICAgICAvLyB0aGVuIHdlIHdpbGwganVzdCBhc3NpZ24g
dG8gbmlsLCBhcyB0aGUgZW1wdHkgc3RyaW5nIGlzIHRoZQotICAgICAgICAvLyBkZWZhdWx0IGZv
ciBib3RoIHN0cmluZ3MgYW5kIGRhdGEuCi0gICAgICAgIHJldHVybiAibmlsIjsKLSAgICAgIH0K
LSAgICAgIGlmIChmaWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRFUykg
ewotICAgICAgICAvLyBXZSB3YW50IGNvbnN0YW50IGZpZWxkcyBpbiBvdXIgZGF0YSBzdHJ1Y3R1
cmVzIHNvIHdlIGNhbgotICAgICAgICAvLyBkZWNsYXJlIHRoZW0gYXMgc3RhdGljLiBUbyBhY2hp
ZXZlIHRoaXMgd2UgY2hlYXQgYW5kIHN0dWZmCi0gICAgICAgIC8vIGEgZXNjYXBlZCBjIHN0cmlu
ZyAocHJlZml4ZWQgd2l0aCBhIGxlbmd0aCkgaW50byB0aGUgZGF0YQotICAgICAgICAvLyBmaWVs
ZCwgYW5kIGNhc3QgaXQgdG8gYW4gKE5TRGF0YSopIHNvIGl0IHdpbGwgY29tcGlsZS4KLSAgICAg
ICAgLy8gVGhlIHJ1bnRpbWUgbGlicmFyeSBrbm93cyBob3cgdG8gaGFuZGxlIGl0LgotCi0gICAg
ICAgIC8vIE11c3QgY29udmVydCB0byBhIHN0YW5kYXJkIGJ5dGUgb3JkZXIgZm9yIHBhY2tpbmcg
bGVuZ3RoIGludG8KLSAgICAgICAgLy8gYSBjc3RyaW5nLgotICAgICAgICB1aW50MzIgbGVuZ3Ro
ID0gZ2h0b25sKGRlZmF1bHRfc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc3RyaW5nIGJ5dGVz
KChjb25zdCBjaGFyKikmbGVuZ3RoLCBzaXplb2YobGVuZ3RoKSk7Ci0gICAgICAgIGJ5dGVzLmFw
cGVuZChkZWZhdWx0X3N0cmluZyk7Ci0gICAgICAgIHJldHVybiAiKE5TRGF0YSopXCIiICsgRXNj
YXBlVHJpZ3JhcGhzKENFc2NhcGUoYnl0ZXMpKSArICJcIiI7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICByZXR1cm4gIkBcIiIgKyBFc2NhcGVUcmlncmFwaHMoQ0VzY2FwZShkZWZhdWx0X3N0cmlu
ZykpICsgIlwiIjsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfRU5VTToKLSAgICAgIHJldHVybiBFbnVtVmFsdWVOYW1lKGZpZWxkLT5kZWZhdWx0X3Zh
bHVlX2VudW0oKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToK
LSAgICAgIHJldHVybiAibmlsIjsKLSAgfQotCi0gIC8vIFNvbWUgY29tcGlsZXJzIHJlcG9ydCBy
ZWFjaGluZyBlbmQgb2YgZnVuY3Rpb24gZXZlbiB0aG91Z2ggYWxsIGNhc2VzIG9mCi0gIC8vIHRo
ZSBlbnVtIGFyZSBoYW5kZWQgaW4gdGhlIHN3aXRjaC4KLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwg
IkNhbid0IGdldCBoZXJlLiI7Ci0gIHJldHVybiBOVUxMOwotfQotCi1ib29sIEhhc05vblplcm9E
ZWZhdWx0VmFsdWUoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICAvLyBSZXBlYXRl
ZCBmaWVsZHMgZG9uJ3QgaGF2ZSBkZWZhdWx0cy4KLSAgaWYgKGZpZWxkLT5pc19yZXBlYXRlZCgp
KSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gQXMgbXVjaCBhcyBjaGVja2luZyBm
aWVsZC0+aGFzX2RlZmF1bHRfdmFsdWUoKSBzZWVtcyB1c2VmdWwsIGl0IGlzbid0Ci0gIC8vIGJl
Y2F1c2Ugb2YgZW51bXMuIHByb3RvMiBzeW50YXggYWxsb3dzIHRoZSBmaXJzdCBpdGVtIGluIGFu
IGVudW0gKHRoZQotICAvLyBkZWZhdWx0KSB0byBiZSBub24gemVyby4gU28gY2hlY2tpbmcgZmll
bGQtPmhhc19kZWZhdWx0X3ZhbHVlKCkgd291bGQKLSAgLy8gcmVzdWx0IGluIG1pc3NpbmcgdGhp
cyBub24gemVybyBkZWZhdWx0LiAgU2VlIE1lc3NhZ2VXaXRoT25lQmFzZWRFbnVtIGluCi0gIC8v
IG9iamVjdGl2ZWMvVGVzdHMvdW5pdHRlc3Rfb2JqYy5wcm90byBmb3IgYSB0ZXN0IE1lc3NhZ2Ug
dG8gY29uZmlybSB0aGlzLgotCi0gIC8vIFNvbWUgcHJvdG8gZmlsZSBzZXQgdGhlIGRlZmF1bHQg
dG8gdGhlIHplcm8gdmFsdWUsIHNvIG1ha2Ugc3VyZSB0aGUgdmFsdWUKLSAgLy8gaXNuJ3QgdGhl
IHplcm8gY2FzZS4KLSAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyOgotICAgICAgcmV0dXJuIGZpZWxkLT5kZWZhdWx0
X3ZhbHVlX2ludDMyKCkgIT0gMDsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9V
SU5UMzI6Ci0gICAgICByZXR1cm4gZmllbGQtPmRlZmF1bHRfdmFsdWVfdWludDMyKCkgIT0gMFU7
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UNjQ6Ci0gICAgICByZXR1cm4g
ZmllbGQtPmRlZmF1bHRfdmFsdWVfaW50NjQoKSAhPSAwTEw7Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfVUlOVDY0OgotICAgICAgcmV0dXJuIGZpZWxkLT5kZWZhdWx0X3ZhbHVl
X3VpbnQ2NCgpICE9IDBVTEw7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRE9V
QkxFOgotICAgICAgcmV0dXJuIGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2RvdWJsZSgpICE9IDAuMDsK
LSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9GTE9BVDoKLSAgICAgIHJldHVybiBm
aWVsZC0+ZGVmYXVsdF92YWx1ZV9mbG9hdCgpICE9IDAuMGY7Ci0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICAgIHJldHVybiBmaWVsZC0+ZGVmYXVsdF92YWx1ZV9i
b29sKCk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOiB7Ci0gICAg
ICBjb25zdCBzdHJpbmcmIGRlZmF1bHRfc3RyaW5nID0gZmllbGQtPmRlZmF1bHRfdmFsdWVfc3Ry
aW5nKCk7Ci0gICAgICByZXR1cm4gZGVmYXVsdF9zdHJpbmcubGVuZ3RoKCkgIT0gMDsKLSAgICB9
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTToKLSAgICAgIHJldHVybiBm
aWVsZC0+ZGVmYXVsdF92YWx1ZV9lbnVtKCktPm51bWJlcigpICE9IDA7Ci0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQot
Ci0gIC8vIFNvbWUgY29tcGlsZXJzIHJlcG9ydCByZWFjaGluZyBlbmQgb2YgZnVuY3Rpb24gZXZl
biB0aG91Z2ggYWxsIGNhc2VzIG9mCi0gIC8vIHRoZSBlbnVtIGFyZSBoYW5kZWQgaW4gdGhlIHN3
aXRjaC4KLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJldHVy
biBmYWxzZTsKLX0KLQotc3RyaW5nIEJ1aWxkRmxhZ3NTdHJpbmcoY29uc3QgdmVjdG9yPHN0cmlu
Zz4mIHN0cmluZ3MpIHsKLSAgaWYgKHN0cmluZ3Muc2l6ZSgpID09IDApIHsKLSAgICByZXR1cm4g
IjAiOwotICB9Ci0gIHN0cmluZyBzdHJpbmc7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHN0
cmluZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICBpZiAoaSA+IDApIHsKLSAgICAgIHN0cmluZy5hcHBl
bmQoIiB8ICIpOwotICAgIH0KLSAgICBzdHJpbmcuYXBwZW5kKHN0cmluZ3NbaV0pOwotICB9Ci0g
IHJldHVybiBzdHJpbmc7Ci19Ci0KLXN0cmluZyBCdWlsZENvbW1lbnRzU3RyaW5nKGNvbnN0IFNv
dXJjZUxvY2F0aW9uJiBsb2NhdGlvbikgewotICBjb25zdCBzdHJpbmcmIGNvbW1lbnRzID0gbG9j
YXRpb24ubGVhZGluZ19jb21tZW50cy5lbXB0eSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPyBsb2NhdGlvbi50cmFpbGluZ19jb21tZW50cwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogbG9jYXRpb24ubGVhZGluZ19jb21tZW50czsKLSAgdmVjdG9yPHN0cmluZz4g
bGluZXM7Ci0gIFNwbGl0U3RyaW5nQWxsb3dFbXB0eShjb21tZW50cywgIlxuIiwgJmxpbmVzKTsK
LSAgd2hpbGUgKCFsaW5lcy5lbXB0eSgpICYmIGxpbmVzLmJhY2soKS5lbXB0eSgpKSB7Ci0gICAg
bGluZXMucG9wX2JhY2soKTsKLSAgfQotICBzdHJpbmcgcHJlZml4KCIvLy8iKTsKLSAgc3RyaW5n
IHN1ZmZpeCgiXG4iKTsKLSAgc3RyaW5nIGZpbmFsX2NvbW1lbnRzOwotICBmb3IgKGludCBpID0g
MDsgaSA8IGxpbmVzLnNpemUoKTsgaSsrKSB7Ci0gICAgLy8gSGVhZGVyRG9jIHVzZXMgJ1wnIGFu
ZCAnQCcgZm9yIG1hcmtlcnM7IGVzY2FwZSB0aGVtLgotICAgIGNvbnN0IHN0cmluZyBsaW5lID0g
U3RyaW5nUmVwbGFjZShsaW5lc1tpXSwgIlxcIiwgIlxcXFwiLCB0cnVlKTsKLSAgICBmaW5hbF9j
b21tZW50cyArPQotICAgICAgICBwcmVmaXggKyBTdHJpbmdSZXBsYWNlKGxpbmUsICJAIiwgIlxc
QCIsIHRydWUpICsgc3VmZml4OwotICB9Ci0gIHJldHVybiBmaW5hbF9jb21tZW50czsKLX0KLQot
bmFtZXNwYWNlIHsKLQotLy8gSW50ZXJuYWwgaGVscGVyIGNsYXNzIHRoYXQgcGFyc2VzIHRoZSBl
eHBlY3RlZCBwYWNrYWdlIHRvIHByZWZpeCBtYXBwaW5ncwotLy8gZmlsZS4KLWNsYXNzIFBhcnNl
ciB7Ci0gcHVibGljOgotICBQYXJzZXIobWFwPHN0cmluZywgc3RyaW5nPiogaW5vdXRfcGFja2Fn
ZV90b19wcmVmaXhfbWFwKQotICAgICAgOiBwcmVmaXhfbWFwXyhpbm91dF9wYWNrYWdlX3RvX3By
ZWZpeF9tYXApLCBsaW5lXygwKSB7fQotCi0gIC8vIFBhcnNlcyBhIGNoZWNrIG9mIGlucHV0LCBy
ZXR1cm5pbmcgc3VjY2Vzcy9mYWlsdXJlLgotICBib29sIFBhcnNlQ2h1bmsoU3RyaW5nUGllY2Ug
Y2h1bmspOwotCi0gIC8vIFNob3VsZCBiZSBjYWxsZWQgdG8gZmluaXNoIHBhcnNpbmcgKGFmdGVy
IGFsbCBpbnB1dCBoYXMgYmVlbiBwcm92aWRlZCB2aWEKLSAgLy8gUGFyc2VDaHVuaygpKS4gIFJl
dHVybnMgc3VjY2Vzcy9mYWlsdXJlLgotICBib29sIEZpbmlzaCgpOwotCi0gIGludCBsYXN0X2xp
bmUoKSBjb25zdCB7IHJldHVybiBsaW5lXzsgfQotICBzdHJpbmcgZXJyb3Jfc3RyKCkgY29uc3Qg
eyByZXR1cm4gZXJyb3Jfc3RyXzsgfQotCi0gcHJpdmF0ZToKLSAgYm9vbCBQYXJzZUxvb3AoKTsK
LQotICBtYXA8c3RyaW5nLCBzdHJpbmc+KiBwcmVmaXhfbWFwXzsKLSAgaW50IGxpbmVfOwotICBz
dHJpbmcgZXJyb3Jfc3RyXzsKLSAgU3RyaW5nUGllY2UgcF87Ci0gIHN0cmluZyBsZWZ0b3Zlcl87
Ci19OwotCi1ib29sIFBhcnNlcjo6UGFyc2VDaHVuayhTdHJpbmdQaWVjZSBjaHVuaykgewotICBp
ZiAoIWxlZnRvdmVyXy5lbXB0eSgpKSB7Ci0gICAgY2h1bmsuQXBwZW5kVG9TdHJpbmcoJmxlZnRv
dmVyXyk7Ci0gICAgcF8gPSBTdHJpbmdQaWVjZShsZWZ0b3Zlcl8pOwotICB9IGVsc2UgewotICAg
IHBfID0gY2h1bms7Ci0gIH0KLSAgYm9vbCByZXN1bHQgPSBQYXJzZUxvb3AoKTsKLSAgaWYgKHBf
LmVtcHR5KCkpIHsKLSAgICBsZWZ0b3Zlcl8uY2xlYXIoKTsKLSAgfSBlbHNlIHsKLSAgICBsZWZ0
b3Zlcl8gPSBwXy5Ub1N0cmluZygpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wg
UGFyc2VyOjpGaW5pc2goKSB7Ci0gIGlmIChsZWZ0b3Zlcl8uZW1wdHkoKSkgewotICAgIHJldHVy
biB0cnVlOwotICB9Ci0gIC8vIEZvcmNlIGEgbmV3bGluZSBvbnRvIHRoZSBlbmQgdG8gZmluaXNo
IHBhcnNpbmcuCi0gIHBfID0gU3RyaW5nUGllY2UobGVmdG92ZXJfICsgIlxuIik7Ci0gIGlmICgh
UGFyc2VMb29wKCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHBfLmVtcHR5
KCk7ICAvLyBFdmVyeXRoaW5nIHVzZWQ/Ci19Ci0KLXN0YXRpYyBib29sIGFzY2lpX2lzbmV3bGlu
ZShjaGFyIGMpIHsgcmV0dXJuIGMgPT0gJ1xuJyB8fCBjID09ICdccic7IH0KLQotYm9vbCBSZWFk
TGluZShTdHJpbmdQaWVjZSogaW5wdXQsIFN0cmluZ1BpZWNlKiBsaW5lKSB7Ci0gIGZvciAoaW50
IGxlbiA9IDA7IGxlbiA8IGlucHV0LT5zaXplKCk7ICsrbGVuKSB7Ci0gICAgaWYgKGFzY2lpX2lz
bmV3bGluZSgoKmlucHV0KVtsZW5dKSkgewotICAgICAgKmxpbmUgPSBTdHJpbmdQaWVjZShpbnB1
dC0+ZGF0YSgpLCBsZW4pOwotICAgICAgKytsZW47ICAvLyBhZHZhbmNlIG92ZXIgdGhlIG5ld2xp
bmUKLSAgICAgICppbnB1dCA9IFN0cmluZ1BpZWNlKGlucHV0LT5kYXRhKCkgKyBsZW4sIGlucHV0
LT5zaXplKCkgLSBsZW4pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIHJldHVy
biBmYWxzZTsgIC8vIFJhbiBvdXQgb2YgaW5wdXQgd2l0aCBubyBuZXdsaW5lLgotfQotCi12b2lk
IFRyaW1XaGl0ZXNwYWNlKFN0cmluZ1BpZWNlKiBpbnB1dCkgewotICB3aGlsZSAoIWlucHV0LT5l
bXB0eSgpICYmIGFzY2lpX2lzc3BhY2UoKmlucHV0LT5kYXRhKCkpKSB7Ci0gICAgaW5wdXQtPnJl
bW92ZV9wcmVmaXgoMSk7Ci0gIH0KLSAgd2hpbGUgKCFpbnB1dC0+ZW1wdHkoKSAmJiBhc2NpaV9p
c3NwYWNlKCgqaW5wdXQpW2lucHV0LT5sZW5ndGgoKSAtIDFdKSkgewotICAgIGlucHV0LT5yZW1v
dmVfc3VmZml4KDEpOwotICB9Ci19Ci0KLXZvaWQgUmVtb3ZlQ29tbWVudChTdHJpbmdQaWVjZSog
aW5wdXQpIHsKLSAgaW50IG9mZnNldCA9IGlucHV0LT5maW5kKCcjJyk7Ci0gIGlmIChvZmZzZXQg
IT0gU3RyaW5nUGllY2U6Om5wb3MpIHsKLSAgICBpbnB1dC0+cmVtb3ZlX3N1ZmZpeChpbnB1dC0+
bGVuZ3RoKCkgLSBvZmZzZXQpOwotICB9Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZUxvb3AoKSB7
Ci0gIFN0cmluZ1BpZWNlIGxpbmU7Ci0gIHdoaWxlIChSZWFkTGluZSgmcF8sICZsaW5lKSkgewot
ICAgICsrbGluZV87Ci0gICAgUmVtb3ZlQ29tbWVudCgmbGluZSk7Ci0gICAgVHJpbVdoaXRlc3Bh
Y2UoJmxpbmUpOwotICAgIGlmIChsaW5lLnNpemUoKSA9PSAwKSB7Ci0gICAgICBjb250aW51ZTsg
IC8vIEJsYW5rIGxpbmUuCi0gICAgfQotICAgIGludCBvZmZzZXQgPSBsaW5lLmZpbmQoJz0nKTsK
LSAgICBpZiAob2Zmc2V0ID09IFN0cmluZ1BpZWNlOjpucG9zKSB7Ci0gICAgICBlcnJvcl9zdHJf
ID0KLSAgICAgICAgICBzdHJpbmcoIkxpbmUgd2l0aG91dCBlcXVhbCBzaWduOiAnIikgKyBsaW5l
LlRvU3RyaW5nKCkgKyAiJy4iOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBTdHJp
bmdQaWVjZSBwYWNrYWdlKGxpbmUsIDAsIG9mZnNldCk7Ci0gICAgU3RyaW5nUGllY2UgcHJlZml4
KGxpbmUsIG9mZnNldCArIDEsIGxpbmUubGVuZ3RoKCkgLSBvZmZzZXQgLSAxKTsKLSAgICBUcmlt
V2hpdGVzcGFjZSgmcGFja2FnZSk7Ci0gICAgVHJpbVdoaXRlc3BhY2UoJnByZWZpeCk7Ci0gICAg
Ly8gRG9uJ3QgcmVhbGx5IHdvcnJ5IGFib3V0IGVycm9yIGNoZWNraW5nIHRoZSBwYWNrYWdlL3By
ZWZpeCBmb3IKLSAgICAvLyBiZWluZyB2YWxpZC4gIEFzc3VtZSB0aGUgZmlsZSBpcyB2YWxpZGF0
ZWQgd2hlbiBpdCBpcyBjcmVhdGVkL2VkaXRlZC4KLSAgICAoKnByZWZpeF9tYXBfKVtwYWNrYWdl
LlRvU3RyaW5nKCldID0gcHJlZml4LlRvU3RyaW5nKCk7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgTG9hZEV4cGVjdGVkUGFja2FnZVByZWZpeGVzKGNvbnN0IE9wdGlvbnMgJmdlbmVy
YXRpb25fb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJp
bmcsIHN0cmluZz4qIHByZWZpeF9tYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJpbmcqIG91dF9lcnJvcikgewotICBpZiAoZ2VuZXJhdGlvbl9vcHRpb25zLmV4cGVjdGVk
X3ByZWZpeGVzX3BhdGguZW1wdHkoKSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaW50
IGZkOwotICBkbyB7Ci0gICAgZmQgPSBvcGVuKGdlbmVyYXRpb25fb3B0aW9ucy5leHBlY3RlZF9w
cmVmaXhlc19wYXRoLmNfc3RyKCksIE9fUkRPTkxZKTsKLSAgfSB3aGlsZSAoZmQgPCAwICYmIGVy
cm5vID09IEVJTlRSKTsKLSAgaWYgKGZkIDwgMCkgewotICAgICpvdXRfZXJyb3IgPQotICAgICAg
ICBzdHJpbmcoImVycm9yOiBVbmFibGUgdG8gb3BlbiBcIiIpICsKLSAgICAgICAgZ2VuZXJhdGlv
bl9vcHRpb25zLmV4cGVjdGVkX3ByZWZpeGVzX3BhdGggKwotICAgICAgICAiXCIsICIgKyBzdHJl
cnJvcihlcnJubyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlvOjpGaWxlSW5wdXRTdHJl
YW0gZmlsZV9zdHJlYW0oZmQpOwotICBmaWxlX3N0cmVhbS5TZXRDbG9zZU9uRGVsZXRlKHRydWUp
OwotCi0gIFBhcnNlciBwYXJzZXIocHJlZml4X21hcCk7Ci0gIGNvbnN0IHZvaWQqIGJ1ZjsKLSAg
aW50IGJ1Zl9sZW47Ci0gIHdoaWxlIChmaWxlX3N0cmVhbS5OZXh0KCZidWYsICZidWZfbGVuKSkg
ewotICAgIGlmIChidWZfbGVuID09IDApIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAg
IGlmICghcGFyc2VyLlBhcnNlQ2h1bmsoU3RyaW5nUGllY2Uoc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGJ1ZiksIGJ1Zl9sZW4pKSkgewotICAgICAgKm91dF9lcnJvciA9Ci0gICAgICAgICAgc3Ry
aW5nKCJlcnJvcjogIikgKyBnZW5lcmF0aW9uX29wdGlvbnMuZXhwZWN0ZWRfcHJlZml4ZXNfcGF0
aCArCi0gICAgICAgICAgIiBMaW5lICIgKyBTaW1wbGVJdG9hKHBhcnNlci5sYXN0X2xpbmUoKSkg
KyAiLCAiICsgcGFyc2VyLmVycm9yX3N0cigpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgfQotICByZXR1cm4gcGFyc2VyLkZpbmlzaCgpOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQot
Ym9vbCBWYWxpZGF0ZU9iakNDbGFzc1ByZWZpeChjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgZ2VuZXJhdGlvbl9v
cHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcqIG91dF9lcnJvcikg
ewotICBjb25zdCBzdHJpbmcgcHJlZml4ID0gZmlsZS0+b3B0aW9ucygpLm9iamNfY2xhc3NfcHJl
Zml4KCk7Ci0gIGNvbnN0IHN0cmluZyBwYWNrYWdlID0gZmlsZS0+cGFja2FnZSgpOwotCi0gIC8v
IE5PVEU6IHNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmNjIG1ha2VzIHVzZSBv
ZiBjZXJyIGZvciBzb21lCi0gIC8vIGVycm9yIGNhc2VzLCBzbyBpdCBzZWVtcyB0byBiZSBvayB0
byB1c2UgYXMgYSBiYWNrIGRvb3IgZm9yIHdhcm5pbmdzLgotCi0gIC8vIExvYWQgYW55IGV4cGVj
dGVkIHBhY2thZ2UgcHJlZml4ZXMgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aG9zZS4KLSAgbWFwPHN0
cmluZywgc3RyaW5nPiBleHBlY3RlZF9wYWNrYWdlX3ByZWZpeGVzOwotICBpZiAoIUxvYWRFeHBl
Y3RlZFBhY2thZ2VQcmVmaXhlcyhnZW5lcmF0aW9uX29wdGlvbnMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZleHBlY3RlZF9wYWNrYWdlX3ByZWZpeGVzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZXJyb3IpKSB7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0KLSAgLy8gQ2hlY2s6IEVycm9yIC0gU2VlIGlmIHRoZXJlIHdhcyBhbiBleHBlY3Rl
ZCBwcmVmaXggZm9yIHRoZSBwYWNrYWdlIGFuZAotICAvLyByZXBvcnQgaWYgaXQgZG9lc24ndCBt
YXRjaCAod3Jvbmcgb3IgbWlzc2luZykuCi0gIG1hcDxzdHJpbmcsIHN0cmluZz46Oml0ZXJhdG9y
IHBhY2thZ2VfbWF0Y2ggPQotICAgICAgZXhwZWN0ZWRfcGFja2FnZV9wcmVmaXhlcy5maW5kKHBh
Y2thZ2UpOwotICBpZiAocGFja2FnZV9tYXRjaCAhPSBleHBlY3RlZF9wYWNrYWdlX3ByZWZpeGVz
LmVuZCgpKSB7Ci0gICAgLy8gVGhlcmUgd2FzIGFuIGVudHJ5LCBhbmQuLi4KLSAgICBpZiAocGFj
a2FnZV9tYXRjaC0+c2Vjb25kID09IHByZWZpeCkgewotICAgICAgLy8gLi4uaXQgbWF0Y2hlcy4g
IEFsbCBnb29kLCBvdXQgb2YgaGVyZSEKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7
Ci0gICAgICAvLyAuLi5pdCBkaWRuJ3QgbWF0Y2ghCi0gICAgICAqb3V0X2Vycm9yID0gImVycm9y
OiBFeHBlY3RlZCAnb3B0aW9uIG9iamNfY2xhc3NfcHJlZml4ID0gXCIiICsKLSAgICAgICAgICAg
ICAgICAgICBwYWNrYWdlX21hdGNoLT5zZWNvbmQgKyAiXCI7JyBmb3IgcGFja2FnZSAnIiArIHBh
Y2thZ2UgKwotICAgICAgICAgICAgICAgICAgICInIGluICciICsgZmlsZS0+bmFtZSgpICsgIici
OwotICAgICAgaWYgKHByZWZpeC5sZW5ndGgoKSkgewotICAgICAgICAqb3V0X2Vycm9yICs9ICI7
IGJ1dCBmb3VuZCAnIiArIHByZWZpeCArICInIGluc3RlYWQiOwotICAgICAgfQotICAgICAgKm91
dF9lcnJvciArPSAiLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLy8g
SWYgdGhlcmUgd2FzIG5vIHByZWZpeCBvcHRpb24sIHdlJ3JlIGRvbmUgYXQgdGhpcyBwb2ludC4K
LSAgaWYgKHByZWZpeC5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgLy8gTm8gcHJlZml4LCBub3RoaW5n
IGxlZnQgdG8gY2hlY2suCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBDaGVjazogRXJy
b3IgLSBNYWtlIHN1cmUgdGhlIHByZWZpeCB3YXNuJ3QgZXhwZWN0ZWQgZm9yIGEgZGlmZmVyZW50
Ci0gIC8vIHBhY2thZ2UgKG92ZXJsYXAgaXMgYWxsb3dlZCwgYnV0IGl0IGhhcyB0byBiZSBsaXN0
ZWQgYXMgYW4gZXhwZWN0ZWQKLSAgLy8gb3ZlcmxhcCkuCi0gIGZvciAobWFwPHN0cmluZywgc3Ry
aW5nPjo6aXRlcmF0b3IgaSA9IGV4cGVjdGVkX3BhY2thZ2VfcHJlZml4ZXMuYmVnaW4oKTsKLSAg
ICAgICBpICE9IGV4cGVjdGVkX3BhY2thZ2VfcHJlZml4ZXMuZW5kKCk7ICsraSkgewotICAgIGlm
IChpLT5zZWNvbmQgPT0gcHJlZml4KSB7Ci0gICAgICAqb3V0X2Vycm9yID0KLSAgICAgICAgICAi
ZXJyb3I6IEZvdW5kICdvcHRpb24gb2JqY19jbGFzc19wcmVmaXggPSBcIiIgKyBwcmVmaXggKwot
ICAgICAgICAgICJcIjsnIGluICciICsgZmlsZS0+bmFtZSgpICsKLSAgICAgICAgICAiJzsgdGhh
dCBwcmVmaXggaXMgYWxyZWFkeSB1c2VkIGZvciAncGFja2FnZSAiICsgaS0+Zmlyc3QgKwotICAg
ICAgICAgICI7Jy4gSXQgY2FuIG9ubHkgYmUgcmV1c2VkIGJ5IGxpc3RpbmcgaXQgaW4gdGhlIGV4
cGVjdGVkIGZpbGUgKCIgKwotICAgICAgICAgIGdlbmVyYXRpb25fb3B0aW9ucy5leHBlY3RlZF9w
cmVmaXhlc19wYXRoICsgIikuIjsKLSAgICAgIHJldHVybiBmYWxzZTsgIC8vIE9ubHkgcmVwb3J0
IGZpcnN0IHVzYWdlIG9mIHRoZSBwcmVmaXguCi0gICAgfQotICB9Ci0KLSAgLy8gQ2hlY2s6IFdh
cm5pbmcgLSBNYWtlIHN1cmUgdGhlIHByZWZpeCBpcyBpcyBhIHJlYXNvbmFibGUgdmFsdWUgYWNj
b3JkaW5nCi0gIC8vIHRvIEFwcGxlJ3MgcnVsZXMgKHRoZSBjaGVja3MgYWJvdmUgaW1wbGljaXRs
eSB3aGl0ZWxpc3QgYW55dGhpbmcgdGhhdAotICAvLyBkb2Vzbid0IG1lZXQgdGhlc2UgcnVsZXMp
LgotICBpZiAoIWFzY2lpX2lzdXBwZXIocHJlZml4WzBdKSkgewotICAgIGNlcnIgPDwgZW5kbAot
ICAgICAgICAgPDwgInByb3RvYzowOiB3YXJuaW5nOiBJbnZhbGlkICdvcHRpb24gb2JqY19jbGFz
c19wcmVmaXggPSBcIiIKLSAgICAgICAgIDw8IHByZWZpeCA8PCAiXCI7JyBpbiAnIiA8PCBmaWxl
LT5uYW1lKCkgPDwgIic7IgotICAgICAgICAgPDwgIiBpdCBzaG91bGQgc3RhcnQgd2l0aCBhIGNh
cGl0YWwgbGV0dGVyLiIgPDwgZW5kbDsKLSAgICBjZXJyLmZsdXNoKCk7Ci0gIH0KLSAgaWYgKHBy
ZWZpeC5sZW5ndGgoKSA8IDMpIHsKLSAgICAvLyBBcHBsZSByZXNlcnZlcyAyIGNoYXJhY3RlciBw
cmVmaXhlcyBmb3IgdGhlbXNlbHZlcy4gVGhleSBkbyB1c2Ugc29tZQotICAgIC8vIDMgY2hhcmFj
dGVyIHByZWZpeGVzLCBidXQgdGhleSBoYXZlbid0IHVwZGF0ZWQgdGhlIHJ1bGVzL2RvY3MuCi0g
ICAgY2VyciA8PCBlbmRsCi0gICAgICAgICA8PCAicHJvdG9jOjA6IHdhcm5pbmc6IEludmFsaWQg
J29wdGlvbiBvYmpjX2NsYXNzX3ByZWZpeCA9IFwiIgotICAgICAgICAgPDwgcHJlZml4IDw8ICJc
IjsnIGluICciIDw8IGZpbGUtPm5hbWUoKSA8PCAiJzsiCi0gICAgICAgICA8PCAiIEFwcGxlIHJl
Y29tbWVuZHMgdGhleSBzaG91bGQgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzIGxvbmcuIgotICAg
ICAgICAgPDwgZW5kbDsKLSAgICBjZXJyLmZsdXNoKCk7Ci0gIH0KLQotICAvLyBDaGVjazogV2Fy
bmluZyAtIElmIHRoZSBnaXZlbiBwYWNrYWdlL3ByZWZpeCBwYWlyIHdhc24ndCBleHBlY3RlZCwg
aXNzdWUgYQotICAvLyB3YXJuaW5nIGlzc3VlIGEgd2FybmluZyBzdWdnZXN0aW5nIGl0IGdldHMg
YWRkZWQgdG8gdGhlIGZpbGUuCi0gIGlmICghZXhwZWN0ZWRfcGFja2FnZV9wcmVmaXhlcy5lbXB0
eSgpKSB7Ci0gICAgY2VyciA8PCBlbmRsCi0gICAgICAgICA8PCAicHJvdG9jOjA6IHdhcm5pbmc6
IEZvdW5kIHVuZXhwZWN0ZWQgJ29wdGlvbiBvYmpjX2NsYXNzX3ByZWZpeCA9IFwiIgotICAgICAg
ICAgPDwgcHJlZml4IDw8ICJcIjsnIGluICciIDw8IGZpbGUtPm5hbWUoKSA8PCAiJzsiCi0gICAg
ICAgICA8PCAiIGNvbnNpZGVyIGFkZGluZyBpdCB0byB0aGUgZXhwZWN0ZWQgcHJlZml4ZXMgZmls
ZSAoIgotICAgICAgICAgPDwgZ2VuZXJhdGlvbl9vcHRpb25zLmV4cGVjdGVkX3ByZWZpeGVzX3Bh
dGggPDwgIikuIiA8PCBlbmRsOwotICAgIGNlcnIuZmx1c2goKTsKLSAgfQotCi0gIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFRleHRGb3JtYXREZWNvZGVEYXRhOjpBZGRTdHJpbmcoaW50MzIga2V5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgaW5w
dXRfZm9yX2RlY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdHJpbmcmIGRlc2lyZWRfb3V0cHV0KSB7Ci0gIGZvciAodmVjdG9yPERhdGFFbnRyeT46OmNv
bnN0X2l0ZXJhdG9yIGkgPSBlbnRyaWVzXy5iZWdpbigpOwotICAgICAgIGkgIT0gZW50cmllc18u
ZW5kKCk7ICsraSkgewotICAgIGlmIChpLT5maXJzdCA9PSBrZXkpIHsKLSAgICAgIGNlcnIgPDwg
ImVycm9yOiBkdXBsaWNhdGUga2V5ICgiIDw8IGtleQotICAgICAgICAgICA8PCAiKSBtYWtpbmcg
VGV4dEZvcm1hdCBkYXRhLCBpbnB1dDogXCIiIDw8IGlucHV0X2Zvcl9kZWNvZGUKLSAgICAgICAg
ICAgPDwgIlwiLCBkZXNpcmVkOiBcIiIgPDwgZGVzaXJlZF9vdXRwdXQgPDwgIlwiLiIgPDwgZW5k
bDsKLSAgICAgIGNlcnIuZmx1c2goKTsKLSAgICAgIGFib3J0KCk7Ci0gICAgfQotICB9Ci0KLSAg
Y29uc3Qgc3RyaW5nJiBkYXRhID0gVGV4dEZvcm1hdERlY29kZURhdGE6OkRlY29kZURhdGFGb3JT
dHJpbmcoCi0gICAgICBpbnB1dF9mb3JfZGVjb2RlLCBkZXNpcmVkX291dHB1dCk7Ci0gIGVudHJp
ZXNfLnB1c2hfYmFjayhEYXRhRW50cnkoa2V5LCBkYXRhKSk7Ci19Ci0KLXN0cmluZyBUZXh0Rm9y
bWF0RGVjb2RlRGF0YTo6RGF0YSgpIGNvbnN0IHsKLSAgb3N0cmluZ3N0cmVhbSBkYXRhX3N0cmlu
Z3N0cmVhbTsKLQotICBpZiAobnVtX2VudHJpZXMoKSA+IDApIHsKLSAgICBpbzo6T3N0cmVhbU91
dHB1dFN0cmVhbSBkYXRhX291dHB1dHN0cmVhbSgmZGF0YV9zdHJpbmdzdHJlYW0pOwotICAgIGlv
OjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKCZkYXRhX291dHB1dHN0cmVhbSk7Ci0K
LSAgICBvdXRwdXRfc3RyZWFtLldyaXRlVmFyaW50MzIobnVtX2VudHJpZXMoKSk7Ci0gICAgZm9y
ICh2ZWN0b3I8RGF0YUVudHJ5Pjo6Y29uc3RfaXRlcmF0b3IgaSA9IGVudHJpZXNfLmJlZ2luKCk7
Ci0gICAgICAgICBpICE9IGVudHJpZXNfLmVuZCgpOyArK2kpIHsKLSAgICAgIG91dHB1dF9zdHJl
YW0uV3JpdGVWYXJpbnQzMihpLT5maXJzdCk7Ci0gICAgICBvdXRwdXRfc3RyZWFtLldyaXRlU3Ry
aW5nKGktPnNlY29uZCk7Ci0gICAgfQotICB9Ci0KLSAgZGF0YV9zdHJpbmdzdHJlYW0uZmx1c2go
KTsKLSAgcmV0dXJuIGRhdGFfc3RyaW5nc3RyZWFtLnN0cigpOwotfQotCi1uYW1lc3BhY2Ugewot
Ci0vLyBIZWxwZXIgdG8gYnVpbGQgdXAgdGhlIGRlY29kZSBkYXRhIGZvciBhIHN0cmluZy4KLWNs
YXNzIERlY29kZURhdGFCdWlsZGVyIHsKLSBwdWJsaWM6Ci0gIERlY29kZURhdGFCdWlsZGVyKCkg
eyBSZXNldCgpOyB9Ci0KLSAgYm9vbCBBZGRDaGFyYWN0ZXIoY29uc3QgY2hhciBkZXNpcmVkLCBj
b25zdCBjaGFyIGlucHV0KTsKLSAgdm9pZCBBZGRVbmRlcnNjb3JlKCkgewotICAgIFB1c2goKTsK
LSAgICBuZWVkX3VuZGVyc2NvcmVfID0gdHJ1ZTsKLSAgfQotICBzdHJpbmcgRmluaXNoKCkgewot
ICAgIFB1c2goKTsKLSAgICByZXR1cm4gZGVjb2RlX2RhdGFfOwotICB9Ci0KLSBwcml2YXRlOgot
ICBzdGF0aWMgY29uc3QgdWludDgga0FkZFVuZGVyc2NvcmUgPSAweDgwOwotCi0gIHN0YXRpYyBj
b25zdCB1aW50OCBrT3BBc0lzICAgICAgICA9IDB4MDA7Ci0gIHN0YXRpYyBjb25zdCB1aW50OCBr
T3BGaXJzdFVwcGVyICA9IDB4NDA7Ci0gIHN0YXRpYyBjb25zdCB1aW50OCBrT3BGaXJzdExvd2Vy
ICA9IDB4MjA7Ci0gIHN0YXRpYyBjb25zdCB1aW50OCBrT3BBbGxVcHBlciAgICA9IDB4NjA7Ci0K
LSAgc3RhdGljIGNvbnN0IGludCBrTWF4U2VnbWVudExlbiAgICAgPSAweDFmOwotCi0gIHZvaWQg
QWRkQ2hhcihjb25zdCBjaGFyIGRlc2lyZWQpIHsKLSAgICArK3NlZ21lbnRfbGVuXzsKLSAgICBp
c19hbGxfdXBwZXJfICY9IGFzY2lpX2lzdXBwZXIoZGVzaXJlZCk7Ci0gIH0KLQotICB2b2lkIFB1
c2goKSB7Ci0gICAgdWludDggb3AgPSAob3BfIHwgc2VnbWVudF9sZW5fKTsKLSAgICBpZiAobmVl
ZF91bmRlcnNjb3JlXykgb3AgfD0ga0FkZFVuZGVyc2NvcmU7Ci0gICAgaWYgKG9wICE9IDApIHsK
LSAgICAgIGRlY29kZV9kYXRhXyArPSAoY2hhcilvcDsKLSAgICB9Ci0gICAgUmVzZXQoKTsKLSAg
fQotCi0gIGJvb2wgQWRkRmlyc3QoY29uc3QgY2hhciBkZXNpcmVkLCBjb25zdCBjaGFyIGlucHV0
KSB7Ci0gICAgaWYgKGRlc2lyZWQgPT0gaW5wdXQpIHsKLSAgICAgIG9wXyA9IGtPcEFzSXM7Ci0g
ICAgfSBlbHNlIGlmIChkZXNpcmVkID09IGFzY2lpX3RvdXBwZXIoaW5wdXQpKSB7Ci0gICAgICBv
cF8gPSBrT3BGaXJzdFVwcGVyOwotICAgIH0gZWxzZSBpZiAoZGVzaXJlZCA9PSBhc2NpaV90b2xv
d2VyKGlucHV0KSkgewotICAgICAgb3BfID0ga09wRmlyc3RMb3dlcjsKLSAgICB9IGVsc2Ugewot
ICAgICAgLy8gQ2FuJ3QgYmUgdHJhbnNmb3JtZWQgdG8gbWF0Y2guCi0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIEFkZENoYXIoZGVzaXJlZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LQotICB2b2lkIFJlc2V0KCkgewotICAgIG5lZWRfdW5kZXJzY29yZV8gPSBmYWxzZTsKLSAgICBv
cF8gPSAwOwotICAgIHNlZ21lbnRfbGVuXyA9IDA7Ci0gICAgaXNfYWxsX3VwcGVyXyA9IHRydWU7
Ci0gIH0KLQotICBib29sIG5lZWRfdW5kZXJzY29yZV87Ci0gIGJvb2wgaXNfYWxsX3VwcGVyXzsK
LSAgdWludDggb3BfOwotICBpbnQgc2VnbWVudF9sZW5fOwotCi0gIHN0cmluZyBkZWNvZGVfZGF0
YV87Ci19OwotCi1ib29sIERlY29kZURhdGFCdWlsZGVyOjpBZGRDaGFyYWN0ZXIoY29uc3QgY2hh
ciBkZXNpcmVkLCBjb25zdCBjaGFyIGlucHV0KSB7Ci0gIC8vIElmIHdlJ3ZlIGhpdCB0aGUgbWF4
IHNpemUsIHB1c2ggdG8gc3RhcnQgYSBuZXcgc2VnbWVudC4KLSAgaWYgKHNlZ21lbnRfbGVuXyA9
PSBrTWF4U2VnbWVudExlbikgewotICAgIFB1c2goKTsKLSAgfQotICBpZiAoc2VnbWVudF9sZW5f
ID09IDApIHsKLSAgICByZXR1cm4gQWRkRmlyc3QoZGVzaXJlZCwgaW5wdXQpOwotICB9Ci0KLSAg
Ly8gRGVzaXJlZCBhbmQgaW5wdXQgbWF0Y2guLi4KLSAgaWYgKGRlc2lyZWQgPT0gaW5wdXQpIHsK
LSAgICAvLyBJZiB3ZSBhcmVuJ3QgdHJhbnNmb3JtaW5nIGl0LCBvciB3ZSdyZSB1cHBlciBjYXNp
bmcgaXQgYW5kIGl0IGlzCi0gICAgLy8gc3VwcG9zZWQgdG8gYmUgdXBwZXJjYXNlOyBqdXN0IGFk
ZCBpdCB0byB0aGUgc2VnbWVudC4KLSAgICBpZiAoKG9wXyAhPSBrT3BBbGxVcHBlcikgfHwgYXNj
aWlfaXN1cHBlcihkZXNpcmVkKSkgewotICAgICAgQWRkQ2hhcihkZXNpcmVkKTsKLSAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgY3VycmVudCBzZWdtZW50LCBhbmQg
c3RhcnQgdGhlIG5leHQgb25lLgotICAgIFB1c2goKTsKLSAgICByZXR1cm4gQWRkRmlyc3QoZGVz
aXJlZCwgaW5wdXQpOwotICB9Ci0KLSAgLy8gSWYgd2UgbmVlZCB0byB1cHBlcmNhc2UsIGFuZCBl
dmVyeXRoaW5nIHNvIGZhciBoYXMgYmVlbiB1cHBlcmNhc2UsCi0gIC8vIHByb21vdGUgb3AgdG8g
QWxsVXBwZXIuCi0gIGlmICgoZGVzaXJlZCA9PSBhc2NpaV90b3VwcGVyKGlucHV0KSkgJiYgaXNf
YWxsX3VwcGVyXykgewotICAgIG9wXyA9IGtPcEFsbFVwcGVyOwotICAgIEFkZENoYXIoZGVzaXJl
ZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBHaXZlIHVwLCBwdXNoIGFuZCBzdGFy
dCBhIG5ldyBzZWdtZW50LgotICBQdXNoKCk7Ci0gIHJldHVybiBBZGRGaXJzdChkZXNpcmVkLCBp
bnB1dCk7Ci19Ci0KLS8vIElmIGRlY29kZSBkYXRhIGNhbid0IGJlIGdlbmVyYXRlZCwgYSBkaXJl
Y3RpdmUgZm9yIHRoZSByYXcgc3RyaW5nCi0vLyBpcyB1c2VkIGluc3RlYWQuCi1zdHJpbmcgRGly
ZWN0RGVjb2RlU3RyaW5nKGNvbnN0IHN0cmluZyYgc3RyKSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0g
IHJlc3VsdCArPSAoY2hhciknXDAnOyAgLy8gTWFya2VyIGZvciBmdWxsIHN0cmluZy4KLSAgcmVz
dWx0ICs9IHN0cjsKLSAgcmVzdWx0ICs9IChjaGFyKSdcMCc7ICAvLyBFbmQgb2Ygc3RyaW5nLgot
ICByZXR1cm4gcmVzdWx0OwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotLy8gc3RhdGljCi1zdHJp
bmcgVGV4dEZvcm1hdERlY29kZURhdGE6OkRlY29kZURhdGFGb3JTdHJpbmcoY29uc3Qgc3RyaW5n
JiBpbnB1dF9mb3JfZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZGVzaXJlZF9vdXRwdXQpIHsKLSAgaWYgKChpbnB1
dF9mb3JfZGVjb2RlLnNpemUoKSA9PSAwKSB8fCAoZGVzaXJlZF9vdXRwdXQuc2l6ZSgpID09IDAp
KSB7Ci0gICAgY2VyciA8PCAiZXJyb3I6IGdvdCBlbXB0eSBzdHJpbmcgZm9yIG1ha2luZyBUZXh0
Rm9ybWF0IGRhdGEsIGlucHV0OiBcIiIKLSAgICAgICAgIDw8IGlucHV0X2Zvcl9kZWNvZGUgPDwg
IlwiLCBkZXNpcmVkOiBcIiIgPDwgZGVzaXJlZF9vdXRwdXQgPDwgIlwiLiIKLSAgICAgICAgIDw8
IGVuZGw7Ci0gICAgY2Vyci5mbHVzaCgpOwotICAgIGFib3J0KCk7Ci0gIH0KLSAgaWYgKChpbnB1
dF9mb3JfZGVjb2RlLmZpbmQoJ1wwJykgIT0gc3RyaW5nOjpucG9zKSB8fAotICAgICAgKGRlc2ly
ZWRfb3V0cHV0LmZpbmQoJ1wwJykgIT0gc3RyaW5nOjpucG9zKSkgewotICAgIGNlcnIgPDwgImVy
cm9yOiBnb3QgYSBudWxsIGNoYXIgaW4gYSBzdHJpbmcgZm9yIG1ha2luZyBUZXh0Rm9ybWF0IGRh
dGEsIgotICAgICAgICAgPDwgIiBpbnB1dDogXCIiIDw8IENFc2NhcGUoaW5wdXRfZm9yX2RlY29k
ZSkgPDwgIlwiLCBkZXNpcmVkOiBcIiIKLSAgICAgICAgIDw8IENFc2NhcGUoZGVzaXJlZF9vdXRw
dXQpIDw8ICJcIi4iIDw8IGVuZGw7Ci0gICAgY2Vyci5mbHVzaCgpOwotICAgIGFib3J0KCk7Ci0g
IH0KLQotICBEZWNvZGVEYXRhQnVpbGRlciBidWlsZGVyOwotCi0gIC8vIFdhbGsgdGhlIG91dHB1
dCBidWlsZGluZyBpdCBmcm9tIHRoZSBpbnB1dC4KLSAgaW50IHggPSAwOwotICBmb3IgKGludCB5
ID0gMDsgeSA8IGRlc2lyZWRfb3V0cHV0LnNpemUoKTsgeSsrKSB7Ci0gICAgY29uc3QgY2hhciBk
ID0gZGVzaXJlZF9vdXRwdXRbeV07Ci0gICAgaWYgKGQgPT0gJ18nKSB7Ci0gICAgICBidWlsZGVy
LkFkZFVuZGVyc2NvcmUoKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmICh4ID49
IGlucHV0X2Zvcl9kZWNvZGUuc2l6ZSgpKSB7Ci0gICAgICAvLyBPdXQgb2YgaW5wdXQsIG5vIHdh
eSB0byBlbmNvZGUgaXQsIGp1c3QgcmV0dXJuIGEgZnVsbCBkZWNvZGUuCi0gICAgICByZXR1cm4g
RGlyZWN0RGVjb2RlU3RyaW5nKGRlc2lyZWRfb3V0cHV0KTsKLSAgICB9Ci0gICAgaWYgKGJ1aWxk
ZXIuQWRkQ2hhcmFjdGVyKGQsIGlucHV0X2Zvcl9kZWNvZGVbeF0pKSB7Ci0gICAgICArK3g7ICAv
LyBDb25zdW1lZCBvbmUgaW5wdXQKLSAgICB9IGVsc2UgewotICAgICAgLy8gQ291bGRuJ3QgdHJh
bnNmb3JtIGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIsIGp1c3QgcmV0dXJuIGEgZnVsbCBkZWNvZGUu
Ci0gICAgICByZXR1cm4gRGlyZWN0RGVjb2RlU3RyaW5nKGRlc2lyZWRfb3V0cHV0KTsKLSAgICB9
Ci0gIH0KLQotICBpZiAoeCAhPSBpbnB1dF9mb3JfZGVjb2RlLnNpemUoKSkgewotICAgIC8vIEV4
dHJhIGlucHV0IChzdWZmaXggZnJvbSBuYW1lIHNhbml0aXppbmc/KSwganVzdCByZXR1cm4gYSBm
dWxsIGRlY29kZS4KLSAgICByZXR1cm4gRGlyZWN0RGVjb2RlU3RyaW5nKGRlc2lyZWRfb3V0cHV0
KTsKLSAgfQotCi0gIC8vIEFkZCB0aGUgZW5kIG1hcmtlci4KLSAgcmV0dXJuIGJ1aWxkZXIuRmlu
aXNoKCkgKyAoY2hhciknXDAnOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugb2JqZWN0aXZlYwotfSAg
Ly8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9v
YmplY3RpdmVjL29iamVjdGl2ZWNfaGVscGVycy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDNmNTZkOTRiMzE3MTdhZGZjZTE1Nzk0MmI3YTYyNzg1M2U2OTRjZTcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfSEVMUEVSU19IX18K
LSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfSEVMUEVSU19IX18K
LQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNj
cmlwdG9yLnBiLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ugb2JqZWN0aXZlYyB7Ci0KLS8vIEdlbmVy
YXRvciBvcHRpb25zIChzZWUgb2JqZWN0aXZlY19nZW5lcmF0b3IuY2MgZm9yIGEgZGVzY3JpcHRp
b24gb2YgZWFjaCk6Ci1zdHJ1Y3QgT3B0aW9ucyB7Ci0gIE9wdGlvbnMoKTsKLSAgc3RyaW5nIGV4
cGVjdGVkX3ByZWZpeGVzX3BhdGg7Ci19OwotCi0vLyBFc2NhcGUgQysrIHRyaWdyYXBocyBieSBl
c2NhcGluZyBxdWVzdGlvbiBtYXJrcyB0byAiXD8iLgotc3RyaW5nIEVzY2FwZVRyaWdyYXBocyhj
b25zdCBzdHJpbmcmIHRvX2VzY2FwZSk7Ci0KLS8vIFN0cmlwcyAiLnByb3RvIiBvciAiLnByb3Rv
ZGV2ZWwiIGZyb20gdGhlIGVuZCBvZiBhIGZpbGVuYW1lLgotc3RyaW5nIFN0cmlwUHJvdG8oY29u
c3Qgc3RyaW5nJiBmaWxlbmFtZSk7Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmFtZSByZXF1
aXJlcyBhIG5zX3JldHVybnNfbm90X3JldGFpbmVkIGF0dHJpYnV0ZSBhcHBsaWVkCi0vLyB0byBp
dC4KLWJvb2wgSXNSZXRhaW5lZE5hbWUoY29uc3Qgc3RyaW5nJiBuYW1lKTsKLQotLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBuYW1lIHN0YXJ0cyB3aXRoICJpbml0IiBhbmQgd2lsbCBuZWVkIHRvIGhh
dmUgc3BlY2lhbAotLy8gaGFuZGxpbmcgdW5kZXIgQVJDLgotYm9vbCBJc0luaXROYW1lKGNvbnN0
IHN0cmluZyYgbmFtZSk7Ci0KLS8vIEdldHMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2UncmUgZ29p
bmcgdG8gZ2VuZXJhdGUgKHNhbnMgdGhlIC5wYi5oCi0vLyBleHRlbnNpb24pLiAgVGhpcyBkb2Vz
IG5vdCBpbmNsdWRlIHRoZSBwYXRoIHRvIHRoYXQgZmlsZS4KLXN0cmluZyBGaWxlTmFtZShjb25z
dCBGaWxlRGVzY3JpcHRvciogZmlsZSk7Ci0KLS8vIEdldHMgdGhlIHBhdGggb2YgdGhlIGZpbGUg
d2UncmUgZ29pbmcgdG8gZ2VuZXJhdGUgKHNhbnMgdGhlIC5wYi5oCi0vLyBleHRlbnNpb24pLiAg
VGhlIHBhdGggd2lsbCBiZSBkZXBlbmRlbnQgb24gdGhlIG9iamVjdGl2ZWMgcGFja2FnZQotLy8g
ZGVjbGFyZWQgaW4gdGhlIHByb3RvIHBhY2thZ2UuCi1zdHJpbmcgRmlsZVBhdGgoY29uc3QgRmls
ZURlc2NyaXB0b3IqIGZpbGUpOwotCi0vLyBHZXRzIHRoZSBuYW1lIG9mIHRoZSByb290IGNsYXNz
IHdlJ2xsIGdlbmVyYXRlIGluIHRoZSBmaWxlLiAgVGhpcyBjbGFzcwotLy8gaXMgbm90IG1lYW50
IGZvciBleHRlcm5hbCBjb25zdW1wdGlvbiwgYnV0IGluc3RlYWQgY29udGFpbnMgaGVscGVycyB0
aGF0Ci0vLyB0aGUgcmVzdCBvZiB0aGUgY2xhc3NlcyBuZWVkCi1zdHJpbmcgRmlsZUNsYXNzTmFt
ZShjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSk7Ci0KLS8vIFRoZXNlIHJldHVybiB0aGUgZnVs
bHktcXVhbGlmaWVkIGNsYXNzIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4KLS8vIGRl
c2NyaXB0b3IuCi1zdHJpbmcgQ2xhc3NOYW1lKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3Ip
Owotc3RyaW5nIEVudW1OYW1lKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLQot
Ly8gUmV0dXJucyB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGVudW0gdmFsdWUgY29y
cmVzcG9uZGluZyB0byB0aGUKLS8vIHRoZSBkZXNjcmlwdG9yLgotc3RyaW5nIEVudW1WYWx1ZU5h
bWUoY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0KLS8vIFJldHVybnMg
dGhlIG5hbWUgb2YgdGhlIGVudW0gdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZGVzY3JpcHRv
ci4KLXN0cmluZyBFbnVtVmFsdWVTaG9ydE5hbWUoY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciog
ZGVzY3JpcHRvcik7Ci0KLS8vIFJldmVyc2Ugd2hhdCBhbiBlbnVtIGRvZXMuCi1zdHJpbmcgVW5D
YW1lbENhc2VFbnVtU2hvcnROYW1lKGNvbnN0IHN0cmluZyYgbmFtZSk7Ci0KLS8vIFJldHVybnMg
dGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgZXh0ZW5zaW9uICh1c2VkIGFzIHRoZSBtZXRob2Qgb2Zm
IHRoZSBmaWxlJ3MKLS8vIFJvb3QgY2xhc3MpLgotc3RyaW5nIEV4dGVuc2lvbk1ldGhvZE5hbWUo
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yKTsKLQotLy8gUmV0dXJucyB0aGUgdHJh
bnNmb3JtZWQgZmllbGQgbmFtZS4KLXN0cmluZyBGaWVsZE5hbWUoY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCk7Ci1zdHJpbmcgRmllbGROYW1lQ2FwaXRhbGl6ZWQoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCk7Ci0KLS8vIFJldHVybnMgdGhlIHRyYW5zZm9ybWVkIG9uZW9mIG5hbWUu
Ci1zdHJpbmcgT25lb2ZFbnVtTmFtZShjb25zdCBPbmVvZkRlc2NyaXB0b3IqIGRlc2NyaXB0b3Ip
Owotc3RyaW5nIE9uZW9mTmFtZShjb25zdCBPbmVvZkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwot
c3RyaW5nIE9uZW9mTmFtZUNhcGl0YWxpemVkKGNvbnN0IE9uZW9mRGVzY3JpcHRvciogZGVzY3Jp
cHRvcik7Ci0KLWlubGluZSBib29sIEhhc0ZpZWxkUHJlc2VuY2UoY29uc3QgRmlsZURlc2NyaXB0
b3IqIGZpbGUpIHsKLSAgcmV0dXJuIGZpbGUtPnN5bnRheCgpICE9IEZpbGVEZXNjcmlwdG9yOjpT
WU5UQVhfUFJPVE8zOwotfQotCi1pbmxpbmUgYm9vbCBIYXNQcmVzZXJ2aW5nVW5rbm93bkVudW1T
ZW1hbnRpY3MoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUpIHsKLSAgcmV0dXJuIGZpbGUtPnN5
bnRheCgpID09IEZpbGVEZXNjcmlwdG9yOjpTWU5UQVhfUFJPVE8zOwotfQotCi1pbmxpbmUgYm9v
bCBJc01hcEVudHJ5TWVzc2FnZShjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJl
dHVybiBkZXNjcmlwdG9yLT5vcHRpb25zKCkubWFwX2VudHJ5KCk7Ci19Ci0KLS8vIFJldmVyc2Ug
b2YgdGhlIGFib3ZlLgotc3RyaW5nIFVuQ2FtZWxDYXNlRmllbGROYW1lKGNvbnN0IHN0cmluZyYg
bmFtZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLWVudW0gT2JqZWN0aXZlQ1R5
cGUgewotICBPQkpFQ1RJVkVDVFlQRV9JTlQzMiwKLSAgT0JKRUNUSVZFQ1RZUEVfVUlOVDMyLAot
ICBPQkpFQ1RJVkVDVFlQRV9JTlQ2NCwKLSAgT0JKRUNUSVZFQ1RZUEVfVUlOVDY0LAotICBPQkpF
Q1RJVkVDVFlQRV9GTE9BVCwKLSAgT0JKRUNUSVZFQ1RZUEVfRE9VQkxFLAotICBPQkpFQ1RJVkVD
VFlQRV9CT09MRUFOLAotICBPQkpFQ1RJVkVDVFlQRV9TVFJJTkcsCi0gIE9CSkVDVElWRUNUWVBF
X0RBVEEsCi0gIE9CSkVDVElWRUNUWVBFX0VOVU0sCi0gIE9CSkVDVElWRUNUWVBFX01FU1NBR0UK
LX07Ci0KLXRlbXBsYXRlPGNsYXNzIFREZXNjcmlwdG9yPgotc3RyaW5nIEdldE9wdGlvbmFsRGVw
cmVjYXRlZEF0dHJpYnV0ZShjb25zdCBURGVzY3JpcHRvciogZGVzY3JpcHRvciwgYm9vbCBwcmVT
cGFjZSA9IHRydWUsIGJvb2wgcG9zdE5ld2xpbmUgPSBmYWxzZSkgewotICBpZiAoZGVzY3JpcHRv
ci0+b3B0aW9ucygpLmRlcHJlY2F0ZWQoKSkgewotICAgIHN0cmluZyByZXN1bHQgPSAiREVQUkVD
QVRFRF9BVFRSSUJVVEUiOwotICAgIGlmIChwcmVTcGFjZSkgewotICAgICAgcmVzdWx0Lmluc2Vy
dCgwLCAiICIpOwotICAgIH0KLSAgICBpZiAocG9zdE5ld2xpbmUpIHsKLSAgICAgIHJlc3VsdC5h
cHBlbmQoIlxuIik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gZWxzZSB7Ci0gICAg
cmV0dXJuICIiOwotICB9Ci19Ci0KLXN0cmluZyBHZXRDYXBpdGFsaXplZFR5cGUoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLU9iamVjdGl2ZUNUeXBlIEdldE9iamVjdGl2ZUNUeXBl
KEZpZWxkRGVzY3JpcHRvcjo6VHlwZSBmaWVsZF90eXBlKTsKLQotaW5saW5lIE9iamVjdGl2ZUNU
eXBlIEdldE9iamVjdGl2ZUNUeXBlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAg
cmV0dXJuIEdldE9iamVjdGl2ZUNUeXBlKGZpZWxkLT50eXBlKCkpOwotfQotCi1ib29sIElzUHJp
bWl0aXZlVHlwZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKTsKLWJvb2wgSXNSZWZlcmVu
Y2VUeXBlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpOwotCi1zdHJpbmcgR1BCR2VuZXJp
Y1ZhbHVlRmllbGROYW1lKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpOwotc3RyaW5nIERl
ZmF1bHRWYWx1ZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKTsKLWJvb2wgSGFzTm9uWmVy
b0RlZmF1bHRWYWx1ZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKTsKLQotc3RyaW5nIEJ1
aWxkRmxhZ3NTdHJpbmcoY29uc3QgdmVjdG9yPHN0cmluZz4mIHN0cmluZ3MpOwotCi0vLyBCdWls
ZHMgYSBIZWFkZXJEb2Mgc3R5bGUgY29tbWVudCBvdXQgb2YgdGhlIGNvbW1lbnRzIGluIHRoZSAu
cHJvdG8gZmlsZS4KLXN0cmluZyBCdWlsZENvbW1lbnRzU3RyaW5nKGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsb2NhdGlvbik7Ci0KLS8vIENoZWNrcyB0aGUgcHJlZml4IGZvciBhIGdpdmVuIGZpbGUg
YW5kIG91dHB1dHMgYW55IHdhcm5pbmdzIG5lZWRlZCwgaWYKLS8vIHRoZXJlIGFyZSBmbGF0IG91
dCBlcnJvcnMsIHRoZW4gb3V0X2Vycm9yIGlzIGZpbGxlZCBpbiBhbmQgdGhlIHJlc3VsdCBpcwot
Ly8gZmFsc2UuCi1ib29sIFZhbGlkYXRlT2JqQ0NsYXNzUHJlZml4KGNvbnN0IEZpbGVEZXNjcmlw
dG9yKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBn
ZW5lcmF0aW9uX29wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyog
b3V0X2Vycm9yKTsKLQotLy8gR2VuZXJhdGUgZGVjb2RlIGRhdGEgbmVlZGVkIGZvciBPYmpDJ3Mg
R1BCRGVjb2RlVGV4dEZvcm1hdE5hbWUoKSB0byB0cmFuc2Zvcm0KLS8vIHRoZSBpbnB1dCBpbnRv
IHRoZSBleHBlY3RlZCBvdXRwdXQuCi1jbGFzcyBMSUJQUk9UT0NfRVhQT1JUIFRleHRGb3JtYXRE
ZWNvZGVEYXRhIHsKLSBwdWJsaWM6Ci0gIFRleHRGb3JtYXREZWNvZGVEYXRhKCkge30KLQotICB2
b2lkIEFkZFN0cmluZyhpbnQzMiBrZXksIGNvbnN0IHN0cmluZyYgaW5wdXRfZm9yX2RlY29kZSwK
LSAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBkZXNpcmVkX291dHB1dCk7Ci0gIHNpemVf
dCBudW1fZW50cmllcygpIGNvbnN0IHsgcmV0dXJuIGVudHJpZXNfLnNpemUoKTsgfQotICBzdHJp
bmcgRGF0YSgpIGNvbnN0OwotCi0gIHN0YXRpYyBzdHJpbmcgRGVjb2RlRGF0YUZvclN0cmluZyhj
b25zdCBzdHJpbmcmIGlucHV0X2Zvcl9kZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdHJpbmcmIGRlc2lyZWRfb3V0cHV0KTsKLQotIHByaXZhdGU6Ci0g
IEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhUZXh0Rm9ybWF0RGVjb2RlRGF0YSk7
Ci0KLSAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50MzIsIHN0cmluZz4gRGF0YUVudHJ5OwotICB2ZWN0
b3I8RGF0YUVudHJ5PiBlbnRyaWVzXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBvYmplY3RpdmVj
Ci19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAg
Ly8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJf
T0JKRUNUSVZFQ19IRUxQRVJTX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzX3VuaXR0ZXN0LmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzX3VuaXR0
ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzFjZWY1NTZmMzViYTc1OWI3
NzMyYWQxYWE5MGJlNDc0MmQ2MjU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVj
dGl2ZWNfaGVscGVyc191bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfaGVscGVycy5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIG9iamVjdGl2ZWMgewotbmFtZXNwYWNlIHsK
LQotVEVTVChPYmpDSGVscGVyLCBUZXh0Rm9ybWF0RGVjb2RlRGF0YV9EZWNvZGVEYXRhRm9yU3Ry
aW5nX1Jhd1N0cmluZ3MpIHsKLSAgc3RyaW5nIGlucHV0X2Zvcl9kZWNvZGUoImFiY2RlZmdoSUoi
KTsKLSAgc3RyaW5nIGRlc2lyZWRfb3V0cHV0X2Zvcl9kZWNvZGU7Ci0gIHN0cmluZyBleHBlY3Rl
ZDsKLSAgc3RyaW5nIHJlc3VsdDsKLQotICAvLyBEaWZmZXJlbnQgZGF0YSwgY2FuJ3QgdHJhbnNm
b3JtLgotCi0gIGRlc2lyZWRfb3V0cHV0X2Zvcl9kZWNvZGUgPSAiemJjZGVmZ2hJSiI7Ci0gIGV4
cGVjdGVkID0gc3RyaW5nKCJcMHpiY2RlZmdoSUpcMCIsIDEyKTsKLSAgcmVzdWx0ID0gVGV4dEZv
cm1hdERlY29kZURhdGE6OkRlY29kZURhdGFGb3JTdHJpbmcoaW5wdXRfZm9yX2RlY29kZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJl
ZF9vdXRwdXRfZm9yX2RlY29kZSk7Ci0gIEVYUEVDVF9FUShleHBlY3RlZCwgcmVzdWx0KTsKLQot
ICBkZXNpcmVkX291dHB1dF9mb3JfZGVjb2RlID0gImFiY2RlemdoSUoiOwotICBleHBlY3RlZCA9
IHN0cmluZygiXDBhYmNkZXpnaElKXDAiLCAxMik7Ci0gIHJlc3VsdCA9IFRleHRGb3JtYXREZWNv
ZGVEYXRhOjpEZWNvZGVEYXRhRm9yU3RyaW5nKGlucHV0X2Zvcl9kZWNvZGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRfb3V0cHV0
X2Zvcl9kZWNvZGUpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIHJlc3VsdCk7Ci0KLSAgLy8gU2hv
cnRlbmVkIGRhdGEsIGNhbid0IHRyYW5zZm9ybS4KLQotICBkZXNpcmVkX291dHB1dF9mb3JfZGVj
b2RlID0gImFiY2RlZmdoSSI7Ci0gIGV4cGVjdGVkID0gc3RyaW5nKCJcMGFiY2RlZmdoSVwwIiwg
MTEpOwotICByZXN1bHQgPSBUZXh0Rm9ybWF0RGVjb2RlRGF0YTo6RGVjb2RlRGF0YUZvclN0cmlu
ZyhpbnB1dF9mb3JfZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXNpcmVkX291dHB1dF9mb3JfZGVjb2RlKTsKLSAgRVhQRUNUX0VR
KGV4cGVjdGVkLCByZXN1bHQpOwotCi0gIC8vIEV4dHJhIGRhdGEsIGNhbid0IHRyYW5zZm9ybS4K
LQotICBkZXNpcmVkX291dHB1dF9mb3JfZGVjb2RlID0gImFiY2RlZmdoSUp6IjsKLSAgZXhwZWN0
ZWQgPSBzdHJpbmcoIlwwYWJjZGVmZ2hJSnpcMCIsIDEzKTsKLSAgcmVzdWx0ID0gVGV4dEZvcm1h
dERlY29kZURhdGE6OkRlY29kZURhdGFGb3JTdHJpbmcoaW5wdXRfZm9yX2RlY29kZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZF9v
dXRwdXRfZm9yX2RlY29kZSk7Ci0gIEVYUEVDVF9FUShleHBlY3RlZCwgcmVzdWx0KTsKLX0KLQot
VEVTVChPYmpDSGVscGVyLCBUZXh0Rm9ybWF0RGVjb2RlRGF0YV9EZWNvZGVEYXRhRm9yU3RyaW5n
X0J5dGVDb2RlcykgewotICBzdHJpbmcgaW5wdXRfZm9yX2RlY29kZSgiYWJjZGVmZ2hJSiIpOwot
ICBzdHJpbmcgZGVzaXJlZF9vdXRwdXRfZm9yX2RlY29kZTsKLSAgc3RyaW5nIGV4cGVjdGVkOwot
ICBzdHJpbmcgcmVzdWx0OwotCi0gIGRlc2lyZWRfb3V0cHV0X2Zvcl9kZWNvZGUgPSAiYWJjZGVm
Z2hJSiI7Ci0gIGV4cGVjdGVkID0gc3RyaW5nKCJceDBBXHgwIiwgMik7Ci0gIHJlc3VsdCA9IFRl
eHRGb3JtYXREZWNvZGVEYXRhOjpEZWNvZGVEYXRhRm9yU3RyaW5nKGlucHV0X2Zvcl9kZWNvZGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c2lyZWRfb3V0cHV0X2Zvcl9kZWNvZGUpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIHJlc3VsdCk7
Ci0KLSAgZGVzaXJlZF9vdXRwdXRfZm9yX2RlY29kZSA9ICJfQWJjZGVmZ2hJSiI7Ci0gIGV4cGVj
dGVkID0gc3RyaW5nKCJceENBXHgwIiwgMik7Ci0gIHJlc3VsdCA9IFRleHRGb3JtYXREZWNvZGVE
YXRhOjpEZWNvZGVEYXRhRm9yU3RyaW5nKGlucHV0X2Zvcl9kZWNvZGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRfb3V0cHV0X2Zv
cl9kZWNvZGUpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIHJlc3VsdCk7Ci0KLSAgZGVzaXJlZF9v
dXRwdXRfZm9yX2RlY29kZSA9ICJBQkNEX19FZmdoSV9qIjsKLSAgZXhwZWN0ZWQgPSBzdHJpbmco
Ilx4NjRceDgwXHhDNVx4QTFceDAiLCA1KTsKLSAgcmVzdWx0ID0gVGV4dEZvcm1hdERlY29kZURh
dGE6OkRlY29kZURhdGFGb3JTdHJpbmcoaW5wdXRfZm9yX2RlY29kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZF9vdXRwdXRfZm9y
X2RlY29kZSk7Ci0gIEVYUEVDVF9FUShleHBlY3RlZCwgcmVzdWx0KTsKLQotICAvLyBMb25nIG5h
bWUgc28gbXVsdGlwbGUgZGVjb2RlIG9wcyBhcmUgbmVlZGVkLgotCi0gIGlucHV0X2Zvcl9kZWNv
ZGUgPQotICAgICAgImxvbmdGaWVsZE5hbWVJc0xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmcxMDAwIjsKLSAg
ZGVzaXJlZF9vdXRwdXRfZm9yX2RlY29kZSA9Ci0gICAgICAibG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfMTAwMCI7Ci0gIGV4cGVjdGVkID0gc3RyaW5nKCJceDA0XHhBNVx4
QTRceEEyXHhCRlx4MUZceDBFXHg4NFx4MCIsIDkpOwotICByZXN1bHQgPSBUZXh0Rm9ybWF0RGVj
b2RlRGF0YTo6RGVjb2RlRGF0YUZvclN0cmluZyhpbnB1dF9mb3JfZGVjb2RlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkX291dHB1
dF9mb3JfZGVjb2RlKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkLCByZXN1bHQpOwotfQotCi0vLyBE
ZWF0aCB0ZXN0cyBkbyBub3Qgd29yayBvbiBXaW5kb3dzIGFzIG9mIHlldC4KLSNpZmRlZiBQUk9U
T0JVRl9IQVNfREVBVEhfVEVTVAotVEVTVChPYmpDSGVscGVyRGVhdGhUZXN0LCBUZXh0Rm9ybWF0
RGVjb2RlRGF0YV9EZWNvZGVEYXRhRm9yU3RyaW5nX0ZhaWx1cmVzKSB7Ci0gIC8vIEVtcHR5IGlu
cHV0cy4KLQotICBFWFBFQ1RfRVhJVChUZXh0Rm9ybWF0RGVjb2RlRGF0YTo6RGVjb2RlRGF0YUZv
clN0cmluZygiIiwgIiIpLAotICAgICAgICAgICAgICA6OnRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFs
KFNJR0FCUlQpLAotICAgICAgICAgICAgICAiZXJyb3I6IGdvdCBlbXB0eSBzdHJpbmcgZm9yIG1h
a2luZyBUZXh0Rm9ybWF0IGRhdGEsIGlucHV0OiIpOwotICBFWFBFQ1RfRVhJVChUZXh0Rm9ybWF0
RGVjb2RlRGF0YTo6RGVjb2RlRGF0YUZvclN0cmluZygiYSIsICIiKSwKLSAgICAgICAgICAgICAg
Ojp0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwKLSAgICAgICAgICAgICAgImVycm9y
OiBnb3QgZW1wdHkgc3RyaW5nIGZvciBtYWtpbmcgVGV4dEZvcm1hdCBkYXRhLCBpbnB1dDoiKTsK
LSAgRVhQRUNUX0VYSVQoVGV4dEZvcm1hdERlY29kZURhdGE6OkRlY29kZURhdGFGb3JTdHJpbmco
IiIsICJhIiksCi0gICAgICAgICAgICAgIDo6dGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJS
VCksCi0gICAgICAgICAgICAgICJlcnJvcjogZ290IGVtcHR5IHN0cmluZyBmb3IgbWFraW5nIFRl
eHRGb3JtYXQgZGF0YSwgaW5wdXQ6Iik7Ci0KLSAgLy8gTnVsbCBjaGFyIGluIHRoZSBzdHJpbmcu
Ci0KLSAgc3RyaW5nIHN0cl93aXRoX251bGxfY2hhcigiYWJcMGMiLCA0KTsKLSAgRVhQRUNUX0VY
SVQoCi0gICAgICBUZXh0Rm9ybWF0RGVjb2RlRGF0YTo6RGVjb2RlRGF0YUZvclN0cmluZyhzdHJf
d2l0aF9udWxsX2NoYXIsICJkZWYiKSwKLSAgICAgIDo6dGVzdGluZzo6S2lsbGVkQnlTaWduYWwo
U0lHQUJSVCksCi0gICAgICAiZXJyb3I6IGdvdCBhIG51bGwgY2hhciBpbiBhIHN0cmluZyBmb3Ig
bWFraW5nIFRleHRGb3JtYXQgZGF0YSwgaW5wdXQ6Iik7Ci0gIEVYUEVDVF9FWElUKAotICAgICAg
VGV4dEZvcm1hdERlY29kZURhdGE6OkRlY29kZURhdGFGb3JTdHJpbmcoImRlZiIsIHN0cl93aXRo
X251bGxfY2hhciksCi0gICAgICA6OnRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLAot
ICAgICAgImVycm9yOiBnb3QgYSBudWxsIGNoYXIgaW4gYSBzdHJpbmcgZm9yIG1ha2luZyBUZXh0
Rm9ybWF0IGRhdGEsIGlucHV0OiIpOwotfQotI2VuZGlmICAvLyBQUk9UT0JVRl9IQVNfREVBVEhf
VEVTVAotCi1URVNUKE9iakNIZWxwZXIsIFRleHRGb3JtYXREZWNvZGVEYXRhX1Jhd1N0cmluZ3Mp
IHsKLSAgVGV4dEZvcm1hdERlY29kZURhdGEgZGVjb2RlX2RhdGE7Ci0KLSAgLy8gRGlmZmVyZW50
IGRhdGEsIGNhbid0IHRyYW5zZm9ybS4KLSAgZGVjb2RlX2RhdGEuQWRkU3RyaW5nKDEsICJhYmNk
ZWZnaElKIiwgInpiY2RlZmdoSUoiKTsKLSAgZGVjb2RlX2RhdGEuQWRkU3RyaW5nKDMsICJhYmNk
ZWZnaElKIiwgImFiY2RlemdoSUoiKTsKLSAgLy8gU2hvcnRlbmVkIGRhdGEsIGNhbid0IHRyYW5z
Zm9ybS4KLSAgZGVjb2RlX2RhdGEuQWRkU3RyaW5nKDIsICJhYmNkZWZnaElKIiwgImFiY2RlZmdo
SSIpOwotICAvLyBFeHRyYSBkYXRhLCBjYW4ndCB0cmFuc2Zvcm0uCi0gIGRlY29kZV9kYXRhLkFk
ZFN0cmluZyg0LCAiYWJjZGVmZ2hJSiIsICJhYmNkZWZnaElKeiIpOwotCi0gIEVYUEVDVF9FUSg0
LCBkZWNvZGVfZGF0YS5udW1fZW50cmllcygpKTsKLQotICB1aW50OCBleHBlY3RlZF9kYXRhW10g
PSB7Ci0gICAgICAweDQsCi0gICAgICAweDEsIDB4MCwgJ3onLCAnYicsICdjJywgJ2QnLCAnZScs
ICdmJywgJ2cnLCAnaCcsICdJJywgJ0onLCAweDAsCi0gICAgICAweDMsIDB4MCwgJ2EnLCAnYics
ICdjJywgJ2QnLCAnZScsICd6JywgJ2cnLCAnaCcsICdJJywgJ0onLCAweDAsCi0gICAgICAweDIs
IDB4MCwgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdJJywgMHgwLAot
ICAgICAgMHg0LCAweDAsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAn
SScsICdKJywgJ3onLCAweDAsCi0gIH07Ci0gIHN0cmluZyBleHBlY3RlZCgoY29uc3QgY2hhciop
ZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTsKLQotICBFWFBFQ1RfRVEoZXhw
ZWN0ZWQsIGRlY29kZV9kYXRhLkRhdGEoKSk7Ci19Ci0KLVRFU1QoT2JqQ0hlbHBlciwgVGV4dEZv
cm1hdERlY29kZURhdGFfQnl0ZUNvZGVzKSB7Ci0gIFRleHRGb3JtYXREZWNvZGVEYXRhIGRlY29k
ZV9kYXRhOwotCi0gIGRlY29kZV9kYXRhLkFkZFN0cmluZygxLCAiYWJjZGVmZ2hJSiIsICJhYmNk
ZWZnaElKIik7Ci0gIGRlY29kZV9kYXRhLkFkZFN0cmluZygzLCAiYWJjZGVmZ2hJSiIsICJfQWJj
ZGVmZ2hJSiIpOwotICBkZWNvZGVfZGF0YS5BZGRTdHJpbmcoMiwgImFiY2RlZmdoSUoiLCAiQWJj
ZF9FZmdoSUoiKTsKLSAgZGVjb2RlX2RhdGEuQWRkU3RyaW5nKDQsICJhYmNkZWZnaElKIiwgIkFC
Q0RfX0VmZ2hJX2oiKTsKLSAgZGVjb2RlX2RhdGEuQWRkU3RyaW5nKDEwMDAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAibG9uZ0ZpZWxkTmFtZUlzTG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZzEwMDAiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgImxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzEwMDAiKTsKLQotICBFWFBFQ1RfRVEoNSwgZGVjb2RlX2RhdGEubnVtX2VudHJpZXMo
KSk7Ci0KLSAgdWludDggZXhwZWN0ZWRfZGF0YVtdID0gewotICAgICAgMHg1LAotICAgICAgLy8g
QWxsIGFzIGlzICgwMCBvcCkKLSAgICAgIDB4MSwgIDB4MEEsIDB4MCwKLSAgICAgIC8vIFVuZGVy
c2NvcmUsIHVwcGVyICsgOSAoMTAgb3ApCi0gICAgICAweDMsICAweENBLCAweDAsCi0gICAgICAv
LyAgVXBwZXIgKyAzICgxMCBvcCksIHVuZGVyc2NvcmUsIHVwcGVyICsgNSAoMTAgb3ApCi0gICAg
ICAweDIsICAweDQ0LCAweEM2LCAweDAsCi0gICAgICAvLyBBbGwgVXBwZXIgZm9yIDQgKDExIG9w
KSwgdW5kZXJzY29yZSwgdW5kZXJzY29yZSwgdXBwZXIgKyA1ICgxMCBvcCksCi0gICAgICAvLyB1
bmRlcnNjb3JlLCBsb3dlciArIDAgKDAxIG9wKQotICAgICAgMHg0LCAgMHg2NCwgMHg4MCwgMHhD
NSwgMHhBMSwgMHgwLAotICAgICAgLy8gMiBieXRlIGtleTogYXMgaXMgKyAzICgwMCBvcCksIHVu
ZGVyc2NvcmUsIGxvd2VyICsgNCAoMDEgb3ApLAotICAgICAgLy8gICB1bmRlcnNjb3JlLCBsb3dl
ciArIDMgKDAxIG9wKSwgdW5kZXJzY29yZSwgbG93ZXIgKyAxICgwMSBvcCksCi0gICAgICAvLyAg
IHVuZGVyc2NvcmUsIGxvd2VyICsgMzAgKDAxIG9wKSwgYXMgaXMgKyAzMCAoMDAgb3ApLCBhcyBp
cyArIDEzICgwMAotICAgICAgLy8gICBvcCksCi0gICAgICAvLyAgIHVuZGVyc2NvcmUsIGFzIGlz
ICsgMyAoMDAgb3ApCi0gICAgICAweEU4LCAweDA3LCAweDA0LCAweEE1LCAweEE0LCAweEEyLCAw
eEJGLCAweDFGLCAweDBFLCAweDg0LCAweDAsCi0gIH07Ci0gIHN0cmluZyBleHBlY3RlZCgoY29u
c3QgY2hhciopZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTsKLQotICBFWFBF
Q1RfRVEoZXhwZWN0ZWQsIGRlY29kZV9kYXRhLkRhdGEoKSk7Ci19Ci0KLQotLy8gRGVhdGggdGVz
dHMgZG8gbm90IHdvcmsgb24gV2luZG93cyBhcyBvZiB5ZXQuCi0jaWZkZWYgUFJPVE9CVUZfSEFT
X0RFQVRIX1RFU1QKLVRFU1QoT2JqQ0hlbHBlckRlYXRoVGVzdCwgVGV4dEZvcm1hdERlY29kZURh
dGFfRmFpbHVyZXMpIHsKLSAgVGV4dEZvcm1hdERlY29kZURhdGEgZGVjb2RlX2RhdGE7Ci0KLSAg
Ly8gRW1wdHkgaW5wdXRzLgotCi0gIEVYUEVDVF9FWElUKGRlY29kZV9kYXRhLkFkZFN0cmluZygx
LCAiIiwgIiIpLAotICAgICAgICAgICAgICA6OnRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FC
UlQpLAotICAgICAgICAgICAgICAiZXJyb3I6IGdvdCBlbXB0eSBzdHJpbmcgZm9yIG1ha2luZyBU
ZXh0Rm9ybWF0IGRhdGEsIGlucHV0OiIpOwotICBFWFBFQ1RfRVhJVChkZWNvZGVfZGF0YS5BZGRT
dHJpbmcoMSwgImEiLCAiIiksCi0gICAgICAgICAgICAgIDo6dGVzdGluZzo6S2lsbGVkQnlTaWdu
YWwoU0lHQUJSVCksCi0gICAgICAgICAgICAgICJlcnJvcjogZ290IGVtcHR5IHN0cmluZyBmb3Ig
bWFraW5nIFRleHRGb3JtYXQgZGF0YSwgaW5wdXQ6Iik7Ci0gIEVYUEVDVF9FWElUKGRlY29kZV9k
YXRhLkFkZFN0cmluZygxLCAiIiwgImEiKSwKLSAgICAgICAgICAgICAgOjp0ZXN0aW5nOjpLaWxs
ZWRCeVNpZ25hbChTSUdBQlJUKSwKLSAgICAgICAgICAgICAgImVycm9yOiBnb3QgZW1wdHkgc3Ry
aW5nIGZvciBtYWtpbmcgVGV4dEZvcm1hdCBkYXRhLCBpbnB1dDoiKTsKLQotICAvLyBOdWxsIGNo
YXIgaW4gdGhlIHN0cmluZy4KLQotICBzdHJpbmcgc3RyX3dpdGhfbnVsbF9jaGFyKCJhYlwwYyIs
IDQpOwotICBFWFBFQ1RfRVhJVCgKLSAgICAgIGRlY29kZV9kYXRhLkFkZFN0cmluZygxLCBzdHJf
d2l0aF9udWxsX2NoYXIsICJkZWYiKSwKLSAgICAgIDo6dGVzdGluZzo6S2lsbGVkQnlTaWduYWwo
U0lHQUJSVCksCi0gICAgICAiZXJyb3I6IGdvdCBhIG51bGwgY2hhciBpbiBhIHN0cmluZyBmb3Ig
bWFraW5nIFRleHRGb3JtYXQgZGF0YSwgaW5wdXQ6Iik7Ci0gIEVYUEVDVF9FWElUKAotICAgICAg
ZGVjb2RlX2RhdGEuQWRkU3RyaW5nKDEsICJkZWYiLCBzdHJfd2l0aF9udWxsX2NoYXIpLAotICAg
ICAgOjp0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwKLSAgICAgICJlcnJvcjogZ290
IGEgbnVsbCBjaGFyIGluIGEgc3RyaW5nIGZvciBtYWtpbmcgVGV4dEZvcm1hdCBkYXRhLCBpbnB1
dDoiKTsKLQotICAvLyBEdXBsaWNhdGUga2V5cwotCi0gIGRlY29kZV9kYXRhLkFkZFN0cmluZygx
LCAiYWJjZGVmZ2hJSiIsICJhYmNkZWZnaElKIik7Ci0gIGRlY29kZV9kYXRhLkFkZFN0cmluZygz
LCAiYWJjZGVmZ2hJSiIsICJfQWJjZGVmZ2hJSiIpOwotICBkZWNvZGVfZGF0YS5BZGRTdHJpbmco
MiwgImFiY2RlZmdoSUoiLCAiQWJjZF9FZmdoSUoiKTsKLSAgRVhQRUNUX0VYSVQoZGVjb2RlX2Rh
dGEuQWRkU3RyaW5nKDIsICJ4eXoiLCAieF95eiIpLAotICAgICAgICAgICAgICA6OnRlc3Rpbmc6
OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLAotICAgICAgICAgICAgICAiZXJyb3I6IGR1cGxpY2F0
ZSBrZXkgXFwoMlxcKSBtYWtpbmcgVGV4dEZvcm1hdCBkYXRhLCBpbnB1dDoiKTsKLX0KLSNlbmRp
ZiAgLy8gUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLQotLy8gVE9ETyh0aG9tYXN2bCk6IFNob3Vs
ZCBwcm9iYWJseSBhZGQgc29tZSB1bml0dGVzdHMgZm9yIGFsbCB0aGUgc3BlY2lhbCBjYXNlcwot
Ly8gb2YgbmFtZSBtYW5nbGluZyAoY2xhc3MgbmFtZSwgZmllbGQgbmFtZSwgZW51bSBuYW1lcyku
ICBSYXRoZXIgdGhhbiBkb2luZwotLy8gdGhpcyB3aXRoIGFuIE9iakMgdGVzdCBpbiB0aGUgb2Jq
ZWN0aXZlYyBkaXJlY3RvcnksIHdlIHNob3VsZCBiZSBhYmxlIHRvCi0vLyB1c2Ugc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9pbXBvcnRlciogKGxpa2Ugb3RoZXIgdGVzdHMpIHRvIHN1cHBv
cnQgYQotLy8gdmlydHVhbCBmaWxlIHN5c3RlbSB0byBmZWVkIGluIHByb3Rvcywgb25jZSB3ZSBo
YXZlIHRoZSBEZXNjcmlwdG9yIHRyZWUsIHRoZQotLy8gdGVzdHMgY291bGQgdXNlIHRoZSBoZWxw
ZXIgbWV0aG9kcyBmb3IgZ2VuZXJhdGluZyBuYW1lcyBhbmQgdmFsaWRhdGUgdGhlCi0vLyByaWdo
dCB0aGluZ3MgYXJlIGhhcHBlbmluZy4KLQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3Bh
Y2Ugb2JqZWN0aXZlYwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWFwX2ZpZWxkLmNjIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19tYXBfZmllbGQu
Y2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNWQ4YWVhMjE3OTE3NzI5ZTZiYzMx
NjQxM2FkZmUyNGVjZWNhYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZl
Y19tYXBfZmllbGQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAxNSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2Jq
ZWN0aXZlY19tYXBfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29t
bW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2Jq
ZWN0aXZlY19oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ug
b2JqZWN0aXZlYyB7Ci0KLS8vIE1hcEZpZWxkR2VuZXJhdG9yIHVzZXMgUmVwZWF0ZWRGaWVsZEdl
bmVyYXRvciBhcyB0aGUgcGFyZW50IGJlY2F1c2UgaXQKLS8vIHByb3ZpZGVzIGEgYnVuY2ggb2Yg
dGhpbmdzIChubyBoYXMqIG1ldGhvZHMsIGNvbW1lbnRzIGZvciBjb250YWluZWQgdHlwZSwKLS8v
IGV0Yy4pLgotCi1uYW1lc3BhY2UgewotCi1jb25zdCBjaGFyKiBNYXBFbnRyeVR5cGVOYW1lKGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgYm9vbCBpc0tleSkgewotICBPYmplY3Rp
dmVDVHlwZSB0eXBlID0gR2V0T2JqZWN0aXZlQ1R5cGUoZGVzY3JpcHRvcik7Ci0gIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfSU5UMzI6Ci0gICAgICByZXR1cm4gIklu
dDMyIjsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX1VJTlQzMjoKLSAgICAgIHJldHVybiAiVUlu
dDMyIjsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX0lOVDY0OgotICAgICAgcmV0dXJuICJJbnQ2
NCI7Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9VSU5UNjQ6Ci0gICAgICByZXR1cm4gIlVJbnQ2
NCI7Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9GTE9BVDoKLSAgICAgIHJldHVybiAiRmxvYXQi
OwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfRE9VQkxFOgotICAgICAgcmV0dXJuICJEb3VibGUi
OwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfQk9PTEVBTjoKLSAgICAgIHJldHVybiAiQm9vbCI7
Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9TVFJJTkc6Ci0gICAgICByZXR1cm4gKGlzS2V5ID8g
IlN0cmluZyIgOiAiT2JqZWN0Iik7Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9EQVRBOgotICAg
ICAgcmV0dXJuICJPYmplY3QiOwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfRU5VTToKLSAgICAg
IHJldHVybiAiRW51bSI7Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9NRVNTQUdFOgotICAgICAg
cmV0dXJuICJPYmplY3QiOwotICB9Ci0KLSAgLy8gU29tZSBjb21waWxlcnMgcmVwb3J0IHJlYWNo
aW5nIGVuZCBvZiBmdW5jdGlvbiBldmVuIHRob3VnaCBhbGwgY2FzZXMgb2YKLSAgLy8gdGhlIGVu
dW0gYXJlIGhhbmRlZCBpbiB0aGUgc3dpdGNoLgotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2Fu
J3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1N
YXBGaWVsZEdlbmVyYXRvcjo6TWFwRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBSZXBlYXRlZEZpZWxkR2VuZXJhdG9yKGRlc2NyaXB0
b3IsIG9wdGlvbnMpIHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXlfZGVzY3JpcHRvciA9
Ci0gICAgICBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJrZXki
KTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiB2YWx1ZV9kZXNjcmlwdG9yID0KLSAgICAgIGRl
c2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gIHZh
bHVlX2ZpZWxkX2dlbmVyYXRvcl8ucmVzZXQoRmllbGRHZW5lcmF0b3I6Ok1ha2UodmFsdWVfZGVz
Y3JpcHRvciwgb3B0aW9ucykpOwotCi0gIC8vIFB1bGwgb3ZlciBzb21lIHZhcmlhYmxlc18gZnJv
bSB0aGUgdmFsdWUuCi0gIHZhcmlhYmxlc19bImZpZWxkX3R5cGUiXSA9IHZhbHVlX2ZpZWxkX2dl
bmVyYXRvcl8tPnZhcmlhYmxlKCJmaWVsZF90eXBlIik7Ci0gIHZhcmlhYmxlc19bImRlZmF1bHQi
XSA9IHZhbHVlX2ZpZWxkX2dlbmVyYXRvcl8tPnZhcmlhYmxlKCJkZWZhdWx0Iik7Ci0gIHZhcmlh
Ymxlc19bImRlZmF1bHRfbmFtZSJdID0gdmFsdWVfZmllbGRfZ2VuZXJhdG9yXy0+dmFyaWFibGUo
ImRlZmF1bHRfbmFtZSIpOwotCi0gIC8vIEJ1aWxkIGN1c3RvbSBmaWVsZCBmbGFncy4KLSAgc3Rk
Ojp2ZWN0b3I8c3RyaW5nPiBmaWVsZF9mbGFnczsKLSAgZmllbGRfZmxhZ3MucHVzaF9iYWNrKCJH
UEJGaWVsZE1hcEtleSIgKyBHZXRDYXBpdGFsaXplZFR5cGUoa2V5X2Rlc2NyaXB0b3IpKTsKLSAg
Ly8gUHVsbCBvdmVyIHRoZSBjdXJyZW50IHRleHQgZm9ybWF0IGN1c3RvbSBuYW1lIHZhbHVlcyB0
aGF0IHdhcyBjYWxjdWxhdGVkLgotICBpZiAodmFyaWFibGVzX1siZmllbGRmbGFncyJdLmZpbmQo
IkdQQkZpZWxkVGV4dEZvcm1hdE5hbWVDdXN0b20iKSAhPQotICAgICAgc3RyaW5nOjpucG9zKSB7
Ci0gICAgZmllbGRfZmxhZ3MucHVzaF9iYWNrKCJHUEJGaWVsZFRleHRGb3JtYXROYW1lQ3VzdG9t
Iik7Ci0gIH0KLSAgLy8gUHVsbCBvdmVyIHNvbWUgaW5mbyBmcm9tIHRoZSB2YWx1ZSdzIGZsYWdz
LgotICBjb25zdCBzdHJpbmcmIHZhbHVlX2ZpZWxkX2ZsYWdzID0KLSAgICAgIHZhbHVlX2ZpZWxk
X2dlbmVyYXRvcl8tPnZhcmlhYmxlKCJmaWVsZGZsYWdzIik7Ci0gIGlmICh2YWx1ZV9maWVsZF9m
bGFncy5maW5kKCJHUEJGaWVsZEhhc0RlZmF1bHRWYWx1ZSIpICE9IHN0cmluZzo6bnBvcykgewot
ICAgIGZpZWxkX2ZsYWdzLnB1c2hfYmFjaygiR1BCRmllbGRIYXNEZWZhdWx0VmFsdWUiKTsKLSAg
fQotICBpZiAodmFsdWVfZmllbGRfZmxhZ3MuZmluZCgiR1BCRmllbGRIYXNFbnVtRGVzY3JpcHRv
ciIpICE9IHN0cmluZzo6bnBvcykgewotICAgIGZpZWxkX2ZsYWdzLnB1c2hfYmFjaygiR1BCRmll
bGRIYXNFbnVtRGVzY3JpcHRvciIpOwotICB9Ci0gIHZhcmlhYmxlc19bImZpZWxkZmxhZ3MiXSA9
IEJ1aWxkRmxhZ3NTdHJpbmcoZmllbGRfZmxhZ3MpOwotCi0gIE9iamVjdGl2ZUNUeXBlIHZhbHVl
X29iamNfdHlwZSA9IEdldE9iamVjdGl2ZUNUeXBlKHZhbHVlX2Rlc2NyaXB0b3IpOwotICBjb25z
dCBib29sIHZhbHVlX2lzX29iamVjdF90eXBlID0KLSAgICAgICgodmFsdWVfb2JqY190eXBlID09
IE9CSkVDVElWRUNUWVBFX1NUUklORykgfHwKLSAgICAgICAodmFsdWVfb2JqY190eXBlID09IE9C
SkVDVElWRUNUWVBFX0RBVEEpIHx8Ci0gICAgICAgKHZhbHVlX29iamNfdHlwZSA9PSBPQkpFQ1RJ
VkVDVFlQRV9NRVNTQUdFKSk7Ci0gIGlmICgoR2V0T2JqZWN0aXZlQ1R5cGUoa2V5X2Rlc2NyaXB0
b3IpID09IE9CSkVDVElWRUNUWVBFX1NUUklORykgJiYKLSAgICAgIHZhbHVlX2lzX29iamVjdF90
eXBlKSB7Ci0gICAgdmFyaWFibGVzX1siYXJyYXlfc3RvcmFnZV90eXBlIl0gPSAiTlNNdXRhYmxl
RGljdGlvbmFyeSI7Ci0gICAgdmFyaWFibGVzX1siYXJyYXlfcHJvcGVydHlfdHlwZSJdID0KLSAg
ICAgICAgIk5TTXV0YWJsZURpY3Rpb25hcnk8TlNTdHJpbmcqLCAiICsKLSAgICAgICAgdmFsdWVf
ZmllbGRfZ2VuZXJhdG9yXy0+dmFyaWFibGUoInN0b3JhZ2VfdHlwZSIpICsgIio+IjsKLSAgfSBl
bHNlIHsKLSAgICBzdHJpbmcgY2xhc3NfbmFtZSgiR1BCIik7Ci0gICAgY2xhc3NfbmFtZSArPSBN
YXBFbnRyeVR5cGVOYW1lKGtleV9kZXNjcmlwdG9yLCB0cnVlKTsKLSAgICBjbGFzc19uYW1lICs9
IE1hcEVudHJ5VHlwZU5hbWUodmFsdWVfZGVzY3JpcHRvciwgZmFsc2UpOwotICAgIGNsYXNzX25h
bWUgKz0gIkRpY3Rpb25hcnkiOwotICAgIHZhcmlhYmxlc19bImFycmF5X3N0b3JhZ2VfdHlwZSJd
ID0gY2xhc3NfbmFtZTsKLSAgICBpZiAodmFsdWVfaXNfb2JqZWN0X3R5cGUpIHsKLSAgICAgIHZh
cmlhYmxlc19bImFycmF5X3Byb3BlcnR5X3R5cGUiXSA9Ci0gICAgICAgICAgY2xhc3NfbmFtZSAr
ICI8IiArCi0gICAgICAgICAgdmFsdWVfZmllbGRfZ2VuZXJhdG9yXy0+dmFyaWFibGUoInN0b3Jh
Z2VfdHlwZSIpICsgIio+IjsKLSAgICB9Ci0gIH0KLQotICB2YXJpYWJsZXNfWyJkYXRhVHlwZVNw
ZWNpZmljX25hbWUiXSA9Ci0gICAgICB2YWx1ZV9maWVsZF9nZW5lcmF0b3JfLT52YXJpYWJsZSgi
ZGF0YVR5cGVTcGVjaWZpY19uYW1lIik7Ci0gIHZhcmlhYmxlc19bImRhdGFUeXBlU3BlY2lmaWNf
dmFsdWUiXSA9Ci0gICAgICB2YWx1ZV9maWVsZF9nZW5lcmF0b3JfLT52YXJpYWJsZSgiZGF0YVR5
cGVTcGVjaWZpY192YWx1ZSIpOwotfQotCi1NYXBGaWVsZEdlbmVyYXRvcjo6fk1hcEZpZWxkR2Vu
ZXJhdG9yKCkge30KLQotdm9pZCBNYXBGaWVsZEdlbmVyYXRvcjo6RmluaXNoSW5pdGlhbGl6YXRp
b24odm9pZCkgewotICBSZXBlYXRlZEZpZWxkR2VuZXJhdG9yOjpGaW5pc2hJbml0aWFsaXphdGlv
bigpOwotICAvLyBVc2UgdGhlIGFycmF5X2NvbW1lbnQgc3VwcG9ydCBpbiBSZXBlYXRlZEZpZWxk
R2VuZXJhdG9yIHRvIG91dHB1dCB3aGF0IHRoZQotICAvLyB2YWx1ZXMgaW4gdGhlIG1hcCBhcmUu
Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdmFsdWVfZGVzY3JpcHRvciA9Ci0gICAgICBkZXNj
cmlwdG9yXy0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgidmFsdWUiKTsKLSAgaWYg
KEdldE9iamVjdGl2ZUNUeXBlKHZhbHVlX2Rlc2NyaXB0b3IpID09IE9CSkVDVElWRUNUWVBFX0VO
VU0pIHsKLSAgICB2YXJpYWJsZXNfWyJhcnJheV9jb21tZW50Il0gPQotICAgICAgICAiLy8gfCIg
KyB2YXJpYWJsZXNfWyJuYW1lIl0gKyAifCB2YWx1ZXMgYXJlIHwiICsgdmFsdWVfZmllbGRfZ2Vu
ZXJhdG9yXy0+dmFyaWFibGUoInN0b3JhZ2VfdHlwZSIpICsgInxcbiI7Ci0gIH0KLX0KLQotdm9p
ZCBNYXBGaWVsZEdlbmVyYXRvcjo6RGV0ZXJtaW5lRm9yd2FyZERlY2xhcmF0aW9ucygKLSAgICBz
ZXQ8c3RyaW5nPiogZndkX2RlY2xzKSBjb25zdCB7Ci0gIFJlcGVhdGVkRmllbGRHZW5lcmF0b3I6
OkRldGVybWluZUZvcndhcmREZWNsYXJhdGlvbnMoZndkX2RlY2xzKTsKLSAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiB2YWx1ZV9kZXNjcmlwdG9yID0KLSAgICAgIGRlc2NyaXB0b3JfLT5tZXNzYWdl
X3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICBpZiAoR2V0T2JqZWN0aXZlQ1R5
cGUodmFsdWVfZGVzY3JpcHRvcikgPT0gT0JKRUNUSVZFQ1RZUEVfTUVTU0FHRSkgewotICAgIGNv
bnN0IHN0cmluZyYgdmFsdWVfc3RvcmFnZV90eXBlID0KLSAgICAgICAgdmFsdWVfZmllbGRfZ2Vu
ZXJhdG9yXy0+dmFyaWFibGUoInN0b3JhZ2VfdHlwZSIpOwotICAgIGZ3ZF9kZWNscy0+aW5zZXJ0
KCJAY2xhc3MgIiArIHZhbHVlX3N0b3JhZ2VfdHlwZSk7Ci0gIH0KLX0KLQotCi19ICAvLyBuYW1l
c3BhY2Ugb2JqZWN0aXZlYwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWFwX2ZpZWxkLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21hcF9maWVs
ZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzY4YTY4MjlmMDQzNzNmYzU1NjM2
OTEzODRhYTQyZWZmMGNkYTM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2
ZWNfbWFwX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDE1IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfT0JKRUNUSVZFQ19NQVBfRklFTERfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01Q
SUxFUl9PQkpFQ1RJVkVDX01BUF9GSUVMRF9IX18KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRl
IDxzdHJpbmc+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMv
b2JqZWN0aXZlY19maWVsZC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIG9iamVjdGl2ZWMgewotCi1j
bGFzcyBNYXBGaWVsZEdlbmVyYXRvciA6IHB1YmxpYyBSZXBlYXRlZEZpZWxkR2VuZXJhdG9yIHsK
LSAgZnJpZW5kIEZpZWxkR2VuZXJhdG9yKiBGaWVsZEdlbmVyYXRvcjo6TWFrZShjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotCi0gcHVibGljOgotICB2aXJ0dWFs
IHZvaWQgRmluaXNoSW5pdGlhbGl6YXRpb24odm9pZCk7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIE1hcEZp
ZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3QgT3B0
aW9ucyYgb3B0aW9ucyk7Ci0gIHZpcnR1YWwgfk1hcEZpZWxkR2VuZXJhdG9yKCk7Ci0KLSAgdmly
dHVhbCB2b2lkIERldGVybWluZUZvcndhcmREZWNsYXJhdGlvbnMoc2V0PHN0cmluZz4qIGZ3ZF9k
ZWNscykgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBzY29wZWRfcHRyPEZpZWxkR2VuZXJhdG9yPiB2
YWx1ZV9maWVsZF9nZW5lcmF0b3JfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVD
VE9SUyhNYXBGaWVsZEdlbmVyYXRvcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugb2JqZWN0aXZl
YwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfT0JKRUNUSVZFQ19NQVBfRklFTERfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21lc3NhZ2UuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21lc3NhZ2UuY2MKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMjcyNTk2Y2IyNDA5ZTgyNDUzMGUyYzZjMTNkYmE1
YWY4MmRiZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19tZXNzYWdl
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjAwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGlvc3RyZWFt
PgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
aGFzaC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29i
amVjdGl2ZWNfbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9v
YmplY3RpdmVjL29iamVjdGl2ZWNfZW51bS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZXh0ZW5zaW9uLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0bF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
aW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0u
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGVfaW5sLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2Ug
cHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBvYmplY3RpdmVjIHsK
LQotdXNpbmcgaW50ZXJuYWw6OldpcmVGb3JtYXQ7Ci11c2luZyBpbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU7Ci0KLW5hbWVzcGFjZSB7Ci1zdHJ1Y3QgRmllbGRPcmRlcmluZ0J5TnVtYmVyIHsKLSAg
aW5saW5lIGJvb2wgb3BlcmF0b3IoKShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBiKSBjb25zdCB7Ci0gICAg
cmV0dXJuIGEtPm51bWJlcigpIDwgYi0+bnVtYmVyKCk7Ci0gIH0KLX07Ci0KLWludCBPcmRlckdy
b3VwRm9yRmllbGREZXNjcmlwdG9yKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcikg
ewotICAvLyBUaGUgZmlyc3QgaXRlbSBpbiB0aGUgb2JqZWN0IHN0cnVjdHVyZSBpcyBvdXIgdWlu
dDMyW10gZm9yIGhhcyBiaXRzLgotICAvLyBXZSB0aGVuIHdhbnQgdG8gb3JkZXIgdGhpbmdzIHRv
IG1ha2UgdGhlIGluc3RhbmNlcyBhcyBzbWFsbCBhcwotICAvLyBwb3NzaWJsZS4gU28gd2UgZm9s
bG93IHRoZSBoYXMgYml0cyB3aXRoOgotICAvLyAgIDEuIEFueXRoaW5nIGFsd2F5cyA0IGJ5dGVz
IC0gZmxvYXQsICozMiwgZW51bXMKLSAgLy8gICAyLiBBbnl0aGluZyB0aGF0IGlzIGFsd2F5cyBh
IHBvaW50ZXIgKHRoZXkgd2lsbCBiZSA4IGJ5dGVzIG9uIDY0IGJpdAotICAvLyAgICAgIGJ1aWxk
cyBhbmQgNCBieXRlcyBvbiAzMmJpdCBidWlsZHMuCi0gIC8vICAgMy4gQW55dGhpbmcgYWx3YXlz
IDggYnl0ZXMgLSBkb3VibGUsICo2NAotICAvLwotICAvLyBOT1RFOiBCb29scyBhcmVuJ3QgbGlz
dGVkLCB0aGV5IHdlcmUgc3RvcmVkIGluIHRoZSBoYXMgYml0cy4KLSAgLy8KLSAgLy8gV2h5PyBV
c2luZyA2NGJpdCBidWlsZHMgYXMgYW4gZXhhbXBsZSwgdGhpcyBtZWFucyB3b3JzZSBjYXNlLCB3
ZSBoYXZlCi0gIC8vIGVub3VnaCBib29scyB0aGF0IHdlIG92ZXJmbG93IDEgYnl0ZSBmcm9tIDQg
Ynl0ZSBhbGlnbm1lbnQsIHNvIDMgYnl0ZXMKLSAgLy8gYXJlIHdhc3RlZCBiZWZvcmUgdGhlIDQg
Ynl0ZSB2YWx1ZXMuIFRoZW4gaWYgd2UgaGF2ZSBhbiBvZGQgbnVtYmVyIG9mCi0gIC8vIHRob3Nl
IDQgYnl0ZSB2YWx1ZXMsIHRoZSA4IGJ5dGUgdmFsdWVzIHdpbGwgYmUgcHVzaGVkIGRvd24gYnkg
MzJiaXRzIHRvCi0gIC8vIGtlZXAgdGhlbSBhbGlnbmVkLiBCdXQgdGhlIHN0cnVjdHVyZSB3aWxs
IGVuZCA4IGJ5dGUgYWxpZ25lZCwgc28gbm8KLSAgLy8gd2FzdGUgb24gdGhlIGVuZC4gSWYgeW91
IGRpZCB0aGUgcmV2ZXJzZSBvcmRlciwgeW91IGNvdWxkIHdhc3RlIDQgYnl0ZXMKLSAgLy8gYmVm
b3JlIHRoZSBmaXJzdCA4IGJ5dGUgdmFsdWUgKGFmdGVyIHRoZSBoYXMgYXJyYXkpLCB0aGVuIGEg
c2luZ2xlCi0gIC8vIGJvb2wgb24gdGhlIGVuZCB3b3VsZCBuZWVkIDcgYnl0ZXMgb2YgcGFkZGlu
ZyB0byBtYWtlIHRoZSBvdmVyYWxsCi0gIC8vIHN0cnVjdHVyZSA4IGJ5dGUgYWxpZ25lZDsgc28g
MTEgYnl0ZXMsIHdhc3RlZCB0b3RhbC4KLQotICAvLyBBbnl0aGluZyByZXBlYXRlZCBpcyBhIEdQ
QipBcnJheS9OU0FycmF5LCBzbyBwb2ludGVyLgotICBpZiAoZGVzY3JpcHRvci0+aXNfcmVwZWF0
ZWQoKSkgewotICAgIHJldHVybiAzOwotICB9Ci0KLSAgc3dpdGNoIChkZXNjcmlwdG9yLT50eXBl
KCkpIHsKLSAgICAvLyBBbGwgYWx3YXlzIDggYnl0ZXMuCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OlRZUEVfRE9VQkxFOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDY0Ogot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQ2NDoKLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6VFlQRV9VSU5UNjQ6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0ZJ
WEVENjQ6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRklYRUQ2NDoKLSAgICAgIHJl
dHVybiA0OwotCi0gICAgLy8gUG9pbnRlcnMgKHN0cmluZyBhbmQgYnl0ZXMgYXJlIE5TU3RyaW5n
IGFuZCBOU0RhdGEpOyA4IG9yIDQgYnl0ZXMKLSAgICAvLyBkZXBlbmRpbmcgb24gdGhlIGJ1aWxk
IGFyY2hpdGVjdHVyZS4KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUDoKLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdFOgotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX1NUUklORzoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRF
UzoKLSAgICAgIHJldHVybiAzOwotCi0gICAgLy8gQWxsIGFsd2F5cyA0IGJ5dGVzIChlbnVtcyBh
cmUgaW50MzJzKS4KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GTE9BVDoKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9JTlQzMjoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9TSU5UMzI6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfVUlOVDMyOgot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDMyOgotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX0ZJWEVEMzI6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
RU5VTToKLSAgICAgIHJldHVybiAyOwotCi0gICAgLy8gMCBieXRlcy4gU3RvcmVkIGluIHRoZSBo
YXMgYml0cy4KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CT09MOgotICAgICAgcmV0
dXJuIDk5OyAgLy8gRW5kIG9mIHRoZSBsaXN0IChkb2Vzbid0IHJlYWxseSBtYXR0ZXIpLgotICB9
Ci0KLSAgLy8gU29tZSBjb21waWxlcnMgcmVwb3J0IHJlYWNoaW5nIGVuZCBvZiBmdW5jdGlvbiBl
dmVuIHRob3VnaCBhbGwgY2FzZXMgb2YKLSAgLy8gdGhlIGVudW0gYXJlIGhhbmRlZCBpbiB0aGUg
c3dpdGNoLgotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0
dXJuIDA7Ci19Ci0KLXN0cnVjdCBGaWVsZE9yZGVyaW5nQnlTdG9yYWdlU2l6ZSB7Ci0gIGlubGlu
ZSBib29sIG9wZXJhdG9yKCkoY29uc3QgRmllbGREZXNjcmlwdG9yKiBhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogYikgY29uc3QgewotICAgIC8vIE9y
ZGVyIGJ5IGdyb3VwaW5nLgotICAgIGNvbnN0IGludCBvcmRlcl9ncm91cF9hID0gT3JkZXJHcm91
cEZvckZpZWxkRGVzY3JpcHRvcihhKTsKLSAgICBjb25zdCBpbnQgb3JkZXJfZ3JvdXBfYiA9IE9y
ZGVyR3JvdXBGb3JGaWVsZERlc2NyaXB0b3IoYik7Ci0gICAgaWYgKG9yZGVyX2dyb3VwX2EgIT0g
b3JkZXJfZ3JvdXBfYikgewotICAgICAgcmV0dXJuIG9yZGVyX2dyb3VwX2EgPCBvcmRlcl9ncm91
cF9iOwotICAgIH0KLSAgICAvLyBXaXRoaW4gdGhlIGdyb3VwLCBvcmRlciBieSBmaWVsZCBudW1i
ZXIgKHByb3ZpZGVzIHN0YWJsZSBvcmRlcmluZykuCi0gICAgcmV0dXJuIGEtPm51bWJlcigpIDwg
Yi0+bnVtYmVyKCk7Ci0gIH0KLX07Ci0KLXN0cnVjdCBFeHRlbnNpb25SYW5nZU9yZGVyaW5nIHsK
LSAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlKiBhLAot
ICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvcjo6RXh0ZW5zaW9uUmFuZ2UqIGIpIGNv
bnN0IHsKLSAgICByZXR1cm4gYS0+c3RhcnQgPCBiLT5zdGFydDsKLSAgfQotfTsKLQotLy8gU29y
dCB0aGUgZmllbGRzIG9mIHRoZSBnaXZlbiBEZXNjcmlwdG9yIGJ5IG51bWJlciBpbnRvIGEgbmV3
W10nZCBhcnJheQotLy8gYW5kIHJldHVybiBpdC4KLWNvbnN0IEZpZWxkRGVzY3JpcHRvcioqIFNv
cnRGaWVsZHNCeU51bWJlcihjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIGNvbnN0
IEZpZWxkRGVzY3JpcHRvcioqIGZpZWxkcyA9Ci0gICAgICBuZXcgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBbZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKV07Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgZmllbGRzW2ldID0gZGVzY3Jp
cHRvci0+ZmllbGQoaSk7Ci0gIH0KLSAgc29ydChmaWVsZHMsIGZpZWxkcyArIGRlc2NyaXB0b3It
PmZpZWxkX2NvdW50KCksIEZpZWxkT3JkZXJpbmdCeU51bWJlcigpKTsKLSAgcmV0dXJuIGZpZWxk
czsKLX0KLQotLy8gU29ydCB0aGUgZmllbGRzIG9mIHRoZSBnaXZlbiBEZXNjcmlwdG9yIGJ5IHN0
b3JhZ2Ugc2l6ZSBpbnRvIGEgbmV3W10nZAotLy8gYXJyYXkgYW5kIHJldHVybiBpdC4KLWNvbnN0
IEZpZWxkRGVzY3JpcHRvcioqIFNvcnRGaWVsZHNCeVN0b3JhZ2VTaXplKGNvbnN0IERlc2NyaXB0
b3IqIGRlc2NyaXB0b3IpIHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiogZmllbGRzID0KLSAg
ICAgIG5ldyBjb25zdCBGaWVsZERlc2NyaXB0b3IqIFtkZXNjcmlwdG9yLT5maWVsZF9jb3VudCgp
XTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5maWVsZF9jb3VudCgpOyBpKysp
IHsKLSAgICBmaWVsZHNbaV0gPSBkZXNjcmlwdG9yLT5maWVsZChpKTsKLSAgfQotICBzb3J0KGZp
ZWxkcywgZmllbGRzICsgZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKSwKLSAgICAgICBGaWVsZE9y
ZGVyaW5nQnlTdG9yYWdlU2l6ZSgpKTsKLSAgcmV0dXJuIGZpZWxkczsKLX0KLX0gIC8vIG5hbWVz
cGFjZQotCi1NZXNzYWdlR2VuZXJhdG9yOjpNZXNzYWdlR2VuZXJhdG9yKGNvbnN0IHN0cmluZyYg
cm9vdF9jbGFzc25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiByb290X2NsYXNzbmFtZV8ocm9vdF9j
bGFzc25hbWUpLAotICAgICAgZGVzY3JpcHRvcl8oZGVzY3JpcHRvciksCi0gICAgICBmaWVsZF9n
ZW5lcmF0b3JzXyhkZXNjcmlwdG9yLCBvcHRpb25zKSwKLSAgICAgIGNsYXNzX25hbWVfKENsYXNz
TmFtZShkZXNjcmlwdG9yXykpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+
ZXh0ZW5zaW9uX2NvdW50KCk7IGkrKykgewotICAgIGV4dGVuc2lvbl9nZW5lcmF0b3JzXy5wdXNo
X2JhY2soCi0gICAgICAgIG5ldyBFeHRlbnNpb25HZW5lcmF0b3IoY2xhc3NfbmFtZV8sIGRlc2Ny
aXB0b3JfLT5leHRlbnNpb24oaSkpKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVz
Y3JpcHRvcl8tPm9uZW9mX2RlY2xfY291bnQoKTsgaSsrKSB7Ci0gICAgT25lb2ZHZW5lcmF0b3Iq
IGdlbmVyYXRvciA9IG5ldyBPbmVvZkdlbmVyYXRvcihkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChp
KSk7Ci0gICAgb25lb2ZfZ2VuZXJhdG9yc18ucHVzaF9iYWNrKGdlbmVyYXRvcik7Ci0gIH0KLQot
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5lbnVtX3R5cGVfY291bnQoKTsgaSsr
KSB7Ci0gICAgRW51bUdlbmVyYXRvciogZ2VuZXJhdG9yID0gbmV3IEVudW1HZW5lcmF0b3IoZGVz
Y3JpcHRvcl8tPmVudW1fdHlwZShpKSk7Ci0gICAgZW51bV9nZW5lcmF0b3JzXy5wdXNoX2JhY2so
Z2VuZXJhdG9yKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPm5l
c3RlZF90eXBlX2NvdW50KCk7IGkrKykgewotICAgIE1lc3NhZ2VHZW5lcmF0b3IqIGdlbmVyYXRv
ciA9Ci0gICAgICAgIG5ldyBNZXNzYWdlR2VuZXJhdG9yKHJvb3RfY2xhc3NuYW1lXywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKGkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKTsKLSAgICBuZXN0ZWRfbWVzc2FnZV9n
ZW5lcmF0b3JzXy5wdXNoX2JhY2soZ2VuZXJhdG9yKTsKLSAgfQotfQotCi1NZXNzYWdlR2VuZXJh
dG9yOjp+TWVzc2FnZUdlbmVyYXRvcigpIHsKLSAgU1RMRGVsZXRlQ29udGFpbmVyUG9pbnRlcnMo
ZXh0ZW5zaW9uX2dlbmVyYXRvcnNfLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4dGVuc2lvbl9nZW5lcmF0b3JzXy5lbmQoKSk7Ci0gIFNUTERlbGV0ZUNvbnRhaW5lclBv
aW50ZXJzKGVudW1fZ2VuZXJhdG9yc18uYmVnaW4oKSwgZW51bV9nZW5lcmF0b3JzXy5lbmQoKSk7
Ci0gIFNUTERlbGV0ZUNvbnRhaW5lclBvaW50ZXJzKG5lc3RlZF9tZXNzYWdlX2dlbmVyYXRvcnNf
LmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZF9tZXNzYWdlX2dl
bmVyYXRvcnNfLmVuZCgpKTsKLSAgU1RMRGVsZXRlQ29udGFpbmVyUG9pbnRlcnMob25lb2ZfZ2Vu
ZXJhdG9yc18uYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lb2ZfZ2Vu
ZXJhdG9yc18uZW5kKCkpOwotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlU3Rh
dGljVmFyaWFibGVzSW5pdGlhbGl6YXRpb24oCi0gICAgaW86OlByaW50ZXIqIHByaW50ZXIpIHsK
LSAgZm9yICh2ZWN0b3I8RXh0ZW5zaW9uR2VuZXJhdG9yKj46Oml0ZXJhdG9yIGl0ZXIgPQotICAg
ICAgICAgICBleHRlbnNpb25fZ2VuZXJhdG9yc18uYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IGV4
dGVuc2lvbl9nZW5lcmF0b3JzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgKCppdGVyKS0+R2VuZXJh
dGVTdGF0aWNWYXJpYWJsZXNJbml0aWFsaXphdGlvbihwcmludGVyKTsKLSAgfQotCi0gIGZvciAo
dmVjdG9yPE1lc3NhZ2VHZW5lcmF0b3IqPjo6aXRlcmF0b3IgaXRlciA9Ci0gICAgICAgICAgIG5l
c3RlZF9tZXNzYWdlX2dlbmVyYXRvcnNfLmJlZ2luKCk7Ci0gICAgICAgaXRlciAhPSBuZXN0ZWRf
bWVzc2FnZV9nZW5lcmF0b3JzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgKCppdGVyKS0+R2VuZXJh
dGVTdGF0aWNWYXJpYWJsZXNJbml0aWFsaXphdGlvbihwcmludGVyKTsKLSAgfQotfQotCi12b2lk
IE1lc3NhZ2VHZW5lcmF0b3I6OkRldGVybWluZUZvcndhcmREZWNsYXJhdGlvbnMoc2V0PHN0cmlu
Zz4qIGZ3ZF9kZWNscykgewotICBpZiAoIUlzTWFwRW50cnlNZXNzYWdlKGRlc2NyaXB0b3JfKSkg
ewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkr
KykgewotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZERlc2NyaXB0b3IgPSBkZXNj
cmlwdG9yXy0+ZmllbGQoaSk7Ci0gICAgICBmaWVsZF9nZW5lcmF0b3JzXy5nZXQoZmllbGREZXNj
cmlwdG9yKQotICAgICAgICAgIC5EZXRlcm1pbmVGb3J3YXJkRGVjbGFyYXRpb25zKGZ3ZF9kZWNs
cyk7Ci0gICAgfQotICB9Ci0KLSAgZm9yICh2ZWN0b3I8TWVzc2FnZUdlbmVyYXRvcio+OjppdGVy
YXRvciBpdGVyID0KLSAgICAgICAgICAgbmVzdGVkX21lc3NhZ2VfZ2VuZXJhdG9yc18uYmVnaW4o
KTsKLSAgICAgICBpdGVyICE9IG5lc3RlZF9tZXNzYWdlX2dlbmVyYXRvcnNfLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAoKml0ZXIpLT5EZXRlcm1pbmVGb3J3YXJkRGVjbGFyYXRpb25zKGZ3ZF9kZWNs
cyk7Ci0gIH0KLX0KLQotdm9pZCBNZXNzYWdlR2VuZXJhdG9yOjpHZW5lcmF0ZUVudW1IZWFkZXIo
aW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgZm9yICh2ZWN0b3I8RW51bUdlbmVyYXRvcio+Ojpp
dGVyYXRvciBpdGVyID0gZW51bV9nZW5lcmF0b3JzXy5iZWdpbigpOwotICAgICAgIGl0ZXIgIT0g
ZW51bV9nZW5lcmF0b3JzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgKCppdGVyKS0+R2VuZXJhdGVI
ZWFkZXIocHJpbnRlcik7Ci0gIH0KLQotICBmb3IgKHZlY3RvcjxNZXNzYWdlR2VuZXJhdG9yKj46
Oml0ZXJhdG9yIGl0ZXIgPQotICAgICAgICAgICBuZXN0ZWRfbWVzc2FnZV9nZW5lcmF0b3JzXy5i
ZWdpbigpOwotICAgICAgIGl0ZXIgIT0gbmVzdGVkX21lc3NhZ2VfZ2VuZXJhdG9yc18uZW5kKCk7
ICsraXRlcikgewotICAgICgqaXRlciktPkdlbmVyYXRlRW51bUhlYWRlcihwcmludGVyKTsKLSAg
fQotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlRXh0ZW5zaW9uUmVnaXN0cmF0
aW9uU291cmNlKAotICAgIGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIGZvciAodmVjdG9yPEV4
dGVuc2lvbkdlbmVyYXRvcio+OjppdGVyYXRvciBpdGVyID0KLSAgICAgICAgICAgZXh0ZW5zaW9u
X2dlbmVyYXRvcnNfLmJlZ2luKCk7Ci0gICAgICAgaXRlciAhPSBleHRlbnNpb25fZ2VuZXJhdG9y
c18uZW5kKCk7ICsraXRlcikgewotICAgICgqaXRlciktPkdlbmVyYXRlUmVnaXN0cmF0aW9uU291
cmNlKHByaW50ZXIpOwotICB9Ci0KLSAgZm9yICh2ZWN0b3I8TWVzc2FnZUdlbmVyYXRvcio+Ojpp
dGVyYXRvciBpdGVyID0KLSAgICAgICAgICAgbmVzdGVkX21lc3NhZ2VfZ2VuZXJhdG9yc18uYmVn
aW4oKTsKLSAgICAgICBpdGVyICE9IG5lc3RlZF9tZXNzYWdlX2dlbmVyYXRvcnNfLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAoKml0ZXIpLT5HZW5lcmF0ZUV4dGVuc2lvblJlZ2lzdHJhdGlvblNvdXJj
ZShwcmludGVyKTsKLSAgfQotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlTWVz
c2FnZUhlYWRlcihpbzo6UHJpbnRlciogcHJpbnRlcikgewotICAvLyBUaGlzIGEgYSBtYXAgZW50
cnkgbWVzc2FnZSwganVzdCByZWN1cnNlIGFuZCBkbyBub3RoaW5nIGRpcmVjdGx5LgotICBpZiAo
SXNNYXBFbnRyeU1lc3NhZ2UoZGVzY3JpcHRvcl8pKSB7Ci0gICAgZm9yICh2ZWN0b3I8TWVzc2Fn
ZUdlbmVyYXRvcio+OjppdGVyYXRvciBpdGVyID0KLSAgICAgICAgICAgICBuZXN0ZWRfbWVzc2Fn
ZV9nZW5lcmF0b3JzXy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBuZXN0ZWRfbWVzc2FnZV9n
ZW5lcmF0b3JzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAoKml0ZXIpLT5HZW5lcmF0ZU1lc3Nh
Z2VIZWFkZXIocHJpbnRlcik7Ci0gICAgfQotICAgIHJldHVybjsKLSAgfQotCi0gIHByaW50ZXIt
PlByaW50KAotICAgICAgIiNwcmFnbWEgbWFyayAtICRjbGFzc25hbWUkXG4iCi0gICAgICAiXG4i
LAotICAgICAgImNsYXNzbmFtZSIsIGNsYXNzX25hbWVfKTsKLQotICBpZiAoZGVzY3JpcHRvcl8t
PmZpZWxkX2NvdW50KCkpIHsKLSAgICBzY29wZWRfYXJyYXk8Y29uc3QgRmllbGREZXNjcmlwdG9y
Kj4gc29ydGVkX2ZpZWxkcygKLSAgICAgICAgU29ydEZpZWxkc0J5TnVtYmVyKGRlc2NyaXB0b3Jf
KSk7Ci0KLSAgICBwcmludGVyLT5QcmludCgidHlwZWRlZiBHUEJfRU5VTSgkY2xhc3NuYW1lJF9G
aWVsZE51bWJlcikge1xuIiwKLSAgICAgICAgICAgICAgICAgICAiY2xhc3NuYW1lIiwgY2xhc3Nf
bmFtZV8pOwotICAgIHByaW50ZXItPkluZGVudCgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgICBmaWVsZF9nZW5lcmF0
b3JzXy5nZXQoc29ydGVkX2ZpZWxkc1tpXSkKLSAgICAgICAgICAuR2VuZXJhdGVGaWVsZE51bWJl
ckNvbnN0YW50KHByaW50ZXIpOwotICAgIH0KLQotICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAg
ICBwcmludGVyLT5QcmludCgifTtcblxuIik7Ci0gIH0KLQotICBmb3IgKHZlY3RvcjxPbmVvZkdl
bmVyYXRvcio+OjppdGVyYXRvciBpdGVyID0gb25lb2ZfZ2VuZXJhdG9yc18uYmVnaW4oKTsKLSAg
ICAgICBpdGVyICE9IG9uZW9mX2dlbmVyYXRvcnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAoKml0
ZXIpLT5HZW5lcmF0ZUNhc2VFbnVtKHByaW50ZXIpOwotICB9Ci0KLSAgc3RyaW5nIG1lc3NhZ2Vf
Y29tbWVudHM7Ci0gIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOwotICBpZiAoZGVzY3JpcHRvcl8t
PkdldFNvdXJjZUxvY2F0aW9uKCZsb2NhdGlvbikpIHsKLSAgICBtZXNzYWdlX2NvbW1lbnRzID0g
QnVpbGRDb21tZW50c1N0cmluZyhsb2NhdGlvbik7Ci0gIH0gZWxzZSB7Ci0gICAgbWVzc2FnZV9j
b21tZW50cyA9ICIiOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAiJGNvbW1lbnRz
JCRkZXByZWNhdGVkX2F0dHJpYnV0ZSRAaW50ZXJmYWNlICRjbGFzc25hbWUkIDogR1BCTWVzc2Fn
ZVxuXG4iLAotICAgICAgImNsYXNzbmFtZSIsIGNsYXNzX25hbWVfLAotICAgICAgImRlcHJlY2F0
ZWRfYXR0cmlidXRlIiwgR2V0T3B0aW9uYWxEZXByZWNhdGVkQXR0cmlidXRlKGRlc2NyaXB0b3Jf
LCBmYWxzZSwgdHJ1ZSksCi0gICAgICAiY29tbWVudHMiLCBtZXNzYWdlX2NvbW1lbnRzKTsKLQot
ICB2ZWN0b3I8Y2hhcj4gc2Vlbl9vbmVvZnMoZGVzY3JpcHRvcl8tPm9uZW9mX2RlY2xfY291bnQo
KSwgMCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7
IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+
ZmllbGQoaSk7Ci0gICAgaWYgKGZpZWxkLT5jb250YWluaW5nX29uZW9mKCkgIT0gTlVMTCkgewot
ICAgICAgY29uc3QgaW50IG9uZW9mX2luZGV4ID0gZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKS0+
aW5kZXgoKTsKLSAgICAgIGlmICghc2Vlbl9vbmVvZnNbb25lb2ZfaW5kZXhdKSB7Ci0gICAgICAg
IHNlZW5fb25lb2ZzW29uZW9mX2luZGV4XSA9IDE7Ci0gICAgICAgIG9uZW9mX2dlbmVyYXRvcnNf
W29uZW9mX2luZGV4XS0+R2VuZXJhdGVQdWJsaWNDYXNlUHJvcGVydHlEZWNsYXJhdGlvbigKLSAg
ICAgICAgICAgIHByaW50ZXIpOwotICAgICAgfQotICAgIH0KLSAgICBmaWVsZF9nZW5lcmF0b3Jz
Xy5nZXQoZmllbGQpLkdlbmVyYXRlUHJvcGVydHlEZWNsYXJhdGlvbihwcmludGVyKTsKLSAgfQot
Ci0gIHByaW50ZXItPlByaW50KCJAZW5kXG5cbiIpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGZpZWxkX2dlbmVyYXRvcnNf
LmdldChkZXNjcmlwdG9yXy0+ZmllbGQoaSkpCi0gICAgICAgIC5HZW5lcmF0ZUNGdW5jdGlvbkRl
Y2xhcmF0aW9ucyhwcmludGVyKTsKLSAgfQotCi0gIGlmICghb25lb2ZfZ2VuZXJhdG9yc18uZW1w
dHkoKSkgewotICAgIGZvciAodmVjdG9yPE9uZW9mR2VuZXJhdG9yKj46Oml0ZXJhdG9yIGl0ZXIg
PSBvbmVvZl9nZW5lcmF0b3JzXy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBvbmVvZl9nZW5l
cmF0b3JzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAoKml0ZXIpLT5HZW5lcmF0ZUNsZWFyRnVu
Y3Rpb25EZWNsYXJhdGlvbihwcmludGVyKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJpbnQoIlxu
Iik7Ci0gIH0KLQotICBpZiAoZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9jb3VudCgpID4gMCkgewot
ICAgIHByaW50ZXItPlByaW50KCJAaW50ZXJmYWNlICRjbGFzc25hbWUkIChEeW5hbWljTWV0aG9k
cylcblxuIiwKLSAgICAgICAgICAgICAgICAgICAiY2xhc3NuYW1lIiwgY2xhc3NfbmFtZV8pOwot
ICAgIGZvciAodmVjdG9yPEV4dGVuc2lvbkdlbmVyYXRvcio+OjppdGVyYXRvciBpdGVyID0KLSAg
ICAgICAgICAgICBleHRlbnNpb25fZ2VuZXJhdG9yc18uYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIg
IT0gZXh0ZW5zaW9uX2dlbmVyYXRvcnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICgqaXRlcikt
PkdlbmVyYXRlTWVtYmVyc0hlYWRlcihwcmludGVyKTsKLSAgICB9Ci0gICAgcHJpbnRlci0+UHJp
bnQoIkBlbmRcblxuIik7Ci0gIH0KLQotICBmb3IgKHZlY3RvcjxNZXNzYWdlR2VuZXJhdG9yKj46
Oml0ZXJhdG9yIGl0ZXIgPQotICAgICAgICAgICBuZXN0ZWRfbWVzc2FnZV9nZW5lcmF0b3JzXy5i
ZWdpbigpOwotICAgICAgIGl0ZXIgIT0gbmVzdGVkX21lc3NhZ2VfZ2VuZXJhdG9yc18uZW5kKCk7
ICsraXRlcikgewotICAgICgqaXRlciktPkdlbmVyYXRlTWVzc2FnZUhlYWRlcihwcmludGVyKTsK
LSAgfQotfQotCi12b2lkIE1lc3NhZ2VHZW5lcmF0b3I6OkdlbmVyYXRlU291cmNlKGlvOjpQcmlu
dGVyKiBwcmludGVyKSB7Ci0gIGlmICghSXNNYXBFbnRyeU1lc3NhZ2UoZGVzY3JpcHRvcl8pKSB7
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIjcHJhZ21hIG1hcmsgLSAkY2xhc3NuYW1l
JFxuIgotICAgICAgICAiXG4iLAotICAgICAgICAiY2xhc3NuYW1lIiwgY2xhc3NfbmFtZV8pOwot
Ci0gICAgcHJpbnRlci0+UHJpbnQoIkBpbXBsZW1lbnRhdGlvbiAkY2xhc3NuYW1lJFxuXG4iLAot
ICAgICAgICAgICAgICAgICAgICJjbGFzc25hbWUiLCBjbGFzc19uYW1lXyk7Ci0KLSAgICBmb3Ig
KHZlY3RvcjxPbmVvZkdlbmVyYXRvcio+OjppdGVyYXRvciBpdGVyID0gb25lb2ZfZ2VuZXJhdG9y
c18uYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gb25lb2ZfZ2VuZXJhdG9yc18uZW5kKCk7ICsr
aXRlcikgewotICAgICAgKCppdGVyKS0+R2VuZXJhdGVQcm9wZXJ0eUltcGxlbWVudGF0aW9uKHBy
aW50ZXIpOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZp
ZWxkX2NvdW50KCk7IGkrKykgewotICAgICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGRlc2NyaXB0
b3JfLT5maWVsZChpKSkKLSAgICAgICAgICAuR2VuZXJhdGVQcm9wZXJ0eUltcGxlbWVudGF0aW9u
KHByaW50ZXIpOwotICAgIH0KLQotICAgIHNjb3BlZF9hcnJheTxjb25zdCBGaWVsZERlc2NyaXB0
b3IqPiBzb3J0ZWRfZmllbGRzKAotICAgICAgICBTb3J0RmllbGRzQnlOdW1iZXIoZGVzY3JpcHRv
cl8pKTsKLSAgICBzY29wZWRfYXJyYXk8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gc2l6ZV9vcmRl
cl9maWVsZHMoCi0gICAgICAgIFNvcnRGaWVsZHNCeVN0b3JhZ2VTaXplKGRlc2NyaXB0b3JfKSk7
Ci0KLSAgICB2ZWN0b3I8Y29uc3QgRGVzY3JpcHRvcjo6RXh0ZW5zaW9uUmFuZ2UqPiBzb3J0ZWRf
ZXh0ZW5zaW9uczsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5leHRlbnNp
b25fcmFuZ2VfY291bnQoKTsgKytpKSB7Ci0gICAgICBzb3J0ZWRfZXh0ZW5zaW9ucy5wdXNoX2Jh
Y2soZGVzY3JpcHRvcl8tPmV4dGVuc2lvbl9yYW5nZShpKSk7Ci0gICAgfQotCi0gICAgc29ydChz
b3J0ZWRfZXh0ZW5zaW9ucy5iZWdpbigpLCBzb3J0ZWRfZXh0ZW5zaW9ucy5lbmQoKSwKLSAgICAg
ICAgIEV4dGVuc2lvblJhbmdlT3JkZXJpbmcoKSk7Ci0KLSAgICAvLyBBc3NpZ24gaGFzIGJpdHM6
Ci0gICAgLy8gMS4gRmllbGRHZW5lcmF0b3JNYXA6OkNhbGN1bGF0ZUhhc0JpdHMoKSBsb29wcyB0
aHJvdWdoIHRoZSBmaWVsZHMgc2VlaW5nCi0gICAgLy8gICAgd2hvIG5lZWRzIGhhcyBiaXRzIGFu
ZCBhc3NpZ25pbmcgdGhlbS4KLSAgICAvLyAyLiBGaWVsZEdlbmVyYXRvcjo6U2V0T25lb2ZJbmRl
eEJhc2UoKSBvdmVycmlkZXMgaGFzX2JpdCB3aXRoIGEgbmVnYXRpdmUKLSAgICAvLyAgICBpbmRl
eCB0aGF0IGdyb3VwcyBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBvbmVvZi4KLSAgICBzaXplX3Qg
bnVtX2hhc19iaXRzID0gZmllbGRfZ2VuZXJhdG9yc18uQ2FsY3VsYXRlSGFzQml0cygpOwotICAg
IHNpemVfdCBzaXplb2ZfaGFzX3N0b3JhZ2UgPSAobnVtX2hhc19iaXRzICsgMzEpIC8gMzI7Ci0g
ICAgaWYgKHNpemVvZl9oYXNfc3RvcmFnZSA9PSAwKSB7Ci0gICAgICAvLyBJbiB0aGUgY2FzZSB3
aGVyZSBubyBmaWVsZCBuZWVkcyBoYXMgYml0cywgZG9uJ3QgbGV0IHRoZSBfaGFzX3N0b3JhZ2Vf
Ci0gICAgICAvLyBlbmQgdXAgYXMgemVybyBsZW5ndGggKHplcm8gbGVuZ3RoIGFycmF5cyBhcmUg
c29ydCBvZiBhIGdyZXkgYXJlYQotICAgICAgLy8gc2luY2UgaXQgaGFzIHRvIGJlIGF0IHRoZSBz
dGFydCBvZiB0aGUgc3RydWN0KS4gVGhpcyBhbHNvIGVuc3VyZXMgYQotICAgICAgLy8gZmllbGQg
d2l0aCBvbmx5IG9uZW9mcyBrZWVwcyB0aGUgcmVxdWlyZWQgbmVnYXRpdmUgaW5kaWNlcyB0aGV5
IG5lZWQuCi0gICAgICBzaXplb2ZfaGFzX3N0b3JhZ2UgPSAxOwotICAgIH0KLSAgICAvLyBUZWxs
IGFsbCB0aGUgZmllbGRzIHRoZSBvbmVvZiBiYXNlLgotICAgIGZvciAodmVjdG9yPE9uZW9mR2Vu
ZXJhdG9yKj46Oml0ZXJhdG9yIGl0ZXIgPSBvbmVvZl9nZW5lcmF0b3JzXy5iZWdpbigpOwotICAg
ICAgICAgaXRlciAhPSBvbmVvZl9nZW5lcmF0b3JzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAo
Kml0ZXIpLT5TZXRPbmVvZkluZGV4QmFzZShzaXplb2ZfaGFzX3N0b3JhZ2UpOwotICAgIH0KLSAg
ICBmaWVsZF9nZW5lcmF0b3JzXy5TZXRPbmVvZkluZGV4QmFzZShzaXplb2ZfaGFzX3N0b3JhZ2Up
OwotICAgIC8vIHNpemVvZl9oYXNfc3RvcmFnZSBuZWVkcyBlbm91Z2ggYml0cyBmb3IgdGhlIHNp
bmdsZSBmaWVsZHMgdGhhdCBhcmVuJ3QgaW4KLSAgICAvLyBhbnkgb25lb2YsIGFuZCB0aGVuIG9u
ZSBpbnQzMiBmb3IgZWFjaCBvbmVvZiAodG8gc3RvcmUgdGhlIGZpZWxkIG51bWJlcikuCi0gICAg
c2l6ZW9mX2hhc19zdG9yYWdlICs9IGRlc2NyaXB0b3JfLT5vbmVvZl9kZWNsX2NvdW50KCk7Ci0K
LSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIlxuIgotICAgICAgICAidHlwZWRlZiBzdHJ1
Y3QgJGNsYXNzbmFtZSRfX3N0b3JhZ2VfIHtcbiIKLSAgICAgICAgIiAgdWludDMyX3QgX2hhc19z
dG9yYWdlX1skc2l6ZW9mX2hhc19zdG9yYWdlJF07XG4iLAotICAgICAgICAiY2xhc3NuYW1lIiwg
Y2xhc3NfbmFtZV8sCi0gICAgICAgICJzaXplb2ZfaGFzX3N0b3JhZ2UiLCBTaW1wbGVJdG9hKHNp
emVvZl9oYXNfc3RvcmFnZSkpOwotICAgIHByaW50ZXItPkluZGVudCgpOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgICBm
aWVsZF9nZW5lcmF0b3JzXy5nZXQoc2l6ZV9vcmRlcl9maWVsZHNbaV0pCi0gICAgICAgICAgLkdl
bmVyYXRlRmllbGRTdG9yYWdlRGVjbGFyYXRpb24ocHJpbnRlcik7Ci0gICAgfQotICAgIHByaW50
ZXItPk91dGRlbnQoKTsKLQotICAgIHByaW50ZXItPlByaW50KCJ9ICRjbGFzc25hbWUkX19zdG9y
YWdlXztcblxuIiwgImNsYXNzbmFtZSIsIGNsYXNzX25hbWVfKTsKLQotCi0gICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAgICIvLyBUaGlzIG1ldGhvZCBpcyB0aHJlYWRzYWZlIGJlY2F1c2UgaXQg
aXMgaW5pdGlhbGx5IGNhbGxlZFxuIgotICAgICAgICAiLy8gaW4gK2luaXRpYWxpemUgZm9yIGVh
Y2ggc3ViY2xhc3MuXG4iCi0gICAgICAgICIrIChHUEJEZXNjcmlwdG9yICopZGVzY3JpcHRvciB7
XG4iCi0gICAgICAgICIgIHN0YXRpYyBHUEJEZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gbmlsO1xu
IgotICAgICAgICAiICBpZiAoIWRlc2NyaXB0b3IpIHtcbiIpOwotCi0gICAgVGV4dEZvcm1hdERl
Y29kZURhdGEgdGV4dF9mb3JtYXRfZGVjb2RlX2RhdGE7Ci0gICAgYm9vbCBoYXNfZmllbGRzID0g
ZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCkgPiAwOwotICAgIGJvb2wgbmVlZF9kZWZhdWx0cyA9
IGZpZWxkX2dlbmVyYXRvcnNfLkRvZXNBbnlGaWVsZEhhdmVOb25aZXJvRGVmYXVsdCgpOwotICAg
IHN0cmluZyBmaWVsZF9kZXNjcmlwdGlvbl90eXBlOwotICAgIGlmIChuZWVkX2RlZmF1bHRzKSB7
Ci0gICAgICBmaWVsZF9kZXNjcmlwdGlvbl90eXBlID0gIkdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0
aW9uV2l0aERlZmF1bHQiOwotICAgIH0gZWxzZSB7Ci0gICAgICBmaWVsZF9kZXNjcmlwdGlvbl90
eXBlID0gIkdQQk1lc3NhZ2VGaWVsZERlc2NyaXB0aW9uIjsKLSAgICB9Ci0gICAgaWYgKGhhc19m
aWVsZHMpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICIgICAgc3RhdGljICRm
aWVsZF9kZXNjcmlwdGlvbl90eXBlJCBmaWVsZHNbXSA9IHtcbiIsCi0gICAgICAgICAgImZpZWxk
X2Rlc2NyaXB0aW9uX3R5cGUiLCBmaWVsZF9kZXNjcmlwdGlvbl90eXBlKTsKLSAgICAgIHByaW50
ZXItPkluZGVudCgpOwotICAgICAgcHJpbnRlci0+SW5kZW50KCk7Ci0gICAgICBwcmludGVyLT5J
bmRlbnQoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2Nv
dW50KCk7ICsraSkgewotICAgICAgICBjb25zdCBGaWVsZEdlbmVyYXRvciYgZmllbGRfZ2VuZXJh
dG9yID0KLSAgICAgICAgICAgIGZpZWxkX2dlbmVyYXRvcnNfLmdldChzb3J0ZWRfZmllbGRzW2ld
KTsKLSAgICAgICAgZmllbGRfZ2VuZXJhdG9yLkdlbmVyYXRlRmllbGREZXNjcmlwdGlvbihwcmlu
dGVyLCBuZWVkX2RlZmF1bHRzKTsKLSAgICAgICAgaWYgKGZpZWxkX2dlbmVyYXRvci5uZWVkc190
ZXh0Zm9ybWF0X25hbWVfc3VwcG9ydCgpKSB7Ci0gICAgICAgICAgdGV4dF9mb3JtYXRfZGVjb2Rl
X2RhdGEuQWRkU3RyaW5nKHNvcnRlZF9maWVsZHNbaV0tPm51bWJlcigpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9nZW5lcmF0b3IuZ2VuZXJhdGVk
X29iamNfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9nZW5lcmF0b3IucmF3X2ZpZWxkX25hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAg
ICAgIHByaW50ZXItPk91dGRlbnQoKTsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAg
ICIgICAgfTtcbiIpOwotICAgIH0KLQotICAgIG1hcDxzdHJpbmcsIHN0cmluZz4gdmFyczsKLSAg
ICB2YXJzWyJjbGFzc25hbWUiXSA9IGNsYXNzX25hbWVfOwotICAgIHZhcnNbInJvb3RjbGFzc25h
bWUiXSA9IHJvb3RfY2xhc3NuYW1lXzsKLSAgICB2YXJzWyJmaWVsZHMiXSA9IGhhc19maWVsZHMg
PyAiZmllbGRzIiA6ICJOVUxMIjsKLSAgICBpZiAoaGFzX2ZpZWxkcykgewotICAgICAgdmFyc1si
ZmllbGRzX2NvdW50Il0gPQotICAgICAgICAgICIodWludDMyX3QpKHNpemVvZihmaWVsZHMpIC8g
c2l6ZW9mKCIgKyBmaWVsZF9kZXNjcmlwdGlvbl90eXBlICsgIikpIjsKLSAgICB9IGVsc2Ugewot
ICAgICAgdmFyc1siZmllbGRzX2NvdW50Il0gPSAiMCI7Ci0gICAgfQotCi0gICAgc3RkOjp2ZWN0
b3I8c3RyaW5nPiBpbml0X2ZsYWdzOwotICAgIGlmIChuZWVkX2RlZmF1bHRzKSB7Ci0gICAgICBp
bml0X2ZsYWdzLnB1c2hfYmFjaygiR1BCRGVzY3JpcHRvckluaXRpYWxpemF0aW9uRmxhZ19GaWVs
ZHNXaXRoRGVmYXVsdCIpOwotICAgIH0KLSAgICBpZiAoZGVzY3JpcHRvcl8tPm9wdGlvbnMoKS5t
ZXNzYWdlX3NldF93aXJlX2Zvcm1hdCgpKSB7Ci0gICAgICBpbml0X2ZsYWdzLnB1c2hfYmFjaygi
R1BCRGVzY3JpcHRvckluaXRpYWxpemF0aW9uRmxhZ19XaXJlRm9ybWF0Iik7Ci0gICAgfQotICAg
IHZhcnNbImluaXRfZmxhZ3MiXSA9IEJ1aWxkRmxhZ3NTdHJpbmcoaW5pdF9mbGFncyk7Ci0KLSAg
ICBwcmludGVyLT5QcmludCgKLSAgICAgICAgdmFycywKLSAgICAgICAgIiAgICBHUEJEZXNjcmlw
dG9yICpsb2NhbERlc2NyaXB0b3IgPVxuIgotICAgICAgICAiICAgICAgICBbR1BCRGVzY3JpcHRv
ciBhbGxvY0Rlc2NyaXB0b3JGb3JDbGFzczpbJGNsYXNzbmFtZSQgY2xhc3NdXG4iCi0gICAgICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdENsYXNzOlskcm9vdGNs
YXNzbmFtZSQgY2xhc3NdXG4iCi0gICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaWxlOiRyb290Y2xhc3NuYW1lJF9GaWxlRGVzY3JpcHRvcigpXG4iCi0g
ICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzOiRm
aWVsZHMkXG4iCi0gICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWVsZENvdW50OiRmaWVsZHNfY291bnQkXG4iCi0gICAgICAgICIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplOnNpemVvZigkY2xhc3NuYW1lJF9fc3RvcmFnZV8p
XG4iCi0gICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
YWdzOiRpbml0X2ZsYWdzJF07XG4iKTsKLSAgICBpZiAob25lb2ZfZ2VuZXJhdG9yc18uc2l6ZSgp
ICE9IDApIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICIgICAgc3RhdGljIGNv
bnN0IGNoYXIgKm9uZW9mc1tdID0ge1xuIik7Ci0gICAgICBmb3IgKHZlY3RvcjxPbmVvZkdlbmVy
YXRvcio+OjppdGVyYXRvciBpdGVyID0gb25lb2ZfZ2VuZXJhdG9yc18uYmVnaW4oKTsKLSAgICAg
ICAgICAgaXRlciAhPSBvbmVvZl9nZW5lcmF0b3JzXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICAgICAgIiAgICAgIFwiJG5hbWUkXCIsXG4iLAotICAg
ICAgICAgICAgIm5hbWUiLCAoKml0ZXIpLT5EZXNjcmlwdG9yTmFtZSgpKTsKLSAgICAgIH0KLSAg
ICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAgICIgICAgfTtcbiIKLSAgICAgICAgICAiICAg
IFtsb2NhbERlc2NyaXB0b3Igc2V0dXBPbmVvZnM6b25lb2ZzXG4iCi0gICAgICAgICAgIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50Oih1aW50MzJfdCkoc2l6ZW9mKG9uZW9mcykgLyBz
aXplb2YoY2hhciopKVxuIgotICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgZmlyc3RIYXNJ
bmRleDokZmlyc3RfaGFzX2luZGV4JF07XG4iLAotICAgICAgICAgICJmaXJzdF9oYXNfaW5kZXgi
LCBvbmVvZl9nZW5lcmF0b3JzX1swXS0+SGFzSW5kZXhBc1N0cmluZygpKTsKLSAgICB9Ci0gICAg
aWYgKHRleHRfZm9ybWF0X2RlY29kZV9kYXRhLm51bV9lbnRyaWVzKCkgIT0gMCkgewotICAgICAg
Y29uc3Qgc3RyaW5nIHRleHRfZm9ybWF0X2RhdGFfc3RyKHRleHRfZm9ybWF0X2RlY29kZV9kYXRh
LkRhdGEoKSk7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgICAiI2lmICFHUEJPQkpD
X1NLSVBfTUVTU0FHRV9URVhURk9STUFUX0VYVFJBU1xuIgotICAgICAgICAgICIgICAgc3RhdGlj
IGNvbnN0IGNoYXIgKmV4dHJhVGV4dEZvcm1hdEluZm8gPSIpOwotICAgICAgc3RhdGljIGNvbnN0
IGludCBrQnl0ZXNQZXJMaW5lID0gNDA7ICAvLyBhbGxvdyBmb3IgZXNjYXBpbmcKLSAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdGV4dF9mb3JtYXRfZGF0YV9zdHIuc2l6ZSgpOyBpICs9IGtCeXRl
c1BlckxpbmUpIHsKLSAgICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgICAiXG4gICAg
ICAgIFwiJGRhdGEkXCIiLAotICAgICAgICAgICAgImRhdGEiLCBFc2NhcGVUcmlncmFwaHMoCi0g
ICAgICAgICAgICAgICAgQ0VzY2FwZSh0ZXh0X2Zvcm1hdF9kYXRhX3N0ci5zdWJzdHIoaSwga0J5
dGVzUGVyTGluZSkpKSk7Ci0gICAgICB9Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAg
ICAiO1xuIgotICAgICAgICAgICIgICAgW2xvY2FsRGVzY3JpcHRvciBzZXR1cEV4dHJhVGV4dElu
Zm86ZXh0cmFUZXh0Rm9ybWF0SW5mb107XG4iCi0gICAgICAgICAgIiNlbmRpZiAgLy8gIUdQQk9C
SkNfU0tJUF9NRVNTQUdFX1RFWFRGT1JNQVRfRVhUUkFTXG4iKTsKLSAgICB9Ci0gICAgaWYgKHNv
cnRlZF9leHRlbnNpb25zLnNpemUoKSAhPSAwKSB7Ci0gICAgICBwcmludGVyLT5QcmludCgKLSAg
ICAgICAgICAiICAgIHN0YXRpYyBjb25zdCBHUEJFeHRlbnNpb25SYW5nZSByYW5nZXNbXSA9IHtc
biIpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3J0ZWRfZXh0ZW5zaW9ucy5zaXplKCk7
IGkrKykgewotICAgICAgICBwcmludGVyLT5QcmludCgiICAgICAgeyAuc3RhcnQgPSAkc3RhcnQk
LCAuZW5kID0gJGVuZCQgfSxcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICJzdGFydCIsIFNp
bXBsZUl0b2Eoc29ydGVkX2V4dGVuc2lvbnNbaV0tPnN0YXJ0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgImVuZCIsIFNpbXBsZUl0b2Eoc29ydGVkX2V4dGVuc2lvbnNbaV0tPmVuZCkpOwotICAg
ICAgfQotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICAgIiAgICB9O1xuIgotICAgICAg
ICAgICIgICAgW2xvY2FsRGVzY3JpcHRvciBzZXR1cEV4dGVuc2lvblJhbmdlczpyYW5nZXNcbiIK
LSAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6KHVp
bnQzMl90KShzaXplb2YocmFuZ2VzKSAvIHNpemVvZihHUEJFeHRlbnNpb25SYW5nZSkpXTtcbiIp
OwotICAgIH0KLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgIiAgICBOU0Fzc2VydChkZXNj
cmlwdG9yID09IG5pbCwgQFwiU3RhcnR1cCByZWN1cnNlZCFcIik7XG4iCi0gICAgICAgICIgICAg
ZGVzY3JpcHRvciA9IGxvY2FsRGVzY3JpcHRvcjtcbiIKLSAgICAgICAgIiAgfVxuIgotICAgICAg
ICAiICByZXR1cm4gZGVzY3JpcHRvcjtcbiIKLSAgICAgICAgIn1cblxuIgotICAgICAgICAiQGVu
ZFxuXG4iKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2Nv
dW50KCk7IGkrKykgewotICAgICAgZmllbGRfZ2VuZXJhdG9yc18uZ2V0KGRlc2NyaXB0b3JfLT5m
aWVsZChpKSkKLSAgICAgICAgICAuR2VuZXJhdGVDRnVuY3Rpb25JbXBsZW1lbnRhdGlvbnMocHJp
bnRlcik7Ci0gICAgfQotCi0gICAgZm9yICh2ZWN0b3I8T25lb2ZHZW5lcmF0b3IqPjo6aXRlcmF0
b3IgaXRlciA9IG9uZW9mX2dlbmVyYXRvcnNfLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IG9u
ZW9mX2dlbmVyYXRvcnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICgqaXRlciktPkdlbmVyYXRl
Q2xlYXJGdW5jdGlvbkltcGxlbWVudGF0aW9uKHByaW50ZXIpOwotICAgIH0KLSAgfQotCi0gIGZv
ciAodmVjdG9yPEVudW1HZW5lcmF0b3IqPjo6aXRlcmF0b3IgaXRlciA9IGVudW1fZ2VuZXJhdG9y
c18uYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IGVudW1fZ2VuZXJhdG9yc18uZW5kKCk7ICsraXRl
cikgewotICAgICgqaXRlciktPkdlbmVyYXRlU291cmNlKHByaW50ZXIpOwotICB9Ci0KLSAgZm9y
ICh2ZWN0b3I8TWVzc2FnZUdlbmVyYXRvcio+OjppdGVyYXRvciBpdGVyID0KLSAgICAgICAgICAg
bmVzdGVkX21lc3NhZ2VfZ2VuZXJhdG9yc18uYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IG5lc3Rl
ZF9tZXNzYWdlX2dlbmVyYXRvcnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAoKml0ZXIpLT5HZW5l
cmF0ZVNvdXJjZShwcmludGVyKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2Ugb2JqZWN0aXZl
YwotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWVzc2FnZS5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19tZXNzYWdlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg1NjVlNzZmZjZlNGEyNjhlOGFiMTljMWI0YjRiODEyOTU5NDFhMzku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19tZXNzYWdlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfT0JKRUNUSVZFQ19NRVNTQUdF
X0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfT0JKRUNUSVZFQ19NRVNTQUdF
X0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDx2ZWN0
b3I+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0
aXZlY19maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3Rp
dmVjL29iamVjdGl2ZWNfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfb25lb2YuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLQotbmFtZXNwYWNlIGlvIHsKLWNsYXNzIFByaW50ZXI7ICAvLyBwcmludGVyLmgK
LX0gIC8vIG5hbWVzcGFjZSBpbwotCi1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNwYWNlIG9i
amVjdGl2ZWMgewotCi1jbGFzcyBFeHRlbnNpb25HZW5lcmF0b3I7Ci1jbGFzcyBFbnVtR2VuZXJh
dG9yOwotCi1jbGFzcyBNZXNzYWdlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIE1lc3NhZ2VHZW5l
cmF0b3IoY29uc3Qgc3RyaW5nJiByb290X2NsYXNzbmFtZSwKLSAgICAgICAgICAgICAgICAgICBj
b25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IE9w
dGlvbnMmIG9wdGlvbnMpOwotICB+TWVzc2FnZUdlbmVyYXRvcigpOwotCi0gIHZvaWQgR2VuZXJh
dGVTdGF0aWNWYXJpYWJsZXNJbml0aWFsaXphdGlvbihpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0g
IHZvaWQgR2VuZXJhdGVFbnVtSGVhZGVyKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBH
ZW5lcmF0ZU1lc3NhZ2VIZWFkZXIoaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVy
YXRlU291cmNlKGlvOjpQcmludGVyKiBwcmludGVyKTsKLSAgdm9pZCBHZW5lcmF0ZUV4dGVuc2lv
blJlZ2lzdHJhdGlvblNvdXJjZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgRGV0ZXJt
aW5lRm9yd2FyZERlY2xhcmF0aW9ucyhzZXQ8c3RyaW5nPiogZndkX2RlY2xzKTsKLQotIHByaXZh
dGU6Ci0gIHZvaWQgR2VuZXJhdGVQYXJzZUZyb21NZXRob2RzSGVhZGVyKGlvOjpQcmludGVyKiBw
cmludGVyKTsKLQotICB2b2lkIEdlbmVyYXRlU2VyaWFsaXplT25lRmllbGRTb3VyY2UoaW86OlBy
aW50ZXIqIHByaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKTsKLSAgdm9pZCBHZW5lcmF0ZVNlcmlhbGl6ZU9u
ZUV4dGVuc2lvblJhbmdlU291cmNlKAotICAgICAgaW86OlByaW50ZXIqIHByaW50ZXIsIGNvbnN0
IERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlKiByYW5nZSk7Ci0KLSAgdm9pZCBHZW5lcmF0ZU1l
c3NhZ2VEZXNjcmlwdGlvblNvdXJjZShpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2Vu
ZXJhdGVEZXNjcmlwdGlvbk9uZUZpZWxkU291cmNlKGlvOjpQcmludGVyKiBwcmludGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkKTsKLQotICBjb25zdCBzdHJpbmcgcm9vdF9jbGFzc25hbWVfOwotICBjb25zdCBE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAgRmllbGRHZW5lcmF0b3JNYXAgZmllbGRfZ2VuZXJh
dG9yc187Ci0gIGNvbnN0IHN0cmluZyBjbGFzc19uYW1lXzsKLSAgdmVjdG9yPEV4dGVuc2lvbkdl
bmVyYXRvcio+IGV4dGVuc2lvbl9nZW5lcmF0b3JzXzsKLSAgdmVjdG9yPEVudW1HZW5lcmF0b3Iq
PiBlbnVtX2dlbmVyYXRvcnNfOwotICB2ZWN0b3I8TWVzc2FnZUdlbmVyYXRvcio+IG5lc3RlZF9t
ZXNzYWdlX2dlbmVyYXRvcnNfOwotICB2ZWN0b3I8T25lb2ZHZW5lcmF0b3IqPiBvbmVvZl9nZW5l
cmF0b3JzXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTWVzc2FnZUdl
bmVyYXRvcik7Ci19OwotfSAgLy8gbmFtZXNwYWNlIG9iamVjdGl2ZWMKLX0gIC8vIG5hbWVzcGFj
ZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9PQkpFQ1RJVkVDX01FU1NB
R0VfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZl
Yy9vYmplY3RpdmVjX21lc3NhZ2VfZmllbGQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGls
ZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21lc3NhZ2VfZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ2Y2NkNmQxZTdiNjI5NzBmZjUzYjQ0NDIyM2U3YzRkMmNmN2RmMjQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19tZXNzYWdlX2ZpZWxkLmNj
CisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWVzc2Fn
ZV9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVj
L29iamVjdGl2ZWNfaGVscGVycy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmlu
dGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLW5hbWVzcGFjZSBv
YmplY3RpdmVjIHsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBTZXRNZXNzYWdlVmFyaWFibGVzKGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXA8c3RyaW5nLCBzdHJpbmc+KiB2YXJpYWJsZXMpIHsKLSAgY29uc3Qgc3RyaW5nJiBtZXNz
YWdlX3R5cGUgPSBDbGFzc05hbWUoZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCkpOwotICAoKnZh
cmlhYmxlcylbInR5cGUiXSA9IG1lc3NhZ2VfdHlwZTsKLSAgKCp2YXJpYWJsZXMpWyJjb250YWlu
aW5nX2NsYXNzIl0gPSBDbGFzc05hbWUoZGVzY3JpcHRvci0+Y29udGFpbmluZ190eXBlKCkpOwot
ICAoKnZhcmlhYmxlcylbInN0b3JhZ2VfdHlwZSJdID0gbWVzc2FnZV90eXBlOwotICAoKnZhcmlh
YmxlcylbImdyb3VwX29yX21lc3NhZ2UiXSA9Ci0gICAgICAoZGVzY3JpcHRvci0+dHlwZSgpID09
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCkgPyAiR3JvdXAiIDogIk1lc3NhZ2UiOwotCi0g
ICgqdmFyaWFibGVzKVsiZGF0YVR5cGVTcGVjaWZpY192YWx1ZSJdID0gIkdQQlN0cmluZ2lmeVN5
bWJvbCgiICsgbWVzc2FnZV90eXBlICsgIikiOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotTWVz
c2FnZUZpZWxkR2VuZXJhdG9yOjpNZXNzYWdlRmllbGRHZW5lcmF0b3IoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IE9iakNPYmpGaWVsZEdlbmVy
YXRvcihkZXNjcmlwdG9yLCBvcHRpb25zKSB7Ci0gIFNldE1lc3NhZ2VWYXJpYWJsZXMoZGVzY3Jp
cHRvciwgJnZhcmlhYmxlc18pOwotfQotCi1NZXNzYWdlRmllbGRHZW5lcmF0b3I6On5NZXNzYWdl
RmllbGRHZW5lcmF0b3IoKSB7fQotCi12b2lkIE1lc3NhZ2VGaWVsZEdlbmVyYXRvcjo6RGV0ZXJt
aW5lRm9yd2FyZERlY2xhcmF0aW9ucygKLSAgICBzZXQ8c3RyaW5nPiogZndkX2RlY2xzKSBjb25z
dCB7Ci0gIE9iakNPYmpGaWVsZEdlbmVyYXRvcjo6RGV0ZXJtaW5lRm9yd2FyZERlY2xhcmF0aW9u
cyhmd2RfZGVjbHMpOwotICAvLyBDbGFzcyBuYW1lIGlzIGFscmVhZHkgaW4gInN0b3JhZ2VfdHlw
ZSIuCi0gIGZ3ZF9kZWNscy0+aW5zZXJ0KCJAY2xhc3MgIiArIHZhcmlhYmxlKCJzdG9yYWdlX3R5
cGUiKSk7Ci19Ci0KLWJvb2wgTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjpXYW50c0hhc1Byb3BlcnR5
KHZvaWQpIGNvbnN0IHsKLSAgaWYgKGRlc2NyaXB0b3JfLT5jb250YWluaW5nX29uZW9mKCkgIT0g
TlVMTCkgewotICAgIC8vIElmIGluIGEgb25lb2YsIGl0IHVzZXMgdGhlIG9uZW9mY2FzZSBpbnN0
ZWFkIG9mIGEgaGFzIGJpdC4KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLy8gSW4gYm90aCBw
cm90bzIgJiBwcm90bzMsIG1lc3NhZ2UgZmllbGRzIGhhdmUgYSBoYXMqIHByb3BlcnR5IHRvIHRl
bGwKLSAgLy8gd2hlbiBpdCBpcyBhIG5vbiBkZWZhdWx0IHZhbHVlLgotICByZXR1cm4gdHJ1ZTsK
LX0KLQotUmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0b3I6OlJlcGVhdGVkTWVzc2FnZUZpZWxk
R2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwgY29uc3Qg
T3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IFJlcGVhdGVkRmllbGRHZW5lcmF0b3IoZGVzY3JpcHRv
ciwgb3B0aW9ucykgewotICBTZXRNZXNzYWdlVmFyaWFibGVzKGRlc2NyaXB0b3IsICZ2YXJpYWJs
ZXNfKTsKLSAgdmFyaWFibGVzX1siYXJyYXlfc3RvcmFnZV90eXBlIl0gPSAiTlNNdXRhYmxlQXJy
YXkiOwotICB2YXJpYWJsZXNfWyJhcnJheV9wcm9wZXJ0eV90eXBlIl0gPQotICAgICAgIk5TTXV0
YWJsZUFycmF5PCIgKyB2YXJpYWJsZXNfWyJzdG9yYWdlX3R5cGUiXSArICIqPiI7Ci19Ci0KLVJl
cGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjp+UmVwZWF0ZWRNZXNzYWdlRmllbGRHZW5lcmF0
b3IoKSB7fQotCi12b2lkIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yOjpEZXRlcm1pbmVG
b3J3YXJkRGVjbGFyYXRpb25zKAotICAgIHNldDxzdHJpbmc+KiBmd2RfZGVjbHMpIGNvbnN0IHsK
LSAgUmVwZWF0ZWRGaWVsZEdlbmVyYXRvcjo6RGV0ZXJtaW5lRm9yd2FyZERlY2xhcmF0aW9ucyhm
d2RfZGVjbHMpOwotICAvLyBDbGFzcyBuYW1lIGlzIGFscmVhZHkgaW4gInN0b3JhZ2VfdHlwZSIu
Ci0gIGZ3ZF9kZWNscy0+aW5zZXJ0KCJAY2xhc3MgIiArIHZhcmlhYmxlKCJzdG9yYWdlX3R5cGUi
KSk7Ci19Ci0KLQotfSAgLy8gbmFtZXNwYWNlIG9iamVjdGl2ZWMKLX0gIC8vIG5hbWVzcGFjZSBj
b21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmpl
Y3RpdmVjX21lc3NhZ2VfZmllbGQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmpl
Y3RpdmVjL29iamVjdGl2ZWNfbWVzc2FnZV9maWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkMmRiYTE1MzM0NDJkNGRjZjY2YWU0NGZlMDA1M2NhY2RlODFkZmZiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWVzc2FnZV9maWVsZC5oCisrKyAvZGV2
L251bGwKQEAgLTEsODEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfTUVTU0FHRV9G
SUVMRF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfTUVT
U0FHRV9GSUVMRF9IX18KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWVs
ZC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3Bh
Y2UgY29tcGlsZXIgewotbmFtZXNwYWNlIG9iamVjdGl2ZWMgewotCi1jbGFzcyBNZXNzYWdlRmll
bGRHZW5lcmF0b3IgOiBwdWJsaWMgT2JqQ09iakZpZWxkR2VuZXJhdG9yIHsKLSAgZnJpZW5kIEZp
ZWxkR2VuZXJhdG9yKiBGaWVsZEdlbmVyYXRvcjo6TWFrZShjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotCi0gcHJvdGVjdGVkOgotICBNZXNzYWdlRmllbGRHZW5l
cmF0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0gIHZpcnR1YWwgfk1lc3NhZ2VGaWVs
ZEdlbmVyYXRvcigpOwotICB2aXJ0dWFsIGJvb2wgV2FudHNIYXNQcm9wZXJ0eSh2b2lkKSBjb25z
dDsKLQotIHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIERldGVybWluZUZvcndhcmREZWNsYXJhdGlv
bnMoc2V0PHN0cmluZz4qIGZ3ZF9kZWNscykgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBHT09HTEVf
RElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTWVzc2FnZUZpZWxkR2VuZXJhdG9yKTsKLX07Ci0K
LWNsYXNzIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yIDogcHVibGljIFJlcGVhdGVkRmll
bGRHZW5lcmF0b3IgewotICBmcmllbmQgRmllbGRHZW5lcmF0b3IqIEZpZWxkR2VuZXJhdG9yOjpN
YWtlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0KLSBwcm90
ZWN0ZWQ6Ci0gIFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJhdG9yKGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
T3B0aW9ucyYgb3B0aW9ucyk7Ci0gIHZpcnR1YWwgflJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJh
dG9yKCk7Ci0KLSBwdWJsaWM6Ci0gIHZpcnR1YWwgdm9pZCBEZXRlcm1pbmVGb3J3YXJkRGVjbGFy
YXRpb25zKHNldDxzdHJpbmc+KiBmd2RfZGVjbHMpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgR09P
R0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlcGVhdGVkTWVzc2FnZUZpZWxkR2VuZXJh
dG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBvYmplY3RpdmVjCi19ICAvLyBuYW1lc3BhY2Ug
Y29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2ds
ZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9PQkpFQ1RJVkVDX01FU1NB
R0VfRklFTERfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2Jq
ZWN0aXZlYy9vYmplY3RpdmVjX29uZW9mLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVy
L29iamVjdGl2ZWMvb2JqZWN0aXZlY19vbmVvZi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDRiYWZkN2YzYzJmZmU5YWJjYTBiNWYxMmJiZTM2YWFkZGUxMDc2Ny4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX29uZW9mLmNjCisrKyAvZGV2L251bGwKQEAg
LTEsMTM4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5j
bHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfb25lb2YuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2hlbHBlcnMuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2Ugb2JqZWN0aXZlYyB7
Ci0KLU9uZW9mR2VuZXJhdG9yOjpPbmVvZkdlbmVyYXRvcihjb25zdCBPbmVvZkRlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IpCi0gICAgOiBkZXNjcmlwdG9yXyhkZXNjcmlwdG9yKSB7Ci0gIHZhcmlhYmxl
c19bImVudW1fbmFtZSJdID0gT25lb2ZFbnVtTmFtZShkZXNjcmlwdG9yXyk7Ci0gIHZhcmlhYmxl
c19bIm5hbWUiXSA9IE9uZW9mTmFtZShkZXNjcmlwdG9yXyk7Ci0gIHZhcmlhYmxlc19bImNhcGl0
YWxpemVkX25hbWUiXSA9IE9uZW9mTmFtZUNhcGl0YWxpemVkKGRlc2NyaXB0b3JfKTsKLSAgdmFy
aWFibGVzX1sicmF3X2luZGV4Il0gPSBTaW1wbGVJdG9hKGRlc2NyaXB0b3JfLT5pbmRleCgpKTsK
LSAgY29uc3QgRGVzY3JpcHRvciogbXNnX2Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yXy0+Y29udGFp
bmluZ190eXBlKCk7Ci0gIHZhcmlhYmxlc19bIm93bmluZ19tZXNzYWdlX2NsYXNzIl0gPSBDbGFz
c05hbWUobXNnX2Rlc2NyaXB0b3IpOwotCi0gIHN0cmluZyBjb21tZW50czsKLSAgU291cmNlTG9j
YXRpb24gbG9jYXRpb247Ci0gIGlmIChkZXNjcmlwdG9yXy0+R2V0U291cmNlTG9jYXRpb24oJmxv
Y2F0aW9uKSkgewotICAgIGNvbW1lbnRzID0gQnVpbGRDb21tZW50c1N0cmluZyhsb2NhdGlvbik7
Ci0gIH0gZWxzZSB7Ci0gICAgY29tbWVudHMgPSAiIjsKLSAgfQotICB2YXJpYWJsZXNfWyJjb21t
ZW50cyJdID0gY29tbWVudHM7Ci19Ci0KLU9uZW9mR2VuZXJhdG9yOjp+T25lb2ZHZW5lcmF0b3Io
KSB7fQotCi12b2lkIE9uZW9mR2VuZXJhdG9yOjpTZXRPbmVvZkluZGV4QmFzZShpbnQgaW5kZXhf
YmFzZSkgewotICBpbnQgaW5kZXggPSBkZXNjcmlwdG9yXy0+aW5kZXgoKSArIGluZGV4X2Jhc2U7
Ci0gIC8vIEZsaXAgdGhlIHNpZ24gdG8gbWFyayBpdCBhcyBhIG9uZW9mLgotICB2YXJpYWJsZXNf
WyJpbmRleCJdID0gU2ltcGxlSXRvYSgtaW5kZXgpOwotfQotCi12b2lkIE9uZW9mR2VuZXJhdG9y
OjpHZW5lcmF0ZUNhc2VFbnVtKGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlBy
aW50KAotICAgICAgdmFyaWFibGVzXywKLSAgICAgICJ0eXBlZGVmIEdQQl9FTlVNKCRlbnVtX25h
bWUkKSB7XG4iKTsKLSAgcHJpbnRlci0+SW5kZW50KCk7Ci0gIHByaW50ZXItPlByaW50KAotICAg
ICAgdmFyaWFibGVzXywKLSAgICAgICIkZW51bV9uYW1lJF9HUEJVbnNldE9uZU9mQ2FzZSA9IDAs
XG4iKTsKLSAgc3RyaW5nIGVudW1fbmFtZSA9IHZhcmlhYmxlc19bImVudW1fbmFtZSJdOwotICBm
b3IgKGludCBqID0gMDsgaiA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBqKyspIHsKLSAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGopOwot
ICAgIHN0cmluZyBmaWVsZF9uYW1lID0gRmllbGROYW1lQ2FwaXRhbGl6ZWQoZmllbGQpOwotICAg
IHByaW50ZXItPlByaW50KAotICAgICAgICAiJGVudW1fbmFtZSRfJGZpZWxkX25hbWUkID0gJGZp
ZWxkX251bWJlciQsXG4iLAotICAgICAgICAiZW51bV9uYW1lIiwgZW51bV9uYW1lLAotICAgICAg
ICAiZmllbGRfbmFtZSIsIGZpZWxkX25hbWUsCi0gICAgICAgICJmaWVsZF9udW1iZXIiLCBTaW1w
bGVJdG9hKGZpZWxkLT5udW1iZXIoKSkpOwotICB9Ci0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAg
cHJpbnRlci0+UHJpbnQoCi0gICAgICAifTtcbiIKLSAgICAgICJcbiIpOwotfQotCi12b2lkIE9u
ZW9mR2VuZXJhdG9yOjpHZW5lcmF0ZVB1YmxpY0Nhc2VQcm9wZXJ0eURlY2xhcmF0aW9uKAotICAg
IGlvOjpQcmludGVyKiBwcmludGVyKSB7Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgdmFyaWFi
bGVzXywKLSAgICAgICIkY29tbWVudHMkIgotICAgICAgIkBwcm9wZXJ0eShub25hdG9taWMsIHJl
YWRvbmx5KSAkZW51bV9uYW1lJCAkbmFtZSRPbmVPZkNhc2U7XG4iCi0gICAgICAiXG4iKTsKLX0K
LQotdm9pZCBPbmVvZkdlbmVyYXRvcjo6R2VuZXJhdGVDbGVhckZ1bmN0aW9uRGVjbGFyYXRpb24o
aW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgICB2YXJpYWJs
ZXNfLAotICAgICAgIi8vLyBDbGVhcnMgd2hhdGV2ZXIgdmFsdWUgd2FzIHNldCBmb3IgdGhlIG9u
ZW9mICckbmFtZSQnLlxuIgotICAgICAgInZvaWQgJG93bmluZ19tZXNzYWdlX2NsYXNzJF9DbGVh
ciRjYXBpdGFsaXplZF9uYW1lJE9uZU9mQ2FzZSgkb3duaW5nX21lc3NhZ2VfY2xhc3MkICptZXNz
YWdlKTtcbiIpOwotfQotCi12b2lkIE9uZW9mR2VuZXJhdG9yOjpHZW5lcmF0ZVByb3BlcnR5SW1w
bGVtZW50YXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgICB2YXJpYWJsZXNfLAotICAgICAgIkBkeW5hbWljICRuYW1lJE9uZU9mQ2FzZTtcbiIpOwot
fQotCi12b2lkIE9uZW9mR2VuZXJhdG9yOjpHZW5lcmF0ZUNsZWFyRnVuY3Rpb25JbXBsZW1lbnRh
dGlvbihpbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICAgIHZh
cmlhYmxlc18sCi0gICAgICAidm9pZCAkb3duaW5nX21lc3NhZ2VfY2xhc3MkX0NsZWFyJGNhcGl0
YWxpemVkX25hbWUkT25lT2ZDYXNlKCRvd25pbmdfbWVzc2FnZV9jbGFzcyQgKm1lc3NhZ2UpIHtc
biIKLSAgICAgICIgIEdQQkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBbbWVzc2FnZSBkZXNjcmlw
dG9yXTtcbiIKLSAgICAgICIgIEdQQk9uZW9mRGVzY3JpcHRvciAqb25lb2YgPSBkZXNjcmlwdG9y
LT5vbmVvZnNfWyRyYXdfaW5kZXgkXTtcbiIKLSAgICAgICIgIEdQQk1heWJlQ2xlYXJPbmVvZiht
ZXNzYWdlLCBvbmVvZiwgJGluZGV4JCwgMCk7XG4iCi0gICAgICAifVxuIik7Ci19Ci0KLXN0cmlu
ZyBPbmVvZkdlbmVyYXRvcjo6RGVzY3JpcHRvck5hbWUodm9pZCkgY29uc3QgewotICByZXR1cm4g
dmFyaWFibGVzXy5maW5kKCJuYW1lIiktPnNlY29uZDsKLX0KLQotc3RyaW5nIE9uZW9mR2VuZXJh
dG9yOjpIYXNJbmRleEFzU3RyaW5nKHZvaWQpIGNvbnN0IHsKLSAgcmV0dXJuIHZhcmlhYmxlc18u
ZmluZCgiaW5kZXgiKS0+c2Vjb25kOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugb2JqZWN0aXZlYwot
fSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxl
ci9vYmplY3RpdmVjL29iamVjdGl2ZWNfb25lb2YuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfb25lb2YuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2Q5ZGY0ZGJmNDlhOWVmOTNlNzY5MGNmZTE1Mzg0M2ZkYzJhMjc2Yy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX29uZW9mLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw3OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lm
bmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfT0JKRUNUSVZFQ19PTkVPRl9IX18KLSNkZWZp
bmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfT05FT0ZfSF9fCi0KLSNpbmNs
dWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW8gewotY2xhc3MgUHJpbnRlcjsgIC8vIHBy
aW50ZXIuaAotfQotfQotCi1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVy
IHsKLW5hbWVzcGFjZSBvYmplY3RpdmVjIHsKLQotY2xhc3MgT25lb2ZHZW5lcmF0b3IgewotIHB1
YmxpYzoKLSAgZXhwbGljaXQgT25lb2ZHZW5lcmF0b3IoY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yKTsKLSAgfk9uZW9mR2VuZXJhdG9yKCk7Ci0KLSAgdm9pZCBTZXRPbmVvZkluZGV4
QmFzZShpbnQgaW5kZXhfYmFzZSk7Ci0KLSAgdm9pZCBHZW5lcmF0ZUNhc2VFbnVtKGlvOjpQcmlu
dGVyKiBwcmludGVyKTsKLQotICB2b2lkIEdlbmVyYXRlUHVibGljQ2FzZVByb3BlcnR5RGVjbGFy
YXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpOwotICB2b2lkIEdlbmVyYXRlQ2xlYXJGdW5jdGlv
bkRlY2xhcmF0aW9uKGlvOjpQcmludGVyKiBwcmludGVyKTsKLQotICB2b2lkIEdlbmVyYXRlUHJv
cGVydHlJbXBsZW1lbnRhdGlvbihpbzo6UHJpbnRlciogcHJpbnRlcik7Ci0gIHZvaWQgR2VuZXJh
dGVDbGVhckZ1bmN0aW9uSW1wbGVtZW50YXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpOwotCi0g
IHN0cmluZyBEZXNjcmlwdG9yTmFtZSh2b2lkKSBjb25zdDsKLSAgc3RyaW5nIEhhc0luZGV4QXNT
dHJpbmcodm9pZCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBjb25zdCBPbmVvZkRlc2NyaXB0b3Iq
IGRlc2NyaXB0b3JfOwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcmlhYmxlc187Ci0KLSAgR09P
R0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE9uZW9mR2VuZXJhdG9yKTsKLX07Ci0KLX0g
IC8vIG5hbWVzcGFjZSBvYmplY3RpdmVjCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8v
IG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBH
T09HTEVfUFJPVE9CVUZfQ09NUElMRVJfT0JKRUNUSVZFQ19PTkVPRl9IX18KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfcHJpbWl0
aXZlX2ZpZWxkLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2Jq
ZWN0aXZlY19wcmltaXRpdmVfZmllbGQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ0OTM1MGY0YjdmOWYzYTFiYWJkNmU1YWMzZmQyMTAyMTMwMjFhZDIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19wcmltaXRpdmVfZmllbGQuY2MKKysrIC9kZXYvbnVs
bApAQCAtMSwxOTIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19wcmltaXRpdmVfZmllbGQuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9m
b3JtYXRfbGl0ZV9pbmwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRp
bC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmg+Ci0KLW5h
bWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxl
ciB7Ci1uYW1lc3BhY2Ugb2JqZWN0aXZlYyB7Ci0KLXVzaW5nIGludGVybmFsOjpXaXJlRm9ybWF0
OwotdXNpbmcgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOwotCi1uYW1lc3BhY2UgewotCi1jb25z
dCBjaGFyKiBQcmltaXRpdmVUeXBlTmFtZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0
b3IpIHsKLSAgT2JqZWN0aXZlQ1R5cGUgdHlwZSA9IEdldE9iamVjdGl2ZUNUeXBlKGRlc2NyaXB0
b3IpOwotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX0lOVDMyOgot
ICAgICAgcmV0dXJuICJpbnQzMl90IjsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX1VJTlQzMjoK
LSAgICAgIHJldHVybiAidWludDMyX3QiOwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfSU5UNjQ6
Ci0gICAgICByZXR1cm4gImludDY0X3QiOwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfVUlOVDY0
OgotICAgICAgcmV0dXJuICJ1aW50NjRfdCI7Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9GTE9B
VDoKLSAgICAgIHJldHVybiAiZmxvYXQiOwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfRE9VQkxF
OgotICAgICAgcmV0dXJuICJkb3VibGUiOwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfQk9PTEVB
TjoKLSAgICAgIHJldHVybiAiQk9PTCI7Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9TVFJJTkc6
Ci0gICAgICByZXR1cm4gIk5TU3RyaW5nIjsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX0RBVEE6
Ci0gICAgICByZXR1cm4gIk5TRGF0YSI7Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9FTlVNOgot
ICAgICAgcmV0dXJuICJpbnQzMl90IjsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX01FU1NBR0U6
Ci0gICAgICByZXR1cm4gTlVMTDsgIC8vIE1lc3NhZ2VzIGdvIHRocm91Z2ggb2JqZWN0aXZlY19t
ZXNzYWdlX2ZpZWxkLmNjfGguCi0gIH0KLQotICAvLyBTb21lIGNvbXBpbGVycyByZXBvcnQgcmVh
Y2hpbmcgZW5kIG9mIGZ1bmN0aW9uIGV2ZW4gdGhvdWdoIGFsbCBjYXNlcyBvZgotICAvLyB0aGUg
ZW51bSBhcmUgaGFuZGVkIGluIHRoZSBzd2l0Y2guCi0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJD
YW4ndCBnZXQgaGVyZS4iOwotICByZXR1cm4gTlVMTDsKLX0KLQotY29uc3QgY2hhciogUHJpbWl0
aXZlQXJyYXlUeXBlTmFtZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAg
T2JqZWN0aXZlQ1R5cGUgdHlwZSA9IEdldE9iamVjdGl2ZUNUeXBlKGRlc2NyaXB0b3IpOwotICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX0lOVDMyOgotICAgICAgcmV0
dXJuICJJbnQzMiI7Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9VSU5UMzI6Ci0gICAgICByZXR1
cm4gIlVJbnQzMiI7Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9JTlQ2NDoKLSAgICAgIHJldHVy
biAiSW50NjQiOwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfVUlOVDY0OgotICAgICAgcmV0dXJu
ICJVSW50NjQiOwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfRkxPQVQ6Ci0gICAgICByZXR1cm4g
IkZsb2F0IjsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX0RPVUJMRToKLSAgICAgIHJldHVybiAi
RG91YmxlIjsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX0JPT0xFQU46Ci0gICAgICByZXR1cm4g
IkJvb2wiOwotICAgIGNhc2UgT0JKRUNUSVZFQ1RZUEVfU1RSSU5HOgotICAgICAgcmV0dXJuICIi
OyAgLy8gV2FudCBOU0FycmF5Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9EQVRBOgotICAgICAg
cmV0dXJuICIiOyAgLy8gV2FudCBOU0FycmF5Ci0gICAgY2FzZSBPQkpFQ1RJVkVDVFlQRV9FTlVN
OgotICAgICAgcmV0dXJuICJFbnVtIjsKLSAgICBjYXNlIE9CSkVDVElWRUNUWVBFX01FU1NBR0U6
Ci0gICAgICAvLyBXYW50IE5TQXJyYXkgKGJ1dCBnb2VzIHRocm91Z2ggb2JqZWN0aXZlY19tZXNz
YWdlX2ZpZWxkLmNjfGgpLgotICAgICAgcmV0dXJuICIiOwotICB9Ci0KLSAgLy8gU29tZSBjb21w
aWxlcnMgcmVwb3J0IHJlYWNoaW5nIGVuZCBvZiBmdW5jdGlvbiBldmVuIHRob3VnaCBhbGwgY2Fz
ZXMgb2YKLSAgLy8gdGhlIGVudW0gYXJlIGhhbmRlZCBpbiB0aGUgc3dpdGNoLgotICBHT09HTEVf
TE9HKEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXZv
aWQgU2V0UHJpbWl0aXZlVmFyaWFibGVzKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRv
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDxzdHJpbmcsIHN0cmluZz4qIHZhcmlh
YmxlcykgewotICBzdGQ6OnN0cmluZyBwcmltaXRpdmVfbmFtZSA9IFByaW1pdGl2ZVR5cGVOYW1l
KGRlc2NyaXB0b3IpOwotICAoKnZhcmlhYmxlcylbInR5cGUiXSA9IHByaW1pdGl2ZV9uYW1lOwot
ICAoKnZhcmlhYmxlcylbInN0b3JhZ2VfdHlwZSJdID0gcHJpbWl0aXZlX25hbWU7Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZQotCi1QcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6UHJpbWl0aXZlRmllbGRH
ZW5lcmF0b3IoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBP
cHRpb25zJiBvcHRpb25zKQotICAgIDogU2luZ2xlRmllbGRHZW5lcmF0b3IoZGVzY3JpcHRvciwg
b3B0aW9ucykgewotICBTZXRQcmltaXRpdmVWYXJpYWJsZXMoZGVzY3JpcHRvciwgJnZhcmlhYmxl
c18pOwotfQotCi1QcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6flByaW1pdGl2ZUZpZWxkR2VuZXJh
dG9yKCkge30KLQotdm9pZCBQcmltaXRpdmVGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVGaWVsZFN0
b3JhZ2VEZWNsYXJhdGlvbigKLSAgICBpbzo6UHJpbnRlciogcHJpbnRlcikgY29uc3QgewotICBp
ZiAoR2V0T2JqZWN0aXZlQ1R5cGUoZGVzY3JpcHRvcl8pID09IE9CSkVDVElWRUNUWVBFX0JPT0xF
QU4pIHsKLSAgICAvLyBOb3RoaW5nLCBCT09McyBhcmUgc3RvcmVkIGluIHRoZSBoYXMgYml0cy4K
LSAgfSBlbHNlIHsKLSAgICBTaW5nbGVGaWVsZEdlbmVyYXRvcjo6R2VuZXJhdGVGaWVsZFN0b3Jh
Z2VEZWNsYXJhdGlvbihwcmludGVyKTsKLSAgfQotfQotCi1pbnQgUHJpbWl0aXZlRmllbGRHZW5l
cmF0b3I6OkV4dHJhUnVudGltZUhhc0JpdHNOZWVkZWQodm9pZCkgY29uc3QgewotICBpZiAoR2V0
T2JqZWN0aXZlQ1R5cGUoZGVzY3JpcHRvcl8pID09IE9CSkVDVElWRUNUWVBFX0JPT0xFQU4pIHsK
LSAgICAvLyBSZXNlcnZlIGEgYml0IGZvciB0aGUgc3RvcmFnZSBvZiB0aGUgYm9vbGVhbi4KLSAg
ICByZXR1cm4gMTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotdm9pZCBQcmltaXRpdmVGaWVsZEdl
bmVyYXRvcjo6U2V0RXh0cmFSdW50aW1lSGFzQml0c0Jhc2UoaW50IGhhc19iYXNlKSB7Ci0gIGlm
IChHZXRPYmplY3RpdmVDVHlwZShkZXNjcmlwdG9yXykgPT0gT0JKRUNUSVZFQ1RZUEVfQk9PTEVB
TikgewotICAgIC8vIFNldCBpbnRvIHRoZSBvZmZzZXQgdGhlIGhhcyBiaXQgdG8gdXNlIGZvciB0
aGUgYWN0dWFsIHZhbHVlLgotICAgIHZhcmlhYmxlc19bInN0b3JhZ2Vfb2Zmc2V0X3ZhbHVlIl0g
PSBTaW1wbGVJdG9hKGhhc19iYXNlKTsKLSAgICB2YXJpYWJsZXNfWyJzdG9yYWdlX29mZnNldF9j
b21tZW50Il0gPQotICAgICAgICAiICAvLyBTdG9yZWQgaW4gX2hhc19zdG9yYWdlXyB0byBzYXZl
IHNwYWNlLiI7Ci0gIH0KLX0KLQotUHJpbWl0aXZlT2JqRmllbGRHZW5lcmF0b3I6OlByaW1pdGl2
ZU9iakZpZWxkR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRv
ciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IE9iakNPYmpGaWVsZEdlbmVyYXRvcihk
ZXNjcmlwdG9yLCBvcHRpb25zKSB7Ci0gIFNldFByaW1pdGl2ZVZhcmlhYmxlcyhkZXNjcmlwdG9y
LCAmdmFyaWFibGVzXyk7Ci0gIHZhcmlhYmxlc19bInByb3BlcnR5X3N0b3JhZ2VfYXR0cmlidXRl
Il0gPSAiY29weSI7Ci19Ci0KLVByaW1pdGl2ZU9iakZpZWxkR2VuZXJhdG9yOjp+UHJpbWl0aXZl
T2JqRmllbGRHZW5lcmF0b3IoKSB7fQotCi1SZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9y
OjpSZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKAotICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZGVzY3JpcHRvciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IFJlcGVhdGVk
RmllbGRHZW5lcmF0b3IoZGVzY3JpcHRvciwgb3B0aW9ucykgewotICBTZXRQcmltaXRpdmVWYXJp
YWJsZXMoZGVzY3JpcHRvciwgJnZhcmlhYmxlc18pOwotCi0gIHN0cmluZyBiYXNlX25hbWUgPSBQ
cmltaXRpdmVBcnJheVR5cGVOYW1lKGRlc2NyaXB0b3IpOwotICBpZiAoYmFzZV9uYW1lLmxlbmd0
aCgpKSB7Ci0gICAgdmFyaWFibGVzX1siYXJyYXlfc3RvcmFnZV90eXBlIl0gPSAiR1BCIiArIGJh
c2VfbmFtZSArICJBcnJheSI7Ci0gIH0gZWxzZSB7Ci0gICAgdmFyaWFibGVzX1siYXJyYXlfc3Rv
cmFnZV90eXBlIl0gPSAiTlNNdXRhYmxlQXJyYXkiOwotICAgIHZhcmlhYmxlc19bImFycmF5X3By
b3BlcnR5X3R5cGUiXSA9Ci0gICAgICAgICJOU011dGFibGVBcnJheTwiICsgdmFyaWFibGVzX1si
c3RvcmFnZV90eXBlIl0gKyAiKj4iOwotICB9Ci19Ci0KLVJlcGVhdGVkUHJpbWl0aXZlRmllbGRH
ZW5lcmF0b3I6On5SZXBlYXRlZFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9yKCkge30KLQotfSAgLy8g
bmFtZXNwYWNlIG9iamVjdGl2ZWMKLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX3ByaW1pdGl2ZV9m
aWVsZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZl
Y19wcmltaXRpdmVfZmllbGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliYjFm
ZGRjMWJkZmM5ZWMwMjUyM2E5NjQyMDRlOThjY2I1OTljNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2Jq
ZWN0aXZlYy9vYmplY3RpdmVjX3ByaW1pdGl2ZV9maWVsZC5oCisrKyAvZGV2L251bGwKQEAgLTEs
OTIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYg
R09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX09CSkVDVElWRUNfUFJJTUlUSVZFX0ZJRUxEX0hfXwot
I2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfT0JKRUNUSVZFQ19QUklNSVRJVkVfRklF
TERfSF9fCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZmllbGQuaD4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBp
bGVyIHsKLW5hbWVzcGFjZSBvYmplY3RpdmVjIHsKLQotY2xhc3MgUHJpbWl0aXZlRmllbGRHZW5l
cmF0b3IgOiBwdWJsaWMgU2luZ2xlRmllbGRHZW5lcmF0b3IgewotICBmcmllbmQgRmllbGRHZW5l
cmF0b3IqIEZpZWxkR2VuZXJhdG9yOjpNYWtlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0
aW9ucyYgb3B0aW9ucyk7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIFByaW1pdGl2ZUZpZWxkR2VuZXJhdG9y
KGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0gIHZpcnR1YWwgflByaW1pdGl2ZUZpZWxk
R2VuZXJhdG9yKCk7Ci0KLSAgdmlydHVhbCB2b2lkIEdlbmVyYXRlRmllbGRTdG9yYWdlRGVjbGFy
YXRpb24oaW86OlByaW50ZXIqIHByaW50ZXIpIGNvbnN0OwotCi0gIHZpcnR1YWwgaW50IEV4dHJh
UnVudGltZUhhc0JpdHNOZWVkZWQodm9pZCkgY29uc3Q7Ci0gIHZpcnR1YWwgdm9pZCBTZXRFeHRy
YVJ1bnRpbWVIYXNCaXRzQmFzZShpbnQgaW5kZXhfYmFzZSk7Ci0KLSBwcml2YXRlOgotICBHT09H
TEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IpOwot
fTsKLQotY2xhc3MgUHJpbWl0aXZlT2JqRmllbGRHZW5lcmF0b3IgOiBwdWJsaWMgT2JqQ09iakZp
ZWxkR2VuZXJhdG9yIHsKLSAgZnJpZW5kIEZpZWxkR2VuZXJhdG9yKiBGaWVsZEdlbmVyYXRvcjo6
TWFrZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotCi0gcHJv
dGVjdGVkOgotICBQcmltaXRpdmVPYmpGaWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlv
bnMmIG9wdGlvbnMpOwotICB2aXJ0dWFsIH5QcmltaXRpdmVPYmpGaWVsZEdlbmVyYXRvcigpOwot
Ci0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFByaW1pdGl2
ZU9iakZpZWxkR2VuZXJhdG9yKTsKLX07Ci0KLWNsYXNzIFJlcGVhdGVkUHJpbWl0aXZlRmllbGRH
ZW5lcmF0b3IgOiBwdWJsaWMgUmVwZWF0ZWRGaWVsZEdlbmVyYXRvciB7Ci0gIGZyaWVuZCBGaWVs
ZEdlbmVyYXRvciogRmllbGRHZW5lcmF0b3I6Ok1ha2UoY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBPcHRpb25zJiBvcHRpb25zKTsKLQotIHByb3RlY3RlZDoKLSAgUmVwZWF0ZWRQcmltaXRpdmVG
aWVsZEdlbmVyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0gIHZp
cnR1YWwgflJlcGVhdGVkUHJpbWl0aXZlRmllbGRHZW5lcmF0b3IoKTsKLQotIHByaXZhdGU6Ci0g
IEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhSZXBlYXRlZFByaW1pdGl2ZUZpZWxk
R2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBvYmplY3RpdmVjCi19ICAvLyBuYW1l
c3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNl
IGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9PQkpFQ1RJVkVD
X1BSSU1JVElWRV9GSUVMRF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9wYWNrYWdlX2luZm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wYWNrYWdl
X2luZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2YjQ3M2UxYzMwNjVmM2Qw
NGZmZmI3NzllNmQ0NWYzOGMzOTRiNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGFja2FnZV9pbmZvLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQot
Ly8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2Fu
amF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gVGhpcyBmaWxlIGV4
aXN0cyBzb2xlbHkgdG8gZG9jdW1lbnQgdGhlIGdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyIG5h
bWVzcGFjZS4KLS8vIEl0IGlzIG5vdCBjb21waWxlZCBpbnRvIGFueXRoaW5nLCBidXQgaXQgbWF5
IGJlIHJlYWQgYnkgYW4gYXV0b21hdGVkCi0vLyBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLS8vIEltcGxlbWVu
dGF0aW9uIG9mIHRoZSBQcm90b2NvbCBCdWZmZXIgY29tcGlsZXIuCi0vLwotLy8gVGhpcyBwYWNr
YWdlIGNvbnRhaW5zIGNvZGUgZm9yIHBhcnNpbmcgLnByb3RvIGZpbGVzIGFuZCBnZW5lcmF0aW5n
IGNvZGUKLS8vIGJhc2VkIG9uIHRoZW0uICBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgeW91IG1pZ2h0
IGJlIGludGVyZXN0ZWQgaW4gdGhpcwotLy8gcGFja2FnZToKLS8vIC0gWW91IHdhbnQgdG8gcGFy
c2UgLnByb3RvIGZpbGVzIGF0IHJ1bnRpbWUuICBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQKLS8v
ICAgbG9vayBhdCBpbXBvcnRlci5oLiAgU2luY2UgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHdpZGVs
eSB1c2VmdWwsIGl0IGlzCi0vLyAgIGluY2x1ZGVkIGluIHRoZSBsaWJwcm90b2J1ZiBiYXNlIGxp
YnJhcnk7IHlvdSBkbyBub3QgaGF2ZSB0byBsaW5rIGFnYWluc3QKLS8vICAgbGlicHJvdG9jLgot
Ly8gLSBZb3Ugd2FudCB0byB3cml0ZSBhIGN1c3RvbSBwcm90b2NvbCBjb21waWxlciB3aGljaCBn
ZW5lcmF0ZXMgZGlmZmVyZW50Ci0vLyAgIGtpbmRzIG9mIGNvZGUsIGUuZy4gY29kZSBpbiBhIGRp
ZmZlcmVudCBsYW5ndWFnZSB3aGljaCBpcyBub3Qgc3VwcG9ydGVkCi0vLyAgIGJ5IHRoZSBvZmZp
Y2lhbCBjb21waWxlci4gIEZvciB0aGlzIHB1cnBvc2UsIGNvbW1hbmRfbGluZV9pbnRlcmZhY2Uu
aAotLy8gICBwcm92aWRlcyB5b3Ugd2l0aCBhIGNvbXBsZXRlIGNvbXBpbGVyIGZyb250LWVuZCwg
c28gYWxsIHlvdSBuZWVkIHRvIGRvCi0vLyAgIGlzIHdyaXRlIGEgY3VzdG9tIGltcGxlbWVudGF0
aW9uIG9mIENvZGVHZW5lcmF0b3IgYW5kIGEgdHJpdmlhbCBtYWluKCkKLS8vICAgZnVuY3Rpb24u
ICBZb3UgY2FuIGV2ZW4gbWFrZSB5b3VyIGNvbXBpbGVyIHN1cHBvcnQgdGhlIG9mZmljaWFsIGxh
bmd1YWdlcwotLy8gICBpbiBhZGRpdGlvbiB0byB5b3VyIG93bi4gIFNpbmNlIHRoaXMgZnVuY3Rp
b25hbGl0eSBpcyBvbmx5IHVzZWZ1bCB0byB0aG9zZQotLy8gICB3cml0aW5nIGN1c3RvbSBjb21w
aWxlcnMsIGl0IGlzIGluIGEgc2VwYXJhdGUgbGlicmFyeSBjYWxsZWQgImxpYnByb3RvYyIKLS8v
ICAgd2hpY2ggeW91IHdpbGwgaGF2ZSB0byBsaW5rIGFnYWluc3QuCi1uYW1lc3BhY2UgY29tcGls
ZXIge30KLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGFyc2VyLmNjIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BhcnNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOTBkZWQ0ZGUyMTQ0YjI1NGQ2YWRmN2RhNGMzNGQwM2FiYzZlYjkwZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvcGFyc2VyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjEwOSArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29v
Z2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1
ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhl
cnMuCi0vLwotLy8gUmVjdXJzaXZlIGRlc2NlbnQgRlRXLgotCi0jaW5jbHVkZSA8ZmxvYXQuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oPgotI2luY2x1ZGUgPGxpbWl0
cz4KLQotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BhcnNlci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9m
b3JtYXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vdG9rZW5pemVyLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwuaD4K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNv
bXBpbGVyIHsKLQotdXNpbmcgaW50ZXJuYWw6OldpcmVGb3JtYXQ7Ci0KLW5hbWVzcGFjZSB7Ci0K
LXR5cGVkZWYgaGFzaF9tYXA8c3RyaW5nLCBGaWVsZERlc2NyaXB0b3JQcm90bzo6VHlwZT4gVHlw
ZU5hbWVNYXA7Ci0KLVR5cGVOYW1lTWFwIE1ha2VUeXBlTmFtZVRhYmxlKCkgewotICBUeXBlTmFt
ZU1hcCByZXN1bHQ7Ci0KLSAgcmVzdWx0WyJkb3VibGUiICBdID0gRmllbGREZXNjcmlwdG9yUHJv
dG86OlRZUEVfRE9VQkxFOwotICByZXN1bHRbImZsb2F0IiAgIF0gPSBGaWVsZERlc2NyaXB0b3JQ
cm90bzo6VFlQRV9GTE9BVDsKLSAgcmVzdWx0WyJ1aW50NjQiICBdID0gRmllbGREZXNjcmlwdG9y
UHJvdG86OlRZUEVfVUlOVDY0OwotICByZXN1bHRbImZpeGVkNjQiIF0gPSBGaWVsZERlc2NyaXB0
b3JQcm90bzo6VFlQRV9GSVhFRDY0OwotICByZXN1bHRbImZpeGVkMzIiIF0gPSBGaWVsZERlc2Ny
aXB0b3JQcm90bzo6VFlQRV9GSVhFRDMyOwotICByZXN1bHRbImJvb2wiICAgIF0gPSBGaWVsZERl
c2NyaXB0b3JQcm90bzo6VFlQRV9CT09MOwotICByZXN1bHRbInN0cmluZyIgIF0gPSBGaWVsZERl
c2NyaXB0b3JQcm90bzo6VFlQRV9TVFJJTkc7Ci0gIHJlc3VsdFsiZ3JvdXAiICAgXSA9IEZpZWxk
RGVzY3JpcHRvclByb3RvOjpUWVBFX0dST1VQOwotCi0gIHJlc3VsdFsiYnl0ZXMiICAgXSA9IEZp
ZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX0JZVEVTOwotICByZXN1bHRbInVpbnQzMiIgIF0gPSBG
aWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9VSU5UMzI7Ci0gIHJlc3VsdFsic2ZpeGVkMzIiXSA9
IEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX1NGSVhFRDMyOwotICByZXN1bHRbInNmaXhlZDY0
Il0gPSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9TRklYRUQ2NDsKLSAgcmVzdWx0WyJpbnQz
MiIgICBdID0gRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfSU5UMzI7Ci0gIHJlc3VsdFsiaW50
NjQiICAgXSA9IEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX0lOVDY0OwotICByZXN1bHRbInNp
bnQzMiIgIF0gPSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9TSU5UMzI7Ci0gIHJlc3VsdFsi
c2ludDY0IiAgXSA9IEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX1NJTlQ2NDsKLQotICByZXR1
cm4gcmVzdWx0OwotfQotCi1jb25zdCBUeXBlTmFtZU1hcCBrVHlwZU5hbWVzID0gTWFrZVR5cGVO
YW1lVGFibGUoKTsKLQotLy8gQ2FtZWwtY2FzZSB0aGUgZmllbGQgbmFtZSBhbmQgYXBwZW5kICJF
bnRyeSIgZm9yIGdlbmVyYXRlZCBtYXAgZW50cnkgbmFtZS4KLS8vIGUuZy4gbWFwPEtleVR5cGUs
IFZhbHVlVHlwZT4gZm9vX21hcCA9PiBGb29NYXBFbnRyeQotc3RyaW5nIE1hcEVudHJ5TmFtZShj
b25zdCBzdHJpbmcmIGZpZWxkX25hbWUpIHsKLSAgc3RyaW5nIHJlc3VsdDsKLSAgc3RhdGljIGNv
bnN0IGNoYXIga1N1ZmZpeFtdID0gIkVudHJ5IjsKLSAgcmVzdWx0LnJlc2VydmUoZmllbGRfbmFt
ZS5zaXplKCkgKyBzaXplb2Yoa1N1ZmZpeCkpOwotICBib29sIGNhcF9uZXh0ID0gdHJ1ZTsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZF9uYW1lLnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKGZp
ZWxkX25hbWVbaV0gPT0gJ18nKSB7Ci0gICAgICBjYXBfbmV4dCA9IHRydWU7Ci0gICAgfSBlbHNl
IGlmIChjYXBfbmV4dCkgewotICAgICAgLy8gTm90ZTogRG8gbm90IHVzZSBjdHlwZS5oIGR1ZSB0
byBsb2NhbGVzLgotICAgICAgaWYgKCdhJyA8PSBmaWVsZF9uYW1lW2ldICYmIGZpZWxkX25hbWVb
aV0gPD0gJ3onKSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoX2JhY2soZmllbGRfbmFtZVtpXSAtICdh
JyArICdBJyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQucHVzaF9iYWNrKGZpZWxk
X25hbWVbaV0pOwotICAgICAgfQotICAgICAgY2FwX25leHQgPSBmYWxzZTsKLSAgICB9IGVsc2Ug
ewotICAgICAgcmVzdWx0LnB1c2hfYmFjayhmaWVsZF9uYW1lW2ldKTsKLSAgICB9Ci0gIH0KLSAg
cmVzdWx0LmFwcGVuZChrU3VmZml4KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAgLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQotCi0vLyBNYWtlcyBjb2RlIHNsaWdodGx5IG1vcmUgcmVhZGFibGUu
ICBUaGUgbWVhbmluZyBvZiAiRE8oZm9vKSIgaXMKLS8vICJFeGVjdXRlIGZvbyBhbmQgZmFpbCBp
ZiBpdCBmYWlscy4iLCB3aGVyZSBmYWlsdXJlIGlzIGluZGljYXRlZCBieQotLy8gcmV0dXJuaW5n
IGZhbHNlLgotI2RlZmluZSBETyhTVEFURU1FTlQpIGlmIChTVEFURU1FTlQpIHt9IGVsc2UgcmV0
dXJuIGZhbHNlCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUGFyc2VyOjpQYXJzZXIoKQotICA6IGlucHV0
XyhOVUxMKSwKLSAgICBlcnJvcl9jb2xsZWN0b3JfKE5VTEwpLAotICAgIHNvdXJjZV9sb2NhdGlv
bl90YWJsZV8oTlVMTCksCi0gICAgaGFkX2Vycm9yc18oZmFsc2UpLAotICAgIHJlcXVpcmVfc3lu
dGF4X2lkZW50aWZpZXJfKGZhbHNlKSwKLSAgICBzdG9wX2FmdGVyX3N5bnRheF9pZGVudGlmaWVy
XyhmYWxzZSkgewotfQotCi1QYXJzZXI6On5QYXJzZXIoKSB7Ci19Ci0KLS8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotaW5saW5lIGJvb2wgUGFyc2VyOjpMb29raW5nQXQoY29uc3QgY2hhciogdGV4dCkgewotICBy
ZXR1cm4gaW5wdXRfLT5jdXJyZW50KCkudGV4dCA9PSB0ZXh0OwotfQotCi1pbmxpbmUgYm9vbCBQ
YXJzZXI6Okxvb2tpbmdBdFR5cGUoaW86OlRva2VuaXplcjo6VG9rZW5UeXBlIHRva2VuX3R5cGUp
IHsKLSAgcmV0dXJuIGlucHV0Xy0+Y3VycmVudCgpLnR5cGUgPT0gdG9rZW5fdHlwZTsKLX0KLQot
aW5saW5lIGJvb2wgUGFyc2VyOjpBdEVuZCgpIHsKLSAgcmV0dXJuIExvb2tpbmdBdFR5cGUoaW86
OlRva2VuaXplcjo6VFlQRV9FTkQpOwotfQotCi1ib29sIFBhcnNlcjo6VHJ5Q29uc3VtZShjb25z
dCBjaGFyKiB0ZXh0KSB7Ci0gIGlmIChMb29raW5nQXQodGV4dCkpIHsKLSAgICBpbnB1dF8tPk5l
eHQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0KLX0KLQotYm9vbCBQYXJzZXI6OkNvbnN1bWUoY29uc3QgY2hhciogdGV4dCwgY29uc3QgY2hh
ciogZXJyb3IpIHsKLSAgaWYgKFRyeUNvbnN1bWUodGV4dCkpIHsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfSBlbHNlIHsKLSAgICBBZGRFcnJvcihlcnJvcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci19Ci0KLWJvb2wgUGFyc2VyOjpDb25zdW1lKGNvbnN0IGNoYXIqIHRleHQpIHsKLSAgaWYgKFRy
eUNvbnN1bWUodGV4dCkpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBBZGRF
cnJvcigiRXhwZWN0ZWQgXCIiICsgc3RyaW5nKHRleHQpICsgIlwiLiIpOwotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotfQotCi1ib29sIFBhcnNlcjo6Q29uc3VtZUlkZW50aWZpZXIoc3RyaW5nKiBv
dXRwdXQsIGNvbnN0IGNoYXIqIGVycm9yKSB7Ci0gIGlmIChMb29raW5nQXRUeXBlKGlvOjpUb2tl
bml6ZXI6OlRZUEVfSURFTlRJRklFUikpIHsKLSAgICAqb3V0cHV0ID0gaW5wdXRfLT5jdXJyZW50
KCkudGV4dDsKLSAgICBpbnB1dF8tPk5leHQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNl
IHsKLSAgICBBZGRFcnJvcihlcnJvcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLWJv
b2wgUGFyc2VyOjpDb25zdW1lSW50ZWdlcihpbnQqIG91dHB1dCwgY29uc3QgY2hhciogZXJyb3Ip
IHsKLSAgaWYgKExvb2tpbmdBdFR5cGUoaW86OlRva2VuaXplcjo6VFlQRV9JTlRFR0VSKSkgewot
ICAgIHVpbnQ2NCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFpbzo6VG9rZW5pemVyOjpQYXJzZUludGVn
ZXIoaW5wdXRfLT5jdXJyZW50KCkudGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBraW50MzJtYXgsICZ2YWx1ZSkpIHsKLSAgICAgIEFkZEVycm9yKCJJbnRlZ2VyIG91
dCBvZiByYW5nZS4iKTsKLSAgICAgIC8vIFdlIHN0aWxsIHJldHVybiB0cnVlIGJlY2F1c2Ugd2Ug
ZGlkLCBpbiBmYWN0LCBwYXJzZSBhbiBpbnRlZ2VyLgotICAgIH0KLSAgICAqb3V0cHV0ID0gdmFs
dWU7Ci0gICAgaW5wdXRfLT5OZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0g
ICAgQWRkRXJyb3IoZXJyb3IpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1ib29sIFBh
cnNlcjo6Q29uc3VtZVNpZ25lZEludGVnZXIoaW50KiBvdXRwdXQsIGNvbnN0IGNoYXIqIGVycm9y
KSB7Ci0gIGJvb2wgaXNfbmVnYXRpdmUgPSBmYWxzZTsKLSAgdWludDY0IG1heF92YWx1ZSA9IGtp
bnQzMm1heDsKLSAgaWYgKFRyeUNvbnN1bWUoIi0iKSkgewotICAgIGlzX25lZ2F0aXZlID0gdHJ1
ZTsKLSAgICBtYXhfdmFsdWUgKz0gMTsKLSAgfQotICB1aW50NjQgdmFsdWUgPSAwOwotICBETyhD
b25zdW1lSW50ZWdlcjY0KG1heF92YWx1ZSwgJnZhbHVlLCBlcnJvcikpOwotICBpZiAoaXNfbmVn
YXRpdmUpIHZhbHVlICo9IC0xOwotICAqb3V0cHV0ID0gdmFsdWU7Ci0gIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFBhcnNlcjo6Q29uc3VtZUludGVnZXI2NCh1aW50NjQgbWF4X3ZhbHVlLCB1aW50
NjQqIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVy
cm9yKSB7Ci0gIGlmIChMb29raW5nQXRUeXBlKGlvOjpUb2tlbml6ZXI6OlRZUEVfSU5URUdFUikp
IHsKLSAgICBpZiAoIWlvOjpUb2tlbml6ZXI6OlBhcnNlSW50ZWdlcihpbnB1dF8tPmN1cnJlbnQo
KS50ZXh0LCBtYXhfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0KSkgewotICAgICAgQWRkRXJyb3IoIkludGVnZXIgb3V0IG9mIHJhbmdlLiIpOwotICAg
ICAgLy8gV2Ugc3RpbGwgcmV0dXJuIHRydWUgYmVjYXVzZSB3ZSBkaWQsIGluIGZhY3QsIHBhcnNl
IGFuIGludGVnZXIuCi0gICAgICAqb3V0cHV0ID0gMDsKLSAgICB9Ci0gICAgaW5wdXRfLT5OZXh0
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgQWRkRXJyb3IoZXJyb3IpOwot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1ib29sIFBhcnNlcjo6Q29uc3VtZU51bWJlcihk
b3VibGUqIG91dHB1dCwgY29uc3QgY2hhciogZXJyb3IpIHsKLSAgaWYgKExvb2tpbmdBdFR5cGUo
aW86OlRva2VuaXplcjo6VFlQRV9GTE9BVCkpIHsKLSAgICAqb3V0cHV0ID0gaW86OlRva2VuaXpl
cjo6UGFyc2VGbG9hdChpbnB1dF8tPmN1cnJlbnQoKS50ZXh0KTsKLSAgICBpbnB1dF8tPk5leHQo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIGlmIChMb29raW5nQXRUeXBlKGlvOjpUb2tl
bml6ZXI6OlRZUEVfSU5URUdFUikpIHsKLSAgICAvLyBBbHNvIGFjY2VwdCBpbnRlZ2Vycy4KLSAg
ICB1aW50NjQgdmFsdWUgPSAwOwotICAgIGlmICghaW86OlRva2VuaXplcjo6UGFyc2VJbnRlZ2Vy
KGlucHV0Xy0+Y3VycmVudCgpLnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga3VpbnQ2NG1heCwgJnZhbHVlKSkgewotICAgICAgQWRkRXJyb3IoIkludGVnZXIgb3V0
IG9mIHJhbmdlLiIpOwotICAgICAgLy8gV2Ugc3RpbGwgcmV0dXJuIHRydWUgYmVjYXVzZSB3ZSBk
aWQsIGluIGZhY3QsIHBhcnNlIGEgbnVtYmVyLgotICAgIH0KLSAgICAqb3V0cHV0ID0gdmFsdWU7
Ci0gICAgaW5wdXRfLT5OZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSBpZiAoTG9v
a2luZ0F0KCJpbmYiKSkgewotICAgICpvdXRwdXQgPSBudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpOwotICAgIGlucHV0Xy0+TmV4dCgpOwotICAgIHJldHVybiB0cnVlOwotICB9IGVs
c2UgaWYgKExvb2tpbmdBdCgibmFuIikpIHsKLSAgICAqb3V0cHV0ID0gbnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgaW5wdXRfLT5OZXh0KCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci0gIH0gZWxzZSB7Ci0gICAgQWRkRXJyb3IoZXJyb3IpOwotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotfQotCi1ib29sIFBhcnNlcjo6Q29uc3VtZVN0cmluZyhzdHJpbmcqIG91dHB1dCwgY29u
c3QgY2hhciogZXJyb3IpIHsKLSAgaWYgKExvb2tpbmdBdFR5cGUoaW86OlRva2VuaXplcjo6VFlQ
RV9TVFJJTkcpKSB7Ci0gICAgaW86OlRva2VuaXplcjo6UGFyc2VTdHJpbmcoaW5wdXRfLT5jdXJy
ZW50KCkudGV4dCwgb3V0cHV0KTsKLSAgICBpbnB1dF8tPk5leHQoKTsKLSAgICAvLyBBbGxvdyBD
KysgbGlrZSBjb25jYXRlbmF0aW9uIG9mIGFkamFjZW50IHN0cmluZyB0b2tlbnMuCi0gICAgd2hp
bGUgKExvb2tpbmdBdFR5cGUoaW86OlRva2VuaXplcjo6VFlQRV9TVFJJTkcpKSB7Ci0gICAgICBp
bzo6VG9rZW5pemVyOjpQYXJzZVN0cmluZ0FwcGVuZChpbnB1dF8tPmN1cnJlbnQoKS50ZXh0LCBv
dXRwdXQpOwotICAgICAgaW5wdXRfLT5OZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
ICB9IGVsc2UgewotICAgIEFkZEVycm9yKGVycm9yKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LX0KLQotYm9vbCBQYXJzZXI6OlRyeUNvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKAotICAgIGNvbnN0
IGNoYXIqIHRleHQsIGNvbnN0IExvY2F0aW9uUmVjb3JkZXIqIGxvY2F0aW9uKSB7Ci0gIGlmIChM
b29raW5nQXQodGV4dCkpIHsKLSAgICBzdHJpbmcgbGVhZGluZywgdHJhaWxpbmc7Ci0gICAgdmVj
dG9yPHN0cmluZz4gZGV0YWNoZWQ7Ci0gICAgaW5wdXRfLT5OZXh0V2l0aENvbW1lbnRzKCZ0cmFp
bGluZywgJmRldGFjaGVkLCAmbGVhZGluZyk7Ci0KLSAgICAvLyBTYXZlIHRoZSBsZWFkaW5nIGNv
bW1lbnRzIGZvciBuZXh0IHRpbWUsIGFuZCByZWNhbGwgdGhlIGxlYWRpbmcgY29tbWVudHMKLSAg
ICAvLyBmcm9tIGxhc3QgdGltZS4KLSAgICBsZWFkaW5nLnN3YXAodXBjb21pbmdfZG9jX2NvbW1l
bnRzXyk7Ci0KLSAgICBpZiAobG9jYXRpb24gIT0gTlVMTCkgewotICAgICAgdXBjb21pbmdfZGV0
YWNoZWRfY29tbWVudHNfLnN3YXAoZGV0YWNoZWQpOwotICAgICAgbG9jYXRpb24tPkF0dGFjaENv
bW1lbnRzKCZsZWFkaW5nLCAmdHJhaWxpbmcsICZkZXRhY2hlZCk7Ci0gICAgfSBlbHNlIGlmIChz
dHJjbXAodGV4dCwgIn0iKSA9PSAwKSB7Ci0gICAgICAvLyBJZiB0aGUgY3VycmVudCBsb2NhdGlv
biBpcyBudWxsIGFuZCB3ZSBhcmUgZmluaXNoaW5nIHRoZSBjdXJyZW50IHNjb3BlLAotICAgICAg
Ly8gZHJvcCBwZW5kaW5nIHVwY29taW5nIGRldGFjaGVkIGNvbW1lbnRzLgotICAgICAgdXBjb21p
bmdfZGV0YWNoZWRfY29tbWVudHNfLnN3YXAoZGV0YWNoZWQpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAvLyBPdGhlcndpc2UsIGFwcGVuZCB0aGUgbmV3IGRldGFjaGVkIGNvbW1lbnRzIHRvIHRoZSBl
eGlzdGluZyB1cGNvbWluZwotICAgICAgLy8gZGV0YWNoZWQgY29tbWVudHMuCi0gICAgICB1cGNv
bWluZ19kZXRhY2hlZF9jb21tZW50c18uaW5zZXJ0KHVwY29taW5nX2RldGFjaGVkX2NvbW1lbnRz
Xy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNo
ZWQuYmVnaW4oKSwgZGV0YWNoZWQuZW5kKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
ICB9IGVsc2UgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1ib29sIFBhcnNlcjo6Q29u
c3VtZUVuZE9mRGVjbGFyYXRpb24oCi0gICAgY29uc3QgY2hhciogdGV4dCwgY29uc3QgTG9jYXRp
b25SZWNvcmRlciogbG9jYXRpb24pIHsKLSAgaWYgKFRyeUNvbnN1bWVFbmRPZkRlY2xhcmF0aW9u
KHRleHQsIGxvY2F0aW9uKSkgewotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIEFk
ZEVycm9yKCJFeHBlY3RlZCBcIiIgKyBzdHJpbmcodGV4dCkgKyAiXCIuIik7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQYXJzZXI6OkFkZEVycm9y
KGludCBsaW5lLCBpbnQgY29sdW1uLCBjb25zdCBzdHJpbmcmIGVycm9yKSB7Ci0gIGlmIChlcnJv
cl9jb2xsZWN0b3JfICE9IE5VTEwpIHsKLSAgICBlcnJvcl9jb2xsZWN0b3JfLT5BZGRFcnJvcihs
aW5lLCBjb2x1bW4sIGVycm9yKTsKLSAgfQotICBoYWRfZXJyb3JzXyA9IHRydWU7Ci19Ci0KLXZv
aWQgUGFyc2VyOjpBZGRFcnJvcihjb25zdCBzdHJpbmcmIGVycm9yKSB7Ci0gIEFkZEVycm9yKGlu
cHV0Xy0+Y3VycmVudCgpLmxpbmUsIGlucHV0Xy0+Y3VycmVudCgpLmNvbHVtbiwgZXJyb3IpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBhcnNlcjo6TG9jYXRpb25SZWNvcmRlcjo6TG9jYXRpb25S
ZWNvcmRlcihQYXJzZXIqIHBhcnNlcikKLSAgOiBwYXJzZXJfKHBhcnNlciksCi0gICAgbG9jYXRp
b25fKHBhcnNlcl8tPnNvdXJjZV9jb2RlX2luZm9fLT5hZGRfbG9jYXRpb24oKSkgewotICBsb2Nh
dGlvbl8tPmFkZF9zcGFuKHBhcnNlcl8tPmlucHV0Xy0+Y3VycmVudCgpLmxpbmUpOwotICBsb2Nh
dGlvbl8tPmFkZF9zcGFuKHBhcnNlcl8tPmlucHV0Xy0+Y3VycmVudCgpLmNvbHVtbik7Ci19Ci0K
LVBhcnNlcjo6TG9jYXRpb25SZWNvcmRlcjo6TG9jYXRpb25SZWNvcmRlcihjb25zdCBMb2NhdGlv
blJlY29yZGVyJiBwYXJlbnQpIHsKLSAgSW5pdChwYXJlbnQpOwotfQotCi1QYXJzZXI6OkxvY2F0
aW9uUmVjb3JkZXI6OkxvY2F0aW9uUmVjb3JkZXIoY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcGFy
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRo
MSkgewotICBJbml0KHBhcmVudCk7Ci0gIEFkZFBhdGgocGF0aDEpOwotfQotCi1QYXJzZXI6Okxv
Y2F0aW9uUmVjb3JkZXI6OkxvY2F0aW9uUmVjb3JkZXIoY29uc3QgTG9jYXRpb25SZWNvcmRlciYg
cGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBw
YXRoMSwgaW50IHBhdGgyKSB7Ci0gIEluaXQocGFyZW50KTsKLSAgQWRkUGF0aChwYXRoMSk7Ci0g
IEFkZFBhdGgocGF0aDIpOwotfQotCi12b2lkIFBhcnNlcjo6TG9jYXRpb25SZWNvcmRlcjo6SW5p
dChjb25zdCBMb2NhdGlvblJlY29yZGVyJiBwYXJlbnQpIHsKLSAgcGFyc2VyXyA9IHBhcmVudC5w
YXJzZXJfOwotICBsb2NhdGlvbl8gPSBwYXJzZXJfLT5zb3VyY2VfY29kZV9pbmZvXy0+YWRkX2xv
Y2F0aW9uKCk7Ci0gIGxvY2F0aW9uXy0+bXV0YWJsZV9wYXRoKCktPkNvcHlGcm9tKHBhcmVudC5s
b2NhdGlvbl8tPnBhdGgoKSk7Ci0KLSAgbG9jYXRpb25fLT5hZGRfc3BhbihwYXJzZXJfLT5pbnB1
dF8tPmN1cnJlbnQoKS5saW5lKTsKLSAgbG9jYXRpb25fLT5hZGRfc3BhbihwYXJzZXJfLT5pbnB1
dF8tPmN1cnJlbnQoKS5jb2x1bW4pOwotfQotCi1QYXJzZXI6OkxvY2F0aW9uUmVjb3JkZXI6On5M
b2NhdGlvblJlY29yZGVyKCkgewotICBpZiAobG9jYXRpb25fLT5zcGFuX3NpemUoKSA8PSAyKSB7
Ci0gICAgRW5kQXQocGFyc2VyXy0+aW5wdXRfLT5wcmV2aW91cygpKTsKLSAgfQotfQotCi12b2lk
IFBhcnNlcjo6TG9jYXRpb25SZWNvcmRlcjo6QWRkUGF0aChpbnQgcGF0aF9jb21wb25lbnQpIHsK
LSAgbG9jYXRpb25fLT5hZGRfcGF0aChwYXRoX2NvbXBvbmVudCk7Ci19Ci0KLXZvaWQgUGFyc2Vy
OjpMb2NhdGlvblJlY29yZGVyOjpTdGFydEF0KGNvbnN0IGlvOjpUb2tlbml6ZXI6OlRva2VuJiB0
b2tlbikgewotICBsb2NhdGlvbl8tPnNldF9zcGFuKDAsIHRva2VuLmxpbmUpOwotICBsb2NhdGlv
bl8tPnNldF9zcGFuKDEsIHRva2VuLmNvbHVtbik7Ci19Ci0KLXZvaWQgUGFyc2VyOjpMb2NhdGlv
blJlY29yZGVyOjpTdGFydEF0KGNvbnN0IExvY2F0aW9uUmVjb3JkZXImIG90aGVyKSB7Ci0gIGxv
Y2F0aW9uXy0+c2V0X3NwYW4oMCwgb3RoZXIubG9jYXRpb25fLT5zcGFuKDApKTsKLSAgbG9jYXRp
b25fLT5zZXRfc3BhbigxLCBvdGhlci5sb2NhdGlvbl8tPnNwYW4oMSkpOwotfQotCi12b2lkIFBh
cnNlcjo6TG9jYXRpb25SZWNvcmRlcjo6RW5kQXQoY29uc3QgaW86OlRva2VuaXplcjo6VG9rZW4m
IHRva2VuKSB7Ci0gIGlmICh0b2tlbi5saW5lICE9IGxvY2F0aW9uXy0+c3BhbigwKSkgewotICAg
IGxvY2F0aW9uXy0+YWRkX3NwYW4odG9rZW4ubGluZSk7Ci0gIH0KLSAgbG9jYXRpb25fLT5hZGRf
c3Bhbih0b2tlbi5lbmRfY29sdW1uKTsKLX0KLQotdm9pZCBQYXJzZXI6OkxvY2F0aW9uUmVjb3Jk
ZXI6OlJlY29yZExlZ2FjeUxvY2F0aW9uKGNvbnN0IE1lc3NhZ2UqIGRlc2NyaXB0b3IsCi0gICAg
RGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpFcnJvckxvY2F0aW9uIGxvY2F0aW9uKSB7
Ci0gIGlmIChwYXJzZXJfLT5zb3VyY2VfbG9jYXRpb25fdGFibGVfICE9IE5VTEwpIHsKLSAgICBw
YXJzZXJfLT5zb3VyY2VfbG9jYXRpb25fdGFibGVfLT5BZGQoCi0gICAgICAgIGRlc2NyaXB0b3Is
IGxvY2F0aW9uLCBsb2NhdGlvbl8tPnNwYW4oMCksIGxvY2F0aW9uXy0+c3BhbigxKSk7Ci0gIH0K
LX0KLQotdm9pZCBQYXJzZXI6OkxvY2F0aW9uUmVjb3JkZXI6OkF0dGFjaENvbW1lbnRzKAotICAg
IHN0cmluZyogbGVhZGluZywgc3RyaW5nKiB0cmFpbGluZywKLSAgICB2ZWN0b3I8c3RyaW5nPiog
ZGV0YWNoZWRfY29tbWVudHMpIGNvbnN0IHsKLSAgR09PR0xFX0NIRUNLKCFsb2NhdGlvbl8tPmhh
c19sZWFkaW5nX2NvbW1lbnRzKCkpOwotICBHT09HTEVfQ0hFQ0soIWxvY2F0aW9uXy0+aGFzX3Ry
YWlsaW5nX2NvbW1lbnRzKCkpOwotCi0gIGlmICghbGVhZGluZy0+ZW1wdHkoKSkgewotICAgIGxv
Y2F0aW9uXy0+bXV0YWJsZV9sZWFkaW5nX2NvbW1lbnRzKCktPnN3YXAoKmxlYWRpbmcpOwotICB9
Ci0gIGlmICghdHJhaWxpbmctPmVtcHR5KCkpIHsKLSAgICBsb2NhdGlvbl8tPm11dGFibGVfdHJh
aWxpbmdfY29tbWVudHMoKS0+c3dhcCgqdHJhaWxpbmcpOwotICB9Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgZGV0YWNoZWRfY29tbWVudHMtPnNpemUoKTsgKytpKSB7Ci0gICAgbG9jYXRpb25fLT5h
ZGRfbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cygpLT5zd2FwKAotICAgICAgICAoKmRldGFjaGVk
X2NvbW1lbnRzKVtpXSk7Ci0gIH0KLSAgZGV0YWNoZWRfY29tbWVudHMtPmNsZWFyKCk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQYXJzZXI6OlNraXBTdGF0ZW1lbnQoKSB7Ci0gIHdoaWxl
ICh0cnVlKSB7Ci0gICAgaWYgKEF0RW5kKCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9IGVsc2Ug
aWYgKExvb2tpbmdBdFR5cGUoaW86OlRva2VuaXplcjo6VFlQRV9TWU1CT0wpKSB7Ci0gICAgICBp
ZiAoVHJ5Q29uc3VtZUVuZE9mRGVjbGFyYXRpb24oIjsiLCBOVUxMKSkgewotICAgICAgICByZXR1
cm47Ci0gICAgICB9IGVsc2UgaWYgKFRyeUNvbnN1bWUoInsiKSkgewotICAgICAgICBTa2lwUmVz
dE9mQmxvY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfSBlbHNlIGlmIChMb29raW5nQXQo
In0iKSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGlucHV0Xy0+TmV4
dCgpOwotICB9Ci19Ci0KLXZvaWQgUGFyc2VyOjpTa2lwUmVzdE9mQmxvY2soKSB7Ci0gIHdoaWxl
ICh0cnVlKSB7Ci0gICAgaWYgKEF0RW5kKCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9IGVsc2Ug
aWYgKExvb2tpbmdBdFR5cGUoaW86OlRva2VuaXplcjo6VFlQRV9TWU1CT0wpKSB7Ci0gICAgICBp
ZiAoVHJ5Q29uc3VtZUVuZE9mRGVjbGFyYXRpb24oIn0iLCBOVUxMKSkgewotICAgICAgICByZXR1
cm47Ci0gICAgICB9IGVsc2UgaWYgKFRyeUNvbnN1bWUoInsiKSkgewotICAgICAgICBTa2lwUmVz
dE9mQmxvY2soKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaW5wdXRfLT5OZXh0KCk7Ci0gIH0KLX0K
LQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotCi1ib29sIFBhcnNlcjo6VmFsaWRhdGVFbnVtKGNvbnN0IEVudW1E
ZXNjcmlwdG9yUHJvdG8qIHByb3RvKSB7Ci0gIGJvb2wgaGFzX2FsbG93X2FsaWFzID0gZmFsc2U7
Ci0gIGJvb2wgYWxsb3dfYWxpYXMgPSBmYWxzZTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IHBy
b3RvLT5vcHRpb25zKCkudW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpOyBpKyspIHsKLSAgICBj
b25zdCBVbmludGVycHJldGVkT3B0aW9uIG9wdGlvbiA9IHByb3RvLT5vcHRpb25zKCkudW5pbnRl
cnByZXRlZF9vcHRpb24oaSk7Ci0gICAgaWYgKG9wdGlvbi5uYW1lX3NpemUoKSA+IDEpIHsKLSAg
ICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAoIW9wdGlvbi5uYW1lKDApLmlzX2V4dGVuc2lv
bigpICYmCi0gICAgICAgIG9wdGlvbi5uYW1lKDApLm5hbWVfcGFydCgpID09ICJhbGxvd19hbGlh
cyIpIHsKLSAgICAgIGhhc19hbGxvd19hbGlhcyA9IHRydWU7Ci0gICAgICBpZiAob3B0aW9uLmlk
ZW50aWZpZXJfdmFsdWUoKSA9PSAidHJ1ZSIpIHsKLSAgICAgICAgYWxsb3dfYWxpYXMgPSB0cnVl
OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGhhc19hbGxvd19h
bGlhcyAmJiAhYWxsb3dfYWxpYXMpIHsKLSAgICBzdHJpbmcgZXJyb3IgPQotICAgICAgICAiXCIi
ICsgcHJvdG8tPm5hbWUoKSArCi0gICAgICAgICJcIiBkZWNsYXJlcyAnb3B0aW9uIGFsbG93X2Fs
aWFzID0gZmFsc2U7JyB3aGljaCBoYXMgbm8gZWZmZWN0LiAiCi0gICAgICAgICJQbGVhc2UgcmVt
b3ZlIHRoZSBkZWNsYXJhdGlvbi4iOwotICAgIC8vIFRoaXMgbmVlZGxlc3NseSBjbHV0dGVycyBk
ZWNsYXJhdGlvbnMgd2l0aCBub3BzLgotICAgIEFkZEVycm9yKGVycm9yKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICBzZXQ8aW50PiB1c2VkX3ZhbHVlczsKLSAgYm9vbCBoYXNfZHVwbGlj
YXRlcyA9IGZhbHNlOwotICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvLT52YWx1ZV9zaXplKCk7
ICsraSkgewotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byBlbnVtX3ZhbHVlID0g
cHJvdG8tPnZhbHVlKGkpOwotICAgIGlmICh1c2VkX3ZhbHVlcy5maW5kKGVudW1fdmFsdWUubnVt
YmVyKCkpICE9IHVzZWRfdmFsdWVzLmVuZCgpKSB7Ci0gICAgICBoYXNfZHVwbGljYXRlcyA9IHRy
dWU7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgewotICAgICAgdXNlZF92YWx1ZXMuaW5zZXJ0
KGVudW1fdmFsdWUubnVtYmVyKCkpOwotICAgIH0KLSAgfQotICBpZiAoYWxsb3dfYWxpYXMgJiYg
IWhhc19kdXBsaWNhdGVzKSB7Ci0gICAgc3RyaW5nIGVycm9yID0KLSAgICAgICAgIlwiIiArIHBy
b3RvLT5uYW1lKCkgKwotICAgICAgICAiXCIgZGVjbGFyZXMgc3VwcG9ydCBmb3IgZW51bSBhbGlh
c2VzIGJ1dCBubyBlbnVtIHZhbHVlcyBzaGFyZSBmaWVsZCAiCi0gICAgICAgICJudW1iZXJzLiBQ
bGVhc2UgcmVtb3ZlIHRoZSB1bm5lY2Vzc2FyeSAnb3B0aW9uIGFsbG93X2FsaWFzID0gdHJ1ZTsn
ICIKLSAgICAgICAgImRlY2xhcmF0aW9uLiI7Ci0gICAgLy8gR2VuZXJhdGUgYW4gZXJyb3IgaWYg
YW4gZW51bSBkZWNsYXJlcyBzdXBwb3J0IGZvciBkdXBsaWNhdGUgZW51bSB2YWx1ZXMKLSAgICAv
LyBhbmQgZG9lcyBub3QgdXNlIGl0IHByb3RlY3QgZnV0dXJlIGF1dGhvcnMuCi0gICAgQWRkRXJy
b3IoZXJyb3IpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFBhcnNlcjo6UGFyc2UoaW86OlRva2VuaXplciogaW5wdXQsIEZpbGVEZXNjcmlwdG9y
UHJvdG8qIGZpbGUpIHsKLSAgaW5wdXRfID0gaW5wdXQ7Ci0gIGhhZF9lcnJvcnNfID0gZmFsc2U7
Ci0gIHN5bnRheF9pZGVudGlmaWVyXy5jbGVhcigpOwotCi0gIC8vIE5vdGUgdGhhdCB8ZmlsZXwg
Y291bGQgYmUgTlVMTCBhdCB0aGlzIHBvaW50IGlmCi0gIC8vIHN0b3BfYWZ0ZXJfc3ludGF4X2lk
ZW50aWZpZXJfIGlzIHRydWUuICBTbywgd2UgY29uc2VydmF0aXZlbHkgYWxsb2NhdGUKLSAgLy8g
U291cmNlQ29kZUluZm8gb24gdGhlIHN0YWNrLCB0aGVuIHN3YXAgaXQgaW50byB0aGUgRmlsZURl
c2NyaXB0b3JQcm90bwotICAvLyBsYXRlciBvbi4KLSAgU291cmNlQ29kZUluZm8gc291cmNlX2Nv
ZGVfaW5mbzsKLSAgc291cmNlX2NvZGVfaW5mb18gPSAmc291cmNlX2NvZGVfaW5mbzsKLQotICB2
ZWN0b3I8c3RyaW5nPiB0b3BfZG9jX2NvbW1lbnRzOwotICBpZiAoTG9va2luZ0F0VHlwZShpbzo6
VG9rZW5pemVyOjpUWVBFX1NUQVJUKSkgewotICAgIC8vIEFkdmFuY2UgdG8gZmlyc3QgdG9rZW4u
Ci0gICAgaW5wdXRfLT5OZXh0V2l0aENvbW1lbnRzKE5VTEwsICZ1cGNvbWluZ19kZXRhY2hlZF9j
b21tZW50c18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1cGNvbWluZ19kb2NfY29t
bWVudHNfKTsKLSAgfQotCi0gIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIHJvb3RfbG9jYXRpb24o
dGhpcyk7Ci0KLSAgICBpZiAocmVxdWlyZV9zeW50YXhfaWRlbnRpZmllcl8gfHwgTG9va2luZ0F0
KCJzeW50YXgiKSkgewotICAgICAgaWYgKCFQYXJzZVN5bnRheElkZW50aWZpZXIocm9vdF9sb2Nh
dGlvbikpIHsKLSAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBwYXJzZSB0aGUgZmlsZSBpZiB3
ZSBkaWRuJ3QgcmVjb2duaXplIHRoZSBzeW50YXgKLSAgICAgICAgLy8gaWRlbnRpZmllci4KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgLy8gU3RvcmUgdGhlIHN5bnRheCBp
bnRvIHRoZSBmaWxlLgotICAgICAgaWYgKGZpbGUgIT0gTlVMTCkgZmlsZS0+c2V0X3N5bnRheChz
eW50YXhfaWRlbnRpZmllcl8pOwotICAgIH0gZWxzZSBpZiAoIXN0b3BfYWZ0ZXJfc3ludGF4X2lk
ZW50aWZpZXJfKSB7Ci0gICAgICBHT09HTEVfTE9HKFdBUk5JTkcpIDw8ICJObyBzeW50YXggc3Bl
Y2lmaWVkIGZvciB0aGUgcHJvdG8gZmlsZTogIgotICAgICAgICAgICAgICAgICAgIDw8IGZpbGUt
Pm5hbWUoKSA8PCAiLiBQbGVhc2UgdXNlICdzeW50YXggPSBcInByb3RvMlwiOycgIgotICAgICAg
ICAgICAgICAgICAgIDw8ICJvciAnc3ludGF4ID0gXCJwcm90bzNcIjsnIHRvIHNwZWNpZnkgYSBz
eW50YXggIgotICAgICAgICAgICAgICAgICAgIDw8ICJ2ZXJzaW9uLiAoRGVmYXVsdGVkIHRvIHBy
b3RvMiBzeW50YXguKSI7Ci0gICAgICBzeW50YXhfaWRlbnRpZmllcl8gPSAicHJvdG8yIjsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RvcF9hZnRlcl9zeW50YXhfaWRlbnRpZmllcl8pIHJldHVybiAhaGFk
X2Vycm9yc187Ci0KLSAgICAvLyBSZXBlYXRlZGx5IHBhcnNlIHN0YXRlbWVudHMgdW50aWwgd2Ug
cmVhY2ggdGhlIGVuZCBvZiB0aGUgZmlsZS4KLSAgICB3aGlsZSAoIUF0RW5kKCkpIHsKLSAgICAg
IGlmICghUGFyc2VUb3BMZXZlbFN0YXRlbWVudChmaWxlLCByb290X2xvY2F0aW9uKSkgewotICAg
ICAgICAvLyBUaGlzIHN0YXRlbWVudCBmYWlsZWQgdG8gcGFyc2UuICBTa2lwIGl0LCBidXQga2Vl
cCBsb29waW5nIHRvIHBhcnNlCi0gICAgICAgIC8vIG90aGVyIHN0YXRlbWVudHMuCi0gICAgICAg
IFNraXBTdGF0ZW1lbnQoKTsKLQotICAgICAgICBpZiAoTG9va2luZ0F0KCJ9IikpIHsKLSAgICAg
ICAgICBBZGRFcnJvcigiVW5tYXRjaGVkIFwifVwiLiIpOwotICAgICAgICAgIGlucHV0Xy0+TmV4
dFdpdGhDb21tZW50cyhOVUxMLCAmdXBjb21pbmdfZGV0YWNoZWRfY29tbWVudHNfLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXBjb21pbmdfZG9jX2NvbW1lbnRzXyk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpbnB1dF8gPSBOVUxMOwotICBzb3Vy
Y2VfY29kZV9pbmZvXyA9IE5VTEw7Ci0gIHNvdXJjZV9jb2RlX2luZm8uU3dhcChmaWxlLT5tdXRh
YmxlX3NvdXJjZV9jb2RlX2luZm8oKSk7Ci0gIHJldHVybiAhaGFkX2Vycm9yc187Ci19Ci0KLWJv
b2wgUGFyc2VyOjpQYXJzZVN5bnRheElkZW50aWZpZXIoY29uc3QgTG9jYXRpb25SZWNvcmRlciYg
cGFyZW50KSB7Ci0gIExvY2F0aW9uUmVjb3JkZXIgc3ludGF4X2xvY2F0aW9uKHBhcmVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90bzo6a1N5
bnRheEZpZWxkTnVtYmVyKTsKLSAgRE8oQ29uc3VtZSgKLSAgICAgICJzeW50YXgiLAotICAgICAg
IkZpbGUgbXVzdCBiZWdpbiB3aXRoIGEgc3ludGF4IHN0YXRlbWVudCwgZS5nLiAnc3ludGF4ID0g
XCJwcm90bzJcIjsnLiIpKTsKLSAgRE8oQ29uc3VtZSgiPSIpKTsKLSAgaW86OlRva2VuaXplcjo6
VG9rZW4gc3ludGF4X3Rva2VuID0gaW5wdXRfLT5jdXJyZW50KCk7Ci0gIHN0cmluZyBzeW50YXg7
Ci0gIERPKENvbnN1bWVTdHJpbmcoJnN5bnRheCwgIkV4cGVjdGVkIHN5bnRheCBpZGVudGlmaWVy
LiIpKTsKLSAgRE8oQ29uc3VtZUVuZE9mRGVjbGFyYXRpb24oIjsiLCAmc3ludGF4X2xvY2F0aW9u
KSk7Ci0KLSAgc3ludGF4X2lkZW50aWZpZXJfID0gc3ludGF4OwotCi0gIGlmIChzeW50YXggIT0g
InByb3RvMiIgJiYgc3ludGF4ICE9ICJwcm90bzMiICYmCi0gICAgICAhc3RvcF9hZnRlcl9zeW50
YXhfaWRlbnRpZmllcl8pIHsKLSAgICBBZGRFcnJvcihzeW50YXhfdG9rZW4ubGluZSwgc3ludGF4
X3Rva2VuLmNvbHVtbiwKLSAgICAgICJVbnJlY29nbml6ZWQgc3ludGF4IGlkZW50aWZpZXIgXCIi
ICsgc3ludGF4ICsgIlwiLiAgVGhpcyBwYXJzZXIgIgotICAgICAgIm9ubHkgcmVjb2duaXplcyBc
InByb3RvMlwiIGFuZCBcInByb3RvM1wiLiIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0g
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFBhcnNlcjo6UGFyc2VUb3BMZXZlbFN0YXRlbWVudChG
aWxlRGVzY3JpcHRvclByb3RvKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcm9vdF9sb2NhdGlvbikgewotICBpZiAoVHJ5
Q29uc3VtZUVuZE9mRGVjbGFyYXRpb24oIjsiLCBOVUxMKSkgewotICAgIC8vIGVtcHR5IHN0YXRl
bWVudDsgaWdub3JlCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSBpZiAoTG9va2luZ0F0KCJt
ZXNzYWdlIikpIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9uKHJvb3RfbG9jYXRpb24s
Ci0gICAgICBGaWxlRGVzY3JpcHRvclByb3RvOjprTWVzc2FnZVR5cGVGaWVsZE51bWJlciwgZmls
ZS0+bWVzc2FnZV90eXBlX3NpemUoKSk7Ci0gICAgcmV0dXJuIFBhcnNlTWVzc2FnZURlZmluaXRp
b24oZmlsZS0+YWRkX21lc3NhZ2VfdHlwZSgpLCBsb2NhdGlvbiwgZmlsZSk7Ci0gIH0gZWxzZSBp
ZiAoTG9va2luZ0F0KCJlbnVtIikpIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9uKHJv
b3RfbG9jYXRpb24sCi0gICAgICBGaWxlRGVzY3JpcHRvclByb3RvOjprRW51bVR5cGVGaWVsZE51
bWJlciwgZmlsZS0+ZW51bV90eXBlX3NpemUoKSk7Ci0gICAgcmV0dXJuIFBhcnNlRW51bURlZmlu
aXRpb24oZmlsZS0+YWRkX2VudW1fdHlwZSgpLCBsb2NhdGlvbiwgZmlsZSk7Ci0gIH0gZWxzZSBp
ZiAoTG9va2luZ0F0KCJzZXJ2aWNlIikpIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9u
KHJvb3RfbG9jYXRpb24sCi0gICAgICBGaWxlRGVzY3JpcHRvclByb3RvOjprU2VydmljZUZpZWxk
TnVtYmVyLCBmaWxlLT5zZXJ2aWNlX3NpemUoKSk7Ci0gICAgcmV0dXJuIFBhcnNlU2VydmljZURl
ZmluaXRpb24oZmlsZS0+YWRkX3NlcnZpY2UoKSwgbG9jYXRpb24sIGZpbGUpOwotICB9IGVsc2Ug
aWYgKExvb2tpbmdBdCgiZXh0ZW5kIikpIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9u
KHJvb3RfbG9jYXRpb24sCi0gICAgICAgIEZpbGVEZXNjcmlwdG9yUHJvdG86OmtFeHRlbnNpb25G
aWVsZE51bWJlcik7Ci0gICAgcmV0dXJuIFBhcnNlRXh0ZW5kKGZpbGUtPm11dGFibGVfZXh0ZW5z
aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgIGZpbGUtPm11dGFibGVfbWVzc2FnZV90eXBl
KCksCi0gICAgICAgICAgICAgICAgICAgICAgIHJvb3RfbG9jYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgIEZpbGVEZXNjcmlwdG9yUHJvdG86OmtNZXNzYWdlVHlwZUZpZWxkTnVtYmVyLAot
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiwgZmlsZSk7Ci0gIH0gZWxzZSBpZiAoTG9v
a2luZ0F0KCJpbXBvcnQiKSkgewotICAgIHJldHVybiBQYXJzZUltcG9ydChmaWxlLT5tdXRhYmxl
X2RlcGVuZGVuY3koKSwKLSAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+bXV0YWJsZV9wdWJs
aWNfZGVwZW5kZW5jeSgpLAotICAgICAgICAgICAgICAgICAgICAgICBmaWxlLT5tdXRhYmxlX3dl
YWtfZGVwZW5kZW5jeSgpLAotICAgICAgICAgICAgICAgICAgICAgICByb290X2xvY2F0aW9uLCBm
aWxlKTsKLSAgfSBlbHNlIGlmIChMb29raW5nQXQoInBhY2thZ2UiKSkgewotICAgIHJldHVybiBQ
YXJzZVBhY2thZ2UoZmlsZSwgcm9vdF9sb2NhdGlvbiwgZmlsZSk7Ci0gIH0gZWxzZSBpZiAoTG9v
a2luZ0F0KCJvcHRpb24iKSkgewotICAgIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24ocm9vdF9s
b2NhdGlvbiwKLSAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90bzo6a09wdGlvbnNGaWVsZE51bWJl
cik7Ci0gICAgcmV0dXJuIFBhcnNlT3B0aW9uKGZpbGUtPm11dGFibGVfb3B0aW9ucygpLCBsb2Nh
dGlvbiwgZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OX1NUQVRFTUVOVCk7Ci0g
IH0gZWxzZSB7Ci0gICAgQWRkRXJyb3IoIkV4cGVjdGVkIHRvcC1sZXZlbCBzdGF0ZW1lbnQgKGUu
Zy4gXCJtZXNzYWdlXCIpLiIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBNZXNzYWdlcwotCi1ib29sIFBhcnNlcjo6UGFyc2VNZXNzYWdlRGVmaW5pdGlv
bigKLSAgICBEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UsCi0gICAgY29uc3QgTG9jYXRpb25SZWNv
cmRlciYgbWVzc2FnZV9sb2NhdGlvbiwKLSAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBj
b250YWluaW5nX2ZpbGUpIHsKLSAgRE8oQ29uc3VtZSgibWVzc2FnZSIpKTsKLSAgewotICAgIExv
Y2F0aW9uUmVjb3JkZXIgbG9jYXRpb24obWVzc2FnZV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQcm90bzo6a05hbWVGaWVsZE51bWJlcik7Ci0gICAg
bG9jYXRpb24uUmVjb3JkTGVnYWN5TG9jYXRpb24oCi0gICAgICAgIG1lc3NhZ2UsIERlc2NyaXB0
b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6TkFNRSk7Ci0gICAgRE8oQ29uc3VtZUlkZW50aWZpZXIo
bWVzc2FnZS0+bXV0YWJsZV9uYW1lKCksICJFeHBlY3RlZCBtZXNzYWdlIG5hbWUuIikpOwotICB9
Ci0gIERPKFBhcnNlTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIG1lc3NhZ2VfbG9jYXRpb24sIGNvbnRh
aW5pbmdfZmlsZSkpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotbmFtZXNwYWNlIHsKLQotY29uc3Qg
aW50IGtNYXhFeHRlbnNpb25SYW5nZVNlbnRpbmVsID0gLTE7Ci0KLWJvb2wgSXNNZXNzYWdlU2V0
V2lyZUZvcm1hdE1lc3NhZ2UoY29uc3QgRGVzY3JpcHRvclByb3RvJiBtZXNzYWdlKSB7Ci0gIGNv
bnN0IE1lc3NhZ2VPcHRpb25zJiBvcHRpb25zID0gbWVzc2FnZS5vcHRpb25zKCk7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgb3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbl9zaXplKCk7ICsraSkg
ewotICAgIGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24mIHVuaW50ZXJwcmV0ZWQgPSBvcHRpb25z
LnVuaW50ZXJwcmV0ZWRfb3B0aW9uKGkpOwotICAgIGlmICh1bmludGVycHJldGVkLm5hbWVfc2l6
ZSgpID09IDEgJiYKLSAgICAgICAgdW5pbnRlcnByZXRlZC5uYW1lKDApLm5hbWVfcGFydCgpID09
ICJtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCIgJiYKLSAgICAgICAgdW5pbnRlcnByZXRlZC5pZGVu
dGlmaWVyX3ZhbHVlKCkgPT0gInRydWUiKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
IH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBNb2RpZmllcyBhbnkgZXh0ZW5zaW9uIHJhbmdl
cyB0aGF0IHNwZWNpZmllZCAnbWF4JyBhcyB0aGUgZW5kIG9mIHRoZQotLy8gZXh0ZW5zaW9uIHJh
bmdlLCBhbmQgc2V0cyB0aGVtIHRvIHRoZSB0eXBlLXNwZWNpZmljIG1heGltdW0uIFRoZSBhY3R1
YWwgbWF4Ci0vLyB0YWcgbnVtYmVyIGNhbiBvbmx5IGJlIGRldGVybWluZWQgYWZ0ZXIgYWxsIG9w
dGlvbnMgaGF2ZSBiZWVuIHBhcnNlZC4KLXZvaWQgQWRqdXN0RXh0ZW5zaW9uUmFuZ2VzV2l0aE1h
eEVuZE51bWJlcihEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UpIHsKLSAgY29uc3QgYm9vbCBpc19t
ZXNzYWdlX3NldCA9IElzTWVzc2FnZVNldFdpcmVGb3JtYXRNZXNzYWdlKCptZXNzYWdlKTsKLSAg
Y29uc3QgaW50IG1heF9leHRlbnNpb25fbnVtYmVyID0gaXNfbWVzc2FnZV9zZXQgPwotICAgICAg
a2ludDMybWF4IDoKLSAgICAgIEZpZWxkRGVzY3JpcHRvcjo6a01heE51bWJlciArIDE7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+ZXh0ZW5zaW9uX3JhbmdlX3NpemUoKTsgKytpKSB7
Ci0gICAgaWYgKG1lc3NhZ2UtPmV4dGVuc2lvbl9yYW5nZShpKS5lbmQoKSA9PSBrTWF4RXh0ZW5z
aW9uUmFuZ2VTZW50aW5lbCkgewotICAgICAgbWVzc2FnZS0+bXV0YWJsZV9leHRlbnNpb25fcmFu
Z2UoaSktPnNldF9lbmQobWF4X2V4dGVuc2lvbl9udW1iZXIpOwotICAgIH0KLSAgfQotfQotCi19
ICAvLyBuYW1lc3BhY2UKLQotYm9vbCBQYXJzZXI6OlBhcnNlTWVzc2FnZUJsb2NrKERlc2NyaXB0
b3JQcm90byogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBM
b2NhdGlvblJlY29yZGVyJiBtZXNzYWdlX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRhaW5pbmdfZmlsZSkgewot
ICBETyhDb25zdW1lRW5kT2ZEZWNsYXJhdGlvbigieyIsICZtZXNzYWdlX2xvY2F0aW9uKSk7Ci0K
LSAgd2hpbGUgKCFUcnlDb25zdW1lRW5kT2ZEZWNsYXJhdGlvbigifSIsIE5VTEwpKSB7Ci0gICAg
aWYgKEF0RW5kKCkpIHsKLSAgICAgIEFkZEVycm9yKCJSZWFjaGVkIGVuZCBvZiBpbnB1dCBpbiBt
ZXNzYWdlIGRlZmluaXRpb24gKG1pc3NpbmcgJ30nKS4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAoIVBhcnNlTWVzc2FnZVN0YXRlbWVudChtZXNzYWdlLCBtZXNzYWdl
X2xvY2F0aW9uLCBjb250YWluaW5nX2ZpbGUpKSB7Ci0gICAgICAvLyBUaGlzIHN0YXRlbWVudCBm
YWlsZWQgdG8gcGFyc2UuICBTa2lwIGl0LCBidXQga2VlcCBsb29waW5nIHRvIHBhcnNlCi0gICAg
ICAvLyBvdGhlciBzdGF0ZW1lbnRzLgotICAgICAgU2tpcFN0YXRlbWVudCgpOwotICAgIH0KLSAg
fQotCi0gIGlmIChtZXNzYWdlLT5leHRlbnNpb25fcmFuZ2Vfc2l6ZSgpID4gMCkgewotICAgIEFk
anVzdEV4dGVuc2lvblJhbmdlc1dpdGhNYXhFbmROdW1iZXIobWVzc2FnZSk7Ci0gIH0KLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZU1lc3NhZ2VTdGF0ZW1lbnQoRGVzY3Jp
cHRvclByb3RvKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBMb2NhdGlvblJlY29yZGVyJiBtZXNzYWdlX2xvY2F0aW9uLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBjb250YWluaW5n
X2ZpbGUpIHsKLSAgaWYgKFRyeUNvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKCI7IiwgTlVMTCkpIHsK
LSAgICAvLyBlbXB0eSBzdGF0ZW1lbnQ7IGlnbm9yZQotICAgIHJldHVybiB0cnVlOwotICB9IGVs
c2UgaWYgKExvb2tpbmdBdCgibWVzc2FnZSIpKSB7Ci0gICAgTG9jYXRpb25SZWNvcmRlciBsb2Nh
dGlvbihtZXNzYWdlX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVz
Y3JpcHRvclByb3RvOjprTmVzdGVkVHlwZUZpZWxkTnVtYmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZS0+bmVzdGVkX3R5cGVfc2l6ZSgpKTsKLSAgICByZXR1cm4gUGFy
c2VNZXNzYWdlRGVmaW5pdGlvbihtZXNzYWdlLT5hZGRfbmVzdGVkX3R5cGUoKSwgbG9jYXRpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ19maWxlKTsKLSAg
fSBlbHNlIGlmIChMb29raW5nQXQoImVudW0iKSkgewotICAgIExvY2F0aW9uUmVjb3JkZXIgbG9j
YXRpb24obWVzc2FnZV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl
c2NyaXB0b3JQcm90bzo6a0VudW1UeXBlRmllbGROdW1iZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlLT5lbnVtX3R5cGVfc2l6ZSgpKTsKLSAgICByZXR1cm4gUGFyc2VF
bnVtRGVmaW5pdGlvbihtZXNzYWdlLT5hZGRfZW51bV90eXBlKCksIGxvY2F0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfZmlsZSk7Ci0gIH0gZWxzZSBpZiAo
TG9va2luZ0F0KCJleHRlbnNpb25zIikpIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9u
KG1lc3NhZ2VfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlw
dG9yUHJvdG86OmtFeHRlbnNpb25SYW5nZUZpZWxkTnVtYmVyKTsKLSAgICByZXR1cm4gUGFyc2VF
eHRlbnNpb25zKG1lc3NhZ2UsIGxvY2F0aW9uLCBjb250YWluaW5nX2ZpbGUpOwotICB9IGVsc2Ug
aWYgKExvb2tpbmdBdCgicmVzZXJ2ZWQiKSkgewotICAgIHJldHVybiBQYXJzZVJlc2VydmVkKG1l
c3NhZ2UsIG1lc3NhZ2VfbG9jYXRpb24pOwotICB9IGVsc2UgaWYgKExvb2tpbmdBdCgiZXh0ZW5k
IikpIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9uKG1lc3NhZ2VfbG9jYXRpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yUHJvdG86OmtFeHRlbnNpb25G
aWVsZE51bWJlcik7Ci0gICAgcmV0dXJuIFBhcnNlRXh0ZW5kKG1lc3NhZ2UtPm11dGFibGVfZXh0
ZW5zaW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UtPm11dGFibGVfbmVzdGVk
X3R5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9sb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclByb3RvOjprTmVzdGVkVHlwZUZpZWxkTnVtYmVy
LAotICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiwgY29udGFpbmluZ19maWxlKTsKLSAg
fSBlbHNlIGlmIChMb29raW5nQXQoIm9wdGlvbiIpKSB7Ci0gICAgTG9jYXRpb25SZWNvcmRlciBs
b2NhdGlvbihtZXNzYWdlX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVzY3JpcHRvclByb3RvOjprT3B0aW9uc0ZpZWxkTnVtYmVyKTsKLSAgICByZXR1cm4gUGFyc2VP
cHRpb24obWVzc2FnZS0+bXV0YWJsZV9vcHRpb25zKCksIGxvY2F0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICBjb250YWluaW5nX2ZpbGUsIE9QVElPTl9TVEFURU1FTlQpOwotICB9IGVsc2Ug
aWYgKExvb2tpbmdBdCgib25lb2YiKSkgewotICAgIGludCBvbmVvZl9pbmRleCA9IG1lc3NhZ2Ut
Pm9uZW9mX2RlY2xfc2l6ZSgpOwotICAgIExvY2F0aW9uUmVjb3JkZXIgb25lb2ZfbG9jYXRpb24o
bWVzc2FnZV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl
c2NyaXB0b3JQcm90bzo6a09uZW9mRGVjbEZpZWxkTnVtYmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb25lb2ZfaW5kZXgpOwotCi0gICAgcmV0dXJuIFBhcnNlT25lb2Yo
bWVzc2FnZS0+YWRkX29uZW9mX2RlY2woKSwgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAg
ICBvbmVvZl9pbmRleCwgb25lb2ZfbG9jYXRpb24sIG1lc3NhZ2VfbG9jYXRpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgY29udGFpbmluZ19maWxlKTsKLSAgfSBlbHNlIHsKLSAgICBMb2NhdGlv
blJlY29yZGVyIGxvY2F0aW9uKG1lc3NhZ2VfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEZXNjcmlwdG9yUHJvdG86OmtGaWVsZEZpZWxkTnVtYmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+ZmllbGRfc2l6ZSgpKTsKLSAgICByZXR1cm4g
UGFyc2VNZXNzYWdlRmllbGQobWVzc2FnZS0+YWRkX2ZpZWxkKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2UtPm11dGFibGVfbmVzdGVkX3R5cGUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGVzY3JpcHRvclByb3RvOjprTmVzdGVkVHlwZUZpZWxkTnVtYmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGFpbmluZ19maWxlKTsKLSAgfQotfQotCi1ib29sIFBhcnNlcjo6UGFyc2VNZXNz
YWdlRmllbGQoRmllbGREZXNjcmlwdG9yUHJvdG8qIGZpZWxkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlcGVhdGVkUHRyRmllbGQ8RGVzY3JpcHRvclByb3RvPiogbWVzc2FnZXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYg
cGFyZW50X2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsb2Nh
dGlvbl9maWVsZF9udW1iZXJfZm9yX25lc3RlZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IExvY2F0aW9uUmVjb3JkZXImIGZpZWxkX2xvY2F0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRh
aW5pbmdfZmlsZSkgewotICB7Ci0gICAgTG9jYXRpb25SZWNvcmRlciBsb2NhdGlvbihmaWVsZF9s
b2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclBy
b3RvOjprTGFiZWxGaWVsZE51bWJlcik7Ci0gICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxhYmVs
IGxhYmVsOwotICAgIGlmIChQYXJzZUxhYmVsKCZsYWJlbCwgY29udGFpbmluZ19maWxlKSkgewot
ICAgICAgZmllbGQtPnNldF9sYWJlbChsYWJlbCk7Ci0gICAgICBpZiAobGFiZWwgPT0gRmllbGRE
ZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElPTkFMICYmCi0gICAgICAgICAgc3ludGF4X2lkZW50
aWZpZXJfID09ICJwcm90bzMiKSB7Ci0gICAgICAgIEFkZEVycm9yKAotICAgICAgICAgICAgIkV4
cGxpY2l0ICdvcHRpb25hbCcgbGFiZWxzIGFyZSBkaXNhbGxvd2VkIGluIHRoZSBQcm90bzMgc3lu
dGF4LiAiCi0gICAgICAgICAgICAiVG8gZGVmaW5lICdvcHRpb25hbCcgZmllbGRzIGluIFByb3Rv
Mywgc2ltcGx5IHJlbW92ZSB0aGUgIgotICAgICAgICAgICAgIidvcHRpb25hbCcgbGFiZWwsIGFz
IGZpZWxkcyBhcmUgJ29wdGlvbmFsJyBieSBkZWZhdWx0LiIpOwotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIHJldHVybiBQYXJzZU1lc3NhZ2VGaWVsZE5vTGFiZWwoZmllbGQsIG1lc3NhZ2VzLCBw
YXJlbnRfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b25fZmllbGRfbnVtYmVyX2Zvcl9uZXN0ZWRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWVsZF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250YWluaW5nX2ZpbGUpOwotfQotCi1ib29sIFBhcnNlcjo6UGFyc2VNZXNzYWdlRmll
bGROb0xhYmVsKAotICAgIEZpZWxkRGVzY3JpcHRvclByb3RvKiBmaWVsZCwKLSAgICBSZXBlYXRl
ZFB0ckZpZWxkPERlc2NyaXB0b3JQcm90bz4qIG1lc3NhZ2VzLAotICAgIGNvbnN0IExvY2F0aW9u
UmVjb3JkZXImIHBhcmVudF9sb2NhdGlvbiwKLSAgICBpbnQgbG9jYXRpb25fZmllbGRfbnVtYmVy
X2Zvcl9uZXN0ZWRfdHlwZSwKLSAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBmaWVsZF9sb2Nh
dGlvbiwKLSAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBjb250YWluaW5nX2ZpbGUpIHsK
LSAgTWFwRmllbGQgbWFwX2ZpZWxkOwotICAvLyBQYXJzZSB0eXBlLgotICB7Ci0gICAgTG9jYXRp
b25SZWNvcmRlciBsb2NhdGlvbihmaWVsZF9sb2NhdGlvbik7ICAvLyBhZGQgcGF0aCBsYXRlcgot
ICAgIGxvY2F0aW9uLlJlY29yZExlZ2FjeUxvY2F0aW9uKGZpZWxkLCBEZXNjcmlwdG9yUG9vbDo6
RXJyb3JDb2xsZWN0b3I6OlRZUEUpOwotCi0gICAgYm9vbCB0eXBlX3BhcnNlZCA9IGZhbHNlOwot
ICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpUeXBlIHR5cGUgPSBGaWVsZERlc2NyaXB0b3JQcm90
bzo6VFlQRV9JTlQzMjsKLSAgICBzdHJpbmcgdHlwZV9uYW1lOwotCi0gICAgLy8gU3BlY2lhbCBj
YXNlIG1hcCBmaWVsZC4gV2Ugb25seSB0cmVhdCB0aGUgZmllbGQgYXMgYSBtYXAgZmllbGQgaWYg
dGhlCi0gICAgLy8gZmllbGQgdHlwZSBuYW1lIHN0YXJ0cyB3aXRoIHRoZSB3b3JkICJtYXAiIHdp
dGggYSBmb2xsb3dpbmcgIjwiLgotICAgIGlmIChUcnlDb25zdW1lKCJtYXAiKSkgewotICAgICAg
aWYgKExvb2tpbmdBdCgiPCIpKSB7Ci0gICAgICAgIG1hcF9maWVsZC5pc19tYXBfZmllbGQgPSB0
cnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRmFsc2UgcG9zaXRpdmUKLSAgICAgICAg
dHlwZV9wYXJzZWQgPSB0cnVlOwotICAgICAgICB0eXBlX25hbWUgPSAibWFwIjsKLSAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKG1hcF9maWVsZC5pc19tYXBfZmllbGQpIHsKLSAgICAgIGlmIChmaWVs
ZC0+aGFzX29uZW9mX2luZGV4KCkpIHsKLSAgICAgICAgQWRkRXJyb3IoIk1hcCBmaWVsZHMgYXJl
IG5vdCBhbGxvd2VkIGluIG9uZW9mcy4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotICAgICAgaWYgKGZpZWxkLT5oYXNfbGFiZWwoKSkgewotICAgICAgICBBZGRFcnJvcigKLSAg
ICAgICAgICAgICJGaWVsZCBsYWJlbHMgKHJlcXVpcmVkL29wdGlvbmFsL3JlcGVhdGVkKSBhcmUg
bm90IGFsbG93ZWQgb24gIgotICAgICAgICAgICAgIm1hcCBmaWVsZHMuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChmaWVsZC0+aGFzX2V4dGVuZGVlKCkpIHsK
LSAgICAgICAgQWRkRXJyb3IoIk1hcCBmaWVsZHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIGV4dGVu
c2lvbnMuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGZpZWxkLT5z
ZXRfbGFiZWwoRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX1JFUEVBVEVEKTsKLSAgICAgIERP
KENvbnN1bWUoIjwiKSk7Ci0gICAgICBETyhQYXJzZVR5cGUoJm1hcF9maWVsZC5rZXlfdHlwZSwg
Jm1hcF9maWVsZC5rZXlfdHlwZV9uYW1lKSk7Ci0gICAgICBETyhDb25zdW1lKCIsIikpOwotICAg
ICAgRE8oUGFyc2VUeXBlKCZtYXBfZmllbGQudmFsdWVfdHlwZSwgJm1hcF9maWVsZC52YWx1ZV90
eXBlX25hbWUpKTsKLSAgICAgIERPKENvbnN1bWUoIj4iKSk7Ci0gICAgICAvLyBEZWZlciBzZXR0
aW5nIG9mIHRoZSB0eXBlIG5hbWUgb2YgdGhlIG1hcCBmaWVsZCB1bnRpbCB0aGUKLSAgICAgIC8v
IGZpZWxkIG5hbWUgaXMgcGFyc2VkLiBBZGQgdGhlIHNvdXJjZSBsb2NhdGlvbiB0aG91Z2guCi0g
ICAgICBsb2NhdGlvbi5BZGRQYXRoKEZpZWxkRGVzY3JpcHRvclByb3RvOjprVHlwZU5hbWVGaWVs
ZE51bWJlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBu
byBleHBsaWNpdCBsYWJlbCBpcyBnaXZlbiBmb3IgYSBub24tbWFwIGZpZWxkLgotICAgICAgaWYg
KCFmaWVsZC0+aGFzX2xhYmVsKCkgJiYgRGVmYXVsdFRvT3B0aW9uYWxGaWVsZHMoKSkgewotICAg
ICAgICBmaWVsZC0+c2V0X2xhYmVsKEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05B
TCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWZpZWxkLT5oYXNfbGFiZWwoKSkgewotICAgICAgICBB
ZGRFcnJvcigiRXhwZWN0ZWQgXCJyZXF1aXJlZFwiLCBcIm9wdGlvbmFsXCIsIG9yIFwicmVwZWF0
ZWRcIi4iKTsKLSAgICAgICAgLy8gV2UgY2FuIGFjdHVhbGx5IHJlYXNvbmFibHkgcmVjb3ZlciBo
ZXJlIGJ5IGp1c3QgYXNzdW1pbmcgdGhlIHVzZXIKLSAgICAgICAgLy8gZm9yZ290IHRoZSBsYWJl
bCBhbHRvZ2V0aGVyLgotICAgICAgICBmaWVsZC0+c2V0X2xhYmVsKEZpZWxkRGVzY3JpcHRvclBy
b3RvOjpMQUJFTF9PUFRJT05BTCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEhhbmRsZSB0aGUgY2Fz
ZSB3aGVyZSB0aGUgYWN0dWFsIHR5cGUgaXMgYSBtZXNzYWdlIG9yIGVudW0gbmFtZWQgIm1hcCIs
Ci0gICAgICAvLyB3aGljaCB3ZSBhbHJlYWR5IGNvbnN1bWVkIGluIHRoZSBjb2RlIGFib3ZlLgot
ICAgICAgaWYgKCF0eXBlX3BhcnNlZCkgewotICAgICAgICBETyhQYXJzZVR5cGUoJnR5cGUsICZ0
eXBlX25hbWUpKTsKLSAgICAgIH0KLSAgICAgIGlmICh0eXBlX25hbWUuZW1wdHkoKSkgewotICAg
ICAgICBsb2NhdGlvbi5BZGRQYXRoKEZpZWxkRGVzY3JpcHRvclByb3RvOjprVHlwZUZpZWxkTnVt
YmVyKTsKLSAgICAgICAgZmllbGQtPnNldF90eXBlKHR5cGUpOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgbG9jYXRpb24uQWRkUGF0aChGaWVsZERlc2NyaXB0b3JQcm90bzo6a1R5cGVOYW1lRmll
bGROdW1iZXIpOwotICAgICAgICBmaWVsZC0+c2V0X3R5cGVfbmFtZSh0eXBlX25hbWUpOwotICAg
ICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFBhcnNlIG5hbWUgYW5kICc9Jy4KLSAgaW86OlRva2Vu
aXplcjo6VG9rZW4gbmFtZV90b2tlbiA9IGlucHV0Xy0+Y3VycmVudCgpOwotICB7Ci0gICAgTG9j
YXRpb25SZWNvcmRlciBsb2NhdGlvbihmaWVsZF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjprTmFtZUZpZWxkTnVtYmVyKTsKLSAg
ICBsb2NhdGlvbi5SZWNvcmRMZWdhY3lMb2NhdGlvbihmaWVsZCwgRGVzY3JpcHRvclBvb2w6OkVy
cm9yQ29sbGVjdG9yOjpOQU1FKTsKLSAgICBETyhDb25zdW1lSWRlbnRpZmllcihmaWVsZC0+bXV0
YWJsZV9uYW1lKCksICJFeHBlY3RlZCBmaWVsZCBuYW1lLiIpKTsKLSAgfQotICBETyhDb25zdW1l
KCI9IiwgIk1pc3NpbmcgZmllbGQgbnVtYmVyLiIpKTsKLQotICAvLyBQYXJzZSBmaWVsZCBudW1i
ZXIuCi0gIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9uKGZpZWxkX2xvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OmtOdW1i
ZXJGaWVsZE51bWJlcik7Ci0gICAgbG9jYXRpb24uUmVjb3JkTGVnYWN5TG9jYXRpb24oCi0gICAg
ICAgIGZpZWxkLCBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok5VTUJFUik7Ci0gICAg
aW50IG51bWJlcjsKLSAgICBETyhDb25zdW1lSW50ZWdlcigmbnVtYmVyLCAiRXhwZWN0ZWQgZmll
bGQgbnVtYmVyLiIpKTsKLSAgICBmaWVsZC0+c2V0X251bWJlcihudW1iZXIpOwotICB9Ci0KLSAg
Ly8gUGFyc2Ugb3B0aW9ucy4KLSAgRE8oUGFyc2VGaWVsZE9wdGlvbnMoZmllbGQsIGZpZWxkX2xv
Y2F0aW9uLCBjb250YWluaW5nX2ZpbGUpKTsKLQotICAvLyBEZWFsIHdpdGggZ3JvdXBzLgotICBp
ZiAoZmllbGQtPmhhc190eXBlKCkgJiYgZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3JQ
cm90bzo6VFlQRV9HUk9VUCkgewotICAgIC8vIEF3a3dhcmQ6ICBTaW5jZSBhIGdyb3VwIGRlY2xh
cmVzIGJvdGggYSBtZXNzYWdlIHR5cGUgYW5kIGEgZmllbGQsIHdlCi0gICAgLy8gICBoYXZlIHRv
IGNyZWF0ZSBvdmVybGFwcGluZyBsb2NhdGlvbnMuCi0gICAgTG9jYXRpb25SZWNvcmRlciBncm91
cF9sb2NhdGlvbihwYXJlbnRfbG9jYXRpb24pOwotICAgIGdyb3VwX2xvY2F0aW9uLlN0YXJ0QXQo
ZmllbGRfbG9jYXRpb24pOwotICAgIGdyb3VwX2xvY2F0aW9uLkFkZFBhdGgobG9jYXRpb25fZmll
bGRfbnVtYmVyX2Zvcl9uZXN0ZWRfdHlwZSk7Ci0gICAgZ3JvdXBfbG9jYXRpb24uQWRkUGF0aCht
ZXNzYWdlcy0+c2l6ZSgpKTsKLQotICAgIERlc2NyaXB0b3JQcm90byogZ3JvdXAgPSBtZXNzYWdl
cy0+QWRkKCk7Ci0gICAgZ3JvdXAtPnNldF9uYW1lKGZpZWxkLT5uYW1lKCkpOwotCi0gICAgLy8g
UmVjb3JkIG5hbWUgbG9jYXRpb24gdG8gbWF0Y2ggdGhlIGZpZWxkIG5hbWUncyBsb2NhdGlvbi4K
LSAgICB7Ci0gICAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9uKGdyb3VwX2xvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yUHJvdG86OmtOYW1lRmll
bGROdW1iZXIpOwotICAgICAgbG9jYXRpb24uU3RhcnRBdChuYW1lX3Rva2VuKTsKLSAgICAgIGxv
Y2F0aW9uLkVuZEF0KG5hbWVfdG9rZW4pOwotICAgICAgbG9jYXRpb24uUmVjb3JkTGVnYWN5TG9j
YXRpb24oCi0gICAgICAgICAgZ3JvdXAsIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6
TkFNRSk7Ci0gICAgfQotCi0gICAgLy8gVGhlIGZpZWxkJ3MgdHlwZV9uYW1lIGFsc28gY29tZXMg
ZnJvbSB0aGUgbmFtZS4gIENvbmZ1c2luZyEKLSAgICB7Ci0gICAgICBMb2NhdGlvblJlY29yZGVy
IGxvY2F0aW9uKGZpZWxkX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGaWVsZERlc2NyaXB0b3JQcm90bzo6a1R5cGVOYW1lRmllbGROdW1iZXIpOwotICAgICAgbG9j
YXRpb24uU3RhcnRBdChuYW1lX3Rva2VuKTsKLSAgICAgIGxvY2F0aW9uLkVuZEF0KG5hbWVfdG9r
ZW4pOwotICAgIH0KLQotICAgIC8vIEFzIGEgaGFjayBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxp
dHksIHdlIGZvcmNlIHRoZSBncm91cCBuYW1lIHRvIHN0YXJ0Ci0gICAgLy8gd2l0aCBhIGNhcGl0
YWwgbGV0dGVyIGFuZCBsb3dlci1jYXNlIHRoZSBmaWVsZCBuYW1lLiAgTmV3IGNvZGUgc2hvdWxk
Ci0gICAgLy8gbm90IHVzZSBncm91cHM7IGl0IHNob3VsZCB1c2UgbmVzdGVkIG1lc3NhZ2VzLgot
ICAgIGlmIChncm91cC0+bmFtZSgpWzBdIDwgJ0EnIHx8ICdaJyA8IGdyb3VwLT5uYW1lKClbMF0p
IHsKLSAgICAgIEFkZEVycm9yKG5hbWVfdG9rZW4ubGluZSwgbmFtZV90b2tlbi5jb2x1bW4sCi0g
ICAgICAgICJHcm91cCBuYW1lcyBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsIGxldHRlci4iKTsK
LSAgICB9Ci0gICAgTG93ZXJTdHJpbmcoZmllbGQtPm11dGFibGVfbmFtZSgpKTsKLQotICAgIGZp
ZWxkLT5zZXRfdHlwZV9uYW1lKGdyb3VwLT5uYW1lKCkpOwotICAgIGlmIChMb29raW5nQXQoInsi
KSkgewotICAgICAgRE8oUGFyc2VNZXNzYWdlQmxvY2soZ3JvdXAsIGdyb3VwX2xvY2F0aW9uLCBj
b250YWluaW5nX2ZpbGUpKTsKLSAgICB9IGVsc2UgewotICAgICAgQWRkRXJyb3IoIk1pc3Npbmcg
Z3JvdXAgYm9keS4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0g
ICAgRE8oQ29uc3VtZUVuZE9mRGVjbGFyYXRpb24oIjsiLCAmZmllbGRfbG9jYXRpb24pKTsKLSAg
fQotCi0gIC8vIENyZWF0ZSBhIG1hcCBlbnRyeSB0eXBlIGlmIHRoaXMgaXMgYSBtYXAgZmllbGQu
Ci0gIGlmIChtYXBfZmllbGQuaXNfbWFwX2ZpZWxkKSB7Ci0gICAgR2VuZXJhdGVNYXBFbnRyeSht
YXBfZmllbGQsIGZpZWxkLCBtZXNzYWdlcyk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBQYXJzZXI6OkdlbmVyYXRlTWFwRW50cnkoY29uc3QgTWFwRmllbGQmIG1hcF9maWVsZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvKiBmaWVs
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGVhdGVkUHRyRmllbGQ8RGVzY3Jp
cHRvclByb3RvPiogbWVzc2FnZXMpIHsKLSAgRGVzY3JpcHRvclByb3RvKiBlbnRyeSA9IG1lc3Nh
Z2VzLT5BZGQoKTsKLSAgc3RyaW5nIGVudHJ5X25hbWUgPSBNYXBFbnRyeU5hbWUoZmllbGQtPm5h
bWUoKSk7Ci0gIGZpZWxkLT5zZXRfdHlwZV9uYW1lKGVudHJ5X25hbWUpOwotICBlbnRyeS0+c2V0
X25hbWUoZW50cnlfbmFtZSk7Ci0gIGVudHJ5LT5tdXRhYmxlX29wdGlvbnMoKS0+c2V0X21hcF9l
bnRyeSh0cnVlKTsKLSAgRmllbGREZXNjcmlwdG9yUHJvdG8qIGtleV9maWVsZCA9IGVudHJ5LT5h
ZGRfZmllbGQoKTsKLSAga2V5X2ZpZWxkLT5zZXRfbmFtZSgia2V5Iik7Ci0gIGtleV9maWVsZC0+
c2V0X2xhYmVsKEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCk7Ci0gIGtleV9m
aWVsZC0+c2V0X251bWJlcigxKTsKLSAgaWYgKG1hcF9maWVsZC5rZXlfdHlwZV9uYW1lLmVtcHR5
KCkpIHsKLSAgICBrZXlfZmllbGQtPnNldF90eXBlKG1hcF9maWVsZC5rZXlfdHlwZSk7Ci0gIH0g
ZWxzZSB7Ci0gICAga2V5X2ZpZWxkLT5zZXRfdHlwZV9uYW1lKG1hcF9maWVsZC5rZXlfdHlwZV9u
YW1lKTsKLSAgfQotICBGaWVsZERlc2NyaXB0b3JQcm90byogdmFsdWVfZmllbGQgPSBlbnRyeS0+
YWRkX2ZpZWxkKCk7Ci0gIHZhbHVlX2ZpZWxkLT5zZXRfbmFtZSgidmFsdWUiKTsKLSAgdmFsdWVf
ZmllbGQtPnNldF9sYWJlbChGaWVsZERlc2NyaXB0b3JQcm90bzo6TEFCRUxfT1BUSU9OQUwpOwot
ICB2YWx1ZV9maWVsZC0+c2V0X251bWJlcigyKTsKLSAgaWYgKG1hcF9maWVsZC52YWx1ZV90eXBl
X25hbWUuZW1wdHkoKSkgewotICAgIHZhbHVlX2ZpZWxkLT5zZXRfdHlwZShtYXBfZmllbGQudmFs
dWVfdHlwZSk7Ci0gIH0gZWxzZSB7Ci0gICAgdmFsdWVfZmllbGQtPnNldF90eXBlX25hbWUobWFw
X2ZpZWxkLnZhbHVlX3R5cGVfbmFtZSk7Ci0gIH0KLSAgLy8gUHJvcGFnYXRlIHRoZSAiZW5mb3Jj
ZV91dGY4IiBvcHRpb24gdG8ga2V5IGFuZCB2YWx1ZSBmaWVsZHMgaWYgdGhleQotICAvLyBhcmUg
c3RyaW5ncy4gVGhpcyBoZWxwcyBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgY29kZSBn
ZW5lcmF0b3JzCi0gIC8vIGFuZCBhbHNvIHJlZmxlY3Rpb24tYmFzZWQgcGFyc2luZyBjb2RlLgot
ICAvLwotICAvLyBUaGUgZm9sbG93aW5nIGRlZmluaXRpb246Ci0gIC8vICAgbWVzc2FnZSBGb28g
ewotICAvLyAgICAgbWFwPHN0cmluZywgc3RyaW5nPiB2YWx1ZSA9IDEgW2VuZm9yY2VfdXRmOCA9
IGZhbHNlXTsKLSAgLy8gICB9Ci0gIC8vIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXM6Ci0gIC8vICAg
bWVzc2FnZSBGb28gewotICAvLyAgICAgbWVzc2FnZSBWYWx1ZUVudHJ5IHsKLSAgLy8gICAgICAg
b3B0aW9uIG1hcF9lbnRyeSA9IHRydWU7Ci0gIC8vICAgICAgIHN0cmluZyBrZXkgPSAxIFtlbmZv
cmNlX3V0ZjggPSBmYWxzZV07Ci0gIC8vICAgICAgIHN0cmluZyB2YWx1ZSA9IDIgW2VuZm9yY2Vf
dXRmOCA9IGZhbHNlXTsKLSAgLy8gICAgIH0KLSAgLy8gICAgIHJlcGVhdGVkIFZhbHVlRW50cnkg
dmFsdWUgPSAxIFtlbmZvcmNlX3V0ZjggPSBmYWxzZV07Ci0gIC8vICB9Ci0gIC8vCi0gIC8vIFRP
RE8oeGlhb2ZlbmcpOiBSZW1vdmUgdGhpcyB3aGVuIHRoZSAiZW5mb3JjZV91dGY4IiBvcHRpb24g
aXMgcmVtb3ZlZAotICAvLyBmcm9tIHByb3RvY29sIGNvbXBpbGVyLgotICBmb3IgKGludCBpID0g
MDsgaSA8IGZpZWxkLT5vcHRpb25zKCkudW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpOyArK2kp
IHsKLSAgICBjb25zdCBVbmludGVycHJldGVkT3B0aW9uJiBvcHRpb24gPQotICAgICAgICBmaWVs
ZC0+b3B0aW9ucygpLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKGkpOwotICAgIGlmIChvcHRpb24ubmFt
ZV9zaXplKCkgPT0gMSAmJgotICAgICAgICBvcHRpb24ubmFtZSgwKS5uYW1lX3BhcnQoKSA9PSAi
ZW5mb3JjZV91dGY4IiAmJgotICAgICAgICAhb3B0aW9uLm5hbWUoMCkuaXNfZXh0ZW5zaW9uKCkp
IHsKLSAgICAgIGlmIChrZXlfZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3JQcm90bzo6
VFlQRV9TVFJJTkcpIHsKLSAgICAgICAga2V5X2ZpZWxkLT5tdXRhYmxlX29wdGlvbnMoKS0+YWRk
X3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkKLSAgICAgICAgICAgIC0+Q29weUZyb20ob3B0aW9uKTsK
LSAgICAgIH0KLSAgICAgIGlmICh2YWx1ZV9maWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRv
clByb3RvOjpUWVBFX1NUUklORykgewotICAgICAgICB2YWx1ZV9maWVsZC0+bXV0YWJsZV9vcHRp
b25zKCktPmFkZF91bmludGVycHJldGVkX29wdGlvbigpCi0gICAgICAgICAgICAtPkNvcHlGcm9t
KG9wdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZUZp
ZWxkT3B0aW9ucyhGaWVsZERlc2NyaXB0b3JQcm90byogZmllbGQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgZmllbGRfbG9jYXRpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byog
Y29udGFpbmluZ19maWxlKSB7Ci0gIGlmICghTG9va2luZ0F0KCJbIikpIHJldHVybiB0cnVlOwot
Ci0gIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24oZmllbGRfbG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OmtPcHRpb25zRmllbGROdW1i
ZXIpOwotCi0gIERPKENvbnN1bWUoIlsiKSk7Ci0KLSAgLy8gUGFyc2UgZmllbGQgb3B0aW9ucy4K
LSAgZG8gewotICAgIGlmIChMb29raW5nQXQoImRlZmF1bHQiKSkgewotICAgICAgLy8gV2UgaW50
ZW50aW9uYWxseSBwYXNzIGZpZWxkX2xvY2F0aW9uIHJhdGhlciB0aGFuIGxvY2F0aW9uIGhlcmUs
IHNpbmNlCi0gICAgICAvLyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBub3QgYWN0dWFsbHkgYW4gb3B0
aW9uLgotICAgICAgRE8oUGFyc2VEZWZhdWx0QXNzaWdubWVudChmaWVsZCwgZmllbGRfbG9jYXRp
b24sIGNvbnRhaW5pbmdfZmlsZSkpOwotICAgIH0gZWxzZSBpZiAoTG9va2luZ0F0KCJqc29uX25h
bWUiKSkgewotICAgICAgLy8gTGlrZSBkZWZhdWx0IHZhbHVlLCB0aGlzICJqc29uX25hbWUiIGlz
IG5vdCBhbiBhY3R1YWwgb3B0aW9uLgotICAgICAgRE8oUGFyc2VKc29uTmFtZShmaWVsZCwgZmll
bGRfbG9jYXRpb24sIGNvbnRhaW5pbmdfZmlsZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBETyhQ
YXJzZU9wdGlvbihmaWVsZC0+bXV0YWJsZV9vcHRpb25zKCksIGxvY2F0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmluZ19maWxlLCBPUFRJT05fQVNTSUdOTUVOVCkpOwotICAgIH0K
LSAgfSB3aGlsZSAoVHJ5Q29uc3VtZSgiLCIpKTsKLQotICBETyhDb25zdW1lKCJdIikpOwotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQYXJzZXI6OlBhcnNlRGVmYXVsdEFzc2lnbm1lbnQoCi0g
ICAgRmllbGREZXNjcmlwdG9yUHJvdG8qIGZpZWxkLAotICAgIGNvbnN0IExvY2F0aW9uUmVjb3Jk
ZXImIGZpZWxkX2xvY2F0aW9uLAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRh
aW5pbmdfZmlsZSkgewotICBpZiAoZmllbGQtPmhhc19kZWZhdWx0X3ZhbHVlKCkpIHsKLSAgICBB
ZGRFcnJvcigiQWxyZWFkeSBzZXQgb3B0aW9uIFwiZGVmYXVsdFwiLiIpOwotICAgIGZpZWxkLT5j
bGVhcl9kZWZhdWx0X3ZhbHVlKCk7Ci0gIH0KLQotICBETyhDb25zdW1lKCJkZWZhdWx0IikpOwot
ICBETyhDb25zdW1lKCI9IikpOwotCi0gIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24oZmllbGRf
bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJv
dG86OmtEZWZhdWx0VmFsdWVGaWVsZE51bWJlcik7Ci0gIGxvY2F0aW9uLlJlY29yZExlZ2FjeUxv
Y2F0aW9uKAotICAgICAgZmllbGQsIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6REVG
QVVMVF9WQUxVRSk7Ci0gIHN0cmluZyogZGVmYXVsdF92YWx1ZSA9IGZpZWxkLT5tdXRhYmxlX2Rl
ZmF1bHRfdmFsdWUoKTsKLQotICBpZiAoIWZpZWxkLT5oYXNfdHlwZSgpKSB7Ci0gICAgLy8gVGhl
IGZpZWxkIGhhcyBhIHR5cGUgbmFtZSwgYnV0IHdlIGRvbid0IGtub3cgaWYgaXQgaXMgYSBtZXNz
YWdlIG9yIGFuCi0gICAgLy8gZW51bSB5ZXQuIChJZiBpdCB3ZXJlIGEgcHJpbWl0aXZlIHR5cGUs
IHxmaWVsZHwgd291bGQgaGF2ZSBhIHR5cGUgc2V0Ci0gICAgLy8gYWxyZWFkeS4pIEluIHRoaXMg
Y2FzZSwgc2ltcGx5IHRha2UgdGhlIGN1cnJlbnQgc3RyaW5nIGFzIHRoZSBkZWZhdWx0Ci0gICAg
Ly8gdmFsdWU7IHdlIHdpbGwgY2F0Y2ggdGhlIGVycm9yIGxhdGVyIGlmIGl0IGlzIG5vdCBhIHZh
bGlkIGVudW0gdmFsdWUuCi0gICAgLy8gKE4uQi4gdGhhdCB3ZSBkbyBub3QgY2hlY2sgd2hldGhl
ciB0aGUgY3VycmVudCB0b2tlbiBpcyBhbiBpZGVudGlmaWVyOgotICAgIC8vIGRvaW5nIHNvIHRo
cm93cyBzdHJhbmdlIGVycm9ycyB3aGVuIHRoZSB1c2VyIG1pc3R5cGVzIGEgcHJpbWl0aXZlCi0g
ICAgLy8gdHlwZW5hbWUgYW5kIHdlIGFzc3VtZSBpdCdzIGFuIGVudW0uIEUuZy46ICJvcHRpb25h
bCBpbnQgZm9vID0gMSBbZGVmYXVsdAotICAgIC8vID0gNDJdIi4gSW4gc3VjaCBhIGNhc2UgdGhl
IGZ1bmRhbWVudGFsIGVycm9yIGlzIHJlYWxseSB0aGF0ICJpbnQiIGlzIG5vdAotICAgIC8vIGEg
dHlwZSwgbm90IHRoYXQgIjQyIiBpcyBub3QgYW4gaWRlbnRpZmllci4gU2VlIGIvMTI1MzM1ODIu
KQotICAgICpkZWZhdWx0X3ZhbHVlID0gaW5wdXRfLT5jdXJyZW50KCkudGV4dDsKLSAgICBpbnB1
dF8tPk5leHQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHN3aXRjaCAoZmllbGQtPnR5
cGUoKSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfSU5UMzI6Ci0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9JTlQ2NDoKLSAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvclByb3RvOjpUWVBFX1NJTlQzMjoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3Rv
OjpUWVBFX1NJTlQ2NDoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX1NGSVhF
RDMyOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfU0ZJWEVENjQ6IHsKLSAg
ICAgIHVpbnQ2NCBtYXhfdmFsdWUgPSBraW50NjRtYXg7Ci0gICAgICBpZiAoZmllbGQtPnR5cGUo
KSA9PSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9JTlQzMiB8fAotICAgICAgICAgIGZpZWxk
LT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfU0lOVDMyIHx8Ci0gICAgICAg
ICAgZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9TRklYRUQzMikg
ewotICAgICAgICBtYXhfdmFsdWUgPSBraW50MzJtYXg7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRo
ZXNlIHR5cGVzIGNhbiBiZSBuZWdhdGl2ZS4KLSAgICAgIGlmIChUcnlDb25zdW1lKCItIikpIHsK
LSAgICAgICAgZGVmYXVsdF92YWx1ZS0+YXBwZW5kKCItIik7Ci0gICAgICAgIC8vIFR3bydzIGNv
bXBsZW1lbnQgYWx3YXlzIGhhcyBvbmUgbW9yZSBuZWdhdGl2ZSB2YWx1ZSB0aGFuIHBvc2l0aXZl
LgotICAgICAgICArK21heF92YWx1ZTsKLSAgICAgIH0KLSAgICAgIC8vIFBhcnNlIHRoZSBpbnRl
Z2VyIHRvIHZlcmlmeSB0aGF0IGl0IGlzIG5vdCBvdXQtb2YtcmFuZ2UuCi0gICAgICB1aW50NjQg
dmFsdWU7Ci0gICAgICBETyhDb25zdW1lSW50ZWdlcjY0KG1heF92YWx1ZSwgJnZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgaW50ZWdlciBmb3IgZmllbGQgZGVmYXVs
dCB2YWx1ZS4iKSk7Ci0gICAgICAvLyBBbmQgc3RyaW5naWZ5IGl0IGFnYWluLgotICAgICAgZGVm
YXVsdF92YWx1ZS0+YXBwZW5kKFNpbXBsZUl0b2EodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfVUlOVDMyOgotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfVUlOVDY0OgotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yUHJvdG86OlRZUEVfRklYRUQzMjoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3Rv
OjpUWVBFX0ZJWEVENjQ6IHsKLSAgICAgIHVpbnQ2NCBtYXhfdmFsdWUgPSBrdWludDY0bWF4Owot
ICAgICAgaWYgKGZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfVUlO
VDMyIHx8Ci0gICAgICAgICAgZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3JQcm90bzo6
VFlQRV9GSVhFRDMyKSB7Ci0gICAgICAgIG1heF92YWx1ZSA9IGt1aW50MzJtYXg7Ci0gICAgICB9
Ci0KLSAgICAgIC8vIE51bWVyaWMsIG5vdCBuZWdhdGl2ZS4KLSAgICAgIGlmIChUcnlDb25zdW1l
KCItIikpIHsKLSAgICAgICAgQWRkRXJyb3IoIlVuc2lnbmVkIGZpZWxkIGNhbid0IGhhdmUgbmVn
YXRpdmUgZGVmYXVsdCB2YWx1ZS4iKTsKLSAgICAgIH0KLSAgICAgIC8vIFBhcnNlIHRoZSBpbnRl
Z2VyIHRvIHZlcmlmeSB0aGF0IGl0IGlzIG5vdCBvdXQtb2YtcmFuZ2UuCi0gICAgICB1aW50NjQg
dmFsdWU7Ci0gICAgICBETyhDb25zdW1lSW50ZWdlcjY0KG1heF92YWx1ZSwgJnZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgaW50ZWdlciBmb3IgZmllbGQgZGVmYXVs
dCB2YWx1ZS4iKSk7Ci0gICAgICAvLyBBbmQgc3RyaW5naWZ5IGl0IGFnYWluLgotICAgICAgZGVm
YXVsdF92YWx1ZS0+YXBwZW5kKFNpbXBsZUl0b2EodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfRkxPQVQ6Ci0gICAgY2Fz
ZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9ET1VCTEU6Ci0gICAgICAvLyBUaGVzZSB0eXBl
cyBjYW4gYmUgbmVnYXRpdmUuCi0gICAgICBpZiAoVHJ5Q29uc3VtZSgiLSIpKSB7Ci0gICAgICAg
IGRlZmF1bHRfdmFsdWUtPmFwcGVuZCgiLSIpOwotICAgICAgfQotICAgICAgLy8gUGFyc2UgdGhl
IGludGVnZXIgYmVjYXVzZSB3ZSBoYXZlIHRvIGNvbnZlcnQgaGV4IGludGVnZXJzIHRvIGRlY2lt
YWwKLSAgICAgIC8vIGZsb2F0cy4KLSAgICAgIGRvdWJsZSB2YWx1ZTsKLSAgICAgIERPKENvbnN1
bWVOdW1iZXIoJnZhbHVlLCAiRXhwZWN0ZWQgbnVtYmVyLiIpKTsKLSAgICAgIC8vIEFuZCBzdHJp
bmdpZnkgaXQgYWdhaW4uCi0gICAgICBkZWZhdWx0X3ZhbHVlLT5hcHBlbmQoU2ltcGxlRHRvYSh2
YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvOjpU
WVBFX0JPT0w6Ci0gICAgICBpZiAoVHJ5Q29uc3VtZSgidHJ1ZSIpKSB7Ci0gICAgICAgIGRlZmF1
bHRfdmFsdWUtPmFzc2lnbigidHJ1ZSIpOwotICAgICAgfSBlbHNlIGlmIChUcnlDb25zdW1lKCJm
YWxzZSIpKSB7Ci0gICAgICAgIGRlZmF1bHRfdmFsdWUtPmFzc2lnbigiZmFsc2UiKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIEFkZEVycm9yKCJFeHBlY3RlZCBcInRydWVcIiBvciBcImZhbHNl
XCIuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9TVFJJTkc6Ci0gICAgICAvLyBOb3Rl
OiBXaGVuIGZpbGUgb3B0b24gamF2YV9zdHJpbmdfY2hlY2tfdXRmOCBpcyB0cnVlLCBpZiBhCi0g
ICAgICAvLyBub24tc3RyaW5nIHJlcHJlc2VudGF0aW9uIChlZyBieXRlW10pIGlzIGxhdGVyIHN1
cHBvcnRlZCwgaXQgbXVzdAotICAgICAgLy8gYmUgY2hlY2tlZCBmb3IgVVRGLTgtbmVzcy4KLSAg
ICAgIERPKENvbnN1bWVTdHJpbmcoZGVmYXVsdF92YWx1ZSwgIkV4cGVjdGVkIHN0cmluZyBmb3Ig
ZmllbGQgZGVmYXVsdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZS4iKSk7Ci0gICAg
ICBicmVhazsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfQllURVM6Ci0g
ICAgICBETyhDb25zdW1lU3RyaW5nKGRlZmF1bHRfdmFsdWUsICJFeHBlY3RlZCBzdHJpbmcuIikp
OwotICAgICAgKmRlZmF1bHRfdmFsdWUgPSBDRXNjYXBlKCpkZWZhdWx0X3ZhbHVlKTsKLSAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9FTlVNOgotICAg
ICAgRE8oQ29uc3VtZUlkZW50aWZpZXIoZGVmYXVsdF92YWx1ZSwgIkV4cGVjdGVkIGVudW0gaWRl
bnRpZmllciBmb3IgZmllbGQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlZmF1bHQgdmFsdWUuIikpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvclByb3RvOjpUWVBFX01FU1NBR0U6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQ
cm90bzo6VFlQRV9HUk9VUDoKLSAgICAgIEFkZEVycm9yKCJNZXNzYWdlcyBjYW4ndCBoYXZlIGRl
ZmF1bHQgdmFsdWVzLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZUpzb25OYW1lKAotICAgIEZpZWxkRGVzY3JpcHRv
clByb3RvKiBmaWVsZCwKLSAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBmaWVsZF9sb2NhdGlv
biwKLSAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBjb250YWluaW5nX2ZpbGUpIHsKLSAg
aWYgKGZpZWxkLT5oYXNfanNvbl9uYW1lKCkpIHsKLSAgICBBZGRFcnJvcigiQWxyZWFkeSBzZXQg
b3B0aW9uIFwianNvbl9uYW1lXCIuIik7Ci0gICAgZmllbGQtPmNsZWFyX2pzb25fbmFtZSgpOwot
ICB9Ci0KLSAgRE8oQ29uc3VtZSgianNvbl9uYW1lIikpOwotICBETyhDb25zdW1lKCI9IikpOwot
Ci0gIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24oZmllbGRfbG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OmtKc29uTmFtZUZpZWxkTnVt
YmVyKTsKLSAgbG9jYXRpb24uUmVjb3JkTGVnYWN5TG9jYXRpb24oCi0gICAgICBmaWVsZCwgRGVz
Y3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpPUFRJT05fVkFMVUUpOwotICBETyhDb25zdW1l
U3RyaW5nKGZpZWxkLT5tdXRhYmxlX2pzb25fbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICJF
eHBlY3RlZCBzdHJpbmcgZm9yIEpTT04gbmFtZS4iKSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi0K
LWJvb2wgUGFyc2VyOjpQYXJzZU9wdGlvbk5hbWVQYXJ0KFVuaW50ZXJwcmV0ZWRPcHRpb24qIHVu
aW50ZXJwcmV0ZWRfb3B0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTG9jYXRpb25SZWNvcmRlciYgcGFydF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRhaW5pbmdfZmlsZSkg
ewotICBVbmludGVycHJldGVkT3B0aW9uOjpOYW1lUGFydCogbmFtZSA9IHVuaW50ZXJwcmV0ZWRf
b3B0aW9uLT5hZGRfbmFtZSgpOwotICBzdHJpbmcgaWRlbnRpZmllcjsgIC8vIFdlIHBhcnNlIGlk
ZW50aWZpZXJzIGludG8gdGhpcyBzdHJpbmcuCi0gIGlmIChMb29raW5nQXQoIigiKSkgeyAgLy8g
VGhpcyBpcyBhbiBleHRlbnNpb24uCi0gICAgRE8oQ29uc3VtZSgiKCIpKTsKLQotICAgIHsKLSAg
ICAgIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24oCi0gICAgICAgICAgcGFydF9sb2NhdGlvbiwg
VW5pbnRlcnByZXRlZE9wdGlvbjo6TmFtZVBhcnQ6OmtOYW1lUGFydEZpZWxkTnVtYmVyKTsKLSAg
ICAgIC8vIEFuIGV4dGVuc2lvbiBuYW1lIGNvbnNpc3RzIG9mIGRvdC1zZXBhcmF0ZWQgaWRlbnRp
ZmllcnMsIGFuZCBtYXkgYmVnaW4KLSAgICAgIC8vIHdpdGggYSBkb3QuCi0gICAgICBpZiAoTG9v
a2luZ0F0VHlwZShpbzo6VG9rZW5pemVyOjpUWVBFX0lERU5USUZJRVIpKSB7Ci0gICAgICAgIERP
KENvbnN1bWVJZGVudGlmaWVyKCZpZGVudGlmaWVyLCAiRXhwZWN0ZWQgaWRlbnRpZmllci4iKSk7
Ci0gICAgICAgIG5hbWUtPm11dGFibGVfbmFtZV9wYXJ0KCktPmFwcGVuZChpZGVudGlmaWVyKTsK
LSAgICAgIH0KLSAgICAgIHdoaWxlIChMb29raW5nQXQoIi4iKSkgewotICAgICAgICBETyhDb25z
dW1lKCIuIikpOwotICAgICAgICBuYW1lLT5tdXRhYmxlX25hbWVfcGFydCgpLT5hcHBlbmQoIi4i
KTsKLSAgICAgICAgRE8oQ29uc3VtZUlkZW50aWZpZXIoJmlkZW50aWZpZXIsICJFeHBlY3RlZCBp
ZGVudGlmaWVyLiIpKTsKLSAgICAgICAgbmFtZS0+bXV0YWJsZV9uYW1lX3BhcnQoKS0+YXBwZW5k
KGlkZW50aWZpZXIpOwotICAgICAgfQotICAgIH0KLQotICAgIERPKENvbnN1bWUoIikiKSk7Ci0g
ICAgbmFtZS0+c2V0X2lzX2V4dGVuc2lvbih0cnVlKTsKLSAgfSBlbHNlIHsgIC8vIFRoaXMgaXMg
YSByZWd1bGFyIGZpZWxkLgotICAgIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24oCi0gICAgICAg
IHBhcnRfbG9jYXRpb24sIFVuaW50ZXJwcmV0ZWRPcHRpb246Ok5hbWVQYXJ0OjprTmFtZVBhcnRG
aWVsZE51bWJlcik7Ci0gICAgRE8oQ29uc3VtZUlkZW50aWZpZXIoJmlkZW50aWZpZXIsICJFeHBl
Y3RlZCBpZGVudGlmaWVyLiIpKTsKLSAgICBuYW1lLT5tdXRhYmxlX25hbWVfcGFydCgpLT5hcHBl
bmQoaWRlbnRpZmllcik7Ci0gICAgbmFtZS0+c2V0X2lzX2V4dGVuc2lvbihmYWxzZSk7Ci0gIH0K
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZVVuaW50ZXJwcmV0ZWRCbG9j
ayhzdHJpbmcqIHZhbHVlKSB7Ci0gIC8vIE5vdGUgdGhhdCBlbmNsb3NpbmcgYnJhY2VzIGFyZSBu
b3QgYWRkZWQgdG8gKnZhbHVlLgotICAvLyBXZSBkbyBOT1QgdXNlIENvbnN1bWVFbmRPZlN0YXRl
bWVudCBmb3IgdGhpcyBicmFjZSBiZWNhdXNlIGl0J3MgZGVsaW1pdGluZwotICAvLyBhbiBleHBy
ZXNzaW9uLCBub3QgYSBibG9jayBvZiBzdGF0ZW1lbnRzLgotICBETyhDb25zdW1lKCJ7IikpOwot
ICBpbnQgYnJhY2VfZGVwdGggPSAxOwotICB3aGlsZSAoIUF0RW5kKCkpIHsKLSAgICBpZiAoTG9v
a2luZ0F0KCJ7IikpIHsKLSAgICAgIGJyYWNlX2RlcHRoKys7Ci0gICAgfSBlbHNlIGlmIChMb29r
aW5nQXQoIn0iKSkgewotICAgICAgYnJhY2VfZGVwdGgtLTsKLSAgICAgIGlmIChicmFjZV9kZXB0
aCA9PSAwKSB7Ci0gICAgICAgIGlucHV0Xy0+TmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIH0KLSAgICB9Ci0gICAgLy8gVE9ETyhzYW5qYXkpOiBJbnRlcnByZXQgbGluZS9jb2x1
bW4gbnVtYmVycyB0byBwcmVzZXJ2ZSBmb3JtYXR0aW5nCi0gICAgaWYgKCF2YWx1ZS0+ZW1wdHko
KSkgdmFsdWUtPnB1c2hfYmFjaygnICcpOwotICAgIHZhbHVlLT5hcHBlbmQoaW5wdXRfLT5jdXJy
ZW50KCkudGV4dCk7Ci0gICAgaW5wdXRfLT5OZXh0KCk7Ci0gIH0KLSAgQWRkRXJyb3IoIlVuZXhw
ZWN0ZWQgZW5kIG9mIHN0cmVhbSB3aGlsZSBwYXJzaW5nIGFnZ3JlZ2F0ZSB2YWx1ZS4iKTsKLSAg
cmV0dXJuIGZhbHNlOwotfQotCi0vLyBXZSBkb24ndCBpbnRlcnByZXQgdGhlIG9wdGlvbiBoZXJl
LiBJbnN0ZWFkIHdlIHN0b3JlIGl0IGluIGFuCi0vLyBVbmludGVycHJldGVkT3B0aW9uLCB0byBi
ZSBpbnRlcnByZXRlZCBsYXRlci4KLWJvb2wgUGFyc2VyOjpQYXJzZU9wdGlvbihNZXNzYWdlKiBv
cHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExvY2F0aW9uUmVjb3JkZXIm
IG9wdGlvbnNfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURl
c2NyaXB0b3JQcm90byogY29udGFpbmluZ19maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAg
IE9wdGlvblN0eWxlIHN0eWxlKSB7Ci0gIC8vIENyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgdW5pbnRl
cnByZXRlZF9vcHRpb24gZmllbGQuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdW5pbnRlcnBy
ZXRlZF9vcHRpb25fZmllbGQgPSBvcHRpb25zLT5HZXREZXNjcmlwdG9yKCktPgotICAgICAgRmlu
ZEZpZWxkQnlOYW1lKCJ1bmludGVycHJldGVkX29wdGlvbiIpOwotICBHT09HTEVfQ0hFQ0sodW5p
bnRlcnByZXRlZF9vcHRpb25fZmllbGQgIT0gTlVMTCkKLSAgICAgIDw8ICJObyBmaWVsZCBuYW1l
ZCBcInVuaW50ZXJwcmV0ZWRfb3B0aW9uXCIgaW4gdGhlIE9wdGlvbnMgcHJvdG8uIjsKLQotICBj
b25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gb3B0aW9ucy0+R2V0UmVmbGVjdGlvbigpOwot
Ci0gIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24oCi0gICAgICBvcHRpb25zX2xvY2F0aW9uLCB1
bmludGVycHJldGVkX29wdGlvbl9maWVsZC0+bnVtYmVyKCksCi0gICAgICByZWZsZWN0aW9uLT5G
aWVsZFNpemUoKm9wdGlvbnMsIHVuaW50ZXJwcmV0ZWRfb3B0aW9uX2ZpZWxkKSk7Ci0KLSAgaWYg
KHN0eWxlID09IE9QVElPTl9TVEFURU1FTlQpIHsKLSAgICBETyhDb25zdW1lKCJvcHRpb24iKSk7
Ci0gIH0KLQotICBVbmludGVycHJldGVkT3B0aW9uKiB1bmludGVycHJldGVkX29wdGlvbiA9IGRv
d25fY2FzdDxVbmludGVycHJldGVkT3B0aW9uKj4oCi0gICAgICBvcHRpb25zLT5HZXRSZWZsZWN0
aW9uKCktPkFkZE1lc3NhZ2Uob3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bmludGVycHJldGVkX29wdGlvbl9maWVsZCkpOwotCi0gIC8vIFBhcnNl
IGRvdC1zZXBhcmF0ZWQgbmFtZS4KLSAgewotICAgIExvY2F0aW9uUmVjb3JkZXIgbmFtZV9sb2Nh
dGlvbihsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pbnRl
cnByZXRlZE9wdGlvbjo6a05hbWVGaWVsZE51bWJlcik7Ci0gICAgbmFtZV9sb2NhdGlvbi5SZWNv
cmRMZWdhY3lMb2NhdGlvbigKLSAgICAgICAgdW5pbnRlcnByZXRlZF9vcHRpb24sIERlc2NyaXB0
b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6T1BUSU9OX05BTUUpOwotCi0gICAgewotICAgICAgTG9j
YXRpb25SZWNvcmRlciBwYXJ0X2xvY2F0aW9uKG5hbWVfbG9jYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5pbnRlcnByZXRlZF9vcHRpb24tPm5hbWVfc2l6ZSgp
KTsKLSAgICAgIERPKFBhcnNlT3B0aW9uTmFtZVBhcnQodW5pbnRlcnByZXRlZF9vcHRpb24sIHBh
cnRfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfZmls
ZSkpOwotICAgIH0KLQotICAgIHdoaWxlIChMb29raW5nQXQoIi4iKSkgewotICAgICAgRE8oQ29u
c3VtZSgiLiIpKTsKLSAgICAgIExvY2F0aW9uUmVjb3JkZXIgcGFydF9sb2NhdGlvbihuYW1lX2xv
Y2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW50ZXJwcmV0
ZWRfb3B0aW9uLT5uYW1lX3NpemUoKSk7Ci0gICAgICBETyhQYXJzZU9wdGlvbk5hbWVQYXJ0KHVu
aW50ZXJwcmV0ZWRfb3B0aW9uLCBwYXJ0X2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250YWluaW5nX2ZpbGUpKTsKLSAgICB9Ci0gIH0KLQotICBETyhDb25zdW1lKCI9
IikpOwotCi0gIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIHZhbHVlX2xvY2F0aW9uKGxvY2F0aW9u
KTsKLSAgICB2YWx1ZV9sb2NhdGlvbi5SZWNvcmRMZWdhY3lMb2NhdGlvbigKLSAgICAgICAgdW5p
bnRlcnByZXRlZF9vcHRpb24sIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6T1BUSU9O
X1ZBTFVFKTsKLQotICAgIC8vIEFsbCB2YWx1ZXMgYXJlIGEgc2luZ2xlIHRva2VuLCBleGNlcHQg
Zm9yIG5lZ2F0aXZlIG51bWJlcnMsIHdoaWNoIGNvbnNpc3QKLSAgICAvLyBvZiBhIHNpbmdsZSAn
LScgc3ltYm9sLCBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIG51bWJlci4KLSAgICBib29sIGlzX25l
Z2F0aXZlID0gVHJ5Q29uc3VtZSgiLSIpOwotCi0gICAgc3dpdGNoIChpbnB1dF8tPmN1cnJlbnQo
KS50eXBlKSB7Ci0gICAgICBjYXNlIGlvOjpUb2tlbml6ZXI6OlRZUEVfU1RBUlQ6Ci0gICAgICAg
IEdPT0dMRV9MT0coRkFUQUwpIDw8ICJUcnlpbmcgdG8gcmVhZCB2YWx1ZSBiZWZvcmUgYW55IHRv
a2VucyBoYXZlIGJlZW4gcmVhZC4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGNh
c2UgaW86OlRva2VuaXplcjo6VFlQRV9FTkQ6Ci0gICAgICAgIEFkZEVycm9yKCJVbmV4cGVjdGVk
IGVuZCBvZiBzdHJlYW0gd2hpbGUgcGFyc2luZyBvcHRpb24gdmFsdWUuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgY2FzZSBpbzo6VG9rZW5pemVyOjpUWVBFX0lERU5USUZJRVI6
IHsKLSAgICAgICAgdmFsdWVfbG9jYXRpb24uQWRkUGF0aCgKLSAgICAgICAgICAgIFVuaW50ZXJw
cmV0ZWRPcHRpb246OmtJZGVudGlmaWVyVmFsdWVGaWVsZE51bWJlcik7Ci0gICAgICAgIGlmIChp
c19uZWdhdGl2ZSkgewotICAgICAgICAgIEFkZEVycm9yKCJJbnZhbGlkICctJyBzeW1ib2wgYmVm
b3JlIGlkZW50aWZpZXIuIik7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIHN0cmluZyB2YWx1ZTsKLSAgICAgICAgRE8oQ29uc3VtZUlkZW50aWZpZXIoJnZhbHVl
LCAiRXhwZWN0ZWQgaWRlbnRpZmllci4iKSk7Ci0gICAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9u
LT5zZXRfaWRlbnRpZmllcl92YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
Ci0gICAgICBjYXNlIGlvOjpUb2tlbml6ZXI6OlRZUEVfSU5URUdFUjogewotICAgICAgICB1aW50
NjQgdmFsdWU7Ci0gICAgICAgIHVpbnQ2NCBtYXhfdmFsdWUgPQotICAgICAgICAgICAgaXNfbmVn
YXRpdmUgPyBzdGF0aWNfY2FzdDx1aW50NjQ+KGtpbnQ2NG1heCkgKyAxIDoga3VpbnQ2NG1heDsK
LSAgICAgICAgRE8oQ29uc3VtZUludGVnZXI2NChtYXhfdmFsdWUsICZ2YWx1ZSwgIkV4cGVjdGVk
IGludGVnZXIuIikpOwotICAgICAgICBpZiAoaXNfbmVnYXRpdmUpIHsKLSAgICAgICAgICB2YWx1
ZV9sb2NhdGlvbi5BZGRQYXRoKAotICAgICAgICAgICAgICBVbmludGVycHJldGVkT3B0aW9uOjpr
TmVnYXRpdmVJbnRWYWx1ZUZpZWxkTnVtYmVyKTsKLSAgICAgICAgICB1bmludGVycHJldGVkX29w
dGlvbi0+c2V0X25lZ2F0aXZlX2ludF92YWx1ZSgKLSAgICAgICAgICAgICAgLXN0YXRpY19jYXN0
PGludDY0Pih2YWx1ZSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZhbHVlX2xvY2F0
aW9uLkFkZFBhdGgoCi0gICAgICAgICAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb246OmtQb3NpdGl2
ZUludFZhbHVlRmllbGROdW1iZXIpOwotICAgICAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9uLT5z
ZXRfcG9zaXRpdmVfaW50X3ZhbHVlKHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIH0KLQotICAgICAgY2FzZSBpbzo6VG9rZW5pemVyOjpUWVBFX0ZMT0FUOiB7Ci0gICAg
ICAgIHZhbHVlX2xvY2F0aW9uLkFkZFBhdGgoVW5pbnRlcnByZXRlZE9wdGlvbjo6a0RvdWJsZVZh
bHVlRmllbGROdW1iZXIpOwotICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIERPKENvbnN1
bWVOdW1iZXIoJnZhbHVlLCAiRXhwZWN0ZWQgbnVtYmVyLiIpKTsKLSAgICAgICAgdW5pbnRlcnBy
ZXRlZF9vcHRpb24tPnNldF9kb3VibGVfdmFsdWUoaXNfbmVnYXRpdmUgPyAtdmFsdWUgOiB2YWx1
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIGlvOjpUb2tlbml6ZXI6
OlRZUEVfU1RSSU5HOiB7Ci0gICAgICAgIHZhbHVlX2xvY2F0aW9uLkFkZFBhdGgoVW5pbnRlcnBy
ZXRlZE9wdGlvbjo6a1N0cmluZ1ZhbHVlRmllbGROdW1iZXIpOwotICAgICAgICBpZiAoaXNfbmVn
YXRpdmUpIHsKLSAgICAgICAgICBBZGRFcnJvcigiSW52YWxpZCAnLScgc3ltYm9sIGJlZm9yZSBz
dHJpbmcuIik7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHN0
cmluZyB2YWx1ZTsKLSAgICAgICAgRE8oQ29uc3VtZVN0cmluZygmdmFsdWUsICJFeHBlY3RlZCBz
dHJpbmcuIikpOwotICAgICAgICB1bmludGVycHJldGVkX29wdGlvbi0+c2V0X3N0cmluZ192YWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIGlvOjpUb2tl
bml6ZXI6OlRZUEVfU1lNQk9MOgotICAgICAgICBpZiAoTG9va2luZ0F0KCJ7IikpIHsKLSAgICAg
ICAgICB2YWx1ZV9sb2NhdGlvbi5BZGRQYXRoKAotICAgICAgICAgICAgICBVbmludGVycHJldGVk
T3B0aW9uOjprQWdncmVnYXRlVmFsdWVGaWVsZE51bWJlcik7Ci0gICAgICAgICAgRE8oUGFyc2VV
bmludGVycHJldGVkQmxvY2soCi0gICAgICAgICAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9uLT5t
dXRhYmxlX2FnZ3JlZ2F0ZV92YWx1ZSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
QWRkRXJyb3IoIkV4cGVjdGVkIG9wdGlvbiB2YWx1ZS4iKTsKLSAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHN0eWxl
ID09IE9QVElPTl9TVEFURU1FTlQpIHsKLSAgICBETyhDb25zdW1lRW5kT2ZEZWNsYXJhdGlvbigi
OyIsICZsb2NhdGlvbikpOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGFyc2Vy
OjpQYXJzZUV4dGVuc2lvbnMoRGVzY3JpcHRvclByb3RvKiBtZXNzYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBleHRlbnNpb25zX2xvY2F0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvclBy
b3RvKiBjb250YWluaW5nX2ZpbGUpIHsKLSAgLy8gUGFyc2UgdGhlIGRlY2xhcmF0aW9uLgotICBE
TyhDb25zdW1lKCJleHRlbnNpb25zIikpOwotCi0gIGRvIHsKLSAgICAvLyBOb3RlIHRoYXQga0V4
dGVuc2lvblJhbmdlRmllbGROdW1iZXIgd2FzIGFscmVhZHkgcHVzaGVkIGJ5IHRoZSBwYXJlbnQu
Ci0gICAgTG9jYXRpb25SZWNvcmRlciBsb2NhdGlvbihleHRlbnNpb25zX2xvY2F0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+ZXh0ZW5zaW9uX3JhbmdlX3NpemUo
KSk7Ci0KLSAgICBEZXNjcmlwdG9yUHJvdG86OkV4dGVuc2lvblJhbmdlKiByYW5nZSA9IG1lc3Nh
Z2UtPmFkZF9leHRlbnNpb25fcmFuZ2UoKTsKLSAgICBsb2NhdGlvbi5SZWNvcmRMZWdhY3lMb2Nh
dGlvbigKLSAgICAgICAgcmFuZ2UsIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6TlVN
QkVSKTsKLQotICAgIGludCBzdGFydCwgZW5kOwotICAgIGlvOjpUb2tlbml6ZXI6OlRva2VuIHN0
YXJ0X3Rva2VuOwotCi0gICAgewotICAgICAgTG9jYXRpb25SZWNvcmRlciBzdGFydF9sb2NhdGlv
bigKLSAgICAgICAgICBsb2NhdGlvbiwgRGVzY3JpcHRvclByb3RvOjpFeHRlbnNpb25SYW5nZTo6
a1N0YXJ0RmllbGROdW1iZXIpOwotICAgICAgc3RhcnRfdG9rZW4gPSBpbnB1dF8tPmN1cnJlbnQo
KTsKLSAgICAgIERPKENvbnN1bWVJbnRlZ2VyKCZzdGFydCwgIkV4cGVjdGVkIGZpZWxkIG51bWJl
ciByYW5nZS4iKSk7Ci0gICAgfQotCi0gICAgaWYgKFRyeUNvbnN1bWUoInRvIikpIHsKLSAgICAg
IExvY2F0aW9uUmVjb3JkZXIgZW5kX2xvY2F0aW9uKAotICAgICAgICAgIGxvY2F0aW9uLCBEZXNj
cmlwdG9yUHJvdG86OkV4dGVuc2lvblJhbmdlOjprRW5kRmllbGROdW1iZXIpOwotICAgICAgaWYg
KFRyeUNvbnN1bWUoIm1heCIpKSB7Ci0gICAgICAgIC8vIFNldCB0byB0aGUgc2VudGluZWwgdmFs
dWUgLSAxIHNpbmNlIHdlIGluY3JlbWVudCB0aGUgdmFsdWUgYmVsb3cuCi0gICAgICAgIC8vIFRo
ZSBhY3R1YWwgdmFsdWUgb2YgdGhlIGVuZCBvZiB0aGUgcmFuZ2Ugc2hvdWxkIGJlIHNldCB3aXRo
Ci0gICAgICAgIC8vIEFkanVzdEV4dGVuc2lvblJhbmdlc1dpdGhNYXhFbmROdW1iZXIuCi0gICAg
ICAgIGVuZCA9IGtNYXhFeHRlbnNpb25SYW5nZVNlbnRpbmVsIC0gMTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIERPKENvbnN1bWVJbnRlZ2VyKCZlbmQsICJFeHBlY3RlZCBpbnRlZ2VyLiIpKTsK
LSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgTG9jYXRpb25SZWNvcmRlciBlbmRfbG9jYXRp
b24oCi0gICAgICAgICAgbG9jYXRpb24sIERlc2NyaXB0b3JQcm90bzo6RXh0ZW5zaW9uUmFuZ2U6
OmtFbmRGaWVsZE51bWJlcik7Ci0gICAgICBlbmRfbG9jYXRpb24uU3RhcnRBdChzdGFydF90b2tl
bik7Ci0gICAgICBlbmRfbG9jYXRpb24uRW5kQXQoc3RhcnRfdG9rZW4pOwotICAgICAgZW5kID0g
c3RhcnQ7Ci0gICAgfQotCi0gICAgLy8gVXNlcnMgbGlrZSB0byBzcGVjaWZ5IGluY2x1c2l2ZSBy
YW5nZXMsIGJ1dCBpbiBjb2RlIHdlIGxpa2UgdGhlIGVuZAotICAgIC8vIG51bWJlciB0byBiZSBl
eGNsdXNpdmUuCi0gICAgKytlbmQ7Ci0KLSAgICByYW5nZS0+c2V0X3N0YXJ0KHN0YXJ0KTsKLSAg
ICByYW5nZS0+c2V0X2VuZChlbmQpOwotICB9IHdoaWxlIChUcnlDb25zdW1lKCIsIikpOwotCi0g
IERPKENvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKCI7IiwgJmV4dGVuc2lvbnNfbG9jYXRpb24pKTsK
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoaXMgaXMgc2ltaWxhciB0byBleHRlbnNpb24gcmFu
Z2UgcGFyc2luZywgZXhjZXB0IHRoYXQgIm1heCIgaXMgbm90Ci0vLyBzdXBwb3J0ZWQsIGFuZCBh
Y2NlcHRzIGZpZWxkIG5hbWUgbGl0ZXJhbHMuCi1ib29sIFBhcnNlcjo6UGFyc2VSZXNlcnZlZChE
ZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBMb2NhdGlvblJlY29yZGVyJiBtZXNzYWdlX2xvY2F0aW9uKSB7Ci0gIC8vIFBhcnNlIHRoZSBk
ZWNsYXJhdGlvbi4KLSAgRE8oQ29uc3VtZSgicmVzZXJ2ZWQiKSk7Ci0gIGlmIChMb29raW5nQXRU
eXBlKGlvOjpUb2tlbml6ZXI6OlRZUEVfU1RSSU5HKSkgewotICAgIExvY2F0aW9uUmVjb3JkZXIg
bG9jYXRpb24obWVzc2FnZV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERlc2NyaXB0b3JQcm90bzo6a1Jlc2VydmVkTmFtZUZpZWxkTnVtYmVyKTsKLSAgICByZXR1cm4g
UGFyc2VSZXNlcnZlZE5hbWVzKG1lc3NhZ2UsIGxvY2F0aW9uKTsKLSAgfSBlbHNlIHsKLSAgICBM
b2NhdGlvblJlY29yZGVyIGxvY2F0aW9uKG1lc3NhZ2VfbG9jYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yUHJvdG86OmtSZXNlcnZlZFJhbmdlRmllbGROdW1i
ZXIpOwotICAgIHJldHVybiBQYXJzZVJlc2VydmVkTnVtYmVycyhtZXNzYWdlLCBsb2NhdGlvbik7
Ci0gIH0KLX0KLQotCi1ib29sIFBhcnNlcjo6UGFyc2VSZXNlcnZlZE5hbWVzKERlc2NyaXB0b3JQ
cm90byogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9j
YXRpb25SZWNvcmRlciYgcGFyZW50X2xvY2F0aW9uKSB7Ci0gIGRvIHsKLSAgICBMb2NhdGlvblJl
Y29yZGVyIGxvY2F0aW9uKHBhcmVudF9sb2NhdGlvbiwgbWVzc2FnZS0+cmVzZXJ2ZWRfbmFtZV9z
aXplKCkpOwotICAgIERPKENvbnN1bWVTdHJpbmcobWVzc2FnZS0+YWRkX3Jlc2VydmVkX25hbWUo
KSwgIkV4cGVjdGVkIGZpZWxkIG5hbWUuIikpOwotICB9IHdoaWxlIChUcnlDb25zdW1lKCIsIikp
OwotICBETyhDb25zdW1lRW5kT2ZEZWNsYXJhdGlvbigiOyIsICZwYXJlbnRfbG9jYXRpb24pKTsK
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZVJlc2VydmVkTnVtYmVycyhE
ZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcGFyZW50X2xvY2F0aW9uKSB7Ci0gIGJvb2wgZmly
c3QgPSB0cnVlOwotICBkbyB7Ci0gICAgTG9jYXRpb25SZWNvcmRlciBsb2NhdGlvbihwYXJlbnRf
bG9jYXRpb24sIG1lc3NhZ2UtPnJlc2VydmVkX3JhbmdlX3NpemUoKSk7Ci0KLSAgICBEZXNjcmlw
dG9yUHJvdG86OlJlc2VydmVkUmFuZ2UqIHJhbmdlID0gbWVzc2FnZS0+YWRkX3Jlc2VydmVkX3Jh
bmdlKCk7Ci0gICAgaW50IHN0YXJ0LCBlbmQ7Ci0gICAgaW86OlRva2VuaXplcjo6VG9rZW4gc3Rh
cnRfdG9rZW47Ci0gICAgewotICAgICAgTG9jYXRpb25SZWNvcmRlciBzdGFydF9sb2NhdGlvbigK
LSAgICAgICAgICBsb2NhdGlvbiwgRGVzY3JpcHRvclByb3RvOjpSZXNlcnZlZFJhbmdlOjprU3Rh
cnRGaWVsZE51bWJlcik7Ci0gICAgICBzdGFydF90b2tlbiA9IGlucHV0Xy0+Y3VycmVudCgpOwot
ICAgICAgRE8oQ29uc3VtZUludGVnZXIoJnN0YXJ0LCAoZmlyc3QgPwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGZpZWxkIG5hbWUgb3IgbnVtYmVyIHJhbmdlLiIg
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGZpZWxkIG51bWJl
ciByYW5nZS4iKSkpOwotICAgIH0KLQotICAgIGlmIChUcnlDb25zdW1lKCJ0byIpKSB7Ci0gICAg
ICBMb2NhdGlvblJlY29yZGVyIGVuZF9sb2NhdGlvbigKLSAgICAgICAgICBsb2NhdGlvbiwgRGVz
Y3JpcHRvclByb3RvOjpSZXNlcnZlZFJhbmdlOjprRW5kRmllbGROdW1iZXIpOwotICAgICAgRE8o
Q29uc3VtZUludGVnZXIoJmVuZCwgIkV4cGVjdGVkIGludGVnZXIuIikpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBMb2NhdGlvblJlY29yZGVyIGVuZF9sb2NhdGlvbigKLSAgICAgICAgICBsb2NhdGlv
biwgRGVzY3JpcHRvclByb3RvOjpSZXNlcnZlZFJhbmdlOjprRW5kRmllbGROdW1iZXIpOwotICAg
ICAgZW5kX2xvY2F0aW9uLlN0YXJ0QXQoc3RhcnRfdG9rZW4pOwotICAgICAgZW5kX2xvY2F0aW9u
LkVuZEF0KHN0YXJ0X3Rva2VuKTsKLSAgICAgIGVuZCA9IHN0YXJ0OwotICAgIH0KLQotICAgIC8v
IFVzZXJzIGxpa2UgdG8gc3BlY2lmeSBpbmNsdXNpdmUgcmFuZ2VzLCBidXQgaW4gY29kZSB3ZSBs
aWtlIHRoZSBlbmQKLSAgICAvLyBudW1iZXIgdG8gYmUgZXhjbHVzaXZlLgotICAgICsrZW5kOwot
Ci0gICAgcmFuZ2UtPnNldF9zdGFydChzdGFydCk7Ci0gICAgcmFuZ2UtPnNldF9lbmQoZW5kKTsK
LSAgICBmaXJzdCA9IGZhbHNlOwotICB9IHdoaWxlIChUcnlDb25zdW1lKCIsIikpOwotCi0gIERP
KENvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKCI7IiwgJnBhcmVudF9sb2NhdGlvbikpOwotICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQYXJzZXI6OlBhcnNlRXh0ZW5kKFJlcGVhdGVkUHRyRmllbGQ8
RmllbGREZXNjcmlwdG9yUHJvdG8+KiBleHRlbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlcGVhdGVkUHRyRmllbGQ8RGVzY3JpcHRvclByb3RvPiogbWVzc2FnZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcGFyZW50X2xvY2F0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsb2NhdGlvbl9maWVsZF9udW1iZXJfZm9y
X25lc3RlZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExvY2F0aW9uUmVj
b3JkZXImIGV4dGVuZF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
aWxlRGVzY3JpcHRvclByb3RvKiBjb250YWluaW5nX2ZpbGUpIHsKLSAgRE8oQ29uc3VtZSgiZXh0
ZW5kIikpOwotCi0gIC8vIFBhcnNlIHRoZSBleHRlbmRlZSB0eXBlLgotICBpbzo6VG9rZW5pemVy
OjpUb2tlbiBleHRlbmRlZV9zdGFydCA9IGlucHV0Xy0+Y3VycmVudCgpOwotICBzdHJpbmcgZXh0
ZW5kZWU7Ci0gIERPKFBhcnNlVXNlckRlZmluZWRUeXBlKCZleHRlbmRlZSkpOwotICBpbzo6VG9r
ZW5pemVyOjpUb2tlbiBleHRlbmRlZV9lbmQgPSBpbnB1dF8tPnByZXZpb3VzKCk7Ci0KLSAgLy8g
UGFyc2UgdGhlIGJsb2NrLgotICBETyhDb25zdW1lRW5kT2ZEZWNsYXJhdGlvbigieyIsICZleHRl
bmRfbG9jYXRpb24pKTsKLQotICBib29sIGlzX2ZpcnN0ID0gdHJ1ZTsKLQotICBkbyB7Ci0gICAg
aWYgKEF0RW5kKCkpIHsKLSAgICAgIEFkZEVycm9yKCJSZWFjaGVkIGVuZCBvZiBpbnB1dCBpbiBl
eHRlbmQgZGVmaW5pdGlvbiAobWlzc2luZyAnfScpLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCBrRXh0ZW5zaW9uRmllbGROdW1iZXIgd2FzIGFscmVh
ZHkgcHVzaGVkIGJ5IHRoZSBwYXJlbnQuCi0gICAgTG9jYXRpb25SZWNvcmRlciBsb2NhdGlvbihl
eHRlbmRfbG9jYXRpb24sIGV4dGVuc2lvbnMtPnNpemUoKSk7Ci0KLSAgICBGaWVsZERlc2NyaXB0
b3JQcm90byogZmllbGQgPSBleHRlbnNpb25zLT5BZGQoKTsKLQotICAgIHsKLSAgICAgIExvY2F0
aW9uUmVjb3JkZXIgZXh0ZW5kZWVfbG9jYXRpb24oCi0gICAgICAgICAgbG9jYXRpb24sIEZpZWxk
RGVzY3JpcHRvclByb3RvOjprRXh0ZW5kZWVGaWVsZE51bWJlcik7Ci0gICAgICBleHRlbmRlZV9s
b2NhdGlvbi5TdGFydEF0KGV4dGVuZGVlX3N0YXJ0KTsKLSAgICAgIGV4dGVuZGVlX2xvY2F0aW9u
LkVuZEF0KGV4dGVuZGVlX2VuZCk7Ci0KLSAgICAgIGlmIChpc19maXJzdCkgewotICAgICAgICBl
eHRlbmRlZV9sb2NhdGlvbi5SZWNvcmRMZWdhY3lMb2NhdGlvbigKLSAgICAgICAgICAgIGZpZWxk
LCBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OkVYVEVOREVFKTsKLSAgICAgICAgaXNf
Zmlyc3QgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmaWVsZC0+c2V0X2V4dGVuZGVl
KGV4dGVuZGVlKTsKLQotICAgIGlmICghUGFyc2VNZXNzYWdlRmllbGQoZmllbGQsIG1lc3NhZ2Vz
LCBwYXJlbnRfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl9m
aWVsZF9udW1iZXJfZm9yX25lc3RlZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nX2ZpbGUpKSB7
Ci0gICAgICAvLyBUaGlzIHN0YXRlbWVudCBmYWlsZWQgdG8gcGFyc2UuICBTa2lwIGl0LCBidXQg
a2VlcCBsb29waW5nIHRvIHBhcnNlCi0gICAgICAvLyBvdGhlciBzdGF0ZW1lbnRzLgotICAgICAg
U2tpcFN0YXRlbWVudCgpOwotICAgIH0KLSAgfSB3aGlsZSAoIVRyeUNvbnN1bWVFbmRPZkRlY2xh
cmF0aW9uKCJ9IiwgTlVMTCkpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBhcnNlcjo6
UGFyc2VPbmVvZihPbmVvZkRlc2NyaXB0b3JQcm90byogb25lb2ZfZGVjbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIERlc2NyaXB0b3JQcm90byogY29udGFpbmluZ190eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG9uZW9mX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTG9jYXRpb25SZWNvcmRlciYgb25lb2ZfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBjb250YWluaW5nX3R5cGVfbG9jYXRpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBjb250
YWluaW5nX2ZpbGUpIHsKLSAgRE8oQ29uc3VtZSgib25lb2YiKSk7Ci0KLSAgewotICAgIExvY2F0
aW9uUmVjb3JkZXIgbmFtZV9sb2NhdGlvbihvbmVvZl9sb2NhdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT25lb2ZEZXNjcmlwdG9yUHJvdG86OmtOYW1lRmllbGROdW1i
ZXIpOwotICAgIERPKENvbnN1bWVJZGVudGlmaWVyKG9uZW9mX2RlY2wtPm11dGFibGVfbmFtZSgp
LCAiRXhwZWN0ZWQgb25lb2YgbmFtZS4iKSk7Ci0gIH0KLQotICBETyhDb25zdW1lRW5kT2ZEZWNs
YXJhdGlvbigieyIsICZvbmVvZl9sb2NhdGlvbikpOwotCi0gIGRvIHsKLSAgICBpZiAoQXRFbmQo
KSkgewotICAgICAgQWRkRXJyb3IoIlJlYWNoZWQgZW5kIG9mIGlucHV0IGluIG9uZW9mIGRlZmlu
aXRpb24gKG1pc3NpbmcgJ30nKS4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBQcmludCBhIG5pY2UgZXJyb3IgaWYgdGhlIHVzZXIgYWNjaWRlbnRhbGx5IHRyaWVzIHRv
IHBsYWNlIGEgbGFiZWwKLSAgICAvLyBvbiBhbiBpbmRpdmlkdWFsIG1lbWJlciBvZiBhIG9uZW9m
LgotICAgIGlmIChMb29raW5nQXQoInJlcXVpcmVkIikgfHwKLSAgICAgICAgTG9va2luZ0F0KCJv
cHRpb25hbCIpIHx8Ci0gICAgICAgIExvb2tpbmdBdCgicmVwZWF0ZWQiKSkgewotICAgICAgQWRk
RXJyb3IoIkZpZWxkcyBpbiBvbmVvZnMgbXVzdCBub3QgaGF2ZSBsYWJlbHMgKHJlcXVpcmVkIC8g
b3B0aW9uYWwgIgotICAgICAgICAgICAgICAgIi8gcmVwZWF0ZWQpLiIpOwotICAgICAgLy8gV2Ug
Y2FuIGNvbnRpbnVlIHBhcnNpbmcgaGVyZSBiZWNhdXNlIHdlIHVuZGVyc3RhbmQgd2hhdCB0aGUg
dXNlcgotICAgICAgLy8gbWVhbnQuICBUaGUgZXJyb3IgcmVwb3J0IHdpbGwgc3RpbGwgbWFrZSBw
YXJzaW5nIGZhaWwgb3ZlcmFsbC4KLSAgICAgIGlucHV0Xy0+TmV4dCgpOwotICAgIH0KLQotICAg
IExvY2F0aW9uUmVjb3JkZXIgZmllbGRfbG9jYXRpb24oY29udGFpbmluZ190eXBlX2xvY2F0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclByb3RvOjpr
RmllbGRGaWVsZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRhaW5pbmdfdHlwZS0+ZmllbGRfc2l6ZSgpKTsKLQotICAgIEZpZWxkRGVzY3JpcHRvclByb3Rv
KiBmaWVsZCA9IGNvbnRhaW5pbmdfdHlwZS0+YWRkX2ZpZWxkKCk7Ci0gICAgZmllbGQtPnNldF9s
YWJlbChGaWVsZERlc2NyaXB0b3JQcm90bzo6TEFCRUxfT1BUSU9OQUwpOwotICAgIGZpZWxkLT5z
ZXRfb25lb2ZfaW5kZXgob25lb2ZfaW5kZXgpOwotCi0gICAgaWYgKCFQYXJzZU1lc3NhZ2VGaWVs
ZE5vTGFiZWwoZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFp
bmluZ190eXBlLT5tdXRhYmxlX25lc3RlZF90eXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmluZ190eXBlX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQcm90bzo6a05lc3RlZFR5cGVGaWVsZE51bWJlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9sb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nX2ZpbGUpKSB7Ci0gICAgICAv
LyBUaGlzIHN0YXRlbWVudCBmYWlsZWQgdG8gcGFyc2UuICBTa2lwIGl0LCBidXQga2VlcCBsb29w
aW5nIHRvIHBhcnNlCi0gICAgICAvLyBvdGhlciBzdGF0ZW1lbnRzLgotICAgICAgU2tpcFN0YXRl
bWVudCgpOwotICAgIH0KLSAgfSB3aGlsZSAoIVRyeUNvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKCJ9
IiwgTlVMTCkpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBFbnVt
cwotCi1ib29sIFBhcnNlcjo6UGFyc2VFbnVtRGVmaW5pdGlvbihFbnVtRGVzY3JpcHRvclByb3Rv
KiBlbnVtX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMb2Nh
dGlvblJlY29yZGVyJiBlbnVtX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29udGFpbmluZ19maWxlKSB7Ci0gIERP
KENvbnN1bWUoImVudW0iKSk7Ci0KLSAgewotICAgIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24o
ZW51bV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1EZXNjcmlw
dG9yUHJvdG86OmtOYW1lRmllbGROdW1iZXIpOwotICAgIGxvY2F0aW9uLlJlY29yZExlZ2FjeUxv
Y2F0aW9uKAotICAgICAgICBlbnVtX3R5cGUsIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rv
cjo6TkFNRSk7Ci0gICAgRE8oQ29uc3VtZUlkZW50aWZpZXIoZW51bV90eXBlLT5tdXRhYmxlX25h
bWUoKSwgIkV4cGVjdGVkIGVudW0gbmFtZS4iKSk7Ci0gIH0KLQotICBETyhQYXJzZUVudW1CbG9j
ayhlbnVtX3R5cGUsIGVudW1fbG9jYXRpb24sIGNvbnRhaW5pbmdfZmlsZSkpOwotCi0gIERPKFZh
bGlkYXRlRW51bShlbnVtX3R5cGUpKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQYXJz
ZXI6OlBhcnNlRW51bUJsb2NrKEVudW1EZXNjcmlwdG9yUHJvdG8qIGVudW1fdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBlbnVtX2xvY2F0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJv
dG8qIGNvbnRhaW5pbmdfZmlsZSkgewotICBETyhDb25zdW1lRW5kT2ZEZWNsYXJhdGlvbigieyIs
ICZlbnVtX2xvY2F0aW9uKSk7Ci0KLSAgd2hpbGUgKCFUcnlDb25zdW1lRW5kT2ZEZWNsYXJhdGlv
bigifSIsIE5VTEwpKSB7Ci0gICAgaWYgKEF0RW5kKCkpIHsKLSAgICAgIEFkZEVycm9yKCJSZWFj
aGVkIGVuZCBvZiBpbnB1dCBpbiBlbnVtIGRlZmluaXRpb24gKG1pc3NpbmcgJ30nKS4iKTsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIVBhcnNlRW51bVN0YXRlbWVudChl
bnVtX3R5cGUsIGVudW1fbG9jYXRpb24sIGNvbnRhaW5pbmdfZmlsZSkpIHsKLSAgICAgIC8vIFRo
aXMgc3RhdGVtZW50IGZhaWxlZCB0byBwYXJzZS4gIFNraXAgaXQsIGJ1dCBrZWVwIGxvb3Bpbmcg
dG8gcGFyc2UKLSAgICAgIC8vIG90aGVyIHN0YXRlbWVudHMuCi0gICAgICBTa2lwU3RhdGVtZW50
KCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJz
ZUVudW1TdGF0ZW1lbnQoRW51bURlc2NyaXB0b3JQcm90byogZW51bV90eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBlbnVtX2xvY2F0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRv
clByb3RvKiBjb250YWluaW5nX2ZpbGUpIHsKLSAgaWYgKFRyeUNvbnN1bWVFbmRPZkRlY2xhcmF0
aW9uKCI7IiwgTlVMTCkpIHsKLSAgICAvLyBlbXB0eSBzdGF0ZW1lbnQ7IGlnbm9yZQotICAgIHJl
dHVybiB0cnVlOwotICB9IGVsc2UgaWYgKExvb2tpbmdBdCgib3B0aW9uIikpIHsKLSAgICBMb2Nh
dGlvblJlY29yZGVyIGxvY2F0aW9uKGVudW1fbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFbnVtRGVzY3JpcHRvclByb3RvOjprT3B0aW9uc0ZpZWxkTnVtYmVyKTsKLSAg
ICByZXR1cm4gUGFyc2VPcHRpb24oZW51bV90eXBlLT5tdXRhYmxlX29wdGlvbnMoKSwgbG9jYXRp
b24sCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfZmlsZSwgT1BUSU9OX1NUQVRF
TUVOVCk7Ci0gIH0gZWxzZSB7Ci0gICAgTG9jYXRpb25SZWNvcmRlciBsb2NhdGlvbihlbnVtX2xv
Y2F0aW9uLAotICAgICAgICBFbnVtRGVzY3JpcHRvclByb3RvOjprVmFsdWVGaWVsZE51bWJlciwg
ZW51bV90eXBlLT52YWx1ZV9zaXplKCkpOwotICAgIHJldHVybiBQYXJzZUVudW1Db25zdGFudChl
bnVtX3R5cGUtPmFkZF92YWx1ZSgpLCBsb2NhdGlvbiwgY29udGFpbmluZ19maWxlKTsKLSAgfQot
fQotCi1ib29sIFBhcnNlcjo6UGFyc2VFbnVtQ29uc3RhbnQoRW51bVZhbHVlRGVzY3JpcHRvclBy
b3RvKiBlbnVtX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExv
Y2F0aW9uUmVjb3JkZXImIGVudW1fdmFsdWVfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29udGFpbmluZ19maWxlKSB7
Ci0gIC8vIFBhcnNlIG5hbWUuCi0gIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9uKGVu
dW1fdmFsdWVfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtVmFs
dWVEZXNjcmlwdG9yUHJvdG86OmtOYW1lRmllbGROdW1iZXIpOwotICAgIGxvY2F0aW9uLlJlY29y
ZExlZ2FjeUxvY2F0aW9uKAotICAgICAgICBlbnVtX3ZhbHVlLCBEZXNjcmlwdG9yUG9vbDo6RXJy
b3JDb2xsZWN0b3I6Ok5BTUUpOwotICAgIERPKENvbnN1bWVJZGVudGlmaWVyKGVudW1fdmFsdWUt
Pm11dGFibGVfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBlbnVt
IGNvbnN0YW50IG5hbWUuIikpOwotICB9Ci0KLSAgRE8oQ29uc3VtZSgiPSIsICJNaXNzaW5nIG51
bWVyaWMgdmFsdWUgZm9yIGVudW0gY29uc3RhbnQuIikpOwotCi0gIC8vIFBhcnNlIHZhbHVlLgot
ICB7Ci0gICAgTG9jYXRpb25SZWNvcmRlciBsb2NhdGlvbigKLSAgICAgICAgZW51bV92YWx1ZV9s
b2NhdGlvbiwgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjprTnVtYmVyRmllbGROdW1iZXIpOwot
ICAgIGxvY2F0aW9uLlJlY29yZExlZ2FjeUxvY2F0aW9uKAotICAgICAgICBlbnVtX3ZhbHVlLCBE
ZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok5VTUJFUik7Ci0KLSAgICBpbnQgbnVtYmVy
OwotICAgIERPKENvbnN1bWVTaWduZWRJbnRlZ2VyKCZudW1iZXIsICJFeHBlY3RlZCBpbnRlZ2Vy
LiIpKTsKLSAgICBlbnVtX3ZhbHVlLT5zZXRfbnVtYmVyKG51bWJlcik7Ci0gIH0KLQotICBETyhQ
YXJzZUVudW1Db25zdGFudE9wdGlvbnMoZW51bV92YWx1ZSwgZW51bV92YWx1ZV9sb2NhdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfZmlsZSkpOwotCi0gIERP
KENvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKCI7IiwgJmVudW1fdmFsdWVfbG9jYXRpb24pKTsKLQot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQYXJzZXI6OlBhcnNlRW51bUNvbnN0YW50T3B0aW9u
cygKLSAgICBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8qIHZhbHVlLAotICAgIGNvbnN0IExvY2F0
aW9uUmVjb3JkZXImIGVudW1fdmFsdWVfbG9jYXRpb24sCi0gICAgY29uc3QgRmlsZURlc2NyaXB0
b3JQcm90byogY29udGFpbmluZ19maWxlKSB7Ci0gIGlmICghTG9va2luZ0F0KCJbIikpIHJldHVy
biB0cnVlOwotCi0gIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24oCi0gICAgICBlbnVtX3ZhbHVl
X2xvY2F0aW9uLCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OmtPcHRpb25zRmllbGROdW1iZXIp
OwotCi0gIERPKENvbnN1bWUoIlsiKSk7Ci0KLSAgZG8gewotICAgIERPKFBhcnNlT3B0aW9uKHZh
bHVlLT5tdXRhYmxlX29wdGlvbnMoKSwgbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgY29u
dGFpbmluZ19maWxlLCBPUFRJT05fQVNTSUdOTUVOVCkpOwotICB9IHdoaWxlIChUcnlDb25zdW1l
KCIsIikpOwotCi0gIERPKENvbnN1bWUoIl0iKSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBTZXJ2aWNlcwotCi1ib29sIFBhcnNlcjo6UGFyc2VTZXJ2aWNlRGVmaW5p
dGlvbigKLSAgICBTZXJ2aWNlRGVzY3JpcHRvclByb3RvKiBzZXJ2aWNlLAotICAgIGNvbnN0IExv
Y2F0aW9uUmVjb3JkZXImIHNlcnZpY2VfbG9jYXRpb24sCi0gICAgY29uc3QgRmlsZURlc2NyaXB0
b3JQcm90byogY29udGFpbmluZ19maWxlKSB7Ci0gIERPKENvbnN1bWUoInNlcnZpY2UiKSk7Ci0K
LSAgewotICAgIExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24oc2VydmljZV9sb2NhdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OmtOYW1l
RmllbGROdW1iZXIpOwotICAgIGxvY2F0aW9uLlJlY29yZExlZ2FjeUxvY2F0aW9uKAotICAgICAg
ICBzZXJ2aWNlLCBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok5BTUUpOwotICAgIERP
KENvbnN1bWVJZGVudGlmaWVyKHNlcnZpY2UtPm11dGFibGVfbmFtZSgpLCAiRXhwZWN0ZWQgc2Vy
dmljZSBuYW1lLiIpKTsKLSAgfQotCi0gIERPKFBhcnNlU2VydmljZUJsb2NrKHNlcnZpY2UsIHNl
cnZpY2VfbG9jYXRpb24sIGNvbnRhaW5pbmdfZmlsZSkpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBQYXJzZXI6OlBhcnNlU2VydmljZUJsb2NrKFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8qIHNl
cnZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNv
cmRlciYgc2VydmljZV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBjb250YWluaW5nX2ZpbGUpIHsKLSAgRE8oQ29uc3Vt
ZUVuZE9mRGVjbGFyYXRpb24oInsiLCAmc2VydmljZV9sb2NhdGlvbikpOwotCi0gIHdoaWxlICgh
VHJ5Q29uc3VtZUVuZE9mRGVjbGFyYXRpb24oIn0iLCBOVUxMKSkgewotICAgIGlmIChBdEVuZCgp
KSB7Ci0gICAgICBBZGRFcnJvcigiUmVhY2hlZCBlbmQgb2YgaW5wdXQgaW4gc2VydmljZSBkZWZp
bml0aW9uIChtaXNzaW5nICd9JykuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKCFQYXJzZVNlcnZpY2VTdGF0ZW1lbnQoc2VydmljZSwgc2VydmljZV9sb2NhdGlvbiwg
Y29udGFpbmluZ19maWxlKSkgewotICAgICAgLy8gVGhpcyBzdGF0ZW1lbnQgZmFpbGVkIHRvIHBh
cnNlLiAgU2tpcCBpdCwgYnV0IGtlZXAgbG9vcGluZyB0byBwYXJzZQotICAgICAgLy8gb3RoZXIg
c3RhdGVtZW50cy4KLSAgICAgIFNraXBTdGF0ZW1lbnQoKTsKLSAgICB9Ci0gIH0KLQotICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQYXJzZXI6OlBhcnNlU2VydmljZVN0YXRlbWVudChTZXJ2aWNl
RGVzY3JpcHRvclByb3RvKiBzZXJ2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBzZXJ2aWNlX2xvY2F0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBjb250
YWluaW5nX2ZpbGUpIHsKLSAgaWYgKFRyeUNvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKCI7IiwgTlVM
TCkpIHsKLSAgICAvLyBlbXB0eSBzdGF0ZW1lbnQ7IGlnbm9yZQotICAgIHJldHVybiB0cnVlOwot
ICB9IGVsc2UgaWYgKExvb2tpbmdBdCgib3B0aW9uIikpIHsKLSAgICBMb2NhdGlvblJlY29yZGVy
IGxvY2F0aW9uKAotICAgICAgICBzZXJ2aWNlX2xvY2F0aW9uLCBTZXJ2aWNlRGVzY3JpcHRvclBy
b3RvOjprT3B0aW9uc0ZpZWxkTnVtYmVyKTsKLSAgICByZXR1cm4gUGFyc2VPcHRpb24oc2Vydmlj
ZS0+bXV0YWJsZV9vcHRpb25zKCksIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBj
b250YWluaW5nX2ZpbGUsIE9QVElPTl9TVEFURU1FTlQpOwotICB9IGVsc2UgewotICAgIExvY2F0
aW9uUmVjb3JkZXIgbG9jYXRpb24oc2VydmljZV9sb2NhdGlvbiwKLSAgICAgICAgU2VydmljZURl
c2NyaXB0b3JQcm90bzo6a01ldGhvZEZpZWxkTnVtYmVyLCBzZXJ2aWNlLT5tZXRob2Rfc2l6ZSgp
KTsKLSAgICByZXR1cm4gUGFyc2VTZXJ2aWNlTWV0aG9kKHNlcnZpY2UtPmFkZF9tZXRob2QoKSwg
bG9jYXRpb24sIGNvbnRhaW5pbmdfZmlsZSk7Ci0gIH0KLX0KLQotYm9vbCBQYXJzZXI6OlBhcnNl
U2VydmljZU1ldGhvZChNZXRob2REZXNjcmlwdG9yUHJvdG8qIG1ldGhvZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgbWV0aG9kX2xvY2F0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRv
clByb3RvKiBjb250YWluaW5nX2ZpbGUpIHsKLSAgRE8oQ29uc3VtZSgicnBjIikpOwotCi0gIHsK
LSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9uKG1ldGhvZF9sb2NhdGlvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6a05hbWVGaWVsZE51
bWJlcik7Ci0gICAgbG9jYXRpb24uUmVjb3JkTGVnYWN5TG9jYXRpb24oCi0gICAgICAgIG1ldGhv
ZCwgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpOQU1FKTsKLSAgICBETyhDb25zdW1l
SWRlbnRpZmllcihtZXRob2QtPm11dGFibGVfbmFtZSgpLCAiRXhwZWN0ZWQgbWV0aG9kIG5hbWUu
IikpOwotICB9Ci0KLSAgLy8gUGFyc2UgaW5wdXQgdHlwZS4KLSAgRE8oQ29uc3VtZSgiKCIpKTsK
LSAgewotICAgIGlmIChMb29raW5nQXQoInN0cmVhbSIpKSB7Ci0gICAgICBMb2NhdGlvblJlY29y
ZGVyIGxvY2F0aW9uKAotICAgICAgICAgIG1ldGhvZF9sb2NhdGlvbiwgTWV0aG9kRGVzY3JpcHRv
clByb3RvOjprQ2xpZW50U3RyZWFtaW5nRmllbGROdW1iZXIpOwotICAgICAgbG9jYXRpb24uUmVj
b3JkTGVnYWN5TG9jYXRpb24oCi0gICAgICAgICAgbWV0aG9kLCBEZXNjcmlwdG9yUG9vbDo6RXJy
b3JDb2xsZWN0b3I6Ok9USEVSKTsKLSAgICAgIG1ldGhvZC0+c2V0X2NsaWVudF9zdHJlYW1pbmco
dHJ1ZSk7Ci0gICAgICBETyhDb25zdW1lKCJzdHJlYW0iKSk7Ci0KLSAgICB9Ci0gICAgTG9jYXRp
b25SZWNvcmRlciBsb2NhdGlvbihtZXRob2RfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNZXRob2REZXNjcmlwdG9yUHJvdG86OmtJbnB1dFR5cGVGaWVsZE51bWJlcik7
Ci0gICAgbG9jYXRpb24uUmVjb3JkTGVnYWN5TG9jYXRpb24oCi0gICAgICAgIG1ldGhvZCwgRGVz
Y3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpJTlBVVF9UWVBFKTsKLSAgICBETyhQYXJzZVVz
ZXJEZWZpbmVkVHlwZShtZXRob2QtPm11dGFibGVfaW5wdXRfdHlwZSgpKSk7Ci0gIH0KLSAgRE8o
Q29uc3VtZSgiKSIpKTsKLQotICAvLyBQYXJzZSBvdXRwdXQgdHlwZS4KLSAgRE8oQ29uc3VtZSgi
cmV0dXJucyIpKTsKLSAgRE8oQ29uc3VtZSgiKCIpKTsKLSAgewotICAgIGlmIChMb29raW5nQXQo
InN0cmVhbSIpKSB7Ci0gICAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9uKAotICAgICAgICAg
IG1ldGhvZF9sb2NhdGlvbiwgTWV0aG9kRGVzY3JpcHRvclByb3RvOjprU2VydmVyU3RyZWFtaW5n
RmllbGROdW1iZXIpOwotICAgICAgbG9jYXRpb24uUmVjb3JkTGVnYWN5TG9jYXRpb24oCi0gICAg
ICAgICAgbWV0aG9kLCBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok9USEVSKTsKLSAg
ICAgIERPKENvbnN1bWUoInN0cmVhbSIpKTsKLSAgICAgIG1ldGhvZC0+c2V0X3NlcnZlcl9zdHJl
YW1pbmcodHJ1ZSk7Ci0KLSAgICB9Ci0gICAgTG9jYXRpb25SZWNvcmRlciBsb2NhdGlvbihtZXRo
b2RfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRob2REZXNjcmlw
dG9yUHJvdG86OmtPdXRwdXRUeXBlRmllbGROdW1iZXIpOwotICAgIGxvY2F0aW9uLlJlY29yZExl
Z2FjeUxvY2F0aW9uKAotICAgICAgICBtZXRob2QsIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxl
Y3Rvcjo6T1VUUFVUX1RZUEUpOwotICAgIERPKFBhcnNlVXNlckRlZmluZWRUeXBlKG1ldGhvZC0+
bXV0YWJsZV9vdXRwdXRfdHlwZSgpKSk7Ci0gIH0KLSAgRE8oQ29uc3VtZSgiKSIpKTsKLQotICBp
ZiAoTG9va2luZ0F0KCJ7IikpIHsKLSAgICAvLyBPcHRpb25zIQotICAgIERPKFBhcnNlTWV0aG9k
T3B0aW9ucyhtZXRob2RfbG9jYXRpb24sIGNvbnRhaW5pbmdfZmlsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgTWV0aG9kRGVzY3JpcHRvclByb3RvOjprT3B0aW9uc0ZpZWxkTnVtYmVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm11dGFibGVfb3B0aW9ucygpKSk7Ci0g
IH0gZWxzZSB7Ci0gICAgRE8oQ29uc3VtZUVuZE9mRGVjbGFyYXRpb24oIjsiLCAmbWV0aG9kX2xv
Y2F0aW9uKSk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1ib29sIFBhcnNlcjo6UGFy
c2VNZXRob2RPcHRpb25zKGNvbnN0IExvY2F0aW9uUmVjb3JkZXImIHBhcmVudF9sb2NhdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90
byogY29udGFpbmluZ19maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbnQgb3B0aW9uc0ZpZWxkTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNZXNzYWdlKiBtdXRhYmxlX29wdGlvbnMpIHsKLSAgLy8gT3B0aW9ucyEKLSAgQ29uc3VtZUVu
ZE9mRGVjbGFyYXRpb24oInsiLCAmcGFyZW50X2xvY2F0aW9uKTsKLSAgd2hpbGUgKCFUcnlDb25z
dW1lRW5kT2ZEZWNsYXJhdGlvbigifSIsIE5VTEwpKSB7Ci0gICAgaWYgKEF0RW5kKCkpIHsKLSAg
ICAgIEFkZEVycm9yKCJSZWFjaGVkIGVuZCBvZiBpbnB1dCBpbiBtZXRob2Qgb3B0aW9ucyAobWlz
c2luZyAnfScpLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChUcnlD
b25zdW1lRW5kT2ZEZWNsYXJhdGlvbigiOyIsIE5VTEwpKSB7Ci0gICAgICAvLyBlbXB0eSBzdGF0
ZW1lbnQ7IGlnbm9yZQotICAgIH0gZWxzZSB7Ci0gICAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0
aW9uKHBhcmVudF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9uc0ZpZWxkTnVtYmVyKTsKLSAgICAgIGlmICghUGFyc2VPcHRpb24obXV0YWJsZV9vcHRpb25z
LCBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ19maWxlLCBPUFRJ
T05fU1RBVEVNRU5UKSkgewotICAgICAgICAvLyBUaGlzIHN0YXRlbWVudCBmYWlsZWQgdG8gcGFy
c2UuICBTa2lwIGl0LCBidXQga2VlcCBsb29waW5nIHRvCi0gICAgICAgIC8vIHBhcnNlIG90aGVy
IHN0YXRlbWVudHMuCi0gICAgICAgIFNraXBTdGF0ZW1lbnQoKTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIFBhcnNlcjo6
UGFyc2VMYWJlbChGaWVsZERlc2NyaXB0b3JQcm90bzo6TGFiZWwqIGxhYmVsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29udGFpbmluZ19maWxl
KSB7Ci0gIGlmIChUcnlDb25zdW1lKCJvcHRpb25hbCIpKSB7Ci0gICAgKmxhYmVsID0gRmllbGRE
ZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElPTkFMOwotICAgIHJldHVybiB0cnVlOwotICB9IGVs
c2UgaWYgKFRyeUNvbnN1bWUoInJlcGVhdGVkIikpIHsKLSAgICAqbGFiZWwgPSBGaWVsZERlc2Ny
aXB0b3JQcm90bzo6TEFCRUxfUkVQRUFURUQ7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSBp
ZiAoVHJ5Q29uc3VtZSgicmVxdWlyZWQiKSkgewotICAgICpsYWJlbCA9IEZpZWxkRGVzY3JpcHRv
clByb3RvOjpMQUJFTF9SRVFVSVJFRDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZVR5cGUoRmllbGREZXNjcmlwdG9yUHJvdG86
OlR5cGUqIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogdHlwZV9uYW1lKSB7
Ci0gIFR5cGVOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0ga1R5cGVOYW1lcy5maW5kKGlu
cHV0Xy0+Y3VycmVudCgpLnRleHQpOwotICBpZiAoaXRlciAhPSBrVHlwZU5hbWVzLmVuZCgpKSB7
Ci0gICAgKnR5cGUgPSBpdGVyLT5zZWNvbmQ7Ci0gICAgaW5wdXRfLT5OZXh0KCk7Ci0gIH0gZWxz
ZSB7Ci0gICAgRE8oUGFyc2VVc2VyRGVmaW5lZFR5cGUodHlwZV9uYW1lKSk7Ci0gIH0KLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZVVzZXJEZWZpbmVkVHlwZShzdHJpbmcq
IHR5cGVfbmFtZSkgewotICB0eXBlX25hbWUtPmNsZWFyKCk7Ci0KLSAgVHlwZU5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBrVHlwZU5hbWVzLmZpbmQoaW5wdXRfLT5jdXJyZW50KCkudGV4
dCk7Ci0gIGlmIChpdGVyICE9IGtUeXBlTmFtZXMuZW5kKCkpIHsKLSAgICAvLyBOb3RlOiAgVGhl
IG9ubHkgcGxhY2UgZW51bSB0eXBlcyBhcmUgYWxsb3dlZCBpcyBmb3IgZmllbGQgdHlwZXMsIGJ1
dAotICAgIC8vICAgaWYgd2UgYXJlIHBhcnNpbmcgYSBmaWVsZCB0eXBlIHRoZW4gd2Ugd291bGQg
bm90IGdldCBoZXJlIGJlY2F1c2UKLSAgICAvLyAgIHByaW1pdGl2ZXMgYXJlIGFsbG93ZWQgdGhl
cmUgYXMgd2VsbC4gIFNvIHRoaXMgZXJyb3IgbWVzc2FnZSBkb2Vzbid0Ci0gICAgLy8gICBuZWVk
IHRvIGFjY291bnQgZm9yIGVudW1zLgotICAgIEFkZEVycm9yKCJFeHBlY3RlZCBtZXNzYWdlIHR5
cGUuIik7Ci0KLSAgICAvLyBQcmV0ZW5kIHRvIGFjY2VwdCB0aGlzIHR5cGUgc28gdGhhdCB3ZSBj
YW4gZ28gb24gcGFyc2luZy4KLSAgICAqdHlwZV9uYW1lID0gaW5wdXRfLT5jdXJyZW50KCkudGV4
dDsKLSAgICBpbnB1dF8tPk5leHQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIEEg
bGVhZGluZyAiLiIgbWVhbnMgdGhlIG5hbWUgaXMgZnVsbHktcXVhbGlmaWVkLgotICBpZiAoVHJ5
Q29uc3VtZSgiLiIpKSB0eXBlX25hbWUtPmFwcGVuZCgiLiIpOwotCi0gIC8vIENvbnN1bWUgdGhl
IGZpcnN0IHBhcnQgb2YgdGhlIG5hbWUuCi0gIHN0cmluZyBpZGVudGlmaWVyOwotICBETyhDb25z
dW1lSWRlbnRpZmllcigmaWRlbnRpZmllciwgIkV4cGVjdGVkIHR5cGUgbmFtZS4iKSk7Ci0gIHR5
cGVfbmFtZS0+YXBwZW5kKGlkZW50aWZpZXIpOwotCi0gIC8vIENvbnN1bWUgbW9yZSBwYXJ0cy4K
LSAgd2hpbGUgKFRyeUNvbnN1bWUoIi4iKSkgewotICAgIHR5cGVfbmFtZS0+YXBwZW5kKCIuIik7
Ci0gICAgRE8oQ29uc3VtZUlkZW50aWZpZXIoJmlkZW50aWZpZXIsICJFeHBlY3RlZCBpZGVudGlm
aWVyLiIpKTsKLSAgICB0eXBlX25hbWUtPmFwcGVuZChpZGVudGlmaWVyKTsKLSAgfQotCi0gIHJl
dHVybiB0cnVlOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZVBhY2th
Z2UoRmlsZURlc2NyaXB0b3JQcm90byogZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTG9jYXRpb25SZWNvcmRlciYgcm9vdF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29udGFpbmluZ19maWxlKSB7Ci0g
IGlmIChmaWxlLT5oYXNfcGFja2FnZSgpKSB7Ci0gICAgQWRkRXJyb3IoIk11bHRpcGxlIHBhY2th
Z2UgZGVmaW5pdGlvbnMuIik7Ci0gICAgLy8gRG9uJ3QgYXBwZW5kIHRoZSBuZXcgcGFja2FnZSB0
byB0aGUgb2xkIG9uZS4gIEp1c3QgcmVwbGFjZSBpdC4gIE5vdAotICAgIC8vIHRoYXQgaXQgcmVh
bGx5IG1hdHRlcnMgc2luY2UgdGhpcyBpcyBhbiBlcnJvciBhbnl3YXkuCi0gICAgZmlsZS0+Y2xl
YXJfcGFja2FnZSgpOwotICB9Ci0KLSAgRE8oQ29uc3VtZSgicGFja2FnZSIpKTsKLQotICB7Ci0g
ICAgTG9jYXRpb25SZWNvcmRlciBsb2NhdGlvbihyb290X2xvY2F0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90bzo6a1BhY2thZ2VGaWVsZE51bWJl
cik7Ci0gICAgbG9jYXRpb24uUmVjb3JkTGVnYWN5TG9jYXRpb24oZmlsZSwgRGVzY3JpcHRvclBv
b2w6OkVycm9yQ29sbGVjdG9yOjpOQU1FKTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBz
dHJpbmcgaWRlbnRpZmllcjsKLSAgICAgIERPKENvbnN1bWVJZGVudGlmaWVyKCZpZGVudGlmaWVy
LCAiRXhwZWN0ZWQgaWRlbnRpZmllci4iKSk7Ci0gICAgICBmaWxlLT5tdXRhYmxlX3BhY2thZ2Uo
KS0+YXBwZW5kKGlkZW50aWZpZXIpOwotICAgICAgaWYgKCFUcnlDb25zdW1lKCIuIikpIGJyZWFr
OwotICAgICAgZmlsZS0+bXV0YWJsZV9wYWNrYWdlKCktPmFwcGVuZCgiLiIpOwotICAgIH0KLQot
ICAgIGxvY2F0aW9uLkVuZEF0KGlucHV0Xy0+cHJldmlvdXMoKSk7Ci0KLSAgICBETyhDb25zdW1l
RW5kT2ZEZWNsYXJhdGlvbigiOyIsICZsb2NhdGlvbikpOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgUGFyc2VyOjpQYXJzZUltcG9ydChSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4q
IGRlcGVuZGVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgUmVwZWF0ZWRGaWVsZDxpbnQz
Mj4qIHB1YmxpY19kZXBlbmRlbmN5LAotICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGVhdGVk
RmllbGQ8aW50MzI+KiB3ZWFrX2RlcGVuZGVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTG9jYXRpb25SZWNvcmRlciYgcm9vdF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBjb250YWluaW5nX2ZpbGUpIHsKLSAg
RE8oQ29uc3VtZSgiaW1wb3J0IikpOwotICBpZiAoTG9va2luZ0F0KCJwdWJsaWMiKSkgewotICAg
IExvY2F0aW9uUmVjb3JkZXIgbG9jYXRpb24oCi0gICAgICAgIHJvb3RfbG9jYXRpb24sIEZpbGVE
ZXNjcmlwdG9yUHJvdG86OmtQdWJsaWNEZXBlbmRlbmN5RmllbGROdW1iZXIsCi0gICAgICAgIHB1
YmxpY19kZXBlbmRlbmN5LT5zaXplKCkpOwotICAgIERPKENvbnN1bWUoInB1YmxpYyIpKTsKLSAg
ICAqcHVibGljX2RlcGVuZGVuY3ktPkFkZCgpID0gZGVwZW5kZW5jeS0+c2l6ZSgpOwotICB9IGVs
c2UgaWYgKExvb2tpbmdBdCgid2VhayIpKSB7Ci0gICAgTG9jYXRpb25SZWNvcmRlciBsb2NhdGlv
bigKLSAgICAgICAgcm9vdF9sb2NhdGlvbiwgRmlsZURlc2NyaXB0b3JQcm90bzo6a1dlYWtEZXBl
bmRlbmN5RmllbGROdW1iZXIsCi0gICAgICAgIHdlYWtfZGVwZW5kZW5jeS0+c2l6ZSgpKTsKLSAg
ICBETyhDb25zdW1lKCJ3ZWFrIikpOwotICAgICp3ZWFrX2RlcGVuZGVuY3ktPkFkZCgpID0gZGVw
ZW5kZW5jeS0+c2l6ZSgpOwotICB9Ci0gIHsKLSAgICBMb2NhdGlvblJlY29yZGVyIGxvY2F0aW9u
KHJvb3RfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlRGVzY3Jp
cHRvclByb3RvOjprRGVwZW5kZW5jeUZpZWxkTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVwZW5kZW5jeS0+c2l6ZSgpKTsKLSAgICBETyhDb25zdW1lU3RyaW5nKGRlcGVu
ZGVuY3ktPkFkZCgpLAotICAgICAgIkV4cGVjdGVkIGEgc3RyaW5nIG5hbWluZyB0aGUgZmlsZSB0
byBpbXBvcnQuIikpOwotCi0gICAgbG9jYXRpb24uRW5kQXQoaW5wdXRfLT5wcmV2aW91cygpKTsK
LQotICAgIERPKENvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKCI7IiwgJmxvY2F0aW9uKSk7Ci0gIH0K
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU291cmNlTG9jYXRpb25UYWJs
ZTo6U291cmNlTG9jYXRpb25UYWJsZSgpIHt9Ci1Tb3VyY2VMb2NhdGlvblRhYmxlOjp+U291cmNl
TG9jYXRpb25UYWJsZSgpIHt9Ci0KLWJvb2wgU291cmNlTG9jYXRpb25UYWJsZTo6RmluZCgKLSAg
ICBjb25zdCBNZXNzYWdlKiBkZXNjcmlwdG9yLAotICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNv
bGxlY3Rvcjo6RXJyb3JMb2NhdGlvbiBsb2NhdGlvbiwKLSAgICBpbnQqIGxpbmUsIGludCogY29s
dW1uKSBjb25zdCB7Ci0gIGNvbnN0IHBhaXI8aW50LCBpbnQ+KiByZXN1bHQgPQotICAgICAgRmlu
ZE9yTnVsbChsb2NhdGlvbl9tYXBfLCBzdGQ6Om1ha2VfcGFpcihkZXNjcmlwdG9yLCBsb2NhdGlv
bikpOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAqbGluZSAgID0gLTE7Ci0gICAgKmNv
bHVtbiA9IDA7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgewotICAgICpsaW5lICAgPSBy
ZXN1bHQtPmZpcnN0OwotICAgICpjb2x1bW4gPSByZXN1bHQtPnNlY29uZDsKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfQotfQotCi12b2lkIFNvdXJjZUxvY2F0aW9uVGFibGU6OkFkZCgKLSAgICBjb25z
dCBNZXNzYWdlKiBkZXNjcmlwdG9yLAotICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rv
cjo6RXJyb3JMb2NhdGlvbiBsb2NhdGlvbiwKLSAgICBpbnQgbGluZSwgaW50IGNvbHVtbikgewot
ICBsb2NhdGlvbl9tYXBfW3N0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0b3IsIGxvY2F0aW9uKV0gPQot
ICAgICAgc3RkOjptYWtlX3BhaXIobGluZSwgY29sdW1uKTsKLX0KLQotdm9pZCBTb3VyY2VMb2Nh
dGlvblRhYmxlOjpDbGVhcigpIHsKLSAgbG9jYXRpb25fbWFwXy5jbGVhcigpOwotfQotCi19ICAv
LyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFt
ZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3Bh
cnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BhcnNlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyYzU2MWMyM2Q3YmEwZmZhYWMwZDk5Yzg4ZmZmMDRkZTFmNDYx
NjgwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2OSAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBr
ZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFBy
b3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4s
IGFuZCBvdGhlcnMuCi0vLwotLy8gSW1wbGVtZW50cyBwYXJzaW5nIG9mIC5wcm90byBmaWxlcyB0
byBGaWxlRGVzY3JpcHRvclByb3Rvcy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElM
RVJfUEFSU0VSX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfUEFSU0VSX0hf
XwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx1dGlsaXR5
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
cmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vdG9rZW5pemVy
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsgY2xhc3MgTWVz
c2FnZTsgfQotCi1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsKLQot
Ly8gRGVmaW5lZCBpbiB0aGlzIGZpbGUuCi1jbGFzcyBQYXJzZXI7Ci1jbGFzcyBTb3VyY2VMb2Nh
dGlvblRhYmxlOwotCi0vLyBJbXBsZW1lbnRzIHBhcnNpbmcgb2YgcHJvdG9jb2wgZGVmaW5pdGlv
bnMgKHN1Y2ggYXMgLnByb3RvIGZpbGVzKS4KLS8vCi0vLyBOb3RlIHRoYXQgbW9zdCB1c2VycyB3
aWxsIGJlIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgSW1wb3J0ZXIgY2xhc3MuCi0vLyBQYXJzZXIg
aXMgYSBsb3dlci1sZXZlbCBjbGFzcyB3aGljaCBzaW1wbHkgY29udmVydHMgYSBzaW5nbGUgLnBy
b3RvIGZpbGUKLS8vIHRvIGEgRmlsZURlc2NyaXB0b3JQcm90by4gIEl0IGRvZXMgbm90IHJlc29s
dmUgaW1wb3J0IGRpcmVjdGl2ZXMgb3IgcGVyZm9ybQotLy8gbWFueSBvdGhlciBraW5kcyBvZiB2
YWxpZGF0aW9uIG5lZWRlZCB0byBjb25zdHJ1Y3QgYSBjb21wbGV0ZQotLy8gRmlsZURlc2NyaXB0
b3IuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgUGFyc2VyIHsKLSBwdWJsaWM6Ci0gIFBhcnNl
cigpOwotICB+UGFyc2VyKCk7Ci0KLSAgLy8gUGFyc2UgdGhlIGVudGlyZSBpbnB1dCBhbmQgY29u
c3RydWN0IGEgRmlsZURlc2NyaXB0b3JQcm90byByZXByZXNlbnRpbmcKLSAgLy8gaXQuICBSZXR1
cm5zIHRydWUgaWYgbm8gZXJyb3JzIG9jY3VycmVkLCBmYWxzZSBvdGhlcndpc2UuCi0gIGJvb2wg
UGFyc2UoaW86OlRva2VuaXplciogaW5wdXQsIEZpbGVEZXNjcmlwdG9yUHJvdG8qIGZpbGUpOwot
Ci0gIC8vIE9wdGlvbmFsIGZldGF1cmVzOgotCi0gIC8vIERFUFJFQ0FURUQ6ICBOZXcgY29kZSBz
aG91bGQgdXNlIHRoZSBTb3VyY2VDb2RlSW5mbyBlbWJlZGRlZCBpbiB0aGUKLSAgLy8gICBGaWxl
RGVzY3JpcHRvclByb3RvLgotICAvLwotICAvLyBSZXF1ZXN0cyB0aGF0IGxvY2F0aW9ucyBvZiBj
ZXJ0YWluIGRlZmluaXRpb25zIGJlIHJlY29yZGVkIHRvIHRoZSBnaXZlbgotICAvLyBTb3VyY2VM
b2NhdGlvblRhYmxlIHdoaWxlIHBhcnNpbmcuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvb2sgdXAg
ZXhhY3QgbGluZQotICAvLyBhbmQgY29sdW1uIG51bWJlcnMgZm9yIGVycm9ycyByZXBvcnRlZCBi
eSBEZXNjcmlwdG9yUG9vbCBkdXJpbmcgdmFsaWRhdGlvbi4KLSAgLy8gU2V0IHRvIE5VTEwgKHRo
ZSBkZWZhdWx0KSB0byBkaXNjYXJkIHNvdXJjZSBsb2NhdGlvbiBpbmZvcm1hdGlvbi4KLSAgdm9p
ZCBSZWNvcmRTb3VyY2VMb2NhdGlvbnNUbyhTb3VyY2VMb2NhdGlvblRhYmxlKiBsb2NhdGlvbl90
YWJsZSkgewotICAgIHNvdXJjZV9sb2NhdGlvbl90YWJsZV8gPSBsb2NhdGlvbl90YWJsZTsKLSAg
fQotCi0gIC8vIFJlcXVlc3RzIHRoYXQgZXJyb3JzIGJlIHJlY29yZGVkIHRvIHRoZSBnaXZlbiBF
cnJvckNvbGxlY3RvciB3aGlsZQotICAvLyBwYXJzaW5nLiAgU2V0IHRvIE5VTEwgKHRoZSBkZWZh
dWx0KSB0byBkaXNjYXJkIGVycm9yIG1lc3NhZ2VzLgotICB2b2lkIFJlY29yZEVycm9yc1RvKGlv
OjpFcnJvckNvbGxlY3RvciogZXJyb3JfY29sbGVjdG9yKSB7Ci0gICAgZXJyb3JfY29sbGVjdG9y
XyA9IGVycm9yX2NvbGxlY3RvcjsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIGlkZW50aWZpZXIg
dXNlZCBpbiB0aGUgInN5bnRheCA9ICIgZGVjbGFyYXRpb24sIGlmIG9uZSB3YXMKLSAgLy8gc2Vl
biBkdXJpbmcgdGhlIGxhc3QgY2FsbCB0byBQYXJzZSgpLCBvciB0aGUgZW1wdHkgc3RyaW5nIG90
aGVyd2lzZS4KLSAgY29uc3Qgc3RyaW5nJiBHZXRTeW50YXhJZGVudGlmaWVyKCkgeyByZXR1cm4g
c3ludGF4X2lkZW50aWZpZXJfOyB9Ci0KLSAgLy8gSWYgc2V0IHRydWUsIGlucHV0IGZpbGVzIHdp
bGwgYmUgcmVxdWlyZWQgdG8gYmVnaW4gd2l0aCBhIHN5bnRheAotICAvLyBpZGVudGlmaWVyLiAg
T3RoZXJ3aXNlLCBmaWxlcyBtYXkgb21pdCB0aGlzLiAgSWYgYSBzeW50YXggaWRlbnRpZmllcgot
ICAvLyBpcyBwcm92aWRlZCwgaXQgbXVzdCBiZSAnc3ludGF4ID0gInByb3RvMiI7JyBhbmQgbXVz
dCBhcHBlYXIgYXQgdGhlCi0gIC8vIHRvcCBvZiB0aGlzIGZpbGUgcmVnYXJkbGVzcyBvZiB3aGV0
aGVyIG9yIG5vdCBpdCB3YXMgcmVxdWlyZWQuCi0gIHZvaWQgU2V0UmVxdWlyZVN5bnRheElkZW50
aWZpZXIoYm9vbCB2YWx1ZSkgewotICAgIHJlcXVpcmVfc3ludGF4X2lkZW50aWZpZXJfID0gdmFs
dWU7Ci0gIH0KLQotICAvLyBDYWxsIFNldFN0b3BBZnRlclN5bnRheElkZW50aWZpZXIodHJ1ZSkg
dG8gdGVsbCB0aGUgcGFyc2VyIHRvIHN0b3AKLSAgLy8gcGFyc2luZyBhcyBzb29uIGFzIGl0IGhh
cyBzZWVuIHRoZSBzeW50YXggaWRlbnRpZmllciwgb3IgbGFjayB0aGVyZW9mLgotICAvLyBUaGlz
IGlzIHVzZWZ1bCBmb3IgcXVpY2tseSBpZGVudGlmeWluZyB0aGUgc3ludGF4IG9mIHRoZSBmaWxl
IHdpdGhvdXQKLSAgLy8gcGFyc2luZyB0aGUgd2hvbGUgdGhpbmcuICBJZiB0aGlzIGlzIGVuYWJs
ZWQsIG5vIGVycm9yIHdpbGwgYmUgcmVjb3JkZWQKLSAgLy8gaWYgdGhlIHN5bnRheCBpZGVudGlm
aWVyIGlzIHNvbWV0aGluZyBvdGhlciB0aGFuICJwcm90bzIiIChzaW5jZQotICAvLyBwcmVzdW1h
Ymx5IHRoZSBjYWxsZXIgaW50ZW5kcyB0byBkZWFsIHdpdGggdGhhdCksIGJ1dCBvdGhlciBraW5k
cyBvZgotICAvLyBlcnJvcnMgKGUuZy4gcGFyc2UgZXJyb3JzKSB3aWxsIHN0aWxsIGJlIHJlcG9y
dGVkLiAgV2hlbiB0aGlzIGlzIGVuYWJsZWQsCi0gIC8vIHlvdSBtYXkgcGFzcyBhIE5VTEwgRmls
ZURlc2NyaXB0b3JQcm90byB0byBQYXJzZSgpLgotICB2b2lkIFNldFN0b3BBZnRlclN5bnRheElk
ZW50aWZpZXIoYm9vbCB2YWx1ZSkgewotICAgIHN0b3BfYWZ0ZXJfc3ludGF4X2lkZW50aWZpZXJf
ID0gdmFsdWU7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGNsYXNzIExvY2F0aW9uUmVjb3JkZXI7Ci0K
LSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLSAgLy8gRXJyb3IgcmVjb3ZlcnkgaGVscGVycwotCi0gIC8vIENvbnN1
bWUgdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgc3RhdGVtZW50LiAgVGhpcyBjb25zdW1lcyB0b2tl
bnMKLSAgLy8gdW50aWwgaXQgc2VlcyBvbmUgb2Y6Ci0gIC8vICAgJzsnICBDb25zdW1lcyB0aGUg
dG9rZW4gYW5kIHJldHVybnMuCi0gIC8vICAgJ3snICBDb25zdW1lcyB0aGUgYnJhY2UgdGhlbiBj
YWxscyBTa2lwUmVzdE9mQmxvY2soKS4KLSAgLy8gICAnfScgIFJldHVybnMgd2l0aG91dCBjb25z
dW1pbmcuCi0gIC8vICAgRU9GICBSZXR1cm5zIChjYW4ndCBjb25zdW1lKS4KLSAgLy8gVGhlIFBh
cnNlciBvZnRlbiBjYWxscyBTa2lwU3RhdGVtZW50KCkgYWZ0ZXIgZW5jb3VudGVyaW5nIGEgc3lu
dGF4Ci0gIC8vIGVycm9yLiAgVGhpcyBhbGxvd3MgaXQgdG8gZ28gb24gcGFyc2luZyB0aGUgZm9s
bG93aW5nIGxpbmVzLCBhbGxvd2luZwotICAvLyBpdCB0byByZXBvcnQgbW9yZSB0aGFuIGp1c3Qg
b25lIGVycm9yIGluIHRoZSBmaWxlLgotICB2b2lkIFNraXBTdGF0ZW1lbnQoKTsKLQotICAvLyBD
b25zdW1lIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IGJsb2NrLCBpbmNsdWRpbmcgbmVzdGVkIGJs
b2NrcywKLSAgLy8gZW5kaW5nIGFmdGVyIHRoZSBjbG9zaW5nICd9JyBpcyBlbmNvdW50ZXJlZCBh
bmQgY29uc3VtZWQsIG9yIGF0IEVPRi4KLSAgdm9pZCBTa2lwUmVzdE9mQmxvY2soKTsKLQotICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICAvLyBTaW5nbGUtdG9rZW4gY29uc3VtaW5nIGhlbHBlcnMKLSAgLy8KLSAg
Ly8gVGhlc2UgbWFrZSBwYXJzaW5nIGNvZGUgbW9yZSByZWFkYWJsZS4KLQotICAvLyBUcnVlIGlm
IHRoZSBjdXJyZW50IHRva2VuIGlzIFRZUEVfRU5ELgotICBpbmxpbmUgYm9vbCBBdEVuZCgpOwot
Ci0gIC8vIFRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgZ2l2ZW4gdGV4dC4KLSAg
aW5saW5lIGJvb2wgTG9va2luZ0F0KGNvbnN0IGNoYXIqIHRleHQpOwotICAvLyBUcnVlIGlmIHRo
ZSBuZXh0IHRva2VuIGlzIG9mIHRoZSBnaXZlbiB0eXBlLgotICBpbmxpbmUgYm9vbCBMb29raW5n
QXRUeXBlKGlvOjpUb2tlbml6ZXI6OlRva2VuVHlwZSB0b2tlbl90eXBlKTsKLQotICAvLyBJZiB0
aGUgbmV4dCB0b2tlbiBleGFjdGx5IG1hdGNoZXMgdGhlIHRleHQgZ2l2ZW4sIGNvbnN1bWUgaXQg
YW5kIHJldHVybgotICAvLyB0cnVlLiAgT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2Ugd2l0aG91dCBs
b2dnaW5nIGFuIGVycm9yLgotICBib29sIFRyeUNvbnN1bWUoY29uc3QgY2hhciogdGV4dCk7Ci0K
LSAgLy8gVGhlc2UgYXR0ZW1wdCB0byByZWFkIHNvbWUga2luZCBvZiB0b2tlbiBmcm9tIHRoZSBp
bnB1dC4gIElmIHN1Y2Nlc3NmdWwsCi0gIC8vIHRoZXkgcmV0dXJuIHRydWUuICBPdGhlcndpc2Ug
dGhleSByZXR1cm4gZmFsc2UgYW5kIGFkZCB0aGUgZ2l2ZW4gZXJyb3IKLSAgLy8gdG8gdGhlIGVy
cm9yIGxpc3QuCi0KLSAgLy8gQ29uc3VtZSBhIHRva2VuIHdpdGggdGhlIGV4YWN0IHRleHQgZ2l2
ZW4uCi0gIGJvb2wgQ29uc3VtZShjb25zdCBjaGFyKiB0ZXh0LCBjb25zdCBjaGFyKiBlcnJvcik7
Ci0gIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyB0aGUgZXJy
b3IgIkV4cGVjdGVkIFwidGV4dFwiLiIsCi0gIC8vIHdoZXJlICJ0ZXh0IiBpcyB0aGUgZXhwZWN0
ZWQgdG9rZW4gdGV4dC4KLSAgYm9vbCBDb25zdW1lKGNvbnN0IGNoYXIqIHRleHQpOwotICAvLyBD
b25zdW1lIGEgdG9rZW4gb2YgdHlwZSBJREVOVElGSUVSIGFuZCBzdG9yZSBpdHMgdGV4dCBpbiAi
b3V0cHV0Ii4KLSAgYm9vbCBDb25zdW1lSWRlbnRpZmllcihzdHJpbmcqIG91dHB1dCwgY29uc3Qg
Y2hhciogZXJyb3IpOwotICAvLyBDb25zdW1lIGFuIGludGVnZXIgYW5kIHN0b3JlIGl0cyB2YWx1
ZSBpbiAib3V0cHV0Ii4KLSAgYm9vbCBDb25zdW1lSW50ZWdlcihpbnQqIG91dHB1dCwgY29uc3Qg
Y2hhciogZXJyb3IpOwotICAvLyBDb25zdW1lIGEgc2lnbmVkIGludGVnZXIgYW5kIHN0b3JlIGl0
cyB2YWx1ZSBpbiAib3V0cHV0Ii4KLSAgYm9vbCBDb25zdW1lU2lnbmVkSW50ZWdlcihpbnQqIG91
dHB1dCwgY29uc3QgY2hhciogZXJyb3IpOwotICAvLyBDb25zdW1lIGEgNjQtYml0IGludGVnZXIg
YW5kIHN0b3JlIGl0cyB2YWx1ZSBpbiAib3V0cHV0Ii4gIElmIHRoZSB2YWx1ZQotICAvLyBpcyBn
cmVhdGVyIHRoYW4gbWF4X3ZhbHVlLCBhbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkLgotICBib29s
IENvbnN1bWVJbnRlZ2VyNjQodWludDY0IG1heF92YWx1ZSwgdWludDY0KiBvdXRwdXQsIGNvbnN0
IGNoYXIqIGVycm9yKTsKLSAgLy8gQ29uc3VtZSBhIG51bWJlciBhbmQgc3RvcmUgaXRzIHZhbHVl
IGluICJvdXRwdXQiLiAgVGhpcyB3aWxsIGFjY2VwdAotICAvLyB0b2tlbnMgb2YgZWl0aGVyIElO
VEVHRVIgb3IgRkxPQVQgdHlwZS4KLSAgYm9vbCBDb25zdW1lTnVtYmVyKGRvdWJsZSogb3V0cHV0
LCBjb25zdCBjaGFyKiBlcnJvcik7Ci0gIC8vIENvbnN1bWUgYSBzdHJpbmcgbGl0ZXJhbCBhbmQg
c3RvcmUgaXRzICh1bmVzY2FwZWQpIHZhbHVlIGluICJvdXRwdXQiLgotICBib29sIENvbnN1bWVT
dHJpbmcoc3RyaW5nKiBvdXRwdXQsIGNvbnN0IGNoYXIqIGVycm9yKTsKLQotICAvLyBDb25zdW1l
IGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBlbmQgb2YgdGhlIHN0YXRlbWVudC4gIENvbW1lbnRz
IGJldHdlZW4KLSAgLy8gdGhpcyB0b2tlbiBhbmQgdGhlIG5leHQgd2lsbCBiZSBoYXJ2ZXN0ZWQg
Zm9yIGRvY3VtZW50YXRpb24uICBUaGUgZ2l2ZW4KLSAgLy8gTG9jYXRpb25SZWNvcmRlciBzaG91
bGQgcmVmZXIgdG8gdGhlIGRlY2xhcmF0aW9uIHRoYXQgd2FzIGp1c3QgcGFyc2VkOwotICAvLyBp
dCB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZXNlIGNvbW1lbnRzLgotICAvLwotICAvLyBUT0RP
KGtlbnRvbik6ICBUaGUgTG9jYXRpb25SZWNvcmRlciBpcyBjb25zdCBiZWNhdXNlIGhpc3Rvcmlj
YWxseSBsb2NhdGlvbnMKLSAgLy8gICBoYXZlIGJlZW4gcGFzc2VkIGFyb3VuZCBieSBjb25zdCBy
ZWZlcmVuY2UsIGZvciBubyBwYXJ0aWN1bGFybHkgZ29vZAotICAvLyAgIHJlYXNvbi4gIFdlIHNo
b3VsZCBwcm9iYWJseSBnbyB0aHJvdWdoIGFuZCBjaGFuZ2UgdGhlbSBhbGwgdG8gbXV0YWJsZQot
ICAvLyAgIHBvaW50ZXIgdG8gbWFrZSB0aGlzIG1vcmUgaW50dWl0aXZlLgotICBib29sIFRyeUNv
bnN1bWVFbmRPZkRlY2xhcmF0aW9uKAotICAgICAgY29uc3QgY2hhciogdGV4dCwgY29uc3QgTG9j
YXRpb25SZWNvcmRlciogbG9jYXRpb24pOwotICBib29sIFRyeUNvbnN1bWVFbmRPZkRlY2xhcmF0
aW9uRmluaXNoU2NvcGUoCi0gICAgICBjb25zdCBjaGFyKiB0ZXh0LCBjb25zdCBMb2NhdGlvblJl
Y29yZGVyKiBsb2NhdGlvbik7Ci0KLSAgYm9vbCBDb25zdW1lRW5kT2ZEZWNsYXJhdGlvbigKLSAg
ICAgIGNvbnN0IGNoYXIqIHRleHQsIGNvbnN0IExvY2F0aW9uUmVjb3JkZXIqIGxvY2F0aW9uKTsK
LQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAvLyBFcnJvciBsb2dnaW5nIGhlbHBlcnMKLQotICAvLyBJbnZv
a2VzIGVycm9yX2NvbGxlY3Rvcl8tPkFkZEVycm9yKCksIGlmIGVycm9yX2NvbGxlY3Rvcl8gaXMg
bm90IE5VTEwuCi0gIHZvaWQgQWRkRXJyb3IoaW50IGxpbmUsIGludCBjb2x1bW4sIGNvbnN0IHN0
cmluZyYgZXJyb3IpOwotCi0gIC8vIEludm9rZXMgZXJyb3JfY29sbGVjdG9yXy0+QWRkRXJyb3Io
KSB3aXRoIHRoZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVyCi0gIC8vIG9mIHRoZSBjdXJyZW50IHRv
a2VuLgotICB2b2lkIEFkZEVycm9yKGNvbnN0IHN0cmluZyYgZXJyb3IpOwotCi0gIC8vIFJlY29y
ZHMgYSBsb2NhdGlvbiBpbiB0aGUgU291cmNlQ29kZUluZm8ubG9jYXRpb24gdGFibGUgKHNlZQot
ICAvLyBkZXNjcmlwdG9yLnByb3RvKS4gIFdlIHVzZSBSQUlJIHRvIGVuc3VyZSB0aGF0IHRoZSBz
dGFydCBhbmQgZW5kIGxvY2F0aW9ucwotICAvLyBhcmUgcmVjb3JkZWQgLS0gdGhlIGNvbnN0cnVj
dG9yIHJlY29yZHMgdGhlIHN0YXJ0IGxvY2F0aW9uIGFuZCB0aGUKLSAgLy8gZGVzdHJ1Y3RvciBy
ZWNvcmRzIHRoZSBlbmQgbG9jYXRpb24uICBTaW5jZSB0aGUgcGFyc2VyIGlzCi0gIC8vIHJlY3Vy
c2l2ZS1kZXNjZW50LCB0aGlzIHdvcmtzIG91dCBiZWF1dGlmdWxseS4KLSAgY2xhc3MgTElCUFJP
VE9CVUZfRVhQT1JUIExvY2F0aW9uUmVjb3JkZXIgewotICAgcHVibGljOgotICAgIC8vIENvbnN0
cnVjdCB0aGUgZmlsZSdzICJyb290IiBsb2NhdGlvbi4KLSAgICBMb2NhdGlvblJlY29yZGVyKFBh
cnNlciogcGFyc2VyKTsKLQotICAgIC8vIENvbnN0cnVjdCBhIGxvY2F0aW9uIHRoYXQgcmVwcmVz
ZW50cyBhIGRlY2xhcmF0aW9uIG5lc3RlZCB3aXRoaW4gdGhlCi0gICAgLy8gZ2l2ZW4gcGFyZW50
LiAgRS5nLiBhIGZpZWxkJ3MgbG9jYXRpb24gaXMgbmVzdGVkIHdpdGhpbiB0aGUgbG9jYXRpb24K
LSAgICAvLyBmb3IgYSBtZXNzYWdlIHR5cGUuICBUaGUgcGFyZW50J3MgcGF0aCB3aWxsIGJlIGNv
cGllZCwgc28geW91IHNob3VsZAotICAgIC8vIGNhbGwgQWRkUGF0aCgpIG9ubHkgdG8gYWRkIHRo
ZSBwYXRoIGNvbXBvbmVudHMgbGVhZGluZyBmcm9tIHRoZSBwYXJlbnQKLSAgICAvLyB0byB0aGUg
Y2hpbGQgKGFzIG9wcG9zZWQgdG8gbGVhZGluZyBmcm9tIHRoZSByb290IHRvIHRoZSBjaGlsZCku
Ci0gICAgTG9jYXRpb25SZWNvcmRlcihjb25zdCBMb2NhdGlvblJlY29yZGVyJiBwYXJlbnQpOwot
Ci0gICAgLy8gQ29udmVuaWVuY2UgY29uc3RydWN0b3JzIHRoYXQgY2FsbCBBZGRQYXRoKCkgb25l
IG9yIHR3byB0aW1lcy4KLSAgICBMb2NhdGlvblJlY29yZGVyKGNvbnN0IExvY2F0aW9uUmVjb3Jk
ZXImIHBhcmVudCwgaW50IHBhdGgxKTsKLSAgICBMb2NhdGlvblJlY29yZGVyKGNvbnN0IExvY2F0
aW9uUmVjb3JkZXImIHBhcmVudCwgaW50IHBhdGgxLCBpbnQgcGF0aDIpOwotCi0gICAgfkxvY2F0
aW9uUmVjb3JkZXIoKTsKLQotICAgIC8vIEFkZCBhIHBhdGggY29tcG9uZW50LiAgU2VlIFNvdXJj
ZUNvZGVJbmZvLkxvY2F0aW9uLnBhdGggaW4KLSAgICAvLyBkZXNjcmlwdG9yLnByb3RvLgotICAg
IHZvaWQgQWRkUGF0aChpbnQgcGF0aF9jb21wb25lbnQpOwotCi0gICAgLy8gQnkgZGVmYXVsdCB0
aGUgbG9jYXRpb24gaXMgY29uc2lkZXJlZCB0byBzdGFydCBhdCB0aGUgY3VycmVudCB0b2tlbiBh
dAotICAgIC8vIHRoZSB0aW1lIHRoZSBMb2NhdGlvblJlY29yZGVyIGlzIGNyZWF0ZWQuICBTdGFy
dEF0KCkgc2V0cyB0aGUgc3RhcnQKLSAgICAvLyBsb2NhdGlvbiB0byB0aGUgZ2l2ZW4gdG9rZW4g
aW5zdGVhZC4KLSAgICB2b2lkIFN0YXJ0QXQoY29uc3QgaW86OlRva2VuaXplcjo6VG9rZW4mIHRv
a2VuKTsKLQotICAgIC8vIFN0YXJ0IGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFzIHNvbWUgb3RoZXIg
TG9jYXRpb25SZWNvcmRlci4KLSAgICB2b2lkIFN0YXJ0QXQoY29uc3QgTG9jYXRpb25SZWNvcmRl
ciYgb3RoZXIpOwotCi0gICAgLy8gQnkgZGVmYXVsdCB0aGUgbG9jYXRpb24gaXMgY29uc2lkZXJl
ZCB0byBlbmQgYXQgdGhlIHByZXZpb3VzIHRva2VuIGF0Ci0gICAgLy8gdGhlIHRpbWUgdGhlIExv
Y2F0aW9uUmVjb3JkZXIgaXMgZGVzdHJveWVkLiAgRW5kQXQoKSBzZXRzIHRoZSBlbmQKLSAgICAv
LyBsb2NhdGlvbiB0byB0aGUgZ2l2ZW4gdG9rZW4gaW5zdGVhZC4KLSAgICB2b2lkIEVuZEF0KGNv
bnN0IGlvOjpUb2tlbml6ZXI6OlRva2VuJiB0b2tlbik7Ci0KLSAgICAvLyBSZWNvcmRzIHRoZSBz
dGFydCBwb2ludCBvZiB0aGlzIGxvY2F0aW9uIHRvIHRoZSBTb3VyY2VMb2NhdGlvblRhYmxlIHRo
YXQKLSAgICAvLyB3YXMgcGFzc2VkIHRvIFJlY29yZFNvdXJjZUxvY2F0aW9uc1RvKCksIGlmIGFu
eS4gIFNvdXJjZUxvY2F0aW9uVGFibGUKLSAgICAvLyBpcyBhbiBvbGRlciB3YXkgb2Yga2VlcGlu
ZyB0cmFjayBvZiBzb3VyY2UgbG9jYXRpb25zIHdoaWNoIGlzIHN0aWxsCi0gICAgLy8gdXNlZCBp
biBzb21lIHBsYWNlcy4KLSAgICB2b2lkIFJlY29yZExlZ2FjeUxvY2F0aW9uKGNvbnN0IE1lc3Nh
Z2UqIGRlc2NyaXB0b3IsCi0gICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6
RXJyb3JMb2NhdGlvbiBsb2NhdGlvbik7Ci0KLSAgICAvLyBBdHRhY2hlcyBsZWFkaW5nIGFuZCB0
cmFpbGluZyBjb21tZW50cyB0byB0aGUgbG9jYXRpb24uICBUaGUgdHdvIHN0cmluZ3MKLSAgICAv
LyB3aWxsIGJlIHN3YXBwZWQgaW50byBwbGFjZSwgc28gYWZ0ZXIgdGhpcyBpcyBjYWxsZWQgKmxl
YWRpbmcgYW5kCi0gICAgLy8gKnRyYWlsaW5nIHdpbGwgYmUgZW1wdHkuCi0gICAgLy8KLSAgICAv
LyBUT0RPKGtlbnRvbik6ICBTZWUgY29tbWVudCBvbiBUcnlDb25zdW1lRW5kT2ZEZWNsYXJhdGlv
bigpLCBhYm92ZSwgZm9yCi0gICAgLy8gICB3aHkgdGhpcyBpcyBjb25zdC4KLSAgICB2b2lkIEF0
dGFjaENvbW1lbnRzKHN0cmluZyogbGVhZGluZywgc3RyaW5nKiB0cmFpbGluZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+KiBkZXRhY2hlZF9jb21tZW50cykgY29uc3Q7
Ci0KLSAgIHByaXZhdGU6Ci0gICAgLy8gSW5kZXhlcyBvZiBwYXJlbnQgYW5kIGN1cnJlbnQgbG9j
YXRpb24gaW4gdGhlIHBhcmVudAotICAgIC8vIFNvdXJjZUNvZGVJbmZvLmxvY2F0aW9uIHJlcGVh
dGVkIGZpZWxkLiBGb3IgdG9wLWxldmVsIGVsZW1lbnRzLAotICAgIC8vIHBhcmVudF9pbmRleF8g
aXMgLTEuCi0gICAgUGFyc2VyKiBwYXJzZXJfOwotICAgIFNvdXJjZUNvZGVJbmZvOjpMb2NhdGlv
biogbG9jYXRpb25fOwotCi0gICAgdm9pZCBJbml0KGNvbnN0IExvY2F0aW9uUmVjb3JkZXImIHBh
cmVudCk7Ci0gIH07Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUGFyc2VycyBmb3IgdmFyaW91cyBs
YW5ndWFnZSBjb25zdHJ1Y3RzCi0KLSAgLy8gUGFyc2VzIHRoZSAic3ludGF4ID0gXCJwcm90bzJc
IjsiIGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4gIFJldHVybnMKLSAgLy8gZmFsc2UgaWYg
aXQgZmFpbGVkIHRvIHBhcnNlIG9yIGlmIHRoZSBzeW50YXggaWRlbnRpZmllciB3YXMgbm90Ci0g
IC8vIHJlY29nbml6ZWQuCi0gIGJvb2wgUGFyc2VTeW50YXhJZGVudGlmaWVyKGNvbnN0IExvY2F0
aW9uUmVjb3JkZXImIHBhcmVudCk7Ci0KLSAgLy8gVGhlc2UgbWV0aG9kcyBwYXJzZSB2YXJpb3Vz
IGluZGl2aWR1YWwgYml0cyBvZiBjb2RlLiAgVGhleSByZXR1cm4KLSAgLy8gZmFsc2UgaWYgdGhl
eSBjb21wbGV0ZWx5IGZhaWwgdG8gcGFyc2UgdGhlIGNvbnN0cnVjdC4gIEluIHRoaXMgY2FzZSwK
LSAgLy8gaXQgaXMgcHJvYmFibHkgbmVjZXNzYXJ5IHRvIHNraXAgdGhlIHJlc3Qgb2YgdGhlIHN0
YXRlbWVudCB0byByZWNvdmVyLgotICAvLyBIb3dldmVyLCBpZiB0aGVzZSBtZXRob2RzIHJldHVy
biB0cnVlLCBpdCBkb2VzIE5PVCBtZWFuIHRoYXQgdGhlcmUKLSAgLy8gd2VyZSBubyBlcnJvcnM7
IG9ubHkgdGhhdCB0aGVyZSB3ZXJlIG5vICpzeW50YXgqIGVycm9ycy4gIEZvciBpbnN0YW5jZSwK
LSAgLy8gaWYgYSBzZXJ2aWNlIG1ldGhvZCBpcyBkZWZpbmVkIHVzaW5nIHByb3BlciBzeW50YXgg
YnV0IHVzZXMgYSBwcmltaXRpdmUKLSAgLy8gdHlwZSBhcyBpdHMgaW5wdXQgb3Igb3V0cHV0LCBQ
YXJzZU1ldGhvZEZpZWxkKCkgc3RpbGwgcmV0dXJucyB0cnVlCi0gIC8vIGFuZCBvbmx5IHJlcG9y
dHMgdGhlIGVycm9yIGJ5IGNhbGxpbmcgQWRkRXJyb3IoKS4gIEluIHByYWN0aWNlLCB0aGlzCi0g
IC8vIG1ha2VzIGxvZ2ljIG11Y2ggc2ltcGxlciBmb3IgdGhlIGNhbGxlci4KLQotICAvLyBQYXJz
ZSBhIHRvcC1sZXZlbCBtZXNzYWdlLCBlbnVtLCBzZXJ2aWNlLCBldGMuCi0gIGJvb2wgUGFyc2VU
b3BMZXZlbFN0YXRlbWVudChGaWxlRGVzY3JpcHRvclByb3RvKiBmaWxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcm9vdF9sb2NhdGlvbik7
Ci0KLSAgLy8gUGFyc2UgdmFyaW91cyBsYW5ndWFnZSBoaWdoLWxldmVsIGxhbmd1YWdlIGNvbnN0
cnVyY3RzLgotICBib29sIFBhcnNlTWVzc2FnZURlZmluaXRpb24oRGVzY3JpcHRvclByb3RvKiBt
ZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNv
cmRlciYgbWVzc2FnZV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRhaW5pbmdfZmlsZSk7Ci0gIGJvb2wgUGFyc2VF
bnVtRGVmaW5pdGlvbihFbnVtRGVzY3JpcHRvclByb3RvKiBlbnVtX3R5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBlbnVtX2xvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29u
dGFpbmluZ19maWxlKTsKLSAgYm9vbCBQYXJzZVNlcnZpY2VEZWZpbml0aW9uKFNlcnZpY2VEZXNj
cmlwdG9yUHJvdG8qIHNlcnZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBMb2NhdGlvblJlY29yZGVyJiBzZXJ2aWNlX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29udGFpbmluZ19maWxlKTsK
LSAgYm9vbCBQYXJzZVBhY2thZ2UoRmlsZURlc2NyaXB0b3JQcm90byogZmlsZSwKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcm9vdF9sb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29udGFpbmluZ19maWxl
KTsKLSAgYm9vbCBQYXJzZUltcG9ydChSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4qIGRlcGVuZGVu
Y3ksCi0gICAgICAgICAgICAgICAgICAgUmVwZWF0ZWRGaWVsZDxpbnQzMj4qIHB1YmxpY19kZXBl
bmRlbmN5LAotICAgICAgICAgICAgICAgICAgIFJlcGVhdGVkRmllbGQ8aW50MzI+KiB3ZWFrX2Rl
cGVuZGVuY3ksCi0gICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcm9v
dF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3Rv
KiBjb250YWluaW5nX2ZpbGUpOwotCi0gIC8vIFRoZXNlIG1ldGhvZHMgcGFyc2UgdGhlIGNvbnRl
bnRzIG9mIGEgbWVzc2FnZSwgZW51bSwgb3Igc2VydmljZSB0eXBlIGFuZAotICAvLyBhZGQgdGhl
bSB0byB0aGUgZ2l2ZW4gb2JqZWN0LiAgVGhleSBjb25zdW1lIHRoZSBlbnRpcmUgYmxvY2sgaW5j
bHVkaW5nCi0gIC8vIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBicmFjZS4KLSAgYm9vbCBQYXJz
ZU1lc3NhZ2VCbG9jayhEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgbWVzc2FnZV9sb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBjb250YWluaW5n
X2ZpbGUpOwotICBib29sIFBhcnNlRW51bUJsb2NrKEVudW1EZXNjcmlwdG9yUHJvdG8qIGVudW1f
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBlbnVt
X2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJv
dG8qIGNvbnRhaW5pbmdfZmlsZSk7Ci0gIGJvb2wgUGFyc2VTZXJ2aWNlQmxvY2soU2VydmljZURl
c2NyaXB0b3JQcm90byogc2VydmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBM
b2NhdGlvblJlY29yZGVyJiBzZXJ2aWNlX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRhaW5pbmdfZmlsZSk7Ci0KLSAgLy8g
UGFyc2Ugb25lIHN0YXRlbWVudCB3aXRoaW4gYSBtZXNzYWdlLCBlbnVtLCBvciBzZXJ2aWNlIGJs
b2NrLCBpbmNsdWRpbmcKLSAgLy8gZmluYWwgc2VtaWNvbG9uLgotICBib29sIFBhcnNlTWVzc2Fn
ZVN0YXRlbWVudChEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IExvY2F0aW9uUmVjb3JkZXImIG1lc3NhZ2VfbG9jYXRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRh
aW5pbmdfZmlsZSk7Ci0gIGJvb2wgUGFyc2VFbnVtU3RhdGVtZW50KEVudW1EZXNjcmlwdG9yUHJv
dG8qIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExvY2F0aW9uUmVj
b3JkZXImIGVudW1fbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZp
bGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRhaW5pbmdfZmlsZSk7Ci0gIGJvb2wgUGFyc2VTZXJ2aWNl
U3RhdGVtZW50KFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IExvY2F0aW9uUmVjb3JkZXImIHNlcnZpY2VfbG9jYXRpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8q
IGNvbnRhaW5pbmdfZmlsZSk7Ci0KLSAgLy8gUGFyc2UgYSBmaWVsZCBvZiBhIG1lc3NhZ2UuICBJ
ZiB0aGUgZmllbGQgaXMgYSBncm91cCwgaXRzIHR5cGUgd2lsbCBiZQotICAvLyBhZGRlZCB0byAi
bWVzc2FnZXMiLgotICAvLwotICAvLyBwYXJlbnRfbG9jYXRpb24gYW5kIGxvY2F0aW9uX2ZpZWxk
X251bWJlcl9mb3JfbmVzdGVkX3R5cGUgYXJlIG5lZWRlZCB3aGVuCi0gIC8vIHBhcnNpbmcgZ3Jv
dXBzIC0tIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYSBuZXN0ZWQgbWVzc2FnZSB0eXBlIHdpdGhpbiB0
aGUKLSAgLy8gcGFyZW50IGFuZCByZWNvcmQgaXRzIGxvY2F0aW9uIGFjY29yZGluZ2x5LiAgU2lu
Y2UgdGhlIHBhcmVudCBjb3VsZCBiZQotICAvLyBlaXRoZXIgYSBGaWxlRGVzY3JpcHRvclByb3Rv
IG9yIGEgRGVzY3JpcHRvclByb3RvLCB3ZSBtdXN0IHBhc3MgaW4gdGhlCi0gIC8vIGNvcnJlY3Qg
ZmllbGQgbnVtYmVyIHRvIHVzZS4KLSAgYm9vbCBQYXJzZU1lc3NhZ2VGaWVsZChGaWVsZERlc2Ny
aXB0b3JQcm90byogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUmVwZWF0ZWRQdHJG
aWVsZDxEZXNjcmlwdG9yUHJvdG8+KiBtZXNzYWdlcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBwYXJlbnRfbG9jYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxvY2F0aW9uX2ZpZWxkX251bWJlcl9mb3JfbmVzdGVkX3R5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgZmllbGRfbG9j
YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90
byogY29udGFpbmluZ19maWxlKTsKLQotICAvLyBMaWtlIFBhcnNlTWVzc2FnZUZpZWxkKCkgYnV0
IGV4cGVjdHMgdGhlIGxhYmVsIGhhcyBhbHJlYWR5IGJlZW4gZmlsbGVkIGluCi0gIC8vIGJ5IHRo
ZSBjYWxsZXIuCi0gIGJvb2wgUGFyc2VNZXNzYWdlRmllbGROb0xhYmVsKEZpZWxkRGVzY3JpcHRv
clByb3RvKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwZWF0ZWRQ
dHJGaWVsZDxEZXNjcmlwdG9yUHJvdG8+KiBtZXNzYWdlcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcGFyZW50X2xvY2F0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG9jYXRpb25fZmllbGRfbnVtYmVyX2Zv
cl9uZXN0ZWRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9j
YXRpb25SZWNvcmRlciYgZmllbGRfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRhaW5pbmdfZmlsZSk7Ci0KLSAg
Ly8gUGFyc2UgYW4gImV4dGVuc2lvbnMiIGRlY2xhcmF0aW9uLgotICBib29sIFBhcnNlRXh0ZW5z
aW9ucyhEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IExvY2F0aW9uUmVjb3JkZXImIGV4dGVuc2lvbnNfbG9jYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRhaW5pbmdfZmlsZSk7Ci0K
LSAgLy8gUGFyc2UgYSAicmVzZXJ2ZWQiIGRlY2xhcmF0aW9uLgotICBib29sIFBhcnNlUmVzZXJ2
ZWQoRGVzY3JpcHRvclByb3RvKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TG9jYXRpb25SZWNvcmRlciYgbWVzc2FnZV9sb2NhdGlvbik7Ci0gIGJvb2wgUGFyc2VSZXNlcnZl
ZE5hbWVzKERlc2NyaXB0b3JQcm90byogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcGFyZW50X2xvY2F0aW9uKTsKLSAgYm9vbCBQYXJz
ZVJlc2VydmVkTnVtYmVycyhEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgcGFyZW50X2xvY2F0aW9uKTsK
LQotICAvLyBQYXJzZSBhbiAiZXh0ZW5kIiBkZWNsYXJhdGlvbi4gIChTZWUgYWxzbyBjb21tZW50
cyBmb3IKLSAgLy8gUGFyc2VNZXNzYWdlRmllbGQoKS4pCi0gIGJvb2wgUGFyc2VFeHRlbmQoUmVw
ZWF0ZWRQdHJGaWVsZDxGaWVsZERlc2NyaXB0b3JQcm90bz4qIGV4dGVuc2lvbnMsCi0gICAgICAg
ICAgICAgICAgICAgUmVwZWF0ZWRQdHJGaWVsZDxEZXNjcmlwdG9yUHJvdG8+KiBtZXNzYWdlcywK
LSAgICAgICAgICAgICAgICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBwYXJlbnRfbG9jYXRp
b24sCi0gICAgICAgICAgICAgICAgICAgaW50IGxvY2F0aW9uX2ZpZWxkX251bWJlcl9mb3JfbmVz
dGVkX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgZXh0
ZW5kX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJv
dG8qIGNvbnRhaW5pbmdfZmlsZSk7Ci0KLSAgLy8gUGFyc2UgYSAib25lb2YiIGRlY2xhcmF0aW9u
LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZwotICAvLyBvbmVvZl9kZWNs
LT5sYWJlbCgpIHNpbmNlIGl0IHdpbGwgaGF2ZSBoYWQgdG8gcGFyc2UgdGhlIGxhYmVsIGJlZm9y
ZSBpdAotICAvLyBrbmV3IGl0IHdhcyBwYXJzaW5nIGEgb25lb2YuCi0gIGJvb2wgUGFyc2VPbmVv
ZihPbmVvZkRlc2NyaXB0b3JQcm90byogb25lb2ZfZGVjbCwKLSAgICAgICAgICAgICAgICAgIERl
c2NyaXB0b3JQcm90byogY29udGFpbmluZ190eXBlLAotICAgICAgICAgICAgICAgICAgaW50IG9u
ZW9mX2luZGV4LAotICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgb25l
b2ZfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBj
b250YWluaW5nX3R5cGVfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVz
Y3JpcHRvclByb3RvKiBjb250YWluaW5nX2ZpbGUpOwotCi0gIC8vIFBhcnNlIGEgc2luZ2xlIGVu
dW0gdmFsdWUgd2l0aGluIGFuIGVudW0gYmxvY2suCi0gIGJvb2wgUGFyc2VFbnVtQ29uc3RhbnQo
RW51bVZhbHVlRGVzY3JpcHRvclByb3RvKiBlbnVtX3ZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IExvY2F0aW9uUmVjb3JkZXImIGVudW1fdmFsdWVfbG9jYXRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29udGFpbmlu
Z19maWxlKTsKLQotICAvLyBQYXJzZSBlbnVtIGNvbnN0YW50IG9wdGlvbnMsIGkuZS4gdGhlIGxp
c3QgaW4gc3F1YXJlIGJyYWNrZXRzIGF0IHRoZSBlbmQKLSAgLy8gb2YgdGhlIGVudW0gY29uc3Rh
bnQgdmFsdWUgZGVmaW5pdGlvbi4KLSAgYm9vbCBQYXJzZUVudW1Db25zdGFudE9wdGlvbnMoRW51
bVZhbHVlRGVzY3JpcHRvclByb3RvKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgZW51bV92YWx1ZV9sb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29u
dGFpbmluZ19maWxlKTsKLQotICAvLyBQYXJzZSBhIHNpbmdsZSBtZXRob2Qgd2l0aGluIGEgc2Vy
dmljZSBkZWZpbml0aW9uLgotICBib29sIFBhcnNlU2VydmljZU1ldGhvZChNZXRob2REZXNjcmlw
dG9yUHJvdG8qIG1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRp
b25SZWNvcmRlciYgbWV0aG9kX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBjb250YWluaW5nX2ZpbGUpOwotCi0KLSAgLy8gUGFy
c2Ugb3B0aW9ucyBvZiBhIHNpbmdsZSBtZXRob2Qgb3Igc3RyZWFtLgotICBib29sIFBhcnNlTWV0
aG9kT3B0aW9ucyhjb25zdCBMb2NhdGlvblJlY29yZGVyJiBwYXJlbnRfbG9jYXRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRhaW5p
bmdfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG9wdGlvbnNGaWVs
ZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSogbXV0YWJsZV9vcHRp
b25zKTsKLQotICAvLyBQYXJzZSAicmVxdWlyZWQiLCAib3B0aW9uYWwiLCBvciAicmVwZWF0ZWQi
IGFuZCBmaWxsIGluICJsYWJlbCIKLSAgLy8gd2l0aCB0aGUgdmFsdWUuIFJldHVybnMgdHJ1ZSBp
ZiBzdWNoIGEgbGFiZWwgaXMgY29uc3VtZWQuCi0gIGJvb2wgUGFyc2VMYWJlbChGaWVsZERlc2Ny
aXB0b3JQcm90bzo6TGFiZWwqIGxhYmVsLAotICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURl
c2NyaXB0b3JQcm90byogY29udGFpbmluZ19maWxlKTsKLQotICAvLyBQYXJzZSBhIHR5cGUgbmFt
ZSBhbmQgZmlsbCBpbiAidHlwZSIgKGlmIGl0IGlzIGEgcHJpbWl0aXZlKSBvcgotICAvLyAidHlw
ZV9uYW1lIiAoaWYgaXQgaXMgbm90KSB3aXRoIHRoZSB0eXBlIHBhcnNlZC4KLSAgYm9vbCBQYXJz
ZVR5cGUoRmllbGREZXNjcmlwdG9yUHJvdG86OlR5cGUqIHR5cGUsCi0gICAgICAgICAgICAgICAg
IHN0cmluZyogdHlwZV9uYW1lKTsKLSAgLy8gUGFyc2UgYSB1c2VyLWRlZmluZWQgdHlwZSBhbmQg
ZmlsbCBpbiAidHlwZV9uYW1lIiB3aXRoIHRoZSBuYW1lLgotICAvLyBJZiBhIHByaW1pdGl2ZSB0
eXBlIGlzIG5hbWVkLCBpdCBpcyB0cmVhdGVkIGFzIGFuIGVycm9yLgotICBib29sIFBhcnNlVXNl
ckRlZmluZWRUeXBlKHN0cmluZyogdHlwZV9uYW1lKTsKLQotICAvLyBQYXJzZXMgZmllbGQgb3B0
aW9ucywgaS5lLiB0aGUgc3R1ZmYgaW4gc3F1YXJlIGJyYWNrZXRzIGF0IHRoZSBlbmQKLSAgLy8g
b2YgYSBmaWVsZCBkZWZpbml0aW9uLiAgQWxzbyBwYXJzZXMgZGVmYXVsdCB2YWx1ZS4KLSAgYm9v
bCBQYXJzZUZpZWxkT3B0aW9ucyhGaWVsZERlc2NyaXB0b3JQcm90byogZmllbGQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTG9jYXRpb25SZWNvcmRlciYgZmllbGRfbG9jYXRpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29u
dGFpbmluZ19maWxlKTsKLQotICAvLyBQYXJzZSB0aGUgImRlZmF1bHQiIG9wdGlvbi4gIFRoaXMg
bmVlZHMgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIGl0cwotICAvLyB0eXBlIGlzIHRoZSBmaWVs
ZCdzIHR5cGUuCi0gIGJvb2wgUGFyc2VEZWZhdWx0QXNzaWdubWVudChGaWVsZERlc2NyaXB0b3JQ
cm90byogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMb2NhdGlv
blJlY29yZGVyJiBmaWVsZF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8qIGNvbnRhaW5pbmdfZmlsZSk7Ci0KLSAgYm9vbCBQ
YXJzZUpzb25OYW1lKEZpZWxkRGVzY3JpcHRvclByb3RvKiBmaWVsZCwKLSAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IExvY2F0aW9uUmVjb3JkZXImIGZpZWxkX2xvY2F0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogY29udGFpbmluZ19maWxlKTsK
LQotICBlbnVtIE9wdGlvblN0eWxlIHsKLSAgICBPUFRJT05fQVNTSUdOTUVOVCwgIC8vIGp1c3Qg
Im5hbWUgPSB2YWx1ZSIKLSAgICBPUFRJT05fU1RBVEVNRU5UICAgIC8vICJvcHRpb24gbmFtZSA9
IHZhbHVlOyIKLSAgfTsKLQotICAvLyBQYXJzZSBhIHNpbmdsZSBvcHRpb24gbmFtZS92YWx1ZSBw
YWlyLCBlLmcuICJjdHlwZSA9IENPUkQiLiAgVGhlIG5hbWUKLSAgLy8gaWRlbnRpZmllcyBhIGZp
ZWxkIG9mIHRoZSBnaXZlbiBNZXNzYWdlLCBhbmQgdGhlIHZhbHVlIG9mIHRoYXQgZmllbGQKLSAg
Ly8gaXMgc2V0IHRvIHRoZSBwYXJzZWQgdmFsdWUuCi0gIGJvb2wgUGFyc2VPcHRpb24oTWVzc2Fn
ZSogb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBMb2NhdGlvblJlY29yZGVyJiBv
cHRpb25zX2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9y
UHJvdG8qIGNvbnRhaW5pbmdfZmlsZSwKLSAgICAgICAgICAgICAgICAgICBPcHRpb25TdHlsZSBz
dHlsZSk7Ci0KLSAgLy8gUGFyc2VzIGEgc2luZ2xlIHBhcnQgb2YgYSBtdWx0aXBhcnQgb3B0aW9u
IG5hbWUuIEEgbXVsdGlwYXJ0IG5hbWUgY29uc2lzdHMKLSAgLy8gb2YgbmFtZXMgc2VwYXJhdGVk
IGJ5IGRvdHMuIEVhY2ggbmFtZSBpcyBlaXRoZXIgYW4gaWRlbnRpZmllciBvciBhIHNlcmllcwot
ICAvLyBvZiBpZGVudGlmaWVycyBzZXBhcmF0ZWQgYnkgZG90cyBhbmQgZW5jbG9zZWQgaW4gcGFy
ZW50aGVzZXMuIEUuZy4sCi0gIC8vICJmb28uKGJhci5iYXopLnF1eCIuCi0gIGJvb2wgUGFyc2VP
cHRpb25OYW1lUGFydChVbmludGVycHJldGVkT3B0aW9uKiB1bmludGVycHJldGVkX29wdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExvY2F0aW9uUmVjb3JkZXImIHBhcnRf
bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRv
clByb3RvKiBjb250YWluaW5nX2ZpbGUpOwotCi0gIC8vIFBhcnNlcyBhIHN0cmluZyBzdXJyb3Vu
ZGVkIGJ5IGJhbGFuY2VkIGJyYWNlcy4gIFN0cmlwcyBvZmYgdGhlIG91dGVyCi0gIC8vIGJyYWNl
cyBhbmQgc3RvcmVzIHRoZSBlbmNsb3NlZCBzdHJpbmcgaW4gKnZhbHVlLgotICAvLyBFLmcuLAot
ICAvLyAgICAgeyBmb28gfSAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSBnZXRzICdmb28nCi0g
IC8vICAgICB7IGZvbyB7IGJhcjogYm94IH0gfSAgICAgICAgKnZhbHVlIGdldHMgJ2ZvbyB7IGJh
cjogYm94IH0nCi0gIC8vICAgICB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgKnZhbHVlIGdl
dHMgJycKLSAgLy8KLSAgLy8gUkVRVUlSRVM6IExvb2tpbmdBdCgieyIpCi0gIC8vIFdoZW4gZmlu
aXNoZWQgc3VjY2Vzc2Z1bGx5LCB3ZSBhcmUgbG9va2luZyBhdCB0aGUgZmlyc3QgdG9rZW4gcGFz
dAotICAvLyB0aGUgZW5kaW5nIGJyYWNlLgotICBib29sIFBhcnNlVW5pbnRlcnByZXRlZEJsb2Nr
KHN0cmluZyogdmFsdWUpOwotCi0gIHN0cnVjdCBNYXBGaWVsZCB7Ci0gICAgLy8gV2hldGhlciB0
aGUgZmllbGQgaXMgYSBtYXAgZmllbGQuCi0gICAgYm9vbCBpc19tYXBfZmllbGQ7Ci0gICAgLy8g
VGhlIHR5cGVzIG9mIHRoZSBrZXkgYW5kIHZhbHVlIGlmIHRoZXkgYXJlIHByaW1pdGl2ZSB0eXBl
cy4KLSAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6VHlwZSBrZXlfdHlwZTsKLSAgICBGaWVsZERl
c2NyaXB0b3JQcm90bzo6VHlwZSB2YWx1ZV90eXBlOwotICAgIC8vIE9yIHRoZSB0eXBlIG5hbWVz
IHN0cmluZyBpZiB0aGUgdHlwZXMgYXJlIGN1c3RvbWl6ZWQgdHlwZXMuCi0gICAgc3RyaW5nIGtl
eV90eXBlX25hbWU7Ci0gICAgc3RyaW5nIHZhbHVlX3R5cGVfbmFtZTsKLQotICAgIE1hcEZpZWxk
KCkgOiBpc19tYXBfZmllbGQoZmFsc2UpIHt9Ci0gIH07Ci0gIC8vIERlc3VnYXIgdGhlIG1hcCBz
eW50YXggdG8gZ2VuZXJhdGUgYSBuZXN0ZWQgbWFwIGVudHJ5IG1lc3NhZ2UuCi0gIHZvaWQgR2Vu
ZXJhdGVNYXBFbnRyeShjb25zdCBNYXBGaWVsZCYgbWFwX2ZpZWxkLCBGaWVsZERlc2NyaXB0b3JQ
cm90byogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICBSZXBlYXRlZFB0ckZpZWxkPERl
c2NyaXB0b3JQcm90bz4qIG1lc3NhZ2VzKTsKLQotICAvLyBXaGV0aGVyIGZpZWxkcyB3aXRob3V0
IGxhYmVsIGRlZmF1bHQgdG8gb3B0aW9uYWwgZmllbGRzLgotICBib29sIERlZmF1bHRUb09wdGlv
bmFsRmllbGRzKCkgY29uc3QgewotICAgIHJldHVybiBzeW50YXhfaWRlbnRpZmllcl8gPT0gInBy
b3RvMyI7Ci0gIH0KLQotCi0gIGJvb2wgVmFsaWRhdGVFbnVtKGNvbnN0IEVudW1EZXNjcmlwdG9y
UHJvdG8qIHByb3RvKTsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gIGlvOjpUb2tlbml6ZXIqIGlucHV0
XzsKLSAgaW86OkVycm9yQ29sbGVjdG9yKiBlcnJvcl9jb2xsZWN0b3JfOwotICBTb3VyY2VDb2Rl
SW5mbyogc291cmNlX2NvZGVfaW5mb187Ci0gIFNvdXJjZUxvY2F0aW9uVGFibGUqIHNvdXJjZV9s
b2NhdGlvbl90YWJsZV87ICAvLyBsZWdhY3kKLSAgYm9vbCBoYWRfZXJyb3JzXzsKLSAgYm9vbCBy
ZXF1aXJlX3N5bnRheF9pZGVudGlmaWVyXzsKLSAgYm9vbCBzdG9wX2FmdGVyX3N5bnRheF9pZGVu
dGlmaWVyXzsKLSAgc3RyaW5nIHN5bnRheF9pZGVudGlmaWVyXzsKLQotICAvLyBMZWFkaW5nIGRv
YyBjb21tZW50cyBmb3IgdGhlIG5leHQgZGVjbGFyYXRpb24uICBUaGVzZSBhcmUgbm90IGNvbXBs
ZXRlCi0gIC8vIHlldDsgdXNlIENvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKCkgdG8gZ2V0IHRoZSBj
b21wbGV0ZSBjb21tZW50cy4KLSAgc3RyaW5nIHVwY29taW5nX2RvY19jb21tZW50c187Ci0KLSAg
Ly8gRGV0YWNoZWQgY29tbWVudHMgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55IHN5bnRheCBlbnRp
dGllcy4gRWxlbWVudHMgaW4KLSAgLy8gdGhpcyB2ZWN0b3IgYXJlIHBhcmFncmFwaHMgb2YgY29t
bWVudHMgc2VwYXJhdGVkIGJ5IGVtcHR5IGxpbmVzLiBUaGUKLSAgLy8gZGV0YWNoZWQgY29tbWVu
dHMgd2lsbCBiZSBwdXQgaW50byB0aGUgbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cyBmaWVsZCBm
b3IKLSAgLy8gdGhlIG5leHQgZWxlbWVudCAoU2VlIFNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uIGlu
IGRlc2NyaXB0b3IucHJvdG8pLCB3aGVuCi0gIC8vIENvbnN1bWVFbmRPZkRlY2xhcmF0aW9uKCkg
aXMgY2FsbGVkLgotICB2ZWN0b3I8c3RyaW5nPiB1cGNvbWluZ19kZXRhY2hlZF9jb21tZW50c187
Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFBhcnNlcik7Ci19OwotCi0v
LyBBIHRhYmxlIG1hcHBpbmcgKGRlc2NyaXB0b3IsIEVycm9yTG9jYXRpb24pIHBhaXJzIC0tIGFz
IHJlcG9ydGVkIGJ5Ci0vLyBEZXNjcmlwdG9yUG9vbCB3aGVuIHZhbGlkYXRpbmcgZGVzY3JpcHRv
cnMgLS0gdG8gbGluZSBhbmQgY29sdW1uIG51bWJlcnMKLS8vIHdpdGhpbiB0aGUgb3JpZ2luYWwg
c291cmNlIGNvZGUuCi0vLwotLy8gVGhpcyBpcyBzZW1pLW9ic29sZXRlOiAgRmlsZURlc2NyaXB0
b3JQcm90by5zb3VyY2VfY29kZV9pbmZvIG5vdyBjb250YWlucwotLy8gZmFyIG1vcmUgY29tcGxl
dGUgaW5mb3JtYXRpb24gYWJvdXQgc291cmNlIGxvY2F0aW9ucy4gIEhvd2V2ZXIsIGFzIG9mIHRo
aXMKLS8vIHdyaXRpbmcgeW91IHN0aWxsIG5lZWQgdG8gdXNlIFNvdXJjZUxvY2F0aW9uVGFibGUg
d2hlbiBpbnRlZ3JhdGluZyB3aXRoCi0vLyBEZXNjcmlwdG9yUG9vbC4KLWNsYXNzIExJQlBST1RP
QlVGX0VYUE9SVCBTb3VyY2VMb2NhdGlvblRhYmxlIHsKLSBwdWJsaWM6Ci0gIFNvdXJjZUxvY2F0
aW9uVGFibGUoKTsKLSAgflNvdXJjZUxvY2F0aW9uVGFibGUoKTsKLQotICAvLyBGaW5kcyB0aGUg
cHJlY2lzZSBsb2NhdGlvbiBvZiB0aGUgZ2l2ZW4gZXJyb3IgYW5kIGZpbGxzIGluICpsaW5lIGFu
ZAotICAvLyAqY29sdW1uIHdpdGggdGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzLiAgSWYgbm90
IGZvdW5kLCBzZXRzICpsaW5lIHRvCi0gIC8vIC0xIGFuZCAqY29sdW1uIHRvIDAgKHNpbmNlIGxp
bmUgPSAtMSBpcyB1c2VkIHRvIG1lYW4gImVycm9yIGhhcyBubyBleGFjdAotICAvLyBsb2NhdGlv
biIgaW4gdGhlIEVycm9yQ29sbGVjdG9yIGludGVyZmFjZSkuICBSZXR1cm5zIHRydWUgaWYgZm91
bmQsIGZhbHNlCi0gIC8vIG90aGVyd2lzZS4KLSAgYm9vbCBGaW5kKGNvbnN0IE1lc3NhZ2UqIGRl
c2NyaXB0b3IsCi0gICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OkVy
cm9yTG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICBpbnQqIGxpbmUsIGludCogY29sdW1u
KSBjb25zdDsKLQotICAvLyBBZGRzIGEgbG9jYXRpb24gdG8gdGhlIHRhYmxlLgotICB2b2lkIEFk
ZChjb25zdCBNZXNzYWdlKiBkZXNjcmlwdG9yLAotICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6
RXJyb3JDb2xsZWN0b3I6OkVycm9yTG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgIGludCBs
aW5lLCBpbnQgY29sdW1uKTsKLQotICAvLyBDbGVhcnMgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJs
ZS4KLSAgdm9pZCBDbGVhcigpOwotCi0gcHJpdmF0ZToKLSAgdHlwZWRlZiBtYXA8Ci0gICAgcGFp
cjxjb25zdCBNZXNzYWdlKiwgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpFcnJvckxv
Y2F0aW9uPiwKLSAgICBwYWlyPGludCwgaW50PiA+IExvY2F0aW9uTWFwOwotICBMb2NhdGlvbk1h
cCBsb2NhdGlvbl9tYXBfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBH
T09HTEVfUFJPVE9CVUZfQ09NUElMRVJfUEFSU0VSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL3BhcnNlcl91bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9wYXJzZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFkNjIzZGQ5MGIyMWVjNGYzYjZmZWY5NjQzZTUzMDQ5MWI3MmQ1NTQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL3BhcnNlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDMxNTcgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9u
QGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2Nv
bCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQg
b3RoZXJzLgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVEX1BUUl9ICi0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNlbmRpZgotI2luY2x1
ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWFwPgotCi0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BhcnNlci5oPgotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2lvL3Rva2VuaXplci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9p
by96ZXJvX2NvcHlfc3RyZWFtX2ltcGwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi91bml0dGVzdC5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdF9jdXN0b21fb3B0aW9ucy5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1dGUu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwuaD4KLQotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgY29tcGlsZXIgewotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBNb2NrRXJyb3JDb2xs
ZWN0b3IgOiBwdWJsaWMgaW86OkVycm9yQ29sbGVjdG9yIHsKLSBwdWJsaWM6Ci0gIE1vY2tFcnJv
ckNvbGxlY3RvcigpIHt9Ci0gIH5Nb2NrRXJyb3JDb2xsZWN0b3IoKSB7fQotCi0gIHN0cmluZyB0
ZXh0XzsKLQotICAvLyBpbXBsZW1lbnRzIEVycm9yQ29sbGVjdG9yIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2b2lkIEFkZEVycm9yKGludCBsaW5lLCBpbnQgY29s
dW1uLCBjb25zdCBzdHJpbmcmIG1lc3NhZ2UpIHsKLSAgICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5k
QXBwZW5kKCZ0ZXh0XywgIiQwOiQxOiAkMlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmUsIGNvbHVtbiwgbWVzc2FnZSk7Ci0gIH0KLX07Ci0KLWNsYXNzIE1vY2tWYWxp
ZGF0aW9uRXJyb3JDb2xsZWN0b3IgOiBwdWJsaWMgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVj
dG9yIHsKLSBwdWJsaWM6Ci0gIE1vY2tWYWxpZGF0aW9uRXJyb3JDb2xsZWN0b3IoY29uc3QgU291
cmNlTG9jYXRpb25UYWJsZSYgc291cmNlX2xvY2F0aW9ucywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbzo6RXJyb3JDb2xsZWN0b3IqIHdyYXBwZWRfY29sbGVjdG9yKQotICAgIDog
c291cmNlX2xvY2F0aW9uc18oc291cmNlX2xvY2F0aW9ucyksCi0gICAgICB3cmFwcGVkX2NvbGxl
Y3Rvcl8od3JhcHBlZF9jb2xsZWN0b3IpIHt9Ci0gIH5Nb2NrVmFsaWRhdGlvbkVycm9yQ29sbGVj
dG9yKCkge30KLQotICAvLyBpbXBsZW1lbnRzIEVycm9yQ29sbGVjdG9yIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2b2lkIEFkZEVycm9yKGNvbnN0IHN0cmluZyYg
ZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBlbGVtZW50X25hbWUsCi0g
ICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZSogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAg
ICBFcnJvckxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYg
bWVzc2FnZSkgewotICAgIGludCBsaW5lLCBjb2x1bW47Ci0gICAgc291cmNlX2xvY2F0aW9uc18u
RmluZChkZXNjcmlwdG9yLCBsb2NhdGlvbiwgJmxpbmUsICZjb2x1bW4pOwotICAgIHdyYXBwZWRf
Y29sbGVjdG9yXy0+QWRkRXJyb3IobGluZSwgY29sdW1uLCBtZXNzYWdlKTsKLSAgfQotCi0gcHJp
dmF0ZToKLSAgY29uc3QgU291cmNlTG9jYXRpb25UYWJsZSYgc291cmNlX2xvY2F0aW9uc187Ci0g
IGlvOjpFcnJvckNvbGxlY3Rvciogd3JhcHBlZF9jb2xsZWN0b3JfOwotfTsKLQotY2xhc3MgUGFy
c2VyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFBhcnNlclRl
c3QoKQotICAgIDogcmVxdWlyZV9zeW50YXhfaWRlbnRpZmllcl8oZmFsc2UpIHt9Ci0KLSAgLy8g
U2V0IHVwIHRoZSBwYXJzZXIgdG8gcGFyc2UgdGhlIGdpdmVuIHRleHQuCi0gIHZvaWQgU2V0dXBQ
YXJzZXIoY29uc3QgY2hhciogdGV4dCkgewotICAgIHJhd19pbnB1dF8ucmVzZXQobmV3IGlvOjpB
cnJheUlucHV0U3RyZWFtKHRleHQsIHN0cmxlbih0ZXh0KSkpOwotICAgIGlucHV0Xy5yZXNldChu
ZXcgaW86OlRva2VuaXplcihyYXdfaW5wdXRfLmdldCgpLCAmZXJyb3JfY29sbGVjdG9yXykpOwot
ICAgIHBhcnNlcl8ucmVzZXQobmV3IFBhcnNlcigpKTsKLSAgICBwYXJzZXJfLT5SZWNvcmRFcnJv
cnNUbygmZXJyb3JfY29sbGVjdG9yXyk7Ci0gICAgcGFyc2VyXy0+U2V0UmVxdWlyZVN5bnRheElk
ZW50aWZpZXIocmVxdWlyZV9zeW50YXhfaWRlbnRpZmllcl8pOwotICB9Ci0KLSAgLy8gUGFyc2Ug
dGhlIGlucHV0IGFuZCBleHBlY3QgdGhhdCB0aGUgcmVzdWx0aW5nIEZpbGVEZXNjcmlwdG9yUHJv
dG8gbWF0Y2hlcwotICAvLyB0aGUgZ2l2ZW4gb3V0cHV0LiAgVGhlIG91dHB1dCBpcyBhIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gaW4gcHJvdG9jb2wgYnVmZmVyCi0gIC8vIHRleHQgZm9ybWF0LgotICB2
b2lkIEV4cGVjdFBhcnNlc1RvKGNvbnN0IGNoYXIqIGlucHV0LCBjb25zdCBjaGFyKiBvdXRwdXQp
IHsKLSAgICBTZXR1cFBhcnNlcihpbnB1dCk7Ci0gICAgRmlsZURlc2NyaXB0b3JQcm90byBhY3R1
YWwsIGV4cGVjdGVkOwotCi0gICAgcGFyc2VyXy0+UGFyc2UoaW5wdXRfLmdldCgpLCAmYWN0dWFs
KTsKLSAgICBFWFBFQ1RfRVEoaW86OlRva2VuaXplcjo6VFlQRV9FTkQsIGlucHV0Xy0+Y3VycmVu
dCgpLnR5cGUpOwotICAgIEFTU0VSVF9FUSgiIiwgZXJyb3JfY29sbGVjdG9yXy50ZXh0Xyk7Ci0K
LSAgICAvLyBXZSBkb24ndCBjb3ZlciBTb3VyY2VDb2RlSW5mbyBpbiB0aGVzZSB0ZXN0cy4KLSAg
ICBhY3R1YWwuY2xlYXJfc291cmNlX2NvZGVfaW5mbygpOwotCi0gICAgLy8gUGFyc2UgdGhlIEFT
Q0lJIHJlcHJlc2VudGF0aW9uIGluIG9yZGVyIHRvIGNhbm9uaWNhbGl6ZSBpdC4gIFdlIGNvdWxk
Ci0gICAgLy8ganVzdCBjb21wYXJlIGRpcmVjdGx5IHRvIGFjdHVhbC5EZWJ1Z1N0cmluZygpLCBi
dXQgdGhhdCB3b3VsZCByZXF1aXJlCi0gICAgLy8gdGhhdCB0aGUgY2FsbGVyIHByZWNpc2VseSBt
YXRjaCB0aGUgZm9ybWF0dGluZyB0aGF0IERlYnVnU3RyaW5nKCkKLSAgICAvLyBwcm9kdWNlcy4K
LSAgICBBU1NFUlRfVFJVRShUZXh0Rm9ybWF0OjpQYXJzZUZyb21TdHJpbmcob3V0cHV0LCAmZXhw
ZWN0ZWQpKTsKLQotICAgIC8vIENvbXBhcmUgYnkgY29tcGFyaW5nIGRlYnVnIHN0cmluZ3MuCi0g
ICAgLy8gVE9ETyhrZW50b24pOiAgVXNlIGRpZmZlcmVuY2VyLCBvbmNlIGl0IGlzIGF2YWlsYWJs
ZS4KLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQuRGVidWdTdHJpbmcoKSwgYWN0dWFsLkRlYnVnU3Ry
aW5nKCkpOwotICB9Ci0KLSAgLy8gUGFyc2UgdGhlIHRleHQgYW5kIGV4cGVjdCB0aGF0IHRoZSBn
aXZlbiBlcnJvcnMgYXJlIHJlcG9ydGVkLgotICB2b2lkIEV4cGVjdEhhc0Vycm9ycyhjb25zdCBj
aGFyKiB0ZXh0LCBjb25zdCBjaGFyKiBleHBlY3RlZF9lcnJvcnMpIHsKLSAgICBFeHBlY3RIYXNF
YXJseUV4aXRFcnJvcnModGV4dCwgZXhwZWN0ZWRfZXJyb3JzKTsKLSAgICBFWFBFQ1RfRVEoaW86
OlRva2VuaXplcjo6VFlQRV9FTkQsIGlucHV0Xy0+Y3VycmVudCgpLnR5cGUpOwotICB9Ci0KLSAg
Ly8gU2FtZSBhcyBhYm92ZSBidXQgZG9lcyBub3QgZXhwZWN0IHRoYXQgdGhlIHBhcnNlciBwYXJz
ZXMgdGhlIGNvbXBsZXRlCi0gIC8vIGlucHV0LgotICB2b2lkIEV4cGVjdEhhc0Vhcmx5RXhpdEVy
cm9ycyhjb25zdCBjaGFyKiB0ZXh0LCBjb25zdCBjaGFyKiBleHBlY3RlZF9lcnJvcnMpIHsKLSAg
ICBTZXR1cFBhcnNlcih0ZXh0KTsKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0gICAg
cGFyc2VyXy0+UGFyc2UoaW5wdXRfLmdldCgpLCAmZmlsZSk7Ci0gICAgRVhQRUNUX0VRKGV4cGVj
dGVkX2Vycm9ycywgZXJyb3JfY29sbGVjdG9yXy50ZXh0Xyk7Ci0gIH0KLQotICAvLyBQYXJzZSB0
aGUgdGV4dCBhcyBhIGZpbGUgYW5kIHZhbGlkYXRlIGl0ICh3aXRoIGEgRGVzY3JpcHRvclBvb2wp
LCBhbmQKLSAgLy8gZXhwZWN0IHRoYXQgdGhlIHZhbGlkYXRpb24gc3RlcCByZXBvcnRzIHRoZSBn
aXZlbiBlcnJvcnMuCi0gIHZvaWQgRXhwZWN0SGFzVmFsaWRhdGlvbkVycm9ycyhjb25zdCBjaGFy
KiB0ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXhw
ZWN0ZWRfZXJyb3JzKSB7Ci0gICAgU2V0dXBQYXJzZXIodGV4dCk7Ci0gICAgU291cmNlTG9jYXRp
b25UYWJsZSBzb3VyY2VfbG9jYXRpb25zOwotICAgIHBhcnNlcl8tPlJlY29yZFNvdXJjZUxvY2F0
aW9uc1RvKCZzb3VyY2VfbG9jYXRpb25zKTsKLQotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmls
ZTsKLSAgICBmaWxlLnNldF9uYW1lKCJmb28ucHJvdG8iKTsKLSAgICBwYXJzZXJfLT5QYXJzZShp
bnB1dF8uZ2V0KCksICZmaWxlKTsKLSAgICBFWFBFQ1RfRVEoaW86OlRva2VuaXplcjo6VFlQRV9F
TkQsIGlucHV0Xy0+Y3VycmVudCgpLnR5cGUpOwotICAgIEFTU0VSVF9FUSgiIiwgZXJyb3JfY29s
bGVjdG9yXy50ZXh0Xyk7Ci0KLSAgICBNb2NrVmFsaWRhdGlvbkVycm9yQ29sbGVjdG9yIHZhbGlk
YXRpb25fZXJyb3JfY29sbGVjdG9yKAotICAgICAgc291cmNlX2xvY2F0aW9ucywgJmVycm9yX2Nv
bGxlY3Rvcl8pOwotICAgIEVYUEVDVF9UUlVFKHBvb2xfLkJ1aWxkRmlsZUNvbGxlY3RpbmdFcnJv
cnMoCi0gICAgICBmaWxlLCAmdmFsaWRhdGlvbl9lcnJvcl9jb2xsZWN0b3IpID09IE5VTEwpOwot
ICAgIEVYUEVDVF9FUShleHBlY3RlZF9lcnJvcnMsIGVycm9yX2NvbGxlY3Rvcl8udGV4dF8pOwot
ICB9Ci0KLSAgTW9ja0Vycm9yQ29sbGVjdG9yIGVycm9yX2NvbGxlY3Rvcl87Ci0gIERlc2NyaXB0
b3JQb29sIHBvb2xfOwotCi0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8aW86Olplcm9D
b3B5SW5wdXRTdHJlYW0+IHJhd19pbnB1dF87Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9w
dHI8aW86OlRva2VuaXplcj4gaW5wdXRfOwotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRy
PFBhcnNlcj4gcGFyc2VyXzsKLSAgYm9vbCByZXF1aXJlX3N5bnRheF9pZGVudGlmaWVyXzsKLX07
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotVEVTVF9GKFBhcnNlclRlc3QsIFN0b3BBZnRlclN5bnRheElk
ZW50aWZpZXIpIHsKLSAgU2V0dXBQYXJzZXIoCi0gICAgIi8vIGJsYWhcbiIKLSAgICAic3ludGF4
ID0gXCJmb29iYXJcIjtcbiIKLSAgICAidGhpcyBsaW5lIHdpbGwgbm90IGJlIHBhcnNlZFxuIik7
Ci0gIHBhcnNlcl8tPlNldFN0b3BBZnRlclN5bnRheElkZW50aWZpZXIodHJ1ZSk7Ci0gIEVYUEVD
VF9UUlVFKHBhcnNlcl8tPlBhcnNlKGlucHV0Xy5nZXQoKSwgTlVMTCkpOwotICBFWFBFQ1RfRVEo
IiIsIGVycm9yX2NvbGxlY3Rvcl8udGV4dF8pOwotICBFWFBFQ1RfRVEoImZvb2JhciIsIHBhcnNl
cl8tPkdldFN5bnRheElkZW50aWZpZXIoKSk7Ci19Ci0KLVRFU1RfRihQYXJzZXJUZXN0LCBTdG9w
QWZ0ZXJPbWl0dGVkU3ludGF4SWRlbnRpZmllcikgewotICBTZXR1cFBhcnNlcigKLSAgICAiLy8g
YmxhaFxuIgotICAgICJ0aGlzIGxpbmUgd2lsbCBub3QgYmUgcGFyc2VkXG4iKTsKLSAgcGFyc2Vy
Xy0+U2V0U3RvcEFmdGVyU3ludGF4SWRlbnRpZmllcih0cnVlKTsKLSAgRVhQRUNUX1RSVUUocGFy
c2VyXy0+UGFyc2UoaW5wdXRfLmdldCgpLCBOVUxMKSk7Ci0gIEVYUEVDVF9FUSgiIiwgZXJyb3Jf
Y29sbGVjdG9yXy50ZXh0Xyk7Ci0gIEVYUEVDVF9FUSgiIiwgcGFyc2VyXy0+R2V0U3ludGF4SWRl
bnRpZmllcigpKTsKLX0KLQotVEVTVF9GKFBhcnNlclRlc3QsIFN0b3BBZnRlclN5bnRheElkZW50
aWZpZXJXaXRoRXJyb3JzKSB7Ci0gIFNldHVwUGFyc2VyKAotICAgICIvLyBibGFoXG4iCi0gICAg
InN5bnRheCA9IGVycm9yO1xuIik7Ci0gIHBhcnNlcl8tPlNldFN0b3BBZnRlclN5bnRheElkZW50
aWZpZXIodHJ1ZSk7Ci0gIEVYUEVDVF9GQUxTRShwYXJzZXJfLT5QYXJzZShpbnB1dF8uZ2V0KCks
IE5VTEwpKTsKLSAgRVhQRUNUX0VRKCIxOjk6IEV4cGVjdGVkIHN5bnRheCBpZGVudGlmaWVyLlxu
IiwgZXJyb3JfY29sbGVjdG9yXy50ZXh0Xyk7Ci19Ci0KLVRFU1RfRihQYXJzZXJUZXN0LCBXYXJu
SWZTeW50YXhJZGVudGlmaWVyT21taXR0ZWQpIHsKLSAgU2V0dXBQYXJzZXIoIm1lc3NhZ2UgQSB7
fSIpOwotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0gIENhcHR1cmVUZXN0U3RkZXJyKCk7
Ci0gIEVYUEVDVF9UUlVFKHBhcnNlcl8tPlBhcnNlKGlucHV0Xy5nZXQoKSwgJmZpbGUpKTsKLSAg
RVhQRUNUX1RSVUUoCi0gICAgICBHZXRDYXB0dXJlZFRlc3RTdGRlcnIoKS5maW5kKCJObyBzeW50
YXggc3BlY2lmaWVkIikgIT0gc3RyaW5nOjpucG9zKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi10
eXBlZGVmIFBhcnNlclRlc3QgUGFyc2VNZXNzYWdlVGVzdDsKLQotVEVTVF9GKFBhcnNlTWVzc2Fn
ZVRlc3QsIElnbm9yZUJPTSkgewotICBjaGFyIGlucHV0W10gPSAiICAgbWVzc2FnZSBUZXN0TWVz
c2FnZSB7XG4iCi0gICAgICAiICByZXF1aXJlZCBpbnQzMiBmb28gPSAxO1xuIgotICAgICAgIn1c
biI7Ci0gIC8vIFNldCBVVEYtOCBCT00uCi0gIGlucHV0WzBdID0gKGNoYXIpMHhFRjsKLSAgaW5w
dXRbMV0gPSAoY2hhcikweEJCOwotICBpbnB1dFsyXSA9IChjaGFyKTB4QkY7Ci0gIEV4cGVjdFBh
cnNlc1RvKGlucHV0LAotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIlRlc3RN
ZXNzYWdlXCIiCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlS
RUQgdHlwZTpUWVBFX0lOVDMyIG51bWJlcjoxIH0iCi0gICAgIn0iKTsKLX0KLQotVEVTVF9GKFBh
cnNlTWVzc2FnZVRlc3QsIEJPTUVycm9yKSB7Ci0gIGNoYXIgaW5wdXRbXSA9ICIgICBtZXNzYWdl
IFRlc3RNZXNzYWdlIHtcbiIKLSAgICAgICIgIHJlcXVpcmVkIGludDMyIGZvbyA9IDE7XG4iCi0g
ICAgICAifVxuIjsKLSAgaW5wdXRbMF0gPSAoY2hhcikweEVGOwotICBFeHBlY3RIYXNFcnJvcnMo
aW5wdXQsCi0gICAgICAgICAgICAgICAgICAiMDoxOiBQcm90byBmaWxlIHN0YXJ0cyB3aXRoIDB4
RUYgYnV0IG5vdCBVVEYtOCBCT00uICIKLSAgICAgICAgICAgICAgICAgICJPbmx5IFVURi04IGlz
IGFjY2VwdGVkIGZvciBwcm90byBmaWxlLlxuIgotICAgICAgICAgICAgICAgICAgIjA6MDogRXhw
ZWN0ZWQgdG9wLWxldmVsIHN0YXRlbWVudCAoZS5nLiBcIm1lc3NhZ2VcIikuXG4iKTsKLX0KLQot
VEVTVF9GKFBhcnNlTWVzc2FnZVRlc3QsIFNpbXBsZU1lc3NhZ2UpIHsKLSAgRXhwZWN0UGFyc2Vz
VG8oCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIHJlcXVpcmVkIGludDMy
IGZvbyA9IDE7XG4iCi0gICAgIn1cbiIsCi0KLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAg
bmFtZTogXCJUZXN0TWVzc2FnZVwiIgotICAgICIgIGZpZWxkIHsgbmFtZTpcImZvb1wiIGxhYmVs
OkxBQkVMX1JFUVVJUkVEIHR5cGU6VFlQRV9JTlQzMiBudW1iZXI6MSB9IgotICAgICJ9Iik7Ci19
Ci0KLVRFU1RfRihQYXJzZU1lc3NhZ2VUZXN0LCBJbXBsaWNpdFN5bnRheElkZW50aWZpZXIpIHsK
LSAgcmVxdWlyZV9zeW50YXhfaWRlbnRpZmllcl8gPSBmYWxzZTsKLSAgRXhwZWN0UGFyc2VzVG8o
Ci0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIHJlcXVpcmVkIGludDMyIGZv
byA9IDE7XG4iCi0gICAgIn1cbiIsCi0KLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFt
ZTogXCJUZXN0TWVzc2FnZVwiIgotICAgICIgIGZpZWxkIHsgbmFtZTpcImZvb1wiIGxhYmVsOkxB
QkVMX1JFUVVJUkVEIHR5cGU6VFlQRV9JTlQzMiBudW1iZXI6MSB9IgotICAgICJ9Iik7Ci0gIEVY
UEVDVF9FUSgicHJvdG8yIiwgcGFyc2VyXy0+R2V0U3ludGF4SWRlbnRpZmllcigpKTsKLX0KLQot
VEVTVF9GKFBhcnNlTWVzc2FnZVRlc3QsIEV4cGxpY2l0U3ludGF4SWRlbnRpZmllcikgewotICBF
eHBlY3RQYXJzZXNUbygKLSAgICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgICAibWVzc2Fn
ZSBUZXN0TWVzc2FnZSB7XG4iCi0gICAgIiAgcmVxdWlyZWQgaW50MzIgZm9vID0gMTtcbiIKLSAg
ICAifVxuIiwKLQotICAgICJzeW50YXg6ICdwcm90bzInICIKLSAgICAibWVzc2FnZV90eXBlIHsi
Ci0gICAgIiAgbmFtZTogXCJUZXN0TWVzc2FnZVwiIgotICAgICIgIGZpZWxkIHsgbmFtZTpcImZv
b1wiIGxhYmVsOkxBQkVMX1JFUVVJUkVEIHR5cGU6VFlQRV9JTlQzMiBudW1iZXI6MSB9IgotICAg
ICJ9Iik7Ci0gIEVYUEVDVF9FUSgicHJvdG8yIiwgcGFyc2VyXy0+R2V0U3ludGF4SWRlbnRpZmll
cigpKTsKLX0KLQotVEVTVF9GKFBhcnNlTWVzc2FnZVRlc3QsIEV4cGxpY2l0UmVxdWlyZWRTeW50
YXhJZGVudGlmaWVyKSB7Ci0gIHJlcXVpcmVfc3ludGF4X2lkZW50aWZpZXJfID0gdHJ1ZTsKLSAg
RXhwZWN0UGFyc2VzVG8oCi0gICAgInN5bnRheCA9IFwicHJvdG8yXCI7XG4iCi0gICAgIm1lc3Nh
Z2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIHJlcXVpcmVkIGludDMyIGZvbyA9IDE7XG4iCi0g
ICAgIn1cbiIsCi0KLSAgICAic3ludGF4OiAncHJvdG8yJyAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7
IgotICAgICIgIG5hbWU6IFwiVGVzdE1lc3NhZ2VcIiIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJm
b29cIiBsYWJlbDpMQUJFTF9SRVFVSVJFRCB0eXBlOlRZUEVfSU5UMzIgbnVtYmVyOjEgfSIKLSAg
ICAifSIpOwotICBFWFBFQ1RfRVEoInByb3RvMiIsIHBhcnNlcl8tPkdldFN5bnRheElkZW50aWZp
ZXIoKSk7Ci19Ci0KLVRFU1RfRihQYXJzZU1lc3NhZ2VUZXN0LCBTaW1wbGVGaWVsZHMpIHsKLSAg
RXhwZWN0UGFyc2VzVG8oCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIHJl
cXVpcmVkIGludDMyIGZvbyA9IDE1O1xuIgotICAgICIgIG9wdGlvbmFsIGludDMyIGJhciA9IDM0
O1xuIgotICAgICIgIHJlcGVhdGVkIGludDMyIGJheiA9IDM7XG4iCi0gICAgIn1cbiIsCi0KLSAg
ICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0TWVzc2FnZVwiIgotICAgICIg
IGZpZWxkIHsgbmFtZTpcImZvb1wiIGxhYmVsOkxBQkVMX1JFUVVJUkVEIHR5cGU6VFlQRV9JTlQz
MiBudW1iZXI6MTUgfSIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJiYXJcIiBsYWJlbDpMQUJFTF9P
UFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgbnVtYmVyOjM0IH0iCi0gICAgIiAgZmllbGQgeyBuYW1l
OlwiYmF6XCIgbGFiZWw6TEFCRUxfUkVQRUFURUQgdHlwZTpUWVBFX0lOVDMyIG51bWJlcjozICB9
IgotICAgICJ9Iik7Ci19Ci0KLVRFU1RfRihQYXJzZU1lc3NhZ2VUZXN0LCBQcmltaXRpdmVGaWVs
ZFR5cGVzKSB7Ci0gIEV4cGVjdFBhcnNlc1RvKAotICAgICJtZXNzYWdlIFRlc3RNZXNzYWdlIHtc
biIKLSAgICAiICByZXF1aXJlZCBpbnQzMiAgICBmb28gPSAxO1xuIgotICAgICIgIHJlcXVpcmVk
IGludDY0ICAgIGZvbyA9IDE7XG4iCi0gICAgIiAgcmVxdWlyZWQgdWludDMyICAgZm9vID0gMTtc
biIKLSAgICAiICByZXF1aXJlZCB1aW50NjQgICBmb28gPSAxO1xuIgotICAgICIgIHJlcXVpcmVk
IHNpbnQzMiAgIGZvbyA9IDE7XG4iCi0gICAgIiAgcmVxdWlyZWQgc2ludDY0ICAgZm9vID0gMTtc
biIKLSAgICAiICByZXF1aXJlZCBmaXhlZDMyICBmb28gPSAxO1xuIgotICAgICIgIHJlcXVpcmVk
IGZpeGVkNjQgIGZvbyA9IDE7XG4iCi0gICAgIiAgcmVxdWlyZWQgc2ZpeGVkMzIgZm9vID0gMTtc
biIKLSAgICAiICByZXF1aXJlZCBzZml4ZWQ2NCBmb28gPSAxO1xuIgotICAgICIgIHJlcXVpcmVk
IGZsb2F0ICAgIGZvbyA9IDE7XG4iCi0gICAgIiAgcmVxdWlyZWQgZG91YmxlICAgZm9vID0gMTtc
biIKLSAgICAiICByZXF1aXJlZCBzdHJpbmcgICBmb28gPSAxO1xuIgotICAgICIgIHJlcXVpcmVk
IGJ5dGVzICAgIGZvbyA9IDE7XG4iCi0gICAgIiAgcmVxdWlyZWQgYm9vbCAgICAgZm9vID0gMTtc
biIKLSAgICAifVxuIiwKLQotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIlRl
c3RNZXNzYWdlXCIiCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVR
VUlSRUQgdHlwZTpUWVBFX0lOVDMyICAgIG51bWJlcjoxIH0iCi0gICAgIiAgZmllbGQgeyBuYW1l
OlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX0lOVDY0ICAgIG51bWJlcjox
IH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlw
ZTpUWVBFX1VJTlQzMiAgIG51bWJlcjoxIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIg
bGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX1VJTlQ2NCAgIG51bWJlcjoxIH0iCi0gICAg
IiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX1NJ
TlQzMiAgIG51bWJlcjoxIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFC
RUxfUkVRVUlSRUQgdHlwZTpUWVBFX1NJTlQ2NCAgIG51bWJlcjoxIH0iCi0gICAgIiAgZmllbGQg
eyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX0ZJWEVEMzIgIG51
bWJlcjoxIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlS
RUQgdHlwZTpUWVBFX0ZJWEVENjQgIG51bWJlcjoxIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwi
Zm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX1NGSVhFRDMyIG51bWJlcjoxIH0i
Ci0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpU
WVBFX1NGSVhFRDY0IG51bWJlcjoxIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFi
ZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX0ZMT0FUICAgIG51bWJlcjoxIH0iCi0gICAgIiAg
ZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX0RPVUJM
RSAgIG51bWJlcjoxIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxf
UkVRVUlSRUQgdHlwZTpUWVBFX1NUUklORyAgIG51bWJlcjoxIH0iCi0gICAgIiAgZmllbGQgeyBu
YW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX0JZVEVTICAgIG51bWJl
cjoxIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfUkVRVUlSRUQg
dHlwZTpUWVBFX0JPT0wgICAgIG51bWJlcjoxIH0iCi0gICAgIn0iKTsKLX0KLQotVEVTVF9GKFBh
cnNlTWVzc2FnZVRlc3QsIEZpZWxkRGVmYXVsdHMpIHsKLSAgRXhwZWN0UGFyc2VzVG8oCi0gICAg
Im1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIHJlcXVpcmVkIGludDMyICBmb28gPSAx
IFtkZWZhdWx0PSAgMSAgXTtcbiIKLSAgICAiICByZXF1aXJlZCBpbnQzMiAgZm9vID0gMSBbZGVm
YXVsdD0gLTIgIF07XG4iCi0gICAgIiAgcmVxdWlyZWQgaW50NjQgIGZvbyA9IDEgW2RlZmF1bHQ9
ICAzICBdO1xuIgotICAgICIgIHJlcXVpcmVkIGludDY0ICBmb28gPSAxIFtkZWZhdWx0PSAtNCAg
XTtcbiIKLSAgICAiICByZXF1aXJlZCB1aW50MzIgZm9vID0gMSBbZGVmYXVsdD0gIDUgIF07XG4i
Ci0gICAgIiAgcmVxdWlyZWQgdWludDY0IGZvbyA9IDEgW2RlZmF1bHQ9ICA2ICBdO1xuIgotICAg
ICIgIHJlcXVpcmVkIGZsb2F0ICBmb28gPSAxIFtkZWZhdWx0PSAgNy41XTtcbiIKLSAgICAiICBy
ZXF1aXJlZCBmbG9hdCAgZm9vID0gMSBbZGVmYXVsdD0gLTguNV07XG4iCi0gICAgIiAgcmVxdWly
ZWQgZmxvYXQgIGZvbyA9IDEgW2RlZmF1bHQ9ICA5ICBdO1xuIgotICAgICIgIHJlcXVpcmVkIGRv
dWJsZSBmb28gPSAxIFtkZWZhdWx0PSAxMC41XTtcbiIKLSAgICAiICByZXF1aXJlZCBkb3VibGUg
Zm9vID0gMSBbZGVmYXVsdD0tMTEuNV07XG4iCi0gICAgIiAgcmVxdWlyZWQgZG91YmxlIGZvbyA9
IDEgW2RlZmF1bHQ9IDEyICBdO1xuIgotICAgICIgIHJlcXVpcmVkIGRvdWJsZSBmb28gPSAxIFtk
ZWZhdWx0PSBpbmYgXTtcbiIKLSAgICAiICByZXF1aXJlZCBkb3VibGUgZm9vID0gMSBbZGVmYXVs
dD0taW5mIF07XG4iCi0gICAgIiAgcmVxdWlyZWQgZG91YmxlIGZvbyA9IDEgW2RlZmF1bHQ9IG5h
biBdO1xuIgotICAgICIgIHJlcXVpcmVkIHN0cmluZyBmb28gPSAxIFtkZWZhdWx0PScxM1xcMDAx
J107XG4iCi0gICAgIiAgcmVxdWlyZWQgc3RyaW5nIGZvbyA9IDEgW2RlZmF1bHQ9J2EnIFwiYlwi
IFxuIFwiY1wiXTtcbiIKLSAgICAiICByZXF1aXJlZCBieXRlcyAgZm9vID0gMSBbZGVmYXVsdD0n
MTRcXDAwMiddO1xuIgotICAgICIgIHJlcXVpcmVkIGJ5dGVzICBmb28gPSAxIFtkZWZhdWx0PSdh
JyBcImJcIiBcbiAnYyddO1xuIgotICAgICIgIHJlcXVpcmVkIGJvb2wgICBmb28gPSAxIFtkZWZh
dWx0PXRydWUgXTtcbiIKLSAgICAiICByZXF1aXJlZCBGb28gICAgZm9vID0gMSBbZGVmYXVsdD1G
T08gIF07XG4iCi0KLSAgICAiICByZXF1aXJlZCBpbnQzMiAgZm9vID0gMSBbZGVmYXVsdD0gMHg3
RkZGRkZGRl07XG4iCi0gICAgIiAgcmVxdWlyZWQgaW50MzIgIGZvbyA9IDEgW2RlZmF1bHQ9LTB4
ODAwMDAwMDBdO1xuIgotICAgICIgIHJlcXVpcmVkIHVpbnQzMiBmb28gPSAxIFtkZWZhdWx0PSAw
eEZGRkZGRkZGXTtcbiIKLSAgICAiICByZXF1aXJlZCBpbnQ2NCAgZm9vID0gMSBbZGVmYXVsdD0g
MHg3RkZGRkZGRkZGRkZGRkZGXTtcbiIKLSAgICAiICByZXF1aXJlZCBpbnQ2NCAgZm9vID0gMSBb
ZGVmYXVsdD0tMHg4MDAwMDAwMDAwMDAwMDAwXTtcbiIKLSAgICAiICByZXF1aXJlZCB1aW50NjQg
Zm9vID0gMSBbZGVmYXVsdD0gMHhGRkZGRkZGRkZGRkZGRkZGXTtcbiIKLSAgICAiICByZXF1aXJl
ZCBkb3VibGUgZm9vID0gMSBbZGVmYXVsdD0gMHhhYmNkXTtcbiIKLSAgICAifVxuIiwKLQotI2Rl
ZmluZSBFVEMgIm5hbWU6XCJmb29cIiBsYWJlbDpMQUJFTF9SRVFVSVJFRCBudW1iZXI6MSIKLSAg
ICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0TWVzc2FnZVwiIgotICAgICIg
IGZpZWxkIHsgdHlwZTpUWVBFX0lOVDMyICAgZGVmYXVsdF92YWx1ZTpcIjFcIiAgICAgICAgICIg
RVRDICIgfSIKLSAgICAiICBmaWVsZCB7IHR5cGU6VFlQRV9JTlQzMiAgIGRlZmF1bHRfdmFsdWU6
XCItMlwiICAgICAgICAiIEVUQyAiIH0iCi0gICAgIiAgZmllbGQgeyB0eXBlOlRZUEVfSU5UNjQg
ICBkZWZhdWx0X3ZhbHVlOlwiM1wiICAgICAgICAgIiBFVEMgIiB9IgotICAgICIgIGZpZWxkIHsg
dHlwZTpUWVBFX0lOVDY0ICAgZGVmYXVsdF92YWx1ZTpcIi00XCIgICAgICAgICIgRVRDICIgfSIK
LSAgICAiICBmaWVsZCB7IHR5cGU6VFlQRV9VSU5UMzIgIGRlZmF1bHRfdmFsdWU6XCI1XCIgICAg
ICAgICAiIEVUQyAiIH0iCi0gICAgIiAgZmllbGQgeyB0eXBlOlRZUEVfVUlOVDY0ICBkZWZhdWx0
X3ZhbHVlOlwiNlwiICAgICAgICAgIiBFVEMgIiB9IgotICAgICIgIGZpZWxkIHsgdHlwZTpUWVBF
X0ZMT0FUICAgZGVmYXVsdF92YWx1ZTpcIjcuNVwiICAgICAgICIgRVRDICIgfSIKLSAgICAiICBm
aWVsZCB7IHR5cGU6VFlQRV9GTE9BVCAgIGRlZmF1bHRfdmFsdWU6XCItOC41XCIgICAgICAiIEVU
QyAiIH0iCi0gICAgIiAgZmllbGQgeyB0eXBlOlRZUEVfRkxPQVQgICBkZWZhdWx0X3ZhbHVlOlwi
OVwiICAgICAgICAgIiBFVEMgIiB9IgotICAgICIgIGZpZWxkIHsgdHlwZTpUWVBFX0RPVUJMRSAg
ZGVmYXVsdF92YWx1ZTpcIjEwLjVcIiAgICAgICIgRVRDICIgfSIKLSAgICAiICBmaWVsZCB7IHR5
cGU6VFlQRV9ET1VCTEUgIGRlZmF1bHRfdmFsdWU6XCItMTEuNVwiICAgICAiIEVUQyAiIH0iCi0g
ICAgIiAgZmllbGQgeyB0eXBlOlRZUEVfRE9VQkxFICBkZWZhdWx0X3ZhbHVlOlwiMTJcIiAgICAg
ICAgIiBFVEMgIiB9IgotICAgICIgIGZpZWxkIHsgdHlwZTpUWVBFX0RPVUJMRSAgZGVmYXVsdF92
YWx1ZTpcImluZlwiICAgICAgICIgRVRDICIgfSIKLSAgICAiICBmaWVsZCB7IHR5cGU6VFlQRV9E
T1VCTEUgIGRlZmF1bHRfdmFsdWU6XCItaW5mXCIgICAgICAiIEVUQyAiIH0iCi0gICAgIiAgZmll
bGQgeyB0eXBlOlRZUEVfRE9VQkxFICBkZWZhdWx0X3ZhbHVlOlwibmFuXCIgICAgICAgIiBFVEMg
IiB9IgotICAgICIgIGZpZWxkIHsgdHlwZTpUWVBFX1NUUklORyAgZGVmYXVsdF92YWx1ZTpcIjEz
XFwwMDFcIiAgICIgRVRDICIgfSIKLSAgICAiICBmaWVsZCB7IHR5cGU6VFlQRV9TVFJJTkcgIGRl
ZmF1bHRfdmFsdWU6XCJhYmNcIiAgICAgICAiIEVUQyAiIH0iCi0gICAgIiAgZmllbGQgeyB0eXBl
OlRZUEVfQllURVMgICBkZWZhdWx0X3ZhbHVlOlwiMTRcXFxcMDAyXCIgIiBFVEMgIiB9IgotICAg
ICIgIGZpZWxkIHsgdHlwZTpUWVBFX0JZVEVTICAgZGVmYXVsdF92YWx1ZTpcImFiY1wiICAgICAg
ICIgRVRDICIgfSIKLSAgICAiICBmaWVsZCB7IHR5cGU6VFlQRV9CT09MICAgIGRlZmF1bHRfdmFs
dWU6XCJ0cnVlXCIgICAgICAiIEVUQyAiIH0iCi0gICAgIiAgZmllbGQgeyB0eXBlX25hbWU6XCJG
b29cIiBkZWZhdWx0X3ZhbHVlOlwiRk9PXCIgICAgICAgIiBFVEMgIiB9IgotCi0gICAgIiAgZmll
bGQgeyIKLSAgICAiICAgIHR5cGU6VFlQRV9JTlQzMiAgIGRlZmF1bHRfdmFsdWU6XCIyMTQ3NDgz
NjQ3XCIgICAgICAgICAgICIgRVRDCi0gICAgIiAgfSIKLSAgICAiICBmaWVsZCB7IgotICAgICIg
ICAgdHlwZTpUWVBFX0lOVDMyICAgZGVmYXVsdF92YWx1ZTpcIi0yMTQ3NDgzNjQ4XCIgICAgICAg
ICAgIiBFVEMKLSAgICAiICB9IgotICAgICIgIGZpZWxkIHsiCi0gICAgIiAgICB0eXBlOlRZUEVf
VUlOVDMyICBkZWZhdWx0X3ZhbHVlOlwiNDI5NDk2NzI5NVwiICAgICAgICAgICAiIEVUQwotICAg
ICIgIH0iCi0gICAgIiAgZmllbGQgeyIKLSAgICAiICAgIHR5cGU6VFlQRV9JTlQ2NCAgIGRlZmF1
bHRfdmFsdWU6XCI5MjIzMzcyMDM2ODU0Nzc1ODA3XCIgICIgRVRDCi0gICAgIiAgfSIKLSAgICAi
ICBmaWVsZCB7IgotICAgICIgICAgdHlwZTpUWVBFX0lOVDY0ICAgZGVmYXVsdF92YWx1ZTpcIi05
MjIzMzcyMDM2ODU0Nzc1ODA4XCIgIiBFVEMKLSAgICAiICB9IgotICAgICIgIGZpZWxkIHsiCi0g
ICAgIiAgICB0eXBlOlRZUEVfVUlOVDY0ICBkZWZhdWx0X3ZhbHVlOlwiMTg0NDY3NDQwNzM3MDk1
NTE2MTVcIiAiIEVUQwotICAgICIgIH0iCi0gICAgIiAgZmllbGQgeyIKLSAgICAiICAgIHR5cGU6
VFlQRV9ET1VCTEUgIGRlZmF1bHRfdmFsdWU6XCI0Mzk4MVwiICAgICAgICAgICAgICAgICIgRVRD
Ci0gICAgIiAgfSIKLSAgICAifSIpOwotI3VuZGVmIEVUQwotfQotCi1URVNUX0YoUGFyc2VNZXNz
YWdlVGVzdCwgRmllbGRKc29uTmFtZSkgewotICBFeHBlY3RQYXJzZXNUbygKLSAgICAibWVzc2Fn
ZSBUZXN0TWVzc2FnZSB7XG4iCi0gICAgIiAgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDEgW2pzb25f
bmFtZSA9IFwiQHR5cGVcIl07XG4iCi0gICAgIn1cbiIsCi0gICAgIm1lc3NhZ2VfdHlwZSB7Igot
ICAgICIgIG5hbWU6IFwiVGVzdE1lc3NhZ2VcIiIKLSAgICAiICBmaWVsZCB7XG4iCi0gICAgIiAg
ICBuYW1lOiBcImZvb1wiIGxhYmVsOiBMQUJFTF9PUFRJT05BTCB0eXBlOiBUWVBFX1NUUklORyBu
dW1iZXI6IDEiCi0gICAgIiAgICBqc29uX25hbWU6IFwiQHR5cGVcIlxuIgotICAgICIgIH1cbiIK
LSAgICAifVxuIik7Ci19Ci0KLVRFU1RfRihQYXJzZU1lc3NhZ2VUZXN0LCBGaWVsZE9wdGlvbnMp
IHsKLSAgRXhwZWN0UGFyc2VzVG8oCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAg
ICIgIG9wdGlvbmFsIHN0cmluZyBmb28gPSAxXG4iCi0gICAgIiAgICAgIFtjdHlwZT1DT1JELCAo
Zm9vKT03LCBmb28uKC5iYXIuYmF6KS5xdXgucXV1eC4oY29yZ2UpPS0zMywgXG4iCi0gICAgIiAg
ICAgICAocXV1eCk9XCJ4XDA0MHlcIiwgKGJhei5xdXgpPWhleV07XG4iCi0gICAgIn1cbiIsCi0K
LSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0TWVzc2FnZVwiIgotICAg
ICIgIGZpZWxkIHsgbmFtZTogXCJmb29cIiBsYWJlbDogTEFCRUxfT1BUSU9OQUwgdHlwZTogVFlQ
RV9TVFJJTkcgbnVtYmVyOiAxIgotICAgICIgICAgICAgICAgb3B0aW9ucyB7IHVuaW50ZXJwcmV0
ZWRfb3B0aW9uOiB7IG5hbWUgeyBuYW1lX3BhcnQ6IFwiY3R5cGVcIiAiCi0gICAgIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjog
ZmFsc2UgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcl92YWx1ZTogXCJDT1JEXCIgIH0iCi0gICAgIiAgICAgICAgICAgICAgICAg
ICAgdW5pbnRlcnByZXRlZF9vcHRpb246IHsgbmFtZSB7IG5hbWVfcGFydDogXCJmb29cIiAiCi0g
ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
X2V4dGVuc2lvbjogdHJ1ZSB9ICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3NpdGl2ZV9pbnRfdmFsdWU6IDcgIH0iCi0gICAgIiAgICAgICAgICAg
ICAgICAgICAgdW5pbnRlcnByZXRlZF9vcHRpb246IHsgbmFtZSB7IG5hbWVfcGFydDogXCJmb29c
IiAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzX2V4dGVuc2lvbjogZmFsc2UgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSB7IG5hbWVfcGFydDogXCIuYmFyLmJhelwiIgotICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19l
eHRlbnNpb246IHRydWUgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSB7IG5hbWVfcGFydDogXCJxdXhcIiAiCi0gICAgIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogZmFs
c2UgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZSB7IG5hbWVfcGFydDogXCJxdXV4XCIgIgotICAgICIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19leHRlbnNpb246IGZhbHNlIH0gIgotICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgeyBuYW1l
X3BhcnQ6IFwiY29yZ2VcIiAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSB9ICIKLSAgICAiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZV9pbnRfdmFsdWU6IC0z
MyB9IgotICAgICIgICAgICAgICAgICAgICAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9uOiB7IG5h
bWUgeyBuYW1lX3BhcnQ6IFwicXV1eFwiICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXh0ZW5zaW9uOiB0cnVlIH0gIgotICAgICIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ192YWx1ZTog
XCJ4IHlcIiB9IgotICAgICIgICAgICAgICAgICAgICAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9u
OiB7IG5hbWUgeyBuYW1lX3BhcnQ6IFwiYmF6LnF1eFwiICIKLSAgICAiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXh0ZW5zaW9uOiB0cnVlIH0g
IgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50
aWZpZXJfdmFsdWU6IFwiaGV5XCIgfSIKLSAgICAiICAgICAgICAgIH0iCi0gICAgIiAgfSIKLSAg
ICAifSIpOwotfQotCi1URVNUX0YoUGFyc2VNZXNzYWdlVGVzdCwgT25lb2YpIHsKLSAgRXhwZWN0
UGFyc2VzVG8oCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIG9uZW9mIGZv
byB7XG4iCi0gICAgIiAgICBpbnQzMiBhID0gMTtcbiIKLSAgICAiICAgIHN0cmluZyBiID0gMjtc
biIKLSAgICAiICAgIFRlc3RNZXNzYWdlIGMgPSAzO1xuIgotICAgICIgICAgZ3JvdXAgRCA9IDQg
eyBvcHRpb25hbCBpbnQzMiBpID0gNTsgfVxuIgotICAgICIgIH1cbiIKLSAgICAifVxuIiwKLQot
ICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIlRlc3RNZXNzYWdlXCIiCi0gICAg
IiAgZmllbGQgeyBuYW1lOlwiYVwiIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQz
MiBudW1iZXI6MSAiCi0gICAgIiAgICAgICAgICBvbmVvZl9pbmRleDowIH0iCi0gICAgIiAgZmll
bGQgeyBuYW1lOlwiYlwiIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9TVFJJTkcgbnVt
YmVyOjIgIgotICAgICIgICAgICAgICAgb25lb2ZfaW5kZXg6MCB9IgotICAgICIgIGZpZWxkIHsg
bmFtZTpcImNcIiBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlX25hbWU6XCJUZXN0TWVzc2FnZVwi
ICIKLSAgICAiICAgICAgICAgIG51bWJlcjozIG9uZW9mX2luZGV4OjAgfSIKLSAgICAiICBmaWVs
ZCB7IG5hbWU6XCJkXCIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0dST1VQICIKLSAg
ICAiICAgICAgICAgIHR5cGVfbmFtZTpcIkRcIiBudW1iZXI6NCBvbmVvZl9pbmRleDowIH0iCi0g
ICAgIiAgb25lb2ZfZGVjbCB7IgotICAgICIgICAgbmFtZTogXCJmb29cIiIKLSAgICAiICB9Igot
ICAgICIgIG5lc3RlZF90eXBlIHsiCi0gICAgIiAgICBuYW1lOiBcIkRcIiIKLSAgICAiICAgIGZp
ZWxkIHsgbmFtZTpcImlcIiBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgbnVt
YmVyOjUgfSIKLSAgICAiICB9IgotICAgICJ9Iik7Ci19Ci0KLVRFU1RfRihQYXJzZU1lc3NhZ2VU
ZXN0LCBNdWx0aXBsZU9uZW9mcykgewotICBFeHBlY3RQYXJzZXNUbygKLSAgICAibWVzc2FnZSBU
ZXN0TWVzc2FnZSB7XG4iCi0gICAgIiAgb25lb2YgZm9vIHtcbiIKLSAgICAiICAgIGludDMyIGEg
PSAxO1xuIgotICAgICIgICAgc3RyaW5nIGIgPSAyO1xuIgotICAgICIgIH1cbiIKLSAgICAiICBv
bmVvZiBiYXIge1xuIgotICAgICIgICAgaW50MzIgYyA9IDM7XG4iCi0gICAgIiAgICBzdHJpbmcg
ZCA9IDQ7XG4iCi0gICAgIiAgfVxuIgotICAgICJ9XG4iLAotCi0gICAgIm1lc3NhZ2VfdHlwZSB7
IgotICAgICIgIG5hbWU6IFwiVGVzdE1lc3NhZ2VcIiIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJh
XCIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIG51bWJlcjoxICIKLSAgICAi
ICAgICAgICAgIG9uZW9mX2luZGV4OjAgfSIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJiXCIgbGFi
ZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX1NUUklORyBudW1iZXI6MiAiCi0gICAgIiAgICAg
ICAgICBvbmVvZl9pbmRleDowIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiY1wiIGxhYmVsOkxB
QkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiBudW1iZXI6MyAiCi0gICAgIiAgICAgICAgICBv
bmVvZl9pbmRleDoxIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZFwiIGxhYmVsOkxBQkVMX09Q
VElPTkFMIHR5cGU6VFlQRV9TVFJJTkcgbnVtYmVyOjQgIgotICAgICIgICAgICAgICAgb25lb2Zf
aW5kZXg6MSB9IgotICAgICIgIG9uZW9mX2RlY2wgeyIKLSAgICAiICAgIG5hbWU6IFwiZm9vXCIi
Ci0gICAgIiAgfSIKLSAgICAiICBvbmVvZl9kZWNsIHsiCi0gICAgIiAgICBuYW1lOiBcImJhclwi
IgotICAgICIgIH0iCi0gICAgIn0iKTsKLX0KLQotVEVTVF9GKFBhcnNlTWVzc2FnZVRlc3QsIE1h
cHMpIHsKLSAgRXhwZWN0UGFyc2VzVG8oCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgot
ICAgICIgIG1hcDxpbnQzMiwgc3RyaW5nPiBwcmltaXRpdmVfdHlwZV9tYXAgPSAxO1xuIgotICAg
ICIgIG1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IGNvbXBvc2l0ZV90eXBlX21hcCA9IDI7XG4iCi0g
ICAgIn1cbiIsCi0KLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0TWVz
c2FnZVwiIgotICAgICIgIG5lc3RlZF90eXBlIHsiCi0gICAgIiAgICBuYW1lOiBcIlByaW1pdGl2
ZVR5cGVNYXBFbnRyeVwiIgotICAgICIgICAgZmllbGQgeyAiCi0gICAgIiAgICAgICBuYW1lOiBc
ImtleVwiIG51bWJlcjogMSBsYWJlbDpMQUJFTF9PUFRJT05BTCIKLSAgICAiICAgICAgIHR5cGU6
VFlQRV9JTlQzMiIKLSAgICAiICAgIH0iCi0gICAgIiAgICBmaWVsZCB7ICIKLSAgICAiICAgICAg
IG5hbWU6IFwidmFsdWVcIiBudW1iZXI6IDIgbGFiZWw6TEFCRUxfT1BUSU9OQUwiCi0gICAgIiAg
ICAgICB0eXBlOlRZUEVfU1RSSU5HIgotICAgICIgICAgfSIKLSAgICAiICAgIG9wdGlvbnMgeyBt
YXBfZW50cnk6IHRydWUgfSIKLSAgICAiICB9IgotICAgICIgIG5lc3RlZF90eXBlIHsiCi0gICAg
IiAgICBuYW1lOiBcIkNvbXBvc2l0ZVR5cGVNYXBFbnRyeVwiIgotICAgICIgICAgZmllbGQgeyAi
Ci0gICAgIiAgICAgICBuYW1lOiBcImtleVwiIG51bWJlcjogMSBsYWJlbDpMQUJFTF9PUFRJT05B
TCIKLSAgICAiICAgICAgIHR5cGVfbmFtZTogXCJLZXlUeXBlXCIiCi0gICAgIiAgICB9IgotICAg
ICIgICAgZmllbGQgeyAiCi0gICAgIiAgICAgICBuYW1lOiBcInZhbHVlXCIgbnVtYmVyOiAyIGxh
YmVsOkxBQkVMX09QVElPTkFMIgotICAgICIgICAgICAgdHlwZV9uYW1lOiBcIlZhbHVlVHlwZVwi
IgotICAgICIgICAgfSIKLSAgICAiICAgIG9wdGlvbnMgeyBtYXBfZW50cnk6IHRydWUgfSIKLSAg
ICAiICB9IgotICAgICIgIGZpZWxkIHsiCi0gICAgIiAgICBuYW1lOiBcInByaW1pdGl2ZV90eXBl
X21hcFwiIgotICAgICIgICAgbGFiZWw6IExBQkVMX1JFUEVBVEVEIgotICAgICIgICAgdHlwZV9u
YW1lOiBcIlByaW1pdGl2ZVR5cGVNYXBFbnRyeVwiIgotICAgICIgICAgbnVtYmVyOiAxIgotICAg
ICIgIH0iCi0gICAgIiAgZmllbGQgeyIKLSAgICAiICAgIG5hbWU6IFwiY29tcG9zaXRlX3R5cGVf
bWFwXCIiCi0gICAgIiAgICBsYWJlbDogTEFCRUxfUkVQRUFURUQiCi0gICAgIiAgICB0eXBlX25h
bWU6IFwiQ29tcG9zaXRlVHlwZU1hcEVudHJ5XCIiCi0gICAgIiAgICBudW1iZXI6IDIiCi0gICAg
IiAgfSIKLSAgICAifSIpOwotfQotCi1URVNUX0YoUGFyc2VNZXNzYWdlVGVzdCwgR3JvdXApIHsK
LSAgRXhwZWN0UGFyc2VzVG8oCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIg
IG9wdGlvbmFsIGdyb3VwIFRlc3RHcm91cCA9IDEge307XG4iCi0gICAgIn1cbiIsCi0KLSAgICAi
bWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0TWVzc2FnZVwiIgotICAgICIgIG5l
c3RlZF90eXBlIHsgbmFtZTogXCJUZXN0R3JvdXBcIiB9IgotICAgICIgIGZpZWxkIHsgbmFtZTpc
InRlc3Rncm91cFwiIGxhYmVsOkxBQkVMX09QVElPTkFMIG51bWJlcjoxIgotICAgICIgICAgICAg
ICAgdHlwZTpUWVBFX0dST1VQIHR5cGVfbmFtZTogXCJUZXN0R3JvdXBcIiB9IgotICAgICJ9Iik7
Ci19Ci0KLVRFU1RfRihQYXJzZU1lc3NhZ2VUZXN0LCBOZXN0ZWRNZXNzYWdlKSB7Ci0gIEV4cGVj
dFBhcnNlc1RvKAotICAgICJtZXNzYWdlIFRlc3RNZXNzYWdlIHtcbiIKLSAgICAiICBtZXNzYWdl
IE5lc3RlZCB7fVxuIgotICAgICIgIG9wdGlvbmFsIE5lc3RlZCB0ZXN0X25lc3RlZCA9IDE7XG4i
Ci0gICAgIn1cbiIsCi0KLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0
TWVzc2FnZVwiIgotICAgICIgIG5lc3RlZF90eXBlIHsgbmFtZTogXCJOZXN0ZWRcIiB9IgotICAg
ICIgIGZpZWxkIHsgbmFtZTpcInRlc3RfbmVzdGVkXCIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgbnVt
YmVyOjEiCi0gICAgIiAgICAgICAgICB0eXBlX25hbWU6IFwiTmVzdGVkXCIgfSIKLSAgICAifSIp
OwotfQotCi1URVNUX0YoUGFyc2VNZXNzYWdlVGVzdCwgTmVzdGVkRW51bSkgewotICBFeHBlY3RQ
YXJzZXNUbygKLSAgICAibWVzc2FnZSBUZXN0TWVzc2FnZSB7XG4iCi0gICAgIiAgZW51bSBOZXN0
ZWRFbnVtIHt9XG4iCi0gICAgIiAgb3B0aW9uYWwgTmVzdGVkRW51bSB0ZXN0X2VudW0gPSAxO1xu
IgotICAgICJ9XG4iLAotCi0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiVGVz
dE1lc3NhZ2VcIiIKLSAgICAiICBlbnVtX3R5cGUgeyBuYW1lOiBcIk5lc3RlZEVudW1cIiB9Igot
ICAgICIgIGZpZWxkIHsgbmFtZTpcInRlc3RfZW51bVwiIGxhYmVsOkxBQkVMX09QVElPTkFMIG51
bWJlcjoxIgotICAgICIgICAgICAgICAgdHlwZV9uYW1lOiBcIk5lc3RlZEVudW1cIiB9IgotICAg
ICJ9Iik7Ci19Ci0KLVRFU1RfRihQYXJzZU1lc3NhZ2VUZXN0LCBSZXNlcnZlZFJhbmdlKSB7Ci0g
IEV4cGVjdFBhcnNlc1RvKAotICAgICJtZXNzYWdlIFRlc3RNZXNzYWdlIHtcbiIKLSAgICAiICBy
ZXF1aXJlZCBpbnQzMiBmb28gPSAxO1xuIgotICAgICIgIHJlc2VydmVkIDIsIDE1LCA5IHRvIDEx
LCAzO1xuIgotICAgICJ9XG4iLAotCi0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6
IFwiVGVzdE1lc3NhZ2VcIiIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJmb29cIiBsYWJlbDpMQUJF
TF9SRVFVSVJFRCB0eXBlOlRZUEVfSU5UMzIgbnVtYmVyOjEgfSIKLSAgICAiICByZXNlcnZlZF9y
YW5nZSB7IHN0YXJ0OjIgICBlbmQ6MyAgICAgICAgIH0iCi0gICAgIiAgcmVzZXJ2ZWRfcmFuZ2Ug
eyBzdGFydDoxNSAgZW5kOjE2ICAgICAgICB9IgotICAgICIgIHJlc2VydmVkX3JhbmdlIHsgc3Rh
cnQ6OSAgIGVuZDoxMiAgICAgICAgfSIKLSAgICAiICByZXNlcnZlZF9yYW5nZSB7IHN0YXJ0OjMg
ICBlbmQ6NCAgICAgICAgIH0iCi0gICAgIn0iKTsKLX0KLQotVEVTVF9GKFBhcnNlTWVzc2FnZVRl
c3QsIFJlc2VydmVkTmFtZXMpIHsKLSAgRXhwZWN0UGFyc2VzVG8oCi0gICAgIm1lc3NhZ2UgVGVz
dE1lc3NhZ2Uge1xuIgotICAgICIgIHJlc2VydmVkIFwiZm9vXCIsIFwiYmFyXCI7XG4iCi0gICAg
In1cbiIsCi0KLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0TWVzc2Fn
ZVwiIgotICAgICIgIHJlc2VydmVkX25hbWU6IFwiZm9vXCIiCi0gICAgIiAgcmVzZXJ2ZWRfbmFt
ZTogXCJiYXJcIiIKLSAgICAifSIpOwotfQotCi1URVNUX0YoUGFyc2VNZXNzYWdlVGVzdCwgRXh0
ZW5zaW9uUmFuZ2UpIHsKLSAgRXhwZWN0UGFyc2VzVG8oCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3Nh
Z2Uge1xuIgotICAgICIgIGV4dGVuc2lvbnMgMTAgdG8gMTk7XG4iCi0gICAgIiAgZXh0ZW5zaW9u
cyAzMCB0byBtYXg7XG4iCi0gICAgIn1cbiIsCi0KLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAg
IiAgbmFtZTogXCJUZXN0TWVzc2FnZVwiIgotICAgICIgIGV4dGVuc2lvbl9yYW5nZSB7IHN0YXJ0
OjEwIGVuZDoyMCAgICAgICAgfSIKLSAgICAiICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDozMCBl
bmQ6NTM2ODcwOTEyIH0iCi0gICAgIn0iKTsKLX0KLQotVEVTVF9GKFBhcnNlTWVzc2FnZVRlc3Qs
IENvbXBvdW5kRXh0ZW5zaW9uUmFuZ2UpIHsKLSAgRXhwZWN0UGFyc2VzVG8oCi0gICAgIm1lc3Nh
Z2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIGV4dGVuc2lvbnMgMiwgMTUsIDkgdG8gMTEsIDEw
MCB0byBtYXgsIDM7XG4iCi0gICAgIn1cbiIsCi0KLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAg
IiAgbmFtZTogXCJUZXN0TWVzc2FnZVwiIgotICAgICIgIGV4dGVuc2lvbl9yYW5nZSB7IHN0YXJ0
OjIgICBlbmQ6MyAgICAgICAgIH0iCi0gICAgIiAgZXh0ZW5zaW9uX3JhbmdlIHsgc3RhcnQ6MTUg
IGVuZDoxNiAgICAgICAgfSIKLSAgICAiICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDo5ICAgZW5k
OjEyICAgICAgICB9IgotICAgICIgIGV4dGVuc2lvbl9yYW5nZSB7IHN0YXJ0OjEwMCBlbmQ6NTM2
ODcwOTEyIH0iCi0gICAgIiAgZXh0ZW5zaW9uX3JhbmdlIHsgc3RhcnQ6MyAgIGVuZDo0ICAgICAg
ICAgfSIKLSAgICAifSIpOwotfQotCi1URVNUX0YoUGFyc2VNZXNzYWdlVGVzdCwgTGFyZ2VyTWF4
Rm9yTWVzc2FnZVNldFdpcmVGb3JtYXRNZXNzYWdlcykgewotICAvLyBNZXNzYWdlcyB1c2luZyB0
aGUgbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQgb3B0aW9uIGNhbiBhY2NlcHQgbGFyZ2VyCi0gIC8v
IGV4dGVuc2lvbiBudW1iZXJzLCBhcyB0aGUgbnVtYmVycyBhcmUgbm90IGVuY29kZWQgYXMgaW50
MzIgZmllbGQgdmFsdWVzCi0gIC8vIHJhdGhlciB0aGFuIHRhZ3MuCi0gIEV4cGVjdFBhcnNlc1Rv
KAotICAgICJtZXNzYWdlIFRlc3RNZXNzYWdlIHtcbiIKLSAgICAiICBleHRlbnNpb25zIDQgdG8g
bWF4O1xuIgotICAgICIgIG9wdGlvbiBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCA9IHRydWU7XG4i
Ci0gICAgIn1cbiIsCi0KLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0
TWVzc2FnZVwiIgotICAgICIgICAgZXh0ZW5zaW9uX3JhbmdlIHsgc3RhcnQ6NCBlbmQ6IDB4N2Zm
ZmZmZmYgfSIKLSAgICAiICBvcHRpb25zIHtcbiIKLSAgICAiICAgIHVuaW50ZXJwcmV0ZWRfb3B0
aW9uIHsgXG4iCi0gICAgIiAgICAgIG5hbWUge1xuIgotICAgICIgICAgICAgIG5hbWVfcGFydDog
XCJtZXNzYWdlX3NldF93aXJlX2Zvcm1hdFwiXG4iCi0gICAgIiAgICAgICAgaXNfZXh0ZW5zaW9u
OiBmYWxzZVxuIgotICAgICIgICAgICB9XG4iCi0gICAgIiAgICAgIGlkZW50aWZpZXJfdmFsdWU6
IFwidHJ1ZVwiXG4iCi0gICAgIiAgICB9XG4iCi0gICAgIiAgfVxuIgotICAgICJ9Iik7Ci19Ci0K
LVRFU1RfRihQYXJzZU1lc3NhZ2VUZXN0LCBFeHRlbnNpb25zKSB7Ci0gIEV4cGVjdFBhcnNlc1Rv
KAotICAgICJleHRlbmQgRXh0ZW5kZWUxIHsgb3B0aW9uYWwgaW50MzIgZm9vID0gMTI7IH1cbiIK
LSAgICAiZXh0ZW5kIEV4dGVuZGVlMiB7IHJlcGVhdGVkIFRlc3RNZXNzYWdlIGJhciA9IDIyOyB9
XG4iLAotCi0gICAgImV4dGVuc2lvbiB7IG5hbWU6XCJmb29cIiBsYWJlbDpMQUJFTF9PUFRJT05B
TCB0eXBlOlRZUEVfSU5UMzIgbnVtYmVyOjEyIgotICAgICIgICAgICAgICAgICBleHRlbmRlZTog
XCJFeHRlbmRlZTFcIiB9ICIKLSAgICAiZXh0ZW5zaW9uIHsgbmFtZTpcImJhclwiIGxhYmVsOkxB
QkVMX1JFUEVBVEVEIG51bWJlcjoyMiIKLSAgICAiICAgICAgICAgICAgdHlwZV9uYW1lOlwiVGVz
dE1lc3NhZ2VcIiBleHRlbmRlZTogXCJFeHRlbmRlZTJcIiB9Iik7Ci19Ci0KLVRFU1RfRihQYXJz
ZU1lc3NhZ2VUZXN0LCBFeHRlbnNpb25zSW5NZXNzYWdlU2NvcGUpIHsKLSAgRXhwZWN0UGFyc2Vz
VG8oCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIGV4dGVuZCBFeHRlbmRl
ZTEgeyBvcHRpb25hbCBpbnQzMiBmb28gPSAxMjsgfVxuIgotICAgICIgIGV4dGVuZCBFeHRlbmRl
ZTIgeyByZXBlYXRlZCBUZXN0TWVzc2FnZSBiYXIgPSAyMjsgfVxuIgotICAgICJ9XG4iLAotCi0g
ICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiVGVzdE1lc3NhZ2VcIiIKLSAgICAi
ICBleHRlbnNpb24geyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBF
X0lOVDMyIG51bWJlcjoxMiIKLSAgICAiICAgICAgICAgICAgICBleHRlbmRlZTogXCJFeHRlbmRl
ZTFcIiB9IgotICAgICIgIGV4dGVuc2lvbiB7IG5hbWU6XCJiYXJcIiBsYWJlbDpMQUJFTF9SRVBF
QVRFRCBudW1iZXI6MjIiCi0gICAgIiAgICAgICAgICAgICAgdHlwZV9uYW1lOlwiVGVzdE1lc3Nh
Z2VcIiBleHRlbmRlZTogXCJFeHRlbmRlZTJcIiB9IgotICAgICJ9Iik7Ci19Ci0KLVRFU1RfRihQ
YXJzZU1lc3NhZ2VUZXN0LCBNdWx0aXBsZUV4dGVuc2lvbnNPbmVFeHRlbmRlZSkgewotICBFeHBl
Y3RQYXJzZXNUbygKLSAgICAiZXh0ZW5kIEV4dGVuZGVlMSB7XG4iCi0gICAgIiAgb3B0aW9uYWwg
aW50MzIgZm9vID0gMTI7XG4iCi0gICAgIiAgcmVwZWF0ZWQgVGVzdE1lc3NhZ2UgYmFyID0gMjI7
XG4iCi0gICAgIn1cbiIsCi0KLSAgICAiZXh0ZW5zaW9uIHsgbmFtZTpcImZvb1wiIGxhYmVsOkxB
QkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiBudW1iZXI6MTIiCi0gICAgIiAgICAgICAgICAg
IGV4dGVuZGVlOiBcIkV4dGVuZGVlMVwiIH0gIgotICAgICJleHRlbnNpb24geyBuYW1lOlwiYmFy
XCIgbGFiZWw6TEFCRUxfUkVQRUFURUQgbnVtYmVyOjIyIgotICAgICIgICAgICAgICAgICB0eXBl
X25hbWU6XCJUZXN0TWVzc2FnZVwiIGV4dGVuZGVlOiBcIkV4dGVuZGVlMVwiIH0iKTsKLX0KLQot
VEVTVF9GKFBhcnNlTWVzc2FnZVRlc3QsIE9wdGlvbmFsTGFiZWxQcm90bzMpIHsKLSAgRXhwZWN0
UGFyc2VzVG8oCi0gICAgInN5bnRheCA9IFwicHJvdG8zXCI7XG4iCi0gICAgIm1lc3NhZ2UgVGVz
dE1lc3NhZ2Uge1xuIgotICAgICIgIGludDMyIGZvbyA9IDE7XG4iCi0gICAgIn1cbiIsCi0KLSAg
ICAic3ludGF4OiBcInByb3RvM1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFt
ZTogXCJUZXN0TWVzc2FnZVwiIgotICAgICIgIGZpZWxkIHsgbmFtZTpcImZvb1wiIGxhYmVsOkxB
QkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiBudW1iZXI6MSB9IH0iKTsKLX0KLQotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi10eXBlZGVmIFBhcnNlclRlc3QgUGFyc2VFbnVtVGVzdDsKLQotVEVTVF9GKFBh
cnNlRW51bVRlc3QsIFNpbXBsZUVudW0pIHsKLSAgRXhwZWN0UGFyc2VzVG8oCi0gICAgImVudW0g
VGVzdEVudW0ge1xuIgotICAgICIgIEZPTyA9IDA7XG4iCi0gICAgIn1cbiIsCi0KLSAgICAiZW51
bV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0RW51bVwiIgotICAgICIgIHZhbHVlIHsgbmFt
ZTpcIkZPT1wiIG51bWJlcjowIH0iCi0gICAgIn0iKTsKLX0KLQotVEVTVF9GKFBhcnNlRW51bVRl
c3QsIFZhbHVlcykgewotICBFeHBlY3RQYXJzZXNUbygKLSAgICAiZW51bSBUZXN0RW51bSB7XG4i
Ci0gICAgIiAgRk9PID0gMTM7XG4iCi0gICAgIiAgQkFSID0gLTEwO1xuIgotICAgICIgIEJBWiA9
IDUwMDtcbiIKLSAgICAiICBIRVhfTUFYID0gMHg3RkZGRkZGRjtcbiIKLSAgICAiICBIRVhfTUlO
ID0gLTB4ODAwMDAwMDA7XG4iCi0gICAgIiAgSU5UX01BWCA9IDIxNDc0ODM2NDc7XG4iCi0gICAg
IiAgSU5UX01JTiA9IC0yMTQ3NDgzNjQ4O1xuIgotICAgICJ9XG4iLAotCi0gICAgImVudW1fdHlw
ZSB7IgotICAgICIgIG5hbWU6IFwiVGVzdEVudW1cIiIKLSAgICAiICB2YWx1ZSB7IG5hbWU6XCJG
T09cIiBudW1iZXI6MTMgfSIKLSAgICAiICB2YWx1ZSB7IG5hbWU6XCJCQVJcIiBudW1iZXI6LTEw
IH0iCi0gICAgIiAgdmFsdWUgeyBuYW1lOlwiQkFaXCIgbnVtYmVyOjUwMCB9IgotICAgICIgIHZh
bHVlIHsgbmFtZTpcIkhFWF9NQVhcIiBudW1iZXI6MjE0NzQ4MzY0NyB9IgotICAgICIgIHZhbHVl
IHsgbmFtZTpcIkhFWF9NSU5cIiBudW1iZXI6LTIxNDc0ODM2NDggfSIKLSAgICAiICB2YWx1ZSB7
IG5hbWU6XCJJTlRfTUFYXCIgbnVtYmVyOjIxNDc0ODM2NDcgfSIKLSAgICAiICB2YWx1ZSB7IG5h
bWU6XCJJTlRfTUlOXCIgbnVtYmVyOi0yMTQ3NDgzNjQ4IH0iCi0gICAgIn0iKTsKLX0KLQotVEVT
VF9GKFBhcnNlRW51bVRlc3QsIFZhbHVlT3B0aW9ucykgewotICBFeHBlY3RQYXJzZXNUbygKLSAg
ICAiZW51bSBUZXN0RW51bSB7XG4iCi0gICAgIiAgRk9PID0gMTM7XG4iCi0gICAgIiAgQkFSID0g
LTEwIFsgKHNvbWV0aGluZy50ZXh0KSA9ICdhYmMnIF07XG4iCi0gICAgIiAgQkFaID0gNTAwIFsg
KHNvbWV0aGluZy50ZXh0KSA9ICdkZWYnLCBvdGhlciA9IDEgXTtcbiIKLSAgICAifVxuIiwKLQot
ICAgICJlbnVtX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIlRlc3RFbnVtXCIiCi0gICAgIiAgdmFs
dWUgeyBuYW1lOiBcIkZPT1wiIG51bWJlcjogMTMgfSIKLSAgICAiICB2YWx1ZSB7IG5hbWU6IFwi
QkFSXCIgbnVtYmVyOiAtMTAgIgotICAgICIgICAgb3B0aW9ucyB7ICIKLSAgICAiICAgICAgdW5p
bnRlcnByZXRlZF9vcHRpb24geyAiCi0gICAgIiAgICAgICAgbmFtZSB7IG5hbWVfcGFydDogXCJz
b21ldGhpbmcudGV4dFwiIGlzX2V4dGVuc2lvbjogdHJ1ZSB9ICIKLSAgICAiICAgICAgICBzdHJp
bmdfdmFsdWU6IFwiYWJjXCIgIgotICAgICIgICAgICB9ICIKLSAgICAiICAgIH0gIgotICAgICIg
IH0gIgotICAgICIgIHZhbHVlIHsgbmFtZTogXCJCQVpcIiBudW1iZXI6IDUwMCAiCi0gICAgIiAg
ICBvcHRpb25zIHsgIgotICAgICIgICAgICB1bmludGVycHJldGVkX29wdGlvbiB7ICIKLSAgICAi
ICAgICAgICBuYW1lIHsgbmFtZV9wYXJ0OiBcInNvbWV0aGluZy50ZXh0XCIgaXNfZXh0ZW5zaW9u
OiB0cnVlIH0gIgotICAgICIgICAgICAgIHN0cmluZ192YWx1ZTogXCJkZWZcIiAiCi0gICAgIiAg
ICAgIH0gIgotICAgICIgICAgICB1bmludGVycHJldGVkX29wdGlvbiB7ICIKLSAgICAiICAgICAg
ICBuYW1lIHsgbmFtZV9wYXJ0OiBcIm90aGVyXCIgaXNfZXh0ZW5zaW9uOiBmYWxzZSB9ICIKLSAg
ICAiICAgICAgICBwb3NpdGl2ZV9pbnRfdmFsdWU6IDEgIgotICAgICIgICAgICB9ICIKLSAgICAi
ICAgIH0gIgotICAgICIgIH0gIgotICAgICJ9Iik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotdHlw
ZWRlZiBQYXJzZXJUZXN0IFBhcnNlU2VydmljZVRlc3Q7Ci0KLVRFU1RfRihQYXJzZVNlcnZpY2VU
ZXN0LCBTaW1wbGVTZXJ2aWNlKSB7Ci0gIEV4cGVjdFBhcnNlc1RvKAotICAgICJzZXJ2aWNlIFRl
c3RTZXJ2aWNlIHtcbiIKLSAgICAiICBycGMgRm9vKEluKSByZXR1cm5zIChPdXQpO1xuIgotICAg
ICJ9XG4iLAotCi0gICAgInNlcnZpY2UgeyIKLSAgICAiICBuYW1lOiBcIlRlc3RTZXJ2aWNlXCIi
Ci0gICAgIiAgbWV0aG9kIHsgbmFtZTpcIkZvb1wiIGlucHV0X3R5cGU6XCJJblwiIG91dHB1dF90
eXBlOlwiT3V0XCIgfSIKLSAgICAifSIpOwotfQotCi1URVNUX0YoUGFyc2VTZXJ2aWNlVGVzdCwg
TWV0aG9kc0FuZFN0cmVhbXMpIHsKLSAgRXhwZWN0UGFyc2VzVG8oCi0gICAgInNlcnZpY2UgVGVz
dFNlcnZpY2Uge1xuIgotICAgICIgIHJwYyBGb28oSW4xKSByZXR1cm5zIChPdXQxKTtcbiIKLSAg
ICAiICBycGMgQmFyKEluMikgcmV0dXJucyAoT3V0Mik7XG4iCi0gICAgIiAgcnBjIEJheihJbjMp
IHJldHVybnMgKE91dDMpO1xuIgotICAgICJ9XG4iLAotCi0gICAgInNlcnZpY2UgeyIKLSAgICAi
ICBuYW1lOiBcIlRlc3RTZXJ2aWNlXCIiCi0gICAgIiAgbWV0aG9kIHsgbmFtZTpcIkZvb1wiIGlu
cHV0X3R5cGU6XCJJbjFcIiBvdXRwdXRfdHlwZTpcIk91dDFcIiB9IgotICAgICIgIG1ldGhvZCB7
IG5hbWU6XCJCYXJcIiBpbnB1dF90eXBlOlwiSW4yXCIgb3V0cHV0X3R5cGU6XCJPdXQyXCIgfSIK
LSAgICAiICBtZXRob2QgeyBuYW1lOlwiQmF6XCIgaW5wdXRfdHlwZTpcIkluM1wiIG91dHB1dF90
eXBlOlwiT3V0M1wiIH0iCi0gICAgIn0iKTsKLX0KLQotCi0KLS8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGlt
cG9ydHMgYW5kIHBhY2thZ2VzCi0KLXR5cGVkZWYgUGFyc2VyVGVzdCBQYXJzZU1pc2NUZXN0Owot
Ci1URVNUX0YoUGFyc2VNaXNjVGVzdCwgUGFyc2VJbXBvcnQpIHsKLSAgRXhwZWN0UGFyc2VzVG8o
Ci0gICAgImltcG9ydCBcImZvby9iYXIvYmF6LnByb3RvXCI7XG4iLAotICAgICJkZXBlbmRlbmN5
OiBcImZvby9iYXIvYmF6LnByb3RvXCIiKTsKLX0KLQotVEVTVF9GKFBhcnNlTWlzY1Rlc3QsIFBh
cnNlTXVsdGlwbGVJbXBvcnRzKSB7Ci0gIEV4cGVjdFBhcnNlc1RvKAotICAgICJpbXBvcnQgXCJm
b28ucHJvdG9cIjtcbiIKLSAgICAiaW1wb3J0IFwiYmFyLnByb3RvXCI7XG4iCi0gICAgImltcG9y
dCBcImJhei5wcm90b1wiO1xuIiwKLSAgICAiZGVwZW5kZW5jeTogXCJmb28ucHJvdG9cIiIKLSAg
ICAiZGVwZW5kZW5jeTogXCJiYXIucHJvdG9cIiIKLSAgICAiZGVwZW5kZW5jeTogXCJiYXoucHJv
dG9cIiIpOwotfQotCi1URVNUX0YoUGFyc2VNaXNjVGVzdCwgUGFyc2VQdWJsaWNJbXBvcnRzKSB7
Ci0gIEV4cGVjdFBhcnNlc1RvKAotICAgICJpbXBvcnQgXCJmb28ucHJvdG9cIjtcbiIKLSAgICAi
aW1wb3J0IHB1YmxpYyBcImJhci5wcm90b1wiO1xuIgotICAgICJpbXBvcnQgXCJiYXoucHJvdG9c
IjtcbiIKLSAgICAiaW1wb3J0IHB1YmxpYyBcInF1eC5wcm90b1wiO1xuIiwKLSAgICAiZGVwZW5k
ZW5jeTogXCJmb28ucHJvdG9cIiIKLSAgICAiZGVwZW5kZW5jeTogXCJiYXIucHJvdG9cIiIKLSAg
ICAiZGVwZW5kZW5jeTogXCJiYXoucHJvdG9cIiIKLSAgICAiZGVwZW5kZW5jeTogXCJxdXgucHJv
dG9cIiIKLSAgICAicHVibGljX2RlcGVuZGVuY3k6IDEgIgotICAgICJwdWJsaWNfZGVwZW5kZW5j
eTogMyAiKTsKLX0KLQotVEVTVF9GKFBhcnNlTWlzY1Rlc3QsIFBhcnNlUGFja2FnZSkgewotICBF
eHBlY3RQYXJzZXNUbygKLSAgICAicGFja2FnZSBmb28uYmFyLmJhejtcbiIsCi0gICAgInBhY2th
Z2U6IFwiZm9vLmJhci5iYXpcIiIpOwotfQotCi1URVNUX0YoUGFyc2VNaXNjVGVzdCwgUGFyc2VQ
YWNrYWdlV2l0aFNwYWNlcykgewotICBFeHBlY3RQYXJzZXNUbygKLSAgICAicGFja2FnZSBmb28g
ICAuICAgYmFyLiAgXG4iCi0gICAgIiAgYmF6O1xuIiwKLSAgICAicGFja2FnZTogXCJmb28uYmFy
LmJhelwiIik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIG9wdGlvbnMKLQotVEVTVF9GKFBhcnNl
TWlzY1Rlc3QsIFBhcnNlRmlsZU9wdGlvbnMpIHsKLSAgRXhwZWN0UGFyc2VzVG8oCi0gICAgIm9w
dGlvbiBqYXZhX3BhY2thZ2UgPSBcImNvbS5nb29nbGUuZm9vXCI7XG4iCi0gICAgIm9wdGlvbiBv
cHRpbWl6ZV9mb3IgPSBDT0RFX1NJWkU7IiwKLQotICAgICJvcHRpb25zIHsiCi0gICAgInVuaW50
ZXJwcmV0ZWRfb3B0aW9uIHsgbmFtZSB7IG5hbWVfcGFydDogXCJqYXZhX3BhY2thZ2VcIiAiCi0g
ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogZmFsc2UgfSIK
LSAgICAiICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfdmFsdWU6IFwiY29tLmdvb2dsZS5m
b29cIn0gIgotICAgICJ1bmludGVycHJldGVkX29wdGlvbiB7IG5hbWUgeyBuYW1lX3BhcnQ6IFwi
b3B0aW1pemVfZm9yXCIgIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19l
eHRlbnNpb246IGZhbHNlIH0iCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmll
cl92YWx1ZTogXCJDT0RFX1NJWkVcIiB9ICIKLSAgICAifSIpOwotfQotCi0vLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0vLyBFcnJvciB0ZXN0cwotLy8KLS8vIFRoZXJlIGFyZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9m
IHBvc3NpYmxlIGVycm9ycyB0aGF0IHRoZSBwYXJzZXIgY291bGQKLS8vIHJlcG9ydCwgc28gaXQn
cyBpbmZlYXNpYmxlIHRvIHRlc3QgZXZlcnkgc2luZ2xlIG9uZSBvZiB0aGVtLiAgSW5zdGVhZCwK
LS8vIHdlIHRlc3QgZWFjaCB1bmlxdWUgY2FsbCB0byBBZGRFcnJvcigpIGluIHBhcnNlci5oLiAg
VGhpcyBkb2VzIG5vdCBtZWFuCi0vLyB3ZSBhcmUgdGVzdGluZyBldmVyeSBwb3NzaWJsZSBlcnJv
ciB0aGF0IFBhcnNlciBjYW4gZ2VuZXJhdGUgYmVjYXVzZQotLy8gZWFjaCB2YXJpYW50IG9mIHRo
ZSBDb25zdW1lKCkgaGVscGVyIG9ubHkgY291bnRzIGFzIG9uZSB1bmlxdWUgY2FsbCB0bwotLy8g
QWRkRXJyb3IoKS4KLQotdHlwZWRlZiBQYXJzZXJUZXN0IFBhcnNlRXJyb3JUZXN0OwotCi1URVNU
X0YoUGFyc2VFcnJvclRlc3QsIE1pc3NpbmdTeW50YXhJZGVudGlmaWVyKSB7Ci0gIHJlcXVpcmVf
c3ludGF4X2lkZW50aWZpZXJfID0gdHJ1ZTsKLSAgRXhwZWN0SGFzRWFybHlFeGl0RXJyb3JzKCJt
ZXNzYWdlIFRlc3RNZXNzYWdlIHt9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIwOjA6
IEZpbGUgbXVzdCBiZWdpbiB3aXRoIGEgc3ludGF4IHN0YXRlbWVudCwgZS5nLiAiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAiJ3N5bnRheCA9IFwicHJvdG8yXCI7Jy5cbiIpOwotICBFWFBF
Q1RfRVEoIiIsIHBhcnNlcl8tPkdldFN5bnRheElkZW50aWZpZXIoKSk7Ci19Ci0KLVRFU1RfRihQ
YXJzZUVycm9yVGVzdCwgVW5rbm93blN5bnRheElkZW50aWZpZXIpIHsKLSAgRXhwZWN0SGFzRWFy
bHlFeGl0RXJyb3JzKAotICAgICJzeW50YXggPSBcIm5vX3N1Y2hfc3ludGF4XCI7IiwKLSAgICAi
MDo5OiBVbnJlY29nbml6ZWQgc3ludGF4IGlkZW50aWZpZXIgXCJub19zdWNoX3N5bnRheFwiLiAg
VGhpcyBwYXJzZXIgIgotICAgICAgIm9ubHkgcmVjb2duaXplcyBcInByb3RvMlwiIGFuZCBcInBy
b3RvM1wiLlxuIik7Ci0gIEVYUEVDVF9FUSgibm9fc3VjaF9zeW50YXgiLCBwYXJzZXJfLT5HZXRT
eW50YXhJZGVudGlmaWVyKCkpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIFNpbXBsZVN5
bnRheEVycm9yKSB7Ci0gIEV4cGVjdEhhc0Vycm9ycygKLSAgICAibWVzc2FnZSBUZXN0TWVzc2Fn
ZSBAIyQgeyBibGFoIH0iLAotICAgICIwOjIwOiBFeHBlY3RlZCBcIntcIi5cbiIpOwotICBFWFBF
Q1RfRVEoInByb3RvMiIsIHBhcnNlcl8tPkdldFN5bnRheElkZW50aWZpZXIoKSk7Ci19Ci0KLVRF
U1RfRihQYXJzZUVycm9yVGVzdCwgRXhwZWN0ZWRUb3BMZXZlbCkgewotICBFeHBlY3RIYXNFcnJv
cnMoCi0gICAgImJsYWg7IiwKLSAgICAiMDowOiBFeHBlY3RlZCB0b3AtbGV2ZWwgc3RhdGVtZW50
IChlLmcuIFwibWVzc2FnZVwiKS5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIFVu
bWF0Y2hlZENsb3NlQnJhY2UpIHsKLSAgLy8gVGhpcyB1c2VkIHRvIGNhdXNlIGFuIGluZmluaXRl
IGxvb3AuICBEb2guCi0gIEV4cGVjdEhhc0Vycm9ycygKLSAgICAifSIsCi0gICAgIjA6MDogRXhw
ZWN0ZWQgdG9wLWxldmVsIHN0YXRlbWVudCAoZS5nLiBcIm1lc3NhZ2VcIikuXG4iCi0gICAgIjA6
MDogVW5tYXRjaGVkIFwifVwiLlxuIik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1lc3NhZ2Ug
ZXJyb3JzCi0KLVRFU1RfRihQYXJzZUVycm9yVGVzdCwgTWVzc2FnZU1pc3NpbmdOYW1lKSB7Ci0g
IEV4cGVjdEhhc0Vycm9ycygKLSAgICAibWVzc2FnZSB7fSIsCi0gICAgIjA6ODogRXhwZWN0ZWQg
bWVzc2FnZSBuYW1lLlxuIik7Ci19Ci0KLVRFU1RfRihQYXJzZUVycm9yVGVzdCwgTWVzc2FnZU1p
c3NpbmdCb2R5KSB7Ci0gIEV4cGVjdEhhc0Vycm9ycygKLSAgICAibWVzc2FnZSBUZXN0TWVzc2Fn
ZTsiLAotICAgICIwOjE5OiBFeHBlY3RlZCBcIntcIi5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VF
cnJvclRlc3QsIEVvZkluTWVzc2FnZSkgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgIm1lc3Nh
Z2UgVGVzdE1lc3NhZ2UgeyIsCi0gICAgIjA6MjE6IFJlYWNoZWQgZW5kIG9mIGlucHV0IGluIG1l
c3NhZ2UgZGVmaW5pdGlvbiAobWlzc2luZyAnfScpLlxuIik7Ci19Ci0KLVRFU1RfRihQYXJzZUVy
cm9yVGVzdCwgTWlzc2luZ0ZpZWxkTnVtYmVyKSB7Ci0gIEV4cGVjdEhhc0Vycm9ycygKLSAgICAi
bWVzc2FnZSBUZXN0TWVzc2FnZSB7XG4iCi0gICAgIiAgb3B0aW9uYWwgaW50MzIgZm9vO1xuIgot
ICAgICJ9XG4iLAotICAgICIxOjIwOiBNaXNzaW5nIGZpZWxkIG51bWJlci5cbiIpOwotfQotCi1U
RVNUX0YoUGFyc2VFcnJvclRlc3QsIEV4cGVjdGVkRmllbGROdW1iZXIpIHsKLSAgRXhwZWN0SGFz
RXJyb3JzKAotICAgICJtZXNzYWdlIFRlc3RNZXNzYWdlIHtcbiIKLSAgICAiICBvcHRpb25hbCBp
bnQzMiBmb28gPSA7XG4iCi0gICAgIn1cbiIsCi0gICAgIjE6MjM6IEV4cGVjdGVkIGZpZWxkIG51
bWJlci5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIEZpZWxkTnVtYmVyT3V0T2ZS
YW5nZSkgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xu
IgotICAgICIgIG9wdGlvbmFsIGludDMyIGZvbyA9IDB4MTAwMDAwMDAwO1xuIgotICAgICJ9XG4i
LAotICAgICIxOjIzOiBJbnRlZ2VyIG91dCBvZiByYW5nZS5cbiIpOwotfQotCi1URVNUX0YoUGFy
c2VFcnJvclRlc3QsIE1pc3NpbmdMYWJlbCkgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgIm1l
c3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIGludDMyIGZvbyA9IDE7XG4iCi0gICAgIn1c
biIsCi0gICAgIjE6MjogRXhwZWN0ZWQgXCJyZXF1aXJlZFwiLCBcIm9wdGlvbmFsXCIsIG9yIFwi
cmVwZWF0ZWRcIi5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIEV4cGVjdGVkT3B0
aW9uTmFtZSkgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Ug
e1xuIgotICAgICIgIG9wdGlvbmFsIHVpbnQzMiBmb28gPSAxIFtdO1xuIgotICAgICJ9XG4iLAot
ICAgICIxOjI3OiBFeHBlY3RlZCBpZGVudGlmaWVyLlxuIik7Ci19Ci0KLVRFU1RfRihQYXJzZUVy
cm9yVGVzdCwgTm9uRXh0ZW5zaW9uT3B0aW9uTmFtZUJlZ2lubmluZ1dpdGhEb3QpIHsKLSAgRXhw
ZWN0SGFzRXJyb3JzKAotICAgICJtZXNzYWdlIFRlc3RNZXNzYWdlIHtcbiIKLSAgICAiICBvcHRp
b25hbCB1aW50MzIgZm9vID0gMSBbLmZvbz0xXTtcbiIKLSAgICAifVxuIiwKLSAgICAiMToyNzog
RXhwZWN0ZWQgaWRlbnRpZmllci5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIERl
ZmF1bHRWYWx1ZVR5cGVNaXNtYXRjaCkgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgIm1lc3Nh
Z2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIG9wdGlvbmFsIHVpbnQzMiBmb28gPSAxIFtkZWZh
dWx0PXRydWVdO1xuIgotICAgICJ9XG4iLAotICAgICIxOjM1OiBFeHBlY3RlZCBpbnRlZ2VyIGZv
ciBmaWVsZCBkZWZhdWx0IHZhbHVlLlxuIik7Ci19Ci0KLVRFU1RfRihQYXJzZUVycm9yVGVzdCwg
RGVmYXVsdFZhbHVlTm90Qm9vbGVhbikgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgIm1lc3Nh
Z2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIG9wdGlvbmFsIGJvb2wgZm9vID0gMSBbZGVmYXVs
dD1ibGFoXTtcbiIKLSAgICAifVxuIiwKLSAgICAiMTozMzogRXhwZWN0ZWQgXCJ0cnVlXCIgb3Ig
XCJmYWxzZVwiLlxuIik7Ci19Ci0KLVRFU1RfRihQYXJzZUVycm9yVGVzdCwgRGVmYXVsdFZhbHVl
Tm90U3RyaW5nKSB7Ci0gIEV4cGVjdEhhc0Vycm9ycygKLSAgICAibWVzc2FnZSBUZXN0TWVzc2Fn
ZSB7XG4iCi0gICAgIiAgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDEgW2RlZmF1bHQ9MV07XG4iCi0g
ICAgIn1cbiIsCi0gICAgIjE6MzU6IEV4cGVjdGVkIHN0cmluZyBmb3IgZmllbGQgZGVmYXVsdCB2
YWx1ZS5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIERlZmF1bHRWYWx1ZVVuc2ln
bmVkTmVnYXRpdmUpIHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJtZXNzYWdlIFRlc3RNZXNz
YWdlIHtcbiIKLSAgICAiICBvcHRpb25hbCB1aW50MzIgZm9vID0gMSBbZGVmYXVsdD0tMV07XG4i
Ci0gICAgIn1cbiIsCi0gICAgIjE6MzY6IFVuc2lnbmVkIGZpZWxkIGNhbid0IGhhdmUgbmVnYXRp
dmUgZGVmYXVsdCB2YWx1ZS5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIERlZmF1
bHRWYWx1ZVRvb0xhcmdlKSB7Ci0gIEV4cGVjdEhhc0Vycm9ycygKLSAgICAibWVzc2FnZSBUZXN0
TWVzc2FnZSB7XG4iCi0gICAgIiAgb3B0aW9uYWwgaW50MzIgIGZvbyA9IDEgW2RlZmF1bHQ9IDB4
ODAwMDAwMDBdO1xuIgotICAgICIgIG9wdGlvbmFsIGludDMyICBmb28gPSAxIFtkZWZhdWx0PS0w
eDgwMDAwMDAxXTtcbiIKLSAgICAiICBvcHRpb25hbCB1aW50MzIgZm9vID0gMSBbZGVmYXVsdD0g
MHgxMDAwMDAwMDBdO1xuIgotICAgICIgIG9wdGlvbmFsIGludDY0ICBmb28gPSAxIFtkZWZhdWx0
PSAweDgwMDAwMDAwMDAwMDAwMDAwXTtcbiIKLSAgICAiICBvcHRpb25hbCBpbnQ2NCAgZm9vID0g
MSBbZGVmYXVsdD0tMHg4MDAwMDAwMDAwMDAwMDAwMV07XG4iCi0gICAgIiAgb3B0aW9uYWwgdWlu
dDY0IGZvbyA9IDEgW2RlZmF1bHQ9IDB4MTAwMDAwMDAwMDAwMDAwMDAwXTtcbiIKLSAgICAifVxu
IiwKLSAgICAiMTozNjogSW50ZWdlciBvdXQgb2YgcmFuZ2UuXG4iCi0gICAgIjI6MzY6IEludGVn
ZXIgb3V0IG9mIHJhbmdlLlxuIgotICAgICIzOjM2OiBJbnRlZ2VyIG91dCBvZiByYW5nZS5cbiIK
LSAgICAiNDozNjogSW50ZWdlciBvdXQgb2YgcmFuZ2UuXG4iCi0gICAgIjU6MzY6IEludGVnZXIg
b3V0IG9mIHJhbmdlLlxuIgotICAgICI2OjM2OiBJbnRlZ2VyIG91dCBvZiByYW5nZS5cbiIpOwot
fQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIEpzb25OYW1lTm90U3RyaW5nKSB7Ci0gIEV4cGVj
dEhhc0Vycm9ycygKLSAgICAibWVzc2FnZSBUZXN0TWVzc2FnZSB7XG4iCi0gICAgIiAgb3B0aW9u
YWwgc3RyaW5nIGZvbyA9IDEgW2pzb25fbmFtZT0xXTtcbiIKLSAgICAifVxuIiwKLSAgICAiMToz
NzogRXhwZWN0ZWQgc3RyaW5nIGZvciBKU09OIG5hbWUuXG4iKTsKLX0KLQotVEVTVF9GKFBhcnNl
RXJyb3JUZXN0LCBEdXBsaWNhdGVKc29uTmFtZSkgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAg
Im1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIG9wdGlvbmFsIHVpbnQzMiBmb28gPSAx
IFtqc29uX25hbWU9XCJhXCIsanNvbl9uYW1lPVwiYlwiXTtcbiIKLSAgICAifVxuIiwKLSAgICAi
MTo0MTogQWxyZWFkeSBzZXQgb3B0aW9uIFwianNvbl9uYW1lXCIuXG4iKTsKLX0KLQotVEVTVF9G
KFBhcnNlRXJyb3JUZXN0LCBFbnVtVmFsdWVPdXRPZlJhbmdlKSB7Ci0gIEV4cGVjdEhhc0Vycm9y
cygKLSAgICAiZW51bSBUZXN0RW51bSB7XG4iCi0gICAgIiAgSEVYX1RPT19CSUcgICA9ICAweDgw
MDAwMDAwO1xuIgotICAgICIgIEhFWF9UT09fU01BTEwgPSAtMHg4MDAwMDAwMTtcbiIKLSAgICAi
ICBJTlRfVE9PX0JJRyAgID0gIDIxNDc0ODM2NDg7XG4iCi0gICAgIiAgSU5UX1RPT19TTUFMTCA9
IC0yMTQ3NDgzNjQ5O1xuIgotICAgICJ9XG4iLAotICAgICIxOjE5OiBJbnRlZ2VyIG91dCBvZiBy
YW5nZS5cbiIKLSAgICAiMjoxOTogSW50ZWdlciBvdXQgb2YgcmFuZ2UuXG4iCi0gICAgIjM6MTk6
IEludGVnZXIgb3V0IG9mIHJhbmdlLlxuIgotICAgICI0OjE5OiBJbnRlZ2VyIG91dCBvZiByYW5n
ZS5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIEVudW1BbGxvd0FsaWFzRmFsc2Up
IHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJlbnVtIEZvbyB7XG4iCi0gICAgIiAgb3B0aW9u
IGFsbG93X2FsaWFzID0gZmFsc2U7XG4iCi0gICAgIiAgQkFSID0gMTtcbiIKLSAgICAiICBCQVog
PSAyO1xuIgotICAgICJ9XG4iLAotICAgICI1OjA6IFwiRm9vXCIgZGVjbGFyZXMgJ29wdGlvbiBh
bGxvd19hbGlhcyA9IGZhbHNlOycgd2hpY2ggaGFzIG5vIGVmZmVjdC4gIgotICAgICJQbGVhc2Ug
cmVtb3ZlIHRoZSBkZWNsYXJhdGlvbi5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3Qs
IFVubmVjZXNzYXJ5RW51bUFsbG93QWxpYXMpIHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJl
bnVtIEZvbyB7XG4iCi0gICAgIiAgb3B0aW9uIGFsbG93X2FsaWFzID0gdHJ1ZTtcbiIKLSAgICAi
ICBCQVIgPSAxO1xuIgotICAgICIgIEJBWiA9IDI7XG4iCi0gICAgIn1cbiIsCi0gICAgIjU6MDog
XCJGb29cIiBkZWNsYXJlcyBzdXBwb3J0IGZvciBlbnVtIGFsaWFzZXMgYnV0IG5vIGVudW0gdmFs
dWVzIHNoYXJlICIKLSAgICAiZmllbGQgbnVtYmVycy4gUGxlYXNlIHJlbW92ZSB0aGUgdW5uZWNl
c3NhcnkgJ29wdGlvbiBhbGxvd19hbGlhcyA9IHRydWU7JyAiCi0gICAgImRlY2xhcmF0aW9uLlxu
Iik7Ci19Ci0KLVRFU1RfRihQYXJzZUVycm9yVGVzdCwgRGVmYXVsdFZhbHVlTWlzc2luZykgewot
ICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIg
IG9wdGlvbmFsIHVpbnQzMiBmb28gPSAxIFtkZWZhdWx0PV07XG4iCi0gICAgIn1cbiIsCi0gICAg
IjE6MzU6IEV4cGVjdGVkIGludGVnZXIgZm9yIGZpZWxkIGRlZmF1bHQgdmFsdWUuXG4iKTsKLX0K
LQotVEVTVF9GKFBhcnNlRXJyb3JUZXN0LCBEZWZhdWx0VmFsdWVGb3JHcm91cCkgewotICBFeHBl
Y3RIYXNFcnJvcnMoCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIG9wdGlv
bmFsIGdyb3VwIEZvbyA9IDEgW2RlZmF1bHQ9YmxhaF0ge31cbiIKLSAgICAifVxuIiwKLSAgICAi
MTozNDogTWVzc2FnZXMgY2FuJ3QgaGF2ZSBkZWZhdWx0IHZhbHVlcy5cbiIpOwotfQotCi1URVNU
X0YoUGFyc2VFcnJvclRlc3QsIER1cGxpY2F0ZURlZmF1bHRWYWx1ZSkgewotICBFeHBlY3RIYXNF
cnJvcnMoCi0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIG9wdGlvbmFsIHVp
bnQzMiBmb28gPSAxIFtkZWZhdWx0PTEsZGVmYXVsdD0yXTtcbiIKLSAgICAifVxuIiwKLSAgICAi
MTozNzogQWxyZWFkeSBzZXQgb3B0aW9uIFwiZGVmYXVsdFwiLlxuIik7Ci19Ci0KLVRFU1RfRihQ
YXJzZUVycm9yVGVzdCwgTWlzc2luZ09uZW9mTmFtZSkgewotICBFeHBlY3RIYXNFcnJvcnMoCi0g
ICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIG9uZW9mIHtcbiIKLSAgICAiICAg
IGludDMyIGJhciA9IDE7XG4iCi0gICAgIiAgfVxuIgotICAgICJ9XG4iLAotICAgICIxOjg6IEV4
cGVjdGVkIG9uZW9mIG5hbWUuXG4iKTsKLX0KLQotVEVTVF9GKFBhcnNlRXJyb3JUZXN0LCBMYWJl
bEluT25lb2YpIHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJtZXNzYWdlIFRlc3RNZXNzYWdl
IHtcbiIKLSAgICAiICBvbmVvZiBmb28ge1xuIgotICAgICIgICAgb3B0aW9uYWwgaW50MzIgYmFy
ID0gMTtcbiIKLSAgICAiICB9XG4iCi0gICAgIn1cbiIsCi0gICAgIjI6NDogRmllbGRzIGluIG9u
ZW9mcyBtdXN0IG5vdCBoYXZlIGxhYmVscyAocmVxdWlyZWQgLyBvcHRpb25hbCAiCi0gICAgICAi
LyByZXBlYXRlZCkuXG4iKTsKLX0KLQotVEVTVF9GKFBhcnNlRXJyb3JUZXN0LCBNYXBJbk9uZW9m
KSB7Ci0gIEV4cGVjdEhhc0Vycm9ycygKLSAgICAibWVzc2FnZSBUZXN0TWVzc2FnZSB7XG4iCi0g
ICAgIiAgb25lb2YgZm9vIHtcbiIKLSAgICAiICAgIG1hcDxpbnQzMiwgaW50MzI+IGZvb19tYXAg
PSAxO1xuIgotICAgICIgICAgbWFwIG1lc3NhZ2VfZmllbGQgPSAyO1xuIiAgLy8gYSBub3JtYWwg
bWVzc2FnZSBmaWVsZCBpcyBPSwotICAgICIgIH1cbiIKLSAgICAifVxuIiwKLSAgICAiMjo3OiBN
YXAgZmllbGRzIGFyZSBub3QgYWxsb3dlZCBpbiBvbmVvZnMuXG4iKTsKLX0KLQotVEVTVF9GKFBh
cnNlRXJyb3JUZXN0LCBMYWJlbEZvck1hcCkgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgIm1l
c3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIG9wdGlvbmFsIG1hcDxpbnQzMiwgaW50MzI+
IGludF9tYXAgPSAxO1xuIgotICAgICIgIHJlcXVpcmVkIG1hcDxpbnQzMiwgaW50MzI+IGludF9t
YXAyID0gMjtcbiIKLSAgICAiICByZXBlYXRlZCBtYXA8aW50MzIsIGludDMyPiBpbnRfbWFwMyA9
IDM7XG4iCi0gICAgIiAgb3B0aW9uYWwgbWFwIG1hcF9tZXNzYWdlID0gNDtcbiIgIC8vIGEgbm9y
bWFsIG1lc3NhZ2UgZmllbGQgaXMgT0sKLSAgICAifVxuIiwKLSAgICAiMToxNDogRmllbGQgbGFi
ZWxzIChyZXF1aXJlZC9vcHRpb25hbC9yZXBlYXRlZCkgYXJlIG5vdCBhbGxvd2VkIG9uIG1hcCAi
Ci0gICAgImZpZWxkcy5cbiIKLSAgICAiMjoxNDogRmllbGQgbGFiZWxzIChyZXF1aXJlZC9vcHRp
b25hbC9yZXBlYXRlZCkgYXJlIG5vdCBhbGxvd2VkIG9uIG1hcCAiCi0gICAgImZpZWxkcy5cbiIK
LSAgICAiMzoxNDogRmllbGQgbGFiZWxzIChyZXF1aXJlZC9vcHRpb25hbC9yZXBlYXRlZCkgYXJl
IG5vdCBhbGxvd2VkIG9uIG1hcCAiCi0gICAgImZpZWxkcy5cbiIpOwotfQotCi1URVNUX0YoUGFy
c2VFcnJvclRlc3QsIE1hbGZvcm1lZE1hcHMpIHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJt
ZXNzYWdlIFRlc3RNZXNzYWdlIHtcbiIKLSAgICAiICBtYXAgbWFwX21lc3NhZ2UgPSAxO1xuIiAg
IC8vIGEgbm9ybWFsIG1lc3NhZ2UgZmllbGQgbGFja2luZyBsYWJlbAotICAgICIgIG1hcDxzdHJp
bmc+IHN0cl9tYXAgPSAyO1xuIgotICAgICIgIG1hcDxzdHJpbmcsPiBzdHJfbWFwMiA9IDM7XG4i
Ci0gICAgIiAgbWFwPCxzdHJpbmc+IHN0cl9tYXAzID0gNDtcbiIKLSAgICAiICBtYXA8PiBlbXB0
eV9tYXAgPSA1O1xuIgotICAgICIgIG1hcDxzdHJpbmcsc3RyaW5nIHN0cl9tYXA2ID0gNjtcbiIK
LSAgICAifSIKLSAgICAiZXh0ZW5kIFNvbWVNZXNzYWdlIHtcbiIKLSAgICAiICBtYXA8aW50MzIs
IGludDMyPiBpbnRfbWFwID0gMTtcbiIKLSAgICAifSIsCi0gICAgIjE6NjogRXhwZWN0ZWQgXCJy
ZXF1aXJlZFwiLCBcIm9wdGlvbmFsXCIsIG9yIFwicmVwZWF0ZWRcIi5cbiIKLSAgICAiMjoxMjog
RXhwZWN0ZWQgXCIsXCIuXG4iCi0gICAgIjM6MTM6IEV4cGVjdGVkIHR5cGUgbmFtZS5cbiIKLSAg
ICAiNDo2OiBFeHBlY3RlZCB0eXBlIG5hbWUuXG4iCi0gICAgIjU6NjogRXhwZWN0ZWQgdHlwZSBu
YW1lLlxuIgotICAgICI2OjIwOiBFeHBlY3RlZCBcIj5cIi5cbiIKLSAgICAiODo1OiBNYXAgZmll
bGRzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBleHRlbnNpb25zLlxuIik7Ci19Ci0KLVRFU1RfRihQ
YXJzZUVycm9yVGVzdCwgR3JvdXBOb3RDYXBpdGFsaXplZCkgewotICBFeHBlY3RIYXNFcnJvcnMo
Ci0gICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICIgIG9wdGlvbmFsIGdyb3VwIGZv
byA9IDEge31cbiIKLSAgICAifVxuIiwKLSAgICAiMToxNzogR3JvdXAgbmFtZXMgbXVzdCBzdGFy
dCB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuXG4iKTsKLX0KLQotVEVTVF9GKFBhcnNlRXJyb3JUZXN0
LCBHcm91cE1pc3NpbmdCb2R5KSB7Ci0gIEV4cGVjdEhhc0Vycm9ycygKLSAgICAibWVzc2FnZSBU
ZXN0TWVzc2FnZSB7XG4iCi0gICAgIiAgb3B0aW9uYWwgZ3JvdXAgRm9vID0gMTtcbiIKLSAgICAi
fVxuIiwKLSAgICAiMToyNDogTWlzc2luZyBncm91cCBib2R5LlxuIik7Ci19Ci0KLVRFU1RfRihQ
YXJzZUVycm9yVGVzdCwgRXh0ZW5kaW5nUHJpbWl0aXZlKSB7Ci0gIEV4cGVjdEhhc0Vycm9ycygK
LSAgICAiZXh0ZW5kIGludDMyIHsgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDQ7IH1cbiIsCi0gICAg
IjA6NzogRXhwZWN0ZWQgbWVzc2FnZSB0eXBlLlxuIik7Ci19Ci0KLVRFU1RfRihQYXJzZUVycm9y
VGVzdCwgRXJyb3JJbkV4dGVuc2lvbikgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgIm1lc3Nh
Z2UgRm9vIHsgZXh0ZW5zaW9ucyAxMDAgdG8gMTk5OyB9XG4iCi0gICAgImV4dGVuZCBGb28geyBv
cHRpb25hbCBzdHJpbmcgZm9vOyB9XG4iLAotICAgICIxOjMyOiBNaXNzaW5nIGZpZWxkIG51bWJl
ci5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIE11bHRpcGxlUGFyc2VFcnJvcnMp
IHsKLSAgLy8gV2hlbiBhIHN0YXRlbWVudCBoYXMgYSBwYXJzZSBlcnJvciwgdGhlIHBhcnNlciBz
aG91bGQgYmUgYWJsZSB0byBjb250aW51ZQotICAvLyBwYXJzaW5nIGF0IHRoZSBuZXh0IHN0YXRl
bWVudC4KLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJtZXNzYWdlIFRlc3RNZXNzYWdlIHtcbiIK
LSAgICAiICBvcHRpb25hbCBpbnQzMiBmb287XG4iCi0gICAgIiAgIWludmFsaWQgc3RhdGVtZW50
IGVuZGluZyBpbiBhIGJsb2NrIHsgYmxhaCBibGFoIHsgYmxhaCB9IGJsYWggfVxuIgotICAgICIg
IG9wdGlvbmFsIGludDMyIGJhciA9IDMge31cbiIKLSAgICAifVxuIiwKLSAgICAiMToyMDogTWlz
c2luZyBmaWVsZCBudW1iZXIuXG4iCi0gICAgIjI6MjogRXhwZWN0ZWQgXCJyZXF1aXJlZFwiLCBc
Im9wdGlvbmFsXCIsIG9yIFwicmVwZWF0ZWRcIi5cbiIKLSAgICAiMjoyOiBFeHBlY3RlZCB0eXBl
IG5hbWUuXG4iCi0gICAgIjM6MjU6IEV4cGVjdGVkIFwiO1wiLlxuIik7Ci19Ci0KLVRFU1RfRihQ
YXJzZUVycm9yVGVzdCwgRW9mSW5BZ2dyZWdhdGVWYWx1ZSkgewotICBFeHBlY3RIYXNFcnJvcnMo
Ci0gICAgICAib3B0aW9uIChmaWxlb3B0KSA9IHsgaToxMDBcbiIsCi0gICAgICAiMTowOiBVbmV4
cGVjdGVkIGVuZCBvZiBzdHJlYW0gd2hpbGUgcGFyc2luZyBhZ2dyZWdhdGUgdmFsdWUuXG4iKTsK
LX0KLQotVEVTVF9GKFBhcnNlRXJyb3JUZXN0LCBFeHBsaWNpdE9wdGlvbmFsTGFiZWxQcm90bzMp
IHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICAgInN5bnRheCA9ICdwcm90bzMnO1xuIgotICAg
ICAgIm1lc3NhZ2UgVGVzdE1lc3NhZ2Uge1xuIgotICAgICAgIiAgb3B0aW9uYWwgaW50MzIgZm9v
ID0gMTtcbiIKLSAgICAgICJ9XG4iLAotICAgICAgIjI6MTE6IEV4cGxpY2l0ICdvcHRpb25hbCcg
bGFiZWxzIGFyZSBkaXNhbGxvd2VkIGluIHRoZSBQcm90bzMgc3ludGF4LiAiCi0gICAgICAiVG8g
ZGVmaW5lICdvcHRpb25hbCcgZmllbGRzIGluIFByb3RvMywgc2ltcGx5IHJlbW92ZSB0aGUgJ29w
dGlvbmFsJyAiCi0gICAgICAibGFiZWwsIGFzIGZpZWxkcyBhcmUgJ29wdGlvbmFsJyBieSBkZWZh
dWx0LlxuIik7Ci19Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRW51bSBlcnJvcnMKLQotVEVTVF9G
KFBhcnNlRXJyb3JUZXN0LCBFb2ZJbkVudW0pIHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJl
bnVtIFRlc3RFbnVtIHsiLAotICAgICIwOjE1OiBSZWFjaGVkIGVuZCBvZiBpbnB1dCBpbiBlbnVt
IGRlZmluaXRpb24gKG1pc3NpbmcgJ30nKS5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VFcnJvclRl
c3QsIEVudW1WYWx1ZU1pc3NpbmdOdW1iZXIpIHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJl
bnVtIFRlc3RFbnVtIHtcbiIKLSAgICAiICBGT087XG4iCi0gICAgIn1cbiIsCi0gICAgIjE6NTog
TWlzc2luZyBudW1lcmljIHZhbHVlIGZvciBlbnVtIGNvbnN0YW50LlxuIik7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIFJlc2VydmVkIGZpZWxkIG51bWJlciBlcnJvcnMKLQotVEVTVF9GKFBhcnNl
RXJyb3JUZXN0LCBSZXNlcnZlZE1heE5vdEFsbG93ZWQpIHsKLSAgRXhwZWN0SGFzRXJyb3JzKAot
ICAgICJtZXNzYWdlIEZvbyB7XG4iCi0gICAgIiAgcmVzZXJ2ZWQgMTAgdG8gbWF4O1xuIgotICAg
ICJ9XG4iLAotICAgICIxOjE3OiBFeHBlY3RlZCBpbnRlZ2VyLlxuIik7Ci19Ci0KLVRFU1RfRihQ
YXJzZUVycm9yVGVzdCwgUmVzZXJ2ZWRNaXhOYW1lQW5kTnVtYmVyKSB7Ci0gIEV4cGVjdEhhc0Vy
cm9ycygKLSAgICAibWVzc2FnZSBGb28ge1xuIgotICAgICIgIHJlc2VydmVkIDEwLCBcImZvb1wi
O1xuIgotICAgICJ9XG4iLAotICAgICIxOjE1OiBFeHBlY3RlZCBmaWVsZCBudW1iZXIgcmFuZ2Uu
XG4iKTsKLX0KLQotVEVTVF9GKFBhcnNlRXJyb3JUZXN0LCBSZXNlcnZlZE1pc3NpbmdRdW90ZXMp
IHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJtZXNzYWdlIEZvbyB7XG4iCi0gICAgIiAgcmVz
ZXJ2ZWQgZm9vO1xuIgotICAgICJ9XG4iLAotICAgICIxOjExOiBFeHBlY3RlZCBmaWVsZCBuYW1l
IG9yIG51bWJlciByYW5nZS5cbiIpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTZXJ2aWNlIGVy
cm9ycwotCi1URVNUX0YoUGFyc2VFcnJvclRlc3QsIEVvZkluU2VydmljZSkgewotICBFeHBlY3RI
YXNFcnJvcnMoCi0gICAgInNlcnZpY2UgVGVzdFNlcnZpY2UgeyIsCi0gICAgIjA6MjE6IFJlYWNo
ZWQgZW5kIG9mIGlucHV0IGluIHNlcnZpY2UgZGVmaW5pdGlvbiAobWlzc2luZyAnfScpLlxuIik7
Ci19Ci0KLVRFU1RfRihQYXJzZUVycm9yVGVzdCwgU2VydmljZU1ldGhvZFByaW1pdGl2ZVBhcmFt
cykgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgInNlcnZpY2UgVGVzdFNlcnZpY2Uge1xuIgot
ICAgICIgIHJwYyBGb28oaW50MzIpIHJldHVybnMgKHN0cmluZyk7XG4iCi0gICAgIn1cbiIsCi0g
ICAgIjE6MTA6IEV4cGVjdGVkIG1lc3NhZ2UgdHlwZS5cbiIKLSAgICAiMToyNjogRXhwZWN0ZWQg
bWVzc2FnZSB0eXBlLlxuIik7Ci19Ci0KLQotVEVTVF9GKFBhcnNlRXJyb3JUZXN0LCBFb2ZJbk1l
dGhvZE9wdGlvbnMpIHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJzZXJ2aWNlIFRlc3RTZXJ2
aWNlIHtcbiIKLSAgICAiICBycGMgRm9vKEJhcikgcmV0dXJucyhCYXIpIHsiLAotICAgICIxOjI5
OiBSZWFjaGVkIGVuZCBvZiBpbnB1dCBpbiBtZXRob2Qgb3B0aW9ucyAobWlzc2luZyAnfScpLlxu
IgotICAgICIxOjI5OiBSZWFjaGVkIGVuZCBvZiBpbnB1dCBpbiBzZXJ2aWNlIGRlZmluaXRpb24g
KG1pc3NpbmcgJ30nKS5cbiIpOwotfQotCi0KLVRFU1RfRihQYXJzZUVycm9yVGVzdCwgUHJpbWl0
aXZlTWV0aG9kSW5wdXQpIHsKLSAgRXhwZWN0SGFzRXJyb3JzKAotICAgICJzZXJ2aWNlIFRlc3RT
ZXJ2aWNlIHtcbiIKLSAgICAiICBycGMgRm9vKGludDMyKSByZXR1cm5zKEJhcik7XG4iCi0gICAg
In1cbiIsCi0gICAgIjE6MTA6IEV4cGVjdGVkIG1lc3NhZ2UgdHlwZS5cbiIpOwotfQotCi0KLVRF
U1RfRihQYXJzZUVycm9yVGVzdCwgTWV0aG9kT3B0aW9uVHlwZUVycm9yKSB7Ci0gIC8vIFRoaXMg
dXNlZCB0byBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLgotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAg
Im1lc3NhZ2UgQmF6IHt9XG4iCi0gICAgInNlcnZpY2UgRm9vIHtcbiIKLSAgICAiICBycGMgQmFy
KEJheikgcmV0dXJucyhCYXopIHsgb3B0aW9uIGludmFsaWQgc3ludGF4OyB9XG4iCi0gICAgIn1c
biIsCi0gICAgIjI6NDU6IEV4cGVjdGVkIFwiPVwiLlxuIik7Ci19Ci0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8gSW1wb3J0IGFuZCBwYWNrYWdlIGVycm9ycwotCi1URVNUX0YoUGFyc2VFcnJvclRlc3Qs
IEltcG9ydE5vdFF1b3RlZCkgewotICBFeHBlY3RIYXNFcnJvcnMoCi0gICAgImltcG9ydCBmb287
XG4iLAotICAgICIwOjc6IEV4cGVjdGVkIGEgc3RyaW5nIG5hbWluZyB0aGUgZmlsZSB0byBpbXBv
cnQuXG4iKTsKLX0KLQotVEVTVF9GKFBhcnNlRXJyb3JUZXN0LCBNdWx0aXBsZVBhY2thZ2VzSW5G
aWxlKSB7Ci0gIEV4cGVjdEhhc0Vycm9ycygKLSAgICAicGFja2FnZSBmb287XG4iCi0gICAgInBh
Y2thZ2UgYmFyO1xuIiwKLSAgICAiMTowOiBNdWx0aXBsZSBwYWNrYWdlIGRlZmluaXRpb25zLlxu
Iik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFRlc3QgdGhhdCBlcnJvcnMgZGV0ZWN0ZWQgYnkg
RGVzY3JpcHRvclBvb2wgY29ycmVjdGx5IHJlcG9ydCBsaW5lIGFuZAotLy8gY29sdW1uIG51bWJl
cnMuICBXZSBoYXZlIG9uZSB0ZXN0IGZvciBldmVyeSBjYWxsIHRvIFJlY29yZExvY2F0aW9uKCkg
aW4KLS8vIHBhcnNlci5jYy4KLQotdHlwZWRlZiBQYXJzZXJUZXN0IFBhcnNlclZhbGlkYXRpb25F
cnJvclRlc3Q7Ci0KLVRFU1RfRihQYXJzZXJWYWxpZGF0aW9uRXJyb3JUZXN0LCBQYWNrYWdlTmFt
ZUVycm9yKSB7Ci0gIC8vIENyZWF0ZSBhbm90aGVyIGZpbGUgd2hpY2ggZGVmaW5lcyBzeW1ib2wg
ImZvbyIuCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gb3RoZXJfZmlsZTsKLSAgb3RoZXJfZmlsZS5z
ZXRfbmFtZSgiYmFyLnByb3RvIik7Ci0gIG90aGVyX2ZpbGUuYWRkX21lc3NhZ2VfdHlwZSgpLT5z
ZXRfbmFtZSgiZm9vIik7Ci0gIEVYUEVDVF9UUlVFKHBvb2xfLkJ1aWxkRmlsZShvdGhlcl9maWxl
KSAhPSBOVUxMKTsKLQotICAvLyBOb3cgdHJ5IHRvIGRlZmluZSBpdCBhcyBhIHBhY2thZ2UuCi0g
IEV4cGVjdEhhc1ZhbGlkYXRpb25FcnJvcnMoCi0gICAgInBhY2thZ2UgZm9vLmJhcjsiLAotICAg
ICIwOjg6IFwiZm9vXCIgaXMgYWxyZWFkeSBkZWZpbmVkIChhcyBzb21ldGhpbmcgb3RoZXIgdGhh
biBhIHBhY2thZ2UpICIKLSAgICAgICJpbiBmaWxlIFwiYmFyLnByb3RvXCIuXG4iKTsKLX0KLQot
VEVTVF9GKFBhcnNlclZhbGlkYXRpb25FcnJvclRlc3QsIE1lc3NhZ2VOYW1lRXJyb3IpIHsKLSAg
RXhwZWN0SGFzVmFsaWRhdGlvbkVycm9ycygKLSAgICAibWVzc2FnZSBGb28ge31cbiIKLSAgICAi
bWVzc2FnZSBGb28ge31cbiIsCi0gICAgIjE6ODogXCJGb29cIiBpcyBhbHJlYWR5IGRlZmluZWQu
XG4iKTsKLX0KLQotVEVTVF9GKFBhcnNlclZhbGlkYXRpb25FcnJvclRlc3QsIEZpZWxkTmFtZUVy
cm9yKSB7Ci0gIEV4cGVjdEhhc1ZhbGlkYXRpb25FcnJvcnMoCi0gICAgIm1lc3NhZ2UgRm9vIHtc
biIKLSAgICAiICBvcHRpb25hbCBpbnQzMiBiYXIgPSAxO1xuIgotICAgICIgIG9wdGlvbmFsIGlu
dDMyIGJhciA9IDI7XG4iCi0gICAgIn1cbiIsCi0gICAgIjI6MTc6IFwiYmFyXCIgaXMgYWxyZWFk
eSBkZWZpbmVkIGluIFwiRm9vXCIuXG4iKTsKLX0KLQotVEVTVF9GKFBhcnNlclZhbGlkYXRpb25F
cnJvclRlc3QsIEZpZWxkVHlwZUVycm9yKSB7Ci0gIEV4cGVjdEhhc1ZhbGlkYXRpb25FcnJvcnMo
Ci0gICAgIm1lc3NhZ2UgRm9vIHtcbiIKLSAgICAiICBvcHRpb25hbCBCYXogYmFyID0gMTtcbiIK
LSAgICAifVxuIiwKLSAgICAiMToxMTogXCJCYXpcIiBpcyBub3QgZGVmaW5lZC5cbiIpOwotfQot
Ci1URVNUX0YoUGFyc2VyVmFsaWRhdGlvbkVycm9yVGVzdCwgRmllbGROdW1iZXJFcnJvcikgewot
ICBFeHBlY3RIYXNWYWxpZGF0aW9uRXJyb3JzKAotICAgICJtZXNzYWdlIEZvbyB7XG4iCi0gICAg
IiAgb3B0aW9uYWwgaW50MzIgYmFyID0gMDtcbiIKLSAgICAifVxuIiwKLSAgICAiMToyMzogRmll
bGQgbnVtYmVycyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzLlxuIik7Ci19Ci0KLVRFU1RfRihQ
YXJzZXJWYWxpZGF0aW9uRXJyb3JUZXN0LCBGaWVsZEV4dGVuZGVlRXJyb3IpIHsKLSAgRXhwZWN0
SGFzVmFsaWRhdGlvbkVycm9ycygKLSAgICAiZXh0ZW5kIEJheiB7IG9wdGlvbmFsIGludDMyIGJh
ciA9IDE7IH1cbiIsCi0gICAgIjA6NzogXCJCYXpcIiBpcyBub3QgZGVmaW5lZC5cbiIpOwotfQot
Ci1URVNUX0YoUGFyc2VyVmFsaWRhdGlvbkVycm9yVGVzdCwgRmllbGREZWZhdWx0VmFsdWVFcnJv
cikgewotICBFeHBlY3RIYXNWYWxpZGF0aW9uRXJyb3JzKAotICAgICJlbnVtIEJheiB7IFFVWCA9
IDE7IH1cbiIKLSAgICAibWVzc2FnZSBGb28ge1xuIgotICAgICIgIG9wdGlvbmFsIEJheiBiYXIg
PSAxIFtkZWZhdWx0PU5PX1NVQ0hfVkFMVUVdO1xuIgotICAgICJ9XG4iLAotICAgICIyOjMyOiBF
bnVtIHR5cGUgXCJCYXpcIiBoYXMgbm8gdmFsdWUgbmFtZWQgXCJOT19TVUNIX1ZBTFVFXCIuXG4i
KTsKLX0KLQotVEVTVF9GKFBhcnNlclZhbGlkYXRpb25FcnJvclRlc3QsIEZpbGVPcHRpb25OYW1l
RXJyb3IpIHsKLSAgRXhwZWN0SGFzVmFsaWRhdGlvbkVycm9ycygKLSAgICAib3B0aW9uIGZvbyA9
IDU7IiwKLSAgICAiMDo3OiBPcHRpb24gXCJmb29cIiB1bmtub3duLlxuIik7Ci19Ci0KLVRFU1Rf
RihQYXJzZXJWYWxpZGF0aW9uRXJyb3JUZXN0LCBGaWxlT3B0aW9uVmFsdWVFcnJvcikgewotICBF
eHBlY3RIYXNWYWxpZGF0aW9uRXJyb3JzKAotICAgICJvcHRpb24gamF2YV9vdXRlcl9jbGFzc25h
bWUgPSA1OyIsCi0gICAgIjA6MzA6IFZhbHVlIG11c3QgYmUgcXVvdGVkIHN0cmluZyBmb3Igc3Ry
aW5nIG9wdGlvbiAiCi0gICAgIlwiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfb3V0
ZXJfY2xhc3NuYW1lXCIuXG4iKTsKLX0KLQotVEVTVF9GKFBhcnNlclZhbGlkYXRpb25FcnJvclRl
c3QsIEZpZWxkT3B0aW9uTmFtZUVycm9yKSB7Ci0gIEV4cGVjdEhhc1ZhbGlkYXRpb25FcnJvcnMo
Ci0gICAgIm1lc3NhZ2UgRm9vIHtcbiIKLSAgICAiICBvcHRpb25hbCBib29sIGJhciA9IDEgW2Zv
bz0xXTtcbiIKLSAgICAifVxuIiwKLSAgICAiMToyNTogT3B0aW9uIFwiZm9vXCIgdW5rbm93bi5c
biIpOwotfQotCi1URVNUX0YoUGFyc2VyVmFsaWRhdGlvbkVycm9yVGVzdCwgRmllbGRPcHRpb25W
YWx1ZUVycm9yKSB7Ci0gIEV4cGVjdEhhc1ZhbGlkYXRpb25FcnJvcnMoCi0gICAgIm1lc3NhZ2Ug
Rm9vIHtcbiIKLSAgICAiICBvcHRpb25hbCBpbnQzMiBiYXIgPSAxIFtjdHlwZT0xXTtcbiIKLSAg
ICAifVxuIiwKLSAgICAiMTozMjogVmFsdWUgbXVzdCBiZSBpZGVudGlmaWVyIGZvciBlbnVtLXZh
bHVlZCBvcHRpb24gIgotICAgICJcImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuY3R5cGVc
Ii5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VyVmFsaWRhdGlvbkVycm9yVGVzdCwgRXh0ZW5zaW9u
UmFuZ2VOdW1iZXJFcnJvcikgewotICBFeHBlY3RIYXNWYWxpZGF0aW9uRXJyb3JzKAotICAgICJt
ZXNzYWdlIEZvbyB7XG4iCi0gICAgIiAgZXh0ZW5zaW9ucyAwO1xuIgotICAgICJ9XG4iLAotICAg
ICIxOjEzOiBFeHRlbnNpb24gbnVtYmVycyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzLlxuIik7
Ci19Ci0KLVRFU1RfRihQYXJzZXJWYWxpZGF0aW9uRXJyb3JUZXN0LCBFbnVtTmFtZUVycm9yKSB7
Ci0gIEV4cGVjdEhhc1ZhbGlkYXRpb25FcnJvcnMoCi0gICAgImVudW0gRm9vIHtBID0gMTt9XG4i
Ci0gICAgImVudW0gRm9vIHtCID0gMTt9XG4iLAotICAgICIxOjU6IFwiRm9vXCIgaXMgYWxyZWFk
eSBkZWZpbmVkLlxuIik7Ci19Ci0KLVRFU1RfRihQYXJzZXJWYWxpZGF0aW9uRXJyb3JUZXN0LCBF
bnVtVmFsdWVOYW1lRXJyb3IpIHsKLSAgRXhwZWN0SGFzVmFsaWRhdGlvbkVycm9ycygKLSAgICAi
ZW51bSBGb28ge1xuIgotICAgICIgIEJBUiA9IDE7XG4iCi0gICAgIiAgQkFSID0gMTtcbiIKLSAg
ICAifVxuIiwKLSAgICAiMjoyOiBcIkJBUlwiIGlzIGFscmVhZHkgZGVmaW5lZC5cbiIpOwotfQot
Ci1URVNUX0YoUGFyc2VyVmFsaWRhdGlvbkVycm9yVGVzdCwgU2VydmljZU5hbWVFcnJvcikgewot
ICBFeHBlY3RIYXNWYWxpZGF0aW9uRXJyb3JzKAotICAgICJzZXJ2aWNlIEZvbyB7fVxuIgotICAg
ICJzZXJ2aWNlIEZvbyB7fVxuIiwKLSAgICAiMTo4OiBcIkZvb1wiIGlzIGFscmVhZHkgZGVmaW5l
ZC5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VyVmFsaWRhdGlvbkVycm9yVGVzdCwgTWV0aG9kTmFt
ZUVycm9yKSB7Ci0gIEV4cGVjdEhhc1ZhbGlkYXRpb25FcnJvcnMoCi0gICAgIm1lc3NhZ2UgQmF6
IHt9XG4iCi0gICAgInNlcnZpY2UgRm9vIHtcbiIKLSAgICAiICBycGMgQmFyKEJheikgcmV0dXJu
cyhCYXopO1xuIgotICAgICIgIHJwYyBCYXIoQmF6KSByZXR1cm5zKEJheik7XG4iCi0gICAgIn1c
biIsCi0gICAgIjM6NjogXCJCYXJcIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gXCJGb29cIi5cbiIp
OwotfQotCi0KLVRFU1RfRihQYXJzZXJWYWxpZGF0aW9uRXJyb3JUZXN0LCBNZXRob2RJbnB1dFR5
cGVFcnJvcikgewotICBFeHBlY3RIYXNWYWxpZGF0aW9uRXJyb3JzKAotICAgICJtZXNzYWdlIEJh
eiB7fVxuIgotICAgICJzZXJ2aWNlIEZvbyB7XG4iCi0gICAgIiAgcnBjIEJhcihRdXgpIHJldHVy
bnMoQmF6KTtcbiIKLSAgICAifVxuIiwKLSAgICAiMjoxMDogXCJRdXhcIiBpcyBub3QgZGVmaW5l
ZC5cbiIpOwotfQotCi0KLVRFU1RfRihQYXJzZXJWYWxpZGF0aW9uRXJyb3JUZXN0LCBNZXRob2RP
dXRwdXRUeXBlRXJyb3IpIHsKLSAgRXhwZWN0SGFzVmFsaWRhdGlvbkVycm9ycygKLSAgICAibWVz
c2FnZSBCYXoge31cbiIKLSAgICAic2VydmljZSBGb28ge1xuIgotICAgICIgIHJwYyBCYXIoQmF6
KSByZXR1cm5zKFF1eCk7XG4iCi0gICAgIn1cbiIsCi0gICAgIjI6MjM6IFwiUXV4XCIgaXMgbm90
IGRlZmluZWQuXG4iKTsKLX0KLQotCi1URVNUX0YoUGFyc2VyVmFsaWRhdGlvbkVycm9yVGVzdCwg
UmVzb3ZsZWRVbmRlZmluZWRFcnJvcikgewotICAvLyBDcmVhdGUgYW5vdGhlciBmaWxlIHdoaWNo
IGRlZmluZXMgc3ltYm9sICIuYmFzZS5iYXIiLgotICBGaWxlRGVzY3JpcHRvclByb3RvIG90aGVy
X2ZpbGU7Ci0gIG90aGVyX2ZpbGUuc2V0X25hbWUoImJhc2UucHJvdG8iKTsKLSAgb3RoZXJfZmls
ZS5zZXRfcGFja2FnZSgiYmFzZSIpOwotICBvdGhlcl9maWxlLmFkZF9tZXNzYWdlX3R5cGUoKS0+
c2V0X25hbWUoImJhciIpOwotICBFWFBFQ1RfVFJVRShwb29sXy5CdWlsZEZpbGUob3RoZXJfZmls
ZSkgIT0gTlVMTCk7Ci0KLSAgLy8gRGVmaW5lICJmb28uYmFzZSIgYW5kIHRyeSAiYmFzZS5iYXIi
LgotICAvLyAiYmFzZS5iYXIiIGlzIHJlc29sdmVkIHRvICJmb28uYmFzZS5iYXIiIHdoaWNoIGlz
IG5vdCBkZWZpbmVkLgotICBFeHBlY3RIYXNWYWxpZGF0aW9uRXJyb3JzKAotICAgICJwYWNrYWdl
IGZvby5iYXNlO1xuIgotICAgICJpbXBvcnQgXCJiYXNlLnByb3RvXCI7XG4iCi0gICAgIm1lc3Nh
Z2UgcXV4IHtcbiIKLSAgICAiICBvcHRpb25hbCBiYXNlLmJhciBiYXogPSAxO1xuIgotICAgICIg
IG9wdGlvbmFsIC5iYXNlLmJhciBxdXogPSAyO1xuIgotICAgICJ9XG4iLAotICAgICIzOjExOiBc
ImJhc2UuYmFyXCIgaXMgcmVzb2x2ZWQgdG8gXCJmb28uYmFzZS5iYXJcIiwiCi0gICAgIiB3aGlj
aCBpcyBub3QgZGVmaW5lZC4gVGhlIGlubmVybW9zdCBzY29wZSBpcyBzZWFyY2hlZCBmaXJzdCAi
Ci0gICAgImluIG5hbWUgcmVzb2x1dGlvbi4gQ29uc2lkZXIgdXNpbmcgYSBsZWFkaW5nICcuJyhp
LmUuLCBcIi5iYXNlLmJhclwiKSIKLSAgICAiIHRvIHN0YXJ0IGZyb20gdGhlIG91dGVybW9zdCBz
Y29wZS5cbiIpOwotfQotCi1URVNUX0YoUGFyc2VyVmFsaWRhdGlvbkVycm9yVGVzdCwgUmVzb3Zs
ZWRVbmRlZmluZWRPcHRpb25FcnJvcikgewotICAvLyBCdWlsZCBkZXNjcmlwdG9yIG1lc3NhZ2Ug
aW4gdGVzdCBwb29sCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZGVzY3JpcHRvcl9wcm90bzsKLSAg
RGVzY3JpcHRvclByb3RvOjpkZXNjcmlwdG9yKCktPmZpbGUoKS0+Q29weVRvKCZkZXNjcmlwdG9y
X3Byb3RvKTsKLSAgQVNTRVJUX1RSVUUocG9vbF8uQnVpbGRGaWxlKGRlc2NyaXB0b3JfcHJvdG8p
ICE9IE5VTEwpOwotCi0gIC8vIGJhc2UyLnByb3RvOgotICAvLyAgIHBhY2thZ2UgYmF6Ci0gIC8v
ICAgaW1wb3J0IGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvCi0gIC8vICAgbWVzc2Fn
ZSBCYXIgeyBvcHRpb25hbCBpbnQzMiBmb28gPSAxOyB9Ci0gIC8vICAgZXh0ZW5kIEZpbGVPcHRp
b25zIHsgb3B0aW9uYWwgQmFyIGJhciA9IDc2NzI3NTc7IH0KLSAgRmlsZURlc2NyaXB0b3JQcm90
byBvdGhlcl9maWxlOwotICBvdGhlcl9maWxlLnNldF9uYW1lKCJiYXNlMi5wcm90byIpOwotICBv
dGhlcl9maWxlLnNldF9wYWNrYWdlKCJiYXoiKTsKLSAgb3RoZXJfZmlsZS5hZGRfZGVwZW5kZW5j
eSgpOwotICBvdGhlcl9maWxlLnNldF9kZXBlbmRlbmN5KDAsIGRlc2NyaXB0b3JfcHJvdG8ubmFt
ZSgpKTsKLQotICBEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2Uob3RoZXJfZmlsZS5hZGRfbWVzc2Fn
ZV90eXBlKCkpOwotICBtZXNzYWdlLT5zZXRfbmFtZSgiQmFyIik7Ci0gIEZpZWxkRGVzY3JpcHRv
clByb3RvKiBmaWVsZChtZXNzYWdlLT5hZGRfZmllbGQoKSk7Ci0gIGZpZWxkLT5zZXRfbmFtZSgi
Zm9vIik7Ci0gIGZpZWxkLT5zZXRfbnVtYmVyKDEpOwotICBmaWVsZC0+c2V0X2xhYmVsKEZpZWxk
RGVzY3JpcHRvclByb3RvX0xhYmVsX0xBQkVMX09QVElPTkFMKTsKLSAgZmllbGQtPnNldF90eXBl
KEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfVFlQRV9JTlQzMik7Ci0KLSAgRmllbGREZXNjcmlw
dG9yUHJvdG8qIGV4dGVuc2lvbihvdGhlcl9maWxlLmFkZF9leHRlbnNpb24oKSk7Ci0gIGV4dGVu
c2lvbi0+c2V0X25hbWUoImJhciIpOwotICBleHRlbnNpb24tPnNldF9udW1iZXIoNzY3Mjc1Nyk7
Ci0gIGV4dGVuc2lvbi0+c2V0X2xhYmVsKEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsX0xBQkVM
X09QVElPTkFMKTsKLSAgZXh0ZW5zaW9uLT5zZXRfdHlwZShGaWVsZERlc2NyaXB0b3JQcm90b19U
eXBlX1RZUEVfTUVTU0FHRSk7Ci0gIGV4dGVuc2lvbi0+c2V0X3R5cGVfbmFtZSgiQmFyIik7Ci0g
IGV4dGVuc2lvbi0+c2V0X2V4dGVuZGVlKCJnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMiKTsK
LQotICBFWFBFQ1RfVFJVRShwb29sXy5CdWlsZEZpbGUob3RoZXJfZmlsZSkgIT0gTlVMTCk7Ci0K
LSAgLy8gcXV4LnByb3RvOgotICAvLyAgIHBhY2thZ2UgcXV4LmJhegotICAvLyAgIG9wdGlvbiAo
YmF6LmJhcikuZm9vID0gMTsKLSAgLy8KLSAgLy8gQWx0aG91Z2ggImJhei5iYXIiIGlzIGFscmVh
ZHkgZGVmaW5lZCwgdGhlIGxvb2t1cCBjb2RlIHdpbGwgdHJ5Ci0gIC8vICJxdXguYmF6LmJhciIs
IHNpbmNlIGl0J3MgdGhlIG1hdGNoIGZyb20gdGhlIGlubmVybW9zdCBzY29wZSwKLSAgLy8gd2hp
Y2ggd2lsbCBjYXVzZSBhIHN5bWJvbCBub3QgZGVmaW5lZCBlcnJvci4KLSAgRXhwZWN0SGFzVmFs
aWRhdGlvbkVycm9ycygKLSAgICAgICJwYWNrYWdlIHF1eC5iYXo7XG4iCi0gICAgICAiaW1wb3J0
IFwiYmFzZTIucHJvdG9cIjtcbiIKLSAgICAgICJvcHRpb24gKGJhei5iYXIpLmZvbyA9IDE7XG4i
LAotICAgICAgIjI6NzogT3B0aW9uIFwiKGJhei5iYXIpXCIgaXMgcmVzb2x2ZWQgdG8gXCIocXV4
LmJhei5iYXIpXCIsIgotICAgICAgIiB3aGljaCBpcyBub3QgZGVmaW5lZC4gVGhlIGlubmVybW9z
dCBzY29wZSBpcyBzZWFyY2hlZCBmaXJzdCAiCi0gICAgICAiaW4gbmFtZSByZXNvbHV0aW9uLiBD
b25zaWRlciB1c2luZyBhIGxlYWRpbmcgJy4nKGkuZS4sIFwiKC5iYXouYmFyKVwiKSIKLSAgICAg
ICIgdG8gc3RhcnQgZnJvbSB0aGUgb3V0ZXJtb3N0IHNjb3BlLlxuIik7Ci19Ci0KLS8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS8vIFRlc3QgdGhhdCB0aGUgb3V0cHV0IGZyb20gRmlsZURlc2NyaXB0b3I6OkRlYnVn
U3RyaW5nKCkgKGFuZCBhbGwgb3RoZXIKLS8vIGRlc2NyaXB0b3IgdHlwZXMpIGlzIHBhcnNlYWJs
ZSwgYW5kIHJlc3VsdHMgaW4gdGhlIHNhbWUgRGVzY3JpcHRvcgotLy8gZGVmaW5pdGlvbnMgYWdh
aW4gYWZvdGVyIHBhcnNpbmcgKG5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlIG9yZGVyIG9mIG1lc3Nh
Z2VzCi0vLyBjYW5ub3QgYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSkKLQotdHlwZWRlZiBQ
YXJzZXJUZXN0IFBhcnNlRGVzY3JpcHRvckRlYnVnVGVzdDsKLQotY2xhc3MgQ29tcGFyZURlc2Ny
aXB0b3JOYW1lcyB7Ci0gcHVibGljOgotICBib29sIG9wZXJhdG9yKCkoY29uc3QgRGVzY3JpcHRv
clByb3RvKiBsZWZ0LAotICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvclByb3RvKiBy
aWdodCkgY29uc3QgewotICAgIHJldHVybiBsZWZ0LT5uYW1lKCkgPCByaWdodC0+bmFtZSgpOwot
ICB9Ci19OwotCi0vLyBTb3J0cyBuZXN0ZWQgRGVzY3JpcHRvclByb3RvcyBvZiBhIERlc2NyaXB0
b1Byb3RvLCBieSBuYW1lLgotdm9pZCBTb3J0TWVzc2FnZXMoRGVzY3JpcHRvclByb3RvICpkZXNj
cmlwdG9yX3Byb3RvKSB7Ci0gIGludCBzaXplID0gZGVzY3JpcHRvcl9wcm90by0+bmVzdGVkX3R5
cGVfc2l6ZSgpOwotICAvLyByZWN1cnNpdmVseSBzb3J0OyB3ZSBjYW4ndCBndWFyYW50ZWUgdGhl
IG9yZGVyIG9mIG5lc3RlZCBtZXNzYWdlcyBlaXRoZXIKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICBTb3J0TWVzc2FnZXMoZGVzY3JpcHRvcl9wcm90by0+bXV0YWJsZV9u
ZXN0ZWRfdHlwZShpKSk7Ci0gIH0KLSAgRGVzY3JpcHRvclByb3RvICoqZGF0YSA9Ci0gICAgZGVz
Y3JpcHRvcl9wcm90by0+bXV0YWJsZV9uZXN0ZWRfdHlwZSgpLT5tdXRhYmxlX2RhdGEoKTsKLSAg
c3RkOjpzb3J0KGRhdGEsIGRhdGEgKyBzaXplLCBDb21wYXJlRGVzY3JpcHRvck5hbWVzKCkpOwot
fQotCi0vLyBTb3J0cyBEZXNjcmlwdG9yUHJvdG9zIGJlbG9uZ2luZyB0byBhIEZpbGVEZXNjcmlw
dG9yUHJvdG8sIGJ5IG5hbWUuCi12b2lkIFNvcnRNZXNzYWdlcyhGaWxlRGVzY3JpcHRvclByb3Rv
ICpmaWxlX2Rlc2NyaXB0b3JfcHJvdG8pIHsKLSAgaW50IHNpemUgPSBmaWxlX2Rlc2NyaXB0b3Jf
cHJvdG8tPm1lc3NhZ2VfdHlwZV9zaXplKCk7Ci0gIC8vIHJlY3Vyc2l2ZWx5IHNvcnQ7IHdlIGNh
bid0IGd1YXJhbnRlZSB0aGUgb3JkZXIgb2YgbmVzdGVkIG1lc3NhZ2VzIGVpdGhlcgotICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgIFNvcnRNZXNzYWdlcyhmaWxlX2Rlc2Ny
aXB0b3JfcHJvdG8tPm11dGFibGVfbWVzc2FnZV90eXBlKGkpKTsKLSAgfQotICBEZXNjcmlwdG9y
UHJvdG8gKipkYXRhID0KLSAgICBmaWxlX2Rlc2NyaXB0b3JfcHJvdG8tPm11dGFibGVfbWVzc2Fn
ZV90eXBlKCktPm11dGFibGVfZGF0YSgpOwotICBzdGQ6OnNvcnQoZGF0YSwgZGF0YSArIHNpemUs
IENvbXBhcmVEZXNjcmlwdG9yTmFtZXMoKSk7Ci19Ci0KLS8vIFN0cmlwcyB0aGUgbWVzc2FnZSBh
bmQgZW51bSBmaWVsZCB0eXBlIG5hbWVzIGZvciBjb21wYXJpc29uIHB1cnBvc2Ugb25seS4KLXZv
aWQgU3RyaXBGaWVsZFR5cGVOYW1lKERlc2NyaXB0b3JQcm90byogcHJvdG8pIHsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBwcm90by0+ZmllbGRfc2l6ZSgpOyArK2kpIHsKLSAgICBzdHJpbmcgdHlw
ZV9uYW1lID0gcHJvdG8tPmZpZWxkKGkpLnR5cGVfbmFtZSgpOwotICAgIHN0cmluZzo6c2l6ZV90
eXBlIHBvcyA9IHR5cGVfbmFtZS5maW5kX2xhc3Rfb2YoIi4iKTsKLSAgICBpZiAocG9zICE9IHN0
cmluZzo6bnBvcykgewotICAgICAgcHJvdG8tPm11dGFibGVfZmllbGQoaSktPm11dGFibGVfdHlw
ZV9uYW1lKCktPmFzc2lnbigKLSAgICAgICAgICB0eXBlX25hbWUuYmVnaW4oKSArIHBvcyArIDEs
IHR5cGVfbmFtZS5lbmQoKSk7Ci0gICAgfQotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcHJv
dG8tPm5lc3RlZF90eXBlX3NpemUoKTsgKytpKSB7Ci0gICAgU3RyaXBGaWVsZFR5cGVOYW1lKHBy
b3RvLT5tdXRhYmxlX25lc3RlZF90eXBlKGkpKTsKLSAgfQotfQotCi12b2lkIFN0cmlwRmllbGRU
eXBlTmFtZShGaWxlRGVzY3JpcHRvclByb3RvKiBmaWxlX3Byb3RvKSB7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgZmlsZV9wcm90by0+bWVzc2FnZV90eXBlX3NpemUoKTsgKytpKSB7Ci0gICAgU3Ry
aXBGaWVsZFR5cGVOYW1lKGZpbGVfcHJvdG8tPm11dGFibGVfbWVzc2FnZV90eXBlKGkpKTsKLSAg
fQotfQotCi1URVNUX0YoUGFyc2VEZXNjcmlwdG9yRGVidWdUZXN0LCBUZXN0QWxsRGVzY3JpcHRv
clR5cGVzKSB7Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBvcmlnaW5hbF9maWxlID0KLSAgICAg
cHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6ZGVzY3JpcHRvcigpLT5maWxlKCk7Ci0g
IEZpbGVEZXNjcmlwdG9yUHJvdG8gZXhwZWN0ZWQ7Ci0gIG9yaWdpbmFsX2ZpbGUtPkNvcHlUbygm
ZXhwZWN0ZWQpOwotCi0gIC8vIEdldCB0aGUgRGVidWdTdHJpbmcgb2YgdGhlIHVuaXR0ZXN0LnBy
b3RvIEZpbGVEZWNyaXB0b3IsIHdoaWNoIGluY2x1ZGVzCi0gIC8vIGFsbCBvdGhlciBkZXNjcmlw
dG9yIHR5cGVzCi0gIHN0cmluZyBkZWJ1Z19zdHJpbmcgPSBvcmlnaW5hbF9maWxlLT5EZWJ1Z1N0
cmluZygpOwotCi0gIC8vIFBhcnNlIHRoZSBkZWJ1ZyBzdHJpbmcKLSAgU2V0dXBQYXJzZXIoZGVi
dWdfc3RyaW5nLmNfc3RyKCkpOwotICBGaWxlRGVzY3JpcHRvclByb3RvIHBhcnNlZDsKLSAgcGFy
c2VyXy0+UGFyc2UoaW5wdXRfLmdldCgpLCAmcGFyc2VkKTsKLSAgRVhQRUNUX0VRKGlvOjpUb2tl
bml6ZXI6OlRZUEVfRU5ELCBpbnB1dF8tPmN1cnJlbnQoKS50eXBlKTsKLSAgQVNTRVJUX0VRKCIi
LCBlcnJvcl9jb2xsZWN0b3JfLnRleHRfKQotICAgICAgPDwgIkZhaWxlZCB0byBwYXJzZTpcbiIg
PDwgZGVidWdfc3RyaW5nOwotCi0gIC8vIFdlIG5vdyBoYXZlIGEgRmlsZURlc2NyaXB0b3JQcm90
bywgYnV0IHRvIGNvbXBhcmUgd2l0aCB0aGUgZXhwZWN0ZWQgd2UKLSAgLy8gbmVlZCB0byBsaW5r
IHRvIGEgRmlsZURlY3JpcHRvciwgdGhlbiBvdXRwdXQgYmFjayB0byBhIHByb3RvLiBXZSdsbAot
ICAvLyBhbHNvIG5lZWQgdG8gZ2l2ZSBpdCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBvcmlnaW5hbC4K
LSAgcGFyc2VkLnNldF9uYW1lKCJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8iKTsKLSAg
Ly8gV2UgbmVlZCB0aGUgaW1wb3J0ZWQgZGVwZW5kZW5jeSBiZWZvcmUgd2UgY2FuIGJ1aWxkIG91
ciBwYXJzZWQgcHJvdG8KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIHB1YmxpY19pbXBvcnQgPQot
ICAgICAgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0OjpQdWJsaWNJbXBvcnRNZXNzYWdlOjpkZXNj
cmlwdG9yKCktPmZpbGUoKTsKLSAgRmlsZURlc2NyaXB0b3JQcm90byBwdWJsaWNfaW1wb3J0X3By
b3RvOwotICBwdWJsaWNfaW1wb3J0LT5Db3B5VG8oJnB1YmxpY19pbXBvcnRfcHJvdG8pOwotICBB
U1NFUlRfVFJVRShwb29sXy5CdWlsZEZpbGUocHVibGljX2ltcG9ydF9wcm90bykgIT0gTlVMTCk7
Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBpbXBvcnQgPQotICAgICAgIHByb3RvYnVmX3VuaXR0
ZXN0X2ltcG9ydDo6SW1wb3J0TWVzc2FnZTo6ZGVzY3JpcHRvcigpLT5maWxlKCk7Ci0gIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gaW1wb3J0X3Byb3RvOwotICBpbXBvcnQtPkNvcHlUbygmaW1wb3J0X3By
b3RvKTsKLSAgQVNTRVJUX1RSVUUocG9vbF8uQnVpbGRGaWxlKGltcG9ydF9wcm90bykgIT0gTlVM
TCk7Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBhY3R1YWwgPSBwb29sXy5CdWlsZEZpbGUocGFy
c2VkKTsKLSAgcGFyc2VkLkNsZWFyKCk7Ci0gIEFTU0VSVF9UUlVFKGFjdHVhbCAhPSBOVUxMKQot
ICAgICAgPDwgIkZhaWxlZCB0byB2YWxpZGF0ZTpcbiIgPDwgZGVidWdfc3RyaW5nOwotICBhY3R1
YWwtPkNvcHlUbygmcGFyc2VkKTsKLSAgQVNTRVJUX1RSVUUoYWN0dWFsICE9IE5VTEwpOwotCi0g
IC8vIFRoZSBtZXNzYWdlcyBtaWdodCBiZSBpbiBkaWZmZXJlbnQgb3JkZXJzLCBtYWtpbmcgdGhl
bSBoYXJkIHRvIGNvbXBhcmUuCi0gIC8vIFNvLCBzb3J0IHRoZSBtZXNzYWdlcyBpbiB0aGUgZGVz
Y3JpcHRvciBwcm90b3MgKGluY2x1ZGluZyBuZXN0ZWQgbWVzc2FnZXMsCi0gIC8vIHJlY3Vyc2l2
ZWx5KS4KLSAgU29ydE1lc3NhZ2VzKCZleHBlY3RlZCk7Ci0gIFNvcnRNZXNzYWdlcygmcGFyc2Vk
KTsKLQotICAvLyBJIHJlYWxseSB3YW50ZWQgdG8gdXNlIFN0cmluZ0RpZmYgaGVyZSBmb3IgdGhl
IGRlYnVnIG91dHB1dCBvbiBmYWlsLAotICAvLyBidXQgdGhlIHN0cmluZ3MgYXJlIHRvbyBsb25n
IGZvciBpdCwgYW5kIGlmIEkgaW5jcmVhc2UgaXRzIG1heCBzaXplLAotICAvLyB3ZSBnZXQgYSBt
ZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIDooCi0gIEVYUEVDVF9FUShleHBlY3RlZC5EZWJ1Z1N0
cmluZygpLCBwYXJzZWQuRGVidWdTdHJpbmcoKSk7Ci19Ci0KLVRFU1RfRihQYXJzZURlc2NyaXB0
b3JEZWJ1Z1Rlc3QsIFRlc3RDdXN0b21PcHRpb25zKSB7Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9y
KiBvcmlnaW5hbF9maWxlID0KLSAgICAgcHJvdG9idWZfdW5pdHRlc3Q6OkFnZ3JlZ2F0ZU1lc3Nh
Z2U6OmRlc2NyaXB0b3IoKS0+ZmlsZSgpOwotICBGaWxlRGVzY3JpcHRvclByb3RvIGV4cGVjdGVk
OwotICBvcmlnaW5hbF9maWxlLT5Db3B5VG8oJmV4cGVjdGVkKTsKLQotICBzdHJpbmcgZGVidWdf
c3RyaW5nID0gb3JpZ2luYWxfZmlsZS0+RGVidWdTdHJpbmcoKTsKLQotICAvLyBQYXJzZSB0aGUg
ZGVidWcgc3RyaW5nCi0gIFNldHVwUGFyc2VyKGRlYnVnX3N0cmluZy5jX3N0cigpKTsKLSAgRmls
ZURlc2NyaXB0b3JQcm90byBwYXJzZWQ7Ci0gIHBhcnNlcl8tPlBhcnNlKGlucHV0Xy5nZXQoKSwg
JnBhcnNlZCk7Ci0gIEVYUEVDVF9FUShpbzo6VG9rZW5pemVyOjpUWVBFX0VORCwgaW5wdXRfLT5j
dXJyZW50KCkudHlwZSk7Ci0gIEFTU0VSVF9FUSgiIiwgZXJyb3JfY29sbGVjdG9yXy50ZXh0Xyk7
Ci0KLSAgLy8gV2Ugbm93IGhhdmUgYSBGaWxlRGVzY3JpcHRvclByb3RvLCBidXQgdG8gY29tcGFy
ZSB3aXRoIHRoZSBleHBlY3RlZCB3ZQotICAvLyBuZWVkIHRvIGxpbmsgdG8gYSBGaWxlRGVjcmlw
dG9yLCB0aGVuIG91dHB1dCBiYWNrIHRvIGEgcHJvdG8uIFdlJ2xsCi0gIC8vIGFsc28gbmVlZCB0
byBnaXZlIGl0IHRoZSBzYW1lIG5hbWUgYXMgdGhlIG9yaWdpbmFsLgotICBwYXJzZWQuc2V0X25h
bWUob3JpZ2luYWxfZmlsZS0+bmFtZSgpKTsKLQotICAvLyB1bml0dGVzdF9jdXN0b21fb3B0aW9u
cy5wcm90byBkZXBlbmRzIG9uIGRlc2NyaXB0b3IucHJvdG8uCi0gIGNvbnN0IEZpbGVEZXNjcmlw
dG9yKiBpbXBvcnQgPSBGaWxlRGVzY3JpcHRvclByb3RvOjpkZXNjcmlwdG9yKCktPmZpbGUoKTsK
LSAgRmlsZURlc2NyaXB0b3JQcm90byBpbXBvcnRfcHJvdG87Ci0gIGltcG9ydC0+Q29weVRvKCZp
bXBvcnRfcHJvdG8pOwotICBBU1NFUlRfVFJVRShwb29sXy5CdWlsZEZpbGUoaW1wb3J0X3Byb3Rv
KSAhPSBOVUxMKTsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGFjdHVhbCA9IHBvb2xfLkJ1aWxk
RmlsZShwYXJzZWQpOwotICBBU1NFUlRfVFJVRShhY3R1YWwgIT0gTlVMTCk7Ci0gIHBhcnNlZC5D
bGVhcigpOwotICBhY3R1YWwtPkNvcHlUbygmcGFyc2VkKTsKLQotICAvLyBUaGUgbWVzc2FnZXMg
bWlnaHQgYmUgaW4gZGlmZmVyZW50IG9yZGVycywgbWFraW5nIHRoZW0gaGFyZCB0byBjb21wYXJl
LgotICAvLyBTbywgc29ydCB0aGUgbWVzc2FnZXMgaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9zIChp
bmNsdWRpbmcgbmVzdGVkIG1lc3NhZ2VzLAotICAvLyByZWN1cnNpdmVseSkuCi0gIFNvcnRNZXNz
YWdlcygmZXhwZWN0ZWQpOwotICBTb3J0TWVzc2FnZXMoJnBhcnNlZCk7Ci0KLSAgRVhQRUNUX0VR
KGV4cGVjdGVkLkRlYnVnU3RyaW5nKCksIHBhcnNlZC5EZWJ1Z1N0cmluZygpKTsKLX0KLQotLy8g
RW5zdXJlIHRoYXQgRGVidWdTdHJpbmdXaXRoT3B0aW9ucygpLCB3aXRoIHxpbmNsdWRlX2NvbW1l
bnRzfCBzZXQgdG8gdHJ1ZSwKLS8vIGluY2x1ZGVzIGNvbW1lbnRzIGZyb20gdGhlIG9yaWdpbmFs
IHBhcnNlciBpbnB1dCBpbiBhbGwgb2YgdGhlIGFwcHJvcHJpYXRlCi0vLyBwbGFjZXMuCi1URVNU
X0YoUGFyc2VEZXNjcmlwdG9yRGVidWdUZXN0LCBUZXN0Q29tbWVudHNJbkRlYnVnU3RyaW5nKSB7
Ci0gIFNldHVwUGFyc2VyKAotICAgICAgIi8vIERldGFjaGVkIGNvbW1lbnQgYmVmb3JlIHN5bnRh
eC5cbiIKLSAgICAgICJcbiIKLSAgICAgICIvLyBTeW50YXggY29tbWVudC5cbiIKLSAgICAgICJz
eW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICAgIlxuIgotICAgICAgIi8vIERldGFjaGVkIGNv
bW1lbnQgYmVmb3JlIHBhY2thZ2UuXG4iCi0gICAgICAiXG4iCi0gICAgICAiLy8gUGFja2FnZSBj
b21tZW50LlxuIgotICAgICAgInBhY2thZ2UgY29tbWVudF90ZXN0O1xuIgotICAgICAgIlxuIgot
ICAgICAgIi8vIERldGFjaGVkIGNvbW1lbnQgYmVmb3JlIFRlc3RNZXNzYWdlMS5cbiIKLSAgICAg
ICJcbiIKLSAgICAgICIvLyBNZXNzYWdlIGNvbW1lbnQuXG4iCi0gICAgICAiLy9cbiIKLSAgICAg
ICIvLyBNb3JlIGRldGFpbCBpbiBtZXNzYWdlIGNvbW1lbnQuXG4iCi0gICAgICAibWVzc2FnZSBU
ZXN0TWVzc2FnZTEge1xuIgotICAgICAgIlxuIgotICAgICAgIiAgLy8gRGV0YWNoZWQgY29tbWVu
dCBiZWZvcmUgZm9vLlxuIgotICAgICAgIlxuIgotICAgICAgIiAgLy8gRmllbGQgY29tbWVudC5c
biIKLSAgICAgICIgIG9wdGlvbmFsIGludDMyIGZvbyA9IDE7XG4iCi0gICAgICAiXG4iCi0gICAg
ICAiICAvLyBEZXRhY2hlZCBjb21tZW50IGJlZm9yZSBOZXN0ZWRNZXNzYWdlLlxuIgotICAgICAg
IlxuIgotICAgICAgIiAgLy8gTmVzdGVkLW1lc3NhZ2UgY29tbWVudC5cbiIKLSAgICAgICIgIG1l
c3NhZ2UgTmVzdGVkTWVzc2FnZSB7XG4iCi0gICAgICAiICAgIG9wdGlvbmFsIGludDMyIGJhciA9
IDE7XG4iCi0gICAgICAiICB9XG4iCi0gICAgICAifVxuIgotICAgICAgIlxuIgotICAgICAgIi8v
IERldGFjaGVkIGNvbW1lbnQgYmVmb3JlIE15RW51bVR5cGUuXG4iCi0gICAgICAiXG4iCi0gICAg
ICAiLy8gRW51bSBjb21tZW50LlxuIgotICAgICAgImVudW0gTXlFbnVtVHlwZSB7XG4iCi0gICAg
ICAiXG4iCi0gICAgICAiICAvLyBEZXRhY2hlZCBjb21tZW50IGJlZm9yZSBBU0RGLlxuIgotICAg
ICAgIlxuIgotICAgICAgIiAgLy8gRW51bS12YWx1ZSBjb21tZW50LlxuIgotICAgICAgIiAgQVNE
RiA9IDE7XG4iCi0gICAgICAifVxuIgotICAgICAgIlxuIgotICAgICAgIi8vIERldGFjaGVkIGNv
bW1lbnQgYmVmb3JlIE15U2VydmljZS5cbiIKLSAgICAgICJcbiIKLSAgICAgICIvLyBTZXJ2aWNl
IGNvbW1lbnQuXG4iCi0gICAgICAic2VydmljZSBNeVNlcnZpY2Uge1xuIgotICAgICAgIlxuIgot
ICAgICAgIiAgLy8gRGV0YWNoZWQgY29tbWVudCBiZWZvcmUgTXlSUENDYWxsLlxuIgotICAgICAg
IlxuIgotICAgICAgIiAgLy8gUlBDIGNvbW1lbnQuXG4iCi0gICAgICAiICBycGMgTXlSUENDYWxs
KFRlc3RNZXNzYWdlMSkgcmV0dXJucyAoVGVzdE1lc3NhZ2UxKSB7IH1cbiIKLSAgICAgICJ9XG4i
KTsKLQotICBGaWxlRGVzY3JpcHRvclByb3RvIHBhcnNlZF9kZXNjOwotICBwYXJzZWRfZGVzYy5z
ZXRfbmFtZSgiZm9vLnByb3RvIik7Ci0gIFNvdXJjZUxvY2F0aW9uVGFibGUgc291cmNlX2xvY2F0
aW9uczsKLSAgcGFyc2VyXy0+UmVjb3JkU291cmNlTG9jYXRpb25zVG8oJnNvdXJjZV9sb2NhdGlv
bnMpOwotICBwYXJzZXJfLT5QYXJzZShpbnB1dF8uZ2V0KCksICZwYXJzZWRfZGVzYyk7Ci0gIEVY
UEVDVF9FUShpbzo6VG9rZW5pemVyOjpUWVBFX0VORCwgaW5wdXRfLT5jdXJyZW50KCkudHlwZSk7
Ci0gIEFTU0VSVF9FUSgiIiwgZXJyb3JfY29sbGVjdG9yXy50ZXh0Xyk7Ci0KLSAgLy8gV2UgbmVl
ZCB0byBpbXBvcnQgdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8gdG8gZ2V0IGEgRmlsZURlc2NyaXB0
b3IuCi0gIE1vY2tWYWxpZGF0aW9uRXJyb3JDb2xsZWN0b3IgY29sbGVjdG9yKHNvdXJjZV9sb2Nh
dGlvbnMsICZlcnJvcl9jb2xsZWN0b3JfKTsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPQotICAgICAgcG9vbF8uQnVpbGRGaWxlQ29sbGVjdGluZ0Vycm9ycyhwYXJzZWRfZGVz
YywgJmNvbGxlY3Rvcik7Ci0gIEFTU0VSVF9UUlVFKGRlc2NyaXB0b3IgIT0gTlVMTCk7Ci0KLSAg
Ly8gRW5zdXJlIHRoYXQgZWFjaCBvZiB0aGUgY29tbWVudHMgYXBwZWFycyBzb21ld2hlcmUgaW4g
dGhlIERlYnVnU3RyaW5nKCkuCi0gIC8vIFdlIGRvbid0IHRlc3QgdGhlIGV4YWN0IGNvbW1lbnQg
cGxhY2VtZW50IG9yIGZvcm1hdHRpbmcsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gIC8vIHdhbnQgdG8g
YmUgdG9vIGZyYWdpbGUgaGVyZS4KLSAgY29uc3QgY2hhciogZXhwZWN0ZWRfY29tbWVudHNbXSA9
IHsKLSAgICAiRGV0YWNoZWQgY29tbWVudCBiZWZvcmUgc3ludGF4LiIsCi0gICAgIlN5bnRheCBj
b21tZW50LiIsCi0gICAgIkRldGFjaGVkIGNvbW1lbnQgYmVmb3JlIHBhY2thZ2UuIiwKLSAgICAi
UGFja2FnZSBjb21tZW50LiIsCi0gICAgIkRldGFjaGVkIGNvbW1lbnQgYmVmb3JlIFRlc3RNZXNz
YWdlMS4iLAotICAgICJNZXNzYWdlIGNvbW1lbnQuIiwKLSAgICAiTW9yZSBkZXRhaWwgaW4gbWVz
c2FnZSBjb21tZW50LiIsCi0gICAgIkRldGFjaGVkIGNvbW1lbnQgYmVmb3JlIGZvby4iLAotICAg
ICJGaWVsZCBjb21tZW50IiwKLSAgICAiRGV0YWNoZWQgY29tbWVudCBiZWZvcmUgTmVzdGVkTWVz
c2FnZS4iLAotICAgICJOZXN0ZWQtbWVzc2FnZSBjb21tZW50IiwKLSAgICAiRGV0YWNoZWQgY29t
bWVudCBiZWZvcmUgTXlFbnVtVHlwZS4iLAotICAgICJFbnVtIGNvbW1lbnQiLAotICAgICJEZXRh
Y2hlZCBjb21tZW50IGJlZm9yZSBBU0RGLiIsCi0gICAgIkVudW0tdmFsdWUgY29tbWVudCIsCi0g
ICAgIkRldGFjaGVkIGNvbW1lbnQgYmVmb3JlIE15U2VydmljZS4iLAotICAgICJTZXJ2aWNlIGNv
bW1lbnQiLAotICAgICJEZXRhY2hlZCBjb21tZW50IGJlZm9yZSBNeVJQQ0NhbGwuIiwKLSAgICAi
UlBDIGNvbW1lbnQiLAotICB9OwotCi0gIERlYnVnU3RyaW5nT3B0aW9ucyBkZWJ1Z19zdHJpbmdf
b3B0aW9uczsKLSAgZGVidWdfc3RyaW5nX29wdGlvbnMuaW5jbHVkZV9jb21tZW50cyA9IHRydWU7
Ci0KLSAgewotICAgIGNvbnN0IHN0cmluZyBkZWJ1Z19zdHJpbmcgPQotICAgICAgICBkZXNjcmlw
dG9yLT5EZWJ1Z1N0cmluZ1dpdGhPcHRpb25zKGRlYnVnX3N0cmluZ19vcHRpb25zKTsKLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgR09PR0xFX0FSUkFZU0laRShleHBlY3RlZF9jb21tZW50cyk7
ICsraSkgewotICAgICAgc3RyaW5nOjpzaXplX3R5cGUgZm91bmRfcG9zID0gZGVidWdfc3RyaW5n
LmZpbmQoZXhwZWN0ZWRfY29tbWVudHNbaV0pOwotICAgICAgRVhQRUNUX1RSVUUoZm91bmRfcG9z
ICE9IHN0cmluZzo6bnBvcykKLSAgICAgICAgICA8PCAiXCIiIDw8IGV4cGVjdGVkX2NvbW1lbnRz
W2ldIDw8ICJcIiBub3QgZm91bmQuIjsKLSAgICB9Ci0KLSAgICAvLyBSZXN1bHQgb2YgRGVidWdT
dHJpbmdXaXRoT3B0aW9ucyBzaG91bGQgYmUgcGFyc2VhYmxlLgotICAgIFNldHVwUGFyc2VyKGRl
YnVnX3N0cmluZy5jX3N0cigpKTsKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIHBhcnNlZDsKLSAg
ICBwYXJzZXJfLT5QYXJzZShpbnB1dF8uZ2V0KCksICZwYXJzZWQpOwotICAgIEVYUEVDVF9FUShp
bzo6VG9rZW5pemVyOjpUWVBFX0VORCwgaW5wdXRfLT5jdXJyZW50KCkudHlwZSk7Ci0gICAgQVNT
RVJUX0VRKCIiLCBlcnJvcl9jb2xsZWN0b3JfLnRleHRfKQotICAgICAgICA8PCAiRmFpbGVkIHRv
IHBhcnNlOlxuIiA8PCBkZWJ1Z19zdHJpbmc7Ci0gIH0KLQotfQotCi1URVNUX0YoUGFyc2VEZXNj
cmlwdG9yRGVidWdUZXN0LCBUZXN0TWFwcykgewotICBTZXR1cFBhcnNlcigKLSAgICAgICJzeW50
YXggPSBcInByb3RvM1wiOyAiCi0gICAgICAibWVzc2FnZSBGb28geyAiCi0gICAgICAiICBtZXNz
YWdlIEJhciB7IH0gIgotICAgICAgIiAgbWFwPGludDMyLCBCYXI+IGVudW1fbWVzc2FnZV9tYXAg
PSAxOyAiCi0gICAgICAiICBtYXA8c3RyaW5nLCBmbG9hdD4gcHJpbWl0aXZlX21hcCA9IDI7ICIK
LSAgICAgICJ9ICIpOwotICBGaWxlRGVzY3JpcHRvclByb3RvIG9yaWdpbmFsOwotICBFWFBFQ1Rf
VFJVRShwYXJzZXJfLT5QYXJzZShpbnB1dF8uZ2V0KCksICZvcmlnaW5hbCkpOwotICBvcmlnaW5h
bC5zZXRfbmFtZSgiZm9vLnByb3RvIik7Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlID0g
cG9vbF8uQnVpbGRGaWxlKG9yaWdpbmFsKTsKLSAgQVNTRVJUX1RSVUUoZmlsZSAhPSBOVUxMKTsK
LQotICAvLyBNYWtlIHN1cmUgdGhlIGRlYnVnIHN0cmluZyB1c2VzIG1hcCBzeW50YXggYW5kIGRv
ZXMgbm90IGhhdmUgdGhlIGF1dG8KLSAgLy8gZ2VuZXJhdGVkIGVudHJ5LgotICBzdHJpbmcgZGVi
dWdfc3RyaW5nID0gZmlsZS0+RGVidWdTdHJpbmcoKTsKLSAgRVhQRUNUX1RSVUUoZGVidWdfc3Ry
aW5nLmZpbmQoIm1hcDwiKSAhPSBzdHJpbmc6Om5wb3MpOwotICBFWFBFQ1RfVFJVRShkZWJ1Z19z
dHJpbmcuZmluZCgib3B0aW9uIG1hcF9lbnRyeSIpID09IHN0cmluZzo6bnBvcyk7Ci0gIEVYUEVD
VF9UUlVFKGRlYnVnX3N0cmluZy5maW5kKCJNYXBFbnRyeSIpID09IHN0cmluZzo6bnBvcyk7Ci0K
LSAgLy8gTWFrZSBzdXJlIHRoZSBkZXNjcmlwdG9yIGRlYnVnIHN0cmluZyBpcyBwYXJzYWJsZS4K
LSAgRmlsZURlc2NyaXB0b3JQcm90byBwYXJzZWQ7Ci0gIFNldHVwUGFyc2VyKGRlYnVnX3N0cmlu
Zy5jX3N0cigpKTsKLSAgcGFyc2VkLnNldF9uYW1lKCJmb28ucHJvdG8iKTsKLSAgQVNTRVJUX1RS
VUUocGFyc2VyXy0+UGFyc2UoaW5wdXRfLmdldCgpLCAmcGFyc2VkKSk7Ci0KLSAgb3JpZ2luYWwu
Y2xlYXJfc291cmNlX2NvZGVfaW5mbygpOwotICBwYXJzZWQuY2xlYXJfc291cmNlX2NvZGVfaW5m
bygpOwotICBTdHJpcEZpZWxkVHlwZU5hbWUoJm9yaWdpbmFsKTsKLSAgU3RyaXBGaWVsZFR5cGVO
YW1lKCZwYXJzZWQpOwotICBFWFBFQ1RfRVEob3JpZ2luYWwuRGVidWdTdHJpbmcoKSwgcGFyc2Vk
LkRlYnVnU3RyaW5nKCkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBTb3VyY2VDb2RlSW5mbyB0
ZXN0cy4KLQotLy8gRm9sbG93cyBhIHBhdGggLS0gYXMgZGVmaW5lZCBieSBTb3VyY2VDb2RlSW5m
by5Mb2NhdGlvbi5wYXRoIC0tIGZyb20gYQotLy8gbWVzc2FnZSB0byBhIHBhcnRpY3VsYXIgc3Vi
LWZpZWxkLgotLy8gKiBJZiB0aGUgdGFyZ2V0IGlzIGl0c2VsZiBhIG1lc3NhZ2UsIHNldHMgKm91
dHB1dF9tZXNzYWdlIHRvIHBvaW50IGF0IGl0LAotLy8gICAqb3V0cHV0X2ZpZWxkIHRvIE5VTEws
IGFuZCAqb3V0cHV0X2luZGV4IHRvIC0xLgotLy8gKiBPdGhlcndpc2UsIGlmIHRoZSB0YXJnZXQg
aXMgYW4gZWxlbWVudCBvZiBhIHJlcGVhdGVkIGZpZWxkLCBzZXRzCi0vLyAgICpvdXRwdXRfbWVz
c2FnZSB0byB0aGUgY29udGFpbmluZyBtZXNzYWdlLCAqb3V0cHV0X2ZpZWxkIHRvIHRoZSBkZXNj
cmlwdG9yCi0vLyAgIG9mIHRoZSBmaWVsZCwgYW5kICpvdXRwdXRfaW5kZXggdG8gdGhlIGluZGV4
IG9mIHRoZSBlbGVtZW50LgotLy8gKiBPdGhlcndpc2UsIHRoZSB0YXJnZXQgaXMgYSBmaWVsZCAo
cG9zc2libHkgYSByZXBlYXRlZCBmaWVsZCwgYnV0IG5vdCBhbnkKLS8vICAgb25lIGVsZW1lbnQp
LiAgU2V0cyAqb3V0cHV0X21lc3NhZ2UgdG8gdGhlIGNvbnRhaW5pbmcgbWVzc2FnZSwKLS8vICAg
Km91dHB1dF9maWVsZCB0byB0aGUgZGVzY3JpcHRvciBvZiB0aGUgZmllbGQsIGFuZCAqb3V0cHV0
X2luZGV4IHRvIC0xLgotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXRoIHdhcyB2YWxpZCwgZmFs
c2Ugb3RoZXJ3aXNlLiAgQSBnVGVzdCBmYWlsdXJlIGlzCi0vLyByZWNvcmRlZCBiZWZvcmUgcmV0
dXJuaW5nIGZhbHNlLgotYm9vbCBGb2xsb3dQYXRoKGNvbnN0IE1lc3NhZ2UmIHJvb3QsCi0gICAg
ICAgICAgICAgICAgY29uc3QgaW50KiBwYXRoX2JlZ2luLCBjb25zdCBpbnQqIHBhdGhfZW5kLAot
ICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UqKiBvdXRwdXRfbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqKiBvdXRwdXRfZmllbGQsCi0gICAgICAgICAg
ICAgICAgaW50KiBvdXRwdXRfaW5kZXgpIHsKLSAgaWYgKHBhdGhfYmVnaW4gPT0gcGF0aF9lbmQp
IHsKLSAgICAvLyBQYXRoIHJlZmVycyB0byB0aGlzIHdob2xlIG1lc3NhZ2UuCi0gICAgKm91dHB1
dF9tZXNzYWdlID0gJnJvb3Q7Ci0gICAgKm91dHB1dF9maWVsZCA9IE5VTEw7Ci0gICAgKm91dHB1
dF9pbmRleCA9IC0xOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgY29uc3QgRGVzY3JpcHRv
ciogZGVzY3JpcHRvciA9IHJvb3QuR2V0RGVzY3JpcHRvcigpOwotICBjb25zdCBSZWZsZWN0aW9u
KiByZWZsZWN0aW9uID0gcm9vdC5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TnVtYmVyKCpwYXRoX2JlZ2lu
KTsKLQotICBpZiAoZmllbGQgPT0gTlVMTCkgewotICAgIEFERF9GQUlMVVJFKCkgPDwgZGVzY3Jp
cHRvci0+bmFtZSgpIDw8ICIgaGFzIG5vIGZpZWxkIG51bWJlcjogIgotICAgICAgICAgICAgICAg
ICAgPDwgKnBhdGhfYmVnaW47Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgKytwYXRoX2Jl
Z2luOwotCi0gIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgIGlmIChwYXRoX2JlZ2lu
ID09IHBhdGhfZW5kKSB7Ci0gICAgICAvLyBQYXRoIHJlZmVycyB0byB0aGUgd2hvbGUgcmVwZWF0
ZWQgZmllbGQuCi0gICAgICAqb3V0cHV0X21lc3NhZ2UgPSAmcm9vdDsKLSAgICAgICpvdXRwdXRf
ZmllbGQgPSBmaWVsZDsKLSAgICAgICpvdXRwdXRfaW5kZXggPSAtMTsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGludCBpbmRleCA9ICpwYXRoX2JlZ2luKys7Ci0gICAgaW50IHNp
emUgPSByZWZsZWN0aW9uLT5GaWVsZFNpemUocm9vdCwgZmllbGQpOwotCi0gICAgaWYgKGluZGV4
ID49IHNpemUpIHsKLSAgICAgIEFERF9GQUlMVVJFKCkgPDwgZGVzY3JpcHRvci0+bmFtZSgpIDw8
ICIuIiA8PCBmaWVsZC0+bmFtZSgpCi0gICAgICAgICAgICAgICAgICAgIDw8ICIgaGFzIHNpemUg
IiA8PCBzaXplIDw8ICIsIGJ1dCBwYXRoIGNvbnRhaW5lZCBpbmRleDogIgotICAgICAgICAgICAg
ICAgICAgICA8PCBpbmRleDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
ZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsK
LSAgICAgIC8vIERlc2NlbmQgaW50byBjaGlsZCBtZXNzYWdlLgotICAgICAgY29uc3QgTWVzc2Fn
ZSYgY2hpbGQgPSByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2Uocm9vdCwgZmllbGQsIGlu
ZGV4KTsKLSAgICAgIHJldHVybiBGb2xsb3dQYXRoKGNoaWxkLCBwYXRoX2JlZ2luLCBwYXRoX2Vu
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9tZXNzYWdlLCBvdXRwdXRfZmllbGQs
IG91dHB1dF9pbmRleCk7Ci0gICAgfSBlbHNlIGlmIChwYXRoX2JlZ2luID09IHBhdGhfZW5kKSB7
Ci0gICAgICAvLyBQYXRoIHJlZmVycyB0byB0aGlzIGVsZW1lbnQuCi0gICAgICAqb3V0cHV0X21l
c3NhZ2UgPSAmcm9vdDsKLSAgICAgICpvdXRwdXRfZmllbGQgPSBmaWVsZDsKLSAgICAgICpvdXRw
dXRfaW5kZXggPSBpbmRleDsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBBRERfRkFJTFVSRSgpIDw8IGRlc2NyaXB0b3ItPm5hbWUoKSA8PCAiLiIgPDwgZmllbGQtPm5h
bWUoKQotICAgICAgICAgICAgICAgICAgICA8PCAiIGlzIG5vdCBhIG1lc3NhZ2U7IGNhbm5vdCBk
ZXNjZW5kIGludG8gaXQuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0gZWxzZSB7
Ci0gICAgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9N
RVNTQUdFKSB7Ci0gICAgICBjb25zdCBNZXNzYWdlJiBjaGlsZCA9IHJlZmxlY3Rpb24tPkdldE1l
c3NhZ2Uocm9vdCwgZmllbGQpOwotICAgICAgcmV0dXJuIEZvbGxvd1BhdGgoY2hpbGQsIHBhdGhf
YmVnaW4sIHBhdGhfZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X21lc3NhZ2Us
IG91dHB1dF9maWVsZCwgb3V0cHV0X2luZGV4KTsKLSAgICB9IGVsc2UgaWYgKHBhdGhfYmVnaW4g
PT0gcGF0aF9lbmQpIHsKLSAgICAgIC8vIFBhdGggcmVmZXJzIHRvIHRoaXMgZmllbGQuCi0gICAg
ICAqb3V0cHV0X21lc3NhZ2UgPSAmcm9vdDsKLSAgICAgICpvdXRwdXRfZmllbGQgPSBmaWVsZDsK
LSAgICAgICpvdXRwdXRfaW5kZXggPSAtMTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBBRERfRkFJTFVSRSgpIDw8IGRlc2NyaXB0b3ItPm5hbWUoKSA8PCAiLiIgPDwg
ZmllbGQtPm5hbWUoKQotICAgICAgICAgICAgICAgICAgICA8PCAiIGlzIG5vdCBhIG1lc3NhZ2U7
IGNhbm5vdCBkZXNjZW5kIGludG8gaXQuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
IH0KLX0KLQotLy8gQ2hlY2sgaWYgdHdvIHNwYW5zIGFyZSBlcXVhbC4KLWJvb2wgQ29tcGFyZVNw
YW5zKGNvbnN0IFJlcGVhdGVkRmllbGQ8aW50PiYgc3BhbjEsCi0gICAgICAgICAgICAgICAgICBj
b25zdCBSZXBlYXRlZEZpZWxkPGludD4mIHNwYW4yKSB7Ci0gIGlmIChzcGFuMS5zaXplKCkgIT0g
c3BhbjIuc2l6ZSgpKSByZXR1cm4gZmFsc2U7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgc3BhbjEu
c2l6ZSgpOyBpKyspIHsKLSAgICBpZiAoc3BhbjEuR2V0KGkpICE9IHNwYW4yLkdldChpKSkgcmV0
dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyBUZXN0IGZpeHR1cmUgZm9y
IHNvdXJjZSBpbmZvIHRlc3RzLCB3aGljaCBjaGVjayB0aGF0IHNvdXJjZSBsb2NhdGlvbnMgYXJl
Ci0vLyByZWNvcmRlZCBjb3JyZWN0bHkgaW4gRmlsZURlc2NyaXB0b3JQcm90by5zb3VyY2VfY29k
ZV9pbmZvLmxvY2F0aW9uLgotY2xhc3MgU291cmNlSW5mb1Rlc3QgOiBwdWJsaWMgUGFyc2VyVGVz
dCB7Ci0gcHJvdGVjdGVkOgotICAvLyBUaGUgcGFyc2VkIGZpbGUgKGluaXRpYWxpemVkIGJ5IFBh
cnNlKCkpLgotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfOwotCi0gIC8vIFBhcnNlIHRoZSBn
aXZlbiB0ZXh0IGFzIGEgLnByb3RvIGZpbGUgYW5kIHBvcHVsYXRlIHRoZSBzcGFuc18gbWFwIHdp
dGgKLSAgLy8gYWxsIHRoZSBzb3VyY2UgbG9jYXRpb24gc3BhbnMgaW4gaXRzIFNvdXJjZUNvZGVJ
bmZvIHRhYmxlLgotICBib29sIFBhcnNlKGNvbnN0IGNoYXIqIHRleHQpIHsKLSAgICBFeHRyYWN0
TWFya2Vycyh0ZXh0KTsKLSAgICBTZXR1cFBhcnNlcih0ZXh0X3dpdGhvdXRfbWFya2Vyc18uY19z
dHIoKSk7Ci0gICAgaWYgKCFwYXJzZXJfLT5QYXJzZShpbnB1dF8uZ2V0KCksICZmaWxlXykpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBTb3VyY2VDb2RlSW5mbyYg
c291cmNlX2luZm8gPSBmaWxlXy5zb3VyY2VfY29kZV9pbmZvKCk7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzb3VyY2VfaW5mby5sb2NhdGlvbl9zaXplKCk7IGkrKykgewotICAgICAgY29uc3Qg
U291cmNlQ29kZUluZm86OkxvY2F0aW9uJiBsb2NhdGlvbiA9IHNvdXJjZV9pbmZvLmxvY2F0aW9u
KGkpOwotICAgICAgY29uc3QgTWVzc2FnZSogZGVzY3JpcHRvcl9wcm90byA9IE5VTEw7Ci0gICAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gTlVMTDsKLSAgICAgIGludCBpbmRleCA9
IDA7Ci0gICAgICBpZiAoIUZvbGxvd1BhdGgoZmlsZV8sIGxvY2F0aW9uLnBhdGgoKS5iZWdpbigp
LCBsb2NhdGlvbi5wYXRoKCkuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAgJmRlc2NyaXB0
b3JfcHJvdG8sICZmaWVsZCwgJmluZGV4KSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICB9Ci0KLSAgICAgIHNwYW5zXy5pbnNlcnQoCi0gICAgICAgICAgc3RkOjptYWtlX3BhaXIoU3Bh
bktleSgqZGVzY3JpcHRvcl9wcm90bywgZmllbGQsIGluZGV4KSwgJmxvY2F0aW9uKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSB7
Ci0gICAgRVhQRUNUX1RSVUUoc3BhbnNfLmVtcHR5KCkpCi0gICAgICAgIDw8ICJGb3Jnb3QgdG8g
Y2FsbCBIYXNTcGFuKCkgZm9yOlxuIgotICAgICAgICA8PCBzcGFuc18uYmVnaW4oKS0+c2Vjb25k
LT5EZWJ1Z1N0cmluZygpOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gSGFzU3BhbigpIGNo
ZWNrcyB0aGF0IHRoZSBzcGFuIG9mIHNvdXJjZSBjb2RlIGRlbGltaXRlZCBieSB0aGUgZ2l2ZW4K
LSAgLy8gdGFncyAoY29tbWVudHMpIGNvcnJlc3BvbmQgdmlhIHRoZSBTb3VyY2VDb2RlSW5mbyB0
YWJsZSB0byB0aGUgZ2l2ZW4KLSAgLy8gcGFydCBvZiB0aGUgRmlsZURlc2NyaXB0b3JQcm90by4g
IChJZiB1bmNsZWFyLCBsb29rIGF0IHRoZSBhY3R1YWwgdGVzdHM7Ci0gIC8vIGl0IHNob3VsZCBx
dWlja2x5IGJlY29tZSBvYnZpb3VzLikKLQotICBib29sIEhhc1NwYW4oY2hhciBzdGFydF9tYXJr
ZXIsIGNoYXIgZW5kX21hcmtlciwKLSAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIGRlc2Ny
aXB0b3JfcHJvdG8pIHsKLSAgICByZXR1cm4gSGFzU3BhbldpdGhDb21tZW50KAotICAgICAgICBz
dGFydF9tYXJrZXIsIGVuZF9tYXJrZXIsIGRlc2NyaXB0b3JfcHJvdG8sIE5VTEwsIC0xLCBOVUxM
LCBOVUxMLCBOVUxMKTsKLSAgfQotCi0gIGJvb2wgSGFzU3BhbldpdGhDb21tZW50KGNoYXIgc3Rh
cnRfbWFya2VyLCBjaGFyIGVuZF9tYXJrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE1lc3NhZ2UmIGRlc2NyaXB0b3JfcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGV4cGVjdGVkX2xlYWRpbmdfY29tbWVudHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGV4cGVjdGVkX3RyYWlsaW5nX2NvbW1lbnRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHBlY3RlZF9sZWFkaW5nX2RldGFjaGVk
X2NvbW1lbnRzKSB7Ci0gICAgcmV0dXJuIEhhc1NwYW5XaXRoQ29tbWVudCgKLSAgICAgICAgc3Rh
cnRfbWFya2VyLCBlbmRfbWFya2VyLCBkZXNjcmlwdG9yX3Byb3RvLCBOVUxMLCAtMSwKLSAgICAg
ICAgZXhwZWN0ZWRfbGVhZGluZ19jb21tZW50cywgZXhwZWN0ZWRfdHJhaWxpbmdfY29tbWVudHMs
Ci0gICAgICAgIGV4cGVjdGVkX2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMpOwotICB9Ci0KLSAg
Ym9vbCBIYXNTcGFuKGNoYXIgc3RhcnRfbWFya2VyLCBjaGFyIGVuZF9tYXJrZXIsCi0gICAgICAg
ICAgICAgICBjb25zdCBNZXNzYWdlJiBkZXNjcmlwdG9yX3Byb3RvLCBjb25zdCBzdHJpbmcmIGZp
ZWxkX25hbWUpIHsKLSAgICByZXR1cm4gSGFzU3BhbihzdGFydF9tYXJrZXIsIGVuZF9tYXJrZXIs
IGRlc2NyaXB0b3JfcHJvdG8sIGZpZWxkX25hbWUsIC0xKTsKLSAgfQotCi0gIGJvb2wgSGFzU3Bh
bihjaGFyIHN0YXJ0X21hcmtlciwgY2hhciBlbmRfbWFya2VyLAotICAgICAgICAgICAgICAgY29u
c3QgTWVzc2FnZSYgZGVzY3JpcHRvcl9wcm90bywgY29uc3Qgc3RyaW5nJiBmaWVsZF9uYW1lLAot
ICAgICAgICAgICAgICAgaW50IGluZGV4KSB7Ci0gICAgcmV0dXJuIEhhc1NwYW4oc3RhcnRfbWFy
a2VyLCBlbmRfbWFya2VyLCBkZXNjcmlwdG9yX3Byb3RvLAotICAgICAgICAgICAgICAgICAgIGZp
ZWxkX25hbWUsIGluZGV4LCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgfQotCi0gIGJvb2wgSGFzU3Bh
bihjaGFyIHN0YXJ0X21hcmtlciwgY2hhciBlbmRfbWFya2VyLAotICAgICAgICAgICAgICAgY29u
c3QgTWVzc2FnZSYgZGVzY3JpcHRvcl9wcm90bywKLSAgICAgICAgICAgICAgIGNvbnN0IHN0cmlu
ZyYgZmllbGRfbmFtZSwgaW50IGluZGV4LAotICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXhw
ZWN0ZWRfbGVhZGluZ19jb21tZW50cywKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4cGVj
dGVkX3RyYWlsaW5nX2NvbW1lbnRzLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXhwZWN0
ZWRfbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQgPQotICAgICAgICBkZXNjcmlwdG9yX3Byb3RvLkdldERlc2NyaXB0b3IoKS0+Rmlu
ZEZpZWxkQnlOYW1lKGZpZWxkX25hbWUpOwotICAgIGlmIChmaWVsZCA9PSBOVUxMKSB7Ci0gICAg
ICBBRERfRkFJTFVSRSgpIDw8IGRlc2NyaXB0b3JfcHJvdG8uR2V0RGVzY3JpcHRvcigpLT5uYW1l
KCkKLSAgICAgICAgICAgICAgICAgICAgPDwgIiBoYXMgbm8gc3VjaCBmaWVsZDogIiA8PCBmaWVs
ZF9uYW1lOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBIYXNTcGFu
V2l0aENvbW1lbnQoCi0gICAgICAgIHN0YXJ0X21hcmtlciwgZW5kX21hcmtlciwgZGVzY3JpcHRv
cl9wcm90bywgZmllbGQsIGluZGV4LAotICAgICAgICBleHBlY3RlZF9sZWFkaW5nX2NvbW1lbnRz
LCBleHBlY3RlZF90cmFpbGluZ19jb21tZW50cywKLSAgICAgICAgZXhwZWN0ZWRfbGVhZGluZ19k
ZXRhY2hlZF9jb21tZW50cyk7Ci0gIH0KLQotICBib29sIEhhc1NwYW4oY29uc3QgTWVzc2FnZSYg
ZGVzY3JpcHRvcl9wcm90bykgewotICAgIHJldHVybiBIYXNTcGFuV2l0aENvbW1lbnQoCi0gICAg
ICAgICdcMCcsICdcMCcsIGRlc2NyaXB0b3JfcHJvdG8sIE5VTEwsIC0xLCBOVUxMLCBOVUxMLCBO
VUxMKTsKLSAgfQotCi0gIGJvb2wgSGFzU3Bhbihjb25zdCBNZXNzYWdlJiBkZXNjcmlwdG9yX3By
b3RvLCBjb25zdCBzdHJpbmcmIGZpZWxkX25hbWUpIHsKLSAgICByZXR1cm4gSGFzU3BhbignXDAn
LCAnXDAnLCBkZXNjcmlwdG9yX3Byb3RvLCBmaWVsZF9uYW1lLCAtMSk7Ci0gIH0KLQotICBib29s
IEhhc1NwYW4oY29uc3QgTWVzc2FnZSYgZGVzY3JpcHRvcl9wcm90bywgY29uc3Qgc3RyaW5nJiBm
aWVsZF9uYW1lLAotICAgICAgICAgICAgICAgaW50IGluZGV4KSB7Ci0gICAgcmV0dXJuIEhhc1Nw
YW4oJ1wwJywgJ1wwJywgZGVzY3JpcHRvcl9wcm90bywgZmllbGRfbmFtZSwgaW5kZXgpOwotICB9
Ci0KLSAgYm9vbCBIYXNTcGFuV2l0aENvbW1lbnQoCi0gICAgICBjaGFyIHN0YXJ0X21hcmtlciwg
Y2hhciBlbmRfbWFya2VyLCBjb25zdCBNZXNzYWdlJiBkZXNjcmlwdG9yX3Byb3RvLAotICAgICAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4LAotICAgICAgY29uc3QgY2hh
ciogZXhwZWN0ZWRfbGVhZGluZ19jb21tZW50cywKLSAgICAgIGNvbnN0IGNoYXIqIGV4cGVjdGVk
X3RyYWlsaW5nX2NvbW1lbnRzLAotICAgICAgY29uc3QgY2hhciogZXhwZWN0ZWRfbGVhZGluZ19k
ZXRhY2hlZF9jb21tZW50cykgewotICAgIHBhaXI8U3Bhbk1hcDo6aXRlcmF0b3IsIFNwYW5NYXA6
Oml0ZXJhdG9yPiByYW5nZSA9Ci0gICAgICAgIHNwYW5zXy5lcXVhbF9yYW5nZShTcGFuS2V5KGRl
c2NyaXB0b3JfcHJvdG8sIGZpZWxkLCBpbmRleCkpOwotCi0gICAgaWYgKHN0YXJ0X21hcmtlciA9
PSAnXDAnKSB7Ci0gICAgICBpZiAocmFuZ2UuZmlyc3QgPT0gcmFuZ2Uuc2Vjb25kKSB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNwYW5zXy5lcmFzZShy
YW5nZS5maXJzdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICBwYWlyPGludCwgaW50PiBzdGFydF9wb3MgPSBGaW5kT3JEaWUobWFya2Vyc18sIHN0
YXJ0X21hcmtlcik7Ci0gICAgICBwYWlyPGludCwgaW50PiBlbmRfcG9zID0gRmluZE9yRGllKG1h
cmtlcnNfLCBlbmRfbWFya2VyKTsKLQotICAgICAgUmVwZWF0ZWRGaWVsZDxpbnQ+IGV4cGVjdGVk
X3NwYW47Ci0gICAgICBleHBlY3RlZF9zcGFuLkFkZChzdGFydF9wb3MuZmlyc3QpOwotICAgICAg
ZXhwZWN0ZWRfc3Bhbi5BZGQoc3RhcnRfcG9zLnNlY29uZCk7Ci0gICAgICBpZiAoZW5kX3Bvcy5m
aXJzdCAhPSBzdGFydF9wb3MuZmlyc3QpIHsKLSAgICAgICAgZXhwZWN0ZWRfc3Bhbi5BZGQoZW5k
X3Bvcy5maXJzdCk7Ci0gICAgICB9Ci0gICAgICBleHBlY3RlZF9zcGFuLkFkZChlbmRfcG9zLnNl
Y29uZCk7Ci0KLSAgICAgIGZvciAoU3Bhbk1hcDo6aXRlcmF0b3IgaXRlciA9IHJhbmdlLmZpcnN0
OyBpdGVyICE9IHJhbmdlLnNlY29uZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChDb21wYXJlU3Bh
bnMoZXhwZWN0ZWRfc3BhbiwgaXRlci0+c2Vjb25kLT5zcGFuKCkpKSB7Ci0gICAgICAgICAgaWYg
KGV4cGVjdGVkX2xlYWRpbmdfY29tbWVudHMgPT0gTlVMTCkgewotICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKGl0ZXItPnNlY29uZC0+aGFzX2xlYWRpbmdfY29tbWVudHMoKSk7Ci0gICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEVYUEVDVF9UUlVFKGl0ZXItPnNlY29uZC0+aGFzX2xlYWRp
bmdfY29tbWVudHMoKSk7Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfbGVhZGluZ19j
b21tZW50cywKLSAgICAgICAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQtPmxlYWRpbmdfY29t
bWVudHMoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChleHBlY3RlZF90cmFpbGluZ19j
b21tZW50cyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBFWFBFQ1RfRkFMU0UoaXRlci0+c2Vjb25k
LT5oYXNfdHJhaWxpbmdfY29tbWVudHMoKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKGl0ZXItPnNlY29uZC0+aGFzX3RyYWlsaW5nX2NvbW1lbnRzKCkpOwot
ICAgICAgICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkX3RyYWlsaW5nX2NvbW1lbnRzLAotICAgICAg
ICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZC0+dHJhaWxpbmdfY29tbWVudHMoKSk7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGlmIChleHBlY3RlZF9sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRz
ID09IE5VTEwpIHsKLSAgICAgICAgICAgIEVYUEVDVF9FUSgwLCBpdGVyLT5zZWNvbmQtPmxlYWRp
bmdfZGV0YWNoZWRfY29tbWVudHNfc2l6ZSgpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgRVhQRUNUX0VRKAotICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xlYWRpbmdfZGV0YWNo
ZWRfY29tbWVudHMsCi0gICAgICAgICAgICAgICAgSm9pbihpdGVyLT5zZWNvbmQtPmxlYWRpbmdf
ZGV0YWNoZWRfY29tbWVudHMoKSwgIlxuIikpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHNw
YW5zXy5lcmFzZShpdGVyKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgfQotCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSBwcml2YXRlOgotICBz
dHJ1Y3QgU3BhbktleSB7Ci0gICAgY29uc3QgTWVzc2FnZSogZGVzY3JpcHRvcl9wcm90bzsKLSAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkOwotICAgIGludCBpbmRleDsKLQotICAgIGlu
bGluZSBTcGFuS2V5KCkge30KLSAgICBpbmxpbmUgU3BhbktleShjb25zdCBNZXNzYWdlJiBkZXNj
cmlwdG9yX3Byb3RvX3BhcmFtLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGRfcGFyYW0sCi0gICAgICAgICAgICAgICAgICAgaW50IGluZGV4X3BhcmFtKQot
ICAgICAgICA6IGRlc2NyaXB0b3JfcHJvdG8oJmRlc2NyaXB0b3JfcHJvdG9fcGFyYW0pLCBmaWVs
ZChmaWVsZF9wYXJhbSksCi0gICAgICAgICAgaW5kZXgoaW5kZXhfcGFyYW0pIHt9Ci0KLSAgICBp
bmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgU3BhbktleSYgb3RoZXIpIGNvbnN0IHsKLSAgICAg
IGlmIChkZXNjcmlwdG9yX3Byb3RvIDwgb3RoZXIuZGVzY3JpcHRvcl9wcm90bykgcmV0dXJuIHRy
dWU7Ci0gICAgICBpZiAoZGVzY3JpcHRvcl9wcm90byA+IG90aGVyLmRlc2NyaXB0b3JfcHJvdG8p
IHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChmaWVsZCA8IG90aGVyLmZpZWxkKSByZXR1cm4gdHJ1
ZTsKLSAgICAgIGlmIChmaWVsZCA+IG90aGVyLmZpZWxkKSByZXR1cm4gZmFsc2U7Ci0gICAgICBy
ZXR1cm4gaW5kZXggPCBvdGhlci5pbmRleDsKLSAgICB9Ci0gIH07Ci0KLSAgdHlwZWRlZiBtdWx0
aW1hcDxTcGFuS2V5LCBjb25zdCBTb3VyY2VDb2RlSW5mbzo6TG9jYXRpb24qPiBTcGFuTWFwOwot
ICBTcGFuTWFwIHNwYW5zXzsKLSAgbWFwPGNoYXIsIHBhaXI8aW50LCBpbnQ+ID4gbWFya2Vyc187
Ci0gIHN0cmluZyB0ZXh0X3dpdGhvdXRfbWFya2Vyc187Ci0KLSAgdm9pZCBFeHRyYWN0TWFya2Vy
cyhjb25zdCBjaGFyKiB0ZXh0KSB7Ci0gICAgbWFya2Vyc18uY2xlYXIoKTsKLSAgICB0ZXh0X3dp
dGhvdXRfbWFya2Vyc18uY2xlYXIoKTsKLSAgICBpbnQgbGluZSA9IDA7Ci0gICAgaW50IGNvbHVt
biA9IDA7Ci0gICAgd2hpbGUgKCp0ZXh0ICE9ICdcMCcpIHsKLSAgICAgIGlmICgqdGV4dCA9PSAn
JCcpIHsKLSAgICAgICAgKyt0ZXh0OwotICAgICAgICBHT09HTEVfQ0hFQ0tfTkUoJ1wwJywgKnRl
eHQpOwotICAgICAgICBpZiAoKnRleHQgPT0gJyQnKSB7Ci0gICAgICAgICAgdGV4dF93aXRob3V0
X21hcmtlcnNfICs9ICckJzsKLSAgICAgICAgICArK2NvbHVtbjsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICBtYXJrZXJzX1sqdGV4dF0gPSBzdGQ6Om1ha2VfcGFpcihsaW5lLCBjb2x1bW4p
OwotICAgICAgICAgICsrdGV4dDsKLSAgICAgICAgICBHT09HTEVfQ0hFQ0tfRVEoJyQnLCAqdGV4
dCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoKnRleHQgPT0gJ1xuJykgewotICAgICAg
ICArK2xpbmU7Ci0gICAgICAgIGNvbHVtbiA9IDA7Ci0gICAgICAgIHRleHRfd2l0aG91dF9tYXJr
ZXJzXyArPSAqdGV4dDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRleHRfd2l0aG91dF9tYXJr
ZXJzXyArPSAqdGV4dDsKLSAgICAgICAgKytjb2x1bW47Ci0gICAgICB9Ci0gICAgICArK3RleHQ7
Ci0gICAgfQotICB9Ci19OwotCi1URVNUX0YoU291cmNlSW5mb1Rlc3QsIEJhc2ljRmlsZURlY2xz
KSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKAotICAgICAgIiRhJHN5bnRheCA9IFwicHJvdG8yXCI7
JGkkXG4iCi0gICAgICAicGFja2FnZSAkYiRmb28uYmFyJGMkO1xuIgotICAgICAgImltcG9ydCAk
ZCRcImJhei5wcm90b1wiJGUkO1xuIgotICAgICAgImltcG9ydCAkZiRcInF1eC5wcm90b1wiJGck
OyRoJFxuIgotICAgICAgIlxuIgotICAgICAgIi8vIGNvbW1lbnQgaWdub3JlZFxuIikpOwotCi0g
IEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2EnLCAnaCcsIGZpbGVfKSk7Ci0gIEVYUEVDVF9UUlVFKEhh
c1NwYW4oJ2InLCAnYycsIGZpbGVfLCAicGFja2FnZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bh
bignZCcsICdlJywgZmlsZV8sICJkZXBlbmRlbmN5IiwgMCkpOwotICBFWFBFQ1RfVFJVRShIYXNT
cGFuKCdmJywgJ2cnLCBmaWxlXywgImRlcGVuZGVuY3kiLCAxKSk7Ci0gIEVYUEVDVF9UUlVFKEhh
c1NwYW4oJ2EnLCAnaScsIGZpbGVfLCAic3ludGF4IikpOwotfQotCi1URVNUX0YoU291cmNlSW5m
b1Rlc3QsIE1lc3NhZ2VzKSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKAotICAgICAgIiRhJG1lc3Nh
Z2UgJGIkRm9vJGMkIHt9JGQkXG4iCi0gICAgICAiJGUkbWVzc2FnZSAkZiRCYXIkZyQge30kaCRc
biIpKTsKLQotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdhJywgJ2QnLCBmaWxlXy5tZXNzYWdlX3R5
cGUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignYicsICdjJywgZmlsZV8ubWVzc2FnZV90
eXBlKDApLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZScsICdoJywgZmlsZV8u
bWVzc2FnZV90eXBlKDEpKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2YnLCAnZycsIGZpbGVf
Lm1lc3NhZ2VfdHlwZSgxKSwgIm5hbWUiKSk7Ci0KLSAgLy8gSWdub3JlIHRoZXNlLgotICBFWFBF
Q1RfVFJVRShIYXNTcGFuKGZpbGVfKSk7Ci19Ci0KLVRFU1RfRihTb3VyY2VJbmZvVGVzdCwgRmll
bGRzKSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKAotICAgICAgIm1lc3NhZ2UgRm9vIHtcbiIKLSAg
ICAgICIgICRhJG9wdGlvbmFsJGIkICRjJGludDMyJGQkICRlJGJhciRmJCA9ICRnJDEkaCQ7JGkk
XG4iCi0gICAgICAiICAkaiRyZXBlYXRlZCRrJCAkbCRYLlkkbSQgJG4kYmF6JG8kID0gJHAkMiRx
JDskciRcbiIKLSAgICAgICJ9XG4iKSk7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8m
IGZpZWxkMSA9IGZpbGVfLm1lc3NhZ2VfdHlwZSgwKS5maWVsZCgwKTsKLSAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yUHJvdG8mIGZpZWxkMiA9IGZpbGVfLm1lc3NhZ2VfdHlwZSgwKS5maWVsZCgxKTsK
LQotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdhJywgJ2knLCBmaWVsZDEpKTsKLSAgRVhQRUNUX1RS
VUUoSGFzU3BhbignYScsICdiJywgZmllbGQxLCAibGFiZWwiKSk7Ci0gIEVYUEVDVF9UUlVFKEhh
c1NwYW4oJ2MnLCAnZCcsIGZpZWxkMSwgInR5cGUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4o
J2UnLCAnZicsIGZpZWxkMSwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2cnLCAn
aCcsIGZpZWxkMSwgIm51bWJlciIpKTsKLQotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdqJywgJ3In
LCBmaWVsZDIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignaicsICdrJywgZmllbGQyLCAibGFi
ZWwiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2wnLCAnbScsIGZpZWxkMiwgInR5cGVfbmFt
ZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignbicsICdvJywgZmllbGQyLCAibmFtZSIpKTsK
LSAgRVhQRUNUX1RSVUUoSGFzU3BhbigncCcsICdxJywgZmllbGQyLCAibnVtYmVyIikpOwotCi0g
IC8vIElnbm9yZSB0aGVzZS4KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXykpOwotICBFWFBF
Q1RfVFJVRShIYXNTcGFuKGZpbGVfLm1lc3NhZ2VfdHlwZSgwKSkpOwotICBFWFBFQ1RfVFJVRShI
YXNTcGFuKGZpbGVfLm1lc3NhZ2VfdHlwZSgwKSwgIm5hbWUiKSk7Ci19Ci0KLVRFU1RfRihTb3Vy
Y2VJbmZvVGVzdCwgRXh0ZW5zaW9ucykgewotICBFWFBFQ1RfVFJVRShQYXJzZSgKLSAgICAgICIk
YSRleHRlbmQgJGIkRm9vJGMkIHtcbiIKLSAgICAgICIgICRkJG9wdGlvbmFsJGUkIGludDMyIGJh
ciA9IDE7JGYkXG4iCi0gICAgICAiICAkZyRyZXBlYXRlZCRoJCBYLlkgYmF6ID0gMjskaSRcbiIK
LSAgICAgICJ9JGokXG4iCi0gICAgICAiJGskZXh0ZW5kICRsJEJhciRtJCB7XG4iCi0gICAgICAi
ICAkbiRvcHRpb25hbCBpbnQzMiBxdXggPSAxOyRvJFxuIgotICAgICAgIn0kcCRcbiIpKTsKLQot
ICBjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgZmllbGQxID0gZmlsZV8uZXh0ZW5zaW9uKDAp
OwotICBjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgZmllbGQyID0gZmlsZV8uZXh0ZW5zaW9u
KDEpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgZmllbGQzID0gZmlsZV8uZXh0ZW5z
aW9uKDIpOwotCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2EnLCAnaicsIGZpbGVfLCAiZXh0ZW5z
aW9uIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdrJywgJ3AnLCBmaWxlXywgImV4dGVuc2lv
biIpKTsKLQotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdkJywgJ2YnLCBmaWVsZDEpKTsKLSAgRVhQ
RUNUX1RSVUUoSGFzU3BhbignZCcsICdlJywgZmllbGQxLCAibGFiZWwiKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oJ2InLCAnYycsIGZpZWxkMSwgImV4dGVuZGVlIikpOwotCi0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oJ2cnLCAnaScsIGZpZWxkMikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdn
JywgJ2gnLCBmaWVsZDIsICJsYWJlbCIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignYicsICdj
JywgZmllbGQyLCAiZXh0ZW5kZWUiKSk7Ci0KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignbicsICdv
JywgZmllbGQzKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2wnLCAnbScsIGZpZWxkMywgImV4
dGVuZGVlIikpOwotCi0gIC8vIElnbm9yZSB0aGVzZS4KLSAgRVhQRUNUX1RSVUUoSGFzU3Bhbihm
aWxlXykpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpZWxkMSwgInR5cGUiKSk7Ci0gIEVYUEVD
VF9UUlVFKEhhc1NwYW4oZmllbGQxLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bhbihm
aWVsZDEsICJudW1iZXIiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmllbGQyLCAidHlwZV9u
YW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpZWxkMiwgIm5hbWUiKSk7Ci0gIEVYUEVD
VF9UUlVFKEhhc1NwYW4oZmllbGQyLCAibnVtYmVyIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFu
KGZpZWxkMywgImxhYmVsIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpZWxkMywgInR5cGUi
KSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmllbGQzLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RS
VUUoSGFzU3BhbihmaWVsZDMsICJudW1iZXIiKSk7Ci19Ci0KLVRFU1RfRihTb3VyY2VJbmZvVGVz
dCwgTmVzdGVkRXh0ZW5zaW9ucykgewotICBFWFBFQ1RfVFJVRShQYXJzZSgKLSAgICAgICJtZXNz
YWdlIE1lc3NhZ2Uge1xuIgotICAgICAgIiAgJGEkZXh0ZW5kICRiJEZvbyRjJCB7XG4iCi0gICAg
ICAiICAgICRkJG9wdGlvbmFsJGUkIGludDMyIGJhciA9IDE7JGYkXG4iCi0gICAgICAiICAgICRn
JHJlcGVhdGVkJGgkIFguWSBiYXogPSAyOyRpJFxuIgotICAgICAgIiAgfSRqJFxuIgotICAgICAg
IiAgJGskZXh0ZW5kICRsJEJhciRtJCB7XG4iCi0gICAgICAiICAgICRuJG9wdGlvbmFsIGludDMy
IHF1eCA9IDE7JG8kXG4iCi0gICAgICAiICB9JHAkXG4iCi0gICAgICAifVxuIikpOwotCi0gIGNv
bnN0IEZpZWxkRGVzY3JpcHRvclByb3RvJiBmaWVsZDEgPSBmaWxlXy5tZXNzYWdlX3R5cGUoMCku
ZXh0ZW5zaW9uKDApOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgZmllbGQyID0gZmls
ZV8ubWVzc2FnZV90eXBlKDApLmV4dGVuc2lvbigxKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9y
UHJvdG8mIGZpZWxkMyA9IGZpbGVfLm1lc3NhZ2VfdHlwZSgwKS5leHRlbnNpb24oMik7Ci0KLSAg
RVhQRUNUX1RSVUUoSGFzU3BhbignYScsICdqJywgZmlsZV8ubWVzc2FnZV90eXBlKDApLCAiZXh0
ZW5zaW9uIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdrJywgJ3AnLCBmaWxlXy5tZXNzYWdl
X3R5cGUoMCksICJleHRlbnNpb24iKSk7Ci0KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZCcsICdm
JywgZmllbGQxKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2QnLCAnZScsIGZpZWxkMSwgImxh
YmVsIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdiJywgJ2MnLCBmaWVsZDEsICJleHRlbmRl
ZSIpKTsKLQotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdnJywgJ2knLCBmaWVsZDIpKTsKLSAgRVhQ
RUNUX1RSVUUoSGFzU3BhbignZycsICdoJywgZmllbGQyLCAibGFiZWwiKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oJ2InLCAnYycsIGZpZWxkMiwgImV4dGVuZGVlIikpOwotCi0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oJ24nLCAnbycsIGZpZWxkMykpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCds
JywgJ20nLCBmaWVsZDMsICJleHRlbmRlZSIpKTsKLQotICAvLyBJZ25vcmUgdGhlc2UuCi0gIEVY
UEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8pKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5t
ZXNzYWdlX3R5cGUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5tZXNzYWdlX3R5
cGUoMCksICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpZWxkMSwgInR5cGUiKSk7
Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmllbGQxLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUo
SGFzU3BhbihmaWVsZDEsICJudW1iZXIiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmllbGQy
LCAidHlwZV9uYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpZWxkMiwgIm5hbWUiKSk7
Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmllbGQyLCAibnVtYmVyIikpOwotICBFWFBFQ1RfVFJV
RShIYXNTcGFuKGZpZWxkMywgImxhYmVsIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpZWxk
MywgInR5cGUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmllbGQzLCAibmFtZSIpKTsKLSAg
RVhQRUNUX1RSVUUoSGFzU3BhbihmaWVsZDMsICJudW1iZXIiKSk7Ci19Ci0KLVRFU1RfRihTb3Vy
Y2VJbmZvVGVzdCwgRXh0ZW5zaW9uUmFuZ2VzKSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKAotICAg
ICAgIm1lc3NhZ2UgTWVzc2FnZSB7XG4iCi0gICAgICAiICAkYSRleHRlbnNpb25zICRiJDEkYyQg
dG8gJGQkNCRlJCwgJGYkNiRnJDskaCRcbiIKLSAgICAgICIgICRpJGV4dGVuc2lvbnMgJGokOCRr
JCB0byAkbCRtYXgkbSQ7JG4kXG4iCi0gICAgICAifVxuIikpOwotCi0gIGNvbnN0IERlc2NyaXB0
b3JQcm90bzo6RXh0ZW5zaW9uUmFuZ2UmIHJhbmdlMSA9Ci0gICAgICBmaWxlXy5tZXNzYWdlX3R5
cGUoMCkuZXh0ZW5zaW9uX3JhbmdlKDApOwotICBjb25zdCBEZXNjcmlwdG9yUHJvdG86OkV4dGVu
c2lvblJhbmdlJiByYW5nZTIgPQotICAgICAgZmlsZV8ubWVzc2FnZV90eXBlKDApLmV4dGVuc2lv
bl9yYW5nZSgxKTsKLSAgY29uc3QgRGVzY3JpcHRvclByb3RvOjpFeHRlbnNpb25SYW5nZSYgcmFu
Z2UzID0KLSAgICAgIGZpbGVfLm1lc3NhZ2VfdHlwZSgwKS5leHRlbnNpb25fcmFuZ2UoMik7Ci0K
LSAgRVhQRUNUX1RSVUUoSGFzU3BhbignYScsICdoJywgZmlsZV8ubWVzc2FnZV90eXBlKDApLCAi
ZXh0ZW5zaW9uX3JhbmdlIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdpJywgJ24nLCBmaWxl
Xy5tZXNzYWdlX3R5cGUoMCksICJleHRlbnNpb25fcmFuZ2UiKSk7Ci0KLSAgRVhQRUNUX1RSVUUo
SGFzU3BhbignYicsICdlJywgcmFuZ2UxKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2InLCAn
YycsIHJhbmdlMSwgInN0YXJ0IikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdkJywgJ2UnLCBy
YW5nZTEsICJlbmQiKSk7Ci0KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZicsICdnJywgcmFuZ2Uy
KSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2YnLCAnZycsIHJhbmdlMiwgInN0YXJ0IikpOwot
ICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdmJywgJ2cnLCByYW5nZTIsICJlbmQiKSk7Ci0KLSAgRVhQ
RUNUX1RSVUUoSGFzU3BhbignaicsICdtJywgcmFuZ2UzKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1Nw
YW4oJ2onLCAnaycsIHJhbmdlMywgInN0YXJ0IikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCds
JywgJ20nLCByYW5nZTMsICJlbmQiKSk7Ci0KLSAgLy8gSWdub3JlIHRoZXNlLgotICBFWFBFQ1Rf
VFJVRShIYXNTcGFuKGZpbGVfKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8ubWVzc2Fn
ZV90eXBlKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8ubWVzc2FnZV90eXBlKDAp
LCAibmFtZSIpKTsKLX0KLQotVEVTVF9GKFNvdXJjZUluZm9UZXN0LCBPbmVvZnMpIHsKLSAgRVhQ
RUNUX1RSVUUoUGFyc2UoCi0gICAgICAibWVzc2FnZSBGb28ge1xuIgotICAgICAgIiAgJGEkb25l
b2YgJGMkZm9vJGQkIHtcbiIKLSAgICAgICIgICAgJGUkaW50MzIkZiQgJGckYSRoJCA9ICRpJDEk
aiQ7JGskXG4iCi0gICAgICAiICB9JHIkXG4iCi0gICAgICAifVxuIikpOwotCi0gIGNvbnN0IE9u
ZW9mRGVzY3JpcHRvclByb3RvJiBvbmVvZl9kZWNsID0gZmlsZV8ubWVzc2FnZV90eXBlKDApLm9u
ZW9mX2RlY2woMCk7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvJiBmaWVsZCA9IGZpbGVf
Lm1lc3NhZ2VfdHlwZSgwKS5maWVsZCgwKTsKLQotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdhJywg
J3InLCBvbmVvZl9kZWNsKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2MnLCAnZCcsIG9uZW9m
X2RlY2wsICJuYW1lIikpOwotCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2UnLCAnaycsIGZpZWxk
KSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2UnLCAnZicsIGZpZWxkLCAidHlwZSIpKTsKLSAg
RVhQRUNUX1RSVUUoSGFzU3BhbignZycsICdoJywgZmllbGQsICJuYW1lIikpOwotICBFWFBFQ1Rf
VFJVRShIYXNTcGFuKCdpJywgJ2onLCBmaWVsZCwgIm51bWJlciIpKTsKLQotICAvLyBJZ25vcmUg
dGhlc2UuCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8pKTsKLSAgRVhQRUNUX1RSVUUoSGFz
U3BhbihmaWxlXy5tZXNzYWdlX3R5cGUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxl
Xy5tZXNzYWdlX3R5cGUoMCksICJuYW1lIikpOwotfQotCi1URVNUX0YoU291cmNlSW5mb1Rlc3Qs
IE5lc3RlZE1lc3NhZ2VzKSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKAotICAgICAgIm1lc3NhZ2Ug
Rm9vIHtcbiIKLSAgICAgICIgICRhJG1lc3NhZ2UgJGIkQmFyJGMkIHtcbiIKLSAgICAgICIgICAg
JGQkbWVzc2FnZSAkZSRCYXokZiQge30kZyRcbiIKLSAgICAgICIgIH0kaCRcbiIKLSAgICAgICIg
ICRpJG1lc3NhZ2UgJGokUXV4JGskIHt9JGwkXG4iCi0gICAgICAifVxuIikpOwotCi0gIGNvbnN0
IERlc2NyaXB0b3JQcm90byYgYmFyID0gZmlsZV8ubWVzc2FnZV90eXBlKDApLm5lc3RlZF90eXBl
KDApOwotICBjb25zdCBEZXNjcmlwdG9yUHJvdG8mIGJheiA9IGJhci5uZXN0ZWRfdHlwZSgwKTsK
LSAgY29uc3QgRGVzY3JpcHRvclByb3RvJiBxdXggPSBmaWxlXy5tZXNzYWdlX3R5cGUoMCkubmVz
dGVkX3R5cGUoMSk7Ci0KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignYScsICdoJywgYmFyKSk7Ci0g
IEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2InLCAnYycsIGJhciwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oJ2QnLCAnZycsIGJheikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdlJywg
J2YnLCBiYXosICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdpJywgJ2wnLCBxdXgp
KTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignaicsICdrJywgcXV4LCAibmFtZSIpKTsKLQotICAv
LyBJZ25vcmUgdGhlc2UuCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8pKTsKLSAgRVhQRUNU
X1RSVUUoSGFzU3BhbihmaWxlXy5tZXNzYWdlX3R5cGUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFz
U3BhbihmaWxlXy5tZXNzYWdlX3R5cGUoMCksICJuYW1lIikpOwotfQotCi1URVNUX0YoU291cmNl
SW5mb1Rlc3QsIEdyb3VwcykgewotICBFWFBFQ1RfVFJVRShQYXJzZSgKLSAgICAgICJtZXNzYWdl
IEZvbyB7XG4iCi0gICAgICAiICBtZXNzYWdlIEJhciB7fVxuIgotICAgICAgIiAgJGEkb3B0aW9u
YWwkYiQgJGMkZ3JvdXAkZCQgJGUkQmF6JGYkID0gJGckMSRoJCB7XG4iCi0gICAgICAiICAgICRp
JG1lc3NhZ2UgUXV4IHt9JGokXG4iCi0gICAgICAiICB9JGskXG4iCi0gICAgICAifVxuIikpOwot
Ci0gIGNvbnN0IERlc2NyaXB0b3JQcm90byYgYmFyID0gZmlsZV8ubWVzc2FnZV90eXBlKDApLm5l
c3RlZF90eXBlKDApOwotICBjb25zdCBEZXNjcmlwdG9yUHJvdG8mIGJheiA9IGZpbGVfLm1lc3Nh
Z2VfdHlwZSgwKS5uZXN0ZWRfdHlwZSgxKTsKLSAgY29uc3QgRGVzY3JpcHRvclByb3RvJiBxdXgg
PSBiYXoubmVzdGVkX3R5cGUoMCk7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvJiBmaWVs
ZCA9IGZpbGVfLm1lc3NhZ2VfdHlwZSgwKS5maWVsZCgwKTsKLQotICBFWFBFQ1RfVFJVRShIYXNT
cGFuKCdhJywgJ2snLCBmaWVsZCkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdhJywgJ2InLCBm
aWVsZCwgImxhYmVsIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdjJywgJ2QnLCBmaWVsZCwg
InR5cGUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2UnLCAnZicsIGZpZWxkLCAibmFtZSIp
KTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZScsICdmJywgZmllbGQsICJ0eXBlX25hbWUiKSk7
Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2cnLCAnaCcsIGZpZWxkLCAibnVtYmVyIikpOwotCi0g
IEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2EnLCAnaycsIGJheikpOwotICBFWFBFQ1RfVFJVRShIYXNT
cGFuKCdlJywgJ2YnLCBiYXosICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdpJywg
J2onLCBxdXgpKTsKLQotICAvLyBJZ25vcmUgdGhlc2UuCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4o
ZmlsZV8pKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5tZXNzYWdlX3R5cGUoMCkpKTsK
LSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5tZXNzYWdlX3R5cGUoMCksICJuYW1lIikpOwot
ICBFWFBFQ1RfVFJVRShIYXNTcGFuKGJhcikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGJhciwg
Im5hbWUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4ocXV4LCAibmFtZSIpKTsKLX0KLQotVEVT
VF9GKFNvdXJjZUluZm9UZXN0LCBFbnVtcykgewotICBFWFBFQ1RfVFJVRShQYXJzZSgKLSAgICAg
ICIkYSRlbnVtICRiJEZvbyRjJCB7fSRkJFxuIgotICAgICAgIiRlJGVudW0gJGYkQmFyJGckIHt9
JGgkXG4iKSk7Ci0KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignYScsICdkJywgZmlsZV8uZW51bV90
eXBlKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2InLCAnYycsIGZpbGVfLmVudW1fdHlw
ZSgwKSwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2UnLCAnaCcsIGZpbGVfLmVu
dW1fdHlwZSgxKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdmJywgJ2cnLCBmaWxlXy5lbnVt
X3R5cGUoMSksICJuYW1lIikpOwotCi0gIC8vIElnbm9yZSB0aGVzZS4KLSAgRVhQRUNUX1RSVUUo
SGFzU3BhbihmaWxlXykpOwotfQotCi1URVNUX0YoU291cmNlSW5mb1Rlc3QsIEVudW1WYWx1ZXMp
IHsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoCi0gICAgICAiZW51bSBGb28ge1xuIgotICAgICAgIiAg
JGEkQkFSJGIkID0gJGMkMSRkJDskZSRcbiIKLSAgICAgICIgICRmJEJBWiRnJCA9ICRoJDIkaSQ7
JGokXG4iCi0gICAgICAifSIpKTsKLQotICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8m
IGJhciA9IGZpbGVfLmVudW1fdHlwZSgwKS52YWx1ZSgwKTsKLSAgY29uc3QgRW51bVZhbHVlRGVz
Y3JpcHRvclByb3RvJiBiYXogPSBmaWxlXy5lbnVtX3R5cGUoMCkudmFsdWUoMSk7Ci0KLSAgRVhQ
RUNUX1RSVUUoSGFzU3BhbignYScsICdlJywgYmFyKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4o
J2EnLCAnYicsIGJhciwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2MnLCAnZCcs
IGJhciwgIm51bWJlciIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZicsICdqJywgYmF6KSk7
Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2YnLCAnZycsIGJheiwgIm5hbWUiKSk7Ci0gIEVYUEVD
VF9UUlVFKEhhc1NwYW4oJ2gnLCAnaScsIGJheiwgIm51bWJlciIpKTsKLQotICAvLyBJZ25vcmUg
dGhlc2UuCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8pKTsKLSAgRVhQRUNUX1RSVUUoSGFz
U3BhbihmaWxlXy5lbnVtX3R5cGUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5l
bnVtX3R5cGUoMCksICJuYW1lIikpOwotfQotCi1URVNUX0YoU291cmNlSW5mb1Rlc3QsIE5lc3Rl
ZEVudW1zKSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKAotICAgICAgIm1lc3NhZ2UgRm9vIHtcbiIK
LSAgICAgICIgICRhJGVudW0gJGIkQmFyJGMkIHt9JGQkXG4iCi0gICAgICAiICAkZSRlbnVtICRm
JEJheiRnJCB7fSRoJFxuIgotICAgICAgIn1cbiIpKTsKLQotICBjb25zdCBFbnVtRGVzY3JpcHRv
clByb3RvJiBiYXIgPSBmaWxlXy5tZXNzYWdlX3R5cGUoMCkuZW51bV90eXBlKDApOwotICBjb25z
dCBFbnVtRGVzY3JpcHRvclByb3RvJiBiYXogPSBmaWxlXy5tZXNzYWdlX3R5cGUoMCkuZW51bV90
eXBlKDEpOwotCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2EnLCAnZCcsIGJhcikpOwotICBFWFBF
Q1RfVFJVRShIYXNTcGFuKCdiJywgJ2MnLCBiYXIsICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShI
YXNTcGFuKCdlJywgJ2gnLCBiYXopKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZicsICdnJywg
YmF6LCAibmFtZSIpKTsKLQotICAvLyBJZ25vcmUgdGhlc2UuCi0gIEVYUEVDVF9UUlVFKEhhc1Nw
YW4oZmlsZV8pKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5tZXNzYWdlX3R5cGUoMCkp
KTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5tZXNzYWdlX3R5cGUoMCksICJuYW1lIikp
OwotfQotCi1URVNUX0YoU291cmNlSW5mb1Rlc3QsIFNlcnZpY2VzKSB7Ci0gIEVYUEVDVF9UUlVF
KFBhcnNlKAotICAgICAgIiRhJHNlcnZpY2UgJGIkRm9vJGMkIHt9JGQkXG4iCi0gICAgICAiJGUk
c2VydmljZSAkZiRCYXIkZyQge30kaCRcbiIpKTsKLQotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdh
JywgJ2QnLCBmaWxlXy5zZXJ2aWNlKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2InLCAn
YycsIGZpbGVfLnNlcnZpY2UoMCksICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdl
JywgJ2gnLCBmaWxlXy5zZXJ2aWNlKDEpKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2YnLCAn
ZycsIGZpbGVfLnNlcnZpY2UoMSksICJuYW1lIikpOwotCi0gIC8vIElnbm9yZSB0aGVzZS4KLSAg
RVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXykpOwotfQotCi1URVNUX0YoU291cmNlSW5mb1Rlc3Qs
IE1ldGhvZHNBbmRTdHJlYW1zKSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKAotICAgICAgInNlcnZp
Y2UgRm9vIHtcbiIKLSAgICAgICIgICRhJHJwYyAkYiRCYXIkYyQoJGQkWCRlJCkgcmV0dXJucygk
ZiRZJGckKTskaCQiCi0gICAgICAiICAkaSRycGMgJGokQmF6JGskKCRsJFokbSQpIHJldHVybnMo
JG4kVyRvJCk7JHAkIgotICAgICAgIn0iKSk7Ci0KLSAgY29uc3QgTWV0aG9kRGVzY3JpcHRvclBy
b3RvJiBiYXIgPSBmaWxlXy5zZXJ2aWNlKDApLm1ldGhvZCgwKTsKLSAgY29uc3QgTWV0aG9kRGVz
Y3JpcHRvclByb3RvJiBiYXogPSBmaWxlXy5zZXJ2aWNlKDApLm1ldGhvZCgxKTsKLQotICBFWFBF
Q1RfVFJVRShIYXNTcGFuKCdhJywgJ2gnLCBiYXIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bhbign
YicsICdjJywgYmFyLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZCcsICdlJywg
YmFyLCAiaW5wdXRfdHlwZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZicsICdnJywgYmFy
LCAib3V0cHV0X3R5cGUiKSk7Ci0KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignaScsICdwJywgYmF6
KSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2onLCAnaycsIGJheiwgIm5hbWUiKSk7Ci0gIEVY
UEVDVF9UUlVFKEhhc1NwYW4oJ2wnLCAnbScsIGJheiwgImlucHV0X3R5cGUiKSk7Ci0gIEVYUEVD
VF9UUlVFKEhhc1NwYW4oJ24nLCAnbycsIGJheiwgIm91dHB1dF90eXBlIikpOwotCi0gIC8vIEln
bm9yZSB0aGVzZS4KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXykpOwotICBFWFBFQ1RfVFJV
RShIYXNTcGFuKGZpbGVfLnNlcnZpY2UoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxl
Xy5zZXJ2aWNlKDApLCAibmFtZSIpKTsKLX0KLQotCi1URVNUX0YoU291cmNlSW5mb1Rlc3QsIE9w
dGlvbnMpIHsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoCi0gICAgICAiJGEkb3B0aW9uICRiJGZvbyRj
JC4kZCQoJGUkYmFyLmJheiRmJCkkZyQgPSAiCi0gICAgICAgICAgIiRoJDEyMyRpJDskaiRcbiIK
LSAgICAgICIkayRvcHRpb24gcXV4ID0gJGwkLTEyMyRtJDskbiRcbiIKLSAgICAgICIkbyRvcHRp
b24gY29yZ2UgPSAkcCRhYmMkcSQ7JHIkXG4iCi0gICAgICAiJHMkb3B0aW9uIGdyYXVsdCA9ICR0
JCdibGFoJyR1JDskdiRcbiIKLSAgICAgICIkdyRvcHRpb24gZ2FycGx5ID0gJHgkeyB5YWRkYSB5
YWRkYSB9JHkkOyR6JFxuIgotICAgICAgIiQwJG9wdGlvbiB3YWxkbyA9ICQxJDEyMy4wJDIkOyQz
JFxuIgotICApKTsKLQotICBjb25zdCBVbmludGVycHJldGVkT3B0aW9uJiBvcHRpb24xID0gZmls
ZV8ub3B0aW9ucygpLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDApOwotICBjb25zdCBVbmludGVycHJl
dGVkT3B0aW9uJiBvcHRpb24yID0gZmlsZV8ub3B0aW9ucygpLnVuaW50ZXJwcmV0ZWRfb3B0aW9u
KDEpOwotICBjb25zdCBVbmludGVycHJldGVkT3B0aW9uJiBvcHRpb24zID0gZmlsZV8ub3B0aW9u
cygpLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDIpOwotICBjb25zdCBVbmludGVycHJldGVkT3B0aW9u
JiBvcHRpb240ID0gZmlsZV8ub3B0aW9ucygpLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDMpOwotICBj
b25zdCBVbmludGVycHJldGVkT3B0aW9uJiBvcHRpb241ID0gZmlsZV8ub3B0aW9ucygpLnVuaW50
ZXJwcmV0ZWRfb3B0aW9uKDQpOwotICBjb25zdCBVbmludGVycHJldGVkT3B0aW9uJiBvcHRpb242
ID0gZmlsZV8ub3B0aW9ucygpLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDUpOwotCi0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oJ2EnLCAnaicsIGZpbGVfLm9wdGlvbnMoKSkpOwotICBFWFBFQ1RfVFJVRShI
YXNTcGFuKCdhJywgJ2onLCBvcHRpb24xKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2InLCAn
ZycsIG9wdGlvbjEsICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdiJywgJ2MnLCBv
cHRpb24xLm5hbWUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignYicsICdjJywgb3B0aW9u
MS5uYW1lKDApLCAibmFtZV9wYXJ0IikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdkJywgJ2cn
LCBvcHRpb24xLm5hbWUoMSkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZScsICdmJywgb3B0
aW9uMS5uYW1lKDEpLCAibmFtZV9wYXJ0IikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdoJywg
J2knLCBvcHRpb24xLCAicG9zaXRpdmVfaW50X3ZhbHVlIikpOwotCi0gIEVYUEVDVF9UUlVFKEhh
c1NwYW4oJ2snLCAnbicsIGZpbGVfLm9wdGlvbnMoKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFu
KCdsJywgJ20nLCBvcHRpb24yLCAibmVnYXRpdmVfaW50X3ZhbHVlIikpOwotCi0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oJ28nLCAncicsIGZpbGVfLm9wdGlvbnMoKSkpOwotICBFWFBFQ1RfVFJVRShI
YXNTcGFuKCdwJywgJ3EnLCBvcHRpb24zLCAiaWRlbnRpZmllcl92YWx1ZSIpKTsKLQotICBFWFBF
Q1RfVFJVRShIYXNTcGFuKCdzJywgJ3YnLCBmaWxlXy5vcHRpb25zKCkpKTsKLSAgRVhQRUNUX1RS
VUUoSGFzU3BhbigndCcsICd1Jywgb3B0aW9uNCwgInN0cmluZ192YWx1ZSIpKTsKLQotICBFWFBF
Q1RfVFJVRShIYXNTcGFuKCd3JywgJ3onLCBmaWxlXy5vcHRpb25zKCkpKTsKLSAgRVhQRUNUX1RS
VUUoSGFzU3BhbigneCcsICd5Jywgb3B0aW9uNSwgImFnZ3JlZ2F0ZV92YWx1ZSIpKTsKLQotICBF
WFBFQ1RfVFJVRShIYXNTcGFuKCcwJywgJzMnLCBmaWxlXy5vcHRpb25zKCkpKTsKLSAgRVhQRUNU
X1RSVUUoSGFzU3BhbignMScsICcyJywgb3B0aW9uNiwgImRvdWJsZV92YWx1ZSIpKTsKLQotICAv
LyBJZ25vcmUgdGhlc2UuCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8pKTsKLSAgRVhQRUNU
X1RSVUUoSGFzU3BhbihvcHRpb24yKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4ob3B0aW9uMykp
OwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjQpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bh
bihvcHRpb241KSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4ob3B0aW9uNikpOwotICBFWFBFQ1Rf
VFJVRShIYXNTcGFuKG9wdGlvbjIsICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9w
dGlvbjMsICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjQsICJuYW1lIikp
OwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjUsICJuYW1lIikpOwotICBFWFBFQ1RfVFJV
RShIYXNTcGFuKG9wdGlvbjYsICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlv
bjIubmFtZSgwKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjMubmFtZSgwKSkpOwot
ICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjQubmFtZSgwKSkpOwotICBFWFBFQ1RfVFJVRShI
YXNTcGFuKG9wdGlvbjUubmFtZSgwKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjYu
bmFtZSgwKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjIubmFtZSgwKSwgIm5hbWVf
cGFydCIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihvcHRpb24zLm5hbWUoMCksICJuYW1lX3Bh
cnQiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4ob3B0aW9uNC5uYW1lKDApLCAibmFtZV9wYXJ0
IikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjUubmFtZSgwKSwgIm5hbWVfcGFydCIp
KTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihvcHRpb242Lm5hbWUoMCksICJuYW1lX3BhcnQiKSk7
Ci19Ci0KLVRFU1RfRihTb3VyY2VJbmZvVGVzdCwgU2NvcGVkT3B0aW9ucykgewotICBFWFBFQ1Rf
VFJVRShQYXJzZSgKLSAgICAibWVzc2FnZSBGb28ge1xuIgotICAgICIgICRhJG9wdGlvbiBtb3B0
ID0gMTskYiRcbiIKLSAgICAifVxuIgotICAgICJlbnVtIEJhciB7XG4iCi0gICAgIiAgJGMkb3B0
aW9uIGVvcHQgPSAxOyRkJFxuIgotICAgICJ9XG4iCi0gICAgInNlcnZpY2UgQmF6IHtcbiIKLSAg
ICAiICAkZSRvcHRpb24gc29wdCA9IDE7JGYkXG4iCi0gICAgIiAgcnBjIE0oWCkgcmV0dXJucyhZ
KSB7XG4iCi0gICAgIiAgICAkZyRvcHRpb24gbW9wdCA9IDE7JGgkXG4iCi0gICAgIiAgfVxuIgot
ICAgICIgIHJwYyBNUzQoJDEkc3RyZWFtJDIkIFgpIHJldHVybnMoJDMkc3RyZWFtJDQkIFkpIHtc
biIKLSAgICAiICAgICRrJG9wdGlvbiBtb3B0ID0gMTskbCRcbiIKLSAgICAiICB9XG4iCi0gICAg
In1cbiIpKTsKLQotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdhJywgJ2InLCBmaWxlXy5tZXNzYWdl
X3R5cGUoMCkub3B0aW9ucygpKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2MnLCAnZCcsIGZp
bGVfLmVudW1fdHlwZSgwKS5vcHRpb25zKCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZScs
ICdmJywgZmlsZV8uc2VydmljZSgwKS5vcHRpb25zKCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bh
bignZycsICdoJywgZmlsZV8uc2VydmljZSgwKS5tZXRob2QoMCkub3B0aW9ucygpKSk7Ci0KLSAg
Ly8gSWdub3JlIHRoZXNlLgotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpbGVfKSk7Ci0gIEVYUEVD
VF9UUlVFKEhhc1NwYW4oZmlsZV8ubWVzc2FnZV90eXBlKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhh
c1NwYW4oZmlsZV8ubWVzc2FnZV90eXBlKDApLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFz
U3BhbihmaWxlXy5tZXNzYWdlX3R5cGUoMCkub3B0aW9ucygpCi0gICAgICAgICAgICAgICAgICAg
ICAgLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmls
ZV8ubWVzc2FnZV90eXBlKDApLm9wdGlvbnMoKQotICAgICAgICAgICAgICAgICAgICAgIC51bmlu
dGVycHJldGVkX29wdGlvbigwKSwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmls
ZV8ubWVzc2FnZV90eXBlKDApLm9wdGlvbnMoKQotICAgICAgICAgICAgICAgICAgICAgIC51bmlu
dGVycHJldGVkX29wdGlvbigwKS5uYW1lKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmls
ZV8ubWVzc2FnZV90eXBlKDApLm9wdGlvbnMoKQotICAgICAgICAgICAgICAgICAgICAgIC51bmlu
dGVycHJldGVkX29wdGlvbigwKS5uYW1lKDApLCAibmFtZV9wYXJ0IikpOwotICBFWFBFQ1RfVFJV
RShIYXNTcGFuKGZpbGVfLm1lc3NhZ2VfdHlwZSgwKS5vcHRpb25zKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAudW5pbnRlcnByZXRlZF9vcHRpb24oMCksICJwb3NpdGl2ZV9pbnRfdmFsdWUiKSk7
Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8uZW51bV90eXBlKDApKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oZmlsZV8uZW51bV90eXBlKDApLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUo
SGFzU3BhbihmaWxlXy5lbnVtX3R5cGUoMCkub3B0aW9ucygpCi0gICAgICAgICAgICAgICAgICAg
ICAgLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmls
ZV8uZW51bV90eXBlKDApLm9wdGlvbnMoKQotICAgICAgICAgICAgICAgICAgICAgIC51bmludGVy
cHJldGVkX29wdGlvbigwKSwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8u
ZW51bV90eXBlKDApLm9wdGlvbnMoKQotICAgICAgICAgICAgICAgICAgICAgIC51bmludGVycHJl
dGVkX29wdGlvbigwKS5uYW1lKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8uZW51
bV90eXBlKDApLm9wdGlvbnMoKQotICAgICAgICAgICAgICAgICAgICAgIC51bmludGVycHJldGVk
X29wdGlvbigwKS5uYW1lKDApLCAibmFtZV9wYXJ0IikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFu
KGZpbGVfLmVudW1fdHlwZSgwKS5vcHRpb25zKCkKLSAgICAgICAgICAgICAgICAgICAgICAudW5p
bnRlcnByZXRlZF9vcHRpb24oMCksICJwb3NpdGl2ZV9pbnRfdmFsdWUiKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oZmlsZV8uc2VydmljZSgwKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZp
bGVfLnNlcnZpY2UoMCksICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpbGVfLnNl
cnZpY2UoMCkubWV0aG9kKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8uc2Vydmlj
ZSgwKS5vcHRpb25zKCkKLSAgICAgICAgICAgICAgICAgICAgICAudW5pbnRlcnByZXRlZF9vcHRp
b24oMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5zZXJ2aWNlKDApLm9wdGlvbnMo
KQotICAgICAgICAgICAgICAgICAgICAgIC51bmludGVycHJldGVkX29wdGlvbigwKSwgIm5hbWUi
KSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8uc2VydmljZSgwKS5vcHRpb25zKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAudW5pbnRlcnByZXRlZF9vcHRpb24oMCkubmFtZSgwKSkpOwot
ICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpbGVfLnNlcnZpY2UoMCkub3B0aW9ucygpCi0gICAgICAg
ICAgICAgICAgICAgICAgLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDApLm5hbWUoMCksICJuYW1lX3Bh
cnQiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8uc2VydmljZSgwKS5vcHRpb25zKCkK
LSAgICAgICAgICAgICAgICAgICAgICAudW5pbnRlcnByZXRlZF9vcHRpb24oMCksICJwb3NpdGl2
ZV9pbnRfdmFsdWUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8uc2VydmljZSgwKS5t
ZXRob2QoMCksICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpbGVfLnNlcnZpY2Uo
MCkubWV0aG9kKDApLCAiaW5wdXRfdHlwZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxl
Xy5zZXJ2aWNlKDApLm1ldGhvZCgwKSwgIm91dHB1dF90eXBlIikpOwotICBFWFBFQ1RfVFJVRShI
YXNTcGFuKGZpbGVfLnNlcnZpY2UoMCkubWV0aG9kKDApLm9wdGlvbnMoKQotICAgICAgICAgICAg
ICAgICAgICAgIC51bmludGVycHJldGVkX29wdGlvbigwKSkpOwotICBFWFBFQ1RfVFJVRShIYXNT
cGFuKGZpbGVfLnNlcnZpY2UoMCkubWV0aG9kKDApLm9wdGlvbnMoKQotICAgICAgICAgICAgICAg
ICAgICAgIC51bmludGVycHJldGVkX29wdGlvbigwKSwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9UUlVF
KEhhc1NwYW4oZmlsZV8uc2VydmljZSgwKS5tZXRob2QoMCkub3B0aW9ucygpCi0gICAgICAgICAg
ICAgICAgICAgICAgLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDApLm5hbWUoMCkpKTsKLSAgRVhQRUNU
X1RSVUUoSGFzU3BhbihmaWxlXy5zZXJ2aWNlKDApLm1ldGhvZCgwKS5vcHRpb25zKCkKLSAgICAg
ICAgICAgICAgICAgICAgICAudW5pbnRlcnByZXRlZF9vcHRpb24oMCkubmFtZSgwKSwgIm5hbWVf
cGFydCIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5zZXJ2aWNlKDApLm1ldGhvZCgw
KS5vcHRpb25zKCkKLSAgICAgICAgICAgICAgICAgICAgICAudW5pbnRlcnByZXRlZF9vcHRpb24o
MCksICJwb3NpdGl2ZV9pbnRfdmFsdWUiKSk7Ci0KLSAgRVhQRUNUX1RSVUUoSGFzU3Bhbignaycs
ICdsJywgZmlsZV8uc2VydmljZSgwKS5tZXRob2QoMSkub3B0aW9ucygpKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oZmlsZV8uc2VydmljZSgwKS5tZXRob2QoMSkpKTsKLSAgRVhQRUNUX1RSVUUo
SGFzU3BhbihmaWxlXy5zZXJ2aWNlKDApLm1ldGhvZCgxKSwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oZmlsZV8uc2VydmljZSgwKS5tZXRob2QoMSksICJpbnB1dF90eXBlIikpOwot
ICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpbGVfLnNlcnZpY2UoMCkubWV0aG9kKDEpLCAib3V0cHV0
X3R5cGUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8uc2VydmljZSgwKS5tZXRob2Qo
MSkub3B0aW9ucygpCi0gICAgICAgICAgICAgICAgICAgICAgLnVuaW50ZXJwcmV0ZWRfb3B0aW9u
KDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8uc2VydmljZSgwKS5tZXRob2QoMSku
b3B0aW9ucygpCi0gICAgICAgICAgICAgICAgICAgICAgLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDAp
LCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXy5zZXJ2aWNlKDApLm1ldGhv
ZCgxKS5vcHRpb25zKCkKLSAgICAgICAgICAgICAgICAgICAgICAudW5pbnRlcnByZXRlZF9vcHRp
b24oMCkubmFtZSgwKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpbGVfLnNlcnZpY2UoMCku
bWV0aG9kKDEpLm9wdGlvbnMoKQotICAgICAgICAgICAgICAgICAgICAgIC51bmludGVycHJldGVk
X29wdGlvbigwKS5uYW1lKDApLCAibmFtZV9wYXJ0IikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFu
KGZpbGVfLnNlcnZpY2UoMCkubWV0aG9kKDEpLm9wdGlvbnMoKQotICAgICAgICAgICAgICAgICAg
ICAgIC51bmludGVycHJldGVkX29wdGlvbigwKSwgInBvc2l0aXZlX2ludF92YWx1ZSIpKTsKLSAg
RVhQRUNUX1RSVUUoSGFzU3BhbignMScsICcyJywgZmlsZV8uc2VydmljZSgwKS5tZXRob2QoMSks
Ci0gICAgICAgICAgICAgICAgICAgICAgImNsaWVudF9zdHJlYW1pbmciKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oJzMnLCAnNCcsIGZpbGVfLnNlcnZpY2UoMCkubWV0aG9kKDEpLAotICAgICAg
ICAgICAgICAgICAgICAgICJzZXJ2ZXJfc3RyZWFtaW5nIikpOwotfQotCi1URVNUX0YoU291cmNl
SW5mb1Rlc3QsIEZpZWxkT3B0aW9ucykgewotICAvLyBUaGUgYWN0dWFsICJuYW1lID0gdmFsdWUi
IHBhaXJzIGFyZSBwYXJzZWQgYnkgdGhlIHNhbWUgY29kZSBhcyBmb3IKLSAgLy8gdG9wLWxldmVs
IG9wdGlvbnMgc28gd2Ugd29uJ3QgcmUtdGVzdCB0aGF0IC0tIGp1c3QgbWFrZSBzdXJlIHRoYXQg
dGhlCi0gIC8vIHN5bnRheCB1c2VkIGZvciBmaWVsZCBvcHRpb25zIGlzIHVuZGVyc3Rvb2QuCi0g
IEVYUEVDVF9UUlVFKFBhcnNlKAotICAgICAgIm1lc3NhZ2UgRm9vIHsiCi0gICAgICAiICBvcHRp
b25hbCBpbnQzMiBiYXIgPSAxICIKLSAgICAgICAgICAiJGEkW2RlZmF1bHQ9JGIkMTIzJGMkLCRk
JG9wdDE9MTIzJGUkLCIKLSAgICAgICAgICAiJGYkb3B0Mj0naGknJGckXSRoJDsiCi0gICAgICAi
fVxuIgotICApKTsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgZmllbGQgPSBmaWxl
Xy5tZXNzYWdlX3R5cGUoMCkuZmllbGQoMCk7Ci0gIGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24m
IG9wdGlvbjEgPSBmaWVsZC5vcHRpb25zKCkudW5pbnRlcnByZXRlZF9vcHRpb24oMCk7Ci0gIGNv
bnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24mIG9wdGlvbjIgPSBmaWVsZC5vcHRpb25zKCkudW5pbnRl
cnByZXRlZF9vcHRpb24oMSk7Ci0KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignYScsICdoJywgZmll
bGQub3B0aW9ucygpKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2InLCAnYycsIGZpZWxkLCAi
ZGVmYXVsdF92YWx1ZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbignZCcsICdlJywgb3B0aW9u
MSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdmJywgJ2cnLCBvcHRpb24yKSk7Ci0KLSAgLy8g
SWdub3JlIHRoZXNlLgotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpbGVfKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oZmlsZV8ubWVzc2FnZV90eXBlKDApKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1Nw
YW4oZmlsZV8ubWVzc2FnZV90eXBlKDApLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bh
bihmaWVsZCkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGZpZWxkLCAibGFiZWwiKSk7Ci0gIEVY
UEVDVF9UUlVFKEhhc1NwYW4oZmllbGQsICJ0eXBlIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFu
KGZpZWxkLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWVsZCwgIm51bWJlciIp
KTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihvcHRpb24xLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RS
VUUoSGFzU3BhbihvcHRpb24yLCAibmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihvcHRp
b24xLm5hbWUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihvcHRpb24yLm5hbWUoMCkpKTsK
LSAgRVhQRUNUX1RSVUUoSGFzU3BhbihvcHRpb24xLm5hbWUoMCksICJuYW1lX3BhcnQiKSk7Ci0g
IEVYUEVDVF9UUlVFKEhhc1NwYW4ob3B0aW9uMi5uYW1lKDApLCAibmFtZV9wYXJ0IikpOwotICBF
WFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjEsICJwb3NpdGl2ZV9pbnRfdmFsdWUiKSk7Ci0gIEVY
UEVDVF9UUlVFKEhhc1NwYW4ob3B0aW9uMiwgInN0cmluZ192YWx1ZSIpKTsKLX0KLQotVEVTVF9G
KFNvdXJjZUluZm9UZXN0LCBFbnVtVmFsdWVPcHRpb25zKSB7Ci0gIC8vIFRoZSBhY3R1YWwgIm5h
bWUgPSB2YWx1ZSIgcGFpcnMgYXJlIHBhcnNlZCBieSB0aGUgc2FtZSBjb2RlIGFzIGZvcgotICAv
LyB0b3AtbGV2ZWwgb3B0aW9ucyBzbyB3ZSB3b24ndCByZS10ZXN0IHRoYXQgLS0ganVzdCBtYWtl
IHN1cmUgdGhhdCB0aGUKLSAgLy8gc3ludGF4IHVzZWQgZm9yIGVudW0gb3B0aW9ucyBpcyB1bmRl
cnN0b29kLgotICBFWFBFQ1RfVFJVRShQYXJzZSgKLSAgICAgICJlbnVtIEZvbyB7IgotICAgICAg
IiAgQkFSID0gMSAkYSRbJGIkb3B0MT0xMjMkYyQsJGQkb3B0Mj0naGknJGUkXSRmJDsiCi0gICAg
ICAifVxuIgotICApKTsKLQotICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8mIHZhbHVl
ID0gZmlsZV8uZW51bV90eXBlKDApLnZhbHVlKDApOwotICBjb25zdCBVbmludGVycHJldGVkT3B0
aW9uJiBvcHRpb24xID0gdmFsdWUub3B0aW9ucygpLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDApOwot
ICBjb25zdCBVbmludGVycHJldGVkT3B0aW9uJiBvcHRpb24yID0gdmFsdWUub3B0aW9ucygpLnVu
aW50ZXJwcmV0ZWRfb3B0aW9uKDEpOwotCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2EnLCAnZics
IHZhbHVlLm9wdGlvbnMoKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKCdiJywgJ2MnLCBvcHRp
b24xKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oJ2QnLCAnZScsIG9wdGlvbjIpKTsKLQotICAv
LyBJZ25vcmUgdGhlc2UuCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8pKTsKLSAgRVhQRUNU
X1RSVUUoSGFzU3BhbihmaWxlXy5lbnVtX3R5cGUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bh
bihmaWxlXy5lbnVtX3R5cGUoMCksICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKHZh
bHVlKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4odmFsdWUsICJuYW1lIikpOwotICBFWFBFQ1Rf
VFJVRShIYXNTcGFuKHZhbHVlLCAibnVtYmVyIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9w
dGlvbjEsICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjIsICJuYW1lIikp
OwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlvbjEubmFtZSgwKSkpOwotICBFWFBFQ1RfVFJV
RShIYXNTcGFuKG9wdGlvbjIubmFtZSgwKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKG9wdGlv
bjEubmFtZSgwKSwgIm5hbWVfcGFydCIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihvcHRpb24y
Lm5hbWUoMCksICJuYW1lX3BhcnQiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4ob3B0aW9uMSwg
InBvc2l0aXZlX2ludF92YWx1ZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihvcHRpb24yLCAi
c3RyaW5nX3ZhbHVlIikpOwotfQotCi1URVNUX0YoU291cmNlSW5mb1Rlc3QsIERvY0NvbW1lbnRz
KSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKAotICAgICAgIi8vIEZvbyBsZWFkaW5nXG4iCi0gICAg
ICAiLy8gbGluZSAyXG4iCi0gICAgICAiJGEkbWVzc2FnZSBGb28ge1xuIgotICAgICAgIiAgLy8g
Rm9vIHRyYWlsaW5nXG4iCi0gICAgICAiICAvLyBsaW5lIDJcbiIKLSAgICAgICJcbiIKLSAgICAg
ICIgIC8vIGRldGFjaGVkXG4iCi0gICAgICAiXG4iCi0gICAgICAiICAvLyBiYXIgbGVhZGluZ1xu
IgotICAgICAgIiAgJGIkb3B0aW9uYWwgaW50MzIgYmFyID0gMTskYyRcbiIKLSAgICAgICIgIC8v
IGJhciB0cmFpbGluZ1xuIgotICAgICAgIn0kZCRcbiIKLSAgICAgICIvLyBpZ25vcmVkXG4iCi0g
ICkpOwotCi0gIGNvbnN0IERlc2NyaXB0b3JQcm90byYgZm9vID0gZmlsZV8ubWVzc2FnZV90eXBl
KDApOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgYmFyID0gZm9vLmZpZWxkKDApOwot
Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW5XaXRoQ29tbWVudCgnYScsICdkJywgZm9vLAotICAgICAg
IiBGb28gbGVhZGluZ1xuIGxpbmUgMlxuIiwKLSAgICAgICIgRm9vIHRyYWlsaW5nXG4gbGluZSAy
XG4iLAotICAgICAgTlVMTCkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuV2l0aENvbW1lbnQoJ2In
LCAnYycsIGJhciwKLSAgICAgICIgYmFyIGxlYWRpbmdcbiIsCi0gICAgICAiIGJhciB0cmFpbGlu
Z1xuIiwKLSAgICAgICIgZGV0YWNoZWRcbiIpKTsKLQotICAvLyBJZ25vcmUgdGhlc2UuCi0gIEVY
UEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8pKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bhbihmb28sICJu
YW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGJhciwgImxhYmVsIikpOwotICBFWFBFQ1Rf
VFJVRShIYXNTcGFuKGJhciwgInR5cGUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oYmFyLCAi
bmFtZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihiYXIsICJudW1iZXIiKSk7Ci19Ci0KLVRF
U1RfRihTb3VyY2VJbmZvVGVzdCwgRG9jQ29tbWVudHMyKSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNl
KAotICAgICAgIi8vIGRldGFjaGVkIGJlZm9yZSBtZXNzYWdlLlxuIgotICAgICAgIlxuIgotICAg
ICAgIi8vIEZvbyBsZWFkaW5nXG4iCi0gICAgICAiLy8gbGluZSAyXG4iCi0gICAgICAiJGEkbWVz
c2FnZSBGb28ge1xuIgotICAgICAgIiAgLyogRm9vIHRyYWlsaW5nXG4iCi0gICAgICAiICAgKiBs
aW5lIDIgKi9cbiIKLSAgICAgICIgIC8vIGRldGFjaGVkXG4iCi0gICAgICAiICAvKiBiYXIgbGVh
ZGluZ1xuIgotICAgICAgIiAgICovIgotICAgICAgIiAgJGIkb3B0aW9uYWwgaW50MzIgYmFyID0g
MTskYyQgIC8vIGJhciB0cmFpbGluZ1xuIgotICAgICAgIiAgLy8gaWdub3JlZCBkZXRhY2hlZFxu
IgotICAgICAgIn0kZCRcbiIKLSAgICAgICIvLyBpZ25vcmVkXG4iCi0gICAgICAiXG4iCi0gICAg
ICAiLy8gZGV0YWNoZWQgYmVmb3JlIG9wdGlvblxuIgotICAgICAgIlxuIgotICAgICAgIi8vIG9w
dGlvbiBsZWFkaW5nXG4iCi0gICAgICAiJGUkb3B0aW9uIGJheiA9IDEyMzskZiRcbiIKLSAgICAg
ICIvLyBvcHRpb24gdHJhaWxpbmdcbiIKLSAgKSk7Ci0KLSAgY29uc3QgRGVzY3JpcHRvclByb3Rv
JiBmb28gPSBmaWxlXy5tZXNzYWdlX3R5cGUoMCk7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvclBy
b3RvJiBiYXIgPSBmb28uZmllbGQoMCk7Ci0gIGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24mIGJh
eiA9IGZpbGVfLm9wdGlvbnMoKS51bmludGVycHJldGVkX29wdGlvbigwKTsKLQotICBFWFBFQ1Rf
VFJVRShIYXNTcGFuV2l0aENvbW1lbnQoJ2EnLCAnZCcsIGZvbywKLSAgICAgICIgRm9vIGxlYWRp
bmdcbiBsaW5lIDJcbiIsCi0gICAgICAiIEZvbyB0cmFpbGluZ1xuIGxpbmUgMiAiLAotICAgICAg
IiBkZXRhY2hlZCBiZWZvcmUgbWVzc2FnZS5cbiIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bhbldp
dGhDb21tZW50KCdiJywgJ2MnLCBiYXIsCi0gICAgICAiIGJhciBsZWFkaW5nXG4iLAotICAgICAg
IiBiYXIgdHJhaWxpbmdcbiIsCi0gICAgICAiIGRldGFjaGVkXG4iKSk7Ci0gIEVYUEVDVF9UUlVF
KEhhc1NwYW5XaXRoQ29tbWVudCgnZScsICdmJywgYmF6LAotICAgICAgIiBvcHRpb24gbGVhZGlu
Z1xuIiwKLSAgICAgICIgb3B0aW9uIHRyYWlsaW5nXG4iLAotICAgICAgIiBkZXRhY2hlZCBiZWZv
cmUgb3B0aW9uXG4iKSk7Ci0KLSAgLy8gSWdub3JlIHRoZXNlLgotICBFWFBFQ1RfVFJVRShIYXNT
cGFuKGZpbGVfKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZm9vLCAibmFtZSIpKTsKLSAgRVhQ
RUNUX1RSVUUoSGFzU3BhbihiYXIsICJsYWJlbCIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bhbihi
YXIsICJ0eXBlIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGJhciwgIm5hbWUiKSk7Ci0gIEVY
UEVDVF9UUlVFKEhhc1NwYW4oYmFyLCAibnVtYmVyIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFu
KGZpbGVfLm9wdGlvbnMoKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGJheiwgIm5hbWUiKSk7
Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oYmF6Lm5hbWUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFz
U3BhbihiYXoubmFtZSgwKSwgIm5hbWVfcGFydCIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bhbihi
YXosICJwb3NpdGl2ZV9pbnRfdmFsdWUiKSk7Ci19Ci0KLVRFU1RfRihTb3VyY2VJbmZvVGVzdCwg
RG9jQ29tbWVudHMzKSB7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKAotICAgICAgIiRhJG1lc3NhZ2Ug
Rm9vIHtcbiIKLSAgICAgICIgIC8vIGJhciBsZWFkaW5nXG4iCi0gICAgICAiICAkYiRvcHRpb25h
bCBpbnQzMiBiYXIgPSAxIFsoYmF6LnF1eCkgPSB7fV07JGMkXG4iCi0gICAgICAiICAvLyBiYXIg
dHJhaWxpbmdcbiIKLSAgICAgICJ9JGQkXG4iCi0gICAgICAiLy8gaWdub3JlZFxuIgotICApKTsK
LQotICBjb25zdCBEZXNjcmlwdG9yUHJvdG8mIGZvbyA9IGZpbGVfLm1lc3NhZ2VfdHlwZSgwKTsK
LSAgY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8mIGJhciA9IGZvby5maWVsZCgwKTsKLQotICBF
WFBFQ1RfVFJVRShIYXNTcGFuV2l0aENvbW1lbnQoJ2InLCAnYycsIGJhciwKLSAgICAgICIgYmFy
IGxlYWRpbmdcbiIsCi0gICAgICAiIGJhciB0cmFpbGluZ1xuIiwKLSAgICAgIE5VTEwpKTsKLQot
ICAvLyBJZ25vcmUgdGhlc2UuCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8pKTsKLSAgRVhQ
RUNUX1RSVUUoSGFzU3Bhbihmb28pKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bhbihmb28sICJuYW1l
IikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGJhciwgImxhYmVsIikpOwotICBFWFBFQ1RfVFJV
RShIYXNTcGFuKGJhciwgInR5cGUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oYmFyLCAibmFt
ZSIpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihiYXIsICJudW1iZXIiKSk7Ci0gIEVYUEVDVF9U
UlVFKEhhc1NwYW4oYmFyLm9wdGlvbnMoKSkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGJhci5v
cHRpb25zKCkudW5pbnRlcnByZXRlZF9vcHRpb24oMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3Bh
bihiYXIub3B0aW9ucygpLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDApLCAibmFtZSIpKTsKLSAgRVhQ
RUNUX1RSVUUoSGFzU3BhbihiYXIub3B0aW9ucygpLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKDApLm5h
bWUoMCkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzU3BhbigKLSAgICAgIGJhci5vcHRpb25zKCkudW5p
bnRlcnByZXRlZF9vcHRpb24oMCkubmFtZSgwKSwgIm5hbWVfcGFydCIpKTsKLSAgRVhQRUNUX1RS
VUUoSGFzU3BhbigKLSAgICAgIGJhci5vcHRpb25zKCkudW5pbnRlcnByZXRlZF9vcHRpb24oMCks
ICJhZ2dyZWdhdGVfdmFsdWUiKSk7Ci19Ci0KLVRFU1RfRihTb3VyY2VJbmZvVGVzdCwgRG9jQ29t
bWVudHNUb3BMZXZlbCkgewotICBFWFBFQ1RfVFJVRShQYXJzZSgKLSAgICAgICIvLyBkZXRhY2hl
ZCBiZWZvcmUgc3ludGF4IHBhcmFncmFwaCAxXG4iCi0gICAgICAiXG4iCi0gICAgICAiLy8gZGV0
YWNoZWQgYmVmb3JlIHN5bnRheCBwYXJhZ3JhcGggMlxuIgotICAgICAgIlxuIgotICAgICAgIi8v
IHN5bnRheCBsZWFkaW5nXG4iCi0gICAgICAiJGEkc3ludGF4ID0gXCJwcm90bzJcIjskYiRcbiIK
LSAgICAgICIvLyBzeW50YXggdHJhaWxpbmdcbiIKLSAgICAgICJcbiIKLSAgICAgICIvLyBzeW50
YXgtcGFja2FnZSBkZXRhY2hlZCBjb21tZW50c1xuIgotICAgICAgIlxuIgotICAgICAgIjtcbiIK
LSAgICAgICJcbiIKLSAgICAgICIvLyBkZXRhY2hlZCBhZnRlciBlbXB0eSBiZWZvcmUgcGFja2Fn
ZVxuIgotICAgICAgIlxuIgotICAgICAgIi8vIHBhY2thZ2UgbGVhZGluZ1xuIgotICAgICAgInBh
Y2thZ2UgJGMkZm9vJGQkO1xuIgotICAgICAgIi8vIHBhY2thZ2UgdHJhaWxpbmdcbiIKLSAgICAg
ICJcbiIKLSAgICAgICIvLyBpZ25vcmVkIGRldGFjaFxuIgotICAgICAgIlxuIikpOwotCi0gIEVY
UEVDVF9UUlVFKEhhc1NwYW4oJ2EnLCAnYicsIGZpbGVfLCAic3ludGF4IiwgLTEsCi0gICAgICAi
IHN5bnRheCBsZWFkaW5nXG4iLAotICAgICAgIiBzeW50YXggdHJhaWxpbmdcbiIsCi0gICAgICAi
IGRldGFjaGVkIGJlZm9yZSBzeW50YXggcGFyYWdyYXBoIDFcbiIKLSAgICAgICJcbiIKLSAgICAg
ICIgZGV0YWNoZWQgYmVmb3JlIHN5bnRheCBwYXJhZ3JhcGggMlxuIikpOwotICBFWFBFQ1RfVFJV
RShIYXNTcGFuKCdjJywgJ2QnLCBmaWxlXywgInBhY2thZ2UiLCAtMSwKLSAgICAgICIgcGFja2Fn
ZSBsZWFkaW5nXG4iLAotICAgICAgIiBwYWNrYWdlIHRyYWlsaW5nXG4iLAotICAgICAgIiBzeW50
YXgtcGFja2FnZSBkZXRhY2hlZCBjb21tZW50c1xuIgotICAgICAgIlxuIgotICAgICAgIiBkZXRh
Y2hlZCBhZnRlciBlbXB0eSBiZWZvcmUgcGFja2FnZVxuIikpOwotCi0gIC8vIGlnbm9yZSB0aGVz
ZS4KLSAgRVhQRUNUX1RSVUUoSGFzU3BhbihmaWxlXykpOwotfQotCi1URVNUX0YoU291cmNlSW5m
b1Rlc3QsIERvY0NvbW1lbnRzT25lb2YpIHsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoCi0gICAgICAi
Ly8gRm9vIGxlYWRpbmdcbiIKLSAgICAgICIkYSRtZXNzYWdlIEZvbyB7XG4iCi0gICAgICAiICAv
KiBGb28gdHJhaWxpbmdcbiIKLSAgICAgICIgICAqL1xuIgotICAgICAgIiAgLy8gZGV0YWNoZWQg
YmVmb3JlIG9uZW9mXG4iCi0gICAgICAiICAvKiBiYXIgbGVhZGluZ1xuIgotICAgICAgIiAgICog
bGluZSAyICovXG4iCi0gICAgICAiICAkYiRvbmVvZiBiYXIge1xuIgotICAgICAgIiAgLyogYmFy
IHRyYWlsaW5nXG4iCi0gICAgICAiICAgKiBsaW5lIDIgKi9cbiIKLSAgICAgICIgIC8vIGRldGFj
aGVkIGJlZm9yZSBiYXJfaW50XG4iCi0gICAgICAiICAvKiBiYXJfaW50IGxlYWRpbmdcbiIKLSAg
ICAgICIgICAqL1xuIgotICAgICAgIiAgJGMkaW50MzIgYmFyX2ludCA9IDE7JGQkICAvLyBiYXJf
aW50IHRyYWlsaW5nXG4iCi0gICAgICAiICAvLyBkZXRhY2ggY29tbWVudCBpZ25vcmVkXG4iCi0g
ICAgICAiICB9JGUkXG4iCi0gICAgICAifSRmJFxuIikpOwotCi0gIGNvbnN0IERlc2NyaXB0b3JQ
cm90byYgZm9vID0gZmlsZV8ubWVzc2FnZV90eXBlKDApOwotICBjb25zdCBPbmVvZkRlc2NyaXB0
b3JQcm90byYgYmFyID0gZm9vLm9uZW9mX2RlY2woMCk7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRv
clByb3RvJiBiYXJfaW50ID0gZm9vLmZpZWxkKDApOwotCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW5X
aXRoQ29tbWVudCgnYScsICdmJywgZm9vLAotICAgICAgIiBGb28gbGVhZGluZ1xuIiwKLSAgICAg
ICIgRm9vIHRyYWlsaW5nXG4iLAotICAgICAgTlVMTCkpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFu
V2l0aENvbW1lbnQoJ2InLCAnZScsIGJhciwKLSAgICAgICIgYmFyIGxlYWRpbmdcbiBsaW5lIDIg
IiwKLSAgICAgICIgYmFyIHRyYWlsaW5nXG4gbGluZSAyICIsCi0gICAgICAiIGRldGFjaGVkIGJl
Zm9yZSBvbmVvZlxuIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuV2l0aENvbW1lbnQoJ2MnLCAn
ZCcsIGJhcl9pbnQsCi0gICAgICAiIGJhcl9pbnQgbGVhZGluZ1xuIiwKLSAgICAgICIgYmFyX2lu
dCB0cmFpbGluZ1xuIiwKLSAgICAgICIgZGV0YWNoZWQgYmVmb3JlIGJhcl9pbnRcbiIpKTsKLQot
ICAvLyBJZ25vcmUgdGhlc2UuCi0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oZmlsZV8pKTsKLSAgRVhQ
RUNUX1RSVUUoSGFzU3Bhbihmb28sICJuYW1lIikpOwotICBFWFBFQ1RfVFJVRShIYXNTcGFuKGJh
ciwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc1NwYW4oYmFyX2ludCwgInR5cGUiKSk7Ci0g
IEVYUEVDVF9UUlVFKEhhc1NwYW4oYmFyX2ludCwgIm5hbWUiKSk7Ci0gIEVYUEVDVF9UUlVFKEhh
c1NwYW4oYmFyX2ludCwgIm51bWJlciIpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi19ICAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCi0KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Nv
bXBpbGVyL3BsdWdpbi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZmNTBmNjFm
NDdhOGRkZTE3OTZkYmQ2ZjFkNzM3MmJhMTc3NWI4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2lu
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFy
ZGEpCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmg+Ci0KLSNp
bmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpZmRlZiBfV0lOMzIKLSNpbmNs
dWRlIDxpby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaWZuZGVmIFNURElOX0ZJTEVOTwotI2Rl
ZmluZSBTVERJTl9GSUxFTk8gMAotI2VuZGlmCi0jaWZuZGVmIFNURE9VVF9GSUxFTk8KLSNkZWZp
bmUgU1RET1VUX0ZJTEVOTyAxCi0jZW5kaWYKLSNlbHNlCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j
ZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9wbHVnaW4ucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFt
X2ltcGwuaD4KLQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgY29tcGlsZXIgewotCi1jbGFzcyBHZW5lcmF0b3JSZXNwb25zZUNvbnRleHQgOiBw
dWJsaWMgR2VuZXJhdG9yQ29udGV4dCB7Ci0gcHVibGljOgotICBHZW5lcmF0b3JSZXNwb25zZUNv
bnRleHQoQ29kZUdlbmVyYXRvclJlc3BvbnNlKiByZXNwb25zZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWxlRGVzY3JpcHRvcio+JiBwYXJzZWRfZmls
ZXMpCi0gICAgICA6IHJlc3BvbnNlXyhyZXNwb25zZSksCi0gICAgICAgIHBhcnNlZF9maWxlc18o
cGFyc2VkX2ZpbGVzKSB7fQotICB2aXJ0dWFsIH5HZW5lcmF0b3JSZXNwb25zZUNvbnRleHQoKSB7
fQotCi0gIC8vIGltcGxlbWVudHMgR2VuZXJhdG9yQ29udGV4dCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHZpcnR1YWwgaW86Olplcm9Db3B5T3V0cHV0U3RyZWFt
KiBPcGVuKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsKLSAgICBDb2RlR2VuZXJhdG9yUmVzcG9u
c2U6OkZpbGUqIGZpbGUgPSByZXNwb25zZV8tPmFkZF9maWxlKCk7Ci0gICAgZmlsZS0+c2V0X25h
bWUoZmlsZW5hbWUpOwotICAgIHJldHVybiBuZXcgaW86OlN0cmluZ091dHB1dFN0cmVhbShmaWxl
LT5tdXRhYmxlX2NvbnRlbnQoKSk7Ci0gIH0KLQotICB2aXJ0dWFsIGlvOjpaZXJvQ29weU91dHB1
dFN0cmVhbSogT3BlbkZvckluc2VydCgKLSAgICAgIGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IHN0cmluZyYgaW5zZXJ0aW9uX3BvaW50KSB7Ci0gICAgQ29kZUdlbmVyYXRvclJlc3BvbnNl
OjpGaWxlKiBmaWxlID0gcmVzcG9uc2VfLT5hZGRfZmlsZSgpOwotICAgIGZpbGUtPnNldF9uYW1l
KGZpbGVuYW1lKTsKLSAgICBmaWxlLT5zZXRfaW5zZXJ0aW9uX3BvaW50KGluc2VydGlvbl9wb2lu
dCk7Ci0gICAgcmV0dXJuIG5ldyBpbzo6U3RyaW5nT3V0cHV0U3RyZWFtKGZpbGUtPm11dGFibGVf
Y29udGVudCgpKTsKLSAgfQotCi0gIHZvaWQgTGlzdFBhcnNlZEZpbGVzKHZlY3Rvcjxjb25zdCBG
aWxlRGVzY3JpcHRvcio+KiBvdXRwdXQpIHsKLSAgICAqb3V0cHV0ID0gcGFyc2VkX2ZpbGVzXzsK
LSAgfQotCi0gcHJpdmF0ZToKLSAgQ29kZUdlbmVyYXRvclJlc3BvbnNlKiByZXNwb25zZV87Ci0g
IGNvbnN0IHZlY3Rvcjxjb25zdCBGaWxlRGVzY3JpcHRvcio+JiBwYXJzZWRfZmlsZXNfOwotfTsK
LQotYm9vbCBHZW5lcmF0ZUNvZGUoY29uc3QgQ29kZUdlbmVyYXRvclJlcXVlc3QmIHJlcXVlc3Qs
Ci0gICAgY29uc3QgQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBDb2RlR2VuZXJhdG9yUmVzcG9u
c2UqIHJlc3BvbnNlLAotICAgIHN0cmluZyogZXJyb3JfbXNnKSB7Ci0gIERlc2NyaXB0b3JQb29s
IHBvb2w7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcmVxdWVzdC5wcm90b19maWxlX3NpemUoKTsg
aSsrKSB7Ci0gICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUgPSBwb29sLkJ1aWxkRmlsZShy
ZXF1ZXN0LnByb3RvX2ZpbGUoaSkpOwotICAgIGlmIChmaWxlID09IE5VTEwpIHsKLSAgICAgIC8v
IEJ1aWxkRmlsZSgpIGFscmVhZHkgd3JvdGUgYW4gZXJyb3IgbWVzc2FnZS4KLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0b3IqPiBw
YXJzZWRfZmlsZXM7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcmVxdWVzdC5maWxlX3RvX2dlbmVy
YXRlX3NpemUoKTsgaSsrKSB7Ci0gICAgcGFyc2VkX2ZpbGVzLnB1c2hfYmFjayhwb29sLkZpbmRG
aWxlQnlOYW1lKHJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZShpKSkpOwotICAgIGlmIChwYXJzZWRf
ZmlsZXMuYmFjaygpID09IE5VTEwpIHsKLSAgICAgICplcnJvcl9tc2cgPSAicHJvdG9jIGFza2Vk
IHBsdWdpbiB0byBnZW5lcmF0ZSBhIGZpbGUgYnV0ICIKLSAgICAgICAgICAgICAgICAgICAiZGlk
IG5vdCBwcm92aWRlIGEgZGVzY3JpcHRvciBmb3IgdGhlIGZpbGU6ICIgKwotICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZShpKTsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gIH0KLQotICBHZW5lcmF0b3JSZXNwb25zZUNvbnRleHQgY29udGV4dChyZXNwb25z
ZSwgcGFyc2VkX2ZpbGVzKTsKLQotICBpZiAoZ2VuZXJhdG9yLkhhc0dlbmVyYXRlQWxsKCkpIHsK
LSAgICBzdHJpbmcgZXJyb3I7Ci0gICAgYm9vbCBzdWNjZWVkZWQgPSBnZW5lcmF0b3IuR2VuZXJh
dGVBbGwoCi0gICAgICAgIHBhcnNlZF9maWxlcywgcmVxdWVzdC5wYXJhbWV0ZXIoKSwgJmNvbnRl
eHQsICZlcnJvcik7Ci0KLSAgICBpZiAoIXN1Y2NlZWRlZCAmJiBlcnJvci5lbXB0eSgpKSB7Ci0g
ICAgICBlcnJvciA9ICJDb2RlIGdlbmVyYXRvciByZXR1cm5lZCBmYWxzZSBidXQgcHJvdmlkZWQg
bm8gZXJyb3IgIgotICAgICAgICAgICAgICAiZGVzY3JpcHRpb24uIjsKLSAgICB9Ci0gICAgaWYg
KCFlcnJvci5lbXB0eSgpKSB7Ci0gICAgICByZXNwb25zZS0+c2V0X2Vycm9yKGVycm9yKTsKLSAg
ICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJzZWRfZmlsZXMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlID0gcGFyc2VkX2Zp
bGVzW2ldOwotCi0gICAgICBzdHJpbmcgZXJyb3I7Ci0gICAgICBib29sIHN1Y2NlZWRlZCA9IGdl
bmVyYXRvci5HZW5lcmF0ZSgKLSAgICAgICAgICBmaWxlLCByZXF1ZXN0LnBhcmFtZXRlcigpLCAm
Y29udGV4dCwgJmVycm9yKTsKLQotICAgICAgaWYgKCFzdWNjZWVkZWQgJiYgZXJyb3IuZW1wdHko
KSkgewotICAgICAgICBlcnJvciA9ICJDb2RlIGdlbmVyYXRvciByZXR1cm5lZCBmYWxzZSBidXQg
cHJvdmlkZWQgbm8gZXJyb3IgIgotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbi4iOwotICAg
ICAgfQotICAgICAgaWYgKCFlcnJvci5lbXB0eSgpKSB7Ci0gICAgICAgIHJlc3BvbnNlLT5zZXRf
ZXJyb3IoZmlsZS0+bmFtZSgpICsgIjogIiArIGVycm9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQbHVnaW5NYWluKGlu
dCBhcmdjLCBjaGFyKiBhcmd2W10sIGNvbnN0IENvZGVHZW5lcmF0b3IqIGdlbmVyYXRvcikgewot
Ci0gIGlmIChhcmdjID4gMSkgewotICAgIHN0ZDo6Y2VyciA8PCBhcmd2WzBdIDw8ICI6IFVua25v
d24gb3B0aW9uOiAiIDw8IGFyZ3ZbMV0gPDwgc3RkOjplbmRsOwotICAgIHJldHVybiAxOwotICB9
Ci0KLSNpZmRlZiBfV0lOMzIKLSAgX3NldG1vZGUoU1RESU5fRklMRU5PLCBfT19CSU5BUlkpOwot
ICBfc2V0bW9kZShTVERPVVRfRklMRU5PLCBfT19CSU5BUlkpOwotI2VuZGlmCi0KLSAgQ29kZUdl
bmVyYXRvclJlcXVlc3QgcmVxdWVzdDsKLSAgaWYgKCFyZXF1ZXN0LlBhcnNlRnJvbUZpbGVEZXNj
cmlwdG9yKFNURElOX0ZJTEVOTykpIHsKLSAgICBzdGQ6OmNlcnIgPDwgYXJndlswXSA8PCAiOiBw
cm90b2Mgc2VudCB1bnBhcnNlYWJsZSByZXF1ZXN0IHRvIHBsdWdpbi4iCi0gICAgICAgICAgICAg
IDw8IHN0ZDo6ZW5kbDsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIHN0cmluZyBlcnJvcl9tc2c7
Ci0gIENvZGVHZW5lcmF0b3JSZXNwb25zZSByZXNwb25zZTsKLQotICBpZiAoR2VuZXJhdGVDb2Rl
KHJlcXVlc3QsICpnZW5lcmF0b3IsICZyZXNwb25zZSwgJmVycm9yX21zZykpIHsKLSAgICBpZiAo
IXJlc3BvbnNlLlNlcmlhbGl6ZVRvRmlsZURlc2NyaXB0b3IoU1RET1VUX0ZJTEVOTykpIHsKLSAg
ICAgIHN0ZDo6Y2VyciA8PCBhcmd2WzBdIDw8ICI6IEVycm9yIHdyaXRpbmcgdG8gc3Rkb3V0LiIg
PDwgc3RkOjplbmRsOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlm
ICghZXJyb3JfbXNnLmVtcHR5KCkpIHsKLSAgICAgIHN0ZDo6Y2VyciA8PCBhcmd2WzBdIDw8ICI6
ICIgPDwgZXJyb3JfbXNnIDw8IHN0ZDo6ZW5kbDsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci0gIH0K
LQotICByZXR1cm4gMDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9wbHVnaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3OTNhOWZmMTNi
MjQwOWExYTY2OGZkNDlmZGY0NjdmYjQ3MTMyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQot
Ly8KLS8vIEZyb250LWVuZCBmb3IgcHJvdG9jIGNvZGUgZ2VuZXJhdG9yIHBsdWdpbnMgd3JpdHRl
biBpbiBDKysuCi0vLwotLy8gVG8gaW1wbGVtZW50IGEgcHJvdG9jIHBsdWdpbiBpbiBDKyssIHNp
bXBseSB3cml0ZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgotLy8gQ29kZUdlbmVyYXRvciwgdGhlbiBj
cmVhdGUgYSBtYWluKCkgZnVuY3Rpb24gbGlrZToKLS8vICAgaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqIGFyZ3ZbXSkgewotLy8gICAgIE15Q29kZUdlbmVyYXRvciBnZW5lcmF0b3I7Ci0vLyAgICAg
cmV0dXJuIGdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyOjpQbHVnaW5NYWluKGFyZ2MsIGFyZ3Ys
ICZnZW5lcmF0b3IpOwotLy8gICB9Ci0vLyBZb3UgbXVzdCBsaW5rIHlvdXIgcGx1Z2luIGFnYWlu
c3QgbGlicHJvdG9idWYgYW5kIGxpYnByb3RvYy4KLS8vCi0vLyBUaGUgY29yZSBwYXJ0IG9mIFBs
dWdpbk1haW4gaXMgdG8gaW52b2tlIHRoZSBnaXZlbiBDb2RlR2VuZXJhdG9yIG9uIGEKLS8vIENv
ZGVHZW5lcmF0b3JSZXF1ZXN0IHRvIGdlbmVyYXRlIGEgQ29kZUdlbmVyYXRvclJlc3BvbnNlLiBU
aGlzIHBhcnQgaXMKLS8vIGFic3RyYWN0ZWQgb3V0IGFuZCBtYWRlIGludG8gZnVuY3Rpb24gR2Vu
ZXJhdGVDb2RlIHNvIHRoYXQgaXQgY2FuIGJlIHJldXNlZCwKLS8vIGZvciBleGFtcGxlLCB0byBp
bXBsZW1lbnQgYSB2YXJpYW50IG9mIFBsdWdpbk1haW4gdGhhdCBkb2VzIHNvbWUKLS8vIHByZXBy
b2Nlc3Npbmcgb24gdGhlIGlucHV0IENvZGVHZW5lcmF0b3JSZXF1ZXN0IGJlZm9yZSBmZWVkaW5n
IHRoZSByZXF1ZXN0Ci0vLyB0byB0aGUgZ2l2ZW4gY29kZSBnZW5lcmF0b3IuCi0vLwotLy8gVG8g
Z2V0IHByb3RvYyB0byB1c2UgdGhlIHBsdWdpbiwgZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0v
LyAqIFBsYWNlIHRoZSBwbHVnaW4gYmluYXJ5IHNvbWV3aGVyZSBpbiB0aGUgUEFUSCBhbmQgZ2l2
ZSBpdCB0aGUgbmFtZQotLy8gICAicHJvdG9jLWdlbi1OQU1FIiAocmVwbGFjaW5nICJOQU1FIiB3
aXRoIHRoZSBuYW1lIG9mIHlvdXIgcGx1Z2luKS4gIElmIHlvdQotLy8gICB0aGVuIGludm9rZSBw
cm90b2Mgd2l0aCB0aGUgcGFyYW1ldGVyIC0tTkFNRV9vdXQ9T1VUX0RJUiAoYWdhaW4sIHJlcGxh
Y2UKLS8vICAgIk5BTUUiIHdpdGggeW91ciBwbHVnaW4ncyBuYW1lKSwgcHJvdG9jIHdpbGwgaW52
b2tlIHlvdXIgcGx1Z2luIHRvIGdlbmVyYXRlCi0vLyAgIHRoZSBvdXRwdXQsIHdoaWNoIHdpbGwg
YmUgcGxhY2VkIGluIE9VVF9ESVIuCi0vLyAqIFBsYWNlIHRoZSBwbHVnaW4gYmluYXJ5IGFueXdo
ZXJlLCB3aXRoIGFueSBuYW1lLCBhbmQgcGFzcyB0aGUgLS1wbHVnaW4KLS8vICAgcGFyYW1ldGVy
IHRvIHByb3RvYyB0byBkaXJlY3QgaXQgdG8geW91ciBwbHVnaW4gbGlrZSBzbzoKLS8vICAgICBw
cm90b2MgLS1wbHVnaW49cHJvdG9jLWdlbi1OQU1FPXBhdGgvdG8vbXliaW5hcnkgLS1OQU1FX291
dD1PVVRfRElSCi0vLyAgIE9uIFdpbmRvd3MsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRoZSAuZXhl
IHN1ZmZpeDoKLS8vICAgICBwcm90b2MgLS1wbHVnaW49cHJvdG9jLWdlbi1OQU1FPXBhdGgvdG8v
bXliaW5hcnkuZXhlIC0tTkFNRV9vdXQ9T1VUX0RJUgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JV
Rl9DT01QSUxFUl9QTFVHSU5fSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9Q
TFVHSU5fSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvY29tbW9uLmg+Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1
ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotCi1jbGFzcyBDb2RlR2VuZXJhdG9yOyAgICAvLyBj
b2RlX2dlbmVyYXRvci5oCi1jbGFzcyBDb2RlR2VuZXJhdG9yUmVxdWVzdDsKLWNsYXNzIENvZGVH
ZW5lcmF0b3JSZXNwb25zZTsKLQotLy8gSW1wbGVtZW50cyBtYWluKCkgZm9yIGEgcHJvdG9jIHBs
dWdpbiBleHBvc2luZyB0aGUgZ2l2ZW4gY29kZSBnZW5lcmF0b3IuCi1MSUJQUk9UT0NfRVhQT1JU
IGludCBQbHVnaW5NYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10sIGNvbnN0IENvZGVHZW5lcmF0
b3IqIGdlbmVyYXRvcik7Ci0KLS8vIEdlbmVyYXRlcyBjb2RlIHVzaW5nIHRoZSBnaXZlbiBjb2Rl
IGdlbmVyYXRvci4gUmV0dXJucyB0cnVlIGlmIHRoZSBjb2RlCi0vLyBnZW5lcmF0aW9uIGlzIHN1
Y2Nlc3NmdWwuIElmIHRoZSBjb2RlIGdlbmVhcnRpb24gZmFpbHMsIGVycm9yX21zZyBtYXkgYmUK
LS8vIHBvcHVsYXRlZCB0byBkZXNjcmliZSB0aGUgZmFpbHVyZSBjYXVzZS4KLWJvb2wgR2VuZXJh
dGVDb2RlKGNvbnN0IENvZGVHZW5lcmF0b3JSZXF1ZXN0JiByZXF1ZXN0LAotICAgIGNvbnN0IENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgQ29kZUdlbmVyYXRvclJlc3BvbnNlKiByZXNwb25zZSwK
LSAgICBzdHJpbmcqIGVycm9yX21zZyk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAg
Ly8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAg
Ly8gR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX1BMVUdJTl9IX18KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucGIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
Y29tcGlsZXIvcGx1Z2luLnBiLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ1
MGExZGNkMWM1ODkzZmE2NmI3OWQzZTFhMDhlY2ZmYWY4NmExLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9w
bHVnaW4ucGIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAwICswLDAgQEAKLS8vIEdlbmVyYXRl
ZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3Vy
Y2U6IGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucHJvdG8KLQotI2RlZmluZSBJTlRF
Uk5BTF9TVVBQUkVTU19QUk9UT0JVRl9GSUVMRF9ERVBSRUNBVElPTgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucGIuaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4K
LQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvcG9ydC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9vbmNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvcmVmbGVjdGlvbl9vcHMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2ly
ZV9mb3JtYXQuaD4KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbmNsdWRlcykKLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVy
IHsKLQotbmFtZXNwYWNlIHsKLQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9y
KiBDb2RlR2VuZXJhdG9yUmVxdWVzdF9kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgQ29k
ZUdlbmVyYXRvclJlcXVlc3RfcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpEZXNjcmlwdG9yKiBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfZGVzY3JpcHRvcl8gPSBO
VUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2Fn
ZVJlZmxlY3Rpb24qCi0gIENvZGVHZW5lcmF0b3JSZXNwb25zZV9yZWZsZWN0aW9uXyA9IE5VTEw7
Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIENvZGVHZW5lcmF0b3JSZXNw
b25zZV9GaWxlX2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgotICBDb2RlR2VuZXJhdG9yUmVz
cG9uc2VfRmlsZV9yZWZsZWN0aW9uXyA9IE5VTEw7Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0KLXZv
aWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmNvbXBpbGVyXzJmcGx1
Z2luXzJlcHJvdG8oKSB7Ci0gIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZj
b21waWxlcl8yZnBsdWdpbl8yZXByb3RvKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RmlsZURlc2NyaXB0b3IqIGZpbGUgPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRv
clBvb2w6OmdlbmVyYXRlZF9wb29sKCktPkZpbmRGaWxlQnlOYW1lKAotICAgICAgImdvb2dsZS9w
cm90b2J1Zi9jb21waWxlci9wbHVnaW4ucHJvdG8iKTsKLSAgR09PR0xFX0NIRUNLKGZpbGUgIT0g
TlVMTCk7Ci0gIENvZGVHZW5lcmF0b3JSZXF1ZXN0X2Rlc2NyaXB0b3JfID0gZmlsZS0+bWVzc2Fn
ZV90eXBlKDApOwotICBzdGF0aWMgY29uc3QgaW50IENvZGVHZW5lcmF0b3JSZXF1ZXN0X29mZnNl
dHNfWzNdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9P
RkZTRVQoQ29kZUdlbmVyYXRvclJlcXVlc3QsIGZpbGVfdG9fZ2VuZXJhdGVfKSwKLSAgICBHT09H
TEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKENvZGVHZW5lcmF0b3JS
ZXF1ZXN0LCBwYXJhbWV0ZXJfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NB
R0VfRklFTERfT0ZGU0VUKENvZGVHZW5lcmF0b3JSZXF1ZXN0LCBwcm90b19maWxlXyksCi0gIH07
Ci0gIENvZGVHZW5lcmF0b3JSZXF1ZXN0X3JlZmxlY3Rpb25fID0KLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVk
TWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBDb2RlR2VuZXJhdG9yUmVxdWVzdF9kZXNjcmlwdG9y
XywKLSAgICAgIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAg
IENvZGVHZW5lcmF0b3JSZXF1ZXN0X29mZnNldHNfLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dF
TkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChDb2RlR2VuZXJhdG9yUmVxdWVzdCwgX2hhc19i
aXRzX1swXSksCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKENvZGVHZW5lcmF0
b3JSZXF1ZXN0KSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVM
RF9PRkZTRVQoQ29kZUdlbmVyYXRvclJlcXVlc3QsIF9pbnRlcm5hbF9tZXRhZGF0YV8pLAotICAg
ICAgLTEpOwotICBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNz
YWdlX3R5cGUoMSk7Ci0gIHN0YXRpYyBjb25zdCBpbnQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX29m
ZnNldHNfWzJdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVM
RF9PRkZTRVQoQ29kZUdlbmVyYXRvclJlc3BvbnNlLCBlcnJvcl8pLAotICAgIEdPT0dMRV9QUk9U
T0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoQ29kZUdlbmVyYXRvclJlc3BvbnNl
LCBmaWxlXyksCi0gIH07Ci0gIENvZGVHZW5lcmF0b3JSZXNwb25zZV9yZWZsZWN0aW9uXyA9Ci0g
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKAotICAgICAgQ29kZUdlbmVyYXRvclJl
c3BvbnNlX2Rlc2NyaXB0b3JfLAotICAgICAgQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpkZWZhdWx0
X2luc3RhbmNlXywKLSAgICAgIENvZGVHZW5lcmF0b3JSZXNwb25zZV9vZmZzZXRzXywKLSAgICAg
IEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoQ29kZUdlbmVy
YXRvclJlc3BvbnNlLCBfaGFzX2JpdHNfWzBdKSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAg
ICBzaXplb2YoQ29kZUdlbmVyYXRvclJlc3BvbnNlKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoQ29kZUdlbmVyYXRvclJlc3BvbnNlLCBfaW50
ZXJuYWxfbWV0YWRhdGFfKSwKLSAgICAgIC0xKTsKLSAgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0Zp
bGVfZGVzY3JpcHRvcl8gPSBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfZGVzY3JpcHRvcl8tPm5lc3Rl
ZF90eXBlKDApOwotICBzdGF0aWMgY29uc3QgaW50IENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxl
X29mZnNldHNfWzNdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9G
SUVMRF9PRkZTRVQoQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUsIG5hbWVfKSwKLSAgICBHT09H
TEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKENvZGVHZW5lcmF0b3JS
ZXNwb25zZV9GaWxlLCBpbnNlcnRpb25fcG9pbnRfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VO
RVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlLCBj
b250ZW50XyksCi0gIH07Ci0gIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlX3JlZmxlY3Rpb25f
ID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBDb2RlR2VuZXJh
dG9yUmVzcG9uc2VfRmlsZV9kZXNjcmlwdG9yXywKLSAgICAgIENvZGVHZW5lcmF0b3JSZXNwb25z
ZV9GaWxlOjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAgIENvZGVHZW5lcmF0b3JSZXNwb25zZV9G
aWxlX29mZnNldHNfLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJ
RUxEX09GRlNFVChDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZSwgX2hhc19iaXRzX1swXSksCi0g
ICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKENvZGVHZW5lcmF0b3JSZXNwb25zZV9G
aWxlKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZT
RVQoQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUsIF9pbnRlcm5hbF9tZXRhZGF0YV8pLAotICAg
ICAgLTEpOwotfQotCi1uYW1lc3BhY2UgewotCi1HT09HTEVfUFJPVE9CVUZfREVDTEFSRV9PTkNF
KHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzX29uY2VfKTsKLWlubGluZSB2b2lkIHByb3RvYnVm
X0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpHb29nbGVP
bmNlSW5pdCgmcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNfb25jZV8sCi0gICAgICAgICAgICAg
ICAgICZwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmY29tcGlsZXJfMmZw
bHVnaW5fMmVwcm90byk7Ci19Ci0KLXZvaWQgcHJvdG9idWZfUmVnaXN0ZXJUeXBlcyhjb25zdCA6
OnN0ZDo6c3RyaW5nJikgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVy
YXRlZE1lc3NhZ2UoCi0gICAgICBDb2RlR2VuZXJhdG9yUmVxdWVzdF9kZXNjcmlwdG9yXywgJkNv
ZGVHZW5lcmF0b3JSZXF1ZXN0OjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgK
LSAgICAgIENvZGVHZW5lcmF0b3JSZXNwb25zZV9kZXNjcmlwdG9yXywgJkNvZGVHZW5lcmF0b3JS
ZXNwb25zZTo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBDb2Rl
R2VuZXJhdG9yUmVzcG9uc2VfRmlsZV9kZXNjcmlwdG9yXywgJkNvZGVHZW5lcmF0b3JSZXNwb25z
ZV9GaWxlOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotdm9p
ZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZjb21waWxlcl8yZnBs
dWdpbl8yZXByb3RvKCkgewotICBkZWxldGUgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OmRlZmF1bHRf
aW5zdGFuY2VfOwotICBkZWxldGUgQ29kZUdlbmVyYXRvclJlcXVlc3RfcmVmbGVjdGlvbl87Ci0g
IGRlbGV0ZSBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxl
dGUgQ29kZUdlbmVyYXRvclJlc3BvbnNlX3JlZmxlY3Rpb25fOwotICBkZWxldGUgQ29kZUdlbmVy
YXRvclJlc3BvbnNlX0ZpbGU6OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgQ29kZUdlbmVy
YXRvclJlc3BvbnNlX0ZpbGVfcmVmbGVjdGlvbl87Ci19Ci0KLXZvaWQgcHJvdG9idWZfQWRkRGVz
Y19nb29nbGVfMmZwcm90b2J1Zl8yZmNvbXBpbGVyXzJmcGx1Z2luXzJlcHJvdG8oKSB7Ci0gIHN0
YXRpYyBib29sIGFscmVhZHlfaGVyZSA9IGZhbHNlOwotICBpZiAoYWxyZWFkeV9oZXJlKSByZXR1
cm47Ci0gIGFscmVhZHlfaGVyZSA9IHRydWU7Ci0gIEdPT0dMRV9QUk9UT0JVRl9WRVJJRllfVkVS
U0lPTjsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJm
cHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpE
ZXNjcmlwdG9yUG9vbDo6SW50ZXJuYWxBZGRHZW5lcmF0ZWRGaWxlKAotICAgICJcbiVnb29nbGUv
cHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLnByb3RvXDAyMiIKLSAgICAiXDAzMGdvb2dsZS5wcm90
b2J1Zi5jb21waWxlclwwMzIgZ29vZ2xlL3Byb3RvYiIKLSAgICAidWYvZGVzY3JpcHRvci5wcm90
b1wifVxuXDAyNENvZGVHZW5lcmF0b3JSZXF1IgotICAgICJlc3RcMDIyXDAzMFxuXDAyMGZpbGVf
dG9fZ2VuZXJhdGVcMDMwXDAwMSBcMDAzKFx0XDAyMlwwMjFcblx0cGFyYW1ldCIKLSAgICAiZXJc
MDMwXDAwMiBcMDAxKFx0XDAyMjhcblxucHJvdG9fZmlsZVwwMzBcMDE3IFwwMDMoXDAxMzIkLmdv
b2dsZS5wciIKLSAgICAib3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG9cIlwyNTJcMDAxXG5cMDI1
Q29kZUdlbmVyIgotICAgICJhdG9yUmVzcG9uc2VcMDIyXHJcblwwMDVlcnJvclwwMzBcMDAxIFww
MDEoXHRcMDIyQlxuXDAwNGZpbGVcMDMwXDAxNyBcMDAzKCIKLSAgICAiXDAxMzI0Lmdvb2dsZS5w
cm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdCIKLSAgICAib3JSZXNwb25zZS5GaWxlXDAzMj5c
blwwMDRGaWxlXDAyMlwwMTRcblwwMDRuYW1lXDAzMFwwMDEgXDAwMShcdFwwMjJcMDI3XG4iCi0g
ICAgIlwwMTdpbnNlcnRpb25fcG9pbnRcMDMwXDAwMiBcMDAxKFx0XDAyMlwwMTdcblwwMDdjb250
ZW50XDAzMFwwMTcgXDAwMShcdEIiCi0gICAgIjdcblwwMzRjb20uZ29vZ2xlLnByb3RvYnVmLmNv
bXBpbGVyQlwwMTRQbHVnaW5QIgotICAgICJyb3Rvc1pcdHBsdWdpbl9nbyIsIDQ1Nik7Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0
ZWRGaWxlKAotICAgICJnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLnByb3RvIiwgJnBy
b3RvYnVmX1JlZ2lzdGVyVHlwZXMpOwotICBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6ZGVmYXVsdF9p
bnN0YW5jZV8gPSBuZXcgQ29kZUdlbmVyYXRvclJlcXVlc3QoKTsKLSAgQ29kZUdlbmVyYXRvclJl
c3BvbnNlOjpkZWZhdWx0X2luc3RhbmNlXyA9IG5ldyBDb2RlR2VuZXJhdG9yUmVzcG9uc2UoKTsK
LSAgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IENv
ZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlKCk7Ci0gIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpkZWZh
dWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIENvZGVHZW5lcmF0b3JS
ZXNwb25zZTo6ZGVmYXVsdF9pbnN0YW5jZV8tPkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBD
b2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6ZGVmYXVsdF9pbnN0YW5jZV8tPkluaXRBc0RlZmF1
bHRJbnN0YW5jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpPblNodXRkb3du
KCZwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZjb21waWxlcl8yZnBs
dWdpbl8yZXByb3RvKTsKLX0KLQotLy8gRm9yY2UgQWRkRGVzY3JpcHRvcnMoKSB0byBiZSBjYWxs
ZWQgYXQgc3RhdGljIGluaXRpYWxpemF0aW9uIHRpbWUuCi1zdHJ1Y3QgU3RhdGljRGVzY3JpcHRv
ckluaXRpYWxpemVyX2dvb2dsZV8yZnByb3RvYnVmXzJmY29tcGlsZXJfMmZwbHVnaW5fMmVwcm90
byB7Ci0gIFN0YXRpY0Rlc2NyaXB0b3JJbml0aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8yZmNv
bXBpbGVyXzJmcGx1Z2luXzJlcHJvdG8oKSB7Ci0gICAgcHJvdG9idWZfQWRkRGVzY19nb29nbGVf
MmZwcm90b2J1Zl8yZmNvbXBpbGVyXzJmcGx1Z2luXzJlcHJvdG8oKTsKLSAgfQotfSBzdGF0aWNf
ZGVzY3JpcHRvcl9pbml0aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8yZmNvbXBpbGVyXzJmcGx1
Z2luXzJlcHJvdG9fOwotCi1uYW1lc3BhY2UgewotCi1zdGF0aWMgdm9pZCBNZXJnZUZyb21GYWls
KGludCBsaW5lKSBHT09HTEVfQVRUUklCVVRFX0NPTEQ7Ci1zdGF0aWMgdm9pZCBNZXJnZUZyb21G
YWlsKGludCBsaW5lKSB7Ci0gIEdPT0dMRV9DSEVDSyhmYWxzZSkgPDwgX19GSUxFX18gPDwgIjoi
IDw8IGxpbmU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0KLS8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lm
ICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgQ29kZUdl
bmVyYXRvclJlcXVlc3Q6OmtGaWxlVG9HZW5lcmF0ZUZpZWxkTnVtYmVyOwotY29uc3QgaW50IENv
ZGVHZW5lcmF0b3JSZXF1ZXN0OjprUGFyYW1ldGVyRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgQ29k
ZUdlbmVyYXRvclJlcXVlc3Q6OmtQcm90b0ZpbGVGaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRl
ZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotQ29kZUdlbmVyYXRvclJlcXVl
c3Q6OkNvZGVHZW5lcmF0b3JSZXF1ZXN0KCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3Nh
Z2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5jb21w
aWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdCkKLX0KLQotdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVz
dDo6SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotfQotCi1Db2RlR2VuZXJhdG9yUmVxdWVzdDo6
Q29kZUdlbmVyYXRvclJlcXVlc3QoY29uc3QgQ29kZUdlbmVyYXRvclJlcXVlc3QmIGZyb20pCi0g
IDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRh
XyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuY29t
cGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QpCi19Ci0KLXZvaWQgQ29kZUdlbmVyYXRvclJlcXVl
c3Q6OlNoYXJlZEN0b3IoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwotICBwYXJhbWV0ZXJfLlVuc2FmZVNl
dERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9oYXNfYml0
c18pKTsKLX0KLQotQ29kZUdlbmVyYXRvclJlcXVlc3Q6On5Db2RlR2VuZXJhdG9yUmVxdWVzdCgp
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0b3I6Z29vZ2xlLnByb3Rv
YnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0KQotICBTaGFyZWREdG9yKCk7Ci19Ci0K
LXZvaWQgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OlNoYXJlZER0b3IoKSB7Ci0gIHBhcmFtZXRlcl8u
RGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsK
LSAgfQotfQotCi12b2lkIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpTZXRDYWNoZWRTaXplKGludCBz
aXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0g
IF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19F
TkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogQ29kZUdlbmVy
YXRvclJlcXVlc3Q6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3Jz
T25jZSgpOwotICByZXR1cm4gQ29kZUdlbmVyYXRvclJlcXVlc3RfZGVzY3JpcHRvcl87Ci19Ci0K
LWNvbnN0IENvZGVHZW5lcmF0b3JSZXF1ZXN0JiBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6ZGVmYXVs
dF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVm
X0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZjb21waWxlcl8yZnBsdWdpbl8yZXByb3RvKCk7
Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLUNvZGVHZW5lcmF0b3JSZXF1ZXN0
KiBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1Db2Rl
R2VuZXJhdG9yUmVxdWVzdCogQ29kZUdlbmVyYXRvclJlcXVlc3Q6Ok5ldyg6Omdvb2dsZTo6cHJv
dG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3QgewotICBDb2RlR2VuZXJhdG9yUmVxdWVzdCogbiA9
IG5ldyBDb2RlR2VuZXJhdG9yUmVxdWVzdDsKLSAgaWYgKGFyZW5hICE9IE5VTEwpIHsKLSAgICBh
cmVuYS0+T3duKG4pOwotICB9Ci0gIHJldHVybiBuOwotfQotCi12b2lkIENvZGVHZW5lcmF0b3JS
ZXF1ZXN0OjpDbGVhcigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2Ns
ZWFyX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdCkK
LSAgaWYgKGhhc19wYXJhbWV0ZXIoKSkgewotICAgIHBhcmFtZXRlcl8uQ2xlYXJUb0VtcHR5Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotICB9Ci0gIGZpbGVfdG9fZ2VuZXJhdGVfLkNsZWFyKCk7Ci0gIHByb3RvX2Zp
bGVfLkNsZWFyKCk7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNf
KSk7Ci0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewot
ICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+Q2xlYXIoKTsKLSAgfQotfQotCi1ib29sIENv
ZGVHZW5lcmF0b3JSZXF1ZXN0OjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUg
RE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290
byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5D
b2RlR2VuZXJhdG9yUmVxdWVzdCkKLSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdv
b2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9m
ZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5k
bGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7Ci0gICAgICAvLyByZXBlYXRl
ZCBzdHJpbmcgZmlsZV90b19nZW5lcmF0ZSA9IDE7Ci0gICAgICBjYXNlIDE6IHsKLSAgICAgICAg
aWYgKHRhZyA9PSAxMCkgewotICAgICAgICAgcGFyc2VfZmlsZV90b19nZW5lcmF0ZToKLSAgICAg
ICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJl
YWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPmFkZF9maWxlX3RvX2dlbmVy
YXRlKCkpKTsKLSAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgICAgICAgIHRoaXMtPmZpbGVf
dG9fZ2VuZXJhdGUodGhpcy0+ZmlsZV90b19nZW5lcmF0ZV9zaXplKCkgLSAxKS5kYXRhKCksCi0g
ICAgICAgICAgICB0aGlzLT5maWxlX3RvX2dlbmVyYXRlKHRoaXMtPmZpbGVfdG9fZ2VuZXJhdGVf
c2l6ZSgpIC0gMSkubGVuZ3RoKCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYu
Y29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZSIpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMTApKSBnb3RvIHBhcnNlX2ZpbGVfdG9fZ2VuZXJh
dGU7Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDE4KSkgZ290byBwYXJzZV9wYXJhbWV0
ZXI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcg
cGFyYW1ldGVyID0gMjsKLSAgICAgIGNhc2UgMjogewotICAgICAgICBpZiAodGFnID09IDE4KSB7
Ci0gICAgICAgICBwYXJzZV9wYXJhbWV0ZXI6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAg
ICAgIGlucHV0LCB0aGlzLT5tdXRhYmxlX3BhcmFtZXRlcigpKSk7Ci0gICAgICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVk
RmllbGQoCi0gICAgICAgICAgICB0aGlzLT5wYXJhbWV0ZXIoKS5kYXRhKCksIHRoaXMtPnBhcmFt
ZXRlcigpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdDo6UEFSU0UsCi0gICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLmNvbXBp
bGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LnBhcmFtZXRlciIpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlu
cHV0LT5FeHBlY3RUYWcoMTIyKSkgZ290byBwYXJzZV9wcm90b19maWxlOwotICAgICAgICBicmVh
azsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVz
Y3JpcHRvclByb3RvIHByb3RvX2ZpbGUgPSAxNTsKLSAgICAgIGNhc2UgMTU6IHsKLSAgICAgICAg
aWYgKHRhZyA9PSAxMjIpIHsKLSAgICAgICAgIHBhcnNlX3Byb3RvX2ZpbGU6Ci0gICAgICAgICAg
RE9fKGlucHV0LT5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBhcnNlX2xv
b3BfcHJvdG9fZmlsZToKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0aCgK
LSAgICAgICAgICAgICAgICBpbnB1dCwgYWRkX3Byb3RvX2ZpbGUoKSkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGlucHV0LT5FeHBlY3RUYWcoMTIyKSkgZ290byBwYXJzZV9sb29wX3Byb3RvX2ZpbGU7Ci0g
ICAgICAgIGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBp
ZiAoaW5wdXQtPkV4cGVjdEF0RW5kKCkpIGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAg
ICBpZiAodGFnID09IDAgfHwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5E
X0dST1VQKSB7Ci0gICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERP
Xyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0g
ICAgICAgICAgICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5D
b2RlR2VuZXJhdG9yUmVxdWVzdCkKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuY29tcGls
ZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QpCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0K
LQotdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNv
bnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29n
bGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QpCi0gIC8vIHJlcGVhdGVk
IHN0cmluZyBmaWxlX3RvX2dlbmVyYXRlID0gMTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlz
LT5maWxlX3RvX2dlbmVyYXRlX3NpemUoKTsgaSsrKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAg
ICB0aGlzLT5maWxlX3RvX2dlbmVyYXRlKGkpLmRhdGEoKSwgdGhpcy0+ZmlsZV90b19nZW5lcmF0
ZShpKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdl
bmVyYXRvclJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZSIpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZygKLSAgICAgIDEsIHRoaXMt
PmZpbGVfdG9fZ2VuZXJhdGUoaSksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJp
bmcgcGFyYW1ldGVyID0gMjsKLSAgaWYgKGhhc19wYXJhbWV0ZXIoKSkgewotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZp
ZWxkKAotICAgICAgdGhpcy0+cGFyYW1ldGVyKCkuZGF0YSgpLCB0aGlzLT5wYXJhbWV0ZXIoKS5s
ZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6
OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRv
clJlcXVlc3QucGFyYW1ldGVyIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgMiwgdGhpcy0+
cGFyYW1ldGVyKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3Rv
YnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8gcHJvdG9fZmlsZSA9IDE1OwotICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMCwgbiA9IHRoaXMtPnByb3RvX2ZpbGVfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0g
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVz
c2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDE1LCB0aGlzLT5wcm90b19maWxlKGkpLCBvdXRwdXQp
OwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygp
KSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFs
aXplVW5rbm93bkZpZWxkcygKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwgb3V0cHV0KTsKLSAg
fQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpnb29nbGUucHJv
dG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QpCi19Ci0KLTo6Z29vZ2xlOjpwcm90
b2J1Zjo6dWludDgqIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6
ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0
Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdCkKLSAgLy8gcmVw
ZWF0ZWQgc3RyaW5nIGZpbGVfdG9fZ2VuZXJhdGUgPSAxOwotICBmb3IgKGludCBpID0gMDsgaSA8
IHRoaXMtPmZpbGVfdG9fZ2VuZXJhdGVfc2l6ZSgpOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgK
LSAgICAgIHRoaXMtPmZpbGVfdG9fZ2VuZXJhdGUoaSkuZGF0YSgpLCB0aGlzLT5maWxlX3RvX2dl
bmVyYXRlKGkpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5D
b2RlR2VuZXJhdG9yUmVxdWVzdC5maWxlX3RvX2dlbmVyYXRlIik7Ci0gICAgdGFyZ2V0ID0gOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVT
dHJpbmdUb0FycmF5KDEsIHRoaXMtPmZpbGVfdG9fZ2VuZXJhdGUoaSksIHRhcmdldCk7Ci0gIH0K
LQotICAvLyBvcHRpb25hbCBzdHJpbmcgcGFyYW1ldGVyID0gMjsKLSAgaWYgKGhhc19wYXJhbWV0
ZXIoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZl
cmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+cGFyYW1ldGVyKCkuZGF0YSgp
LCB0aGlzLT5wYXJhbWV0ZXIoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYu
Y29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QucGFyYW1ldGVyIik7Ci0gICAgdGFyZ2V0ID0K
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0
ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDIsIHRoaXMtPnBhcmFtZXRlcigpLCB0YXJnZXQpOwot
ICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3Rv
IHByb3RvX2ZpbGUgPSAxNTsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5w
cm90b19maWxlX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5v
VmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDE1LCB0aGlzLT5wcm90b19maWxlKGkpLCB0YXJnZXQp
OwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygp
KSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dDo6U2VyaWFsaXplVW5rbm93bkZpZWxkc1RvQXJyYXkoCi0gICAgICAgIHVua25vd25fZmllbGRz
KCksIHRhcmdldCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6
ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1
ZXN0KQotICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OkJ5
dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0
ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVz
dCkKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBwYXJhbWV0
ZXIgPSAyOwotICBpZiAoaGFzX3BhcmFtZXRlcigpKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsK
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJp
bmdTaXplKAotICAgICAgICB0aGlzLT5wYXJhbWV0ZXIoKSk7Ci0gIH0KLQotICAvLyByZXBlYXRl
ZCBzdHJpbmcgZmlsZV90b19nZW5lcmF0ZSA9IDE7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMt
PmZpbGVfdG9fZ2VuZXJhdGVfc2l6ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPmZp
bGVfdG9fZ2VuZXJhdGVfc2l6ZSgpOyBpKyspIHsKLSAgICB0b3RhbF9zaXplICs9IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAg
dGhpcy0+ZmlsZV90b19nZW5lcmF0ZShpKSk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xl
LnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8gcHJvdG9fZmlsZSA9IDE1OwotICB0b3RhbF9z
aXplICs9IDEgKiB0aGlzLT5wcm90b19maWxlX3NpemUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0aGlzLT5wcm90b19maWxlX3NpemUoKTsgaSsrKSB7Ci0gICAgdG90YWxfc2l6ZSArPQotICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VT
aXplTm9WaXJ0dWFsKAotICAgICAgICB0aGlzLT5wcm90b19maWxlKGkpKTsKLSAgfQotCi0gIGlm
IChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHRvdGFs
X3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6
OkNvbXB1dGVVbmtub3duRmllbGRzU2l6ZSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSk7Ci0g
IH0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9z
aXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgp
OwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6
TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6Z29v
Z2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0KQotICBpZiAoR09PR0xF
X1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwot
ICBjb25zdCBDb2RlR2VuZXJhdG9yUmVxdWVzdCogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IENvZGVHZW5l
cmF0b3JSZXF1ZXN0PigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9j
YXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0KQot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZy
b20sIHRoaXMpOwotICB9IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2Vu
ZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVy
LkNvZGVHZW5lcmF0b3JSZXF1ZXN0KQotICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQotfQot
Ci12b2lkIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpNZXJnZUZyb20oY29uc3QgQ29kZUdlbmVyYXRv
clJlcXVlc3QmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVj
aWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJh
dG9yUmVxdWVzdCkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBN
ZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgZmlsZV90b19nZW5lcmF0ZV8uTWVyZ2VGcm9tKGZy
b20uZmlsZV90b19nZW5lcmF0ZV8pOwotICBwcm90b19maWxlXy5NZXJnZUZyb20oZnJvbS5wcm90
b19maWxlXyk7Ci0gIGlmIChmcm9tLl9oYXNfYml0c19bMSAvIDMyXSAmICgweGZmdSA8PCAoMSAl
IDMyKSkpIHsKLSAgICBpZiAoZnJvbS5oYXNfcGFyYW1ldGVyKCkpIHsKLSAgICAgIHNldF9oYXNf
cGFyYW1ldGVyKCk7Ci0gICAgICBwYXJhbWV0ZXJfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJv
bS5wYXJhbWV0ZXJfKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyb20uX2ludGVybmFsX21ldGFkYXRh
Xy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkt
Pk1lcmdlRnJvbShmcm9tLnVua25vd25fZmllbGRzKCkpOwotICB9Ci19Ci0KLXZvaWQgQ29kZUdl
bmVyYXRvclJlcXVlc3Q6OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2Fn
ZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlf
ZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3Qp
Ci0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShm
cm9tKTsKLX0KLQotdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6Q29weUZyb20oY29uc3QgQ29k
ZUdlbmVyYXRvclJlcXVlc3QmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChj
bGFzc19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNv
ZGVHZW5lcmF0b3JSZXF1ZXN0KQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVh
cigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLWJvb2wgQ29kZUdlbmVyYXRvclJlcXVlc3Q6
OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgaWYgKCE6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpBbGxBcmVJbml0aWFsaXplZCh0aGlzLT5wcm90b19maWxlKCkpKSByZXR1cm4gZmFs
c2U7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpTd2Fw
KENvZGVHZW5lcmF0b3JSZXF1ZXN0KiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0
dXJuOwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQotdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVz
dDo6SW50ZXJuYWxTd2FwKENvZGVHZW5lcmF0b3JSZXF1ZXN0KiBvdGhlcikgewotICBmaWxlX3Rv
X2dlbmVyYXRlXy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT5maWxlX3RvX2dlbmVyYXRlXyk7Ci0g
IHBhcmFtZXRlcl8uU3dhcCgmb3RoZXItPnBhcmFtZXRlcl8pOwotICBwcm90b19maWxlXy5VbnNh
ZmVBcmVuYVN3YXAoJm90aGVyLT5wcm90b19maWxlXyk7Ci0gIHN0ZDo6c3dhcChfaGFzX2JpdHNf
WzBdLCBvdGhlci0+X2hhc19iaXRzX1swXSk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgm
b3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywg
b3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRh
IENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZf
QXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEg
bWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBDb2RlR2VuZXJhdG9yUmVxdWVzdF9k
ZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IENvZGVHZW5lcmF0b3JSZXF1ZXN0
X3JlZmxlY3Rpb25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJ
TkVfTk9UX0lOX0hFQURFUlMKLS8vIENvZGVHZW5lcmF0b3JSZXF1ZXN0Ci0KLS8vIHJlcGVhdGVk
IHN0cmluZyBmaWxlX3RvX2dlbmVyYXRlID0gMTsKLWludCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6
ZmlsZV90b19nZW5lcmF0ZV9zaXplKCkgY29uc3QgewotICByZXR1cm4gZmlsZV90b19nZW5lcmF0
ZV8uc2l6ZSgpOwotfQotdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6Y2xlYXJfZmlsZV90b19n
ZW5lcmF0ZSgpIHsKLSAgZmlsZV90b19nZW5lcmF0ZV8uQ2xlYXIoKTsKLX0KLSBjb25zdCA6OnN0
ZDo6c3RyaW5nJiBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6ZmlsZV90b19nZW5lcmF0ZShpbnQgaW5k
ZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QuZmlsZV90b19nZW5lcmF0
ZSkKLSAgcmV0dXJuIGZpbGVfdG9fZ2VuZXJhdGVfLkdldChpbmRleCk7Ci19Ci0gOjpzdGQ6OnN0
cmluZyogQ29kZUdlbmVyYXRvclJlcXVlc3Q6Om11dGFibGVfZmlsZV90b19nZW5lcmF0ZShpbnQg
aW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29v
Z2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LmZpbGVfdG9fZ2VuZXJh
dGUpCi0gIHJldHVybiBmaWxlX3RvX2dlbmVyYXRlXy5NdXRhYmxlKGluZGV4KTsKLX0KLSB2b2lk
IENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpzZXRfZmlsZV90b19nZW5lcmF0ZShpbnQgaW5kZXgsIGNv
bnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0
LmZpbGVfdG9fZ2VuZXJhdGUpCi0gIGZpbGVfdG9fZ2VuZXJhdGVfLk11dGFibGUoaW5kZXgpLT5h
c3NpZ24odmFsdWUpOwotfQotIHZvaWQgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OnNldF9maWxlX3Rv
X2dlbmVyYXRlKGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUpIHsKLSAgZmlsZV90b19nZW5l
cmF0ZV8uTXV0YWJsZShpbmRleCktPmFzc2lnbih2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdl
bmVyYXRvclJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZSkKLX0KLSB2b2lkIENvZGVHZW5lcmF0b3JS
ZXF1ZXN0OjpzZXRfZmlsZV90b19nZW5lcmF0ZShpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIHZhbHVl
LCBzaXplX3Qgc2l6ZSkgewotICBmaWxlX3RvX2dlbmVyYXRlXy5NdXRhYmxlKGluZGV4KS0+YXNz
aWduKAotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJv
dG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZSkKLX0K
LSA6OnN0ZDo6c3RyaW5nKiBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6YWRkX2ZpbGVfdG9fZ2VuZXJh
dGUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGRfbXV0YWJsZTpn
b29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QuZmlsZV90b19nZW5l
cmF0ZSkKLSAgcmV0dXJuIGZpbGVfdG9fZ2VuZXJhdGVfLkFkZCgpOwotfQotIHZvaWQgQ29kZUdl
bmVyYXRvclJlcXVlc3Q6OmFkZF9maWxlX3RvX2dlbmVyYXRlKGNvbnN0IDo6c3RkOjpzdHJpbmcm
IHZhbHVlKSB7Ci0gIGZpbGVfdG9fZ2VuZXJhdGVfLkFkZCgpLT5hc3NpZ24odmFsdWUpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5jb21w
aWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdC5maWxlX3RvX2dlbmVyYXRlKQotfQotIHZvaWQgQ29k
ZUdlbmVyYXRvclJlcXVlc3Q6OmFkZF9maWxlX3RvX2dlbmVyYXRlKGNvbnN0IGNoYXIqIHZhbHVl
KSB7Ci0gIGZpbGVfdG9fZ2VuZXJhdGVfLkFkZCgpLT5hc3NpZ24odmFsdWUpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX2NoYXI6Z29vZ2xlLnByb3RvYnVmLmNvbXBp
bGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LmZpbGVfdG9fZ2VuZXJhdGUpCi19Ci0gdm9pZCBDb2Rl
R2VuZXJhdG9yUmVxdWVzdDo6YWRkX2ZpbGVfdG9fZ2VuZXJhdGUoY29uc3QgY2hhciogdmFsdWUs
IHNpemVfdCBzaXplKSB7Ci0gIGZpbGVfdG9fZ2VuZXJhdGVfLkFkZCgpLT5hc3NpZ24ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2FkZF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5D
b2RlR2VuZXJhdG9yUmVxdWVzdC5maWxlX3RvX2dlbmVyYXRlKQotfQotIGNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmluZz4mCi1Db2RlR2VuZXJh
dG9yUmVxdWVzdDo6ZmlsZV90b19nZW5lcmF0ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5l
cmF0b3JSZXF1ZXN0LmZpbGVfdG9fZ2VuZXJhdGUpCi0gIHJldHVybiBmaWxlX3RvX2dlbmVyYXRl
XzsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJp
bmc+KgotQ29kZUdlbmVyYXRvclJlcXVlc3Q6Om11dGFibGVfZmlsZV90b19nZW5lcmF0ZSgpIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUu
cHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZSkK
LSAgcmV0dXJuICZmaWxlX3RvX2dlbmVyYXRlXzsKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIHBh
cmFtZXRlciA9IDI7Ci1ib29sIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpoYXNfcGFyYW1ldGVyKCkg
Y29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAydSkgIT0gMDsKLX0K
LXZvaWQgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OnNldF9oYXNfcGFyYW1ldGVyKCkgewotICBfaGFz
X2JpdHNfWzBdIHw9IDB4MDAwMDAwMDJ1OwotfQotdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6
Y2xlYXJfaGFzX3BhcmFtZXRlcigpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMnU7
Ci19Ci12b2lkIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpjbGVhcl9wYXJhbWV0ZXIoKSB7Ci0gIHBh
cmFtZXRlcl8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfcGFyYW1ldGVy
KCk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OnBhcmFt
ZXRlcigpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpn
b29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QucGFyYW1ldGVyKQot
ICByZXR1cm4gcGFyYW1ldGVyXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBDb2RlR2VuZXJh
dG9yUmVxdWVzdDo6c2V0X3BhcmFtZXRlcihjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewot
ICBzZXRfaGFzX3BhcmFtZXRlcigpOwotICBwYXJhbWV0ZXJfLlNldE5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1
ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3Rv
YnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LnBhcmFtZXRlcikKLX0KLSB2b2lkIENv
ZGVHZW5lcmF0b3JSZXF1ZXN0OjpzZXRfcGFyYW1ldGVyKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0g
IHNldF9oYXNfcGFyYW1ldGVyKCk7Ci0gIHBhcmFtZXRlcl8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3Rk
OjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdC5wYXJh
bWV0ZXIpCi19Ci0gdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6c2V0X3BhcmFtZXRlcihjb25z
dCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19wYXJhbWV0ZXIoKTsKLSAg
cGFyYW1ldGVyXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29k
ZUdlbmVyYXRvclJlcXVlc3QucGFyYW1ldGVyKQotfQotIDo6c3RkOjpzdHJpbmcqIENvZGVHZW5l
cmF0b3JSZXF1ZXN0OjptdXRhYmxlX3BhcmFtZXRlcigpIHsKLSAgc2V0X2hhc19wYXJhbWV0ZXIo
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnBy
b3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LnBhcmFtZXRlcikKLSAgcmV0dXJu
IHBhcmFtZXRlcl8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBDb2Rl
R2VuZXJhdG9yUmVxdWVzdDo6cmVsZWFzZV9wYXJhbWV0ZXIoKSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2Rl
R2VuZXJhdG9yUmVxdWVzdC5wYXJhbWV0ZXIpCi0gIGNsZWFyX2hhc19wYXJhbWV0ZXIoKTsKLSAg
cmV0dXJuIHBhcmFtZXRlcl8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIENvZGVHZW5l
cmF0b3JSZXF1ZXN0OjpzZXRfYWxsb2NhdGVkX3BhcmFtZXRlcig6OnN0ZDo6c3RyaW5nKiBwYXJh
bWV0ZXIpIHsKLSAgaWYgKHBhcmFtZXRlciAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19wYXJhbWV0
ZXIoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfcGFyYW1ldGVyKCk7Ci0gIH0KLSAgcGFy
YW1ldGVyXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgcGFyYW1ldGVyKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLmNv
bXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LnBhcmFtZXRlcikKLX0KLQotLy8gcmVwZWF0ZWQg
Lmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvIHByb3RvX2ZpbGUgPSAxNTsKLWlu
dCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6cHJvdG9fZmlsZV9zaXplKCkgY29uc3QgewotICByZXR1
cm4gcHJvdG9fZmlsZV8uc2l6ZSgpOwotfQotdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6Y2xl
YXJfcHJvdG9fZmlsZSgpIHsKLSAgcHJvdG9fZmlsZV8uQ2xlYXIoKTsKLX0KLWNvbnN0IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3JQcm90byYgQ29kZUdlbmVyYXRvclJlcXVlc3Q6
OnByb3RvX2ZpbGUoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1
ZXN0LnByb3RvX2ZpbGUpCi0gIHJldHVybiBwcm90b19maWxlXy5HZXQoaW5kZXgpOwotfQotOjpn
b29nbGU6OnByb3RvYnVmOjpGaWxlRGVzY3JpcHRvclByb3RvKiBDb2RlR2VuZXJhdG9yUmVxdWVz
dDo6bXV0YWJsZV9wcm90b19maWxlKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVy
YXRvclJlcXVlc3QucHJvdG9fZmlsZSkKLSAgcmV0dXJuIHByb3RvX2ZpbGVfLk11dGFibGUoaW5k
ZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlRGVzY3JpcHRvclByb3RvKiBDb2RlR2Vu
ZXJhdG9yUmVxdWVzdDo6YWRkX3Byb3RvX2ZpbGUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JS
ZXF1ZXN0LnByb3RvX2ZpbGUpCi0gIHJldHVybiBwcm90b19maWxlXy5BZGQoKTsKLX0KLTo6Z29v
Z2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxl
RGVzY3JpcHRvclByb3RvID4qCi1Db2RlR2VuZXJhdG9yUmVxdWVzdDo6bXV0YWJsZV9wcm90b19m
aWxlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0
Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdC5wcm90b19maWxl
KQotICByZXR1cm4gJnByb3RvX2ZpbGVfOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpS
ZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNjcmlwdG9yUHJvdG8g
PiYKLUNvZGVHZW5lcmF0b3JSZXF1ZXN0Ojpwcm90b19maWxlKCkgY29uc3QgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIu
Q29kZUdlbmVyYXRvclJlcXVlc3QucHJvdG9fZmlsZSkKLSAgcmV0dXJuIHByb3RvX2ZpbGVfOwot
fQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29u
c3QgaW50IENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjprTmFtZUZpZWxkTnVtYmVyOwotY29u
c3QgaW50IENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjprSW5zZXJ0aW9uUG9pbnRGaWVsZE51
bWJlcjsKLWNvbnN0IGludCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6a0NvbnRlbnRGaWVs
ZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5
MDAKLQotQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OkNvZGVHZW5lcmF0b3JSZXNwb25zZV9G
aWxlKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFk
YXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVz
cG9uc2UuRmlsZSkKLX0KLQotdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6SW5pdEFz
RGVmYXVsdEluc3RhbmNlKCkgewotfQotCi1Db2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6Q29k
ZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUoY29uc3QgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUm
IGZyb20pCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFs
X21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJv
dG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUpCi19Ci0KLXZvaWQgQ29k
ZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OlNoYXJlZEN0b3IoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwot
ICBuYW1lXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGluc2VydGlvbl9wb2ludF8uVW5zYWZl
U2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotICBjb250ZW50Xy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIDo6
bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci19Ci0KLUNvZGVHZW5l
cmF0b3JSZXNwb25zZV9GaWxlOjp+Q29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUoKSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5jb21w
aWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZSkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12
b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpTaGFyZWREdG9yKCkgewotICBuYW1lXy5E
ZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotICBpbnNlcnRpb25fcG9pbnRfLkRlc3Ryb3lOb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSk7Ci0gIGNvbnRlbnRfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGlmICh0aGlzICE9IGRlZmF1
bHRfaW5zdGFuY2VfKSB7Ci0gIH0KLX0KLQotdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmls
ZTo6U2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3QgewotICBHT09HTEVfU0FGRV9DT05DVVJS
RU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gc2l6ZTsKLSAgR09PR0xFX1NB
RkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OkRlc2NyaXB0b3IqIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpkZXNjcmlwdG9yKCkgewot
ICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIENvZGVHZW5lcmF0
b3JSZXNwb25zZV9GaWxlX2Rlc2NyaXB0b3JfOwotfQotCi1jb25zdCBDb2RlR2VuZXJhdG9yUmVz
cG9uc2VfRmlsZSYgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OmRlZmF1bHRfaW5zdGFuY2Uo
KSB7Ci0gIGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dv
b2dsZV8yZnByb3RvYnVmXzJmY29tcGlsZXJfMmZwbHVnaW5fMmVwcm90bygpOwotICByZXR1cm4g
KmRlZmF1bHRfaW5zdGFuY2VfOwotfQotCi1Db2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZSogQ29k
ZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotQ29k
ZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUqIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpOZXco
Ojpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgQ29kZUdlbmVyYXRv
clJlc3BvbnNlX0ZpbGUqIG4gPSBuZXcgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU7Ci0gIGlm
IChhcmVuYSAhPSBOVUxMKSB7Ci0gICAgYXJlbmEtPk93bihuKTsKLSAgfQotICByZXR1cm4gbjsK
LX0KLQotdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6Q2xlYXIoKSB7Ci0vLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUucHJvdG9idWYu
Y29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUpCi0gIGlmIChfaGFzX2JpdHNfWzAg
LyAzMl0gJiA3dSkgewotICAgIGlmIChoYXNfbmFtZSgpKSB7Ci0gICAgICBuYW1lXy5DbGVhclRv
RW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci0gICAgfQotICAgIGlmIChoYXNfaW5zZXJ0aW9uX3BvaW50KCkp
IHsKLSAgICAgIGluc2VydGlvbl9wb2ludF8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICAg
IH0KLSAgICBpZiAoaGFzX2NvbnRlbnQoKSkgewotICAgICAgY29udGVudF8uQ2xlYXJUb0VtcHR5
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotICAgIH0KLSAgfQotICA6Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXpl
b2YoX2hhc19iaXRzXykpOwotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25f
ZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vua25vd25fZmllbGRzKCktPkNsZWFyKCk7Ci0gIH0K
LX0KLQotYm9vbCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6TWVyZ2VQYXJ0aWFsRnJvbUNv
ZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0q
IGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RS
VUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQz
MiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpnb29nbGUu
cHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUpCi0gIGZvciAoOzsp
IHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAg
PSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAg
IGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIo
dGFnKSkgewotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAgICAgY2FzZSAx
OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAg
ICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVfbmFtZSgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmll
bGQoCi0gICAgICAgICAgICB0aGlzLT5uYW1lKCkuZGF0YSgpLCB0aGlzLT5uYW1lKCkubGVuZ3Ro
KCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
OjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVy
YXRvclJlc3BvbnNlLkZpbGUubmFtZSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdv
dG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RU
YWcoMTgpKSBnb3RvIHBhcnNlX2luc2VydGlvbl9wb2ludDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyBpbnNlcnRpb25fcG9pbnQgPSAyOwotICAg
ICAgY2FzZSAyOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTgpIHsKLSAgICAgICAgIHBhcnNlX2lu
c2VydGlvbl9wb2ludDoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRo
aXMtPm11dGFibGVfaW5zZXJ0aW9uX3BvaW50KCkpKTsKLSAgICAgICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgK
LSAgICAgICAgICAgIHRoaXMtPmluc2VydGlvbl9wb2ludCgpLmRhdGEoKSwgdGhpcy0+aW5zZXJ0
aW9uX3BvaW50KCkubGVuZ3RoKCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYu
Y29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUuaW5zZXJ0aW9uX3BvaW50Iik7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxMjIpKSBnb3RvIHBhcnNlX2NvbnRlbnQ7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcgY29u
dGVudCA9IDE1OwotICAgICAgY2FzZSAxNTogewotICAgICAgICBpZiAodGFnID09IDEyMikgewot
ICAgICAgICAgcGFyc2VfY29udGVudDoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAg
aW5wdXQsIHRoaXMtPm11dGFibGVfY29udGVudCgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQo
Ci0gICAgICAgICAgICB0aGlzLT5jb250ZW50KCkuZGF0YSgpLCB0aGlzLT5jb250ZW50KCkubGVu
Z3RoKCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdl
bmVyYXRvclJlc3BvbnNlLkZpbGUuY29udGVudCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5F
eHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g
ICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9
PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewot
ICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2tpcEZpZWxkKAotICAgICAgICAgICAg
ICBpbnB1dCwgdGFnLCBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRv
clJlc3BvbnNlLkZpbGUpCi0gIHJldHVybiB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KHBhcnNlX2ZhaWx1cmU6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNv
ZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19
Ci0KLXZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OlNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0
cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlKQot
ICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gIGlmIChoYXNfbmFtZSgpKSB7Ci0gICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmlu
Z05hbWVkRmllbGQoCi0gICAgICB0aGlzLT5uYW1lKCkuZGF0YSgpLCB0aGlzLT5uYW1lKCkubGVu
Z3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpT
RVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JS
ZXNwb25zZS5GaWxlLm5hbWUiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAxLCB0aGlzLT5u
YW1lKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgaW5zZXJ0aW9uX3Bv
aW50ID0gMjsKLSAgaWYgKGhhc19pbnNlcnRpb25fcG9pbnQoKSkgewotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxk
KAotICAgICAgdGhpcy0+aW5zZXJ0aW9uX3BvaW50KCkuZGF0YSgpLCB0aGlzLT5pbnNlcnRpb25f
cG9pbnQoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29k
ZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUuaW5zZXJ0aW9uX3BvaW50Iik7Ci0gICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlh
c2VkKAotICAgICAgMiwgdGhpcy0+aW5zZXJ0aW9uX3BvaW50KCksIG91dHB1dCk7Ci0gIH0KLQot
ICAvLyBvcHRpb25hbCBzdHJpbmcgY29udGVudCA9IDE1OwotICBpZiAoaGFzX2NvbnRlbnQoKSkg
ewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVU
RjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+Y29udGVudCgpLmRhdGEoKSwgdGhpcy0+
Y29udGVudCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5D
b2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZS5jb250ZW50Iik7Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAot
ICAgICAgMTUsIHRoaXMtPmNvbnRlbnQoKSwgb3V0cHV0KTsKLSAgfQotCi0gIGlmIChfaW50ZXJu
YWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHMoCi0gICAg
ICAgIHVua25vd25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5l
cmF0b3JSZXNwb25zZS5GaWxlKQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBDb2Rl
R2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29nbGUucHJv
dG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUpCi0gIC8vIG9wdGlvbmFs
IHN0cmluZyBuYW1lID0gMTsKLSAgaWYgKGhhc19uYW1lKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgK
LSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAg
ICAgICJnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUu
bmFtZSIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAxLCB0aGlzLT5u
YW1lKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgaW5zZXJ0aW9uX3Bv
aW50ID0gMjsKLSAgaWYgKGhhc19pbnNlcnRpb25fcG9pbnQoKSkgewotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxk
KAotICAgICAgdGhpcy0+aW5zZXJ0aW9uX3BvaW50KCkuZGF0YSgpLCB0aGlzLT5pbnNlcnRpb25f
cG9pbnQoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29k
ZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUuaW5zZXJ0aW9uX3BvaW50Iik7Ci0gICAgdGFyZ2V0ID0K
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0
ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDIsIHRoaXMtPmluc2VydGlvbl9wb2ludCgpLCB0YXJn
ZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGNvbnRlbnQgPSAxNTsKLSAgaWYgKGhh
c19jb250ZW50KCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPmNvbnRlbnQoKS5k
YXRhKCksIHRoaXMtPmNvbnRlbnQoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9i
dWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUuY29udGVudCIpOwotICAgIHRh
cmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAxNSwgdGhpcy0+Y29udGVudCgpLCB0YXJn
ZXQpOwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxk
cygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkc1RvQXJyYXkoCi0gICAgICAgIHVua25vd25fZmll
bGRzKCksIHRhcmdldCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlh
bGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JS
ZXNwb25zZS5GaWxlKQotICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQgQ29kZUdlbmVyYXRvclJl
c3BvbnNlX0ZpbGU6OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2Rl
R2VuZXJhdG9yUmVzcG9uc2UuRmlsZSkKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIGlmIChf
aGFzX2JpdHNfWzAgLyAzMl0gJiA3dSkgewotICAgIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0g
MTsKLSAgICBpZiAoaGFzX25hbWUoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0cmluZ1Np
emUoCi0gICAgICAgICAgdGhpcy0+bmFtZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBvcHRpb25hbCBz
dHJpbmcgaW5zZXJ0aW9uX3BvaW50ID0gMjsKLSAgICBpZiAoaGFzX2luc2VydGlvbl9wb2ludCgp
KSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgICB0aGlzLT5p
bnNlcnRpb25fcG9pbnQoKSk7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwgc3RyaW5nIGNvbnRl
bnQgPSAxNTsKLSAgICBpZiAoaGFzX2NvbnRlbnQoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAx
ICsKLSAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OlN0cmluZ1NpemUoCi0gICAgICAgICAgdGhpcy0+Y29udGVudCgpKTsKLSAgICB9Ci0KLSAgfQot
ICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0
b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpDb21wdXRlVW5rbm93bkZpZWxkc1NpemUoCi0gICAgICAgIHVua25vd25fZmllbGRzKCkp
OwotICB9Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNo
ZWRfc2l6ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19F
TkQoKTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgQ29kZUdlbmVyYXRvclJlc3Bv
bnNlX0ZpbGU6Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZy
b20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9t
X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmls
ZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21G
YWlsKF9fTElORV9fKTsKLSAgY29uc3QgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUqIHNvdXJj
ZSA9IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dl
bmVyYXRlZDxjb25zdCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZT4oCi0gICAgICAgICAgJmZy
b20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90b2J1Zi5jb21w
aWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZSkKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2Fz
dF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2Uu
RmlsZSkKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBDb2RlR2VuZXJh
dG9yUmVzcG9uc2VfRmlsZTo6TWVyZ2VGcm9tKGNvbnN0IENvZGVHZW5lcmF0b3JSZXNwb25zZV9G
aWxlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNf
bWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJl
c3BvbnNlLkZpbGUpCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkg
TWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGlmIChmcm9tLl9oYXNfYml0c19bMCAvIDMyXSAm
ICgweGZmdSA8PCAoMCAlIDMyKSkpIHsKLSAgICBpZiAoZnJvbS5oYXNfbmFtZSgpKSB7Ci0gICAg
ICBzZXRfaGFzX25hbWUoKTsKLSAgICAgIG5hbWVfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJv
bS5uYW1lXyk7Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc19pbnNlcnRpb25fcG9pbnQoKSkgewot
ICAgICAgc2V0X2hhc19pbnNlcnRpb25fcG9pbnQoKTsKLSAgICAgIGluc2VydGlvbl9wb2ludF8u
QXNzaWduV2l0aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBmcm9tLmluc2VydGlvbl9wb2ludF8pOwotICAgIH0KLSAg
ICBpZiAoZnJvbS5oYXNfY29udGVudCgpKSB7Ci0gICAgICBzZXRfaGFzX2NvbnRlbnQoKTsKLSAg
ICAgIGNvbnRlbnRfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJvbS5jb250ZW50Xyk7Ci0gICAg
fQotICB9Ci0gIGlmIChmcm9tLl9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxk
cygpKSB7Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5NZXJnZUZyb20oZnJvbS51bmtu
b3duX2ZpZWxkcygpKTsKLSAgfQotfQotCi12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxl
OjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29v
Z2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlKQotICBpZiAo
JmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19
Ci0KLXZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OkNvcHlGcm9tKGNvbnN0IENvZGVH
ZW5lcmF0b3JSZXNwb25zZV9GaWxlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxl
ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZSkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVy
bjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi1ib29sIENvZGVHZW5lcmF0
b3JSZXNwb25zZV9GaWxlOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIHJldHVybiB0cnVl
OwotfQotCi12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpTd2FwKENvZGVHZW5lcmF0
b3JSZXNwb25zZV9GaWxlKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwot
ICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQotdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmls
ZTo6SW50ZXJuYWxTd2FwKENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlKiBvdGhlcikgewotICBu
YW1lXy5Td2FwKCZvdGhlci0+bmFtZV8pOwotICBpbnNlcnRpb25fcG9pbnRfLlN3YXAoJm90aGVy
LT5pbnNlcnRpb25fcG9pbnRfKTsKLSAgY29udGVudF8uU3dhcCgmb3RoZXItPmNvbnRlbnRfKTsK
LSAgc3RkOjpzd2FwKF9oYXNfYml0c19bMF0sIG90aGVyLT5faGFzX2JpdHNfWzBdKTsKLSAgX2lu
dGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7Ci0gIHN0
ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19Ci0KLTo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OkdldE1l
dGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3Jp
cHRvciA9IENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlX2Rlc2NyaXB0b3JfOwotICBtZXRhZGF0
YS5yZWZsZWN0aW9uID0gQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGVfcmVmbGVjdGlvbl87Ci0g
IHJldHVybiBtZXRhZGF0YTsKLX0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAhZGVmaW5lZChf
TVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgaW50IENvZGVHZW5lcmF0b3JSZXNw
b25zZTo6a0Vycm9yRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgQ29kZUdlbmVyYXRvclJlc3BvbnNl
OjprRmlsZUZpZWxkTnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01T
Q19WRVIgPj0gMTkwMAotCi1Db2RlR2VuZXJhdG9yUmVzcG9uc2U6OkNvZGVHZW5lcmF0b3JSZXNw
b25zZSgpCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRh
ZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChjb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJl
c3BvbnNlKQotfQotCi12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZTo6SW5pdEFzRGVmYXVsdElu
c3RhbmNlKCkgewotfQotCi1Db2RlR2VuZXJhdG9yUmVzcG9uc2U6OkNvZGVHZW5lcmF0b3JSZXNw
b25zZShjb25zdCBDb2RlR2VuZXJhdG9yUmVzcG9uc2UmIGZyb20pCi0gIDogOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNo
YXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVy
YXRvclJlc3BvbnNlKQotfQotCi12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZTo6U2hhcmVkQ3Rv
cigpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmcoKTsK
LSAgX2NhY2hlZF9zaXplXyA9IDA7Ci0gIGVycm9yXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0g
IDo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci19Ci0KLUNvZGVH
ZW5lcmF0b3JSZXNwb25zZTo6fkNvZGVHZW5lcmF0b3JSZXNwb25zZSgpIHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNv
ZGVHZW5lcmF0b3JSZXNwb25zZSkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lkIENvZGVHZW5l
cmF0b3JSZXNwb25zZTo6U2hhcmVkRHRvcigpIHsKLSAgZXJyb3JfLkRlc3Ryb3lOb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSk7Ci0gIGlmICh0aGlzICE9IGRlZmF1bHRfaW5zdGFuY2VfKSB7Ci0gIH0KLX0KLQotdm9pZCBD
b2RlR2VuZXJhdG9yUmVzcG9uc2U6OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAg
R09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9
IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6OmRl
c2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1
cm4gQ29kZUdlbmVyYXRvclJlc3BvbnNlX2Rlc2NyaXB0b3JfOwotfQotCi1jb25zdCBDb2RlR2Vu
ZXJhdG9yUmVzcG9uc2UmIENvZGVHZW5lcmF0b3JSZXNwb25zZTo6ZGVmYXVsdF9pbnN0YW5jZSgp
IHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29v
Z2xlXzJmcHJvdG9idWZfMmZjb21waWxlcl8yZnBsdWdpbl8yZXByb3RvKCk7Ci0gIHJldHVybiAq
ZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLUNvZGVHZW5lcmF0b3JSZXNwb25zZSogQ29kZUdlbmVy
YXRvclJlc3BvbnNlOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLUNvZGVHZW5lcmF0b3JS
ZXNwb25zZSogQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpB
cmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgQ29kZUdlbmVyYXRvclJlc3BvbnNlKiBuID0gbmV3IENv
ZGVHZW5lcmF0b3JSZXNwb25zZTsKLSAgaWYgKGFyZW5hICE9IE5VTEwpIHsKLSAgICBhcmVuYS0+
T3duKG4pOwotICB9Ci0gIHJldHVybiBuOwotfQotCi12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25z
ZTo6Q2xlYXIoKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9z
dGFydDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlKQotICBp
ZiAoaGFzX2Vycm9yKCkpIHsKLSAgICBlcnJvcl8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
ICB9Ci0gIGZpbGVfLkNsZWFyKCk7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihf
aGFzX2JpdHNfKSk7Ci0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVs
ZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+Q2xlYXIoKTsKLSAgfQotfQot
Ci1ib29sIENvZGVHZW5lcmF0b3JSZXNwb25zZTo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFt
KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7
Ci0jZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUoRVhQUkVT
U0lPTikpIGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpnb29nbGUucHJvdG9idWYu
Y29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlKQotICBmb3IgKDs7KSB7Ci0gICAgOjpzdGQ6
OnBhaXI8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyLCBib29sPiBwID0gaW5wdXQtPlJlYWRU
YWdXaXRoQ3V0b2ZmKDEyNyk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAgICBpZiAoIXAuc2Vjb25k
KSBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykpIHsKLSAgICAg
IC8vIG9wdGlvbmFsIHN0cmluZyBlcnJvciA9IDE7Ci0gICAgICBjYXNlIDE6IHsKLSAgICAgICAg
aWYgKHRhZyA9PSAxMCkgewotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAgICAgICBpbnB1dCwg
dGhpcy0+bXV0YWJsZV9lcnJvcigpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICAg
ICAgICB0aGlzLT5lcnJvcigpLmRhdGEoKSwgdGhpcy0+ZXJyb3IoKS5sZW5ndGgoKSwKLSAgICAg
ICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlBBUlNFLAot
ICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9u
c2UuZXJyb3IiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVz
dWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDEyMikpIGdvdG8g
cGFyc2VfZmlsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlcGVhdGVk
IC5nb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUgZmls
ZSA9IDE1OwotICAgICAgY2FzZSAxNTogewotICAgICAgICBpZiAodGFnID09IDEyMikgewotICAg
ICAgICAgcGFyc2VfZmlsZToKLSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lv
bkRlcHRoKCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9maWxlOgotICAgICAgICAgIERPXyg6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2VOb1Zp
cnR1YWxOb1JlY3Vyc2lvbkRlcHRoKAotICAgICAgICAgICAgICAgIGlucHV0LCBhZGRfZmlsZSgp
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxMjIpKSBnb3RvIHBhcnNlX2xv
b3BfZmlsZTsKLSAgICAgICAgaW5wdXQtPlVuc2FmZURlY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCk7
Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0QXRFbmQoKSkgZ290byBzdWNjZXNzOwotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDogewotICAgICAgaGFuZGxlX3VudXN1
YWw6Ci0gICAgICAgIGlmICh0YWcgPT0gMCB8fAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAg
ICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpX
SVJFVFlQRV9FTkRfR1JPVVApIHsKLSAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0K
LSAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNr
aXBGaWVsZCgKLSAgICAgICAgICAgICAgaW5wdXQsIHRhZywgbXV0YWJsZV91bmtub3duX2ZpZWxk
cygpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotc3VjY2VzczoKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVm
LmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZSkKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJl
OgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJv
dG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlKQotICByZXR1cm4gZmFsc2U7Ci0j
dW5kZWYgRE9fCi19Ci0KLXZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJl
YW0qIG91dHB1dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFs
aXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2Up
Ci0gIC8vIG9wdGlvbmFsIHN0cmluZyBlcnJvciA9IDE7Ci0gIGlmIChoYXNfZXJyb3IoKSkgewot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhT
dHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+ZXJyb3IoKS5kYXRhKCksIHRoaXMtPmVycm9y
KCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5l
cmF0b3JSZXNwb25zZS5lcnJvciIpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDEsIHRoaXMt
PmVycm9yKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVm
LmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlIGZpbGUgPSAxNTsKLSAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5maWxlX3NpemUoKTsgaSA8IG47IGkrKykgewot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1l
c3NhZ2VNYXliZVRvQXJyYXkoCi0gICAgICAxNSwgdGhpcy0+ZmlsZShpKSwgb3V0cHV0KTsKLSAg
fQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVu
a25vd25GaWVsZHMoCi0gICAgICAgIHVua25vd25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVm
LmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZSkKLX0KLQotOjpnb29nbGU6OnByb3RvYnVm
Ojp1aW50OCogQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNU
b0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UpCi0gIC8vIG9wdGlv
bmFsIHN0cmluZyBlcnJvciA9IDE7Ci0gIGlmIChoYXNfZXJyb3IoKSkgewotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZp
ZWxkKAotICAgICAgdGhpcy0+ZXJyb3IoKS5kYXRhKCksIHRoaXMtPmVycm9yKCkubGVuZ3RoKCks
Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJ
WkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25z
ZS5lcnJvciIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAxLCB0aGlz
LT5lcnJvcigpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1
Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZSBmaWxlID0gMTU7Ci0gIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+ZmlsZV9zaXplKCk7IGkgPCBuOyBpKyspIHsK
LSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAotICAgICAgICAxNSwgdGhp
cy0+ZmlsZShpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhh
dmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHNUb0FycmF5KAotICAg
ICAgICB1bmtub3duX2ZpZWxkcygpLCB0YXJnZXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5jb21waWxl
ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UpCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBDb2Rl
R2VuZXJhdG9yUmVzcG9uc2U6OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxl
ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UpCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICAvLyBv
cHRpb25hbCBzdHJpbmcgZXJyb3IgPSAxOwotICBpZiAoaGFzX2Vycm9yKCkpIHsKLSAgICB0b3Rh
bF9zaXplICs9IDEgKwotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OlN0cmluZ1NpemUoCi0gICAgICAgIHRoaXMtPmVycm9yKCkpOwotICB9Ci0KLSAg
Ly8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9u
c2UuRmlsZSBmaWxlID0gMTU7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMtPmZpbGVfc2l6ZSgp
OwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPmZpbGVfc2l6ZSgpOyBpKyspIHsKLSAgICB0
b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAgIHRoaXMtPmZpbGUoaSkpOwot
ICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7
Ci0gICAgdG90YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6Q29tcHV0ZVVua25vd25GaWVsZHNTaXplKAotICAgICAgICB1bmtub3duX2Zp
ZWxkcygpKTsKLSAgfQotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwot
ICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9X
UklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3RhbF9zaXplOwotfQotCi12b2lkIENvZGVHZW5lcmF0
b3JSZXNwb25zZTo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYg
ZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zy
b21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZSkK
LSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWls
KF9fTElORV9fKTsKLSAgY29uc3QgQ29kZUdlbmVyYXRvclJlc3BvbnNlKiBzb3VyY2UgPSAKLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8
Y29uc3QgQ29kZUdlbmVyYXRvclJlc3BvbnNlPigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChz
b3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6
ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5l
cmF0b3JSZXNwb25zZSkKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0
aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5w
cm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UpCi0gICAgTWVyZ2VGcm9tKCpz
b3VyY2UpOwotICB9Ci19Ci0KLXZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpNZXJnZUZyb20o
Y29uc3QgQ29kZUdlbmVyYXRvclJlc3BvbnNlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYu
Y29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFM
U0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBmaWxlXy5NZXJn
ZUZyb20oZnJvbS5maWxlXyk7Ci0gIGlmIChmcm9tLl9oYXNfYml0c19bMCAvIDMyXSAmICgweGZm
dSA8PCAoMCAlIDMyKSkpIHsKLSAgICBpZiAoZnJvbS5oYXNfZXJyb3IoKSkgewotICAgICAgc2V0
X2hhc19lcnJvcigpOwotICAgICAgZXJyb3JfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJvbS5l
cnJvcl8pOwotICAgIH0KLSAgfQotICBpZiAoZnJvbS5faW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVf
dW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+TWVyZ2VG
cm9tKGZyb20udW5rbm93bl9maWVsZHMoKSk7Ci0gIH0KLX0KLQotdm9pZCBDb2RlR2VuZXJhdG9y
UmVzcG9uc2U6OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJv
bSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9z
dGFydDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlKQotICBp
ZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7
Ci19Ci0KLXZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpDb3B5RnJvbShjb25zdCBDb2RlR2Vu
ZXJhdG9yUmVzcG9uc2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFz
c19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVH
ZW5lcmF0b3JSZXNwb25zZSkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIo
KTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi1ib29sIENvZGVHZW5lcmF0b3JSZXNwb25zZTo6
SXNJbml0aWFsaXplZCgpIGNvbnN0IHsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb2Rl
R2VuZXJhdG9yUmVzcG9uc2U6OlN3YXAoQ29kZUdlbmVyYXRvclJlc3BvbnNlKiBvdGhlcikgewot
ICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQot
dm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6OkludGVybmFsU3dhcChDb2RlR2VuZXJhdG9yUmVz
cG9uc2UqIG90aGVyKSB7Ci0gIGVycm9yXy5Td2FwKCZvdGhlci0+ZXJyb3JfKTsKLSAgZmlsZV8u
VW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+ZmlsZV8pOwotICBzdGQ6OnN3YXAoX2hhc19iaXRzX1sw
XSwgb3RoZXItPl9oYXNfYml0c19bMF0pOwotICBfaW50ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90
aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90
aGVyLT5fY2FjaGVkX3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBD
b2RlR2VuZXJhdG9yUmVzcG9uc2U6OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9B
c3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBt
ZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IENvZGVHZW5lcmF0b3JSZXNwb25zZV9k
ZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IENvZGVHZW5lcmF0b3JSZXNwb25z
ZV9yZWZsZWN0aW9uXzsKLSAgcmV0dXJuIG1ldGFkYXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5M
SU5FX05PVF9JTl9IRUFERVJTCi0vLyBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZQotCi0vLyBv
cHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci1ib29sIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxl
OjpoYXNfbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAw
MXUpICE9IDA7Ci19Ci12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpzZXRfaGFzX25h
bWUoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwMXU7Ci19Ci12b2lkIENvZGVHZW5l
cmF0b3JSZXNwb25zZV9GaWxlOjpjbGVhcl9oYXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSAm
PSB+MHgwMDAwMDAwMXU7Ci19Ci12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpjbGVh
cl9uYW1lKCkgewotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hh
c19uYW1lKCk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgQ29kZUdlbmVyYXRvclJlc3BvbnNl
X0ZpbGU6Om5hbWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxl
Lm5hbWUpCi0gIHJldHVybiBuYW1lXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBDb2RlR2Vu
ZXJhdG9yUmVzcG9uc2VfRmlsZTo6c2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUp
IHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLmNv
bXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLm5hbWUpCi19Ci0gdm9pZCBDb2RlR2Vu
ZXJhdG9yUmVzcG9uc2VfRmlsZTo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgc2V0
X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVl
KSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUu
cHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUubmFtZSkKLX0KLSB2
b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1
ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2
YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9w
b2ludGVyOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmls
ZS5uYW1lKQotfQotIDo6c3RkOjpzdHJpbmcqIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpt
dXRhYmxlX25hbWUoKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVy
YXRvclJlc3BvbnNlLkZpbGUubmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFibGVOb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OnJlbGVh
c2VfbmFtZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6
Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLm5hbWUp
Ci0gIGNsZWFyX2hhc19uYW1lKCk7Ci0gIHJldHVybiBuYW1lXy5SZWxlYXNlTm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotfQotIHZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OnNldF9hbGxvY2F0ZWRfbmFt
ZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICBzZXRf
aGFzX25hbWUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfbmFtZSgpOwotICB9Ci0gIG5h
bWVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBuYW1lKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNv
ZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLm5hbWUpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBp
bnNlcnRpb25fcG9pbnQgPSAyOwotYm9vbCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6aGFz
X2luc2VydGlvbl9wb2ludCgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgw
MDAwMDAwMnUpICE9IDA7Ci19Ci12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpzZXRf
aGFzX2luc2VydGlvbl9wb2ludCgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsK
LX0KLXZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OmNsZWFyX2hhc19pbnNlcnRpb25f
cG9pbnQoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDJ1OwotfQotdm9pZCBDb2Rl
R2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6Y2xlYXJfaW5zZXJ0aW9uX3BvaW50KCkgewotICBpbnNl
cnRpb25fcG9pbnRfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX2luc2Vy
dGlvbl9wb2ludCgpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIENvZGVHZW5lcmF0b3JSZXNw
b25zZV9GaWxlOjppbnNlcnRpb25fcG9pbnQoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0
b3JSZXNwb25zZS5GaWxlLmluc2VydGlvbl9wb2ludCkKLSAgcmV0dXJuIGluc2VydGlvbl9wb2lu
dF8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6
OnNldF9pbnNlcnRpb25fcG9pbnQoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0
X2hhc19pbnNlcnRpb25fcG9pbnQoKTsKLSAgaW5zZXJ0aW9uX3BvaW50Xy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZS5pbnNlcnRpb25f
cG9pbnQpCi19Ci0gdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6c2V0X2luc2VydGlv
bl9wb2ludChjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFzX2luc2VydGlvbl9wb2ludCgp
OwotICBpbnNlcnRpb25fcG9pbnRfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVl
KSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUu
cHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUuaW5zZXJ0aW9uX3Bv
aW50KQotfQotIHZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OnNldF9pbnNlcnRpb25f
cG9pbnQoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfaW5zZXJ0
aW9uX3BvaW50KCk7Ci0gIGluc2VydGlvbl9wb2ludF8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6
OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkp
OwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xl
LnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLmluc2VydGlvbl9w
b2ludCkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6bXV0
YWJsZV9pbnNlcnRpb25fcG9pbnQoKSB7Ci0gIHNldF9oYXNfaW5zZXJ0aW9uX3BvaW50KCk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1
Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZS5pbnNlcnRpb25fcG9pbnQpCi0g
IHJldHVybiBpbnNlcnRpb25fcG9pbnRfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6
OnN0cmluZyogQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OnJlbGVhc2VfaW5zZXJ0aW9uX3Bv
aW50KCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29n
bGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUuaW5zZXJ0aW9u
X3BvaW50KQotICBjbGVhcl9oYXNfaW5zZXJ0aW9uX3BvaW50KCk7Ci0gIHJldHVybiBpbnNlcnRp
b25fcG9pbnRfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBDb2RlR2VuZXJhdG9yUmVz
cG9uc2VfRmlsZTo6c2V0X2FsbG9jYXRlZF9pbnNlcnRpb25fcG9pbnQoOjpzdGQ6OnN0cmluZyog
aW5zZXJ0aW9uX3BvaW50KSB7Ci0gIGlmIChpbnNlcnRpb25fcG9pbnQgIT0gTlVMTCkgewotICAg
IHNldF9oYXNfaW5zZXJ0aW9uX3BvaW50KCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX2lu
c2VydGlvbl9wb2ludCgpOwotICB9Ci0gIGluc2VydGlvbl9wb2ludF8uU2V0QWxsb2NhdGVkTm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCksIGluc2VydGlvbl9wb2ludCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJh
dG9yUmVzcG9uc2UuRmlsZS5pbnNlcnRpb25fcG9pbnQpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmlu
ZyBjb250ZW50ID0gMTU7Ci1ib29sIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpoYXNfY29u
dGVudCgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwNHUpICE9
IDA7Ci19Ci12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpzZXRfaGFzX2NvbnRlbnQo
KSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwNHU7Ci19Ci12b2lkIENvZGVHZW5lcmF0
b3JSZXNwb25zZV9GaWxlOjpjbGVhcl9oYXNfY29udGVudCgpIHsKLSAgX2hhc19iaXRzX1swXSAm
PSB+MHgwMDAwMDAwNHU7Ci19Ci12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpjbGVh
cl9jb250ZW50KCkgewotICBjb250ZW50Xy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNs
ZWFyX2hhc19jb250ZW50KCk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgQ29kZUdlbmVyYXRv
clJlc3BvbnNlX0ZpbGU6OmNvbnRlbnQoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JS
ZXNwb25zZS5GaWxlLmNvbnRlbnQpCi0gIHJldHVybiBjb250ZW50Xy5HZXROb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci0gdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6c2V0X2NvbnRlbnQoY29uc3Qg
OjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19jb250ZW50KCk7Ci0gIGNvbnRlbnRf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5G
aWxlLmNvbnRlbnQpCi19Ci0gdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6c2V0X2Nv
bnRlbnQoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgc2V0X2hhc19jb250ZW50KCk7Ci0gIGNvbnRl
bnRfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIu
Q29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUuY29udGVudCkKLX0KLSB2b2lkIENvZGVHZW5lcmF0
b3JSZXNwb25zZV9GaWxlOjpzZXRfY29udGVudChjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNp
emUpIHsKLSAgc2V0X2hhc19jb250ZW50KCk7Ci0gIGNvbnRlbnRfLlNldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAot
ICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSks
IHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVy
Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZS5jb250
ZW50KQotfQotIDo6c3RkOjpzdHJpbmcqIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjptdXRh
YmxlX2NvbnRlbnQoKSB7Ci0gIHNldF9oYXNfY29udGVudCgpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdl
bmVyYXRvclJlc3BvbnNlLkZpbGUuY29udGVudCkKLSAgcmV0dXJuIGNvbnRlbnRfLk11dGFibGVO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogQ29kZUdlbmVyYXRvclJlc3BvbnNlX0Zp
bGU6OnJlbGVhc2VfY29udGVudCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25z
ZS5GaWxlLmNvbnRlbnQpCi0gIGNsZWFyX2hhc19jb250ZW50KCk7Ci0gIHJldHVybiBjb250ZW50
Xy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0Zp
bGU6OnNldF9hbGxvY2F0ZWRfY29udGVudCg6OnN0ZDo6c3RyaW5nKiBjb250ZW50KSB7Ci0gIGlm
IChjb250ZW50ICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX2NvbnRlbnQoKTsKLSAgfSBlbHNlIHsK
LSAgICBjbGVhcl9oYXNfY29udGVudCgpOwotICB9Ci0gIGNvbnRlbnRfLlNldEFsbG9jYXRlZE5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLCBjb250ZW50KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNw
b25zZS5GaWxlLmNvbnRlbnQpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQ29kZUdlbmVyYXRv
clJlc3BvbnNlCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBlcnJvciA9IDE7Ci1ib29sIENvZGVHZW5l
cmF0b3JSZXNwb25zZTo6aGFzX2Vycm9yKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19b
MF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLXZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpz
ZXRfaGFzX2Vycm9yKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDF1OwotfQotdm9p
ZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6OmNsZWFyX2hhc19lcnJvcigpIHsKLSAgX2hhc19iaXRz
X1swXSAmPSB+MHgwMDAwMDAwMXU7Ci19Ci12b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZTo6Y2xl
YXJfZXJyb3IoKSB7Ci0gIGVycm9yXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFy
X2hhc19lcnJvcigpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIENvZGVHZW5lcmF0b3JSZXNw
b25zZTo6ZXJyb3IoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5lcnJv
cikKLSAgcmV0dXJuIGVycm9yXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBDb2RlR2VuZXJh
dG9yUmVzcG9uc2U6OnNldF9lcnJvcihjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBz
ZXRfaGFzX2Vycm9yKCk7Ci0gIGVycm9yXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxl
ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuZXJyb3IpCi19Ci0gdm9pZCBDb2RlR2VuZXJhdG9yUmVz
cG9uc2U6OnNldF9lcnJvcihjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFzX2Vycm9yKCk7
Ci0gIGVycm9yXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLmNv
bXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5lcnJvcikKLX0KLSB2b2lkIENvZGVHZW5lcmF0
b3JSZXNwb25zZTo6c2V0X2Vycm9yKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewot
ICBzZXRfaGFzX2Vycm9yKCk7Ci0gIGVycm9yXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3Rk
OjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJv
dG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLmVycm9yKQotfQotIDo6c3RkOjpz
dHJpbmcqIENvZGVHZW5lcmF0b3JSZXNwb25zZTo6bXV0YWJsZV9lcnJvcigpIHsKLSAgc2V0X2hh
c19lcnJvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpn
b29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLmVycm9yKQotICBy
ZXR1cm4gZXJyb3JfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogQ29k
ZUdlbmVyYXRvclJlc3BvbnNlOjpyZWxlYXNlX2Vycm9yKCkgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdl
bmVyYXRvclJlc3BvbnNlLmVycm9yKQotICBjbGVhcl9oYXNfZXJyb3IoKTsKLSAgcmV0dXJuIGVy
cm9yXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNl
OjpzZXRfYWxsb2NhdGVkX2Vycm9yKDo6c3RkOjpzdHJpbmcqIGVycm9yKSB7Ci0gIGlmIChlcnJv
ciAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19lcnJvcigpOwotICB9IGVsc2UgewotICAgIGNsZWFy
X2hhc19lcnJvcigpOwotICB9Ci0gIGVycm9yXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZXJy
b3IpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpn
b29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLmVycm9yKQotfQot
Ci0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNw
b25zZS5GaWxlIGZpbGUgPSAxNTsKLWludCBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6OmZpbGVfc2l6
ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGZpbGVfLnNpemUoKTsKLX0KLXZvaWQgQ29kZUdlbmVyYXRv
clJlc3BvbnNlOjpjbGVhcl9maWxlKCkgewotICBmaWxlXy5DbGVhcigpOwotfQotY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpjb21waWxlcjo6Q29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUmIENv
ZGVHZW5lcmF0b3JSZXNwb25zZTo6ZmlsZShpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29k
ZUdlbmVyYXRvclJlc3BvbnNlLmZpbGUpCi0gIHJldHVybiBmaWxlXy5HZXQoaW5kZXgpOwotfQot
Ojpnb29nbGU6OnByb3RvYnVmOjpjb21waWxlcjo6Q29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUq
IENvZGVHZW5lcmF0b3JSZXNwb25zZTo6bXV0YWJsZV9maWxlKGludCBpbmRleCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuY29t
cGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLmZpbGUpCi0gIHJldHVybiBmaWxlXy5NdXRhYmxl
KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6Y29tcGlsZXI6OkNvZGVHZW5lcmF0b3JS
ZXNwb25zZV9GaWxlKiBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6OmFkZF9maWxlKCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5jb21waWxl
ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuZmlsZSkKLSAgcmV0dXJuIGZpbGVfLkFkZCgpOwotfQot
Ojpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6
OmNvbXBpbGVyOjpDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZSA+KgotQ29kZUdlbmVyYXRvclJl
c3BvbnNlOjptdXRhYmxlX2ZpbGUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JS
ZXNwb25zZS5maWxlKQotICByZXR1cm4gJmZpbGVfOwotfQotY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyOjpDb2Rl
R2VuZXJhdG9yUmVzcG9uc2VfRmlsZSA+JgotQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpmaWxlKCkg
Y29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUu
cHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLmZpbGUpCi0gIHJldHVybiBm
aWxlXzsKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQot
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8gbmFt
ZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFj
ZSBnb29nbGUKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2JhbF9zY29wZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucGIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucGIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTEwMjAyZjBhODRkZDI5N2MyNGNiMzVlYTNlYTkwMzdjZWZjZDdhNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvY29tcGlsZXIvcGx1Z2luLnBiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MTggKzAsMCBAQAot
Ly8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJ
VCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wcm90bwotCi0j
aWZuZGVmIFBST1RPQlVGX2dvb2dsZV8yZnByb3RvYnVmXzJmY29tcGlsZXJfMmZwbHVnaW5fMmVw
cm90b19fSU5DTFVERUQKLSNkZWZpbmUgUFJPVE9CVUZfZ29vZ2xlXzJmcHJvdG9idWZfMmZjb21w
aWxlcl8yZnBsdWdpbl8yZXByb3RvX19JTkNMVURFRAotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotCi0jaWYgR09PR0xFX1BS
T1RPQlVGX1ZFUlNJT04gPCAzMDAwMDAwCi0jZXJyb3IgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQg
YnkgYSBuZXdlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcwotI2Vycm9yIGluY29tcGF0aWJs
ZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQbGVhc2UgdXBkYXRlCi0jZXJy
b3IgeW91ciBoZWFkZXJzLgotI2VuZGlmCi0jaWYgMzAwMDAwMCA8IEdPT0dMRV9QUk9UT0JVRl9N
SU5fUFJPVE9DX1ZFUlNJT04KLSNlcnJvciBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBhbiBv
bGRlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcwotI2Vycm9yIGluY29tcGF0aWJsZSB3aXRo
IHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQbGVhc2UKLSNlcnJvciByZWdlbmVyYXRl
IHRoaXMgZmlsZSB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBwcm90b2MuCi0jZW5kaWYKLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9hcmVuYXN0cmluZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVz
c2FnZV91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21ldGFkYXRhLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9u
X3NldC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoaW5jbHVkZXMpCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci0KLS8vIEludGVybmFsIGltcGxlbWVu
dGF0aW9uIGRldGFpbCAtLSBkbyBub3QgY2FsbCB0aGVzZS4KLXZvaWQgTElCUFJPVE9DX0VYUE9S
VCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmY29tcGlsZXJfMmZwbHVnaW5f
MmVwcm90bygpOwotdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJm
Y29tcGlsZXJfMmZwbHVnaW5fMmVwcm90bygpOwotdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVf
Z29vZ2xlXzJmcHJvdG9idWZfMmZjb21waWxlcl8yZnBsdWdpbl8yZXByb3RvKCk7Ci0KLWNsYXNz
IENvZGVHZW5lcmF0b3JSZXF1ZXN0OwotY2xhc3MgQ29kZUdlbmVyYXRvclJlc3BvbnNlOwotY2xh
c3MgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU7Ci0KLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotY2xhc3Mg
TElCUFJPVE9DX0VYUE9SVCBDb2RlR2VuZXJhdG9yUmVxdWVzdCA6IHB1YmxpYyA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgQ29kZUdlbmVyYXRvclJlcXVlc3QoKTsK
LSAgdmlydHVhbCB+Q29kZUdlbmVyYXRvclJlcXVlc3QoKTsKLQotICBDb2RlR2VuZXJhdG9yUmVx
dWVzdChjb25zdCBDb2RlR2VuZXJhdG9yUmVxdWVzdCYgZnJvbSk7Ci0KLSAgaW5saW5lIENvZGVH
ZW5lcmF0b3JSZXF1ZXN0JiBvcGVyYXRvcj0oY29uc3QgQ29kZUdlbmVyYXRvclJlcXVlc3QmIGZy
b20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBp
bmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpVbmtub3duRmllbGRTZXQmIHVua25vd25f
ZmllbGRzKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnVua25vd25f
ZmllbGRzKCk7Ci0gIH0KLQotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpVbmtub3duRmll
bGRTZXQqIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9t
ZXRhZGF0YV8ubXV0YWJsZV91bmtub3duX2ZpZWxkcygpOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMg
Y29uc3QgQ29kZUdlbmVyYXRvclJlcXVlc3QmIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2b2lk
IFN3YXAoQ29kZUdlbmVyYXRvclJlcXVlc3QqIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1l
c3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IGlubGluZSBDb2RlR2VuZXJhdG9yUmVxdWVzdCogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5V
TEwpOyB9Ci0KLSAgQ29kZUdlbmVyYXRvclJlcXVlc3QqIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6
OkFyZW5hKiBhcmVuYSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBDb2RlR2Vu
ZXJhdG9yUmVxdWVzdCYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IENvZGVHZW5lcmF0
b3JSZXF1ZXN0JiBmcm9tKTsKLSAgdm9pZCBDbGVhcigpOwotICBib29sIElzSW5pdGlhbGl6ZWQo
KSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxG
cm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0
U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1Rv
QXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdl
dENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6
Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRD
YWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoQ29kZUdlbmVy
YXRvclJlcXVlc3QqIG90aGVyKTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50
ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQ
dHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0
cigpOwotICB9Ci0gIHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdl
dE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBhY2Nlc3NvcnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IC8vIHJlcGVhdGVkIHN0cmluZyBmaWxlX3RvX2dlbmVyYXRlID0gMTsKLSAgaW50IGZpbGVfdG9f
Z2VuZXJhdGVfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2ZpbGVfdG9fZ2VuZXJhdGUoKTsK
LSAgc3RhdGljIGNvbnN0IGludCBrRmlsZVRvR2VuZXJhdGVGaWVsZE51bWJlciA9IDE7Ci0gIGNv
bnN0IDo6c3RkOjpzdHJpbmcmIGZpbGVfdG9fZ2VuZXJhdGUoaW50IGluZGV4KSBjb25zdDsKLSAg
OjpzdGQ6OnN0cmluZyogbXV0YWJsZV9maWxlX3RvX2dlbmVyYXRlKGludCBpbmRleCk7Ci0gIHZv
aWQgc2V0X2ZpbGVfdG9fZ2VuZXJhdGUoaW50IGluZGV4LCBjb25zdCA6OnN0ZDo6c3RyaW5nJiB2
YWx1ZSk7Ci0gIHZvaWQgc2V0X2ZpbGVfdG9fZ2VuZXJhdGUoaW50IGluZGV4LCBjb25zdCBjaGFy
KiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2ZpbGVfdG9fZ2VuZXJhdGUoaW50IGluZGV4LCBjb25zdCBj
aGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBhZGRfZmlsZV90b19n
ZW5lcmF0ZSgpOwotICB2b2lkIGFkZF9maWxlX3RvX2dlbmVyYXRlKGNvbnN0IDo6c3RkOjpzdHJp
bmcmIHZhbHVlKTsKLSAgdm9pZCBhZGRfZmlsZV90b19nZW5lcmF0ZShjb25zdCBjaGFyKiB2YWx1
ZSk7Ci0gIHZvaWQgYWRkX2ZpbGVfdG9fZ2VuZXJhdGUoY29uc3QgY2hhciogdmFsdWUsIHNpemVf
dCBzaXplKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6
OnN0ZDo6c3RyaW5nPiYgZmlsZV90b19nZW5lcmF0ZSgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+KiBtdXRhYmxlX2ZpbGVfdG9f
Z2VuZXJhdGUoKTsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgcGFyYW1ldGVyID0gMjsKLSAgYm9v
bCBoYXNfcGFyYW1ldGVyKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfcGFyYW1ldGVyKCk7Ci0gIHN0
YXRpYyBjb25zdCBpbnQga1BhcmFtZXRlckZpZWxkTnVtYmVyID0gMjsKLSAgY29uc3QgOjpzdGQ6
OnN0cmluZyYgcGFyYW1ldGVyKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3BhcmFtZXRlcihjb25zdCA6
OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X3BhcmFtZXRlcihjb25zdCBjaGFyKiB2
YWx1ZSk7Ci0gIHZvaWQgc2V0X3BhcmFtZXRlcihjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNp
emUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX3BhcmFtZXRlcigpOwotICA6OnN0ZDo6c3Ry
aW5nKiByZWxlYXNlX3BhcmFtZXRlcigpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfcGFyYW1ldGVy
KDo6c3RkOjpzdHJpbmcqIHBhcmFtZXRlcik7Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90
b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvIHByb3RvX2ZpbGUgPSAxNTsKLSAgaW50IHByb3RvX2Zp
bGVfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3Byb3RvX2ZpbGUoKTsKLSAgc3RhdGljIGNv
bnN0IGludCBrUHJvdG9GaWxlRmllbGROdW1iZXIgPSAxNTsKLSAgY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpGaWxlRGVzY3JpcHRvclByb3RvJiBwcm90b19maWxlKGludCBpbmRleCkgY29uc3Q7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3JQcm90byogbXV0YWJsZV9wcm90
b19maWxlKGludCBpbmRleCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3JQ
cm90byogYWRkX3Byb3RvX2ZpbGUoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0
ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNjcmlwdG9yUHJvdG8gPioKLSAgICAg
IG11dGFibGVfcHJvdG9fZmlsZSgpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3JQcm90byA+Jgot
ICAgICAgcHJvdG9fZmlsZSgpIGNvbnN0OwotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVl
c3QpCi0gcHJpdmF0ZToKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19wYXJhbWV0ZXIoKTsKLSAgaW5s
aW5lIHZvaWQgY2xlYXJfaGFzX3BhcmFtZXRlcigpOwotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFsX21ldGFkYXRhXzsK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRzX1sxXTsKLSAgbXV0YWJsZSBp
bnQgX2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxk
PCA6OnN0ZDo6c3RyaW5nPiBmaWxlX3RvX2dlbmVyYXRlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgcGFyYW1ldGVyXzsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNjcmlwdG9y
UHJvdG8gPiBwcm90b19maWxlXzsKLSAgZnJpZW5kIHZvaWQgTElCUFJPVE9DX0VYUE9SVCBwcm90
b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmY29tcGlsZXJfMmZwbHVnaW5fMmVwcm90
bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVm
XzJmY29tcGlsZXJfMmZwbHVnaW5fMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9T
aHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZjb21waWxlcl8yZnBsdWdpbl8yZXByb3Rv
KCk7Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIENvZGVHZW5l
cmF0b3JSZXF1ZXN0KiBkZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIExJQlBST1RPQ19FWFBPUlQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUgOiBwdWJsaWMg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIENvZGVHZW5lcmF0b3JS
ZXNwb25zZV9GaWxlKCk7Ci0gIHZpcnR1YWwgfkNvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlKCk7
Ci0KLSAgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUoY29uc3QgQ29kZUdlbmVyYXRvclJlc3Bv
bnNlX0ZpbGUmIGZyb20pOwotCi0gIGlubGluZSBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZSYg
b3BlcmF0b3I9KGNvbnN0IENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlJiBmcm9tKSB7Ci0gICAg
Q29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcygpIGNv
bnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy51bmtub3duX2ZpZWxkcygpOwot
ICB9Ci0KLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0KiBtdXRh
YmxlX3Vua25vd25fZmllbGRzKCkgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLm11
dGFibGVfdW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IENvZGVH
ZW5lcmF0b3JSZXNwb25zZV9GaWxlJiBkZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBTd2Fw
KENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBN
ZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICBpbmxpbmUgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUqIE5ldygpIGNvbnN0IHsgcmV0dXJu
IE5ldyhOVUxMKTsgfQotCi0gIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlKiBOZXcoOjpnb29n
bGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0OwotICB2b2lkIENvcHlGcm9tKGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZyb20o
Y29uc3QgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUmIGZyb20pOwotICB2b2lkIE1lcmdlRnJv
bShjb25zdCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZSYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIo
KTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29u
c3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6
ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0
cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBT
ZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgq
IG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2Nh
Y2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBT
aGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZv
aWQgSW50ZXJuYWxTd2FwKENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlKiBvdGhlcik7Ci0gIHBy
aXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZXRBcmVuYU5vVmly
dHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5hcmVuYSgpOwot
ICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkgY29uc3QgewotICAgIHJldHVybiBf
aW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsKLSAgfQotICBwdWJsaWM6Ci0KLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRhZGF0YSgpIGNvbnN0OwotCi0gIC8v
IG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9
IDE7Ci0gIGJvb2wgaGFzX25hbWUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9uYW1lKCk7Ci0gIHN0
YXRpYyBjb25zdCBpbnQga05hbWVGaWVsZE51bWJlciA9IDE7Ci0gIGNvbnN0IDo6c3RkOjpzdHJp
bmcmIG5hbWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2
YWx1ZSk7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNldF9u
YW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIG11
dGFibGVfbmFtZSgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX25hbWUoKTsKLSAgdm9pZCBz
ZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgLy8gb3B0aW9uYWwg
c3RyaW5nIGluc2VydGlvbl9wb2ludCA9IDI7Ci0gIGJvb2wgaGFzX2luc2VydGlvbl9wb2ludCgp
IGNvbnN0OwotICB2b2lkIGNsZWFyX2luc2VydGlvbl9wb2ludCgpOwotICBzdGF0aWMgY29uc3Qg
aW50IGtJbnNlcnRpb25Qb2ludEZpZWxkTnVtYmVyID0gMjsKLSAgY29uc3QgOjpzdGQ6OnN0cmlu
ZyYgaW5zZXJ0aW9uX3BvaW50KCkgY29uc3Q7Ci0gIHZvaWQgc2V0X2luc2VydGlvbl9wb2ludChj
b25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2luc2VydGlvbl9wb2ludChj
b25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2luc2VydGlvbl9wb2ludChjb25zdCBjaGFy
KiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX2luc2VydGlv
bl9wb2ludCgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX2luc2VydGlvbl9wb2ludCgpOwot
ICB2b2lkIHNldF9hbGxvY2F0ZWRfaW5zZXJ0aW9uX3BvaW50KDo6c3RkOjpzdHJpbmcqIGluc2Vy
dGlvbl9wb2ludCk7Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGNvbnRlbnQgPSAxNTsKLSAgYm9v
bCBoYXNfY29udGVudCgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2NvbnRlbnQoKTsKLSAgc3RhdGlj
IGNvbnN0IGludCBrQ29udGVudEZpZWxkTnVtYmVyID0gMTU7Ci0gIGNvbnN0IDo6c3RkOjpzdHJp
bmcmIGNvbnRlbnQoKSBjb25zdDsKLSAgdm9pZCBzZXRfY29udGVudChjb25zdCA6OnN0ZDo6c3Ry
aW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2NvbnRlbnQoY29uc3QgY2hhciogdmFsdWUpOwotICB2
b2lkIHNldF9jb250ZW50KGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3Rk
OjpzdHJpbmcqIG11dGFibGVfY29udGVudCgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX2Nv
bnRlbnQoKTsKLSAgdm9pZCBzZXRfYWxsb2NhdGVkX2NvbnRlbnQoOjpzdGQ6OnN0cmluZyogY29u
dGVudCk7Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2ds
ZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZSkKLSBwcml2YXRl
OgotICBpbmxpbmUgdm9pZCBzZXRfaGFzX25hbWUoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFz
X25hbWUoKTsKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19pbnNlcnRpb25fcG9pbnQoKTsKLSAgaW5s
aW5lIHZvaWQgY2xlYXJfaGFzX2luc2VydGlvbl9wb2ludCgpOwotICBpbmxpbmUgdm9pZCBzZXRf
aGFzX2NvbnRlbnQoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX2NvbnRlbnQoKTsKLQotICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9p
bnRlcm5hbF9tZXRhZGF0YV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIF9oYXNfYml0
c19bMV07Ci0gIG11dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIG5hbWVfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciBpbnNlcnRpb25fcG9pbnRfOwotICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciBjb250ZW50XzsKLSAgZnJpZW5kIHZv
aWQgTElCUFJPVE9DX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJm
Y29tcGlsZXJfMmZwbHVnaW5fMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3Np
Z25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmY29tcGlsZXJfMmZwbHVnaW5fMmVwcm90bygpOwot
ICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZj
b21waWxlcl8yZnBsdWdpbl8yZXByb3RvKCk7Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFu
Y2UoKTsKLSAgc3RhdGljIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlKiBkZWZhdWx0X2luc3Rh
bmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQ19FWFBPUlQgQ29kZUdl
bmVyYXRvclJlc3BvbnNlIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0g
cHVibGljOgotICBDb2RlR2VuZXJhdG9yUmVzcG9uc2UoKTsKLSAgdmlydHVhbCB+Q29kZUdlbmVy
YXRvclJlc3BvbnNlKCk7Ci0KLSAgQ29kZUdlbmVyYXRvclJlc3BvbnNlKGNvbnN0IENvZGVHZW5l
cmF0b3JSZXNwb25zZSYgZnJvbSk7Ci0KLSAgaW5saW5lIENvZGVHZW5lcmF0b3JSZXNwb25zZSYg
b3BlcmF0b3I9KGNvbnN0IENvZGVHZW5lcmF0b3JSZXNwb25zZSYgZnJvbSkgewotICAgIENvcHlG
cm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGlubGluZSBjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8udW5rbm93bl9maWVsZHMoKTsKLSAgfQot
Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCogbXV0YWJsZV91
bmtub3duX2ZpZWxkcygpIHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5tdXRhYmxl
X3Vua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBDb2RlR2VuZXJh
dG9yUmVzcG9uc2UmIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2b2lkIFN3YXAoQ29kZUdlbmVy
YXRvclJlc3BvbnNlKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUgQ29kZUdl
bmVyYXRvclJlc3BvbnNlKiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0KLQotICBD
b2RlR2VuZXJhdG9yUmVzcG9uc2UqIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVu
YSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBDb2RlR2VuZXJhdG9yUmVzcG9u
c2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBDb2RlR2VuZXJhdG9yUmVzcG9uc2Um
IGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0Owot
Ci0gIGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0
cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlu
cHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdv
b2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBT
aGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUo
aW50IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChDb2RlR2VuZXJhdG9yUmVzcG9u
c2UqIG90aGVyKTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJl
bmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0
YWRhdGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQdHIoKSBjb25z
dCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0cigpOwotICB9
Ci0gIHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdldE1ldGFkYXRh
KCkgY29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICB0eXBlZGVmIENvZGVHZW5lcmF0b3JSZXNw
b25zZV9GaWxlIEZpbGU7Ci0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcg
ZXJyb3IgPSAxOwotICBib29sIGhhc19lcnJvcigpIGNvbnN0OwotICB2b2lkIGNsZWFyX2Vycm9y
KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0Vycm9yRmllbGROdW1iZXIgPSAxOwotICBjb25zdCA6
OnN0ZDo6c3RyaW5nJiBlcnJvcigpIGNvbnN0OwotICB2b2lkIHNldF9lcnJvcihjb25zdCA6OnN0
ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2Vycm9yKGNvbnN0IGNoYXIqIHZhbHVlKTsK
LSAgdm9pZCBzZXRfZXJyb3IoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpz
dGQ6OnN0cmluZyogbXV0YWJsZV9lcnJvcigpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX2Vy
cm9yKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9lcnJvcig6OnN0ZDo6c3RyaW5nKiBlcnJvcik7
Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9y
UmVzcG9uc2UuRmlsZSBmaWxlID0gMTU7Ci0gIGludCBmaWxlX3NpemUoKSBjb25zdDsKLSAgdm9p
ZCBjbGVhcl9maWxlKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0ZpbGVGaWVsZE51bWJlciA9IDE1
OwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyOjpDb2RlR2VuZXJhdG9yUmVz
cG9uc2VfRmlsZSYgZmlsZShpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6
OmNvbXBpbGVyOjpDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZSogbXV0YWJsZV9maWxlKGludCBp
bmRleCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6Y29tcGlsZXI6OkNvZGVHZW5lcmF0b3JSZXNw
b25zZV9GaWxlKiBhZGRfZmlsZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRy
RmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6Y29tcGlsZXI6OkNvZGVHZW5lcmF0b3JSZXNwb25z
ZV9GaWxlID4qCi0gICAgICBtdXRhYmxlX2ZpbGUoKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyOjpDb2Rl
R2VuZXJhdG9yUmVzcG9uc2VfRmlsZSA+JgotICAgICAgZmlsZSgpIGNvbnN0OwotCi0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuY29tcGls
ZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlKQotIHByaXZhdGU6Ci0gIGlubGluZSB2b2lkIHNldF9o
YXNfZXJyb3IoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX2Vycm9yKCk7Ci0KLSAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJu
YWxfbWV0YWRhdGFfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiBfaGFzX2JpdHNfWzFd
OwotICBtdXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpBcmVuYVN0cmluZ1B0ciBlcnJvcl87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVw
ZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpjb21waWxlcjo6Q29kZUdlbmVyYXRv
clJlc3BvbnNlX0ZpbGUgPiBmaWxlXzsKLSAgZnJpZW5kIHZvaWQgTElCUFJPVE9DX0VYUE9SVCBw
cm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmY29tcGlsZXJfMmZwbHVnaW5fMmVw
cm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3Rv
YnVmXzJmY29tcGlsZXJfMmZwbHVnaW5fMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1
Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZjb21waWxlcl8yZnBsdWdpbl8yZXBy
b3RvKCk7Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIENvZGVH
ZW5lcmF0b3JSZXNwb25zZSogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotI2lmICFQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMK
LS8vIENvZGVHZW5lcmF0b3JSZXF1ZXN0Ci0KLS8vIHJlcGVhdGVkIHN0cmluZyBmaWxlX3RvX2dl
bmVyYXRlID0gMTsKLWlubGluZSBpbnQgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OmZpbGVfdG9fZ2Vu
ZXJhdGVfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGZpbGVfdG9fZ2VuZXJhdGVfLnNpemUoKTsK
LX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpjbGVhcl9maWxlX3RvX2dlbmVy
YXRlKCkgewotICBmaWxlX3RvX2dlbmVyYXRlXy5DbGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6
c3RkOjpzdHJpbmcmIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpmaWxlX3RvX2dlbmVyYXRlKGludCBp
bmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdC5maWxlX3RvX2dlbmVy
YXRlKQotICByZXR1cm4gZmlsZV90b19nZW5lcmF0ZV8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6
OnN0ZDo6c3RyaW5nKiBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6bXV0YWJsZV9maWxlX3RvX2dlbmVy
YXRlKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZTpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QuZmlsZV90
b19nZW5lcmF0ZSkKLSAgcmV0dXJuIGZpbGVfdG9fZ2VuZXJhdGVfLk11dGFibGUoaW5kZXgpOwot
fQotaW5saW5lIHZvaWQgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OnNldF9maWxlX3RvX2dlbmVyYXRl
KGludCBpbmRleCwgY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdl
bmVyYXRvclJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZSkKLSAgZmlsZV90b19nZW5lcmF0ZV8uTXV0
YWJsZShpbmRleCktPmFzc2lnbih2YWx1ZSk7Ci19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9y
UmVxdWVzdDo6c2V0X2ZpbGVfdG9fZ2VuZXJhdGUoaW50IGluZGV4LCBjb25zdCBjaGFyKiB2YWx1
ZSkgewotICBmaWxlX3RvX2dlbmVyYXRlXy5NdXRhYmxlKGluZGV4KS0+YXNzaWduKHZhbHVlKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90
b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdC5maWxlX3RvX2dlbmVyYXRlKQotfQot
aW5saW5lIHZvaWQgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OnNldF9maWxlX3RvX2dlbmVyYXRlKGlu
dCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIGZpbGVfdG9fZ2Vu
ZXJhdGVfLk11dGFibGUoaW5kZXgpLT5hc3NpZ24oCi0gICAgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4odmFsdWUpLCBzaXplKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVx
dWVzdC5maWxlX3RvX2dlbmVyYXRlKQotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIENvZGVHZW5l
cmF0b3JSZXF1ZXN0OjphZGRfZmlsZV90b19nZW5lcmF0ZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2FkZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5D
b2RlR2VuZXJhdG9yUmVxdWVzdC5maWxlX3RvX2dlbmVyYXRlKQotICByZXR1cm4gZmlsZV90b19n
ZW5lcmF0ZV8uQWRkKCk7Ci19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6YWRk
X2ZpbGVfdG9fZ2VuZXJhdGUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgZmlsZV90
b19nZW5lcmF0ZV8uQWRkKCktPmFzc2lnbih2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JS
ZXF1ZXN0LmZpbGVfdG9fZ2VuZXJhdGUpCi19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVx
dWVzdDo6YWRkX2ZpbGVfdG9fZ2VuZXJhdGUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgZmlsZV90
b19nZW5lcmF0ZV8uQWRkKCktPmFzc2lnbih2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9hZGRfY2hhcjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVy
YXRvclJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZSkKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0
b3JSZXF1ZXN0OjphZGRfZmlsZV90b19nZW5lcmF0ZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90
IHNpemUpIHsKLSAgZmlsZV90b19nZW5lcmF0ZV8uQWRkKCktPmFzc2lnbihyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfYWRkX3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5l
cmF0b3JSZXF1ZXN0LmZpbGVfdG9fZ2VuZXJhdGUpCi19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPiYKLUNvZGVHZW5lcmF0
b3JSZXF1ZXN0OjpmaWxlX3RvX2dlbmVyYXRlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVy
YXRvclJlcXVlc3QuZmlsZV90b19nZW5lcmF0ZSkKLSAgcmV0dXJuIGZpbGVfdG9fZ2VuZXJhdGVf
OwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpzdGQ6
OnN0cmluZz4qCi1Db2RlR2VuZXJhdG9yUmVxdWVzdDo6bXV0YWJsZV9maWxlX3RvX2dlbmVyYXRl
KCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdv
b2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdC5maWxlX3RvX2dlbmVy
YXRlKQotICByZXR1cm4gJmZpbGVfdG9fZ2VuZXJhdGVfOwotfQotCi0vLyBvcHRpb25hbCBzdHJp
bmcgcGFyYW1ldGVyID0gMjsKLWlubGluZSBib29sIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpoYXNf
cGFyYW1ldGVyKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAy
dSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpzZXRfaGFzX3Bh
cmFtZXRlcigpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0KLWlubGluZSB2
b2lkIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpjbGVhcl9oYXNfcGFyYW1ldGVyKCkgewotICBfaGFz
X2JpdHNfWzBdICY9IH4weDAwMDAwMDAydTsKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JS
ZXF1ZXN0OjpjbGVhcl9wYXJhbWV0ZXIoKSB7Ci0gIHBhcmFtZXRlcl8uQ2xlYXJUb0VtcHR5Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfcGFyYW1ldGVyKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpz
dGQ6OnN0cmluZyYgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OnBhcmFtZXRlcigpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuY29t
cGlsZXIuQ29kZUdlbmVyYXRvclJlcXVlc3QucGFyYW1ldGVyKQotICByZXR1cm4gcGFyYW1ldGVy
Xy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6
c2V0X3BhcmFtZXRlcihjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX3Bh
cmFtZXRlcigpOwotICBwYXJhbWV0ZXJfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVy
LkNvZGVHZW5lcmF0b3JSZXF1ZXN0LnBhcmFtZXRlcikKLX0KLWlubGluZSB2b2lkIENvZGVHZW5l
cmF0b3JSZXF1ZXN0OjpzZXRfcGFyYW1ldGVyKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9o
YXNfcGFyYW1ldGVyKCk7Ci0gIHBhcmFtZXRlcl8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJp
bmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFy
Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdC5wYXJhbWV0ZXIp
Ci19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6c2V0X3BhcmFtZXRlcihjb25z
dCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19wYXJhbWV0ZXIoKTsKLSAg
cGFyYW1ldGVyXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29k
ZUdlbmVyYXRvclJlcXVlc3QucGFyYW1ldGVyKQotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIENv
ZGVHZW5lcmF0b3JSZXF1ZXN0OjptdXRhYmxlX3BhcmFtZXRlcigpIHsKLSAgc2V0X2hhc19wYXJh
bWV0ZXIoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29v
Z2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LnBhcmFtZXRlcikKLSAg
cmV0dXJuIHBhcmFtZXRlcl8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6
c3RyaW5nKiBDb2RlR2VuZXJhdG9yUmVxdWVzdDo6cmVsZWFzZV9wYXJhbWV0ZXIoKSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5j
b21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdC5wYXJhbWV0ZXIpCi0gIGNsZWFyX2hhc19wYXJh
bWV0ZXIoKTsKLSAgcmV0dXJuIHBhcmFtZXRlcl8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlu
bGluZSB2b2lkIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpzZXRfYWxsb2NhdGVkX3BhcmFtZXRlcig6
OnN0ZDo6c3RyaW5nKiBwYXJhbWV0ZXIpIHsKLSAgaWYgKHBhcmFtZXRlciAhPSBOVUxMKSB7Ci0g
ICAgc2V0X2hhc19wYXJhbWV0ZXIoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfcGFyYW1l
dGVyKCk7Ci0gIH0KLSAgcGFyYW1ldGVyXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgcGFyYW1l
dGVyKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6
Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LnBhcmFtZXRlcikK
LX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvIHBy
b3RvX2ZpbGUgPSAxNTsKLWlubGluZSBpbnQgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OnByb3RvX2Zp
bGVfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHByb3RvX2ZpbGVfLnNpemUoKTsKLX0KLWlubGlu
ZSB2b2lkIENvZGVHZW5lcmF0b3JSZXF1ZXN0OjpjbGVhcl9wcm90b19maWxlKCkgewotICBwcm90
b19maWxlXy5DbGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6Rmls
ZURlc2NyaXB0b3JQcm90byYgQ29kZUdlbmVyYXRvclJlcXVlc3Q6OnByb3RvX2ZpbGUoaW50IGlu
ZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29v
Z2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LnByb3RvX2ZpbGUpCi0g
IHJldHVybiBwcm90b19maWxlXy5HZXQoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RmlsZURlc2NyaXB0b3JQcm90byogQ29kZUdlbmVyYXRvclJlcXVlc3Q6Om11dGFibGVf
cHJvdG9fZmlsZShpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0
LnByb3RvX2ZpbGUpCi0gIHJldHVybiBwcm90b19maWxlXy5NdXRhYmxlKGluZGV4KTsKLX0KLWlu
bGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNjcmlwdG9yUHJvdG8qIENvZGVHZW5lcmF0
b3JSZXF1ZXN0OjphZGRfcHJvdG9fZmlsZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlcXVl
c3QucHJvdG9fZmlsZSkKLSAgcmV0dXJuIHByb3RvX2ZpbGVfLkFkZCgpOwotfQotaW5saW5lIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpG
aWxlRGVzY3JpcHRvclByb3RvID4qCi1Db2RlR2VuZXJhdG9yUmVxdWVzdDo6bXV0YWJsZV9wcm90
b19maWxlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9s
aXN0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVxdWVzdC5wcm90b19m
aWxlKQotICByZXR1cm4gJnByb3RvX2ZpbGVfOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlRGVzY3Jp
cHRvclByb3RvID4mCi1Db2RlR2VuZXJhdG9yUmVxdWVzdDo6cHJvdG9fZmlsZSgpIGNvbnN0IHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVm
LmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXF1ZXN0LnByb3RvX2ZpbGUpCi0gIHJldHVybiBwcm90
b19maWxlXzsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBDb2RlR2VuZXJhdG9yUmVzcG9uc2Vf
RmlsZQotCi0vLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci1pbmxpbmUgYm9vbCBDb2RlR2Vu
ZXJhdG9yUmVzcG9uc2VfRmlsZTo6aGFzX25hbWUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19i
aXRzX1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgQ29kZUdlbmVyYXRv
clJlc3BvbnNlX0ZpbGU6OnNldF9oYXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAw
MDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpjbGVh
cl9oYXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMXU7Ci19Ci1pbmxp
bmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6Y2xlYXJfbmFtZSgpIHsKLSAgbmFt
ZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfbmFtZSgpOwotfQotaW5s
aW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpuYW1l
KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2ds
ZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZS5uYW1lKQotICBy
ZXR1cm4gbmFtZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgQ29kZUdlbmVyYXRv
clJlc3BvbnNlX0ZpbGU6OnNldF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0g
IHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxl
ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZS5uYW1lKQotfQotaW5saW5lIHZvaWQgQ29kZUdl
bmVyYXRvclJlc3BvbnNlX0ZpbGU6OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNl
dF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1
ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xl
LnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLm5hbWUpCi19Ci1p
bmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6c2V0X25hbWUoY29uc3QgY2hh
ciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3Bv
bnNlLkZpbGUubmFtZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBDb2RlR2VuZXJhdG9yUmVz
cG9uc2VfRmlsZTo6bXV0YWJsZV9uYW1lKCkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLmNvbXBp
bGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLm5hbWUpCi0gIHJldHVybiBuYW1lXy5NdXRh
YmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIENvZGVHZW5lcmF0b3JS
ZXNwb25zZV9GaWxlOjpyZWxlYXNlX25hbWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9y
UmVzcG9uc2UuRmlsZS5uYW1lKQotICBjbGVhcl9oYXNfbmFtZSgpOwotICByZXR1cm4gbmFtZV8u
UmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JSZXNwb25z
ZV9GaWxlOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAo
bmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xl
YXJfaGFzX25hbWUoKTsKLSAgfQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFt
ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdv
b2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZS5uYW1lKQot
fQotCi0vLyBvcHRpb25hbCBzdHJpbmcgaW5zZXJ0aW9uX3BvaW50ID0gMjsKLWlubGluZSBib29s
IENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpoYXNfaW5zZXJ0aW9uX3BvaW50KCkgY29uc3Qg
ewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAydSkgIT0gMDsKLX0KLWlubGlu
ZSB2b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpzZXRfaGFzX2luc2VydGlvbl9wb2lu
dCgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0KLWlubGluZSB2b2lkIENv
ZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpjbGVhcl9oYXNfaW5zZXJ0aW9uX3BvaW50KCkgewot
ICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAydTsKLX0KLWlubGluZSB2b2lkIENvZGVHZW5l
cmF0b3JSZXNwb25zZV9GaWxlOjpjbGVhcl9pbnNlcnRpb25fcG9pbnQoKSB7Ci0gIGluc2VydGlv
bl9wb2ludF8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfaW5zZXJ0aW9u
X3BvaW50KCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgQ29kZUdlbmVyYXRvclJl
c3BvbnNlX0ZpbGU6Omluc2VydGlvbl9wb2ludCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVy
YXRvclJlc3BvbnNlLkZpbGUuaW5zZXJ0aW9uX3BvaW50KQotICByZXR1cm4gaW5zZXJ0aW9uX3Bv
aW50Xy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9u
c2VfRmlsZTo6c2V0X2luc2VydGlvbl9wb2ludChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkg
ewotICBzZXRfaGFzX2luc2VydGlvbl9wb2ludCgpOwotICBpbnNlcnRpb25fcG9pbnRfLlNldE5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9z
ZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLmlu
c2VydGlvbl9wb2ludCkKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxl
OjpzZXRfaW5zZXJ0aW9uX3BvaW50KGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfaW5z
ZXJ0aW9uX3BvaW50KCk7Ci0gIGluc2VydGlvbl9wb2ludF8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3Rk
OjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmls
ZS5pbnNlcnRpb25fcG9pbnQpCi19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2Vf
RmlsZTo6c2V0X2luc2VydGlvbl9wb2ludChjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUp
IHsKLSAgc2V0X2hhc19pbnNlcnRpb25fcG9pbnQoKTsKLSAgaW5zZXJ0aW9uX3BvaW50Xy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3Bv
bnNlLkZpbGUuaW5zZXJ0aW9uX3BvaW50KQotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIENvZGVH
ZW5lcmF0b3JSZXNwb25zZV9GaWxlOjptdXRhYmxlX2luc2VydGlvbl9wb2ludCgpIHsKLSAgc2V0
X2hhc19pbnNlcnRpb25fcG9pbnQoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25z
ZS5GaWxlLmluc2VydGlvbl9wb2ludCkKLSAgcmV0dXJuIGluc2VydGlvbl9wb2ludF8uTXV0YWJs
ZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBDb2RlR2VuZXJhdG9yUmVz
cG9uc2VfRmlsZTo6cmVsZWFzZV9pbnNlcnRpb25fcG9pbnQoKSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2Rl
R2VuZXJhdG9yUmVzcG9uc2UuRmlsZS5pbnNlcnRpb25fcG9pbnQpCi0gIGNsZWFyX2hhc19pbnNl
cnRpb25fcG9pbnQoKTsKLSAgcmV0dXJuIGluc2VydGlvbl9wb2ludF8uUmVsZWFzZU5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpzZXRfYWxs
b2NhdGVkX2luc2VydGlvbl9wb2ludCg6OnN0ZDo6c3RyaW5nKiBpbnNlcnRpb25fcG9pbnQpIHsK
LSAgaWYgKGluc2VydGlvbl9wb2ludCAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19pbnNlcnRpb25f
cG9pbnQoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfaW5zZXJ0aW9uX3BvaW50KCk7Ci0g
IH0KLSAgaW5zZXJ0aW9uX3BvaW50Xy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgaW5zZXJ0aW9u
X3BvaW50KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0
ZWQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLmlu
c2VydGlvbl9wb2ludCkKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGNvbnRlbnQgPSAxNTsKLWlu
bGluZSBib29sIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpoYXNfY29udGVudCgpIGNvbnN0
IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci1pbmxp
bmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZTo6c2V0X2hhc19jb250ZW50KCkgewot
ICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDR1OwotfQotaW5saW5lIHZvaWQgQ29kZUdlbmVy
YXRvclJlc3BvbnNlX0ZpbGU6OmNsZWFyX2hhc19jb250ZW50KCkgewotICBfaGFzX2JpdHNfWzBd
ICY9IH4weDAwMDAwMDA0dTsKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9G
aWxlOjpjbGVhcl9jb250ZW50KCkgewotICBjb250ZW50Xy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSk7Ci0gIGNsZWFyX2hhc19jb250ZW50KCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmlu
ZyYgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OmNvbnRlbnQoKSBjb25zdCB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVy
LkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLmNvbnRlbnQpCi0gIHJldHVybiBjb250ZW50Xy5H
ZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmls
ZTo6c2V0X2NvbnRlbnQoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19j
b250ZW50KCk7Ci0gIGNvbnRlbnRfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNv
ZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLmNvbnRlbnQpCi19Ci1pbmxpbmUgdm9pZCBDb2RlR2Vu
ZXJhdG9yUmVzcG9uc2VfRmlsZTo6c2V0X2NvbnRlbnQoY29uc3QgY2hhciogdmFsdWUpIHsKLSAg
c2V0X2hhc19jb250ZW50KCk7Ci0gIGNvbnRlbnRfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3Ry
aW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hh
cjpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZpbGUuY29u
dGVudCkKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjpzZXRfY29u
dGVudChjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19jb250ZW50
KCk7Ci0gIGNvbnRlbnRfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5jb21waWxl
ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZS5jb250ZW50KQotfQotaW5saW5lIDo6c3RkOjpz
dHJpbmcqIENvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlOjptdXRhYmxlX2NvbnRlbnQoKSB7Ci0g
IHNldF9oYXNfY29udGVudCgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
bXV0YWJsZTpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZp
bGUuY29udGVudCkKLSAgcmV0dXJuIGNvbnRlbnRfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1p
bmxpbmUgOjpzdGQ6OnN0cmluZyogQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OnJlbGVhc2Vf
Y29udGVudCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6
Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5GaWxlLmNvbnRl
bnQpCi0gIGNsZWFyX2hhc19jb250ZW50KCk7Ci0gIHJldHVybiBjb250ZW50Xy5SZWxlYXNlTm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGU6OnNl
dF9hbGxvY2F0ZWRfY29udGVudCg6OnN0ZDo6c3RyaW5nKiBjb250ZW50KSB7Ci0gIGlmIChjb250
ZW50ICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX2NvbnRlbnQoKTsKLSAgfSBlbHNlIHsKLSAgICBj
bGVhcl9oYXNfY29udGVudCgpOwotICB9Ci0gIGNvbnRlbnRfLlNldEFsbG9jYXRlZE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCBjb250ZW50KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9h
bGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5G
aWxlLmNvbnRlbnQpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQ29kZUdlbmVyYXRvclJlc3Bv
bnNlCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBlcnJvciA9IDE7Ci1pbmxpbmUgYm9vbCBDb2RlR2Vu
ZXJhdG9yUmVzcG9uc2U6Omhhc19lcnJvcigpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNf
WzBdICYgMHgwMDAwMDAwMXUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVz
cG9uc2U6OnNldF9oYXNfZXJyb3IoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwMXU7
Ci19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6OmNsZWFyX2hhc19lcnJvcigp
IHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMXU7Ci19Ci1pbmxpbmUgdm9pZCBDb2Rl
R2VuZXJhdG9yUmVzcG9uc2U6OmNsZWFyX2Vycm9yKCkgewotICBlcnJvcl8uQ2xlYXJUb0VtcHR5
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfZXJyb3IoKTsKLX0KLWlubGluZSBjb25zdCA6OnN0
ZDo6c3RyaW5nJiBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6OmVycm9yKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxl
ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuZXJyb3IpCi0gIHJldHVybiBlcnJvcl8uR2V0Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotfQotaW5saW5lIHZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpzZXRfZXJyb3Io
Y29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19lcnJvcigpOwotICBlcnJv
cl8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNl
LmVycm9yKQotfQotaW5saW5lIHZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpzZXRfZXJyb3Io
Y29uc3QgY2hhciogdmFsdWUpIHsKLSAgc2V0X2hhc19lcnJvcigpOwotICBlcnJvcl8uU2V0Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJh
dG9yUmVzcG9uc2UuZXJyb3IpCi19Ci1pbmxpbmUgdm9pZCBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6
OnNldF9lcnJvcihjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19l
cnJvcigpOwotICBlcnJvcl8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLmNvbXBp
bGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5lcnJvcikKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5n
KiBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6Om11dGFibGVfZXJyb3IoKSB7Ci0gIHNldF9oYXNfZXJy
b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xl
LnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5lcnJvcikKLSAgcmV0dXJu
IGVycm9yXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIENv
ZGVHZW5lcmF0b3JSZXNwb25zZTo6cmVsZWFzZV9lcnJvcigpIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVH
ZW5lcmF0b3JSZXNwb25zZS5lcnJvcikKLSAgY2xlYXJfaGFzX2Vycm9yKCk7Ci0gIHJldHVybiBl
cnJvcl8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIENvZGVHZW5lcmF0b3JS
ZXNwb25zZTo6c2V0X2FsbG9jYXRlZF9lcnJvcig6OnN0ZDo6c3RyaW5nKiBlcnJvcikgewotICBp
ZiAoZXJyb3IgIT0gTlVMTCkgewotICAgIHNldF9oYXNfZXJyb3IoKTsKLSAgfSBlbHNlIHsKLSAg
ICBjbGVhcl9oYXNfZXJyb3IoKTsKLSAgfQotICBlcnJvcl8uU2V0QWxsb2NhdGVkTm9BcmVuYSgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCksIGVycm9yKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxv
Y2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5lcnJv
cikKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJh
dG9yUmVzcG9uc2UuRmlsZSBmaWxlID0gMTU7Ci1pbmxpbmUgaW50IENvZGVHZW5lcmF0b3JSZXNw
b25zZTo6ZmlsZV9zaXplKCkgY29uc3QgewotICByZXR1cm4gZmlsZV8uc2l6ZSgpOwotfQotaW5s
aW5lIHZvaWQgQ29kZUdlbmVyYXRvclJlc3BvbnNlOjpjbGVhcl9maWxlKCkgewotICBmaWxlXy5D
bGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6Y29tcGlsZXI6OkNv
ZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlJiBDb2RlR2VuZXJhdG9yUmVzcG9uc2U6OmZpbGUoaW50
IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6
Z29vZ2xlLnByb3RvYnVmLmNvbXBpbGVyLkNvZGVHZW5lcmF0b3JSZXNwb25zZS5maWxlKQotICBy
ZXR1cm4gZmlsZV8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OmNv
bXBpbGVyOjpDb2RlR2VuZXJhdG9yUmVzcG9uc2VfRmlsZSogQ29kZUdlbmVyYXRvclJlc3BvbnNl
OjptdXRhYmxlX2ZpbGUoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVz
cG9uc2UuZmlsZSkKLSAgcmV0dXJuIGZpbGVfLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5lIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6Y29tcGlsZXI6OkNvZGVHZW5lcmF0b3JSZXNwb25zZV9GaWxlKiBD
b2RlR2VuZXJhdG9yUmVzcG9uc2U6OmFkZF9maWxlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9y
UmVzcG9uc2UuZmlsZSkKLSAgcmV0dXJuIGZpbGVfLkFkZCgpOwotfQotaW5saW5lIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpjb21waWxl
cjo6Q29kZUdlbmVyYXRvclJlc3BvbnNlX0ZpbGUgPioKLUNvZGVHZW5lcmF0b3JSZXNwb25zZTo6
bXV0YWJsZV9maWxlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2Uu
ZmlsZSkKLSAgcmV0dXJuICZmaWxlXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6Y29tcGlsZXI6OkNvZGVH
ZW5lcmF0b3JSZXNwb25zZV9GaWxlID4mCi1Db2RlR2VuZXJhdG9yUmVzcG9uc2U6OmZpbGUoKSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5w
cm90b2J1Zi5jb21waWxlci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuZmlsZSkKLSAgcmV0dXJuIGZp
bGVfOwotfQotCi0jZW5kaWYgIC8vICFQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChuYW1lc3BhY2Vfc2NvcGUpCi0KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8g
bmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCi0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfZ29v
Z2xlXzJmcHJvdG9idWZfMmZjb21waWxlcl8yZnBsdWdpbl8yZXByb3RvX19JTkNMVURFRApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wcm90byBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4ucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGFjYWVlMWY0OTQ1NmM1NTU0ZjZiOGNlMGY3YTZhYjM4YjhmZGEyNmUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2NvbXBpbGVyL3BsdWdpbi5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25A
Z29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8KLS8vIFdBUk5JTkc6ICBUaGUgcGx1Z2luIGlu
dGVyZmFjZSBpcyBjdXJyZW50bHkgRVhQRVJJTUVOVEFMIGFuZCBpcyBzdWJqZWN0IHRvCi0vLyAg
IGNoYW5nZS4KLS8vCi0vLyBwcm90b2MgKGFrYSB0aGUgUHJvdG9jb2wgQ29tcGlsZXIpIGNhbiBi
ZSBleHRlbmRlZCB2aWEgcGx1Z2lucy4gIEEgcGx1Z2luIGlzCi0vLyBqdXN0IGEgcHJvZ3JhbSB0
aGF0IHJlYWRzIGEgQ29kZUdlbmVyYXRvclJlcXVlc3QgZnJvbSBzdGRpbiBhbmQgd3JpdGVzIGEK
LS8vIENvZGVHZW5lcmF0b3JSZXNwb25zZSB0byBzdGRvdXQuCi0vLwotLy8gUGx1Z2lucyB3cml0
dGVuIHVzaW5nIEMrKyBjYW4gdXNlIGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4uaCBp
bnN0ZWFkCi0vLyBvZiBkZWFsaW5nIHdpdGggdGhlIHJhdyBwcm90b2NvbCBkZWZpbmVkIGhlcmUu
Ci0vLwotLy8gQSBwbHVnaW4gZXhlY3V0YWJsZSBuZWVkcyBvbmx5IHRvIGJlIHBsYWNlZCBzb21l
d2hlcmUgaW4gdGhlIHBhdGguICBUaGUKLS8vIHBsdWdpbiBzaG91bGQgYmUgbmFtZWQgInByb3Rv
Yy1nZW4tJE5BTUUiLCBhbmQgd2lsbCB0aGVuIGJlIHVzZWQgd2hlbiB0aGUKLS8vIGZsYWcgIi0t
JHtOQU1FfV9vdXQiIGlzIHBhc3NlZCB0byBwcm90b2MuCi0KLXN5bnRheCA9ICJwcm90bzIiOwot
cGFja2FnZSBnb29nbGUucHJvdG9idWYuY29tcGlsZXI7Ci1vcHRpb24gamF2YV9wYWNrYWdlID0g
ImNvbS5nb29nbGUucHJvdG9idWYuY29tcGlsZXIiOwotb3B0aW9uIGphdmFfb3V0ZXJfY2xhc3Nu
YW1lID0gIlBsdWdpblByb3RvcyI7Ci0KLW9wdGlvbiBnb19wYWNrYWdlID0gInBsdWdpbl9nbyI7
Ci0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8iOwotCi0vLyBBbiBl
bmNvZGVkIENvZGVHZW5lcmF0b3JSZXF1ZXN0IGlzIHdyaXR0ZW4gdG8gdGhlIHBsdWdpbidzIHN0
ZGluLgotbWVzc2FnZSBDb2RlR2VuZXJhdG9yUmVxdWVzdCB7Ci0gIC8vIFRoZSAucHJvdG8gZmls
ZXMgdGhhdCB3ZXJlIGV4cGxpY2l0bHkgbGlzdGVkIG9uIHRoZSBjb21tYW5kLWxpbmUuICBUaGUK
LSAgLy8gY29kZSBnZW5lcmF0b3Igc2hvdWxkIGdlbmVyYXRlIGNvZGUgb25seSBmb3IgdGhlc2Ug
ZmlsZXMuICBFYWNoIGZpbGUncwotICAvLyBkZXNjcmlwdG9yIHdpbGwgYmUgaW5jbHVkZWQgaW4g
cHJvdG9fZmlsZSwgYmVsb3cuCi0gIHJlcGVhdGVkIHN0cmluZyBmaWxlX3RvX2dlbmVyYXRlID0g
MTsKLQotICAvLyBUaGUgZ2VuZXJhdG9yIHBhcmFtZXRlciBwYXNzZWQgb24gdGhlIGNvbW1hbmQt
bGluZS4KLSAgb3B0aW9uYWwgc3RyaW5nIHBhcmFtZXRlciA9IDI7Ci0KLSAgLy8gRmlsZURlc2Ny
aXB0b3JQcm90b3MgZm9yIGFsbCBmaWxlcyBpbiBmaWxlc190b19nZW5lcmF0ZSBhbmQgZXZlcnl0
aGluZwotICAvLyB0aGV5IGltcG9ydC4gIFRoZSBmaWxlcyB3aWxsIGFwcGVhciBpbiB0b3BvbG9n
aWNhbCBvcmRlciwgc28gZWFjaCBmaWxlCi0gIC8vIGFwcGVhcnMgYmVmb3JlIGFueSBmaWxlIHRo
YXQgaW1wb3J0cyBpdC4KLSAgLy8KLSAgLy8gcHJvdG9jIGd1YXJhbnRlZXMgdGhhdCBhbGwgcHJv
dG9fZmlsZXMgd2lsbCBiZSB3cml0dGVuIGFmdGVyCi0gIC8vIHRoZSBmaWVsZHMgYWJvdmUsIGV2
ZW4gdGhvdWdoIHRoaXMgaXMgbm90IHRlY2huaWNhbGx5IGd1YXJhbnRlZWQgYnkgdGhlCi0gIC8v
IHByb3RvYnVmIHdpcmUgZm9ybWF0LiAgVGhpcyB0aGVvcmV0aWNhbGx5IGNvdWxkIGFsbG93IGEg
cGx1Z2luIHRvIHN0cmVhbQotICAvLyBpbiB0aGUgRmlsZURlc2NyaXB0b3JQcm90b3MgYW5kIGhh
bmRsZSB0aGVtIG9uZSBieSBvbmUgcmF0aGVyIHRoYW4gcmVhZAotICAvLyB0aGUgZW50aXJlIHNl
dCBpbnRvIG1lbW9yeSBhdCBvbmNlLiAgSG93ZXZlciwgYXMgb2YgdGhpcyB3cml0aW5nLCB0aGlz
Ci0gIC8vIGlzIG5vdCBzaW1pbGFybHkgb3B0aW1pemVkIG9uIHByb3RvYydzIGVuZCAtLSBpdCB3
aWxsIHN0b3JlIGFsbCBmaWVsZHMgaW4KLSAgLy8gbWVtb3J5IGF0IG9uY2UgYmVmb3JlIHNlbmRp
bmcgdGhlbSB0byB0aGUgcGx1Z2luLgotICByZXBlYXRlZCBGaWxlRGVzY3JpcHRvclByb3RvIHBy
b3RvX2ZpbGUgPSAxNTsKLX0KLQotLy8gVGhlIHBsdWdpbiB3cml0ZXMgYW4gZW5jb2RlZCBDb2Rl
R2VuZXJhdG9yUmVzcG9uc2UgdG8gc3Rkb3V0LgotbWVzc2FnZSBDb2RlR2VuZXJhdG9yUmVzcG9u
c2UgewotICAvLyBFcnJvciBtZXNzYWdlLiAgSWYgbm9uLWVtcHR5LCBjb2RlIGdlbmVyYXRpb24g
ZmFpbGVkLiAgVGhlIHBsdWdpbiBwcm9jZXNzCi0gIC8vIHNob3VsZCBleGl0IHdpdGggc3RhdHVz
IGNvZGUgemVybyBldmVuIGlmIGl0IHJlcG9ydHMgYW4gZXJyb3IgaW4gdGhpcyB3YXkuCi0gIC8v
Ci0gIC8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gaW5kaWNhdGUgZXJyb3JzIGluIC5wcm90byBm
aWxlcyB3aGljaCBwcmV2ZW50IHRoZQotICAvLyBjb2RlIGdlbmVyYXRvciBmcm9tIGdlbmVyYXRp
bmcgY29ycmVjdCBjb2RlLiAgRXJyb3JzIHdoaWNoIGluZGljYXRlIGEKLSAgLy8gcHJvYmxlbSBp
biBwcm90b2MgaXRzZWxmIC0tIHN1Y2ggYXMgdGhlIGlucHV0IENvZGVHZW5lcmF0b3JSZXF1ZXN0
IGJlaW5nCi0gIC8vIHVucGFyc2VhYmxlIC0tIHNob3VsZCBiZSByZXBvcnRlZCBieSB3cml0aW5n
IGEgbWVzc2FnZSB0byBzdGRlcnIgYW5kCi0gIC8vIGV4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0
YXR1cyBjb2RlLgotICBvcHRpb25hbCBzdHJpbmcgZXJyb3IgPSAxOwotCi0gIC8vIFJlcHJlc2Vu
dHMgYSBzaW5nbGUgZ2VuZXJhdGVkIGZpbGUuCi0gIG1lc3NhZ2UgRmlsZSB7Ci0gICAgLy8gVGhl
IGZpbGUgbmFtZSwgcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuICBUaGUgbmFtZSBt
dXN0IG5vdAotICAgIC8vIGNvbnRhaW4gIi4iIG9yICIuLiIgY29tcG9uZW50cyBhbmQgbXVzdCBi
ZSByZWxhdGl2ZSwgbm90IGJlIGFic29sdXRlIChzbywKLSAgICAvLyB0aGUgZmlsZSBjYW5ub3Qg
bGllIG91dHNpZGUgdGhlIG91dHB1dCBkaXJlY3RvcnkpLiAgIi8iIG11c3QgYmUgdXNlZCBhcwot
ICAgIC8vIHRoZSBwYXRoIHNlcGFyYXRvciwgbm90ICJcIi4KLSAgICAvLwotICAgIC8vIElmIHRo
ZSBuYW1lIGlzIG9taXR0ZWQsIHRoZSBjb250ZW50IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHBy
ZXZpb3VzCi0gICAgLy8gZmlsZS4gIFRoaXMgYWxsb3dzIHRoZSBnZW5lcmF0b3IgdG8gYnJlYWsg
bGFyZ2UgZmlsZXMgaW50byBzbWFsbCBjaHVua3MsCi0gICAgLy8gYW5kIGFsbG93cyB0aGUgZ2Vu
ZXJhdGVkIHRleHQgdG8gYmUgc3RyZWFtZWQgYmFjayB0byBwcm90b2Mgc28gdGhhdCBsYXJnZQot
ICAgIC8vIGZpbGVzIG5lZWQgbm90IHJlc2lkZSBjb21wbGV0ZWx5IGluIG1lbW9yeSBhdCBvbmUg
dGltZS4gIE5vdGUgdGhhdCBhcyBvZgotICAgIC8vIHRoaXMgd3JpdGluZyBwcm90b2MgZG9lcyBu
b3Qgb3B0aW1pemUgZm9yIHRoaXMgLS0gaXQgd2lsbCByZWFkIHRoZSBlbnRpcmUKLSAgICAvLyBD
b2RlR2VuZXJhdG9yUmVzcG9uc2UgYmVmb3JlIHdyaXRpbmcgZmlsZXMgdG8gZGlzay4KLSAgICBv
cHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0KLSAgICAvLyBJZiBub24tZW1wdHksIGluZGljYXRl
cyB0aGF0IHRoZSBuYW1lZCBmaWxlIHNob3VsZCBhbHJlYWR5IGV4aXN0LCBhbmQgdGhlCi0gICAg
Ly8gY29udGVudCBoZXJlIGlzIHRvIGJlIGluc2VydGVkIGludG8gdGhhdCBmaWxlIGF0IGEgZGVm
aW5lZCBpbnNlcnRpb24KLSAgICAvLyBwb2ludC4gIFRoaXMgZmVhdHVyZSBhbGxvd3MgYSBjb2Rl
IGdlbmVyYXRvciB0byBleHRlbmQgdGhlIG91dHB1dAotICAgIC8vIHByb2R1Y2VkIGJ5IGFub3Ro
ZXIgY29kZSBnZW5lcmF0b3IuICBUaGUgb3JpZ2luYWwgZ2VuZXJhdG9yIG1heSBwcm92aWRlCi0g
ICAgLy8gaW5zZXJ0aW9uIHBvaW50cyBieSBwbGFjaW5nIHNwZWNpYWwgYW5ub3RhdGlvbnMgaW4g
dGhlIGZpbGUgdGhhdCBsb29rCi0gICAgLy8gbGlrZToKLSAgICAvLyAgIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChOQU1FKQotICAgIC8vIFRoZSBhbm5vdGF0aW9uIGNhbiBoYXZlIGFyYml0cmFy
eSB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgaXQgb24gdGhlIGxpbmUsCi0gICAgLy8gd2hpY2ggYWxs
b3dzIGl0IHRvIGJlIHBsYWNlZCBpbiBhIGNvbW1lbnQuICBOQU1FIHNob3VsZCBiZSByZXBsYWNl
ZCB3aXRoCi0gICAgLy8gYW4gaWRlbnRpZmllciBuYW1pbmcgdGhlIHBvaW50IC0tIHRoaXMgaXMg
d2hhdCBvdGhlciBnZW5lcmF0b3JzIHdpbGwgdXNlCi0gICAgLy8gYXMgdGhlIGluc2VydGlvbl9w
b2ludC4gIENvZGUgaW5zZXJ0ZWQgYXQgdGhpcyBwb2ludCB3aWxsIGJlIHBsYWNlZAotICAgIC8v
IGltbWVkaWF0ZWx5IGFib3ZlIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGluc2VydGlvbiBwb2lu
dCAodGh1cyBtdWx0aXBsZQotICAgIC8vIGluc2VydGlvbnMgdG8gdGhlIHNhbWUgcG9pbnQgd2ls
bCBjb21lIG91dCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkKS4KLSAgICAvLyBUaGUgZG91
YmxlLUAgaXMgaW50ZW5kZWQgdG8gbWFrZSBpdCB1bmxpa2VseSB0aGF0IHRoZSBnZW5lcmF0ZWQg
Y29kZQotICAgIC8vIGNvdWxkIGNvbnRhaW4gdGhpbmdzIHRoYXQgbG9vayBsaWtlIGluc2VydGlv
biBwb2ludHMgYnkgYWNjaWRlbnQuCi0gICAgLy8KLSAgICAvLyBGb3IgZXhhbXBsZSwgdGhlIEMr
KyBjb2RlIGdlbmVyYXRvciBwbGFjZXMgdGhlIGZvbGxvd2luZyBsaW5lIGluIHRoZQotICAgIC8v
IC5wYi5oIGZpbGVzIHRoYXQgaXQgZ2VuZXJhdGVzOgotICAgIC8vICAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLSAgICAvLyBUaGlzIGxpbmUgYXBwZWFycyB3
aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBmaWxlJ3MgcGFja2FnZSBuYW1lc3BhY2UsIGJ1dAotICAg
IC8vIG91dHNpZGUgb2YgYW55IHBhcnRpY3VsYXIgY2xhc3MuICBBbm90aGVyIHBsdWdpbiBjYW4g
dGhlbiBzcGVjaWZ5IHRoZQotICAgIC8vIGluc2VydGlvbl9wb2ludCAibmFtZXNwYWNlX3Njb3Bl
IiB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIGNsYXNzZXMgb3IKLSAgICAvLyBvdGhlciBkZWNsYXJh
dGlvbnMgdGhhdCBzaG91bGQgYmUgcGxhY2VkIGluIHRoaXMgc2NvcGUuCi0gICAgLy8KLSAgICAv
LyBOb3RlIHRoYXQgaWYgdGhlIGxpbmUgY29udGFpbmluZyB0aGUgaW5zZXJ0aW9uIHBvaW50IGJl
Z2lucyB3aXRoCi0gICAgLy8gd2hpdGVzcGFjZSwgdGhlIHNhbWUgd2hpdGVzcGFjZSB3aWxsIGJl
IGFkZGVkIHRvIGV2ZXJ5IGxpbmUgb2YgdGhlCi0gICAgLy8gaW5zZXJ0ZWQgdGV4dC4gIFRoaXMg
aXMgdXNlZnVsIGZvciBsYW5ndWFnZXMgbGlrZSBQeXRob24sIHdoZXJlCi0gICAgLy8gaW5kZW50
YXRpb24gbWF0dGVycy4gIEluIHRoZXNlIGxhbmd1YWdlcywgdGhlIGluc2VydGlvbiBwb2ludCBj
b21tZW50Ci0gICAgLy8gc2hvdWxkIGJlIGluZGVudGVkIHRoZSBzYW1lIGFtb3VudCBhcyBhbnkg
aW5zZXJ0ZWQgY29kZSB3aWxsIG5lZWQgdG8gYmUKLSAgICAvLyBpbiBvcmRlciB0byB3b3JrIGNv
cnJlY3RseSBpbiB0aGF0IGNvbnRleHQuCi0gICAgLy8KLSAgICAvLyBUaGUgY29kZSBnZW5lcmF0
b3IgdGhhdCBnZW5lcmF0ZXMgdGhlIGluaXRpYWwgZmlsZSBhbmQgdGhlIG9uZSB3aGljaAotICAg
IC8vIGluc2VydHMgaW50byBpdCBtdXN0IGJvdGggcnVuIGFzIHBhcnQgb2YgYSBzaW5nbGUgaW52
b2NhdGlvbiBvZiBwcm90b2MuCi0gICAgLy8gQ29kZSBnZW5lcmF0b3JzIGFyZSBleGVjdXRlZCBp
biB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIgb24gdGhlCi0gICAgLy8gY29tbWFuZCBs
aW5lLgotICAgIC8vCi0gICAgLy8gSWYgfGluc2VydGlvbl9wb2ludHwgaXMgcHJlc2VudCwgfG5h
bWV8IG11c3QgYWxzbyBiZSBwcmVzZW50LgotICAgIG9wdGlvbmFsIHN0cmluZyBpbnNlcnRpb25f
cG9pbnQgPSAyOwotCi0gICAgLy8gVGhlIGZpbGUgY29udGVudHMuCi0gICAgb3B0aW9uYWwgc3Ry
aW5nIGNvbnRlbnQgPSAxNTsKLSAgfQotICByZXBlYXRlZCBGaWxlIGZpbGUgPSAxNTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9weXRob24vcHl0aG9uX2dlbmVy
YXRvci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9weXRob24vcHl0aG9uX2dlbmVy
YXRvci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU1M2RkMGQ5ZDM3NDU2ZTAy
NTVjYzgwZWNhZmJmY2U1MDNmMjU4My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhvbl9n
ZW5lcmF0b3IuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMxICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyNQWTI1IGNvbXBhdGlibGUgZ2VuZXJhdGVkIGNv
ZGUgZm9yIEdBRS4KLS8vIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0vLyBBdXRob3I6IHJvYmluc29uQGdvb2dsZS5jb20gKFdpbGwgUm9iaW5zb24pCi0v
LwotLy8gVGhpcyBtb2R1bGUgb3V0cHV0cyBwdXJlLVB5dGhvbiBwcm90b2NvbCBtZXNzYWdlIGNs
YXNzZXMgdGhhdCB3aWxsCi0vLyBsYXJnZWx5IGJlIGNvbnN0cnVjdGVkIGF0IHJ1bnRpbWUgdmlh
IHRoZSBtZXRhY2xhc3MgaW4gcmVmbGVjdGlvbi5weS4KLS8vIEluIG90aGVyIHdvcmRzLCBvdXIg
am9iIGlzIGJhc2ljYWxseSB0byBvdXRwdXQgYSBQeXRob24gZXF1aXZhbGVudAotLy8gb2YgdGhl
IEMrKyAqRGVzY3JpcHRvciBvYmplY3RzLCBhbmQgZml4IHVwIGFsbCBjaXJjdWxhciByZWZlcmVu
Y2VzCi0vLyB3aXRoaW4gdGhlc2Ugb2JqZWN0cy4KLS8vCi0vLyBOb3RlIHRoYXQgdGhlIHJ1bnRp
bWUgcGVyZm9ybWFuY2Ugb2YgcHJvdG9jb2wgbWVzc2FnZSBjbGFzc2VzIGNyZWF0ZWQgaW4KLS8v
IHRoaXMgd2F5IGlzIGV4cGVjdGVkIHRvIGJlIGxvdXN5LiAgVGhlIHBsYW4gaXMgdG8gY3JlYXRl
IGFuIGFsdGVybmF0ZQotLy8gZ2VuZXJhdG9yIHRoYXQgb3V0cHV0cyBhIFB5dGhvbi9DIGV4dGVu
c2lvbiBtb2R1bGUgdGhhdCBsZXRzCi0vLyBwZXJmb3JtYW5jZS1taW5kZWQgUHl0aG9uIGNvZGUg
bGV2ZXJhZ2UgdGhlIGZhc3QgQysrIGltcGxlbWVudGF0aW9uCi0vLyBkaXJlY3RseS4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8bGltaXRzPgot
I2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gK
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0j
aW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3B5dGhvbi9weXRob25fZ2VuZXJh
dG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9zdHJpbmdwcmludGYuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9z
dWJzdGl0dXRlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgcHl0aG9uIHsKLQotbmFtZXNwYWNlIHsK
LQotLy8gUmV0dXJucyBhIGNvcHkgb2YgfGZpbGVuYW1lfCB3aXRoIGFueSB0cmFpbGluZyAiLnBy
b3RvZGV2ZWwiIG9yICIucHJvdG8KLS8vIHN1ZmZpeCBzdHJpcHBlZC4KLS8vIFRPRE8ocm9iaW5z
b24pOiBVbmlmeSB3aXRoIGNvcHkgaW4gY29tcGlsZXIvY3BwL2ludGVybmFsL2hlbHBlcnMuY2Mu
Ci1zdHJpbmcgU3RyaXBQcm90byhjb25zdCBzdHJpbmcmIGZpbGVuYW1lKSB7Ci0gIGNvbnN0IGNo
YXIqIHN1ZmZpeCA9IEhhc1N1ZmZpeFN0cmluZyhmaWxlbmFtZSwgIi5wcm90b2RldmVsIikKLSAg
ICAgID8gIi5wcm90b2RldmVsIiA6ICIucHJvdG8iOwotICByZXR1cm4gU3RyaXBTdWZmaXhTdHJp
bmcoZmlsZW5hbWUsIHN1ZmZpeCk7Ci19Ci0KLQotLy8gUmV0dXJucyB0aGUgUHl0aG9uIG1vZHVs
ZSBuYW1lIGV4cGVjdGVkIGZvciBhIGdpdmVuIC5wcm90byBmaWxlbmFtZS4KLXN0cmluZyBNb2R1
bGVOYW1lKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsKLSAgc3RyaW5nIGJhc2VuYW1lID0gU3Ry
aXBQcm90byhmaWxlbmFtZSk7Ci0gIFN0cmlwU3RyaW5nKCZiYXNlbmFtZSwgIi0iLCAnXycpOwot
ICBTdHJpcFN0cmluZygmYmFzZW5hbWUsICIvIiwgJy4nKTsKLSAgcmV0dXJuIGJhc2VuYW1lICsg
Il9wYjIiOwotfQotCi0KLS8vIFJldHVybnMgdGhlIGFsaWFzIHdlIGFzc2lnbiB0byB0aGUgbW9k
dWxlIG9mIHRoZSBnaXZlbiAucHJvdG8gZmlsZW5hbWUKLS8vIHdoZW4gaW1wb3J0aW5nLiBTZWUg
dGVzdFBhY2thZ2VJbml0aWFsaXphdGlvbkltcG9ydCBpbgotLy8gZ29vZ2xlL3Byb3RvYnVmL3B5
dGhvbi9yZWZsZWN0aW9uX3Rlc3QucHkKLS8vIHRvIHNlZSB3aHkgd2UgbmVlZCB0aGUgYWxpYXMu
Ci1zdHJpbmcgTW9kdWxlQWxpYXMoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSkgewotICBzdHJpbmcg
bW9kdWxlX25hbWUgPSBNb2R1bGVOYW1lKGZpbGVuYW1lKTsKLSAgLy8gV2UgY2FuJ3QgaGF2ZSBk
b3RzIGluIHRoZSBtb2R1bGUgbmFtZSwgc28gd2UgcmVwbGFjZSBlYWNoIHdpdGggX2RvdF8uCi0g
IC8vIEJ1dCB0aGF0IGNvdWxkIGxlYWQgdG8gYSBjb2xsaXNpb24gYmV0d2VlbiBhLmIgYW5kIGFf
ZG90X2IsIHNvIHdlIGFsc28KLSAgLy8gZHVwbGljYXRlIGVhY2ggdW5kZXJzY29yZS4KLSAgR2xv
YmFsUmVwbGFjZVN1YnN0cmluZygiXyIsICJfXyIsICZtb2R1bGVfbmFtZSk7Ci0gIEdsb2JhbFJl
cGxhY2VTdWJzdHJpbmcoIi4iLCAiX2RvdF8iLCAmbW9kdWxlX25hbWUpOwotICByZXR1cm4gbW9k
dWxlX25hbWU7Ci19Ci0KLQotLy8gUmV0dXJucyBhbiBpbXBvcnQgc3RhdGVtZW50IG9mIGZvcm0g
ImZyb20gWC5ZLlogaW1wb3J0IFQiIGZvciB0aGUgZ2l2ZW4KLS8vIC5wcm90byBmaWxlbmFtZS4K
LXN0cmluZyBNb2R1bGVJbXBvcnRTdGF0ZW1lbnQoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSkgewot
ICBzdHJpbmcgbW9kdWxlX25hbWUgPSBNb2R1bGVOYW1lKGZpbGVuYW1lKTsKLSAgaW50IGxhc3Rf
ZG90X3BvcyA9IG1vZHVsZV9uYW1lLnJmaW5kKCcuJyk7Ci0gIGlmIChsYXN0X2RvdF9wb3MgPT0g
c3RyaW5nOjpucG9zKSB7Ci0gICAgLy8gTk9URShwZXR5YSk6IHRoaXMgaXMgbm90IHRlc3RlZCBh
cyBpdCB3b3VsZCByZXF1aXJlIGEgcHJvdG9jb2wgYnVmZmVyCi0gICAgLy8gb3V0c2lkZSBvZiBh
bnkgcGFja2FnZSwgYW5kIEkgZG9uJ3QgdGhpbmsgdGhhdCBpcyBlYXNpbHkgYWNoaWV2YWJsZS4K
LSAgICByZXR1cm4gImltcG9ydCAiICsgbW9kdWxlX25hbWU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0
dXJuICJmcm9tICIgKyBtb2R1bGVfbmFtZS5zdWJzdHIoMCwgbGFzdF9kb3RfcG9zKSArICIgaW1w
b3J0ICIgKwotICAgICAgICBtb2R1bGVfbmFtZS5zdWJzdHIobGFzdF9kb3RfcG9zICsgMSk7Ci0g
IH0KLX0KLQotCi0vLyBSZXR1cm5zIHRoZSBuYW1lIG9mIGFsbCBjb250YWluaW5nIHR5cGVzIGZv
ciBkZXNjcmlwdG9yLAotLy8gaW4gb3JkZXIgZnJvbSBvdXRlcm1vc3QgdG8gaW5uZXJtb3N0LCBm
b2xsb3dlZCBieSBkZXNjcmlwdG9yJ3MKLS8vIG93biBuYW1lLiAgRWFjaCBuYW1lIGlzIHNlcGFy
YXRlZCBieSB8c2VwYXJhdG9yfC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBEZXNjcmlwdG9yVD4KLXN0
cmluZyBOYW1lUHJlZml4ZWRXaXRoTmVzdGVkVHlwZXMoY29uc3QgRGVzY3JpcHRvclQmIGRlc2Ny
aXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYg
c2VwYXJhdG9yKSB7Ci0gIHN0cmluZyBuYW1lID0gZGVzY3JpcHRvci5uYW1lKCk7Ci0gIGZvciAo
Y29uc3QgRGVzY3JpcHRvciogY3VycmVudCA9IGRlc2NyaXB0b3IuY29udGFpbmluZ190eXBlKCk7
Ci0gICAgICAgY3VycmVudCAhPSBOVUxMOyBjdXJyZW50ID0gY3VycmVudC0+Y29udGFpbmluZ190
eXBlKCkpIHsKLSAgICBuYW1lID0gY3VycmVudC0+bmFtZSgpICsgc2VwYXJhdG9yICsgbmFtZTsK
LSAgfQotICByZXR1cm4gbmFtZTsKLX0KLQotCi0vLyBOYW1lIG9mIHRoZSBjbGFzcyBhdHRyaWJ1
dGUgd2hlcmUgd2Ugc3RvcmUgdGhlIFB5dGhvbgotLy8gZGVzY3JpcHRvci5EZXNjcmlwdG9yIGlu
c3RhbmNlIGZvciB0aGUgZ2VuZXJhdGVkIGNsYXNzLgotLy8gTXVzdCBzdGF5IGNvbnNpc3RlbnQg
d2l0aCB0aGUgX0RFU0NSSVBUT1JfS0VZIGNvbnN0YW50Ci0vLyBpbiBwcm90bzIvcHVibGljL3Jl
ZmxlY3Rpb24ucHkuCi1jb25zdCBjaGFyIGtEZXNjcmlwdG9yS2V5W10gPSAiREVTQ1JJUFRPUiI7
Ci0KLQotLy8gRG9lcyB0aGUgZmlsZSBoYXZlIHRvcC1sZXZlbCBlbnVtcz8KLWlubGluZSBib29s
IEhhc1RvcExldmVsRW51bXMoY29uc3QgRmlsZURlc2NyaXB0b3IgKmZpbGUpIHsKLSAgcmV0dXJu
IGZpbGUtPmVudW1fdHlwZV9jb3VudCgpID4gMDsKLX0KLQotCi0vLyBTaG91bGQgd2UgZ2VuZXJh
dGUgZ2VuZXJpYyBzZXJ2aWNlcyBmb3IgdGhpcyBmaWxlPwotaW5saW5lIGJvb2wgSGFzR2VuZXJp
Y1NlcnZpY2VzKGNvbnN0IEZpbGVEZXNjcmlwdG9yICpmaWxlKSB7Ci0gIHJldHVybiBmaWxlLT5z
ZXJ2aWNlX2NvdW50KCkgPiAwICYmCi0gICAgICAgICBmaWxlLT5vcHRpb25zKCkucHlfZ2VuZXJp
Y19zZXJ2aWNlcygpOwotfQotCi0KLS8vIFByaW50cyB0aGUgY29tbW9uIGJvaWxlcnBsYXRlIG5l
ZWRlZCBhdCB0aGUgdG9wIG9mIGV2ZXJ5IC5weQotLy8gZmlsZSBvdXRwdXQgYnkgdGhpcyBnZW5l
cmF0b3IuCi12b2lkIFByaW50VG9wQm9pbGVycGxhdGUoCi0gICAgaW86OlByaW50ZXIqIHByaW50
ZXIsIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLCBib29sIGRlc2NyaXB0b3JfcHJvdG8pIHsK
LSAgLy8gVE9ETyhyb2JpbnNvbik6IEFsbG93IHBhcmFtZXRlcml6YXRpb24gb2YgUHl0aG9uIHZl
cnNpb24/Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgIiMgR2VuZXJhdGVkIGJ5IHRoZSBwcm90
b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCFcbiIKLSAgICAgICIjIHNvdXJjZTog
JGZpbGVuYW1lJFxuIgotICAgICAgIlxuaW1wb3J0IHN5c1xuX2I9c3lzLnZlcnNpb25faW5mb1sw
XTwzIGFuZCAobGFtYmRhIHg6eCkgb3IgKGxhbWJkYSB4OnguZW5jb2RlKCdsYXRpbjEnKSkiICAv
LyMjUFkyNQotICAgICAgIlxuIiwKLSAgICAgICJmaWxlbmFtZSIsIGZpbGUtPm5hbWUoKSk7Ci0g
IGlmIChIYXNUb3BMZXZlbEVudW1zKGZpbGUpKSB7Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAg
ICAgICJmcm9tIGdvb2dsZS5wcm90b2J1Zi5pbnRlcm5hbCBpbXBvcnQgZW51bV90eXBlX3dyYXBw
ZXJcbiIpOwotICB9Ci0gIHByaW50ZXItPlByaW50KAotICAgICAgImZyb20gZ29vZ2xlLnByb3Rv
YnVmIGltcG9ydCBkZXNjcmlwdG9yIGFzIF9kZXNjcmlwdG9yXG4iCi0gICAgICAiZnJvbSBnb29n
bGUucHJvdG9idWYgaW1wb3J0IG1lc3NhZ2UgYXMgX21lc3NhZ2VcbiIKLSAgICAgICJmcm9tIGdv
b2dsZS5wcm90b2J1ZiBpbXBvcnQgcmVmbGVjdGlvbiBhcyBfcmVmbGVjdGlvblxuIgotICAgICAg
ImZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBzeW1ib2xfZGF0YWJhc2UgYXMgIgotICAgICAg
Il9zeW1ib2xfZGF0YWJhc2VcbiIpOwotICBpZiAoSGFzR2VuZXJpY1NlcnZpY2VzKGZpbGUpKSB7
Ci0gICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICJmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBv
cnQgc2VydmljZSBhcyBfc2VydmljZVxuIgotICAgICAgICAiZnJvbSBnb29nbGUucHJvdG9idWYg
aW1wb3J0IHNlcnZpY2VfcmVmbGVjdGlvblxuIik7Ci0gIH0KLQotICAvLyBBdm9pZCBjaXJjdWxh
ciBpbXBvcnRzIGlmIHRoaXMgbW9kdWxlIGlzIGRlc2NyaXB0b3JfcGIyLgotICBpZiAoIWRlc2Ny
aXB0b3JfcHJvdG8pIHsKLSAgICBwcmludGVyLT5QcmludCgKLSAgICAgICAgImZyb20gZ29vZ2xl
LnByb3RvYnVmIGltcG9ydCBkZXNjcmlwdG9yX3BiMlxuIik7Ci0gIH0KLSAgcHJpbnRlci0+UHJp
bnQoCi0gICAgICAiIyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoaW1wb3J0cylcblxuIgotICAg
ICAgIl9zeW1fZGIgPSBfc3ltYm9sX2RhdGFiYXNlLkRlZmF1bHQoKVxuIik7Ci0gIHByaW50ZXIt
PlByaW50KCJcblxuIik7Ci19Ci0KLQotLy8gUmV0dXJucyBhIFB5dGhvbiBsaXRlcmFsIGdpdmlu
ZyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBmaWVsZC4KLS8vIElmIHRoZSBmaWVsZCBzcGVjaWZp
ZXMgbm8gZXhwbGljaXQgZGVmYXVsdCB2YWx1ZSwgd2UnbGwgcmV0dXJuCi0vLyB0aGUgZGVmYXVs
dCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZmllbGQgdHlwZSAoemVybyBmb3IgbnVtYmVycywKLS8v
IGVtcHR5IHN0cmluZyBmb3Igc3RyaW5ncywgZW1wdHkgbGlzdCBmb3IgcmVwZWF0ZWQgZmllbGRz
LCBhbmQKLS8vIE5vbmUgZm9yIG5vbi1yZXBlYXRlZCwgY29tcG9zaXRlIGZpZWxkcykuCi0vLwot
Ly8gVE9ETyhyb2JpbnNvbik6IFVuaWZ5IHdpdGggY29kZSBmcm9tCi0vLyAvL2NvbXBpbGVyL2Nw
cC9pbnRlcm5hbC9wcmltaXRpdmVfZmllbGQuY2MKLS8vIC8vY29tcGlsZXIvY3BwL2ludGVybmFs
L2VudW1fZmllbGQuY2MKLS8vIC8vY29tcGlsZXIvY3BwL2ludGVybmFsL3N0cmluZ19maWVsZC5j
Ywotc3RyaW5nIFN0cmluZ2lmeURlZmF1bHRWYWx1ZShjb25zdCBGaWVsZERlc2NyaXB0b3ImIGZp
ZWxkKSB7Ci0gIGlmIChmaWVsZC5pc19yZXBlYXRlZCgpKSB7Ci0gICAgcmV0dXJuICJbXSI7Ci0g
IH0KLQotICBzd2l0Y2ggKGZpZWxkLmNwcF90eXBlKCkpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9JTlQzMjoKLSAgICAgIHJldHVybiBTaW1wbGVJdG9hKGZpZWxkLmRlZmF1
bHRfdmFsdWVfaW50MzIoKSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlO
VDMyOgotICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoZmllbGQuZGVmYXVsdF92YWx1ZV91aW50MzIo
KSk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UNjQ6Ci0gICAgICByZXR1
cm4gU2ltcGxlSXRvYShmaWVsZC5kZWZhdWx0X3ZhbHVlX2ludDY0KCkpOwotICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NDoKLSAgICAgIHJldHVybiBTaW1wbGVJdG9hKGZp
ZWxkLmRlZmF1bHRfdmFsdWVfdWludDY0KCkpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX0RPVUJMRTogewotICAgICAgZG91YmxlIHZhbHVlID0gZmllbGQuZGVmYXVsdF92YWx1
ZV9kb3VibGUoKTsKLSAgICAgIGlmICh2YWx1ZSA9PSBudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpKSB7Ci0gICAgICAgIC8vIFB5dGhvbiBwcmUtMi42IG9uIFdpbmRvd3MgZG9lcyBu
b3QgcGFyc2UgImluZiIgY29ycmVjdGx5LiAgSG93ZXZlciwKLSAgICAgICAgLy8gYSBudW1lcmlj
IGxpdGVyYWwgdGhhdCBpcyB0b28gYmlnIGZvciBhIGRvdWJsZSB3aWxsIGJlY29tZSBpbmZpbml0
eS4KLSAgICAgICAgcmV0dXJuICIxZTEwMDAwIjsKLSAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0g
LW51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpIHsKLSAgICAgICAgLy8gU2VlIGFi
b3ZlLgotICAgICAgICByZXR1cm4gIi0xZTEwMDAwIjsKLSAgICAgIH0gZWxzZSBpZiAodmFsdWUg
IT0gdmFsdWUpIHsKLSAgICAgICAgLy8gaW5maW5pdHkgKiAwID0gbmFuCi0gICAgICAgIHJldHVy
biAiKDFlMTAwMDAgKiAwKSI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gImZsb2F0
KCIgKyBTaW1wbGVEdG9hKHZhbHVlKSArICIpIjsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQ6IHsKLSAgICAgIGZsb2F0IHZhbHVlID0gZmll
bGQuZGVmYXVsdF92YWx1ZV9mbG9hdCgpOwotICAgICAgaWYgKHZhbHVlID09IG51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkgewotICAgICAgICAvLyBQeXRob24gcHJlLTIuNiBvbiBX
aW5kb3dzIGRvZXMgbm90IHBhcnNlICJpbmYiIGNvcnJlY3RseS4gIEhvd2V2ZXIsCi0gICAgICAg
IC8vIGEgbnVtZXJpYyBsaXRlcmFsIHRoYXQgaXMgdG9vIGJpZyBmb3IgYSBkb3VibGUgd2lsbCBi
ZWNvbWUgaW5maW5pdHkuCi0gICAgICAgIHJldHVybiAiMWUxMDAwMCI7Ci0gICAgICB9IGVsc2Ug
aWYgKHZhbHVlID09IC1udW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpIHsKLSAgICAg
ICAgLy8gU2VlIGFib3ZlLgotICAgICAgICByZXR1cm4gIi0xZTEwMDAwIjsKLSAgICAgIH0gZWxz
ZSBpZiAodmFsdWUgIT0gdmFsdWUpIHsKLSAgICAgICAgLy8gaW5maW5pdHkgLSBpbmZpbml0eSA9
IG5hbgotICAgICAgICByZXR1cm4gIigxZTEwMDAwICogMCkiOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgcmV0dXJuICJmbG9hdCgiICsgU2ltcGxlRnRvYSh2YWx1ZSkgKyAiKSI7Ci0gICAgICB9
Ci0gICAgfQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0w6Ci0gICAgICBy
ZXR1cm4gZmllbGQuZGVmYXVsdF92YWx1ZV9ib29sKCkgPyAiVHJ1ZSIgOiAiRmFsc2UiOwotICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAgICByZXR1cm4gU2ltcGxl
SXRvYShmaWVsZC5kZWZhdWx0X3ZhbHVlX2VudW0oKS0+bnVtYmVyKCkpOwotICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzoKLS8vIyMhUFkyNSAgICAgIHJldHVybiAiYlwi
IiArIENFc2NhcGUoZmllbGQuZGVmYXVsdF92YWx1ZV9zdHJpbmcoKSkgKwotLy8jIyFQWTI1ICAg
ICAgICAgICAgIChmaWVsZC50eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX1NUUklORyA/
ICJcIiIgOgotLy8jIyFQWTI1ICAgICAgICAgICAgICAgIlwiLmRlY29kZSgndXRmLTgnKSIpOwot
ICAgICAgcmV0dXJuICJfYihcIiIgKyBDRXNjYXBlKGZpZWxkLmRlZmF1bHRfdmFsdWVfc3RyaW5n
KCkpICsgIC8vIyNQWTI1Ci0gICAgICAgICAgICAgKGZpZWxkLnR5cGUoKSAhPSBGaWVsZERlc2Ny
aXB0b3I6OlRZUEVfU1RSSU5HID8gIlwiKSIgOiAgLy8jI1BZMjUKLSAgICAgICAgICAgICAgICJc
IikuZGVjb2RlKCd1dGYtOCcpIik7ICAvLyMjUFkyNQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICByZXR1cm4gIk5vbmUiOwotICB9Ci0gIC8vIChXZSBj
b3VsZCBhZGQgYSBkZWZhdWx0IGNhc2UgYWJvdmUgYnV0IHRoZW4gd2Ugd291bGRuJ3QgZ2V0IHRo
ZSBuaWNlCi0gIC8vIGNvbXBpbGVyIHdhcm5pbmcgd2hlbiBhIG5ldyB0eXBlIGlzIGFkZGVkLikK
LSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIk5vdCByZWFjaGVkLiI7Ci0gIHJldHVybiAiIjsKLX0K
LQotc3RyaW5nIFN0cmluZ2lmeVN5bnRheChGaWxlRGVzY3JpcHRvcjo6U3ludGF4IHN5bnRheCkg
ewotICBzd2l0Y2ggKHN5bnRheCkgewotICAgIGNhc2UgRmlsZURlc2NyaXB0b3I6OlNZTlRBWF9Q
Uk9UTzI6Ci0gICAgICByZXR1cm4gInByb3RvMiI7Ci0gICAgY2FzZSBGaWxlRGVzY3JpcHRvcjo6
U1lOVEFYX1BST1RPMzoKLSAgICAgIHJldHVybiAicHJvdG8zIjsKLSAgICBjYXNlIEZpbGVEZXNj
cmlwdG9yOjpTWU5UQVhfVU5LTk9XTjoKLSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xPRyhG
QVRBTCkgPDwgIlVuc3VwcG9ydGVkIHN5bnRheDsgdGhpcyBnZW5lcmF0b3Igb25seSBzdXBwb3J0
cyBwcm90bzIgIgotICAgICAgICAgICAgICAgICAgICAiYW5kIHByb3RvMyBzeW50YXguIjsKLSAg
ICAgIHJldHVybiAiIjsKLSAgfQotfQotCi0KLX0gIC8vIG5hbWVzcGFjZQotCi0KLUdlbmVyYXRv
cjo6R2VuZXJhdG9yKCkgOiBmaWxlXyhOVUxMKSB7Ci19Ci0KLUdlbmVyYXRvcjo6fkdlbmVyYXRv
cigpIHsKLX0KLQotYm9vbCBHZW5lcmF0b3I6OkdlbmVyYXRlKGNvbnN0IEZpbGVEZXNjcmlwdG9y
KiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcGFyYW1ldGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckNvbnRleHQqIGNvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBlcnJvcikgY29uc3QgewotCi0gIC8vIENv
bXBsZXRlbHkgc2VyaWFsaXplIGFsbCBHZW5lcmF0ZSgpIGNhbGxzIG9uIHRoaXMgaW5zdGFuY2Uu
ICBUaGUKLSAgLy8gdGhyZWFkLXNhZmV0eSBjb25zdHJhaW50cyBvZiB0aGUgQ29kZUdlbmVyYXRv
ciBpbnRlcmZhY2UgYXJlbid0IGNsZWFyIHNvCi0gIC8vIGp1c3QgYmUgYXMgY29uc2VydmF0aXZl
IGFzIHBvc3NpYmxlLiAgSXQncyBlYXNpZXIgdG8gcmVsYXggdGhpcyBsYXRlciBpZgotICAvLyB3
ZSBuZWVkIHRvLCBidXQgSSBkb3VidCBpdCB3aWxsIGJlIGFuIGlzc3VlLgotICAvLyBUT0RPKGtl
bnRvbik6ICBUaGUgcHJvcGVyIHRoaW5nIHRvIGRvIHdvdWxkIGJlIHRvIGFsbG9jYXRlIGFueSBz
dGF0ZSBvbgotICAvLyAgIHRoZSBzdGFjayBhbmQgdXNlIHRoYXQsIHNvIHRoYXQgdGhlIEdlbmVy
YXRvciBjbGFzcyBpdHNlbGYgZG9lcyBub3QgbmVlZAotICAvLyAgIHRvIGhhdmUgYW55IG11dGFi
bGUgbWVtYmVycy4gIFRoZW4gaXQgaXMgaW1wbGljaXRseSB0aHJlYWQtc2FmZS4KLSAgTXV0ZXhM
b2NrIGxvY2soJm11dGV4Xyk7Ci0gIGZpbGVfID0gZmlsZTsKLSAgc3RyaW5nIG1vZHVsZV9uYW1l
ID0gTW9kdWxlTmFtZShmaWxlLT5uYW1lKCkpOwotICBzdHJpbmcgZmlsZW5hbWUgPSBtb2R1bGVf
bmFtZTsKLSAgU3RyaXBTdHJpbmcoJmZpbGVuYW1lLCAiLiIsICcvJyk7Ci0gIGZpbGVuYW1lICs9
ICIucHkiOwotCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmRwOwotICBmaWxlXy0+Q29weVRvKCZm
ZHApOwotICBmZHAuU2VyaWFsaXplVG9TdHJpbmcoJmZpbGVfZGVzY3JpcHRvcl9zZXJpYWxpemVk
Xyk7Ci0KLQotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPGlvOjpaZXJvQ29weU91dHB1
dFN0cmVhbT4gb3V0cHV0KGNvbnRleHQtPk9wZW4oZmlsZW5hbWUpKTsKLSAgR09PR0xFX0NIRUNL
KG91dHB1dC5nZXQoKSk7Ci0gIGlvOjpQcmludGVyIHByaW50ZXIob3V0cHV0LmdldCgpLCAnJCcp
OwotICBwcmludGVyXyA9ICZwcmludGVyOwotCi0gIFByaW50VG9wQm9pbGVycGxhdGUocHJpbnRl
cl8sIGZpbGVfLCBHZW5lcmF0aW5nRGVzY3JpcHRvclByb3RvKCkpOwotICBQcmludEltcG9ydHMo
KTsKLSAgUHJpbnRGaWxlRGVzY3JpcHRvcigpOwotICBQcmludFRvcExldmVsRW51bXMoKTsKLSAg
UHJpbnRUb3BMZXZlbEV4dGVuc2lvbnMoKTsKLSAgUHJpbnRBbGxOZXN0ZWRFbnVtc0luRmlsZSgp
OwotICBQcmludE1lc3NhZ2VEZXNjcmlwdG9ycygpOwotICBGaXhGb3JlaWduRmllbGRzSW5EZXNj
cmlwdG9ycygpOwotICBQcmludE1lc3NhZ2VzKCk7Ci0gIC8vIFdlIGhhdmUgdG8gZml4IHVwIHRo
ZSBleHRlbnNpb25zIGFmdGVyIHRoZSBtZXNzYWdlIGNsYXNzZXMgdGhlbXNlbHZlcywKLSAgLy8g
c2luY2UgdGhleSBuZWVkIHRvIGNhbGwgc3RhdGljIFJlZ2lzdGVyRXh0ZW5zaW9uKCkgbWV0aG9k
cyBvbiB0aGVzZQotICAvLyBjbGFzc2VzLgotICBGaXhGb3JlaWduRmllbGRzSW5FeHRlbnNpb25z
KCk7Ci0gIC8vIERlc2NyaXB0b3Igb3B0aW9ucyBtYXkgaGF2ZSBjdXN0b20gZXh0ZW5zaW9ucy4g
VGhlc2UgY3VzdG9tIG9wdGlvbnMKLSAgLy8gY2FuIG9ubHkgYmUgc3VjY2Vzc2Z1bGx5IHBhcnNl
ZCBhZnRlciB3ZSByZWdpc3RlciBjb3JyZXNwb25kaW5nCi0gIC8vIGV4dGVuc2lvbnMuIFRoZXJl
Zm9yZSB3ZSBwYXJzZSBhbGwgb3B0aW9ucyBhZ2FpbiBoZXJlIHRvIHJlY29nbml6ZQotICAvLyBj
dXN0b20gb3B0aW9ucyB0aGF0IG1heSBiZSB1bmtub3duIHdoZW4gd2UgZGVmaW5lIHRoZSBkZXNj
cmlwdG9ycy4KLSAgRml4QWxsRGVzY3JpcHRvck9wdGlvbnMoKTsKLSAgaWYgKEhhc0dlbmVyaWNT
ZXJ2aWNlcyhmaWxlKSkgewotICAgIFByaW50U2VydmljZXMoKTsKLSAgfQotCi0gIHByaW50ZXIu
UHJpbnQoCi0gICAgIiMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1vZHVsZV9zY29wZSlcbiIp
OwotCi0gIHJldHVybiAhcHJpbnRlci5mYWlsZWQoKTsKLX0KLQotLy8gUHJpbnRzIFB5dGhvbiBp
bXBvcnRzIGZvciBhbGwgbW9kdWxlcyBpbXBvcnRlZCBieSB8ZmlsZXwuCi12b2lkIEdlbmVyYXRv
cjo6UHJpbnRJbXBvcnRzKCkgY29uc3QgewotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5k
ZXBlbmRlbmN5X2NvdW50KCk7ICsraSkgewotICAgIGNvbnN0IHN0cmluZyYgZmlsZW5hbWUgPSBm
aWxlXy0+ZGVwZW5kZW5jeShpKS0+bmFtZSgpOwotICAgIHN0cmluZyBpbXBvcnRfc3RhdGVtZW50
ID0gTW9kdWxlSW1wb3J0U3RhdGVtZW50KGZpbGVuYW1lKTsKLSAgICBzdHJpbmcgbW9kdWxlX2Fs
aWFzID0gTW9kdWxlQWxpYXMoZmlsZW5hbWUpOwotICAgIHByaW50ZXJfLT5QcmludCgiJHN0YXRl
bWVudCQgYXMgJGFsaWFzJFxuIiwgInN0YXRlbWVudCIsCi0gICAgICAgICAgICAgICAgICAgIGlt
cG9ydF9zdGF0ZW1lbnQsICJhbGlhcyIsIG1vZHVsZV9hbGlhcyk7Ci0gICAgQ29weVB1YmxpY0Rl
cGVuZGVuY2llc0FsaWFzZXMobW9kdWxlX2FsaWFzLCBmaWxlXy0+ZGVwZW5kZW5jeShpKSk7Ci0g
IH0KLSAgcHJpbnRlcl8tPlByaW50KCJcbiIpOwotCi0gIC8vIFByaW50IHB1YmxpYyBpbXBvcnRz
LgotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5wdWJsaWNfZGVwZW5kZW5jeV9jb3VudCgp
OyArK2kpIHsKLSAgICBzdHJpbmcgbW9kdWxlX25hbWUgPSBNb2R1bGVOYW1lKGZpbGVfLT5wdWJs
aWNfZGVwZW5kZW5jeShpKS0+bmFtZSgpKTsKLSAgICBwcmludGVyXy0+UHJpbnQoImZyb20gJG1v
ZHVsZSQgaW1wb3J0ICpcbiIsICJtb2R1bGUiLCBtb2R1bGVfbmFtZSk7Ci0gIH0KLSAgcHJpbnRl
cl8tPlByaW50KCJcbiIpOwotfQotCi0vLyBQcmludHMgdGhlIHNpbmdsZSBmaWxlIGRlc2NyaXB0
b3IgZm9yIHRoaXMgZmlsZS4KLXZvaWQgR2VuZXJhdG9yOjpQcmludEZpbGVEZXNjcmlwdG9yKCkg
Y29uc3QgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IG07Ci0gIG1bImRlc2NyaXB0b3JfbmFtZSJd
ID0ga0Rlc2NyaXB0b3JLZXk7Ci0gIG1bIm5hbWUiXSA9IGZpbGVfLT5uYW1lKCk7Ci0gIG1bInBh
Y2thZ2UiXSA9IGZpbGVfLT5wYWNrYWdlKCk7Ci0gIG1bInN5bnRheCJdID0gU3RyaW5naWZ5U3lu
dGF4KGZpbGVfLT5zeW50YXgoKSk7Ci0gIGNvbnN0IGNoYXIgZmlsZV9kZXNjcmlwdG9yX3RlbXBs
YXRlW10gPQotICAgICAgIiRkZXNjcmlwdG9yX25hbWUkID0gX2Rlc2NyaXB0b3IuRmlsZURlc2Ny
aXB0b3IoXG4iCi0gICAgICAiICBuYW1lPSckbmFtZSQnLFxuIgotICAgICAgIiAgcGFja2FnZT0n
JHBhY2thZ2UkJyxcbiIKLSAgICAgICIgIHN5bnRheD0nJHN5bnRheCQnLFxuIjsKLSAgcHJpbnRl
cl8tPlByaW50KG0sIGZpbGVfZGVzY3JpcHRvcl90ZW1wbGF0ZSk7Ci0gIHByaW50ZXJfLT5JbmRl
bnQoKTsKLSAgcHJpbnRlcl8tPlByaW50KAotLy8jIyFQWTI1ICAgICAgInNlcmlhbGl6ZWRfcGI9
YickdmFsdWUkJ1xuIiwKLSAgICAgICJzZXJpYWxpemVkX3BiPV9iKCckdmFsdWUkJylcbiIsICAv
LyMjUFkyNQotICAgICAgInZhbHVlIiwgc3RyaW5nczo6Q0hleEVzY2FwZShmaWxlX2Rlc2NyaXB0
b3Jfc2VyaWFsaXplZF8pKTsKLSAgaWYgKGZpbGVfLT5kZXBlbmRlbmN5X2NvdW50KCkgIT0gMCkg
ewotICAgIHByaW50ZXJfLT5QcmludCgiLFxuZGVwZW5kZW5jaWVzPVsiKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZpbGVfLT5kZXBlbmRlbmN5X2NvdW50KCk7ICsraSkgewotICAgICAgc3Ry
aW5nIG1vZHVsZV9hbGlhcyA9IE1vZHVsZUFsaWFzKGZpbGVfLT5kZXBlbmRlbmN5KGkpLT5uYW1l
KCkpOwotICAgICAgcHJpbnRlcl8tPlByaW50KCIkbW9kdWxlX2FsaWFzJC5ERVNDUklQVE9SLCIs
ICJtb2R1bGVfYWxpYXMiLAotICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9hbGlhcyk7Ci0g
ICAgfQotICAgIHByaW50ZXJfLT5QcmludCgiXSIpOwotICB9Ci0KLSAgLy8gVE9ETyhmYWxrKTog
QWxzbyBwcmludCBvcHRpb25zIGFuZCBmaXggdGhlIG1lc3NhZ2VfdHlwZSwgZW51bV90eXBlLAot
ICAvLyAgICAgICAgICAgICBzZXJ2aWNlIGFuZCBleHRlbnNpb24gbGF0ZXIgaW4gdGhlIGdlbmVy
YXRpb24uCi0KLSAgcHJpbnRlcl8tPk91dGRlbnQoKTsKLSAgcHJpbnRlcl8tPlByaW50KCIpXG4i
KTsKLSAgcHJpbnRlcl8tPlByaW50KCJfc3ltX2RiLlJlZ2lzdGVyRmlsZURlc2NyaXB0b3IoJG5h
bWUkKVxuIiwgIm5hbWUiLAotICAgICAgICAgICAgICAgICAga0Rlc2NyaXB0b3JLZXkpOwotICBw
cmludGVyXy0+UHJpbnQoIlxuIik7Ci19Ci0KLS8vIFByaW50cyBkZXNjcmlwdG9ycyBhbmQgbW9k
dWxlLWxldmVsIGNvbnN0YW50cyBmb3IgYWxsIHRvcC1sZXZlbAotLy8gZW51bXMgZGVmaW5lZCBp
biB8ZmlsZXwuCi12b2lkIEdlbmVyYXRvcjo6UHJpbnRUb3BMZXZlbEVudW1zKCkgY29uc3Qgewot
ICB2ZWN0b3I8cGFpcjxzdHJpbmcsIGludD4gPiB0b3BfbGV2ZWxfZW51bV92YWx1ZXM7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPmVudW1fdHlwZV9jb3VudCgpOyArK2kpIHsKLSAgICBj
b25zdCBFbnVtRGVzY3JpcHRvciYgZW51bV9kZXNjcmlwdG9yID0gKmZpbGVfLT5lbnVtX3R5cGUo
aSk7Ci0gICAgUHJpbnRFbnVtKGVudW1fZGVzY3JpcHRvcik7Ci0gICAgcHJpbnRlcl8tPlByaW50
KCIkbmFtZSQgPSAiCi0gICAgICAgICAgICAgICAgICAgICJlbnVtX3R5cGVfd3JhcHBlci5FbnVt
VHlwZVdyYXBwZXIoJGRlc2NyaXB0b3JfbmFtZSQpIiwKLSAgICAgICAgICAgICAgICAgICAgIm5h
bWUiLCBlbnVtX2Rlc2NyaXB0b3IubmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRvcl9uYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgTW9kdWxlTGV2ZWxEZXNjcmlwdG9yTmFt
ZShlbnVtX2Rlc2NyaXB0b3IpKTsKLSAgICBwcmludGVyXy0+UHJpbnQoIlxuIik7Ci0KLSAgICBm
b3IgKGludCBqID0gMDsgaiA8IGVudW1fZGVzY3JpcHRvci52YWx1ZV9jb3VudCgpOyArK2opIHsK
LSAgICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3ImIHZhbHVlX2Rlc2NyaXB0b3IgPSAqZW51
bV9kZXNjcmlwdG9yLnZhbHVlKGopOwotICAgICAgdG9wX2xldmVsX2VudW1fdmFsdWVzLnB1c2hf
YmFjaygKLSAgICAgICAgICBzdGQ6Om1ha2VfcGFpcih2YWx1ZV9kZXNjcmlwdG9yLm5hbWUoKSwg
dmFsdWVfZGVzY3JpcHRvci5udW1iZXIoKSkpOwotICAgIH0KLSAgfQotCi0gIGZvciAoaW50IGkg
PSAwOyBpIDwgdG9wX2xldmVsX2VudW1fdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgcHJpbnRl
cl8tPlByaW50KCIkbmFtZSQgPSAkdmFsdWUkXG4iLAotICAgICAgICAgICAgICAgICAgICAibmFt
ZSIsIHRvcF9sZXZlbF9lbnVtX3ZhbHVlc1tpXS5maXJzdCwKLSAgICAgICAgICAgICAgICAgICAg
InZhbHVlIiwgU2ltcGxlSXRvYSh0b3BfbGV2ZWxfZW51bV92YWx1ZXNbaV0uc2Vjb25kKSk7Ci0g
IH0KLSAgcHJpbnRlcl8tPlByaW50KCJcbiIpOwotfQotCi0vLyBQcmludHMgYWxsIGVudW1zIGNv
bnRhaW5lZCBpbiBhbGwgbWVzc2FnZSB0eXBlcyBpbiB8ZmlsZXwuCi12b2lkIEdlbmVyYXRvcjo6
UHJpbnRBbGxOZXN0ZWRFbnVtc0luRmlsZSgpIGNvbnN0IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmaWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCk7ICsraSkgewotICAgIFByaW50TmVzdGVkRW51
bXMoKmZpbGVfLT5tZXNzYWdlX3R5cGUoaSkpOwotICB9Ci19Ci0KLS8vIFByaW50cyBhIFB5dGhv
biBzdGF0ZW1lbnQgYXNzaWduaW5nIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGUtbGV2ZWwKLS8vIGVu
dW0gbmFtZSB0byBhIFB5dGhvbiBFbnVtRGVzY3JpcHRvciBvYmplY3QgZXF1aXZhbGVudCB0bwot
Ly8gZW51bV9kZXNjcmlwdG9yLgotdm9pZCBHZW5lcmF0b3I6OlByaW50RW51bShjb25zdCBFbnVt
RGVzY3JpcHRvciYgZW51bV9kZXNjcmlwdG9yKSBjb25zdCB7Ci0gIG1hcDxzdHJpbmcsIHN0cmlu
Zz4gbTsKLSAgc3RyaW5nIG1vZHVsZV9sZXZlbF9kZXNjcmlwdG9yX25hbWUgPQotICAgICAgTW9k
dWxlTGV2ZWxEZXNjcmlwdG9yTmFtZShlbnVtX2Rlc2NyaXB0b3IpOwotICBtWyJkZXNjcmlwdG9y
X25hbWUiXSA9IG1vZHVsZV9sZXZlbF9kZXNjcmlwdG9yX25hbWU7Ci0gIG1bIm5hbWUiXSA9IGVu
dW1fZGVzY3JpcHRvci5uYW1lKCk7Ci0gIG1bImZ1bGxfbmFtZSJdID0gZW51bV9kZXNjcmlwdG9y
LmZ1bGxfbmFtZSgpOwotICBtWyJmaWxlIl0gPSBrRGVzY3JpcHRvcktleTsKLSAgY29uc3QgY2hh
ciBlbnVtX2Rlc2NyaXB0b3JfdGVtcGxhdGVbXSA9Ci0gICAgICAiJGRlc2NyaXB0b3JfbmFtZSQg
PSBfZGVzY3JpcHRvci5FbnVtRGVzY3JpcHRvcihcbiIKLSAgICAgICIgIG5hbWU9JyRuYW1lJCcs
XG4iCi0gICAgICAiICBmdWxsX25hbWU9JyRmdWxsX25hbWUkJyxcbiIKLSAgICAgICIgIGZpbGVu
YW1lPU5vbmUsXG4iCi0gICAgICAiICBmaWxlPSRmaWxlJCxcbiIKLSAgICAgICIgIHZhbHVlcz1b
XG4iOwotICBzdHJpbmcgb3B0aW9uc19zdHJpbmc7Ci0gIGVudW1fZGVzY3JpcHRvci5vcHRpb25z
KCkuU2VyaWFsaXplVG9TdHJpbmcoJm9wdGlvbnNfc3RyaW5nKTsKLSAgcHJpbnRlcl8tPlByaW50
KG0sIGVudW1fZGVzY3JpcHRvcl90ZW1wbGF0ZSk7Ci0gIHByaW50ZXJfLT5JbmRlbnQoKTsKLSAg
cHJpbnRlcl8tPkluZGVudCgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGVudW1fZGVzY3JpcHRv
ci52YWx1ZV9jb3VudCgpOyArK2kpIHsKLSAgICBQcmludEVudW1WYWx1ZURlc2NyaXB0b3IoKmVu
dW1fZGVzY3JpcHRvci52YWx1ZShpKSk7Ci0gICAgcHJpbnRlcl8tPlByaW50KCIsXG4iKTsKLSAg
fQotICBwcmludGVyXy0+T3V0ZGVudCgpOwotICBwcmludGVyXy0+UHJpbnQoIl0sXG4iKTsKLSAg
cHJpbnRlcl8tPlByaW50KCJjb250YWluaW5nX3R5cGU9Tm9uZSxcbiIpOwotICBwcmludGVyXy0+
UHJpbnQoIm9wdGlvbnM9JG9wdGlvbnNfdmFsdWUkLFxuIiwKLSAgICAgICAgICAgICAgICAgICJv
cHRpb25zX3ZhbHVlIiwKLSAgICAgICAgICAgICAgICAgIE9wdGlvbnNWYWx1ZSgiRW51bU9wdGlv
bnMiLCBvcHRpb25zX3N0cmluZykpOwotICBFbnVtRGVzY3JpcHRvclByb3RvIGVkcDsKLSAgUHJp
bnRTZXJpYWxpemVkUGJJbnRlcnZhbChlbnVtX2Rlc2NyaXB0b3IsIGVkcCk7Ci0gIHByaW50ZXJf
LT5PdXRkZW50KCk7Ci0gIHByaW50ZXJfLT5QcmludCgiKVxuIik7Ci0gIHByaW50ZXJfLT5Qcmlu
dCgiX3N5bV9kYi5SZWdpc3RlckVudW1EZXNjcmlwdG9yKCRuYW1lJClcbiIsICJuYW1lIiwKLSAg
ICAgICAgICAgICAgICAgIG1vZHVsZV9sZXZlbF9kZXNjcmlwdG9yX25hbWUpOwotICBwcmludGVy
Xy0+UHJpbnQoIlxuIik7Ci19Ci0KLS8vIFJlY3Vyc2l2ZWx5IHByaW50cyBlbnVtcyBpbiBuZXN0
ZWQgdHlwZXMgd2l0aGluIGRlc2NyaXB0b3IsIHRoZW4KLS8vIHByaW50cyBlbnVtcyBjb250YWlu
ZWQgYXQgdGhlIHRvcCBsZXZlbCBpbiBkZXNjcmlwdG9yLgotdm9pZCBHZW5lcmF0b3I6OlByaW50
TmVzdGVkRW51bXMoY29uc3QgRGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QgewotICBmb3Ig
KGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3IubmVzdGVkX3R5cGVfY291bnQoKTsgKytpKSB7Ci0g
ICAgUHJpbnROZXN0ZWRFbnVtcygqZGVzY3JpcHRvci5uZXN0ZWRfdHlwZShpKSk7Ci0gIH0KLQot
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3IuZW51bV90eXBlX2NvdW50KCk7ICsraSkg
ewotICAgIFByaW50RW51bSgqZGVzY3JpcHRvci5lbnVtX3R5cGUoaSkpOwotICB9Ci19Ci0KLXZv
aWQgR2VuZXJhdG9yOjpQcmludFRvcExldmVsRXh0ZW5zaW9ucygpIGNvbnN0IHsKLSAgY29uc3Qg
Ym9vbCBpc19leHRlbnNpb24gPSB0cnVlOwotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5l
eHRlbnNpb25fY291bnQoKTsgKytpKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yJiBleHRl
bnNpb25fZmllbGQgPSAqZmlsZV8tPmV4dGVuc2lvbihpKTsKLSAgICBzdHJpbmcgY29uc3RhbnRf
bmFtZSA9IGV4dGVuc2lvbl9maWVsZC5uYW1lKCkgKyAiX0ZJRUxEX05VTUJFUiI7Ci0gICAgVXBw
ZXJTdHJpbmcoJmNvbnN0YW50X25hbWUpOwotICAgIHByaW50ZXJfLT5QcmludCgiJGNvbnN0YW50
X25hbWUkID0gJG51bWJlciRcbiIsCi0gICAgICAiY29uc3RhbnRfbmFtZSIsIGNvbnN0YW50X25h
bWUsCi0gICAgICAibnVtYmVyIiwgU2ltcGxlSXRvYShleHRlbnNpb25fZmllbGQubnVtYmVyKCkp
KTsKLSAgICBwcmludGVyXy0+UHJpbnQoIiRuYW1lJCA9ICIsICJuYW1lIiwgZXh0ZW5zaW9uX2Zp
ZWxkLm5hbWUoKSk7Ci0gICAgUHJpbnRGaWVsZERlc2NyaXB0b3IoZXh0ZW5zaW9uX2ZpZWxkLCBp
c19leHRlbnNpb24pOwotICAgIHByaW50ZXJfLT5QcmludCgiXG4iKTsKLSAgfQotICBwcmludGVy
Xy0+UHJpbnQoIlxuIik7Ci19Ci0KLS8vIFByaW50cyBQeXRob24gZXF1aXZhbGVudHMgb2YgYWxs
IERlc2NyaXB0b3JzIGluIHxmaWxlfC4KLXZvaWQgR2VuZXJhdG9yOjpQcmludE1lc3NhZ2VEZXNj
cmlwdG9ycygpIGNvbnN0IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+bWVzc2FnZV90
eXBlX2NvdW50KCk7ICsraSkgewotICAgIFByaW50RGVzY3JpcHRvcigqZmlsZV8tPm1lc3NhZ2Vf
dHlwZShpKSk7Ci0gICAgcHJpbnRlcl8tPlByaW50KCJcbiIpOwotICB9Ci19Ci0KLXZvaWQgR2Vu
ZXJhdG9yOjpQcmludFNlcnZpY2VzKCkgY29uc3QgewotICBmb3IgKGludCBpID0gMDsgaSA8IGZp
bGVfLT5zZXJ2aWNlX2NvdW50KCk7ICsraSkgewotICAgIFByaW50U2VydmljZURlc2NyaXB0b3Io
KmZpbGVfLT5zZXJ2aWNlKGkpKTsKLSAgICBQcmludFNlcnZpY2VDbGFzcygqZmlsZV8tPnNlcnZp
Y2UoaSkpOwotICAgIFByaW50U2VydmljZVN0dWIoKmZpbGVfLT5zZXJ2aWNlKGkpKTsKLSAgICBw
cmludGVyXy0+UHJpbnQoIlxuIik7Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0b3I6OlByaW50U2Vy
dmljZURlc2NyaXB0b3IoCi0gICAgY29uc3QgU2VydmljZURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
IGNvbnN0IHsKLSAgcHJpbnRlcl8tPlByaW50KCJcbiIpOwotICBzdHJpbmcgc2VydmljZV9uYW1l
ID0gTW9kdWxlTGV2ZWxTZXJ2aWNlRGVzY3JpcHRvck5hbWUoZGVzY3JpcHRvcik7Ci0gIHN0cmlu
ZyBvcHRpb25zX3N0cmluZzsKLSAgZGVzY3JpcHRvci5vcHRpb25zKCkuU2VyaWFsaXplVG9TdHJp
bmcoJm9wdGlvbnNfc3RyaW5nKTsKLQotICBwcmludGVyXy0+UHJpbnQoCi0gICAgICAiJHNlcnZp
Y2VfbmFtZSQgPSBfZGVzY3JpcHRvci5TZXJ2aWNlRGVzY3JpcHRvcihcbiIsCi0gICAgICAic2Vy
dmljZV9uYW1lIiwgc2VydmljZV9uYW1lKTsKLSAgcHJpbnRlcl8tPkluZGVudCgpOwotICBtYXA8
c3RyaW5nLCBzdHJpbmc+IG07Ci0gIG1bIm5hbWUiXSA9IGRlc2NyaXB0b3IubmFtZSgpOwotICBt
WyJmdWxsX25hbWUiXSA9IGRlc2NyaXB0b3IuZnVsbF9uYW1lKCk7Ci0gIG1bImZpbGUiXSA9IGtE
ZXNjcmlwdG9yS2V5OwotICBtWyJpbmRleCJdID0gU2ltcGxlSXRvYShkZXNjcmlwdG9yLmluZGV4
KCkpOwotICBtWyJvcHRpb25zX3ZhbHVlIl0gPSBPcHRpb25zVmFsdWUoIlNlcnZpY2VPcHRpb25z
Iiwgb3B0aW9uc19zdHJpbmcpOwotICBjb25zdCBjaGFyIHJlcXVpcmVkX2Z1bmN0aW9uX2FyZ3Vt
ZW50c1tdID0KLSAgICAgICJuYW1lPSckbmFtZSQnLFxuIgotICAgICAgImZ1bGxfbmFtZT0nJGZ1
bGxfbmFtZSQnLFxuIgotICAgICAgImZpbGU9JGZpbGUkLFxuIgotICAgICAgImluZGV4PSRpbmRl
eCQsXG4iCi0gICAgICAib3B0aW9ucz0kb3B0aW9uc192YWx1ZSQsXG4iOwotICBwcmludGVyXy0+
UHJpbnQobSwgcmVxdWlyZWRfZnVuY3Rpb25fYXJndW1lbnRzKTsKLQotICBTZXJ2aWNlRGVzY3Jp
cHRvclByb3RvIHNkcDsKLSAgUHJpbnRTZXJpYWxpemVkUGJJbnRlcnZhbChkZXNjcmlwdG9yLCBz
ZHApOwotCi0gIHByaW50ZXJfLT5QcmludCgibWV0aG9kcz1bXG4iKTsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBkZXNjcmlwdG9yLm1ldGhvZF9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBNZXRo
b2REZXNjcmlwdG9yKiBtZXRob2QgPSBkZXNjcmlwdG9yLm1ldGhvZChpKTsKLSAgICBtZXRob2Qt
Pm9wdGlvbnMoKS5TZXJpYWxpemVUb1N0cmluZygmb3B0aW9uc19zdHJpbmcpOwotCi0gICAgbS5j
bGVhcigpOwotICAgIG1bIm5hbWUiXSA9IG1ldGhvZC0+bmFtZSgpOwotICAgIG1bImZ1bGxfbmFt
ZSJdID0gbWV0aG9kLT5mdWxsX25hbWUoKTsKLSAgICBtWyJpbmRleCJdID0gU2ltcGxlSXRvYSht
ZXRob2QtPmluZGV4KCkpOwotICAgIG1bInNlcmlhbGl6ZWRfb3B0aW9ucyJdID0gQ0VzY2FwZShv
cHRpb25zX3N0cmluZyk7Ci0gICAgbVsiaW5wdXRfdHlwZSJdID0gTW9kdWxlTGV2ZWxEZXNjcmlw
dG9yTmFtZSgqKG1ldGhvZC0+aW5wdXRfdHlwZSgpKSk7Ci0gICAgbVsib3V0cHV0X3R5cGUiXSA9
IE1vZHVsZUxldmVsRGVzY3JpcHRvck5hbWUoKihtZXRob2QtPm91dHB1dF90eXBlKCkpKTsKLSAg
ICBtWyJvcHRpb25zX3ZhbHVlIl0gPSBPcHRpb25zVmFsdWUoIk1ldGhvZE9wdGlvbnMiLCBvcHRp
b25zX3N0cmluZyk7Ci0gICAgcHJpbnRlcl8tPlByaW50KCJfZGVzY3JpcHRvci5NZXRob2REZXNj
cmlwdG9yKFxuIik7Ci0gICAgcHJpbnRlcl8tPkluZGVudCgpOwotICAgIHByaW50ZXJfLT5Qcmlu
dCgKLSAgICAgICAgbSwKLSAgICAgICAgIm5hbWU9JyRuYW1lJCcsXG4iCi0gICAgICAgICJmdWxs
X25hbWU9JyRmdWxsX25hbWUkJyxcbiIKLSAgICAgICAgImluZGV4PSRpbmRleCQsXG4iCi0gICAg
ICAgICJjb250YWluaW5nX3NlcnZpY2U9Tm9uZSxcbiIKLSAgICAgICAgImlucHV0X3R5cGU9JGlu
cHV0X3R5cGUkLFxuIgotICAgICAgICAib3V0cHV0X3R5cGU9JG91dHB1dF90eXBlJCxcbiIKLSAg
ICAgICAgIm9wdGlvbnM9JG9wdGlvbnNfdmFsdWUkLFxuIik7Ci0gICAgcHJpbnRlcl8tPk91dGRl
bnQoKTsKLSAgICBwcmludGVyXy0+UHJpbnQoIiksXG4iKTsKLSAgfQotCi0gIHByaW50ZXJfLT5P
dXRkZW50KCk7Ci0gIHByaW50ZXJfLT5QcmludCgiXSlcblxuIik7Ci19Ci0KLQotdm9pZCBHZW5l
cmF0b3I6OlByaW50RGVzY3JpcHRvcktleUFuZE1vZHVsZU5hbWUoCi0gICAgY29uc3QgU2Vydmlj
ZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0IHsKLSAgcHJpbnRlcl8tPlByaW50KAotICAg
ICAgIiRkZXNjcmlwdG9yX2tleSQgPSAkZGVzY3JpcHRvcl9uYW1lJCxcbiIsCi0gICAgICAiZGVz
Y3JpcHRvcl9rZXkiLCBrRGVzY3JpcHRvcktleSwKLSAgICAgICJkZXNjcmlwdG9yX25hbWUiLCBN
b2R1bGVMZXZlbFNlcnZpY2VEZXNjcmlwdG9yTmFtZShkZXNjcmlwdG9yKSk7Ci0gIHByaW50ZXJf
LT5QcmludCgKLSAgICAgICJfX21vZHVsZV9fID0gJyRtb2R1bGVfbmFtZSQnXG4iLAotICAgICAg
Im1vZHVsZV9uYW1lIiwgTW9kdWxlTmFtZShmaWxlXy0+bmFtZSgpKSk7Ci19Ci0KLXZvaWQgR2Vu
ZXJhdG9yOjpQcmludFNlcnZpY2VDbGFzcyhjb25zdCBTZXJ2aWNlRGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikgY29uc3QgewotICAvLyBQcmludCB0aGUgc2VydmljZS4KLSAgcHJpbnRlcl8tPlByaW50
KCIkY2xhc3NfbmFtZSQgPSBzZXJ2aWNlX3JlZmxlY3Rpb24uR2VuZXJhdGVkU2VydmljZVR5cGUo
IgotICAgICAgICAgICAgICAgICAgIickY2xhc3NfbmFtZSQnLCAoX3NlcnZpY2UuU2VydmljZSwp
LCBkaWN0KFxuIiwKLSAgICAgICAgICAgICAgICAgICJjbGFzc19uYW1lIiwgZGVzY3JpcHRvci5u
YW1lKCkpOwotICBwcmludGVyXy0+SW5kZW50KCk7Ci0gIEdlbmVyYXRvcjo6UHJpbnREZXNjcmlw
dG9yS2V5QW5kTW9kdWxlTmFtZShkZXNjcmlwdG9yKTsKLSAgcHJpbnRlcl8tPlByaW50KCIpKVxu
XG4iKTsKLSAgcHJpbnRlcl8tPk91dGRlbnQoKTsKLX0KLQotdm9pZCBHZW5lcmF0b3I6OlByaW50
U2VydmljZVN0dWIoY29uc3QgU2VydmljZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0IHsK
LSAgLy8gUHJpbnQgdGhlIHNlcnZpY2Ugc3R1Yi4KLSAgcHJpbnRlcl8tPlByaW50KCIkY2xhc3Nf
bmFtZSRfU3R1YiA9ICIKLSAgICAgICAgICAgICAgICAgICJzZXJ2aWNlX3JlZmxlY3Rpb24uR2Vu
ZXJhdGVkU2VydmljZVN0dWJUeXBlKCIKLSAgICAgICAgICAgICAgICAgICInJGNsYXNzX25hbWUk
X1N0dWInLCAoJGNsYXNzX25hbWUkLCksIGRpY3QoXG4iLAotICAgICAgICAgICAgICAgICAgImNs
YXNzX25hbWUiLCBkZXNjcmlwdG9yLm5hbWUoKSk7Ci0gIHByaW50ZXJfLT5JbmRlbnQoKTsKLSAg
R2VuZXJhdG9yOjpQcmludERlc2NyaXB0b3JLZXlBbmRNb2R1bGVOYW1lKGRlc2NyaXB0b3IpOwot
ICBwcmludGVyXy0+UHJpbnQoIikpXG5cbiIpOwotICBwcmludGVyXy0+T3V0ZGVudCgpOwotfQot
Ci0vLyBQcmludHMgc3RhdGVtZW50IGFzc2lnbmluZyBNb2R1bGVMZXZlbERlc2NyaXB0b3JOYW1l
KG1lc3NhZ2VfZGVzY3JpcHRvcikKLS8vIHRvIGEgUHl0aG9uIERlc2NyaXB0b3Igb2JqZWN0IGZv
ciBtZXNzYWdlX2Rlc2NyaXB0b3IuCi0vLwotLy8gTXV0dWFsbHkgcmVjdXJzaXZlIHdpdGggUHJp
bnROZXN0ZWREZXNjcmlwdG9ycygpLgotdm9pZCBHZW5lcmF0b3I6OlByaW50RGVzY3JpcHRvcihj
b25zdCBEZXNjcmlwdG9yJiBtZXNzYWdlX2Rlc2NyaXB0b3IpIGNvbnN0IHsKLSAgUHJpbnROZXN0
ZWREZXNjcmlwdG9ycyhtZXNzYWdlX2Rlc2NyaXB0b3IpOwotCi0gIHByaW50ZXJfLT5QcmludCgi
XG4iKTsKLSAgcHJpbnRlcl8tPlByaW50KCIkZGVzY3JpcHRvcl9uYW1lJCA9IF9kZXNjcmlwdG9y
LkRlc2NyaXB0b3IoXG4iLAotICAgICAgICAgICAgICAgICAgImRlc2NyaXB0b3JfbmFtZSIsCi0g
ICAgICAgICAgICAgICAgICBNb2R1bGVMZXZlbERlc2NyaXB0b3JOYW1lKG1lc3NhZ2VfZGVzY3Jp
cHRvcikpOwotICBwcmludGVyXy0+SW5kZW50KCk7Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gbTsK
LSAgbVsibmFtZSJdID0gbWVzc2FnZV9kZXNjcmlwdG9yLm5hbWUoKTsKLSAgbVsiZnVsbF9uYW1l
Il0gPSBtZXNzYWdlX2Rlc2NyaXB0b3IuZnVsbF9uYW1lKCk7Ci0gIG1bImZpbGUiXSA9IGtEZXNj
cmlwdG9yS2V5OwotICBjb25zdCBjaGFyIHJlcXVpcmVkX2Z1bmN0aW9uX2FyZ3VtZW50c1tdID0K
LSAgICAgICJuYW1lPSckbmFtZSQnLFxuIgotICAgICAgImZ1bGxfbmFtZT0nJGZ1bGxfbmFtZSQn
LFxuIgotICAgICAgImZpbGVuYW1lPU5vbmUsXG4iCi0gICAgICAiZmlsZT0kZmlsZSQsXG4iCi0g
ICAgICAiY29udGFpbmluZ190eXBlPU5vbmUsXG4iOwotICBwcmludGVyXy0+UHJpbnQobSwgcmVx
dWlyZWRfZnVuY3Rpb25fYXJndW1lbnRzKTsKLSAgUHJpbnRGaWVsZHNJbkRlc2NyaXB0b3IobWVz
c2FnZV9kZXNjcmlwdG9yKTsKLSAgUHJpbnRFeHRlbnNpb25zSW5EZXNjcmlwdG9yKG1lc3NhZ2Vf
ZGVzY3JpcHRvcik7Ci0KLSAgLy8gTmVzdGVkIHR5cGVzCi0gIHByaW50ZXJfLT5QcmludCgibmVz
dGVkX3R5cGVzPVsiKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlX2Rlc2NyaXB0b3Iu
bmVzdGVkX3R5cGVfY291bnQoKTsgKytpKSB7Ci0gICAgY29uc3Qgc3RyaW5nIG5lc3RlZF9uYW1l
ID0gTW9kdWxlTGV2ZWxEZXNjcmlwdG9yTmFtZSgKLSAgICAgICAgKm1lc3NhZ2VfZGVzY3JpcHRv
ci5uZXN0ZWRfdHlwZShpKSk7Ci0gICAgcHJpbnRlcl8tPlByaW50KCIkbmFtZSQsICIsICJuYW1l
IiwgbmVzdGVkX25hbWUpOwotICB9Ci0gIHByaW50ZXJfLT5QcmludCgiXSxcbiIpOwotCi0gIC8v
IEVudW0gdHlwZXMKLSAgcHJpbnRlcl8tPlByaW50KCJlbnVtX3R5cGVzPVtcbiIpOwotICBwcmlu
dGVyXy0+SW5kZW50KCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZV9kZXNjcmlwdG9y
LmVudW1fdHlwZV9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBzdHJpbmcgZGVzY3JpcHRvcl9u
YW1lID0gTW9kdWxlTGV2ZWxEZXNjcmlwdG9yTmFtZSgKLSAgICAgICAgKm1lc3NhZ2VfZGVzY3Jp
cHRvci5lbnVtX3R5cGUoaSkpOwotICAgIHByaW50ZXJfLT5QcmludChkZXNjcmlwdG9yX25hbWUu
Y19zdHIoKSk7Ci0gICAgcHJpbnRlcl8tPlByaW50KCIsXG4iKTsKLSAgfQotICBwcmludGVyXy0+
T3V0ZGVudCgpOwotICBwcmludGVyXy0+UHJpbnQoIl0sXG4iKTsKLSAgc3RyaW5nIG9wdGlvbnNf
c3RyaW5nOwotICBtZXNzYWdlX2Rlc2NyaXB0b3Iub3B0aW9ucygpLlNlcmlhbGl6ZVRvU3RyaW5n
KCZvcHRpb25zX3N0cmluZyk7Ci0gIHByaW50ZXJfLT5QcmludCgKLSAgICAgICJvcHRpb25zPSRv
cHRpb25zX3ZhbHVlJCxcbiIKLSAgICAgICJpc19leHRlbmRhYmxlPSRleHRlbmRhYmxlJCxcbiIK
LSAgICAgICJzeW50YXg9JyRzeW50YXgkJyIsCi0gICAgICAib3B0aW9uc192YWx1ZSIsIE9wdGlv
bnNWYWx1ZSgiTWVzc2FnZU9wdGlvbnMiLCBvcHRpb25zX3N0cmluZyksCi0gICAgICAiZXh0ZW5k
YWJsZSIsIG1lc3NhZ2VfZGVzY3JpcHRvci5leHRlbnNpb25fcmFuZ2VfY291bnQoKSA+IDAgPwot
ICAgICAgICAgICAgICAgICAgICAgICJUcnVlIiA6ICJGYWxzZSIsCi0gICAgICAic3ludGF4Iiwg
U3RyaW5naWZ5U3ludGF4KG1lc3NhZ2VfZGVzY3JpcHRvci5maWxlKCktPnN5bnRheCgpKSk7Ci0g
IHByaW50ZXJfLT5QcmludCgiLFxuIik7Ci0KLSAgLy8gRXh0ZW5zaW9uIHJhbmdlcwotICBwcmlu
dGVyXy0+UHJpbnQoImV4dGVuc2lvbl9yYW5nZXM9WyIpOwotICBmb3IgKGludCBpID0gMDsgaSA8
IG1lc3NhZ2VfZGVzY3JpcHRvci5leHRlbnNpb25fcmFuZ2VfY291bnQoKTsgKytpKSB7Ci0gICAg
Y29uc3QgRGVzY3JpcHRvcjo6RXh0ZW5zaW9uUmFuZ2UqIHJhbmdlID0KLSAgICAgICAgbWVzc2Fn
ZV9kZXNjcmlwdG9yLmV4dGVuc2lvbl9yYW5nZShpKTsKLSAgICBwcmludGVyXy0+UHJpbnQoIigk
c3RhcnQkLCAkZW5kJCksICIsCi0gICAgICAgICAgICAgICAgICAgICJzdGFydCIsIFNpbXBsZUl0
b2EocmFuZ2UtPnN0YXJ0KSwKLSAgICAgICAgICAgICAgICAgICAgImVuZCIsIFNpbXBsZUl0b2Eo
cmFuZ2UtPmVuZCkpOwotICB9Ci0gIHByaW50ZXJfLT5QcmludCgiXSxcbiIpOwotICBwcmludGVy
Xy0+UHJpbnQoIm9uZW9mcz1bXG4iKTsKLSAgcHJpbnRlcl8tPkluZGVudCgpOwotICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1lc3NhZ2VfZGVzY3JpcHRvci5vbmVvZl9kZWNsX2NvdW50KCk7ICsraSkg
ewotICAgIGNvbnN0IE9uZW9mRGVzY3JpcHRvciogZGVzYyA9IG1lc3NhZ2VfZGVzY3JpcHRvci5v
bmVvZl9kZWNsKGkpOwotICAgIG1hcDxzdHJpbmcsIHN0cmluZz4gbTsKLSAgICBtWyJuYW1lIl0g
PSBkZXNjLT5uYW1lKCk7Ci0gICAgbVsiZnVsbF9uYW1lIl0gPSBkZXNjLT5mdWxsX25hbWUoKTsK
LSAgICBtWyJpbmRleCJdID0gU2ltcGxlSXRvYShkZXNjLT5pbmRleCgpKTsKLSAgICBwcmludGVy
Xy0+UHJpbnQoCi0gICAgICAgIG0sCi0gICAgICAgICJfZGVzY3JpcHRvci5PbmVvZkRlc2NyaXB0
b3IoXG4iCi0gICAgICAgICIgIG5hbWU9JyRuYW1lJCcsIGZ1bGxfbmFtZT0nJGZ1bGxfbmFtZSQn
LFxuIgotICAgICAgICAiICBpbmRleD0kaW5kZXgkLCBjb250YWluaW5nX3R5cGU9Tm9uZSwgZmll
bGRzPVtdKSxcbiIpOwotICB9Ci0gIHByaW50ZXJfLT5PdXRkZW50KCk7Ci0gIHByaW50ZXJfLT5Q
cmludCgiXSxcbiIpOwotICAvLyBTZXJpYWxpemF0aW9uIG9mIHByb3RvCi0gIERlc2NyaXB0b3JQ
cm90byBlZHA7Ci0gIFByaW50U2VyaWFsaXplZFBiSW50ZXJ2YWwobWVzc2FnZV9kZXNjcmlwdG9y
LCBlZHApOwotCi0gIHByaW50ZXJfLT5PdXRkZW50KCk7Ci0gIHByaW50ZXJfLT5QcmludCgiKVxu
Iik7Ci19Ci0KLS8vIFByaW50cyBQeXRob24gRGVzY3JpcHRvciBvYmplY3RzIGZvciBhbGwgbmVz
dGVkIHR5cGVzIGNvbnRhaW5lZCBpbgotLy8gbWVzc2FnZV9kZXNjcmlwdG9yLgotLy8KLS8vIE11
dHVhbGx5IHJlY3Vyc2l2ZSB3aXRoIFByaW50RGVzY3JpcHRvcigpLgotdm9pZCBHZW5lcmF0b3I6
OlByaW50TmVzdGVkRGVzY3JpcHRvcnMoCi0gICAgY29uc3QgRGVzY3JpcHRvciYgY29udGFpbmlu
Z19kZXNjcmlwdG9yKSBjb25zdCB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgY29udGFpbmluZ19k
ZXNjcmlwdG9yLm5lc3RlZF90eXBlX2NvdW50KCk7ICsraSkgewotICAgIFByaW50RGVzY3JpcHRv
cigqY29udGFpbmluZ19kZXNjcmlwdG9yLm5lc3RlZF90eXBlKGkpKTsKLSAgfQotfQotCi0vLyBQ
cmludHMgYWxsIG1lc3NhZ2VzIGluIHxmaWxlfC4KLXZvaWQgR2VuZXJhdG9yOjpQcmludE1lc3Nh
Z2VzKCkgY29uc3QgewotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5tZXNzYWdlX3R5cGVf
Y291bnQoKTsgKytpKSB7Ci0gICAgdmVjdG9yPHN0cmluZz4gdG9fcmVnaXN0ZXI7Ci0gICAgUHJp
bnRNZXNzYWdlKCpmaWxlXy0+bWVzc2FnZV90eXBlKGkpLCAiIiwgJnRvX3JlZ2lzdGVyKTsKLSAg
ICBmb3IgKGludCBqID0gMDsgaiA8IHRvX3JlZ2lzdGVyLnNpemUoKTsgKytqKSB7Ci0gICAgICBw
cmludGVyXy0+UHJpbnQoIl9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKCRuYW1lJClcbiIsICJuYW1l
IiwKLSAgICAgICAgICAgICAgICAgICAgICB0b19yZWdpc3RlcltqXSk7Ci0gICAgfQotICAgIHBy
aW50ZXJfLT5QcmludCgiXG4iKTsKLSAgfQotfQotCi0vLyBQcmludHMgYSBQeXRob24gY2xhc3Mg
Zm9yIHRoZSBnaXZlbiBtZXNzYWdlIGRlc2NyaXB0b3IuICBXZSBkZWZlciB0byB0aGUKLS8vIG1l
dGFjbGFzcyB0byBkbyBhbG1vc3QgYWxsIG9mIHRoZSB3b3JrIG9mIGFjdHVhbGx5IGNyZWF0aW5n
IGEgdXNlZnVsIGNsYXNzLgotLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgaXRz
IG1hbnkgaGVscGVyIGZ1bmN0aW9ucyBhYm92ZSBpcyBtZXJlbHkKLS8vIHRvIG91dHB1dCBhIFB5
dGhvbiB2ZXJzaW9uIG9mIHRoZSBkZXNjcmlwdG9ycywgd2hpY2ggdGhlIG1ldGFjbGFzcyBpbgot
Ly8gcmVmbGVjdGlvbi5weSB3aWxsIHVzZSB0byBjb25zdHJ1Y3QgdGhlIG1lYXQgb2YgdGhlIGNs
YXNzIGl0c2VsZi4KLS8vCi0vLyBNdXR1YWxseSByZWN1cnNpdmUgd2l0aCBQcmludE5lc3RlZE1l
c3NhZ2VzKCkuCi0vLyBDb2xsZWN0IG5lc3RlZCBtZXNzYWdlIG5hbWVzIHRvX3JlZ2lzdGVyIGZv
ciB0aGUgc3ltYm9sX2RhdGFiYXNlLgotdm9pZCBHZW5lcmF0b3I6OlByaW50TWVzc2FnZShjb25z
dCBEZXNjcmlwdG9yJiBtZXNzYWdlX2Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0cmluZyYgcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ZWN0b3I8c3RyaW5nPiogdG9fcmVnaXN0ZXIpIGNvbnN0IHsKLSAgc3RyaW5nIHF1YWxpZmll
ZF9uYW1lKHByZWZpeCArIG1lc3NhZ2VfZGVzY3JpcHRvci5uYW1lKCkpOwotICB0b19yZWdpc3Rl
ci0+cHVzaF9iYWNrKHF1YWxpZmllZF9uYW1lKTsKLSAgcHJpbnRlcl8tPlByaW50KAotICAgICAg
IiRuYW1lJCA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJyRuYW1l
JCcsICIKLSAgICAgICIoX21lc3NhZ2UuTWVzc2FnZSwpLCBkaWN0KFxuIiwKLSAgICAgICJuYW1l
IiwgbWVzc2FnZV9kZXNjcmlwdG9yLm5hbWUoKSk7Ci0gIHByaW50ZXJfLT5JbmRlbnQoKTsKLQot
ICBQcmludE5lc3RlZE1lc3NhZ2VzKG1lc3NhZ2VfZGVzY3JpcHRvciwgcXVhbGlmaWVkX25hbWUg
KyAiLiIsIHRvX3JlZ2lzdGVyKTsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiBtOwotICBtWyJkZXNj
cmlwdG9yX2tleSJdID0ga0Rlc2NyaXB0b3JLZXk7Ci0gIG1bImRlc2NyaXB0b3JfbmFtZSJdID0g
TW9kdWxlTGV2ZWxEZXNjcmlwdG9yTmFtZShtZXNzYWdlX2Rlc2NyaXB0b3IpOwotICBwcmludGVy
Xy0+UHJpbnQobSwgIiRkZXNjcmlwdG9yX2tleSQgPSAkZGVzY3JpcHRvcl9uYW1lJCxcbiIpOwot
ICBwcmludGVyXy0+UHJpbnQoIl9fbW9kdWxlX18gPSAnJG1vZHVsZV9uYW1lJCdcbiIsCi0gICAg
ICAgICAgICAgICAgICAibW9kdWxlX25hbWUiLCBNb2R1bGVOYW1lKGZpbGVfLT5uYW1lKCkpKTsK
LSAgcHJpbnRlcl8tPlByaW50KCIjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29w
ZTokZnVsbF9uYW1lJClcbiIsCi0gICAgICAgICAgICAgICAgICAiZnVsbF9uYW1lIiwgbWVzc2Fn
ZV9kZXNjcmlwdG9yLmZ1bGxfbmFtZSgpKTsKLSAgcHJpbnRlcl8tPlByaW50KCIpKVxuIik7Ci0g
IHByaW50ZXJfLT5PdXRkZW50KCk7Ci19Ci0KLS8vIFByaW50cyBhbGwgbmVzdGVkIG1lc3NhZ2Vz
IHdpdGhpbiB8Y29udGFpbmluZ19kZXNjcmlwdG9yfC4KLS8vIE11dHVhbGx5IHJlY3Vyc2l2ZSB3
aXRoIFByaW50TWVzc2FnZSgpLgotdm9pZCBHZW5lcmF0b3I6OlByaW50TmVzdGVkTWVzc2FnZXMo
Y29uc3QgRGVzY3JpcHRvciYgY29udGFpbmluZ19kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBwcmVmaXgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8c3RyaW5nPiogdG9fcmVnaXN0ZXIpIGNvbnN0
IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250YWluaW5nX2Rlc2NyaXB0b3IubmVzdGVkX3R5
cGVfY291bnQoKTsgKytpKSB7Ci0gICAgcHJpbnRlcl8tPlByaW50KCJcbiIpOwotICAgIFByaW50
TWVzc2FnZSgqY29udGFpbmluZ19kZXNjcmlwdG9yLm5lc3RlZF90eXBlKGkpLCBwcmVmaXgsIHRv
X3JlZ2lzdGVyKTsKLSAgICBwcmludGVyXy0+UHJpbnQoIixcbiIpOwotICB9Ci19Ci0KLS8vIFJl
Y3Vyc2l2ZWx5IGZpeGVzIGZvcmVpZ24gZmllbGRzIGluIGFsbCBuZXN0ZWQgdHlwZXMgaW4gfGRl
c2NyaXB0b3J8LCB0aGVuCi0vLyBzZXRzIHRoZSBtZXNzYWdlX3R5cGUgYW5kIGVudW1fdHlwZSBv
ZiBhbGwgbWVzc2FnZSBhbmQgZW51bSBmaWVsZHMgdG8gcG9pbnQKLS8vIHRvIHRoZWlyIHJlc3Bl
Y3RpdmUgZGVzY3JpcHRvcnMuCi0vLyBBcmdzOgotLy8gICBkZXNjcmlwdG9yOiBkZXNjcmlwdG9y
IHRvIHByaW50IGZpZWxkcyBmb3IuCi0vLyAgIGNvbnRhaW5pbmdfZGVzY3JpcHRvcjogaWYgZGVz
Y3JpcHRvciBpcyBhIG5lc3RlZCB0eXBlLCB0aGlzIGlzIGl0cwotLy8gICAgICAgY29udGFpbmlu
ZyB0eXBlLCBvciBOVUxMIGlmIHRoaXMgaXMgYSByb290L3RvcC1sZXZlbCB0eXBlLgotdm9pZCBH
ZW5lcmF0b3I6OkZpeEZvcmVpZ25GaWVsZHNJbkRlc2NyaXB0b3IoCi0gICAgY29uc3QgRGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBjb250YWluaW5nX2Rlc2Ny
aXB0b3IpIGNvbnN0IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLm5lc3RlZF90
eXBlX2NvdW50KCk7ICsraSkgewotICAgIEZpeEZvcmVpZ25GaWVsZHNJbkRlc2NyaXB0b3IoKmRl
c2NyaXB0b3IubmVzdGVkX3R5cGUoaSksICZkZXNjcmlwdG9yKTsKLSAgfQotCi0gIGZvciAoaW50
IGkgPSAwOyBpIDwgZGVzY3JpcHRvci5maWVsZF9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3ImIGZpZWxkX2Rlc2NyaXB0b3IgPSAqZGVzY3JpcHRvci5maWVsZChpKTsK
LSAgICBGaXhGb3JlaWduRmllbGRzSW5GaWVsZCgmZGVzY3JpcHRvciwgZmllbGRfZGVzY3JpcHRv
ciwgImZpZWxkc19ieV9uYW1lIik7Ci0gIH0KLQotICBGaXhDb250YWluaW5nVHlwZUluRGVzY3Jp
cHRvcihkZXNjcmlwdG9yLCBjb250YWluaW5nX2Rlc2NyaXB0b3IpOwotICBmb3IgKGludCBpID0g
MDsgaSA8IGRlc2NyaXB0b3IuZW51bV90eXBlX2NvdW50KCk7ICsraSkgewotICAgIGNvbnN0IEVu
dW1EZXNjcmlwdG9yJiBlbnVtX2Rlc2NyaXB0b3IgPSAqZGVzY3JpcHRvci5lbnVtX3R5cGUoaSk7
Ci0gICAgRml4Q29udGFpbmluZ1R5cGVJbkRlc2NyaXB0b3IoZW51bV9kZXNjcmlwdG9yLCAmZGVz
Y3JpcHRvcik7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLm9uZW9mX2Rl
Y2xfY291bnQoKTsgKytpKSB7Ci0gICAgbWFwPHN0cmluZywgc3RyaW5nPiBtOwotICAgIGNvbnN0
IE9uZW9mRGVzY3JpcHRvciogb25lb2YgPSBkZXNjcmlwdG9yLm9uZW9mX2RlY2woaSk7Ci0gICAg
bVsiZGVzY3JpcHRvcl9uYW1lIl0gPSBNb2R1bGVMZXZlbERlc2NyaXB0b3JOYW1lKGRlc2NyaXB0
b3IpOwotICAgIG1bIm9uZW9mX25hbWUiXSA9IG9uZW9mLT5uYW1lKCk7Ci0gICAgZm9yIChpbnQg
aiA9IDA7IGogPCBvbmVvZi0+ZmllbGRfY291bnQoKTsgKytqKSB7Ci0gICAgICBtWyJmaWVsZF9u
YW1lIl0gPSBvbmVvZi0+ZmllbGQoaiktPm5hbWUoKTsKLSAgICAgIHByaW50ZXJfLT5QcmludCgK
LSAgICAgICAgICBtLAotICAgICAgICAgICIkZGVzY3JpcHRvcl9uYW1lJC5vbmVvZnNfYnlfbmFt
ZVsnJG9uZW9mX25hbWUkJ10uZmllbGRzLmFwcGVuZChcbiIKLSAgICAgICAgICAiICAkZGVzY3Jp
cHRvcl9uYW1lJC5maWVsZHNfYnlfbmFtZVsnJGZpZWxkX25hbWUkJ10pXG4iKTsKLSAgICAgIHBy
aW50ZXJfLT5QcmludCgKLSAgICAgICAgICBtLAotICAgICAgICAgICIkZGVzY3JpcHRvcl9uYW1l
JC5maWVsZHNfYnlfbmFtZVsnJGZpZWxkX25hbWUkJ10uY29udGFpbmluZ19vbmVvZiA9ICIKLSAg
ICAgICAgICAiJGRlc2NyaXB0b3JfbmFtZSQub25lb2ZzX2J5X25hbWVbJyRvbmVvZl9uYW1lJCdd
XG4iKTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0b3I6OkFkZE1lc3NhZ2VUb0ZpbGVE
ZXNjcmlwdG9yKGNvbnN0IERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0IHsKLSAgbWFwPHN0
cmluZywgc3RyaW5nPiBtOwotICBtWyJkZXNjcmlwdG9yX25hbWUiXSA9IGtEZXNjcmlwdG9yS2V5
OwotICBtWyJtZXNzYWdlX25hbWUiXSA9IGRlc2NyaXB0b3IubmFtZSgpOwotICBtWyJtZXNzYWdl
X2Rlc2NyaXB0b3JfbmFtZSJdID0gTW9kdWxlTGV2ZWxEZXNjcmlwdG9yTmFtZShkZXNjcmlwdG9y
KTsKLSAgY29uc3QgY2hhciBmaWxlX2Rlc2NyaXB0b3JfdGVtcGxhdGVbXSA9Ci0gICAgICAiJGRl
c2NyaXB0b3JfbmFtZSQubWVzc2FnZV90eXBlc19ieV9uYW1lWyckbWVzc2FnZV9uYW1lJCddID0g
IgotICAgICAgIiRtZXNzYWdlX2Rlc2NyaXB0b3JfbmFtZSRcbiI7Ci0gIHByaW50ZXJfLT5Qcmlu
dChtLCBmaWxlX2Rlc2NyaXB0b3JfdGVtcGxhdGUpOwotfQotCi12b2lkIEdlbmVyYXRvcjo6QWRk
RW51bVRvRmlsZURlc2NyaXB0b3IoCi0gICAgY29uc3QgRW51bURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IpIGNvbnN0IHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiBtOwotICBtWyJkZXNjcmlwdG9yX25h
bWUiXSA9IGtEZXNjcmlwdG9yS2V5OwotICBtWyJlbnVtX25hbWUiXSA9IGRlc2NyaXB0b3IubmFt
ZSgpOwotICBtWyJlbnVtX2Rlc2NyaXB0b3JfbmFtZSJdID0gTW9kdWxlTGV2ZWxEZXNjcmlwdG9y
TmFtZShkZXNjcmlwdG9yKTsKLSAgY29uc3QgY2hhciBmaWxlX2Rlc2NyaXB0b3JfdGVtcGxhdGVb
XSA9Ci0gICAgICAiJGRlc2NyaXB0b3JfbmFtZSQuZW51bV90eXBlc19ieV9uYW1lWyckZW51bV9u
YW1lJCddID0gIgotICAgICAgIiRlbnVtX2Rlc2NyaXB0b3JfbmFtZSRcbiI7Ci0gIHByaW50ZXJf
LT5QcmludChtLCBmaWxlX2Rlc2NyaXB0b3JfdGVtcGxhdGUpOwotfQotCi12b2lkIEdlbmVyYXRv
cjo6QWRkRXh0ZW5zaW9uVG9GaWxlRGVzY3JpcHRvcigKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpIGNvbnN0IHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiBtOwotICBtWyJk
ZXNjcmlwdG9yX25hbWUiXSA9IGtEZXNjcmlwdG9yS2V5OwotICBtWyJmaWVsZF9uYW1lIl0gPSBk
ZXNjcmlwdG9yLm5hbWUoKTsKLSAgY29uc3QgY2hhciBmaWxlX2Rlc2NyaXB0b3JfdGVtcGxhdGVb
XSA9Ci0gICAgICAiJGRlc2NyaXB0b3JfbmFtZSQuZXh0ZW5zaW9uc19ieV9uYW1lWyckZmllbGRf
bmFtZSQnXSA9ICIKLSAgICAgICIkZmllbGRfbmFtZSRcbiI7Ci0gIHByaW50ZXJfLT5QcmludCht
LCBmaWxlX2Rlc2NyaXB0b3JfdGVtcGxhdGUpOwotfQotCi0vLyBTZXRzIGFueSBuZWNlc3Nhcnkg
bWVzc2FnZV90eXBlIGFuZCBlbnVtX3R5cGUgYXR0cmlidXRlcwotLy8gZm9yIHRoZSBQeXRob24g
dmVyc2lvbiBvZiB8ZmllbGR8LgotLy8KLS8vIGNvbnRhaW5pbmdfdHlwZSBtYXkgYmUgTlVMTCwg
aW4gd2hpY2ggY2FzZSB0aGlzIGlzIGEgbW9kdWxlLWxldmVsIGZpZWxkLgotLy8KLS8vIHB5dGhv
bl9kaWN0X25hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIFB5dGhvbiBkaWN0IHdoZXJlIHdlIHNob3Vs
ZAotLy8gbG9vayB0aGUgZmllbGQgdXAgaW4gdGhlIGNvbnRhaW5pbmcgdHlwZS4gIChlLmcuLCBm
aWVsZHNfYnlfbmFtZQotLy8gb3IgZXh0ZW5zaW9uc19ieV9uYW1lKS4gIFdlIGlnbm9yZSBweXRo
b25fZGljdF9uYW1lIGlmIGNvbnRhaW5pbmdfdHlwZQotLy8gaXMgTlVMTC4KLXZvaWQgR2VuZXJh
dG9yOjpGaXhGb3JlaWduRmllbGRzSW5GaWVsZChjb25zdCBEZXNjcmlwdG9yKiBjb250YWluaW5n
X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yJiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdHJpbmcmIHB5dGhvbl9kaWN0X25hbWUpIGNvbnN0IHsKLSAgY29uc3Qgc3Ry
aW5nIGZpZWxkX3JlZmVyZW5jaW5nX2V4cHJlc3Npb24gPSBGaWVsZFJlZmVyZW5jaW5nRXhwcmVz
c2lvbigKLSAgICAgIGNvbnRhaW5pbmdfdHlwZSwgZmllbGQsIHB5dGhvbl9kaWN0X25hbWUpOwot
ICBtYXA8c3RyaW5nLCBzdHJpbmc+IG07Ci0gIG1bImZpZWxkX3JlZiJdID0gZmllbGRfcmVmZXJl
bmNpbmdfZXhwcmVzc2lvbjsKLSAgY29uc3QgRGVzY3JpcHRvciogZm9yZWlnbl9tZXNzYWdlX3R5
cGUgPSBmaWVsZC5tZXNzYWdlX3R5cGUoKTsKLSAgaWYgKGZvcmVpZ25fbWVzc2FnZV90eXBlKSB7
Ci0gICAgbVsiZm9yZWlnbl90eXBlIl0gPSBNb2R1bGVMZXZlbERlc2NyaXB0b3JOYW1lKCpmb3Jl
aWduX21lc3NhZ2VfdHlwZSk7Ci0gICAgcHJpbnRlcl8tPlByaW50KG0sICIkZmllbGRfcmVmJC5t
ZXNzYWdlX3R5cGUgPSAkZm9yZWlnbl90eXBlJFxuIik7Ci0gIH0KLSAgY29uc3QgRW51bURlc2Ny
aXB0b3IqIGVudW1fdHlwZSA9IGZpZWxkLmVudW1fdHlwZSgpOwotICBpZiAoZW51bV90eXBlKSB7
Ci0gICAgbVsiZW51bV90eXBlIl0gPSBNb2R1bGVMZXZlbERlc2NyaXB0b3JOYW1lKCplbnVtX3R5
cGUpOwotICAgIHByaW50ZXJfLT5QcmludChtLCAiJGZpZWxkX3JlZiQuZW51bV90eXBlID0gJGVu
dW1fdHlwZSRcbiIpOwotICB9Ci19Ci0KLS8vIFJldHVybnMgdGhlIG1vZHVsZS1sZXZlbCBleHBy
ZXNzaW9uIGZvciB0aGUgZ2l2ZW4gRmllbGREZXNjcmlwdG9yLgotLy8gT25seSB3b3JrcyBmb3Ig
ZmllbGRzIGluIHRoZSAucHJvdG8gZmlsZSB0aGlzIEdlbmVyYXRvciBpcyBnZW5lcmF0aW5nIGZv
ci4KLS8vCi0vLyBjb250YWluaW5nX3R5cGUgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgdGhp
cyBpcyBhIG1vZHVsZS1sZXZlbCBmaWVsZC4KLS8vCi0vLyBweXRob25fZGljdF9uYW1lIGlzIHRo
ZSBuYW1lIG9mIHRoZSBQeXRob24gZGljdCB3aGVyZSB3ZSBzaG91bGQKLS8vIGxvb2sgdGhlIGZp
ZWxkIHVwIGluIHRoZSBjb250YWluaW5nIHR5cGUuICAoZS5nLiwgZmllbGRzX2J5X25hbWUKLS8v
IG9yIGV4dGVuc2lvbnNfYnlfbmFtZSkuICBXZSBpZ25vcmUgcHl0aG9uX2RpY3RfbmFtZSBpZiBj
b250YWluaW5nX3R5cGUKLS8vIGlzIE5VTEwuCi1zdHJpbmcgR2VuZXJhdG9yOjpGaWVsZFJlZmVy
ZW5jaW5nRXhwcmVzc2lvbigKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBjb250YWluaW5nX3R5cGUs
Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yJiBmaWVsZCwKLSAgICBjb25zdCBzdHJpbmcmIHB5
dGhvbl9kaWN0X25hbWUpIGNvbnN0IHsKLSAgLy8gV2Ugc2hvdWxkIG9ubHkgZXZlciBiZSBsb29r
aW5nIHVwIGZpZWxkcyBpbiB0aGUgY3VycmVudCBmaWxlLgotICAvLyBUaGUgb25seSB0aGluZ3Mg
d2UgcmVmZXIgdG8gZnJvbSBvdGhlciBmaWxlcyBhcmUgbWVzc2FnZSBkZXNjcmlwdG9ycy4KLSAg
R09PR0xFX0NIRUNLX0VRKGZpZWxkLmZpbGUoKSwgZmlsZV8pIDw8IGZpZWxkLmZpbGUoKS0+bmFt
ZSgpIDw8ICIgdnMuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlsZV8t
Pm5hbWUoKTsKLSAgaWYgKCFjb250YWluaW5nX3R5cGUpIHsKLSAgICByZXR1cm4gZmllbGQubmFt
ZSgpOwotICB9Ci0gIHJldHVybiBzdHJpbmdzOjpTdWJzdGl0dXRlKAotICAgICAgIiQwLiQxWyck
MiddIiwKLSAgICAgIE1vZHVsZUxldmVsRGVzY3JpcHRvck5hbWUoKmNvbnRhaW5pbmdfdHlwZSks
Ci0gICAgICBweXRob25fZGljdF9uYW1lLCBmaWVsZC5uYW1lKCkpOwotfQotCi0vLyBQcmludHMg
Y29udGFpbmluZ190eXBlIGZvciBuZXN0ZWQgZGVzY3JpcHRvcnMgb3IgZW51bSBkZXNjcmlwdG9y
cy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBEZXNjcmlwdG9yVD4KLXZvaWQgR2VuZXJhdG9yOjpGaXhD
b250YWluaW5nVHlwZUluRGVzY3JpcHRvcigKLSAgICBjb25zdCBEZXNjcmlwdG9yVCYgZGVzY3Jp
cHRvciwKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBjb250YWluaW5nX2Rlc2NyaXB0b3IpIGNvbnN0
IHsKLSAgaWYgKGNvbnRhaW5pbmdfZGVzY3JpcHRvciAhPSBOVUxMKSB7Ci0gICAgY29uc3Qgc3Ry
aW5nIG5lc3RlZF9uYW1lID0gTW9kdWxlTGV2ZWxEZXNjcmlwdG9yTmFtZShkZXNjcmlwdG9yKTsK
LSAgICBjb25zdCBzdHJpbmcgcGFyZW50X25hbWUgPSBNb2R1bGVMZXZlbERlc2NyaXB0b3JOYW1l
KAotICAgICAgICAqY29udGFpbmluZ19kZXNjcmlwdG9yKTsKLSAgICBwcmludGVyXy0+UHJpbnQo
Ci0gICAgICAgICIkbmVzdGVkX25hbWUkLmNvbnRhaW5pbmdfdHlwZSA9ICRwYXJlbnRfbmFtZSRc
biIsCi0gICAgICAgICJuZXN0ZWRfbmFtZSIsIG5lc3RlZF9uYW1lLAotICAgICAgICAicGFyZW50
X25hbWUiLCBwYXJlbnRfbmFtZSk7Ci0gIH0KLX0KLQotLy8gUHJpbnRzIHN0YXRlbWVudHMgc2V0
dGluZyB0aGUgbWVzc2FnZV90eXBlIGFuZCBlbnVtX3R5cGUgZmllbGRzIGluIHRoZQotLy8gUHl0
aG9uIGRlc2NyaXB0b3Igb2JqZWN0cyB3ZSd2ZSBhbHJlYWR5IG91dHB1dCBpbiB0aHMgZmlsZS4g
IFdlIG11c3QKLS8vIGRvIHRoaXMgaW4gYSBzZXBhcmF0ZSBzdGVwIGR1ZSB0byBjaXJjdWxhciBy
ZWZlcmVuY2VzIChvdGhlcndpc2UsIHdlJ2QKLS8vIGp1c3Qgc2V0IGV2ZXJ5dGhpbmcgaW4gdGhl
IGluaXRpYWwgYXNzaWdubWVudCBzdGF0ZW1lbnRzKS4KLXZvaWQgR2VuZXJhdG9yOjpGaXhGb3Jl
aWduRmllbGRzSW5EZXNjcmlwdG9ycygpIGNvbnN0IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
aWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCk7ICsraSkgewotICAgIEZpeEZvcmVpZ25GaWVsZHNJ
bkRlc2NyaXB0b3IoKmZpbGVfLT5tZXNzYWdlX3R5cGUoaSksIE5VTEwpOwotICB9Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3VudCgpOyArK2kpIHsKLSAgICBB
ZGRNZXNzYWdlVG9GaWxlRGVzY3JpcHRvcigqZmlsZV8tPm1lc3NhZ2VfdHlwZShpKSk7Ci0gIH0K
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+ZW51bV90eXBlX2NvdW50KCk7ICsraSkgewot
ICAgIEFkZEVudW1Ub0ZpbGVEZXNjcmlwdG9yKCpmaWxlXy0+ZW51bV90eXBlKGkpKTsKLSAgfQot
ICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfLT5leHRlbnNpb25fY291bnQoKTsgKytpKSB7Ci0g
ICAgQWRkRXh0ZW5zaW9uVG9GaWxlRGVzY3JpcHRvcigqZmlsZV8tPmV4dGVuc2lvbihpKSk7Ci0g
IH0KLSAgcHJpbnRlcl8tPlByaW50KCJcbiIpOwotfQotCi0vLyBXZSBuZWVkIHRvIG5vdCBvbmx5
IHNldCBhbnkgbmVjZXNzYXJ5IG1lc3NhZ2VfdHlwZSBmaWVsZHMsIGJ1dAotLy8gYWxzbyBuZWVk
IHRvIGNhbGwgUmVnaXN0ZXJFeHRlbnNpb24oKSBvbiBlYWNoIG1lc3NhZ2Ugd2UncmUKLS8vIGV4
dGVuZGluZy4KLXZvaWQgR2VuZXJhdG9yOjpGaXhGb3JlaWduRmllbGRzSW5FeHRlbnNpb25zKCkg
Y29uc3QgewotICAvLyBUb3AtbGV2ZWwgZXh0ZW5zaW9ucy4KLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmaWxlXy0+ZXh0ZW5zaW9uX2NvdW50KCk7ICsraSkgewotICAgIEZpeEZvcmVpZ25GaWVsZHNJ
bkV4dGVuc2lvbigqZmlsZV8tPmV4dGVuc2lvbihpKSk7Ci0gIH0KLSAgLy8gTmVzdGVkIGV4dGVu
c2lvbnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3VudCgp
OyArK2kpIHsKLSAgICBGaXhGb3JlaWduRmllbGRzSW5OZXN0ZWRFeHRlbnNpb25zKCpmaWxlXy0+
bWVzc2FnZV90eXBlKGkpKTsKLSAgfQotICBwcmludGVyXy0+UHJpbnQoIlxuIik7Ci19Ci0KLXZv
aWQgR2VuZXJhdG9yOjpGaXhGb3JlaWduRmllbGRzSW5FeHRlbnNpb24oCi0gICAgY29uc3QgRmll
bGREZXNjcmlwdG9yJiBleHRlbnNpb25fZmllbGQpIGNvbnN0IHsKLSAgR09PR0xFX0NIRUNLKGV4
dGVuc2lvbl9maWVsZC5pc19leHRlbnNpb24oKSk7Ci0gIC8vIGV4dGVuc2lvbl9zY29wZSgpIHdp
bGwgYmUgTlVMTCBmb3IgdG9wLWxldmVsIGV4dGVuc2lvbnMsIHdoaWNoIGlzCi0gIC8vIGV4YWN0
bHkgd2hhdCBGaXhGb3JlaWduRmllbGRzSW5GaWVsZCgpIHdhbnRzLgotICBGaXhGb3JlaWduRmll
bGRzSW5GaWVsZChleHRlbnNpb25fZmllbGQuZXh0ZW5zaW9uX3Njb3BlKCksIGV4dGVuc2lvbl9m
aWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbnNfYnlfbmFtZSIpOwot
Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gbTsKLSAgLy8gQ29uZnVzaW5nbHksIGZvciBGaWVsZERl
c2NyaXB0b3JzIHRoYXQgaGFwcGVuIHRvIGJlIGV4dGVuc2lvbnMsCi0gIC8vIGNvbnRhaW5pbmdf
dHlwZSgpIG1lYW5zICJleHRlbmRlZCB0eXBlLiIKLSAgLy8gT24gdGhlIG90aGVyIGhhbmQsIGV4
dGVuc2lvbl9zY29wZSgpIHdpbGwgZ2l2ZSB1cyB3aGF0IHdlIG5vcm1hbGx5Ci0gIC8vIG1lYW4g
YnkgY29udGFpbmluZ190eXBlKCkuCi0gIG1bImV4dGVuZGVkX21lc3NhZ2VfY2xhc3MiXSA9IE1v
ZHVsZUxldmVsTWVzc2FnZU5hbWUoCi0gICAgICAqZXh0ZW5zaW9uX2ZpZWxkLmNvbnRhaW5pbmdf
dHlwZSgpKTsKLSAgbVsiZmllbGQiXSA9IEZpZWxkUmVmZXJlbmNpbmdFeHByZXNzaW9uKGV4dGVu
c2lvbl9maWVsZC5leHRlbnNpb25fc2NvcGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dGVuc2lvbl9maWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJleHRlbnNpb25zX2J5X25hbWUiKTsKLSAgcHJpbnRlcl8tPlBy
aW50KG0sICIkZXh0ZW5kZWRfbWVzc2FnZV9jbGFzcyQuUmVnaXN0ZXJFeHRlbnNpb24oJGZpZWxk
JClcbiIpOwotfQotCi12b2lkIEdlbmVyYXRvcjo6Rml4Rm9yZWlnbkZpZWxkc0luTmVzdGVkRXh0
ZW5zaW9ucygKLSAgICBjb25zdCBEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdCB7Ci0gIC8v
IFJlY3Vyc2l2ZWx5IGZpeCB1cCBleHRlbnNpb25zIGluIGFsbCBuZXN0ZWQgdHlwZXMuCi0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci5uZXN0ZWRfdHlwZV9jb3VudCgpOyArK2kpIHsK
LSAgICBGaXhGb3JlaWduRmllbGRzSW5OZXN0ZWRFeHRlbnNpb25zKCpkZXNjcmlwdG9yLm5lc3Rl
ZF90eXBlKGkpKTsKLSAgfQotICAvLyBGaXggdXAgZXh0ZW5zaW9ucyBkaXJlY3RseSBjb250YWlu
ZWQgd2l0aGluIHRoaXMgdHlwZS4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLmV4
dGVuc2lvbl9jb3VudCgpOyArK2kpIHsKLSAgICBGaXhGb3JlaWduRmllbGRzSW5FeHRlbnNpb24o
KmRlc2NyaXB0b3IuZXh0ZW5zaW9uKGkpKTsKLSAgfQotfQotCi0vLyBSZXR1cm5zIGEgUHl0aG9u
IGV4cHJlc3Npb24gdGhhdCBpbnN0YW50aWF0ZXMgYSBQeXRob24gRW51bVZhbHVlRGVzY3JpcHRv
cgotLy8gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gQysrIGRlc2NyaXB0b3IuCi12b2lkIEdlbmVyYXRv
cjo6UHJpbnRFbnVtVmFsdWVEZXNjcmlwdG9yKAotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpIGNvbnN0IHsKLSAgLy8gVE9ETyhyb2JpbnNvbik6IEZpeCB1cCBFbnVt
VmFsdWVEZXNjcmlwdG9yICJ0eXBlIiBmaWVsZHMuCi0gIC8vIE1vcmUgY2lyY3VsYXIgcmVmZXJl
bmNlcy4gIDo6c2lnaDo6Ci0gIHN0cmluZyBvcHRpb25zX3N0cmluZzsKLSAgZGVzY3JpcHRvci5v
cHRpb25zKCkuU2VyaWFsaXplVG9TdHJpbmcoJm9wdGlvbnNfc3RyaW5nKTsKLSAgbWFwPHN0cmlu
Zywgc3RyaW5nPiBtOwotICBtWyJuYW1lIl0gPSBkZXNjcmlwdG9yLm5hbWUoKTsKLSAgbVsiaW5k
ZXgiXSA9IFNpbXBsZUl0b2EoZGVzY3JpcHRvci5pbmRleCgpKTsKLSAgbVsibnVtYmVyIl0gPSBT
aW1wbGVJdG9hKGRlc2NyaXB0b3IubnVtYmVyKCkpOwotICBtWyJvcHRpb25zIl0gPSBPcHRpb25z
VmFsdWUoIkVudW1WYWx1ZU9wdGlvbnMiLCBvcHRpb25zX3N0cmluZyk7Ci0gIHByaW50ZXJfLT5Q
cmludCgKLSAgICAgIG0sCi0gICAgICAiX2Rlc2NyaXB0b3IuRW51bVZhbHVlRGVzY3JpcHRvcihc
biIKLSAgICAgICIgIG5hbWU9JyRuYW1lJCcsIGluZGV4PSRpbmRleCQsIG51bWJlcj0kbnVtYmVy
JCxcbiIKLSAgICAgICIgIG9wdGlvbnM9JG9wdGlvbnMkLFxuIgotICAgICAgIiAgdHlwZT1Ob25l
KSIpOwotfQotCi0vLyBSZXR1cm5zIGEgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjYWxscyBkZXNj
cmlwdG9yLl9QYXJzZU9wdGlvbnMgdXNpbmcKLS8vIHRoZSBnaXZlbiBkZXNjcmlwdG9yIGNsYXNz
IG5hbWUgYW5kIHNlcmlhbGl6ZWQgb3B0aW9ucyBwcm90b2J1ZiBzdHJpbmcuCi1zdHJpbmcgR2Vu
ZXJhdG9yOjpPcHRpb25zVmFsdWUoCi0gICAgY29uc3Qgc3RyaW5nJiBjbGFzc19uYW1lLCBjb25z
dCBzdHJpbmcmIHNlcmlhbGl6ZWRfb3B0aW9ucykgY29uc3QgewotICBpZiAoc2VyaWFsaXplZF9v
cHRpb25zLmxlbmd0aCgpID09IDAgfHwgR2VuZXJhdGluZ0Rlc2NyaXB0b3JQcm90bygpKSB7Ci0g
ICAgcmV0dXJuICJOb25lIjsKLSAgfSBlbHNlIHsKLSAgICBzdHJpbmcgZnVsbF9jbGFzc19uYW1l
ID0gImRlc2NyaXB0b3JfcGIyLiIgKyBjbGFzc19uYW1lOwotLy8jIyFQWTI1ICAgIHJldHVybiAi
X2Rlc2NyaXB0b3IuX1BhcnNlT3B0aW9ucygiICsgZnVsbF9jbGFzc19uYW1lICsgIigpLCBiJyIK
LS8vIyMhUFkyNSAgICAgICAgKyBDRXNjYXBlKHNlcmlhbGl6ZWRfb3B0aW9ucykrICInKSI7Ci0g
ICAgcmV0dXJuICJfZGVzY3JpcHRvci5fUGFyc2VPcHRpb25zKCIgKyBmdWxsX2NsYXNzX25hbWUg
KyAiKCksIF9iKCciICAvLyMjUFkyNQotICAgICAgICArIENFc2NhcGUoc2VyaWFsaXplZF9vcHRp
b25zKSsgIicpKSI7ICAvLyMjUFkyNQotICB9Ci19Ci0KLS8vIFByaW50cyBhbiBleHByZXNzaW9u
IGZvciBhIFB5dGhvbiBGaWVsZERlc2NyaXB0b3IgZm9yIHxmaWVsZHwuCi12b2lkIEdlbmVyYXRv
cjo6UHJpbnRGaWVsZERlc2NyaXB0b3IoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yJiBmaWVs
ZCwgYm9vbCBpc19leHRlbnNpb24pIGNvbnN0IHsKLSAgc3RyaW5nIG9wdGlvbnNfc3RyaW5nOwot
ICBmaWVsZC5vcHRpb25zKCkuU2VyaWFsaXplVG9TdHJpbmcoJm9wdGlvbnNfc3RyaW5nKTsKLSAg
bWFwPHN0cmluZywgc3RyaW5nPiBtOwotICBtWyJuYW1lIl0gPSBmaWVsZC5uYW1lKCk7Ci0gIG1b
ImZ1bGxfbmFtZSJdID0gZmllbGQuZnVsbF9uYW1lKCk7Ci0gIG1bImluZGV4Il0gPSBTaW1wbGVJ
dG9hKGZpZWxkLmluZGV4KCkpOwotICBtWyJudW1iZXIiXSA9IFNpbXBsZUl0b2EoZmllbGQubnVt
YmVyKCkpOwotICBtWyJ0eXBlIl0gPSBTaW1wbGVJdG9hKGZpZWxkLnR5cGUoKSk7Ci0gIG1bImNw
cF90eXBlIl0gPSBTaW1wbGVJdG9hKGZpZWxkLmNwcF90eXBlKCkpOwotICBtWyJsYWJlbCJdID0g
U2ltcGxlSXRvYShmaWVsZC5sYWJlbCgpKTsKLSAgbVsiaGFzX2RlZmF1bHRfdmFsdWUiXSA9IGZp
ZWxkLmhhc19kZWZhdWx0X3ZhbHVlKCkgPyAiVHJ1ZSIgOiAiRmFsc2UiOwotICBtWyJkZWZhdWx0
X3ZhbHVlIl0gPSBTdHJpbmdpZnlEZWZhdWx0VmFsdWUoZmllbGQpOwotICBtWyJpc19leHRlbnNp
b24iXSA9IGlzX2V4dGVuc2lvbiA/ICJUcnVlIiA6ICJGYWxzZSI7Ci0gIG1bIm9wdGlvbnMiXSA9
IE9wdGlvbnNWYWx1ZSgiRmllbGRPcHRpb25zIiwgb3B0aW9uc19zdHJpbmcpOwotICAvLyBXZSBh
bHdheXMgc2V0IG1lc3NhZ2VfdHlwZSBhbmQgZW51bV90eXBlIHRvIE5vbmUgYXQgdGhpcyBwb2lu
dCwgYW5kIHRoZW4KLSAgLy8gdGhlc2UgZmllbGRzIGluIGNvcnJlY3RseSBhZnRlciBhbGwgcmVm
ZXJlbmNlZCBkZXNjcmlwdG9ycyBoYXZlIGJlZW4KLSAgLy8gZGVmaW5lZCBhbmQvb3IgaW1wb3J0
ZWQgKHNlZSBGaXhGb3JlaWduRmllbGRzSW5EZXNjcmlwdG9ycygpKS4KLSAgY29uc3QgY2hhciBm
aWVsZF9kZXNjcmlwdG9yX2RlY2xbXSA9Ci0gICAgIl9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRv
cihcbiIKLSAgICAiICBuYW1lPSckbmFtZSQnLCBmdWxsX25hbWU9JyRmdWxsX25hbWUkJywgaW5k
ZXg9JGluZGV4JCxcbiIKLSAgICAiICBudW1iZXI9JG51bWJlciQsIHR5cGU9JHR5cGUkLCBjcHBf
dHlwZT0kY3BwX3R5cGUkLCBsYWJlbD0kbGFiZWwkLFxuIgotICAgICIgIGhhc19kZWZhdWx0X3Zh
bHVlPSRoYXNfZGVmYXVsdF92YWx1ZSQsIGRlZmF1bHRfdmFsdWU9JGRlZmF1bHRfdmFsdWUkLFxu
IgotICAgICIgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190
eXBlPU5vbmUsXG4iCi0gICAgIiAgaXNfZXh0ZW5zaW9uPSRpc19leHRlbnNpb24kLCBleHRlbnNp
b25fc2NvcGU9Tm9uZSxcbiIKLSAgICAiICBvcHRpb25zPSRvcHRpb25zJCkiOwotICBwcmludGVy
Xy0+UHJpbnQobSwgZmllbGRfZGVzY3JpcHRvcl9kZWNsKTsKLX0KLQotLy8gSGVscGVyIGZvciBQ
cmludHtGaWVsZHMsRXh0ZW5zaW9uc31JbkRlc2NyaXB0b3IoKS4KLXZvaWQgR2VuZXJhdG9yOjpQ
cmludEZpZWxkRGVzY3JpcHRvcnNJbkRlc2NyaXB0b3IoCi0gICAgY29uc3QgRGVzY3JpcHRvciYg
bWVzc2FnZV9kZXNjcmlwdG9yLAotICAgIGJvb2wgaXNfZXh0ZW5zaW9uLAotICAgIGNvbnN0IHN0
cmluZyYgbGlzdF92YXJpYWJsZV9uYW1lLAotICAgIGludCAoRGVzY3JpcHRvcjo6KkNvdW50Rm4p
KCkgY29uc3QsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiAoRGVzY3JpcHRvcjo6KkdldHRl
ckZuKShpbnQpIGNvbnN0KSBjb25zdCB7Ci0gIHByaW50ZXJfLT5QcmludCgiJGxpc3QkPVtcbiIs
ICJsaXN0IiwgbGlzdF92YXJpYWJsZV9uYW1lKTsKLSAgcHJpbnRlcl8tPkluZGVudCgpOwotICBm
b3IgKGludCBpID0gMDsgaSA8IChtZXNzYWdlX2Rlc2NyaXB0b3IuKkNvdW50Rm4pKCk7ICsraSkg
ewotICAgIFByaW50RmllbGREZXNjcmlwdG9yKCoobWVzc2FnZV9kZXNjcmlwdG9yLipHZXR0ZXJG
bikoaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXh0ZW5zaW9uKTsKLSAgICBwcmlu
dGVyXy0+UHJpbnQoIixcbiIpOwotICB9Ci0gIHByaW50ZXJfLT5PdXRkZW50KCk7Ci0gIHByaW50
ZXJfLT5QcmludCgiXSxcbiIpOwotfQotCi0vLyBQcmludHMgYSBzdGF0ZW1lbnQgYXNzaWduaW5n
ICJmaWVsZHMiIHRvIGEgbGlzdCBvZiBQeXRob24gRmllbGREZXNjcmlwdG9ycywKLS8vIG9uZSBm
b3IgZWFjaCBmaWVsZCBwcmVzZW50IGluIG1lc3NhZ2VfZGVzY3JpcHRvci4KLXZvaWQgR2VuZXJh
dG9yOjpQcmludEZpZWxkc0luRGVzY3JpcHRvcigKLSAgICBjb25zdCBEZXNjcmlwdG9yJiBtZXNz
YWdlX2Rlc2NyaXB0b3IpIGNvbnN0IHsKLSAgY29uc3QgYm9vbCBpc19leHRlbnNpb24gPSBmYWxz
ZTsKLSAgUHJpbnRGaWVsZERlc2NyaXB0b3JzSW5EZXNjcmlwdG9yKAotICAgICAgbWVzc2FnZV9k
ZXNjcmlwdG9yLCBpc19leHRlbnNpb24sICJmaWVsZHMiLAotICAgICAgJkRlc2NyaXB0b3I6OmZp
ZWxkX2NvdW50LCAmRGVzY3JpcHRvcjo6ZmllbGQpOwotfQotCi0vLyBQcmludHMgYSBzdGF0ZW1l
bnQgYXNzaWduaW5nICJleHRlbnNpb25zIiB0byBhIGxpc3Qgb2YgUHl0aG9uCi0vLyBGaWVsZERl
c2NyaXB0b3JzLCBvbmUgZm9yIGVhY2ggZXh0ZW5zaW9uIHByZXNlbnQgaW4gbWVzc2FnZV9kZXNj
cmlwdG9yLgotdm9pZCBHZW5lcmF0b3I6OlByaW50RXh0ZW5zaW9uc0luRGVzY3JpcHRvcigKLSAg
ICBjb25zdCBEZXNjcmlwdG9yJiBtZXNzYWdlX2Rlc2NyaXB0b3IpIGNvbnN0IHsKLSAgY29uc3Qg
Ym9vbCBpc19leHRlbnNpb24gPSB0cnVlOwotICBQcmludEZpZWxkRGVzY3JpcHRvcnNJbkRlc2Ny
aXB0b3IoCi0gICAgICBtZXNzYWdlX2Rlc2NyaXB0b3IsIGlzX2V4dGVuc2lvbiwgImV4dGVuc2lv
bnMiLAotICAgICAgJkRlc2NyaXB0b3I6OmV4dGVuc2lvbl9jb3VudCwgJkRlc2NyaXB0b3I6OmV4
dGVuc2lvbik7Ci19Ci0KLWJvb2wgR2VuZXJhdG9yOjpHZW5lcmF0aW5nRGVzY3JpcHRvclByb3Rv
KCkgY29uc3QgewotICByZXR1cm4gZmlsZV8tPm5hbWUoKSA9PSAiZ29vZ2xlL3Byb3RvYnVmL2Rl
c2NyaXB0b3IucHJvdG8iOwotfQotCi0vLyBSZXR1cm5zIHRoZSB1bmlxdWUgUHl0aG9uIG1vZHVs
ZS1sZXZlbCBpZGVudGlmaWVyIGdpdmVuIHRvIGEgZGVzY3JpcHRvci4KLS8vIFRoaXMgbmFtZSBp
cyBtb2R1bGUtcXVhbGlmaWVkIGlmZiB0aGUgZ2l2ZW4gZGVzY3JpcHRvciBkZXNjcmliZXMgYW4K
LS8vIGVudGl0eSB0aGF0IGRvZXNuJ3QgY29tZSBmcm9tIHRoZSBjdXJyZW50IGZpbGUuCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgRGVzY3JpcHRvclQ+Ci1zdHJpbmcgR2VuZXJhdG9yOjpNb2R1bGVMZXZl
bERlc2NyaXB0b3JOYW1lKAotICAgIGNvbnN0IERlc2NyaXB0b3JUJiBkZXNjcmlwdG9yKSBjb25z
dCB7Ci0gIC8vIEZJWE1FKHJvYmluc29uKToKLSAgLy8gV2UgY3VycmVudGx5IGRvbid0IHdvcnJ5
IGFib3V0IGNvbGxpc2lvbnMgd2l0aCB1bmRlcnNjb3JlcyBpbiB0aGUgdHlwZQotICAvLyBuYW1l
cywgc28gdGhlc2Ugd291bGQgY29sbGlkZSBpbiBuYXN0eSB3YXlzIGlmIGZvdW5kIGluIHRoZSBz
YW1lIGZpbGU6Ci0gIC8vICAgT3V0ZXJQcm90by5Qcm90b0EuUHJvdG9CCi0gIC8vICAgT3V0ZXJQ
cm90b19Qcm90b0EuUHJvdG9CICAjIFVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwZXJpb2QuCi0gIC8v
IEFzIHdvdWxkIHRoZXNlOgotICAvLyAgIE91dGVyUHJvdG8uUHJvdG9BXy5Qcm90b0IKLSAgLy8g
ICBPdXRlclByb3RvLlByb3RvQS5fUHJvdG9CICAjIExlYWRpbmcgdnMuIHRyYWlsaW5nIHVuZGVy
c2NvcmUuCi0gIC8vIChDb250cml2ZWQsIGJ1dCBjZXJ0YWlubHkgcG9zc2libGUpLgotICAvLwot
ICAvLyBUaGUgQysrIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgZ3VhcmQgYWdhaW5zdCB0aGlzIGVp
dGhlci4gIExlYXZpbmcKLSAgLy8gaXQgZm9yIG5vdy4uLgotICBzdHJpbmcgbmFtZSA9IE5hbWVQ
cmVmaXhlZFdpdGhOZXN0ZWRUeXBlcyhkZXNjcmlwdG9yLCAiXyIpOwotICBVcHBlclN0cmluZygm
bmFtZSk7Ci0gIC8vIE1vZHVsZS1wcml2YXRlIGZvciBub3cuICBFYXN5IHRvIG1ha2UgcHVibGlj
IGxhdGVyOyBhbG1vc3QgaW1wb3NzaWJsZQotICAvLyB0byBtYWtlIHByaXZhdGUgbGF0ZXIuCi0g
IG5hbWUgPSAiXyIgKyBuYW1lOwotICAvLyBXZSBub3cgaGF2ZSB0aGUgbmFtZSByZWxhdGl2ZSB0
byBpdHMgb3duIG1vZHVsZS4gIEFsc28gcXVhbGlmeSB3aXRoCi0gIC8vIHRoZSBtb2R1bGUgbmFt
ZSBpZmYgdGhpcyBkZXNjcmlwdG9yIGlzIGZyb20gYSBkaWZmZXJlbnQgLnByb3RvIGZpbGUuCi0g
IGlmIChkZXNjcmlwdG9yLmZpbGUoKSAhPSBmaWxlXykgewotICAgIG5hbWUgPSBNb2R1bGVBbGlh
cyhkZXNjcmlwdG9yLmZpbGUoKS0+bmFtZSgpKSArICIuIiArIG5hbWU7Ci0gIH0KLSAgcmV0dXJu
IG5hbWU7Ci19Ci0KLS8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2UgY2xhc3MgaXRz
ZWxmLCBub3QgdGhlIGRlc2NyaXB0b3IuCi0vLyBMaWtlIE1vZHVsZUxldmVsRGVzY3JpcHRvck5h
bWUoKSwgbW9kdWxlLXF1YWxpZmllcyB0aGUgbmFtZSBpZmYKLS8vIHRoZSBnaXZlbiBkZXNjcmlw
dG9yIGRlc2NyaWJlcyBhbiBlbnRpdHkgdGhhdCBkb2Vzbid0IGNvbWUgZnJvbQotLy8gdGhlIGN1
cnJlbnQgZmlsZS4KLXN0cmluZyBHZW5lcmF0b3I6Ok1vZHVsZUxldmVsTWVzc2FnZU5hbWUoY29u
c3QgRGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QgewotICBzdHJpbmcgbmFtZSA9IE5hbWVQ
cmVmaXhlZFdpdGhOZXN0ZWRUeXBlcyhkZXNjcmlwdG9yLCAiLiIpOwotICBpZiAoZGVzY3JpcHRv
ci5maWxlKCkgIT0gZmlsZV8pIHsKLSAgICBuYW1lID0gTW9kdWxlQWxpYXMoZGVzY3JpcHRvci5m
aWxlKCktPm5hbWUoKSkgKyAiLiIgKyBuYW1lOwotICB9Ci0gIHJldHVybiBuYW1lOwotfQotCi0v
LyBSZXR1cm5zIHRoZSB1bmlxdWUgUHl0aG9uIG1vZHVsZS1sZXZlbCBpZGVudGlmaWVyIGdpdmVu
IHRvIGEgc2VydmljZQotLy8gZGVzY3JpcHRvci4KLXN0cmluZyBHZW5lcmF0b3I6Ok1vZHVsZUxl
dmVsU2VydmljZURlc2NyaXB0b3JOYW1lKAotICAgIGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKSBjb25zdCB7Ci0gIHN0cmluZyBuYW1lID0gZGVzY3JpcHRvci5uYW1lKCk7Ci0g
IFVwcGVyU3RyaW5nKCZuYW1lKTsKLSAgbmFtZSA9ICJfIiArIG5hbWU7Ci0gIGlmIChkZXNjcmlw
dG9yLmZpbGUoKSAhPSBmaWxlXykgewotICAgIG5hbWUgPSBNb2R1bGVBbGlhcyhkZXNjcmlwdG9y
LmZpbGUoKS0+bmFtZSgpKSArICIuIiArIG5hbWU7Ci0gIH0KLSAgcmV0dXJuIG5hbWU7Ci19Ci0K
LS8vIFByaW50cyBzdGFuZGFyZCBjb25zdHJ1Y3RvciBhcmd1bWVudHMgc2VyaWFsaXplZF9zdGFy
dCBhbmQgc2VyaWFsaXplZF9lbmQuCi0vLyBBcmdzOgotLy8gICBkZXNjcmlwdG9yOiBUaGUgY3Bw
IGRlc2NyaXB0b3IgdG8gaGF2ZSBhIHNlcmlhbGl6ZWQgcmVmZXJlbmNlLgotLy8gICBwcm90bzog
QSBwcm90bwotLy8gRXhhbXBsZSBwcmludGVyIG91dHB1dDoKLS8vIHNlcmlhbGl6ZWRfc3RhcnQ9
NDEsCi0vLyBzZXJpYWxpemVkX2VuZD00MywKLS8vCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRGVzY3Jp
cHRvclQsIHR5cGVuYW1lIERlc2NyaXB0b3JQcm90b1Q+Ci12b2lkIEdlbmVyYXRvcjo6UHJpbnRT
ZXJpYWxpemVkUGJJbnRlcnZhbCgKLSAgICBjb25zdCBEZXNjcmlwdG9yVCYgZGVzY3JpcHRvciwg
RGVzY3JpcHRvclByb3RvVCYgcHJvdG8pIGNvbnN0IHsKLSAgZGVzY3JpcHRvci5Db3B5VG8oJnBy
b3RvKTsKLSAgc3RyaW5nIHNwOwotICBwcm90by5TZXJpYWxpemVUb1N0cmluZygmc3ApOwotICBp
bnQgb2Zmc2V0ID0gZmlsZV9kZXNjcmlwdG9yX3NlcmlhbGl6ZWRfLmZpbmQoc3ApOwotICBHT09H
TEVfQ0hFQ0tfR0Uob2Zmc2V0LCAwKTsKLQotICBwcmludGVyXy0+UHJpbnQoInNlcmlhbGl6ZWRf
c3RhcnQ9JHNlcmlhbGl6ZWRfc3RhcnQkLFxuIgotICAgICAgICAgICAgICAgICAgInNlcmlhbGl6
ZWRfZW5kPSRzZXJpYWxpemVkX2VuZCQsXG4iLAotICAgICAgICAgICAgICAgICAgInNlcmlhbGl6
ZWRfc3RhcnQiLCBTaW1wbGVJdG9hKG9mZnNldCksCi0gICAgICAgICAgICAgICAgICAic2VyaWFs
aXplZF9lbmQiLCBTaW1wbGVJdG9hKG9mZnNldCArIHNwLnNpemUoKSkpOwotfQotCi1uYW1lc3Bh
Y2Ugewotdm9pZCBQcmludERlc2NyaXB0b3JPcHRpb25zRml4aW5nQ29kZShjb25zdCBzdHJpbmcm
IGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0cmluZyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW86OlByaW50ZXIqIHByaW50ZXIpIHsKLSAgLy8gVE9ETyh4aWFvZmVuZyk6IEkgaGF2ZSBhZGRl
ZCBhIG1ldGhvZCBfU2V0T3B0aW9ucygpIHRvIERlc2NyaXB0b3JCYXNlCi0gIC8vIGluIHByb3Rv
MiBweXRob24gcnVudGltZSBidXQgaXQgY291bGRuJ3QgYmUgdXNlZCBoZXJlIGJlY2F1c2UgYXBw
ZW5naW5lCi0gIC8vIHVzZXMgYSBzbmFwc2hvdCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGluIHdo
aWNoIHRoZSBuZXcgbWV0aG9kIGlzIG5vdAotICAvLyB5ZXQgcHJlc2VudC4gQWZ0ZXIgYXBwZW5n
aW5lIGhhcyBzeW5jZWQgdGhlaXIgcnVudGltZSBsaWJyYXJ5LCB0aGUgY29kZQotICAvLyBiZWxv
dyBzaG91bGQgYmUgY2xlYW5lZCB1cCB0byB1c2UgX1NldE9wdGlvbnMoKS4KLSAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAiJGRlc2NyaXB0b3IkLmhhc19vcHRpb25zID0gVHJ1ZVxuIgotICAgICAg
IiRkZXNjcmlwdG9yJC5fb3B0aW9ucyA9ICRvcHRpb25zJFxuIiwKLSAgICAgICJkZXNjcmlwdG9y
IiwgZGVzY3JpcHRvciwgIm9wdGlvbnMiLCBvcHRpb25zKTsKLX0KLX0gIC8vIG5hbWVzcGFjZQot
Ci0vLyBQcmludHMgZXhwcmVzc2lvbnMgdGhhdCBzZXQgdGhlIG9wdGlvbnMgZmllbGQgb2YgYWxs
IGRlc2NyaXB0b3JzLgotdm9pZCBHZW5lcmF0b3I6OkZpeEFsbERlc2NyaXB0b3JPcHRpb25zKCkg
Y29uc3QgewotICAvLyBQcmludHMgYW4gZXhwcmVzc2lvbiB0aGF0IHNldHMgdGhlIGZpbGUgZGVz
Y3JpcHRvcidzIG9wdGlvbnMuCi0gIHN0cmluZyBmaWxlX29wdGlvbnMgPSBPcHRpb25zVmFsdWUo
Ci0gICAgICAiRmlsZU9wdGlvbnMiLCBmaWxlXy0+b3B0aW9ucygpLlNlcmlhbGl6ZUFzU3RyaW5n
KCkpOwotICBpZiAoZmlsZV9vcHRpb25zICE9ICJOb25lIikgewotICAgIFByaW50RGVzY3JpcHRv
ck9wdGlvbnNGaXhpbmdDb2RlKGtEZXNjcmlwdG9yS2V5LCBmaWxlX29wdGlvbnMsIHByaW50ZXJf
KTsKLSAgfQotICAvLyBQcmludHMgZXhwcmVzc2lvbnMgdGhhdCBzZXQgdGhlIG9wdGlvbnMgZm9y
IGFsbCB0b3AgbGV2ZWwgZW51bXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZV8tPmVudW1f
dHlwZV9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBFbnVtRGVzY3JpcHRvciYgZW51bV9kZXNj
cmlwdG9yID0gKmZpbGVfLT5lbnVtX3R5cGUoaSk7Ci0gICAgRml4T3B0aW9uc0ZvckVudW0oZW51
bV9kZXNjcmlwdG9yKTsKLSAgfQotICAvLyBQcmludHMgZXhwcmVzc2lvbnMgdGhhdCBzZXQgdGhl
IG9wdGlvbnMgZm9yIGFsbCB0b3AgbGV2ZWwgZXh0ZW5zaW9ucy4KLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBmaWxlXy0+ZXh0ZW5zaW9uX2NvdW50KCk7ICsraSkgewotICAgIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciYgZmllbGQgPSAqZmlsZV8tPmV4dGVuc2lvbihpKTsKLSAgICBGaXhPcHRpb25zRm9y
RmllbGQoZmllbGQpOwotICB9Ci0gIC8vIFByaW50cyBleHByZXNzaW9ucyB0aGF0IHNldCB0aGUg
b3B0aW9ucyBmb3IgYWxsIG1lc3NhZ2VzLCBuZXN0ZWQgZW51bXMsCi0gIC8vIG5lc3RlZCBleHRl
bnNpb25zIGFuZCBtZXNzYWdlIGZpZWxkcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlXy0+
bWVzc2FnZV90eXBlX2NvdW50KCk7ICsraSkgewotICAgIEZpeE9wdGlvbnNGb3JNZXNzYWdlKCpm
aWxlXy0+bWVzc2FnZV90eXBlKGkpKTsKLSAgfQotfQotCi0vLyBQcmludHMgZXhwcmVzc2lvbnMg
dGhhdCBzZXQgdGhlIG9wdGlvbnMgZm9yIGFuIGVudW0gZGVzY3JpcHRvciBhbmQgaXRzCi0vLyB2
YWx1ZSBkZXNjcmlwdG9ycy4KLXZvaWQgR2VuZXJhdG9yOjpGaXhPcHRpb25zRm9yRW51bShjb25z
dCBFbnVtRGVzY3JpcHRvciYgZW51bV9kZXNjcmlwdG9yKSBjb25zdCB7Ci0gIHN0cmluZyBkZXNj
cmlwdG9yX25hbWUgPSBNb2R1bGVMZXZlbERlc2NyaXB0b3JOYW1lKGVudW1fZGVzY3JpcHRvcik7
Ci0gIHN0cmluZyBlbnVtX29wdGlvbnMgPSBPcHRpb25zVmFsdWUoCi0gICAgICAiRW51bU9wdGlv
bnMiLCBlbnVtX2Rlc2NyaXB0b3Iub3B0aW9ucygpLlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotICBp
ZiAoZW51bV9vcHRpb25zICE9ICJOb25lIikgewotICAgIFByaW50RGVzY3JpcHRvck9wdGlvbnNG
aXhpbmdDb2RlKGRlc2NyaXB0b3JfbmFtZSwgZW51bV9vcHRpb25zLCBwcmludGVyXyk7Ci0gIH0K
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnVtX2Rlc2NyaXB0b3IudmFsdWVfY291bnQoKTsgKytp
KSB7Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciYgdmFsdWVfZGVzY3JpcHRvciA9ICpl
bnVtX2Rlc2NyaXB0b3IudmFsdWUoaSk7Ci0gICAgc3RyaW5nIHZhbHVlX29wdGlvbnMgPSBPcHRp
b25zVmFsdWUoCi0gICAgICAgICJFbnVtVmFsdWVPcHRpb25zIiwgdmFsdWVfZGVzY3JpcHRvci5v
cHRpb25zKCkuU2VyaWFsaXplQXNTdHJpbmcoKSk7Ci0gICAgaWYgKHZhbHVlX29wdGlvbnMgIT0g
Ik5vbmUiKSB7Ci0gICAgICBQcmludERlc2NyaXB0b3JPcHRpb25zRml4aW5nQ29kZSgKLSAgICAg
ICAgICBTdHJpbmdQcmludGYoIiVzLnZhbHVlc19ieV9uYW1lW1wiJXNcIl0iLCBkZXNjcmlwdG9y
X25hbWUuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfZGVzY3JpcHRvci5u
YW1lKCkuY19zdHIoKSksCi0gICAgICAgICAgdmFsdWVfb3B0aW9ucywgcHJpbnRlcl8pOwotICAg
IH0KLSAgfQotfQotCi0vLyBQcmludHMgZXhwcmVzc2lvbnMgdGhhdCBzZXQgdGhlIG9wdGlvbnMg
Zm9yIGZpZWxkIGRlc2NyaXB0b3JzIChpbmNsdWRpbmcKLS8vIGV4dGVuc2lvbnMpLgotdm9pZCBH
ZW5lcmF0b3I6OkZpeE9wdGlvbnNGb3JGaWVsZCgKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Im
IGZpZWxkKSBjb25zdCB7Ci0gIHN0cmluZyBmaWVsZF9vcHRpb25zID0gT3B0aW9uc1ZhbHVlKAot
ICAgICAgIkZpZWxkT3B0aW9ucyIsIGZpZWxkLm9wdGlvbnMoKS5TZXJpYWxpemVBc1N0cmluZygp
KTsKLSAgaWYgKGZpZWxkX29wdGlvbnMgIT0gIk5vbmUiKSB7Ci0gICAgc3RyaW5nIGZpZWxkX25h
bWU7Ci0gICAgaWYgKGZpZWxkLmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgICBpZiAoZmllbGQuZXh0
ZW5zaW9uX3Njb3BlKCkgPT0gTlVMTCkgewotICAgICAgICAvLyBUb3AgbGV2ZWwgZXh0ZW5zaW9u
cy4KLSAgICAgICAgZmllbGRfbmFtZSA9IGZpZWxkLm5hbWUoKTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGZpZWxkX25hbWUgPSBGaWVsZFJlZmVyZW5jaW5nRXhwcmVzc2lvbigKLSAgICAgICAg
ICAgIGZpZWxkLmV4dGVuc2lvbl9zY29wZSgpLCBmaWVsZCwgImV4dGVuc2lvbnNfYnlfbmFtZSIp
OwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBmaWVsZF9uYW1lID0gRmllbGRSZWZlcmVu
Y2luZ0V4cHJlc3Npb24oCi0gICAgICAgICAgZmllbGQuY29udGFpbmluZ190eXBlKCksIGZpZWxk
LCAiZmllbGRzX2J5X25hbWUiKTsKLSAgICB9Ci0gICAgUHJpbnREZXNjcmlwdG9yT3B0aW9uc0Zp
eGluZ0NvZGUoZmllbGRfbmFtZSwgZmllbGRfb3B0aW9ucywgcHJpbnRlcl8pOwotICB9Ci19Ci0K
LS8vIFByaW50cyBleHByZXNzaW9ucyB0aGF0IHNldCB0aGUgb3B0aW9ucyBmb3IgYSBtZXNzYWdl
IGFuZCBhbGwgaXRzIGlubmVyCi0vLyB0eXBlcyAobmVzdGVkIG1lc3NhZ2VzLCBuZXN0ZWQgZW51
bXMsIGV4dGVuc2lvbnMsIGZpZWxkcykuCi12b2lkIEdlbmVyYXRvcjo6Rml4T3B0aW9uc0Zvck1l
c3NhZ2UoY29uc3QgRGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QgewotICAvLyBOZXN0ZWQg
bWVzc2FnZXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci5uZXN0ZWRfdHlwZV9j
b3VudCgpOyArK2kpIHsKLSAgICBGaXhPcHRpb25zRm9yTWVzc2FnZSgqZGVzY3JpcHRvci5uZXN0
ZWRfdHlwZShpKSk7Ci0gIH0KLSAgLy8gRW51bXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVz
Y3JpcHRvci5lbnVtX3R5cGVfY291bnQoKTsgKytpKSB7Ci0gICAgRml4T3B0aW9uc0ZvckVudW0o
KmRlc2NyaXB0b3IuZW51bV90eXBlKGkpKTsKLSAgfQotICAvLyBGaWVsZHMuCi0gIGZvciAoaW50
IGkgPSAwOyBpIDwgZGVzY3JpcHRvci5maWVsZF9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3ImIGZpZWxkID0gKmRlc2NyaXB0b3IuZmllbGQoaSk7Ci0gICAgRml4T3B0
aW9uc0ZvckZpZWxkKGZpZWxkKTsKLSAgfQotICAvLyBFeHRlbnNpb25zLgotICBmb3IgKGludCBp
ID0gMDsgaSA8IGRlc2NyaXB0b3IuZXh0ZW5zaW9uX2NvdW50KCk7ICsraSkgewotICAgIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciYgZmllbGQgPSAqZGVzY3JpcHRvci5leHRlbnNpb24oaSk7Ci0gICAg
Rml4T3B0aW9uc0ZvckZpZWxkKGZpZWxkKTsKLSAgfQotICAvLyBNZXNzYWdlIG9wdGlvbiBmb3Ig
dGhpcyBtZXNzYWdlLgotICBzdHJpbmcgbWVzc2FnZV9vcHRpb25zID0gT3B0aW9uc1ZhbHVlKAot
ICAgICAgIk1lc3NhZ2VPcHRpb25zIiwgZGVzY3JpcHRvci5vcHRpb25zKCkuU2VyaWFsaXplQXNT
dHJpbmcoKSk7Ci0gIGlmIChtZXNzYWdlX29wdGlvbnMgIT0gIk5vbmUiKSB7Ci0gICAgc3RyaW5n
IGRlc2NyaXB0b3JfbmFtZSA9IE1vZHVsZUxldmVsRGVzY3JpcHRvck5hbWUoZGVzY3JpcHRvcik7
Ci0gICAgUHJpbnREZXNjcmlwdG9yT3B0aW9uc0ZpeGluZ0NvZGUoZGVzY3JpcHRvcl9uYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfb3B0aW9ucywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVyXyk7Ci0gIH0KLX0KLQot
Ly8gSWYgYSBkZXBlbmRlbmN5IGZvcndhcmRzIG90aGVyIGZpbGVzIHRocm91Z2ggcHVibGljIGRl
cGVuZGVuY2llcywgbGV0J3MKLS8vIGNvcHkgb3ZlciB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUg
YWxpYXNlcy4KLXZvaWQgR2VuZXJhdG9yOjpDb3B5UHVibGljRGVwZW5kZW5jaWVzQWxpYXNlcygK
LSAgICBjb25zdCBzdHJpbmcmIGNvcHlfZnJvbSwgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUp
IGNvbnN0IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5wdWJsaWNfZGVwZW5kZW5jeV9j
b3VudCgpOyArK2kpIHsKLSAgICBzdHJpbmcgbW9kdWxlX2FsaWFzID0gTW9kdWxlQWxpYXMoZmls
ZS0+cHVibGljX2RlcGVuZGVuY3koaSktPm5hbWUoKSk7Ci0gICAgcHJpbnRlcl8tPlByaW50KCIk
YWxpYXMkID0gJGNvcHlfZnJvbSQuJGFsaWFzJFxuIiwgImFsaWFzIiwgbW9kdWxlX2FsaWFzLAot
ICAgICAgICAgICAgICAgICAgICAiY29weV9mcm9tIiwgY29weV9mcm9tKTsKLSAgICBDb3B5UHVi
bGljRGVwZW5kZW5jaWVzQWxpYXNlcyhjb3B5X2Zyb20sIGZpbGUtPnB1YmxpY19kZXBlbmRlbmN5
KGkpKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgcHl0aG9uCi19ICAvLyBuYW1lc3BhY2Ug
Y29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2ds
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3B5dGhvbi9weXRob25f
Z2VuZXJhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhvbl9n
ZW5lcmF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEwZjVmY2VkNjhlMDFh
MWNlYThlZDgwMzZhNjg2OTU4NTc5ZmU2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhv
bl9nZW5lcmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiByb2JpbnNvbkBnb29nbGUuY29t
IChXaWxsIFJvYmluc29uKQotLy8KLS8vIEdlbmVyYXRlcyBQeXRob24gY29kZSBmb3IgYSBnaXZl
biAucHJvdG8gZmlsZS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfUFlUSE9O
X0dFTkVSQVRPUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0NPTVBJTEVSX1BZVEhPTl9H
RU5FUkFUT1JfSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvY29kZV9nZW5lcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvbXV0ZXguaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9u
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotY2xhc3Mg
RGVzY3JpcHRvcjsKLWNsYXNzIEVudW1EZXNjcmlwdG9yOwotY2xhc3MgRW51bVZhbHVlRGVzY3Jp
cHRvcjsKLWNsYXNzIEZpZWxkRGVzY3JpcHRvcjsKLWNsYXNzIFNlcnZpY2VEZXNjcmlwdG9yOwot
Ci1uYW1lc3BhY2UgaW8geyBjbGFzcyBQcmludGVyOyB9Ci0KLW5hbWVzcGFjZSBjb21waWxlciB7
Ci1uYW1lc3BhY2UgcHl0aG9uIHsKLQotLy8gQ29kZUdlbmVyYXRvciBpbXBsZW1lbnRhdGlvbiBm
b3IgZ2VuZXJhdGVkIFB5dGhvbiBwcm90b2NvbCBidWZmZXIgY2xhc3Nlcy4KLS8vIElmIHlvdSBj
cmVhdGUgeW91ciBvd24gcHJvdG9jb2wgY29tcGlsZXIgYmluYXJ5IGFuZCB5b3Ugd2FudCBpdCB0
byBzdXBwb3J0Ci0vLyBQeXRob24gb3V0cHV0LCB5b3UgY2FuIGRvIHNvIGJ5IHJlZ2lzdGVyaW5n
IGFuIGluc3RhbmNlIG9mIHRoaXMKLS8vIENvZGVHZW5lcmF0b3Igd2l0aCB0aGUgQ29tbWFuZExp
bmVJbnRlcmZhY2UgaW4geW91ciBtYWluKCkgZnVuY3Rpb24uCi1jbGFzcyBMSUJQUk9UT0NfRVhQ
T1JUIEdlbmVyYXRvciA6IHB1YmxpYyBDb2RlR2VuZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIEdlbmVy
YXRvcigpOwotICB2aXJ0dWFsIH5HZW5lcmF0b3IoKTsKLQotICAvLyBDb2RlR2VuZXJhdG9yIG1l
dGhvZHMuCi0gIHZpcnR1YWwgYm9vbCBHZW5lcmF0ZShjb25zdCBGaWxlRGVzY3JpcHRvciogZmls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcGFyYW1ldGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yQ29udGV4dCogZ2VuZXJhdG9yX2NvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcqIGVycm9yKSBjb25zdDsKLQotIHByaXZh
dGU6Ci0gIHZvaWQgUHJpbnRJbXBvcnRzKCkgY29uc3Q7Ci0gIHZvaWQgUHJpbnRGaWxlRGVzY3Jp
cHRvcigpIGNvbnN0OwotICB2b2lkIFByaW50VG9wTGV2ZWxFbnVtcygpIGNvbnN0OwotICB2b2lk
IFByaW50QWxsTmVzdGVkRW51bXNJbkZpbGUoKSBjb25zdDsKLSAgdm9pZCBQcmludE5lc3RlZEVu
dW1zKGNvbnN0IERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0OwotICB2b2lkIFByaW50RW51
bShjb25zdCBFbnVtRGVzY3JpcHRvciYgZW51bV9kZXNjcmlwdG9yKSBjb25zdDsKLQotICB2b2lk
IFByaW50VG9wTGV2ZWxFeHRlbnNpb25zKCkgY29uc3Q7Ci0KLSAgdm9pZCBQcmludEZpZWxkRGVz
Y3JpcHRvcigKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciYgZmllbGQsIGJvb2wgaXNfZXh0
ZW5zaW9uKSBjb25zdDsKLSAgdm9pZCBQcmludEZpZWxkRGVzY3JpcHRvcnNJbkRlc2NyaXB0b3Io
Ci0gICAgICBjb25zdCBEZXNjcmlwdG9yJiBtZXNzYWdlX2Rlc2NyaXB0b3IsCi0gICAgICBib29s
IGlzX2V4dGVuc2lvbiwKLSAgICAgIGNvbnN0IHN0cmluZyYgbGlzdF92YXJpYWJsZV9uYW1lLAot
ICAgICAgaW50IChEZXNjcmlwdG9yOjoqQ291bnRGbikoKSBjb25zdCwKLSAgICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogKERlc2NyaXB0b3I6OipHZXR0ZXJGbikoaW50KSBjb25zdCkgY29uc3Q7
Ci0gIHZvaWQgUHJpbnRGaWVsZHNJbkRlc2NyaXB0b3IoY29uc3QgRGVzY3JpcHRvciYgbWVzc2Fn
ZV9kZXNjcmlwdG9yKSBjb25zdDsKLSAgdm9pZCBQcmludEV4dGVuc2lvbnNJbkRlc2NyaXB0b3Io
Y29uc3QgRGVzY3JpcHRvciYgbWVzc2FnZV9kZXNjcmlwdG9yKSBjb25zdDsKLSAgdm9pZCBQcmlu
dE1lc3NhZ2VEZXNjcmlwdG9ycygpIGNvbnN0OwotICB2b2lkIFByaW50RGVzY3JpcHRvcihjb25z
dCBEZXNjcmlwdG9yJiBtZXNzYWdlX2Rlc2NyaXB0b3IpIGNvbnN0OwotICB2b2lkIFByaW50TmVz
dGVkRGVzY3JpcHRvcnMoY29uc3QgRGVzY3JpcHRvciYgY29udGFpbmluZ19kZXNjcmlwdG9yKSBj
b25zdDsKLQotICB2b2lkIFByaW50TWVzc2FnZXMoKSBjb25zdDsKLSAgdm9pZCBQcmludE1lc3Nh
Z2UoY29uc3QgRGVzY3JpcHRvciYgbWVzc2FnZV9kZXNjcmlwdG9yLCBjb25zdCBzdHJpbmcmIHBy
ZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4qIHRvX3JlZ2lzdGVyKSBj
b25zdDsKLSAgdm9pZCBQcmludE5lc3RlZE1lc3NhZ2VzKGNvbnN0IERlc2NyaXB0b3ImIGNvbnRh
aW5pbmdfZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmlu
ZyYgcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4qIHRv
X3JlZ2lzdGVyKSBjb25zdDsKLQotICB2b2lkIEZpeEZvcmVpZ25GaWVsZHNJbkRlc2NyaXB0b3Jz
KCkgY29uc3Q7Ci0gIHZvaWQgRml4Rm9yZWlnbkZpZWxkc0luRGVzY3JpcHRvcigKLSAgICAgIGNv
bnN0IERlc2NyaXB0b3ImIGRlc2NyaXB0b3IsCi0gICAgICBjb25zdCBEZXNjcmlwdG9yKiBjb250
YWluaW5nX2Rlc2NyaXB0b3IpIGNvbnN0OwotICB2b2lkIEZpeEZvcmVpZ25GaWVsZHNJbkZpZWxk
KGNvbnN0IERlc2NyaXB0b3IqIGNvbnRhaW5pbmdfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3ImIGZpZWxkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcHl0aG9uX2RpY3RfbmFtZSkgY29uc3Q7Ci0g
IHZvaWQgQWRkTWVzc2FnZVRvRmlsZURlc2NyaXB0b3IoY29uc3QgRGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikgY29uc3Q7Ci0gIHZvaWQgQWRkRW51bVRvRmlsZURlc2NyaXB0b3IoY29uc3QgRW51bURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0OwotICB2b2lkIEFkZEV4dGVuc2lvblRvRmlsZURl
c2NyaXB0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdDsKLSAgc3Ry
aW5nIEZpZWxkUmVmZXJlbmNpbmdFeHByZXNzaW9uKGNvbnN0IERlc2NyaXB0b3IqIGNvbnRhaW5p
bmdfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciYgZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdHJpbmcmIHB5dGhvbl9kaWN0X25hbWUpIGNvbnN0OwotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRGVzY3JpcHRvclQ+Ci0gIHZvaWQgRml4Q29udGFpbmluZ1R5cGVJbkRlc2NyaXB0b3IoCi0g
ICAgICBjb25zdCBEZXNjcmlwdG9yVCYgZGVzY3JpcHRvciwKLSAgICAgIGNvbnN0IERlc2NyaXB0
b3IqIGNvbnRhaW5pbmdfZGVzY3JpcHRvcikgY29uc3Q7Ci0KLSAgdm9pZCBGaXhGb3JlaWduRmll
bGRzSW5FeHRlbnNpb25zKCkgY29uc3Q7Ci0gIHZvaWQgRml4Rm9yZWlnbkZpZWxkc0luRXh0ZW5z
aW9uKAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yJiBleHRlbnNpb25fZmllbGQpIGNvbnN0
OwotICB2b2lkIEZpeEZvcmVpZ25GaWVsZHNJbk5lc3RlZEV4dGVuc2lvbnMoY29uc3QgRGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikgY29uc3Q7Ci0KLSAgdm9pZCBQcmludFNlcnZpY2VzKCkgY29uc3Q7
Ci0gIHZvaWQgUHJpbnRTZXJ2aWNlRGVzY3JpcHRvcihjb25zdCBTZXJ2aWNlRGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikgY29uc3Q7Ci0gIHZvaWQgUHJpbnRTZXJ2aWNlQ2xhc3MoY29uc3QgU2Vydmlj
ZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0OwotICB2b2lkIFByaW50U2VydmljZVN0dWIo
Y29uc3QgU2VydmljZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0OwotICB2b2lkIFByaW50
RGVzY3JpcHRvcktleUFuZE1vZHVsZU5hbWUoCi0gICAgICBjb25zdCBTZXJ2aWNlRGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikgY29uc3QgOwotCi0gIHZvaWQgUHJpbnRFbnVtVmFsdWVEZXNjcmlwdG9y
KGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0OwotICBzdHJpbmcg
T3B0aW9uc1ZhbHVlKGNvbnN0IHN0cmluZyYgY2xhc3NfbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdHJpbmcmIHNlcmlhbGl6ZWRfb3B0aW9ucykgY29uc3Q7Ci0gIGJvb2wgR2Vu
ZXJhdGluZ0Rlc2NyaXB0b3JQcm90bygpIGNvbnN0OwotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBE
ZXNjcmlwdG9yVD4KLSAgc3RyaW5nIE1vZHVsZUxldmVsRGVzY3JpcHRvck5hbWUoY29uc3QgRGVz
Y3JpcHRvclQmIGRlc2NyaXB0b3IpIGNvbnN0OwotICBzdHJpbmcgTW9kdWxlTGV2ZWxNZXNzYWdl
TmFtZShjb25zdCBEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdDsKLSAgc3RyaW5nIE1vZHVs
ZUxldmVsU2VydmljZURlc2NyaXB0b3JOYW1lKAotICAgICAgY29uc3QgU2VydmljZURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpIGNvbnN0OwotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBEZXNjcmlwdG9y
VCwgdHlwZW5hbWUgRGVzY3JpcHRvclByb3RvVD4KLSAgdm9pZCBQcmludFNlcmlhbGl6ZWRQYklu
dGVydmFsKAotICAgICAgY29uc3QgRGVzY3JpcHRvclQmIGRlc2NyaXB0b3IsIERlc2NyaXB0b3JQ
cm90b1QmIHByb3RvKSBjb25zdDsKLQotICB2b2lkIEZpeEFsbERlc2NyaXB0b3JPcHRpb25zKCkg
Y29uc3Q7Ci0gIHZvaWQgRml4T3B0aW9uc0ZvckZpZWxkKGNvbnN0IEZpZWxkRGVzY3JpcHRvciYg
ZmllbGQpIGNvbnN0OwotICB2b2lkIEZpeE9wdGlvbnNGb3JFbnVtKGNvbnN0IEVudW1EZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKSBjb25zdDsKLSAgdm9pZCBGaXhPcHRpb25zRm9yTWVzc2FnZShjb25z
dCBEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdDsKLQotICB2b2lkIENvcHlQdWJsaWNEZXBl
bmRlbmNpZXNBbGlhc2VzKAotICAgICAgY29uc3Qgc3RyaW5nJiBjb3B5X2Zyb20sIGNvbnN0IEZp
bGVEZXNjcmlwdG9yKiBmaWxlKSBjb25zdDsKLQotICAvLyBWZXJ5IGNvYXJzZS1ncmFpbmVkIGxv
Y2sgdG8gZW5zdXJlIHRoYXQgR2VuZXJhdGUoKSBpcyByZWVudHJhbnQuCi0gIC8vIEd1YXJkcyBm
aWxlXywgcHJpbnRlcl8gYW5kIGZpbGVfZGVzY3JpcHRvcl9zZXJpYWxpemVkXy4KLSAgbXV0YWJs
ZSBNdXRleCBtdXRleF87Ci0gIG11dGFibGUgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGVfOyAg
Ly8gU2V0IGluIEdlbmVyYXRlKCkuICBVbmRlciBtdXRleF8uCi0gIG11dGFibGUgc3RyaW5nIGZp
bGVfZGVzY3JpcHRvcl9zZXJpYWxpemVkXzsKLSAgbXV0YWJsZSBpbzo6UHJpbnRlciogcHJpbnRl
cl87ICAvLyBTZXQgaW4gR2VuZXJhdGUoKS4gIFVuZGVyIG11dGV4Xy4KLQotICBHT09HTEVfRElT
QUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoR2VuZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBweXRob24KLX0gIC8vIG5hbWVzcGFjZSBjb21waWxlcgotfSAgLy8gbmFtZXNwYWNlIHByb3Rv
YnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVG
X0NPTVBJTEVSX1BZVEhPTl9HRU5FUkFUT1JfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhvbl9wbHVnaW5fdW5pdHRlc3QuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhvbl9wbHVnaW5fdW5pdHRlc3QuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZjI0NDljZGVjZmRkMzFkYzY3NjYzMzRkNTg4
YjM1ZDczY2Y0YjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3B5dGhvbi9weXRob25fcGx1Z2luX3VuaXR0
ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24g
VmFyZGEpCi0vLwotLy8gVE9ETyhrZW50b24pOiAgU2hhcmUgY29kZSB3aXRoIHRoZSB2ZXJzaW9u
cyBvZiB0aGlzIHRlc3QgaW4gb3RoZXIgbGFuZ3VhZ2VzPwotLy8gICBJdCBzZWVtZWQgbGlrZSBw
YXJhbWV0ZXJpemluZyBpdCB3b3VsZCBhZGQgbW9yZSBjb21wbGV4aXR5IHRoYW4gaXQgaXMKLS8v
ICAgd29ydGguCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcHl0aG9uL3B5dGhvbl9nZW5lcmF0b3Iu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29tbWFuZF9saW5lX2ludGVy
ZmFjZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLQotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi90ZXN0aW5nL2ZpbGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
dGVzdGluZy9maWxlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xl
dGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewot
bmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgcHl0
aG9uIHsKLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIFRlc3RHZW5lcmF0b3IgOiBwdWJsaWMgQ29kZUdl
bmVyYXRvciB7Ci0gcHVibGljOgotICBUZXN0R2VuZXJhdG9yKCkge30KLSAgflRlc3RHZW5lcmF0
b3IoKSB7fQotCi0gIHZpcnR1YWwgYm9vbCBHZW5lcmF0ZShjb25zdCBGaWxlRGVzY3JpcHRvciog
ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcGFyYW1ldGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yQ29udGV4dCogY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cmluZyogZXJyb3IpIGNvbnN0IHsKLSAgICBUcnlJbnNlcnQo
InRlc3RfcGIyLnB5IiwgImltcG9ydHMiLCBjb250ZXh0KTsKLSAgICBUcnlJbnNlcnQoInRlc3Rf
cGIyLnB5IiwgIm1vZHVsZV9zY29wZSIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgidGVzdF9w
YjIucHkiLCAiY2xhc3Nfc2NvcGU6Zm9vLkJhciIsIGNvbnRleHQpOwotICAgIFRyeUluc2VydCgi
dGVzdF9wYjIucHkiLCAiY2xhc3Nfc2NvcGU6Zm9vLkJhci5CYXoiLCBjb250ZXh0KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHZvaWQgVHJ5SW5zZXJ0KGNvbnN0IHN0cmluZyYgZmlsZW5h
bWUsIGNvbnN0IHN0cmluZyYgaW5zZXJ0aW9uX3BvaW50LAotICAgICAgICAgICAgICAgICBHZW5l
cmF0b3JDb250ZXh0KiBjb250ZXh0KSBjb25zdCB7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2Nv
cGVkX3B0cjxpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0+IG91dHB1dCgKLSAgICAgICAgY29udGV4
dC0+T3BlbkZvckluc2VydChmaWxlbmFtZSwgaW5zZXJ0aW9uX3BvaW50KSk7Ci0gICAgaW86OlBy
aW50ZXIgcHJpbnRlcihvdXRwdXQuZ2V0KCksICckJyk7Ci0gICAgcHJpbnRlci5QcmludCgiLy8g
aW5zZXJ0ZWQgJG5hbWUkXG4iLCAibmFtZSIsIGluc2VydGlvbl9wb2ludCk7Ci0gIH0KLX07Ci0K
LS8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGFsbCB0aGUgZXhwZWN0ZWQgaW5zZXJ0aW9uIHBv
aW50cyBleGlzdC4gIEl0IGRvZXMKLS8vIG5vdCB2ZXJpZnkgdGhhdCB0aGV5IGFyZSBjb3JyZWN0
bHktcGxhY2VkOyB0aGF0IHdvdWxkIHJlcXVpcmUgYWN0dWFsbHkKLS8vIGNvbXBpbGluZyB0aGUg
b3V0cHV0IHdoaWNoIGlzIGEgYml0IG1vcmUgdGhhbiBJIGNhcmUgdG8gZG8gZm9yIHRoaXMgdGVz
dC4KLVRFU1QoUHl0aG9uUGx1Z2luVGVzdCwgUGx1Z2luVGVzdCkgewotICBHT09HTEVfQ0hFQ0tf
T0soRmlsZTo6U2V0Q29udGVudHMoVGVzdFRlbXBEaXIoKSArICIvdGVzdC5wcm90byIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJzeW50YXggPSBcInByb3RvMlwiO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSBmb287XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJtZXNzYWdlIEJhciB7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgIG1lc3NhZ2UgQmF6IHt9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSk7Ci0KLSAgZ29vZ2xlOjpw
cm90b2J1Zjo6Y29tcGlsZXI6OkNvbW1hbmRMaW5lSW50ZXJmYWNlIGNsaTsKLSAgY2xpLlNldElu
cHV0c0FyZVByb3RvUGF0aFJlbGF0aXZlKHRydWUpOwotCi0gIHB5dGhvbjo6R2VuZXJhdG9yIHB5
dGhvbl9nZW5lcmF0b3I7Ci0gIFRlc3RHZW5lcmF0b3IgdGVzdF9nZW5lcmF0b3I7Ci0gIGNsaS5S
ZWdpc3RlckdlbmVyYXRvcigiLS1weXRob25fb3V0IiwgJnB5dGhvbl9nZW5lcmF0b3IsICIiKTsK
LSAgY2xpLlJlZ2lzdGVyR2VuZXJhdG9yKCItLXRlc3Rfb3V0IiwgJnRlc3RfZ2VuZXJhdG9yLCAi
Iik7Ci0KLSAgc3RyaW5nIHByb3RvX3BhdGggPSAiLUkiICsgVGVzdFRlbXBEaXIoKTsKLSAgc3Ry
aW5nIHB5dGhvbl9vdXQgPSAiLS1weXRob25fb3V0PSIgKyBUZXN0VGVtcERpcigpOwotICBzdHJp
bmcgdGVzdF9vdXQgPSAiLS10ZXN0X291dD0iICsgVGVzdFRlbXBEaXIoKTsKLQotICBjb25zdCBj
aGFyKiBhcmd2W10gPSB7Ci0gICAgInByb3RvYyIsCi0gICAgcHJvdG9fcGF0aC5jX3N0cigpLAot
ICAgIHB5dGhvbl9vdXQuY19zdHIoKSwKLSAgICB0ZXN0X291dC5jX3N0cigpLAotICAgICJ0ZXN0
LnByb3RvIgotICB9OwotCi0gIEVYUEVDVF9FUSgwLCBjbGkuUnVuKDUsIGFyZ3YpKTsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgcHl0aG9uCi19ICAvLyBuYW1lc3BhY2Ug
Y29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2ds
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3J1YnkvcnVieV9nZW5l
cmF0ZWRfY29kZS5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9ydWJ5L3J1Ynlf
Z2VuZXJhdGVkX2NvZGUucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZDgy
YTZiYWM3ZWZlOGI5ZWI4ZjExNjIyYmUxY2I2MmMzNTNiN2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3J1
YnkvcnVieV9nZW5lcmF0ZWRfY29kZS5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAg
QEAKLXN5bnRheCA9ICJwcm90bzMiOwotCi1wYWNrYWdlIEEuQi5DOwotCi1tZXNzYWdlIFRlc3RN
ZXNzYWdlIHsKLSAgaW50MzIgb3B0aW9uYWxfaW50MzIgPSAxOwotICBpbnQ2NCBvcHRpb25hbF9p
bnQ2NCA9IDI7Ci0gIHVpbnQzMiBvcHRpb25hbF91aW50MzIgPSAzOwotICB1aW50NjQgb3B0aW9u
YWxfdWludDY0ID0gNDsKLSAgYm9vbCBvcHRpb25hbF9ib29sID0gNTsKLSAgZG91YmxlIG9wdGlv
bmFsX2RvdWJsZSA9IDY7Ci0gIGZsb2F0IG9wdGlvbmFsX2Zsb2F0ID0gNzsKLSAgc3RyaW5nIG9w
dGlvbmFsX3N0cmluZyA9IDg7Ci0gIGJ5dGVzIG9wdGlvbmFsX2J5dGVzID0gOTsKLSAgVGVzdEVu
dW0gb3B0aW9uYWxfZW51bSA9IDEwOwotICBUZXN0TWVzc2FnZSBvcHRpb25hbF9tc2cgPSAxMTsK
LQotICByZXBlYXRlZCBpbnQzMiByZXBlYXRlZF9pbnQzMiA9IDIxOwotICByZXBlYXRlZCBpbnQ2
NCByZXBlYXRlZF9pbnQ2NCA9IDIyOwotICByZXBlYXRlZCB1aW50MzIgcmVwZWF0ZWRfdWludDMy
ID0gMjM7Ci0gIHJlcGVhdGVkIHVpbnQ2NCByZXBlYXRlZF91aW50NjQgPSAyNDsKLSAgcmVwZWF0
ZWQgYm9vbCByZXBlYXRlZF9ib29sID0gMjU7Ci0gIHJlcGVhdGVkIGRvdWJsZSByZXBlYXRlZF9k
b3VibGUgPSAyNjsKLSAgcmVwZWF0ZWQgZmxvYXQgcmVwZWF0ZWRfZmxvYXQgPSAyNzsKLSAgcmVw
ZWF0ZWQgc3RyaW5nIHJlcGVhdGVkX3N0cmluZyA9IDI4OwotICByZXBlYXRlZCBieXRlcyByZXBl
YXRlZF9ieXRlcyA9IDI5OwotICByZXBlYXRlZCBUZXN0RW51bSByZXBlYXRlZF9lbnVtID0gMzA7
Ci0gIHJlcGVhdGVkIFRlc3RNZXNzYWdlIHJlcGVhdGVkX21zZyA9IDMxOwotCi0gIG9uZW9mIG15
X29uZW9mIHsKLSAgICBpbnQzMiBvbmVvZl9pbnQzMiA9IDQxOwotICAgIGludDY0IG9uZW9mX2lu
dDY0ID0gNDI7Ci0gICAgdWludDMyIG9uZW9mX3VpbnQzMiA9IDQzOwotICAgIHVpbnQ2NCBvbmVv
Zl91aW50NjQgPSA0NDsKLSAgICBib29sIG9uZW9mX2Jvb2wgPSA0NTsKLSAgICBkb3VibGUgb25l
b2ZfZG91YmxlID0gNDY7Ci0gICAgZmxvYXQgb25lb2ZfZmxvYXQgPSA0NzsKLSAgICBzdHJpbmcg
b25lb2Zfc3RyaW5nID0gNDg7Ci0gICAgYnl0ZXMgb25lb2ZfYnl0ZXMgPSA0OTsKLSAgICBUZXN0
RW51bSBvbmVvZl9lbnVtID0gNTA7Ci0gICAgVGVzdE1lc3NhZ2Ugb25lb2ZfbXNnID0gNTE7Ci0g
IH0KLQotICBtYXA8aW50MzIsIHN0cmluZz4gbWFwX2ludDMyX3N0cmluZyA9IDYxOwotICBtYXA8
aW50NjQsIHN0cmluZz4gbWFwX2ludDY0X3N0cmluZyA9IDYyOwotICBtYXA8dWludDMyLCBzdHJp
bmc+IG1hcF91aW50MzJfc3RyaW5nID0gNjM7Ci0gIG1hcDx1aW50NjQsIHN0cmluZz4gbWFwX3Vp
bnQ2NF9zdHJpbmcgPSA2NDsKLSAgbWFwPGJvb2wsIHN0cmluZz4gbWFwX2Jvb2xfc3RyaW5nID0g
NjU7Ci0gIG1hcDxzdHJpbmcsIHN0cmluZz4gbWFwX3N0cmluZ19zdHJpbmcgPSA2NjsKLSAgbWFw
PHN0cmluZywgVGVzdE1lc3NhZ2U+IG1hcF9zdHJpbmdfbXNnID0gNjc7Ci0gIG1hcDxzdHJpbmcs
IFRlc3RFbnVtPiBtYXBfc3RyaW5nX2VudW0gPSA2ODsKLSAgbWFwPHN0cmluZywgaW50MzI+IG1h
cF9zdHJpbmdfaW50MzIgPSA2OTsKLSAgbWFwPHN0cmluZywgYm9vbD4gbWFwX3N0cmluZ19ib29s
ID0gNzA7Ci0KLSAgbWVzc2FnZSBOZXN0ZWRNZXNzYWdlIHsKLSAgICBpbnQzMiBmb28gPSAxOwot
ICB9Ci0KLSAgTmVzdGVkTWVzc2FnZSBuZXN0ZWRfbWVzc2FnZSA9IDgwOwotfQotCi1lbnVtIFRl
c3RFbnVtIHsKLSAgRGVmYXVsdCA9IDA7Ci0gIEEgPSAxOwotICBCID0gMjsKLSAgQyA9IDM7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcnVieS9ydWJ5X2dlbmVy
YXRlZF9jb2RlLnJiIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3J1YnkvcnVieV9nZW5l
cmF0ZWRfY29kZS5yYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDliMjNmYmU4ZDI1
NDExNWM0YTJkMDAxMmQwOTZkOGFjMzljNmM3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcnVieS9ydWJ5
X2dlbmVyYXRlZF9jb2RlLnJiCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotIyBHZW5l
cmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQotIyBz
b3VyY2U6IHJ1YnlfZ2VuZXJhdGVkX2NvZGUucHJvdG8KLQotcmVxdWlyZSAnZ29vZ2xlL3Byb3Rv
YnVmJwotCi1Hb29nbGU6OlByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbC5nZW5lcmF0ZWRfcG9vbC5i
dWlsZCBkbwotICBhZGRfbWVzc2FnZSAiQS5CLkMuVGVzdE1lc3NhZ2UiIGRvCi0gICAgb3B0aW9u
YWwgOm9wdGlvbmFsX2ludDMyLCA6aW50MzIsIDEKLSAgICBvcHRpb25hbCA6b3B0aW9uYWxfaW50
NjQsIDppbnQ2NCwgMgotICAgIG9wdGlvbmFsIDpvcHRpb25hbF91aW50MzIsIDp1aW50MzIsIDMK
LSAgICBvcHRpb25hbCA6b3B0aW9uYWxfdWludDY0LCA6dWludDY0LCA0Ci0gICAgb3B0aW9uYWwg
Om9wdGlvbmFsX2Jvb2wsIDpib29sLCA1Ci0gICAgb3B0aW9uYWwgOm9wdGlvbmFsX2RvdWJsZSwg
OmRvdWJsZSwgNgotICAgIG9wdGlvbmFsIDpvcHRpb25hbF9mbG9hdCwgOmZsb2F0LCA3Ci0gICAg
b3B0aW9uYWwgOm9wdGlvbmFsX3N0cmluZywgOnN0cmluZywgOAotICAgIG9wdGlvbmFsIDpvcHRp
b25hbF9ieXRlcywgOmJ5dGVzLCA5Ci0gICAgb3B0aW9uYWwgOm9wdGlvbmFsX2VudW0sIDplbnVt
LCAxMCwgIkEuQi5DLlRlc3RFbnVtIgotICAgIG9wdGlvbmFsIDpvcHRpb25hbF9tc2csIDptZXNz
YWdlLCAxMSwgIkEuQi5DLlRlc3RNZXNzYWdlIgotICAgIHJlcGVhdGVkIDpyZXBlYXRlZF9pbnQz
MiwgOmludDMyLCAyMQotICAgIHJlcGVhdGVkIDpyZXBlYXRlZF9pbnQ2NCwgOmludDY0LCAyMgot
ICAgIHJlcGVhdGVkIDpyZXBlYXRlZF91aW50MzIsIDp1aW50MzIsIDIzCi0gICAgcmVwZWF0ZWQg
OnJlcGVhdGVkX3VpbnQ2NCwgOnVpbnQ2NCwgMjQKLSAgICByZXBlYXRlZCA6cmVwZWF0ZWRfYm9v
bCwgOmJvb2wsIDI1Ci0gICAgcmVwZWF0ZWQgOnJlcGVhdGVkX2RvdWJsZSwgOmRvdWJsZSwgMjYK
LSAgICByZXBlYXRlZCA6cmVwZWF0ZWRfZmxvYXQsIDpmbG9hdCwgMjcKLSAgICByZXBlYXRlZCA6
cmVwZWF0ZWRfc3RyaW5nLCA6c3RyaW5nLCAyOAotICAgIHJlcGVhdGVkIDpyZXBlYXRlZF9ieXRl
cywgOmJ5dGVzLCAyOQotICAgIHJlcGVhdGVkIDpyZXBlYXRlZF9lbnVtLCA6ZW51bSwgMzAsICJB
LkIuQy5UZXN0RW51bSIKLSAgICByZXBlYXRlZCA6cmVwZWF0ZWRfbXNnLCA6bWVzc2FnZSwgMzEs
ICJBLkIuQy5UZXN0TWVzc2FnZSIKLSAgICBtYXAgOm1hcF9pbnQzMl9zdHJpbmcsIDppbnQzMiwg
OnN0cmluZywgNjEKLSAgICBtYXAgOm1hcF9pbnQ2NF9zdHJpbmcsIDppbnQ2NCwgOnN0cmluZywg
NjIKLSAgICBtYXAgOm1hcF91aW50MzJfc3RyaW5nLCA6dWludDMyLCA6c3RyaW5nLCA2MwotICAg
IG1hcCA6bWFwX3VpbnQ2NF9zdHJpbmcsIDp1aW50NjQsIDpzdHJpbmcsIDY0Ci0gICAgbWFwIDpt
YXBfYm9vbF9zdHJpbmcsIDpib29sLCA6c3RyaW5nLCA2NQotICAgIG1hcCA6bWFwX3N0cmluZ19z
dHJpbmcsIDpzdHJpbmcsIDpzdHJpbmcsIDY2Ci0gICAgbWFwIDptYXBfc3RyaW5nX21zZywgOnN0
cmluZywgOm1lc3NhZ2UsIDY3LCAiQS5CLkMuVGVzdE1lc3NhZ2UiCi0gICAgbWFwIDptYXBfc3Ry
aW5nX2VudW0sIDpzdHJpbmcsIDplbnVtLCA2OCwgIkEuQi5DLlRlc3RFbnVtIgotICAgIG1hcCA6
bWFwX3N0cmluZ19pbnQzMiwgOnN0cmluZywgOmludDMyLCA2OQotICAgIG1hcCA6bWFwX3N0cmlu
Z19ib29sLCA6c3RyaW5nLCA6Ym9vbCwgNzAKLSAgICBvcHRpb25hbCA6bmVzdGVkX21lc3NhZ2Us
IDptZXNzYWdlLCA4MCwgIkEuQi5DLlRlc3RNZXNzYWdlLk5lc3RlZE1lc3NhZ2UiCi0gICAgb25l
b2YgOm15X29uZW9mIGRvCi0gICAgICBvcHRpb25hbCA6b25lb2ZfaW50MzIsIDppbnQzMiwgNDEK
LSAgICAgIG9wdGlvbmFsIDpvbmVvZl9pbnQ2NCwgOmludDY0LCA0MgotICAgICAgb3B0aW9uYWwg
Om9uZW9mX3VpbnQzMiwgOnVpbnQzMiwgNDMKLSAgICAgIG9wdGlvbmFsIDpvbmVvZl91aW50NjQs
IDp1aW50NjQsIDQ0Ci0gICAgICBvcHRpb25hbCA6b25lb2ZfYm9vbCwgOmJvb2wsIDQ1Ci0gICAg
ICBvcHRpb25hbCA6b25lb2ZfZG91YmxlLCA6ZG91YmxlLCA0NgotICAgICAgb3B0aW9uYWwgOm9u
ZW9mX2Zsb2F0LCA6ZmxvYXQsIDQ3Ci0gICAgICBvcHRpb25hbCA6b25lb2Zfc3RyaW5nLCA6c3Ry
aW5nLCA0OAotICAgICAgb3B0aW9uYWwgOm9uZW9mX2J5dGVzLCA6Ynl0ZXMsIDQ5Ci0gICAgICBv
cHRpb25hbCA6b25lb2ZfZW51bSwgOmVudW0sIDUwLCAiQS5CLkMuVGVzdEVudW0iCi0gICAgICBv
cHRpb25hbCA6b25lb2ZfbXNnLCA6bWVzc2FnZSwgNTEsICJBLkIuQy5UZXN0TWVzc2FnZSIKLSAg
ICBlbmQKLSAgZW5kCi0gIGFkZF9tZXNzYWdlICJBLkIuQy5UZXN0TWVzc2FnZS5OZXN0ZWRNZXNz
YWdlIiBkbwotICAgIG9wdGlvbmFsIDpmb28sIDppbnQzMiwgMQotICBlbmQKLSAgYWRkX2VudW0g
IkEuQi5DLlRlc3RFbnVtIiBkbwotICAgIHZhbHVlIDpEZWZhdWx0LCAwCi0gICAgdmFsdWUgOkEs
IDEKLSAgICB2YWx1ZSA6QiwgMgotICAgIHZhbHVlIDpDLCAzCi0gIGVuZAotZW5kCi0KLW1vZHVs
ZSBBCi0gIG1vZHVsZSBCCi0gICAgbW9kdWxlIEMKLSAgICAgIFRlc3RNZXNzYWdlID0gR29vZ2xl
OjpQcm90b2J1Zjo6RGVzY3JpcHRvclBvb2wuZ2VuZXJhdGVkX3Bvb2wubG9va3VwKCJBLkIuQy5U
ZXN0TWVzc2FnZSIpLm1zZ2NsYXNzCi0gICAgICBUZXN0TWVzc2FnZTo6TmVzdGVkTWVzc2FnZSA9
IEdvb2dsZTo6UHJvdG9idWY6OkRlc2NyaXB0b3JQb29sLmdlbmVyYXRlZF9wb29sLmxvb2t1cCgi
QS5CLkMuVGVzdE1lc3NhZ2UuTmVzdGVkTWVzc2FnZSIpLm1zZ2NsYXNzCi0gICAgICBUZXN0RW51
bSA9IEdvb2dsZTo6UHJvdG9idWY6OkRlc2NyaXB0b3JQb29sLmdlbmVyYXRlZF9wb29sLmxvb2t1
cCgiQS5CLkMuVGVzdEVudW0iKS5lbnVtbW9kdWxlCi0gICAgZW5kCi0gIGVuZAotZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcnVieS9ydWJ5X2dlbmVyYXRvci5j
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9ydWJ5L3J1YnlfZ2VuZXJhdG9yLmNjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmM3NmZiMDM2NGJjM2NhZDExNGFlNTgwNTk5
NmIzMjc0YzlmMjE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9ydWJ5L3J1YnlfZ2VuZXJhdG9yLmNjCisr
KyAvZGV2L251bGwKQEAgLTEsNDYzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9j
b21waWxlci9wbHVnaW4uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
aW8vemVyb19jb3B5X3N0cmVhbS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBp
bGVyL3J1YnkvcnVieV9nZW5lcmF0b3IuaD4KLQotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OnNjb3BlZF9wdHI7Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLW5hbWVzcGFjZSBjb21waWxlciB7Ci1uYW1lc3BhY2UgcnVieSB7Ci0KLS8vIEZvcndh
cmQgZGVjbHMuCi1zdGQ6OnN0cmluZyBJbnRUb1N0cmluZyhpbnQzMiB2YWx1ZSk7Ci1zdGQ6OnN0
cmluZyBTdHJpcERvdFByb3RvKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm90b19maWxlKTsKLXN0ZDo6
c3RyaW5nIExhYmVsRm9yRmllbGQoZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBm
aWVsZCk7Ci1zdGQ6OnN0cmluZyBUeXBlTmFtZShnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkKTsKLXZvaWQgR2VuZXJhdGVNZXNzYWdlKGNvbnN0IGdvb2dsZTo6cHJvdG9i
dWY6OkRlc2NyaXB0b3IqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICBnb29nbGU6OnBy
b3RvYnVmOjppbzo6UHJpbnRlciogcHJpbnRlcik7Ci12b2lkIEdlbmVyYXRlRW51bShjb25zdCBn
b29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvciogZW4sCi0gICAgICAgICAgICAgICAgICBn
b29nbGU6OnByb3RvYnVmOjppbzo6UHJpbnRlciogcHJpbnRlcik7Ci12b2lkIEdlbmVyYXRlTWVz
c2FnZUFzc2lnbm1lbnQoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByZWZpeCwKLSAgICBjb25z
dCBnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBtZXNzYWdlLAotICAgIGdvb2dsZTo6cHJv
dG9idWY6OmlvOjpQcmludGVyKiBwcmludGVyKTsKLXZvaWQgR2VuZXJhdGVFbnVtQXNzaWdubWVu
dCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJlZml4LAotICAgIGNvbnN0IGdvb2dsZTo6cHJv
dG9idWY6OkVudW1EZXNjcmlwdG9yKiBlbiwKLSAgICBnb29nbGU6OnByb3RvYnVmOjppbzo6UHJp
bnRlciogcHJpbnRlcik7Ci0KLXN0ZDo6c3RyaW5nIEludFRvU3RyaW5nKGludDMyIHZhbHVlKSB7
Ci0gIHN0ZDo6b3N0cmluZ3N0cmVhbSBvczsKLSAgb3MgPDwgdmFsdWU7Ci0gIHJldHVybiBvcy5z
dHIoKTsKLX0KLQotc3RkOjpzdHJpbmcgU3RyaXBEb3RQcm90byhjb25zdCBzdGQ6OnN0cmluZyYg
cHJvdG9fZmlsZSkgewotICBpbnQgbGFzdGluZGV4ID0gcHJvdG9fZmlsZS5maW5kX2xhc3Rfb2Yo
Ii4iKTsKLSAgcmV0dXJuIHByb3RvX2ZpbGUuc3Vic3RyKDAsIGxhc3RpbmRleCk7Ci19Ci0KLXN0
ZDo6c3RyaW5nIEdldE91dHB1dEZpbGVuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm90b19maWxl
KSB7Ci0gIHJldHVybiBTdHJpcERvdFByb3RvKHByb3RvX2ZpbGUpICsgIi5yYiI7Ci19Ci0KLXN0
ZDo6c3RyaW5nIExhYmVsRm9yRmllbGQoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNj
cmlwdG9yKiBmaWVsZCkgewotICBzd2l0Y2ggKGZpZWxkLT5sYWJlbCgpKSB7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OkxBQkVMX09QVElPTkFMOiByZXR1cm4gIm9wdGlvbmFsIjsKLSAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfUkVRVUlSRUQ6IHJldHVybiAicmVxdWlyZWQiOwot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpMQUJFTF9SRVBFQVRFRDogcmV0dXJuICJyZXBlYXRl
ZCI7Ci0gICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlKTsgcmV0dXJuICIiOwotICB9Ci19Ci0KLXN0
ZDo6c3RyaW5nIFR5cGVOYW1lKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRv
ciogZmllbGQpIHsKLSAgc3dpdGNoIChmaWVsZC0+dHlwZSgpKSB7Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfSU5UMzI6IHJldHVybiAiaW50MzIiOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0lOVDY0OiByZXR1cm4gImludDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9VSU5UMzI6IHJldHVybiAidWludDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9VSU5UNjQ6IHJldHVybiAidWludDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9TSU5UMzI6IHJldHVybiAic2ludDMyIjsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9TSU5UNjQ6IHJldHVybiAic2ludDY0IjsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9GSVhFRDMyOiByZXR1cm4gImZpeGVkMzIiOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0ZJWEVENjQ6IHJldHVybiAiZml4ZWQ2NCI7Ci0gICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OlRZUEVfU0ZJWEVEMzI6IHJldHVybiAic2ZpeGVkMzIiOwotICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDY0OiByZXR1cm4gInNmaXhlZDY0IjsKLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9ET1VCTEU6IHJldHVybiAiZG91YmxlIjsKLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GTE9BVDogcmV0dXJuICJmbG9hdCI7Ci0gICAgY2FzZSBG
aWVsZERlc2NyaXB0b3I6OlRZUEVfQk9PTDogcmV0dXJuICJib29sIjsKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9FTlVNOiByZXR1cm4gImVudW0iOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX1NUUklORzogcmV0dXJuICJzdHJpbmciOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0JZVEVTOiByZXR1cm4gImJ5dGVzIjsKLSAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9NRVNTQUdFOiByZXR1cm4gIm1lc3NhZ2UiOwotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0dST1VQOiByZXR1cm4gImdyb3VwIjsKLSAgICBkZWZhdWx0OiBhc3NlcnQo
ZmFsc2UpOyByZXR1cm4gIiI7Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0ZUZpZWxkKGNvbnN0IGdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAg
ICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OlByaW50ZXIqIHByaW50ZXIpIHsKLQotICBpZiAoZmll
bGQtPmlzX21hcCgpKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXlfZmllbGQgPQot
ICAgICAgICBmaWVsZC0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TnVtYmVyKDEpOwotICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdmFsdWVfZmllbGQgPQotICAgICAgICBmaWVsZC0+bWVz
c2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TnVtYmVyKDIpOwotCi0gICAgcHJpbnRlci0+UHJpbnQo
Ci0gICAgICAibWFwIDokbmFtZSQsIDoka2V5X3R5cGUkLCA6JHZhbHVlX3R5cGUkLCAkbnVtYmVy
JCIsCi0gICAgICAibmFtZSIsIGZpZWxkLT5uYW1lKCksCi0gICAgICAia2V5X3R5cGUiLCBUeXBl
TmFtZShrZXlfZmllbGQpLAotICAgICAgInZhbHVlX3R5cGUiLCBUeXBlTmFtZSh2YWx1ZV9maWVs
ZCksCi0gICAgICAibnVtYmVyIiwgSW50VG9TdHJpbmcoZmllbGQtPm51bWJlcigpKSk7Ci0KLSAg
ICBpZiAodmFsdWVfZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X01FU1NBR0UpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiLCBcIiRzdWJ0eXBl
JFwiXG4iLAotICAgICAgICAic3VidHlwZSIsIHZhbHVlX2ZpZWxkLT5tZXNzYWdlX3R5cGUoKS0+
ZnVsbF9uYW1lKCkpOwotICAgIH0gZWxzZSBpZiAodmFsdWVfZmllbGQtPmNwcF90eXBlKCkgPT0g
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU0pIHsKLSAgICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgICAiLCBcIiRzdWJ0eXBlJFwiXG4iLAotICAgICAgICAic3VidHlwZSIsIHZhbHVlX2Zp
ZWxkLT5lbnVtX3R5cGUoKS0+ZnVsbF9uYW1lKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmlu
dGVyLT5QcmludCgiXG4iKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0KLSAgICBwcmludGVyLT5Qcmlu
dCgKLSAgICAgICIkbGFiZWwkIDokbmFtZSQsICIsCi0gICAgICAibGFiZWwiLCBMYWJlbEZvckZp
ZWxkKGZpZWxkKSwKLSAgICAgICJuYW1lIiwgZmllbGQtPm5hbWUoKSk7Ci0gICAgcHJpbnRlci0+
UHJpbnQoCi0gICAgICAiOiR0eXBlJCwgJG51bWJlciQiLAotICAgICAgInR5cGUiLCBUeXBlTmFt
ZShmaWVsZCksCi0gICAgICAibnVtYmVyIiwgSW50VG9TdHJpbmcoZmllbGQtPm51bWJlcigpKSk7
Ci0KLSAgICBpZiAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X01FU1NBR0UpIHsKLSAgICAgIHByaW50ZXItPlByaW50KAotICAgICAgICAiLCBcIiRzdWJ0eXBl
JFwiXG4iLAotICAgICAgICJzdWJ0eXBlIiwgZmllbGQtPm1lc3NhZ2VfdHlwZSgpLT5mdWxsX25h
bWUoKSk7Ci0gICAgfSBlbHNlIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfRU5VTSkgewotICAgICAgcHJpbnRlci0+UHJpbnQoCi0gICAgICAgICIsIFwi
JHN1YnR5cGUkXCJcbiIsCi0gICAgICAgICJzdWJ0eXBlIiwgZmllbGQtPmVudW1fdHlwZSgpLT5m
dWxsX25hbWUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZXItPlByaW50KCJcbiIpOwot
ICAgIH0KLSAgfQotfQotCi12b2lkIEdlbmVyYXRlT25lb2YoY29uc3QgZ29vZ2xlOjpwcm90b2J1
Zjo6T25lb2ZEZXNjcmlwdG9yKiBvbmVvZiwKLSAgICAgICAgICAgICAgICAgICBnb29nbGU6OnBy
b3RvYnVmOjppbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAgICAg
ICJvbmVvZiA6JG5hbWUkIGRvXG4iLAotICAgICAgIm5hbWUiLCBvbmVvZi0+bmFtZSgpKTsKLSAg
cHJpbnRlci0+SW5kZW50KCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbmVvZi0+ZmllbGRf
Y291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IG9uZW9m
LT5maWVsZChpKTsKLSAgICBHZW5lcmF0ZUZpZWxkKGZpZWxkLCBwcmludGVyKTsKLSAgfQotCi0g
IHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoImVuZFxuIik7Ci19Ci0KLXZv
aWQgR2VuZXJhdGVNZXNzYWdlKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIG1l
c3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICBnb29nbGU6OnByb3RvYnVmOjppbzo6UHJpbnRl
ciogcHJpbnRlcikgewotCi0gIC8vIERvbid0IGdlbmVyYXRlIE1hcEVudHJ5IG1lc3NhZ2VzIC0t
IHdlIHVzZSB0aGUgUnVieSBleHRlbnNpb24ncyBuYXRpdmUKLSAgLy8gc3VwcG9ydCBmb3IgbWFw
IGZpZWxkcyBpbnN0ZWFkLgotICBpZiAobWVzc2FnZS0+b3B0aW9ucygpLm1hcF9lbnRyeSgpKSB7
Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgImFkZF9tZXNzYWdl
IFwiJG5hbWUkXCIgZG9cbiIsCi0gICAgIm5hbWUiLCBtZXNzYWdlLT5mdWxsX25hbWUoKSk7Ci0g
IHByaW50ZXItPkluZGVudCgpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+Zmll
bGRfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IG1l
c3NhZ2UtPmZpZWxkKGkpOwotICAgIGlmICghZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSkgewot
ICAgICAgR2VuZXJhdGVGaWVsZChmaWVsZCwgcHJpbnRlcik7Ci0gICAgfQotICB9Ci0KLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlLT5vbmVvZl9kZWNsX2NvdW50KCk7IGkrKykgewotICAg
IGNvbnN0IE9uZW9mRGVzY3JpcHRvciogb25lb2YgPSBtZXNzYWdlLT5vbmVvZl9kZWNsKGkpOwot
ICAgIEdlbmVyYXRlT25lb2Yob25lb2YsIHByaW50ZXIpOwotICB9Ci0KLSAgcHJpbnRlci0+T3V0
ZGVudCgpOwotICBwcmludGVyLT5QcmludCgiZW5kXG4iKTsKLQotICBmb3IgKGludCBpID0gMDsg
aSA8IG1lc3NhZ2UtPm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykgewotICAgIEdlbmVyYXRlTWVz
c2FnZShtZXNzYWdlLT5uZXN0ZWRfdHlwZShpKSwgcHJpbnRlcik7Ci0gIH0KLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtZXNzYWdlLT5lbnVtX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgR2VuZXJh
dGVFbnVtKG1lc3NhZ2UtPmVudW1fdHlwZShpKSwgcHJpbnRlcik7Ci0gIH0KLX0KLQotdm9pZCBH
ZW5lcmF0ZUVudW0oY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3IqIGVuLAot
ICAgICAgICAgICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OlByaW50ZXIqIHByaW50ZXIp
IHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgImFkZF9lbnVtIFwiJG5hbWUkXCIgZG9cbiIsCi0g
ICAgIm5hbWUiLCBlbi0+ZnVsbF9uYW1lKCkpOwotICBwcmludGVyLT5JbmRlbnQoKTsKLQotICBm
b3IgKGludCBpID0gMDsgaSA8IGVuLT52YWx1ZV9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBF
bnVtVmFsdWVEZXNjcmlwdG9yKiB2YWx1ZSA9IGVuLT52YWx1ZShpKTsKLSAgICBwcmludGVyLT5Q
cmludCgKLSAgICAgICJ2YWx1ZSA6JG5hbWUkLCAkbnVtYmVyJFxuIiwKLSAgICAgICJuYW1lIiwg
dmFsdWUtPm5hbWUoKSwKLSAgICAgICJudW1iZXIiLCBJbnRUb1N0cmluZyh2YWx1ZS0+bnVtYmVy
KCkpKTsKLSAgfQotCi0gIHByaW50ZXItPk91dGRlbnQoKTsKLSAgcHJpbnRlci0+UHJpbnQoCi0g
ICAgImVuZFxuIik7Ci19Ci0KLS8vIE1vZHVsZSBuYW1lcywgY2xhc3MgbmFtZXMsIGFuZCBlbnVt
IHZhbHVlIG5hbWVzIG5lZWQgdG8gYmUgUnVieSBjb25zdGFudHMsCi0vLyB3aGljaCBtdXN0IHN0
YXJ0IHdpdGggYSBjYXBpdGFsIGxldHRlci4KLXN0ZDo6c3RyaW5nIFJ1YmlmeUNvbnN0YW50KGNv
bnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSB7Ci0gIHN0ZDo6c3RyaW5nIHJldCA9IG5hbWU7Ci0gIGlm
ICghcmV0LmVtcHR5KCkpIHsKLSAgICBpZiAocmV0WzBdID49ICdhJyAmJiByZXRbMF0gPD0gJ3on
KSB7Ci0gICAgICAvLyBJZiBpdCBzdGFydHMgd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIsIGNhcGl0
YWxpemUgaXQuCi0gICAgICByZXRbMF0gPSByZXRbMF0gLSAnYScgKyAnQSc7Ci0gICAgfSBlbHNl
IGlmIChyZXRbMF0gPCAnQScgfHwgcmV0WzBdID4gJ1onKSB7Ci0gICAgICAvLyBPdGhlcndpc2Ug
KGUuZy4gaWYgaXQgYmVnaW5zIHdpdGggYW4gdW5kZXJzY29yZSksIHdlIG5lZWQgdG8gY29tZSB1
cAotICAgICAgLy8gd2l0aCBzb21lIHByZWZpeCB0aGF0IHN0YXJ0cyB3aXRoIGEgY2FwaXRhbCBs
ZXR0ZXIuIFdlIGNvdWxkIGJlIHNtYXJ0ZXIKLSAgICAgIC8vIGhlcmUsIGUuZy4gdHJ5IHRvIHN0
cmlwIGxlYWRpbmcgdW5kZXJzY29yZXMsIGJ1dCB0aGlzIG1heSBjYXVzZSBvdGhlcgotICAgICAg
Ly8gcHJvYmxlbXMgaWYgdGhlIHVzZXIgcmVhbGx5IGludGVuZGVkIHRoZSBuYW1lLiBTbyBsZXQn
cyBqdXN0IHByZXBlbmQgYQotICAgICAgLy8gd2VsbC1rbm93biBzdWZmaXguCi0gICAgICByZXQg
PSAiUEJfIiArIHJldDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBHZW5l
cmF0ZU1lc3NhZ2VBc3NpZ25tZW50KAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcmVmaXgsCi0g
ICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogbWVzc2FnZSwKLSAgICBnb29n
bGU6OnByb3RvYnVmOjppbzo6UHJpbnRlciogcHJpbnRlcikgewotCi0gIC8vIERvbid0IGdlbmVy
YXRlIE1hcEVudHJ5IG1lc3NhZ2VzIC0tIHdlIHVzZSB0aGUgUnVieSBleHRlbnNpb24ncyBuYXRp
dmUKLSAgLy8gc3VwcG9ydCBmb3IgbWFwIGZpZWxkcyBpbnN0ZWFkLgotICBpZiAobWVzc2FnZS0+
b3B0aW9ucygpLm1hcF9lbnRyeSgpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgcHJpbnRlci0+
UHJpbnQoCi0gICAgIiRwcmVmaXgkJG5hbWUkID0gIiwKLSAgICAicHJlZml4IiwgcHJlZml4LAot
ICAgICJuYW1lIiwgUnViaWZ5Q29uc3RhbnQobWVzc2FnZS0+bmFtZSgpKSk7Ci0gIHByaW50ZXIt
PlByaW50KAotICAgICJHb29nbGU6OlByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbC5nZW5lcmF0ZWRf
cG9vbC4iCi0gICAgImxvb2t1cChcIiRmdWxsX25hbWUkXCIpLm1zZ2NsYXNzXG4iLAotICAgICJm
dWxsX25hbWUiLCBtZXNzYWdlLT5mdWxsX25hbWUoKSk7Ci0KLSAgc3RkOjpzdHJpbmcgbmVzdGVk
X3ByZWZpeCA9IHByZWZpeCArIG1lc3NhZ2UtPm5hbWUoKSArICI6OiI7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgbWVzc2FnZS0+bmVzdGVkX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgR2VuZXJh
dGVNZXNzYWdlQXNzaWdubWVudChuZXN0ZWRfcHJlZml4LCBtZXNzYWdlLT5uZXN0ZWRfdHlwZShp
KSwgcHJpbnRlcik7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlLT5lbnVtX3R5
cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgR2VuZXJhdGVFbnVtQXNzaWdubWVudChuZXN0ZWRfcHJl
Zml4LCBtZXNzYWdlLT5lbnVtX3R5cGUoaSksIHByaW50ZXIpOwotICB9Ci19Ci0KLXZvaWQgR2Vu
ZXJhdGVFbnVtQXNzaWdubWVudCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJlZml4LAotICAg
IGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yKiBlbiwKLSAgICBnb29nbGU6
OnByb3RvYnVmOjppbzo6UHJpbnRlciogcHJpbnRlcikgewotICBwcmludGVyLT5QcmludCgKLSAg
ICAiJHByZWZpeCQkbmFtZSQgPSAiLAotICAgICJwcmVmaXgiLCBwcmVmaXgsCi0gICAgIm5hbWUi
LCBSdWJpZnlDb25zdGFudChlbi0+bmFtZSgpKSk7Ci0gIHByaW50ZXItPlByaW50KAotICAgICJH
b29nbGU6OlByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbC5nZW5lcmF0ZWRfcG9vbC4iCi0gICAgImxv
b2t1cChcIiRmdWxsX25hbWUkXCIpLmVudW1tb2R1bGVcbiIsCi0gICAgImZ1bGxfbmFtZSIsIGVu
LT5mdWxsX25hbWUoKSk7Ci19Ci0KLWludCBHZW5lcmF0ZVBhY2thZ2VNb2R1bGVzKAotICAgIHN0
ZDo6c3RyaW5nIHBhY2thZ2VfbmFtZSwKLSAgICBnb29nbGU6OnByb3RvYnVmOjppbzo6UHJpbnRl
ciogcHJpbnRlcikgewotICBpbnQgbGV2ZWxzID0gMDsKLSAgd2hpbGUgKCFwYWNrYWdlX25hbWUu
ZW1wdHkoKSkgewotICAgIHNpemVfdCBkb3RfaW5kZXggPSBwYWNrYWdlX25hbWUuZmluZCgiLiIp
OwotICAgIHN0cmluZyBjb21wb25lbnQ7Ci0gICAgaWYgKGRvdF9pbmRleCA9PSBzdHJpbmc6Om5w
b3MpIHsKLSAgICAgIGNvbXBvbmVudCA9IHBhY2thZ2VfbmFtZTsKLSAgICAgIHBhY2thZ2VfbmFt
ZSA9ICIiOwotICAgIH0gZWxzZSB7Ci0gICAgICBjb21wb25lbnQgPSBwYWNrYWdlX25hbWUuc3Vi
c3RyKDAsIGRvdF9pbmRleCk7Ci0gICAgICBwYWNrYWdlX25hbWUgPSBwYWNrYWdlX25hbWUuc3Vi
c3RyKGRvdF9pbmRleCArIDEpOwotICAgIH0KLSAgICBjb21wb25lbnQgPSBSdWJpZnlDb25zdGFu
dChjb21wb25lbnQpOwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgIm1vZHVsZSAkbmFtZSRc
biIsCi0gICAgICAibmFtZSIsIGNvbXBvbmVudCk7Ci0gICAgcHJpbnRlci0+SW5kZW50KCk7Ci0g
ICAgbGV2ZWxzKys7Ci0gIH0KLSAgcmV0dXJuIGxldmVsczsKLX0KLQotdm9pZCBFbmRQYWNrYWdl
TW9kdWxlcygKLSAgICBpbnQgbGV2ZWxzLAotICAgIGdvb2dsZTo6cHJvdG9idWY6OmlvOjpQcmlu
dGVyKiBwcmludGVyKSB7Ci0gIHdoaWxlIChsZXZlbHMgPiAwKSB7Ci0gICAgbGV2ZWxzLS07Ci0g
ICAgcHJpbnRlci0+T3V0ZGVudCgpOwotICAgIHByaW50ZXItPlByaW50KAotICAgICAgImVuZFxu
Iik7Ci0gIH0KLX0KLQotYm9vbCBVc2VzVHlwZUZyb21GaWxlKGNvbnN0IERlc2NyaXB0b3IqIG1l
c3NhZ2UsIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAg
IHN0cmluZyogZXJyb3IpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlLT5maWVsZF9j
b3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gbWVzc2Fn
ZS0+ZmllbGQoaSk7Ci0gICAgaWYgKChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfTUVTU0FHRSAmJgotICAgICAgICAgZmllbGQtPm1lc3NhZ2VfdHlwZSgpLT5m
aWxlKCkgPT0gZmlsZSkgfHwKLSAgICAgICAgKGZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlw
dG9yOjpUWVBFX0VOVU0gJiYKLSAgICAgICAgIGZpZWxkLT5lbnVtX3R5cGUoKS0+ZmlsZSgpID09
IGZpbGUpKSB7Ci0gICAgICAqZXJyb3IgPSAicHJvdG8zIG1lc3NhZ2UgZmllbGQgIiArIGZpZWxk
LT5mdWxsX25hbWUoKSArICIgaW4gZmlsZSAiICsKLSAgICAgICAgICAgICAgIGZpbGUtPm5hbWUo
KSArICIgaGFzIGEgZGVwZW5kZW5jeSBvbiBhIHR5cGUgZnJvbSBwcm90bzIgZmlsZSAiICsKLSAg
ICAgICAgICAgICAgIGZpbGUtPm5hbWUoKSArCi0gICAgICAgICAgICAgICAiLiAgUnVieSBkb2Vz
bid0IHN1cHBvcnQgcHJvdG8yIHlldCwgc28gd2UgbXVzdCBmYWlsLiI7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2UtPm5lc3Rl
ZF90eXBlX2NvdW50KCk7IGkrKykgewotICAgIGlmIChVc2VzVHlwZUZyb21GaWxlKG1lc3NhZ2Ut
Pm5lc3RlZF90eXBlKGkpLCBmaWxlLCBlcnJvcikpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgfQotCi0gIHJldHVybiBmYWxzZTsKLX0KLQotLy8gUnVieSBkb2Vzbid0IGN1cnJlbnRs
eSBzdXBwb3J0IHByb3RvMi4gIFRoaXMgY2F1c2VzIGEgZmFpbHVyZSBldmVuIGZvciBwcm90bzMK
LS8vIGZpbGVzIHRoYXQgaW1wb3J0IHByb3RvMi4gIEJ1dCBpbiBzb21lIGNhc2VzLCB0aGUgcHJv
dG8yIGZpbGUgaXMgb25seSBiZWluZwotLy8gaW1wb3J0ZWQgdG8gZXh0ZW5kIGFub3RoZXIgcHJv
dG8yIG1lc3NhZ2UuICBUaGUgcHJpbWUgZXhhbXBsZSBpcyBkZWNsYXJpbmcKLS8vIGN1c3RvbSBv
cHRpb25zIGJ5IGV4dGVuZGluZyBGaWxlT3B0aW9ucy9GaWVsZE9wdGlvbnMvZXRjLgotLy8KLS8v
IElmIHRoZSBwcm90bzMgbWVzc2FnZXMgZG9uJ3QgaGF2ZSBhbnkgcHJvdG8yIHN1Ym1lc3NhZ2Vz
LCBpdCBpcyBzYWZlIHRvIG9taXQKLS8vIHRoZSBkZXBlbmRlbmN5IGNvbXBsZXRlbHkuICBVc2Vy
cyB3b24ndCBiZSBhYmxlIHRvIHVzZSBhbnkgcHJvdG8yIGV4dGVuc2lvbnMsCi0vLyBidXQgdGhl
eSBhbHJlYWR5IGNvdWxkbid0IGJlY2F1c2UgcHJvdG8yIG1lc3NhZ2VzIGFyZW4ndCBzdXBwb3J0
ZWQuCi0vLwotLy8gSWYvd2hlbiB3ZSBhZGQgcHJvdG8yIHN1cHBvcnQsIHdlIHNob3VsZCByZW1v
dmUgdGhpcy4KLWJvb2wgTWF5YmVFbWl0RGVwZW5kZW5jeShjb25zdCBGaWxlRGVzY3JpcHRvciog
aW1wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBm
cm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpQcmludGVyKiBwcmludGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogZXJyb3IpIHsKLSAgaWYgKGltcG9ydC0+c3lu
dGF4KCkgPT0gRmlsZURlc2NyaXB0b3I6OlNZTlRBWF9QUk9UTzIpIHsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGZyb20tPm1lc3NhZ2VfdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICAgIGlmIChV
c2VzVHlwZUZyb21GaWxlKGZyb20tPm1lc3NhZ2VfdHlwZShpKSwgaW1wb3J0LCBlcnJvcikpIHsK
LSAgICAgICAgLy8gRXJyb3IgdGV4dCB3YXMgYWxyZWFkeSBzZXQgYnkgVXNlc1R5cGVGcm9tRmls
ZSgpLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gT2sg
dG8gb21pdCB0aGlzIHByb3RvMiBkZXBlbmRlbmN5IC0tIHNvIHdlIHdvbid0IHByaW50IGFueXRo
aW5nLgotICAgIEdPT0dMRV9MT0coV0FSTklORykgPDwgIk9taXR0aW5nIHByb3RvMiBkZXBlbmRl
bmN5ICciIDw8IGltcG9ydC0+bmFtZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICA8PCAiJyBm
cm9tIHByb3RvMyBvdXRwdXQgZmlsZSAnIgotICAgICAgICAgICAgICAgICAgICAgICAgPDwgR2V0
T3V0cHV0RmlsZW5hbWUoZnJvbS0+bmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgPDwg
IicgYmVjYXVzZSB3ZSBkb24ndCBzdXBwb3J0IHByb3RvMiBhbmQgbm8gcHJvdG8yICIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ0eXBlcyBmcm9tIHRoYXQgZmlsZSBhcmUgYmVpbmcgdXNl
ZC4iOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIHByaW50ZXItPlByaW50KAot
ICAgICAgInJlcXVpcmUgJyRuYW1lJCdcbiIsICJuYW1lIiwgU3RyaXBEb3RQcm90byhpbXBvcnQt
Pm5hbWUoKSkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19Ci0KLWJvb2wgR2VuZXJhdGVGaWxl
KGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLCBpbzo6UHJpbnRlciogcHJpbnRlciwKLSAgICAg
ICAgICAgICAgICAgIHN0cmluZyogZXJyb3IpIHsKLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgIiMg
R2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCFc
biIKLSAgICAiIyBzb3VyY2U6ICRmaWxlbmFtZSRcbiIKLSAgICAiXG4iLAotICAgICJmaWxlbmFt
ZSIsIGZpbGUtPm5hbWUoKSk7Ci0KLSAgcHJpbnRlci0+UHJpbnQoCi0gICAgInJlcXVpcmUgJ2dv
b2dsZS9wcm90b2J1ZidcblxuIik7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5kZXBl
bmRlbmN5X2NvdW50KCk7IGkrKykgewotICAgIGlmICghTWF5YmVFbWl0RGVwZW5kZW5jeShmaWxl
LT5kZXBlbmRlbmN5KGkpLCBmaWxlLCBwcmludGVyLCBlcnJvcikpIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gIH0KLQotICBwcmludGVyLT5QcmludCgKLSAgICAiR29vZ2xlOjpQcm90
b2J1Zjo6RGVzY3JpcHRvclBvb2wuZ2VuZXJhdGVkX3Bvb2wuYnVpbGQgZG9cbiIpOwotICBwcmlu
dGVyLT5JbmRlbnQoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5tZXNzYWdlX3R5cGVf
Y291bnQoKTsgaSsrKSB7Ci0gICAgR2VuZXJhdGVNZXNzYWdlKGZpbGUtPm1lc3NhZ2VfdHlwZShp
KSwgcHJpbnRlcik7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5lbnVtX3R5cGVf
Y291bnQoKTsgaSsrKSB7Ci0gICAgR2VuZXJhdGVFbnVtKGZpbGUtPmVudW1fdHlwZShpKSwgcHJp
bnRlcik7Ci0gIH0KLSAgcHJpbnRlci0+T3V0ZGVudCgpOwotICBwcmludGVyLT5QcmludCgKLSAg
ICAiZW5kXG5cbiIpOwotCi0gIGludCBsZXZlbHMgPSBHZW5lcmF0ZVBhY2thZ2VNb2R1bGVzKGZp
bGUtPnBhY2thZ2UoKSwgcHJpbnRlcik7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+bWVz
c2FnZV90eXBlX2NvdW50KCk7IGkrKykgewotICAgIEdlbmVyYXRlTWVzc2FnZUFzc2lnbm1lbnQo
IiIsIGZpbGUtPm1lc3NhZ2VfdHlwZShpKSwgcHJpbnRlcik7Ci0gIH0KLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmaWxlLT5lbnVtX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgR2VuZXJhdGVFbnVt
QXNzaWdubWVudCgiIiwgZmlsZS0+ZW51bV90eXBlKGkpLCBwcmludGVyKTsKLSAgfQotICBFbmRQ
YWNrYWdlTW9kdWxlcyhsZXZlbHMsIHByaW50ZXIpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBHZW5lcmF0b3I6OkdlbmVyYXRlKAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlLAot
ICAgIGNvbnN0IHN0cmluZyYgcGFyYW1ldGVyLAotICAgIEdlbmVyYXRvckNvbnRleHQqIGdlbmVy
YXRvcl9jb250ZXh0LAotICAgIHN0cmluZyogZXJyb3IpIGNvbnN0IHsKLQotICBpZiAoZmlsZS0+
c3ludGF4KCkgIT0gRmlsZURlc2NyaXB0b3I6OlNZTlRBWF9QUk9UTzMpIHsKLSAgICAqZXJyb3Ig
PQotICAgICAgICAiQ2FuIG9ubHkgZ2VuZXJhdGUgUnVieSBjb2RlIGZvciBwcm90bzMgLnByb3Rv
IGZpbGVzLlxuIgotICAgICAgICAiUGxlYXNlIGFkZCAnc3ludGF4ID0gXCJwcm90bzNcIjsnIHRv
IHRoZSB0b3Agb2YgeW91ciAucHJvdG8gZmlsZS5cbiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgc2NvcGVkX3B0cjxpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0+IG91dHB1dCgKLSAgICAg
IGdlbmVyYXRvcl9jb250ZXh0LT5PcGVuKEdldE91dHB1dEZpbGVuYW1lKGZpbGUtPm5hbWUoKSkp
KTsKLSAgaW86OlByaW50ZXIgcHJpbnRlcihvdXRwdXQuZ2V0KCksICckJyk7Ci0KLSAgcmV0dXJu
IEdlbmVyYXRlRmlsZShmaWxlLCAmcHJpbnRlciwgZXJyb3IpOwotfQotCi19ICAvLyBuYW1lc3Bh
Y2UgcnVieQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9i
dWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9jb21waWxlci9ydWJ5L3J1YnlfZ2VuZXJhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29t
cGlsZXIvcnVieS9ydWJ5X2dlbmVyYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3NTU1NWMzMWI1OTkxN2VhNTYzMDM2MWUzOWNlZmEzYTMxNGViOTlkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9ydWJ5L3J1YnlfZ2VuZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJP
VE9CVUZfQ09NUElMRVJfUlVCWV9HRU5FUkFUT1JfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JV
Rl9DT01QSUxFUl9SVUJZX0dFTkVSQVRPUl9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oPgotCi1uYW1l
c3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIg
ewotbmFtZXNwYWNlIHJ1YnkgewotCi1jbGFzcyBMSUJQUk9UT0NfRVhQT1JUIEdlbmVyYXRvcgot
ICAgIDogcHVibGljIGdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyOjpDb2RlR2VuZXJhdG9yIHsK
LSAgdmlydHVhbCBib29sIEdlbmVyYXRlKAotICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZp
bGUsCi0gICAgICBjb25zdCBzdHJpbmcmIHBhcmFtZXRlciwKLSAgICAgIEdlbmVyYXRvckNvbnRl
eHQqIGdlbmVyYXRvcl9jb250ZXh0LAotICAgICAgc3RyaW5nKiBlcnJvcikgY29uc3Q7Ci19Owot
Ci19ICAvLyBuYW1lc3BhY2UgcnVieQotfSAgLy8gbmFtZXNwYWNlIGNvbXBpbGVyCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBH
T09HTEVfUFJPVE9CVUZfQ09NUElMRVJfUlVCWV9HRU5FUkFUT1JfSF9fCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9ydWJ5L3J1YnlfZ2VuZXJhdG9yX3VuaXR0ZXN0
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3J1YnkvcnVieV9nZW5lcmF0b3JfdW5p
dHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMDRjYjMyMGYyZDlkZjg2
ZWIzZDYzOWUzODZmMGI3OTAyZGQ2M2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3J1YnkvcnVieV9nZW5l
cmF0b3JfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAxNCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcnVieS9ydWJ5X2dlbmVyYXRvci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb21tYW5kX2xpbmVfaW50ZXJmYWNlLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW0uaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmlsZS5oPgotCi1uYW1lc3BhY2UgZ29v
Z2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewotbmFtZXNw
YWNlIHJ1YnkgewotbmFtZXNwYWNlIHsKLQotc3RyaW5nIEZpbmRSdWJ5VGVzdERpcihjb25zdCBz
dHJpbmcmIGZpbGUpIHsKLSAgLy8gSW5zcGlyZWQgYnkgVGVzdFNvdXJjZURpcigpIGluIHNyYy9n
b29nbGUvcHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0LmNjLgotI2lmbmRlZiBHT09HTEVfVEhJ
UkRfUEFSVFlfUFJPVE9CVUYKLSAgc3RyaW5nIHByZWZpeCA9ICIuIjsKLSAgd2hpbGUgKCFGaWxl
OjpFeGlzdHMocHJlZml4ICsgIi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3J1YnkiICsg
ZmlsZSkpIHsKLSAgICBpZiAoIUZpbGU6OkV4aXN0cyhwcmVmaXgpKSB7Ci0gICAgICBHT09HTEVf
TE9HKEZBVEFMKQotICAgICAgICAgIDw8ICJDb3VsZCBub3QgZmluZCBSdWJ5IHRlc3QgZGlyZWN0
b3J5LiBQbGVhc2UgcnVuIHRlc3RzIGZyb20gIgotICAgICAgICAgICAgICJzb21ld2hlcmUgd2l0
aGluIHRoZSBwcm90b2J1ZiBzb3VyY2UgcGFja2FnZS4iOwotICAgIH0KLSAgICBwcmVmaXggKz0g
Ii8uLiI7Ci0gIH0KLSAgcmV0dXJuIHByZWZpeCArICIvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9ydWJ5IjsKLSNlbHNlCi0gIHJldHVybiAidGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9jb21waWxlci9ydWJ5IjsKLSNlbmRpZiAgLy8gR09PR0xFX1RISVJEX1BB
UlRZX1BST1RPQlVGCi19Ci0KLS8vIFRoaXMgdGVzdCBpcyBhIHNpbXBsZSBnb2xkZW4tZmlsZSB0
ZXN0IG92ZXIgdGhlIG91dHB1dCBvZiB0aGUgUnVieSBjb2RlCi0vLyBnZW5lcmF0b3IuIFdoZW4g
d2UgbWFrZSBjaGFuZ2VzIHRvIHRoZSBSdWJ5IGV4dGVuc2lvbiBhbmQgYWx0ZXIgdGhlIFJ1Ynkg
Y29kZQotLy8gZ2VuZXJhdG9yIHRvIHVzZSB0aG9zZSBjaGFuZ2VzLCB3ZSBzaG91bGQgKGkpIG1h
bnVhbGx5IHRlc3QgdGhlIG91dHB1dCBvZiB0aGUKLS8vIGNvZGUgZ2VuZXJhdG9yIHdpdGggdGhl
IGV4dGVuc2lvbiwgYW5kIChpaSkgdXBkYXRlIHRoZSBnb2xkZW4gb3V0cHV0IGFib3ZlLgotLy8g
U29tZSBkYXksIHdlIG1heSBpbnRlZ3JhdGUgYnVpbGQgc3lzdGVtcyBiZXR3ZWVuIHByb3RvYyBh
bmQgdGhlIGxhbmd1YWdlCi0vLyBleHRlbnNpb25zIHRvIHRoZSBwb2ludCB3aGVyZSB3ZSBjYW4g
ZG8gdGhpcyB0ZXN0IGluIGEgbW9yZSBhdXRvbWF0ZWQgd2F5LgotCi1URVNUKFJ1YnlHZW5lcmF0
b3JUZXN0LCBHZW5lcmF0b3JUZXN0KSB7Ci0gIHN0cmluZyBydWJ5X3Rlc3RzID0gRmluZFJ1YnlU
ZXN0RGlyKCIvcnVieV9nZW5lcmF0ZWRfY29kZS5wcm90byIpOwotCi0gIGdvb2dsZTo6cHJvdG9i
dWY6OmNvbXBpbGVyOjpDb21tYW5kTGluZUludGVyZmFjZSBjbGk7Ci0gIGNsaS5TZXRJbnB1dHNB
cmVQcm90b1BhdGhSZWxhdGl2ZSh0cnVlKTsKLQotICBydWJ5OjpHZW5lcmF0b3IgcnVieV9nZW5l
cmF0b3I7Ci0gIGNsaS5SZWdpc3RlckdlbmVyYXRvcigiLS1ydWJ5X291dCIsICZydWJ5X2dlbmVy
YXRvciwgIiIpOwotCi0gIC8vIENvcHkgZ2VuZXJhdGVkX2NvZGUucHJvdG8gdG8gdGhlIHRlbXBv
cmFyeSB0ZXN0IGRpcmVjdG9yeS4KLSAgc3RyaW5nIHRlc3RfaW5wdXQ7Ci0gIEdPT0dMRV9DSEVD
S19PSyhGaWxlOjpHZXRDb250ZW50cygKLSAgICAgIHJ1YnlfdGVzdHMgKyAiL3J1YnlfZ2VuZXJh
dGVkX2NvZGUucHJvdG8iLAotICAgICAgJnRlc3RfaW5wdXQsCi0gICAgICB0cnVlKSk7Ci0gIEdP
T0dMRV9DSEVDS19PSyhGaWxlOjpTZXRDb250ZW50cygKLSAgICAgIFRlc3RUZW1wRGlyKCkgKyAi
L3J1YnlfZ2VuZXJhdGVkX2NvZGUucHJvdG8iLAotICAgICAgdGVzdF9pbnB1dCwKLSAgICAgIHRy
dWUpKTsKLQotICAvLyBJbnZva2UgdGhlIHByb3RvIGNvbXBpbGVyICh3ZSB3aWxsIGJlIGluc2lk
ZSBUZXN0VGVtcERpcigpIGF0IHRoaXMgcG9pbnQpLgotICBzdHJpbmcgcnVieV9vdXQgPSAiLS1y
dWJ5X291dD0iICsgVGVzdFRlbXBEaXIoKTsKLSAgc3RyaW5nIHByb3RvX3BhdGggPSAiLS1wcm90
b19wYXRoPSIgKyBUZXN0VGVtcERpcigpOwotICBjb25zdCBjaGFyKiBhcmd2W10gPSB7Ci0gICAg
InByb3RvYyIsCi0gICAgcnVieV9vdXQuY19zdHIoKSwKLSAgICBwcm90b19wYXRoLmNfc3RyKCks
Ci0gICAgInJ1YnlfZ2VuZXJhdGVkX2NvZGUucHJvdG8iLAotICB9OwotCi0gIEVYUEVDVF9FUSgw
LCBjbGkuUnVuKDQsIGFyZ3YpKTsKLQotICAvLyBMb2FkIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGFu
ZCBjb21wYXJlIHRvIHRoZSBleHBlY3RlZCByZXN1bHQuCi0gIHN0cmluZyBvdXRwdXQ7Ci0gIEdP
T0dMRV9DSEVDS19PSyhGaWxlOjpHZXRDb250ZW50cygKLSAgICAgIFRlc3RUZW1wRGlyKCkgKyAi
L3J1YnlfZ2VuZXJhdGVkX2NvZGUucmIiLAotICAgICAgJm91dHB1dCwKLSAgICAgIHRydWUpKTsK
LSAgc3RyaW5nIGV4cGVjdGVkX291dHB1dDsKLSAgR09PR0xFX0NIRUNLX09LKEZpbGU6OkdldENv
bnRlbnRzKAotICAgICAgcnVieV90ZXN0cyArICIvcnVieV9nZW5lcmF0ZWRfY29kZS5yYiIsCi0g
ICAgICAmZXhwZWN0ZWRfb3V0cHV0LAotICAgICAgdHJ1ZSkpOwotICBFWFBFQ1RfRVEoZXhwZWN0
ZWRfb3V0cHV0LCBvdXRwdXQpOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLX0gIC8vIG5hbWVzcGFj
ZSBydWJ5Ci19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2NvbXBpbGVyL3N1YnByb2Nlc3MuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvc3Vi
cHJvY2Vzcy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUyNTg2NjQxMjU1ZDk4
M2U1ZDRiMGE3YTkwZDRhMTc2MGZiYjdhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvc3VicHJvY2Vzcy5j
YworKysgL2Rldi9udWxsCkBAIC0xLDQ2NSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRh
KQotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3N1YnByb2Nlc3MuaD4KLQot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotI2lmbmRlZiBfV0lO
MzIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KLSNpbmNsdWRl
IDxzeXMvd2FpdC5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmg+Ci0KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGNvbXBpbGVyIHsK
LQotI2lmZGVmIF9XSU4zMgotCi1zdGF0aWMgdm9pZCBDbG9zZUhhbmRsZU9yRGllKEhBTkRMRSBo
YW5kbGUpIHsKLSAgaWYgKCFDbG9zZUhhbmRsZShoYW5kbGUpKSB7Ci0gICAgR09PR0xFX0xPRyhG
QVRBTCkgPDwgIkNsb3NlSGFuZGxlOiAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgU3VicHJv
Y2Vzczo6V2luMzJFcnJvck1lc3NhZ2UoR2V0TGFzdEVycm9yKCkpOwotICB9Ci19Ci0KLVN1YnBy
b2Nlc3M6OlN1YnByb2Nlc3MoKQotICAgIDogcHJvY2Vzc19zdGFydF9lcnJvcl8oRVJST1JfU1VD
Q0VTUyksCi0gICAgICBjaGlsZF9oYW5kbGVfKE5VTEwpLCBjaGlsZF9zdGRpbl8oTlVMTCksIGNo
aWxkX3N0ZG91dF8oTlVMTCkge30KLQotU3VicHJvY2Vzczo6flN1YnByb2Nlc3MoKSB7Ci0gIGlm
IChjaGlsZF9zdGRpbl8gIT0gTlVMTCkgewotICAgIENsb3NlSGFuZGxlT3JEaWUoY2hpbGRfc3Rk
aW5fKTsKLSAgfQotICBpZiAoY2hpbGRfc3Rkb3V0XyAhPSBOVUxMKSB7Ci0gICAgQ2xvc2VIYW5k
bGVPckRpZShjaGlsZF9zdGRvdXRfKTsKLSAgfQotfQotCi12b2lkIFN1YnByb2Nlc3M6OlN0YXJ0
KGNvbnN0IHN0cmluZyYgcHJvZ3JhbSwgU2VhcmNoTW9kZSBzZWFyY2hfbW9kZSkgewotICAvLyBD
cmVhdGUgdGhlIHBpcGVzLgotICBIQU5ETEUgc3RkaW5fcGlwZV9yZWFkOwotICBIQU5ETEUgc3Rk
aW5fcGlwZV93cml0ZTsKLSAgSEFORExFIHN0ZG91dF9waXBlX3JlYWQ7Ci0gIEhBTkRMRSBzdGRv
dXRfcGlwZV93cml0ZTsKLQotICBpZiAoIUNyZWF0ZVBpcGUoJnN0ZGluX3BpcGVfcmVhZCwgJnN0
ZGluX3BpcGVfd3JpdGUsIE5VTEwsIDApKSB7Ci0gICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNy
ZWF0ZVBpcGU6ICIgPDwgV2luMzJFcnJvck1lc3NhZ2UoR2V0TGFzdEVycm9yKCkpOwotICB9Ci0g
IGlmICghQ3JlYXRlUGlwZSgmc3Rkb3V0X3BpcGVfcmVhZCwgJnN0ZG91dF9waXBlX3dyaXRlLCBO
VUxMLCAwKSkgewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDcmVhdGVQaXBlOiAiIDw8IFdp
bjMyRXJyb3JNZXNzYWdlKEdldExhc3RFcnJvcigpKTsKLSAgfQotCi0gIC8vIE1ha2UgY2hpbGQg
c2lkZSBvZiB0aGUgcGlwZXMgaW5oZXJpdGFibGUuCi0gIGlmICghU2V0SGFuZGxlSW5mb3JtYXRp
b24oc3RkaW5fcGlwZV9yZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9G
TEFHX0lOSEVSSVQsIEhBTkRMRV9GTEFHX0lOSEVSSVQpKSB7Ci0gICAgR09PR0xFX0xPRyhGQVRB
TCkgPDwgIlNldEhhbmRsZUluZm9ybWF0aW9uOiAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwg
V2luMzJFcnJvck1lc3NhZ2UoR2V0TGFzdEVycm9yKCkpOwotICB9Ci0gIGlmICghU2V0SGFuZGxl
SW5mb3JtYXRpb24oc3Rkb3V0X3BpcGVfd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSEFORExFX0ZMQUdfSU5IRVJJVCwgSEFORExFX0ZMQUdfSU5IRVJJVCkpIHsKLSAgICBHT09H
TEVfTE9HKEZBVEFMKSA8PCAiU2V0SGFuZGxlSW5mb3JtYXRpb246ICIKLSAgICAgICAgICAgICAg
ICAgICAgICA8PCBXaW4zMkVycm9yTWVzc2FnZShHZXRMYXN0RXJyb3IoKSk7Ci0gIH0KLQotICAv
LyBTZXR1cCBTVEFSVFVQSU5GTyB0byByZWRpcmVjdCBoYW5kbGVzLgotICBTVEFSVFVQSU5GT0Eg
c3RhcnR1cF9pbmZvOwotICBaZXJvTWVtb3J5KCZzdGFydHVwX2luZm8sIHNpemVvZihzdGFydHVw
X2luZm8pKTsKLSAgc3RhcnR1cF9pbmZvLmNiID0gc2l6ZW9mKHN0YXJ0dXBfaW5mbyk7Ci0gIHN0
YXJ0dXBfaW5mby5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7Ci0gIHN0YXJ0dXBfaW5m
by5oU3RkSW5wdXQgPSBzdGRpbl9waXBlX3JlYWQ7Ci0gIHN0YXJ0dXBfaW5mby5oU3RkT3V0cHV0
ID0gc3Rkb3V0X3BpcGVfd3JpdGU7Ci0gIHN0YXJ0dXBfaW5mby5oU3RkRXJyb3IgPSBHZXRTdGRI
YW5kbGUoU1REX0VSUk9SX0hBTkRMRSk7Ci0KLSAgaWYgKHN0YXJ0dXBfaW5mby5oU3RkRXJyb3Ig
PT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiR2V0
U3RkSGFuZGxlOiAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgV2luMzJFcnJvck1lc3NhZ2Uo
R2V0TGFzdEVycm9yKCkpOwotICB9Ci0KLSAgLy8gQ3JlYXRlUHJvY2VzcygpIG11dGF0ZXMgaXRz
IHNlY29uZCBwYXJhbWV0ZXIuICBXVEY/Ci0gIGNoYXIqIG5hbWVfY29weSA9IHN0cmR1cChwcm9n
cmFtLmNfc3RyKCkpOwotCi0gIC8vIENyZWF0ZSB0aGUgcHJvY2Vzcy4KLSAgUFJPQ0VTU19JTkZP
Uk1BVElPTiBwcm9jZXNzX2luZm87Ci0KLSAgaWYgKENyZWF0ZVByb2Nlc3NBKChzZWFyY2hfbW9k
ZSA9PSBTRUFSQ0hfUEFUSCkgPyBOVUxMIDogcHJvZ3JhbS5jX3N0cigpLAotICAgICAgICAgICAg
ICAgICAgICAgKHNlYXJjaF9tb2RlID09IFNFQVJDSF9QQVRIKSA/IG5hbWVfY29weSA6IE5VTEws
Ci0gICAgICAgICAgICAgICAgICAgICBOVUxMLCAgLy8gcHJvY2VzcyBzZWN1cml0eSBhdHRyaWJ1
dGVzCi0gICAgICAgICAgICAgICAgICAgICBOVUxMLCAgLy8gdGhyZWFkIHNlY3VyaXR5IGF0dHJp
YnV0ZXMKLSAgICAgICAgICAgICAgICAgICAgIFRSVUUsICAvLyBpbmhlcml0IGhhbmRsZXM/Ci0g
ICAgICAgICAgICAgICAgICAgICAwLCAgICAgLy8gb2JzY3VyZSBjcmVhdGlvbiBmbGFncwotICAg
ICAgICAgICAgICAgICAgICAgTlVMTCwgIC8vIGVudmlyb25tZW50IChpbmhlcml0IGZyb20gcGFy
ZW50KQotICAgICAgICAgICAgICAgICAgICAgTlVMTCwgIC8vIGN1cnJlbnQgZGlyZWN0b3J5IChp
bmhlcml0IGZyb20gcGFyZW50KQotICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0dXBfaW5mbywK
LSAgICAgICAgICAgICAgICAgICAgICZwcm9jZXNzX2luZm8pKSB7Ci0gICAgY2hpbGRfaGFuZGxl
XyA9IHByb2Nlc3NfaW5mby5oUHJvY2VzczsKLSAgICBDbG9zZUhhbmRsZU9yRGllKHByb2Nlc3Nf
aW5mby5oVGhyZWFkKTsKLSAgICBjaGlsZF9zdGRpbl8gPSBzdGRpbl9waXBlX3dyaXRlOwotICAg
IGNoaWxkX3N0ZG91dF8gPSBzdGRvdXRfcGlwZV9yZWFkOwotICB9IGVsc2UgewotICAgIHByb2Nl
c3Nfc3RhcnRfZXJyb3JfID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgQ2xvc2VIYW5kbGVPckRpZShz
dGRpbl9waXBlX3dyaXRlKTsKLSAgICBDbG9zZUhhbmRsZU9yRGllKHN0ZG91dF9waXBlX3JlYWQp
OwotICB9Ci0KLSAgQ2xvc2VIYW5kbGVPckRpZShzdGRpbl9waXBlX3JlYWQpOwotICBDbG9zZUhh
bmRsZU9yRGllKHN0ZG91dF9waXBlX3dyaXRlKTsKLSAgZnJlZShuYW1lX2NvcHkpOwotfQotCi1i
b29sIFN1YnByb2Nlc3M6OkNvbW11bmljYXRlKGNvbnN0IE1lc3NhZ2UmIGlucHV0LCBNZXNzYWdl
KiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogZXJyb3IpIHsK
LSAgaWYgKHByb2Nlc3Nfc3RhcnRfZXJyb3JfICE9IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAqZXJy
b3IgPSBXaW4zMkVycm9yTWVzc2FnZShwcm9jZXNzX3N0YXJ0X2Vycm9yXyk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0KLSAgR09PR0xFX0NIRUNLKGNoaWxkX2hhbmRsZV8gIT0gTlVMTCkgPDwg
Ik11c3QgY2FsbCBTdGFydCgpIGZpcnN0LiI7Ci0KLSAgc3RyaW5nIGlucHV0X2RhdGEgPSBpbnB1
dC5TZXJpYWxpemVBc1N0cmluZygpOwotICBzdHJpbmcgb3V0cHV0X2RhdGE7Ci0KLSAgaW50IGlu
cHV0X3BvcyA9IDA7Ci0KLSAgd2hpbGUgKGNoaWxkX3N0ZG91dF8gIT0gTlVMTCkgewotICAgIEhB
TkRMRSBoYW5kbGVzWzJdOwotICAgIGludCBoYW5kbGVfY291bnQgPSAwOwotCi0gICAgaWYgKGNo
aWxkX3N0ZGluXyAhPSBOVUxMKSB7Ci0gICAgICBoYW5kbGVzW2hhbmRsZV9jb3VudCsrXSA9IGNo
aWxkX3N0ZGluXzsKLSAgICB9Ci0gICAgaWYgKGNoaWxkX3N0ZG91dF8gIT0gTlVMTCkgewotICAg
ICAgaGFuZGxlc1toYW5kbGVfY291bnQrK10gPSBjaGlsZF9zdGRvdXRfOwotICAgIH0KLQotICAg
IERXT1JEIHdhaXRfcmVzdWx0ID0KLSAgICAgICAgV2FpdEZvck11bHRpcGxlT2JqZWN0cyhoYW5k
bGVfY291bnQsIGhhbmRsZXMsIEZBTFNFLCBJTkZJTklURSk7Ci0KLSAgICBIQU5ETEUgc2lnbmFs
ZWRfaGFuZGxlID0gTlVMTDsKLSAgICBpZiAod2FpdF9yZXN1bHQgPj0gV0FJVF9PQkpFQ1RfMCAm
JgotICAgICAgICB3YWl0X3Jlc3VsdCA8IFdBSVRfT0JKRUNUXzAgKyBoYW5kbGVfY291bnQpIHsK
LSAgICAgIHNpZ25hbGVkX2hhbmRsZSA9IGhhbmRsZXNbd2FpdF9yZXN1bHQgLSBXQUlUX09CSkVD
VF8wXTsKLSAgICB9IGVsc2UgaWYgKHdhaXRfcmVzdWx0ID09IFdBSVRfRkFJTEVEKSB7Ci0gICAg
ICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiV2FpdEZvck11bHRpcGxlT2JqZWN0czogIgotICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgV2luMzJFcnJvck1lc3NhZ2UoR2V0TGFzdEVycm9yKCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiV2FpdEZvck11bHRpcGxl
T2JqZWN0czogVW5leHBlY3RlZCByZXR1cm4gY29kZTogIgotICAgICAgICAgICAgICAgICAgICAg
ICAgPDwgd2FpdF9yZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYgKHNpZ25hbGVkX2hhbmRsZSA9PSBj
aGlsZF9zdGRpbl8pIHsKLSAgICAgIERXT1JEIG47Ci0gICAgICBpZiAoIVdyaXRlRmlsZShjaGls
ZF9zdGRpbl8sCi0gICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLmRhdGEoKSArIGlucHV0
X3BvcywKLSAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEuc2l6ZSgpIC0gaW5wdXRfcG9z
LAotICAgICAgICAgICAgICAgICAgICAgJm4sIE5VTEwpKSB7Ci0gICAgICAgIC8vIENoaWxkIGNs
b3NlZCBwaXBlLiAgUHJlc3VtYWJseSBpdCB3aWxsIHJlcG9ydCBhbiBlcnJvciBsYXRlci4KLSAg
ICAgICAgLy8gUHJldGVuZCB3ZSdyZSBkb25lIGZvciBub3cuCi0gICAgICAgIGlucHV0X3BvcyA9
IGlucHV0X2RhdGEuc2l6ZSgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaW5wdXRfcG9zICs9
IG47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpbnB1dF9wb3MgPT0gaW5wdXRfZGF0YS5zaXplKCkp
IHsKLSAgICAgICAgLy8gV2UncmUgZG9uZSB3cml0aW5nLiAgQ2xvc2UuCi0gICAgICAgIENsb3Nl
SGFuZGxlT3JEaWUoY2hpbGRfc3RkaW5fKTsKLSAgICAgICAgY2hpbGRfc3RkaW5fID0gTlVMTDsK
LSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHNpZ25hbGVkX2hhbmRsZSA9PSBjaGlsZF9zdGRvdXRf
KSB7Ci0gICAgICBjaGFyIGJ1ZmZlcls0MDk2XTsKLSAgICAgIERXT1JEIG47Ci0KLSAgICAgIGlm
ICghUmVhZEZpbGUoY2hpbGRfc3Rkb3V0XywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgJm4sIE5V
TEwpKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGRvbmUgcmVhZGluZy4gIENsb3NlLgotICAgICAgICBD
bG9zZUhhbmRsZU9yRGllKGNoaWxkX3N0ZG91dF8pOwotICAgICAgICBjaGlsZF9zdGRvdXRfID0g
TlVMTDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG91dHB1dF9kYXRhLmFwcGVuZChidWZmZXIs
IG4pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmIChjaGlsZF9zdGRpbl8gIT0gTlVMTCkg
ewotICAgIC8vIENoaWxkIGRpZCBub3QgZmluaXNoIHJlYWRpbmcgaW5wdXQgYmVmb3JlIGl0IGNs
b3NlZCB0aGUgb3V0cHV0LgotICAgIC8vIFByZXN1bWFibHkgaXQgZXhpdGVkIHdpdGggYW4gZXJy
b3IuCi0gICAgQ2xvc2VIYW5kbGVPckRpZShjaGlsZF9zdGRpbl8pOwotICAgIGNoaWxkX3N0ZGlu
XyA9IE5VTEw7Ci0gIH0KLQotICBEV09SRCB3YWl0X3Jlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmpl
Y3QoY2hpbGRfaGFuZGxlXywgSU5GSU5JVEUpOwotCi0gIGlmICh3YWl0X3Jlc3VsdCA9PSBXQUlU
X0ZBSUxFRCkgewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJXYWl0Rm9yU2luZ2xlT2JqZWN0
OiAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgV2luMzJFcnJvck1lc3NhZ2UoR2V0TGFzdEVy
cm9yKCkpOwotICB9IGVsc2UgaWYgKHdhaXRfcmVzdWx0ICE9IFdBSVRfT0JKRUNUXzApIHsKLSAg
ICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiV2FpdEZvclNpbmdsZU9iamVjdDogVW5leHBlY3RlZCBy
ZXR1cm4gY29kZTogIgotICAgICAgICAgICAgICAgICAgICAgIDw8IHdhaXRfcmVzdWx0OwotICB9
Ci0KLSAgRFdPUkQgZXhpdF9jb2RlOwotICBpZiAoIUdldEV4aXRDb2RlUHJvY2VzcyhjaGlsZF9o
YW5kbGVfLCAmZXhpdF9jb2RlKSkgewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJHZXRFeGl0
Q29kZVByb2Nlc3M6ICIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBXaW4zMkVycm9yTWVzc2Fn
ZShHZXRMYXN0RXJyb3IoKSk7Ci0gIH0KLQotICBDbG9zZUhhbmRsZU9yRGllKGNoaWxkX2hhbmRs
ZV8pOwotICBjaGlsZF9oYW5kbGVfID0gTlVMTDsKLQotICBpZiAoZXhpdF9jb2RlICE9IDApIHsK
LSAgICAqZXJyb3IgPSBzdHJpbmdzOjpTdWJzdGl0dXRlKAotICAgICAgICAiUGx1Z2luIGZhaWxl
ZCB3aXRoIHN0YXR1cyBjb2RlICQwLiIsIGV4aXRfY29kZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0KLSAgaWYgKCFvdXRwdXQtPlBhcnNlRnJvbVN0cmluZyhvdXRwdXRfZGF0YSkpIHsKLSAg
ICAqZXJyb3IgPSAiUGx1Z2luIG91dHB1dCBpcyB1bnBhcnNlYWJsZTogIiArIENFc2NhcGUob3V0
cHV0X2RhdGEpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQot
Ci1zdHJpbmcgU3VicHJvY2Vzczo6V2luMzJFcnJvck1lc3NhZ2UoRFdPUkQgZXJyb3JfY29kZSkg
ewotICBjaGFyKiBtZXNzYWdlOwotCi0gIC8vIFdURj8KLSAgRm9ybWF0TWVzc2FnZShGT1JNQVRf
TUVTU0FHRV9BTExPQ0FURV9CVUZGRVIgfAotICAgICAgICAgICAgICAgIEZPUk1BVF9NRVNTQUdF
X0ZST01fU1lTVEVNIHwKLSAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5T
RVJUUywKLSAgICAgICAgICAgICAgICBOVUxMLCBlcnJvcl9jb2RlLCAwLAotICAgICAgICAgICAg
ICAgIChMUFRTVFIpJm1lc3NhZ2UsICAvLyBOT1QgQSBCVUchCi0gICAgICAgICAgICAgICAgMCwg
TlVMTCk7Ci0KLSAgc3RyaW5nIHJlc3VsdCA9IG1lc3NhZ2U7Ci0gIExvY2FsRnJlZShtZXNzYWdl
KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jZWxzZSAgLy8gX1dJ
TjMyCi0KLVN1YnByb2Nlc3M6OlN1YnByb2Nlc3MoKQotICAgIDogY2hpbGRfcGlkXygtMSksIGNo
aWxkX3N0ZGluXygtMSksIGNoaWxkX3N0ZG91dF8oLTEpIHt9Ci0KLVN1YnByb2Nlc3M6On5TdWJw
cm9jZXNzKCkgewotICBpZiAoY2hpbGRfc3RkaW5fICE9IC0xKSB7Ci0gICAgY2xvc2UoY2hpbGRf
c3RkaW5fKTsKLSAgfQotICBpZiAoY2hpbGRfc3Rkb3V0XyAhPSAtMSkgewotICAgIGNsb3NlKGNo
aWxkX3N0ZG91dF8pOwotICB9Ci19Ci0KLXZvaWQgU3VicHJvY2Vzczo6U3RhcnQoY29uc3Qgc3Ry
aW5nJiBwcm9ncmFtLCBTZWFyY2hNb2RlIHNlYXJjaF9tb2RlKSB7Ci0gIC8vIE5vdGUgdGhhdCB3
ZSBhc3N1bWUgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgdGhyZWFkcywgdGh1cyB3ZSBkb24ndCBo
YXZlIHRvCi0gIC8vIGRvIGNyYXp5IHN0dWZmIGxpa2UgdXNpbmcgc29ja2V0IHBhaXJzIG9yIGF2
b2lkaW5nIGxpYmMgbG9ja3MuCi0KLSAgLy8gWzBdIGlzIHJlYWQgZW5kLCBbMV0gaXMgd3JpdGUg
ZW5kLgotICBpbnQgc3RkaW5fcGlwZVsyXTsKLSAgaW50IHN0ZG91dF9waXBlWzJdOwotCi0gIEdP
T0dMRV9DSEVDSyhwaXBlKHN0ZGluX3BpcGUpICE9IC0xKTsKLSAgR09PR0xFX0NIRUNLKHBpcGUo
c3Rkb3V0X3BpcGUpICE9IC0xKTsKLQotICBjaGFyKiBhcmd2WzJdID0geyBzdHJkdXAocHJvZ3Jh
bS5jX3N0cigpKSwgTlVMTCB9OwotCi0gIGNoaWxkX3BpZF8gPSBmb3JrKCk7Ci0gIGlmIChjaGls
ZF9waWRfID09IC0xKSB7Ci0gICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgImZvcms6ICIgPDwgc3Ry
ZXJyb3IoZXJybm8pOwotICB9IGVsc2UgaWYgKGNoaWxkX3BpZF8gPT0gMCkgewotICAgIC8vIFdl
IGFyZSB0aGUgY2hpbGQuCi0gICAgZHVwMihzdGRpbl9waXBlWzBdLCBTVERJTl9GSUxFTk8pOwot
ICAgIGR1cDIoc3Rkb3V0X3BpcGVbMV0sIFNURE9VVF9GSUxFTk8pOwotCi0gICAgY2xvc2Uoc3Rk
aW5fcGlwZVswXSk7Ci0gICAgY2xvc2Uoc3RkaW5fcGlwZVsxXSk7Ci0gICAgY2xvc2Uoc3Rkb3V0
X3BpcGVbMF0pOwotICAgIGNsb3NlKHN0ZG91dF9waXBlWzFdKTsKLQotICAgIHN3aXRjaCAoc2Vh
cmNoX21vZGUpIHsKLSAgICAgIGNhc2UgU0VBUkNIX1BBVEg6Ci0gICAgICAgIGV4ZWN2cChhcmd2
WzBdLCBhcmd2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVYQUNUX05BTUU6Ci0gICAg
ICAgIGV4ZWN2KGFyZ3ZbMF0sIGFyZ3YpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAv
LyBXcml0ZSBkaXJlY3RseSB0byBTVERFUlJfRklMRU5PIHRvIGF2b2lkIHN0ZGlvIGNvZGUgcGF0
aHMgdGhhdCBtYXkgZG8KLSAgICAvLyBzdHVmZiB0aGF0IGlzIHVuc2FmZSBoZXJlLgotICAgIGlu
dCBpZ25vcmVkOwotICAgIGlnbm9yZWQgPSB3cml0ZShTVERFUlJfRklMRU5PLCBhcmd2WzBdLCBz
dHJsZW4oYXJndlswXSkpOwotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiOiBwcm9ncmFtIG5v
dCBmb3VuZCBvciBpcyBub3QgZXhlY3V0YWJsZVxuIjsKLSAgICBpZ25vcmVkID0gd3JpdGUoU1RE
RVJSX0ZJTEVOTywgbWVzc2FnZSwgc3RybGVuKG1lc3NhZ2UpKTsKLSAgICAodm9pZCkgaWdub3Jl
ZDsKLQotICAgIC8vIE11c3QgdXNlIF9leGl0KCkgcmF0aGVyIHRoYW4gZXhpdCgpIHRvIGF2b2lk
IGZsdXNoaW5nIG91dHB1dCBidWZmZXJzCi0gICAgLy8gdGhhdCB3aWxsIGFsc28gYmUgZmx1c2hl
ZCBieSB0aGUgcGFyZW50LgotICAgIF9leGl0KDEpOwotICB9IGVsc2UgewotICAgIGZyZWUoYXJn
dlswXSk7Ci0KLSAgICBjbG9zZShzdGRpbl9waXBlWzBdKTsKLSAgICBjbG9zZShzdGRvdXRfcGlw
ZVsxXSk7Ci0KLSAgICBjaGlsZF9zdGRpbl8gPSBzdGRpbl9waXBlWzFdOwotICAgIGNoaWxkX3N0
ZG91dF8gPSBzdGRvdXRfcGlwZVswXTsKLSAgfQotfQotCi1ib29sIFN1YnByb2Nlc3M6OkNvbW11
bmljYXRlKGNvbnN0IE1lc3NhZ2UmIGlucHV0LCBNZXNzYWdlKiBvdXRwdXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cmluZyogZXJyb3IpIHsKLQotICBHT09HTEVfQ0hFQ0tfTkUo
Y2hpbGRfc3RkaW5fLCAtMSkgPDwgIk11c3QgY2FsbCBTdGFydCgpIGZpcnN0LiI7Ci0KLSAgLy8g
VGhlICJzaWdoYW5kbGVyX3QiIHR5cGVkZWYgaXMgR05VLXNwZWNpZmljLCBzbyBkZWZpbmUgb3Vy
IG93bi4KLSAgdHlwZWRlZiB2b2lkIFNpZ25hbEhhbmRsZXIoaW50KTsKLQotICAvLyBNYWtlIHN1
cmUgU0lHUElQRSBpcyBkaXNhYmxlZCBzbyB0aGF0IGlmIHRoZSBjaGlsZCBkaWVzIGl0IGRvZXNu
J3Qga2lsbCB1cy4KLSAgU2lnbmFsSGFuZGxlciogb2xkX3BpcGVfaGFuZGxlciA9IHNpZ25hbChT
SUdQSVBFLCBTSUdfSUdOKTsKLQotICBzdHJpbmcgaW5wdXRfZGF0YSA9IGlucHV0LlNlcmlhbGl6
ZUFzU3RyaW5nKCk7Ci0gIHN0cmluZyBvdXRwdXRfZGF0YTsKLQotICBpbnQgaW5wdXRfcG9zID0g
MDsKLSAgaW50IG1heF9mZCA9IHN0ZDo6bWF4KGNoaWxkX3N0ZGluXywgY2hpbGRfc3Rkb3V0Xyk7
Ci0KLSAgd2hpbGUgKGNoaWxkX3N0ZG91dF8gIT0gLTEpIHsKLSAgICBmZF9zZXQgcmVhZF9mZHM7
Ci0gICAgZmRfc2V0IHdyaXRlX2ZkczsKLSAgICBGRF9aRVJPKCZyZWFkX2Zkcyk7Ci0gICAgRkRf
WkVSTygmd3JpdGVfZmRzKTsKLSAgICBpZiAoY2hpbGRfc3Rkb3V0XyAhPSAtMSkgewotICAgICAg
RkRfU0VUKGNoaWxkX3N0ZG91dF8sICZyZWFkX2Zkcyk7Ci0gICAgfQotICAgIGlmIChjaGlsZF9z
dGRpbl8gIT0gLTEpIHsKLSAgICAgIEZEX1NFVChjaGlsZF9zdGRpbl8sICZ3cml0ZV9mZHMpOwot
ICAgIH0KLQotICAgIGlmIChzZWxlY3QobWF4X2ZkICsgMSwgJnJlYWRfZmRzLCAmd3JpdGVfZmRz
LCBOVUxMLCBOVUxMKSA8IDApIHsKLSAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgewotICAgICAg
ICAvLyBJbnRlcnJ1cHRlZCBieSBzaWduYWwuICBUcnkgYWdhaW4uCi0gICAgICAgIGNvbnRpbnVl
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgInNlbGVjdDog
IiA8PCBzdHJlcnJvcihlcnJubyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNoaWxkX3N0
ZGluXyAhPSAtMSAmJiBGRF9JU1NFVChjaGlsZF9zdGRpbl8sICZ3cml0ZV9mZHMpKSB7Ci0gICAg
ICBpbnQgbiA9IHdyaXRlKGNoaWxkX3N0ZGluXywgaW5wdXRfZGF0YS5kYXRhKCkgKyBpbnB1dF9w
b3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YS5zaXplKCkg
LSBpbnB1dF9wb3MpOwotICAgICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgIC8vIENoaWxkIGNsb3Nl
ZCBwaXBlLiAgUHJlc3VtYWJseSBpdCB3aWxsIHJlcG9ydCBhbiBlcnJvciBsYXRlci4KLSAgICAg
ICAgLy8gUHJldGVuZCB3ZSdyZSBkb25lIGZvciBub3cuCi0gICAgICAgIGlucHV0X3BvcyA9IGlu
cHV0X2RhdGEuc2l6ZSgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaW5wdXRfcG9zICs9IG47
Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpbnB1dF9wb3MgPT0gaW5wdXRfZGF0YS5zaXplKCkpIHsK
LSAgICAgICAgLy8gV2UncmUgZG9uZSB3cml0aW5nLiAgQ2xvc2UuCi0gICAgICAgIGNsb3NlKGNo
aWxkX3N0ZGluXyk7Ci0gICAgICAgIGNoaWxkX3N0ZGluXyA9IC0xOwotICAgICAgfQotICAgIH0K
LQotICAgIGlmIChjaGlsZF9zdGRvdXRfICE9IC0xICYmIEZEX0lTU0VUKGNoaWxkX3N0ZG91dF8s
ICZyZWFkX2ZkcykpIHsKLSAgICAgIGNoYXIgYnVmZmVyWzQwOTZdOwotICAgICAgaW50IG4gPSBy
ZWFkKGNoaWxkX3N0ZG91dF8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotCi0gICAgICBpZiAo
biA+IDApIHsKLSAgICAgICAgb3V0cHV0X2RhdGEuYXBwZW5kKGJ1ZmZlciwgbik7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICAvLyBXZSdyZSBkb25lIHJlYWRpbmcuICBDbG9zZS4KLSAgICAgICAg
Y2xvc2UoY2hpbGRfc3Rkb3V0Xyk7Ci0gICAgICAgIGNoaWxkX3N0ZG91dF8gPSAtMTsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICBpZiAoY2hpbGRfc3RkaW5fICE9IC0xKSB7Ci0gICAgLy8gQ2hp
bGQgZGlkIG5vdCBmaW5pc2ggcmVhZGluZyBpbnB1dCBiZWZvcmUgaXQgY2xvc2VkIHRoZSBvdXRw
dXQuCi0gICAgLy8gUHJlc3VtYWJseSBpdCBleGl0ZWQgd2l0aCBhbiBlcnJvci4KLSAgICBjbG9z
ZShjaGlsZF9zdGRpbl8pOwotICAgIGNoaWxkX3N0ZGluXyA9IC0xOwotICB9Ci0KLSAgaW50IHN0
YXR1czsKLSAgd2hpbGUgKHdhaXRwaWQoY2hpbGRfcGlkXywgJnN0YXR1cywgMCkgPT0gLTEpIHsK
LSAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKLSAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJ3
YWl0cGlkOiAiIDw8IHN0cmVycm9yKGVycm5vKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXN0b3Jl
IFNJR1BJUEUgaGFuZGxpbmcuCi0gIHNpZ25hbChTSUdQSVBFLCBvbGRfcGlwZV9oYW5kbGVyKTsK
LQotICBpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHsKLSAgICBpZiAoV0VYSVRTVEFUVVMoc3RhdHVz
KSAhPSAwKSB7Ci0gICAgICBpbnQgZXJyb3JfY29kZSA9IFdFWElUU1RBVFVTKHN0YXR1cyk7Ci0g
ICAgICAqZXJyb3IgPSBzdHJpbmdzOjpTdWJzdGl0dXRlKAotICAgICAgICAgICJQbHVnaW4gZmFp
bGVkIHdpdGggc3RhdHVzIGNvZGUgJDAuIiwgZXJyb3JfY29kZSk7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICB9IGVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKLSAgICBpbnQg
c2lnbmFsID0gV1RFUk1TSUcoc3RhdHVzKTsKLSAgICAqZXJyb3IgPSBzdHJpbmdzOjpTdWJzdGl0
dXRlKAotICAgICAgICAiUGx1Z2luIGtpbGxlZCBieSBzaWduYWwgJDAuIiwgc2lnbmFsKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0gZWxzZSB7Ci0gICAgKmVycm9yID0gIk5laXRoZXIgV0VYSVRT
VEFUVVMgbm9yIFdURVJNU0lHIGlzIHRydWU/IjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQot
ICBpZiAoIW91dHB1dC0+UGFyc2VGcm9tU3RyaW5nKG91dHB1dF9kYXRhKSkgewotICAgICplcnJv
ciA9ICJQbHVnaW4gb3V0cHV0IGlzIHVucGFyc2VhYmxlOiAiICsgQ0VzY2FwZShvdXRwdXRfZGF0
YSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLSNlbmRp
ZiAgLy8gIV9XSU4zMgotCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFj
ZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL3N1YnByb2Nlc3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci9zdWJwcm9jZXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MTM4NjMx
NDRiZTdjNTM0MDY4MTU4ZmFlMmZlYzNmMGE0Mzk5MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3N1YnBy
b2Nlc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9u
IFZhcmRhKQotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9TVUJQUk9DRVNTX0hf
XwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NUElMRVJfU1VCUFJPQ0VTU19IX18KLQotI2lm
ZGVmIF9XSU4zMgotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOICAgLy8gcmlnaHQuLi4KLSNp
bmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxzZSAgLy8gX1dJTjMyCi0jaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYgIC8vICFfV0lOMzIKLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1jbGFzcyBNZXNzYWdl
OwotCi1uYW1lc3BhY2UgY29tcGlsZXIgewotCi0vLyBVdGlsaXR5IGNsYXNzIGZvciBsYXVuY2hp
bmcgc3ViLXByb2Nlc3Nlcy4KLWNsYXNzIExJQlBST1RPQ19FWFBPUlQgU3VicHJvY2VzcyB7Ci0g
cHVibGljOgotICBTdWJwcm9jZXNzKCk7Ci0gIH5TdWJwcm9jZXNzKCk7Ci0KLSAgZW51bSBTZWFy
Y2hNb2RlIHsKLSAgICBTRUFSQ0hfUEFUSCwgICAvLyBVc2UgUEFUSCBlbnZpcm9ubWVudCB2YXJp
YWJsZS4KLSAgICBFWEFDVF9OQU1FICAgICAvLyBQcm9ncmFtIGlzIGFuIGV4YWN0IGZpbGUgbmFt
ZTsgZG9uJ3QgdXNlIHRoZSBQQVRILgotICB9OwotCi0gIC8vIFN0YXJ0IHRoZSBzdWJwcm9jZXNz
LiAgQ3VycmVudGx5IHdlIGRvbid0IHByb3ZpZGUgYSB3YXkgdG8gc3BlY2lmeQotICAvLyBhcmd1
bWVudHMgYXMgcHJvdG9jIHBsdWdpbnMgZG9uJ3QgaGF2ZSBhbnkuCi0gIHZvaWQgU3RhcnQoY29u
c3Qgc3RyaW5nJiBwcm9ncmFtLCBTZWFyY2hNb2RlIHNlYXJjaF9tb2RlKTsKLQotICAvLyBTZXJp
YWxpemUgdGhlIGlucHV0IG1lc3NhZ2UgYW5kIHBpcGUgaXQgdG8gdGhlIHN1YnByb2Nlc3MncyBz
dGRpbiwgdGhlbgotICAvLyBjbG9zZSB0aGUgcGlwZS4gIE1lYW53aGlsZSwgcmVhZCBmcm9tIHRo
ZSBzdWJwcm9jZXNzJ3Mgc3Rkb3V0IGFuZCBwYXJzZQotICAvLyB0aGUgZGF0YSBpbnRvICpvdXRw
dXQuICBBbGwgdGhpcyBpcyBkb25lIGNhcmVmdWxseSB0byBhdm9pZCBkZWFkbG9ja3MuCi0gIC8v
IFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgT24gYW55IHNvcnQgb2YgZXJyb3IsIHJldHVy
bnMgZmFsc2UgYW5kIHNldHMKLSAgLy8gKmVycm9yIHRvIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBy
b2JsZW0uCi0gIGJvb2wgQ29tbXVuaWNhdGUoY29uc3QgTWVzc2FnZSYgaW5wdXQsIE1lc3NhZ2Uq
IG91dHB1dCwgc3RyaW5nKiBlcnJvcik7Ci0KLSNpZmRlZiBfV0lOMzIKLSAgLy8gR2l2ZW4gYW4g
ZXJyb3IgY29kZSwgcmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuICBUaGlz
IGlzCi0gIC8vIGRlZmluZWQgaGVyZSBzbyB0aGF0IENvbW1hbmRMaW5lSW50ZXJmYWNlIGNhbiBz
aGFyZSBpdC4KLSAgc3RhdGljIHN0cmluZyBXaW4zMkVycm9yTWVzc2FnZShEV09SRCBlcnJvcl9j
b2RlKTsKLSNlbmRpZgotCi0gcHJpdmF0ZToKLSNpZmRlZiBfV0lOMzIKLSAgRFdPUkQgcHJvY2Vz
c19zdGFydF9lcnJvcl87Ci0gIEhBTkRMRSBjaGlsZF9oYW5kbGVfOwotCi0gIC8vIFRoZSBmaWxl
IGhhbmRsZXMgZm9yIG91ciBlbmQgb2YgdGhlIGNoaWxkJ3MgcGlwZXMuICBXZSBjbG9zZSBlYWNo
IGFuZAotICAvLyBzZXQgaXQgdG8gTlVMTCB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gIEhBTkRM
RSBjaGlsZF9zdGRpbl87Ci0gIEhBTkRMRSBjaGlsZF9zdGRvdXRfOwotCi0jZWxzZSAgLy8gX1dJ
TjMyCi0gIHBpZF90IGNoaWxkX3BpZF87Ci0KLSAgLy8gVGhlIGZpbGUgZGVzY3JpcHRvcnMgZm9y
IG91ciBlbmQgb2YgdGhlIGNoaWxkJ3MgcGlwZXMuICBXZSBjbG9zZSBlYWNoIGFuZAotICAvLyBz
ZXQgaXQgdG8gLTEgd2hlbiBubyBsb25nZXIgbmVlZGVkLgotICBpbnQgY2hpbGRfc3RkaW5fOwot
ICBpbnQgY2hpbGRfc3Rkb3V0XzsKLQotI2VuZGlmICAvLyAhX1dJTjMyCi19OwotCi19ICAvLyBu
YW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT01QSUxFUl9TVUJQUk9D
RVNTX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3Rlc3RfcGx1
Z2luLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3Rlc3RfcGx1Z2luLmNjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODMwZmQ3MGEwZGYwODJiYzAzMDM3YjRiYTIwMTI1
NmMzNzQ0MWE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci90ZXN0X3BsdWdpbi5jYworKysgL2Rldi9udWxs
CkBAIC0xLDUxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLwotLy8gVGhpcyBp
cyBhIGR1bW15IGNvZGUgZ2VuZXJhdG9yIHBsdWdpbiB1c2VkIGJ5Ci0vLyBjb21tYW5kX2xpbmVf
aW50ZXJmYWNlX3VuaXR0ZXN0LgotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4uaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvbW9ja19jb2RlX2dlbmVyYXRvci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLWludCBtYWluKGludCBh
cmdjLCBjaGFyKiBhcmd2W10pIHsKLSNpZmRlZiBfTVNDX1ZFUgotICAvLyBEb24ndCBwcmludCBh
IHNpbGx5IG1lc3NhZ2Ugb3Igc3RpY2sgYSBtb2RhbCBkaWFsb2cgYm94IGluIG15IGZhY2UsCi0g
IC8vIHBsZWFzZS4KLSAgX3NldF9hYm9ydF9iZWhhdmlvcigwLCB+MCk7Ci0jZW5kaWYgIC8vICFf
TVNDX1ZFUgotCi0gIGdvb2dsZTo6cHJvdG9idWY6OmNvbXBpbGVyOjpNb2NrQ29kZUdlbmVyYXRv
ciBnZW5lcmF0b3IoInRlc3RfcGx1Z2luIik7Ci0gIHJldHVybiBnb29nbGU6OnByb3RvYnVmOjpj
b21waWxlcjo6UGx1Z2luTWFpbihhcmdjLCBhcmd2LCAmZ2VuZXJhdG9yKTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci96aXBfb3V0cHV0X3VuaXR0ZXN0LnNoIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3ppcF9vdXRwdXRfdW5pdHRlc3Quc2gKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDZmYzcxMzZkZmEwNmQ1ODlhNzc4NmJmNDQxMjc0Mjhj
NjVlYjYyZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3ppcF9vdXRwdXRfdW5pdHRlc3Quc2gKKysrIC9k
ZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA5IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0j
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyBBdXRob3I6
IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0jCi0jIFRlc3QgcHJvdG9jJ3Mgemlw
IG91dHB1dCBtb2RlLgotCi1mYWlsKCkgewotICBlY2hvICIkQCIgPiYyCi0gIGV4aXQgMQotfQot
Ci1URVNUX1RNUERJUj0uCi1QUk9UT0M9Li9wcm90b2MKLQotZWNobyAnCi0gIHN5bnRheCA9ICJw
cm90bzIiOwotICBvcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7Ci0gIG9wdGlvbiBq
YXZhX3BhY2thZ2UgPSAidGVzdC5qYXIiOwotICBvcHRpb24gamF2YV9vdXRlcl9jbGFzc25hbWUg
PSAiT3V0ZXIiOwotICBtZXNzYWdlIEZvbyB7fQotICBtZXNzYWdlIEJhciB7fQotJyA+ICRURVNU
X1RNUERJUi90ZXN0emlwLnByb3RvCi0KLSRQUk9UT0MgXAotICAgIC0tY3BwX291dD0kVEVTVF9U
TVBESVIvdGVzdHppcC56aXAgLS1weXRob25fb3V0PSRURVNUX1RNUERJUi90ZXN0emlwLnppcCBc
Ci0gICAgLS1qYXZhX291dD0kVEVTVF9UTVBESVIvdGVzdHppcC5qYXIgLUkkVEVTVF9UTVBESVIg
dGVzdHppcC5wcm90byBcCi0gICAgfHwgZmFpbCAncHJvdG9jIGZhaWxlZC4nCi0KLWVjaG8gIlRl
c3Rpbmcgb3V0cHV0IHRvIHppcC4uLiIKLWlmIHVuemlwIC1oID4gL2Rldi9udWxsOyB0aGVuCi0g
IHVuemlwIC10ICRURVNUX1RNUERJUi90ZXN0emlwLnppcCA+ICRURVNUX1RNUERJUi90ZXN0emlw
Lmxpc3QgfHwgZmFpbCAndW56aXAgZmFpbGVkLicKLQotICBncmVwICd0ZXN0aW5nOiB0ZXN0emlw
XC5wYlwuY2MgKk9LJCcgJFRFU1RfVE1QRElSL3Rlc3R6aXAubGlzdCA+IC9kZXYvbnVsbCBcCi0g
ICAgfHwgZmFpbCAndGVzdHppcC5wYi5jYyBub3QgZm91bmQgaW4gb3V0cHV0IHppcC4nCi0gIGdy
ZXAgJ3Rlc3Rpbmc6IHRlc3R6aXBcLnBiXC5oICpPSyQnICRURVNUX1RNUERJUi90ZXN0emlwLmxp
c3QgPiAvZGV2L251bGwgXAotICAgIHx8IGZhaWwgJ3Rlc3R6aXAucGIuaCBub3QgZm91bmQgaW4g
b3V0cHV0IHppcC4nCi0gIGdyZXAgJ3Rlc3Rpbmc6IHRlc3R6aXBfcGIyXC5weSAqT0skJyAkVEVT
VF9UTVBESVIvdGVzdHppcC5saXN0ID4gL2Rldi9udWxsIFwKLSAgICB8fCBmYWlsICd0ZXN0emlw
X3BiMi5weSBub3QgZm91bmQgaW4gb3V0cHV0IHppcC4nCi0gIGdyZXAgLWkgJ21hbmlmZXN0JyAk
VEVTVF9UTVBESVIvdGVzdHppcC5saXN0ID4gL2Rldi9udWxsIFwKLSAgICAmJiBmYWlsICdaaXAg
ZmlsZSBjb250YWluZWQgbWFuaWZlc3QuJwotZWxzZQotICBlY2hvICJXYXJuaW5nOiAgJ3Vuemlw
JyBjb21tYW5kIG5vdCBhdmFpbGFibGUuICBTa2lwcGluZyB0ZXN0LiIKLWZpCi0KLWVjaG8gIlRl
c3Rpbmcgb3V0cHV0IHRvIGphci4uLiIKLWlmIGphciBjICRURVNUX1RNUERJUi90ZXN0emlwLnBy
b3RvID4gL2Rldi9udWxsOyB0aGVuCi0gIGphciB0ZiAkVEVTVF9UTVBESVIvdGVzdHppcC5qYXIg
PiAkVEVTVF9UTVBESVIvdGVzdHppcC5saXN0IHx8IGZhaWwgJ2phciBmYWlsZWQuJwotCi0gIGdy
ZXAgJ150ZXN0L2phci9Gb29cLmphdmEkJyAkVEVTVF9UTVBESVIvdGVzdHppcC5saXN0ID4gL2Rl
di9udWxsIFwKLSAgICB8fCBmYWlsICdGb28uamF2YSBub3QgZm91bmQgaW4gb3V0cHV0IGphci4n
Ci0gIGdyZXAgJ150ZXN0L2phci9CYXJcLmphdmEkJyAkVEVTVF9UTVBESVIvdGVzdHppcC5saXN0
ID4gL2Rldi9udWxsIFwKLSAgICB8fCBmYWlsICdCYXIuamF2YSBub3QgZm91bmQgaW4gb3V0cHV0
IGphci4nCi0gIGdyZXAgJ150ZXN0L2phci9PdXRlclwuamF2YSQnICRURVNUX1RNUERJUi90ZXN0
emlwLmxpc3QgPiAvZGV2L251bGwgXAotICAgIHx8IGZhaWwgJ091dGVyLmphdmEgbm90IGZvdW5k
IGluIG91dHB1dCBqYXIuJwotICBncmVwICdeTUVUQS1JTkYvTUFOSUZFU1RcLk1GJCcgJFRFU1Rf
VE1QRElSL3Rlc3R6aXAubGlzdCA+IC9kZXYvbnVsbCBcCi0gICAgfHwgZmFpbCAnTWFuaWZlc3Qg
bm90IGZvdW5kIGluIG91dHB1dCBqYXIuJwotZWxzZQotICBlY2hvICJXYXJuaW5nOiAgJ2phcicg
Y29tbWFuZCBub3QgYXZhaWxhYmxlLiAgU2tpcHBpbmcgdGVzdC4iCi1maQotCi1lY2hvIFBBU1MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci96aXBfd3JpdGVyLmNjIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3ppcF93cml0ZXIuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQ1OGNjZWQyOWQyYjExYTI3Yzg3NzU3ZWY0MzU2MmYzZDNlMzE4MTYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2NvbXBpbGVyL3ppcF93cml0ZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMTgg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGFtYnJvc2VAZ29vZ2xlLmNvbSAo
QW1icm9zZSBGZWluc3RlaW4pLAotLy8gICAgICAgICBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9u
IFZhcmRhKQotLy8KLS8vIEJhc2VkIG9uIGh0dHA6Ly93d3cucGt3YXJlLmNvbS9kb2N1bWVudHMv
Y2FzZXN0dWRpZXMvQVBQTk9URS5UWFQKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21w
aWxlci96aXBfd3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0
cmVhbS5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1l
c3BhY2UgY29tcGlsZXIgewotCi1zdGF0aWMgY29uc3QgdWludDMyIGtDUkMzMlRhYmxlWzI1Nl0g
PSB7Ci0gIDB4MDAwMDAwMDAsIDB4NzcwNzMwOTYsIDB4ZWUwZTYxMmMsIDB4OTkwOTUxYmEsIDB4
MDc2ZGM0MTksIDB4NzA2YWY0OGYsCi0gIDB4ZTk2M2E1MzUsIDB4OWU2NDk1YTMsIDB4MGVkYjg4
MzIsIDB4NzlkY2I4YTQsIDB4ZTBkNWU5MWUsIDB4OTdkMmQ5ODgsCi0gIDB4MDliNjRjMmIsIDB4
N2ViMTdjYmQsIDB4ZTdiODJkMDcsIDB4OTBiZjFkOTEsIDB4MWRiNzEwNjQsIDB4NmFiMDIwZjIs
Ci0gIDB4ZjNiOTcxNDgsIDB4ODRiZTQxZGUsIDB4MWFkYWQ0N2QsIDB4NmRkZGU0ZWIsIDB4ZjRk
NGI1NTEsIDB4ODNkMzg1YzcsCi0gIDB4MTM2Yzk4NTYsIDB4NjQ2YmE4YzAsIDB4ZmQ2MmY5N2Es
IDB4OGE2NWM5ZWMsIDB4MTQwMTVjNGYsIDB4NjMwNjZjZDksCi0gIDB4ZmEwZjNkNjMsIDB4OGQw
ODBkZjUsIDB4M2I2ZTIwYzgsIDB4NGM2OTEwNWUsIDB4ZDU2MDQxZTQsIDB4YTI2NzcxNzIsCi0g
IDB4M2MwM2U0ZDEsIDB4NGIwNGQ0NDcsIDB4ZDIwZDg1ZmQsIDB4YTUwYWI1NmIsIDB4MzViNWE4
ZmEsIDB4NDJiMjk4NmMsCi0gIDB4ZGJiYmM5ZDYsIDB4YWNiY2Y5NDAsIDB4MzJkODZjZTMsIDB4
NDVkZjVjNzUsIDB4ZGNkNjBkY2YsIDB4YWJkMTNkNTksCi0gIDB4MjZkOTMwYWMsIDB4NTFkZTAw
M2EsIDB4YzhkNzUxODAsIDB4YmZkMDYxMTYsIDB4MjFiNGY0YjUsIDB4NTZiM2M0MjMsCi0gIDB4
Y2ZiYTk1OTksIDB4YjhiZGE1MGYsIDB4MjgwMmI4OWUsIDB4NWYwNTg4MDgsIDB4YzYwY2Q5YjIs
IDB4YjEwYmU5MjQsCi0gIDB4MmY2ZjdjODcsIDB4NTg2ODRjMTEsIDB4YzE2MTFkYWIsIDB4YjY2
NjJkM2QsIDB4NzZkYzQxOTAsIDB4MDFkYjcxMDYsCi0gIDB4OThkMjIwYmMsIDB4ZWZkNTEwMmEs
IDB4NzFiMTg1ODksIDB4MDZiNmI1MWYsIDB4OWZiZmU0YTUsIDB4ZThiOGQ0MzMsCi0gIDB4Nzgw
N2M5YTIsIDB4MGYwMGY5MzQsIDB4OTYwOWE4OGUsIDB4ZTEwZTk4MTgsIDB4N2Y2YTBkYmIsIDB4
MDg2ZDNkMmQsCi0gIDB4OTE2NDZjOTcsIDB4ZTY2MzVjMDEsIDB4NmI2YjUxZjQsIDB4MWM2YzYx
NjIsIDB4ODU2NTMwZDgsIDB4ZjI2MjAwNGUsCi0gIDB4NmMwNjk1ZWQsIDB4MWIwMWE1N2IsIDB4
ODIwOGY0YzEsIDB4ZjUwZmM0NTcsIDB4NjViMGQ5YzYsIDB4MTJiN2U5NTAsCi0gIDB4OGJiZWI4
ZWEsIDB4ZmNiOTg4N2MsIDB4NjJkZDFkZGYsIDB4MTVkYTJkNDksIDB4OGNkMzdjZjMsIDB4ZmJk
NDRjNjUsCi0gIDB4NGRiMjYxNTgsIDB4M2FiNTUxY2UsIDB4YTNiYzAwNzQsIDB4ZDRiYjMwZTIs
IDB4NGFkZmE1NDEsIDB4M2RkODk1ZDcsCi0gIDB4YTRkMWM0NmQsIDB4ZDNkNmY0ZmIsIDB4NDM2
OWU5NmEsIDB4MzQ2ZWQ5ZmMsIDB4YWQ2Nzg4NDYsIDB4ZGE2MGI4ZDAsCi0gIDB4NDQwNDJkNzMs
IDB4MzMwMzFkZTUsIDB4YWEwYTRjNWYsIDB4ZGQwZDdjYzksIDB4NTAwNTcxM2MsIDB4MjcwMjQx
YWEsCi0gIDB4YmUwYjEwMTAsIDB4YzkwYzIwODYsIDB4NTc2OGI1MjUsIDB4MjA2Zjg1YjMsIDB4
Yjk2NmQ0MDksIDB4Y2U2MWU0OWYsCi0gIDB4NWVkZWY5MGUsIDB4MjlkOWM5OTgsIDB4YjBkMDk4
MjIsIDB4YzdkN2E4YjQsIDB4NTliMzNkMTcsIDB4MmViNDBkODEsCi0gIDB4YjdiZDVjM2IsIDB4
YzBiYTZjYWQsIDB4ZWRiODgzMjAsIDB4OWFiZmIzYjYsIDB4MDNiNmUyMGMsIDB4NzRiMWQyOWEs
Ci0gIDB4ZWFkNTQ3MzksIDB4OWRkMjc3YWYsIDB4MDRkYjI2MTUsIDB4NzNkYzE2ODMsIDB4ZTM2
MzBiMTIsIDB4OTQ2NDNiODQsCi0gIDB4MGQ2ZDZhM2UsIDB4N2E2YTVhYTgsIDB4ZTQwZWNmMGIs
IDB4OTMwOWZmOWQsIDB4MGEwMGFlMjcsIDB4N2QwNzllYjEsCi0gIDB4ZjAwZjkzNDQsIDB4ODcw
OGEzZDIsIDB4MWUwMWYyNjgsIDB4NjkwNmMyZmUsIDB4Zjc2MjU3NWQsIDB4ODA2NTY3Y2IsCi0g
IDB4MTk2YzM2NzEsIDB4NmU2YjA2ZTcsIDB4ZmVkNDFiNzYsIDB4ODlkMzJiZTAsIDB4MTBkYTdh
NWEsIDB4NjdkZDRhY2MsCi0gIDB4ZjliOWRmNmYsIDB4OGViZWVmZjksIDB4MTdiN2JlNDMsIDB4
NjBiMDhlZDUsIDB4ZDZkNmEzZTgsIDB4YTFkMTkzN2UsCi0gIDB4MzhkOGMyYzQsIDB4NGZkZmYy
NTIsIDB4ZDFiYjY3ZjEsIDB4YTZiYzU3NjcsIDB4M2ZiNTA2ZGQsIDB4NDhiMjM2NGIsCi0gIDB4
ZDgwZDJiZGEsIDB4YWYwYTFiNGMsIDB4MzYwMzRhZjYsIDB4NDEwNDdhNjAsIDB4ZGY2MGVmYzMs
IDB4YTg2N2RmNTUsCi0gIDB4MzE2ZThlZWYsIDB4NDY2OWJlNzksIDB4Y2I2MWIzOGMsIDB4YmM2
NjgzMWEsIDB4MjU2ZmQyYTAsIDB4NTI2OGUyMzYsCi0gIDB4Y2MwYzc3OTUsIDB4YmIwYjQ3MDMs
IDB4MjIwMjE2YjksIDB4NTUwNTI2MmYsIDB4YzViYTNiYmUsIDB4YjJiZDBiMjgsCi0gIDB4MmJi
NDVhOTIsIDB4NWNiMzZhMDQsIDB4YzJkN2ZmYTcsIDB4YjVkMGNmMzEsIDB4MmNkOTllOGIsIDB4
NWJkZWFlMWQsCi0gIDB4OWI2NGMyYjAsIDB4ZWM2M2YyMjYsIDB4NzU2YWEzOWMsIDB4MDI2ZDkz
MGEsIDB4OWMwOTA2YTksIDB4ZWIwZTM2M2YsCi0gIDB4NzIwNzY3ODUsIDB4MDUwMDU3MTMsIDB4
OTViZjRhODIsIDB4ZTJiODdhMTQsIDB4N2JiMTJiYWUsIDB4MGNiNjFiMzgsCi0gIDB4OTJkMjhl
OWIsIDB4ZTVkNWJlMGQsIDB4N2NkY2VmYjcsIDB4MGJkYmRmMjEsIDB4ODZkM2QyZDQsIDB4ZjFk
NGUyNDIsCi0gIDB4NjhkZGIzZjgsIDB4MWZkYTgzNmUsIDB4ODFiZTE2Y2QsIDB4ZjZiOTI2NWIs
IDB4NmZiMDc3ZTEsIDB4MThiNzQ3NzcsCi0gIDB4ODgwODVhZTYsIDB4ZmYwZjZhNzAsIDB4NjYw
NjNiY2EsIDB4MTEwMTBiNWMsIDB4OGY2NTllZmYsIDB4Zjg2MmFlNjksCi0gIDB4NjE2YmZmZDMs
IDB4MTY2Y2NmNDUsIDB4YTAwYWUyNzgsIDB4ZDcwZGQyZWUsIDB4NGUwNDgzNTQsIDB4MzkwM2Iz
YzIsCi0gIDB4YTc2NzI2NjEsIDB4ZDA2MDE2ZjcsIDB4NDk2OTQ3NGQsIDB4M2U2ZTc3ZGIsIDB4
YWVkMTZhNGEsIDB4ZDlkNjVhZGMsCi0gIDB4NDBkZjBiNjYsIDB4MzdkODNiZjAsIDB4YTliY2Fl
NTMsIDB4ZGViYjllYzUsIDB4NDdiMmNmN2YsIDB4MzBiNWZmZTksCi0gIDB4YmRiZGYyMWMsIDB4
Y2FiYWMyOGEsIDB4NTNiMzkzMzAsIDB4MjRiNGEzYTYsIDB4YmFkMDM2MDUsIDB4Y2RkNzA2OTMs
Ci0gIDB4NTRkZTU3MjksIDB4MjNkOTY3YmYsIDB4YjM2NjdhMmUsIDB4YzQ2MTRhYjgsIDB4NWQ2
ODFiMDIsIDB4MmE2ZjJiOTQsCi0gIDB4YjQwYmJlMzcsIDB4YzMwYzhlYTEsIDB4NWEwNWRmMWIs
IDB4MmQwMmVmOGQKLX07Ci0KLXN0YXRpYyB1aW50MzIgQ29tcHV0ZUNSQzMyKGNvbnN0IHN0cmlu
ZyAmYnVmKSB7Ci0gIHVpbnQzMiB4ID0gfjBVOwotICBmb3IgKGludCBpID0gMDsgaSA8IGJ1Zi5z
aXplKCk7ICsraSkgewotICAgIHVuc2lnbmVkIGNoYXIgYyA9IGJ1ZltpXTsKLSAgICB4ID0ga0NS
QzMyVGFibGVbKHggXiBjKSAmIDB4ZmZdIF4gKHggPj4gOCk7Ci0gIH0KLSAgcmV0dXJuIH54Owot
fQotCi1zdGF0aWMgdm9pZCBXcml0ZVNob3J0KGlvOjpDb2RlZE91dHB1dFN0cmVhbSAqb3V0LCB1
aW50MTYgdmFsKSB7Ci0gIHVpbnQ4IHBbMl07Ci0gIHBbMF0gPSBzdGF0aWNfY2FzdDx1aW50OD4o
dmFsKTsKLSAgcFsxXSA9IHN0YXRpY19jYXN0PHVpbnQ4Pih2YWwgPj4gOCk7Ci0gIG91dC0+V3Jp
dGVSYXcocCwgMik7Ci19Ci0KLVppcFdyaXRlcjo6WmlwV3JpdGVyKGlvOjpaZXJvQ29weU91dHB1
dFN0cmVhbSogcmF3X291dHB1dCkKLSAgOiByYXdfb3V0cHV0XyhyYXdfb3V0cHV0KSB7fQotWmlw
V3JpdGVyOjp+WmlwV3JpdGVyKCkge30KLQotYm9vbCBaaXBXcml0ZXI6OldyaXRlKGNvbnN0IHN0
cmluZyYgZmlsZW5hbWUsIGNvbnN0IHN0cmluZyYgY29udGVudHMpIHsKLSAgRmlsZUluZm8gaW5m
bzsKLQotICBpbmZvLm5hbWUgPSBmaWxlbmFtZTsKLSAgdWludDE2IGZpbGVuYW1lX3NpemUgPSBm
aWxlbmFtZS5zaXplKCk7Ci0gIGluZm8ub2Zmc2V0ID0gcmF3X291dHB1dF8tPkJ5dGVDb3VudCgp
OwotICBpbmZvLnNpemUgPSBjb250ZW50cy5zaXplKCk7Ci0gIGluZm8uY3JjMzIgPSBDb21wdXRl
Q1JDMzIoY29udGVudHMpOwotCi0gIGZpbGVzXy5wdXNoX2JhY2soaW5mbyk7Ci0KLSAgLy8gd3Jp
dGUgZmlsZSBoZWFkZXIKLSAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dChyYXdfb3V0cHV0
Xyk7Ci0gIG91dHB1dC5Xcml0ZUxpdHRsZUVuZGlhbjMyKDB4MDQwMzRiNTApOyAgLy8gbWFnaWMK
LSAgV3JpdGVTaG9ydCgmb3V0cHV0LCAxMCk7ICAvLyB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0
Ci0gIFdyaXRlU2hvcnQoJm91dHB1dCwgMCk7ICAvLyBmbGFncwotICBXcml0ZVNob3J0KCZvdXRw
dXQsIDApOyAgLy8gY29tcHJlc3Npb24gbWV0aG9kOiBzdG9yZWQKLSAgV3JpdGVTaG9ydCgmb3V0
cHV0LCAwKTsgIC8vIGxhc3QgbW9kaWZpZWQgdGltZQotICBXcml0ZVNob3J0KCZvdXRwdXQsIDAp
OyAgLy8gbGFzdCBtb2RpZmllZCBkYXRlCi0gIG91dHB1dC5Xcml0ZUxpdHRsZUVuZGlhbjMyKGlu
Zm8uY3JjMzIpOyAgLy8gY3JjLTMyCi0gIG91dHB1dC5Xcml0ZUxpdHRsZUVuZGlhbjMyKGluZm8u
c2l6ZSk7ICAvLyBjb21wcmVzc2VkIHNpemUKLSAgb3V0cHV0LldyaXRlTGl0dGxlRW5kaWFuMzIo
aW5mby5zaXplKTsgIC8vIHVuY29tcHJlc3NlZCBzaXplCi0gIFdyaXRlU2hvcnQoJm91dHB1dCwg
ZmlsZW5hbWVfc2l6ZSk7ICAvLyBmaWxlIG5hbWUgbGVuZ3RoCi0gIFdyaXRlU2hvcnQoJm91dHB1
dCwgMCk7ICAgLy8gZXh0cmEgZmllbGQgbGVuZ3RoCi0gIG91dHB1dC5Xcml0ZVN0cmluZyhmaWxl
bmFtZSk7ICAvLyBmaWxlIG5hbWUKLSAgb3V0cHV0LldyaXRlU3RyaW5nKGNvbnRlbnRzKTsgIC8v
IGZpbGUgZGF0YQotCi0gIHJldHVybiAhb3V0cHV0LkhhZEVycm9yKCk7Ci19Ci0KLWJvb2wgWmlw
V3JpdGVyOjpXcml0ZURpcmVjdG9yeSgpIHsKLSAgdWludDE2IG51bV9lbnRyaWVzID0gZmlsZXNf
LnNpemUoKTsKLSAgdWludDMyIGRpcl9vZnMgPSByYXdfb3V0cHV0Xy0+Qnl0ZUNvdW50KCk7Ci0K
LSAgLy8gd3JpdGUgY2VudHJhbCBkaXJlY3RvcnkKLSAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91
dHB1dChyYXdfb3V0cHV0Xyk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7ICsr
aSkgewotICAgIGNvbnN0IHN0cmluZyAmZmlsZW5hbWUgPSBmaWxlc19baV0ubmFtZTsKLSAgICB1
aW50MTYgZmlsZW5hbWVfc2l6ZSA9IGZpbGVuYW1lLnNpemUoKTsKLSAgICB1aW50MzIgY3JjMzIg
PSBmaWxlc19baV0uY3JjMzI7Ci0gICAgdWludDMyIHNpemUgPSBmaWxlc19baV0uc2l6ZTsKLSAg
ICB1aW50MzIgb2Zmc2V0ID0gZmlsZXNfW2ldLm9mZnNldDsKLQotICAgIG91dHB1dC5Xcml0ZUxp
dHRsZUVuZGlhbjMyKDB4MDIwMTRiNTApOyAgLy8gbWFnaWMKLSAgICBXcml0ZVNob3J0KCZvdXRw
dXQsIDEwKTsgIC8vIHZlcnNpb24gbWFkZSBieQotICAgIFdyaXRlU2hvcnQoJm91dHB1dCwgMTAp
OyAgLy8gdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdAotICAgIFdyaXRlU2hvcnQoJm91dHB1dCwg
MCk7ICAvLyBmbGFncwotICAgIFdyaXRlU2hvcnQoJm91dHB1dCwgMCk7ICAvLyBjb21wcmVzc2lv
biBtZXRob2Q6IHN0b3JlZAotICAgIFdyaXRlU2hvcnQoJm91dHB1dCwgMCk7ICAvLyBsYXN0IG1v
ZGlmaWVkIHRpbWUKLSAgICBXcml0ZVNob3J0KCZvdXRwdXQsIDApOyAgLy8gbGFzdCBtb2RpZmll
ZCBkYXRlCi0gICAgb3V0cHV0LldyaXRlTGl0dGxlRW5kaWFuMzIoY3JjMzIpOyAgLy8gY3JjLTMy
Ci0gICAgb3V0cHV0LldyaXRlTGl0dGxlRW5kaWFuMzIoc2l6ZSk7ICAvLyBjb21wcmVzc2VkIHNp
emUKLSAgICBvdXRwdXQuV3JpdGVMaXR0bGVFbmRpYW4zMihzaXplKTsgIC8vIHVuY29tcHJlc3Nl
ZCBzaXplCi0gICAgV3JpdGVTaG9ydCgmb3V0cHV0LCBmaWxlbmFtZV9zaXplKTsgIC8vIGZpbGUg
bmFtZSBsZW5ndGgKLSAgICBXcml0ZVNob3J0KCZvdXRwdXQsIDApOyAgIC8vIGV4dHJhIGZpZWxk
IGxlbmd0aAotICAgIFdyaXRlU2hvcnQoJm91dHB1dCwgMCk7ICAgLy8gZmlsZSBjb21tZW50IGxl
bmd0aAotICAgIFdyaXRlU2hvcnQoJm91dHB1dCwgMCk7ICAgLy8gc3RhcnRpbmcgZGlzayBudW1i
ZXIKLSAgICBXcml0ZVNob3J0KCZvdXRwdXQsIDApOyAgIC8vIGludGVybmFsIGZpbGUgYXR0cmli
dXRlcwotICAgIG91dHB1dC5Xcml0ZUxpdHRsZUVuZGlhbjMyKDApOyAgLy8gZXh0ZXJuYWwgZmls
ZSBhdHRyaWJ1dGVzCi0gICAgb3V0cHV0LldyaXRlTGl0dGxlRW5kaWFuMzIob2Zmc2V0KTsgIC8v
IGxvY2FsIGhlYWRlciBvZmZzZXQKLSAgICBvdXRwdXQuV3JpdGVTdHJpbmcoZmlsZW5hbWUpOyAg
Ly8gZmlsZSBuYW1lCi0gIH0KLSAgdWludDMyIGRpcl9sZW4gPSBvdXRwdXQuQnl0ZUNvdW50KCk7
Ci0KLSAgLy8gd3JpdGUgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IG1hcmtlcgotICBvdXRwdXQu
V3JpdGVMaXR0bGVFbmRpYW4zMigweDA2MDU0YjUwKTsgIC8vIG1hZ2ljCi0gIFdyaXRlU2hvcnQo
Jm91dHB1dCwgMCk7ICAvLyBkaXNrIG51bWJlcgotICBXcml0ZVNob3J0KCZvdXRwdXQsIDApOyAg
Ly8gZGlzayB3aXRoIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5Ci0gIFdyaXRlU2hvcnQoJm91
dHB1dCwgbnVtX2VudHJpZXMpOyAgLy8gY2VudHJhbCBkaXJlY3RvcnkgZW50cmllcyAodGhpcyBk
aXNrKQotICBXcml0ZVNob3J0KCZvdXRwdXQsIG51bV9lbnRyaWVzKTsgIC8vIGNlbnRyYWwgZGly
ZWN0b3J5IGVudHJpZXMgKHRvdGFsKQotICBvdXRwdXQuV3JpdGVMaXR0bGVFbmRpYW4zMihkaXJf
bGVuKTsgIC8vIGNlbnRyYWwgZGlyZWN0b3J5IGJ5dGUgc2l6ZQotICBvdXRwdXQuV3JpdGVMaXR0
bGVFbmRpYW4zMihkaXJfb2ZzKTsgIC8vIGNlbnRyYWwgZGlyZWN0b3J5IG9mZnNldAotICBXcml0
ZVNob3J0KCZvdXRwdXQsIDApOyAgIC8vIGNvbW1lbnQgbGVuZ3RoCi0KLSAgcmV0dXJuIG91dHB1
dC5IYWRFcnJvcigpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2NvbXBpbGVyL3ppcF93cml0ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9j
b21waWxlci96aXBfd3JpdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMmU1
MDhlMmQyNTFjMGRlMDBkMWJhNTQ5ZjVmMWJkNjE5ZWY3YzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3pp
cF93cml0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotCi0jaW5jbHVk
ZSA8dmVjdG9yPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgY29tcGlsZXIgewot
Ci1jbGFzcyBaaXBXcml0ZXIgewotIHB1YmxpYzoKLSAgWmlwV3JpdGVyKGlvOjpaZXJvQ29weU91
dHB1dFN0cmVhbSogcmF3X291dHB1dCk7Ci0gIH5aaXBXcml0ZXIoKTsKLQotICBib29sIFdyaXRl
KGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IHN0cmluZyYgY29udGVudHMpOwotICBib29s
IFdyaXRlRGlyZWN0b3J5KCk7Ci0KLSBwcml2YXRlOgotICBzdHJ1Y3QgRmlsZUluZm8gewotICAg
IHN0cmluZyBuYW1lOwotICAgIHVpbnQzMiBvZmZzZXQ7Ci0gICAgdWludDMyIHNpemU7Ci0gICAg
dWludDMyIGNyYzMyOwotICB9OwotCi0gIGlvOjpaZXJvQ29weU91dHB1dFN0cmVhbSogcmF3X291
dHB1dF87Ci0gIHZlY3RvcjxGaWxlSW5mbz4gZmlsZXNfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNl
IGNvbXBpbGVyCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29n
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU2ZTExZmE5NjdhZDA0MDE4YTQ4Y2RkZjI4YzRjY2VkZTY2NGZlYTAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2Ny
aXB0b3IuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw2Mjc2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50
b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24g
YnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1
ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5j
bHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9kYXRhYmFzZS5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5l
cmF0ZWRfbWVzc2FnZV91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3RleHRfZm9y
bWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0Lmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2lvL3N0cnRvZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9jb2Rl
ZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vdG9rZW5pemVyLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9tdXRleC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3ByaW50Zi5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL3N1YnN0aXR1dGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWFw
X3V0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RsX3V0aWwuaD4KLQot
I3VuZGVmIFBBQ0tBR0UgIC8vIGF1dG9oZWFkZXIgI2RlZmluZXMgdGhpcy4gIDooCi0KLW5hbWVz
cGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotY29uc3QgRmllbGREZXNjcmlw
dG9yOjpDcHBUeXBlCi1GaWVsZERlc2NyaXB0b3I6OmtUeXBlVG9DcHBUeXBlTWFwW01BWF9UWVBF
ICsgMV0gPSB7Ci0gIHN0YXRpY19jYXN0PENwcFR5cGU+KDApLCAgLy8gMCBpcyByZXNlcnZlZCBm
b3IgZXJyb3JzCi0KLSAgQ1BQVFlQRV9ET1VCTEUsICAgLy8gVFlQRV9ET1VCTEUKLSAgQ1BQVFlQ
RV9GTE9BVCwgICAgLy8gVFlQRV9GTE9BVAotICBDUFBUWVBFX0lOVDY0LCAgICAvLyBUWVBFX0lO
VDY0Ci0gIENQUFRZUEVfVUlOVDY0LCAgIC8vIFRZUEVfVUlOVDY0Ci0gIENQUFRZUEVfSU5UMzIs
ICAgIC8vIFRZUEVfSU5UMzIKLSAgQ1BQVFlQRV9VSU5UNjQsICAgLy8gVFlQRV9GSVhFRDY0Ci0g
IENQUFRZUEVfVUlOVDMyLCAgIC8vIFRZUEVfRklYRUQzMgotICBDUFBUWVBFX0JPT0wsICAgICAv
LyBUWVBFX0JPT0wKLSAgQ1BQVFlQRV9TVFJJTkcsICAgLy8gVFlQRV9TVFJJTkcKLSAgQ1BQVFlQ
RV9NRVNTQUdFLCAgLy8gVFlQRV9HUk9VUAotICBDUFBUWVBFX01FU1NBR0UsICAvLyBUWVBFX01F
U1NBR0UKLSAgQ1BQVFlQRV9TVFJJTkcsICAgLy8gVFlQRV9CWVRFUwotICBDUFBUWVBFX1VJTlQz
MiwgICAvLyBUWVBFX1VJTlQzMgotICBDUFBUWVBFX0VOVU0sICAgICAvLyBUWVBFX0VOVU0KLSAg
Q1BQVFlQRV9JTlQzMiwgICAgLy8gVFlQRV9TRklYRUQzMgotICBDUFBUWVBFX0lOVDY0LCAgICAv
LyBUWVBFX1NGSVhFRDY0Ci0gIENQUFRZUEVfSU5UMzIsICAgIC8vIFRZUEVfU0lOVDMyCi0gIENQ
UFRZUEVfSU5UNjQsICAgIC8vIFRZUEVfU0lOVDY0Ci19OwotCi1jb25zdCBjaGFyICogY29uc3Qg
RmllbGREZXNjcmlwdG9yOjprVHlwZVRvTmFtZVtNQVhfVFlQRSArIDFdID0gewotICAiRVJST1Ii
LCAgICAgLy8gMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzCi0KLSAgImRvdWJsZSIsICAgIC8vIFRZ
UEVfRE9VQkxFCi0gICJmbG9hdCIsICAgICAvLyBUWVBFX0ZMT0FUCi0gICJpbnQ2NCIsICAgICAv
LyBUWVBFX0lOVDY0Ci0gICJ1aW50NjQiLCAgICAvLyBUWVBFX1VJTlQ2NAotICAiaW50MzIiLCAg
ICAgLy8gVFlQRV9JTlQzMgotICAiZml4ZWQ2NCIsICAgLy8gVFlQRV9GSVhFRDY0Ci0gICJmaXhl
ZDMyIiwgICAvLyBUWVBFX0ZJWEVEMzIKLSAgImJvb2wiLCAgICAgIC8vIFRZUEVfQk9PTAotICAi
c3RyaW5nIiwgICAgLy8gVFlQRV9TVFJJTkcKLSAgImdyb3VwIiwgICAgIC8vIFRZUEVfR1JPVVAK
LSAgIm1lc3NhZ2UiLCAgIC8vIFRZUEVfTUVTU0FHRQotICAiYnl0ZXMiLCAgICAgLy8gVFlQRV9C
WVRFUwotICAidWludDMyIiwgICAgLy8gVFlQRV9VSU5UMzIKLSAgImVudW0iLCAgICAgIC8vIFRZ
UEVfRU5VTQotICAic2ZpeGVkMzIiLCAgLy8gVFlQRV9TRklYRUQzMgotICAic2ZpeGVkNjQiLCAg
Ly8gVFlQRV9TRklYRUQ2NAotICAic2ludDMyIiwgICAgLy8gVFlQRV9TSU5UMzIKLSAgInNpbnQ2
NCIsICAgIC8vIFRZUEVfU0lOVDY0Ci19OwotCi1jb25zdCBjaGFyICogY29uc3QgRmllbGREZXNj
cmlwdG9yOjprQ3BwVHlwZVRvTmFtZVtNQVhfQ1BQVFlQRSArIDFdID0gewotICAiRVJST1IiLCAg
ICAgLy8gMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzCi0KLSAgImludDMyIiwgICAgIC8vIENQUFRZ
UEVfSU5UMzIKLSAgImludDY0IiwgICAgIC8vIENQUFRZUEVfSU5UNjQKLSAgInVpbnQzMiIsICAg
IC8vIENQUFRZUEVfVUlOVDMyCi0gICJ1aW50NjQiLCAgICAvLyBDUFBUWVBFX1VJTlQ2NAotICAi
ZG91YmxlIiwgICAgLy8gQ1BQVFlQRV9ET1VCTEUKLSAgImZsb2F0IiwgICAgIC8vIENQUFRZUEVf
RkxPQVQKLSAgImJvb2wiLCAgICAgIC8vIENQUFRZUEVfQk9PTAotICAiZW51bSIsICAgICAgLy8g
Q1BQVFlQRV9FTlVNCi0gICJzdHJpbmciLCAgICAvLyBDUFBUWVBFX1NUUklORwotICAibWVzc2Fn
ZSIsICAgLy8gQ1BQVFlQRV9NRVNTQUdFCi19OwotCi1jb25zdCBjaGFyICogY29uc3QgRmllbGRE
ZXNjcmlwdG9yOjprTGFiZWxUb05hbWVbTUFYX0xBQkVMICsgMV0gPSB7Ci0gICJFUlJPUiIsICAg
ICAvLyAwIGlzIHJlc2VydmVkIGZvciBlcnJvcnMKLQotICAib3B0aW9uYWwiLCAgLy8gTEFCRUxf
T1BUSU9OQUwKLSAgInJlcXVpcmVkIiwgIC8vIExBQkVMX1JFUVVJUkVECi0gICJyZXBlYXRlZCIs
ICAvLyBMQUJFTF9SRVBFQVRFRAotfTsKLQotY29uc3QgY2hhciogRmlsZURlc2NyaXB0b3I6OlN5
bnRheE5hbWUoRmlsZURlc2NyaXB0b3I6OlN5bnRheCBzeW50YXgpIHsKLSAgc3dpdGNoIChzeW50
YXgpIHsKLSAgICBjYXNlIFNZTlRBWF9QUk9UTzI6Ci0gICAgICByZXR1cm4gInByb3RvMiI7Ci0g
ICAgY2FzZSBTWU5UQVhfUFJPVE8zOgotICAgICAgcmV0dXJuICJwcm90bzMiOwotICAgIGNhc2Ug
U1lOVEFYX1VOS05PV046Ci0gICAgICByZXR1cm4gInVua25vd24iOwotICB9Ci0gIEdPT0dMRV9M
T0coRkFUQUwpIDw8ICJjYW4ndCByZWFjaCBoZXJlLiI7Ci0gIHJldHVybiBOVUxMOwotfQotCi1z
dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtOb25MaW5rZWRXZWFrTWVzc2FnZVJlcGxhY2VtZW50
TmFtZSA9ICJnb29nbGUucHJvdG9idWYuRW1wdHkiOwotCi0jaWYgIWRlZmluZWQoX01TQ19WRVIp
IHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBGaWVsZERlc2NyaXB0b3I6OmtNYXhOdW1i
ZXI7Ci1jb25zdCBpbnQgRmllbGREZXNjcmlwdG9yOjprRmlyc3RSZXNlcnZlZE51bWJlcjsKLWNv
bnN0IGludCBGaWVsZERlc2NyaXB0b3I6OmtMYXN0UmVzZXJ2ZWROdW1iZXI7Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIHsKLQotc3RyaW5nIFRvQ2FtZWxDYXNlKGNvbnN0IHN0cmluZyYgaW5wdXQsIGJv
b2wgbG93ZXJfZmlyc3QpIHsKLSAgYm9vbCBjYXBpdGFsaXplX25leHQgPSAhbG93ZXJfZmlyc3Q7
Ci0gIHN0cmluZyByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNlcnZlKGlucHV0LnNpemUoKSk7Ci0KLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7IGkrKykgewotICAgIGlmIChpbnB1dFtp
XSA9PSAnXycpIHsKLSAgICAgIGNhcGl0YWxpemVfbmV4dCA9IHRydWU7Ci0gICAgfSBlbHNlIGlm
IChjYXBpdGFsaXplX25leHQpIHsKLSAgICAgIC8vIE5vdGU6ICBJIGRpc3RydXN0IGN0eXBlLmgg
ZHVlIHRvIGxvY2FsZXMuCi0gICAgICBpZiAoJ2EnIDw9IGlucHV0W2ldICYmIGlucHV0W2ldIDw9
ICd6JykgewotICAgICAgICByZXN1bHQucHVzaF9iYWNrKGlucHV0W2ldIC0gJ2EnICsgJ0EnKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoX2JhY2soaW5wdXRbaV0pOwotICAg
ICAgfQotICAgICAgY2FwaXRhbGl6ZV9uZXh0ID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHJlc3VsdC5wdXNoX2JhY2soaW5wdXRbaV0pOwotICAgIH0KLSAgfQotCi0gIC8vIExvd2VyLWNh
c2UgdGhlIGZpcnN0IGxldHRlci4KLSAgaWYgKGxvd2VyX2ZpcnN0ICYmICFyZXN1bHQuZW1wdHko
KSAmJiAnQScgPD0gcmVzdWx0WzBdICYmIHJlc3VsdFswXSA8PSAnWicpIHsKLSAgICAgIHJlc3Vs
dFswXSA9IHJlc3VsdFswXSAtICdBJyArICdhJzsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19
Ci0KLS8vIEEgRGVzY3JpcHRvclBvb2wgY29udGFpbnMgYSBidW5jaCBvZiBoYXNoX21hcHMgdG8g
aW1wbGVtZW50IHRoZQotLy8gdmFyaW91cyBGaW5kKkJ5KigpIG1ldGhvZHMuICBTaW5jZSBoYXNo
dGFibGUgbG9va3VwcyBhcmUgTygxKSwgaXQncwotLy8gbW9zdCBlZmZpY2llbnQgdG8gY29uc3Ry
dWN0IGEgZml4ZWQgc2V0IG9mIGxhcmdlIGhhc2hfbWFwcyB1c2VkIGJ5Ci0vLyBhbGwgb2JqZWN0
cyBpbiB0aGUgcG9vbCByYXRoZXIgdGhhbiBjb25zdHJ1Y3Qgb25lIG9yIG1vcmUgc21hbGwKLS8v
IGhhc2hfbWFwcyBmb3IgZWFjaCBvYmplY3QuCi0vLwotLy8gVGhlIGtleXMgdG8gdGhlc2UgaGFz
aF9tYXBzIGFyZSAocGFyZW50LCBuYW1lKSBvciAocGFyZW50LCBudW1iZXIpCi0vLyBwYWlycy4g
IFVuZm9ydHVuYXRlbHkgU1RMIGRvZXNuJ3QgcHJvdmlkZSBoYXNoIGZ1bmN0aW9ucyBmb3IgcGFp
cjw+LAotLy8gc28gd2UgbXVzdCBpbnZlbnQgb3VyIG93bi4KLS8vCi0vLyBUT0RPKGtlbnRvbik6
ICBVc2UgU3RyaW5nUGllY2UgcmF0aGVyIHRoYW4gY29uc3QgY2hhciogaW4ga2V5cz8gIEl0IHdv
dWxkCi0vLyAgIGJlIGEgbG90IGNsZWFuZXIgYnV0IHdlJ2QganVzdCBoYXZlIHRvIGNvbnZlcnQg
aXQgYmFjayB0byBjb25zdCBjaGFyKgotLy8gICBmb3IgdGhlIG9wZW4gc291cmNlIHJlbGVhc2Uu
Ci0KLXR5cGVkZWYgcGFpcjxjb25zdCB2b2lkKiwgY29uc3QgY2hhcio+IFBvaW50ZXJTdHJpbmdQ
YWlyOwotCi1zdHJ1Y3QgUG9pbnRlclN0cmluZ1BhaXJFcXVhbCB7Ci0gIGlubGluZSBib29sIG9w
ZXJhdG9yKCkoY29uc3QgUG9pbnRlclN0cmluZ1BhaXImIGEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUG9pbnRlclN0cmluZ1BhaXImIGIpIGNvbnN0IHsKLSAgICByZXR1cm4gYS5m
aXJzdCA9PSBiLmZpcnN0ICYmIHN0cmNtcChhLnNlY29uZCwgYi5zZWNvbmQpID09IDA7Ci0gIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFBhaXJUeXBlPgotc3RydWN0IFBvaW50ZXJJbnRlZ2Vy
UGFpckhhc2ggewotICBzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBQYWlyVHlwZSYgcCkgY29uc3Qg
ewotICAgIC8vIEZJWE1FKGtlbnRvbik6ICBXaGF0IGlzIHRoZSBiZXN0IHdheSB0byBjb21wdXRl
IHRoaXMgaGFzaD8gIEkgaGF2ZQotICAgIC8vIG5vIGlkZWEhICBUaGlzIHNlZW1zIGEgYml0IGJl
dHRlciB0aGFuIGFuIFhPUi4KLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
cC5maXJzdCkgKiAoKDEgPDwgMTYpIC0gMSkgKyBwLnNlY29uZDsKLSAgfQotCi0jaWZkZWYgX01T
Q19WRVIKLSAgLy8gVXNlZCBvbmx5IGJ5IE1TVkMgYW5kIHBsYXRmb3JtcyB3aGVyZSBoYXNoX21h
cCBpcyBub3QgYXZhaWxhYmxlLgotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJ1Y2tldF9zaXplID0g
NDsKLSAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5fYnVja2V0cyA9IDg7Ci0jZW5kaWYKLSAgaW5s
aW5lIGJvb2wgb3BlcmF0b3IoKShjb25zdCBQYWlyVHlwZSYgYSwgY29uc3QgUGFpclR5cGUmIGIp
IGNvbnN0IHsKLSAgICByZXR1cm4gYS5maXJzdCA8IGIuZmlyc3QgfHwKLSAgICAgICAgICAoYS5m
aXJzdCA9PSBiLmZpcnN0ICYmIGEuc2Vjb25kIDwgYi5zZWNvbmQpOwotICB9Ci19OwotCi10eXBl
ZGVmIHBhaXI8Y29uc3QgRGVzY3JpcHRvciosIGludD4gRGVzY3JpcHRvckludFBhaXI7Ci10eXBl
ZGVmIHBhaXI8Y29uc3QgRW51bURlc2NyaXB0b3IqLCBpbnQ+IEVudW1JbnRQYWlyOwotCi1zdHJ1
Y3QgUG9pbnRlclN0cmluZ1BhaXJIYXNoIHsKLSAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgUG9p
bnRlclN0cmluZ1BhaXImIHApIGNvbnN0IHsKLSAgICAvLyBGSVhNRShrZW50b24pOiAgV2hhdCBp
cyB0aGUgYmVzdCB3YXkgdG8gY29tcHV0ZSB0aGlzIGhhc2g/ICBJIGhhdmUKLSAgICAvLyBubyBp
ZGVhISAgVGhpcyBzZWVtcyBhIGJpdCBiZXR0ZXIgdGhhbiBhbiBYT1IuCi0gICAgaGFzaDxjb25z
dCBjaGFyKj4gY3N0cmluZ19oYXNoOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0
cl90PihwLmZpcnN0KSAqICgoMSA8PCAxNikgLSAxKSArCi0gICAgICAgICAgIGNzdHJpbmdfaGFz
aChwLnNlY29uZCk7Ci0gIH0KLQotI2lmZGVmIF9NU0NfVkVSCi0gIC8vIFVzZWQgb25seSBieSBN
U1ZDIGFuZCBwbGF0Zm9ybXMgd2hlcmUgaGFzaF9tYXAgaXMgbm90IGF2YWlsYWJsZS4KLSAgc3Rh
dGljIGNvbnN0IHNpemVfdCBidWNrZXRfc2l6ZSA9IDQ7Ci0gIHN0YXRpYyBjb25zdCBzaXplX3Qg
bWluX2J1Y2tldHMgPSA4OwotI2VuZGlmCi0gIGlubGluZSBib29sIG9wZXJhdG9yKCkoY29uc3Qg
UG9pbnRlclN0cmluZ1BhaXImIGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUG9p
bnRlclN0cmluZ1BhaXImIGIpIGNvbnN0IHsKLSAgICBpZiAoYS5maXJzdCA8IGIuZmlyc3QpIHJl
dHVybiB0cnVlOwotICAgIGlmIChhLmZpcnN0ID4gYi5maXJzdCkgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBzdHJjbXAoYS5zZWNvbmQsIGIuc2Vjb25kKSA8IDA7Ci0gIH0KLX07Ci0KLQotc3Ry
dWN0IFN5bWJvbCB7Ci0gIGVudW0gVHlwZSB7Ci0gICAgTlVMTF9TWU1CT0wsIE1FU1NBR0UsIEZJ
RUxELCBPTkVPRiwgRU5VTSwgRU5VTV9WQUxVRSwgU0VSVklDRSwgTUVUSE9ELAotICAgIFBBQ0tB
R0UKLSAgfTsKLSAgVHlwZSB0eXBlOwotICB1bmlvbiB7Ci0gICAgY29uc3QgRGVzY3JpcHRvciog
ZGVzY3JpcHRvcjsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Rlc2NyaXB0b3I7
Ci0gICAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZl9kZXNjcmlwdG9yOwotICAgIGNvbnN0
IEVudW1EZXNjcmlwdG9yKiBlbnVtX2Rlc2NyaXB0b3I7Ci0gICAgY29uc3QgRW51bVZhbHVlRGVz
Y3JpcHRvciogZW51bV92YWx1ZV9kZXNjcmlwdG9yOwotICAgIGNvbnN0IFNlcnZpY2VEZXNjcmlw
dG9yKiBzZXJ2aWNlX2Rlc2NyaXB0b3I7Ci0gICAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogbWV0
aG9kX2Rlc2NyaXB0b3I7Ci0gICAgY29uc3QgRmlsZURlc2NyaXB0b3IqIHBhY2thZ2VfZmlsZV9k
ZXNjcmlwdG9yOwotICB9OwotCi0gIGlubGluZSBTeW1ib2woKSA6IHR5cGUoTlVMTF9TWU1CT0wp
IHsgZGVzY3JpcHRvciA9IE5VTEw7IH0KLSAgaW5saW5lIGJvb2wgSXNOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSA9PSBOVUxMX1NZTUJPTDsgfQotICBpbmxpbmUgYm9vbCBJc1R5cGUoKSBjb25z
dCB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gTUVTU0FHRSB8fCB0eXBlID09IEVOVU07Ci0gIH0KLSAg
aW5saW5lIGJvb2wgSXNBZ2dyZWdhdGUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHR5cGUgPT0gTUVT
U0FHRSB8fCB0eXBlID09IFBBQ0tBR0UKLSAgICAgICAgfHwgdHlwZSA9PSBFTlVNIHx8IHR5cGUg
PT0gU0VSVklDRTsKLSAgfQotCi0jZGVmaW5lIENPTlNUUlVDVE9SKFRZUEUsIFRZUEVfQ09OU1RB
TlQsIEZJRUxEKSAgXAotICBpbmxpbmUgZXhwbGljaXQgU3ltYm9sKGNvbnN0IFRZUEUqIHZhbHVl
KSB7ICAgIFwKLSAgICB0eXBlID0gVFlQRV9DT05TVEFOVDsgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgdGhpcy0+RklFTEQgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICB9Ci0KLSAgQ09OU1RSVUNUT1IoRGVzY3JpcHRvciAgICAgICAgICwgTUVTU0FHRSAgICwgZGVz
Y3JpcHRvciAgICAgICAgICAgICApCi0gIENPTlNUUlVDVE9SKEZpZWxkRGVzY3JpcHRvciAgICAs
IEZJRUxEICAgICAsIGZpZWxkX2Rlc2NyaXB0b3IgICAgICAgKQotICBDT05TVFJVQ1RPUihPbmVv
ZkRlc2NyaXB0b3IgICAgLCBPTkVPRiAgICAgLCBvbmVvZl9kZXNjcmlwdG9yICAgICAgICkKLSAg
Q09OU1RSVUNUT1IoRW51bURlc2NyaXB0b3IgICAgICwgRU5VTSAgICAgICwgZW51bV9kZXNjcmlw
dG9yICAgICAgICApCi0gIENPTlNUUlVDVE9SKEVudW1WYWx1ZURlc2NyaXB0b3IsIEVOVU1fVkFM
VUUsIGVudW1fdmFsdWVfZGVzY3JpcHRvciAgKQotICBDT05TVFJVQ1RPUihTZXJ2aWNlRGVzY3Jp
cHRvciAgLCBTRVJWSUNFICAgLCBzZXJ2aWNlX2Rlc2NyaXB0b3IgICAgICkKLSAgQ09OU1RSVUNU
T1IoTWV0aG9kRGVzY3JpcHRvciAgICwgTUVUSE9EICAgICwgbWV0aG9kX2Rlc2NyaXB0b3IgICAg
ICApCi0gIENPTlNUUlVDVE9SKEZpbGVEZXNjcmlwdG9yICAgICAsIFBBQ0tBR0UgICAsIHBhY2th
Z2VfZmlsZV9kZXNjcmlwdG9yKQotI3VuZGVmIENPTlNUUlVDVE9SCi0KLSAgY29uc3QgRmlsZURl
c2NyaXB0b3IqIEdldEZpbGUoKSBjb25zdCB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICBj
YXNlIE5VTExfU1lNQk9MOiByZXR1cm4gTlVMTDsKLSAgICAgIGNhc2UgTUVTU0FHRSAgICA6IHJl
dHVybiBkZXNjcmlwdG9yICAgICAgICAgICAtPmZpbGUoKTsKLSAgICAgIGNhc2UgRklFTEQgICAg
ICA6IHJldHVybiBmaWVsZF9kZXNjcmlwdG9yICAgICAtPmZpbGUoKTsKLSAgICAgIGNhc2UgT05F
T0YgICAgICA6IHJldHVybiBvbmVvZl9kZXNjcmlwdG9yICAgICAtPmNvbnRhaW5pbmdfdHlwZSgp
LT5maWxlKCk7Ci0gICAgICBjYXNlIEVOVU0gICAgICAgOiByZXR1cm4gZW51bV9kZXNjcmlwdG9y
ICAgICAgLT5maWxlKCk7Ci0gICAgICBjYXNlIEVOVU1fVkFMVUUgOiByZXR1cm4gZW51bV92YWx1
ZV9kZXNjcmlwdG9yLT50eXBlKCktPmZpbGUoKTsKLSAgICAgIGNhc2UgU0VSVklDRSAgICA6IHJl
dHVybiBzZXJ2aWNlX2Rlc2NyaXB0b3IgICAtPmZpbGUoKTsKLSAgICAgIGNhc2UgTUVUSE9EICAg
ICA6IHJldHVybiBtZXRob2RfZGVzY3JpcHRvciAgICAtPnNlcnZpY2UoKS0+ZmlsZSgpOwotICAg
ICAgY2FzZSBQQUNLQUdFICAgIDogcmV0dXJuIHBhY2thZ2VfZmlsZV9kZXNjcmlwdG9yOwotICAg
IH0KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfTsKLQotY29uc3QgU3ltYm9sIGtOdWxsU3ltYm9s
OwotCi10eXBlZGVmIGhhc2hfbWFwPGNvbnN0IGNoYXIqLCBTeW1ib2wsCi0gICAgICAgICAgICAg
ICAgIGhhc2g8Y29uc3QgY2hhcio+LCBzdHJlcT4KLSAgU3ltYm9sc0J5TmFtZU1hcDsKLXR5cGVk
ZWYgaGFzaF9tYXA8UG9pbnRlclN0cmluZ1BhaXIsIFN5bWJvbCwKLSAgICAgICAgICAgICAgICAg
UG9pbnRlclN0cmluZ1BhaXJIYXNoLCBQb2ludGVyU3RyaW5nUGFpckVxdWFsPgotICBTeW1ib2xz
QnlQYXJlbnRNYXA7Ci10eXBlZGVmIGhhc2hfbWFwPGNvbnN0IGNoYXIqLCBjb25zdCBGaWxlRGVz
Y3JpcHRvciosCi0gICAgICAgICAgICAgICAgIGhhc2g8Y29uc3QgY2hhcio+LCBzdHJlcT4KLSAg
RmlsZXNCeU5hbWVNYXA7Ci10eXBlZGVmIGhhc2hfbWFwPFBvaW50ZXJTdHJpbmdQYWlyLCBjb25z
dCBGaWVsZERlc2NyaXB0b3IqLAotICAgICAgICAgICAgICAgICBQb2ludGVyU3RyaW5nUGFpckhh
c2gsIFBvaW50ZXJTdHJpbmdQYWlyRXF1YWw+Ci0gIEZpZWxkc0J5TmFtZU1hcDsKLXR5cGVkZWYg
aGFzaF9tYXA8RGVzY3JpcHRvckludFBhaXIsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciosCi0gICAg
ICAgICAgICAgICAgIFBvaW50ZXJJbnRlZ2VyUGFpckhhc2g8RGVzY3JpcHRvckludFBhaXI+ID4K
LSAgRmllbGRzQnlOdW1iZXJNYXA7Ci10eXBlZGVmIGhhc2hfbWFwPEVudW1JbnRQYWlyLCBjb25z
dCBFbnVtVmFsdWVEZXNjcmlwdG9yKiwKLSAgICAgICAgICAgICAgICAgUG9pbnRlckludGVnZXJQ
YWlySGFzaDxFbnVtSW50UGFpcj4gPgotICBFbnVtVmFsdWVzQnlOdW1iZXJNYXA7Ci0vLyBUaGlz
IGlzIGEgbWFwIHJhdGhlciB0aGFuIGEgaGFzaF9tYXAsIHNpbmNlIHdlIHVzZSBpdCB0byBpdGVy
YXRlCi0vLyB0aHJvdWdoIGFsbCB0aGUgZXh0ZW5zaW9ucyB0aGF0IGV4dGVuZCBhIGdpdmVuIERl
c2NyaXB0b3IsIGFuZCBhbgotLy8gb3JkZXJlZCBkYXRhIHN0cnVjdHVyZSB0aGF0IGltcGxlbWVu
dHMgbG93ZXJfYm91bmQgaXMgY29udmVuaWVudAotLy8gZm9yIHRoYXQuCi10eXBlZGVmIG1hcDxE
ZXNjcmlwdG9ySW50UGFpciwgY29uc3QgRmllbGREZXNjcmlwdG9yKj4KLSAgRXh0ZW5zaW9uc0dy
b3VwZWRCeURlc2NyaXB0b3JNYXA7Ci10eXBlZGVmIGhhc2hfbWFwPHN0cmluZywgY29uc3QgU291
cmNlQ29kZUluZm9fTG9jYXRpb24qPiBMb2NhdGlvbnNCeVBhdGhNYXA7Ci0KLXNldDxzdHJpbmc+
KiBhbGxvd2VkX3Byb3RvM19leHRlbmRlZXNfID0gTlVMTDsKLUdPT0dMRV9QUk9UT0JVRl9ERUNM
QVJFX09OQ0UoYWxsb3dlZF9wcm90bzNfZXh0ZW5kZWVzX2luaXRfKTsKLQotdm9pZCBEZWxldGVB
bGxvd2VkUHJvdG8zRXh0ZW5kZWUoKSB7Ci0gIGRlbGV0ZSBhbGxvd2VkX3Byb3RvM19leHRlbmRl
ZXNfOwotfQotCi12b2lkIEluaXRBbGxvd2VkUHJvdG8zRXh0ZW5kZWUoKSB7Ci0gIGFsbG93ZWRf
cHJvdG8zX2V4dGVuZGVlc18gPSBuZXcgc2V0PHN0cmluZz47Ci0gIGNvbnN0IGNoYXIqIGtPcHRp
b25OYW1lc1tdID0gewotICAgICAgIkZpbGVPcHRpb25zIiwgICAgICAiTWVzc2FnZU9wdGlvbnMi
LCAiRmllbGRPcHRpb25zIiwgIkVudW1PcHRpb25zIiwKLSAgICAgICJFbnVtVmFsdWVPcHRpb25z
IiwgIlNlcnZpY2VPcHRpb25zIiwgIk1ldGhvZE9wdGlvbnMifTsKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBHT09HTEVfQVJSQVlTSVpFKGtPcHRpb25OYW1lcyk7ICsraSkgewotICAgIC8vIGRlc2Ny
aXB0b3IucHJvdG8gaGFzIGEgZGlmZmVyZW50IHBhY2thZ2UgbmFtZSBpbiBvcGVuc291cmNlLiBX
ZSBhbGxvdwotICAgIC8vIGJvdGggc28gdGhlIG9wZW5zb3VyY2UgcHJvdG9jb2wgY29tcGlsZXIg
Y2FuIGFsc28gY29tcGlsZSBpbnRlcm5hbAotICAgIC8vIHByb3RvMyBmaWxlcyB3aXRoIGN1c3Rv
bSBvcHRpb25zLiBTZWU6IGIvMjc1Njc5MTIKLSAgICBhbGxvd2VkX3Byb3RvM19leHRlbmRlZXNf
LT5pbnNlcnQoc3RyaW5nKCJnb29nbGUucHJvdG9idWYuIikgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrT3B0aW9uTmFtZXNbaV0pOwotICAgIC8vIFNwbGl0IHRoZSB3
b3JkIHRvIHRyaWNrIHRoZSBvcGVuc291cmNlIHByb2Nlc3Npbmcgc2NyaXB0cyBzbyB0aGV5Ci0g
ICAgLy8gd2lsbCBrZWVwIHRoZSBvcmlnaWFsIHBhY2thZ2UgbmFtZS4KLSAgICBhbGxvd2VkX3By
b3RvM19leHRlbmRlZXNfLT5pbnNlcnQoc3RyaW5nKCJwcm90byIpICsgIjIuIiArIGtPcHRpb25O
YW1lc1tpXSk7Ci0gIH0KLQotICBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6T25TaHV0ZG93
bigmRGVsZXRlQWxsb3dlZFByb3RvM0V4dGVuZGVlKTsKLX0KLQotLy8gQ2hlY2tzIHdoZXRoZXIg
dGhlIGV4dGVuZGVlIHR5cGUgaXMgYWxsb3dlZCBpbiBwcm90bzMuCi0vLyBPbmx5IGV4dGVuc2lv
bnMgdG8gZGVzY3JpcHRvciBvcHRpb25zIGFyZSBhbGxvd2VkLiBXZSB1c2UgbmFtZSBjb21wYXJp
c29uCi0vLyBpbnN0ZWFkIG9mIGNvbXBhcmluZyB0aGUgZGVzY3JpcHRvciBkaXJlY3RseSBiZWNh
dXNlIHRoZSBleHRlbnNpb25zIG1heSBiZQotLy8gZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBwb29s
LgotYm9vbCBBbGxvd2VkRXh0ZW5kZWVJblByb3RvMyhjb25zdCBzdHJpbmcmIG5hbWUpIHsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpHb29nbGVPbmNlSW5pdCgmYWxsb3dlZF9wcm90bzNfZXh0ZW5k
ZWVzX2luaXRfLCAmSW5pdEFsbG93ZWRQcm90bzNFeHRlbmRlZSk7Ci0gIHJldHVybiBhbGxvd2Vk
X3Byb3RvM19leHRlbmRlZXNfLT5maW5kKG5hbWUpICE9Ci0gICAgICAgICBhbGxvd2VkX3Byb3Rv
M19leHRlbmRlZXNfLT5lbmQoKTsKLX0KLQotfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi0v
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0vLyBEZXNjcmlwdG9yUG9vbDo6VGFibGVzCi0KLWNsYXNzIERlc2NyaXB0
b3JQb29sOjpUYWJsZXMgewotIHB1YmxpYzoKLSAgVGFibGVzKCk7Ci0gIH5UYWJsZXMoKTsKLQot
ICAvLyBSZWNvcmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRhYmxlcyB0byB0aGUgc3RhY2sg
b2YgY2hlY2twb2ludHMuCi0gIC8vIEVhY2ggY2FsbCB0byBBZGRDaGVja3BvaW50KCkgbXVzdCBi
ZSBwYWlyZWQgd2l0aCBleGFjdGx5IG9uZSBjYWxsIHRvIGVpdGhlcgotICAvLyBDbGVhckxhc3RD
aGVja3BvaW50KCkgb3IgUm9sbGJhY2tUb0xhc3RDaGVja3BvaW50KCkuCi0gIC8vCi0gIC8vIFRo
aXMgaXMgdXNlZCB3aGVuIGJ1aWxkaW5nIGZpbGVzLCBzaW5jZSBzb21lIGtpbmRzIG9mIHZhbGlk
YXRpb24gZXJyb3JzCi0gIC8vIGNhbm5vdCBiZSBkZXRlY3RlZCB1bnRpbCB0aGUgZmlsZSdzIGRl
c2NyaXB0b3JzIGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvCi0gIC8vIHRoZSB0YWJsZXMuCi0g
IC8vCi0gIC8vIFRoaXMgc3VwcG9ydHMgcmVjdXJzaXZlIGNoZWNrcG9pbnRzLCBzaW5jZSBidWls
ZGluZyBhIGZpbGUgbWF5IHRyaWdnZXIKLSAgLy8gcmVjdXJzaXZlIGJ1aWxkaW5nIG9mIG90aGVy
IGZpbGVzLiBOb3RlIHRoYXQgcmVjdXJzaXZlIGNoZWNrcG9pbnRzIGFyZSBub3QKLSAgLy8gbm9y
bWFsbHkgbmVjZXNzYXJ5OyBleHBsaWNpdCBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0IHByaW9yIHRv
IGNoZWNrcG9pbnRpbmcuCi0gIC8vIFNvIGFsdGhvdWdoIHdlIHJlY3Vyc2l2ZWx5IGJ1aWxkIHRy
YW5zaXRpdmUgaW1wb3J0cywgdGhlcmUgaXMgYXQgbW9zdCBvbmUKLSAgLy8gY2hlY2twb2ludCBp
biB0aGUgc3RhY2sgZHVyaW5nIGRlcGVuZGVuY3kgYnVpbGRpbmcuCi0gIC8vCi0gIC8vIFJlY3Vy
c2l2ZSBjaGVja3BvaW50cyBvbmx5IGFyaXNlIGR1cmluZyBjcm9zcy1saW5raW5nIG9mIHRoZSBk
ZXNjcmlwdG9ycy4KLSAgLy8gU3ltYm9sIHJlZmVyZW5jZXMgbXVzdCBiZSByZXNvbHZlZCwgdmlh
IERlc2NyaXB0b3JCdWlsZGVyOjpGaW5kU3ltYm9sIGFuZAotICAvLyBmcmllbmRzLiBJZiB0aGUg
cGVuZGluZyBmaWxlIHJlZmVyZW5jZXMgYW4gdW5rbm93biBzeW1ib2wKLSAgLy8gKGUuZy4sIGl0
IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBwZW5kaW5nIGZpbGUncyBleHBsaWNpdCBkZXBlbmRlbmNp
ZXMpLCBhbmQKLSAgLy8gdGhlIHBvb2wgaXMgdXNpbmcgYSBmYWxsYmFjayBkYXRhYmFzZSwgYW5k
IHRoYXQgZGF0YWJhc2UgY29udGFpbnMgYSBmaWxlCi0gIC8vIGRlZmluaW5nIHRoYXQgc3ltYm9s
LCBhbmQgdGhhdCBmaWxlIGhhcyBub3QgeWV0IGJlZW4gYnVpbHQgYnkgdGhlIHBvb2wsCi0gIC8v
IHRoZSBwb29sIGJ1aWxkcyB0aGUgZmlsZSBkdXJpbmcgY3Jvc3MtbGlua2luZywgbGVhZGluZyB0
byBhbm90aGVyCi0gIC8vIGNoZWNrcG9pbnQuCi0gIHZvaWQgQWRkQ2hlY2twb2ludCgpOwotCi0g
IC8vIE1hcmsgdGhlIGxhc3QgY2hlY2twb2ludCBhcyBoYXZpbmcgY2xlYXJlZCBzdWNjZXNzZnVs
bHksIHJlbW92aW5nIGl0IGZyb20KLSAgLy8gdGhlIHN0YWNrLiBJZiB0aGUgc3RhY2sgaXMgZW1w
dHksIGFsbCBwZW5kaW5nIHN5bWJvbHMgd2lsbCBiZSBjb21taXR0ZWQuCi0gIC8vCi0gIC8vIE5v
dGUgdGhhdCB0aGlzIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IHRoZSBzeW1ib2xzIGFkZGVkIHNp
bmNlIHRoZSBsYXN0Ci0gIC8vIGNoZWNrcG9pbnQgd29uJ3QgYmUgcm9sbGVkIGJhY2s6IGlmIGEg
Y2hlY2twb2ludCBnZXRzIHJvbGxlZCBiYWNrLAotICAvLyBldmVyeXRoaW5nIHBhc3QgdGhhdCBw
b2ludCBnZXRzIHJvbGxlZCBiYWNrLCBpbmNsdWRpbmcgc3ltYm9scyBhZGRlZCBhZnRlcgotICAv
LyBjaGVja3BvaW50cyB0aGF0IHdlcmUgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGFmdGVyIGl0IGFu
ZCBtYXJrZWQgYXMgY2xlYXJlZC4KLSAgdm9pZCBDbGVhckxhc3RDaGVja3BvaW50KCk7Ci0KLSAg
Ly8gUm9sbCBiYWNrIHRoZSBUYWJsZXMgdG8gdGhlIHN0YXRlIG9mIHRoZSBjaGVja3BvaW50IGF0
IHRoZSB0b3Agb2YgdGhlCi0gIC8vIHN0YWNrLCByZW1vdmluZyBldmVyeXRoaW5nIHRoYXQgd2Fz
IGFkZGVkIGFmdGVyIHRoYXQgcG9pbnQuCi0gIHZvaWQgUm9sbGJhY2tUb0xhc3RDaGVja3BvaW50
KCk7Ci0KLSAgLy8gVGhlIHN0YWNrIG9mIGZpbGVzIHdoaWNoIGFyZSBjdXJyZW50bHkgYmVpbmcg
YnVpbHQuICBVc2VkIHRvIGRldGVjdAotICAvLyBjeWNsaWMgZGVwZW5kZW5jaWVzIHdoZW4gbG9h
ZGluZyBmaWxlcyBmcm9tIGEgRGVzY3JpcHRvckRhdGFiYXNlLiAgTm90Ci0gIC8vIHVzZWQgd2hl
biBmYWxsYmFja19kYXRhYmFzZV8gPT0gTlVMTC4KLSAgdmVjdG9yPHN0cmluZz4gcGVuZGluZ19m
aWxlc187Ci0KLSAgLy8gQSBzZXQgb2YgZmlsZXMgd2hpY2ggd2UgaGF2ZSB0cmllZCB0byBsb2Fk
IGZyb20gdGhlIGZhbGxiYWNrIGRhdGFiYXNlCi0gIC8vIGFuZCBlbmNvdW50ZXJlZCBlcnJvcnMu
ICBXZSB3aWxsIG5vdCBhdHRlbXB0IHRvIGxvYWQgdGhlbSBhZ2FpbiBkdXJpbmcKLSAgLy8gZXhl
Y3V0aW9uIG9mIHRoZSBjdXJyZW50IHB1YmxpYyBBUEkgY2FsbCwgYnV0IGZvciBjb21wYXRpYmls
aXR5IHdpdGgKLSAgLy8gbGVnYWN5IGNsaWVudHMsIHRoaXMgaXMgY2xlYXJlZCBhdCB0aGUgYmVn
aW5uaW5nIG9mIGVhY2ggcHVibGljIEFQSSBjYWxsLgotICAvLyBOb3QgdXNlZCB3aGVuIGZhbGxi
YWNrX2RhdGFiYXNlXyA9PSBOVUxMLgotICBoYXNoX3NldDxzdHJpbmc+IGtub3duX2JhZF9maWxl
c187Ci0KLSAgLy8gQSBzZXQgb2Ygc3ltYm9scyB3aGljaCB3ZSBoYXZlIHRyaWVkIHRvIGxvYWQg
ZnJvbSB0aGUgZmFsbGJhY2sgZGF0YWJhc2UKLSAgLy8gYW5kIGVuY291bnRlcmVkIGVycm9ycy4g
V2Ugd2lsbCBub3QgYXR0ZW1wdCB0byBsb2FkIHRoZW0gYWdhaW4gZHVyaW5nCi0gIC8vIGV4ZWN1
dGlvbiBvZiB0aGUgY3VycmVudCBwdWJsaWMgQVBJIGNhbGwsIGJ1dCBmb3IgY29tcGF0aWJpbGl0
eSB3aXRoCi0gIC8vIGxlZ2FjeSBjbGllbnRzLCB0aGlzIGlzIGNsZWFyZWQgYXQgdGhlIGJlZ2lu
bmluZyBvZiBlYWNoIHB1YmxpYyBBUEkgY2FsbC4KLSAgaGFzaF9zZXQ8c3RyaW5nPiBrbm93bl9i
YWRfc3ltYm9sc187Ci0KLSAgLy8gVGhlIHNldCBvZiBkZXNjcmlwdG9ycyBmb3Igd2hpY2ggd2Un
dmUgYWxyZWFkeSBsb2FkZWQgdGhlIGZ1bGwKLSAgLy8gc2V0IG9mIGV4dGVuc2lvbnMgbnVtYmVy
cyBmcm9tIGZhbGxiYWNrX2RhdGFiYXNlXy4KLSAgaGFzaF9zZXQ8Y29uc3QgRGVzY3JpcHRvcio+
IGV4dGVuc2lvbnNfbG9hZGVkX2Zyb21fZGJfOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIEZpbmRp
bmcgaXRlbXMuCi0KLSAgLy8gRmluZCBzeW1ib2xzLiAgVGhpcyByZXR1cm5zIGEgbnVsbCBTeW1i
b2wgKHN5bWJvbC5Jc051bGwoKSBpcyB0cnVlKQotICAvLyBpZiBub3QgZm91bmQuCi0gIGlubGlu
ZSBTeW1ib2wgRmluZFN5bWJvbChjb25zdCBzdHJpbmcmIGtleSkgY29uc3Q7Ci0KLSAgLy8gVGhp
cyBpbXBsZW1lbnRzIHRoZSBib2R5IG9mIERlc2NyaXB0b3JQb29sOjpGaW5kKkJ5TmFtZSgpLiAg
SXQgc2hvdWxkCi0gIC8vIHJlYWxseSBiZSBhIHByaXZhdGUgbWV0aG9kIG9mIERlc2NyaXB0b3JQ
b29sLCBidXQgdGhhdCB3b3VsZCByZXF1aXJlCi0gIC8vIGRlY2xhcmluZyBTeW1ib2wgaW4gZGVz
Y3JpcHRvci5oLCB3aGljaCB3b3VsZCBkcmFnIGFsbCBraW5kcyBvZiBvdGhlcgotICAvLyBzdHVm
ZiBpbnRvIHRoZSBoZWFkZXIuICBZYXkgQysrLgotICBTeW1ib2wgRmluZEJ5TmFtZUhlbHBlcigK
LSAgICBjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbCwgY29uc3Qgc3RyaW5nJiBuYW1lKTsKLQot
ICAvLyBUaGVzZSByZXR1cm4gTlVMTCBpZiBub3QgZm91bmQuCi0gIGlubGluZSBjb25zdCBGaWxl
RGVzY3JpcHRvciogRmluZEZpbGUoY29uc3Qgc3RyaW5nJiBrZXkpIGNvbnN0OwotICBpbmxpbmUg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBGaW5kRXh0ZW5zaW9uKGNvbnN0IERlc2NyaXB0b3IqIGV4
dGVuZGVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBudW1iZXIpOwotICBpbmxpbmUgdm9pZCBGaW5kQWxsRXh0ZW5zaW9ucyhjb25zdCBEZXNjcmlw
dG9yKiBleHRlbmRlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPGNv
bnN0IEZpZWxkRGVzY3JpcHRvcio+KiBvdXQpIGNvbnN0OwotCi0gIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8v
IEFkZGluZyBpdGVtcy4KLQotICAvLyBUaGVzZSBhZGQgaXRlbXMgdG8gdGhlIGNvcnJlc3BvbmRp
bmcgdGFibGVzLiAgVGhleSByZXR1cm4gZmFsc2UgaWYKLSAgLy8gdGhlIGtleSBhbHJlYWR5IGV4
aXN0cyBpbiB0aGUgdGFibGUuICBGb3IgQWRkU3ltYm9sKCksIHRoZSBzdHJpbmcgcGFzc2VkCi0g
IC8vIGluIG11c3QgYmUgb25lIHRoYXQgd2FzIGNvbnN0cnVjdGVkIHVzaW5nIEFsbG9jYXRlU3Ry
aW5nKCksIGFzIGl0IHdpbGwKLSAgLy8gYmUgdXNlZCBhcyBhIGtleSBpbiB0aGUgc3ltYm9sc19i
eV9uYW1lXyBtYXAgd2l0aG91dCBjb3B5aW5nLgotICBib29sIEFkZFN5bWJvbChjb25zdCBzdHJp
bmcmIGZ1bGxfbmFtZSwgU3ltYm9sIHN5bWJvbCk7Ci0gIGJvb2wgQWRkRmlsZShjb25zdCBGaWxl
RGVzY3JpcHRvciogZmlsZSk7Ci0gIGJvb2wgQWRkRXh0ZW5zaW9uKGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQpOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIEFsbG9jYXRpbmcgbWVtb3J5Lgot
Ci0gIC8vIEFsbG9jYXRlIGFuIG9iamVjdCB3aGljaCB3aWxsIGJlIHJlY2xhaW1lZCB3aGVuIHRo
ZSBwb29sIGlzCi0gIC8vIGRlc3Ryb3llZC4gIE5vdGUgdGhhdCB0aGUgb2JqZWN0J3MgZGVzdHJ1
Y3RvciB3aWxsIG5ldmVyIGJlIGNhbGxlZCwKLSAgLy8gc28gaXRzIGZpZWxkcyBtdXN0IGJlIHBs
YWluIG9sZCBkYXRhIChwcmltaXRpdmUgZGF0YSB0eXBlcyBhbmQKLSAgLy8gcG9pbnRlcnMpLiAg
QWxsIG9mIHRoZSBkZXNjcmlwdG9yIHR5cGVzIGFyZSBzdWNoIG9iamVjdHMuCi0gIHRlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+IFR5cGUqIEFsbG9jYXRlKCk7Ci0KLSAgLy8gQWxsb2NhdGUgYW4gYXJy
YXkgb2Ygb2JqZWN0cyB3aGljaCB3aWxsIGJlIHJlY2xhaW1lZCB3aGVuIHRoZQotICAvLyBwb29s
IGluIGRlc3Ryb3llZC4gIEFnYWluLCBkZXN0cnVjdG9ycyBhcmUgbmV2ZXIgY2FsbGVkLgotICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBUeXBlKiBBbGxvY2F0ZUFycmF5KGludCBjb3VudCk7Ci0K
LSAgLy8gQWxsb2NhdGUgYSBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGUg
cG9vbCBpcyBkZXN0cm95ZWQuCi0gIC8vIFRoZSBzdHJpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gdGhl
IGdpdmVuIHZhbHVlIGZvciBjb252ZW5pZW5jZS4KLSAgc3RyaW5nKiBBbGxvY2F0ZVN0cmluZyhj
b25zdCBzdHJpbmcmIHZhbHVlKTsKLQotICAvLyBBbGxvY2F0ZSBhIHByb3RvY29sIG1lc3NhZ2Ug
b2JqZWN0LiAgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBHQ0MgaGF2ZQotICAvLyB0cm91YmxlIHVu
ZGVyc3RhbmRpbmcgZXhwbGljaXQgdGVtcGxhdGUgaW5zdGFudGlhdGlvbnMgaW4gc29tZSBjYXNl
cywgc28KLSAgLy8gaW4gdGhvc2UgY2FzZXMgd2UgaGF2ZSB0byBwYXNzIGEgZHVtbXkgcG9pbnRl
ciBvZiB0aGUgcmlnaHQgdHlwZSBhcyB0aGUKLSAgLy8gcGFyYW1ldGVyIGluc3RlYWQgb2Ygc3Bl
Y2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5LgotICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBU
eXBlKiBBbGxvY2F0ZU1lc3NhZ2UoVHlwZSogZHVtbXkgPSBOVUxMKTsKLQotICAvLyBBbGxvY2F0
ZSBhIEZpbGVEZXNjcmlwdG9yVGFibGVzIG9iamVjdC4KLSAgRmlsZURlc2NyaXB0b3JUYWJsZXMq
IEFsbG9jYXRlRmlsZVRhYmxlcygpOwotCi0gcHJpdmF0ZToKLSAgdmVjdG9yPHN0cmluZyo+IHN0
cmluZ3NfOyAgICAvLyBBbGwgc3RyaW5ncyBpbiB0aGUgcG9vbC4KLSAgdmVjdG9yPE1lc3NhZ2Uq
PiBtZXNzYWdlc187ICAvLyBBbGwgbWVzc2FnZXMgaW4gdGhlIHBvb2wuCi0gIHZlY3RvcjxGaWxl
RGVzY3JpcHRvclRhYmxlcyo+IGZpbGVfdGFibGVzXzsgIC8vIEFsbCBmaWxlIHRhYmxlcyBpbiB0
aGUgcG9vbC4KLSAgdmVjdG9yPHZvaWQqPiBhbGxvY2F0aW9uc187ICAvLyBBbGwgb3RoZXIgbWVt
b3J5IGFsbG9jYXRlZCBpbiB0aGUgcG9vbC4KLQotICBTeW1ib2xzQnlOYW1lTWFwICAgICAgc3lt
Ym9sc19ieV9uYW1lXzsKLSAgRmlsZXNCeU5hbWVNYXAgICAgICAgIGZpbGVzX2J5X25hbWVfOwot
ICBFeHRlbnNpb25zR3JvdXBlZEJ5RGVzY3JpcHRvck1hcCBleHRlbnNpb25zXzsKLQotICBzdHJ1
Y3QgQ2hlY2tQb2ludCB7Ci0gICAgZXhwbGljaXQgQ2hlY2tQb2ludChjb25zdCBUYWJsZXMqIHRh
YmxlcykKLSAgICAgIDogc3RyaW5nc19iZWZvcmVfY2hlY2twb2ludCh0YWJsZXMtPnN0cmluZ3Nf
LnNpemUoKSksCi0gICAgICAgIG1lc3NhZ2VzX2JlZm9yZV9jaGVja3BvaW50KHRhYmxlcy0+bWVz
c2FnZXNfLnNpemUoKSksCi0gICAgICAgIGZpbGVfdGFibGVzX2JlZm9yZV9jaGVja3BvaW50KHRh
Ymxlcy0+ZmlsZV90YWJsZXNfLnNpemUoKSksCi0gICAgICAgIGFsbG9jYXRpb25zX2JlZm9yZV9j
aGVja3BvaW50KHRhYmxlcy0+YWxsb2NhdGlvbnNfLnNpemUoKSksCi0gICAgICAgIHBlbmRpbmdf
c3ltYm9sc19iZWZvcmVfY2hlY2twb2ludCgKLSAgICAgICAgICAgIHRhYmxlcy0+c3ltYm9sc19h
ZnRlcl9jaGVja3BvaW50Xy5zaXplKCkpLAotICAgICAgICBwZW5kaW5nX2ZpbGVzX2JlZm9yZV9j
aGVja3BvaW50KAotICAgICAgICAgICAgdGFibGVzLT5maWxlc19hZnRlcl9jaGVja3BvaW50Xy5z
aXplKCkpLAotICAgICAgICBwZW5kaW5nX2V4dGVuc2lvbnNfYmVmb3JlX2NoZWNrcG9pbnQoCi0g
ICAgICAgICAgICB0YWJsZXMtPmV4dGVuc2lvbnNfYWZ0ZXJfY2hlY2twb2ludF8uc2l6ZSgpKSB7
Ci0gICAgfQotICAgIGludCBzdHJpbmdzX2JlZm9yZV9jaGVja3BvaW50OwotICAgIGludCBtZXNz
YWdlc19iZWZvcmVfY2hlY2twb2ludDsKLSAgICBpbnQgZmlsZV90YWJsZXNfYmVmb3JlX2NoZWNr
cG9pbnQ7Ci0gICAgaW50IGFsbG9jYXRpb25zX2JlZm9yZV9jaGVja3BvaW50OwotICAgIGludCBw
ZW5kaW5nX3N5bWJvbHNfYmVmb3JlX2NoZWNrcG9pbnQ7Ci0gICAgaW50IHBlbmRpbmdfZmlsZXNf
YmVmb3JlX2NoZWNrcG9pbnQ7Ci0gICAgaW50IHBlbmRpbmdfZXh0ZW5zaW9uc19iZWZvcmVfY2hl
Y2twb2ludDsKLSAgfTsKLSAgdmVjdG9yPENoZWNrUG9pbnQ+IGNoZWNrcG9pbnRzXzsKLSAgdmVj
dG9yPGNvbnN0IGNoYXIqICAgICAgPiBzeW1ib2xzX2FmdGVyX2NoZWNrcG9pbnRfOwotICB2ZWN0
b3I8Y29uc3QgY2hhciogICAgICA+IGZpbGVzX2FmdGVyX2NoZWNrcG9pbnRfOwotICB2ZWN0b3I8
RGVzY3JpcHRvckludFBhaXI+IGV4dGVuc2lvbnNfYWZ0ZXJfY2hlY2twb2ludF87Ci0KLSAgLy8g
QWxsb2NhdGUgc29tZSBieXRlcyB3aGljaCB3aWxsIGJlIHJlY2xhaW1lZCB3aGVuIHRoZSBwb29s
IGlzCi0gIC8vIGRlc3Ryb3llZC4KLSAgdm9pZCogQWxsb2NhdGVCeXRlcyhpbnQgc2l6ZSk7Ci19
OwotCi0vLyBDb250YWlucyB0YWJsZXMgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGZpbGUuICBU
aGVzZSB0YWJsZXMgYXJlIG5vdAotLy8gbW9kaWZpZWQgb25jZSB0aGUgZmlsZSBoYXMgYmVlbiBj
b25zdHJ1Y3RlZCwgc28gdGhleSBuZWVkIG5vdCBiZQotLy8gcHJvdGVjdGVkIGJ5IGEgbXV0ZXgu
ICBUaGlzIG1ha2VzIG9wZXJhdGlvbnMgdGhhdCBkZXBlbmQgb25seSBvbiB0aGUKLS8vIGNvbnRl
bnRzIG9mIGEgc2luZ2xlIGZpbGUgLS0gZS5nLiBEZXNjcmlwdG9yOjpGaW5kRmllbGRCeU5hbWUo
KSAtLQotLy8gbG9jay1mcmVlLgotLy8KLS8vIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoZSBk
ZWZpbml0aW9ucyBvZiB0aGUgbWV0aG9kcyBvZgotLy8gRmlsZURlc2NyaXB0b3JUYWJsZXMgYW5k
IERlc2NyaXB0b3JQb29sOjpUYWJsZXMgYXJlIGludGVybGVhdmVkIGJlbG93LgotLy8gVGhlc2Ug
dXNlZCB0byBiZSBhIHNpbmdsZSBjbGFzcy4KLWNsYXNzIEZpbGVEZXNjcmlwdG9yVGFibGVzIHsK
LSBwdWJsaWM6Ci0gIEZpbGVEZXNjcmlwdG9yVGFibGVzKCk7Ci0gIH5GaWxlRGVzY3JpcHRvclRh
YmxlcygpOwotCi0gIC8vIEVtcHR5IHRhYmxlLCB1c2VkIHdpdGggcGxhY2Vob2xkZXIgZmlsZXMu
Ci0gIGlubGluZSBzdGF0aWMgY29uc3QgRmlsZURlc2NyaXB0b3JUYWJsZXMmIEdldEVtcHR5SW5z
dGFuY2UoKTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBGaW5kaW5nIGl0ZW1zLgotCi0gIC8vIEZp
bmQgc3ltYm9scy4gIFRoZXNlIHJldHVybiBhIG51bGwgU3ltYm9sIChzeW1ib2wuSXNOdWxsKCkg
aXMgdHJ1ZSkKLSAgLy8gaWYgbm90IGZvdW5kLgotICBpbmxpbmUgU3ltYm9sIEZpbmROZXN0ZWRT
eW1ib2woY29uc3Qgdm9pZCogcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgaW5saW5lIFN5bWJvbCBGaW5kTmVzdGVk
U3ltYm9sT2ZUeXBlKGNvbnN0IHZvaWQqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN5bWJvbDo6VHlwZSB0eXBlKSBjb25zdDsKLQotICAv
LyBUaGVzZSByZXR1cm4gTlVMTCBpZiBub3QgZm91bmQuCi0gIGlubGluZSBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIEZpbmRGaWVsZEJ5TnVtYmVyKAotICAgIGNvbnN0IERlc2NyaXB0b3IqIHBhcmVu
dCwgaW50IG51bWJlcikgY29uc3Q7Ci0gIGlubGluZSBjb25zdCBGaWVsZERlc2NyaXB0b3IqIEZp
bmRGaWVsZEJ5TG93ZXJjYXNlTmFtZSgKLSAgICBjb25zdCB2b2lkKiBwYXJlbnQsIGNvbnN0IHN0
cmluZyYgbG93ZXJjYXNlX25hbWUpIGNvbnN0OwotICBpbmxpbmUgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBGaW5kRmllbGRCeUNhbWVsY2FzZU5hbWUoCi0gICAgY29uc3Qgdm9pZCogcGFyZW50LCBj
b25zdCBzdHJpbmcmIGNhbWVsY2FzZV9uYW1lKSBjb25zdDsKLSAgaW5saW5lIGNvbnN0IEVudW1W
YWx1ZURlc2NyaXB0b3IqIEZpbmRFbnVtVmFsdWVCeU51bWJlcigKLSAgICBjb25zdCBFbnVtRGVz
Y3JpcHRvciogcGFyZW50LCBpbnQgbnVtYmVyKSBjb25zdDsKLSAgLy8gVGhpcyBjcmVhdGVzIGEg
bmV3IEVudW1WYWx1ZURlc2NyaXB0b3IgaWYgbm90IGZvdW5kLCBpbiBhIHRocmVhZC1zYWZlIHdh
eS4KLSAgaW5saW5lIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIEZpbmRFbnVtVmFsdWVCeU51
bWJlckNyZWF0aW5nSWZVbmtub3duKAotICAgICAgY29uc3QgRW51bURlc2NyaXB0b3IqIHBhcmVu
dCwgaW50IG51bWJlcikgY29uc3Q7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gQWRkaW5nIGl0ZW1z
LgotCi0gIC8vIFRoZXNlIGFkZCBpdGVtcyB0byB0aGUgY29ycmVzcG9uZGluZyB0YWJsZXMuICBU
aGV5IHJldHVybiBmYWxzZSBpZgotICAvLyB0aGUga2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSB0
YWJsZS4gIEZvciBBZGRBbGlhc1VuZGVyUGFyZW50KCksIHRoZQotICAvLyBzdHJpbmcgcGFzc2Vk
IGluIG11c3QgYmUgb25lIHRoYXQgd2FzIGNvbnN0cnVjdGVkIHVzaW5nIEFsbG9jYXRlU3RyaW5n
KCksCi0gIC8vIGFzIGl0IHdpbGwgYmUgdXNlZCBhcyBhIGtleSBpbiB0aGUgc3ltYm9sc19ieV9w
YXJlbnRfIG1hcCB3aXRob3V0IGNvcHlpbmcuCi0gIGJvb2wgQWRkQWxpYXNVbmRlclBhcmVudChj
b25zdCB2b2lkKiBwYXJlbnQsIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN5bWJvbCBzeW1ib2wpOwotICBib29sIEFkZEZpZWxkQnlOdW1iZXIoY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0gIGJvb2wgQWRkRW51bVZhbHVlQnlOdW1iZXIoY29u
c3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWUpOwotCi0gIC8vIEFkZHMgdGhlIGZpZWxkIHRv
IHRoZSBsb3dlcmNhc2VfbmFtZSBhbmQgY2FtZWxjYXNlX25hbWUgbWFwcy4gIE5ldmVyCi0gIC8v
IGZhaWxzIGJlY2F1c2Ugd2UgYWxsb3cgZHVwbGljYXRlczsgdGhlIGZpcnN0IGZpZWxkIGJ5IHRo
ZSBuYW1lIHdpbnMuCi0gIHZvaWQgQWRkRmllbGRCeVN0eWxpemVkTmFtZXMoY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLSAgLy8gUG9wdWxhdGVzIHAtPmZpcnN0LT5sb2NhdGlvbnNf
YnlfcGF0aF8gZnJvbSBwLT5zZWNvbmQuCi0gIC8vIFVudXN1YWwgc2lnbmF0dXJlIGRpY3RhdGVk
IGJ5IEdvb2dsZU9uY2VEeW5hbWljLgotICBzdGF0aWMgdm9pZCBCdWlsZExvY2F0aW9uc0J5UGF0
aCgKLSAgICAgIHBhaXI8Y29uc3QgRmlsZURlc2NyaXB0b3JUYWJsZXMqLCBjb25zdCBTb3VyY2VD
b2RlSW5mbyo+KiBwKTsKLQotICAvLyBSZXR1cm5zIHRoZSBsb2NhdGlvbiBkZW5vdGVkIGJ5IHRo
ZSBzcGVjaWZpZWQgcGF0aCB0aHJvdWdoIGluZm8sCi0gIC8vIG9yIE5VTEwgaWYgbm90IGZvdW5k
LgotICAvLyBUaGUgdmFsdWUgb2YgaW5mbyBtdXN0IGJlIHRoYXQgb2YgdGhlIGNvcnJlc3BvbmRp
bmcgRmlsZURlc2NyaXB0b3IuCi0gIC8vIChDb25jZXB0dWFsbHkgYSBwdXJlIGZ1bmN0aW9uLCBi
dXQgc3RhdGVmdWwgYXMgYW4gb3B0aW1pc2F0aW9uLikKLSAgY29uc3QgU291cmNlQ29kZUluZm9f
TG9jYXRpb24qIEdldFNvdXJjZUxvY2F0aW9uKAotICAgICAgY29uc3QgdmVjdG9yPGludD4mIHBh
dGgsIGNvbnN0IFNvdXJjZUNvZGVJbmZvKiBpbmZvKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIFN5
bWJvbHNCeVBhcmVudE1hcCAgICBzeW1ib2xzX2J5X3BhcmVudF87Ci0gIEZpZWxkc0J5TmFtZU1h
cCAgICAgICBmaWVsZHNfYnlfbG93ZXJjYXNlX25hbWVfOwotICBGaWVsZHNCeU5hbWVNYXAgICAg
ICAgZmllbGRzX2J5X2NhbWVsY2FzZV9uYW1lXzsKLSAgRmllbGRzQnlOdW1iZXJNYXAgICAgIGZp
ZWxkc19ieV9udW1iZXJfOyAgICAgICAvLyBOb3QgaW5jbHVkaW5nIGV4dGVuc2lvbnMuCi0gIEVu
dW1WYWx1ZXNCeU51bWJlck1hcCBlbnVtX3ZhbHVlc19ieV9udW1iZXJfOwotICBtdXRhYmxlIEVu
dW1WYWx1ZXNCeU51bWJlck1hcCB1bmtub3duX2VudW1fdmFsdWVzX2J5X251bWJlcl8KLSAgICAg
IEdPT0dMRV9HVUFSREVEX0JZKHVua25vd25fZW51bV92YWx1ZXNfbXVfKTsKLQotICAvLyBQb3B1
bGF0ZWQgb24gZmlyc3QgcmVxdWVzdCB0byBzYXZlIHNwYWNlLCBoZW5jZSBjb25zdG5lc3MgZ2Ft
ZXMuCi0gIG11dGFibGUgR29vZ2xlT25jZUR5bmFtaWMgbG9jYXRpb25zX2J5X3BhdGhfb25jZV87
Ci0gIG11dGFibGUgTG9jYXRpb25zQnlQYXRoTWFwIGxvY2F0aW9uc19ieV9wYXRoXzsKLQotICAv
LyBNdXRleCB0byBwcm90ZWN0IHRoZSB1bmtub3duLWVudW0tdmFsdWUgbWFwIGR1ZSB0byBkeW5h
bWljCi0gIC8vIEVudW1WYWx1ZURlc2NyaXB0b3IgY3JlYXRpb24gb24gdW5rbm93biB2YWx1ZXMu
Ci0gIG11dGFibGUgTXV0ZXggdW5rbm93bl9lbnVtX3ZhbHVlc19tdV87Ci19OwotCi1EZXNjcmlw
dG9yUG9vbDo6VGFibGVzOjpUYWJsZXMoKQotICAgIC8vIFN0YXJ0IHNvbWUgaGFzaF9tYXAgYW5k
IGhhc2hfc2V0IG9iamVjdHMgd2l0aCBhIHNtYWxsICMgb2YgYnVja2V0cwotICAgIDoga25vd25f
YmFkX2ZpbGVzXygzKSwKLSAgICAgIGtub3duX2JhZF9zeW1ib2xzXygzKSwKLSAgICAgIGV4dGVu
c2lvbnNfbG9hZGVkX2Zyb21fZGJfKDMpLAotICAgICAgc3ltYm9sc19ieV9uYW1lXygzKSwKLSAg
ICAgIGZpbGVzX2J5X25hbWVfKDMpIHt9Ci0KLQotRGVzY3JpcHRvclBvb2w6OlRhYmxlczo6flRh
YmxlcygpIHsKLSAgR09PR0xFX0RDSEVDSyhjaGVja3BvaW50c18uZW1wdHkoKSk7Ci0gIC8vIE5v
dGUgdGhhdCB0aGUgZGVsZXRpb24gb3JkZXIgaXMgaW1wb3J0YW50LCBzaW5jZSB0aGUgZGVzdHJ1
Y3RvcnMgb2Ygc29tZQotICAvLyBtZXNzYWdlcyBtYXkgcmVmZXIgdG8gb2JqZWN0cyBpbiBhbGxv
Y2F0aW9uc18uCi0gIFNUTERlbGV0ZUVsZW1lbnRzKCZtZXNzYWdlc18pOwotICBmb3IgKGludCBp
ID0gMDsgaSA8IGFsbG9jYXRpb25zXy5zaXplKCk7IGkrKykgewotICAgIG9wZXJhdG9yIGRlbGV0
ZShhbGxvY2F0aW9uc19baV0pOwotICB9Ci0gIFNUTERlbGV0ZUVsZW1lbnRzKCZzdHJpbmdzXyk7
Ci0gIFNUTERlbGV0ZUVsZW1lbnRzKCZmaWxlX3RhYmxlc18pOwotfQotCi1GaWxlRGVzY3JpcHRv
clRhYmxlczo6RmlsZURlc2NyaXB0b3JUYWJsZXMoKQotICAgIC8vIEluaXRpYWxpemUgYWxsIHRo
ZSBoYXNoIHRhYmxlcyB0byBzdGFydCBvdXQgd2l0aCBhIHNtYWxsICMgb2YgYnVja2V0cwotICAg
IDogc3ltYm9sc19ieV9wYXJlbnRfKDMpLAotICAgICAgZmllbGRzX2J5X2xvd2VyY2FzZV9uYW1l
XygzKSwKLSAgICAgIGZpZWxkc19ieV9jYW1lbGNhc2VfbmFtZV8oMyksCi0gICAgICBmaWVsZHNf
YnlfbnVtYmVyXygzKSwKLSAgICAgIGVudW1fdmFsdWVzX2J5X251bWJlcl8oMyksCi0gICAgICB1
bmtub3duX2VudW1fdmFsdWVzX2J5X251bWJlcl8oMykgewotfQotCi1GaWxlRGVzY3JpcHRvclRh
Ymxlczo6fkZpbGVEZXNjcmlwdG9yVGFibGVzKCkge30KLQotbmFtZXNwYWNlIHsKLQotRmlsZURl
c2NyaXB0b3JUYWJsZXMqIGZpbGVfZGVzY3JpcHRvcl90YWJsZXNfID0gTlVMTDsKLUdPT0dMRV9Q
Uk9UT0JVRl9ERUNMQVJFX09OQ0UoZmlsZV9kZXNjcmlwdG9yX3RhYmxlc19vbmNlX2luaXRfKTsK
LQotdm9pZCBEZWxldGVGaWxlRGVzY3JpcHRvclRhYmxlcygpIHsKLSAgZGVsZXRlIGZpbGVfZGVz
Y3JpcHRvcl90YWJsZXNfOwotICBmaWxlX2Rlc2NyaXB0b3JfdGFibGVzXyA9IE5VTEw7Ci19Ci0K
LXZvaWQgSW5pdEZpbGVEZXNjcmlwdG9yVGFibGVzKCkgewotICBmaWxlX2Rlc2NyaXB0b3JfdGFi
bGVzXyA9IG5ldyBGaWxlRGVzY3JpcHRvclRhYmxlcygpOwotICBpbnRlcm5hbDo6T25TaHV0ZG93
bigmRGVsZXRlRmlsZURlc2NyaXB0b3JUYWJsZXMpOwotfQotCi1pbmxpbmUgdm9pZCBJbml0Rmls
ZURlc2NyaXB0b3JUYWJsZXNPbmNlKCkgewotICA6Omdvb2dsZTo6cHJvdG9idWY6Okdvb2dsZU9u
Y2VJbml0KAotICAgICAgJmZpbGVfZGVzY3JpcHRvcl90YWJsZXNfb25jZV9pbml0XywgJkluaXRG
aWxlRGVzY3JpcHRvclRhYmxlcyk7Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQot
aW5saW5lIGNvbnN0IEZpbGVEZXNjcmlwdG9yVGFibGVzJiBGaWxlRGVzY3JpcHRvclRhYmxlczo6
R2V0RW1wdHlJbnN0YW5jZSgpIHsKLSAgSW5pdEZpbGVEZXNjcmlwdG9yVGFibGVzT25jZSgpOwot
ICByZXR1cm4gKmZpbGVfZGVzY3JpcHRvcl90YWJsZXNfOwotfQotCi12b2lkIERlc2NyaXB0b3JQ
b29sOjpUYWJsZXM6OkFkZENoZWNrcG9pbnQoKSB7Ci0gIGNoZWNrcG9pbnRzXy5wdXNoX2JhY2so
Q2hlY2tQb2ludCh0aGlzKSk7Ci19Ci0KLXZvaWQgRGVzY3JpcHRvclBvb2w6OlRhYmxlczo6Q2xl
YXJMYXN0Q2hlY2twb2ludCgpIHsKLSAgR09PR0xFX0RDSEVDSyghY2hlY2twb2ludHNfLmVtcHR5
KCkpOwotICBjaGVja3BvaW50c18ucG9wX2JhY2soKTsKLSAgaWYgKGNoZWNrcG9pbnRzXy5lbXB0
eSgpKSB7Ci0gICAgLy8gQWxsIGNoZWNrcG9pbnRzIGhhdmUgYmVlbiBjbGVhcmVkOiB3ZSBjYW4g
bm93IGNvbW1pdCBhbGwgb2YgdGhlIHBlbmRpbmcKLSAgICAvLyBkYXRhLgotICAgIHN5bWJvbHNf
YWZ0ZXJfY2hlY2twb2ludF8uY2xlYXIoKTsKLSAgICBmaWxlc19hZnRlcl9jaGVja3BvaW50Xy5j
bGVhcigpOwotICAgIGV4dGVuc2lvbnNfYWZ0ZXJfY2hlY2twb2ludF8uY2xlYXIoKTsKLSAgfQot
fQotCi12b2lkIERlc2NyaXB0b3JQb29sOjpUYWJsZXM6OlJvbGxiYWNrVG9MYXN0Q2hlY2twb2lu
dCgpIHsKLSAgR09PR0xFX0RDSEVDSyghY2hlY2twb2ludHNfLmVtcHR5KCkpOwotICBjb25zdCBD
aGVja1BvaW50JiBjaGVja3BvaW50ID0gY2hlY2twb2ludHNfLmJhY2soKTsKLQotICBmb3IgKGlu
dCBpID0gY2hlY2twb2ludC5wZW5kaW5nX3N5bWJvbHNfYmVmb3JlX2NoZWNrcG9pbnQ7Ci0gICAg
ICAgaSA8IHN5bWJvbHNfYWZ0ZXJfY2hlY2twb2ludF8uc2l6ZSgpOwotICAgICAgIGkrKykgewot
ICAgIHN5bWJvbHNfYnlfbmFtZV8uZXJhc2Uoc3ltYm9sc19hZnRlcl9jaGVja3BvaW50X1tpXSk7
Ci0gIH0KLSAgZm9yIChpbnQgaSA9IGNoZWNrcG9pbnQucGVuZGluZ19maWxlc19iZWZvcmVfY2hl
Y2twb2ludDsKLSAgICAgICBpIDwgZmlsZXNfYWZ0ZXJfY2hlY2twb2ludF8uc2l6ZSgpOwotICAg
ICAgIGkrKykgewotICAgIGZpbGVzX2J5X25hbWVfLmVyYXNlKGZpbGVzX2FmdGVyX2NoZWNrcG9p
bnRfW2ldKTsKLSAgfQotICBmb3IgKGludCBpID0gY2hlY2twb2ludC5wZW5kaW5nX2V4dGVuc2lv
bnNfYmVmb3JlX2NoZWNrcG9pbnQ7Ci0gICAgICAgaSA8IGV4dGVuc2lvbnNfYWZ0ZXJfY2hlY2tw
b2ludF8uc2l6ZSgpOwotICAgICAgIGkrKykgewotICAgIGV4dGVuc2lvbnNfLmVyYXNlKGV4dGVu
c2lvbnNfYWZ0ZXJfY2hlY2twb2ludF9baV0pOwotICB9Ci0KLSAgc3ltYm9sc19hZnRlcl9jaGVj
a3BvaW50Xy5yZXNpemUoCi0gICAgICBjaGVja3BvaW50LnBlbmRpbmdfc3ltYm9sc19iZWZvcmVf
Y2hlY2twb2ludCk7Ci0gIGZpbGVzX2FmdGVyX2NoZWNrcG9pbnRfLnJlc2l6ZShjaGVja3BvaW50
LnBlbmRpbmdfZmlsZXNfYmVmb3JlX2NoZWNrcG9pbnQpOwotICBleHRlbnNpb25zX2FmdGVyX2No
ZWNrcG9pbnRfLnJlc2l6ZSgKLSAgICAgIGNoZWNrcG9pbnQucGVuZGluZ19leHRlbnNpb25zX2Jl
Zm9yZV9jaGVja3BvaW50KTsKLQotICBTVExEZWxldGVDb250YWluZXJQb2ludGVycygKLSAgICAg
IHN0cmluZ3NfLmJlZ2luKCkgKyBjaGVja3BvaW50LnN0cmluZ3NfYmVmb3JlX2NoZWNrcG9pbnQs
IHN0cmluZ3NfLmVuZCgpKTsKLSAgU1RMRGVsZXRlQ29udGFpbmVyUG9pbnRlcnMoCi0gICAgICBt
ZXNzYWdlc18uYmVnaW4oKSArIGNoZWNrcG9pbnQubWVzc2FnZXNfYmVmb3JlX2NoZWNrcG9pbnQs
Ci0gICAgICBtZXNzYWdlc18uZW5kKCkpOwotICBTVExEZWxldGVDb250YWluZXJQb2ludGVycygK
LSAgICAgIGZpbGVfdGFibGVzXy5iZWdpbigpICsgY2hlY2twb2ludC5maWxlX3RhYmxlc19iZWZv
cmVfY2hlY2twb2ludCwKLSAgICAgIGZpbGVfdGFibGVzXy5lbmQoKSk7Ci0gIGZvciAoaW50IGkg
PSBjaGVja3BvaW50LmFsbG9jYXRpb25zX2JlZm9yZV9jaGVja3BvaW50OwotICAgICAgIGkgPCBh
bGxvY2F0aW9uc18uc2l6ZSgpOwotICAgICAgIGkrKykgewotICAgIG9wZXJhdG9yIGRlbGV0ZShh
bGxvY2F0aW9uc19baV0pOwotICB9Ci0KLSAgc3RyaW5nc18ucmVzaXplKGNoZWNrcG9pbnQuc3Ry
aW5nc19iZWZvcmVfY2hlY2twb2ludCk7Ci0gIG1lc3NhZ2VzXy5yZXNpemUoY2hlY2twb2ludC5t
ZXNzYWdlc19iZWZvcmVfY2hlY2twb2ludCk7Ci0gIGZpbGVfdGFibGVzXy5yZXNpemUoY2hlY2tw
b2ludC5maWxlX3RhYmxlc19iZWZvcmVfY2hlY2twb2ludCk7Ci0gIGFsbG9jYXRpb25zXy5yZXNp
emUoY2hlY2twb2ludC5hbGxvY2F0aW9uc19iZWZvcmVfY2hlY2twb2ludCk7Ci0gIGNoZWNrcG9p
bnRzXy5wb3BfYmFjaygpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWlubGluZSBTeW1ib2wgRGVz
Y3JpcHRvclBvb2w6OlRhYmxlczo6RmluZFN5bWJvbChjb25zdCBzdHJpbmcmIGtleSkgY29uc3Qg
ewotICBjb25zdCBTeW1ib2wqIHJlc3VsdCA9IEZpbmRPck51bGwoc3ltYm9sc19ieV9uYW1lXywg
a2V5LmNfc3RyKCkpOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICByZXR1cm4ga051bGxT
eW1ib2w7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuICpyZXN1bHQ7Ci0gIH0KLX0KLQotaW5saW5l
IFN5bWJvbCBGaWxlRGVzY3JpcHRvclRhYmxlczo6RmluZE5lc3RlZFN5bWJvbCgKLSAgICBjb25z
dCB2b2lkKiBwYXJlbnQsIGNvbnN0IHN0cmluZyYgbmFtZSkgY29uc3QgewotICBjb25zdCBTeW1i
b2wqIHJlc3VsdCA9Ci0gICAgRmluZE9yTnVsbChzeW1ib2xzX2J5X3BhcmVudF8sIFBvaW50ZXJT
dHJpbmdQYWlyKHBhcmVudCwgbmFtZS5jX3N0cigpKSk7Ci0gIGlmIChyZXN1bHQgPT0gTlVMTCkg
ewotICAgIHJldHVybiBrTnVsbFN5bWJvbDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gKnJlc3Vs
dDsKLSAgfQotfQotCi1pbmxpbmUgU3ltYm9sIEZpbGVEZXNjcmlwdG9yVGFibGVzOjpGaW5kTmVz
dGVkU3ltYm9sT2ZUeXBlKAotICAgIGNvbnN0IHZvaWQqIHBhcmVudCwgY29uc3Qgc3RyaW5nJiBu
YW1lLCBjb25zdCBTeW1ib2w6OlR5cGUgdHlwZSkgY29uc3QgewotICBTeW1ib2wgcmVzdWx0ID0g
RmluZE5lc3RlZFN5bWJvbChwYXJlbnQsIG5hbWUpOwotICBpZiAocmVzdWx0LnR5cGUgIT0gdHlw
ZSkgcmV0dXJuIGtOdWxsU3ltYm9sOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1TeW1ib2wgRGVz
Y3JpcHRvclBvb2w6OlRhYmxlczo6RmluZEJ5TmFtZUhlbHBlcigKLSAgICBjb25zdCBEZXNjcmlw
dG9yUG9vbCogcG9vbCwgY29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIE11dGV4TG9ja01heWJlIGxv
Y2socG9vbC0+bXV0ZXhfKTsKLSAga25vd25fYmFkX3N5bWJvbHNfLmNsZWFyKCk7Ci0gIGtub3du
X2JhZF9maWxlc18uY2xlYXIoKTsKLSAgU3ltYm9sIHJlc3VsdCA9IEZpbmRTeW1ib2wobmFtZSk7
Ci0KLSAgaWYgKHJlc3VsdC5Jc051bGwoKSAmJiBwb29sLT51bmRlcmxheV8gIT0gTlVMTCkgewot
ICAgIC8vIFN5bWJvbCBub3QgZm91bmQ7IGNoZWNrIHRoZSB1bmRlcmxheS4KLSAgICByZXN1bHQg
PQotICAgICAgcG9vbC0+dW5kZXJsYXlfLT50YWJsZXNfLT5GaW5kQnlOYW1lSGVscGVyKHBvb2wt
PnVuZGVybGF5XywgbmFtZSk7Ci0gIH0KLQotICBpZiAocmVzdWx0LklzTnVsbCgpKSB7Ci0gICAg
Ly8gU3ltYm9sIHN0aWxsIG5vdCBmb3VuZCwgc28gY2hlY2sgZmFsbGJhY2sgZGF0YWJhc2UuCi0g
ICAgaWYgKHBvb2wtPlRyeUZpbmRTeW1ib2xJbkZhbGxiYWNrRGF0YWJhc2UobmFtZSkpIHsKLSAg
ICAgIHJlc3VsdCA9IEZpbmRTeW1ib2wobmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotaW5saW5lIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBEZXNjcmlwdG9yUG9vbDo6
VGFibGVzOjpGaW5kRmlsZSgKLSAgICBjb25zdCBzdHJpbmcmIGtleSkgY29uc3QgewotICByZXR1
cm4gRmluZFB0ck9yTnVsbChmaWxlc19ieV9uYW1lXywga2V5LmNfc3RyKCkpOwotfQotCi1pbmxp
bmUgY29uc3QgRmllbGREZXNjcmlwdG9yKiBGaWxlRGVzY3JpcHRvclRhYmxlczo6RmluZEZpZWxk
QnlOdW1iZXIoCi0gICAgY29uc3QgRGVzY3JpcHRvciogcGFyZW50LCBpbnQgbnVtYmVyKSBjb25z
dCB7Ci0gIHJldHVybiBGaW5kUHRyT3JOdWxsKGZpZWxkc19ieV9udW1iZXJfLCBzdGQ6Om1ha2Vf
cGFpcihwYXJlbnQsIG51bWJlcikpOwotfQotCi1pbmxpbmUgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBGaWxlRGVzY3JpcHRvclRhYmxlczo6RmluZEZpZWxkQnlMb3dlcmNhc2VOYW1lKAotICAgIGNv
bnN0IHZvaWQqIHBhcmVudCwgY29uc3Qgc3RyaW5nJiBsb3dlcmNhc2VfbmFtZSkgY29uc3Qgewot
ICByZXR1cm4gRmluZFB0ck9yTnVsbChmaWVsZHNfYnlfbG93ZXJjYXNlX25hbWVfLAotICAgICAg
ICAgICAgICAgICAgICAgICBQb2ludGVyU3RyaW5nUGFpcihwYXJlbnQsIGxvd2VyY2FzZV9uYW1l
LmNfc3RyKCkpKTsKLX0KLQotaW5saW5lIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogRmlsZURlc2Ny
aXB0b3JUYWJsZXM6OkZpbmRGaWVsZEJ5Q2FtZWxjYXNlTmFtZSgKLSAgICBjb25zdCB2b2lkKiBw
YXJlbnQsIGNvbnN0IHN0cmluZyYgY2FtZWxjYXNlX25hbWUpIGNvbnN0IHsKLSAgcmV0dXJuIEZp
bmRQdHJPck51bGwoZmllbGRzX2J5X2NhbWVsY2FzZV9uYW1lXywKLSAgICAgICAgICAgICAgICAg
ICAgICAgUG9pbnRlclN0cmluZ1BhaXIocGFyZW50LCBjYW1lbGNhc2VfbmFtZS5jX3N0cigpKSk7
Ci19Ci0KLWlubGluZSBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBGaWxlRGVzY3JpcHRvclRh
Ymxlczo6RmluZEVudW1WYWx1ZUJ5TnVtYmVyKAotICAgIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBw
YXJlbnQsIGludCBudW1iZXIpIGNvbnN0IHsKLSAgcmV0dXJuIEZpbmRQdHJPck51bGwoZW51bV92
YWx1ZXNfYnlfbnVtYmVyXywgc3RkOjptYWtlX3BhaXIocGFyZW50LCBudW1iZXIpKTsKLX0KLQot
aW5saW5lIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqCi1GaWxlRGVzY3JpcHRvclRhYmxlczo6
RmluZEVudW1WYWx1ZUJ5TnVtYmVyQ3JlYXRpbmdJZlVua25vd24oCi0gICAgY29uc3QgRW51bURl
c2NyaXB0b3IqIHBhcmVudCwgaW50IG51bWJlcikgY29uc3QgewotICAvLyBGaXJzdCB0cnksIHdp
dGggbWFwIG9mIGNvbXBpbGVkLWluIHZhbHVlcy4KLSAgewotICAgIGNvbnN0IEVudW1WYWx1ZURl
c2NyaXB0b3IqIGRlc2MgPQotICAgICAgICBGaW5kUHRyT3JOdWxsKGVudW1fdmFsdWVzX2J5X251
bWJlcl8sIHN0ZDo6bWFrZV9wYWlyKHBhcmVudCwgbnVtYmVyKSk7Ci0gICAgaWYgKGRlc2MgIT0g
TlVMTCkgewotICAgICAgcmV0dXJuIGRlc2M7Ci0gICAgfQotICB9Ci0gIC8vIFNlY29uZCB0cnks
IHdpdGggcmVhZGVyIGxvY2sgaGVsZCBvbiB1bmtub3duIGVudW0gdmFsdWVzOiBjb21tb24gY2Fz
ZS4KLSAgewotICAgIFJlYWRlck11dGV4TG9jayBsKCZ1bmtub3duX2VudW1fdmFsdWVzX211Xyk7
Ci0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogZGVzYyA9IEZpbmRQdHJPck51bGwoCi0g
ICAgICAgIHVua25vd25fZW51bV92YWx1ZXNfYnlfbnVtYmVyXywgc3RkOjptYWtlX3BhaXIocGFy
ZW50LCBudW1iZXIpKTsKLSAgICBpZiAoZGVzYyAhPSBOVUxMKSB7Ci0gICAgICByZXR1cm4gZGVz
YzsKLSAgICB9Ci0gIH0KLSAgLy8gSWYgbm90IGZvdW5kLCB0cnkgYWdhaW4gd2l0aCB3cml0ZXIg
bG9jayBoZWxkLCBhbmQgY3JlYXRlIG5ldyBkZXNjcmlwdG9yIGlmCi0gIC8vIG5lY2Vzc2FyeS4K
LSAgewotICAgIFdyaXRlck11dGV4TG9jayBsKCZ1bmtub3duX2VudW1fdmFsdWVzX211Xyk7Ci0g
ICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogZGVzYyA9IEZpbmRQdHJPck51bGwoCi0gICAg
ICAgIHVua25vd25fZW51bV92YWx1ZXNfYnlfbnVtYmVyXywgc3RkOjptYWtlX3BhaXIocGFyZW50
LCBudW1iZXIpKTsKLSAgICBpZiAoZGVzYyAhPSBOVUxMKSB7Ci0gICAgICByZXR1cm4gZGVzYzsK
LSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYW4gRW51bVZhbHVlRGVzY3JpcHRvciBkeW5hbWljYWxs
eS4gV2UgZG9uJ3QgaW5zZXJ0IGl0IGludG8gdGhlCi0gICAgLy8gRW51bURlc2NyaXB0b3IgKGl0
J3Mgbm90IGEgcGFydCBvZiB0aGUgZW51bSBhcyBvcmlnaW5hbGx5IGRlZmluZWQpLCBidXQKLSAg
ICAvLyB3ZSBkbyBpbnNlcnQgaXQgaW50byB0aGUgdGFibGUgc28gdGhhdCB3ZSBjYW4gcmV0dXJu
IHRoZSBzYW1lIHBvaW50ZXIKLSAgICAvLyBsYXRlci4KLSAgICBzdHJpbmcgZW51bV92YWx1ZV9u
YW1lID0gU3RyaW5nUHJpbnRmKAotICAgICAgICAiVU5LTk9XTl9FTlVNX1ZBTFVFXyVzXyVkIiwg
cGFyZW50LT5uYW1lKCkuY19zdHIoKSwgbnVtYmVyKTsKLSAgICBEZXNjcmlwdG9yUG9vbDo6VGFi
bGVzKiB0YWJsZXMgPQotICAgICAgICBjb25zdF9jYXN0PERlc2NyaXB0b3JQb29sOjpUYWJsZXMq
PihEZXNjcmlwdG9yUG9vbDo6Z2VuZXJhdGVkX3Bvb2woKS0+Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc18uZ2V0KCkpOwotICAgIEVudW1WYWx1ZURl
c2NyaXB0b3IqIHJlc3VsdCA9IHRhYmxlcy0+QWxsb2NhdGU8RW51bVZhbHVlRGVzY3JpcHRvcj4o
KTsKLSAgICByZXN1bHQtPm5hbWVfID0gdGFibGVzLT5BbGxvY2F0ZVN0cmluZyhlbnVtX3ZhbHVl
X25hbWUpOwotICAgIHJlc3VsdC0+ZnVsbF9uYW1lXyA9IHRhYmxlcy0+QWxsb2NhdGVTdHJpbmco
cGFyZW50LT5mdWxsX25hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiLiIgKyBlbnVtX3ZhbHVlX25hbWUpOwotICAgIHJlc3VsdC0+bnVtYmVy
XyA9IG51bWJlcjsKLSAgICByZXN1bHQtPnR5cGVfID0gcGFyZW50OwotICAgIHJlc3VsdC0+b3B0
aW9uc18gPSAmRW51bVZhbHVlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpOwotICAgIEluc2Vy
dElmTm90UHJlc2VudCgmdW5rbm93bl9lbnVtX3ZhbHVlc19ieV9udW1iZXJfLAotICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihwYXJlbnQsIG51bWJlciksIHJlc3VsdCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi0KLWlubGluZSBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIERlc2NyaXB0b3JQb29sOjpUYWJsZXM6OkZpbmRFeHRlbnNpb24oCi0gICAgY29uc3QgRGVz
Y3JpcHRvciogZXh0ZW5kZWUsIGludCBudW1iZXIpIHsKLSAgcmV0dXJuIEZpbmRQdHJPck51bGwo
ZXh0ZW5zaW9uc18sIHN0ZDo6bWFrZV9wYWlyKGV4dGVuZGVlLCBudW1iZXIpKTsKLX0KLQotaW5s
aW5lIHZvaWQgRGVzY3JpcHRvclBvb2w6OlRhYmxlczo6RmluZEFsbEV4dGVuc2lvbnMoCi0gICAg
Y29uc3QgRGVzY3JpcHRvciogZXh0ZW5kZWUsIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3Iq
Piogb3V0KSBjb25zdCB7Ci0gIEV4dGVuc2lvbnNHcm91cGVkQnlEZXNjcmlwdG9yTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9Ci0gICAgICBleHRlbnNpb25zXy5sb3dlcl9ib3VuZChzdGQ6Om1ha2Vf
cGFpcihleHRlbmRlZSwgMCkpOwotICBmb3IgKDsgaXQgIT0gZXh0ZW5zaW9uc18uZW5kKCkgJiYg
aXQtPmZpcnN0LmZpcnN0ID09IGV4dGVuZGVlOyArK2l0KSB7Ci0gICAgb3V0LT5wdXNoX2JhY2so
aXQtPnNlY29uZCk7Ci0gIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIERlc2NyaXB0b3JQ
b29sOjpUYWJsZXM6OkFkZFN5bWJvbCgKLSAgICBjb25zdCBzdHJpbmcmIGZ1bGxfbmFtZSwgU3lt
Ym9sIHN5bWJvbCkgewotICBpZiAoSW5zZXJ0SWZOb3RQcmVzZW50KCZzeW1ib2xzX2J5X25hbWVf
LCBmdWxsX25hbWUuY19zdHIoKSwgc3ltYm9sKSkgewotICAgIHN5bWJvbHNfYWZ0ZXJfY2hlY2tw
b2ludF8ucHVzaF9iYWNrKGZ1bGxfbmFtZS5jX3N0cigpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAg
fSBlbHNlIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KLQotYm9vbCBGaWxlRGVzY3JpcHRv
clRhYmxlczo6QWRkQWxpYXNVbmRlclBhcmVudCgKLSAgICBjb25zdCB2b2lkKiBwYXJlbnQsIGNv
bnN0IHN0cmluZyYgbmFtZSwgU3ltYm9sIHN5bWJvbCkgewotICBQb2ludGVyU3RyaW5nUGFpciBi
eV9wYXJlbnRfa2V5KHBhcmVudCwgbmFtZS5jX3N0cigpKTsKLSAgcmV0dXJuIEluc2VydElmTm90
UHJlc2VudCgmc3ltYm9sc19ieV9wYXJlbnRfLCBieV9wYXJlbnRfa2V5LCBzeW1ib2wpOwotfQot
Ci1ib29sIERlc2NyaXB0b3JQb29sOjpUYWJsZXM6OkFkZEZpbGUoY29uc3QgRmlsZURlc2NyaXB0
b3IqIGZpbGUpIHsKLSAgaWYgKEluc2VydElmTm90UHJlc2VudCgmZmlsZXNfYnlfbmFtZV8sIGZp
bGUtPm5hbWUoKS5jX3N0cigpLCBmaWxlKSkgewotICAgIGZpbGVzX2FmdGVyX2NoZWNrcG9pbnRf
LnB1c2hfYmFjayhmaWxlLT5uYW1lKCkuY19zdHIoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0g
ZWxzZSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLXZvaWQgRmlsZURlc2NyaXB0b3JU
YWJsZXM6OkFkZEZpZWxkQnlTdHlsaXplZE5hbWVzKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQpIHsKLSAgY29uc3Qgdm9pZCogcGFyZW50OwotICBpZiAoZmllbGQtPmlzX2V4dGVu
c2lvbigpKSB7Ci0gICAgaWYgKGZpZWxkLT5leHRlbnNpb25fc2NvcGUoKSA9PSBOVUxMKSB7Ci0g
ICAgICBwYXJlbnQgPSBmaWVsZC0+ZmlsZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwYXJlbnQg
PSBmaWVsZC0+ZXh0ZW5zaW9uX3Njb3BlKCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHBhcmVu
dCA9IGZpZWxkLT5jb250YWluaW5nX3R5cGUoKTsKLSAgfQotCi0gIFBvaW50ZXJTdHJpbmdQYWly
IGxvd2VyY2FzZV9rZXkocGFyZW50LCBmaWVsZC0+bG93ZXJjYXNlX25hbWUoKS5jX3N0cigpKTsK
LSAgSW5zZXJ0SWZOb3RQcmVzZW50KCZmaWVsZHNfYnlfbG93ZXJjYXNlX25hbWVfLCBsb3dlcmNh
c2Vfa2V5LCBmaWVsZCk7Ci0KLSAgUG9pbnRlclN0cmluZ1BhaXIgY2FtZWxjYXNlX2tleShwYXJl
bnQsIGZpZWxkLT5jYW1lbGNhc2VfbmFtZSgpLmNfc3RyKCkpOwotICBJbnNlcnRJZk5vdFByZXNl
bnQoJmZpZWxkc19ieV9jYW1lbGNhc2VfbmFtZV8sIGNhbWVsY2FzZV9rZXksIGZpZWxkKTsKLX0K
LQotYm9vbCBGaWxlRGVzY3JpcHRvclRhYmxlczo6QWRkRmllbGRCeU51bWJlcihjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIERlc2NyaXB0b3JJbnRQYWlyIGtleShmaWVsZC0+Y29u
dGFpbmluZ190eXBlKCksIGZpZWxkLT5udW1iZXIoKSk7Ci0gIHJldHVybiBJbnNlcnRJZk5vdFBy
ZXNlbnQoJmZpZWxkc19ieV9udW1iZXJfLCBrZXksIGZpZWxkKTsKLX0KLQotYm9vbCBGaWxlRGVz
Y3JpcHRvclRhYmxlczo6QWRkRW51bVZhbHVlQnlOdW1iZXIoCi0gICAgY29uc3QgRW51bVZhbHVl
RGVzY3JpcHRvciogdmFsdWUpIHsKLSAgRW51bUludFBhaXIga2V5KHZhbHVlLT50eXBlKCksIHZh
bHVlLT5udW1iZXIoKSk7Ci0gIHJldHVybiBJbnNlcnRJZk5vdFByZXNlbnQoJmVudW1fdmFsdWVz
X2J5X251bWJlcl8sIGtleSwgdmFsdWUpOwotfQotCi1ib29sIERlc2NyaXB0b3JQb29sOjpUYWJs
ZXM6OkFkZEV4dGVuc2lvbihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIERlc2Ny
aXB0b3JJbnRQYWlyIGtleShmaWVsZC0+Y29udGFpbmluZ190eXBlKCksIGZpZWxkLT5udW1iZXIo
KSk7Ci0gIGlmIChJbnNlcnRJZk5vdFByZXNlbnQoJmV4dGVuc2lvbnNfLCBrZXksIGZpZWxkKSkg
ewotICAgIGV4dGVuc2lvbnNfYWZ0ZXJfY2hlY2twb2ludF8ucHVzaF9iYWNrKGtleSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLVR5cGUqIERlc2NyaXB0b3JQ
b29sOjpUYWJsZXM6OkFsbG9jYXRlKCkgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUeXBl
Kj4oQWxsb2NhdGVCeXRlcyhzaXplb2YoVHlwZSkpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KLVR5cGUqIERlc2NyaXB0b3JQb29sOjpUYWJsZXM6OkFsbG9jYXRlQXJyYXkoaW50IGNv
dW50KSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFR5cGUqPihBbGxvY2F0ZUJ5dGVzKHNp
emVvZihUeXBlKSAqIGNvdW50KSk7Ci19Ci0KLXN0cmluZyogRGVzY3JpcHRvclBvb2w6OlRhYmxl
czo6QWxsb2NhdGVTdHJpbmcoY29uc3Qgc3RyaW5nJiB2YWx1ZSkgewotICBzdHJpbmcqIHJlc3Vs
dCA9IG5ldyBzdHJpbmcodmFsdWUpOwotICBzdHJpbmdzXy5wdXNoX2JhY2socmVzdWx0KTsKLSAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLVR5cGUqIERlc2Ny
aXB0b3JQb29sOjpUYWJsZXM6OkFsbG9jYXRlTWVzc2FnZShUeXBlKiAvKiBkdW1teSAqLykgewot
ICBUeXBlKiByZXN1bHQgPSBuZXcgVHlwZTsKLSAgbWVzc2FnZXNfLnB1c2hfYmFjayhyZXN1bHQp
OwotICByZXR1cm4gcmVzdWx0OwotfQotCi1GaWxlRGVzY3JpcHRvclRhYmxlcyogRGVzY3JpcHRv
clBvb2w6OlRhYmxlczo6QWxsb2NhdGVGaWxlVGFibGVzKCkgewotICBGaWxlRGVzY3JpcHRvclRh
YmxlcyogcmVzdWx0ID0gbmV3IEZpbGVEZXNjcmlwdG9yVGFibGVzOwotICBmaWxlX3RhYmxlc18u
cHVzaF9iYWNrKHJlc3VsdCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIERlc2NyaXB0
b3JQb29sOjpUYWJsZXM6OkFsbG9jYXRlQnl0ZXMoaW50IHNpemUpIHsKLSAgLy8gVE9ETyhrZW50
b24pOiAgV291bGQgaXQgYmUgd29ydGh3aGlsZSB0byBpbXBsZW1lbnQgdGhpcyBpbiBzb21lIG1v
cmUKLSAgLy8gc29waGlzdGljYXRlZCB3YXk/ICBQcm9iYWJseSBub3QgZm9yIHRoZSBvcGVuIHNv
dXJjZSByZWxlYXNlLCBidXQgZm9yCi0gIC8vIGludGVybmFsIHVzZSB3ZSBjb3VsZCBlYXNpbHkg
cGx1ZyBpbiBvbmUgb2Ygb3VyIGV4aXN0aW5nIG1lbW9yeSBwb29sCi0gIC8vIGFsbG9jYXRvcnMu
Li4KLSAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIE5VTEw7Ci0KLSAgdm9pZCogcmVzdWx0ID0gb3Bl
cmF0b3IgbmV3KHNpemUpOwotICBhbGxvY2F0aW9uc18ucHVzaF9iYWNrKHJlc3VsdCk7Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgRmlsZURlc2NyaXB0b3JUYWJsZXM6OkJ1aWxkTG9jYXRp
b25zQnlQYXRoKAotICAgIHBhaXI8Y29uc3QgRmlsZURlc2NyaXB0b3JUYWJsZXMqLCBjb25zdCBT
b3VyY2VDb2RlSW5mbyo+KiBwKSB7Ci0gIGZvciAoaW50IGkgPSAwLCBsZW4gPSBwLT5zZWNvbmQt
PmxvY2F0aW9uX3NpemUoKTsgaSA8IGxlbjsgKytpKSB7Ci0gICAgY29uc3QgU291cmNlQ29kZUlu
Zm9fTG9jYXRpb24qIGxvYyA9ICZwLT5zZWNvbmQtPmxvY2F0aW9uKCkuR2V0KGkpOwotICAgIHAt
PmZpcnN0LT5sb2NhdGlvbnNfYnlfcGF0aF9bSm9pbihsb2MtPnBhdGgoKSwgIiwiKV0gPSBsb2M7
Ci0gIH0KLX0KLQotY29uc3QgU291cmNlQ29kZUluZm9fTG9jYXRpb24qIEZpbGVEZXNjcmlwdG9y
VGFibGVzOjpHZXRTb3VyY2VMb2NhdGlvbigKLSAgICBjb25zdCB2ZWN0b3I8aW50PiYgcGF0aCwg
Y29uc3QgU291cmNlQ29kZUluZm8qIGluZm8pIGNvbnN0IHsKLSAgcGFpcjxjb25zdCBGaWxlRGVz
Y3JpcHRvclRhYmxlcyosIGNvbnN0IFNvdXJjZUNvZGVJbmZvKj4gcCgKLSAgICAgIHN0ZDo6bWFr
ZV9wYWlyKHRoaXMsIGluZm8pKTsKLSAgbG9jYXRpb25zX2J5X3BhdGhfb25jZV8uSW5pdCgmRmls
ZURlc2NyaXB0b3JUYWJsZXM6OkJ1aWxkTG9jYXRpb25zQnlQYXRoLCAmcCk7Ci0gIHJldHVybiBG
aW5kUHRyT3JOdWxsKGxvY2F0aW9uc19ieV9wYXRoXywgSm9pbihwYXRoLCAiLCIpKTsKLX0KLQot
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLy8gRGVzY3JpcHRvclBvb2wKLQotRGVzY3JpcHRvclBvb2w6OkVycm9y
Q29sbGVjdG9yOjp+RXJyb3JDb2xsZWN0b3IoKSB7fQotCi1EZXNjcmlwdG9yUG9vbDo6RGVzY3Jp
cHRvclBvb2woKQotICA6IG11dGV4XyhOVUxMKSwKLSAgICBmYWxsYmFja19kYXRhYmFzZV8oTlVM
TCksCi0gICAgZGVmYXVsdF9lcnJvcl9jb2xsZWN0b3JfKE5VTEwpLAotICAgIHVuZGVybGF5XyhO
VUxMKSwKLSAgICB0YWJsZXNfKG5ldyBUYWJsZXMpLAotICAgIGVuZm9yY2VfZGVwZW5kZW5jaWVz
Xyh0cnVlKSwKLSAgICBhbGxvd191bmtub3duXyhmYWxzZSksCi0gICAgZW5mb3JjZV93ZWFrXyhm
YWxzZSkge30KLQotRGVzY3JpcHRvclBvb2w6OkRlc2NyaXB0b3JQb29sKERlc2NyaXB0b3JEYXRh
YmFzZSogZmFsbGJhY2tfZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RXJyb3JDb2xsZWN0b3IqIGVycm9yX2NvbGxlY3RvcikKLSAgOiBtdXRleF8obmV3IE11dGV4KSwK
LSAgICBmYWxsYmFja19kYXRhYmFzZV8oZmFsbGJhY2tfZGF0YWJhc2UpLAotICAgIGRlZmF1bHRf
ZXJyb3JfY29sbGVjdG9yXyhlcnJvcl9jb2xsZWN0b3IpLAotICAgIHVuZGVybGF5XyhOVUxMKSwK
LSAgICB0YWJsZXNfKG5ldyBUYWJsZXMpLAotICAgIGVuZm9yY2VfZGVwZW5kZW5jaWVzXyh0cnVl
KSwKLSAgICBhbGxvd191bmtub3duXyhmYWxzZSksCi0gICAgZW5mb3JjZV93ZWFrXyhmYWxzZSkg
ewotfQotCi1EZXNjcmlwdG9yUG9vbDo6RGVzY3JpcHRvclBvb2woY29uc3QgRGVzY3JpcHRvclBv
b2wqIHVuZGVybGF5KQotICA6IG11dGV4XyhOVUxMKSwKLSAgICBmYWxsYmFja19kYXRhYmFzZV8o
TlVMTCksCi0gICAgZGVmYXVsdF9lcnJvcl9jb2xsZWN0b3JfKE5VTEwpLAotICAgIHVuZGVybGF5
Xyh1bmRlcmxheSksCi0gICAgdGFibGVzXyhuZXcgVGFibGVzKSwKLSAgICBlbmZvcmNlX2RlcGVu
ZGVuY2llc18odHJ1ZSksCi0gICAgYWxsb3dfdW5rbm93bl8oZmFsc2UpLAotICAgIGVuZm9yY2Vf
d2Vha18oZmFsc2UpIHt9Ci0KLURlc2NyaXB0b3JQb29sOjp+RGVzY3JpcHRvclBvb2woKSB7Ci0g
IGlmIChtdXRleF8gIT0gTlVMTCkgZGVsZXRlIG11dGV4XzsKLX0KLQotLy8gRGVzY3JpcHRvclBv
b2w6OkJ1aWxkRmlsZSgpIGRlZmluZWQgbGF0ZXIuCi0vLyBEZXNjcmlwdG9yUG9vbDo6QnVpbGRG
aWxlQ29sbGVjdGluZ0Vycm9ycygpIGRlZmluZWQgbGF0ZXIuCi0KLXZvaWQgRGVzY3JpcHRvclBv
b2w6OkludGVybmFsRG9udEVuZm9yY2VEZXBlbmRlbmNpZXMoKSB7Ci0gIGVuZm9yY2VfZGVwZW5k
ZW5jaWVzXyA9IGZhbHNlOwotfQotCi12b2lkIERlc2NyaXB0b3JQb29sOjpBZGRVbnVzZWRJbXBv
cnRUcmFja0ZpbGUoY29uc3Qgc3RyaW5nJiBmaWxlX25hbWUpIHsKLSAgdW51c2VkX2ltcG9ydF90
cmFja19maWxlc18uaW5zZXJ0KGZpbGVfbmFtZSk7Ci19Ci0KLXZvaWQgRGVzY3JpcHRvclBvb2w6
OkNsZWFyVW51c2VkSW1wb3J0VHJhY2tGaWxlcygpIHsKLSAgdW51c2VkX2ltcG9ydF90cmFja19m
aWxlc18uY2xlYXIoKTsKLX0KLQotYm9vbCBEZXNjcmlwdG9yUG9vbDo6SW50ZXJuYWxJc0ZpbGVM
b2FkZWQoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSkgY29uc3QgewotICBNdXRleExvY2tNYXliZSBs
b2NrKG11dGV4Xyk7Ci0gIHJldHVybiB0YWJsZXNfLT5GaW5kRmlsZShmaWxlbmFtZSkgIT0gTlVM
TDsKLX0KLQotLy8gZ2VuZXJhdGVkX3Bvb2wgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotCi1uYW1lc3BhY2UgewotCi0KLUVuY29kZWREZXNjcmlw
dG9yRGF0YWJhc2UqIGdlbmVyYXRlZF9kYXRhYmFzZV8gPSBOVUxMOwotRGVzY3JpcHRvclBvb2wq
IGdlbmVyYXRlZF9wb29sXyA9IE5VTEw7Ci1HT09HTEVfUFJPVE9CVUZfREVDTEFSRV9PTkNFKGdl
bmVyYXRlZF9wb29sX2luaXRfKTsKLQotdm9pZCBEZWxldGVHZW5lcmF0ZWRQb29sKCkgewotICBk
ZWxldGUgZ2VuZXJhdGVkX2RhdGFiYXNlXzsKLSAgZ2VuZXJhdGVkX2RhdGFiYXNlXyA9IE5VTEw7
Ci0gIGRlbGV0ZSBnZW5lcmF0ZWRfcG9vbF87Ci0gIGdlbmVyYXRlZF9wb29sXyA9IE5VTEw7Ci19
Ci0KLXN0YXRpYyB2b2lkIEluaXRHZW5lcmF0ZWRQb29sKCkgewotICBnZW5lcmF0ZWRfZGF0YWJh
c2VfID0gbmV3IEVuY29kZWREZXNjcmlwdG9yRGF0YWJhc2U7Ci0gIGdlbmVyYXRlZF9wb29sXyA9
IG5ldyBEZXNjcmlwdG9yUG9vbChnZW5lcmF0ZWRfZGF0YWJhc2VfKTsKLQotICBpbnRlcm5hbDo6
T25TaHV0ZG93bigmRGVsZXRlR2VuZXJhdGVkUG9vbCk7Ci19Ci0KLWlubGluZSB2b2lkIEluaXRH
ZW5lcmF0ZWRQb29sT25jZSgpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpHb29nbGVPbmNlSW5p
dCgmZ2VuZXJhdGVkX3Bvb2xfaW5pdF8sICZJbml0R2VuZXJhdGVkUG9vbCk7Ci19Ci0KLX0gIC8v
IGFub255bW91cyBuYW1lc3BhY2UKLQotY29uc3QgRGVzY3JpcHRvclBvb2wqIERlc2NyaXB0b3JQ
b29sOjpnZW5lcmF0ZWRfcG9vbCgpIHsKLSAgSW5pdEdlbmVyYXRlZFBvb2xPbmNlKCk7Ci0gIHJl
dHVybiBnZW5lcmF0ZWRfcG9vbF87Ci19Ci0KLQotRGVzY3JpcHRvclBvb2wqIERlc2NyaXB0b3JQ
b29sOjppbnRlcm5hbF9nZW5lcmF0ZWRfcG9vbCgpIHsKLSAgSW5pdEdlbmVyYXRlZFBvb2xPbmNl
KCk7Ci0gIHJldHVybiBnZW5lcmF0ZWRfcG9vbF87Ci19Ci0KLXZvaWQgRGVzY3JpcHRvclBvb2w6
OkludGVybmFsQWRkR2VuZXJhdGVkRmlsZSgKLSAgICBjb25zdCB2b2lkKiBlbmNvZGVkX2ZpbGVf
ZGVzY3JpcHRvciwgaW50IHNpemUpIHsKLSAgLy8gU28sIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IGluIHRoZSBwcm9jZXNzIG9mIGluaXRpYWxpemluZyB0aGUKLSAgLy8gZGVzY3JpcHRvcnMgZm9y
IGdlbmVyYXRlZCBwcm90byBjbGFzc2VzLiAgRWFjaCBnZW5lcmF0ZWQgLnBiLmNjIGZpbGUKLSAg
Ly8gaGFzIGFuIGludGVybmFsIHByb2NlZHVyZSBjYWxsZWQgQWRkRGVzY3JpcHRvcnMoKSB3aGlj
aCBpcyBjYWxsZWQgYXQKLSAgLy8gcHJvY2VzcyBzdGFydHVwLCBhbmQgdGhhdCBmdW5jdGlvbiBj
YWxscyB0aGlzIG9uZSBpbiBvcmRlciB0byByZWdpc3RlcgotICAvLyB0aGUgcmF3IGJ5dGVzIG9m
IHRoZSBGaWxlRGVzY3JpcHRvclByb3RvIHJlcHJlc2VudGluZyB0aGUgZmlsZS4KLSAgLy8KLSAg
Ly8gV2UgZG8gbm90IGFjdHVhbGx5IGNvbnN0cnVjdCB0aGUgZGVzY3JpcHRvciBvYmplY3RzIHJp
Z2h0IGF3YXkuICBXZSBqdXN0Ci0gIC8vIGhhbmcgb24gdG8gdGhlIGJ5dGVzIHVudGlsIHRoZXkg
YXJlIGFjdHVhbGx5IG5lZWRlZC4gIFdlIGFjdHVhbGx5IGNvbnN0cnVjdAotICAvLyB0aGUgZGVz
Y3JpcHRvciB0aGUgZmlyc3QgdGltZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0aGluZ3MgaGFwcGVu
czoKLSAgLy8gKiBTb21lb25lIGNhbGxzIGEgbWV0aG9kIGxpa2UgZGVzY3JpcHRvcigpLCBHZXRE
ZXNjcmlwdG9yKCksIG9yCi0gIC8vICAgR2V0UmVmbGVjdGlvbigpIG9uIHRoZSBnZW5lcmF0ZWQg
dHlwZXMsIHdoaWNoIHJlcXVpcmVzIHJldHVybmluZyB0aGUKLSAgLy8gICBkZXNjcmlwdG9yIG9y
IGFuIG9iamVjdCBiYXNlZCBvbiBpdC4KLSAgLy8gKiBTb21lb25lIGxvb2tzIHVwIHRoZSBkZXNj
cmlwdG9yIGluIERlc2NyaXB0b3JQb29sOjpnZW5lcmF0ZWRfcG9vbCgpLgotICAvLwotICAvLyBP
bmNlIG9uZSBvZiB0aGVzZSBoYXBwZW5zLCB0aGUgRGVzY3JpcHRvclBvb2wgYWN0dWFsbHkgcGFy
c2VzIHRoZQotICAvLyBGaWxlRGVzY3JpcHRvclByb3RvIGFuZCBnZW5lcmF0ZXMgYSBGaWxlRGVz
Y3JpcHRvciAoYW5kIGFsbCBpdHMgY2hpbGRyZW4pCi0gIC8vIGJhc2VkIG9uIGl0LgotICAvLwot
ICAvLyBOb3RlIHRoYXQgRmlsZURlc2NyaXB0b3JQcm90byBpcyBpdHNlbGYgYSBnZW5lcmF0ZWQg
cHJvdG9jb2wgbWVzc2FnZS4KLSAgLy8gVGhlcmVmb3JlLCB3aGVuIHdlIHBhcnNlIG9uZSwgd2Ug
aGF2ZSB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gYXZvaWQgdXNpbmcKLSAgLy8gYW55IGRlc2NyaXB0
b3ItYmFzZWQgb3BlcmF0aW9ucywgc2luY2UgdGhpcyBtaWdodCBjYXVzZSBpbmZpbml0ZSByZWN1
cnNpb24KLSAgLy8gb3IgZGVhZGxvY2suCi0gIEluaXRHZW5lcmF0ZWRQb29sT25jZSgpOwotICBH
T09HTEVfQ0hFQ0soZ2VuZXJhdGVkX2RhdGFiYXNlXy0+QWRkKGVuY29kZWRfZmlsZV9kZXNjcmlw
dG9yLCBzaXplKSk7Ci19Ci0KLQotLy8gRmluZCpCeSogbWV0aG9kcyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vLyBUT0RPKGtlbnRvbik6ICBU
aGVyZSdzIGEgbG90IG9mIHJlcGVhdGVkIGNvZGUgaGVyZSwgYnV0IEknbSBub3Qgc3VyZSBpZgot
Ly8gICB0aGVyZSdzIGFueSBnb29kIHdheSB0byBmYWN0b3IgaXQgb3V0LiAgVGhpbmsgYWJvdXQg
dGhpcyBzb21lIHRpbWUgd2hlbgotLy8gICB0aGVyZSdzIG5vdGhpbmcgbW9yZSBpbXBvcnRhbnQg
dG8gZG8gKHJlYWQ6IG5ldmVyKS4KLQotY29uc3QgRmlsZURlc2NyaXB0b3IqIERlc2NyaXB0b3JQ
b29sOjpGaW5kRmlsZUJ5TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0IHsKLSAgTXV0ZXhM
b2NrTWF5YmUgbG9jayhtdXRleF8pOwotICB0YWJsZXNfLT5rbm93bl9iYWRfc3ltYm9sc18uY2xl
YXIoKTsKLSAgdGFibGVzXy0+a25vd25fYmFkX2ZpbGVzXy5jbGVhcigpOwotICBjb25zdCBGaWxl
RGVzY3JpcHRvciogcmVzdWx0ID0gdGFibGVzXy0+RmluZEZpbGUobmFtZSk7Ci0gIGlmIChyZXN1
bHQgIT0gTlVMTCkgcmV0dXJuIHJlc3VsdDsKLSAgaWYgKHVuZGVybGF5XyAhPSBOVUxMKSB7Ci0g
ICAgcmVzdWx0ID0gdW5kZXJsYXlfLT5GaW5kRmlsZUJ5TmFtZShuYW1lKTsKLSAgICBpZiAocmVz
dWx0ICE9IE5VTEwpIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgaWYgKFRyeUZpbmRGaWxlSW5GYWxs
YmFja0RhdGFiYXNlKG5hbWUpKSB7Ci0gICAgcmVzdWx0ID0gdGFibGVzXy0+RmluZEZpbGUobmFt
ZSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSByZXR1cm4gcmVzdWx0OwotICB9Ci0gIHJldHVy
biBOVUxMOwotfQotCi1jb25zdCBGaWxlRGVzY3JpcHRvciogRGVzY3JpcHRvclBvb2w6OkZpbmRG
aWxlQ29udGFpbmluZ1N5bWJvbCgKLSAgICBjb25zdCBzdHJpbmcmIHN5bWJvbF9uYW1lKSBjb25z
dCB7Ci0gIE11dGV4TG9ja01heWJlIGxvY2sobXV0ZXhfKTsKLSAgdGFibGVzXy0+a25vd25fYmFk
X3N5bWJvbHNfLmNsZWFyKCk7Ci0gIHRhYmxlc18tPmtub3duX2JhZF9maWxlc18uY2xlYXIoKTsK
LSAgU3ltYm9sIHJlc3VsdCA9IHRhYmxlc18tPkZpbmRTeW1ib2woc3ltYm9sX25hbWUpOwotICBp
ZiAoIXJlc3VsdC5Jc051bGwoKSkgcmV0dXJuIHJlc3VsdC5HZXRGaWxlKCk7Ci0gIGlmICh1bmRl
cmxheV8gIT0gTlVMTCkgewotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlX3Jlc3VsdCA9
Ci0gICAgICB1bmRlcmxheV8tPkZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbChzeW1ib2xfbmFtZSk7
Ci0gICAgaWYgKGZpbGVfcmVzdWx0ICE9IE5VTEwpIHJldHVybiBmaWxlX3Jlc3VsdDsKLSAgfQot
ICBpZiAoVHJ5RmluZFN5bWJvbEluRmFsbGJhY2tEYXRhYmFzZShzeW1ib2xfbmFtZSkpIHsKLSAg
ICByZXN1bHQgPSB0YWJsZXNfLT5GaW5kU3ltYm9sKHN5bWJvbF9uYW1lKTsKLSAgICBpZiAoIXJl
c3VsdC5Jc051bGwoKSkgcmV0dXJuIHJlc3VsdC5HZXRGaWxlKCk7Ci0gIH0KLSAgcmV0dXJuIE5V
TEw7Ci19Ci0KLWNvbnN0IERlc2NyaXB0b3IqIERlc2NyaXB0b3JQb29sOjpGaW5kTWVzc2FnZVR5
cGVCeU5hbWUoCi0gICAgY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdCB7Ci0gIFN5bWJvbCByZXN1
bHQgPSB0YWJsZXNfLT5GaW5kQnlOYW1lSGVscGVyKHRoaXMsIG5hbWUpOwotICByZXR1cm4gKHJl
c3VsdC50eXBlID09IFN5bWJvbDo6TUVTU0FHRSkgPyByZXN1bHQuZGVzY3JpcHRvciA6IE5VTEw7
Ci19Ci0KLWNvbnN0IEZpZWxkRGVzY3JpcHRvciogRGVzY3JpcHRvclBvb2w6OkZpbmRGaWVsZEJ5
TmFtZSgKLSAgICBjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0IHsKLSAgU3ltYm9sIHJlc3VsdCA9
IHRhYmxlc18tPkZpbmRCeU5hbWVIZWxwZXIodGhpcywgbmFtZSk7Ci0gIGlmIChyZXN1bHQudHlw
ZSA9PSBTeW1ib2w6OkZJRUxEICYmCi0gICAgICAhcmVzdWx0LmZpZWxkX2Rlc2NyaXB0b3ItPmlz
X2V4dGVuc2lvbigpKSB7Ci0gICAgcmV0dXJuIHJlc3VsdC5maWVsZF9kZXNjcmlwdG9yOwotICB9
IGVsc2UgewotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLWNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogRGVzY3JpcHRvclBvb2w6OkZpbmRFeHRlbnNpb25CeU5hbWUoCi0gICAgY29uc3Qgc3RyaW5n
JiBuYW1lKSBjb25zdCB7Ci0gIFN5bWJvbCByZXN1bHQgPSB0YWJsZXNfLT5GaW5kQnlOYW1lSGVs
cGVyKHRoaXMsIG5hbWUpOwotICBpZiAocmVzdWx0LnR5cGUgPT0gU3ltYm9sOjpGSUVMRCAmJgot
ICAgICAgcmVzdWx0LmZpZWxkX2Rlc2NyaXB0b3ItPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgcmV0
dXJuIHJlc3VsdC5maWVsZF9kZXNjcmlwdG9yOwotICB9IGVsc2UgewotICAgIHJldHVybiBOVUxM
OwotICB9Ci19Ci0KLWNvbnN0IE9uZW9mRGVzY3JpcHRvciogRGVzY3JpcHRvclBvb2w6OkZpbmRP
bmVvZkJ5TmFtZSgKLSAgICBjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0IHsKLSAgU3ltYm9sIHJl
c3VsdCA9IHRhYmxlc18tPkZpbmRCeU5hbWVIZWxwZXIodGhpcywgbmFtZSk7Ci0gIHJldHVybiAo
cmVzdWx0LnR5cGUgPT0gU3ltYm9sOjpPTkVPRikgPyByZXN1bHQub25lb2ZfZGVzY3JpcHRvciA6
IE5VTEw7Ci19Ci0KLWNvbnN0IEVudW1EZXNjcmlwdG9yKiBEZXNjcmlwdG9yUG9vbDo6RmluZEVu
dW1UeXBlQnlOYW1lKAotICAgIGNvbnN0IHN0cmluZyYgbmFtZSkgY29uc3QgewotICBTeW1ib2wg
cmVzdWx0ID0gdGFibGVzXy0+RmluZEJ5TmFtZUhlbHBlcih0aGlzLCBuYW1lKTsKLSAgcmV0dXJu
IChyZXN1bHQudHlwZSA9PSBTeW1ib2w6OkVOVU0pID8gcmVzdWx0LmVudW1fZGVzY3JpcHRvciA6
IE5VTEw7Ci19Ci0KLWNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIERlc2NyaXB0b3JQb29sOjpG
aW5kRW51bVZhbHVlQnlOYW1lKAotICAgIGNvbnN0IHN0cmluZyYgbmFtZSkgY29uc3QgewotICBT
eW1ib2wgcmVzdWx0ID0gdGFibGVzXy0+RmluZEJ5TmFtZUhlbHBlcih0aGlzLCBuYW1lKTsKLSAg
cmV0dXJuIChyZXN1bHQudHlwZSA9PSBTeW1ib2w6OkVOVU1fVkFMVUUpID8KLSAgICByZXN1bHQu
ZW51bV92YWx1ZV9kZXNjcmlwdG9yIDogTlVMTDsKLX0KLQotY29uc3QgU2VydmljZURlc2NyaXB0
b3IqIERlc2NyaXB0b3JQb29sOjpGaW5kU2VydmljZUJ5TmFtZSgKLSAgICBjb25zdCBzdHJpbmcm
IG5hbWUpIGNvbnN0IHsKLSAgU3ltYm9sIHJlc3VsdCA9IHRhYmxlc18tPkZpbmRCeU5hbWVIZWxw
ZXIodGhpcywgbmFtZSk7Ci0gIHJldHVybiAocmVzdWx0LnR5cGUgPT0gU3ltYm9sOjpTRVJWSUNF
KSA/IHJlc3VsdC5zZXJ2aWNlX2Rlc2NyaXB0b3IgOiBOVUxMOwotfQotCi1jb25zdCBNZXRob2RE
ZXNjcmlwdG9yKiBEZXNjcmlwdG9yUG9vbDo6RmluZE1ldGhvZEJ5TmFtZSgKLSAgICBjb25zdCBz
dHJpbmcmIG5hbWUpIGNvbnN0IHsKLSAgU3ltYm9sIHJlc3VsdCA9IHRhYmxlc18tPkZpbmRCeU5h
bWVIZWxwZXIodGhpcywgbmFtZSk7Ci0gIHJldHVybiAocmVzdWx0LnR5cGUgPT0gU3ltYm9sOjpN
RVRIT0QpID8gcmVzdWx0Lm1ldGhvZF9kZXNjcmlwdG9yIDogTlVMTDsKLX0KLQotY29uc3QgRmll
bGREZXNjcmlwdG9yKiBEZXNjcmlwdG9yUG9vbDo6RmluZEV4dGVuc2lvbkJ5TnVtYmVyKAotICAg
IGNvbnN0IERlc2NyaXB0b3IqIGV4dGVuZGVlLCBpbnQgbnVtYmVyKSBjb25zdCB7Ci0gIE11dGV4
TG9ja01heWJlIGxvY2sobXV0ZXhfKTsKLSAgdGFibGVzXy0+a25vd25fYmFkX3N5bWJvbHNfLmNs
ZWFyKCk7Ci0gIHRhYmxlc18tPmtub3duX2JhZF9maWxlc18uY2xlYXIoKTsKLSAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiByZXN1bHQgPSB0YWJsZXNfLT5GaW5kRXh0ZW5zaW9uKGV4dGVuZGVlLCBu
dW1iZXIpOwotICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9
Ci0gIGlmICh1bmRlcmxheV8gIT0gTlVMTCkgewotICAgIHJlc3VsdCA9IHVuZGVybGF5Xy0+Rmlu
ZEV4dGVuc2lvbkJ5TnVtYmVyKGV4dGVuZGVlLCBudW1iZXIpOwotICAgIGlmIChyZXN1bHQgIT0g
TlVMTCkgcmV0dXJuIHJlc3VsdDsKLSAgfQotICBpZiAoVHJ5RmluZEV4dGVuc2lvbkluRmFsbGJh
Y2tEYXRhYmFzZShleHRlbmRlZSwgbnVtYmVyKSkgewotICAgIHJlc3VsdCA9IHRhYmxlc18tPkZp
bmRFeHRlbnNpb24oZXh0ZW5kZWUsIG51bWJlcik7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7
Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQot
dm9pZCBEZXNjcmlwdG9yUG9vbDo6RmluZEFsbEV4dGVuc2lvbnMoCi0gICAgY29uc3QgRGVzY3Jp
cHRvciogZXh0ZW5kZWUsIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiogb3V0KSBjb25z
dCB7Ci0gIE11dGV4TG9ja01heWJlIGxvY2sobXV0ZXhfKTsKLSAgdGFibGVzXy0+a25vd25fYmFk
X3N5bWJvbHNfLmNsZWFyKCk7Ci0gIHRhYmxlc18tPmtub3duX2JhZF9maWxlc18uY2xlYXIoKTsK
LQotICAvLyBJbml0aWFsaXplIHRhYmxlc18tPmV4dGVuc2lvbnNfIGZyb20gdGhlIGZhbGxiYWNr
IGRhdGFiYXNlIGZpcnN0Ci0gIC8vIChidXQgZG8gdGhpcyBvbmx5IG9uY2UgcGVyIGRlc2NyaXB0
b3IpLgotICBpZiAoZmFsbGJhY2tfZGF0YWJhc2VfICE9IE5VTEwgJiYKLSAgICAgIHRhYmxlc18t
PmV4dGVuc2lvbnNfbG9hZGVkX2Zyb21fZGJfLmNvdW50KGV4dGVuZGVlKSA9PSAwKSB7Ci0gICAg
dmVjdG9yPGludD4gbnVtYmVyczsKLSAgICBpZiAoZmFsbGJhY2tfZGF0YWJhc2VfLT5GaW5kQWxs
RXh0ZW5zaW9uTnVtYmVycyhleHRlbmRlZS0+ZnVsbF9uYW1lKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bWJlcnMpKSB7Ci0gICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bWJlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaW50IG51
bWJlciA9IG51bWJlcnNbaV07Ci0gICAgICAgIGlmICh0YWJsZXNfLT5GaW5kRXh0ZW5zaW9uKGV4
dGVuZGVlLCBudW1iZXIpID09IE5VTEwpIHsKLSAgICAgICAgICBUcnlGaW5kRXh0ZW5zaW9uSW5G
YWxsYmFja0RhdGFiYXNlKGV4dGVuZGVlLCBudW1iZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgICB0YWJsZXNfLT5leHRlbnNpb25zX2xvYWRlZF9mcm9tX2RiXy5pbnNlcnQoZXh0ZW5kZWUp
OwotICAgIH0KLSAgfQotCi0gIHRhYmxlc18tPkZpbmRBbGxFeHRlbnNpb25zKGV4dGVuZGVlLCBv
dXQpOwotICBpZiAodW5kZXJsYXlfICE9IE5VTEwpIHsKLSAgICB1bmRlcmxheV8tPkZpbmRBbGxF
eHRlbnNpb25zKGV4dGVuZGVlLCBvdXQpOwotICB9Ci19Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1j
b25zdCBGaWVsZERlc2NyaXB0b3IqCi1EZXNjcmlwdG9yOjpGaW5kRmllbGRCeU51bWJlcihpbnQg
a2V5KSBjb25zdCB7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogcmVzdWx0ID0KLSAgICBmaWxl
KCktPnRhYmxlc18tPkZpbmRGaWVsZEJ5TnVtYmVyKHRoaXMsIGtleSk7Ci0gIGlmIChyZXN1bHQg
PT0gTlVMTCB8fCByZXN1bHQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0gZWxzZSB7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi1jb25zdCBGaWVsZERlc2Ny
aXB0b3IqCi1EZXNjcmlwdG9yOjpGaW5kRmllbGRCeUxvd2VyY2FzZU5hbWUoY29uc3Qgc3RyaW5n
JiBrZXkpIGNvbnN0IHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiByZXN1bHQgPQotICAgIGZp
bGUoKS0+dGFibGVzXy0+RmluZEZpZWxkQnlMb3dlcmNhc2VOYW1lKHRoaXMsIGtleSk7Ci0gIGlm
IChyZXN1bHQgPT0gTlVMTCB8fCByZXN1bHQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgcmV0dXJu
IE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi1jb25zdCBG
aWVsZERlc2NyaXB0b3IqCi1EZXNjcmlwdG9yOjpGaW5kRmllbGRCeUNhbWVsY2FzZU5hbWUoY29u
c3Qgc3RyaW5nJiBrZXkpIGNvbnN0IHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiByZXN1bHQg
PQotICAgIGZpbGUoKS0+dGFibGVzXy0+RmluZEZpZWxkQnlDYW1lbGNhc2VOYW1lKHRoaXMsIGtl
eSk7Ci0gIGlmIChyZXN1bHQgPT0gTlVMTCB8fCByZXN1bHQtPmlzX2V4dGVuc2lvbigpKSB7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQot
Ci1jb25zdCBGaWVsZERlc2NyaXB0b3IqCi1EZXNjcmlwdG9yOjpGaW5kRmllbGRCeU5hbWUoY29u
c3Qgc3RyaW5nJiBrZXkpIGNvbnN0IHsKLSAgU3ltYm9sIHJlc3VsdCA9Ci0gICAgZmlsZSgpLT50
YWJsZXNfLT5GaW5kTmVzdGVkU3ltYm9sT2ZUeXBlKHRoaXMsIGtleSwgU3ltYm9sOjpGSUVMRCk7
Ci0gIGlmICghcmVzdWx0LklzTnVsbCgpICYmICFyZXN1bHQuZmllbGRfZGVzY3JpcHRvci0+aXNf
ZXh0ZW5zaW9uKCkpIHsKLSAgICByZXR1cm4gcmVzdWx0LmZpZWxkX2Rlc2NyaXB0b3I7Ci0gIH0g
ZWxzZSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotY29uc3QgT25lb2ZEZXNjcmlwdG9y
KgotRGVzY3JpcHRvcjo6RmluZE9uZW9mQnlOYW1lKGNvbnN0IHN0cmluZyYga2V5KSBjb25zdCB7
Ci0gIFN5bWJvbCByZXN1bHQgPQotICAgIGZpbGUoKS0+dGFibGVzXy0+RmluZE5lc3RlZFN5bWJv
bE9mVHlwZSh0aGlzLCBrZXksIFN5bWJvbDo6T05FT0YpOwotICBpZiAoIXJlc3VsdC5Jc051bGwo
KSkgewotICAgIHJldHVybiByZXN1bHQub25lb2ZfZGVzY3JpcHRvcjsKLSAgfSBlbHNlIHsKLSAg
ICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1jb25zdCBGaWVsZERlc2NyaXB0b3IqCi1EZXNjcmlw
dG9yOjpGaW5kRXh0ZW5zaW9uQnlOYW1lKGNvbnN0IHN0cmluZyYga2V5KSBjb25zdCB7Ci0gIFN5
bWJvbCByZXN1bHQgPQotICAgIGZpbGUoKS0+dGFibGVzXy0+RmluZE5lc3RlZFN5bWJvbE9mVHlw
ZSh0aGlzLCBrZXksIFN5bWJvbDo6RklFTEQpOwotICBpZiAoIXJlc3VsdC5Jc051bGwoKSAmJiBy
ZXN1bHQuZmllbGRfZGVzY3JpcHRvci0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICByZXR1cm4gcmVz
dWx0LmZpZWxkX2Rlc2NyaXB0b3I7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0K
LX0KLQotY29uc3QgRmllbGREZXNjcmlwdG9yKgotRGVzY3JpcHRvcjo6RmluZEV4dGVuc2lvbkJ5
TG93ZXJjYXNlTmFtZShjb25zdCBzdHJpbmcmIGtleSkgY29uc3QgewotICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIHJlc3VsdCA9Ci0gICAgZmlsZSgpLT50YWJsZXNfLT5GaW5kRmllbGRCeUxvd2Vy
Y2FzZU5hbWUodGhpcywga2V5KTsKLSAgaWYgKHJlc3VsdCA9PSBOVUxMIHx8ICFyZXN1bHQtPmlz
X2V4dGVuc2lvbigpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgfQotfQotCi1jb25zdCBGaWVsZERlc2NyaXB0b3IqCi1EZXNjcmlwdG9yOjpG
aW5kRXh0ZW5zaW9uQnlDYW1lbGNhc2VOYW1lKGNvbnN0IHN0cmluZyYga2V5KSBjb25zdCB7Ci0g
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogcmVzdWx0ID0KLSAgICBmaWxlKCktPnRhYmxlc18tPkZp
bmRGaWVsZEJ5Q2FtZWxjYXNlTmFtZSh0aGlzLCBrZXkpOwotICBpZiAocmVzdWx0ID09IE5VTEwg
fHwgIXJlc3VsdC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfSBlbHNl
IHsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19Ci0KLWNvbnN0IERlc2NyaXB0b3IqCi1EZXNj
cmlwdG9yOjpGaW5kTmVzdGVkVHlwZUJ5TmFtZShjb25zdCBzdHJpbmcmIGtleSkgY29uc3Qgewot
ICBTeW1ib2wgcmVzdWx0ID0KLSAgICBmaWxlKCktPnRhYmxlc18tPkZpbmROZXN0ZWRTeW1ib2xP
ZlR5cGUodGhpcywga2V5LCBTeW1ib2w6Ok1FU1NBR0UpOwotICBpZiAoIXJlc3VsdC5Jc051bGwo
KSkgewotICAgIHJldHVybiByZXN1bHQuZGVzY3JpcHRvcjsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotfQotCi1jb25zdCBFbnVtRGVzY3JpcHRvcioKLURlc2NyaXB0b3I6OkZp
bmRFbnVtVHlwZUJ5TmFtZShjb25zdCBzdHJpbmcmIGtleSkgY29uc3QgewotICBTeW1ib2wgcmVz
dWx0ID0KLSAgICBmaWxlKCktPnRhYmxlc18tPkZpbmROZXN0ZWRTeW1ib2xPZlR5cGUodGhpcywg
a2V5LCBTeW1ib2w6OkVOVU0pOwotICBpZiAoIXJlc3VsdC5Jc051bGwoKSkgewotICAgIHJldHVy
biByZXN1bHQuZW51bV9kZXNjcmlwdG9yOwotICB9IGVsc2UgewotICAgIHJldHVybiBOVUxMOwot
ICB9Ci19Ci0KLWNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqCi1EZXNjcmlwdG9yOjpGaW5kRW51
bVZhbHVlQnlOYW1lKGNvbnN0IHN0cmluZyYga2V5KSBjb25zdCB7Ci0gIFN5bWJvbCByZXN1bHQg
PQotICAgIGZpbGUoKS0+dGFibGVzXy0+RmluZE5lc3RlZFN5bWJvbE9mVHlwZSh0aGlzLCBrZXks
IFN5bWJvbDo6RU5VTV9WQUxVRSk7Ci0gIGlmICghcmVzdWx0LklzTnVsbCgpKSB7Ci0gICAgcmV0
dXJuIHJlc3VsdC5lbnVtX3ZhbHVlX2Rlc2NyaXB0b3I7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJu
IE5VTEw7Ci0gIH0KLX0KLQotY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvcioKLUVudW1EZXNjcmlw
dG9yOjpGaW5kVmFsdWVCeU5hbWUoY29uc3Qgc3RyaW5nJiBrZXkpIGNvbnN0IHsKLSAgU3ltYm9s
IHJlc3VsdCA9Ci0gICAgZmlsZSgpLT50YWJsZXNfLT5GaW5kTmVzdGVkU3ltYm9sT2ZUeXBlKHRo
aXMsIGtleSwgU3ltYm9sOjpFTlVNX1ZBTFVFKTsKLSAgaWYgKCFyZXN1bHQuSXNOdWxsKCkpIHsK
LSAgICByZXR1cm4gcmVzdWx0LmVudW1fdmFsdWVfZGVzY3JpcHRvcjsKLSAgfSBlbHNlIHsKLSAg
ICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1jb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKgotRW51
bURlc2NyaXB0b3I6OkZpbmRWYWx1ZUJ5TnVtYmVyKGludCBrZXkpIGNvbnN0IHsKLSAgcmV0dXJu
IGZpbGUoKS0+dGFibGVzXy0+RmluZEVudW1WYWx1ZUJ5TnVtYmVyKHRoaXMsIGtleSk7Ci19Ci0K
LWNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqCi1FbnVtRGVzY3JpcHRvcjo6RmluZFZhbHVlQnlO
dW1iZXJDcmVhdGluZ0lmVW5rbm93bihpbnQga2V5KSBjb25zdCB7Ci0gIHJldHVybiBmaWxlKCkt
PnRhYmxlc18tPkZpbmRFbnVtVmFsdWVCeU51bWJlckNyZWF0aW5nSWZVbmtub3duKHRoaXMsIGtl
eSk7Ci19Ci0KLWNvbnN0IE1ldGhvZERlc2NyaXB0b3IqCi1TZXJ2aWNlRGVzY3JpcHRvcjo6Rmlu
ZE1ldGhvZEJ5TmFtZShjb25zdCBzdHJpbmcmIGtleSkgY29uc3QgewotICBTeW1ib2wgcmVzdWx0
ID0KLSAgICBmaWxlKCktPnRhYmxlc18tPkZpbmROZXN0ZWRTeW1ib2xPZlR5cGUodGhpcywga2V5
LCBTeW1ib2w6Ok1FVEhPRCk7Ci0gIGlmICghcmVzdWx0LklzTnVsbCgpKSB7Ci0gICAgcmV0dXJu
IHJlc3VsdC5tZXRob2RfZGVzY3JpcHRvcjsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gTlVMTDsK
LSAgfQotfQotCi1jb25zdCBEZXNjcmlwdG9yKgotRmlsZURlc2NyaXB0b3I6OkZpbmRNZXNzYWdl
VHlwZUJ5TmFtZShjb25zdCBzdHJpbmcmIGtleSkgY29uc3QgewotICBTeW1ib2wgcmVzdWx0ID0g
dGFibGVzXy0+RmluZE5lc3RlZFN5bWJvbE9mVHlwZSh0aGlzLCBrZXksIFN5bWJvbDo6TUVTU0FH
RSk7Ci0gIGlmICghcmVzdWx0LklzTnVsbCgpKSB7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXNjcmlw
dG9yOwotICB9IGVsc2UgewotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLWNvbnN0IEVudW1E
ZXNjcmlwdG9yKgotRmlsZURlc2NyaXB0b3I6OkZpbmRFbnVtVHlwZUJ5TmFtZShjb25zdCBzdHJp
bmcmIGtleSkgY29uc3QgewotICBTeW1ib2wgcmVzdWx0ID0gdGFibGVzXy0+RmluZE5lc3RlZFN5
bWJvbE9mVHlwZSh0aGlzLCBrZXksIFN5bWJvbDo6RU5VTSk7Ci0gIGlmICghcmVzdWx0LklzTnVs
bCgpKSB7Ci0gICAgcmV0dXJuIHJlc3VsdC5lbnVtX2Rlc2NyaXB0b3I7Ci0gIH0gZWxzZSB7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvcioKLUZp
bGVEZXNjcmlwdG9yOjpGaW5kRW51bVZhbHVlQnlOYW1lKGNvbnN0IHN0cmluZyYga2V5KSBjb25z
dCB7Ci0gIFN5bWJvbCByZXN1bHQgPQotICAgIHRhYmxlc18tPkZpbmROZXN0ZWRTeW1ib2xPZlR5
cGUodGhpcywga2V5LCBTeW1ib2w6OkVOVU1fVkFMVUUpOwotICBpZiAoIXJlc3VsdC5Jc051bGwo
KSkgewotICAgIHJldHVybiByZXN1bHQuZW51bV92YWx1ZV9kZXNjcmlwdG9yOwotICB9IGVsc2Ug
ewotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLWNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yKgot
RmlsZURlc2NyaXB0b3I6OkZpbmRTZXJ2aWNlQnlOYW1lKGNvbnN0IHN0cmluZyYga2V5KSBjb25z
dCB7Ci0gIFN5bWJvbCByZXN1bHQgPSB0YWJsZXNfLT5GaW5kTmVzdGVkU3ltYm9sT2ZUeXBlKHRo
aXMsIGtleSwgU3ltYm9sOjpTRVJWSUNFKTsKLSAgaWYgKCFyZXN1bHQuSXNOdWxsKCkpIHsKLSAg
ICByZXR1cm4gcmVzdWx0LnNlcnZpY2VfZGVzY3JpcHRvcjsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotfQotCi1jb25zdCBGaWVsZERlc2NyaXB0b3IqCi1GaWxlRGVzY3JpcHRv
cjo6RmluZEV4dGVuc2lvbkJ5TmFtZShjb25zdCBzdHJpbmcmIGtleSkgY29uc3QgewotICBTeW1i
b2wgcmVzdWx0ID0gdGFibGVzXy0+RmluZE5lc3RlZFN5bWJvbE9mVHlwZSh0aGlzLCBrZXksIFN5
bWJvbDo6RklFTEQpOwotICBpZiAoIXJlc3VsdC5Jc051bGwoKSAmJiByZXN1bHQuZmllbGRfZGVz
Y3JpcHRvci0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICByZXR1cm4gcmVzdWx0LmZpZWxkX2Rlc2Ny
aXB0b3I7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotY29uc3QgRmll
bGREZXNjcmlwdG9yKgotRmlsZURlc2NyaXB0b3I6OkZpbmRFeHRlbnNpb25CeUxvd2VyY2FzZU5h
bWUoY29uc3Qgc3RyaW5nJiBrZXkpIGNvbnN0IHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBy
ZXN1bHQgPSB0YWJsZXNfLT5GaW5kRmllbGRCeUxvd2VyY2FzZU5hbWUodGhpcywga2V5KTsKLSAg
aWYgKHJlc3VsdCA9PSBOVUxMIHx8ICFyZXN1bHQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi1jb25z
dCBGaWVsZERlc2NyaXB0b3IqCi1GaWxlRGVzY3JpcHRvcjo6RmluZEV4dGVuc2lvbkJ5Q2FtZWxj
YXNlTmFtZShjb25zdCBzdHJpbmcmIGtleSkgY29uc3QgewotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIHJlc3VsdCA9IHRhYmxlc18tPkZpbmRGaWVsZEJ5Q2FtZWxjYXNlTmFtZSh0aGlzLCBrZXkp
OwotICBpZiAocmVzdWx0ID09IE5VTEwgfHwgIXJlc3VsdC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAg
ICByZXR1cm4gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19Ci0K
LWNvbnN0IERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlKgotRGVzY3JpcHRvcjo6RmluZEV4dGVu
c2lvblJhbmdlQ29udGFpbmluZ051bWJlcihpbnQgbnVtYmVyKSBjb25zdCB7Ci0gIC8vIExpbmVh
ciBzZWFyY2ggc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB3ZSBkb24ndCBleHBlY3QgYSBtZXNzYWdl
IHRvIGhhdmUKLSAgLy8gbW9yZSB0aGFuIGEgY291cGxlIGV4dGVuc2lvbiByYW5nZXMuCi0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCk7IGkrKykgewotICAgIGlm
IChudW1iZXIgPj0gZXh0ZW5zaW9uX3JhbmdlKGkpLT5zdGFydCAmJgotICAgICAgICBudW1iZXIg
PCAgZXh0ZW5zaW9uX3JhbmdlKGkpLT5lbmQpIHsKLSAgICAgIHJldHVybiBleHRlbnNpb25fcmFu
Z2UoaSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1jb25zdCBEZXNjcmlwdG9y
OjpSZXNlcnZlZFJhbmdlKgotRGVzY3JpcHRvcjo6RmluZFJlc2VydmVkUmFuZ2VDb250YWluaW5n
TnVtYmVyKGludCBudW1iZXIpIGNvbnN0IHsKLSAgLy8gVE9ETyhjaHJpc24pOiBDb25zaWRlciBh
IG5vbi1saW5lYXIgc2VhcmNoLgotICBmb3IgKGludCBpID0gMDsgaSA8IHJlc2VydmVkX3Jhbmdl
X2NvdW50KCk7IGkrKykgewotICAgIGlmIChudW1iZXIgPj0gcmVzZXJ2ZWRfcmFuZ2UoaSktPnN0
YXJ0ICYmCi0gICAgICAgIG51bWJlciA8ICByZXNlcnZlZF9yYW5nZShpKS0+ZW5kKSB7Ci0gICAg
ICByZXR1cm4gcmVzZXJ2ZWRfcmFuZ2UoaSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgRGVzY3JpcHRvclBvb2w6OlRyeUZpbmRGaWxlSW5G
YWxsYmFja0RhdGFiYXNlKGNvbnN0IHN0cmluZyYgbmFtZSkgY29uc3QgewotICBpZiAoZmFsbGJh
Y2tfZGF0YWJhc2VfID09IE5VTEwpIHJldHVybiBmYWxzZTsKLQotICBpZiAodGFibGVzXy0+a25v
d25fYmFkX2ZpbGVzXy5jb3VudChuYW1lKSA+IDApIHJldHVybiBmYWxzZTsKLQotICBGaWxlRGVz
Y3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIGlmICghZmFsbGJhY2tfZGF0YWJhc2VfLT5GaW5k
RmlsZUJ5TmFtZShuYW1lLCAmZmlsZV9wcm90bykgfHwKLSAgICAgIEJ1aWxkRmlsZUZyb21EYXRh
YmFzZShmaWxlX3Byb3RvKSA9PSBOVUxMKSB7Ci0gICAgdGFibGVzXy0+a25vd25fYmFkX2ZpbGVz
Xy5pbnNlcnQobmFtZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwot
fQotCi1ib29sIERlc2NyaXB0b3JQb29sOjpJc1N1YlN5bWJvbE9mQnVpbHRUeXBlKGNvbnN0IHN0
cmluZyYgbmFtZSkgY29uc3QgewotICBzdHJpbmcgcHJlZml4ID0gbmFtZTsKLSAgZm9yICg7Oykg
ewotICAgIHN0cmluZzo6c2l6ZV90eXBlIGRvdF9wb3MgPSBwcmVmaXguZmluZF9sYXN0X29mKCcu
Jyk7Ci0gICAgaWYgKGRvdF9wb3MgPT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICBicmVhazsKLSAg
ICB9Ci0gICAgcHJlZml4ID0gcHJlZml4LnN1YnN0cigwLCBkb3RfcG9zKTsKLSAgICBTeW1ib2wg
c3ltYm9sID0gdGFibGVzXy0+RmluZFN5bWJvbChwcmVmaXgpOwotICAgIC8vIElmIHRoZSBzeW1i
b2wgdHlwZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIFBBQ0tBR0UsIHRoZW4gaXRzIGNvbXBsZXRl
Ci0gICAgLy8gZGVmaW5pdGlvbiBpcyBhbHJlYWR5IGtub3duLgotICAgIGlmICghc3ltYm9sLklz
TnVsbCgpICYmIHN5bWJvbC50eXBlICE9IFN5bWJvbDo6UEFDS0FHRSkgewotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICB9Ci0gIGlmICh1bmRlcmxheV8gIT0gTlVMTCkgewotICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiBhbnkgcHJlZml4IG9mIHRoaXMgc3ltYm9sIGV4aXN0cyBpbiB0aGUgdW5k
ZXJsYXkuCi0gICAgcmV0dXJuIHVuZGVybGF5Xy0+SXNTdWJTeW1ib2xPZkJ1aWx0VHlwZShuYW1l
KTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRGVzY3JpcHRvclBvb2w6OlRyeUZp
bmRTeW1ib2xJbkZhbGxiYWNrRGF0YWJhc2UoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdCB7Ci0g
IGlmIChmYWxsYmFja19kYXRhYmFzZV8gPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotCi0gIGlmICh0
YWJsZXNfLT5rbm93bl9iYWRfc3ltYm9sc18uY291bnQobmFtZSkgPiAwKSByZXR1cm4gZmFsc2U7
Ci0KLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICBpZiAoLy8gV2Ugc2tpcCBs
b29raW5nIGluIHRoZSBmYWxsYmFjayBkYXRhYmFzZSBpZiB0aGUgbmFtZSBpcyBhIHN1Yi1zeW1i
b2wKLSAgICAgIC8vIG9mIGFueSBkZXNjcmlwdG9yIHRoYXQgYWxyZWFkeSBleGlzdHMgaW4gdGhl
IGRlc2NyaXB0b3IgcG9vbCAoZXhjZXB0Ci0gICAgICAvLyBmb3IgcGFja2FnZSBkZXNjcmlwdG9y
cykuICBUaGlzIGlzIHZhbGlkIGJlY2F1c2UgYWxsIHN5bWJvbHMgZXhjZXB0Ci0gICAgICAvLyBm
b3IgcGFja2FnZXMgYXJlIGRlZmluZWQgaW4gYSBzaW5nbGUgZmlsZSwgc28gaWYgdGhlIHN5bWJv
bCBleGlzdHMKLSAgICAgIC8vIHRoZW4gd2Ugc2hvdWxkIGFscmVhZHkgaGF2ZSBpdHMgZGVmaW5p
dGlvbi4KLSAgICAgIC8vCi0gICAgICAvLyBUaGUgb3RoZXIgcmVhc29uIHRvIGRvIHRoaXMgaXMg
dG8gc3VwcG9ydCAib3ZlcnJpZGluZyIgdHlwZQotICAgICAgLy8gZGVmaW5pdGlvbnMgYnkgbWVy
Z2luZyB0d28gZGF0YWJhc2VzIHRoYXQgZGVmaW5lIHRoZSBzYW1lIHR5cGUuICAoWWVzLAotICAg
ICAgLy8gcGVvcGxlIGRvIHRoaXMuKSAgVGhlIG1haW4gZGlmZmljdWx0eSB3aXRoIG1ha2luZyB0
aGlzIHdvcmsgaXMgdGhhdAotICAgICAgLy8gRmluZEZpbGVDb250YWluaW5nU3ltYm9sKCkgaXMg
YWxsb3dlZCB0byByZXR1cm4gYm90aCBmYWxzZSBwb3NpdGl2ZXMKLSAgICAgIC8vIChlLmcuLCBT
aW1wbGVEZXNjcmlwdG9yRGF0YWJhc2UsIFVwZ3JhZGVkRGVzY3JpcHRvckRhdGFiYXNlKSBhbmQg
ZmFsc2UKLSAgICAgIC8vIG5lZ2F0aXZlcyAoZS5nLiBQcm90b0ZpbGVQYXJzZXIsIFNvdXJjZVRy
ZWVEZXNjcmlwdG9yRGF0YWJhc2UpLgotICAgICAgLy8gV2hlbiB0d28gc3VjaCBkYXRhYmFzZXMg
YXJlIG1lcmdlZCwgbG9va2luZyB1cCBhIG5vbi1leGlzdGVudAotICAgICAgLy8gc3ViLXN5bWJv
bCBvZiBhIHR5cGUgdGhhdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZGVzY3JpcHRvciBwb29sIGNh
bgotICAgICAgLy8gcmVzdWx0IGluIGFuIGF0dGVtcHQgdG8gbG9hZCBtdWx0aXBsZSBkZWZpbml0
aW9ucyBvZiB0aGUgc2FtZSB0eXBlLgotICAgICAgLy8gVGhlIGNoZWNrIGJlbG93IGF2b2lkcyB0
aGlzLgotICAgICAgSXNTdWJTeW1ib2xPZkJ1aWx0VHlwZShuYW1lKQotCi0gICAgICAvLyBMb29r
IHVwIGZpbGUgY29udGFpbmluZyB0aGlzIHN5bWJvbCBpbiBmYWxsYmFjayBkYXRhYmFzZS4KLSAg
ICAgIHx8ICFmYWxsYmFja19kYXRhYmFzZV8tPkZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbChuYW1l
LCAmZmlsZV9wcm90bykKLQotICAgICAgLy8gQ2hlY2sgaWYgd2UndmUgYWxyZWFkeSBidWlsdCB0
aGlzIGZpbGUuIElmIHNvLCBpdCBhcHBhcmVudGx5IGRvZXNuJ3QKLSAgICAgIC8vIGNvbnRhaW4g
dGhlIHN5bWJvbCB3ZSdyZSBsb29raW5nIGZvci4gIFNvbWUgRGVzY3JpcHRvckRhdGFiYXNlcwot
ICAgICAgLy8gcmV0dXJuIGZhbHNlIHBvc2l0aXZlcy4KLSAgICAgIHx8IHRhYmxlc18tPkZpbmRG
aWxlKGZpbGVfcHJvdG8ubmFtZSgpKSAhPSBOVUxMCi0KLSAgICAgIC8vIEJ1aWxkIHRoZSBmaWxl
LgotICAgICAgfHwgQnVpbGRGaWxlRnJvbURhdGFiYXNlKGZpbGVfcHJvdG8pID09IE5VTEwpIHsK
LSAgICB0YWJsZXNfLT5rbm93bl9iYWRfc3ltYm9sc18uaW5zZXJ0KG5hbWUpOwotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIERlc2NyaXB0b3JQb29s
OjpUcnlGaW5kRXh0ZW5zaW9uSW5GYWxsYmFja0RhdGFiYXNlKAotICAgIGNvbnN0IERlc2NyaXB0
b3IqIGNvbnRhaW5pbmdfdHlwZSwgaW50IGZpZWxkX251bWJlcikgY29uc3QgewotICBpZiAoZmFs
bGJhY2tfZGF0YWJhc2VfID09IE5VTEwpIHJldHVybiBmYWxzZTsKLQotICBGaWxlRGVzY3JpcHRv
clByb3RvIGZpbGVfcHJvdG87Ci0gIGlmICghZmFsbGJhY2tfZGF0YWJhc2VfLT5GaW5kRmlsZUNv
bnRhaW5pbmdFeHRlbnNpb24oCi0gICAgICAgIGNvbnRhaW5pbmdfdHlwZS0+ZnVsbF9uYW1lKCks
IGZpZWxkX251bWJlciwgJmZpbGVfcHJvdG8pKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0K
LSAgaWYgKHRhYmxlc18tPkZpbmRGaWxlKGZpbGVfcHJvdG8ubmFtZSgpKSAhPSBOVUxMKSB7Ci0g
ICAgLy8gV2UndmUgYWxyZWFkeSBsb2FkZWQgdGhpcyBmaWxlLCBhbmQgaXQgYXBwYXJlbnRseSBk
b2Vzbid0IGNvbnRhaW4gdGhlCi0gICAgLy8gZXh0ZW5zaW9uIHdlJ3JlIGxvb2tpbmcgZm9yLiAg
U29tZSBEZXNjcmlwdG9yRGF0YWJhc2VzIHJldHVybiBmYWxzZQotICAgIC8vIHBvc2l0aXZlcy4K
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAoQnVpbGRGaWxlRnJvbURhdGFiYXNlKGZp
bGVfcHJvdG8pID09IE5VTEwpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1ib29sIEZpZWxkRGVzY3JpcHRvcjo6aXNfbWFw
KCkgY29uc3QgewotICByZXR1cm4gdHlwZSgpID09IFRZUEVfTUVTU0FHRSAmJiBtZXNzYWdlX3R5
cGUoKS0+b3B0aW9ucygpLm1hcF9lbnRyeSgpOwotfQotCi1zdHJpbmcgRmllbGREZXNjcmlwdG9y
OjpEZWZhdWx0VmFsdWVBc1N0cmluZyhib29sIHF1b3RlX3N0cmluZ190eXBlKSBjb25zdCB7Ci0g
IEdPT0dMRV9DSEVDSyhoYXNfZGVmYXVsdF92YWx1ZSgpKSA8PCAiTm8gZGVmYXVsdCB2YWx1ZSI7
Ci0gIHN3aXRjaCAoY3BwX3R5cGUoKSkgewotICAgIGNhc2UgQ1BQVFlQRV9JTlQzMjoKLSAgICAg
IHJldHVybiBTaW1wbGVJdG9hKGRlZmF1bHRfdmFsdWVfaW50MzIoKSk7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIENQUFRZUEVfSU5UNjQ6Ci0gICAgICByZXR1cm4gU2ltcGxlSXRvYShkZWZhdWx0
X3ZhbHVlX2ludDY0KCkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDUFBUWVBFX1VJTlQzMjoK
LSAgICAgIHJldHVybiBTaW1wbGVJdG9hKGRlZmF1bHRfdmFsdWVfdWludDMyKCkpOwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDUFBUWVBFX1VJTlQ2NDoKLSAgICAgIHJldHVybiBTaW1wbGVJdG9h
KGRlZmF1bHRfdmFsdWVfdWludDY0KCkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDUFBUWVBF
X0ZMT0FUOgotICAgICAgcmV0dXJuIFNpbXBsZUZ0b2EoZGVmYXVsdF92YWx1ZV9mbG9hdCgpKTsK
LSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1BQVFlQRV9ET1VCTEU6Ci0gICAgICByZXR1cm4gU2lt
cGxlRHRvYShkZWZhdWx0X3ZhbHVlX2RvdWJsZSgpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1BQVFlQRV9CT09MOgotICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWVfYm9vbCgpID8gInRydWUi
IDogImZhbHNlIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1BQVFlQRV9TVFJJTkc6Ci0gICAg
ICBpZiAocXVvdGVfc3RyaW5nX3R5cGUpIHsKLSAgICAgICAgcmV0dXJuICJcIiIgKyBDRXNjYXBl
KGRlZmF1bHRfdmFsdWVfc3RyaW5nKCkpICsgIlwiIjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICh0eXBlKCkgPT0gVFlQRV9CWVRFUykgewotICAgICAgICAgIHJldHVybiBDRXNjYXBlKGRl
ZmF1bHRfdmFsdWVfc3RyaW5nKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVy
biBkZWZhdWx0X3ZhbHVlX3N0cmluZygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVh
azsKLSAgICBjYXNlIENQUFRZUEVfRU5VTToKLSAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlX2Vu
dW0oKS0+bmFtZSgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDUFBUWVBFX01FU1NBR0U6Ci0g
ICAgICBHT09HTEVfTE9HKERGQVRBTCkgPDwgIk1lc3NhZ2VzIGNhbid0IGhhdmUgZGVmYXVsdCB2
YWx1ZXMhIjsKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4n
dCBnZXQgaGVyZTogZmFpbGVkIHRvIGdldCBkZWZhdWx0IHZhbHVlIGFzIHN0cmluZyI7Ci0gIHJl
dHVybiAiIjsKLX0KLQotLy8gQ29weVRvIG1ldGhvZHMgPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkIEZpbGVEZXNjcmlwdG9yOjpDb3B5
VG8oRmlsZURlc2NyaXB0b3JQcm90byogcHJvdG8pIGNvbnN0IHsKLSAgcHJvdG8tPnNldF9uYW1l
KG5hbWUoKSk7Ci0gIGlmICghcGFja2FnZSgpLmVtcHR5KCkpIHByb3RvLT5zZXRfcGFja2FnZShw
YWNrYWdlKCkpOwotICAvLyBUT0RPKGxpdWppc2kpOiBBbHNvIHBvcHVsYXRlIHdoZW4gc3ludGF4
PSJwcm90bzIiLgotICBpZiAoc3ludGF4KCkgPT0gU1lOVEFYX1BST1RPMykgcHJvdG8tPnNldF9z
eW50YXgoU3ludGF4TmFtZShzeW50YXgoKSkpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVw
ZW5kZW5jeV9jb3VudCgpOyBpKyspIHsKLSAgICBwcm90by0+YWRkX2RlcGVuZGVuY3koZGVwZW5k
ZW5jeShpKS0+bmFtZSgpKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgcHVibGljX2Rl
cGVuZGVuY3lfY291bnQoKTsgaSsrKSB7Ci0gICAgcHJvdG8tPmFkZF9wdWJsaWNfZGVwZW5kZW5j
eShwdWJsaWNfZGVwZW5kZW5jaWVzX1tpXSk7Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8
IHdlYWtfZGVwZW5kZW5jeV9jb3VudCgpOyBpKyspIHsKLSAgICBwcm90by0+YWRkX3dlYWtfZGVw
ZW5kZW5jeSh3ZWFrX2RlcGVuZGVuY2llc19baV0pOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtZXNzYWdlX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgbWVzc2FnZV90eXBlKGkpLT5D
b3B5VG8ocHJvdG8tPmFkZF9tZXNzYWdlX3R5cGUoKSk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBlbnVtX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgZW51bV90eXBlKGkpLT5Db3B5VG8o
cHJvdG8tPmFkZF9lbnVtX3R5cGUoKSk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2
aWNlX2NvdW50KCk7IGkrKykgewotICAgIHNlcnZpY2UoaSktPkNvcHlUbyhwcm90by0+YWRkX3Nl
cnZpY2UoKSk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25fY291bnQoKTsg
aSsrKSB7Ci0gICAgZXh0ZW5zaW9uKGkpLT5Db3B5VG8ocHJvdG8tPmFkZF9leHRlbnNpb24oKSk7
Ci0gIH0KLQotICBpZiAoJm9wdGlvbnMoKSAhPSAmRmlsZU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFu
Y2UoKSkgewotICAgIHByb3RvLT5tdXRhYmxlX29wdGlvbnMoKS0+Q29weUZyb20ob3B0aW9ucygp
KTsKLSAgfQotfQotCi12b2lkIEZpbGVEZXNjcmlwdG9yOjpDb3B5SnNvbk5hbWVUbyhGaWxlRGVz
Y3JpcHRvclByb3RvKiBwcm90bykgY29uc3QgewotICBpZiAobWVzc2FnZV90eXBlX2NvdW50KCkg
IT0gcHJvdG8tPm1lc3NhZ2VfdHlwZV9zaXplKCkgfHwKLSAgICAgIGV4dGVuc2lvbl9jb3VudCgp
ICE9IHByb3RvLT5leHRlbnNpb25fc2l6ZSgpKSB7Ci0gICAgR09PR0xFX0xPRyhFUlJPUikgPDwg
IkNhbm5vdCBjb3B5IGpzb25fbmFtZSB0byBhIHByb3RvIG9mIGEgZGlmZmVyZW50IHNpemUuIjsK
LSAgICByZXR1cm47Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlX3R5cGVfY291
bnQoKTsgaSsrKSB7Ci0gICAgbWVzc2FnZV90eXBlKGkpLT5Db3B5SnNvbk5hbWVUbyhwcm90by0+
bXV0YWJsZV9tZXNzYWdlX3R5cGUoaSkpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0
ZW5zaW9uX2NvdW50KCk7IGkrKykgewotICAgIGV4dGVuc2lvbihpKS0+Q29weUpzb25OYW1lVG8o
cHJvdG8tPm11dGFibGVfZXh0ZW5zaW9uKGkpKTsKLSAgfQotfQotCi12b2lkIEZpbGVEZXNjcmlw
dG9yOjpDb3B5U291cmNlQ29kZUluZm9UbyhGaWxlRGVzY3JpcHRvclByb3RvKiBwcm90bykgY29u
c3QgewotICBpZiAoc291cmNlX2NvZGVfaW5mb18gJiYKLSAgICAgIHNvdXJjZV9jb2RlX2luZm9f
ICE9ICZTb3VyY2VDb2RlSW5mbzo6ZGVmYXVsdF9pbnN0YW5jZSgpKSB7Ci0gICAgcHJvdG8tPm11
dGFibGVfc291cmNlX2NvZGVfaW5mbygpLT5Db3B5RnJvbSgqc291cmNlX2NvZGVfaW5mb18pOwot
ICB9Ci19Ci0KLXZvaWQgRGVzY3JpcHRvcjo6Q29weVRvKERlc2NyaXB0b3JQcm90byogcHJvdG8p
IGNvbnN0IHsKLSAgcHJvdG8tPnNldF9uYW1lKG5hbWUoKSk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBmaWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBmaWVsZChpKS0+Q29weVRvKHByb3RvLT5h
ZGRfZmllbGQoKSk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbmVvZl9kZWNsX2NvdW50
KCk7IGkrKykgewotICAgIG9uZW9mX2RlY2woaSktPkNvcHlUbyhwcm90by0+YWRkX29uZW9mX2Rl
Y2woKSk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXN0ZWRfdHlwZV9jb3VudCgpOyBp
KyspIHsKLSAgICBuZXN0ZWRfdHlwZShpKS0+Q29weVRvKHByb3RvLT5hZGRfbmVzdGVkX3R5cGUo
KSk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnVtX3R5cGVfY291bnQoKTsgaSsrKSB7
Ci0gICAgZW51bV90eXBlKGkpLT5Db3B5VG8ocHJvdG8tPmFkZF9lbnVtX3R5cGUoKSk7Ci0gIH0K
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25fcmFuZ2VfY291bnQoKTsgaSsrKSB7Ci0g
ICAgRGVzY3JpcHRvclByb3RvOjpFeHRlbnNpb25SYW5nZSogcmFuZ2UgPSBwcm90by0+YWRkX2V4
dGVuc2lvbl9yYW5nZSgpOwotICAgIHJhbmdlLT5zZXRfc3RhcnQoZXh0ZW5zaW9uX3JhbmdlKGkp
LT5zdGFydCk7Ci0gICAgcmFuZ2UtPnNldF9lbmQoZXh0ZW5zaW9uX3JhbmdlKGkpLT5lbmQpOwot
ICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5zaW9uX2NvdW50KCk7IGkrKykgewotICAg
IGV4dGVuc2lvbihpKS0+Q29weVRvKHByb3RvLT5hZGRfZXh0ZW5zaW9uKCkpOwotICB9Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgcmVzZXJ2ZWRfcmFuZ2VfY291bnQoKTsgaSsrKSB7Ci0gICAgRGVz
Y3JpcHRvclByb3RvOjpSZXNlcnZlZFJhbmdlKiByYW5nZSA9IHByb3RvLT5hZGRfcmVzZXJ2ZWRf
cmFuZ2UoKTsKLSAgICByYW5nZS0+c2V0X3N0YXJ0KHJlc2VydmVkX3JhbmdlKGkpLT5zdGFydCk7
Ci0gICAgcmFuZ2UtPnNldF9lbmQocmVzZXJ2ZWRfcmFuZ2UoaSktPmVuZCk7Ci0gIH0KLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCByZXNlcnZlZF9uYW1lX2NvdW50KCk7IGkrKykgewotICAgIHByb3Rv
LT5hZGRfcmVzZXJ2ZWRfbmFtZShyZXNlcnZlZF9uYW1lKGkpKTsKLSAgfQotCi0gIGlmICgmb3B0
aW9ucygpICE9ICZNZXNzYWdlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpKSB7Ci0gICAgcHJv
dG8tPm11dGFibGVfb3B0aW9ucygpLT5Db3B5RnJvbShvcHRpb25zKCkpOwotICB9Ci19Ci0KLXZv
aWQgRGVzY3JpcHRvcjo6Q29weUpzb25OYW1lVG8oRGVzY3JpcHRvclByb3RvKiBwcm90bykgY29u
c3QgewotICBpZiAoZmllbGRfY291bnQoKSAhPSBwcm90by0+ZmllbGRfc2l6ZSgpIHx8Ci0gICAg
ICBuZXN0ZWRfdHlwZV9jb3VudCgpICE9IHByb3RvLT5uZXN0ZWRfdHlwZV9zaXplKCkgfHwKLSAg
ICAgIGV4dGVuc2lvbl9jb3VudCgpICE9IHByb3RvLT5leHRlbnNpb25fc2l6ZSgpKSB7Ci0gICAg
R09PR0xFX0xPRyhFUlJPUikgPDwgIkNhbm5vdCBjb3B5IGpzb25fbmFtZSB0byBhIHByb3RvIG9m
IGEgZGlmZmVyZW50IHNpemUuIjsKLSAgICByZXR1cm47Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBmaWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBmaWVsZChpKS0+Q29weUpzb25OYW1lVG8o
cHJvdG8tPm11dGFibGVfZmllbGQoaSkpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbmVz
dGVkX3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgbmVzdGVkX3R5cGUoaSktPkNvcHlKc29uTmFt
ZVRvKHByb3RvLT5tdXRhYmxlX25lc3RlZF90eXBlKGkpKTsKLSAgfQotICBmb3IgKGludCBpID0g
MDsgaSA8IGV4dGVuc2lvbl9jb3VudCgpOyBpKyspIHsKLSAgICBleHRlbnNpb24oaSktPkNvcHlK
c29uTmFtZVRvKHByb3RvLT5tdXRhYmxlX2V4dGVuc2lvbihpKSk7Ci0gIH0KLX0KLQotdm9pZCBG
aWVsZERlc2NyaXB0b3I6OkNvcHlUbyhGaWVsZERlc2NyaXB0b3JQcm90byogcHJvdG8pIGNvbnN0
IHsKLSAgcHJvdG8tPnNldF9uYW1lKG5hbWUoKSk7Ci0gIHByb3RvLT5zZXRfbnVtYmVyKG51bWJl
cigpKTsKLSAgaWYgKGhhc19qc29uX25hbWVfKSB7Ci0gICAgcHJvdG8tPnNldF9qc29uX25hbWUo
anNvbl9uYW1lKCkpOwotICB9Ci0KLSAgLy8gU29tZSBjb21waWxlcnMgZG8gbm90IGFsbG93IHN0
YXRpY19jYXN0IGRpcmVjdGx5IGJldHdlZW4gdHdvIGVudW0gdHlwZXMsCi0gIC8vIHNvIHdlIG11
c3QgY2FzdCB0byBpbnQgZmlyc3QuCi0gIHByb3RvLT5zZXRfbGFiZWwoc3RhdGljX2Nhc3Q8Rmll
bGREZXNjcmlwdG9yUHJvdG86OkxhYmVsPigKLSAgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0
X2Nhc3Q8aW50PihsYWJlbCgpKSkpOwotICBwcm90by0+c2V0X3R5cGUoc3RhdGljX2Nhc3Q8Rmll
bGREZXNjcmlwdG9yUHJvdG86OlR5cGU+KAotICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdF9j
YXN0PGludD4odHlwZSgpKSkpOwotCi0gIGlmIChpc19leHRlbnNpb24oKSkgewotICAgIGlmICgh
Y29udGFpbmluZ190eXBlKCktPmlzX3VucXVhbGlmaWVkX3BsYWNlaG9sZGVyXykgewotICAgICAg
cHJvdG8tPnNldF9leHRlbmRlZSgiLiIpOwotICAgIH0KLSAgICBwcm90by0+bXV0YWJsZV9leHRl
bmRlZSgpLT5hcHBlbmQoY29udGFpbmluZ190eXBlKCktPmZ1bGxfbmFtZSgpKTsKLSAgfQotCi0g
IGlmIChjcHBfdHlwZSgpID09IENQUFRZUEVfTUVTU0FHRSkgewotICAgIGlmIChtZXNzYWdlX3R5
cGUoKS0+aXNfcGxhY2Vob2xkZXJfKSB7Ci0gICAgICAvLyBXZSBkb24ndCBhY3R1YWxseSBrbm93
IGlmIHRoZSB0eXBlIGlzIGEgbWVzc2FnZSB0eXBlLiAgSXQgY291bGQgYmUKLSAgICAgIC8vIGFu
IGVudW0uCi0gICAgICBwcm90by0+Y2xlYXJfdHlwZSgpOwotICAgIH0KLQotICAgIGlmICghbWVz
c2FnZV90eXBlKCktPmlzX3VucXVhbGlmaWVkX3BsYWNlaG9sZGVyXykgewotICAgICAgcHJvdG8t
PnNldF90eXBlX25hbWUoIi4iKTsKLSAgICB9Ci0gICAgcHJvdG8tPm11dGFibGVfdHlwZV9uYW1l
KCktPmFwcGVuZChtZXNzYWdlX3R5cGUoKS0+ZnVsbF9uYW1lKCkpOwotICB9IGVsc2UgaWYgKGNw
cF90eXBlKCkgPT0gQ1BQVFlQRV9FTlVNKSB7Ci0gICAgaWYgKCFlbnVtX3R5cGUoKS0+aXNfdW5x
dWFsaWZpZWRfcGxhY2Vob2xkZXJfKSB7Ci0gICAgICBwcm90by0+c2V0X3R5cGVfbmFtZSgiLiIp
OwotICAgIH0KLSAgICBwcm90by0+bXV0YWJsZV90eXBlX25hbWUoKS0+YXBwZW5kKGVudW1fdHlw
ZSgpLT5mdWxsX25hbWUoKSk7Ci0gIH0KLQotICBpZiAoaGFzX2RlZmF1bHRfdmFsdWUoKSkgewot
ICAgIHByb3RvLT5zZXRfZGVmYXVsdF92YWx1ZShEZWZhdWx0VmFsdWVBc1N0cmluZyhmYWxzZSkp
OwotICB9Ci0KLSAgaWYgKGNvbnRhaW5pbmdfb25lb2YoKSAhPSBOVUxMICYmICFpc19leHRlbnNp
b24oKSkgewotICAgIHByb3RvLT5zZXRfb25lb2ZfaW5kZXgoY29udGFpbmluZ19vbmVvZigpLT5p
bmRleCgpKTsKLSAgfQotCi0gIGlmICgmb3B0aW9ucygpICE9ICZGaWVsZE9wdGlvbnM6OmRlZmF1
bHRfaW5zdGFuY2UoKSkgewotICAgIHByb3RvLT5tdXRhYmxlX29wdGlvbnMoKS0+Q29weUZyb20o
b3B0aW9ucygpKTsKLSAgfQotfQotCi12b2lkIEZpZWxkRGVzY3JpcHRvcjo6Q29weUpzb25OYW1l
VG8oRmllbGREZXNjcmlwdG9yUHJvdG8qIHByb3RvKSBjb25zdCB7Ci0gIHByb3RvLT5zZXRfanNv
bl9uYW1lKGpzb25fbmFtZSgpKTsKLX0KLQotdm9pZCBPbmVvZkRlc2NyaXB0b3I6OkNvcHlUbyhP
bmVvZkRlc2NyaXB0b3JQcm90byogcHJvdG8pIGNvbnN0IHsKLSAgcHJvdG8tPnNldF9uYW1lKG5h
bWUoKSk7Ci19Ci0KLXZvaWQgRW51bURlc2NyaXB0b3I6OkNvcHlUbyhFbnVtRGVzY3JpcHRvclBy
b3RvKiBwcm90bykgY29uc3QgewotICBwcm90by0+c2V0X25hbWUobmFtZSgpKTsKLQotICBmb3Ig
KGludCBpID0gMDsgaSA8IHZhbHVlX2NvdW50KCk7IGkrKykgewotICAgIHZhbHVlKGkpLT5Db3B5
VG8ocHJvdG8tPmFkZF92YWx1ZSgpKTsKLSAgfQotCi0gIGlmICgmb3B0aW9ucygpICE9ICZFbnVt
T3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpKSB7Ci0gICAgcHJvdG8tPm11dGFibGVfb3B0aW9u
cygpLT5Db3B5RnJvbShvcHRpb25zKCkpOwotICB9Ci19Ci0KLXZvaWQgRW51bVZhbHVlRGVzY3Jp
cHRvcjo6Q29weVRvKEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byogcHJvdG8pIGNvbnN0IHsKLSAg
cHJvdG8tPnNldF9uYW1lKG5hbWUoKSk7Ci0gIHByb3RvLT5zZXRfbnVtYmVyKG51bWJlcigpKTsK
LQotICBpZiAoJm9wdGlvbnMoKSAhPSAmRW51bVZhbHVlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5j
ZSgpKSB7Ci0gICAgcHJvdG8tPm11dGFibGVfb3B0aW9ucygpLT5Db3B5RnJvbShvcHRpb25zKCkp
OwotICB9Ci19Ci0KLXZvaWQgU2VydmljZURlc2NyaXB0b3I6OkNvcHlUbyhTZXJ2aWNlRGVzY3Jp
cHRvclByb3RvKiBwcm90bykgY29uc3QgewotICBwcm90by0+c2V0X25hbWUobmFtZSgpKTsKLQot
ICBmb3IgKGludCBpID0gMDsgaSA8IG1ldGhvZF9jb3VudCgpOyBpKyspIHsKLSAgICBtZXRob2Qo
aSktPkNvcHlUbyhwcm90by0+YWRkX21ldGhvZCgpKTsKLSAgfQotCi0gIGlmICgmb3B0aW9ucygp
ICE9ICZTZXJ2aWNlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpKSB7Ci0gICAgcHJvdG8tPm11
dGFibGVfb3B0aW9ucygpLT5Db3B5RnJvbShvcHRpb25zKCkpOwotICB9Ci19Ci0KLXZvaWQgTWV0
aG9kRGVzY3JpcHRvcjo6Q29weVRvKE1ldGhvZERlc2NyaXB0b3JQcm90byogcHJvdG8pIGNvbnN0
IHsKLSAgcHJvdG8tPnNldF9uYW1lKG5hbWUoKSk7Ci0KLSAgaWYgKCFpbnB1dF90eXBlKCktPmlz
X3VucXVhbGlmaWVkX3BsYWNlaG9sZGVyXykgewotICAgIHByb3RvLT5zZXRfaW5wdXRfdHlwZSgi
LiIpOwotICB9Ci0gIHByb3RvLT5tdXRhYmxlX2lucHV0X3R5cGUoKS0+YXBwZW5kKGlucHV0X3R5
cGUoKS0+ZnVsbF9uYW1lKCkpOwotCi0gIGlmICghb3V0cHV0X3R5cGUoKS0+aXNfdW5xdWFsaWZp
ZWRfcGxhY2Vob2xkZXJfKSB7Ci0gICAgcHJvdG8tPnNldF9vdXRwdXRfdHlwZSgiLiIpOwotICB9
Ci0gIHByb3RvLT5tdXRhYmxlX291dHB1dF90eXBlKCktPmFwcGVuZChvdXRwdXRfdHlwZSgpLT5m
dWxsX25hbWUoKSk7Ci0KLSAgaWYgKCZvcHRpb25zKCkgIT0gJk1ldGhvZE9wdGlvbnM6OmRlZmF1
bHRfaW5zdGFuY2UoKSkgewotICAgIHByb3RvLT5tdXRhYmxlX29wdGlvbnMoKS0+Q29weUZyb20o
b3B0aW9ucygpKTsKLSAgfQotCi0gIGlmIChjbGllbnRfc3RyZWFtaW5nXykgewotICAgIHByb3Rv
LT5zZXRfY2xpZW50X3N0cmVhbWluZyh0cnVlKTsKLSAgfQotICBpZiAoc2VydmVyX3N0cmVhbWlu
Z18pIHsKLSAgICBwcm90by0+c2V0X3NlcnZlcl9zdHJlYW1pbmcodHJ1ZSk7Ci0gIH0KLX0KLQot
Ly8gRGVidWdTdHJpbmcgbWV0aG9kcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotCi1uYW1lc3BhY2UgewotCi0vLyBVc2VkIGJ5IGVhY2ggb2YgdGhlIG9w
dGlvbiBmb3JtYXR0ZXJzLgotYm9vbCBSZXRyaWV2ZU9wdGlvbnMoaW50IGRlcHRoLAotICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZSAmb3B0aW9ucywKLSAgICAgICAgICAgICAgICAg
ICAgIHZlY3RvcjxzdHJpbmc+ICpvcHRpb25fZW50cmllcykgewotICBvcHRpb25fZW50cmllcy0+
Y2xlYXIoKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG9wdGlvbnMuR2V0UmVm
bGVjdGlvbigpOwotICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmllbGRzOwotICBy
ZWZsZWN0aW9uLT5MaXN0RmllbGRzKG9wdGlvbnMsICZmaWVsZHMpOwotICBmb3IgKGludCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykgewotICAgIGludCBjb3VudCA9IDE7Ci0gICAgYm9v
bCByZXBlYXRlZCA9IGZhbHNlOwotICAgIGlmIChmaWVsZHNbaV0tPmlzX3JlcGVhdGVkKCkpIHsK
LSAgICAgIGNvdW50ID0gcmVmbGVjdGlvbi0+RmllbGRTaXplKG9wdGlvbnMsIGZpZWxkc1tpXSk7
Ci0gICAgICByZXBlYXRlZCA9IHRydWU7Ci0gICAgfQotICAgIGZvciAoaW50IGogPSAwOyBqIDwg
Y291bnQ7IGorKykgewotICAgICAgc3RyaW5nIGZpZWxkdmFsOwotICAgICAgaWYgKGZpZWxkc1tp
XS0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAg
ICAgICBzdHJpbmcgdG1wOwotICAgICAgICBUZXh0Rm9ybWF0OjpQcmludGVyIHByaW50ZXI7Ci0g
ICAgICAgIHByaW50ZXIuU2V0SW5pdGlhbEluZGVudExldmVsKGRlcHRoICsgMSk7Ci0gICAgICAg
IHByaW50ZXIuUHJpbnRGaWVsZFZhbHVlVG9TdHJpbmcob3B0aW9ucywgZmllbGRzW2ldLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkID8gaiA6IC0xLCAm
dG1wKTsKLSAgICAgICAgZmllbGR2YWwuYXBwZW5kKCJ7XG4iKTsKLSAgICAgICAgZmllbGR2YWwu
YXBwZW5kKHRtcCk7Ci0gICAgICAgIGZpZWxkdmFsLmFwcGVuZChkZXB0aCAqIDIsICcgJyk7Ci0g
ICAgICAgIGZpZWxkdmFsLmFwcGVuZCgifSIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgVGV4
dEZvcm1hdDo6UHJpbnRGaWVsZFZhbHVlVG9TdHJpbmcob3B0aW9ucywgZmllbGRzW2ldLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRlZCA/IGogOiAt
MSwgJmZpZWxkdmFsKTsKLSAgICAgIH0KLSAgICAgIHN0cmluZyBuYW1lOwotICAgICAgaWYgKGZp
ZWxkc1tpXS0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICAgICAgbmFtZSA9ICIoLiIgKyBmaWVsZHNb
aV0tPmZ1bGxfbmFtZSgpICsgIikiOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbmFtZSA9IGZp
ZWxkc1tpXS0+bmFtZSgpOwotICAgICAgfQotICAgICAgb3B0aW9uX2VudHJpZXMtPnB1c2hfYmFj
ayhuYW1lICsgIiA9ICIgKyBmaWVsZHZhbCk7Ci0gICAgfQotICB9Ci0gIHJldHVybiAhb3B0aW9u
X2VudHJpZXMtPmVtcHR5KCk7Ci19Ci0KLS8vIEZvcm1hdHMgb3B0aW9ucyB0aGF0IGFsbCBhcHBl
YXIgdG9nZXRoZXIgaW4gYnJhY2tldHMuIERvZXMgbm90IGluY2x1ZGUKLS8vIGJyYWNrZXRzLgot
Ym9vbCBGb3JtYXRCcmFja2V0ZWRPcHRpb25zKGludCBkZXB0aCwgY29uc3QgTWVzc2FnZSAmb3B0
aW9ucywgc3RyaW5nICpvdXRwdXQpIHsKLSAgdmVjdG9yPHN0cmluZz4gYWxsX29wdGlvbnM7Ci0g
IGlmIChSZXRyaWV2ZU9wdGlvbnMoZGVwdGgsIG9wdGlvbnMsICZhbGxfb3B0aW9ucykpIHsKLSAg
ICBvdXRwdXQtPmFwcGVuZChKb2luKGFsbF9vcHRpb25zLCAiLCAiKSk7Ci0gIH0KLSAgcmV0dXJu
ICFhbGxfb3B0aW9ucy5lbXB0eSgpOwotfQotCi0vLyBGb3JtYXRzIG9wdGlvbnMgb25lIHBlciBs
aW5lCi1ib29sIEZvcm1hdExpbmVPcHRpb25zKGludCBkZXB0aCwgY29uc3QgTWVzc2FnZSAmb3B0
aW9ucywgc3RyaW5nICpvdXRwdXQpIHsKLSAgc3RyaW5nIHByZWZpeChkZXB0aCAqIDIsICcgJyk7
Ci0gIHZlY3RvcjxzdHJpbmc+IGFsbF9vcHRpb25zOwotICBpZiAoUmV0cmlldmVPcHRpb25zKGRl
cHRoLCBvcHRpb25zLCAmYWxsX29wdGlvbnMpKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBh
bGxfb3B0aW9ucy5zaXplKCk7IGkrKykgewotICAgICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFw
cGVuZChvdXRwdXQsICIkMG9wdGlvbiAkMTtcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByZWZpeCwgYWxsX29wdGlvbnNbaV0pOwotICAgIH0KLSAgfQotICByZXR1cm4g
IWFsbF9vcHRpb25zLmVtcHR5KCk7Ci19Ci0KLWNsYXNzIFNvdXJjZUxvY2F0aW9uQ29tbWVudFBy
aW50ZXIgewotIHB1YmxpYzoKLSAgdGVtcGxhdGU8dHlwZW5hbWUgRGVzY1R5cGU+Ci0gIFNvdXJj
ZUxvY2F0aW9uQ29tbWVudFByaW50ZXIoY29uc3QgRGVzY1R5cGUqIGRlc2MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBwcmVmaXgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRGVidWdTdHJpbmdPcHRpb25zJiBvcHRpb25zKQotICAg
ICAgOiBvcHRpb25zXyhvcHRpb25zKSwgcHJlZml4XyhwcmVmaXgpIHsKLSAgICAvLyBQZXJmb3Jt
IHRoZSBTb3VyY2VMb2NhdGlvbiBsb29rdXAgb25seSBpZiB3ZSdyZSBpbmNsdWRpbmcgdXNlciBj
b21tZW50cywKLSAgICAvLyBiZWNhdXNlIHRoZSBsb29rdXAgaXMgZmFpcmx5IGV4cGVuc2l2ZS4K
LSAgICBoYXZlX3NvdXJjZV9sb2NfID0gb3B0aW9ucy5pbmNsdWRlX2NvbW1lbnRzICYmCi0gICAg
ICAgIGRlc2MtPkdldFNvdXJjZUxvY2F0aW9uKCZzb3VyY2VfbG9jXyk7Ci0gIH0KLSAgU291cmNl
TG9jYXRpb25Db21tZW50UHJpbnRlcihjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8aW50PiYgcGF0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHByZWZpeCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZWJ1Z1N0cmluZ09wdGlvbnMmIG9wdGlvbnMp
Ci0gICAgICA6IG9wdGlvbnNfKG9wdGlvbnMpLCBwcmVmaXhfKHByZWZpeCkgewotICAgIC8vIFBl
cmZvcm0gdGhlIFNvdXJjZUxvY2F0aW9uIGxvb2t1cCBvbmx5IGlmIHdlJ3JlIGluY2x1ZGluZyB1
c2VyIGNvbW1lbnRzLAotICAgIC8vIGJlY2F1c2UgdGhlIGxvb2t1cCBpcyBmYWlybHkgZXhwZW5z
aXZlLgotICAgIGhhdmVfc291cmNlX2xvY18gPSBvcHRpb25zLmluY2x1ZGVfY29tbWVudHMgJiYK
LSAgICAgICAgZmlsZS0+R2V0U291cmNlTG9jYXRpb24ocGF0aCwgJnNvdXJjZV9sb2NfKTsKLSAg
fQotICB2b2lkIEFkZFByZUNvbW1lbnQoc3RyaW5nKiBvdXRwdXQpIHsKLSAgICBpZiAoaGF2ZV9z
b3VyY2VfbG9jXykgewotICAgICAgLy8gRGV0YWNoZWQgbGVhZGluZyBjb21tZW50cy4KLSAgICAg
IGZvciAoaW50IGkgPSAwIDsgaSA8IHNvdXJjZV9sb2NfLmxlYWRpbmdfZGV0YWNoZWRfY29tbWVu
dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgKm91dHB1dCArPSBGb3JtYXRDb21tZW50KHNvdXJj
ZV9sb2NfLmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHNbaV0pOwotICAgICAgICAqb3V0cHV0ICs9
ICJcbiI7Ci0gICAgICB9Ci0gICAgICAvLyBBdHRhY2hlZCBsZWFkaW5nIGNvbW1lbnRzLgotICAg
ICAgaWYgKCFzb3VyY2VfbG9jXy5sZWFkaW5nX2NvbW1lbnRzLmVtcHR5KCkpIHsKLSAgICAgICAg
Km91dHB1dCArPSBGb3JtYXRDb21tZW50KHNvdXJjZV9sb2NfLmxlYWRpbmdfY29tbWVudHMpOwot
ICAgICAgfQotICAgIH0KLSAgfQotICB2b2lkIEFkZFBvc3RDb21tZW50KHN0cmluZyogb3V0cHV0
KSB7Ci0gICAgaWYgKGhhdmVfc291cmNlX2xvY18gJiYgc291cmNlX2xvY18udHJhaWxpbmdfY29t
bWVudHMuc2l6ZSgpID4gMCkgewotICAgICAgKm91dHB1dCArPSBGb3JtYXRDb21tZW50KHNvdXJj
ZV9sb2NfLnRyYWlsaW5nX2NvbW1lbnRzKTsKLSAgICB9Ci0gIH0KLQotICAvLyBGb3JtYXQgY29t
bWVudCBzdWNoIHRoYXQgZWFjaCBsaW5lIGJlY29tZXMgYSBmdWxsLWxpbmUgQysrLXN0eWxlIGNv
bW1lbnQgaW4KLSAgLy8gdGhlIERlYnVnU3RyaW5nKCkgb3V0cHV0LgotICBzdHJpbmcgRm9ybWF0
Q29tbWVudChjb25zdCBzdHJpbmcmIGNvbW1lbnRfdGV4dCkgewotICAgIHN0cmluZyBzdHJpcHBl
ZF9jb21tZW50ID0gY29tbWVudF90ZXh0OwotICAgIFN0cmlwV2hpdGVzcGFjZSgmc3RyaXBwZWRf
Y29tbWVudCk7Ci0gICAgdmVjdG9yPHN0cmluZz4gbGluZXMgPSBTcGxpdChzdHJpcHBlZF9jb21t
ZW50LCAiXG4iKTsKLSAgICBzdHJpbmcgb3V0cHV0OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGluZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgIGNvbnN0IHN0cmluZyYgbGluZSA9IGxpbmVzW2ld
OwotICAgICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZCgmb3V0cHV0LCAiJDAvLyAkMVxu
IiwgcHJlZml4XywgbGluZSk7Ci0gICAgfQotICAgIHJldHVybiBvdXRwdXQ7Ci0gIH0KLQotIHBy
aXZhdGU6Ci0KLSAgYm9vbCBoYXZlX3NvdXJjZV9sb2NfOwotICBTb3VyY2VMb2NhdGlvbiBzb3Vy
Y2VfbG9jXzsKLSAgRGVidWdTdHJpbmdPcHRpb25zIG9wdGlvbnNfOwotICBzdHJpbmcgcHJlZml4
XzsKLX07Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotc3RyaW5nIEZpbGVEZXNjcmlw
dG9yOjpEZWJ1Z1N0cmluZygpIGNvbnN0IHsKLSAgRGVidWdTdHJpbmdPcHRpb25zIG9wdGlvbnM7
ICAvLyBkZWZhdWx0IG9wdGlvbnMKLSAgcmV0dXJuIERlYnVnU3RyaW5nV2l0aE9wdGlvbnMob3B0
aW9ucyk7Ci19Ci0KLXN0cmluZyBGaWxlRGVzY3JpcHRvcjo6RGVidWdTdHJpbmdXaXRoT3B0aW9u
cygKLSAgICBjb25zdCBEZWJ1Z1N0cmluZ09wdGlvbnMmIGRlYnVnX3N0cmluZ19vcHRpb25zKSBj
b25zdCB7Ci0gIHN0cmluZyBjb250ZW50czsKLSAgewotICAgIHZlY3RvcjxpbnQ+IHBhdGg7Ci0g
ICAgcGF0aC5wdXNoX2JhY2soRmlsZURlc2NyaXB0b3JQcm90bzo6a1N5bnRheEZpZWxkTnVtYmVy
KTsKLSAgICBTb3VyY2VMb2NhdGlvbkNvbW1lbnRQcmludGVyIHN5bnRheF9jb21tZW50KAotICAg
ICAgICB0aGlzLCBwYXRoLCAiIiwgZGVidWdfc3RyaW5nX29wdGlvbnMpOwotICAgIHN5bnRheF9j
b21tZW50LkFkZFByZUNvbW1lbnQoJmNvbnRlbnRzKTsKLSAgICBzdHJpbmdzOjpTdWJzdGl0dXRl
QW5kQXBwZW5kKCZjb250ZW50cywgInN5bnRheCA9IFwiJDBcIjtcblxuIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN5bnRheE5hbWUoc3ludGF4KCkpKTsKLSAgICBzeW50YXhf
Y29tbWVudC5BZGRQb3N0Q29tbWVudCgmY29udGVudHMpOwotICB9Ci0KLSAgU291cmNlTG9jYXRp
b25Db21tZW50UHJpbnRlcgotICAgICAgY29tbWVudF9wcmludGVyKHRoaXMsICIiLCBkZWJ1Z19z
dHJpbmdfb3B0aW9ucyk7Ci0gIGNvbW1lbnRfcHJpbnRlci5BZGRQcmVDb21tZW50KCZjb250ZW50
cyk7Ci0KLSAgc2V0PGludD4gcHVibGljX2RlcGVuZGVuY2llczsKLSAgc2V0PGludD4gd2Vha19k
ZXBlbmRlbmNpZXM7Ci0gIHB1YmxpY19kZXBlbmRlbmNpZXMuaW5zZXJ0KHB1YmxpY19kZXBlbmRl
bmNpZXNfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWNfZGVwZW5kZW5jaWVz
XyArIHB1YmxpY19kZXBlbmRlbmN5X2NvdW50Xyk7Ci0gIHdlYWtfZGVwZW5kZW5jaWVzLmluc2Vy
dCh3ZWFrX2RlcGVuZGVuY2llc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrX2Rl
cGVuZGVuY2llc18gKyB3ZWFrX2RlcGVuZGVuY3lfY291bnRfKTsKLQotICBmb3IgKGludCBpID0g
MDsgaSA8IGRlcGVuZGVuY3lfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKHB1YmxpY19kZXBlbmRl
bmNpZXMuY291bnQoaSkgPiAwKSB7Ci0gICAgICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5k
KCZjb250ZW50cywgImltcG9ydCBwdWJsaWMgXCIkMFwiO1xuIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeShpKS0+bmFtZSgpKTsKLSAgICB9IGVsc2UgaWYg
KHdlYWtfZGVwZW5kZW5jaWVzLmNvdW50KGkpID4gMCkgewotICAgICAgc3RyaW5nczo6U3Vic3Rp
dHV0ZUFuZEFwcGVuZCgmY29udGVudHMsICJpbXBvcnQgd2VhayBcIiQwXCI7XG4iLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5KGkpLT5uYW1lKCkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5kKCZjb250ZW50cywg
ImltcG9ydCBcIiQwXCI7XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXBlbmRlbmN5KGkpLT5uYW1lKCkpOwotICAgIH0KLSAgfQotCi0gIGlmICghcGFja2FnZSgpLmVt
cHR5KCkpIHsKLSAgICB2ZWN0b3I8aW50PiBwYXRoOwotICAgIHBhdGgucHVzaF9iYWNrKEZpbGVE
ZXNjcmlwdG9yUHJvdG86OmtQYWNrYWdlRmllbGROdW1iZXIpOwotICAgIFNvdXJjZUxvY2F0aW9u
Q29tbWVudFByaW50ZXIgcGFja2FnZV9jb21tZW50KAotICAgICAgICB0aGlzLCBwYXRoLCAiIiwg
ZGVidWdfc3RyaW5nX29wdGlvbnMpOwotICAgIHBhY2thZ2VfY29tbWVudC5BZGRQcmVDb21tZW50
KCZjb250ZW50cyk7Ci0gICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZCgmY29udGVudHMs
ICJwYWNrYWdlICQwO1xuXG4iLCBwYWNrYWdlKCkpOwotICAgIHBhY2thZ2VfY29tbWVudC5BZGRQ
b3N0Q29tbWVudCgmY29udGVudHMpOwotICB9Ci0KLSAgaWYgKEZvcm1hdExpbmVPcHRpb25zKDAs
IG9wdGlvbnMoKSwgJmNvbnRlbnRzKSkgewotICAgIGNvbnRlbnRzLmFwcGVuZCgiXG4iKTsgIC8v
IGFkZCBzb21lIHNwYWNlIGlmIHdlIGhhZCBvcHRpb25zCi0gIH0KLQotICBmb3IgKGludCBpID0g
MDsgaSA8IGVudW1fdHlwZV9jb3VudCgpOyBpKyspIHsKLSAgICBlbnVtX3R5cGUoaSktPkRlYnVn
U3RyaW5nKDAsICZjb250ZW50cywgZGVidWdfc3RyaW5nX29wdGlvbnMpOwotICAgIGNvbnRlbnRz
LmFwcGVuZCgiXG4iKTsKLSAgfQotCi0gIC8vIEZpbmQgYWxsIHRoZSAnZ3JvdXAnIHR5cGUgZXh0
ZW5zaW9uczsgd2Ugd2lsbCBub3Qgb3V0cHV0IHRoZWlyIG5lc3RlZAotICAvLyBkZWZpbml0aW9u
cyAodGhvc2Ugd2lsbCBiZSBkb25lIHdpdGggdGhlaXIgZ3JvdXAgZmllbGQgZGVzY3JpcHRvciku
Ci0gIHNldDxjb25zdCBEZXNjcmlwdG9yKj4gZ3JvdXBzOwotICBmb3IgKGludCBpID0gMDsgaSA8
IGV4dGVuc2lvbl9jb3VudCgpOyBpKyspIHsKLSAgICBpZiAoZXh0ZW5zaW9uKGkpLT50eXBlKCkg
PT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQKSB7Ci0gICAgICBncm91cHMuaW5zZXJ0KGV4
dGVuc2lvbihpKS0+bWVzc2FnZV90eXBlKCkpOwotICAgIH0KLSAgfQotCi0gIGZvciAoaW50IGkg
PSAwOyBpIDwgbWVzc2FnZV90eXBlX2NvdW50KCk7IGkrKykgewotICAgIGlmIChncm91cHMuY291
bnQobWVzc2FnZV90eXBlKGkpKSA9PSAwKSB7Ci0gICAgICBtZXNzYWdlX3R5cGUoaSktPkRlYnVn
U3RyaW5nKDAsICZjb250ZW50cywgZGVidWdfc3RyaW5nX29wdGlvbnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIGluY2x1ZGVfb3BlbmluZ19jbGF1c2UgKi8gdHJ1ZSk7
Ci0gICAgICBjb250ZW50cy5hcHBlbmQoIlxuIik7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzZXJ2aWNlX2NvdW50KCk7IGkrKykgewotICAgIHNlcnZpY2UoaSktPkRlYnVn
U3RyaW5nKCZjb250ZW50cywgZGVidWdfc3RyaW5nX29wdGlvbnMpOwotICAgIGNvbnRlbnRzLmFw
cGVuZCgiXG4iKTsKLSAgfQotCi0gIGNvbnN0IERlc2NyaXB0b3IqIGNvbnRhaW5pbmdfdHlwZSA9
IE5VTEw7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5zaW9uX2NvdW50KCk7IGkrKykgewot
ICAgIGlmIChleHRlbnNpb24oaSktPmNvbnRhaW5pbmdfdHlwZSgpICE9IGNvbnRhaW5pbmdfdHlw
ZSkgewotICAgICAgaWYgKGkgPiAwKSBjb250ZW50cy5hcHBlbmQoIn1cblxuIik7Ci0gICAgICBj
b250YWluaW5nX3R5cGUgPSBleHRlbnNpb24oaSktPmNvbnRhaW5pbmdfdHlwZSgpOwotICAgICAg
c3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZCgmY29udGVudHMsICJleHRlbmQgLiQwIHtcbiIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZS0+ZnVs
bF9uYW1lKCkpOwotICAgIH0KLSAgICBleHRlbnNpb24oaSktPkRlYnVnU3RyaW5nKDEsIEZpZWxk
RGVzY3JpcHRvcjo6UFJJTlRfTEFCRUwsICZjb250ZW50cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlYnVnX3N0cmluZ19vcHRpb25zKTsKLSAgfQotICBpZiAoZXh0ZW5zaW9uX2Nv
dW50KCkgPiAwKSBjb250ZW50cy5hcHBlbmQoIn1cblxuIik7Ci0KLSAgY29tbWVudF9wcmludGVy
LkFkZFBvc3RDb21tZW50KCZjb250ZW50cyk7Ci0KLSAgcmV0dXJuIGNvbnRlbnRzOwotfQotCi1z
dHJpbmcgRGVzY3JpcHRvcjo6RGVidWdTdHJpbmcoKSBjb25zdCB7Ci0gIERlYnVnU3RyaW5nT3B0
aW9ucyBvcHRpb25zOyAgLy8gZGVmYXVsdCBvcHRpb25zCi0gIHJldHVybiBEZWJ1Z1N0cmluZ1dp
dGhPcHRpb25zKG9wdGlvbnMpOwotfQotCi1zdHJpbmcgRGVzY3JpcHRvcjo6RGVidWdTdHJpbmdX
aXRoT3B0aW9ucygKLSAgICBjb25zdCBEZWJ1Z1N0cmluZ09wdGlvbnMmIG9wdGlvbnMpIGNvbnN0
IHsKLSAgc3RyaW5nIGNvbnRlbnRzOwotICBEZWJ1Z1N0cmluZygwLCAmY29udGVudHMsIG9wdGlv
bnMsIC8qIGluY2x1ZGVfb3BlbmluZ19jbGF1c2UgKi8gdHJ1ZSk7Ci0gIHJldHVybiBjb250ZW50
czsKLX0KLQotdm9pZCBEZXNjcmlwdG9yOjpEZWJ1Z1N0cmluZyhpbnQgZGVwdGgsIHN0cmluZyAq
Y29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlYnVnU3RyaW5n
T3B0aW9ucyYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfc3RyaW5nX29wdGlv
bnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZV9vcGVuaW5nX2Ns
YXVzZSkgY29uc3QgewotICBpZiAob3B0aW9ucygpLm1hcF9lbnRyeSgpKSB7Ci0gICAgLy8gRG8g
bm90IGdlbmVyYXRlIGRlYnVnIHN0cmluZyBmb3IgYXV0by1nZW5lcmF0ZWQgbWFwLWVudHJ5IHR5
cGUuCi0gICAgcmV0dXJuOwotICB9Ci0gIHN0cmluZyBwcmVmaXgoZGVwdGggKiAyLCAnICcpOwot
ICArK2RlcHRoOwotCi0gIFNvdXJjZUxvY2F0aW9uQ29tbWVudFByaW50ZXIKLSAgICAgIGNvbW1l
bnRfcHJpbnRlcih0aGlzLCBwcmVmaXgsIGRlYnVnX3N0cmluZ19vcHRpb25zKTsKLSAgY29tbWVu
dF9wcmludGVyLkFkZFByZUNvbW1lbnQoY29udGVudHMpOwotCi0gIGlmIChpbmNsdWRlX29wZW5p
bmdfY2xhdXNlKSB7Ci0gICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZChjb250ZW50cywg
IiQwbWVzc2FnZSAkMSIsIHByZWZpeCwgbmFtZSgpKTsKLSAgfQotICBjb250ZW50cy0+YXBwZW5k
KCIge1xuIik7Ci0KLSAgRm9ybWF0TGluZU9wdGlvbnMoZGVwdGgsIG9wdGlvbnMoKSwgY29udGVu
dHMpOwotCi0gIC8vIEZpbmQgYWxsIHRoZSAnZ3JvdXAnIHR5cGVzIGZvciBmaWVsZHMgYW5kIGV4
dGVuc2lvbnM7IHdlIHdpbGwgbm90IG91dHB1dAotICAvLyB0aGVpciBuZXN0ZWQgZGVmaW5pdGlv
bnMgKHRob3NlIHdpbGwgYmUgZG9uZSB3aXRoIHRoZWlyIGdyb3VwIGZpZWxkCi0gIC8vIGRlc2Ny
aXB0b3IpLgotICBzZXQ8Y29uc3QgRGVzY3JpcHRvcio+IGdyb3VwczsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmaWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBpZiAoZmllbGQoaSktPnR5cGUoKSA9
PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVApIHsKLSAgICAgIGdyb3Vwcy5pbnNlcnQoZmll
bGQoaSktPm1lc3NhZ2VfdHlwZSgpKTsKLSAgICB9Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBleHRlbnNpb25fY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKGV4dGVuc2lvbihpKS0+dHlwZSgp
ID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCkgewotICAgICAgZ3JvdXBzLmluc2VydChl
eHRlbnNpb24oaSktPm1lc3NhZ2VfdHlwZSgpKTsKLSAgICB9Ci0gIH0KLQotICBmb3IgKGludCBp
ID0gMDsgaSA8IG5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykgewotICAgIGlmIChncm91cHMuY291
bnQobmVzdGVkX3R5cGUoaSkpID09IDApIHsKLSAgICAgIG5lc3RlZF90eXBlKGkpLT5EZWJ1Z1N0
cmluZyhkZXB0aCwgY29udGVudHMsIGRlYnVnX3N0cmluZ19vcHRpb25zLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIGluY2x1ZGVfb3BlbmluZ19jbGF1c2UgKi8gdHJ1ZSk7
Ci0gICAgfQotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZW51bV90eXBlX2NvdW50KCk7IGkr
KykgewotICAgIGVudW1fdHlwZShpKS0+RGVidWdTdHJpbmcoZGVwdGgsIGNvbnRlbnRzLCBkZWJ1
Z19zdHJpbmdfb3B0aW9ucyk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZF9jb3Vu
dCgpOyBpKyspIHsKLSAgICBpZiAoZmllbGQoaSktPmNvbnRhaW5pbmdfb25lb2YoKSA9PSBOVUxM
KSB7Ci0gICAgICBmaWVsZChpKS0+RGVidWdTdHJpbmcoZGVwdGgsIEZpZWxkRGVzY3JpcHRvcjo6
UFJJTlRfTEFCRUwsIGNvbnRlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn
X3N0cmluZ19vcHRpb25zKTsKLSAgICB9IGVsc2UgaWYgKGZpZWxkKGkpLT5jb250YWluaW5nX29u
ZW9mKCktPmZpZWxkKDApID09IGZpZWxkKGkpKSB7Ci0gICAgICAvLyBUaGlzIGlzIHRoZSBmaXJz
dCBmaWVsZCBpbiB0aGlzIG9uZW9mLCBzbyBwcmludCB0aGUgd2hvbGUgb25lb2YuCi0gICAgICBm
aWVsZChpKS0+Y29udGFpbmluZ19vbmVvZigpLT5EZWJ1Z1N0cmluZyhkZXB0aCwgY29udGVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19z
dHJpbmdfb3B0aW9ucyk7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRl
bnNpb25fcmFuZ2VfY291bnQoKTsgaSsrKSB7Ci0gICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFw
cGVuZChjb250ZW50cywgIiQwICBleHRlbnNpb25zICQxIHRvICQyO1xuIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4dGVuc2lvbl9yYW5nZShpKS0+c3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHRlbnNpb25fcmFuZ2UoaSktPmVuZCAtIDEpOwotICB9Ci0KLSAgLy8gR3Jv
dXAgZXh0ZW5zaW9ucyBieSB3aGF0IHRoZXkgZXh0ZW5kLCBzbyB0aGV5IGNhbiBiZSBwcmludGVk
IG91dCB0b2dldGhlci4KLSAgY29uc3QgRGVzY3JpcHRvciogY29udGFpbmluZ190eXBlID0gTlVM
TDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25fY291bnQoKTsgaSsrKSB7Ci0gICAg
aWYgKGV4dGVuc2lvbihpKS0+Y29udGFpbmluZ190eXBlKCkgIT0gY29udGFpbmluZ190eXBlKSB7
Ci0gICAgICBpZiAoaSA+IDApIHN0cmluZ3M6OlN1YnN0aXR1dGVBbmRBcHBlbmQoY29udGVudHMs
ICIkMCAgfVxuIiwgcHJlZml4KTsKLSAgICAgIGNvbnRhaW5pbmdfdHlwZSA9IGV4dGVuc2lvbihp
KS0+Y29udGFpbmluZ190eXBlKCk7Ci0gICAgICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5k
KGNvbnRlbnRzLCAiJDAgIGV4dGVuZCAuJDEge1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlZml4LCBjb250YWluaW5nX3R5cGUtPmZ1bGxfbmFtZSgpKTsKLSAgICB9
Ci0gICAgZXh0ZW5zaW9uKGkpLT5EZWJ1Z1N0cmluZygKLSAgICAgICAgZGVwdGggKyAxLCBGaWVs
ZERlc2NyaXB0b3I6OlBSSU5UX0xBQkVMLCBjb250ZW50cywKLSAgICAgICAgZGVidWdfc3RyaW5n
X29wdGlvbnMpOwotICB9Ci0gIGlmIChleHRlbnNpb25fY291bnQoKSA+IDApCi0gICAgc3RyaW5n
czo6U3Vic3RpdHV0ZUFuZEFwcGVuZChjb250ZW50cywgIiQwICB9XG4iLCBwcmVmaXgpOwotCi0g
IGlmIChyZXNlcnZlZF9yYW5nZV9jb3VudCgpID4gMCkgewotICAgIHN0cmluZ3M6OlN1YnN0aXR1
dGVBbmRBcHBlbmQoY29udGVudHMsICIkMCAgcmVzZXJ2ZWQgIiwgcHJlZml4KTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHJlc2VydmVkX3JhbmdlX2NvdW50KCk7IGkrKykgewotICAgICAgY29u
c3QgRGVzY3JpcHRvcjo6UmVzZXJ2ZWRSYW5nZSogcmFuZ2UgPSByZXNlcnZlZF9yYW5nZShpKTsK
LSAgICAgIGlmIChyYW5nZS0+ZW5kID09IHJhbmdlLT5zdGFydCArIDEpIHsKLSAgICAgICAgc3Ry
aW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZChjb250ZW50cywgIiQwLCAiLCByYW5nZS0+c3RhcnQp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZChj
b250ZW50cywgIiQwIHRvICQxLCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJhbmdlLT5zdGFydCwgcmFuZ2UtPmVuZCAtIDEpOwotICAgICAgfQotICAgIH0KLSAgICBj
b250ZW50cy0+cmVwbGFjZShjb250ZW50cy0+c2l6ZSgpIC0gMiwgMiwgIjtcbiIpOwotICB9Ci0K
LSAgaWYgKHJlc2VydmVkX25hbWVfY291bnQoKSA+IDApIHsKLSAgICBzdHJpbmdzOjpTdWJzdGl0
dXRlQW5kQXBwZW5kKGNvbnRlbnRzLCAiJDAgIHJlc2VydmVkICIsIHByZWZpeCk7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCByZXNlcnZlZF9uYW1lX2NvdW50KCk7IGkrKykgewotICAgICAgc3Ry
aW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZChjb250ZW50cywgIlwiJDBcIiwgIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VzY2FwZShyZXNlcnZlZF9uYW1lKGkpKSk7Ci0g
ICAgfQotICAgIGNvbnRlbnRzLT5yZXBsYWNlKGNvbnRlbnRzLT5zaXplKCkgLSAyLCAyLCAiO1xu
Iik7Ci0gIH0KLQotICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5kKGNvbnRlbnRzLCAiJDB9
XG4iLCBwcmVmaXgpOwotICBjb21tZW50X3ByaW50ZXIuQWRkUG9zdENvbW1lbnQoY29udGVudHMp
OwotfQotCi1zdHJpbmcgRmllbGREZXNjcmlwdG9yOjpEZWJ1Z1N0cmluZygpIGNvbnN0IHsKLSAg
RGVidWdTdHJpbmdPcHRpb25zIG9wdGlvbnM7ICAvLyBkZWZhdWx0IG9wdGlvbnMKLSAgcmV0dXJu
IERlYnVnU3RyaW5nV2l0aE9wdGlvbnMob3B0aW9ucyk7Ci19Ci0KLXN0cmluZyBGaWVsZERlc2Ny
aXB0b3I6OkRlYnVnU3RyaW5nV2l0aE9wdGlvbnMoCi0gICAgY29uc3QgRGVidWdTdHJpbmdPcHRp
b25zJiBkZWJ1Z19zdHJpbmdfb3B0aW9ucykgY29uc3QgewotICBzdHJpbmcgY29udGVudHM7Ci0g
IGludCBkZXB0aCA9IDA7Ci0gIGlmIChpc19leHRlbnNpb24oKSkgewotICAgIHN0cmluZ3M6OlN1
YnN0aXR1dGVBbmRBcHBlbmQoJmNvbnRlbnRzLCAiZXh0ZW5kIC4kMCB7XG4iLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlKCktPmZ1bGxfbmFtZSgpKTsK
LSAgICBkZXB0aCA9IDE7Ci0gIH0KLSAgRGVidWdTdHJpbmcoZGVwdGgsIFBSSU5UX0xBQkVMLCAm
Y29udGVudHMsIGRlYnVnX3N0cmluZ19vcHRpb25zKTsKLSAgaWYgKGlzX2V4dGVuc2lvbigpKSB7
Ci0gICAgY29udGVudHMuYXBwZW5kKCJ9XG4iKTsKLSAgfQotICByZXR1cm4gY29udGVudHM7Ci19
Ci0KLS8vIFRoZSBmaWVsZCB0eXBlIHN0cmluZyB1c2VkIGluIEZpZWxkRGVzY3JpcHRvcjo6RGVi
dWdTdHJpbmcoKQotc3RyaW5nIEZpZWxkRGVzY3JpcHRvcjo6RmllbGRUeXBlTmFtZURlYnVnU3Ry
aW5nKCkgY29uc3QgewotICBzd2l0Y2godHlwZSgpKSB7Ci0gICAgY2FzZSBUWVBFX01FU1NBR0U6
Ci0gICAgICByZXR1cm4gIi4iICsgbWVzc2FnZV90eXBlKCktPmZ1bGxfbmFtZSgpOwotICAgIGNh
c2UgVFlQRV9FTlVNOgotICAgICAgcmV0dXJuICIuIiArIGVudW1fdHlwZSgpLT5mdWxsX25hbWUo
KTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGtUeXBlVG9OYW1lW3R5cGUoKV07Ci0gIH0K
LX0KLQotdm9pZCBGaWVsZERlc2NyaXB0b3I6OkRlYnVnU3RyaW5nKGludCBkZXB0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmludExhYmVsRmxhZyBwcmludF9sYWJlbF9m
bGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAqY29udGVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVidWdTdHJpbmdPcHRp
b25zJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX3N0cmluZ19vcHRp
b25zKSBjb25zdCB7Ci0gIHN0cmluZyBwcmVmaXgoZGVwdGggKiAyLCAnICcpOwotICBzdHJpbmcg
ZmllbGRfdHlwZTsKLQotICAvLyBTcGVjaWFsIGNhc2UgbWFwIGZpZWxkcy4KLSAgaWYgKGlzX21h
cCgpKSB7Ci0gICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZCgKLSAgICAgICAgJmZpZWxk
X3R5cGUsICJtYXA8JDAsICQxPiIsCi0gICAgICAgIG1lc3NhZ2VfdHlwZSgpLT5maWVsZCgwKS0+
RmllbGRUeXBlTmFtZURlYnVnU3RyaW5nKCksCi0gICAgICAgIG1lc3NhZ2VfdHlwZSgpLT5maWVs
ZCgxKS0+RmllbGRUeXBlTmFtZURlYnVnU3RyaW5nKCkpOwotICB9IGVsc2UgewotICAgIGZpZWxk
X3R5cGUgPSBGaWVsZFR5cGVOYW1lRGVidWdTdHJpbmcoKTsKLSAgfQotCi0gIHN0cmluZyBsYWJl
bDsKLSAgaWYgKHByaW50X2xhYmVsX2ZsYWcgPT0gUFJJTlRfTEFCRUwgJiYgIWlzX21hcCgpKSB7
Ci0gICAgbGFiZWwgPSBrTGFiZWxUb05hbWVbdGhpcy0+bGFiZWwoKV07Ci0gICAgbGFiZWwucHVz
aF9iYWNrKCcgJyk7Ci0gIH0KLQotICBTb3VyY2VMb2NhdGlvbkNvbW1lbnRQcmludGVyCi0gICAg
ICBjb21tZW50X3ByaW50ZXIodGhpcywgcHJlZml4LCBkZWJ1Z19zdHJpbmdfb3B0aW9ucyk7Ci0g
IGNvbW1lbnRfcHJpbnRlci5BZGRQcmVDb21tZW50KGNvbnRlbnRzKTsKLQotICBzdHJpbmdzOjpT
dWJzdGl0dXRlQW5kQXBwZW5kKGNvbnRlbnRzLCAiJDAkMSQyICQzID0gJDQiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYWJlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF90eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoKSA9PSBUWVBFX0dST1VQID8gbWVz
c2FnZV90eXBlKCktPm5hbWUoKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtYmVyKCkpOwotCi0gIGJvb2wgYnJhY2tldGVkID0gZmFsc2U7Ci0gIGlmIChoYXNfZGVm
YXVsdF92YWx1ZSgpKSB7Ci0gICAgYnJhY2tldGVkID0gdHJ1ZTsKLSAgICBzdHJpbmdzOjpTdWJz
dGl0dXRlQW5kQXBwZW5kKGNvbnRlbnRzLCAiIFtkZWZhdWx0ID0gJDAiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlQXNTdHJpbmcodHJ1ZSkpOwotICB9Ci0K
LSAgc3RyaW5nIGZvcm1hdHRlZF9vcHRpb25zOwotICBpZiAoRm9ybWF0QnJhY2tldGVkT3B0aW9u
cyhkZXB0aCwgb3B0aW9ucygpLCAmZm9ybWF0dGVkX29wdGlvbnMpKSB7Ci0gICAgY29udGVudHMt
PmFwcGVuZChicmFja2V0ZWQgPyAiLCAiIDogIiBbIik7Ci0gICAgYnJhY2tldGVkID0gdHJ1ZTsK
LSAgICBjb250ZW50cy0+YXBwZW5kKGZvcm1hdHRlZF9vcHRpb25zKTsKLSAgfQotCi0gIGlmIChi
cmFja2V0ZWQpIHsKLSAgICBjb250ZW50cy0+YXBwZW5kKCJdIik7Ci0gIH0KLQotICBpZiAodHlw
ZSgpID09IFRZUEVfR1JPVVApIHsKLSAgICBpZiAoZGVidWdfc3RyaW5nX29wdGlvbnMuZWxpZGVf
Z3JvdXBfYm9keSkgewotICAgICAgY29udGVudHMtPmFwcGVuZCgiIHsgLi4uIH07XG4iKTsKLSAg
ICB9IGVsc2UgewotICAgICAgbWVzc2FnZV90eXBlKCktPkRlYnVnU3RyaW5nKGRlcHRoLCBjb250
ZW50cywgZGVidWdfc3RyaW5nX29wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogaW5jbHVkZV9vcGVuaW5nX2NsYXVzZSAqLyBmYWxzZSk7Ci0gICAgfQotICB9IGVs
c2UgewotICAgIGNvbnRlbnRzLT5hcHBlbmQoIjtcbiIpOwotICB9Ci0KLSAgY29tbWVudF9wcmlu
dGVyLkFkZFBvc3RDb21tZW50KGNvbnRlbnRzKTsKLX0KLQotc3RyaW5nIE9uZW9mRGVzY3JpcHRv
cjo6RGVidWdTdHJpbmcoKSBjb25zdCB7Ci0gIERlYnVnU3RyaW5nT3B0aW9ucyBvcHRpb25zOyAg
Ly8gZGVmYXVsdCB2YWx1ZXMKLSAgcmV0dXJuIERlYnVnU3RyaW5nV2l0aE9wdGlvbnMob3B0aW9u
cyk7Ci19Ci0KLXN0cmluZyBPbmVvZkRlc2NyaXB0b3I6OkRlYnVnU3RyaW5nV2l0aE9wdGlvbnMo
Ci0gICAgY29uc3QgRGVidWdTdHJpbmdPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7Ci0gIHN0cmlu
ZyBjb250ZW50czsKLSAgRGVidWdTdHJpbmcoMCwgJmNvbnRlbnRzLCBvcHRpb25zKTsKLSAgcmV0
dXJuIGNvbnRlbnRzOwotfQotCi12b2lkIE9uZW9mRGVzY3JpcHRvcjo6RGVidWdTdHJpbmcoaW50
IGRlcHRoLCBzdHJpbmcqIGNvbnRlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IERlYnVnU3RyaW5nT3B0aW9ucyYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWJ1Z19zdHJpbmdfb3B0aW9ucykgY29uc3QgewotICBzdHJpbmcgcHJlZml4KGRl
cHRoICogMiwgJyAnKTsKLSAgKytkZXB0aDsKLSAgU291cmNlTG9jYXRpb25Db21tZW50UHJpbnRl
cgotICAgICAgY29tbWVudF9wcmludGVyKHRoaXMsIHByZWZpeCwgZGVidWdfc3RyaW5nX29wdGlv
bnMpOwotICBjb21tZW50X3ByaW50ZXIuQWRkUHJlQ29tbWVudChjb250ZW50cyk7Ci0gIHN0cmlu
Z3M6OlN1YnN0aXR1dGVBbmRBcHBlbmQoCi0gICAgICBjb250ZW50cywgIiQwIG9uZW9mICQxIHsi
LCBwcmVmaXgsIG5hbWUoKSk7Ci0gIGlmIChkZWJ1Z19zdHJpbmdfb3B0aW9ucy5lbGlkZV9vbmVv
Zl9ib2R5KSB7Ci0gICAgY29udGVudHMtPmFwcGVuZCgiIC4uLiB9XG4iKTsKLSAgfSBlbHNlIHsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkX2NvdW50KCk7IGkrKykgewotICAgICAgZmll
bGQoaSktPkRlYnVnU3RyaW5nKGRlcHRoLCBGaWVsZERlc2NyaXB0b3I6Ok9NSVRfTEFCRUwsIGNv
bnRlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX3N0cmluZ19vcHRpb25z
KTsKLSAgICB9Ci0gICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZChjb250ZW50cywgIiQw
fVxuIiwgcHJlZml4KTsKLSAgfQotICBjb21tZW50X3ByaW50ZXIuQWRkUG9zdENvbW1lbnQoY29u
dGVudHMpOwotfQotCi1zdHJpbmcgRW51bURlc2NyaXB0b3I6OkRlYnVnU3RyaW5nKCkgY29uc3Qg
ewotICBEZWJ1Z1N0cmluZ09wdGlvbnMgb3B0aW9uczsgIC8vIGRlZmF1bHQgdmFsdWVzCi0gIHJl
dHVybiBEZWJ1Z1N0cmluZ1dpdGhPcHRpb25zKG9wdGlvbnMpOwotfQotCi1zdHJpbmcgRW51bURl
c2NyaXB0b3I6OkRlYnVnU3RyaW5nV2l0aE9wdGlvbnMoCi0gICAgY29uc3QgRGVidWdTdHJpbmdP
cHRpb25zJiBvcHRpb25zKSBjb25zdCB7Ci0gIHN0cmluZyBjb250ZW50czsKLSAgRGVidWdTdHJp
bmcoMCwgJmNvbnRlbnRzLCBvcHRpb25zKTsKLSAgcmV0dXJuIGNvbnRlbnRzOwotfQotCi12b2lk
IEVudW1EZXNjcmlwdG9yOjpEZWJ1Z1N0cmluZyhpbnQgZGVwdGgsIHN0cmluZyAqY29udGVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZWJ1Z1N0cmluZ09wdGlv
bnMmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19zdHJpbmdfb3B0aW9u
cykgY29uc3QgewotICBzdHJpbmcgcHJlZml4KGRlcHRoICogMiwgJyAnKTsKLSAgKytkZXB0aDsK
LQotICBTb3VyY2VMb2NhdGlvbkNvbW1lbnRQcmludGVyCi0gICAgICBjb21tZW50X3ByaW50ZXIo
dGhpcywgcHJlZml4LCBkZWJ1Z19zdHJpbmdfb3B0aW9ucyk7Ci0gIGNvbW1lbnRfcHJpbnRlci5B
ZGRQcmVDb21tZW50KGNvbnRlbnRzKTsKLQotICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5k
KGNvbnRlbnRzLCAiJDBlbnVtICQxIHtcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJlZml4LCBuYW1lKCkpOwotCi0gIEZvcm1hdExpbmVPcHRpb25zKGRlcHRoLCBvcHRpb25z
KCksIGNvbnRlbnRzKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlX2NvdW50KCk7IGkr
KykgewotICAgIHZhbHVlKGkpLT5EZWJ1Z1N0cmluZyhkZXB0aCwgY29udGVudHMsIGRlYnVnX3N0
cmluZ19vcHRpb25zKTsKLSAgfQotICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5kKGNvbnRl
bnRzLCAiJDB9XG4iLCBwcmVmaXgpOwotCi0gIGNvbW1lbnRfcHJpbnRlci5BZGRQb3N0Q29tbWVu
dChjb250ZW50cyk7Ci19Ci0KLXN0cmluZyBFbnVtVmFsdWVEZXNjcmlwdG9yOjpEZWJ1Z1N0cmlu
ZygpIGNvbnN0IHsKLSAgRGVidWdTdHJpbmdPcHRpb25zIG9wdGlvbnM7ICAvLyBkZWZhdWx0IHZh
bHVlcwotICByZXR1cm4gRGVidWdTdHJpbmdXaXRoT3B0aW9ucyhvcHRpb25zKTsKLX0KLQotc3Ry
aW5nIEVudW1WYWx1ZURlc2NyaXB0b3I6OkRlYnVnU3RyaW5nV2l0aE9wdGlvbnMoCi0gICAgY29u
c3QgRGVidWdTdHJpbmdPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7Ci0gIHN0cmluZyBjb250ZW50
czsKLSAgRGVidWdTdHJpbmcoMCwgJmNvbnRlbnRzLCBvcHRpb25zKTsKLSAgcmV0dXJuIGNvbnRl
bnRzOwotfQotCi12b2lkIEVudW1WYWx1ZURlc2NyaXB0b3I6OkRlYnVnU3RyaW5nKGludCBkZXB0
aCwgc3RyaW5nICpjb250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRGVidWdTdHJpbmdPcHRpb25zJgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWJ1Z19zdHJpbmdfb3B0aW9ucykgY29uc3QgewotICBzdHJpbmcgcHJlZml4
KGRlcHRoICogMiwgJyAnKTsKLQotICBTb3VyY2VMb2NhdGlvbkNvbW1lbnRQcmludGVyCi0gICAg
ICBjb21tZW50X3ByaW50ZXIodGhpcywgcHJlZml4LCBkZWJ1Z19zdHJpbmdfb3B0aW9ucyk7Ci0g
IGNvbW1lbnRfcHJpbnRlci5BZGRQcmVDb21tZW50KGNvbnRlbnRzKTsKLQotICBzdHJpbmdzOjpT
dWJzdGl0dXRlQW5kQXBwZW5kKGNvbnRlbnRzLCAiJDAkMSA9ICQyIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVmaXgsIG5hbWUoKSwgbnVtYmVyKCkpOwotCi0gIHN0cmluZyBm
b3JtYXR0ZWRfb3B0aW9uczsKLSAgaWYgKEZvcm1hdEJyYWNrZXRlZE9wdGlvbnMoZGVwdGgsIG9w
dGlvbnMoKSwgJmZvcm1hdHRlZF9vcHRpb25zKSkgewotICAgIHN0cmluZ3M6OlN1YnN0aXR1dGVB
bmRBcHBlbmQoY29udGVudHMsICIgWyQwXSIsIGZvcm1hdHRlZF9vcHRpb25zKTsKLSAgfQotICBj
b250ZW50cy0+YXBwZW5kKCI7XG4iKTsKLQotICBjb21tZW50X3ByaW50ZXIuQWRkUG9zdENvbW1l
bnQoY29udGVudHMpOwotfQotCi1zdHJpbmcgU2VydmljZURlc2NyaXB0b3I6OkRlYnVnU3RyaW5n
KCkgY29uc3QgewotICBEZWJ1Z1N0cmluZ09wdGlvbnMgb3B0aW9uczsgIC8vIGRlZmF1bHQgdmFs
dWVzCi0gIHJldHVybiBEZWJ1Z1N0cmluZ1dpdGhPcHRpb25zKG9wdGlvbnMpOwotfQotCi1zdHJp
bmcgU2VydmljZURlc2NyaXB0b3I6OkRlYnVnU3RyaW5nV2l0aE9wdGlvbnMoCi0gICAgY29uc3Qg
RGVidWdTdHJpbmdPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7Ci0gIHN0cmluZyBjb250ZW50czsK
LSAgRGVidWdTdHJpbmcoJmNvbnRlbnRzLCBvcHRpb25zKTsKLSAgcmV0dXJuIGNvbnRlbnRzOwot
fQotCi12b2lkIFNlcnZpY2VEZXNjcmlwdG9yOjpEZWJ1Z1N0cmluZyhzdHJpbmcgKmNvbnRlbnRz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVidWdTdHJpbmdP
cHRpb25zJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfc3RyaW5n
X29wdGlvbnMpIGNvbnN0IHsKLSAgU291cmNlTG9jYXRpb25Db21tZW50UHJpbnRlcgotICAgICAg
Y29tbWVudF9wcmludGVyKHRoaXMsIC8qIHByZWZpeCAqLyAiIiwgZGVidWdfc3RyaW5nX29wdGlv
bnMpOwotICBjb21tZW50X3ByaW50ZXIuQWRkUHJlQ29tbWVudChjb250ZW50cyk7Ci0KLSAgc3Ry
aW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZChjb250ZW50cywgInNlcnZpY2UgJDAge1xuIiwgbmFt
ZSgpKTsKLQotICBGb3JtYXRMaW5lT3B0aW9ucygxLCBvcHRpb25zKCksIGNvbnRlbnRzKTsKLQot
ICBmb3IgKGludCBpID0gMDsgaSA8IG1ldGhvZF9jb3VudCgpOyBpKyspIHsKLSAgICBtZXRob2Qo
aSktPkRlYnVnU3RyaW5nKDEsIGNvbnRlbnRzLCBkZWJ1Z19zdHJpbmdfb3B0aW9ucyk7Ci0gIH0K
LQotICBjb250ZW50cy0+YXBwZW5kKCJ9XG4iKTsKLQotICBjb21tZW50X3ByaW50ZXIuQWRkUG9z
dENvbW1lbnQoY29udGVudHMpOwotfQotCi1zdHJpbmcgTWV0aG9kRGVzY3JpcHRvcjo6RGVidWdT
dHJpbmcoKSBjb25zdCB7Ci0gIERlYnVnU3RyaW5nT3B0aW9ucyBvcHRpb25zOyAgLy8gZGVmYXVs
dCB2YWx1ZXMKLSAgcmV0dXJuIERlYnVnU3RyaW5nV2l0aE9wdGlvbnMob3B0aW9ucyk7Ci19Ci0K
LXN0cmluZyBNZXRob2REZXNjcmlwdG9yOjpEZWJ1Z1N0cmluZ1dpdGhPcHRpb25zKAotICAgIGNv
bnN0IERlYnVnU3RyaW5nT3B0aW9ucyYgb3B0aW9ucykgY29uc3QgewotICBzdHJpbmcgY29udGVu
dHM7Ci0gIERlYnVnU3RyaW5nKDAsICZjb250ZW50cywgb3B0aW9ucyk7Ci0gIHJldHVybiBjb250
ZW50czsKLX0KLQotdm9pZCBNZXRob2REZXNjcmlwdG9yOjpEZWJ1Z1N0cmluZyhpbnQgZGVwdGgs
IHN0cmluZyAqY29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IERlYnVnU3RyaW5nT3B0aW9ucyYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVidWdfc3RyaW5nX29wdGlvbnMpIGNvbnN0IHsKLSAgc3RyaW5nIHByZWZpeChkZXB0aCAq
IDIsICcgJyk7Ci0gICsrZGVwdGg7Ci0KLSAgU291cmNlTG9jYXRpb25Db21tZW50UHJpbnRlcgot
ICAgICAgY29tbWVudF9wcmludGVyKHRoaXMsIHByZWZpeCwgZGVidWdfc3RyaW5nX29wdGlvbnMp
OwotICBjb21tZW50X3ByaW50ZXIuQWRkUHJlQ29tbWVudChjb250ZW50cyk7Ci0KLSAgc3RyaW5n
czo6U3Vic3RpdHV0ZUFuZEFwcGVuZChjb250ZW50cywgIiQwcnBjICQxKCQ0LiQyKSByZXR1cm5z
ICgkNS4kMykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgbmFtZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3R5cGUoKS0+ZnVsbF9uYW1l
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3R5cGUoKS0+ZnVsbF9u
YW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3N0cmVhbWluZygp
ID8gInN0cmVhbSAiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVy
X3N0cmVhbWluZygpID8gInN0cmVhbSAiIDogIiIpOwotCi0gIHN0cmluZyBmb3JtYXR0ZWRfb3B0
aW9uczsKLSAgaWYgKEZvcm1hdExpbmVPcHRpb25zKGRlcHRoLCBvcHRpb25zKCksICZmb3JtYXR0
ZWRfb3B0aW9ucykpIHsKLSAgICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5kKGNvbnRlbnRz
LCAiIHtcbiQwJDF9XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0
dGVkX29wdGlvbnMsIHByZWZpeCk7Ci0gIH0gZWxzZSB7Ci0gICAgY29udGVudHMtPmFwcGVuZCgi
O1xuIik7Ci0gIH0KLQotICBjb21tZW50X3ByaW50ZXIuQWRkUG9zdENvbW1lbnQoY29udGVudHMp
OwotfQotCi0KLS8vIExvY2F0aW9uIG1ldGhvZHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotYm9vbCBGaWxlRGVzY3JpcHRvcjo6R2V0U291cmNlTG9j
YXRpb24oY29uc3QgdmVjdG9yPGludD4mIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTb3VyY2VMb2NhdGlvbiogb3V0X2xvY2F0aW9uKSBjb25zdCB7Ci0gIEdP
T0dMRV9DSEVDS19OT1ROVUxMKG91dF9sb2NhdGlvbik7Ci0gIGlmIChzb3VyY2VfY29kZV9pbmZv
XykgewotICAgIGlmIChjb25zdCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiogbG9jID0KLSAgICAg
ICAgdGFibGVzXy0+R2V0U291cmNlTG9jYXRpb24ocGF0aCwgc291cmNlX2NvZGVfaW5mb18pKSB7
Ci0gICAgICBjb25zdCBSZXBlYXRlZEZpZWxkPGludDMyPiYgc3BhbiA9IGxvYy0+c3BhbigpOwot
ICAgICAgaWYgKHNwYW4uc2l6ZSgpID09IDMgfHwgc3Bhbi5zaXplKCkgPT0gNCkgewotICAgICAg
ICBvdXRfbG9jYXRpb24tPnN0YXJ0X2xpbmUgICA9IHNwYW4uR2V0KDApOwotICAgICAgICBvdXRf
bG9jYXRpb24tPnN0YXJ0X2NvbHVtbiA9IHNwYW4uR2V0KDEpOwotICAgICAgICBvdXRfbG9jYXRp
b24tPmVuZF9saW5lICAgICA9IHNwYW4uR2V0KHNwYW4uc2l6ZSgpID09IDMgPyAwIDogMik7Ci0g
ICAgICAgIG91dF9sb2NhdGlvbi0+ZW5kX2NvbHVtbiAgID0gc3Bhbi5HZXQoc3Bhbi5zaXplKCkg
LSAxKTsKLQotICAgICAgICBvdXRfbG9jYXRpb24tPmxlYWRpbmdfY29tbWVudHMgPSBsb2MtPmxl
YWRpbmdfY29tbWVudHMoKTsKLSAgICAgICAgb3V0X2xvY2F0aW9uLT50cmFpbGluZ19jb21tZW50
cyA9IGxvYy0+dHJhaWxpbmdfY29tbWVudHMoKTsKLSAgICAgICAgb3V0X2xvY2F0aW9uLT5sZWFk
aW5nX2RldGFjaGVkX2NvbW1lbnRzLmFzc2lnbigKLSAgICAgICAgICAgIGxvYy0+bGVhZGluZ19k
ZXRhY2hlZF9jb21tZW50cygpLmJlZ2luKCksCi0gICAgICAgICAgICBsb2MtPmxlYWRpbmdfZGV0
YWNoZWRfY29tbWVudHMoKS5lbmQoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQot
ICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRmlsZURlc2NyaXB0b3I6Okdl
dFNvdXJjZUxvY2F0aW9uKFNvdXJjZUxvY2F0aW9uKiBvdXRfbG9jYXRpb24pIGNvbnN0IHsKLSAg
dmVjdG9yPGludD4gcGF0aDsgIC8vIGVtcHR5IHBhdGggZm9yIHJvb3QgRmlsZURlc2NyaXB0b3IK
LSAgcmV0dXJuIEdldFNvdXJjZUxvY2F0aW9uKHBhdGgsIG91dF9sb2NhdGlvbik7Ci19Ci0KLWJv
b2wgRmllbGREZXNjcmlwdG9yOjppc19wYWNrZWQoKSBjb25zdCB7Ci0gIGlmICghaXNfcGFja2Fi
bGUoKSkgcmV0dXJuIGZhbHNlOwotICBpZiAoZmlsZV8tPnN5bnRheCgpID09IEZpbGVEZXNjcmlw
dG9yOjpTWU5UQVhfUFJPVE8yKSB7Ci0gICAgcmV0dXJuIChvcHRpb25zXyAhPSBOVUxMKSAmJiBv
cHRpb25zXy0+cGFja2VkKCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG9wdGlvbnNfID09IE5V
TEwgfHwgIW9wdGlvbnNfLT5oYXNfcGFja2VkKCkgfHwgb3B0aW9uc18tPnBhY2tlZCgpOwotICB9
Ci19Ci0KLWJvb2wgRGVzY3JpcHRvcjo6R2V0U291cmNlTG9jYXRpb24oU291cmNlTG9jYXRpb24q
IG91dF9sb2NhdGlvbikgY29uc3QgewotICB2ZWN0b3I8aW50PiBwYXRoOwotICBHZXRMb2NhdGlv
blBhdGgoJnBhdGgpOwotICByZXR1cm4gZmlsZSgpLT5HZXRTb3VyY2VMb2NhdGlvbihwYXRoLCBv
dXRfbG9jYXRpb24pOwotfQotCi1ib29sIEZpZWxkRGVzY3JpcHRvcjo6R2V0U291cmNlTG9jYXRp
b24oU291cmNlTG9jYXRpb24qIG91dF9sb2NhdGlvbikgY29uc3QgewotICB2ZWN0b3I8aW50PiBw
YXRoOwotICBHZXRMb2NhdGlvblBhdGgoJnBhdGgpOwotICByZXR1cm4gZmlsZSgpLT5HZXRTb3Vy
Y2VMb2NhdGlvbihwYXRoLCBvdXRfbG9jYXRpb24pOwotfQotCi1ib29sIE9uZW9mRGVzY3JpcHRv
cjo6R2V0U291cmNlTG9jYXRpb24oU291cmNlTG9jYXRpb24qIG91dF9sb2NhdGlvbikgY29uc3Qg
ewotICB2ZWN0b3I8aW50PiBwYXRoOwotICBHZXRMb2NhdGlvblBhdGgoJnBhdGgpOwotICByZXR1
cm4gY29udGFpbmluZ190eXBlKCktPmZpbGUoKS0+R2V0U291cmNlTG9jYXRpb24ocGF0aCwgb3V0
X2xvY2F0aW9uKTsKLX0KLQotYm9vbCBFbnVtRGVzY3JpcHRvcjo6R2V0U291cmNlTG9jYXRpb24o
U291cmNlTG9jYXRpb24qIG91dF9sb2NhdGlvbikgY29uc3QgewotICB2ZWN0b3I8aW50PiBwYXRo
OwotICBHZXRMb2NhdGlvblBhdGgoJnBhdGgpOwotICByZXR1cm4gZmlsZSgpLT5HZXRTb3VyY2VM
b2NhdGlvbihwYXRoLCBvdXRfbG9jYXRpb24pOwotfQotCi1ib29sIE1ldGhvZERlc2NyaXB0b3I6
OkdldFNvdXJjZUxvY2F0aW9uKFNvdXJjZUxvY2F0aW9uKiBvdXRfbG9jYXRpb24pIGNvbnN0IHsK
LSAgdmVjdG9yPGludD4gcGF0aDsKLSAgR2V0TG9jYXRpb25QYXRoKCZwYXRoKTsKLSAgcmV0dXJu
IHNlcnZpY2UoKS0+ZmlsZSgpLT5HZXRTb3VyY2VMb2NhdGlvbihwYXRoLCBvdXRfbG9jYXRpb24p
OwotfQotCi1ib29sIFNlcnZpY2VEZXNjcmlwdG9yOjpHZXRTb3VyY2VMb2NhdGlvbihTb3VyY2VM
b2NhdGlvbiogb3V0X2xvY2F0aW9uKSBjb25zdCB7Ci0gIHZlY3RvcjxpbnQ+IHBhdGg7Ci0gIEdl
dExvY2F0aW9uUGF0aCgmcGF0aCk7Ci0gIHJldHVybiBmaWxlKCktPkdldFNvdXJjZUxvY2F0aW9u
KHBhdGgsIG91dF9sb2NhdGlvbik7Ci19Ci0KLWJvb2wgRW51bVZhbHVlRGVzY3JpcHRvcjo6R2V0
U291cmNlTG9jYXRpb24oCi0gICAgU291cmNlTG9jYXRpb24qIG91dF9sb2NhdGlvbikgY29uc3Qg
ewotICB2ZWN0b3I8aW50PiBwYXRoOwotICBHZXRMb2NhdGlvblBhdGgoJnBhdGgpOwotICByZXR1
cm4gdHlwZSgpLT5maWxlKCktPkdldFNvdXJjZUxvY2F0aW9uKHBhdGgsIG91dF9sb2NhdGlvbik7
Ci19Ci0KLXZvaWQgRGVzY3JpcHRvcjo6R2V0TG9jYXRpb25QYXRoKHZlY3RvcjxpbnQ+KiBvdXRw
dXQpIGNvbnN0IHsKLSAgaWYgKGNvbnRhaW5pbmdfdHlwZSgpKSB7Ci0gICAgY29udGFpbmluZ190
eXBlKCktPkdldExvY2F0aW9uUGF0aChvdXRwdXQpOwotICAgIG91dHB1dC0+cHVzaF9iYWNrKERl
c2NyaXB0b3JQcm90bzo6a05lc3RlZFR5cGVGaWVsZE51bWJlcik7Ci0gICAgb3V0cHV0LT5wdXNo
X2JhY2soaW5kZXgoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgb3V0cHV0LT5wdXNoX2JhY2soRmlsZURl
c2NyaXB0b3JQcm90bzo6a01lc3NhZ2VUeXBlRmllbGROdW1iZXIpOwotICAgIG91dHB1dC0+cHVz
aF9iYWNrKGluZGV4KCkpOwotICB9Ci19Ci0KLXZvaWQgRmllbGREZXNjcmlwdG9yOjpHZXRMb2Nh
dGlvblBhdGgodmVjdG9yPGludD4qIG91dHB1dCkgY29uc3QgewotICBpZiAoaXNfZXh0ZW5zaW9u
KCkpIHsKLSAgICBpZiAoZXh0ZW5zaW9uX3Njb3BlKCkgPT0gTlVMTCkgewotICAgICAgb3V0cHV0
LT5wdXNoX2JhY2soRmlsZURlc2NyaXB0b3JQcm90bzo6a0V4dGVuc2lvbkZpZWxkTnVtYmVyKTsK
LSAgICAgIG91dHB1dC0+cHVzaF9iYWNrKGluZGV4KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBl
eHRlbnNpb25fc2NvcGUoKS0+R2V0TG9jYXRpb25QYXRoKG91dHB1dCk7Ci0gICAgICBvdXRwdXQt
PnB1c2hfYmFjayhEZXNjcmlwdG9yUHJvdG86OmtFeHRlbnNpb25GaWVsZE51bWJlcik7Ci0gICAg
ICBvdXRwdXQtPnB1c2hfYmFjayhpbmRleCgpKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgY29u
dGFpbmluZ190eXBlKCktPkdldExvY2F0aW9uUGF0aChvdXRwdXQpOwotICAgIG91dHB1dC0+cHVz
aF9iYWNrKERlc2NyaXB0b3JQcm90bzo6a0ZpZWxkRmllbGROdW1iZXIpOwotICAgIG91dHB1dC0+
cHVzaF9iYWNrKGluZGV4KCkpOwotICB9Ci19Ci0KLXZvaWQgT25lb2ZEZXNjcmlwdG9yOjpHZXRM
b2NhdGlvblBhdGgodmVjdG9yPGludD4qIG91dHB1dCkgY29uc3QgewotICBjb250YWluaW5nX3R5
cGUoKS0+R2V0TG9jYXRpb25QYXRoKG91dHB1dCk7Ci0gIG91dHB1dC0+cHVzaF9iYWNrKERlc2Ny
aXB0b3JQcm90bzo6a09uZW9mRGVjbEZpZWxkTnVtYmVyKTsKLSAgb3V0cHV0LT5wdXNoX2JhY2so
aW5kZXgoKSk7Ci19Ci0KLXZvaWQgRW51bURlc2NyaXB0b3I6OkdldExvY2F0aW9uUGF0aCh2ZWN0
b3I8aW50Piogb3V0cHV0KSBjb25zdCB7Ci0gIGlmIChjb250YWluaW5nX3R5cGUoKSkgewotICAg
IGNvbnRhaW5pbmdfdHlwZSgpLT5HZXRMb2NhdGlvblBhdGgob3V0cHV0KTsKLSAgICBvdXRwdXQt
PnB1c2hfYmFjayhEZXNjcmlwdG9yUHJvdG86OmtFbnVtVHlwZUZpZWxkTnVtYmVyKTsKLSAgICBv
dXRwdXQtPnB1c2hfYmFjayhpbmRleCgpKTsKLSAgfSBlbHNlIHsKLSAgICBvdXRwdXQtPnB1c2hf
YmFjayhGaWxlRGVzY3JpcHRvclByb3RvOjprRW51bVR5cGVGaWVsZE51bWJlcik7Ci0gICAgb3V0
cHV0LT5wdXNoX2JhY2soaW5kZXgoKSk7Ci0gIH0KLX0KLQotdm9pZCBFbnVtVmFsdWVEZXNjcmlw
dG9yOjpHZXRMb2NhdGlvblBhdGgodmVjdG9yPGludD4qIG91dHB1dCkgY29uc3QgewotICB0eXBl
KCktPkdldExvY2F0aW9uUGF0aChvdXRwdXQpOwotICBvdXRwdXQtPnB1c2hfYmFjayhFbnVtRGVz
Y3JpcHRvclByb3RvOjprVmFsdWVGaWVsZE51bWJlcik7Ci0gIG91dHB1dC0+cHVzaF9iYWNrKGlu
ZGV4KCkpOwotfQotCi12b2lkIFNlcnZpY2VEZXNjcmlwdG9yOjpHZXRMb2NhdGlvblBhdGgodmVj
dG9yPGludD4qIG91dHB1dCkgY29uc3QgewotICBvdXRwdXQtPnB1c2hfYmFjayhGaWxlRGVzY3Jp
cHRvclByb3RvOjprU2VydmljZUZpZWxkTnVtYmVyKTsKLSAgb3V0cHV0LT5wdXNoX2JhY2soaW5k
ZXgoKSk7Ci19Ci0KLXZvaWQgTWV0aG9kRGVzY3JpcHRvcjo6R2V0TG9jYXRpb25QYXRoKHZlY3Rv
cjxpbnQ+KiBvdXRwdXQpIGNvbnN0IHsKLSAgc2VydmljZSgpLT5HZXRMb2NhdGlvblBhdGgob3V0
cHV0KTsKLSAgb3V0cHV0LT5wdXNoX2JhY2soU2VydmljZURlc2NyaXB0b3JQcm90bzo6a01ldGhv
ZEZpZWxkTnVtYmVyKTsKLSAgb3V0cHV0LT5wdXNoX2JhY2soaW5kZXgoKSk7Ci19Ci0KLS8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLQotbmFtZXNwYWNlIHsKLQotLy8gUmVwcmVzZW50cyBhbiBvcHRpb25zIG1lc3Nh
Z2UgdG8gaW50ZXJwcmV0LiBFeHRlbnNpb24gbmFtZXMgaW4gdGhlIG9wdGlvbgotLy8gbmFtZSBh
cmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8gbmFtZV9zY29wZS4gZWxlbWVudF9uYW1lIGFuZCBvcmln
X29wdCBhcmUKLS8vIHVzZWQgb25seSBmb3IgZXJyb3IgcmVwb3J0aW5nIChzaW5jZSB0aGUgcGFy
c2VyIHJlY29yZHMgbG9jYXRpb25zIGFnYWluc3QKLS8vIHBvaW50ZXJzIGluIHRoZSBvcmlnaW5h
bCBvcHRpb25zLCBub3QgdGhlIG11dGFibGUgY29weSkuIFRoZSBNZXNzYWdlIG11c3QgYmUKLS8v
IG9uZSBvZiB0aGUgT3B0aW9ucyBtZXNzYWdlcyBpbiBkZXNjcmlwdG9yLnByb3RvLgotc3RydWN0
IE9wdGlvbnNUb0ludGVycHJldCB7Ci0gIE9wdGlvbnNUb0ludGVycHJldChjb25zdCBzdHJpbmcm
IG5zLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBlbCwKLSAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE1lc3NhZ2UqIG9yaWdfb3B0LAotICAgICAgICAgICAgICAgICAgICAg
TWVzc2FnZSogb3B0KQotICAgICAgOiBuYW1lX3Njb3BlKG5zKSwKLSAgICAgICAgZWxlbWVudF9u
YW1lKGVsKSwKLSAgICAgICAgb3JpZ2luYWxfb3B0aW9ucyhvcmlnX29wdCksCi0gICAgICAgIG9w
dGlvbnMob3B0KSB7Ci0gIH0KLSAgc3RyaW5nIG5hbWVfc2NvcGU7Ci0gIHN0cmluZyBlbGVtZW50
X25hbWU7Ci0gIGNvbnN0IE1lc3NhZ2UqIG9yaWdpbmFsX29wdGlvbnM7Ci0gIE1lc3NhZ2UqIG9w
dGlvbnM7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UKLQotY2xhc3MgRGVzY3JpcHRvckJ1aWxkZXIg
ewotIHB1YmxpYzoKLSAgRGVzY3JpcHRvckJ1aWxkZXIoY29uc3QgRGVzY3JpcHRvclBvb2wqIHBv
b2wsCi0gICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpUYWJsZXMqIHRhYmxlcywK
LSAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yKiBlcnJv
cl9jb2xsZWN0b3IpOwotICB+RGVzY3JpcHRvckJ1aWxkZXIoKTsKLQotICBjb25zdCBGaWxlRGVz
Y3JpcHRvciogQnVpbGRGaWxlKGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3RvKTsKLQot
IHByaXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyBPcHRpb25JbnRlcnByZXRlcjsKLQotICAvLyBOb24t
cmVjdXJzaXZlIHBhcnQgb2YgQnVpbGRGaWxlIGZ1bmN0aW9uYWxpdHkuCi0gIGNvbnN0IEZpbGVE
ZXNjcmlwdG9yKiBCdWlsZEZpbGVJbXBsKGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3Rv
KTsKLQotICBjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbF87Ci0gIERlc2NyaXB0b3JQb29sOjpU
YWJsZXMqIHRhYmxlc187ICAvLyBmb3IgY29udmVuaWVuY2UKLSAgRGVzY3JpcHRvclBvb2w6OkVy
cm9yQ29sbGVjdG9yKiBlcnJvcl9jb2xsZWN0b3JfOwotCi0gIC8vIEFzIHdlIGJ1aWxkIGRlc2Ny
aXB0b3JzIHdlIHN0b3JlIGNvcGllcyBvZiB0aGUgb3B0aW9ucyBtZXNzYWdlcyBpbgotICAvLyB0
aGVtLiBXZSBwdXQgcG9pbnRlcnMgdG8gdGhvc2UgY29waWVzIGluIHRoaXMgdmVjdG9yLCBhcyB3
ZSBidWlsZCwgc28gd2UKLSAgLy8gY2FuIGxhdGVyIChhZnRlciBjcm9zcy1saW5raW5nKSBpbnRl
cnByZXQgdGhvc2Ugb3B0aW9ucy4KLSAgdmVjdG9yPE9wdGlvbnNUb0ludGVycHJldD4gb3B0aW9u
c190b19pbnRlcnByZXRfOwotCi0gIGJvb2wgaGFkX2Vycm9yc187Ci0gIHN0cmluZyBmaWxlbmFt
ZV87Ci0gIEZpbGVEZXNjcmlwdG9yKiBmaWxlXzsKLSAgRmlsZURlc2NyaXB0b3JUYWJsZXMqIGZp
bGVfdGFibGVzXzsKLSAgc2V0PGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4gZGVwZW5kZW5jaWVzXzsK
LQotICAvLyB1bnVzZWRfZGVwZW5kZW5jeV8gaXMgdXNlZCB0byByZWNvcmQgdGhlIHVudXNlZCBp
bXBvcnRlZCBmaWxlcy4KLSAgLy8gTm90ZTogcHVibGljIGltcG9ydCBpcyBub3QgY29uc2lkZXJl
ZC4KLSAgc2V0PGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4gdW51c2VkX2RlcGVuZGVuY3lfOwotCi0g
IC8vIElmIExvb2t1cFN5bWJvbCgpIGZpbmRzIGEgc3ltYm9sIHRoYXQgaXMgaW4gYSBmaWxlIHdo
aWNoIGlzIG5vdCBhIGRlY2xhcmVkCi0gIC8vIGRlcGVuZGVuY3kgb2YgdGhpcyBmaWxlLCBpdCB3
aWxsIGZhaWwsIGJ1dCB3aWxsIHNldAotICAvLyBwb3NzaWJsZV91bmRlY2xhcmVkX2RlcGVuZGVu
Y3lfIHRvIHBvaW50IGF0IHRoYXQgZmlsZS4gIFRoaXMgaXMgb25seSB1c2VkCi0gIC8vIGJ5IEFk
ZE5vdERlZmluZWRFcnJvcigpIHRvIHJlcG9ydCBhIG1vcmUgdXNlZnVsIGVycm9yIG1lc3NhZ2Uu
Ci0gIC8vIHBvc3NpYmxlX3VuZGVjbGFyZWRfZGVwZW5kZW5jeV9uYW1lXyBpcyB0aGUgbmFtZSBv
ZiB0aGUgc3ltYm9sIHRoYXQgd2FzCi0gIC8vIGFjdHVhbGx5IGZvdW5kIGluIHBvc3NpYmxlX3Vu
ZGVjbGFyZWRfZGVwZW5kZW5jeV8sIHdoaWNoIG1heSBiZSBhIHBhcmVudAotICAvLyBvZiB0aGUg
c3ltYm9sIGFjdHVhbGx5IGxvb2tlZCBmb3IuCi0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBwb3Nz
aWJsZV91bmRlY2xhcmVkX2RlcGVuZGVuY3lfOwotICBzdHJpbmcgcG9zc2libGVfdW5kZWNsYXJl
ZF9kZXBlbmRlbmN5X25hbWVfOwotCi0gIC8vIElmIExvb2t1cFN5bWJvbCgpIGNvdWxkIHJlc29s
dmUgYSBzeW1ib2wgd2hpY2ggaXMgbm90IGRlZmluZWQsCi0gIC8vIHJlY29yZCB0aGUgcmVzb2x2
ZWQgbmFtZS4gIFRoaXMgaXMgb25seSB1c2VkIGJ5IEFkZE5vdERlZmluZWRFcnJvcigpCi0gIC8v
IHRvIHJlcG9ydCBhIG1vcmUgdXNlZnVsIGVycm9yIG1lc3NhZ2UuCi0gIHN0cmluZyB1bmRlZmlu
ZV9yZXNvbHZlZF9uYW1lXzsKLQotICB2b2lkIEFkZEVycm9yKGNvbnN0IHN0cmluZyYgZWxlbWVu
dF9uYW1lLAotICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIGRlc2NyaXB0b3IsCi0gICAg
ICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpFcnJvckxvY2F0aW9u
IGxvY2F0aW9uLAotICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZXJyb3IpOwotICB2b2lk
IEFkZEVycm9yKGNvbnN0IHN0cmluZyYgZWxlbWVudF9uYW1lLAotICAgICAgICAgICAgICAgIGNv
bnN0IE1lc3NhZ2UmIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6
OkVycm9yQ29sbGVjdG9yOjpFcnJvckxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGVycm9yKTsKLSAgdm9pZCBBZGRSZWN1cnNpdmVJbXBvcnRFcnJvcihjb25z
dCBGaWxlRGVzY3JpcHRvclByb3RvJiBwcm90bywgaW50IGZyb21faGVyZSk7Ci0gIHZvaWQgQWRk
VHdpY2VMaXN0ZWRFcnJvcihjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBwcm90bywgaW50IGlu
ZGV4KTsKLSAgdm9pZCBBZGRJbXBvcnRFcnJvcihjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBw
cm90bywgaW50IGluZGV4KTsKLQotICAvLyBBZGRzIGFuIGVycm9yIGluZGljYXRpbmcgdGhhdCB1
bmRlZmluZWRfc3ltYm9sIHdhcyBub3QgZGVmaW5lZC4gIE11c3QKLSAgLy8gb25seSBiZSBjYWxs
ZWQgYWZ0ZXIgTG9va3VwU3ltYm9sKCkgZmFpbHMuCi0gIHZvaWQgQWRkTm90RGVmaW5lZEVycm9y
KAotICAgIGNvbnN0IHN0cmluZyYgZWxlbWVudF9uYW1lLAotICAgIGNvbnN0IE1lc3NhZ2UmIGRl
c2NyaXB0b3IsCi0gICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpFcnJvckxvY2F0
aW9uIGxvY2F0aW9uLAotICAgIGNvbnN0IHN0cmluZyYgdW5kZWZpbmVkX3N5bWJvbCk7Ci0KLSAg
dm9pZCBBZGRXYXJuaW5nKGNvbnN0IHN0cmluZyYgZWxlbWVudF9uYW1lLCBjb25zdCBNZXNzYWdl
JiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29s
bGVjdG9yOjpFcnJvckxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RyaW5nJiBlcnJvcik7Ci0KLSAgLy8gU2lsbHkgaGVscGVyIHdoaWNoIGRldGVybWluZXMgaWYg
dGhlIGdpdmVuIGZpbGUgaXMgaW4gdGhlIGdpdmVuIHBhY2thZ2UuCi0gIC8vIEkuZS4sIGVpdGhl
ciBmaWxlLT5wYWNrYWdlKCkgPT0gcGFja2FnZV9uYW1lIG9yIGZpbGUtPnBhY2thZ2UoKSBpcyBh
Ci0gIC8vIG5lc3RlZCBwYWNrYWdlIHdpdGhpbiBwYWNrYWdlX25hbWUuCi0gIGJvb2wgSXNJblBh
Y2thZ2UoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUsIGNvbnN0IHN0cmluZyYgcGFja2FnZV9u
YW1lKTsKLQotICAvLyBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZmluZHMgYWxsIHB1YmxpYyBkZXBl
bmRlbmNpZXMgb2YgdGhlIGdpdmVuIGZpbGUsIGFuZAotICAvLyBzdG9yZXMgdGhlIHRoZW0gaW4g
dGhlIGRlcGVuZGVuY2llc18gc2V0IGluIHRoZSBidWlsZGVyLgotICB2b2lkIFJlY29yZFB1Ymxp
Y0RlcGVuZGVuY2llcyhjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSk7Ci0KLSAgLy8gTGlrZSB0
YWJsZXNfLT5GaW5kU3ltYm9sKCksIGJ1dCBhZGRpdGlvbmFsbHk6Ci0gIC8vIC0gU2VhcmNoIHRo
ZSBwb29sJ3MgdW5kZXJsYXkgaWYgbm90IGZvdW5kIGluIHRhYmxlc18uCi0gIC8vIC0gSW5zdXJl
IHRoYXQgdGhlIHJlc3VsdGluZyBTeW1ib2wgaXMgZnJvbSBvbmUgb2YgdGhlIGZpbGUncyBkZWNs
YXJlZAotICAvLyAgIGRlcGVuZGVuY2llcy4KLSAgU3ltYm9sIEZpbmRTeW1ib2woY29uc3Qgc3Ry
aW5nJiBuYW1lKTsKLQotICAvLyBMaWtlIEZpbmRTeW1ib2woKSBidXQgZG9lcyBub3QgcmVxdWly
ZSB0aGF0IHRoZSBzeW1ib2wgaXMgaW4gb25lIG9mIHRoZQotICAvLyBmaWxlJ3MgZGVjbGFyZWQg
ZGVwZW5kZW5jaWVzLgotICBTeW1ib2wgRmluZFN5bWJvbE5vdEVuZm9yY2luZ0RlcHMoY29uc3Qg
c3RyaW5nJiBuYW1lKTsKLQotICAvLyBUaGlzIGltcGxlbWVudHMgdGhlIGJvZHkgb2YgRmluZFN5
bWJvbE5vdEVuZm9yY2luZ0RlcHMoKS4KLSAgU3ltYm9sIEZpbmRTeW1ib2xOb3RFbmZvcmNpbmdE
ZXBzSGVscGVyKGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29sLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBuYW1lKTsKLQotICAvLyBMaWtl
IEZpbmRTeW1ib2woKSwgYnV0IGxvb2tzIHVwIHRoZSBuYW1lIHJlbGF0aXZlIHRvIHNvbWUgb3Ro
ZXIgc3ltYm9sCi0gIC8vIG5hbWUuICBUaGlzIGZpcnN0IHNlYXJjaGVzIHNpYmxpbmdzIG9mIHJl
bGF0aXZlX3RvLCB0aGVuIHNpYmxpbmdzIG9mIGl0cwotICAvLyBwYXJlbnRzLCBldGMuICBGb3Ig
ZXhhbXBsZSwgTG9va3VwU3ltYm9sKCJmb28uYmFyIiwgImJhei5xdXguY29yZ2UiKSBtYWtlcwot
ICAvLyB0aGUgZm9sbG93aW5nIGNhbGxzLCByZXR1cm5pbmcgdGhlIGZpcnN0IG5vbi1udWxsIHJl
c3VsdDoKLSAgLy8gRmluZFN5bWJvbCgiYmF6LnF1eC5mb28uYmFyIiksIEZpbmRTeW1ib2woImJh
ei5mb28uYmFyIiksCi0gIC8vIEZpbmRTeW1ib2woImZvby5iYXIiKS4gIElmIEFsbG93VW5rbm93
bkRlcGVuZGVuY2llcygpIGhhcyBiZWVuIGNhbGxlZAotICAvLyBvbiB0aGUgRGVzY3JpcHRvclBv
b2wsIHRoaXMgd2lsbCBnZW5lcmF0ZSBhIHBsYWNlaG9sZGVyIHR5cGUgaWYKLSAgLy8gdGhlIG5h
bWUgaXMgbm90IGZvdW5kICh1bmxlc3MgdGhlIG5hbWUgaXRzZWxmIGlzIG1hbGZvcm1lZCkuICBU
aGUKLSAgLy8gcGxhY2Vob2xkZXJfdHlwZSBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoYXQga2luZCBv
ZiBwbGFjZWhvbGRlciBzaG91bGQgYmUKLSAgLy8gY29uc3RydWN0ZWQgaW4gdGhpcyBjYXNlLiAg
VGhlIHJlc29sdmVfbW9kZSBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGV0aGVyCi0gIC8vIGFueSBz
eW1ib2wgaXMgcmV0dXJuZWQsIG9yIG9ubHkgc3ltYm9scyB0aGF0IGFyZSB0eXBlcy4gIE5vdGUs
IGhvd2V2ZXIsCi0gIC8vIHRoYXQgTG9va3VwU3ltYm9sIG1heSBzdGlsbCByZXR1cm4gYSBub24t
dHlwZSBzeW1ib2wgaW4gTE9PS1VQX1RZUEVTIG1vZGUsCi0gIC8vIGlmIGl0IGJlbGlldmVzIHRo
YXQncyBhbGwgaXQgY291bGQgcmVmZXIgdG8uICBUaGUgY2FsbGVyIHNob3VsZCBhbHdheXMKLSAg
Ly8gY2hlY2sgdGhhdCBpdCByZWNlaXZlcyB0aGUgdHlwZSBvZiBzeW1ib2wgaXQgd2FzIGV4cGVj
dGluZy4KLSAgZW51bSBQbGFjZWhvbGRlclR5cGUgewotICAgIFBMQUNFSE9MREVSX01FU1NBR0Us
Ci0gICAgUExBQ0VIT0xERVJfRU5VTSwKLSAgICBQTEFDRUhPTERFUl9FWFRFTkRBQkxFX01FU1NB
R0UKLSAgfTsKLSAgZW51bSBSZXNvbHZlTW9kZSB7Ci0gICAgTE9PS1VQX0FMTCwgTE9PS1VQX1RZ
UEVTCi0gIH07Ci0gIFN5bWJvbCBMb29rdXBTeW1ib2woY29uc3Qgc3RyaW5nJiBuYW1lLCBjb25z
dCBzdHJpbmcmIHJlbGF0aXZlX3RvLAotICAgICAgICAgICAgICAgICAgICAgIFBsYWNlaG9sZGVy
VHlwZSBwbGFjZWhvbGRlcl90eXBlID0gUExBQ0VIT0xERVJfTUVTU0FHRSwKLSAgICAgICAgICAg
ICAgICAgICAgICBSZXNvbHZlTW9kZSByZXNvbHZlX21vZGUgPSBMT09LVVBfQUxMKTsKLQotICAv
LyBMaWtlIExvb2t1cFN5bWJvbCgpIGJ1dCB3aWxsIG5vdCByZXR1cm4gYSBwbGFjZWhvbGRlciBl
dmVuIGlmCi0gIC8vIEFsbG93VW5rbm93bkRlcGVuZGVuY2llcygpIGhhcyBiZWVuIHVzZWQuCi0g
IFN5bWJvbCBMb29rdXBTeW1ib2xOb1BsYWNlaG9sZGVyKGNvbnN0IHN0cmluZyYgbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiByZWxhdGl2ZV90
bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZU1vZGUgcmVzb2x2
ZV9tb2RlID0gTE9PS1VQX0FMTCk7Ci0KLSAgLy8gQ3JlYXRlcyBhIHBsYWNlaG9sZGVyIHR5cGUg
c3VpdGFibGUgZm9yIHJldHVybiBmcm9tIExvb2t1cFN5bWJvbCgpLiAgTWF5Ci0gIC8vIHJldHVy
biBrTnVsbFN5bWJvbCBpZiB0aGUgbmFtZSBpcyBub3QgYSB2YWxpZCB0eXBlIG5hbWUuCi0gIFN5
bWJvbCBOZXdQbGFjZWhvbGRlcihjb25zdCBzdHJpbmcmIG5hbWUsIFBsYWNlaG9sZGVyVHlwZSBw
bGFjZWhvbGRlcl90eXBlKTsKLQotICAvLyBDcmVhdGVzIGEgcGxhY2Vob2xkZXIgZmlsZS4gIE5l
dmVyIHJldHVybnMgTlVMTC4gIFRoaXMgaXMgdXNlZCB3aGVuIGFuCi0gIC8vIGltcG9ydCBpcyBu
b3QgZm91bmQgYW5kIEFsbG93VW5rbm93bkRlcGVuZGVuY2llcygpIGlzIGVuYWJsZWQuCi0gIEZp
bGVEZXNjcmlwdG9yKiBOZXdQbGFjZWhvbGRlckZpbGUoY29uc3Qgc3RyaW5nJiBuYW1lKTsKLQot
ICAvLyBDYWxscyB0YWJsZXNfLT5BZGRTeW1ib2woKSBhbmQgcmVjb3JkcyBhbiBlcnJvciBpZiBp
dCBmYWlscy4gIFJldHVybnMKLSAgLy8gdHJ1ZSBpZiBzdWNjZXNzZnVsIG9yIGZhbHNlIGlmIGZh
aWxlZCwgdGhvdWdoIG1vc3QgY2FsbGVycyBjYW4gaWdub3JlCi0gIC8vIHRoZSByZXR1cm4gdmFs
dWUgc2luY2UgYW4gZXJyb3IgaGFzIGFscmVhZHkgYmVlbiByZWNvcmRlZC4KLSAgYm9vbCBBZGRT
eW1ib2woY29uc3Qgc3RyaW5nJiBmdWxsX25hbWUsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHZv
aWQqIHBhcmVudCwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICBjb25zdCBN
ZXNzYWdlJiBwcm90bywgU3ltYm9sIHN5bWJvbCk7Ci0KLSAgLy8gTGlrZSBBZGRTeW1ib2woKSwg
YnV0IHN1Y2NlZWRzIGlmIHRoZSBzeW1ib2wgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGxvbmcKLSAg
Ly8gYXMgdGhlIGV4aXN0aW5nIGRlZmluaXRpb24gaXMgYWxzbyBhIHBhY2thZ2UgKGJlY2F1c2Ug
aXQncyBPSyB0byBkZWZpbmUKLSAgLy8gdGhlIHNhbWUgcGFja2FnZSBpbiB0d28gZGlmZmVyZW50
IGZpbGVzKS4gIEFsc28gYWRkcyBhbGwgcGFyZW50cyBvZiB0aGUKLSAgLy8gcGFja2dhZSB0byB0
aGUgc3ltYm9sIHRhYmxlIChlLmcuIEFkZFBhY2thZ2UoImZvby5iYXIiLCAuLi4pIHdpbGwgYWRk
Ci0gIC8vICJmb28uYmFyIiBhbmQgImZvbyIgdG8gdGhlIHRhYmxlKS4KLSAgdm9pZCBBZGRQYWNr
YWdlKGNvbnN0IHN0cmluZyYgbmFtZSwgY29uc3QgTWVzc2FnZSYgcHJvdG8sCi0gICAgICAgICAg
ICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSk7Ci0KLSAgLy8gQ2hlY2tzIHRoYXQg
dGhlIHN5bWJvbCBuYW1lIGNvbnRhaW5zIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5k
Ci0gIC8vIHVuZGVyc2NvcmVzLiAgUmVjb3JkcyBhbiBlcnJvciBvdGhlcndpc2UuCi0gIHZvaWQg
VmFsaWRhdGVTeW1ib2xOYW1lKGNvbnN0IHN0cmluZyYgbmFtZSwgY29uc3Qgc3RyaW5nJiBmdWxs
X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIHByb3RvKTsK
LQotICAvLyBMaWtlIFZhbGlkYXRlU3ltYm9sTmFtZSgpLCBidXQgdGhlIG5hbWUgaXMgYWxsb3dl
ZCB0byBjb250YWluIHBlcmlvZHMgYW5kCi0gIC8vIGFuIGVycm9yIGlzIGluZGljYXRlZCBieSBy
ZXR1cm5pbmcgZmFsc2UgKG5vdCByZWNvcmRpbmcgdGhlIGVycm9yKS4KLSAgYm9vbCBWYWxpZGF0
ZVF1YWxpZmllZE5hbWUoY29uc3Qgc3RyaW5nJiBuYW1lKTsKLQotICAvLyBVc2VkIGJ5IEJVSUxE
X0FSUkFZIG1hY3JvIChiZWxvdykgdG8gYXZvaWQgaGF2aW5nIHRvIGhhdmUgdGhlIHR5cGUKLSAg
Ly8gc3BlY2lmaWVkIGFzIGEgbWFjcm8gcGFyYW1ldGVyLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VHlwZT4KLSAgaW5saW5lIHZvaWQgQWxsb2NhdGVBcnJheShpbnQgc2l6ZSwgVHlwZSoqIG91dHB1
dCkgewotICAgICpvdXRwdXQgPSB0YWJsZXNfLT5BbGxvY2F0ZUFycmF5PFR5cGU+KHNpemUpOwot
ICB9Ci0KLSAgLy8gQWxsb2NhdGVzIGEgY29weSBvZiBvcmlnX29wdGlvbnMgaW4gdGFibGVzXyBh
bmQgc3RvcmVzIGl0IGluIHRoZQotICAvLyBkZXNjcmlwdG9yLiBSZW1lbWJlcnMgaXRzIHVuaW50
ZXJwcmV0ZWQgb3B0aW9ucywgdG8gYmUgaW50ZXJwcmV0ZWQKLSAgLy8gbGF0ZXIuIERlc2NyaXB0
b3JUIG11c3QgYmUgb25lIG9mIHRoZSBEZXNjcmlwdG9yIG1lc3NhZ2VzIGZyb20KLSAgLy8gZGVz
Y3JpcHRvci5wcm90by4KLSAgdGVtcGxhdGU8Y2xhc3MgRGVzY3JpcHRvclQ+IHZvaWQgQWxsb2Nh
dGVPcHRpb25zKAotICAgICAgY29uc3QgdHlwZW5hbWUgRGVzY3JpcHRvclQ6Ok9wdGlvbnNUeXBl
JiBvcmlnX29wdGlvbnMsCi0gICAgICBEZXNjcmlwdG9yVCogZGVzY3JpcHRvcik7Ci0gIC8vIFNw
ZWNpYWxpemF0aW9uIGZvciBGaWxlT3B0aW9ucy4KLSAgdm9pZCBBbGxvY2F0ZU9wdGlvbnMoY29u
c3QgRmlsZU9wdGlvbnMmIG9yaWdfb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgRmls
ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotCi0gIC8vIEltcGxlbWVudGF0aW9uIGZvciBBbGxv
Y2F0ZU9wdGlvbnMoKS4gRG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LgotICB0ZW1wbGF0ZTxjbGFz
cyBEZXNjcmlwdG9yVD4gdm9pZCBBbGxvY2F0ZU9wdGlvbnNJbXBsKAotICAgICAgY29uc3Qgc3Ry
aW5nJiBuYW1lX3Njb3BlLAotICAgICAgY29uc3Qgc3RyaW5nJiBlbGVtZW50X25hbWUsCi0gICAg
ICBjb25zdCB0eXBlbmFtZSBEZXNjcmlwdG9yVDo6T3B0aW9uc1R5cGUmIG9yaWdfb3B0aW9ucywK
LSAgICAgIERlc2NyaXB0b3JUKiBkZXNjcmlwdG9yKTsKLQotICAvLyBUaGVzZSBtZXRob2RzIGFs
bCBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZSBmb3IgdGhlIHNha2Ugb2YgdGhlIEJVSUxEX0FSUkFZ
Ci0gIC8vIG1hY3JvLCBiZWxvdy4KLSAgdm9pZCBCdWlsZE1lc3NhZ2UoY29uc3QgRGVzY3JpcHRv
clByb3RvJiBwcm90bywKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogcGFy
ZW50LAotICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yKiByZXN1bHQpOwotICB2b2lkIEJ1
aWxkRmllbGRPckV4dGVuc2lvbihjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgcHJvdG8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIHBhcmVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yKiByZXN1bHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZXh0ZW5zaW9uKTsKLSAgdm9pZCBCdWls
ZEZpZWxkKGNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvJiBwcm90bywKLSAgICAgICAgICAgICAg
ICAgIGNvbnN0IERlc2NyaXB0b3IqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgIEZpZWxkRGVz
Y3JpcHRvciogcmVzdWx0KSB7Ci0gICAgQnVpbGRGaWVsZE9yRXh0ZW5zaW9uKHByb3RvLCBwYXJl
bnQsIHJlc3VsdCwgZmFsc2UpOwotICB9Ci0gIHZvaWQgQnVpbGRFeHRlbnNpb24oY29uc3QgRmll
bGREZXNjcmlwdG9yUHJvdG8mIHByb3RvLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERl
c2NyaXB0b3IqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3Iq
IHJlc3VsdCkgewotICAgIEJ1aWxkRmllbGRPckV4dGVuc2lvbihwcm90bywgcGFyZW50LCByZXN1
bHQsIHRydWUpOwotICB9Ci0gIHZvaWQgQnVpbGRFeHRlbnNpb25SYW5nZShjb25zdCBEZXNjcmlw
dG9yUHJvdG86OkV4dGVuc2lvblJhbmdlJiBwcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IERlc2NyaXB0b3IqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlKiByZXN1bHQpOwotICB2b2lkIEJ1aWxkUmVzZXJ2
ZWRSYW5nZShjb25zdCBEZXNjcmlwdG9yUHJvdG86OlJlc2VydmVkUmFuZ2UmIHByb3RvLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogcGFyZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvcjo6UmVzZXJ2ZWRSYW5nZSogcmVzdWx0KTsK
LSAgdm9pZCBCdWlsZE9uZW9mKGNvbnN0IE9uZW9mRGVzY3JpcHRvclByb3RvJiBwcm90bywKLSAg
ICAgICAgICAgICAgICAgIERlc2NyaXB0b3IqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgIE9u
ZW9mRGVzY3JpcHRvciogcmVzdWx0KTsKLSAgdm9pZCBCdWlsZEVudW0oY29uc3QgRW51bURlc2Ny
aXB0b3JQcm90byYgcHJvdG8sCi0gICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIHBh
cmVudCwKLSAgICAgICAgICAgICAgICAgRW51bURlc2NyaXB0b3IqIHJlc3VsdCk7Ci0gIHZvaWQg
QnVpbGRFbnVtVmFsdWUoY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvJiBwcm90bywKLSAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBFbnVtRGVzY3JpcHRvciogcGFyZW50LAotICAgICAg
ICAgICAgICAgICAgICAgIEVudW1WYWx1ZURlc2NyaXB0b3IqIHJlc3VsdCk7Ci0gIHZvaWQgQnVp
bGRTZXJ2aWNlKGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8mIHByb3RvLAotICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2b2lkKiBkdW1teSwKLSAgICAgICAgICAgICAgICAgICAgU2Vydmlj
ZURlc2NyaXB0b3IqIHJlc3VsdCk7Ci0gIHZvaWQgQnVpbGRNZXRob2QoY29uc3QgTWV0aG9kRGVz
Y3JpcHRvclByb3RvJiBwcm90bywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBTZXJ2aWNlRGVz
Y3JpcHRvciogcGFyZW50LAotICAgICAgICAgICAgICAgICAgIE1ldGhvZERlc2NyaXB0b3IqIHJl
c3VsdCk7Ci0KLSAgdm9pZCBMb2dVbnVzZWREZXBlbmRlbmN5KGNvbnN0IEZpbGVEZXNjcmlwdG9y
UHJvdG8mIHByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZURlc2Ny
aXB0b3IqIHJlc3VsdCk7Ci0KLSAgLy8gTXVzdCBiZSBydW4gb25seSBhZnRlciBidWlsZGluZy4K
LSAgLy8KLSAgLy8gTk9URTogT3B0aW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgZHVyaW5nIGNy
b3NzLWxpbmtpbmcsIGFzIHRoZXkKLSAgLy8gaGF2ZSBub3QgeWV0IGJlZW4gaW50ZXJwcmV0ZWQu
IERlZmVyIGFueSBoYW5kbGluZyBvZiBvcHRpb25zIHRvIHRoZQotICAvLyBWYWxpZGF0ZSpPcHRp
b25zIG1ldGhvZHMuCi0gIHZvaWQgQ3Jvc3NMaW5rRmlsZShGaWxlRGVzY3JpcHRvciogZmlsZSwg
Y29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgcHJvdG8pOwotICB2b2lkIENyb3NzTGlua01lc3Nh
Z2UoRGVzY3JpcHRvciogbWVzc2FnZSwgY29uc3QgRGVzY3JpcHRvclByb3RvJiBwcm90byk7Ci0g
IHZvaWQgQ3Jvc3NMaW5rRmllbGQoRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgcHJvdG8pOwotICB2b2lkIENy
b3NzTGlua0VudW0oRW51bURlc2NyaXB0b3IqIGVudW1fdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEVudW1EZXNjcmlwdG9yUHJvdG8mIHByb3RvKTsKLSAgdm9pZCBDcm9zc0xpbmtF
bnVtVmFsdWUoRW51bVZhbHVlRGVzY3JpcHRvciogZW51bV92YWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvJiBwcm90byk7Ci0gIHZv
aWQgQ3Jvc3NMaW5rU2VydmljZShTZXJ2aWNlRGVzY3JpcHRvciogc2VydmljZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8mIHByb3RvKTsKLSAg
dm9pZCBDcm9zc0xpbmtNZXRob2QoTWV0aG9kRGVzY3JpcHRvciogbWV0aG9kLAotICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yUHJvdG8mIHByb3RvKTsKLQotICAv
LyBNdXN0IGJlIHJ1biBvbmx5IGFmdGVyIGNyb3NzLWxpbmtpbmcuCi0gIHZvaWQgSW50ZXJwcmV0
T3B0aW9ucygpOwotCi0gIC8vIEEgaGVscGVyIGNsYXNzIGZvciBpbnRlcnByZXRpbmcgb3B0aW9u
cy4KLSAgY2xhc3MgT3B0aW9uSW50ZXJwcmV0ZXIgewotICAgcHVibGljOgotICAgIC8vIENyZWF0
ZXMgYW4gaW50ZXJwcmV0ZXIgdGhhdCBvcGVyYXRlcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcG9v
bCBvZiB0aGUKLSAgICAvLyBzcGVjaWZpZWQgYnVpbGRlciwgd2hpY2ggbXVzdCBub3QgYmUgTlVM
TC4gV2UgZG9uJ3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlCi0gICAgLy8gYnVpbGRlci4KLSAgICBl
eHBsaWNpdCBPcHRpb25JbnRlcnByZXRlcihEZXNjcmlwdG9yQnVpbGRlciogYnVpbGRlcik7Ci0K
LSAgICB+T3B0aW9uSW50ZXJwcmV0ZXIoKTsKLQotICAgIC8vIEludGVycHJldHMgdGhlIHVuaW50
ZXJwcmV0ZWQgb3B0aW9ucyBpbiB0aGUgc3BlY2lmaWVkIE9wdGlvbnMgbWVzc2FnZS4KLSAgICAv
LyBPbiBlcnJvciwgY2FsbHMgQWRkRXJyb3IoKSBvbiB0aGUgdW5kZXJseWluZyBidWlsZGVyIGFu
ZCByZXR1cm5zIGZhbHNlLgotICAgIC8vIE90aGVyd2lzZSByZXR1cm5zIHRydWUuCi0gICAgYm9v
bCBJbnRlcnByZXRPcHRpb25zKE9wdGlvbnNUb0ludGVycHJldCogb3B0aW9uc190b19pbnRlcnBy
ZXQpOwotCi0gICAgY2xhc3MgQWdncmVnYXRlT3B0aW9uRmluZGVyOwotCi0gICBwcml2YXRlOgot
ICAgIC8vIEludGVycHJldHMgdW5pbnRlcnByZXRlZF9vcHRpb25fIG9uIHRoZSBzcGVjaWZpZWQg
bWVzc2FnZSwgd2hpY2gKLSAgICAvLyBtdXN0IGJlIHRoZSBtdXRhYmxlIGNvcHkgb2YgdGhlIG9y
aWdpbmFsIG9wdGlvbnMgbWVzc2FnZSB0byB3aGljaAotICAgIC8vIHVuaW50ZXJwcmV0ZWRfb3B0
aW9uXyBiZWxvbmdzLgotICAgIGJvb2wgSW50ZXJwcmV0U2luZ2xlT3B0aW9uKE1lc3NhZ2UqIG9w
dGlvbnMpOwotCi0gICAgLy8gQWRkcyB0aGUgdW5pbnRlcnByZXRlZF9vcHRpb24gdG8gdGhlIGdp
dmVuIG9wdGlvbnMgbWVzc2FnZSB2ZXJiYXRpbS4KLSAgICAvLyBVc2VkIHdoZW4gQWxsb3dVbmtu
b3duRGVwZW5kZW5jaWVzKCkgaXMgaW4gZWZmZWN0IGFuZCB3ZSBjYW4ndCBmaW5kCi0gICAgLy8g
dGhlIG9wdGlvbidzIGRlZmluaXRpb24uCi0gICAgdm9pZCBBZGRXaXRob3V0SW50ZXJwcmV0aW5n
KGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24mIHVuaW50ZXJwcmV0ZWRfb3B0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlKiBvcHRpb25zKTsKLQotICAgIC8vIEEg
cmVjdXJzaXZlIGhlbHBlciBmdW5jdGlvbiB0aGF0IGRyaWxscyBpbnRvIHRoZSBpbnRlcm1lZGlh
dGUgZmllbGRzCi0gICAgLy8gaW4gdW5rbm93bl9maWVsZHMgdG8gY2hlY2sgaWYgZmllbGQgaW5u
ZXJtb3N0X2ZpZWxkIGlzIHNldCBvbiB0aGUKLSAgICAvLyBpbm5lcm1vc3QgbWVzc2FnZS4gUmV0
dXJucyBmYWxzZSBhbmQgc2V0cyBhbiBlcnJvciBpZiBzby4KLSAgICBib29sIEV4YW1pbmVJZk9w
dGlvbklzU2V0KAotICAgICAgICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj46OmNvbnN0
X2l0ZXJhdG9yIGludGVybWVkaWF0ZV9maWVsZHNfaXRlciwKLSAgICAgICAgdmVjdG9yPGNvbnN0
IEZpZWxkRGVzY3JpcHRvcio+Ojpjb25zdF9pdGVyYXRvciBpbnRlcm1lZGlhdGVfZmllbGRzX2Vu
ZCwKLSAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBpbm5lcm1vc3RfZmllbGQsIGNvbnN0
IHN0cmluZyYgZGVidWdfbXNnX25hbWUsCi0gICAgICAgIGNvbnN0IFVua25vd25GaWVsZFNldCYg
dW5rbm93bl9maWVsZHMpOwotCi0gICAgLy8gVmFsaWRhdGVzIHRoZSB2YWx1ZSBmb3IgdGhlIG9w
dGlvbiBmaWVsZCBvZiB0aGUgY3VycmVudGx5IGludGVycHJldGVkCi0gICAgLy8gb3B0aW9uIGFu
ZCB0aGVuIHNldHMgaXQgb24gdGhlIHVua25vd25fZmllbGQuCi0gICAgYm9vbCBTZXRPcHRpb25W
YWx1ZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIG9wdGlvbl9maWVsZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZHMpOwotCi0gICAgLy8gUGFy
c2VzIGFuIGFnZ3JlZ2F0ZSB2YWx1ZSBmb3IgYSBDUFBUWVBFX01FU1NBR0Ugb3B0aW9uIGFuZAot
ICAgIC8vIHNhdmVzIGl0IGludG8gKnVua25vd25fZmllbGRzLgotICAgIGJvb2wgU2V0QWdncmVn
YXRlT3B0aW9uKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogb3B0aW9uX2ZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZHMpOwotCi0g
ICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIHNldCBhbiBpbnQgZmllbGQgdGhlIHJpZ2h0
IHdheSwgZGVwZW5kaW5nIG9uCi0gICAgLy8gaXRzIHdpcmUgdHlwZSAoYSBzaW5nbGUgaW50IENw
cFR5cGUgY2FuIHJlcHJlc2VudCBtdWx0aXBsZSB3aXJlIHR5cGVzKS4KLSAgICB2b2lkIFNldElu
dDMyKGludCBudW1iZXIsIGludDMyIHZhbHVlLCBGaWVsZERlc2NyaXB0b3I6OlR5cGUgdHlwZSwK
LSAgICAgICAgICAgICAgICAgIFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZHMpOwotICAg
IHZvaWQgU2V0SW50NjQoaW50IG51bWJlciwgaW50NjQgdmFsdWUsIEZpZWxkRGVzY3JpcHRvcjo6
VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgVW5rbm93bkZpZWxkU2V0KiB1bmtub3duX2Zp
ZWxkcyk7Ci0gICAgdm9pZCBTZXRVSW50MzIoaW50IG51bWJlciwgdWludDMyIHZhbHVlLCBGaWVs
ZERlc2NyaXB0b3I6OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICBVbmtub3duRmllbGRT
ZXQqIHVua25vd25fZmllbGRzKTsKLSAgICB2b2lkIFNldFVJbnQ2NChpbnQgbnVtYmVyLCB1aW50
NjQgdmFsdWUsIEZpZWxkRGVzY3JpcHRvcjo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAg
IFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZHMpOwotCi0gICAgLy8gQSBoZWxwZXIgZnVu
Y3Rpb24gdGhhdCBhZGRzIGFuIGVycm9yIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gb2YgdGhl
Ci0gICAgLy8gb3B0aW9uIHdlJ3JlIGN1cnJlbnRseSBpbnRlcnByZXRpbmcsIGFuZCByZXR1cm5z
IGZhbHNlLgotICAgIGJvb2wgQWRkT3B0aW9uRXJyb3IoRGVzY3JpcHRvclBvb2w6OkVycm9yQ29s
bGVjdG9yOjpFcnJvckxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RyaW5nJiBtc2cpIHsKLSAgICAgIGJ1aWxkZXJfLT5BZGRFcnJvcihvcHRpb25zX3Rv
X2ludGVycHJldF8tPmVsZW1lbnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAqdW5p
bnRlcnByZXRlZF9vcHRpb25fLCBsb2NhdGlvbiwgbXNnKTsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLyBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IGFkZHMgYW4gZXJyb3IgYXQg
dGhlIGxvY2F0aW9uIG9mIHRoZSBvcHRpb24gbmFtZQotICAgIC8vIGFuZCByZXR1cm5zIGZhbHNl
LgotICAgIGJvb2wgQWRkTmFtZUVycm9yKGNvbnN0IHN0cmluZyYgbXNnKSB7Ci0gICAgICByZXR1
cm4gQWRkT3B0aW9uRXJyb3IoRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpPUFRJT05f
TkFNRSwgbXNnKTsKLSAgICB9Ci0KLSAgICAvLyBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IGFkZHMg
YW4gZXJyb3IgYXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBvcHRpb24gbmFtZQotICAgIC8vIGFuZCBy
ZXR1cm5zIGZhbHNlLgotICAgIGJvb2wgQWRkVmFsdWVFcnJvcihjb25zdCBzdHJpbmcmIG1zZykg
ewotICAgICAgcmV0dXJuIEFkZE9wdGlvbkVycm9yKERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxl
Y3Rvcjo6T1BUSU9OX1ZBTFVFLCBtc2cpOwotICAgIH0KLQotICAgIC8vIFdlIGludGVycHJldCBh
Z2FpbnN0IHRoaXMgYnVpbGRlcidzIHBvb2wuIElzIG5ldmVyIE5VTEwuIFdlIGRvbid0IG93bgot
ICAgIC8vIHRoaXMgcG9pbnRlci4KLSAgICBEZXNjcmlwdG9yQnVpbGRlciogYnVpbGRlcl87Ci0K
LSAgICAvLyBUaGUgb3B0aW9ucyB3ZSdyZSBjdXJyZW50bHkgaW50ZXJwcmV0aW5nLCBvciBOVUxM
IGlmIHdlJ3JlIG5vdCBpbiBhIGNhbGwKLSAgICAvLyB0byBJbnRlcnByZXRPcHRpb25zLgotICAg
IGNvbnN0IE9wdGlvbnNUb0ludGVycHJldCogb3B0aW9uc190b19pbnRlcnByZXRfOwotCi0gICAg
Ly8gVGhlIG9wdGlvbiB3ZSdyZSBjdXJyZW50bHkgaW50ZXJwcmV0aW5nIHdpdGhpbiBvcHRpb25z
X3RvX2ludGVycHJldF8sIG9yCi0gICAgLy8gTlVMTCBpZiB3ZSdyZSBub3QgaW4gYSBjYWxsIHRv
IEludGVycHJldE9wdGlvbnMoKS4gVGhpcyBwb2ludHMgdG8gYQotICAgIC8vIHN1Ym1lc3NhZ2Ug
b2YgdGhlIG9yaWdpbmFsIG9wdGlvbiwgbm90IHRoZSBtdXRhYmxlIGNvcHkuIFRoZXJlZm9yZSB3
ZQotICAgIC8vIGNhbiB1c2UgaXQgdG8gZmluZCBsb2NhdGlvbnMgcmVjb3JkZWQgYnkgdGhlIHBh
cnNlci4KLSAgICBjb25zdCBVbmludGVycHJldGVkT3B0aW9uKiB1bmludGVycHJldGVkX29wdGlv
bl87Ci0KLSAgICAvLyBGYWN0b3J5IHVzZWQgdG8gY3JlYXRlIHRoZSBkeW5hbWljIG1lc3NhZ2Vz
IHdlIG5lZWQgdG8gcGFyc2UKLSAgICAvLyBhbnkgYWdncmVnYXRlIG9wdGlvbiB2YWx1ZXMgd2Ug
ZW5jb3VudGVyLgotICAgIER5bmFtaWNNZXNzYWdlRmFjdG9yeSBkeW5hbWljX2ZhY3RvcnlfOwot
Ci0gICAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE9wdGlvbkludGVycHJldGVy
KTsKLSAgfTsKLQotICAvLyBXb3JrLWFyb3VuZCBmb3IgYnJva2VuIGNvbXBpbGVyczogIEFjY29y
ZGluZyB0byB0aGUgQysrIHN0YW5kYXJkLAotICAvLyBPcHRpb25JbnRlcnByZXRlciBzaG91bGQg
aGF2ZSBhY2Nlc3MgdG8gdGhlIHByaXZhdGUgbWVtYmVycyBvZiBhbnkgY2xhc3MKLSAgLy8gd2hp
Y2ggaGFzIGRlY2xhcmVkIERlc2NyaXB0b3JCdWlsZGVyIGFzIGEgZnJpZW5kLiAgVW5mb3J0dW5h
dGVseSBzb21lIG9sZAotICAvLyB2ZXJzaW9ucyBvZiBHQ0MgYW5kIG90aGVyIGNvbXBpbGVycyBk
byBub3QgaW1wbGVtZW50IHRoaXMgY29ycmVjdGx5LiAgU28sCi0gIC8vIHdlIGhhdmUgdG8gaGF2
ZSB0aGVzZSBpbnRlcm1lZGlhdGUgbWV0aG9kcyB0byBwcm92aWRlIGFjY2Vzcy4gIFdlIGFsc28K
LSAgLy8gcmVkdW5kYW50bHkgZGVjbGFyZSBPcHRpb25JbnRlcnByZXRlciBhIGZyaWVuZCBqdXN0
IHRvIG1ha2UgdGhpbmdzIGV4dHJhCi0gIC8vIGNsZWFyIGZvciB0aGVzZSBiYWQgY29tcGlsZXJz
LgotICBmcmllbmQgY2xhc3MgT3B0aW9uSW50ZXJwcmV0ZXI7Ci0gIGZyaWVuZCBjbGFzcyBPcHRp
b25JbnRlcnByZXRlcjo6QWdncmVnYXRlT3B0aW9uRmluZGVyOwotCi0gIHN0YXRpYyBpbmxpbmUg
Ym9vbCBnZXRfYWxsb3dfdW5rbm93bihjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbCkgewotICAg
IHJldHVybiBwb29sLT5hbGxvd191bmtub3duXzsKLSAgfQotICBzdGF0aWMgaW5saW5lIGJvb2wg
Z2V0X2VuZm9yY2Vfd2Vhayhjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbCkgewotICAgIHJldHVy
biBwb29sLT5lbmZvcmNlX3dlYWtfOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBnZXRfaXNf
cGxhY2Vob2xkZXIoY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICAgIHJldHVybiBk
ZXNjcmlwdG9yLT5pc19wbGFjZWhvbGRlcl87Ci0gIH0KLSAgc3RhdGljIGlubGluZSB2b2lkIGFz
c2VydF9tdXRleF9oZWxkKGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29sKSB7Ci0gICAgaWYgKHBv
b2wtPm11dGV4XyAhPSBOVUxMKSB7Ci0gICAgICBwb29sLT5tdXRleF8tPkFzc2VydEhlbGQoKTsK
LSAgICB9Ci0gIH0KLQotICAvLyBNdXN0IGJlIHJ1biBvbmx5IGFmdGVyIG9wdGlvbnMgaGF2ZSBi
ZWVuIGludGVycHJldGVkLgotICAvLwotICAvLyBOT1RFOiBWYWxpZGF0aW9uIGNvZGUgbXVzdCBv
bmx5IHJlZmVyZW5jZSB0aGUgb3B0aW9ucyBpbiB0aGUgbXV0YWJsZQotICAvLyBkZXNjcmlwdG9y
cywgd2hpY2ggYXJlIHRoZSBvbmVzIHRoYXQgaGF2ZSBiZWVuIGludGVycHJldGVkLiBUaGUgY29u
c3QKLSAgLy8gcHJvdG8gcmVmZXJlbmNlcyBhcmUgcGFzc2VkIGluIG9ubHkgc28gdGhleSBjYW4g
YmUgcHJvdmlkZWQgdG8gY2FsbHMgdG8KLSAgLy8gQWRkRXJyb3IoKS4gRG8gbm90IGxvb2sgYXQg
dGhlaXIgb3B0aW9ucywgd2hpY2ggaGF2ZSBub3QgYmVlbiBpbnRlcnByZXRlZC4KLSAgdm9pZCBW
YWxpZGF0ZUZpbGVPcHRpb25zKEZpbGVEZXNjcmlwdG9yKiBmaWxlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgcHJvdG8pOwotICB2b2lkIFZh
bGlkYXRlTWVzc2FnZU9wdGlvbnMoRGVzY3JpcHRvciogbWVzc2FnZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3JQcm90byYgcHJvdG8pOwotICB2b2lkIFZh
bGlkYXRlRmllbGRPcHRpb25zKEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8mIHByb3RvKTsKLSAgdm9p
ZCBWYWxpZGF0ZUVudW1PcHRpb25zKEVudW1EZXNjcmlwdG9yKiBlbm0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBFbnVtRGVzY3JpcHRvclByb3RvJiBwcm90byk7Ci0gIHZvaWQg
VmFsaWRhdGVFbnVtVmFsdWVPcHRpb25zKEVudW1WYWx1ZURlc2NyaXB0b3IqIGVudW1fdmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0
b3JQcm90byYgcHJvdG8pOwotICB2b2lkIFZhbGlkYXRlU2VydmljZU9wdGlvbnMoU2VydmljZURl
c2NyaXB0b3IqIHNlcnZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
ZXJ2aWNlRGVzY3JpcHRvclByb3RvJiBwcm90byk7Ci0gIHZvaWQgVmFsaWRhdGVNZXRob2RPcHRp
b25zKE1ldGhvZERlc2NyaXB0b3IqIG1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTWV0aG9kRGVzY3JpcHRvclByb3RvJiBwcm90byk7Ci0gIHZvaWQgVmFsaWRhdGVQ
cm90bzMoRmlsZURlc2NyaXB0b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmlsZURlc2NyaXB0b3JQcm90byYgcHJvdG8pOwotICB2b2lkIFZhbGlkYXRlUHJvdG8zTWVzc2Fn
ZShEZXNjcmlwdG9yKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBEZXNjcmlwdG9yUHJvdG8mIHByb3RvKTsKLSAgdm9pZCBWYWxpZGF0ZVByb3RvM0ZpZWxkKEZp
ZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3JQcm90byYgcHJvdG8pOwotICB2b2lkIFZhbGlkYXRlUHJvdG8zRW51bShF
bnVtRGVzY3JpcHRvciogZW5tLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFbnVt
RGVzY3JpcHRvclByb3RvJiBwcm90byk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBtYXAg
ZW50cnkgbWVzc2FnZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlCi0gIC8vIGF1dG8tZ2VuZXJhdGVk
IGVudHJ5IG1lc3NhZ2UgZnJvbSBtYXAgZmllbGRzIHN5bnRheC4KLSAgYm9vbCBWYWxpZGF0ZU1h
cEVudHJ5KEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgcHJvdG8pOwotCi0gIC8vIFJlY3Vyc2l2ZWx5IGRl
dGVjdHMgbmFtaW5nIGNvbmZsaWN0cyB3aXRoIG1hcCBlbnRyeSB0eXBlcyBmb3IgYQotICAvLyBi
ZXR0ZXIgZXJyb3IgbWVzc2FnZS4KLSAgdm9pZCBEZXRlY3RNYXBDb25mbGljdHMoY29uc3QgRGVz
Y3JpcHRvciogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3Jp
cHRvclByb3RvJiBwcm90byk7Ci0KLX07Ci0KLWNvbnN0IEZpbGVEZXNjcmlwdG9yKiBEZXNjcmlw
dG9yUG9vbDo6QnVpbGRGaWxlKAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3Rv
KSB7Ci0gIEdPT0dMRV9DSEVDSyhmYWxsYmFja19kYXRhYmFzZV8gPT0gTlVMTCkKLSAgICA8PCAi
Q2Fubm90IGNhbGwgQnVpbGRGaWxlIG9uIGEgRGVzY3JpcHRvclBvb2wgdGhhdCB1c2VzIGEgIgot
ICAgICAgICJEZXNjcmlwdG9yRGF0YWJhc2UuICBZb3UgbXVzdCBpbnN0ZWFkIGZpbmQgYSB3YXkg
dG8gZ2V0IHlvdXIgZmlsZSAiCi0gICAgICAgImludG8gdGhlIHVuZGVybHlpbmcgZGF0YWJhc2Uu
IjsKLSAgR09PR0xFX0NIRUNLKG11dGV4XyA9PSBOVUxMKTsgICAvLyBJbXBsaWVkIGJ5IHRoZSBh
Ym92ZSBHT09HTEVfQ0hFQ0suCi0gIHRhYmxlc18tPmtub3duX2JhZF9zeW1ib2xzXy5jbGVhcigp
OwotICB0YWJsZXNfLT5rbm93bl9iYWRfZmlsZXNfLmNsZWFyKCk7Ci0gIHJldHVybiBEZXNjcmlw
dG9yQnVpbGRlcih0aGlzLCB0YWJsZXNfLmdldCgpLCBOVUxMKS5CdWlsZEZpbGUocHJvdG8pOwot
fQotCi1jb25zdCBGaWxlRGVzY3JpcHRvciogRGVzY3JpcHRvclBvb2w6OkJ1aWxkRmlsZUNvbGxl
Y3RpbmdFcnJvcnMoCi0gICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgcHJvdG8sCi0gICAg
RXJyb3JDb2xsZWN0b3IqIGVycm9yX2NvbGxlY3RvcikgewotICBHT09HTEVfQ0hFQ0soZmFsbGJh
Y2tfZGF0YWJhc2VfID09IE5VTEwpCi0gICAgPDwgIkNhbm5vdCBjYWxsIEJ1aWxkRmlsZSBvbiBh
IERlc2NyaXB0b3JQb29sIHRoYXQgdXNlcyBhICIKLSAgICAgICAiRGVzY3JpcHRvckRhdGFiYXNl
LiAgWW91IG11c3QgaW5zdGVhZCBmaW5kIGEgd2F5IHRvIGdldCB5b3VyIGZpbGUgIgotICAgICAg
ICJpbnRvIHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlLiI7Ci0gIEdPT0dMRV9DSEVDSyhtdXRleF8g
PT0gTlVMTCk7ICAgLy8gSW1wbGllZCBieSB0aGUgYWJvdmUgR09PR0xFX0NIRUNLLgotICB0YWJs
ZXNfLT5rbm93bl9iYWRfc3ltYm9sc18uY2xlYXIoKTsKLSAgdGFibGVzXy0+a25vd25fYmFkX2Zp
bGVzXy5jbGVhcigpOwotICByZXR1cm4gRGVzY3JpcHRvckJ1aWxkZXIodGhpcywgdGFibGVzXy5n
ZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvbGxlY3RvcikuQnVpbGRG
aWxlKHByb3RvKTsKLX0KLQotY29uc3QgRmlsZURlc2NyaXB0b3IqIERlc2NyaXB0b3JQb29sOjpC
dWlsZEZpbGVGcm9tRGF0YWJhc2UoCi0gICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgcHJv
dG8pIGNvbnN0IHsKLSAgbXV0ZXhfLT5Bc3NlcnRIZWxkKCk7Ci0gIGlmICh0YWJsZXNfLT5rbm93
bl9iYWRfZmlsZXNfLmNvdW50KHByb3RvLm5hbWUoKSkgPiAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIHJlc3VsdCA9Ci0gICAgICBEZXNjcmlwdG9y
QnVpbGRlcih0aGlzLCB0YWJsZXNfLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdF9lcnJvcl9jb2xsZWN0b3JfKS5CdWlsZEZpbGUocHJvdG8pOwotICBpZiAocmVzdWx0ID09
IE5VTEwpIHsKLSAgICB0YWJsZXNfLT5rbm93bl9iYWRfZmlsZXNfLmluc2VydChwcm90by5uYW1l
KCkpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLURlc2NyaXB0b3JCdWlsZGVyOjpEZXNj
cmlwdG9yQnVpbGRlcigKLSAgICBjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbCwKLSAgICBEZXNj
cmlwdG9yUG9vbDo6VGFibGVzKiB0YWJsZXMsCi0gICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29s
bGVjdG9yKiBlcnJvcl9jb2xsZWN0b3IpCi0gIDogcG9vbF8ocG9vbCksCi0gICAgdGFibGVzXyh0
YWJsZXMpLAotICAgIGVycm9yX2NvbGxlY3Rvcl8oZXJyb3JfY29sbGVjdG9yKSwKLSAgICBoYWRf
ZXJyb3JzXyhmYWxzZSksCi0gICAgcG9zc2libGVfdW5kZWNsYXJlZF9kZXBlbmRlbmN5XyhOVUxM
KSwKLSAgICB1bmRlZmluZV9yZXNvbHZlZF9uYW1lXygiIikge30KLQotRGVzY3JpcHRvckJ1aWxk
ZXI6On5EZXNjcmlwdG9yQnVpbGRlcigpIHt9Ci0KLXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OkFk
ZEVycm9yKAotICAgIGNvbnN0IHN0cmluZyYgZWxlbWVudF9uYW1lLAotICAgIGNvbnN0IE1lc3Nh
Z2UmIGRlc2NyaXB0b3IsCi0gICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpFcnJv
ckxvY2F0aW9uIGxvY2F0aW9uLAotICAgIGNvbnN0IHN0cmluZyYgZXJyb3IpIHsKLSAgaWYgKGVy
cm9yX2NvbGxlY3Rvcl8gPT0gTlVMTCkgewotICAgIGlmICghaGFkX2Vycm9yc18pIHsKLSAgICAg
IEdPT0dMRV9MT0coRVJST1IpIDw8ICJJbnZhbGlkIHByb3RvIGRlc2NyaXB0b3IgZm9yIGZpbGUg
XCIiIDw8IGZpbGVuYW1lXwotICAgICAgICAgICAgICAgICA8PCAiXCI6IjsKLSAgICB9Ci0gICAg
R09PR0xFX0xPRyhFUlJPUikgPDwgIiAgIiA8PCBlbGVtZW50X25hbWUgPDwgIjogIiA8PCBlcnJv
cjsKLSAgfSBlbHNlIHsKLSAgICBlcnJvcl9jb2xsZWN0b3JfLT5BZGRFcnJvcihmaWxlbmFtZV8s
IGVsZW1lbnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVzY3JpcHRv
ciwgbG9jYXRpb24sIGVycm9yKTsKLSAgfQotICBoYWRfZXJyb3JzXyA9IHRydWU7Ci19Ci0KLXZv
aWQgRGVzY3JpcHRvckJ1aWxkZXI6OkFkZEVycm9yKAotICAgIGNvbnN0IHN0cmluZyYgZWxlbWVu
dF9uYW1lLAotICAgIGNvbnN0IE1lc3NhZ2UmIGRlc2NyaXB0b3IsCi0gICAgRGVzY3JpcHRvclBv
b2w6OkVycm9yQ29sbGVjdG9yOjpFcnJvckxvY2F0aW9uIGxvY2F0aW9uLAotICAgIGNvbnN0IGNo
YXIqIGVycm9yKSB7Ci0gIEFkZEVycm9yKGVsZW1lbnRfbmFtZSwgZGVzY3JpcHRvciwgbG9jYXRp
b24sIHN0cmluZyhlcnJvcikpOwotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpBZGROb3RE
ZWZpbmVkRXJyb3IoCi0gICAgY29uc3Qgc3RyaW5nJiBlbGVtZW50X25hbWUsCi0gICAgY29uc3Qg
TWVzc2FnZSYgZGVzY3JpcHRvciwKLSAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6
OkVycm9yTG9jYXRpb24gbG9jYXRpb24sCi0gICAgY29uc3Qgc3RyaW5nJiB1bmRlZmluZWRfc3lt
Ym9sKSB7Ci0gIGlmIChwb3NzaWJsZV91bmRlY2xhcmVkX2RlcGVuZGVuY3lfID09IE5VTEwgJiYK
LSAgICAgIHVuZGVmaW5lX3Jlc29sdmVkX25hbWVfLmVtcHR5KCkpIHsKLSAgICBBZGRFcnJvcihl
bGVtZW50X25hbWUsIGRlc2NyaXB0b3IsIGxvY2F0aW9uLAotICAgICAgICAgICAgICJcIiIgKyB1
bmRlZmluZWRfc3ltYm9sICsgIlwiIGlzIG5vdCBkZWZpbmVkLiIpOwotICB9IGVsc2UgewotICAg
IGlmIChwb3NzaWJsZV91bmRlY2xhcmVkX2RlcGVuZGVuY3lfICE9IE5VTEwpIHsKLSAgICAgIEFk
ZEVycm9yKGVsZW1lbnRfbmFtZSwgZGVzY3JpcHRvciwgbG9jYXRpb24sCi0gICAgICAgICAgICAg
ICAiXCIiICsgcG9zc2libGVfdW5kZWNsYXJlZF9kZXBlbmRlbmN5X25hbWVfICsKLSAgICAgICAg
ICAgICAgICJcIiBzZWVtcyB0byBiZSBkZWZpbmVkIGluIFwiIiArCi0gICAgICAgICAgICAgICBw
b3NzaWJsZV91bmRlY2xhcmVkX2RlcGVuZGVuY3lfLT5uYW1lKCkgKyAiXCIsIHdoaWNoIGlzIG5v
dCAiCi0gICAgICAgICAgICAgICAiaW1wb3J0ZWQgYnkgXCIiICsgZmlsZW5hbWVfICsgIlwiLiAg
VG8gdXNlIGl0IGhlcmUsIHBsZWFzZSAiCi0gICAgICAgICAgICAgICAiYWRkIHRoZSBuZWNlc3Nh
cnkgaW1wb3J0LiIpOwotICAgIH0KLSAgICBpZiAoIXVuZGVmaW5lX3Jlc29sdmVkX25hbWVfLmVt
cHR5KCkpIHsKLSAgICAgIEFkZEVycm9yKGVsZW1lbnRfbmFtZSwgZGVzY3JpcHRvciwgbG9jYXRp
b24sCi0gICAgICAgICAgICAgICAiXCIiICsgdW5kZWZpbmVkX3N5bWJvbCArICJcIiBpcyByZXNv
bHZlZCB0byBcIiIgKwotICAgICAgICAgICAgICAgdW5kZWZpbmVfcmVzb2x2ZWRfbmFtZV8gKyAi
XCIsIHdoaWNoIGlzIG5vdCBkZWZpbmVkLiAiCi0gICAgICAgICAgICAgICAiVGhlIGlubmVybW9z
dCBzY29wZSBpcyBzZWFyY2hlZCBmaXJzdCBpbiBuYW1lIHJlc29sdXRpb24uICIKLSAgICAgICAg
ICAgICAgICJDb25zaWRlciB1c2luZyBhIGxlYWRpbmcgJy4nKGkuZS4sIFwiLiIKLSAgICAgICAg
ICAgICAgICsgdW5kZWZpbmVkX3N5bWJvbCArCi0gICAgICAgICAgICAgICAiXCIpIHRvIHN0YXJ0
IGZyb20gdGhlIG91dGVybW9zdCBzY29wZS4iKTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBEZXNj
cmlwdG9yQnVpbGRlcjo6QWRkV2FybmluZygKLSAgICBjb25zdCBzdHJpbmcmIGVsZW1lbnRfbmFt
ZSwgY29uc3QgTWVzc2FnZSYgZGVzY3JpcHRvciwKLSAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JD
b2xsZWN0b3I6OkVycm9yTG9jYXRpb24gbG9jYXRpb24sCi0gICAgY29uc3Qgc3RyaW5nJiBlcnJv
cikgewotICBpZiAoZXJyb3JfY29sbGVjdG9yXyA9PSBOVUxMKSB7Ci0gICAgR09PR0xFX0xPRyhX
QVJOSU5HKSA8PCBmaWxlbmFtZV8gPDwgIiAiIDw8IGVsZW1lbnRfbmFtZSA8PCAiOiAiIDw8IGVy
cm9yOwotICB9IGVsc2UgewotICAgIGVycm9yX2NvbGxlY3Rvcl8tPkFkZFdhcm5pbmcoZmlsZW5h
bWVfLCBlbGVtZW50X25hbWUsICZkZXNjcmlwdG9yLCBsb2NhdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yKTsKLSAgfQotfQotCi1ib29sIERlc2NyaXB0b3JCdWls
ZGVyOjpJc0luUGFja2FnZShjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcGFja2FnZV9uYW1lKSB7Ci0g
IHJldHVybiBIYXNQcmVmaXhTdHJpbmcoZmlsZS0+cGFja2FnZSgpLCBwYWNrYWdlX25hbWUpICYm
Ci0gICAgICAgICAgIChmaWxlLT5wYWNrYWdlKCkuc2l6ZSgpID09IHBhY2thZ2VfbmFtZS5zaXpl
KCkgfHwKLSAgICAgICAgICAgIGZpbGUtPnBhY2thZ2UoKVtwYWNrYWdlX25hbWUuc2l6ZSgpXSA9
PSAnLicpOwotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpSZWNvcmRQdWJsaWNEZXBlbmRl
bmNpZXMoY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUpIHsKLSAgaWYgKGZpbGUgPT0gTlVMTCB8
fCAhZGVwZW5kZW5jaWVzXy5pbnNlcnQoZmlsZSkuc2Vjb25kKSByZXR1cm47Ci0gIGZvciAoaW50
IGkgPSAwOyBmaWxlICE9IE5VTEwgJiYgaSA8IGZpbGUtPnB1YmxpY19kZXBlbmRlbmN5X2NvdW50
KCk7IGkrKykgewotICAgIFJlY29yZFB1YmxpY0RlcGVuZGVuY2llcyhmaWxlLT5wdWJsaWNfZGVw
ZW5kZW5jeShpKSk7Ci0gIH0KLX0KLQotU3ltYm9sIERlc2NyaXB0b3JCdWlsZGVyOjpGaW5kU3lt
Ym9sTm90RW5mb3JjaW5nRGVwc0hlbHBlcigKLSAgICBjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9v
bCwgY29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIC8vIElmIHdlIGFyZSBsb29raW5nIGF0IGFuIHVu
ZGVybGF5LCB3ZSBtdXN0IGxvY2sgaXRzIG11dGV4Xywgc2luY2Ugd2UgYXJlCi0gIC8vIGFjY2Vz
c2luZyB0aGUgdW5kZXJsYXkncyB0YWJsZXNfIGRpcmVjdGx5LgotICBNdXRleExvY2tNYXliZSBs
b2NrKChwb29sID09IHBvb2xfKSA/IE5VTEwgOiBwb29sLT5tdXRleF8pOwotCi0gIFN5bWJvbCBy
ZXN1bHQgPSBwb29sLT50YWJsZXNfLT5GaW5kU3ltYm9sKG5hbWUpOwotICBpZiAocmVzdWx0Lklz
TnVsbCgpICYmIHBvb2wtPnVuZGVybGF5XyAhPSBOVUxMKSB7Ci0gICAgLy8gU3ltYm9sIG5vdCBm
b3VuZDsgY2hlY2sgdGhlIHVuZGVybGF5LgotICAgIHJlc3VsdCA9IEZpbmRTeW1ib2xOb3RFbmZv
cmNpbmdEZXBzSGVscGVyKHBvb2wtPnVuZGVybGF5XywgbmFtZSk7Ci0gIH0KLQotICBpZiAocmVz
dWx0LklzTnVsbCgpKSB7Ci0gICAgLy8gSW4gdGhlb3J5LCB3ZSBzaG91bGRuJ3QgbmVlZCB0byBj
aGVjayBmYWxsYmFja19kYXRhYmFzZV8gYmVjYXVzZSB0aGUKLSAgICAvLyBzeW1ib2wgc2hvdWxk
IGJlIGluIG9uZSBvZiBpdHMgZmlsZSdzIGRpcmVjdCBkZXBlbmRlbmNpZXMsIGFuZCB3ZSBoYXZl
Ci0gICAgLy8gYWxyZWFkeSBsb2FkZWQgdGhvc2UgYnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUuICBC
dXQgd2UgY2hlY2sgYW55d2F5IHNvCi0gICAgLy8gdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgYmV0dGVy
IGVycm9yIG1lc3NhZ2Ugd2hlbiBkZXBlbmRlbmNpZXMgYXJlIG1pc3NpbmcKLSAgICAvLyAoaS5l
LiwgIm1pc3NpbmcgZGVwZW5kZW5jeSIgcmF0aGVyIHRoYW4gInR5cGUgaXMgbm90IGRlZmluZWQi
KS4KLSAgICBpZiAocG9vbC0+VHJ5RmluZFN5bWJvbEluRmFsbGJhY2tEYXRhYmFzZShuYW1lKSkg
ewotICAgICAgcmVzdWx0ID0gcG9vbC0+dGFibGVzXy0+RmluZFN5bWJvbChuYW1lKTsKLSAgICB9
Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1TeW1ib2wgRGVzY3JpcHRvckJ1aWxkZXI6
OkZpbmRTeW1ib2xOb3RFbmZvcmNpbmdEZXBzKGNvbnN0IHN0cmluZyYgbmFtZSkgewotICByZXR1
cm4gRmluZFN5bWJvbE5vdEVuZm9yY2luZ0RlcHNIZWxwZXIocG9vbF8sIG5hbWUpOwotfQotCi1T
eW1ib2wgRGVzY3JpcHRvckJ1aWxkZXI6OkZpbmRTeW1ib2woY29uc3Qgc3RyaW5nJiBuYW1lKSB7
Ci0gIFN5bWJvbCByZXN1bHQgPSBGaW5kU3ltYm9sTm90RW5mb3JjaW5nRGVwcyhuYW1lKTsKLQot
ICBpZiAocmVzdWx0LklzTnVsbCgpKSByZXR1cm4gcmVzdWx0OwotCi0gIGlmICghcG9vbF8tPmVu
Zm9yY2VfZGVwZW5kZW5jaWVzXykgewotICAgIC8vIEhhY2sgZm9yIENvbXBpbGVyVXBncmFkZXIu
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vIE9ubHkgZmluZCBzeW1ib2xzIHdoaWNo
IHdlcmUgZGVmaW5lZCBpbiB0aGlzIGZpbGUgb3Igb25lIG9mIGl0cwotICAvLyBkZXBlbmRlbmNp
ZXMuCi0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlID0gcmVzdWx0LkdldEZpbGUoKTsKLSAg
aWYgKGZpbGUgPT0gZmlsZV8gfHwgZGVwZW5kZW5jaWVzXy5jb3VudChmaWxlKSA+IDApIHsKLSAg
ICB1bnVzZWRfZGVwZW5kZW5jeV8uZXJhc2UoZmlsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAg
fQotCi0gIGlmIChyZXN1bHQudHlwZSA9PSBTeW1ib2w6OlBBQ0tBR0UpIHsKLSAgICAvLyBBcmcs
IHRoaXMgaXMgb3ZlcmNvbXBsaWNhdGVkLiAgVGhlIHN5bWJvbCBpcyBhIHBhY2thZ2UgbmFtZS4g
IEl0IGNvdWxkCi0gICAgLy8gYmUgdGhhdCB0aGUgcGFja2FnZSB3YXMgZGVmaW5lZCBpbiBtdWx0
aXBsZSBmaWxlcy4gIHJlc3VsdC5HZXRGaWxlKCkKLSAgICAvLyByZXR1cm5zIHRoZSBmaXJzdCBm
aWxlIHdlIHNhdyB0aGF0IHVzZWQgdGhpcyBwYWNrYWdlLiAgV2UndmUgZGV0ZXJtaW5lZAotICAg
IC8vIHRoYXQgdGhhdCBmaWxlIGlzIG5vdCBhIGRpcmVjdCBkZXBlbmRlbmN5IG9mIHRoZSBmaWxl
IHdlIGFyZSBjdXJyZW50bHkKLSAgICAvLyBidWlsZGluZywgYnV0IGl0IGNvdWxkIGJlIHRoYXQg
c29tZSBvdGhlciBmaWxlIHdoaWNoICppcyogYSBkaXJlY3QKLSAgICAvLyBkZXBlbmRlbmN5IGFs
c28gZGVmaW5lcyB0aGUgc2FtZSBwYWNrYWdlLiAgV2UgY2FuJ3QgcmVhbGx5IHJ1bGUgb3V0IHRo
aXMKLSAgICAvLyBzeW1ib2wgdW5sZXNzIG5vbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBkZWZpbmUg
aXQuCi0gICAgaWYgKElzSW5QYWNrYWdlKGZpbGVfLCBuYW1lKSkgcmV0dXJuIHJlc3VsdDsKLSAg
ICBmb3IgKHNldDxjb25zdCBGaWxlRGVzY3JpcHRvcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRl
cGVuZGVuY2llc18uYmVnaW4oKTsKLSAgICAgICAgIGl0ICE9IGRlcGVuZGVuY2llc18uZW5kKCk7
ICsraXQpIHsKLSAgICAgIC8vIE5vdGU6ICBBIGRlcGVuZGVuY3kgbWF5IGJlIE5VTEwgaWYgaXQg
d2FzIG5vdCBmb3VuZCBvciBoYWQgZXJyb3JzLgotICAgICAgaWYgKCppdCAhPSBOVUxMICYmIElz
SW5QYWNrYWdlKCppdCwgbmFtZSkpIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICB9Ci0KLSAgcG9z
c2libGVfdW5kZWNsYXJlZF9kZXBlbmRlbmN5XyA9IGZpbGU7Ci0gIHBvc3NpYmxlX3VuZGVjbGFy
ZWRfZGVwZW5kZW5jeV9uYW1lXyA9IG5hbWU7Ci0gIHJldHVybiBrTnVsbFN5bWJvbDsKLX0KLQot
U3ltYm9sIERlc2NyaXB0b3JCdWlsZGVyOjpMb29rdXBTeW1ib2xOb1BsYWNlaG9sZGVyKAotICAg
IGNvbnN0IHN0cmluZyYgbmFtZSwgY29uc3Qgc3RyaW5nJiByZWxhdGl2ZV90bywgUmVzb2x2ZU1v
ZGUgcmVzb2x2ZV9tb2RlKSB7Ci0gIHBvc3NpYmxlX3VuZGVjbGFyZWRfZGVwZW5kZW5jeV8gPSBO
VUxMOwotICB1bmRlZmluZV9yZXNvbHZlZF9uYW1lXy5jbGVhcigpOwotCi0gIGlmIChuYW1lLnNp
emUoKSA+IDAgJiYgbmFtZVswXSA9PSAnLicpIHsKLSAgICAvLyBGdWxseS1xdWFsaWZpZWQgbmFt
ZS4KLSAgICByZXR1cm4gRmluZFN5bWJvbChuYW1lLnN1YnN0cigxKSk7Ci0gIH0KLQotICAvLyBJ
ZiBuYW1lIGlzIHNvbWV0aGluZyBsaWtlICJGb28uQmFyLmJheiIsIGFuZCBzeW1ib2xzIG5hbWVk
ICJGb28iIGFyZQotICAvLyBkZWZpbmVkIGluIG11bHRpcGxlIHBhcmVudCBzY29wZXMsIHdlIG9u
bHkgd2FudCB0byBmaW5kICJCYXIuYmF6IiBpbiB0aGUKLSAgLy8gaW5uZXJtb3N0IG9uZS4gIEUu
Zy4sIHRoZSBmb2xsb3dpbmcgc2hvdWxkIHByb2R1Y2UgYW4gZXJyb3I6Ci0gIC8vICAgbWVzc2Fn
ZSBCYXIgeyBtZXNzYWdlIEJheiB7fSB9Ci0gIC8vICAgbWVzc2FnZSBGb28gewotICAvLyAgICAg
bWVzc2FnZSBCYXIgewotICAvLyAgICAgfQotICAvLyAgICAgb3B0aW9uYWwgQmFyLkJheiBiYXog
PSAxOwotICAvLyAgIH0KLSAgLy8gU28sIHdlIGxvb2sgZm9yIGp1c3QgIkZvbyIgZmlyc3QsIHRo
ZW4gbG9vayBmb3IgIkJhci5iYXoiIHdpdGhpbiBpdCBpZgotICAvLyBmb3VuZC4KLSAgc3RyaW5n
OjpzaXplX3R5cGUgbmFtZV9kb3RfcG9zID0gbmFtZS5maW5kX2ZpcnN0X29mKCcuJyk7Ci0gIHN0
cmluZyBmaXJzdF9wYXJ0X29mX25hbWU7Ci0gIGlmIChuYW1lX2RvdF9wb3MgPT0gc3RyaW5nOjpu
cG9zKSB7Ci0gICAgZmlyc3RfcGFydF9vZl9uYW1lID0gbmFtZTsKLSAgfSBlbHNlIHsKLSAgICBm
aXJzdF9wYXJ0X29mX25hbWUgPSBuYW1lLnN1YnN0cigwLCBuYW1lX2RvdF9wb3MpOwotICB9Ci0K
LSAgc3RyaW5nIHNjb3BlX3RvX3RyeShyZWxhdGl2ZV90byk7Ci0KLSAgd2hpbGUgKHRydWUpIHsK
LSAgICAvLyBDaG9wIG9mZiB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHNjb3BlLgotICAgIHN0
cmluZzo6c2l6ZV90eXBlIGRvdF9wb3MgPSBzY29wZV90b190cnkuZmluZF9sYXN0X29mKCcuJyk7
Ci0gICAgaWYgKGRvdF9wb3MgPT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICByZXR1cm4gRmluZFN5
bWJvbChuYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgc2NvcGVfdG9fdHJ5LmVyYXNlKGRvdF9w
b3MpOwotICAgIH0KLQotICAgIC8vIEFwcGVuZCAiLmZpcnN0X3BhcnRfb2ZfbmFtZSIgYW5kIHRy
eSB0byBmaW5kLgotICAgIHN0cmluZzo6c2l6ZV90eXBlIG9sZF9zaXplID0gc2NvcGVfdG9fdHJ5
LnNpemUoKTsKLSAgICBzY29wZV90b190cnkuYXBwZW5kKDEsICcuJyk7Ci0gICAgc2NvcGVfdG9f
dHJ5LmFwcGVuZChmaXJzdF9wYXJ0X29mX25hbWUpOwotICAgIFN5bWJvbCByZXN1bHQgPSBGaW5k
U3ltYm9sKHNjb3BlX3RvX3RyeSk7Ci0gICAgaWYgKCFyZXN1bHQuSXNOdWxsKCkpIHsKLSAgICAg
IGlmIChmaXJzdF9wYXJ0X29mX25hbWUuc2l6ZSgpIDwgbmFtZS5zaXplKCkpIHsKLSAgICAgICAg
Ly8gbmFtZSBpcyBhIGNvbXBvdW5kIHN5bWJvbCwgb2Ygd2hpY2ggd2Ugb25seSBmb3VuZCB0aGUg
Zmlyc3QgcGFydC4KLSAgICAgICAgLy8gTm93IHRyeSB0byBsb29rIHVwIHRoZSByZXN0IG9mIGl0
LgotICAgICAgICBpZiAocmVzdWx0LklzQWdncmVnYXRlKCkpIHsKLSAgICAgICAgICBzY29wZV90
b190cnkuYXBwZW5kKG5hbWUsIGZpcnN0X3BhcnRfb2ZfbmFtZS5zaXplKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lLnNpemUoKSAtIGZpcnN0X3BhcnRfb2ZfbmFtZS5zaXpl
KCkpOwotICAgICAgICAgIHJlc3VsdCA9IEZpbmRTeW1ib2woc2NvcGVfdG9fdHJ5KTsKLSAgICAg
ICAgICBpZiAocmVzdWx0LklzTnVsbCgpKSB7Ci0gICAgICAgICAgICB1bmRlZmluZV9yZXNvbHZl
ZF9uYW1lXyA9IHNjb3BlX3RvX3RyeTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN5bWJvbCBi
dXQgaXQncyBub3QgYW4gYWdncmVnYXRlLiAgQ29udGludWUgdGhlIGxvb3AuCi0gICAgICAgIH0K
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZXNvbHZlX21vZGUgPT0gTE9PS1VQX1RZUEVT
ICYmICFyZXN1bHQuSXNUeXBlKCkpIHsKLSAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN5bWJvbCBi
dXQgaXQncyBub3QgYSB0eXBlLiAgQ29udGludWUgdGhlIGxvb3AuCi0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQot
ICAgIC8vIE5vdCBmb3VuZC4gIFJlbW92ZSB0aGUgbmFtZSBzbyB3ZSBjYW4gdHJ5IGFnYWluLgot
ICAgIHNjb3BlX3RvX3RyeS5lcmFzZShvbGRfc2l6ZSk7Ci0gIH0KLX0KLQotU3ltYm9sIERlc2Ny
aXB0b3JCdWlsZGVyOjpMb29rdXBTeW1ib2woCi0gICAgY29uc3Qgc3RyaW5nJiBuYW1lLCBjb25z
dCBzdHJpbmcmIHJlbGF0aXZlX3RvLAotICAgIFBsYWNlaG9sZGVyVHlwZSBwbGFjZWhvbGRlcl90
eXBlLCBSZXNvbHZlTW9kZSByZXNvbHZlX21vZGUpIHsKLSAgU3ltYm9sIHJlc3VsdCA9IExvb2t1
cFN5bWJvbE5vUGxhY2Vob2xkZXIoCi0gICAgICBuYW1lLCByZWxhdGl2ZV90bywgcmVzb2x2ZV9t
b2RlKTsKLSAgaWYgKHJlc3VsdC5Jc051bGwoKSAmJiBwb29sXy0+YWxsb3dfdW5rbm93bl8pIHsK
LSAgICAvLyBOb3QgZm91bmQsIGJ1dCBBbGxvd1Vua25vd25EZXBlbmRlbmNpZXMoKSBpcyBlbmFi
bGVkLiAgUmV0dXJuIGEKLSAgICAvLyBwbGFjZWhvbGRlciBpbnN0ZWFkLgotICAgIHJlc3VsdCA9
IE5ld1BsYWNlaG9sZGVyKG5hbWUsIHBsYWNlaG9sZGVyX3R5cGUpOwotICB9Ci0gIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLVN5bWJvbCBEZXNjcmlwdG9yQnVpbGRlcjo6TmV3UGxhY2Vob2xkZXIoY29u
c3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQbGFjZWhvbGRlclR5cGUgcGxhY2Vob2xkZXJfdHlwZSkgewotICAvLyBDb21wdXRlIG5hbWVz
LgotICBjb25zdCBzdHJpbmcqIHBsYWNlaG9sZGVyX2Z1bGxfbmFtZTsKLSAgY29uc3Qgc3RyaW5n
KiBwbGFjZWhvbGRlcl9uYW1lOwotICBjb25zdCBzdHJpbmcqIHBsYWNlaG9sZGVyX3BhY2thZ2U7
Ci0KLSAgaWYgKCFWYWxpZGF0ZVF1YWxpZmllZE5hbWUobmFtZSkpIHJldHVybiBrTnVsbFN5bWJv
bDsKLSAgaWYgKG5hbWVbMF0gPT0gJy4nKSB7Ci0gICAgLy8gRnVsbHktcXVhbGlmaWVkLgotICAg
IHBsYWNlaG9sZGVyX2Z1bGxfbmFtZSA9IHRhYmxlc18tPkFsbG9jYXRlU3RyaW5nKG5hbWUuc3Vi
c3RyKDEpKTsKLSAgfSBlbHNlIHsKLSAgICBwbGFjZWhvbGRlcl9mdWxsX25hbWUgPSB0YWJsZXNf
LT5BbGxvY2F0ZVN0cmluZyhuYW1lKTsKLSAgfQotCi0gIHN0cmluZzo6c2l6ZV90eXBlIGRvdHBv
cyA9IHBsYWNlaG9sZGVyX2Z1bGxfbmFtZS0+ZmluZF9sYXN0X29mKCcuJyk7Ci0gIGlmIChkb3Rw
b3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgcGxhY2Vob2xkZXJfcGFja2FnZSA9IHRhYmxlc18t
PkFsbG9jYXRlU3RyaW5nKAotICAgICAgcGxhY2Vob2xkZXJfZnVsbF9uYW1lLT5zdWJzdHIoMCwg
ZG90cG9zKSk7Ci0gICAgcGxhY2Vob2xkZXJfbmFtZSA9IHRhYmxlc18tPkFsbG9jYXRlU3RyaW5n
KAotICAgICAgcGxhY2Vob2xkZXJfZnVsbF9uYW1lLT5zdWJzdHIoZG90cG9zICsgMSkpOwotICB9
IGVsc2UgewotICAgIHBsYWNlaG9sZGVyX3BhY2thZ2UgPSAmaW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nKCk7Ci0gICAgcGxhY2Vob2xkZXJfbmFtZSA9IHBsYWNlaG9sZGVyX2Z1bGxfbmFtZTsKLSAg
fQotCi0gIC8vIENyZWF0ZSB0aGUgcGxhY2Vob2xkZXJzLgotICBGaWxlRGVzY3JpcHRvciogcGxh
Y2Vob2xkZXJfZmlsZSA9IE5ld1BsYWNlaG9sZGVyRmlsZSgKLSAgICAgICpwbGFjZWhvbGRlcl9m
dWxsX25hbWUgKyAiLnBsYWNlaG9sZGVyLnByb3RvIik7Ci0gIHBsYWNlaG9sZGVyX2ZpbGUtPnBh
Y2thZ2VfID0gcGxhY2Vob2xkZXJfcGFja2FnZTsKLQotICBpZiAocGxhY2Vob2xkZXJfdHlwZSA9
PSBQTEFDRUhPTERFUl9FTlVNKSB7Ci0gICAgcGxhY2Vob2xkZXJfZmlsZS0+ZW51bV90eXBlX2Nv
dW50XyA9IDE7Ci0gICAgcGxhY2Vob2xkZXJfZmlsZS0+ZW51bV90eXBlc18gPQotICAgICAgdGFi
bGVzXy0+QWxsb2NhdGVBcnJheTxFbnVtRGVzY3JpcHRvcj4oMSk7Ci0KLSAgICBFbnVtRGVzY3Jp
cHRvciogcGxhY2Vob2xkZXJfZW51bSA9ICZwbGFjZWhvbGRlcl9maWxlLT5lbnVtX3R5cGVzX1sw
XTsKLSAgICBtZW1zZXQocGxhY2Vob2xkZXJfZW51bSwgMCwgc2l6ZW9mKCpwbGFjZWhvbGRlcl9l
bnVtKSk7Ci0KLSAgICBwbGFjZWhvbGRlcl9lbnVtLT5mdWxsX25hbWVfID0gcGxhY2Vob2xkZXJf
ZnVsbF9uYW1lOwotICAgIHBsYWNlaG9sZGVyX2VudW0tPm5hbWVfID0gcGxhY2Vob2xkZXJfbmFt
ZTsKLSAgICBwbGFjZWhvbGRlcl9lbnVtLT5maWxlXyA9IHBsYWNlaG9sZGVyX2ZpbGU7Ci0gICAg
cGxhY2Vob2xkZXJfZW51bS0+b3B0aW9uc18gPSAmRW51bU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFu
Y2UoKTsKLSAgICBwbGFjZWhvbGRlcl9lbnVtLT5pc19wbGFjZWhvbGRlcl8gPSB0cnVlOwotICAg
IHBsYWNlaG9sZGVyX2VudW0tPmlzX3VucXVhbGlmaWVkX3BsYWNlaG9sZGVyXyA9IChuYW1lWzBd
ICE9ICcuJyk7Ci0KLSAgICAvLyBFbnVtcyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHZhbHVlLgot
ICAgIHBsYWNlaG9sZGVyX2VudW0tPnZhbHVlX2NvdW50XyA9IDE7Ci0gICAgcGxhY2Vob2xkZXJf
ZW51bS0+dmFsdWVzXyA9IHRhYmxlc18tPkFsbG9jYXRlQXJyYXk8RW51bVZhbHVlRGVzY3JpcHRv
cj4oMSk7Ci0KLSAgICBFbnVtVmFsdWVEZXNjcmlwdG9yKiBwbGFjZWhvbGRlcl92YWx1ZSA9ICZw
bGFjZWhvbGRlcl9lbnVtLT52YWx1ZXNfWzBdOwotICAgIG1lbXNldChwbGFjZWhvbGRlcl92YWx1
ZSwgMCwgc2l6ZW9mKCpwbGFjZWhvbGRlcl92YWx1ZSkpOwotCi0gICAgcGxhY2Vob2xkZXJfdmFs
dWUtPm5hbWVfID0gdGFibGVzXy0+QWxsb2NhdGVTdHJpbmcoIlBMQUNFSE9MREVSX1ZBTFVFIik7
Ci0gICAgLy8gTm90ZSB0aGF0IGVudW0gdmFsdWUgbmFtZXMgYXJlIHNpYmxpbmdzIG9mIHRoZWly
IHR5cGUsIG5vdCBjaGlsZHJlbi4KLSAgICBwbGFjZWhvbGRlcl92YWx1ZS0+ZnVsbF9uYW1lXyA9
Ci0gICAgICBwbGFjZWhvbGRlcl9wYWNrYWdlLT5lbXB0eSgpID8gcGxhY2Vob2xkZXJfdmFsdWUt
Pm5hbWVfIDoKLSAgICAgICAgdGFibGVzXy0+QWxsb2NhdGVTdHJpbmcoKnBsYWNlaG9sZGVyX3Bh
Y2thZ2UgKyAiLlBMQUNFSE9MREVSX1ZBTFVFIik7Ci0KLSAgICBwbGFjZWhvbGRlcl92YWx1ZS0+
bnVtYmVyXyA9IDA7Ci0gICAgcGxhY2Vob2xkZXJfdmFsdWUtPnR5cGVfID0gcGxhY2Vob2xkZXJf
ZW51bTsKLSAgICBwbGFjZWhvbGRlcl92YWx1ZS0+b3B0aW9uc18gPSAmRW51bVZhbHVlT3B0aW9u
czo6ZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gICAgcmV0dXJuIFN5bWJvbChwbGFjZWhvbGRlcl9l
bnVtKTsKLSAgfSBlbHNlIHsKLSAgICBwbGFjZWhvbGRlcl9maWxlLT5tZXNzYWdlX3R5cGVfY291
bnRfID0gMTsKLSAgICBwbGFjZWhvbGRlcl9maWxlLT5tZXNzYWdlX3R5cGVzXyA9Ci0gICAgICB0
YWJsZXNfLT5BbGxvY2F0ZUFycmF5PERlc2NyaXB0b3I+KDEpOwotCi0gICAgRGVzY3JpcHRvciog
cGxhY2Vob2xkZXJfbWVzc2FnZSA9ICZwbGFjZWhvbGRlcl9maWxlLT5tZXNzYWdlX3R5cGVzX1sw
XTsKLSAgICBtZW1zZXQocGxhY2Vob2xkZXJfbWVzc2FnZSwgMCwgc2l6ZW9mKCpwbGFjZWhvbGRl
cl9tZXNzYWdlKSk7Ci0KLSAgICBwbGFjZWhvbGRlcl9tZXNzYWdlLT5mdWxsX25hbWVfID0gcGxh
Y2Vob2xkZXJfZnVsbF9uYW1lOwotICAgIHBsYWNlaG9sZGVyX21lc3NhZ2UtPm5hbWVfID0gcGxh
Y2Vob2xkZXJfbmFtZTsKLSAgICBwbGFjZWhvbGRlcl9tZXNzYWdlLT5maWxlXyA9IHBsYWNlaG9s
ZGVyX2ZpbGU7Ci0gICAgcGxhY2Vob2xkZXJfbWVzc2FnZS0+b3B0aW9uc18gPSAmTWVzc2FnZU9w
dGlvbnM6OmRlZmF1bHRfaW5zdGFuY2UoKTsKLSAgICBwbGFjZWhvbGRlcl9tZXNzYWdlLT5pc19w
bGFjZWhvbGRlcl8gPSB0cnVlOwotICAgIHBsYWNlaG9sZGVyX21lc3NhZ2UtPmlzX3VucXVhbGlm
aWVkX3BsYWNlaG9sZGVyXyA9IChuYW1lWzBdICE9ICcuJyk7Ci0KLSAgICBpZiAocGxhY2Vob2xk
ZXJfdHlwZSA9PSBQTEFDRUhPTERFUl9FWFRFTkRBQkxFX01FU1NBR0UpIHsKLSAgICAgIHBsYWNl
aG9sZGVyX21lc3NhZ2UtPmV4dGVuc2lvbl9yYW5nZV9jb3VudF8gPSAxOwotICAgICAgcGxhY2Vo
b2xkZXJfbWVzc2FnZS0+ZXh0ZW5zaW9uX3Jhbmdlc18gPQotICAgICAgICB0YWJsZXNfLT5BbGxv
Y2F0ZUFycmF5PERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlPigxKTsKLSAgICAgIHBsYWNlaG9s
ZGVyX21lc3NhZ2UtPmV4dGVuc2lvbl9yYW5nZXNfLT5zdGFydCA9IDE7Ci0gICAgICAvLyBrTWF4
TnVtYmVyICsgMSBiZWNhdXNlIEV4dGVuc2lvblJhbmdlOjplbmQgaXMgZXhjbHVzaXZlLgotICAg
ICAgcGxhY2Vob2xkZXJfbWVzc2FnZS0+ZXh0ZW5zaW9uX3Jhbmdlc18tPmVuZCA9Ci0gICAgICAg
IEZpZWxkRGVzY3JpcHRvcjo6a01heE51bWJlciArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN5
bWJvbChwbGFjZWhvbGRlcl9tZXNzYWdlKTsKLSAgfQotfQotCi1GaWxlRGVzY3JpcHRvciogRGVz
Y3JpcHRvckJ1aWxkZXI6Ok5ld1BsYWNlaG9sZGVyRmlsZSgKLSAgICBjb25zdCBzdHJpbmcmIG5h
bWUpIHsKLSAgRmlsZURlc2NyaXB0b3IqIHBsYWNlaG9sZGVyID0gdGFibGVzXy0+QWxsb2NhdGU8
RmlsZURlc2NyaXB0b3I+KCk7Ci0gIG1lbXNldChwbGFjZWhvbGRlciwgMCwgc2l6ZW9mKCpwbGFj
ZWhvbGRlcikpOwotCi0gIHBsYWNlaG9sZGVyLT5uYW1lXyA9IHRhYmxlc18tPkFsbG9jYXRlU3Ry
aW5nKG5hbWUpOwotICBwbGFjZWhvbGRlci0+cGFja2FnZV8gPSAmaW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nKCk7Ci0gIHBsYWNlaG9sZGVyLT5wb29sXyA9IHBvb2xfOwotICBwbGFjZWhvbGRlci0+
b3B0aW9uc18gPSAmRmlsZU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2UoKTsKLSAgcGxhY2Vob2xk
ZXItPnRhYmxlc18gPSAmRmlsZURlc2NyaXB0b3JUYWJsZXM6OkdldEVtcHR5SW5zdGFuY2UoKTsK
LSAgcGxhY2Vob2xkZXItPnNvdXJjZV9jb2RlX2luZm9fID0gJlNvdXJjZUNvZGVJbmZvOjpkZWZh
dWx0X2luc3RhbmNlKCk7Ci0gIHBsYWNlaG9sZGVyLT5pc19wbGFjZWhvbGRlcl8gPSB0cnVlOwot
ICBwbGFjZWhvbGRlci0+c3ludGF4XyA9IEZpbGVEZXNjcmlwdG9yOjpTWU5UQVhfUFJPVE8yOwot
ICAvLyBBbGwgb3RoZXIgZmllbGRzIGFyZSB6ZXJvIG9yIE5VTEwuCi0KLSAgcmV0dXJuIHBsYWNl
aG9sZGVyOwotfQotCi1ib29sIERlc2NyaXB0b3JCdWlsZGVyOjpBZGRTeW1ib2woCi0gICAgY29u
c3Qgc3RyaW5nJiBmdWxsX25hbWUsIGNvbnN0IHZvaWQqIHBhcmVudCwgY29uc3Qgc3RyaW5nJiBu
YW1lLAotICAgIGNvbnN0IE1lc3NhZ2UmIHByb3RvLCBTeW1ib2wgc3ltYm9sKSB7Ci0gIC8vIElm
IHRoZSBjYWxsZXIgcGFzc2VkIE5VTEwgZm9yIHRoZSBwYXJlbnQsIHRoZSBzeW1ib2wgaXMgYXQg
ZmlsZSBzY29wZS4KLSAgLy8gVXNlIGl0cyBmaWxlIGFzIHRoZSBwYXJlbnQgaW5zdGVhZC4KLSAg
aWYgKHBhcmVudCA9PSBOVUxMKSBwYXJlbnQgPSBmaWxlXzsKLQotICBpZiAodGFibGVzXy0+QWRk
U3ltYm9sKGZ1bGxfbmFtZSwgc3ltYm9sKSkgewotICAgIGlmICghZmlsZV90YWJsZXNfLT5BZGRB
bGlhc1VuZGVyUGFyZW50KHBhcmVudCwgbmFtZSwgc3ltYm9sKSkgewotICAgICAgR09PR0xFX0xP
RyhERkFUQUwpIDw8ICJcIiIgPDwgZnVsbF9uYW1lIDw8ICJcIiBub3QgcHJldmlvdXNseSBkZWZp
bmVkIGluICIKLSAgICAgICAgICAgICAgICAgICAgICJzeW1ib2xzX2J5X25hbWVfLCBidXQgd2Fz
IGRlZmluZWQgaW4gc3ltYm9sc19ieV9wYXJlbnRfOyAiCi0gICAgICAgICAgICAgICAgICAgICAi
dGhpcyBzaG91bGRuJ3QgYmUgcG9zc2libGUuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgY29uc3QgRmlsZURlc2NyaXB0b3Iq
IG90aGVyX2ZpbGUgPSB0YWJsZXNfLT5GaW5kU3ltYm9sKGZ1bGxfbmFtZSkuR2V0RmlsZSgpOwot
ICAgIGlmIChvdGhlcl9maWxlID09IGZpbGVfKSB7Ci0gICAgICBzdHJpbmc6OnNpemVfdHlwZSBk
b3RfcG9zID0gZnVsbF9uYW1lLmZpbmRfbGFzdF9vZignLicpOwotICAgICAgaWYgKGRvdF9wb3Mg
PT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIEFkZEVycm9yKGZ1bGxfbmFtZSwgcHJvdG8sIERl
c2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6TkFNRSwKLSAgICAgICAgICAgICAgICAgIlwi
IiArIGZ1bGxfbmFtZSArICJcIiBpcyBhbHJlYWR5IGRlZmluZWQuIik7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBBZGRFcnJvcihmdWxsX25hbWUsIHByb3RvLCBEZXNjcmlwdG9yUG9vbDo6RXJy
b3JDb2xsZWN0b3I6Ok5BTUUsCi0gICAgICAgICAgICAgICAgICJcIiIgKyBmdWxsX25hbWUuc3Vi
c3RyKGRvdF9wb3MgKyAxKSArCi0gICAgICAgICAgICAgICAgICJcIiBpcyBhbHJlYWR5IGRlZmlu
ZWQgaW4gXCIiICsKLSAgICAgICAgICAgICAgICAgZnVsbF9uYW1lLnN1YnN0cigwLCBkb3RfcG9z
KSArICJcIi4iKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLy8gU3ltYm9sIHNlZW1z
IHRvIGhhdmUgYmVlbiBkZWZpbmVkIGluIGEgZGlmZmVyZW50IGZpbGUuCi0gICAgICBBZGRFcnJv
cihmdWxsX25hbWUsIHByb3RvLCBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok5BTUUs
Ci0gICAgICAgICAgICAgICAiXCIiICsgZnVsbF9uYW1lICsgIlwiIGlzIGFscmVhZHkgZGVmaW5l
ZCBpbiBmaWxlIFwiIiArCi0gICAgICAgICAgICAgICBvdGhlcl9maWxlLT5uYW1lKCkgKyAiXCIu
Iik7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi12b2lkIERlc2NyaXB0b3JC
dWlsZGVyOjpBZGRQYWNrYWdlKAotICAgIGNvbnN0IHN0cmluZyYgbmFtZSwgY29uc3QgTWVzc2Fn
ZSYgcHJvdG8sIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKSB7Ci0gIGlmICh0YWJsZXNfLT5B
ZGRTeW1ib2wobmFtZSwgU3ltYm9sKGZpbGUpKSkgewotICAgIC8vIFN1Y2Nlc3MuICBBbHNvIGFk
ZCBwYXJlbnQgcGFja2FnZSwgaWYgYW55LgotICAgIHN0cmluZzo6c2l6ZV90eXBlIGRvdF9wb3Mg
PSBuYW1lLmZpbmRfbGFzdF9vZignLicpOwotICAgIGlmIChkb3RfcG9zID09IHN0cmluZzo6bnBv
cykgewotICAgICAgLy8gTm8gcGFyZW50cy4KLSAgICAgIFZhbGlkYXRlU3ltYm9sTmFtZShuYW1l
LCBuYW1lLCBwcm90byk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEhhcyBwYXJlbnQuCi0gICAg
ICBzdHJpbmcqIHBhcmVudF9uYW1lID0gdGFibGVzXy0+QWxsb2NhdGVTdHJpbmcobmFtZS5zdWJz
dHIoMCwgZG90X3BvcykpOwotICAgICAgQWRkUGFja2FnZSgqcGFyZW50X25hbWUsIHByb3RvLCBm
aWxlKTsKLSAgICAgIFZhbGlkYXRlU3ltYm9sTmFtZShuYW1lLnN1YnN0cihkb3RfcG9zICsgMSks
IG5hbWUsIHByb3RvKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgU3ltYm9sIGV4aXN0aW5nX3N5
bWJvbCA9IHRhYmxlc18tPkZpbmRTeW1ib2wobmFtZSk7Ci0gICAgLy8gSXQncyBPSyB0byByZWRl
ZmluZSBhIHBhY2thZ2UuCi0gICAgaWYgKGV4aXN0aW5nX3N5bWJvbC50eXBlICE9IFN5bWJvbDo6
UEFDS0FHRSkgewotICAgICAgLy8gU3ltYm9sIHNlZW1zIHRvIGhhdmUgYmVlbiBkZWZpbmVkIGlu
IGEgZGlmZmVyZW50IGZpbGUuCi0gICAgICBBZGRFcnJvcihuYW1lLCBwcm90bywgRGVzY3JpcHRv
clBvb2w6OkVycm9yQ29sbGVjdG9yOjpOQU1FLAotICAgICAgICAgICAgICAgIlwiIiArIG5hbWUg
KyAiXCIgaXMgYWxyZWFkeSBkZWZpbmVkIChhcyBzb21ldGhpbmcgb3RoZXIgdGhhbiAiCi0gICAg
ICAgICAgICAgICAiYSBwYWNrYWdlKSBpbiBmaWxlIFwiIiArIGV4aXN0aW5nX3N5bWJvbC5HZXRG
aWxlKCktPm5hbWUoKSArCi0gICAgICAgICAgICAgICAiXCIuIik7Ci0gICAgfQotICB9Ci19Ci0K
LXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OlZhbGlkYXRlU3ltYm9sTmFtZSgKLSAgICBjb25zdCBz
dHJpbmcmIG5hbWUsIGNvbnN0IHN0cmluZyYgZnVsbF9uYW1lLCBjb25zdCBNZXNzYWdlJiBwcm90
bykgewotICBpZiAobmFtZS5lbXB0eSgpKSB7Ci0gICAgQWRkRXJyb3IoZnVsbF9uYW1lLCBwcm90
bywgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpOQU1FLAotICAgICAgICAgICAgICJN
aXNzaW5nIG5hbWUuIik7Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1l
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAvLyBJIGRvbid0IHRydXN0IGlzYWxudW0oKSBkdWUgdG8g
bG9jYWxlcy4gIDooCi0gICAgICBpZiAoKG5hbWVbaV0gPCAnYScgfHwgJ3onIDwgbmFtZVtpXSkg
JiYKLSAgICAgICAgICAobmFtZVtpXSA8ICdBJyB8fCAnWicgPCBuYW1lW2ldKSAmJgotICAgICAg
ICAgIChuYW1lW2ldIDwgJzAnIHx8ICc5JyA8IG5hbWVbaV0pICYmCi0gICAgICAgICAgKG5hbWVb
aV0gIT0gJ18nKSkgewotICAgICAgICBBZGRFcnJvcihmdWxsX25hbWUsIHByb3RvLCBEZXNjcmlw
dG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok5BTUUsCi0gICAgICAgICAgICAgICAgICJcIiIgKyBu
YW1lICsgIlwiIGlzIG5vdCBhIHZhbGlkIGlkZW50aWZpZXIuIik7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci19Ci0KLWJvb2wgRGVzY3JpcHRvckJ1aWxkZXI6OlZhbGlkYXRlUXVhbGlmaWVkTmFtZShj
b25zdCBzdHJpbmcmIG5hbWUpIHsKLSAgYm9vbCBsYXN0X3dhc19wZXJpb2QgPSBmYWxzZTsKLQot
ICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWUuc2l6ZSgpOyBpKyspIHsKLSAgICAvLyBJIGRvbid0
IHRydXN0IGlzYWxudW0oKSBkdWUgdG8gbG9jYWxlcy4gIDooCi0gICAgaWYgKCgnYScgPD0gbmFt
ZVtpXSAmJiBuYW1lW2ldIDw9ICd6JykgfHwKLSAgICAgICAgKCdBJyA8PSBuYW1lW2ldICYmIG5h
bWVbaV0gPD0gJ1onKSB8fAotICAgICAgICAoJzAnIDw9IG5hbWVbaV0gJiYgbmFtZVtpXSA8PSAn
OScpIHx8Ci0gICAgICAgIChuYW1lW2ldID09ICdfJykpIHsKLSAgICAgIGxhc3Rfd2FzX3Blcmlv
ZCA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAobmFtZVtpXSA9PSAnLicpIHsKLSAgICAgIGlmIChs
YXN0X3dhc19wZXJpb2QpIHJldHVybiBmYWxzZTsKLSAgICAgIGxhc3Rfd2FzX3BlcmlvZCA9IHRy
dWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBy
ZXR1cm4gIW5hbWUuZW1wdHkoKSAmJiAhbGFzdF93YXNfcGVyaW9kOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLS8vIFRoaXMgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpcyBnb29kIGZvciBhbGwgZGVz
Y3JpcHRvcnMgZXhjZXB0Ci0vLyBGaWxlRGVzY3JpcHRvci4KLXRlbXBsYXRlPGNsYXNzIERlc2Ny
aXB0b3JUPiB2b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpBbGxvY2F0ZU9wdGlvbnMoCi0gICAgY29u
c3QgdHlwZW5hbWUgRGVzY3JpcHRvclQ6Ok9wdGlvbnNUeXBlJiBvcmlnX29wdGlvbnMsCi0gICAg
RGVzY3JpcHRvclQqIGRlc2NyaXB0b3IpIHsKLSAgQWxsb2NhdGVPcHRpb25zSW1wbChkZXNjcmlw
dG9yLT5mdWxsX25hbWUoKSwgZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgb3JpZ19vcHRpb25zLCBkZXNjcmlwdG9yKTsKLX0KLQotLy8gV2Ugc3BlY2lhbGl6
ZSBmb3IgRmlsZURlc2NyaXB0b3IuCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpBbGxvY2F0ZU9w
dGlvbnMoY29uc3QgRmlsZU9wdGlvbnMmIG9yaWdfb3B0aW9ucywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICAv
LyBXZSBhZGQgdGhlIGR1bW15IHRva2VuIHNvIHRoYXQgTG9va3VwU3ltYm9sIGRvZXMgdGhlIHJp
Z2h0IHRoaW5nLgotICBBbGxvY2F0ZU9wdGlvbnNJbXBsKGRlc2NyaXB0b3ItPnBhY2thZ2UoKSAr
ICIuZHVtbXkiLCBkZXNjcmlwdG9yLT5uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgb3Jp
Z19vcHRpb25zLCBkZXNjcmlwdG9yKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVzY3JpcHRvclQ+
IHZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OkFsbG9jYXRlT3B0aW9uc0ltcGwoCi0gICAgY29uc3Qg
c3RyaW5nJiBuYW1lX3Njb3BlLAotICAgIGNvbnN0IHN0cmluZyYgZWxlbWVudF9uYW1lLAotICAg
IGNvbnN0IHR5cGVuYW1lIERlc2NyaXB0b3JUOjpPcHRpb25zVHlwZSYgb3JpZ19vcHRpb25zLAot
ICAgIERlc2NyaXB0b3JUKiBkZXNjcmlwdG9yKSB7Ci0gIC8vIFdlIG5lZWQgdG8gdXNlIGEgZHVt
bXkgcG9pbnRlciB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBvbGRlciB2ZXJzaW9ucyBvZgotICAv
LyBHQ0MuICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGNvdWxkIGJlIHJlcGxh
Y2VkIHdpdGg6Ci0gIC8vICAgdHlwZW5hbWUgRGVzY3JpcHRvclQ6Ok9wdGlvbnNUeXBlKiBvcHRp
b25zID0KLSAgLy8gICAgICAgdGFibGVzXy0+QWxsb2NhdGVNZXNzYWdlPHR5cGVuYW1lIERlc2Ny
aXB0b3JUOjpPcHRpb25zVHlwZT4oKTsKLSAgdHlwZW5hbWUgRGVzY3JpcHRvclQ6Ok9wdGlvbnNU
eXBlKiBjb25zdCBkdW1teSA9IE5VTEw7Ci0gIHR5cGVuYW1lIERlc2NyaXB0b3JUOjpPcHRpb25z
VHlwZSogb3B0aW9ucyA9IHRhYmxlc18tPkFsbG9jYXRlTWVzc2FnZShkdW1teSk7Ci0gIC8vIEF2
b2lkIHVzaW5nIE1lcmdlRnJvbSgpL0NvcHlGcm9tKCkgaW4gdGhpcyBjbGFzcyB0byBtYWtlIGl0
IC1mbm8tcnR0aQotICAvLyBmcmllbmRseS4gV2l0aG91dCBSVFRJLCBNZXJnZUZyb20oKSBhbmQg
Q29weUZyb20oKSB3aWxsIGZhbGxiYWNrIHRvIHRoZQotICAvLyByZWZsZWN0aW9uIGJhc2VkIG1l
dGhvZCwgd2hpY2ggcmVxdWlyZXMgdGhlIERlc2NyaXB0b3IuIEhvd2V2ZXIsIHdlIGFyZSBpbgot
ICAvLyB0aGUgbWlkZGxlIG9mIGJ1aWxkaW5nIHRoZSBkZXNjcmlwdG9ycywgdGh1cyB0aGUgZGVh
ZGxvY2suCi0gIG9wdGlvbnMtPlBhcnNlRnJvbVN0cmluZyhvcmlnX29wdGlvbnMuU2VyaWFsaXpl
QXNTdHJpbmcoKSk7Ci0gIGRlc2NyaXB0b3ItPm9wdGlvbnNfID0gb3B0aW9uczsKLQotICAvLyBE
b24ndCBhZGQgdG8gb3B0aW9uc190b19pbnRlcnByZXRfIHVubGVzcyB0aGVyZSB3ZXJlIHVuaW50
ZXJwcmV0ZWQKLSAgLy8gb3B0aW9ucy4gIFRoaXMgbm90IG9ubHkgYXZvaWRzIHVubmVjZXNzYXJ5
IHdvcmssIGJ1dCBwcmV2ZW50cyBhCi0gIC8vIGJvb3RzdHJhcHBpbmcgcHJvYmxlbSB3aGVuIGJ1
aWxkaW5nIGRlc2NyaXB0b3JzIGZvciBkZXNjcmlwdG9yLnByb3RvLgotICAvLyBkZXNjcmlwdG9y
LnByb3RvIGRvZXMgbm90IGNvbnRhaW4gYW55IHVuaW50ZXJwcmV0ZWQgb3B0aW9ucywgYnV0Ci0g
IC8vIGF0dGVtcHRpbmcgdG8gaW50ZXJwcmV0IG9wdGlvbnMgYW55d2F5IHdpbGwgY2F1c2UKLSAg
Ly8gT3B0aW9uc1R5cGU6OkdldERlc2NyaXB0b3IoKSB0byBiZSBjYWxsZWQgd2hpY2ggbWF5IHRo
ZW4gZGVhZGxvY2sgc2luY2UKLSAgLy8gd2UncmUgc3RpbGwgdHJ5aW5nIHRvIGJ1aWxkIGl0Lgot
ICBpZiAob3B0aW9ucy0+dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpID4gMCkgewotICAgIG9w
dGlvbnNfdG9faW50ZXJwcmV0Xy5wdXNoX2JhY2soCi0gICAgICAgIE9wdGlvbnNUb0ludGVycHJl
dChuYW1lX3Njb3BlLCBlbGVtZW50X25hbWUsICZvcmlnX29wdGlvbnMsIG9wdGlvbnMpKTsKLSAg
fQotfQotCi0KLS8vIEEgY29tbW9uIHBhdHRlcm46ICBXZSB3YW50IHRvIGNvbnZlcnQgYSByZXBl
YXRlZCBmaWVsZCBpbiB0aGUgZGVzY3JpcHRvcgotLy8gdG8gYW4gYXJyYXkgb2YgdmFsdWVzLCBj
YWxsaW5nIHNvbWUgbWV0aG9kIHRvIGJ1aWxkIGVhY2ggdmFsdWUuCi0jZGVmaW5lIEJVSUxEX0FS
UkFZKElOUFVULCBPVVRQVVQsIE5BTUUsIE1FVEhPRCwgUEFSRU5UKSAgICAgICAgICAgICBcCi0g
IE9VVFBVVC0+TkFNRSMjX2NvdW50XyA9IElOUFVULk5BTUUjI19zaXplKCk7ICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIEFsbG9jYXRlQXJyYXkoSU5QVVQuTkFNRSMjX3NpemUoKSwgJk9VVFBV
VC0+TkFNRSMjc18pOyAgICAgICAgICAgICBcCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgSU5QVVQu
TkFNRSMjX3NpemUoKTsgaSsrKSB7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUVUSE9EKElO
UFVULk5BTUUoaSksIFBBUkVOVCwgT1VUUFVULT5OQU1FIyNzXyArIGkpOyAgICAgICAgICAgICBc
Ci0gIH0KLQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6QWRkUmVjdXJzaXZlSW1wb3J0RXJyb3Io
Ci0gICAgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgcHJvdG8sIGludCBmcm9tX2hlcmUpIHsK
LSAgc3RyaW5nIGVycm9yX21lc3NhZ2UoIkZpbGUgcmVjdXJzaXZlbHkgaW1wb3J0cyBpdHNlbGY6
ICIpOwotICBmb3IgKGludCBpID0gZnJvbV9oZXJlOyBpIDwgdGFibGVzXy0+cGVuZGluZ19maWxl
c18uc2l6ZSgpOyBpKyspIHsKLSAgICBlcnJvcl9tZXNzYWdlLmFwcGVuZCh0YWJsZXNfLT5wZW5k
aW5nX2ZpbGVzX1tpXSk7Ci0gICAgZXJyb3JfbWVzc2FnZS5hcHBlbmQoIiAtPiAiKTsKLSAgfQot
ICBlcnJvcl9tZXNzYWdlLmFwcGVuZChwcm90by5uYW1lKCkpOwotCi0gIEFkZEVycm9yKHByb3Rv
Lm5hbWUoKSwgcHJvdG8sIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6T1RIRVIsCi0g
ICAgICAgICAgIGVycm9yX21lc3NhZ2UpOwotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpB
ZGRUd2ljZUxpc3RlZEVycm9yKGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3RvLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgpIHsKLSAg
QWRkRXJyb3IocHJvdG8ubmFtZSgpLCBwcm90bywgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVj
dG9yOjpPVEhFUiwKLSAgICAgICAgICAgIkltcG9ydCBcIiIgKyBwcm90by5kZXBlbmRlbmN5KGlu
ZGV4KSArICJcIiB3YXMgbGlzdGVkIHR3aWNlLiIpOwotfQotCi12b2lkIERlc2NyaXB0b3JCdWls
ZGVyOjpBZGRJbXBvcnRFcnJvcihjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBwcm90bywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCkgewotICBzdHJp
bmcgbWVzc2FnZTsKLSAgaWYgKHBvb2xfLT5mYWxsYmFja19kYXRhYmFzZV8gPT0gTlVMTCkgewot
ICAgIG1lc3NhZ2UgPSAiSW1wb3J0IFwiIiArIHByb3RvLmRlcGVuZGVuY3koaW5kZXgpICsKLSAg
ICAgICAgICAgICAgIlwiIGhhcyBub3QgYmVlbiBsb2FkZWQuIjsKLSAgfSBlbHNlIHsKLSAgICBt
ZXNzYWdlID0gIkltcG9ydCBcIiIgKyBwcm90by5kZXBlbmRlbmN5KGluZGV4KSArCi0gICAgICAg
ICAgICAgICJcIiB3YXMgbm90IGZvdW5kIG9yIGhhZCBlcnJvcnMuIjsKLSAgfQotICBBZGRFcnJv
cihwcm90by5uYW1lKCksIHByb3RvLCBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok9U
SEVSLCBtZXNzYWdlKTsKLX0KLQotc3RhdGljIGJvb2wgRXhpc3RpbmdGaWxlTWF0Y2hlc1Byb3Rv
KGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBleGlzdGluZ19maWxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3RvKSB7Ci0g
IEZpbGVEZXNjcmlwdG9yUHJvdG8gZXhpc3RpbmdfcHJvdG87Ci0gIGV4aXN0aW5nX2ZpbGUtPkNv
cHlUbygmZXhpc3RpbmdfcHJvdG8pOwotICAvLyBUT0RPKGxpdWppc2kpOiBSZW1vdmUgaXQgd2hl
biBDb3B5VG8gc3VwcG9ydHMgY29weWluZyBzeW50YXggcGFyYW1zIHdoZW4KLSAgLy8gc3ludGF4
PSJwcm90bzIiLgotICBpZiAoZXhpc3RpbmdfZmlsZS0+c3ludGF4KCkgPT0gRmlsZURlc2NyaXB0
b3I6OlNZTlRBWF9QUk9UTzIgJiYKLSAgICAgIHByb3RvLmhhc19zeW50YXgoKSkgewotICAgIGV4
aXN0aW5nX3Byb3RvLnNldF9zeW50YXgoCi0gICAgICAgIGV4aXN0aW5nX2ZpbGUtPlN5bnRheE5h
bWUoZXhpc3RpbmdfZmlsZS0+c3ludGF4KCkpKTsKLSAgfQotCi0gIHJldHVybiBleGlzdGluZ19w
cm90by5TZXJpYWxpemVBc1N0cmluZygpID09IHByb3RvLlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci19
Ci0KLWNvbnN0IEZpbGVEZXNjcmlwdG9yKiBEZXNjcmlwdG9yQnVpbGRlcjo6QnVpbGRGaWxlKAot
ICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3RvKSB7Ci0gIGZpbGVuYW1lXyA9IHBy
b3RvLm5hbWUoKTsKLQotICAvLyBDaGVjayBpZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQg
aXMgaWRlbnRpY2FsIHRvIHRoZSBvbmUgYmVpbmcgYnVpbHQuCi0gIC8vIE5vdGU6ICBUaGlzIG9u
bHkgd29ya3MgaWYgdGhlIGlucHV0IGlzIGNhbm9uaWNhbCAtLSB0aGF0IGlzLCBpdAotICAvLyAg
IGZ1bGx5LXF1YWxpZmllcyBhbGwgdHlwZSBuYW1lcywgaGFzIG5vIFVuaW50ZXJwcmV0ZWRPcHRp
b25zLCBldGMuCi0gIC8vICAgVGhpcyBpcyBmaW5lLCBiZWNhdXNlIHRoaXMgaWRlbXBvdGVuY3kg
ImZlYXR1cmUiIHJlYWxseSBvbmx5IGV4aXN0cyB0bwotICAvLyAgIGFjY29tbW9kYXRlIG9uZSBo
YWNrIGluIHRoZSBwcm90bzEtPnByb3RvMiBtaWdyYXRpb24gbGF5ZXIuCi0gIGNvbnN0IEZpbGVE
ZXNjcmlwdG9yKiBleGlzdGluZ19maWxlID0gdGFibGVzXy0+RmluZEZpbGUoZmlsZW5hbWVfKTsK
LSAgaWYgKGV4aXN0aW5nX2ZpbGUgIT0gTlVMTCkgewotICAgIC8vIEZpbGUgYWxyZWFkeSBpbiBw
b29sLiAgQ29tcGFyZSB0aGUgZXhpc3Rpbmcgb25lIHRvIHRoZSBpbnB1dC4KLSAgICBpZiAoRXhp
c3RpbmdGaWxlTWF0Y2hlc1Byb3RvKGV4aXN0aW5nX2ZpbGUsIHByb3RvKSkgewotICAgICAgLy8g
VGhleSdyZSBpZGVudGljYWwuICBSZXR1cm4gdGhlIGV4aXN0aW5nIGRlc2NyaXB0b3IuCi0gICAg
ICByZXR1cm4gZXhpc3RpbmdfZmlsZTsKLSAgICB9Ci0KLSAgICAvLyBOb3QgYSBtYXRjaC4gIFRo
ZSBlcnJvciB3aWxsIGJlIGRldGVjdGVkIGFuZCBoYW5kbGVkIGxhdGVyLgotICB9Ci0KLSAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHRoaXMgZmlsZSBpcyBhbHJlYWR5IG9uIHRoZSBwZW5kaW5nIGZpbGVz
IGxpc3QuCi0gIC8vIFRPRE8oa2VudG9uKTogIEFsbG93IHJlY3Vyc2l2ZSBpbXBvcnRzPyAgSXQg
bWF5IG5vdCB3b3JrIHdpdGggc29tZQotICAvLyAgIChtb3N0PykgcHJvZ3JhbW1pbmcgbGFuZ3Vh
Z2VzLiAgRS5nLiwgaW4gQysrLCBhIGZvcndhcmQgZGVjbGFyYXRpb24KLSAgLy8gICBvZiBhIHR5
cGUgaXMgbm90IHN1ZmZpY2llbnQgdG8gYWxsb3cgaXQgdG8gYmUgdXNlZCBldmVuIGluIGEKLSAg
Ly8gICBnZW5lcmF0ZWQgaGVhZGVyIGZpbGUgZHVlIHRvIGlubGluaW5nLiAgVGhpcyBjb3VsZCBw
ZXJoYXBzIGJlCi0gIC8vICAgd29ya2VkIGFyb3VuZCB1c2luZyB0cmlja3MgaW52b2x2aW5nIGlu
c2VydGluZyAjaW5jbHVkZSBzdGF0ZW1lbnRzCi0gIC8vICAgbWlkLWZpbGUsIGJ1dCB0aGF0J3Mg
cHJldHR5IHVnbHksIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhlcmUgYXJlCi0gIC8vICAgc29tZSBs
YW5ndWFnZXMgb3V0IHRoZXJlIHRoYXQgZG8gbm90IGFsbG93IHJlY3Vyc2l2ZSBkZXBlbmRlbmNp
ZXMKLSAgLy8gICBhdCBhbGwuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGFibGVzXy0+cGVuZGlu
Z19maWxlc18uc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAodGFibGVzXy0+cGVuZGluZ19maWxlc19b
aV0gPT0gcHJvdG8ubmFtZSgpKSB7Ci0gICAgICBBZGRSZWN1cnNpdmVJbXBvcnRFcnJvcihwcm90
bywgaSk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gIH0KLQotICAvLyBJZiB3ZSBoYXZl
IGEgZmFsbGJhY2tfZGF0YWJhc2VfLCBhdHRlbXB0IHRvIGxvYWQgYWxsIGRlcGVuZGVuY2llcyBu
b3csCi0gIC8vIGJlZm9yZSBjaGVja3BvaW50aW5nIHRhYmxlc18uICBUaGlzIGF2b2lkcyBjb25m
dXNpb24gd2l0aCByZWN1cnNpdmUKLSAgLy8gY2hlY2twb2ludHMuCi0gIGlmIChwb29sXy0+ZmFs
bGJhY2tfZGF0YWJhc2VfICE9IE5VTEwpIHsKLSAgICB0YWJsZXNfLT5wZW5kaW5nX2ZpbGVzXy5w
dXNoX2JhY2socHJvdG8ubmFtZSgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvLmRl
cGVuZGVuY3lfc2l6ZSgpOyBpKyspIHsKLSAgICAgIGlmICh0YWJsZXNfLT5GaW5kRmlsZShwcm90
by5kZXBlbmRlbmN5KGkpKSA9PSBOVUxMICYmCi0gICAgICAgICAgKHBvb2xfLT51bmRlcmxheV8g
PT0gTlVMTCB8fAotICAgICAgICAgICBwb29sXy0+dW5kZXJsYXlfLT5GaW5kRmlsZUJ5TmFtZShw
cm90by5kZXBlbmRlbmN5KGkpKSA9PSBOVUxMKSkgewotICAgICAgICAvLyBXZSBkb24ndCBjYXJl
IHdoYXQgdGhpcyByZXR1cm5zIHNpbmNlIHdlJ2xsIGZpbmQgb3V0IGJlbG93IGFueXdheS4KLSAg
ICAgICAgcG9vbF8tPlRyeUZpbmRGaWxlSW5GYWxsYmFja0RhdGFiYXNlKHByb3RvLmRlcGVuZGVu
Y3koaSkpOwotICAgICAgfQotICAgIH0KLSAgICB0YWJsZXNfLT5wZW5kaW5nX2ZpbGVzXy5wb3Bf
YmFjaygpOwotICB9Ci0gIHJldHVybiBCdWlsZEZpbGVJbXBsKHByb3RvKTsKLX0KLQotY29uc3Qg
RmlsZURlc2NyaXB0b3IqIERlc2NyaXB0b3JCdWlsZGVyOjpCdWlsZEZpbGVJbXBsKAotICAgIGNv
bnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3RvKSB7Ci0gIC8vIENoZWNrcG9pbnQgdGhlIHRh
YmxlcyBzbyB0aGF0IHdlIGNhbiByb2xsIGJhY2sgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuCi0g
IHRhYmxlc18tPkFkZENoZWNrcG9pbnQoKTsKLQotICBGaWxlRGVzY3JpcHRvciogcmVzdWx0ID0g
dGFibGVzXy0+QWxsb2NhdGU8RmlsZURlc2NyaXB0b3I+KCk7Ci0gIGZpbGVfID0gcmVzdWx0Owot
Ci0gIHJlc3VsdC0+aXNfcGxhY2Vob2xkZXJfID0gZmFsc2U7Ci0gIGlmIChwcm90by5oYXNfc291
cmNlX2NvZGVfaW5mbygpKSB7Ci0gICAgU291cmNlQ29kZUluZm8gKmluZm8gPSB0YWJsZXNfLT5B
bGxvY2F0ZU1lc3NhZ2U8U291cmNlQ29kZUluZm8+KCk7Ci0gICAgaW5mby0+Q29weUZyb20ocHJv
dG8uc291cmNlX2NvZGVfaW5mbygpKTsKLSAgICByZXN1bHQtPnNvdXJjZV9jb2RlX2luZm9fID0g
aW5mbzsKLSAgfSBlbHNlIHsKLSAgICByZXN1bHQtPnNvdXJjZV9jb2RlX2luZm9fID0gJlNvdXJj
ZUNvZGVJbmZvOjpkZWZhdWx0X2luc3RhbmNlKCk7Ci0gIH0KLQotICBmaWxlX3RhYmxlc18gPSB0
YWJsZXNfLT5BbGxvY2F0ZUZpbGVUYWJsZXMoKTsKLSAgZmlsZV8tPnRhYmxlc18gPSBmaWxlX3Rh
Ymxlc187Ci0KLSAgaWYgKCFwcm90by5oYXNfbmFtZSgpKSB7Ci0gICAgQWRkRXJyb3IoIiIsIHBy
b3RvLCBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok9USEVSLAotICAgICAgICAgICAg
ICJNaXNzaW5nIGZpZWxkOiBGaWxlRGVzY3JpcHRvclByb3RvLm5hbWUuIik7Ci0gIH0KLQotICAv
LyBUT0RPKGxpdWppc2kpOiBSZXBvcnQgZXJyb3Igd2hlbiB0aGUgc3ludGF4IGlzIGVtcHR5IGFm
dGVyIGFsbCB0aGUgcHJvdG9zCi0gIC8vIGhhdmUgYWRkZWQgdGhlIHN5bnRheCBzdGF0ZW1lbnQu
Ci0gIGlmIChwcm90by5zeW50YXgoKS5lbXB0eSgpIHx8IHByb3RvLnN5bnRheCgpID09ICJwcm90
bzIiKSB7Ci0gICAgZmlsZV8tPnN5bnRheF8gPSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFYX1BST1RP
MjsKLSAgfSBlbHNlIGlmIChwcm90by5zeW50YXgoKSA9PSAicHJvdG8zIikgewotICAgIGZpbGVf
LT5zeW50YXhfID0gRmlsZURlc2NyaXB0b3I6OlNZTlRBWF9QUk9UTzM7Ci0gIH0gZWxzZSB7Ci0g
ICAgZmlsZV8tPnN5bnRheF8gPSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFYX1VOS05PV047Ci0gICAg
QWRkRXJyb3IocHJvdG8ubmFtZSgpLCBwcm90bywgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVj
dG9yOjpPVEhFUiwKLSAgICAgICAgICAgICAiVW5yZWNvZ25pemVkIHN5bnRheDogIiArIHByb3Rv
LnN5bnRheCgpKTsKLSAgfQotCi0gIHJlc3VsdC0+bmFtZV8gPSB0YWJsZXNfLT5BbGxvY2F0ZVN0
cmluZyhwcm90by5uYW1lKCkpOwotICBpZiAocHJvdG8uaGFzX3BhY2thZ2UoKSkgewotICAgIHJl
c3VsdC0+cGFja2FnZV8gPSB0YWJsZXNfLT5BbGxvY2F0ZVN0cmluZyhwcm90by5wYWNrYWdlKCkp
OwotICB9IGVsc2UgewotICAgIC8vIFdlIGNhbm5vdCByZWx5IG9uIHByb3RvLnBhY2thZ2UoKSBy
ZXR1cm5pbmcgYSB2YWxpZCBzdHJpbmcgaWYKLSAgICAvLyBwcm90by5oYXNfcGFja2FnZSgpIGlz
IGZhbHNlLCBiZWNhdXNlIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgYXQgc3RhdGljCi0gICAgLy8gaW5p
dGlhbGl6YXRpb24gdGltZSwgaW4gd2hpY2ggY2FzZSBkZWZhdWx0IHZhbHVlcyBoYXZlIG5vdCB5
ZXQgYmVlbgotICAgIC8vIGluaXRpYWxpemVkLgotICAgIHJlc3VsdC0+cGFja2FnZV8gPSB0YWJs
ZXNfLT5BbGxvY2F0ZVN0cmluZygiIik7Ci0gIH0KLSAgcmVzdWx0LT5wb29sXyA9IHBvb2xfOwot
Ci0gIC8vIEFkZCB0byB0YWJsZXMuCi0gIGlmICghdGFibGVzXy0+QWRkRmlsZShyZXN1bHQpKSB7
Ci0gICAgQWRkRXJyb3IocHJvdG8ubmFtZSgpLCBwcm90bywgRGVzY3JpcHRvclBvb2w6OkVycm9y
Q29sbGVjdG9yOjpPVEhFUiwKLSAgICAgICAgICAgICAiQSBmaWxlIHdpdGggdGhpcyBuYW1lIGlz
IGFscmVhZHkgaW4gdGhlIHBvb2wuIik7Ci0gICAgLy8gQmFpbCBvdXQgZWFybHkgc28gdGhhdCBp
ZiB0aGlzIGlzIGFjdHVhbGx5IHRoZSBleGFjdCBzYW1lIGZpbGUsIHdlCi0gICAgLy8gZG9uJ3Qg
ZW5kIHVwIHJlcG9ydGluZyB0aGF0IGV2ZXJ5IHNpbmdsZSBzeW1ib2wgaXMgYWxyZWFkeSBkZWZp
bmVkLgotICAgIHRhYmxlc18tPlJvbGxiYWNrVG9MYXN0Q2hlY2twb2ludCgpOwotICAgIHJldHVy
biBOVUxMOwotICB9Ci0gIGlmICghcmVzdWx0LT5wYWNrYWdlKCkuZW1wdHkoKSkgewotICAgIEFk
ZFBhY2thZ2UocmVzdWx0LT5wYWNrYWdlKCksIHByb3RvLCByZXN1bHQpOwotICB9Ci0KLSAgLy8g
TWFrZSBzdXJlIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZC4KLSAgc2V0PHN0cmluZz4gc2Vl
bl9kZXBlbmRlbmNpZXM7Ci0gIHJlc3VsdC0+ZGVwZW5kZW5jeV9jb3VudF8gPSBwcm90by5kZXBl
bmRlbmN5X3NpemUoKTsKLSAgcmVzdWx0LT5kZXBlbmRlbmNpZXNfID0KLSAgICB0YWJsZXNfLT5B
bGxvY2F0ZUFycmF5PGNvbnN0IEZpbGVEZXNjcmlwdG9yKj4ocHJvdG8uZGVwZW5kZW5jeV9zaXpl
KCkpOwotICB1bnVzZWRfZGVwZW5kZW5jeV8uY2xlYXIoKTsKLSAgc2V0PGludD4gd2Vha19kZXBz
OwotICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvLndlYWtfZGVwZW5kZW5jeV9zaXplKCk7ICsr
aSkgewotICAgIHdlYWtfZGVwcy5pbnNlcnQocHJvdG8ud2Vha19kZXBlbmRlbmN5KGkpKTsKLSAg
fQotICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvLmRlcGVuZGVuY3lfc2l6ZSgpOyBpKyspIHsK
LSAgICBpZiAoIXNlZW5fZGVwZW5kZW5jaWVzLmluc2VydChwcm90by5kZXBlbmRlbmN5KGkpKS5z
ZWNvbmQpIHsKLSAgICAgIEFkZFR3aWNlTGlzdGVkRXJyb3IocHJvdG8sIGkpOwotICAgIH0KLQot
ICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBkZXBlbmRlbmN5ID0gdGFibGVzXy0+RmluZEZpbGUo
cHJvdG8uZGVwZW5kZW5jeShpKSk7Ci0gICAgaWYgKGRlcGVuZGVuY3kgPT0gTlVMTCAmJiBwb29s
Xy0+dW5kZXJsYXlfICE9IE5VTEwpIHsKLSAgICAgIGRlcGVuZGVuY3kgPSBwb29sXy0+dW5kZXJs
YXlfLT5GaW5kRmlsZUJ5TmFtZShwcm90by5kZXBlbmRlbmN5KGkpKTsKLSAgICB9Ci0KLSAgICBp
ZiAoZGVwZW5kZW5jeSA9PSBOVUxMKSB7Ci0gICAgICBpZiAocG9vbF8tPmFsbG93X3Vua25vd25f
IHx8Ci0gICAgICAgICAgKCFwb29sXy0+ZW5mb3JjZV93ZWFrXyAmJiB3ZWFrX2RlcHMuZmluZChp
KSAhPSB3ZWFrX2RlcHMuZW5kKCkpKSB7Ci0gICAgICAgIGRlcGVuZGVuY3kgPSBOZXdQbGFjZWhv
bGRlckZpbGUocHJvdG8uZGVwZW5kZW5jeShpKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBB
ZGRJbXBvcnRFcnJvcihwcm90bywgaSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8v
IEFkZCB0byB1bnVzZWRfZGVwZW5kZW5jeV8gdG8gdHJhY2sgdW51c2VkIGltcG9ydGVkIGZpbGVz
LgotICAgICAgLy8gTm90ZTogZG8gbm90IHRyYWNrIHVudXNlZCBpbXBvcnRlZCBmaWxlcyBmb3Ig
cHVibGljIGltcG9ydC4KLSAgICAgIGlmIChwb29sXy0+ZW5mb3JjZV9kZXBlbmRlbmNpZXNfICYm
Ci0gICAgICAgICAgKHBvb2xfLT51bnVzZWRfaW1wb3J0X3RyYWNrX2ZpbGVzXy5maW5kKHByb3Rv
Lm5hbWUoKSkgIT0KLSAgICAgICAgICAgcG9vbF8tPnVudXNlZF9pbXBvcnRfdHJhY2tfZmlsZXNf
LmVuZCgpKSAmJgotICAgICAgICAgIChkZXBlbmRlbmN5LT5wdWJsaWNfZGVwZW5kZW5jeV9jb3Vu
dCgpID09IDApKSB7Ci0gICAgICAgIHVudXNlZF9kZXBlbmRlbmN5Xy5pbnNlcnQoZGVwZW5kZW5j
eSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0LT5kZXBlbmRlbmNpZXNfW2ldID0gZGVw
ZW5kZW5jeTsKLSAgfQotCi0gIC8vIENoZWNrIHB1YmxpYyBkZXBlbmRlbmNpZXMuCi0gIGludCBw
dWJsaWNfZGVwZW5kZW5jeV9jb3VudCA9IDA7Ci0gIHJlc3VsdC0+cHVibGljX2RlcGVuZGVuY2ll
c18gPSB0YWJsZXNfLT5BbGxvY2F0ZUFycmF5PGludD4oCi0gICAgICBwcm90by5wdWJsaWNfZGVw
ZW5kZW5jeV9zaXplKCkpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvLnB1YmxpY19kZXBl
bmRlbmN5X3NpemUoKTsgaSsrKSB7Ci0gICAgLy8gT25seSBwdXQgdmFsaWQgcHVibGljIGRlcGVu
ZGVuY3kgaW5kZXhlcy4KLSAgICBpbnQgaW5kZXggPSBwcm90by5wdWJsaWNfZGVwZW5kZW5jeShp
KTsKLSAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHByb3RvLmRlcGVuZGVuY3lfc2l6ZSgp
KSB7Ci0gICAgICByZXN1bHQtPnB1YmxpY19kZXBlbmRlbmNpZXNfW3B1YmxpY19kZXBlbmRlbmN5
X2NvdW50KytdID0gaW5kZXg7Ci0gICAgICAvLyBEbyBub3QgdHJhY2sgdW51c2VkIGltcG9ydGVk
IGZpbGVzIGZvciBwdWJsaWMgaW1wb3J0LgotICAgICAgdW51c2VkX2RlcGVuZGVuY3lfLmVyYXNl
KHJlc3VsdC0+ZGVwZW5kZW5jeShpbmRleCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBBZGRFcnJv
cihwcm90by5uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVy
cm9yQ29sbGVjdG9yOjpPVEhFUiwKLSAgICAgICAgICAgICAgICJJbnZhbGlkIHB1YmxpYyBkZXBl
bmRlbmN5IGluZGV4LiIpOwotICAgIH0KLSAgfQotICByZXN1bHQtPnB1YmxpY19kZXBlbmRlbmN5
X2NvdW50XyA9IHB1YmxpY19kZXBlbmRlbmN5X2NvdW50OwotCi0gIC8vIEJ1aWxkIGRlcGVuZGVu
Y3kgc2V0Ci0gIGRlcGVuZGVuY2llc18uY2xlYXIoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
ZXN1bHQtPmRlcGVuZGVuY3lfY291bnQoKTsgaSsrKSB7Ci0gICAgUmVjb3JkUHVibGljRGVwZW5k
ZW5jaWVzKHJlc3VsdC0+ZGVwZW5kZW5jeShpKSk7Ci0gIH0KLQotICAvLyBDaGVjayB3ZWFrIGRl
cGVuZGVuY2llcy4KLSAgaW50IHdlYWtfZGVwZW5kZW5jeV9jb3VudCA9IDA7Ci0gIHJlc3VsdC0+
d2Vha19kZXBlbmRlbmNpZXNfID0gdGFibGVzXy0+QWxsb2NhdGVBcnJheTxpbnQ+KAotICAgICAg
cHJvdG8ud2Vha19kZXBlbmRlbmN5X3NpemUoKSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcHJv
dG8ud2Vha19kZXBlbmRlbmN5X3NpemUoKTsgaSsrKSB7Ci0gICAgaW50IGluZGV4ID0gcHJvdG8u
d2Vha19kZXBlbmRlbmN5KGkpOwotICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgcHJvdG8u
ZGVwZW5kZW5jeV9zaXplKCkpIHsKLSAgICAgIHJlc3VsdC0+d2Vha19kZXBlbmRlbmNpZXNfW3dl
YWtfZGVwZW5kZW5jeV9jb3VudCsrXSA9IGluZGV4OwotICAgIH0gZWxzZSB7Ci0gICAgICBBZGRF
cnJvcihwcm90by5uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6
OkVycm9yQ29sbGVjdG9yOjpPVEhFUiwKLSAgICAgICAgICAgICAgICJJbnZhbGlkIHdlYWsgZGVw
ZW5kZW5jeSBpbmRleC4iKTsKLSAgICB9Ci0gIH0KLSAgcmVzdWx0LT53ZWFrX2RlcGVuZGVuY3lf
Y291bnRfID0gd2Vha19kZXBlbmRlbmN5X2NvdW50OwotCi0gIC8vIENvbnZlcnQgY2hpbGRyZW4u
Ci0gIEJVSUxEX0FSUkFZKHByb3RvLCByZXN1bHQsIG1lc3NhZ2VfdHlwZSwgQnVpbGRNZXNzYWdl
ICAsIE5VTEwpOwotICBCVUlMRF9BUlJBWShwcm90bywgcmVzdWx0LCBlbnVtX3R5cGUgICAsIEJ1
aWxkRW51bSAgICAgLCBOVUxMKTsKLSAgQlVJTERfQVJSQVkocHJvdG8sIHJlc3VsdCwgc2Vydmlj
ZSAgICAgLCBCdWlsZFNlcnZpY2UgICwgTlVMTCk7Ci0gIEJVSUxEX0FSUkFZKHByb3RvLCByZXN1
bHQsIGV4dGVuc2lvbiAgICwgQnVpbGRFeHRlbnNpb24sIE5VTEwpOwotCi0gIC8vIENvcHkgb3B0
aW9ucy4KLSAgaWYgKCFwcm90by5oYXNfb3B0aW9ucygpKSB7Ci0gICAgcmVzdWx0LT5vcHRpb25z
XyA9IE5VTEw7ICAvLyBXaWxsIHNldCB0byBkZWZhdWx0X2luc3RhbmNlIGxhdGVyLgotICB9IGVs
c2UgewotICAgIEFsbG9jYXRlT3B0aW9ucyhwcm90by5vcHRpb25zKCksIHJlc3VsdCk7Ci0gIH0K
LQotICAvLyBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBzdGVwcyBtdXN0IG9jY3VyIGluIGV4YWN0
bHkgdGhlIHNwZWNpZmllZCBvcmRlci4KLQotICAvLyBDcm9zcy1saW5rLgotICBDcm9zc0xpbmtG
aWxlKHJlc3VsdCwgcHJvdG8pOwotCi0gIC8vIEludGVycHJldCBhbnkgcmVtYWluaW5nIHVuaW50
ZXJwcmV0ZWQgb3B0aW9ucyBnYXRoZXJlZCBpbnRvCi0gIC8vIG9wdGlvbnNfdG9faW50ZXJwcmV0
XyBkdXJpbmcgZGVzY3JpcHRvciBidWlsZGluZy4gIENyb3NzLWxpbmtpbmcgaGFzIG1hZGUKLSAg
Ly8gZXh0ZW5zaW9uIG9wdGlvbnMga25vd24sIHNvIGFsbCBpbnRlcnByZXRhdGlvbnMgc2hvdWxk
IG5vdyBzdWNjZWVkLgotICBpZiAoIWhhZF9lcnJvcnNfKSB7Ci0gICAgT3B0aW9uSW50ZXJwcmV0
ZXIgb3B0aW9uX2ludGVycHJldGVyKHRoaXMpOwotICAgIGZvciAodmVjdG9yPE9wdGlvbnNUb0lu
dGVycHJldD46Oml0ZXJhdG9yIGl0ZXIgPQotICAgICAgICAgICAgIG9wdGlvbnNfdG9faW50ZXJw
cmV0Xy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBvcHRpb25zX3RvX2ludGVycHJldF8uZW5k
KCk7ICsraXRlcikgewotICAgICAgb3B0aW9uX2ludGVycHJldGVyLkludGVycHJldE9wdGlvbnMo
JigqaXRlcikpOwotICAgIH0KLSAgICBvcHRpb25zX3RvX2ludGVycHJldF8uY2xlYXIoKTsKLSAg
fQotCi0gIC8vIFZhbGlkYXRlIG9wdGlvbnMuCi0gIGlmICghaGFkX2Vycm9yc18pIHsKLSAgICBW
YWxpZGF0ZUZpbGVPcHRpb25zKHJlc3VsdCwgcHJvdG8pOwotICB9Ci0KLSAgLy8gQWRkaXRpb25h
bCBuYW1pbmcgY29uZmxpY3QgY2hlY2sgZm9yIG1hcCBlbnRyeSB0eXBlcy4gT25seSBuZWVkIHRv
IGNoZWNrCi0gIC8vIHRoaXMgaWYgdGhlcmUgYXJlIGFscmVhZHkgZXJyb3JzLgotICBpZiAoaGFk
X2Vycm9yc18pIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvLm1lc3NhZ2VfdHlwZV9z
aXplKCk7ICsraSkgewotICAgICAgRGV0ZWN0TWFwQ29uZmxpY3RzKHJlc3VsdC0+bWVzc2FnZV90
eXBlKGkpLCBwcm90by5tZXNzYWdlX3R5cGUoaSkpOwotICAgIH0KLSAgfQotCi0KLSAgaWYgKCF1
bnVzZWRfZGVwZW5kZW5jeV8uZW1wdHkoKSkgewotICAgIExvZ1VudXNlZERlcGVuZGVuY3kocHJv
dG8sIHJlc3VsdCk7Ci0gIH0KLQotICBpZiAoaGFkX2Vycm9yc18pIHsKLSAgICB0YWJsZXNfLT5S
b2xsYmFja1RvTGFzdENoZWNrcG9pbnQoKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfSBlbHNlIHsK
LSAgICB0YWJsZXNfLT5DbGVhckxhc3RDaGVja3BvaW50KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LSAgfQotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpCdWlsZE1lc3NhZ2UoY29uc3QgRGVz
Y3JpcHRvclByb3RvJiBwcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBEZXNjcmlwdG9yKiBwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGVzY3JpcHRvciogcmVzdWx0KSB7Ci0gIGNvbnN0IHN0cmluZyYgc2NvcGUgPSAo
cGFyZW50ID09IE5VTEwpID8KLSAgICBmaWxlXy0+cGFja2FnZSgpIDogcGFyZW50LT5mdWxsX25h
bWUoKTsKLSAgc3RyaW5nKiBmdWxsX25hbWUgPSB0YWJsZXNfLT5BbGxvY2F0ZVN0cmluZyhzY29w
ZSk7Ci0gIGlmICghZnVsbF9uYW1lLT5lbXB0eSgpKSBmdWxsX25hbWUtPmFwcGVuZCgxLCAnLicp
OwotICBmdWxsX25hbWUtPmFwcGVuZChwcm90by5uYW1lKCkpOwotCi0gIFZhbGlkYXRlU3ltYm9s
TmFtZShwcm90by5uYW1lKCksICpmdWxsX25hbWUsIHByb3RvKTsKLQotICByZXN1bHQtPm5hbWVf
ICAgICAgICAgICAgPSB0YWJsZXNfLT5BbGxvY2F0ZVN0cmluZyhwcm90by5uYW1lKCkpOwotICBy
ZXN1bHQtPmZ1bGxfbmFtZV8gICAgICAgPSBmdWxsX25hbWU7Ci0gIHJlc3VsdC0+ZmlsZV8gICAg
ICAgICAgICA9IGZpbGVfOwotICByZXN1bHQtPmNvbnRhaW5pbmdfdHlwZV8gPSBwYXJlbnQ7Ci0g
IHJlc3VsdC0+aXNfcGxhY2Vob2xkZXJfICA9IGZhbHNlOwotICByZXN1bHQtPmlzX3VucXVhbGlm
aWVkX3BsYWNlaG9sZGVyXyA9IGZhbHNlOwotCi0gIC8vIEJ1aWxkIG9uZW9mcyBmaXJzdCBzbyB0
aGF0IGZpZWxkcyBhbmQgZXh0ZW5zaW9uIHJhbmdlcyBjYW4gcmVmZXIgdG8gdGhlbS4KLSAgQlVJ
TERfQVJSQVkocHJvdG8sIHJlc3VsdCwgb25lb2ZfZGVjbCAgICAgLCBCdWlsZE9uZW9mICAgICAg
ICAgLCByZXN1bHQpOwotICBCVUlMRF9BUlJBWShwcm90bywgcmVzdWx0LCBmaWVsZCAgICAgICAg
ICAsIEJ1aWxkRmllbGQgICAgICAgICAsIHJlc3VsdCk7Ci0gIEJVSUxEX0FSUkFZKHByb3RvLCBy
ZXN1bHQsIG5lc3RlZF90eXBlICAgICwgQnVpbGRNZXNzYWdlICAgICAgICwgcmVzdWx0KTsKLSAg
QlVJTERfQVJSQVkocHJvdG8sIHJlc3VsdCwgZW51bV90eXBlICAgICAgLCBCdWlsZEVudW0gICAg
ICAgICAgLCByZXN1bHQpOwotICBCVUlMRF9BUlJBWShwcm90bywgcmVzdWx0LCBleHRlbnNpb25f
cmFuZ2UsIEJ1aWxkRXh0ZW5zaW9uUmFuZ2UsIHJlc3VsdCk7Ci0gIEJVSUxEX0FSUkFZKHByb3Rv
LCByZXN1bHQsIGV4dGVuc2lvbiAgICAgICwgQnVpbGRFeHRlbnNpb24gICAgICwgcmVzdWx0KTsK
LSAgQlVJTERfQVJSQVkocHJvdG8sIHJlc3VsdCwgcmVzZXJ2ZWRfcmFuZ2UgLCBCdWlsZFJlc2Vy
dmVkUmFuZ2UgLCByZXN1bHQpOwotCi0gIC8vIENvcHkgcmVzZXJ2ZWQgbmFtZXMuCi0gIGludCBy
ZXNlcnZlZF9uYW1lX2NvdW50ID0gcHJvdG8ucmVzZXJ2ZWRfbmFtZV9zaXplKCk7Ci0gIHJlc3Vs
dC0+cmVzZXJ2ZWRfbmFtZV9jb3VudF8gPSByZXNlcnZlZF9uYW1lX2NvdW50OwotICByZXN1bHQt
PnJlc2VydmVkX25hbWVzXyA9Ci0gICAgICB0YWJsZXNfLT5BbGxvY2F0ZUFycmF5PGNvbnN0IHN0
cmluZyo+KHJlc2VydmVkX25hbWVfY291bnQpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHJlc2Vy
dmVkX25hbWVfY291bnQ7ICsraSkgewotICAgIHJlc3VsdC0+cmVzZXJ2ZWRfbmFtZXNfW2ldID0K
LSAgICAgICAgdGFibGVzXy0+QWxsb2NhdGVTdHJpbmcocHJvdG8ucmVzZXJ2ZWRfbmFtZShpKSk7
Ci0gIH0KLQotICAvLyBDb3B5IG9wdGlvbnMuCi0gIGlmICghcHJvdG8uaGFzX29wdGlvbnMoKSkg
ewotICAgIHJlc3VsdC0+b3B0aW9uc18gPSBOVUxMOyAgLy8gV2lsbCBzZXQgdG8gZGVmYXVsdF9p
bnN0YW5jZSBsYXRlci4KLSAgfSBlbHNlIHsKLSAgICBBbGxvY2F0ZU9wdGlvbnMocHJvdG8ub3B0
aW9ucygpLCByZXN1bHQpOwotICB9Ci0KLSAgQWRkU3ltYm9sKHJlc3VsdC0+ZnVsbF9uYW1lKCks
IHBhcmVudCwgcmVzdWx0LT5uYW1lKCksCi0gICAgICAgICAgICBwcm90bywgU3ltYm9sKHJlc3Vs
dCkpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvdG8ucmVzZXJ2ZWRfcmFuZ2Vfc2l6ZSgp
OyBpKyspIHsKLSAgICBjb25zdCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSYgcmFuZ2Ux
ID0gcHJvdG8ucmVzZXJ2ZWRfcmFuZ2UoaSk7Ci0gICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwg
cHJvdG8ucmVzZXJ2ZWRfcmFuZ2Vfc2l6ZSgpOyBqKyspIHsKLSAgICAgIGNvbnN0IERlc2NyaXB0
b3JQcm90b19SZXNlcnZlZFJhbmdlJiByYW5nZTIgPSBwcm90by5yZXNlcnZlZF9yYW5nZShqKTsK
LSAgICAgIGlmIChyYW5nZTEuZW5kKCkgPiByYW5nZTIuc3RhcnQoKSAmJiByYW5nZTIuZW5kKCkg
PiByYW5nZTEuc3RhcnQoKSkgewotICAgICAgICBBZGRFcnJvcihyZXN1bHQtPmZ1bGxfbmFtZSgp
LCBwcm90by5yZXNlcnZlZF9yYW5nZShpKSwKLSAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclBv
b2w6OkVycm9yQ29sbGVjdG9yOjpOVU1CRVIsCi0gICAgICAgICAgICAgICAgIHN0cmluZ3M6OlN1
YnN0aXR1dGUoIlJlc2VydmVkIHJhbmdlICQwIHRvICQxIG92ZXJsYXBzIHdpdGggIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHJlYWR5LWRlZmluZWQgcmFuZ2UgJDIg
dG8gJDMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTIuc3Rh
cnQoKSwgcmFuZ2UyLmVuZCgpIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByYW5nZTEuc3RhcnQoKSwgcmFuZ2UxLmVuZCgpIC0gMSkpOwotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIGhhc2hfc2V0PHN0cmluZz4gcmVzZXJ2ZWRfbmFtZV9zZXQ7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgcHJvdG8ucmVzZXJ2ZWRfbmFtZV9zaXplKCk7IGkrKykgewotICAgIGNvbnN0
IHN0cmluZyYgbmFtZSA9IHByb3RvLnJlc2VydmVkX25hbWUoaSk7Ci0gICAgaWYgKHJlc2VydmVk
X25hbWVfc2V0LmZpbmQobmFtZSkgPT0gcmVzZXJ2ZWRfbmFtZV9zZXQuZW5kKCkpIHsKLSAgICAg
IHJlc2VydmVkX25hbWVfc2V0Lmluc2VydChuYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgQWRk
RXJyb3IobmFtZSwgcHJvdG8sIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6TkFNRSwK
LSAgICAgICAgICAgICAgIHN0cmluZ3M6OlN1YnN0aXR1dGUoCi0gICAgICAgICAgICAgICAgICJG
aWVsZCBuYW1lIFwiJDBcIiBpcyByZXNlcnZlZCBtdWx0aXBsZSB0aW1lcy4iLAotICAgICAgICAg
ICAgICAgICBuYW1lKSk7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1
bHQtPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmll
bGQgPSByZXN1bHQtPmZpZWxkKGkpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVzdWx0LT5l
eHRlbnNpb25fcmFuZ2VfY291bnQoKTsgaisrKSB7Ci0gICAgICBjb25zdCBEZXNjcmlwdG9yOjpF
eHRlbnNpb25SYW5nZSogcmFuZ2UgPSByZXN1bHQtPmV4dGVuc2lvbl9yYW5nZShqKTsKLSAgICAg
IGlmIChyYW5nZS0+c3RhcnQgPD0gZmllbGQtPm51bWJlcigpICYmIGZpZWxkLT5udW1iZXIoKSA8
IHJhbmdlLT5lbmQpIHsKLSAgICAgICAgQWRkRXJyb3IoZmllbGQtPmZ1bGxfbmFtZSgpLCBwcm90
by5leHRlbnNpb25fcmFuZ2UoaiksCi0gICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpF
cnJvckNvbGxlY3Rvcjo6TlVNQkVSLAotICAgICAgICAgICAgICAgICBzdHJpbmdzOjpTdWJzdGl0
dXRlKAotICAgICAgICAgICAgICAgICAgICJFeHRlbnNpb24gcmFuZ2UgJDAgdG8gJDEgaW5jbHVk
ZXMgZmllbGQgXCIkMlwiICgkMykuIiwKLSAgICAgICAgICAgICAgICAgICByYW5nZS0+c3RhcnQs
IHJhbmdlLT5lbmQgLSAxLAotICAgICAgICAgICAgICAgICAgIGZpZWxkLT5uYW1lKCksIGZpZWxk
LT5udW1iZXIoKSkpOwotICAgICAgfQotICAgIH0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHJl
c3VsdC0+cmVzZXJ2ZWRfcmFuZ2VfY291bnQoKTsgaisrKSB7Ci0gICAgICBjb25zdCBEZXNjcmlw
dG9yOjpSZXNlcnZlZFJhbmdlKiByYW5nZSA9IHJlc3VsdC0+cmVzZXJ2ZWRfcmFuZ2Uoaik7Ci0g
ICAgICBpZiAocmFuZ2UtPnN0YXJ0IDw9IGZpZWxkLT5udW1iZXIoKSAmJiBmaWVsZC0+bnVtYmVy
KCkgPCByYW5nZS0+ZW5kKSB7Ci0gICAgICAgIEFkZEVycm9yKGZpZWxkLT5mdWxsX25hbWUoKSwg
cHJvdG8ucmVzZXJ2ZWRfcmFuZ2UoaiksCi0gICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29s
OjpFcnJvckNvbGxlY3Rvcjo6TlVNQkVSLAotICAgICAgICAgICAgICAgICBzdHJpbmdzOjpTdWJz
dGl0dXRlKAotICAgICAgICAgICAgICAgICAgICJGaWVsZCBcIiQwXCIgdXNlcyByZXNlcnZlZCBu
dW1iZXIgJDEuIiwKLSAgICAgICAgICAgICAgICAgICBmaWVsZC0+bmFtZSgpLCBmaWVsZC0+bnVt
YmVyKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlc2VydmVkX25hbWVfc2V0LmZpbmQo
ZmllbGQtPm5hbWUoKSkgIT0gcmVzZXJ2ZWRfbmFtZV9zZXQuZW5kKCkpIHsKLSAgICAgIEFkZEVy
cm9yKGZpZWxkLT5mdWxsX25hbWUoKSwgcHJvdG8uZmllbGQoaSksCi0gICAgICAgICAgICAgICBE
ZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok5BTUUsCi0gICAgICAgICAgICAgICBzdHJp
bmdzOjpTdWJzdGl0dXRlKAotICAgICAgICAgICAgICAgICAiRmllbGQgbmFtZSBcIiQwXCIgaXMg
cmVzZXJ2ZWQuIiwgZmllbGQtPm5hbWUoKSkpOwotICAgIH0KLSAgfQotCi0gIC8vIENoZWNrIHRo
YXQgZXh0ZW5zaW9uIHJhbmdlcyBkb24ndCBvdmVybGFwIGFuZCBkb24ndCBpbmNsdWRlCi0gIC8v
IHJlc2VydmVkIGZpZWxkIG51bWJlcnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0LT5l
eHRlbnNpb25fcmFuZ2VfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgRGVzY3JpcHRvcjo6RXh0
ZW5zaW9uUmFuZ2UqIHJhbmdlMSA9IHJlc3VsdC0+ZXh0ZW5zaW9uX3JhbmdlKGkpOwotICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgcmVzdWx0LT5yZXNlcnZlZF9yYW5nZV9jb3VudCgpOyBqKyspIHsK
LSAgICAgIGNvbnN0IERlc2NyaXB0b3I6OlJlc2VydmVkUmFuZ2UqIHJhbmdlMiA9IHJlc3VsdC0+
cmVzZXJ2ZWRfcmFuZ2Uoaik7Ci0gICAgICBpZiAocmFuZ2UxLT5lbmQgPiByYW5nZTItPnN0YXJ0
ICYmIHJhbmdlMi0+ZW5kID4gcmFuZ2UxLT5zdGFydCkgewotICAgICAgICBBZGRFcnJvcihyZXN1
bHQtPmZ1bGxfbmFtZSgpLCBwcm90by5leHRlbnNpb25fcmFuZ2UoaiksCi0gICAgICAgICAgICAg
ICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6TlVNQkVSLAotICAgICAgICAgICAg
ICAgICBzdHJpbmdzOjpTdWJzdGl0dXRlKCJFeHRlbnNpb24gcmFuZ2UgJDAgdG8gJDEgb3Zlcmxh
cHMgd2l0aCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc2VydmVk
IHJhbmdlICQyIHRvICQzLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmFuZ2UxLT5zdGFydCwgcmFuZ2UxLT5lbmQgLSAxLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJhbmdlMi0+c3RhcnQsIHJhbmdlMi0+ZW5kIC0gMSkpOwotICAgICAgfQot
ICAgIH0KLSAgICBmb3IgKGludCBqID0gaSArIDE7IGogPCByZXN1bHQtPmV4dGVuc2lvbl9yYW5n
ZV9jb3VudCgpOyBqKyspIHsKLSAgICAgIGNvbnN0IERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdl
KiByYW5nZTIgPSByZXN1bHQtPmV4dGVuc2lvbl9yYW5nZShqKTsKLSAgICAgIGlmIChyYW5nZTEt
PmVuZCA+IHJhbmdlMi0+c3RhcnQgJiYgcmFuZ2UyLT5lbmQgPiByYW5nZTEtPnN0YXJ0KSB7Ci0g
ICAgICAgIEFkZEVycm9yKHJlc3VsdC0+ZnVsbF9uYW1lKCksIHByb3RvLmV4dGVuc2lvbl9yYW5n
ZShqKSwKLSAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpO
VU1CRVIsCi0gICAgICAgICAgICAgICAgIHN0cmluZ3M6OlN1YnN0aXR1dGUoIkV4dGVuc2lvbiBy
YW5nZSAkMCB0byAkMSBvdmVybGFwcyB3aXRoICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiYWxyZWFkeS1kZWZpbmVkIHJhbmdlICQyIHRvICQzLiIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UyLT5zdGFydCwgcmFuZ2UyLT5lbmQgLSAx
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlMS0+c3RhcnQsIHJh
bmdlMS0+ZW5kIC0gMSkpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0KLXZvaWQgRGVzY3Jp
cHRvckJ1aWxkZXI6OkJ1aWxkRmllbGRPckV4dGVuc2lvbihjb25zdCBGaWVsZERlc2NyaXB0b3JQ
cm90byYgcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRGVzY3JpcHRvciogcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvciogcmVzdWx0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZXh0ZW5zaW9uKSB7Ci0g
IGNvbnN0IHN0cmluZyYgc2NvcGUgPSAocGFyZW50ID09IE5VTEwpID8KLSAgICBmaWxlXy0+cGFj
a2FnZSgpIDogcGFyZW50LT5mdWxsX25hbWUoKTsKLSAgc3RyaW5nKiBmdWxsX25hbWUgPSB0YWJs
ZXNfLT5BbGxvY2F0ZVN0cmluZyhzY29wZSk7Ci0gIGlmICghZnVsbF9uYW1lLT5lbXB0eSgpKSBm
dWxsX25hbWUtPmFwcGVuZCgxLCAnLicpOwotICBmdWxsX25hbWUtPmFwcGVuZChwcm90by5uYW1l
KCkpOwotCi0gIFZhbGlkYXRlU3ltYm9sTmFtZShwcm90by5uYW1lKCksICpmdWxsX25hbWUsIHBy
b3RvKTsKLQotICByZXN1bHQtPm5hbWVfICAgICAgICAgPSB0YWJsZXNfLT5BbGxvY2F0ZVN0cmlu
Zyhwcm90by5uYW1lKCkpOwotICByZXN1bHQtPmZ1bGxfbmFtZV8gICAgPSBmdWxsX25hbWU7Ci0g
IHJlc3VsdC0+ZmlsZV8gICAgICAgICA9IGZpbGVfOwotICByZXN1bHQtPm51bWJlcl8gICAgICAg
PSBwcm90by5udW1iZXIoKTsKLSAgcmVzdWx0LT5pc19leHRlbnNpb25fID0gaXNfZXh0ZW5zaW9u
OwotCi0gIC8vIElmIC5wcm90byBmaWxlcyBmb2xsb3cgdGhlIHN0eWxlIGd1aWRlIHRoZW4gdGhl
IG5hbWUgc2hvdWxkIGFscmVhZHkgYmUKLSAgLy8gbG93ZXItY2FzZWQuICBJZiB0aGF0J3MgdGhl
IGNhc2Ugd2UgY2FuIGp1c3QgcmV1c2UgdGhlIHN0cmluZyB3ZSBhbHJlYWR5Ci0gIC8vIGFsbG9j
YXRlZCByYXRoZXIgdGhhbiBhbGxvY2F0ZSBhIG5ldyBvbmUuCi0gIHN0cmluZyBsb3dlcmNhc2Vf
bmFtZShwcm90by5uYW1lKCkpOwotICBMb3dlclN0cmluZygmbG93ZXJjYXNlX25hbWUpOwotICBp
ZiAobG93ZXJjYXNlX25hbWUgPT0gcHJvdG8ubmFtZSgpKSB7Ci0gICAgcmVzdWx0LT5sb3dlcmNh
c2VfbmFtZV8gPSByZXN1bHQtPm5hbWVfOwotICB9IGVsc2UgewotICAgIHJlc3VsdC0+bG93ZXJj
YXNlX25hbWVfID0gdGFibGVzXy0+QWxsb2NhdGVTdHJpbmcobG93ZXJjYXNlX25hbWUpOwotICB9
Ci0KLSAgLy8gRG9uJ3QgYm90aGVyIHdpdGggdGhlIGFib3ZlIG9wdGltaXphdGlvbiBmb3IgY2Ft
ZWwtY2FzZSBuYW1lcyBzaW5jZQotICAvLyAucHJvdG8gZmlsZXMgdGhhdCBmb2xsb3cgdGhlIGd1
aWRlIHNob3VsZG4ndCBiZSB1c2luZyBuYW1lcyBpbiB0aGlzCi0gIC8vIGZvcm1hdCwgc28gdGhl
IG9wdGltaXphdGlvbiB3b3VsZG4ndCBoZWxwIG11Y2guCi0gIHJlc3VsdC0+Y2FtZWxjYXNlX25h
bWVfID0KLSAgICAgIHRhYmxlc18tPkFsbG9jYXRlU3RyaW5nKFRvQ2FtZWxDYXNlKHByb3RvLm5h
bWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvd2Vy
X2ZpcnN0ID0gKi8gdHJ1ZSkpOwotCi0gIGlmIChwcm90by5oYXNfanNvbl9uYW1lKCkpIHsKLSAg
ICByZXN1bHQtPmhhc19qc29uX25hbWVfID0gdHJ1ZTsKLSAgICByZXN1bHQtPmpzb25fbmFtZV8g
PSB0YWJsZXNfLT5BbGxvY2F0ZVN0cmluZyhwcm90by5qc29uX25hbWUoKSk7Ci0gIH0gZWxzZSB7
Ci0gICAgcmVzdWx0LT5oYXNfanNvbl9uYW1lXyA9IGZhbHNlOwotICAgIHJlc3VsdC0+anNvbl9u
YW1lXyA9IHJlc3VsdC0+Y2FtZWxjYXNlX25hbWVfOwotICB9Ci0KLSAgLy8gU29tZSBjb21waWxl
cnMgZG8gbm90IGFsbG93IHN0YXRpY19jYXN0IGRpcmVjdGx5IGJldHdlZW4gdHdvIGVudW0gdHlw
ZXMsCi0gIC8vIHNvIHdlIG11c3QgY2FzdCB0byBpbnQgZmlyc3QuCi0gIHJlc3VsdC0+dHlwZV8g
ID0gc3RhdGljX2Nhc3Q8RmllbGREZXNjcmlwdG9yOjpUeXBlPigKLSAgICAgICAgICAgICAgICAg
ICAgIGltcGxpY2l0X2Nhc3Q8aW50Pihwcm90by50eXBlKCkpKTsKLSAgcmVzdWx0LT5sYWJlbF8g
PSBzdGF0aWNfY2FzdDxGaWVsZERlc2NyaXB0b3I6OkxhYmVsPigKLSAgICAgICAgICAgICAgICAg
ICAgIGltcGxpY2l0X2Nhc3Q8aW50Pihwcm90by5sYWJlbCgpKSk7Ci0KLSAgLy8gQW4gZXh0ZW5z
aW9uIGNhbm5vdCBoYXZlIGEgcmVxdWlyZWQgZmllbGQgKGIvMTMzNjU4MzYpLgotICBpZiAocmVz
dWx0LT5pc19leHRlbnNpb25fICYmCi0gICAgICByZXN1bHQtPmxhYmVsXyA9PSBGaWVsZERlc2Ny
aXB0b3I6OkxBQkVMX1JFUVVJUkVEKSB7Ci0gICAgQWRkRXJyb3IocmVzdWx0LT5mdWxsX25hbWUo
KSwgcHJvdG8sCi0gICAgICAgICAgICAgLy8gRXJyb3IgbG9jYXRpb24gYFRZUEVgOiB3ZSB3b3Vs
ZCByZWFsbHkgbGlrZSB0byBpbmRpY2F0ZQotICAgICAgICAgICAgIC8vIGBMQUJFTGAsIGJ1dCB0
aGUgYEVycm9yTG9jYXRpb25gIGVudW0gaGFzIG5vIGVudHJ5IGZvciB0aGlzLCBhbmQKLSAgICAg
ICAgICAgICAvLyB3ZSBkb24ndCBuZWNlc3NhcmlseSBrbm93IGFib3V0IGFsbCBpbXBsZW1lbnRh
dGlvbnMgb2YgdGhlCi0gICAgICAgICAgICAgLy8gYEVycm9yQ29sbGVjdG9yYCBpbnRlcmZhY2Ug
dG8gZXh0ZW5kIHRoZW0gdG8gaGFuZGxlIHRoZSBuZXcKLSAgICAgICAgICAgICAvLyBlcnJvciBs
b2NhdGlvbiB0eXBlIHByb3Blcmx5LgotICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJv
ckNvbGxlY3Rvcjo6VFlQRSwKLSAgICAgICAgICAgICAiTWVzc2FnZSBleHRlbnNpb25zIGNhbm5v
dCBoYXZlIHJlcXVpcmVkIGZpZWxkcy4iKTsKLSAgfQotCi0gIC8vIFNvbWUgb2YgdGhlc2UgbWF5
IGJlIGZpbGxlZCBpbiB3aGVuIGNyb3NzLWxpbmtpbmcuCi0gIHJlc3VsdC0+Y29udGFpbmluZ190
eXBlXyA9IE5VTEw7Ci0gIHJlc3VsdC0+ZXh0ZW5zaW9uX3Njb3BlXyA9IE5VTEw7Ci0gIHJlc3Vs
dC0+bWVzc2FnZV90eXBlXyA9IE5VTEw7Ci0gIHJlc3VsdC0+ZW51bV90eXBlXyA9IE5VTEw7Ci0K
LSAgcmVzdWx0LT5oYXNfZGVmYXVsdF92YWx1ZV8gPSBwcm90by5oYXNfZGVmYXVsdF92YWx1ZSgp
OwotICBpZiAocHJvdG8uaGFzX2RlZmF1bHRfdmFsdWUoKSAmJiByZXN1bHQtPmlzX3JlcGVhdGVk
KCkpIHsKLSAgICBBZGRFcnJvcihyZXN1bHQtPmZ1bGxfbmFtZSgpLCBwcm90bywKLSAgICAgICAg
ICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OkRFRkFVTFRfVkFMVUUsCi0gICAg
ICAgICAgICAgIlJlcGVhdGVkIGZpZWxkcyBjYW4ndCBoYXZlIGRlZmF1bHQgdmFsdWVzLiIpOwot
ICB9Ci0KLSAgaWYgKHByb3RvLmhhc190eXBlKCkpIHsKLSAgICBpZiAocHJvdG8uaGFzX2RlZmF1
bHRfdmFsdWUoKSkgewotICAgICAgY2hhciogZW5kX3BvcyA9IE5VTEw7Ci0gICAgICBzd2l0Y2gg
KHJlc3VsdC0+Y3BwX3R5cGUoKSkgewotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQ
VFlQRV9JTlQzMjoKLSAgICAgICAgICByZXN1bHQtPmRlZmF1bHRfdmFsdWVfaW50MzJfID0KLSAg
ICAgICAgICAgIHN0cnRvbChwcm90by5kZWZhdWx0X3ZhbHVlKCkuY19zdHIoKSwgJmVuZF9wb3Ms
IDApOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQ
VFlQRV9JTlQ2NDoKLSAgICAgICAgICByZXN1bHQtPmRlZmF1bHRfdmFsdWVfaW50NjRfID0KLSAg
ICAgICAgICAgIHN0cnRvNjQocHJvdG8uZGVmYXVsdF92YWx1ZSgpLmNfc3RyKCksICZlbmRfcG9z
LCAwKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfVUlOVDMyOgotICAgICAgICAgIHJlc3VsdC0+ZGVmYXVsdF92YWx1ZV91aW50MzJfID0K
LSAgICAgICAgICAgIHN0cnRvdWwocHJvdG8uZGVmYXVsdF92YWx1ZSgpLmNfc3RyKCksICZlbmRf
cG9zLCAwKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfVUlOVDY0OgotICAgICAgICAgIHJlc3VsdC0+ZGVmYXVsdF92YWx1ZV91aW50NjRf
ID0KLSAgICAgICAgICAgIHN0cnRvdTY0KHByb3RvLmRlZmF1bHRfdmFsdWUoKS5jX3N0cigpLCAm
ZW5kX3BvcywgMCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX0ZMT0FUOgotICAgICAgICAgIGlmIChwcm90by5kZWZhdWx0X3ZhbHVlKCkg
PT0gImluZiIpIHsKLSAgICAgICAgICAgIHJlc3VsdC0+ZGVmYXVsdF92YWx1ZV9mbG9hdF8gPSBu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChw
cm90by5kZWZhdWx0X3ZhbHVlKCkgPT0gIi1pbmYiKSB7Ci0gICAgICAgICAgICByZXN1bHQtPmRl
ZmF1bHRfdmFsdWVfZmxvYXRfID0gLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsK
LSAgICAgICAgICB9IGVsc2UgaWYgKHByb3RvLmRlZmF1bHRfdmFsdWUoKSA9PSAibmFuIikgewot
ICAgICAgICAgICAgcmVzdWx0LT5kZWZhdWx0X3ZhbHVlX2Zsb2F0XyA9IG51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgICAgfSBlbHNlICB7Ci0gICAgICAgICAgICBy
ZXN1bHQtPmRlZmF1bHRfdmFsdWVfZmxvYXRfID0gaW86OlNhZmVEb3VibGVUb0Zsb2F0KAotICAg
ICAgICAgICAgICAgIGlvOjpOb0xvY2FsZVN0cnRvZChwcm90by5kZWZhdWx0X3ZhbHVlKCkuY19z
dHIoKSwgJmVuZF9wb3MpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRToKLSAgICAgICAgICBpZiAocHJv
dG8uZGVmYXVsdF92YWx1ZSgpID09ICJpbmYiKSB7Ci0gICAgICAgICAgICByZXN1bHQtPmRlZmF1
bHRfdmFsdWVfZG91YmxlXyA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci0g
ICAgICAgICAgfSBlbHNlIGlmIChwcm90by5kZWZhdWx0X3ZhbHVlKCkgPT0gIi1pbmYiKSB7Ci0g
ICAgICAgICAgICByZXN1bHQtPmRlZmF1bHRfdmFsdWVfZG91YmxlXyA9IC1udW1lcmljX2xpbWl0
czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgICAgICAgIH0gZWxzZSBpZiAocHJvdG8uZGVmYXVs
dF92YWx1ZSgpID09ICJuYW4iKSB7Ci0gICAgICAgICAgICByZXN1bHQtPmRlZmF1bHRfdmFsdWVf
ZG91YmxlXyA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICAg
IH0gZWxzZSAgewotICAgICAgICAgICAgcmVzdWx0LT5kZWZhdWx0X3ZhbHVlX2RvdWJsZV8gPQot
ICAgICAgICAgICAgICAgIGlvOjpOb0xvY2FsZVN0cnRvZChwcm90by5kZWZhdWx0X3ZhbHVlKCku
Y19zdHIoKSwgJmVuZF9wb3MpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICAgICAgICBpZiAocHJv
dG8uZGVmYXVsdF92YWx1ZSgpID09ICJ0cnVlIikgewotICAgICAgICAgICAgcmVzdWx0LT5kZWZh
dWx0X3ZhbHVlX2Jvb2xfID0gdHJ1ZTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHByb3RvLmRlZmF1
bHRfdmFsdWUoKSA9PSAiZmFsc2UiKSB7Ci0gICAgICAgICAgICByZXN1bHQtPmRlZmF1bHRfdmFs
dWVfYm9vbF8gPSBmYWxzZTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQWRkRXJy
b3IocmVzdWx0LT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICBEZXNj
cmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OkRFRkFVTFRfVkFMVUUsCi0gICAgICAgICAgICAg
ICAgICAgICAiQm9vbGVhbiBkZWZhdWx0IG11c3QgYmUgdHJ1ZSBvciBmYWxzZS4iKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX0VOVU06Ci0gICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGZpbGxlZCBpbiB3aGVuIGNy
b3NzLWxpbmtpbmcuCi0gICAgICAgICAgcmVzdWx0LT5kZWZhdWx0X3ZhbHVlX2VudW1fID0gTlVM
TDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfU1RSSU5HOgotICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0
b3I6OlRZUEVfQllURVMpIHsKLSAgICAgICAgICAgIHJlc3VsdC0+ZGVmYXVsdF92YWx1ZV9zdHJp
bmdfID0gdGFibGVzXy0+QWxsb2NhdGVTdHJpbmcoCi0gICAgICAgICAgICAgIFVuZXNjYXBlQ0Vz
Y2FwZVN0cmluZyhwcm90by5kZWZhdWx0X3ZhbHVlKCkpKTsKLSAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcmVzdWx0LT5kZWZhdWx0X3ZhbHVlX3N0cmluZ18gPQotICAgICAgICAgICAg
ICAgIHRhYmxlc18tPkFsbG9jYXRlU3RyaW5nKHByb3RvLmRlZmF1bHRfdmFsdWUoKSk7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgICAgIEFkZEVycm9yKHJlc3VsdC0+ZnVsbF9uYW1lKCks
IHByb3RvLAotICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rv
cjo6REVGQVVMVF9WQUxVRSwKLSAgICAgICAgICAgICAgICAgICAiTWVzc2FnZXMgY2FuJ3QgaGF2
ZSBkZWZhdWx0IHZhbHVlcy4iKTsKLSAgICAgICAgICByZXN1bHQtPmhhc19kZWZhdWx0X3ZhbHVl
XyA9IGZhbHNlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZiAoZW5kX3Bv
cyAhPSBOVUxMKSB7Ci0gICAgICAgIC8vIGVuZF9wb3MgaXMgb25seSBzZXQgbm9uLU5VTEwgYnkg
dGhlIHBhcnNlcnMgZm9yIG51bWVyaWMgdHlwZXMsIGFib3ZlLgotICAgICAgICAvLyBUaGlzIGNo
ZWNrcyB0aGF0IHRoZSBkZWZhdWx0IHdhcyBub24tZW1wdHkgYW5kIGhhZCBubyBleHRyYSBqdW5r
Ci0gICAgICAgIC8vIGFmdGVyIHRoZSBlbmQgb2YgdGhlIG51bWJlci4KLSAgICAgICAgaWYgKHBy
b3RvLmRlZmF1bHRfdmFsdWUoKS5lbXB0eSgpIHx8ICplbmRfcG9zICE9ICdcMCcpIHsKLSAgICAg
ICAgICBBZGRFcnJvcihyZXN1bHQtPmZ1bGxfbmFtZSgpLCBwcm90bywKLSAgICAgICAgICAgICAg
ICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OkRFRkFVTFRfVkFMVUUsCi0gICAg
ICAgICAgICAgICAgICAgIkNvdWxkbid0IHBhcnNlIGRlZmF1bHQgdmFsdWUgXCIiICsgcHJvdG8u
ZGVmYXVsdF92YWx1ZSgpICsKLSAgICAgICAgICAgICAgICAgICAiXCIuIik7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLy8gTm8gZXhwbGljaXQgZGVmYXVsdCB2YWx1
ZQotICAgICAgc3dpdGNoIChyZXN1bHQtPmNwcF90eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UMzI6Ci0gICAgICAgICAgcmVzdWx0LT5kZWZhdWx0X3Zh
bHVlX2ludDMyXyA9IDA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFX0lOVDY0OgotICAgICAgICAgIHJlc3VsdC0+ZGVmYXVsdF92YWx1ZV9p
bnQ2NF8gPSAwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9VSU5UMzI6Ci0gICAgICAgICAgcmVzdWx0LT5kZWZhdWx0X3ZhbHVlX3VpbnQz
Ml8gPSAwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9VSU5UNjQ6Ci0gICAgICAgICAgcmVzdWx0LT5kZWZhdWx0X3ZhbHVlX3VpbnQ2NF8g
PSAwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQ
VFlQRV9GTE9BVDoKLSAgICAgICAgICByZXN1bHQtPmRlZmF1bHRfdmFsdWVfZmxvYXRfID0gMC4w
ZjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfRE9VQkxFOgotICAgICAgICAgIHJlc3VsdC0+ZGVmYXVsdF92YWx1ZV9kb3VibGVfID0gMC4w
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9CT09MOgotICAgICAgICAgIHJlc3VsdC0+ZGVmYXVsdF92YWx1ZV9ib29sXyA9IGZhbHNlOwot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9F
TlVNOgotICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBmaWxsZWQgaW4gd2hlbiBjcm9zcy1saW5r
aW5nLgotICAgICAgICAgIHJlc3VsdC0+ZGVmYXVsdF92YWx1ZV9lbnVtXyA9IE5VTEw7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklO
RzoKLSAgICAgICAgICByZXN1bHQtPmRlZmF1bHRfdmFsdWVfc3RyaW5nXyA9ICZpbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmcoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICBpZiAocmVzdWx0LT5udW1iZXIoKSA8PSAwKSB7Ci0gICAgQWRkRXJyb3Io
cmVzdWx0LT5mdWxsX25hbWUoKSwgcHJvdG8sIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rv
cjo6TlVNQkVSLAotICAgICAgICAgICAgICJGaWVsZCBudW1iZXJzIG11c3QgYmUgcG9zaXRpdmUg
aW50ZWdlcnMuIik7Ci0gIH0gZWxzZSBpZiAoIWlzX2V4dGVuc2lvbiAmJiByZXN1bHQtPm51bWJl
cigpID4gRmllbGREZXNjcmlwdG9yOjprTWF4TnVtYmVyKSB7Ci0gICAgLy8gT25seSB2YWxpZGF0
ZSB0aGF0IHRoZSBudW1iZXIgaXMgd2l0aGluIHRoZSB2YWxpZCBmaWVsZCByYW5nZSBpZiBpdCBp
cwotICAgIC8vIG5vdCBhbiBleHRlbnNpb24uIFNpbmNlIGV4dGVuc2lvbiBudW1iZXJzIGFyZSB2
YWxpZGF0ZWQgd2l0aCB0aGUKLSAgICAvLyBleHRlbmRlZSdzIHZhbGlkIHNldCBvZiBleHRlbnNp
b24gbnVtYmVycywgYW5kIHRob3NlIGFyZSBpbiB0dXJuCi0gICAgLy8gdmFsaWRhdGVkIGFnYWlu
c3QgdGhlIG1heCBhbGxvd2VkIG51bWJlciwgdGhlIGNoZWNrIGlzIHVubmVjZXNzYXJ5IGZvcgot
ICAgIC8vIGV4dGVuc2lvbiBmaWVsZHMuCi0gICAgLy8gVGhpcyBhdm9pZHMgY3Jvc3MtbGlua2lu
ZyBpc3N1ZXMgdGhhdCBhcmlzZSB3aGVuIGF0dGVtcHRpbmcgdG8gY2hlY2sgaWYKLSAgICAvLyB0
aGUgZXh0ZW5kZWUgaXMgYSBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCBtZXNzYWdlLCB3aGljaCBo
YXMgYSBoaWdoZXIgbWF4Ci0gICAgLy8gb24gZXh0ZW5zaW9uIG51bWJlcnMuCi0gICAgQWRkRXJy
b3IocmVzdWx0LT5mdWxsX25hbWUoKSwgcHJvdG8sIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxl
Y3Rvcjo6TlVNQkVSLAotICAgICAgICAgICAgIHN0cmluZ3M6OlN1YnN0aXR1dGUoIkZpZWxkIG51
bWJlcnMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAkMC4iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yOjprTWF4TnVtYmVyKSk7Ci0gIH0gZWxzZSBpZiAo
cmVzdWx0LT5udW1iZXIoKSA+PSBGaWVsZERlc2NyaXB0b3I6OmtGaXJzdFJlc2VydmVkTnVtYmVy
ICYmCi0gICAgICAgICAgICAgcmVzdWx0LT5udW1iZXIoKSA8PSBGaWVsZERlc2NyaXB0b3I6OmtM
YXN0UmVzZXJ2ZWROdW1iZXIpIHsKLSAgICBBZGRFcnJvcihyZXN1bHQtPmZ1bGxfbmFtZSgpLCBw
cm90bywgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpOVU1CRVIsCi0gICAgICAgICAg
ICAgc3RyaW5nczo6U3Vic3RpdHV0ZSgKLSAgICAgICAgICAgICAgICJGaWVsZCBudW1iZXJzICQw
IHRocm91Z2ggJDEgYXJlIHJlc2VydmVkIGZvciB0aGUgcHJvdG9jb2wgIgotICAgICAgICAgICAg
ICAgImJ1ZmZlciBsaWJyYXJ5IGltcGxlbWVudGF0aW9uLiIsCi0gICAgICAgICAgICAgICBGaWVs
ZERlc2NyaXB0b3I6OmtGaXJzdFJlc2VydmVkTnVtYmVyLAotICAgICAgICAgICAgICAgRmllbGRE
ZXNjcmlwdG9yOjprTGFzdFJlc2VydmVkTnVtYmVyKSk7Ci0gIH0KLQotICBpZiAoaXNfZXh0ZW5z
aW9uKSB7Ci0gICAgaWYgKCFwcm90by5oYXNfZXh0ZW5kZWUoKSkgewotICAgICAgQWRkRXJyb3Io
cmVzdWx0LT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9v
bDo6RXJyb3JDb2xsZWN0b3I6OkVYVEVOREVFLAotICAgICAgICAgICAgICAgIkZpZWxkRGVzY3Jp
cHRvclByb3RvLmV4dGVuZGVlIG5vdCBzZXQgZm9yIGV4dGVuc2lvbiBmaWVsZC4iKTsKLSAgICB9
Ci0KLSAgICByZXN1bHQtPmV4dGVuc2lvbl9zY29wZV8gPSBwYXJlbnQ7Ci0KLSAgICBpZiAocHJv
dG8uaGFzX29uZW9mX2luZGV4KCkpIHsKLSAgICAgIEFkZEVycm9yKHJlc3VsdC0+ZnVsbF9uYW1l
KCksIHByb3RvLAotICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9y
OjpPVEhFUiwKLSAgICAgICAgICAgICAgICJGaWVsZERlc2NyaXB0b3JQcm90by5vbmVvZl9pbmRl
eCBzaG91bGQgbm90IGJlIHNldCBmb3IgIgotICAgICAgICAgICAgICAgImV4dGVuc2lvbnMuIik7
Ci0gICAgfQotCi0gICAgLy8gRmlsbCBpbiBsYXRlciAobWF5YmUpLgotICAgIHJlc3VsdC0+Y29u
dGFpbmluZ19vbmVvZl8gPSBOVUxMOwotICB9IGVsc2UgewotICAgIGlmIChwcm90by5oYXNfZXh0
ZW5kZWUoKSkgewotICAgICAgQWRkRXJyb3IocmVzdWx0LT5mdWxsX25hbWUoKSwgcHJvdG8sCi0g
ICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OkVYVEVOREVFLAot
ICAgICAgICAgICAgICAgIkZpZWxkRGVzY3JpcHRvclByb3RvLmV4dGVuZGVlIHNldCBmb3Igbm9u
LWV4dGVuc2lvbiBmaWVsZC4iKTsKLSAgICB9Ci0KLSAgICByZXN1bHQtPmNvbnRhaW5pbmdfdHlw
ZV8gPSBwYXJlbnQ7Ci0KLSAgICBpZiAocHJvdG8uaGFzX29uZW9mX2luZGV4KCkpIHsKLSAgICAg
IGlmIChwcm90by5vbmVvZl9pbmRleCgpIDwgMCB8fAotICAgICAgICAgIHByb3RvLm9uZW9mX2lu
ZGV4KCkgPj0gcGFyZW50LT5vbmVvZl9kZWNsX2NvdW50KCkpIHsKLSAgICAgICAgQWRkRXJyb3Io
cmVzdWx0LT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQ
b29sOjpFcnJvckNvbGxlY3Rvcjo6T1RIRVIsCi0gICAgICAgICAgICAgICAgIHN0cmluZ3M6OlN1
YnN0aXR1dGUoIkZpZWxkRGVzY3JpcHRvclByb3RvLm9uZW9mX2luZGV4ICQwIGlzICIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0IG9mIHJhbmdlIGZvciB0eXBlIFwi
JDFcIi4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLm9uZW9m
X2luZGV4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5u
YW1lKCkpKTsKLSAgICAgICAgcmVzdWx0LT5jb250YWluaW5nX29uZW9mXyA9IE5VTEw7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICByZXN1bHQtPmNvbnRhaW5pbmdfb25lb2ZfID0gcGFyZW50LT5v
bmVvZl9kZWNsKHByb3RvLm9uZW9mX2luZGV4KCkpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICByZXN1bHQtPmNvbnRhaW5pbmdfb25lb2ZfID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotICAv
LyBDb3B5IG9wdGlvbnMuCi0gIGlmICghcHJvdG8uaGFzX29wdGlvbnMoKSkgewotICAgIHJlc3Vs
dC0+b3B0aW9uc18gPSBOVUxMOyAgLy8gV2lsbCBzZXQgdG8gZGVmYXVsdF9pbnN0YW5jZSBsYXRl
ci4KLSAgfSBlbHNlIHsKLSAgICBBbGxvY2F0ZU9wdGlvbnMocHJvdG8ub3B0aW9ucygpLCByZXN1
bHQpOwotICB9Ci0KLQotICBBZGRTeW1ib2wocmVzdWx0LT5mdWxsX25hbWUoKSwgcGFyZW50LCBy
ZXN1bHQtPm5hbWUoKSwKLSAgICAgICAgICAgIHByb3RvLCBTeW1ib2wocmVzdWx0KSk7Ci19Ci0K
LXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OkJ1aWxkRXh0ZW5zaW9uUmFuZ2UoCi0gICAgY29uc3Qg
RGVzY3JpcHRvclByb3RvOjpFeHRlbnNpb25SYW5nZSYgcHJvdG8sCi0gICAgY29uc3QgRGVzY3Jp
cHRvciogcGFyZW50LAotICAgIERlc2NyaXB0b3I6OkV4dGVuc2lvblJhbmdlKiByZXN1bHQpIHsK
LSAgcmVzdWx0LT5zdGFydCA9IHByb3RvLnN0YXJ0KCk7Ci0gIHJlc3VsdC0+ZW5kID0gcHJvdG8u
ZW5kKCk7Ci0gIGlmIChyZXN1bHQtPnN0YXJ0IDw9IDApIHsKLSAgICBBZGRFcnJvcihwYXJlbnQt
PmZ1bGxfbmFtZSgpLCBwcm90bywKLSAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JD
b2xsZWN0b3I6Ok5VTUJFUiwKLSAgICAgICAgICAgICAiRXh0ZW5zaW9uIG51bWJlcnMgbXVzdCBi
ZSBwb3NpdGl2ZSBpbnRlZ2Vycy4iKTsKLSAgfQotCi0gIC8vIENoZWNraW5nIG9mIHRoZSB1cHBl
ciBib3VuZCBvZiB0aGUgZXh0ZW5zaW9uIHJhbmdlIGlzIGRlZmVycmVkIHVudGlsIGFmdGVyCi0g
IC8vIG9wdGlvbnMgaW50ZXJwcmV0aW5nLiBUaGlzIGFsbG93cyBtZXNzYWdlcyB3aXRoIG1lc3Nh
Z2Vfc2V0X3dpcmVfZm9ybWF0IHRvCi0gIC8vIGhhdmUgZXh0ZW5zaW9ucyBiZXlvbmQgRmllbGRE
ZXNjcmlwdG9yOjprTWF4TnVtYmVyLCBzaW5jZSB0aGUgZXh0ZW5zaW9uCi0gIC8vIG51bWJlcnMg
YXJlIGFjdHVhbGx5IHVzZWQgYXMgaW50MzJzIGluIHRoZSBtZXNzYWdlX3NldF93aXJlX2Zvcm1h
dC4KLQotICBpZiAocmVzdWx0LT5zdGFydCA+PSByZXN1bHQtPmVuZCkgewotICAgIEFkZEVycm9y
KHBhcmVudC0+ZnVsbF9uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgIERlc2NyaXB0b3JQb29s
OjpFcnJvckNvbGxlY3Rvcjo6TlVNQkVSLAotICAgICAgICAgICAgICJFeHRlbnNpb24gcmFuZ2Ug
ZW5kIG51bWJlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBzdGFydCBudW1iZXIuIik7Ci0gIH0KLX0K
LQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6QnVpbGRSZXNlcnZlZFJhbmdlKAotICAgIGNvbnN0
IERlc2NyaXB0b3JQcm90bzo6UmVzZXJ2ZWRSYW5nZSYgcHJvdG8sCi0gICAgY29uc3QgRGVzY3Jp
cHRvciogcGFyZW50LAotICAgIERlc2NyaXB0b3I6OlJlc2VydmVkUmFuZ2UqIHJlc3VsdCkgewot
ICByZXN1bHQtPnN0YXJ0ID0gcHJvdG8uc3RhcnQoKTsKLSAgcmVzdWx0LT5lbmQgPSBwcm90by5l
bmQoKTsKLSAgaWYgKHJlc3VsdC0+c3RhcnQgPD0gMCkgewotICAgIEFkZEVycm9yKHBhcmVudC0+
ZnVsbF9uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNv
bGxlY3Rvcjo6TlVNQkVSLAotICAgICAgICAgICAgICJSZXNlcnZlZCBudW1iZXJzIG11c3QgYmUg
cG9zaXRpdmUgaW50ZWdlcnMuIik7Ci0gIH0KLX0KLQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6
QnVpbGRPbmVvZihjb25zdCBPbmVvZkRlc2NyaXB0b3JQcm90byYgcHJvdG8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3IqIHBhcmVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT25lb2ZEZXNjcmlwdG9yKiByZXN1bHQpIHsKLSAgc3Ry
aW5nKiBmdWxsX25hbWUgPSB0YWJsZXNfLT5BbGxvY2F0ZVN0cmluZyhwYXJlbnQtPmZ1bGxfbmFt
ZSgpKTsKLSAgZnVsbF9uYW1lLT5hcHBlbmQoMSwgJy4nKTsKLSAgZnVsbF9uYW1lLT5hcHBlbmQo
cHJvdG8ubmFtZSgpKTsKLQotICBWYWxpZGF0ZVN5bWJvbE5hbWUocHJvdG8ubmFtZSgpLCAqZnVs
bF9uYW1lLCBwcm90byk7Ci0KLSAgcmVzdWx0LT5uYW1lXyA9IHRhYmxlc18tPkFsbG9jYXRlU3Ry
aW5nKHByb3RvLm5hbWUoKSk7Ci0gIHJlc3VsdC0+ZnVsbF9uYW1lXyA9IGZ1bGxfbmFtZTsKLQot
ICByZXN1bHQtPmNvbnRhaW5pbmdfdHlwZV8gPSBwYXJlbnQ7Ci0KLSAgLy8gV2UgbmVlZCB0byBm
aWxsIHRoZXNlIGluIGxhdGVyLgotICByZXN1bHQtPmZpZWxkX2NvdW50XyA9IDA7Ci0gIHJlc3Vs
dC0+ZmllbGRzXyA9IE5VTEw7Ci0KLSAgQWRkU3ltYm9sKHJlc3VsdC0+ZnVsbF9uYW1lKCksIHBh
cmVudCwgcmVzdWx0LT5uYW1lKCksCi0gICAgICAgICAgICBwcm90bywgU3ltYm9sKHJlc3VsdCkp
OwotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpCdWlsZEVudW0oY29uc3QgRW51bURlc2Ny
aXB0b3JQcm90byYgcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRGVzY3JpcHRvciogcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVudW1EZXNjcmlwdG9yKiByZXN1bHQpIHsKLSAgY29uc3Qgc3RyaW5nJiBzY29wZSA9IChwYXJl
bnQgPT0gTlVMTCkgPwotICAgIGZpbGVfLT5wYWNrYWdlKCkgOiBwYXJlbnQtPmZ1bGxfbmFtZSgp
OwotICBzdHJpbmcqIGZ1bGxfbmFtZSA9IHRhYmxlc18tPkFsbG9jYXRlU3RyaW5nKHNjb3BlKTsK
LSAgaWYgKCFmdWxsX25hbWUtPmVtcHR5KCkpIGZ1bGxfbmFtZS0+YXBwZW5kKDEsICcuJyk7Ci0g
IGZ1bGxfbmFtZS0+YXBwZW5kKHByb3RvLm5hbWUoKSk7Ci0KLSAgVmFsaWRhdGVTeW1ib2xOYW1l
KHByb3RvLm5hbWUoKSwgKmZ1bGxfbmFtZSwgcHJvdG8pOwotCi0gIHJlc3VsdC0+bmFtZV8gICAg
ICAgICAgICA9IHRhYmxlc18tPkFsbG9jYXRlU3RyaW5nKHByb3RvLm5hbWUoKSk7Ci0gIHJlc3Vs
dC0+ZnVsbF9uYW1lXyAgICAgICA9IGZ1bGxfbmFtZTsKLSAgcmVzdWx0LT5maWxlXyAgICAgICAg
ICAgID0gZmlsZV87Ci0gIHJlc3VsdC0+Y29udGFpbmluZ190eXBlXyA9IHBhcmVudDsKLSAgcmVz
dWx0LT5pc19wbGFjZWhvbGRlcl8gID0gZmFsc2U7Ci0gIHJlc3VsdC0+aXNfdW5xdWFsaWZpZWRf
cGxhY2Vob2xkZXJfID0gZmFsc2U7Ci0KLSAgaWYgKHByb3RvLnZhbHVlX3NpemUoKSA9PSAwKSB7
Ci0gICAgLy8gV2UgY2Fubm90IGFsbG93IGVudW1zIHdpdGggbm8gdmFsdWVzIGJlY2F1c2UgdGhp
cyB3b3VsZCBtZWFuIHRoZXJlCi0gICAgLy8gd291bGQgYmUgbm8gdmFsaWQgZGVmYXVsdCB2YWx1
ZSBmb3IgZmllbGRzIG9mIHRoaXMgdHlwZS4KLSAgICBBZGRFcnJvcihyZXN1bHQtPmZ1bGxfbmFt
ZSgpLCBwcm90bywKLSAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6
Ok5BTUUsCi0gICAgICAgICAgICAgIkVudW1zIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgdmFs
dWUuIik7Ci0gIH0KLQotICBCVUlMRF9BUlJBWShwcm90bywgcmVzdWx0LCB2YWx1ZSwgQnVpbGRF
bnVtVmFsdWUsIHJlc3VsdCk7Ci0KLSAgLy8gQ29weSBvcHRpb25zLgotICBpZiAoIXByb3RvLmhh
c19vcHRpb25zKCkpIHsKLSAgICByZXN1bHQtPm9wdGlvbnNfID0gTlVMTDsgIC8vIFdpbGwgc2V0
IHRvIGRlZmF1bHRfaW5zdGFuY2UgbGF0ZXIuCi0gIH0gZWxzZSB7Ci0gICAgQWxsb2NhdGVPcHRp
b25zKHByb3RvLm9wdGlvbnMoKSwgcmVzdWx0KTsKLSAgfQotCi0gIEFkZFN5bWJvbChyZXN1bHQt
PmZ1bGxfbmFtZSgpLCBwYXJlbnQsIHJlc3VsdC0+bmFtZSgpLAotICAgICAgICAgICAgcHJvdG8s
IFN5bWJvbChyZXN1bHQpKTsKLX0KLQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6QnVpbGRFbnVt
VmFsdWUoY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvJiBwcm90bywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBwYXJlbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtVmFsdWVEZXNjcmlw
dG9yKiByZXN1bHQpIHsKLSAgcmVzdWx0LT5uYW1lXyAgID0gdGFibGVzXy0+QWxsb2NhdGVTdHJp
bmcocHJvdG8ubmFtZSgpKTsKLSAgcmVzdWx0LT5udW1iZXJfID0gcHJvdG8ubnVtYmVyKCk7Ci0g
IHJlc3VsdC0+dHlwZV8gICA9IHBhcmVudDsKLQotICAvLyBOb3RlOiAgZnVsbF9uYW1lIGZvciBl
bnVtIHZhbHVlcyBpcyBhIHNpYmxpbmcgdG8gdGhlIHBhcmVudCdzIG5hbWUsIG5vdCBhCi0gIC8v
ICAgY2hpbGQgb2YgaXQuCi0gIHN0cmluZyogZnVsbF9uYW1lID0gdGFibGVzXy0+QWxsb2NhdGVT
dHJpbmcoKnBhcmVudC0+ZnVsbF9uYW1lXyk7Ci0gIGZ1bGxfbmFtZS0+cmVzaXplKGZ1bGxfbmFt
ZS0+c2l6ZSgpIC0gcGFyZW50LT5uYW1lXy0+c2l6ZSgpKTsKLSAgZnVsbF9uYW1lLT5hcHBlbmQo
KnJlc3VsdC0+bmFtZV8pOwotICByZXN1bHQtPmZ1bGxfbmFtZV8gPSBmdWxsX25hbWU7Ci0KLSAg
VmFsaWRhdGVTeW1ib2xOYW1lKHByb3RvLm5hbWUoKSwgKmZ1bGxfbmFtZSwgcHJvdG8pOwotCi0g
IC8vIENvcHkgb3B0aW9ucy4KLSAgaWYgKCFwcm90by5oYXNfb3B0aW9ucygpKSB7Ci0gICAgcmVz
dWx0LT5vcHRpb25zXyA9IE5VTEw7ICAvLyBXaWxsIHNldCB0byBkZWZhdWx0X2luc3RhbmNlIGxh
dGVyLgotICB9IGVsc2UgewotICAgIEFsbG9jYXRlT3B0aW9ucyhwcm90by5vcHRpb25zKCksIHJl
c3VsdCk7Ci0gIH0KLQotICAvLyBBZ2FpbiwgZW51bSB2YWx1ZXMgYXJlIHdlaXJkIGJlY2F1c2Ug
d2UgbWFrZXMgdGhlbSBhcHBlYXIgYXMgc2libGluZ3MKLSAgLy8gb2YgdGhlIGVudW0gdHlwZSBp
bnN0ZWFkIG9mIGNoaWxkcmVuIG9mIGl0LiAgU28sIHdlIHVzZQotICAvLyBwYXJlbnQtPmNvbnRh
aW5pbmdfdHlwZSgpIGFzIHRoZSB2YWx1ZSdzIHBhcmVudC4KLSAgYm9vbCBhZGRlZF90b19vdXRl
cl9zY29wZSA9Ci0gICAgQWRkU3ltYm9sKHJlc3VsdC0+ZnVsbF9uYW1lKCksIHBhcmVudC0+Y29u
dGFpbmluZ190eXBlKCksIHJlc3VsdC0+bmFtZSgpLAotICAgICAgICAgICAgICBwcm90bywgU3lt
Ym9sKHJlc3VsdCkpOwotCi0gIC8vIEhvd2V2ZXIsIHdlIGFsc28gd2FudCB0byBiZSBhYmxlIHRv
IHNlYXJjaCBmb3IgdmFsdWVzIHdpdGhpbiBhIHNpbmdsZQotICAvLyBlbnVtIHR5cGUsIHNvIHdl
IGFkZCBpdCBhcyBhIGNoaWxkIG9mIHRoZSBlbnVtIHR5cGUgaXRzZWxmLCB0b28uCi0gIC8vIE5v
dGU6ICBUaGlzIGNvdWxkIGZhaWwsIGJ1dCBpZiBpdCBkb2VzLCB0aGUgZXJyb3IgaGFzIGFscmVh
ZHkgYmVlbgotICAvLyAgIHJlcG9ydGVkIGJ5IHRoZSBhYm92ZSBBZGRTeW1ib2woKSBjYWxsLCBz
byB3ZSBpZ25vcmUgdGhlIHJldHVybiBjb2RlLgotICBib29sIGFkZGVkX3RvX2lubmVyX3Njb3Bl
ID0KLSAgICBmaWxlX3RhYmxlc18tPkFkZEFsaWFzVW5kZXJQYXJlbnQocGFyZW50LCByZXN1bHQt
Pm5hbWUoKSwgU3ltYm9sKHJlc3VsdCkpOwotCi0gIGlmIChhZGRlZF90b19pbm5lcl9zY29wZSAm
JiAhYWRkZWRfdG9fb3V0ZXJfc2NvcGUpIHsKLSAgICAvLyBUaGlzIHZhbHVlIGRpZCBub3QgY29u
ZmxpY3Qgd2l0aCBhbnkgdmFsdWVzIGRlZmluZWQgaW4gdGhlIHNhbWUgZW51bSwKLSAgICAvLyBi
dXQgaXQgZGlkIGNvbmZsaWN0IHdpdGggc29tZSBvdGhlciBzeW1ib2wgZGVmaW5lZCBpbiB0aGUg
ZW51bSB0eXBlJ3MKLSAgICAvLyBzY29wZS4gIExldCdzIHByaW50IGFuIGFkZGl0aW9uYWwgZXJy
b3IgdG8gZXhwbGFpbiB0aGlzLgotICAgIHN0cmluZyBvdXRlcl9zY29wZTsKLSAgICBpZiAocGFy
ZW50LT5jb250YWluaW5nX3R5cGUoKSA9PSBOVUxMKSB7Ci0gICAgICBvdXRlcl9zY29wZSA9IGZp
bGVfLT5wYWNrYWdlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG91dGVyX3Njb3BlID0gcGFyZW50
LT5jb250YWluaW5nX3R5cGUoKS0+ZnVsbF9uYW1lKCk7Ci0gICAgfQotCi0gICAgaWYgKG91dGVy
X3Njb3BlLmVtcHR5KCkpIHsKLSAgICAgIG91dGVyX3Njb3BlID0gInRoZSBnbG9iYWwgc2NvcGUi
OwotICAgIH0gZWxzZSB7Ci0gICAgICBvdXRlcl9zY29wZSA9ICJcIiIgKyBvdXRlcl9zY29wZSAr
ICJcIiI7Ci0gICAgfQotCi0gICAgQWRkRXJyb3IocmVzdWx0LT5mdWxsX25hbWUoKSwgcHJvdG8s
Ci0gICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpOQU1FLAotICAg
ICAgICAgICAgICJOb3RlIHRoYXQgZW51bSB2YWx1ZXMgdXNlIEMrKyBzY29waW5nIHJ1bGVzLCBt
ZWFuaW5nIHRoYXQgIgotICAgICAgICAgICAgICJlbnVtIHZhbHVlcyBhcmUgc2libGluZ3Mgb2Yg
dGhlaXIgdHlwZSwgbm90IGNoaWxkcmVuIG9mIGl0LiAgIgotICAgICAgICAgICAgICJUaGVyZWZv
cmUsIFwiIiArIHJlc3VsdC0+bmFtZSgpICsgIlwiIG11c3QgYmUgdW5pcXVlIHdpdGhpbiAiCi0g
ICAgICAgICAgICAgKyBvdXRlcl9zY29wZSArICIsIG5vdCBqdXN0IHdpdGhpbiBcIiIgKyBwYXJl
bnQtPm5hbWUoKSArICJcIi4iKTsKLSAgfQotCi0gIC8vIEFuIGVudW0gaXMgYWxsb3dlZCB0byBk
ZWZpbmUgdHdvIG51bWJlcnMgdGhhdCByZWZlciB0byB0aGUgc2FtZSB2YWx1ZS4KLSAgLy8gRmlu
ZFZhbHVlQnlOdW1iZXIoKSBzaG91bGQgcmV0dXJuIHRoZSBmaXJzdCBzdWNoIHZhbHVlLCBzbyB3
ZSBzaW1wbHkKLSAgLy8gaWdub3JlIEFkZEVudW1WYWx1ZUJ5TnVtYmVyKCkncyByZXR1cm4gY29k
ZS4KLSAgZmlsZV90YWJsZXNfLT5BZGRFbnVtVmFsdWVCeU51bWJlcihyZXN1bHQpOwotfQotCi12
b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpCdWlsZFNlcnZpY2UoY29uc3QgU2VydmljZURlc2NyaXB0
b3JQcm90byYgcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdm9pZCogLyogZHVtbXkgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU2VydmljZURlc2NyaXB0b3IqIHJlc3VsdCkgewotICBzdHJpbmcqIGZ1bGxfbmFtZSA9IHRh
Ymxlc18tPkFsbG9jYXRlU3RyaW5nKGZpbGVfLT5wYWNrYWdlKCkpOwotICBpZiAoIWZ1bGxfbmFt
ZS0+ZW1wdHkoKSkgZnVsbF9uYW1lLT5hcHBlbmQoMSwgJy4nKTsKLSAgZnVsbF9uYW1lLT5hcHBl
bmQocHJvdG8ubmFtZSgpKTsKLQotICBWYWxpZGF0ZVN5bWJvbE5hbWUocHJvdG8ubmFtZSgpLCAq
ZnVsbF9uYW1lLCBwcm90byk7Ci0KLSAgcmVzdWx0LT5uYW1lXyAgICAgID0gdGFibGVzXy0+QWxs
b2NhdGVTdHJpbmcocHJvdG8ubmFtZSgpKTsKLSAgcmVzdWx0LT5mdWxsX25hbWVfID0gZnVsbF9u
YW1lOwotICByZXN1bHQtPmZpbGVfICAgICAgPSBmaWxlXzsKLQotICBCVUlMRF9BUlJBWShwcm90
bywgcmVzdWx0LCBtZXRob2QsIEJ1aWxkTWV0aG9kLCByZXN1bHQpOwotCi0gIC8vIENvcHkgb3B0
aW9ucy4KLSAgaWYgKCFwcm90by5oYXNfb3B0aW9ucygpKSB7Ci0gICAgcmVzdWx0LT5vcHRpb25z
XyA9IE5VTEw7ICAvLyBXaWxsIHNldCB0byBkZWZhdWx0X2luc3RhbmNlIGxhdGVyLgotICB9IGVs
c2UgewotICAgIEFsbG9jYXRlT3B0aW9ucyhwcm90by5vcHRpb25zKCksIHJlc3VsdCk7Ci0gIH0K
LQotICBBZGRTeW1ib2wocmVzdWx0LT5mdWxsX25hbWUoKSwgTlVMTCwgcmVzdWx0LT5uYW1lKCks
Ci0gICAgICAgICAgICBwcm90bywgU3ltYm9sKHJlc3VsdCkpOwotfQotCi12b2lkIERlc2NyaXB0
b3JCdWlsZGVyOjpCdWlsZE1ldGhvZChjb25zdCBNZXRob2REZXNjcmlwdG9yUHJvdG8mIHByb3Rv
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2VydmljZURlc2Ny
aXB0b3IqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGhv
ZERlc2NyaXB0b3IqIHJlc3VsdCkgewotICByZXN1bHQtPm5hbWVfICAgID0gdGFibGVzXy0+QWxs
b2NhdGVTdHJpbmcocHJvdG8ubmFtZSgpKTsKLSAgcmVzdWx0LT5zZXJ2aWNlXyA9IHBhcmVudDsK
LQotICBzdHJpbmcqIGZ1bGxfbmFtZSA9IHRhYmxlc18tPkFsbG9jYXRlU3RyaW5nKHBhcmVudC0+
ZnVsbF9uYW1lKCkpOwotICBmdWxsX25hbWUtPmFwcGVuZCgxLCAnLicpOwotICBmdWxsX25hbWUt
PmFwcGVuZCgqcmVzdWx0LT5uYW1lXyk7Ci0gIHJlc3VsdC0+ZnVsbF9uYW1lXyA9IGZ1bGxfbmFt
ZTsKLQotICBWYWxpZGF0ZVN5bWJvbE5hbWUocHJvdG8ubmFtZSgpLCAqZnVsbF9uYW1lLCBwcm90
byk7Ci0KLSAgLy8gVGhlc2Ugd2lsbCBiZSBmaWxsZWQgaW4gd2hlbiBjcm9zcy1saW5raW5nLgot
ICByZXN1bHQtPmlucHV0X3R5cGVfID0gTlVMTDsKLSAgcmVzdWx0LT5vdXRwdXRfdHlwZV8gPSBO
VUxMOwotCi0gIC8vIENvcHkgb3B0aW9ucy4KLSAgaWYgKCFwcm90by5oYXNfb3B0aW9ucygpKSB7
Ci0gICAgcmVzdWx0LT5vcHRpb25zXyA9IE5VTEw7ICAvLyBXaWxsIHNldCB0byBkZWZhdWx0X2lu
c3RhbmNlIGxhdGVyLgotICB9IGVsc2UgewotICAgIEFsbG9jYXRlT3B0aW9ucyhwcm90by5vcHRp
b25zKCksIHJlc3VsdCk7Ci0gIH0KLQotICByZXN1bHQtPmNsaWVudF9zdHJlYW1pbmdfID0gcHJv
dG8uY2xpZW50X3N0cmVhbWluZygpOwotICByZXN1bHQtPnNlcnZlcl9zdHJlYW1pbmdfID0gcHJv
dG8uc2VydmVyX3N0cmVhbWluZygpOwotCi0gIEFkZFN5bWJvbChyZXN1bHQtPmZ1bGxfbmFtZSgp
LCBwYXJlbnQsIHJlc3VsdC0+bmFtZSgpLAotICAgICAgICAgICAgcHJvdG8sIFN5bWJvbChyZXN1
bHQpKTsKLX0KLQotI3VuZGVmIEJVSUxEX0FSUkFZCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBE
ZXNjcmlwdG9yQnVpbGRlcjo6Q3Jvc3NMaW5rRmlsZSgKLSAgICBGaWxlRGVzY3JpcHRvciogZmls
ZSwgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgcHJvdG8pIHsKLSAgaWYgKGZpbGUtPm9wdGlv
bnNfID09IE5VTEwpIHsKLSAgICBmaWxlLT5vcHRpb25zXyA9ICZGaWxlT3B0aW9uczo6ZGVmYXVs
dF9pbnN0YW5jZSgpOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLT5tZXNzYWdl
X3R5cGVfY291bnQoKTsgaSsrKSB7Ci0gICAgQ3Jvc3NMaW5rTWVzc2FnZSgmZmlsZS0+bWVzc2Fn
ZV90eXBlc19baV0sIHByb3RvLm1lc3NhZ2VfdHlwZShpKSk7Ci0gIH0KLQotICBmb3IgKGludCBp
ID0gMDsgaSA8IGZpbGUtPmV4dGVuc2lvbl9jb3VudCgpOyBpKyspIHsKLSAgICBDcm9zc0xpbmtG
aWVsZCgmZmlsZS0+ZXh0ZW5zaW9uc19baV0sIHByb3RvLmV4dGVuc2lvbihpKSk7Ci0gIH0KLQot
ICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGUtPmVudW1fdHlwZV9jb3VudCgpOyBpKyspIHsKLSAg
ICBDcm9zc0xpbmtFbnVtKCZmaWxlLT5lbnVtX3R5cGVzX1tpXSwgcHJvdG8uZW51bV90eXBlKGkp
KTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+c2VydmljZV9jb3VudCgpOyBp
KyspIHsKLSAgICBDcm9zc0xpbmtTZXJ2aWNlKCZmaWxlLT5zZXJ2aWNlc19baV0sIHByb3RvLnNl
cnZpY2UoaSkpOwotICB9Ci19Ci0KLXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OkNyb3NzTGlua01l
c3NhZ2UoCi0gICAgRGVzY3JpcHRvciogbWVzc2FnZSwgY29uc3QgRGVzY3JpcHRvclByb3RvJiBw
cm90bykgewotICBpZiAobWVzc2FnZS0+b3B0aW9uc18gPT0gTlVMTCkgewotICAgIG1lc3NhZ2Ut
Pm9wdGlvbnNfID0gJk1lc3NhZ2VPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlKCk7Ci0gIH0KLQot
ICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2UtPm5lc3RlZF90eXBlX2NvdW50KCk7IGkrKykg
ewotICAgIENyb3NzTGlua01lc3NhZ2UoJm1lc3NhZ2UtPm5lc3RlZF90eXBlc19baV0sIHByb3Rv
Lm5lc3RlZF90eXBlKGkpKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+
ZW51bV90eXBlX2NvdW50KCk7IGkrKykgewotICAgIENyb3NzTGlua0VudW0oJm1lc3NhZ2UtPmVu
dW1fdHlwZXNfW2ldLCBwcm90by5lbnVtX3R5cGUoaSkpOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtZXNzYWdlLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBDcm9zc0xpbmtGaWVs
ZCgmbWVzc2FnZS0+ZmllbGRzX1tpXSwgcHJvdG8uZmllbGQoaSkpOwotICB9Ci0KLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBtZXNzYWdlLT5leHRlbnNpb25fY291bnQoKTsgaSsrKSB7Ci0gICAgQ3Jv
c3NMaW5rRmllbGQoJm1lc3NhZ2UtPmV4dGVuc2lvbnNfW2ldLCBwcm90by5leHRlbnNpb24oaSkp
OwotICB9Ci0KLSAgLy8gU2V0IHVwIGZpZWxkIGFycmF5IGZvciBlYWNoIG9uZW9mLgotCi0gIC8v
IEZpcnN0IGNvdW50IHRoZSBudW1iZXIgb2YgZmllbGRzIHBlciBvbmVvZi4KLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtZXNzYWdlLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBPbmVv
ZkRlc2NyaXB0b3IqIG9uZW9mX2RlY2wgPSBtZXNzYWdlLT5maWVsZChpKS0+Y29udGFpbmluZ19v
bmVvZigpOwotICAgIGlmIChvbmVvZl9kZWNsICE9IE5VTEwpIHsKLSAgICAgIC8vIE1ha2Ugc3Vy
ZSBmaWVsZHMgYmVsb25naW5nIHRvIHRoZSBzYW1lIG9uZW9mIGFyZSBkZWZpbmVkIGNvbnNlY3V0
aXZlbHkuCi0gICAgICAvLyBUaGlzIGVuYWJsZXMgb3B0aW1pemF0aW9ucyBpbiBjb2RlZ2VucyBh
bmQgcmVmbGVjdGlvbiBsaWJyYXJpZXMgdG8KLSAgICAgIC8vIHNraXAgZmllbGRzIGluIHRoZSBv
bmVvZiBncm91cCwgYXMgb25seSBvbmUgb2YgdGhlIGZpZWxkIGNhbiBiZSBzZXQuCi0gICAgICAv
LyBOb3RlIHRoYXQgZmllbGRfY291bnQoKSByZXR1cm5zIGhvdyBtYW55IGZpZWxkcyBpbiB0aGlz
IG9uZW9mIHdlIGhhdmUKLSAgICAgIC8vIHNlZW4gc28gZmFyLiBmaWVsZF9jb3VudCgpID4gMCBn
dWFyYW50ZWVzIHRoYXQgaSA+IDAsIHNvIGZpZWxkKGktMSkgaXMKLSAgICAgIC8vIHNhZmUuCi0g
ICAgICBpZiAob25lb2ZfZGVjbC0+ZmllbGRfY291bnQoKSA+IDAgJiYKLSAgICAgICAgICBtZXNz
YWdlLT5maWVsZChpIC0gMSktPmNvbnRhaW5pbmdfb25lb2YoKSAhPSBvbmVvZl9kZWNsKSB7Ci0g
ICAgICAgIEFkZEVycm9yKAotICAgICAgICAgICAgbWVzc2FnZS0+ZnVsbF9uYW1lKCkgKyAiLiIg
KyBtZXNzYWdlLT5maWVsZChpIC0gMSktPm5hbWUoKSwKLSAgICAgICAgICAgIHByb3RvLmZpZWxk
KGkgLSAxKSwgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpPVEhFUiwKLSAgICAgICAg
ICAgIHN0cmluZ3M6OlN1YnN0aXR1dGUoCi0gICAgICAgICAgICAgICAgIkZpZWxkcyBpbiB0aGUg
c2FtZSBvbmVvZiBtdXN0IGJlIGRlZmluZWQgY29uc2VjdXRpdmVseS4gIgotICAgICAgICAgICAg
ICAgICJcIiQwXCIgY2Fubm90IGJlIGRlZmluZWQgYmVmb3JlIHRoZSBjb21wbGV0aW9uIG9mIHRo
ZSAiCi0gICAgICAgICAgICAgICAgIlwiJDFcIiBvbmVvZiBkZWZpbml0aW9uLiIsCi0gICAgICAg
ICAgICAgICAgbWVzc2FnZS0+ZmllbGQoaSAtIDEpLT5uYW1lKCksIG9uZW9mX2RlY2wtPm5hbWUo
KSkpOwotICAgICAgfQotICAgICAgLy8gTXVzdCBnbyB0aHJvdWdoIG9uZW9mX2RlY2xzXyBhcnJh
eSB0byBnZXQgYSBub24tY29uc3QgdmVyc2lvbiBvZiB0aGUKLSAgICAgIC8vIE9uZW9mRGVzY3Jp
cHRvci4KLSAgICAgICsrbWVzc2FnZS0+b25lb2ZfZGVjbHNfW29uZW9mX2RlY2wtPmluZGV4KCld
LmZpZWxkX2NvdW50XzsKLSAgICB9Ci0gIH0KLQotICAvLyBUaGVuIGFsbG9jYXRlIHRoZSBhcnJh
eXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+b25lb2ZfZGVjbF9jb3VudCgpOyBp
KyspIHsKLSAgICBPbmVvZkRlc2NyaXB0b3IqIG9uZW9mX2RlY2wgPSAmbWVzc2FnZS0+b25lb2Zf
ZGVjbHNfW2ldOwotCi0gICAgaWYgKG9uZW9mX2RlY2wtPmZpZWxkX2NvdW50KCkgPT0gMCkgewot
ICAgICAgQWRkRXJyb3IobWVzc2FnZS0+ZnVsbF9uYW1lKCkgKyAiLiIgKyBvbmVvZl9kZWNsLT5u
YW1lKCksCi0gICAgICAgICAgICAgICBwcm90by5vbmVvZl9kZWNsKGkpLAotICAgICAgICAgICAg
ICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpOQU1FLAotICAgICAgICAgICAgICAg
Ik9uZW9mIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZmllbGQuIik7Ci0gICAgfQotCi0gICAgb25l
b2ZfZGVjbC0+ZmllbGRzXyA9Ci0gICAgICB0YWJsZXNfLT5BbGxvY2F0ZUFycmF5PGNvbnN0IEZp
ZWxkRGVzY3JpcHRvcio+KG9uZW9mX2RlY2wtPmZpZWxkX2NvdW50Xyk7Ci0gICAgb25lb2ZfZGVj
bC0+ZmllbGRfY291bnRfID0gMDsKLSAgfQotCi0gIC8vIFRoZW4gZmlsbCB0aGVtIGluLgotICBm
b3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2UtPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNv
bnN0IE9uZW9mRGVzY3JpcHRvciogb25lb2ZfZGVjbCA9IG1lc3NhZ2UtPmZpZWxkKGkpLT5jb250
YWluaW5nX29uZW9mKCk7Ci0gICAgaWYgKG9uZW9mX2RlY2wgIT0gTlVMTCkgewotICAgICAgT25l
b2ZEZXNjcmlwdG9yKiBtdXRhYmxlX29uZW9mX2RlY2wgPQotICAgICAgICAgICZtZXNzYWdlLT5v
bmVvZl9kZWNsc19bb25lb2ZfZGVjbC0+aW5kZXgoKV07Ci0gICAgICBtZXNzYWdlLT5maWVsZHNf
W2ldLmluZGV4X2luX29uZW9mXyA9IG11dGFibGVfb25lb2ZfZGVjbC0+ZmllbGRfY291bnRfOwot
ICAgICAgbXV0YWJsZV9vbmVvZl9kZWNsLT5maWVsZHNfW211dGFibGVfb25lb2ZfZGVjbC0+Zmll
bGRfY291bnRfKytdID0KLSAgICAgICAgICBtZXNzYWdlLT5maWVsZChpKTsKLSAgICB9Ci0gIH0K
LX0KLQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6Q3Jvc3NMaW5rRmllbGQoCi0gICAgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCwgY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8mIHByb3RvKSB7Ci0g
IGlmIChmaWVsZC0+b3B0aW9uc18gPT0gTlVMTCkgewotICAgIGZpZWxkLT5vcHRpb25zXyA9ICZG
aWVsZE9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2UoKTsKLSAgfQotCi0gIGlmIChwcm90by5oYXNf
ZXh0ZW5kZWUoKSkgewotICAgIFN5bWJvbCBleHRlbmRlZSA9IExvb2t1cFN5bWJvbChwcm90by5l
eHRlbmRlZSgpLCBmaWVsZC0+ZnVsbF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBMQUNFSE9MREVSX0VYVEVOREFCTEVfTUVTU0FHRSk7Ci0gICAgaWYgKGV4dGVu
ZGVlLklzTnVsbCgpKSB7Ci0gICAgICBBZGROb3REZWZpbmVkRXJyb3IoZmllbGQtPmZ1bGxfbmFt
ZSgpLCBwcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJy
b3JDb2xsZWN0b3I6OkVYVEVOREVFLAotICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLmV4
dGVuZGVlKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZXh0ZW5kZWUudHlwZSAh
PSBTeW1ib2w6Ok1FU1NBR0UpIHsKLSAgICAgIEFkZEVycm9yKGZpZWxkLT5mdWxsX25hbWUoKSwg
cHJvdG8sCi0gICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OkVY
VEVOREVFLAotICAgICAgICAgICAgICAgIlwiIiArIHByb3RvLmV4dGVuZGVlKCkgKyAiXCIgaXMg
bm90IGEgbWVzc2FnZSB0eXBlLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmaWVsZC0+
Y29udGFpbmluZ190eXBlXyA9IGV4dGVuZGVlLmRlc2NyaXB0b3I7Ci0KLSAgICBjb25zdCBEZXNj
cmlwdG9yOjpFeHRlbnNpb25SYW5nZSogZXh0ZW5zaW9uX3JhbmdlID0gZmllbGQtPmNvbnRhaW5p
bmdfdHlwZSgpCi0gICAgICAgIC0+RmluZEV4dGVuc2lvblJhbmdlQ29udGFpbmluZ051bWJlcihm
aWVsZC0+bnVtYmVyKCkpOwotCi0gICAgaWYgKGV4dGVuc2lvbl9yYW5nZSA9PSBOVUxMKSB7Ci0g
ICAgICBBZGRFcnJvcihmaWVsZC0+ZnVsbF9uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgICAg
RGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpOVU1CRVIsCi0gICAgICAgICAgICAgICBz
dHJpbmdzOjpTdWJzdGl0dXRlKCJcIiQwXCIgZG9lcyBub3QgZGVjbGFyZSAkMSBhcyBhbiAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24gbnVtYmVyLiIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLT5jb250YWluaW5nX3R5cGUo
KS0+ZnVsbF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxk
LT5udW1iZXIoKSkpOwotICAgIH0KLSAgfQotCi0gIGlmIChmaWVsZC0+Y29udGFpbmluZ19vbmVv
ZigpICE9IE5VTEwpIHsKLSAgICBpZiAoZmllbGQtPmxhYmVsKCkgIT0gRmllbGREZXNjcmlwdG9y
OjpMQUJFTF9PUFRJT05BTCkgewotICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZXJyb3Igd2lsbCBu
ZXZlciBoYXBwZW4gd2hlbiBwYXJzaW5nIC5wcm90byBmaWxlcy4KLSAgICAgIC8vIEl0IGNhbiBv
bmx5IGhhcHBlbiBpZiB5b3UgbWFudWFsbHkgY29uc3RydWN0IGEgRmlsZURlc2NyaXB0b3JQcm90
bwotICAgICAgLy8gdGhhdCBpcyBpbmNvcnJlY3QuCi0gICAgICBBZGRFcnJvcihmaWVsZC0+ZnVs
bF9uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29s
bGVjdG9yOjpOQU1FLAotICAgICAgICAgICAgICAgIkZpZWxkcyBvZiBvbmVvZnMgbXVzdCB0aGVt
c2VsdmVzIGhhdmUgbGFiZWwgTEFCRUxfT1BUSU9OQUwuIik7Ci0gICAgfQotICB9Ci0KLSAgaWYg
KHByb3RvLmhhc190eXBlX25hbWUoKSkgewotICAgIC8vIEFzc3VtZSB3ZSBhcmUgZXhwZWN0aW5n
IGEgbWVzc2FnZSB0eXBlIHVubGVzcyB0aGUgcHJvdG8gY29udGFpbnMgc29tZQotICAgIC8vIGV2
aWRlbmNlIHRoYXQgaXQgZXhwZWN0cyBhbiBlbnVtIHR5cGUuICBUaGlzIG9ubHkgbWFrZXMgYSBk
aWZmZXJlbmNlIGlmCi0gICAgLy8gd2UgZW5kIHVwIGNyZWF0aW5nIGEgcGxhY2Vob2xkZXIuCi0g
ICAgYm9vbCBleHBlY3RpbmdfZW51bSA9IChwcm90by50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9y
UHJvdG86OlRZUEVfRU5VTSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8uaGFz
X2RlZmF1bHRfdmFsdWUoKTsKLQotICAgIFN5bWJvbCB0eXBlID0KLSAgICAgIExvb2t1cFN5bWJv
bChwcm90by50eXBlX25hbWUoKSwgZmllbGQtPmZ1bGxfbmFtZSgpLAotICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGluZ19lbnVtID8gUExBQ0VIT0xERVJfRU5VTSA6IFBMQUNFSE9MREVSX01FU1NB
R0UsCi0gICAgICAgICAgICAgICAgICAgTE9PS1VQX1RZUEVTKTsKLQotICAgIC8vIElmIHRoZSB0
eXBlIGlzIGEgd2VhayB0eXBlLCB3ZSBjaGFuZ2UgdGhlIHR5cGUgdG8gYSBnb29nbGUucHJvdG9i
dWYuRW1wdHkgZmllbGQuCi0gICAgaWYgKHR5cGUuSXNOdWxsKCkgJiYgIXBvb2xfLT5lbmZvcmNl
X3dlYWtfICYmIHByb3RvLm9wdGlvbnMoKS53ZWFrKCkpIHsKLSAgICAgIHR5cGUgPSBGaW5kU3lt
Ym9sKGtOb25MaW5rZWRXZWFrTWVzc2FnZVJlcGxhY2VtZW50TmFtZSk7Ci0gICAgfQotCi0gICAg
aWYgKHR5cGUuSXNOdWxsKCkpIHsKLSAgICAgIEFkZE5vdERlZmluZWRFcnJvcihmaWVsZC0+ZnVs
bF9uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29s
OjpFcnJvckNvbGxlY3Rvcjo6VFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwcm90by50
eXBlX25hbWUoKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFwcm90by5oYXNf
dHlwZSgpKSB7Ci0gICAgICAvLyBDaG9vc2UgZmllbGQgdHlwZSBiYXNlZCBvbiBzeW1ib2wuCi0g
ICAgICBpZiAodHlwZS50eXBlID09IFN5bWJvbDo6TUVTU0FHRSkgewotICAgICAgICBmaWVsZC0+
dHlwZV8gPSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRTsKLSAgICAgIH0gZWxzZSBpZiAo
dHlwZS50eXBlID09IFN5bWJvbDo6RU5VTSkgewotICAgICAgICBmaWVsZC0+dHlwZV8gPSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfRU5VTTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEFkZEVycm9y
KGZpZWxkLT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQ
b29sOjpFcnJvckNvbGxlY3Rvcjo6VFlQRSwKLSAgICAgICAgICAgICAgICAgIlwiIiArIHByb3Rv
LnR5cGVfbmFtZSgpICsgIlwiIGlzIG5vdCBhIHR5cGUuIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICAgIGlmICh0eXBlLnR5cGUgIT0gU3ltYm9sOjpN
RVNTQUdFKSB7Ci0gICAgICAgIEFkZEVycm9yKGZpZWxkLT5mdWxsX25hbWUoKSwgcHJvdG8sCi0g
ICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6VFlQRSwKLSAg
ICAgICAgICAgICAgICAgIlwiIiArIHByb3RvLnR5cGVfbmFtZSgpICsgIlwiIGlzIG5vdCBhIG1l
c3NhZ2UgdHlwZS4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgZmllbGQtPm1l
c3NhZ2VfdHlwZV8gPSB0eXBlLmRlc2NyaXB0b3I7Ci0KLSAgICAgIGlmIChmaWVsZC0+aGFzX2Rl
ZmF1bHRfdmFsdWUoKSkgewotICAgICAgICBBZGRFcnJvcihmaWVsZC0+ZnVsbF9uYW1lKCksIHBy
b3RvLAotICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OkRF
RkFVTFRfVkFMVUUsCi0gICAgICAgICAgICAgICAgICJNZXNzYWdlcyBjYW4ndCBoYXZlIGRlZmF1
bHQgdmFsdWVzLiIpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZmllbGQtPmNwcF90eXBlKCkg
PT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU0pIHsKLSAgICAgIGlmICh0eXBlLnR5cGUg
IT0gU3ltYm9sOjpFTlVNKSB7Ci0gICAgICAgIEFkZEVycm9yKGZpZWxkLT5mdWxsX25hbWUoKSwg
cHJvdG8sCi0gICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6
VFlQRSwKLSAgICAgICAgICAgICAgICAgIlwiIiArIHByb3RvLnR5cGVfbmFtZSgpICsgIlwiIGlz
IG5vdCBhbiBlbnVtIHR5cGUuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGZp
ZWxkLT5lbnVtX3R5cGVfID0gdHlwZS5lbnVtX2Rlc2NyaXB0b3I7Ci0KLSAgICAgIGlmIChmaWVs
ZC0+ZW51bV90eXBlKCktPmlzX3BsYWNlaG9sZGVyXykgewotICAgICAgICAvLyBXZSBjYW4ndCBs
b29rIHVwIGRlZmF1bHQgdmFsdWVzIGZvciBwbGFjZWhvbGRlciB0eXBlcy4gIFdlJ2xsIGhhdmUK
LSAgICAgICAgLy8gdG8ganVzdCBkcm9wIHRoZW0uCi0gICAgICAgIGZpZWxkLT5oYXNfZGVmYXVs
dF92YWx1ZV8gPSBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZpZWxkLT5oYXNfZGVmYXVs
dF92YWx1ZSgpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIGlz
IGFuIGlkZW50aWZpZXIuIFBhcnNlciBjYW5ub3QgYWx3YXlzCi0gICAgICAgIC8vIHZlcmlmeSB0
aGlzIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBjb21wbGV0ZSB0eXBlIGluZm9ybWF0aW9uLgot
ICAgICAgICAvLyBOLkIuIHRoYXQgdGhpcyBjaGVjayB5aWVsZHMgYmV0dGVyIGVycm9yIG1lc3Nh
Z2VzIGJ1dCBpcyBub3QKLSAgICAgICAgLy8gbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcyAoYW4g
ZW51bSBzeW1ib2wgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXIKLSAgICAgICAgLy8gYW55d2F5
KSwgb25seSBmb3IgYmV0dGVyIGVycm9ycy4KLSAgICAgICAgaWYgKCFpbzo6VG9rZW5pemVyOjpJ
c0lkZW50aWZpZXIocHJvdG8uZGVmYXVsdF92YWx1ZSgpKSkgewotICAgICAgICAgIEFkZEVycm9y
KGZpZWxkLT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgRGVzY3JpcHRv
clBvb2w6OkVycm9yQ29sbGVjdG9yOjpERUZBVUxUX1ZBTFVFLAotICAgICAgICAgICAgICAgICAg
ICJEZWZhdWx0IHZhbHVlIGZvciBhbiBlbnVtIGZpZWxkIG11c3QgYmUgYW4gaWRlbnRpZmllci4i
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IHVzZSBmaWVs
ZC0+ZW51bV90eXBlKCktPkZpbmRWYWx1ZUJ5TmFtZSgpIGhlcmUKLSAgICAgICAgICAvLyBiZWNh
dXNlIHRoYXQgbG9ja3MgdGhlIHBvb2wncyBtdXRleCwgd2hpY2ggd2UgaGF2ZSBhbHJlYWR5IGxv
Y2tlZAotICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgICAgU3ltYm9sIGRlZmF1
bHRfdmFsdWUgPQotICAgICAgICAgICAgTG9va3VwU3ltYm9sTm9QbGFjZWhvbGRlcihwcm90by5k
ZWZhdWx0X3ZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
ZWxkLT5lbnVtX3R5cGUoKS0+ZnVsbF9uYW1lKCkpOwotCi0gICAgICAgICAgaWYgKGRlZmF1bHRf
dmFsdWUudHlwZSA9PSBTeW1ib2w6OkVOVU1fVkFMVUUgJiYKLSAgICAgICAgICAgICAgZGVmYXVs
dF92YWx1ZS5lbnVtX3ZhbHVlX2Rlc2NyaXB0b3ItPnR5cGUoKSA9PQotICAgICAgICAgICAgICBm
aWVsZC0+ZW51bV90eXBlKCkpIHsKLSAgICAgICAgICAgIGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2Vu
dW1fID0gZGVmYXVsdF92YWx1ZS5lbnVtX3ZhbHVlX2Rlc2NyaXB0b3I7Ci0gICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIEFkZEVycm9yKGZpZWxkLT5mdWxsX25hbWUoKSwgcHJvdG8sCi0g
ICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OkRFRkFV
TFRfVkFMVUUsCi0gICAgICAgICAgICAgICAgICAgICAiRW51bSB0eXBlIFwiIiArIGZpZWxkLT5l
bnVtX3R5cGUoKS0+ZnVsbF9uYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAgIlwiIGhhcyBu
byB2YWx1ZSBuYW1lZCBcIiIgKyBwcm90by5kZWZhdWx0X3ZhbHVlKCkgKwotICAgICAgICAgICAg
ICAgICAgICAgIlwiLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlm
IChmaWVsZC0+ZW51bV90eXBlKCktPnZhbHVlX2NvdW50KCkgPiAwKSB7Ci0gICAgICAgIC8vIEFs
bCBlbnVtcyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHZhbHVlLCBvciB3ZSB3b3VsZCBoYXZlIHJl
cG9ydGVkCi0gICAgICAgIC8vIGFuIGVycm9yIGVsc2V3aGVyZS4gIFdlIHVzZSB0aGUgZmlyc3Qg
ZGVmaW5lZCB2YWx1ZSBhcyB0aGUgZGVmYXVsdAotICAgICAgICAvLyBpZiBhIGRlZmF1bHQgaXMg
bm90IGV4cGxpY2l0bHkgZGVmaW5lZC4KLSAgICAgICAgZmllbGQtPmRlZmF1bHRfdmFsdWVfZW51
bV8gPSBmaWVsZC0+ZW51bV90eXBlKCktPnZhbHVlKDApOwotICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICBBZGRFcnJvcihmaWVsZC0+ZnVsbF9uYW1lKCksIHByb3RvLCBEZXNjcmlwdG9yUG9v
bDo6RXJyb3JDb2xsZWN0b3I6OlRZUEUsCi0gICAgICAgICAgICAgICAiRmllbGQgd2l0aCBwcmlt
aXRpdmUgdHlwZSBoYXMgdHlwZV9uYW1lLiIpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAo
ZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UgfHwK
LSAgICAgICAgZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VO
VU0pIHsKLSAgICAgIEFkZEVycm9yKGZpZWxkLT5mdWxsX25hbWUoKSwgcHJvdG8sIERlc2NyaXB0
b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6VFlQRSwKLSAgICAgICAgICAgICAgICJGaWVsZCB3aXRo
IG1lc3NhZ2Ugb3IgZW51bSB0eXBlIG1pc3NpbmcgdHlwZV9uYW1lLiIpOwotICAgIH0KLSAgfQot
Ci0gIC8vIEFkZCB0aGUgZmllbGQgdG8gdGhlIGZpZWxkcy1ieS1udW1iZXIgdGFibGUuCi0gIC8v
IE5vdGU6ICBXZSBoYXZlIHRvIGRvIHRoaXMgKmFmdGVyKiBjcm9zcy1saW5raW5nIGJlY2F1c2Ug
ZXh0ZW5zaW9ucyBkbyBub3QKLSAgLy8gICBrbm93IHRoZWlyIGNvbnRhaW5pbmcgdHlwZSB1bnRp
bCBub3cuCi0gIGlmICghZmlsZV90YWJsZXNfLT5BZGRGaWVsZEJ5TnVtYmVyKGZpZWxkKSkgewot
ICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogY29uZmxpY3RpbmdfZmllbGQgPQotICAgICAgZmls
ZV90YWJsZXNfLT5GaW5kRmllbGRCeU51bWJlcihmaWVsZC0+Y29udGFpbmluZ190eXBlKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLT5udW1iZXIoKSk7Ci0g
ICAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24oKSkgewotICAgICAgQWRkRXJyb3IoZmllbGQtPmZ1
bGxfbmFtZSgpLCBwcm90bywKLSAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNv
bGxlY3Rvcjo6TlVNQkVSLAotICAgICAgICAgICAgICAgc3RyaW5nczo6U3Vic3RpdHV0ZSgiRXh0
ZW5zaW9uIG51bWJlciAkMCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW4gXCIkMVwiIGJ5IGV4dGVuc2lvbiBcIiQyXCIuIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPm51bWJlcigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC0+Y29udGFpbmluZ190eXBlKCktPmZ1
bGxfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdGlu
Z19maWVsZC0+ZnVsbF9uYW1lKCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgQWRkRXJyb3IoZmll
bGQtPmZ1bGxfbmFtZSgpLCBwcm90bywKLSAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpF
cnJvckNvbGxlY3Rvcjo6TlVNQkVSLAotICAgICAgICAgICAgICAgc3RyaW5nczo6U3Vic3RpdHV0
ZSgiRmllbGQgbnVtYmVyICQwIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiAiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJcIiQxXCIgYnkgZmllbGQgXCIkMlwiLiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLT5udW1iZXIoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPmNvbnRhaW5pbmdfdHlwZSgpLT5mdWxs
X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdf
ZmllbGQtPm5hbWUoKSkpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoZmllbGQtPmlzX2V4
dGVuc2lvbigpKSB7Ci0gICAgICBpZiAoIXRhYmxlc18tPkFkZEV4dGVuc2lvbihmaWVsZCkpIHsK
LSAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBjb25mbGljdGluZ19maWVsZCA9Ci0gICAg
ICAgICAgICB0YWJsZXNfLT5GaW5kRXh0ZW5zaW9uKGZpZWxkLT5jb250YWluaW5nX3R5cGUoKSwg
ZmllbGQtPm51bWJlcigpKTsKLSAgICAgICAgc3RyaW5nIGVycm9yX21zZyA9IHN0cmluZ3M6OlN1
YnN0aXR1dGUoCi0gICAgICAgICAgICAiRXh0ZW5zaW9uIG51bWJlciAkMCBoYXMgYWxyZWFkeSBi
ZWVuIHVzZWQgaW4gXCIkMVwiIGJ5IGV4dGVuc2lvbiAiCi0gICAgICAgICAgICAiXCIkMlwiIGRl
ZmluZWQgaW4gJDMuIiwKLSAgICAgICAgICAgIGZpZWxkLT5udW1iZXIoKSwKLSAgICAgICAgICAg
IGZpZWxkLT5jb250YWluaW5nX3R5cGUoKS0+ZnVsbF9uYW1lKCksCi0gICAgICAgICAgICBjb25m
bGljdGluZ19maWVsZC0+ZnVsbF9uYW1lKCksCi0gICAgICAgICAgICBjb25mbGljdGluZ19maWVs
ZC0+ZmlsZSgpLT5uYW1lKCkpOwotICAgICAgICAvLyBDb25mbGljdGluZyBleHRlbnNpb24gbnVt
YmVycyBzaG91bGQgYmUgYW4gZXJyb3IuIEhvd2V2ZXIsIGJlZm9yZQotICAgICAgICAvLyB0dXJu
aW5nIHRoaXMgaW50byBhbiBlcnJvciB3ZSBuZWVkIHRvIGZpeCBhbGwgZXhpc3RpbmcgYnJva2Vu
Ci0gICAgICAgIC8vIHByb3RvcyBmaXJzdC4KLSAgICAgICAgLy8gVE9ETyh4aWFvZmVuZyk6IENo
YW5nZSB0aGlzIHRvIGFuIGVycm9yLgotICAgICAgICBBZGRXYXJuaW5nKGZpZWxkLT5mdWxsX25h
bWUoKSwgcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29s
bGVjdG9yOjpOVU1CRVIsIGVycm9yX21zZyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8g
QWRkIHRoZSBmaWVsZCB0byB0aGUgbG93ZXJjYXNlLW5hbWUgYW5kIGNhbWVsY2FzZS1uYW1lIHRh
Ymxlcy4KLSAgZmlsZV90YWJsZXNfLT5BZGRGaWVsZEJ5U3R5bGl6ZWROYW1lcyhmaWVsZCk7Ci19
Ci0KLXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OkNyb3NzTGlua0VudW0oCi0gICAgRW51bURlc2Ny
aXB0b3IqIGVudW1fdHlwZSwgY29uc3QgRW51bURlc2NyaXB0b3JQcm90byYgcHJvdG8pIHsKLSAg
aWYgKGVudW1fdHlwZS0+b3B0aW9uc18gPT0gTlVMTCkgewotICAgIGVudW1fdHlwZS0+b3B0aW9u
c18gPSAmRW51bU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2UoKTsKLSAgfQotCi0gIGZvciAoaW50
IGkgPSAwOyBpIDwgZW51bV90eXBlLT52YWx1ZV9jb3VudCgpOyBpKyspIHsKLSAgICBDcm9zc0xp
bmtFbnVtVmFsdWUoJmVudW1fdHlwZS0+dmFsdWVzX1tpXSwgcHJvdG8udmFsdWUoaSkpOwotICB9
Ci19Ci0KLXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OkNyb3NzTGlua0VudW1WYWx1ZSgKLSAgICBF
bnVtVmFsdWVEZXNjcmlwdG9yKiBlbnVtX3ZhbHVlLAotICAgIGNvbnN0IEVudW1WYWx1ZURlc2Ny
aXB0b3JQcm90byYgLyogcHJvdG8gKi8pIHsKLSAgaWYgKGVudW1fdmFsdWUtPm9wdGlvbnNfID09
IE5VTEwpIHsKLSAgICBlbnVtX3ZhbHVlLT5vcHRpb25zXyA9ICZFbnVtVmFsdWVPcHRpb25zOjpk
ZWZhdWx0X2luc3RhbmNlKCk7Ci0gIH0KLX0KLQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6Q3Jv
c3NMaW5rU2VydmljZSgKLSAgICBTZXJ2aWNlRGVzY3JpcHRvciogc2VydmljZSwgY29uc3QgU2Vy
dmljZURlc2NyaXB0b3JQcm90byYgcHJvdG8pIHsKLSAgaWYgKHNlcnZpY2UtPm9wdGlvbnNfID09
IE5VTEwpIHsKLSAgICBzZXJ2aWNlLT5vcHRpb25zXyA9ICZTZXJ2aWNlT3B0aW9uczo6ZGVmYXVs
dF9pbnN0YW5jZSgpOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlLT5tZXRo
b2RfY291bnQoKTsgaSsrKSB7Ci0gICAgQ3Jvc3NMaW5rTWV0aG9kKCZzZXJ2aWNlLT5tZXRob2Rz
X1tpXSwgcHJvdG8ubWV0aG9kKGkpKTsKLSAgfQotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVy
OjpDcm9zc0xpbmtNZXRob2QoCi0gICAgTWV0aG9kRGVzY3JpcHRvciogbWV0aG9kLCBjb25zdCBN
ZXRob2REZXNjcmlwdG9yUHJvdG8mIHByb3RvKSB7Ci0gIGlmIChtZXRob2QtPm9wdGlvbnNfID09
IE5VTEwpIHsKLSAgICBtZXRob2QtPm9wdGlvbnNfID0gJk1ldGhvZE9wdGlvbnM6OmRlZmF1bHRf
aW5zdGFuY2UoKTsKLSAgfQotCi0gIFN5bWJvbCBpbnB1dF90eXBlID0gTG9va3VwU3ltYm9sKHBy
b3RvLmlucHV0X3R5cGUoKSwgbWV0aG9kLT5mdWxsX25hbWUoKSk7Ci0gIGlmIChpbnB1dF90eXBl
LklzTnVsbCgpKSB7Ci0gICAgQWRkTm90RGVmaW5lZEVycm9yKG1ldGhvZC0+ZnVsbF9uYW1lKCks
IHByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xs
ZWN0b3I6OklOUFVUX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgIHByb3RvLmlucHV0X3R5
cGUoKSk7Ci0gIH0gZWxzZSBpZiAoaW5wdXRfdHlwZS50eXBlICE9IFN5bWJvbDo6TUVTU0FHRSkg
ewotICAgIEFkZEVycm9yKG1ldGhvZC0+ZnVsbF9uYW1lKCksIHByb3RvLAotICAgICAgICAgICAg
IERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6SU5QVVRfVFlQRSwKLSAgICAgICAgICAg
ICAiXCIiICsgcHJvdG8uaW5wdXRfdHlwZSgpICsgIlwiIGlzIG5vdCBhIG1lc3NhZ2UgdHlwZS4i
KTsKLSAgfSBlbHNlIHsKLSAgICBtZXRob2QtPmlucHV0X3R5cGVfID0gaW5wdXRfdHlwZS5kZXNj
cmlwdG9yOwotICB9Ci0KLSAgU3ltYm9sIG91dHB1dF90eXBlID0gTG9va3VwU3ltYm9sKHByb3Rv
Lm91dHB1dF90eXBlKCksIG1ldGhvZC0+ZnVsbF9uYW1lKCkpOwotICBpZiAob3V0cHV0X3R5cGUu
SXNOdWxsKCkpIHsKLSAgICBBZGROb3REZWZpbmVkRXJyb3IobWV0aG9kLT5mdWxsX25hbWUoKSwg
cHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxl
Y3Rvcjo6T1VUUFVUX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgIHByb3RvLm91dHB1dF90
eXBlKCkpOwotICB9IGVsc2UgaWYgKG91dHB1dF90eXBlLnR5cGUgIT0gU3ltYm9sOjpNRVNTQUdF
KSB7Ci0gICAgQWRkRXJyb3IobWV0aG9kLT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAg
ICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpPVVRQVVRfVFlQRSwKLSAgICAgICAg
ICAgICAiXCIiICsgcHJvdG8ub3V0cHV0X3R5cGUoKSArICJcIiBpcyBub3QgYSBtZXNzYWdlIHR5
cGUuIik7Ci0gIH0gZWxzZSB7Ci0gICAgbWV0aG9kLT5vdXRwdXRfdHlwZV8gPSBvdXRwdXRfdHlw
ZS5kZXNjcmlwdG9yOwotICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBWQUxJREFU
RV9PUFRJT05TX0ZST01fQVJSQVkoZGVzY3JpcHRvciwgYXJyYXlfbmFtZSwgdHlwZSkgIFwKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5hcnJheV9uYW1lIyNfY291bnQoKTsgKytp
KSB7ICAgICBcCi0gICAgVmFsaWRhdGUjI3R5cGUjI09wdGlvbnMoZGVzY3JpcHRvci0+YXJyYXlf
bmFtZSMjc18gKyBpLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Rv
LmFycmF5X25hbWUoaSkpOyAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0vLyBEZXRlcm1pbmUg
aWYgdGhlIGZpbGUgdXNlcyBvcHRpbWl6ZV9mb3IgPSBMSVRFX1JVTlRJTUUsIGJlaW5nIGNhcmVm
dWwgdG8KLS8vIGF2b2lkIHByb2JsZW1zIHRoYXQgZXhpc3QgYXQgaW5pdCB0aW1lLgotc3RhdGlj
IGJvb2wgSXNMaXRlKGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlKSB7Ci0gIC8vIFRPRE8oa2Vu
dG9uKTogIEkgZG9uJ3QgZXZlbiByZW1lbWJlciBob3cgbWFueSBvZiB0aGVzZSBjb25kaXRpb25z
IGFyZQotICAvLyAgIGFjdHVhbGx5IHBvc3NpYmxlLiAgSSdtIGp1c3QgYmVpbmcgc3VwZXItc2Fm
ZS4KLSAgcmV0dXJuIGZpbGUgIT0gTlVMTCAmJgotICAgICAgICAgJmZpbGUtPm9wdGlvbnMoKSAh
PSAmRmlsZU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2UoKSAmJgotICAgICAgICAgZmlsZS0+b3B0
aW9ucygpLm9wdGltaXplX2ZvcigpID09IEZpbGVPcHRpb25zOjpMSVRFX1JVTlRJTUU7Ci19Ci0K
LXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OlZhbGlkYXRlRmlsZU9wdGlvbnMoRmlsZURlc2NyaXB0
b3IqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3RvKSB7Ci0gIFZBTElEQVRFX09QVElPTlNfRlJP
TV9BUlJBWShmaWxlLCBtZXNzYWdlX3R5cGUsIE1lc3NhZ2UpOwotICBWQUxJREFURV9PUFRJT05T
X0ZST01fQVJSQVkoZmlsZSwgZW51bV90eXBlLCBFbnVtKTsKLSAgVkFMSURBVEVfT1BUSU9OU19G
Uk9NX0FSUkFZKGZpbGUsIHNlcnZpY2UsIFNlcnZpY2UpOwotICBWQUxJREFURV9PUFRJT05TX0ZS
T01fQVJSQVkoZmlsZSwgZXh0ZW5zaW9uLCBGaWVsZCk7Ci0KLSAgLy8gTGl0ZSBmaWxlcyBjYW4g
b25seSBiZSBpbXBvcnRlZCBieSBvdGhlciBMaXRlIGZpbGVzLgotICBpZiAoIUlzTGl0ZShmaWxl
KSkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZS0+ZGVwZW5kZW5jeV9jb3VudCgpOyBp
KyspIHsKLSAgICAgIGlmIChJc0xpdGUoZmlsZS0+ZGVwZW5kZW5jeShpKSkpIHsKLSAgICAgICAg
QWRkRXJyb3IoCi0gICAgICAgICAgZmlsZS0+bmFtZSgpLCBwcm90bywKLSAgICAgICAgICBEZXNj
cmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok9USEVSLAotICAgICAgICAgICJGaWxlcyB0aGF0
IGRvIG5vdCB1c2Ugb3B0aW1pemVfZm9yID0gTElURV9SVU5USU1FIGNhbm5vdCBpbXBvcnQgIgot
ICAgICAgICAgICJmaWxlcyB3aGljaCBkbyB1c2UgdGhpcyBvcHRpb24uICBUaGlzIGZpbGUgaXMg
bm90IGxpdGUsIGJ1dCBpdCAiCi0gICAgICAgICAgImltcG9ydHMgXCIiICsgZmlsZS0+ZGVwZW5k
ZW5jeShpKS0+bmFtZSgpICsgIlwiIHdoaWNoIGlzLiIpOwotICAgICAgICBicmVhazsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLSAgaWYgKGZpbGUtPnN5bnRheCgpID09IEZpbGVEZXNjcmlwdG9yOjpT
WU5UQVhfUFJPVE8zKSB7Ci0gICAgVmFsaWRhdGVQcm90bzMoZmlsZSwgcHJvdG8pOwotICB9Ci19
Ci0KLXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OlZhbGlkYXRlUHJvdG8zKAotICAgIEZpbGVEZXNj
cmlwdG9yKiBmaWxlLCBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBwcm90bykgewotICBmb3Ig
KGludCBpID0gMDsgaSA8IGZpbGUtPmV4dGVuc2lvbl9jb3VudCgpOyArK2kpIHsKLSAgICBWYWxp
ZGF0ZVByb3RvM0ZpZWxkKGZpbGUtPmV4dGVuc2lvbnNfICsgaSwgcHJvdG8uZXh0ZW5zaW9uKGkp
KTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGUtPm1lc3NhZ2VfdHlwZV9jb3VudCgp
OyArK2kpIHsKLSAgICBWYWxpZGF0ZVByb3RvM01lc3NhZ2UoZmlsZS0+bWVzc2FnZV90eXBlc18g
KyBpLCBwcm90by5tZXNzYWdlX3R5cGUoaSkpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwg
ZmlsZS0+ZW51bV90eXBlX2NvdW50KCk7ICsraSkgewotICAgIFZhbGlkYXRlUHJvdG8zRW51bShm
aWxlLT5lbnVtX3R5cGVzXyArIGksIHByb3RvLmVudW1fdHlwZShpKSk7Ci0gIH0KLX0KLQotc3Rh
dGljIHN0cmluZyBUb0xvd2VyY2FzZVdpdGhvdXRVbmRlcnNjb3Jlcyhjb25zdCBzdHJpbmcmIG5h
bWUpIHsKLSAgc3RyaW5nIHJlc3VsdDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lLnNpemUo
KTsgKytpKSB7Ci0gICAgaWYgKG5hbWVbaV0gIT0gJ18nKSB7Ci0gICAgICBpZiAobmFtZVtpXSA+
PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpIHsKLSAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhuYW1l
W2ldIC0gJ0EnICsgJ2EnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoX2Jh
Y2sobmFtZVtpXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OlZhbGlkYXRlUHJvdG8zTWVzc2FnZSgKLSAgICBEZXNj
cmlwdG9yKiBtZXNzYWdlLCBjb25zdCBEZXNjcmlwdG9yUHJvdG8mIHByb3RvKSB7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+bmVzdGVkX3R5cGVfY291bnQoKTsgKytpKSB7Ci0gICAg
VmFsaWRhdGVQcm90bzNNZXNzYWdlKG1lc3NhZ2UtPm5lc3RlZF90eXBlc18gKyBpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8ubmVzdGVkX3R5cGUoaSkpOwotICB9Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+ZW51bV90eXBlX2NvdW50KCk7ICsraSkgewot
ICAgIFZhbGlkYXRlUHJvdG8zRW51bShtZXNzYWdlLT5lbnVtX3R5cGVzXyArIGksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm90by5lbnVtX3R5cGUoaSkpOwotICB9Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+ZmllbGRfY291bnQoKTsgKytpKSB7Ci0gICAgVmFsaWRh
dGVQcm90bzNGaWVsZChtZXNzYWdlLT5maWVsZHNfICsgaSwgcHJvdG8uZmllbGQoaSkpOwotICB9
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZS0+ZXh0ZW5zaW9uX2NvdW50KCk7ICsraSkg
ewotICAgIFZhbGlkYXRlUHJvdG8zRmllbGQobWVzc2FnZS0+ZXh0ZW5zaW9uc18gK2ksIHByb3Rv
LmV4dGVuc2lvbihpKSk7Ci0gIH0KLSAgaWYgKG1lc3NhZ2UtPmV4dGVuc2lvbl9yYW5nZV9jb3Vu
dCgpID4gMCkgewotICAgIEFkZEVycm9yKG1lc3NhZ2UtPmZ1bGxfbmFtZSgpLCBwcm90bywKLSAg
ICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok9USEVSLAotICAgICAg
ICAgICAgICJFeHRlbnNpb24gcmFuZ2VzIGFyZSBub3QgYWxsb3dlZCBpbiBwcm90bzMuIik7Ci0g
IH0KLSAgaWYgKG1lc3NhZ2UtPm9wdGlvbnMoKS5tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCgpKSB7
Ci0gICAgLy8gVXNpbmcgTWVzc2FnZVNldCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2luY2Ugd2UgZGlz
YWxsb3cgZXh0ZW5zaW9ucy4KLSAgICBBZGRFcnJvcihtZXNzYWdlLT5mdWxsX25hbWUoKSwgcHJv
dG8sCi0gICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpPVEhFUiwK
LSAgICAgICAgICAgICAiTWVzc2FnZVNldCBpcyBub3Qgc3VwcG9ydGVkIGluIHByb3RvMy4iKTsK
LSAgfQotCi0gIC8vIEluIHByb3RvMywgd2UgcmVqZWN0IGZpZWxkIG5hbWVzIGlmIHRoZXkgY29u
ZmxpY3QgaW4gY2FtZWxDYXNlLgotICAvLyBOb3RlIHRoYXQgd2UgY3VycmVudGx5IGVuZm9yY2Ug
YSBzdHJpY3RlciBydWxlOiBGaWVsZCBuYW1lcyBtdXN0IGJlCi0gIC8vIHVuaXF1ZSBhZnRlciBi
ZWluZyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIHdpdGggdW5kZXJzY29yZXMgcmVtb3ZlZC4KLSAg
bWFwPHN0cmluZywgY29uc3QgRmllbGREZXNjcmlwdG9yKj4gbmFtZV90b19maWVsZDsKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlLT5maWVsZF9jb3VudCgpOyArK2kpIHsKLSAgICBzdHJp
bmcgbG93ZXJjYXNlX25hbWUgPSBUb0xvd2VyY2FzZVdpdGhvdXRVbmRlcnNjb3JlcygKLSAgICAg
ICAgbWVzc2FnZS0+ZmllbGQoaSktPm5hbWUoKSk7Ci0gICAgaWYgKG5hbWVfdG9fZmllbGQuZmlu
ZChsb3dlcmNhc2VfbmFtZSkgIT0gbmFtZV90b19maWVsZC5lbmQoKSkgewotICAgICAgQWRkRXJy
b3IobWVzc2FnZS0+ZnVsbF9uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgICAgRGVzY3JpcHRv
clBvb2w6OkVycm9yQ29sbGVjdG9yOjpPVEhFUiwKLSAgICAgICAgICAgICAgICJUaGUgSlNPTiBj
YW1jZWwtY2FzZSBuYW1lIG9mIGZpZWxkIFwiIiArCi0gICAgICAgICAgICAgICBtZXNzYWdlLT5m
aWVsZChpKS0+bmFtZSgpICsgIlwiIGNvbmZsaWN0cyB3aXRoIGZpZWxkIFwiIiArCi0gICAgICAg
ICAgICAgICBuYW1lX3RvX2ZpZWxkW2xvd2VyY2FzZV9uYW1lXS0+bmFtZSgpICsgIlwiLiBUaGlz
IGlzIG5vdCAiICsKLSAgICAgICAgICAgICAgICJhbGxvd2VkIGluIHByb3RvMy4iKTsKLSAgICB9
IGVsc2UgewotICAgICAgbmFtZV90b19maWVsZFtsb3dlcmNhc2VfbmFtZV0gPSBtZXNzYWdlLT5m
aWVsZChpKTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6VmFsaWRh
dGVQcm90bzNGaWVsZCgKLSAgICBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBjb25zdCBGaWVsZERl
c2NyaXB0b3JQcm90byYgcHJvdG8pIHsKLSAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24oKSAmJgot
ICAgICAgIUFsbG93ZWRFeHRlbmRlZUluUHJvdG8zKGZpZWxkLT5jb250YWluaW5nX3R5cGUoKS0+
ZnVsbF9uYW1lKCkpKSB7Ci0gICAgQWRkRXJyb3IoZmllbGQtPmZ1bGxfbmFtZSgpLCBwcm90bywK
LSAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok9USEVSLAotICAg
ICAgICAgICAgICJFeHRlbnNpb25zIGluIHByb3RvMyBhcmUgb25seSBhbGxvd2VkIGZvciBkZWZp
bmluZyBvcHRpb25zLiIpOwotICB9Ci0gIGlmIChmaWVsZC0+aXNfcmVxdWlyZWQoKSkgewotICAg
IEFkZEVycm9yKGZpZWxkLT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAgICAgRGVzY3Jp
cHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpPVEhFUiwKLSAgICAgICAgICAgICAiUmVxdWlyZWQg
ZmllbGRzIGFyZSBub3QgYWxsb3dlZCBpbiBwcm90bzMuIik7Ci0gIH0KLSAgaWYgKGZpZWxkLT5o
YXNfZGVmYXVsdF92YWx1ZSgpKSB7Ci0gICAgQWRkRXJyb3IoCi0gICAgICAgIGZpZWxkLT5mdWxs
X25hbWUoKSwgcHJvdG8sIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6T1RIRVIsCi0g
ICAgICAgICJFeHBsaWNpdCBkZWZhdWx0IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgaW4gcHJvdG8z
LiIpOwotICB9Ci0gIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfRU5VTSAmJgotICAgICAgZmllbGQtPmVudW1fdHlwZSgpICYmCi0gICAgICBmaWVsZC0+
ZW51bV90eXBlKCktPmZpbGUoKS0+c3ludGF4KCkgIT0gRmlsZURlc2NyaXB0b3I6OlNZTlRBWF9Q
Uk9UTzMpIHsKLSAgICAvLyBQcm90bzMgbWVzc2FnZXMgY2FuIG9ubHkgdXNlIFByb3RvMyBlbnVt
IHR5cGVzOyBvdGhlcndpc2Ugd2UgY2FuJ3QKLSAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgZGVm
YXVsdCB2YWx1ZSBpcyB6ZXJvLgotICAgIEFkZEVycm9yKGZpZWxkLT5mdWxsX25hbWUoKSwgcHJv
dG8sCi0gICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpUWVBFLAot
ICAgICAgICAgICAgICJFbnVtIHR5cGUgXCIiICsgZmllbGQtPmVudW1fdHlwZSgpLT5mdWxsX25h
bWUoKSArCi0gICAgICAgICAgICAgIlwiIGlzIG5vdCBhIHByb3RvMyBlbnVtLCBidXQgaXMgdXNl
ZCBpbiBcIiIgKwotICAgICAgICAgICAgIGZpZWxkLT5jb250YWluaW5nX3R5cGUoKS0+ZnVsbF9u
YW1lKCkgKwotICAgICAgICAgICAgICJcIiB3aGljaCBpcyBhIHByb3RvMyBtZXNzYWdlIHR5cGUu
Iik7Ci0gIH0KLSAgaWYgKGZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0dS
T1VQKSB7Ci0gICAgQWRkRXJyb3IoZmllbGQtPmZ1bGxfbmFtZSgpLCBwcm90bywKLSAgICAgICAg
ICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OlRZUEUsCi0gICAgICAgICAgICAg
Ikdyb3VwcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBwcm90bzMgc3ludGF4LiIpOwotICB9Ci19Ci0K
LXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OlZhbGlkYXRlUHJvdG8zRW51bSgKLSAgICBFbnVtRGVz
Y3JpcHRvciogZW5tLCBjb25zdCBFbnVtRGVzY3JpcHRvclByb3RvJiBwcm90bykgewotICBpZiAo
ZW5tLT52YWx1ZV9jb3VudCgpID4gMCAmJiBlbm0tPnZhbHVlKDApLT5udW1iZXIoKSAhPSAwKSB7
Ci0gICAgQWRkRXJyb3IoCi0gICAgICAgIGVubS0+ZnVsbF9uYW1lKCksIHByb3RvLCBEZXNjcmlw
dG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok9USEVSLAotICAgICAgICAiVGhlIGZpcnN0IGVudW0g
dmFsdWUgbXVzdCBiZSB6ZXJvIGluIHByb3RvMy4iKTsKLSAgfQotfQotCi12b2lkIERlc2NyaXB0
b3JCdWlsZGVyOjpWYWxpZGF0ZU1lc3NhZ2VPcHRpb25zKERlc2NyaXB0b3IqIG1lc3NhZ2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2Ny
aXB0b3JQcm90byYgcHJvdG8pIHsKLSAgVkFMSURBVEVfT1BUSU9OU19GUk9NX0FSUkFZKG1lc3Nh
Z2UsIGZpZWxkLCBGaWVsZCk7Ci0gIFZBTElEQVRFX09QVElPTlNfRlJPTV9BUlJBWShtZXNzYWdl
LCBuZXN0ZWRfdHlwZSwgTWVzc2FnZSk7Ci0gIFZBTElEQVRFX09QVElPTlNfRlJPTV9BUlJBWSht
ZXNzYWdlLCBlbnVtX3R5cGUsIEVudW0pOwotICBWQUxJREFURV9PUFRJT05TX0ZST01fQVJSQVko
bWVzc2FnZSwgZXh0ZW5zaW9uLCBGaWVsZCk7Ci0KLSAgY29uc3QgaW50NjQgbWF4X2V4dGVuc2lv
bl9yYW5nZSA9Ci0gICAgICBzdGF0aWNfY2FzdDxpbnQ2ND4obWVzc2FnZS0+b3B0aW9ucygpLm1l
c3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgIGtpbnQz
Mm1heCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yOjprTWF4TnVt
YmVyKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlLT5leHRlbnNpb25fcmFuZ2VfY291
bnQoKTsgKytpKSB7Ci0gICAgaWYgKG1lc3NhZ2UtPmV4dGVuc2lvbl9yYW5nZShpKS0+ZW5kID4g
bWF4X2V4dGVuc2lvbl9yYW5nZSArIDEpIHsKLSAgICAgIEFkZEVycm9yKAotICAgICAgICAgIG1l
c3NhZ2UtPmZ1bGxfbmFtZSgpLCBwcm90by5leHRlbnNpb25fcmFuZ2UoaSksCi0gICAgICAgICAg
RGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpOVU1CRVIsCi0gICAgICAgICAgc3RyaW5n
czo6U3Vic3RpdHV0ZSgiRXh0ZW5zaW9uIG51bWJlcnMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAk
MC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2V4dGVuc2lvbl9yYW5nZSkp
OwotICAgIH0KLSAgfQotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpWYWxpZGF0ZUZpZWxk
T3B0aW9ucyhGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
clByb3RvJiBwcm90bykgewotICAvLyBPbmx5IG1lc3NhZ2UgdHlwZSBmaWVsZHMgbWF5IGJlIGxh
enkuCi0gIGlmIChmaWVsZC0+b3B0aW9ucygpLmxhenkoKSkgewotICAgIGlmIChmaWVsZC0+dHlw
ZSgpICE9IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdFKSB7Ci0gICAgICBBZGRFcnJvcihm
aWVsZC0+ZnVsbF9uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6
OkVycm9yQ29sbGVjdG9yOjpUWVBFLAotICAgICAgICAgICAgICAgIltsYXp5ID0gdHJ1ZV0gY2Fu
IG9ubHkgYmUgc3BlY2lmaWVkIGZvciBzdWJtZXNzYWdlIGZpZWxkcy4iKTsKLSAgICB9Ci0gIH0K
LQotICAvLyBPbmx5IHJlcGVhdGVkIHByaW1pdGl2ZSBmaWVsZHMgbWF5IGJlIHBhY2tlZC4KLSAg
aWYgKGZpZWxkLT5vcHRpb25zKCkucGFja2VkKCkgJiYgIWZpZWxkLT5pc19wYWNrYWJsZSgpKSB7
Ci0gICAgQWRkRXJyb3IoCi0gICAgICBmaWVsZC0+ZnVsbF9uYW1lKCksIHByb3RvLAotICAgICAg
RGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpUWVBFLAotICAgICAgIltwYWNrZWQgPSB0
cnVlXSBjYW4gb25seSBiZSBzcGVjaWZpZWQgZm9yIHJlcGVhdGVkIHByaW1pdGl2ZSBmaWVsZHMu
Iik7Ci0gIH0KLQotICAvLyBOb3RlOiAgRGVmYXVsdCBpbnN0YW5jZSBtYXkgbm90IHlldCBiZSBp
bml0aWFsaXplZCBoZXJlLCBzbyB3ZSBoYXZlIHRvCi0gIC8vICAgYXZvaWQgcmVhZGluZyBmcm9t
IGl0LgotICBpZiAoZmllbGQtPmNvbnRhaW5pbmdfdHlwZV8gIT0gTlVMTCAmJgotICAgICAgJmZp
ZWxkLT5jb250YWluaW5nX3R5cGUoKS0+b3B0aW9ucygpICE9Ci0gICAgICAmTWVzc2FnZU9wdGlv
bnM6OmRlZmF1bHRfaW5zdGFuY2UoKSAmJgotICAgICAgZmllbGQtPmNvbnRhaW5pbmdfdHlwZSgp
LT5vcHRpb25zKCkubWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSkgewotICAgIGlmIChmaWVsZC0+
aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICAgIGlmICghZmllbGQtPmlzX29wdGlvbmFsKCkgfHwKLSAg
ICAgICAgICBmaWVsZC0+dHlwZSgpICE9IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdFKSB7
Ci0gICAgICAgIEFkZEVycm9yKGZpZWxkLT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAg
ICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6VFlQRSwKLSAgICAgICAgICAg
ICAgICAgIkV4dGVuc2lvbnMgb2YgTWVzc2FnZVNldHMgbXVzdCBiZSBvcHRpb25hbCBtZXNzYWdl
cy4iKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgQWRkRXJyb3IoZmllbGQtPmZ1bGxf
bmFtZSgpLCBwcm90bywKLSAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxl
Y3Rvcjo6TkFNRSwKLSAgICAgICAgICAgICAgICJNZXNzYWdlU2V0cyBjYW5ub3QgaGF2ZSBmaWVs
ZHMsIG9ubHkgZXh0ZW5zaW9ucy4iKTsKLSAgICB9Ci0gIH0KLQotICAvLyBMaXRlIGV4dGVuc2lv
bnMgY2FuIG9ubHkgYmUgb2YgTGl0ZSB0eXBlcy4KLSAgaWYgKElzTGl0ZShmaWVsZC0+ZmlsZSgp
KSAmJgotICAgICAgZmllbGQtPmNvbnRhaW5pbmdfdHlwZV8gIT0gTlVMTCAmJgotICAgICAgIUlz
TGl0ZShmaWVsZC0+Y29udGFpbmluZ190eXBlKCktPmZpbGUoKSkpIHsKLSAgICBBZGRFcnJvcihm
aWVsZC0+ZnVsbF9uYW1lKCksIHByb3RvLAotICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpF
cnJvckNvbGxlY3Rvcjo6RVhURU5ERUUsCi0gICAgICAgICAgICAgIkV4dGVuc2lvbnMgdG8gbm9u
LWxpdGUgdHlwZXMgY2FuIG9ubHkgYmUgZGVjbGFyZWQgaW4gbm9uLWxpdGUgIgotICAgICAgICAg
ICAgICJmaWxlcy4gIE5vdGUgdGhhdCB5b3UgY2Fubm90IGV4dGVuZCBhIG5vbi1saXRlIHR5cGUg
dG8gY29udGFpbiAiCi0gICAgICAgICAgICAgImEgbGl0ZSB0eXBlLCBidXQgdGhlIHJldmVyc2Ug
aXMgYWxsb3dlZC4iKTsKLSAgfQotCi0gIC8vIFZhbGlkYXRlIG1hcCB0eXBlcy4KLSAgaWYgKGZp
ZWxkLT5pc19tYXAoKSkgewotICAgIGlmICghVmFsaWRhdGVNYXBFbnRyeShmaWVsZCwgcHJvdG8p
KSB7Ci0gICAgICBBZGRFcnJvcihmaWVsZC0+ZnVsbF9uYW1lKCksIHByb3RvLAotICAgICAgICAg
ICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpPVEhFUiwKLSAgICAgICAgICAg
ICAgICJtYXBfZW50cnkgc2hvdWxkIG5vdCBiZSBzZXQgZXhwbGljaXRseS4gVXNlIG1hcDxLZXlU
eXBlLCAiCi0gICAgICAgICAgICAgICAiVmFsdWVUeXBlPiBpbnN0ZWFkLiIpOwotICAgIH0KLSAg
fQotCi19Ci0KLXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OlZhbGlkYXRlRW51bU9wdGlvbnMoRW51
bURlc2NyaXB0b3IqIGVubSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRW51bURlc2NyaXB0b3JQcm90byYgcHJvdG8pIHsKLSAgVkFMSURBVEVfT1BU
SU9OU19GUk9NX0FSUkFZKGVubSwgdmFsdWUsIEVudW1WYWx1ZSk7Ci0gIGlmICghZW5tLT5vcHRp
b25zKCkuaGFzX2FsbG93X2FsaWFzKCkgfHwgIWVubS0+b3B0aW9ucygpLmFsbG93X2FsaWFzKCkp
IHsKLSAgICBtYXA8aW50LCBzdHJpbmc+IHVzZWRfdmFsdWVzOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZW5tLT52YWx1ZV9jb3VudCgpOyArK2kpIHsKLSAgICAgIGNvbnN0IEVudW1WYWx1ZURl
c2NyaXB0b3IqIGVudW1fdmFsdWUgPSBlbm0tPnZhbHVlKGkpOwotICAgICAgaWYgKHVzZWRfdmFs
dWVzLmZpbmQoZW51bV92YWx1ZS0+bnVtYmVyKCkpICE9IHVzZWRfdmFsdWVzLmVuZCgpKSB7Ci0g
ICAgICAgIHN0cmluZyBlcnJvciA9Ci0gICAgICAgICAgICAiXCIiICsgZW51bV92YWx1ZS0+ZnVs
bF9uYW1lKCkgKwotICAgICAgICAgICAgIlwiIHVzZXMgdGhlIHNhbWUgZW51bSB2YWx1ZSBhcyBc
IiIgKwotICAgICAgICAgICAgdXNlZF92YWx1ZXNbZW51bV92YWx1ZS0+bnVtYmVyKCldICsgIlwi
LiBJZiB0aGlzIGlzIGludGVuZGVkLCBzZXQgIgotICAgICAgICAgICAgIidvcHRpb24gYWxsb3df
YWxpYXMgPSB0cnVlOycgdG8gdGhlIGVudW0gZGVmaW5pdGlvbi4iOwotICAgICAgICBpZiAoIWVu
bS0+b3B0aW9ucygpLmFsbG93X2FsaWFzKCkpIHsKLSAgICAgICAgICAvLyBHZW5lcmF0ZSBlcnJv
ciBpZiBkdXBsaWNhdGVkIGVudW0gdmFsdWVzIGFyZSBleHBsaWNpdGx5IGRpc2FsbG93ZWQuCi0g
ICAgICAgICAgQWRkRXJyb3IoZW5tLT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAgICAg
ICAgICAgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yOjpOVU1CRVIsCi0gICAgICAgICAg
ICAgICAgICAgZXJyb3IpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIEdlbmVyYXRl
IHdhcm5pbmcgaWYgZHVwbGljYXRlZCB2YWx1ZXMgYXJlIGZvdW5kIGJ1dCB0aGUgb3B0aW9uCi0g
ICAgICAgICAgLy8gaXNuJ3Qgc2V0LgotICAgICAgICAgIEdPT0dMRV9MT0coRVJST1IpIDw8IGVy
cm9yOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICB1c2VkX3ZhbHVlc1tlbnVt
X3ZhbHVlLT5udW1iZXIoKV0gPSBlbnVtX3ZhbHVlLT5mdWxsX25hbWUoKTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLX0KLQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6VmFsaWRhdGVFbnVtVmFsdWVP
cHRpb25zKAotICAgIEVudW1WYWx1ZURlc2NyaXB0b3IqIC8qIGVudW1fdmFsdWUgKi8sCi0gICAg
Y29uc3QgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvJiAvKiBwcm90byAqLykgewotICAvLyBOb3Ro
aW5nIHRvIGRvIHNvIGZhci4KLX0KLXZvaWQgRGVzY3JpcHRvckJ1aWxkZXI6OlZhbGlkYXRlU2Vy
dmljZU9wdGlvbnMoU2VydmljZURlc2NyaXB0b3IqIHNlcnZpY2UsCi0gICAgY29uc3QgU2Vydmlj
ZURlc2NyaXB0b3JQcm90byYgcHJvdG8pIHsKLSAgaWYgKElzTGl0ZShzZXJ2aWNlLT5maWxlKCkp
ICYmCi0gICAgICAoc2VydmljZS0+ZmlsZSgpLT5vcHRpb25zKCkuY2NfZ2VuZXJpY19zZXJ2aWNl
cygpIHx8Ci0gICAgICAgc2VydmljZS0+ZmlsZSgpLT5vcHRpb25zKCkuamF2YV9nZW5lcmljX3Nl
cnZpY2VzKCkpKSB7Ci0gICAgQWRkRXJyb3Ioc2VydmljZS0+ZnVsbF9uYW1lKCksIHByb3RvLAot
ICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6TkFNRSwKLSAgICAg
ICAgICAgICAiRmlsZXMgd2l0aCBvcHRpbWl6ZV9mb3IgPSBMSVRFX1JVTlRJTUUgY2Fubm90IGRl
ZmluZSBzZXJ2aWNlcyAiCi0gICAgICAgICAgICAgInVubGVzcyB5b3Ugc2V0IGJvdGggb3B0aW9u
cyBjY19nZW5lcmljX3NlcnZpY2VzIGFuZCAiCi0gICAgICAgICAgICAgImphdmFfZ2VuZXJpY19z
ZXZpY2VzIHRvIGZhbHNlLiIpOwotICB9Ci0KLSAgVkFMSURBVEVfT1BUSU9OU19GUk9NX0FSUkFZ
KHNlcnZpY2UsIG1ldGhvZCwgTWV0aG9kKTsKLX0KLQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6
VmFsaWRhdGVNZXRob2RPcHRpb25zKE1ldGhvZERlc2NyaXB0b3IqIC8qIG1ldGhvZCAqLywKLSAg
ICBjb25zdCBNZXRob2REZXNjcmlwdG9yUHJvdG8mIC8qIHByb3RvICovKSB7Ci0gIC8vIE5vdGhp
bmcgdG8gZG8gc28gZmFyLgotfQotCi1ib29sIERlc2NyaXB0b3JCdWlsZGVyOjpWYWxpZGF0ZU1h
cEVudHJ5KEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvJiBwcm90bykgewotICBj
b25zdCBEZXNjcmlwdG9yKiBtZXNzYWdlID0gZmllbGQtPm1lc3NhZ2VfdHlwZSgpOwotICBpZiAo
Ly8gTXVzdCBub3QgY29udGFpbiBleHRlbnNpb25zLCBleHRlbnNpb24gcmFuZ2Ugb3IgbmVzdGVk
IG1lc3NhZ2Ugb3IKLSAgICAgIC8vIGVudW1zCi0gICAgICBtZXNzYWdlLT5leHRlbnNpb25fY291
bnQoKSAhPSAwIHx8Ci0gICAgICBmaWVsZC0+bGFiZWwoKSAhPSBGaWVsZERlc2NyaXB0b3I6OkxB
QkVMX1JFUEVBVEVEIHx8Ci0gICAgICBtZXNzYWdlLT5leHRlbnNpb25fcmFuZ2VfY291bnQoKSAh
PSAwIHx8Ci0gICAgICBtZXNzYWdlLT5uZXN0ZWRfdHlwZV9jb3VudCgpICE9IDAgfHwgbWVzc2Fn
ZS0+ZW51bV90eXBlX2NvdW50KCkgIT0gMCB8fAotICAgICAgLy8gTXVzdCBjb250YWluIGV4YWN0
bHkgdHdvIGZpZWxkcwotICAgICAgbWVzc2FnZS0+ZmllbGRfY291bnQoKSAhPSAyIHx8Ci0gICAg
ICAvLyBGaWVsZCBuYW1lIGFuZCBtZXNzYWdlIG5hbWUgbXVzdCBtYXRjaAotICAgICAgbWVzc2Fn
ZS0+bmFtZSgpICE9IFRvQ2FtZWxDYXNlKGZpZWxkLT5uYW1lKCksIGZhbHNlKSArICJFbnRyeSIg
fHwKLSAgICAgIC8vIEVudHJ5IG1lc3NhZ2UgbXVzdCBiZSBpbiB0aGUgc2FtZSBjb250YWluaW5n
IHR5cGUgb2YgdGhlIGZpZWxkLgotICAgICAgZmllbGQtPmNvbnRhaW5pbmdfdHlwZSgpICE9IG1l
c3NhZ2UtPmNvbnRhaW5pbmdfdHlwZSgpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXkgPSBtZXNzYWdlLT5maWVsZCgwKTsKLSAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiB2YWx1ZSA9IG1lc3NhZ2UtPmZpZWxkKDEpOwotICBpZiAoa2V5LT5s
YWJlbCgpICE9IEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfT1BUSU9OQUwgfHwga2V5LT5udW1iZXIo
KSAhPSAxIHx8Ci0gICAgICBrZXktPm5hbWUoKSAhPSAia2V5IikgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICBpZiAodmFsdWUtPmxhYmVsKCkgIT0gRmllbGREZXNjcmlwdG9yOjpMQUJFTF9P
UFRJT05BTCB8fAotICAgICAgdmFsdWUtPm51bWJlcigpICE9IDIgfHwgdmFsdWUtPm5hbWUoKSAh
PSAidmFsdWUiKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gQ2hlY2sga2V5IHR5
cGVzIGFyZSBsZWdhbC4KLSAgc3dpdGNoIChrZXktPnR5cGUoKSkgewotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX0VOVU06Ci0gICAgICBBZGRFcnJvcigKLSAgICAgICAgICBmaWVsZC0+
ZnVsbF9uYW1lKCksIHByb3RvLCBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0b3I6OlRZUEUs
Ci0gICAgICAgICAgIktleSBpbiBtYXAgZmllbGRzIGNhbm5vdCBiZSBlbnVtIHR5cGVzLiIpOwot
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRkxPQVQ6Ci0gICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRE9VQkxFOgotICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpUWVBFX01FU1NBR0U6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfR1JPVVA6
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVM6Ci0gICAgICBBZGRFcnJvcigK
LSAgICAgICAgICBmaWVsZC0+ZnVsbF9uYW1lKCksIHByb3RvLCBEZXNjcmlwdG9yUG9vbDo6RXJy
b3JDb2xsZWN0b3I6OlRZUEUsCi0gICAgICAgICAgIktleSBpbiBtYXAgZmllbGRzIGNhbm5vdCBi
ZSBmbG9hdC9kb3VibGUsIGJ5dGVzIG9yIG1lc3NhZ2UgdHlwZXMuIik7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CT09MOgotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpUWVBFX0lOVDMyOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0lOVDY0
OgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NJTlQzMjoKLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9TSU5UNjQ6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVf
U1RSSU5HOgotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1VJTlQzMjoKLSAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UNjQ6Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OlRZUEVfRklYRUQzMjoKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhFRDY0Ogot
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDMyOgotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDY0OgotICAgICAgLy8gTGVnYWwgY2FzZXMKLSAgICAgIGJy
ZWFrOwotICAgIC8vIERvIG5vdCBhZGQgYSBkZWZhdWx0LCBzbyB0aGF0IHRoZSBjb21waWxlciB3
aWxsIGNvbXBsYWluIHdoZW4gbmV3IHR5cGVzCi0gICAgLy8gYXJlIGFkZGVkLgotICB9Ci0KLSAg
aWYgKHZhbHVlLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU0pIHsKLSAgICBp
ZiAodmFsdWUtPmVudW1fdHlwZSgpLT52YWx1ZSgwKS0+bnVtYmVyKCkgIT0gMCkgewotICAgICAg
QWRkRXJyb3IoCi0gICAgICAgICAgZmllbGQtPmZ1bGxfbmFtZSgpLCBwcm90bywgRGVzY3JpcHRv
clBvb2w6OkVycm9yQ29sbGVjdG9yOjpUWVBFLAotICAgICAgICAgICJFbnVtIHZhbHVlIGluIG1h
cCBtdXN0IGRlZmluZSAwIGFzIHRoZSBmaXJzdCB2YWx1ZS4iKTsKLSAgICB9Ci0gIH0KLQotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBEZXNjcmlwdG9yQnVpbGRlcjo6RGV0ZWN0TWFwQ29uZmxp
Y3RzKGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvclByb3RvJiBwcm90bykgewotICBtYXA8
c3RyaW5nLCBjb25zdCBEZXNjcmlwdG9yKj4gc2Vlbl90eXBlczsKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtZXNzYWdlLT5uZXN0ZWRfdHlwZV9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBEZXNj
cmlwdG9yKiBuZXN0ZWQgPSBtZXNzYWdlLT5uZXN0ZWRfdHlwZShpKTsKLSAgICBwYWlyPG1hcDxz
dHJpbmcsIGNvbnN0IERlc2NyaXB0b3IqPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9Ci0gICAg
ICAgIHNlZW5fdHlwZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKG5lc3RlZC0+bmFtZSgpLCBuZXN0
ZWQpKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAgICAgIGlmIChyZXN1bHQuZmlyc3Qt
PnNlY29uZC0+b3B0aW9ucygpLm1hcF9lbnRyeSgpIHx8Ci0gICAgICAgICAgbmVzdGVkLT5vcHRp
b25zKCkubWFwX2VudHJ5KCkpIHsKLSAgICAgICAgQWRkRXJyb3IobWVzc2FnZS0+ZnVsbF9uYW1l
KCksIHByb3RvLAotICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6RXJyb3JDb2xsZWN0
b3I6Ok5BTUUsCi0gICAgICAgICAgICAgICAgICJFeHBhbmRlZCBtYXAgZW50cnkgdHlwZSAiICsg
bmVzdGVkLT5uYW1lKCkgKwotICAgICAgICAgICAgICAgICAiIGNvbmZsaWN0cyB3aXRoIGFuIGV4
aXN0aW5nIG5lc3RlZCBtZXNzYWdlIHR5cGUuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIFJl
Y3Vyc2l2ZWx5IHRlc3Qgb24gdGhlIG5lc3RlZCB0eXBlcy4KLSAgICBEZXRlY3RNYXBDb25mbGlj
dHMobWVzc2FnZS0+bmVzdGVkX3R5cGUoaSksIHByb3RvLm5lc3RlZF90eXBlKGkpKTsKLSAgfQot
ICAvLyBDaGVjayBmb3IgY29uZmxpY3RlZCBmaWVsZCBuYW1lcy4KLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtZXNzYWdlLT5maWVsZF9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkID0gbWVzc2FnZS0+ZmllbGQoaSk7Ci0gICAgbWFwPHN0cmluZywgY29uc3Qg
RGVzY3JpcHRvcio+OjppdGVyYXRvciBpdGVyID0KLSAgICAgICAgc2Vlbl90eXBlcy5maW5kKGZp
ZWxkLT5uYW1lKCkpOwotICAgIGlmIChpdGVyICE9IHNlZW5fdHlwZXMuZW5kKCkgJiYgaXRlci0+
c2Vjb25kLT5vcHRpb25zKCkubWFwX2VudHJ5KCkpIHsKLSAgICAgIEFkZEVycm9yKG1lc3NhZ2Ut
PmZ1bGxfbmFtZSgpLCBwcm90bywKLSAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJv
ckNvbGxlY3Rvcjo6TkFNRSwKLSAgICAgICAgICAgICAgICJFeHBhbmRlZCBtYXAgZW50cnkgdHlw
ZSAiICsgaXRlci0+c2Vjb25kLT5uYW1lKCkgKwotICAgICAgICAgICAgICAgIiBjb25mbGljdHMg
d2l0aCBhbiBleGlzdGluZyBmaWVsZC4iKTsKLSAgICB9Ci0gIH0KLSAgLy8gQ2hlY2sgZm9yIGNv
bmZsaWN0ZWQgZW51bSBuYW1lcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlLT5lbnVt
X3R5cGVfY291bnQoKTsgKytpKSB7Ci0gICAgY29uc3QgRW51bURlc2NyaXB0b3IqIGVudW1fZGVz
YyA9IG1lc3NhZ2UtPmVudW1fdHlwZShpKTsKLSAgICBtYXA8c3RyaW5nLCBjb25zdCBEZXNjcmlw
dG9yKj46Oml0ZXJhdG9yIGl0ZXIgPQotICAgICAgICBzZWVuX3R5cGVzLmZpbmQoZW51bV9kZXNj
LT5uYW1lKCkpOwotICAgIGlmIChpdGVyICE9IHNlZW5fdHlwZXMuZW5kKCkgJiYgaXRlci0+c2Vj
b25kLT5vcHRpb25zKCkubWFwX2VudHJ5KCkpIHsKLSAgICAgIEFkZEVycm9yKG1lc3NhZ2UtPmZ1
bGxfbmFtZSgpLCBwcm90bywKLSAgICAgICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpFcnJvckNv
bGxlY3Rvcjo6TkFNRSwKLSAgICAgICAgICAgICAgICJFeHBhbmRlZCBtYXAgZW50cnkgdHlwZSAi
ICsgaXRlci0+c2Vjb25kLT5uYW1lKCkgKwotICAgICAgICAgICAgICAgIiBjb25mbGljdHMgd2l0
aCBhbiBleGlzdGluZyBlbnVtIHR5cGUuIik7Ci0gICAgfQotICB9Ci0gIC8vIENoZWNrIGZvciBj
b25mbGljdGVkIG9uZW9mIG5hbWVzLgotICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2UtPm9u
ZW9mX2RlY2xfY291bnQoKTsgKytpKSB7Ci0gICAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVv
Zl9kZXNjID0gbWVzc2FnZS0+b25lb2ZfZGVjbChpKTsKLSAgICBtYXA8c3RyaW5nLCBjb25zdCBE
ZXNjcmlwdG9yKj46Oml0ZXJhdG9yIGl0ZXIgPQotICAgICAgICBzZWVuX3R5cGVzLmZpbmQob25l
b2ZfZGVzYy0+bmFtZSgpKTsKLSAgICBpZiAoaXRlciAhPSBzZWVuX3R5cGVzLmVuZCgpICYmIGl0
ZXItPnNlY29uZC0+b3B0aW9ucygpLm1hcF9lbnRyeSgpKSB7Ci0gICAgICBBZGRFcnJvcihtZXNz
YWdlLT5mdWxsX25hbWUoKSwgcHJvdG8sCi0gICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6
RXJyb3JDb2xsZWN0b3I6Ok5BTUUsCi0gICAgICAgICAgICAgICAiRXhwYW5kZWQgbWFwIGVudHJ5
IHR5cGUgIiArIGl0ZXItPnNlY29uZC0+bmFtZSgpICsKLSAgICAgICAgICAgICAgICIgY29uZmxp
Y3RzIHdpdGggYW4gZXhpc3Rpbmcgb25lb2YgdHlwZS4iKTsKLSAgICB9Ci0gIH0KLX0KLQotCi0j
dW5kZWYgVkFMSURBVEVfT1BUSU9OU19GUk9NX0FSUkFZCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRGVz
Y3JpcHRvckJ1aWxkZXI6Ok9wdGlvbkludGVycHJldGVyOjpPcHRpb25JbnRlcnByZXRlcigKLSAg
ICBEZXNjcmlwdG9yQnVpbGRlciogYnVpbGRlcikgOiBidWlsZGVyXyhidWlsZGVyKSB7Ci0gIEdP
T0dMRV9DSEVDSyhidWlsZGVyXyk7Ci19Ci0KLURlc2NyaXB0b3JCdWlsZGVyOjpPcHRpb25JbnRl
cnByZXRlcjo6fk9wdGlvbkludGVycHJldGVyKCkgewotfQotCi1ib29sIERlc2NyaXB0b3JCdWls
ZGVyOjpPcHRpb25JbnRlcnByZXRlcjo6SW50ZXJwcmV0T3B0aW9ucygKLSAgICBPcHRpb25zVG9J
bnRlcnByZXQqIG9wdGlvbnNfdG9faW50ZXJwcmV0KSB7Ci0gIC8vIE5vdGUgdGhhdCB0aGVzZSBt
YXkgYmUgaW4gZGlmZmVyZW50IHBvb2xzLCBzbyB3ZSBjYW4ndCB1c2UgdGhlIHNhbWUKLSAgLy8g
ZGVzY3JpcHRvciBhbmQgcmVmbGVjdGlvbiBvYmplY3RzIG9uIGJvdGguCi0gIE1lc3NhZ2UqIG9w
dGlvbnMgPSBvcHRpb25zX3RvX2ludGVycHJldC0+b3B0aW9uczsKLSAgY29uc3QgTWVzc2FnZSog
b3JpZ2luYWxfb3B0aW9ucyA9IG9wdGlvbnNfdG9faW50ZXJwcmV0LT5vcmlnaW5hbF9vcHRpb25z
OwotCi0gIGJvb2wgZmFpbGVkID0gZmFsc2U7Ci0gIG9wdGlvbnNfdG9faW50ZXJwcmV0XyA9IG9w
dGlvbnNfdG9faW50ZXJwcmV0OwotCi0gIC8vIEZpbmQgdGhlIHVuaW50ZXJwcmV0ZWRfb3B0aW9u
IGZpZWxkIGluIHRoZSBtdXRhYmxlIGNvcHkgb2YgdGhlIG9wdGlvbnMKLSAgLy8gYW5kIGNsZWFy
IHRoZW0sIHNpbmNlIHdlJ3JlIGFib3V0IHRvIGludGVycHJldCB0aGVtLgotICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIHVuaW50ZXJwcmV0ZWRfb3B0aW9uc19maWVsZCA9Ci0gICAgICBvcHRpb25z
LT5HZXREZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgidW5pbnRlcnByZXRlZF9vcHRpb24i
KTsKLSAgR09PR0xFX0NIRUNLKHVuaW50ZXJwcmV0ZWRfb3B0aW9uc19maWVsZCAhPSBOVUxMKQot
ICAgICAgPDwgIk5vIGZpZWxkIG5hbWVkIFwidW5pbnRlcnByZXRlZF9vcHRpb25cIiBpbiB0aGUg
T3B0aW9ucyBwcm90by4iOwotICBvcHRpb25zLT5HZXRSZWZsZWN0aW9uKCktPkNsZWFyRmllbGQo
b3B0aW9ucywgdW5pbnRlcnByZXRlZF9vcHRpb25zX2ZpZWxkKTsKLQotICAvLyBGaW5kIHRoZSB1
bmludGVycHJldGVkX29wdGlvbiBmaWVsZCBpbiB0aGUgb3JpZ2luYWwgb3B0aW9ucy4KLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBvcmlnaW5hbF91bmludGVycHJldGVkX29wdGlvbnNfZmllbGQg
PQotICAgICAgb3JpZ2luYWxfb3B0aW9ucy0+R2V0RGVzY3JpcHRvcigpLT4KLSAgICAgICAgICBG
aW5kRmllbGRCeU5hbWUoInVuaW50ZXJwcmV0ZWRfb3B0aW9uIik7Ci0gIEdPT0dMRV9DSEVDSyhv
cmlnaW5hbF91bmludGVycHJldGVkX29wdGlvbnNfZmllbGQgIT0gTlVMTCkKLSAgICAgIDw8ICJO
byBmaWVsZCBuYW1lZCBcInVuaW50ZXJwcmV0ZWRfb3B0aW9uXCIgaW4gdGhlIE9wdGlvbnMgcHJv
dG8uIjsKLQotICBjb25zdCBpbnQgbnVtX3VuaW50ZXJwcmV0ZWRfb3B0aW9ucyA9IG9yaWdpbmFs
X29wdGlvbnMtPkdldFJlZmxlY3Rpb24oKS0+Ci0gICAgICBGaWVsZFNpemUoKm9yaWdpbmFsX29w
dGlvbnMsIG9yaWdpbmFsX3VuaW50ZXJwcmV0ZWRfb3B0aW9uc19maWVsZCk7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtX3VuaW50ZXJwcmV0ZWRfb3B0aW9uczsgKytpKSB7Ci0gICAgdW5pbnRl
cnByZXRlZF9vcHRpb25fID0gZG93bl9jYXN0PGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24qPigK
LSAgICAgICAgJm9yaWdpbmFsX29wdGlvbnMtPkdldFJlZmxlY3Rpb24oKS0+R2V0UmVwZWF0ZWRN
ZXNzYWdlKAotICAgICAgICAgICAgKm9yaWdpbmFsX29wdGlvbnMsIG9yaWdpbmFsX3VuaW50ZXJw
cmV0ZWRfb3B0aW9uc19maWVsZCwgaSkpOwotICAgIGlmICghSW50ZXJwcmV0U2luZ2xlT3B0aW9u
KG9wdGlvbnMpKSB7Ci0gICAgICAvLyBFcnJvciBhbHJlYWR5IGFkZGVkIGJ5IEludGVycHJldFNp
bmdsZU9wdGlvbigpLgotICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0K
LSAgfQotICAvLyBSZXNldCB0aGVzZSwgc28gd2UgZG9uJ3QgaGF2ZSBhbnkgZGFuZ2xpbmcgcG9p
bnRlcnMuCi0gIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXyA9IE5VTEw7Ci0gIG9wdGlvbnNfdG9faW50
ZXJwcmV0XyA9IE5VTEw7Ci0KLSAgaWYgKCFmYWlsZWQpIHsKLSAgICAvLyBJbnRlcnByZXRTaW5n
bGVPcHRpb24oKSBhZGRlZCB0aGUgaW50ZXJwcmV0ZWQgb3B0aW9ucyBpbiB0aGUKLSAgICAvLyBV
bmtub3duRmllbGRTZXQsIGluIGNhc2UgdGhlIG9wdGlvbiBpc24ndCB5ZXQga25vd24gdG8gdXMu
ICBOb3cgd2UKLSAgICAvLyBzZXJpYWxpemUgdGhlIG9wdGlvbnMgbWVzc2FnZSBhbmQgZGVzZXJp
YWxpemUgaXQgYmFjay4gIFRoYXQgd2F5LCBhbnkKLSAgICAvLyBvcHRpb24gZmllbGRzIHRoYXQg
d2UgZG8gaGFwcGVuIHRvIGtub3cgYWJvdXQgd2lsbCBnZXQgbW92ZWQgZnJvbSB0aGUKLSAgICAv
LyBVbmtub3duRmllbGRTZXQgaW50byB0aGUgcmVhbCBmaWVsZHMsIGFuZCB0aHVzIGJlIGF2YWls
YWJsZSByaWdodCBhd2F5LgotICAgIC8vIElmIHRoZXkgYXJlIG5vdCBrbm93biwgdGhhdCdzIE9L
IHRvby4gVGhleSB3aWxsIGdldCByZXBhcnNlZCBpbnRvIHRoZQotICAgIC8vIFVua25vd25GaWVs
ZFNldCBhbmQgd2FpdCB0aGVyZSB1bnRpbCB0aGUgbWVzc2FnZSBpcyBwYXJzZWQgYnkgc29tZXRo
aW5nCi0gICAgLy8gdGhhdCBkb2VzIGtub3cgYWJvdXQgdGhlIG9wdGlvbnMuCi0gICAgc3RyaW5n
IGJ1ZjsKLSAgICBHT09HTEVfQ0hFQ0sob3B0aW9ucy0+QXBwZW5kUGFydGlhbFRvU3RyaW5nKCZi
dWYpKQotICAgICAgICA8PCAiUHJvdG9jb2wgbWVzc2FnZSBjb3VsZCBub3QgYmUgc2VyaWFsaXpl
ZC4iOwotICAgIEdPT0dMRV9DSEVDSyhvcHRpb25zLT5QYXJzZVBhcnRpYWxGcm9tU3RyaW5nKGJ1
ZikpCi0gICAgICAgIDw8ICJQcm90b2NvbCBtZXNzYWdlIHNlcmlhbGl6ZWQgaXRzZWxmIGluIGlu
dmFsaWQgZmFzaGlvbi4iOwotICAgIGlmICghb3B0aW9ucy0+SXNJbml0aWFsaXplZCgpKSB7Ci0g
ICAgICBidWlsZGVyXy0+QWRkV2FybmluZygKLSAgICAgICAgICBvcHRpb25zX3RvX2ludGVycHJl
dC0+ZWxlbWVudF9uYW1lLCAqb3JpZ2luYWxfb3B0aW9ucywKLSAgICAgICAgICBEZXNjcmlwdG9y
UG9vbDo6RXJyb3JDb2xsZWN0b3I6Ok9USEVSLAotICAgICAgICAgICJPcHRpb25zIGNvdWxkIG5v
dCBiZSBmdWxseSBwYXJzZWQgdXNpbmcgdGhlIHByb3RvIGRlc2NyaXB0b3JzICIKLSAgICAgICAg
ICAiY29tcGlsZWQgaW50byB0aGlzIGJpbmFyeS4gTWlzc2luZyByZXF1aXJlZCBmaWVsZHM6ICIg
KwotICAgICAgICAgIG9wdGlvbnMtPkluaXRpYWxpemF0aW9uRXJyb3JTdHJpbmcoKSk7Ci0gICAg
fQotICB9Ci0gIHJldHVybiAhZmFpbGVkOwotfQotCi1ib29sIERlc2NyaXB0b3JCdWlsZGVyOjpP
cHRpb25JbnRlcnByZXRlcjo6SW50ZXJwcmV0U2luZ2xlT3B0aW9uKAotICAgIE1lc3NhZ2UqIG9w
dGlvbnMpIHsKLSAgLy8gRmlyc3QgZG8gc29tZSBiYXNpYyB2YWxpZGF0aW9uLgotICBpZiAodW5p
bnRlcnByZXRlZF9vcHRpb25fLT5uYW1lX3NpemUoKSA9PSAwKSB7Ci0gICAgLy8gVGhpcyBzaG91
bGQgbmV2ZXIgaGFwcGVuIHVubGVzcyB0aGUgcGFyc2VyIGhhcyBnb25lIHNlcmlvdXNseSBhd3J5
IG9yCi0gICAgLy8gc29tZW9uZSBoYXMgbWFudWFsbHkgY3JlYXRlZCB0aGUgdW5pbnRlcnByZXRl
ZCBvcHRpb24gYmFkbHkuCi0gICAgcmV0dXJuIEFkZE5hbWVFcnJvcigiT3B0aW9uIG11c3QgaGF2
ZSBhIG5hbWUuIik7Ci0gIH0KLSAgaWYgKHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy0+bmFtZSgwKS5u
YW1lX3BhcnQoKSA9PSAidW5pbnRlcnByZXRlZF9vcHRpb24iKSB7Ci0gICAgcmV0dXJuIEFkZE5h
bWVFcnJvcigiT3B0aW9uIG11c3Qgbm90IHVzZSByZXNlcnZlZCBuYW1lICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICJcInVuaW50ZXJwcmV0ZWRfb3B0aW9uXCIuIik7Ci0gIH0KLQotICBjb25z
dCBEZXNjcmlwdG9yKiBvcHRpb25zX2Rlc2NyaXB0b3IgPSBOVUxMOwotICAvLyBHZXQgdGhlIG9w
dGlvbnMgbWVzc2FnZSdzIGRlc2NyaXB0b3IgZnJvbSB0aGUgYnVpbGRlcidzIHBvb2wsIHNvIHRo
YXQgd2UKLSAgLy8gZ2V0IHRoZSB2ZXJzaW9uIHRoYXQga25vd3MgYWJvdXQgYW55IGV4dGVuc2lv
biBvcHRpb25zIGRlY2xhcmVkIGluIHRoZQotICAvLyBmaWxlIHdlJ3JlIGN1cnJlbnRseSBidWls
ZGluZy4gVGhlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHRoZXJlIGFzIGxvbmcgYXMKLSAgLy8gdGhl
IGZpbGUgd2UncmUgYnVpbGRpbmcgaW1wb3J0ZWQgImdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9y
cy5wcm90byIuCi0KLSAgLy8gTm90ZSB0aGF0IHdlIHVzZSBEZXNjcmlwdG9yQnVpbGRlcjo6Rmlu
ZFN5bWJvbE5vdEVuZm9yY2luZ0RlcHMoKSwgbm90Ci0gIC8vIERlc2NyaXB0b3JQb29sOjpGaW5k
TWVzc2FnZVR5cGVCeU5hbWUoKSBiZWNhdXNlIHdlJ3JlIGFscmVhZHkgaG9sZGluZyB0aGUKLSAg
Ly8gcG9vbCdzIG11dGV4LCBhbmQgdGhlIGxhdHRlciBtZXRob2QgbG9ja3MgaXQgYWdhaW4uICBX
ZSBkb24ndCB1c2UKLSAgLy8gRmluZFN5bWJvbCgpIGJlY2F1c2UgZmlsZXMgdGhhdCB1c2UgY3Vz
dG9tIG9wdGlvbnMgb25seSBuZWVkIHRvIGRlcGVuZCBvbgotICAvLyB0aGUgZmlsZSB0aGF0IGRl
ZmluZXMgdGhlIG9wdGlvbiwgbm90IGRlc2NyaXB0b3IucHJvdG8gaXRzZWxmLgotICBTeW1ib2wg
c3ltYm9sID0gYnVpbGRlcl8tPkZpbmRTeW1ib2xOb3RFbmZvcmNpbmdEZXBzKAotICAgIG9wdGlv
bnMtPkdldERlc2NyaXB0b3IoKS0+ZnVsbF9uYW1lKCkpOwotICBpZiAoIXN5bWJvbC5Jc051bGwo
KSAmJiBzeW1ib2wudHlwZSA9PSBTeW1ib2w6Ok1FU1NBR0UpIHsKLSAgICBvcHRpb25zX2Rlc2Ny
aXB0b3IgPSBzeW1ib2wuZGVzY3JpcHRvcjsKLSAgfSBlbHNlIHsKLSAgICAvLyBUaGUgb3B0aW9u
cyBtZXNzYWdlJ3MgZGVzY3JpcHRvciB3YXMgbm90IGluIHRoZSBidWlsZGVyJ3MgcG9vbCwgc28g
dXNlCi0gICAgLy8gdGhlIHN0YW5kYXJkIHZlcnNpb24gZnJvbSB0aGUgZ2VuZXJhdGVkIHBvb2wu
IFdlJ3JlIG5vdCBob2xkaW5nIHRoZQotICAgIC8vIGdlbmVyYXRlZCBwb29sJ3MgbXV0ZXgsIHNv
IHdlIGNhbiBzZWFyY2ggaXQgdGhlIHN0cmFpZ2h0Zm9yd2FyZCB3YXkuCi0gICAgb3B0aW9uc19k
ZXNjcmlwdG9yID0gb3B0aW9ucy0+R2V0RGVzY3JpcHRvcigpOwotICB9Ci0gIEdPT0dMRV9DSEVD
SyhvcHRpb25zX2Rlc2NyaXB0b3IpOwotCi0gIC8vIFdlIGl0ZXJhdGUgb3ZlciB0aGUgbmFtZSBw
YXJ0cyB0byBkcmlsbCBpbnRvIHRoZSBzdWJtZXNzYWdlcyB1bnRpbCB3ZSBmaW5kCi0gIC8vIHRo
ZSBsZWFmIGZpZWxkIGZvciB0aGUgb3B0aW9uLiBBcyB3ZSBkcmlsbCBkb3duIHdlIHJlbWVtYmVy
IHRoZSBjdXJyZW50Ci0gIC8vIHN1Ym1lc3NhZ2UncyBkZXNjcmlwdG9yIGluIHxkZXNjcmlwdG9y
fCBhbmQgdGhlIG5leHQgZmllbGQgaW4gdGhhdAotICAvLyBzdWJtZXNzYWdlIGluIHxmaWVsZHwu
IFdlIGFsc28gdHJhY2sgdGhlIGZpZWxkcyB3ZSdyZSBkcmlsbGluZyBkb3duCi0gIC8vIHRocm91
Z2ggaW4gfGludGVybWVkaWF0ZV9maWVsZHN8LiBBcyB3ZSBnbywgd2UgcmVjb25zdHJ1Y3QgdGhl
IGZ1bGwgb3B0aW9uCi0gIC8vIG5hbWUgaW4gfGRlYnVnX21zZ19uYW1lfCwgZm9yIHVzZSBpbiBl
cnJvciBtZXNzYWdlcy4KLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IG9wdGlvbnNf
ZGVzY3JpcHRvcjsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IE5VTEw7Ci0gIHZl
Y3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBpbnRlcm1lZGlhdGVfZmllbGRzOwotICBzdHJp
bmcgZGVidWdfbXNnX25hbWUgPSAiIjsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IHVuaW50ZXJw
cmV0ZWRfb3B0aW9uXy0+bmFtZV9zaXplKCk7ICsraSkgewotICAgIGNvbnN0IHN0cmluZyYgbmFt
ZV9wYXJ0ID0gdW5pbnRlcnByZXRlZF9vcHRpb25fLT5uYW1lKGkpLm5hbWVfcGFydCgpOwotICAg
IGlmIChkZWJ1Z19tc2dfbmFtZS5zaXplKCkgPiAwKSB7Ci0gICAgICBkZWJ1Z19tc2dfbmFtZSAr
PSAiLiI7Ci0gICAgfQotICAgIGlmICh1bmludGVycHJldGVkX29wdGlvbl8tPm5hbWUoaSkuaXNf
ZXh0ZW5zaW9uKCkpIHsKLSAgICAgIGRlYnVnX21zZ19uYW1lICs9ICIoIiArIG5hbWVfcGFydCAr
ICIpIjsKLSAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIGV4dGVuc2lvbidzIGRlc2NyaXB0b3IgYXMg
YW4gZXh0ZW5zaW9uIGluIHRoZSBidWlsZGVyJ3MKLSAgICAgIC8vIHBvb2wuIE5vdGUgdGhhdCB3
ZSB1c2UgRGVzY3JpcHRvckJ1aWxkZXI6Okxvb2t1cFN5bWJvbCgpLCBub3QKLSAgICAgIC8vIERl
c2NyaXB0b3JQb29sOjpGaW5kRXh0ZW5zaW9uQnlOYW1lKCksIGZvciB0d28gcmVhc29uczogMSkg
SXQgYWxsb3dzCi0gICAgICAvLyByZWxhdGl2ZSBsb29rdXBzLCBhbmQgMikgYmVjYXVzZSB3ZSdy
ZSBhbHJlYWR5IGhvbGRpbmcgdGhlIHBvb2wncwotICAgICAgLy8gbXV0ZXgsIGFuZCB0aGUgbGF0
dGVyIG1ldGhvZCBsb2NrcyBpdCBhZ2Fpbi4KLSAgICAgIHN5bWJvbCA9IGJ1aWxkZXJfLT5Mb29r
dXBTeW1ib2wobmFtZV9wYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zX3RvX2ludGVycHJldF8tPm5hbWVfc2NvcGUpOwotICAgICAgaWYgKCFzeW1ib2wu
SXNOdWxsKCkgJiYgc3ltYm9sLnR5cGUgPT0gU3ltYm9sOjpGSUVMRCkgewotICAgICAgICBmaWVs
ZCA9IHN5bWJvbC5maWVsZF9kZXNjcmlwdG9yOwotICAgICAgfQotICAgICAgLy8gSWYgd2UgZG9u
J3QgZmluZCB0aGUgZmllbGQgdGhlbiB0aGUgZmllbGQncyBkZXNjcmlwdG9yIHdhcyBub3QgaW4g
dGhlCi0gICAgICAvLyBidWlsZGVyJ3MgcG9vbCwgYnV0IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gbG9v
a2luZyBpbiB0aGUgZ2VuZXJhdGVkCi0gICAgICAvLyBwb29sLiBXZSByZXF1aXJlIHRoYXQgeW91
IGltcG9ydCB0aGUgZmlsZSB0aGF0IGRlZmluZXMgYW55IGV4dGVuc2lvbnMKLSAgICAgIC8vIHlv
dSB1c2UsIHNvIHRoZXkgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBidWlsZGVyJ3MgcG9vbC4KLSAg
ICB9IGVsc2UgewotICAgICAgZGVidWdfbXNnX25hbWUgKz0gbmFtZV9wYXJ0OwotICAgICAgLy8g
U2VhcmNoIGZvciB0aGUgZmllbGQncyBkZXNjcmlwdG9yIGFzIGEgcmVndWxhciBmaWVsZC4KLSAg
ICAgIGZpZWxkID0gZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKG5hbWVfcGFydCk7Ci0gICAg
fQotCi0gICAgaWYgKGZpZWxkID09IE5VTEwpIHsKLSAgICAgIGlmIChnZXRfYWxsb3dfdW5rbm93
bihidWlsZGVyXy0+cG9vbF8pKSB7Ci0gICAgICAgIC8vIFdlIGNhbid0IGZpbmQgdGhlIG9wdGlv
biwgYnV0IEFsbG93VW5rbm93bkRlcGVuZGVuY2llcygpIGlzIGVuYWJsZWQsCi0gICAgICAgIC8v
IHNvIHdlIHdpbGwganVzdCBsZWF2ZSBpdCBhcyB1bmludGVycHJldGVkLgotICAgICAgICBBZGRX
aXRob3V0SW50ZXJwcmV0aW5nKCp1bmludGVycHJldGVkX29wdGlvbl8sIG9wdGlvbnMpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gZWxzZSBpZiAoIShidWlsZGVyXy0+dW5kZWZpbmVf
cmVzb2x2ZWRfbmFtZV8pLmVtcHR5KCkpIHsKLSAgICAgICAgLy8gT3B0aW9uIGlzIHJlc29sdmVk
IHRvIGEgbmFtZSB3aGljaCBpcyBub3QgZGVmaW5lZC4KLSAgICAgICAgcmV0dXJuIEFkZE5hbWVF
cnJvcigKLSAgICAgICAgICAgICJPcHRpb24gXCIiICsgZGVidWdfbXNnX25hbWUgKyAiXCIgaXMg
cmVzb2x2ZWQgdG8gXCIoIiArCi0gICAgICAgICAgICBidWlsZGVyXy0+dW5kZWZpbmVfcmVzb2x2
ZWRfbmFtZV8gKwotICAgICAgICAgICAgIilcIiwgd2hpY2ggaXMgbm90IGRlZmluZWQuIFRoZSBp
bm5lcm1vc3Qgc2NvcGUgaXMgc2VhcmNoZWQgZmlyc3QgIgotICAgICAgICAgICAgImluIG5hbWUg
cmVzb2x1dGlvbi4gQ29uc2lkZXIgdXNpbmcgYSBsZWFkaW5nICcuJyhpLmUuLCBcIiguIiArCi0g
ICAgICAgICAgICBkZWJ1Z19tc2dfbmFtZS5zdWJzdHIoMSkgKwotICAgICAgICAgICAgIlwiKSB0
byBzdGFydCBmcm9tIHRoZSBvdXRlcm1vc3Qgc2NvcGUuIik7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICByZXR1cm4gQWRkTmFtZUVycm9yKCJPcHRpb24gXCIiICsgZGVidWdfbXNnX25hbWUgKyAi
XCIgdW5rbm93bi4iKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGZpZWxkLT5jb250YWluaW5n
X3R5cGUoKSAhPSBkZXNjcmlwdG9yKSB7Ci0gICAgICBpZiAoZ2V0X2lzX3BsYWNlaG9sZGVyKGZp
ZWxkLT5jb250YWluaW5nX3R5cGUoKSkpIHsKLSAgICAgICAgLy8gVGhlIGZpZWxkIGlzIGFuIGV4
dGVuc2lvbiBvZiBhIHBsYWNlaG9sZGVyIHR5cGUsIHNvIHdlIGNhbid0Ci0gICAgICAgIC8vIHJl
bGlhYmx5IHZlcmlmeSB3aGV0aGVyIGl0IGlzIGEgdmFsaWQgZXh0ZW5zaW9uIHRvIHVzZSBoZXJl
IChlLmcuCi0gICAgICAgIC8vIHdlIGRvbid0IGtub3cgaWYgaXQgaXMgYW4gZXh0ZW5zaW9uIG9m
IHRoZSBjb3JyZWN0ICpPcHRpb25zIG1lc3NhZ2UsCi0gICAgICAgIC8vIG9yIGlmIGl0IGhhcyBh
IHZhbGlkIGZpZWxkIG51bWJlciwgZXRjLikuICBKdXN0IGxlYXZlIGl0IGFzCi0gICAgICAgIC8v
IHVuaW50ZXJwcmV0ZWQgaW5zdGVhZC4KLSAgICAgICAgQWRkV2l0aG91dEludGVycHJldGluZygq
dW5pbnRlcnByZXRlZF9vcHRpb25fLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiwgZHVlIHRv
IHNvbWUgaW5zYW5lIG1pc2NvbmZpZ3VyYXRpb24gb2YgdGhlCi0gICAgICAgIC8vIHBvb2xzLCB3
ZSBmaW5kIHRoZSBvcHRpb25zIG1lc3NhZ2UgaW4gb25lIHBvb2wgYnV0IHRoZSBmaWVsZCBpbgot
ICAgICAgICAvLyBhbm90aGVyLiBUaGlzIHdvdWxkIHByb2JhYmx5IGltcGx5IGEgaGVmdHkgYnVn
IHNvbWV3aGVyZS4KLSAgICAgICAgcmV0dXJuIEFkZE5hbWVFcnJvcigiT3B0aW9uIGZpZWxkIFwi
IiArIGRlYnVnX21zZ19uYW1lICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMg
bm90IGEgZmllbGQgb3IgZXh0ZW5zaW9uIG9mIG1lc3NhZ2UgXCIiICsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5uYW1lKCkgKyAiXCIuIik7Ci0gICAgICB9Ci0gICAg
fSBlbHNlIGlmIChpIDwgdW5pbnRlcnByZXRlZF9vcHRpb25fLT5uYW1lX3NpemUoKSAtIDEpIHsK
LSAgICAgIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSAhPSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
TUVTU0FHRSkgewotICAgICAgICByZXR1cm4gQWRkTmFtZUVycm9yKCJPcHRpb24gXCIiICsgIGRl
YnVnX21zZ19uYW1lICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgYW4gYXRv
bWljIHR5cGUsIG5vdCBhIG1lc3NhZ2UuIik7Ci0gICAgICB9IGVsc2UgaWYgKGZpZWxkLT5pc19y
ZXBlYXRlZCgpKSB7Ci0gICAgICAgIHJldHVybiBBZGROYW1lRXJyb3IoIk9wdGlvbiBmaWVsZCBc
IiIgKyBkZWJ1Z19tc2dfbmFtZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGlz
IGEgcmVwZWF0ZWQgbWVzc2FnZS4gUmVwZWF0ZWQgbWVzc2FnZSAiCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIm9wdGlvbnMgbXVzdCBiZSBpbml0aWFsaXplZCB1c2luZyBhbiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImFnZ3JlZ2F0ZSB2YWx1ZS4iKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIERyaWxsIGRvd24gaW50byB0aGUgc3VibWVzc2FnZS4KLSAgICAgICAg
aW50ZXJtZWRpYXRlX2ZpZWxkcy5wdXNoX2JhY2soZmllbGQpOwotICAgICAgICBkZXNjcmlwdG9y
ID0gZmllbGQtPm1lc3NhZ2VfdHlwZSgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFdl
J3ZlIGZvdW5kIHRoZSBsZWFmIGZpZWxkLiBOb3cgd2UgdXNlIFVua25vd25GaWVsZFNldHMgdG8g
c2V0IGl0cyB2YWx1ZQotICAvLyBvbiB0aGUgb3B0aW9ucyBtZXNzYWdlLiBXZSBkbyBzbyBiZWNh
dXNlIHRoZSBtZXNzYWdlIG1heSBub3QgeWV0IGtub3cKLSAgLy8gYWJvdXQgaXRzIGV4dGVuc2lv
biBmaWVsZHMsIHNvIHdlIG1heSBub3QgYmUgYWJsZSB0byBzZXQgdGhlIGZpZWxkcwotICAvLyBk
aXJlY3RseS4gQnV0IHRoZSBVbmtub3duRmllbGRTZXRzIHdpbGwgc2VyaWFsaXplIHRvIHRoZSBz
YW1lIHdpcmUtZm9ybWF0Ci0gIC8vIG1lc3NhZ2UsIHNvIHJlYWRpbmcgdGhhdCBtZXNzYWdlIGJh
Y2sgaW4gb25jZSB0aGUgZXh0ZW5zaW9uIGZpZWxkcyBhcmUKLSAgLy8ga25vd24gd2lsbCBwb3B1
bGF0ZSB0aGVtIGNvcnJlY3RseS4KLQotICAvLyBGaXJzdCBzZWUgaWYgdGhlIG9wdGlvbiBpcyBh
bHJlYWR5IHNldC4KLSAgaWYgKCFmaWVsZC0+aXNfcmVwZWF0ZWQoKSAmJiAhRXhhbWluZUlmT3B0
aW9uSXNTZXQoCi0gICAgICAgICAgaW50ZXJtZWRpYXRlX2ZpZWxkcy5iZWdpbigpLAotICAgICAg
ICAgIGludGVybWVkaWF0ZV9maWVsZHMuZW5kKCksCi0gICAgICAgICAgZmllbGQsIGRlYnVnX21z
Z19uYW1lLAotICAgICAgICAgIG9wdGlvbnMtPkdldFJlZmxlY3Rpb24oKS0+R2V0VW5rbm93bkZp
ZWxkcygqb3B0aW9ucykpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOyAgLy8gRXhhbWluZUlmT3B0aW9u
SXNTZXQoKSBhbHJlYWR5IGFkZGVkIHRoZSBlcnJvci4KLSAgfQotCi0KLSAgLy8gRmlyc3Qgc2V0
IHRoZSB2YWx1ZSBvbiB0aGUgVW5rbm93bkZpZWxkU2V0IGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0g
IC8vIGlubmVybW9zdCBtZXNzYWdlLgotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPFVu
a25vd25GaWVsZFNldD4gdW5rbm93bl9maWVsZHMobmV3IFVua25vd25GaWVsZFNldCgpKTsKLSAg
aWYgKCFTZXRPcHRpb25WYWx1ZShmaWVsZCwgdW5rbm93bl9maWVsZHMuZ2V0KCkpKSB7Ci0gICAg
cmV0dXJuIGZhbHNlOyAgLy8gU2V0T3B0aW9uVmFsdWUoKSBhbHJlYWR5IGFkZGVkIHRoZSBlcnJv
ci4KLSAgfQotCi0gIC8vIE5vdyB3cmFwIHRoZSBVbmtub3duRmllbGRTZXQgd2l0aCBVbmtub3du
RmllbGRTZXRzIGNvcnJlc3BvbmRpbmcgdG8gYWxsCi0gIC8vIHRoZSBpbnRlcm1lZGlhdGUgbWVz
c2FnZXMuCi0gIGZvciAodmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+OjpyZXZlcnNlX2l0
ZXJhdG9yIGl0ZXIgPQotICAgICAgICAgICBpbnRlcm1lZGlhdGVfZmllbGRzLnJiZWdpbigpOwot
ICAgICAgIGl0ZXIgIT0gaW50ZXJtZWRpYXRlX2ZpZWxkcy5yZW5kKCk7ICsraXRlcikgewotICAg
IGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8VW5rbm93bkZpZWxkU2V0PiBwYXJlbnRfdW5r
bm93bl9maWVsZHMoCi0gICAgICAgIG5ldyBVbmtub3duRmllbGRTZXQoKSk7Ci0gICAgc3dpdGNo
ICgoKml0ZXIpLT50eXBlKCkpIHsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX01F
U1NBR0U6IHsKLSAgICAgICAgaW86OlN0cmluZ091dHB1dFN0cmVhbSBvdXRzdHIoCi0gICAgICAg
ICAgICBwYXJlbnRfdW5rbm93bl9maWVsZHMtPkFkZExlbmd0aERlbGltaXRlZCgoKml0ZXIpLT5u
dW1iZXIoKSkpOwotICAgICAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0KCZvdXRzdHIpOwot
ICAgICAgICBpbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkcygqdW5r
bm93bl9maWVsZHMsICZvdXQpOwotICAgICAgICBHT09HTEVfQ0hFQ0soIW91dC5IYWRFcnJvcigp
KQotICAgICAgICAgICAgPDwgIlVuZXhwZWN0ZWQgZmFpbHVyZSB3aGlsZSBzZXJpYWxpemluZyBv
cHRpb24gc3VibWVzc2FnZSAiCi0gICAgICAgICAgICA8PCBkZWJ1Z19tc2dfbmFtZSA8PCAiXCIu
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX0dST1VQOiB7Ci0gICAgICAgICBwYXJlbnRfdW5rbm93bl9maWVsZHMtPkFkZEdyb3Vw
KCgqaXRlciktPm51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5NZXJn
ZUZyb20oKnVua25vd25fZmllbGRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJJbnZhbGlkIHdpcmUgdHlw
ZSBmb3IgQ1BQVFlQRV9NRVNTQUdFOiAiCi0gICAgICAgICAgICAgICAgICAgPDwgKCppdGVyKS0+
dHlwZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHVua25vd25fZmllbGRz
LnJlc2V0KHBhcmVudF91bmtub3duX2ZpZWxkcy5yZWxlYXNlKCkpOwotICB9Ci0KLSAgLy8gTm93
IG1lcmdlIHRoZSBVbmtub3duRmllbGRTZXQgY29ycmVzcG9uZGluZyB0byB0aGUgdG9wLWxldmVs
IG1lc3NhZ2UgaW50bwotICAvLyB0aGUgb3B0aW9ucyBtZXNzYWdlLgotICBvcHRpb25zLT5HZXRS
ZWZsZWN0aW9uKCktPk11dGFibGVVbmtub3duRmllbGRzKG9wdGlvbnMpLT5NZXJnZUZyb20oCi0g
ICAgICAqdW5rbm93bl9maWVsZHMpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIERlc2Ny
aXB0b3JCdWlsZGVyOjpPcHRpb25JbnRlcnByZXRlcjo6QWRkV2l0aG91dEludGVycHJldGluZygK
LSAgICBjb25zdCBVbmludGVycHJldGVkT3B0aW9uJiB1bmludGVycHJldGVkX29wdGlvbiwgTWVz
c2FnZSogb3B0aW9ucykgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0KLSAgICBv
cHRpb25zLT5HZXREZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgidW5pbnRlcnByZXRlZF9v
cHRpb24iKTsKLSAgR09PR0xFX0NIRUNLKGZpZWxkICE9IE5VTEwpOwotCi0gIG9wdGlvbnMtPkdl
dFJlZmxlY3Rpb24oKS0+QWRkTWVzc2FnZShvcHRpb25zLCBmaWVsZCkKLSAgICAtPkNvcHlGcm9t
KHVuaW50ZXJwcmV0ZWRfb3B0aW9uKTsKLX0KLQotYm9vbCBEZXNjcmlwdG9yQnVpbGRlcjo6T3B0
aW9uSW50ZXJwcmV0ZXI6OkV4YW1pbmVJZk9wdGlvbklzU2V0KAotICAgIHZlY3Rvcjxjb25zdCBG
aWVsZERlc2NyaXB0b3IqPjo6Y29uc3RfaXRlcmF0b3IgaW50ZXJtZWRpYXRlX2ZpZWxkc19pdGVy
LAotICAgIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPjo6Y29uc3RfaXRlcmF0b3IgaW50
ZXJtZWRpYXRlX2ZpZWxkc19lbmQsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBpbm5lcm1v
c3RfZmllbGQsIGNvbnN0IHN0cmluZyYgZGVidWdfbXNnX25hbWUsCi0gICAgY29uc3QgVW5rbm93
bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcykgewotICAvLyBXZSBkbyBsaW5lYXIgc2VhcmNoZXMg
b2YgdGhlIFVua25vd25GaWVsZFNldCBhbmQgaXRzIHN1Yi1ncm91cHMuICBUaGlzCi0gIC8vIHNo
b3VsZCBiZSBmaW5lIHNpbmNlIGl0J3MgdW5saWtlbHkgdGhhdCBhbnkgb25lIG9wdGlvbnMgc3Ry
dWN0dXJlIHdpbGwKLSAgLy8gY29udGFpbiBtb3JlIHRoYW4gYSBoYW5kZnVsIG9mIG9wdGlvbnMu
Ci0KLSAgaWYgKGludGVybWVkaWF0ZV9maWVsZHNfaXRlciA9PSBpbnRlcm1lZGlhdGVfZmllbGRz
X2VuZCkgewotICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lcm1vc3Qgc3VibWVzc2FnZS4KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IHVua25vd25fZmllbGRzLmZpZWxkX2NvdW50KCk7IGkrKykgewot
ICAgICAgaWYgKHVua25vd25fZmllbGRzLmZpZWxkKGkpLm51bWJlcigpID09IGlubmVybW9zdF9m
aWVsZC0+bnVtYmVyKCkpIHsKLSAgICAgICAgcmV0dXJuIEFkZE5hbWVFcnJvcigiT3B0aW9uIFwi
IiArIGRlYnVnX21zZ19uYW1lICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgd2Fz
IGFscmVhZHkgc2V0LiIpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdW5rbm93bl9maWVsZHMuZmllbGRfY291bnQoKTsgaSsr
KSB7Ci0gICAgaWYgKHVua25vd25fZmllbGRzLmZpZWxkKGkpLm51bWJlcigpID09Ci0gICAgICAg
ICgqaW50ZXJtZWRpYXRlX2ZpZWxkc19pdGVyKS0+bnVtYmVyKCkpIHsKLSAgICAgIGNvbnN0IFVu
a25vd25GaWVsZCogdW5rbm93bl9maWVsZCA9ICZ1bmtub3duX2ZpZWxkcy5maWVsZChpKTsKLSAg
ICAgIEZpZWxkRGVzY3JpcHRvcjo6VHlwZSB0eXBlID0gKCppbnRlcm1lZGlhdGVfZmllbGRzX2l0
ZXIpLT50eXBlKCk7Ci0gICAgICAvLyBSZWN1cnNlIGludG8gdGhlIG5leHQgc3VibWVzc2FnZS4K
LSAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9NRVNTQUdFOgotICAgICAgICAgIGlmICh1bmtub3duX2ZpZWxkLT50eXBlKCkgPT0gVW5rbm93
bkZpZWxkOjpUWVBFX0xFTkdUSF9ERUxJTUlURUQpIHsKLSAgICAgICAgICAgIFVua25vd25GaWVs
ZFNldCBpbnRlcm1lZGlhdGVfdW5rbm93bl9maWVsZHM7Ci0gICAgICAgICAgICBpZiAoaW50ZXJt
ZWRpYXRlX3Vua25vd25fZmllbGRzLlBhcnNlRnJvbVN0cmluZygKLSAgICAgICAgICAgICAgICAg
ICAgdW5rbm93bl9maWVsZC0+bGVuZ3RoX2RlbGltaXRlZCgpKSAmJgotICAgICAgICAgICAgICAg
ICFFeGFtaW5lSWZPcHRpb25Jc1NldChpbnRlcm1lZGlhdGVfZmllbGRzX2l0ZXIgKyAxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGVfZmllbGRzX2Vu
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJtb3N0X2ZpZWxk
LCBkZWJ1Z19tc2dfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50ZXJtZWRpYXRlX3Vua25vd25fZmllbGRzKSkgewotICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAvLyBFcnJvciBhbHJlYWR5IGFkZGVkLgotICAgICAgICAgICAgfQotICAgICAgICAgIH0K
LSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9H
Uk9VUDoKLSAgICAgICAgICBpZiAodW5rbm93bl9maWVsZC0+dHlwZSgpID09IFVua25vd25GaWVs
ZDo6VFlQRV9HUk9VUCkgewotICAgICAgICAgICAgaWYgKCFFeGFtaW5lSWZPcHRpb25Jc1NldChp
bnRlcm1lZGlhdGVfZmllbGRzX2l0ZXIgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnRlcm1lZGlhdGVfZmllbGRzX2VuZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5uZXJtb3N0X2ZpZWxkLCBkZWJ1Z19tc2dfbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bl9maWVsZC0+Z3JvdXAoKSkp
IHsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gRXJyb3IgYWxyZWFkeSBhZGRlZC4K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiSW52YWxpZCB3aXJlIHR5
cGUgZm9yIENQUFRZUEVfTUVTU0FHRTogIiA8PCB0eXBlOwotICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGVzY3Jp
cHRvckJ1aWxkZXI6Ok9wdGlvbkludGVycHJldGVyOjpTZXRPcHRpb25WYWx1ZSgKLSAgICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIG9wdGlvbl9maWVsZCwKLSAgICBVbmtub3duRmllbGRTZXQqIHVu
a25vd25fZmllbGRzKSB7Ci0gIC8vIFdlIHN3aXRjaCBvbiB0aGUgQ3BwVHlwZSB0byB2YWxpZGF0
ZS4KLSAgc3dpdGNoIChvcHRpb25fZmllbGQtPmNwcF90eXBlKCkpIHsKLQotICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyOgotICAgICAgaWYgKHVuaW50ZXJwcmV0ZWRfb3B0
aW9uXy0+aGFzX3Bvc2l0aXZlX2ludF92YWx1ZSgpKSB7Ci0gICAgICAgIGlmICh1bmludGVycHJl
dGVkX29wdGlvbl8tPnBvc2l0aXZlX2ludF92YWx1ZSgpID4KLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PHVpbnQ2ND4oa2ludDMybWF4KSkgewotICAgICAgICAgIHJldHVybiBBZGRWYWx1ZUVycm9y
KCJWYWx1ZSBvdXQgb2YgcmFuZ2UgZm9yIGludDMyIG9wdGlvbiBcIiIgKwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbl9maWVsZC0+ZnVsbF9uYW1lKCkgKyAiXCIuIik7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgU2V0SW50MzIob3B0aW9uX2ZpZWxkLT5udW1iZXIo
KSwKLSAgICAgICAgICAgICAgICAgICB1bmludGVycHJldGVkX29wdGlvbl8tPnBvc2l0aXZlX2lu
dF92YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgIG9wdGlvbl9maWVsZC0+dHlwZSgpLCB1bmtu
b3duX2ZpZWxkcyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAodW5pbnRlcnByZXRlZF9v
cHRpb25fLT5oYXNfbmVnYXRpdmVfaW50X3ZhbHVlKCkpIHsKLSAgICAgICAgaWYgKHVuaW50ZXJw
cmV0ZWRfb3B0aW9uXy0+bmVnYXRpdmVfaW50X3ZhbHVlKCkgPAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50NjQ+KGtpbnQzMm1pbikpIHsKLSAgICAgICAgICByZXR1cm4gQWRkVmFsdWVFcnJv
cigiVmFsdWUgb3V0IG9mIHJhbmdlIGZvciBpbnQzMiBvcHRpb24gXCIiICsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25fZmllbGQtPmZ1bGxfbmFtZSgpICsgIlwiLiIpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFNldEludDMyKG9wdGlvbl9maWVsZC0+bnVtYmVy
KCksCi0gICAgICAgICAgICAgICAgICAgdW5pbnRlcnByZXRlZF9vcHRpb25fLT5uZWdhdGl2ZV9p
bnRfdmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICBvcHRpb25fZmllbGQtPnR5cGUoKSwgdW5r
bm93bl9maWVsZHMpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4g
QWRkVmFsdWVFcnJvcigiVmFsdWUgbXVzdCBiZSBpbnRlZ2VyIGZvciBpbnQzMiBvcHRpb24gXCIi
ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uX2ZpZWxkLT5mdWxsX25hbWUo
KSArICJcIi4iKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfSU5UNjQ6Ci0gICAgICBpZiAodW5pbnRlcnByZXRlZF9vcHRpb25fLT5o
YXNfcG9zaXRpdmVfaW50X3ZhbHVlKCkpIHsKLSAgICAgICAgaWYgKHVuaW50ZXJwcmV0ZWRfb3B0
aW9uXy0+cG9zaXRpdmVfaW50X3ZhbHVlKCkgPgotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWlu
dDY0PihraW50NjRtYXgpKSB7Ci0gICAgICAgICAgcmV0dXJuIEFkZFZhbHVlRXJyb3IoIlZhbHVl
IG91dCBvZiByYW5nZSBmb3IgaW50NjQgb3B0aW9uIFwiIiArCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uX2ZpZWxkLT5mdWxsX25hbWUoKSArICJcIi4iKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBTZXRJbnQ2NChvcHRpb25fZmllbGQtPm51bWJlcigpLAotICAg
ICAgICAgICAgICAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy0+cG9zaXRpdmVfaW50X3ZhbHVl
KCksCi0gICAgICAgICAgICAgICAgICAgb3B0aW9uX2ZpZWxkLT50eXBlKCksIHVua25vd25fZmll
bGRzKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmICh1bmludGVycHJldGVkX29wdGlvbl8t
Pmhhc19uZWdhdGl2ZV9pbnRfdmFsdWUoKSkgewotICAgICAgICBTZXRJbnQ2NChvcHRpb25fZmll
bGQtPm51bWJlcigpLAotICAgICAgICAgICAgICAgICB1bmludGVycHJldGVkX29wdGlvbl8tPm5l
Z2F0aXZlX2ludF92YWx1ZSgpLAotICAgICAgICAgICAgICAgICBvcHRpb25fZmllbGQtPnR5cGUo
KSwgdW5rbm93bl9maWVsZHMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIEFkZFZh
bHVlRXJyb3IoIlZhbHVlIG11c3QgYmUgaW50ZWdlciBmb3IgaW50NjQgb3B0aW9uIFwiIiArCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9maWVsZC0+ZnVsbF9uYW1lKCkgKyAi
XCIuIik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpDUFBUWVBFX1VJTlQzMjoKLSAgICAgIGlmICh1bmludGVycHJldGVkX29wdGlvbl8tPmhhc19w
b3NpdGl2ZV9pbnRfdmFsdWUoKSkgewotICAgICAgICBpZiAodW5pbnRlcnByZXRlZF9vcHRpb25f
LT5wb3NpdGl2ZV9pbnRfdmFsdWUoKSA+IGt1aW50MzJtYXgpIHsKLSAgICAgICAgICByZXR1cm4g
QWRkVmFsdWVFcnJvcigiVmFsdWUgb3V0IG9mIHJhbmdlIGZvciB1aW50MzIgb3B0aW9uIFwiIiAr
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uX2ZpZWxkLT5uYW1lKCkgKyAi
XCIuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgU2V0VUludDMyKG9wdGlvbl9maWVs
ZC0+bnVtYmVyKCksCi0gICAgICAgICAgICAgICAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy0+
cG9zaXRpdmVfaW50X3ZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbl9maWVsZC0+
dHlwZSgpLCB1bmtub3duX2ZpZWxkcyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHJldHVybiBBZGRWYWx1ZUVycm9yKCJWYWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBpbnRl
Z2VyIGZvciB1aW50MzIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIFwi
IiArIG9wdGlvbl9maWVsZC0+ZnVsbF9uYW1lKCkgKyAiXCIuIik7Ci0gICAgICB9Ci0gICAgICBi
cmVhazsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NDoKLSAgICAg
IGlmICh1bmludGVycHJldGVkX29wdGlvbl8tPmhhc19wb3NpdGl2ZV9pbnRfdmFsdWUoKSkgewot
ICAgICAgICBTZXRVSW50NjQob3B0aW9uX2ZpZWxkLT5udW1iZXIoKSwKLSAgICAgICAgICAgICAg
ICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy0+cG9zaXRpdmVfaW50X3ZhbHVlKCksCi0gICAgICAg
ICAgICAgICAgICBvcHRpb25fZmllbGQtPnR5cGUoKSwgdW5rbm93bl9maWVsZHMpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIEFkZFZhbHVlRXJyb3IoIlZhbHVlIG11c3QgYmUgbm9u
LW5lZ2F0aXZlIGludGVnZXIgZm9yIHVpbnQ2NCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJvcHRpb24gXCIiICsgb3B0aW9uX2ZpZWxkLT5mdWxsX25hbWUoKSArICJcIi4iKTsKLSAg
ICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
RkxPQVQ6IHsKLSAgICAgIGZsb2F0IHZhbHVlOwotICAgICAgaWYgKHVuaW50ZXJwcmV0ZWRfb3B0
aW9uXy0+aGFzX2RvdWJsZV92YWx1ZSgpKSB7Ci0gICAgICAgIHZhbHVlID0gdW5pbnRlcnByZXRl
ZF9vcHRpb25fLT5kb3VibGVfdmFsdWUoKTsKLSAgICAgIH0gZWxzZSBpZiAodW5pbnRlcnByZXRl
ZF9vcHRpb25fLT5oYXNfcG9zaXRpdmVfaW50X3ZhbHVlKCkpIHsKLSAgICAgICAgdmFsdWUgPSB1
bmludGVycHJldGVkX29wdGlvbl8tPnBvc2l0aXZlX2ludF92YWx1ZSgpOwotICAgICAgfSBlbHNl
IGlmICh1bmludGVycHJldGVkX29wdGlvbl8tPmhhc19uZWdhdGl2ZV9pbnRfdmFsdWUoKSkgewot
ICAgICAgICB2YWx1ZSA9IHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy0+bmVnYXRpdmVfaW50X3ZhbHVl
KCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gQWRkVmFsdWVFcnJvcigiVmFsdWUg
bXVzdCBiZSBudW1iZXIgZm9yIGZsb2F0IG9wdGlvbiBcIiIgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25fZmllbGQtPmZ1bGxfbmFtZSgpICsgIlwiLiIpOwotICAgICAgfQot
ICAgICAgdW5rbm93bl9maWVsZHMtPkFkZEZpeGVkMzIob3B0aW9uX2ZpZWxkLT5udW1iZXIoKSwK
LSAgICAgICAgICBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkVu
Y29kZUZsb2F0KHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6Q1BQVFlQRV9ET1VCTEU6IHsKLSAgICAgIGRvdWJsZSB2YWx1ZTsKLSAgICAg
IGlmICh1bmludGVycHJldGVkX29wdGlvbl8tPmhhc19kb3VibGVfdmFsdWUoKSkgewotICAgICAg
ICB2YWx1ZSA9IHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy0+ZG91YmxlX3ZhbHVlKCk7Ci0gICAgICB9
IGVsc2UgaWYgKHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy0+aGFzX3Bvc2l0aXZlX2ludF92YWx1ZSgp
KSB7Ci0gICAgICAgIHZhbHVlID0gdW5pbnRlcnByZXRlZF9vcHRpb25fLT5wb3NpdGl2ZV9pbnRf
dmFsdWUoKTsKLSAgICAgIH0gZWxzZSBpZiAodW5pbnRlcnByZXRlZF9vcHRpb25fLT5oYXNfbmVn
YXRpdmVfaW50X3ZhbHVlKCkpIHsKLSAgICAgICAgdmFsdWUgPSB1bmludGVycHJldGVkX29wdGlv
bl8tPm5lZ2F0aXZlX2ludF92YWx1ZSgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJu
IEFkZFZhbHVlRXJyb3IoIlZhbHVlIG11c3QgYmUgbnVtYmVyIGZvciBkb3VibGUgb3B0aW9uIFwi
IiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9maWVsZC0+ZnVsbF9uYW1l
KCkgKyAiXCIuIik7Ci0gICAgICB9Ci0gICAgICB1bmtub3duX2ZpZWxkcy0+QWRkRml4ZWQ2NChv
cHRpb25fZmllbGQtPm51bWJlcigpLAotICAgICAgICAgIGdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6RW5jb2RlRG91YmxlKHZhbHVlKSk7Ci0gICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9CT09MOgotICAgICAg
dWludDY0IHZhbHVlOwotICAgICAgaWYgKCF1bmludGVycHJldGVkX29wdGlvbl8tPmhhc19pZGVu
dGlmaWVyX3ZhbHVlKCkpIHsKLSAgICAgICAgcmV0dXJuIEFkZFZhbHVlRXJyb3IoIlZhbHVlIG11
c3QgYmUgaWRlbnRpZmllciBmb3IgYm9vbGVhbiBvcHRpb24gIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiXCIiICsgb3B0aW9uX2ZpZWxkLT5mdWxsX25hbWUoKSArICJcIi4iKTsKLSAg
ICAgIH0KLSAgICAgIGlmICh1bmludGVycHJldGVkX29wdGlvbl8tPmlkZW50aWZpZXJfdmFsdWUo
KSA9PSAidHJ1ZSIpIHsKLSAgICAgICAgdmFsdWUgPSAxOwotICAgICAgfSBlbHNlIGlmICh1bmlu
dGVycHJldGVkX29wdGlvbl8tPmlkZW50aWZpZXJfdmFsdWUoKSA9PSAiZmFsc2UiKSB7Ci0gICAg
ICAgIHZhbHVlID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBBZGRWYWx1ZUVy
cm9yKCJWYWx1ZSBtdXN0IGJlIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiBmb3IgYm9vbGVhbiAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24gXCIiICsgb3B0aW9uX2ZpZWxkLT5m
dWxsX25hbWUoKSArICJcIi4iKTsKLSAgICAgIH0KLSAgICAgIHVua25vd25fZmllbGRzLT5BZGRW
YXJpbnQob3B0aW9uX2ZpZWxkLT5udW1iZXIoKSwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNOiB7Ci0gICAgICBpZiAoIXVuaW50
ZXJwcmV0ZWRfb3B0aW9uXy0+aGFzX2lkZW50aWZpZXJfdmFsdWUoKSkgewotICAgICAgICByZXR1
cm4gQWRkVmFsdWVFcnJvcigiVmFsdWUgbXVzdCBiZSBpZGVudGlmaWVyIGZvciBlbnVtLXZhbHVl
ZCBvcHRpb24gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIiICsgb3B0aW9uX2Zp
ZWxkLT5mdWxsX25hbWUoKSArICJcIi4iKTsKLSAgICAgIH0KLSAgICAgIGNvbnN0IEVudW1EZXNj
cmlwdG9yKiBlbnVtX3R5cGUgPSBvcHRpb25fZmllbGQtPmVudW1fdHlwZSgpOwotICAgICAgY29u
c3Qgc3RyaW5nJiB2YWx1ZV9uYW1lID0gdW5pbnRlcnByZXRlZF9vcHRpb25fLT5pZGVudGlmaWVy
X3ZhbHVlKCk7Ci0gICAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBlbnVtX3ZhbHVlID0g
TlVMTDsKLQotICAgICAgaWYgKGVudW1fdHlwZS0+ZmlsZSgpLT5wb29sKCkgIT0gRGVzY3JpcHRv
clBvb2w6OmdlbmVyYXRlZF9wb29sKCkpIHsKLSAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBlbnVt
IHZhbHVlJ3MgZnVsbHktcXVhbGlmaWVkIG5hbWUgaXMgYSBzaWJsaW5nIG9mIHRoZQotICAgICAg
ICAvLyBlbnVtJ3MgbmFtZSwgbm90IGEgY2hpbGQgb2YgaXQuCi0gICAgICAgIHN0cmluZyBmdWxs
eV9xdWFsaWZpZWRfbmFtZSA9IGVudW1fdHlwZS0+ZnVsbF9uYW1lKCk7Ci0gICAgICAgIGZ1bGx5
X3F1YWxpZmllZF9uYW1lLnJlc2l6ZShmdWxseV9xdWFsaWZpZWRfbmFtZS5zaXplKCkgLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bV90eXBlLT5uYW1lKCkuc2l6ZSgp
KTsKLSAgICAgICAgZnVsbHlfcXVhbGlmaWVkX25hbWUgKz0gdmFsdWVfbmFtZTsKLQotICAgICAg
ICAvLyBTZWFyY2ggZm9yIHRoZSBlbnVtIHZhbHVlJ3MgZGVzY3JpcHRvciBpbiB0aGUgYnVpbGRl
cidzIHBvb2wuIE5vdGUKLSAgICAgICAgLy8gdGhhdCB3ZSB1c2UgRGVzY3JpcHRvckJ1aWxkZXI6
OkZpbmRTeW1ib2xOb3RFbmZvcmNpbmdEZXBzKCksIG5vdAotICAgICAgICAvLyBEZXNjcmlwdG9y
UG9vbDo6RmluZEVudW1WYWx1ZUJ5TmFtZSgpIGJlY2F1c2Ugd2UncmUgYWxyZWFkeSBob2xkaW5n
Ci0gICAgICAgIC8vIHRoZSBwb29sJ3MgbXV0ZXgsIGFuZCB0aGUgbGF0dGVyIG1ldGhvZCBsb2Nr
cyBpdCBhZ2Fpbi4KLSAgICAgICAgU3ltYm9sIHN5bWJvbCA9Ci0gICAgICAgICAgYnVpbGRlcl8t
PkZpbmRTeW1ib2xOb3RFbmZvcmNpbmdEZXBzKGZ1bGx5X3F1YWxpZmllZF9uYW1lKTsKLSAgICAg
ICAgaWYgKCFzeW1ib2wuSXNOdWxsKCkgJiYgc3ltYm9sLnR5cGUgPT0gU3ltYm9sOjpFTlVNX1ZB
TFVFKSB7Ci0gICAgICAgICAgaWYgKHN5bWJvbC5lbnVtX3ZhbHVlX2Rlc2NyaXB0b3ItPnR5cGUo
KSAhPSBlbnVtX3R5cGUpIHsKLSAgICAgICAgICAgIHJldHVybiBBZGRWYWx1ZUVycm9yKCJFbnVt
IHR5cGUgXCIiICsgZW51bV90eXBlLT5mdWxsX25hbWUoKSArCi0gICAgICAgICAgICAgICAgIlwi
IGhhcyBubyB2YWx1ZSBuYW1lZCBcIiIgKyB2YWx1ZV9uYW1lICsgIlwiIGZvciBvcHRpb24gXCIi
ICsKLSAgICAgICAgICAgICAgICBvcHRpb25fZmllbGQtPmZ1bGxfbmFtZSgpICsKLSAgICAgICAg
ICAgICAgICAiXCIuIFRoaXMgYXBwZWFycyB0byBiZSBhIHZhbHVlIGZyb20gYSBzaWJsaW5nIHR5
cGUuIik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVudW1fdmFsdWUgPSBzeW1i
b2wuZW51bV92YWx1ZV9kZXNjcmlwdG9yOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIGVudW0gdHlwZSBpcyBpbiB0aGUgZ2VuZXJhdGVkIHBv
b2wsIHNvIHdlIGNhbiBzZWFyY2ggZm9yIHRoZQotICAgICAgICAvLyB2YWx1ZSB0aGVyZS4KLSAg
ICAgICAgZW51bV92YWx1ZSA9IGVudW1fdHlwZS0+RmluZFZhbHVlQnlOYW1lKHZhbHVlX25hbWUp
OwotICAgICAgfQotCi0gICAgICBpZiAoZW51bV92YWx1ZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJl
dHVybiBBZGRWYWx1ZUVycm9yKCJFbnVtIHR5cGUgXCIiICsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9uX2ZpZWxkLT5lbnVtX3R5cGUoKS0+ZnVsbF9uYW1lKCkgKwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiXCIgaGFzIG5vIHZhbHVlIG5hbWVkIFwiIiArIHZhbHVl
X25hbWUgKyAiXCIgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiBc
IiIgKyBvcHRpb25fZmllbGQtPmZ1bGxfbmFtZSgpICsgIlwiLiIpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gU2lnbi1leHRlbnNpb24gaXMgbm90IGEgcHJvYmxlbSwgc2luY2Ugd2UgY2Fz
dCBkaXJlY3RseSBmcm9tIGludDMyIHRvCi0gICAgICAgIC8vIHVpbnQ2NCwgd2l0aG91dCBmaXJz
dCBnb2luZyB0aHJvdWdoIHVpbnQzMi4KLSAgICAgICAgdW5rbm93bl9maWVsZHMtPkFkZFZhcmlu
dChvcHRpb25fZmllbGQtPm51bWJlcigpLAotICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2ND4o
c3RhdGljX2Nhc3Q8aW50NjQ+KGVudW1fdmFsdWUtPm51bWJlcigpKSkpOwotICAgICAgfQotICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RS
SU5HOgotICAgICAgaWYgKCF1bmludGVycHJldGVkX29wdGlvbl8tPmhhc19zdHJpbmdfdmFsdWUo
KSkgewotICAgICAgICByZXR1cm4gQWRkVmFsdWVFcnJvcigiVmFsdWUgbXVzdCBiZSBxdW90ZWQg
c3RyaW5nIGZvciBzdHJpbmcgb3B0aW9uICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlwiIiArIG9wdGlvbl9maWVsZC0+ZnVsbF9uYW1lKCkgKyAiXCIuIik7Ci0gICAgICB9Ci0gICAg
ICAvLyBUaGUgc3RyaW5nIGhhcyBhbHJlYWR5IGJlZW4gdW5xdW90ZWQgYW5kIHVuZXNjYXBlZCBi
eSB0aGUgcGFyc2VyLgotICAgICAgdW5rbm93bl9maWVsZHMtPkFkZExlbmd0aERlbGltaXRlZChv
cHRpb25fZmllbGQtPm51bWJlcigpLAotICAgICAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy0+
c3RyaW5nX3ZhbHVlKCkpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgaWYgKCFTZXRBZ2dyZWdhdGVPcHRpb24ob3B0aW9u
X2ZpZWxkLCB1bmtub3duX2ZpZWxkcykpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotY2xhc3MgRGVzY3Jp
cHRvckJ1aWxkZXI6Ok9wdGlvbkludGVycHJldGVyOjpBZ2dyZWdhdGVPcHRpb25GaW5kZXIKLSAg
ICA6IHB1YmxpYyBUZXh0Rm9ybWF0OjpGaW5kZXIgewotIHB1YmxpYzoKLSAgRGVzY3JpcHRvckJ1
aWxkZXIqIGJ1aWxkZXJfOwotCi0gIHZpcnR1YWwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBGaW5k
RXh0ZW5zaW9uKAotICAgICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lKSBj
b25zdCB7Ci0gICAgYXNzZXJ0X211dGV4X2hlbGQoYnVpbGRlcl8tPnBvb2xfKTsKLSAgICBjb25z
dCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gbWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpOwotICAg
IFN5bWJvbCByZXN1bHQgPSBidWlsZGVyXy0+TG9va3VwU3ltYm9sTm9QbGFjZWhvbGRlcigKLSAg
ICAgICAgbmFtZSwgZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCkpOwotICAgIGlmIChyZXN1bHQudHlw
ZSA9PSBTeW1ib2w6OkZJRUxEICYmCi0gICAgICAgIHJlc3VsdC5maWVsZF9kZXNjcmlwdG9yLT5p
c19leHRlbnNpb24oKSkgewotICAgICAgcmV0dXJuIHJlc3VsdC5maWVsZF9kZXNjcmlwdG9yOwot
ICAgIH0gZWxzZSBpZiAocmVzdWx0LnR5cGUgPT0gU3ltYm9sOjpNRVNTQUdFICYmCi0gICAgICAg
ICAgICAgICBkZXNjcmlwdG9yLT5vcHRpb25zKCkubWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSkg
ewotICAgICAgY29uc3QgRGVzY3JpcHRvciogZm9yZWlnbl90eXBlID0gcmVzdWx0LmRlc2NyaXB0
b3I7Ci0gICAgICAvLyBUaGUgdGV4dCBmb3JtYXQgYWxsb3dzIE1lc3NhZ2VTZXQgaXRlbXMgdG8g
YmUgc3BlY2lmaWVkIHVzaW5nCi0gICAgICAvLyB0aGUgdHlwZSBuYW1lLCByYXRoZXIgdGhhbiB0
aGUgZXh0ZW5zaW9uIGlkZW50aWZpZXIuIElmIHRoZSBzeW1ib2wKLSAgICAgIC8vIGxvb2t1cCBy
ZXR1cm5lZCBhIE1lc3NhZ2UsIGFuZCB0aGUgZW5jbG9zaW5nIE1lc3NhZ2UgaGFzCi0gICAgICAv
LyBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCA9IHRydWUsIHRoZW4gcmV0dXJuIHRoZSBtZXNzYWdl
IHNldAotICAgICAgLy8gZXh0ZW5zaW9uLCBpZiBvbmUgZXhpc3RzLgotICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBmb3JlaWduX3R5cGUtPmV4dGVuc2lvbl9jb3VudCgpOyBpKyspIHsKLSAgICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBleHRlbnNpb24gPSBmb3JlaWduX3R5cGUtPmV4dGVu
c2lvbihpKTsKLSAgICAgICAgaWYgKGV4dGVuc2lvbi0+Y29udGFpbmluZ190eXBlKCkgPT0gZGVz
Y3JpcHRvciAmJgotICAgICAgICAgICAgZXh0ZW5zaW9uLT50eXBlKCkgPT0gRmllbGREZXNjcmlw
dG9yOjpUWVBFX01FU1NBR0UgJiYKLSAgICAgICAgICAgIGV4dGVuc2lvbi0+aXNfb3B0aW9uYWwo
KSAmJgotICAgICAgICAgICAgZXh0ZW5zaW9uLT5tZXNzYWdlX3R5cGUoKSA9PSBmb3JlaWduX3R5
cGUpIHsKLSAgICAgICAgICAvLyBGb3VuZCBpdC4KLSAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9u
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotICB9Ci19Owot
Ci0vLyBBIGN1c3RvbSBlcnJvciBjb2xsZWN0b3IgdG8gcmVjb3JkIGFueSB0ZXh0LWZvcm1hdCBw
YXJzaW5nIGVycm9ycwotbmFtZXNwYWNlIHsKLWNsYXNzIEFnZ3JlZ2F0ZUVycm9yQ29sbGVjdG9y
IDogcHVibGljIGlvOjpFcnJvckNvbGxlY3RvciB7Ci0gcHVibGljOgotICBzdHJpbmcgZXJyb3Jf
OwotCi0gIHZpcnR1YWwgdm9pZCBBZGRFcnJvcihpbnQgLyogbGluZSAqLywgaW50IC8qIGNvbHVt
biAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbWVzc2FnZSkgewot
ICAgIGlmICghZXJyb3JfLmVtcHR5KCkpIHsKLSAgICAgIGVycm9yXyArPSAiOyAiOwotICAgIH0K
LSAgICBlcnJvcl8gKz0gbWVzc2FnZTsKLSAgfQotCi0gIHZpcnR1YWwgdm9pZCBBZGRXYXJuaW5n
KGludCAvKiBsaW5lICovLCBpbnQgLyogY29sdW1uICovLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdHJpbmcmIC8qIG1lc3NhZ2UgKi8pIHsKLSAgICAvLyBJZ25vcmUgd2Fybmlu
Z3MKLSAgfQotfTsKLX0KLQotLy8gV2UgY29uc3RydWN0IGEgZHluYW1pYyBtZXNzYWdlIG9mIHRo
ZSB0eXBlIGNvcnJlc3BvbmRpbmcgdG8KLS8vIG9wdGlvbl9maWVsZCwgcGFyc2UgdGhlIHN1cHBs
aWVkIHRleHQtZm9ybWF0IHN0cmluZyBpbnRvIHRoaXMKLS8vIG1lc3NhZ2UsIGFuZCBzZXJpYWxp
emUgdGhlIHJlc3VsdGluZyBtZXNzYWdlIHRvIHByb2R1Y2UgdGhlIHZhbHVlLgotYm9vbCBEZXNj
cmlwdG9yQnVpbGRlcjo6T3B0aW9uSW50ZXJwcmV0ZXI6OlNldEFnZ3JlZ2F0ZU9wdGlvbigKLSAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG9wdGlvbl9maWVsZCwKLSAgICBVbmtub3duRmllbGRT
ZXQqIHVua25vd25fZmllbGRzKSB7Ci0gIGlmICghdW5pbnRlcnByZXRlZF9vcHRpb25fLT5oYXNf
YWdncmVnYXRlX3ZhbHVlKCkpIHsKLSAgICByZXR1cm4gQWRkVmFsdWVFcnJvcigiT3B0aW9uIFwi
IiArIG9wdGlvbl9maWVsZC0+ZnVsbF9uYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAg
ICJcIiBpcyBhIG1lc3NhZ2UuIFRvIHNldCB0aGUgZW50aXJlIG1lc3NhZ2UsIHVzZSAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgInN5bnRheCBsaWtlIFwiIiArIG9wdGlvbl9maWVsZC0+bmFt
ZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAiID0geyA8cHJvdG8gdGV4dCBmb3JtYXQ+
IH1cIi4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICJUbyBzZXQgZmllbGRzIHdpdGhpbiBp
dCwgdXNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAic3ludGF4IGxpa2UgXCIiICsgb3B0
aW9uX2ZpZWxkLT5uYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICIuZm9vID0gdmFs
dWVcIi4iKTsKLSAgfQotCi0gIGNvbnN0IERlc2NyaXB0b3IqIHR5cGUgPSBvcHRpb25fZmllbGQt
Pm1lc3NhZ2VfdHlwZSgpOwotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+
IGR5bmFtaWMoZHluYW1pY19mYWN0b3J5Xy5HZXRQcm90b3R5cGUodHlwZSktPk5ldygpKTsKLSAg
R09PR0xFX0NIRUNLKGR5bmFtaWMuZ2V0KCkgIT0gTlVMTCkKLSAgICAgIDw8ICJDb3VsZCBub3Qg
Y3JlYXRlIGFuIGluc3RhbmNlIG9mICIgPDwgb3B0aW9uX2ZpZWxkLT5EZWJ1Z1N0cmluZygpOwot
Ci0gIEFnZ3JlZ2F0ZUVycm9yQ29sbGVjdG9yIGNvbGxlY3RvcjsKLSAgQWdncmVnYXRlT3B0aW9u
RmluZGVyIGZpbmRlcjsKLSAgZmluZGVyLmJ1aWxkZXJfID0gYnVpbGRlcl87Ci0gIFRleHRGb3Jt
YXQ6OlBhcnNlciBwYXJzZXI7Ci0gIHBhcnNlci5SZWNvcmRFcnJvcnNUbygmY29sbGVjdG9yKTsK
LSAgcGFyc2VyLlNldEZpbmRlcigmZmluZGVyKTsKLSAgaWYgKCFwYXJzZXIuUGFyc2VGcm9tU3Ry
aW5nKHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy0+YWdncmVnYXRlX3ZhbHVlKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkeW5hbWljLmdldCgpKSkgewotICAgIEFkZFZhbHVlRXJyb3Io
IkVycm9yIHdoaWxlIHBhcnNpbmcgb3B0aW9uIHZhbHVlIGZvciBcIiIgKwotICAgICAgICAgICAg
ICAgICAgb3B0aW9uX2ZpZWxkLT5uYW1lKCkgKyAiXCI6ICIgKyBjb2xsZWN0b3IuZXJyb3JfKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0gZWxzZSB7Ci0gICAgc3RyaW5nIHNlcmlhbDsKLSAgICBk
eW5hbWljLT5TZXJpYWxpemVUb1N0cmluZygmc2VyaWFsKTsgIC8vIE5ldmVyIGZhaWxzCi0gICAg
aWYgKG9wdGlvbl9maWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdF
KSB7Ci0gICAgICB1bmtub3duX2ZpZWxkcy0+QWRkTGVuZ3RoRGVsaW1pdGVkKG9wdGlvbl9maWVs
ZC0+bnVtYmVyKCksIHNlcmlhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdPT0dMRV9DSEVDS19F
UShvcHRpb25fZmllbGQtPnR5cGUoKSwgIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCk7Ci0g
ICAgICBVbmtub3duRmllbGRTZXQqIGdyb3VwID0gdW5rbm93bl9maWVsZHMtPkFkZEdyb3VwKG9w
dGlvbl9maWVsZC0+bnVtYmVyKCkpOwotICAgICAgZ3JvdXAtPlBhcnNlRnJvbVN0cmluZyhzZXJp
YWwpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQotCi12b2lkIERlc2NyaXB0b3JC
dWlsZGVyOjpPcHRpb25JbnRlcnByZXRlcjo6U2V0SW50MzIoaW50IG51bWJlciwgaW50MzIgdmFs
dWUsCi0gICAgRmllbGREZXNjcmlwdG9yOjpUeXBlIHR5cGUsIFVua25vd25GaWVsZFNldCogdW5r
bm93bl9maWVsZHMpIHsKLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OlRZUEVfSU5UMzI6Ci0gICAgICB1bmtub3duX2ZpZWxkcy0+QWRkVmFyaW50KG51bWJlciwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0PihzdGF0aWNfY2FzdDxpbnQ2ND4odmFsdWUpKSk7
Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX1NGSVhFRDMy
OgotICAgICAgdW5rbm93bl9maWVsZHMtPkFkZEZpeGVkMzIobnVtYmVyLCBzdGF0aWNfY2FzdDx1
aW50MzI+KHZhbHVlKSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX1NJTlQzMjoKLSAgICAgIHVua25vd25fZmllbGRzLT5BZGRWYXJpbnQobnVtYmVyLAot
ICAgICAgICAgIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Wmln
WmFnRW5jb2RlMzIodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAg
IEdPT0dMRV9MT0coRkFUQUwpIDw8ICJJbnZhbGlkIHdpcmUgdHlwZSBmb3IgQ1BQVFlQRV9JTlQz
MjogIiA8PCB0eXBlOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotdm9pZCBEZXNjcmlwdG9yQnVp
bGRlcjo6T3B0aW9uSW50ZXJwcmV0ZXI6OlNldEludDY0KGludCBudW1iZXIsIGludDY0IHZhbHVl
LAotICAgIEZpZWxkRGVzY3JpcHRvcjo6VHlwZSB0eXBlLCBVbmtub3duRmllbGRTZXQqIHVua25v
d25fZmllbGRzKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX0lOVDY0OgotICAgICAgdW5rbm93bl9maWVsZHMtPkFkZFZhcmludChudW1iZXIsIHN0
YXRpY19jYXN0PHVpbnQ2ND4odmFsdWUpKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OlRZUEVfU0ZJWEVENjQ6Ci0gICAgICB1bmtub3duX2ZpZWxkcy0+QWRkRml4
ZWQ2NChudW1iZXIsIHN0YXRpY19jYXN0PHVpbnQ2ND4odmFsdWUpKTsKLSAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU0lOVDY0OgotICAgICAgdW5rbm93bl9m
aWVsZHMtPkFkZFZhcmludChudW1iZXIsCi0gICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpaaWdaYWdFbmNvZGU2NCh2YWx1ZSkpOwotICAgICAgYnJl
YWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkludmFsaWQg
d2lyZSB0eXBlIGZvciBDUFBUWVBFX0lOVDY0OiAiIDw8IHR5cGU7Ci0gICAgICBicmVhazsKLSAg
fQotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpPcHRpb25JbnRlcnByZXRlcjo6U2V0VUlu
dDMyKGludCBudW1iZXIsIHVpbnQzMiB2YWx1ZSwKLSAgICBGaWVsZERlc2NyaXB0b3I6OlR5cGUg
dHlwZSwgVW5rbm93bkZpZWxkU2V0KiB1bmtub3duX2ZpZWxkcykgewotICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9VSU5UMzI6Ci0gICAgICB1bmtub3du
X2ZpZWxkcy0+QWRkVmFyaW50KG51bWJlciwgc3RhdGljX2Nhc3Q8dWludDY0Pih2YWx1ZSkpOwot
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhFRDMyOgot
ICAgICAgdW5rbm93bl9maWVsZHMtPkFkZEZpeGVkMzIobnVtYmVyLCBzdGF0aWNfY2FzdDx1aW50
MzI+KHZhbHVlKSk7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBHT09HTEVf
TE9HKEZBVEFMKSA8PCAiSW52YWxpZCB3aXJlIHR5cGUgZm9yIENQUFRZUEVfVUlOVDMyOiAiIDw8
IHR5cGU7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpP
cHRpb25JbnRlcnByZXRlcjo6U2V0VUludDY0KGludCBudW1iZXIsIHVpbnQ2NCB2YWx1ZSwKLSAg
ICBGaWVsZERlc2NyaXB0b3I6OlR5cGUgdHlwZSwgVW5rbm93bkZpZWxkU2V0KiB1bmtub3duX2Zp
ZWxkcykgewotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9VSU5UNjQ6Ci0gICAgICB1bmtub3duX2ZpZWxkcy0+QWRkVmFyaW50KG51bWJlciwgdmFsdWUp
OwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9GSVhFRDY0
OgotICAgICAgdW5rbm93bl9maWVsZHMtPkFkZEZpeGVkNjQobnVtYmVyLCB2YWx1ZSk7Ci0gICAg
ICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiSW52
YWxpZCB3aXJlIHR5cGUgZm9yIENQUFRZUEVfVUlOVDY0OiAiIDw8IHR5cGU7Ci0gICAgICBicmVh
azsKLSAgfQotfQotCi12b2lkIERlc2NyaXB0b3JCdWlsZGVyOjpMb2dVbnVzZWREZXBlbmRlbmN5
KGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3RvLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogcmVzdWx0KSB7Ci0K
LSAgaWYgKCF1bnVzZWRfZGVwZW5kZW5jeV8uZW1wdHkoKSkgewotICAgIHN0ZDo6c2V0PHN0cmlu
Zz4gYW5ub3RhdGlvbl9leHRlbnNpb25zOwotICAgIGFubm90YXRpb25fZXh0ZW5zaW9ucy5pbnNl
cnQoImdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucyIpOwotICAgIGFubm90YXRpb25fZXh0
ZW5zaW9ucy5pbnNlcnQoImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucyIpOwotICAgIGFubm90
YXRpb25fZXh0ZW5zaW9ucy5pbnNlcnQoImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMiKTsK
LSAgICBhbm5vdGF0aW9uX2V4dGVuc2lvbnMuaW5zZXJ0KCJnb29nbGUucHJvdG9idWYuRW51bU9w
dGlvbnMiKTsKLSAgICBhbm5vdGF0aW9uX2V4dGVuc2lvbnMuaW5zZXJ0KCJnb29nbGUucHJvdG9i
dWYuRW51bVZhbHVlT3B0aW9ucyIpOwotICAgIGFubm90YXRpb25fZXh0ZW5zaW9ucy5pbnNlcnQo
Imdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucyIpOwotICAgIGFubm90YXRpb25fZXh0ZW5z
aW9ucy5pbnNlcnQoImdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zIik7Ci0gICAgYW5ub3Rh
dGlvbl9leHRlbnNpb25zLmluc2VydCgiZ29vZ2xlLnByb3RvYnVmLlN0cmVhbU9wdGlvbnMiKTsK
LSAgICBmb3IgKHNldDxjb25zdCBGaWxlRGVzY3JpcHRvcio+Ojpjb25zdF9pdGVyYXRvcgotICAg
ICAgICAgICAgIGl0ID0gdW51c2VkX2RlcGVuZGVuY3lfLmJlZ2luKCk7Ci0gICAgICAgICBpdCAh
PSB1bnVzZWRfZGVwZW5kZW5jeV8uZW5kKCk7ICsraXQpIHsKLSAgICAgIC8vIERvIG5vdCBsb2cg
d2FybmluZ3MgZm9yIHByb3RvIGZpbGVzIHdoaWNoIGV4dGVuZCBhbm5vdGF0aW9ucy4KLSAgICAg
IGludCBpOwotICAgICAgZm9yIChpID0gMCA7IGkgPCAoKml0KS0+ZXh0ZW5zaW9uX2NvdW50KCk7
ICsraSkgewotICAgICAgICBpZiAoYW5ub3RhdGlvbl9leHRlbnNpb25zLmZpbmQoCi0gICAgICAg
ICAgICAgICAgKCppdCktPmV4dGVuc2lvbihpKS0+Y29udGFpbmluZ190eXBlKCktPmZ1bGxfbmFt
ZSgpKQotICAgICAgICAgICAgIT0gYW5ub3RhdGlvbl9leHRlbnNpb25zLmVuZCgpKSB7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIExvZyB3YXJuaW5ncyBm
b3IgdW51c2VkIGltcG9ydGVkIGZpbGVzLgotICAgICAgaWYgKGkgPT0gKCppdCktPmV4dGVuc2lv
bl9jb3VudCgpKSB7Ci0gICAgICAgIHN0cmluZyBlcnJvcl9tZXNzYWdlID0gIkltcG9ydCAiICsg
KCppdCktPm5hbWUoKSArICIgYnV0IG5vdCB1c2VkLiI7Ci0gICAgICAgIEFkZFdhcm5pbmcoKCpp
dCktPm5hbWUoKSwgcHJvdG8sIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rvcjo6T1RIRVIs
Ci0gICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9kZXNjcmlwdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlY2Mw
YTljMDhlM2YwMjgxOWQxOTlmNmM5ODhhNGFmMTY5MzMxNWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3Iu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE5MTIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJk
YSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8g
IFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIFRoaXMgZmls
ZSBjb250YWlucyBjbGFzc2VzIHdoaWNoIGRlc2NyaWJlIGEgdHlwZSBvZiBwcm90b2NvbCBtZXNz
YWdlLgotLy8gWW91IGNhbiB1c2UgYSBtZXNzYWdlJ3MgZGVzY3JpcHRvciB0byBsZWFybiBhdCBy
dW50aW1lIHdoYXQgZmllbGRzCi0vLyBpdCBjb250YWlucyBhbmQgd2hhdCB0aGUgdHlwZXMgb2Yg
dGhvc2UgZmllbGRzIGFyZS4gIFRoZSBNZXNzYWdlCi0vLyBpbnRlcmZhY2UgYWxzbyBhbGxvd3Mg
eW91IHRvIGR5bmFtaWNhbGx5IGFjY2VzcyBhbmQgbW9kaWZ5IGluZGl2aWR1YWwKLS8vIGZpZWxk
cyBieSBwYXNzaW5nIHRoZSBGaWVsZERlc2NyaXB0b3Igb2YgdGhlIGZpZWxkIHlvdSBhcmUgaW50
ZXJlc3RlZAotLy8gaW4uCi0vLwotLy8gTW9zdCB1c2VycyB3aWxsIG5vdCBjYXJlIGFib3V0IGRl
c2NyaXB0b3JzLCBiZWNhdXNlIHRoZXkgd2lsbCB3cml0ZQotLy8gY29kZSBzcGVjaWZpYyB0byBj
ZXJ0YWluIHByb3RvY29sIHR5cGVzIGFuZCB3aWxsIHNpbXBseSB1c2UgdGhlIGNsYXNzZXMKLS8v
IGdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgY29tcGlsZXIgZGlyZWN0bHkuICBBZHZhbmNlZCB1
c2VycyB3aG8gd2FudAotLy8gdG8gb3BlcmF0ZSBvbiBhcmJpdHJhcnkgdHlwZXMgKG5vdCBrbm93
biBhdCBjb21waWxlIHRpbWUpIG1heSB3YW50IHRvCi0vLyByZWFkIGRlc2NyaXB0b3JzIGluIG9y
ZGVyIHRvIGxlYXJuIGFib3V0IHRoZSBjb250ZW50cyBvZiBhIG1lc3NhZ2UuCi0vLyBBIHZlcnkg
c21hbGwgbnVtYmVyIG9mIHVzZXJzIHdpbGwgd2FudCB0byBjb25zdHJ1Y3QgdGhlaXIgb3duCi0v
LyBEZXNjcmlwdG9ycywgZWl0aGVyIGJlY2F1c2UgdGhleSBhcmUgaW1wbGVtZW50aW5nIE1lc3Nh
Z2UgbWFudWFsbHkgb3IKLS8vIGJlY2F1c2UgdGhleSBhcmUgd3JpdGluZyBzb21ldGhpbmcgbGlr
ZSB0aGUgcHJvdG9jb2wgY29tcGlsZXIuCi0vLwotLy8gRm9yIGFuIGV4YW1wbGUgb2YgaG93IHlv
dSBtaWdodCB1c2UgZGVzY3JpcHRvcnMsIHNlZSB0aGUgY29kZSBleGFtcGxlCi0vLyBhdCB0aGUg
dG9wIG9mIG1lc3NhZ2UuaC4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfREVTQ1JJUFRPUl9I
X18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0RFU0NSSVBUT1JfSF9fCi0KLSNpbmNsdWRlIDxt
ZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHN0
cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zY29wZWRfcHRyLmg+
Ci0KLS8vIFRZUEVfQk9PTCBpcyBkZWZpbmVkIGluIHRoZSBNYWNPUydzIENvbmRpdGlvbmFsTWFj
cm9zLmguCi0jaWZkZWYgVFlQRV9CT09MCi0jdW5kZWYgVFlQRV9CT09MCi0jZW5kaWYgIC8vIFRZ
UEVfQk9PTAotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLS8v
IERlZmluZWQgaW4gdGhpcyBmaWxlLgotY2xhc3MgRGVzY3JpcHRvcjsKLWNsYXNzIEZpZWxkRGVz
Y3JpcHRvcjsKLWNsYXNzIE9uZW9mRGVzY3JpcHRvcjsKLWNsYXNzIEVudW1EZXNjcmlwdG9yOwot
Y2xhc3MgRW51bVZhbHVlRGVzY3JpcHRvcjsKLWNsYXNzIFNlcnZpY2VEZXNjcmlwdG9yOwotY2xh
c3MgTWV0aG9kRGVzY3JpcHRvcjsKLWNsYXNzIEZpbGVEZXNjcmlwdG9yOwotY2xhc3MgRGVzY3Jp
cHRvckRhdGFiYXNlOwotY2xhc3MgRGVzY3JpcHRvclBvb2w7Ci0KLS8vIERlZmluZWQgaW4gZGVz
Y3JpcHRvci5wcm90bwotY2xhc3MgRGVzY3JpcHRvclByb3RvOwotY2xhc3MgRmllbGREZXNjcmlw
dG9yUHJvdG87Ci1jbGFzcyBPbmVvZkRlc2NyaXB0b3JQcm90bzsKLWNsYXNzIEVudW1EZXNjcmlw
dG9yUHJvdG87Ci1jbGFzcyBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG87Ci1jbGFzcyBTZXJ2aWNl
RGVzY3JpcHRvclByb3RvOwotY2xhc3MgTWV0aG9kRGVzY3JpcHRvclByb3RvOwotY2xhc3MgRmls
ZURlc2NyaXB0b3JQcm90bzsKLWNsYXNzIE1lc3NhZ2VPcHRpb25zOwotY2xhc3MgRmllbGRPcHRp
b25zOwotY2xhc3MgRW51bU9wdGlvbnM7Ci1jbGFzcyBFbnVtVmFsdWVPcHRpb25zOwotY2xhc3Mg
U2VydmljZU9wdGlvbnM7Ci1jbGFzcyBNZXRob2RPcHRpb25zOwotY2xhc3MgRmlsZU9wdGlvbnM7
Ci1jbGFzcyBVbmludGVycHJldGVkT3B0aW9uOwotY2xhc3MgU291cmNlQ29kZUluZm87Ci0KLS8v
IERlZmluZWQgaW4gbWVzc2FnZS5oCi1jbGFzcyBNZXNzYWdlOwotCi0vLyBEZWZpbmVkIGluIGRl
c2NyaXB0b3IuY2MKLWNsYXNzIERlc2NyaXB0b3JCdWlsZGVyOwotY2xhc3MgRmlsZURlc2NyaXB0
b3JUYWJsZXM7Ci0KLS8vIERlZmluZWQgaW4gdW5rbm93bl9maWVsZF9zZXQuaC4KLWNsYXNzIFVu
a25vd25GaWVsZDsKLQotLy8gRGVmaW5lZCBpbiBnZW5lcmF0ZWRfbWVzc2FnZV9yZWZsZWN0aW9u
LmguCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotY2xhc3MgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b247Ci19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotLy8gRGVmaW5lZCBpbiBjb21tYW5kX2xp
bmVfaW50ZXJmYWNlLmNjCi1uYW1lc3BhY2UgY29tcGlsZXIgewotY2xhc3MgQ29tbWFuZExpbmVJ
bnRlcmZhY2U7Ci19ICAvLyBuYW1lc3BhY2UgY29tcGlsZXIKLQotbmFtZXNwYWNlIGRlc2NyaXB0
b3JfdW5pdHRlc3QgewotY2xhc3MgRGVzY3JpcHRvclRlc3Q7Ci19ICAvLyBuYW1lc3BhY2UgZGVz
Y3JpcHRvcl91bml0dGVzdAotCi0vLyBEZWZpbmVkIGluIHByaW50ZXIuaAotbmFtZXNwYWNlIGlv
IHsKLWNsYXNzIFByaW50ZXI7Ci19ICAvLyBuYW1lc3BhY2UgaW8KLQotLy8gTkIsIGFsbCBpbmRp
Y2VzIGFyZSB6ZXJvLWJhc2VkLgotc3RydWN0IFNvdXJjZUxvY2F0aW9uIHsKLSAgaW50IHN0YXJ0
X2xpbmU7Ci0gIGludCBlbmRfbGluZTsKLSAgaW50IHN0YXJ0X2NvbHVtbjsKLSAgaW50IGVuZF9j
b2x1bW47Ci0KLSAgLy8gRG9jIGNvbW1lbnRzIGZvdW5kIGF0IHRoZSBzb3VyY2UgbG9jYXRpb24u
Ci0gIC8vIFNlZSB0aGUgY29tbWVudHMgaW4gU291cmNlQ29kZUluZm8uTG9jYXRpb24gKGRlc2Ny
aXB0b3IucHJvdG8pIGZvciBkZXRhaWxzLgotICBzdHJpbmcgbGVhZGluZ19jb21tZW50czsKLSAg
c3RyaW5nIHRyYWlsaW5nX2NvbW1lbnRzOwotICB2ZWN0b3I8c3RyaW5nPiBsZWFkaW5nX2RldGFj
aGVkX2NvbW1lbnRzOwotfTsKLQotLy8gT3B0aW9ucyB3aGVuIGdlbmVyYXRpbmcgbWFjaGluZS1w
YXJzYWJsZSBvdXRwdXQgZnJvbSBhIGRlc2NyaXB0b3Igd2l0aAotLy8gRGVidWdTdHJpbmcoKS4K
LXN0cnVjdCBEZWJ1Z1N0cmluZ09wdGlvbnMgewotICAvLyBpbmNsdWRlIG9yaWdpbmFsIHVzZXIg
Y29tbWVudHMgYXMgcmVjb3JkZWQgaW4gU291cmNlTG9jYXRpb24gZW50cmllcy4gTi5CLgotICAv
LyB0aGF0IHRoaXMgbXVzdCBiZSB8ZmFsc2V8IGJ5IGRlZmF1bHQ6IHNldmVyYWwgb3RoZXIgcGll
Y2VzIG9mIGNvZGUgKGZvcgotICAvLyBleGFtcGxlLCB0aGUgQysrIGNvZGUgZ2VuZXJhdGlvbiBm
b3IgZmllbGRzIGluIHRoZSBwcm90byBjb21waWxlcikgcmVseSBvbgotICAvLyBEZWJ1Z1N0cmlu
ZygpIG91dHB1dCBiZWluZyB1bm9ic3RydWN0ZWQgYnkgdXNlciBjb21tZW50cy4KLSAgYm9vbCBp
bmNsdWRlX2NvbW1lbnRzOwotICAvLyBJZiB0cnVlLCBlbGlkZSB0aGUgYnJhY2VkIGJvZHkgaW4g
dGhlIGRlYnVnIHN0cmluZy4KLSAgYm9vbCBlbGlkZV9ncm91cF9ib2R5OwotICBib29sIGVsaWRl
X29uZW9mX2JvZHk7Ci0KLSAgRGVidWdTdHJpbmdPcHRpb25zKCkKLSAgICAgIDogaW5jbHVkZV9j
b21tZW50cyhmYWxzZSksCi0gICAgICAgIGVsaWRlX2dyb3VwX2JvZHkoZmFsc2UpLAotICAgICAg
ICBlbGlkZV9vbmVvZl9ib2R5KGZhbHNlKSB7fQotfTsKLQotLy8gRGVzY3JpYmVzIGEgdHlwZSBv
ZiBwcm90b2NvbCBtZXNzYWdlLCBvciBhIHBhcnRpY3VsYXIgZ3JvdXAgd2l0aGluIGEKLS8vIG1l
c3NhZ2UuICBUbyBvYnRhaW4gdGhlIERlc2NyaXB0b3IgZm9yIGEgZ2l2ZW4gbWVzc2FnZSBvYmpl
Y3QsIGNhbGwKLS8vIE1lc3NhZ2U6OkdldERlc2NyaXB0b3IoKS4gIEdlbmVyYXRlZCBtZXNzYWdl
IGNsYXNzZXMgYWxzbyBoYXZlIGEKLS8vIHN0YXRpYyBtZXRob2QgY2FsbGVkIGRlc2NyaXB0b3Io
KSB3aGljaCByZXR1cm5zIHRoZSB0eXBlJ3MgZGVzY3JpcHRvci4KLS8vIFVzZSBEZXNjcmlwdG9y
UG9vbCB0byBjb25zdHJ1Y3QgeW91ciBvd24gZGVzY3JpcHRvcnMuCi1jbGFzcyBMSUJQUk9UT0JV
Rl9FWFBPUlQgRGVzY3JpcHRvciB7Ci0gcHVibGljOgotICAvLyBUaGUgbmFtZSBvZiB0aGUgbWVz
c2FnZSB0eXBlLCBub3QgaW5jbHVkaW5nIGl0cyBzY29wZS4KLSAgY29uc3Qgc3RyaW5nJiBuYW1l
KCkgY29uc3Q7Ci0KLSAgLy8gVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBtZXNzYWdl
IHR5cGUsIHNjb3BlIGRlbGltaXRlZCBieQotICAvLyBwZXJpb2RzLiAgRm9yIGV4YW1wbGUsIG1l
c3NhZ2UgdHlwZSAiRm9vIiB3aGljaCBpcyBkZWNsYXJlZCBpbiBwYWNrYWdlCi0gIC8vICJiYXIi
IGhhcyBmdWxsIG5hbWUgImJhci5Gb28iLiAgSWYgYSB0eXBlICJCYXoiIGlzIG5lc3RlZCB3aXRo
aW4KLSAgLy8gRm9vLCBCYXoncyBmdWxsX25hbWUgaXMgImJhci5Gb28uQmF6Ii4gIFRvIGdldCBv
bmx5IHRoZSBwYXJ0IHRoYXQKLSAgLy8gY29tZXMgYWZ0ZXIgdGhlIGxhc3QgJy4nLCB1c2UgbmFt
ZSgpLgotICBjb25zdCBzdHJpbmcmIGZ1bGxfbmFtZSgpIGNvbnN0OwotCi0gIC8vIEluZGV4IG9m
IHRoaXMgZGVzY3JpcHRvciB3aXRoaW4gdGhlIGZpbGUgb3IgY29udGFpbmluZyB0eXBlJ3MgbWVz
c2FnZQotICAvLyB0eXBlIGFycmF5LgotICBpbnQgaW5kZXgoKSBjb25zdDsKLQotICAvLyBUaGUg
LnByb3RvIGZpbGUgaW4gd2hpY2ggdGhpcyBtZXNzYWdlIHR5cGUgd2FzIGRlZmluZWQuICBOZXZl
ciBOVUxMLgotICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSgpIGNvbnN0OwotCi0gIC8vIElm
IHRoaXMgRGVzY3JpcHRvciBkZXNjcmliZXMgYSBuZXN0ZWQgdHlwZSwgdGhpcyByZXR1cm5zIHRo
ZSB0eXBlCi0gIC8vIGluIHdoaWNoIGl0IGlzIG5lc3RlZC4gIE90aGVyd2lzZSwgcmV0dXJucyBO
VUxMLgotICBjb25zdCBEZXNjcmlwdG9yKiBjb250YWluaW5nX3R5cGUoKSBjb25zdDsKLQotICAv
LyBHZXQgb3B0aW9ucyBmb3IgdGhpcyBtZXNzYWdlIHR5cGUuICBUaGVzZSBhcmUgc3BlY2lmaWVk
IGluIHRoZSAucHJvdG8gZmlsZQotICAvLyBieSBwbGFjaW5nIGxpbmVzIGxpa2UgIm9wdGlvbiBm
b28gPSAxMjM0OyIgaW4gdGhlIG1lc3NhZ2UgZGVmaW5pdGlvbi4KLSAgLy8gQWxsb3dlZCBvcHRp
b25zIGFyZSBkZWZpbmVkIGJ5IE1lc3NhZ2VPcHRpb25zIGluCi0gIC8vIGdvb2dsZS9wcm90b2J1
Zi9kZXNjcmlwdG9yLnByb3RvLCBhbmQgYW55IGF2YWlsYWJsZSBleHRlbnNpb25zIG9mIHRoYXQK
LSAgLy8gbWVzc2FnZS4KLSAgY29uc3QgTWVzc2FnZU9wdGlvbnMmIG9wdGlvbnMoKSBjb25zdDsK
LQotICAvLyBXcml0ZSB0aGUgY29udGVudHMgb2YgdGhpcyBEZXNjcmlwdG9yIGludG8gdGhlIGdp
dmVuIERlc2NyaXB0b3JQcm90by4KLSAgLy8gVGhlIHRhcmdldCBEZXNjcmlwdG9yUHJvdG8gbXVz
dCBiZSBjbGVhciBiZWZvcmUgY2FsbGluZyB0aGlzOyBpZiBpdAotICAvLyBpc24ndCwgdGhlIHJl
c3VsdCBtYXkgYmUgZ2FyYmFnZS4KLSAgdm9pZCBDb3B5VG8oRGVzY3JpcHRvclByb3RvKiBwcm90
bykgY29uc3Q7Ci0KLSAgLy8gV3JpdGUgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZGVjcmlwdG9yIGlu
IGEgaHVtYW4tcmVhZGFibGUgZm9ybS4gT3V0cHV0Ci0gIC8vIHdpbGwgYmUgc3VpdGFibGUgZm9y
IHJlLXBhcnNpbmcuCi0gIHN0cmluZyBEZWJ1Z1N0cmluZygpIGNvbnN0OwotCi0gIC8vIFNpbWls
YXIgdG8gRGVidWdTdHJpbmcoKSwgYnV0IGFkZGl0aW9uYWxseSB0YWtlcyBvcHRpb25zIChlLmcu
LAotICAvLyBpbmNsdWRlIG9yaWdpbmFsIHVzZXIgY29tbWVudHMgaW4gb3V0cHV0KS4KLSAgc3Ry
aW5nIERlYnVnU3RyaW5nV2l0aE9wdGlvbnMoY29uc3QgRGVidWdTdHJpbmdPcHRpb25zJiBvcHRp
b25zKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIHBsYWNlaG9sZGVy
IGZvciBhbiB1bmtub3duIHR5cGUuIFRoaXMgd2lsbAotICAvLyBvbmx5IGJlIHRoZSBjYXNlIGlm
IHRoaXMgZGVzY3JpcHRvciBjb21lcyBmcm9tIGEgRGVzY3JpcHRvclBvb2wKLSAgLy8gd2l0aCBB
bGxvd1Vua25vd25EZXBlbmRlbmNpZXMoKSBzZXQuCi0gIGJvb2wgaXNfcGxhY2Vob2xkZXIoKSBj
b25zdDsKLQotICAvLyBGaWVsZCBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIFRoZSBudW1iZXIgb2YgZmllbGRzIGluIHRo
aXMgbWVzc2FnZSB0eXBlLgotICBpbnQgZmllbGRfY291bnQoKSBjb25zdDsKLSAgLy8gR2V0cyBh
IGZpZWxkIGJ5IGluZGV4LCB3aGVyZSAwIDw9IGluZGV4IDwgZmllbGRfY291bnQoKS4KLSAgLy8g
VGhlc2UgYXJlIHJldHVybmVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgZGVmaW5lZCBpbiB0aGUg
LnByb3RvIGZpbGUuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQoaW50IGluZGV4KSBj
b25zdDsKLQotICAvLyBMb29rcyB1cCBhIGZpZWxkIGJ5IGRlY2xhcmVkIHRhZyBudW1iZXIuICBS
ZXR1cm5zIE5VTEwgaWYgbm8gc3VjaCBmaWVsZAotICAvLyBleGlzdHMuCi0gIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogRmluZEZpZWxkQnlOdW1iZXIoaW50IG51bWJlcikgY29uc3Q7Ci0gIC8vIExv
b2tzIHVwIGEgZmllbGQgYnkgbmFtZS4gIFJldHVybnMgTlVMTCBpZiBubyBzdWNoIGZpZWxkIGV4
aXN0cy4KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBGaW5kRmllbGRCeU5hbWUoY29uc3Qgc3Ry
aW5nJiBuYW1lKSBjb25zdDsKLQotICAvLyBMb29rcyB1cCBhIGZpZWxkIGJ5IGxvd2VyY2FzZWQg
bmFtZSAoYXMgcmV0dXJuZWQgYnkgbG93ZXJjYXNlX25hbWUoKSkuCi0gIC8vIFRoaXMgbG9va3Vw
IG1heSBiZSBhbWJpZ3VvdXMgaWYgbXVsdGlwbGUgZmllbGQgbmFtZXMgZGlmZmVyIG9ubHkgYnkg
Y2FzZSwKLSAgLy8gaW4gd2hpY2ggY2FzZSB0aGUgZmllbGQgcmV0dXJuZWQgaXMgY2hvc2VuIGFy
Yml0cmFyaWx5IGZyb20gdGhlIG1hdGNoZXMuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogRmlu
ZEZpZWxkQnlMb3dlcmNhc2VOYW1lKAotICAgICAgY29uc3Qgc3RyaW5nJiBsb3dlcmNhc2VfbmFt
ZSkgY29uc3Q7Ci0KLSAgLy8gTG9va3MgdXAgYSBmaWVsZCBieSBjYW1lbC1jYXNlIG5hbWUgKGFz
IHJldHVybmVkIGJ5IGNhbWVsY2FzZV9uYW1lKCkpLgotICAvLyBUaGlzIGxvb2t1cCBtYXkgYmUg
YW1iaWd1b3VzIGlmIG11bHRpcGxlIGZpZWxkIG5hbWVzIGRpZmZlciBpbiBhIHdheSB0aGF0Ci0g
IC8vIGxlYWRzIHRoZW0gdG8gaGF2ZSBpZGVudGljYWwgY2FtZWwtY2FzZSBuYW1lcywgaW4gd2hp
Y2ggY2FzZSB0aGUgZmllbGQKLSAgLy8gcmV0dXJuZWQgaXMgY2hvc2VuIGFyYml0cmFyaWx5IGZy
b20gdGhlIG1hdGNoZXMuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogRmluZEZpZWxkQnlDYW1l
bGNhc2VOYW1lKAotICAgICAgY29uc3Qgc3RyaW5nJiBjYW1lbGNhc2VfbmFtZSkgY29uc3Q7Ci0K
LSAgLy8gVGhlIG51bWJlciBvZiBvbmVvZnMgaW4gdGhpcyBtZXNzYWdlIHR5cGUuCi0gIGludCBv
bmVvZl9kZWNsX2NvdW50KCkgY29uc3Q7Ci0gIC8vIEdldCBhIG9uZW9mIGJ5IGluZGV4LCB3aGVy
ZSAwIDw9IGluZGV4IDwgb25lb2ZfZGVjbF9jb3VudCgpLgotICAvLyBUaGVzZSBhcmUgcmV0dXJu
ZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBkZWZpbmVkIGluIHRoZSAucHJvdG8gZmlsZS4KLSAg
Y29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZl9kZWNsKGludCBpbmRleCkgY29uc3Q7Ci0KLSAg
Ly8gTG9va3MgdXAgYSBvbmVvZiBieSBuYW1lLiAgUmV0dXJucyBOVUxMIGlmIG5vIHN1Y2ggb25l
b2YgZXhpc3RzLgotICBjb25zdCBPbmVvZkRlc2NyaXB0b3IqIEZpbmRPbmVvZkJ5TmFtZShjb25z
dCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gIC8vIE5lc3RlZCB0eXBlIHN0dWZmIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gVGhlIG51bWJl
ciBvZiBuZXN0ZWQgdHlwZXMgaW4gdGhpcyBtZXNzYWdlIHR5cGUuCi0gIGludCBuZXN0ZWRfdHlw
ZV9jb3VudCgpIGNvbnN0OwotICAvLyBHZXRzIGEgbmVzdGVkIHR5cGUgYnkgaW5kZXgsIHdoZXJl
IDAgPD0gaW5kZXggPCBuZXN0ZWRfdHlwZV9jb3VudCgpLgotICAvLyBUaGVzZSBhcmUgcmV0dXJu
ZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBkZWZpbmVkIGluIHRoZSAucHJvdG8gZmlsZS4KLSAg
Y29uc3QgRGVzY3JpcHRvciogbmVzdGVkX3R5cGUoaW50IGluZGV4KSBjb25zdDsKLQotICAvLyBM
b29rcyB1cCBhIG5lc3RlZCB0eXBlIGJ5IG5hbWUuICBSZXR1cm5zIE5VTEwgaWYgbm8gc3VjaCBu
ZXN0ZWQgdHlwZQotICAvLyBleGlzdHMuCi0gIGNvbnN0IERlc2NyaXB0b3IqIEZpbmROZXN0ZWRU
eXBlQnlOYW1lKGNvbnN0IHN0cmluZyYgbmFtZSkgY29uc3Q7Ci0KLSAgLy8gRW51bSBzdHVmZiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAvLyBUaGUgbnVtYmVyIG9mIGVudW0gdHlwZXMgaW4gdGhpcyBtZXNzYWdlIHR5cGUuCi0gIGlu
dCBlbnVtX3R5cGVfY291bnQoKSBjb25zdDsKLSAgLy8gR2V0cyBhbiBlbnVtIHR5cGUgYnkgaW5k
ZXgsIHdoZXJlIDAgPD0gaW5kZXggPCBlbnVtX3R5cGVfY291bnQoKS4KLSAgLy8gVGhlc2UgYXJl
IHJldHVybmVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgZGVmaW5lZCBpbiB0aGUgLnByb3RvIGZp
bGUuCi0gIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBlbnVtX3R5cGUoaW50IGluZGV4KSBjb25zdDsK
LQotICAvLyBMb29rcyB1cCBhbiBlbnVtIHR5cGUgYnkgbmFtZS4gIFJldHVybnMgTlVMTCBpZiBu
byBzdWNoIGVudW0gdHlwZSBleGlzdHMuCi0gIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBGaW5kRW51
bVR5cGVCeU5hbWUoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdDsKLQotICAvLyBMb29rcyB1cCBh
biBlbnVtIHZhbHVlIGJ5IG5hbWUsIGFtb25nIGFsbCBlbnVtIHR5cGVzIGluIHRoaXMgbWVzc2Fn
ZS4KLSAgLy8gUmV0dXJucyBOVUxMIGlmIG5vIHN1Y2ggdmFsdWUgZXhpc3RzLgotICBjb25zdCBF
bnVtVmFsdWVEZXNjcmlwdG9yKiBGaW5kRW51bVZhbHVlQnlOYW1lKGNvbnN0IHN0cmluZyYgbmFt
ZSkgY29uc3Q7Ci0KLSAgLy8gRXh0ZW5zaW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBBIHJhbmdlIG9mIGZpZWxkIG51bWJl
cnMgd2hpY2ggYXJlIGRlc2lnbmF0ZWQgZm9yIHRoaXJkLXBhcnR5Ci0gIC8vIGV4dGVuc2lvbnMu
Ci0gIHN0cnVjdCBFeHRlbnNpb25SYW5nZSB7Ci0gICAgaW50IHN0YXJ0OyAgLy8gaW5jbHVzaXZl
Ci0gICAgaW50IGVuZDsgICAgLy8gZXhjbHVzaXZlCi0gIH07Ci0KLSAgLy8gVGhlIG51bWJlciBv
ZiBleHRlbnNpb24gcmFuZ2VzIGluIHRoaXMgbWVzc2FnZSB0eXBlLgotICBpbnQgZXh0ZW5zaW9u
X3JhbmdlX2NvdW50KCkgY29uc3Q7Ci0gIC8vIEdldHMgYW4gZXh0ZW5zaW9uIHJhbmdlIGJ5IGlu
ZGV4LCB3aGVyZSAwIDw9IGluZGV4IDwKLSAgLy8gZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCkuIFRo
ZXNlIGFyZSByZXR1cm5lZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGRlZmluZWQKLSAgLy8gaW4g
dGhlIC5wcm90byBmaWxlLgotICBjb25zdCBFeHRlbnNpb25SYW5nZSogZXh0ZW5zaW9uX3Jhbmdl
KGludCBpbmRleCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBudW1iZXIgaXMg
aW4gb25lIG9mIHRoZSBleHRlbnNpb24gcmFuZ2VzLgotICBib29sIElzRXh0ZW5zaW9uTnVtYmVy
KGludCBudW1iZXIpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgTlVMTCBpZiBubyBleHRlbnNpb24g
cmFuZ2UgY29udGFpbnMgdGhlIGdpdmVuIG51bWJlci4KLSAgY29uc3QgRXh0ZW5zaW9uUmFuZ2Uq
IEZpbmRFeHRlbnNpb25SYW5nZUNvbnRhaW5pbmdOdW1iZXIoaW50IG51bWJlcikgY29uc3Q7Ci0K
LSAgLy8gVGhlIG51bWJlciBvZiBleHRlbnNpb25zIC0tIGV4dGVuZGluZyAqb3RoZXIqIG1lc3Nh
Z2VzIC0tIHRoYXQgd2VyZQotICAvLyBkZWZpbmVkIG5lc3RlZCB3aXRoaW4gdGhpcyBtZXNzYWdl
IHR5cGUncyBzY29wZS4KLSAgaW50IGV4dGVuc2lvbl9jb3VudCgpIGNvbnN0OwotICAvLyBHZXQg
YW4gZXh0ZW5zaW9uIGJ5IGluZGV4LCB3aGVyZSAwIDw9IGluZGV4IDwgZXh0ZW5zaW9uX2NvdW50
KCkuCi0gIC8vIFRoZXNlIGFyZSByZXR1cm5lZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGRlZmlu
ZWQgaW4gdGhlIC5wcm90byBmaWxlLgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGV4dGVuc2lv
bihpbnQgaW5kZXgpIGNvbnN0OwotCi0gIC8vIExvb2tzIHVwIGEgbmFtZWQgZXh0ZW5zaW9uICh3
aGljaCBleHRlbmRzIHNvbWUgKm90aGVyKiBtZXNzYWdlIHR5cGUpCi0gIC8vIGRlZmluZWQgd2l0
aGluIHRoaXMgbWVzc2FnZSB0eXBlJ3Mgc2NvcGUuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
RmluZEV4dGVuc2lvbkJ5TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gIC8vIFNp
bWlsYXIgdG8gRmluZEZpZWxkQnlMb3dlcmNhc2VOYW1lKCksIGJ1dCBmaW5kcyBleHRlbnNpb25z
IGRlZmluZWQgd2l0aGluCi0gIC8vIHRoaXMgbWVzc2FnZSB0eXBlJ3Mgc2NvcGUuCi0gIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogRmluZEV4dGVuc2lvbkJ5TG93ZXJjYXNlTmFtZShjb25zdCBzdHJp
bmcmIG5hbWUpIGNvbnN0OwotCi0gIC8vIFNpbWlsYXIgdG8gRmluZEZpZWxkQnlDYW1lbGNhc2VO
YW1lKCksIGJ1dCBmaW5kcyBleHRlbnNpb25zIGRlZmluZWQgd2l0aGluCi0gIC8vIHRoaXMgbWVz
c2FnZSB0eXBlJ3Mgc2NvcGUuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogRmluZEV4dGVuc2lv
bkJ5Q2FtZWxjYXNlTmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gIC8vIFJlc2Vy
dmVkIGZpZWxkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgLy8gQSByYW5nZSBvZiByZXNlcnZlZCBmaWVsZCBudW1iZXJzLgotICBzdHJ1Y3Qg
UmVzZXJ2ZWRSYW5nZSB7Ci0gICAgaW50IHN0YXJ0OyAgLy8gaW5jbHVzaXZlCi0gICAgaW50IGVu
ZDsgICAgLy8gZXhjbHVzaXZlCi0gIH07Ci0KLSAgLy8gVGhlIG51bWJlciBvZiByZXNlcnZlZCBy
YW5nZXMgaW4gdGhpcyBtZXNzYWdlIHR5cGUuCi0gIGludCByZXNlcnZlZF9yYW5nZV9jb3VudCgp
IGNvbnN0OwotICAvLyBHZXRzIGFuIHJlc2VydmVkIHJhbmdlIGJ5IGluZGV4LCB3aGVyZSAwIDw9
IGluZGV4IDwKLSAgLy8gcmVzZXJ2ZWRfcmFuZ2VfY291bnQoKS4gVGhlc2UgYXJlIHJldHVybmVk
IGluIHRoZSBvcmRlciB0aGV5IHdlcmUgZGVmaW5lZAotICAvLyBpbiB0aGUgLnByb3RvIGZpbGUu
Ci0gIGNvbnN0IFJlc2VydmVkUmFuZ2UqIHJlc2VydmVkX3JhbmdlKGludCBpbmRleCkgY29uc3Q7
Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBudW1iZXIgaXMgaW4gb25lIG9mIHRoZSByZXNl
cnZlZCByYW5nZXMuCi0gIGJvb2wgSXNSZXNlcnZlZE51bWJlcihpbnQgbnVtYmVyKSBjb25zdDsK
LQotICAvLyBSZXR1cm5zIE5VTEwgaWYgbm8gcmVzZXJ2ZWQgcmFuZ2UgY29udGFpbnMgdGhlIGdp
dmVuIG51bWJlci4KLSAgY29uc3QgUmVzZXJ2ZWRSYW5nZSogRmluZFJlc2VydmVkUmFuZ2VDb250
YWluaW5nTnVtYmVyKGludCBudW1iZXIpIGNvbnN0OwotCi0gIC8vIFRoZSBudW1iZXIgb2YgcmVz
ZXJ2ZWQgZmllbGQgbmFtZXMgaW4gdGhpcyBtZXNzYWdlIHR5cGUuCi0gIGludCByZXNlcnZlZF9u
YW1lX2NvdW50KCkgY29uc3Q7Ci0KLSAgLy8gR2V0cyBhIHJlc2VydmVkIG5hbWUgYnkgaW5kZXgs
IHdoZXJlIDAgPD0gaW5kZXggPCByZXNlcnZlZF9uYW1lX2NvdW50KCkuCi0gIGNvbnN0IHN0cmlu
ZyYgcmVzZXJ2ZWRfbmFtZShpbnQgaW5kZXgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZmllbGQgbmFtZSBpcyByZXNlcnZlZC4KLSAgYm9vbCBJc1Jlc2VydmVkTmFtZShjb25z
dCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gIC8vIFNvdXJjZSBMb2NhdGlvbiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBVcGRhdGVz
IHwqb3V0X2xvY2F0aW9ufCB0byB0aGUgc291cmNlIGxvY2F0aW9uIG9mIHRoZSBjb21wbGV0ZQot
ICAvLyBleHRlbnQgb2YgdGhpcyBtZXNzYWdlIGRlY2xhcmF0aW9uLiAgUmV0dXJucyBmYWxzZSBh
bmQgbGVhdmVzCi0gIC8vIHwqb3V0X2xvY2F0aW9ufCB1bmNoYW5nZWQgaWZmIGxvY2F0aW9uIGlu
Zm9ybWF0aW9uIHdhcyBub3QgYXZhaWxhYmxlLgotICBib29sIEdldFNvdXJjZUxvY2F0aW9uKFNv
dXJjZUxvY2F0aW9uKiBvdXRfbG9jYXRpb24pIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgdHlwZWRl
ZiBNZXNzYWdlT3B0aW9ucyBPcHRpb25zVHlwZTsKLQotICAvLyBBbGxvd3MgdGVzdHMgdG8gdGVz
dCBDb3B5VG8ocHJvdG8sIHRydWUpLgotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVm
OjpkZXNjcmlwdG9yX3VuaXR0ZXN0OjpEZXNjcmlwdG9yVGVzdDsKLQotICAvLyBBbGxvd3MgYWNj
ZXNzIHRvIEdldExvY2F0aW9uUGF0aCBmb3IgYW5ub3RhdGlvbnMuCi0gIGZyaWVuZCBjbGFzcyA6
Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpQcmludGVyOwotCi0gIC8vIEZpbGwgdGhlIGpzb25fbmFt
ZSBmaWVsZCBvZiBGaWVsZERlc2NyaXB0b3JQcm90by4KLSAgdm9pZCBDb3B5SnNvbk5hbWVUbyhE
ZXNjcmlwdG9yUHJvdG8qIHByb3RvKSBjb25zdDsKLQotICAvLyBJbnRlcm5hbCB2ZXJzaW9uIG9m
IERlYnVnU3RyaW5nOyBjb250cm9scyB0aGUgbGV2ZWwgb2YgaW5kZW50aW5nIGZvcgotICAvLyBj
b3JyZWN0IGRlcHRoLiBUYWtlcyB8b3B0aW9uc3wgdG8gY29udHJvbCBkZWJ1Zy1zdHJpbmcgb3B0
aW9ucywgYW5kCi0gIC8vIHxpbmNsdWRlX29wZW5pbmdfY2xhdXNlfCB0byBpbmRpY2F0ZSB3aGV0
aGVyIHRoZSAibWVzc2FnZSAuLi4gIiBwYXJ0IG9mIHRoZQotICAvLyBjbGF1c2UgaGFzIGFscmVh
ZHkgYmVlbiBnZW5lcmF0ZWQgKHRoaXMgdmFyaWVzIGRlcGVuZGluZyBvbiBjb250ZXh0KS4KLSAg
dm9pZCBEZWJ1Z1N0cmluZyhpbnQgZGVwdGgsIHN0cmluZyAqY29udGVudHMsCi0gICAgICAgICAg
ICAgICAgICAgY29uc3QgRGVidWdTdHJpbmdPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAg
ICAgICAgIGJvb2wgaW5jbHVkZV9vcGVuaW5nX2NsYXVzZSkgY29uc3Q7Ci0KLSAgLy8gV2Fsa3Mg
dXAgdGhlIGRlc2NyaXB0b3IgdHJlZSB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGxvY2F0aW9uIHBh
dGgKLSAgLy8gdG8gdGhpcyBkZXNjcmlwdG9yIGZyb20gdGhlIGZpbGUgcm9vdC4KLSAgdm9pZCBH
ZXRMb2NhdGlvblBhdGgoc3RkOjp2ZWN0b3I8aW50Piogb3V0cHV0KSBjb25zdDsKLQotICBjb25z
dCBzdHJpbmcqIG5hbWVfOwotICBjb25zdCBzdHJpbmcqIGZ1bGxfbmFtZV87Ci0gIGNvbnN0IEZp
bGVEZXNjcmlwdG9yKiBmaWxlXzsKLSAgY29uc3QgRGVzY3JpcHRvciogY29udGFpbmluZ190eXBl
XzsKLSAgY29uc3QgTWVzc2FnZU9wdGlvbnMqIG9wdGlvbnNfOwotCi0gIC8vIFRydWUgaWYgdGhp
cyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhbiB1bmtub3duIHR5cGUuCi0gIGJvb2wgaXNfcGxhY2Vo
b2xkZXJfOwotICAvLyBUcnVlIGlmIHRoaXMgaXMgYSBwbGFjZWhvbGRlciBhbmQgdGhlIHR5cGUg
bmFtZSB3YXNuJ3QgZnVsbHktcXVhbGlmaWVkLgotICBib29sIGlzX3VucXVhbGlmaWVkX3BsYWNl
aG9sZGVyXzsKLQotICBpbnQgZmllbGRfY291bnRfOwotICBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
c187Ci0gIGludCBvbmVvZl9kZWNsX2NvdW50XzsKLSAgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZl9k
ZWNsc187Ci0gIGludCBuZXN0ZWRfdHlwZV9jb3VudF87Ci0gIERlc2NyaXB0b3IqIG5lc3RlZF90
eXBlc187Ci0gIGludCBlbnVtX3R5cGVfY291bnRfOwotICBFbnVtRGVzY3JpcHRvciogZW51bV90
eXBlc187Ci0gIGludCBleHRlbnNpb25fcmFuZ2VfY291bnRfOwotICBFeHRlbnNpb25SYW5nZSog
ZXh0ZW5zaW9uX3Jhbmdlc187Ci0gIGludCBleHRlbnNpb25fY291bnRfOwotICBGaWVsZERlc2Ny
aXB0b3IqIGV4dGVuc2lvbnNfOwotICBpbnQgcmVzZXJ2ZWRfcmFuZ2VfY291bnRfOwotICBSZXNl
cnZlZFJhbmdlKiByZXNlcnZlZF9yYW5nZXNfOwotICBpbnQgcmVzZXJ2ZWRfbmFtZV9jb3VudF87
Ci0gIGNvbnN0IHN0cmluZyoqIHJlc2VydmVkX25hbWVzXzsKLSAgLy8gSU1QT1JUQU5UOiAgSWYg
eW91IGFkZCBhIG5ldyBmaWVsZCwgbWFrZSBzdXJlIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNl
cwotICAvLyBvZiBBbGxvY2F0ZTxEZXNjcmlwdG9yPigpIGFuZCBBbGxvY2F0ZUFycmF5PERlc2Ny
aXB0b3I+KCkgaW4gZGVzY3JpcHRvci5jYwotICAvLyBhbmQgdXBkYXRlIHRoZW0gdG8gaW5pdGlh
bGl6ZSB0aGUgZmllbGQuCi0KLSAgLy8gTXVzdCBiZSBjb25zdHJ1Y3RlZCB1c2luZyBEZXNjcmlw
dG9yUG9vbC4KLSAgRGVzY3JpcHRvcigpIHt9Ci0gIGZyaWVuZCBjbGFzcyBEZXNjcmlwdG9yQnVp
bGRlcjsKLSAgZnJpZW5kIGNsYXNzIEVudW1EZXNjcmlwdG9yOwotICBmcmllbmQgY2xhc3MgRmll
bGREZXNjcmlwdG9yOwotICBmcmllbmQgY2xhc3MgT25lb2ZEZXNjcmlwdG9yOwotICBmcmllbmQg
Y2xhc3MgTWV0aG9kRGVzY3JpcHRvcjsKLSAgZnJpZW5kIGNsYXNzIEZpbGVEZXNjcmlwdG9yOwot
ICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRGVzY3JpcHRvcik7Ci19OwotCi0v
LyBEZXNjcmliZXMgYSBzaW5nbGUgZmllbGQgb2YgYSBtZXNzYWdlLiAgVG8gZ2V0IHRoZSBkZXNj
cmlwdG9yIGZvciBhIGdpdmVuCi0vLyBmaWVsZCwgZmlyc3QgZ2V0IHRoZSBEZXNjcmlwdG9yIGZv
ciB0aGUgbWVzc2FnZSBpbiB3aGljaCBpdCBpcyBkZWZpbmVkLAotLy8gdGhlbiBjYWxsIERlc2Ny
aXB0b3I6OkZpbmRGaWVsZEJ5TmFtZSgpLiAgVG8gZ2V0IGEgRmllbGREZXNjcmlwdG9yIGZvcgot
Ly8gYW4gZXh0ZW5zaW9uLCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLS8vIC0gR2V0IHRoZSBE
ZXNjcmlwdG9yIG9yIEZpbGVEZXNjcmlwdG9yIGZvciBpdHMgY29udGFpbmluZyBzY29wZSwgdGhl
bgotLy8gICBjYWxsIERlc2NyaXB0b3I6OkZpbmRFeHRlbnNpb25CeU5hbWUoKSBvcgotLy8gICBG
aWxlRGVzY3JpcHRvcjo6RmluZEV4dGVuc2lvbkJ5TmFtZSgpLgotLy8gLSBHaXZlbiBhIERlc2Ny
aXB0b3JQb29sLCBjYWxsIERlc2NyaXB0b3JQb29sOjpGaW5kRXh0ZW5zaW9uQnlOdW1iZXIoKS4K
LS8vIC0gR2l2ZW4gYSBSZWZsZWN0aW9uIGZvciBhIG1lc3NhZ2Ugb2JqZWN0LCBjYWxsCi0vLyAg
IFJlZmxlY3Rpb246OkZpbmRLbm93bkV4dGVuc2lvbkJ5TmFtZSgpIG9yCi0vLyAgIFJlZmxlY3Rp
b246OkZpbmRLbm93bkV4dGVuc2lvbkJ5TnVtYmVyKCkuCi0vLyBVc2UgRGVzY3JpcHRvclBvb2wg
dG8gY29uc3RydWN0IHlvdXIgb3duIGRlc2NyaXB0b3JzLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQ
T1JUIEZpZWxkRGVzY3JpcHRvciB7Ci0gcHVibGljOgotICAvLyBJZGVudGlmaWVzIGEgZmllbGQg
dHlwZS4gIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycy4gIFRoZSBvcmRlciBpcyB3ZWlyZAotICAv
LyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLiAgVHlwZXMgMTIgYW5kIHVwIGFyZSBuZXcgaW4gcHJv
dG8yLgotICBlbnVtIFR5cGUgewotICAgIFRZUEVfRE9VQkxFICAgICAgICAgPSAxLCAgIC8vIGRv
dWJsZSwgZXhhY3RseSBlaWdodCBieXRlcyBvbiB0aGUgd2lyZS4KLSAgICBUWVBFX0ZMT0FUICAg
ICAgICAgID0gMiwgICAvLyBmbG9hdCwgZXhhY3RseSBmb3VyIGJ5dGVzIG9uIHRoZSB3aXJlLgot
ICAgIFRZUEVfSU5UNjQgICAgICAgICAgPSAzLCAgIC8vIGludDY0LCB2YXJpbnQgb24gdGhlIHdp
cmUuICBOZWdhdGl2ZSBudW1iZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQ2NCBpZiBuZWdhdGl2ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBhcmUgbGlrZWx5LgotICAgIFRZUEVfVUlOVDY0
ICAgICAgICAgPSA0LCAgIC8vIHVpbnQ2NCwgdmFyaW50IG9uIHRoZSB3aXJlLgotICAgIFRZUEVf
SU5UMzIgICAgICAgICAgPSA1LCAgIC8vIGludDMyLCB2YXJpbnQgb24gdGhlIHdpcmUuICBOZWdh
dGl2ZSBudW1iZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFrZSAxMCBi
eXRlcy4gIFVzZSBUWVBFX1NJTlQzMiBpZiBuZWdhdGl2ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHZhbHVlcyBhcmUgbGlrZWx5LgotICAgIFRZUEVfRklYRUQ2NCAgICAgICAg
PSA2LCAgIC8vIHVpbnQ2NCwgZXhhY3RseSBlaWdodCBieXRlcyBvbiB0aGUgd2lyZS4KLSAgICBU
WVBFX0ZJWEVEMzIgICAgICAgID0gNywgICAvLyB1aW50MzIsIGV4YWN0bHkgZm91ciBieXRlcyBv
biB0aGUgd2lyZS4KLSAgICBUWVBFX0JPT0wgICAgICAgICAgID0gOCwgICAvLyBib29sLCB2YXJp
bnQgb24gdGhlIHdpcmUuCi0gICAgVFlQRV9TVFJJTkcgICAgICAgICA9IDksICAgLy8gVVRGLTgg
dGV4dC4KLSAgICBUWVBFX0dST1VQICAgICAgICAgID0gMTAsICAvLyBUYWctZGVsaW1pdGVkIG1l
c3NhZ2UuICBEZXByZWNhdGVkLgotICAgIFRZUEVfTUVTU0FHRSAgICAgICAgPSAxMSwgIC8vIExl
bmd0aC1kZWxpbWl0ZWQgbWVzc2FnZS4KLQotICAgIFRZUEVfQllURVMgICAgICAgICAgPSAxMiwg
IC8vIEFyYml0cmFyeSBieXRlIGFycmF5LgotICAgIFRZUEVfVUlOVDMyICAgICAgICAgPSAxMywg
IC8vIHVpbnQzMiwgdmFyaW50IG9uIHRoZSB3aXJlCi0gICAgVFlQRV9FTlVNICAgICAgICAgICA9
IDE0LCAgLy8gRW51bSwgdmFyaW50IG9uIHRoZSB3aXJlCi0gICAgVFlQRV9TRklYRUQzMiAgICAg
ICA9IDE1LCAgLy8gaW50MzIsIGV4YWN0bHkgZm91ciBieXRlcyBvbiB0aGUgd2lyZQotICAgIFRZ
UEVfU0ZJWEVENjQgICAgICAgPSAxNiwgIC8vIGludDY0LCBleGFjdGx5IGVpZ2h0IGJ5dGVzIG9u
IHRoZSB3aXJlCi0gICAgVFlQRV9TSU5UMzIgICAgICAgICA9IDE3LCAgLy8gaW50MzIsIFppZ1ph
Zy1lbmNvZGVkIHZhcmludCBvbiB0aGUgd2lyZQotICAgIFRZUEVfU0lOVDY0ICAgICAgICAgPSAx
OCwgIC8vIGludDY0LCBaaWdaYWctZW5jb2RlZCB2YXJpbnQgb24gdGhlIHdpcmUKLQotICAgIE1B
WF9UWVBFICAgICAgICAgICAgPSAxOCwgIC8vIENvbnN0YW50IHVzZWZ1bCBmb3IgZGVmaW5pbmcg
bG9va3VwIHRhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGV4ZWQg
YnkgVHlwZS4KLSAgfTsKLQotICAvLyBTcGVjaWZpZXMgdGhlIEMrKyBkYXRhIHR5cGUgdXNlZCB0
byByZXByZXNlbnQgdGhlIGZpZWxkLiAgVGhlcmUgaXMgYQotICAvLyBmaXhlZCBtYXBwaW5nIGZy
b20gVHlwZSB0byBDcHBUeXBlIHdoZXJlIGVhY2ggVHlwZSBtYXBzIHRvIGV4YWN0bHkgb25lCi0g
IC8vIENwcFR5cGUuICAwIGlzIHJlc2VydmVkIGZvciBlcnJvcnMuCi0gIGVudW0gQ3BwVHlwZSB7
Ci0gICAgQ1BQVFlQRV9JTlQzMiAgICAgICA9IDEsICAgICAvLyBUWVBFX0lOVDMyLCBUWVBFX1NJ
TlQzMiwgVFlQRV9TRklYRUQzMgotICAgIENQUFRZUEVfSU5UNjQgICAgICAgPSAyLCAgICAgLy8g
VFlQRV9JTlQ2NCwgVFlQRV9TSU5UNjQsIFRZUEVfU0ZJWEVENjQKLSAgICBDUFBUWVBFX1VJTlQz
MiAgICAgID0gMywgICAgIC8vIFRZUEVfVUlOVDMyLCBUWVBFX0ZJWEVEMzIKLSAgICBDUFBUWVBF
X1VJTlQ2NCAgICAgID0gNCwgICAgIC8vIFRZUEVfVUlOVDY0LCBUWVBFX0ZJWEVENjQKLSAgICBD
UFBUWVBFX0RPVUJMRSAgICAgID0gNSwgICAgIC8vIFRZUEVfRE9VQkxFCi0gICAgQ1BQVFlQRV9G
TE9BVCAgICAgICA9IDYsICAgICAvLyBUWVBFX0ZMT0FUCi0gICAgQ1BQVFlQRV9CT09MICAgICAg
ICA9IDcsICAgICAvLyBUWVBFX0JPT0wKLSAgICBDUFBUWVBFX0VOVU0gICAgICAgID0gOCwgICAg
IC8vIFRZUEVfRU5VTQotICAgIENQUFRZUEVfU1RSSU5HICAgICAgPSA5LCAgICAgLy8gVFlQRV9T
VFJJTkcsIFRZUEVfQllURVMKLSAgICBDUFBUWVBFX01FU1NBR0UgICAgID0gMTAsICAgIC8vIFRZ
UEVfTUVTU0FHRSwgVFlQRV9HUk9VUAotCi0gICAgTUFYX0NQUFRZUEUgICAgICAgICA9IDEwLCAg
ICAvLyBDb25zdGFudCB1c2VmdWwgZm9yIGRlZmluaW5nIGxvb2t1cCB0YWJsZXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGV4ZWQgYnkgQ3BwVHlwZS4KLSAgfTsKLQot
ICAvLyBJZGVudGlmaWVzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIG9wdGlvbmFsLCByZXF1aXJlZCwg
b3IgcmVwZWF0ZWQuICAwIGlzCi0gIC8vIHJlc2VydmVkIGZvciBlcnJvcnMuCi0gIGVudW0gTGFi
ZWwgewotICAgIExBQkVMX09QVElPTkFMICAgICAgPSAxLCAgICAvLyBvcHRpb25hbAotICAgIExB
QkVMX1JFUVVJUkVEICAgICAgPSAyLCAgICAvLyByZXF1aXJlZAotICAgIExBQkVMX1JFUEVBVEVE
ICAgICAgPSAzLCAgICAvLyByZXBlYXRlZAotCi0gICAgTUFYX0xBQkVMICAgICAgICAgICA9IDMs
ICAgIC8vIENvbnN0YW50IHVzZWZ1bCBmb3IgZGVmaW5pbmcgbG9va3VwIHRhYmxlcwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmRleGVkIGJ5IExhYmVsLgotICB9OwotCi0g
IC8vIFZhbGlkIGZpZWxkIG51bWJlcnMgYXJlIHBvc2l0aXZlIGludGVnZXJzIHVwIHRvIGtNYXhO
dW1iZXIuCi0gIHN0YXRpYyBjb25zdCBpbnQga01heE51bWJlciA9ICgxIDw8IDI5KSAtIDE7Ci0K
LSAgLy8gRmlyc3QgZmllbGQgbnVtYmVyIHJlc2VydmVkIGZvciB0aGUgcHJvdG9jb2wgYnVmZmVy
IGxpYnJhcnkgaW1wbGVtZW50YXRpb24uCi0gIC8vIFVzZXJzIG1heSBub3QgZGVjbGFyZSBmaWVs
ZHMgdGhhdCB1c2UgcmVzZXJ2ZWQgbnVtYmVycy4KLSAgc3RhdGljIGNvbnN0IGludCBrRmlyc3RS
ZXNlcnZlZE51bWJlciA9IDE5MDAwOwotICAvLyBMYXN0IGZpZWxkIG51bWJlciByZXNlcnZlZCBm
b3IgdGhlIHByb3RvY29sIGJ1ZmZlciBsaWJyYXJ5IGltcGxlbWVudGF0aW9uLgotICAvLyBVc2Vy
cyBtYXkgbm90IGRlY2xhcmUgZmllbGRzIHRoYXQgdXNlIHJlc2VydmVkIG51bWJlcnMuCi0gIHN0
YXRpYyBjb25zdCBpbnQga0xhc3RSZXNlcnZlZE51bWJlciAgPSAxOTk5OTsKLQotICBjb25zdCBz
dHJpbmcmIG5hbWUoKSBjb25zdDsgICAgICAgIC8vIE5hbWUgb2YgdGhpcyBmaWVsZCB3aXRoaW4g
dGhlIG1lc3NhZ2UuCi0gIGNvbnN0IHN0cmluZyYgZnVsbF9uYW1lKCkgY29uc3Q7ICAgLy8gRnVs
bHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZpZWxkLgotICBjb25zdCBzdHJpbmcmIGpzb25fbmFt
ZSgpIGNvbnN0OyAgIC8vIEpTT04gbmFtZSBvZiB0aGlzIGZpZWxkLgotICBjb25zdCBGaWxlRGVz
Y3JpcHRvciogZmlsZSgpIGNvbnN0Oy8vIEZpbGUgaW4gd2hpY2ggdGhpcyBmaWVsZCB3YXMgZGVm
aW5lZC4KLSAgYm9vbCBpc19leHRlbnNpb24oKSBjb25zdDsgICAgICAgICAvLyBJcyB0aGlzIGFu
IGV4dGVuc2lvbiBmaWVsZD8KLSAgaW50IG51bWJlcigpIGNvbnN0OyAgICAgICAgICAgICAgICAv
LyBEZWNsYXJlZCB0YWcgbnVtYmVyLgotCi0gIC8vIFNhbWUgYXMgbmFtZSgpIGV4Y2VwdCBjb252
ZXJ0ZWQgdG8gbG93ZXItY2FzZS4gIFRoaXMgKGFuZCBlc3BlY2lhbGx5IHRoZQotICAvLyBGaW5k
RmllbGRCeUxvd2VyY2FzZU5hbWUoKSBtZXRob2QpIGNhbiBiZSB1c2VmdWwgd2hlbiBwYXJzaW5n
IGZvcm1hdHMKLSAgLy8gd2hpY2ggcHJlZmVyIHRvIHVzZSBsb3dlcmNhc2UgbmFtaW5nIHN0eWxl
LiAgKEFsdGhvdWdoLCB0ZWNobmljYWxseQotICAvLyBmaWVsZCBuYW1lcyBzaG91bGQgYmUgbG93
ZXJjYXNlZCBhbnl3YXkgYWNjb3JkaW5nIHRvIHRoZSBwcm90b2J1ZiBzdHlsZQotICAvLyBndWlk
ZSwgc28gdGhpcyBvbmx5IG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIGRlYWxpbmcgd2l0aCBvbGQg
LnByb3RvIGZpbGVzCi0gIC8vIHdoaWNoIGRvIG5vdCBmb2xsb3cgdGhlIGd1aWRlLikKLSAgY29u
c3Qgc3RyaW5nJiBsb3dlcmNhc2VfbmFtZSgpIGNvbnN0OwotCi0gIC8vIFNhbWUgYXMgbmFtZSgp
IGV4Y2VwdCBjb252ZXJ0ZWQgdG8gY2FtZWwtY2FzZS4gIEluIHRoaXMgY29udmVyc2lvbiwgYW55
Ci0gIC8vIHRpbWUgYW4gdW5kZXJzY29yZSBhcHBlYXJzIGluIHRoZSBuYW1lLCBpdCBpcyByZW1v
dmVkIGFuZCB0aGUgbmV4dAotICAvLyBsZXR0ZXIgaXMgY2FwaXRhbGl6ZWQuICBGdXJ0aGVybW9y
ZSwgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgbmFtZSBpcwotICAvLyBsb3dlci1jYXNlZC4gIEV4
YW1wbGVzOgotICAvLyAgIEZvb0JhciAtPiBmb29CYXIKLSAgLy8gICBmb29fYmFyIC0+IGZvb0Jh
cgotICAvLyAgIGZvb0JhciAtPiBmb29CYXIKLSAgLy8gVGhpcyAoYW5kIGVzcGVjaWFsbHkgdGhl
IEZpbmRGaWVsZEJ5Q2FtZWxjYXNlTmFtZSgpIG1ldGhvZCkgY2FuIGJlIHVzZWZ1bAotICAvLyB3
aGVuIHBhcnNpbmcgZm9ybWF0cyB3aGljaCBwcmVmZXIgdG8gdXNlIGNhbWVsLWNhc2UgbmFtaW5n
IHN0eWxlLgotICBjb25zdCBzdHJpbmcmIGNhbWVsY2FzZV9uYW1lKCkgY29uc3Q7Ci0KLSAgVHlw
ZSB0eXBlKCkgY29uc3Q7ICAgICAgICAgICAgICAgICAgLy8gRGVjbGFyZWQgdHlwZSBvZiB0aGlz
IGZpZWxkLgotICBjb25zdCBjaGFyKiB0eXBlX25hbWUoKSBjb25zdDsgICAgICAvLyBOYW1lIG9m
IHRoZSBkZWNsYXJlZCB0eXBlLgotICBDcHBUeXBlIGNwcF90eXBlKCkgY29uc3Q7ICAgICAgICAg
ICAvLyBDKysgdHlwZSBvZiB0aGlzIGZpZWxkLgotICBjb25zdCBjaGFyKiBjcHBfdHlwZV9uYW1l
KCkgY29uc3Q7ICAvLyBOYW1lIG9mIHRoZSBDKysgdHlwZS4KLSAgTGFiZWwgbGFiZWwoKSBjb25z
dDsgICAgICAgICAgICAgICAgLy8gb3B0aW9uYWwvcmVxdWlyZWQvcmVwZWF0ZWQKLQotICBib29s
IGlzX3JlcXVpcmVkKCkgY29uc3Q7ICAgICAgLy8gc2hvcnRoYW5kIGZvciBsYWJlbCgpID09IExB
QkVMX1JFUVVJUkVECi0gIGJvb2wgaXNfb3B0aW9uYWwoKSBjb25zdDsgICAgICAvLyBzaG9ydGhh
bmQgZm9yIGxhYmVsKCkgPT0gTEFCRUxfT1BUSU9OQUwKLSAgYm9vbCBpc19yZXBlYXRlZCgpIGNv
bnN0OyAgICAgIC8vIHNob3J0aGFuZCBmb3IgbGFiZWwoKSA9PSBMQUJFTF9SRVBFQVRFRAotICBi
b29sIGlzX3BhY2thYmxlKCkgY29uc3Q7ICAgICAgLy8gc2hvcnRoYW5kIGZvciBpc19yZXBlYXRl
ZCgpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAg
IElzVHlwZVBhY2thYmxlKHR5cGUoKSkKLSAgYm9vbCBpc19wYWNrZWQoKSBjb25zdDsgICAgICAg
IC8vIHNob3J0aGFuZCBmb3IgaXNfcGFja2FibGUoKSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBvcHRpb25zKCkucGFja2VkKCkKLSAgYm9vbCBp
c19tYXAoKSBjb25zdDsgICAgICAgICAgIC8vIHNob3J0aGFuZCBmb3IgdHlwZSgpID09IFRZUEVf
TUVTU0FHRSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVzc2FnZV90
eXBlKCktPm9wdGlvbnMoKS5tYXBfZW50cnkoKQotCi0gIC8vIEluZGV4IG9mIHRoaXMgZmllbGQg
d2l0aGluIHRoZSBtZXNzYWdlJ3MgZmllbGQgYXJyYXksIG9yIHRoZSBmaWxlIG9yCi0gIC8vIGV4
dGVuc2lvbiBzY29wZSdzIGV4dGVuc2lvbnMgYXJyYXkuCi0gIGludCBpbmRleCgpIGNvbnN0Owot
Ci0gIC8vIERvZXMgdGhpcyBmaWVsZCBoYXZlIGFuIGV4cGxpY2l0bHktZGVjbGFyZWQgZGVmYXVs
dCB2YWx1ZT8KLSAgYm9vbCBoYXNfZGVmYXVsdF92YWx1ZSgpIGNvbnN0OwotCi0gIC8vIEdldCB0
aGUgZmllbGQgZGVmYXVsdCB2YWx1ZSBpZiBjcHBfdHlwZSgpID09IENQUFRZUEVfSU5UMzIuICBJ
ZiBubwotICAvLyBleHBsaWNpdCBkZWZhdWx0IHdhcyBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyAw
LgotICBpbnQzMiBkZWZhdWx0X3ZhbHVlX2ludDMyKCkgY29uc3Q7Ci0gIC8vIEdldCB0aGUgZmll
bGQgZGVmYXVsdCB2YWx1ZSBpZiBjcHBfdHlwZSgpID09IENQUFRZUEVfSU5UNjQuICBJZiBubwot
ICAvLyBleHBsaWNpdCBkZWZhdWx0IHdhcyBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyAwLgotICBp
bnQ2NCBkZWZhdWx0X3ZhbHVlX2ludDY0KCkgY29uc3Q7Ci0gIC8vIEdldCB0aGUgZmllbGQgZGVm
YXVsdCB2YWx1ZSBpZiBjcHBfdHlwZSgpID09IENQUFRZUEVfVUlOVDMyLiAgSWYgbm8KLSAgLy8g
ZXhwbGljaXQgZGVmYXVsdCB3YXMgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgMC4KLSAgdWludDMy
IGRlZmF1bHRfdmFsdWVfdWludDMyKCkgY29uc3Q7Ci0gIC8vIEdldCB0aGUgZmllbGQgZGVmYXVs
dCB2YWx1ZSBpZiBjcHBfdHlwZSgpID09IENQUFRZUEVfVUlOVDY0LiAgSWYgbm8KLSAgLy8gZXhw
bGljaXQgZGVmYXVsdCB3YXMgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgMC4KLSAgdWludDY0IGRl
ZmF1bHRfdmFsdWVfdWludDY0KCkgY29uc3Q7Ci0gIC8vIEdldCB0aGUgZmllbGQgZGVmYXVsdCB2
YWx1ZSBpZiBjcHBfdHlwZSgpID09IENQUFRZUEVfRkxPQVQuICBJZiBubwotICAvLyBleHBsaWNp
dCBkZWZhdWx0IHdhcyBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyAwLjAuCi0gIGZsb2F0IGRlZmF1
bHRfdmFsdWVfZmxvYXQoKSBjb25zdDsKLSAgLy8gR2V0IHRoZSBmaWVsZCBkZWZhdWx0IHZhbHVl
IGlmIGNwcF90eXBlKCkgPT0gQ1BQVFlQRV9ET1VCTEUuICBJZiBubwotICAvLyBleHBsaWNpdCBk
ZWZhdWx0IHdhcyBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyAwLjAuCi0gIGRvdWJsZSBkZWZhdWx0
X3ZhbHVlX2RvdWJsZSgpIGNvbnN0OwotICAvLyBHZXQgdGhlIGZpZWxkIGRlZmF1bHQgdmFsdWUg
aWYgY3BwX3R5cGUoKSA9PSBDUFBUWVBFX0JPT0wuICBJZiBubwotICAvLyBleHBsaWNpdCBkZWZh
dWx0IHdhcyBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyBmYWxzZS4KLSAgYm9vbCBkZWZhdWx0X3Zh
bHVlX2Jvb2woKSBjb25zdDsKLSAgLy8gR2V0IHRoZSBmaWVsZCBkZWZhdWx0IHZhbHVlIGlmIGNw
cF90eXBlKCkgPT0gQ1BQVFlQRV9FTlVNLiAgSWYgbm8KLSAgLy8gZXhwbGljaXQgZGVmYXVsdCB3
YXMgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgdGhlIGZpcnN0IHZhbHVlIGRlZmluZWQKLSAgLy8g
aW4gdGhlIGVudW0gdHlwZSAoYWxsIGVudW0gdHlwZXMgYXJlIHJlcXVpcmVkIHRvIGhhdmUgYXQg
bGVhc3Qgb25lIHZhbHVlKS4KLSAgLy8gVGhpcyBuZXZlciByZXR1cm5zIE5VTEwuCi0gIGNvbnN0
IEVudW1WYWx1ZURlc2NyaXB0b3IqIGRlZmF1bHRfdmFsdWVfZW51bSgpIGNvbnN0OwotICAvLyBH
ZXQgdGhlIGZpZWxkIGRlZmF1bHQgdmFsdWUgaWYgY3BwX3R5cGUoKSA9PSBDUFBUWVBFX1NUUklO
Ry4gIElmIG5vCi0gIC8vIGV4cGxpY2l0IGRlZmF1bHQgd2FzIGRlZmluZWQsIHRoZSBkZWZhdWx0
IGlzIHRoZSBlbXB0eSBzdHJpbmcuCi0gIGNvbnN0IHN0cmluZyYgZGVmYXVsdF92YWx1ZV9zdHJp
bmcoKSBjb25zdDsKLQotICAvLyBUaGUgRGVzY3JpcHRvciBmb3IgdGhlIG1lc3NhZ2Ugb2Ygd2hp
Y2ggdGhpcyBpcyBhIGZpZWxkLiAgRm9yIGV4dGVuc2lvbnMsCi0gIC8vIHRoaXMgaXMgdGhlIGV4
dGVuZGVkIHR5cGUuICBOZXZlciBOVUxMLgotICBjb25zdCBEZXNjcmlwdG9yKiBjb250YWluaW5n
X3R5cGUoKSBjb25zdDsKLQotICAvLyBJZiB0aGUgZmllbGQgaXMgYSBtZW1iZXIgb2YgYSBvbmVv
ZiwgdGhpcyBpcyB0aGUgb25lLCBvdGhlcndpc2UgdGhpcyBpcwotICAvLyBOVUxMLgotICBjb25z
dCBPbmVvZkRlc2NyaXB0b3IqIGNvbnRhaW5pbmdfb25lb2YoKSBjb25zdDsKLQotICAvLyBJZiB0
aGUgZmllbGQgaXMgYSBtZW1iZXIgb2YgYSBvbmVvZiwgcmV0dXJucyB0aGUgaW5kZXggaW4gdGhh
dCBvbmVvZi4KLSAgaW50IGluZGV4X2luX29uZW9mKCkgY29uc3Q7Ci0KLSAgLy8gQW4gZXh0ZW5z
aW9uIG1heSBiZSBkZWNsYXJlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIGFub3RoZXIgbWVzc2FnZS4g
IElmIHRoaXMKLSAgLy8gZmllbGQgaXMgYW4gZXh0ZW5zaW9uIChpc19leHRlbnNpb24oKSBpcyB0
cnVlKSwgdGhlbiBleHRlbnNpb25fc2NvcGUoKQotICAvLyByZXR1cm5zIHRoYXQgbWVzc2FnZSwg
b3IgTlVMTCBpZiB0aGUgZXh0ZW5zaW9uIHdhcyBkZWNsYXJlZCBhdCBnbG9iYWwKLSAgLy8gc2Nv
cGUuICBJZiB0aGlzIGlzIG5vdCBhbiBleHRlbnNpb24sIGV4dGVuc2lvbl9zY29wZSgpIGlzIHVu
ZGVmaW5lZCAobWF5Ci0gIC8vIGFzc2VydC1mYWlsKS4KLSAgY29uc3QgRGVzY3JpcHRvciogZXh0
ZW5zaW9uX3Njb3BlKCkgY29uc3Q7Ci0KLSAgLy8gSWYgdHlwZSBpcyBUWVBFX01FU1NBR0Ugb3Ig
VFlQRV9HUk9VUCwgcmV0dXJucyBhIGRlc2NyaXB0b3IgZm9yIHRoZQotICAvLyBtZXNzYWdlIG9y
IHRoZSBncm91cCB0eXBlLiAgT3RoZXJ3aXNlLCByZXR1cm5zIG51bGwuCi0gIGNvbnN0IERlc2Ny
aXB0b3IqIG1lc3NhZ2VfdHlwZSgpIGNvbnN0OwotICAvLyBJZiB0eXBlIGlzIFRZUEVfRU5VTSwg
cmV0dXJucyBhIGRlc2NyaXB0b3IgZm9yIHRoZSBlbnVtLiAgT3RoZXJ3aXNlLAotICAvLyByZXR1
cm5zIG51bGwuCi0gIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBlbnVtX3R5cGUoKSBjb25zdDsKLQot
ICAvLyBHZXQgdGhlIEZpZWxkT3B0aW9ucyBmb3IgdGhpcyBmaWVsZC4gIFRoaXMgaW5jbHVkZXMg
dGhpbmdzIGxpc3RlZCBpbgotICAvLyBzcXVhcmUgYnJhY2tldHMgYWZ0ZXIgdGhlIGZpZWxkIGRl
ZmluaXRpb24uICBFLmcuLCB0aGUgZmllbGQ6Ci0gIC8vICAgb3B0aW9uYWwgc3RyaW5nIHRleHQg
PSAxIFtjdHlwZT1DT1JEXTsKLSAgLy8gaGFzIHRoZSAiY3R5cGUiIG9wdGlvbiBzZXQuICBBbGxv
d2VkIG9wdGlvbnMgYXJlIGRlZmluZWQgYnkgRmllbGRPcHRpb25zCi0gIC8vIGluIGdvb2dsZS9w
cm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvLCBhbmQgYW55IGF2YWlsYWJsZSBleHRlbnNpb25zIG9m
IHRoYXQKLSAgLy8gbWVzc2FnZS4KLSAgY29uc3QgRmllbGRPcHRpb25zJiBvcHRpb25zKCkgY29u
c3Q7Ci0KLSAgLy8gU2VlIERlc2NyaXB0b3I6OkNvcHlUbygpLgotICB2b2lkIENvcHlUbyhGaWVs
ZERlc2NyaXB0b3JQcm90byogcHJvdG8pIGNvbnN0OwotCi0gIC8vIFNlZSBEZXNjcmlwdG9yOjpE
ZWJ1Z1N0cmluZygpLgotICBzdHJpbmcgRGVidWdTdHJpbmcoKSBjb25zdDsKLQotICAvLyBTZWUg
RGVzY3JpcHRvcjo6RGVidWdTdHJpbmdXaXRoT3B0aW9ucygpLgotICBzdHJpbmcgRGVidWdTdHJp
bmdXaXRoT3B0aW9ucyhjb25zdCBEZWJ1Z1N0cmluZ09wdGlvbnMmIG9wdGlvbnMpIGNvbnN0Owot
Ci0gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHRoZSBDcHBUeXBlIGZvciBhIHBhcnRpY3VsYXIg
VHlwZS4KLSAgc3RhdGljIENwcFR5cGUgVHlwZVRvQ3BwVHlwZShUeXBlIHR5cGUpOwotCi0gIC8v
IEhlbHBlciBtZXRob2QgdG8gZ2V0IHRoZSBuYW1lIG9mIGEgVHlwZS4KLSAgc3RhdGljIGNvbnN0
IGNoYXIqIFR5cGVOYW1lKFR5cGUgdHlwZSk7Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQg
dGhlIG5hbWUgb2YgYSBDcHBUeXBlLgotICBzdGF0aWMgY29uc3QgY2hhciogQ3BwVHlwZU5hbWUo
Q3BwVHlwZSBjcHBfdHlwZSk7Ci0KLSAgLy8gUmV0dXJuIHRydWUgaWZmIFtwYWNrZWQgPSB0cnVl
XSBpcyB2YWxpZCBmb3IgZmllbGRzIG9mIHRoaXMgdHlwZS4KLSAgc3RhdGljIGlubGluZSBib29s
IElzVHlwZVBhY2thYmxlKFR5cGUgZmllbGRfdHlwZSk7Ci0KLSAgLy8gU291cmNlIExvY2F0aW9u
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IC8vIFVwZGF0ZXMgfCpvdXRfbG9jYXRpb258IHRvIHRoZSBzb3VyY2UgbG9jYXRpb24gb2YgdGhl
IGNvbXBsZXRlCi0gIC8vIGV4dGVudCBvZiB0aGlzIGZpZWxkIGRlY2xhcmF0aW9uLiAgUmV0dXJu
cyBmYWxzZSBhbmQgbGVhdmVzCi0gIC8vIHwqb3V0X2xvY2F0aW9ufCB1bmNoYW5nZWQgaWZmIGxv
Y2F0aW9uIGluZm9ybWF0aW9uIHdhcyBub3QgYXZhaWxhYmxlLgotICBib29sIEdldFNvdXJjZUxv
Y2F0aW9uKFNvdXJjZUxvY2F0aW9uKiBvdXRfbG9jYXRpb24pIGNvbnN0OwotCi0gcHJpdmF0ZToK
LSAgdHlwZWRlZiBGaWVsZE9wdGlvbnMgT3B0aW9uc1R5cGU7Ci0KLSAgLy8gQWxsb3dzIGFjY2Vz
cyB0byBHZXRMb2NhdGlvblBhdGggZm9yIGFubm90YXRpb25zLgotICBmcmllbmQgY2xhc3MgOjpn
b29nbGU6OnByb3RvYnVmOjppbzo6UHJpbnRlcjsKLQotICAvLyBGaWxsIHRoZSBqc29uX25hbWUg
ZmllbGQgb2YgRmllbGREZXNjcmlwdG9yUHJvdG8uCi0gIHZvaWQgQ29weUpzb25OYW1lVG8oRmll
bGREZXNjcmlwdG9yUHJvdG8qIHByb3RvKSBjb25zdDsKLQotICAvLyBTZWUgRGVzY3JpcHRvcjo6
RGVidWdTdHJpbmcoKS4KLSAgZW51bSBQcmludExhYmVsRmxhZyB7IFBSSU5UX0xBQkVMLCBPTUlU
X0xBQkVMIH07Ci0gIHZvaWQgRGVidWdTdHJpbmcoaW50IGRlcHRoLCBQcmludExhYmVsRmxhZyBw
cmludF9sYWJlbF9mbGFnLAotICAgICAgICAgICAgICAgICAgIHN0cmluZyogY29udGVudHMsIGNv
bnN0IERlYnVnU3RyaW5nT3B0aW9ucyYgb3B0aW9ucykgY29uc3Q7Ci0KLSAgLy8gZm9ybWF0cyB0
aGUgZGVmYXVsdCB2YWx1ZSBhcHByb3ByaWF0ZWx5IGFuZCByZXR1cm5zIGl0IGFzIGEgc3RyaW5n
LgotICAvLyBNdXN0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIHRvIGNhbGwgdGhpcy4gSWYgcXVvdGVf
c3RyaW5nX3R5cGUgaXMgdHJ1ZSwgdGhlbgotICAvLyB0eXBlcyBvZiBDUFBUWVBFX1NUUklORyB3
aGlsbCBiZSBzdXJyb3VuZGVkIGJ5IHF1b3RlcyBhbmQgQ0VzY2FwZWQuCi0gIHN0cmluZyBEZWZh
dWx0VmFsdWVBc1N0cmluZyhib29sIHF1b3RlX3N0cmluZ190eXBlKSBjb25zdDsKLQotICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBmaWVsZCB0eXBlIG5hbWUgZm9yIERlYnVn
U3RyaW5nLgotICBzdHJpbmcgRmllbGRUeXBlTmFtZURlYnVnU3RyaW5nKCkgY29uc3Q7Ci0KLSAg
Ly8gV2Fsa3MgdXAgdGhlIGRlc2NyaXB0b3IgdHJlZSB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGxv
Y2F0aW9uIHBhdGgKLSAgLy8gdG8gdGhpcyBkZXNjcmlwdG9yIGZyb20gdGhlIGZpbGUgcm9vdC4K
LSAgdm9pZCBHZXRMb2NhdGlvblBhdGgoc3RkOjp2ZWN0b3I8aW50Piogb3V0cHV0KSBjb25zdDsK
LQotICBjb25zdCBzdHJpbmcqIG5hbWVfOwotICBjb25zdCBzdHJpbmcqIGZ1bGxfbmFtZV87Ci0g
IGNvbnN0IHN0cmluZyogbG93ZXJjYXNlX25hbWVfOwotICBjb25zdCBzdHJpbmcqIGNhbWVsY2Fz
ZV9uYW1lXzsKLSAgLy8gV2hldGhlciB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBqc29uX25h
bWUgZmllbGQgb3B0aW9uIGluIHRoZSAucHJvdG8KLSAgLy8gZmlsZS4KLSAgYm9vbCBoYXNfanNv
bl9uYW1lXzsKLSAgLy8gSWYgaGFzX2pzb25fbmFtZV8gaXMgdHJ1ZSwgaXQncyB0aGUgdmFsdWUg
c3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgotICAvLyBPdGhlcndpc2UsIGl0IGhhcyB0aGUgc2FtZSB2
YWx1ZSBhcyBsb3dlcmNhc2VfbmFtZV8uCi0gIGNvbnN0IHN0cmluZyoganNvbl9uYW1lXzsKLSAg
Y29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGVfOwotICBpbnQgbnVtYmVyXzsKLSAgVHlwZSB0eXBl
XzsKLSAgTGFiZWwgbGFiZWxfOwotICBib29sIGlzX2V4dGVuc2lvbl87Ci0gIGludCBpbmRleF9p
bl9vbmVvZl87Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGNvbnRhaW5pbmdfdHlwZV87Ci0gIGNvbnN0
IE9uZW9mRGVzY3JpcHRvciogY29udGFpbmluZ19vbmVvZl87Ci0gIGNvbnN0IERlc2NyaXB0b3Iq
IGV4dGVuc2lvbl9zY29wZV87Ci0gIGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2VfdHlwZV87Ci0g
IGNvbnN0IEVudW1EZXNjcmlwdG9yKiBlbnVtX3R5cGVfOwotICBjb25zdCBGaWVsZE9wdGlvbnMq
IG9wdGlvbnNfOwotICAvLyBJTVBPUlRBTlQ6ICBJZiB5b3UgYWRkIGEgbmV3IGZpZWxkLCBtYWtl
IHN1cmUgdG8gc2VhcmNoIGZvciBhbGwgaW5zdGFuY2VzCi0gIC8vIG9mIEFsbG9jYXRlPEZpZWxk
RGVzY3JpcHRvcj4oKSBhbmQgQWxsb2NhdGVBcnJheTxGaWVsZERlc2NyaXB0b3I+KCkgaW4KLSAg
Ly8gZGVzY3JpcHRvci5jYyBhbmQgdXBkYXRlIHRoZW0gdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQu
Ci0KLSAgYm9vbCBoYXNfZGVmYXVsdF92YWx1ZV87Ci0gIHVuaW9uIHsKLSAgICBpbnQzMiAgZGVm
YXVsdF92YWx1ZV9pbnQzMl87Ci0gICAgaW50NjQgIGRlZmF1bHRfdmFsdWVfaW50NjRfOwotICAg
IHVpbnQzMiBkZWZhdWx0X3ZhbHVlX3VpbnQzMl87Ci0gICAgdWludDY0IGRlZmF1bHRfdmFsdWVf
dWludDY0XzsKLSAgICBmbG9hdCAgZGVmYXVsdF92YWx1ZV9mbG9hdF87Ci0gICAgZG91YmxlIGRl
ZmF1bHRfdmFsdWVfZG91YmxlXzsKLSAgICBib29sICAgZGVmYXVsdF92YWx1ZV9ib29sXzsKLQot
ICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGRlZmF1bHRfdmFsdWVfZW51bV87Ci0gICAg
Y29uc3Qgc3RyaW5nKiBkZWZhdWx0X3ZhbHVlX3N0cmluZ187Ci0gIH07Ci0KLSAgc3RhdGljIGNv
bnN0IENwcFR5cGUga1R5cGVUb0NwcFR5cGVNYXBbTUFYX1RZUEUgKyAxXTsKLQotICBzdGF0aWMg
Y29uc3QgY2hhciAqIGNvbnN0IGtUeXBlVG9OYW1lW01BWF9UWVBFICsgMV07Ci0KLSAgc3RhdGlj
IGNvbnN0IGNoYXIgKiBjb25zdCBrQ3BwVHlwZVRvTmFtZVtNQVhfQ1BQVFlQRSArIDFdOwotCi0g
IHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qga0xhYmVsVG9OYW1lW01BWF9MQUJFTCArIDFdOwot
Ci0gIC8vIE11c3QgYmUgY29uc3RydWN0ZWQgdXNpbmcgRGVzY3JpcHRvclBvb2wuCi0gIEZpZWxk
RGVzY3JpcHRvcigpIHt9Ci0gIGZyaWVuZCBjbGFzcyBEZXNjcmlwdG9yQnVpbGRlcjsKLSAgZnJp
ZW5kIGNsYXNzIEZpbGVEZXNjcmlwdG9yOwotICBmcmllbmQgY2xhc3MgRGVzY3JpcHRvcjsKLSAg
ZnJpZW5kIGNsYXNzIE9uZW9mRGVzY3JpcHRvcjsKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09O
U1RSVUNUT1JTKEZpZWxkRGVzY3JpcHRvcik7Ci19OwotCi0vLyBEZXNjcmliZXMgYSBvbmVvZiBk
ZWZpbmVkIGluIGEgbWVzc2FnZSB0eXBlLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE9uZW9m
RGVzY3JpcHRvciB7Ci0gcHVibGljOgotICBjb25zdCBzdHJpbmcmIG5hbWUoKSBjb25zdDsgICAg
ICAgLy8gTmFtZSBvZiB0aGlzIG9uZW9mLgotICBjb25zdCBzdHJpbmcmIGZ1bGxfbmFtZSgpIGNv
bnN0OyAgLy8gRnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG9uZW9mLgotCi0gIC8vIEluZGV4
IG9mIHRoaXMgb25lb2Ygd2l0aGluIHRoZSBtZXNzYWdlJ3Mgb25lb2YgYXJyYXkuCi0gIGludCBp
bmRleCgpIGNvbnN0OwotCi0gIC8vIFRoZSBEZXNjcmlwdG9yIGZvciB0aGUgbWVzc2FnZSBjb250
YWluaW5nIHRoaXMgb25lb2YuCi0gIGNvbnN0IERlc2NyaXB0b3IqIGNvbnRhaW5pbmdfdHlwZSgp
IGNvbnN0OwotCi0gIC8vIFRoZSBudW1iZXIgb2YgKG5vbi1leHRlbnNpb24pIGZpZWxkcyB3aGlj
aCBhcmUgbWVtYmVycyBvZiB0aGlzIG9uZW9mLgotICBpbnQgZmllbGRfY291bnQoKSBjb25zdDsK
LSAgLy8gR2V0IGEgbWVtYmVyIG9mIHRoaXMgb25lb2YsIGluIHRoZSBvcmRlciBpbiB3aGljaCB0
aGV5IHdlcmUgZGVjbGFyZWQgaW4gdGhlCi0gIC8vIC5wcm90byBmaWxlLiAgRG9lcyBub3QgaW5j
bHVkZSBleHRlbnNpb25zLgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKGludCBpbmRl
eCkgY29uc3Q7Ci0KLSAgLy8gU2VlIERlc2NyaXB0b3I6OkNvcHlUbygpLgotICB2b2lkIENvcHlU
byhPbmVvZkRlc2NyaXB0b3JQcm90byogcHJvdG8pIGNvbnN0OwotCi0gIC8vIFNlZSBEZXNjcmlw
dG9yOjpEZWJ1Z1N0cmluZygpLgotICBzdHJpbmcgRGVidWdTdHJpbmcoKSBjb25zdDsKLQotICAv
LyBTZWUgRGVzY3JpcHRvcjo6RGVidWdTdHJpbmdXaXRoT3B0aW9ucygpLgotICBzdHJpbmcgRGVi
dWdTdHJpbmdXaXRoT3B0aW9ucyhjb25zdCBEZWJ1Z1N0cmluZ09wdGlvbnMmIG9wdGlvbnMpIGNv
bnN0OwotCi0gIC8vIFNvdXJjZSBMb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBVcGRhdGVzIHwqb3V0X2xvY2F0aW9ufCB0
byB0aGUgc291cmNlIGxvY2F0aW9uIG9mIHRoZSBjb21wbGV0ZQotICAvLyBleHRlbnQgb2YgdGhp
cyBvbmVvZiBkZWNsYXJhdGlvbi4gIFJldHVybnMgZmFsc2UgYW5kIGxlYXZlcwotICAvLyB8Km91
dF9sb2NhdGlvbnwgdW5jaGFuZ2VkIGlmZiBsb2NhdGlvbiBpbmZvcm1hdGlvbiB3YXMgbm90IGF2
YWlsYWJsZS4KLSAgYm9vbCBHZXRTb3VyY2VMb2NhdGlvbihTb3VyY2VMb2NhdGlvbiogb3V0X2xv
Y2F0aW9uKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIC8vIEFsbG93cyBhY2Nlc3MgdG8gR2V0TG9j
YXRpb25QYXRoIGZvciBhbm5vdGF0aW9ucy4KLSAgZnJpZW5kIGNsYXNzIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW86OlByaW50ZXI7Ci0KLSAgLy8gU2VlIERlc2NyaXB0b3I6OkRlYnVnU3RyaW5nKCku
Ci0gIHZvaWQgRGVidWdTdHJpbmcoaW50IGRlcHRoLCBzdHJpbmcqIGNvbnRlbnRzLAotICAgICAg
ICAgICAgICAgICAgIGNvbnN0IERlYnVnU3RyaW5nT3B0aW9ucyYgb3B0aW9ucykgY29uc3Q7Ci0K
LSAgLy8gV2Fsa3MgdXAgdGhlIGRlc2NyaXB0b3IgdHJlZSB0byBnZW5lcmF0ZSB0aGUgc291cmNl
IGxvY2F0aW9uIHBhdGgKLSAgLy8gdG8gdGhpcyBkZXNjcmlwdG9yIGZyb20gdGhlIGZpbGUgcm9v
dC4KLSAgdm9pZCBHZXRMb2NhdGlvblBhdGgoc3RkOjp2ZWN0b3I8aW50Piogb3V0cHV0KSBjb25z
dDsKLQotICBjb25zdCBzdHJpbmcqIG5hbWVfOwotICBjb25zdCBzdHJpbmcqIGZ1bGxfbmFtZV87
Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGNvbnRhaW5pbmdfdHlwZV87Ci0gIGJvb2wgaXNfZXh0ZW5k
YWJsZV87Ci0gIGludCBmaWVsZF9jb3VudF87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioqIGZp
ZWxkc187Ci0gIC8vIElNUE9SVEFOVDogIElmIHlvdSBhZGQgYSBuZXcgZmllbGQsIG1ha2Ugc3Vy
ZSB0byBzZWFyY2ggZm9yIGFsbCBpbnN0YW5jZXMKLSAgLy8gb2YgQWxsb2NhdGU8T25lb2ZEZXNj
cmlwdG9yPigpIGFuZCBBbGxvY2F0ZUFycmF5PE9uZW9mRGVzY3JpcHRvcj4oKQotICAvLyBpbiBk
ZXNjcmlwdG9yLmNjIGFuZCB1cGRhdGUgdGhlbSB0byBpbml0aWFsaXplIHRoZSBmaWVsZC4KLQot
ICAvLyBNdXN0IGJlIGNvbnN0cnVjdGVkIHVzaW5nIERlc2NyaXB0b3JQb29sLgotICBPbmVvZkRl
c2NyaXB0b3IoKSB7fQotICBmcmllbmQgY2xhc3MgRGVzY3JpcHRvckJ1aWxkZXI7Ci0gIGZyaWVu
ZCBjbGFzcyBEZXNjcmlwdG9yOwotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMo
T25lb2ZEZXNjcmlwdG9yKTsKLX07Ci0KLS8vIERlc2NyaWJlcyBhbiBlbnVtIHR5cGUgZGVmaW5l
ZCBpbiBhIC5wcm90byBmaWxlLiAgVG8gZ2V0IHRoZSBFbnVtRGVzY3JpcHRvcgotLy8gZm9yIGEg
Z2VuZXJhdGVkIGVudW0gdHlwZSwgY2FsbCBUeXBlTmFtZV9kZXNjcmlwdG9yKCkuICBVc2UgRGVz
Y3JpcHRvclBvb2wKLS8vIHRvIGNvbnN0cnVjdCB5b3VyIG93biBkZXNjcmlwdG9ycy4KLWNsYXNz
IExJQlBST1RPQlVGX0VYUE9SVCBFbnVtRGVzY3JpcHRvciB7Ci0gcHVibGljOgotICAvLyBUaGUg
bmFtZSBvZiB0aGlzIGVudW0gdHlwZSBpbiB0aGUgY29udGFpbmluZyBzY29wZS4KLSAgY29uc3Qg
c3RyaW5nJiBuYW1lKCkgY29uc3Q7Ci0KLSAgLy8gVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9m
IHRoZSBlbnVtIHR5cGUsIHNjb3BlIGRlbGltaXRlZCBieSBwZXJpb2RzLgotICBjb25zdCBzdHJp
bmcmIGZ1bGxfbmFtZSgpIGNvbnN0OwotCi0gIC8vIEluZGV4IG9mIHRoaXMgZW51bSB3aXRoaW4g
dGhlIGZpbGUgb3IgY29udGFpbmluZyBtZXNzYWdlJ3MgZW51bSBhcnJheS4KLSAgaW50IGluZGV4
KCkgY29uc3Q7Ci0KLSAgLy8gVGhlIC5wcm90byBmaWxlIGluIHdoaWNoIHRoaXMgZW51bSB0eXBl
IHdhcyBkZWZpbmVkLiAgTmV2ZXIgTlVMTC4KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUo
KSBjb25zdDsKLQotICAvLyBUaGUgbnVtYmVyIG9mIHZhbHVlcyBmb3IgdGhpcyBFbnVtRGVzY3Jp
cHRvci4gIEd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlcgotICAvLyB0aGFuIHplcm8uCi0gIGludCB2
YWx1ZV9jb3VudCgpIGNvbnN0OwotICAvLyBHZXRzIGEgdmFsdWUgYnkgaW5kZXgsIHdoZXJlIDAg
PD0gaW5kZXggPCB2YWx1ZV9jb3VudCgpLgotICAvLyBUaGVzZSBhcmUgcmV0dXJuZWQgaW4gdGhl
IG9yZGVyIHRoZXkgd2VyZSBkZWZpbmVkIGluIHRoZSAucHJvdG8gZmlsZS4KLSAgY29uc3QgRW51
bVZhbHVlRGVzY3JpcHRvciogdmFsdWUoaW50IGluZGV4KSBjb25zdDsKLQotICAvLyBMb29rcyB1
cCBhIHZhbHVlIGJ5IG5hbWUuICBSZXR1cm5zIE5VTEwgaWYgbm8gc3VjaCB2YWx1ZSBleGlzdHMu
Ci0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIEZpbmRWYWx1ZUJ5TmFtZShjb25zdCBzdHJp
bmcmIG5hbWUpIGNvbnN0OwotICAvLyBMb29rcyB1cCBhIHZhbHVlIGJ5IG51bWJlci4gIFJldHVy
bnMgTlVMTCBpZiBubyBzdWNoIHZhbHVlIGV4aXN0cy4gIElmCi0gIC8vIG11bHRpcGxlIHZhbHVl
cyBoYXZlIHRoaXMgbnVtYmVyLCB0aGUgZmlyc3Qgb25lIGRlZmluZWQgaXMgcmV0dXJuZWQuCi0g
IGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIEZpbmRWYWx1ZUJ5TnVtYmVyKGludCBudW1iZXIp
IGNvbnN0OwotCi0gIC8vIElmIHRoaXMgZW51bSB0eXBlIGlzIG5lc3RlZCBpbiBhIG1lc3NhZ2Ug
dHlwZSwgdGhpcyBpcyB0aGF0IG1lc3NhZ2UgdHlwZS4KLSAgLy8gT3RoZXJ3aXNlLCBOVUxMLgot
ICBjb25zdCBEZXNjcmlwdG9yKiBjb250YWluaW5nX3R5cGUoKSBjb25zdDsKLQotICAvLyBHZXQg
b3B0aW9ucyBmb3IgdGhpcyBlbnVtIHR5cGUuICBUaGVzZSBhcmUgc3BlY2lmaWVkIGluIHRoZSAu
cHJvdG8gZmlsZSBieQotICAvLyBwbGFjaW5nIGxpbmVzIGxpa2UgIm9wdGlvbiBmb28gPSAxMjM0
OyIgaW4gdGhlIGVudW0gZGVmaW5pdGlvbi4gIEFsbG93ZWQKLSAgLy8gb3B0aW9ucyBhcmUgZGVm
aW5lZCBieSBFbnVtT3B0aW9ucyBpbiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bywK
LSAgLy8gYW5kIGFueSBhdmFpbGFibGUgZXh0ZW5zaW9ucyBvZiB0aGF0IG1lc3NhZ2UuCi0gIGNv
bnN0IEVudW1PcHRpb25zJiBvcHRpb25zKCkgY29uc3Q7Ci0KLSAgLy8gU2VlIERlc2NyaXB0b3I6
OkNvcHlUbygpLgotICB2b2lkIENvcHlUbyhFbnVtRGVzY3JpcHRvclByb3RvKiBwcm90bykgY29u
c3Q7Ci0KLSAgLy8gU2VlIERlc2NyaXB0b3I6OkRlYnVnU3RyaW5nKCkuCi0gIHN0cmluZyBEZWJ1
Z1N0cmluZygpIGNvbnN0OwotCi0gIC8vIFNlZSBEZXNjcmlwdG9yOjpEZWJ1Z1N0cmluZ1dpdGhP
cHRpb25zKCkuCi0gIHN0cmluZyBEZWJ1Z1N0cmluZ1dpdGhPcHRpb25zKGNvbnN0IERlYnVnU3Ry
aW5nT3B0aW9ucyYgb3B0aW9ucykgY29uc3Q7Ci0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhp
cyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhbiB1bmtub3duIGVudW0uIFRoaXMgd2lsbAotICAvLyBv
bmx5IGJlIHRoZSBjYXNlIGlmIHRoaXMgZGVzY3JpcHRvciBjb21lcyBmcm9tIGEgRGVzY3JpcHRv
clBvb2wKLSAgLy8gd2l0aCBBbGxvd1Vua25vd25EZXBlbmRlbmNpZXMoKSBzZXQuCi0gIGJvb2wg
aXNfcGxhY2Vob2xkZXIoKSBjb25zdDsKLQotICAvLyBTb3VyY2UgTG9jYXRpb24gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gVXBkYXRl
cyB8Km91dF9sb2NhdGlvbnwgdG8gdGhlIHNvdXJjZSBsb2NhdGlvbiBvZiB0aGUgY29tcGxldGUK
LSAgLy8gZXh0ZW50IG9mIHRoaXMgZW51bSBkZWNsYXJhdGlvbi4gIFJldHVybnMgZmFsc2UgYW5k
IGxlYXZlcwotICAvLyB8Km91dF9sb2NhdGlvbnwgdW5jaGFuZ2VkIGlmZiBsb2NhdGlvbiBpbmZv
cm1hdGlvbiB3YXMgbm90IGF2YWlsYWJsZS4KLSAgYm9vbCBHZXRTb3VyY2VMb2NhdGlvbihTb3Vy
Y2VMb2NhdGlvbiogb3V0X2xvY2F0aW9uKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIHR5cGVkZWYg
RW51bU9wdGlvbnMgT3B0aW9uc1R5cGU7Ci0KLSAgLy8gQWxsb3dzIGFjY2VzcyB0byBHZXRMb2Nh
dGlvblBhdGggZm9yIGFubm90YXRpb25zLgotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3Rv
YnVmOjppbzo6UHJpbnRlcjsKLQotICAvLyBMb29rcyB1cCBhIHZhbHVlIGJ5IG51bWJlci4gIElm
IHRoZSB2YWx1ZSBkb2VzIG5vdCBleGlzdCwgZHluYW1pY2FsbHkKLSAgLy8gY3JlYXRlcyBhIG5l
dyBFbnVtVmFsdWVEZXNjcmlwdG9yIGZvciB0aGF0IHZhbHVlLCBhc3N1bWluZyB0aGF0IGl0IHdh
cwotICAvLyB1bmtub3duLiBJZiBhIG5ldyBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQsIHRoaXMgaXMg
ZG9uZSBpbiBhIHRocmVhZC1zYWZlIHdheSwKLSAgLy8gYW5kIGZ1dHVyZSBjYWxscyB3aWxsIHJl
dHVybiB0aGUgc2FtZSB2YWx1ZSBkZXNjcmlwdG9yIHBvaW50ZXIuCi0gIC8vCi0gIC8vIFRoaXMg
aXMgcHJpdmF0ZSBidXQgaXMgdXNlZCBieSBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbiAod2hp
Y2ggaXMKLSAgLy8gZnJpZW5kZWQgYmVsb3cpIHRvIHJldHVybiBhIHZhbGlkIEVudW1WYWx1ZURl
c2NyaXB0b3IgZnJvbSBHZXRFbnVtKCkgd2hlbgotICAvLyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxl
ZC4KLSAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvcioKLSAgICAgIEZpbmRWYWx1ZUJ5TnVtYmVy
Q3JlYXRpbmdJZlVua25vd24oaW50IG51bWJlcikgY29uc3Q7Ci0KLQotICAvLyBTZWUgRGVzY3Jp
cHRvcjo6RGVidWdTdHJpbmcoKS4KLSAgdm9pZCBEZWJ1Z1N0cmluZyhpbnQgZGVwdGgsIHN0cmlu
ZyAqY29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgRGVidWdTdHJpbmdPcHRpb25z
JiBvcHRpb25zKSBjb25zdDsKLQotICAvLyBXYWxrcyB1cCB0aGUgZGVzY3JpcHRvciB0cmVlIHRv
IGdlbmVyYXRlIHRoZSBzb3VyY2UgbG9jYXRpb24gcGF0aAotICAvLyB0byB0aGlzIGRlc2NyaXB0
b3IgZnJvbSB0aGUgZmlsZSByb290LgotICB2b2lkIEdldExvY2F0aW9uUGF0aChzdGQ6OnZlY3Rv
cjxpbnQ+KiBvdXRwdXQpIGNvbnN0OwotCi0gIGNvbnN0IHN0cmluZyogbmFtZV87Ci0gIGNvbnN0
IHN0cmluZyogZnVsbF9uYW1lXzsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGVfOwotICBj
b25zdCBEZXNjcmlwdG9yKiBjb250YWluaW5nX3R5cGVfOwotICBjb25zdCBFbnVtT3B0aW9ucyog
b3B0aW9uc187Ci0KLSAgLy8gVHJ1ZSBpZiB0aGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGFuIHVu
a25vd24gdHlwZS4KLSAgYm9vbCBpc19wbGFjZWhvbGRlcl87Ci0gIC8vIFRydWUgaWYgdGhpcyBp
cyBhIHBsYWNlaG9sZGVyIGFuZCB0aGUgdHlwZSBuYW1lIHdhc24ndCBmdWxseS1xdWFsaWZpZWQu
Ci0gIGJvb2wgaXNfdW5xdWFsaWZpZWRfcGxhY2Vob2xkZXJfOwotCi0gIGludCB2YWx1ZV9jb3Vu
dF87Ci0gIEVudW1WYWx1ZURlc2NyaXB0b3IqIHZhbHVlc187Ci0gIC8vIElNUE9SVEFOVDogIElm
IHlvdSBhZGQgYSBuZXcgZmllbGQsIG1ha2Ugc3VyZSB0byBzZWFyY2ggZm9yIGFsbCBpbnN0YW5j
ZXMKLSAgLy8gb2YgQWxsb2NhdGU8RW51bURlc2NyaXB0b3I+KCkgYW5kIEFsbG9jYXRlQXJyYXk8
RW51bURlc2NyaXB0b3I+KCkgaW4KLSAgLy8gZGVzY3JpcHRvci5jYyBhbmQgdXBkYXRlIHRoZW0g
dG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQuCi0KLSAgLy8gTXVzdCBiZSBjb25zdHJ1Y3RlZCB1c2lu
ZyBEZXNjcmlwdG9yUG9vbC4KLSAgRW51bURlc2NyaXB0b3IoKSB7fQotICBmcmllbmQgY2xhc3Mg
RGVzY3JpcHRvckJ1aWxkZXI7Ci0gIGZyaWVuZCBjbGFzcyBEZXNjcmlwdG9yOwotICBmcmllbmQg
Y2xhc3MgRmllbGREZXNjcmlwdG9yOwotICBmcmllbmQgY2xhc3MgRW51bVZhbHVlRGVzY3JpcHRv
cjsKLSAgZnJpZW5kIGNsYXNzIEZpbGVEZXNjcmlwdG9yOwotICBmcmllbmQgY2xhc3MgaW50ZXJu
YWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOwotICBHT09HTEVfRElTQUxMT1dfRVZJTF9D
T05TVFJVQ1RPUlMoRW51bURlc2NyaXB0b3IpOwotfTsKLQotLy8gRGVzY3JpYmVzIGFuIGluZGl2
aWR1YWwgZW51bSBjb25zdGFudCBvZiBhIHBhcnRpY3VsYXIgdHlwZS4gIFRvIGdldCB0aGUKLS8v
IEVudW1WYWx1ZURlc2NyaXB0b3IgZm9yIGEgZ2l2ZW4gZW51bSB2YWx1ZSwgZmlyc3QgZ2V0IHRo
ZSBFbnVtRGVzY3JpcHRvcgotLy8gZm9yIGl0cyB0eXBlLCB0aGVuIHVzZSBFbnVtRGVzY3JpcHRv
cjo6RmluZFZhbHVlQnlOYW1lKCkgb3IKLS8vIEVudW1EZXNjcmlwdG9yOjpGaW5kVmFsdWVCeU51
bWJlcigpLiAgVXNlIERlc2NyaXB0b3JQb29sIHRvIGNvbnN0cnVjdAotLy8geW91ciBvd24gZGVz
Y3JpcHRvcnMuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgRW51bVZhbHVlRGVzY3JpcHRvciB7
Ci0gcHVibGljOgotICBjb25zdCBzdHJpbmcmIG5hbWUoKSBjb25zdDsgIC8vIE5hbWUgb2YgdGhp
cyBlbnVtIGNvbnN0YW50LgotICBpbnQgaW5kZXgoKSBjb25zdDsgICAgICAgICAgIC8vIEluZGV4
IHdpdGhpbiB0aGUgZW51bXMncyBEZXNjcmlwdG9yLgotICBpbnQgbnVtYmVyKCkgY29uc3Q7ICAg
ICAgICAgIC8vIE51bWVyaWMgdmFsdWUgb2YgdGhpcyBlbnVtIGNvbnN0YW50LgotCi0gIC8vIFRo
ZSBmdWxsX25hbWUgb2YgYW4gZW51bSB2YWx1ZSBpcyBhIHNpYmxpbmcgc3ltYm9sIG9mIHRoZSBl
bnVtIHR5cGUuCi0gIC8vIGUuZy4gdGhlIGZ1bGwgbmFtZSBvZiBGaWVsZERlc2NyaXB0b3JQcm90
bzo6VFlQRV9JTlQzMiBpcyBhY3R1YWxseQotICAvLyAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVz
Y3JpcHRvclByb3RvLlRZUEVfSU5UMzIiLCBOT1QKLSAgLy8gImdvb2dsZS5wcm90b2J1Zi5GaWVs
ZERlc2NyaXB0b3JQcm90by5UeXBlLlRZUEVfSU5UMzIiLiAgVGhpcyBpcyB0byBjb25mb3JtCi0g
IC8vIHdpdGggQysrIHNjb3BpbmcgcnVsZXMgZm9yIGVudW1zLgotICBjb25zdCBzdHJpbmcmIGZ1
bGxfbmFtZSgpIGNvbnN0OwotCi0gIC8vIFRoZSB0eXBlIG9mIHRoaXMgdmFsdWUuICBOZXZlciBO
VUxMLgotICBjb25zdCBFbnVtRGVzY3JpcHRvciogdHlwZSgpIGNvbnN0OwotCi0gIC8vIEdldCBv
cHRpb25zIGZvciB0aGlzIGVudW0gdmFsdWUuICBUaGVzZSBhcmUgc3BlY2lmaWVkIGluIHRoZSAu
cHJvdG8gZmlsZQotICAvLyBieSBhZGRpbmcgdGV4dCBsaWtlICJbZm9vID0gMTIzNF0iIGFmdGVy
IGFuIGVudW0gdmFsdWUgZGVmaW5pdGlvbi4KLSAgLy8gQWxsb3dlZCBvcHRpb25zIGFyZSBkZWZp
bmVkIGJ5IEVudW1WYWx1ZU9wdGlvbnMgaW4KLSAgLy8gZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0
b3IucHJvdG8sIGFuZCBhbnkgYXZhaWxhYmxlIGV4dGVuc2lvbnMgb2YgdGhhdAotICAvLyBtZXNz
YWdlLgotICBjb25zdCBFbnVtVmFsdWVPcHRpb25zJiBvcHRpb25zKCkgY29uc3Q7Ci0KLSAgLy8g
U2VlIERlc2NyaXB0b3I6OkNvcHlUbygpLgotICB2b2lkIENvcHlUbyhFbnVtVmFsdWVEZXNjcmlw
dG9yUHJvdG8qIHByb3RvKSBjb25zdDsKLQotICAvLyBTZWUgRGVzY3JpcHRvcjo6RGVidWdTdHJp
bmcoKS4KLSAgc3RyaW5nIERlYnVnU3RyaW5nKCkgY29uc3Q7Ci0KLSAgLy8gU2VlIERlc2NyaXB0
b3I6OkRlYnVnU3RyaW5nV2l0aE9wdGlvbnMoKS4KLSAgc3RyaW5nIERlYnVnU3RyaW5nV2l0aE9w
dGlvbnMoY29uc3QgRGVidWdTdHJpbmdPcHRpb25zJiBvcHRpb25zKSBjb25zdDsKLQotCi0gIC8v
IFNvdXJjZSBMb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAvLyBVcGRhdGVzIHwqb3V0X2xvY2F0aW9ufCB0byB0aGUgc291cmNl
IGxvY2F0aW9uIG9mIHRoZSBjb21wbGV0ZQotICAvLyBleHRlbnQgb2YgdGhpcyBlbnVtIHZhbHVl
IGRlY2xhcmF0aW9uLiAgUmV0dXJucyBmYWxzZSBhbmQgbGVhdmVzCi0gIC8vIHwqb3V0X2xvY2F0
aW9ufCB1bmNoYW5nZWQgaWZmIGxvY2F0aW9uIGluZm9ybWF0aW9uIHdhcyBub3QgYXZhaWxhYmxl
LgotICBib29sIEdldFNvdXJjZUxvY2F0aW9uKFNvdXJjZUxvY2F0aW9uKiBvdXRfbG9jYXRpb24p
IGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgdHlwZWRlZiBFbnVtVmFsdWVPcHRpb25zIE9wdGlvbnNU
eXBlOwotCi0gIC8vIEFsbG93cyBhY2Nlc3MgdG8gR2V0TG9jYXRpb25QYXRoIGZvciBhbm5vdGF0
aW9ucy4KLSAgZnJpZW5kIGNsYXNzIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OlByaW50ZXI7Ci0K
LSAgLy8gU2VlIERlc2NyaXB0b3I6OkRlYnVnU3RyaW5nKCkuCi0gIHZvaWQgRGVidWdTdHJpbmco
aW50IGRlcHRoLCBzdHJpbmcgKmNvbnRlbnRzLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IERl
YnVnU3RyaW5nT3B0aW9ucyYgb3B0aW9ucykgY29uc3Q7Ci0KLSAgLy8gV2Fsa3MgdXAgdGhlIGRl
c2NyaXB0b3IgdHJlZSB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGxvY2F0aW9uIHBhdGgKLSAgLy8g
dG8gdGhpcyBkZXNjcmlwdG9yIGZyb20gdGhlIGZpbGUgcm9vdC4KLSAgdm9pZCBHZXRMb2NhdGlv
blBhdGgoc3RkOjp2ZWN0b3I8aW50Piogb3V0cHV0KSBjb25zdDsKLQotICBjb25zdCBzdHJpbmcq
IG5hbWVfOwotICBjb25zdCBzdHJpbmcqIGZ1bGxfbmFtZV87Ci0gIGludCBudW1iZXJfOwotICBj
b25zdCBFbnVtRGVzY3JpcHRvciogdHlwZV87Ci0gIGNvbnN0IEVudW1WYWx1ZU9wdGlvbnMqIG9w
dGlvbnNfOwotICAvLyBJTVBPUlRBTlQ6ICBJZiB5b3UgYWRkIGEgbmV3IGZpZWxkLCBtYWtlIHN1
cmUgdG8gc2VhcmNoIGZvciBhbGwgaW5zdGFuY2VzCi0gIC8vIG9mIEFsbG9jYXRlPEVudW1WYWx1
ZURlc2NyaXB0b3I+KCkgYW5kIEFsbG9jYXRlQXJyYXk8RW51bVZhbHVlRGVzY3JpcHRvcj4oKQot
ICAvLyBpbiBkZXNjcmlwdG9yLmNjIGFuZCB1cGRhdGUgdGhlbSB0byBpbml0aWFsaXplIHRoZSBm
aWVsZC4KLQotICAvLyBNdXN0IGJlIGNvbnN0cnVjdGVkIHVzaW5nIERlc2NyaXB0b3JQb29sLgot
ICBFbnVtVmFsdWVEZXNjcmlwdG9yKCkge30KLSAgZnJpZW5kIGNsYXNzIERlc2NyaXB0b3JCdWls
ZGVyOwotICBmcmllbmQgY2xhc3MgRW51bURlc2NyaXB0b3I7Ci0gIGZyaWVuZCBjbGFzcyBGaWxl
RGVzY3JpcHRvclRhYmxlczsKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEVu
dW1WYWx1ZURlc2NyaXB0b3IpOwotfTsKLQotLy8gRGVzY3JpYmVzIGFuIFJQQyBzZXJ2aWNlLiAg
VG8gZ2V0IHRoZSBTZXJ2aWNlRGVzY3JpcHRvciBmb3IgYSBzZXJ2aWNlLAotLy8gY2FsbCBTZXJ2
aWNlOjpHZXREZXNjcmlwdG9yKCkuICBHZW5lcmF0ZWQgc2VydmljZSBjbGFzc2VzIGFsc28gaGF2
ZSBhCi0vLyBzdGF0aWMgbWV0aG9kIGNhbGxlZCBkZXNjcmlwdG9yKCkgd2hpY2ggcmV0dXJucyB0
aGUgdHlwZSdzCi0vLyBTZXJ2aWNlRGVzY3JpcHRvci4gIFVzZSBEZXNjcmlwdG9yUG9vbCB0byBj
b25zdHJ1Y3QgeW91ciBvd24gZGVzY3JpcHRvcnMuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQg
U2VydmljZURlc2NyaXB0b3IgewotIHB1YmxpYzoKLSAgLy8gVGhlIG5hbWUgb2YgdGhlIHNlcnZp
Y2UsIG5vdCBpbmNsdWRpbmcgaXRzIGNvbnRhaW5pbmcgc2NvcGUuCi0gIGNvbnN0IHN0cmluZyYg
bmFtZSgpIGNvbnN0OwotICAvLyBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZp
Y2UsIHNjb3BlIGRlbGltaXRlZCBieSBwZXJpb2RzLgotICBjb25zdCBzdHJpbmcmIGZ1bGxfbmFt
ZSgpIGNvbnN0OwotICAvLyBJbmRleCBvZiB0aGlzIHNlcnZpY2Ugd2l0aGluIHRoZSBmaWxlJ3Mg
c2VydmljZXMgYXJyYXkuCi0gIGludCBpbmRleCgpIGNvbnN0OwotCi0gIC8vIFRoZSAucHJvdG8g
ZmlsZSBpbiB3aGljaCB0aGlzIHNlcnZpY2Ugd2FzIGRlZmluZWQuICBOZXZlciBOVUxMLgotICBj
b25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSgpIGNvbnN0OwotCi0gIC8vIEdldCBvcHRpb25zIGZv
ciB0aGlzIHNlcnZpY2UgdHlwZS4gIFRoZXNlIGFyZSBzcGVjaWZpZWQgaW4gdGhlIC5wcm90byBm
aWxlCi0gIC8vIGJ5IHBsYWNpbmcgbGluZXMgbGlrZSAib3B0aW9uIGZvbyA9IDEyMzQ7IiBpbiB0
aGUgc2VydmljZSBkZWZpbml0aW9uLgotICAvLyBBbGxvd2VkIG9wdGlvbnMgYXJlIGRlZmluZWQg
YnkgU2VydmljZU9wdGlvbnMgaW4KLSAgLy8gZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJv
dG8sIGFuZCBhbnkgYXZhaWxhYmxlIGV4dGVuc2lvbnMgb2YgdGhhdAotICAvLyBtZXNzYWdlLgot
ICBjb25zdCBTZXJ2aWNlT3B0aW9ucyYgb3B0aW9ucygpIGNvbnN0OwotCi0gIC8vIFRoZSBudW1i
ZXIgb2YgbWV0aG9kcyB0aGlzIHNlcnZpY2UgZGVmaW5lcy4KLSAgaW50IG1ldGhvZF9jb3VudCgp
IGNvbnN0OwotICAvLyBHZXRzIGEgTWV0aG9kRGVzY3JpcHRvciBieSBpbmRleCwgd2hlcmUgMCA8
PSBpbmRleCA8IG1ldGhvZF9jb3VudCgpLgotICAvLyBUaGVzZSBhcmUgcmV0dXJuZWQgaW4gdGhl
IG9yZGVyIHRoZXkgd2VyZSBkZWZpbmVkIGluIHRoZSAucHJvdG8gZmlsZS4KLSAgY29uc3QgTWV0
aG9kRGVzY3JpcHRvciogbWV0aG9kKGludCBpbmRleCkgY29uc3Q7Ci0KLSAgLy8gTG9vayB1cCBh
IE1ldGhvZERlc2NyaXB0b3IgYnkgbmFtZS4KLSAgY29uc3QgTWV0aG9kRGVzY3JpcHRvciogRmlu
ZE1ldGhvZEJ5TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotICAvLyBTZWUgRGVzY3Jp
cHRvcjo6Q29weVRvKCkuCi0gIHZvaWQgQ29weVRvKFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8qIHBy
b3RvKSBjb25zdDsKLQotICAvLyBTZWUgRGVzY3JpcHRvcjo6RGVidWdTdHJpbmcoKS4KLSAgc3Ry
aW5nIERlYnVnU3RyaW5nKCkgY29uc3Q7Ci0KLSAgLy8gU2VlIERlc2NyaXB0b3I6OkRlYnVnU3Ry
aW5nV2l0aE9wdGlvbnMoKS4KLSAgc3RyaW5nIERlYnVnU3RyaW5nV2l0aE9wdGlvbnMoY29uc3Qg
RGVidWdTdHJpbmdPcHRpb25zJiBvcHRpb25zKSBjb25zdDsKLQotCi0gIC8vIFNvdXJjZSBMb2Nh
dGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAvLyBVcGRhdGVzIHwqb3V0X2xvY2F0aW9ufCB0byB0aGUgc291cmNlIGxvY2F0aW9uIG9m
IHRoZSBjb21wbGV0ZQotICAvLyBleHRlbnQgb2YgdGhpcyBzZXJ2aWNlIGRlY2xhcmF0aW9uLiAg
UmV0dXJucyBmYWxzZSBhbmQgbGVhdmVzCi0gIC8vIHwqb3V0X2xvY2F0aW9ufCB1bmNoYW5nZWQg
aWZmIGxvY2F0aW9uIGluZm9ybWF0aW9uIHdhcyBub3QgYXZhaWxhYmxlLgotICBib29sIEdldFNv
dXJjZUxvY2F0aW9uKFNvdXJjZUxvY2F0aW9uKiBvdXRfbG9jYXRpb24pIGNvbnN0OwotCi0gcHJp
dmF0ZToKLSAgdHlwZWRlZiBTZXJ2aWNlT3B0aW9ucyBPcHRpb25zVHlwZTsKLQotICAvLyBBbGxv
d3MgYWNjZXNzIHRvIEdldExvY2F0aW9uUGF0aCBmb3IgYW5ub3RhdGlvbnMuCi0gIGZyaWVuZCBj
bGFzcyA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpQcmludGVyOwotCi0gIC8vIFNlZSBEZXNjcmlw
dG9yOjpEZWJ1Z1N0cmluZygpLgotICB2b2lkIERlYnVnU3RyaW5nKHN0cmluZyAqY29udGVudHMs
IGNvbnN0IERlYnVnU3RyaW5nT3B0aW9ucyYgb3B0aW9ucykgY29uc3Q7Ci0KLSAgLy8gV2Fsa3Mg
dXAgdGhlIGRlc2NyaXB0b3IgdHJlZSB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGxvY2F0aW9uIHBh
dGgKLSAgLy8gdG8gdGhpcyBkZXNjcmlwdG9yIGZyb20gdGhlIGZpbGUgcm9vdC4KLSAgdm9pZCBH
ZXRMb2NhdGlvblBhdGgoc3RkOjp2ZWN0b3I8aW50Piogb3V0cHV0KSBjb25zdDsKLQotICBjb25z
dCBzdHJpbmcqIG5hbWVfOwotICBjb25zdCBzdHJpbmcqIGZ1bGxfbmFtZV87Ci0gIGNvbnN0IEZp
bGVEZXNjcmlwdG9yKiBmaWxlXzsKLSAgY29uc3QgU2VydmljZU9wdGlvbnMqIG9wdGlvbnNfOwot
ICBpbnQgbWV0aG9kX2NvdW50XzsKLSAgTWV0aG9kRGVzY3JpcHRvciogbWV0aG9kc187Ci0gIC8v
IElNUE9SVEFOVDogIElmIHlvdSBhZGQgYSBuZXcgZmllbGQsIG1ha2Ugc3VyZSB0byBzZWFyY2gg
Zm9yIGFsbCBpbnN0YW5jZXMKLSAgLy8gb2YgQWxsb2NhdGU8U2VydmljZURlc2NyaXB0b3I+KCkg
YW5kIEFsbG9jYXRlQXJyYXk8U2VydmljZURlc2NyaXB0b3I+KCkgaW4KLSAgLy8gZGVzY3JpcHRv
ci5jYyBhbmQgdXBkYXRlIHRoZW0gdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQuCi0KLSAgLy8gTXVz
dCBiZSBjb25zdHJ1Y3RlZCB1c2luZyBEZXNjcmlwdG9yUG9vbC4KLSAgU2VydmljZURlc2NyaXB0
b3IoKSB7fQotICBmcmllbmQgY2xhc3MgRGVzY3JpcHRvckJ1aWxkZXI7Ci0gIGZyaWVuZCBjbGFz
cyBGaWxlRGVzY3JpcHRvcjsKLSAgZnJpZW5kIGNsYXNzIE1ldGhvZERlc2NyaXB0b3I7Ci0gIEdP
T0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTZXJ2aWNlRGVzY3JpcHRvcik7Ci19Owot
Ci0vLyBEZXNjcmliZXMgYW4gaW5kaXZpZHVhbCBzZXJ2aWNlIG1ldGhvZC4gIFRvIG9idGFpbiBh
IE1ldGhvZERlc2NyaXB0b3IgZ2l2ZW4KLS8vIGEgc2VydmljZSwgZmlyc3QgZ2V0IGl0cyBTZXJ2
aWNlRGVzY3JpcHRvciwgdGhlbiBjYWxsCi0vLyBTZXJ2aWNlRGVzY3JpcHRvcjo6RmluZE1ldGhv
ZEJ5TmFtZSgpLiAgVXNlIERlc2NyaXB0b3JQb29sIHRvIGNvbnN0cnVjdCB5b3VyCi0vLyBvd24g
ZGVzY3JpcHRvcnMuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgTWV0aG9kRGVzY3JpcHRvciB7
Ci0gcHVibGljOgotICAvLyBOYW1lIG9mIHRoaXMgbWV0aG9kLCBub3QgaW5jbHVkaW5nIGNvbnRh
aW5pbmcgc2NvcGUuCi0gIGNvbnN0IHN0cmluZyYgbmFtZSgpIGNvbnN0OwotICAvLyBUaGUgZnVs
bHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1ldGhvZCwgc2NvcGUgZGVsaW1pdGVkIGJ5IHBlcmlv
ZHMuCi0gIGNvbnN0IHN0cmluZyYgZnVsbF9uYW1lKCkgY29uc3Q7Ci0gIC8vIEluZGV4IHdpdGhp
biB0aGUgc2VydmljZSdzIERlc2NyaXB0b3IuCi0gIGludCBpbmRleCgpIGNvbnN0OwotCi0gIC8v
IEdldHMgdGhlIHNlcnZpY2UgdG8gd2hpY2ggdGhpcyBtZXRob2QgYmVsb25ncy4gIE5ldmVyIE5V
TEwuCi0gIGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yKiBzZXJ2aWNlKCkgY29uc3Q7Ci0KLSAgLy8g
R2V0cyB0aGUgdHlwZSBvZiBwcm90b2NvbCBtZXNzYWdlIHdoaWNoIHRoaXMgbWV0aG9kIGFjY2Vw
dHMgYXMgaW5wdXQuCi0gIGNvbnN0IERlc2NyaXB0b3IqIGlucHV0X3R5cGUoKSBjb25zdDsKLSAg
Ly8gR2V0cyB0aGUgdHlwZSBvZiBwcm90b2NvbCBtZXNzYWdlIHdoaWNoIHRoaXMgbWVzc2FnZSBw
cm9kdWNlcyBhcyBvdXRwdXQuCi0gIGNvbnN0IERlc2NyaXB0b3IqIG91dHB1dF90eXBlKCkgY29u
c3Q7Ci0KLSAgLy8gR2V0cyB3aGV0aGVyIHRoZSBjbGllbnQgc3RyZWFtcyBtdWx0aXBsZSByZXF1
ZXN0cy4KLSAgYm9vbCBjbGllbnRfc3RyZWFtaW5nKCkgY29uc3Q7Ci0gIC8vIEdldHMgd2hldGhl
ciB0aGUgc2VydmVyIHN0cmVhbXMgbXVsdGlwbGUgcmVzcG9uc2VzLgotICBib29sIHNlcnZlcl9z
dHJlYW1pbmcoKSBjb25zdDsKLQotICAvLyBHZXQgb3B0aW9ucyBmb3IgdGhpcyBtZXRob2QuICBU
aGVzZSBhcmUgc3BlY2lmaWVkIGluIHRoZSAucHJvdG8gZmlsZSBieQotICAvLyBwbGFjaW5nIGxp
bmVzIGxpa2UgIm9wdGlvbiBmb28gPSAxMjM0OyIgaW4gY3VybHktYnJhY2VzIGFmdGVyIGEgbWV0
aG9kCi0gIC8vIGRlY2xhcmF0aW9uLiAgQWxsb3dlZCBvcHRpb25zIGFyZSBkZWZpbmVkIGJ5IE1l
dGhvZE9wdGlvbnMgaW4KLSAgLy8gZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8sIGFu
ZCBhbnkgYXZhaWxhYmxlIGV4dGVuc2lvbnMgb2YgdGhhdAotICAvLyBtZXNzYWdlLgotICBjb25z
dCBNZXRob2RPcHRpb25zJiBvcHRpb25zKCkgY29uc3Q7Ci0KLSAgLy8gU2VlIERlc2NyaXB0b3I6
OkNvcHlUbygpLgotICB2b2lkIENvcHlUbyhNZXRob2REZXNjcmlwdG9yUHJvdG8qIHByb3RvKSBj
b25zdDsKLQotICAvLyBTZWUgRGVzY3JpcHRvcjo6RGVidWdTdHJpbmcoKS4KLSAgc3RyaW5nIERl
YnVnU3RyaW5nKCkgY29uc3Q7Ci0KLSAgLy8gU2VlIERlc2NyaXB0b3I6OkRlYnVnU3RyaW5nV2l0
aE9wdGlvbnMoKS4KLSAgc3RyaW5nIERlYnVnU3RyaW5nV2l0aE9wdGlvbnMoY29uc3QgRGVidWdT
dHJpbmdPcHRpb25zJiBvcHRpb25zKSBjb25zdDsKLQotCi0gIC8vIFNvdXJjZSBMb2NhdGlvbiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAv
LyBVcGRhdGVzIHwqb3V0X2xvY2F0aW9ufCB0byB0aGUgc291cmNlIGxvY2F0aW9uIG9mIHRoZSBj
b21wbGV0ZQotICAvLyBleHRlbnQgb2YgdGhpcyBtZXRob2QgZGVjbGFyYXRpb24uICBSZXR1cm5z
IGZhbHNlIGFuZCBsZWF2ZXMKLSAgLy8gfCpvdXRfbG9jYXRpb258IHVuY2hhbmdlZCBpZmYgbG9j
YXRpb24gaW5mb3JtYXRpb24gd2FzIG5vdCBhdmFpbGFibGUuCi0gIGJvb2wgR2V0U291cmNlTG9j
YXRpb24oU291cmNlTG9jYXRpb24qIG91dF9sb2NhdGlvbikgY29uc3Q7Ci0KLSBwcml2YXRlOgot
ICB0eXBlZGVmIE1ldGhvZE9wdGlvbnMgT3B0aW9uc1R5cGU7Ci0KLSAgLy8gQWxsb3dzIGFjY2Vz
cyB0byBHZXRMb2NhdGlvblBhdGggZm9yIGFubm90YXRpb25zLgotICBmcmllbmQgY2xhc3MgOjpn
b29nbGU6OnByb3RvYnVmOjppbzo6UHJpbnRlcjsKLQotICAvLyBTZWUgRGVzY3JpcHRvcjo6RGVi
dWdTdHJpbmcoKS4KLSAgdm9pZCBEZWJ1Z1N0cmluZyhpbnQgZGVwdGgsIHN0cmluZyAqY29udGVu
dHMsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgRGVidWdTdHJpbmdPcHRpb25zJiBvcHRpb25z
KSBjb25zdDsKLQotICAvLyBXYWxrcyB1cCB0aGUgZGVzY3JpcHRvciB0cmVlIHRvIGdlbmVyYXRl
IHRoZSBzb3VyY2UgbG9jYXRpb24gcGF0aAotICAvLyB0byB0aGlzIGRlc2NyaXB0b3IgZnJvbSB0
aGUgZmlsZSByb290LgotICB2b2lkIEdldExvY2F0aW9uUGF0aChzdGQ6OnZlY3RvcjxpbnQ+KiBv
dXRwdXQpIGNvbnN0OwotCi0gIGNvbnN0IHN0cmluZyogbmFtZV87Ci0gIGNvbnN0IHN0cmluZyog
ZnVsbF9uYW1lXzsKLSAgY29uc3QgU2VydmljZURlc2NyaXB0b3IqIHNlcnZpY2VfOwotICBjb25z
dCBEZXNjcmlwdG9yKiBpbnB1dF90eXBlXzsKLSAgY29uc3QgRGVzY3JpcHRvciogb3V0cHV0X3R5
cGVfOwotICBjb25zdCBNZXRob2RPcHRpb25zKiBvcHRpb25zXzsKLSAgYm9vbCBjbGllbnRfc3Ry
ZWFtaW5nXzsKLSAgYm9vbCBzZXJ2ZXJfc3RyZWFtaW5nXzsKLSAgLy8gSU1QT1JUQU5UOiAgSWYg
eW91IGFkZCBhIG5ldyBmaWVsZCwgbWFrZSBzdXJlIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNl
cwotICAvLyBvZiBBbGxvY2F0ZTxNZXRob2REZXNjcmlwdG9yPigpIGFuZCBBbGxvY2F0ZUFycmF5
PE1ldGhvZERlc2NyaXB0b3I+KCkgaW4KLSAgLy8gZGVzY3JpcHRvci5jYyBhbmQgdXBkYXRlIHRo
ZW0gdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQuCi0KLSAgLy8gTXVzdCBiZSBjb25zdHJ1Y3RlZCB1
c2luZyBEZXNjcmlwdG9yUG9vbC4KLSAgTWV0aG9kRGVzY3JpcHRvcigpIHt9Ci0gIGZyaWVuZCBj
bGFzcyBEZXNjcmlwdG9yQnVpbGRlcjsKLSAgZnJpZW5kIGNsYXNzIFNlcnZpY2VEZXNjcmlwdG9y
OwotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTWV0aG9kRGVzY3JpcHRvcik7
Ci19OwotCi0KLS8vIERlc2NyaWJlcyBhIHdob2xlIC5wcm90byBmaWxlLiAgVG8gZ2V0IHRoZSBG
aWxlRGVzY3JpcHRvciBmb3IgYSBjb21waWxlZC1pbgotLy8gZmlsZSwgZ2V0IHRoZSBkZXNjcmlw
dG9yIGZvciBzb21ldGhpbmcgZGVmaW5lZCBpbiB0aGF0IGZpbGUgYW5kIGNhbGwKLS8vIGRlc2Ny
aXB0b3ItPmZpbGUoKS4gIFVzZSBEZXNjcmlwdG9yUG9vbCB0byBjb25zdHJ1Y3QgeW91ciBvd24g
ZGVzY3JpcHRvcnMuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgRmlsZURlc2NyaXB0b3Igewot
IHB1YmxpYzoKLSAgLy8gVGhlIGZpbGVuYW1lLCByZWxhdGl2ZSB0byB0aGUgc291cmNlIHRyZWUu
Ci0gIC8vIGUuZy4gImdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvIgotICBjb25zdCBz
dHJpbmcmIG5hbWUoKSBjb25zdDsKLQotICAvLyBUaGUgcGFja2FnZSwgZS5nLiAiZ29vZ2xlLnBy
b3RvYnVmLmNvbXBpbGVyIi4KLSAgY29uc3Qgc3RyaW5nJiBwYWNrYWdlKCkgY29uc3Q7Ci0KLSAg
Ly8gVGhlIERlc2NyaXB0b3JQb29sIGluIHdoaWNoIHRoaXMgRmlsZURlc2NyaXB0b3IgYW5kIGFs
bCBpdHMgY29udGVudHMgd2VyZQotICAvLyBhbGxvY2F0ZWQuICBOZXZlciBOVUxMLgotICBjb25z
dCBEZXNjcmlwdG9yUG9vbCogcG9vbCgpIGNvbnN0OwotCi0gIC8vIFRoZSBudW1iZXIgb2YgZmls
ZXMgaW1wb3J0ZWQgYnkgdGhpcyBvbmUuCi0gIGludCBkZXBlbmRlbmN5X2NvdW50KCkgY29uc3Q7
Ci0gIC8vIEdldHMgYW4gaW1wb3J0ZWQgZmlsZSBieSBpbmRleCwgd2hlcmUgMCA8PSBpbmRleCA8
IGRlcGVuZGVuY3lfY291bnQoKS4KLSAgLy8gVGhlc2UgYXJlIHJldHVybmVkIGluIHRoZSBvcmRl
ciB0aGV5IHdlcmUgZGVmaW5lZCBpbiB0aGUgLnByb3RvIGZpbGUuCi0gIGNvbnN0IEZpbGVEZXNj
cmlwdG9yKiBkZXBlbmRlbmN5KGludCBpbmRleCkgY29uc3Q7Ci0KLSAgLy8gVGhlIG51bWJlciBv
ZiBmaWxlcyBwdWJsaWMgaW1wb3J0ZWQgYnkgdGhpcyBvbmUuCi0gIC8vIFRoZSBwdWJsaWMgZGVw
ZW5kZW5jeSBsaXN0IGlzIGEgc3Vic2V0IG9mIHRoZSBkZXBlbmRlbmN5IGxpc3QuCi0gIGludCBw
dWJsaWNfZGVwZW5kZW5jeV9jb3VudCgpIGNvbnN0OwotICAvLyBHZXRzIGEgcHVibGljIGltcG9y
dGVkIGZpbGUgYnkgaW5kZXgsIHdoZXJlIDAgPD0gaW5kZXggPAotICAvLyBwdWJsaWNfZGVwZW5k
ZW5jeV9jb3VudCgpLgotICAvLyBUaGVzZSBhcmUgcmV0dXJuZWQgaW4gdGhlIG9yZGVyIHRoZXkg
d2VyZSBkZWZpbmVkIGluIHRoZSAucHJvdG8gZmlsZS4KLSAgY29uc3QgRmlsZURlc2NyaXB0b3Iq
IHB1YmxpY19kZXBlbmRlbmN5KGludCBpbmRleCkgY29uc3Q7Ci0KLSAgLy8gVGhlIG51bWJlciBv
ZiBmaWxlcyB0aGF0IGFyZSBpbXBvcnRlZCBmb3Igd2VhayBmaWVsZHMuCi0gIC8vIFRoZSB3ZWFr
IGRlcGVuZGVuY3kgbGlzdCBpcyBhIHN1YnNldCBvZiB0aGUgZGVwZW5kZW5jeSBsaXN0LgotICBp
bnQgd2Vha19kZXBlbmRlbmN5X2NvdW50KCkgY29uc3Q7Ci0gIC8vIEdldHMgYSB3ZWFrIGltcG9y
dGVkIGZpbGUgYnkgaW5kZXgsIHdoZXJlIDAgPD0gaW5kZXggPAotICAvLyB3ZWFrX2RlcGVuZGVu
Y3lfY291bnQoKS4KLSAgLy8gVGhlc2UgYXJlIHJldHVybmVkIGluIHRoZSBvcmRlciB0aGV5IHdl
cmUgZGVmaW5lZCBpbiB0aGUgLnByb3RvIGZpbGUuCi0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiB3
ZWFrX2RlcGVuZGVuY3koaW50IGluZGV4KSBjb25zdDsKLQotICAvLyBOdW1iZXIgb2YgdG9wLWxl
dmVsIG1lc3NhZ2UgdHlwZXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUuICAoVGhpcyBkb2VzIG5vdAot
ICAvLyBpbmNsdWRlIG5lc3RlZCB0eXBlcy4pCi0gIGludCBtZXNzYWdlX3R5cGVfY291bnQoKSBj
b25zdDsKLSAgLy8gR2V0cyBhIHRvcC1sZXZlbCBtZXNzYWdlIHR5cGUsIHdoZXJlIDAgPD0gaW5k
ZXggPCBtZXNzYWdlX3R5cGVfY291bnQoKS4KLSAgLy8gVGhlc2UgYXJlIHJldHVybmVkIGluIHRo
ZSBvcmRlciB0aGV5IHdlcmUgZGVmaW5lZCBpbiB0aGUgLnByb3RvIGZpbGUuCi0gIGNvbnN0IERl
c2NyaXB0b3IqIG1lc3NhZ2VfdHlwZShpbnQgaW5kZXgpIGNvbnN0OwotCi0gIC8vIE51bWJlciBv
ZiB0b3AtbGV2ZWwgZW51bSB0eXBlcyBkZWZpbmVkIGluIHRoaXMgZmlsZS4gIChUaGlzIGRvZXMg
bm90Ci0gIC8vIGluY2x1ZGUgbmVzdGVkIHR5cGVzLikKLSAgaW50IGVudW1fdHlwZV9jb3VudCgp
IGNvbnN0OwotICAvLyBHZXRzIGEgdG9wLWxldmVsIGVudW0gdHlwZSwgd2hlcmUgMCA8PSBpbmRl
eCA8IGVudW1fdHlwZV9jb3VudCgpLgotICAvLyBUaGVzZSBhcmUgcmV0dXJuZWQgaW4gdGhlIG9y
ZGVyIHRoZXkgd2VyZSBkZWZpbmVkIGluIHRoZSAucHJvdG8gZmlsZS4KLSAgY29uc3QgRW51bURl
c2NyaXB0b3IqIGVudW1fdHlwZShpbnQgaW5kZXgpIGNvbnN0OwotCi0gIC8vIE51bWJlciBvZiBz
ZXJ2aWNlcyBkZWZpbmVkIGluIHRoaXMgZmlsZS4KLSAgaW50IHNlcnZpY2VfY291bnQoKSBjb25z
dDsKLSAgLy8gR2V0cyBhIHNlcnZpY2UsIHdoZXJlIDAgPD0gaW5kZXggPCBzZXJ2aWNlX2NvdW50
KCkuCi0gIC8vIFRoZXNlIGFyZSByZXR1cm5lZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGRlZmlu
ZWQgaW4gdGhlIC5wcm90byBmaWxlLgotICBjb25zdCBTZXJ2aWNlRGVzY3JpcHRvciogc2Vydmlj
ZShpbnQgaW5kZXgpIGNvbnN0OwotCi0gIC8vIE51bWJlciBvZiBleHRlbnNpb25zIGRlZmluZWQg
YXQgZmlsZSBzY29wZS4gIChUaGlzIGRvZXMgbm90IGluY2x1ZGUKLSAgLy8gZXh0ZW5zaW9ucyBu
ZXN0ZWQgd2l0aGluIG1lc3NhZ2UgdHlwZXMuKQotICBpbnQgZXh0ZW5zaW9uX2NvdW50KCkgY29u
c3Q7Ci0gIC8vIEdldHMgYW4gZXh0ZW5zaW9uJ3MgZGVzY3JpcHRvciwgd2hlcmUgMCA8PSBpbmRl
eCA8IGV4dGVuc2lvbl9jb3VudCgpLgotICAvLyBUaGVzZSBhcmUgcmV0dXJuZWQgaW4gdGhlIG9y
ZGVyIHRoZXkgd2VyZSBkZWZpbmVkIGluIHRoZSAucHJvdG8gZmlsZS4KLSAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBleHRlbnNpb24oaW50IGluZGV4KSBjb25zdDsKLQotICAvLyBHZXQgb3B0aW9u
cyBmb3IgdGhpcyBmaWxlLiAgVGhlc2UgYXJlIHNwZWNpZmllZCBpbiB0aGUgLnByb3RvIGZpbGUg
YnkKLSAgLy8gcGxhY2luZyBsaW5lcyBsaWtlICJvcHRpb24gZm9vID0gMTIzNDsiIGF0IHRoZSB0
b3AgbGV2ZWwsIG91dHNpZGUgb2YgYW55Ci0gIC8vIG90aGVyIGRlZmluaXRpb25zLiAgQWxsb3dl
ZCBvcHRpb25zIGFyZSBkZWZpbmVkIGJ5IEZpbGVPcHRpb25zIGluCi0gIC8vIGdvb2dsZS9wcm90
b2J1Zi9kZXNjcmlwdG9yLnByb3RvLCBhbmQgYW55IGF2YWlsYWJsZSBleHRlbnNpb25zIG9mIHRo
YXQKLSAgLy8gbWVzc2FnZS4KLSAgY29uc3QgRmlsZU9wdGlvbnMmIG9wdGlvbnMoKSBjb25zdDsK
LQotICAvLyBTeW50YXggb2YgdGhpcyBmaWxlLgotICBlbnVtIFN5bnRheCB7Ci0gICAgU1lOVEFY
X1VOS05PV04gPSAwLAotICAgIFNZTlRBWF9QUk9UTzIgID0gMiwKLSAgICBTWU5UQVhfUFJPVE8z
ICA9IDMsCi0gIH07Ci0gIFN5bnRheCBzeW50YXgoKSBjb25zdDsKLSAgc3RhdGljIGNvbnN0IGNo
YXIqIFN5bnRheE5hbWUoU3ludGF4IHN5bnRheCk7Ci0KLSAgLy8gRmluZCBhIHRvcC1sZXZlbCBt
ZXNzYWdlIHR5cGUgYnkgbmFtZS4gIFJldHVybnMgTlVMTCBpZiBub3QgZm91bmQuCi0gIGNvbnN0
IERlc2NyaXB0b3IqIEZpbmRNZXNzYWdlVHlwZUJ5TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNv
bnN0OwotICAvLyBGaW5kIGEgdG9wLWxldmVsIGVudW0gdHlwZSBieSBuYW1lLiAgUmV0dXJucyBO
VUxMIGlmIG5vdCBmb3VuZC4KLSAgY29uc3QgRW51bURlc2NyaXB0b3IqIEZpbmRFbnVtVHlwZUJ5
TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotICAvLyBGaW5kIGFuIGVudW0gdmFsdWUg
ZGVmaW5lZCBpbiBhbnkgdG9wLWxldmVsIGVudW0gYnkgbmFtZS4gIFJldHVybnMgTlVMTCBpZgot
ICAvLyBub3QgZm91bmQuCi0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIEZpbmRFbnVtVmFs
dWVCeU5hbWUoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgLy8gRmluZCBhIHNlcnZpY2Ug
ZGVmaW5pdGlvbiBieSBuYW1lLiAgUmV0dXJucyBOVUxMIGlmIG5vdCBmb3VuZC4KLSAgY29uc3Qg
U2VydmljZURlc2NyaXB0b3IqIEZpbmRTZXJ2aWNlQnlOYW1lKGNvbnN0IHN0cmluZyYgbmFtZSkg
Y29uc3Q7Ci0gIC8vIEZpbmQgYSB0b3AtbGV2ZWwgZXh0ZW5zaW9uIGRlZmluaXRpb24gYnkgbmFt
ZS4gIFJldHVybnMgTlVMTCBpZiBub3QgZm91bmQuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
RmluZEV4dGVuc2lvbkJ5TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotICAvLyBTaW1p
bGFyIHRvIEZpbmRFeHRlbnNpb25CeU5hbWUoKSwgYnV0IHNlYXJjaGVzIGJ5IGxvd2VyY2FzZWQt
bmFtZS4gIFNlZQotICAvLyBEZXNjcmlwdG9yOjpGaW5kRmllbGRCeUxvd2VyY2FzZU5hbWUoKS4K
LSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBGaW5kRXh0ZW5zaW9uQnlMb3dlcmNhc2VOYW1lKGNv
bnN0IHN0cmluZyYgbmFtZSkgY29uc3Q7Ci0gIC8vIFNpbWlsYXIgdG8gRmluZEV4dGVuc2lvbkJ5
TmFtZSgpLCBidXQgc2VhcmNoZXMgYnkgY2FtZWxjYXNlZC1uYW1lLiAgU2VlCi0gIC8vIERlc2Ny
aXB0b3I6OkZpbmRGaWVsZEJ5Q2FtZWxjYXNlTmFtZSgpLgotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIEZpbmRFeHRlbnNpb25CeUNhbWVsY2FzZU5hbWUoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25z
dDsKLQotICAvLyBTZWUgRGVzY3JpcHRvcjo6Q29weVRvKCkuCi0gIC8vIE5vdGVzOgotICAvLyAt
IFRoaXMgbWV0aG9kIGRvZXMgTk9UIGNvcHkgc291cmNlIGNvZGUgaW5mb3JtYXRpb24gc2luY2Ug
aXQgaXMgcmVsYXRpdmVseQotICAvLyAgIGxhcmdlIGFuZCByYXJlbHkgbmVlZGVkLiAgU2VlIENv
cHlTb3VyY2VDb2RlSW5mb1RvKCkgYmVsb3cuCi0gIHZvaWQgQ29weVRvKEZpbGVEZXNjcmlwdG9y
UHJvdG8qIHByb3RvKSBjb25zdDsKLSAgLy8gV3JpdGUgdGhlIHNvdXJjZSBjb2RlIGluZm9ybWF0
aW9uIG9mIHRoaXMgRmlsZURlc2NyaXB0b3IgaW50byB0aGUgZ2l2ZW4KLSAgLy8gRmlsZURlc2Ny
aXB0b3JQcm90by4gIFNlZSBDb3B5VG8oKSBhYm92ZS4KLSAgdm9pZCBDb3B5U291cmNlQ29kZUlu
Zm9UbyhGaWxlRGVzY3JpcHRvclByb3RvKiBwcm90bykgY29uc3Q7Ci0gIC8vIEZpbGwgdGhlIGpz
b25fbmFtZSBmaWVsZCBvZiBGaWVsZERlc2NyaXB0b3JQcm90byBmb3IgYWxsIGZpZWxkcy4gQ2Fu
IG9ubHkKLSAgLy8gYmUgY2FsbGVkIGFmdGVyIENvcHlUbygpLgotICB2b2lkIENvcHlKc29uTmFt
ZVRvKEZpbGVEZXNjcmlwdG9yUHJvdG8qIHByb3RvKSBjb25zdDsKLQotICAvLyBTZWUgRGVzY3Jp
cHRvcjo6RGVidWdTdHJpbmcoKS4KLSAgc3RyaW5nIERlYnVnU3RyaW5nKCkgY29uc3Q7Ci0KLSAg
Ly8gU2VlIERlc2NyaXB0b3I6OkRlYnVnU3RyaW5nV2l0aE9wdGlvbnMoKS4KLSAgc3RyaW5nIERl
YnVnU3RyaW5nV2l0aE9wdGlvbnMoY29uc3QgRGVidWdTdHJpbmdPcHRpb25zJiBvcHRpb25zKSBj
b25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciBh
biB1bmtub3duIGZpbGUuIFRoaXMgd2lsbAotICAvLyBvbmx5IGJlIHRoZSBjYXNlIGlmIHRoaXMg
ZGVzY3JpcHRvciBjb21lcyBmcm9tIGEgRGVzY3JpcHRvclBvb2wKLSAgLy8gd2l0aCBBbGxvd1Vu
a25vd25EZXBlbmRlbmNpZXMoKSBzZXQuCi0gIGJvb2wgaXNfcGxhY2Vob2xkZXIoKSBjb25zdDsK
LQotICAvLyBVcGRhdGVzIHwqb3V0X2xvY2F0aW9ufCB0byB0aGUgc291cmNlIGxvY2F0aW9uIG9m
IHRoZSBjb21wbGV0ZSBleHRlbnQgb2YKLSAgLy8gdGhpcyBmaWxlIGRlY2xhcmF0aW9uIChuYW1l
bHksIHRoZSBlbXB0eSBwYXRoKS4KLSAgYm9vbCBHZXRTb3VyY2VMb2NhdGlvbihTb3VyY2VMb2Nh
dGlvbiogb3V0X2xvY2F0aW9uKSBjb25zdDsKLQotICAvLyBVcGRhdGVzIHwqb3V0X2xvY2F0aW9u
fCB0byB0aGUgc291cmNlIGxvY2F0aW9uIG9mIHRoZSBjb21wbGV0ZQotICAvLyBleHRlbnQgb2Yg
dGhlIGRlY2xhcmF0aW9uIG9yIGRlY2xhcmF0aW9uLXBhcnQgZGVub3RlZCBieSB8cGF0aHwuCi0g
IC8vIFJldHVybnMgZmFsc2UgYW5kIGxlYXZlcyB8Km91dF9sb2NhdGlvbnwgdW5jaGFuZ2VkIGlm
ZiBsb2NhdGlvbgotICAvLyBpbmZvcm1hdGlvbiB3YXMgbm90IGF2YWlsYWJsZS4gIChTZWUgU291
cmNlQ29kZUluZm8gZm9yCi0gIC8vIGRlc2NyaXB0aW9uIG9mIHBhdGggZW5jb2RpbmcuKQotICBi
b29sIEdldFNvdXJjZUxvY2F0aW9uKGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIHBhdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgU291cmNlTG9jYXRpb24qIG91dF9sb2NhdGlvbikgY29uc3Q7
Ci0KLSBwcml2YXRlOgotICB0eXBlZGVmIEZpbGVPcHRpb25zIE9wdGlvbnNUeXBlOwotCi0gIGNv
bnN0IHN0cmluZyogbmFtZV87Ci0gIGNvbnN0IHN0cmluZyogcGFja2FnZV87Ci0gIGNvbnN0IERl
c2NyaXB0b3JQb29sKiBwb29sXzsKLSAgaW50IGRlcGVuZGVuY3lfY291bnRfOwotICBjb25zdCBG
aWxlRGVzY3JpcHRvcioqIGRlcGVuZGVuY2llc187Ci0gIGludCBwdWJsaWNfZGVwZW5kZW5jeV9j
b3VudF87Ci0gIGludCogcHVibGljX2RlcGVuZGVuY2llc187Ci0gIGludCB3ZWFrX2RlcGVuZGVu
Y3lfY291bnRfOwotICBpbnQqIHdlYWtfZGVwZW5kZW5jaWVzXzsKLSAgaW50IG1lc3NhZ2VfdHlw
ZV9jb3VudF87Ci0gIERlc2NyaXB0b3IqIG1lc3NhZ2VfdHlwZXNfOwotICBpbnQgZW51bV90eXBl
X2NvdW50XzsKLSAgRW51bURlc2NyaXB0b3IqIGVudW1fdHlwZXNfOwotICBpbnQgc2VydmljZV9j
b3VudF87Ci0gIFNlcnZpY2VEZXNjcmlwdG9yKiBzZXJ2aWNlc187Ci0gIGludCBleHRlbnNpb25f
Y291bnRfOwotICBTeW50YXggc3ludGF4XzsKLSAgYm9vbCBpc19wbGFjZWhvbGRlcl87Ci0gIEZp
ZWxkRGVzY3JpcHRvciogZXh0ZW5zaW9uc187Ci0gIGNvbnN0IEZpbGVPcHRpb25zKiBvcHRpb25z
XzsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRvclRhYmxlcyogdGFibGVzXzsKLSAgY29uc3QgU291
cmNlQ29kZUluZm8qIHNvdXJjZV9jb2RlX2luZm9fOwotICAvLyBJTVBPUlRBTlQ6ICBJZiB5b3Ug
YWRkIGEgbmV3IGZpZWxkLCBtYWtlIHN1cmUgdG8gc2VhcmNoIGZvciBhbGwgaW5zdGFuY2VzCi0g
IC8vIG9mIEFsbG9jYXRlPEZpbGVEZXNjcmlwdG9yPigpIGFuZCBBbGxvY2F0ZUFycmF5PEZpbGVE
ZXNjcmlwdG9yPigpIGluCi0gIC8vIGRlc2NyaXB0b3IuY2MgYW5kIHVwZGF0ZSB0aGVtIHRvIGlu
aXRpYWxpemUgdGhlIGZpZWxkLgotCi0gIEZpbGVEZXNjcmlwdG9yKCkge30KLSAgZnJpZW5kIGNs
YXNzIERlc2NyaXB0b3JCdWlsZGVyOwotICBmcmllbmQgY2xhc3MgRGVzY3JpcHRvcjsKLSAgZnJp
ZW5kIGNsYXNzIEZpZWxkRGVzY3JpcHRvcjsKLSAgZnJpZW5kIGNsYXNzIE9uZW9mRGVzY3JpcHRv
cjsKLSAgZnJpZW5kIGNsYXNzIEVudW1EZXNjcmlwdG9yOwotICBmcmllbmQgY2xhc3MgRW51bVZh
bHVlRGVzY3JpcHRvcjsKLSAgZnJpZW5kIGNsYXNzIE1ldGhvZERlc2NyaXB0b3I7Ci0gIGZyaWVu
ZCBjbGFzcyBTZXJ2aWNlRGVzY3JpcHRvcjsKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RS
VUNUT1JTKEZpbGVEZXNjcmlwdG9yKTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLy8gVXNlZCB0
byBjb25zdHJ1Y3QgZGVzY3JpcHRvcnMuCi0vLwotLy8gTm9ybWFsbHkgeW91IHdvbid0IHdhbnQg
dG8gYnVpbGQgeW91ciBvd24gZGVzY3JpcHRvcnMuICBNZXNzYWdlIGNsYXNzZXMKLS8vIGNvbnN0
cnVjdGVkIGJ5IHRoZSBwcm90b2NvbCBjb21waWxlciB3aWxsIHByb3ZpZGUgdGhlbSBmb3IgeW91
LiAgSG93ZXZlciwKLS8vIGlmIHlvdSBhcmUgaW1wbGVtZW50aW5nIE1lc3NhZ2Ugb24geW91ciBv
d24sIG9yIGlmIHlvdSBhcmUgd3JpdGluZyBhCi0vLyBwcm9ncmFtIHdoaWNoIGNhbiBvcGVyYXRl
IG9uIHRvdGFsbHkgYXJiaXRyYXJ5IHR5cGVzIGFuZCBuZWVkcyB0byBsb2FkCi0vLyB0aGVtIGZy
b20gc29tZSBzb3J0IG9mIGRhdGFiYXNlLCB5b3UgbWlnaHQgbmVlZCB0by4KLS8vCi0vLyBTaW5j
ZSBEZXNjcmlwdG9ycyBhcmUgY29tcG9zZWQgb2YgYSB3aG9sZSBsb3Qgb2YgY3Jvc3MtbGlua2Vk
IGJpdHMgb2YKLS8vIGRhdGEgdGhhdCB3b3VsZCBiZSBhIHBhaW4gdG8gcHV0IHRvZ2V0aGVyIG1h
bnVhbGx5LCB0aGUKLS8vIERlc2NyaXB0b3JQb29sIGNsYXNzIGlzIHByb3ZpZGVkIHRvIG1ha2Ug
dGhlIHByb2Nlc3MgZWFzaWVyLiAgSXQgY2FuCi0vLyB0YWtlIGEgRmlsZURlc2NyaXB0b3JQcm90
byAoZGVmaW5lZCBpbiBkZXNjcmlwdG9yLnByb3RvKSwgdmFsaWRhdGUgaXQsCi0vLyBhbmQgY29u
dmVydCBpdCB0byBhIHNldCBvZiBuaWNlbHkgY3Jvc3MtbGlua2VkIERlc2NyaXB0b3JzLgotLy8K
LS8vIERlc2NyaXB0b3JQb29sIGFsc28gaGVscHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gIERl
c2NyaXB0b3JzIGFyZQotLy8gY29tcG9zZWQgb2YgbWFueSBvYmplY3RzIGNvbnRhaW5pbmcgc3Rh
dGljIGRhdGEgYW5kIHBvaW50ZXJzIHRvIGVhY2gKLS8vIG90aGVyLiAgSW4gYWxsIGxpa2VsaWhv
b2QsIHdoZW4gaXQgY29tZXMgdGltZSB0byBkZWxldGUgdGhpcyBkYXRhLAotLy8geW91J2xsIHdh
bnQgdG8gZGVsZXRlIGl0IGFsbCBhdCBvbmNlLiAgSW4gZmFjdCwgaXQgaXMgbm90IHVuY29tbW9u
IHRvCi0vLyBoYXZlIGEgd2hvbGUgcG9vbCBvZiBkZXNjcmlwdG9ycyBhbGwgY3Jvc3MtbGlua2Vk
IHdpdGggZWFjaCBvdGhlciB3aGljaAotLy8geW91IHdpc2ggdG8gZGVsZXRlIGFsbCBhdCBvbmNl
LiAgVGhpcyBjbGFzcyByZXByZXNlbnRzIHN1Y2ggYSBwb29sLCBhbmQKLS8vIGhhbmRsZXMgdGhl
IG1lbW9yeSBtYW5hZ2VtZW50IGZvciB5b3UuCi0vLwotLy8gWW91IGNhbiBhbHNvIHNlYXJjaCBm
b3IgZGVzY3JpcHRvcnMgd2l0aGluIGEgRGVzY3JpcHRvclBvb2wgYnkgbmFtZSwgYW5kCi0vLyBl
eHRlbnNpb25zIGJ5IG51bWJlci4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBEZXNjcmlwdG9y
UG9vbCB7Ci0gcHVibGljOgotICAvLyBDcmVhdGUgYSBub3JtYWwsIGVtcHR5IERlc2NyaXB0b3JQ
b29sLgotICBEZXNjcmlwdG9yUG9vbCgpOwotCi0gIC8vIENvbnN0cnVjdHMgYSBEZXNjcmlwdG9y
UG9vbCB0aGF0LCB3aGVuIGl0IGNhbid0IGZpbmQgc29tZXRoaW5nIGFtb25nIHRoZQotICAvLyBk
ZXNjcmlwdG9ycyBhbHJlYWR5IGluIHRoZSBwb29sLCBsb29rcyBmb3IgaXQgaW4gdGhlIGdpdmVu
Ci0gIC8vIERlc2NyaXB0b3JEYXRhYmFzZS4KLSAgLy8gTm90ZXM6Ci0gIC8vIC0gSWYgYSBEZXNj
cmlwdG9yUG9vbCBpcyBjb25zdHJ1Y3RlZCB0aGlzIHdheSwgaXRzIEJ1aWxkRmlsZSooKSBtZXRo
b2RzCi0gIC8vICAgbXVzdCBub3QgYmUgY2FsbGVkICh0aGV5IHdpbGwgYXNzZXJ0LWZhaWwpLiAg
VGhlIG9ubHkgd2F5IHRvIHBvcHVsYXRlCi0gIC8vICAgdGhlIHBvb2wgd2l0aCBkZXNjcmlwdG9y
cyBpcyB0byBjYWxsIHRoZSBGaW5kKkJ5KigpIG1ldGhvZHMuCi0gIC8vIC0gVGhlIEZpbmQqQnkq
KCkgbWV0aG9kcyBtYXkgYmxvY2sgdGhlIGNhbGxpbmcgdGhyZWFkIGlmIHRoZQotICAvLyAgIERl
c2NyaXB0b3JEYXRhYmFzZSBibG9ja3MuICBUaGlzIGluIHR1cm4gbWVhbnMgdGhhdCBwYXJzaW5n
IG1lc3NhZ2VzCi0gIC8vICAgbWF5IGJsb2NrIGlmIHRoZXkgbmVlZCB0byBsb29rIHVwIGV4dGVu
c2lvbnMuCi0gIC8vIC0gVGhlIEZpbmQqQnkqKCkgbWV0aG9kcyB3aWxsIHVzZSBtdXRleGVzIGZv
ciB0aHJlYWQtc2FmZXR5LCB0aHVzIG1ha2luZwotICAvLyAgIHRoZW0gc2xvd2VyIGV2ZW4gd2hl
biB0aGV5IGRvbid0IGhhdmUgdG8gZmFsbCBiYWNrIHRvIHRoZSBkYXRhYmFzZS4KLSAgLy8gICBJ
biBmYWN0LCBldmVuIHRoZSBGaW5kKkJ5KigpIG1ldGhvZHMgb2YgZGVzY3JpcHRvciBvYmplY3Rz
IG93bmVkIGJ5Ci0gIC8vICAgdGhpcyBwb29sIHdpbGwgYmUgc2xvd2VyLCBzaW5jZSB0aGV5IHdp
bGwgaGF2ZSB0byBvYnRhaW4gbG9ja3MgdG9vLgotICAvLyAtIEFuIEVycm9yQ29sbGVjdG9yIG1h
eSBvcHRpb25hbGx5IGJlIGdpdmVuIHRvIGNvbGxlY3QgdmFsaWRhdGlvbiBlcnJvcnMKLSAgLy8g
ICBpbiBmaWxlcyBsb2FkZWQgZnJvbSB0aGUgZGF0YWJhc2UuICBJZiBub3QgZ2l2ZW4sIGVycm9y
cyB3aWxsIGJlIHByaW50ZWQKLSAgLy8gICB0byBHT09HTEVfTE9HKEVSUk9SKS4gIFJlbWVtYmVy
IHRoYXQgZmlsZXMgYXJlIGJ1aWx0IG9uLWRlbWFuZCwgc28gdGhpcwotICAvLyAgIEVycm9yQ29s
bGVjdG9yIG1heSBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkIHRoYXQgY2FsbHMgb25lIG9mIHRo
ZQotICAvLyAgIEZpbmQqQnkqKCkgbWV0aG9kcy4KLSAgLy8gLSBUaGUgRGVzY3JpcHRvckRhdGFi
YXNlIG11c3Qgbm90IGJlIG11dGF0ZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZgotICAvLyAgIHRo
ZSBEZXNjcmlwdG9yUG9vbC4gRXZlbiBpZiB0aGUgY2xpZW50IHRha2VzIGNhcmUgdG8gYXZvaWQg
ZGF0YSByYWNlcywKLSAgLy8gICBjaGFuZ2VzIHRvIHRoZSBjb250ZW50IG9mIHRoZSBEZXNjcmlw
dG9yRGF0YWJhc2UgbWF5IG5vdCBiZSByZWZsZWN0ZWQKLSAgLy8gICBpbiBzdWJzZXF1ZW50IGxv
b2t1cHMgaW4gdGhlIERlc2NyaXB0b3JQb29sLgotICBjbGFzcyBFcnJvckNvbGxlY3RvcjsKLSAg
ZXhwbGljaXQgRGVzY3JpcHRvclBvb2woRGVzY3JpcHRvckRhdGFiYXNlKiBmYWxsYmFja19kYXRh
YmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2xsZWN0b3IqIGVycm9yX2Nv
bGxlY3RvciA9IE5VTEwpOwotCi0gIH5EZXNjcmlwdG9yUG9vbCgpOwotCi0gIC8vIEdldCBhIHBv
aW50ZXIgdG8gdGhlIGdlbmVyYXRlZCBwb29sLiAgR2VuZXJhdGVkIHByb3RvY29sIG1lc3NhZ2Ug
Y2xhc3NlcwotICAvLyB3aGljaCBhcmUgY29tcGlsZWQgaW50byB0aGUgYmluYXJ5IHdpbGwgYWxs
b2NhdGUgdGhlaXIgZGVzY3JpcHRvcnMgaW4KLSAgLy8gdGhpcyBwb29sLiAgRG8gbm90IGFkZCB5
b3VyIG93biBkZXNjcmlwdG9ycyB0byB0aGlzIHBvb2wuCi0gIHN0YXRpYyBjb25zdCBEZXNjcmlw
dG9yUG9vbCogZ2VuZXJhdGVkX3Bvb2woKTsKLQotCi0gIC8vIEZpbmQgYSBGaWxlRGVzY3JpcHRv
ciBpbiB0aGUgcG9vbCBieSBmaWxlIG5hbWUuICBSZXR1cm5zIE5VTEwgaWYgbm90Ci0gIC8vIGZv
dW5kLgotICBjb25zdCBGaWxlRGVzY3JpcHRvciogRmluZEZpbGVCeU5hbWUoY29uc3Qgc3RyaW5n
JiBuYW1lKSBjb25zdDsKLQotICAvLyBGaW5kIHRoZSBGaWxlRGVzY3JpcHRvciBpbiB0aGUgcG9v
bCB3aGljaCBkZWZpbmVzIHRoZSBnaXZlbiBzeW1ib2wuCi0gIC8vIElmIGFueSBvZiB0aGUgRmlu
ZCpCeU5hbWUoKSBtZXRob2RzIGJlbG93IHdvdWxkIHN1Y2NlZWQsIHRoZW4gdGhpcyBpcwotICAv
LyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgdGhhdCBtZXRob2QgYW5kIGNhbGxpbmcgdGhlIHJlc3Vs
dCdzIGZpbGUoKSBtZXRob2QuCi0gIC8vIE90aGVyd2lzZSB0aGlzIHJldHVybnMgTlVMTC4KLSAg
Y29uc3QgRmlsZURlc2NyaXB0b3IqIEZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbCgKLSAgICAgIGNv
bnN0IHN0cmluZyYgc3ltYm9sX25hbWUpIGNvbnN0OwotCi0gIC8vIExvb2tpbmcgdXAgZGVzY3Jp
cHRvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIFRo
ZXNlIGZpbmQgZGVzY3JpcHRvcnMgYnkgZnVsbHktcXVhbGlmaWVkIG5hbWUuICBUaGVzZSB3aWxs
IGZpbmQgYm90aAotICAvLyB0b3AtbGV2ZWwgZGVzY3JpcHRvcnMgYW5kIG5lc3RlZCBkZXNjcmlw
dG9ycy4gIFRoZXkgcmV0dXJuIE5VTEwgaWYgbm90Ci0gIC8vIGZvdW5kLgotCi0gIGNvbnN0IERl
c2NyaXB0b3IqIEZpbmRNZXNzYWdlVHlwZUJ5TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0
OwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIEZpbmRGaWVsZEJ5TmFtZShjb25zdCBzdHJpbmcm
IG5hbWUpIGNvbnN0OwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIEZpbmRFeHRlbnNpb25CeU5h
bWUoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBG
aW5kT25lb2ZCeU5hbWUoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgY29uc3QgRW51bURl
c2NyaXB0b3IqIEZpbmRFbnVtVHlwZUJ5TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0Owot
ICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBGaW5kRW51bVZhbHVlQnlOYW1lKGNvbnN0IHN0
cmluZyYgbmFtZSkgY29uc3Q7Ci0gIGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yKiBGaW5kU2Vydmlj
ZUJ5TmFtZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotICBjb25zdCBNZXRob2REZXNjcmlw
dG9yKiBGaW5kTWV0aG9kQnlOYW1lKGNvbnN0IHN0cmluZyYgbmFtZSkgY29uc3Q7Ci0KLSAgLy8g
RmluZHMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBnaXZlbiB0eXBlIGJ5IG51bWJlci4gIFRoZSBleHRl
bmRlZSBtdXN0IGJlCi0gIC8vIGEgbWVtYmVyIG9mIHRoaXMgRGVzY3JpcHRvclBvb2wgb3Igb25l
IG9mIGl0cyB1bmRlcmxheXMuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogRmluZEV4dGVuc2lv
bkJ5TnVtYmVyKGNvbnN0IERlc2NyaXB0b3IqIGV4dGVuZGVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyKSBjb25zdDsKLQotICAvLyBG
aW5kcyBleHRlbnNpb25zIG9mIGV4dGVuZGVlLiBUaGUgZXh0ZW5zaW9ucyB3aWxsIGJlIGFwcGVu
ZGVkIHRvCi0gIC8vIG91dCBpbiBhbiB1bmRlZmluZWQgb3JkZXIuIE9ubHkgZXh0ZW5zaW9ucyBk
ZWZpbmVkIGRpcmVjdGx5IGluCi0gIC8vIHRoaXMgRGVzY3JpcHRvclBvb2wgb3Igb25lIG9mIGl0
cyB1bmRlcmxheXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUKLSAgLy8gZm91bmQ6IGV4dGVuc2lvbnMg
ZGVmaW5lZCBpbiB0aGUgZmFsbGJhY2sgZGF0YWJhc2UgbWlnaHQgbm90IGJlIGZvdW5kCi0gIC8v
IGRlcGVuZGluZyBvbiB0aGUgZGF0YWJhc2UgaW1wbGVtZW50YXRpb24uCi0gIHZvaWQgRmluZEFs
bEV4dGVuc2lvbnMoY29uc3QgRGVzY3JpcHRvciogZXh0ZW5kZWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4qIG91dCkgY29uc3Q7
Ci0KLSAgLy8gQnVpbGRpbmcgZGVzY3JpcHRvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBXaGVuIGNvbnZlcnRpbmcgYSBGaWxlRGVzY3JpcHRv
clByb3RvIHRvIGEgRmlsZURlc2NyaXB0b3IsIHZhcmlvdXMKLSAgLy8gZXJyb3JzIG1pZ2h0IGJl
IGRldGVjdGVkIGluIHRoZSBpbnB1dC4gIFRoZSBjYWxsZXIgbWF5IGhhbmRsZSB0aGVzZQotICAv
LyBwcm9ncmFtbWF0aWNhbGx5IGJ5IGltcGxlbWVudGluZyBhbiBFcnJvckNvbGxlY3Rvci4KLSAg
Y2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIEVycm9yQ29sbGVjdG9yIHsKLSAgIHB1YmxpYzoKLSAg
ICBpbmxpbmUgRXJyb3JDb2xsZWN0b3IoKSB7fQotICAgIHZpcnR1YWwgfkVycm9yQ29sbGVjdG9y
KCk7Ci0KLSAgICAvLyBUaGVzZSBjb25zdGFudHMgc3BlY2lmeSB3aGF0IGV4YWN0IHBhcnQgb2Yg
dGhlIGNvbnN0cnVjdCBpcyBicm9rZW4uCi0gICAgLy8gVGhpcyBpcyB1c2VmdWwgZS5nLiBmb3Ig
bWFwcGluZyB0aGUgZXJyb3IgYmFjayB0byBhbiBleGFjdCBsb2NhdGlvbgotICAgIC8vIGluIGEg
LnByb3RvIGZpbGUuCi0gICAgZW51bSBFcnJvckxvY2F0aW9uIHsKLSAgICAgIE5BTUUsICAgICAg
ICAgICAgICAvLyB0aGUgc3ltYm9sIG5hbWUsIG9yIHRoZSBwYWNrYWdlIG5hbWUgZm9yIGZpbGVz
Ci0gICAgICBOVU1CRVIsICAgICAgICAgICAgLy8gZmllbGQgb3IgZXh0ZW5zaW9uIHJhbmdlIG51
bWJlcgotICAgICAgVFlQRSwgICAgICAgICAgICAgIC8vIGZpZWxkIHR5cGUKLSAgICAgIEVYVEVO
REVFLCAgICAgICAgICAvLyBmaWVsZCBleHRlbmRlZQotICAgICAgREVGQVVMVF9WQUxVRSwgICAg
IC8vIGZpZWxkIGRlZmF1bHQgdmFsdWUKLSAgICAgIElOUFVUX1RZUEUsICAgICAgICAvLyBtZXRo
b2QgaW5wdXQgdHlwZQotICAgICAgT1VUUFVUX1RZUEUsICAgICAgIC8vIG1ldGhvZCBvdXRwdXQg
dHlwZQotICAgICAgT1BUSU9OX05BTUUsICAgICAgIC8vIG5hbWUgaW4gYXNzaWdubWVudAotICAg
ICAgT1BUSU9OX1ZBTFVFLCAgICAgIC8vIHZhbHVlIGluIG9wdGlvbiBhc3NpZ25tZW50Ci0gICAg
ICBPVEhFUiAgICAgICAgICAgICAgLy8gc29tZSBvdGhlciBwcm9ibGVtCi0gICAgfTsKLQotICAg
IC8vIFJlcG9ydHMgYW4gZXJyb3IgaW4gdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8uIFVzZSB0aGlz
IGZ1bmN0aW9uIGlmIHRoZQotICAgIC8vIHByb2JsZW0gb2NjdXJyZWQgc2hvdWxkIGludGVycnVw
dCBidWlsZGluZyB0aGUgRmlsZURlc2NyaXB0b3JQcm90by4KLSAgICB2aXJ0dWFsIHZvaWQgQWRk
RXJyb3IoCi0gICAgICBjb25zdCBzdHJpbmcmIGZpbGVuYW1lLCAgICAgIC8vIEZpbGUgbmFtZSBp
biB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuCi0gICAgICBjb25zdCBzdHJpbmcmIGVsZW1lbnRf
bmFtZSwgIC8vIEZ1bGwgbmFtZSBvZiB0aGUgZXJyb25lb3VzIGVsZW1lbnQuCi0gICAgICBjb25z
dCBNZXNzYWdlKiBkZXNjcmlwdG9yLCAgIC8vIERlc2NyaXB0b3Igb2YgdGhlIGVycm9uZW91cyBl
bGVtZW50LgotICAgICAgRXJyb3JMb2NhdGlvbiBsb2NhdGlvbiwgICAgICAvLyBPbmUgb2YgdGhl
IGxvY2F0aW9uIGNvbnN0YW50cywgYWJvdmUuCi0gICAgICBjb25zdCBzdHJpbmcmIG1lc3NhZ2Ug
ICAgICAgIC8vIEh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuCi0gICAgICApID0gMDsKLQot
ICAgIC8vIFJlcG9ydHMgYSB3YXJuaW5nIGluIHRoZSBGaWxlRGVzY3JpcHRvclByb3RvLiBVc2Ug
dGhpcyBmdW5jdGlvbiBpZiB0aGUKLSAgICAvLyBwcm9ibGVtIG9jY3VycmVkIHNob3VsZCBOT1Qg
aW50ZXJydXB0IGJ1aWxkaW5nIHRoZSBGaWxlRGVzY3JpcHRvclByb3RvLgotICAgIHZpcnR1YWwg
dm9pZCBBZGRXYXJuaW5nKAotICAgICAgY29uc3Qgc3RyaW5nJiAvKmZpbGVuYW1lKi8sICAgICAg
Ly8gRmlsZSBuYW1lIGluIHdoaWNoIHRoZSBlcnJvciBvY2N1cnJlZC4KLSAgICAgIGNvbnN0IHN0
cmluZyYgLyplbGVtZW50X25hbWUqLywgIC8vIEZ1bGwgbmFtZSBvZiB0aGUgZXJyb25lb3VzIGVs
ZW1lbnQuCi0gICAgICBjb25zdCBNZXNzYWdlKiAvKmRlc2NyaXB0b3IqLywgICAvLyBEZXNjcmlw
dG9yIG9mIHRoZSBlcnJvbmVvdXMgZWxlbWVudC4KLSAgICAgIEVycm9yTG9jYXRpb24gLypsb2Nh
dGlvbiovLCAgICAgIC8vIE9uZSBvZiB0aGUgbG9jYXRpb24gY29uc3RhbnRzLCBhYm92ZS4KLSAg
ICAgIGNvbnN0IHN0cmluZyYgLyptZXNzYWdlKi8gICAgICAgIC8vIEh1bWFuLXJlYWRhYmxlIGVy
cm9yIG1lc3NhZ2UuCi0gICAgICApIHt9Ci0KLSAgIHByaXZhdGU6Ci0gICAgR09PR0xFX0RJU0FM
TE9XX0VWSUxfQ09OU1RSVUNUT1JTKEVycm9yQ29sbGVjdG9yKTsKLSAgfTsKLQotICAvLyBDb252
ZXJ0IHRoZSBGaWxlRGVzY3JpcHRvclByb3RvIHRvIHJlYWwgZGVzY3JpcHRvcnMgYW5kIHBsYWNl
IHRoZW0gaW4KLSAgLy8gdGhpcyBEZXNjcmlwdG9yUG9vbC4gIEFsbCBkZXBlbmRlbmNpZXMgb2Yg
dGhlIGZpbGUgbXVzdCBhbHJlYWR5IGJlIGluCi0gIC8vIHRoZSBwb29sLiAgUmV0dXJucyB0aGUg
cmVzdWx0aW5nIEZpbGVEZXNjcmlwdG9yLCBvciBOVUxMIGlmIHRoZXJlIHdlcmUKLSAgLy8gcHJv
YmxlbXMgd2l0aCB0aGUgaW5wdXQgKGUuZy4gdGhlIG1lc3NhZ2Ugd2FzIGludmFsaWQsIG9yIGRl
cGVuZGVuY2llcwotICAvLyB3ZXJlIG1pc3NpbmcpLiAgRGV0YWlscyBhYm91dCB0aGUgZXJyb3Jz
IGFyZSB3cml0dGVuIHRvIEdPT0dMRV9MT0coRVJST1IpLgotICBjb25zdCBGaWxlRGVzY3JpcHRv
ciogQnVpbGRGaWxlKGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3RvKTsKLQotICAvLyBT
YW1lIGFzIEJ1aWxkRmlsZSgpIGV4Y2VwdCBlcnJvcnMgYXJlIHNlbnQgdG8gdGhlIGdpdmVuIEVy
cm9yQ29sbGVjdG9yLgotICBjb25zdCBGaWxlRGVzY3JpcHRvciogQnVpbGRGaWxlQ29sbGVjdGlu
Z0Vycm9ycygKLSAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBwcm90bywKLSAgICBFcnJv
ckNvbGxlY3RvciogZXJyb3JfY29sbGVjdG9yKTsKLQotICAvLyBCeSBkZWZhdWx0LCBpdCBpcyBh
biBlcnJvciBpZiBhIEZpbGVEZXNjcmlwdG9yUHJvdG8gY29udGFpbnMgcmVmZXJlbmNlcwotICAv
LyB0byB0eXBlcyBvciBvdGhlciBmaWxlcyB0aGF0IGFyZSBub3QgZm91bmQgaW4gdGhlIERlc2Ny
aXB0b3JQb29sIChvciBpdHMKLSAgLy8gYmFja2luZyBEZXNjcmlwdG9yRGF0YWJhc2UsIGlmIGFu
eSkuICBJZiB5b3UgY2FsbAotICAvLyBBbGxvd1Vua25vd25EZXBlbmRlbmNpZXMoKSwgaG93ZXZl
ciwgdGhlbiB1bmtub3duIHR5cGVzIGFuZCBmaWxlcwotICAvLyB3aWxsIGJlIHJlcGxhY2VkIGJ5
IHBsYWNlaG9sZGVyIGRlc2NyaXB0b3JzICh3aGljaCBjYW4gYmUgaWRlbnRpZmllZCBieQotICAv
LyB0aGUgaXNfcGxhY2Vob2xkZXIoKSBtZXRob2QpLiAgVGhpcyBjYW4gYWxsb3cgeW91IHRvCi0g
IC8vIHBlcmZvcm0gc29tZSB1c2VmdWwgb3BlcmF0aW9ucyB3aXRoIGEgLnByb3RvIGZpbGUgZXZl
biBpZiB5b3UgZG8gbm90Ci0gIC8vIGhhdmUgYWNjZXNzIHRvIG90aGVyIC5wcm90byBmaWxlcyBv
biB3aGljaCBpdCBkZXBlbmRzLiAgSG93ZXZlciwgc29tZQotICAvLyBoZXVyaXN0aWNzIG11c3Qg
YmUgdXNlZCB0byBmaWxsIGluIHRoZSBnYXBzIGluIGluZm9ybWF0aW9uLCBhbmQgdGhlc2UKLSAg
Ly8gY2FuIGxlYWQgdG8gZGVzY3JpcHRvcnMgd2hpY2ggYXJlIGluYWNjdXJhdGUuICBGb3IgZXhh
bXBsZSwgdGhlCi0gIC8vIERlc2NyaXB0b3JQb29sIG1heSBiZSBmb3JjZWQgdG8gZ3Vlc3Mgd2hl
dGhlciBhbiB1bmtub3duIHR5cGUgaXMgYSBtZXNzYWdlCi0gIC8vIG9yIGFuIGVudW0sIGFzIHdl
bGwgYXMgd2hhdCBwYWNrYWdlIGl0IHJlc2lkZXMgaW4uICBGdXJ0aGVybW9yZSwKLSAgLy8gcGxh
Y2Vob2xkZXIgdHlwZXMgd2lsbCBub3QgYmUgZGlzY292ZXJhYmxlIHZpYSBGaW5kTWVzc2FnZVR5
cGVCeU5hbWUoKQotICAvLyBhbmQgc2ltaWxhciBtZXRob2RzLCB3aGljaCBjb3VsZCBjb25mdXNl
IHNvbWUgZGVzY3JpcHRvci1iYXNlZCBhbGdvcml0aG1zLgotICAvLyBHZW5lcmFsbHksIHRoZSBy
ZXN1bHRzIG9mIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBoYW5kbGVkIHdpdGggZXh0cmVtZSBjYXJl
LgotICB2b2lkIEFsbG93VW5rbm93bkRlcGVuZGVuY2llcygpIHsgYWxsb3dfdW5rbm93bl8gPSB0
cnVlOyB9Ci0KLSAgLy8gQnkgZGVmYXVsdCwgd2VhayBpbXBvcnRzIGFyZSBhbGxvd2VkIHRvIGJl
IG1pc3NpbmcsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbAotICAvLyB1c2UgYSBwbGFjZWhvbGRlciBm
b3IgdGhlIGRlcGVuZGVuY3kgYW5kIGNvbnZlcnQgdGhlIGZpZWxkIHRvIGJlIGFuIEVtcHR5Ci0g
IC8vIG1lc3NhZ2UgZmllbGQuIElmIHlvdSBjYWxsIEVuZm9yY2VXZWFrRGVwZW5kZW5jaWVzKHRy
dWUpLCBob3dldmVyLCB0aGUKLSAgLy8gRGVzY3JpcHRvclBvb2wgd2lsbCByZXBvcnQgYSBpbXBv
cnQgbm90IGZvdW5kIGVycm9yLgotICB2b2lkIEVuZm9yY2VXZWFrRGVwZW5kZW5jaWVzKGJvb2wg
ZW5mb3JjZSkgeyBlbmZvcmNlX3dlYWtfID0gZW5mb3JjZTsgfQotCi0gIC8vIEludGVybmFsIHN0
dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
IC8vIFRoZXNlIG1ldGhvZHMgTVVTVCBOT1QgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgcHJv
dG8yIGxpYnJhcnkuCi0gIC8vIFRoZXNlIG1ldGhvZHMgbWF5IGNvbnRhaW4gaGlkZGVuIHBpdGZh
bGxzIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhCi0gIC8vIGZ1dHVyZSBsaWJyYXJ5IHZlcnNpb24u
Ci0KLSAgLy8gQ3JlYXRlIGEgRGVzY3JpcHRvclBvb2wgd2hpY2ggaXMgb3ZlcmxhaWQgb24gdG9w
IG9mIHNvbWUgb3RoZXIgcG9vbC4KLSAgLy8gSWYgeW91IHNlYXJjaCBmb3IgYSBkZXNjcmlwdG9y
IGluIHRoZSBvdmVybGF5IGFuZCBpdCBpcyBub3QgZm91bmQsIHRoZQotICAvLyB1bmRlcmxheSB3
aWxsIGJlIHNlYXJjaGVkIGFzIGEgYmFja3VwLiAgSWYgdGhlIHVuZGVybGF5IGhhcyBpdHMgb3du
Ci0gIC8vIHVuZGVybGF5LCB0aGF0IHdpbGwgYmUgc2VhcmNoZWQgbmV4dCwgYW5kIHNvIG9uLiAg
VGhpcyBhbHNvIG1lYW5zIHRoYXQKLSAgLy8gZmlsZXMgYnVpbHQgaW4gdGhlIG92ZXJsYXkgd2ls
bCBiZSBjcm9zcy1saW5rZWQgd2l0aCB0aGUgdW5kZXJsYXkncwotICAvLyBkZXNjcmlwdG9ycyBp
ZiBuZWNlc3NhcnkuICBUaGUgdW5kZXJsYXkgcmVtYWlucyBwcm9wZXJ0eSBvZiB0aGUgY2FsbGVy
OwotICAvLyBpdCBtdXN0IHJlbWFpbiB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBuZXds
eS1jb25zdHJ1Y3RlZCBwb29sLgotICAvLwotICAvLyBFeGFtcGxlOiAgU2F5IHlvdSB3YW50IHRv
IHBhcnNlIGEgLnByb3RvIGZpbGUgYXQgcnVudGltZSBpbiBvcmRlciB0byB1c2UKLSAgLy8gaXRz
IHR5cGUgd2l0aCBhIER5bmFtaWNNZXNzYWdlLiAgU2F5IHRoaXMgLnByb3RvIGZpbGUgaGFzIGRl
cGVuZGVuY2llcywKLSAgLy8gYnV0IHlvdSBrbm93IHRoYXQgYWxsIHRoZSBkZXBlbmRlbmNpZXMg
d2lsbCBiZSB0aGluZ3MgdGhhdCBhcmUgYWxyZWFkeQotICAvLyBjb21waWxlZCBpbnRvIHRoZSBi
aW5hcnkuICBGb3IgZWFzZSBvZiB1c2UsIHlvdSdkIGxpa2UgdG8gbG9hZCB0aGUgdHlwZXMKLSAg
Ly8gcmlnaHQgb3V0IG9mIGdlbmVyYXRlZF9wb29sKCkgcmF0aGVyIHRoYW4gaGF2ZSB0byBwYXJz
ZSByZWR1bmRhbnQgY29waWVzCi0gIC8vIG9mIGFsbCB0aGVzZSAucHJvdG9zIGFuZCBydW50aW1l
LiAgQnV0LCB5b3UgZG9uJ3Qgd2FudCB0byBhZGQgdGhlIHBhcnNlZAotICAvLyB0eXBlcyBkaXJl
Y3RseSBpbnRvIGdlbmVyYXRlZF9wb29sKCk6IHRoaXMgaXMgbm90IGFsbG93ZWQsIGFuZCB3b3Vs
ZCBiZQotICAvLyBiYWQgZGVzaWduIGFueXdheS4gIFNvLCBpbnN0ZWFkLCB5b3UgY291bGQgdXNl
IGdlbmVyYXRlZF9wb29sKCkgYXMgYW4KLSAgLy8gdW5kZXJsYXkgZm9yIGEgbmV3IERlc2NyaXB0
b3JQb29sIGluIHdoaWNoIHlvdSBhZGQgb25seSB0aGUgbmV3IGZpbGUuCi0gIC8vCi0gIC8vIFdB
Uk5JTkc6ICBVc2Ugb2YgdW5kZXJsYXlzIGNhbiBsZWFkIHRvIG1hbnkgc3VidGxlIGdvdGNoYXMu
ICBJbnN0ZWFkLAotICAvLyAgIHRyeSB0byBmb3JtdWxhdGUgd2hhdCB5b3Ugd2FudCB0byBkbyBp
biB0ZXJtcyBvZiBEZXNjcmlwdG9yRGF0YWJhc2VzLgotICBleHBsaWNpdCBEZXNjcmlwdG9yUG9v
bChjb25zdCBEZXNjcmlwdG9yUG9vbCogdW5kZXJsYXkpOwotCi0gIC8vIENhbGxlZCBieSBnZW5l
cmF0ZWQgY2xhc3NlcyBhdCBpbml0IHRpbWUgdG8gYWRkIHRoZWlyIGRlc2NyaXB0b3JzIHRvCi0g
IC8vIGdlbmVyYXRlZF9wb29sLiAgRG8gTk9UIGNhbGwgdGhpcyBpbiB5b3VyIG93biBjb2RlISAg
ZmlsZW5hbWUgbXVzdCBiZSBhCi0gIC8vIHBlcm1hbmVudCBzdHJpbmcgKGUuZy4gYSBzdHJpbmcg
bGl0ZXJhbCkuCi0gIHN0YXRpYyB2b2lkIEludGVybmFsQWRkR2VuZXJhdGVkRmlsZSgKLSAgICAg
IGNvbnN0IHZvaWQqIGVuY29kZWRfZmlsZV9kZXNjcmlwdG9yLCBpbnQgc2l6ZSk7Ci0KLQotICAv
LyBGb3IgaW50ZXJuYWwgdXNlIG9ubHk6ICBHZXRzIGEgbm9uLWNvbnN0IHBvaW50ZXIgdG8gdGhl
IGdlbmVyYXRlZCBwb29sLgotICAvLyBUaGlzIGlzIGNhbGxlZCBhdCBzdGF0aWMtaW5pdGlhbGl6
YXRpb24gdGltZSBvbmx5LCBzbyB0aHJlYWQtc2FmZXR5IGlzCi0gIC8vIG5vdCBhIGNvbmNlcm4u
ICBJZiBib3RoIGFuIHVuZGVybGF5IGFuZCBhIGZhbGxiYWNrIGRhdGFiYXNlIGFyZSBwcmVzZW50
LAotICAvLyB0aGUgdW5kZXJsYXkgdGFrZXMgcHJlY2VkZW5jZS4KLSAgc3RhdGljIERlc2NyaXB0
b3JQb29sKiBpbnRlcm5hbF9nZW5lcmF0ZWRfcG9vbCgpOwotCi0gIC8vIEZvciBpbnRlcm5hbCB1
c2Ugb25seTogIENoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIEJ1aWxkRmlsZSgpIHN1Y2ggdGhhdCBp
dAotICAvLyBhbGxvd3MgdGhlIGZpbGUgdG8gbWFrZSByZWZlcmVuY2UgdG8gbWVzc2FnZSB0eXBl
cyBkZWNsYXJlZCBpbiBvdGhlciBmaWxlcwotICAvLyB3aGljaCBpdCBkaWQgbm90IG9mZmljaWFs
bHkgZGVjbGFyZSBhcyBkZXBlbmRlbmNpZXMuCi0gIHZvaWQgSW50ZXJuYWxEb250RW5mb3JjZURl
cGVuZGVuY2llcygpOwotCi0gIC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAgdm9pZCBpbnRl
cm5hbF9zZXRfdW5kZXJsYXkoY29uc3QgRGVzY3JpcHRvclBvb2wqIHVuZGVybGF5KSB7Ci0gICAg
dW5kZXJsYXlfID0gdW5kZXJsYXk7Ci0gIH0KLQotICAvLyBGb3IgaW50ZXJuYWwgKHVuaXQgdGVz
dCkgdXNlIG9ubHk6ICBSZXR1cm5zIHRydWUgaWYgYSBGaWxlRGVzY3JpcHRvciBoYXMKLSAgLy8g
YmVlbiBjb25zdHJ1Y3RlZCBmb3IgdGhlIGdpdmVuIGZpbGUsIGZhbHNlIG90aGVyd2lzZS4gIFVz
ZWZ1bCBmb3IgdGVzdGluZwotICAvLyBsYXp5IGRlc2NyaXB0b3IgaW5pdGlhbGl6YXRpb24gYmVo
YXZpb3IuCi0gIGJvb2wgSW50ZXJuYWxJc0ZpbGVMb2FkZWQoY29uc3Qgc3RyaW5nJiBmaWxlbmFt
ZSkgY29uc3Q7Ci0KLQotICAvLyBBZGQgYSBmaWxlIHRvIHVudXNlZF9pbXBvcnRfdHJhY2tfZmls
ZXNfLiBEZXNjcmlwdG9yQnVpbGRlciB3aWxsIGxvZwotICAvLyB3YXJuaW5ncyBmb3IgdGhvc2Ug
ZmlsZXMgaWYgdGhlcmUgaXMgYW55IHVudXNlZCBpbXBvcnQuCi0gIHZvaWQgQWRkVW51c2VkSW1w
b3J0VHJhY2tGaWxlKGNvbnN0IHN0cmluZyYgZmlsZV9uYW1lKTsKLSAgdm9pZCBDbGVhclVudXNl
ZEltcG9ydFRyYWNrRmlsZXMoKTsKLQotIHByaXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyBEZXNjcmlw
dG9yOwotICBmcmllbmQgY2xhc3MgRmllbGREZXNjcmlwdG9yOwotICBmcmllbmQgY2xhc3MgRW51
bURlc2NyaXB0b3I7Ci0gIGZyaWVuZCBjbGFzcyBTZXJ2aWNlRGVzY3JpcHRvcjsKLSAgZnJpZW5k
IGNsYXNzIEZpbGVEZXNjcmlwdG9yOwotICBmcmllbmQgY2xhc3MgRGVzY3JpcHRvckJ1aWxkZXI7
Ci0gIGZyaWVuZCBjbGFzcyBGaWxlRGVzY3JpcHRvclRhYmxlczsKLQotICAvLyBSZXR1cm4gdHJ1
ZSBpZiB0aGUgZ2l2ZW4gbmFtZSBpcyBhIHN1Yi1zeW1ib2wgb2YgYW55IG5vbi1wYWNrYWdlCi0g
IC8vIGRlc2NyaXB0b3IgdGhhdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZGVzY3JpcHRvciBwb29s
LiAgKFRoZSBmdWxsCi0gIC8vIGRlZmluaXRpb24gb2Ygc3VjaCB0eXBlcyBpcyBhbHJlYWR5IGtu
b3duLikKLSAgYm9vbCBJc1N1YlN5bWJvbE9mQnVpbHRUeXBlKGNvbnN0IHN0cmluZyYgbmFtZSkg
Y29uc3Q7Ci0KLSAgLy8gVHJpZXMgdG8gZmluZCBzb21ldGhpbmcgaW4gdGhlIGZhbGxiYWNrIGRh
dGFiYXNlIGFuZCBsaW5rIGluIHRoZQotICAvLyBjb3JyZXNwb25kaW5nIHByb3RvIGZpbGUuICBS
ZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgaW4gd2hpY2ggY2FzZQotICAvLyB0aGUgY2FsbGVy
IHNob3VsZCBzZWFyY2ggZm9yIHRoZSB0aGluZyBhZ2Fpbi4gIFRoZXNlIGFyZSBkZWNsYXJlZAot
ICAvLyBjb25zdCBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCBieSAoc2VtYW50aWNhbGx5KSBjb25z
dCBtZXRob2RzLgotICBib29sIFRyeUZpbmRGaWxlSW5GYWxsYmFja0RhdGFiYXNlKGNvbnN0IHN0
cmluZyYgbmFtZSkgY29uc3Q7Ci0gIGJvb2wgVHJ5RmluZFN5bWJvbEluRmFsbGJhY2tEYXRhYmFz
ZShjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotICBib29sIFRyeUZpbmRFeHRlbnNpb25JbkZh
bGxiYWNrRGF0YWJhc2UoY29uc3QgRGVzY3JpcHRvciogY29udGFpbmluZ190eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpZWxkX251bWJlcikgY29u
c3Q7Ci0KLSAgLy8gTGlrZSBCdWlsZEZpbGUoKSBidXQgY2FsbGVkIGludGVybmFsbHkgd2hlbiB0
aGUgZmlsZSBoYXMgYmVlbiBsb2FkZWQgZnJvbQotICAvLyBmYWxsYmFja19kYXRhYmFzZV8uICBE
ZWNsYXJlZCBjb25zdCBiZWNhdXNlIGl0IGlzIGNhbGxlZCBieSAoc2VtYW50aWNhbGx5KQotICAv
LyBjb25zdCBtZXRob2RzLgotICBjb25zdCBGaWxlRGVzY3JpcHRvciogQnVpbGRGaWxlRnJvbURh
dGFiYXNlKAotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIHByb3RvKSBjb25zdDsKLQot
ICAvLyBJZiBmYWxsYmFja19kYXRhYmFzZV8gaXMgTlVMTCwgdGhpcyBpcyBOVUxMLiAgT3RoZXJ3
aXNlLCB0aGlzIGlzIGEgbXV0ZXgKLSAgLy8gd2hpY2ggbXVzdCBiZSBsb2NrZWQgd2hpbGUgYWNj
ZXNzaW5nIHRhYmxlc18uCi0gIE11dGV4KiBtdXRleF87Ci0KLSAgLy8gU2VlIGNvbnN0cnVjdG9y
LgotICBEZXNjcmlwdG9yRGF0YWJhc2UqIGZhbGxiYWNrX2RhdGFiYXNlXzsKLSAgRXJyb3JDb2xs
ZWN0b3IqIGRlZmF1bHRfZXJyb3JfY29sbGVjdG9yXzsKLSAgY29uc3QgRGVzY3JpcHRvclBvb2wq
IHVuZGVybGF5XzsKLQotICAvLyBUaGlzIGNsYXNzIGNvbnRhaW5zIGEgbG90IG9mIGhhc2ggbWFw
cyB3aXRoIGNvbXBsaWNhdGVkIHR5cGVzIHRoYXQKLSAgLy8gd2UnZCBsaWtlIHRvIGtlZXAgb3V0
IG9mIHRoZSBoZWFkZXIuCi0gIGNsYXNzIFRhYmxlczsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2Nv
cGVkX3B0cjxUYWJsZXM+IHRhYmxlc187Ci0KLSAgYm9vbCBlbmZvcmNlX2RlcGVuZGVuY2llc187
Ci0gIGJvb2wgYWxsb3dfdW5rbm93bl87Ci0gIGJvb2wgZW5mb3JjZV93ZWFrXzsKLSAgc3RkOjpz
ZXQ8c3RyaW5nPiB1bnVzZWRfaW1wb3J0X3RyYWNrX2ZpbGVzXzsKLQotICBHT09HTEVfRElTQUxM
T1dfRVZJTF9DT05TVFJVQ1RPUlMoRGVzY3JpcHRvclBvb2wpOwotfTsKLQotLy8gaW5saW5lIG1l
dGhvZHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi0vLyBUaGVzZSBtYWNyb3MgbWFrZXMgdGhpcyByZXBldGl0aXZlIGNvZGUgbW9yZSByZWFk
YWJsZS4KLSNkZWZpbmUgUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKENMQVNTLCBGSUVMRCwgVFlQ
RSkgXAotICBpbmxpbmUgVFlQRSBDTEFTUzo6RklFTEQoKSBjb25zdCB7IHJldHVybiBGSUVMRCMj
XzsgfQotCi0vLyBTdHJpbmdzIGZpZWxkcyBhcmUgc3RvcmVkIGFzIHBvaW50ZXJzIGJ1dCByZXR1
cm5lZCBhcyBjb25zdCByZWZlcmVuY2VzLgotI2RlZmluZSBQUk9UT0JVRl9ERUZJTkVfU1RSSU5H
X0FDQ0VTU09SKENMQVNTLCBGSUVMRCkgXAotICBpbmxpbmUgY29uc3Qgc3RyaW5nJiBDTEFTUzo6
RklFTEQoKSBjb25zdCB7IHJldHVybiAqRklFTEQjI187IH0KLQotLy8gQXJyYXlzIHRha2UgYW4g
aW5kZXggcGFyYW1ldGVyLCBvYnZpb3VzbHkuCi0jZGVmaW5lIFBST1RPQlVGX0RFRklORV9BUlJB
WV9BQ0NFU1NPUihDTEFTUywgRklFTEQsIFRZUEUpIFwKLSAgaW5saW5lIFRZUEUgQ0xBU1M6OkZJ
RUxEKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gRklFTEQjI3NfICsgaW5kZXg7IH0KLQotI2Rl
ZmluZSBQUk9UT0JVRl9ERUZJTkVfT1BUSU9OU19BQ0NFU1NPUihDTEFTUywgVFlQRSkgXAotICBp
bmxpbmUgY29uc3QgVFlQRSYgQ0xBU1M6Om9wdGlvbnMoKSBjb25zdCB7IHJldHVybiAqb3B0aW9u
c187IH0KLQotUFJPVE9CVUZfREVGSU5FX1NUUklOR19BQ0NFU1NPUihEZXNjcmlwdG9yLCBuYW1l
KQotUFJPVE9CVUZfREVGSU5FX1NUUklOR19BQ0NFU1NPUihEZXNjcmlwdG9yLCBmdWxsX25hbWUp
Ci1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRGVzY3JpcHRvciwgZmlsZSwgY29uc3QgRmlsZURl
c2NyaXB0b3IqKQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKERlc2NyaXB0b3IsIGNvbnRhaW5p
bmdfdHlwZSwgY29uc3QgRGVzY3JpcHRvciopCi0KLVBST1RPQlVGX0RFRklORV9BQ0NFU1NPUihE
ZXNjcmlwdG9yLCBmaWVsZF9jb3VudCwgaW50KQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKERl
c2NyaXB0b3IsIG9uZW9mX2RlY2xfY291bnQsIGludCkKLVBST1RPQlVGX0RFRklORV9BQ0NFU1NP
UihEZXNjcmlwdG9yLCBuZXN0ZWRfdHlwZV9jb3VudCwgaW50KQotUFJPVE9CVUZfREVGSU5FX0FD
Q0VTU09SKERlc2NyaXB0b3IsIGVudW1fdHlwZV9jb3VudCwgaW50KQotCi1QUk9UT0JVRl9ERUZJ
TkVfQVJSQVlfQUNDRVNTT1IoRGVzY3JpcHRvciwgZmllbGQsIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciopCi1QUk9UT0JVRl9ERUZJTkVfQVJSQVlfQUNDRVNTT1IoRGVzY3JpcHRvciwgb25lb2ZfZGVj
bCwgY29uc3QgT25lb2ZEZXNjcmlwdG9yKikKLVBST1RPQlVGX0RFRklORV9BUlJBWV9BQ0NFU1NP
UihEZXNjcmlwdG9yLCBuZXN0ZWRfdHlwZSwgY29uc3QgRGVzY3JpcHRvciopCi1QUk9UT0JVRl9E
RUZJTkVfQVJSQVlfQUNDRVNTT1IoRGVzY3JpcHRvciwgZW51bV90eXBlLCBjb25zdCBFbnVtRGVz
Y3JpcHRvciopCi0KLVBST1RPQlVGX0RFRklORV9BQ0NFU1NPUihEZXNjcmlwdG9yLCBleHRlbnNp
b25fcmFuZ2VfY291bnQsIGludCkKLVBST1RPQlVGX0RFRklORV9BQ0NFU1NPUihEZXNjcmlwdG9y
LCBleHRlbnNpb25fY291bnQsIGludCkKLVBST1RPQlVGX0RFRklORV9BUlJBWV9BQ0NFU1NPUihE
ZXNjcmlwdG9yLCBleHRlbnNpb25fcmFuZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRGVzY3JpcHRvcjo6RXh0ZW5zaW9uUmFuZ2UqKQotUFJPVE9CVUZfREVGSU5FX0FS
UkFZX0FDQ0VTU09SKERlc2NyaXB0b3IsIGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqKQotCi1QUk9UT0JVRl9ERUZJTkVfQUND
RVNTT1IoRGVzY3JpcHRvciwgcmVzZXJ2ZWRfcmFuZ2VfY291bnQsIGludCkKLVBST1RPQlVGX0RF
RklORV9BUlJBWV9BQ0NFU1NPUihEZXNjcmlwdG9yLCByZXNlcnZlZF9yYW5nZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9yOjpSZXNlcnZlZFJhbmdlKikK
LVBST1RPQlVGX0RFRklORV9BQ0NFU1NPUihEZXNjcmlwdG9yLCByZXNlcnZlZF9uYW1lX2NvdW50
LCBpbnQpCi0KLVBST1RPQlVGX0RFRklORV9PUFRJT05TX0FDQ0VTU09SKERlc2NyaXB0b3IsIE1l
c3NhZ2VPcHRpb25zKQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKERlc2NyaXB0b3IsIGlzX3Bs
YWNlaG9sZGVyLCBib29sKQotCi1QUk9UT0JVRl9ERUZJTkVfU1RSSU5HX0FDQ0VTU09SKEZpZWxk
RGVzY3JpcHRvciwgbmFtZSkKLVBST1RPQlVGX0RFRklORV9TVFJJTkdfQUNDRVNTT1IoRmllbGRE
ZXNjcmlwdG9yLCBmdWxsX25hbWUpCi1QUk9UT0JVRl9ERUZJTkVfU1RSSU5HX0FDQ0VTU09SKEZp
ZWxkRGVzY3JpcHRvciwganNvbl9uYW1lKQotUFJPVE9CVUZfREVGSU5FX1NUUklOR19BQ0NFU1NP
UihGaWVsZERlc2NyaXB0b3IsIGxvd2VyY2FzZV9uYW1lKQotUFJPVE9CVUZfREVGSU5FX1NUUklO
R19BQ0NFU1NPUihGaWVsZERlc2NyaXB0b3IsIGNhbWVsY2FzZV9uYW1lKQotUFJPVE9CVUZfREVG
SU5FX0FDQ0VTU09SKEZpZWxkRGVzY3JpcHRvciwgZmlsZSwgY29uc3QgRmlsZURlc2NyaXB0b3Iq
KQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKEZpZWxkRGVzY3JpcHRvciwgbnVtYmVyLCBpbnQp
Ci1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmllbGREZXNjcmlwdG9yLCBpc19leHRlbnNpb24s
IGJvb2wpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmllbGREZXNjcmlwdG9yLCB0eXBlLCBG
aWVsZERlc2NyaXB0b3I6OlR5cGUpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmllbGREZXNj
cmlwdG9yLCBsYWJlbCwgRmllbGREZXNjcmlwdG9yOjpMYWJlbCkKLVBST1RPQlVGX0RFRklORV9B
Q0NFU1NPUihGaWVsZERlc2NyaXB0b3IsIGNvbnRhaW5pbmdfdHlwZSwgY29uc3QgRGVzY3JpcHRv
ciopCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmllbGREZXNjcmlwdG9yLCBjb250YWluaW5n
X29uZW9mLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9uZW9mRGVzY3JpcHRvciop
Ci1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmllbGREZXNjcmlwdG9yLCBpbmRleF9pbl9vbmVv
ZiwgaW50KQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKEZpZWxkRGVzY3JpcHRvciwgZXh0ZW5z
aW9uX3Njb3BlLCBjb25zdCBEZXNjcmlwdG9yKikKLVBST1RPQlVGX0RFRklORV9BQ0NFU1NPUihG
aWVsZERlc2NyaXB0b3IsIG1lc3NhZ2VfdHlwZSwgY29uc3QgRGVzY3JpcHRvciopCi1QUk9UT0JV
Rl9ERUZJTkVfQUNDRVNTT1IoRmllbGREZXNjcmlwdG9yLCBlbnVtX3R5cGUsIGNvbnN0IEVudW1E
ZXNjcmlwdG9yKikKLVBST1RPQlVGX0RFRklORV9PUFRJT05TX0FDQ0VTU09SKEZpZWxkRGVzY3Jp
cHRvciwgRmllbGRPcHRpb25zKQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKEZpZWxkRGVzY3Jp
cHRvciwgaGFzX2RlZmF1bHRfdmFsdWUsIGJvb2wpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1Io
RmllbGREZXNjcmlwdG9yLCBkZWZhdWx0X3ZhbHVlX2ludDMyICwgaW50MzIgKQotUFJPVE9CVUZf
REVGSU5FX0FDQ0VTU09SKEZpZWxkRGVzY3JpcHRvciwgZGVmYXVsdF92YWx1ZV9pbnQ2NCAsIGlu
dDY0ICkKLVBST1RPQlVGX0RFRklORV9BQ0NFU1NPUihGaWVsZERlc2NyaXB0b3IsIGRlZmF1bHRf
dmFsdWVfdWludDMyLCB1aW50MzIpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmllbGREZXNj
cmlwdG9yLCBkZWZhdWx0X3ZhbHVlX3VpbnQ2NCwgdWludDY0KQotUFJPVE9CVUZfREVGSU5FX0FD
Q0VTU09SKEZpZWxkRGVzY3JpcHRvciwgZGVmYXVsdF92YWx1ZV9mbG9hdCAsIGZsb2F0ICkKLVBS
T1RPQlVGX0RFRklORV9BQ0NFU1NPUihGaWVsZERlc2NyaXB0b3IsIGRlZmF1bHRfdmFsdWVfZG91
YmxlLCBkb3VibGUpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmllbGREZXNjcmlwdG9yLCBk
ZWZhdWx0X3ZhbHVlX2Jvb2wgICwgYm9vbCAgKQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKEZp
ZWxkRGVzY3JpcHRvciwgZGVmYXVsdF92YWx1ZV9lbnVtLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqKQotUFJPVE9CVUZfREVGSU5FX1NUUklOR19B
Q0NFU1NPUihGaWVsZERlc2NyaXB0b3IsIGRlZmF1bHRfdmFsdWVfc3RyaW5nKQotCi1QUk9UT0JV
Rl9ERUZJTkVfU1RSSU5HX0FDQ0VTU09SKE9uZW9mRGVzY3JpcHRvciwgbmFtZSkKLVBST1RPQlVG
X0RFRklORV9TVFJJTkdfQUNDRVNTT1IoT25lb2ZEZXNjcmlwdG9yLCBmdWxsX25hbWUpCi1QUk9U
T0JVRl9ERUZJTkVfQUNDRVNTT1IoT25lb2ZEZXNjcmlwdG9yLCBjb250YWluaW5nX3R5cGUsIGNv
bnN0IERlc2NyaXB0b3IqKQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKE9uZW9mRGVzY3JpcHRv
ciwgZmllbGRfY291bnQsIGludCkKLQotUFJPVE9CVUZfREVGSU5FX1NUUklOR19BQ0NFU1NPUihF
bnVtRGVzY3JpcHRvciwgbmFtZSkKLVBST1RPQlVGX0RFRklORV9TVFJJTkdfQUNDRVNTT1IoRW51
bURlc2NyaXB0b3IsIGZ1bGxfbmFtZSkKLVBST1RPQlVGX0RFRklORV9BQ0NFU1NPUihFbnVtRGVz
Y3JpcHRvciwgZmlsZSwgY29uc3QgRmlsZURlc2NyaXB0b3IqKQotUFJPVE9CVUZfREVGSU5FX0FD
Q0VTU09SKEVudW1EZXNjcmlwdG9yLCBjb250YWluaW5nX3R5cGUsIGNvbnN0IERlc2NyaXB0b3Iq
KQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKEVudW1EZXNjcmlwdG9yLCB2YWx1ZV9jb3VudCwg
aW50KQotUFJPVE9CVUZfREVGSU5FX0FSUkFZX0FDQ0VTU09SKEVudW1EZXNjcmlwdG9yLCB2YWx1
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlw
dG9yKikKLVBST1RPQlVGX0RFRklORV9PUFRJT05TX0FDQ0VTU09SKEVudW1EZXNjcmlwdG9yLCBF
bnVtT3B0aW9ucykKLVBST1RPQlVGX0RFRklORV9BQ0NFU1NPUihFbnVtRGVzY3JpcHRvciwgaXNf
cGxhY2Vob2xkZXIsIGJvb2wpCi0KLVBST1RPQlVGX0RFRklORV9TVFJJTkdfQUNDRVNTT1IoRW51
bVZhbHVlRGVzY3JpcHRvciwgbmFtZSkKLVBST1RPQlVGX0RFRklORV9TVFJJTkdfQUNDRVNTT1Io
RW51bVZhbHVlRGVzY3JpcHRvciwgZnVsbF9uYW1lKQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09S
KEVudW1WYWx1ZURlc2NyaXB0b3IsIG51bWJlciwgaW50KQotUFJPVE9CVUZfREVGSU5FX0FDQ0VT
U09SKEVudW1WYWx1ZURlc2NyaXB0b3IsIHR5cGUsIGNvbnN0IEVudW1EZXNjcmlwdG9yKikKLVBS
T1RPQlVGX0RFRklORV9PUFRJT05TX0FDQ0VTU09SKEVudW1WYWx1ZURlc2NyaXB0b3IsIEVudW1W
YWx1ZU9wdGlvbnMpCi0KLVBST1RPQlVGX0RFRklORV9TVFJJTkdfQUNDRVNTT1IoU2VydmljZURl
c2NyaXB0b3IsIG5hbWUpCi1QUk9UT0JVRl9ERUZJTkVfU1RSSU5HX0FDQ0VTU09SKFNlcnZpY2VE
ZXNjcmlwdG9yLCBmdWxsX25hbWUpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoU2VydmljZURl
c2NyaXB0b3IsIGZpbGUsIGNvbnN0IEZpbGVEZXNjcmlwdG9yKikKLVBST1RPQlVGX0RFRklORV9B
Q0NFU1NPUihTZXJ2aWNlRGVzY3JpcHRvciwgbWV0aG9kX2NvdW50LCBpbnQpCi1QUk9UT0JVRl9E
RUZJTkVfQVJSQVlfQUNDRVNTT1IoU2VydmljZURlc2NyaXB0b3IsIG1ldGhvZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yKikKLVBST1RPQlVG
X0RFRklORV9PUFRJT05TX0FDQ0VTU09SKFNlcnZpY2VEZXNjcmlwdG9yLCBTZXJ2aWNlT3B0aW9u
cykKLQotUFJPVE9CVUZfREVGSU5FX1NUUklOR19BQ0NFU1NPUihNZXRob2REZXNjcmlwdG9yLCBu
YW1lKQotUFJPVE9CVUZfREVGSU5FX1NUUklOR19BQ0NFU1NPUihNZXRob2REZXNjcmlwdG9yLCBm
dWxsX25hbWUpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoTWV0aG9kRGVzY3JpcHRvciwgc2Vy
dmljZSwgY29uc3QgU2VydmljZURlc2NyaXB0b3IqKQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09S
KE1ldGhvZERlc2NyaXB0b3IsIGlucHV0X3R5cGUsIGNvbnN0IERlc2NyaXB0b3IqKQotUFJPVE9C
VUZfREVGSU5FX0FDQ0VTU09SKE1ldGhvZERlc2NyaXB0b3IsIG91dHB1dF90eXBlLCBjb25zdCBE
ZXNjcmlwdG9yKikKLVBST1RPQlVGX0RFRklORV9PUFRJT05TX0FDQ0VTU09SKE1ldGhvZERlc2Ny
aXB0b3IsIE1ldGhvZE9wdGlvbnMpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoTWV0aG9kRGVz
Y3JpcHRvciwgY2xpZW50X3N0cmVhbWluZywgYm9vbCkKLVBST1RPQlVGX0RFRklORV9BQ0NFU1NP
UihNZXRob2REZXNjcmlwdG9yLCBzZXJ2ZXJfc3RyZWFtaW5nLCBib29sKQotCi1QUk9UT0JVRl9E
RUZJTkVfU1RSSU5HX0FDQ0VTU09SKEZpbGVEZXNjcmlwdG9yLCBuYW1lKQotUFJPVE9CVUZfREVG
SU5FX1NUUklOR19BQ0NFU1NPUihGaWxlRGVzY3JpcHRvciwgcGFja2FnZSkKLVBST1RPQlVGX0RF
RklORV9BQ0NFU1NPUihGaWxlRGVzY3JpcHRvciwgcG9vbCwgY29uc3QgRGVzY3JpcHRvclBvb2wq
KQotUFJPVE9CVUZfREVGSU5FX0FDQ0VTU09SKEZpbGVEZXNjcmlwdG9yLCBkZXBlbmRlbmN5X2Nv
dW50LCBpbnQpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmlsZURlc2NyaXB0b3IsIHB1Ymxp
Y19kZXBlbmRlbmN5X2NvdW50LCBpbnQpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmlsZURl
c2NyaXB0b3IsIHdlYWtfZGVwZW5kZW5jeV9jb3VudCwgaW50KQotUFJPVE9CVUZfREVGSU5FX0FD
Q0VTU09SKEZpbGVEZXNjcmlwdG9yLCBtZXNzYWdlX3R5cGVfY291bnQsIGludCkKLVBST1RPQlVG
X0RFRklORV9BQ0NFU1NPUihGaWxlRGVzY3JpcHRvciwgZW51bV90eXBlX2NvdW50LCBpbnQpCi1Q
Uk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmlsZURlc2NyaXB0b3IsIHNlcnZpY2VfY291bnQsIGlu
dCkKLVBST1RPQlVGX0RFRklORV9BQ0NFU1NPUihGaWxlRGVzY3JpcHRvciwgZXh0ZW5zaW9uX2Nv
dW50LCBpbnQpCi1QUk9UT0JVRl9ERUZJTkVfT1BUSU9OU19BQ0NFU1NPUihGaWxlRGVzY3JpcHRv
ciwgRmlsZU9wdGlvbnMpCi1QUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IoRmlsZURlc2NyaXB0b3Is
IGlzX3BsYWNlaG9sZGVyLCBib29sKQotCi1QUk9UT0JVRl9ERUZJTkVfQVJSQVlfQUNDRVNTT1Io
RmlsZURlc2NyaXB0b3IsIG1lc3NhZ2VfdHlwZSwgY29uc3QgRGVzY3JpcHRvciopCi1QUk9UT0JV
Rl9ERUZJTkVfQVJSQVlfQUNDRVNTT1IoRmlsZURlc2NyaXB0b3IsIGVudW1fdHlwZSwgY29uc3Qg
RW51bURlc2NyaXB0b3IqKQotUFJPVE9CVUZfREVGSU5FX0FSUkFZX0FDQ0VTU09SKEZpbGVEZXNj
cmlwdG9yLCBzZXJ2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNl
cnZpY2VEZXNjcmlwdG9yKikKLVBST1RPQlVGX0RFRklORV9BUlJBWV9BQ0NFU1NPUihGaWxlRGVz
Y3JpcHRvciwgZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciopCi0KLSN1bmRlZiBQUk9UT0JVRl9ERUZJTkVfQUNDRVNTT1IKLSN1
bmRlZiBQUk9UT0JVRl9ERUZJTkVfU1RSSU5HX0FDQ0VTU09SCi0jdW5kZWYgUFJPVE9CVUZfREVG
SU5FX0FSUkFZX0FDQ0VTU09SCi0KLS8vIEEgZmV3IGFjY2Vzc29ycyBkaWZmZXIgZnJvbSB0aGUg
bWFjcm9zLi4uCi0KLWlubGluZSBib29sIERlc2NyaXB0b3I6OklzRXh0ZW5zaW9uTnVtYmVyKGlu
dCBudW1iZXIpIGNvbnN0IHsKLSAgcmV0dXJuIEZpbmRFeHRlbnNpb25SYW5nZUNvbnRhaW5pbmdO
dW1iZXIobnVtYmVyKSAhPSBOVUxMOwotfQotCi1pbmxpbmUgYm9vbCBEZXNjcmlwdG9yOjpJc1Jl
c2VydmVkTnVtYmVyKGludCBudW1iZXIpIGNvbnN0IHsKLSAgcmV0dXJuIEZpbmRSZXNlcnZlZFJh
bmdlQ29udGFpbmluZ051bWJlcihudW1iZXIpICE9IE5VTEw7Ci19Ci0KLWlubGluZSBib29sIERl
c2NyaXB0b3I6OklzUmVzZXJ2ZWROYW1lKGNvbnN0IHN0cmluZyYgbmFtZSkgY29uc3QgewotICBm
b3IgKGludCBpID0gMDsgaSA8IHJlc2VydmVkX25hbWVfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYg
KG5hbWUgPT0gcmVzZXJ2ZWRfbmFtZShpKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotLy8gQ2FuJ3QgdXNlIFBST1RPQlVGX0RFRklORV9B
UlJBWV9BQ0NFU1NPUiBiZWNhdXNlIHJlc2VydmVkX25hbWVzXyBpcyBhY3R1YWxseQotLy8gYW4g
YXJyYXkgb2YgcG9pbnRlcnMgcmF0aGVyIHRoYW4gdGhlIHVzdWFsIGFycmF5IG9mIG9iamVjdHMu
Ci1pbmxpbmUgY29uc3Qgc3RyaW5nJiBEZXNjcmlwdG9yOjpyZXNlcnZlZF9uYW1lKGludCBpbmRl
eCkgY29uc3QgewotICByZXR1cm4gKnJlc2VydmVkX25hbWVzX1tpbmRleF07Ci19Ci0KLWlubGlu
ZSBib29sIEZpZWxkRGVzY3JpcHRvcjo6aXNfcmVxdWlyZWQoKSBjb25zdCB7Ci0gIHJldHVybiBs
YWJlbCgpID09IExBQkVMX1JFUVVJUkVEOwotfQotCi1pbmxpbmUgYm9vbCBGaWVsZERlc2NyaXB0
b3I6OmlzX29wdGlvbmFsKCkgY29uc3QgewotICByZXR1cm4gbGFiZWwoKSA9PSBMQUJFTF9PUFRJ
T05BTDsKLX0KLQotaW5saW5lIGJvb2wgRmllbGREZXNjcmlwdG9yOjppc19yZXBlYXRlZCgpIGNv
bnN0IHsKLSAgcmV0dXJuIGxhYmVsKCkgPT0gTEFCRUxfUkVQRUFURUQ7Ci19Ci0KLWlubGluZSBi
b29sIEZpZWxkRGVzY3JpcHRvcjo6aXNfcGFja2FibGUoKSBjb25zdCB7Ci0gIHJldHVybiBpc19y
ZXBlYXRlZCgpICYmIElzVHlwZVBhY2thYmxlKHR5cGUoKSk7Ci19Ci0KLS8vIFRvIHNhdmUgc3Bh
Y2UsIGluZGV4KCkgaXMgY29tcHV0ZWQgYnkgbG9va2luZyBhdCB0aGUgZGVzY3JpcHRvcidzIHBv
c2l0aW9uCi0vLyBpbiB0aGUgcGFyZW50J3MgYXJyYXkgb2YgY2hpbGRyZW4uCi1pbmxpbmUgaW50
IEZpZWxkRGVzY3JpcHRvcjo6aW5kZXgoKSBjb25zdCB7Ci0gIGlmICghaXNfZXh0ZW5zaW9uXykg
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRoaXMgLSBjb250YWluaW5nX3R5cGVfLT5m
aWVsZHNfKTsKLSAgfSBlbHNlIGlmIChleHRlbnNpb25fc2NvcGVfICE9IE5VTEwpIHsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0aGlzIC0gZXh0ZW5zaW9uX3Njb3BlXy0+ZXh0ZW5zaW9u
c18pOwotICB9IGVsc2UgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRoaXMgLSBmaWxl
Xy0+ZXh0ZW5zaW9uc18pOwotICB9Ci19Ci0KLWlubGluZSBpbnQgRGVzY3JpcHRvcjo6aW5kZXgo
KSBjb25zdCB7Ci0gIGlmIChjb250YWluaW5nX3R5cGVfID09IE5VTEwpIHsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50Pih0aGlzIC0gZmlsZV8tPm1lc3NhZ2VfdHlwZXNfKTsKLSAgfSBlbHNl
IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0aGlzIC0gY29udGFpbmluZ190eXBlXy0+
bmVzdGVkX3R5cGVzXyk7Ci0gIH0KLX0KLQotaW5saW5lIGludCBPbmVvZkRlc2NyaXB0b3I6Omlu
ZGV4KCkgY29uc3QgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0aGlzIC0gY29udGFpbmlu
Z190eXBlXy0+b25lb2ZfZGVjbHNfKTsKLX0KLQotaW5saW5lIGludCBFbnVtRGVzY3JpcHRvcjo6
aW5kZXgoKSBjb25zdCB7Ci0gIGlmIChjb250YWluaW5nX3R5cGVfID09IE5VTEwpIHsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0aGlzIC0gZmlsZV8tPmVudW1fdHlwZXNfKTsKLSAgfSBl
bHNlIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0aGlzIC0gY29udGFpbmluZ190eXBl
Xy0+ZW51bV90eXBlc18pOwotICB9Ci19Ci0KLWlubGluZSBpbnQgRW51bVZhbHVlRGVzY3JpcHRv
cjo6aW5kZXgoKSBjb25zdCB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRoaXMgLSB0eXBl
Xy0+dmFsdWVzXyk7Ci19Ci0KLWlubGluZSBpbnQgU2VydmljZURlc2NyaXB0b3I6OmluZGV4KCkg
Y29uc3QgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0aGlzIC0gZmlsZV8tPnNlcnZpY2Vz
Xyk7Ci19Ci0KLWlubGluZSBpbnQgTWV0aG9kRGVzY3JpcHRvcjo6aW5kZXgoKSBjb25zdCB7Ci0g
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRoaXMgLSBzZXJ2aWNlXy0+bWV0aG9kc18pOwotfQot
Ci1pbmxpbmUgY29uc3QgY2hhciogRmllbGREZXNjcmlwdG9yOjp0eXBlX25hbWUoKSBjb25zdCB7
Ci0gIHJldHVybiBrVHlwZVRvTmFtZVt0eXBlX107Ci19Ci0KLWlubGluZSBGaWVsZERlc2NyaXB0
b3I6OkNwcFR5cGUgRmllbGREZXNjcmlwdG9yOjpjcHBfdHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJu
IGtUeXBlVG9DcHBUeXBlTWFwW3R5cGVfXTsKLX0KLQotaW5saW5lIGNvbnN0IGNoYXIqIEZpZWxk
RGVzY3JpcHRvcjo6Y3BwX3R5cGVfbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGtDcHBUeXBlVG9O
YW1lW2tUeXBlVG9DcHBUeXBlTWFwW3R5cGVfXV07Ci19Ci0KLWlubGluZSBGaWVsZERlc2NyaXB0
b3I6OkNwcFR5cGUgRmllbGREZXNjcmlwdG9yOjpUeXBlVG9DcHBUeXBlKFR5cGUgdHlwZSkgewot
ICByZXR1cm4ga1R5cGVUb0NwcFR5cGVNYXBbdHlwZV07Ci19Ci0KLWlubGluZSBjb25zdCBjaGFy
KiBGaWVsZERlc2NyaXB0b3I6OlR5cGVOYW1lKFR5cGUgdHlwZSkgewotICByZXR1cm4ga1R5cGVU
b05hbWVbdHlwZV07Ci19Ci0KLWlubGluZSBjb25zdCBjaGFyKiBGaWVsZERlc2NyaXB0b3I6OkNw
cFR5cGVOYW1lKENwcFR5cGUgY3BwX3R5cGUpIHsKLSAgcmV0dXJuIGtDcHBUeXBlVG9OYW1lW2Nw
cF90eXBlXTsKLX0KLQotaW5saW5lIGJvb2wgRmllbGREZXNjcmlwdG9yOjpJc1R5cGVQYWNrYWJs
ZShUeXBlIGZpZWxkX3R5cGUpIHsKLSAgcmV0dXJuIChmaWVsZF90eXBlICE9IEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9TVFJJTkcgJiYKLSAgICAgICAgICBmaWVsZF90eXBlICE9IEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9HUk9VUCAmJgotICAgICAgICAgIGZpZWxkX3R5cGUgIT0gRmllbGREZXNjcmlw
dG9yOjpUWVBFX01FU1NBR0UgJiYKLSAgICAgICAgICBmaWVsZF90eXBlICE9IEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9CWVRFUyk7Ci19Ci0KLWlubGluZSBjb25zdCBGaWxlRGVzY3JpcHRvciogRmls
ZURlc2NyaXB0b3I6OmRlcGVuZGVuY3koaW50IGluZGV4KSBjb25zdCB7Ci0gIHJldHVybiBkZXBl
bmRlbmNpZXNfW2luZGV4XTsKLX0KLQotaW5saW5lIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBGaWxl
RGVzY3JpcHRvcjo6cHVibGljX2RlcGVuZGVuY3koCi0gICAgaW50IGluZGV4KSBjb25zdCB7Ci0g
IHJldHVybiBkZXBlbmRlbmNpZXNfW3B1YmxpY19kZXBlbmRlbmNpZXNfW2luZGV4XV07Ci19Ci0K
LWlubGluZSBjb25zdCBGaWxlRGVzY3JpcHRvciogRmlsZURlc2NyaXB0b3I6OndlYWtfZGVwZW5k
ZW5jeSgKLSAgICBpbnQgaW5kZXgpIGNvbnN0IHsKLSAgcmV0dXJuIGRlcGVuZGVuY2llc19bd2Vh
a19kZXBlbmRlbmNpZXNfW2luZGV4XV07Ci19Ci0KLWlubGluZSBGaWxlRGVzY3JpcHRvcjo6U3lu
dGF4IEZpbGVEZXNjcmlwdG9yOjpzeW50YXgoKSBjb25zdCB7Ci0gIHJldHVybiBzeW50YXhfOwot
fQotCi0vLyBDYW4ndCB1c2UgUFJPVE9CVUZfREVGSU5FX0FSUkFZX0FDQ0VTU09SIGJlY2F1c2Ug
ZmllbGRzXyBpcyBhY3R1YWxseSBhbiBhcnJheQotLy8gb2YgcG9pbnRlcnMgcmF0aGVyIHRoYW4g
dGhlIHVzdWFsIGFycmF5IG9mIG9iamVjdHMuCi1pbmxpbmUgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBPbmVvZkRlc2NyaXB0b3I6OmZpZWxkKGludCBpbmRleCkgY29uc3QgewotICByZXR1cm4gZmll
bGRzX1tpbmRleF07Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9ERVNDUklQVE9SX0hfXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNGQ1YzRkOTlkNDA2YjExMjZhOTdjYTdiOGNhNTIwYmUwMzdlOWQ0OS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5wYi5jYworKysgL2Rldi9udWxsCkBAIC0xLDE1MTY4ICswLDAgQEAKLS8vIEdlbmVy
YXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBz
b3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvCi0KLSNkZWZpbmUgSU5URVJO
QUxfU1VQUFJFU1NfUFJPVE9CVUZfRklFTERfREVQUkVDQVRJT04KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9wb3J0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL29u
Y2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGVfaW5sLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Z2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9yZWZsZWN0aW9uX29wcy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1h
dC5oPgotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGluY2x1ZGVzKQotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogRmlsZURlc2NyaXB0b3JTZXRfZGVzY3JpcHRv
cl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVk
TWVzc2FnZVJlZmxlY3Rpb24qCi0gIEZpbGVEZXNjcmlwdG9yU2V0X3JlZmxlY3Rpb25fID0gTlVM
TDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogRmlsZURlc2NyaXB0b3JQ
cm90b19kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgRmlsZURlc2NyaXB0b3JQcm90b19y
ZWZsZWN0aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3Iq
IERlc2NyaXB0b3JQcm90b19kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgRGVzY3JpcHRv
clByb3RvX3JlZmxlY3Rpb25fID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlX2Rlc2NyaXB0b3JfID0gTlVM
TDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VS
ZWZsZWN0aW9uKgotICBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2VfcmVmbGVjdGlvbl8g
PSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBEZXNjcmlwdG9y
UHJvdG9fUmVzZXJ2ZWRSYW5nZV9kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgRGVzY3Jp
cHRvclByb3RvX1Jlc2VydmVkUmFuZ2VfcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBGaWVsZERlc2NyaXB0b3JQcm90b19kZXNjcmlwdG9y
XyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRN
ZXNzYWdlUmVmbGVjdGlvbioKLSAgRmllbGREZXNjcmlwdG9yUHJvdG9fcmVmbGVjdGlvbl8gPSBO
VUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvciogRmllbGREZXNj
cmlwdG9yUHJvdG9fVHlwZV9kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OkVudW1EZXNjcmlwdG9yKiBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbF9kZXNjcmlw
dG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIE9uZW9m
RGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgotICBPbmVvZkRlc2Ny
aXB0b3JQcm90b19yZWZsZWN0aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OkRlc2NyaXB0b3IqIEVudW1EZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl8gPSBOVUxMOwotY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b24qCi0gIEVudW1EZXNjcmlwdG9yUHJvdG9fcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9fZGVz
Y3JpcHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2Vu
ZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90b19yZWZs
ZWN0aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIFNl
cnZpY2VEZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIFNlcnZp
Y2VEZXNjcmlwdG9yUHJvdG9fcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpEZXNjcmlwdG9yKiBNZXRob2REZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl8gPSBO
VUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2Fn
ZVJlZmxlY3Rpb24qCi0gIE1ldGhvZERlc2NyaXB0b3JQcm90b19yZWZsZWN0aW9uXyA9IE5VTEw7
Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIEZpbGVPcHRpb25zX2Rlc2Ny
aXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVy
YXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgotICBGaWxlT3B0aW9uc19yZWZsZWN0aW9uXyA9IE5VTEw7
Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yKiBGaWxlT3B0aW9uc19P
cHRpbWl6ZU1vZGVfZGVzY3JpcHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpEZXNjcmlwdG9yKiBNZXNzYWdlT3B0aW9uc19kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioK
LSAgTWVzc2FnZU9wdGlvbnNfcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpEZXNjcmlwdG9yKiBGaWVsZE9wdGlvbnNfZGVzY3JpcHRvcl8gPSBOVUxMOwotY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b24qCi0gIEZpZWxkT3B0aW9uc19yZWZsZWN0aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yKiBGaWVsZE9wdGlvbnNfQ1R5cGVfZGVzY3JpcHRvcl8g
PSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvciogRmllbGRP
cHRpb25zX0pTVHlwZV9kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OkRlc2NyaXB0b3IqIEVudW1PcHRpb25zX2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgot
ICBFbnVtT3B0aW9uc19yZWZsZWN0aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OkRlc2NyaXB0b3IqIEVudW1WYWx1ZU9wdGlvbnNfZGVzY3JpcHRvcl8gPSBOVUxMOwotY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b24qCi0gIEVudW1WYWx1ZU9wdGlvbnNfcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBTZXJ2aWNlT3B0aW9uc19kZXNjcmlwdG9yXyA9IE5V
TEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvbioKLSAgU2VydmljZU9wdGlvbnNfcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBNZXRob2RPcHRpb25zX2Rlc2NyaXB0b3Jf
ID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1l
c3NhZ2VSZWZsZWN0aW9uKgotICBNZXRob2RPcHRpb25zX3JlZmxlY3Rpb25fID0gTlVMTDsKLWNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogVW5pbnRlcnByZXRlZE9wdGlvbl9k
ZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgVW5pbnRlcnByZXRlZE9wdGlvbl9yZWZsZWN0
aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIFVuaW50
ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnRfZGVzY3JpcHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIFVu
aW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnRfcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBTb3VyY2VDb2RlSW5mb19kZXNjcmlwdG9yXyA9
IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvbioKLSAgU291cmNlQ29kZUluZm9fcmVmbGVjdGlvbl8gPSBOVUxMOwotY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlv
bl9kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgU291cmNlQ29kZUluZm9fTG9jYXRpb25f
cmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9y
KiBHZW5lcmF0ZWRDb2RlSW5mb19kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgR2VuZXJh
dGVkQ29kZUluZm9fcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpEZXNjcmlwdG9yKiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX2Rlc2NyaXB0b3JfID0g
TlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3Nh
Z2VSZWZsZWN0aW9uKgotICBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX3JlZmxlY3Rpb25f
ID0gTlVMTDsKLQotfSAgLy8gbmFtZXNwYWNlCi0KLQotdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNj
X2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCkgewotICBwcm90b2J1Zl9B
ZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0gIGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3IqIGZpbGUgPQotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RGVzY3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCktPkZpbmRGaWxlQnlO
YW1lKAotICAgICAgImdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvIik7Ci0gIEdPT0dM
RV9DSEVDSyhmaWxlICE9IE5VTEwpOwotICBGaWxlRGVzY3JpcHRvclNldF9kZXNjcmlwdG9yXyA9
IGZpbGUtPm1lc3NhZ2VfdHlwZSgwKTsKLSAgc3RhdGljIGNvbnN0IGludCBGaWxlRGVzY3JpcHRv
clNldF9vZmZzZXRzX1sxXSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NB
R0VfRklFTERfT0ZGU0VUKEZpbGVEZXNjcmlwdG9yU2V0LCBmaWxlXyksCi0gIH07Ci0gIEZpbGVE
ZXNjcmlwdG9yU2V0X3JlZmxlY3Rpb25fID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxl
Y3Rpb24oCi0gICAgICBGaWxlRGVzY3JpcHRvclNldF9kZXNjcmlwdG9yXywKLSAgICAgIEZpbGVE
ZXNjcmlwdG9yU2V0OjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAgIEZpbGVEZXNjcmlwdG9yU2V0
X29mZnNldHNfLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxE
X09GRlNFVChGaWxlRGVzY3JpcHRvclNldCwgX2hhc19iaXRzX1swXSksCi0gICAgICAtMSwKLSAg
ICAgIC0xLAotICAgICAgc2l6ZW9mKEZpbGVEZXNjcmlwdG9yU2V0KSwKLSAgICAgIEdPT0dMRV9Q
Uk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmlsZURlc2NyaXB0b3JTZXQs
IF9pbnRlcm5hbF9tZXRhZGF0YV8pLAotICAgICAgLTEpOwotICBGaWxlRGVzY3JpcHRvclByb3Rv
X2Rlc2NyaXB0b3JfID0gZmlsZS0+bWVzc2FnZV90eXBlKDEpOwotICBzdGF0aWMgY29uc3QgaW50
IEZpbGVEZXNjcmlwdG9yUHJvdG9fb2Zmc2V0c19bMTJdID0gewotICAgIEdPT0dMRV9QUk9UT0JV
Rl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmlsZURlc2NyaXB0b3JQcm90bywgbmFt
ZV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQo
RmlsZURlc2NyaXB0b3JQcm90bywgcGFja2FnZV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5F
UkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmlsZURlc2NyaXB0b3JQcm90bywgZGVwZW5kZW5j
eV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQo
RmlsZURlc2NyaXB0b3JQcm90bywgcHVibGljX2RlcGVuZGVuY3lfKSwKLSAgICBHT09HTEVfUFJP
VE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpbGVEZXNjcmlwdG9yUHJvdG8s
IHdlYWtfZGVwZW5kZW5jeV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FH
RV9GSUVMRF9PRkZTRVQoRmlsZURlc2NyaXB0b3JQcm90bywgbWVzc2FnZV90eXBlXyksCi0gICAg
R09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChGaWxlRGVzY3Jp
cHRvclByb3RvLCBlbnVtX3R5cGVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01F
U1NBR0VfRklFTERfT0ZGU0VUKEZpbGVEZXNjcmlwdG9yUHJvdG8sIHNlcnZpY2VfKSwKLSAgICBH
T09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpbGVEZXNjcmlw
dG9yUHJvdG8sIGV4dGVuc2lvbl8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVT
U0FHRV9GSUVMRF9PRkZTRVQoRmlsZURlc2NyaXB0b3JQcm90bywgb3B0aW9uc18pLAotICAgIEdP
T0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmlsZURlc2NyaXB0
b3JQcm90bywgc291cmNlX2NvZGVfaW5mb18pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFU
RURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmlsZURlc2NyaXB0b3JQcm90bywgc3ludGF4XyksCi0g
IH07Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG9fcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0
ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIEZpbGVEZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRv
cl8sCi0gICAgICBGaWxlRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAg
IEZpbGVEZXNjcmlwdG9yUHJvdG9fb2Zmc2V0c18sCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VO
RVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpbGVEZXNjcmlwdG9yUHJvdG8sIF9oYXNfYml0
c19bMF0pLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIHNpemVvZihGaWxlRGVzY3JpcHRv
clByb3RvKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9P
RkZTRVQoRmlsZURlc2NyaXB0b3JQcm90bywgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICAt
MSk7Ci0gIERlc2NyaXB0b3JQcm90b19kZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlwZSgy
KTsKLSAgc3RhdGljIGNvbnN0IGludCBEZXNjcmlwdG9yUHJvdG9fb2Zmc2V0c19bMTBdID0gewot
ICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRGVzY3Jp
cHRvclByb3RvLCBuYW1lXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdF
X0ZJRUxEX09GRlNFVChEZXNjcmlwdG9yUHJvdG8sIGZpZWxkXyksCi0gICAgR09PR0xFX1BST1RP
QlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChEZXNjcmlwdG9yUHJvdG8sIGV4dGVu
c2lvbl8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZT
RVQoRGVzY3JpcHRvclByb3RvLCBuZXN0ZWRfdHlwZV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRGVzY3JpcHRvclByb3RvLCBlbnVtX3R5cGVf
KSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKERl
c2NyaXB0b3JQcm90bywgZXh0ZW5zaW9uX3JhbmdlXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dF
TkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChEZXNjcmlwdG9yUHJvdG8sIG9uZW9mX2RlY2xf
KSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKERl
c2NyaXB0b3JQcm90bywgb3B0aW9uc18pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURf
TUVTU0FHRV9GSUVMRF9PRkZTRVQoRGVzY3JpcHRvclByb3RvLCByZXNlcnZlZF9yYW5nZV8pLAot
ICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRGVzY3Jp
cHRvclByb3RvLCByZXNlcnZlZF9uYW1lXyksCi0gIH07Ci0gIERlc2NyaXB0b3JQcm90b19yZWZs
ZWN0aW9uXyA9Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVz
c2FnZVJlZmxlY3Rpb246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKAotICAgICAgRGVz
Y3JpcHRvclByb3RvX2Rlc2NyaXB0b3JfLAotICAgICAgRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0
X2luc3RhbmNlXywKLSAgICAgIERlc2NyaXB0b3JQcm90b19vZmZzZXRzXywKLSAgICAgIEdPT0dM
RV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRGVzY3JpcHRvclByb3Rv
LCBfaGFzX2JpdHNfWzBdKSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoRGVz
Y3JpcHRvclByb3RvKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9G
SUVMRF9PRkZTRVQoRGVzY3JpcHRvclByb3RvLCBfaW50ZXJuYWxfbWV0YWRhdGFfKSwKLSAgICAg
IC0xKTsKLSAgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlX2Rlc2NyaXB0b3JfID0gRGVz
Y3JpcHRvclByb3RvX2Rlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZSgwKTsKLSAgc3RhdGljIGNvbnN0
IGludCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2Vfb2Zmc2V0c19bMl0gPSB7Ci0gICAg
R09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChEZXNjcmlwdG9y
UHJvdG9fRXh0ZW5zaW9uUmFuZ2UsIHN0YXJ0XyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVS
QVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2Us
IGVuZF8pLAotICB9OwotICBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2VfcmVmbGVjdGlv
bl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VS
ZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIERlc2NyaXB0
b3JQcm90b19FeHRlbnNpb25SYW5nZV9kZXNjcmlwdG9yXywKLSAgICAgIERlc2NyaXB0b3JQcm90
b19FeHRlbnNpb25SYW5nZTo6ZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAgICBEZXNjcmlwdG9yUHJv
dG9fRXh0ZW5zaW9uUmFuZ2Vfb2Zmc2V0c18sCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJB
VEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSwg
X2hhc19iaXRzX1swXSksCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKERlc2Ny
aXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJB
VEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSwg
X2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICAtMSk7Ci0gIERlc2NyaXB0b3JQcm90b19SZXNl
cnZlZFJhbmdlX2Rlc2NyaXB0b3JfID0gRGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0b3JfLT5uZXN0
ZWRfdHlwZSgxKTsKLSAgc3RhdGljIGNvbnN0IGludCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRS
YW5nZV9vZmZzZXRzX1syXSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NB
R0VfRklFTERfT0ZGU0VUKERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlLCBzdGFydF8pLAot
ICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRGVzY3Jp
cHRvclByb3RvX1Jlc2VydmVkUmFuZ2UsIGVuZF8pLAotICB9OwotICBEZXNjcmlwdG9yUHJvdG9f
UmVzZXJ2ZWRSYW5nZV9yZWZsZWN0aW9uXyA9Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZs
ZWN0aW9uKAotICAgICAgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2VfZGVzY3JpcHRvcl8s
Ci0gICAgICBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6ZGVmYXVsdF9pbnN0YW5jZV8s
Ci0gICAgICBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZV9vZmZzZXRzXywKLSAgICAgIEdP
T0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRGVzY3JpcHRvclBy
b3RvX1Jlc2VydmVkUmFuZ2UsIF9oYXNfYml0c19bMF0pLAotICAgICAgLTEsCi0gICAgICAtMSwK
LSAgICAgIHNpemVvZihEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSksCi0gICAgICBHT09H
TEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKERlc2NyaXB0b3JQcm90
b19SZXNlcnZlZFJhbmdlLCBfaW50ZXJuYWxfbWV0YWRhdGFfKSwKLSAgICAgIC0xKTsKLSAgRmll
bGREZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUoMyk7Ci0g
IHN0YXRpYyBjb25zdCBpbnQgRmllbGREZXNjcmlwdG9yUHJvdG9fb2Zmc2V0c19bMTBdID0gewot
ICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmllbGRE
ZXNjcmlwdG9yUHJvdG8sIG5hbWVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01F
U1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkRGVzY3JpcHRvclByb3RvLCBudW1iZXJfKSwKLSAgICBH
T09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkRGVzY3Jp
cHRvclByb3RvLCBsYWJlbF8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FH
RV9GSUVMRF9PRkZTRVQoRmllbGREZXNjcmlwdG9yUHJvdG8sIHR5cGVfKSwKLSAgICBHT09HTEVf
UFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkRGVzY3JpcHRvclBy
b3RvLCB0eXBlX25hbWVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VUKEZpZWxkRGVzY3JpcHRvclByb3RvLCBleHRlbmRlZV8pLAotICAgIEdPT0dM
RV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmllbGREZXNjcmlwdG9y
UHJvdG8sIGRlZmF1bHRfdmFsdWVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01F
U1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkRGVzY3JpcHRvclByb3RvLCBvbmVvZl9pbmRleF8pLAot
ICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmllbGRE
ZXNjcmlwdG9yUHJvdG8sIGpzb25fbmFtZV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFU
RURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmllbGREZXNjcmlwdG9yUHJvdG8sIG9wdGlvbnNfKSwK
LSAgfTsKLSAgRmllbGREZXNjcmlwdG9yUHJvdG9fcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5l
cmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvX2Rlc2Ny
aXB0b3JfLAotICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfLAot
ICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG9fb2Zmc2V0c18sCi0gICAgICBHT09HTEVfUFJPVE9C
VUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkRGVzY3JpcHRvclByb3RvLCBf
aGFzX2JpdHNfWzBdKSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoRmllbGRE
ZXNjcmlwdG9yUHJvdG8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdF
X0ZJRUxEX09GRlNFVChGaWVsZERlc2NyaXB0b3JQcm90bywgX2ludGVybmFsX21ldGFkYXRhXyks
Ci0gICAgICAtMSk7Ci0gIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfZGVzY3JpcHRvcl8gPSBG
aWVsZERlc2NyaXB0b3JQcm90b19kZXNjcmlwdG9yXy0+ZW51bV90eXBlKDApOwotICBGaWVsZERl
c2NyaXB0b3JQcm90b19MYWJlbF9kZXNjcmlwdG9yXyA9IEZpZWxkRGVzY3JpcHRvclByb3RvX2Rl
c2NyaXB0b3JfLT5lbnVtX3R5cGUoMSk7Ci0gIE9uZW9mRGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0
b3JfID0gZmlsZS0+bWVzc2FnZV90eXBlKDQpOwotICBzdGF0aWMgY29uc3QgaW50IE9uZW9mRGVz
Y3JpcHRvclByb3RvX29mZnNldHNfWzFdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFU
RURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoT25lb2ZEZXNjcmlwdG9yUHJvdG8sIG5hbWVfKSwKLSAg
fTsKLSAgT25lb2ZEZXNjcmlwdG9yUHJvdG9fcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0
ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIE9uZW9mRGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0
b3JfLAotICAgICAgT25lb2ZEZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfLAotICAg
ICAgT25lb2ZEZXNjcmlwdG9yUHJvdG9fb2Zmc2V0c18sCi0gICAgICBHT09HTEVfUFJPVE9CVUZf
R0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE9uZW9mRGVzY3JpcHRvclByb3RvLCBfaGFz
X2JpdHNfWzBdKSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoT25lb2ZEZXNj
cmlwdG9yUHJvdG8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJ
RUxEX09GRlNFVChPbmVvZkRlc2NyaXB0b3JQcm90bywgX2ludGVybmFsX21ldGFkYXRhXyksCi0g
ICAgICAtMSk7Ci0gIEVudW1EZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNz
YWdlX3R5cGUoNSk7Ci0gIHN0YXRpYyBjb25zdCBpbnQgRW51bURlc2NyaXB0b3JQcm90b19vZmZz
ZXRzX1szXSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERf
T0ZGU0VUKEVudW1EZXNjcmlwdG9yUHJvdG8sIG5hbWVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZf
R0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEVudW1EZXNjcmlwdG9yUHJvdG8sIHZhbHVl
XyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChF
bnVtRGVzY3JpcHRvclByb3RvLCBvcHRpb25zXyksCi0gIH07Ci0gIEVudW1EZXNjcmlwdG9yUHJv
dG9fcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVy
YXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAg
ICAgIEVudW1EZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl8sCi0gICAgICBFbnVtRGVzY3JpcHRv
clByb3RvOjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAgIEVudW1EZXNjcmlwdG9yUHJvdG9fb2Zm
c2V0c18sCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZG
U0VUKEVudW1EZXNjcmlwdG9yUHJvdG8sIF9oYXNfYml0c19bMF0pLAotICAgICAgLTEsCi0gICAg
ICAtMSwKLSAgICAgIHNpemVvZihFbnVtRGVzY3JpcHRvclByb3RvKSwKLSAgICAgIEdPT0dMRV9Q
Uk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRW51bURlc2NyaXB0b3JQcm90
bywgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICAtMSk7Ci0gIEVudW1WYWx1ZURlc2NyaXB0
b3JQcm90b19kZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlwZSg2KTsKLSAgc3RhdGljIGNv
bnN0IGludCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9fb2Zmc2V0c19bM10gPSB7Ci0gICAgR09P
R0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChFbnVtVmFsdWVEZXNj
cmlwdG9yUHJvdG8sIG5hbWVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NB
R0VfRklFTERfT0ZGU0VUKEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bywgbnVtYmVyXyksCi0gICAg
R09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChFbnVtVmFsdWVE
ZXNjcmlwdG9yUHJvdG8sIG9wdGlvbnNfKSwKLSAgfTsKLSAgRW51bVZhbHVlRGVzY3JpcHRvclBy
b3RvX3JlZmxlY3Rpb25fID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5l
cmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0g
ICAgICBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl8sCi0gICAgICBFbnVtVmFs
dWVEZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgRW51bVZhbHVlRGVz
Y3JpcHRvclByb3RvX29mZnNldHNfLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9N
RVNTQUdFX0ZJRUxEX09GRlNFVChFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8sIF9oYXNfYml0c19b
MF0pLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIHNpemVvZihFbnVtVmFsdWVEZXNjcmlw
dG9yUHJvdG8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxE
X09GRlNFVChFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8sIF9pbnRlcm5hbF9tZXRhZGF0YV8pLAot
ICAgICAgLTEpOwotICBTZXJ2aWNlRGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0b3JfID0gZmlsZS0+
bWVzc2FnZV90eXBlKDcpOwotICBzdGF0aWMgY29uc3QgaW50IFNlcnZpY2VEZXNjcmlwdG9yUHJv
dG9fb2Zmc2V0c19bM10gPSB7Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdF
X0ZJRUxEX09GRlNFVChTZXJ2aWNlRGVzY3JpcHRvclByb3RvLCBuYW1lXyksCi0gICAgR09PR0xF
X1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChTZXJ2aWNlRGVzY3JpcHRv
clByb3RvLCBtZXRob2RfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VUKFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8sIG9wdGlvbnNfKSwKLSAgfTsKLSAg
U2VydmljZURlc2NyaXB0b3JQcm90b19yZWZsZWN0aW9uXyA9Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Ok5ld0dlbmVyYXRlZE1l
c3NhZ2VSZWZsZWN0aW9uKAotICAgICAgU2VydmljZURlc2NyaXB0b3JQcm90b19kZXNjcmlwdG9y
XywKLSAgICAgIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfLAotICAg
ICAgU2VydmljZURlc2NyaXB0b3JQcm90b19vZmZzZXRzXywKLSAgICAgIEdPT0dMRV9QUk9UT0JV
Rl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoU2VydmljZURlc2NyaXB0b3JQcm90bywg
X2hhc19iaXRzX1swXSksCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKFNlcnZp
Y2VEZXNjcmlwdG9yUHJvdG8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNT
QUdFX0ZJRUxEX09GRlNFVChTZXJ2aWNlRGVzY3JpcHRvclByb3RvLCBfaW50ZXJuYWxfbWV0YWRh
dGFfKSwKLSAgICAgIC0xKTsKLSAgTWV0aG9kRGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0b3JfID0g
ZmlsZS0+bWVzc2FnZV90eXBlKDgpOwotICBzdGF0aWMgY29uc3QgaW50IE1ldGhvZERlc2NyaXB0
b3JQcm90b19vZmZzZXRzX1s2XSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01F
U1NBR0VfRklFTERfT0ZGU0VUKE1ldGhvZERlc2NyaXB0b3JQcm90bywgbmFtZV8pLAotICAgIEdP
T0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTWV0aG9kRGVzY3Jp
cHRvclByb3RvLCBpbnB1dF90eXBlXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9N
RVNTQUdFX0ZJRUxEX09GRlNFVChNZXRob2REZXNjcmlwdG9yUHJvdG8sIG91dHB1dF90eXBlXyks
Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChNZXRo
b2REZXNjcmlwdG9yUHJvdG8sIG9wdGlvbnNfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJB
VEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE1ldGhvZERlc2NyaXB0b3JQcm90bywgY2xpZW50X3N0
cmVhbWluZ18pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9P
RkZTRVQoTWV0aG9kRGVzY3JpcHRvclByb3RvLCBzZXJ2ZXJfc3RyZWFtaW5nXyksCi0gIH07Ci0g
IE1ldGhvZERlc2NyaXB0b3JQcm90b19yZWZsZWN0aW9uXyA9Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Ok5ld0dlbmVyYXRlZE1l
c3NhZ2VSZWZsZWN0aW9uKAotICAgICAgTWV0aG9kRGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0b3Jf
LAotICAgICAgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAg
IE1ldGhvZERlc2NyaXB0b3JQcm90b19vZmZzZXRzXywKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTWV0aG9kRGVzY3JpcHRvclByb3RvLCBfaGFz
X2JpdHNfWzBdKSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoTWV0aG9kRGVz
Y3JpcHRvclByb3RvKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9G
SUVMRF9PRkZTRVQoTWV0aG9kRGVzY3JpcHRvclByb3RvLCBfaW50ZXJuYWxfbWV0YWRhdGFfKSwK
LSAgICAgIC0xKTsKLSAgRmlsZU9wdGlvbnNfZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5
cGUoOSk7Ci0gIHN0YXRpYyBjb25zdCBpbnQgRmlsZU9wdGlvbnNfb2Zmc2V0c19bMTVdID0gewot
ICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmlsZU9w
dGlvbnMsIGphdmFfcGFja2FnZV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVT
U0FHRV9GSUVMRF9PRkZTRVQoRmlsZU9wdGlvbnMsIGphdmFfb3V0ZXJfY2xhc3NuYW1lXyksCi0g
ICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChGaWxlT3B0
aW9ucywgamF2YV9tdWx0aXBsZV9maWxlc18pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFU
RURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmlsZU9wdGlvbnMsIGphdmFfZ2VuZXJhdGVfZXF1YWxz
X2FuZF9oYXNoXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxE
X09GRlNFVChGaWxlT3B0aW9ucywgamF2YV9zdHJpbmdfY2hlY2tfdXRmOF8pLAotICAgIEdPT0dM
RV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmlsZU9wdGlvbnMsIG9w
dGltaXplX2Zvcl8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVM
RF9PRkZTRVQoRmlsZU9wdGlvbnMsIGdvX3BhY2thZ2VfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZf
R0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpbGVPcHRpb25zLCBjY19nZW5lcmljX3Nl
cnZpY2VzXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09G
RlNFVChGaWxlT3B0aW9ucywgamF2YV9nZW5lcmljX3NlcnZpY2VzXyksCi0gICAgR09PR0xFX1BS
T1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChGaWxlT3B0aW9ucywgcHlfZ2Vu
ZXJpY19zZXJ2aWNlc18pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9G
SUVMRF9PRkZTRVQoRmlsZU9wdGlvbnMsIGRlcHJlY2F0ZWRfKSwKLSAgICBHT09HTEVfUFJPVE9C
VUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpbGVPcHRpb25zLCBjY19lbmFibGVf
YXJlbmFzXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09G
RlNFVChGaWxlT3B0aW9ucywgb2JqY19jbGFzc19wcmVmaXhfKSwKLSAgICBHT09HTEVfUFJPVE9C
VUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpbGVPcHRpb25zLCBjc2hhcnBfbmFt
ZXNwYWNlXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09G
RlNFVChGaWxlT3B0aW9ucywgdW5pbnRlcnByZXRlZF9vcHRpb25fKSwKLSAgfTsKLSAgRmlsZU9w
dGlvbnNfcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
bmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigK
LSAgICAgIEZpbGVPcHRpb25zX2Rlc2NyaXB0b3JfLAotICAgICAgRmlsZU9wdGlvbnM6OmRlZmF1
bHRfaW5zdGFuY2VfLAotICAgICAgRmlsZU9wdGlvbnNfb2Zmc2V0c18sCi0gICAgICBHT09HTEVf
UFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpbGVPcHRpb25zLCBfaGFz
X2JpdHNfWzBdKSwKLSAgICAgIC0xLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9N
RVNTQUdFX0ZJRUxEX09GRlNFVChGaWxlT3B0aW9ucywgX2V4dGVuc2lvbnNfKSwKLSAgICAgIHNp
emVvZihGaWxlT3B0aW9ucyksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NB
R0VfRklFTERfT0ZGU0VUKEZpbGVPcHRpb25zLCBfaW50ZXJuYWxfbWV0YWRhdGFfKSwKLSAgICAg
IC0xKTsKLSAgRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX2Rlc2NyaXB0b3JfID0gRmlsZU9wdGlv
bnNfZGVzY3JpcHRvcl8tPmVudW1fdHlwZSgwKTsKLSAgTWVzc2FnZU9wdGlvbnNfZGVzY3JpcHRv
cl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUoMTApOwotICBzdGF0aWMgY29uc3QgaW50IE1lc3NhZ2VP
cHRpb25zX29mZnNldHNfWzVdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVT
U0FHRV9GSUVMRF9PRkZTRVQoTWVzc2FnZU9wdGlvbnMsIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0
XyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChN
ZXNzYWdlT3B0aW9ucywgbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3Nvcl8pLAotICAgIEdP
T0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTWVzc2FnZU9wdGlv
bnMsIGRlcHJlY2F0ZWRfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VUKE1lc3NhZ2VPcHRpb25zLCBtYXBfZW50cnlfKSwKLSAgICBHT09HTEVfUFJP
VE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE1lc3NhZ2VPcHRpb25zLCB1bmlu
dGVycHJldGVkX29wdGlvbl8pLAotICB9OwotICBNZXNzYWdlT3B0aW9uc19yZWZsZWN0aW9uXyA9
Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxl
Y3Rpb246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKAotICAgICAgTWVzc2FnZU9wdGlv
bnNfZGVzY3JpcHRvcl8sCi0gICAgICBNZXNzYWdlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZV8s
Ci0gICAgICBNZXNzYWdlT3B0aW9uc19vZmZzZXRzXywKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTWVzc2FnZU9wdGlvbnMsIF9oYXNfYml0c19b
MF0pLAotICAgICAgLTEsCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VUKE1lc3NhZ2VPcHRpb25zLCBfZXh0ZW5zaW9uc18pLAotICAgICAgc2l6ZW9m
KE1lc3NhZ2VPcHRpb25zKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FH
RV9GSUVMRF9PRkZTRVQoTWVzc2FnZU9wdGlvbnMsIF9pbnRlcm5hbF9tZXRhZGF0YV8pLAotICAg
ICAgLTEpOwotICBGaWVsZE9wdGlvbnNfZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUo
MTEpOwotICBzdGF0aWMgY29uc3QgaW50IEZpZWxkT3B0aW9uc19vZmZzZXRzX1s3XSA9IHsKLSAg
ICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkT3B0
aW9ucywgY3R5cGVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklF
TERfT0ZGU0VUKEZpZWxkT3B0aW9ucywgcGFja2VkXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dF
TkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChGaWVsZE9wdGlvbnMsIGpzdHlwZV8pLAotICAg
IEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmllbGRPcHRp
b25zLCBsYXp5XyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxE
X09GRlNFVChGaWVsZE9wdGlvbnMsIGRlcHJlY2F0ZWRfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZf
R0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkT3B0aW9ucywgd2Vha18pLAotICAg
IEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmllbGRPcHRp
b25zLCB1bmludGVycHJldGVkX29wdGlvbl8pLAotICB9OwotICBGaWVsZE9wdGlvbnNfcmVmbGVj
dGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3Nh
Z2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIEZpZWxk
T3B0aW9uc19kZXNjcmlwdG9yXywKLSAgICAgIEZpZWxkT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5j
ZV8sCi0gICAgICBGaWVsZE9wdGlvbnNfb2Zmc2V0c18sCi0gICAgICBHT09HTEVfUFJPVE9CVUZf
R0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkT3B0aW9ucywgX2hhc19iaXRzX1sw
XSksCi0gICAgICAtMSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9G
SUVMRF9PRkZTRVQoRmllbGRPcHRpb25zLCBfZXh0ZW5zaW9uc18pLAotICAgICAgc2l6ZW9mKEZp
ZWxkT3B0aW9ucyksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklF
TERfT0ZGU0VUKEZpZWxkT3B0aW9ucywgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICAtMSk7
Ci0gIEZpZWxkT3B0aW9uc19DVHlwZV9kZXNjcmlwdG9yXyA9IEZpZWxkT3B0aW9uc19kZXNjcmlw
dG9yXy0+ZW51bV90eXBlKDApOwotICBGaWVsZE9wdGlvbnNfSlNUeXBlX2Rlc2NyaXB0b3JfID0g
RmllbGRPcHRpb25zX2Rlc2NyaXB0b3JfLT5lbnVtX3R5cGUoMSk7Ci0gIEVudW1PcHRpb25zX2Rl
c2NyaXB0b3JfID0gZmlsZS0+bWVzc2FnZV90eXBlKDEyKTsKLSAgc3RhdGljIGNvbnN0IGludCBF
bnVtT3B0aW9uc19vZmZzZXRzX1szXSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVE
X01FU1NBR0VfRklFTERfT0ZGU0VUKEVudW1PcHRpb25zLCBhbGxvd19hbGlhc18pLAotICAgIEdP
T0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRW51bU9wdGlvbnMs
IGRlcHJlY2F0ZWRfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklF
TERfT0ZGU0VUKEVudW1PcHRpb25zLCB1bmludGVycHJldGVkX29wdGlvbl8pLAotICB9OwotICBF
bnVtT3B0aW9uc19yZWZsZWN0aW9uXyA9Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0
aW9uKAotICAgICAgRW51bU9wdGlvbnNfZGVzY3JpcHRvcl8sCi0gICAgICBFbnVtT3B0aW9uczo6
ZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAgICBFbnVtT3B0aW9uc19vZmZzZXRzXywKLSAgICAgIEdP
T0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRW51bU9wdGlvbnMs
IF9oYXNfYml0c19bMF0pLAotICAgICAgLTEsCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJB
VEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEVudW1PcHRpb25zLCBfZXh0ZW5zaW9uc18pLAotICAg
ICAgc2l6ZW9mKEVudW1PcHRpb25zKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURf
TUVTU0FHRV9GSUVMRF9PRkZTRVQoRW51bU9wdGlvbnMsIF9pbnRlcm5hbF9tZXRhZGF0YV8pLAot
ICAgICAgLTEpOwotICBFbnVtVmFsdWVPcHRpb25zX2Rlc2NyaXB0b3JfID0gZmlsZS0+bWVzc2Fn
ZV90eXBlKDEzKTsKLSAgc3RhdGljIGNvbnN0IGludCBFbnVtVmFsdWVPcHRpb25zX29mZnNldHNf
WzJdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZT
RVQoRW51bVZhbHVlT3B0aW9ucywgZGVwcmVjYXRlZF8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRW51bVZhbHVlT3B0aW9ucywgdW5pbnRlcnBy
ZXRlZF9vcHRpb25fKSwKLSAgfTsKLSAgRW51bVZhbHVlT3B0aW9uc19yZWZsZWN0aW9uXyA9Ci0g
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKAotICAgICAgRW51bVZhbHVlT3B0aW9u
c19kZXNjcmlwdG9yXywKLSAgICAgIEVudW1WYWx1ZU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2Vf
LAotICAgICAgRW51bVZhbHVlT3B0aW9uc19vZmZzZXRzXywKLSAgICAgIEdPT0dMRV9QUk9UT0JV
Rl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRW51bVZhbHVlT3B0aW9ucywgX2hhc19i
aXRzX1swXSksCi0gICAgICAtMSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVT
U0FHRV9GSUVMRF9PRkZTRVQoRW51bVZhbHVlT3B0aW9ucywgX2V4dGVuc2lvbnNfKSwKLSAgICAg
IHNpemVvZihFbnVtVmFsdWVPcHRpb25zKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFU
RURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRW51bVZhbHVlT3B0aW9ucywgX2ludGVybmFsX21ldGFk
YXRhXyksCi0gICAgICAtMSk7Ci0gIFNlcnZpY2VPcHRpb25zX2Rlc2NyaXB0b3JfID0gZmlsZS0+
bWVzc2FnZV90eXBlKDE0KTsKLSAgc3RhdGljIGNvbnN0IGludCBTZXJ2aWNlT3B0aW9uc19vZmZz
ZXRzX1syXSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERf
T0ZGU0VUKFNlcnZpY2VPcHRpb25zLCBkZXByZWNhdGVkXyksCi0gICAgR09PR0xFX1BST1RPQlVG
X0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChTZXJ2aWNlT3B0aW9ucywgdW5pbnRlcnBy
ZXRlZF9vcHRpb25fKSwKLSAgfTsKLSAgU2VydmljZU9wdGlvbnNfcmVmbGVjdGlvbl8gPQotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9u
OjpOZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIFNlcnZpY2VPcHRpb25zX2Rl
c2NyaXB0b3JfLAotICAgICAgU2VydmljZU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2VfLAotICAg
ICAgU2VydmljZU9wdGlvbnNfb2Zmc2V0c18sCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJB
VEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKFNlcnZpY2VPcHRpb25zLCBfaGFzX2JpdHNfWzBdKSwK
LSAgICAgIC0xLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxE
X09GRlNFVChTZXJ2aWNlT3B0aW9ucywgX2V4dGVuc2lvbnNfKSwKLSAgICAgIHNpemVvZihTZXJ2
aWNlT3B0aW9ucyksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklF
TERfT0ZGU0VUKFNlcnZpY2VPcHRpb25zLCBfaW50ZXJuYWxfbWV0YWRhdGFfKSwKLSAgICAgIC0x
KTsKLSAgTWV0aG9kT3B0aW9uc19kZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlwZSgxNSk7
Ci0gIHN0YXRpYyBjb25zdCBpbnQgTWV0aG9kT3B0aW9uc19vZmZzZXRzX1syXSA9IHsKLSAgICBH
T09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE1ldGhvZE9wdGlv
bnMsIGRlcHJlY2F0ZWRfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VUKE1ldGhvZE9wdGlvbnMsIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXyksCi0gIH07
Ci0gIE1ldGhvZE9wdGlvbnNfcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvbigKLSAgICAgIE1ldGhvZE9wdGlvbnNfZGVzY3JpcHRvcl8sCi0gICAgICBNZXRo
b2RPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAgIE1ldGhvZE9wdGlvbnNfb2Zmc2V0
c18sCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VU
KE1ldGhvZE9wdGlvbnMsIF9oYXNfYml0c19bMF0pLAotICAgICAgLTEsCi0gICAgICBHT09HTEVf
UFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE1ldGhvZE9wdGlvbnMsIF9l
eHRlbnNpb25zXyksCi0gICAgICBzaXplb2YoTWV0aG9kT3B0aW9ucyksCi0gICAgICBHT09HTEVf
UFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE1ldGhvZE9wdGlvbnMsIF9p
bnRlcm5hbF9tZXRhZGF0YV8pLAotICAgICAgLTEpOwotICBVbmludGVycHJldGVkT3B0aW9uX2Rl
c2NyaXB0b3JfID0gZmlsZS0+bWVzc2FnZV90eXBlKDE2KTsKLSAgc3RhdGljIGNvbnN0IGludCBV
bmludGVycHJldGVkT3B0aW9uX29mZnNldHNfWzddID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVW5pbnRlcnByZXRlZE9wdGlvbiwgbmFtZV8p
LAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVW5p
bnRlcnByZXRlZE9wdGlvbiwgaWRlbnRpZmllcl92YWx1ZV8pLAotICAgIEdPT0dMRV9QUk9UT0JV
Rl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVW5pbnRlcnByZXRlZE9wdGlvbiwgcG9z
aXRpdmVfaW50X3ZhbHVlXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdF
X0ZJRUxEX09GRlNFVChVbmludGVycHJldGVkT3B0aW9uLCBuZWdhdGl2ZV9pbnRfdmFsdWVfKSwK
LSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKFVuaW50
ZXJwcmV0ZWRPcHRpb24sIGRvdWJsZV92YWx1ZV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5F
UkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVW5pbnRlcnByZXRlZE9wdGlvbiwgc3RyaW5nX3Zh
bHVlXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNF
VChVbmludGVycHJldGVkT3B0aW9uLCBhZ2dyZWdhdGVfdmFsdWVfKSwKLSAgfTsKLSAgVW5pbnRl
cnByZXRlZE9wdGlvbl9yZWZsZWN0aW9uXyA9Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZs
ZWN0aW9uKAotICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbl9kZXNjcmlwdG9yXywKLSAgICAgIFVu
aW50ZXJwcmV0ZWRPcHRpb246OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgVW5pbnRlcnByZXRl
ZE9wdGlvbl9vZmZzZXRzXywKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FH
RV9GSUVMRF9PRkZTRVQoVW5pbnRlcnByZXRlZE9wdGlvbiwgX2hhc19iaXRzX1swXSksCi0gICAg
ICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKFVuaW50ZXJwcmV0ZWRPcHRpb24pLAotICAg
ICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChVbmludGVy
cHJldGVkT3B0aW9uLCBfaW50ZXJuYWxfbWV0YWRhdGFfKSwKLSAgICAgIC0xKTsKLSAgVW5pbnRl
cnByZXRlZE9wdGlvbl9OYW1lUGFydF9kZXNjcmlwdG9yXyA9IFVuaW50ZXJwcmV0ZWRPcHRpb25f
ZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKDApOwotICBzdGF0aWMgY29uc3QgaW50IFVuaW50ZXJw
cmV0ZWRPcHRpb25fTmFtZVBhcnRfb2Zmc2V0c19bMl0gPSB7Ci0gICAgR09PR0xFX1BST1RPQlVG
X0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChVbmludGVycHJldGVkT3B0aW9uX05hbWVQ
YXJ0LCBuYW1lX3BhcnRfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VUKFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQsIGlzX2V4dGVuc2lvbl8p
LAotICB9OwotICBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0X3JlZmxlY3Rpb25fID0KLSAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlv
bjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBVbmludGVycHJldGVkT3B0
aW9uX05hbWVQYXJ0X2Rlc2NyaXB0b3JfLAotICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1l
UGFydDo6ZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAgICBVbmludGVycHJldGVkT3B0aW9uX05hbWVQ
YXJ0X29mZnNldHNfLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJ
RUxEX09GRlNFVChVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0LCBfaGFzX2JpdHNfWzBdKSwK
LSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoVW5pbnRlcnByZXRlZE9wdGlvbl9O
YW1lUGFydCksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERf
T0ZGU0VUKFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQsIF9pbnRlcm5hbF9tZXRhZGF0YV8p
LAotICAgICAgLTEpOwotICBTb3VyY2VDb2RlSW5mb19kZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3Nh
Z2VfdHlwZSgxNyk7Ci0gIHN0YXRpYyBjb25zdCBpbnQgU291cmNlQ29kZUluZm9fb2Zmc2V0c19b
MV0gPSB7Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNF
VChTb3VyY2VDb2RlSW5mbywgbG9jYXRpb25fKSwKLSAgfTsKLSAgU291cmNlQ29kZUluZm9fcmVm
bGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1l
c3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIFNv
dXJjZUNvZGVJbmZvX2Rlc2NyaXB0b3JfLAotICAgICAgU291cmNlQ29kZUluZm86OmRlZmF1bHRf
aW5zdGFuY2VfLAotICAgICAgU291cmNlQ29kZUluZm9fb2Zmc2V0c18sCi0gICAgICBHT09HTEVf
UFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKFNvdXJjZUNvZGVJbmZvLCBf
aGFzX2JpdHNfWzBdKSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoU291cmNl
Q29kZUluZm8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxE
X09GRlNFVChTb3VyY2VDb2RlSW5mbywgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICAtMSk7
Ci0gIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uX2Rlc2NyaXB0b3JfID0gU291cmNlQ29kZUluZm9f
ZGVzY3JpcHRvcl8tPm5lc3RlZF90eXBlKDApOwotICBzdGF0aWMgY29uc3QgaW50IFNvdXJjZUNv
ZGVJbmZvX0xvY2F0aW9uX29mZnNldHNfWzVdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5F
UkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoU291cmNlQ29kZUluZm9fTG9jYXRpb24sIHBhdGhf
KSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKFNv
dXJjZUNvZGVJbmZvX0xvY2F0aW9uLCBzcGFuXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVS
QVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiwgbGVhZGlu
Z19jb21tZW50c18pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVM
RF9PRkZTRVQoU291cmNlQ29kZUluZm9fTG9jYXRpb24sIHRyYWlsaW5nX2NvbW1lbnRzXyksCi0g
ICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChTb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbiwgbGVhZGluZ19kZXRhY2hlZF9jb21tZW50c18pLAotICB9OwotICBT
b3VyY2VDb2RlSW5mb19Mb2NhdGlvbl9yZWZsZWN0aW9uXyA9Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Ok5ld0dlbmVyYXRlZE1l
c3NhZ2VSZWZsZWN0aW9uKAotICAgICAgU291cmNlQ29kZUluZm9fTG9jYXRpb25fZGVzY3JpcHRv
cl8sCi0gICAgICBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6ZGVmYXVsdF9pbnN0YW5jZV8sCi0g
ICAgICBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbl9vZmZzZXRzXywKLSAgICAgIEdPT0dMRV9QUk9U
T0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoU291cmNlQ29kZUluZm9fTG9jYXRp
b24sIF9oYXNfYml0c19bMF0pLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIHNpemVvZihT
b3VyY2VDb2RlSW5mb19Mb2NhdGlvbiksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVE
X01FU1NBR0VfRklFTERfT0ZGU0VUKFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uLCBfaW50ZXJuYWxf
bWV0YWRhdGFfKSwKLSAgICAgIC0xKTsKLSAgR2VuZXJhdGVkQ29kZUluZm9fZGVzY3JpcHRvcl8g
PSBmaWxlLT5tZXNzYWdlX3R5cGUoMTgpOwotICBzdGF0aWMgY29uc3QgaW50IEdlbmVyYXRlZENv
ZGVJbmZvX29mZnNldHNfWzFdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVT
U0FHRV9GSUVMRF9PRkZTRVQoR2VuZXJhdGVkQ29kZUluZm8sIGFubm90YXRpb25fKSwKLSAgfTsK
LSAgR2VuZXJhdGVkQ29kZUluZm9fcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvbigKLSAgICAgIEdlbmVyYXRlZENvZGVJbmZvX2Rlc2NyaXB0b3JfLAotICAg
ICAgR2VuZXJhdGVkQ29kZUluZm86OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgR2VuZXJhdGVk
Q29kZUluZm9fb2Zmc2V0c18sCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NB
R0VfRklFTERfT0ZGU0VUKEdlbmVyYXRlZENvZGVJbmZvLCBfaGFzX2JpdHNfWzBdKSwKLSAgICAg
IC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoR2VuZXJhdGVkQ29kZUluZm8pLAotICAgICAg
R09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChHZW5lcmF0ZWRD
b2RlSW5mbywgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICAtMSk7Ci0gIEdlbmVyYXRlZENv
ZGVJbmZvX0Fubm90YXRpb25fZGVzY3JpcHRvcl8gPSBHZW5lcmF0ZWRDb2RlSW5mb19kZXNjcmlw
dG9yXy0+bmVzdGVkX3R5cGUoMCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQgR2VuZXJhdGVkQ29kZUlu
Zm9fQW5ub3RhdGlvbl9vZmZzZXRzX1s0XSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJB
VEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24sIHBh
dGhfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VU
KEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24sIHNvdXJjZV9maWxlXyksCi0gICAgR09PR0xF
X1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChHZW5lcmF0ZWRDb2RlSW5m
b19Bbm5vdGF0aW9uLCBiZWdpbl8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVT
U0FHRV9GSUVMRF9PRkZTRVQoR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiwgZW5kXyksCi0g
IH07Ci0gIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fcmVmbGVjdGlvbl8gPQotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpO
ZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIEdlbmVyYXRlZENvZGVJbmZvX0Fu
bm90YXRpb25fZGVzY3JpcHRvcl8sCi0gICAgICBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9u
OjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAgIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25f
b2Zmc2V0c18sCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERf
T0ZGU0VUKEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24sIF9oYXNfYml0c19bMF0pLAotICAg
ICAgLTEsCi0gICAgICAtMSwKLSAgICAgIHNpemVvZihHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0
aW9uKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZT
RVQoR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiwgX2ludGVybmFsX21ldGFkYXRhXyksCi0g
ICAgICAtMSk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLUdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09O
Q0UocHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNfb25jZV8pOwotaW5saW5lIHZvaWQgcHJvdG9i
dWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCkgewotICA6Omdvb2dsZTo6cHJvdG9idWY6Okdvb2ds
ZU9uY2VJbml0KCZwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc19vbmNlXywKLSAgICAgICAgICAg
ICAgICAgJnByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9y
XzJlcHJvdG8pOwotfQotCi12b2lkIHByb3RvYnVmX1JlZ2lzdGVyVHlwZXMoY29uc3QgOjpzdGQ6
OnN0cmluZyYpIHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRN
ZXNzYWdlKAotICAgICAgRmlsZURlc2NyaXB0b3JTZXRfZGVzY3JpcHRvcl8sICZGaWxlRGVzY3Jp
cHRvclNldDo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBGaWxl
RGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0b3JfLCAmRmlsZURlc2NyaXB0b3JQcm90bzo6ZGVmYXVs
dF9pbnN0YW5jZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50
ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBEZXNjcmlwdG9yUHJvdG9fZGVz
Y3JpcHRvcl8sICZEZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRN
ZXNzYWdlKAotICAgICAgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlX2Rlc2NyaXB0b3Jf
LCAmRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjpkZWZhdWx0X2luc3RhbmNlKCkpOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2Vu
ZXJhdGVkTWVzc2FnZSgKLSAgICAgIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlX2Rlc2Ny
aXB0b3JfLCAmRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U6OmRlZmF1bHRfaW5zdGFuY2Uo
KSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0
ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRv
cl8sICZGaWVsZERlc2NyaXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1l
c3NhZ2UoCi0gICAgICBPbmVvZkRlc2NyaXB0b3JQcm90b19kZXNjcmlwdG9yXywgJk9uZW9mRGVz
Y3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgKLSAgICAg
IEVudW1EZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl8sICZFbnVtRGVzY3JpcHRvclByb3RvOjpk
ZWZhdWx0X2luc3RhbmNlKCkpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5
OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgKLSAgICAgIEVudW1WYWx1ZURlc2Ny
aXB0b3JQcm90b19kZXNjcmlwdG9yXywgJkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6ZGVmYXVs
dF9pbnN0YW5jZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50
ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBTZXJ2aWNlRGVzY3JpcHRvclBy
b3RvX2Rlc2NyaXB0b3JfLCAmU2VydmljZURlc2NyaXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5j
ZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdp
c3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBNZXRob2REZXNjcmlwdG9yUHJvdG9fZGVzY3Jp
cHRvcl8sICZNZXRob2REZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0
ZWRNZXNzYWdlKAotICAgICAgRmlsZU9wdGlvbnNfZGVzY3JpcHRvcl8sICZGaWxlT3B0aW9uczo6
ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9y
eTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBNZXNzYWdlT3B0aW9u
c19kZXNjcmlwdG9yXywgJk1lc3NhZ2VPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJh
dGVkTWVzc2FnZSgKLSAgICAgIEZpZWxkT3B0aW9uc19kZXNjcmlwdG9yXywgJkZpZWxkT3B0aW9u
czo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFj
dG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBFbnVtT3B0aW9u
c19kZXNjcmlwdG9yXywgJkVudW1PcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVk
TWVzc2FnZSgKLSAgICAgIEVudW1WYWx1ZU9wdGlvbnNfZGVzY3JpcHRvcl8sICZFbnVtVmFsdWVP
cHRpb25zOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3Nh
Z2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgKLSAgICAgIFNlcnZp
Y2VPcHRpb25zX2Rlc2NyaXB0b3JfLCAmU2VydmljZU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2Uo
KSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0
ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgTWV0aG9kT3B0aW9uc19kZXNjcmlwdG9yXywgJk1l
dGhvZE9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAg
VW5pbnRlcnByZXRlZE9wdGlvbl9kZXNjcmlwdG9yXywgJlVuaW50ZXJwcmV0ZWRPcHRpb246OmRl
ZmF1bHRfaW5zdGFuY2UoKSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6
OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgVW5pbnRlcnByZXRlZE9w
dGlvbl9OYW1lUGFydF9kZXNjcmlwdG9yXywgJlVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6
OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rv
cnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgU291cmNlQ29kZUlu
Zm9fZGVzY3JpcHRvcl8sICZTb3VyY2VDb2RlSW5mbzo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVy
YXRlZE1lc3NhZ2UoCi0gICAgICBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbl9kZXNjcmlwdG9yXywg
JlNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVz
c2FnZSgKLSAgICAgIEdlbmVyYXRlZENvZGVJbmZvX2Rlc2NyaXB0b3JfLCAmR2VuZXJhdGVkQ29k
ZUluZm86OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2Fn
ZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgR2VuZXJh
dGVkQ29kZUluZm9fQW5ub3RhdGlvbl9kZXNjcmlwdG9yXywgJkdlbmVyYXRlZENvZGVJbmZvX0Fu
bm90YXRpb246OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi12
b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3Jf
MmVwcm90bygpIHsKLSAgZGVsZXRlIEZpbGVEZXNjcmlwdG9yU2V0OjpkZWZhdWx0X2luc3RhbmNl
XzsKLSAgZGVsZXRlIEZpbGVEZXNjcmlwdG9yU2V0X3JlZmxlY3Rpb25fOwotICBkZWxldGUgRmls
ZURlc2NyaXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRlbGV0ZSBGaWxlRGVzY3Jp
cHRvclByb3RvX3JlZmxlY3Rpb25fOwotICBkZWxldGUgRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0
X2luc3RhbmNlXzsKLSAgZGVsZXRlIERlc2NyaXB0b3JQcm90b19yZWZsZWN0aW9uXzsKLSAgZGVs
ZXRlIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0g
IGRlbGV0ZSBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2VfcmVmbGVjdGlvbl87Ci0gIGRl
bGV0ZSBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0g
IGRlbGV0ZSBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZV9yZWZsZWN0aW9uXzsKLSAgZGVs
ZXRlIEZpZWxkRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRlIEZp
ZWxkRGVzY3JpcHRvclByb3RvX3JlZmxlY3Rpb25fOwotICBkZWxldGUgT25lb2ZEZXNjcmlwdG9y
UHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgT25lb2ZEZXNjcmlwdG9yUHJvdG9f
cmVmbGVjdGlvbl87Ci0gIGRlbGV0ZSBFbnVtRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3Rh
bmNlXzsKLSAgZGVsZXRlIEVudW1EZXNjcmlwdG9yUHJvdG9fcmVmbGVjdGlvbl87Ci0gIGRlbGV0
ZSBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUg
RW51bVZhbHVlRGVzY3JpcHRvclByb3RvX3JlZmxlY3Rpb25fOwotICBkZWxldGUgU2VydmljZURl
c2NyaXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRlbGV0ZSBTZXJ2aWNlRGVzY3Jp
cHRvclByb3RvX3JlZmxlY3Rpb25fOwotICBkZWxldGUgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpk
ZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRlIE1ldGhvZERlc2NyaXB0b3JQcm90b19yZWZsZWN0
aW9uXzsKLSAgZGVsZXRlIEZpbGVPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRl
IEZpbGVPcHRpb25zX3JlZmxlY3Rpb25fOwotICBkZWxldGUgTWVzc2FnZU9wdGlvbnM6OmRlZmF1
bHRfaW5zdGFuY2VfOwotICBkZWxldGUgTWVzc2FnZU9wdGlvbnNfcmVmbGVjdGlvbl87Ci0gIGRl
bGV0ZSBGaWVsZE9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgRmllbGRPcHRp
b25zX3JlZmxlY3Rpb25fOwotICBkZWxldGUgRW51bU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2Vf
OwotICBkZWxldGUgRW51bU9wdGlvbnNfcmVmbGVjdGlvbl87Ci0gIGRlbGV0ZSBFbnVtVmFsdWVP
cHRpb25zOjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRlIEVudW1WYWx1ZU9wdGlvbnNfcmVm
bGVjdGlvbl87Ci0gIGRlbGV0ZSBTZXJ2aWNlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0g
IGRlbGV0ZSBTZXJ2aWNlT3B0aW9uc19yZWZsZWN0aW9uXzsKLSAgZGVsZXRlIE1ldGhvZE9wdGlv
bnM6OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgTWV0aG9kT3B0aW9uc19yZWZsZWN0aW9u
XzsKLSAgZGVsZXRlIFVuaW50ZXJwcmV0ZWRPcHRpb246OmRlZmF1bHRfaW5zdGFuY2VfOwotICBk
ZWxldGUgVW5pbnRlcnByZXRlZE9wdGlvbl9yZWZsZWN0aW9uXzsKLSAgZGVsZXRlIFVuaW50ZXJw
cmV0ZWRPcHRpb25fTmFtZVBhcnQ6OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgVW5pbnRl
cnByZXRlZE9wdGlvbl9OYW1lUGFydF9yZWZsZWN0aW9uXzsKLSAgZGVsZXRlIFNvdXJjZUNvZGVJ
bmZvOjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRlIFNvdXJjZUNvZGVJbmZvX3JlZmxlY3Rp
b25fOwotICBkZWxldGUgU291cmNlQ29kZUluZm9fTG9jYXRpb246OmRlZmF1bHRfaW5zdGFuY2Vf
OwotICBkZWxldGUgU291cmNlQ29kZUluZm9fTG9jYXRpb25fcmVmbGVjdGlvbl87Ci0gIGRlbGV0
ZSBHZW5lcmF0ZWRDb2RlSW5mbzo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRlbGV0ZSBHZW5lcmF0
ZWRDb2RlSW5mb19yZWZsZWN0aW9uXzsKLSAgZGVsZXRlIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90
YXRpb246OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgR2VuZXJhdGVkQ29kZUluZm9fQW5u
b3RhdGlvbl9yZWZsZWN0aW9uXzsKLX0KLQotdm9pZCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8y
ZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCkgewotICBzdGF0aWMgYm9vbCBhbHJlYWR5
X2hlcmUgPSBmYWxzZTsKLSAgaWYgKGFscmVhZHlfaGVyZSkgcmV0dXJuOwotICBhbHJlYWR5X2hl
cmUgPSB0cnVlOwotICBHT09HTEVfUFJPVE9CVUZfVkVSSUZZX1ZFUlNJT047Ci0KLSAgOjpnb29n
bGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbDo6SW50ZXJuYWxBZGRHZW5lcmF0ZWRGaWxlKAot
ICAgICJcbiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90b1wwMjJcMDE3Z29vZyIKLSAg
ICAibGUucHJvdG9idWZcIkdcblwwMjFGaWxlRGVzY3JpcHRvclNldFwwMjIyXG5cMDA0ZmlsZSIK
LSAgICAiXDAzMFwwMDEgXDAwMyhcMDEzMiQuZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
UCIKLSAgICAicm90b1wiXDMzM1wwMDNcblwwMjNGaWxlRGVzY3JpcHRvclByb3RvXDAyMlwwMTRc
blwwMDRuYW1lXDAzMFwwMDEgXDAwMSIKLSAgICAiKFx0XDAyMlwwMTdcblwwMDdwYWNrYWdlXDAz
MFwwMDIgXDAwMShcdFwwMjJcMDIyXG5cbmRlcGVuZGVuY3lcMDMwXDAwMyBcMDAzKFx0XDAyMiIK
LSAgICAiXDAzMVxuXDAyMXB1YmxpY19kZXBlbmRlbmN5XDAzMFxuIFwwMDMoXDAwNVwwMjJcMDI3
XG5cMDE3d2Vha19kZXBlbiIKLSAgICAiZGVuY3lcMDMwXDAxMyBcMDAzKFwwMDVcMDIyNlxuXDAx
NG1lc3NhZ2VfdHlwZVwwMzBcMDA0IFwwMDMoXDAxMzIgLmdvb2ciCi0gICAgImxlLnByb3RvYnVm
LkRlc2NyaXB0b3JQcm90b1wwMjI3XG5cdGVudW1fdHlwZSIKLSAgICAiXDAzMFwwMDUgXDAwMyhc
MDEzMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUCIKLSAgICAicm90b1wwMjI4XG5c
MDA3c2VydmljZVwwMzBcMDA2IFwwMDMoXDAxMzJcJy5nb29nbGUucHJvdG9idWYuIgotICAgICJT
ZXJ2aWNlRGVzY3JpcHRvclByb3RvXDAyMjhcblx0ZXh0ZW5zaW9uXDAzMFwwMDcgXDAwMygiCi0g
ICAgIlwwMTMyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8iCi0gICAgIlww
MjItXG5cMDA3b3B0aW9uc1wwMzBcMDEwIFwwMDEoXDAxMzJcMDM0Lmdvb2dsZS5wcm90b2J1Zi5G
aWxlIgotICAgICJPcHRpb25zXDAyMjlcblwwMjBzb3VyY2VfY29kZV9pbmZvXDAzMFx0IFwwMDEo
XDAxMzJcMDM3Lmdvb2ciCi0gICAgImxlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvXDAyMlwwMTZc
blwwMDZzeW50YXhcMDMwXDAxNCBcMDAxIgotICAgICIoXHRcIlwzNjBcMDA0XG5cMDE3RGVzY3Jp
cHRvclByb3RvXDAyMlwwMTRcblwwMDRuYW1lXDAzMFwwMDEgXDAwMShcdFwwMjI0XG5cMDA1Igot
ICAgICJmaWVsZFwwMzBcMDAyIFwwMDMoXDAxMzIlLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2Ny
IgotICAgICJpcHRvclByb3RvXDAyMjhcblx0ZXh0ZW5zaW9uXDAzMFwwMDYgXDAwMyhcMDEzMiUu
Z29vZ2xlLnAiCi0gICAgInJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9cMDIyNVxuXDAxM25l
c3RlZF90IgotICAgICJ5cGVcMDMwXDAwMyBcMDAzKFwwMTMyIC5nb29nbGUucHJvdG9idWYuRGVz
Y3JpcHRvclByIgotICAgICJvdG9cMDIyN1xuXHRlbnVtX3R5cGVcMDMwXDAwNCBcMDAzKFwwMTMy
JC5nb29nbGUucHJvdG9idWYiCi0gICAgIi5FbnVtRGVzY3JpcHRvclByb3RvXDAyMkhcblwwMTdl
eHRlbnNpb25fcmFuZ2VcMDMwIgotICAgICJcMDA1IFwwMDMoXDAxMzIvLmdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9yUHJvdG8uIgotICAgICJFeHRlbnNpb25SYW5nZVwwMjI5XG5cbm9uZW9mX2Rl
Y2xcMDMwXDAxMCBcMDAzKFwwMTMyJS5nb28iCi0gICAgImdsZS5wcm90b2J1Zi5PbmVvZkRlc2Ny
aXB0b3JQcm90b1wwMjIwXG5cMDA3b3B0IgotICAgICJpb25zXDAzMFwwMDcgXDAwMShcMDEzMlww
MzcuZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpIgotICAgICJvbnNcMDIyRlxuXDAxNnJlc2Vy
dmVkX3JhbmdlXDAzMFx0IFwwMDMoXDAxMzIuLmdvb2dsZS5wcm8iCi0gICAgInRvYnVmLkRlc2Ny
aXB0b3JQcm90by5SZXNlcnZlZFJhbmdlXDAyMlwwMjVcblxyciIKLSAgICAiZXNlcnZlZF9uYW1l
XDAzMFxuIFwwMDMoXHRcMDMyLFxuXDAxNkV4dGVuc2lvblJhbmdlXDAyMlxyXG5cMDA1IgotICAg
ICJzdGFydFwwMzBcMDAxIFwwMDEoXDAwNVwwMjJcMDEzXG5cMDAzZW5kXDAzMFwwMDIgXDAwMShc
MDA1XDAzMitcblxyUmVzZXJ2ZWRSYW5nIgotICAgICJlXDAyMlxyXG5cMDA1c3RhcnRcMDMwXDAw
MSBcMDAxKFwwMDVcMDIyXDAxM1xuXDAwM2VuZFwwMzBcMDAyIFwwMDEoXDAwNVwiXDI3NFwwMDVc
blwwMjRGaWVsZEQiCi0gICAgImVzY3JpcHRvclByb3RvXDAyMlwwMTRcblwwMDRuYW1lXDAzMFww
MDEgXDAwMShcdFwwMjJcMDE2XG5cMDA2bnVtYmVyXDAzMFwwMDMiCi0gICAgIiBcMDAxKFwwMDVc
MDIyOlxuXDAwNWxhYmVsXDAzMFwwMDQgXDAwMShcMDE2MisuZ29vZ2xlLnByb3RvYnVmLkZpIgot
ICAgICJlbGREZXNjcmlwdG9yUHJvdG8uTGFiZWxcMDIyOFxuXDAwNHR5cGVcMDMwXDAwNSBcMDAx
KFwwMTYyKiIKLSAgICAiLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeSIK
LSAgICAicGVcMDIyXDAyMVxuXHR0eXBlX25hbWVcMDMwXDAwNiBcMDAxKFx0XDAyMlwwMjBcblww
MTBleHRlbmRlZVwwMzBcMDAyIFwwMDEoXHRcMDIyIgotICAgICJcMDI1XG5ccmRlZmF1bHRfdmFs
dWVcMDMwXDAwNyBcMDAxKFx0XDAyMlwwMjNcblwwMTNvbmVvZl9pbmRleFwwMzBcdCAiCi0gICAg
IlwwMDEoXDAwNVwwMjJcMDIxXG5cdGpzb25fbmFtZVwwMzBcbiBcMDAxKFx0XDAyMi5cblwwMDdv
cHRpb25zXDAzMFwwMTAgXDAwMShcMDEzMiIKLSAgICAiXDAzNS5nb29nbGUucHJvdG9idWYuRmll
bGRPcHRpb25zXCJcMjY2XDAwMlxuXDAwNFR5cGVcMDIyIgotICAgICJcMDE3XG5cMDEzVFlQRV9E
T1VCTEVcMDIwXDAwMVwwMjJcMDE2XG5cblRZUEVfRkxPQVRcMDIwXDAwMlwwMjJcMDE2XG5cblRZ
UEUiCi0gICAgIl9JTlQ2NFwwMjBcMDAzXDAyMlwwMTdcblwwMTNUWVBFX1VJTlQ2NFwwMjBcMDA0
XDAyMlwwMTZcblxuVFlQRV9JTlQzMlwwMjAiCi0gICAgIlwwMDVcMDIyXDAyMFxuXDAxNFRZUEVf
RklYRUQ2NFwwMjBcMDA2XDAyMlwwMjBcblwwMTRUWVBFX0ZJWEVEMzJcMDIwXDAwN1wwMjJcclxu
IgotICAgICJcdFRZUEVfQk9PTFwwMjBcMDEwXDAyMlwwMTdcblwwMTNUWVBFX1NUUklOR1wwMjBc
dFwwMjJcMDE2XG5cblRZUEVfR1IiCi0gICAgIk9VUFwwMjBcblwwMjJcMDIwXG5cMDE0VFlQRV9N
RVNTQUdFXDAyMFwwMTNcMDIyXDAxNlxuXG5UWVBFX0JZVEVTXDAyMFwwMTRcMDIyIgotICAgICJc
MDE3XG5cMDEzVFlQRV9VSU5UMzJcMDIwXHJcMDIyXHJcblx0VFlQRV9FTlVNXDAyMFwwMTZcMDIy
XDAyMVxuXHJUWVBFXyIKLSAgICAiU0ZJWEVEMzJcMDIwXDAxN1wwMjJcMDIxXG5cclRZUEVfU0ZJ
WEVENjRcMDIwXDAyMFwwMjJcMDE3XG5cMDEzVFlQRV9TSSIKLSAgICAiTlQzMlwwMjBcMDIxXDAy
MlwwMTdcblwwMTNUWVBFX1NJTlQ2NFwwMjBcMDIyXCJDXG5cMDA1TGFiZWxcMDIyXDAyMlxuXDAx
NkxBQkUiCi0gICAgIkxfT1BUSU9OQUxcMDIwXDAwMVwwMjJcMDIyXG5cMDE2TEFCRUxfUkVRVUlS
RURcMDIwXDAwMlwwMjJcMDIyXG5cMDE2TEFCRSIKLSAgICAiTF9SRVBFQVRFRFwwMjBcMDAzXCIk
XG5cMDI0T25lb2ZEZXNjcmlwdG9yUHJvdG9cMDIyXDAxNFxuXDAwNCIKLSAgICAibmFtZVwwMzBc
MDAxIFwwMDEoXHRcIlwyMTRcMDAxXG5cMDIzRW51bURlc2NyaXB0b3JQcm90b1wwMjJcMDE0XG5c
MDA0bmEiCi0gICAgIm1lXDAzMFwwMDEgXDAwMShcdFwwMjI4XG5cMDA1dmFsdWVcMDMwXDAwMiBc
MDAzKFwwMTMyKS5nb29nbGUucHJvdG9idSIKLSAgICAiZi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJv
dG9cMDIyLVxuXDAwN29wdGlvbnNcMDMwXDAwMyAiCi0gICAgIlwwMDEoXDAxMzJcMDM0Lmdvb2ds
ZS5wcm90b2J1Zi5FbnVtT3B0aW9uc1wibFxuXDAzMEVudSIKLSAgICAibVZhbHVlRGVzY3JpcHRv
clByb3RvXDAyMlwwMTRcblwwMDRuYW1lXDAzMFwwMDEgXDAwMShcdFwwMjJcMDE2XG5cMDA2biIK
LSAgICAidW1iZXJcMDMwXDAwMiBcMDAxKFwwMDVcMDIyMlxuXDAwN29wdGlvbnNcMDMwXDAwMyBc
MDAxKFwwMTMyIS5nb29nbGUucHIiCi0gICAgIm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zXCJcMjIw
XDAwMVxuXDAyNlNlcnZpY2VEZXNjciIKLSAgICAiaXB0b3JQcm90b1wwMjJcMDE0XG5cMDA0bmFt
ZVwwMzBcMDAxIFwwMDEoXHRcMDIyNlxuXDAwNm1ldGhvZFwwMzBcMDAyIFwwMDMoXDAxMyIKLSAg
ICAiMiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90byIKLSAgICAiXDAyMjBc
blwwMDdvcHRpb25zXDAzMFwwMDMgXDAwMShcMDEzMlwwMzcuZ29vZ2xlLnByb3RvYnVmLlNlcnYi
Ci0gICAgImljZU9wdGlvbnNcIlwzMDFcMDAxXG5cMDI1TWV0aG9kRGVzY3JpcHRvclByb3RvXDAy
MlwwMTRcblwwMDQiCi0gICAgIm5hbWVcMDMwXDAwMSBcMDAxKFx0XDAyMlwwMjJcblxuaW5wdXRf
dHlwZVwwMzBcMDAyIFwwMDEoXHRcMDIyXDAyM1xuXDAxM291dHB1dCIKLSAgICAiX3R5cGVcMDMw
XDAwMyBcMDAxKFx0XDAyMi9cblwwMDdvcHRpb25zXDAzMFwwMDQgXDAwMShcMDEzMlwwMzYuZ29v
Z2xlLnByIgotICAgICJvdG9idWYuTWV0aG9kT3B0aW9uc1wwMjJcMDM3XG5cMDIwY2xpZW50X3N0
cmVhbWluZyIKLSAgICAiXDAzMFwwMDUgXDAwMShcMDEwOlwwMDVmYWxzZVwwMjJcMDM3XG5cMDIw
c2VydmVyX3N0cmVhbWluZ1wwMzBcMDA2IFwwMDEoXDAxMDoiCi0gICAgIlwwMDVmYWxzZVwiXDIw
N1wwMDVcblwwMTNGaWxlT3B0aW9uc1wwMjJcMDI0XG5cMDE0amF2YV9wYWNrYWdlXDAzMFwwMDEi
Ci0gICAgIiBcMDAxKFx0XDAyMlwwMzRcblwwMjRqYXZhX291dGVyX2NsYXNzbmFtZVwwMzBcMDEw
IFwwMDEoXHRcMDIyXCJcblwwMjNqYSIKLSAgICAidmFfbXVsdGlwbGVfZmlsZXNcMDMwXG4gXDAw
MShcMDEwOlwwMDVmYWxzZVwwMjIsXG5cMDM1amF2YV9nIgotICAgICJlbmVyYXRlX2VxdWFsc19h
bmRfaGFzaFwwMzBcMDI0IFwwMDEoXDAxMDpcMDA1ZmFsc2VcMDIyJVxuXDAyNiIKLSAgICAiamF2
YV9zdHJpbmdfY2hlY2tfdXRmOFwwMzBcMDMzIFwwMDEoXDAxMDpcMDA1ZmFsc2VcMDIyRlxuXDAx
NG8iCi0gICAgInB0aW1pemVfZm9yXDAzMFx0IFwwMDEoXDAxNjIpLmdvb2dsZS5wcm90b2J1Zi5G
aWxlIgotICAgICJPcHRpb25zLk9wdGltaXplTW9kZTpcMDA1U1BFRURcMDIyXDAyMlxuXG5nb19w
YWNrYWciCi0gICAgImVcMDMwXDAxMyBcMDAxKFx0XDAyMlwiXG5cMDIzY2NfZ2VuZXJpY19zZXJ2
aWNlc1wwMzBcMDIwIFwwMDEoXDAxMDpcMDA1ZmEiCi0gICAgImxzZVwwMjIkXG5cMDI1amF2YV9n
ZW5lcmljX3NlcnZpY2VzXDAzMFwwMjEgXDAwMShcMDEwOlwwMDVmYWxzIgotICAgICJlXDAyMlwi
XG5cMDIzcHlfZ2VuZXJpY19zZXJ2aWNlc1wwMzBcMDIyIFwwMDEoXDAxMDpcMDA1ZmFsc2VcMDIy
XDAzMVxuIgotICAgICJcbmRlcHJlY2F0ZWRcMDMwXDAyNyBcMDAxKFwwMTA6XDAwNWZhbHNlXDAy
MlwwMzdcblwwMjBjY19lbmFibGVfYXIiCi0gICAgImVuYXNcMDMwXDAzNyBcMDAxKFwwMTA6XDAw
NWZhbHNlXDAyMlwwMzFcblwwMjFvYmpjX2NsYXNzX3ByZWZpeFwwMzAkIgotICAgICIgXDAwMShc
dFwwMjJcMDMwXG5cMDIwY3NoYXJwX25hbWVzcGFjZVwwMzAlIFwwMDEoXHRcMDIyQ1xuXDAyNHVu
aW50ZSIKLSAgICAicnByZXRlZF9vcHRpb25cMDMwXDM0N1wwMDcgXDAwMyhcMDEzMiQuZ29vZ2xl
LnByb3RvYnVmLiIKLSAgICAiVW5pbnRlcnByZXRlZE9wdGlvblwiOlxuXDAxNE9wdGltaXplTW9k
ZVwwMjJcdFxuXDAwNVMiCi0gICAgIlBFRURcMDIwXDAwMVwwMjJcclxuXHRDT0RFX1NJWkVcMDIw
XDAwMlwwMjJcMDIwXG5cMDE0TElURV9SVU5USU1FXDAyMFwwMDMqIgotICAgICJcdFwwMTBcMzUw
XDAwN1wwMjBcMjAwXDIwMFwyMDBcMjAwXDAwMkpcMDA0XDAxMCZcMDIwXCdcIlwzNDZcMDAxXG5c
MDE2TWVzc2FnZU9wdGlvbnNcMDIyJlxuXDAyN20iCi0gICAgImVzc2FnZV9zZXRfd2lyZV9mb3Jt
YXRcMDMwXDAwMSBcMDAxKFwwMTA6XDAwNWZhbHNlXDAyMi5cblwwMzduIgotICAgICJvX3N0YW5k
YXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3JcMDMwXDAwMiBcMDAxKFwwMTA6XDAwNWZhIgotICAgICJs
c2VcMDIyXDAzMVxuXG5kZXByZWNhdGVkXDAzMFwwMDMgXDAwMShcMDEwOlwwMDVmYWxzZVwwMjJc
MDIxXG5cdG1hcF9lbiIKLSAgICAidHJ5XDAzMFwwMDcgXDAwMShcMDEwXDAyMkNcblwwMjR1bmlu
dGVycHJldGVkX29wdGlvblwwMzBcMzQ3XDAwNyBcMDAzKFwwMTMiCi0gICAgIjIkLmdvb2dsZS5w
cm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKlx0IgotICAgICJcMDEwXDM1MFwwMDdcMDIwXDIw
MFwyMDBcMjAwXDIwMFwwMDJcIlwyMzBcMDAzXG5cMDE0RmllbGRPcHRpb25zXDAyMjpcblwwMDVj
dHlwZVwwMzBcMDAxIFwwMDEoIgotICAgICJcMDE2MiMuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0
aW9ucy5DVHlwZTpcMDA2IgotICAgICJTVFJJTkdcMDIyXDAxNlxuXDAwNnBhY2tlZFwwMzBcMDAy
IFwwMDEoXDAxMFwwMjJcP1xuXDAwNmpzdHlwZVwwMzBcMDA2IFwwMDEoXDAxNjIkIgotICAgICIu
Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGU6XHRKUyIKLSAgICAiX05PUk1BTFww
MjJcMDIzXG5cMDA0bGF6eVwwMzBcMDA1IFwwMDEoXDAxMDpcMDA1ZmFsc2VcMDIyXDAzMVxuXG5k
ZXByZWNhdCIKLSAgICAiZWRcMDMwXDAwMyBcMDAxKFwwMTA6XDAwNWZhbHNlXDAyMlwwMjNcblww
MDR3ZWFrXDAzMFxuIFwwMDEoXDAxMDpcMDA1ZmFsc2VcMDIyQ1xuXDAyNCIKLSAgICAidW5pbnRl
cnByZXRlZF9vcHRpb25cMDMwXDM0N1wwMDcgXDAwMyhcMDEzMiQuZ29vZ2xlLnBybyIKLSAgICAi
dG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblwiL1xuXDAwNUNUeXBlXDAyMlxuXG5cMDA2U1QiCi0g
ICAgIlJJTkdcMDIwXDAwMFwwMjJcMDEwXG5cMDA0Q09SRFwwMjBcMDAxXDAyMlwwMjBcblwwMTRT
VFJJTkdfUElFQ0VcMDIwXDAwMlwiNVxuXDAwNkpTIgotICAgICJUeXBlXDAyMlxyXG5cdEpTX05P
Uk1BTFwwMjBcMDAwXDAyMlxyXG5cdEpTX1NUUklOR1wwMjBcMDAxXDAyMlxyXG5cdEpTIgotICAg
ICJfTlVNQkVSXDAyMFwwMDIqXHRcMDEwXDM1MFwwMDdcMDIwXDIwMFwyMDBcMjAwXDIwMFwwMDJc
IlwyMTVcMDAxXG5cMDEzRW51bU9wdGlvbnNcMDIyXDAyM1xuXDAxMyIKLSAgICAiYWxsb3dfYWxp
YXNcMDMwXDAwMiBcMDAxKFwwMTBcMDIyXDAzMVxuXG5kZXByZWNhdGVkXDAzMFwwMDMgXDAwMShc
MDEwOlwwMDVmIgotICAgICJhbHNlXDAyMkNcblwwMjR1bmludGVycHJldGVkX29wdGlvblwwMzBc
MzQ3XDAwNyBcMDAzKFwwMTMyJC5nbyIKLSAgICAib2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk
T3B0aW9uKlx0XDAxMFwzNTBcMDA3XDAyMFwyMDAiCi0gICAgIlwyMDBcMjAwXDIwMFwwMDJcIn1c
blwwMjBFbnVtVmFsdWVPcHRpb25zXDAyMlwwMzFcblxuZGVwcmVjYXRlZFwwMzBcMDAxIgotICAg
ICIgXDAwMShcMDEwOlwwMDVmYWxzZVwwMjJDXG5cMDI0dW5pbnRlcnByZXRlZF9vcHRpb25cMDMw
XDM0N1wwMDcgXDAwMyIKLSAgICAiKFwwMTMyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRl
ZE9wdGlvbiIKLSAgICAiKlx0XDAxMFwzNTBcMDA3XDAyMFwyMDBcMjAwXDIwMFwyMDBcMDAyXCJ7
XG5cMDE2U2VydmljZU9wdGlvbnNcMDIyXDAzMVxuXG5kZXByZWNhIgotICAgICJ0ZWRcMDMwISBc
MDAxKFwwMTA6XDAwNWZhbHNlXDAyMkNcblwwMjR1bmludGVycHJldGVkX29wdGlvbiIKLSAgICAi
XDAzMFwzNDdcMDA3IFwwMDMoXDAxMzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkTyIK
LSAgICAicHRpb24qXHRcMDEwXDM1MFwwMDdcMDIwXDIwMFwyMDBcMjAwXDIwMFwwMDJcInpcblxy
TWV0aG9kT3B0aW9uc1wwMjJcMDMxXG5cbmRlcCIKLSAgICAicmVjYXRlZFwwMzAhIFwwMDEoXDAx
MDpcMDA1ZmFsc2VcMDIyQ1xuXDAyNHVuaW50ZXJwcmV0ZWRfb3AiCi0gICAgInRpb25cMDMwXDM0
N1wwMDcgXDAwMyhcMDEzMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmUiCi0gICAgInRlZE9w
dGlvbipcdFwwMTBcMzUwXDAwN1wwMjBcMjAwXDIwMFwyMDBcMjAwXDAwMlwiXDIzNlwwMDJcblww
MjNVbmludGVycHJldGVkT3AiCi0gICAgInRpb25cMDIyO1xuXDAwNG5hbWVcMDMwXDAwMiBcMDAz
KFwwMTMyLS5nb29nbGUucHJvdG9idWYuVW5pIgotICAgICJudGVycHJldGVkT3B0aW9uLk5hbWVQ
YXJ0XDAyMlwwMzBcblwwMjBpZGVudGlmaWVyXyIKLSAgICAidmFsdWVcMDMwXDAwMyBcMDAxKFx0
XDAyMlwwMzJcblwwMjJwb3NpdGl2ZV9pbnRfdmFsdWVcMDMwXDAwNCBcMDAxKFwwMDRcMDIyIgot
ICAgICJcMDMyXG5cMDIybmVnYXRpdmVfaW50X3ZhbHVlXDAzMFwwMDUgXDAwMShcMDAzXDAyMlww
MjRcblwwMTRkb3VibGVfdmEiCi0gICAgImx1ZVwwMzBcMDA2IFwwMDEoXDAwMVwwMjJcMDI0XG5c
MDE0c3RyaW5nX3ZhbHVlXDAzMFwwMDcgXDAwMShcMDE0XDAyMlwwMjdcblwwMTdhZ2dyZSIKLSAg
ICAiZ2F0ZV92YWx1ZVwwMzBcMDEwIFwwMDEoXHRcMDMyM1xuXDAxME5hbWVQYXJ0XDAyMlwwMjFc
blx0bmFtZV9wYXIiCi0gICAgInRcMDMwXDAwMSBcMDAyKFx0XDAyMlwwMjRcblwwMTRpc19leHRl
bnNpb25cMDMwXDAwMiBcMDAyKFwwMTBcIlwzMjVcMDAxXG5cMDE2U291cmNlIgotICAgICJDb2Rl
SW5mb1wwMjI6XG5cMDEwbG9jYXRpb25cMDMwXDAwMSBcMDAzKFwwMTMyKC5nb29nbGUucHJvdCIK
LSAgICAib2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvblwwMzJcMjA2XDAwMVxuXDAxMExvY2F0
aW8iCi0gICAgIm5cMDIyXDAyMFxuXDAwNHBhdGhcMDMwXDAwMSBcMDAzKFwwMDVCXDAwMlwwMjBc
MDAxXDAyMlwwMjBcblwwMDRzcGFuXDAzMFwwMDIgXDAwMyhcMDA1QlwwMDJcMDIwXDAwMVwwMjJc
MDMwXG4iCi0gICAgIlwwMjBsZWFkaW5nX2NvbW1lbnRzXDAzMFwwMDMgXDAwMShcdFwwMjJcMDMx
XG5cMDIxdHJhaWxpbmdfY29tbSIKLSAgICAiZW50c1wwMzBcMDA0IFwwMDEoXHRcMDIyIVxuXDAz
MWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHNcMDMwIgotICAgICJcMDA2IFwwMDMoXHRcIlwyNDdc
MDAxXG5cMDIxR2VuZXJhdGVkQ29kZUluZm9cMDIyQVxuXG5hbm5vdGF0aW8iCi0gICAgIm5cMDMw
XDAwMSBcMDAzKFwwMTMyLS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUkiCi0gICAgIm5m
by5Bbm5vdGF0aW9uXDAzMk9cblxuQW5ub3RhdGlvblwwMjJcMDIwXG5cMDA0cGF0aFwwMzBcMDAx
IFwwMDMiCi0gICAgIihcMDA1QlwwMDJcMDIwXDAwMVwwMjJcMDIzXG5cMDEzc291cmNlX2ZpbGVc
MDMwXDAwMiBcMDAxKFx0XDAyMlxyXG5cMDA1YmVnaW5cMDMwXDAwMyBcMDAxIgotICAgICIoXDAw
NVwwMjJcMDEzXG5cMDAzZW5kXDAzMFwwMDQgXDAwMShcMDA1QlhcblwwMjNjb20uZ29vZ2xlLnBy
b3RvYnVmQlwwMjAiCi0gICAgIkRlc2NyaXB0b3JQcm90b3NIXDAwMVpcbmRlc2NyaXB0b3JcMjQy
XDAwMlwwMDNHUEJcMjUyXDAwMlwwMzJHIgotICAgICJvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9u
IiwgNTE0NSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFs
UmVnaXN0ZXJHZW5lcmF0ZWRGaWxlKAotICAgICJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5w
cm90byIsICZwcm90b2J1Zl9SZWdpc3RlclR5cGVzKTsKLSAgRmlsZURlc2NyaXB0b3JTZXQ6OmRl
ZmF1bHRfaW5zdGFuY2VfID0gbmV3IEZpbGVEZXNjcmlwdG9yU2V0KCk7Ci0gIEZpbGVEZXNjcmlw
dG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IEZpbGVEZXNjcmlwdG9yUHJvdG8oKTsK
LSAgRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3RhbmNlXyA9IG5ldyBEZXNjcmlwdG9yUHJv
dG8oKTsKLSAgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjpkZWZhdWx0X2luc3RhbmNl
XyA9IG5ldyBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UoKTsKLSAgRGVzY3JpcHRvclBy
b3RvX1Jlc2VydmVkUmFuZ2U6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IERlc2NyaXB0b3JQcm90
b19SZXNlcnZlZFJhbmdlKCk7Ci0gIEZpZWxkRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3Rh
bmNlXyA9IG5ldyBGaWVsZERlc2NyaXB0b3JQcm90bygpOwotICBPbmVvZkRlc2NyaXB0b3JQcm90
bzo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgT25lb2ZEZXNjcmlwdG9yUHJvdG8oKTsKLSAgRW51
bURlc2NyaXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgRW51bURlc2NyaXB0b3JQ
cm90bygpOwotICBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfID0g
bmV3IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bygpOwotICBTZXJ2aWNlRGVzY3JpcHRvclByb3Rv
OjpkZWZhdWx0X2luc3RhbmNlXyA9IG5ldyBTZXJ2aWNlRGVzY3JpcHRvclByb3RvKCk7Ci0gIE1l
dGhvZERlc2NyaXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgTWV0aG9kRGVzY3Jp
cHRvclByb3RvKCk7Ci0gIEZpbGVPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlXyA9IG5ldyBGaWxl
T3B0aW9ucygpOwotICBNZXNzYWdlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgTWVz
c2FnZU9wdGlvbnMoKTsKLSAgRmllbGRPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlXyA9IG5ldyBG
aWVsZE9wdGlvbnMoKTsKLSAgRW51bU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IEVu
dW1PcHRpb25zKCk7Ci0gIEVudW1WYWx1ZU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3
IEVudW1WYWx1ZU9wdGlvbnMoKTsKLSAgU2VydmljZU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2Vf
ID0gbmV3IFNlcnZpY2VPcHRpb25zKCk7Ci0gIE1ldGhvZE9wdGlvbnM6OmRlZmF1bHRfaW5zdGFu
Y2VfID0gbmV3IE1ldGhvZE9wdGlvbnMoKTsKLSAgVW5pbnRlcnByZXRlZE9wdGlvbjo6ZGVmYXVs
dF9pbnN0YW5jZV8gPSBuZXcgVW5pbnRlcnByZXRlZE9wdGlvbigpOwotICBVbmludGVycHJldGVk
T3B0aW9uX05hbWVQYXJ0OjpkZWZhdWx0X2luc3RhbmNlXyA9IG5ldyBVbmludGVycHJldGVkT3B0
aW9uX05hbWVQYXJ0KCk7Ci0gIFNvdXJjZUNvZGVJbmZvOjpkZWZhdWx0X2luc3RhbmNlXyA9IG5l
dyBTb3VyY2VDb2RlSW5mbygpOwotICBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6ZGVmYXVsdF9p
bnN0YW5jZV8gPSBuZXcgU291cmNlQ29kZUluZm9fTG9jYXRpb24oKTsKLSAgR2VuZXJhdGVkQ29k
ZUluZm86OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IEdlbmVyYXRlZENvZGVJbmZvKCk7Ci0gIEdl
bmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IEdlbmVy
YXRlZENvZGVJbmZvX0Fubm90YXRpb24oKTsKLSAgRmlsZURlc2NyaXB0b3JTZXQ6OmRlZmF1bHRf
aW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgRmlsZURlc2NyaXB0b3JQcm90
bzo6ZGVmYXVsdF9pbnN0YW5jZV8tPkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBEZXNjcmlw
dG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAg
RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFz
RGVmYXVsdEluc3RhbmNlKCk7Ci0gIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpkZWZh
dWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIEZpZWxkRGVzY3JpcHRv
clByb3RvOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIE9u
ZW9mRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3Rh
bmNlKCk7Ci0gIEVudW1EZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfLT5Jbml0QXNE
ZWZhdWx0SW5zdGFuY2UoKTsKLSAgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2lu
c3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIFNlcnZpY2VEZXNjcmlwdG9yUHJv
dG86OmRlZmF1bHRfaW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgTWV0aG9k
RGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNl
KCk7Ci0gIEZpbGVPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3Rh
bmNlKCk7Ci0gIE1lc3NhZ2VPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVs
dEluc3RhbmNlKCk7Ci0gIEZpZWxkT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZV8tPkluaXRBc0Rl
ZmF1bHRJbnN0YW5jZSgpOwotICBFbnVtT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZV8tPkluaXRB
c0RlZmF1bHRJbnN0YW5jZSgpOwotICBFbnVtVmFsdWVPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNl
Xy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIFNlcnZpY2VPcHRpb25zOjpkZWZhdWx0X2lu
c3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIE1ldGhvZE9wdGlvbnM6OmRlZmF1
bHRfaW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgVW5pbnRlcnByZXRlZE9w
dGlvbjo6ZGVmYXVsdF9pbnN0YW5jZV8tPkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBVbmlu
dGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVs
dEluc3RhbmNlKCk7Ci0gIFNvdXJjZUNvZGVJbmZvOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFz
RGVmYXVsdEluc3RhbmNlKCk7Ci0gIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpkZWZhdWx0X2lu
c3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIEdlbmVyYXRlZENvZGVJbmZvOjpk
ZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIEdlbmVyYXRlZENv
ZGVJbmZvX0Fubm90YXRpb246OmRlZmF1bHRfaW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFu
Y2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6T25TaHV0ZG93bigmcHJvdG9i
dWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKTsK
LX0KLQotLy8gRm9yY2UgQWRkRGVzY3JpcHRvcnMoKSB0byBiZSBjYWxsZWQgYXQgc3RhdGljIGlu
aXRpYWxpemF0aW9uIHRpbWUuCi1zdHJ1Y3QgU3RhdGljRGVzY3JpcHRvckluaXRpYWxpemVyX2dv
b2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvIHsKLSAgU3RhdGljRGVzY3JpcHRv
ckluaXRpYWxpemVyX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCkgewot
ICAgIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJv
dG8oKTsKLSAgfQotfSBzdGF0aWNfZGVzY3JpcHRvcl9pbml0aWFsaXplcl9nb29nbGVfMmZwcm90
b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90b187Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0YXRpYyB2b2lk
IE1lcmdlRnJvbUZhaWwoaW50IGxpbmUpIEdPT0dMRV9BVFRSSUJVVEVfQ09MRDsKLXN0YXRpYyB2
b2lkIE1lcmdlRnJvbUZhaWwoaW50IGxpbmUpIHsKLSAgR09PR0xFX0NIRUNLKGZhbHNlKSA8PCBf
X0ZJTEVfXyA8PCAiOiIgPDwgbGluZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLQotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi0jaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNv
bnN0IGludCBGaWxlRGVzY3JpcHRvclNldDo6a0ZpbGVGaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8g
IWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotRmlsZURlc2NyaXB0b3JT
ZXQ6OkZpbGVEZXNjcmlwdG9yU2V0KCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2Uo
KSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVz
Y3JpcHRvclNldCkKLX0KLQotdm9pZCBGaWxlRGVzY3JpcHRvclNldDo6SW5pdEFzRGVmYXVsdElu
c3RhbmNlKCkgewotfQotCi1GaWxlRGVzY3JpcHRvclNldDo6RmlsZURlc2NyaXB0b3JTZXQoY29u
c3QgRmlsZURlc2NyaXB0b3JTZXQmIGZyb20pCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsK
LSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9j
b25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQpCi19Ci0KLXZvaWQg
RmlsZURlc2NyaXB0b3JTZXQ6OlNoYXJlZEN0b3IoKSB7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwot
ICA6Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXplb2YoX2hhc19iaXRzXykpOwotfQotCi1GaWxl
RGVzY3JpcHRvclNldDo6fkZpbGVEZXNjcmlwdG9yU2V0KCkgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQp
Ci0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBGaWxlRGVzY3JpcHRvclNldDo6U2hhcmVkRHRv
cigpIHsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lk
IEZpbGVEZXNjcmlwdG9yU2V0OjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdP
T0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBz
aXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogRmlsZURlc2NyaXB0b3JTZXQ6OmRlc2NyaXB0
b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gRmls
ZURlc2NyaXB0b3JTZXRfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IEZpbGVEZXNjcmlwdG9yU2V0
JiBGaWxlRGVzY3JpcHRvclNldDo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRf
aW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZk
ZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQot
RmlsZURlc2NyaXB0b3JTZXQqIEZpbGVEZXNjcmlwdG9yU2V0OjpkZWZhdWx0X2luc3RhbmNlXyA9
IE5VTEw7Ci0KLUZpbGVEZXNjcmlwdG9yU2V0KiBGaWxlRGVzY3JpcHRvclNldDo6TmV3KDo6Z29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIEZpbGVEZXNjcmlwdG9yU2V0
KiBuID0gbmV3IEZpbGVEZXNjcmlwdG9yU2V0OwotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAg
IGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgRmlsZURlc2NyaXB0
b3JTZXQ6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xl
YXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0KQotICBmaWxlXy5DbGVh
cigpOwotICA6Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXplb2YoX2hhc19iaXRzXykpOwotICBp
ZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRh
YmxlX3Vua25vd25fZmllbGRzKCktPkNsZWFyKCk7Ci0gIH0KLX0KLQotYm9vbCBGaWxlRGVzY3Jp
cHRvclNldDo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNT
SU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChwYXJzZV9zdGFydDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQpCi0g
IGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIs
IGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZp
cnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNo
ICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmll
bGROdW1iZXIodGFnKSkgewotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5GaWxl
RGVzY3JpcHRvclByb3RvIGZpbGUgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0
YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRo
KCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9maWxlOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2VOb1ZpcnR1YWxO
b1JlY3Vyc2lvbkRlcHRoKAotICAgICAgICAgICAgICAgIGlucHV0LCBhZGRfZmlsZSgpKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxMCkpIGdvdG8gcGFyc2VfbG9vcF9maWxl
OwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAg
ICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAg
ICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBF
X0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAg
ICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2tpcEZpZWxk
KAotICAgICAgICAgICAgICBpbnB1dCwgdGFnLCBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuRmlsZURl
c2NyaXB0b3JTZXQpCi0gIHJldHVybiB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KHBhcnNlX2ZhaWx1cmU6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
U2V0KQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgRmlsZURlc2NyaXB0
b3JTZXQ6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlw
dG9yU2V0KQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJv
dG8gZmlsZSA9IDE7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+ZmlsZV9z
aXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVUb0FycmF5KAotICAgICAgMSwgdGhpcy0+
ZmlsZShpKSwgb3V0cHV0KTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVf
dW5rbm93bl9maWVsZHMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHMoCi0gICAgICAgIHVua25vd25fZmllbGRz
KCksIG91dHB1dCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6
ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0KQotfQotCi06Omdvb2dsZTo6
cHJvdG9idWY6OnVpbnQ4KiBGaWxlRGVzY3JpcHRvclNldDo6U2VyaWFsaXplV2l0aENhY2hlZFNp
emVzVG9BcnJheSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFy
dDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JTZXQpCi0gIC8vIHJlcGVhdGVkIC5nb29n
bGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byBmaWxlID0gMTsKLSAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5maWxlX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIHRh
cmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAg
ICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDEsIHRoaXMtPmZpbGUo
aSksIHRhcmdldCk7Ci0gIH0KLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25v
d25fZmllbGRzKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzVG9BcnJheSgKLSAgICAgICAgdW5r
bm93bl9maWVsZHMoKSwgdGFyZ2V0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JT
ZXQpCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBGaWxlRGVzY3JpcHRvclNldDo6Qnl0ZVNp
emUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3Np
emVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0KQotICBpbnQgdG90YWxf
c2l6ZSA9IDA7Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRv
clByb3RvIGZpbGUgPSAxOwotICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5maWxlX3NpemUoKTsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT5maWxlX3NpemUoKTsgaSsrKSB7Ci0gICAgdG90
YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAgICAgICB0aGlzLT5maWxlKGkpKTsKLSAg
fQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewot
ICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXQ6OkNvbXB1dGVVbmtub3duRmllbGRzU2l6ZSgKLSAgICAgICAgdW5rbm93bl9maWVs
ZHMoKSk7Ci0gIH0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAg
X2NhY2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJ
VEVTX0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBGaWxlRGVzY3JpcHRv
clNldDo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkg
ewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0KQotICBpZiAoR09PR0xFX1BSRURJ
Q1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25z
dCBGaWxlRGVzY3JpcHRvclNldCogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IEZpbGVEZXNjcmlwdG9yU2V0
PigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29v
Z2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0KQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2Ugewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0
X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0KQotICAgIE1lcmdlRnJv
bSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIEZpbGVEZXNjcmlwdG9yU2V0OjpNZXJnZUZyb20o
Y29uc3QgRmlsZURlc2NyaXB0b3JTZXQmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChjbGFzc19zcGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWxl
RGVzY3JpcHRvclNldCkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMp
KSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgZmlsZV8uTWVyZ2VGcm9tKGZyb20uZmlsZV8p
OwotICBpZiAoZnJvbS5faW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkg
ewotICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+TWVyZ2VGcm9tKGZyb20udW5rbm93bl9m
aWVsZHMoKSk7Ci0gIH0KLX0KLQotdm9pZCBGaWxlRGVzY3JpcHRvclNldDo6Q29weUZyb20oY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5G
aWxlRGVzY3JpcHRvclNldCkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIo
KTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIEZpbGVEZXNjcmlwdG9yU2V0OjpDb3B5
RnJvbShjb25zdCBGaWxlRGVzY3JpcHRvclNldCYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYu
RmlsZURlc2NyaXB0b3JTZXQpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFy
KCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBGaWxlRGVzY3JpcHRvclNldDo6SXNJ
bml0aWFsaXplZCgpIGNvbnN0IHsKLQotICBpZiAoITo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkFsbEFyZUluaXRpYWxpemVkKHRoaXMtPmZpbGUoKSkpIHJldHVybiBmYWxzZTsKLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgRmlsZURlc2NyaXB0b3JTZXQ6OlN3YXAoRmlsZURlc2NyaXB0
b3JTZXQqIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIEludGVybmFs
U3dhcChvdGhlcik7Ci19Ci12b2lkIEZpbGVEZXNjcmlwdG9yU2V0OjpJbnRlcm5hbFN3YXAoRmls
ZURlc2NyaXB0b3JTZXQqIG90aGVyKSB7Ci0gIGZpbGVfLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXIt
PmZpbGVfKTsKLSAgc3RkOjpzd2FwKF9oYXNfYml0c19bMF0sIG90aGVyLT5faGFzX2JpdHNfWzBd
KTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRh
Xyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19
Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgRmlsZURlc2NyaXB0b3JTZXQ6OkdldE1l
dGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3Jp
cHRvciA9IEZpbGVEZXNjcmlwdG9yU2V0X2Rlc2NyaXB0b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0
aW9uID0gRmlsZURlc2NyaXB0b3JTZXRfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsK
LX0KLQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gRmlsZURlc2NyaXB0
b3JTZXQKLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3Rv
IGZpbGUgPSAxOwotaW50IEZpbGVEZXNjcmlwdG9yU2V0OjpmaWxlX3NpemUoKSBjb25zdCB7Ci0g
IHJldHVybiBmaWxlXy5zaXplKCk7Ci19Ci12b2lkIEZpbGVEZXNjcmlwdG9yU2V0OjpjbGVhcl9m
aWxlKCkgewotICBmaWxlXy5DbGVhcigpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpG
aWxlRGVzY3JpcHRvclByb3RvJiBGaWxlRGVzY3JpcHRvclNldDo6ZmlsZShpbnQgaW5kZXgpIGNv
bnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJv
dG9idWYuRmlsZURlc2NyaXB0b3JTZXQuZmlsZSkKLSAgcmV0dXJuIGZpbGVfLkdldChpbmRleCk7
Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNjcmlwdG9yUHJvdG8qIEZpbGVEZXNjcmlw
dG9yU2V0OjptdXRhYmxlX2ZpbGUoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5m
aWxlKQotICByZXR1cm4gZmlsZV8uTXV0YWJsZShpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9i
dWY6OkZpbGVEZXNjcmlwdG9yUHJvdG8qIEZpbGVEZXNjcmlwdG9yU2V0OjphZGRfZmlsZSgpIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYu
RmlsZURlc2NyaXB0b3JTZXQuZmlsZSkKLSAgcmV0dXJuIGZpbGVfLkFkZCgpOwotfQotOjpnb29n
bGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVE
ZXNjcmlwdG9yUHJvdG8gPioKLUZpbGVEZXNjcmlwdG9yU2V0OjptdXRhYmxlX2ZpbGUoKSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnBy
b3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmZpbGUpCi0gIHJldHVybiAmZmlsZV87Ci19Ci1jb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RmlsZURlc2NyaXB0b3JQcm90byA+JgotRmlsZURlc2NyaXB0b3JTZXQ6OmZpbGUoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90
b2J1Zi5GaWxlRGVzY3JpcHRvclNldC5maWxlKQotICByZXR1cm4gZmlsZV87Ci19Ci0KLSNlbmRp
ZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0KLS8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQot
I2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgRmls
ZURlc2NyaXB0b3JQcm90bzo6a05hbWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWxlRGVzY3Jp
cHRvclByb3RvOjprUGFja2FnZUZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpbGVEZXNjcmlwdG9y
UHJvdG86OmtEZXBlbmRlbmN5RmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRmlsZURlc2NyaXB0b3JQ
cm90bzo6a1B1YmxpY0RlcGVuZGVuY3lGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWxlRGVzY3Jp
cHRvclByb3RvOjprV2Vha0RlcGVuZGVuY3lGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWxlRGVz
Y3JpcHRvclByb3RvOjprTWVzc2FnZVR5cGVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWxlRGVz
Y3JpcHRvclByb3RvOjprRW51bVR5cGVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWxlRGVzY3Jp
cHRvclByb3RvOjprU2VydmljZUZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpbGVEZXNjcmlwdG9y
UHJvdG86OmtFeHRlbnNpb25GaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWxlRGVzY3JpcHRvclBy
b3RvOjprT3B0aW9uc0ZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpbGVEZXNjcmlwdG9yUHJvdG86
OmtTb3VyY2VDb2RlSW5mb0ZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpbGVEZXNjcmlwdG9yUHJv
dG86OmtTeW50YXhGaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8
IF9NU0NfVkVSID49IDE5MDAKLQotRmlsZURlc2NyaXB0b3JQcm90bzo6RmlsZURlc2NyaXB0b3JQ
cm90bygpCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRh
ZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChjb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bykKLX0K
LQotdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0g
IG9wdGlvbnNfID0gY29uc3RfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0aW9ucyo+
KCY6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlKCkpOwot
ICBzb3VyY2VfY29kZV9pbmZvXyA9IGNvbnN0X2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291
cmNlQ29kZUluZm8qPigmOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mbzo6ZGVmYXVs
dF9pbnN0YW5jZSgpKTsKLX0KLQotRmlsZURlc2NyaXB0b3JQcm90bzo6RmlsZURlc2NyaXB0b3JQ
cm90byhjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFy
ZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8p
Ci19Ci0KLXZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6U2hhcmVkQ3RvcigpIHsKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmcoKTsKLSAgX2NhY2hlZF9zaXpl
XyA9IDA7Ci0gIG5hbWVfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgcGFja2FnZV8uVW5zYWZl
U2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotICBvcHRpb25zXyA9IE5VTEw7Ci0gIHNvdXJjZV9jb2RlX2luZm9f
ID0gTlVMTDsKLSAgc3ludGF4Xy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIDo6bWVtc2V0KF9o
YXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci19Ci0KLUZpbGVEZXNjcmlwdG9yUHJv
dG86On5GaWxlRGVzY3JpcHRvclByb3RvKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bykKLSAgU2hh
cmVkRHRvcigpOwotfQotCi12b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OlNoYXJlZER0b3IoKSB7
Ci0gIG5hbWVfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIHBhY2thZ2VfLkRlc3Ryb3lOb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci0gIHN5bnRheF8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgaWYgKHRoaXMgIT0gZGVm
YXVsdF9pbnN0YW5jZV8pIHsKLSAgICBkZWxldGUgb3B0aW9uc187Ci0gICAgZGVsZXRlIHNvdXJj
ZV9jb2RlX2luZm9fOwotICB9Ci19Ci0KLXZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6U2V0Q2Fj
aGVkU2l6ZShpbnQgc2l6ZSkgY29uc3QgewotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRF
U19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VS
UkVOVF9XUklURVNfRU5EKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0
b3IqIEZpbGVEZXNjcmlwdG9yUHJvdG86OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2ln
bkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gRmlsZURlc2NyaXB0b3JQcm90b19kZXNjcmlw
dG9yXzsKLX0KLQotY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgRmlsZURlc2NyaXB0b3JQcm90
bzo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwp
IHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8o
KTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRmlsZURlc2NyaXB0b3JQcm90
byogRmlsZURlc2NyaXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1GaWxl
RGVzY3JpcHRvclByb3RvKiBGaWxlRGVzY3JpcHRvclByb3RvOjpOZXcoOjpnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgRmlsZURlc2NyaXB0b3JQcm90byogbiA9IG5l
dyBGaWxlRGVzY3JpcHRvclByb3RvOwotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5h
LT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgRmlsZURlc2NyaXB0b3JQcm90
bzo6Q2xlYXIoKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9z
dGFydDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bykKLSAgaWYgKF9oYXNfYml0
c19bMCAvIDMyXSAmIDN1KSB7Ci0gICAgaWYgKGhhc19uYW1lKCkpIHsKLSAgICAgIG5hbWVfLkNs
ZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgICB9Ci0gICAgaWYgKGhhc19wYWNrYWdlKCkpIHsK
LSAgICAgIHBhY2thZ2VfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgICB9Ci0gIH0KLSAg
aWYgKF9oYXNfYml0c19bOCAvIDMyXSAmIDM1ODR1KSB7Ci0gICAgaWYgKGhhc19vcHRpb25zKCkp
IHsKLSAgICAgIGlmIChvcHRpb25zXyAhPSBOVUxMKSBvcHRpb25zXy0+Ojpnb29nbGU6OnByb3Rv
YnVmOjpGaWxlT3B0aW9uczo6Q2xlYXIoKTsKLSAgICB9Ci0gICAgaWYgKGhhc19zb3VyY2VfY29k
ZV9pbmZvKCkpIHsKLSAgICAgIGlmIChzb3VyY2VfY29kZV9pbmZvXyAhPSBOVUxMKSBzb3VyY2Vf
Y29kZV9pbmZvXy0+Ojpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mbzo6Q2xlYXIoKTsK
LSAgICB9Ci0gICAgaWYgKGhhc19zeW50YXgoKSkgewotICAgICAgc3ludGF4Xy5DbGVhclRvRW1w
dHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci0gICAgfQotICB9Ci0gIGRlcGVuZGVuY3lfLkNsZWFyKCk7Ci0gIHB1
YmxpY19kZXBlbmRlbmN5Xy5DbGVhcigpOwotICB3ZWFrX2RlcGVuZGVuY3lfLkNsZWFyKCk7Ci0g
IG1lc3NhZ2VfdHlwZV8uQ2xlYXIoKTsKLSAgZW51bV90eXBlXy5DbGVhcigpOwotICBzZXJ2aWNl
Xy5DbGVhcigpOwotICBleHRlbnNpb25fLkNsZWFyKCk7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18s
IDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVf
dW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+Q2xlYXIo
KTsKLSAgfQotfQotCi1ib29sIEZpbGVEZXNjcmlwdG9yUHJvdG86Ok1lcmdlUGFydGlhbEZyb21D
b2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFt
KiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9U
UlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50
MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xl
LnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8pCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6
cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRh
Z1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQp
IGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAg
Ly8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlm
ICh0YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRo
aXMtPm11dGFibGVfbmFtZSgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICAgICAg
ICB0aGlzLT5uYW1lKCkuZGF0YSgpLCB0aGlzLT5uYW1lKCkubGVuZ3RoKCksCi0gICAgICAgICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpQQVJTRSwKLSAgICAg
ICAgICAgICJnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5uYW1lIik7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxOCkpIGdvdG8gcGFyc2VfcGFja2FnZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyBwYWNrYWdl
ID0gMjsKLSAgICAgIGNhc2UgMjogewotICAgICAgICBpZiAodGFnID09IDE4KSB7Ci0gICAgICAg
ICBwYXJzZV9wYWNrYWdlOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAgICAgICBpbnB1dCwg
dGhpcy0+bXV0YWJsZV9wYWNrYWdlKCkpKTsKLSAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAg
ICAgICAgIHRoaXMtPnBhY2thZ2UoKS5kYXRhKCksIHRoaXMtPnBhY2thZ2UoKS5sZW5ndGgoKSwK
LSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlBB
UlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnBh
Y2thZ2UiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFs
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDI2KSkgZ290byBwYXJz
ZV9kZXBlbmRlbmN5OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0
ZWQgc3RyaW5nIGRlcGVuZGVuY3kgPSAzOwotICAgICAgY2FzZSAzOiB7Ci0gICAgICAgIGlmICh0
YWcgPT0gMjYpIHsKLSAgICAgICAgIHBhcnNlX2RlcGVuZGVuY3k6Ci0gICAgICAgICAgRE9fKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAot
ICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5hZGRfZGVwZW5kZW5jeSgpKSk7Ci0gICAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0
cmluZ05hbWVkRmllbGQoCi0gICAgICAgICAgICB0aGlzLT5kZXBlbmRlbmN5KHRoaXMtPmRlcGVu
ZGVuY3lfc2l6ZSgpIC0gMSkuZGF0YSgpLAotICAgICAgICAgICAgdGhpcy0+ZGVwZW5kZW5jeSh0
aGlzLT5kZXBlbmRlbmN5X3NpemUoKSAtIDEpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6UEFSU0UsCi0gICAgICAgICAgICAi
Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVwZW5kZW5jeSIpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMjYpKSBnb3RvIHBhcnNlX2RlcGVuZGVuY3k7Ci0g
ICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDM0KSkgZ290byBwYXJzZV9tZXNzYWdlX3R5cGU7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyByZXBlYXRlZCAuZ29vZ2xlLnBy
b3RvYnVmLkRlc2NyaXB0b3JQcm90byBtZXNzYWdlX3R5cGUgPSA0OwotICAgICAgY2FzZSA0OiB7
Ci0gICAgICAgIGlmICh0YWcgPT0gMzQpIHsKLSAgICAgICAgIHBhcnNlX21lc3NhZ2VfdHlwZToK
LSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOwotICAgICAg
ICAgcGFyc2VfbG9vcF9tZXNzYWdlX3R5cGU6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVj
dXJzaW9uRGVwdGgoCi0gICAgICAgICAgICAgICAgaW5wdXQsIGFkZF9tZXNzYWdlX3R5cGUoKSkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMzQpKSBnb3RvIHBhcnNlX2xvb3Bf
bWVzc2FnZV90eXBlOwotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg0MikpIGdvdG8gcGFy
c2VfbG9vcF9lbnVtX3R5cGU7Ci0gICAgICAgIGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNp
b25EZXB0aCgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQg
Lmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvIGVudW1fdHlwZSA9IDU7Ci0gICAg
ICBjYXNlIDU6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA0MikgewotICAgICAgICAgIERPXyhpbnB1
dC0+SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7Ci0gICAgICAgICBwYXJzZV9sb29wX2VudW1f
dHlwZToKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0aCgKLSAgICAgICAg
ICAgICAgICBpbnB1dCwgYWRkX2VudW1fdHlwZSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQt
PkV4cGVjdFRhZyg0MikpIGdvdG8gcGFyc2VfbG9vcF9lbnVtX3R5cGU7Ci0gICAgICAgIGlmIChp
bnB1dC0+RXhwZWN0VGFnKDUwKSkgZ290byBwYXJzZV9sb29wX3NlcnZpY2U7Ci0gICAgICAgIGlu
cHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3Jp
cHRvclByb3RvIHNlcnZpY2UgPSA2OwotICAgICAgY2FzZSA2OiB7Ci0gICAgICAgIGlmICh0YWcg
PT0gNTApIHsKLSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkp
OwotICAgICAgICAgcGFyc2VfbG9vcF9zZXJ2aWNlOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2VOb1ZpcnR1YWxO
b1JlY3Vyc2lvbkRlcHRoKAotICAgICAgICAgICAgICAgIGlucHV0LCBhZGRfc2VydmljZSgpKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg1MCkpIGdvdG8gcGFyc2VfbG9vcF9z
ZXJ2aWNlOwotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg1OCkpIGdvdG8gcGFyc2VfbG9v
cF9leHRlbnNpb247Ci0gICAgICAgIGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0
aCgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2ds
ZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byBleHRlbnNpb24gPSA3OwotICAgICAgY2Fz
ZSA3OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNTgpIHsKLSAgICAgICAgICBET18oaW5wdXQtPklu
Y3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9leHRlbnNpb246
Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoCi0gICAgICAgICAgICAg
ICAgaW5wdXQsIGFkZF9leHRlbnNpb24oKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBl
Y3RUYWcoNTgpKSBnb3RvIHBhcnNlX2xvb3BfZXh0ZW5zaW9uOwotICAgICAgICBpbnB1dC0+VW5z
YWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RU
YWcoNjYpKSBnb3RvIHBhcnNlX29wdGlvbnM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g
ICAgICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zIG9wdGlvbnMgPSA4
OwotICAgICAgY2FzZSA4OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNjYpIHsKLSAgICAgICAgIHBh
cnNlX29wdGlvbnM6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbCgKLSAgICAgICAgICAgICAgIGlu
cHV0LCBtdXRhYmxlX29wdGlvbnMoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdv
dG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RU
YWcoNzQpKSBnb3RvIHBhcnNlX3NvdXJjZV9jb2RlX2luZm87Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgfQotCi0gICAgICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZv
IHNvdXJjZV9jb2RlX2luZm8gPSA5OwotICAgICAgY2FzZSA5OiB7Ci0gICAgICAgIGlmICh0YWcg
PT0gNzQpIHsKLSAgICAgICAgIHBhcnNlX3NvdXJjZV9jb2RlX2luZm86Ci0gICAgICAgICAgRE9f
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2Fn
ZU5vVmlydHVhbCgKLSAgICAgICAgICAgICAgIGlucHV0LCBtdXRhYmxlX3NvdXJjZV9jb2RlX2lu
Zm8oKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoODApKSBnb3RvIHBhcnNl
X3B1YmxpY19kZXBlbmRlbmN5OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8g
cmVwZWF0ZWQgaW50MzIgcHVibGljX2RlcGVuZGVuY3kgPSAxMDsKLSAgICAgIGNhc2UgMTA6IHsK
LSAgICAgICAgaWYgKHRhZyA9PSA4MCkgewotICAgICAgICAgcGFyc2VfcHVibGljX2RlcGVuZGVu
Y3k6Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6UmVhZFJlcGVhdGVkUHJpbWl0aXZlPAotICAgICAgICAgICAgICAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50MzIsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpUWVBFX0lOVDMyPigKLSAgICAgICAgICAgICAgICAgMSwgODAsIGlucHV0LCB0
aGlzLT5tdXRhYmxlX3B1YmxpY19kZXBlbmRlbmN5KCkpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
dGFnID09IDgyKSB7Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFBhY2tlZFByaW1pdGl2ZU5vSW5saW5lPAotICAgICAgICAg
ICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0lOVDMyPigKLSAgICAgICAgICAgICAgICAg
aW5wdXQsIHRoaXMtPm11dGFibGVfcHVibGljX2RlcGVuZGVuY3koKSkpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChpbnB1dC0+RXhwZWN0VGFnKDgwKSkgZ290byBwYXJzZV9wdWJsaWNfZGVwZW5kZW5jeTsK
LSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoODgpKSBnb3RvIHBhcnNlX3dlYWtfZGVwZW5k
ZW5jeTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlcGVhdGVkIGludDMy
IHdlYWtfZGVwZW5kZW5jeSA9IDExOwotICAgICAgY2FzZSAxMTogewotICAgICAgICBpZiAodGFn
ID09IDg4KSB7Ci0gICAgICAgICBwYXJzZV93ZWFrX2RlcGVuZGVuY3k6Ci0gICAgICAgICAgRE9f
KCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFJlcGVh
dGVkUHJpbWl0aXZlPAotICAgICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
MzIsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0lO
VDMyPigKLSAgICAgICAgICAgICAgICAgMSwgODgsIGlucHV0LCB0aGlzLT5tdXRhYmxlX3dlYWtf
ZGVwZW5kZW5jeSgpKSkpOwotICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSA5MCkgewotICAgICAg
ICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJl
YWRQYWNrZWRQcmltaXRpdmVOb0lubGluZTwKLSAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludDMyLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6VFlQRV9JTlQzMj4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5tdXRhYmxl
X3dlYWtfZGVwZW5kZW5jeSgpKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8g
aGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWco
ODgpKSBnb3RvIHBhcnNlX3dlYWtfZGVwZW5kZW5jeTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBl
Y3RUYWcoOTgpKSBnb3RvIHBhcnNlX3N5bnRheDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0K
LSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyBzeW50YXggPSAxMjsKLSAgICAgIGNhc2UgMTI6IHsK
LSAgICAgICAgaWYgKHRhZyA9PSA5OCkgewotICAgICAgICAgcGFyc2Vfc3ludGF4OgotICAgICAg
ICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVh
ZFN0cmluZygKLSAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9zeW50YXgoKSkp
OwotICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZl
cmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgICAgICAgdGhpcy0+c3ludGF4KCkuZGF0
YSgpLCB0aGlzLT5zeW50YXgoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5w
cm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnN5bnRheCIpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlu
cHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYg
KHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9V
UCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2tpcEZpZWxkKAotICAgICAg
ICAgICAgICBpbnB1dCwgdGFnLCBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQ
cm90bykKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90bykK
LSAgcmV0dXJuIGZhbHNlOwotI3VuZGVmIERPXwotfQotCi12b2lkIEZpbGVEZXNjcmlwdG9yUHJv
dG86OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlv
OjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
UHJvdG8pCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgaWYgKGhhc19uYW1lKCkp
IHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlV
VEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5h
bWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQ
cm90by5uYW1lIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgMSwgdGhpcy0+bmFtZSgpLCBv
dXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIHBhY2thZ2UgPSAyOwotICBpZiAo
aGFzX3BhY2thZ2UoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+cGFja2FnZSgp
LmRhdGEoKSwgdGhpcy0+cGFja2FnZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90
b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnBhY2thZ2UiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0g
ICAgICAyLCB0aGlzLT5wYWNrYWdlKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCBz
dHJpbmcgZGVwZW5kZW5jeSA9IDM7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+ZGVwZW5k
ZW5jeV9zaXplKCk7IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+ZGVwZW5k
ZW5jeShpKS5kYXRhKCksIHRoaXMtPmRlcGVuZGVuY3koaSkubGVuZ3RoKCksCi0gICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAi
Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVwZW5kZW5jeSIpOwotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZygK
LSAgICAgIDMsIHRoaXMtPmRlcGVuZGVuY3koaSksIG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBl
YXRlZCAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90byBtZXNzYWdlX3R5cGUgPSA0Owot
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMtPm1lc3NhZ2VfdHlwZV9zaXplKCk7
IGkgPCBuOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVUb0FycmF5KAotICAgICAgNCwgdGhpcy0+bWVzc2Fn
ZV90eXBlKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1
Zi5FbnVtRGVzY3JpcHRvclByb3RvIGVudW1fdHlwZSA9IDU7Ci0gIGZvciAodW5zaWduZWQgaW50
IGkgPSAwLCBuID0gdGhpcy0+ZW51bV90eXBlX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VN
YXliZVRvQXJyYXkoCi0gICAgICA1LCB0aGlzLT5lbnVtX3R5cGUoaSksIG91dHB1dCk7Ci0gIH0K
LQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8g
c2VydmljZSA9IDY7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+c2Vydmlj
ZV9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVUb0FycmF5KAotICAgICAgNiwgdGhp
cy0+c2VydmljZShpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJv
dG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8gZXh0ZW5zaW9uID0gNzsKLSAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5leHRlbnNpb25fc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0g
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVz
c2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDcsIHRoaXMtPmV4dGVuc2lvbihpKSwgb3V0cHV0KTsK
LSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMgb3B0aW9u
cyA9IDg7Ci0gIGlmIChoYXNfb3B0aW9ucygpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAg
IDgsICp0aGlzLT5vcHRpb25zXywgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29n
bGUucHJvdG9idWYuU291cmNlQ29kZUluZm8gc291cmNlX2NvZGVfaW5mbyA9IDk7Ci0gIGlmICho
YXNfc291cmNlX2NvZGVfaW5mbygpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDksICp0
aGlzLT5zb3VyY2VfY29kZV9pbmZvXywgb3V0cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIGlu
dDMyIHB1YmxpY19kZXBlbmRlbmN5ID0gMTA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+
cHVibGljX2RlcGVuZGVuY3lfc2l6ZSgpOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQzMigKLSAgICAgIDEwLCB0aGlzLT5w
dWJsaWNfZGVwZW5kZW5jeShpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIGludDMy
IHdlYWtfZGVwZW5kZW5jeSA9IDExOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPndlYWtf
ZGVwZW5kZW5jeV9zaXplKCk7IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUludDMyKAotICAgICAgMTEsIHRoaXMtPndlYWtfZGVw
ZW5kZW5jeShpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBzeW50YXgg
PSAxMjsKLSAgaWYgKGhhc19zeW50YXgoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhp
cy0+c3ludGF4KCkuZGF0YSgpLCB0aGlzLT5zeW50YXgoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJn
b29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zeW50YXgiKTsKLSAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFs
aWFzZWQoCi0gICAgICAxMiwgdGhpcy0+c3ludGF4KCksIG91dHB1dCk7Ci0gIH0KLQotICBpZiAo
X2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRz
KAotICAgICAgICB1bmtub3duX2ZpZWxkcygpLCBvdXRwdXQpOwotICB9Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfZW5kOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3Jp
cHRvclByb3RvKQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBGaWxlRGVzY3JpcHRv
clByb3RvOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3Jp
cHRvclByb3RvKQotICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gIGlmIChoYXNfbmFt
ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVy
aWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICB0aGlzLT5uYW1lKCkuZGF0YSgpLCB0aGlz
LT5uYW1lKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlw
dG9yUHJvdG8ubmFtZSIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAx
LCB0aGlzLT5uYW1lKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgcGFj
a2FnZSA9IDI7Ci0gIGlmIChoYXNfcGFja2FnZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAg
ICB0aGlzLT5wYWNrYWdlKCkuZGF0YSgpLCB0aGlzLT5wYWNrYWdlKCkubGVuZ3RoKCksCi0gICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0g
ICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucGFja2FnZSIpOwotICAg
IHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAyLCB0aGlzLT5wYWNrYWdlKCksIHRh
cmdldCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCBzdHJpbmcgZGVwZW5kZW5jeSA9IDM7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+ZGVwZW5kZW5jeV9zaXplKCk7IGkrKykgewotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdO
YW1lZEZpZWxkKAotICAgICAgdGhpcy0+ZGVwZW5kZW5jeShpKS5kYXRhKCksIHRoaXMtPmRlcGVu
ZGVuY3koaSkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlw
dG9yUHJvdG8uZGVwZW5kZW5jeSIpOwotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlU3RyaW5nVG9BcnJheSgzLCB0
aGlzLT5kZXBlbmRlbmN5KGkpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2ds
ZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8gbWVzc2FnZV90eXBlID0gNDsKLSAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5tZXNzYWdlX3R5cGVfc2l6ZSgpOyBpIDwgbjsgaSsr
KSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgNCwg
dGhpcy0+bWVzc2FnZV90eXBlKGkpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdv
b2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvIGVudW1fdHlwZSA9IDU7Ci0gIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+ZW51bV90eXBlX3NpemUoKTsgaSA8IG47IGkr
KykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDUs
IHRoaXMtPmVudW1fdHlwZShpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29n
bGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90byBzZXJ2aWNlID0gNjsKLSAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5zZXJ2aWNlX3NpemUoKTsgaSA8IG47IGkrKykg
ewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDYsIHRo
aXMtPnNlcnZpY2UoaSksIHRhcmdldCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnBy
b3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvIGV4dGVuc2lvbiA9IDc7Ci0gIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+ZXh0ZW5zaW9uX3NpemUoKTsgaSA8IG47IGkrKykgewot
ICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDcsIHRoaXMt
PmV4dGVuc2lvbihpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJv
dG9idWYuRmlsZU9wdGlvbnMgb3B0aW9ucyA9IDg7Ci0gIGlmIChoYXNfb3B0aW9ucygpKSB7Ci0g
ICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgOCwgKnRoaXMt
Pm9wdGlvbnNfLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1
Zi5Tb3VyY2VDb2RlSW5mbyBzb3VyY2VfY29kZV9pbmZvID0gOTsKLSAgaWYgKGhhc19zb3VyY2Vf
Y29kZV9pbmZvKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAot
ICAgICAgICA5LCAqdGhpcy0+c291cmNlX2NvZGVfaW5mb18sIHRhcmdldCk7Ci0gIH0KLQotICAv
LyByZXBlYXRlZCBpbnQzMiBwdWJsaWNfZGVwZW5kZW5jeSA9IDEwOwotICBmb3IgKGludCBpID0g
MDsgaSA8IHRoaXMtPnB1YmxpY19kZXBlbmRlbmN5X3NpemUoKTsgaSsrKSB7Ci0gICAgdGFyZ2V0
ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAg
V3JpdGVJbnQzMlRvQXJyYXkoMTAsIHRoaXMtPnB1YmxpY19kZXBlbmRlbmN5KGkpLCB0YXJnZXQp
OwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgaW50MzIgd2Vha19kZXBlbmRlbmN5ID0gMTE7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+d2Vha19kZXBlbmRlbmN5X3NpemUoKTsgaSsrKSB7Ci0g
ICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OgotICAgICAgV3JpdGVJbnQzMlRvQXJyYXkoMTEsIHRoaXMtPndlYWtfZGVwZW5kZW5jeShpKSwg
dGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBzeW50YXggPSAxMjsKLSAgaWYg
KGhhc19zeW50YXgoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+c3ludGF4KCku
ZGF0YSgpLCB0aGlzLT5zeW50YXgoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9i
dWYuRmlsZURlc2NyaXB0b3JQcm90by5zeW50YXgiKTsKLSAgICB0YXJnZXQgPQotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nVG9B
cnJheSgKLSAgICAgICAgMTIsIHRoaXMtPnN5bnRheCgpLCB0YXJnZXQpOwotICB9Ci0KLSAgaWYg
KF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgdGFyZ2V0
ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5r
bm93bkZpZWxkc1RvQXJyYXkoCi0gICAgICAgIHVua25vd25fZmllbGRzKCksIHRhcmdldCk7Ci0g
IH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6
Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8pCi0gIHJldHVybiB0YXJnZXQ7Ci19
Ci0KLWludCBGaWxlRGVzY3JpcHRvclByb3RvOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJvdG9i
dWYuRmlsZURlc2NyaXB0b3JQcm90bykKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIGlmIChf
aGFzX2JpdHNfWzAgLyAzMl0gJiAzdSkgewotICAgIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0g
MTsKLSAgICBpZiAoaGFzX25hbWUoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0cmluZ1Np
emUoCi0gICAgICAgICAgdGhpcy0+bmFtZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBvcHRpb25hbCBz
dHJpbmcgcGFja2FnZSA9IDI7Ci0gICAgaWYgKGhhc19wYWNrYWdlKCkpIHsKLSAgICAgIHRvdGFs
X3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICAgIHRoaXMtPnBhY2thZ2UoKSk7Ci0gICAg
fQotCi0gIH0KLSAgaWYgKF9oYXNfYml0c19bOSAvIDMyXSAmIDM1ODR1KSB7Ci0gICAgLy8gb3B0
aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucyBvcHRpb25zID0gODsKLSAgICBpZiAo
aGFzX29wdGlvbnMoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0
dWFsKAotICAgICAgICAgICp0aGlzLT5vcHRpb25zXyk7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9u
YWwgLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbyBzb3VyY2VfY29kZV9pbmZvID0gOTsK
LSAgICBpZiAoaGFzX3NvdXJjZV9jb2RlX2luZm8oKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAx
ICsKLSAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAgICAgICAgICp0aGlzLT5zb3VyY2VfY29kZV9pbmZv
Xyk7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwgc3RyaW5nIHN5bnRheCA9IDEyOwotICAgIGlm
IChoYXNfc3ludGF4KCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAg
ICAgICAgIHRoaXMtPnN5bnRheCgpKTsKLSAgICB9Ci0KLSAgfQotICAvLyByZXBlYXRlZCBzdHJp
bmcgZGVwZW5kZW5jeSA9IDM7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMtPmRlcGVuZGVuY3lf
c2l6ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPmRlcGVuZGVuY3lfc2l6ZSgpOyBp
KyspIHsKLSAgICB0b3RhbF9zaXplICs9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgdGhpcy0+ZGVwZW5kZW5jeShpKSk7Ci0g
IH0KLQotICAvLyByZXBlYXRlZCBpbnQzMiBwdWJsaWNfZGVwZW5kZW5jeSA9IDEwOwotICB7Ci0g
ICAgaW50IGRhdGFfc2l6ZSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT5wdWJs
aWNfZGVwZW5kZW5jeV9zaXplKCk7IGkrKykgewotICAgICAgZGF0YV9zaXplICs9IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgICAgSW50MzJTaXpl
KHRoaXMtPnB1YmxpY19kZXBlbmRlbmN5KGkpKTsKLSAgICB9Ci0gICAgdG90YWxfc2l6ZSArPSAx
ICogdGhpcy0+cHVibGljX2RlcGVuZGVuY3lfc2l6ZSgpICsgZGF0YV9zaXplOwotICB9Ci0KLSAg
Ly8gcmVwZWF0ZWQgaW50MzIgd2Vha19kZXBlbmRlbmN5ID0gMTE7Ci0gIHsKLSAgICBpbnQgZGF0
YV9zaXplID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPndlYWtfZGVwZW5kZW5j
eV9zaXplKCk7IGkrKykgewotICAgICAgZGF0YV9zaXplICs9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgICAgSW50MzJTaXplKHRoaXMtPndlYWtf
ZGVwZW5kZW5jeShpKSk7Ci0gICAgfQotICAgIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMtPndlYWtf
ZGVwZW5kZW5jeV9zaXplKCkgKyBkYXRhX3NpemU7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29v
Z2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90byBtZXNzYWdlX3R5cGUgPSA0OwotICB0b3RhbF9z
aXplICs9IDEgKiB0aGlzLT5tZXNzYWdlX3R5cGVfc2l6ZSgpOwotICBmb3IgKGludCBpID0gMDsg
aSA8IHRoaXMtPm1lc3NhZ2VfdHlwZV9zaXplKCk7IGkrKykgewotICAgIHRvdGFsX3NpemUgKz0K
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNZXNz
YWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgdGhpcy0+bWVzc2FnZV90eXBlKGkpKTsKLSAgfQot
Ci0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90byBlbnVt
X3R5cGUgPSA1OwotICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5lbnVtX3R5cGVfc2l6ZSgpOwot
ICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPmVudW1fdHlwZV9zaXplKCk7IGkrKykgewotICAg
IHRvdGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgdGhpcy0+ZW51bV90eXBl
KGkpKTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2Ny
aXB0b3JQcm90byBzZXJ2aWNlID0gNjsKLSAgdG90YWxfc2l6ZSArPSAxICogdGhpcy0+c2Vydmlj
ZV9zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+c2VydmljZV9zaXplKCk7IGkr
KykgewotICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgdGhpcy0+
c2VydmljZShpKSk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxk
RGVzY3JpcHRvclByb3RvIGV4dGVuc2lvbiA9IDc7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMt
PmV4dGVuc2lvbl9zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+ZXh0ZW5zaW9u
X3NpemUoKTsgaSsrKSB7Ci0gICAgdG90YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAg
ICAgICB0aGlzLT5leHRlbnNpb24oaSkpOwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0
YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgdG90YWxfc2l6ZSArPQotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6Q29tcHV0ZVVua25vd25GaWVs
ZHNTaXplKAotICAgICAgICB1bmtub3duX2ZpZWxkcygpKTsKLSAgfQotICBHT09HTEVfU0FGRV9D
T05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6ZTsK
LSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3RhbF9z
aXplOwotfQotCi12b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86Ok1lcmdlRnJvbShjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVz
Y3JpcHRvclByb3RvKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykp
IE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBz
b3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0
VG9HZW5lcmF0ZWQ8Y29uc3QgRmlsZURlc2NyaXB0b3JQcm90bz4oCi0gICAgICAgICAgJmZyb20p
OwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVz
Y3JpcHRvclByb3RvKQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rp
b25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnBy
b3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8pCi0gICAgTWVyZ2VGcm9tKCpzb3VyY2UpOwotICB9
Ci19Ci0KLXZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6TWVyZ2VGcm9tKGNvbnN0IEZpbGVEZXNj
cmlwdG9yUHJvdG8mIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19z
cGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclBy
b3RvKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJv
bUZhaWwoX19MSU5FX18pOwotICBkZXBlbmRlbmN5Xy5NZXJnZUZyb20oZnJvbS5kZXBlbmRlbmN5
Xyk7Ci0gIHB1YmxpY19kZXBlbmRlbmN5Xy5NZXJnZUZyb20oZnJvbS5wdWJsaWNfZGVwZW5kZW5j
eV8pOwotICB3ZWFrX2RlcGVuZGVuY3lfLk1lcmdlRnJvbShmcm9tLndlYWtfZGVwZW5kZW5jeV8p
OwotICBtZXNzYWdlX3R5cGVfLk1lcmdlRnJvbShmcm9tLm1lc3NhZ2VfdHlwZV8pOwotICBlbnVt
X3R5cGVfLk1lcmdlRnJvbShmcm9tLmVudW1fdHlwZV8pOwotICBzZXJ2aWNlXy5NZXJnZUZyb20o
ZnJvbS5zZXJ2aWNlXyk7Ci0gIGV4dGVuc2lvbl8uTWVyZ2VGcm9tKGZyb20uZXh0ZW5zaW9uXyk7
Ci0gIGlmIChmcm9tLl9oYXNfYml0c19bMCAvIDMyXSAmICgweGZmdSA8PCAoMCAlIDMyKSkpIHsK
LSAgICBpZiAoZnJvbS5oYXNfbmFtZSgpKSB7Ci0gICAgICBzZXRfaGFzX25hbWUoKTsKLSAgICAg
IG5hbWVfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJvbS5uYW1lXyk7Ci0gICAgfQotICAgIGlm
IChmcm9tLmhhc19wYWNrYWdlKCkpIHsKLSAgICAgIHNldF9oYXNfcGFja2FnZSgpOwotICAgICAg
cGFja2FnZV8uQXNzaWduV2l0aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBmcm9tLnBhY2thZ2VfKTsKLSAgICB9Ci0g
IH0KLSAgaWYgKGZyb20uX2hhc19iaXRzX1s5IC8gMzJdICYgKDB4ZmZ1IDw8ICg5ICUgMzIpKSkg
ewotICAgIGlmIChmcm9tLmhhc19vcHRpb25zKCkpIHsKLSAgICAgIG11dGFibGVfb3B0aW9ucygp
LT46Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVPcHRpb25zOjpNZXJnZUZyb20oZnJvbS5vcHRpb25z
KCkpOwotICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfc291cmNlX2NvZGVfaW5mbygpKSB7Ci0gICAg
ICBtdXRhYmxlX3NvdXJjZV9jb2RlX2luZm8oKS0+Ojpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VD
b2RlSW5mbzo6TWVyZ2VGcm9tKGZyb20uc291cmNlX2NvZGVfaW5mbygpKTsKLSAgICB9Ci0gICAg
aWYgKGZyb20uaGFzX3N5bnRheCgpKSB7Ci0gICAgICBzZXRfaGFzX3N5bnRheCgpOwotICAgICAg
c3ludGF4Xy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20uc3ludGF4Xyk7Ci0gICAgfQotICB9
Ci0gIGlmIChmcm9tLl9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7
Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5NZXJnZUZyb20oZnJvbS51bmtub3duX2Zp
ZWxkcygpKTsKLSAgfQotfQotCi12b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OkNvcHlGcm9tKGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYu
RmlsZURlc2NyaXB0b3JQcm90bykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xl
YXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86
OkNvcHlGcm9tKGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIGZyb20pIHsKLS8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnBy
b3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8pCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47
Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBGaWxlRGVzY3JpcHRv
clByb3RvOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIGlmICghOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6QWxsQXJlSW5pdGlhbGl6ZWQodGhpcy0+bWVzc2FnZV90eXBlKCkpKSBy
ZXR1cm4gZmFsc2U7Ci0gIGlmICghOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QWxsQXJl
SW5pdGlhbGl6ZWQodGhpcy0+ZW51bV90eXBlKCkpKSByZXR1cm4gZmFsc2U7Ci0gIGlmICghOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QWxsQXJlSW5pdGlhbGl6ZWQodGhpcy0+c2Vydmlj
ZSgpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAoITo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkFsbEFyZUluaXRpYWxpemVkKHRoaXMtPmV4dGVuc2lvbigpKSkgcmV0dXJuIGZhbHNlOwotICBp
ZiAoaGFzX29wdGlvbnMoKSkgewotICAgIGlmICghdGhpcy0+b3B0aW9uc18tPklzSW5pdGlhbGl6
ZWQoKSkgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZpbGVE
ZXNjcmlwdG9yUHJvdG86OlN3YXAoRmlsZURlc2NyaXB0b3JQcm90byogb3RoZXIpIHsKLSAgaWYg
KG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQg
RmlsZURlc2NyaXB0b3JQcm90bzo6SW50ZXJuYWxTd2FwKEZpbGVEZXNjcmlwdG9yUHJvdG8qIG90
aGVyKSB7Ci0gIG5hbWVfLlN3YXAoJm90aGVyLT5uYW1lXyk7Ci0gIHBhY2thZ2VfLlN3YXAoJm90
aGVyLT5wYWNrYWdlXyk7Ci0gIGRlcGVuZGVuY3lfLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPmRl
cGVuZGVuY3lfKTsKLSAgcHVibGljX2RlcGVuZGVuY3lfLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXIt
PnB1YmxpY19kZXBlbmRlbmN5Xyk7Ci0gIHdlYWtfZGVwZW5kZW5jeV8uVW5zYWZlQXJlbmFTd2Fw
KCZvdGhlci0+d2Vha19kZXBlbmRlbmN5Xyk7Ci0gIG1lc3NhZ2VfdHlwZV8uVW5zYWZlQXJlbmFT
d2FwKCZvdGhlci0+bWVzc2FnZV90eXBlXyk7Ci0gIGVudW1fdHlwZV8uVW5zYWZlQXJlbmFTd2Fw
KCZvdGhlci0+ZW51bV90eXBlXyk7Ci0gIHNlcnZpY2VfLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXIt
PnNlcnZpY2VfKTsKLSAgZXh0ZW5zaW9uXy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT5leHRlbnNp
b25fKTsKLSAgc3RkOjpzd2FwKG9wdGlvbnNfLCBvdGhlci0+b3B0aW9uc18pOwotICBzdGQ6OnN3
YXAoc291cmNlX2NvZGVfaW5mb18sIG90aGVyLT5zb3VyY2VfY29kZV9pbmZvXyk7Ci0gIHN5bnRh
eF8uU3dhcCgmb3RoZXItPnN5bnRheF8pOwotICBzdGQ6OnN3YXAoX2hhc19iaXRzX1swXSwgb3Ro
ZXItPl9oYXNfYml0c19bMF0pOwotICBfaW50ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90aGVyLT5f
aW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90aGVyLT5f
Y2FjaGVkX3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBGaWxlRGVz
Y3JpcHRvclByb3RvOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVz
Y3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7
Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBGaWxlRGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0b3Jf
OwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gRmlsZURlc2NyaXB0b3JQcm90b19yZWZsZWN0aW9u
XzsKLSAgcmV0dXJuIG1ldGFkYXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9I
RUFERVJTCi0vLyBGaWxlRGVzY3JpcHRvclByb3RvCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBuYW1l
ID0gMTsKLWJvb2wgRmlsZURlc2NyaXB0b3JQcm90bzo6aGFzX25hbWUoKSBjb25zdCB7Ci0gIHJl
dHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQotdm9pZCBGaWxlRGVz
Y3JpcHRvclByb3RvOjpzZXRfaGFzX25hbWUoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAw
MDAwMXU7Ci19Ci12b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hhc19uYW1lKCkgewot
ICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAxdTsKLX0KLXZvaWQgRmlsZURlc2NyaXB0b3JQ
cm90bzo6Y2xlYXJfbmFtZSgpIHsKLSAgbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
ICBjbGVhcl9oYXNfbmFtZSgpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZpbGVEZXNjcmlw
dG9yUHJvdG86Om5hbWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgcmV0
dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86
OnNldF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfbmFtZSgp
OwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm5h
bWUpCi19Ci0gdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2
YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3Rk
OjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci0gdm9p
ZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90
IHNpemUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAg
ICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNp
emUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdv
b2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci0gOjpzdGQ6OnN0cmlu
ZyogRmlsZURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9uYW1lKCkgewotICBzZXRfaGFzX25hbWUo
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnBy
b3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFibGVO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogRmlsZURlc2NyaXB0b3JQcm90bzo6cmVs
ZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFz
ZTpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5uYW1lKQotICBjbGVhcl9oYXNf
bmFtZSgpOwotICByZXR1cm4gbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZp
bGVEZXNjcmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3RyaW5nKiBuYW1l
KSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX25hbWUoKTsKLSAgfSBlbHNl
IHsKLSAgICBjbGVhcl9oYXNfbmFtZSgpOwotICB9Ci0gIG5hbWVfLlNldEFsbG9jYXRlZE5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpLCBuYW1lKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9h
bGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLQot
Ly8gb3B0aW9uYWwgc3RyaW5nIHBhY2thZ2UgPSAyOwotYm9vbCBGaWxlRGVzY3JpcHRvclByb3Rv
OjpoYXNfcGFja2FnZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAw
MDAwMnUpICE9IDA7Ci19Ci12b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfcGFja2Fn
ZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0KLXZvaWQgRmlsZURlc2Ny
aXB0b3JQcm90bzo6Y2xlYXJfaGFzX3BhY2thZ2UoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4
MDAwMDAwMDJ1OwotfQotdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9wYWNrYWdlKCkg
ewotICBwYWNrYWdlXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc19wYWNr
YWdlKCk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgRmlsZURlc2NyaXB0b3JQcm90bzo6cGFj
a2FnZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpn
b29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wYWNrYWdlKQotICByZXR1cm4gcGFj
a2FnZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0
X3BhY2thZ2UoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19wYWNrYWdl
KCk7Ci0gIHBhY2thZ2VfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJv
dG8ucGFja2FnZSkKLX0KLSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OnNldF9wYWNrYWdlKGNv
bnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfcGFja2FnZSgpOwotICBwYWNrYWdlXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJv
dG8ucGFja2FnZSkKLX0KLSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OnNldF9wYWNrYWdlKGNv
bnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBzZXRfaGFzX3BhY2thZ2UoKTsKLSAg
cGFja2FnZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
UHJvdG8ucGFja2FnZSkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWxlRGVzY3JpcHRvclByb3RvOjpt
dXRhYmxlX3BhY2thZ2UoKSB7Ci0gIHNldF9oYXNfcGFja2FnZSgpOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0
b3JQcm90by5wYWNrYWdlKQotICByZXR1cm4gcGFja2FnZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWxlRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX3BhY2thZ2Uo
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5w
cm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnBhY2thZ2UpCi0gIGNsZWFyX2hhc19wYWNrYWdl
KCk7Ci0gIHJldHVybiBwYWNrYWdlXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgRmls
ZURlc2NyaXB0b3JQcm90bzo6c2V0X2FsbG9jYXRlZF9wYWNrYWdlKDo6c3RkOjpzdHJpbmcqIHBh
Y2thZ2UpIHsKLSAgaWYgKHBhY2thZ2UgIT0gTlVMTCkgewotICAgIHNldF9oYXNfcGFja2FnZSgp
OwotICB9IGVsc2UgewotICAgIGNsZWFyX2hhc19wYWNrYWdlKCk7Ci0gIH0KLSAgcGFja2FnZV8u
U2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHBhY2thZ2UpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0
b3JQcm90by5wYWNrYWdlKQotfQotCi0vLyByZXBlYXRlZCBzdHJpbmcgZGVwZW5kZW5jeSA9IDM7
Ci1pbnQgRmlsZURlc2NyaXB0b3JQcm90bzo6ZGVwZW5kZW5jeV9zaXplKCkgY29uc3QgewotICBy
ZXR1cm4gZGVwZW5kZW5jeV8uc2l6ZSgpOwotfQotdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpj
bGVhcl9kZXBlbmRlbmN5KCkgewotICBkZXBlbmRlbmN5Xy5DbGVhcigpOwotfQotIGNvbnN0IDo6
c3RkOjpzdHJpbmcmIEZpbGVEZXNjcmlwdG9yUHJvdG86OmRlcGVuZGVuY3koaW50IGluZGV4KSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnBy
b3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVwZW5kZW5jeSkKLSAgcmV0dXJuIGRlcGVuZGVu
Y3lfLkdldChpbmRleCk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogRmlsZURlc2NyaXB0b3JQcm90bzo6
bXV0YWJsZV9kZXBlbmRlbmN5KGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5k
ZXBlbmRlbmN5KQotICByZXR1cm4gZGVwZW5kZW5jeV8uTXV0YWJsZShpbmRleCk7Ci19Ci0gdm9p
ZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfZGVwZW5kZW5jeShpbnQgaW5kZXgsIGNvbnN0IDo6
c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVwZW5kZW5jeSkKLSAg
ZGVwZW5kZW5jeV8uTXV0YWJsZShpbmRleCktPmFzc2lnbih2YWx1ZSk7Ci19Ci0gdm9pZCBGaWxl
RGVzY3JpcHRvclByb3RvOjpzZXRfZGVwZW5kZW5jeShpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIHZh
bHVlKSB7Ci0gIGRlcGVuZGVuY3lfLk11dGFibGUoaW5kZXgpLT5hc3NpZ24odmFsdWUpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVm
LkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVwZW5kZW5jeSkKLX0KLSB2b2lkIEZpbGVEZXNjcmlwdG9y
UHJvdG86OnNldF9kZXBlbmRlbmN5KGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUsIHNpemVf
dCBzaXplKSB7Ci0gIGRlcGVuZGVuY3lfLk11dGFibGUoaW5kZXgpLT5hc3NpZ24oCi0gICAgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVz
Y3JpcHRvclByb3RvLmRlcGVuZGVuY3kpCi19Ci0gOjpzdGQ6OnN0cmluZyogRmlsZURlc2NyaXB0
b3JQcm90bzo6YWRkX2RlcGVuZGVuY3koKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9hZGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5k
ZXBlbmRlbmN5KQotICByZXR1cm4gZGVwZW5kZW5jeV8uQWRkKCk7Ci19Ci0gdm9pZCBGaWxlRGVz
Y3JpcHRvclByb3RvOjphZGRfZGVwZW5kZW5jeShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkg
ewotICBkZXBlbmRlbmN5Xy5BZGQoKS0+YXNzaWduKHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90
by5kZXBlbmRlbmN5KQotfQotIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6YWRkX2RlcGVuZGVu
Y3koY29uc3QgY2hhciogdmFsdWUpIHsKLSAgZGVwZW5kZW5jeV8uQWRkKCktPmFzc2lnbih2YWx1
ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGRfY2hhcjpnb29nbGUu
cHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kZXBlbmRlbmN5KQotfQotIHZvaWQgRmlsZURl
c2NyaXB0b3JQcm90bzo6YWRkX2RlcGVuZGVuY3koY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBz
aXplKSB7Ci0gIGRlcGVuZGVuY3lfLkFkZCgpLT5hc3NpZ24ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4odmFsdWUpLCBzaXplKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2FkZF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlcGVu
ZGVuY3kpCi19Ci0gY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6
OnN0ZDo6c3RyaW5nPiYKLUZpbGVEZXNjcmlwdG9yUHJvdG86OmRlcGVuZGVuY3koKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1
Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlcGVuZGVuY3kpCi0gIHJldHVybiBkZXBlbmRlbmN5XzsK
LX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+
KgotRmlsZURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9kZXBlbmRlbmN5KCkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5G
aWxlRGVzY3JpcHRvclByb3RvLmRlcGVuZGVuY3kpCi0gIHJldHVybiAmZGVwZW5kZW5jeV87Ci19
Ci0KLS8vIHJlcGVhdGVkIGludDMyIHB1YmxpY19kZXBlbmRlbmN5ID0gMTA7Ci1pbnQgRmlsZURl
c2NyaXB0b3JQcm90bzo6cHVibGljX2RlcGVuZGVuY3lfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJu
IHB1YmxpY19kZXBlbmRlbmN5Xy5zaXplKCk7Ci19Ci12b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86
OmNsZWFyX3B1YmxpY19kZXBlbmRlbmN5KCkgewotICBwdWJsaWNfZGVwZW5kZW5jeV8uQ2xlYXIo
KTsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIEZpbGVEZXNjcmlwdG9yUHJvdG86OnB1
YmxpY19kZXBlbmRlbmN5KGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnB1
YmxpY19kZXBlbmRlbmN5KQotICByZXR1cm4gcHVibGljX2RlcGVuZGVuY3lfLkdldChpbmRleCk7
Ci19Ci0gdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfcHVibGljX2RlcGVuZGVuY3koaW50
IGluZGV4LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIHB1YmxpY19kZXBl
bmRlbmN5Xy5TZXQoaW5kZXgsIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wdWJsaWNfZGVw
ZW5kZW5jeSkKLX0KLSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmFkZF9wdWJsaWNfZGVwZW5k
ZW5jeSg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIHB1YmxpY19kZXBlbmRl
bmN5Xy5BZGQodmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRk
Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnB1YmxpY19kZXBlbmRlbmN5KQot
fQotIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZDwgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnQzMiA+JgotRmlsZURlc2NyaXB0b3JQcm90bzo6cHVibGljX2RlcGVuZGVuY3ko
KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2ds
ZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnB1YmxpY19kZXBlbmRlbmN5KQotICByZXR1
cm4gcHVibGljX2RlcGVuZGVuY3lfOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRG
aWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiA+KgotRmlsZURlc2NyaXB0b3JQcm90bzo6
bXV0YWJsZV9wdWJsaWNfZGVwZW5kZW5jeSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90
by5wdWJsaWNfZGVwZW5kZW5jeSkKLSAgcmV0dXJuICZwdWJsaWNfZGVwZW5kZW5jeV87Ci19Ci0K
LS8vIHJlcGVhdGVkIGludDMyIHdlYWtfZGVwZW5kZW5jeSA9IDExOwotaW50IEZpbGVEZXNjcmlw
dG9yUHJvdG86OndlYWtfZGVwZW5kZW5jeV9zaXplKCkgY29uc3QgewotICByZXR1cm4gd2Vha19k
ZXBlbmRlbmN5Xy5zaXplKCk7Ci19Ci12b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX3dl
YWtfZGVwZW5kZW5jeSgpIHsKLSAgd2Vha19kZXBlbmRlbmN5Xy5DbGVhcigpOwotfQotIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50MzIgRmlsZURlc2NyaXB0b3JQcm90bzo6d2Vha19kZXBlbmRlbmN5
KGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
Z2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLndlYWtfZGVwZW5kZW5jeSkK
LSAgcmV0dXJuIHdlYWtfZGVwZW5kZW5jeV8uR2V0KGluZGV4KTsKLX0KLSB2b2lkIEZpbGVEZXNj
cmlwdG9yUHJvdG86OnNldF93ZWFrX2RlcGVuZGVuY3koaW50IGluZGV4LCA6Omdvb2dsZTo6cHJv
dG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIHdlYWtfZGVwZW5kZW5jeV8uU2V0KGluZGV4LCB2YWx1
ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3Rv
YnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ud2Vha19kZXBlbmRlbmN5KQotfQotIHZvaWQgRmlsZURl
c2NyaXB0b3JQcm90bzo6YWRkX3dlYWtfZGVwZW5kZW5jeSg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dDMyIHZhbHVlKSB7Ci0gIHdlYWtfZGVwZW5kZW5jeV8uQWRkKHZhbHVlKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0
b3JQcm90by53ZWFrX2RlcGVuZGVuY3kpCi19Ci0gY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpS
ZXBlYXRlZEZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyID4mCi1GaWxlRGVzY3JpcHRv
clByb3RvOjp3ZWFrX2RlcGVuZGVuY3koKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLndl
YWtfZGVwZW5kZW5jeSkKLSAgcmV0dXJuIHdlYWtfZGVwZW5kZW5jeV87Ci19Ci0gOjpnb29nbGU6
OnByb3RvYnVmOjpSZXBlYXRlZEZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyID4qCi1G
aWxlRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX3dlYWtfZGVwZW5kZW5jeSgpIHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYu
RmlsZURlc2NyaXB0b3JQcm90by53ZWFrX2RlcGVuZGVuY3kpCi0gIHJldHVybiAmd2Vha19kZXBl
bmRlbmN5XzsKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJv
dG8gbWVzc2FnZV90eXBlID0gNDsKLWludCBGaWxlRGVzY3JpcHRvclByb3RvOjptZXNzYWdlX3R5
cGVfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG1lc3NhZ2VfdHlwZV8uc2l6ZSgpOwotfQotdm9p
ZCBGaWxlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9tZXNzYWdlX3R5cGUoKSB7Ci0gIG1lc3NhZ2Vf
dHlwZV8uQ2xlYXIoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclBy
b3RvJiBGaWxlRGVzY3JpcHRvclByb3RvOjptZXNzYWdlX3R5cGUoaW50IGluZGV4KSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVm
LkZpbGVEZXNjcmlwdG9yUHJvdG8ubWVzc2FnZV90eXBlKQotICByZXR1cm4gbWVzc2FnZV90eXBl
Xy5HZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG8qIEZp
bGVEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfbWVzc2FnZV90eXBlKGludCBpbmRleCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYu
RmlsZURlc2NyaXB0b3JQcm90by5tZXNzYWdlX3R5cGUpCi0gIHJldHVybiBtZXNzYWdlX3R5cGVf
Lk11dGFibGUoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG8q
IEZpbGVEZXNjcmlwdG9yUHJvdG86OmFkZF9tZXNzYWdlX3R5cGUoKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
UHJvdG8ubWVzc2FnZV90eXBlKQotICByZXR1cm4gbWVzc2FnZV90eXBlXy5BZGQoKTsKLX0KLTo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpE
ZXNjcmlwdG9yUHJvdG8gPioKLUZpbGVEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfbWVzc2FnZV90
eXBlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0
Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm1lc3NhZ2VfdHlwZSkKLSAgcmV0
dXJuICZtZXNzYWdlX3R5cGVfOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRl
ZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90byA+JgotRmlsZURl
c2NyaXB0b3JQcm90bzo6bWVzc2FnZV90eXBlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90
by5tZXNzYWdlX3R5cGUpCi0gIHJldHVybiBtZXNzYWdlX3R5cGVfOwotfQotCi0vLyByZXBlYXRl
ZCAuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8gZW51bV90eXBlID0gNTsKLWlu
dCBGaWxlRGVzY3JpcHRvclByb3RvOjplbnVtX3R5cGVfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJu
IGVudW1fdHlwZV8uc2l6ZSgpOwotfQotdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9l
bnVtX3R5cGUoKSB7Ci0gIGVudW1fdHlwZV8uQ2xlYXIoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6RW51bURlc2NyaXB0b3JQcm90byYgRmlsZURlc2NyaXB0b3JQcm90bzo6ZW51bV90
eXBlKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmVudW1fdHlwZSkKLSAg
cmV0dXJuIGVudW1fdHlwZV8uR2V0KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51
bURlc2NyaXB0b3JQcm90byogRmlsZURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9lbnVtX3R5cGUo
aW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxl
Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmVudW1fdHlwZSkKLSAgcmV0dXJu
IGVudW1fdHlwZV8uTXV0YWJsZShpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OkVudW1E
ZXNjcmlwdG9yUHJvdG8qIEZpbGVEZXNjcmlwdG9yUHJvdG86OmFkZF9lbnVtX3R5cGUoKSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkZp
bGVEZXNjcmlwdG9yUHJvdG8uZW51bV90eXBlKQotICByZXR1cm4gZW51bV90eXBlXy5BZGQoKTsK
LX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3Rv
YnVmOjpFbnVtRGVzY3JpcHRvclByb3RvID4qCi1GaWxlRGVzY3JpcHRvclByb3RvOjptdXRhYmxl
X2VudW1fdHlwZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFi
bGVfbGlzdDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5lbnVtX3R5cGUpCi0g
IHJldHVybiAmZW51bV90eXBlXzsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0
ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvclByb3RvID4mCi1G
aWxlRGVzY3JpcHRvclByb3RvOjplbnVtX3R5cGUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclBy
b3RvLmVudW1fdHlwZSkKLSAgcmV0dXJuIGVudW1fdHlwZV87Ci19Ci0KLS8vIHJlcGVhdGVkIC5n
b29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90byBzZXJ2aWNlID0gNjsKLWludCBG
aWxlRGVzY3JpcHRvclByb3RvOjpzZXJ2aWNlX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBzZXJ2
aWNlXy5zaXplKCk7Ci19Ci12b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX3NlcnZpY2Uo
KSB7Ci0gIHNlcnZpY2VfLkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlNl
cnZpY2VEZXNjcmlwdG9yUHJvdG8mIEZpbGVEZXNjcmlwdG9yUHJvdG86OnNlcnZpY2UoaW50IGlu
ZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29v
Z2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc2VydmljZSkKLSAgcmV0dXJuIHNlcnZp
Y2VfLkdldChpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlNlcnZpY2VEZXNjcmlwdG9y
UHJvdG8qIEZpbGVEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfc2VydmljZShpbnQgaW5kZXgpIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3Rv
YnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc2VydmljZSkKLSAgcmV0dXJuIHNlcnZpY2VfLk11dGFi
bGUoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlRGVzY3JpcHRvclByb3Rv
KiBGaWxlRGVzY3JpcHRvclByb3RvOjphZGRfc2VydmljZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90
by5zZXJ2aWNlKQotICByZXR1cm4gc2VydmljZV8uQWRkKCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9i
dWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZURlc2NyaXB0
b3JQcm90byA+KgotRmlsZURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9zZXJ2aWNlKCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90
b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNlcnZpY2UpCi0gIHJldHVybiAmc2VydmljZV87Ci19
Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6U2VydmljZURlc2NyaXB0b3JQcm90byA+JgotRmlsZURlc2NyaXB0b3JQcm90bzo6
c2VydmljZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xp
c3Q6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc2VydmljZSkKLSAgcmV0dXJu
IHNlcnZpY2VfOwotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3Jp
cHRvclByb3RvIGV4dGVuc2lvbiA9IDc7Ci1pbnQgRmlsZURlc2NyaXB0b3JQcm90bzo6ZXh0ZW5z
aW9uX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBleHRlbnNpb25fLnNpemUoKTsKLX0KLXZvaWQg
RmlsZURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfZXh0ZW5zaW9uKCkgewotICBleHRlbnNpb25fLkNs
ZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3Rv
JiBGaWxlRGVzY3JpcHRvclByb3RvOjpleHRlbnNpb24oaW50IGluZGV4KSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVE
ZXNjcmlwdG9yUHJvdG8uZXh0ZW5zaW9uKQotICByZXR1cm4gZXh0ZW5zaW9uXy5HZXQoaW5kZXgp
OwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90byogRmlsZURlc2Ny
aXB0b3JQcm90bzo6bXV0YWJsZV9leHRlbnNpb24oaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3Jp
cHRvclByb3RvLmV4dGVuc2lvbikKLSAgcmV0dXJuIGV4dGVuc2lvbl8uTXV0YWJsZShpbmRleCk7
Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvKiBGaWxlRGVzY3Jp
cHRvclByb3RvOjphZGRfZXh0ZW5zaW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmV4dGVuc2lv
bikKLSAgcmV0dXJuIGV4dGVuc2lvbl8uQWRkKCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlJl
cGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8g
PioKLUZpbGVEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfZXh0ZW5zaW9uKCkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5G
aWxlRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbikKLSAgcmV0dXJuICZleHRlbnNpb25fOwotfQot
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJv
dG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvID4mCi1GaWxlRGVzY3JpcHRvclByb3RvOjpleHRl
bnNpb24oKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0
Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbikKLSAgcmV0dXJu
IGV4dGVuc2lvbl87Ci19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlv
bnMgb3B0aW9ucyA9IDg7Ci1ib29sIEZpbGVEZXNjcmlwdG9yUHJvdG86Omhhc19vcHRpb25zKCkg
Y29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMjAwdSkgIT0gMDsKLX0K
LXZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19vcHRpb25zKCkgewotICBfaGFzX2Jp
dHNfWzBdIHw9IDB4MDAwMDAyMDB1OwotfQotdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpjbGVh
cl9oYXNfb3B0aW9ucygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDIwMHU7Ci19Ci12
b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX29wdGlvbnMoKSB7Ci0gIGlmIChvcHRpb25z
XyAhPSBOVUxMKSBvcHRpb25zXy0+Ojpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0aW9uczo6Q2xl
YXIoKTsKLSAgY2xlYXJfaGFzX29wdGlvbnMoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RmlsZU9wdGlvbnMmIEZpbGVEZXNjcmlwdG9yUHJvdG86Om9wdGlvbnMoKSBjb25zdCB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZp
bGVEZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfICE9IE5VTEwgPyAq
b3B0aW9uc18gOiAqZGVmYXVsdF9pbnN0YW5jZV8tPm9wdGlvbnNfOwotfQotOjpnb29nbGU6OnBy
b3RvYnVmOjpGaWxlT3B0aW9ucyogRmlsZURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9vcHRpb25z
KCkgewotICBzZXRfaGFzX29wdGlvbnMoKTsKLSAgaWYgKG9wdGlvbnNfID09IE5VTEwpIHsKLSAg
ICBvcHRpb25zXyA9IG5ldyA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVPcHRpb25zOwotICB9Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1
Zi5GaWxlRGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXzsKLX0KLTo6
Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9wdGlvbnMqIEZpbGVEZXNjcmlwdG9yUHJvdG86OnJlbGVh
c2Vfb3B0aW9ucygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVh
c2U6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAgY2xlYXJf
aGFzX29wdGlvbnMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0aW9ucyogdGVtcCA9
IG9wdGlvbnNfOwotICBvcHRpb25zXyA9IE5VTEw7Ci0gIHJldHVybiB0ZW1wOwotfQotdm9pZCBG
aWxlRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX29wdGlvbnMoOjpnb29nbGU6OnByb3Rv
YnVmOjpGaWxlT3B0aW9ucyogb3B0aW9ucykgewotICBkZWxldGUgb3B0aW9uc187Ci0gIG9wdGlv
bnNfID0gb3B0aW9uczsKLSAgaWYgKG9wdGlvbnMpIHsKLSAgICBzZXRfaGFzX29wdGlvbnMoKTsK
LSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfb3B0aW9ucygpOwotICB9Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWxl
RGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9i
dWYuU291cmNlQ29kZUluZm8gc291cmNlX2NvZGVfaW5mbyA9IDk7Ci1ib29sIEZpbGVEZXNjcmlw
dG9yUHJvdG86Omhhc19zb3VyY2VfY29kZV9pbmZvKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNf
Yml0c19bMF0gJiAweDAwMDAwNDAwdSkgIT0gMDsKLX0KLXZvaWQgRmlsZURlc2NyaXB0b3JQcm90
bzo6c2V0X2hhc19zb3VyY2VfY29kZV9pbmZvKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAw
MDA0MDB1OwotfQotdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfc291cmNlX2Nv
ZGVfaW5mbygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDQwMHU7Ci19Ci12b2lkIEZp
bGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX3NvdXJjZV9jb2RlX2luZm8oKSB7Ci0gIGlmIChzb3Vy
Y2VfY29kZV9pbmZvXyAhPSBOVUxMKSBzb3VyY2VfY29kZV9pbmZvXy0+Ojpnb29nbGU6OnByb3Rv
YnVmOjpTb3VyY2VDb2RlSW5mbzo6Q2xlYXIoKTsKLSAgY2xlYXJfaGFzX3NvdXJjZV9jb2RlX2lu
Zm8oKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29kZUluZm8mIEZpbGVE
ZXNjcmlwdG9yUHJvdG86OnNvdXJjZV9jb2RlX2luZm8oKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
UHJvdG8uc291cmNlX2NvZGVfaW5mbykKLSAgcmV0dXJuIHNvdXJjZV9jb2RlX2luZm9fICE9IE5V
TEwgPyAqc291cmNlX2NvZGVfaW5mb18gOiAqZGVmYXVsdF9pbnN0YW5jZV8tPnNvdXJjZV9jb2Rl
X2luZm9fOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mbyogRmlsZURlc2Ny
aXB0b3JQcm90bzo6bXV0YWJsZV9zb3VyY2VfY29kZV9pbmZvKCkgewotICBzZXRfaGFzX3NvdXJj
ZV9jb2RlX2luZm8oKTsKLSAgaWYgKHNvdXJjZV9jb2RlX2luZm9fID09IE5VTEwpIHsKLSAgICBz
b3VyY2VfY29kZV9pbmZvXyA9IG5ldyA6Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvZGVJbmZv
OwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2ds
ZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNvdXJjZV9jb2RlX2luZm8pCi0gIHJldHVy
biBzb3VyY2VfY29kZV9pbmZvXzsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29kZUlu
Zm8qIEZpbGVEZXNjcmlwdG9yUHJvdG86OnJlbGVhc2Vfc291cmNlX2NvZGVfaW5mbygpIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVm
LkZpbGVEZXNjcmlwdG9yUHJvdG8uc291cmNlX2NvZGVfaW5mbykKLSAgY2xlYXJfaGFzX3NvdXJj
ZV9jb2RlX2luZm8oKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mbyogdGVt
cCA9IHNvdXJjZV9jb2RlX2luZm9fOwotICBzb3VyY2VfY29kZV9pbmZvXyA9IE5VTEw7Ci0gIHJl
dHVybiB0ZW1wOwotfQotdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX3Nv
dXJjZV9jb2RlX2luZm8oOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mbyogc291cmNl
X2NvZGVfaW5mbykgewotICBkZWxldGUgc291cmNlX2NvZGVfaW5mb187Ci0gIHNvdXJjZV9jb2Rl
X2luZm9fID0gc291cmNlX2NvZGVfaW5mbzsKLSAgaWYgKHNvdXJjZV9jb2RlX2luZm8pIHsKLSAg
ICBzZXRfaGFzX3NvdXJjZV9jb2RlX2luZm8oKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNf
c291cmNlX2NvZGVfaW5mbygpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNv
dXJjZV9jb2RlX2luZm8pCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBzeW50YXggPSAxMjsKLWJv
b2wgRmlsZURlc2NyaXB0b3JQcm90bzo6aGFzX3N5bnRheCgpIGNvbnN0IHsKLSAgcmV0dXJuIChf
aGFzX2JpdHNfWzBdICYgMHgwMDAwMDgwMHUpICE9IDA7Ci19Ci12b2lkIEZpbGVEZXNjcmlwdG9y
UHJvdG86OnNldF9oYXNfc3ludGF4KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDA4MDB1
OwotfQotdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfc3ludGF4KCkgewotICBf
aGFzX2JpdHNfWzBdICY9IH4weDAwMDAwODAwdTsKLX0KLXZvaWQgRmlsZURlc2NyaXB0b3JQcm90
bzo6Y2xlYXJfc3ludGF4KCkgewotICBzeW50YXhfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LSAgY2xlYXJfaGFzX3N5bnRheCgpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZpbGVEZXNj
cmlwdG9yUHJvdG86OnN5bnRheCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zeW50YXgp
Ci0gIHJldHVybiBzeW50YXhfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpbGVEZXNjcmlw
dG9yUHJvdG86OnNldF9zeW50YXgoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0
X2hhc19zeW50YXgoKTsKLSAgc3ludGF4Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVz
Y3JpcHRvclByb3RvLnN5bnRheCkKLX0KLSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OnNldF9z
eW50YXgoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgc2V0X2hhc19zeW50YXgoKTsKLSAgc3ludGF4
Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlw
dG9yUHJvdG8uc3ludGF4KQotfQotIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X3N5bnRh
eChjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19zeW50YXgoKTsK
LSAgc3ludGF4Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0
b3JQcm90by5zeW50YXgpCi19Ci0gOjpzdGQ6OnN0cmluZyogRmlsZURlc2NyaXB0b3JQcm90bzo6
bXV0YWJsZV9zeW50YXgoKSB7Ci0gIHNldF9oYXNfc3ludGF4KCk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRv
clByb3RvLnN5bnRheCkKLSAgcmV0dXJuIHN5bnRheF8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0K
LSA6OnN0ZDo6c3RyaW5nKiBGaWxlRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX3N5bnRheCgpIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3Rv
YnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc3ludGF4KQotICBjbGVhcl9oYXNfc3ludGF4KCk7Ci0g
IHJldHVybiBzeW50YXhfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBGaWxlRGVzY3Jp
cHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX3N5bnRheCg6OnN0ZDo6c3RyaW5nKiBzeW50YXgpIHsK
LSAgaWYgKHN5bnRheCAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19zeW50YXgoKTsKLSAgfSBlbHNl
IHsKLSAgICBjbGVhcl9oYXNfc3ludGF4KCk7Ci0gIH0KLSAgc3ludGF4Xy5TZXRBbGxvY2F0ZWRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgc3ludGF4KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc3ludGF4
KQotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAot
Y29uc3QgaW50IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6a1N0YXJ0RmllbGROdW1i
ZXI7Ci1jb25zdCBpbnQgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjprRW5kRmllbGRO
dW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAw
Ci0KLURlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6RGVzY3JpcHRvclByb3RvX0V4dGVu
c2lvblJhbmdlKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFs
X21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0
ZW5zaW9uUmFuZ2UpCi19Ci0KLXZvaWQgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjpJ
bml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci19Ci0KLURlc2NyaXB0b3JQcm90b19FeHRlbnNpb25S
YW5nZTo6RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKGNvbnN0IERlc2NyaXB0b3JQcm90
b19FeHRlbnNpb25SYW5nZSYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2Uo
KSwKLSAgICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBN
ZXJnZUZyb20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0
cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UpCi19
Ci0KLXZvaWQgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjpTaGFyZWRDdG9yKCkgewot
ICBfY2FjaGVkX3NpemVfID0gMDsKLSAgc3RhcnRfID0gMDsKLSAgZW5kXyA9IDA7Ci0gIDo6bWVt
c2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci19Ci0KLURlc2NyaXB0b3JQ
cm90b19FeHRlbnNpb25SYW5nZTo6fkRlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSgpIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVm
LkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12
b2lkIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6U2hhcmVkRHRvcigpIHsKLSAgaWYg
KHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIERlc2NyaXB0b3JQ
cm90b19FeHRlbnNpb25SYW5nZTo6U2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3QgewotICBH
T09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0g
c2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci19Ci1jb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25S
YW5nZTo6ZGVzY3JpcHRvcigpIHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7
Ci0gIHJldHVybiBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2VfZGVzY3JpcHRvcl87Ci19
Ci0KLWNvbnN0IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSYgRGVzY3JpcHRvclByb3Rv
X0V4dGVuc2lvblJhbmdlOjpkZWZhdWx0X2luc3RhbmNlKCkgewotICBpZiAoZGVmYXVsdF9pbnN0
YW5jZV8gPT0gTlVMTCkgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2Ny
aXB0b3JfMmVwcm90bygpOwotICByZXR1cm4gKmRlZmF1bHRfaW5zdGFuY2VfOwotfQotCi1EZXNj
cmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UqIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5n
ZTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1EZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9u
UmFuZ2UqIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6TmV3KDo6Z29vZ2xlOjpwcm90
b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25S
YW5nZSogbiA9IG5ldyBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U7Ci0gIGlmIChhcmVu
YSAhPSBOVUxMKSB7Ci0gICAgYXJlbmEtPk93bihuKTsKLSAgfQotICByZXR1cm4gbjsKLX0KLQot
dm9pZCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U6OkNsZWFyKCkgewotLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRl
c2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSkKLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNk
ZWZpbmUgWlJfSEVMUEVSXyhmKSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcHVzaCIp
IFwKLSAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdpbnZhbGlkLW9mZnNl
dG9mXCIiKSBcCi0gIF9fYnVpbHRpbl9vZmZzZXRvZihEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9u
UmFuZ2UsIGYpIFwKLSAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBwb3AiKQotI2Vsc2UKLSNk
ZWZpbmUgWlJfSEVMUEVSXyhmKSByZWludGVycHJldF9jYXN0PGNoYXIqPihcCi0gICZyZWludGVy
cHJldF9jYXN0PERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSo+KDE2KS0+ZikKLSNlbmRp
ZgotCi0jZGVmaW5lIFpSXyhmaXJzdCwgbGFzdCkgZG8ge1wKLSAgOjptZW1zZXQoJmZpcnN0LCAw
LFwKLSAgICAgICAgICAgWlJfSEVMUEVSXyhsYXN0KSAtIFpSX0hFTFBFUl8oZmlyc3QpICsgc2l6
ZW9mKGxhc3QpKTtcCi19IHdoaWxlICgwKQotCi0gIFpSXyhzdGFydF8sIGVuZF8pOwotCi0jdW5k
ZWYgWlJfSEVMUEVSXwotI3VuZGVmIFpSXwotCi0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNp
emVvZihfaGFzX2JpdHNfKSk7Ci0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93
bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+Q2xlYXIoKTsKLSAg
fQotfQotCi1ib29sIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6TWVyZ2VQYXJ0aWFs
RnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRT
dHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVE
SUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpn
b29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlKQotICBmb3IgKDs7
KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyLCBib29sPiBw
ID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0b2ZmKDEyNyk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAg
ICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVy
KHRhZykpIHsKLSAgICAgIC8vIG9wdGlvbmFsIGludDMyIHN0YXJ0ID0gMTsKLSAgICAgIGNhc2Ug
MTogewotICAgICAgICBpZiAodGFnID09IDgpIHsKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPAotICAgICAg
ICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIsIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0lOVDMyPigKLSAgICAgICAgICAgICAg
ICAgaW5wdXQsICZzdGFydF8pKSk7Ci0gICAgICAgICAgc2V0X2hhc19zdGFydCgpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMTYpKSBnb3RvIHBhcnNlX2VuZDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIGludDMyIGVuZCA9IDI7Ci0gICAg
ICBjYXNlIDI6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxNikgewotICAgICAgICAgcGFyc2VfZW5k
OgotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnQzMiwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OlRZUEVfSU5UMzI+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJmVuZF8pKSk7Ci0gICAgICAg
ICAgc2V0X2hhc19lbmQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRs
ZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0QXRFbmQoKSkg
Z290byBzdWNjZXNzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDog
ewotICAgICAgaGFuZGxlX3VudXN1YWw6Ci0gICAgICAgIGlmICh0YWcgPT0gMCB8fAotICAgICAg
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRh
Z1dpcmVUeXBlKHRhZykgPT0KLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9FTkRfR1JPVVApIHsKLSAgICAgICAgICBnb3Rv
IHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXQ6OlNraXBGaWVsZCgKLSAgICAgICAgICAgICAgaW5wdXQsIHRhZywg
bXV0YWJsZV91bmtub3duX2ZpZWxkcygpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAg
IH0KLSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1
Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSkKLSAg
cmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFy
c2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdl
KQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgRGVzY3JpcHRvclByb3Rv
X0V4dGVuc2lvblJhbmdlOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5E
ZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UpCi0gIC8vIG9wdGlvbmFsIGludDMyIHN0YXJ0
ID0gMTsKLSAgaWYgKGhhc19zdGFydCgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzIoMSwgdGhpcy0+c3RhcnQoKSwgb3V0cHV0
KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGludDMyIGVuZCA9IDI7Ci0gIGlmIChoYXNfZW5kKCkp
IHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3Jp
dGVJbnQzMigyLCB0aGlzLT5lbmQoKSwgb3V0cHV0KTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxf
bWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHMoCi0gICAgICAg
IHVua25vd25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRl
bnNpb25SYW5nZSkKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogRGVzY3JpcHRvclBy
b3RvX0V4dGVuc2lvblJhbmdlOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UpCi0gIC8vIG9wdGlvbmFsIGludDMyIHN0
YXJ0ID0gMTsKLSAgaWYgKGhhc19zdGFydCgpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzJUb0FycmF5KDEsIHRo
aXMtPnN0YXJ0KCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBpbnQzMiBlbmQgPSAy
OwotICBpZiAoaGFzX2VuZCgpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzJUb0FycmF5KDIsIHRoaXMtPmVuZCgp
LCB0YXJnZXQpOwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3du
X2ZpZWxkcygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkc1RvQXJyYXkoCi0gICAgICAgIHVua25v
d25fZmllbGRzKCksIHRhcmdldCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5F
eHRlbnNpb25SYW5nZSkKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IERlc2NyaXB0b3JQcm90
b19FeHRlbnNpb25SYW5nZTo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0
b3JQcm90by5FeHRlbnNpb25SYW5nZSkKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIGlmIChf
aGFzX2JpdHNfWzAgLyAzMl0gJiAzdSkgewotICAgIC8vIG9wdGlvbmFsIGludDMyIHN0YXJ0ID0g
MTsKLSAgICBpZiAoaGFzX3N0YXJ0KCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpJbnQzMlNp
emUoCi0gICAgICAgICAgdGhpcy0+c3RhcnQoKSk7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwg
aW50MzIgZW5kID0gMjsKLSAgICBpZiAoaGFzX2VuZCgpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9
IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6SW50MzJTaXplKAotICAgICAgICAgIHRoaXMtPmVuZCgpKTsKLSAgICB9Ci0KLSAgfQotICBp
ZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0b3Rh
bF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
OjpDb21wdXRlVW5rbm93bkZpZWxkc1NpemUoCi0gICAgICAgIHVua25vd25fZmllbGRzKCkpOwot
ICB9Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRf
c2l6ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQo
KTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgRGVzY3JpcHRvclByb3RvX0V4dGVu
c2lvblJhbmdlOjpNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBm
cm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJv
bV9zdGFydDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlKQot
ICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwo
X19MSU5FX18pOwotICBjb25zdCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UqIHNvdXJj
ZSA9IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dl
bmVyYXRlZDxjb25zdCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U+KAotICAgICAgICAg
ICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYu
RGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlKQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2Ugewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0
X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSkK
LSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBEZXNjcmlwdG9yUHJvdG9f
RXh0ZW5zaW9uUmFuZ2U6Ok1lcmdlRnJvbShjb25zdCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9u
UmFuZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZp
Y19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5z
aW9uUmFuZ2UpCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVy
Z2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGlmIChmcm9tLl9oYXNfYml0c19bMCAvIDMyXSAmICgw
eGZmdSA8PCAoMCAlIDMyKSkpIHsKLSAgICBpZiAoZnJvbS5oYXNfc3RhcnQoKSkgewotICAgICAg
c2V0X3N0YXJ0KGZyb20uc3RhcnQoKSk7Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc19lbmQoKSkg
ewotICAgICAgc2V0X2VuZChmcm9tLmVuZCgpKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyb20uX2lu
dGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vu
a25vd25fZmllbGRzKCktPk1lcmdlRnJvbShmcm9tLnVua25vd25fZmllbGRzKCkpOwotICB9Ci19
Ci0KLXZvaWQgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjpDb3B5RnJvbShjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRlc2Ny
aXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsK
LSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIERlc2NyaXB0b3JQcm90
b19FeHRlbnNpb25SYW5nZTo6Q29weUZyb20oY29uc3QgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lv
blJhbmdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lm
aWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5z
aW9uUmFuZ2UpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1l
cmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U6
OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGVz
Y3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjpTd2FwKERlc2NyaXB0b3JQcm90b19FeHRlbnNp
b25SYW5nZSogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJu
YWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjpJ
bnRlcm5hbFN3YXAoRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKiBvdGhlcikgewotICBz
dGQ6OnN3YXAoc3RhcnRfLCBvdGhlci0+c3RhcnRfKTsKLSAgc3RkOjpzd2FwKGVuZF8sIG90aGVy
LT5lbmRfKTsKLSAgc3RkOjpzd2FwKF9oYXNfYml0c19bMF0sIG90aGVyLT5faGFzX2JpdHNfWzBd
KTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRh
Xyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19
Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lv
blJhbmdlOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRv
cnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1l
dGFkYXRhLmRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2VfZGVzY3Jp
cHRvcl87Ci0gIG1ldGFkYXRhLnJlZmxlY3Rpb24gPSBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9u
UmFuZ2VfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3Qg
aW50IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjprU3RhcnRGaWVsZE51bWJlcjsKLWNv
bnN0IGludCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6a0VuZEZpZWxkTnVtYmVyOwot
I2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotCi1EZXNj
cmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6RGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uo
KQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFf
KE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Y29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdl
KQotfQotCi12b2lkIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpJbml0QXNEZWZhdWx0
SW5zdGFuY2UoKSB7Ci19Ci0KLURlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpEZXNjcmlw
dG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZShjb25zdCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5n
ZSYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJu
YWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5w
cm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSkKLX0KLQotdm9pZCBEZXNjcmlw
dG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6U2hhcmVkQ3RvcigpIHsKLSAgX2NhY2hlZF9zaXplXyA9
IDA7Ci0gIHN0YXJ0XyA9IDA7Ci0gIGVuZF8gPSAwOwotICA6Om1lbXNldChfaGFzX2JpdHNfLCAw
LCBzaXplb2YoX2hhc19iaXRzXykpOwotfQotCi1EZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5n
ZTo6fkRlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKCkgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJl
c2VydmVkUmFuZ2UpCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBEZXNjcmlwdG9yUHJvdG9f
UmVzZXJ2ZWRSYW5nZTo6U2hhcmVkRHRvcigpIHsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0
YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpT
ZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9D
T05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U6OmRlc2NyaXB0b3IoKSB7Ci0g
IHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gRGVzY3JpcHRvclBy
b3RvX1Jlc2VydmVkUmFuZ2VfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IERlc2NyaXB0b3JQcm90
b19SZXNlcnZlZFJhbmdlJiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6ZGVmYXVsdF9p
bnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0Fk
ZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgcmV0dXJu
ICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uq
IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7
Ci0KLURlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2
ZWRSYW5nZTo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0g
IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKiBuID0gbmV3IERlc2NyaXB0b3JQcm90b19S
ZXNlcnZlZFJhbmdlOwotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24obik7
Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFu
Z2U6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJf
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlKQotI2lm
IGRlZmluZWQoX19jbGFuZ19fKQotI2RlZmluZSBaUl9IRUxQRVJfKGYpIFwKLSAgX1ByYWdtYSgi
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoIikgXAotICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgXCItV2ludmFsaWQtb2Zmc2V0b2ZcIiIpIFwKLSAgX19idWlsdGluX29mZnNldG9mKERl
c2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlLCBmKSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdu
b3N0aWMgcG9wIikKLSNlbHNlCi0jZGVmaW5lIFpSX0hFTFBFUl8oZikgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oXAotICAmcmVpbnRlcnByZXRfY2FzdDxEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRS
YW5nZSo+KDE2KS0+ZikKLSNlbmRpZgotCi0jZGVmaW5lIFpSXyhmaXJzdCwgbGFzdCkgZG8ge1wK
LSAgOjptZW1zZXQoJmZpcnN0LCAwLFwKLSAgICAgICAgICAgWlJfSEVMUEVSXyhsYXN0KSAtIFpS
X0hFTFBFUl8oZmlyc3QpICsgc2l6ZW9mKGxhc3QpKTtcCi19IHdoaWxlICgwKQotCi0gIFpSXyhz
dGFydF8sIGVuZF8pOwotCi0jdW5kZWYgWlJfSEVMUEVSXwotI3VuZGVmIFpSXwotCi0gIDo6bWVt
c2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci0gIGlmIChfaW50ZXJuYWxf
bWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93bl9m
aWVsZHMoKS0+Q2xlYXIoKTsKLSAgfQotfQotCi1ib29sIERlc2NyaXB0b3JQcm90b19SZXNlcnZl
ZFJhbmdlOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJ
T04pIGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0g
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2
ZWRSYW5nZSkKLSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAg
IHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsK
LSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCBpbnQzMiBzdGFy
dCA9IDE7Ci0gICAgICBjYXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA4KSB7Ci0gICAgICAg
ICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVh
ZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMy
LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9JTlQz
Mj4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmc3RhcnRfKSkpOwotICAgICAgICAgIHNldF9o
YXNfc3RhcnQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVz
dWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDE2KSkgZ290byBw
YXJzZV9lbmQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBp
bnQzMiBlbmQgPSAyOwotICAgICAgY2FzZSAyOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTYpIHsK
LSAgICAgICAgIHBhcnNlX2VuZDoKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPAotICAgICAgICAgICAgICAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0lOVDMyPigKLSAgICAgICAgICAgICAgICAgaW5wdXQs
ICZlbmRfKSkpOwotICAgICAgICAgIHNldF9oYXNfZW5kKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5w
dXQtPkV4cGVjdEF0RW5kKCkpIGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0KLSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAgICBpZiAo
dGFnID09IDAgfHwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQ
KSB7Ci0gICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0gICAgICAg
ICAgICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8u
UmVzZXJ2ZWRSYW5nZSkKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclBy
b3RvLlJlc2VydmVkUmFuZ2UpCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9p
ZCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpn
b29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UpCi0gIC8vIG9wdGlv
bmFsIGludDMyIHN0YXJ0ID0gMTsKLSAgaWYgKGhhc19zdGFydCgpKSB7Ci0gICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzIoMSwgdGhpcy0+
c3RhcnQoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGludDMyIGVuZCA9IDI7Ci0g
IGlmIChoYXNfZW5kKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6V3JpdGVJbnQzMigyLCB0aGlzLT5lbmQoKSwgb3V0cHV0KTsKLSAgfQotCi0g
IGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25G
aWVsZHMoCi0gICAgICAgIHVua25vd25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkRlc2Ny
aXB0b3JQcm90by5SZXNlcnZlZFJhbmdlKQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4
KiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVz
VG9BcnJheSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpn
b29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UpCi0gIC8vIG9wdGlv
bmFsIGludDMyIHN0YXJ0ID0gMTsKLSAgaWYgKGhhc19zdGFydCgpKSB7Ci0gICAgdGFyZ2V0ID0g
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzJU
b0FycmF5KDEsIHRoaXMtPnN0YXJ0KCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBp
bnQzMiBlbmQgPSAyOwotICBpZiAoaGFzX2VuZCgpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzJUb0FycmF5KDIs
IHRoaXMtPmVuZCgpLCB0YXJnZXQpOwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8u
aGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkc1RvQXJyYXkoCi0g
ICAgICAgIHVua25vd25fZmllbGRzKCksIHRhcmdldCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkRlc2Ny
aXB0b3JQcm90by5SZXNlcnZlZFJhbmdlKQotICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQgRGVz
Y3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U6OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSkKLSAgaW50IHRvdGFsX3NpemUgPSAwOwot
Ci0gIGlmIChfaGFzX2JpdHNfWzAgLyAzMl0gJiAzdSkgewotICAgIC8vIG9wdGlvbmFsIGludDMy
IHN0YXJ0ID0gMTsKLSAgICBpZiAoaGFzX3N0YXJ0KCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0g
MSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpJbnQzMlNpemUoCi0gICAgICAgICAgdGhpcy0+c3RhcnQoKSk7Ci0gICAgfQotCi0gICAgLy8g
b3B0aW9uYWwgaW50MzIgZW5kID0gMjsKLSAgICBpZiAoaGFzX2VuZCgpKSB7Ci0gICAgICB0b3Rh
bF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6SW50MzJTaXplKAotICAgICAgICAgIHRoaXMtPmVuZCgpKTsKLSAgICB9Ci0K
LSAgfQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsK
LSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0OjpDb21wdXRlVW5rbm93bkZpZWxkc1NpemUoCi0gICAgICAgIHVua25vd25fZmll
bGRzKCkpOwotICB9Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0g
IF9jYWNoZWRfc2l6ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dS
SVRFU19FTkQoKTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgRGVzY3JpcHRvclBy
b3RvX1Jlc2VydmVkUmFuZ2U6Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9t
ZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRS
YW5nZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZy
b21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uq
IHNvdXJjZSA9IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nh
c3RUb0dlbmVyYXRlZDxjb25zdCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZT4oCi0gICAg
ICAgICAgJmZyb20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90
b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSkKLSAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNl
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21f
Y2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5n
ZSkKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBEZXNjcmlwdG9yUHJv
dG9fUmVzZXJ2ZWRSYW5nZTo6TWVyZ2VGcm9tKGNvbnN0IERlc2NyaXB0b3JQcm90b19SZXNlcnZl
ZFJhbmdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lm
aWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2Vy
dmVkUmFuZ2UpCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVy
Z2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGlmIChmcm9tLl9oYXNfYml0c19bMCAvIDMyXSAmICgw
eGZmdSA8PCAoMCAlIDMyKSkpIHsKLSAgICBpZiAoZnJvbS5oYXNfc3RhcnQoKSkgewotICAgICAg
c2V0X3N0YXJ0KGZyb20uc3RhcnQoKSk7Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc19lbmQoKSkg
ewotICAgICAgc2V0X2VuZChmcm9tLmVuZCgpKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyb20uX2lu
dGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vu
a25vd25fZmllbGRzKCktPk1lcmdlRnJvbShmcm9tLnVua25vd25fZmllbGRzKCkpOwotICB9Ci19
Ci0KLXZvaWQgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U6OkNvcHlGcm9tKGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvclByb3RvLlJlc2VydmVkUmFuZ2UpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0g
IENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBEZXNjcmlwdG9yUHJvdG9f
UmVzZXJ2ZWRSYW5nZTo6Q29weUZyb20oY29uc3QgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFu
Z2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19j
b3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJh
bmdlKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZy
b20oZnJvbSk7Ci19Ci0KLWJvb2wgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U6OklzSW5p
dGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGVzY3JpcHRv
clByb3RvX1Jlc2VydmVkUmFuZ2U6OlN3YXAoRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uq
IG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIEludGVybmFsU3dhcChv
dGhlcik7Ci19Ci12b2lkIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpJbnRlcm5hbFN3
YXAoRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UqIG90aGVyKSB7Ci0gIHN0ZDo6c3dhcChz
dGFydF8sIG90aGVyLT5zdGFydF8pOwotICBzdGQ6OnN3YXAoZW5kXywgb3RoZXItPmVuZF8pOwot
ICBzdGQ6OnN3YXAoX2hhc19iaXRzX1swXSwgb3RoZXItPl9oYXNfYml0c19bMF0pOwotICBfaW50
ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3Rk
Ojpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90aGVyLT5fY2FjaGVkX3NpemVfKTsKLX0KLQotOjpnb29n
bGU6OnByb3RvYnVmOjpNZXRhZGF0YSBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6R2V0
TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIG1ldGFkYXRhOwotICBtZXRhZGF0YS5kZXNj
cmlwdG9yID0gRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2VfZGVzY3JpcHRvcl87Ci0gIG1l
dGFkYXRhLnJlZmxlY3Rpb24gPSBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZV9yZWZsZWN0
aW9uXzsKLSAgcmV0dXJuIG1ldGFkYXRhOwotfQotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmICFk
ZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgRGVzY3JpcHRv
clByb3RvOjprTmFtZUZpZWxkTnVtYmVyOwotY29uc3QgaW50IERlc2NyaXB0b3JQcm90bzo6a0Zp
ZWxkRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRGVzY3JpcHRvclByb3RvOjprRXh0ZW5zaW9uRmll
bGROdW1iZXI7Ci1jb25zdCBpbnQgRGVzY3JpcHRvclByb3RvOjprTmVzdGVkVHlwZUZpZWxkTnVt
YmVyOwotY29uc3QgaW50IERlc2NyaXB0b3JQcm90bzo6a0VudW1UeXBlRmllbGROdW1iZXI7Ci1j
b25zdCBpbnQgRGVzY3JpcHRvclByb3RvOjprRXh0ZW5zaW9uUmFuZ2VGaWVsZE51bWJlcjsKLWNv
bnN0IGludCBEZXNjcmlwdG9yUHJvdG86OmtPbmVvZkRlY2xGaWVsZE51bWJlcjsKLWNvbnN0IGlu
dCBEZXNjcmlwdG9yUHJvdG86OmtPcHRpb25zRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRGVzY3Jp
cHRvclByb3RvOjprUmVzZXJ2ZWRSYW5nZUZpZWxkTnVtYmVyOwotY29uc3QgaW50IERlc2NyaXB0
b3JQcm90bzo6a1Jlc2VydmVkTmFtZUZpZWxkTnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChf
TVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotCi1EZXNjcmlwdG9yUHJvdG86OkRlc2NyaXB0
b3JQcm90bygpCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9t
ZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChjb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvKQotfQot
Ci12b2lkIERlc2NyaXB0b3JQcm90bzo6SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotICBvcHRp
b25zXyA9IGNvbnN0X2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZU9wdGlvbnMqPigm
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsK
LX0KLQotRGVzY3JpcHRvclByb3RvOjpEZXNjcmlwdG9yUHJvdG8oY29uc3QgRGVzY3JpcHRvclBy
b3RvJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRl
cm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9t
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xl
LnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bykKLX0KLQotdm9pZCBEZXNjcmlwdG9yUHJvdG86OlNo
YXJlZEN0b3IoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwotICBuYW1lXy5VbnNhZmVTZXREZWZhdWx0KCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSk7Ci0gIG9wdGlvbnNfID0gTlVMTDsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9m
KF9oYXNfYml0c18pKTsKLX0KLQotRGVzY3JpcHRvclByb3RvOjp+RGVzY3JpcHRvclByb3RvKCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9i
dWYuRGVzY3JpcHRvclByb3RvKQotICBTaGFyZWREdG9yKCk7Ci19Ci0KLXZvaWQgRGVzY3JpcHRv
clByb3RvOjpTaGFyZWREdG9yKCkgewotICBuYW1lXy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBp
ZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNlXykgewotICAgIGRlbGV0ZSBvcHRpb25zXzsKLSAg
fQotfQotCi12b2lkIERlc2NyaXB0b3JQcm90bzo6U2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29u
c3QgewotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVk
X3NpemVfID0gc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci19
Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIERlc2NyaXB0b3JQcm90bzo6
ZGVzY3JpcHRvcigpIHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIHJl
dHVybiBEZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IERlc2NyaXB0b3JQ
cm90byYgRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3RhbmNlKCkgewotICBpZiAoZGVmYXVs
dF9pbnN0YW5jZV8gPT0gTlVMTCkgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8y
ZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICByZXR1cm4gKmRlZmF1bHRfaW5zdGFuY2VfOwotfQot
Ci1EZXNjcmlwdG9yUHJvdG8qIERlc2NyaXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBO
VUxMOwotCi1EZXNjcmlwdG9yUHJvdG8qIERlc2NyaXB0b3JQcm90bzo6TmV3KDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIERlc2NyaXB0b3JQcm90byogbiA9IG5l
dyBEZXNjcmlwdG9yUHJvdG87Ci0gIGlmIChhcmVuYSAhPSBOVUxMKSB7Ci0gICAgYXJlbmEtPk93
bihuKTsKLSAgfQotICByZXR1cm4gbjsKLX0KLQotdm9pZCBEZXNjcmlwdG9yUHJvdG86OkNsZWFy
KCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29v
Z2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bykKLSAgaWYgKF9oYXNfYml0c19bMCAvIDMyXSAm
IDEyOXUpIHsKLSAgICBpZiAoaGFzX25hbWUoKSkgewotICAgICAgbmFtZV8uQ2xlYXJUb0VtcHR5
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotICAgIH0KLSAgICBpZiAoaGFzX29wdGlvbnMoKSkgewotICAgICAgaWYg
KG9wdGlvbnNfICE9IE5VTEwpIG9wdGlvbnNfLT46Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VP
cHRpb25zOjpDbGVhcigpOwotICAgIH0KLSAgfQotICBmaWVsZF8uQ2xlYXIoKTsKLSAgZXh0ZW5z
aW9uXy5DbGVhcigpOwotICBuZXN0ZWRfdHlwZV8uQ2xlYXIoKTsKLSAgZW51bV90eXBlXy5DbGVh
cigpOwotICBleHRlbnNpb25fcmFuZ2VfLkNsZWFyKCk7Ci0gIG9uZW9mX2RlY2xfLkNsZWFyKCk7
Ci0gIHJlc2VydmVkX3JhbmdlXy5DbGVhcigpOwotICByZXNlcnZlZF9uYW1lXy5DbGVhcigpOwot
ICA6Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXplb2YoX2hhc19iaXRzXykpOwotICBpZiAoX2lu
dGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vu
a25vd25fZmllbGRzKCktPkNsZWFyKCk7Ci0gIH0KLX0KLQotYm9vbCBEZXNjcmlwdG9yUHJvdG86
Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlv
OjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQUkVTU0lPTikgaWYg
KCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1cmUKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
cGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bykKLSAgZm9yICg7Oykg
ewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9
IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAg
aWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0
YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gICAgICBjYXNlIDE6
IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxMCkgewotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAg
ICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9uYW1lKCkpKTsKLSAgICAgICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVs
ZCgKLSAgICAgICAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgo
KSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6
OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ubmFt
ZSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMTgpKSBnb3RvIHBhcnNlX2Zp
ZWxkOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2ds
ZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byBmaWVsZCA9IDI7Ci0gICAgICBjYXNlIDI6
IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxOCkgewotICAgICAgICAgcGFyc2VfZmllbGQ6Ci0gICAg
ICAgICAgRE9fKGlucHV0LT5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBh
cnNlX2xvb3BfZmllbGQ6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgo
Ci0gICAgICAgICAgICAgICAgaW5wdXQsIGFkZF9maWVsZCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aW5wdXQtPkV4cGVjdFRhZygxOCkpIGdvdG8gcGFyc2VfbG9vcF9maWVsZDsKLSAgICAgICAgaWYg
KGlucHV0LT5FeHBlY3RUYWcoMjYpKSBnb3RvIHBhcnNlX2xvb3BfbmVzdGVkX3R5cGU7Ci0gICAg
ICAgIGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBicmVh
azsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9yUHJvdG8gbmVzdGVkX3R5cGUgPSAzOwotICAgICAgY2FzZSAzOiB7Ci0gICAgICAgIGlmICh0
YWcgPT0gMjYpIHsKLSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRo
KCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9uZXN0ZWRfdHlwZToKLSAgICAgICAgICBET18oOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlTm9W
aXJ0dWFsTm9SZWN1cnNpb25EZXB0aCgKLSAgICAgICAgICAgICAgICBpbnB1dCwgYWRkX25lc3Rl
ZF90eXBlKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVz
dWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDI2KSkgZ290byBw
YXJzZV9sb29wX25lc3RlZF90eXBlOwotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygzNCkp
IGdvdG8gcGFyc2VfbG9vcF9lbnVtX3R5cGU7Ci0gICAgICAgIGlucHV0LT5VbnNhZmVEZWNyZW1l
bnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8g
cmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvIGVudW1fdHlwZSA9
IDQ7Ci0gICAgICBjYXNlIDQ6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAzNCkgewotICAgICAgICAg
IERPXyhpbnB1dC0+SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7Ci0gICAgICAgICBwYXJzZV9s
b29wX2VudW1fdHlwZToKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0aCgK
LSAgICAgICAgICAgICAgICBpbnB1dCwgYWRkX2VudW1fdHlwZSgpKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoaW5wdXQtPkV4cGVjdFRhZygzNCkpIGdvdG8gcGFyc2VfbG9vcF9lbnVtX3R5cGU7Ci0gICAg
ICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDQyKSkgZ290byBwYXJzZV9sb29wX2V4dGVuc2lvbl9y
YW5nZTsKLSAgICAgICAgaW5wdXQtPlVuc2FmZURlY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3Rv
YnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSBleHRlbnNpb25fcmFuZ2UgPSA1Owot
ICAgICAgY2FzZSA1OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNDIpIHsKLSAgICAgICAgICBET18o
aW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9l
eHRlbnNpb25fcmFuZ2U6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgo
Ci0gICAgICAgICAgICAgICAgaW5wdXQsIGFkZF9leHRlbnNpb25fcmFuZ2UoKSkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoNDIpKSBnb3RvIHBhcnNlX2xvb3BfZXh0ZW5zaW9u
X3JhbmdlOwotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg1MCkpIGdvdG8gcGFyc2VfbG9v
cF9leHRlbnNpb247Ci0gICAgICAgIGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0
aCgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2ds
ZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90byBleHRlbnNpb24gPSA2OwotICAgICAgY2Fz
ZSA2OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNTApIHsKLSAgICAgICAgICBET18oaW5wdXQtPklu
Y3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9leHRlbnNpb246
Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoCi0gICAgICAgICAgICAg
ICAgaW5wdXQsIGFkZF9leHRlbnNpb24oKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBl
Y3RUYWcoNTApKSBnb3RvIHBhcnNlX2xvb3BfZXh0ZW5zaW9uOwotICAgICAgICBpbnB1dC0+VW5z
YWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RU
YWcoNTgpKSBnb3RvIHBhcnNlX29wdGlvbnM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g
ICAgICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zIG9wdGlvbnMg
PSA3OwotICAgICAgY2FzZSA3OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNTgpIHsKLSAgICAgICAg
IHBhcnNlX29wdGlvbnM6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbCgKLSAgICAgICAgICAgICAg
IGlucHV0LCBtdXRhYmxlX29wdGlvbnMoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBl
Y3RUYWcoNjYpKSBnb3RvIHBhcnNlX29uZW9mX2RlY2w7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotCi0gICAgICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclBy
b3RvIG9uZW9mX2RlY2wgPSA4OwotICAgICAgY2FzZSA4OiB7Ci0gICAgICAgIGlmICh0YWcgPT0g
NjYpIHsKLSAgICAgICAgIHBhcnNlX29uZW9mX2RlY2w6Ci0gICAgICAgICAgRE9fKGlucHV0LT5J
bmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBhcnNlX2xvb3Bfb25lb2ZfZGVj
bDoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0aCgKLSAgICAgICAgICAg
ICAgICBpbnB1dCwgYWRkX29uZW9mX2RlY2woKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5F
eHBlY3RUYWcoNjYpKSBnb3RvIHBhcnNlX2xvb3Bfb25lb2ZfZGVjbDsKLSAgICAgICAgaWYgKGlu
cHV0LT5FeHBlY3RUYWcoNzQpKSBnb3RvIHBhcnNlX2xvb3BfcmVzZXJ2ZWRfcmFuZ2U7Ci0gICAg
ICAgIGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBicmVh
azsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSByZXNlcnZlZF9yYW5nZSA9IDk7Ci0gICAgICBjYXNlIDk6
IHsKLSAgICAgICAgaWYgKHRhZyA9PSA3NCkgewotICAgICAgICAgIERPXyhpbnB1dC0+SW5jcmVt
ZW50UmVjdXJzaW9uRGVwdGgoKSk7Ci0gICAgICAgICBwYXJzZV9sb29wX3Jlc2VydmVkX3Jhbmdl
OgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6UmVhZE1lc3NhZ2VOb1ZpcnR1YWxOb1JlY3Vyc2lvbkRlcHRoKAotICAgICAgICAgICAg
ICAgIGlucHV0LCBhZGRfcmVzZXJ2ZWRfcmFuZ2UoKSkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0
LT5FeHBlY3RUYWcoNzQpKSBnb3RvIHBhcnNlX2xvb3BfcmVzZXJ2ZWRfcmFuZ2U7Ci0gICAgICAg
IGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBpZiAoaW5w
dXQtPkV4cGVjdFRhZyg4MikpIGdvdG8gcGFyc2VfcmVzZXJ2ZWRfbmFtZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlcGVhdGVkIHN0cmluZyByZXNlcnZlZF9uYW1lID0g
MTA7Ci0gICAgICBjYXNlIDEwOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gODIpIHsKLSAgICAgICAg
IHBhcnNlX3Jlc2VydmVkX25hbWU6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlu
cHV0LCB0aGlzLT5hZGRfcmVzZXJ2ZWRfbmFtZSgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQo
Ci0gICAgICAgICAgICB0aGlzLT5yZXNlcnZlZF9uYW1lKHRoaXMtPnJlc2VydmVkX25hbWVfc2l6
ZSgpIC0gMSkuZGF0YSgpLAotICAgICAgICAgICAgdGhpcy0+cmVzZXJ2ZWRfbmFtZSh0aGlzLT5y
ZXNlcnZlZF9uYW1lX3NpemUoKSAtIDEpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6UEFSU0UsCi0gICAgICAgICAgICAiZ29v
Z2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXNlcnZlZF9uYW1lIik7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg4MikpIGdvdG8gcGFyc2VfcmVzZXJ2ZWRfbmFtZTsKLSAg
ICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoK
LSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAg
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVU
WVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAg
ICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2tpcEZp
ZWxkKAotICAgICAgICAgICAgICBpbnB1dCwgdGFnLCBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuRGVz
Y3JpcHRvclByb3RvKQotICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChwYXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJv
dG8pCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9pZCBEZXNjcmlwdG9yUHJv
dG86OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlv
OjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90
bykKLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBpZiAoaGFzX25hbWUoKSkgewot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhT
dHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgp
Lmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ubmFt
ZSIpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpX
cml0ZVN0cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDEsIHRoaXMtPm5hbWUoKSwgb3V0cHV0KTsK
LSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJv
dG8gZmllbGQgPSAyOwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMtPmZpZWxk
X3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VNYXliZVRvQXJyYXkoCi0gICAgICAyLCB0aGlz
LT5maWVsZChpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9i
dWYuRGVzY3JpcHRvclByb3RvIG5lc3RlZF90eXBlID0gMzsKLSAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDAsIG4gPSB0aGlzLT5uZXN0ZWRfdHlwZV9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVNZXNzYWdl
TWF5YmVUb0FycmF5KAotICAgICAgMywgdGhpcy0+bmVzdGVkX3R5cGUoaSksIG91dHB1dCk7Ci0g
IH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8g
ZW51bV90eXBlID0gNDsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5lbnVt
X3R5cGVfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDQs
IHRoaXMtPmVudW1fdHlwZShpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29n
bGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlIGV4dGVuc2lvbl9yYW5n
ZSA9IDU7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+ZXh0ZW5zaW9uX3Jh
bmdlX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VNYXliZVRvQXJyYXkoCi0gICAgICA1LCB0
aGlzLT5leHRlbnNpb25fcmFuZ2UoaSksIG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAu
Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvIGV4dGVuc2lvbiA9IDY7Ci0gIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+ZXh0ZW5zaW9uX3NpemUoKTsgaSA8IG47
IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpXcml0ZU1lc3NhZ2VNYXliZVRvQXJyYXkoCi0gICAgICA2LCB0aGlzLT5leHRlbnNpb24oaSks
IG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VP
cHRpb25zIG9wdGlvbnMgPSA3OwotICBpZiAoaGFzX29wdGlvbnMoKSkgewotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VNYXliZVRv
QXJyYXkoCi0gICAgICA3LCAqdGhpcy0+b3B0aW9uc18sIG91dHB1dCk7Ci0gIH0KLQotICAvLyBy
ZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvIG9uZW9mX2RlY2wg
PSA4OwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMtPm9uZW9mX2RlY2xfc2l6
ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDgsIHRoaXMtPm9u
ZW9mX2RlY2woaSksIG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3Rv
YnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlIHJlc2VydmVkX3JhbmdlID0gOTsKLSAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5yZXNlcnZlZF9yYW5nZV9zaXplKCk7
IGkgPCBuOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVUb0FycmF5KAotICAgICAgOSwgdGhpcy0+cmVzZXJ2
ZWRfcmFuZ2UoaSksIG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCBzdHJpbmcgcmVzZXJ2
ZWRfbmFtZSA9IDEwOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPnJlc2VydmVkX25hbWVf
c2l6ZSgpOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPnJlc2VydmVkX25h
bWUoaSkuZGF0YSgpLCB0aGlzLT5yZXNlcnZlZF9uYW1lKGkpLmxlbmd0aCgpLAotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAg
Imdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucmVzZXJ2ZWRfbmFtZSIpOwotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZygK
LSAgICAgIDEwLCB0aGlzLT5yZXNlcnZlZF9uYW1lKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgaWYg
KF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxk
cygKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwgb3V0cHV0KTsKLSAgfQotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
clByb3RvKQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBEZXNjcmlwdG9yUHJvdG86
OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVm
Ojp1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChz
ZXJpYWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bykK
LSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBpZiAoaGFzX25hbWUoKSkgewotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJp
bmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgpLmxl
bmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6
U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ubmFtZSIp
OwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAxLCB0aGlzLT5uYW1lKCks
IHRhcmdldCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVz
Y3JpcHRvclByb3RvIGZpZWxkID0gMjsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0
aGlzLT5maWVsZF9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VO
b1ZpcnR1YWxUb0FycmF5KAotICAgICAgICAyLCB0aGlzLT5maWVsZChpKSwgdGFyZ2V0KTsKLSAg
fQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvIG5lc3Rl
ZF90eXBlID0gMzsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5uZXN0ZWRf
dHlwZV9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1
YWxUb0FycmF5KAotICAgICAgICAzLCB0aGlzLT5uZXN0ZWRfdHlwZShpKSwgdGFyZ2V0KTsKLSAg
fQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90byBl
bnVtX3R5cGUgPSA0OwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMtPmVudW1f
dHlwZV9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1
YWxUb0FycmF5KAotICAgICAgICA0LCB0aGlzLT5lbnVtX3R5cGUoaSksIHRhcmdldCk7Ci0gIH0K
LQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNp
b25SYW5nZSBleHRlbnNpb25fcmFuZ2UgPSA1OwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwg
biA9IHRoaXMtPmV4dGVuc2lvbl9yYW5nZV9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICB0YXJn
ZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAg
ICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAotICAgICAgICA1LCB0aGlzLT5leHRlbnNp
b25fcmFuZ2UoaSksIHRhcmdldCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3Rv
YnVmLkZpZWxkRGVzY3JpcHRvclByb3RvIGV4dGVuc2lvbiA9IDY7Ci0gIGZvciAodW5zaWduZWQg
aW50IGkgPSAwLCBuID0gdGhpcy0+ZXh0ZW5zaW9uX3NpemUoKTsgaSA8IG47IGkrKykgewotICAg
IHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoK
LSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDYsIHRoaXMtPmV4
dGVuc2lvbihpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9i
dWYuTWVzc2FnZU9wdGlvbnMgb3B0aW9ucyA9IDc7Ci0gIGlmIChoYXNfb3B0aW9ucygpKSB7Ci0g
ICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgNywgKnRoaXMt
Pm9wdGlvbnNfLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1
Zi5PbmVvZkRlc2NyaXB0b3JQcm90byBvbmVvZl9kZWNsID0gODsKLSAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDAsIG4gPSB0aGlzLT5vbmVvZl9kZWNsX3NpemUoKTsgaSA8IG47IGkrKykgewotICAg
IHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoK
LSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDgsIHRoaXMtPm9u
ZW9mX2RlY2woaSksIHRhcmdldCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3Rv
YnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlIHJlc2VydmVkX3JhbmdlID0gOTsKLSAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5yZXNlcnZlZF9yYW5nZV9zaXplKCk7
IGkgPCBuOyBpKyspIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAot
ICAgICAgICA5LCB0aGlzLT5yZXNlcnZlZF9yYW5nZShpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8v
IHJlcGVhdGVkIHN0cmluZyByZXNlcnZlZF9uYW1lID0gMTA7Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDwgdGhpcy0+cmVzZXJ2ZWRfbmFtZV9zaXplKCk7IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAot
ICAgICAgdGhpcy0+cmVzZXJ2ZWRfbmFtZShpKS5kYXRhKCksIHRoaXMtPnJlc2VydmVkX25hbWUo
aSkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5y
ZXNlcnZlZF9uYW1lIik7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVTdHJpbmdUb0FycmF5KDEwLCB0aGlzLT5y
ZXNlcnZlZF9uYW1lKGkpLCB0YXJnZXQpOwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0
YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkc1RvQXJyYXko
Ci0gICAgICAgIHVua25vd25fZmllbGRzKCksIHRhcmdldCk7Ci0gIH0KLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkRl
c2NyaXB0b3JQcm90bykKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IERlc2NyaXB0b3JQcm90
bzo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2Fn
ZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bykKLSAgaW50
IHRvdGFsX3NpemUgPSAwOwotCi0gIGlmIChfaGFzX2JpdHNfWzAgLyAzMl0gJiAxMjl1KSB7Ci0g
ICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAgIGlmIChoYXNfbmFtZSgpKSB7Ci0g
ICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgICB0aGlzLT5uYW1lKCkp
OwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlv
bnMgb3B0aW9ucyA9IDc7Ci0gICAgaWYgKGhhc19vcHRpb25zKCkpIHsKLSAgICAgIHRvdGFsX3Np
emUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgICAqdGhpcy0+b3B0aW9uc18p
OwotICAgIH0KLQotICB9Ci0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNj
cmlwdG9yUHJvdG8gZmllbGQgPSAyOwotICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5maWVsZF9z
aXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+ZmllbGRfc2l6ZSgpOyBpKyspIHsK
LSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAgIHRoaXMtPmZpZWxk
KGkpKTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlw
dG9yUHJvdG8gZXh0ZW5zaW9uID0gNjsKLSAgdG90YWxfc2l6ZSArPSAxICogdGhpcy0+ZXh0ZW5z
aW9uX3NpemUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT5leHRlbnNpb25fc2l6ZSgp
OyBpKyspIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAgIHRo
aXMtPmV4dGVuc2lvbihpKSk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVm
LkRlc2NyaXB0b3JQcm90byBuZXN0ZWRfdHlwZSA9IDM7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRo
aXMtPm5lc3RlZF90eXBlX3NpemUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT5uZXN0
ZWRfdHlwZV9zaXplKCk7IGkrKykgewotICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVh
bCgKLSAgICAgICAgdGhpcy0+bmVzdGVkX3R5cGUoaSkpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQg
Lmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvIGVudW1fdHlwZSA9IDQ7Ci0gIHRv
dGFsX3NpemUgKz0gMSAqIHRoaXMtPmVudW1fdHlwZV9zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgdGhpcy0+ZW51bV90eXBlX3NpemUoKTsgaSsrKSB7Ci0gICAgdG90YWxfc2l6ZSArPQot
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3Nh
Z2VTaXplTm9WaXJ0dWFsKAotICAgICAgICB0aGlzLT5lbnVtX3R5cGUoaSkpOwotICB9Ci0KLSAg
Ly8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFu
Z2UgZXh0ZW5zaW9uX3JhbmdlID0gNTsKLSAgdG90YWxfc2l6ZSArPSAxICogdGhpcy0+ZXh0ZW5z
aW9uX3JhbmdlX3NpemUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT5leHRlbnNpb25f
cmFuZ2Vfc2l6ZSgpOyBpKyspIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwo
Ci0gICAgICAgIHRoaXMtPmV4dGVuc2lvbl9yYW5nZShpKSk7Ci0gIH0KLQotICAvLyByZXBlYXRl
ZCAuZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvIG9uZW9mX2RlY2wgPSA4Owot
ICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5vbmVvZl9kZWNsX3NpemUoKTsKLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0aGlzLT5vbmVvZl9kZWNsX3NpemUoKTsgaSsrKSB7Ci0gICAgdG90YWxfc2l6
ZSArPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAgICAgICB0aGlzLT5vbmVvZl9kZWNsKGkpKTsKLSAg
fQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2Vy
dmVkUmFuZ2UgcmVzZXJ2ZWRfcmFuZ2UgPSA5OwotICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5y
ZXNlcnZlZF9yYW5nZV9zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+cmVzZXJ2
ZWRfcmFuZ2Vfc2l6ZSgpOyBpKyspIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1
YWwoCi0gICAgICAgIHRoaXMtPnJlc2VydmVkX3JhbmdlKGkpKTsKLSAgfQotCi0gIC8vIHJlcGVh
dGVkIHN0cmluZyByZXNlcnZlZF9uYW1lID0gMTA7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMt
PnJlc2VydmVkX25hbWVfc2l6ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPnJlc2Vy
dmVkX25hbWVfc2l6ZSgpOyBpKyspIHsKLSAgICB0b3RhbF9zaXplICs9IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgdGhpcy0+
cmVzZXJ2ZWRfbmFtZShpKSk7Ci0gIH0KLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZl
X3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpDb21wdXRlVW5rbm93bkZpZWxkc1NpemUo
Ci0gICAgICAgIHVua25vd25fZmllbGRzKCkpOwotICB9Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJF
TlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSB0b3RhbF9zaXplOwotICBHT09H
TEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19
Ci0KLXZvaWQgRGVzY3JpcHRvclByb3RvOjpNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJh
bGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvKQot
ICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwo
X19MSU5FX18pOwotICBjb25zdCBEZXNjcmlwdG9yUHJvdG8qIHNvdXJjZSA9IAotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25zdCBE
ZXNjcmlwdG9yUHJvdG8+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxM
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9t
X2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvKQotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwot
ICB9IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVy
Z2VfZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90bykKLSAg
ICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBEZXNjcmlwdG9yUHJvdG86Ok1l
cmdlRnJvbShjb25zdCBEZXNjcmlwdG9yUHJvdG8mIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9yUHJvdG8pCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0
aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGZpZWxkXy5NZXJnZUZyb20oZnJvbS5m
aWVsZF8pOwotICBleHRlbnNpb25fLk1lcmdlRnJvbShmcm9tLmV4dGVuc2lvbl8pOwotICBuZXN0
ZWRfdHlwZV8uTWVyZ2VGcm9tKGZyb20ubmVzdGVkX3R5cGVfKTsKLSAgZW51bV90eXBlXy5NZXJn
ZUZyb20oZnJvbS5lbnVtX3R5cGVfKTsKLSAgZXh0ZW5zaW9uX3JhbmdlXy5NZXJnZUZyb20oZnJv
bS5leHRlbnNpb25fcmFuZ2VfKTsKLSAgb25lb2ZfZGVjbF8uTWVyZ2VGcm9tKGZyb20ub25lb2Zf
ZGVjbF8pOwotICByZXNlcnZlZF9yYW5nZV8uTWVyZ2VGcm9tKGZyb20ucmVzZXJ2ZWRfcmFuZ2Vf
KTsKLSAgcmVzZXJ2ZWRfbmFtZV8uTWVyZ2VGcm9tKGZyb20ucmVzZXJ2ZWRfbmFtZV8pOwotICBp
ZiAoZnJvbS5faGFzX2JpdHNfWzAgLyAzMl0gJiAoMHhmZnUgPDwgKDAgJSAzMikpKSB7Ci0gICAg
aWYgKGZyb20uaGFzX25hbWUoKSkgewotICAgICAgc2V0X2hhc19uYW1lKCk7Ci0gICAgICBuYW1l
Xy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20ubmFtZV8pOwotICAgIH0KLSAgICBpZiAoZnJv
bS5oYXNfb3B0aW9ucygpKSB7Ci0gICAgICBtdXRhYmxlX29wdGlvbnMoKS0+Ojpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlT3B0aW9uczo6TWVyZ2VGcm9tKGZyb20ub3B0aW9ucygpKTsKLSAgICB9
Ci0gIH0KLSAgaWYgKGZyb20uX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRz
KCkpIHsKLSAgICBtdXRhYmxlX3Vua25vd25fZmllbGRzKCktPk1lcmdlRnJvbShmcm9tLnVua25v
d25fZmllbGRzKCkpOwotICB9Ci19Ci0KLXZvaWQgRGVzY3JpcHRvclByb3RvOjpDb3B5RnJvbShj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LkRlc2NyaXB0b3JQcm90bykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIo
KTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIERlc2NyaXB0b3JQcm90bzo6Q29weUZy
b20oY29uc3QgRGVzY3JpcHRvclByb3RvJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5EZXNj
cmlwdG9yUHJvdG8pCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0g
IE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBEZXNjcmlwdG9yUHJvdG86OklzSW5pdGlhbGl6
ZWQoKSBjb25zdCB7Ci0KLSAgaWYgKCE6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBbGxB
cmVJbml0aWFsaXplZCh0aGlzLT5maWVsZCgpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAoITo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFsbEFyZUluaXRpYWxpemVkKHRoaXMtPmV4dGVuc2lv
bigpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAoITo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkFsbEFyZUluaXRpYWxpemVkKHRoaXMtPm5lc3RlZF90eXBlKCkpKSByZXR1cm4gZmFsc2U7Ci0g
IGlmICghOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QWxsQXJlSW5pdGlhbGl6ZWQodGhp
cy0+ZW51bV90eXBlKCkpKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChoYXNfb3B0aW9ucygpKSB7Ci0g
ICAgaWYgKCF0aGlzLT5vcHRpb25zXy0+SXNJbml0aWFsaXplZCgpKSByZXR1cm4gZmFsc2U7Ci0g
IH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGVzY3JpcHRvclByb3RvOjpTd2FwKERlc2Ny
aXB0b3JQcm90byogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50
ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgRGVzY3JpcHRvclByb3RvOjpJbnRlcm5hbFN3YXAo
RGVzY3JpcHRvclByb3RvKiBvdGhlcikgewotICBuYW1lXy5Td2FwKCZvdGhlci0+bmFtZV8pOwot
ICBmaWVsZF8uVW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+ZmllbGRfKTsKLSAgZXh0ZW5zaW9uXy5V
bnNhZmVBcmVuYVN3YXAoJm90aGVyLT5leHRlbnNpb25fKTsKLSAgbmVzdGVkX3R5cGVfLlVuc2Fm
ZUFyZW5hU3dhcCgmb3RoZXItPm5lc3RlZF90eXBlXyk7Ci0gIGVudW1fdHlwZV8uVW5zYWZlQXJl
bmFTd2FwKCZvdGhlci0+ZW51bV90eXBlXyk7Ci0gIGV4dGVuc2lvbl9yYW5nZV8uVW5zYWZlQXJl
bmFTd2FwKCZvdGhlci0+ZXh0ZW5zaW9uX3JhbmdlXyk7Ci0gIG9uZW9mX2RlY2xfLlVuc2FmZUFy
ZW5hU3dhcCgmb3RoZXItPm9uZW9mX2RlY2xfKTsKLSAgc3RkOjpzd2FwKG9wdGlvbnNfLCBvdGhl
ci0+b3B0aW9uc18pOwotICByZXNlcnZlZF9yYW5nZV8uVW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+
cmVzZXJ2ZWRfcmFuZ2VfKTsKLSAgcmVzZXJ2ZWRfbmFtZV8uVW5zYWZlQXJlbmFTd2FwKCZvdGhl
ci0+cmVzZXJ2ZWRfbmFtZV8pOwotICBzdGQ6OnN3YXAoX2hhc19iaXRzX1swXSwgb3RoZXItPl9o
YXNfYml0c19bMF0pOwotICBfaW50ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90aGVyLT5faW50ZXJu
YWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90aGVyLT5fY2FjaGVk
X3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBEZXNjcmlwdG9yUHJv
dG86OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09u
Y2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRh
dGEuZGVzY3JpcHRvciA9IERlc2NyaXB0b3JQcm90b19kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEu
cmVmbGVjdGlvbiA9IERlc2NyaXB0b3JQcm90b19yZWZsZWN0aW9uXzsKLSAgcmV0dXJuIG1ldGFk
YXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0vLyBEZXNjcmlw
dG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UKLQotLy8gb3B0aW9uYWwgaW50MzIgc3RhcnQgPSAxOwot
Ym9vbCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U6Omhhc19zdGFydCgpIGNvbnN0IHsK
LSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMXUpICE9IDA7Ci19Ci12b2lkIERl
c2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6c2V0X2hhc19zdGFydCgpIHsKLSAgX2hhc19i
aXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0KLXZvaWQgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lv
blJhbmdlOjpjbGVhcl9oYXNfc3RhcnQoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAw
MDF1OwotfQotdm9pZCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U6OmNsZWFyX3N0YXJ0
KCkgewotICBzdGFydF8gPSAwOwotICBjbGVhcl9oYXNfc3RhcnQoKTsKLX0KLSA6Omdvb2dsZTo6
cHJvdG9idWY6OmludDMyIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6c3RhcnQoKSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnBy
b3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZS5zdGFydCkKLSAgcmV0dXJuIHN0
YXJ0XzsKLX0KLSB2b2lkIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6c2V0X3N0YXJ0
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpIHsKLSAgc2V0X2hhc19zdGFydCgpOwot
ICBzdGFydF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnN0YXJ0KQot
fQotCi0vLyBvcHRpb25hbCBpbnQzMiBlbmQgPSAyOwotYm9vbCBEZXNjcmlwdG9yUHJvdG9fRXh0
ZW5zaW9uUmFuZ2U6Omhhc19lbmQoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAm
IDB4MDAwMDAwMDJ1KSAhPSAwOwotfQotdm9pZCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFu
Z2U6OnNldF9oYXNfZW5kKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDJ1OwotfQot
dm9pZCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U6OmNsZWFyX2hhc19lbmQoKSB7Ci0g
IF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDJ1OwotfQotdm9pZCBEZXNjcmlwdG9yUHJvdG9f
RXh0ZW5zaW9uUmFuZ2U6OmNsZWFyX2VuZCgpIHsKLSAgZW5kXyA9IDA7Ci0gIGNsZWFyX2hhc19l
bmQoKTsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIERlc2NyaXB0b3JQcm90b19FeHRl
bnNpb25SYW5nZTo6ZW5kKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2Uu
ZW5kKQotICByZXR1cm4gZW5kXzsKLX0KLSB2b2lkIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25S
YW5nZTo6c2V0X2VuZCg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIHNldF9o
YXNfZW5kKCk7Ci0gIGVuZF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdl
LmVuZCkKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRS
YW5nZQotCi0vLyBvcHRpb25hbCBpbnQzMiBzdGFydCA9IDE7Ci1ib29sIERlc2NyaXB0b3JQcm90
b19SZXNlcnZlZFJhbmdlOjpoYXNfc3RhcnQoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRz
X1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQotdm9pZCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2
ZWRSYW5nZTo6c2V0X2hhc19zdGFydCgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAx
dTsKLX0KLXZvaWQgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U6OmNsZWFyX2hhc19zdGFy
dCgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMXU7Ci19Ci12b2lkIERlc2NyaXB0
b3JQcm90b19SZXNlcnZlZFJhbmdlOjpjbGVhcl9zdGFydCgpIHsKLSAgc3RhcnRfID0gMDsKLSAg
Y2xlYXJfaGFzX3N0YXJ0KCk7Ci19Ci0gOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBEZXNjcmlw
dG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6c3RhcnQoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5S
ZXNlcnZlZFJhbmdlLnN0YXJ0KQotICByZXR1cm4gc3RhcnRfOwotfQotIHZvaWQgRGVzY3JpcHRv
clByb3RvX1Jlc2VydmVkUmFuZ2U6OnNldF9zdGFydCg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMy
IHZhbHVlKSB7Ci0gIHNldF9oYXNfc3RhcnQoKTsKLSAgc3RhcnRfID0gdmFsdWU7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0
b3JQcm90by5SZXNlcnZlZFJhbmdlLnN0YXJ0KQotfQotCi0vLyBvcHRpb25hbCBpbnQzMiBlbmQg
PSAyOwotYm9vbCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6aGFzX2VuZCgpIGNvbnN0
IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMnUpICE9IDA7Ci19Ci12b2lk
IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpzZXRfaGFzX2VuZCgpIHsKLSAgX2hhc19i
aXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0KLXZvaWQgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVk
UmFuZ2U6OmNsZWFyX2hhc19lbmQoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDJ1
OwotfQotdm9pZCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6Y2xlYXJfZW5kKCkgewot
ICBlbmRfID0gMDsKLSAgY2xlYXJfaGFzX2VuZCgpOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50MzIgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U6OmVuZCgpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvclByb3RvLlJlc2VydmVkUmFuZ2UuZW5kKQotICByZXR1cm4gZW5kXzsKLX0KLSB2b2lkIERl
c2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpzZXRfZW5kKDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50MzIgdmFsdWUpIHsKLSAgc2V0X2hhc19lbmQoKTsKLSAgZW5kXyA9IHZhbHVlOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5lbmQpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRGVz
Y3JpcHRvclByb3RvCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLWJvb2wgRGVzY3Jp
cHRvclByb3RvOjpoYXNfbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYg
MHgwMDAwMDAwMXUpICE9IDA7Ci19Ci12b2lkIERlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19uYW1l
KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDF1OwotfQotdm9pZCBEZXNjcmlwdG9y
UHJvdG86OmNsZWFyX2hhc19uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAx
dTsKLX0KLXZvaWQgRGVzY3JpcHRvclByb3RvOjpjbGVhcl9uYW1lKCkgewotICBuYW1lXy5DbGVh
clRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc19uYW1lKCk7Ci19Ci0gY29uc3QgOjpz
dGQ6OnN0cmluZyYgRGVzY3JpcHRvclByb3RvOjpuYW1lKCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJv
dG8ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIERlc2Ny
aXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0
X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQ
cm90by5uYW1lKQotfQotIHZvaWQgRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFy
KiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6
c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLSB2b2lk
IERlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXpl
KSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6
c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUu
cHJvdG9idWYuRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci0gOjpzdGQ6OnN0cmluZyogRGVzY3Jp
cHRvclByb3RvOjptdXRhYmxlX25hbWUoKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvclByb3RvLm5hbWUpCi0gIHJldHVybiBuYW1lXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQot
IDo6c3RkOjpzdHJpbmcqIERlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRGVz
Y3JpcHRvclByb3RvLm5hbWUpCi0gIGNsZWFyX2hhc19uYW1lKCk7Ci0gIHJldHVybiBuYW1lXy5S
ZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2Nh
dGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0g
ICAgc2V0X2hhc19uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX25hbWUoKTsKLSAg
fQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5EZXNj
cmlwdG9yUHJvdG8ubmFtZSkKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5GaWVs
ZERlc2NyaXB0b3JQcm90byBmaWVsZCA9IDI7Ci1pbnQgRGVzY3JpcHRvclByb3RvOjpmaWVsZF9z
aXplKCkgY29uc3QgewotICByZXR1cm4gZmllbGRfLnNpemUoKTsKLX0KLXZvaWQgRGVzY3JpcHRv
clByb3RvOjpjbGVhcl9maWVsZCgpIHsKLSAgZmllbGRfLkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvJiBEZXNjcmlwdG9yUHJvdG86OmZp
ZWxkKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZmllbGQpCi0gIHJldHVybiBm
aWVsZF8uR2V0KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9y
UHJvdG8qIERlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9maWVsZChpbnQgaW5kZXgpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkRl
c2NyaXB0b3JQcm90by5maWVsZCkKLSAgcmV0dXJuIGZpZWxkXy5NdXRhYmxlKGluZGV4KTsKLX0K
LTo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8qIERlc2NyaXB0b3JQcm90
bzo6YWRkX2ZpZWxkKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRk
Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZmllbGQpCi0gIHJldHVybiBmaWVsZF8u
QWRkKCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8gPioKLURlc2NyaXB0b3JQcm90bzo6bXV0
YWJsZV9maWVsZCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFi
bGVfbGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmZpZWxkKQotICByZXR1cm4g
JmZpZWxkXzsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwg
Ojpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90byA+JgotRGVzY3JpcHRvclBy
b3RvOjpmaWVsZCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5maWVsZCkKLSAgcmV0dXJuIGZp
ZWxkXzsKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQ
cm90byBleHRlbnNpb24gPSA2OwotaW50IERlc2NyaXB0b3JQcm90bzo6ZXh0ZW5zaW9uX3NpemUo
KSBjb25zdCB7Ci0gIHJldHVybiBleHRlbnNpb25fLnNpemUoKTsKLX0KLXZvaWQgRGVzY3JpcHRv
clByb3RvOjpjbGVhcl9leHRlbnNpb24oKSB7Ci0gIGV4dGVuc2lvbl8uQ2xlYXIoKTsKLX0KLWNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8mIERlc2NyaXB0b3JQ
cm90bzo6ZXh0ZW5zaW9uKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZXh0ZW5z
aW9uKQotICByZXR1cm4gZXh0ZW5zaW9uXy5HZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZERlc2NyaXB0b3JQcm90byogRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX2V4dGVu
c2lvbihpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211
dGFibGU6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNpb24pCi0gIHJldHVy
biBleHRlbnNpb25fLk11dGFibGUoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZERlc2NyaXB0b3JQcm90byogRGVzY3JpcHRvclByb3RvOjphZGRfZXh0ZW5zaW9uKCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5EZXNj
cmlwdG9yUHJvdG8uZXh0ZW5zaW9uKQotICByZXR1cm4gZXh0ZW5zaW9uXy5BZGQoKTsKLX0KLTo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpG
aWVsZERlc2NyaXB0b3JQcm90byA+KgotRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX2V4dGVuc2lv
bigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpn
b29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbikKLSAgcmV0dXJuICZleHRl
bnNpb25fOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6
Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvID4mCi1EZXNjcmlwdG9yUHJv
dG86OmV4dGVuc2lvbigpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNpb24pCi0gIHJl
dHVybiBleHRlbnNpb25fOwotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkRlc2Ny
aXB0b3JQcm90byBuZXN0ZWRfdHlwZSA9IDM7Ci1pbnQgRGVzY3JpcHRvclByb3RvOjpuZXN0ZWRf
dHlwZV9zaXplKCkgY29uc3QgewotICByZXR1cm4gbmVzdGVkX3R5cGVfLnNpemUoKTsKLX0KLXZv
aWQgRGVzY3JpcHRvclByb3RvOjpjbGVhcl9uZXN0ZWRfdHlwZSgpIHsKLSAgbmVzdGVkX3R5cGVf
LkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90byYg
RGVzY3JpcHRvclByb3RvOjpuZXN0ZWRfdHlwZShpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
clByb3RvLm5lc3RlZF90eXBlKQotICByZXR1cm4gbmVzdGVkX3R5cGVfLkdldChpbmRleCk7Ci19
Ci06Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90byogRGVzY3JpcHRvclByb3RvOjpt
dXRhYmxlX25lc3RlZF90eXBlKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLm5lc3Rl
ZF90eXBlKQotICByZXR1cm4gbmVzdGVkX3R5cGVfLk11dGFibGUoaW5kZXgpOwotfQotOjpnb29n
bGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG8qIERlc2NyaXB0b3JQcm90bzo6YWRkX25lc3Rl
ZF90eXBlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2ds
ZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ubmVzdGVkX3R5cGUpCi0gIHJldHVybiBuZXN0ZWRf
dHlwZV8uQWRkKCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvID4qCi1EZXNjcmlwdG9yUHJvdG86Om11
dGFibGVfbmVzdGVkX3R5cGUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5uZXN0ZWRfdHlw
ZSkKLSAgcmV0dXJuICZuZXN0ZWRfdHlwZV87Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvID4m
Ci1EZXNjcmlwdG9yUHJvdG86Om5lc3RlZF90eXBlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3Rv
Lm5lc3RlZF90eXBlKQotICByZXR1cm4gbmVzdGVkX3R5cGVfOwotfQotCi0vLyByZXBlYXRlZCAu
Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8gZW51bV90eXBlID0gNDsKLWludCBE
ZXNjcmlwdG9yUHJvdG86OmVudW1fdHlwZV9zaXplKCkgY29uc3QgewotICByZXR1cm4gZW51bV90
eXBlXy5zaXplKCk7Ci19Ci12b2lkIERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfZW51bV90eXBlKCkg
ewotICBlbnVtX3R5cGVfLkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVu
dW1EZXNjcmlwdG9yUHJvdG8mIERlc2NyaXB0b3JQcm90bzo6ZW51bV90eXBlKGludCBpbmRleCkg
Y29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5w
cm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZW51bV90eXBlKQotICByZXR1cm4gZW51bV90eXBlXy5H
ZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvclByb3RvKiBE
ZXNjcmlwdG9yUHJvdG86Om11dGFibGVfZW51bV90eXBlKGludCBpbmRleCkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvclByb3RvLmVudW1fdHlwZSkKLSAgcmV0dXJuIGVudW1fdHlwZV8uTXV0YWJsZShpbmRleCk7
Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yUHJvdG8qIERlc2NyaXB0b3JQ
cm90bzo6YWRkX2VudW1fdHlwZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmVudW1fdHlwZSkKLSAgcmV0
dXJuIGVudW1fdHlwZV8uQWRkKCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRy
RmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3JQcm90byA+KgotRGVzY3Jp
cHRvclByb3RvOjptdXRhYmxlX2VudW1fdHlwZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3Rv
LmVudW1fdHlwZSkKLSAgcmV0dXJuICZlbnVtX3R5cGVfOwotfQotY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlw
dG9yUHJvdG8gPiYKLURlc2NyaXB0b3JQcm90bzo6ZW51bV90eXBlKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvclByb3RvLmVudW1fdHlwZSkKLSAgcmV0dXJuIGVudW1fdHlwZV87Ci19Ci0KLS8vIHJlcGVh
dGVkIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlIGV4dGVu
c2lvbl9yYW5nZSA9IDU7Ci1pbnQgRGVzY3JpcHRvclByb3RvOjpleHRlbnNpb25fcmFuZ2Vfc2l6
ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGV4dGVuc2lvbl9yYW5nZV8uc2l6ZSgpOwotfQotdm9pZCBE
ZXNjcmlwdG9yUHJvdG86OmNsZWFyX2V4dGVuc2lvbl9yYW5nZSgpIHsKLSAgZXh0ZW5zaW9uX3Jh
bmdlXy5DbGVhcigpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJv
dG9fRXh0ZW5zaW9uUmFuZ2UmIERlc2NyaXB0b3JQcm90bzo6ZXh0ZW5zaW9uX3JhbmdlKGludCBp
bmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZXh0ZW5zaW9uX3JhbmdlKQotICByZXR1cm4g
ZXh0ZW5zaW9uX3JhbmdlXy5HZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpEZXNj
cmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UqIERlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9leHRl
bnNpb25fcmFuZ2UoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZXh0ZW5zaW9uX3Jh
bmdlKQotICByZXR1cm4gZXh0ZW5zaW9uX3JhbmdlXy5NdXRhYmxlKGluZGV4KTsKLX0KLTo6Z29v
Z2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKiBEZXNjcmlwdG9y
UHJvdG86OmFkZF9leHRlbnNpb25fcmFuZ2UoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNpb25f
cmFuZ2UpCi0gIHJldHVybiBleHRlbnNpb25fcmFuZ2VfLkFkZCgpOwotfQotOjpnb29nbGU6OnBy
b3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQ
cm90b19FeHRlbnNpb25SYW5nZSA+KgotRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX2V4dGVuc2lv
bl9yYW5nZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVf
bGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbl9yYW5nZSkKLSAg
cmV0dXJuICZleHRlbnNpb25fcmFuZ2VfOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpS
ZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90b19FeHRl
bnNpb25SYW5nZSA+JgotRGVzY3JpcHRvclByb3RvOjpleHRlbnNpb25fcmFuZ2UoKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9yUHJvdG8uZXh0ZW5zaW9uX3JhbmdlKQotICByZXR1cm4gZXh0ZW5zaW9uX3Jh
bmdlXzsKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQ
cm90byBvbmVvZl9kZWNsID0gODsKLWludCBEZXNjcmlwdG9yUHJvdG86Om9uZW9mX2RlY2xfc2l6
ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG9uZW9mX2RlY2xfLnNpemUoKTsKLX0KLXZvaWQgRGVzY3Jp
cHRvclByb3RvOjpjbGVhcl9vbmVvZl9kZWNsKCkgewotICBvbmVvZl9kZWNsXy5DbGVhcigpOwot
fQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpPbmVvZkRlc2NyaXB0b3JQcm90byYgRGVzY3Jp
cHRvclByb3RvOjpvbmVvZl9kZWNsKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8u
b25lb2ZfZGVjbCkKLSAgcmV0dXJuIG9uZW9mX2RlY2xfLkdldChpbmRleCk7Ci19Ci06Omdvb2ds
ZTo6cHJvdG9idWY6Ok9uZW9mRGVzY3JpcHRvclByb3RvKiBEZXNjcmlwdG9yUHJvdG86Om11dGFi
bGVfb25lb2ZfZGVjbChpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5vbmVvZl9kZWNs
KQotICByZXR1cm4gb25lb2ZfZGVjbF8uTXV0YWJsZShpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJv
dG9idWY6Ok9uZW9mRGVzY3JpcHRvclByb3RvKiBEZXNjcmlwdG9yUHJvdG86OmFkZF9vbmVvZl9k
ZWNsKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5w
cm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ub25lb2ZfZGVjbCkKLSAgcmV0dXJuIG9uZW9mX2RlY2xf
LkFkZCgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok9uZW9mRGVzY3JpcHRvclByb3RvID4qCi1EZXNjcmlwdG9yUHJvdG86Om11
dGFibGVfb25lb2ZfZGVjbCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLm9uZW9mX2RlY2wp
Ci0gIHJldHVybiAmb25lb2ZfZGVjbF87Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJl
cGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T25lb2ZEZXNjcmlwdG9yUHJvdG8g
PiYKLURlc2NyaXB0b3JQcm90bzo6b25lb2ZfZGVjbCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90
by5vbmVvZl9kZWNsKQotICByZXR1cm4gb25lb2ZfZGVjbF87Ci19Ci0KLS8vIG9wdGlvbmFsIC5n
b29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMgb3B0aW9ucyA9IDc7Ci1ib29sIERlc2NyaXB0
b3JQcm90bzo6aGFzX29wdGlvbnMoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAm
IDB4MDAwMDAwODB1KSAhPSAwOwotfQotdm9pZCBEZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfb3B0
aW9ucygpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDgwdTsKLX0KLXZvaWQgRGVzY3Jp
cHRvclByb3RvOjpjbGVhcl9oYXNfb3B0aW9ucygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgw
MDAwMDA4MHU7Ci19Ci12b2lkIERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfb3B0aW9ucygpIHsKLSAg
aWYgKG9wdGlvbnNfICE9IE5VTEwpIG9wdGlvbnNfLT46Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3Nh
Z2VPcHRpb25zOjpDbGVhcigpOwotICBjbGVhcl9oYXNfb3B0aW9ucygpOwotfQotY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpNZXNzYWdlT3B0aW9ucyYgRGVzY3JpcHRvclByb3RvOjpvcHRpb25z
KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2ds
ZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfICE9
IE5VTEwgPyAqb3B0aW9uc18gOiAqZGVmYXVsdF9pbnN0YW5jZV8tPm9wdGlvbnNfOwotfQotOjpn
b29nbGU6OnByb3RvYnVmOjpNZXNzYWdlT3B0aW9ucyogRGVzY3JpcHRvclByb3RvOjptdXRhYmxl
X29wdGlvbnMoKSB7Ci0gIHNldF9oYXNfb3B0aW9ucygpOwotICBpZiAob3B0aW9uc18gPT0gTlVM
TCkgewotICAgIG9wdGlvbnNfID0gbmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZU9wdGlv
bnM7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29v
Z2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc187
Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VPcHRpb25zKiBEZXNjcmlwdG9yUHJvdG86
OnJlbGVhc2Vfb3B0aW9ucygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5vcHRpb25zKQotICBjbGVh
cl9oYXNfb3B0aW9ucygpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VPcHRpb25zKiB0
ZW1wID0gb3B0aW9uc187Ci0gIG9wdGlvbnNfID0gTlVMTDsKLSAgcmV0dXJuIHRlbXA7Ci19Ci12
b2lkIERlc2NyaXB0b3JQcm90bzo6c2V0X2FsbG9jYXRlZF9vcHRpb25zKDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWVzc2FnZU9wdGlvbnMqIG9wdGlvbnMpIHsKLSAgZGVsZXRlIG9wdGlvbnNfOwotICBv
cHRpb25zXyA9IG9wdGlvbnM7Ci0gIGlmIChvcHRpb25zKSB7Ci0gICAgc2V0X2hhc19vcHRpb25z
KCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX29wdGlvbnMoKTsKLSAgfQotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYu
RGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9i
dWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UgcmVzZXJ2ZWRfcmFuZ2UgPSA5OwotaW50
IERlc2NyaXB0b3JQcm90bzo6cmVzZXJ2ZWRfcmFuZ2Vfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJu
IHJlc2VydmVkX3JhbmdlXy5zaXplKCk7Ci19Ci12b2lkIERlc2NyaXB0b3JQcm90bzo6Y2xlYXJf
cmVzZXJ2ZWRfcmFuZ2UoKSB7Ci0gIHJlc2VydmVkX3JhbmdlXy5DbGVhcigpOwotfQotY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSYgRGVzY3Jp
cHRvclByb3RvOjpyZXNlcnZlZF9yYW5nZShpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclBy
b3RvLnJlc2VydmVkX3JhbmdlKQotICByZXR1cm4gcmVzZXJ2ZWRfcmFuZ2VfLkdldChpbmRleCk7
Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKiBE
ZXNjcmlwdG9yUHJvdG86Om11dGFibGVfcmVzZXJ2ZWRfcmFuZ2UoaW50IGluZGV4KSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5E
ZXNjcmlwdG9yUHJvdG8ucmVzZXJ2ZWRfcmFuZ2UpCi0gIHJldHVybiByZXNlcnZlZF9yYW5nZV8u
TXV0YWJsZShpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90b19S
ZXNlcnZlZFJhbmdlKiBEZXNjcmlwdG9yUHJvdG86OmFkZF9yZXNlcnZlZF9yYW5nZSgpIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRGVz
Y3JpcHRvclByb3RvLnJlc2VydmVkX3JhbmdlKQotICByZXR1cm4gcmVzZXJ2ZWRfcmFuZ2VfLkFk
ZCgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6
cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlID4qCi1EZXNjcmlwdG9yUHJv
dG86Om11dGFibGVfcmVzZXJ2ZWRfcmFuZ2UoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5y
ZXNlcnZlZF9yYW5nZSkKLSAgcmV0dXJuICZyZXNlcnZlZF9yYW5nZV87Ci19Ci1jb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UgPiYKLURlc2NyaXB0b3JQcm90bzo6cmVzZXJ2ZWRf
cmFuZ2UoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0
Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucmVzZXJ2ZWRfcmFuZ2UpCi0gIHJldHVy
biByZXNlcnZlZF9yYW5nZV87Ci19Ci0KLS8vIHJlcGVhdGVkIHN0cmluZyByZXNlcnZlZF9uYW1l
ID0gMTA7Ci1pbnQgRGVzY3JpcHRvclByb3RvOjpyZXNlcnZlZF9uYW1lX3NpemUoKSBjb25zdCB7
Ci0gIHJldHVybiByZXNlcnZlZF9uYW1lXy5zaXplKCk7Ci19Ci12b2lkIERlc2NyaXB0b3JQcm90
bzo6Y2xlYXJfcmVzZXJ2ZWRfbmFtZSgpIHsKLSAgcmVzZXJ2ZWRfbmFtZV8uQ2xlYXIoKTsKLX0K
LSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBEZXNjcmlwdG9yUHJvdG86OnJlc2VydmVkX25hbWUoaW50
IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6
Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXNlcnZlZF9uYW1lKQotICByZXR1cm4g
cmVzZXJ2ZWRfbmFtZV8uR2V0KGluZGV4KTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBEZXNjcmlwdG9y
UHJvdG86Om11dGFibGVfcmVzZXJ2ZWRfbmFtZShpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQ
cm90by5yZXNlcnZlZF9uYW1lKQotICByZXR1cm4gcmVzZXJ2ZWRfbmFtZV8uTXV0YWJsZShpbmRl
eCk7Ci19Ci0gdm9pZCBEZXNjcmlwdG9yUHJvdG86OnNldF9yZXNlcnZlZF9uYW1lKGludCBpbmRl
eCwgY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlc2VydmVk
X25hbWUpCi0gIHJlc2VydmVkX25hbWVfLk11dGFibGUoaW5kZXgpLT5hc3NpZ24odmFsdWUpOwot
fQotIHZvaWQgRGVzY3JpcHRvclByb3RvOjpzZXRfcmVzZXJ2ZWRfbmFtZShpbnQgaW5kZXgsIGNv
bnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHJlc2VydmVkX25hbWVfLk11dGFibGUoaW5kZXgpLT5hc3Np
Z24odmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6
Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXNlcnZlZF9uYW1lKQotfQotIHZvaWQg
RGVzY3JpcHRvclByb3RvOjpzZXRfcmVzZXJ2ZWRfbmFtZShpbnQgaW5kZXgsIGNvbnN0IGNoYXIq
IHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICByZXNlcnZlZF9uYW1lXy5NdXRhYmxlKGluZGV4KS0+
YXNzaWduKAotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUu
cHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlc2VydmVkX25hbWUpCi19Ci0gOjpzdGQ6OnN0cmlu
ZyogRGVzY3JpcHRvclByb3RvOjphZGRfcmVzZXJ2ZWRfbmFtZSgpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9yUHJvdG8ucmVzZXJ2ZWRfbmFtZSkKLSAgcmV0dXJuIHJlc2VydmVkX25hbWVfLkFkZCgpOwot
fQotIHZvaWQgRGVzY3JpcHRvclByb3RvOjphZGRfcmVzZXJ2ZWRfbmFtZShjb25zdCA6OnN0ZDo6
c3RyaW5nJiB2YWx1ZSkgewotICByZXNlcnZlZF9uYW1lXy5BZGQoKS0+YXNzaWduKHZhbHVlKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYu
RGVzY3JpcHRvclByb3RvLnJlc2VydmVkX25hbWUpCi19Ci0gdm9pZCBEZXNjcmlwdG9yUHJvdG86
OmFkZF9yZXNlcnZlZF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHJlc2VydmVkX25hbWVf
LkFkZCgpLT5hc3NpZ24odmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfYWRkX2NoYXI6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXNlcnZlZF9uYW1l
KQotfQotIHZvaWQgRGVzY3JpcHRvclByb3RvOjphZGRfcmVzZXJ2ZWRfbmFtZShjb25zdCBjaGFy
KiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgcmVzZXJ2ZWRfbmFtZV8uQWRkKCktPmFzc2lnbihy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkRlc2Ny
aXB0b3JQcm90by5yZXNlcnZlZF9uYW1lKQotfQotIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
UmVwZWF0ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmluZz4mCi1EZXNjcmlwdG9yUHJvdG86OnJlc2Vy
dmVkX25hbWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9s
aXN0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucmVzZXJ2ZWRfbmFtZSkKLSAgcmV0
dXJuIHJlc2VydmVkX25hbWVfOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJG
aWVsZDwgOjpzdGQ6OnN0cmluZz4qCi1EZXNjcmlwdG9yUHJvdG86Om11dGFibGVfcmVzZXJ2ZWRf
bmFtZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlz
dDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlc2VydmVkX25hbWUpCi0gIHJldHVy
biAmcmVzZXJ2ZWRfbmFtZV87Ci19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9J
Tl9IRUFERVJTCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpF
bnVtRGVzY3JpcHRvciogRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9kZXNjcmlwdG9yKCkgewot
ICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIEZpZWxkRGVzY3Jp
cHRvclByb3RvX1R5cGVfZGVzY3JpcHRvcl87Ci19Ci1ib29sIEZpZWxkRGVzY3JpcHRvclByb3Rv
X1R5cGVfSXNWYWxpZChpbnQgdmFsdWUpIHsKLSAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSAx
OgotICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgY2FzZSA0OgotICAgIGNhc2UgNToKLSAg
ICBjYXNlIDY6Ci0gICAgY2FzZSA3OgotICAgIGNhc2UgODoKLSAgICBjYXNlIDk6Ci0gICAgY2Fz
ZSAxMDoKLSAgICBjYXNlIDExOgotICAgIGNhc2UgMTI6Ci0gICAgY2FzZSAxMzoKLSAgICBjYXNl
IDE0OgotICAgIGNhc2UgMTU6Ci0gICAgY2FzZSAxNjoKLSAgICBjYXNlIDE3OgotICAgIGNhc2Ug
MTg6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNl
OwotICB9Ci19Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAot
Y29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQ
RV9ET1VCTEU7Ci1jb25zdCBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlIEZpZWxkRGVzY3JpcHRv
clByb3RvOjpUWVBFX0ZMT0FUOwotY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSBGaWVs
ZERlc2NyaXB0b3JQcm90bzo6VFlQRV9JTlQ2NDsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3Rv
X1R5cGUgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfVUlOVDY0OwotY29uc3QgRmllbGREZXNj
cmlwdG9yUHJvdG9fVHlwZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9JTlQzMjsKLWNvbnN0
IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfRklY
RUQ2NDsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUgRmllbGREZXNjcmlwdG9yUHJv
dG86OlRZUEVfRklYRUQzMjsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUgRmllbGRE
ZXNjcmlwdG9yUHJvdG86OlRZUEVfQk9PTDsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5
cGUgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfU1RSSU5HOwotY29uc3QgRmllbGREZXNjcmlw
dG9yUHJvdG9fVHlwZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9HUk9VUDsKLWNvbnN0IEZp
ZWxkRGVzY3JpcHRvclByb3RvX1R5cGUgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfTUVTU0FH
RTsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUgRmllbGREZXNjcmlwdG9yUHJvdG86
OlRZUEVfQllURVM7Ci1jb25zdCBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlIEZpZWxkRGVzY3Jp
cHRvclByb3RvOjpUWVBFX1VJTlQzMjsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUg
RmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfRU5VTTsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclBy
b3RvX1R5cGUgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfU0ZJWEVEMzI7Ci1jb25zdCBGaWVs
ZERlc2NyaXB0b3JQcm90b19UeXBlIEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX1NGSVhFRDY0
OwotY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6
VFlQRV9TSU5UMzI7Ci1jb25zdCBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlIEZpZWxkRGVzY3Jp
cHRvclByb3RvOjpUWVBFX1NJTlQ2NDsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUg
RmllbGREZXNjcmlwdG9yUHJvdG86OlR5cGVfTUlOOwotY29uc3QgRmllbGREZXNjcmlwdG9yUHJv
dG9fVHlwZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6VHlwZV9NQVg7Ci1jb25zdCBpbnQgRmllbGRE
ZXNjcmlwdG9yUHJvdG86OlR5cGVfQVJSQVlTSVpFOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVND
X1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVt
RGVzY3JpcHRvciogRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxfZGVzY3JpcHRvcigpIHsKLSAg
cHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIHJldHVybiBGaWVsZERlc2NyaXB0
b3JQcm90b19MYWJlbF9kZXNjcmlwdG9yXzsKLX0KLWJvb2wgRmllbGREZXNjcmlwdG9yUHJvdG9f
TGFiZWxfSXNWYWxpZChpbnQgdmFsdWUpIHsKLSAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSAx
OgotICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZh
dWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZF
UikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwg
RmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElPTkFMOwotY29uc3QgRmllbGREZXNjcmlw
dG9yUHJvdG9fTGFiZWwgRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX1JFUVVJUkVEOwotY29u
c3QgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwgRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVM
X1JFUEVBVEVEOwotY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwgRmllbGREZXNjcmlw
dG9yUHJvdG86OkxhYmVsX01JTjsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsIEZp
ZWxkRGVzY3JpcHRvclByb3RvOjpMYWJlbF9NQVg7Ci1jb25zdCBpbnQgRmllbGREZXNjcmlwdG9y
UHJvdG86OkxhYmVsX0FSUkFZU0laRTsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8
IF9NU0NfVkVSID49IDE5MDAKLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0g
MTkwMAotY29uc3QgaW50IEZpZWxkRGVzY3JpcHRvclByb3RvOjprTmFtZUZpZWxkTnVtYmVyOwot
Y29uc3QgaW50IEZpZWxkRGVzY3JpcHRvclByb3RvOjprTnVtYmVyRmllbGROdW1iZXI7Ci1jb25z
dCBpbnQgRmllbGREZXNjcmlwdG9yUHJvdG86OmtMYWJlbEZpZWxkTnVtYmVyOwotY29uc3QgaW50
IEZpZWxkRGVzY3JpcHRvclByb3RvOjprVHlwZUZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpZWxk
RGVzY3JpcHRvclByb3RvOjprVHlwZU5hbWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWVsZERl
c2NyaXB0b3JQcm90bzo6a0V4dGVuZGVlRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRmllbGREZXNj
cmlwdG9yUHJvdG86OmtEZWZhdWx0VmFsdWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWVsZERl
c2NyaXB0b3JQcm90bzo6a09uZW9mSW5kZXhGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWVsZERl
c2NyaXB0b3JQcm90bzo6a0pzb25OYW1lRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRmllbGREZXNj
cmlwdG9yUHJvdG86OmtPcHRpb25zRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9N
U0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUZpZWxkRGVzY3JpcHRvclByb3RvOjpGaWVs
ZERlc2NyaXB0b3JQcm90bygpCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksIF9p
bnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChjb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlw
dG9yUHJvdG8pCi19Ci0KLXZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OkluaXRBc0RlZmF1bHRJ
bnN0YW5jZSgpIHsKLSAgb3B0aW9uc18gPSBjb25zdF9jYXN0PCA6Omdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkT3B0aW9ucyo+KCY6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uczo6ZGVmYXVs
dF9pbnN0YW5jZSgpKTsKLX0KLQotRmllbGREZXNjcmlwdG9yUHJvdG86OkZpZWxkRGVzY3JpcHRv
clByb3RvKGNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBT
aGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclBy
b3RvKQotfQotCi12b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpTaGFyZWRDdG9yKCkgewotICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZygpOwotICBfY2FjaGVk
X3NpemVfID0gMDsKLSAgbmFtZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBudW1iZXJfID0g
MDsKLSAgbGFiZWxfID0gMTsKLSAgdHlwZV8gPSAxOwotICB0eXBlX25hbWVfLlVuc2FmZVNldERl
ZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLSAgZXh0ZW5kZWVfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgZGVmYXVs
dF92YWx1ZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBvbmVvZl9pbmRleF8gPSAwOwotICBq
c29uX25hbWVfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgb3B0aW9uc18gPSBOVUxMOwotICA6
Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXplb2YoX2hhc19iaXRzXykpOwotfQotCi1GaWVsZERl
c2NyaXB0b3JQcm90bzo6fkZpZWxkRGVzY3JpcHRvclByb3RvKCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y
UHJvdG8pCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6
U2hhcmVkRHRvcigpIHsKLSAgbmFtZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgdHlwZV9uYW1l
Xy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBleHRlbmRlZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LSAgZGVmYXVsdF92YWx1ZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAganNvbl9uYW1lXy5EZXN0
cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNlXykgewotICAg
IGRlbGV0ZSBvcHRpb25zXzsKLSAgfQotfQotCi12b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpT
ZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9D
T05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogRmllbGREZXNjcmlwdG9yUHJvdG86OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVm
X0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9f
ZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvJiBGaWVsZERlc2Ny
aXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2Vf
ID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9y
XzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRmllbGREZXNj
cmlwdG9yUHJvdG8qIEZpZWxkRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5V
TEw7Ci0KLUZpZWxkRGVzY3JpcHRvclByb3RvKiBGaWVsZERlc2NyaXB0b3JQcm90bzo6TmV3KDo6
Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIEZpZWxkRGVzY3JpcHRv
clByb3RvKiBuID0gbmV3IEZpZWxkRGVzY3JpcHRvclByb3RvOwotICBpZiAoYXJlbmEgIT0gTlVM
TCkgewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgRmll
bGREZXNjcmlwdG9yUHJvdG86OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3Rv
KQotICBpZiAoX2hhc19iaXRzX1swIC8gMzJdICYgMjU1dSkgewotICAgIGlmIChoYXNfbmFtZSgp
KSB7Ci0gICAgICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gICAgfQotICAgIG51
bWJlcl8gPSAwOwotICAgIGxhYmVsXyA9IDE7Ci0gICAgdHlwZV8gPSAxOwotICAgIGlmIChoYXNf
dHlwZV9uYW1lKCkpIHsKLSAgICAgIHR5cGVfbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotICAgIH0KLSAgICBpZiAoaGFzX2V4dGVuZGVlKCkpIHsKLSAgICAgIGV4dGVuZGVlXy5DbGVh
clRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gICAgfQotICAgIGlmIChoYXNfZGVmYXVsdF92YWx1ZSgp
KSB7Ci0gICAgICBkZWZhdWx0X3ZhbHVlXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gICAg
fQotICAgIG9uZW9mX2luZGV4XyA9IDA7Ci0gIH0KLSAgaWYgKF9oYXNfYml0c19bOCAvIDMyXSAm
IDc2OHUpIHsKLSAgICBpZiAoaGFzX2pzb25fbmFtZSgpKSB7Ci0gICAgICBqc29uX25hbWVfLkNs
ZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgICB9Ci0gICAgaWYgKGhhc19vcHRpb25zKCkpIHsK
LSAgICAgIGlmIChvcHRpb25zXyAhPSBOVUxMKSBvcHRpb25zXy0+Ojpnb29nbGU6OnByb3RvYnVm
OjpGaWVsZE9wdGlvbnM6OkNsZWFyKCk7Ci0gICAgfQotICB9Ci0gIDo6bWVtc2V0KF9oYXNfYml0
c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhh
dmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+Q2xl
YXIoKTsKLSAgfQotfQotCi1ib29sIEZpZWxkRGVzY3JpcHRvclByb3RvOjpNZXJnZVBhcnRpYWxG
cm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0
cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJ
Q1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bykKLSAgZm9yICg7OykgewotICAgIDo6
c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0LT5S
ZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNl
Y29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7Ci0g
ICAgICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gICAgICBjYXNlIDE6IHsKLSAgICAg
ICAgaWYgKHRhZyA9PSAxMCkgewotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAgICAgICBpbnB1
dCwgdGhpcy0+bXV0YWJsZV9uYW1lKCkpKTsKLSAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAg
ICAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAg
ICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlBBUlNFLAot
ICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5uYW1lIik7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxOCkpIGdvdG8gcGFyc2VfZXh0ZW5k
ZWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcg
ZXh0ZW5kZWUgPSAyOwotICAgICAgY2FzZSAyOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTgpIHsK
LSAgICAgICAgIHBhcnNlX2V4dGVuZGVlOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAgICAg
ICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9leHRlbmRlZSgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmll
bGQoCi0gICAgICAgICAgICB0aGlzLT5leHRlbmRlZSgpLmRhdGEoKSwgdGhpcy0+ZXh0ZW5kZWUo
KS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXQ6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2Ny
aXB0b3JQcm90by5leHRlbmRlZSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8g
aGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWco
MjQpKSBnb3RvIHBhcnNlX251bWJlcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAg
IC8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDM7Ci0gICAgICBjYXNlIDM6IHsKLSAgICAgICAg
aWYgKHRhZyA9PSAyNCkgewotICAgICAgICAgcGFyc2VfbnVtYmVyOgotICAgICAgICAgIERPXygo
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRp
dmU8Ci0gICAgICAgICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiwgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfSU5UMzI+KAotICAg
ICAgICAgICAgICAgICBpbnB1dCwgJm51bWJlcl8pKSk7Ci0gICAgICAgICAgc2V0X2hhc19udW1i
ZXIoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDMyKSkgZ290byBwYXJzZV9s
YWJlbDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIC5nb29n
bGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWwgbGFiZWwgPSA0OwotICAgICAg
Y2FzZSA0OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMzIpIHsKLSAgICAgICAgIHBhcnNlX2xhYmVs
OgotICAgICAgICAgIGludCB2YWx1ZTsKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPAotICAgICAgICAgICAg
ICAgICAgIGludCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OlRZUEVfRU5VTT4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmdmFsdWUpKSk7Ci0gICAgICAg
ICAgaWYgKDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxfSXNW
YWxpZCh2YWx1ZSkpIHsKLSAgICAgICAgICAgIHNldF9sYWJlbChzdGF0aWNfY2FzdDwgOjpnb29n
bGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbCA+KHZhbHVlKSk7Ci0gICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+QWRk
VmFyaW50KDQsIHZhbHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4
cGVjdFRhZyg0MCkpIGdvdG8gcGFyc2VfdHlwZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0K
LSAgICAgIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8u
VHlwZSB0eXBlID0gNTsKLSAgICAgIGNhc2UgNTogewotICAgICAgICBpZiAodGFnID09IDQwKSB7
Ci0gICAgICAgICBwYXJzZV90eXBlOgotICAgICAgICAgIGludCB2YWx1ZTsKLSAgICAgICAgICBE
T18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJp
bWl0aXZlPAotICAgICAgICAgICAgICAgICAgIGludCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfRU5VTT4oCi0gICAgICAgICAgICAgICAgIGlucHV0
LCAmdmFsdWUpKSk7Ci0gICAgICAgICAgaWYgKDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNj
cmlwdG9yUHJvdG9fVHlwZV9Jc1ZhbGlkKHZhbHVlKSkgewotICAgICAgICAgICAgc2V0X3R5cGUo
c3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9fVHlw
ZSA+KHZhbHVlKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG11dGFibGVfdW5r
bm93bl9maWVsZHMoKS0+QWRkVmFyaW50KDUsIHZhbHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg1MCkpIGdvdG8gcGFyc2VfdHlwZV9uYW1lOwotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIHR5cGVfbmFt
ZSA9IDY7Ci0gICAgICBjYXNlIDY6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA1MCkgewotICAgICAg
ICAgcGFyc2VfdHlwZV9uYW1lOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAgICAgICBpbnB1
dCwgdGhpcy0+bXV0YWJsZV90eXBlX25hbWUoKSkpOwotICAgICAgICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAot
ICAgICAgICAgICAgdGhpcy0+dHlwZV9uYW1lKCkuZGF0YSgpLCB0aGlzLT50eXBlX25hbWUoKS5s
ZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0
b3JQcm90by50eXBlX25hbWUiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhh
bmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDU4
KSkgZ290byBwYXJzZV9kZWZhdWx0X3ZhbHVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQot
ICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfdmFsdWUgPSA3OwotICAgICAgY2FzZSA3
OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNTgpIHsKLSAgICAgICAgIHBhcnNlX2RlZmF1bHRfdmFs
dWU6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5tdXRhYmxl
X2RlZmF1bHRfdmFsdWUoKSkpOwotICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgICAgICAg
dGhpcy0+ZGVmYXVsdF92YWx1ZSgpLmRhdGEoKSwgdGhpcy0+ZGVmYXVsdF92YWx1ZSgpLmxlbmd0
aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dDo6UEFSU0UsCi0gICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclBy
b3RvLmRlZmF1bHRfdmFsdWUiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhh
bmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDY2
KSkgZ290byBwYXJzZV9vcHRpb25zOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAg
Ly8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMgb3B0aW9ucyA9IDg7Ci0g
ICAgICBjYXNlIDg6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA2NikgewotICAgICAgICAgcGFyc2Vf
b3B0aW9uczoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsKAotICAgICAgICAgICAgICAgaW5wdXQs
IG11dGFibGVfb3B0aW9ucygpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBo
YW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3
MikpIGdvdG8gcGFyc2Vfb25lb2ZfaW5kZXg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g
ICAgICAvLyBvcHRpb25hbCBpbnQzMiBvbmVvZl9pbmRleCA9IDk7Ci0gICAgICBjYXNlIDk6IHsK
LSAgICAgICAgaWYgKHRhZyA9PSA3MikgewotICAgICAgICAgcGFyc2Vfb25lb2ZfaW5kZXg6Ci0g
ICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludDMyLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQ
RV9JTlQzMj4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmb25lb2ZfaW5kZXhfKSkpOwotICAg
ICAgICAgIHNldF9oYXNfb25lb2ZfaW5kZXgoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhw
ZWN0VGFnKDgyKSkgZ290byBwYXJzZV9qc29uX25hbWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotCi0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcganNvbl9uYW1lID0gMTA7Ci0gICAgICBjYXNl
IDEwOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gODIpIHsKLSAgICAgICAgIHBhcnNlX2pzb25fbmFt
ZToKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVf
anNvbl9uYW1lKCkpKTsKLSAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgICAgICAgIHRoaXMt
Pmpzb25fbmFtZSgpLmRhdGEoKSwgdGhpcy0+anNvbl9uYW1lKCkubGVuZ3RoKCksCi0gICAgICAg
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpQQVJTRSwKLSAg
ICAgICAgICAgICJnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uanNvbl9uYW1l
Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdEF0RW5kKCkpIGdvdG8gc3VjY2VzczsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgIGhhbmRs
ZV91bnVzdWFsOgotICAgICAgICBpZiAodGFnID09IDAgfHwKLSAgICAgICAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcp
ID09Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7Ci0gICAgICAgICAgZ290byBzdWNjZXNzOwotICAg
ICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpTa2lwRmllbGQoCi0gICAgICAgICAgICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93
bl9maWVsZHMoKSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nl
c3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5w
cm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bykKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9i
dWYuRmllbGREZXNjcmlwdG9yUHJvdG8pCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0K
LQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNv
bnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29n
bGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8pCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBu
YW1lID0gMTsKLSAgaWYgKGhhc19uYW1lKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRo
aXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29n
bGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubmFtZSIpOwotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNl
ZCgKLSAgICAgIDEsIHRoaXMtPm5hbWUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFs
IHN0cmluZyBleHRlbmRlZSA9IDI7Ci0gIGlmIChoYXNfZXh0ZW5kZWUoKSkgewotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1l
ZEZpZWxkKAotICAgICAgdGhpcy0+ZXh0ZW5kZWUoKS5kYXRhKCksIHRoaXMtPmV4dGVuZGVlKCku
bGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3Rv
LmV4dGVuZGVlIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgMiwgdGhpcy0+ZXh0ZW5kZWUo
KSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDM7Ci0gIGlm
IChoYXNfbnVtYmVyKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6V3JpdGVJbnQzMigzLCB0aGlzLT5udW1iZXIoKSwgb3V0cHV0KTsKLSAgfQot
Ci0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFi
ZWwgbGFiZWwgPSA0OwotICBpZiAoaGFzX2xhYmVsKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVtKAotICAgICAgNCwgdGhpcy0+
bGFiZWwoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYu
RmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZSB0eXBlID0gNTsKLSAgaWYgKGhhc190eXBlKCkpIHsK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVF
bnVtKAotICAgICAgNSwgdGhpcy0+dHlwZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9u
YWwgc3RyaW5nIHR5cGVfbmFtZSA9IDY7Ci0gIGlmIChoYXNfdHlwZV9uYW1lKCkpIHsKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5n
TmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPnR5cGVfbmFtZSgpLmRhdGEoKSwgdGhpcy0+dHlwZV9u
YW1lKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRv
clByb3RvLnR5cGVfbmFtZSIpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDYsIHRoaXMtPnR5
cGVfbmFtZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRf
dmFsdWUgPSA3OwotICBpZiAoaGFzX2RlZmF1bHRfdmFsdWUoKSkgewotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxk
KAotICAgICAgdGhpcy0+ZGVmYXVsdF92YWx1ZSgpLmRhdGEoKSwgdGhpcy0+ZGVmYXVsdF92YWx1
ZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQ
cm90by5kZWZhdWx0X3ZhbHVlIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgNywgdGhpcy0+
ZGVmYXVsdF92YWx1ZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5w
cm90b2J1Zi5GaWVsZE9wdGlvbnMgb3B0aW9ucyA9IDg7Ci0gIGlmIChoYXNfb3B0aW9ucygpKSB7
Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRl
TWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDgsICp0aGlzLT5vcHRpb25zXywgb3V0cHV0KTsK
LSAgfQotCi0gIC8vIG9wdGlvbmFsIGludDMyIG9uZW9mX2luZGV4ID0gOTsKLSAgaWYgKGhhc19v
bmVvZl9pbmRleCgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OldyaXRlSW50MzIoOSwgdGhpcy0+b25lb2ZfaW5kZXgoKSwgb3V0cHV0KTsKLSAg
fQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBqc29uX25hbWUgPSAxMDsKLSAgaWYgKGhhc19qc29u
X25hbWUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6
OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+anNvbl9uYW1lKCkuZGF0
YSgpLCB0aGlzLT5qc29uX25hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9i
dWYuRmllbGREZXNjcmlwdG9yUHJvdG8uanNvbl9uYW1lIik7Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAot
ICAgICAgMTAsIHRoaXMtPmpzb25fbmFtZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgaWYgKF9pbnRl
cm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkcygKLSAg
ICAgICAgdW5rbm93bl9maWVsZHMoKSwgb3V0cHV0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y
UHJvdG8pCi19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIEZpZWxkRGVzY3JpcHRvclBy
b3RvOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0
b3JQcm90bykKLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBpZiAoaGFzX25hbWUo
KSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlm
eVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+
bmFtZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0
b3JQcm90by5uYW1lIik7Ci0gICAgdGFyZ2V0ID0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDEs
IHRoaXMtPm5hbWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBleHRl
bmRlZSA9IDI7Ci0gIGlmIChoYXNfZXh0ZW5kZWUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAg
ICAgdGhpcy0+ZXh0ZW5kZWUoKS5kYXRhKCksIHRoaXMtPmV4dGVuZGVlKCkubGVuZ3RoKCksCi0g
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJWkUs
Ci0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmV4dGVuZGVlIik7
Ci0gICAgdGFyZ2V0ID0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDIsIHRoaXMtPmV4dGVuZGVl
KCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBpbnQzMiBudW1iZXIgPSAzOwotICBp
ZiAoaGFzX251bWJlcigpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzJUb0FycmF5KDMsIHRoaXMtPm51bWJlcigp
LCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERl
c2NyaXB0b3JQcm90by5MYWJlbCBsYWJlbCA9IDQ7Ci0gIGlmIChoYXNfbGFiZWwoKSkgewotICAg
IHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpX
cml0ZUVudW1Ub0FycmF5KAotICAgICAgNCwgdGhpcy0+bGFiZWwoKSwgdGFyZ2V0KTsKLSAgfQot
Ci0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlw
ZSB0eXBlID0gNTsKLSAgaWYgKGhhc190eXBlKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVtVG9BcnJheSgKLSAg
ICAgIDUsIHRoaXMtPnR5cGUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmlu
ZyB0eXBlX25hbWUgPSA2OwotICBpZiAoaGFzX3R5cGVfbmFtZSgpKSB7Ci0gICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmll
bGQoCi0gICAgICB0aGlzLT50eXBlX25hbWUoKS5kYXRhKCksIHRoaXMtPnR5cGVfbmFtZSgpLmxl
bmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6
U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50
eXBlX25hbWUiKTsKLSAgICB0YXJnZXQgPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nVG9BcnJheSgKLSAgICAgICAgNiwgdGhp
cy0+dHlwZV9uYW1lKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgZGVm
YXVsdF92YWx1ZSA9IDc7Ci0gIGlmIChoYXNfZGVmYXVsdF92YWx1ZSgpKSB7Ci0gICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVk
RmllbGQoCi0gICAgICB0aGlzLT5kZWZhdWx0X3ZhbHVlKCkuZGF0YSgpLCB0aGlzLT5kZWZhdWx0
X3ZhbHVlKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3Jp
cHRvclByb3RvLmRlZmF1bHRfdmFsdWUiKTsKLSAgICB0YXJnZXQgPQotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nVG9BcnJheSgK
LSAgICAgICAgNywgdGhpcy0+ZGVmYXVsdF92YWx1ZSgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8g
b3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMgb3B0aW9ucyA9IDg7Ci0gIGlm
IChoYXNfb3B0aW9ucygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJh
eSgKLSAgICAgICAgOCwgKnRoaXMtPm9wdGlvbnNfLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0
aW9uYWwgaW50MzIgb25lb2ZfaW5kZXggPSA5OwotICBpZiAoaGFzX29uZW9mX2luZGV4KCkpIHsK
LSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6V3JpdGVJbnQzMlRvQXJyYXkoOSwgdGhpcy0+b25lb2ZfaW5kZXgoKSwgdGFyZ2V0KTsKLSAg
fQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBqc29uX25hbWUgPSAxMDsKLSAgaWYgKGhhc19qc29u
X25hbWUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6
OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+anNvbl9uYW1lKCkuZGF0
YSgpLCB0aGlzLT5qc29uX25hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9i
dWYuRmllbGREZXNjcmlwdG9yUHJvdG8uanNvbl9uYW1lIik7Ci0gICAgdGFyZ2V0ID0KLSAgICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmlu
Z1RvQXJyYXkoCi0gICAgICAgIDEwLCB0aGlzLT5qc29uX25hbWUoKSwgdGFyZ2V0KTsKLSAgfQot
Ci0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAg
IHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlh
bGl6ZVVua25vd25GaWVsZHNUb0FycmF5KAotICAgICAgICB1bmtub3duX2ZpZWxkcygpLCB0YXJn
ZXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJy
YXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bykKLSAgcmV0dXJuIHRh
cmdldDsKLX0KLQotaW50IEZpZWxkRGVzY3JpcHRvclByb3RvOjpCeXRlU2l6ZSgpIGNvbnN0IHsK
LS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29n
bGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8pCi0gIGludCB0b3RhbF9zaXplID0gMDsK
LQotICBpZiAoX2hhc19iaXRzX1swIC8gMzJdICYgMjU1dSkgewotICAgIC8vIG9wdGlvbmFsIHN0
cmluZyBuYW1lID0gMTsKLSAgICBpZiAoaGFzX25hbWUoKSkgewotICAgICAgdG90YWxfc2l6ZSAr
PSAxICsKLSAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlN0cmluZ1NpemUoCi0gICAgICAgICAgdGhpcy0+bmFtZSgpKTsKLSAgICB9Ci0KLSAgICAv
LyBvcHRpb25hbCBpbnQzMiBudW1iZXIgPSAzOwotICAgIGlmIChoYXNfbnVtYmVyKCkpIHsKLSAg
ICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpJbnQzMlNpemUoCi0gICAgICAgICAgdGhpcy0+bnVtYmVyKCkp
OwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlw
dG9yUHJvdG8uTGFiZWwgbGFiZWwgPSA0OwotICAgIGlmIChoYXNfbGFiZWwoKSkgewotICAgICAg
dG90YWxfc2l6ZSArPSAxICsKLSAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OkVudW1TaXplKHRoaXMtPmxhYmVsKCkpOwotICAgIH0KLQotICAgIC8v
IG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZSB0eXBl
ID0gNTsKLSAgICBpZiAoaGFzX3R5cGUoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAg
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkVudW1T
aXplKHRoaXMtPnR5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwgc3RyaW5nIHR5cGVf
bmFtZSA9IDY7Ci0gICAgaWYgKGhhc190eXBlX25hbWUoKSkgewotICAgICAgdG90YWxfc2l6ZSAr
PSAxICsKLSAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlN0cmluZ1NpemUoCi0gICAgICAgICAgdGhpcy0+dHlwZV9uYW1lKCkpOwotICAgIH0KLQot
ICAgIC8vIG9wdGlvbmFsIHN0cmluZyBleHRlbmRlZSA9IDI7Ci0gICAgaWYgKGhhc19leHRlbmRl
ZSgpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgICB0aGlz
LT5leHRlbmRlZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBvcHRpb25hbCBzdHJpbmcgZGVmYXVsdF92
YWx1ZSA9IDc7Ci0gICAgaWYgKGhhc19kZWZhdWx0X3ZhbHVlKCkpIHsKLSAgICAgIHRvdGFsX3Np
emUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICAgIHRoaXMtPmRlZmF1bHRfdmFsdWUoKSk7Ci0g
ICAgfQotCi0gICAgLy8gb3B0aW9uYWwgaW50MzIgb25lb2ZfaW5kZXggPSA5OwotICAgIGlmICho
YXNfb25lb2ZfaW5kZXgoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkludDMyU2l6ZSgKLSAg
ICAgICAgICB0aGlzLT5vbmVvZl9pbmRleCgpKTsKLSAgICB9Ci0KLSAgfQotICBpZiAoX2hhc19i
aXRzX1s4IC8gMzJdICYgNzY4dSkgewotICAgIC8vIG9wdGlvbmFsIHN0cmluZyBqc29uX25hbWUg
PSAxMDsKLSAgICBpZiAoaGFzX2pzb25fbmFtZSgpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEg
KwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
U3RyaW5nU2l6ZSgKLSAgICAgICAgICB0aGlzLT5qc29uX25hbWUoKSk7Ci0gICAgfQotCi0gICAg
Ly8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMgb3B0aW9ucyA9IDg7Ci0g
ICAgaWYgKGhhc19vcHRpb25zKCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6
ZU5vVmlydHVhbCgKLSAgICAgICAgICAqdGhpcy0+b3B0aW9uc18pOwotICAgIH0KLQotICB9Ci0g
IGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHRv
dGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXQ6OkNvbXB1dGVVbmtub3duRmllbGRzU2l6ZSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSk7
Ci0gIH0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hl
ZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VO
RCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90
bzo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewot
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6
Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvKQotICBpZiAoR09PR0xFX1BSRURJ
Q1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25z
dCBGaWVsZERlc2NyaXB0b3JQcm90byogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IEZpZWxkRGVzY3JpcHRv
clByb3RvPigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2Zh
aWw6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvKQotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9
IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2Vf
ZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvKQot
ICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIEZpZWxkRGVzY3JpcHRvclBy
b3RvOjpNZXJnZUZyb20oY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8mIGZyb20pIHsKLS8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bykKLSAgaWYgKEdPT0dMRV9QUkVESUNU
X0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgaWYgKGZy
b20uX2hhc19iaXRzX1swIC8gMzJdICYgKDB4ZmZ1IDw8ICgwICUgMzIpKSkgewotICAgIGlmIChm
cm9tLmhhc19uYW1lKCkpIHsKLSAgICAgIHNldF9oYXNfbmFtZSgpOwotICAgICAgbmFtZV8uQXNz
aWduV2l0aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLCBmcm9tLm5hbWVfKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFz
X251bWJlcigpKSB7Ci0gICAgICBzZXRfbnVtYmVyKGZyb20ubnVtYmVyKCkpOwotICAgIH0KLSAg
ICBpZiAoZnJvbS5oYXNfbGFiZWwoKSkgewotICAgICAgc2V0X2xhYmVsKGZyb20ubGFiZWwoKSk7
Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc190eXBlKCkpIHsKLSAgICAgIHNldF90eXBlKGZyb20u
dHlwZSgpKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX3R5cGVfbmFtZSgpKSB7Ci0gICAgICBz
ZXRfaGFzX3R5cGVfbmFtZSgpOwotICAgICAgdHlwZV9uYW1lXy5Bc3NpZ25XaXRoRGVmYXVsdCgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCksIGZyb20udHlwZV9uYW1lXyk7Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc19leHRlbmRlZSgp
KSB7Ci0gICAgICBzZXRfaGFzX2V4dGVuZGVlKCk7Ci0gICAgICBleHRlbmRlZV8uQXNzaWduV2l0
aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpLCBmcm9tLmV4dGVuZGVlXyk7Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc19k
ZWZhdWx0X3ZhbHVlKCkpIHsKLSAgICAgIHNldF9oYXNfZGVmYXVsdF92YWx1ZSgpOwotICAgICAg
ZGVmYXVsdF92YWx1ZV8uQXNzaWduV2l0aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBmcm9tLmRlZmF1bHRfdmFsdWVf
KTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX29uZW9mX2luZGV4KCkpIHsKLSAgICAgIHNldF9v
bmVvZl9pbmRleChmcm9tLm9uZW9mX2luZGV4KCkpOwotICAgIH0KLSAgfQotICBpZiAoZnJvbS5f
aGFzX2JpdHNfWzggLyAzMl0gJiAoMHhmZnUgPDwgKDggJSAzMikpKSB7Ci0gICAgaWYgKGZyb20u
aGFzX2pzb25fbmFtZSgpKSB7Ci0gICAgICBzZXRfaGFzX2pzb25fbmFtZSgpOwotICAgICAganNv
bl9uYW1lXy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20uanNvbl9uYW1lXyk7Ci0gICAgfQot
ICAgIGlmIChmcm9tLmhhc19vcHRpb25zKCkpIHsKLSAgICAgIG11dGFibGVfb3B0aW9ucygpLT46
Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uczo6TWVyZ2VGcm9tKGZyb20ub3B0aW9ucygp
KTsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyb20uX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25v
d25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vua25vd25fZmllbGRzKCktPk1lcmdlRnJvbShm
cm9tLnVua25vd25fZmllbGRzKCkpOwotICB9Ci19Ci0KLXZvaWQgRmllbGREZXNjcmlwdG9yUHJv
dG86OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewot
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpn
b29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8pCi0gIGlmICgmZnJvbSA9PSB0aGlz
KSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBGaWVs
ZERlc2NyaXB0b3JQcm90bzo6Q29weUZyb20oY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8mIGZy
b20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19jb3B5X2Zy
b21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvKQotICBpZiAoJmZy
b20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0K
LWJvb2wgRmllbGREZXNjcmlwdG9yUHJvdG86OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAg
aWYgKGhhc19vcHRpb25zKCkpIHsKLSAgICBpZiAoIXRoaXMtPm9wdGlvbnNfLT5Jc0luaXRpYWxp
emVkKCkpIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGaWVs
ZERlc2NyaXB0b3JQcm90bzo6U3dhcChGaWVsZERlc2NyaXB0b3JQcm90byogb3RoZXIpIHsKLSAg
aWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZv
aWQgRmllbGREZXNjcmlwdG9yUHJvdG86OkludGVybmFsU3dhcChGaWVsZERlc2NyaXB0b3JQcm90
byogb3RoZXIpIHsKLSAgbmFtZV8uU3dhcCgmb3RoZXItPm5hbWVfKTsKLSAgc3RkOjpzd2FwKG51
bWJlcl8sIG90aGVyLT5udW1iZXJfKTsKLSAgc3RkOjpzd2FwKGxhYmVsXywgb3RoZXItPmxhYmVs
Xyk7Ci0gIHN0ZDo6c3dhcCh0eXBlXywgb3RoZXItPnR5cGVfKTsKLSAgdHlwZV9uYW1lXy5Td2Fw
KCZvdGhlci0+dHlwZV9uYW1lXyk7Ci0gIGV4dGVuZGVlXy5Td2FwKCZvdGhlci0+ZXh0ZW5kZWVf
KTsKLSAgZGVmYXVsdF92YWx1ZV8uU3dhcCgmb3RoZXItPmRlZmF1bHRfdmFsdWVfKTsKLSAgc3Rk
Ojpzd2FwKG9uZW9mX2luZGV4Xywgb3RoZXItPm9uZW9mX2luZGV4Xyk7Ci0gIGpzb25fbmFtZV8u
U3dhcCgmb3RoZXItPmpzb25fbmFtZV8pOwotICBzdGQ6OnN3YXAob3B0aW9uc18sIG90aGVyLT5v
cHRpb25zXyk7Ci0gIHN0ZDo6c3dhcChfaGFzX2JpdHNfWzBdLCBvdGhlci0+X2hhc19iaXRzX1sw
XSk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0
YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwot
fQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEZpZWxkRGVzY3JpcHRvclByb3RvOjpH
ZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRl
c2NyaXB0b3IgPSBGaWVsZERlc2NyaXB0b3JQcm90b19kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEu
cmVmbGVjdGlvbiA9IEZpZWxkRGVzY3JpcHRvclByb3RvX3JlZmxlY3Rpb25fOwotICByZXR1cm4g
bWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIEZp
ZWxkRGVzY3JpcHRvclByb3RvCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLWJvb2wg
RmllbGREZXNjcmlwdG9yUHJvdG86Omhhc19uYW1lKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNf
Yml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLXZvaWQgRmllbGREZXNjcmlwdG9yUHJv
dG86OnNldF9oYXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0K
LXZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hhc19uYW1lKCkgewotICBfaGFzX2Jp
dHNfWzBdICY9IH4weDAwMDAwMDAxdTsKLX0KLXZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OmNs
ZWFyX25hbWUoKSB7Ci0gIG5hbWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJf
aGFzX25hbWUoKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBGaWVsZERlc2NyaXB0b3JQcm90
bzo6bmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dl
dDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgcmV0dXJuIG5h
bWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRf
bmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAg
bmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubmFtZSkK
LX0KLSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1
ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpz
dHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9j
aGFyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5uYW1lKQotfQotIHZvaWQg
RmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qg
c2l6ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAg
ICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6
ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29v
Z2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci0gOjpzdGQ6OnN0cmlu
ZyogRmllbGREZXNjcmlwdG9yUHJvdG86Om11dGFibGVfbmFtZSgpIHsKLSAgc2V0X2hhc19uYW1l
KCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5w
cm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5uYW1lKQotICByZXR1cm4gbmFtZV8uTXV0YWJs
ZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWVsZERlc2NyaXB0b3JQcm90bzo6
cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVs
ZWFzZTpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgY2xlYXJf
aGFzX25hbWUoKTsKLSAgcmV0dXJuIG5hbWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9p
ZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2FsbG9jYXRlZF9uYW1lKDo6c3RkOjpzdHJpbmcq
IG5hbWUpIHsKLSAgaWYgKG5hbWUgIT0gTlVMTCkgewotICAgIHNldF9oYXNfbmFtZSgpOwotICB9
IGVsc2UgewotICAgIGNsZWFyX2hhc19uYW1lKCk7Ci0gIH0KLSAgbmFtZV8uU2V0QWxsb2NhdGVk
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIG5hbWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubmFtZSkK
LX0KLQotLy8gb3B0aW9uYWwgaW50MzIgbnVtYmVyID0gMzsKLWJvb2wgRmllbGREZXNjcmlwdG9y
UHJvdG86Omhhc19udW1iZXIoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4
MDAwMDAwMDJ1KSAhPSAwOwotfQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19u
dW1iZXIoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwMnU7Ci19Ci12b2lkIEZpZWxk
RGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfbnVtYmVyKCkgewotICBfaGFzX2JpdHNfWzBdICY9
IH4weDAwMDAwMDAydTsKLX0KLXZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OmNsZWFyX251bWJl
cigpIHsKLSAgbnVtYmVyXyA9IDA7Ci0gIGNsZWFyX2hhc19udW1iZXIoKTsKLX0KLSA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludDMyIEZpZWxkRGVzY3JpcHRvclByb3RvOjpudW1iZXIoKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVm
LkZpZWxkRGVzY3JpcHRvclByb3RvLm51bWJlcikKLSAgcmV0dXJuIG51bWJlcl87Ci19Ci0gdm9p
ZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X251bWJlcig6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dDMyIHZhbHVlKSB7Ci0gIHNldF9oYXNfbnVtYmVyKCk7Ci0gIG51bWJlcl8gPSB2YWx1ZTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmll
bGREZXNjcmlwdG9yUHJvdG8ubnVtYmVyKQotfQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnByb3Rv
YnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsIGxhYmVsID0gNDsKLWJvb2wgRmllbGREZXNj
cmlwdG9yUHJvdG86Omhhc19sYWJlbCgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBd
ICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci12b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRf
aGFzX2xhYmVsKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDR1OwotfQotdm9pZCBG
aWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX2xhYmVsKCkgewotICBfaGFzX2JpdHNfWzBd
ICY9IH4weDAwMDAwMDA0dTsKLX0KLXZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OmNsZWFyX2xh
YmVsKCkgewotICBsYWJlbF8gPSAxOwotICBjbGVhcl9oYXNfbGFiZWwoKTsKLX0KLSA6Omdvb2ds
ZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsIEZpZWxkRGVzY3JpcHRvclBy
b3RvOjpsYWJlbCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X2dldDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubGFiZWwpCi0gIHJldHVy
biBzdGF0aWNfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90b19M
YWJlbCA+KGxhYmVsXyk7Ci19Ci0gdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2xhYmVs
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwgdmFsdWUpIHsK
LSAgYXNzZXJ0KDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxf
SXNWYWxpZCh2YWx1ZSkpOwotICBzZXRfaGFzX2xhYmVsKCk7Ci0gIGxhYmVsXyA9IHZhbHVlOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5G
aWVsZERlc2NyaXB0b3JQcm90by5sYWJlbCkKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90
b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlIHR5cGUgPSA1OwotYm9vbCBGaWVsZERlc2Ny
aXB0b3JQcm90bzo6aGFzX3R5cGUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAm
IDB4MDAwMDAwMDh1KSAhPSAwOwotfQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2hh
c190eXBlKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDh1OwotfQotdm9pZCBGaWVs
ZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX3R5cGUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0g
fjB4MDAwMDAwMDh1OwotfQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfdHlwZSgp
IHsKLSAgdHlwZV8gPSAxOwotICBjbGVhcl9oYXNfdHlwZSgpOwotfQotIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSBGaWVsZERlc2NyaXB0b3JQcm90bzo6dHlw
ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udHlwZSkKLSAgcmV0dXJuIHN0YXRpY19j
YXN0PCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUgPih0eXBl
Xyk7Ci19Ci0gdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X3R5cGUoOjpnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlIHZhbHVlKSB7Ci0gIGFzc2VydCg6Omdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfSXNWYWxpZCh2YWx1ZSkp
OwotICBzZXRfaGFzX3R5cGUoKTsKLSAgdHlwZV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJv
dG8udHlwZSkKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIHR5cGVfbmFtZSA9IDY7Ci1ib29sIEZp
ZWxkRGVzY3JpcHRvclByb3RvOjpoYXNfdHlwZV9uYW1lKCkgY29uc3QgewotICByZXR1cm4gKF9o
YXNfYml0c19bMF0gJiAweDAwMDAwMDEwdSkgIT0gMDsKLX0KLXZvaWQgRmllbGREZXNjcmlwdG9y
UHJvdG86OnNldF9oYXNfdHlwZV9uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAw
MTB1OwotfQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX3R5cGVfbmFtZSgp
IHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAxMHU7Ci19Ci12b2lkIEZpZWxkRGVzY3Jp
cHRvclByb3RvOjpjbGVhcl90eXBlX25hbWUoKSB7Ci0gIHR5cGVfbmFtZV8uQ2xlYXJUb0VtcHR5
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfdHlwZV9uYW1lKCk7Ci19Ci0gY29uc3QgOjpzdGQ6
OnN0cmluZyYgRmllbGREZXNjcmlwdG9yUHJvdG86OnR5cGVfbmFtZSgpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGRE
ZXNjcmlwdG9yUHJvdG8udHlwZV9uYW1lKQotICByZXR1cm4gdHlwZV9uYW1lXy5HZXROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci19Ci0gdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X3R5cGVfbmFtZShjb25z
dCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX3R5cGVfbmFtZSgpOwotICB0eXBl
X25hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnR5cGVf
bmFtZSkKLX0KLSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfdHlwZV9uYW1lKGNvbnN0
IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfdHlwZV9uYW1lKCk7Ci0gIHR5cGVfbmFtZV8uU2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQ
cm90by50eXBlX25hbWUpCi19Ci0gdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X3R5cGVf
bmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc190eXBlX25h
bWUoKTsKLSAgdHlwZV9uYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRmll
bGREZXNjcmlwdG9yUHJvdG8udHlwZV9uYW1lKQotfQotIDo6c3RkOjpzdHJpbmcqIEZpZWxkRGVz
Y3JpcHRvclByb3RvOjptdXRhYmxlX3R5cGVfbmFtZSgpIHsKLSAgc2V0X2hhc190eXBlX25hbWUo
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnBy
b3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnR5cGVfbmFtZSkKLSAgcmV0dXJuIHR5cGVfbmFt
ZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWVsZERlc2NyaXB0
b3JQcm90bzo6cmVsZWFzZV90eXBlX25hbWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50
eXBlX25hbWUpCi0gIGNsZWFyX2hhc190eXBlX25hbWUoKTsKLSAgcmV0dXJuIHR5cGVfbmFtZV8u
UmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRf
YWxsb2NhdGVkX3R5cGVfbmFtZSg6OnN0ZDo6c3RyaW5nKiB0eXBlX25hbWUpIHsKLSAgaWYgKHR5
cGVfbmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc190eXBlX25hbWUoKTsKLSAgfSBlbHNlIHsK
LSAgICBjbGVhcl9oYXNfdHlwZV9uYW1lKCk7Ci0gIH0KLSAgdHlwZV9uYW1lXy5TZXRBbGxvY2F0
ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSwgdHlwZV9uYW1lKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3Rv
LnR5cGVfbmFtZSkKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGV4dGVuZGVlID0gMjsKLWJvb2wg
RmllbGREZXNjcmlwdG9yUHJvdG86Omhhc19leHRlbmRlZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChf
aGFzX2JpdHNfWzBdICYgMHgwMDAwMDAyMHUpICE9IDA7Ci19Ci12b2lkIEZpZWxkRGVzY3JpcHRv
clByb3RvOjpzZXRfaGFzX2V4dGVuZGVlKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAw
MjB1OwotfQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX2V4dGVuZGVlKCkg
ewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDIwdTsKLX0KLXZvaWQgRmllbGREZXNjcmlw
dG9yUHJvdG86OmNsZWFyX2V4dGVuZGVlKCkgewotICBleHRlbmRlZV8uQ2xlYXJUb0VtcHR5Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfZXh0ZW5kZWUoKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3Ry
aW5nJiBGaWVsZERlc2NyaXB0b3JQcm90bzo6ZXh0ZW5kZWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3Jp
cHRvclByb3RvLmV4dGVuZGVlKQotICByZXR1cm4gZXh0ZW5kZWVfLkdldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LX0KLSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfZXh0ZW5kZWUoY29uc3QgOjpzdGQ6
OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19leHRlbmRlZSgpOwotICBleHRlbmRlZV8uU2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZXh0ZW5kZWUpCi19Ci0g
dm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2V4dGVuZGVlKGNvbnN0IGNoYXIqIHZhbHVl
KSB7Ci0gIHNldF9oYXNfZXh0ZW5kZWUoKTsKLSAgZXh0ZW5kZWVfLlNldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6
OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZXh0ZW5kZWUp
Ci19Ci0gdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2V4dGVuZGVlKGNvbnN0IGNoYXIq
IHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBzZXRfaGFzX2V4dGVuZGVlKCk7Ci0gIGV4dGVuZGVl
Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8u
ZXh0ZW5kZWUpCi19Ci0gOjpzdGQ6OnN0cmluZyogRmllbGREZXNjcmlwdG9yUHJvdG86Om11dGFi
bGVfZXh0ZW5kZWUoKSB7Ci0gIHNldF9oYXNfZXh0ZW5kZWUoKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRv
clByb3RvLmV4dGVuZGVlKQotICByZXR1cm4gZXh0ZW5kZWVfLk11dGFibGVOb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci0gOjpzdGQ6OnN0cmluZyogRmllbGREZXNjcmlwdG9yUHJvdG86OnJlbGVhc2VfZXh0ZW5k
ZWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2ds
ZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5leHRlbmRlZSkKLSAgY2xlYXJfaGFzX2V4
dGVuZGVlKCk7Ci0gIHJldHVybiBleHRlbmRlZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2
b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX2V4dGVuZGVlKDo6c3RkOjpz
dHJpbmcqIGV4dGVuZGVlKSB7Ci0gIGlmIChleHRlbmRlZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hh
c19leHRlbmRlZSgpOwotICB9IGVsc2UgewotICAgIGNsZWFyX2hhc19leHRlbmRlZSgpOwotICB9
Ci0gIGV4dGVuZGVlXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZXh0ZW5kZWUpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9i
dWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZXh0ZW5kZWUpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmlu
ZyBkZWZhdWx0X3ZhbHVlID0gNzsKLWJvb2wgRmllbGREZXNjcmlwdG9yUHJvdG86Omhhc19kZWZh
dWx0X3ZhbHVlKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDQw
dSkgIT0gMDsKLX0KLXZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfZGVmYXVsdF92
YWx1ZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDQwdTsKLX0KLXZvaWQgRmllbGRE
ZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hhc19kZWZhdWx0X3ZhbHVlKCkgewotICBfaGFzX2JpdHNf
WzBdICY9IH4weDAwMDAwMDQwdTsKLX0KLXZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OmNsZWFy
X2RlZmF1bHRfdmFsdWUoKSB7Ci0gIGRlZmF1bHRfdmFsdWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLSAgY2xlYXJfaGFzX2RlZmF1bHRfdmFsdWUoKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3Ry
aW5nJiBGaWVsZERlc2NyaXB0b3JQcm90bzo6ZGVmYXVsdF92YWx1ZSgpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGRE
ZXNjcmlwdG9yUHJvdG8uZGVmYXVsdF92YWx1ZSkKLSAgcmV0dXJuIGRlZmF1bHRfdmFsdWVfLkdl
dE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfZGVmYXVs
dF92YWx1ZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX2RlZmF1bHRf
dmFsdWUoKTsKLSAgZGVmYXVsdF92YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGRE
ZXNjcmlwdG9yUHJvdG8uZGVmYXVsdF92YWx1ZSkKLX0KLSB2b2lkIEZpZWxkRGVzY3JpcHRvclBy
b3RvOjpzZXRfZGVmYXVsdF92YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFzX2Rl
ZmF1bHRfdmFsdWUoKTsKLSAgZGVmYXVsdF92YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpz
dHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9j
aGFyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZWZhdWx0X3ZhbHVlKQot
fQotIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9kZWZhdWx0X3ZhbHVlKGNvbnN0IGNo
YXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBzZXRfaGFzX2RlZmF1bHRfdmFsdWUoKTsKLSAg
ZGVmYXVsdF92YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVz
Y3JpcHRvclByb3RvLmRlZmF1bHRfdmFsdWUpCi19Ci0gOjpzdGQ6OnN0cmluZyogRmllbGREZXNj
cmlwdG9yUHJvdG86Om11dGFibGVfZGVmYXVsdF92YWx1ZSgpIHsKLSAgc2V0X2hhc19kZWZhdWx0
X3ZhbHVlKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdv
b2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZWZhdWx0X3ZhbHVlKQotICByZXR1
cm4gZGVmYXVsdF92YWx1ZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5n
KiBGaWVsZERlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9kZWZhdWx0X3ZhbHVlKCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRmll
bGREZXNjcmlwdG9yUHJvdG8uZGVmYXVsdF92YWx1ZSkKLSAgY2xlYXJfaGFzX2RlZmF1bHRfdmFs
dWUoKTsKLSAgcmV0dXJuIGRlZmF1bHRfdmFsdWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0g
dm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2FsbG9jYXRlZF9kZWZhdWx0X3ZhbHVlKDo6
c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUpIHsKLSAgaWYgKGRlZmF1bHRfdmFsdWUgIT0gTlVM
TCkgewotICAgIHNldF9oYXNfZGVmYXVsdF92YWx1ZSgpOwotICB9IGVsc2UgewotICAgIGNsZWFy
X2hhc19kZWZhdWx0X3ZhbHVlKCk7Ci0gIH0KLSAgZGVmYXVsdF92YWx1ZV8uU2V0QWxsb2NhdGVk
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIGRlZmF1bHRfdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJv
dG8uZGVmYXVsdF92YWx1ZSkKLX0KLQotLy8gb3B0aW9uYWwgaW50MzIgb25lb2ZfaW5kZXggPSA5
OwotYm9vbCBGaWVsZERlc2NyaXB0b3JQcm90bzo6aGFzX29uZW9mX2luZGV4KCkgY29uc3Qgewot
ICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDgwdSkgIT0gMDsKLX0KLXZvaWQgRmll
bGREZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfb25lb2ZfaW5kZXgoKSB7Ci0gIF9oYXNfYml0c19b
MF0gfD0gMHgwMDAwMDA4MHU7Ci19Ci12b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpjbGVhcl9o
YXNfb25lb2ZfaW5kZXgoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwODB1OwotfQot
dm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfb25lb2ZfaW5kZXgoKSB7Ci0gIG9uZW9m
X2luZGV4XyA9IDA7Ci0gIGNsZWFyX2hhc19vbmVvZl9pbmRleCgpOwotfQotIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50MzIgRmllbGREZXNjcmlwdG9yUHJvdG86Om9uZW9mX2luZGV4KCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1
Zi5GaWVsZERlc2NyaXB0b3JQcm90by5vbmVvZl9pbmRleCkKLSAgcmV0dXJuIG9uZW9mX2luZGV4
XzsKLX0KLSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfb25lb2ZfaW5kZXgoOjpnb29n
bGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSkgewotICBzZXRfaGFzX29uZW9mX2luZGV4KCk7Ci0g
IG9uZW9mX2luZGV4XyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5vbmVvZl9pbmRleCkK
LX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGpzb25fbmFtZSA9IDEwOwotYm9vbCBGaWVsZERlc2Ny
aXB0b3JQcm90bzo6aGFzX2pzb25fbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNf
WzBdICYgMHgwMDAwMDEwMHUpICE9IDA7Ci19Ci12b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpz
ZXRfaGFzX2pzb25fbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMTAwdTsKLX0K
LXZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hhc19qc29uX25hbWUoKSB7Ci0gIF9o
YXNfYml0c19bMF0gJj0gfjB4MDAwMDAxMDB1OwotfQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90
bzo6Y2xlYXJfanNvbl9uYW1lKCkgewotICBqc29uX25hbWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLSAgY2xlYXJfaGFzX2pzb25fbmFtZSgpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcm
IEZpZWxkRGVzY3JpcHRvclByb3RvOjpqc29uX25hbWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRv
clByb3RvLmpzb25fbmFtZSkKLSAgcmV0dXJuIGpzb25fbmFtZV8uR2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
fQotIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9qc29uX25hbWUoY29uc3QgOjpzdGQ6
OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19qc29uX25hbWUoKTsKLSAganNvbl9uYW1lXy5T
ZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5qc29uX25hbWUpCi19
Ci0gdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2pzb25fbmFtZShjb25zdCBjaGFyKiB2
YWx1ZSkgewotICBzZXRfaGFzX2pzb25fbmFtZSgpOwotICBqc29uX25hbWVfLlNldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uanNv
bl9uYW1lKQotfQotIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9qc29uX25hbWUoY29u
c3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfanNvbl9uYW1lKCk7Ci0g
IGpzb25fbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3Jp
cHRvclByb3RvLmpzb25fbmFtZSkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWVsZERlc2NyaXB0b3JQ
cm90bzo6bXV0YWJsZV9qc29uX25hbWUoKSB7Ci0gIHNldF9oYXNfanNvbl9uYW1lKCk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5G
aWVsZERlc2NyaXB0b3JQcm90by5qc29uX25hbWUpCi0gIHJldHVybiBqc29uX25hbWVfLk11dGFi
bGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogRmllbGREZXNjcmlwdG9yUHJvdG86
OnJlbGVhc2VfanNvbl9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uanNvbl9uYW1l
KQotICBjbGVhcl9oYXNfanNvbl9uYW1lKCk7Ci0gIHJldHVybiBqc29uX25hbWVfLlJlbGVhc2VO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2FsbG9jYXRl
ZF9qc29uX25hbWUoOjpzdGQ6OnN0cmluZyoganNvbl9uYW1lKSB7Ci0gIGlmIChqc29uX25hbWUg
IT0gTlVMTCkgewotICAgIHNldF9oYXNfanNvbl9uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xl
YXJfaGFzX2pzb25fbmFtZSgpOwotICB9Ci0gIGpzb25fbmFtZV8uU2V0QWxsb2NhdGVkTm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCksIGpzb25fbmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9z
ZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5qc29uX25h
bWUpCi19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zIG9wdGlv
bnMgPSA4OwotYm9vbCBGaWVsZERlc2NyaXB0b3JQcm90bzo6aGFzX29wdGlvbnMoKSBjb25zdCB7
Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAyMDB1KSAhPSAwOwotfQotdm9pZCBG
aWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19vcHRpb25zKCkgewotICBfaGFzX2JpdHNfWzBd
IHw9IDB4MDAwMDAyMDB1OwotfQotdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFz
X29wdGlvbnMoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAyMDB1OwotfQotdm9pZCBG
aWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfb3B0aW9ucygpIHsKLSAgaWYgKG9wdGlvbnNfICE9
IE5VTEwpIG9wdGlvbnNfLT46Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uczo6Q2xlYXIo
KTsKLSAgY2xlYXJfaGFzX29wdGlvbnMoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RmllbGRPcHRpb25zJiBGaWVsZERlc2NyaXB0b3JQcm90bzo6b3B0aW9ucygpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmll
bGREZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfICE9IE5VTEwgPyAq
b3B0aW9uc18gOiAqZGVmYXVsdF9pbnN0YW5jZV8tPm9wdGlvbnNfOwotfQotOjpnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZE9wdGlvbnMqIEZpZWxkRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX29wdGlv
bnMoKSB7Ci0gIHNldF9oYXNfb3B0aW9ucygpOwotICBpZiAob3B0aW9uc18gPT0gTlVMTCkgewot
ICAgIG9wdGlvbnNfID0gbmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRPcHRpb25zOwotICB9
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90
b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc187Ci19
Ci06Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9ucyogRmllbGREZXNjcmlwdG9yUHJvdG86
OnJlbGVhc2Vfb3B0aW9ucygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi0g
IGNsZWFyX2hhc19vcHRpb25zKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRPcHRpb25z
KiB0ZW1wID0gb3B0aW9uc187Ci0gIG9wdGlvbnNfID0gTlVMTDsKLSAgcmV0dXJuIHRlbXA7Ci19
Ci12b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX29wdGlvbnMoOjpnb29n
bGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnMqIG9wdGlvbnMpIHsKLSAgZGVsZXRlIG9wdGlvbnNf
OwotICBvcHRpb25zXyA9IG9wdGlvbnM7Ci0gIGlmIChvcHRpb25zKSB7Ci0gICAgc2V0X2hhc19v
cHRpb25zKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX29wdGlvbnMoKTsKLSAgfQotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJv
dG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLX0KLQotI2VuZGlmICAvLyBQUk9U
T0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWYgIWRlZmlu
ZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBPbmVvZkRlc2NyaXB0
b3JQcm90bzo6a05hbWVGaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIp
IHx8IF9NU0NfVkVSID49IDE5MDAKLQotT25lb2ZEZXNjcmlwdG9yUHJvdG86Ok9uZW9mRGVzY3Jp
cHRvclByb3RvKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFs
X21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90
bykKLX0KLQotdm9pZCBPbmVvZkRlc2NyaXB0b3JQcm90bzo6SW5pdEFzRGVmYXVsdEluc3RhbmNl
KCkgewotfQotCi1PbmVvZkRlc2NyaXB0b3JQcm90bzo6T25lb2ZEZXNjcmlwdG9yUHJvdG8oY29u
c3QgT25lb2ZEZXNjcmlwdG9yUHJvdG8mIGZyb20pCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3Io
KTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29w
eV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8pCi19Ci0K
LXZvaWQgT25lb2ZEZXNjcmlwdG9yUHJvdG86OlNoYXJlZEN0b3IoKSB7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAw
OwotICBuYW1lXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18s
IDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci19Ci0KLU9uZW9mRGVzY3JpcHRvclByb3RvOjp+T25l
b2ZEZXNjcmlwdG9yUHJvdG8oKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0
cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bykKLSAgU2hhcmVkRHRv
cigpOwotfQotCi12b2lkIE9uZW9mRGVzY3JpcHRvclByb3RvOjpTaGFyZWREdG9yKCkgewotICBu
YW1lXy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNl
XykgewotICB9Ci19Ci0KLXZvaWQgT25lb2ZEZXNjcmlwdG9yUHJvdG86OlNldENhY2hlZFNpemUo
aW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4o
KTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJ
VEVTX0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBPbmVv
ZkRlc2NyaXB0b3JQcm90bzo6ZGVzY3JpcHRvcigpIHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3Jp
cHRvcnNPbmNlKCk7Ci0gIHJldHVybiBPbmVvZkRlc2NyaXB0b3JQcm90b19kZXNjcmlwdG9yXzsK
LX0KLQotY29uc3QgT25lb2ZEZXNjcmlwdG9yUHJvdG8mIE9uZW9mRGVzY3JpcHRvclByb3RvOjpk
ZWZhdWx0X2luc3RhbmNlKCkgewotICBpZiAoZGVmYXVsdF9pbnN0YW5jZV8gPT0gTlVMTCkgcHJv
dG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwot
ICByZXR1cm4gKmRlZmF1bHRfaW5zdGFuY2VfOwotfQotCi1PbmVvZkRlc2NyaXB0b3JQcm90byog
T25lb2ZEZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotT25lb2ZE
ZXNjcmlwdG9yUHJvdG8qIE9uZW9mRGVzY3JpcHRvclByb3RvOjpOZXcoOjpnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgT25lb2ZEZXNjcmlwdG9yUHJvdG8qIG4gPSBu
ZXcgT25lb2ZEZXNjcmlwdG9yUHJvdG87Ci0gIGlmIChhcmVuYSAhPSBOVUxMKSB7Ci0gICAgYXJl
bmEtPk93bihuKTsKLSAgfQotICByZXR1cm4gbjsKLX0KLQotdm9pZCBPbmVvZkRlc2NyaXB0b3JQ
cm90bzo6Q2xlYXIoKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVh
cl9zdGFydDpnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8pCi0gIGlmIChoYXNf
bmFtZSgpKSB7Ci0gICAgbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICB9Ci0gIDo6
bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci0gIGlmIChfaW50ZXJu
YWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93
bl9maWVsZHMoKS0+Q2xlYXIoKTsKLSAgfQotfQotCi1ib29sIE9uZW9mRGVzY3JpcHRvclByb3Rv
OjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlm
ICghR09PR0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bykKLSAgZm9y
ICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9v
bD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7
Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51
bWJlcih0YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gICAgICBj
YXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxMCkgewotICAgICAgICAgIERPXyg6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAg
ICAgICAgICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9uYW1lKCkpKTsKLSAgICAgICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFt
ZWRGaWVsZCgKLSAgICAgICAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5s
ZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0
b3JQcm90by5uYW1lIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVf
dW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdEF0RW5kKCkpIGdv
dG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6IHsK
LSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAgICBpZiAodGFnID09IDAgfHwKLSAgICAgICAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdX
aXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7Ci0gICAgICAgICAgZ290byBz
dWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0gICAgICAgICAgICAgIGlucHV0LCB0YWcsIG11
dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNj
ZXNzOmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90bykKLSAgcmV0dXJuIHRydWU7
Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpn
b29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8pCi0gIHJldHVybiBmYWxzZTsKLSN1
bmRlZiBET18KLX0KLQotdm9pZCBPbmVvZkRlc2NyaXB0b3JQcm90bzo6U2VyaWFsaXplV2l0aENh
Y2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFt
KiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6
ZV9zdGFydDpnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8pCi0gIC8vIG9wdGlv
bmFsIHN0cmluZyBuYW1lID0gMTsKLSAgaWYgKGhhc19uYW1lKCkpIHsKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVs
ZCgKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwK
LSAgICAgICJnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ubmFtZSIpOwotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmlu
Z01heWJlQWxpYXNlZCgKLSAgICAgIDEsIHRoaXMtPm5hbWUoKSwgb3V0cHV0KTsKLSAgfQotCi0g
IGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25G
aWVsZHMoCi0gICAgICAgIHVua25vd25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLk9uZW9m
RGVzY3JpcHRvclByb3RvKQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBPbmVvZkRl
c2NyaXB0b3JQcm90bzo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29nbGUucHJvdG9idWYuT25l
b2ZEZXNjcmlwdG9yUHJvdG8pCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgaWYg
KGhhc19uYW1lKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRh
KCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuT25l
b2ZEZXNjcmlwdG9yUHJvdG8ubmFtZSIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAot
ICAgICAgICAxLCB0aGlzLT5uYW1lKCksIHRhcmdldCk7Ci0gIH0KLQotICBpZiAoX2ludGVybmFs
X21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRz
VG9BcnJheSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwgdGFyZ2V0KTsKLSAgfQotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJv
dG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8pCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBP
bmVvZkRlc2NyaXB0b3JQcm90bzo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk9uZW9m
RGVzY3JpcHRvclByb3RvKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgLy8gb3B0aW9uYWwg
c3RyaW5nIG5hbWUgPSAxOwotICBpZiAoaGFzX25hbWUoKSkgewotICAgIHRvdGFsX3NpemUgKz0g
MSArCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
U3RyaW5nU2l6ZSgKLSAgICAgICAgdGhpcy0+bmFtZSgpKTsKLSAgfQotCi0gIGlmIChfaW50ZXJu
YWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHRvdGFsX3NpemUgKz0K
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OkNvbXB1dGVV
bmtub3duRmllbGRzU2l6ZSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSk7Ci0gIH0KLSAgR09P
R0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRv
dGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1
cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBPbmVvZkRlc2NyaXB0b3JQcm90bzo6TWVyZ2VGcm9t
KGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLk9uZW9mRGVzY3JpcHRvclByb3RvKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZy
b20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25zdCBPbmVvZkRlc2Ny
aXB0b3JQcm90byogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IE9uZW9mRGVzY3JpcHRvclByb3RvPigKLSAg
ICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnBy
b3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvKQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2UgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X3N1
Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvKQotICAgIE1lcmdlRnJv
bSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIE9uZW9mRGVzY3JpcHRvclByb3RvOjpNZXJnZUZy
b20oY29uc3QgT25lb2ZEZXNjcmlwdG9yUHJvdG8mIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5PbmVvZkRlc2NyaXB0b3JQcm90bykKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9t
ID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgaWYgKGZyb20uX2hhc19iaXRz
X1swIC8gMzJdICYgKDB4ZmZ1IDw8ICgwICUgMzIpKSkgewotICAgIGlmIChmcm9tLmhhc19uYW1l
KCkpIHsKLSAgICAgIHNldF9oYXNfbmFtZSgpOwotICAgICAgbmFtZV8uQXNzaWduV2l0aERlZmF1
bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpLCBmcm9tLm5hbWVfKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyb20uX2ludGVybmFsX21l
dGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vua25vd25fZmll
bGRzKCktPk1lcmdlRnJvbShmcm9tLnVua25vd25fZmllbGRzKCkpOwotICB9Ci19Ci0KLXZvaWQg
T25lb2ZEZXNjcmlwdG9yUHJvdG86OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVk
X2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8pCi0g
IGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9t
KTsKLX0KLQotdm9pZCBPbmVvZkRlc2NyaXB0b3JQcm90bzo6Q29weUZyb20oY29uc3QgT25lb2ZE
ZXNjcmlwdG9yUHJvdG8mIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFz
c19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRv
clByb3RvKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJn
ZUZyb20oZnJvbSk7Ci19Ci0KLWJvb2wgT25lb2ZEZXNjcmlwdG9yUHJvdG86OklzSW5pdGlhbGl6
ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgT25lb2ZEZXNjcmlwdG9y
UHJvdG86OlN3YXAoT25lb2ZEZXNjcmlwdG9yUHJvdG8qIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9
PSB0aGlzKSByZXR1cm47Ci0gIEludGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lkIE9uZW9mRGVz
Y3JpcHRvclByb3RvOjpJbnRlcm5hbFN3YXAoT25lb2ZEZXNjcmlwdG9yUHJvdG8qIG90aGVyKSB7
Ci0gIG5hbWVfLlN3YXAoJm90aGVyLT5uYW1lXyk7Ci0gIHN0ZDo6c3dhcChfaGFzX2JpdHNfWzBd
LCBvdGhlci0+X2hhc19iaXRzX1swXSk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3Ro
ZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3Ro
ZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIE9u
ZW9mRGVzY3JpcHRvclByb3RvOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNz
aWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0
YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBPbmVvZkRlc2NyaXB0b3JQcm90b19kZXNj
cmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IE9uZW9mRGVzY3JpcHRvclByb3RvX3Jl
ZmxlY3Rpb25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVf
Tk9UX0lOX0hFQURFUlMKLS8vIE9uZW9mRGVzY3JpcHRvclByb3RvCi0KLS8vIG9wdGlvbmFsIHN0
cmluZyBuYW1lID0gMTsKLWJvb2wgT25lb2ZEZXNjcmlwdG9yUHJvdG86Omhhc19uYW1lKCkgY29u
c3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLXZv
aWQgT25lb2ZEZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1sw
XSB8PSAweDAwMDAwMDAxdTsKLX0KLXZvaWQgT25lb2ZEZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hh
c19uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAxdTsKLX0KLXZvaWQgT25l
b2ZEZXNjcmlwdG9yUHJvdG86OmNsZWFyX25hbWUoKSB7Ci0gIG5hbWVfLkNsZWFyVG9FbXB0eU5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX25hbWUoKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5n
JiBPbmVvZkRlc2NyaXB0b3JQcm90bzo6bmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJv
dG8ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIE9uZW9m
RGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewot
ICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuT25lb2ZE
ZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLSB2b2lkIE9uZW9mRGVzY3JpcHRvclByb3RvOjpzZXRf
bmFtZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQ
cm90by5uYW1lKQotfQotIHZvaWQgT25lb2ZEZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0
IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8u
U2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLm5h
bWUpCi19Ci0gOjpzdGQ6OnN0cmluZyogT25lb2ZEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfbmFt
ZSgpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5uYW1lKQot
ICByZXR1cm4gbmFtZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBP
bmVvZkRlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9y
UHJvdG8ubmFtZSkKLSAgY2xlYXJfaGFzX25hbWUoKTsKLSAgcmV0dXJuIG5hbWVfLlJlbGVhc2VO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBPbmVvZkRlc2NyaXB0b3JQcm90bzo6c2V0X2FsbG9jYXRl
ZF9uYW1lKDo6c3RkOjpzdHJpbmcqIG5hbWUpIHsKLSAgaWYgKG5hbWUgIT0gTlVMTCkgewotICAg
IHNldF9oYXNfbmFtZSgpOwotICB9IGVsc2UgewotICAgIGNsZWFyX2hhc19uYW1lKCk7Ci0gIH0K
LSAgbmFtZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIG5hbWUpOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuT25lb2ZE
ZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9U
X0lOX0hFQURFUlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8
IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBFbnVtRGVzY3JpcHRvclByb3RvOjprTmFtZUZp
ZWxkTnVtYmVyOwotY29uc3QgaW50IEVudW1EZXNjcmlwdG9yUHJvdG86OmtWYWx1ZUZpZWxkTnVt
YmVyOwotY29uc3QgaW50IEVudW1EZXNjcmlwdG9yUHJvdG86OmtPcHRpb25zRmllbGROdW1iZXI7
Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUVu
dW1EZXNjcmlwdG9yUHJvdG86OkVudW1EZXNjcmlwdG9yUHJvdG8oKQotICA6IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVk
Q3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xl
LnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8pCi19Ci0KLXZvaWQgRW51bURlc2NyaXB0b3JQ
cm90bzo6SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotICBvcHRpb25zXyA9IGNvbnN0X2Nhc3Q8
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bU9wdGlvbnMqPigmOjpnb29nbGU6OnByb3RvYnVmOjpF
bnVtT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLX0KLQotRW51bURlc2NyaXB0b3JQcm90
bzo6RW51bURlc2NyaXB0b3JQcm90byhjb25zdCBFbnVtRGVzY3JpcHRvclByb3RvJiBmcm9tKQot
ICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRlcm5hbF9tZXRhZGF0
YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkVu
dW1EZXNjcmlwdG9yUHJvdG8pCi19Ci0KLXZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6U2hhcmVk
Q3RvcigpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmco
KTsKLSAgX2NhY2hlZF9zaXplXyA9IDA7Ci0gIG5hbWVfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LSAgb3B0aW9uc18gPSBOVUxMOwotICA6Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXplb2YoX2hh
c19iaXRzXykpOwotfQotCi1FbnVtRGVzY3JpcHRvclByb3RvOjp+RW51bURlc2NyaXB0b3JQcm90
bygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0b3I6Z29vZ2xlLnBy
b3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8pCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBF
bnVtRGVzY3JpcHRvclByb3RvOjpTaGFyZWREdG9yKCkgewotICBuYW1lXy5EZXN0cm95Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNlXykgewotICAgIGRlbGV0ZSBv
cHRpb25zXzsKLSAgfQotfQotCi12b2lkIEVudW1EZXNjcmlwdG9yUHJvdG86OlNldENhY2hlZFNp
emUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVH
SU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBF
bnVtRGVzY3JpcHRvclByb3RvOjpkZXNjcmlwdG9yKCkgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNj
cmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIEVudW1EZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl87
Ci19Ci0KLWNvbnN0IEVudW1EZXNjcmlwdG9yUHJvdG8mIEVudW1EZXNjcmlwdG9yUHJvdG86OmRl
ZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90
b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0g
IHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLUVudW1EZXNjcmlwdG9yUHJvdG8qIEVu
dW1EZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotRW51bURlc2Ny
aXB0b3JQcm90byogRW51bURlc2NyaXB0b3JQcm90bzo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6
QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIEVudW1EZXNjcmlwdG9yUHJvdG8qIG4gPSBuZXcgRW51
bURlc2NyaXB0b3JQcm90bzsKLSAgaWYgKGFyZW5hICE9IE5VTEwpIHsKLSAgICBhcmVuYS0+T3du
KG4pOwotICB9Ci0gIHJldHVybiBuOwotfQotCi12b2lkIEVudW1EZXNjcmlwdG9yUHJvdG86OkNs
ZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6
Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8pCi0gIGlmIChfaGFzX2JpdHNfWzAg
LyAzMl0gJiA1dSkgewotICAgIGlmIChoYXNfbmFtZSgpKSB7Ci0gICAgICBuYW1lXy5DbGVhclRv
RW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci0gICAgfQotICAgIGlmIChoYXNfb3B0aW9ucygpKSB7Ci0gICAg
ICBpZiAob3B0aW9uc18gIT0gTlVMTCkgb3B0aW9uc18tPjo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51
bU9wdGlvbnM6OkNsZWFyKCk7Ci0gICAgfQotICB9Ci0gIHZhbHVlXy5DbGVhcigpOwotICA6Om1l
bXNldChfaGFzX2JpdHNfLCAwLCBzaXplb2YoX2hhc19iaXRzXykpOwotICBpZiAoX2ludGVybmFs
X21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vua25vd25f
ZmllbGRzKCktPkNsZWFyKCk7Ci0gIH0KLX0KLQotYm9vbCBFbnVtRGVzY3JpcHRvclByb3RvOjpN
ZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6
Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICgh
R09PR0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBh
cnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvKQotICBmb3IgKDs7
KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyLCBib29sPiBw
ID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0b2ZmKDEyNyk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAg
ICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVy
KHRhZykpIHsKLSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgICAgIGNhc2Ug
MTogewotICAgICAgICBpZiAodGFnID09IDEwKSB7Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAg
ICAgICAgIGlucHV0LCB0aGlzLT5tdXRhYmxlX25hbWUoKSkpOwotICAgICAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZp
ZWxkKAotICAgICAgICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgpLmxlbmd0
aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dDo6UEFSU0UsCi0gICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJv
dG8ubmFtZSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1
YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMTgpKSBnb3RvIHBh
cnNlX3ZhbHVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQg
Lmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gdmFsdWUgPSAyOwotICAg
ICAgY2FzZSAyOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTgpIHsKLSAgICAgICAgIHBhcnNlX3Zh
bHVlOgotICAgICAgICAgIERPXyhpbnB1dC0+SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7Ci0g
ICAgICAgICBwYXJzZV9sb29wX3ZhbHVlOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2VOb1ZpcnR1YWxOb1JlY3Vy
c2lvbkRlcHRoKAotICAgICAgICAgICAgICAgIGlucHV0LCBhZGRfdmFsdWUoKSkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMTgpKSBnb3RvIHBhcnNlX2xvb3BfdmFsdWU7Ci0g
ICAgICAgIGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBp
ZiAoaW5wdXQtPkV4cGVjdFRhZygyNikpIGdvdG8gcGFyc2Vfb3B0aW9uczsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRW51bU9w
dGlvbnMgb3B0aW9ucyA9IDM7Ci0gICAgICBjYXNlIDM6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAy
NikgewotICAgICAgICAgcGFyc2Vfb3B0aW9uczoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsKAot
ICAgICAgICAgICAgICAgaW5wdXQsIG11dGFibGVfb3B0aW9ucygpKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoaW5wdXQtPkV4cGVjdEF0RW5kKCkpIGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAg
ICBpZiAodGFnID09IDAgfHwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5E
X0dST1VQKSB7Ci0gICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERP
Xyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0g
ICAgICAgICAgICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3Jp
cHRvclByb3RvKQotICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChwYXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclBy
b3RvKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgRW51bURlc2NyaXB0
b3JQcm90bzo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuRW51bURlc2Ny
aXB0b3JQcm90bykKLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBpZiAoaGFzX25h
bWUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZl
cmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhp
cy0+bmFtZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3Jp
cHRvclByb3RvLm5hbWUiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAxLCB0aGlzLT5uYW1l
KCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkVudW1W
YWx1ZURlc2NyaXB0b3JQcm90byB2YWx1ZSA9IDI7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAw
LCBuID0gdGhpcy0+dmFsdWVfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJh
eSgKLSAgICAgIDIsIHRoaXMtPnZhbHVlKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9u
YWwgLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucyBvcHRpb25zID0gMzsKLSAgaWYgKGhhc19v
cHRpb25zKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVUb0FycmF5KAotICAgICAgMywgKnRoaXMtPm9wdGlvbnNf
LCBvdXRwdXQpOwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3du
X2ZpZWxkcygpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dDo6U2VyaWFsaXplVW5rbm93bkZpZWxkcygKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwgb3V0
cHV0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpn
b29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bykKLX0KLQotOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50OCogRW51bURlc2NyaXB0b3JQcm90bzo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVz
VG9BcnJheSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpn
b29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bykKLSAgLy8gb3B0aW9uYWwgc3RyaW5n
IG5hbWUgPSAxOwotICBpZiAoaGFzX25hbWUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAg
dGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdv
b2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLm5hbWUiKTsKLSAgICB0YXJnZXQgPQot
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRl
U3RyaW5nVG9BcnJheSgKLSAgICAgICAgMSwgdGhpcy0+bmFtZSgpLCB0YXJnZXQpOwotICB9Ci0K
LSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8g
dmFsdWUgPSAyOwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMtPnZhbHVlX3Np
emUoKTsgaSA8IG47IGkrKykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJy
YXkoCi0gICAgICAgIDIsIHRoaXMtPnZhbHVlKGkpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0
aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucyBvcHRpb25zID0gMzsKLSAgaWYgKGhh
c19vcHRpb25zKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAot
ICAgICAgICAzLCAqdGhpcy0+b3B0aW9uc18sIHRhcmdldCk7Ci0gIH0KLQotICBpZiAoX2ludGVy
bmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmll
bGRzVG9BcnJheSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwgdGFyZ2V0KTsKLSAgfQotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUu
cHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bykKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50
IEVudW1EZXNjcmlwdG9yUHJvdG86OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVt
RGVzY3JpcHRvclByb3RvKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgaWYgKF9oYXNfYml0
c19bMCAvIDMyXSAmIDV1KSB7Ci0gICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAg
IGlmIChoYXNfbmFtZSgpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgKLSAg
ICAgICAgICB0aGlzLT5uYW1lKCkpOwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIC5nb29nbGUu
cHJvdG9idWYuRW51bU9wdGlvbnMgb3B0aW9ucyA9IDM7Ci0gICAgaWYgKGhhc19vcHRpb25zKCkp
IHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAg
ICAqdGhpcy0+b3B0aW9uc18pOwotICAgIH0KLQotICB9Ci0gIC8vIHJlcGVhdGVkIC5nb29nbGUu
cHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHZhbHVlID0gMjsKLSAgdG90YWxfc2l6
ZSArPSAxICogdGhpcy0+dmFsdWVfc2l6ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMt
PnZhbHVlX3NpemUoKTsgaSsrKSB7Ci0gICAgdG90YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0dWFs
KAotICAgICAgICB0aGlzLT52YWx1ZShpKSk7Ci0gIH0KLQotICBpZiAoX2ludGVybmFsX21ldGFk
YXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpDb21wdXRlVW5rbm93bkZp
ZWxkc1NpemUoCi0gICAgICAgIHVua25vd25fZmllbGRzKCkpOwotICB9Ci0gIEdPT0dMRV9TQUZF
X0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSB0b3RhbF9zaXpl
OwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLSAgcmV0dXJuIHRvdGFs
X3NpemU7Ci19Ci0KLXZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6TWVyZ2VGcm9tKGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVudW1E
ZXNjcmlwdG9yUHJvdG8pCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlz
KSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGNvbnN0IEVudW1EZXNjcmlwdG9yUHJvdG8q
IHNvdXJjZSA9IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nh
c3RUb0dlbmVyYXRlZDxjb25zdCBFbnVtRGVzY3JpcHRvclByb3RvPigKLSAgICAgICAgICAmZnJv
bSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLkVudW1E
ZXNjcmlwdG9yUHJvdG8pCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6UmVmbGVj
dGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpnb29nbGUu
cHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bykKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0g
IH0KLX0KLQotdm9pZCBFbnVtRGVzY3JpcHRvclByb3RvOjpNZXJnZUZyb20oY29uc3QgRW51bURl
c2NyaXB0b3JQcm90byYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNz
X3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9y
UHJvdG8pCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VG
cm9tRmFpbChfX0xJTkVfXyk7Ci0gIHZhbHVlXy5NZXJnZUZyb20oZnJvbS52YWx1ZV8pOwotICBp
ZiAoZnJvbS5faGFzX2JpdHNfWzAgLyAzMl0gJiAoMHhmZnUgPDwgKDAgJSAzMikpKSB7Ci0gICAg
aWYgKGZyb20uaGFzX25hbWUoKSkgewotICAgICAgc2V0X2hhc19uYW1lKCk7Ci0gICAgICBuYW1l
Xy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20ubmFtZV8pOwotICAgIH0KLSAgICBpZiAoZnJv
bS5oYXNfb3B0aW9ucygpKSB7Ci0gICAgICBtdXRhYmxlX29wdGlvbnMoKS0+Ojpnb29nbGU6OnBy
b3RvYnVmOjpFbnVtT3B0aW9uczo6TWVyZ2VGcm9tKGZyb20ub3B0aW9ucygpKTsKLSAgICB9Ci0g
IH0KLSAgaWYgKGZyb20uX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkp
IHsKLSAgICBtdXRhYmxlX3Vua25vd25fZmllbGRzKCktPk1lcmdlRnJvbShmcm9tLnVua25vd25f
ZmllbGRzKCkpOwotICB9Ci19Ci0KLXZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6Q29weUZyb20o
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5FbnVtRGVzY3JpcHRvclByb3RvKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBD
bGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLXZvaWQgRW51bURlc2NyaXB0b3JQcm90
bzo6Q29weUZyb20oY29uc3QgRW51bURlc2NyaXB0b3JQcm90byYgZnJvbSkgewotLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFydDpnb29nbGUu
cHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90bykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVy
bjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi1ib29sIEVudW1EZXNjcmlw
dG9yUHJvdG86OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgaWYgKCE6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpBbGxBcmVJbml0aWFsaXplZCh0aGlzLT52YWx1ZSgpKSkgcmV0dXJu
IGZhbHNlOwotICBpZiAoaGFzX29wdGlvbnMoKSkgewotICAgIGlmICghdGhpcy0+b3B0aW9uc18t
PklzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEVudW1EZXNjcmlwdG9yUHJvdG86OlN3YXAoRW51bURlc2NyaXB0b3JQcm90byogb3Ro
ZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVy
KTsKLX0KLXZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6SW50ZXJuYWxTd2FwKEVudW1EZXNjcmlw
dG9yUHJvdG8qIG90aGVyKSB7Ci0gIG5hbWVfLlN3YXAoJm90aGVyLT5uYW1lXyk7Ci0gIHZhbHVl
Xy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT52YWx1ZV8pOwotICBzdGQ6OnN3YXAob3B0aW9uc18s
IG90aGVyLT5vcHRpb25zXyk7Ci0gIHN0ZDo6c3dhcChfaGFzX2JpdHNfWzBdLCBvdGhlci0+X2hh
c19iaXRzX1swXSk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5h
bF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRf
c2l6ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEVudW1EZXNjcmlwdG9y
UHJvdG86OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9y
c09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0
YWRhdGEuZGVzY3JpcHRvciA9IEVudW1EZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl87Ci0gIG1l
dGFkYXRhLnJlZmxlY3Rpb24gPSBFbnVtRGVzY3JpcHRvclByb3RvX3JlZmxlY3Rpb25fOwotICBy
ZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMK
LS8vIEVudW1EZXNjcmlwdG9yUHJvdG8KLQotLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwot
Ym9vbCBFbnVtRGVzY3JpcHRvclByb3RvOjpoYXNfbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChf
aGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMXUpICE9IDA7Ci19Ci12b2lkIEVudW1EZXNjcmlwdG9y
UHJvdG86OnNldF9oYXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAxdTsK
LX0KLXZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX25hbWUoKSB7Ci0gIF9oYXNf
Yml0c19bMF0gJj0gfjB4MDAwMDAwMDF1OwotfQotdm9pZCBFbnVtRGVzY3JpcHRvclByb3RvOjpj
bGVhcl9uYW1lKCkgewotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFy
X2hhc19uYW1lKCk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgRW51bURlc2NyaXB0b3JQcm90
bzo6bmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dl
dDpnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5uYW1lKQotICByZXR1cm4gbmFt
ZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6c2V0X25h
bWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5h
bWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0K
LSB2b2lkIEVudW1EZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKSB7
Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmlu
Zyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6
Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLSB2b2lkIEVudW1E
ZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkg
ewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0
ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnBy
b3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBFbnVt
RGVzY3JpcHRvclByb3RvOjptdXRhYmxlX25hbWUoKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYu
RW51bURlc2NyaXB0b3JQcm90by5uYW1lKQotICByZXR1cm4gbmFtZV8uTXV0YWJsZU5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBFbnVtRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX25h
bWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2ds
ZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIGNsZWFyX2hhc19uYW1lKCk7
Ci0gIHJldHVybiBuYW1lXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgRW51bURlc2Ny
aXB0b3JQcm90bzo6c2V0X2FsbG9jYXRlZF9uYW1lKDo6c3RkOjpzdHJpbmcqIG5hbWUpIHsKLSAg
aWYgKG5hbWUgIT0gTlVMTCkgewotICAgIHNldF9oYXNfbmFtZSgpOwotICB9IGVsc2UgewotICAg
IGNsZWFyX2hhc19uYW1lKCk7Ci0gIH0KLSAgbmFtZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCks
IG5hbWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRl
ZDpnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5uYW1lKQotfQotCi0vLyByZXBl
YXRlZCAuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90byB2YWx1ZSA9IDI7
Ci1pbnQgRW51bURlc2NyaXB0b3JQcm90bzo6dmFsdWVfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJu
IHZhbHVlXy5zaXplKCk7Ci19Ci12b2lkIEVudW1EZXNjcmlwdG9yUHJvdG86OmNsZWFyX3ZhbHVl
KCkgewotICB2YWx1ZV8uQ2xlYXIoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51
bVZhbHVlRGVzY3JpcHRvclByb3RvJiBFbnVtRGVzY3JpcHRvclByb3RvOjp2YWx1ZShpbnQgaW5k
ZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by52YWx1ZSkKLSAgcmV0dXJuIHZhbHVlXy5H
ZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWVEZXNjcmlwdG9yUHJv
dG8qIEVudW1EZXNjcmlwdG9yUHJvdG86Om11dGFibGVfdmFsdWUoaW50IGluZGV4KSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5F
bnVtRGVzY3JpcHRvclByb3RvLnZhbHVlKQotICByZXR1cm4gdmFsdWVfLk11dGFibGUoaW5kZXgp
OwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8qIEVudW1E
ZXNjcmlwdG9yUHJvdG86OmFkZF92YWx1ZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by52YWx1ZSkK
LSAgcmV0dXJuIHZhbHVlXy5BZGQoKTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQ
dHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gPioK
LUVudW1EZXNjcmlwdG9yUHJvdG86Om11dGFibGVfdmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNj
cmlwdG9yUHJvdG8udmFsdWUpCi0gIHJldHVybiAmdmFsdWVfOwotfQotY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1
ZURlc2NyaXB0b3JQcm90byA+JgotRW51bURlc2NyaXB0b3JQcm90bzo6dmFsdWUoKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1
Zi5FbnVtRGVzY3JpcHRvclByb3RvLnZhbHVlKQotICByZXR1cm4gdmFsdWVfOwotfQotCi0vLyBv
cHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zIG9wdGlvbnMgPSAzOwotYm9vbCBF
bnVtRGVzY3JpcHRvclByb3RvOjpoYXNfb3B0aW9ucygpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFz
X2JpdHNfWzBdICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci12b2lkIEVudW1EZXNjcmlwdG9yUHJv
dG86OnNldF9oYXNfb3B0aW9ucygpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDA0dTsK
LX0KLXZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX29wdGlvbnMoKSB7Ci0gIF9o
YXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDR1OwotfQotdm9pZCBFbnVtRGVzY3JpcHRvclByb3Rv
OjpjbGVhcl9vcHRpb25zKCkgewotICBpZiAob3B0aW9uc18gIT0gTlVMTCkgb3B0aW9uc18tPjo6
Z29vZ2xlOjpwcm90b2J1Zjo6RW51bU9wdGlvbnM6OkNsZWFyKCk7Ci0gIGNsZWFyX2hhc19vcHRp
b25zKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1PcHRpb25zJiBFbnVtRGVz
Y3JpcHRvclByb3RvOjpvcHRpb25zKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLm9wdGlv
bnMpCi0gIHJldHVybiBvcHRpb25zXyAhPSBOVUxMID8gKm9wdGlvbnNfIDogKmRlZmF1bHRfaW5z
dGFuY2VfLT5vcHRpb25zXzsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bU9wdGlvbnMqIEVu
dW1EZXNjcmlwdG9yUHJvdG86Om11dGFibGVfb3B0aW9ucygpIHsKLSAgc2V0X2hhc19vcHRpb25z
KCk7Ci0gIGlmIChvcHRpb25zXyA9PSBOVUxMKSB7Ci0gICAgb3B0aW9uc18gPSBuZXcgOjpnb29n
bGU6OnByb3RvYnVmOjpFbnVtT3B0aW9uczsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5v
cHRpb25zKQotICByZXR1cm4gb3B0aW9uc187Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OkVudW1P
cHRpb25zKiBFbnVtRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX29wdGlvbnMoKSB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5FbnVt
RGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi0gIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6RW51bU9wdGlvbnMqIHRlbXAgPSBvcHRpb25zXzsKLSAgb3B0aW9uc18g
PSBOVUxMOwotICByZXR1cm4gdGVtcDsKLX0KLXZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6c2V0
X2FsbG9jYXRlZF9vcHRpb25zKDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bU9wdGlvbnMqIG9wdGlv
bnMpIHsKLSAgZGVsZXRlIG9wdGlvbnNfOwotICBvcHRpb25zXyA9IG9wdGlvbnM7Ci0gIGlmIChv
cHRpb25zKSB7Ci0gICAgc2V0X2hhc19vcHRpb25zKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJf
aGFzX29wdGlvbnMoKTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90by5vcHRpb25z
KQotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAot
Y29uc3QgaW50IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6a05hbWVGaWVsZE51bWJlcjsKLWNv
bnN0IGludCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OmtOdW1iZXJGaWVsZE51bWJlcjsKLWNv
bnN0IGludCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OmtPcHRpb25zRmllbGROdW1iZXI7Ci0j
ZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUVudW1W
YWx1ZURlc2NyaXB0b3JQcm90bzo6RW51bVZhbHVlRGVzY3JpcHRvclByb3RvKCkKLSAgOiA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0g
IFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9y
Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8pCi19Ci0KLXZvaWQgRW51
bVZhbHVlRGVzY3JpcHRvclByb3RvOjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIG9wdGlv
bnNfID0gY29uc3RfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWVPcHRpb25zKj4o
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgp
KTsKLX0KLQotRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpFbnVtVmFsdWVEZXNjcmlwdG9yUHJv
dG8oY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBT
aGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0
b3JQcm90bykKLX0KLQotdm9pZCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OlNoYXJlZEN0b3Io
KSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCk7Ci0g
IF9jYWNoZWRfc2l6ZV8gPSAwOwotICBuYW1lXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIG51
bWJlcl8gPSAwOwotICBvcHRpb25zXyA9IE5VTEw7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAs
IHNpemVvZihfaGFzX2JpdHNfKSk7Ci19Ci0KLUVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6fkVu
dW1WYWx1ZURlc2NyaXB0b3JQcm90bygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGRlc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bykKLSAg
U2hhcmVkRHRvcigpOwotfQotCi12b2lkIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6U2hhcmVk
RHRvcigpIHsKLSAgbmFtZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgaWYgKHRoaXMgIT0gZGVm
YXVsdF9pbnN0YW5jZV8pIHsKLSAgICBkZWxldGUgb3B0aW9uc187Ci0gIH0KLX0KLQotdm9pZCBF
bnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsK
LSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXpl
XyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJv
dG86OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwot
ICByZXR1cm4gRW51bVZhbHVlRGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0b3JfOwotfQotCi1jb25z
dCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8mIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6ZGVm
YXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3Rv
YnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAg
cmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRW51bVZhbHVlRGVzY3JpcHRvclByb3Rv
KiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQot
RW51bVZhbHVlRGVzY3JpcHRvclByb3RvKiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86Ok5ldyg6
Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3QgewotICBFbnVtVmFsdWVEZXNj
cmlwdG9yUHJvdG8qIG4gPSBuZXcgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOwotICBpZiAoYXJl
bmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0K
LXZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpDbGVhcigpIHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChtZXNzYWdlX2NsZWFyX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFs
dWVEZXNjcmlwdG9yUHJvdG8pCi0gIGlmIChfaGFzX2JpdHNfWzAgLyAzMl0gJiA3dSkgewotICAg
IGlmIChoYXNfbmFtZSgpKSB7Ci0gICAgICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci0gICAgfQotICAgIG51bWJlcl8gPSAwOwotICAgIGlmIChoYXNfb3B0aW9ucygpKSB7Ci0gICAg
ICBpZiAob3B0aW9uc18gIT0gTlVMTCkgb3B0aW9uc18tPjo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51
bVZhbHVlT3B0aW9uczo6Q2xlYXIoKTsKLSAgICB9Ci0gIH0KLSAgOjptZW1zZXQoX2hhc19iaXRz
XywgMCwgc2l6ZW9mKF9oYXNfYml0c18pKTsKLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2
ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5DbGVh
cigpOwotICB9Ci19Ci0KLWJvb2wgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpNZXJnZVBhcnRp
YWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1
dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BS
RURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0
Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8pCi0gIGZvciAoOzspIHsK
LSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBp
bnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlm
ICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFn
KSkgewotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAgICAgY2FzZSAxOiB7
Ci0gICAgICAgIGlmICh0YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAg
ICAgaW5wdXQsIHRoaXMtPm11dGFibGVfbmFtZSgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQo
Ci0gICAgICAgICAgICB0aGlzLT5uYW1lKCkuZGF0YSgpLCB0aGlzLT5uYW1lKCkubGVuZ3RoKCks
Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpQ
QVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclBy
b3RvLm5hbWUiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVz
dWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDE2KSkgZ290byBw
YXJzZV9udW1iZXI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25h
bCBpbnQzMiBudW1iZXIgPSAyOwotICAgICAgY2FzZSAyOiB7Ci0gICAgICAgIGlmICh0YWcgPT0g
MTYpIHsKLSAgICAgICAgIHBhcnNlX251bWJlcjoKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPAotICAgICAg
ICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIsIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0lOVDMyPigKLSAgICAgICAgICAgICAg
ICAgaW5wdXQsICZudW1iZXJfKSkpOwotICAgICAgICAgIHNldF9oYXNfbnVtYmVyKCk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygyNikpIGdvdG8gcGFyc2Vfb3B0aW9uczsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9i
dWYuRW51bVZhbHVlT3B0aW9ucyBvcHRpb25zID0gMzsKLSAgICAgIGNhc2UgMzogewotICAgICAg
ICBpZiAodGFnID09IDI2KSB7Ci0gICAgICAgICBwYXJzZV9vcHRpb25zOgotICAgICAgICAgIERP
Xyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3Nh
Z2VOb1ZpcnR1YWwoCi0gICAgICAgICAgICAgICBpbnB1dCwgbXV0YWJsZV9vcHRpb25zKCkpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0QXRFbmQoKSkgZ290byBzdWNjZXNzOwotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDogewotICAgICAgaGFuZGxlX3Vu
dXN1YWw6Ci0gICAgICAgIGlmICh0YWcgPT0gMCB8fAotICAgICAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0K
LSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpXSVJFVFlQRV9FTkRfR1JPVVApIHsKLSAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAg
IH0KLSAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6
OlNraXBGaWVsZCgKLSAgICAgICAgICAgICAgaW5wdXQsIHRhZywgbXV0YWJsZV91bmtub3duX2Zp
ZWxkcygpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotc3VjY2VzczoK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3Rv
YnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bykKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9i
dWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9f
Ci19Ci0KLXZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpTZXJpYWxpemVXaXRoQ2FjaGVk
U2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91
dHB1dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0
YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8pCi0gIC8vIG9wdGlv
bmFsIHN0cmluZyBuYW1lID0gMTsKLSAgaWYgKGhhc19uYW1lKCkpIHsKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVs
ZCgKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwK
LSAgICAgICJnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLm5hbWUiKTsK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVT
dHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAxLCB0aGlzLT5uYW1lKCksIG91dHB1dCk7Ci0gIH0K
LQotICAvLyBvcHRpb25hbCBpbnQzMiBudW1iZXIgPSAyOwotICBpZiAoaGFzX251bWJlcigpKSB7
Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRl
SW50MzIoMiwgdGhpcy0+bnVtYmVyKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCAu
Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMgb3B0aW9ucyA9IDM7Ci0gIGlmIChoYXNf
b3B0aW9ucygpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDMsICp0aGlzLT5vcHRpb25z
Xywgb3V0cHV0KTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93
bl9maWVsZHMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHMoCi0gICAgICAgIHVua25vd25fZmllbGRzKCksIG91
dHB1dCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6
Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90bykKLX0KLQotOjpnb29nbGU6
OnByb3RvYnVmOjp1aW50OCogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdl
dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2Fy
cmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8pCi0gIC8v
IG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgaWYgKGhhc19uYW1lKCkpIHsKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFt
ZWRGaWVsZCgKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgo
KSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklB
TElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLm5h
bWUiKTsKLSAgICB0YXJnZXQgPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nVG9BcnJheSgKLSAgICAgICAgMSwgdGhpcy0+bmFt
ZSgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgaW50MzIgbnVtYmVyID0gMjsKLSAg
aWYgKGhhc19udW1iZXIoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUludDMyVG9BcnJheSgyLCB0aGlzLT5udW1iZXIo
KSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRW51bVZh
bHVlT3B0aW9ucyBvcHRpb25zID0gMzsKLSAgaWYgKGhhc19vcHRpb25zKCkpIHsKLSAgICB0YXJn
ZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAg
ICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAotICAgICAgICAzLCAqdGhpcy0+b3B0aW9u
c18sIHRhcmdldCk7Ci0gIH0KLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25v
d25fZmllbGRzKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzVG9BcnJheSgKLSAgICAgICAgdW5r
bm93bl9maWVsZHMoKSwgdGFyZ2V0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3Jp
cHRvclByb3RvKQotICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQgRW51bVZhbHVlRGVzY3JpcHRv
clByb3RvOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludCht
ZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRv
clByb3RvKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgaWYgKF9oYXNfYml0c19bMCAvIDMy
XSAmIDd1KSB7Ci0gICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAgIGlmIChoYXNf
bmFtZSgpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgICB0
aGlzLT5uYW1lKCkpOwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDI7
Ci0gICAgaWYgKGhhc19udW1iZXIoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkludDMyU2l6
ZSgKLSAgICAgICAgICB0aGlzLT5udW1iZXIoKSk7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwg
Lmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zIG9wdGlvbnMgPSAzOwotICAgIGlmICho
YXNfb3B0aW9ucygpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1
YWwoCi0gICAgICAgICAgKnRoaXMtPm9wdGlvbnNfKTsKLSAgICB9Ci0KLSAgfQotICBpZiAoX2lu
dGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0b3RhbF9zaXpl
ICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpDb21w
dXRlVW5rbm93bkZpZWxkc1NpemUoCi0gICAgICAgIHVua25vd25fZmllbGRzKCkpOwotICB9Ci0g
IEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8g
PSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLSAg
cmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpN
ZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29n
bGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKQotICBpZiAoR09PR0xFX1BSRURJ
Q1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25z
dCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8qIHNvdXJjZSA9IAotICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25zdCBFbnVtVmFsdWVE
ZXNjcmlwdG9yUHJvdG8+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxM
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9t
X2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKQotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20s
IHRoaXMpOwotICB9IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJh
bGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURl
c2NyaXB0b3JQcm90bykKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBF
bnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86Ok1lcmdlRnJvbShjb25zdCBFbnVtVmFsdWVEZXNjcmlw
dG9yUHJvdG8mIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVj
aWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9y
UHJvdG8pCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VG
cm9tRmFpbChfX0xJTkVfXyk7Ci0gIGlmIChmcm9tLl9oYXNfYml0c19bMCAvIDMyXSAmICgweGZm
dSA8PCAoMCAlIDMyKSkpIHsKLSAgICBpZiAoZnJvbS5oYXNfbmFtZSgpKSB7Ci0gICAgICBzZXRf
aGFzX25hbWUoKTsKLSAgICAgIG5hbWVfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJvbS5uYW1l
Xyk7Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc19udW1iZXIoKSkgewotICAgICAgc2V0X251bWJl
cihmcm9tLm51bWJlcigpKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX29wdGlvbnMoKSkgewot
ICAgICAgbXV0YWJsZV9vcHRpb25zKCktPjo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlT3B0
aW9uczo6TWVyZ2VGcm9tKGZyb20ub3B0aW9ucygpKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyb20u
X2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxl
X3Vua25vd25fZmllbGRzKCktPk1lcmdlRnJvbShmcm9tLnVua25vd25fZmllbGRzKCkpOwotICB9
Ci19Ci0KLXZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpDb3B5RnJvbShjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1
ZURlc2NyaXB0b3JQcm90bykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIo
KTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90
bzo6Q29weUZyb20oY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvJiBmcm9tKSB7Ci0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8pCi0gIGlmICgmZnJvbSA9PSB0
aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBF
bnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgaWYg
KGhhc19vcHRpb25zKCkpIHsKLSAgICBpZiAoIXRoaXMtPm9wdGlvbnNfLT5Jc0luaXRpYWxpemVk
KCkpIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBFbnVtVmFs
dWVEZXNjcmlwdG9yUHJvdG86OlN3YXAoRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKiBvdGhlcikg
ewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwot
fQotdm9pZCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OkludGVybmFsU3dhcChFbnVtVmFsdWVE
ZXNjcmlwdG9yUHJvdG8qIG90aGVyKSB7Ci0gIG5hbWVfLlN3YXAoJm90aGVyLT5uYW1lXyk7Ci0g
IHN0ZDo6c3dhcChudW1iZXJfLCBvdGhlci0+bnVtYmVyXyk7Ci0gIHN0ZDo6c3dhcChvcHRpb25z
Xywgb3RoZXItPm9wdGlvbnNfKTsKLSAgc3RkOjpzd2FwKF9oYXNfYml0c19bMF0sIG90aGVyLT5f
aGFzX2JpdHNfWzBdKTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVy
bmFsX21ldGFkYXRhXyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hl
ZF9zaXplXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgRW51bVZhbHVlRGVz
Y3JpcHRvclByb3RvOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVz
Y3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7
Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9fZGVzY3Jp
cHRvcl87Ci0gIG1ldGFkYXRhLnJlZmxlY3Rpb24gPSBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9f
cmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElO
RV9OT1RfSU5fSEVBREVSUwotLy8gRW51bVZhbHVlRGVzY3JpcHRvclByb3RvCi0KLS8vIG9wdGlv
bmFsIHN0cmluZyBuYW1lID0gMTsKLWJvb2wgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpoYXNf
bmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMXUpICE9
IDA7Ci19Ci12b2lkIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19uYW1lKCkgewot
ICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDF1OwotfQotdm9pZCBFbnVtVmFsdWVEZXNjcmlw
dG9yUHJvdG86OmNsZWFyX2hhc19uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAw
MDAxdTsKLX0KLXZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9uYW1lKCkgewot
ICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc19uYW1lKCk7Ci19
Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpuYW1lKCkg
Y29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5w
cm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdl
dE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6c2V0X25h
bWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5h
bWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5uYW1l
KQotfQotIHZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFy
KiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6
c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ubmFtZSkK
LX0KLSB2b2lkIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgY2hhciog
dmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9z
ZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLm5hbWUp
Ci19Ci0gOjpzdGQ6OnN0cmluZyogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX25h
bWUoKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLm5h
bWUpCi0gIHJldHVybiBuYW1lXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIDo6c3RkOjpzdHJp
bmcqIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRW51bVZh
bHVlRGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIGNsZWFyX2hhc19uYW1lKCk7Ci0gIHJldHVybiBu
YW1lXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclBy
b3RvOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAobmFt
ZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJf
aGFzX25hbWUoKTsKLSAgfQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2ds
ZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLQotLy8gb3B0aW9u
YWwgaW50MzIgbnVtYmVyID0gMjsKLWJvb2wgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpoYXNf
bnVtYmVyKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAydSkg
IT0gMDsKLX0KLXZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpzZXRfaGFzX251bWJlcigp
IHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0KLXZvaWQgRW51bVZhbHVlRGVz
Y3JpcHRvclByb3RvOjpjbGVhcl9oYXNfbnVtYmVyKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4w
eDAwMDAwMDAydTsKLX0KLXZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9udW1i
ZXIoKSB7Ci0gIG51bWJlcl8gPSAwOwotICBjbGVhcl9oYXNfbnVtYmVyKCk7Ci19Ci0gOjpnb29n
bGU6OnByb3RvYnVmOjppbnQzMiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86Om51bWJlcigpIGNv
bnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJv
dG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLm51bWJlcikKLSAgcmV0dXJuIG51bWJlcl87
Ci19Ci0gdm9pZCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OnNldF9udW1iZXIoOjpnb29nbGU6
OnByb3RvYnVmOjppbnQzMiB2YWx1ZSkgewotICBzZXRfaGFzX251bWJlcigpOwotICBudW1iZXJf
ID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xl
LnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5udW1iZXIpCi19Ci0KLS8vIG9wdGlv
bmFsIC5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucyBvcHRpb25zID0gMzsKLWJvb2wg
RW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpoYXNfb3B0aW9ucygpIGNvbnN0IHsKLSAgcmV0dXJu
IChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci12b2lkIEVudW1WYWx1ZURl
c2NyaXB0b3JQcm90bzo6c2V0X2hhc19vcHRpb25zKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4
MDAwMDAwMDR1OwotfQotdm9pZCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hhc19v
cHRpb25zKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDA0dTsKLX0KLXZvaWQgRW51
bVZhbHVlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9vcHRpb25zKCkgewotICBpZiAob3B0aW9uc18g
IT0gTlVMTCkgb3B0aW9uc18tPjo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlT3B0aW9uczo6
Q2xlYXIoKTsKLSAgY2xlYXJfaGFzX29wdGlvbnMoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RW51bVZhbHVlT3B0aW9ucyYgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpvcHRpb25z
KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2ds
ZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAgcmV0dXJuIG9w
dGlvbnNfICE9IE5VTEwgPyAqb3B0aW9uc18gOiAqZGVmYXVsdF9pbnN0YW5jZV8tPm9wdGlvbnNf
OwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWVPcHRpb25zKiBFbnVtVmFsdWVEZXNj
cmlwdG9yUHJvdG86Om11dGFibGVfb3B0aW9ucygpIHsKLSAgc2V0X2hhc19vcHRpb25zKCk7Ci0g
IGlmIChvcHRpb25zXyA9PSBOVUxMKSB7Ci0gICAgb3B0aW9uc18gPSBuZXcgOjpnb29nbGU6OnBy
b3RvYnVmOjpFbnVtVmFsdWVPcHRpb25zOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJv
dG8ub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpF
bnVtVmFsdWVPcHRpb25zKiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OnJlbGVhc2Vfb3B0aW9u
cygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xl
LnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5vcHRpb25zKQotICBjbGVhcl9oYXNf
b3B0aW9ucygpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZU9wdGlvbnMqIHRlbXAg
PSBvcHRpb25zXzsKLSAgb3B0aW9uc18gPSBOVUxMOwotICByZXR1cm4gdGVtcDsKLX0KLXZvaWQg
RW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX29wdGlvbnMoOjpnb29nbGU6
OnByb3RvYnVmOjpFbnVtVmFsdWVPcHRpb25zKiBvcHRpb25zKSB7Ci0gIGRlbGV0ZSBvcHRpb25z
XzsKLSAgb3B0aW9uc18gPSBvcHRpb25zOwotICBpZiAob3B0aW9ucykgewotICAgIHNldF9oYXNf
b3B0aW9ucygpOwotICB9IGVsc2UgewotICAgIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0gIH0KLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnBy
b3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5vcHRpb25zKQotfQotCi0jZW5kaWYgIC8v
IFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAh
ZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgaW50IFNlcnZpY2VE
ZXNjcmlwdG9yUHJvdG86OmtOYW1lRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgU2VydmljZURlc2Ny
aXB0b3JQcm90bzo6a01ldGhvZEZpZWxkTnVtYmVyOwotY29uc3QgaW50IFNlcnZpY2VEZXNjcmlw
dG9yUHJvdG86OmtPcHRpb25zRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0Nf
VkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLVNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OlNlcnZp
Y2VEZXNjcmlwdG9yUHJvdG8oKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLCBf
aW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNj
cmlwdG9yUHJvdG8pCi19Ci0KLXZvaWQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6SW5pdEFzRGVm
YXVsdEluc3RhbmNlKCkgewotICBvcHRpb25zXyA9IGNvbnN0X2Nhc3Q8IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6U2VydmljZU9wdGlvbnMqPigmOjpnb29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlT3B0aW9u
czo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLX0KLQotU2VydmljZURlc2NyaXB0b3JQcm90bzo6U2Vy
dmljZURlc2NyaXB0b3JQcm90byhjb25zdCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvJiBmcm9tKQot
ICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRlcm5hbF9tZXRhZGF0
YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLlNl
cnZpY2VEZXNjcmlwdG9yUHJvdG8pCi19Ci0KLXZvaWQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6
U2hhcmVkQ3RvcigpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmcoKTsKLSAgX2NhY2hlZF9zaXplXyA9IDA7Ci0gIG5hbWVfLlVuc2FmZVNldERlZmF1bHQo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLSAgb3B0aW9uc18gPSBOVUxMOwotICA6Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXpl
b2YoX2hhc19iaXRzXykpOwotfQotCi1TZXJ2aWNlRGVzY3JpcHRvclByb3RvOjp+U2VydmljZURl
c2NyaXB0b3JQcm90bygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0
b3I6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8pCi0gIFNoYXJlZER0b3Io
KTsKLX0KLQotdm9pZCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpTaGFyZWREdG9yKCkgewotICBu
YW1lXy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNl
XykgewotICAgIGRlbGV0ZSBvcHRpb25zXzsKLSAgfQotfQotCi12b2lkIFNlcnZpY2VEZXNjcmlw
dG9yUHJvdG86OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NBRkVf
Q09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0gIEdP
T0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpEZXNjcmlwdG9yKiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpkZXNjcmlwdG9yKCkg
ewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIFNlcnZpY2VE
ZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IFNlcnZpY2VEZXNjcmlwdG9y
UHJvdG8mIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlm
IChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnBy
b3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5j
ZV87Ci19Ci0KLVNlcnZpY2VEZXNjcmlwdG9yUHJvdG8qIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86
OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotU2VydmljZURlc2NyaXB0b3JQcm90byogU2Vy
dmljZURlc2NyaXB0b3JQcm90bzo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5h
KSBjb25zdCB7Ci0gIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8qIG4gPSBuZXcgU2VydmljZURlc2Ny
aXB0b3JQcm90bzsKLSAgaWYgKGFyZW5hICE9IE5VTEwpIHsKLSAgICBhcmVuYS0+T3duKG4pOwot
ICB9Ci0gIHJldHVybiBuOwotfQotCi12b2lkIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OkNsZWFy
KCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29v
Z2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8pCi0gIGlmIChfaGFzX2JpdHNfWzAg
LyAzMl0gJiA1dSkgewotICAgIGlmIChoYXNfbmFtZSgpKSB7Ci0gICAgICBuYW1lXy5DbGVhclRv
RW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci0gICAgfQotICAgIGlmIChoYXNfb3B0aW9ucygpKSB7Ci0gICAg
ICBpZiAob3B0aW9uc18gIT0gTlVMTCkgb3B0aW9uc18tPjo6Z29vZ2xlOjpwcm90b2J1Zjo6U2Vy
dmljZU9wdGlvbnM6OkNsZWFyKCk7Ci0gICAgfQotICB9Ci0gIG1ldGhvZF8uQ2xlYXIoKTsKLSAg
OjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9oYXNfYml0c18pKTsKLSAgaWYgKF9pbnRl
cm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91bmtu
b3duX2ZpZWxkcygpLT5DbGVhcigpOwotICB9Ci19Ci0KLWJvb2wgU2VydmljZURlc2NyaXB0b3JQ
cm90bzo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNTSU9O
KSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQotICA6
Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChwYXJzZV9zdGFydDpnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bykK
LSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQz
MiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9IHAu
Zmlyc3Q7Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBzd2l0
Y2ggKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdG
aWVsZE51bWJlcih0YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0g
ICAgICBjYXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxMCkgewotICAgICAgICAgIERPXyg6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygK
LSAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9uYW1lKCkpKTsKLSAgICAgICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3Ry
aW5nTmFtZWRGaWVsZCgKLSAgICAgICAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5h
bWUoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXQ6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNl
RGVzY3JpcHRvclByb3RvLm5hbWUiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3Rv
IGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFn
KDE4KSkgZ290byBwYXJzZV9tZXRob2Q7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAg
ICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90byBtZXRo
b2QgPSAyOwotICAgICAgY2FzZSAyOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTgpIHsKLSAgICAg
ICAgIHBhcnNlX21ldGhvZDoKLSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lv
bkRlcHRoKCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9tZXRob2Q6Ci0gICAgICAgICAgRE9fKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5v
VmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoCi0gICAgICAgICAgICAgICAgaW5wdXQsIGFkZF9tZXRo
b2QoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMTgpKSBnb3RvIHBhcnNl
X2xvb3BfbWV0aG9kOwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVw
dGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMjYpKSBnb3RvIHBhcnNlX29wdGlv
bnM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCAuZ29vZ2xl
LnByb3RvYnVmLlNlcnZpY2VPcHRpb25zIG9wdGlvbnMgPSAzOwotICAgICAgY2FzZSAzOiB7Ci0g
ICAgICAgIGlmICh0YWcgPT0gMjYpIHsKLSAgICAgICAgIHBhcnNlX29wdGlvbnM6Ci0gICAgICAg
ICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFk
TWVzc2FnZU5vVmlydHVhbCgKLSAgICAgICAgICAgICAgIGlucHV0LCBtdXRhYmxlX29wdGlvbnMo
KSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5k
bGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFn
KSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAg
ICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdDo6U2tpcEZpZWxkKAotICAgICAgICAgICAgICBpbnB1dCwgdGFnLCBtdXRhYmxlX3Vua25v
d25fZmllbGRzKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNj
ZXNzOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUu
cHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bykKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJl
OgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJv
dG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bykKLSAgcmV0dXJuIGZhbHNlOwotI3VuZGVmIERP
XwotfQotCi12b2lkIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OlNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0
cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8pCi0gIC8vIG9wdGlvbmFs
IHN0cmluZyBuYW1lID0gMTsKLSAgaWYgKGhhc19uYW1lKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgK
LSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAg
ICAgICJnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5uYW1lIik7Ci0gICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5n
TWF5YmVBbGlhc2VkKAotICAgICAgMSwgdGhpcy0+bmFtZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAg
Ly8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8gbWV0aG9k
ID0gMjsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5tZXRob2Rfc2l6ZSgp
OyBpIDwgbjsgaSsrKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDIsIHRoaXMtPm1ldGhv
ZChpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU2Vy
dmljZU9wdGlvbnMgb3B0aW9ucyA9IDM7Ci0gIGlmIChoYXNfb3B0aW9ucygpKSB7Ci0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1h
eWJlVG9BcnJheSgKLSAgICAgIDMsICp0aGlzLT5vcHRpb25zXywgb3V0cHV0KTsKLSAgfQotCi0g
IGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25G
aWVsZHMoCi0gICAgICAgIHVua25vd25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZp
Y2VEZXNjcmlwdG9yUHJvdG8pCi19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcnZp
Y2VEZXNjcmlwdG9yUHJvdG86OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8pCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsK
LSAgaWYgKGhhc19uYW1lKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPm5hbWUo
KS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9i
dWYuU2VydmljZURlc2NyaXB0b3JQcm90by5uYW1lIik7Ci0gICAgdGFyZ2V0ID0KLSAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ1Rv
QXJyYXkoCi0gICAgICAgIDEsIHRoaXMtPm5hbWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIHJl
cGVhdGVkIC5nb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvIG1ldGhvZCA9IDI7
Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+bWV0aG9kX3NpemUoKTsgaSA8
IG47IGkrKykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAg
ICAgIDIsIHRoaXMtPm1ldGhvZChpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5n
b29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMgb3B0aW9ucyA9IDM7Ci0gIGlmIChoYXNfb3B0
aW9ucygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAg
ICAgMywgKnRoaXMtPm9wdGlvbnNfLCB0YXJnZXQpOwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9t
ZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkc1Rv
QXJyYXkoCi0gICAgICAgIHVua25vd25fZmllbGRzKCksIHRhcmdldCk7Ci0gIH0KLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3Rv
YnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8pCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBT
ZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuU2Vy
dmljZURlc2NyaXB0b3JQcm90bykKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIGlmIChfaGFz
X2JpdHNfWzAgLyAzMl0gJiA1dSkgewotICAgIC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsK
LSAgICBpZiAoaGFzX25hbWUoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0cmluZ1NpemUo
Ci0gICAgICAgICAgdGhpcy0+bmFtZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBvcHRpb25hbCAuZ29v
Z2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zIG9wdGlvbnMgPSAzOwotICAgIGlmIChoYXNfb3B0
aW9ucygpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0g
ICAgICAgICAgKnRoaXMtPm9wdGlvbnNfKTsKLSAgICB9Ci0KLSAgfQotICAvLyByZXBlYXRlZCAu
Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90byBtZXRob2QgPSAyOwotICB0b3Rh
bF9zaXplICs9IDEgKiB0aGlzLT5tZXRob2Rfc2l6ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8
IHRoaXMtPm1ldGhvZF9zaXplKCk7IGkrKykgewotICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5v
VmlydHVhbCgKLSAgICAgICAgdGhpcy0+bWV0aG9kKGkpKTsKLSAgfQotCi0gIGlmIChfaW50ZXJu
YWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHRvdGFsX3NpemUgKz0K
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OkNvbXB1dGVV
bmtub3duRmllbGRzU2l6ZSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSk7Ci0gIH0KLSAgR09P
R0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRv
dGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1
cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpNZXJnZUZy
b20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJv
dG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bykKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNF
KCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgU2Vydmlj
ZURlc2NyaXB0b3JQcm90byogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yUHJv
dG8+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpn
b29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bykKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBl
bHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zy
b21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvKQot
ICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIFNlcnZpY2VEZXNjcmlwdG9y
UHJvdG86Ok1lcmdlRnJvbShjb25zdCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvJiBmcm9tKSB7Ci0v
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFy
dDpnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90bykKLSAgaWYgKEdPT0dMRV9Q
UkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAg
bWV0aG9kXy5NZXJnZUZyb20oZnJvbS5tZXRob2RfKTsKLSAgaWYgKGZyb20uX2hhc19iaXRzX1sw
IC8gMzJdICYgKDB4ZmZ1IDw8ICgwICUgMzIpKSkgewotICAgIGlmIChmcm9tLmhhc19uYW1lKCkp
IHsKLSAgICAgIHNldF9oYXNfbmFtZSgpOwotICAgICAgbmFtZV8uQXNzaWduV2l0aERlZmF1bHQo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCBmcm9tLm5hbWVfKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX29wdGlvbnMoKSkgewot
ICAgICAgbXV0YWJsZV9vcHRpb25zKCktPjo6Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZU9wdGlv
bnM6Ok1lcmdlRnJvbShmcm9tLm9wdGlvbnMoKSk7Ci0gICAgfQotICB9Ci0gIGlmIChmcm9tLl9p
bnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91
bmtub3duX2ZpZWxkcygpLT5NZXJnZUZyb20oZnJvbS51bmtub3duX2ZpZWxkcygpKTsKLSAgfQot
fQotCi12b2lkIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuU2VydmljZURlc2Ny
aXB0b3JQcm90bykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAg
TWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OkNvcHlG
cm9tKGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8mIGZyb20pIHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8pCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47
Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBTZXJ2aWNlRGVzY3Jp
cHRvclByb3RvOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIGlmICghOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6QWxsQXJlSW5pdGlhbGl6ZWQodGhpcy0+bWV0aG9kKCkpKSByZXR1
cm4gZmFsc2U7Ci0gIGlmIChoYXNfb3B0aW9ucygpKSB7Ci0gICAgaWYgKCF0aGlzLT5vcHRpb25z
Xy0+SXNJbml0aWFsaXplZCgpKSByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6U3dhcChTZXJ2aWNlRGVzY3JpcHRvclBy
b3RvKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBJbnRlcm5hbFN3
YXAob3RoZXIpOwotfQotdm9pZCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpJbnRlcm5hbFN3YXAo
U2VydmljZURlc2NyaXB0b3JQcm90byogb3RoZXIpIHsKLSAgbmFtZV8uU3dhcCgmb3RoZXItPm5h
bWVfKTsKLSAgbWV0aG9kXy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT5tZXRob2RfKTsKLSAgc3Rk
Ojpzd2FwKG9wdGlvbnNfLCBvdGhlci0+b3B0aW9uc18pOwotICBzdGQ6OnN3YXAoX2hhc19iaXRz
X1swXSwgb3RoZXItPl9oYXNfYml0c19bMF0pOwotICBfaW50ZXJuYWxfbWV0YWRhdGFfLlN3YXAo
Jm90aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9jYWNoZWRfc2l6ZV8s
IG90aGVyLT5fY2FjaGVkX3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0
YSBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9i
dWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRh
dGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBTZXJ2aWNlRGVzY3JpcHRvclBy
b3RvX2Rlc2NyaXB0b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gU2VydmljZURlc2NyaXB0
b3JQcm90b19yZWZsZWN0aW9uXzsKLSAgcmV0dXJuIG1ldGFkYXRhOwotfQotCi0jaWYgUFJPVE9C
VUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0vLyBTZXJ2aWNlRGVzY3JpcHRvclByb3RvCi0KLS8v
IG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLWJvb2wgU2VydmljZURlc2NyaXB0b3JQcm90bzo6
aGFzX25hbWUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDF1
KSAhPSAwOwotfQotdm9pZCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpzZXRfaGFzX25hbWUoKSB7
Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwMXU7Ci19Ci12b2lkIFNlcnZpY2VEZXNjcmlw
dG9yUHJvdG86OmNsZWFyX2hhc19uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAw
MDAxdTsKLX0KLXZvaWQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfbmFtZSgpIHsKLSAg
bmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfbmFtZSgpOwotfQot
IGNvbnN0IDo6c3RkOjpzdHJpbmcmIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86Om5hbWUoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpKTsKLX0KLSB2b2lkIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0
IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0Omdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci0gdm9p
ZCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSkgewot
ICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmco
dmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdv
b2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci0gdm9pZCBTZXJ2
aWNlRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNp
emUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAg
OjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUp
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2ds
ZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci0gOjpzdGQ6OnN0cmlu
ZyogU2VydmljZURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9uYW1lKCkgewotICBzZXRfaGFzX25h
bWUoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xl
LnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11
dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogU2VydmljZURlc2NyaXB0b3JQ
cm90bzo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5uYW1lKQot
ICBjbGVhcl9oYXNfbmFtZSgpOwotICByZXR1cm4gbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LX0KLSB2b2lkIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0
ZDo6c3RyaW5nKiBuYW1lKSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX25h
bWUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfbmFtZSgpOwotICB9Ci0gIG5hbWVfLlNl
dEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBuYW1lKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9y
UHJvdG8ubmFtZSkKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNj
cmlwdG9yUHJvdG8gbWV0aG9kID0gMjsKLWludCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjptZXRo
b2Rfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG1ldGhvZF8uc2l6ZSgpOwotfQotdm9pZCBTZXJ2
aWNlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9tZXRob2QoKSB7Ci0gIG1ldGhvZF8uQ2xlYXIoKTsK
LX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kRGVzY3JpcHRvclByb3RvJiBTZXJ2
aWNlRGVzY3JpcHRvclByb3RvOjptZXRob2QoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNj
cmlwdG9yUHJvdG8ubWV0aG9kKQotICByZXR1cm4gbWV0aG9kXy5HZXQoaW5kZXgpOwotfQotOjpn
b29nbGU6OnByb3RvYnVmOjpNZXRob2REZXNjcmlwdG9yUHJvdG8qIFNlcnZpY2VEZXNjcmlwdG9y
UHJvdG86Om11dGFibGVfbWV0aG9kKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQ
cm90by5tZXRob2QpCi0gIHJldHVybiBtZXRob2RfLk11dGFibGUoaW5kZXgpOwotfQotOjpnb29n
bGU6OnByb3RvYnVmOjpNZXRob2REZXNjcmlwdG9yUHJvdG8qIFNlcnZpY2VEZXNjcmlwdG9yUHJv
dG86OmFkZF9tZXRob2QoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9h
ZGQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ubWV0aG9kKQotICByZXR1
cm4gbWV0aG9kXy5BZGQoKTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVs
ZDwgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2REZXNjcmlwdG9yUHJvdG8gPioKLVNlcnZpY2VE
ZXNjcmlwdG9yUHJvdG86Om11dGFibGVfbWV0aG9kKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3Jp
cHRvclByb3RvLm1ldGhvZCkKLSAgcmV0dXJuICZtZXRob2RfOwotfQotY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZERl
c2NyaXB0b3JQcm90byA+JgotU2VydmljZURlc2NyaXB0b3JQcm90bzo6bWV0aG9kKCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9i
dWYuU2VydmljZURlc2NyaXB0b3JQcm90by5tZXRob2QpCi0gIHJldHVybiBtZXRob2RfOwotfQot
Ci0vLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zIG9wdGlvbnMgPSAz
OwotYm9vbCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpoYXNfb3B0aW9ucygpIGNvbnN0IHsKLSAg
cmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci12b2lkIFNlcnZp
Y2VEZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfb3B0aW9ucygpIHsKLSAgX2hhc19iaXRzX1swXSB8
PSAweDAwMDAwMDA0dTsKLX0KLXZvaWQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFz
X29wdGlvbnMoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDR1OwotfQotdm9pZCBT
ZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9vcHRpb25zKCkgewotICBpZiAob3B0aW9uc18g
IT0gTlVMTCkgb3B0aW9uc18tPjo6Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZU9wdGlvbnM6OkNs
ZWFyKCk7Ci0gIGNsZWFyX2hhc19vcHRpb25zKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OlNlcnZpY2VPcHRpb25zJiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpvcHRpb25zKCkgY29u
c3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90
b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXyAh
PSBOVUxMID8gKm9wdGlvbnNfIDogKmRlZmF1bHRfaW5zdGFuY2VfLT5vcHRpb25zXzsKLX0KLTo6
Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZU9wdGlvbnMqIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86
Om11dGFibGVfb3B0aW9ucygpIHsKLSAgc2V0X2hhc19vcHRpb25zKCk7Ci0gIGlmIChvcHRpb25z
XyA9PSBOVUxMKSB7Ci0gICAgb3B0aW9uc18gPSBuZXcgOjpnb29nbGU6OnByb3RvYnVmOjpTZXJ2
aWNlT3B0aW9uczsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZTpnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5vcHRpb25zKQotICBy
ZXR1cm4gb3B0aW9uc187Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlNlcnZpY2VPcHRpb25zKiBT
ZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX29wdGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVz
Y3JpcHRvclByb3RvLm9wdGlvbnMpCi0gIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6U2VydmljZU9wdGlvbnMqIHRlbXAgPSBvcHRpb25zXzsKLSAgb3B0aW9uc18g
PSBOVUxMOwotICByZXR1cm4gdGVtcDsKLX0KLXZvaWQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6
c2V0X2FsbG9jYXRlZF9vcHRpb25zKDo6Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZU9wdGlvbnMq
IG9wdGlvbnMpIHsKLSAgZGVsZXRlIG9wdGlvbnNfOwotICBvcHRpb25zXyA9IG9wdGlvbnM7Ci0g
IGlmIChvcHRpb25zKSB7Ci0gICAgc2V0X2hhc19vcHRpb25zKCk7Ci0gIH0gZWxzZSB7Ci0gICAg
Y2xlYXJfaGFzX29wdGlvbnMoKTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90
by5vcHRpb25zKQotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVS
UwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIg
Pj0gMTkwMAotY29uc3QgaW50IE1ldGhvZERlc2NyaXB0b3JQcm90bzo6a05hbWVGaWVsZE51bWJl
cjsKLWNvbnN0IGludCBNZXRob2REZXNjcmlwdG9yUHJvdG86OmtJbnB1dFR5cGVGaWVsZE51bWJl
cjsKLWNvbnN0IGludCBNZXRob2REZXNjcmlwdG9yUHJvdG86OmtPdXRwdXRUeXBlRmllbGROdW1i
ZXI7Ci1jb25zdCBpbnQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjprT3B0aW9uc0ZpZWxkTnVtYmVy
OwotY29uc3QgaW50IE1ldGhvZERlc2NyaXB0b3JQcm90bzo6a0NsaWVudFN0cmVhbWluZ0ZpZWxk
TnVtYmVyOwotY29uc3QgaW50IE1ldGhvZERlc2NyaXB0b3JQcm90bzo6a1NlcnZlclN0cmVhbWlu
Z0ZpZWxkTnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIg
Pj0gMTkwMAotCi1NZXRob2REZXNjcmlwdG9yUHJvdG86Ok1ldGhvZERlc2NyaXB0b3JQcm90bygp
Ci0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRhZGF0YV8o
TlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChj
b25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvKQotfQotCi12
b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotICBv
cHRpb25zXyA9IGNvbnN0X2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kT3B0aW9ucyo+
KCY6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZE9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2UoKSk7
Ci19Ci0KLU1ldGhvZERlc2NyaXB0b3JQcm90bzo6TWV0aG9kRGVzY3JpcHRvclByb3RvKGNvbnN0
IE1ldGhvZERlc2NyaXB0b3JQcm90byYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3Rvcigp
OwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5
X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8pCi19Ci0K
LXZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpTaGFyZWRDdG9yKCkgewotICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZygpOwotICBfY2FjaGVkX3NpemVfID0g
MDsKLSAgbmFtZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBpbnB1dF90eXBlXy5VbnNhZmVT
ZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci0gIG91dHB1dF90eXBlXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0g
IG9wdGlvbnNfID0gTlVMTDsKLSAgY2xpZW50X3N0cmVhbWluZ18gPSBmYWxzZTsKLSAgc2VydmVy
X3N0cmVhbWluZ18gPSBmYWxzZTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9o
YXNfYml0c18pKTsKLX0KLQotTWV0aG9kRGVzY3JpcHRvclByb3RvOjp+TWV0aG9kRGVzY3JpcHRv
clByb3RvKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29n
bGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvKQotICBTaGFyZWREdG9yKCk7Ci19Ci0K
LXZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpTaGFyZWREdG9yKCkgewotICBuYW1lXy5EZXN0
cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotICBpbnB1dF90eXBlXy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBv
dXRwdXRfdHlwZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9p
bnN0YW5jZV8pIHsKLSAgICBkZWxldGUgb3B0aW9uc187Ci0gIH0KLX0KLQotdm9pZCBNZXRob2RE
ZXNjcmlwdG9yUHJvdG86OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xF
X1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7
Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBNZXRob2REZXNjcmlwdG9yUHJvdG86OmRlc2NyaXB0
b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gTWV0
aG9kRGVzY3JpcHRvclByb3RvX2Rlc2NyaXB0b3JfOwotfQotCi1jb25zdCBNZXRob2REZXNjcmlw
dG9yUHJvdG8mIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAg
aWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJm
cHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3Rh
bmNlXzsKLX0KLQotTWV0aG9kRGVzY3JpcHRvclByb3RvKiBNZXRob2REZXNjcmlwdG9yUHJvdG86
OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotTWV0aG9kRGVzY3JpcHRvclByb3RvKiBNZXRo
b2REZXNjcmlwdG9yUHJvdG86Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkg
Y29uc3QgewotICBNZXRob2REZXNjcmlwdG9yUHJvdG8qIG4gPSBuZXcgTWV0aG9kRGVzY3JpcHRv
clByb3RvOwotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0K
LSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpDbGVhcigpIHsK
LS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2NsZWFyX3N0YXJ0Omdvb2dsZS5w
cm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8pCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0j
ZGVmaW5lIFpSX0hFTFBFUl8oZikgXAotICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHB1c2gi
KSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XaW52YWxpZC1vZmZz
ZXRvZlwiIikgXAotICBfX2J1aWx0aW5fb2Zmc2V0b2YoTWV0aG9kRGVzY3JpcHRvclByb3RvLCBm
KSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcG9wIikKLSNlbHNlCi0jZGVmaW5lIFpS
X0hFTFBFUl8oZikgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oXAotICAmcmVpbnRlcnByZXRfY2Fz
dDxNZXRob2REZXNjcmlwdG9yUHJvdG8qPigxNiktPmYpCi0jZW5kaWYKLQotI2RlZmluZSBaUl8o
Zmlyc3QsIGxhc3QpIGRvIHtcCi0gIDo6bWVtc2V0KCZmaXJzdCwgMCxcCi0gICAgICAgICAgIFpS
X0hFTFBFUl8obGFzdCkgLSBaUl9IRUxQRVJfKGZpcnN0KSArIHNpemVvZihsYXN0KSk7XAotfSB3
aGlsZSAoMCkKLQotICBpZiAoX2hhc19iaXRzX1swIC8gMzJdICYgNjN1KSB7Ci0gICAgWlJfKGNs
aWVudF9zdHJlYW1pbmdfLCBzZXJ2ZXJfc3RyZWFtaW5nXyk7Ci0gICAgaWYgKGhhc19uYW1lKCkp
IHsKLSAgICAgIG5hbWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgICB9Ci0gICAgaWYg
KGhhc19pbnB1dF90eXBlKCkpIHsKLSAgICAgIGlucHV0X3R5cGVfLkNsZWFyVG9FbXB0eU5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpKTsKLSAgICB9Ci0gICAgaWYgKGhhc19vdXRwdXRfdHlwZSgpKSB7Ci0gICAgICBvdXRw
dXRfdHlwZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICAgIH0KLSAgICBpZiAoaGFzX29w
dGlvbnMoKSkgewotICAgICAgaWYgKG9wdGlvbnNfICE9IE5VTEwpIG9wdGlvbnNfLT46Omdvb2ds
ZTo6cHJvdG9idWY6Ok1ldGhvZE9wdGlvbnM6OkNsZWFyKCk7Ci0gICAgfQotICB9Ci0KLSN1bmRl
ZiBaUl9IRUxQRVJfCi0jdW5kZWYgWlJfCi0KLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6
ZW9mKF9oYXNfYml0c18pKTsKLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3du
X2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5DbGVhcigpOwotICB9
Ci19Ci0KLWJvb2wgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRT
dHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5w
dXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShF
WFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRh
ZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90
b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8pCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFp
cjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dp
dGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdv
dG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8g
b3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0
YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMt
Pm11dGFibGVfbmFtZSgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICAgICAgICB0
aGlzLT5uYW1lKCkuZGF0YSgpLCB0aGlzLT5uYW1lKCkubGVuZ3RoKCksCi0gICAgICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpQQVJTRSwKLSAgICAgICAg
ICAgICJnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLm5hbWUiKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDE4KSkgZ290byBwYXJzZV9pbnB1dF90eXBlOwot
ICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIGlucHV0
X3R5cGUgPSAyOwotICAgICAgY2FzZSAyOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTgpIHsKLSAg
ICAgICAgIHBhcnNlX2lucHV0X3R5cGU6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAg
IGlucHV0LCB0aGlzLT5tdXRhYmxlX2lucHV0X3R5cGUoKSkpOwotICAgICAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZp
ZWxkKAotICAgICAgICAgICAgdGhpcy0+aW5wdXRfdHlwZSgpLmRhdGEoKSwgdGhpcy0+aW5wdXRf
dHlwZSgpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdDo6UEFSU0UsCi0gICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLk1ldGhv
ZERlc2NyaXB0b3JQcm90by5pbnB1dF90eXBlIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4
cGVjdFRhZygyNikpIGdvdG8gcGFyc2Vfb3V0cHV0X3R5cGU7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcgb3V0cHV0X3R5cGUgPSAzOwotICAgICAg
Y2FzZSAzOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMjYpIHsKLSAgICAgICAgIHBhcnNlX291dHB1
dF90eXBlOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy0+bXV0
YWJsZV9vdXRwdXRfdHlwZSgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICAgICAg
ICB0aGlzLT5vdXRwdXRfdHlwZSgpLmRhdGEoKSwgdGhpcy0+b3V0cHV0X3R5cGUoKS5sZW5ndGgo
KSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6
OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJv
dG8ub3V0cHV0X3R5cGUiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRs
ZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDM0KSkg
Z290byBwYXJzZV9vcHRpb25zOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8g
b3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zIG9wdGlvbnMgPSA0OwotICAg
ICAgY2FzZSA0OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMzQpIHsKLSAgICAgICAgIHBhcnNlX29w
dGlvbnM6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbCgKLSAgICAgICAgICAgICAgIGlucHV0LCBt
dXRhYmxlX29wdGlvbnMoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFu
ZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoNDAp
KSBnb3RvIHBhcnNlX2NsaWVudF9zdHJlYW1pbmc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
Ci0gICAgICAvLyBvcHRpb25hbCBib29sIGNsaWVudF9zdHJlYW1pbmcgPSA1IFtkZWZhdWx0ID0g
ZmFsc2VdOwotICAgICAgY2FzZSA1OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNDApIHsKLSAgICAg
ICAgIHBhcnNlX2NsaWVudF9zdHJlYW1pbmc6Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAg
ICAgICAgICAgICBib29sLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6VFlQRV9CT09MPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZjbGllbnRfc3RyZWFt
aW5nXykpKTsKLSAgICAgICAgICBzZXRfaGFzX2NsaWVudF9zdHJlYW1pbmcoKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDQ4KSkgZ290byBwYXJzZV9zZXJ2ZXJfc3RyZWFtaW5n
OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgYm9vbCBzZXJ2
ZXJfc3RyZWFtaW5nID0gNiBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgICAgIGNhc2UgNjogewotICAg
ICAgICBpZiAodGFnID09IDQ4KSB7Ci0gICAgICAgICBwYXJzZV9zZXJ2ZXJfc3RyZWFtaW5nOgot
ICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAg
ICAgICAgIGlucHV0LCAmc2VydmVyX3N0cmVhbWluZ18pKSk7Ci0gICAgICAgICAgc2V0X2hhc19z
ZXJ2ZXJfc3RyZWFtaW5nKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5k
bGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdEF0RW5kKCkp
IGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6
IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAgICBpZiAodGFnID09IDAgfHwKLSAgICAg
ICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRU
YWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7Ci0gICAgICAgICAgZ290
byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0gICAgICAgICAgICAgIGlucHV0LCB0YWcs
IG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9z
dWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8pCi0gIHJldHVybiB0
cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX2ZhaWx1
cmU6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bykKLSAgcmV0dXJuIGZhbHNl
OwotI3VuZGVmIERPXwotfQotCi12b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6U2VyaWFsaXpl
V2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0
U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNl
cmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvKQotICAv
LyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gIGlmIChoYXNfbmFtZSgpKSB7Ci0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05h
bWVkRmllbGQoCi0gICAgICB0aGlzLT5uYW1lKCkuZGF0YSgpLCB0aGlzLT5uYW1lKCkubGVuZ3Ro
KCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJ
QUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5uYW1l
Iik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Oldy
aXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgMSwgdGhpcy0+bmFtZSgpLCBvdXRwdXQpOwot
ICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGlucHV0X3R5cGUgPSAyOwotICBpZiAoaGFzX2lu
cHV0X3R5cGUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+aW5wdXRfdHlwZSgp
LmRhdGEoKSwgdGhpcy0+aW5wdXRfdHlwZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5w
cm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uaW5wdXRfdHlwZSIpOwotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJlQWxp
YXNlZCgKLSAgICAgIDIsIHRoaXMtPmlucHV0X3R5cGUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8v
IG9wdGlvbmFsIHN0cmluZyBvdXRwdXRfdHlwZSA9IDM7Ci0gIGlmIChoYXNfb3V0cHV0X3R5cGUo
KSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlm
eVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+b3V0cHV0X3R5cGUoKS5kYXRhKCks
IHRoaXMtPm91dHB1dF90eXBlKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVm
Lk1ldGhvZERlc2NyaXB0b3JQcm90by5vdXRwdXRfdHlwZSIpOwotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgK
LSAgICAgIDMsIHRoaXMtPm91dHB1dF90eXBlKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRp
b25hbCAuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMgb3B0aW9ucyA9IDQ7Ci0gIGlmICho
YXNfb3B0aW9ucygpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDQsICp0aGlzLT5vcHRp
b25zXywgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgY2xpZW50X3N0cmVhbWlu
ZyA9IDUgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGlmIChoYXNfY2xpZW50X3N0cmVhbWluZygpKSB7
Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRl
Qm9vbCg1LCB0aGlzLT5jbGllbnRfc3RyZWFtaW5nKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBv
cHRpb25hbCBib29sIHNlcnZlcl9zdHJlYW1pbmcgPSA2IFtkZWZhdWx0ID0gZmFsc2VdOwotICBp
ZiAoaGFzX3NlcnZlcl9zdHJlYW1pbmcoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2woNiwgdGhpcy0+c2VydmVyX3N0cmVhbWlu
ZygpLCBvdXRwdXQpOwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtu
b3duX2ZpZWxkcygpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkcygKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwg
b3V0cHV0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX2Vu
ZDpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvKQotfQotCi06Omdvb2dsZTo6
cHJvdG9idWY6OnVpbnQ4KiBNZXRob2REZXNjcmlwdG9yUHJvdG86OlNlcmlhbGl6ZVdpdGhDYWNo
ZWRTaXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlf
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bykKLSAgLy8gb3B0aW9u
YWwgc3RyaW5nIG5hbWUgPSAxOwotICBpZiAoaGFzX25hbWUoKSkgewotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxk
KAotICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgpLmxlbmd0aCgpLAotICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAot
ICAgICAgImdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ubmFtZSIpOwotICAg
IHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAxLCB0aGlzLT5uYW1lKCksIHRhcmdl
dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgaW5wdXRfdHlwZSA9IDI7Ci0gIGlmICho
YXNfaW5wdXRfdHlwZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICB0aGlzLT5pbnB1dF90
eXBlKCkuZGF0YSgpLCB0aGlzLT5pbnB1dF90eXBlKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29v
Z2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5pbnB1dF90eXBlIik7Ci0gICAgdGFy
Z2V0ID0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpXcml0ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDIsIHRoaXMtPmlucHV0X3R5cGUoKSwgdGFy
Z2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBvdXRwdXRfdHlwZSA9IDM7Ci0gIGlm
IChoYXNfb3V0cHV0X3R5cGUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+b3V0
cHV0X3R5cGUoKS5kYXRhKCksIHRoaXMtPm91dHB1dF90eXBlKCkubGVuZ3RoKCksCi0gICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAg
ICAiZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5vdXRwdXRfdHlwZSIpOwot
ICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAzLCB0aGlzLT5vdXRwdXRfdHlw
ZSgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5NZXRo
b2RPcHRpb25zIG9wdGlvbnMgPSA0OwotICBpZiAoaGFzX29wdGlvbnMoKSkgewotICAgIHRhcmdl
dCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAg
IFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDQsICp0aGlzLT5vcHRpb25z
XywgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgY2xpZW50X3N0cmVhbWluZyA9
IDUgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGlmIChoYXNfY2xpZW50X3N0cmVhbWluZygpKSB7Ci0g
ICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OldyaXRlQm9vbFRvQXJyYXkoNSwgdGhpcy0+Y2xpZW50X3N0cmVhbWluZygpLCB0YXJnZXQpOwot
ICB9Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBzZXJ2ZXJfc3RyZWFtaW5nID0gNiBbZGVmYXVsdCA9
IGZhbHNlXTsKLSAgaWYgKGhhc19zZXJ2ZXJfc3RyZWFtaW5nKCkpIHsKLSAgICB0YXJnZXQgPSA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sVG9B
cnJheSg2LCB0aGlzLT5zZXJ2ZXJfc3RyZWFtaW5nKCksIHRhcmdldCk7Ci0gIH0KLQotICBpZiAo
X2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0YXJnZXQg
PSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtu
b3duRmllbGRzVG9BcnJheSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwgdGFyZ2V0KTsKLSAg
fQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpn
b29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvKQotICByZXR1cm4gdGFyZ2V0Owot
fQotCi1pbnQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJv
dG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAg
aWYgKF9oYXNfYml0c19bMCAvIDMyXSAmIDYzdSkgewotICAgIC8vIG9wdGlvbmFsIHN0cmluZyBu
YW1lID0gMTsKLSAgICBpZiAoaGFzX25hbWUoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsK
LSAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0
cmluZ1NpemUoCi0gICAgICAgICAgdGhpcy0+bmFtZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBvcHRp
b25hbCBzdHJpbmcgaW5wdXRfdHlwZSA9IDI7Ci0gICAgaWYgKGhhc19pbnB1dF90eXBlKCkpIHsK
LSAgICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICAgIHRoaXMtPmlucHV0
X3R5cGUoKSk7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwgc3RyaW5nIG91dHB1dF90eXBlID0g
MzsKLSAgICBpZiAoaGFzX291dHB1dF90eXBlKCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSAr
Ci0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpT
dHJpbmdTaXplKAotICAgICAgICAgIHRoaXMtPm91dHB1dF90eXBlKCkpOwotICAgIH0KLQotICAg
IC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucyBvcHRpb25zID0gNDsK
LSAgICBpZiAoaGFzX29wdGlvbnMoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VT
aXplTm9WaXJ0dWFsKAotICAgICAgICAgICp0aGlzLT5vcHRpb25zXyk7Ci0gICAgfQotCi0gICAg
Ly8gb3B0aW9uYWwgYm9vbCBjbGllbnRfc3RyZWFtaW5nID0gNSBbZGVmYXVsdCA9IGZhbHNlXTsK
LSAgICBpZiAoaGFzX2NsaWVudF9zdHJlYW1pbmcoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAx
ICsgMTsKLSAgICB9Ci0KLSAgICAvLyBvcHRpb25hbCBib29sIHNlcnZlcl9zdHJlYW1pbmcgPSA2
IFtkZWZhdWx0ID0gZmFsc2VdOwotICAgIGlmIChoYXNfc2VydmVyX3N0cmVhbWluZygpKSB7Ci0g
ICAgICB0b3RhbF9zaXplICs9IDEgKyAxOwotICAgIH0KLQotICB9Ci0gIGlmIChfaW50ZXJuYWxf
bWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHRvdGFsX3NpemUgKz0KLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OkNvbXB1dGVVbmtu
b3duRmllbGRzU2l6ZSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSk7Ci0gIH0KLSAgR09PR0xF
X1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFs
X3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4g
dG90YWxfc2l6ZTsKLX0KLQotdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86Ok1lcmdlRnJvbShj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8pCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJv
bSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGNvbnN0IE1ldGhvZERlc2Ny
aXB0b3JQcm90byogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IE1ldGhvZERlc2NyaXB0b3JQcm90bz4oCi0g
ICAgICAgICAgJmZyb20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5w
cm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8pCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6UmVmbGVjdGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rf
c3VjY2Vzczpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvKQotICAgIE1lcmdl
RnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6TWVy
Z2VGcm9tKGNvbnN0IE1ldGhvZERlc2NyaXB0b3JQcm90byYgZnJvbSkgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnBy
b3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bykKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNF
KCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgaWYgKGZyb20uX2hh
c19iaXRzX1swIC8gMzJdICYgKDB4ZmZ1IDw8ICgwICUgMzIpKSkgewotICAgIGlmIChmcm9tLmhh
c19uYW1lKCkpIHsKLSAgICAgIHNldF9oYXNfbmFtZSgpOwotICAgICAgbmFtZV8uQXNzaWduV2l0
aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpLCBmcm9tLm5hbWVfKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX2lucHV0
X3R5cGUoKSkgewotICAgICAgc2V0X2hhc19pbnB1dF90eXBlKCk7Ci0gICAgICBpbnB1dF90eXBl
Xy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20uaW5wdXRfdHlwZV8pOwotICAgIH0KLSAgICBp
ZiAoZnJvbS5oYXNfb3V0cHV0X3R5cGUoKSkgewotICAgICAgc2V0X2hhc19vdXRwdXRfdHlwZSgp
OwotICAgICAgb3V0cHV0X3R5cGVfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJvbS5vdXRwdXRf
dHlwZV8pOwotICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfb3B0aW9ucygpKSB7Ci0gICAgICBtdXRh
YmxlX29wdGlvbnMoKS0+Ojpnb29nbGU6OnByb3RvYnVmOjpNZXRob2RPcHRpb25zOjpNZXJnZUZy
b20oZnJvbS5vcHRpb25zKCkpOwotICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfY2xpZW50X3N0cmVh
bWluZygpKSB7Ci0gICAgICBzZXRfY2xpZW50X3N0cmVhbWluZyhmcm9tLmNsaWVudF9zdHJlYW1p
bmcoKSk7Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc19zZXJ2ZXJfc3RyZWFtaW5nKCkpIHsKLSAg
ICAgIHNldF9zZXJ2ZXJfc3RyZWFtaW5nKGZyb20uc2VydmVyX3N0cmVhbWluZygpKTsKLSAgICB9
Ci0gIH0KLSAgaWYgKGZyb20uX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRz
KCkpIHsKLSAgICBtdXRhYmxlX3Vua25vd25fZmllbGRzKCktPk1lcmdlRnJvbShmcm9tLnVua25v
d25fZmllbGRzKCkpOwotICB9Ci19Ci0KLXZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpDb3B5
RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnBy
b3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVy
bjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIE1ldGhvZERlc2Ny
aXB0b3JQcm90bzo6Q29weUZyb20oY29uc3QgTWV0aG9kRGVzY3JpcHRvclByb3RvJiBmcm9tKSB7
Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0
YXJ0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8pCi0gIGlmICgmZnJvbSA9
PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9v
bCBNZXRob2REZXNjcmlwdG9yUHJvdG86OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgaWYg
KGhhc19vcHRpb25zKCkpIHsKLSAgICBpZiAoIXRoaXMtPm9wdGlvbnNfLT5Jc0luaXRpYWxpemVk
KCkpIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNZXRob2RE
ZXNjcmlwdG9yUHJvdG86OlN3YXAoTWV0aG9kRGVzY3JpcHRvclByb3RvKiBvdGhlcikgewotICBp
ZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQotdm9p
ZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OkludGVybmFsU3dhcChNZXRob2REZXNjcmlwdG9yUHJv
dG8qIG90aGVyKSB7Ci0gIG5hbWVfLlN3YXAoJm90aGVyLT5uYW1lXyk7Ci0gIGlucHV0X3R5cGVf
LlN3YXAoJm90aGVyLT5pbnB1dF90eXBlXyk7Ci0gIG91dHB1dF90eXBlXy5Td2FwKCZvdGhlci0+
b3V0cHV0X3R5cGVfKTsKLSAgc3RkOjpzd2FwKG9wdGlvbnNfLCBvdGhlci0+b3B0aW9uc18pOwot
ICBzdGQ6OnN3YXAoY2xpZW50X3N0cmVhbWluZ18sIG90aGVyLT5jbGllbnRfc3RyZWFtaW5nXyk7
Ci0gIHN0ZDo6c3dhcChzZXJ2ZXJfc3RyZWFtaW5nXywgb3RoZXItPnNlcnZlcl9zdHJlYW1pbmdf
KTsKLSAgc3RkOjpzd2FwKF9oYXNfYml0c19bMF0sIG90aGVyLT5faGFzX2JpdHNfWzBdKTsKLSAg
X2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7Ci0g
IHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19Ci0KLTo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpHZXRNZXRh
ZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0
b3IgPSBNZXRob2REZXNjcmlwdG9yUHJvdG9fZGVzY3JpcHRvcl87Ci0gIG1ldGFkYXRhLnJlZmxl
Y3Rpb24gPSBNZXRob2REZXNjcmlwdG9yUHJvdG9fcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRh
ZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gTWV0aG9k
RGVzY3JpcHRvclByb3RvCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLWJvb2wgTWV0
aG9kRGVzY3JpcHRvclByb3RvOjpoYXNfbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2Jp
dHNfWzBdICYgMHgwMDAwMDAwMXUpICE9IDA7Ci19Ci12b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90
bzo6c2V0X2hhc19uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDF1OwotfQot
dm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hhc19uYW1lKCkgewotICBfaGFzX2Jp
dHNfWzBdICY9IH4weDAwMDAwMDAxdTsKLX0KLXZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpj
bGVhcl9uYW1lKCkgewotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFy
X2hhc19uYW1lKCk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgTWV0aG9kRGVzY3JpcHRvclBy
b3RvOjpuYW1lKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
Z2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgcmV0dXJu
IG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6
c2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19uYW1lKCk7
Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5u
YW1lKQotfQotIHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFy
KiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6
c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0K
LSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUs
IHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFs
dWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9p
bnRlcjpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci0gOjpz
dGQ6OnN0cmluZyogTWV0aG9kRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX25hbWUoKSB7Ci0gIHNl
dF9oYXNfbmFtZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJs
ZTpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIHJldHVybiBu
YW1lXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIDo6c3RkOjpzdHJpbmcqIE1ldGhvZERlc2Ny
aXB0b3JQcm90bzo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLm5h
bWUpCi0gIGNsZWFyX2hhc19uYW1lKCk7Ci0gIHJldHVybiBuYW1lXy5SZWxlYXNlTm9BcmVuYSgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCkpOwotfQotIHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX25hbWUo
OjpzdGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hh
c19uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX25hbWUoKTsKLSAgfQotICBuYW1l
Xy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlw
dG9yUHJvdG8ubmFtZSkKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGlucHV0X3R5cGUgPSAyOwot
Ym9vbCBNZXRob2REZXNjcmlwdG9yUHJvdG86Omhhc19pbnB1dF90eXBlKCkgY29uc3QgewotICBy
ZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAydSkgIT0gMDsKLX0KLXZvaWQgTWV0aG9k
RGVzY3JpcHRvclByb3RvOjpzZXRfaGFzX2lucHV0X3R5cGUoKSB7Ci0gIF9oYXNfYml0c19bMF0g
fD0gMHgwMDAwMDAwMnU7Ci19Ci12b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFz
X2lucHV0X3R5cGUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDJ1OwotfQotdm9p
ZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OmNsZWFyX2lucHV0X3R5cGUoKSB7Ci0gIGlucHV0X3R5
cGVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX2lucHV0X3R5cGUoKTsK
LX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBNZXRob2REZXNjcmlwdG9yUHJvdG86OmlucHV0X3R5
cGUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29v
Z2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5pbnB1dF90eXBlKQotICByZXR1cm4g
aW5wdXRfdHlwZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgTWV0aG9kRGVzY3JpcHRvclBy
b3RvOjpzZXRfaW5wdXRfdHlwZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRf
aGFzX2lucHV0X3R5cGUoKTsKLSAgaW5wdXRfdHlwZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYu
TWV0aG9kRGVzY3JpcHRvclByb3RvLmlucHV0X3R5cGUpCi19Ci0gdm9pZCBNZXRob2REZXNjcmlw
dG9yUHJvdG86OnNldF9pbnB1dF90eXBlKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNf
aW5wdXRfdHlwZSgpOwotICBpbnB1dF90eXBlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmlu
Zyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6
Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5pbnB1dF90eXBlKQotfQotIHZv
aWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXRfaW5wdXRfdHlwZShjb25zdCBjaGFyKiB2YWx1
ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19pbnB1dF90eXBlKCk7Ci0gIGlucHV0X3R5cGVf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8u
aW5wdXRfdHlwZSkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBNZXRob2REZXNjcmlwdG9yUHJvdG86Om11
dGFibGVfaW5wdXRfdHlwZSgpIHsKLSAgc2V0X2hhc19pbnB1dF90eXBlKCk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2RE
ZXNjcmlwdG9yUHJvdG8uaW5wdXRfdHlwZSkKLSAgcmV0dXJuIGlucHV0X3R5cGVfLk11dGFibGVO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogTWV0aG9kRGVzY3JpcHRvclByb3RvOjpy
ZWxlYXNlX2lucHV0X3R5cGUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uaW5wdXRfdHlw
ZSkKLSAgY2xlYXJfaGFzX2lucHV0X3R5cGUoKTsKLSAgcmV0dXJuIGlucHV0X3R5cGVfLlJlbGVh
c2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNldF9hbGxv
Y2F0ZWRfaW5wdXRfdHlwZSg6OnN0ZDo6c3RyaW5nKiBpbnB1dF90eXBlKSB7Ci0gIGlmIChpbnB1
dF90eXBlICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX2lucHV0X3R5cGUoKTsKLSAgfSBlbHNlIHsK
LSAgICBjbGVhcl9oYXNfaW5wdXRfdHlwZSgpOwotICB9Ci0gIGlucHV0X3R5cGVfLlNldEFsbG9j
YXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLCBpbnB1dF90eXBlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQ
cm90by5pbnB1dF90eXBlKQotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgb3V0cHV0X3R5cGUgPSAz
OwotYm9vbCBNZXRob2REZXNjcmlwdG9yUHJvdG86Omhhc19vdXRwdXRfdHlwZSgpIGNvbnN0IHsK
LSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci12b2lkIE1l
dGhvZERlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19vdXRwdXRfdHlwZSgpIHsKLSAgX2hhc19iaXRz
X1swXSB8PSAweDAwMDAwMDA0dTsKLX0KLXZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpjbGVh
cl9oYXNfb3V0cHV0X3R5cGUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDR1Owot
fQotdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OmNsZWFyX291dHB1dF90eXBlKCkgewotICBv
dXRwdXRfdHlwZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfb3V0cHV0
X3R5cGUoKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBNZXRob2REZXNjcmlwdG9yUHJvdG86
Om91dHB1dF90eXBlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ub3V0cHV0X3R5cGUp
Ci0gIHJldHVybiBvdXRwdXRfdHlwZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgTWV0aG9k
RGVzY3JpcHRvclByb3RvOjpzZXRfb3V0cHV0X3R5cGUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFs
dWUpIHsKLSAgc2V0X2hhc19vdXRwdXRfdHlwZSgpOwotICBvdXRwdXRfdHlwZV8uU2V0Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpn
b29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLm91dHB1dF90eXBlKQotfQotIHZv
aWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXRfb3V0cHV0X3R5cGUoY29uc3QgY2hhciogdmFs
dWUpIHsKLSAgc2V0X2hhc19vdXRwdXRfdHlwZSgpOwotICBvdXRwdXRfdHlwZV8uU2V0Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8u
b3V0cHV0X3R5cGUpCi19Ci0gdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNldF9vdXRwdXRf
dHlwZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19vdXRwdXRf
dHlwZSgpOwotICBvdXRwdXRfdHlwZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3Ry
aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVm
Lk1ldGhvZERlc2NyaXB0b3JQcm90by5vdXRwdXRfdHlwZSkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBN
ZXRob2REZXNjcmlwdG9yUHJvdG86Om11dGFibGVfb3V0cHV0X3R5cGUoKSB7Ci0gIHNldF9oYXNf
b3V0cHV0X3R5cGUoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFi
bGU6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5vdXRwdXRfdHlwZSkKLSAg
cmV0dXJuIG91dHB1dF90eXBlXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIDo6c3RkOjpzdHJp
bmcqIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9vdXRwdXRfdHlwZSgpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLk1l
dGhvZERlc2NyaXB0b3JQcm90by5vdXRwdXRfdHlwZSkKLSAgY2xlYXJfaGFzX291dHB1dF90eXBl
KCk7Ci0gIHJldHVybiBvdXRwdXRfdHlwZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lk
IE1ldGhvZERlc2NyaXB0b3JQcm90bzo6c2V0X2FsbG9jYXRlZF9vdXRwdXRfdHlwZSg6OnN0ZDo6
c3RyaW5nKiBvdXRwdXRfdHlwZSkgewotICBpZiAob3V0cHV0X3R5cGUgIT0gTlVMTCkgewotICAg
IHNldF9oYXNfb3V0cHV0X3R5cGUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfb3V0cHV0
X3R5cGUoKTsKLSAgfQotICBvdXRwdXRfdHlwZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIG91
dHB1dF90eXBlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxv
Y2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5vdXRwdXRfdHlwZSkK
LX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zIG9wdGlvbnMg
PSA0OwotYm9vbCBNZXRob2REZXNjcmlwdG9yUHJvdG86Omhhc19vcHRpb25zKCkgY29uc3Qgewot
ICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDA4dSkgIT0gMDsKLX0KLXZvaWQgTWV0
aG9kRGVzY3JpcHRvclByb3RvOjpzZXRfaGFzX29wdGlvbnMoKSB7Ci0gIF9oYXNfYml0c19bMF0g
fD0gMHgwMDAwMDAwOHU7Ci19Ci12b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFz
X29wdGlvbnMoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDh1OwotfQotdm9pZCBN
ZXRob2REZXNjcmlwdG9yUHJvdG86OmNsZWFyX29wdGlvbnMoKSB7Ci0gIGlmIChvcHRpb25zXyAh
PSBOVUxMKSBvcHRpb25zXy0+Ojpnb29nbGU6OnByb3RvYnVmOjpNZXRob2RPcHRpb25zOjpDbGVh
cigpOwotICBjbGVhcl9oYXNfb3B0aW9ucygpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXRob2RPcHRpb25zJiBNZXRob2REZXNjcmlwdG9yUHJvdG86Om9wdGlvbnMoKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVm
Lk1ldGhvZERlc2NyaXB0b3JQcm90by5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc18gIT0gTlVM
TCA/ICpvcHRpb25zXyA6ICpkZWZhdWx0X2luc3RhbmNlXy0+b3B0aW9uc187Ci19Ci06Omdvb2ds
ZTo6cHJvdG9idWY6Ok1ldGhvZE9wdGlvbnMqIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6bXV0YWJs
ZV9vcHRpb25zKCkgewotICBzZXRfaGFzX29wdGlvbnMoKTsKLSAgaWYgKG9wdGlvbnNfID09IE5V
TEwpIHsKLSAgICBvcHRpb25zXyA9IG5ldyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZE9wdGlv
bnM7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29v
Z2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5vcHRpb25zKQotICByZXR1cm4gb3B0
aW9uc187Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZE9wdGlvbnMqIE1ldGhvZERlc2Ny
aXB0b3JQcm90bzo6cmVsZWFzZV9vcHRpb25zKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3Rv
Lm9wdGlvbnMpCi0gIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWV0aG9kT3B0aW9ucyogdGVtcCA9IG9wdGlvbnNfOwotICBvcHRpb25zXyA9IE5VTEw7Ci0gIHJl
dHVybiB0ZW1wOwotfQotdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRf
b3B0aW9ucyg6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZE9wdGlvbnMqIG9wdGlvbnMpIHsKLSAg
ZGVsZXRlIG9wdGlvbnNfOwotICBvcHRpb25zXyA9IG9wdGlvbnM7Ci0gIGlmIChvcHRpb25zKSB7
Ci0gICAgc2V0X2hhc19vcHRpb25zKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX29wdGlv
bnMoKTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9j
YXRlZDpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi19Ci0K
LS8vIG9wdGlvbmFsIGJvb2wgY2xpZW50X3N0cmVhbWluZyA9IDUgW2RlZmF1bHQgPSBmYWxzZV07
Ci1ib29sIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6aGFzX2NsaWVudF9zdHJlYW1pbmcoKSBjb25z
dCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMTB1KSAhPSAwOwotfQotdm9p
ZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfY2xpZW50X3N0cmVhbWluZygpIHsKLSAg
X2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDEwdTsKLX0KLXZvaWQgTWV0aG9kRGVzY3JpcHRvclBy
b3RvOjpjbGVhcl9oYXNfY2xpZW50X3N0cmVhbWluZygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+
MHgwMDAwMDAxMHU7Ci19Ci12b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfY2xpZW50
X3N0cmVhbWluZygpIHsKLSAgY2xpZW50X3N0cmVhbWluZ18gPSBmYWxzZTsKLSAgY2xlYXJfaGFz
X2NsaWVudF9zdHJlYW1pbmcoKTsKLX0KLSBib29sIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6Y2xp
ZW50X3N0cmVhbWluZygpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2dldDpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmNsaWVudF9zdHJl
YW1pbmcpCi0gIHJldHVybiBjbGllbnRfc3RyZWFtaW5nXzsKLX0KLSB2b2lkIE1ldGhvZERlc2Ny
aXB0b3JQcm90bzo6c2V0X2NsaWVudF9zdHJlYW1pbmcoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFz
X2NsaWVudF9zdHJlYW1pbmcoKTsKLSAgY2xpZW50X3N0cmVhbWluZ18gPSB2YWx1ZTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWV0aG9k
RGVzY3JpcHRvclByb3RvLmNsaWVudF9zdHJlYW1pbmcpCi19Ci0KLS8vIG9wdGlvbmFsIGJvb2wg
c2VydmVyX3N0cmVhbWluZyA9IDYgW2RlZmF1bHQgPSBmYWxzZV07Ci1ib29sIE1ldGhvZERlc2Ny
aXB0b3JQcm90bzo6aGFzX3NlcnZlcl9zdHJlYW1pbmcoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hh
c19iaXRzX1swXSAmIDB4MDAwMDAwMjB1KSAhPSAwOwotfQotdm9pZCBNZXRob2REZXNjcmlwdG9y
UHJvdG86OnNldF9oYXNfc2VydmVyX3N0cmVhbWluZygpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAw
eDAwMDAwMDIwdTsKLX0KLXZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfc2Vy
dmVyX3N0cmVhbWluZygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAyMHU7Ci19Ci12
b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfc2VydmVyX3N0cmVhbWluZygpIHsKLSAg
c2VydmVyX3N0cmVhbWluZ18gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX3NlcnZlcl9zdHJlYW1pbmco
KTsKLX0KLSBib29sIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6c2VydmVyX3N0cmVhbWluZygpIGNv
bnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJv
dG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnNlcnZlcl9zdHJlYW1pbmcpCi0gIHJldHVybiBz
ZXJ2ZXJfc3RyZWFtaW5nXzsKLX0KLSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6c2V0X3Nl
cnZlcl9zdHJlYW1pbmcoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFzX3NlcnZlcl9zdHJlYW1pbmco
KTsKLSAgc2VydmVyX3N0cmVhbWluZ18gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLnNl
cnZlcl9zdHJlYW1pbmcpCi19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9I
RUFERVJTCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVt
RGVzY3JpcHRvciogRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX2Rlc2NyaXB0b3IoKSB7Ci0gIHBy
b3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gRmlsZU9wdGlvbnNfT3B0
aW1pemVNb2RlX2Rlc2NyaXB0b3JfOwotfQotYm9vbCBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVf
SXNWYWxpZChpbnQgdmFsdWUpIHsKLSAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSAxOgotICAg
IGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwg
X01TQ19WRVIgPj0gMTkwMAotY29uc3QgRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlIEZpbGVPcHRp
b25zOjpTUEVFRDsKLWNvbnN0IEZpbGVPcHRpb25zX09wdGltaXplTW9kZSBGaWxlT3B0aW9uczo6
Q09ERV9TSVpFOwotY29uc3QgRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlIEZpbGVPcHRpb25zOjpM
SVRFX1JVTlRJTUU7Ci1jb25zdCBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUgRmlsZU9wdGlvbnM6
Ok9wdGltaXplTW9kZV9NSU47Ci1jb25zdCBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUgRmlsZU9w
dGlvbnM6Ok9wdGltaXplTW9kZV9NQVg7Ci1jb25zdCBpbnQgRmlsZU9wdGlvbnM6Ok9wdGltaXpl
TW9kZV9BUlJBWVNJWkU7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZF
UiA+PSAxOTAwCi0jaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNv
bnN0IGludCBGaWxlT3B0aW9uczo6a0phdmFQYWNrYWdlRmllbGROdW1iZXI7Ci1jb25zdCBpbnQg
RmlsZU9wdGlvbnM6OmtKYXZhT3V0ZXJDbGFzc25hbWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBG
aWxlT3B0aW9uczo6a0phdmFNdWx0aXBsZUZpbGVzRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRmls
ZU9wdGlvbnM6OmtKYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoRmllbGROdW1iZXI7Ci1jb25zdCBp
bnQgRmlsZU9wdGlvbnM6OmtKYXZhU3RyaW5nQ2hlY2tVdGY4RmllbGROdW1iZXI7Ci1jb25zdCBp
bnQgRmlsZU9wdGlvbnM6OmtPcHRpbWl6ZUZvckZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpbGVP
cHRpb25zOjprR29QYWNrYWdlRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRmlsZU9wdGlvbnM6OmtD
Y0dlbmVyaWNTZXJ2aWNlc0ZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpbGVPcHRpb25zOjprSmF2
YUdlbmVyaWNTZXJ2aWNlc0ZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpbGVPcHRpb25zOjprUHlH
ZW5lcmljU2VydmljZXNGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWxlT3B0aW9uczo6a0RlcHJl
Y2F0ZWRGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWxlT3B0aW9uczo6a0NjRW5hYmxlQXJlbmFz
RmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRmlsZU9wdGlvbnM6OmtPYmpjQ2xhc3NQcmVmaXhGaWVs
ZE51bWJlcjsKLWNvbnN0IGludCBGaWxlT3B0aW9uczo6a0NzaGFycE5hbWVzcGFjZUZpZWxkTnVt
YmVyOwotY29uc3QgaW50IEZpbGVPcHRpb25zOjprVW5pbnRlcnByZXRlZE9wdGlvbkZpZWxkTnVt
YmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAot
Ci1GaWxlT3B0aW9uczo6RmlsZU9wdGlvbnMoKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkZp
bGVPcHRpb25zKQotfQotCi12b2lkIEZpbGVPcHRpb25zOjpJbml0QXNEZWZhdWx0SW5zdGFuY2Uo
KSB7Ci19Ci0KLUZpbGVPcHRpb25zOjpGaWxlT3B0aW9ucyhjb25zdCBGaWxlT3B0aW9ucyYgZnJv
bSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0
YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1
Zi5GaWxlT3B0aW9ucykKLX0KLQotdm9pZCBGaWxlT3B0aW9uczo6U2hhcmVkQ3RvcigpIHsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmcoKTsKLSAgX2NhY2hl
ZF9zaXplXyA9IDA7Ci0gIGphdmFfcGFja2FnZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBq
YXZhX291dGVyX2NsYXNzbmFtZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBqYXZhX211bHRp
cGxlX2ZpbGVzXyA9IGZhbHNlOwotICBqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaF8gPSBm
YWxzZTsKLSAgamF2YV9zdHJpbmdfY2hlY2tfdXRmOF8gPSBmYWxzZTsKLSAgb3B0aW1pemVfZm9y
XyA9IDE7Ci0gIGdvX3BhY2thZ2VfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2NfZ2VuZXJp
Y19zZXJ2aWNlc18gPSBmYWxzZTsKLSAgamF2YV9nZW5lcmljX3NlcnZpY2VzXyA9IGZhbHNlOwot
ICBweV9nZW5lcmljX3NlcnZpY2VzXyA9IGZhbHNlOwotICBkZXByZWNhdGVkXyA9IGZhbHNlOwot
ICBjY19lbmFibGVfYXJlbmFzXyA9IGZhbHNlOwotICBvYmpjX2NsYXNzX3ByZWZpeF8uVW5zYWZl
U2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotICBjc2hhcnBfbmFtZXNwYWNlXy5VbnNhZmVTZXREZWZhdWx0KCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSk7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci19Ci0K
LUZpbGVPcHRpb25zOjp+RmlsZU9wdGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucykKLSAgU2hhcmVkRHRv
cigpOwotfQotCi12b2lkIEZpbGVPcHRpb25zOjpTaGFyZWREdG9yKCkgewotICBqYXZhX3BhY2th
Z2VfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGphdmFfb3V0ZXJfY2xhc3NuYW1lXy5EZXN0cm95
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotICBnb19wYWNrYWdlXy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBvYmpj
X2NsYXNzX3ByZWZpeF8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY3NoYXJwX25hbWVzcGFjZV8u
RGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsK
LSAgfQotfQotCi12b2lkIEZpbGVPcHRpb25zOjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25z
dCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRf
c2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0K
LWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogRmlsZU9wdGlvbnM6OmRlc2Ny
aXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4g
RmlsZU9wdGlvbnNfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IEZpbGVPcHRpb25zJiBGaWxlT3B0
aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5V
TEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJv
dG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRmlsZU9wdGlvbnMqIEZp
bGVPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLUZpbGVPcHRpb25zKiBGaWxl
T3B0aW9uczo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0g
IEZpbGVPcHRpb25zKiBuID0gbmV3IEZpbGVPcHRpb25zOwotICBpZiAoYXJlbmEgIT0gTlVMTCkg
ewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgRmlsZU9w
dGlvbnM6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xl
YXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zKQotICBfZXh0ZW5zaW9uc18uQ2xl
YXIoKTsKLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNkZWZpbmUgWlJfSEVMUEVSXyhmKSBcCi0g
IF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcHVzaCIpIFwKLSAgX1ByYWdtYSgiY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkIFwiLVdpbnZhbGlkLW9mZnNldG9mXCIiKSBcCi0gIF9fYnVpbHRpbl9v
ZmZzZXRvZihGaWxlT3B0aW9ucywgZikgXAotICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHBv
cCIpCi0jZWxzZQotI2RlZmluZSBaUl9IRUxQRVJfKGYpIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KFwKLSAgJnJlaW50ZXJwcmV0X2Nhc3Q8RmlsZU9wdGlvbnMqPigxNiktPmYpCi0jZW5kaWYKLQot
I2RlZmluZSBaUl8oZmlyc3QsIGxhc3QpIGRvIHtcCi0gIDo6bWVtc2V0KCZmaXJzdCwgMCxcCi0g
ICAgICAgICAgIFpSX0hFTFBFUl8obGFzdCkgLSBaUl9IRUxQRVJfKGZpcnN0KSArIHNpemVvZihs
YXN0KSk7XAotfSB3aGlsZSAoMCkKLQotICBpZiAoX2hhc19iaXRzX1swIC8gMzJdICYgMjU1dSkg
ewotICAgIFpSXyhqYXZhX211bHRpcGxlX2ZpbGVzXywgY2NfZ2VuZXJpY19zZXJ2aWNlc18pOwot
ICAgIGlmIChoYXNfamF2YV9wYWNrYWdlKCkpIHsKLSAgICAgIGphdmFfcGFja2FnZV8uQ2xlYXJU
b0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotICAgIH0KLSAgICBpZiAoaGFzX2phdmFfb3V0ZXJfY2xhc3Nu
YW1lKCkpIHsKLSAgICAgIGphdmFfb3V0ZXJfY2xhc3NuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci0gICAgfQotICAgIG9wdGltaXplX2Zvcl8gPSAxOwotICAgIGlmIChoYXNfZ29fcGFj
a2FnZSgpKSB7Ci0gICAgICBnb19wYWNrYWdlXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0g
ICAgfQotICB9Ci0gIGlmIChfaGFzX2JpdHNfWzggLyAzMl0gJiAxNjEyOHUpIHsKLSAgICBaUl8o
amF2YV9nZW5lcmljX3NlcnZpY2VzXywgY2NfZW5hYmxlX2FyZW5hc18pOwotICAgIGlmIChoYXNf
b2JqY19jbGFzc19wcmVmaXgoKSkgewotICAgICAgb2JqY19jbGFzc19wcmVmaXhfLkNsZWFyVG9F
bXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpKTsKLSAgICB9Ci0gICAgaWYgKGhhc19jc2hhcnBfbmFtZXNwYWNlKCkp
IHsKLSAgICAgIGNzaGFycF9uYW1lc3BhY2VfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAg
ICB9Ci0gIH0KLQotI3VuZGVmIFpSX0hFTFBFUl8KLSN1bmRlZiBaUl8KLQotICB1bmludGVycHJl
dGVkX29wdGlvbl8uQ2xlYXIoKTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9o
YXNfYml0c18pKTsKLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxk
cygpKSB7Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5DbGVhcigpOwotICB9Ci19Ci0K
LWJvb2wgRmlsZU9wdGlvbnM6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBE
T18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3Rv
IGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25z
KQotICBmb3IgKDs7KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWlu
dDMyLCBib29sPiBwID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0b2ZmKDE2MzgzKTsKLSAgICB0YWcg
PSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAg
c3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0
VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIGphdmFfcGFj
a2FnZSA9IDE7Ci0gICAgICBjYXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxMCkgewotICAg
ICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
UmVhZFN0cmluZygKLSAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9qYXZhX3Bh
Y2thZ2UoKSkpOwotICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgICAgICAgdGhpcy0+amF2
YV9wYWNrYWdlKCkuZGF0YSgpLCB0aGlzLT5qYXZhX3BhY2thZ2UoKS5sZW5ndGgoKSwKLSAgICAg
ICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlBBUlNFLAot
ICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5qYXZhX3BhY2thZ2UiKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDY2KSkgZ290byBwYXJzZV9qYXZhX291
dGVyX2NsYXNzbmFtZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlv
bmFsIHN0cmluZyBqYXZhX291dGVyX2NsYXNzbmFtZSA9IDg7Ci0gICAgICBjYXNlIDg6IHsKLSAg
ICAgICAgaWYgKHRhZyA9PSA2NikgewotICAgICAgICAgcGFyc2VfamF2YV9vdXRlcl9jbGFzc25h
bWU6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5tdXRhYmxl
X2phdmFfb3V0ZXJfY2xhc3NuYW1lKCkpKTsKLSAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAg
ICAgICAgIHRoaXMtPmphdmFfb3V0ZXJfY2xhc3NuYW1lKCkuZGF0YSgpLCB0aGlzLT5qYXZhX291
dGVyX2NsYXNzbmFtZSgpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6UEFSU0UsCi0gICAgICAgICAgICAiZ29vZ2xlLnByb3Rv
YnVmLkZpbGVPcHRpb25zLmphdmFfb3V0ZXJfY2xhc3NuYW1lIik7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aW5wdXQtPkV4cGVjdFRhZyg3MikpIGdvdG8gcGFyc2Vfb3B0aW1pemVfZm9yOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWxl
T3B0aW9ucy5PcHRpbWl6ZU1vZGUgb3B0aW1pemVfZm9yID0gOSBbZGVmYXVsdCA9IFNQRUVEXTsK
LSAgICAgIGNhc2UgOTogewotICAgICAgICBpZiAodGFnID09IDcyKSB7Ci0gICAgICAgICBwYXJz
ZV9vcHRpbWl6ZV9mb3I6Ci0gICAgICAgICAgaW50IHZhbHVlOwotICAgICAgICAgIERPXygoOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8
Ci0gICAgICAgICAgICAgICAgICAgaW50LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6VFlQRV9FTlVNPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZ2YWx1
ZSkpKTsKLSAgICAgICAgICBpZiAoOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0aW9uc19PcHRp
bWl6ZU1vZGVfSXNWYWxpZCh2YWx1ZSkpIHsKLSAgICAgICAgICAgIHNldF9vcHRpbWl6ZV9mb3Io
c3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9wdGlvbnNfT3B0aW1pemVNb2Rl
ID4odmFsdWUpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbXV0YWJsZV91bmtu
b3duX2ZpZWxkcygpLT5BZGRWYXJpbnQoOSwgdmFsdWUpOwotICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDgwKSkgZ290byBwYXJzZV9qYXZhX211bHRpcGxlX2Zp
bGVzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgYm9vbCBq
YXZhX211bHRpcGxlX2ZpbGVzID0gMTAgW2RlZmF1bHQgPSBmYWxzZV07Ci0gICAgICBjYXNlIDEw
OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gODApIHsKLSAgICAgICAgIHBhcnNlX2phdmFfbXVsdGlw
bGVfZmlsZXM6Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICBib29sLCA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9CT09MPigK
LSAgICAgICAgICAgICAgICAgaW5wdXQsICZqYXZhX211bHRpcGxlX2ZpbGVzXykpKTsKLSAgICAg
ICAgICBzZXRfaGFzX2phdmFfbXVsdGlwbGVfZmlsZXMoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1
dC0+RXhwZWN0VGFnKDkwKSkgZ290byBwYXJzZV9nb19wYWNrYWdlOwotICAgICAgICBicmVhazsK
LSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIGdvX3BhY2thZ2UgPSAxMTsKLSAg
ICAgIGNhc2UgMTE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA5MCkgewotICAgICAgICAgcGFyc2Vf
Z29fcGFja2FnZToKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMt
Pm11dGFibGVfZ29fcGFja2FnZSgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICAg
ICAgICB0aGlzLT5nb19wYWNrYWdlKCkuZGF0YSgpLCB0aGlzLT5nb19wYWNrYWdlKCkubGVuZ3Ro
KCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
OjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZ29fcGFj
a2FnZSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMTI4KSkgZ290byBwYXJz
ZV9jY19nZW5lcmljX3NlcnZpY2VzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAg
Ly8gb3B0aW9uYWwgYm9vbCBjY19nZW5lcmljX3NlcnZpY2VzID0gMTYgW2RlZmF1bHQgPSBmYWxz
ZV07Ci0gICAgICBjYXNlIDE2OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTI4KSB7Ci0gICAgICAg
ICBwYXJzZV9jY19nZW5lcmljX3NlcnZpY2VzOgotICAgICAgICAgIERPXygoOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAg
ICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmY2NfZ2VuZXJpY19z
ZXJ2aWNlc18pKSk7Ci0gICAgICAgICAgc2V0X2hhc19jY19nZW5lcmljX3NlcnZpY2VzKCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxMzYpKSBnb3RvIHBhcnNlX2phdmFfZ2Vu
ZXJpY19zZXJ2aWNlczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlv
bmFsIGJvb2wgamF2YV9nZW5lcmljX3NlcnZpY2VzID0gMTcgW2RlZmF1bHQgPSBmYWxzZV07Ci0g
ICAgICBjYXNlIDE3OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTM2KSB7Ci0gICAgICAgICBwYXJz
ZV9qYXZhX2dlbmVyaWNfc2VydmljZXM6Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAg
ICAgICAgICBib29sLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6VFlQRV9CT09MPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZqYXZhX2dlbmVyaWNfc2Vy
dmljZXNfKSkpOwotICAgICAgICAgIHNldF9oYXNfamF2YV9nZW5lcmljX3NlcnZpY2VzKCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxNDQpKSBnb3RvIHBhcnNlX3B5X2dlbmVy
aWNfc2VydmljZXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25h
bCBib29sIHB5X2dlbmVyaWNfc2VydmljZXMgPSAxOCBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgICAg
IGNhc2UgMTg6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxNDQpIHsKLSAgICAgICAgIHBhcnNlX3B5
X2dlbmVyaWNfc2VydmljZXM6Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAg
ICBib29sLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQ
RV9CT09MPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZweV9nZW5lcmljX3NlcnZpY2VzXykp
KTsKLSAgICAgICAgICBzZXRfaGFzX3B5X2dlbmVyaWNfc2VydmljZXMoKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChpbnB1dC0+RXhwZWN0VGFnKDE2MCkpIGdvdG8gcGFyc2VfamF2YV9nZW5lcmF0ZV9lcXVh
bHNfYW5kX2hhc2g7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25h
bCBib29sIGphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoID0gMjAgW2RlZmF1bHQgPSBmYWxz
ZV07Ci0gICAgICBjYXNlIDIwOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTYwKSB7Ci0gICAgICAg
ICBwYXJzZV9qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaDoKLSAgICAgICAgICBET18oKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZl
PAotICAgICAgICAgICAgICAgICAgIGJvb2wsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpUWVBFX0JPT0w+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJmph
dmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoXykpKTsKLSAgICAgICAgICBzZXRfaGFzX2phdmFf
Z2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
Z290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVj
dFRhZygxODQpKSBnb3RvIHBhcnNlX2RlcHJlY2F0ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotCi0gICAgICAvLyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAyMyBbZGVmYXVsdCA9IGZh
bHNlXTsKLSAgICAgIGNhc2UgMjM6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxODQpIHsKLSAgICAg
ICAgIHBhcnNlX2RlcHJlY2F0ZWQ6Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAg
ICAgICBib29sLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
VFlQRV9CT09MPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZkZXByZWNhdGVkXykpKTsKLSAg
ICAgICAgICBzZXRfaGFzX2RlcHJlY2F0ZWQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhw
ZWN0VGFnKDIxNikpIGdvdG8gcGFyc2VfamF2YV9zdHJpbmdfY2hlY2tfdXRmODsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIGJvb2wgamF2YV9zdHJpbmdfY2hl
Y2tfdXRmOCA9IDI3IFtkZWZhdWx0ID0gZmFsc2VdOwotICAgICAgY2FzZSAyNzogewotICAgICAg
ICBpZiAodGFnID09IDIxNikgewotICAgICAgICAgcGFyc2VfamF2YV9zdHJpbmdfY2hlY2tfdXRm
ODoKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpSZWFkUHJpbWl0aXZlPAotICAgICAgICAgICAgICAgICAgIGJvb2wsIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0JPT0w+KAotICAgICAg
ICAgICAgICAgICBpbnB1dCwgJmphdmFfc3RyaW5nX2NoZWNrX3V0ZjhfKSkpOwotICAgICAgICAg
IHNldF9oYXNfamF2YV9zdHJpbmdfY2hlY2tfdXRmOCgpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0
LT5FeHBlY3RUYWcoMjQ4KSkgZ290byBwYXJzZV9jY19lbmFibGVfYXJlbmFzOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgYm9vbCBjY19lbmFibGVfYXJlbmFz
ID0gMzEgW2RlZmF1bHQgPSBmYWxzZV07Ci0gICAgICBjYXNlIDMxOiB7Ci0gICAgICAgIGlmICh0
YWcgPT0gMjQ4KSB7Ci0gICAgICAgICBwYXJzZV9jY19lbmFibGVfYXJlbmFzOgotICAgICAgICAg
IERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQ
cmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAgIGlu
cHV0LCAmY2NfZW5hYmxlX2FyZW5hc18pKSk7Ci0gICAgICAgICAgc2V0X2hhc19jY19lbmFibGVf
YXJlbmFzKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3Vh
bDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygyOTApKSBnb3RvIHBh
cnNlX29iamNfY2xhc3NfcHJlZml4OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAg
Ly8gb3B0aW9uYWwgc3RyaW5nIG9iamNfY2xhc3NfcHJlZml4ID0gMzY7Ci0gICAgICBjYXNlIDM2
OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMjkwKSB7Ci0gICAgICAgICBwYXJzZV9vYmpjX2NsYXNz
X3ByZWZpeDoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11
dGFibGVfb2JqY19jbGFzc19wcmVmaXgoKSkpOwotICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAg
ICAgICAgICAgdGhpcy0+b2JqY19jbGFzc19wcmVmaXgoKS5kYXRhKCksIHRoaXMtPm9iamNfY2xh
c3NfcHJlZml4KCkubGVuZ3RoKCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYu
RmlsZU9wdGlvbnMub2JqY19jbGFzc19wcmVmaXgiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+
RXhwZWN0VGFnKDI5OCkpIGdvdG8gcGFyc2VfY3NoYXJwX25hbWVzcGFjZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyBjc2hhcnBfbmFtZXNwYWNl
ID0gMzc7Ci0gICAgICBjYXNlIDM3OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMjk4KSB7Ci0gICAg
ICAgICBwYXJzZV9jc2hhcnBfbmFtZXNwYWNlOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAg
ICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9jc2hhcnBfbmFtZXNwYWNlKCkpKTsKLSAgICAgICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3Ry
aW5nTmFtZWRGaWVsZCgKLSAgICAgICAgICAgIHRoaXMtPmNzaGFycF9uYW1lc3BhY2UoKS5kYXRh
KCksIHRoaXMtPmNzaGFycF9uYW1lc3BhY2UoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlBBUlNFLAotICAgICAgICAgICAg
Imdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5jc2hhcnBfbmFtZXNwYWNlIik7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV91bmludGVycHJldGVk
X29wdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlcGVhdGVkIC5n
b29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9
IDk5OTsKLSAgICAgIGNhc2UgOTk5OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNzk5NCkgewotICAg
ICAgICAgcGFyc2VfdW5pbnRlcnByZXRlZF9vcHRpb246Ci0gICAgICAgICAgRE9fKGlucHV0LT5J
bmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBhcnNlX2xvb3BfdW5pbnRlcnBy
ZXRlZF9vcHRpb246Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoCi0g
ICAgICAgICAgICAgICAgaW5wdXQsIGFkZF91bmludGVycHJldGVkX29wdGlvbigpKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV9sb29wX3VuaW50
ZXJwcmV0ZWRfb3B0aW9uOwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9u
RGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5k
bGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFn
KSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoKDgwMDB1IDw9IHRhZykpIHsKLSAgICAgICAgICBET18oX2V4
dGVuc2lvbnNfLlBhcnNlRmllbGQodGFnLCBpbnB1dCwgZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMo
KSkpOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0gICAgICAgICAg
ICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAgICAgICBicmVh
azsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucykKLSAgcmV0
dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vf
ZmFpbHVyZTpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMpCi0gIHJldHVybiBmYWxzZTsKLSN1
bmRlZiBET18KLX0KLQotdm9pZCBGaWxlT3B0aW9uczo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpn
b29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMpCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBqYXZhX3Bh
Y2thZ2UgPSAxOwotICBpZiAoaGFzX2phdmFfcGFja2FnZSgpKSB7Ci0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQo
Ci0gICAgICB0aGlzLT5qYXZhX3BhY2thZ2UoKS5kYXRhKCksIHRoaXMtPmphdmFfcGFja2FnZSgp
Lmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5qYXZhX3Bh
Y2thZ2UiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAxLCB0aGlzLT5qYXZhX3BhY2thZ2Uo
KSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBqYXZhX291dGVyX2NsYXNz
bmFtZSA9IDg7Ci0gIGlmIChoYXNfamF2YV9vdXRlcl9jbGFzc25hbWUoKSkgewotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1l
ZEZpZWxkKAotICAgICAgdGhpcy0+amF2YV9vdXRlcl9jbGFzc25hbWUoKS5kYXRhKCksIHRoaXMt
PmphdmFfb3V0ZXJfY2xhc3NuYW1lKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3Rv
YnVmLkZpbGVPcHRpb25zLmphdmFfb3V0ZXJfY2xhc3NuYW1lIik7Ci0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2Vk
KAotICAgICAgOCwgdGhpcy0+amF2YV9vdXRlcl9jbGFzc25hbWUoKSwgb3V0cHV0KTsKLSAgfQot
Ci0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2Rl
IG9wdGltaXplX2ZvciA9IDkgW2RlZmF1bHQgPSBTUEVFRF07Ci0gIGlmIChoYXNfb3B0aW1pemVf
Zm9yKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6V3JpdGVFbnVtKAotICAgICAgOSwgdGhpcy0+b3B0aW1pemVfZm9yKCksIG91dHB1dCk7Ci0g
IH0KLQotICAvLyBvcHRpb25hbCBib29sIGphdmFfbXVsdGlwbGVfZmlsZXMgPSAxMCBbZGVmYXVs
dCA9IGZhbHNlXTsKLSAgaWYgKGhhc19qYXZhX211bHRpcGxlX2ZpbGVzKCkpIHsKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sKDEwLCB0
aGlzLT5qYXZhX211bHRpcGxlX2ZpbGVzKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25h
bCBzdHJpbmcgZ29fcGFja2FnZSA9IDExOwotICBpZiAoaGFzX2dvX3BhY2thZ2UoKSkgewotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJp
bmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+Z29fcGFja2FnZSgpLmRhdGEoKSwgdGhpcy0+Z29f
cGFja2FnZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5nb19wYWNrYWdlIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgMTEsIHRoaXMtPmdvX3Bh
Y2thZ2UoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgY2NfZ2VuZXJpY19z
ZXJ2aWNlcyA9IDE2IFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2NjX2dlbmVyaWNfc2Vy
dmljZXMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXcml0ZUJvb2woMTYsIHRoaXMtPmNjX2dlbmVyaWNfc2VydmljZXMoKSwgb3V0cHV0KTsK
LSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgamF2YV9nZW5lcmljX3NlcnZpY2VzID0gMTcgW2Rl
ZmF1bHQgPSBmYWxzZV07Ci0gIGlmIChoYXNfamF2YV9nZW5lcmljX3NlcnZpY2VzKCkpIHsKLSAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29s
KDE3LCB0aGlzLT5qYXZhX2dlbmVyaWNfc2VydmljZXMoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8v
IG9wdGlvbmFsIGJvb2wgcHlfZ2VuZXJpY19zZXJ2aWNlcyA9IDE4IFtkZWZhdWx0ID0gZmFsc2Vd
OwotICBpZiAoaGFzX3B5X2dlbmVyaWNfc2VydmljZXMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2woMTgsIHRoaXMtPnB5X2dl
bmVyaWNfc2VydmljZXMoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgamF2
YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2ggPSAyMCBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgaWYg
KGhhc19qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCgpKSB7Ci0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbCgyMCwgdGhpcy0+amF2
YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2goKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlv
bmFsIGJvb2wgZGVwcmVjYXRlZCA9IDIzIFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2Rl
cHJlY2F0ZWQoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpXcml0ZUJvb2woMjMsIHRoaXMtPmRlcHJlY2F0ZWQoKSwgb3V0cHV0KTsKLSAgfQot
Ci0gIC8vIG9wdGlvbmFsIGJvb2wgamF2YV9zdHJpbmdfY2hlY2tfdXRmOCA9IDI3IFtkZWZhdWx0
ID0gZmFsc2VdOwotICBpZiAoaGFzX2phdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKSkgewotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2woMjcs
IHRoaXMtPmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9w
dGlvbmFsIGJvb2wgY2NfZW5hYmxlX2FyZW5hcyA9IDMxIFtkZWZhdWx0ID0gZmFsc2VdOwotICBp
ZiAoaGFzX2NjX2VuYWJsZV9hcmVuYXMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2woMzEsIHRoaXMtPmNjX2VuYWJsZV9hcmVu
YXMoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBvYmpjX2NsYXNzX3By
ZWZpeCA9IDM2OwotICBpZiAoaGFzX29iamNfY2xhc3NfcHJlZml4KCkpIHsKLSAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRG
aWVsZCgKLSAgICAgIHRoaXMtPm9iamNfY2xhc3NfcHJlZml4KCkuZGF0YSgpLCB0aGlzLT5vYmpj
X2NsYXNzX3ByZWZpeCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWxl
T3B0aW9ucy5vYmpjX2NsYXNzX3ByZWZpeCIpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDM2
LCB0aGlzLT5vYmpjX2NsYXNzX3ByZWZpeCgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9u
YWwgc3RyaW5nIGNzaGFycF9uYW1lc3BhY2UgPSAzNzsKLSAgaWYgKGhhc19jc2hhcnBfbmFtZXNw
YWNlKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpW
ZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPmNzaGFycF9uYW1lc3BhY2Uo
KS5kYXRhKCksIHRoaXMtPmNzaGFycF9uYW1lc3BhY2UoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJn
b29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuY3NoYXJwX25hbWVzcGFjZSIpOwotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJl
QWxpYXNlZCgKLSAgICAgIDM3LCB0aGlzLT5jc2hhcnBfbmFtZXNwYWNlKCksIG91dHB1dCk7Ci0g
IH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24g
dW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBu
ID0gdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2Fn
ZU1heWJlVG9BcnJheSgKLSAgICAgIDk5OSwgdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb24oaSks
IG91dHB1dCk7Ci0gIH0KLQotICAvLyBFeHRlbnNpb24gcmFuZ2UgWzEwMDAsIDUzNjg3MDkxMikK
LSAgX2V4dGVuc2lvbnNfLlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDEwMDAsIDUz
Njg3MDkxMiwgb3V0cHV0KTsKLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25v
d25fZmllbGRzKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzKAotICAgICAgICB1bmtub3duX2ZpZWxkcygpLCBv
dXRwdXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfZW5k
Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucykKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjp1
aW50OCogRmlsZU9wdGlvbnM6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LkZpbGVPcHRpb25zKQotICAvLyBvcHRpb25hbCBzdHJpbmcgamF2YV9wYWNrYWdlID0gMTsKLSAg
aWYgKGhhc19qYXZhX3BhY2thZ2UoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+
amF2YV9wYWNrYWdlKCkuZGF0YSgpLCB0aGlzLT5qYXZhX3BhY2thZ2UoKS5sZW5ndGgoKSwKLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwK
LSAgICAgICJnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9wYWNrYWdlIik7Ci0gICAg
dGFyZ2V0ID0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXcml0ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDEsIHRoaXMtPmphdmFfcGFja2FnZSgp
LCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGphdmFfb3V0ZXJfY2xhc3Nu
YW1lID0gODsKLSAgaWYgKGhhc19qYXZhX291dGVyX2NsYXNzbmFtZSgpKSB7Ci0gICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVk
RmllbGQoCi0gICAgICB0aGlzLT5qYXZhX291dGVyX2NsYXNzbmFtZSgpLmRhdGEoKSwgdGhpcy0+
amF2YV9vdXRlcl9jbGFzc25hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9i
dWYuRmlsZU9wdGlvbnMuamF2YV9vdXRlcl9jbGFzc25hbWUiKTsKLSAgICB0YXJnZXQgPQotICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3Ry
aW5nVG9BcnJheSgKLSAgICAgICAgOCwgdGhpcy0+amF2YV9vdXRlcl9jbGFzc25hbWUoKSwgdGFy
Z2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMu
T3B0aW1pemVNb2RlIG9wdGltaXplX2ZvciA9IDkgW2RlZmF1bHQgPSBTUEVFRF07Ci0gIGlmICho
YXNfb3B0aW1pemVfZm9yKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVtVG9BcnJheSgKLSAgICAgIDksIHRoaXMt
Pm9wdGltaXplX2ZvcigpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBqYXZh
X211bHRpcGxlX2ZpbGVzID0gMTAgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGlmIChoYXNfamF2YV9t
dWx0aXBsZV9maWxlcygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbFRvQXJyYXkoMTAsIHRoaXMtPmphdmFfbXVs
dGlwbGVfZmlsZXMoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBnb19w
YWNrYWdlID0gMTE7Ci0gIGlmIChoYXNfZ29fcGFja2FnZSgpKSB7Ci0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQo
Ci0gICAgICB0aGlzLT5nb19wYWNrYWdlKCkuZGF0YSgpLCB0aGlzLT5nb19wYWNrYWdlKCkubGVu
Z3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpT
RVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmdvX3BhY2thZ2Ui
KTsKLSAgICB0YXJnZXQgPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nVG9BcnJheSgKLSAgICAgICAgMTEsIHRoaXMtPmdvX3Bh
Y2thZ2UoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgY2NfZ2VuZXJpY19z
ZXJ2aWNlcyA9IDE2IFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2NjX2dlbmVyaWNfc2Vy
dmljZXMoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpXcml0ZUJvb2xUb0FycmF5KDE2LCB0aGlzLT5jY19nZW5lcmljX3NlcnZp
Y2VzKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBib29sIGphdmFfZ2VuZXJpY19z
ZXJ2aWNlcyA9IDE3IFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2phdmFfZ2VuZXJpY19z
ZXJ2aWNlcygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbFRvQXJyYXkoMTcsIHRoaXMtPmphdmFfZ2VuZXJpY19z
ZXJ2aWNlcygpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBweV9nZW5lcmlj
X3NlcnZpY2VzID0gMTggW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGlmIChoYXNfcHlfZ2VuZXJpY19z
ZXJ2aWNlcygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbFRvQXJyYXkoMTgsIHRoaXMtPnB5X2dlbmVyaWNfc2Vy
dmljZXMoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgamF2YV9nZW5lcmF0
ZV9lcXVhbHNfYW5kX2hhc2ggPSAyMCBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgaWYgKGhhc19qYXZh
X2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCgpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbFRvQXJyYXkoMjAsIHRo
aXMtPmphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoKCksIHRhcmdldCk7Ci0gIH0KLQotICAv
LyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAyMyBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgaWYg
KGhhc19kZXByZWNhdGVkKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sVG9BcnJheSgyMywgdGhpcy0+ZGVwcmVj
YXRlZCgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBqYXZhX3N0cmluZ19j
aGVja191dGY4ID0gMjcgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGlmIChoYXNfamF2YV9zdHJpbmdf
Y2hlY2tfdXRmOCgpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbFRvQXJyYXkoMjcsIHRoaXMtPmphdmFfc3RyaW5n
X2NoZWNrX3V0ZjgoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgY2NfZW5h
YmxlX2FyZW5hcyA9IDMxIFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2NjX2VuYWJsZV9h
cmVuYXMoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpXcml0ZUJvb2xUb0FycmF5KDMxLCB0aGlzLT5jY19lbmFibGVfYXJlbmFz
KCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgb2JqY19jbGFzc19wcmVm
aXggPSAzNjsKLSAgaWYgKGhhc19vYmpjX2NsYXNzX3ByZWZpeCgpKSB7Ci0gICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmll
bGQoCi0gICAgICB0aGlzLT5vYmpjX2NsYXNzX3ByZWZpeCgpLmRhdGEoKSwgdGhpcy0+b2JqY19j
bGFzc19wcmVmaXgoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuRmlsZU9w
dGlvbnMub2JqY19jbGFzc19wcmVmaXgiKTsKLSAgICB0YXJnZXQgPQotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nVG9BcnJheSgK
LSAgICAgICAgMzYsIHRoaXMtPm9iamNfY2xhc3NfcHJlZml4KCksIHRhcmdldCk7Ci0gIH0KLQot
ICAvLyBvcHRpb25hbCBzdHJpbmcgY3NoYXJwX25hbWVzcGFjZSA9IDM3OwotICBpZiAoaGFzX2Nz
aGFycF9uYW1lc3BhY2UoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+Y3NoYXJw
X25hbWVzcGFjZSgpLmRhdGEoKSwgdGhpcy0+Y3NoYXJwX25hbWVzcGFjZSgpLmxlbmd0aCgpLAot
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpF
LAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5jc2hhcnBfbmFtZXNwYWNlIik7
Ci0gICAgdGFyZ2V0ID0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDM3LCB0aGlzLT5jc2hhcnBf
bmFtZXNwYWNlKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3Rv
YnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0gIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6
ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJh
eSgKLSAgICAgICAgOTk5LCB0aGlzLT51bmludGVycHJldGVkX29wdGlvbihpKSwgdGFyZ2V0KTsK
LSAgfQotCi0gIC8vIEV4dGVuc2lvbiByYW5nZSBbMTAwMCwgNTM2ODcwOTEyKQotICB0YXJnZXQg
PSBfZXh0ZW5zaW9uc18uU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgKLSAgICAgIDEw
MDAsIDUzNjg3MDkxMiwgdGFyZ2V0KTsKLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZl
X3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzVG9BcnJheSgKLSAgICAg
ICAgdW5rbm93bl9maWVsZHMoKSwgdGFyZ2V0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlv
bnMpCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBGaWxlT3B0aW9uczo6Qnl0ZVNpemUoKSBj
b25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0K
LSAgaWYgKF9oYXNfYml0c19bMCAvIDMyXSAmIDI1NXUpIHsKLSAgICAvLyBvcHRpb25hbCBzdHJp
bmcgamF2YV9wYWNrYWdlID0gMTsKLSAgICBpZiAoaGFzX2phdmFfcGFja2FnZSgpKSB7Ci0gICAg
ICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgICB0aGlzLT5qYXZhX3BhY2th
Z2UoKSk7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwgc3RyaW5nIGphdmFfb3V0ZXJfY2xhc3Nu
YW1lID0gODsKLSAgICBpZiAoaGFzX2phdmFfb3V0ZXJfY2xhc3NuYW1lKCkpIHsKLSAgICAgIHRv
dGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICAgIHRoaXMtPmphdmFfb3V0ZXJfY2xh
c3NuYW1lKCkpOwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIGJvb2wgamF2YV9tdWx0aXBsZV9m
aWxlcyA9IDEwIFtkZWZhdWx0ID0gZmFsc2VdOwotICAgIGlmIChoYXNfamF2YV9tdWx0aXBsZV9m
aWxlcygpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKyAxOwotICAgIH0KLQotICAgIC8vIG9w
dGlvbmFsIGJvb2wgamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2ggPSAyMCBbZGVmYXVsdCA9
IGZhbHNlXTsKLSAgICBpZiAoaGFzX2phdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoKCkpIHsK
LSAgICAgIHRvdGFsX3NpemUgKz0gMiArIDE7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwgYm9v
bCBqYXZhX3N0cmluZ19jaGVja191dGY4ID0gMjcgW2RlZmF1bHQgPSBmYWxzZV07Ci0gICAgaWYg
KGhhc19qYXZhX3N0cmluZ19jaGVja191dGY4KCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMiAr
IDE7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5PcHRpbWl6ZU1vZGUgb3B0aW1pemVfZm9yID0gOSBbZGVmYXVsdCA9IFNQRUVEXTsKLSAgICBp
ZiAoaGFzX29wdGltaXplX2ZvcigpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6RW51bVNpemUo
dGhpcy0+b3B0aW1pemVfZm9yKCkpOwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIHN0cmluZyBn
b19wYWNrYWdlID0gMTE7Ci0gICAgaWYgKGhhc19nb19wYWNrYWdlKCkpIHsKLSAgICAgIHRvdGFs
X3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICAgIHRoaXMtPmdvX3BhY2thZ2UoKSk7Ci0g
ICAgfQotCi0gICAgLy8gb3B0aW9uYWwgYm9vbCBjY19nZW5lcmljX3NlcnZpY2VzID0gMTYgW2Rl
ZmF1bHQgPSBmYWxzZV07Ci0gICAgaWYgKGhhc19jY19nZW5lcmljX3NlcnZpY2VzKCkpIHsKLSAg
ICAgIHRvdGFsX3NpemUgKz0gMiArIDE7Ci0gICAgfQotCi0gIH0KLSAgaWYgKF9oYXNfYml0c19b
OCAvIDMyXSAmIDE2MTI4dSkgewotICAgIC8vIG9wdGlvbmFsIGJvb2wgamF2YV9nZW5lcmljX3Nl
cnZpY2VzID0gMTcgW2RlZmF1bHQgPSBmYWxzZV07Ci0gICAgaWYgKGhhc19qYXZhX2dlbmVyaWNf
c2VydmljZXMoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAyICsgMTsKLSAgICB9Ci0KLSAgICAv
LyBvcHRpb25hbCBib29sIHB5X2dlbmVyaWNfc2VydmljZXMgPSAxOCBbZGVmYXVsdCA9IGZhbHNl
XTsKLSAgICBpZiAoaGFzX3B5X2dlbmVyaWNfc2VydmljZXMoKSkgewotICAgICAgdG90YWxfc2l6
ZSArPSAyICsgMTsKLSAgICB9Ci0KLSAgICAvLyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAy
MyBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgICBpZiAoaGFzX2RlcHJlY2F0ZWQoKSkgewotICAgICAg
dG90YWxfc2l6ZSArPSAyICsgMTsKLSAgICB9Ci0KLSAgICAvLyBvcHRpb25hbCBib29sIGNjX2Vu
YWJsZV9hcmVuYXMgPSAzMSBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgICBpZiAoaGFzX2NjX2VuYWJs
ZV9hcmVuYXMoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAyICsgMTsKLSAgICB9Ci0KLSAgICAv
LyBvcHRpb25hbCBzdHJpbmcgb2JqY19jbGFzc19wcmVmaXggPSAzNjsKLSAgICBpZiAoaGFzX29i
amNfY2xhc3NfcHJlZml4KCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMiArCi0gICAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAot
ICAgICAgICAgIHRoaXMtPm9iamNfY2xhc3NfcHJlZml4KCkpOwotICAgIH0KLQotICAgIC8vIG9w
dGlvbmFsIHN0cmluZyBjc2hhcnBfbmFtZXNwYWNlID0gMzc7Ci0gICAgaWYgKGhhc19jc2hhcnBf
bmFtZXNwYWNlKCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMiArCi0gICAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAg
ICAgIHRoaXMtPmNzaGFycF9uYW1lc3BhY2UoKSk7Ci0gICAgfQotCi0gIH0KLSAgLy8gcmVwZWF0
ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0
aW9uID0gOTk5OwotICB0b3RhbF9zaXplICs9IDIgKiB0aGlzLT51bmludGVycHJldGVkX29wdGlv
bl9zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRp
b25fc2l6ZSgpOyBpKyspIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0g
ICAgICAgIHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uKGkpKTsKLSAgfQotCi0gIHRvdGFsX3Np
emUgKz0gX2V4dGVuc2lvbnNfLkJ5dGVTaXplKCk7Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0
YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgdG90YWxfc2l6ZSArPQotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6Q29tcHV0ZVVua25vd25GaWVs
ZHNTaXplKAotICAgICAgICB1bmtub3duX2ZpZWxkcygpKTsKLSAgfQotICBHT09HTEVfU0FGRV9D
T05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6ZTsK
LSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3RhbF9z
aXplOwotfQotCi12b2lkIEZpbGVPcHRpb25zOjpNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2Vu
ZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMpCi0g
IGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChf
X0xJTkVfXyk7Ci0gIGNvbnN0IEZpbGVPcHRpb25zKiBzb3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgRmlsZU9w
dGlvbnM+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFp
bDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMpCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6UmVmbGVjdGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rf
c3VjY2Vzczpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMpCi0gICAgTWVyZ2VGcm9tKCpzb3Vy
Y2UpOwotICB9Ci19Ci0KLXZvaWQgRmlsZU9wdGlvbnM6Ok1lcmdlRnJvbShjb25zdCBGaWxlT3B0
aW9ucyYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmlj
X21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zKQotICBpZiAoR09P
R0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18p
OwotICB1bmludGVycHJldGVkX29wdGlvbl8uTWVyZ2VGcm9tKGZyb20udW5pbnRlcnByZXRlZF9v
cHRpb25fKTsKLSAgaWYgKGZyb20uX2hhc19iaXRzX1swIC8gMzJdICYgKDB4ZmZ1IDw8ICgwICUg
MzIpKSkgewotICAgIGlmIChmcm9tLmhhc19qYXZhX3BhY2thZ2UoKSkgewotICAgICAgc2V0X2hh
c19qYXZhX3BhY2thZ2UoKTsKLSAgICAgIGphdmFfcGFja2FnZV8uQXNzaWduV2l0aERlZmF1bHQo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCBmcm9tLmphdmFfcGFja2FnZV8pOwotICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfamF2YV9v
dXRlcl9jbGFzc25hbWUoKSkgewotICAgICAgc2V0X2hhc19qYXZhX291dGVyX2NsYXNzbmFtZSgp
OwotICAgICAgamF2YV9vdXRlcl9jbGFzc25hbWVfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJv
bS5qYXZhX291dGVyX2NsYXNzbmFtZV8pOwotICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfamF2YV9t
dWx0aXBsZV9maWxlcygpKSB7Ci0gICAgICBzZXRfamF2YV9tdWx0aXBsZV9maWxlcyhmcm9tLmph
dmFfbXVsdGlwbGVfZmlsZXMoKSk7Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc19qYXZhX2dlbmVy
YXRlX2VxdWFsc19hbmRfaGFzaCgpKSB7Ci0gICAgICBzZXRfamF2YV9nZW5lcmF0ZV9lcXVhbHNf
YW5kX2hhc2goZnJvbS5qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCgpKTsKLSAgICB9Ci0g
ICAgaWYgKGZyb20uaGFzX2phdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKSkgewotICAgICAgc2V0X2ph
dmFfc3RyaW5nX2NoZWNrX3V0ZjgoZnJvbS5qYXZhX3N0cmluZ19jaGVja191dGY4KCkpOwotICAg
IH0KLSAgICBpZiAoZnJvbS5oYXNfb3B0aW1pemVfZm9yKCkpIHsKLSAgICAgIHNldF9vcHRpbWl6
ZV9mb3IoZnJvbS5vcHRpbWl6ZV9mb3IoKSk7Ci0gICAgfQotICAgIGlmIChmcm9tLmhhc19nb19w
YWNrYWdlKCkpIHsKLSAgICAgIHNldF9oYXNfZ29fcGFja2FnZSgpOwotICAgICAgZ29fcGFja2Fn
ZV8uQXNzaWduV2l0aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBmcm9tLmdvX3BhY2thZ2VfKTsKLSAgICB9Ci0gICAg
aWYgKGZyb20uaGFzX2NjX2dlbmVyaWNfc2VydmljZXMoKSkgewotICAgICAgc2V0X2NjX2dlbmVy
aWNfc2VydmljZXMoZnJvbS5jY19nZW5lcmljX3NlcnZpY2VzKCkpOwotICAgIH0KLSAgfQotICBp
ZiAoZnJvbS5faGFzX2JpdHNfWzggLyAzMl0gJiAoMHhmZnUgPDwgKDggJSAzMikpKSB7Ci0gICAg
aWYgKGZyb20uaGFzX2phdmFfZ2VuZXJpY19zZXJ2aWNlcygpKSB7Ci0gICAgICBzZXRfamF2YV9n
ZW5lcmljX3NlcnZpY2VzKGZyb20uamF2YV9nZW5lcmljX3NlcnZpY2VzKCkpOwotICAgIH0KLSAg
ICBpZiAoZnJvbS5oYXNfcHlfZ2VuZXJpY19zZXJ2aWNlcygpKSB7Ci0gICAgICBzZXRfcHlfZ2Vu
ZXJpY19zZXJ2aWNlcyhmcm9tLnB5X2dlbmVyaWNfc2VydmljZXMoKSk7Ci0gICAgfQotICAgIGlm
IChmcm9tLmhhc19kZXByZWNhdGVkKCkpIHsKLSAgICAgIHNldF9kZXByZWNhdGVkKGZyb20uZGVw
cmVjYXRlZCgpKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX2NjX2VuYWJsZV9hcmVuYXMoKSkg
ewotICAgICAgc2V0X2NjX2VuYWJsZV9hcmVuYXMoZnJvbS5jY19lbmFibGVfYXJlbmFzKCkpOwot
ICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfb2JqY19jbGFzc19wcmVmaXgoKSkgewotICAgICAgc2V0
X2hhc19vYmpjX2NsYXNzX3ByZWZpeCgpOwotICAgICAgb2JqY19jbGFzc19wcmVmaXhfLkFzc2ln
bldpdGhEZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgZnJvbS5vYmpjX2NsYXNzX3ByZWZpeF8pOwotICAgIH0KLSAgICBp
ZiAoZnJvbS5oYXNfY3NoYXJwX25hbWVzcGFjZSgpKSB7Ci0gICAgICBzZXRfaGFzX2NzaGFycF9u
YW1lc3BhY2UoKTsKLSAgICAgIGNzaGFycF9uYW1lc3BhY2VfLkFzc2lnbldpdGhEZWZhdWx0KCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgZnJvbS5jc2hhcnBfbmFtZXNwYWNlXyk7Ci0gICAgfQotICB9Ci0gIF9leHRlbnNpb25zXy5N
ZXJnZUZyb20oZnJvbS5fZXh0ZW5zaW9uc18pOwotICBpZiAoZnJvbS5faW50ZXJuYWxfbWV0YWRh
dGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMo
KS0+TWVyZ2VGcm9tKGZyb20udW5rbm93bl9maWVsZHMoKSk7Ci0gIH0KLX0KLQotdm9pZCBGaWxl
T3B0aW9uczo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9t
KSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0
YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJl
dHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIEZpbGVPcHRp
b25zOjpDb3B5RnJvbShjb25zdCBGaWxlT3B0aW9ucyYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuRmlsZU9wdGlvbnMpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7
Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBGaWxlT3B0aW9uczo6SXNJbml0aWFsaXpl
ZCgpIGNvbnN0IHsKLQotICBpZiAoITo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFsbEFy
ZUluaXRpYWxpemVkKHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkpKSByZXR1cm4gZmFsc2U7
Ci0KLSAgaWYgKCFfZXh0ZW5zaW9uc18uSXNJbml0aWFsaXplZCgpKSByZXR1cm4gZmFsc2U7ICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGaWxlT3B0aW9uczo6U3dhcChGaWxlT3B0aW9ucyogb3Ro
ZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVy
KTsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OkludGVybmFsU3dhcChGaWxlT3B0aW9ucyogb3RoZXIp
IHsKLSAgamF2YV9wYWNrYWdlXy5Td2FwKCZvdGhlci0+amF2YV9wYWNrYWdlXyk7Ci0gIGphdmFf
b3V0ZXJfY2xhc3NuYW1lXy5Td2FwKCZvdGhlci0+amF2YV9vdXRlcl9jbGFzc25hbWVfKTsKLSAg
c3RkOjpzd2FwKGphdmFfbXVsdGlwbGVfZmlsZXNfLCBvdGhlci0+amF2YV9tdWx0aXBsZV9maWxl
c18pOwotICBzdGQ6OnN3YXAoamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2hfLCBvdGhlci0+
amF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2hfKTsKLSAgc3RkOjpzd2FwKGphdmFfc3RyaW5n
X2NoZWNrX3V0ZjhfLCBvdGhlci0+amF2YV9zdHJpbmdfY2hlY2tfdXRmOF8pOwotICBzdGQ6OnN3
YXAob3B0aW1pemVfZm9yXywgb3RoZXItPm9wdGltaXplX2Zvcl8pOwotICBnb19wYWNrYWdlXy5T
d2FwKCZvdGhlci0+Z29fcGFja2FnZV8pOwotICBzdGQ6OnN3YXAoY2NfZ2VuZXJpY19zZXJ2aWNl
c18sIG90aGVyLT5jY19nZW5lcmljX3NlcnZpY2VzXyk7Ci0gIHN0ZDo6c3dhcChqYXZhX2dlbmVy
aWNfc2VydmljZXNfLCBvdGhlci0+amF2YV9nZW5lcmljX3NlcnZpY2VzXyk7Ci0gIHN0ZDo6c3dh
cChweV9nZW5lcmljX3NlcnZpY2VzXywgb3RoZXItPnB5X2dlbmVyaWNfc2VydmljZXNfKTsKLSAg
c3RkOjpzd2FwKGRlcHJlY2F0ZWRfLCBvdGhlci0+ZGVwcmVjYXRlZF8pOwotICBzdGQ6OnN3YXAo
Y2NfZW5hYmxlX2FyZW5hc18sIG90aGVyLT5jY19lbmFibGVfYXJlbmFzXyk7Ci0gIG9iamNfY2xh
c3NfcHJlZml4Xy5Td2FwKCZvdGhlci0+b2JqY19jbGFzc19wcmVmaXhfKTsKLSAgY3NoYXJwX25h
bWVzcGFjZV8uU3dhcCgmb3RoZXItPmNzaGFycF9uYW1lc3BhY2VfKTsKLSAgdW5pbnRlcnByZXRl
ZF9vcHRpb25fLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPnVuaW50ZXJwcmV0ZWRfb3B0aW9uXyk7
Ci0gIHN0ZDo6c3dhcChfaGFzX2JpdHNfWzBdLCBvdGhlci0+X2hhc19iaXRzX1swXSk7Ci0gIF9p
bnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBz
dGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotICBfZXh0ZW5z
aW9uc18uU3dhcCgmb3RoZXItPl9leHRlbnNpb25zXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWV0YWRhdGEgRmlsZU9wdGlvbnM6OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1
Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0
YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IEZpbGVPcHRpb25zX2Rlc2NyaXB0
b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gRmlsZU9wdGlvbnNfcmVmbGVjdGlvbl87Ci0g
IHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVS
UwotLy8gRmlsZU9wdGlvbnMKLQotLy8gb3B0aW9uYWwgc3RyaW5nIGphdmFfcGFja2FnZSA9IDE7
Ci1ib29sIEZpbGVPcHRpb25zOjpoYXNfamF2YV9wYWNrYWdlKCkgY29uc3QgewotICByZXR1cm4g
KF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6
OnNldF9oYXNfamF2YV9wYWNrYWdlKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDF1
OwotfQotdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfaGFzX2phdmFfcGFja2FnZSgpIHsKLSAgX2hh
c19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMXU7Ci19Ci12b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9q
YXZhX3BhY2thZ2UoKSB7Ci0gIGphdmFfcGFja2FnZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotICBjbGVhcl9oYXNfamF2YV9wYWNrYWdlKCk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYg
RmlsZU9wdGlvbnM6OmphdmFfcGFja2FnZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9wYWNr
YWdlKQotICByZXR1cm4gamF2YV9wYWNrYWdlXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBG
aWxlT3B0aW9uczo6c2V0X2phdmFfcGFja2FnZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkg
ewotICBzZXRfaGFzX2phdmFfcGFja2FnZSgpOwotICBqYXZhX3BhY2thZ2VfLlNldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29v
Z2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfcGFja2FnZSkKLX0KLSB2b2lkIEZpbGVPcHRp
b25zOjpzZXRfamF2YV9wYWNrYWdlKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfamF2
YV9wYWNrYWdlKCk7Ci0gIGphdmFfcGFja2FnZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJp
bmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFy
Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5qYXZhX3BhY2thZ2UpCi19Ci0gdm9pZCBGaWxl
T3B0aW9uczo6c2V0X2phdmFfcGFja2FnZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUp
IHsKLSAgc2V0X2hhc19qYXZhX3BhY2thZ2UoKTsKLSAgamF2YV9wYWNrYWdlXy5TZXROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
dmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRf
cG9pbnRlcjpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9wYWNrYWdlKQotfQotIDo6
c3RkOjpzdHJpbmcqIEZpbGVPcHRpb25zOjptdXRhYmxlX2phdmFfcGFja2FnZSgpIHsKLSAgc2V0
X2hhc19qYXZhX3BhY2thZ2UoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfcGFja2FnZSkKLSAgcmV0
dXJuIGphdmFfcGFja2FnZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5n
KiBGaWxlT3B0aW9uczo6cmVsZWFzZV9qYXZhX3BhY2thZ2UoKSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5q
YXZhX3BhY2thZ2UpCi0gIGNsZWFyX2hhc19qYXZhX3BhY2thZ2UoKTsKLSAgcmV0dXJuIGphdmFf
cGFja2FnZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpbGVPcHRpb25zOjpzZXRf
YWxsb2NhdGVkX2phdmFfcGFja2FnZSg6OnN0ZDo6c3RyaW5nKiBqYXZhX3BhY2thZ2UpIHsKLSAg
aWYgKGphdmFfcGFja2FnZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19qYXZhX3BhY2thZ2UoKTsK
LSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfamF2YV9wYWNrYWdlKCk7Ci0gIH0KLSAgamF2YV9w
YWNrYWdlXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgamF2YV9wYWNrYWdlKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVm
LkZpbGVPcHRpb25zLmphdmFfcGFja2FnZSkKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGphdmFf
b3V0ZXJfY2xhc3NuYW1lID0gODsKLWJvb2wgRmlsZU9wdGlvbnM6Omhhc19qYXZhX291dGVyX2Ns
YXNzbmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMnUp
ICE9IDA7Ci19Ci12b2lkIEZpbGVPcHRpb25zOjpzZXRfaGFzX2phdmFfb3V0ZXJfY2xhc3NuYW1l
KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDJ1OwotfQotdm9pZCBGaWxlT3B0aW9u
czo6Y2xlYXJfaGFzX2phdmFfb3V0ZXJfY2xhc3NuYW1lKCkgewotICBfaGFzX2JpdHNfWzBdICY9
IH4weDAwMDAwMDAydTsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX2phdmFfb3V0ZXJfY2xh
c3NuYW1lKCkgewotICBqYXZhX291dGVyX2NsYXNzbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCkpOwotICBjbGVhcl9oYXNfamF2YV9vdXRlcl9jbGFzc25hbWUoKTsKLX0KLSBjb25zdCA6OnN0
ZDo6c3RyaW5nJiBGaWxlT3B0aW9uczo6amF2YV9vdXRlcl9jbGFzc25hbWUoKSBjb25zdCB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZp
bGVPcHRpb25zLmphdmFfb3V0ZXJfY2xhc3NuYW1lKQotICByZXR1cm4gamF2YV9vdXRlcl9jbGFz
c25hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfamF2YV9v
dXRlcl9jbGFzc25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19q
YXZhX291dGVyX2NsYXNzbmFtZSgpOwotICBqYXZhX291dGVyX2NsYXNzbmFtZV8uU2V0Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpn
b29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9vdXRlcl9jbGFzc25hbWUpCi19Ci0gdm9p
ZCBGaWxlT3B0aW9uczo6c2V0X2phdmFfb3V0ZXJfY2xhc3NuYW1lKGNvbnN0IGNoYXIqIHZhbHVl
KSB7Ci0gIHNldF9oYXNfamF2YV9vdXRlcl9jbGFzc25hbWUoKTsKLSAgamF2YV9vdXRlcl9jbGFz
c25hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRmlsZU9w
dGlvbnMuamF2YV9vdXRlcl9jbGFzc25hbWUpCi19Ci0gdm9pZCBGaWxlT3B0aW9uczo6c2V0X2ph
dmFfb3V0ZXJfY2xhc3NuYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBz
ZXRfaGFzX2phdmFfb3V0ZXJfY2xhc3NuYW1lKCk7Ci0gIGphdmFfb3V0ZXJfY2xhc3NuYW1lXy5T
ZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9vdXRlcl9j
bGFzc25hbWUpCi19Ci0gOjpzdGQ6OnN0cmluZyogRmlsZU9wdGlvbnM6Om11dGFibGVfamF2YV9v
dXRlcl9jbGFzc25hbWUoKSB7Ci0gIHNldF9oYXNfamF2YV9vdXRlcl9jbGFzc25hbWUoKTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVm
LkZpbGVPcHRpb25zLmphdmFfb3V0ZXJfY2xhc3NuYW1lKQotICByZXR1cm4gamF2YV9vdXRlcl9j
bGFzc25hbWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogRmlsZU9w
dGlvbnM6OnJlbGVhc2VfamF2YV9vdXRlcl9jbGFzc25hbWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5q
YXZhX291dGVyX2NsYXNzbmFtZSkKLSAgY2xlYXJfaGFzX2phdmFfb3V0ZXJfY2xhc3NuYW1lKCk7
Ci0gIHJldHVybiBqYXZhX291dGVyX2NsYXNzbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0K
LSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfYWxsb2NhdGVkX2phdmFfb3V0ZXJfY2xhc3NuYW1lKDo6
c3RkOjpzdHJpbmcqIGphdmFfb3V0ZXJfY2xhc3NuYW1lKSB7Ci0gIGlmIChqYXZhX291dGVyX2Ns
YXNzbmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19qYXZhX291dGVyX2NsYXNzbmFtZSgpOwot
ICB9IGVsc2UgewotICAgIGNsZWFyX2hhc19qYXZhX291dGVyX2NsYXNzbmFtZSgpOwotICB9Ci0g
IGphdmFfb3V0ZXJfY2xhc3NuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgamF2YV9vdXRl
cl9jbGFzc25hbWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2Fs
bG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9vdXRlcl9jbGFzc25hbWUp
Ci19Ci0KLS8vIG9wdGlvbmFsIGJvb2wgamF2YV9tdWx0aXBsZV9maWxlcyA9IDEwIFtkZWZhdWx0
ID0gZmFsc2VdOwotYm9vbCBGaWxlT3B0aW9uczo6aGFzX2phdmFfbXVsdGlwbGVfZmlsZXMoKSBj
b25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDR1KSAhPSAwOwotfQot
dm9pZCBGaWxlT3B0aW9uczo6c2V0X2hhc19qYXZhX211bHRpcGxlX2ZpbGVzKCkgewotICBfaGFz
X2JpdHNfWzBdIHw9IDB4MDAwMDAwMDR1OwotfQotdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfaGFz
X2phdmFfbXVsdGlwbGVfZmlsZXMoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDR1
OwotfQotdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfamF2YV9tdWx0aXBsZV9maWxlcygpIHsKLSAg
amF2YV9tdWx0aXBsZV9maWxlc18gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX2phdmFfbXVsdGlwbGVf
ZmlsZXMoKTsKLX0KLSBib29sIEZpbGVPcHRpb25zOjpqYXZhX211bHRpcGxlX2ZpbGVzKCkgY29u
c3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90
b2J1Zi5GaWxlT3B0aW9ucy5qYXZhX211bHRpcGxlX2ZpbGVzKQotICByZXR1cm4gamF2YV9tdWx0
aXBsZV9maWxlc187Ci19Ci0gdm9pZCBGaWxlT3B0aW9uczo6c2V0X2phdmFfbXVsdGlwbGVfZmls
ZXMoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFzX2phdmFfbXVsdGlwbGVfZmlsZXMoKTsKLSAgamF2
YV9tdWx0aXBsZV9maWxlc18gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9tdWx0aXBsZV9maWxl
cykKLX0KLQotLy8gb3B0aW9uYWwgYm9vbCBqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCA9
IDIwIFtkZWZhdWx0ID0gZmFsc2VdOwotYm9vbCBGaWxlT3B0aW9uczo6aGFzX2phdmFfZ2VuZXJh
dGVfZXF1YWxzX2FuZF9oYXNoKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAw
eDAwMDAwMDA4dSkgIT0gMDsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OnNldF9oYXNfamF2YV9nZW5l
cmF0ZV9lcXVhbHNfYW5kX2hhc2goKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwOHU7
Ci19Ci12b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9oYXNfamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5k
X2hhc2goKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDh1OwotfQotdm9pZCBGaWxl
T3B0aW9uczo6Y2xlYXJfamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2goKSB7Ci0gIGphdmFf
Z2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoXyA9IGZhbHNlOwotICBjbGVhcl9oYXNfamF2YV9nZW5l
cmF0ZV9lcXVhbHNfYW5kX2hhc2goKTsKLX0KLSBib29sIEZpbGVPcHRpb25zOjpqYXZhX2dlbmVy
YXRlX2VxdWFsc19hbmRfaGFzaCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9nZW5lcmF0ZV9l
cXVhbHNfYW5kX2hhc2gpCi0gIHJldHVybiBqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaF87
Ci19Ci0gdm9pZCBGaWxlT3B0aW9uczo6c2V0X2phdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNo
KGJvb2wgdmFsdWUpIHsKLSAgc2V0X2hhc19qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCgp
OwotICBqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMu
amF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gpCi19Ci0KLS8vIG9wdGlvbmFsIGJvb2wgamF2
YV9zdHJpbmdfY2hlY2tfdXRmOCA9IDI3IFtkZWZhdWx0ID0gZmFsc2VdOwotYm9vbCBGaWxlT3B0
aW9uczo6aGFzX2phdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hh
c19iaXRzX1swXSAmIDB4MDAwMDAwMTB1KSAhPSAwOwotfQotdm9pZCBGaWxlT3B0aW9uczo6c2V0
X2hhc19qYXZhX3N0cmluZ19jaGVja191dGY4KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAw
MDAwMTB1OwotfQotdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfaGFzX2phdmFfc3RyaW5nX2NoZWNr
X3V0ZjgoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMTB1OwotfQotdm9pZCBGaWxl
T3B0aW9uczo6Y2xlYXJfamF2YV9zdHJpbmdfY2hlY2tfdXRmOCgpIHsKLSAgamF2YV9zdHJpbmdf
Y2hlY2tfdXRmOF8gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX2phdmFfc3RyaW5nX2NoZWNrX3V0Zjgo
KTsKLX0KLSBib29sIEZpbGVPcHRpb25zOjpqYXZhX3N0cmluZ19jaGVja191dGY4KCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1
Zi5GaWxlT3B0aW9ucy5qYXZhX3N0cmluZ19jaGVja191dGY4KQotICByZXR1cm4gamF2YV9zdHJp
bmdfY2hlY2tfdXRmOF87Ci19Ci0gdm9pZCBGaWxlT3B0aW9uczo6c2V0X2phdmFfc3RyaW5nX2No
ZWNrX3V0ZjgoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFzX2phdmFfc3RyaW5nX2NoZWNrX3V0Zjgo
KTsKLSAgamF2YV9zdHJpbmdfY2hlY2tfdXRmOF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9z
dHJpbmdfY2hlY2tfdXRmOCkKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWxl
T3B0aW9ucy5PcHRpbWl6ZU1vZGUgb3B0aW1pemVfZm9yID0gOSBbZGVmYXVsdCA9IFNQRUVEXTsK
LWJvb2wgRmlsZU9wdGlvbnM6Omhhc19vcHRpbWl6ZV9mb3IoKSBjb25zdCB7Ci0gIHJldHVybiAo
X2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMjB1KSAhPSAwOwotfQotdm9pZCBGaWxlT3B0aW9uczo6
c2V0X2hhc19vcHRpbWl6ZV9mb3IoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAyMHU7
Ci19Ci12b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9oYXNfb3B0aW1pemVfZm9yKCkgewotICBfaGFz
X2JpdHNfWzBdICY9IH4weDAwMDAwMDIwdTsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX29w
dGltaXplX2ZvcigpIHsKLSAgb3B0aW1pemVfZm9yXyA9IDE7Ci0gIGNsZWFyX2hhc19vcHRpbWl6
ZV9mb3IoKTsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVPcHRpb25zX09wdGltaXplTW9k
ZSBGaWxlT3B0aW9uczo6b3B0aW1pemVfZm9yKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vcHRpbWl6
ZV9mb3IpCi0gIHJldHVybiBzdGF0aWNfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0
aW9uc19PcHRpbWl6ZU1vZGUgPihvcHRpbWl6ZV9mb3JfKTsKLX0KLSB2b2lkIEZpbGVPcHRpb25z
OjpzZXRfb3B0aW1pemVfZm9yKDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9wdGlvbnNfT3B0aW1p
emVNb2RlIHZhbHVlKSB7Ci0gIGFzc2VydCg6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVPcHRpb25z
X09wdGltaXplTW9kZV9Jc1ZhbGlkKHZhbHVlKSk7Ci0gIHNldF9oYXNfb3B0aW1pemVfZm9yKCk7
Ci0gIG9wdGltaXplX2Zvcl8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMub3B0aW1pemVfZm9yKQotfQot
Ci0vLyBvcHRpb25hbCBzdHJpbmcgZ29fcGFja2FnZSA9IDExOwotYm9vbCBGaWxlT3B0aW9uczo6
aGFzX2dvX3BhY2thZ2UoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAw
MDAwNDB1KSAhPSAwOwotfQotdm9pZCBGaWxlT3B0aW9uczo6c2V0X2hhc19nb19wYWNrYWdlKCkg
ewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwNDB1OwotfQotdm9pZCBGaWxlT3B0aW9uczo6
Y2xlYXJfaGFzX2dvX3BhY2thZ2UoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwNDB1
OwotfQotdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfZ29fcGFja2FnZSgpIHsKLSAgZ29fcGFja2Fn
ZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfZ29fcGFja2FnZSgpOwot
fQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZpbGVPcHRpb25zOjpnb19wYWNrYWdlKCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1
Zi5GaWxlT3B0aW9ucy5nb19wYWNrYWdlKQotICByZXR1cm4gZ29fcGFja2FnZV8uR2V0Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotfQotIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9nb19wYWNrYWdlKGNvbnN0IDo6c3Rk
OjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfZ29fcGFja2FnZSgpOwotICBnb19wYWNrYWdl
Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5nb19wYWNrYWdlKQotfQotIHZv
aWQgRmlsZU9wdGlvbnM6OnNldF9nb19wYWNrYWdlKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNl
dF9oYXNfZ29fcGFja2FnZSgpOwotICBnb19wYWNrYWdlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6
OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmdvX3BhY2thZ2UpCi19Ci0gdm9pZCBG
aWxlT3B0aW9uczo6c2V0X2dvX3BhY2thZ2UoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXpl
KSB7Ci0gIHNldF9oYXNfZ29fcGFja2FnZSgpOwotICBnb19wYWNrYWdlXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFs
dWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9p
bnRlcjpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZ29fcGFja2FnZSkKLX0KLSA6OnN0ZDo6
c3RyaW5nKiBGaWxlT3B0aW9uczo6bXV0YWJsZV9nb19wYWNrYWdlKCkgewotICBzZXRfaGFzX2dv
X3BhY2thZ2UoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6
Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmdvX3BhY2thZ2UpCi0gIHJldHVybiBnb19wYWNr
YWdlXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIDo6c3RkOjpzdHJpbmcqIEZpbGVPcHRpb25z
OjpyZWxlYXNlX2dvX3BhY2thZ2UoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5nb19wYWNrYWdlKQotICBj
bGVhcl9oYXNfZ29fcGFja2FnZSgpOwotICByZXR1cm4gZ29fcGFja2FnZV8uUmVsZWFzZU5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpKTsKLX0KLSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfYWxsb2NhdGVkX2dvX3BhY2thZ2Uo
OjpzdGQ6OnN0cmluZyogZ29fcGFja2FnZSkgewotICBpZiAoZ29fcGFja2FnZSAhPSBOVUxMKSB7
Ci0gICAgc2V0X2hhc19nb19wYWNrYWdlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX2dv
X3BhY2thZ2UoKTsKLSAgfQotICBnb19wYWNrYWdlXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwg
Z29fcGFja2FnZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxs
b2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5nb19wYWNrYWdlKQotfQotCi0vLyBv
cHRpb25hbCBib29sIGNjX2dlbmVyaWNfc2VydmljZXMgPSAxNiBbZGVmYXVsdCA9IGZhbHNlXTsK
LWJvb2wgRmlsZU9wdGlvbnM6Omhhc19jY19nZW5lcmljX3NlcnZpY2VzKCkgY29uc3QgewotICBy
ZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDgwdSkgIT0gMDsKLX0KLXZvaWQgRmlsZU9w
dGlvbnM6OnNldF9oYXNfY2NfZ2VuZXJpY19zZXJ2aWNlcygpIHsKLSAgX2hhc19iaXRzX1swXSB8
PSAweDAwMDAwMDgwdTsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX2hhc19jY19nZW5lcmlj
X3NlcnZpY2VzKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDgwdTsKLX0KLXZvaWQg
RmlsZU9wdGlvbnM6OmNsZWFyX2NjX2dlbmVyaWNfc2VydmljZXMoKSB7Ci0gIGNjX2dlbmVyaWNf
c2VydmljZXNfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19jY19nZW5lcmljX3NlcnZpY2VzKCk7Ci19
Ci0gYm9vbCBGaWxlT3B0aW9uczo6Y2NfZ2VuZXJpY19zZXJ2aWNlcygpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmlsZU9w
dGlvbnMuY2NfZ2VuZXJpY19zZXJ2aWNlcykKLSAgcmV0dXJuIGNjX2dlbmVyaWNfc2VydmljZXNf
OwotfQotIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9jY19nZW5lcmljX3NlcnZpY2VzKGJvb2wgdmFs
dWUpIHsKLSAgc2V0X2hhc19jY19nZW5lcmljX3NlcnZpY2VzKCk7Ci0gIGNjX2dlbmVyaWNfc2Vy
dmljZXNfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6
Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmNjX2dlbmVyaWNfc2VydmljZXMpCi19Ci0KLS8v
IG9wdGlvbmFsIGJvb2wgamF2YV9nZW5lcmljX3NlcnZpY2VzID0gMTcgW2RlZmF1bHQgPSBmYWxz
ZV07Ci1ib29sIEZpbGVPcHRpb25zOjpoYXNfamF2YV9nZW5lcmljX3NlcnZpY2VzKCkgY29uc3Qg
ewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMTAwdSkgIT0gMDsKLX0KLXZvaWQg
RmlsZU9wdGlvbnM6OnNldF9oYXNfamF2YV9nZW5lcmljX3NlcnZpY2VzKCkgewotICBfaGFzX2Jp
dHNfWzBdIHw9IDB4MDAwMDAxMDB1OwotfQotdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfaGFzX2ph
dmFfZ2VuZXJpY19zZXJ2aWNlcygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDEwMHU7
Ci19Ci12b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9qYXZhX2dlbmVyaWNfc2VydmljZXMoKSB7Ci0g
IGphdmFfZ2VuZXJpY19zZXJ2aWNlc18gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX2phdmFfZ2VuZXJp
Y19zZXJ2aWNlcygpOwotfQotIGJvb2wgRmlsZU9wdGlvbnM6OmphdmFfZ2VuZXJpY19zZXJ2aWNl
cygpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9nZW5lcmljX3NlcnZpY2VzKQotICByZXR1cm4g
amF2YV9nZW5lcmljX3NlcnZpY2VzXzsKLX0KLSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfamF2YV9n
ZW5lcmljX3NlcnZpY2VzKGJvb2wgdmFsdWUpIHsKLSAgc2V0X2hhc19qYXZhX2dlbmVyaWNfc2Vy
dmljZXMoKTsKLSAgamF2YV9nZW5lcmljX3NlcnZpY2VzXyA9IHZhbHVlOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5q
YXZhX2dlbmVyaWNfc2VydmljZXMpCi19Ci0KLS8vIG9wdGlvbmFsIGJvb2wgcHlfZ2VuZXJpY19z
ZXJ2aWNlcyA9IDE4IFtkZWZhdWx0ID0gZmFsc2VdOwotYm9vbCBGaWxlT3B0aW9uczo6aGFzX3B5
X2dlbmVyaWNfc2VydmljZXMoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4
MDAwMDAyMDB1KSAhPSAwOwotfQotdm9pZCBGaWxlT3B0aW9uczo6c2V0X2hhc19weV9nZW5lcmlj
X3NlcnZpY2VzKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAyMDB1OwotfQotdm9pZCBG
aWxlT3B0aW9uczo6Y2xlYXJfaGFzX3B5X2dlbmVyaWNfc2VydmljZXMoKSB7Ci0gIF9oYXNfYml0
c19bMF0gJj0gfjB4MDAwMDAyMDB1OwotfQotdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfcHlfZ2Vu
ZXJpY19zZXJ2aWNlcygpIHsKLSAgcHlfZ2VuZXJpY19zZXJ2aWNlc18gPSBmYWxzZTsKLSAgY2xl
YXJfaGFzX3B5X2dlbmVyaWNfc2VydmljZXMoKTsKLX0KLSBib29sIEZpbGVPcHRpb25zOjpweV9n
ZW5lcmljX3NlcnZpY2VzKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5weV9nZW5lcmljX3NlcnZpY2Vz
KQotICByZXR1cm4gcHlfZ2VuZXJpY19zZXJ2aWNlc187Ci19Ci0gdm9pZCBGaWxlT3B0aW9uczo6
c2V0X3B5X2dlbmVyaWNfc2VydmljZXMoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFzX3B5X2dlbmVy
aWNfc2VydmljZXMoKTsKLSAgcHlfZ2VuZXJpY19zZXJ2aWNlc18gPSB2YWx1ZTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlv
bnMucHlfZ2VuZXJpY19zZXJ2aWNlcykKLX0KLQotLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVk
ID0gMjMgW2RlZmF1bHQgPSBmYWxzZV07Ci1ib29sIEZpbGVPcHRpb25zOjpoYXNfZGVwcmVjYXRl
ZCgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDQwMHUpICE9IDA7
Ci19Ci12b2lkIEZpbGVPcHRpb25zOjpzZXRfaGFzX2RlcHJlY2F0ZWQoKSB7Ci0gIF9oYXNfYml0
c19bMF0gfD0gMHgwMDAwMDQwMHU7Ci19Ci12b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9oYXNfZGVw
cmVjYXRlZCgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDQwMHU7Ci19Ci12b2lkIEZp
bGVPcHRpb25zOjpjbGVhcl9kZXByZWNhdGVkKCkgewotICBkZXByZWNhdGVkXyA9IGZhbHNlOwot
ICBjbGVhcl9oYXNfZGVwcmVjYXRlZCgpOwotfQotIGJvb2wgRmlsZU9wdGlvbnM6OmRlcHJlY2F0
ZWQoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29v
Z2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmRlcHJlY2F0ZWQpCi0gIHJldHVybiBkZXByZWNhdGVk
XzsKLX0KLSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfZGVwcmVjYXRlZChib29sIHZhbHVlKSB7Ci0g
IHNldF9oYXNfZGVwcmVjYXRlZCgpOwotICBkZXByZWNhdGVkXyA9IHZhbHVlOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5kZXByZWNhdGVkKQotfQotCi0vLyBvcHRpb25hbCBib29sIGNjX2VuYWJsZV9hcmVuYXMgPSAz
MSBbZGVmYXVsdCA9IGZhbHNlXTsKLWJvb2wgRmlsZU9wdGlvbnM6Omhhc19jY19lbmFibGVfYXJl
bmFzKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwODAwdSkgIT0g
MDsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OnNldF9oYXNfY2NfZW5hYmxlX2FyZW5hcygpIHsKLSAg
X2hhc19iaXRzX1swXSB8PSAweDAwMDAwODAwdTsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OmNsZWFy
X2hhc19jY19lbmFibGVfYXJlbmFzKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwODAw
dTsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX2NjX2VuYWJsZV9hcmVuYXMoKSB7Ci0gIGNj
X2VuYWJsZV9hcmVuYXNfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19jY19lbmFibGVfYXJlbmFzKCk7
Ci19Ci0gYm9vbCBGaWxlT3B0aW9uczo6Y2NfZW5hYmxlX2FyZW5hcygpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmlsZU9w
dGlvbnMuY2NfZW5hYmxlX2FyZW5hcykKLSAgcmV0dXJuIGNjX2VuYWJsZV9hcmVuYXNfOwotfQot
IHZvaWQgRmlsZU9wdGlvbnM6OnNldF9jY19lbmFibGVfYXJlbmFzKGJvb2wgdmFsdWUpIHsKLSAg
c2V0X2hhc19jY19lbmFibGVfYXJlbmFzKCk7Ci0gIGNjX2VuYWJsZV9hcmVuYXNfID0gdmFsdWU7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVm
LkZpbGVPcHRpb25zLmNjX2VuYWJsZV9hcmVuYXMpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBv
YmpjX2NsYXNzX3ByZWZpeCA9IDM2OwotYm9vbCBGaWxlT3B0aW9uczo6aGFzX29iamNfY2xhc3Nf
cHJlZml4KCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAxMDAwdSkg
IT0gMDsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OnNldF9oYXNfb2JqY19jbGFzc19wcmVmaXgoKSB7
Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMTAwMHU7Ci19Ci12b2lkIEZpbGVPcHRpb25zOjpj
bGVhcl9oYXNfb2JqY19jbGFzc19wcmVmaXgoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAw
MDEwMDB1OwotfQotdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfb2JqY19jbGFzc19wcmVmaXgoKSB7
Ci0gIG9iamNfY2xhc3NfcHJlZml4Xy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFy
X2hhc19vYmpjX2NsYXNzX3ByZWZpeCgpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZpbGVP
cHRpb25zOjpvYmpjX2NsYXNzX3ByZWZpeCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMub2JqY19jbGFz
c19wcmVmaXgpCi0gIHJldHVybiBvYmpjX2NsYXNzX3ByZWZpeF8uR2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
fQotIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9vYmpjX2NsYXNzX3ByZWZpeChjb25zdCA6OnN0ZDo6
c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX29iamNfY2xhc3NfcHJlZml4KCk7Ci0gIG9iamNf
Y2xhc3NfcHJlZml4Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vYmpjX2Ns
YXNzX3ByZWZpeCkKLX0KLSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfb2JqY19jbGFzc19wcmVmaXgo
Y29uc3QgY2hhciogdmFsdWUpIHsKLSAgc2V0X2hhc19vYmpjX2NsYXNzX3ByZWZpeCgpOwotICBv
YmpjX2NsYXNzX3ByZWZpeF8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90
b2J1Zi5GaWxlT3B0aW9ucy5vYmpjX2NsYXNzX3ByZWZpeCkKLX0KLSB2b2lkIEZpbGVPcHRpb25z
OjpzZXRfb2JqY19jbGFzc19wcmVmaXgoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7
Ci0gIHNldF9oYXNfb2JqY19jbGFzc19wcmVmaXgoKTsKLSAgb2JqY19jbGFzc19wcmVmaXhfLlNl
dE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vYmpjX2NsYXNzX3By
ZWZpeCkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWxlT3B0aW9uczo6bXV0YWJsZV9vYmpjX2NsYXNz
X3ByZWZpeCgpIHsKLSAgc2V0X2hhc19vYmpjX2NsYXNzX3ByZWZpeCgpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlv
bnMub2JqY19jbGFzc19wcmVmaXgpCi0gIHJldHVybiBvYmpjX2NsYXNzX3ByZWZpeF8uTXV0YWJs
ZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWxlT3B0aW9uczo6cmVsZWFzZV9v
YmpjX2NsYXNzX3ByZWZpeCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLm9iamNfY2xhc3NfcHJlZml4KQot
ICBjbGVhcl9oYXNfb2JqY19jbGFzc19wcmVmaXgoKTsKLSAgcmV0dXJuIG9iamNfY2xhc3NfcHJl
Zml4Xy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9hbGxv
Y2F0ZWRfb2JqY19jbGFzc19wcmVmaXgoOjpzdGQ6OnN0cmluZyogb2JqY19jbGFzc19wcmVmaXgp
IHsKLSAgaWYgKG9iamNfY2xhc3NfcHJlZml4ICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX29iamNf
Y2xhc3NfcHJlZml4KCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX29iamNfY2xhc3NfcHJl
Zml4KCk7Ci0gIH0KLSAgb2JqY19jbGFzc19wcmVmaXhfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LCBvYmpjX2NsYXNzX3ByZWZpeCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vYmpjX2NsYXNzX3By
ZWZpeCkKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGNzaGFycF9uYW1lc3BhY2UgPSAzNzsKLWJv
b2wgRmlsZU9wdGlvbnM6Omhhc19jc2hhcnBfbmFtZXNwYWNlKCkgY29uc3QgewotICByZXR1cm4g
KF9oYXNfYml0c19bMF0gJiAweDAwMDAyMDAwdSkgIT0gMDsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6
OnNldF9oYXNfY3NoYXJwX25hbWVzcGFjZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAy
MDAwdTsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX2hhc19jc2hhcnBfbmFtZXNwYWNlKCkg
ewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAyMDAwdTsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6
OmNsZWFyX2NzaGFycF9uYW1lc3BhY2UoKSB7Ci0gIGNzaGFycF9uYW1lc3BhY2VfLkNsZWFyVG9F
bXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX2NzaGFycF9uYW1lc3BhY2UoKTsKLX0KLSBj
b25zdCA6OnN0ZDo6c3RyaW5nJiBGaWxlT3B0aW9uczo6Y3NoYXJwX25hbWVzcGFjZSgpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9i
dWYuRmlsZU9wdGlvbnMuY3NoYXJwX25hbWVzcGFjZSkKLSAgcmV0dXJuIGNzaGFycF9uYW1lc3Bh
Y2VfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfY3NoYXJwX25h
bWVzcGFjZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX2NzaGFycF9u
YW1lc3BhY2UoKTsKLSAgY3NoYXJwX25hbWVzcGFjZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYu
RmlsZU9wdGlvbnMuY3NoYXJwX25hbWVzcGFjZSkKLX0KLSB2b2lkIEZpbGVPcHRpb25zOjpzZXRf
Y3NoYXJwX25hbWVzcGFjZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFzX2NzaGFycF9u
YW1lc3BhY2UoKTsKLSAgY3NoYXJwX25hbWVzcGFjZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpz
dHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9j
aGFyOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5jc2hhcnBfbmFtZXNwYWNlKQotfQotIHZv
aWQgRmlsZU9wdGlvbnM6OnNldF9jc2hhcnBfbmFtZXNwYWNlKGNvbnN0IGNoYXIqIHZhbHVlLCBz
aXplX3Qgc2l6ZSkgewotICBzZXRfaGFzX2NzaGFycF9uYW1lc3BhY2UoKTsKLSAgY3NoYXJwX25h
bWVzcGFjZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmNz
aGFycF9uYW1lc3BhY2UpCi19Ci0gOjpzdGQ6OnN0cmluZyogRmlsZU9wdGlvbnM6Om11dGFibGVf
Y3NoYXJwX25hbWVzcGFjZSgpIHsKLSAgc2V0X2hhc19jc2hhcnBfbmFtZXNwYWNlKCk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5G
aWxlT3B0aW9ucy5jc2hhcnBfbmFtZXNwYWNlKQotICByZXR1cm4gY3NoYXJwX25hbWVzcGFjZV8u
TXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWxlT3B0aW9uczo6cmVs
ZWFzZV9jc2hhcnBfbmFtZXNwYWNlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuY3NoYXJwX25hbWVzcGFj
ZSkKLSAgY2xlYXJfaGFzX2NzaGFycF9uYW1lc3BhY2UoKTsKLSAgcmV0dXJuIGNzaGFycF9uYW1l
c3BhY2VfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBGaWxlT3B0aW9uczo6c2V0X2Fs
bG9jYXRlZF9jc2hhcnBfbmFtZXNwYWNlKDo6c3RkOjpzdHJpbmcqIGNzaGFycF9uYW1lc3BhY2Up
IHsKLSAgaWYgKGNzaGFycF9uYW1lc3BhY2UgIT0gTlVMTCkgewotICAgIHNldF9oYXNfY3NoYXJw
X25hbWVzcGFjZSgpOwotICB9IGVsc2UgewotICAgIGNsZWFyX2hhc19jc2hhcnBfbmFtZXNwYWNl
KCk7Ci0gIH0KLSAgY3NoYXJwX25hbWVzcGFjZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGNz
aGFycF9uYW1lc3BhY2UpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuY3NoYXJwX25hbWVzcGFjZSkK
LX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uIHVu
aW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotaW50IEZpbGVPcHRpb25zOjp1bmludGVycHJldGVk
X29wdGlvbl9zaXplKCkgY29uc3QgewotICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLnNp
emUoKTsKLX0KLXZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkg
ewotICB1bmludGVycHJldGVkX29wdGlvbl8uQ2xlYXIoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiYgRmlsZU9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRf
b3B0aW9uKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlv
bikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5HZXQoaW5kZXgpOwotfQotOjpnb29n
bGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uKiBGaWxlT3B0aW9uczo6bXV0YWJsZV91
bmludGVycHJldGVkX29wdGlvbihpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnVuaW50ZXJw
cmV0ZWRfb3B0aW9uKQotICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLk11dGFibGUoaW5k
ZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uKiBGaWxlT3B0
aW9uczo6YWRkX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy51bmludGVycHJl
dGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5BZGQoKTsKLX0KLTo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpV
bmludGVycHJldGVkT3B0aW9uID4qCi1GaWxlT3B0aW9uczo6bXV0YWJsZV91bmludGVycHJldGVk
X29wdGlvbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVf
bGlzdDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0g
IHJldHVybiAmdW5pbnRlcnByZXRlZF9vcHRpb25fOwotfQotY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRP
cHRpb24gPiYKLUZpbGVPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbigpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkZp
bGVPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1cm4gdW5pbnRlcnByZXRlZF9v
cHRpb25fOwotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwot
Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0g
MTkwMAotY29uc3QgaW50IE1lc3NhZ2VPcHRpb25zOjprTWVzc2FnZVNldFdpcmVGb3JtYXRGaWVs
ZE51bWJlcjsKLWNvbnN0IGludCBNZXNzYWdlT3B0aW9uczo6a05vU3RhbmRhcmREZXNjcmlwdG9y
QWNjZXNzb3JGaWVsZE51bWJlcjsKLWNvbnN0IGludCBNZXNzYWdlT3B0aW9uczo6a0RlcHJlY2F0
ZWRGaWVsZE51bWJlcjsKLWNvbnN0IGludCBNZXNzYWdlT3B0aW9uczo6a01hcEVudHJ5RmllbGRO
dW1iZXI7Ci1jb25zdCBpbnQgTWVzc2FnZU9wdGlvbnM6OmtVbmludGVycHJldGVkT3B0aW9uRmll
bGROdW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAx
OTAwCi0KLU1lc3NhZ2VPcHRpb25zOjpNZXNzYWdlT3B0aW9ucygpCi0gIDogOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRD
dG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb25zdHJ1Y3Rvcjpnb29nbGUu
cHJvdG9idWYuTWVzc2FnZU9wdGlvbnMpCi19Ci0KLXZvaWQgTWVzc2FnZU9wdGlvbnM6OkluaXRB
c0RlZmF1bHRJbnN0YW5jZSgpIHsKLX0KLQotTWVzc2FnZU9wdGlvbnM6Ok1lc3NhZ2VPcHRpb25z
KGNvbnN0IE1lc3NhZ2VPcHRpb25zJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSgpLAotICAgIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7
Ci0gIE1lcmdlRnJvbShmcm9tKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlf
Y29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zKQotfQotCi12b2lkIE1l
c3NhZ2VPcHRpb25zOjpTaGFyZWRDdG9yKCkgewotICBfY2FjaGVkX3NpemVfID0gMDsKLSAgbWVz
c2FnZV9zZXRfd2lyZV9mb3JtYXRfID0gZmFsc2U7Ci0gIG5vX3N0YW5kYXJkX2Rlc2NyaXB0b3Jf
YWNjZXNzb3JfID0gZmFsc2U7Ci0gIGRlcHJlY2F0ZWRfID0gZmFsc2U7Ci0gIG1hcF9lbnRyeV8g
PSBmYWxzZTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9oYXNfYml0c18pKTsK
LX0KLQotTWVzc2FnZU9wdGlvbnM6On5NZXNzYWdlT3B0aW9ucygpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25z
KQotICBTaGFyZWREdG9yKCk7Ci19Ci0KLXZvaWQgTWVzc2FnZU9wdGlvbnM6OlNoYXJlZER0b3Io
KSB7Ci0gIGlmICh0aGlzICE9IGRlZmF1bHRfaW5zdGFuY2VfKSB7Ci0gIH0KLX0KLQotdm9pZCBN
ZXNzYWdlT3B0aW9uczo6U2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3QgewotICBHT09HTEVf
U0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gc2l6ZTsK
LSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci19Ci1jb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIE1lc3NhZ2VPcHRpb25zOjpkZXNjcmlwdG9yKCkgewot
ICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIE1lc3NhZ2VPcHRp
b25zX2Rlc2NyaXB0b3JfOwotfQotCi1jb25zdCBNZXNzYWdlT3B0aW9ucyYgTWVzc2FnZU9wdGlv
bnM6OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxM
KSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3Rv
KCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLU1lc3NhZ2VPcHRpb25zKiBN
ZXNzYWdlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1NZXNzYWdlT3B0aW9u
cyogTWVzc2FnZU9wdGlvbnM6Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkg
Y29uc3QgewotICBNZXNzYWdlT3B0aW9ucyogbiA9IG5ldyBNZXNzYWdlT3B0aW9uczsKLSAgaWYg
KGFyZW5hICE9IE5VTEwpIHsKLSAgICBhcmVuYS0+T3duKG4pOwotICB9Ci0gIHJldHVybiBuOwot
fQotCi12b2lkIE1lc3NhZ2VPcHRpb25zOjpDbGVhcigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChtZXNzYWdlX2NsZWFyX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9u
cykKLSAgX2V4dGVuc2lvbnNfLkNsZWFyKCk7Ci0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jZGVm
aW5lIFpSX0hFTFBFUl8oZikgXAotICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHB1c2giKSBc
Ci0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XaW52YWxpZC1vZmZzZXRv
ZlwiIikgXAotICBfX2J1aWx0aW5fb2Zmc2V0b2YoTWVzc2FnZU9wdGlvbnMsIGYpIFwKLSAgX1By
YWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBwb3AiKQotI2Vsc2UKLSNkZWZpbmUgWlJfSEVMUEVSXyhm
KSByZWludGVycHJldF9jYXN0PGNoYXIqPihcCi0gICZyZWludGVycHJldF9jYXN0PE1lc3NhZ2VP
cHRpb25zKj4oMTYpLT5mKQotI2VuZGlmCi0KLSNkZWZpbmUgWlJfKGZpcnN0LCBsYXN0KSBkbyB7
XAotICA6Om1lbXNldCgmZmlyc3QsIDAsXAotICAgICAgICAgICBaUl9IRUxQRVJfKGxhc3QpIC0g
WlJfSEVMUEVSXyhmaXJzdCkgKyBzaXplb2YobGFzdCkpO1wKLX0gd2hpbGUgKDApCi0KLSAgWlJf
KG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0XywgbWFwX2VudHJ5Xyk7Ci0KLSN1bmRlZiBaUl9IRUxQ
RVJfCi0jdW5kZWYgWlJfCi0KLSAgdW5pbnRlcnByZXRlZF9vcHRpb25fLkNsZWFyKCk7Ci0gIDo6
bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci0gIGlmIChfaW50ZXJu
YWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93
bl9maWVsZHMoKS0+Q2xlYXIoKTsKLSAgfQotfQotCi1ib29sIE1lc3NhZ2VPcHRpb25zOjpNZXJn
ZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29k
ZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09P
R0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNl
X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucykKLSAgZm9yICg7OykgewotICAg
IDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0
LT5SZWFkVGFnV2l0aEN1dG9mZigxNjM4Myk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAgICBpZiAo
IXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykp
IHsKLSAgICAgIC8vIG9wdGlvbmFsIGJvb2wgbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQgPSAxIFtk
ZWZhdWx0ID0gZmFsc2VdOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gOCkg
ewotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAg
ICAgICAgICAgIGlucHV0LCAmbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXRfKSkpOwotICAgICAgICAg
IHNldF9oYXNfbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1
dC0+RXhwZWN0VGFnKDE2KSkgZ290byBwYXJzZV9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vz
c29yOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgYm9vbCBu
b19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yID0gMiBbZGVmYXVsdCA9IGZhbHNlXTsKLSAg
ICAgIGNhc2UgMjogewotICAgICAgICBpZiAodGFnID09IDE2KSB7Ci0gICAgICAgICBwYXJzZV9u
b19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yOgotICAgICAgICAgIERPXygoOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAg
ICAgICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmbm9fc3RhbmRh
cmRfZGVzY3JpcHRvcl9hY2Nlc3Nvcl8pKSk7Ci0gICAgICAgICAgc2V0X2hhc19ub19zdGFuZGFy
ZF9kZXNjcmlwdG9yX2FjY2Vzc29yKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290
byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRh
ZygyNCkpIGdvdG8gcGFyc2VfZGVwcmVjYXRlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0K
LSAgICAgIC8vIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDMgW2RlZmF1bHQgPSBmYWxzZV07
Ci0gICAgICBjYXNlIDM6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAyNCkgewotICAgICAgICAgcGFy
c2VfZGVwcmVjYXRlZDoKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPAotICAgICAgICAgICAgICAgICAgIGJv
b2wsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0JP
T0w+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJmRlcHJlY2F0ZWRfKSkpOwotICAgICAgICAg
IHNldF9oYXNfZGVwcmVjYXRlZCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8g
aGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWco
NTYpKSBnb3RvIHBhcnNlX21hcF9lbnRyeTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAg
ICAgIC8vIG9wdGlvbmFsIGJvb2wgbWFwX2VudHJ5ID0gNzsKLSAgICAgIGNhc2UgNzogewotICAg
ICAgICBpZiAodGFnID09IDU2KSB7Ci0gICAgICAgICBwYXJzZV9tYXBfZW50cnk6Ci0gICAgICAg
ICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVh
ZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICBib29sLCA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9CT09MPigKLSAgICAgICAgICAgICAgICAg
aW5wdXQsICZtYXBfZW50cnlfKSkpOwotICAgICAgICAgIHNldF9oYXNfbWFwX2VudHJ5KCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV91bmludGVy
cHJldGVkX29wdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlcGVh
dGVkIC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29w
dGlvbiA9IDk5OTsKLSAgICAgIGNhc2UgOTk5OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNzk5NCkg
ewotICAgICAgICAgcGFyc2VfdW5pbnRlcnByZXRlZF9vcHRpb246Ci0gICAgICAgICAgRE9fKGlu
cHV0LT5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBhcnNlX2xvb3BfdW5p
bnRlcnByZXRlZF9vcHRpb246Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVw
dGgoCi0gICAgICAgICAgICAgICAgaW5wdXQsIGFkZF91bmludGVycHJldGVkX29wdGlvbigpKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV9sb29w
X3VuaW50ZXJwcmV0ZWRfb3B0aW9uOwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVj
dXJzaW9uRGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1
Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAg
ICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5
cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2Vz
czsKLSAgICAgICAgfQotICAgICAgICBpZiAoKDgwMDB1IDw9IHRhZykpIHsKLSAgICAgICAgICBE
T18oX2V4dGVuc2lvbnNfLlBhcnNlRmllbGQodGFnLCBpbnB1dCwgZGVmYXVsdF9pbnN0YW5jZV8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGVfdW5rbm93bl9m
aWVsZHMoKSkpOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0gICAg
ICAgICAgICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9u
cykKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMpCi0gIHJldHVy
biBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9pZCBNZXNzYWdlT3B0aW9uczo6U2VyaWFsaXpl
V2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0
U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNl
cmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMpCi0gIC8vIG9wdGlv
bmFsIGJvb2wgbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQgPSAxIFtkZWZhdWx0ID0gZmFsc2VdOwot
ICBpZiAoaGFzX21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sKDEsIHRoaXMtPm1lc3Nh
Z2Vfc2V0X3dpcmVfZm9ybWF0KCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBib29s
IG5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IgPSAyIFtkZWZhdWx0ID0gZmFsc2VdOwot
ICBpZiAoaGFzX25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IoKSkgewotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2woMiwgdGhp
cy0+bm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpLCBvdXRwdXQpOwotICB9Ci0KLSAg
Ly8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMyBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgaWYg
KGhhc19kZXByZWNhdGVkKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sKDMsIHRoaXMtPmRlcHJlY2F0ZWQoKSwgb3V0cHV0KTsK
LSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgbWFwX2VudHJ5ID0gNzsKLSAgaWYgKGhhc19tYXBf
ZW50cnkoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXcml0ZUJvb2woNywgdGhpcy0+bWFwX2VudHJ5KCksIG91dHB1dCk7Ci0gIH0KLQotICAv
LyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnBy
ZXRlZF9vcHRpb24gPSA5OTk7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+
dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9B
cnJheSgKLSAgICAgIDk5OSwgdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb24oaSksIG91dHB1dCk7
Ci0gIH0KLQotICAvLyBFeHRlbnNpb24gcmFuZ2UgWzEwMDAsIDUzNjg3MDkxMikKLSAgX2V4dGVu
c2lvbnNfLlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDEwMDAsIDUzNjg3MDkxMiwg
b3V0cHV0KTsKLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRz
KCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTZXJp
YWxpemVVbmtub3duRmllbGRzKAotICAgICAgICB1bmtub3duX2ZpZWxkcygpLCBvdXRwdXQpOwot
ICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfZW5kOmdvb2dsZS5w
cm90b2J1Zi5NZXNzYWdlT3B0aW9ucykKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCog
TWVzc2FnZU9wdGlvbnM6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk1l
c3NhZ2VPcHRpb25zKQotICAvLyBvcHRpb25hbCBib29sIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0
ID0gMSBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgaWYgKGhhc19tZXNzYWdlX3NldF93aXJlX2Zvcm1h
dCgpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OldyaXRlQm9vbFRvQXJyYXkoMSwgdGhpcy0+bWVzc2FnZV9zZXRfd2lyZV9mb3Jt
YXQoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgbm9fc3RhbmRhcmRfZGVz
Y3JpcHRvcl9hY2Nlc3NvciA9IDIgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGlmIChoYXNfbm9fc3Rh
bmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbFRvQXJyYXkoMiwgdGhp
cy0+bm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpLCB0YXJnZXQpOwotICB9Ci0KLSAg
Ly8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMyBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgaWYg
KGhhc19kZXByZWNhdGVkKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sVG9BcnJheSgzLCB0aGlzLT5kZXByZWNh
dGVkKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBib29sIG1hcF9lbnRyeSA9IDc7
Ci0gIGlmIChoYXNfbWFwX2VudHJ5KCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sVG9BcnJheSg3LCB0aGlzLT5t
YXBfZW50cnkoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLSAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT51bmludGVycHJldGVkX29wdGlvbl9zaXpl
KCk7IGkgPCBuOyBpKyspIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5
KAotICAgICAgICA5OTksIHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uKGkpLCB0YXJnZXQpOwot
ICB9Ci0KLSAgLy8gRXh0ZW5zaW9uIHJhbmdlIFsxMDAwLCA1MzY4NzA5MTIpCi0gIHRhcmdldCA9
IF9leHRlbnNpb25zXy5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgICAgMTAw
MCwgNTM2ODcwOTEyLCB0YXJnZXQpOwotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVf
dW5rbm93bl9maWVsZHMoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHNUb0FycmF5KAotICAgICAg
ICB1bmtub3duX2ZpZWxkcygpLCB0YXJnZXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0
aW9ucykKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IE1lc3NhZ2VPcHRpb25zOjpCeXRlU2l6
ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6
ZV9zdGFydDpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMpCi0gIGludCB0b3RhbF9zaXpl
ID0gMDsKLQotICBpZiAoX2hhc19iaXRzX1swIC8gMzJdICYgMTV1KSB7Ci0gICAgLy8gb3B0aW9u
YWwgYm9vbCBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCA9IDEgW2RlZmF1bHQgPSBmYWxzZV07Ci0g
ICAgaWYgKGhhc19tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCgpKSB7Ci0gICAgICB0b3RhbF9zaXpl
ICs9IDEgKyAxOwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIGJvb2wgbm9fc3RhbmRhcmRfZGVz
Y3JpcHRvcl9hY2Nlc3NvciA9IDIgW2RlZmF1bHQgPSBmYWxzZV07Ci0gICAgaWYgKGhhc19ub19z
dGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSAr
IDE7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMyBbZGVmYXVs
dCA9IGZhbHNlXTsKLSAgICBpZiAoaGFzX2RlcHJlY2F0ZWQoKSkgewotICAgICAgdG90YWxfc2l6
ZSArPSAxICsgMTsKLSAgICB9Ci0KLSAgICAvLyBvcHRpb25hbCBib29sIG1hcF9lbnRyeSA9IDc7
Ci0gICAgaWYgKGhhc19tYXBfZW50cnkoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsgMTsK
LSAgICB9Ci0KLSAgfQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0
ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0gIHRvdGFsX3NpemUgKz0gMiAq
IHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0aGlzLT51bmludGVycHJldGVkX29wdGlvbl9zaXplKCk7IGkrKykgewotICAgIHRvdGFsX3Np
emUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRp
b24oaSkpOwotICB9Ci0KLSAgdG90YWxfc2l6ZSArPSBfZXh0ZW5zaW9uc18uQnl0ZVNpemUoKTsK
LQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAg
ICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0OjpDb21wdXRlVW5rbm93bkZpZWxkc1NpemUoCi0gICAgICAgIHVua25vd25fZmllbGRz
KCkpOwotICB9Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9j
YWNoZWRfc2l6ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRF
U19FTkQoKTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgTWVzc2FnZU9wdGlvbnM6
Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucykKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNF
KCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgTWVzc2Fn
ZU9wdGlvbnMqIHNvdXJjZSA9IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25zdCBNZXNzYWdlT3B0aW9ucz4oCi0gICAgICAgICAg
JmZyb20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90b2J1Zi5N
ZXNzYWdlT3B0aW9ucykKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0
aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5w
cm90b2J1Zi5NZXNzYWdlT3B0aW9ucykKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0K
LQotdm9pZCBNZXNzYWdlT3B0aW9uczo6TWVyZ2VGcm9tKGNvbnN0IE1lc3NhZ2VPcHRpb25zJiBm
cm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2Vf
ZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMpCi0gIGlmIChHT09HTEVf
UFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0g
IHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5NZXJnZUZyb20oZnJvbS51bmludGVycHJldGVkX29wdGlv
bl8pOwotICBpZiAoZnJvbS5faGFzX2JpdHNfWzAgLyAzMl0gJiAoMHhmZnUgPDwgKDAgJSAzMikp
KSB7Ci0gICAgaWYgKGZyb20uaGFzX21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICAg
IHNldF9tZXNzYWdlX3NldF93aXJlX2Zvcm1hdChmcm9tLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0
KCkpOwotICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nl
c3NvcigpKSB7Ci0gICAgICBzZXRfbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3Nvcihmcm9t
Lm5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IoKSk7Ci0gICAgfQotICAgIGlmIChmcm9t
Lmhhc19kZXByZWNhdGVkKCkpIHsKLSAgICAgIHNldF9kZXByZWNhdGVkKGZyb20uZGVwcmVjYXRl
ZCgpKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX21hcF9lbnRyeSgpKSB7Ci0gICAgICBzZXRf
bWFwX2VudHJ5KGZyb20ubWFwX2VudHJ5KCkpOwotICAgIH0KLSAgfQotICBfZXh0ZW5zaW9uc18u
TWVyZ2VGcm9tKGZyb20uX2V4dGVuc2lvbnNfKTsKLSAgaWYgKGZyb20uX2ludGVybmFsX21ldGFk
YXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vua25vd25fZmllbGRz
KCktPk1lcmdlRnJvbShmcm9tLnVua25vd25fZmllbGRzKCkpOwotICB9Ci19Ci0KLXZvaWQgTWVz
c2FnZU9wdGlvbnM6OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYg
ZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJv
bV9zdGFydDpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMpCi0gIGlmICgmZnJvbSA9PSB0
aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBN
ZXNzYWdlT3B0aW9uczo6Q29weUZyb20oY29uc3QgTWVzc2FnZU9wdGlvbnMmIGZyb20pIHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6
Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0
dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLWJvb2wgTWVzc2FnZU9w
dGlvbnM6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgaWYgKCE6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpBbGxBcmVJbml0aWFsaXplZCh0aGlzLT51bmludGVycHJldGVkX29wdGlv
bigpKSkgcmV0dXJuIGZhbHNlOwotCi0gIGlmICghX2V4dGVuc2lvbnNfLklzSW5pdGlhbGl6ZWQo
KSkgcmV0dXJuIGZhbHNlOyAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVzc2FnZU9wdGlvbnM6
OlN3YXAoTWVzc2FnZU9wdGlvbnMqIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1
cm47Ci0gIEludGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lkIE1lc3NhZ2VPcHRpb25zOjpJbnRl
cm5hbFN3YXAoTWVzc2FnZU9wdGlvbnMqIG90aGVyKSB7Ci0gIHN0ZDo6c3dhcChtZXNzYWdlX3Nl
dF93aXJlX2Zvcm1hdF8sIG90aGVyLT5tZXNzYWdlX3NldF93aXJlX2Zvcm1hdF8pOwotICBzdGQ6
OnN3YXAobm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3Nvcl8sIG90aGVyLT5ub19zdGFuZGFy
ZF9kZXNjcmlwdG9yX2FjY2Vzc29yXyk7Ci0gIHN0ZDo6c3dhcChkZXByZWNhdGVkXywgb3RoZXIt
PmRlcHJlY2F0ZWRfKTsKLSAgc3RkOjpzd2FwKG1hcF9lbnRyeV8sIG90aGVyLT5tYXBfZW50cnlf
KTsKLSAgdW5pbnRlcnByZXRlZF9vcHRpb25fLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPnVuaW50
ZXJwcmV0ZWRfb3B0aW9uXyk7Ci0gIHN0ZDo6c3dhcChfaGFzX2JpdHNfWzBdLCBvdGhlci0+X2hh
c19iaXRzX1swXSk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5h
bF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRf
c2l6ZV8pOwotICBfZXh0ZW5zaW9uc18uU3dhcCgmb3RoZXItPl9leHRlbnNpb25zXyk7Ci19Ci0K
LTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgTWVzc2FnZU9wdGlvbnM6OkdldE1ldGFkYXRh
KCkgY29uc3QgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9
IE1lc3NhZ2VPcHRpb25zX2Rlc2NyaXB0b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gTWVz
c2FnZU9wdGlvbnNfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBS
T1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gTWVzc2FnZU9wdGlvbnMKLQotLy8gb3B0
aW9uYWwgYm9vbCBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCA9IDEgW2RlZmF1bHQgPSBmYWxzZV07
Ci1ib29sIE1lc3NhZ2VPcHRpb25zOjpoYXNfbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSBjb25z
dCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQotdm9p
ZCBNZXNzYWdlT3B0aW9uczo6c2V0X2hhc19tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCgpIHsKLSAg
X2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0KLXZvaWQgTWVzc2FnZU9wdGlvbnM6OmNs
ZWFyX2hhc19tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+
MHgwMDAwMDAwMXU7Ci19Ci12b2lkIE1lc3NhZ2VPcHRpb25zOjpjbGVhcl9tZXNzYWdlX3NldF93
aXJlX2Zvcm1hdCgpIHsKLSAgbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXRfID0gZmFsc2U7Ci0gIGNs
ZWFyX2hhc19tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCgpOwotfQotIGJvb2wgTWVzc2FnZU9wdGlv
bnM6Om1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5tZXNz
YWdlX3NldF93aXJlX2Zvcm1hdCkKLSAgcmV0dXJuIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0XzsK
LX0KLSB2b2lkIE1lc3NhZ2VPcHRpb25zOjpzZXRfbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoYm9v
bCB2YWx1ZSkgewotICBzZXRfaGFzX21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCk7Ci0gIG1lc3Nh
Z2Vfc2V0X3dpcmVfZm9ybWF0XyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5tZXNzYWdlX3NldF93
aXJlX2Zvcm1hdCkKLX0KLQotLy8gb3B0aW9uYWwgYm9vbCBub19zdGFuZGFyZF9kZXNjcmlwdG9y
X2FjY2Vzc29yID0gMiBbZGVmYXVsdCA9IGZhbHNlXTsKLWJvb2wgTWVzc2FnZU9wdGlvbnM6Omhh
c19ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKCkgY29uc3QgewotICByZXR1cm4gKF9o
YXNfYml0c19bMF0gJiAweDAwMDAwMDAydSkgIT0gMDsKLX0KLXZvaWQgTWVzc2FnZU9wdGlvbnM6
OnNldF9oYXNfbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpIHsKLSAgX2hhc19iaXRz
X1swXSB8PSAweDAwMDAwMDAydTsKLX0KLXZvaWQgTWVzc2FnZU9wdGlvbnM6OmNsZWFyX2hhc19u
b19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4w
eDAwMDAwMDAydTsKLX0KLXZvaWQgTWVzc2FnZU9wdGlvbnM6OmNsZWFyX25vX3N0YW5kYXJkX2Rl
c2NyaXB0b3JfYWNjZXNzb3IoKSB7Ci0gIG5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3Jf
ID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKCk7
Ci19Ci0gYm9vbCBNZXNzYWdlT3B0aW9uczo6bm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3Nv
cigpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMubm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3Nv
cikKLSAgcmV0dXJuIG5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3JfOwotfQotIHZvaWQg
TWVzc2FnZU9wdGlvbnM6OnNldF9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKGJvb2wg
dmFsdWUpIHsKLSAgc2V0X2hhc19ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKCk7Ci0g
IG5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3JfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25z
Lm5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IpCi19Ci0KLS8vIG9wdGlvbmFsIGJvb2wg
ZGVwcmVjYXRlZCA9IDMgW2RlZmF1bHQgPSBmYWxzZV07Ci1ib29sIE1lc3NhZ2VPcHRpb25zOjpo
YXNfZGVwcmVjYXRlZCgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAw
MDAwNHUpICE9IDA7Ci19Ci12b2lkIE1lc3NhZ2VPcHRpb25zOjpzZXRfaGFzX2RlcHJlY2F0ZWQo
KSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwNHU7Ci19Ci12b2lkIE1lc3NhZ2VPcHRp
b25zOjpjbGVhcl9oYXNfZGVwcmVjYXRlZCgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAw
MDAwNHU7Ci19Ci12b2lkIE1lc3NhZ2VPcHRpb25zOjpjbGVhcl9kZXByZWNhdGVkKCkgewotICBk
ZXByZWNhdGVkXyA9IGZhbHNlOwotICBjbGVhcl9oYXNfZGVwcmVjYXRlZCgpOwotfQotIGJvb2wg
TWVzc2FnZU9wdGlvbnM6OmRlcHJlY2F0ZWQoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLmRlcHJl
Y2F0ZWQpCi0gIHJldHVybiBkZXByZWNhdGVkXzsKLX0KLSB2b2lkIE1lc3NhZ2VPcHRpb25zOjpz
ZXRfZGVwcmVjYXRlZChib29sIHZhbHVlKSB7Ci0gIHNldF9oYXNfZGVwcmVjYXRlZCgpOwotICBk
ZXByZWNhdGVkXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0Omdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5kZXByZWNhdGVkKQotfQotCi0vLyBv
cHRpb25hbCBib29sIG1hcF9lbnRyeSA9IDc7Ci1ib29sIE1lc3NhZ2VPcHRpb25zOjpoYXNfbWFw
X2VudHJ5KCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDA4dSkg
IT0gMDsKLX0KLXZvaWQgTWVzc2FnZU9wdGlvbnM6OnNldF9oYXNfbWFwX2VudHJ5KCkgewotICBf
aGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDh1OwotfQotdm9pZCBNZXNzYWdlT3B0aW9uczo6Y2xl
YXJfaGFzX21hcF9lbnRyeSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwOHU7Ci19
Ci12b2lkIE1lc3NhZ2VPcHRpb25zOjpjbGVhcl9tYXBfZW50cnkoKSB7Ci0gIG1hcF9lbnRyeV8g
PSBmYWxzZTsKLSAgY2xlYXJfaGFzX21hcF9lbnRyeSgpOwotfQotIGJvb2wgTWVzc2FnZU9wdGlv
bnM6Om1hcF9lbnRyeSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2dldDpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMubWFwX2VudHJ5KQotICByZXR1
cm4gbWFwX2VudHJ5XzsKLX0KLSB2b2lkIE1lc3NhZ2VPcHRpb25zOjpzZXRfbWFwX2VudHJ5KGJv
b2wgdmFsdWUpIHsKLSAgc2V0X2hhc19tYXBfZW50cnkoKTsKLSAgbWFwX2VudHJ5XyA9IHZhbHVl
OwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1
Zi5NZXNzYWdlT3B0aW9ucy5tYXBfZW50cnkpCi19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJv
dG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLWlu
dCBNZXNzYWdlT3B0aW9uczo6dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpIGNvbnN0IHsKLSAg
cmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5zaXplKCk7Ci19Ci12b2lkIE1lc3NhZ2VPcHRp
b25zOjpjbGVhcl91bmludGVycHJldGVkX29wdGlvbigpIHsKLSAgdW5pbnRlcnByZXRlZF9vcHRp
b25fLkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRP
cHRpb24mIE1lc3NhZ2VPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbihpbnQgaW5kZXgpIGNv
bnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJv
dG9idWYuTWVzc2FnZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmlu
dGVycHJldGVkX29wdGlvbl8uR2V0KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5p
bnRlcnByZXRlZE9wdGlvbiogTWVzc2FnZU9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnByZXRlZF9v
cHRpb24oaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9t
dXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlv
bikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5NdXRhYmxlKGluZGV4KTsKLX0KLTo6
Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogTWVzc2FnZU9wdGlvbnM6OmFk
ZF91bmludGVycHJldGVkX29wdGlvbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMudW5pbnRlcnByZXRlZF9v
cHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uQWRkKCk7Ci19Ci06Omdvb2ds
ZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRl
cnByZXRlZE9wdGlvbiA+KgotTWVzc2FnZU9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnByZXRlZF9v
cHRpb24oKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xp
c3Q6Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQot
ICByZXR1cm4gJnVuaW50ZXJwcmV0ZWRfb3B0aW9uXzsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVk
T3B0aW9uID4mCi1NZXNzYWdlT3B0aW9uczo6dW5pbnRlcnByZXRlZF9vcHRpb24oKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1
Zi5NZXNzYWdlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJw
cmV0ZWRfb3B0aW9uXzsKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hF
QURFUlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotCi1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1E
ZXNjcmlwdG9yKiBGaWVsZE9wdGlvbnNfQ1R5cGVfZGVzY3JpcHRvcigpIHsKLSAgcHJvdG9idWZf
QXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIHJldHVybiBGaWVsZE9wdGlvbnNfQ1R5cGVfZGVz
Y3JpcHRvcl87Ci19Ci1ib29sIEZpZWxkT3B0aW9uc19DVHlwZV9Jc1ZhbGlkKGludCB2YWx1ZSkg
ewotICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2Ug
MjoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLX0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1j
b25zdCBGaWVsZE9wdGlvbnNfQ1R5cGUgRmllbGRPcHRpb25zOjpTVFJJTkc7Ci1jb25zdCBGaWVs
ZE9wdGlvbnNfQ1R5cGUgRmllbGRPcHRpb25zOjpDT1JEOwotY29uc3QgRmllbGRPcHRpb25zX0NU
eXBlIEZpZWxkT3B0aW9uczo6U1RSSU5HX1BJRUNFOwotY29uc3QgRmllbGRPcHRpb25zX0NUeXBl
IEZpZWxkT3B0aW9uczo6Q1R5cGVfTUlOOwotY29uc3QgRmllbGRPcHRpb25zX0NUeXBlIEZpZWxk
T3B0aW9uczo6Q1R5cGVfTUFYOwotY29uc3QgaW50IEZpZWxkT3B0aW9uczo6Q1R5cGVfQVJSQVlT
SVpFOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAot
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvciogRmllbGRPcHRpb25zX0pT
VHlwZV9kZXNjcmlwdG9yKCkgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsK
LSAgcmV0dXJuIEZpZWxkT3B0aW9uc19KU1R5cGVfZGVzY3JpcHRvcl87Ci19Ci1ib29sIEZpZWxk
T3B0aW9uc19KU1R5cGVfSXNWYWxpZChpbnQgdmFsdWUpIHsKLSAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLSNpZiAhZGVmaW5l
ZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgRmllbGRPcHRpb25zX0pTVHlw
ZSBGaWVsZE9wdGlvbnM6OkpTX05PUk1BTDsKLWNvbnN0IEZpZWxkT3B0aW9uc19KU1R5cGUgRmll
bGRPcHRpb25zOjpKU19TVFJJTkc7Ci1jb25zdCBGaWVsZE9wdGlvbnNfSlNUeXBlIEZpZWxkT3B0
aW9uczo6SlNfTlVNQkVSOwotY29uc3QgRmllbGRPcHRpb25zX0pTVHlwZSBGaWVsZE9wdGlvbnM6
OkpTVHlwZV9NSU47Ci1jb25zdCBGaWVsZE9wdGlvbnNfSlNUeXBlIEZpZWxkT3B0aW9uczo6SlNU
eXBlX01BWDsKLWNvbnN0IGludCBGaWVsZE9wdGlvbnM6OkpTVHlwZV9BUlJBWVNJWkU7Ci0jZW5k
aWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0jaWYgIWRlZmlu
ZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBGaWVsZE9wdGlvbnM6
OmtDdHlwZUZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpZWxkT3B0aW9uczo6a1BhY2tlZEZpZWxk
TnVtYmVyOwotY29uc3QgaW50IEZpZWxkT3B0aW9uczo6a0pzdHlwZUZpZWxkTnVtYmVyOwotY29u
c3QgaW50IEZpZWxkT3B0aW9uczo6a0xhenlGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWVsZE9w
dGlvbnM6OmtEZXByZWNhdGVkRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRmllbGRPcHRpb25zOjpr
V2Vha0ZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpZWxkT3B0aW9uczo6a1VuaW50ZXJwcmV0ZWRP
cHRpb25GaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0Nf
VkVSID49IDE5MDAKLQotRmllbGRPcHRpb25zOjpGaWVsZE9wdGlvbnMoKQotICA6IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hh
cmVkQ3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29v
Z2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucykKLX0KLQotdm9pZCBGaWVsZE9wdGlvbnM6OkluaXRB
c0RlZmF1bHRJbnN0YW5jZSgpIHsKLX0KLQotRmllbGRPcHRpb25zOjpGaWVsZE9wdGlvbnMoY29u
c3QgRmllbGRPcHRpb25zJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgp
LAotICAgIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIE1l
cmdlRnJvbShmcm9tKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlfY29uc3Ry
dWN0b3I6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucykKLX0KLQotdm9pZCBGaWVsZE9wdGlv
bnM6OlNoYXJlZEN0b3IoKSB7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwotICBjdHlwZV8gPSAwOwot
ICBwYWNrZWRfID0gZmFsc2U7Ci0gIGpzdHlwZV8gPSAwOwotICBsYXp5XyA9IGZhbHNlOwotICBk
ZXByZWNhdGVkXyA9IGZhbHNlOwotICB3ZWFrXyA9IGZhbHNlOwotICA6Om1lbXNldChfaGFzX2Jp
dHNfLCAwLCBzaXplb2YoX2hhc19iaXRzXykpOwotfQotCi1GaWVsZE9wdGlvbnM6On5GaWVsZE9w
dGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2ds
ZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMpCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBGaWVs
ZE9wdGlvbnM6OlNoYXJlZER0b3IoKSB7Ci0gIGlmICh0aGlzICE9IGRlZmF1bHRfaW5zdGFuY2Vf
KSB7Ci0gIH0KLX0KLQotdm9pZCBGaWVsZE9wdGlvbnM6OlNldENhY2hlZFNpemUoaW50IHNpemUp
IGNvbnN0IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2Nh
Y2hlZF9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgp
OwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBGaWVsZE9wdGlvbnM6
OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICBy
ZXR1cm4gRmllbGRPcHRpb25zX2Rlc2NyaXB0b3JfOwotfQotCi1jb25zdCBGaWVsZE9wdGlvbnMm
IEZpZWxkT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFu
Y2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlw
dG9yXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRmllbGRP
cHRpb25zKiBGaWVsZE9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotRmllbGRP
cHRpb25zKiBGaWVsZE9wdGlvbnM6Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVu
YSkgY29uc3QgewotICBGaWVsZE9wdGlvbnMqIG4gPSBuZXcgRmllbGRPcHRpb25zOwotICBpZiAo
YXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19
Ci0KLXZvaWQgRmllbGRPcHRpb25zOjpDbGVhcigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChtZXNzYWdlX2NsZWFyX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMpCi0g
IF9leHRlbnNpb25zXy5DbGVhcigpOwotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI2RlZmluZSBa
Ul9IRUxQRVJfKGYpIFwKLSAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBwdXNoIikgXAotICBf
UHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2ludmFsaWQtb2Zmc2V0b2ZcIiIp
IFwKLSAgX19idWlsdGluX29mZnNldG9mKEZpZWxkT3B0aW9ucywgZikgXAotICBfUHJhZ21hKCJj
bGFuZyBkaWFnbm9zdGljIHBvcCIpCi0jZWxzZQotI2RlZmluZSBaUl9IRUxQRVJfKGYpIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KFwKLSAgJnJlaW50ZXJwcmV0X2Nhc3Q8RmllbGRPcHRpb25zKj4o
MTYpLT5mKQotI2VuZGlmCi0KLSNkZWZpbmUgWlJfKGZpcnN0LCBsYXN0KSBkbyB7XAotICA6Om1l
bXNldCgmZmlyc3QsIDAsXAotICAgICAgICAgICBaUl9IRUxQRVJfKGxhc3QpIC0gWlJfSEVMUEVS
XyhmaXJzdCkgKyBzaXplb2YobGFzdCkpO1wKLX0gd2hpbGUgKDApCi0KLSAgaWYgKF9oYXNfYml0
c19bMCAvIDMyXSAmIDYzdSkgewotICAgIFpSXyhjdHlwZV8sIGpzdHlwZV8pOwotICAgIFpSXyhw
YWNrZWRfLCB3ZWFrXyk7Ci0gIH0KLQotI3VuZGVmIFpSX0hFTFBFUl8KLSN1bmRlZiBaUl8KLQot
ICB1bmludGVycHJldGVkX29wdGlvbl8uQ2xlYXIoKTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywg
MCwgc2l6ZW9mKF9oYXNfYml0c18pKTsKLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91
bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5DbGVhcigp
OwotICB9Ci19Ci0KLWJvb2wgRmllbGRPcHRpb25zOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJl
YW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQp
IHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShFWFBS
RVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRhZzsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5GaWVsZE9wdGlvbnMpCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6
OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTYz
ODMpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVf
dW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCAu
Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZSBjdHlwZSA9IDEgW2RlZmF1bHQgPSBT
VFJJTkddOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gOCkgewotICAgICAg
ICAgIGludCB2YWx1ZTsKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPAotICAgICAgICAgICAgICAgICAgIGlu
dCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfRU5V
TT4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmdmFsdWUpKSk7Ci0gICAgICAgICAgaWYgKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRPcHRpb25zX0NUeXBlX0lzVmFsaWQodmFsdWUpKSB7Ci0g
ICAgICAgICAgICBzZXRfY3R5cGUoc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6Rmll
bGRPcHRpb25zX0NUeXBlID4odmFsdWUpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5BZGRWYXJpbnQoMSwgdmFsdWUpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDE2KSkgZ290byBwYXJzZV9w
YWNrZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBib29s
IHBhY2tlZCA9IDI7Ci0gICAgICBjYXNlIDI6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxNikgewot
ICAgICAgICAgcGFyc2VfcGFja2VkOgotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAg
ICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmcGFja2VkXykpKTsKLSAgICAg
ICAgICBzZXRfaGFzX3BhY2tlZCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8g
aGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWco
MjQpKSBnb3RvIHBhcnNlX2RlcHJlY2F0ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g
ICAgICAvLyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzIFtkZWZhdWx0ID0gZmFsc2VdOwot
ICAgICAgY2FzZSAzOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMjQpIHsKLSAgICAgICAgIHBhcnNl
X2RlcHJlY2F0ZWQ6Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICBib29s
LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9CT09M
PigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZkZXByZWNhdGVkXykpKTsKLSAgICAgICAgICBz
ZXRfaGFzX2RlcHJlY2F0ZWQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhh
bmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDQw
KSkgZ290byBwYXJzZV9sYXp5OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8g
b3B0aW9uYWwgYm9vbCBsYXp5ID0gNSBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgICAgIGNhc2UgNTog
ewotICAgICAgICBpZiAodGFnID09IDQwKSB7Ci0gICAgICAgICBwYXJzZV9sYXp5OgotICAgICAg
ICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJl
YWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAg
IGlucHV0LCAmbGF6eV8pKSk7Ci0gICAgICAgICAgc2V0X2hhc19sYXp5KCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg0OCkpIGdvdG8gcGFyc2VfanN0eXBlOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWVs
ZE9wdGlvbnMuSlNUeXBlIGpzdHlwZSA9IDYgW2RlZmF1bHQgPSBKU19OT1JNQUxdOwotICAgICAg
Y2FzZSA2OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNDgpIHsKLSAgICAgICAgIHBhcnNlX2pzdHlw
ZToKLSAgICAgICAgICBpbnQgdmFsdWU7Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAg
ICAgICAgICBpbnQsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpUWVBFX0VOVU0+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJnZhbHVlKSkpOwotICAgICAg
ICAgIGlmICg6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19KU1R5cGVfSXNWYWxpZCh2
YWx1ZSkpIHsKLSAgICAgICAgICAgIHNldF9qc3R5cGUoc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6RmllbGRPcHRpb25zX0pTVHlwZSA+KHZhbHVlKSk7Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+QWRkVmFyaW50KDYsIHZh
bHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5k
bGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg4MCkp
IGdvdG8gcGFyc2Vfd2VhazsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9w
dGlvbmFsIGJvb2wgd2VhayA9IDEwIFtkZWZhdWx0ID0gZmFsc2VdOwotICAgICAgY2FzZSAxMDog
ewotICAgICAgICBpZiAodGFnID09IDgwKSB7Ci0gICAgICAgICBwYXJzZV93ZWFrOgotICAgICAg
ICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJl
YWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAg
IGlucHV0LCAmd2Vha18pKSk7Ci0gICAgICAgICAgc2V0X2hhc193ZWFrKCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV91bmludGVycHJldGVkX29w
dGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlcGVhdGVkIC5nb29n
bGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5
OTsKLSAgICAgIGNhc2UgOTk5OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNzk5NCkgewotICAgICAg
ICAgcGFyc2VfdW5pbnRlcnByZXRlZF9vcHRpb246Ci0gICAgICAgICAgRE9fKGlucHV0LT5JbmNy
ZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBhcnNlX2xvb3BfdW5pbnRlcnByZXRl
ZF9vcHRpb246Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoCi0gICAg
ICAgICAgICAgICAgaW5wdXQsIGFkZF91bmludGVycHJldGVkX29wdGlvbigpKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV9sb29wX3VuaW50ZXJw
cmV0ZWRfb3B0aW9uOwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVw
dGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVf
dW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9
PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoKDgwMDB1IDw9IHRhZykpIHsKLSAgICAgICAgICBET18oX2V4dGVu
c2lvbnNfLlBhcnNlRmllbGQodGFnLCBpbnB1dCwgZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkp
OwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0gICAgICAgICAgICAg
IGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAgICAgICBicmVhazsK
LSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMpCi0gIHJldHVy
biB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX2Zh
aWx1cmU6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucykKLSAgcmV0dXJuIGZhbHNlOwotI3Vu
ZGVmIERPXwotfQotCi12b2lkIEZpZWxkT3B0aW9uczo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpn
b29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zKQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3Rv
YnVmLkZpZWxkT3B0aW9ucy5DVHlwZSBjdHlwZSA9IDEgW2RlZmF1bHQgPSBTVFJJTkddOwotICBp
ZiAoaGFzX2N0eXBlKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6V3JpdGVFbnVtKAotICAgICAgMSwgdGhpcy0+Y3R5cGUoKSwgb3V0cHV0KTsK
LSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgcGFja2VkID0gMjsKLSAgaWYgKGhhc19wYWNrZWQo
KSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpX
cml0ZUJvb2woMiwgdGhpcy0+cGFja2VkKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25h
bCBib29sIGRlcHJlY2F0ZWQgPSAzIFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2RlcHJl
Y2F0ZWQoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXcml0ZUJvb2woMywgdGhpcy0+ZGVwcmVjYXRlZCgpLCBvdXRwdXQpOwotICB9Ci0KLSAg
Ly8gb3B0aW9uYWwgYm9vbCBsYXp5ID0gNSBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgaWYgKGhhc19s
YXp5KCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6V3JpdGVCb29sKDUsIHRoaXMtPmxhenkoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlv
bmFsIC5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZSBqc3R5cGUgPSA2IFtkZWZh
dWx0ID0gSlNfTk9STUFMXTsKLSAgaWYgKGhhc19qc3R5cGUoKSkgewotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUVudW0oCi0gICAgICA2LCB0
aGlzLT5qc3R5cGUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgd2VhayA9
IDEwIFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX3dlYWsoKSkgewotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2woMTAsIHRoaXMt
PndlYWsoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYu
VW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLSAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT51bmludGVycHJldGVkX29wdGlvbl9zaXplKCk7
IGkgPCBuOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVUb0FycmF5KAotICAgICAgOTk5LCB0aGlzLT51bmlu
dGVycHJldGVkX29wdGlvbihpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIEV4dGVuc2lvbiByYW5n
ZSBbMTAwMCwgNTM2ODcwOTEyKQotICBfZXh0ZW5zaW9uc18uU2VyaWFsaXplV2l0aENhY2hlZFNp
emVzKAotICAgICAgMTAwMCwgNTM2ODcwOTEyLCBvdXRwdXQpOwotCi0gIGlmIChfaW50ZXJuYWxf
bWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHMoCi0gICAgICAg
IHVua25vd25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucykKLX0KLQot
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogRmllbGRPcHRpb25zOjpTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkg
Y29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5
X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMpCi0gIC8vIG9wdGlvbmFsIC5nb29n
bGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlIGN0eXBlID0gMSBbZGVmYXVsdCA9IFNUUklO
R107Ci0gIGlmIChoYXNfY3R5cGUoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUVudW1Ub0FycmF5KAotICAgICAgMSwg
dGhpcy0+Y3R5cGUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgcGFja2Vk
ID0gMjsKLSAgaWYgKGhhc19wYWNrZWQoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2xUb0FycmF5KDIsIHRoaXMt
PnBhY2tlZCgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVk
ID0gMyBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgaWYgKGhhc19kZXByZWNhdGVkKCkpIHsKLSAgICB0
YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3Jp
dGVCb29sVG9BcnJheSgzLCB0aGlzLT5kZXByZWNhdGVkKCksIHRhcmdldCk7Ci0gIH0KLQotICAv
LyBvcHRpb25hbCBib29sIGxhenkgPSA1IFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2xh
enkoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZUJvb2xUb0FycmF5KDUsIHRoaXMtPmxhenkoKSwgdGFyZ2V0KTsKLSAg
fQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZSBq
c3R5cGUgPSA2IFtkZWZhdWx0ID0gSlNfTk9STUFMXTsKLSAgaWYgKGhhc19qc3R5cGUoKSkgewot
ICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpXcml0ZUVudW1Ub0FycmF5KAotICAgICAgNiwgdGhpcy0+anN0eXBlKCksIHRhcmdldCk7Ci0g
IH0KLQotICAvLyBvcHRpb25hbCBib29sIHdlYWsgPSAxMCBbZGVmYXVsdCA9IGZhbHNlXTsKLSAg
aWYgKGhhc193ZWFrKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sVG9BcnJheSgxMCwgdGhpcy0+d2VhaygpLCB0
YXJnZXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJl
dGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMCwgbiA9IHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKTsgaSA8IG47IGkr
KykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDk5
OSwgdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb24oaSksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBF
eHRlbnNpb24gcmFuZ2UgWzEwMDAsIDUzNjg3MDkxMikKLSAgdGFyZ2V0ID0gX2V4dGVuc2lvbnNf
LlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgICAxMDAwLCA1MzY4NzA5MTIs
IHRhcmdldCk7Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxk
cygpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkc1RvQXJyYXkoCi0gICAgICAgIHVua25vd25fZmll
bGRzKCksIHRhcmdldCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlh
bGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucykKLSAgcmV0dXJu
IHRhcmdldDsKLX0KLQotaW50IEZpZWxkT3B0aW9uczo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnBy
b3RvYnVmLkZpZWxkT3B0aW9ucykKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIGlmIChfaGFz
X2JpdHNfWzAgLyAzMl0gJiA2M3UpIHsKLSAgICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVm
LkZpZWxkT3B0aW9ucy5DVHlwZSBjdHlwZSA9IDEgW2RlZmF1bHQgPSBTVFJJTkddOwotICAgIGlm
IChoYXNfY3R5cGUoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkVudW1TaXplKHRoaXMtPmN0
eXBlKCkpOwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIGJvb2wgcGFja2VkID0gMjsKLSAgICBp
ZiAoaGFzX3BhY2tlZCgpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKyAxOwotICAgIH0KLQot
ICAgIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZSBqc3R5
cGUgPSA2IFtkZWZhdWx0ID0gSlNfTk9STUFMXTsKLSAgICBpZiAoaGFzX2pzdHlwZSgpKSB7Ci0g
ICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6RW51bVNpemUodGhpcy0+anN0eXBlKCkpOwotICAgIH0KLQot
ICAgIC8vIG9wdGlvbmFsIGJvb2wgbGF6eSA9IDUgW2RlZmF1bHQgPSBmYWxzZV07Ci0gICAgaWYg
KGhhc19sYXp5KCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSArIDE7Ci0gICAgfQotCi0gICAg
Ly8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMyBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgICBp
ZiAoaGFzX2RlcHJlY2F0ZWQoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsgMTsKLSAgICB9
Ci0KLSAgICAvLyBvcHRpb25hbCBib29sIHdlYWsgPSAxMCBbZGVmYXVsdCA9IGZhbHNlXTsKLSAg
ICBpZiAoaGFzX3dlYWsoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsgMTsKLSAgICB9Ci0K
LSAgfQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24g
dW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0gIHRvdGFsX3NpemUgKz0gMiAqIHRoaXMtPnVu
aW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT51
bmludGVycHJldGVkX29wdGlvbl9zaXplKCk7IGkrKykgewotICAgIHRvdGFsX3NpemUgKz0KLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdl
U2l6ZU5vVmlydHVhbCgKLSAgICAgICAgdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb24oaSkpOwot
ICB9Ci0KLSAgdG90YWxfc2l6ZSArPSBfZXh0ZW5zaW9uc18uQnl0ZVNpemUoKTsKLQotICBpZiAo
X2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0b3RhbF9z
aXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpD
b21wdXRlVW5rbm93bkZpZWxkc1NpemUoCi0gICAgICAgIHVua25vd25fZmllbGRzKCkpOwotICB9
Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6
ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsK
LSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgRmllbGRPcHRpb25zOjpNZXJnZUZyb20o
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuRmllbGRPcHRpb25zKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhp
cykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25zdCBGaWVsZE9wdGlvbnMqIHNvdXJj
ZSA9IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dl
bmVyYXRlZDxjb25zdCBGaWVsZE9wdGlvbnM+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNv
dXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXpl
ZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zKQotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20s
IHRoaXMpOwotICB9IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJh
bGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9u
cykKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBGaWVsZE9wdGlvbnM6
Ok1lcmdlRnJvbShjb25zdCBGaWVsZE9wdGlvbnMmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5GaWVsZE9wdGlvbnMpCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlz
KSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5NZXJn
ZUZyb20oZnJvbS51bmludGVycHJldGVkX29wdGlvbl8pOwotICBpZiAoZnJvbS5faGFzX2JpdHNf
WzAgLyAzMl0gJiAoMHhmZnUgPDwgKDAgJSAzMikpKSB7Ci0gICAgaWYgKGZyb20uaGFzX2N0eXBl
KCkpIHsKLSAgICAgIHNldF9jdHlwZShmcm9tLmN0eXBlKCkpOwotICAgIH0KLSAgICBpZiAoZnJv
bS5oYXNfcGFja2VkKCkpIHsKLSAgICAgIHNldF9wYWNrZWQoZnJvbS5wYWNrZWQoKSk7Ci0gICAg
fQotICAgIGlmIChmcm9tLmhhc19qc3R5cGUoKSkgewotICAgICAgc2V0X2pzdHlwZShmcm9tLmpz
dHlwZSgpKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX2xhenkoKSkgewotICAgICAgc2V0X2xh
enkoZnJvbS5sYXp5KCkpOwotICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfZGVwcmVjYXRlZCgpKSB7
Ci0gICAgICBzZXRfZGVwcmVjYXRlZChmcm9tLmRlcHJlY2F0ZWQoKSk7Ci0gICAgfQotICAgIGlm
IChmcm9tLmhhc193ZWFrKCkpIHsKLSAgICAgIHNldF93ZWFrKGZyb20ud2VhaygpKTsKLSAgICB9
Ci0gIH0KLSAgX2V4dGVuc2lvbnNfLk1lcmdlRnJvbShmcm9tLl9leHRlbnNpb25zXyk7Ci0gIGlm
IChmcm9tLl9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAg
bXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5NZXJnZUZyb20oZnJvbS51bmtub3duX2ZpZWxkcygp
KTsKLSAgfQotfQotCi12b2lkIEZpZWxkT3B0aW9uczo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Z2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMp
Ci0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShm
cm9tKTsKLX0KLQotdm9pZCBGaWVsZE9wdGlvbnM6OkNvcHlGcm9tKGNvbnN0IEZpZWxkT3B0aW9u
cyYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2Nv
cHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zKQotICBpZiAoJmZyb20g
PT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLWJv
b2wgRmllbGRPcHRpb25zOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIGlmICghOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QWxsQXJlSW5pdGlhbGl6ZWQodGhpcy0+dW5pbnRlcnBy
ZXRlZF9vcHRpb24oKSkpIHJldHVybiBmYWxzZTsKLQotICBpZiAoIV9leHRlbnNpb25zXy5Jc0lu
aXRpYWxpemVkKCkpIHJldHVybiBmYWxzZTsgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZpZWxk
T3B0aW9uczo6U3dhcChGaWVsZE9wdGlvbnMqIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlz
KSByZXR1cm47Ci0gIEludGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lkIEZpZWxkT3B0aW9uczo6
SW50ZXJuYWxTd2FwKEZpZWxkT3B0aW9ucyogb3RoZXIpIHsKLSAgc3RkOjpzd2FwKGN0eXBlXywg
b3RoZXItPmN0eXBlXyk7Ci0gIHN0ZDo6c3dhcChwYWNrZWRfLCBvdGhlci0+cGFja2VkXyk7Ci0g
IHN0ZDo6c3dhcChqc3R5cGVfLCBvdGhlci0+anN0eXBlXyk7Ci0gIHN0ZDo6c3dhcChsYXp5Xywg
b3RoZXItPmxhenlfKTsKLSAgc3RkOjpzd2FwKGRlcHJlY2F0ZWRfLCBvdGhlci0+ZGVwcmVjYXRl
ZF8pOwotICBzdGQ6OnN3YXAod2Vha18sIG90aGVyLT53ZWFrXyk7Ci0gIHVuaW50ZXJwcmV0ZWRf
b3B0aW9uXy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT51bmludGVycHJldGVkX29wdGlvbl8pOwot
ICBzdGQ6OnN3YXAoX2hhc19iaXRzX1swXSwgb3RoZXItPl9oYXNfYml0c19bMF0pOwotICBfaW50
ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3Rk
Ojpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90aGVyLT5fY2FjaGVkX3NpemVfKTsKLSAgX2V4dGVuc2lv
bnNfLlN3YXAoJm90aGVyLT5fZXh0ZW5zaW9uc18pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6
Ok1ldGFkYXRhIEZpZWxkT3B0aW9uczo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVm
X0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRh
IG1ldGFkYXRhOwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gRmllbGRPcHRpb25zX2Rlc2NyaXB0
b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gRmllbGRPcHRpb25zX3JlZmxlY3Rpb25fOwot
ICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURF
UlMKLS8vIEZpZWxkT3B0aW9ucwotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxk
T3B0aW9ucy5DVHlwZSBjdHlwZSA9IDEgW2RlZmF1bHQgPSBTVFJJTkddOwotYm9vbCBGaWVsZE9w
dGlvbnM6Omhhc19jdHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgw
MDAwMDAwMXUpICE9IDA7Ci19Ci12b2lkIEZpZWxkT3B0aW9uczo6c2V0X2hhc19jdHlwZSgpIHsK
LSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0KLXZvaWQgRmllbGRPcHRpb25zOjpj
bGVhcl9oYXNfY3R5cGUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDF1OwotfQot
dm9pZCBGaWVsZE9wdGlvbnM6OmNsZWFyX2N0eXBlKCkgewotICBjdHlwZV8gPSAwOwotICBjbGVh
cl9oYXNfY3R5cGUoKTsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19DVHlw
ZSBGaWVsZE9wdGlvbnM6OmN0eXBlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuY3R5cGUpCi0gIHJl
dHVybiBzdGF0aWNfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnNfQ1R5cGUg
PihjdHlwZV8pOwotfQotIHZvaWQgRmllbGRPcHRpb25zOjpzZXRfY3R5cGUoOjpnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZE9wdGlvbnNfQ1R5cGUgdmFsdWUpIHsKLSAgYXNzZXJ0KDo6Z29vZ2xlOjpw
cm90b2J1Zjo6RmllbGRPcHRpb25zX0NUeXBlX0lzVmFsaWQodmFsdWUpKTsKLSAgc2V0X2hhc19j
dHlwZSgpOwotICBjdHlwZV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmN0eXBlKQotfQotCi0vLyBv
cHRpb25hbCBib29sIHBhY2tlZCA9IDI7Ci1ib29sIEZpZWxkT3B0aW9uczo6aGFzX3BhY2tlZCgp
IGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMnUpICE9IDA7Ci19
Ci12b2lkIEZpZWxkT3B0aW9uczo6c2V0X2hhc19wYWNrZWQoKSB7Ci0gIF9oYXNfYml0c19bMF0g
fD0gMHgwMDAwMDAwMnU7Ci19Ci12b2lkIEZpZWxkT3B0aW9uczo6Y2xlYXJfaGFzX3BhY2tlZCgp
IHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMnU7Ci19Ci12b2lkIEZpZWxkT3B0aW9u
czo6Y2xlYXJfcGFja2VkKCkgewotICBwYWNrZWRfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19wYWNr
ZWQoKTsKLX0KLSBib29sIEZpZWxkT3B0aW9uczo6cGFja2VkKCkgY29uc3QgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlv
bnMucGFja2VkKQotICByZXR1cm4gcGFja2VkXzsKLX0KLSB2b2lkIEZpZWxkT3B0aW9uczo6c2V0
X3BhY2tlZChib29sIHZhbHVlKSB7Ci0gIHNldF9oYXNfcGFja2VkKCk7Ci0gIHBhY2tlZF8gPSB2
YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJv
dG9idWYuRmllbGRPcHRpb25zLnBhY2tlZCkKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90
b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlIGpzdHlwZSA9IDYgW2RlZmF1bHQgPSBKU19OT1JNQUxd
OwotYm9vbCBGaWVsZE9wdGlvbnM6Omhhc19qc3R5cGUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hh
c19iaXRzX1swXSAmIDB4MDAwMDAwMDR1KSAhPSAwOwotfQotdm9pZCBGaWVsZE9wdGlvbnM6OnNl
dF9oYXNfanN0eXBlKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDR1OwotfQotdm9p
ZCBGaWVsZE9wdGlvbnM6OmNsZWFyX2hhc19qc3R5cGUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0g
fjB4MDAwMDAwMDR1OwotfQotdm9pZCBGaWVsZE9wdGlvbnM6OmNsZWFyX2pzdHlwZSgpIHsKLSAg
anN0eXBlXyA9IDA7Ci0gIGNsZWFyX2hhc19qc3R5cGUoKTsKLX0KLSA6Omdvb2dsZTo6cHJvdG9i
dWY6OkZpZWxkT3B0aW9uc19KU1R5cGUgRmllbGRPcHRpb25zOjpqc3R5cGUoKSBjb25zdCB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZp
ZWxkT3B0aW9ucy5qc3R5cGUpCi0gIHJldHVybiBzdGF0aWNfY2FzdDwgOjpnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZE9wdGlvbnNfSlNUeXBlID4oanN0eXBlXyk7Ci19Ci0gdm9pZCBGaWVsZE9wdGlv
bnM6OnNldF9qc3R5cGUoOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnNfSlNUeXBlIHZh
bHVlKSB7Ci0gIGFzc2VydCg6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19KU1R5cGVf
SXNWYWxpZCh2YWx1ZSkpOwotICBzZXRfaGFzX2pzdHlwZSgpOwotICBqc3R5cGVfID0gdmFsdWU7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVm
LkZpZWxkT3B0aW9ucy5qc3R5cGUpCi19Ci0KLS8vIG9wdGlvbmFsIGJvb2wgbGF6eSA9IDUgW2Rl
ZmF1bHQgPSBmYWxzZV07Ci1ib29sIEZpZWxkT3B0aW9uczo6aGFzX2xhenkoKSBjb25zdCB7Ci0g
IHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDh1KSAhPSAwOwotfQotdm9pZCBGaWVs
ZE9wdGlvbnM6OnNldF9oYXNfbGF6eSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDA4
dTsKLX0KLXZvaWQgRmllbGRPcHRpb25zOjpjbGVhcl9oYXNfbGF6eSgpIHsKLSAgX2hhc19iaXRz
X1swXSAmPSB+MHgwMDAwMDAwOHU7Ci19Ci12b2lkIEZpZWxkT3B0aW9uczo6Y2xlYXJfbGF6eSgp
IHsKLSAgbGF6eV8gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX2xhenkoKTsKLX0KLSBib29sIEZpZWxk
T3B0aW9uczo6bGF6eSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmxhenkpCi0gIHJldHVybiBsYXp5
XzsKLX0KLSB2b2lkIEZpZWxkT3B0aW9uczo6c2V0X2xhenkoYm9vbCB2YWx1ZSkgewotICBzZXRf
aGFzX2xhenkoKTsKLSAgbGF6eV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmxhenkpCi19Ci0KLS8v
IG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDMgW2RlZmF1bHQgPSBmYWxzZV07Ci1ib29sIEZp
ZWxkT3B0aW9uczo6aGFzX2RlcHJlY2F0ZWQoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRz
X1swXSAmIDB4MDAwMDAwMTB1KSAhPSAwOwotfQotdm9pZCBGaWVsZE9wdGlvbnM6OnNldF9oYXNf
ZGVwcmVjYXRlZCgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDEwdTsKLX0KLXZvaWQg
RmllbGRPcHRpb25zOjpjbGVhcl9oYXNfZGVwcmVjYXRlZCgpIHsKLSAgX2hhc19iaXRzX1swXSAm
PSB+MHgwMDAwMDAxMHU7Ci19Ci12b2lkIEZpZWxkT3B0aW9uczo6Y2xlYXJfZGVwcmVjYXRlZCgp
IHsKLSAgZGVwcmVjYXRlZF8gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX2RlcHJlY2F0ZWQoKTsKLX0K
LSBib29sIEZpZWxkT3B0aW9uczo6ZGVwcmVjYXRlZCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRl
cHJlY2F0ZWQpCi0gIHJldHVybiBkZXByZWNhdGVkXzsKLX0KLSB2b2lkIEZpZWxkT3B0aW9uczo6
c2V0X2RlcHJlY2F0ZWQoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFzX2RlcHJlY2F0ZWQoKTsKLSAg
ZGVwcmVjYXRlZF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldDpnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmRlcHJlY2F0ZWQpCi19Ci0KLS8vIG9w
dGlvbmFsIGJvb2wgd2VhayA9IDEwIFtkZWZhdWx0ID0gZmFsc2VdOwotYm9vbCBGaWVsZE9wdGlv
bnM6Omhhc193ZWFrKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAw
MDIwdSkgIT0gMDsKLX0KLXZvaWQgRmllbGRPcHRpb25zOjpzZXRfaGFzX3dlYWsoKSB7Ci0gIF9o
YXNfYml0c19bMF0gfD0gMHgwMDAwMDAyMHU7Ci19Ci12b2lkIEZpZWxkT3B0aW9uczo6Y2xlYXJf
aGFzX3dlYWsoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMjB1OwotfQotdm9pZCBG
aWVsZE9wdGlvbnM6OmNsZWFyX3dlYWsoKSB7Ci0gIHdlYWtfID0gZmFsc2U7Ci0gIGNsZWFyX2hh
c193ZWFrKCk7Ci19Ci0gYm9vbCBGaWVsZE9wdGlvbnM6OndlYWsoKSBjb25zdCB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0
aW9ucy53ZWFrKQotICByZXR1cm4gd2Vha187Ci19Ci0gdm9pZCBGaWVsZE9wdGlvbnM6OnNldF93
ZWFrKGJvb2wgdmFsdWUpIHsKLSAgc2V0X2hhc193ZWFrKCk7Ci0gIHdlYWtfID0gdmFsdWU7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZp
ZWxkT3B0aW9ucy53ZWFrKQotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50
ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci1pbnQgRmllbGRPcHRp
b25zOjp1bmludGVycHJldGVkX29wdGlvbl9zaXplKCkgY29uc3QgewotICByZXR1cm4gdW5pbnRl
cnByZXRlZF9vcHRpb25fLnNpemUoKTsKLX0KLXZvaWQgRmllbGRPcHRpb25zOjpjbGVhcl91bmlu
dGVycHJldGVkX29wdGlvbigpIHsKLSAgdW5pbnRlcnByZXRlZF9vcHRpb25fLkNsZWFyKCk7Ci19
Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24mIEZpZWxkT3B0
aW9uczo6dW5pbnRlcnByZXRlZF9vcHRpb24oaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9u
cy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5H
ZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uKiBG
aWVsZE9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnByZXRlZF9vcHRpb24oaW50IGluZGV4KSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1
Zi5GaWVsZE9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJl
dGVkX29wdGlvbl8uTXV0YWJsZShpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50
ZXJwcmV0ZWRPcHRpb24qIEZpZWxkT3B0aW9uczo6YWRkX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1
Zi5GaWVsZE9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJl
dGVkX29wdGlvbl8uQWRkKCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmll
bGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotRmllbGRPcHRp
b25zOjptdXRhYmxlX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlv
bnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiAmdW5pbnRlcnByZXRlZF9vcHRpb25f
OwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2ds
ZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24gPiYKLUZpZWxkT3B0aW9uczo6dW5pbnRl
cnByZXRlZF9vcHRpb24oKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRp
b24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl87Ci19Ci0KLSNlbmRpZiAgLy8gUFJP
VE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZp
bmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgRW51bU9wdGlvbnM6
OmtBbGxvd0FsaWFzRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRW51bU9wdGlvbnM6OmtEZXByZWNh
dGVkRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRW51bU9wdGlvbnM6OmtVbmludGVycHJldGVkT3B0
aW9uRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZF
UiA+PSAxOTAwCi0KLUVudW1PcHRpb25zOjpFbnVtT3B0aW9ucygpCi0gIDogOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRD
dG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb25zdHJ1Y3Rvcjpnb29nbGUu
cHJvdG9idWYuRW51bU9wdGlvbnMpCi19Ci0KLXZvaWQgRW51bU9wdGlvbnM6OkluaXRBc0RlZmF1
bHRJbnN0YW5jZSgpIHsKLX0KLQotRW51bU9wdGlvbnM6OkVudW1PcHRpb25zKGNvbnN0IEVudW1P
cHRpb25zJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9p
bnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShm
cm9tKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29v
Z2xlLnByb3RvYnVmLkVudW1PcHRpb25zKQotfQotCi12b2lkIEVudW1PcHRpb25zOjpTaGFyZWRD
dG9yKCkgewotICBfY2FjaGVkX3NpemVfID0gMDsKLSAgYWxsb3dfYWxpYXNfID0gZmFsc2U7Ci0g
IGRlcHJlY2F0ZWRfID0gZmFsc2U7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihf
aGFzX2JpdHNfKSk7Ci19Ci0KLUVudW1PcHRpb25zOjp+RW51bU9wdGlvbnMoKSB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0
aW9ucykKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lkIEVudW1PcHRpb25zOjpTaGFyZWREdG9y
KCkgewotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNlXykgewotICB9Ci19Ci0KLXZvaWQg
RW51bU9wdGlvbnM6OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NB
RkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0g
IEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBFbnVtT3B0aW9uczo6ZGVzY3JpcHRvcigpIHsKLSAgcHJv
dG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIHJldHVybiBFbnVtT3B0aW9uc19kZXNj
cmlwdG9yXzsKLX0KLQotY29uc3QgRW51bU9wdGlvbnMmIEVudW1PcHRpb25zOjpkZWZhdWx0X2lu
c3RhbmNlKCkgewotICBpZiAoZGVmYXVsdF9pbnN0YW5jZV8gPT0gTlVMTCkgcHJvdG9idWZfQWRk
RGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICByZXR1cm4g
KmRlZmF1bHRfaW5zdGFuY2VfOwotfQotCi1FbnVtT3B0aW9ucyogRW51bU9wdGlvbnM6OmRlZmF1
bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotRW51bU9wdGlvbnMqIEVudW1PcHRpb25zOjpOZXcoOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgRW51bU9wdGlvbnMqIG4g
PSBuZXcgRW51bU9wdGlvbnM7Ci0gIGlmIChhcmVuYSAhPSBOVUxMKSB7Ci0gICAgYXJlbmEtPk93
bihuKTsKLSAgfQotICByZXR1cm4gbjsKLX0KLQotdm9pZCBFbnVtT3B0aW9uczo6Q2xlYXIoKSB7
Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUu
cHJvdG9idWYuRW51bU9wdGlvbnMpCi0gIF9leHRlbnNpb25zXy5DbGVhcigpOwotI2lmIGRlZmlu
ZWQoX19jbGFuZ19fKQotI2RlZmluZSBaUl9IRUxQRVJfKGYpIFwKLSAgX1ByYWdtYSgiY2xhbmcg
ZGlhZ25vc3RpYyBwdXNoIikgXAotICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
XCItV2ludmFsaWQtb2Zmc2V0b2ZcIiIpIFwKLSAgX19idWlsdGluX29mZnNldG9mKEVudW1PcHRp
b25zLCBmKSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcG9wIikKLSNlbHNlCi0jZGVm
aW5lIFpSX0hFTFBFUl8oZikgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oXAotICAmcmVpbnRlcnBy
ZXRfY2FzdDxFbnVtT3B0aW9ucyo+KDE2KS0+ZikKLSNlbmRpZgotCi0jZGVmaW5lIFpSXyhmaXJz
dCwgbGFzdCkgZG8ge1wKLSAgOjptZW1zZXQoJmZpcnN0LCAwLFwKLSAgICAgICAgICAgWlJfSEVM
UEVSXyhsYXN0KSAtIFpSX0hFTFBFUl8oZmlyc3QpICsgc2l6ZW9mKGxhc3QpKTtcCi19IHdoaWxl
ICgwKQotCi0gIFpSXyhhbGxvd19hbGlhc18sIGRlcHJlY2F0ZWRfKTsKLQotI3VuZGVmIFpSX0hF
TFBFUl8KLSN1bmRlZiBaUl8KLQotICB1bmludGVycHJldGVkX29wdGlvbl8uQ2xlYXIoKTsKLSAg
OjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9oYXNfYml0c18pKTsKLSAgaWYgKF9pbnRl
cm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91bmtu
b3duX2ZpZWxkcygpLT5DbGVhcigpOwotICB9Ci19Ci0KLWJvb2wgRW51bU9wdGlvbnM6Ok1lcmdl
UGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2Rl
ZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQUkVTU0lPTikgaWYgKCFHT09H
TEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1cmUKLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vf
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zKQotICBmb3IgKDs7KSB7Ci0gICAgOjpz
dGQ6OnBhaXI8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyLCBib29sPiBwID0gaW5wdXQtPlJl
YWRUYWdXaXRoQ3V0b2ZmKDE2MzgzKTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5z
ZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewot
ICAgICAgLy8gb3B0aW9uYWwgYm9vbCBhbGxvd19hbGlhcyA9IDI7Ci0gICAgICBjYXNlIDI6IHsK
LSAgICAgICAgaWYgKHRhZyA9PSAxNikgewotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAg
ICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmYWxsb3dfYWxpYXNfKSkp
OwotICAgICAgICAgIHNldF9oYXNfYWxsb3dfYWxpYXMoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1
dC0+RXhwZWN0VGFnKDI0KSkgZ290byBwYXJzZV9kZXByZWNhdGVkOwotICAgICAgICBicmVhazsK
LSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMyBbZGVmYXVs
dCA9IGZhbHNlXTsKLSAgICAgIGNhc2UgMzogewotICAgICAgICBpZiAodGFnID09IDI0KSB7Ci0g
ICAgICAgICBwYXJzZV9kZXByZWNhdGVkOgotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAg
ICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmZGVwcmVjYXRlZF8pKSk7
Ci0gICAgICAgICAgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQt
PkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV91bmludGVycHJldGVkX29wdGlvbjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYu
VW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLSAgICAgIGNh
c2UgOTk5OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNzk5NCkgewotICAgICAgICAgcGFyc2VfdW5p
bnRlcnByZXRlZF9vcHRpb246Ci0gICAgICAgICAgRE9fKGlucHV0LT5JbmNyZW1lbnRSZWN1cnNp
b25EZXB0aCgpKTsKLSAgICAgICAgIHBhcnNlX2xvb3BfdW5pbnRlcnByZXRlZF9vcHRpb246Ci0g
ICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoCi0gICAgICAgICAgICAgICAg
aW5wdXQsIGFkZF91bmludGVycHJldGVkX29wdGlvbigpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5w
dXQtPkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV9sb29wX3VuaW50ZXJwcmV0ZWRfb3B0aW9u
OwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAg
ICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAg
ICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBF
X0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoKDgwMDB1IDw9IHRhZykpIHsKLSAgICAgICAgICBET18oX2V4dGVuc2lvbnNfLlBhcnNl
RmllbGQodGFnLCBpbnB1dCwgZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0gICAgICAgICAgICAgIGlucHV0LCB0YWcs
IG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9z
dWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucykKLSAgcmV0dXJuIHRydWU7Ci1mYWls
dXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUu
cHJvdG9idWYuRW51bU9wdGlvbnMpCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQot
dm9pZCBFbnVtT3B0aW9uczo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYu
RW51bU9wdGlvbnMpCi0gIC8vIG9wdGlvbmFsIGJvb2wgYWxsb3dfYWxpYXMgPSAyOwotICBpZiAo
aGFzX2FsbG93X2FsaWFzKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sKDIsIHRoaXMtPmFsbG93X2FsaWFzKCksIG91dHB1dCk7
Ci0gIH0KLQotICAvLyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzIFtkZWZhdWx0ID0gZmFs
c2VdOwotICBpZiAoaGFzX2RlcHJlY2F0ZWQoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2woMywgdGhpcy0+ZGVwcmVjYXRlZCgp
LCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVy
cHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMCwgbiA9IHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKTsgaSA8IG47
IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpXcml0ZU1lc3NhZ2VNYXliZVRvQXJyYXkoCi0gICAgICA5OTksIHRoaXMtPnVuaW50ZXJwcmV0
ZWRfb3B0aW9uKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gRXh0ZW5zaW9uIHJhbmdlIFsxMDAw
LCA1MzY4NzA5MTIpCi0gIF9leHRlbnNpb25zXy5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0g
ICAgICAxMDAwLCA1MzY4NzA5MTIsIG91dHB1dCk7Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0
YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkcygKLSAgICAgICAgdW5rbm93
bl9maWVsZHMoKSwgb3V0cHV0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
c2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMpCi19Ci0KLTo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDgqIEVudW1PcHRpb25zOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNU
b0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucykKLSAgLy8gb3B0aW9uYWwgYm9vbCBhbGxvd19hbGlh
cyA9IDI7Ci0gIGlmIChoYXNfYWxsb3dfYWxpYXMoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2xUb0FycmF5KDIs
IHRoaXMtPmFsbG93X2FsaWFzKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBib29s
IGRlcHJlY2F0ZWQgPSAzIFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2RlcHJlY2F0ZWQo
KSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpXcml0ZUJvb2xUb0FycmF5KDMsIHRoaXMtPmRlcHJlY2F0ZWQoKSwgdGFyZ2V0KTsK
LSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlv
biB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAs
IG4gPSB0aGlzLT51bmludGVycHJldGVkX29wdGlvbl9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAg
ICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAotICAgICAgICA5OTksIHRoaXMt
PnVuaW50ZXJwcmV0ZWRfb3B0aW9uKGkpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gRXh0ZW5zaW9u
IHJhbmdlIFsxMDAwLCA1MzY4NzA5MTIpCi0gIHRhcmdldCA9IF9leHRlbnNpb25zXy5TZXJpYWxp
emVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgICAgMTAwMCwgNTM2ODcwOTEyLCB0YXJnZXQp
OwotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewot
ICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNl
cmlhbGl6ZVVua25vd25GaWVsZHNUb0FycmF5KAotICAgICAgICB1bmtub3duX2ZpZWxkcygpLCB0
YXJnZXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9f
YXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucykKLSAgcmV0dXJuIHRhcmdldDsK
LX0KLQotaW50IEVudW1PcHRpb25zOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuRW51
bU9wdGlvbnMpCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICBpZiAoX2hhc19iaXRzX1swIC8g
MzJdICYgM3UpIHsKLSAgICAvLyBvcHRpb25hbCBib29sIGFsbG93X2FsaWFzID0gMjsKLSAgICBp
ZiAoaGFzX2FsbG93X2FsaWFzKCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSArIDE7Ci0gICAg
fQotCi0gICAgLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMyBbZGVmYXVsdCA9IGZhbHNl
XTsKLSAgICBpZiAoaGFzX2RlcHJlY2F0ZWQoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsg
MTsKLSAgICB9Ci0KLSAgfQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJw
cmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0gIHRvdGFsX3NpemUgKz0g
MiAqIHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKTsKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCB0aGlzLT51bmludGVycHJldGVkX29wdGlvbl9zaXplKCk7IGkrKykgewotICAgIHRvdGFs
X3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgdGhpcy0+dW5pbnRlcnByZXRlZF9v
cHRpb24oaSkpOwotICB9Ci0KLSAgdG90YWxfc2l6ZSArPSBfZXh0ZW5zaW9uc18uQnl0ZVNpemUo
KTsKLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsK
LSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0OjpDb21wdXRlVW5rbm93bkZpZWxkc1NpemUoCi0gICAgICAgIHVua25vd25fZmll
bGRzKCkpOwotICB9Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0g
IF9jYWNoZWRfc2l6ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dS
SVRFU19FTkQoKTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgRW51bU9wdGlvbnM6
Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucykKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZm
cm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgRW51bU9wdGlv
bnMqIHNvdXJjZSA9IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1p
Y0Nhc3RUb0dlbmVyYXRlZDxjb25zdCBFbnVtT3B0aW9ucz4oCi0gICAgICAgICAgJmZyb20pOwot
ICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdl
bmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9u
cykKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJn
ZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5FbnVt
T3B0aW9ucykKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBFbnVtT3B0
aW9uczo6TWVyZ2VGcm9tKGNvbnN0IEVudW1PcHRpb25zJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJv
dG9idWYuRW51bU9wdGlvbnMpCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0
aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5N
ZXJnZUZyb20oZnJvbS51bmludGVycHJldGVkX29wdGlvbl8pOwotICBpZiAoZnJvbS5faGFzX2Jp
dHNfWzAgLyAzMl0gJiAoMHhmZnUgPDwgKDAgJSAzMikpKSB7Ci0gICAgaWYgKGZyb20uaGFzX2Fs
bG93X2FsaWFzKCkpIHsKLSAgICAgIHNldF9hbGxvd19hbGlhcyhmcm9tLmFsbG93X2FsaWFzKCkp
OwotICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfZGVwcmVjYXRlZCgpKSB7Ci0gICAgICBzZXRfZGVw
cmVjYXRlZChmcm9tLmRlcHJlY2F0ZWQoKSk7Ci0gICAgfQotICB9Ci0gIF9leHRlbnNpb25zXy5N
ZXJnZUZyb20oZnJvbS5fZXh0ZW5zaW9uc18pOwotICBpZiAoZnJvbS5faW50ZXJuYWxfbWV0YWRh
dGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMo
KS0+TWVyZ2VGcm9tKGZyb20udW5rbm93bl9maWVsZHMoKSk7Ci0gIH0KLX0KLQotdm9pZCBFbnVt
T3B0aW9uczo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9t
KSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0
YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJl
dHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIEVudW1PcHRp
b25zOjpDb3B5RnJvbShjb25zdCBFbnVtT3B0aW9ucyYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuRW51bU9wdGlvbnMpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7
Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBFbnVtT3B0aW9uczo6SXNJbml0aWFsaXpl
ZCgpIGNvbnN0IHsKLQotICBpZiAoITo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFsbEFy
ZUluaXRpYWxpemVkKHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkpKSByZXR1cm4gZmFsc2U7
Ci0KLSAgaWYgKCFfZXh0ZW5zaW9uc18uSXNJbml0aWFsaXplZCgpKSByZXR1cm4gZmFsc2U7ICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBFbnVtT3B0aW9uczo6U3dhcChFbnVtT3B0aW9ucyogb3Ro
ZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVy
KTsKLX0KLXZvaWQgRW51bU9wdGlvbnM6OkludGVybmFsU3dhcChFbnVtT3B0aW9ucyogb3RoZXIp
IHsKLSAgc3RkOjpzd2FwKGFsbG93X2FsaWFzXywgb3RoZXItPmFsbG93X2FsaWFzXyk7Ci0gIHN0
ZDo6c3dhcChkZXByZWNhdGVkXywgb3RoZXItPmRlcHJlY2F0ZWRfKTsKLSAgdW5pbnRlcnByZXRl
ZF9vcHRpb25fLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPnVuaW50ZXJwcmV0ZWRfb3B0aW9uXyk7
Ci0gIHN0ZDo6c3dhcChfaGFzX2JpdHNfWzBdLCBvdGhlci0+X2hhc19iaXRzX1swXSk7Ci0gIF9p
bnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBz
dGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotICBfZXh0ZW5z
aW9uc18uU3dhcCgmb3RoZXItPl9leHRlbnNpb25zXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWV0YWRhdGEgRW51bU9wdGlvbnM6OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1
Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0
YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IEVudW1PcHRpb25zX2Rlc2NyaXB0
b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gRW51bU9wdGlvbnNfcmVmbGVjdGlvbl87Ci0g
IHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVS
UwotLy8gRW51bU9wdGlvbnMKLQotLy8gb3B0aW9uYWwgYm9vbCBhbGxvd19hbGlhcyA9IDI7Ci1i
b29sIEVudW1PcHRpb25zOjpoYXNfYWxsb3dfYWxpYXMoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hh
c19iaXRzX1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQotdm9pZCBFbnVtT3B0aW9uczo6c2V0
X2hhc19hbGxvd19hbGlhcygpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0K
LXZvaWQgRW51bU9wdGlvbnM6OmNsZWFyX2hhc19hbGxvd19hbGlhcygpIHsKLSAgX2hhc19iaXRz
X1swXSAmPSB+MHgwMDAwMDAwMXU7Ci19Ci12b2lkIEVudW1PcHRpb25zOjpjbGVhcl9hbGxvd19h
bGlhcygpIHsKLSAgYWxsb3dfYWxpYXNfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19hbGxvd19hbGlh
cygpOwotfQotIGJvb2wgRW51bU9wdGlvbnM6OmFsbG93X2FsaWFzKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0
aW9ucy5hbGxvd19hbGlhcykKLSAgcmV0dXJuIGFsbG93X2FsaWFzXzsKLX0KLSB2b2lkIEVudW1P
cHRpb25zOjpzZXRfYWxsb3dfYWxpYXMoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFzX2FsbG93X2Fs
aWFzKCk7Ci0gIGFsbG93X2FsaWFzXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy5hbGxvd19hbGlhcykK
LX0KLQotLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMyBbZGVmYXVsdCA9IGZhbHNlXTsK
LWJvb2wgRW51bU9wdGlvbnM6Omhhc19kZXByZWNhdGVkKCkgY29uc3QgewotICByZXR1cm4gKF9o
YXNfYml0c19bMF0gJiAweDAwMDAwMDAydSkgIT0gMDsKLX0KLXZvaWQgRW51bU9wdGlvbnM6OnNl
dF9oYXNfZGVwcmVjYXRlZCgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0K
LXZvaWQgRW51bU9wdGlvbnM6OmNsZWFyX2hhc19kZXByZWNhdGVkKCkgewotICBfaGFzX2JpdHNf
WzBdICY9IH4weDAwMDAwMDAydTsKLX0KLXZvaWQgRW51bU9wdGlvbnM6OmNsZWFyX2RlcHJlY2F0
ZWQoKSB7Ci0gIGRlcHJlY2F0ZWRfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19kZXByZWNhdGVkKCk7
Ci19Ci0gYm9vbCBFbnVtT3B0aW9uczo6ZGVwcmVjYXRlZCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMu
ZGVwcmVjYXRlZCkKLSAgcmV0dXJuIGRlcHJlY2F0ZWRfOwotfQotIHZvaWQgRW51bU9wdGlvbnM6
OnNldF9kZXByZWNhdGVkKGJvb2wgdmFsdWUpIHsKLSAgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0g
IGRlcHJlY2F0ZWRfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmRlcHJlY2F0ZWQpCi19Ci0KLS8vIHJl
cGVhdGVkIC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVk
X29wdGlvbiA9IDk5OTsKLWludCBFbnVtT3B0aW9uczo6dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6
ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5zaXplKCk7Ci19Ci12
b2lkIEVudW1PcHRpb25zOjpjbGVhcl91bmludGVycHJldGVkX29wdGlvbigpIHsKLSAgdW5pbnRl
cnByZXRlZF9vcHRpb25fLkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVu
aW50ZXJwcmV0ZWRPcHRpb24mIEVudW1PcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbihpbnQg
aW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpn
b29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVy
biB1bmludGVycHJldGVkX29wdGlvbl8uR2V0KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1
Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogRW51bU9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnByZXRl
ZF9vcHRpb24oaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy51bmludGVycHJldGVkX29wdGlv
bikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5NdXRhYmxlKGluZGV4KTsKLX0KLTo6
Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogRW51bU9wdGlvbnM6OmFkZF91
bmludGVycHJldGVkX29wdGlvbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24p
Ci0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uQWRkKCk7Ci19Ci06Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRl
ZE9wdGlvbiA+KgotRW51bU9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnByZXRlZF9vcHRpb24oKSB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xl
LnByb3RvYnVmLkVudW1PcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1cm4gJnVu
aW50ZXJwcmV0ZWRfb3B0aW9uXzsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0
ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uID4mCi1F
bnVtT3B0aW9uczo6dW5pbnRlcnByZXRlZF9vcHRpb24oKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucy51
bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXzsKLX0K
LQotI2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotCi0jaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0
IGludCBFbnVtVmFsdWVPcHRpb25zOjprRGVwcmVjYXRlZEZpZWxkTnVtYmVyOwotY29uc3QgaW50
IEVudW1WYWx1ZU9wdGlvbnM6OmtVbmludGVycHJldGVkT3B0aW9uRmllbGROdW1iZXI7Ci0jZW5k
aWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUVudW1WYWx1
ZU9wdGlvbnM6OkVudW1WYWx1ZU9wdGlvbnMoKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkVu
dW1WYWx1ZU9wdGlvbnMpCi19Ci0KLXZvaWQgRW51bVZhbHVlT3B0aW9uczo6SW5pdEFzRGVmYXVs
dEluc3RhbmNlKCkgewotfQotCi1FbnVtVmFsdWVPcHRpb25zOjpFbnVtVmFsdWVPcHRpb25zKGNv
bnN0IEVudW1WYWx1ZU9wdGlvbnMmIGZyb20pCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsK
LSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9j
b25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucykKLX0KLQotdm9pZCBF
bnVtVmFsdWVPcHRpb25zOjpTaGFyZWRDdG9yKCkgewotICBfY2FjaGVkX3NpemVfID0gMDsKLSAg
ZGVwcmVjYXRlZF8gPSBmYWxzZTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9o
YXNfYml0c18pKTsKLX0KLQotRW51bVZhbHVlT3B0aW9uczo6fkVudW1WYWx1ZU9wdGlvbnMoKSB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1
Zi5FbnVtVmFsdWVPcHRpb25zKQotICBTaGFyZWREdG9yKCk7Ci19Ci0KLXZvaWQgRW51bVZhbHVl
T3B0aW9uczo6U2hhcmVkRHRvcigpIHsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8p
IHsKLSAgfQotfQotCi12b2lkIEVudW1WYWx1ZU9wdGlvbnM6OlNldENhY2hlZFNpemUoaW50IHNp
emUpIGNvbnN0IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAg
X2NhY2hlZF9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VO
RCgpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBFbnVtVmFsdWVP
cHRpb25zOjpkZXNjcmlwdG9yKCkgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2Uo
KTsKLSAgcmV0dXJuIEVudW1WYWx1ZU9wdGlvbnNfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IEVu
dW1WYWx1ZU9wdGlvbnMmIEVudW1WYWx1ZU9wdGlvbnM6OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0g
IGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8y
ZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0
YW5jZV87Ci19Ci0KLUVudW1WYWx1ZU9wdGlvbnMqIEVudW1WYWx1ZU9wdGlvbnM6OmRlZmF1bHRf
aW5zdGFuY2VfID0gTlVMTDsKLQotRW51bVZhbHVlT3B0aW9ucyogRW51bVZhbHVlT3B0aW9uczo6
TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIEVudW1WYWx1
ZU9wdGlvbnMqIG4gPSBuZXcgRW51bVZhbHVlT3B0aW9uczsKLSAgaWYgKGFyZW5hICE9IE5VTEwp
IHsKLSAgICBhcmVuYS0+T3duKG4pOwotICB9Ci0gIHJldHVybiBuOwotfQotCi12b2lkIEVudW1W
YWx1ZU9wdGlvbnM6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3Nh
Z2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMpCi0gIF9leHRl
bnNpb25zXy5DbGVhcigpOwotICBkZXByZWNhdGVkXyA9IGZhbHNlOwotICB1bmludGVycHJldGVk
X29wdGlvbl8uQ2xlYXIoKTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9oYXNf
Yml0c18pKTsKLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygp
KSB7Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5DbGVhcigpOwotICB9Ci19Ci0KLWJv
b2wgRW51bVZhbHVlT3B0aW9uczo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5l
IERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUoRVhQUkVTU0lPTikpIGdv
dG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVl
T3B0aW9ucykKLSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxNjM4Myk7Ci0g
ICAgdGFnID0gcC5maXJzdDsKLSAgICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFs
OwotICAgIHN3aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykpIHsKLSAgICAgIC8vIG9wdGlvbmFsIGJvb2wgZGVw
cmVjYXRlZCA9IDEgW2RlZmF1bHQgPSBmYWxzZV07Ci0gICAgICBjYXNlIDE6IHsKLSAgICAgICAg
aWYgKHRhZyA9PSA4KSB7Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICBi
b29sLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9C
T09MPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZkZXByZWNhdGVkXykpKTsKLSAgICAgICAg
ICBzZXRfaGFzX2RlcHJlY2F0ZWQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3Rv
IGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFn
KDc5OTQpKSBnb3RvIHBhcnNlX3VuaW50ZXJwcmV0ZWRfb3B0aW9uOwotICAgICAgICBicmVhazsK
LSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJl
dGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotICAgICAgY2FzZSA5OTk6IHsK
LSAgICAgICAgaWYgKHRhZyA9PSA3OTk0KSB7Ci0gICAgICAgICBwYXJzZV91bmludGVycHJldGVk
X29wdGlvbjoKLSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkp
OwotICAgICAgICAgcGFyc2VfbG9vcF91bmludGVycHJldGVkX29wdGlvbjoKLSAgICAgICAgICBE
T18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNz
YWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0aCgKLSAgICAgICAgICAgICAgICBpbnB1dCwgYWRk
X3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBn
b3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0
VGFnKDc5OTQpKSBnb3RvIHBhcnNlX2xvb3BfdW5pbnRlcnByZXRlZF9vcHRpb247Ci0gICAgICAg
IGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBpZiAoaW5w
dXQtPkV4cGVjdEF0RW5kKCkpIGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0KLSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAgICBpZiAo
dGFnID09IDAgfHwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQ
KSB7Ci0gICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoODAw
MHUgPD0gdGFnKSkgewotICAgICAgICAgIERPXyhfZXh0ZW5zaW9uc18uUGFyc2VGaWVsZCh0YWcs
IGlucHV0LCBkZWZhdWx0X2luc3RhbmNlXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpKSk7Ci0gICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXQ6OlNraXBGaWVsZCgKLSAgICAgICAgICAgICAgaW5wdXQsIHRhZywgbXV0YWJsZV91
bmtub3duX2ZpZWxkcygpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQot
c3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29v
Z2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMpCi0gIHJldHVybiB0cnVlOwotZmFpbHVyZToK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX2ZhaWx1cmU6Z29vZ2xlLnByb3Rv
YnVmLkVudW1WYWx1ZU9wdGlvbnMpCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQot
dm9pZCBFbnVtVmFsdWVPcHRpb25zOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90
b2J1Zi5FbnVtVmFsdWVPcHRpb25zKQotICAvLyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAx
IFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2RlcHJlY2F0ZWQoKSkgewotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2woMSwgdGhp
cy0+ZGVwcmVjYXRlZCgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5w
cm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5Owot
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9u
X3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VNYXliZVRvQXJyYXkoCi0gICAgICA5OTksIHRo
aXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gRXh0ZW5z
aW9uIHJhbmdlIFsxMDAwLCA1MzY4NzA5MTIpCi0gIF9leHRlbnNpb25zXy5TZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXMoCi0gICAgICAxMDAwLCA1MzY4NzA5MTIsIG91dHB1dCk7Ci0KLSAgaWYgKF9p
bnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkcygK
LSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwgb3V0cHV0KTsKLSAgfQotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0
aW9ucykKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogRW51bVZhbHVlT3B0aW9uczo6
U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNl
cmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucykK
LSAgLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMSBbZGVmYXVsdCA9IGZhbHNlXTsKLSAg
aWYgKGhhc19kZXByZWNhdGVkKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sVG9BcnJheSgxLCB0aGlzLT5kZXBy
ZWNhdGVkKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVm
LlVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0gIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgp
OyBpIDwgbjsgaSsrKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgK
LSAgICAgICAgOTk5LCB0aGlzLT51bmludGVycHJldGVkX29wdGlvbihpKSwgdGFyZ2V0KTsKLSAg
fQotCi0gIC8vIEV4dGVuc2lvbiByYW5nZSBbMTAwMCwgNTM2ODcwOTEyKQotICB0YXJnZXQgPSBf
ZXh0ZW5zaW9uc18uU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgKLSAgICAgIDEwMDAs
IDUzNjg3MDkxMiwgdGFyZ2V0KTsKLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vu
a25vd25fZmllbGRzKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzVG9BcnJheSgKLSAgICAgICAg
dW5rbm93bl9maWVsZHMoKSwgdGFyZ2V0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0
aW9ucykKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IEVudW1WYWx1ZU9wdGlvbnM6OkJ5dGVT
aXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9z
aXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zKQotICBpbnQgdG90YWxf
c2l6ZSA9IDA7Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMSBbZGVmYXVsdCA9
IGZhbHNlXTsKLSAgaWYgKGhhc19kZXByZWNhdGVkKCkpIHsKLSAgICB0b3RhbF9zaXplICs9IDEg
KyAxOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk
T3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotICB0b3RhbF9zaXplICs9IDIgKiB0
aGlzLT51bmludGVycHJldGVkX29wdGlvbl9zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwg
dGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpOyBpKyspIHsKLSAgICB0b3RhbF9zaXpl
ICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAgIHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9u
KGkpKTsKLSAgfQotCi0gIHRvdGFsX3NpemUgKz0gX2V4dGVuc2lvbnNfLkJ5dGVTaXplKCk7Ci0K
LSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAg
dG90YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdDo6Q29tcHV0ZVVua25vd25GaWVsZHNTaXplKAotICAgICAgICB1bmtub3duX2ZpZWxkcygp
KTsKLSAgfQotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2Fj
aGVkX3NpemVfID0gdG90YWxfc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNf
RU5EKCk7Ci0gIHJldHVybiB0b3RhbF9zaXplOwotfQotCi12b2lkIEVudW1WYWx1ZU9wdGlvbnM6
Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFM
U0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25zdCBFbnVt
VmFsdWVPcHRpb25zKiBzb3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgRW51bVZhbHVlT3B0aW9ucz4oCi0gICAg
ICAgICAgJmZyb20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90
b2J1Zi5FbnVtVmFsdWVPcHRpb25zKQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2UgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X3N1Y2Nlc3M6
Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMpCi0gICAgTWVyZ2VGcm9tKCpzb3VyY2Up
OwotICB9Ci19Ci0KLXZvaWQgRW51bVZhbHVlT3B0aW9uczo6TWVyZ2VGcm9tKGNvbnN0IEVudW1W
YWx1ZU9wdGlvbnMmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19z
cGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25z
KQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZh
aWwoX19MSU5FX18pOwotICB1bmludGVycHJldGVkX29wdGlvbl8uTWVyZ2VGcm9tKGZyb20udW5p
bnRlcnByZXRlZF9vcHRpb25fKTsKLSAgaWYgKGZyb20uX2hhc19iaXRzX1swIC8gMzJdICYgKDB4
ZmZ1IDw8ICgwICUgMzIpKSkgewotICAgIGlmIChmcm9tLmhhc19kZXByZWNhdGVkKCkpIHsKLSAg
ICAgIHNldF9kZXByZWNhdGVkKGZyb20uZGVwcmVjYXRlZCgpKTsKLSAgICB9Ci0gIH0KLSAgX2V4
dGVuc2lvbnNfLk1lcmdlRnJvbShmcm9tLl9leHRlbnNpb25zXyk7Ci0gIGlmIChmcm9tLl9pbnRl
cm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91bmtu
b3duX2ZpZWxkcygpLT5NZXJnZUZyb20oZnJvbS51bmtub3duX2ZpZWxkcygpKTsKLSAgfQotfQot
Ci12b2lkIEVudW1WYWx1ZU9wdGlvbnM6OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxp
emVkX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucykKLSAg
aWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20p
OwotfQotCi12b2lkIEVudW1WYWx1ZU9wdGlvbnM6OkNvcHlGcm9tKGNvbnN0IEVudW1WYWx1ZU9w
dGlvbnMmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZp
Y19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMpCi0gIGlm
ICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsK
LX0KLQotYm9vbCBFbnVtVmFsdWVPcHRpb25zOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0g
IGlmICghOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QWxsQXJlSW5pdGlhbGl6ZWQodGhp
cy0+dW5pbnRlcnByZXRlZF9vcHRpb24oKSkpIHJldHVybiBmYWxzZTsKLQotICBpZiAoIV9leHRl
bnNpb25zXy5Jc0luaXRpYWxpemVkKCkpIHJldHVybiBmYWxzZTsgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEVudW1WYWx1ZU9wdGlvbnM6OlN3YXAoRW51bVZhbHVlT3B0aW9ucyogb3RoZXIpIHsK
LSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0K
LXZvaWQgRW51bVZhbHVlT3B0aW9uczo6SW50ZXJuYWxTd2FwKEVudW1WYWx1ZU9wdGlvbnMqIG90
aGVyKSB7Ci0gIHN0ZDo6c3dhcChkZXByZWNhdGVkXywgb3RoZXItPmRlcHJlY2F0ZWRfKTsKLSAg
dW5pbnRlcnByZXRlZF9vcHRpb25fLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPnVuaW50ZXJwcmV0
ZWRfb3B0aW9uXyk7Ci0gIHN0ZDo6c3dhcChfaGFzX2JpdHNfWzBdLCBvdGhlci0+X2hhc19iaXRz
X1swXSk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRh
ZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8p
OwotICBfZXh0ZW5zaW9uc18uU3dhcCgmb3RoZXItPl9leHRlbnNpb25zXyk7Ci19Ci0KLTo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgRW51bVZhbHVlT3B0aW9uczo6R2V0TWV0YWRhdGEoKSBj
b25zdCB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1ldGFkYXRhIG1ldGFkYXRhOwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gRW51
bVZhbHVlT3B0aW9uc19kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IEVudW1W
YWx1ZU9wdGlvbnNfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBS
T1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gRW51bVZhbHVlT3B0aW9ucwotCi0vLyBv
cHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAxIFtkZWZhdWx0ID0gZmFsc2VdOwotYm9vbCBFbnVt
VmFsdWVPcHRpb25zOjpoYXNfZGVwcmVjYXRlZCgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2Jp
dHNfWzBdICYgMHgwMDAwMDAwMXUpICE9IDA7Ci19Ci12b2lkIEVudW1WYWx1ZU9wdGlvbnM6OnNl
dF9oYXNfZGVwcmVjYXRlZCgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0K
LXZvaWQgRW51bVZhbHVlT3B0aW9uczo6Y2xlYXJfaGFzX2RlcHJlY2F0ZWQoKSB7Ci0gIF9oYXNf
Yml0c19bMF0gJj0gfjB4MDAwMDAwMDF1OwotfQotdm9pZCBFbnVtVmFsdWVPcHRpb25zOjpjbGVh
cl9kZXByZWNhdGVkKCkgewotICBkZXByZWNhdGVkXyA9IGZhbHNlOwotICBjbGVhcl9oYXNfZGVw
cmVjYXRlZCgpOwotfQotIGJvb2wgRW51bVZhbHVlT3B0aW9uczo6ZGVwcmVjYXRlZCgpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9i
dWYuRW51bVZhbHVlT3B0aW9ucy5kZXByZWNhdGVkKQotICByZXR1cm4gZGVwcmVjYXRlZF87Ci19
Ci0gdm9pZCBFbnVtVmFsdWVPcHRpb25zOjpzZXRfZGVwcmVjYXRlZChib29sIHZhbHVlKSB7Ci0g
IHNldF9oYXNfZGVwcmVjYXRlZCgpOwotICBkZXByZWNhdGVkXyA9IHZhbHVlOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVP
cHRpb25zLmRlcHJlY2F0ZWQpCi19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuVW5p
bnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLWludCBFbnVtVmFs
dWVPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbl9zaXplKCkgY29uc3QgewotICByZXR1cm4g
dW5pbnRlcnByZXRlZF9vcHRpb25fLnNpemUoKTsKLX0KLXZvaWQgRW51bVZhbHVlT3B0aW9uczo6
Y2xlYXJfdW5pbnRlcnByZXRlZF9vcHRpb24oKSB7Ci0gIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5D
bGVhcigpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9u
JiBFbnVtVmFsdWVPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbihpbnQgaW5kZXgpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9i
dWYuRW51bVZhbHVlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50
ZXJwcmV0ZWRfb3B0aW9uXy5HZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpVbmlu
dGVycHJldGVkT3B0aW9uKiBFbnVtVmFsdWVPcHRpb25zOjptdXRhYmxlX3VuaW50ZXJwcmV0ZWRf
b3B0aW9uKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
bXV0YWJsZTpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy51bmludGVycHJldGVkX29w
dGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5NdXRhYmxlKGluZGV4KTsKLX0K
LTo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogRW51bVZhbHVlT3B0aW9u
czo6YWRkX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnVuaW50ZXJw
cmV0ZWRfb3B0aW9uKQotICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLkFkZCgpOwotfQot
Ojpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6
OlVuaW50ZXJwcmV0ZWRPcHRpb24gPioKLUVudW1WYWx1ZU9wdGlvbnM6Om11dGFibGVfdW5pbnRl
cnByZXRlZF9vcHRpb24oKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9t
dXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMudW5pbnRlcnByZXRl
ZF9vcHRpb24pCi0gIHJldHVybiAmdW5pbnRlcnByZXRlZF9vcHRpb25fOwotfQotY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVu
aW50ZXJwcmV0ZWRPcHRpb24gPiYKLUVudW1WYWx1ZU9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0
aW9uKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpn
b29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAg
cmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXzsKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JVRl9J
TkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWYgIWRlZmluZWQoX01T
Q19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBTZXJ2aWNlT3B0aW9uczo6a0Rl
cHJlY2F0ZWRGaWVsZE51bWJlcjsKLWNvbnN0IGludCBTZXJ2aWNlT3B0aW9uczo6a1VuaW50ZXJw
cmV0ZWRPcHRpb25GaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8
IF9NU0NfVkVSID49IDE5MDAKLQotU2VydmljZU9wdGlvbnM6OlNlcnZpY2VPcHRpb25zKCkKLSAg
OiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxM
KSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0
cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucykKLX0KLQotdm9pZCBTZXJ2aWNl
T3B0aW9uczo6SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotfQotCi1TZXJ2aWNlT3B0aW9uczo6
U2VydmljZU9wdGlvbnMoY29uc3QgU2VydmljZU9wdGlvbnMmIGZyb20pCi0gIDogOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0g
IFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMp
Ci19Ci0KLXZvaWQgU2VydmljZU9wdGlvbnM6OlNoYXJlZEN0b3IoKSB7Ci0gIF9jYWNoZWRfc2l6
ZV8gPSAwOwotICBkZXByZWNhdGVkXyA9IGZhbHNlOwotICA6Om1lbXNldChfaGFzX2JpdHNfLCAw
LCBzaXplb2YoX2hhc19iaXRzXykpOwotfQotCi1TZXJ2aWNlT3B0aW9uczo6flNlcnZpY2VPcHRp
b25zKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUu
cHJvdG9idWYuU2VydmljZU9wdGlvbnMpCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBTZXJ2
aWNlT3B0aW9uczo6U2hhcmVkRHRvcigpIHsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5j
ZV8pIHsKLSAgfQotfQotCi12b2lkIFNlcnZpY2VPcHRpb25zOjpTZXRDYWNoZWRTaXplKGludCBz
aXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0g
IF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19F
TkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogU2VydmljZU9w
dGlvbnM6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgp
OwotICByZXR1cm4gU2VydmljZU9wdGlvbnNfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IFNlcnZp
Y2VPcHRpb25zJiBTZXJ2aWNlT3B0aW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRl
ZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9i
dWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsK
LX0KLQotU2VydmljZU9wdGlvbnMqIFNlcnZpY2VPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlXyA9
IE5VTEw7Ci0KLVNlcnZpY2VPcHRpb25zKiBTZXJ2aWNlT3B0aW9uczo6TmV3KDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIFNlcnZpY2VPcHRpb25zKiBuID0gbmV3
IFNlcnZpY2VPcHRpb25zOwotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24o
bik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgU2VydmljZU9wdGlvbnM6OkNsZWFyKCkg
ewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xl
LnByb3RvYnVmLlNlcnZpY2VPcHRpb25zKQotICBfZXh0ZW5zaW9uc18uQ2xlYXIoKTsKLSAgZGVw
cmVjYXRlZF8gPSBmYWxzZTsKLSAgdW5pbnRlcnByZXRlZF9vcHRpb25fLkNsZWFyKCk7Ci0gIDo6
bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci0gIGlmIChfaW50ZXJu
YWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93
bl9maWVsZHMoKS0+Q2xlYXIoKTsKLSAgfQotfQotCi1ib29sIFNlcnZpY2VPcHRpb25zOjpNZXJn
ZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29k
ZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09P
R0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNl
X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucykKLSAgZm9yICg7OykgewotICAg
IDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0
LT5SZWFkVGFnV2l0aEN1dG9mZigxNjM4Myk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAgICBpZiAo
IXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykp
IHsKLSAgICAgIC8vIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDMzIFtkZWZhdWx0ID0gZmFs
c2VdOwotICAgICAgY2FzZSAzMzogewotICAgICAgICBpZiAodGFnID09IDI2NCkgewotICAgICAg
ICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJl
YWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAg
IGlucHV0LCAmZGVwcmVjYXRlZF8pKSk7Ci0gICAgICAgICAgc2V0X2hhc19kZXByZWNhdGVkKCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV91bmlu
dGVycHJldGVkX29wdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJl
cGVhdGVkIC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVk
X29wdGlvbiA9IDk5OTsKLSAgICAgIGNhc2UgOTk5OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNzk5
NCkgewotICAgICAgICAgcGFyc2VfdW5pbnRlcnByZXRlZF9vcHRpb246Ci0gICAgICAgICAgRE9f
KGlucHV0LT5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBhcnNlX2xvb3Bf
dW5pbnRlcnByZXRlZF9vcHRpb246Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9u
RGVwdGgoCi0gICAgICAgICAgICAgICAgaW5wdXQsIGFkZF91bmludGVycHJldGVkX29wdGlvbigp
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3OTk0KSkgZ290byBwYXJzZV9s
b29wX3VuaW50ZXJwcmV0ZWRfb3B0aW9uOwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50
UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3Rv
IHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0g
ICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2ly
ZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3Vj
Y2VzczsKLSAgICAgICAgfQotICAgICAgICBpZiAoKDgwMDB1IDw9IHRhZykpIHsKLSAgICAgICAg
ICBET18oX2V4dGVuc2lvbnNfLlBhcnNlRmllbGQodGFnLCBpbnB1dCwgZGVmYXVsdF9pbnN0YW5j
ZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGVfdW5rbm93
bl9maWVsZHMoKSkpOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIERP
Xyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmllbGQoCi0g
ICAgICAgICAgICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0
aW9ucykKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMpCi0gIHJl
dHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9pZCBTZXJ2aWNlT3B0aW9uczo6U2VyaWFs
aXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0
cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMpCi0gIC8vIG9w
dGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDMzIFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFz
X2RlcHJlY2F0ZWQoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZUJvb2woMzMsIHRoaXMtPmRlcHJlY2F0ZWQoKSwgb3V0cHV0KTsKLSAg
fQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1
bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4g
PSB0aGlzLT51bmludGVycHJldGVkX29wdGlvbl9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVNZXNzYWdl
TWF5YmVUb0FycmF5KAotICAgICAgOTk5LCB0aGlzLT51bmludGVycHJldGVkX29wdGlvbihpKSwg
b3V0cHV0KTsKLSAgfQotCi0gIC8vIEV4dGVuc2lvbiByYW5nZSBbMTAwMCwgNTM2ODcwOTEyKQot
ICBfZXh0ZW5zaW9uc18uU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgMTAwMCwgNTM2
ODcwOTEyLCBvdXRwdXQpOwotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93
bl9maWVsZHMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHMoCi0gICAgICAgIHVua25vd25fZmllbGRzKCksIG91
dHB1dCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6
Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zKQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQ4KiBTZXJ2aWNlT3B0aW9uczo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29nbGUucHJv
dG9idWYuU2VydmljZU9wdGlvbnMpCi0gIC8vIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDMz
IFtkZWZhdWx0ID0gZmFsc2VdOwotICBpZiAoaGFzX2RlcHJlY2F0ZWQoKSkgewotICAgIHRhcmdl
dCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJv
b2xUb0FycmF5KDMzLCB0aGlzLT5kZXByZWNhdGVkKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBy
ZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRl
ZF9vcHRpb24gPSA5OTk7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+dW5p
bnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgdGFyZ2V0ID0gOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVN
ZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgOTk5LCB0aGlzLT51bmludGVycHJldGVk
X29wdGlvbihpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIEV4dGVuc2lvbiByYW5nZSBbMTAwMCwg
NTM2ODcwOTEyKQotICB0YXJnZXQgPSBfZXh0ZW5zaW9uc18uU2VyaWFsaXplV2l0aENhY2hlZFNp
emVzVG9BcnJheSgKLSAgICAgIDEwMDAsIDUzNjg3MDkxMiwgdGFyZ2V0KTsKLQotICBpZiAoX2lu
dGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0YXJnZXQgPSA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3du
RmllbGRzVG9BcnJheSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwgdGFyZ2V0KTsKLSAgfQot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29n
bGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMpCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBT
ZXJ2aWNlT3B0aW9uczo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRp
b25zKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNh
dGVkID0gMzMgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGlmIChoYXNfZGVwcmVjYXRlZCgpKSB7Ci0g
ICAgdG90YWxfc2l6ZSArPSAyICsgMTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJv
dG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLSAg
dG90YWxfc2l6ZSArPSAyICogdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpOwotICBm
b3IgKGludCBpID0gMDsgaSA8IHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKTsgaSsr
KSB7Ci0gICAgdG90YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAgICAgICB0aGlzLT51
bmludGVycHJldGVkX29wdGlvbihpKSk7Ci0gIH0KLQotICB0b3RhbF9zaXplICs9IF9leHRlbnNp
b25zXy5CeXRlU2l6ZSgpOwotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93
bl9maWVsZHMoKSkgewotICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OkNvbXB1dGVVbmtub3duRmllbGRzU2l6ZSgKLSAgICAg
ICAgdW5rbm93bl9maWVsZHMoKSk7Ci0gIH0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklU
RVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZF
X0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9p
ZCBTZXJ2aWNlT3B0aW9uczo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21l
cmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zKQotICBpZiAoR09P
R0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18p
OwotICBjb25zdCBTZXJ2aWNlT3B0aW9ucyogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IFNlcnZpY2VPcHRp
b25zPigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6
Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zKQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2Ugewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0
X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zKQotICAgIE1lcmdlRnJvbSgq
c291cmNlKTsKLSAgfQotfQotCi12b2lkIFNlcnZpY2VPcHRpb25zOjpNZXJnZUZyb20oY29uc3Qg
U2VydmljZU9wdGlvbnMmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFz
c19zcGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9u
cykKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21G
YWlsKF9fTElORV9fKTsKLSAgdW5pbnRlcnByZXRlZF9vcHRpb25fLk1lcmdlRnJvbShmcm9tLnVu
aW50ZXJwcmV0ZWRfb3B0aW9uXyk7Ci0gIGlmIChmcm9tLl9oYXNfYml0c19bMCAvIDMyXSAmICgw
eGZmdSA8PCAoMCAlIDMyKSkpIHsKLSAgICBpZiAoZnJvbS5oYXNfZGVwcmVjYXRlZCgpKSB7Ci0g
ICAgICBzZXRfZGVwcmVjYXRlZChmcm9tLmRlcHJlY2F0ZWQoKSk7Ci0gICAgfQotICB9Ci0gIF9l
eHRlbnNpb25zXy5NZXJnZUZyb20oZnJvbS5fZXh0ZW5zaW9uc18pOwotICBpZiAoZnJvbS5faW50
ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5r
bm93bl9maWVsZHMoKS0+TWVyZ2VGcm9tKGZyb20udW5rbm93bl9maWVsZHMoKSk7Ci0gIH0KLX0K
LQotdm9pZCBTZXJ2aWNlT3B0aW9uczo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6
ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucykKLSAgaWYg
KCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwot
fQotCi12b2lkIFNlcnZpY2VPcHRpb25zOjpDb3B5RnJvbShjb25zdCBTZXJ2aWNlT3B0aW9ucyYg
ZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlf
ZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMpCi0gIGlmICgmZnJvbSA9
PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9v
bCBTZXJ2aWNlT3B0aW9uczo6SXNJbml0aWFsaXplZCgpIGNvbnN0IHsKLQotICBpZiAoITo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFsbEFyZUluaXRpYWxpemVkKHRoaXMtPnVuaW50ZXJw
cmV0ZWRfb3B0aW9uKCkpKSByZXR1cm4gZmFsc2U7Ci0KLSAgaWYgKCFfZXh0ZW5zaW9uc18uSXNJ
bml0aWFsaXplZCgpKSByZXR1cm4gZmFsc2U7ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTZXJ2
aWNlT3B0aW9uczo6U3dhcChTZXJ2aWNlT3B0aW9ucyogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09
IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgU2VydmljZU9w
dGlvbnM6OkludGVybmFsU3dhcChTZXJ2aWNlT3B0aW9ucyogb3RoZXIpIHsKLSAgc3RkOjpzd2Fw
KGRlcHJlY2F0ZWRfLCBvdGhlci0+ZGVwcmVjYXRlZF8pOwotICB1bmludGVycHJldGVkX29wdGlv
bl8uVW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+dW5pbnRlcnByZXRlZF9vcHRpb25fKTsKLSAgc3Rk
Ojpzd2FwKF9oYXNfYml0c19bMF0sIG90aGVyLT5faGFzX2JpdHNfWzBdKTsKLSAgX2ludGVybmFs
X21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7Ci0gIHN0ZDo6c3dh
cChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci0gIF9leHRlbnNpb25zXy5T
d2FwKCZvdGhlci0+X2V4dGVuc2lvbnNfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpNZXRh
ZGF0YSBTZXJ2aWNlT3B0aW9uczo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVmX0Fz
c2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIG1l
dGFkYXRhOwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gU2VydmljZU9wdGlvbnNfZGVzY3JpcHRv
cl87Ci0gIG1ldGFkYXRhLnJlZmxlY3Rpb24gPSBTZXJ2aWNlT3B0aW9uc19yZWZsZWN0aW9uXzsK
LSAgcmV0dXJuIG1ldGFkYXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFE
RVJTCi0vLyBTZXJ2aWNlT3B0aW9ucwotCi0vLyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAz
MyBbZGVmYXVsdCA9IGZhbHNlXTsKLWJvb2wgU2VydmljZU9wdGlvbnM6Omhhc19kZXByZWNhdGVk
KCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsK
LX0KLXZvaWQgU2VydmljZU9wdGlvbnM6OnNldF9oYXNfZGVwcmVjYXRlZCgpIHsKLSAgX2hhc19i
aXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0KLXZvaWQgU2VydmljZU9wdGlvbnM6OmNsZWFyX2hh
c19kZXByZWNhdGVkKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAxdTsKLX0KLXZv
aWQgU2VydmljZU9wdGlvbnM6OmNsZWFyX2RlcHJlY2F0ZWQoKSB7Ci0gIGRlcHJlY2F0ZWRfID0g
ZmFsc2U7Ci0gIGNsZWFyX2hhc19kZXByZWNhdGVkKCk7Ci19Ci0gYm9vbCBTZXJ2aWNlT3B0aW9u
czo6ZGVwcmVjYXRlZCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2dldDpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMuZGVwcmVjYXRlZCkKLSAgcmV0
dXJuIGRlcHJlY2F0ZWRfOwotfQotIHZvaWQgU2VydmljZU9wdGlvbnM6OnNldF9kZXByZWNhdGVk
KGJvb2wgdmFsdWUpIHsKLSAgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0gIGRlcHJlY2F0ZWRfID0g
dmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnBy
b3RvYnVmLlNlcnZpY2VPcHRpb25zLmRlcHJlY2F0ZWQpCi19Ci0KLS8vIHJlcGVhdGVkIC5nb29n
bGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5
OTsKLWludCBTZXJ2aWNlT3B0aW9uczo6dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpIGNvbnN0
IHsKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5zaXplKCk7Ci19Ci12b2lkIFNlcnZp
Y2VPcHRpb25zOjpjbGVhcl91bmludGVycHJldGVkX29wdGlvbigpIHsKLSAgdW5pbnRlcnByZXRl
ZF9vcHRpb25fLkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJw
cmV0ZWRPcHRpb24mIFNlcnZpY2VPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbihpbnQgaW5k
ZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVy
biB1bmludGVycHJldGVkX29wdGlvbl8uR2V0KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1
Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogU2VydmljZU9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnBy
ZXRlZF9vcHRpb24oaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy51bmludGVycHJldGVk
X29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5NdXRhYmxlKGluZGV4KTsK
LX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogU2VydmljZU9wdGlv
bnM6OmFkZF91bmludGVycHJldGVkX29wdGlvbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMudW5pbnRlcnBy
ZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uQWRkKCk7Ci19Ci06
Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotU2VydmljZU9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnBy
ZXRlZF9vcHRpb24oKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRh
YmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0
aW9uKQotICByZXR1cm4gJnVuaW50ZXJwcmV0ZWRfb3B0aW9uXzsKLX0KLWNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVy
cHJldGVkT3B0aW9uID4mCi1TZXJ2aWNlT3B0aW9uczo6dW5pbnRlcnByZXRlZF9vcHRpb24oKSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5w
cm90b2J1Zi5TZXJ2aWNlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVu
aW50ZXJwcmV0ZWRfb3B0aW9uXzsKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9U
X0lOX0hFQURFUlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8
IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBNZXRob2RPcHRpb25zOjprRGVwcmVjYXRlZEZp
ZWxkTnVtYmVyOwotY29uc3QgaW50IE1ldGhvZE9wdGlvbnM6OmtVbmludGVycHJldGVkT3B0aW9u
RmllbGROdW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+
PSAxOTAwCi0KLU1ldGhvZE9wdGlvbnM6Ok1ldGhvZE9wdGlvbnMoKQotICA6IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVk
Q3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xl
LnByb3RvYnVmLk1ldGhvZE9wdGlvbnMpCi19Ci0KLXZvaWQgTWV0aG9kT3B0aW9uczo6SW5pdEFz
RGVmYXVsdEluc3RhbmNlKCkgewotfQotCi1NZXRob2RPcHRpb25zOjpNZXRob2RPcHRpb25zKGNv
bnN0IE1ldGhvZE9wdGlvbnMmIGZyb20pCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdl
KCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAg
TWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9jb25z
dHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucykKLX0KLQotdm9pZCBNZXRob2RP
cHRpb25zOjpTaGFyZWRDdG9yKCkgewotICBfY2FjaGVkX3NpemVfID0gMDsKLSAgZGVwcmVjYXRl
ZF8gPSBmYWxzZTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9oYXNfYml0c18p
KTsKLX0KLQotTWV0aG9kT3B0aW9uczo6fk1ldGhvZE9wdGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25z
KQotICBTaGFyZWREdG9yKCk7Ci19Ci0KLXZvaWQgTWV0aG9kT3B0aW9uczo6U2hhcmVkRHRvcigp
IHsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIE1l
dGhvZE9wdGlvbnM6OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NB
RkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0g
IEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBNZXRob2RPcHRpb25zOjpkZXNjcmlwdG9yKCkgewotICBw
cm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIE1ldGhvZE9wdGlvbnNf
ZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IE1ldGhvZE9wdGlvbnMmIE1ldGhvZE9wdGlvbnM6OmRl
ZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90
b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0g
IHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLU1ldGhvZE9wdGlvbnMqIE1ldGhvZE9w
dGlvbnM6OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotTWV0aG9kT3B0aW9ucyogTWV0aG9k
T3B0aW9uczo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0g
IE1ldGhvZE9wdGlvbnMqIG4gPSBuZXcgTWV0aG9kT3B0aW9uczsKLSAgaWYgKGFyZW5hICE9IE5V
TEwpIHsKLSAgICBhcmVuYS0+T3duKG4pOwotICB9Ci0gIHJldHVybiBuOwotfQotCi12b2lkIE1l
dGhvZE9wdGlvbnM6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3Nh
Z2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMpCi0gIF9leHRlbnNp
b25zXy5DbGVhcigpOwotICBkZXByZWNhdGVkXyA9IGZhbHNlOwotICB1bmludGVycHJldGVkX29w
dGlvbl8uQ2xlYXIoKTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9oYXNfYml0
c18pKTsKLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7
Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5DbGVhcigpOwotICB9Ci19Ci0KLWJvb2wg
TWV0aG9kT3B0aW9uczo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhF
WFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFp
bHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucykK
LSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQz
MiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxNjM4Myk7Ci0gICAgdGFnID0g
cC5maXJzdDsKLSAgICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgIHN3
aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRh
Z0ZpZWxkTnVtYmVyKHRhZykpIHsKLSAgICAgIC8vIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9
IDMzIFtkZWZhdWx0ID0gZmFsc2VdOwotICAgICAgY2FzZSAzMzogewotICAgICAgICBpZiAodGFn
ID09IDI2NCkgewotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgYm9vbCwg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfQk9PTD4o
Ci0gICAgICAgICAgICAgICAgIGlucHV0LCAmZGVwcmVjYXRlZF8pKSk7Ci0gICAgICAgICAgc2V0
X2hhc19kZXByZWNhdGVkKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5k
bGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3OTk0
KSkgZ290byBwYXJzZV91bmludGVycHJldGVkX29wdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9w
dGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLSAgICAgIGNhc2UgOTk5OiB7Ci0gICAg
ICAgIGlmICh0YWcgPT0gNzk5NCkgewotICAgICAgICAgcGFyc2VfdW5pbnRlcnByZXRlZF9vcHRp
b246Ci0gICAgICAgICAgRE9fKGlucHV0LT5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAg
ICAgICAgIHBhcnNlX2xvb3BfdW5pbnRlcnByZXRlZF9vcHRpb246Ci0gICAgICAgICAgRE9fKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5v
VmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoCi0gICAgICAgICAgICAgICAgaW5wdXQsIGFkZF91bmlu
dGVycHJldGVkX29wdGlvbigpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBo
YW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg3
OTk0KSkgZ290byBwYXJzZV9sb29wX3VuaW50ZXJwcmV0ZWRfb3B0aW9uOwotICAgICAgICBpbnB1
dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5F
eHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g
ICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9
PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewot
ICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBpZiAoKDgwMDB1IDw9
IHRhZykpIHsKLSAgICAgICAgICBET18oX2V4dGVuc2lvbnNfLlBhcnNlRmllbGQodGFnLCBpbnB1
dCwgZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkpOwotICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpTa2lwRmllbGQoCi0gICAgICAgICAgICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93
bl9maWVsZHMoKSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nl
c3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5w
cm90b2J1Zi5NZXRob2RPcHRpb25zKQotICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5NZXRo
b2RPcHRpb25zKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgTWV0aG9k
T3B0aW9uczo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0
aW9ucykKLSAgLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMzMgW2RlZmF1bHQgPSBmYWxz
ZV07Ci0gIGlmIChoYXNfZGVwcmVjYXRlZCgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbCgzMywgdGhpcy0+ZGVwcmVjYXRlZCgp
LCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVy
cHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMCwgbiA9IHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKTsgaSA8IG47
IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpXcml0ZU1lc3NhZ2VNYXliZVRvQXJyYXkoCi0gICAgICA5OTksIHRoaXMtPnVuaW50ZXJwcmV0
ZWRfb3B0aW9uKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gRXh0ZW5zaW9uIHJhbmdlIFsxMDAw
LCA1MzY4NzA5MTIpCi0gIF9leHRlbnNpb25zXy5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0g
ICAgICAxMDAwLCA1MzY4NzA5MTIsIG91dHB1dCk7Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0
YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZpZWxkcygKLSAgICAgICAgdW5rbm93
bl9maWVsZHMoKSwgb3V0cHV0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
c2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucykKLX0KLQotOjpnb29n
bGU6OnByb3RvYnVmOjp1aW50OCogTWV0aG9kT3B0aW9uczo6U2VyaWFsaXplV2l0aENhY2hlZFNp
emVzVG9BcnJheSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFy
dDpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucykKLSAgLy8gb3B0aW9uYWwgYm9vbCBkZXBy
ZWNhdGVkID0gMzMgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGlmIChoYXNfZGVwcmVjYXRlZCgpKSB7
Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OldyaXRlQm9vbFRvQXJyYXkoMzMsIHRoaXMtPmRlcHJlY2F0ZWQoKSwgdGFyZ2V0KTsKLSAg
fQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1
bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4g
PSB0aGlzLT51bmludGVycHJldGVkX29wdGlvbl9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICB0
YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0g
ICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAotICAgICAgICA5OTksIHRoaXMtPnVu
aW50ZXJwcmV0ZWRfb3B0aW9uKGkpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gRXh0ZW5zaW9uIHJh
bmdlIFsxMDAwLCA1MzY4NzA5MTIpCi0gIHRhcmdldCA9IF9leHRlbnNpb25zXy5TZXJpYWxpemVX
aXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgICAgMTAwMCwgNTM2ODcwOTEyLCB0YXJnZXQpOwot
Ci0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAg
IHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlh
bGl6ZVVua25vd25GaWVsZHNUb0FycmF5KAotICAgICAgICB1bmtub3duX2ZpZWxkcygpLCB0YXJn
ZXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJy
YXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zKQotICByZXR1cm4gdGFyZ2V0Owot
fQotCi1pbnQgTWV0aG9kT3B0aW9uczo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk1l
dGhvZE9wdGlvbnMpCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICAvLyBvcHRpb25hbCBib29s
IGRlcHJlY2F0ZWQgPSAzMyBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgaWYgKGhhc19kZXByZWNhdGVk
KCkpIHsKLSAgICB0b3RhbF9zaXplICs9IDIgKyAxOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdv
b2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0g
OTk5OwotICB0b3RhbF9zaXplICs9IDIgKiB0aGlzLT51bmludGVycHJldGVkX29wdGlvbl9zaXpl
KCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6
ZSgpOyBpKyspIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAg
IHRoaXMtPnVuaW50ZXJwcmV0ZWRfb3B0aW9uKGkpKTsKLSAgfQotCi0gIHRvdGFsX3NpemUgKz0g
X2V4dGVuc2lvbnNfLkJ5dGVTaXplKCk7Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2
ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgdG90YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6Q29tcHV0ZVVua25vd25GaWVsZHNTaXpl
KAotICAgICAgICB1bmtub3duX2ZpZWxkcygpKTsKLSAgfQotICBHT09HTEVfU0FGRV9DT05DVVJS
RU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6ZTsKLSAgR09P
R0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3RhbF9zaXplOwot
fQotCi12b2lkIE1ldGhvZE9wdGlvbnM6Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFs
aXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zKQotICBp
ZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19M
SU5FX18pOwotICBjb25zdCBNZXRob2RPcHRpb25zKiBzb3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgTWV0aG9k
T3B0aW9ucz4oCi0gICAgICAgICAgJmZyb20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9m
YWlsOmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zKQotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2Ug
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9j
YXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMpCi0gICAgTWVyZ2VGcm9t
KCpzb3VyY2UpOwotICB9Ci19Ci0KLXZvaWQgTWV0aG9kT3B0aW9uczo6TWVyZ2VGcm9tKGNvbnN0
IE1ldGhvZE9wdGlvbnMmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFz
c19zcGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25z
KQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZh
aWwoX19MSU5FX18pOwotICB1bmludGVycHJldGVkX29wdGlvbl8uTWVyZ2VGcm9tKGZyb20udW5p
bnRlcnByZXRlZF9vcHRpb25fKTsKLSAgaWYgKGZyb20uX2hhc19iaXRzX1swIC8gMzJdICYgKDB4
ZmZ1IDw8ICgwICUgMzIpKSkgewotICAgIGlmIChmcm9tLmhhc19kZXByZWNhdGVkKCkpIHsKLSAg
ICAgIHNldF9kZXByZWNhdGVkKGZyb20uZGVwcmVjYXRlZCgpKTsKLSAgICB9Ci0gIH0KLSAgX2V4
dGVuc2lvbnNfLk1lcmdlRnJvbShmcm9tLl9leHRlbnNpb25zXyk7Ci0gIGlmIChmcm9tLl9pbnRl
cm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91bmtu
b3duX2ZpZWxkcygpLT5NZXJnZUZyb20oZnJvbS51bmtub3duX2ZpZWxkcygpKTsKLSAgfQotfQot
Ci12b2lkIE1ldGhvZE9wdGlvbnM6OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVk
X2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucykKLSAgaWYgKCZm
cm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQot
Ci12b2lkIE1ldGhvZE9wdGlvbnM6OkNvcHlGcm9tKGNvbnN0IE1ldGhvZE9wdGlvbnMmIGZyb20p
IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19jb3B5X2Zyb21f
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMpCi0gIGlmICgmZnJvbSA9PSB0aGlz
KSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBNZXRo
b2RPcHRpb25zOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIGlmICghOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6QWxsQXJlSW5pdGlhbGl6ZWQodGhpcy0+dW5pbnRlcnByZXRlZF9v
cHRpb24oKSkpIHJldHVybiBmYWxzZTsKLQotICBpZiAoIV9leHRlbnNpb25zXy5Jc0luaXRpYWxp
emVkKCkpIHJldHVybiBmYWxzZTsgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1ldGhvZE9wdGlv
bnM6OlN3YXAoTWV0aG9kT3B0aW9ucyogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJl
dHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgTWV0aG9kT3B0aW9uczo6SW50
ZXJuYWxTd2FwKE1ldGhvZE9wdGlvbnMqIG90aGVyKSB7Ci0gIHN0ZDo6c3dhcChkZXByZWNhdGVk
Xywgb3RoZXItPmRlcHJlY2F0ZWRfKTsKLSAgdW5pbnRlcnByZXRlZF9vcHRpb25fLlVuc2FmZUFy
ZW5hU3dhcCgmb3RoZXItPnVuaW50ZXJwcmV0ZWRfb3B0aW9uXyk7Ci0gIHN0ZDo6c3dhcChfaGFz
X2JpdHNfWzBdLCBvdGhlci0+X2hhc19iaXRzX1swXSk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8u
U3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9z
aXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotICBfZXh0ZW5zaW9uc18uU3dhcCgmb3RoZXIt
Pl9leHRlbnNpb25zXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgTWV0aG9k
T3B0aW9uczo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0
b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIG1ldGFkYXRhOwotICBt
ZXRhZGF0YS5kZXNjcmlwdG9yID0gTWV0aG9kT3B0aW9uc19kZXNjcmlwdG9yXzsKLSAgbWV0YWRh
dGEucmVmbGVjdGlvbiA9IE1ldGhvZE9wdGlvbnNfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRh
ZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gTWV0aG9k
T3B0aW9ucwotCi0vLyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzMyBbZGVmYXVsdCA9IGZh
bHNlXTsKLWJvb2wgTWV0aG9kT3B0aW9uczo6aGFzX2RlcHJlY2F0ZWQoKSBjb25zdCB7Ci0gIHJl
dHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQotdm9pZCBNZXRob2RP
cHRpb25zOjpzZXRfaGFzX2RlcHJlY2F0ZWQoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAw
MDAwMXU7Ci19Ci12b2lkIE1ldGhvZE9wdGlvbnM6OmNsZWFyX2hhc19kZXByZWNhdGVkKCkgewot
ICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAxdTsKLX0KLXZvaWQgTWV0aG9kT3B0aW9uczo6
Y2xlYXJfZGVwcmVjYXRlZCgpIHsKLSAgZGVwcmVjYXRlZF8gPSBmYWxzZTsKLSAgY2xlYXJfaGFz
X2RlcHJlY2F0ZWQoKTsKLX0KLSBib29sIE1ldGhvZE9wdGlvbnM6OmRlcHJlY2F0ZWQoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLk1ldGhvZE9wdGlvbnMuZGVwcmVjYXRlZCkKLSAgcmV0dXJuIGRlcHJlY2F0ZWRfOwotfQot
IHZvaWQgTWV0aG9kT3B0aW9uczo6c2V0X2RlcHJlY2F0ZWQoYm9vbCB2YWx1ZSkgewotICBzZXRf
aGFzX2RlcHJlY2F0ZWQoKTsKLSAgZGVwcmVjYXRlZF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5k
ZXByZWNhdGVkKQotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0
ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci1pbnQgTWV0aG9kT3B0aW9uczo6
dW5pbnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVuaW50ZXJwcmV0
ZWRfb3B0aW9uXy5zaXplKCk7Ci19Ci12b2lkIE1ldGhvZE9wdGlvbnM6OmNsZWFyX3VuaW50ZXJw
cmV0ZWRfb3B0aW9uKCkgewotICB1bmludGVycHJldGVkX29wdGlvbl8uQ2xlYXIoKTsKLX0KLWNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiYgTWV0aG9kT3B0aW9u
czo6dW5pbnRlcnByZXRlZF9vcHRpb24oaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMu
dW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uR2V0
KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogTWV0
aG9kT3B0aW9uczo6bXV0YWJsZV91bmludGVycHJldGVkX29wdGlvbihpbnQgaW5kZXgpIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVm
Lk1ldGhvZE9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJl
dGVkX29wdGlvbl8uTXV0YWJsZShpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50
ZXJwcmV0ZWRPcHRpb24qIE1ldGhvZE9wdGlvbnM6OmFkZF91bmludGVycHJldGVkX29wdGlvbigp
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9i
dWYuTWV0aG9kT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJw
cmV0ZWRfb3B0aW9uXy5BZGQoKTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJG
aWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uID4qCi1NZXRob2RP
cHRpb25zOjptdXRhYmxlX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2RP
cHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1cm4gJnVuaW50ZXJwcmV0ZWRfb3B0
aW9uXzsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpn
b29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uID4mCi1NZXRob2RPcHRpb25zOjp1
bmludGVycHJldGVkX29wdGlvbigpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMudW5pbnRlcnByZXRl
ZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl87Ci19Ci0KLSNlbmRpZiAg
Ly8gUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0KLS8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lm
ICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgVW5pbnRl
cnByZXRlZE9wdGlvbl9OYW1lUGFydDo6a05hbWVQYXJ0RmllbGROdW1iZXI7Ci1jb25zdCBpbnQg
VW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6a0lzRXh0ZW5zaW9uRmllbGROdW1iZXI7Ci0j
ZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLVVuaW50
ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6OlVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQoKQot
ICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5V
TEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29u
c3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQpCi19
Ci0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6SW5pdEFzRGVmYXVsdEluc3Rh
bmNlKCkgewotfQotCi1VbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpVbmludGVycHJldGVk
T3B0aW9uX05hbWVQYXJ0KGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQmIGZyb20p
Ci0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFk
YXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYu
VW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCkKLX0KLQotdm9pZCBVbmludGVycHJldGVkT3B0
aW9uX05hbWVQYXJ0OjpTaGFyZWRDdG9yKCkgewotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZygpOwotICBfY2FjaGVkX3NpemVfID0gMDsKLSAgbmFtZV9wYXJ0
Xy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGlzX2V4dGVuc2lvbl8gPSBmYWxzZTsKLSAgOjpt
ZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9oYXNfYml0c18pKTsKLX0KLQotVW5pbnRlcnBy
ZXRlZE9wdGlvbl9OYW1lUGFydDo6flVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQoKSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5V
bmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0KQotICBTaGFyZWREdG9yKCk7Ci19Ci0KLXZvaWQg
VW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6U2hhcmVkRHRvcigpIHsKLSAgbmFtZV9wYXJ0
Xy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNlXykg
ewotICB9Ci19Ci0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6U2V0Q2FjaGVk
U2l6ZShpbnQgc2l6ZSkgY29uc3QgewotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19C
RUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVO
VF9XUklURVNfRU5EKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3Iq
IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVm
X0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gVW5pbnRlcnByZXRlZE9wdGlvbl9O
YW1lUGFydF9kZXNjcmlwdG9yXzsKLX0KLQotY29uc3QgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1l
UGFydCYgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsK
LSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2lu
c3RhbmNlXzsKLX0KLQotVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCogVW5pbnRlcnByZXRl
ZE9wdGlvbl9OYW1lUGFydDo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1VbmludGVycHJl
dGVkT3B0aW9uX05hbWVQYXJ0KiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpOZXcoOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgVW5pbnRlcnByZXRlZE9w
dGlvbl9OYW1lUGFydCogbiA9IG5ldyBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OwotICBp
ZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47
Ci19Ci0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6Q2xlYXIoKSB7Ci0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCkKLSAgaWYgKF9oYXNfYml0c19bMCAvIDMy
XSAmIDN1KSB7Ci0gICAgaWYgKGhhc19uYW1lX3BhcnQoKSkgewotICAgICAgbmFtZV9wYXJ0Xy5D
bGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gICAgfQotICAgIGlzX2V4dGVuc2lvbl8gPSBmYWxz
ZTsKLSAgfQotICA6Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXplb2YoX2hhc19iaXRzXykpOwot
ICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBt
dXRhYmxlX3Vua25vd25fZmllbGRzKCktPkNsZWFyKCk7Ci0gIH0KLX0KLQotYm9vbCBVbmludGVy
cHJldGVkT3B0aW9uX05hbWVQYXJ0OjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZp
bmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkg
Z290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5VbmludGVy
cHJldGVkT3B0aW9uLk5hbWVQYXJ0KQotICBmb3IgKDs7KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyLCBib29sPiBwID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0
b2ZmKDEyNyk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAgICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhh
bmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykpIHsKLSAgICAgIC8vIHJlcXVp
cmVkIHN0cmluZyBuYW1lX3BhcnQgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0
YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMt
Pm11dGFibGVfbmFtZV9wYXJ0KCkpKTsKLSAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgICAg
ICAgIHRoaXMtPm5hbWVfcGFydCgpLmRhdGEoKSwgdGhpcy0+bmFtZV9wYXJ0KCkubGVuZ3RoKCks
Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpQ
QVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5O
YW1lUGFydC5uYW1lX3BhcnQiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhh
bmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDE2
KSkgZ290byBwYXJzZV9pc19leHRlbnNpb247Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g
ICAgICAvLyByZXF1aXJlZCBib29sIGlzX2V4dGVuc2lvbiA9IDI7Ci0gICAgICBjYXNlIDI6IHsK
LSAgICAgICAgaWYgKHRhZyA9PSAxNikgewotICAgICAgICAgcGFyc2VfaXNfZXh0ZW5zaW9uOgot
ICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAg
ICAgICAgIGlucHV0LCAmaXNfZXh0ZW5zaW9uXykpKTsKLSAgICAgICAgICBzZXRfaGFzX2lzX2V4
dGVuc2lvbigpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1
YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1
Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAg
ICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5
cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2Vz
czsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6U2tpcEZpZWxkKAotICAgICAgICAgICAgICBpbnB1dCwgdGFnLCBtdXRhYmxl
X3Vua25vd25fZmllbGRzKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci1zdWNjZXNzOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpn
b29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCkKLSAgcmV0dXJuIHRy
dWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVy
ZTpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCkKLSAgcmV0dXJu
IGZhbHNlOwotI3VuZGVmIERPXwotfQotCi12b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBh
cnQ6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlv
OjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRP
cHRpb24uTmFtZVBhcnQpCi0gIC8vIHJlcXVpcmVkIHN0cmluZyBuYW1lX3BhcnQgPSAxOwotICBp
ZiAoaGFzX25hbWVfcGFydCgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICB0aGlzLT5uYW1l
X3BhcnQoKS5kYXRhKCksIHRoaXMtPm5hbWVfcGFydCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdv
b2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0Lm5hbWVfcGFydCIpOwot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0
cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDEsIHRoaXMtPm5hbWVfcGFydCgpLCBvdXRwdXQpOwot
ICB9Ci0KLSAgLy8gcmVxdWlyZWQgYm9vbCBpc19leHRlbnNpb24gPSAyOwotICBpZiAoaGFzX2lz
X2V4dGVuc2lvbigpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OldyaXRlQm9vbCgyLCB0aGlzLT5pc19leHRlbnNpb24oKSwgb3V0cHV0KTsKLSAg
fQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVu
a25vd25GaWVsZHMoCi0gICAgICAgIHVua25vd25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVm
LlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQpCi19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6
dWludDgqIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6OlNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQpCi0gIC8vIHJl
cXVpcmVkIHN0cmluZyBuYW1lX3BhcnQgPSAxOwotICBpZiAoaGFzX25hbWVfcGFydCgpKSB7Ci0g
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0
cmluZ05hbWVkRmllbGQoCi0gICAgICB0aGlzLT5uYW1lX3BhcnQoKS5kYXRhKCksIHRoaXMtPm5h
bWVfcGFydCgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJl
dGVkT3B0aW9uLk5hbWVQYXJ0Lm5hbWVfcGFydCIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0Fy
cmF5KAotICAgICAgICAxLCB0aGlzLT5uYW1lX3BhcnQoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8v
IHJlcXVpcmVkIGJvb2wgaXNfZXh0ZW5zaW9uID0gMjsKLSAgaWYgKGhhc19pc19leHRlbnNpb24o
KSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpXcml0ZUJvb2xUb0FycmF5KDIsIHRoaXMtPmlzX2V4dGVuc2lvbigpLCB0YXJnZXQp
OwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygp
KSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dDo6U2VyaWFsaXplVW5rbm93bkZpZWxkc1RvQXJyYXkoCi0gICAgICAgIHVua25vd25fZmllbGRz
KCksIHRhcmdldCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6
ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBh
cnQpCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQ
YXJ0OjpSZXF1aXJlZEZpZWxkc0J5dGVTaXplRmFsbGJhY2soKSBjb25zdCB7Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQocmVxdWlyZWRfZmllbGRzX2J5dGVfc2l6ZV9mYWxsYmFja19zdGFy
dDpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCkKLSAgaW50IHRv
dGFsX3NpemUgPSAwOwotCi0gIGlmIChoYXNfbmFtZV9wYXJ0KCkpIHsKLSAgICAvLyByZXF1aXJl
ZCBzdHJpbmcgbmFtZV9wYXJ0ID0gMTsKLSAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0cmluZ1NpemUoCi0g
ICAgICAgIHRoaXMtPm5hbWVfcGFydCgpKTsKLSAgfQotCi0gIGlmIChoYXNfaXNfZXh0ZW5zaW9u
KCkpIHsKLSAgICAvLyByZXF1aXJlZCBib29sIGlzX2V4dGVuc2lvbiA9IDI7Ci0gICAgdG90YWxf
c2l6ZSArPSAxICsgMTsKLSAgfQotCi0gIHJldHVybiB0b3RhbF9zaXplOwotfQotaW50IFVuaW50
ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5V
bmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0KQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAg
aWYgKCgoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDMpIF4gMHgwMDAwMDAwMykgPT0gMCkgeyAg
Ly8gQWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgcHJlc2VudC4KLSAgICAvLyByZXF1aXJlZCBzdHJp
bmcgbmFtZV9wYXJ0ID0gMTsKLSAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0cmluZ1NpemUoCi0gICAgICAg
IHRoaXMtPm5hbWVfcGFydCgpKTsKLQotICAgIC8vIHJlcXVpcmVkIGJvb2wgaXNfZXh0ZW5zaW9u
ID0gMjsKLSAgICB0b3RhbF9zaXplICs9IDEgKyAxOwotCi0gIH0gZWxzZSB7Ci0gICAgdG90YWxf
c2l6ZSArPSBSZXF1aXJlZEZpZWxkc0J5dGVTaXplRmFsbGJhY2soKTsKLSAgfQotICBpZiAoX2lu
dGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICB0b3RhbF9zaXpl
ICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpDb21w
dXRlVW5rbm93bkZpZWxkc1NpemUoCi0gICAgICAgIHVua25vd25fZmllbGRzKCkpOwotICB9Ci0g
IEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8g
PSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLSAg
cmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFy
dDo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewot
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6
Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQpCi0gIGlmIChHT09H
TEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7
Ci0gIGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQqIHNvdXJjZSA9IAotICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25z
dCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0PigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlm
IChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJh
bGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRP
cHRpb24uTmFtZVBhcnQpCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6UmVmbGVj
dGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpnb29nbGUu
cHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCkKLSAgICBNZXJnZUZyb20oKnNv
dXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpNZXJn
ZUZyb20oY29uc3QgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCYgZnJvbSkgewotLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29v
Z2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQpCi0gIGlmIChHT09HTEVf
UFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0g
IGlmIChmcm9tLl9oYXNfYml0c19bMCAvIDMyXSAmICgweGZmdSA8PCAoMCAlIDMyKSkpIHsKLSAg
ICBpZiAoZnJvbS5oYXNfbmFtZV9wYXJ0KCkpIHsKLSAgICAgIHNldF9oYXNfbmFtZV9wYXJ0KCk7
Ci0gICAgICBuYW1lX3BhcnRfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJvbS5uYW1lX3BhcnRf
KTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX2lzX2V4dGVuc2lvbigpKSB7Ci0gICAgICBzZXRf
aXNfZXh0ZW5zaW9uKGZyb20uaXNfZXh0ZW5zaW9uKCkpOwotICAgIH0KLSAgfQotICBpZiAoZnJv
bS5faW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFi
bGVfdW5rbm93bl9maWVsZHMoKS0+TWVyZ2VGcm9tKGZyb20udW5rbm93bl9maWVsZHMoKSk7Ci0g
IH0KLX0KLQotdm9pZCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpDb3B5RnJvbShjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVu
aW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47
Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBVbmludGVycHJldGVk
T3B0aW9uX05hbWVQYXJ0OjpDb3B5RnJvbShjb25zdCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQ
YXJ0JiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNf
Y29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQ
YXJ0KQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZy
b20oZnJvbSk7Ci19Ci0KLWJvb2wgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6SXNJbml0
aWFsaXplZCgpIGNvbnN0IHsKLSAgaWYgKChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMykgIT0g
MHgwMDAwMDAwMykgcmV0dXJuIGZhbHNlOwotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIFVu
aW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6OlN3YXAoVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1l
UGFydCogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxT
d2FwKG90aGVyKTsKLX0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6SW50ZXJu
YWxTd2FwKFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQqIG90aGVyKSB7Ci0gIG5hbWVfcGFy
dF8uU3dhcCgmb3RoZXItPm5hbWVfcGFydF8pOwotICBzdGQ6OnN3YXAoaXNfZXh0ZW5zaW9uXywg
b3RoZXItPmlzX2V4dGVuc2lvbl8pOwotICBzdGQ6OnN3YXAoX2hhc19iaXRzX1swXSwgb3RoZXIt
Pl9oYXNfYml0c19bMF0pOwotICBfaW50ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90aGVyLT5faW50
ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90aGVyLT5fY2Fj
aGVkX3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBVbmludGVycHJl
dGVkT3B0aW9uX05hbWVQYXJ0OjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNz
aWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0
YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBVbmludGVycHJldGVkT3B0aW9uX05hbWVQ
YXJ0X2Rlc2NyaXB0b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gVW5pbnRlcnByZXRlZE9w
dGlvbl9OYW1lUGFydF9yZWZsZWN0aW9uXzsKLSAgcmV0dXJuIG1ldGFkYXRhOwotfQotCi0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAw
Ci1jb25zdCBpbnQgVW5pbnRlcnByZXRlZE9wdGlvbjo6a05hbWVGaWVsZE51bWJlcjsKLWNvbnN0
IGludCBVbmludGVycHJldGVkT3B0aW9uOjprSWRlbnRpZmllclZhbHVlRmllbGROdW1iZXI7Ci1j
b25zdCBpbnQgVW5pbnRlcnByZXRlZE9wdGlvbjo6a1Bvc2l0aXZlSW50VmFsdWVGaWVsZE51bWJl
cjsKLWNvbnN0IGludCBVbmludGVycHJldGVkT3B0aW9uOjprTmVnYXRpdmVJbnRWYWx1ZUZpZWxk
TnVtYmVyOwotY29uc3QgaW50IFVuaW50ZXJwcmV0ZWRPcHRpb246OmtEb3VibGVWYWx1ZUZpZWxk
TnVtYmVyOwotY29uc3QgaW50IFVuaW50ZXJwcmV0ZWRPcHRpb246OmtTdHJpbmdWYWx1ZUZpZWxk
TnVtYmVyOwotY29uc3QgaW50IFVuaW50ZXJwcmV0ZWRPcHRpb246OmtBZ2dyZWdhdGVWYWx1ZUZp
ZWxkTnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0g
MTkwMAotCi1VbmludGVycHJldGVkT3B0aW9uOjpVbmludGVycHJldGVkT3B0aW9uKCkKLSAgOiA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7
Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVj
dG9yOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKQotfQotCi12b2lkIFVuaW50
ZXJwcmV0ZWRPcHRpb246OkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpIHsKLX0KLQotVW5pbnRlcnBy
ZXRlZE9wdGlvbjo6VW5pbnRlcnByZXRlZE9wdGlvbihjb25zdCBVbmludGVycHJldGVkT3B0aW9u
JiBmcm9tKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRlcm5h
bF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xlLnBy
b3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24pCi19Ci0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlv
bjo6U2hhcmVkQ3RvcigpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmcoKTsKLSAgX2NhY2hlZF9zaXplXyA9IDA7Ci0gIGlkZW50aWZpZXJfdmFsdWVfLlVu
c2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgcG9zaXRpdmVfaW50X3ZhbHVlXyA9IEdPT0dMRV9VTE9O
R0xPTkcoMCk7Ci0gIG5lZ2F0aXZlX2ludF92YWx1ZV8gPSBHT09HTEVfTE9OR0xPTkcoMCk7Ci0g
IGRvdWJsZV92YWx1ZV8gPSAwOwotICBzdHJpbmdfdmFsdWVfLlVuc2FmZVNldERlZmF1bHQoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTsKLSAgYWdncmVnYXRlX3ZhbHVlXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIDo6bWVtc2V0
KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci19Ci0KLVVuaW50ZXJwcmV0ZWRP
cHRpb246On5VbmludGVycHJldGVkT3B0aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbikKLSAg
U2hhcmVkRHRvcigpOwotfQotCi12b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OlNoYXJlZER0b3Io
KSB7Ci0gIGlkZW50aWZpZXJfdmFsdWVfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIHN0cmluZ192
YWx1ZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgYWdncmVnYXRlX3ZhbHVlXy5EZXN0cm95Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNlXykgewotICB9Ci19Ci0K
LXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6U2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Qg
ewotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3Np
emVfID0gc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci19Ci1j
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIFVuaW50ZXJwcmV0ZWRPcHRpb246
OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICBy
ZXR1cm4gVW5pbnRlcnByZXRlZE9wdGlvbl9kZXNjcmlwdG9yXzsKLX0KLQotY29uc3QgVW5pbnRl
cnByZXRlZE9wdGlvbiYgVW5pbnRlcnByZXRlZE9wdGlvbjo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsK
LSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2lu
c3RhbmNlXzsKLX0KLQotVW5pbnRlcnByZXRlZE9wdGlvbiogVW5pbnRlcnByZXRlZE9wdGlvbjo6
ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1VbmludGVycHJldGVkT3B0aW9uKiBVbmludGVy
cHJldGVkT3B0aW9uOjpOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0
IHsKLSAgVW5pbnRlcnByZXRlZE9wdGlvbiogbiA9IG5ldyBVbmludGVycHJldGVkT3B0aW9uOwot
ICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJu
IG47Ci19Ci0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Q2xlYXIoKSB7Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUucHJvdG9idWYuVW5p
bnRlcnByZXRlZE9wdGlvbikKLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNkZWZpbmUgWlJfSEVM
UEVSXyhmKSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcHVzaCIpIFwKLSAgX1ByYWdt
YSgiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdpbnZhbGlkLW9mZnNldG9mXCIiKSBcCi0g
IF9fYnVpbHRpbl9vZmZzZXRvZihVbmludGVycHJldGVkT3B0aW9uLCBmKSBcCi0gIF9QcmFnbWEo
ImNsYW5nIGRpYWdub3N0aWMgcG9wIikKLSNlbHNlCi0jZGVmaW5lIFpSX0hFTFBFUl8oZikgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oXAotICAmcmVpbnRlcnByZXRfY2FzdDxVbmludGVycHJldGVk
T3B0aW9uKj4oMTYpLT5mKQotI2VuZGlmCi0KLSNkZWZpbmUgWlJfKGZpcnN0LCBsYXN0KSBkbyB7
XAotICA6Om1lbXNldCgmZmlyc3QsIDAsXAotICAgICAgICAgICBaUl9IRUxQRVJfKGxhc3QpIC0g
WlJfSEVMUEVSXyhmaXJzdCkgKyBzaXplb2YobGFzdCkpO1wKLX0gd2hpbGUgKDApCi0KLSAgaWYg
KF9oYXNfYml0c19bMCAvIDMyXSAmIDEyNnUpIHsKLSAgICBaUl8ocG9zaXRpdmVfaW50X3ZhbHVl
XywgZG91YmxlX3ZhbHVlXyk7Ci0gICAgaWYgKGhhc19pZGVudGlmaWVyX3ZhbHVlKCkpIHsKLSAg
ICAgIGlkZW50aWZpZXJfdmFsdWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgICB9Ci0g
ICAgaWYgKGhhc19zdHJpbmdfdmFsdWUoKSkgewotICAgICAgc3RyaW5nX3ZhbHVlXy5DbGVhclRv
RW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci0gICAgfQotICAgIGlmIChoYXNfYWdncmVnYXRlX3ZhbHVlKCkp
IHsKLSAgICAgIGFnZ3JlZ2F0ZV92YWx1ZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICAg
IH0KLSAgfQotCi0jdW5kZWYgWlJfSEVMUEVSXwotI3VuZGVmIFpSXwotCi0gIG5hbWVfLkNsZWFy
KCk7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci0gIGlm
IChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFi
bGVfdW5rbm93bl9maWVsZHMoKS0+Q2xlYXIoKTsKLSAgfQotfQotCi1ib29sIFVuaW50ZXJwcmV0
ZWRPcHRpb246Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQUkVT
U0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1cmUK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24p
Ci0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50
MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBw
LmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dp
dGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFn
RmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5V
bmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0IG5hbWUgPSAyOwotICAgICAgY2FzZSAyOiB7Ci0g
ICAgICAgIGlmICh0YWcgPT0gMTgpIHsKLSAgICAgICAgICBET18oaW5wdXQtPkluY3JlbWVudFJl
Y3Vyc2lvbkRlcHRoKCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9uYW1lOgotICAgICAgICAgIERP
Xyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3Nh
Z2VOb1ZpcnR1YWxOb1JlY3Vyc2lvbkRlcHRoKAotICAgICAgICAgICAgICAgIGlucHV0LCBhZGRf
bmFtZSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3Vh
bDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxOCkpIGdvdG8gcGFy
c2VfbG9vcF9uYW1lOwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVw
dGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMjYpKSBnb3RvIHBhcnNlX2lkZW50
aWZpZXJfdmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25h
bCBzdHJpbmcgaWRlbnRpZmllcl92YWx1ZSA9IDM7Ci0gICAgICBjYXNlIDM6IHsKLSAgICAgICAg
aWYgKHRhZyA9PSAyNikgewotICAgICAgICAgcGFyc2VfaWRlbnRpZmllcl92YWx1ZToKLSAgICAg
ICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJl
YWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVfaWRlbnRpZmll
cl92YWx1ZSgpKSk7Ci0gICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICAgICAgICB0aGlzLT5p
ZGVudGlmaWVyX3ZhbHVlKCkuZGF0YSgpLCB0aGlzLT5pZGVudGlmaWVyX3ZhbHVlKCkubGVuZ3Ro
KCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
OjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlv
bi5pZGVudGlmaWVyX3ZhbHVlIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBo
YW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygz
MikpIGdvdG8gcGFyc2VfcG9zaXRpdmVfaW50X3ZhbHVlOwotICAgICAgICBicmVhazsKLSAgICAg
IH0KLQotICAgICAgLy8gb3B0aW9uYWwgdWludDY0IHBvc2l0aXZlX2ludF92YWx1ZSA9IDQ7Ci0g
ICAgICBjYXNlIDQ6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAzMikgewotICAgICAgICAgcGFyc2Vf
cG9zaXRpdmVfaW50X3ZhbHVlOgotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50NjQsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX1VJTlQ2ND4oCi0gICAgICAgICAgICAgICAgIGlucHV0
LCAmcG9zaXRpdmVfaW50X3ZhbHVlXykpKTsKLSAgICAgICAgICBzZXRfaGFzX3Bvc2l0aXZlX2lu
dF92YWx1ZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1
YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoNDApKSBnb3RvIHBh
cnNlX25lZ2F0aXZlX2ludF92YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAg
IC8vIG9wdGlvbmFsIGludDY0IG5lZ2F0aXZlX2ludF92YWx1ZSA9IDU7Ci0gICAgICBjYXNlIDU6
IHsKLSAgICAgICAgaWYgKHRhZyA9PSA0MCkgewotICAgICAgICAgcGFyc2VfbmVnYXRpdmVfaW50
X3ZhbHVlOgotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnQ2NCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlRZUEVfSU5UNjQ+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJm5lZ2F0aXZlX2lu
dF92YWx1ZV8pKSk7Ci0gICAgICAgICAgc2V0X2hhc19uZWdhdGl2ZV9pbnRfdmFsdWUoKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDQ5KSkgZ290byBwYXJzZV9kb3VibGVfdmFs
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBkb3VibGUg
ZG91YmxlX3ZhbHVlID0gNjsKLSAgICAgIGNhc2UgNjogewotICAgICAgICBpZiAodGFnID09IDQ5
KSB7Ci0gICAgICAgICBwYXJzZV9kb3VibGVfdmFsdWU6Ci0gICAgICAgICAgRE9fKCg6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAg
ICAgICAgICAgICAgICAgICBkb3VibGUsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpUWVBFX0RPVUJMRT4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmZG91
YmxlX3ZhbHVlXykpKTsKLSAgICAgICAgICBzZXRfaGFzX2RvdWJsZV92YWx1ZSgpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoNTgpKSBnb3RvIHBhcnNlX3N0cmluZ192YWx1ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIGJ5dGVzIHN0cmlu
Z192YWx1ZSA9IDc7Ci0gICAgICBjYXNlIDc6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA1OCkgewot
ICAgICAgICAgcGFyc2Vfc3RyaW5nX3ZhbHVlOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZEJ5dGVzKAotICAgICAgICAgICAg
ICAgIGlucHV0LCB0aGlzLT5tdXRhYmxlX3N0cmluZ192YWx1ZSgpKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoaW5wdXQtPkV4cGVjdFRhZyg2NikpIGdvdG8gcGFyc2VfYWdncmVnYXRlX3ZhbHVlOwotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIGFnZ3JlZ2F0
ZV92YWx1ZSA9IDg7Ci0gICAgICBjYXNlIDg6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA2Nikgewot
ICAgICAgICAgcGFyc2VfYWdncmVnYXRlX3ZhbHVlOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAg
ICAgICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9hZ2dyZWdhdGVfdmFsdWUoKSkpOwotICAgICAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhT
dHJpbmdOYW1lZEZpZWxkKAotICAgICAgICAgICAgdGhpcy0+YWdncmVnYXRlX3ZhbHVlKCkuZGF0
YSgpLCB0aGlzLT5hZ2dyZWdhdGVfdmFsdWUoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlBBUlNFLAotICAgICAgICAgICAg
Imdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmFnZ3JlZ2F0ZV92YWx1ZSIpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51
c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQot
ICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAg
fQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6
U2tpcEZpZWxkKAotICAgICAgICAgICAgICBpbnB1dCwgdGFnLCBtdXRhYmxlX3Vua25vd25fZmll
bGRzKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvbikKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuVW5p
bnRlcnByZXRlZE9wdGlvbikKLSAgcmV0dXJuIGZhbHNlOwotI3VuZGVmIERPXwotfQotCi12b2lk
IFVuaW50ZXJwcmV0ZWRPcHRpb246OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24pCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYu
VW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCBuYW1lID0gMjsKLSAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDAsIG4gPSB0aGlzLT5uYW1lX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VNYXli
ZVRvQXJyYXkoCi0gICAgICAyLCB0aGlzLT5uYW1lKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8g
b3B0aW9uYWwgc3RyaW5nIGlkZW50aWZpZXJfdmFsdWUgPSAzOwotICBpZiAoaGFzX2lkZW50aWZp
ZXJfdmFsdWUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+aWRlbnRpZmllcl92
YWx1ZSgpLmRhdGEoKSwgdGhpcy0+aWRlbnRpZmllcl92YWx1ZSgpLmxlbmd0aCgpLAotICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAg
ICAgImdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmlkZW50aWZpZXJfdmFsdWUi
KTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3Jp
dGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAzLCB0aGlzLT5pZGVudGlmaWVyX3ZhbHVlKCks
IG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCB1aW50NjQgcG9zaXRpdmVfaW50X3ZhbHVl
ID0gNDsKLSAgaWYgKGhhc19wb3NpdGl2ZV9pbnRfdmFsdWUoKSkgewotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVVJbnQ2NCg0LCB0aGlzLT5w
b3NpdGl2ZV9pbnRfdmFsdWUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGludDY0
IG5lZ2F0aXZlX2ludF92YWx1ZSA9IDU7Ci0gIGlmIChoYXNfbmVnYXRpdmVfaW50X3ZhbHVlKCkp
IHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3Jp
dGVJbnQ2NCg1LCB0aGlzLT5uZWdhdGl2ZV9pbnRfdmFsdWUoKSwgb3V0cHV0KTsKLSAgfQotCi0g
IC8vIG9wdGlvbmFsIGRvdWJsZSBkb3VibGVfdmFsdWUgPSA2OwotICBpZiAoaGFzX2RvdWJsZV92
YWx1ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OldyaXRlRG91YmxlKDYsIHRoaXMtPmRvdWJsZV92YWx1ZSgpLCBvdXRwdXQpOwotICB9Ci0K
LSAgLy8gb3B0aW9uYWwgYnl0ZXMgc3RyaW5nX3ZhbHVlID0gNzsKLSAgaWYgKGhhc19zdHJpbmdf
dmFsdWUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXcml0ZUJ5dGVzTWF5YmVBbGlhc2VkKAotICAgICAgNywgdGhpcy0+c3RyaW5nX3ZhbHVl
KCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgYWdncmVnYXRlX3ZhbHVl
ID0gODsKLSAgaWYgKGhhc19hZ2dyZWdhdGVfdmFsdWUoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAot
ICAgICAgdGhpcy0+YWdncmVnYXRlX3ZhbHVlKCkuZGF0YSgpLCB0aGlzLT5hZ2dyZWdhdGVfdmFs
dWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9w
dGlvbi5hZ2dyZWdhdGVfdmFsdWUiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICA4LCB0aGlz
LT5hZ2dyZWdhdGVfdmFsdWUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxfbWV0
YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHMoCi0gICAgICAgIHVu
a25vd25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24pCi19
Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFVuaW50ZXJwcmV0ZWRPcHRpb246OlNlcmlh
bGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50
OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxp
emVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24pCi0g
IC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFy
dCBuYW1lID0gMjsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5uYW1lX3Np
emUoKTsgaSA8IG47IGkrKykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJy
YXkoCi0gICAgICAgIDIsIHRoaXMtPm5hbWUoaSksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRp
b25hbCBzdHJpbmcgaWRlbnRpZmllcl92YWx1ZSA9IDM7Ci0gIGlmIChoYXNfaWRlbnRpZmllcl92
YWx1ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6
VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICB0aGlzLT5pZGVudGlmaWVyX3ZhbHVl
KCkuZGF0YSgpLCB0aGlzLT5pZGVudGlmaWVyX3ZhbHVlKCkubGVuZ3RoKCksCi0gICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAi
Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uaWRlbnRpZmllcl92YWx1ZSIpOwot
ICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAzLCB0aGlzLT5pZGVudGlmaWVy
X3ZhbHVlKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCB1aW50NjQgcG9zaXRpdmVf
aW50X3ZhbHVlID0gNDsKLSAgaWYgKGhhc19wb3NpdGl2ZV9pbnRfdmFsdWUoKSkgewotICAgIHRh
cmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0
ZVVJbnQ2NFRvQXJyYXkoNCwgdGhpcy0+cG9zaXRpdmVfaW50X3ZhbHVlKCksIHRhcmdldCk7Ci0g
IH0KLQotICAvLyBvcHRpb25hbCBpbnQ2NCBuZWdhdGl2ZV9pbnRfdmFsdWUgPSA1OwotICBpZiAo
aGFzX25lZ2F0aXZlX2ludF92YWx1ZSgpKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50NjRUb0FycmF5KDUsIHRoaXMt
Pm5lZ2F0aXZlX2ludF92YWx1ZSgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgZG91
YmxlIGRvdWJsZV92YWx1ZSA9IDY7Ci0gIGlmIChoYXNfZG91YmxlX3ZhbHVlKCkpIHsKLSAgICB0
YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3Jp
dGVEb3VibGVUb0FycmF5KDYsIHRoaXMtPmRvdWJsZV92YWx1ZSgpLCB0YXJnZXQpOwotICB9Ci0K
LSAgLy8gb3B0aW9uYWwgYnl0ZXMgc3RyaW5nX3ZhbHVlID0gNzsKLSAgaWYgKGhhc19zdHJpbmdf
dmFsdWUoKSkgewotICAgIHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCeXRlc1RvQXJyYXkoCi0gICAgICAgIDcsIHRoaXMt
PnN0cmluZ192YWx1ZSgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGFn
Z3JlZ2F0ZV92YWx1ZSA9IDg7Ci0gIGlmIChoYXNfYWdncmVnYXRlX3ZhbHVlKCkpIHsKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5n
TmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPmFnZ3JlZ2F0ZV92YWx1ZSgpLmRhdGEoKSwgdGhpcy0+
YWdncmVnYXRlX3ZhbHVlKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0OjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLlVu
aW50ZXJwcmV0ZWRPcHRpb24uYWdncmVnYXRlX3ZhbHVlIik7Ci0gICAgdGFyZ2V0ID0KLSAgICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmlu
Z1RvQXJyYXkoCi0gICAgICAgIDgsIHRoaXMtPmFnZ3JlZ2F0ZV92YWx1ZSgpLCB0YXJnZXQpOwot
ICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7
Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6
U2VyaWFsaXplVW5rbm93bkZpZWxkc1RvQXJyYXkoCi0gICAgICAgIHVua25vd25fZmllbGRzKCks
IHRhcmdldCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90
b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24pCi0gIHJldHVy
biB0YXJnZXQ7Ci19Ci0KLWludCBVbmludGVycHJldGVkT3B0aW9uOjpCeXRlU2l6ZSgpIGNvbnN0
IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpn
b29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbikKLSAgaW50IHRvdGFsX3NpemUgPSAw
OwotCi0gIGlmIChfaGFzX2JpdHNfWzEgLyAzMl0gJiAxMjZ1KSB7Ci0gICAgLy8gb3B0aW9uYWwg
c3RyaW5nIGlkZW50aWZpZXJfdmFsdWUgPSAzOwotICAgIGlmIChoYXNfaWRlbnRpZmllcl92YWx1
ZSgpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgICB0aGlz
LT5pZGVudGlmaWVyX3ZhbHVlKCkpOwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIHVpbnQ2NCBw
b3NpdGl2ZV9pbnRfdmFsdWUgPSA0OwotICAgIGlmIChoYXNfcG9zaXRpdmVfaW50X3ZhbHVlKCkp
IHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpVSW50NjRTaXplKAotICAgICAgICAgIHRoaXMtPnBv
c2l0aXZlX2ludF92YWx1ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBvcHRpb25hbCBpbnQ2NCBuZWdh
dGl2ZV9pbnRfdmFsdWUgPSA1OwotICAgIGlmIChoYXNfbmVnYXRpdmVfaW50X3ZhbHVlKCkpIHsK
LSAgICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpJbnQ2NFNpemUoCi0gICAgICAgICAgdGhpcy0+bmVnYXRp
dmVfaW50X3ZhbHVlKCkpOwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFsIGRvdWJsZSBkb3VibGVf
dmFsdWUgPSA2OwotICAgIGlmIChoYXNfZG91YmxlX3ZhbHVlKCkpIHsKLSAgICAgIHRvdGFsX3Np
emUgKz0gMSArIDg7Ci0gICAgfQotCi0gICAgLy8gb3B0aW9uYWwgYnl0ZXMgc3RyaW5nX3ZhbHVl
ID0gNzsKLSAgICBpZiAoaGFzX3N0cmluZ192YWx1ZSgpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9
IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6Qnl0ZXNTaXplKAotICAgICAgICAgIHRoaXMtPnN0cmluZ192YWx1ZSgpKTsKLSAgICB9Ci0K
LSAgICAvLyBvcHRpb25hbCBzdHJpbmcgYWdncmVnYXRlX3ZhbHVlID0gODsKLSAgICBpZiAoaGFz
X2FnZ3JlZ2F0ZV92YWx1ZSgpKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSgK
LSAgICAgICAgICB0aGlzLT5hZ2dyZWdhdGVfdmFsdWUoKSk7Ci0gICAgfQotCi0gIH0KLSAgLy8g
cmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0IG5h
bWUgPSAyOwotICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5uYW1lX3NpemUoKTsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCB0aGlzLT5uYW1lX3NpemUoKTsgaSsrKSB7Ci0gICAgdG90YWxfc2l6ZSAr
PQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1l
c3NhZ2VTaXplTm9WaXJ0dWFsKAotICAgICAgICB0aGlzLT5uYW1lKGkpKTsKLSAgfQotCi0gIGlm
IChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHRvdGFs
X3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6
OkNvbXB1dGVVbmtub3duRmllbGRzU2l6ZSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSk7Ci0g
IH0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9z
aXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgp
OwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpN
ZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29n
bGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbikKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZB
TFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgVW5p
bnRlcnByZXRlZE9wdGlvbiogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24+
KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29n
bGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbikKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2Fz
dF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKQotICAgIE1lcmdl
RnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246Ok1lcmdl
RnJvbShjb25zdCBVbmludGVycHJldGVkT3B0aW9uJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvbikKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9t
ID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgbmFtZV8uTWVyZ2VGcm9tKGZy
b20ubmFtZV8pOwotICBpZiAoZnJvbS5faGFzX2JpdHNfWzEgLyAzMl0gJiAoMHhmZnUgPDwgKDEg
JSAzMikpKSB7Ci0gICAgaWYgKGZyb20uaGFzX2lkZW50aWZpZXJfdmFsdWUoKSkgewotICAgICAg
c2V0X2hhc19pZGVudGlmaWVyX3ZhbHVlKCk7Ci0gICAgICBpZGVudGlmaWVyX3ZhbHVlXy5Bc3Np
Z25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksIGZyb20uaWRlbnRpZmllcl92YWx1ZV8pOwotICAgIH0KLSAgICBp
ZiAoZnJvbS5oYXNfcG9zaXRpdmVfaW50X3ZhbHVlKCkpIHsKLSAgICAgIHNldF9wb3NpdGl2ZV9p
bnRfdmFsdWUoZnJvbS5wb3NpdGl2ZV9pbnRfdmFsdWUoKSk7Ci0gICAgfQotICAgIGlmIChmcm9t
Lmhhc19uZWdhdGl2ZV9pbnRfdmFsdWUoKSkgewotICAgICAgc2V0X25lZ2F0aXZlX2ludF92YWx1
ZShmcm9tLm5lZ2F0aXZlX2ludF92YWx1ZSgpKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX2Rv
dWJsZV92YWx1ZSgpKSB7Ci0gICAgICBzZXRfZG91YmxlX3ZhbHVlKGZyb20uZG91YmxlX3ZhbHVl
KCkpOwotICAgIH0KLSAgICBpZiAoZnJvbS5oYXNfc3RyaW5nX3ZhbHVlKCkpIHsKLSAgICAgIHNl
dF9oYXNfc3RyaW5nX3ZhbHVlKCk7Ci0gICAgICBzdHJpbmdfdmFsdWVfLkFzc2lnbldpdGhEZWZh
dWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSwgZnJvbS5zdHJpbmdfdmFsdWVfKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX2Fn
Z3JlZ2F0ZV92YWx1ZSgpKSB7Ci0gICAgICBzZXRfaGFzX2FnZ3JlZ2F0ZV92YWx1ZSgpOwotICAg
ICAgYWdncmVnYXRlX3ZhbHVlXy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20uYWdncmVnYXRl
X3ZhbHVlXyk7Ci0gICAgfQotICB9Ci0gIGlmIChmcm9tLl9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2
ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5NZXJn
ZUZyb20oZnJvbS51bmtub3duX2ZpZWxkcygpKTsKLSAgfQotfQotCi12b2lkIFVuaW50ZXJwcmV0
ZWRPcHRpb246OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJv
bSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9z
dGFydDpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbikKLSAgaWYgKCZmcm9tID09
IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lk
IFVuaW50ZXJwcmV0ZWRPcHRpb246OkNvcHlGcm9tKGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24m
IGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19jb3B5
X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24pCi0gIGlmICgm
ZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0K
LQotYm9vbCBVbmludGVycHJldGVkT3B0aW9uOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0g
IGlmICghOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QWxsQXJlSW5pdGlhbGl6ZWQodGhp
cy0+bmFtZSgpKSkgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBVbmlu
dGVycHJldGVkT3B0aW9uOjpTd2FwKFVuaW50ZXJwcmV0ZWRPcHRpb24qIG90aGVyKSB7Ci0gIGlm
IChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIEludGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lk
IFVuaW50ZXJwcmV0ZWRPcHRpb246OkludGVybmFsU3dhcChVbmludGVycHJldGVkT3B0aW9uKiBv
dGhlcikgewotICBuYW1lXy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT5uYW1lXyk7Ci0gIGlkZW50
aWZpZXJfdmFsdWVfLlN3YXAoJm90aGVyLT5pZGVudGlmaWVyX3ZhbHVlXyk7Ci0gIHN0ZDo6c3dh
cChwb3NpdGl2ZV9pbnRfdmFsdWVfLCBvdGhlci0+cG9zaXRpdmVfaW50X3ZhbHVlXyk7Ci0gIHN0
ZDo6c3dhcChuZWdhdGl2ZV9pbnRfdmFsdWVfLCBvdGhlci0+bmVnYXRpdmVfaW50X3ZhbHVlXyk7
Ci0gIHN0ZDo6c3dhcChkb3VibGVfdmFsdWVfLCBvdGhlci0+ZG91YmxlX3ZhbHVlXyk7Ci0gIHN0
cmluZ192YWx1ZV8uU3dhcCgmb3RoZXItPnN0cmluZ192YWx1ZV8pOwotICBhZ2dyZWdhdGVfdmFs
dWVfLlN3YXAoJm90aGVyLT5hZ2dyZWdhdGVfdmFsdWVfKTsKLSAgc3RkOjpzd2FwKF9oYXNfYml0
c19bMF0sIG90aGVyLT5faGFzX2JpdHNfWzBdKTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2Fw
KCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVf
LCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRh
dGEgVW5pbnRlcnByZXRlZE9wdGlvbjo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVm
X0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRh
IG1ldGFkYXRhOwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gVW5pbnRlcnByZXRlZE9wdGlvbl9k
ZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IFVuaW50ZXJwcmV0ZWRPcHRpb25f
cmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElO
RV9OT1RfSU5fSEVBREVSUwotLy8gVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydAotCi0vLyBy
ZXF1aXJlZCBzdHJpbmcgbmFtZV9wYXJ0ID0gMTsKLWJvb2wgVW5pbnRlcnByZXRlZE9wdGlvbl9O
YW1lUGFydDo6aGFzX25hbWVfcGFydCgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBd
ICYgMHgwMDAwMDAwMXUpICE9IDA7Ci19Ci12b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBh
cnQ6OnNldF9oYXNfbmFtZV9wYXJ0KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDF1
OwotfQotdm9pZCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpjbGVhcl9oYXNfbmFtZV9w
YXJ0KCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAxdTsKLX0KLXZvaWQgVW5pbnRl
cnByZXRlZE9wdGlvbl9OYW1lUGFydDo6Y2xlYXJfbmFtZV9wYXJ0KCkgewotICBuYW1lX3BhcnRf
LkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX25hbWVfcGFydCgpOwotfQot
IGNvbnN0IDo6c3RkOjpzdHJpbmcmIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6Om5hbWVf
cGFydCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpn
b29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5uYW1lX3BhcnQpCi0g
IHJldHVybiBuYW1lX3BhcnRfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIFVuaW50ZXJwcmV0
ZWRPcHRpb25fTmFtZVBhcnQ6OnNldF9uYW1lX3BhcnQoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFs
dWUpIHsKLSAgc2V0X2hhc19uYW1lX3BhcnQoKTsKLSAgbmFtZV9wYXJ0Xy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0Lm5hbWVfcGFydCkKLX0KLSB2
b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6OnNldF9uYW1lX3BhcnQoY29uc3QgY2hh
ciogdmFsdWUpIHsKLSAgc2V0X2hhc19uYW1lX3BhcnQoKTsKLSAgbmFtZV9wYXJ0Xy5TZXROb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24u
TmFtZVBhcnQubmFtZV9wYXJ0KQotfQotIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFy
dDo6c2V0X25hbWVfcGFydChjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0
X2hhc19uYW1lX3BhcnQoKTsKLSAgbmFtZV9wYXJ0Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6
c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUu
cHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5uYW1lX3BhcnQpCi19Ci0gOjpz
dGQ6OnN0cmluZyogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6bXV0YWJsZV9uYW1lX3Bh
cnQoKSB7Ci0gIHNldF9oYXNfbmFtZV9wYXJ0KCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5h
bWVQYXJ0Lm5hbWVfcGFydCkKLSAgcmV0dXJuIG5hbWVfcGFydF8uTXV0YWJsZU5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpyZWxl
YXNlX25hbWVfcGFydCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Jl
bGVhc2U6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQubmFtZV9w
YXJ0KQotICBjbGVhcl9oYXNfbmFtZV9wYXJ0KCk7Ci0gIHJldHVybiBuYW1lX3BhcnRfLlJlbGVh
c2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0Ojpz
ZXRfYWxsb2NhdGVkX25hbWVfcGFydCg6OnN0ZDo6c3RyaW5nKiBuYW1lX3BhcnQpIHsKLSAgaWYg
KG5hbWVfcGFydCAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19uYW1lX3BhcnQoKTsKLSAgfSBlbHNl
IHsKLSAgICBjbGVhcl9oYXNfbmFtZV9wYXJ0KCk7Ci0gIH0KLSAgbmFtZV9wYXJ0Xy5TZXRBbGxv
Y2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgbmFtZV9wYXJ0KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRp
b24uTmFtZVBhcnQubmFtZV9wYXJ0KQotfQotCi0vLyByZXF1aXJlZCBib29sIGlzX2V4dGVuc2lv
biA9IDI7Ci1ib29sIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6Omhhc19pc19leHRlbnNp
b24oKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDJ1KSAhPSAw
OwotfQotdm9pZCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpzZXRfaGFzX2lzX2V4dGVu
c2lvbigpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0KLXZvaWQgVW5pbnRl
cnByZXRlZE9wdGlvbl9OYW1lUGFydDo6Y2xlYXJfaGFzX2lzX2V4dGVuc2lvbigpIHsKLSAgX2hh
c19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMnU7Ci19Ci12b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb25f
TmFtZVBhcnQ6OmNsZWFyX2lzX2V4dGVuc2lvbigpIHsKLSAgaXNfZXh0ZW5zaW9uXyA9IGZhbHNl
OwotICBjbGVhcl9oYXNfaXNfZXh0ZW5zaW9uKCk7Ci19Ci0gYm9vbCBVbmludGVycHJldGVkT3B0
aW9uX05hbWVQYXJ0Ojppc19leHRlbnNpb24oKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24u
TmFtZVBhcnQuaXNfZXh0ZW5zaW9uKQotICByZXR1cm4gaXNfZXh0ZW5zaW9uXzsKLX0KLSB2b2lk
IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6OnNldF9pc19leHRlbnNpb24oYm9vbCB2YWx1
ZSkgewotICBzZXRfaGFzX2lzX2V4dGVuc2lvbigpOwotICBpc19leHRlbnNpb25fID0gdmFsdWU7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVm
LlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQuaXNfZXh0ZW5zaW9uKQotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLS8vIFVuaW50ZXJwcmV0ZWRPcHRpb24KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5w
cm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0IG5hbWUgPSAyOwotaW50IFVuaW50
ZXJwcmV0ZWRPcHRpb246Om5hbWVfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG5hbWVfLnNpemUo
KTsKLX0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfbmFtZSgpIHsKLSAgbmFtZV8u
Q2xlYXIoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlv
bl9OYW1lUGFydCYgVW5pbnRlcnByZXRlZE9wdGlvbjo6bmFtZShpbnQgaW5kZXgpIGNvbnN0IHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYu
VW5pbnRlcnByZXRlZE9wdGlvbi5uYW1lKQotICByZXR1cm4gbmFtZV8uR2V0KGluZGV4KTsKLX0K
LTo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCogVW5pbnRl
cnByZXRlZE9wdGlvbjo6bXV0YWJsZV9uYW1lKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRl
ZE9wdGlvbi5uYW1lKQotICByZXR1cm4gbmFtZV8uTXV0YWJsZShpbmRleCk7Ci19Ci06Omdvb2ds
ZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQqIFVuaW50ZXJwcmV0ZWRP
cHRpb246OmFkZF9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
YWRkOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLm5hbWUpCi0gIHJldHVybiBu
YW1lXy5BZGQoKTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpn
b29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0ID4qCi1VbmludGVy
cHJldGVkT3B0aW9uOjptdXRhYmxlX25hbWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRp
b24ubmFtZSkKLSAgcmV0dXJuICZuYW1lXzsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9u
X05hbWVQYXJ0ID4mCi1VbmludGVycHJldGVkT3B0aW9uOjpuYW1lKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuVW5pbnRl
cnByZXRlZE9wdGlvbi5uYW1lKQotICByZXR1cm4gbmFtZV87Ci19Ci0KLS8vIG9wdGlvbmFsIHN0
cmluZyBpZGVudGlmaWVyX3ZhbHVlID0gMzsKLWJvb2wgVW5pbnRlcnByZXRlZE9wdGlvbjo6aGFz
X2lkZW50aWZpZXJfdmFsdWUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4
MDAwMDAwMDJ1KSAhPSAwOwotfQotdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRfaGFzX2lk
ZW50aWZpZXJfdmFsdWUoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwMnU7Ci19Ci12
b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OmNsZWFyX2hhc19pZGVudGlmaWVyX3ZhbHVlKCkgewot
ICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAydTsKLX0KLXZvaWQgVW5pbnRlcnByZXRlZE9w
dGlvbjo6Y2xlYXJfaWRlbnRpZmllcl92YWx1ZSgpIHsKLSAgaWRlbnRpZmllcl92YWx1ZV8uQ2xl
YXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfaWRlbnRpZmllcl92YWx1ZSgpOwot
fQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIFVuaW50ZXJwcmV0ZWRPcHRpb246OmlkZW50aWZpZXJf
dmFsdWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6
Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uaWRlbnRpZmllcl92YWx1ZSkKLSAg
cmV0dXJuIGlkZW50aWZpZXJfdmFsdWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIFVuaW50
ZXJwcmV0ZWRPcHRpb246OnNldF9pZGVudGlmaWVyX3ZhbHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcm
IHZhbHVlKSB7Ci0gIHNldF9oYXNfaWRlbnRpZmllcl92YWx1ZSgpOwotICBpZGVudGlmaWVyX3Zh
bHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmlkZW50aWZp
ZXJfdmFsdWUpCi19Ci0gdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRfaWRlbnRpZmllcl92
YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFzX2lkZW50aWZpZXJfdmFsdWUoKTsK
LSAgaWRlbnRpZmllcl92YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUp
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5w
cm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmlkZW50aWZpZXJfdmFsdWUpCi19Ci0gdm9pZCBV
bmludGVycHJldGVkT3B0aW9uOjpzZXRfaWRlbnRpZmllcl92YWx1ZShjb25zdCBjaGFyKiB2YWx1
ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19pZGVudGlmaWVyX3ZhbHVlKCk7Ci0gIGlkZW50
aWZpZXJfdmFsdWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJl
dGVkT3B0aW9uLmlkZW50aWZpZXJfdmFsdWUpCi19Ci0gOjpzdGQ6OnN0cmluZyogVW5pbnRlcnBy
ZXRlZE9wdGlvbjo6bXV0YWJsZV9pZGVudGlmaWVyX3ZhbHVlKCkgewotICBzZXRfaGFzX2lkZW50
aWZpZXJfdmFsdWUoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFi
bGU6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uaWRlbnRpZmllcl92YWx1ZSkK
LSAgcmV0dXJuIGlkZW50aWZpZXJfdmFsdWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpz
dGQ6OnN0cmluZyogVW5pbnRlcnByZXRlZE9wdGlvbjo6cmVsZWFzZV9pZGVudGlmaWVyX3ZhbHVl
KCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUu
cHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5pZGVudGlmaWVyX3ZhbHVlKQotICBjbGVhcl9o
YXNfaWRlbnRpZmllcl92YWx1ZSgpOwotICByZXR1cm4gaWRlbnRpZmllcl92YWx1ZV8uUmVsZWFz
ZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9hbGxvY2F0
ZWRfaWRlbnRpZmllcl92YWx1ZSg6OnN0ZDo6c3RyaW5nKiBpZGVudGlmaWVyX3ZhbHVlKSB7Ci0g
IGlmIChpZGVudGlmaWVyX3ZhbHVlICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX2lkZW50aWZpZXJf
dmFsdWUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfaWRlbnRpZmllcl92YWx1ZSgpOwot
ICB9Ci0gIGlkZW50aWZpZXJfdmFsdWVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBpZGVudGlm
aWVyX3ZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxv
Y2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uaWRlbnRpZmllcl92YWx1
ZSkKLX0KLQotLy8gb3B0aW9uYWwgdWludDY0IHBvc2l0aXZlX2ludF92YWx1ZSA9IDQ7Ci1ib29s
IFVuaW50ZXJwcmV0ZWRPcHRpb246Omhhc19wb3NpdGl2ZV9pbnRfdmFsdWUoKSBjb25zdCB7Ci0g
IHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDR1KSAhPSAwOwotfQotdm9pZCBVbmlu
dGVycHJldGVkT3B0aW9uOjpzZXRfaGFzX3Bvc2l0aXZlX2ludF92YWx1ZSgpIHsKLSAgX2hhc19i
aXRzX1swXSB8PSAweDAwMDAwMDA0dTsKLX0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xl
YXJfaGFzX3Bvc2l0aXZlX2ludF92YWx1ZSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAw
MDAwNHU7Ci19Ci12b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OmNsZWFyX3Bvc2l0aXZlX2ludF92
YWx1ZSgpIHsKLSAgcG9zaXRpdmVfaW50X3ZhbHVlXyA9IEdPT0dMRV9VTE9OR0xPTkcoMCk7Ci0g
IGNsZWFyX2hhc19wb3NpdGl2ZV9pbnRfdmFsdWUoKTsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQ2NCBVbmludGVycHJldGVkT3B0aW9uOjpwb3NpdGl2ZV9pbnRfdmFsdWUoKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVm
LlVuaW50ZXJwcmV0ZWRPcHRpb24ucG9zaXRpdmVfaW50X3ZhbHVlKQotICByZXR1cm4gcG9zaXRp
dmVfaW50X3ZhbHVlXzsKLX0KLSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9wb3NpdGl2
ZV9pbnRfdmFsdWUoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50NjQgdmFsdWUpIHsKLSAgc2V0X2hh
c19wb3NpdGl2ZV9pbnRfdmFsdWUoKTsKLSAgcG9zaXRpdmVfaW50X3ZhbHVlXyA9IHZhbHVlOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5V
bmludGVycHJldGVkT3B0aW9uLnBvc2l0aXZlX2ludF92YWx1ZSkKLX0KLQotLy8gb3B0aW9uYWwg
aW50NjQgbmVnYXRpdmVfaW50X3ZhbHVlID0gNTsKLWJvb2wgVW5pbnRlcnByZXRlZE9wdGlvbjo6
aGFzX25lZ2F0aXZlX2ludF92YWx1ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBd
ICYgMHgwMDAwMDAwOHUpICE9IDA7Ci19Ci12b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9o
YXNfbmVnYXRpdmVfaW50X3ZhbHVlKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDh1
OwotfQotdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpjbGVhcl9oYXNfbmVnYXRpdmVfaW50X3Zh
bHVlKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDA4dTsKLX0KLXZvaWQgVW5pbnRl
cnByZXRlZE9wdGlvbjo6Y2xlYXJfbmVnYXRpdmVfaW50X3ZhbHVlKCkgewotICBuZWdhdGl2ZV9p
bnRfdmFsdWVfID0gR09PR0xFX0xPTkdMT05HKDApOwotICBjbGVhcl9oYXNfbmVnYXRpdmVfaW50
X3ZhbHVlKCk7Ci19Ci0gOjpnb29nbGU6OnByb3RvYnVmOjppbnQ2NCBVbmludGVycHJldGVkT3B0
aW9uOjpuZWdhdGl2ZV9pbnRfdmFsdWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ubmVn
YXRpdmVfaW50X3ZhbHVlKQotICByZXR1cm4gbmVnYXRpdmVfaW50X3ZhbHVlXzsKLX0KLSB2b2lk
IFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9uZWdhdGl2ZV9pbnRfdmFsdWUoOjpnb29nbGU6OnBy
b3RvYnVmOjppbnQ2NCB2YWx1ZSkgewotICBzZXRfaGFzX25lZ2F0aXZlX2ludF92YWx1ZSgpOwot
ICBuZWdhdGl2ZV9pbnRfdmFsdWVfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ubmVnYXRp
dmVfaW50X3ZhbHVlKQotfQotCi0vLyBvcHRpb25hbCBkb3VibGUgZG91YmxlX3ZhbHVlID0gNjsK
LWJvb2wgVW5pbnRlcnByZXRlZE9wdGlvbjo6aGFzX2RvdWJsZV92YWx1ZSgpIGNvbnN0IHsKLSAg
cmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAxMHUpICE9IDA7Ci19Ci12b2lkIFVuaW50
ZXJwcmV0ZWRPcHRpb246OnNldF9oYXNfZG91YmxlX3ZhbHVlKCkgewotICBfaGFzX2JpdHNfWzBd
IHw9IDB4MDAwMDAwMTB1OwotfQotdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpjbGVhcl9oYXNf
ZG91YmxlX3ZhbHVlKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDEwdTsKLX0KLXZv
aWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfZG91YmxlX3ZhbHVlKCkgewotICBkb3VibGVf
dmFsdWVfID0gMDsKLSAgY2xlYXJfaGFzX2RvdWJsZV92YWx1ZSgpOwotfQotIGRvdWJsZSBVbmlu
dGVycHJldGVkT3B0aW9uOjpkb3VibGVfdmFsdWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRp
b24uZG91YmxlX3ZhbHVlKQotICByZXR1cm4gZG91YmxlX3ZhbHVlXzsKLX0KLSB2b2lkIFVuaW50
ZXJwcmV0ZWRPcHRpb246OnNldF9kb3VibGVfdmFsdWUoZG91YmxlIHZhbHVlKSB7Ci0gIHNldF9o
YXNfZG91YmxlX3ZhbHVlKCk7Ci0gIGRvdWJsZV92YWx1ZV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRl
ZE9wdGlvbi5kb3VibGVfdmFsdWUpCi19Ci0KLS8vIG9wdGlvbmFsIGJ5dGVzIHN0cmluZ192YWx1
ZSA9IDc7Ci1ib29sIFVuaW50ZXJwcmV0ZWRPcHRpb246Omhhc19zdHJpbmdfdmFsdWUoKSBjb25z
dCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMjB1KSAhPSAwOwotfQotdm9p
ZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRfaGFzX3N0cmluZ192YWx1ZSgpIHsKLSAgX2hhc19i
aXRzX1swXSB8PSAweDAwMDAwMDIwdTsKLX0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xl
YXJfaGFzX3N0cmluZ192YWx1ZSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAyMHU7
Ci19Ci12b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OmNsZWFyX3N0cmluZ192YWx1ZSgpIHsKLSAg
c3RyaW5nX3ZhbHVlXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc19zdHJp
bmdfdmFsdWUoKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBVbmludGVycHJldGVkT3B0aW9u
OjpzdHJpbmdfdmFsdWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc3RyaW5nX3ZhbHVl
KQotICByZXR1cm4gc3RyaW5nX3ZhbHVlXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBVbmlu
dGVycHJldGVkT3B0aW9uOjpzZXRfc3RyaW5nX3ZhbHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZh
bHVlKSB7Ci0gIHNldF9oYXNfc3RyaW5nX3ZhbHVlKCk7Ci0gIHN0cmluZ192YWx1ZV8uU2V0Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dDpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zdHJpbmdfdmFsdWUpCi19Ci0g
dm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRfc3RyaW5nX3ZhbHVlKGNvbnN0IGNoYXIqIHZh
bHVlKSB7Ci0gIHNldF9oYXNfc3RyaW5nX3ZhbHVlKCk7Ci0gIHN0cmluZ192YWx1ZV8uU2V0Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9u
LnN0cmluZ192YWx1ZSkKLX0KLSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9zdHJpbmdf
dmFsdWUoY29uc3Qgdm9pZCogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfc3RyaW5n
X3ZhbHVlKCk7Ci0gIHN0cmluZ192YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6
c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3Rv
YnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc3RyaW5nX3ZhbHVlKQotfQotIDo6c3RkOjpzdHJpbmcq
IFVuaW50ZXJwcmV0ZWRPcHRpb246Om11dGFibGVfc3RyaW5nX3ZhbHVlKCkgewotICBzZXRfaGFz
X3N0cmluZ192YWx1ZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZTpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zdHJpbmdfdmFsdWUpCi0g
IHJldHVybiBzdHJpbmdfdmFsdWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0
cmluZyogVW5pbnRlcnByZXRlZE9wdGlvbjo6cmVsZWFzZV9zdHJpbmdfdmFsdWUoKSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5V
bmludGVycHJldGVkT3B0aW9uLnN0cmluZ192YWx1ZSkKLSAgY2xlYXJfaGFzX3N0cmluZ192YWx1
ZSgpOwotICByZXR1cm4gc3RyaW5nX3ZhbHVlXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZv
aWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6c2V0X2FsbG9jYXRlZF9zdHJpbmdfdmFsdWUoOjpzdGQ6
OnN0cmluZyogc3RyaW5nX3ZhbHVlKSB7Ci0gIGlmIChzdHJpbmdfdmFsdWUgIT0gTlVMTCkgewot
ICAgIHNldF9oYXNfc3RyaW5nX3ZhbHVlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX3N0
cmluZ192YWx1ZSgpOwotICB9Ci0gIHN0cmluZ192YWx1ZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCksIHN0cmluZ192YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9z
ZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnN0cmluZ192
YWx1ZSkKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGFnZ3JlZ2F0ZV92YWx1ZSA9IDg7Ci1ib29s
IFVuaW50ZXJwcmV0ZWRPcHRpb246Omhhc19hZ2dyZWdhdGVfdmFsdWUoKSBjb25zdCB7Ci0gIHJl
dHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwNDB1KSAhPSAwOwotfQotdm9pZCBVbmludGVy
cHJldGVkT3B0aW9uOjpzZXRfaGFzX2FnZ3JlZ2F0ZV92YWx1ZSgpIHsKLSAgX2hhc19iaXRzX1sw
XSB8PSAweDAwMDAwMDQwdTsKLX0KLXZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfaGFz
X2FnZ3JlZ2F0ZV92YWx1ZSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDA0MHU7Ci19
Ci12b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OmNsZWFyX2FnZ3JlZ2F0ZV92YWx1ZSgpIHsKLSAg
YWdncmVnYXRlX3ZhbHVlXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc19h
Z2dyZWdhdGVfdmFsdWUoKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBVbmludGVycHJldGVk
T3B0aW9uOjphZ2dyZWdhdGVfdmFsdWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uYWdn
cmVnYXRlX3ZhbHVlKQotICByZXR1cm4gYWdncmVnYXRlX3ZhbHVlXy5HZXROb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci0gdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRfYWdncmVnYXRlX3ZhbHVlKGNvbnN0
IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfYWdncmVnYXRlX3ZhbHVlKCk7Ci0g
IGFnZ3JlZ2F0ZV92YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9w
dGlvbi5hZ2dyZWdhdGVfdmFsdWUpCi19Ci0gdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRf
YWdncmVnYXRlX3ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfYWdncmVnYXRl
X3ZhbHVlKCk7Ci0gIGFnZ3JlZ2F0ZV92YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJp
bmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFy
Omdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmFnZ3JlZ2F0ZV92YWx1ZSkKLX0K
LSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9hZ2dyZWdhdGVfdmFsdWUoY29uc3QgY2hh
ciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfYWdncmVnYXRlX3ZhbHVlKCk7Ci0g
IGFnZ3JlZ2F0ZV92YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLlVuaW50
ZXJwcmV0ZWRPcHRpb24uYWdncmVnYXRlX3ZhbHVlKQotfQotIDo6c3RkOjpzdHJpbmcqIFVuaW50
ZXJwcmV0ZWRPcHRpb246Om11dGFibGVfYWdncmVnYXRlX3ZhbHVlKCkgewotICBzZXRfaGFzX2Fn
Z3JlZ2F0ZV92YWx1ZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZTpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5hZ2dyZWdhdGVfdmFsdWUp
Ci0gIHJldHVybiBhZ2dyZWdhdGVfdmFsdWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpz
dGQ6OnN0cmluZyogVW5pbnRlcnByZXRlZE9wdGlvbjo6cmVsZWFzZV9hZ2dyZWdhdGVfdmFsdWUo
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5w
cm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmFnZ3JlZ2F0ZV92YWx1ZSkKLSAgY2xlYXJfaGFz
X2FnZ3JlZ2F0ZV92YWx1ZSgpOwotICByZXR1cm4gYWdncmVnYXRlX3ZhbHVlXy5SZWxlYXNlTm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotfQotIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6c2V0X2FsbG9jYXRlZF9h
Z2dyZWdhdGVfdmFsdWUoOjpzdGQ6OnN0cmluZyogYWdncmVnYXRlX3ZhbHVlKSB7Ci0gIGlmIChh
Z2dyZWdhdGVfdmFsdWUgIT0gTlVMTCkgewotICAgIHNldF9oYXNfYWdncmVnYXRlX3ZhbHVlKCk7
Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX2FnZ3JlZ2F0ZV92YWx1ZSgpOwotICB9Ci0gIGFn
Z3JlZ2F0ZV92YWx1ZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGFnZ3JlZ2F0ZV92YWx1ZSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2ds
ZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmFnZ3JlZ2F0ZV92YWx1ZSkKLX0KLQotI2Vu
ZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ci0jaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBT
b3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6a1BhdGhGaWVsZE51bWJlcjsKLWNvbnN0IGludCBTb3Vy
Y2VDb2RlSW5mb19Mb2NhdGlvbjo6a1NwYW5GaWVsZE51bWJlcjsKLWNvbnN0IGludCBTb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbjo6a0xlYWRpbmdDb21tZW50c0ZpZWxkTnVtYmVyOwotY29uc3QgaW50
IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjprVHJhaWxpbmdDb21tZW50c0ZpZWxkTnVtYmVyOwot
Y29uc3QgaW50IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjprTGVhZGluZ0RldGFjaGVkQ29tbWVu
dHNGaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVS
ID49IDE5MDAKLQotU291cmNlQ29kZUluZm9fTG9jYXRpb246OlNvdXJjZUNvZGVJbmZvX0xvY2F0
aW9uKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFk
YXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbikK
LX0KLQotdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6SW5pdEFzRGVmYXVsdEluc3RhbmNl
KCkgewotfQotCi1Tb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6U291cmNlQ29kZUluZm9fTG9jYXRp
b24oY29uc3QgU291cmNlQ29kZUluZm9fTG9jYXRpb24mIGZyb20pCi0gIDogOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNo
YXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9j
YXRpb24pCi19Ci0KLXZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OlNoYXJlZEN0b3IoKSB7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCk7Ci0gIF9j
YWNoZWRfc2l6ZV8gPSAwOwotICBsZWFkaW5nX2NvbW1lbnRzXy5VbnNhZmVTZXREZWZhdWx0KCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSk7Ci0gIHRyYWlsaW5nX2NvbW1lbnRzXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIDo6bWVt
c2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci19Ci0KLVNvdXJjZUNvZGVJ
bmZvX0xvY2F0aW9uOjp+U291cmNlQ29kZUluZm9fTG9jYXRpb24oKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5m
by5Mb2NhdGlvbikKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lkIFNvdXJjZUNvZGVJbmZvX0xv
Y2F0aW9uOjpTaGFyZWREdG9yKCkgewotICBsZWFkaW5nX2NvbW1lbnRzXy5EZXN0cm95Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotICB0cmFpbGluZ19jb21tZW50c18uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgaWYg
KHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIFNvdXJjZUNvZGVJ
bmZvX0xvY2F0aW9uOjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9T
QUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwot
ICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RGVzY3JpcHRvciogU291cmNlQ29kZUluZm9fTG9jYXRpb246OmRlc2NyaXB0
b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gU291
cmNlQ29kZUluZm9fTG9jYXRpb25fZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IFNvdXJjZUNvZGVJ
bmZvX0xvY2F0aW9uJiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6ZGVmYXVsdF9pbnN0YW5jZSgp
IHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29v
Z2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0
X2luc3RhbmNlXzsKLX0KLQotU291cmNlQ29kZUluZm9fTG9jYXRpb24qIFNvdXJjZUNvZGVJbmZv
X0xvY2F0aW9uOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLVNvdXJjZUNvZGVJbmZvX0xv
Y2F0aW9uKiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6
QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKiBuID0gbmV3
IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOwotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFy
ZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgU291cmNlQ29kZUluZm9f
TG9jYXRpb246OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2Vf
Y2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uKQotICBp
ZiAoX2hhc19iaXRzX1swIC8gMzJdICYgMTJ1KSB7Ci0gICAgaWYgKGhhc19sZWFkaW5nX2NvbW1l
bnRzKCkpIHsKLSAgICAgIGxlYWRpbmdfY29tbWVudHNfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTsKLSAgICB9Ci0gICAgaWYgKGhhc190cmFpbGluZ19jb21tZW50cygpKSB7Ci0gICAgICB0cmFp
bGluZ19jb21tZW50c18uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICAgIH0KLSAgfQotICBw
YXRoXy5DbGVhcigpOwotICBzcGFuXy5DbGVhcigpOwotICBsZWFkaW5nX2RldGFjaGVkX2NvbW1l
bnRzXy5DbGVhcigpOwotICA6Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXplb2YoX2hhc19iaXRz
XykpOwotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsK
LSAgICBtdXRhYmxlX3Vua25vd25fZmllbGRzKCktPkNsZWFyKCk7Ci0gIH0KLX0KLQotYm9vbCBT
b3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0jZGVm
aW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUoRVhQUkVTU0lPTikp
IGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpnb29nbGUucHJvdG9idWYuU291cmNl
Q29kZUluZm8uTG9jYXRpb24pCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29n
bGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYo
MTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxl
X3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gcmVwZWF0ZWQg
aW50MzIgcGF0aCA9IDEgW3BhY2tlZCA9IHRydWVdOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAg
IGlmICh0YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUGFja2VkUHJpbWl0aXZlPAotICAgICAgICAgICAg
ICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0lOVDMyPigKLSAgICAgICAgICAgICAgICAgaW5w
dXQsIHRoaXMtPm11dGFibGVfcGF0aCgpKSkpOwotICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSA4
KSB7Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6UmVhZFJlcGVhdGVkUHJpbWl0aXZlTm9JbmxpbmU8Ci0gICAgICAgICAgICAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfSU5UMzI+KAotICAgICAgICAgICAgICAgICAxLCAxMCwg
aW5wdXQsIHRoaXMtPm11dGFibGVfcGF0aCgpKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5F
eHBlY3RUYWcoMTgpKSBnb3RvIHBhcnNlX3NwYW47Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
Ci0gICAgICAvLyByZXBlYXRlZCBpbnQzMiBzcGFuID0gMiBbcGFja2VkID0gdHJ1ZV07Ci0gICAg
ICBjYXNlIDI6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxOCkgewotICAgICAgICAgcGFyc2Vfc3Bh
bjoKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpSZWFkUGFja2VkUHJpbWl0aXZlPAotICAgICAgICAgICAgICAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50MzIsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpUWVBFX0lOVDMyPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFi
bGVfc3BhbigpKSkpOwotICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAxNikgewotICAgICAgICAg
IERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRS
ZXBlYXRlZFByaW1pdGl2ZU5vSW5saW5lPAotICAgICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50MzIsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpUWVBFX0lOVDMyPigKLSAgICAgICAgICAgICAgICAgMSwgMTgsIGlucHV0LCB0aGlzLT5t
dXRhYmxlX3NwYW4oKSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRs
ZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDI2KSkg
Z290byBwYXJzZV9sZWFkaW5nX2NvbW1lbnRzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQot
ICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIGxlYWRpbmdfY29tbWVudHMgPSAzOwotICAgICAgY2Fz
ZSAzOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMjYpIHsKLSAgICAgICAgIHBhcnNlX2xlYWRpbmdf
Y29tbWVudHM6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5t
dXRhYmxlX2xlYWRpbmdfY29tbWVudHMoKSkpOwotICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAg
ICAgICAgICAgdGhpcy0+bGVhZGluZ19jb21tZW50cygpLmRhdGEoKSwgdGhpcy0+bGVhZGluZ19j
b21tZW50cygpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdDo6UEFSU0UsCi0gICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLlNv
dXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdfY29tbWVudHMiKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChpbnB1dC0+RXhwZWN0VGFnKDM0KSkgZ290byBwYXJzZV90cmFpbGluZ19jb21tZW50czsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyB0cmFpbGlu
Z19jb21tZW50cyA9IDQ7Ci0gICAgICBjYXNlIDQ6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAzNCkg
ewotICAgICAgICAgcGFyc2VfdHJhaWxpbmdfY29tbWVudHM6Ci0gICAgICAgICAgRE9fKDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAg
ICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5tdXRhYmxlX3RyYWlsaW5nX2NvbW1lbnRzKCkpKTsK
LSAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJp
ZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgICAgICAgIHRoaXMtPnRyYWlsaW5nX2NvbW1l
bnRzKCkuZGF0YSgpLCB0aGlzLT50cmFpbGluZ19jb21tZW50cygpLmxlbmd0aCgpLAotICAgICAg
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6UEFSU0UsCi0g
ICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnRyYWls
aW5nX2NvbW1lbnRzIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVf
dW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg1MCkpIGdv
dG8gcGFyc2VfbGVhZGluZ19kZXRhY2hlZF9jb21tZW50czsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIHJlcGVhdGVkIHN0cmluZyBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRz
ID0gNjsKLSAgICAgIGNhc2UgNjogewotICAgICAgICBpZiAodGFnID09IDUwKSB7Ci0gICAgICAg
ICBwYXJzZV9sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzOgotICAgICAgICAgIERPXyg6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAg
ICAgICAgICAgICBpbnB1dCwgdGhpcy0+YWRkX2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoKSkp
OwotICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZl
cmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgICAgICAgdGhpcy0+bGVhZGluZ19kZXRh
Y2hlZF9jb21tZW50cyh0aGlzLT5sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzX3NpemUoKSAtIDEp
LmRhdGEoKSwKLSAgICAgICAgICAgIHRoaXMtPmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHModGhp
cy0+bGVhZGluZ19kZXRhY2hlZF9jb21tZW50c19zaXplKCkgLSAxKS5sZW5ndGgoKSwKLSAgICAg
ICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlBBUlNFLAot
ICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFk
aW5nX2RldGFjaGVkX2NvbW1lbnRzIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290
byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRh
Zyg1MCkpIGdvdG8gcGFyc2VfbGVhZGluZ19kZXRhY2hlZF9jb21tZW50czsKLSAgICAgICAgaWYg
KGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAg
aWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9H
Uk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18o
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2tpcEZpZWxkKAotICAg
ICAgICAgICAgICBpbnB1dCwgdGFnLCBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUlu
Zm8uTG9jYXRpb24pCi0gIHJldHVybiB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KHBhcnNlX2ZhaWx1cmU6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZv
LkxvY2F0aW9uKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgU291cmNl
Q29kZUluZm9fTG9jYXRpb246OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uKQotICAvLyByZXBlYXRlZCBpbnQzMiBwYXRoID0gMSBb
cGFja2VkID0gdHJ1ZV07Ci0gIGlmICh0aGlzLT5wYXRoX3NpemUoKSA+IDApIHsKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVUYWcoMSwgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0xFTkdU
SF9ERUxJTUlURUQsIG91dHB1dCk7Ci0gICAgb3V0cHV0LT5Xcml0ZVZhcmludDMyKF9wYXRoX2Nh
Y2hlZF9ieXRlX3NpemVfKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPnBhdGhf
c2l6ZSgpOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6V3JpdGVJbnQzMk5vVGFnKAotICAgICAgdGhpcy0+cGF0aChpKSwgb3V0cHV0KTsK
LSAgfQotCi0gIC8vIHJlcGVhdGVkIGludDMyIHNwYW4gPSAyIFtwYWNrZWQgPSB0cnVlXTsKLSAg
aWYgKHRoaXMtPnNwYW5fc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVRhZygyLCA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCwgb3V0cHV0
KTsKLSAgICBvdXRwdXQtPldyaXRlVmFyaW50MzIoX3NwYW5fY2FjaGVkX2J5dGVfc2l6ZV8pOwot
ICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+c3Bhbl9zaXplKCk7IGkrKykgewotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUludDMy
Tm9UYWcoCi0gICAgICB0aGlzLT5zcGFuKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9u
YWwgc3RyaW5nIGxlYWRpbmdfY29tbWVudHMgPSAzOwotICBpZiAoaGFzX2xlYWRpbmdfY29tbWVu
dHMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZl
cmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAgdGhpcy0+bGVhZGluZ19jb21tZW50cygp
LmRhdGEoKSwgdGhpcy0+bGVhZGluZ19jb21tZW50cygpLmxlbmd0aCgpLAotICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdv
b2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFkaW5nX2NvbW1lbnRzIik7
Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRl
U3RyaW5nTWF5YmVBbGlhc2VkKAotICAgICAgMywgdGhpcy0+bGVhZGluZ19jb21tZW50cygpLCBv
dXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIHRyYWlsaW5nX2NvbW1lbnRzID0g
NDsKLSAgaWYgKGhhc190cmFpbGluZ19jb21tZW50cygpKSB7Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0g
ICAgICB0aGlzLT50cmFpbGluZ19jb21tZW50cygpLmRhdGEoKSwgdGhpcy0+dHJhaWxpbmdfY29t
bWVudHMoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUlu
Zm8uTG9jYXRpb24udHJhaWxpbmdfY29tbWVudHMiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAg
ICA0LCB0aGlzLT50cmFpbGluZ19jb21tZW50cygpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gcmVw
ZWF0ZWQgc3RyaW5nIGxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMgPSA2OwotICBmb3IgKGludCBp
ID0gMDsgaSA8IHRoaXMtPmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHNfc2l6ZSgpOyBpKyspIHsK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4
U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMo
aSkuZGF0YSgpLCB0aGlzLT5sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKGkpLmxlbmd0aCgpLAot
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpF
LAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFkaW5n
X2RldGFjaGVkX2NvbW1lbnRzIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nKAotICAgICAgNiwgdGhpcy0+bGVhZGluZ19kZXRh
Y2hlZF9jb21tZW50cyhpKSwgb3V0cHV0KTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRh
dGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHMoCi0gICAgICAgIHVua25v
d25fZmllbGRzKCksIG91dHB1dCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uKQot
fQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6
U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNl
cmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9j
YXRpb24pCi0gIC8vIHJlcGVhdGVkIGludDMyIHBhdGggPSAxIFtwYWNrZWQgPSB0cnVlXTsKLSAg
aWYgKHRoaXMtPnBhdGhfc2l6ZSgpID4gMCkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVRhZ1RvQXJyYXkoCi0gICAgICAx
LAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJ
UkVUWVBFX0xFTkdUSF9ERUxJTUlURUQsCi0gICAgICB0YXJnZXQpOwotICAgIHRhcmdldCA9IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVZhcmludDMyVG9B
cnJheSgKLSAgICAgIF9wYXRoX2NhY2hlZF9ieXRlX3NpemVfLCB0YXJnZXQpOwotICB9Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+cGF0aF9zaXplKCk7IGkrKykgewotICAgIHRhcmdldCA9
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdy
aXRlSW50MzJOb1RhZ1RvQXJyYXkodGhpcy0+cGF0aChpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8v
IHJlcGVhdGVkIGludDMyIHNwYW4gPSAyIFtwYWNrZWQgPSB0cnVlXTsKLSAgaWYgKHRoaXMtPnNw
YW5fc2l6ZSgpID4gMCkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVRhZ1RvQXJyYXkoCi0gICAgICAyLAotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0xFTkdU
SF9ERUxJTUlURUQsCi0gICAgICB0YXJnZXQpOwotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVZhcmludDMyVG9BcnJheSgKLSAgICAg
IF9zcGFuX2NhY2hlZF9ieXRlX3NpemVfLCB0YXJnZXQpOwotICB9Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgdGhpcy0+c3Bhbl9zaXplKCk7IGkrKykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlSW50MzJOb1Rh
Z1RvQXJyYXkodGhpcy0+c3BhbihpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0
cmluZyBsZWFkaW5nX2NvbW1lbnRzID0gMzsKLSAgaWYgKGhhc19sZWFkaW5nX2NvbW1lbnRzKCkp
IHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlV
VEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPmxlYWRpbmdfY29tbWVudHMoKS5kYXRh
KCksIHRoaXMtPmxlYWRpbmdfY29tbWVudHMoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUu
cHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ubGVhZGluZ19jb21tZW50cyIpOwotICAg
IHRhcmdldCA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVTdHJpbmdUb0FycmF5KAotICAgICAgICAzLCB0aGlzLT5sZWFkaW5nX2NvbW1l
bnRzKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgdHJhaWxpbmdfY29t
bWVudHMgPSA0OwotICBpZiAoaGFzX3RyYWlsaW5nX2NvbW1lbnRzKCkpIHsKLSAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRG
aWVsZCgKLSAgICAgIHRoaXMtPnRyYWlsaW5nX2NvbW1lbnRzKCkuZGF0YSgpLCB0aGlzLT50cmFp
bGluZ19jb21tZW50cygpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5Tb3Vy
Y2VDb2RlSW5mby5Mb2NhdGlvbi50cmFpbGluZ19jb21tZW50cyIpOwotICAgIHRhcmdldCA9Ci0g
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVT
dHJpbmdUb0FycmF5KAotICAgICAgICA0LCB0aGlzLT50cmFpbGluZ19jb21tZW50cygpLCB0YXJn
ZXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgc3RyaW5nIGxlYWRpbmdfZGV0YWNoZWRfY29tbWVu
dHMgPSA2OwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPmxlYWRpbmdfZGV0YWNoZWRfY29t
bWVudHNfc2l6ZSgpOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPmxlYWRp
bmdfZGV0YWNoZWRfY29tbWVudHMoaSkuZGF0YSgpLCB0aGlzLT5sZWFkaW5nX2RldGFjaGVkX2Nv
bW1lbnRzKGkpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2Rl
SW5mby5Mb2NhdGlvbi5sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzIik7Ci0gICAgdGFyZ2V0ID0g
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3Jp
dGVTdHJpbmdUb0FycmF5KDYsIHRoaXMtPmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoaSksIHRh
cmdldCk7Ci0gIH0KLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmll
bGRzKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzVG9BcnJheSgKLSAgICAgICAgdW5rbm93bl9m
aWVsZHMoKSwgdGFyZ2V0KTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2Vy
aWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRp
b24pCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6
Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9i
eXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uKQot
ICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgaWYgKF9oYXNfYml0c19bMiAvIDMyXSAmIDEydSkg
ewotICAgIC8vIG9wdGlvbmFsIHN0cmluZyBsZWFkaW5nX2NvbW1lbnRzID0gMzsKLSAgICBpZiAo
aGFzX2xlYWRpbmdfY29tbWVudHMoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0cmluZ1Np
emUoCi0gICAgICAgICAgdGhpcy0+bGVhZGluZ19jb21tZW50cygpKTsKLSAgICB9Ci0KLSAgICAv
LyBvcHRpb25hbCBzdHJpbmcgdHJhaWxpbmdfY29tbWVudHMgPSA0OwotICAgIGlmIChoYXNfdHJh
aWxpbmdfY29tbWVudHMoKSkgewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0cmluZ1NpemUoCi0g
ICAgICAgICAgdGhpcy0+dHJhaWxpbmdfY29tbWVudHMoKSk7Ci0gICAgfQotCi0gIH0KLSAgLy8g
cmVwZWF0ZWQgaW50MzIgcGF0aCA9IDEgW3BhY2tlZCA9IHRydWVdOwotICB7Ci0gICAgaW50IGRh
dGFfc2l6ZSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT5wYXRoX3NpemUoKTsg
aSsrKSB7Ci0gICAgICBkYXRhX3NpemUgKz0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OgotICAgICAgICBJbnQzMlNpemUodGhpcy0+cGF0aChpKSk7Ci0gICAg
fQotICAgIGlmIChkYXRhX3NpemUgPiAwKSB7Ci0gICAgICB0b3RhbF9zaXplICs9IDEgKwotICAg
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6SW50MzJT
aXplKGRhdGFfc2l6ZSk7Ci0gICAgfQotICAgIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVT
X0JFR0lOKCk7Ci0gICAgX3BhdGhfY2FjaGVkX2J5dGVfc2l6ZV8gPSBkYXRhX3NpemU7Ci0gICAg
R09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gICAgdG90YWxfc2l6ZSArPSBk
YXRhX3NpemU7Ci0gIH0KLQotICAvLyByZXBlYXRlZCBpbnQzMiBzcGFuID0gMiBbcGFja2VkID0g
dHJ1ZV07Ci0gIHsKLSAgICBpbnQgZGF0YV9zaXplID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IHRoaXMtPnNwYW5fc2l6ZSgpOyBpKyspIHsKLSAgICAgIGRhdGFfc2l6ZSArPSA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICAgIEludDMyU2l6
ZSh0aGlzLT5zcGFuKGkpKTsKLSAgICB9Ci0gICAgaWYgKGRhdGFfc2l6ZSA+IDApIHsKLSAgICAg
IHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpJbnQzMlNpemUoZGF0YV9zaXplKTsKLSAgICB9Ci0gICAgR09PR0xF
X1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgICBfc3Bhbl9jYWNoZWRfYnl0ZV9z
aXplXyA9IGRhdGFfc2l6ZTsKLSAgICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQo
KTsKLSAgICB0b3RhbF9zaXplICs9IGRhdGFfc2l6ZTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIHN0
cmluZyBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzID0gNjsKLSAgdG90YWxfc2l6ZSArPSAxICog
dGhpcy0+bGVhZGluZ19kZXRhY2hlZF9jb21tZW50c19zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgdGhpcy0+bGVhZGluZ19kZXRhY2hlZF9jb21tZW50c19zaXplKCk7IGkrKykgewotICAg
IHRvdGFsX3NpemUgKz0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlN0cmluZ1NpemUoCi0gICAgICB0aGlzLT5sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKGkp
KTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMo
KSkgewotICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXQ6OkNvbXB1dGVVbmtub3duRmllbGRzU2l6ZSgKLSAgICAgICAgdW5rbm93
bl9maWVsZHMoKSk7Ci0gIH0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4o
KTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJF
TlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBTb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbjo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21l
cmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uKQot
ICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwo
X19MSU5FX18pOwotICBjb25zdCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiogc291cmNlID0gCi0g
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVk
PGNvbnN0IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uPigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlm
IChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJh
bGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZv
LkxvY2F0aW9uKQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25P
cHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3Rv
YnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uKQotICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAg
fQotfQotCi12b2lkIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpNZXJnZUZyb20oY29uc3QgU291
cmNlQ29kZUluZm9fTG9jYXRpb24mIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChjbGFzc19zcGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VD
b2RlSW5mby5Mb2NhdGlvbikKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRo
aXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgcGF0aF8uTWVyZ2VGcm9tKGZyb20ucGF0
aF8pOwotICBzcGFuXy5NZXJnZUZyb20oZnJvbS5zcGFuXyk7Ci0gIGxlYWRpbmdfZGV0YWNoZWRf
Y29tbWVudHNfLk1lcmdlRnJvbShmcm9tLmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHNfKTsKLSAg
aWYgKGZyb20uX2hhc19iaXRzX1syIC8gMzJdICYgKDB4ZmZ1IDw8ICgyICUgMzIpKSkgewotICAg
IGlmIChmcm9tLmhhc19sZWFkaW5nX2NvbW1lbnRzKCkpIHsKLSAgICAgIHNldF9oYXNfbGVhZGlu
Z19jb21tZW50cygpOwotICAgICAgbGVhZGluZ19jb21tZW50c18uQXNzaWduV2l0aERlZmF1bHQo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCBmcm9tLmxlYWRpbmdfY29tbWVudHNfKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX3Ry
YWlsaW5nX2NvbW1lbnRzKCkpIHsKLSAgICAgIHNldF9oYXNfdHJhaWxpbmdfY29tbWVudHMoKTsK
LSAgICAgIHRyYWlsaW5nX2NvbW1lbnRzXy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20udHJh
aWxpbmdfY29tbWVudHNfKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyb20uX2ludGVybmFsX21ldGFk
YXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICBtdXRhYmxlX3Vua25vd25fZmllbGRz
KCktPk1lcmdlRnJvbShmcm9tLnVua25vd25fZmllbGRzKCkpOwotICB9Ci19Ci0KLXZvaWQgU291
cmNlQ29kZUluZm9fTG9jYXRpb246OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVk
X2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24p
Ci0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShm
cm9tKTsKLX0KLQotdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6Q29weUZyb20oY29uc3Qg
U291cmNlQ29kZUluZm9fTG9jYXRpb24mIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChjbGFzc19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJj
ZUNvZGVJbmZvLkxvY2F0aW9uKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVh
cigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLWJvb2wgU291cmNlQ29kZUluZm9fTG9jYXRp
b246OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
U291cmNlQ29kZUluZm9fTG9jYXRpb246OlN3YXAoU291cmNlQ29kZUluZm9fTG9jYXRpb24qIG90
aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIEludGVybmFsU3dhcChvdGhl
cik7Ci19Ci12b2lkIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpJbnRlcm5hbFN3YXAoU291cmNl
Q29kZUluZm9fTG9jYXRpb24qIG90aGVyKSB7Ci0gIHBhdGhfLlVuc2FmZUFyZW5hU3dhcCgmb3Ro
ZXItPnBhdGhfKTsKLSAgc3Bhbl8uVW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+c3Bhbl8pOwotICBs
ZWFkaW5nX2NvbW1lbnRzXy5Td2FwKCZvdGhlci0+bGVhZGluZ19jb21tZW50c18pOwotICB0cmFp
bGluZ19jb21tZW50c18uU3dhcCgmb3RoZXItPnRyYWlsaW5nX2NvbW1lbnRzXyk7Ci0gIGxlYWRp
bmdfZGV0YWNoZWRfY29tbWVudHNfLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPmxlYWRpbmdfZGV0
YWNoZWRfY29tbWVudHNfKTsKLSAgc3RkOjpzd2FwKF9oYXNfYml0c19bMF0sIG90aGVyLT5faGFz
X2JpdHNfWzBdKTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFs
X21ldGFkYXRhXyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9z
aXplXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgU291cmNlQ29kZUluZm9f
TG9jYXRpb246OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlw
dG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAg
bWV0YWRhdGEuZGVzY3JpcHRvciA9IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uX2Rlc2NyaXB0b3Jf
OwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gU291cmNlQ29kZUluZm9fTG9jYXRpb25fcmVmbGVj
dGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAh
ZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgaW50IFNvdXJjZUNv
ZGVJbmZvOjprTG9jYXRpb25GaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19W
RVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotU291cmNlQ29kZUluZm86OlNvdXJjZUNvZGVJbmZv
KCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRh
XyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbykKLX0KLQotdm9pZCBT
b3VyY2VDb2RlSW5mbzo6SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotfQotCi1Tb3VyY2VDb2Rl
SW5mbzo6U291cmNlQ29kZUluZm8oY29uc3QgU291cmNlQ29kZUluZm8mIGZyb20pCi0gIDogOjpn
b29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxM
KSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuU291cmNlQ29k
ZUluZm8pCi19Ci0KLXZvaWQgU291cmNlQ29kZUluZm86OlNoYXJlZEN0b3IoKSB7Ci0gIF9jYWNo
ZWRfc2l6ZV8gPSAwOwotICA6Om1lbXNldChfaGFzX2JpdHNfLCAwLCBzaXplb2YoX2hhc19iaXRz
XykpOwotfQotCi1Tb3VyY2VDb2RlSW5mbzo6flNvdXJjZUNvZGVJbmZvKCkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuU291cmNlQ29k
ZUluZm8pCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBTb3VyY2VDb2RlSW5mbzo6U2hhcmVk
RHRvcigpIHsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12
b2lkIFNvdXJjZUNvZGVJbmZvOjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdP
T0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBz
aXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogU291cmNlQ29kZUluZm86OmRlc2NyaXB0b3Io
KSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gU291cmNl
Q29kZUluZm9fZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IFNvdXJjZUNvZGVJbmZvJiBTb3VyY2VD
b2RlSW5mbzo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09
IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJl
cHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotU291cmNlQ29kZUlu
Zm8qIFNvdXJjZUNvZGVJbmZvOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLVNvdXJjZUNv
ZGVJbmZvKiBTb3VyY2VDb2RlSW5mbzo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFy
ZW5hKSBjb25zdCB7Ci0gIFNvdXJjZUNvZGVJbmZvKiBuID0gbmV3IFNvdXJjZUNvZGVJbmZvOwot
ICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJu
IG47Ci19Ci0KLXZvaWQgU291cmNlQ29kZUluZm86OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNv
ZGVJbmZvKQotICBsb2NhdGlvbl8uQ2xlYXIoKTsKLSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwg
c2l6ZW9mKF9oYXNfYml0c18pKTsKLSAgaWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtu
b3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5DbGVhcigpOwot
ICB9Ci19Ci0KLWJvb2wgU291cmNlQ29kZUluZm86Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVh
bSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkg
ewotI2RlZmluZSBET18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJF
U1NJT04pKSBnb3RvIGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LlNvdXJjZUNvZGVJbmZvKQotICBmb3IgKDs7KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDMyLCBib29sPiBwID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0b2ZmKDEy
Nyk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAgICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91
bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykpIHsKLSAgICAgIC8vIHJlcGVhdGVkIC5n
b29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24gbG9jYXRpb24gPSAxOwotICAg
ICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oaW5w
dXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9sb2Nh
dGlvbjoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0aCgKLSAgICAgICAg
ICAgICAgICBpbnB1dCwgYWRkX2xvY2F0aW9uKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+
RXhwZWN0VGFnKDEwKSkgZ290byBwYXJzZV9sb29wX2xvY2F0aW9uOwotICAgICAgICBpbnB1dC0+
VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBl
Y3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAg
ICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAw
IHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAg
ICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2tpcEZpZWxkKAotICAgICAgICAgICAgICBp
bnB1dCwgdGFnLCBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8pCi0gIHJldHVy
biB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX2Zh
aWx1cmU6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvKQotICByZXR1cm4gZmFsc2U7Ci0j
dW5kZWYgRE9fCi19Ci0KLXZvaWQgU291cmNlQ29kZUluZm86OlNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0
cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvKQotICAvLyByZXBlYXRlZCAuZ29vZ2xl
LnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uIGxvY2F0aW9uID0gMTsKLSAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5sb2NhdGlvbl9zaXplKCk7IGkgPCBuOyBpKysp
IHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3Jp
dGVNZXNzYWdlTWF5YmVUb0FycmF5KAotICAgICAgMSwgdGhpcy0+bG9jYXRpb24oaSksIG91dHB1
dCk7Ci0gIH0KLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRz
KCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTZXJp
YWxpemVVbmtub3duRmllbGRzKAotICAgICAgICB1bmtub3duX2ZpZWxkcygpLCBvdXRwdXQpOwot
ICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfZW5kOmdvb2dsZS5w
cm90b2J1Zi5Tb3VyY2VDb2RlSW5mbykKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCog
U291cmNlQ29kZUluZm86OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNv
dXJjZUNvZGVJbmZvKQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJ
bmZvLkxvY2F0aW9uIGxvY2F0aW9uID0gMTsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4g
PSB0aGlzLT5sb2NhdGlvbl9zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICB0YXJnZXQgPSA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1l
c3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAotICAgICAgICAxLCB0aGlzLT5sb2NhdGlvbihpKSwgdGFy
Z2V0KTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVs
ZHMoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHNUb0FycmF5KAotICAgICAgICB1bmtub3duX2Zp
ZWxkcygpLCB0YXJnZXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJp
YWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbykKLSAgcmV0
dXJuIHRhcmdldDsKLX0KLQotaW50IFNvdXJjZUNvZGVJbmZvOjpCeXRlU2l6ZSgpIGNvbnN0IHsK
LS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29n
bGUucHJvdG9idWYuU291cmNlQ29kZUluZm8pCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICAv
LyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uIGxvY2F0
aW9uID0gMTsKLSAgdG90YWxfc2l6ZSArPSAxICogdGhpcy0+bG9jYXRpb25fc2l6ZSgpOwotICBm
b3IgKGludCBpID0gMDsgaSA8IHRoaXMtPmxvY2F0aW9uX3NpemUoKTsgaSsrKSB7Ci0gICAgdG90
YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAgICAgICB0aGlzLT5sb2NhdGlvbihpKSk7
Ci0gIH0KLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5oYXZlX3Vua25vd25fZmllbGRzKCkp
IHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0OjpDb21wdXRlVW5rbm93bkZpZWxkc1NpemUoCi0gICAgICAgIHVua25vd25f
ZmllbGRzKCkpOwotICB9Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7
Ci0gIF9jYWNoZWRfc2l6ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5U
X1dSSVRFU19FTkQoKTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgU291cmNlQ29k
ZUluZm86Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20p
IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0
YXJ0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbykKLSAgaWYgKEdPT0dMRV9QUkVESUNU
X0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3Qg
U291cmNlQ29kZUluZm8qIHNvdXJjZSA9IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25zdCBTb3VyY2VDb2RlSW5mbz4oCi0gICAg
ICAgICAgJmZyb20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90
b2J1Zi5Tb3VyY2VDb2RlSW5mbykKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpS
ZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdv
b2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbykKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0g
IH0KLX0KLQotdm9pZCBTb3VyY2VDb2RlSW5mbzo6TWVyZ2VGcm9tKGNvbnN0IFNvdXJjZUNvZGVJ
bmZvJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNf
bWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8pCi0gIGlmIChH
T09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVf
Xyk7Ci0gIGxvY2F0aW9uXy5NZXJnZUZyb20oZnJvbS5sb2NhdGlvbl8pOwotICBpZiAoZnJvbS5f
aW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVf
dW5rbm93bl9maWVsZHMoKS0+TWVyZ2VGcm9tKGZyb20udW5rbm93bl9maWVsZHMoKSk7Ci0gIH0K
LX0KLQotdm9pZCBTb3VyY2VDb2RlSW5mbzo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJh
bGl6ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbykKLSAg
aWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20p
OwotfQotCi12b2lkIFNvdXJjZUNvZGVJbmZvOjpDb3B5RnJvbShjb25zdCBTb3VyY2VDb2RlSW5m
byYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2Nv
cHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8pCi0gIGlmICgmZnJv
bSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQot
Ym9vbCBTb3VyY2VDb2RlSW5mbzo6SXNJbml0aWFsaXplZCgpIGNvbnN0IHsKLQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBTb3VyY2VDb2RlSW5mbzo6U3dhcChTb3VyY2VDb2RlSW5mbyogb3Ro
ZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVy
KTsKLX0KLXZvaWQgU291cmNlQ29kZUluZm86OkludGVybmFsU3dhcChTb3VyY2VDb2RlSW5mbyog
b3RoZXIpIHsKLSAgbG9jYXRpb25fLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPmxvY2F0aW9uXyk7
Ci0gIHN0ZDo6c3dhcChfaGFzX2JpdHNfWzBdLCBvdGhlci0+X2hhc19iaXRzX1swXSk7Ci0gIF9p
bnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBz
dGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdv
b2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIFNvdXJjZUNvZGVJbmZvOjpHZXRNZXRhZGF0YSgpIGNv
bnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBTb3Vy
Y2VDb2RlSW5mb19kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IFNvdXJjZUNv
ZGVJbmZvX3JlZmxlY3Rpb25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JV
Rl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uCi0KLS8v
IHJlcGVhdGVkIGludDMyIHBhdGggPSAxIFtwYWNrZWQgPSB0cnVlXTsKLWludCBTb3VyY2VDb2Rl
SW5mb19Mb2NhdGlvbjo6cGF0aF9zaXplKCkgY29uc3QgewotICByZXR1cm4gcGF0aF8uc2l6ZSgp
OwotfQotdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6Y2xlYXJfcGF0aCgpIHsKLSAgcGF0
aF8uQ2xlYXIoKTsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIFNvdXJjZUNvZGVJbmZv
X0xvY2F0aW9uOjpwYXRoKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlv
bi5wYXRoKQotICByZXR1cm4gcGF0aF8uR2V0KGluZGV4KTsKLX0KLSB2b2lkIFNvdXJjZUNvZGVJ
bmZvX0xvY2F0aW9uOjpzZXRfcGF0aChpbnQgaW5kZXgsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
MzIgdmFsdWUpIHsKLSAgcGF0aF8uU2V0KGluZGV4LCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxv
Y2F0aW9uLnBhdGgpCi19Ci0gdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6YWRkX3BhdGgo
Ojpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSkgewotICBwYXRoXy5BZGQodmFsdWUpOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5T
b3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wYXRoKQotfQotIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6UmVwZWF0ZWRGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiA+JgotU291cmNlQ29k
ZUluZm9fTG9jYXRpb246OnBhdGgoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5w
YXRoKQotICByZXR1cm4gcGF0aF87Ci19Ci0gOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZEZp
ZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyID4qCi1Tb3VyY2VDb2RlSW5mb19Mb2NhdGlv
bjo6bXV0YWJsZV9wYXRoKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
bXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wYXRo
KQotICByZXR1cm4gJnBhdGhfOwotfQotCi0vLyByZXBlYXRlZCBpbnQzMiBzcGFuID0gMiBbcGFj
a2VkID0gdHJ1ZV07Ci1pbnQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnNwYW5fc2l6ZSgpIGNv
bnN0IHsKLSAgcmV0dXJuIHNwYW5fLnNpemUoKTsKLX0KLXZvaWQgU291cmNlQ29kZUluZm9fTG9j
YXRpb246OmNsZWFyX3NwYW4oKSB7Ci0gIHNwYW5fLkNsZWFyKCk7Ci19Ci0gOjpnb29nbGU6OnBy
b3RvYnVmOjppbnQzMiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6c3BhbihpbnQgaW5kZXgpIGNv
bnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJv
dG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uc3BhbikKLSAgcmV0dXJuIHNwYW5fLkdldChp
bmRleCk7Ci19Ci0gdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6c2V0X3NwYW4oaW50IGlu
ZGV4LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIHNwYW5fLlNldChpbmRl
eCwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5zcGFuKQotfQotIHZvaWQgU291cmNl
Q29kZUluZm9fTG9jYXRpb246OmFkZF9zcGFuKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFs
dWUpIHsKLSAgc3Bhbl8uQWRkKHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uc3BhbikK
LX0KLSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50MzIgPiYKLVNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpzcGFuKCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9i
dWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24uc3BhbikKLSAgcmV0dXJuIHNwYW5fOwotfQotIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjppbnQz
MiA+KgotU291cmNlQ29kZUluZm9fTG9jYXRpb246Om11dGFibGVfc3BhbigpIHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYu
U291cmNlQ29kZUluZm8uTG9jYXRpb24uc3BhbikKLSAgcmV0dXJuICZzcGFuXzsKLX0KLQotLy8g
b3B0aW9uYWwgc3RyaW5nIGxlYWRpbmdfY29tbWVudHMgPSAzOwotYm9vbCBTb3VyY2VDb2RlSW5m
b19Mb2NhdGlvbjo6aGFzX2xlYWRpbmdfY29tbWVudHMoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hh
c19iaXRzX1swXSAmIDB4MDAwMDAwMDR1KSAhPSAwOwotfQotdm9pZCBTb3VyY2VDb2RlSW5mb19M
b2NhdGlvbjo6c2V0X2hhc19sZWFkaW5nX2NvbW1lbnRzKCkgewotICBfaGFzX2JpdHNfWzBdIHw9
IDB4MDAwMDAwMDR1OwotfQotdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6Y2xlYXJfaGFz
X2xlYWRpbmdfY29tbWVudHMoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDR1Owot
fQotdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6Y2xlYXJfbGVhZGluZ19jb21tZW50cygp
IHsKLSAgbGVhZGluZ19jb21tZW50c18uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVh
cl9oYXNfbGVhZGluZ19jb21tZW50cygpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIFNvdXJj
ZUNvZGVJbmZvX0xvY2F0aW9uOjpsZWFkaW5nX2NvbW1lbnRzKCkgY29uc3QgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2Rl
SW5mby5Mb2NhdGlvbi5sZWFkaW5nX2NvbW1lbnRzKQotICByZXR1cm4gbGVhZGluZ19jb21tZW50
c18uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnNl
dF9sZWFkaW5nX2NvbW1lbnRzKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9o
YXNfbGVhZGluZ19jb21tZW50cygpOwotICBsZWFkaW5nX2NvbW1lbnRzXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFkaW5nX2NvbW1lbnRzKQotfQot
IHZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnNldF9sZWFkaW5nX2NvbW1lbnRzKGNvbnN0
IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfbGVhZGluZ19jb21tZW50cygpOwotICBsZWFkaW5n
X2NvbW1lbnRzXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLlNv
dXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdfY29tbWVudHMpCi19Ci0gdm9pZCBTb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbjo6c2V0X2xlYWRpbmdfY29tbWVudHMoY29uc3QgY2hhciogdmFsdWUs
IHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfbGVhZGluZ19jb21tZW50cygpOwotICBsZWFkaW5n
X2NvbW1lbnRzXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUlu
Zm8uTG9jYXRpb24ubGVhZGluZ19jb21tZW50cykKLX0KLSA6OnN0ZDo6c3RyaW5nKiBTb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbjo6bXV0YWJsZV9sZWFkaW5nX2NvbW1lbnRzKCkgewotICBzZXRfaGFz
X2xlYWRpbmdfY29tbWVudHMoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdf
Y29tbWVudHMpCi0gIHJldHVybiBsZWFkaW5nX2NvbW1lbnRzXy5NdXRhYmxlTm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotfQotIDo6c3RkOjpzdHJpbmcqIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpyZWxlYXNlX2xl
YWRpbmdfY29tbWVudHMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9y
ZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFkaW5nX2Nv
bW1lbnRzKQotICBjbGVhcl9oYXNfbGVhZGluZ19jb21tZW50cygpOwotICByZXR1cm4gbGVhZGlu
Z19jb21tZW50c18uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIFNvdXJjZUNvZGVJbmZv
X0xvY2F0aW9uOjpzZXRfYWxsb2NhdGVkX2xlYWRpbmdfY29tbWVudHMoOjpzdGQ6OnN0cmluZyog
bGVhZGluZ19jb21tZW50cykgewotICBpZiAobGVhZGluZ19jb21tZW50cyAhPSBOVUxMKSB7Ci0g
ICAgc2V0X2hhc19sZWFkaW5nX2NvbW1lbnRzKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFz
X2xlYWRpbmdfY29tbWVudHMoKTsKLSAgfQotICBsZWFkaW5nX2NvbW1lbnRzXy5TZXRBbGxvY2F0
ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSwgbGVhZGluZ19jb21tZW50cyk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5m
by5Mb2NhdGlvbi5sZWFkaW5nX2NvbW1lbnRzKQotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgdHJh
aWxpbmdfY29tbWVudHMgPSA0OwotYm9vbCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6aGFzX3Ry
YWlsaW5nX2NvbW1lbnRzKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAw
MDAwMDA4dSkgIT0gMDsKLX0KLXZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnNldF9oYXNf
dHJhaWxpbmdfY29tbWVudHMoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwOHU7Ci19
Ci12b2lkIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpjbGVhcl9oYXNfdHJhaWxpbmdfY29tbWVu
dHMoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDh1OwotfQotdm9pZCBTb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbjo6Y2xlYXJfdHJhaWxpbmdfY29tbWVudHMoKSB7Ci0gIHRyYWlsaW5n
X2NvbW1lbnRzXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc190cmFpbGlu
Z19jb21tZW50cygpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIFNvdXJjZUNvZGVJbmZvX0xv
Y2F0aW9uOjp0cmFpbGluZ19jb21tZW50cygpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRp
b24udHJhaWxpbmdfY29tbWVudHMpCi0gIHJldHVybiB0cmFpbGluZ19jb21tZW50c18uR2V0Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotfQotIHZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnNldF90cmFpbGlu
Z19jb21tZW50cyhjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX3RyYWls
aW5nX2NvbW1lbnRzKCk7Ci0gIHRyYWlsaW5nX2NvbW1lbnRzXy5TZXROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFs
dWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90
b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi50cmFpbGluZ19jb21tZW50cykKLX0KLSB2b2lk
IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpzZXRfdHJhaWxpbmdfY29tbWVudHMoY29uc3QgY2hh
ciogdmFsdWUpIHsKLSAgc2V0X2hhc190cmFpbGluZ19jb21tZW50cygpOwotICB0cmFpbGluZ19j
b21tZW50c18uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5Tb3Vy
Y2VDb2RlSW5mby5Mb2NhdGlvbi50cmFpbGluZ19jb21tZW50cykKLX0KLSB2b2lkIFNvdXJjZUNv
ZGVJbmZvX0xvY2F0aW9uOjpzZXRfdHJhaWxpbmdfY29tbWVudHMoY29uc3QgY2hhciogdmFsdWUs
IHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfdHJhaWxpbmdfY29tbWVudHMoKTsKLSAgdHJhaWxp
bmdfY29tbWVudHNfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2Rl
SW5mby5Mb2NhdGlvbi50cmFpbGluZ19jb21tZW50cykKLX0KLSA6OnN0ZDo6c3RyaW5nKiBTb3Vy
Y2VDb2RlSW5mb19Mb2NhdGlvbjo6bXV0YWJsZV90cmFpbGluZ19jb21tZW50cygpIHsKLSAgc2V0
X2hhc190cmFpbGluZ19jb21tZW50cygpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24udHJh
aWxpbmdfY29tbWVudHMpCi0gIHJldHVybiB0cmFpbGluZ19jb21tZW50c18uTXV0YWJsZU5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6cmVs
ZWFzZV90cmFpbGluZ19jb21tZW50cygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnRy
YWlsaW5nX2NvbW1lbnRzKQotICBjbGVhcl9oYXNfdHJhaWxpbmdfY29tbWVudHMoKTsKLSAgcmV0
dXJuIHRyYWlsaW5nX2NvbW1lbnRzXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgU291
cmNlQ29kZUluZm9fTG9jYXRpb246OnNldF9hbGxvY2F0ZWRfdHJhaWxpbmdfY29tbWVudHMoOjpz
dGQ6OnN0cmluZyogdHJhaWxpbmdfY29tbWVudHMpIHsKLSAgaWYgKHRyYWlsaW5nX2NvbW1lbnRz
ICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX3RyYWlsaW5nX2NvbW1lbnRzKCk7Ci0gIH0gZWxzZSB7
Ci0gICAgY2xlYXJfaGFzX3RyYWlsaW5nX2NvbW1lbnRzKCk7Ci0gIH0KLSAgdHJhaWxpbmdfY29t
bWVudHNfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB0cmFpbGluZ19jb21tZW50cyk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90
b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi50cmFpbGluZ19jb21tZW50cykKLX0KLQotLy8g
cmVwZWF0ZWQgc3RyaW5nIGxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMgPSA2OwotaW50IFNvdXJj
ZUNvZGVJbmZvX0xvY2F0aW9uOjpsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzX3NpemUoKSBjb25z
dCB7Ci0gIHJldHVybiBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzXy5zaXplKCk7Ci19Ci12b2lk
IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpjbGVhcl9sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRz
KCkgewotICBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzXy5DbGVhcigpOwotfQotIGNvbnN0IDo6
c3RkOjpzdHJpbmcmIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpsZWFkaW5nX2RldGFjaGVkX2Nv
bW1lbnRzKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFkaW5n
X2RldGFjaGVkX2NvbW1lbnRzKQotICByZXR1cm4gbGVhZGluZ19kZXRhY2hlZF9jb21tZW50c18u
R2V0KGluZGV4KTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6
bXV0YWJsZV9sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKGludCBpbmRleCkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuU291cmNl
Q29kZUluZm8uTG9jYXRpb24ubGVhZGluZ19kZXRhY2hlZF9jb21tZW50cykKLSAgcmV0dXJuIGxl
YWRpbmdfZGV0YWNoZWRfY29tbWVudHNfLk11dGFibGUoaW5kZXgpOwotfQotIHZvaWQgU291cmNl
Q29kZUluZm9fTG9jYXRpb246OnNldF9sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKGludCBpbmRl
eCwgY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24u
bGVhZGluZ19kZXRhY2hlZF9jb21tZW50cykKLSAgbGVhZGluZ19kZXRhY2hlZF9jb21tZW50c18u
TXV0YWJsZShpbmRleCktPmFzc2lnbih2YWx1ZSk7Ci19Ci0gdm9pZCBTb3VyY2VDb2RlSW5mb19M
b2NhdGlvbjo6c2V0X2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoaW50IGluZGV4LCBjb25zdCBj
aGFyKiB2YWx1ZSkgewotICBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzXy5NdXRhYmxlKGluZGV4
KS0+YXNzaWduKHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFkaW5nX2Rl
dGFjaGVkX2NvbW1lbnRzKQotfQotIHZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnNldF9s
ZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUsIHNp
emVfdCBzaXplKSB7Ci0gIGxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHNfLk11dGFibGUoaW5kZXgp
LT5hc3NpZ24oCi0gICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXpl
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2ds
ZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFkaW5nX2RldGFjaGVkX2NvbW1l
bnRzKQotfQotIDo6c3RkOjpzdHJpbmcqIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjphZGRfbGVh
ZGluZ19kZXRhY2hlZF9jb21tZW50cygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2FkZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlv
bi5sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKQotICByZXR1cm4gbGVhZGluZ19kZXRhY2hlZF9j
b21tZW50c18uQWRkKCk7Ci19Ci0gdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6YWRkX2xl
YWRpbmdfZGV0YWNoZWRfY29tbWVudHMoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAg
bGVhZGluZ19kZXRhY2hlZF9jb21tZW50c18uQWRkKCktPmFzc2lnbih2YWx1ZSk7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNv
ZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMpCi19Ci0gdm9pZCBTb3Vy
Y2VDb2RlSW5mb19Mb2NhdGlvbjo6YWRkX2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoY29uc3Qg
Y2hhciogdmFsdWUpIHsKLSAgbGVhZGluZ19kZXRhY2hlZF9jb21tZW50c18uQWRkKCktPmFzc2ln
bih2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGRfY2hhcjpn
b29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ubGVhZGluZ19kZXRhY2hlZF9j
b21tZW50cykKLX0KLSB2b2lkIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjphZGRfbGVhZGluZ19k
ZXRhY2hlZF9jb21tZW50cyhjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgbGVh
ZGluZ19kZXRhY2hlZF9jb21tZW50c18uQWRkKCktPmFzc2lnbihyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPih2YWx1ZSksIHNpemUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfYWRkX3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9u
LmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMpCi19Ci0gY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPiYKLVNvdXJjZUNvZGVJbmZvX0xvY2F0
aW9uOjpsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8u
TG9jYXRpb24ubGVhZGluZ19kZXRhY2hlZF9jb21tZW50cykKLSAgcmV0dXJuIGxlYWRpbmdfZGV0
YWNoZWRfY29tbWVudHNfOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVs
ZDwgOjpzdGQ6OnN0cmluZz4qCi1Tb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6bXV0YWJsZV9sZWFk
aW5nX2RldGFjaGVkX2NvbW1lbnRzKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlv
bi5sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKQotICByZXR1cm4gJmxlYWRpbmdfZGV0YWNoZWRf
Y29tbWVudHNfOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFNvdXJjZUNvZGVJbmZvCi0KLS8v
IHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24gbG9jYXRp
b24gPSAxOwotaW50IFNvdXJjZUNvZGVJbmZvOjpsb2NhdGlvbl9zaXplKCkgY29uc3QgewotICBy
ZXR1cm4gbG9jYXRpb25fLnNpemUoKTsKLX0KLXZvaWQgU291cmNlQ29kZUluZm86OmNsZWFyX2xv
Y2F0aW9uKCkgewotICBsb2NhdGlvbl8uQ2xlYXIoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6U291cmNlQ29kZUluZm9fTG9jYXRpb24mIFNvdXJjZUNvZGVJbmZvOjpsb2NhdGlvbihp
bnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dl
dDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ubG9jYXRpb24pCi0gIHJldHVybiBsb2Nh
dGlvbl8uR2V0KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29kZUluZm9f
TG9jYXRpb24qIFNvdXJjZUNvZGVJbmZvOjptdXRhYmxlX2xvY2F0aW9uKGludCBpbmRleCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9i
dWYuU291cmNlQ29kZUluZm8ubG9jYXRpb24pCi0gIHJldHVybiBsb2NhdGlvbl8uTXV0YWJsZShp
bmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKiBT
b3VyY2VDb2RlSW5mbzo6YWRkX2xvY2F0aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5sb2NhdGlvbikK
LSAgcmV0dXJuIGxvY2F0aW9uXy5BZGQoKTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0
ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiA+
KgotU291cmNlQ29kZUluZm86Om11dGFibGVfbG9jYXRpb24oKSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNv
ZGVJbmZvLmxvY2F0aW9uKQotICByZXR1cm4gJmxvY2F0aW9uXzsKLX0KLWNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbiA+JgotU291cmNlQ29kZUluZm86OmxvY2F0aW9uKCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYu
U291cmNlQ29kZUluZm8ubG9jYXRpb24pCi0gIHJldHVybiBsb2NhdGlvbl87Ci19Ci0KLSNlbmRp
ZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0KLS8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQot
I2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgR2Vu
ZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6a1BhdGhGaWVsZE51bWJlcjsKLWNvbnN0IGludCBH
ZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjprU291cmNlRmlsZUZpZWxkTnVtYmVyOwotY29u
c3QgaW50IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmtCZWdpbkZpZWxkTnVtYmVyOwot
Y29uc3QgaW50IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmtFbmRGaWVsZE51bWJlcjsK
LSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotR2Vu
ZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6R2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbigp
Ci0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRhZGF0YV8o
TlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChj
b25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbikK
LX0KLQotdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpJbml0QXNEZWZhdWx0SW5z
dGFuY2UoKSB7Ci19Ci0KLUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OkdlbmVyYXRlZENv
ZGVJbmZvX0Fubm90YXRpb24oY29uc3QgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiYgZnJv
bSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0
YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1
Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uKQotfQotCi12b2lkIEdlbmVyYXRlZENvZGVJ
bmZvX0Fubm90YXRpb246OlNoYXJlZEN0b3IoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwotICBzb3VyY2Vf
ZmlsZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBiZWdpbl8gPSAwOwotICBlbmRfID0gMDsK
LSAgOjptZW1zZXQoX2hhc19iaXRzXywgMCwgc2l6ZW9mKF9oYXNfYml0c18pKTsKLX0KLQotR2Vu
ZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6fkdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24o
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90
b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uKQotICBTaGFyZWREdG9yKCk7Ci19Ci0K
LXZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6U2hhcmVkRHRvcigpIHsKLSAgc291
cmNlX2ZpbGVfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGlmICh0aGlzICE9IGRlZmF1bHRfaW5z
dGFuY2VfKSB7Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpT
ZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9D
T05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6ZGVzY3JpcHRvcigpIHsKLSAg
cHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIHJldHVybiBHZW5lcmF0ZWRDb2Rl
SW5mb19Bbm5vdGF0aW9uX2Rlc2NyaXB0b3JfOwotfQotCi1jb25zdCBHZW5lcmF0ZWRDb2RlSW5m
b19Bbm5vdGF0aW9uJiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpkZWZhdWx0X2luc3Rh
bmNlKCkgewotICBpZiAoZGVmYXVsdF9pbnN0YW5jZV8gPT0gTlVMTCkgcHJvdG9idWZfQWRkRGVz
Y19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICByZXR1cm4gKmRl
ZmF1bHRfaW5zdGFuY2VfOwotfQotCi1HZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uKiBHZW5l
cmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLUdl
bmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24qIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246
Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3QgewotICBHZW5lcmF0
ZWRDb2RlSW5mb19Bbm5vdGF0aW9uKiBuID0gbmV3IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRp
b247Ci0gIGlmIChhcmVuYSAhPSBOVUxMKSB7Ci0gICAgYXJlbmEtPk93bihuKTsKLSAgfQotICBy
ZXR1cm4gbjsKLX0KLQotdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpDbGVhcigp
IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2NsZWFyX3N0YXJ0Omdvb2ds
ZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uKQotI2lmIGRlZmluZWQoX19j
bGFuZ19fKQotI2RlZmluZSBaUl9IRUxQRVJfKGYpIFwKLSAgX1ByYWdtYSgiY2xhbmcgZGlhZ25v
c3RpYyBwdXNoIikgXAotICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2lu
dmFsaWQtb2Zmc2V0b2ZcIiIpIFwKLSAgX19idWlsdGluX29mZnNldG9mKEdlbmVyYXRlZENvZGVJ
bmZvX0Fubm90YXRpb24sIGYpIFwKLSAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBwb3AiKQot
I2Vsc2UKLSNkZWZpbmUgWlJfSEVMUEVSXyhmKSByZWludGVycHJldF9jYXN0PGNoYXIqPihcCi0g
ICZyZWludGVycHJldF9jYXN0PEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24qPigxNiktPmYp
Ci0jZW5kaWYKLQotI2RlZmluZSBaUl8oZmlyc3QsIGxhc3QpIGRvIHtcCi0gIDo6bWVtc2V0KCZm
aXJzdCwgMCxcCi0gICAgICAgICAgIFpSX0hFTFBFUl8obGFzdCkgLSBaUl9IRUxQRVJfKGZpcnN0
KSArIHNpemVvZihsYXN0KSk7XAotfSB3aGlsZSAoMCkKLQotICBpZiAoX2hhc19iaXRzX1swIC8g
MzJdICYgMTR1KSB7Ci0gICAgWlJfKGJlZ2luXywgZW5kXyk7Ci0gICAgaWYgKGhhc19zb3VyY2Vf
ZmlsZSgpKSB7Ci0gICAgICBzb3VyY2VfZmlsZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
ICAgIH0KLSAgfQotCi0jdW5kZWYgWlJfSEVMUEVSXwotI3VuZGVmIFpSXwotCi0gIHBhdGhfLkNs
ZWFyKCk7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFzX2JpdHNfKSk7Ci0g
IGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIG11
dGFibGVfdW5rbm93bl9maWVsZHMoKS0+Q2xlYXIoKTsKLSAgfQotfQotCi1ib29sIEdlbmVyYXRl
ZENvZGVJbmZvX0Fubm90YXRpb246Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmlu
ZSBET18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBn
b3RvIGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRl
ZENvZGVJbmZvLkFubm90YXRpb24pCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpn
b29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRv
ZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFu
ZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gcmVwZWF0
ZWQgaW50MzIgcGF0aCA9IDEgW3BhY2tlZCA9IHRydWVdOwotICAgICAgY2FzZSAxOiB7Ci0gICAg
ICAgIGlmICh0YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUGFja2VkUHJpbWl0aXZlPAotICAgICAgICAg
ICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0lOVDMyPigKLSAgICAgICAgICAgICAgICAg
aW5wdXQsIHRoaXMtPm11dGFibGVfcGF0aCgpKSkpOwotICAgICAgICB9IGVsc2UgaWYgKHRhZyA9
PSA4KSB7Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6UmVhZFJlcGVhdGVkUHJpbWl0aXZlTm9JbmxpbmU8Ci0gICAgICAgICAgICAg
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfSU5UMzI+KAotICAgICAgICAgICAgICAgICAxLCAx
MCwgaW5wdXQsIHRoaXMtPm11dGFibGVfcGF0aCgpKSkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0
LT5FeHBlY3RUYWcoMTgpKSBnb3RvIHBhcnNlX3NvdXJjZV9maWxlOwotICAgICAgICBicmVhazsK
LSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIHNvdXJjZV9maWxlID0gMjsKLSAg
ICAgIGNhc2UgMjogewotICAgICAgICBpZiAodGFnID09IDE4KSB7Ci0gICAgICAgICBwYXJzZV9z
b3VyY2VfZmlsZToKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMt
Pm11dGFibGVfc291cmNlX2ZpbGUoKSkpOwotICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKAotICAgICAg
ICAgICAgdGhpcy0+c291cmNlX2ZpbGUoKS5kYXRhKCksIHRoaXMtPnNvdXJjZV9maWxlKCkubGVu
Z3RoKCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUlu
Zm8uQW5ub3RhdGlvbi5zb3VyY2VfZmlsZSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBl
Y3RUYWcoMjQpKSBnb3RvIHBhcnNlX2JlZ2luOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQot
ICAgICAgLy8gb3B0aW9uYWwgaW50MzIgYmVnaW4gPSAzOwotICAgICAgY2FzZSAzOiB7Ci0gICAg
ICAgIGlmICh0YWcgPT0gMjQpIHsKLSAgICAgICAgIHBhcnNlX2JlZ2luOgotICAgICAgICAgIERP
XygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmlt
aXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiwgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfSU5UMzI+KAot
ICAgICAgICAgICAgICAgICBpbnB1dCwgJmJlZ2luXykpKTsKLSAgICAgICAgICBzZXRfaGFzX2Jl
Z2luKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsK
LSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygzMikpIGdvdG8gcGFyc2Vf
ZW5kOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgaW50MzIg
ZW5kID0gNDsKLSAgICAgIGNhc2UgNDogewotICAgICAgICBpZiAodGFnID09IDMyKSB7Ci0gICAg
ICAgICBwYXJzZV9lbmQ6Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludDMyLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6VFlQRV9JTlQzMj4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmZW5k
XykpKTsKLSAgICAgICAgICBzZXRfaGFzX2VuZCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5F
eHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g
ICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9
PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewot
ICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2tpcEZpZWxkKAotICAgICAgICAgICAg
ICBpbnB1dCwgdGFnLCBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5u
b3RhdGlvbikKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8u
QW5ub3RhdGlvbikKLSAgcmV0dXJuIGZhbHNlOwotI3VuZGVmIERPXwotfQotCi12b2lkIEdlbmVy
YXRlZENvZGVJbmZvX0Fubm90YXRpb246OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29vZ2xlLnBy
b3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24pCi0gIC8vIHJlcGVhdGVkIGludDMy
IHBhdGggPSAxIFtwYWNrZWQgPSB0cnVlXTsKLSAgaWYgKHRoaXMtPnBhdGhfc2l6ZSgpID4gMCkg
ewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0
ZVRhZygxLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lS
RVRZUEVfTEVOR1RIX0RFTElNSVRFRCwgb3V0cHV0KTsKLSAgICBvdXRwdXQtPldyaXRlVmFyaW50
MzIoX3BhdGhfY2FjaGVkX2J5dGVfc2l6ZV8pOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwg
dGhpcy0+cGF0aF9zaXplKCk7IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUludDMyTm9UYWcoCi0gICAgICB0aGlzLT5wYXRoKGkp
LCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIHNvdXJjZV9maWxlID0gMjsK
LSAgaWYgKGhhc19zb3VyY2VfZmlsZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdDo6VmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoCi0gICAgICB0aGlz
LT5zb3VyY2VfZmlsZSgpLmRhdGEoKSwgdGhpcy0+c291cmNlX2ZpbGUoKS5sZW5ndGgoKSwKLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNFUklBTElaRSwK
LSAgICAgICJnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5zb3Vy
Y2VfZmlsZSIpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDIsIHRoaXMtPnNvdXJjZV9maWxl
KCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBpbnQzMiBiZWdpbiA9IDM7Ci0gIGlm
IChoYXNfYmVnaW4oKSkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZUludDMyKDMsIHRoaXMtPmJlZ2luKCksIG91dHB1dCk7Ci0gIH0KLQot
ICAvLyBvcHRpb25hbCBpbnQzMiBlbmQgPSA0OwotICBpZiAoaGFzX2VuZCgpKSB7Ci0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzIoNCwg
dGhpcy0+ZW5kKCksIG91dHB1dCk7Ci0gIH0KLQotICBpZiAoX2ludGVybmFsX21ldGFkYXRhXy5o
YXZlX3Vua25vd25fZmllbGRzKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzKAotICAgICAgICB1bmtub3duX2Zp
ZWxkcygpLCBvdXRwdXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJp
YWxpemVfZW5kOmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uKQot
fQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0
aW9uOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2Rl
SW5mby5Bbm5vdGF0aW9uKQotICAvLyByZXBlYXRlZCBpbnQzMiBwYXRoID0gMSBbcGFja2VkID0g
dHJ1ZV07Ci0gIGlmICh0aGlzLT5wYXRoX3NpemUoKSA+IDApIHsKLSAgICB0YXJnZXQgPSA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVUYWdUb0FycmF5
KAotICAgICAgMSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELAotICAgICAgdGFyZ2V0KTsKLSAgICB0
YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVW
YXJpbnQzMlRvQXJyYXkoCi0gICAgICBfcGF0aF9jYWNoZWRfYnl0ZV9zaXplXywgdGFyZ2V0KTsK
LSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPnBhdGhfc2l6ZSgpOyBpKyspIHsKLSAg
ICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
Ci0gICAgICBXcml0ZUludDMyTm9UYWdUb0FycmF5KHRoaXMtPnBhdGgoaSksIHRhcmdldCk7Ci0g
IH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgc291cmNlX2ZpbGUgPSAyOwotICBpZiAoaGFzX3Nv
dXJjZV9maWxlKCkpIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICAgIHRoaXMtPnNvdXJjZV9maWxl
KCkuZGF0YSgpLCB0aGlzLT5zb3VyY2VfZmlsZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U0VSSUFMSVpFLAotICAgICAgImdvb2ds
ZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNvdXJjZV9maWxlIik7Ci0g
ICAgdGFyZ2V0ID0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpXcml0ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDIsIHRoaXMtPnNvdXJjZV9maWxl
KCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBpbnQzMiBiZWdpbiA9IDM7Ci0gIGlm
IChoYXNfYmVnaW4oKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUludDMyVG9BcnJheSgzLCB0aGlzLT5iZWdpbigpLCB0
YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgaW50MzIgZW5kID0gNDsKLSAgaWYgKGhhc19l
bmQoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZUludDMyVG9BcnJheSg0LCB0aGlzLT5lbmQoKSwgdGFyZ2V0KTsKLSAg
fQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewot
ICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OlNl
cmlhbGl6ZVVua25vd25GaWVsZHNUb0FycmF5KAotICAgICAgICB1bmtub3duX2ZpZWxkcygpLCB0
YXJnZXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9f
YXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uKQot
ICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6
Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9i
eXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRp
b24pCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICBpZiAoX2hhc19iaXRzX1sxIC8gMzJdICYg
MTR1KSB7Ci0gICAgLy8gb3B0aW9uYWwgc3RyaW5nIHNvdXJjZV9maWxlID0gMjsKLSAgICBpZiAo
aGFzX3NvdXJjZV9maWxlKCkpIHsKLSAgICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAot
ICAgICAgICAgIHRoaXMtPnNvdXJjZV9maWxlKCkpOwotICAgIH0KLQotICAgIC8vIG9wdGlvbmFs
IGludDMyIGJlZ2luID0gMzsKLSAgICBpZiAoaGFzX2JlZ2luKCkpIHsKLSAgICAgIHRvdGFsX3Np
emUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpJbnQzMlNpemUoCi0gICAgICAgICAgdGhpcy0+YmVnaW4oKSk7Ci0gICAgfQotCi0g
ICAgLy8gb3B0aW9uYWwgaW50MzIgZW5kID0gNDsKLSAgICBpZiAoaGFzX2VuZCgpKSB7Ci0gICAg
ICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6SW50MzJTaXplKAotICAgICAgICAgIHRoaXMtPmVuZCgpKTsKLSAg
ICB9Ci0KLSAgfQotICAvLyByZXBlYXRlZCBpbnQzMiBwYXRoID0gMSBbcGFja2VkID0gdHJ1ZV07
Ci0gIHsKLSAgICBpbnQgZGF0YV9zaXplID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRo
aXMtPnBhdGhfc2l6ZSgpOyBpKyspIHsKLSAgICAgIGRhdGFfc2l6ZSArPSA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICAgIEludDMyU2l6ZSh0aGlz
LT5wYXRoKGkpKTsKLSAgICB9Ci0gICAgaWYgKGRhdGFfc2l6ZSA+IDApIHsKLSAgICAgIHRvdGFs
X3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpJbnQzMlNpemUoZGF0YV9zaXplKTsKLSAgICB9Ci0gICAgR09PR0xFX1NBRkVf
Q09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgICBfcGF0aF9jYWNoZWRfYnl0ZV9zaXplXyA9
IGRhdGFfc2l6ZTsKLSAgICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLSAg
ICB0b3RhbF9zaXplICs9IGRhdGFfc2l6ZTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRh
dGFfLmhhdmVfdW5rbm93bl9maWVsZHMoKSkgewotICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXQ6OkNvbXB1dGVVbmtub3duRmll
bGRzU2l6ZSgKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSk7Ci0gIH0KLSAgR09PR0xFX1NBRkVf
Q09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3NpemU7
Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90YWxf
c2l6ZTsKLX0KLQotdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpNZXJnZUZyb20o
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbikKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZB
TFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgR2Vu
ZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IEdlbmVyYXRlZENv
ZGVJbmZvX0Fubm90YXRpb24+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBO
VUxMKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9m
cm9tX2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlv
bikKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJn
ZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5HZW5l
cmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uKQotICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQot
fQotCi12b2lkIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246Ok1lcmdlRnJvbShjb25zdCBH
ZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYu
R2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbikKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNF
KCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgcGF0aF8uTWVyZ2VG
cm9tKGZyb20ucGF0aF8pOwotICBpZiAoZnJvbS5faGFzX2JpdHNfWzEgLyAzMl0gJiAoMHhmZnUg
PDwgKDEgJSAzMikpKSB7Ci0gICAgaWYgKGZyb20uaGFzX3NvdXJjZV9maWxlKCkpIHsKLSAgICAg
IHNldF9oYXNfc291cmNlX2ZpbGUoKTsKLSAgICAgIHNvdXJjZV9maWxlXy5Bc3NpZ25XaXRoRGVm
YXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCksIGZyb20uc291cmNlX2ZpbGVfKTsKLSAgICB9Ci0gICAgaWYgKGZyb20uaGFzX2Jl
Z2luKCkpIHsKLSAgICAgIHNldF9iZWdpbihmcm9tLmJlZ2luKCkpOwotICAgIH0KLSAgICBpZiAo
ZnJvbS5oYXNfZW5kKCkpIHsKLSAgICAgIHNldF9lbmQoZnJvbS5lbmQoKSk7Ci0gICAgfQotICB9
Ci0gIGlmIChmcm9tLl9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7
Ci0gICAgbXV0YWJsZV91bmtub3duX2ZpZWxkcygpLT5NZXJnZUZyb20oZnJvbS51bmtub3duX2Zp
ZWxkcygpKTsKLSAgfQotfQotCi12b2lkIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OkNv
cHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpnb29nbGUu
cHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbikKLSAgaWYgKCZmcm9tID09IHRo
aXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIEdl
bmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OkNvcHlGcm9tKGNvbnN0IEdlbmVyYXRlZENvZGVJ
bmZvX0Fubm90YXRpb24mIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFz
c19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJ
bmZvLkFubm90YXRpb24pCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7
Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0
aW9uOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lk
IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OlN3YXAoR2VuZXJhdGVkQ29kZUluZm9fQW5u
b3RhdGlvbiogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJu
YWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6SW50
ZXJuYWxTd2FwKEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24qIG90aGVyKSB7Ci0gIHBhdGhf
LlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPnBhdGhfKTsKLSAgc291cmNlX2ZpbGVfLlN3YXAoJm90
aGVyLT5zb3VyY2VfZmlsZV8pOwotICBzdGQ6OnN3YXAoYmVnaW5fLCBvdGhlci0+YmVnaW5fKTsK
LSAgc3RkOjpzd2FwKGVuZF8sIG90aGVyLT5lbmRfKTsKLSAgc3RkOjpzd2FwKF9oYXNfYml0c19b
MF0sIG90aGVyLT5faGFzX2JpdHNfWzBdKTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZv
dGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBv
dGhlci0+X2NhY2hlZF9zaXplXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEg
R2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHBy
b3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
dGFkYXRhIG1ldGFkYXRhOwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gR2VuZXJhdGVkQ29kZUlu
Zm9fQW5ub3RhdGlvbl9kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IEdlbmVy
YXRlZENvZGVJbmZvX0Fubm90YXRpb25fcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsK
LX0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19W
RVIgPj0gMTkwMAotY29uc3QgaW50IEdlbmVyYXRlZENvZGVJbmZvOjprQW5ub3RhdGlvbkZpZWxk
TnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0gMTkw
MAotCi1HZW5lcmF0ZWRDb2RlSW5mbzo6R2VuZXJhdGVkQ29kZUluZm8oKQotICA6IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hh
cmVkQ3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29v
Z2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvKQotfQotCi12b2lkIEdlbmVyYXRlZENvZGVJ
bmZvOjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci19Ci0KLUdlbmVyYXRlZENvZGVJbmZvOjpH
ZW5lcmF0ZWRDb2RlSW5mbyhjb25zdCBHZW5lcmF0ZWRDb2RlSW5mbyYgZnJvbSkKLSAgOiA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwp
IHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRD
b2RlSW5mbykKLX0KLQotdm9pZCBHZW5lcmF0ZWRDb2RlSW5mbzo6U2hhcmVkQ3RvcigpIHsKLSAg
X2NhY2hlZF9zaXplXyA9IDA7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAsIHNpemVvZihfaGFz
X2JpdHNfKSk7Ci19Ci0KLUdlbmVyYXRlZENvZGVJbmZvOjp+R2VuZXJhdGVkQ29kZUluZm8oKSB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1
Zi5HZW5lcmF0ZWRDb2RlSW5mbykKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lkIEdlbmVyYXRl
ZENvZGVJbmZvOjpTaGFyZWREdG9yKCkgewotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNl
XykgewotICB9Ci19Ci0KLXZvaWQgR2VuZXJhdGVkQ29kZUluZm86OlNldENhY2hlZFNpemUoaW50
IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsK
LSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVT
X0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBHZW5lcmF0
ZWRDb2RlSW5mbzo6ZGVzY3JpcHRvcigpIHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNP
bmNlKCk7Ci0gIHJldHVybiBHZW5lcmF0ZWRDb2RlSW5mb19kZXNjcmlwdG9yXzsKLX0KLQotY29u
c3QgR2VuZXJhdGVkQ29kZUluZm8mIEdlbmVyYXRlZENvZGVJbmZvOjpkZWZhdWx0X2luc3RhbmNl
KCkgewotICBpZiAoZGVmYXVsdF9pbnN0YW5jZV8gPT0gTlVMTCkgcHJvdG9idWZfQWRkRGVzY19n
b29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICByZXR1cm4gKmRlZmF1
bHRfaW5zdGFuY2VfOwotfQotCi1HZW5lcmF0ZWRDb2RlSW5mbyogR2VuZXJhdGVkQ29kZUluZm86
OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotR2VuZXJhdGVkQ29kZUluZm8qIEdlbmVyYXRl
ZENvZGVJbmZvOjpOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsK
LSAgR2VuZXJhdGVkQ29kZUluZm8qIG4gPSBuZXcgR2VuZXJhdGVkQ29kZUluZm87Ci0gIGlmIChh
cmVuYSAhPSBOVUxMKSB7Ci0gICAgYXJlbmEtPk93bihuKTsKLSAgfQotICByZXR1cm4gbjsKLX0K
LQotdm9pZCBHZW5lcmF0ZWRDb2RlSW5mbzo6Q2xlYXIoKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29k
ZUluZm8pCi0gIGFubm90YXRpb25fLkNsZWFyKCk7Ci0gIDo6bWVtc2V0KF9oYXNfYml0c18sIDAs
IHNpemVvZihfaGFzX2JpdHNfKSk7Ci0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5r
bm93bl9maWVsZHMoKSkgewotICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+Q2xlYXIoKTsK
LSAgfQotfQotCi1ib29sIEdlbmVyYXRlZENvZGVJbmZvOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRT
dHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5w
dXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShF
WFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRh
ZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90
b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbykKLSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6
Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1
dG9mZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBo
YW5kbGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7Ci0gICAgICAvLyByZXBl
YXRlZCAuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24gYW5ub3Rh
dGlvbiA9IDE7Ci0gICAgICBjYXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxMCkgewotICAg
ICAgICAgIERPXyhpbnB1dC0+SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7Ci0gICAgICAgICBw
YXJzZV9sb29wX2Fubm90YXRpb246Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9u
RGVwdGgoCi0gICAgICAgICAgICAgICAgaW5wdXQsIGFkZF9hbm5vdGF0aW9uKCkpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDEwKSkgZ290byBwYXJzZV9sb29wX2Fubm90YXRp
b247Ci0gICAgICAgIGlucHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAg
ICAgICBpZiAoaW5wdXQtPkV4cGVjdEF0RW5kKCkpIGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgot
ICAgICAgICBpZiAodGFnID09IDAgfHwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAg
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZ
UEVfRU5EX0dST1VQKSB7Ci0gICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAg
ICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0OjpTa2lwRmll
bGQoCi0gICAgICAgICAgICAgIGlucHV0LCB0YWcsIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSkp
OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5HZW5l
cmF0ZWRDb2RlSW5mbykKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29k
ZUluZm8pCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9pZCBHZW5lcmF0ZWRD
b2RlSW5mbzo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVk
Q29kZUluZm8pCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUlu
Zm8uQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gMTsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAs
IG4gPSB0aGlzLT5hbm5vdGF0aW9uX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VNYXliZVRv
QXJyYXkoCi0gICAgICAxLCB0aGlzLT5hbm5vdGF0aW9uKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAg
aWYgKF9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZp
ZWxkcygKLSAgICAgICAgdW5rbm93bl9maWVsZHMoKSwgb3V0cHV0KTsKLSAgfQotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuR2VuZXJh
dGVkQ29kZUluZm8pCi19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIEdlbmVyYXRlZENv
ZGVJbmZvOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRD
b2RlSW5mbykKLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5m
by5Bbm5vdGF0aW9uIGFubm90YXRpb24gPSAxOwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwg
biA9IHRoaXMtPmFubm90YXRpb25fc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgdGFyZ2V0ID0g
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3Jp
dGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgMSwgdGhpcy0+YW5ub3RhdGlvbihp
KSwgdGFyZ2V0KTsKLSAgfQotCi0gIGlmIChfaW50ZXJuYWxfbWV0YWRhdGFfLmhhdmVfdW5rbm93
bl9maWVsZHMoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXQ6OlNlcmlhbGl6ZVVua25vd25GaWVsZHNUb0FycmF5KAotICAgICAgICB1bmtu
b3duX2ZpZWxkcygpLCB0YXJnZXQpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChzZXJpYWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5m
bykKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IEdlbmVyYXRlZENvZGVJbmZvOjpCeXRlU2l6
ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6
ZV9zdGFydDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8pCi0gIGludCB0b3RhbF9z
aXplID0gMDsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJ
bmZvLkFubm90YXRpb24gYW5ub3RhdGlvbiA9IDE7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMt
PmFubm90YXRpb25fc2l6ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPmFubm90YXRp
b25fc2l6ZSgpOyBpKyspIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0g
ICAgICAgIHRoaXMtPmFubm90YXRpb24oaSkpOwotICB9Ci0KLSAgaWYgKF9pbnRlcm5hbF9tZXRh
ZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgdG90YWxfc2l6ZSArPQotICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdDo6Q29tcHV0ZVVua25vd25G
aWVsZHNTaXplKAotICAgICAgICB1bmtub3duX2ZpZWxkcygpKTsKLSAgfQotICBHT09HTEVfU0FG
RV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6
ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3Rh
bF9zaXplOwotfQotCi12b2lkIEdlbmVyYXRlZENvZGVJbmZvOjpNZXJnZUZyb20oY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuR2VuZXJh
dGVkQ29kZUluZm8pCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkg
TWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGNvbnN0IEdlbmVyYXRlZENvZGVJbmZvKiBzb3Vy
Y2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9H
ZW5lcmF0ZWQ8Y29uc3QgR2VuZXJhdGVkQ29kZUluZm8+KAotICAgICAgICAgICZmcm9tKTsKLSAg
aWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5l
cmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29k
ZUluZm8pCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6UmVmbGVjdGlvbk9wczo6
TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpnb29nbGUucHJvdG9idWYu
R2VuZXJhdGVkQ29kZUluZm8pCi0gICAgTWVyZ2VGcm9tKCpzb3VyY2UpOwotICB9Ci19Ci0KLXZv
aWQgR2VuZXJhdGVkQ29kZUluZm86Ok1lcmdlRnJvbShjb25zdCBHZW5lcmF0ZWRDb2RlSW5mbyYg
ZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdl
X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvKQotICBpZiAoR09P
R0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18p
OwotICBhbm5vdGF0aW9uXy5NZXJnZUZyb20oZnJvbS5hbm5vdGF0aW9uXyk7Ci0gIGlmIChmcm9t
Ll9pbnRlcm5hbF9tZXRhZGF0YV8uaGF2ZV91bmtub3duX2ZpZWxkcygpKSB7Ci0gICAgbXV0YWJs
ZV91bmtub3duX2ZpZWxkcygpLT5NZXJnZUZyb20oZnJvbS51bmtub3duX2ZpZWxkcygpKTsKLSAg
fQotfQotCi12b2lkIEdlbmVyYXRlZENvZGVJbmZvOjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChn
ZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJ
bmZvKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZy
b20oZnJvbSk7Ci19Ci0KLXZvaWQgR2VuZXJhdGVkQ29kZUluZm86OkNvcHlGcm9tKGNvbnN0IEdl
bmVyYXRlZENvZGVJbmZvJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xh
c3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2Rl
SW5mbykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VG
cm9tKGZyb20pOwotfQotCi1ib29sIEdlbmVyYXRlZENvZGVJbmZvOjpJc0luaXRpYWxpemVkKCkg
Y29uc3QgewotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdlbmVyYXRlZENvZGVJbmZvOjpT
d2FwKEdlbmVyYXRlZENvZGVJbmZvKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0
dXJuOwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQotdm9pZCBHZW5lcmF0ZWRDb2RlSW5mbzo6
SW50ZXJuYWxTd2FwKEdlbmVyYXRlZENvZGVJbmZvKiBvdGhlcikgewotICBhbm5vdGF0aW9uXy5V
bnNhZmVBcmVuYVN3YXAoJm90aGVyLT5hbm5vdGF0aW9uXyk7Ci0gIHN0ZDo6c3dhcChfaGFzX2Jp
dHNfWzBdLCBvdGhlci0+X2hhc19iaXRzX1swXSk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dh
cCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXpl
Xywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFk
YXRhIEdlbmVyYXRlZENvZGVJbmZvOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZf
QXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEg
bWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBHZW5lcmF0ZWRDb2RlSW5mb19kZXNj
cmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IEdlbmVyYXRlZENvZGVJbmZvX3JlZmxl
Y3Rpb25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9U
X0lOX0hFQURFUlMKLS8vIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24KLQotLy8gcmVwZWF0
ZWQgaW50MzIgcGF0aCA9IDEgW3BhY2tlZCA9IHRydWVdOwotaW50IEdlbmVyYXRlZENvZGVJbmZv
X0Fubm90YXRpb246OnBhdGhfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHBhdGhfLnNpemUoKTsK
LX0KLXZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6Y2xlYXJfcGF0aCgpIHsKLSAg
cGF0aF8uQ2xlYXIoKTsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIEdlbmVyYXRlZENv
ZGVJbmZvX0Fubm90YXRpb246OnBhdGgoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJ
bmZvLkFubm90YXRpb24ucGF0aCkKLSAgcmV0dXJuIHBhdGhfLkdldChpbmRleCk7Ci19Ci0gdm9p
ZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpzZXRfcGF0aChpbnQgaW5kZXgsIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpIHsKLSAgcGF0aF8uU2V0KGluZGV4LCB2YWx1ZSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVm
LkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucGF0aCkKLX0KLSB2b2lkIEdlbmVyYXRlZENv
ZGVJbmZvX0Fubm90YXRpb246OmFkZF9wYXRoKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFs
dWUpIHsKLSAgcGF0aF8uQWRkKHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5w
YXRoKQotfQotIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZDwgOjpnb29n
bGU6OnByb3RvYnVmOjppbnQzMiA+JgotR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6cGF0
aCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29v
Z2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24ucGF0aCkKLSAgcmV0dXJu
IHBhdGhfOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZDwgOjpnb29nbGU6
OnByb3RvYnVmOjppbnQzMiA+KgotR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6bXV0YWJs
ZV9wYXRoKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9s
aXN0Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnBhdGgpCi0g
IHJldHVybiAmcGF0aF87Ci19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBzb3VyY2VfZmlsZSA9IDI7
Ci1ib29sIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246Omhhc19zb3VyY2VfZmlsZSgpIGNv
bnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMnUpICE9IDA7Ci19Ci12
b2lkIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OnNldF9oYXNfc291cmNlX2ZpbGUoKSB7
Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwMnU7Ci19Ci12b2lkIEdlbmVyYXRlZENvZGVJ
bmZvX0Fubm90YXRpb246OmNsZWFyX2hhc19zb3VyY2VfZmlsZSgpIHsKLSAgX2hhc19iaXRzX1sw
XSAmPSB+MHgwMDAwMDAwMnU7Ci19Ci12b2lkIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246
OmNsZWFyX3NvdXJjZV9maWxlKCkgewotICBzb3VyY2VfZmlsZV8uQ2xlYXJUb0VtcHR5Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotICBjbGVhcl9oYXNfc291cmNlX2ZpbGUoKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3Ry
aW5nJiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpzb3VyY2VfZmlsZSgpIGNvbnN0IHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYu
R2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5zb3VyY2VfZmlsZSkKLSAgcmV0dXJuIHNvdXJj
ZV9maWxlXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5v
dGF0aW9uOjpzZXRfc291cmNlX2ZpbGUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAg
c2V0X2hhc19zb3VyY2VfZmlsZSgpOwotICBzb3VyY2VfZmlsZV8uU2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZh
bHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJv
dG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5zb3VyY2VfZmlsZSkKLX0KLSB2b2lk
IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OnNldF9zb3VyY2VfZmlsZShjb25zdCBjaGFy
KiB2YWx1ZSkgewotICBzZXRfaGFzX3NvdXJjZV9maWxlKCk7Ci0gIHNvdXJjZV9maWxlXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZv
LkFubm90YXRpb24uc291cmNlX2ZpbGUpCi19Ci0gdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5v
dGF0aW9uOjpzZXRfc291cmNlX2ZpbGUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7
Ci0gIHNldF9oYXNfc291cmNlX2ZpbGUoKTsKLSAgc291cmNlX2ZpbGVfLlNldE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1
ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2lu
dGVyOmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNvdXJjZV9m
aWxlKQotfQotIDo6c3RkOjpzdHJpbmcqIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246Om11
dGFibGVfc291cmNlX2ZpbGUoKSB7Ci0gIHNldF9oYXNfc291cmNlX2ZpbGUoKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkdlbmVy
YXRlZENvZGVJbmZvLkFubm90YXRpb24uc291cmNlX2ZpbGUpCi0gIHJldHVybiBzb3VyY2VfZmls
ZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBHZW5lcmF0ZWRDb2Rl
SW5mb19Bbm5vdGF0aW9uOjpyZWxlYXNlX3NvdXJjZV9maWxlKCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29k
ZUluZm8uQW5ub3RhdGlvbi5zb3VyY2VfZmlsZSkKLSAgY2xlYXJfaGFzX3NvdXJjZV9maWxlKCk7
Ci0gIHJldHVybiBzb3VyY2VfZmlsZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEdl
bmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OnNldF9hbGxvY2F0ZWRfc291cmNlX2ZpbGUoOjpz
dGQ6OnN0cmluZyogc291cmNlX2ZpbGUpIHsKLSAgaWYgKHNvdXJjZV9maWxlICE9IE5VTEwpIHsK
LSAgICBzZXRfaGFzX3NvdXJjZV9maWxlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX3Nv
dXJjZV9maWxlKCk7Ci0gIH0KLSAgc291cmNlX2ZpbGVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LCBzb3VyY2VfZmlsZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRf
YWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNv
dXJjZV9maWxlKQotfQotCi0vLyBvcHRpb25hbCBpbnQzMiBiZWdpbiA9IDM7Ci1ib29sIEdlbmVy
YXRlZENvZGVJbmZvX0Fubm90YXRpb246Omhhc19iZWdpbigpIGNvbnN0IHsKLSAgcmV0dXJuIChf
aGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci12b2lkIEdlbmVyYXRlZENvZGVJ
bmZvX0Fubm90YXRpb246OnNldF9oYXNfYmVnaW4oKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgw
MDAwMDAwNHU7Ci19Ci12b2lkIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmNsZWFyX2hh
c19iZWdpbigpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwNHU7Ci19Ci12b2lkIEdl
bmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmNsZWFyX2JlZ2luKCkgewotICBiZWdpbl8gPSAw
OwotICBjbGVhcl9oYXNfYmVnaW4oKTsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIEdl
bmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmJlZ2luKCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2Rl
SW5mby5Bbm5vdGF0aW9uLmJlZ2luKQotICByZXR1cm4gYmVnaW5fOwotfQotIHZvaWQgR2VuZXJh
dGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6c2V0X2JlZ2luKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
MzIgdmFsdWUpIHsKLSAgc2V0X2hhc19iZWdpbigpOwotICBiZWdpbl8gPSB2YWx1ZTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuR2VuZXJh
dGVkQ29kZUluZm8uQW5ub3RhdGlvbi5iZWdpbikKLX0KLQotLy8gb3B0aW9uYWwgaW50MzIgZW5k
ID0gNDsKLWJvb2wgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6aGFzX2VuZCgpIGNvbnN0
IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwOHUpICE9IDA7Ci19Ci12b2lk
IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OnNldF9oYXNfZW5kKCkgewotICBfaGFzX2Jp
dHNfWzBdIHw9IDB4MDAwMDAwMDh1OwotfQotdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0
aW9uOjpjbGVhcl9oYXNfZW5kKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDA4dTsK
LX0KLXZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6Y2xlYXJfZW5kKCkgewotICBl
bmRfID0gMDsKLSAgY2xlYXJfaGFzX2VuZCgpOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
MzIgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6ZW5kKCkgY29uc3QgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRD
b2RlSW5mby5Bbm5vdGF0aW9uLmVuZCkKLSAgcmV0dXJuIGVuZF87Ci19Ci0gdm9pZCBHZW5lcmF0
ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpzZXRfZW5kKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIg
dmFsdWUpIHsKLSAgc2V0X2hhc19lbmQoKTsKLSAgZW5kXyA9IHZhbHVlOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2Rl
SW5mby5Bbm5vdGF0aW9uLmVuZCkKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBHZW5lcmF0ZWRD
b2RlSW5mbwotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZv
LkFubm90YXRpb24gYW5ub3RhdGlvbiA9IDE7Ci1pbnQgR2VuZXJhdGVkQ29kZUluZm86OmFubm90
YXRpb25fc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGFubm90YXRpb25fLnNpemUoKTsKLX0KLXZv
aWQgR2VuZXJhdGVkQ29kZUluZm86OmNsZWFyX2Fubm90YXRpb24oKSB7Ci0gIGFubm90YXRpb25f
LkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkdlbmVyYXRlZENvZGVJbmZv
X0Fubm90YXRpb24mIEdlbmVyYXRlZENvZGVJbmZvOjphbm5vdGF0aW9uKGludCBpbmRleCkgY29u
c3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90
b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5hbm5vdGF0aW9uKQotICByZXR1cm4gYW5ub3RhdGlvbl8u
R2V0KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6R2VuZXJhdGVkQ29kZUluZm9fQW5u
b3RhdGlvbiogR2VuZXJhdGVkQ29kZUluZm86Om11dGFibGVfYW5ub3RhdGlvbihpbnQgaW5kZXgp
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnBy
b3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLmFubm90YXRpb24pCi0gIHJldHVybiBhbm5vdGF0aW9u
Xy5NdXRhYmxlKGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6R2VuZXJhdGVkQ29kZUlu
Zm9fQW5ub3RhdGlvbiogR2VuZXJhdGVkQ29kZUluZm86OmFkZF9hbm5vdGF0aW9uKCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5HZW5l
cmF0ZWRDb2RlSW5mby5hbm5vdGF0aW9uKQotICByZXR1cm4gYW5ub3RhdGlvbl8uQWRkKCk7Ci19
Ci06Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6R2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiA+KgotR2VuZXJhdGVkQ29kZUluZm86Om11
dGFibGVfYW5ub3RhdGlvbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uYW5ub3RhdGlv
bikKLSAgcmV0dXJuICZhbm5vdGF0aW9uXzsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpHZW5lcmF0ZWRDb2RlSW5mb19B
bm5vdGF0aW9uID4mCi1HZW5lcmF0ZWRDb2RlSW5mbzo6YW5ub3RhdGlvbigpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkdl
bmVyYXRlZENvZGVJbmZvLmFubm90YXRpb24pCi0gIHJldHVybiBhbm5vdGF0aW9uXzsKLX0KLQot
I2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8gbmFtZXNwYWNlIHByb3Rv
YnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChnbG9iYWxfc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRv
ci5wYi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTJhMGEzYTc2M2YwZWNiYWRiYzA5NTY2YjM2ZDg1MzllYmQ3ZTE3
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcxNCArMCww
IEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5P
VCBFRElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bwotCi0j
aWZuZGVmIFBST1RPQlVGX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvX19J
TkNMVURFRAotI2RlZmluZSBQUk9UT0JVRl9nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3Jf
MmVwcm90b19fSU5DTFVERUQKLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotI2lmIEdPT0dMRV9QUk9UT0JVRl9WRVJTSU9O
IDwgMzAwMDAwMAotI2Vycm9yIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGEgbmV3ZXIgdmVy
c2lvbiBvZiBwcm90b2Mgd2hpY2ggaXMKLSNlcnJvciBpbmNvbXBhdGlibGUgd2l0aCB5b3VyIFBy
b3RvY29sIEJ1ZmZlciBoZWFkZXJzLiAgUGxlYXNlIHVwZGF0ZQotI2Vycm9yIHlvdXIgaGVhZGVy
cy4KLSNlbmRpZgotI2lmIDMwMDAwMDAgPCBHT09HTEVfUFJPVE9CVUZfTUlOX1BST1RPQ19WRVJT
SU9OCi0jZXJyb3IgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgYW4gb2xkZXIgdmVyc2lvbiBv
ZiBwcm90b2Mgd2hpY2ggaXMKLSNlcnJvciBpbmNvbXBhdGlibGUgd2l0aCB5b3VyIFByb3RvY29s
IEJ1ZmZlciBoZWFkZXJzLiAgUGxlYXNlCi0jZXJyb3IgcmVnZW5lcmF0ZSB0aGlzIGZpbGUgd2l0
aCBhIG5ld2VyIHZlcnNpb24gb2YgcHJvdG9jLgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvYXJlbmEuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYXJlbmFzdHJpbmcu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfdXRpbC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXRhZGF0YS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2Zp
ZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2V4dGVuc2lvbl9zZXQuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX2VudW1fcmVmbGVjdGlvbi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldC5oPgotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGluY2x1ZGVzKQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBw
cm90b2J1ZiB7Ci0KLS8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCAtLSBkbyBub3Qg
Y2FsbCB0aGVzZS4KLXZvaWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29v
Z2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLXZvaWQgcHJvdG9idWZfQXNz
aWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotdm9pZCBw
cm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJv
dG8oKTsKLQotY2xhc3MgRGVzY3JpcHRvclByb3RvOwotY2xhc3MgRGVzY3JpcHRvclByb3RvX0V4
dGVuc2lvblJhbmdlOwotY2xhc3MgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U7Ci1jbGFz
cyBFbnVtRGVzY3JpcHRvclByb3RvOwotY2xhc3MgRW51bU9wdGlvbnM7Ci1jbGFzcyBFbnVtVmFs
dWVEZXNjcmlwdG9yUHJvdG87Ci1jbGFzcyBFbnVtVmFsdWVPcHRpb25zOwotY2xhc3MgRmllbGRE
ZXNjcmlwdG9yUHJvdG87Ci1jbGFzcyBGaWVsZE9wdGlvbnM7Ci1jbGFzcyBGaWxlRGVzY3JpcHRv
clByb3RvOwotY2xhc3MgRmlsZURlc2NyaXB0b3JTZXQ7Ci1jbGFzcyBGaWxlT3B0aW9uczsKLWNs
YXNzIEdlbmVyYXRlZENvZGVJbmZvOwotY2xhc3MgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlv
bjsKLWNsYXNzIE1lc3NhZ2VPcHRpb25zOwotY2xhc3MgTWV0aG9kRGVzY3JpcHRvclByb3RvOwot
Y2xhc3MgTWV0aG9kT3B0aW9uczsKLWNsYXNzIE9uZW9mRGVzY3JpcHRvclByb3RvOwotY2xhc3Mg
U2VydmljZURlc2NyaXB0b3JQcm90bzsKLWNsYXNzIFNlcnZpY2VPcHRpb25zOwotY2xhc3MgU291
cmNlQ29kZUluZm87Ci1jbGFzcyBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjsKLWNsYXNzIFVuaW50
ZXJwcmV0ZWRPcHRpb247Ci1jbGFzcyBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OwotCi1l
bnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUgewotICBGaWVsZERlc2NyaXB0b3JQcm90b19U
eXBlX1RZUEVfRE9VQkxFID0gMSwKLSAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX0ZM
T0FUID0gMiwKLSAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX0lOVDY0ID0gMywKLSAg
RmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX1VJTlQ2NCA9IDQsCi0gIEZpZWxkRGVzY3Jp
cHRvclByb3RvX1R5cGVfVFlQRV9JTlQzMiA9IDUsCi0gIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5
cGVfVFlQRV9GSVhFRDY0ID0gNiwKLSAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX0ZJ
WEVEMzIgPSA3LAotICBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX1RZUEVfQk9PTCA9IDgsCi0g
IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfVFlQRV9TVFJJTkcgPSA5LAotICBGaWVsZERlc2Ny
aXB0b3JQcm90b19UeXBlX1RZUEVfR1JPVVAgPSAxMCwKLSAgRmllbGREZXNjcmlwdG9yUHJvdG9f
VHlwZV9UWVBFX01FU1NBR0UgPSAxMSwKLSAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBF
X0JZVEVTID0gMTIsCi0gIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfVFlQRV9VSU5UMzIgPSAx
MywKLSAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX0VOVU0gPSAxNCwKLSAgRmllbGRE
ZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX1NGSVhFRDMyID0gMTUsCi0gIEZpZWxkRGVzY3JpcHRv
clByb3RvX1R5cGVfVFlQRV9TRklYRUQ2NCA9IDE2LAotICBGaWVsZERlc2NyaXB0b3JQcm90b19U
eXBlX1RZUEVfU0lOVDMyID0gMTcsCi0gIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfVFlQRV9T
SU5UNjQgPSAxOAotfTsKLUxJQlBST1RPQlVGX0VYUE9SVCBib29sIEZpZWxkRGVzY3JpcHRvclBy
b3RvX1R5cGVfSXNWYWxpZChpbnQgdmFsdWUpOwotY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG9f
VHlwZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX1R5cGVfTUlOID0gRmllbGREZXNjcmlwdG9y
UHJvdG9fVHlwZV9UWVBFX0RPVUJMRTsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUg
RmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UeXBlX01BWCA9IEZpZWxkRGVzY3JpcHRvclByb3Rv
X1R5cGVfVFlQRV9TSU5UNjQ7Ci1jb25zdCBpbnQgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9U
eXBlX0FSUkFZU0laRSA9IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfVHlwZV9NQVggKyAxOwot
Ci1MSUJQUk9UT0JVRl9FWFBPUlQgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3Jp
cHRvciogRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9kZXNjcmlwdG9yKCk7Ci1pbmxpbmUgY29u
c3QgOjpzdGQ6OnN0cmluZyYgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9OYW1lKEZpZWxkRGVz
Y3JpcHRvclByb3RvX1R5cGUgdmFsdWUpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6Ok5hbWVPZkVudW0oCi0gICAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9kZXNj
cmlwdG9yKCksIHZhbHVlKTsKLX0KLWlubGluZSBib29sIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5
cGVfUGFyc2UoCi0gICAgY29uc3QgOjpzdGQ6OnN0cmluZyYgbmFtZSwgRmllbGREZXNjcmlwdG9y
UHJvdG9fVHlwZSogdmFsdWUpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OlBhcnNlTmFtZWRFbnVtPEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGU+KAotICAgIEZpZWxk
RGVzY3JpcHRvclByb3RvX1R5cGVfZGVzY3JpcHRvcigpLCBuYW1lLCB2YWx1ZSk7Ci19Ci1lbnVt
IEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsIHsKLSAgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFi
ZWxfTEFCRUxfT1BUSU9OQUwgPSAxLAotICBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbF9MQUJF
TF9SRVFVSVJFRCA9IDIsCi0gIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsX0xBQkVMX1JFUEVB
VEVEID0gMwotfTsKLUxJQlBST1RPQlVGX0VYUE9SVCBib29sIEZpZWxkRGVzY3JpcHRvclByb3Rv
X0xhYmVsX0lzVmFsaWQoaW50IHZhbHVlKTsKLWNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvX0xh
YmVsIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsX0xhYmVsX01JTiA9IEZpZWxkRGVzY3JpcHRv
clByb3RvX0xhYmVsX0xBQkVMX09QVElPTkFMOwotY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG9f
TGFiZWwgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxfTGFiZWxfTUFYID0gRmllbGREZXNjcmlw
dG9yUHJvdG9fTGFiZWxfTEFCRUxfUkVQRUFURUQ7Ci1jb25zdCBpbnQgRmllbGREZXNjcmlwdG9y
UHJvdG9fTGFiZWxfTGFiZWxfQVJSQVlTSVpFID0gRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxf
TGFiZWxfTUFYICsgMTsKLQotTElCUFJPVE9CVUZfRVhQT1JUIGNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RW51bURlc2NyaXB0b3IqIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsX2Rlc2NyaXB0
b3IoKTsKLWlubGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBGaWVsZERlc2NyaXB0b3JQcm90b19M
YWJlbF9OYW1lKEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsIHZhbHVlKSB7Ci0gIHJldHVybiA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpOYW1lT2ZFbnVtKAotICAgIEZpZWxkRGVzY3Jp
cHRvclByb3RvX0xhYmVsX2Rlc2NyaXB0b3IoKSwgdmFsdWUpOwotfQotaW5saW5lIGJvb2wgRmll
bGREZXNjcmlwdG9yUHJvdG9fTGFiZWxfUGFyc2UoCi0gICAgY29uc3QgOjpzdGQ6OnN0cmluZyYg
bmFtZSwgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwqIHZhbHVlKSB7Ci0gIHJldHVybiA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpQYXJzZU5hbWVkRW51bTxGaWVsZERlc2NyaXB0b3JQ
cm90b19MYWJlbD4oCi0gICAgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxfZGVzY3JpcHRvcigp
LCBuYW1lLCB2YWx1ZSk7Ci19Ci1lbnVtIEZpbGVPcHRpb25zX09wdGltaXplTW9kZSB7Ci0gIEZp
bGVPcHRpb25zX09wdGltaXplTW9kZV9TUEVFRCA9IDEsCi0gIEZpbGVPcHRpb25zX09wdGltaXpl
TW9kZV9DT0RFX1NJWkUgPSAyLAotICBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVfTElURV9SVU5U
SU1FID0gMwotfTsKLUxJQlBST1RPQlVGX0VYUE9SVCBib29sIEZpbGVPcHRpb25zX09wdGltaXpl
TW9kZV9Jc1ZhbGlkKGludCB2YWx1ZSk7Ci1jb25zdCBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUg
RmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX09wdGltaXplTW9kZV9NSU4gPSBGaWxlT3B0aW9uc19P
cHRpbWl6ZU1vZGVfU1BFRUQ7Ci1jb25zdCBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUgRmlsZU9w
dGlvbnNfT3B0aW1pemVNb2RlX09wdGltaXplTW9kZV9NQVggPSBGaWxlT3B0aW9uc19PcHRpbWl6
ZU1vZGVfTElURV9SVU5USU1FOwotY29uc3QgaW50IEZpbGVPcHRpb25zX09wdGltaXplTW9kZV9P
cHRpbWl6ZU1vZGVfQVJSQVlTSVpFID0gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX09wdGltaXpl
TW9kZV9NQVggKyAxOwotCi1MSUJQUk9UT0JVRl9FWFBPUlQgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpFbnVtRGVzY3JpcHRvciogRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX2Rlc2NyaXB0b3Io
KTsKLWlubGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVf
TmFtZShGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUgdmFsdWUpIHsKLSAgcmV0dXJuIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6Ok5hbWVPZkVudW0oCi0gICAgRmlsZU9wdGlvbnNfT3B0aW1p
emVNb2RlX2Rlc2NyaXB0b3IoKSwgdmFsdWUpOwotfQotaW5saW5lIGJvb2wgRmlsZU9wdGlvbnNf
T3B0aW1pemVNb2RlX1BhcnNlKAotICAgIGNvbnN0IDo6c3RkOjpzdHJpbmcmIG5hbWUsIEZpbGVP
cHRpb25zX09wdGltaXplTW9kZSogdmFsdWUpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OlBhcnNlTmFtZWRFbnVtPEZpbGVPcHRpb25zX09wdGltaXplTW9kZT4oCi0g
ICAgRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX2Rlc2NyaXB0b3IoKSwgbmFtZSwgdmFsdWUpOwot
fQotZW51bSBGaWVsZE9wdGlvbnNfQ1R5cGUgewotICBGaWVsZE9wdGlvbnNfQ1R5cGVfU1RSSU5H
ID0gMCwKLSAgRmllbGRPcHRpb25zX0NUeXBlX0NPUkQgPSAxLAotICBGaWVsZE9wdGlvbnNfQ1R5
cGVfU1RSSU5HX1BJRUNFID0gMgotfTsKLUxJQlBST1RPQlVGX0VYUE9SVCBib29sIEZpZWxkT3B0
aW9uc19DVHlwZV9Jc1ZhbGlkKGludCB2YWx1ZSk7Ci1jb25zdCBGaWVsZE9wdGlvbnNfQ1R5cGUg
RmllbGRPcHRpb25zX0NUeXBlX0NUeXBlX01JTiA9IEZpZWxkT3B0aW9uc19DVHlwZV9TVFJJTkc7
Ci1jb25zdCBGaWVsZE9wdGlvbnNfQ1R5cGUgRmllbGRPcHRpb25zX0NUeXBlX0NUeXBlX01BWCA9
IEZpZWxkT3B0aW9uc19DVHlwZV9TVFJJTkdfUElFQ0U7Ci1jb25zdCBpbnQgRmllbGRPcHRpb25z
X0NUeXBlX0NUeXBlX0FSUkFZU0laRSA9IEZpZWxkT3B0aW9uc19DVHlwZV9DVHlwZV9NQVggKyAx
OwotCi1MSUJQUk9UT0JVRl9FWFBPUlQgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVz
Y3JpcHRvciogRmllbGRPcHRpb25zX0NUeXBlX2Rlc2NyaXB0b3IoKTsKLWlubGluZSBjb25zdCA6
OnN0ZDo6c3RyaW5nJiBGaWVsZE9wdGlvbnNfQ1R5cGVfTmFtZShGaWVsZE9wdGlvbnNfQ1R5cGUg
dmFsdWUpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok5hbWVPZkVu
dW0oCi0gICAgRmllbGRPcHRpb25zX0NUeXBlX2Rlc2NyaXB0b3IoKSwgdmFsdWUpOwotfQotaW5s
aW5lIGJvb2wgRmllbGRPcHRpb25zX0NUeXBlX1BhcnNlKAotICAgIGNvbnN0IDo6c3RkOjpzdHJp
bmcmIG5hbWUsIEZpZWxkT3B0aW9uc19DVHlwZSogdmFsdWUpIHsKLSAgcmV0dXJuIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OlBhcnNlTmFtZWRFbnVtPEZpZWxkT3B0aW9uc19DVHlwZT4o
Ci0gICAgRmllbGRPcHRpb25zX0NUeXBlX2Rlc2NyaXB0b3IoKSwgbmFtZSwgdmFsdWUpOwotfQot
ZW51bSBGaWVsZE9wdGlvbnNfSlNUeXBlIHsKLSAgRmllbGRPcHRpb25zX0pTVHlwZV9KU19OT1JN
QUwgPSAwLAotICBGaWVsZE9wdGlvbnNfSlNUeXBlX0pTX1NUUklORyA9IDEsCi0gIEZpZWxkT3B0
aW9uc19KU1R5cGVfSlNfTlVNQkVSID0gMgotfTsKLUxJQlBST1RPQlVGX0VYUE9SVCBib29sIEZp
ZWxkT3B0aW9uc19KU1R5cGVfSXNWYWxpZChpbnQgdmFsdWUpOwotY29uc3QgRmllbGRPcHRpb25z
X0pTVHlwZSBGaWVsZE9wdGlvbnNfSlNUeXBlX0pTVHlwZV9NSU4gPSBGaWVsZE9wdGlvbnNfSlNU
eXBlX0pTX05PUk1BTDsKLWNvbnN0IEZpZWxkT3B0aW9uc19KU1R5cGUgRmllbGRPcHRpb25zX0pT
VHlwZV9KU1R5cGVfTUFYID0gRmllbGRPcHRpb25zX0pTVHlwZV9KU19OVU1CRVI7Ci1jb25zdCBp
bnQgRmllbGRPcHRpb25zX0pTVHlwZV9KU1R5cGVfQVJSQVlTSVpFID0gRmllbGRPcHRpb25zX0pT
VHlwZV9KU1R5cGVfTUFYICsgMTsKLQotTElCUFJPVE9CVUZfRVhQT1JUIGNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3IqIEZpZWxkT3B0aW9uc19KU1R5cGVfZGVzY3JpcHRv
cigpOwotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZpZWxkT3B0aW9uc19KU1R5cGVfTmFt
ZShGaWVsZE9wdGlvbnNfSlNUeXBlIHZhbHVlKSB7Ci0gIHJldHVybiA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpOYW1lT2ZFbnVtKAotICAgIEZpZWxkT3B0aW9uc19KU1R5cGVfZGVzY3Jp
cHRvcigpLCB2YWx1ZSk7Ci19Ci1pbmxpbmUgYm9vbCBGaWVsZE9wdGlvbnNfSlNUeXBlX1BhcnNl
KAotICAgIGNvbnN0IDo6c3RkOjpzdHJpbmcmIG5hbWUsIEZpZWxkT3B0aW9uc19KU1R5cGUqIHZh
bHVlKSB7Ci0gIHJldHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpQYXJzZU5hbWVk
RW51bTxGaWVsZE9wdGlvbnNfSlNUeXBlPigKLSAgICBGaWVsZE9wdGlvbnNfSlNUeXBlX2Rlc2Ny
aXB0b3IoKSwgbmFtZSwgdmFsdWUpOwotfQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1jbGFzcyBMSUJQUk9U
T0JVRl9FWFBPUlQgRmlsZURlc2NyaXB0b3JTZXQgOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIEZpbGVEZXNjcmlwdG9yU2V0KCk7Ci0gIHZpcnR1YWwg
fkZpbGVEZXNjcmlwdG9yU2V0KCk7Ci0KLSAgRmlsZURlc2NyaXB0b3JTZXQoY29uc3QgRmlsZURl
c2NyaXB0b3JTZXQmIGZyb20pOwotCi0gIGlubGluZSBGaWxlRGVzY3JpcHRvclNldCYgb3BlcmF0
b3I9KGNvbnN0IEZpbGVEZXNjcmlwdG9yU2V0JiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJvbSk7
Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6VW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcygpIGNvbnN0IHsKLSAgICByZXR1
cm4gX2ludGVybmFsX21ldGFkYXRhXy51bmtub3duX2ZpZWxkcygpOwotICB9Ci0KLSAgaW5saW5l
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0KiBtdXRhYmxlX3Vua25vd25fZmll
bGRzKCkgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLm11dGFibGVfdW5rbm93bl9m
aWVsZHMoKTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IEZpbGVEZXNjcmlwdG9yU2V0JiBk
ZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBTd2FwKEZpbGVEZXNjcmlwdG9yU2V0KiBvdGhl
cik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUgRmlsZURlc2NyaXB0b3JTZXQqIE5ldygp
IGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIEZpbGVEZXNjcmlwdG9yU2V0KiBOZXco
Ojpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0OwotICB2b2lkIENvcHlGcm9t
KGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VG
cm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgQ29w
eUZyb20oY29uc3QgRmlsZURlc2NyaXB0b3JTZXQmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShj
b25zdCBGaWxlRGVzY3JpcHRvclNldCYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9vbCBJ
c0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJvb2wg
TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBv
dXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkgY29u
c3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXplXzsg
fQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9yKCk7
Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJuYWxT
d2FwKEZpbGVEZXNjcmlwdG9yU2V0KiBvdGhlcik7Ci0gIHByaXZhdGU6Ci0gIGlubGluZSA6Omdv
b2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5hcmVuYSgpOwotICB9Ci0gIGlubGluZSB2b2lkKiBN
YXliZUFyZW5hUHRyKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnJh
d19hcmVuYV9wdHIoKTsKLSAgfQotICBwdWJsaWM6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXRhZGF0YSBHZXRNZXRhZGF0YSgpIGNvbnN0OwotCi0gIC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gYWNj
ZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJv
dG8gZmlsZSA9IDE7Ci0gIGludCBmaWxlX3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9maWxl
KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0ZpbGVGaWVsZE51bWJlciA9IDE7Ci0gIGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3JQcm90byYgZmlsZShpbnQgaW5kZXgpIGNv
bnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNjcmlwdG9yUHJvdG8qIG11dGFibGVf
ZmlsZShpbnQgaW5kZXgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNjcmlwdG9yUHJv
dG8qIGFkZF9maWxlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwg
Ojpnb29nbGU6OnByb3RvYnVmOjpGaWxlRGVzY3JpcHRvclByb3RvID4qCi0gICAgICBtdXRhYmxl
X2ZpbGUoKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6
Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNjcmlwdG9yUHJvdG8gPiYKLSAgICAgIGZpbGUoKSBj
b25zdDsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xl
LnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0KQotIHByaXZhdGU6Ci0KLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJuYWxfbWV0
YWRhdGFfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiBfaGFzX2JpdHNfWzFdOwotICBt
dXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3JQcm90byA+IGZpbGVf
OwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29n
bGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90
b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7
Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8y
ZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7
Ci0gIHN0YXRpYyBGaWxlRGVzY3JpcHRvclNldCogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgRmlsZURlc2NyaXB0b3JQcm90
byA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgRmls
ZURlc2NyaXB0b3JQcm90bygpOwotICB2aXJ0dWFsIH5GaWxlRGVzY3JpcHRvclByb3RvKCk7Ci0K
LSAgRmlsZURlc2NyaXB0b3JQcm90byhjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBmcm9tKTsK
LQotICBpbmxpbmUgRmlsZURlc2NyaXB0b3JQcm90byYgb3BlcmF0b3I9KGNvbnN0IEZpbGVEZXNj
cmlwdG9yUHJvdG8mIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAgICByZXR1cm4gKnRo
aXM7Ci0gIH0KLQotICBpbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpVbmtub3duRmll
bGRTZXQmIHVua25vd25fZmllbGRzKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0
YWRhdGFfLnVua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBpbmxpbmUgOjpnb29nbGU6OnByb3Rv
YnVmOjpVbmtub3duRmllbGRTZXQqIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSB7Ci0gICAgcmV0
dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ubXV0YWJsZV91bmtub3duX2ZpZWxkcygpOwotICB9Ci0K
LSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVzY3JpcHRv
cigpOwotICBzdGF0aWMgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgZGVmYXVsdF9pbnN0YW5j
ZSgpOwotCi0gIHZvaWQgU3dhcChGaWxlRGVzY3JpcHRvclByb3RvKiBvdGhlcik7Ci0KLSAgLy8g
aW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICBpbmxpbmUgRmlsZURlc2NyaXB0b3JQcm90byogTmV3KCkgY29uc3QgeyBy
ZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgRmlsZURlc2NyaXB0b3JQcm90byogTmV3KDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNv
bnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBG
aWxlRGVzY3JpcHRvclByb3RvJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigpOwotICBib29sIElzSW5p
dGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJn
ZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpD
b2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1
dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNo
ZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsK
LSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0g
IHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAg
dm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAo
RmlsZURlc2NyaXB0b3JQcm90byogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29n
bGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5
YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdf
YXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0
YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vz
c29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBib29sIGhhc19uYW1lKCkg
Y29uc3Q7Ci0gIHZvaWQgY2xlYXJfbmFtZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtOYW1lRmll
bGROdW1iZXIgPSAxOwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lKCkgY29uc3Q7Ci0gIHZv
aWQgc2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNldF9uYW1l
KGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwg
c2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX25hbWUoKTsKLSAgOjpzdGQ6
OnN0cmluZyogcmVsZWFzZV9uYW1lKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9uYW1lKDo6c3Rk
OjpzdHJpbmcqIG5hbWUpOwotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBwYWNrYWdlID0gMjsKLSAg
Ym9vbCBoYXNfcGFja2FnZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3BhY2thZ2UoKTsKLSAgc3Rh
dGljIGNvbnN0IGludCBrUGFja2FnZUZpZWxkTnVtYmVyID0gMjsKLSAgY29uc3QgOjpzdGQ6OnN0
cmluZyYgcGFja2FnZSgpIGNvbnN0OwotICB2b2lkIHNldF9wYWNrYWdlKGNvbnN0IDo6c3RkOjpz
dHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBzZXRfcGFja2FnZShjb25zdCBjaGFyKiB2YWx1ZSk7Ci0g
IHZvaWQgc2V0X3BhY2thZ2UoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpz
dGQ6OnN0cmluZyogbXV0YWJsZV9wYWNrYWdlKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2Vf
cGFja2FnZSgpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfcGFja2FnZSg6OnN0ZDo6c3RyaW5nKiBw
YWNrYWdlKTsKLQotICAvLyByZXBlYXRlZCBzdHJpbmcgZGVwZW5kZW5jeSA9IDM7Ci0gIGludCBk
ZXBlbmRlbmN5X3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9kZXBlbmRlbmN5KCk7Ci0gIHN0
YXRpYyBjb25zdCBpbnQga0RlcGVuZGVuY3lGaWVsZE51bWJlciA9IDM7Ci0gIGNvbnN0IDo6c3Rk
OjpzdHJpbmcmIGRlcGVuZGVuY3koaW50IGluZGV4KSBjb25zdDsKLSAgOjpzdGQ6OnN0cmluZyog
bXV0YWJsZV9kZXBlbmRlbmN5KGludCBpbmRleCk7Ci0gIHZvaWQgc2V0X2RlcGVuZGVuY3koaW50
IGluZGV4LCBjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2RlcGVuZGVu
Y3koaW50IGluZGV4LCBjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2RlcGVuZGVuY3ko
aW50IGluZGV4LCBjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3Ry
aW5nKiBhZGRfZGVwZW5kZW5jeSgpOwotICB2b2lkIGFkZF9kZXBlbmRlbmN5KGNvbnN0IDo6c3Rk
OjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBhZGRfZGVwZW5kZW5jeShjb25zdCBjaGFyKiB2YWx1
ZSk7Ci0gIHZvaWQgYWRkX2RlcGVuZGVuY3koY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXpl
KTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6
c3RyaW5nPiYgZGVwZW5kZW5jeSgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+KiBtdXRhYmxlX2RlcGVuZGVuY3koKTsKLQotICAv
LyByZXBlYXRlZCBpbnQzMiBwdWJsaWNfZGVwZW5kZW5jeSA9IDEwOwotICBpbnQgcHVibGljX2Rl
cGVuZGVuY3lfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3B1YmxpY19kZXBlbmRlbmN5KCk7
Ci0gIHN0YXRpYyBjb25zdCBpbnQga1B1YmxpY0RlcGVuZGVuY3lGaWVsZE51bWJlciA9IDEwOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHB1YmxpY19kZXBlbmRlbmN5KGludCBpbmRleCkg
Y29uc3Q7Ci0gIHZvaWQgc2V0X3B1YmxpY19kZXBlbmRlbmN5KGludCBpbmRleCwgOjpnb29nbGU6
OnByb3RvYnVmOjppbnQzMiB2YWx1ZSk7Ci0gIHZvaWQgYWRkX3B1YmxpY19kZXBlbmRlbmN5KDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPiYKLSAgICAgIHB1
YmxpY19kZXBlbmRlbmN5KCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRG
aWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiA+KgotICAgICAgbXV0YWJsZV9wdWJsaWNf
ZGVwZW5kZW5jeSgpOwotCi0gIC8vIHJlcGVhdGVkIGludDMyIHdlYWtfZGVwZW5kZW5jeSA9IDEx
OwotICBpbnQgd2Vha19kZXBlbmRlbmN5X3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl93ZWFr
X2RlcGVuZGVuY3koKTsKLSAgc3RhdGljIGNvbnN0IGludCBrV2Vha0RlcGVuZGVuY3lGaWVsZE51
bWJlciA9IDExOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHdlYWtfZGVwZW5kZW5jeShp
bnQgaW5kZXgpIGNvbnN0OwotICB2b2lkIHNldF93ZWFrX2RlcGVuZGVuY3koaW50IGluZGV4LCA6
Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKTsKLSAgdm9pZCBhZGRfd2Vha19kZXBlbmRl
bmN5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpOwotICBjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPiYKLSAg
ICAgIHdlYWtfZGVwZW5kZW5jeSgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPioKLSAgICAgIG11dGFibGVfd2Vh
a19kZXBlbmRlbmN5KCk7Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9yUHJvdG8gbWVzc2FnZV90eXBlID0gNDsKLSAgaW50IG1lc3NhZ2VfdHlwZV9zaXplKCkgY29u
c3Q7Ci0gIHZvaWQgY2xlYXJfbWVzc2FnZV90eXBlKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga01l
c3NhZ2VUeXBlRmllbGROdW1iZXIgPSA0OwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRl
c2NyaXB0b3JQcm90byYgbWVzc2FnZV90eXBlKGludCBpbmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvKiBtdXRhYmxlX21lc3NhZ2VfdHlwZShpbnQgaW5k
ZXgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90byogYWRkX21lc3NhZ2Vf
dHlwZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvID4qCi0gICAgICBtdXRhYmxlX21lc3NhZ2VfdHlw
ZSgpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvID4mCi0gICAgICBtZXNzYWdlX3R5cGUoKSBj
b25zdDsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJv
dG8gZW51bV90eXBlID0gNTsKLSAgaW50IGVudW1fdHlwZV9zaXplKCkgY29uc3Q7Ci0gIHZvaWQg
Y2xlYXJfZW51bV90eXBlKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0VudW1UeXBlRmllbGROdW1i
ZXIgPSA1OwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yUHJvdG8m
IGVudW1fdHlwZShpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1E
ZXNjcmlwdG9yUHJvdG8qIG11dGFibGVfZW51bV90eXBlKGludCBpbmRleCk7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3JQcm90byogYWRkX2VudW1fdHlwZSgpOwotICA6Omdv
b2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51
bURlc2NyaXB0b3JQcm90byA+KgotICAgICAgbXV0YWJsZV9lbnVtX3R5cGUoKTsKLSAgY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6
OkVudW1EZXNjcmlwdG9yUHJvdG8gPiYKLSAgICAgIGVudW1fdHlwZSgpIGNvbnN0OwotCi0gIC8v
IHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90byBzZXJ2aWNl
ID0gNjsKLSAgaW50IHNlcnZpY2Vfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3NlcnZpY2Uo
KTsKLSAgc3RhdGljIGNvbnN0IGludCBrU2VydmljZUZpZWxkTnVtYmVyID0gNjsKLSAgY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlRGVzY3JpcHRvclByb3RvJiBzZXJ2aWNlKGludCBp
bmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZURlc2NyaXB0b3JQcm90
byogbXV0YWJsZV9zZXJ2aWNlKGludCBpbmRleCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U2Vy
dmljZURlc2NyaXB0b3JQcm90byogYWRkX3NlcnZpY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlNlcnZpY2VEZXNjcmlwdG9y
UHJvdG8gPioKLSAgICAgIG11dGFibGVfc2VydmljZSgpOwotICBjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZURlc2Ny
aXB0b3JQcm90byA+JgotICAgICAgc2VydmljZSgpIGNvbnN0OwotCi0gIC8vIHJlcGVhdGVkIC5n
b29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8gZXh0ZW5zaW9uID0gNzsKLSAgaW50
IGV4dGVuc2lvbl9zaXplKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfZXh0ZW5zaW9uKCk7Ci0gIHN0
YXRpYyBjb25zdCBpbnQga0V4dGVuc2lvbkZpZWxkTnVtYmVyID0gNzsKLSAgY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90byYgZXh0ZW5zaW9uKGludCBpbmRleCkg
Y29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8qIG11dGFi
bGVfZXh0ZW5zaW9uKGludCBpbmRleCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNj
cmlwdG9yUHJvdG8qIGFkZF9leHRlbnNpb24oKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBl
YXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvID4q
Ci0gICAgICBtdXRhYmxlX2V4dGVuc2lvbigpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJv
dG8gPiYKLSAgICAgIGV4dGVuc2lvbigpIGNvbnN0OwotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUu
cHJvdG9idWYuRmlsZU9wdGlvbnMgb3B0aW9ucyA9IDg7Ci0gIGJvb2wgaGFzX29wdGlvbnMoKSBj
b25zdDsKLSAgdm9pZCBjbGVhcl9vcHRpb25zKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga09wdGlv
bnNGaWVsZE51bWJlciA9IDg7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9wdGlv
bnMmIG9wdGlvbnMoKSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0aW9ucyog
bXV0YWJsZV9vcHRpb25zKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9wdGlvbnMqIHJl
bGVhc2Vfb3B0aW9ucygpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfb3B0aW9ucyg6Omdvb2dsZTo6
cHJvdG9idWY6OkZpbGVPcHRpb25zKiBvcHRpb25zKTsKLQotICAvLyBvcHRpb25hbCAuZ29vZ2xl
LnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvIHNvdXJjZV9jb2RlX2luZm8gPSA5OwotICBib29sIGhh
c19zb3VyY2VfY29kZV9pbmZvKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfc291cmNlX2NvZGVfaW5m
bygpOwotICBzdGF0aWMgY29uc3QgaW50IGtTb3VyY2VDb2RlSW5mb0ZpZWxkTnVtYmVyID0gOTsK
LSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mbyYgc291cmNlX2NvZGVf
aW5mbygpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvZGVJbmZvKiBtdXRh
YmxlX3NvdXJjZV9jb2RlX2luZm8oKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2Rl
SW5mbyogcmVsZWFzZV9zb3VyY2VfY29kZV9pbmZvKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9z
b3VyY2VfY29kZV9pbmZvKDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29kZUluZm8qIHNvdXJj
ZV9jb2RlX2luZm8pOwotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBzeW50YXggPSAxMjsKLSAgYm9v
bCBoYXNfc3ludGF4KCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfc3ludGF4KCk7Ci0gIHN0YXRpYyBj
b25zdCBpbnQga1N5bnRheEZpZWxkTnVtYmVyID0gMTI7Ci0gIGNvbnN0IDo6c3RkOjpzdHJpbmcm
IHN5bnRheCgpIGNvbnN0OwotICB2b2lkIHNldF9zeW50YXgoY29uc3QgOjpzdGQ6OnN0cmluZyYg
dmFsdWUpOwotICB2b2lkIHNldF9zeW50YXgoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNl
dF9zeW50YXgoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmlu
ZyogbXV0YWJsZV9zeW50YXgoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV9zeW50YXgoKTsK
LSAgdm9pZCBzZXRfYWxsb2NhdGVkX3N5bnRheCg6OnN0ZDo6c3RyaW5nKiBzeW50YXgpOwotCi0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYu
RmlsZURlc2NyaXB0b3JQcm90bykKLSBwcml2YXRlOgotICBpbmxpbmUgdm9pZCBzZXRfaGFzX25h
bWUoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX25hbWUoKTsKLSAgaW5saW5lIHZvaWQgc2V0
X2hhc19wYWNrYWdlKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19wYWNrYWdlKCk7Ci0gIGlu
bGluZSB2b2lkIHNldF9oYXNfb3B0aW9ucygpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfb3B0
aW9ucygpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX3NvdXJjZV9jb2RlX2luZm8oKTsKLSAgaW5s
aW5lIHZvaWQgY2xlYXJfaGFzX3NvdXJjZV9jb2RlX2luZm8oKTsKLSAgaW5saW5lIHZvaWQgc2V0
X2hhc19zeW50YXgoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX3N5bnRheCgpOwotCi0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2lu
dGVybmFsX21ldGFkYXRhXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRz
X1sxXTsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgbmFtZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIHBhY2thZ2VfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+IGRlcGVuZGVuY3lfOwotICA6Omdvb2ds
ZTo6cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPiBw
dWJsaWNfZGVwZW5kZW5jeV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZDwg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnQzMiA+IHdlYWtfZGVwZW5kZW5jeV87Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlw
dG9yUHJvdG8gPiBtZXNzYWdlX3R5cGVfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3JQcm90byA+IGVudW1f
dHlwZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6
OnByb3RvYnVmOjpTZXJ2aWNlRGVzY3JpcHRvclByb3RvID4gc2VydmljZV87Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERl
c2NyaXB0b3JQcm90byA+IGV4dGVuc2lvbl87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9w
dGlvbnMqIG9wdGlvbnNfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvZGVJbmZvKiBz
b3VyY2VfY29kZV9pbmZvXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFT
dHJpbmdQdHIgc3ludGF4XzsKLSAgZnJpZW5kIHZvaWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3Rv
YnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAg
ZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2Ny
aXB0b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29v
Z2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLQotICB2b2lkIEluaXRBc0Rl
ZmF1bHRJbnN0YW5jZSgpOwotICBzdGF0aWMgRmlsZURlc2NyaXB0b3JQcm90byogZGVmYXVsdF9p
bnN0YW5jZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQg
RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgotICBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2Uo
KTsKLSAgdmlydHVhbCB+RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKCk7Ci0KLSAgRGVz
Y3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKGNvbnN0IERlc2NyaXB0b3JQcm90b19FeHRlbnNp
b25SYW5nZSYgZnJvbSk7Ci0KLSAgaW5saW5lIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5n
ZSYgb3BlcmF0b3I9KGNvbnN0IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSYgZnJvbSkg
ewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGlubGlu
ZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVs
ZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8udW5rbm93bl9maWVs
ZHMoKTsKLSAgfQotCi0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNl
dCogbXV0YWJsZV91bmtub3duX2ZpZWxkcygpIHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFk
YXRhXy5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25z
dCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UmIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQot
ICB2b2lkIFN3YXAoRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKiBvdGhlcik7Ci0KLSAg
Ly8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICBpbmxpbmUgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKiBO
ZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0KLQotICBEZXNjcmlwdG9yUHJvdG9fRXh0
ZW5zaW9uUmFuZ2UqIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3Q7
Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9t
KTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBm
cm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFu
Z2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5z
aW9uUmFuZ2UmIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgp
IGNvbnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZy
b21Db2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRT
dHJlYW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9B
cnJheSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0
Q2FjaGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToK
LSAgdm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENh
Y2hlZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChEZXNjcmlwdG9y
UHJvdG9fRXh0ZW5zaW9uUmFuZ2UqIG90aGVyKTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJl
dHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1h
eWJlQXJlbmFQdHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3
X2FyZW5hX3B0cigpOwotICB9Ci0gIHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
dGFkYXRhIEdldE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBhY2Nl
c3NvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gIC8vIG9wdGlvbmFsIGludDMyIHN0YXJ0ID0gMTsKLSAgYm9vbCBoYXNfc3RhcnQo
KSBjb25zdDsKLSAgdm9pZCBjbGVhcl9zdGFydCgpOwotICBzdGF0aWMgY29uc3QgaW50IGtTdGFy
dEZpZWxkTnVtYmVyID0gMTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBzdGFydCgpIGNv
bnN0OwotICB2b2lkIHNldF9zdGFydCg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKTsK
LQotICAvLyBvcHRpb25hbCBpbnQzMiBlbmQgPSAyOwotICBib29sIGhhc19lbmQoKSBjb25zdDsK
LSAgdm9pZCBjbGVhcl9lbmQoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrRW5kRmllbGROdW1iZXIg
PSAyOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIGVuZCgpIGNvbnN0OwotICB2b2lkIHNl
dF9lbmQoOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSk7Ci0KLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJv
dG8uRXh0ZW5zaW9uUmFuZ2UpCi0gcHJpdmF0ZToKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19zdGFy
dCgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfc3RhcnQoKTsKLSAgaW5saW5lIHZvaWQgc2V0
X2hhc19lbmQoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX2VuZCgpOwotCi0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFs
X21ldGFkYXRhXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRzX1sxXTsK
LSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQz
MiBzdGFydF87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgZW5kXzsKLSAgZnJpZW5kIHZv
aWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZf
MmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVz
Y19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9p
ZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJl
cHJvdG8oKTsKLQotICB2b2lkIEluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBzdGF0aWMgRGVz
Y3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKiBkZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBEZXNjcmlwdG9yUHJvdG9fUmVz
ZXJ2ZWRSYW5nZSA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1Ymxp
YzoKLSAgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UoKTsKLSAgdmlydHVhbCB+RGVzY3Jp
cHRvclByb3RvX1Jlc2VydmVkUmFuZ2UoKTsKLQotICBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRS
YW5nZShjb25zdCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSYgZnJvbSk7Ci0KLSAgaW5s
aW5lIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlJiBvcGVyYXRvcj0oY29uc3QgRGVzY3Jp
cHRvclByb3RvX1Jlc2VydmVkUmFuZ2UmIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAg
ICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBpbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpVbmtub3duRmllbGRTZXQmIHVua25vd25fZmllbGRzKCkgY29uc3QgewotICAgIHJldHVybiBf
aW50ZXJuYWxfbWV0YWRhdGFfLnVua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBpbmxpbmUgOjpn
b29nbGU6OnByb3RvYnVmOjpVbmtub3duRmllbGRTZXQqIG11dGFibGVfdW5rbm93bl9maWVsZHMo
KSB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ubXV0YWJsZV91bmtub3duX2ZpZWxk
cygpOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRv
ciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVk
UmFuZ2UmIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2b2lkIFN3YXAoRGVzY3JpcHRvclByb3Rv
X1Jlc2VydmVkUmFuZ2UqIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBEZXNj
cmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwp
OyB9Ci0KLSAgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UqIE5ldyg6Omdvb2dsZTo6cHJv
dG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBE
ZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNv
bnN0IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigp
OwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25z
dDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXpl
V2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRw
dXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNl
cmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCog
b3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2Fj
aGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNo
YXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAgdm9p
ZCBJbnRlcm5hbFN3YXAoRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UqIG90aGVyKTsKLSAg
cHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9W
aXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7
Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQdHIoKSBjb25zdCB7Ci0gICAgcmV0dXJu
IF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0cigpOwotICB9Ci0gIHB1YmxpYzoKLQot
ICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdldE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAg
Ly8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAvLyBhY2Nlc3NvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIG9wdGlvbmFsIGludDMyIHN0YXJ0
ID0gMTsKLSAgYm9vbCBoYXNfc3RhcnQoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9zdGFydCgpOwot
ICBzdGF0aWMgY29uc3QgaW50IGtTdGFydEZpZWxkTnVtYmVyID0gMTsKLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnQzMiBzdGFydCgpIGNvbnN0OwotICB2b2lkIHNldF9zdGFydCg6Omdvb2dsZTo6
cHJvdG9idWY6OmludDMyIHZhbHVlKTsKLQotICAvLyBvcHRpb25hbCBpbnQzMiBlbmQgPSAyOwot
ICBib29sIGhhc19lbmQoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9lbmQoKTsKLSAgc3RhdGljIGNv
bnN0IGludCBrRW5kRmllbGROdW1iZXIgPSAyOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMy
IGVuZCgpIGNvbnN0OwotICB2b2lkIHNldF9lbmQoOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2
YWx1ZSk7Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2ds
ZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSkKLSBwcml2YXRlOgotICBp
bmxpbmUgdm9pZCBzZXRfaGFzX3N0YXJ0KCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19zdGFy
dCgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX2VuZCgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9o
YXNfZW5kKCk7Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRh
ZGF0YVdpdGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQzMiBfaGFzX2JpdHNfWzFdOwotICBtdXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwotICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHN0YXJ0XzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnQzMiBlbmRfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRk
RGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmllbmQg
dm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8y
ZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZw
cm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdElu
c3RhbmNlKCk7Ci0gIHN0YXRpYyBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSogZGVmYXVs
dF9pbnN0YW5jZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBP
UlQgRGVzY3JpcHRvclByb3RvIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7
Ci0gcHVibGljOgotICBEZXNjcmlwdG9yUHJvdG8oKTsKLSAgdmlydHVhbCB+RGVzY3JpcHRvclBy
b3RvKCk7Ci0KLSAgRGVzY3JpcHRvclByb3RvKGNvbnN0IERlc2NyaXB0b3JQcm90byYgZnJvbSk7
Ci0KLSAgaW5saW5lIERlc2NyaXB0b3JQcm90byYgb3BlcmF0b3I9KGNvbnN0IERlc2NyaXB0b3JQ
cm90byYgZnJvbSkgewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAg
fQotCi0gIGlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYg
dW5rbm93bl9maWVsZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8u
dW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVu
a25vd25GaWVsZFNldCogbXV0YWJsZV91bmtub3duX2ZpZWxkcygpIHsKLSAgICByZXR1cm4gX2lu
dGVybmFsX21ldGFkYXRhXy5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBzdGF0
aWMgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0g
IHN0YXRpYyBjb25zdCBEZXNjcmlwdG9yUHJvdG8mIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2
b2lkIFN3YXAoRGVzY3JpcHRvclByb3RvKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNz
YWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBp
bmxpbmUgRGVzY3JpcHRvclByb3RvKiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0K
LQotICBEZXNjcmlwdG9yUHJvdG8qIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVu
YSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBEZXNjcmlwdG9yUHJvdG8mIGZy
b20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBEZXNjcmlwdG9yUHJvdG8mIGZyb20pOwotICB2
b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGludCBCeXRl
U2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLSAgdm9p
ZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlv
OjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVm
Ojp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRDdG9yKCk7
Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNpemUpIGNv
bnN0OwotICB2b2lkIEludGVybmFsU3dhcChEZXNjcmlwdG9yUHJvdG8qIG90aGVyKTsKLSAgcHJp
dmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0
dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0g
IH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQdHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9p
bnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0cigpOwotICB9Ci0gIHB1YmxpYzoKLQotICA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdldE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8g
bmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICB0eXBlZGVmIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSBFeHRl
bnNpb25SYW5nZTsKLSAgdHlwZWRlZiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSBSZXNl
cnZlZFJhbmdlOwotCi0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUg
PSAxOwotICBib29sIGhhc19uYW1lKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfbmFtZSgpOwotICBz
dGF0aWMgY29uc3QgaW50IGtOYW1lRmllbGROdW1iZXIgPSAxOwotICBjb25zdCA6OnN0ZDo6c3Ry
aW5nJiBuYW1lKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYg
dmFsdWUpOwotICB2b2lkIHNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRf
bmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBt
dXRhYmxlX25hbWUoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV9uYW1lKCk7Ci0gIHZvaWQg
c2V0X2FsbG9jYXRlZF9uYW1lKDo6c3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIC8vIHJlcGVhdGVk
IC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8gZmllbGQgPSAyOwotICBpbnQg
ZmllbGRfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2ZpZWxkKCk7Ci0gIHN0YXRpYyBjb25z
dCBpbnQga0ZpZWxkRmllbGROdW1iZXIgPSAyOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkRGVzY3JpcHRvclByb3RvJiBmaWVsZChpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2ds
ZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvKiBtdXRhYmxlX2ZpZWxkKGludCBpbmRl
eCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8qIGFkZF9maWVs
ZCgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8gPioKLSAgICAgIG11dGFibGVfZmllbGQoKTsK
LSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6
cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvID4mCi0gICAgICBmaWVsZCgpIGNvbnN0Owot
Ci0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8gZXh0
ZW5zaW9uID0gNjsKLSAgaW50IGV4dGVuc2lvbl9zaXplKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJf
ZXh0ZW5zaW9uKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0V4dGVuc2lvbkZpZWxkTnVtYmVyID0g
NjsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90byYgZXh0
ZW5zaW9uKGludCBpbmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNj
cmlwdG9yUHJvdG8qIG11dGFibGVfZXh0ZW5zaW9uKGludCBpbmRleCk7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8qIGFkZF9leHRlbnNpb24oKTsKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
RGVzY3JpcHRvclByb3RvID4qCi0gICAgICBtdXRhYmxlX2V4dGVuc2lvbigpOwotICBjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RmllbGREZXNjcmlwdG9yUHJvdG8gPiYKLSAgICAgIGV4dGVuc2lvbigpIGNvbnN0OwotCi0gIC8v
IHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvIG5lc3RlZF90eXBlID0g
MzsKLSAgaW50IG5lc3RlZF90eXBlX3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9uZXN0ZWRf
dHlwZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtOZXN0ZWRUeXBlRmllbGROdW1iZXIgPSAzOwot
ICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90byYgbmVzdGVkX3R5cGUo
aW50IGluZGV4KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG8q
IG11dGFibGVfbmVzdGVkX3R5cGUoaW50IGluZGV4KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpE
ZXNjcmlwdG9yUHJvdG8qIGFkZF9uZXN0ZWRfdHlwZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvID4q
Ci0gICAgICBtdXRhYmxlX25lc3RlZF90eXBlKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG8g
PiYKLSAgICAgIG5lc3RlZF90eXBlKCkgY29uc3Q7Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5w
cm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvIGVudW1fdHlwZSA9IDQ7Ci0gIGludCBlbnVtX3R5
cGVfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2VudW1fdHlwZSgpOwotICBzdGF0aWMgY29u
c3QgaW50IGtFbnVtVHlwZUZpZWxkTnVtYmVyID0gNDsKLSAgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpFbnVtRGVzY3JpcHRvclByb3RvJiBlbnVtX3R5cGUoaW50IGluZGV4KSBjb25zdDsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvclByb3RvKiBtdXRhYmxlX2VudW1fdHlw
ZShpbnQgaW5kZXgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yUHJvdG8q
IGFkZF9lbnVtX3R5cGUoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxk
PCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yUHJvdG8gPioKLSAgICAgIG11dGFi
bGVfZW51bV90eXBlKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJG
aWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvclByb3RvID4mCi0gICAgICBl
bnVtX3R5cGUoKSBjb25zdDsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkRlc2Ny
aXB0b3JQcm90by5FeHRlbnNpb25SYW5nZSBleHRlbnNpb25fcmFuZ2UgPSA1OwotICBpbnQgZXh0
ZW5zaW9uX3JhbmdlX3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9leHRlbnNpb25fcmFuZ2Uo
KTsKLSAgc3RhdGljIGNvbnN0IGludCBrRXh0ZW5zaW9uUmFuZ2VGaWVsZE51bWJlciA9IDU7Ci0g
IGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdl
JiBleHRlbnNpb25fcmFuZ2UoaW50IGluZGV4KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UqIG11dGFibGVfZXh0ZW5zaW9uX3Jhbmdl
KGludCBpbmRleCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvX0V4dGVu
c2lvblJhbmdlKiBhZGRfZXh0ZW5zaW9uX3JhbmdlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG9fRXh0
ZW5zaW9uUmFuZ2UgPioKLSAgICAgIG11dGFibGVfZXh0ZW5zaW9uX3JhbmdlKCk7Ci0gIGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVm
OjpEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UgPiYKLSAgICAgIGV4dGVuc2lvbl9yYW5n
ZSgpIGNvbnN0OwotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlw
dG9yUHJvdG8gb25lb2ZfZGVjbCA9IDg7Ci0gIGludCBvbmVvZl9kZWNsX3NpemUoKSBjb25zdDsK
LSAgdm9pZCBjbGVhcl9vbmVvZl9kZWNsKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga09uZW9mRGVj
bEZpZWxkTnVtYmVyID0gODsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpPbmVvZkRlc2Ny
aXB0b3JQcm90byYgb25lb2ZfZGVjbChpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJv
dG9idWY6Ok9uZW9mRGVzY3JpcHRvclByb3RvKiBtdXRhYmxlX29uZW9mX2RlY2woaW50IGluZGV4
KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpPbmVvZkRlc2NyaXB0b3JQcm90byogYWRkX29uZW9m
X2RlY2woKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok9uZW9mRGVzY3JpcHRvclByb3RvID4qCi0gICAgICBtdXRhYmxlX29uZW9m
X2RlY2woKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6
Omdvb2dsZTo6cHJvdG9idWY6Ok9uZW9mRGVzY3JpcHRvclByb3RvID4mCi0gICAgICBvbmVvZl9k
ZWNsKCkgY29uc3Q7Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0
aW9ucyBvcHRpb25zID0gNzsKLSAgYm9vbCBoYXNfb3B0aW9ucygpIGNvbnN0OwotICB2b2lkIGNs
ZWFyX29wdGlvbnMoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrT3B0aW9uc0ZpZWxkTnVtYmVyID0g
NzsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlT3B0aW9ucyYgb3B0aW9ucygp
IGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VPcHRpb25zKiBtdXRhYmxlX29w
dGlvbnMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlT3B0aW9ucyogcmVsZWFzZV9v
cHRpb25zKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9vcHRpb25zKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZU9wdGlvbnMqIG9wdGlvbnMpOwotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJv
dG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UgcmVzZXJ2ZWRfcmFuZ2UgPSA5Owot
ICBpbnQgcmVzZXJ2ZWRfcmFuZ2Vfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3Jlc2VydmVk
X3JhbmdlKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1Jlc2VydmVkUmFuZ2VGaWVsZE51bWJlciA9
IDk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvX1Jlc2VydmVk
UmFuZ2UmIHJlc2VydmVkX3JhbmdlKGludCBpbmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UqIG11dGFibGVfcmVzZXJ2ZWRfcmFu
Z2UoaW50IGluZGV4KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG9fUmVz
ZXJ2ZWRSYW5nZSogYWRkX3Jlc2VydmVkX3JhbmdlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG9fUmVz
ZXJ2ZWRSYW5nZSA+KgotICAgICAgbXV0YWJsZV9yZXNlcnZlZF9yYW5nZSgpOwotICBjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UgPiYKLSAgICAgIHJlc2VydmVkX3JhbmdlKCkg
Y29uc3Q7Ci0KLSAgLy8gcmVwZWF0ZWQgc3RyaW5nIHJlc2VydmVkX25hbWUgPSAxMDsKLSAgaW50
IHJlc2VydmVkX25hbWVfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3Jlc2VydmVkX25hbWUo
KTsKLSAgc3RhdGljIGNvbnN0IGludCBrUmVzZXJ2ZWROYW1lRmllbGROdW1iZXIgPSAxMDsKLSAg
Y29uc3QgOjpzdGQ6OnN0cmluZyYgcmVzZXJ2ZWRfbmFtZShpbnQgaW5kZXgpIGNvbnN0OwotICA6
OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX3Jlc2VydmVkX25hbWUoaW50IGluZGV4KTsKLSAgdm9pZCBz
ZXRfcmVzZXJ2ZWRfbmFtZShpbnQgaW5kZXgsIGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsK
LSAgdm9pZCBzZXRfcmVzZXJ2ZWRfbmFtZShpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIHZhbHVlKTsK
LSAgdm9pZCBzZXRfcmVzZXJ2ZWRfbmFtZShpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIHZhbHVlLCBz
aXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIGFkZF9yZXNlcnZlZF9uYW1lKCk7Ci0gIHZv
aWQgYWRkX3Jlc2VydmVkX25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lk
IGFkZF9yZXNlcnZlZF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBhZGRfcmVzZXJ2
ZWRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICBjb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+JiByZXNlcnZlZF9u
YW1lKCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpz
dGQ6OnN0cmluZz4qIG11dGFibGVfcmVzZXJ2ZWRfbmFtZSgpOwotCi0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3Rv
KQotIHByaXZhdGU6Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfbmFtZSgpOwotICBpbmxpbmUgdm9p
ZCBjbGVhcl9oYXNfbmFtZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX29wdGlvbnMoKTsKLSAg
aW5saW5lIHZvaWQgY2xlYXJfaGFzX29wdGlvbnMoKTsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIF9oYXNfYml0c19bMV07Ci0gIG11dGFibGUg
aW50IF9jYWNoZWRfc2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5h
U3RyaW5nUHRyIG5hbWVfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8gPiBmaWVsZF87Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpG
aWVsZERlc2NyaXB0b3JQcm90byA+IGV4dGVuc2lvbl87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG8gPiBu
ZXN0ZWRfdHlwZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpn
b29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvclByb3RvID4gZW51bV90eXBlXzsKLSAgOjpn
b29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkRl
c2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSA+IGV4dGVuc2lvbl9yYW5nZV87Ci0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpPbmVv
ZkRlc2NyaXB0b3JQcm90byA+IG9uZW9mX2RlY2xfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2VPcHRpb25zKiBvcHRpb25zXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0
ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdl
ID4gcmVzZXJ2ZWRfcmFuZ2VfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmll
bGQ8IDo6c3RkOjpzdHJpbmc+IHJlc2VydmVkX25hbWVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9U
T0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0
b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8y
ZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVm
X1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwot
Ci0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBEZXNjcmlwdG9yUHJv
dG8qIGRlZmF1bHRfaW5zdGFuY2VfOwotfTsKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTElCUFJP
VE9CVUZfRVhQT1JUIEZpZWxkRGVzY3JpcHRvclByb3RvIDogcHVibGljIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgotICBGaWVsZERlc2NyaXB0b3JQcm90bygpOwotICB2
aXJ0dWFsIH5GaWVsZERlc2NyaXB0b3JQcm90bygpOwotCi0gIEZpZWxkRGVzY3JpcHRvclByb3Rv
KGNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvJiBmcm9tKTsKLQotICBpbmxpbmUgRmllbGREZXNj
cmlwdG9yUHJvdG8mIG9wZXJhdG9yPShjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgZnJvbSkg
ewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGlubGlu
ZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVs
ZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8udW5rbm93bl9maWVs
ZHMoKTsKLSAgfQotCi0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNl
dCogbXV0YWJsZV91bmtub3duX2ZpZWxkcygpIHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFk
YXRhXy5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25z
dCBGaWVsZERlc2NyaXB0b3JQcm90byYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dh
cChGaWVsZERlc2NyaXB0b3JQcm90byogb3RoZXIpOwotCi0gIC8vIGltcGxlbWVudHMgTWVzc2Fn
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgaW5s
aW5lIEZpZWxkRGVzY3JpcHRvclByb3RvKiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7
IH0KLQotICBGaWVsZERlc2NyaXB0b3JQcm90byogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJl
bmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IEZpZWxkRGVzY3Jp
cHRvclByb3RvJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgRmllbGREZXNjcmlwdG9y
UHJvdG8mIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNv
bnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21D
b2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJl
YW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJh
eSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2Fj
aGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAg
dm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hl
ZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChGaWVsZERlc2NyaXB0
b3JQcm90byogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVm
OjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5h
bF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigp
IGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7
Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0
YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHR5cGVkZWYgRmllbGREZXNjcmlw
dG9yUHJvdG9fVHlwZSBUeXBlOwotICBzdGF0aWMgY29uc3QgVHlwZSBUWVBFX0RPVUJMRSA9Ci0g
ICAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX0RPVUJMRTsKLSAgc3RhdGljIGNvbnN0
IFR5cGUgVFlQRV9GTE9BVCA9Ci0gICAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX0ZM
T0FUOwotICBzdGF0aWMgY29uc3QgVHlwZSBUWVBFX0lOVDY0ID0KLSAgICBGaWVsZERlc2NyaXB0
b3JQcm90b19UeXBlX1RZUEVfSU5UNjQ7Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFRZUEVfVUlOVDY0
ID0KLSAgICBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX1RZUEVfVUlOVDY0OwotICBzdGF0aWMg
Y29uc3QgVHlwZSBUWVBFX0lOVDMyID0KLSAgICBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX1RZ
UEVfSU5UMzI7Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFRZUEVfRklYRUQ2NCA9Ci0gICAgRmllbGRE
ZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX0ZJWEVENjQ7Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFRZ
UEVfRklYRUQzMiA9Ci0gICAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX0ZJWEVEMzI7
Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFRZUEVfQk9PTCA9Ci0gICAgRmllbGREZXNjcmlwdG9yUHJv
dG9fVHlwZV9UWVBFX0JPT0w7Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFRZUEVfU1RSSU5HID0KLSAg
ICBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX1RZUEVfU1RSSU5HOwotICBzdGF0aWMgY29uc3Qg
VHlwZSBUWVBFX0dST1VQID0KLSAgICBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX1RZUEVfR1JP
VVA7Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFRZUEVfTUVTU0FHRSA9Ci0gICAgRmllbGREZXNjcmlw
dG9yUHJvdG9fVHlwZV9UWVBFX01FU1NBR0U7Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFRZUEVfQllU
RVMgPQotICAgIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfVFlQRV9CWVRFUzsKLSAgc3RhdGlj
IGNvbnN0IFR5cGUgVFlQRV9VSU5UMzIgPQotICAgIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVf
VFlQRV9VSU5UMzI7Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFRZUEVfRU5VTSA9Ci0gICAgRmllbGRE
ZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX0VOVU07Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFRZUEVf
U0ZJWEVEMzIgPQotICAgIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfVFlQRV9TRklYRUQzMjsK
LSAgc3RhdGljIGNvbnN0IFR5cGUgVFlQRV9TRklYRUQ2NCA9Ci0gICAgRmllbGREZXNjcmlwdG9y
UHJvdG9fVHlwZV9UWVBFX1NGSVhFRDY0OwotICBzdGF0aWMgY29uc3QgVHlwZSBUWVBFX1NJTlQz
MiA9Ci0gICAgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9UWVBFX1NJTlQzMjsKLSAgc3RhdGlj
IGNvbnN0IFR5cGUgVFlQRV9TSU5UNjQgPQotICAgIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVf
VFlQRV9TSU5UNjQ7Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBUeXBlX0lzVmFsaWQoaW50IHZhbHVl
KSB7Ci0gICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVfSXNWYWxpZCh2YWx1ZSk7
Ci0gIH0KLSAgc3RhdGljIGNvbnN0IFR5cGUgVHlwZV9NSU4gPQotICAgIEZpZWxkRGVzY3JpcHRv
clByb3RvX1R5cGVfVHlwZV9NSU47Ci0gIHN0YXRpYyBjb25zdCBUeXBlIFR5cGVfTUFYID0KLSAg
ICBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX1R5cGVfTUFYOwotICBzdGF0aWMgY29uc3QgaW50
IFR5cGVfQVJSQVlTSVpFID0KLSAgICBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX1R5cGVfQVJS
QVlTSVpFOwotICBzdGF0aWMgaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURl
c2NyaXB0b3IqCi0gIFR5cGVfZGVzY3JpcHRvcigpIHsKLSAgICByZXR1cm4gRmllbGREZXNjcmlw
dG9yUHJvdG9fVHlwZV9kZXNjcmlwdG9yKCk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSBjb25zdCA6
OnN0ZDo6c3RyaW5nJiBUeXBlX05hbWUoVHlwZSB2YWx1ZSkgewotICAgIHJldHVybiBGaWVsZERl
c2NyaXB0b3JQcm90b19UeXBlX05hbWUodmFsdWUpOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgYm9v
bCBUeXBlX1BhcnNlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICBUeXBlKiB2YWx1
ZSkgewotICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlX1BhcnNlKG5hbWUsIHZh
bHVlKTsKLSAgfQotCi0gIHR5cGVkZWYgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwgTGFiZWw7
Ci0gIHN0YXRpYyBjb25zdCBMYWJlbCBMQUJFTF9PUFRJT05BTCA9Ci0gICAgRmllbGREZXNjcmlw
dG9yUHJvdG9fTGFiZWxfTEFCRUxfT1BUSU9OQUw7Ci0gIHN0YXRpYyBjb25zdCBMYWJlbCBMQUJF
TF9SRVFVSVJFRCA9Ci0gICAgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxfTEFCRUxfUkVRVUlS
RUQ7Ci0gIHN0YXRpYyBjb25zdCBMYWJlbCBMQUJFTF9SRVBFQVRFRCA9Ci0gICAgRmllbGREZXNj
cmlwdG9yUHJvdG9fTGFiZWxfTEFCRUxfUkVQRUFURUQ7Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBM
YWJlbF9Jc1ZhbGlkKGludCB2YWx1ZSkgewotICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90
b19MYWJlbF9Jc1ZhbGlkKHZhbHVlKTsKLSAgfQotICBzdGF0aWMgY29uc3QgTGFiZWwgTGFiZWxf
TUlOID0KLSAgICBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbF9MYWJlbF9NSU47Ci0gIHN0YXRp
YyBjb25zdCBMYWJlbCBMYWJlbF9NQVggPQotICAgIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVs
X0xhYmVsX01BWDsKLSAgc3RhdGljIGNvbnN0IGludCBMYWJlbF9BUlJBWVNJWkUgPQotICAgIEZp
ZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsX0xhYmVsX0FSUkFZU0laRTsKLSAgc3RhdGljIGlubGlu
ZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yKgotICBMYWJlbF9kZXNj
cmlwdG9yKCkgewotICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbF9kZXNjcmlw
dG9yKCk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBMYWJlbF9O
YW1lKExhYmVsIHZhbHVlKSB7Ci0gICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVs
X05hbWUodmFsdWUpOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBMYWJlbF9QYXJzZShjb25z
dCA6OnN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgTGFiZWwqIHZhbHVlKSB7Ci0gICAgcmV0dXJu
IEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsX1BhcnNlKG5hbWUsIHZhbHVlKTsKLSAgfQotCi0g
IC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBib29sIGhh
c19uYW1lKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfbmFtZSgpOwotICBzdGF0aWMgY29uc3QgaW50
IGtOYW1lRmllbGROdW1iZXIgPSAxOwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lKCkgY29u
c3Q7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lk
IHNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCBjaGFy
KiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX25hbWUoKTsK
LSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV9uYW1lKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9u
YW1lKDo6c3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIC8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9
IDM7Ci0gIGJvb2wgaGFzX251bWJlcigpIGNvbnN0OwotICB2b2lkIGNsZWFyX251bWJlcigpOwot
ICBzdGF0aWMgY29uc3QgaW50IGtOdW1iZXJGaWVsZE51bWJlciA9IDM7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50MzIgbnVtYmVyKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X251bWJlcig6Omdvb2ds
ZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKTsKLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3Rv
YnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsIGxhYmVsID0gNDsKLSAgYm9vbCBoYXNfbGFi
ZWwoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9sYWJlbCgpOwotICBzdGF0aWMgY29uc3QgaW50IGtM
YWJlbEZpZWxkTnVtYmVyID0gNDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0
b3JQcm90b19MYWJlbCBsYWJlbCgpIGNvbnN0OwotICB2b2lkIHNldF9sYWJlbCg6Omdvb2dsZTo6
cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsIHZhbHVlKTsKLQotICAvLyBvcHRp
b25hbCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUgdHlwZSA9IDU7
Ci0gIGJvb2wgaGFzX3R5cGUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl90eXBlKCk7Ci0gIHN0YXRp
YyBjb25zdCBpbnQga1R5cGVGaWVsZE51bWJlciA9IDU7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSB0eXBlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3R5cGUo
Ojpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlIHZhbHVlKTsKLQot
ICAvLyBvcHRpb25hbCBzdHJpbmcgdHlwZV9uYW1lID0gNjsKLSAgYm9vbCBoYXNfdHlwZV9uYW1l
KCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfdHlwZV9uYW1lKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQg
a1R5cGVOYW1lRmllbGROdW1iZXIgPSA2OwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiB0eXBlX25h
bWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfdHlwZV9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZh
bHVlKTsKLSAgdm9pZCBzZXRfdHlwZV9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBz
ZXRfdHlwZV9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpz
dHJpbmcqIG11dGFibGVfdHlwZV9uYW1lKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfdHlw
ZV9uYW1lKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF90eXBlX25hbWUoOjpzdGQ6OnN0cmluZyog
dHlwZV9uYW1lKTsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgZXh0ZW5kZWUgPSAyOwotICBib29s
IGhhc19leHRlbmRlZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2V4dGVuZGVlKCk7Ci0gIHN0YXRp
YyBjb25zdCBpbnQga0V4dGVuZGVlRmllbGROdW1iZXIgPSAyOwotICBjb25zdCA6OnN0ZDo6c3Ry
aW5nJiBleHRlbmRlZSgpIGNvbnN0OwotICB2b2lkIHNldF9leHRlbmRlZShjb25zdCA6OnN0ZDo6
c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2V4dGVuZGVlKGNvbnN0IGNoYXIqIHZhbHVlKTsK
LSAgdm9pZCBzZXRfZXh0ZW5kZWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAg
OjpzdGQ6OnN0cmluZyogbXV0YWJsZV9leHRlbmRlZSgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxl
YXNlX2V4dGVuZGVlKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9leHRlbmRlZSg6OnN0ZDo6c3Ry
aW5nKiBleHRlbmRlZSk7Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfdmFsdWUgPSA3
OwotICBib29sIGhhc19kZWZhdWx0X3ZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfZGVmYXVs
dF92YWx1ZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtEZWZhdWx0VmFsdWVGaWVsZE51bWJlciA9
IDc7Ci0gIGNvbnN0IDo6c3RkOjpzdHJpbmcmIGRlZmF1bHRfdmFsdWUoKSBjb25zdDsKLSAgdm9p
ZCBzZXRfZGVmYXVsdF92YWx1ZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQg
c2V0X2RlZmF1bHRfdmFsdWUoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNldF9kZWZhdWx0
X3ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcq
IG11dGFibGVfZGVmYXVsdF92YWx1ZSgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX2RlZmF1
bHRfdmFsdWUoKTsKLSAgdm9pZCBzZXRfYWxsb2NhdGVkX2RlZmF1bHRfdmFsdWUoOjpzdGQ6OnN0
cmluZyogZGVmYXVsdF92YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgaW50MzIgb25lb2ZfaW5kZXgg
PSA5OwotICBib29sIGhhc19vbmVvZl9pbmRleCgpIGNvbnN0OwotICB2b2lkIGNsZWFyX29uZW9m
X2luZGV4KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga09uZW9mSW5kZXhGaWVsZE51bWJlciA9IDk7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgb25lb2ZfaW5kZXgoKSBjb25zdDsKLSAgdm9p
ZCBzZXRfb25lb2ZfaW5kZXgoOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSk7Ci0KLSAg
Ly8gb3B0aW9uYWwgc3RyaW5nIGpzb25fbmFtZSA9IDEwOwotICBib29sIGhhc19qc29uX25hbWUo
KSBjb25zdDsKLSAgdm9pZCBjbGVhcl9qc29uX25hbWUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBr
SnNvbk5hbWVGaWVsZE51bWJlciA9IDEwOwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBqc29uX25h
bWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfanNvbl9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZh
bHVlKTsKLSAgdm9pZCBzZXRfanNvbl9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBz
ZXRfanNvbl9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpz
dHJpbmcqIG11dGFibGVfanNvbl9uYW1lKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfanNv
bl9uYW1lKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9qc29uX25hbWUoOjpzdGQ6OnN0cmluZyog
anNvbl9uYW1lKTsKLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9u
cyBvcHRpb25zID0gODsKLSAgYm9vbCBoYXNfb3B0aW9ucygpIGNvbnN0OwotICB2b2lkIGNsZWFy
X29wdGlvbnMoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrT3B0aW9uc0ZpZWxkTnVtYmVyID0gODsK
LSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnMmIG9wdGlvbnMoKSBjb25z
dDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnMqIG11dGFibGVfb3B0aW9ucygp
OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9ucyogcmVsZWFzZV9vcHRpb25zKCk7
Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9vcHRpb25zKDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRP
cHRpb25zKiBvcHRpb25zKTsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nf
c2NvcGU6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvKQotIHByaXZhdGU6Ci0g
IGlubGluZSB2b2lkIHNldF9oYXNfbmFtZSgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfbmFt
ZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX251bWJlcigpOwotICBpbmxpbmUgdm9pZCBjbGVh
cl9oYXNfbnVtYmVyKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfbGFiZWwoKTsKLSAgaW5saW5l
IHZvaWQgY2xlYXJfaGFzX2xhYmVsKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfdHlwZSgpOwot
ICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfdHlwZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX3R5
cGVfbmFtZSgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfdHlwZV9uYW1lKCk7Ci0gIGlubGlu
ZSB2b2lkIHNldF9oYXNfZXh0ZW5kZWUoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX2V4dGVu
ZGVlKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfZGVmYXVsdF92YWx1ZSgpOwotICBpbmxpbmUg
dm9pZCBjbGVhcl9oYXNfZGVmYXVsdF92YWx1ZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX29u
ZW9mX2luZGV4KCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19vbmVvZl9pbmRleCgpOwotICBp
bmxpbmUgdm9pZCBzZXRfaGFzX2pzb25fbmFtZSgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNf
anNvbl9uYW1lKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfb3B0aW9ucygpOwotICBpbmxpbmUg
dm9pZCBjbGVhcl9oYXNfb3B0aW9ucygpOwotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFsX21ldGFkYXRhXzsKLSAgOjpn
b29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRzX1sxXTsKLSAgbXV0YWJsZSBpbnQgX2Nh
Y2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQ
dHIgbmFtZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgbnVtYmVyXzsKLSAgaW50IGxh
YmVsXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgdHlw
ZV9uYW1lXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIg
ZXh0ZW5kZWVfOwotICBpbnQgdHlwZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgb25l
b2ZfaW5kZXhfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0
ciBkZWZhdWx0X3ZhbHVlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFT
dHJpbmdQdHIganNvbl9uYW1lXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnMq
IG9wdGlvbnNfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRk
RGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmllbmQg
dm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8y
ZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZw
cm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdElu
c3RhbmNlKCk7Ci0gIHN0YXRpYyBGaWVsZERlc2NyaXB0b3JQcm90byogZGVmYXVsdF9pbnN0YW5j
ZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgT25lb2ZE
ZXNjcmlwdG9yUHJvdG8gOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlIHsKLSBw
dWJsaWM6Ci0gIE9uZW9mRGVzY3JpcHRvclByb3RvKCk7Ci0gIHZpcnR1YWwgfk9uZW9mRGVzY3Jp
cHRvclByb3RvKCk7Ci0KLSAgT25lb2ZEZXNjcmlwdG9yUHJvdG8oY29uc3QgT25lb2ZEZXNjcmlw
dG9yUHJvdG8mIGZyb20pOwotCi0gIGlubGluZSBPbmVvZkRlc2NyaXB0b3JQcm90byYgb3BlcmF0
b3I9KGNvbnN0IE9uZW9mRGVzY3JpcHRvclByb3RvJiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJv
bSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcygpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy51bmtub3duX2ZpZWxkcygpOwotICB9Ci0KLSAgaW5s
aW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0KiBtdXRhYmxlX3Vua25vd25f
ZmllbGRzKCkgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLm11dGFibGVfdW5rbm93
bl9maWVsZHMoKTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRl
c2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IE9uZW9mRGVzY3JpcHRvclBy
b3RvJiBkZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBTd2FwKE9uZW9mRGVzY3JpcHRvclBy
b3RvKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUgT25lb2ZEZXNjcmlwdG9y
UHJvdG8qIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIE9uZW9mRGVzY3Jp
cHRvclByb3RvKiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0Owot
ICB2b2lkIENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7
Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJv
bSk7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgT25lb2ZEZXNjcmlwdG9yUHJvdG8mIGZyb20pOwot
ICB2b2lkIE1lcmdlRnJvbShjb25zdCBPbmVvZkRlc2NyaXB0b3JQcm90byYgZnJvbSk7Ci0gIHZv
aWQgQ2xlYXIoKTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVT
aXplKCkgY29uc3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lk
IFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86
OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1
Zjo6dWludDgqIG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyBy
ZXR1cm4gX2NhY2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsK
LSAgdm9pZCBTaGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29u
c3Q7Ci0gIHZvaWQgSW50ZXJuYWxTd2FwKE9uZW9mRGVzY3JpcHRvclByb3RvKiBvdGhlcik7Ci0g
IHByaXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZXRBcmVuYU5v
VmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5hcmVuYSgp
OwotICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkgY29uc3QgewotICAgIHJldHVy
biBfaW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsKLSAgfQotICBwdWJsaWM6Ci0K
LSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRhZGF0YSgpIGNvbnN0OwotCi0g
IC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgbmFt
ZSA9IDE7Ci0gIGJvb2wgaGFzX25hbWUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9uYW1lKCk7Ci0g
IHN0YXRpYyBjb25zdCBpbnQga05hbWVGaWVsZE51bWJlciA9IDE7Ci0gIGNvbnN0IDo6c3RkOjpz
dHJpbmcmIG5hbWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5n
JiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNl
dF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcq
IG11dGFibGVfbmFtZSgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX25hbWUoKTsKLSAgdm9p
ZCBzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2Ny
aXB0b3JQcm90bykKLSBwcml2YXRlOgotICBpbmxpbmUgdm9pZCBzZXRfaGFzX25hbWUoKTsKLSAg
aW5saW5lIHZvaWQgY2xlYXJfaGFzX25hbWUoKTsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0g
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIF9oYXNfYml0c19bMV07Ci0gIG11dGFibGUgaW50
IF9jYWNoZWRfc2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3Ry
aW5nUHRyIG5hbWVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZf
QWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmll
bmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRv
cl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVf
MmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVs
dEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBPbmVvZkRlc2NyaXB0b3JQcm90byogZGVmYXVsdF9pbnN0
YW5jZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgRW51
bURlc2NyaXB0b3JQcm90byA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2Ugewot
IHB1YmxpYzoKLSAgRW51bURlc2NyaXB0b3JQcm90bygpOwotICB2aXJ0dWFsIH5FbnVtRGVzY3Jp
cHRvclByb3RvKCk7Ci0KLSAgRW51bURlc2NyaXB0b3JQcm90byhjb25zdCBFbnVtRGVzY3JpcHRv
clByb3RvJiBmcm9tKTsKLQotICBpbmxpbmUgRW51bURlc2NyaXB0b3JQcm90byYgb3BlcmF0b3I9
KGNvbnN0IEVudW1EZXNjcmlwdG9yUHJvdG8mIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsK
LSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBpbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpVbmtub3duRmllbGRTZXQmIHVua25vd25fZmllbGRzKCkgY29uc3QgewotICAgIHJldHVy
biBfaW50ZXJuYWxfbWV0YWRhdGFfLnVua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBpbmxpbmUg
Ojpnb29nbGU6OnByb3RvYnVmOjpVbmtub3duRmllbGRTZXQqIG11dGFibGVfdW5rbm93bl9maWVs
ZHMoKSB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ubXV0YWJsZV91bmtub3duX2Zp
ZWxkcygpOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3Jp
cHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgRW51bURlc2NyaXB0b3JQcm90byYg
ZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChFbnVtRGVzY3JpcHRvclByb3RvKiBv
dGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUgRW51bURlc2NyaXB0b3JQcm90byog
TmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgRW51bURlc2NyaXB0b3JQcm90
byogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBD
b3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lk
IE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2
b2lkIENvcHlGcm9tKGNvbnN0IEVudW1EZXNjcmlwdG9yUHJvdG8mIGZyb20pOwotICB2b2lkIE1l
cmdlRnJvbShjb25zdCBFbnVtRGVzY3JpcHRvclByb3RvJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigp
OwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25z
dDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXpl
V2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRw
dXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNl
cmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCog
b3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2Fj
aGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNo
YXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAgdm9p
ZCBJbnRlcm5hbFN3YXAoRW51bURlc2NyaXB0b3JQcm90byogb3RoZXIpOwotICBwcml2YXRlOgot
ICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBj
b25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBp
bmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFs
X21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQg
dHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBi
b29sIGhhc19uYW1lKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfbmFtZSgpOwotICBzdGF0aWMgY29u
c3QgaW50IGtOYW1lRmllbGROdW1iZXIgPSAxOwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1l
KCkgY29uc3Q7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwot
ICB2b2lkIHNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfbmFtZShjb25z
dCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX25h
bWUoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV9uYW1lKCk7Ci0gIHZvaWQgc2V0X2FsbG9j
YXRlZF9uYW1lKDo6c3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUu
cHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHZhbHVlID0gMjsKLSAgaW50IHZhbHVl
X3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl92YWx1ZSgpOwotICBzdGF0aWMgY29uc3QgaW50
IGtWYWx1ZUZpZWxkTnVtYmVyID0gMjsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVt
VmFsdWVEZXNjcmlwdG9yUHJvdG8mIHZhbHVlKGludCBpbmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RW51bVZhbHVlRGVzY3JpcHRvclByb3RvKiBtdXRhYmxlX3ZhbHVlKGludCBp
bmRleCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlRGVzY3JpcHRvclByb3RvKiBh
ZGRfdmFsdWUoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdv
b2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZURlc2NyaXB0b3JQcm90byA+KgotICAgICAgbXV0YWJs
ZV92YWx1ZSgpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlRGVzY3JpcHRvclByb3RvID4mCi0gICAgICB2
YWx1ZSgpIGNvbnN0OwotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlv
bnMgb3B0aW9ucyA9IDM7Ci0gIGJvb2wgaGFzX29wdGlvbnMoKSBjb25zdDsKLSAgdm9pZCBjbGVh
cl9vcHRpb25zKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga09wdGlvbnNGaWVsZE51bWJlciA9IDM7
Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bU9wdGlvbnMmIG9wdGlvbnMoKSBjb25z
dDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtT3B0aW9ucyogbXV0YWJsZV9vcHRpb25zKCk7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bU9wdGlvbnMqIHJlbGVhc2Vfb3B0aW9ucygpOwot
ICB2b2lkIHNldF9hbGxvY2F0ZWRfb3B0aW9ucyg6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1PcHRp
b25zKiBvcHRpb25zKTsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2Nv
cGU6Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8pCi0gcHJpdmF0ZToKLSAgaW5s
aW5lIHZvaWQgc2V0X2hhc19uYW1lKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19uYW1lKCk7
Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfb3B0aW9ucygpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9o
YXNfb3B0aW9ucygpOwotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFs
TWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFsX21ldGFkYXRhXzsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50MzIgX2hhc19iaXRzX1sxXTsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgbmFtZV87Ci0g
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVm
OjpFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gPiB2YWx1ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RW51bU9wdGlvbnMqIG9wdGlvbnNfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBP
UlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90
bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVm
XzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3du
RmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQg
SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBFbnVtRGVzY3JpcHRvclByb3RvKiBk
ZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVG
X0VYUE9SVCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gOiBwdWJsaWMgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bygpOwot
ICB2aXJ0dWFsIH5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8oKTsKLQotICBFbnVtVmFsdWVEZXNj
cmlwdG9yUHJvdG8oY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvJiBmcm9tKTsKLQotICBp
bmxpbmUgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvJiBvcGVyYXRvcj0oY29uc3QgRW51bVZhbHVl
RGVzY3JpcHRvclByb3RvJiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJu
ICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93
bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcygpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFs
X21ldGFkYXRhXy51bmtub3duX2ZpZWxkcygpOwotICB9Ci0KLSAgaW5saW5lIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0KiBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkgewotICAg
IHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLm11dGFibGVfdW5rbm93bl9maWVsZHMoKTsKLSAg
fQotCi0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byYgZGVmYXVs
dF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8qIG90
aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBFbnVtVmFsdWVEZXNjcmlwdG9yUHJv
dG8qIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIEVudW1WYWx1ZURlc2Ny
aXB0b3JQcm90byogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsK
LSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20p
OwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZy
b20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byYgZnJv
bSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byYgZnJv
bSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAg
aW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFt
KAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQp
OwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6
cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJl
ZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQg
c2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJuYWxTd2FwKEVudW1WYWx1ZURlc2NyaXB0b3JQcm90
byogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRh
ZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0
IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0K
LSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEo
KSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9u
YWwgc3RyaW5nIG5hbWUgPSAxOwotICBib29sIGhhc19uYW1lKCkgY29uc3Q7Ci0gIHZvaWQgY2xl
YXJfbmFtZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtOYW1lRmllbGROdW1iZXIgPSAxOwotICBj
b25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3Qg
OjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVl
KTsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6
OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX25hbWUoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV9u
YW1lKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9uYW1lKDo6c3RkOjpzdHJpbmcqIG5hbWUpOwot
Ci0gIC8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDI7Ci0gIGJvb2wgaGFzX251bWJlcigpIGNv
bnN0OwotICB2b2lkIGNsZWFyX251bWJlcigpOwotICBzdGF0aWMgY29uc3QgaW50IGtOdW1iZXJG
aWVsZE51bWJlciA9IDI7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgbnVtYmVyKCkgY29u
c3Q7Ci0gIHZvaWQgc2V0X251bWJlcig6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKTsK
LQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMgb3B0aW9u
cyA9IDM7Ci0gIGJvb2wgaGFzX29wdGlvbnMoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9vcHRpb25z
KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga09wdGlvbnNGaWVsZE51bWJlciA9IDM7Ci0gIGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlT3B0aW9ucyYgb3B0aW9ucygpIGNvbnN0Owot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZU9wdGlvbnMqIG11dGFibGVfb3B0aW9ucygp
OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZU9wdGlvbnMqIHJlbGVhc2Vfb3B0aW9u
cygpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfb3B0aW9ucyg6Omdvb2dsZTo6cHJvdG9idWY6OkVu
dW1WYWx1ZU9wdGlvbnMqIG9wdGlvbnMpOwotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKQot
IHByaXZhdGU6Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfbmFtZSgpOwotICBpbmxpbmUgdm9pZCBj
bGVhcl9oYXNfbmFtZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX251bWJlcigpOwotICBpbmxp
bmUgdm9pZCBjbGVhcl9oYXNfbnVtYmVyKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfb3B0aW9u
cygpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfb3B0aW9ucygpOwotCi0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFsX21l
dGFkYXRhXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRzX1sxXTsKLSAg
bXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6QXJlbmFTdHJpbmdQdHIgbmFtZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVl
T3B0aW9ucyogb3B0aW9uc187Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgbnVtYmVyXzsK
LSAgZnJpZW5kIHZvaWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9i
dWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwot
ICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZk
ZXNjcmlwdG9yXzJlcHJvdG8oKTsKLQotICB2b2lkIEluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwot
ICBzdGF0aWMgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKiBkZWZhdWx0X2luc3RhbmNlXzsKLX07
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBTZXJ2aWNlRGVzY3Jp
cHRvclByb3RvIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGlj
OgotICBTZXJ2aWNlRGVzY3JpcHRvclByb3RvKCk7Ci0gIHZpcnR1YWwgflNlcnZpY2VEZXNjcmlw
dG9yUHJvdG8oKTsKLQotICBTZXJ2aWNlRGVzY3JpcHRvclByb3RvKGNvbnN0IFNlcnZpY2VEZXNj
cmlwdG9yUHJvdG8mIGZyb20pOwotCi0gIGlubGluZSBTZXJ2aWNlRGVzY3JpcHRvclByb3RvJiBv
cGVyYXRvcj0oY29uc3QgU2VydmljZURlc2NyaXB0b3JQcm90byYgZnJvbSkgewotICAgIENvcHlG
cm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGlubGluZSBjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8udW5rbm93bl9maWVsZHMoKTsKLSAgfQot
Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCogbXV0YWJsZV91
bmtub3duX2ZpZWxkcygpIHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5tdXRhYmxl
X3Vua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBTZXJ2aWNlRGVz
Y3JpcHRvclByb3RvJiBkZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBTd2FwKFNlcnZpY2VE
ZXNjcmlwdG9yUHJvdG8qIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBTZXJ2
aWNlRGVzY3JpcHRvclByb3RvKiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0KLQot
ICBTZXJ2aWNlRGVzY3JpcHRvclByb3RvKiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSog
YXJlbmEpIGNvbnN0OwotICB2b2lkIENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgU2VydmljZURlc2NyaXB0
b3JQcm90byYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9y
UHJvdG8mIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNv
bnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21D
b2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJl
YW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJh
eSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2Fj
aGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAg
dm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hl
ZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChTZXJ2aWNlRGVzY3Jp
cHRvclByb3RvKiBvdGhlcik7Ci0gIHByaXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9i
dWY6OkFyZW5hKiBHZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVy
bmFsX21ldGFkYXRhXy5hcmVuYSgpOwotICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRy
KCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIo
KTsKLSAgfQotICBwdWJsaWM6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRN
ZXRhZGF0YSgpIGNvbnN0OwotCi0gIC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAv
LyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gIGJvb2wgaGFzX25hbWUoKSBjb25zdDsKLSAg
dm9pZCBjbGVhcl9uYW1lKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga05hbWVGaWVsZE51bWJlciA9
IDE7Ci0gIGNvbnN0IDo6c3RkOjpzdHJpbmcmIG5hbWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfbmFt
ZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgY2hh
ciogdmFsdWUpOwotICB2b2lkIHNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6
ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIG11dGFibGVfbmFtZSgpOwotICA6OnN0ZDo6c3RyaW5nKiBy
ZWxlYXNlX25hbWUoKTsKLSAgdm9pZCBzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyog
bmFtZSk7Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9y
UHJvdG8gbWV0aG9kID0gMjsKLSAgaW50IG1ldGhvZF9zaXplKCkgY29uc3Q7Ci0gIHZvaWQgY2xl
YXJfbWV0aG9kKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga01ldGhvZEZpZWxkTnVtYmVyID0gMjsK
LSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2REZXNjcmlwdG9yUHJvdG8mIG1ldGhv
ZChpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZERlc2NyaXB0
b3JQcm90byogbXV0YWJsZV9tZXRob2QoaW50IGluZGV4KTsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXRob2REZXNjcmlwdG9yUHJvdG8qIGFkZF9tZXRob2QoKTsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZERlc2NyaXB0
b3JQcm90byA+KgotICAgICAgbXV0YWJsZV9tZXRob2QoKTsKLSAgY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZERlc2Ny
aXB0b3JQcm90byA+JgotICAgICAgbWV0aG9kKCkgY29uc3Q7Ci0KLSAgLy8gb3B0aW9uYWwgLmdv
b2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucyBvcHRpb25zID0gMzsKLSAgYm9vbCBoYXNfb3B0
aW9ucygpIGNvbnN0OwotICB2b2lkIGNsZWFyX29wdGlvbnMoKTsKLSAgc3RhdGljIGNvbnN0IGlu
dCBrT3B0aW9uc0ZpZWxkTnVtYmVyID0gMzsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpT
ZXJ2aWNlT3B0aW9ucyYgb3B0aW9ucygpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlNl
cnZpY2VPcHRpb25zKiBtdXRhYmxlX29wdGlvbnMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpT
ZXJ2aWNlT3B0aW9ucyogcmVsZWFzZV9vcHRpb25zKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9v
cHRpb25zKDo6Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZU9wdGlvbnMqIG9wdGlvbnMpOwotCi0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYu
U2VydmljZURlc2NyaXB0b3JQcm90bykKLSBwcml2YXRlOgotICBpbmxpbmUgdm9pZCBzZXRfaGFz
X25hbWUoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX25hbWUoKTsKLSAgaW5saW5lIHZvaWQg
c2V0X2hhc19vcHRpb25zKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0K
LSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVu
YSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiBfaGFz
X2JpdHNfWzFdOwotICBtdXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwotICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciBuYW1lXzsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZERlc2NyaXB0
b3JQcm90byA+IG1ldGhvZF87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZU9wdGlvbnMq
IG9wdGlvbnNfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRk
RGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmllbmQg
dm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8y
ZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZw
cm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdElu
c3RhbmNlKCk7Ci0gIHN0YXRpYyBTZXJ2aWNlRGVzY3JpcHRvclByb3RvKiBkZWZhdWx0X2luc3Rh
bmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBNZXRo
b2REZXNjcmlwdG9yUHJvdG8gOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlIHsK
LSBwdWJsaWM6Ci0gIE1ldGhvZERlc2NyaXB0b3JQcm90bygpOwotICB2aXJ0dWFsIH5NZXRob2RE
ZXNjcmlwdG9yUHJvdG8oKTsKLQotICBNZXRob2REZXNjcmlwdG9yUHJvdG8oY29uc3QgTWV0aG9k
RGVzY3JpcHRvclByb3RvJiBmcm9tKTsKLQotICBpbmxpbmUgTWV0aG9kRGVzY3JpcHRvclByb3Rv
JiBvcGVyYXRvcj0oY29uc3QgTWV0aG9kRGVzY3JpcHRvclByb3RvJiBmcm9tKSB7Ci0gICAgQ29w
eUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcygpIGNvbnN0
IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy51bmtub3duX2ZpZWxkcygpOwotICB9
Ci0KLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0KiBtdXRhYmxl
X3Vua25vd25fZmllbGRzKCkgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLm11dGFi
bGVfdW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IE1ldGhvZERl
c2NyaXB0b3JQcm90byYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChNZXRob2RE
ZXNjcmlwdG9yUHJvdG8qIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBNZXRo
b2REZXNjcmlwdG9yUHJvdG8qIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0g
IE1ldGhvZERlc2NyaXB0b3JQcm90byogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFy
ZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IE1ldGhvZERlc2NyaXB0b3JQ
cm90byYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IE1ldGhvZERlc2NyaXB0b3JQcm90
byYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7
Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVk
U3RyZWFtKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSog
aW5wdXQpOwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdv
b2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6
Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRT
aXplKCkgY29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2b2lk
IFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6
ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJuYWxTd2FwKE1ldGhvZERlc2NyaXB0b3JQ
cm90byogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpB
cmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9t
ZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNv
bnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0g
IH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRh
dGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0
aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBib29sIGhhc19uYW1lKCkgY29uc3Q7Ci0gIHZvaWQg
Y2xlYXJfbmFtZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtOYW1lRmllbGROdW1iZXIgPSAxOwot
ICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X25hbWUoY29u
c3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNldF9uYW1lKGNvbnN0IGNoYXIqIHZh
bHVlKTsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwot
ICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX25hbWUoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFz
ZV9uYW1lKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9uYW1lKDo6c3RkOjpzdHJpbmcqIG5hbWUp
OwotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBpbnB1dF90eXBlID0gMjsKLSAgYm9vbCBoYXNfaW5w
dXRfdHlwZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2lucHV0X3R5cGUoKTsKLSAgc3RhdGljIGNv
bnN0IGludCBrSW5wdXRUeXBlRmllbGROdW1iZXIgPSAyOwotICBjb25zdCA6OnN0ZDo6c3RyaW5n
JiBpbnB1dF90eXBlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X2lucHV0X3R5cGUoY29uc3QgOjpzdGQ6
OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNldF9pbnB1dF90eXBlKGNvbnN0IGNoYXIqIHZhbHVl
KTsKLSAgdm9pZCBzZXRfaW5wdXRfdHlwZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUp
OwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX2lucHV0X3R5cGUoKTsKLSAgOjpzdGQ6OnN0cmlu
ZyogcmVsZWFzZV9pbnB1dF90eXBlKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9pbnB1dF90eXBl
KDo6c3RkOjpzdHJpbmcqIGlucHV0X3R5cGUpOwotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBvdXRw
dXRfdHlwZSA9IDM7Ci0gIGJvb2wgaGFzX291dHB1dF90eXBlKCkgY29uc3Q7Ci0gIHZvaWQgY2xl
YXJfb3V0cHV0X3R5cGUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrT3V0cHV0VHlwZUZpZWxkTnVt
YmVyID0gMzsKLSAgY29uc3QgOjpzdGQ6OnN0cmluZyYgb3V0cHV0X3R5cGUoKSBjb25zdDsKLSAg
dm9pZCBzZXRfb3V0cHV0X3R5cGUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lk
IHNldF9vdXRwdXRfdHlwZShjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X291dHB1dF90
eXBlKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIG11
dGFibGVfb3V0cHV0X3R5cGUoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV9vdXRwdXRfdHlw
ZSgpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfb3V0cHV0X3R5cGUoOjpzdGQ6OnN0cmluZyogb3V0
cHV0X3R5cGUpOwotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9u
cyBvcHRpb25zID0gNDsKLSAgYm9vbCBoYXNfb3B0aW9ucygpIGNvbnN0OwotICB2b2lkIGNsZWFy
X29wdGlvbnMoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrT3B0aW9uc0ZpZWxkTnVtYmVyID0gNDsK
LSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2RPcHRpb25zJiBvcHRpb25zKCkgY29u
c3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kT3B0aW9ucyogbXV0YWJsZV9vcHRpb25z
KCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kT3B0aW9ucyogcmVsZWFzZV9vcHRpb25z
KCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9vcHRpb25zKDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0
aG9kT3B0aW9ucyogb3B0aW9ucyk7Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBjbGllbnRfc3RyZWFt
aW5nID0gNSBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgYm9vbCBoYXNfY2xpZW50X3N0cmVhbWluZygp
IGNvbnN0OwotICB2b2lkIGNsZWFyX2NsaWVudF9zdHJlYW1pbmcoKTsKLSAgc3RhdGljIGNvbnN0
IGludCBrQ2xpZW50U3RyZWFtaW5nRmllbGROdW1iZXIgPSA1OwotICBib29sIGNsaWVudF9zdHJl
YW1pbmcoKSBjb25zdDsKLSAgdm9pZCBzZXRfY2xpZW50X3N0cmVhbWluZyhib29sIHZhbHVlKTsK
LQotICAvLyBvcHRpb25hbCBib29sIHNlcnZlcl9zdHJlYW1pbmcgPSA2IFtkZWZhdWx0ID0gZmFs
c2VdOwotICBib29sIGhhc19zZXJ2ZXJfc3RyZWFtaW5nKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJf
c2VydmVyX3N0cmVhbWluZygpOwotICBzdGF0aWMgY29uc3QgaW50IGtTZXJ2ZXJTdHJlYW1pbmdG
aWVsZE51bWJlciA9IDY7Ci0gIGJvb2wgc2VydmVyX3N0cmVhbWluZygpIGNvbnN0OwotICB2b2lk
IHNldF9zZXJ2ZXJfc3RyZWFtaW5nKGJvb2wgdmFsdWUpOwotCi0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclBy
b3RvKQotIHByaXZhdGU6Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfbmFtZSgpOwotICBpbmxpbmUg
dm9pZCBjbGVhcl9oYXNfbmFtZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX2lucHV0X3R5cGUo
KTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX2lucHV0X3R5cGUoKTsKLSAgaW5saW5lIHZvaWQg
c2V0X2hhc19vdXRwdXRfdHlwZSgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfb3V0cHV0X3R5
cGUoKTsKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19vcHRpb25zKCk7Ci0gIGlubGluZSB2b2lkIGNs
ZWFyX2hhc19vcHRpb25zKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfY2xpZW50X3N0cmVhbWlu
ZygpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfY2xpZW50X3N0cmVhbWluZygpOwotICBpbmxp
bmUgdm9pZCBzZXRfaGFzX3NlcnZlcl9zdHJlYW1pbmcoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJf
aGFzX3NlcnZlcl9zdHJlYW1pbmcoKTsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6dWludDMyIF9oYXNfYml0c19bMV07Ci0gIG11dGFibGUgaW50IF9jYWNo
ZWRfc2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRy
IG5hbWVfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciBp
bnB1dF90eXBlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQ
dHIgb3V0cHV0X3R5cGVfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZE9wdGlvbnMqIG9w
dGlvbnNfOwotICBib29sIGNsaWVudF9zdHJlYW1pbmdfOwotICBib29sIHNlcnZlcl9zdHJlYW1p
bmdfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19n
b29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBw
cm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3Rv
KCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1
Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNl
KCk7Ci0gIHN0YXRpYyBNZXRob2REZXNjcmlwdG9yUHJvdG8qIGRlZmF1bHRfaW5zdGFuY2VfOwot
fTsKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIEZpbGVPcHRpb25z
IDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgotICBGaWxl
T3B0aW9ucygpOwotICB2aXJ0dWFsIH5GaWxlT3B0aW9ucygpOwotCi0gIEZpbGVPcHRpb25zKGNv
bnN0IEZpbGVPcHRpb25zJiBmcm9tKTsKLQotICBpbmxpbmUgRmlsZU9wdGlvbnMmIG9wZXJhdG9y
PShjb25zdCBGaWxlT3B0aW9ucyYgZnJvbSkgewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJl
dHVybiAqdGhpczsKLSAgfQotCi0gIGlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVu
a25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRl
cm5hbF9tZXRhZGF0YV8udW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIGlubGluZSA6Omdvb2ds
ZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCogbXV0YWJsZV91bmtub3duX2ZpZWxkcygpIHsK
LSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7
Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBGaWxlT3B0aW9ucyYgZGVmYXVsdF9pbnN0YW5j
ZSgpOwotCi0gIHZvaWQgU3dhcChGaWxlT3B0aW9ucyogb3RoZXIpOwotCi0gIC8vIGltcGxlbWVu
dHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgaW5saW5lIEZpbGVPcHRpb25zKiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7
IH0KLQotICBGaWxlT3B0aW9ucyogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5h
KSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3Nh
Z2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IEZpbGVPcHRpb25zJiBmcm9tKTsK
LSAgdm9pZCBNZXJnZUZyb20oY29uc3QgRmlsZU9wdGlvbnMmIGZyb20pOwotICB2b2lkIENsZWFy
KCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNv
bnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxp
emVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91
dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCog
U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4
KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9j
YWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQg
U2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2
b2lkIEludGVybmFsU3dhcChGaWxlT3B0aW9ucyogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxp
bmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUg
dm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFk
YXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IHR5cGVkZWYgRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlIE9wdGltaXplTW9kZTsKLSAgc3RhdGlj
IGNvbnN0IE9wdGltaXplTW9kZSBTUEVFRCA9Ci0gICAgRmlsZU9wdGlvbnNfT3B0aW1pemVNb2Rl
X1NQRUVEOwotICBzdGF0aWMgY29uc3QgT3B0aW1pemVNb2RlIENPREVfU0laRSA9Ci0gICAgRmls
ZU9wdGlvbnNfT3B0aW1pemVNb2RlX0NPREVfU0laRTsKLSAgc3RhdGljIGNvbnN0IE9wdGltaXpl
TW9kZSBMSVRFX1JVTlRJTUUgPQotICAgIEZpbGVPcHRpb25zX09wdGltaXplTW9kZV9MSVRFX1JV
TlRJTUU7Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBPcHRpbWl6ZU1vZGVfSXNWYWxpZChpbnQgdmFs
dWUpIHsKLSAgICByZXR1cm4gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX0lzVmFsaWQodmFsdWUp
OwotICB9Ci0gIHN0YXRpYyBjb25zdCBPcHRpbWl6ZU1vZGUgT3B0aW1pemVNb2RlX01JTiA9Ci0g
ICAgRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX09wdGltaXplTW9kZV9NSU47Ci0gIHN0YXRpYyBj
b25zdCBPcHRpbWl6ZU1vZGUgT3B0aW1pemVNb2RlX01BWCA9Ci0gICAgRmlsZU9wdGlvbnNfT3B0
aW1pemVNb2RlX09wdGltaXplTW9kZV9NQVg7Ci0gIHN0YXRpYyBjb25zdCBpbnQgT3B0aW1pemVN
b2RlX0FSUkFZU0laRSA9Ci0gICAgRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX09wdGltaXplTW9k
ZV9BUlJBWVNJWkU7Ci0gIHN0YXRpYyBpbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpF
bnVtRGVzY3JpcHRvcioKLSAgT3B0aW1pemVNb2RlX2Rlc2NyaXB0b3IoKSB7Ci0gICAgcmV0dXJu
IEZpbGVPcHRpb25zX09wdGltaXplTW9kZV9kZXNjcmlwdG9yKCk7Ci0gIH0KLSAgc3RhdGljIGlu
bGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBPcHRpbWl6ZU1vZGVfTmFtZShPcHRpbWl6ZU1vZGUg
dmFsdWUpIHsKLSAgICByZXR1cm4gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX05hbWUodmFsdWUp
OwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBPcHRpbWl6ZU1vZGVfUGFyc2UoY29uc3QgOjpz
dGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgIE9wdGltaXplTW9kZSogdmFsdWUpIHsKLSAgICByZXR1
cm4gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX1BhcnNlKG5hbWUsIHZhbHVlKTsKLSAgfQotCi0g
IC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGphdmFfcGFja2FnZSA9IDE7Ci0g
IGJvb2wgaGFzX2phdmFfcGFja2FnZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2phdmFfcGFja2Fn
ZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtKYXZhUGFja2FnZUZpZWxkTnVtYmVyID0gMTsKLSAg
Y29uc3QgOjpzdGQ6OnN0cmluZyYgamF2YV9wYWNrYWdlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X2ph
dmFfcGFja2FnZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2phdmFf
cGFja2FnZShjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2phdmFfcGFja2FnZShjb25z
dCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX2ph
dmFfcGFja2FnZSgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX2phdmFfcGFja2FnZSgpOwot
ICB2b2lkIHNldF9hbGxvY2F0ZWRfamF2YV9wYWNrYWdlKDo6c3RkOjpzdHJpbmcqIGphdmFfcGFj
a2FnZSk7Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGphdmFfb3V0ZXJfY2xhc3NuYW1lID0gODsK
LSAgYm9vbCBoYXNfamF2YV9vdXRlcl9jbGFzc25hbWUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9q
YXZhX291dGVyX2NsYXNzbmFtZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtKYXZhT3V0ZXJDbGFz
c25hbWVGaWVsZE51bWJlciA9IDg7Ci0gIGNvbnN0IDo6c3RkOjpzdHJpbmcmIGphdmFfb3V0ZXJf
Y2xhc3NuYW1lKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X2phdmFfb3V0ZXJfY2xhc3NuYW1lKGNvbnN0
IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBzZXRfamF2YV9vdXRlcl9jbGFzc25hbWUo
Y29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNldF9qYXZhX291dGVyX2NsYXNzbmFtZShjb25z
dCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX2ph
dmFfb3V0ZXJfY2xhc3NuYW1lKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfamF2YV9vdXRl
cl9jbGFzc25hbWUoKTsKLSAgdm9pZCBzZXRfYWxsb2NhdGVkX2phdmFfb3V0ZXJfY2xhc3NuYW1l
KDo6c3RkOjpzdHJpbmcqIGphdmFfb3V0ZXJfY2xhc3NuYW1lKTsKLQotICAvLyBvcHRpb25hbCBi
b29sIGphdmFfbXVsdGlwbGVfZmlsZXMgPSAxMCBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgYm9vbCBo
YXNfamF2YV9tdWx0aXBsZV9maWxlcygpIGNvbnN0OwotICB2b2lkIGNsZWFyX2phdmFfbXVsdGlw
bGVfZmlsZXMoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrSmF2YU11bHRpcGxlRmlsZXNGaWVsZE51
bWJlciA9IDEwOwotICBib29sIGphdmFfbXVsdGlwbGVfZmlsZXMoKSBjb25zdDsKLSAgdm9pZCBz
ZXRfamF2YV9tdWx0aXBsZV9maWxlcyhib29sIHZhbHVlKTsKLQotICAvLyBvcHRpb25hbCBib29s
IGphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoID0gMjAgW2RlZmF1bHQgPSBmYWxzZV07Ci0g
IGJvb2wgaGFzX2phdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoKCkgY29uc3Q7Ci0gIHZvaWQg
Y2xlYXJfamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2goKTsKLSAgc3RhdGljIGNvbnN0IGlu
dCBrSmF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaEZpZWxkTnVtYmVyID0gMjA7Ci0gIGJvb2wgamF2
YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2goKSBjb25zdDsKLSAgdm9pZCBzZXRfamF2YV9nZW5l
cmF0ZV9lcXVhbHNfYW5kX2hhc2goYm9vbCB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBq
YXZhX3N0cmluZ19jaGVja191dGY4ID0gMjcgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGJvb2wgaGFz
X2phdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9qYXZhX3N0cmlu
Z19jaGVja191dGY4KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0phdmFTdHJpbmdDaGVja1V0ZjhG
aWVsZE51bWJlciA9IDI3OwotICBib29sIGphdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKSBjb25zdDsK
LSAgdm9pZCBzZXRfamF2YV9zdHJpbmdfY2hlY2tfdXRmOChib29sIHZhbHVlKTsKLQotICAvLyBv
cHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZSBvcHRpbWl6
ZV9mb3IgPSA5IFtkZWZhdWx0ID0gU1BFRURdOwotICBib29sIGhhc19vcHRpbWl6ZV9mb3IoKSBj
b25zdDsKLSAgdm9pZCBjbGVhcl9vcHRpbWl6ZV9mb3IoKTsKLSAgc3RhdGljIGNvbnN0IGludCBr
T3B0aW1pemVGb3JGaWVsZE51bWJlciA9IDk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9w
dGlvbnNfT3B0aW1pemVNb2RlIG9wdGltaXplX2ZvcigpIGNvbnN0OwotICB2b2lkIHNldF9vcHRp
bWl6ZV9mb3IoOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUgdmFs
dWUpOwotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBnb19wYWNrYWdlID0gMTE7Ci0gIGJvb2wgaGFz
X2dvX3BhY2thZ2UoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9nb19wYWNrYWdlKCk7Ci0gIHN0YXRp
YyBjb25zdCBpbnQga0dvUGFja2FnZUZpZWxkTnVtYmVyID0gMTE7Ci0gIGNvbnN0IDo6c3RkOjpz
dHJpbmcmIGdvX3BhY2thZ2UoKSBjb25zdDsKLSAgdm9pZCBzZXRfZ29fcGFja2FnZShjb25zdCA6
OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2dvX3BhY2thZ2UoY29uc3QgY2hhciog
dmFsdWUpOwotICB2b2lkIHNldF9nb19wYWNrYWdlKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qg
c2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIG11dGFibGVfZ29fcGFja2FnZSgpOwotICA6OnN0ZDo6
c3RyaW5nKiByZWxlYXNlX2dvX3BhY2thZ2UoKTsKLSAgdm9pZCBzZXRfYWxsb2NhdGVkX2dvX3Bh
Y2thZ2UoOjpzdGQ6OnN0cmluZyogZ29fcGFja2FnZSk7Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBj
Y19nZW5lcmljX3NlcnZpY2VzID0gMTYgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGJvb2wgaGFzX2Nj
X2dlbmVyaWNfc2VydmljZXMoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9jY19nZW5lcmljX3NlcnZp
Y2VzKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0NjR2VuZXJpY1NlcnZpY2VzRmllbGROdW1iZXIg
PSAxNjsKLSAgYm9vbCBjY19nZW5lcmljX3NlcnZpY2VzKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X2Nj
X2dlbmVyaWNfc2VydmljZXMoYm9vbCB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBqYXZh
X2dlbmVyaWNfc2VydmljZXMgPSAxNyBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgYm9vbCBoYXNfamF2
YV9nZW5lcmljX3NlcnZpY2VzKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfamF2YV9nZW5lcmljX3Nl
cnZpY2VzKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0phdmFHZW5lcmljU2VydmljZXNGaWVsZE51
bWJlciA9IDE3OwotICBib29sIGphdmFfZ2VuZXJpY19zZXJ2aWNlcygpIGNvbnN0OwotICB2b2lk
IHNldF9qYXZhX2dlbmVyaWNfc2VydmljZXMoYm9vbCB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwg
Ym9vbCBweV9nZW5lcmljX3NlcnZpY2VzID0gMTggW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGJvb2wg
aGFzX3B5X2dlbmVyaWNfc2VydmljZXMoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9weV9nZW5lcmlj
X3NlcnZpY2VzKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1B5R2VuZXJpY1NlcnZpY2VzRmllbGRO
dW1iZXIgPSAxODsKLSAgYm9vbCBweV9nZW5lcmljX3NlcnZpY2VzKCkgY29uc3Q7Ci0gIHZvaWQg
c2V0X3B5X2dlbmVyaWNfc2VydmljZXMoYm9vbCB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgYm9v
bCBkZXByZWNhdGVkID0gMjMgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGJvb2wgaGFzX2RlcHJlY2F0
ZWQoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9kZXByZWNhdGVkKCk7Ci0gIHN0YXRpYyBjb25zdCBp
bnQga0RlcHJlY2F0ZWRGaWVsZE51bWJlciA9IDIzOwotICBib29sIGRlcHJlY2F0ZWQoKSBjb25z
dDsKLSAgdm9pZCBzZXRfZGVwcmVjYXRlZChib29sIHZhbHVlKTsKLQotICAvLyBvcHRpb25hbCBi
b29sIGNjX2VuYWJsZV9hcmVuYXMgPSAzMSBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgYm9vbCBoYXNf
Y2NfZW5hYmxlX2FyZW5hcygpIGNvbnN0OwotICB2b2lkIGNsZWFyX2NjX2VuYWJsZV9hcmVuYXMo
KTsKLSAgc3RhdGljIGNvbnN0IGludCBrQ2NFbmFibGVBcmVuYXNGaWVsZE51bWJlciA9IDMxOwot
ICBib29sIGNjX2VuYWJsZV9hcmVuYXMoKSBjb25zdDsKLSAgdm9pZCBzZXRfY2NfZW5hYmxlX2Fy
ZW5hcyhib29sIHZhbHVlKTsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgb2JqY19jbGFzc19wcmVm
aXggPSAzNjsKLSAgYm9vbCBoYXNfb2JqY19jbGFzc19wcmVmaXgoKSBjb25zdDsKLSAgdm9pZCBj
bGVhcl9vYmpjX2NsYXNzX3ByZWZpeCgpOwotICBzdGF0aWMgY29uc3QgaW50IGtPYmpjQ2xhc3NQ
cmVmaXhGaWVsZE51bWJlciA9IDM2OwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBvYmpjX2NsYXNz
X3ByZWZpeCgpIGNvbnN0OwotICB2b2lkIHNldF9vYmpjX2NsYXNzX3ByZWZpeChjb25zdCA6OnN0
ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X29iamNfY2xhc3NfcHJlZml4KGNvbnN0IGNo
YXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfb2JqY19jbGFzc19wcmVmaXgoY29uc3QgY2hhciogdmFs
dWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0YWJsZV9vYmpjX2NsYXNzX3By
ZWZpeCgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX29iamNfY2xhc3NfcHJlZml4KCk7Ci0g
IHZvaWQgc2V0X2FsbG9jYXRlZF9vYmpjX2NsYXNzX3ByZWZpeCg6OnN0ZDo6c3RyaW5nKiBvYmpj
X2NsYXNzX3ByZWZpeCk7Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGNzaGFycF9uYW1lc3BhY2Ug
PSAzNzsKLSAgYm9vbCBoYXNfY3NoYXJwX25hbWVzcGFjZSgpIGNvbnN0OwotICB2b2lkIGNsZWFy
X2NzaGFycF9uYW1lc3BhY2UoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrQ3NoYXJwTmFtZXNwYWNl
RmllbGROdW1iZXIgPSAzNzsKLSAgY29uc3QgOjpzdGQ6OnN0cmluZyYgY3NoYXJwX25hbWVzcGFj
ZSgpIGNvbnN0OwotICB2b2lkIHNldF9jc2hhcnBfbmFtZXNwYWNlKGNvbnN0IDo6c3RkOjpzdHJp
bmcmIHZhbHVlKTsKLSAgdm9pZCBzZXRfY3NoYXJwX25hbWVzcGFjZShjb25zdCBjaGFyKiB2YWx1
ZSk7Ci0gIHZvaWQgc2V0X2NzaGFycF9uYW1lc3BhY2UoY29uc3QgY2hhciogdmFsdWUsIHNpemVf
dCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0YWJsZV9jc2hhcnBfbmFtZXNwYWNlKCk7Ci0g
IDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfY3NoYXJwX25hbWVzcGFjZSgpOwotICB2b2lkIHNldF9h
bGxvY2F0ZWRfY3NoYXJwX25hbWVzcGFjZSg6OnN0ZDo6c3RyaW5nKiBjc2hhcnBfbmFtZXNwYWNl
KTsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24g
dW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0gIGludCB1bmludGVycHJldGVkX29wdGlvbl9z
aXplKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfdW5pbnRlcnByZXRlZF9vcHRpb24oKTsKLSAgc3Rh
dGljIGNvbnN0IGludCBrVW5pbnRlcnByZXRlZE9wdGlvbkZpZWxkTnVtYmVyID0gOTk5OwotICBj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24mIHVuaW50ZXJwcmV0
ZWRfb3B0aW9uKGludCBpbmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRl
cnByZXRlZE9wdGlvbiogbXV0YWJsZV91bmludGVycHJldGVkX29wdGlvbihpbnQgaW5kZXgpOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24qIGFkZF91bmludGVycHJl
dGVkX29wdGlvbigpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotICAgICAgbXV0YWJsZV91
bmludGVycHJldGVkX29wdGlvbigpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+Jgot
ICAgICAgdW5pbnRlcnByZXRlZF9vcHRpb24oKSBjb25zdDsKLQotICBHT09HTEVfUFJPVE9CVUZf
RVhURU5TSU9OX0FDQ0VTU09SUyhGaWxlT3B0aW9ucykKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucykKLSBwcml2YXRl
OgotICBpbmxpbmUgdm9pZCBzZXRfaGFzX2phdmFfcGFja2FnZSgpOwotICBpbmxpbmUgdm9pZCBj
bGVhcl9oYXNfamF2YV9wYWNrYWdlKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfamF2YV9vdXRl
cl9jbGFzc25hbWUoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX2phdmFfb3V0ZXJfY2xhc3Nu
YW1lKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfamF2YV9tdWx0aXBsZV9maWxlcygpOwotICBp
bmxpbmUgdm9pZCBjbGVhcl9oYXNfamF2YV9tdWx0aXBsZV9maWxlcygpOwotICBpbmxpbmUgdm9p
ZCBzZXRfaGFzX2phdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoKCk7Ci0gIGlubGluZSB2b2lk
IGNsZWFyX2hhc19qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCgpOwotICBpbmxpbmUgdm9p
ZCBzZXRfaGFzX2phdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJf
aGFzX2phdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKTsKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19vcHRp
bWl6ZV9mb3IoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX29wdGltaXplX2ZvcigpOwotICBp
bmxpbmUgdm9pZCBzZXRfaGFzX2dvX3BhY2thZ2UoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFz
X2dvX3BhY2thZ2UoKTsKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19jY19nZW5lcmljX3NlcnZpY2Vz
KCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19jY19nZW5lcmljX3NlcnZpY2VzKCk7Ci0gIGlu
bGluZSB2b2lkIHNldF9oYXNfamF2YV9nZW5lcmljX3NlcnZpY2VzKCk7Ci0gIGlubGluZSB2b2lk
IGNsZWFyX2hhc19qYXZhX2dlbmVyaWNfc2VydmljZXMoKTsKLSAgaW5saW5lIHZvaWQgc2V0X2hh
c19weV9nZW5lcmljX3NlcnZpY2VzKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19weV9nZW5l
cmljX3NlcnZpY2VzKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfZGVwcmVjYXRlZCgpOwotICBp
bmxpbmUgdm9pZCBjbGVhcl9oYXNfZGVwcmVjYXRlZCgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFz
X2NjX2VuYWJsZV9hcmVuYXMoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX2NjX2VuYWJsZV9h
cmVuYXMoKTsKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19vYmpjX2NsYXNzX3ByZWZpeCgpOwotICBp
bmxpbmUgdm9pZCBjbGVhcl9oYXNfb2JqY19jbGFzc19wcmVmaXgoKTsKLSAgaW5saW5lIHZvaWQg
c2V0X2hhc19jc2hhcnBfbmFtZXNwYWNlKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19jc2hh
cnBfbmFtZXNwYWNlKCk7Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RXh0ZW5z
aW9uU2V0IF9leHRlbnNpb25zXzsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJ
bnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDMyIF9oYXNfYml0c19bMV07Ci0gIG11dGFibGUgaW50IF9jYWNoZWRf
c2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIGph
dmFfcGFja2FnZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5n
UHRyIGphdmFfb3V0ZXJfY2xhc3NuYW1lXzsKLSAgYm9vbCBqYXZhX211bHRpcGxlX2ZpbGVzXzsK
LSAgYm9vbCBqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaF87Ci0gIGJvb2wgamF2YV9zdHJp
bmdfY2hlY2tfdXRmOF87Ci0gIGJvb2wgY2NfZ2VuZXJpY19zZXJ2aWNlc187Ci0gIGludCBvcHRp
bWl6ZV9mb3JfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0
ciBnb19wYWNrYWdlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJp
bmdQdHIgb2JqY19jbGFzc19wcmVmaXhfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpBcmVuYVN0cmluZ1B0ciBjc2hhcnBfbmFtZXNwYWNlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRp
b24gPiB1bmludGVycHJldGVkX29wdGlvbl87Ci0gIGJvb2wgamF2YV9nZW5lcmljX3NlcnZpY2Vz
XzsKLSAgYm9vbCBweV9nZW5lcmljX3NlcnZpY2VzXzsKLSAgYm9vbCBkZXByZWNhdGVkXzsKLSAg
Ym9vbCBjY19lbmFibGVfYXJlbmFzXzsKLSAgZnJpZW5kIHZvaWQgTElCUFJPVE9CVUZfRVhQT1JU
IHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8o
KTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8y
ZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZp
bGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLQotICB2b2lkIElu
aXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBzdGF0aWMgRmlsZU9wdGlvbnMqIGRlZmF1bHRfaW5z
dGFuY2VfOwotfTsKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE1l
c3NhZ2VPcHRpb25zIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVi
bGljOgotICBNZXNzYWdlT3B0aW9ucygpOwotICB2aXJ0dWFsIH5NZXNzYWdlT3B0aW9ucygpOwot
Ci0gIE1lc3NhZ2VPcHRpb25zKGNvbnN0IE1lc3NhZ2VPcHRpb25zJiBmcm9tKTsKLQotICBpbmxp
bmUgTWVzc2FnZU9wdGlvbnMmIG9wZXJhdG9yPShjb25zdCBNZXNzYWdlT3B0aW9ucyYgZnJvbSkg
ewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGlubGlu
ZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVs
ZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8udW5rbm93bl9maWVs
ZHMoKTsKLSAgfQotCi0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNl
dCogbXV0YWJsZV91bmtub3duX2ZpZWxkcygpIHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFk
YXRhXy5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25z
dCBNZXNzYWdlT3B0aW9ucyYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChNZXNz
YWdlT3B0aW9ucyogb3RoZXIpOwotCi0gIC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgaW5saW5lIE1lc3NhZ2VP
cHRpb25zKiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0KLQotICBNZXNzYWdlT3B0
aW9ucyogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9p
ZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2
b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwot
ICB2b2lkIENvcHlGcm9tKGNvbnN0IE1lc3NhZ2VPcHRpb25zJiBmcm9tKTsKLSAgdm9pZCBNZXJn
ZUZyb20oY29uc3QgTWVzc2FnZU9wdGlvbnMmIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJv
b2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBi
b29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVh
bSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXpl
V2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQp
IGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6
ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRv
cigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVy
bmFsU3dhcChNZXNzYWdlT3B0aW9ucyogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAg
cmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCog
TWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5y
YXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFj
Y2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgYm9vbCBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCA9IDEg
W2RlZmF1bHQgPSBmYWxzZV07Ci0gIGJvb2wgaGFzX21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkg
Y29uc3Q7Ci0gIHZvaWQgY2xlYXJfbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKTsKLSAgc3RhdGlj
IGNvbnN0IGludCBrTWVzc2FnZVNldFdpcmVGb3JtYXRGaWVsZE51bWJlciA9IDE7Ci0gIGJvb2wg
bWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSBjb25zdDsKLSAgdm9pZCBzZXRfbWVzc2FnZV9zZXRf
d2lyZV9mb3JtYXQoYm9vbCB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBub19zdGFuZGFy
ZF9kZXNjcmlwdG9yX2FjY2Vzc29yID0gMiBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgYm9vbCBoYXNf
bm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpIGNvbnN0OwotICB2b2lkIGNsZWFyX25v
X3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrTm9T
dGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvckZpZWxkTnVtYmVyID0gMjsKLSAgYm9vbCBub19zdGFu
ZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X25vX3N0YW5kYXJk
X2Rlc2NyaXB0b3JfYWNjZXNzb3IoYm9vbCB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBk
ZXByZWNhdGVkID0gMyBbZGVmYXVsdCA9IGZhbHNlXTsKLSAgYm9vbCBoYXNfZGVwcmVjYXRlZCgp
IGNvbnN0OwotICB2b2lkIGNsZWFyX2RlcHJlY2F0ZWQoKTsKLSAgc3RhdGljIGNvbnN0IGludCBr
RGVwcmVjYXRlZEZpZWxkTnVtYmVyID0gMzsKLSAgYm9vbCBkZXByZWNhdGVkKCkgY29uc3Q7Ci0g
IHZvaWQgc2V0X2RlcHJlY2F0ZWQoYm9vbCB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBt
YXBfZW50cnkgPSA3OwotICBib29sIGhhc19tYXBfZW50cnkoKSBjb25zdDsKLSAgdm9pZCBjbGVh
cl9tYXBfZW50cnkoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrTWFwRW50cnlGaWVsZE51bWJlciA9
IDc7Ci0gIGJvb2wgbWFwX2VudHJ5KCkgY29uc3Q7Ci0gIHZvaWQgc2V0X21hcF9lbnRyeShib29s
IHZhbHVlKTsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRP
cHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0gIGludCB1bmludGVycHJldGVkX29w
dGlvbl9zaXplKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfdW5pbnRlcnByZXRlZF9vcHRpb24oKTsK
LSAgc3RhdGljIGNvbnN0IGludCBrVW5pbnRlcnByZXRlZE9wdGlvbkZpZWxkTnVtYmVyID0gOTk5
OwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24mIHVuaW50
ZXJwcmV0ZWRfb3B0aW9uKGludCBpbmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
VW5pbnRlcnByZXRlZE9wdGlvbiogbXV0YWJsZV91bmludGVycHJldGVkX29wdGlvbihpbnQgaW5k
ZXgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24qIGFkZF91bmlu
dGVycHJldGVkX29wdGlvbigpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmll
bGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotICAgICAgbXV0
YWJsZV91bmludGVycHJldGVkX29wdGlvbigpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlv
biA+JgotICAgICAgdW5pbnRlcnByZXRlZF9vcHRpb24oKSBjb25zdDsKLQotICBHT09HTEVfUFJP
VE9CVUZfRVhURU5TSU9OX0FDQ0VTU09SUyhNZXNzYWdlT3B0aW9ucykKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9u
cykKLSBwcml2YXRlOgotICBpbmxpbmUgdm9pZCBzZXRfaGFzX21lc3NhZ2Vfc2V0X3dpcmVfZm9y
bWF0KCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCgp
OwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3Io
KTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNz
b3IoKTsKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0gIGlubGluZSB2b2lk
IGNsZWFyX2hhc19kZXByZWNhdGVkKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfbWFwX2VudHJ5
KCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19tYXBfZW50cnkoKTsKLQotICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpFeHRlbnNpb25TZXQgX2V4dGVuc2lvbnNfOwotCi0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVy
bmFsX21ldGFkYXRhXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRzX1sx
XTsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpS
ZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24g
PiB1bmludGVycHJldGVkX29wdGlvbl87Ci0gIGJvb2wgbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXRf
OwotICBib29sIG5vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3JfOwotICBib29sIGRlcHJl
Y2F0ZWRfOwotICBib29sIG1hcF9lbnRyeV87Ci0gIGZyaWVuZCB2b2lkIExJQlBST1RPQlVGX0VY
UE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXBy
b3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJvdG9i
dWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfU2h1dGRv
d25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0KLSAgdm9p
ZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIE1lc3NhZ2VPcHRpb25zKiBkZWZh
dWx0X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVGX0VY
UE9SVCBGaWVsZE9wdGlvbnMgOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlIHsK
LSBwdWJsaWM6Ci0gIEZpZWxkT3B0aW9ucygpOwotICB2aXJ0dWFsIH5GaWVsZE9wdGlvbnMoKTsK
LQotICBGaWVsZE9wdGlvbnMoY29uc3QgRmllbGRPcHRpb25zJiBmcm9tKTsKLQotICBpbmxpbmUg
RmllbGRPcHRpb25zJiBvcGVyYXRvcj0oY29uc3QgRmllbGRPcHRpb25zJiBmcm9tKSB7Ci0gICAg
Q29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcygpIGNv
bnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy51bmtub3duX2ZpZWxkcygpOwot
ICB9Ci0KLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0KiBtdXRh
YmxlX3Vua25vd25fZmllbGRzKCkgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLm11
dGFibGVfdW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IEZpZWxk
T3B0aW9ucyYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChGaWVsZE9wdGlvbnMq
IG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBGaWVsZE9wdGlvbnMqIE5ldygp
IGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIEZpZWxkT3B0aW9ucyogTmV3KDo6Z29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9t
KGNvbnN0IEZpZWxkT3B0aW9ucyYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IEZpZWxk
T3B0aW9ucyYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkg
Y29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJv
bUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0
cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0Owot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0Fy
cmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRD
YWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXplXzsgfQotICBwcml2YXRlOgot
ICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2Fj
aGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJuYWxTd2FwKEZpZWxkT3B0aW9u
cyogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRh
ZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0
IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0K
LSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEo
KSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHR5cGVkZWYgRmllbGRPcHRpb25zX0NUeXBl
IENUeXBlOwotICBzdGF0aWMgY29uc3QgQ1R5cGUgU1RSSU5HID0KLSAgICBGaWVsZE9wdGlvbnNf
Q1R5cGVfU1RSSU5HOwotICBzdGF0aWMgY29uc3QgQ1R5cGUgQ09SRCA9Ci0gICAgRmllbGRPcHRp
b25zX0NUeXBlX0NPUkQ7Ci0gIHN0YXRpYyBjb25zdCBDVHlwZSBTVFJJTkdfUElFQ0UgPQotICAg
IEZpZWxkT3B0aW9uc19DVHlwZV9TVFJJTkdfUElFQ0U7Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBD
VHlwZV9Jc1ZhbGlkKGludCB2YWx1ZSkgewotICAgIHJldHVybiBGaWVsZE9wdGlvbnNfQ1R5cGVf
SXNWYWxpZCh2YWx1ZSk7Ci0gIH0KLSAgc3RhdGljIGNvbnN0IENUeXBlIENUeXBlX01JTiA9Ci0g
ICAgRmllbGRPcHRpb25zX0NUeXBlX0NUeXBlX01JTjsKLSAgc3RhdGljIGNvbnN0IENUeXBlIENU
eXBlX01BWCA9Ci0gICAgRmllbGRPcHRpb25zX0NUeXBlX0NUeXBlX01BWDsKLSAgc3RhdGljIGNv
bnN0IGludCBDVHlwZV9BUlJBWVNJWkUgPQotICAgIEZpZWxkT3B0aW9uc19DVHlwZV9DVHlwZV9B
UlJBWVNJWkU7Ci0gIHN0YXRpYyBpbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVt
RGVzY3JpcHRvcioKLSAgQ1R5cGVfZGVzY3JpcHRvcigpIHsKLSAgICByZXR1cm4gRmllbGRPcHRp
b25zX0NUeXBlX2Rlc2NyaXB0b3IoKTsKLSAgfQotICBzdGF0aWMgaW5saW5lIGNvbnN0IDo6c3Rk
OjpzdHJpbmcmIENUeXBlX05hbWUoQ1R5cGUgdmFsdWUpIHsKLSAgICByZXR1cm4gRmllbGRPcHRp
b25zX0NUeXBlX05hbWUodmFsdWUpOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBDVHlwZV9Q
YXJzZShjb25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgQ1R5cGUqIHZhbHVlKSB7Ci0g
ICAgcmV0dXJuIEZpZWxkT3B0aW9uc19DVHlwZV9QYXJzZShuYW1lLCB2YWx1ZSk7Ci0gIH0KLQot
ICB0eXBlZGVmIEZpZWxkT3B0aW9uc19KU1R5cGUgSlNUeXBlOwotICBzdGF0aWMgY29uc3QgSlNU
eXBlIEpTX05PUk1BTCA9Ci0gICAgRmllbGRPcHRpb25zX0pTVHlwZV9KU19OT1JNQUw7Ci0gIHN0
YXRpYyBjb25zdCBKU1R5cGUgSlNfU1RSSU5HID0KLSAgICBGaWVsZE9wdGlvbnNfSlNUeXBlX0pT
X1NUUklORzsKLSAgc3RhdGljIGNvbnN0IEpTVHlwZSBKU19OVU1CRVIgPQotICAgIEZpZWxkT3B0
aW9uc19KU1R5cGVfSlNfTlVNQkVSOwotICBzdGF0aWMgaW5saW5lIGJvb2wgSlNUeXBlX0lzVmFs
aWQoaW50IHZhbHVlKSB7Ci0gICAgcmV0dXJuIEZpZWxkT3B0aW9uc19KU1R5cGVfSXNWYWxpZCh2
YWx1ZSk7Ci0gIH0KLSAgc3RhdGljIGNvbnN0IEpTVHlwZSBKU1R5cGVfTUlOID0KLSAgICBGaWVs
ZE9wdGlvbnNfSlNUeXBlX0pTVHlwZV9NSU47Ci0gIHN0YXRpYyBjb25zdCBKU1R5cGUgSlNUeXBl
X01BWCA9Ci0gICAgRmllbGRPcHRpb25zX0pTVHlwZV9KU1R5cGVfTUFYOwotICBzdGF0aWMgY29u
c3QgaW50IEpTVHlwZV9BUlJBWVNJWkUgPQotICAgIEZpZWxkT3B0aW9uc19KU1R5cGVfSlNUeXBl
X0FSUkFZU0laRTsKLSAgc3RhdGljIGlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVu
dW1EZXNjcmlwdG9yKgotICBKU1R5cGVfZGVzY3JpcHRvcigpIHsKLSAgICByZXR1cm4gRmllbGRP
cHRpb25zX0pTVHlwZV9kZXNjcmlwdG9yKCk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSBjb25zdCA6
OnN0ZDo6c3RyaW5nJiBKU1R5cGVfTmFtZShKU1R5cGUgdmFsdWUpIHsKLSAgICByZXR1cm4gRmll
bGRPcHRpb25zX0pTVHlwZV9OYW1lKHZhbHVlKTsKLSAgfQotICBzdGF0aWMgaW5saW5lIGJvb2wg
SlNUeXBlX1BhcnNlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICBKU1R5cGUqIHZh
bHVlKSB7Ci0gICAgcmV0dXJuIEZpZWxkT3B0aW9uc19KU1R5cGVfUGFyc2UobmFtZSwgdmFsdWUp
OwotICB9Ci0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVm
LkZpZWxkT3B0aW9ucy5DVHlwZSBjdHlwZSA9IDEgW2RlZmF1bHQgPSBTVFJJTkddOwotICBib29s
IGhhc19jdHlwZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2N0eXBlKCk7Ci0gIHN0YXRpYyBjb25z
dCBpbnQga0N0eXBlRmllbGROdW1iZXIgPSAxOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
T3B0aW9uc19DVHlwZSBjdHlwZSgpIGNvbnN0OwotICB2b2lkIHNldF9jdHlwZSg6Omdvb2dsZTo6
cHJvdG9idWY6OkZpZWxkT3B0aW9uc19DVHlwZSB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgYm9v
bCBwYWNrZWQgPSAyOwotICBib29sIGhhc19wYWNrZWQoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9w
YWNrZWQoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrUGFja2VkRmllbGROdW1iZXIgPSAyOwotICBi
b29sIHBhY2tlZCgpIGNvbnN0OwotICB2b2lkIHNldF9wYWNrZWQoYm9vbCB2YWx1ZSk7Ci0KLSAg
Ly8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlIGpzdHlwZSA9
IDYgW2RlZmF1bHQgPSBKU19OT1JNQUxdOwotICBib29sIGhhc19qc3R5cGUoKSBjb25zdDsKLSAg
dm9pZCBjbGVhcl9qc3R5cGUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrSnN0eXBlRmllbGROdW1i
ZXIgPSA2OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19KU1R5cGUganN0eXBl
KCkgY29uc3Q7Ci0gIHZvaWQgc2V0X2pzdHlwZSg6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0
aW9uc19KU1R5cGUgdmFsdWUpOwotCi0gIC8vIG9wdGlvbmFsIGJvb2wgbGF6eSA9IDUgW2RlZmF1
bHQgPSBmYWxzZV07Ci0gIGJvb2wgaGFzX2xhenkoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9sYXp5
KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0xhenlGaWVsZE51bWJlciA9IDU7Ci0gIGJvb2wgbGF6
eSgpIGNvbnN0OwotICB2b2lkIHNldF9sYXp5KGJvb2wgdmFsdWUpOwotCi0gIC8vIG9wdGlvbmFs
IGJvb2wgZGVwcmVjYXRlZCA9IDMgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGJvb2wgaGFzX2RlcHJl
Y2F0ZWQoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9kZXByZWNhdGVkKCk7Ci0gIHN0YXRpYyBjb25z
dCBpbnQga0RlcHJlY2F0ZWRGaWVsZE51bWJlciA9IDM7Ci0gIGJvb2wgZGVwcmVjYXRlZCgpIGNv
bnN0OwotICB2b2lkIHNldF9kZXByZWNhdGVkKGJvb2wgdmFsdWUpOwotCi0gIC8vIG9wdGlvbmFs
IGJvb2wgd2VhayA9IDEwIFtkZWZhdWx0ID0gZmFsc2VdOwotICBib29sIGhhc193ZWFrKCkgY29u
c3Q7Ci0gIHZvaWQgY2xlYXJfd2VhaygpOwotICBzdGF0aWMgY29uc3QgaW50IGtXZWFrRmllbGRO
dW1iZXIgPSAxMDsKLSAgYm9vbCB3ZWFrKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3dlYWsoYm9vbCB2
YWx1ZSk7Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0
aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotICBpbnQgdW5pbnRlcnByZXRlZF9vcHRp
b25fc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCk7Ci0g
IHN0YXRpYyBjb25zdCBpbnQga1VuaW50ZXJwcmV0ZWRPcHRpb25GaWVsZE51bWJlciA9IDk5OTsK
LSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uJiB1bmludGVy
cHJldGVkX29wdGlvbihpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlVu
aW50ZXJwcmV0ZWRPcHRpb24qIG11dGFibGVfdW5pbnRlcnByZXRlZF9vcHRpb24oaW50IGluZGV4
KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uKiBhZGRfdW5pbnRl
cnByZXRlZF9vcHRpb24oKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxk
PCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24gPioKLSAgICAgIG11dGFi
bGVfdW5pbnRlcnByZXRlZF9vcHRpb24oKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpS
ZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24g
PiYKLSAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgY29uc3Q7Ci0KLSAgR09PR0xFX1BST1RP
QlVGX0VYVEVOU0lPTl9BQ0NFU1NPUlMoRmllbGRPcHRpb25zKQotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucykKLSBw
cml2YXRlOgotICBpbmxpbmUgdm9pZCBzZXRfaGFzX2N0eXBlKCk7Ci0gIGlubGluZSB2b2lkIGNs
ZWFyX2hhc19jdHlwZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX3BhY2tlZCgpOwotICBpbmxp
bmUgdm9pZCBjbGVhcl9oYXNfcGFja2VkKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfanN0eXBl
KCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19qc3R5cGUoKTsKLSAgaW5saW5lIHZvaWQgc2V0
X2hhc19sYXp5KCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19sYXp5KCk7Ci0gIGlubGluZSB2
b2lkIHNldF9oYXNfZGVwcmVjYXRlZCgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfZGVwcmVj
YXRlZCgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX3dlYWsoKTsKLSAgaW5saW5lIHZvaWQgY2xl
YXJfaGFzX3dlYWsoKTsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpFeHRlbnNp
b25TZXQgX2V4dGVuc2lvbnNfOwotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oklu
dGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFsX21ldGFkYXRhXzsKLSAgOjpnb29nbGU6
OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRzX1sxXTsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9z
aXplXzsKLSAgaW50IGN0eXBlXzsKLSAgaW50IGpzdHlwZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0
aW9uID4gdW5pbnRlcnByZXRlZF9vcHRpb25fOwotICBib29sIHBhY2tlZF87Ci0gIGJvb2wgbGF6
eV87Ci0gIGJvb2wgZGVwcmVjYXRlZF87Ci0gIGJvb2wgd2Vha187Ci0gIGZyaWVuZCB2b2lkIExJ
QlBST1RPQlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVz
Y3JpcHRvcl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29v
Z2xlXzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJv
dG9idWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3Rv
KCk7Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIEZpZWxkT3B0
aW9ucyogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQ
Uk9UT0JVRl9FWFBPUlQgRW51bU9wdGlvbnMgOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIEVudW1PcHRpb25zKCk7Ci0gIHZpcnR1YWwgfkVudW1PcHRp
b25zKCk7Ci0KLSAgRW51bU9wdGlvbnMoY29uc3QgRW51bU9wdGlvbnMmIGZyb20pOwotCi0gIGlu
bGluZSBFbnVtT3B0aW9ucyYgb3BlcmF0b3I9KGNvbnN0IEVudW1PcHRpb25zJiBmcm9tKSB7Ci0g
ICAgQ29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcygp
IGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy51bmtub3duX2ZpZWxkcygp
OwotICB9Ci0KLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0KiBt
dXRhYmxlX3Vua25vd25fZmllbGRzKCkgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFf
Lm11dGFibGVfdW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IEVu
dW1PcHRpb25zJiBkZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBTd2FwKEVudW1PcHRpb25z
KiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUgRW51bU9wdGlvbnMqIE5ldygp
IGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIEVudW1PcHRpb25zKiBOZXcoOjpnb29n
bGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0OwotICB2b2lkIENvcHlGcm9tKGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZyb20o
Y29uc3QgRW51bU9wdGlvbnMmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBFbnVtT3B0
aW9ucyYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29u
c3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNv
ZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVh
bSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6
Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNo
ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2
b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVk
U2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJuYWxTd2FwKEVudW1PcHRpb25zKiBv
dGhlcik7Ci0gIHByaXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBH
ZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRh
Xy5hcmVuYSgpOwotICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkgY29uc3Qgewot
ICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsKLSAgfQotICBw
dWJsaWM6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRhZGF0YSgpIGNv
bnN0OwotCi0gIC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBvcHRpb25hbCBi
b29sIGFsbG93X2FsaWFzID0gMjsKLSAgYm9vbCBoYXNfYWxsb3dfYWxpYXMoKSBjb25zdDsKLSAg
dm9pZCBjbGVhcl9hbGxvd19hbGlhcygpOwotICBzdGF0aWMgY29uc3QgaW50IGtBbGxvd0FsaWFz
RmllbGROdW1iZXIgPSAyOwotICBib29sIGFsbG93X2FsaWFzKCkgY29uc3Q7Ci0gIHZvaWQgc2V0
X2FsbG93X2FsaWFzKGJvb2wgdmFsdWUpOwotCi0gIC8vIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRl
ZCA9IDMgW2RlZmF1bHQgPSBmYWxzZV07Ci0gIGJvb2wgaGFzX2RlcHJlY2F0ZWQoKSBjb25zdDsK
LSAgdm9pZCBjbGVhcl9kZXByZWNhdGVkKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0RlcHJlY2F0
ZWRGaWVsZE51bWJlciA9IDM7Ci0gIGJvb2wgZGVwcmVjYXRlZCgpIGNvbnN0OwotICB2b2lkIHNl
dF9kZXByZWNhdGVkKGJvb2wgdmFsdWUpOwotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLSAgaW50
IHVuaW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl91bmludGVy
cHJldGVkX29wdGlvbigpOwotICBzdGF0aWMgY29uc3QgaW50IGtVbmludGVycHJldGVkT3B0aW9u
RmllbGROdW1iZXIgPSA5OTk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnBy
ZXRlZE9wdGlvbiYgdW5pbnRlcnByZXRlZF9vcHRpb24oaW50IGluZGV4KSBjb25zdDsKLSAgOjpn
b29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uKiBtdXRhYmxlX3VuaW50ZXJwcmV0
ZWRfb3B0aW9uKGludCBpbmRleCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRl
ZE9wdGlvbiogYWRkX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0
aW9uID4qCi0gICAgICBtdXRhYmxlX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCk7Ci0gIGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpV
bmludGVycHJldGVkT3B0aW9uID4mCi0gICAgICB1bmludGVycHJldGVkX29wdGlvbigpIGNvbnN0
OwotCi0gIEdPT0dMRV9QUk9UT0JVRl9FWFRFTlNJT05fQUNDRVNTT1JTKEVudW1PcHRpb25zKQot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVm
LkVudW1PcHRpb25zKQotIHByaXZhdGU6Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfYWxsb3dfYWxp
YXMoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX2FsbG93X2FsaWFzKCk7Ci0gIGlubGluZSB2
b2lkIHNldF9oYXNfZGVwcmVjYXRlZCgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfZGVwcmVj
YXRlZCgpOwotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkV4dGVuc2lvblNldCBf
ZXh0ZW5zaW9uc187Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxN
ZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICA6Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQzMiBfaGFzX2JpdHNfWzFdOwotICBtdXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+IHVuaW50ZXJwcmV0ZWRfb3B0aW9uXzsKLSAgYm9vbCBh
bGxvd19hbGlhc187Ci0gIGJvb2wgZGVwcmVjYXRlZF87Ci0gIGZyaWVuZCB2b2lkIExJQlBST1RP
QlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRv
cl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJm
cHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZf
U2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0K
LSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIEVudW1PcHRpb25zKiBk
ZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVG
X0VYUE9SVCBFbnVtVmFsdWVPcHRpb25zIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSB7Ci0gcHVibGljOgotICBFbnVtVmFsdWVPcHRpb25zKCk7Ci0gIHZpcnR1YWwgfkVudW1W
YWx1ZU9wdGlvbnMoKTsKLQotICBFbnVtVmFsdWVPcHRpb25zKGNvbnN0IEVudW1WYWx1ZU9wdGlv
bnMmIGZyb20pOwotCi0gIGlubGluZSBFbnVtVmFsdWVPcHRpb25zJiBvcGVyYXRvcj0oY29uc3Qg
RW51bVZhbHVlT3B0aW9ucyYgZnJvbSkgewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJldHVy
biAqdGhpczsKLSAgfQotCi0gIGlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25v
d25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5h
bF9tZXRhZGF0YV8udW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIGlubGluZSA6Omdvb2dsZTo6
cHJvdG9idWY6OlVua25vd25GaWVsZFNldCogbXV0YWJsZV91bmtub3duX2ZpZWxkcygpIHsKLSAg
ICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7Ci0g
IH0KLQotICBzdGF0aWMgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNj
cmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBFbnVtVmFsdWVPcHRpb25zJiBkZWZhdWx0X2luc3Rh
bmNlKCk7Ci0KLSAgdm9pZCBTd2FwKEVudW1WYWx1ZU9wdGlvbnMqIG90aGVyKTsKLQotICAvLyBp
bXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIGlubGluZSBFbnVtVmFsdWVPcHRpb25zKiBOZXcoKSBjb25zdCB7IHJldHVy
biBOZXcoTlVMTCk7IH0KLQotICBFbnVtVmFsdWVPcHRpb25zKiBOZXcoOjpnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0OwotICB2b2lkIENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgRW51
bVZhbHVlT3B0aW9ucyYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IEVudW1WYWx1ZU9w
dGlvbnMmIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNv
bnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21D
b2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJl
YW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJh
eSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2Fj
aGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAg
dm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hl
ZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChFbnVtVmFsdWVPcHRp
b25zKiBvdGhlcik7Ci0gIHByaXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFy
ZW5hKiBHZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21l
dGFkYXRhXy5hcmVuYSgpOwotICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkgY29u
c3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsKLSAg
fQotICBwdWJsaWM6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRhZGF0
YSgpIGNvbnN0OwotCi0gIC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBvcHRp
b25hbCBib29sIGRlcHJlY2F0ZWQgPSAxIFtkZWZhdWx0ID0gZmFsc2VdOwotICBib29sIGhhc19k
ZXByZWNhdGVkKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfZGVwcmVjYXRlZCgpOwotICBzdGF0aWMg
Y29uc3QgaW50IGtEZXByZWNhdGVkRmllbGROdW1iZXIgPSAxOwotICBib29sIGRlcHJlY2F0ZWQo
KSBjb25zdDsKLSAgdm9pZCBzZXRfZGVwcmVjYXRlZChib29sIHZhbHVlKTsKLQotICAvLyByZXBl
YXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9v
cHRpb24gPSA5OTk7Ci0gIGludCB1bmludGVycHJldGVkX29wdGlvbl9zaXplKCkgY29uc3Q7Ci0g
IHZvaWQgY2xlYXJfdW5pbnRlcnByZXRlZF9vcHRpb24oKTsKLSAgc3RhdGljIGNvbnN0IGludCBr
VW5pbnRlcnByZXRlZE9wdGlvbkZpZWxkTnVtYmVyID0gOTk5OwotICBjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24mIHVuaW50ZXJwcmV0ZWRfb3B0aW9uKGludCBp
bmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiog
bXV0YWJsZV91bmludGVycHJldGVkX29wdGlvbihpbnQgaW5kZXgpOwotICA6Omdvb2dsZTo6cHJv
dG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24qIGFkZF91bmludGVycHJldGVkX29wdGlvbigpOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotICAgICAgbXV0YWJsZV91bmludGVycHJldGVkX29w
dGlvbigpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+JgotICAgICAgdW5pbnRlcnBy
ZXRlZF9vcHRpb24oKSBjb25zdDsKLQotICBHT09HTEVfUFJPVE9CVUZfRVhURU5TSU9OX0FDQ0VT
U09SUyhFbnVtVmFsdWVPcHRpb25zKQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xh
c3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMpCi0gcHJpdmF0ZToKLSAg
aW5saW5lIHZvaWQgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hh
c19kZXByZWNhdGVkKCk7Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RXh0ZW5z
aW9uU2V0IF9leHRlbnNpb25zXzsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJ
bnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDMyIF9oYXNfYml0c19bMV07Ci0gIG11dGFibGUgaW50IF9jYWNoZWRf
c2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6
OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uID4gdW5pbnRlcnByZXRlZF9vcHRpb25fOwot
ICBib29sIGRlcHJlY2F0ZWRfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJv
dG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwot
ICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVz
Y3JpcHRvcl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9n
b29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFz
RGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBFbnVtVmFsdWVPcHRpb25zKiBkZWZhdWx0X2lu
c3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBT
ZXJ2aWNlT3B0aW9ucyA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1
YmxpYzoKLSAgU2VydmljZU9wdGlvbnMoKTsKLSAgdmlydHVhbCB+U2VydmljZU9wdGlvbnMoKTsK
LQotICBTZXJ2aWNlT3B0aW9ucyhjb25zdCBTZXJ2aWNlT3B0aW9ucyYgZnJvbSk7Ci0KLSAgaW5s
aW5lIFNlcnZpY2VPcHRpb25zJiBvcGVyYXRvcj0oY29uc3QgU2VydmljZU9wdGlvbnMmIGZyb20p
IHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBpbmxp
bmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpVbmtub3duRmllbGRTZXQmIHVua25vd25fZmll
bGRzKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnVua25vd25fZmll
bGRzKCk7Ci0gIH0KLQotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpVbmtub3duRmllbGRT
ZXQqIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRh
ZGF0YV8ubXV0YWJsZV91bmtub3duX2ZpZWxkcygpOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29u
c3QgU2VydmljZU9wdGlvbnMmIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2b2lkIFN3YXAoU2Vy
dmljZU9wdGlvbnMqIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBTZXJ2aWNl
T3B0aW9ucyogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgU2VydmljZU9w
dGlvbnMqIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3Q7Ci0gIHZv
aWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAg
dm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsK
LSAgdm9pZCBDb3B5RnJvbShjb25zdCBTZXJ2aWNlT3B0aW9ucyYgZnJvbSk7Ci0gIHZvaWQgTWVy
Z2VGcm9tKGNvbnN0IFNlcnZpY2VPcHRpb25zJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigpOwotICBi
b29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25zdDsKLSAg
Ym9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENh
Y2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJl
YW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6
ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0
KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2FjaGVkX3Np
emVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNoYXJlZER0
b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAgdm9pZCBJbnRl
cm5hbFN3YXAoU2VydmljZU9wdGlvbnMqIG90aGVyKTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAg
IHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQq
IE1heWJlQXJlbmFQdHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8u
cmF3X2FyZW5hX3B0cigpOwotICB9Ci0gIHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1ldGFkYXRhIEdldE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBh
Y2Nlc3NvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDMzIFtkZWZhdWx0ID0g
ZmFsc2VdOwotICBib29sIGhhc19kZXByZWNhdGVkKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfZGVw
cmVjYXRlZCgpOwotICBzdGF0aWMgY29uc3QgaW50IGtEZXByZWNhdGVkRmllbGROdW1iZXIgPSAz
MzsKLSAgYm9vbCBkZXByZWNhdGVkKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X2RlcHJlY2F0ZWQoYm9v
bCB2YWx1ZSk7Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk
T3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotICBpbnQgdW5pbnRlcnByZXRlZF9v
cHRpb25fc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCk7
Ci0gIHN0YXRpYyBjb25zdCBpbnQga1VuaW50ZXJwcmV0ZWRPcHRpb25GaWVsZE51bWJlciA9IDk5
OTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uJiB1bmlu
dGVycHJldGVkX29wdGlvbihpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6
OlVuaW50ZXJwcmV0ZWRPcHRpb24qIG11dGFibGVfdW5pbnRlcnByZXRlZF9vcHRpb24oaW50IGlu
ZGV4KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uKiBhZGRfdW5p
bnRlcnByZXRlZF9vcHRpb24oKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZp
ZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24gPioKLSAgICAgIG11
dGFibGVfdW5pbnRlcnByZXRlZF9vcHRpb24oKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRp
b24gPiYKLSAgICAgIHVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgY29uc3Q7Ci0KLSAgR09PR0xFX1BS
T1RPQlVGX0VYVEVOU0lPTl9BQ0NFU1NPUlMoU2VydmljZU9wdGlvbnMpCi0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlv
bnMpCi0gcHJpdmF0ZToKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0gIGlu
bGluZSB2b2lkIGNsZWFyX2hhc19kZXByZWNhdGVkKCk7Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6RXh0ZW5zaW9uU2V0IF9leHRlbnNpb25zXzsKLQotICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRh
ZGF0YV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIF9oYXNfYml0c19bMV07Ci0gIG11
dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQ
dHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uID4gdW5pbnRl
cnByZXRlZF9vcHRpb25fOwotICBib29sIGRlcHJlY2F0ZWRfOwotICBmcmllbmQgdm9pZCBMSUJQ
Uk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2Ny
aXB0b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2ds
ZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3Rv
YnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygp
OwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBTZXJ2aWNlT3B0
aW9ucyogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQ
Uk9UT0JVRl9FWFBPUlQgTWV0aG9kT3B0aW9ucyA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgTWV0aG9kT3B0aW9ucygpOwotICB2aXJ0dWFsIH5NZXRo
b2RPcHRpb25zKCk7Ci0KLSAgTWV0aG9kT3B0aW9ucyhjb25zdCBNZXRob2RPcHRpb25zJiBmcm9t
KTsKLQotICBpbmxpbmUgTWV0aG9kT3B0aW9ucyYgb3BlcmF0b3I9KGNvbnN0IE1ldGhvZE9wdGlv
bnMmIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0K
LQotICBpbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpVbmtub3duRmllbGRTZXQmIHVu
a25vd25fZmllbGRzKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnVu
a25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpVbmtu
b3duRmllbGRTZXQqIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSB7Ci0gICAgcmV0dXJuIF9pbnRl
cm5hbF9tZXRhZGF0YV8ubXV0YWJsZV91bmtub3duX2ZpZWxkcygpOwotICB9Ci0KLSAgc3RhdGlj
IGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBz
dGF0aWMgY29uc3QgTWV0aG9kT3B0aW9ucyYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQg
U3dhcChNZXRob2RPcHRpb25zKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUg
TWV0aG9kT3B0aW9ucyogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgTWV0
aG9kT3B0aW9ucyogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsK
LSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20p
OwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZy
b20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IE1ldGhvZE9wdGlvbnMmIGZyb20pOwotICB2b2lk
IE1lcmdlRnJvbShjb25zdCBNZXRob2RPcHRpb25zJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigpOwot
ICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25zdDsK
LSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0
aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRT
dHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlh
bGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0
cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2FjaGVk
X3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNoYXJl
ZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAgdm9pZCBJ
bnRlcm5hbFN3YXAoTWV0aG9kT3B0aW9ucyogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUg
Ojpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0g
ICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9p
ZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRh
Xy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8v
IGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMzMgW2RlZmF1bHQg
PSBmYWxzZV07Ci0gIGJvb2wgaGFzX2RlcHJlY2F0ZWQoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9k
ZXByZWNhdGVkKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0RlcHJlY2F0ZWRGaWVsZE51bWJlciA9
IDMzOwotICBib29sIGRlcHJlY2F0ZWQoKSBjb25zdDsKLSAgdm9pZCBzZXRfZGVwcmVjYXRlZChi
b29sIHZhbHVlKTsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0
ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0gIGludCB1bmludGVycHJldGVk
X29wdGlvbl9zaXplKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfdW5pbnRlcnByZXRlZF9vcHRpb24o
KTsKLSAgc3RhdGljIGNvbnN0IGludCBrVW5pbnRlcnByZXRlZE9wdGlvbkZpZWxkTnVtYmVyID0g
OTk5OwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24mIHVu
aW50ZXJwcmV0ZWRfb3B0aW9uKGludCBpbmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogbXV0YWJsZV91bmludGVycHJldGVkX29wdGlvbihpbnQg
aW5kZXgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24qIGFkZF91
bmludGVycHJldGVkX29wdGlvbigpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRy
RmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotICAgICAg
bXV0YWJsZV91bmludGVycHJldGVkX29wdGlvbigpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9w
dGlvbiA+JgotICAgICAgdW5pbnRlcnByZXRlZF9vcHRpb24oKSBjb25zdDsKLQotICBHT09HTEVf
UFJPVE9CVUZfRVhURU5TSU9OX0FDQ0VTU09SUyhNZXRob2RPcHRpb25zKQotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlv
bnMpCi0gcHJpdmF0ZToKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0gIGlu
bGluZSB2b2lkIGNsZWFyX2hhc19kZXByZWNhdGVkKCk7Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6RXh0ZW5zaW9uU2V0IF9leHRlbnNpb25zXzsKLQotICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRh
ZGF0YV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIF9oYXNfYml0c19bMV07Ci0gIG11
dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQ
dHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uID4gdW5pbnRl
cnByZXRlZF9vcHRpb25fOwotICBib29sIGRlcHJlY2F0ZWRfOwotICBmcmllbmQgdm9pZCBMSUJQ
Uk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2Ny
aXB0b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2ds
ZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3Rv
YnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygp
OwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBNZXRob2RPcHRp
b25zKiBkZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBS
T1RPQlVGX0VYUE9SVCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0IDogcHVibGljIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgotICBVbmludGVycHJldGVkT3B0aW9u
X05hbWVQYXJ0KCk7Ci0gIHZpcnR1YWwgflVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQoKTsK
LQotICBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRp
b25fTmFtZVBhcnQmIGZyb20pOwotCi0gIGlubGluZSBVbmludGVycHJldGVkT3B0aW9uX05hbWVQ
YXJ0JiBvcGVyYXRvcj0oY29uc3QgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCYgZnJvbSkg
ewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGlubGlu
ZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVs
ZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8udW5rbm93bl9maWVs
ZHMoKTsKLSAgfQotCi0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNl
dCogbXV0YWJsZV91bmtub3duX2ZpZWxkcygpIHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFk
YXRhXy5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25z
dCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0JiBkZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAg
dm9pZCBTd2FwKFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQqIG90aGVyKTsKLQotICAvLyBp
bXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIGlubGluZSBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KiBOZXcoKSBj
b25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0KLQotICBVbmludGVycHJldGVkT3B0aW9uX05hbWVQ
YXJ0KiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0OwotICB2b2lk
IENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZv
aWQgTWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0g
IHZvaWQgQ29weUZyb20oY29uc3QgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCYgZnJvbSk7
Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQmIGZy
b20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0g
IGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVh
bSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0
KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6
OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2ds
ZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFy
ZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50
IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChVbmludGVycHJldGVkT3B0aW9uX05h
bWVQYXJ0KiBvdGhlcik7Ci0gIHByaXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6
OkFyZW5hKiBHZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFs
X21ldGFkYXRhXy5hcmVuYSgpOwotICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkg
Y29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsK
LSAgfQotICBwdWJsaWM6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRh
ZGF0YSgpIGNvbnN0OwotCi0gIC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBy
ZXF1aXJlZCBzdHJpbmcgbmFtZV9wYXJ0ID0gMTsKLSAgYm9vbCBoYXNfbmFtZV9wYXJ0KCkgY29u
c3Q7Ci0gIHZvaWQgY2xlYXJfbmFtZV9wYXJ0KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga05hbWVQ
YXJ0RmllbGROdW1iZXIgPSAxOwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lX3BhcnQoKSBj
b25zdDsKLSAgdm9pZCBzZXRfbmFtZV9wYXJ0KGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsK
LSAgdm9pZCBzZXRfbmFtZV9wYXJ0KGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfbmFt
ZV9wYXJ0KGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcq
IG11dGFibGVfbmFtZV9wYXJ0KCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfbmFtZV9wYXJ0
KCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9uYW1lX3BhcnQoOjpzdGQ6OnN0cmluZyogbmFtZV9w
YXJ0KTsKLQotICAvLyByZXF1aXJlZCBib29sIGlzX2V4dGVuc2lvbiA9IDI7Ci0gIGJvb2wgaGFz
X2lzX2V4dGVuc2lvbigpIGNvbnN0OwotICB2b2lkIGNsZWFyX2lzX2V4dGVuc2lvbigpOwotICBz
dGF0aWMgY29uc3QgaW50IGtJc0V4dGVuc2lvbkZpZWxkTnVtYmVyID0gMjsKLSAgYm9vbCBpc19l
eHRlbnNpb24oKSBjb25zdDsKLSAgdm9pZCBzZXRfaXNfZXh0ZW5zaW9uKGJvb2wgdmFsdWUpOwot
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCkKLSBwcml2YXRlOgotICBpbmxpbmUgdm9p
ZCBzZXRfaGFzX25hbWVfcGFydCgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfbmFtZV9wYXJ0
KCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfaXNfZXh0ZW5zaW9uKCk7Ci0gIGlubGluZSB2b2lk
IGNsZWFyX2hhc19pc19leHRlbnNpb24oKTsKLQotICAvLyBoZWxwZXIgZm9yIEJ5dGVTaXplKCkK
LSAgaW50IFJlcXVpcmVkRmllbGRzQnl0ZVNpemVGYWxsYmFjaygpIGNvbnN0OwotCi0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVy
bmFsX21ldGFkYXRhXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRzX1sx
XTsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgbmFtZV9wYXJ0XzsKLSAgYm9vbCBpc19leHRlbnNpb25f
OwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29n
bGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90
b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7
Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8y
ZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7
Ci0gIHN0YXRpYyBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KiBkZWZhdWx0X2luc3RhbmNl
XzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBVbmludGVy
cHJldGVkT3B0aW9uIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVi
bGljOgotICBVbmludGVycHJldGVkT3B0aW9uKCk7Ci0gIHZpcnR1YWwgflVuaW50ZXJwcmV0ZWRP
cHRpb24oKTsKLQotICBVbmludGVycHJldGVkT3B0aW9uKGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRp
b24mIGZyb20pOwotCi0gIGlubGluZSBVbmludGVycHJldGVkT3B0aW9uJiBvcGVyYXRvcj0oY29u
c3QgVW5pbnRlcnByZXRlZE9wdGlvbiYgZnJvbSkgewotICAgIENvcHlGcm9tKGZyb20pOwotICAg
IHJldHVybiAqdGhpczsKLSAgfQotCi0gIGlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OlVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9p
bnRlcm5hbF9tZXRhZGF0YV8udW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIGlubGluZSA6Omdv
b2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCogbXV0YWJsZV91bmtub3duX2ZpZWxkcygp
IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5tdXRhYmxlX3Vua25vd25fZmllbGRz
KCk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBVbmludGVycHJldGVkT3B0aW9uJiBkZWZh
dWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBTd2FwKFVuaW50ZXJwcmV0ZWRPcHRpb24qIG90aGVy
KTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBVbmludGVycHJldGVkT3B0aW9uKiBOZXco
KSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0KLQotICBVbmludGVycHJldGVkT3B0aW9uKiBO
ZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0OwotICB2b2lkIENvcHlG
cm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVy
Z2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQg
Q29weUZyb20oY29uc3QgVW5pbnRlcnByZXRlZE9wdGlvbiYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VG
cm9tKGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24mIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0g
IGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0Owot
ICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0
cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFs
aXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRw
dXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRf
c2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVk
RHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIElu
dGVybmFsU3dhcChVbmludGVycHJldGVkT3B0aW9uKiBvdGhlcik7Ci0gIHByaXZhdGU6Ci0gIGlu
bGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0
IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5hcmVuYSgpOwotICB9Ci0gIGlubGlu
ZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0
YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsKLSAgfQotICBwdWJsaWM6Ci0KLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRhZGF0YSgpIGNvbnN0OwotCi0gIC8vIG5lc3RlZCB0eXBl
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LSAgdHlwZWRlZiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0IE5hbWVQYXJ0OwotCi0gIC8v
IGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk
T3B0aW9uLk5hbWVQYXJ0IG5hbWUgPSAyOwotICBpbnQgbmFtZV9zaXplKCkgY29uc3Q7Ci0gIHZv
aWQgY2xlYXJfbmFtZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtOYW1lRmllbGROdW1iZXIgPSAy
OwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBh
cnQmIG5hbWUoaW50IGluZGV4KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVy
cHJldGVkT3B0aW9uX05hbWVQYXJ0KiBtdXRhYmxlX25hbWUoaW50IGluZGV4KTsKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KiBhZGRfbmFtZSgpOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6VW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCA+KgotICAgICAgbXV0YWJsZV9uYW1lKCk7
Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6
OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0ID4mCi0gICAgICBuYW1lKCkg
Y29uc3Q7Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGlkZW50aWZpZXJfdmFsdWUgPSAzOwotICBi
b29sIGhhc19pZGVudGlmaWVyX3ZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfaWRlbnRpZmll
cl92YWx1ZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtJZGVudGlmaWVyVmFsdWVGaWVsZE51bWJl
ciA9IDM7Ci0gIGNvbnN0IDo6c3RkOjpzdHJpbmcmIGlkZW50aWZpZXJfdmFsdWUoKSBjb25zdDsK
LSAgdm9pZCBzZXRfaWRlbnRpZmllcl92YWx1ZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7
Ci0gIHZvaWQgc2V0X2lkZW50aWZpZXJfdmFsdWUoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lk
IHNldF9pZGVudGlmaWVyX3ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0g
IDo6c3RkOjpzdHJpbmcqIG11dGFibGVfaWRlbnRpZmllcl92YWx1ZSgpOwotICA6OnN0ZDo6c3Ry
aW5nKiByZWxlYXNlX2lkZW50aWZpZXJfdmFsdWUoKTsKLSAgdm9pZCBzZXRfYWxsb2NhdGVkX2lk
ZW50aWZpZXJfdmFsdWUoOjpzdGQ6OnN0cmluZyogaWRlbnRpZmllcl92YWx1ZSk7Ci0KLSAgLy8g
b3B0aW9uYWwgdWludDY0IHBvc2l0aXZlX2ludF92YWx1ZSA9IDQ7Ci0gIGJvb2wgaGFzX3Bvc2l0
aXZlX2ludF92YWx1ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3Bvc2l0aXZlX2ludF92YWx1ZSgp
OwotICBzdGF0aWMgY29uc3QgaW50IGtQb3NpdGl2ZUludFZhbHVlRmllbGROdW1iZXIgPSA0Owot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ2NCBwb3NpdGl2ZV9pbnRfdmFsdWUoKSBjb25zdDsK
LSAgdm9pZCBzZXRfcG9zaXRpdmVfaW50X3ZhbHVlKDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDY0
IHZhbHVlKTsKLQotICAvLyBvcHRpb25hbCBpbnQ2NCBuZWdhdGl2ZV9pbnRfdmFsdWUgPSA1Owot
ICBib29sIGhhc19uZWdhdGl2ZV9pbnRfdmFsdWUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9uZWdh
dGl2ZV9pbnRfdmFsdWUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrTmVnYXRpdmVJbnRWYWx1ZUZp
ZWxkTnVtYmVyID0gNTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQ2NCBuZWdhdGl2ZV9pbnRf
dmFsdWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfbmVnYXRpdmVfaW50X3ZhbHVlKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50NjQgdmFsdWUpOwotCi0gIC8vIG9wdGlvbmFsIGRvdWJsZSBkb3VibGVfdmFs
dWUgPSA2OwotICBib29sIGhhc19kb3VibGVfdmFsdWUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9k
b3VibGVfdmFsdWUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrRG91YmxlVmFsdWVGaWVsZE51bWJl
ciA9IDY7Ci0gIGRvdWJsZSBkb3VibGVfdmFsdWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfZG91Ymxl
X3ZhbHVlKGRvdWJsZSB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgYnl0ZXMgc3RyaW5nX3ZhbHVl
ID0gNzsKLSAgYm9vbCBoYXNfc3RyaW5nX3ZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfc3Ry
aW5nX3ZhbHVlKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1N0cmluZ1ZhbHVlRmllbGROdW1iZXIg
PSA3OwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBzdHJpbmdfdmFsdWUoKSBjb25zdDsKLSAgdm9p
ZCBzZXRfc3RyaW5nX3ZhbHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBz
ZXRfc3RyaW5nX3ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfc3RyaW5nX3Zh
bHVlKGNvbnN0IHZvaWQqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIG11
dGFibGVfc3RyaW5nX3ZhbHVlKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2Vfc3RyaW5nX3Zh
bHVlKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9zdHJpbmdfdmFsdWUoOjpzdGQ6OnN0cmluZyog
c3RyaW5nX3ZhbHVlKTsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgYWdncmVnYXRlX3ZhbHVlID0g
ODsKLSAgYm9vbCBoYXNfYWdncmVnYXRlX3ZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfYWdn
cmVnYXRlX3ZhbHVlKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0FnZ3JlZ2F0ZVZhbHVlRmllbGRO
dW1iZXIgPSA4OwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBhZ2dyZWdhdGVfdmFsdWUoKSBjb25z
dDsKLSAgdm9pZCBzZXRfYWdncmVnYXRlX3ZhbHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVl
KTsKLSAgdm9pZCBzZXRfYWdncmVnYXRlX3ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9p
ZCBzZXRfYWdncmVnYXRlX3ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0g
IDo6c3RkOjpzdHJpbmcqIG11dGFibGVfYWdncmVnYXRlX3ZhbHVlKCk7Ci0gIDo6c3RkOjpzdHJp
bmcqIHJlbGVhc2VfYWdncmVnYXRlX3ZhbHVlKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9hZ2dy
ZWdhdGVfdmFsdWUoOjpzdGQ6OnN0cmluZyogYWdncmVnYXRlX3ZhbHVlKTsKLQotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJw
cmV0ZWRPcHRpb24pCi0gcHJpdmF0ZToKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19pZGVudGlmaWVy
X3ZhbHVlKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19pZGVudGlmaWVyX3ZhbHVlKCk7Ci0g
IGlubGluZSB2b2lkIHNldF9oYXNfcG9zaXRpdmVfaW50X3ZhbHVlKCk7Ci0gIGlubGluZSB2b2lk
IGNsZWFyX2hhc19wb3NpdGl2ZV9pbnRfdmFsdWUoKTsKLSAgaW5saW5lIHZvaWQgc2V0X2hhc19u
ZWdhdGl2ZV9pbnRfdmFsdWUoKTsKLSAgaW5saW5lIHZvaWQgY2xlYXJfaGFzX25lZ2F0aXZlX2lu
dF92YWx1ZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX2RvdWJsZV92YWx1ZSgpOwotICBpbmxp
bmUgdm9pZCBjbGVhcl9oYXNfZG91YmxlX3ZhbHVlKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNf
c3RyaW5nX3ZhbHVlKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19zdHJpbmdfdmFsdWUoKTsK
LSAgaW5saW5lIHZvaWQgc2V0X2hhc19hZ2dyZWdhdGVfdmFsdWUoKTsKLSAgaW5saW5lIHZvaWQg
Y2xlYXJfaGFzX2FnZ3JlZ2F0ZV92YWx1ZSgpOwotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFsX21ldGFkYXRhXzsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRzX1sxXTsKLSAgbXV0YWJsZSBpbnQg
X2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6
Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQgPiBuYW1lXzsK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgaWRlbnRpZmll
cl92YWx1ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDY0IHBvc2l0aXZlX2ludF92YWx1
ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50NjQgbmVnYXRpdmVfaW50X3ZhbHVlXzsKLSAg
ZG91YmxlIGRvdWJsZV92YWx1ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFy
ZW5hU3RyaW5nUHRyIHN0cmluZ192YWx1ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkFyZW5hU3RyaW5nUHRyIGFnZ3JlZ2F0ZV92YWx1ZV87Ci0gIGZyaWVuZCB2b2lkIExJQlBS
T1RPQlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3Jp
cHRvcl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9i
dWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7
Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIFVuaW50ZXJwcmV0
ZWRPcHRpb24qIGRlZmF1bHRfaW5zdGFuY2VfOwotfTsKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3Mg
TElCUFJPVE9CVUZfRVhQT1JUIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIDogcHVibGljIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgotICBTb3VyY2VDb2RlSW5mb19Mb2Nh
dGlvbigpOwotICB2aXJ0dWFsIH5Tb3VyY2VDb2RlSW5mb19Mb2NhdGlvbigpOwotCi0gIFNvdXJj
ZUNvZGVJbmZvX0xvY2F0aW9uKGNvbnN0IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uJiBmcm9tKTsK
LQotICBpbmxpbmUgU291cmNlQ29kZUluZm9fTG9jYXRpb24mIG9wZXJhdG9yPShjb25zdCBTb3Vy
Y2VDb2RlSW5mb19Mb2NhdGlvbiYgZnJvbSkgewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJl
dHVybiAqdGhpczsKLSAgfQotCi0gIGlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVu
a25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRl
cm5hbF9tZXRhZGF0YV8udW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIGlubGluZSA6Omdvb2ds
ZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCogbXV0YWJsZV91bmtub3duX2ZpZWxkcygpIHsK
LSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7
Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiYgZGVm
YXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiog
b3RoZXIpOwotCi0gIC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgaW5saW5lIFNvdXJjZUNvZGVJbmZvX0xvY2F0
aW9uKiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0KLQotICBTb3VyY2VDb2RlSW5m
b19Mb2NhdGlvbiogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsK
LSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20p
OwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZy
b20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uJiBmcm9t
KTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgU291cmNlQ29kZUluZm9fTG9jYXRpb24mIGZyb20p
OwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGlu
dCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgK
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsK
LSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6
cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRD
dG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNp
emUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiog
b3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSog
R2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0
YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsK
LSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAg
cHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBj
b25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gcmVwZWF0ZWQg
aW50MzIgcGF0aCA9IDEgW3BhY2tlZCA9IHRydWVdOwotICBpbnQgcGF0aF9zaXplKCkgY29uc3Q7
Ci0gIHZvaWQgY2xlYXJfcGF0aCgpOwotICBzdGF0aWMgY29uc3QgaW50IGtQYXRoRmllbGROdW1i
ZXIgPSAxOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHBhdGgoaW50IGluZGV4KSBjb25z
dDsKLSAgdm9pZCBzZXRfcGF0aChpbnQgaW5kZXgsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIg
dmFsdWUpOwotICB2b2lkIGFkZF9wYXRoKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUp
OwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50MzIgPiYKLSAgICAgIHBhdGgoKSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZEZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyID4qCi0gICAgICBt
dXRhYmxlX3BhdGgoKTsKLQotICAvLyByZXBlYXRlZCBpbnQzMiBzcGFuID0gMiBbcGFja2VkID0g
dHJ1ZV07Ci0gIGludCBzcGFuX3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9zcGFuKCk7Ci0g
IHN0YXRpYyBjb25zdCBpbnQga1NwYW5GaWVsZE51bWJlciA9IDI7Ci0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50MzIgc3BhbihpbnQgaW5kZXgpIGNvbnN0OwotICB2b2lkIHNldF9zcGFuKGludCBp
bmRleCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSk7Ci0gIHZvaWQgYWRkX3NwYW4o
Ojpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6UmVwZWF0ZWRGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiA+JgotICAgICAg
c3BhbigpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50MzIgPioKLSAgICAgIG11dGFibGVfc3BhbigpOwotCi0gIC8vIG9w
dGlvbmFsIHN0cmluZyBsZWFkaW5nX2NvbW1lbnRzID0gMzsKLSAgYm9vbCBoYXNfbGVhZGluZ19j
b21tZW50cygpIGNvbnN0OwotICB2b2lkIGNsZWFyX2xlYWRpbmdfY29tbWVudHMoKTsKLSAgc3Rh
dGljIGNvbnN0IGludCBrTGVhZGluZ0NvbW1lbnRzRmllbGROdW1iZXIgPSAzOwotICBjb25zdCA6
OnN0ZDo6c3RyaW5nJiBsZWFkaW5nX2NvbW1lbnRzKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X2xlYWRp
bmdfY29tbWVudHMoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNldF9sZWFk
aW5nX2NvbW1lbnRzKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfbGVhZGluZ19jb21t
ZW50cyhjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBt
dXRhYmxlX2xlYWRpbmdfY29tbWVudHMoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV9sZWFk
aW5nX2NvbW1lbnRzKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9sZWFkaW5nX2NvbW1lbnRzKDo6
c3RkOjpzdHJpbmcqIGxlYWRpbmdfY29tbWVudHMpOwotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyB0
cmFpbGluZ19jb21tZW50cyA9IDQ7Ci0gIGJvb2wgaGFzX3RyYWlsaW5nX2NvbW1lbnRzKCkgY29u
c3Q7Ci0gIHZvaWQgY2xlYXJfdHJhaWxpbmdfY29tbWVudHMoKTsKLSAgc3RhdGljIGNvbnN0IGlu
dCBrVHJhaWxpbmdDb21tZW50c0ZpZWxkTnVtYmVyID0gNDsKLSAgY29uc3QgOjpzdGQ6OnN0cmlu
ZyYgdHJhaWxpbmdfY29tbWVudHMoKSBjb25zdDsKLSAgdm9pZCBzZXRfdHJhaWxpbmdfY29tbWVu
dHMoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNldF90cmFpbGluZ19jb21t
ZW50cyhjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X3RyYWlsaW5nX2NvbW1lbnRzKGNv
bnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIG11dGFibGVf
dHJhaWxpbmdfY29tbWVudHMoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV90cmFpbGluZ19j
b21tZW50cygpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfdHJhaWxpbmdfY29tbWVudHMoOjpzdGQ6
OnN0cmluZyogdHJhaWxpbmdfY29tbWVudHMpOwotCi0gIC8vIHJlcGVhdGVkIHN0cmluZyBsZWFk
aW5nX2RldGFjaGVkX2NvbW1lbnRzID0gNjsKLSAgaW50IGxlYWRpbmdfZGV0YWNoZWRfY29tbWVu
dHNfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMo
KTsKLSAgc3RhdGljIGNvbnN0IGludCBrTGVhZGluZ0RldGFjaGVkQ29tbWVudHNGaWVsZE51bWJl
ciA9IDY7Ci0gIGNvbnN0IDo6c3RkOjpzdHJpbmcmIGxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMo
aW50IGluZGV4KSBjb25zdDsKLSAgOjpzdGQ6OnN0cmluZyogbXV0YWJsZV9sZWFkaW5nX2RldGFj
aGVkX2NvbW1lbnRzKGludCBpbmRleCk7Ci0gIHZvaWQgc2V0X2xlYWRpbmdfZGV0YWNoZWRfY29t
bWVudHMoaW50IGluZGV4LCBjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0
X2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoaW50IGluZGV4LCBjb25zdCBjaGFyKiB2YWx1ZSk7
Ci0gIHZvaWQgc2V0X2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoaW50IGluZGV4LCBjb25zdCBj
aGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBhZGRfbGVhZGluZ19k
ZXRhY2hlZF9jb21tZW50cygpOwotICB2b2lkIGFkZF9sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRz
KGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBhZGRfbGVhZGluZ19kZXRhY2hl
ZF9jb21tZW50cyhjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgYWRkX2xlYWRpbmdfZGV0YWNo
ZWRfY29tbWVudHMoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPiYgbGVhZGlu
Z19kZXRhY2hlZF9jb21tZW50cygpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+KiBtdXRhYmxlX2xlYWRpbmdfZGV0YWNoZWRfY29t
bWVudHMoKTsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29v
Z2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uKQotIHByaXZhdGU6Ci0gIGlubGlu
ZSB2b2lkIHNldF9oYXNfbGVhZGluZ19jb21tZW50cygpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9o
YXNfbGVhZGluZ19jb21tZW50cygpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX3RyYWlsaW5nX2Nv
bW1lbnRzKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc190cmFpbGluZ19jb21tZW50cygpOwot
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJl
bmEgX2ludGVybmFsX21ldGFkYXRhXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hh
c19iaXRzX1sxXTsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjpSZXBlYXRlZEZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyID4gcGF0aF87
Ci0gIG11dGFibGUgaW50IF9wYXRoX2NhY2hlZF9ieXRlX3NpemVfOwotICA6Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPiBzcGFuXzsK
LSAgbXV0YWJsZSBpbnQgX3NwYW5fY2FjaGVkX2J5dGVfc2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIGxlYWRpbmdfY29tbWVudHNfOwotICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciB0cmFpbGluZ19jb21tZW50
c187Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmlu
Zz4gbGVhZGluZ19kZXRhY2hlZF9jb21tZW50c187Ci0gIGZyaWVuZCB2b2lkIExJQlBST1RPQlVG
X0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8y
ZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJv
dG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfU2h1
dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0KLSAg
dm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIFNvdXJjZUNvZGVJbmZvX0xv
Y2F0aW9uKiBkZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJ
QlBST1RPQlVGX0VYUE9SVCBTb3VyY2VDb2RlSW5mbyA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgU291cmNlQ29kZUluZm8oKTsKLSAgdmlydHVhbCB+
U291cmNlQ29kZUluZm8oKTsKLQotICBTb3VyY2VDb2RlSW5mbyhjb25zdCBTb3VyY2VDb2RlSW5m
byYgZnJvbSk7Ci0KLSAgaW5saW5lIFNvdXJjZUNvZGVJbmZvJiBvcGVyYXRvcj0oY29uc3QgU291
cmNlQ29kZUluZm8mIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAgICByZXR1cm4gKnRo
aXM7Ci0gIH0KLQotICBpbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpVbmtub3duRmll
bGRTZXQmIHVua25vd25fZmllbGRzKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0
YWRhdGFfLnVua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBpbmxpbmUgOjpnb29nbGU6OnByb3Rv
YnVmOjpVbmtub3duRmllbGRTZXQqIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSB7Ci0gICAgcmV0
dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ubXV0YWJsZV91bmtub3duX2ZpZWxkcygpOwotICB9Ci0K
LSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVzY3JpcHRv
cigpOwotICBzdGF0aWMgY29uc3QgU291cmNlQ29kZUluZm8mIGRlZmF1bHRfaW5zdGFuY2UoKTsK
LQotICB2b2lkIFN3YXAoU291cmNlQ29kZUluZm8qIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRz
IE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIGlubGluZSBTb3VyY2VDb2RlSW5mbyogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwp
OyB9Ci0KLSAgU291cmNlQ29kZUluZm8qIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBh
cmVuYSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBTb3VyY2VDb2RlSW5mbyYg
ZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IFNvdXJjZUNvZGVJbmZvJiBmcm9tKTsKLSAg
dm9pZCBDbGVhcigpOwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0
ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZv
aWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7
IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3Rvcigp
OwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBj
b25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoU291cmNlQ29kZUluZm8qIG90aGVyKTsKLSAgcHJp
dmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0
dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0g
IH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQdHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9p
bnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0cigpOwotICB9Ci0gIHB1YmxpYzoKLQotICA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdldE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8g
bmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICB0eXBlZGVmIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIExvY2F0aW9uOwot
Ci0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VD
b2RlSW5mby5Mb2NhdGlvbiBsb2NhdGlvbiA9IDE7Ci0gIGludCBsb2NhdGlvbl9zaXplKCkgY29u
c3Q7Ci0gIHZvaWQgY2xlYXJfbG9jYXRpb24oKTsKLSAgc3RhdGljIGNvbnN0IGludCBrTG9jYXRp
b25GaWVsZE51bWJlciA9IDE7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29k
ZUluZm9fTG9jYXRpb24mIGxvY2F0aW9uKGludCBpbmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6U291cmNlQ29kZUluZm9fTG9jYXRpb24qIG11dGFibGVfbG9jYXRpb24oaW50IGlu
ZGV4KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiogYWRk
X2xvY2F0aW9uKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpn
b29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiA+KgotICAgICAgbXV0YWJs
ZV9sb2NhdGlvbigpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmll
bGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29kZUluZm9fTG9jYXRpb24gPiYKLSAgICAg
IGxvY2F0aW9uKCkgY29uc3Q7Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNz
X3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mbykKLSBwcml2YXRlOgotCi0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2lu
dGVybmFsX21ldGFkYXRhXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgX2hhc19iaXRz
X1sxXTsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvZGVJbmZvX0xv
Y2F0aW9uID4gbG9jYXRpb25fOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJv
dG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwot
ICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZGVz
Y3JpcHRvcl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9n
b29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFz
RGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBTb3VyY2VDb2RlSW5mbyogZGVmYXVsdF9pbnN0
YW5jZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgR2Vu
ZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2UgewotIHB1YmxpYzoKLSAgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbigpOwotICB2
aXJ0dWFsIH5HZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uKCk7Ci0KLSAgR2VuZXJhdGVkQ29k
ZUluZm9fQW5ub3RhdGlvbihjb25zdCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uJiBmcm9t
KTsKLQotICBpbmxpbmUgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiYgb3BlcmF0b3I9KGNv
bnN0IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24mIGZyb20pIHsKLSAgICBDb3B5RnJvbShm
cm9tKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBpbmxpbmUgY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpVbmtub3duRmllbGRTZXQmIHVua25vd25fZmllbGRzKCkgY29uc3QgewotICAg
IHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnVua25vd25fZmllbGRzKCk7Ci0gIH0KLQotICBp
bmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpVbmtub3duRmllbGRTZXQqIG11dGFibGVfdW5rbm93
bl9maWVsZHMoKSB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ubXV0YWJsZV91bmtu
b3duX2ZpZWxkcygpOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgR2VuZXJhdGVkQ29kZUlu
Zm9fQW5ub3RhdGlvbiYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChHZW5lcmF0
ZWRDb2RlSW5mb19Bbm5vdGF0aW9uKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxp
bmUgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3
KE5VTEwpOyB9Ci0KLSAgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiogTmV3KDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNv
bnN0IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24mIGZyb20pOwotICB2b2lkIE1lcmdlRnJv
bShjb25zdCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uJiBmcm9tKTsKLSAgdm9pZCBDbGVh
cigpOwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBj
b25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFs
aXplV2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRP
dXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgq
IFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50
OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBf
Y2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lk
IFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAg
dm9pZCBJbnRlcm5hbFN3YXAoR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiogb3RoZXIpOwot
ICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFO
b1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEo
KTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1
cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgot
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQot
ICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gcmVwZWF0ZWQgaW50MzIgcGF0
aCA9IDEgW3BhY2tlZCA9IHRydWVdOwotICBpbnQgcGF0aF9zaXplKCkgY29uc3Q7Ci0gIHZvaWQg
Y2xlYXJfcGF0aCgpOwotICBzdGF0aWMgY29uc3QgaW50IGtQYXRoRmllbGROdW1iZXIgPSAxOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHBhdGgoaW50IGluZGV4KSBjb25zdDsKLSAgdm9p
ZCBzZXRfcGF0aChpbnQgaW5kZXgsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpOwot
ICB2b2lkIGFkZF9wYXRoKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpOwotICBjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50MzIgPiYKLSAgICAgIHBhdGgoKSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBl
YXRlZEZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyID4qCi0gICAgICBtdXRhYmxlX3Bh
dGgoKTsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgc291cmNlX2ZpbGUgPSAyOwotICBib29sIGhh
c19zb3VyY2VfZmlsZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3NvdXJjZV9maWxlKCk7Ci0gIHN0
YXRpYyBjb25zdCBpbnQga1NvdXJjZUZpbGVGaWVsZE51bWJlciA9IDI7Ci0gIGNvbnN0IDo6c3Rk
OjpzdHJpbmcmIHNvdXJjZV9maWxlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3NvdXJjZV9maWxlKGNv
bnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBzZXRfc291cmNlX2ZpbGUoY29uc3Qg
Y2hhciogdmFsdWUpOwotICB2b2lkIHNldF9zb3VyY2VfZmlsZShjb25zdCBjaGFyKiB2YWx1ZSwg
c2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXRhYmxlX3NvdXJjZV9maWxlKCk7Ci0g
IDo6c3RkOjpzdHJpbmcqIHJlbGVhc2Vfc291cmNlX2ZpbGUoKTsKLSAgdm9pZCBzZXRfYWxsb2Nh
dGVkX3NvdXJjZV9maWxlKDo6c3RkOjpzdHJpbmcqIHNvdXJjZV9maWxlKTsKLQotICAvLyBvcHRp
b25hbCBpbnQzMiBiZWdpbiA9IDM7Ci0gIGJvb2wgaGFzX2JlZ2luKCkgY29uc3Q7Ci0gIHZvaWQg
Y2xlYXJfYmVnaW4oKTsKLSAgc3RhdGljIGNvbnN0IGludCBrQmVnaW5GaWVsZE51bWJlciA9IDM7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgYmVnaW4oKSBjb25zdDsKLSAgdm9pZCBzZXRf
YmVnaW4oOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwg
aW50MzIgZW5kID0gNDsKLSAgYm9vbCBoYXNfZW5kKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfZW5k
KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0VuZEZpZWxkTnVtYmVyID0gNDsKLSAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnQzMiBlbmQoKSBjb25zdDsKLSAgdm9pZCBzZXRfZW5kKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50MzIgdmFsdWUpOwotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChj
bGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbikK
LSBwcml2YXRlOgotICBpbmxpbmUgdm9pZCBzZXRfaGFzX3NvdXJjZV9maWxlKCk7Ci0gIGlubGlu
ZSB2b2lkIGNsZWFyX2hhc19zb3VyY2VfZmlsZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX2Jl
Z2luKCk7Ci0gIGlubGluZSB2b2lkIGNsZWFyX2hhc19iZWdpbigpOwotICBpbmxpbmUgdm9pZCBz
ZXRfaGFzX2VuZCgpOwotICBpbmxpbmUgdm9pZCBjbGVhcl9oYXNfZW5kKCk7Ci0KLSAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJu
YWxfbWV0YWRhdGFfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiBfaGFzX2JpdHNfWzFd
OwotICBtdXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJl
cGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPiBwYXRoXzsKLSAgbXV0YWJs
ZSBpbnQgX3BhdGhfY2FjaGVkX2J5dGVfc2l6ZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIHNvdXJjZV9maWxlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnQzMiBiZWdpbl87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgZW5kXzsKLSAgZnJp
ZW5kIHZvaWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJv
dG9idWZfMmZkZXNjcmlwdG9yXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNz
aWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygpOwotICBmcmll
bmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZkZXNjcmlw
dG9yXzJlcHJvdG8oKTsKLQotICB2b2lkIEluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBzdGF0
aWMgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiogZGVmYXVsdF9pbnN0YW5jZV87Ci19Owot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgR2VuZXJhdGVkQ29kZUlu
Zm8gOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIEdl
bmVyYXRlZENvZGVJbmZvKCk7Ci0gIHZpcnR1YWwgfkdlbmVyYXRlZENvZGVJbmZvKCk7Ci0KLSAg
R2VuZXJhdGVkQ29kZUluZm8oY29uc3QgR2VuZXJhdGVkQ29kZUluZm8mIGZyb20pOwotCi0gIGlu
bGluZSBHZW5lcmF0ZWRDb2RlSW5mbyYgb3BlcmF0b3I9KGNvbnN0IEdlbmVyYXRlZENvZGVJbmZv
JiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0K
LSAgaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0JiB1bmtu
b3duX2ZpZWxkcygpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy51bmtu
b3duX2ZpZWxkcygpOwotICB9Ci0KLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93
bkZpZWxkU2V0KiBtdXRhYmxlX3Vua25vd25fZmllbGRzKCkgewotICAgIHJldHVybiBfaW50ZXJu
YWxfbWV0YWRhdGFfLm11dGFibGVfdW5rbm93bl9maWVsZHMoKTsKLSAgfQotCi0gIHN0YXRpYyBj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3Rh
dGljIGNvbnN0IEdlbmVyYXRlZENvZGVJbmZvJiBkZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9p
ZCBTd2FwKEdlbmVyYXRlZENvZGVJbmZvKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNz
YWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBp
bmxpbmUgR2VuZXJhdGVkQ29kZUluZm8qIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsg
fQotCi0gIEdlbmVyYXRlZENvZGVJbmZvKiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSog
YXJlbmEpIGNvbnN0OwotICB2b2lkIENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgR2VuZXJhdGVkQ29kZUlu
Zm8mIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBHZW5lcmF0ZWRDb2RlSW5mbyYgZnJv
bSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAg
aW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFt
KAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQp
OwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6
cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJl
ZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQg
c2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJuYWxTd2FwKEdlbmVyYXRlZENvZGVJbmZvKiBvdGhl
cik7Ci0gIHByaXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZXRB
cmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5h
cmVuYSgpOwotICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkgY29uc3QgewotICAg
IHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsKLSAgfQotICBwdWJs
aWM6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRhZGF0YSgpIGNvbnN0
OwotCi0gIC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgdHlwZWRlZiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0
aW9uIEFubm90YXRpb247Ci0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xl
LnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24gYW5ub3RhdGlvbiA9IDE7Ci0g
IGludCBhbm5vdGF0aW9uX3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9hbm5vdGF0aW9uKCk7
Ci0gIHN0YXRpYyBjb25zdCBpbnQga0Fubm90YXRpb25GaWVsZE51bWJlciA9IDE7Ci0gIGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6R2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiYgYW5ub3Rh
dGlvbihpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkdlbmVyYXRlZENv
ZGVJbmZvX0Fubm90YXRpb24qIG11dGFibGVfYW5ub3RhdGlvbihpbnQgaW5kZXgpOwotICA6Omdv
b2dsZTo6cHJvdG9idWY6OkdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24qIGFkZF9hbm5vdGF0
aW9uKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6
OnByb3RvYnVmOjpHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uID4qCi0gICAgICBtdXRhYmxl
X2Fubm90YXRpb24oKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZp
ZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24gPiYK
LSAgICAgIGFubm90YXRpb24oKSBjb25zdDsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvKQotIHByaXZh
dGU6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdp
dGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQz
MiBfaGFzX2JpdHNfWzFdOwotICBtdXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwotICA6Omdvb2ds
ZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6R2VuZXJh
dGVkQ29kZUluZm9fQW5ub3RhdGlvbiA+IGFubm90YXRpb25fOwotICBmcmllbmQgdm9pZCBMSUJQ
Uk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2Ny
aXB0b3JfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2ds
ZV8yZnByb3RvYnVmXzJmZGVzY3JpcHRvcl8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3Rv
YnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2NyaXB0b3JfMmVwcm90bygp
OwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBHZW5lcmF0ZWRD
b2RlSW5mbyogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLS8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLQotI2lmICFQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIEZpbGVE
ZXNjcmlwdG9yU2V0Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0
b3JQcm90byBmaWxlID0gMTsKLWlubGluZSBpbnQgRmlsZURlc2NyaXB0b3JTZXQ6OmZpbGVfc2l6
ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGZpbGVfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIEZpbGVE
ZXNjcmlwdG9yU2V0OjpjbGVhcl9maWxlKCkgewotICBmaWxlXy5DbGVhcigpOwotfQotaW5saW5l
IGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3JQcm90byYgRmlsZURlc2Ny
aXB0b3JTZXQ6OmZpbGUoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmZpbGUp
Ci0gIHJldHVybiBmaWxlXy5HZXQoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RmlsZURlc2NyaXB0b3JQcm90byogRmlsZURlc2NyaXB0b3JTZXQ6Om11dGFibGVfZmlsZShp
bnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6
Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yU2V0LmZpbGUpCi0gIHJldHVybiBmaWxlXy5N
dXRhYmxlKGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNjcmlw
dG9yUHJvdG8qIEZpbGVEZXNjcmlwdG9yU2V0OjphZGRfZmlsZSgpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JT
ZXQuZmlsZSkKLSAgcmV0dXJuIGZpbGVfLkFkZCgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlRGVzY3JpcHRv
clByb3RvID4qCi1GaWxlRGVzY3JpcHRvclNldDo6bXV0YWJsZV9maWxlKCkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5G
aWxlRGVzY3JpcHRvclNldC5maWxlKQotICByZXR1cm4gJmZpbGVfOwotfQotaW5saW5lIGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVm
OjpGaWxlRGVzY3JpcHRvclByb3RvID4mCi1GaWxlRGVzY3JpcHRvclNldDo6ZmlsZSgpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3Rv
YnVmLkZpbGVEZXNjcmlwdG9yU2V0LmZpbGUpCi0gIHJldHVybiBmaWxlXzsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0vLyBGaWxlRGVzY3JpcHRvclByb3RvCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBu
YW1lID0gMTsKLWlubGluZSBib29sIEZpbGVEZXNjcmlwdG9yUHJvdG86Omhhc19uYW1lKCkgY29u
c3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLWlu
bGluZSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfbmFtZSgpIHsKLSAgX2hhc19i
aXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJv
dG86OmNsZWFyX2hhc19uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAxdTsK
LX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX25hbWUoKSB7Ci0gIG5h
bWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX25hbWUoKTsKLX0KLWlu
bGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBGaWxlRGVzY3JpcHRvclByb3RvOjpuYW1lKCkgY29u
c3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90
b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIHJldHVybiBuYW1lXy5HZXROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25z
dCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5uYW1lKQotfQotaW5saW5l
IHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpIHsK
LSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5n
KHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpn
b29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5uYW1lKQotfQotaW5saW5lIHZvaWQg
RmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBz
aXplKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAg
IDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXpl
KSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29n
bGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5uYW1lKQotfQotaW5saW5lIDo6c3RkOjpz
dHJpbmcqIEZpbGVEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfbmFtZSgpIHsKLSAgc2V0X2hhc19u
YW1lKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2ds
ZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIHJldHVybiBuYW1lXy5NdXRh
YmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpbGVEZXNjcmlwdG9y
UHJvdG86OnJlbGVhc2VfbmFtZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAg
Y2xlYXJfaGFzX25hbWUoKTsKLSAgcmV0dXJuIG5hbWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19
Ci1pbmxpbmUgdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpz
dGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19u
YW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX25hbWUoKTsKLSAgfQotICBuYW1lXy5T
ZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclBy
b3RvLm5hbWUpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBwYWNrYWdlID0gMjsKLWlubGluZSBi
b29sIEZpbGVEZXNjcmlwdG9yUHJvdG86Omhhc19wYWNrYWdlKCkgY29uc3QgewotICByZXR1cm4g
KF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAydSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZpbGVE
ZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfcGFja2FnZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAw
eDAwMDAwMDAydTsKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hh
c19wYWNrYWdlKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAydTsKLX0KLWlubGlu
ZSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX3BhY2thZ2UoKSB7Ci0gIHBhY2thZ2Vf
LkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX3BhY2thZ2UoKTsKLX0KLWlu
bGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBGaWxlRGVzY3JpcHRvclByb3RvOjpwYWNrYWdlKCkg
Y29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5w
cm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnBhY2thZ2UpCi0gIHJldHVybiBwYWNrYWdlXy5H
ZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRf
cGFja2FnZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX3BhY2thZ2Uo
KTsKLSAgcGFja2FnZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90
by5wYWNrYWdlKQotfQotaW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X3BhY2th
Z2UoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgc2V0X2hhc19wYWNrYWdlKCk7Ci0gIHBhY2thZ2Vf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0
b3JQcm90by5wYWNrYWdlKQotfQotaW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0
X3BhY2thZ2UoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfcGFj
a2FnZSgpOwotICBwYWNrYWdlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRmls
ZURlc2NyaXB0b3JQcm90by5wYWNrYWdlKQotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpbGVE
ZXNjcmlwdG9yUHJvdG86Om11dGFibGVfcGFja2FnZSgpIHsKLSAgc2V0X2hhc19wYWNrYWdlKCk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90
b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnBhY2thZ2UpCi0gIHJldHVybiBwYWNrYWdlXy5NdXRh
YmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpbGVEZXNjcmlwdG9y
UHJvdG86OnJlbGVhc2VfcGFja2FnZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ucGFja2Fn
ZSkKLSAgY2xlYXJfaGFzX3BhY2thZ2UoKTsKLSAgcmV0dXJuIHBhY2thZ2VfLlJlbGVhc2VOb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2Nh
dGVkX3BhY2thZ2UoOjpzdGQ6OnN0cmluZyogcGFja2FnZSkgewotICBpZiAocGFja2FnZSAhPSBO
VUxMKSB7Ci0gICAgc2V0X2hhc19wYWNrYWdlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFz
X3BhY2thZ2UoKTsKLSAgfQotICBwYWNrYWdlXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgcGFj
a2FnZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVk
Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnBhY2thZ2UpCi19Ci0KLS8vIHJl
cGVhdGVkIHN0cmluZyBkZXBlbmRlbmN5ID0gMzsKLWlubGluZSBpbnQgRmlsZURlc2NyaXB0b3JQ
cm90bzo6ZGVwZW5kZW5jeV9zaXplKCkgY29uc3QgewotICByZXR1cm4gZGVwZW5kZW5jeV8uc2l6
ZSgpOwotfQotaW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfZGVwZW5kZW5j
eSgpIHsKLSAgZGVwZW5kZW5jeV8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6OnN0ZDo6c3Ry
aW5nJiBGaWxlRGVzY3JpcHRvclByb3RvOjpkZXBlbmRlbmN5KGludCBpbmRleCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5G
aWxlRGVzY3JpcHRvclByb3RvLmRlcGVuZGVuY3kpCi0gIHJldHVybiBkZXBlbmRlbmN5Xy5HZXQo
aW5kZXgpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpbGVEZXNjcmlwdG9yUHJvdG86Om11
dGFibGVfZGVwZW5kZW5jeShpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVw
ZW5kZW5jeSkKLSAgcmV0dXJuIGRlcGVuZGVuY3lfLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5l
IHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X2RlcGVuZGVuY3koaW50IGluZGV4LCBjb25z
dCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlcGVuZGVuY3kp
Ci0gIGRlcGVuZGVuY3lfLk11dGFibGUoaW5kZXgpLT5hc3NpZ24odmFsdWUpOwotfQotaW5saW5l
IHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X2RlcGVuZGVuY3koaW50IGluZGV4LCBjb25z
dCBjaGFyKiB2YWx1ZSkgewotICBkZXBlbmRlbmN5Xy5NdXRhYmxlKGluZGV4KS0+YXNzaWduKHZh
bHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2ds
ZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmRlcGVuZGVuY3kpCi19Ci1pbmxpbmUgdm9p
ZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfZGVwZW5kZW5jeShpbnQgaW5kZXgsIGNvbnN0IGNo
YXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBkZXBlbmRlbmN5Xy5NdXRhYmxlKGluZGV4KS0+
YXNzaWduKAotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUu
cHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kZXBlbmRlbmN5KQotfQotaW5saW5lIDo6c3Rk
OjpzdHJpbmcqIEZpbGVEZXNjcmlwdG9yUHJvdG86OmFkZF9kZXBlbmRlbmN5KCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX211dGFibGU6Z29vZ2xlLnByb3RvYnVm
LkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVwZW5kZW5jeSkKLSAgcmV0dXJuIGRlcGVuZGVuY3lfLkFk
ZCgpOwotfQotaW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6YWRkX2RlcGVuZGVuY3ko
Y29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgZGVwZW5kZW5jeV8uQWRkKCktPmFzc2ln
bih2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xl
LnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uZGVwZW5kZW5jeSkKLX0KLWlubGluZSB2b2lk
IEZpbGVEZXNjcmlwdG9yUHJvdG86OmFkZF9kZXBlbmRlbmN5KGNvbnN0IGNoYXIqIHZhbHVlKSB7
Ci0gIGRlcGVuZGVuY3lfLkFkZCgpLT5hc3NpZ24odmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfYWRkX2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
UHJvdG8uZGVwZW5kZW5jeSkKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmFk
ZF9kZXBlbmRlbmN5KGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBkZXBlbmRl
bmN5Xy5BZGQoKS0+YXNzaWduKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwg
c2l6ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGRfcG9pbnRlcjpn
b29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5kZXBlbmRlbmN5KQotfQotaW5saW5l
IGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmlu
Zz4mCi1GaWxlRGVzY3JpcHRvclByb3RvOjpkZXBlbmRlbmN5KCkgY29uc3QgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuRmlsZURlc2Ny
aXB0b3JQcm90by5kZXBlbmRlbmN5KQotICByZXR1cm4gZGVwZW5kZW5jeV87Ci19Ci1pbmxpbmUg
Ojpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPioKLUZp
bGVEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfZGVwZW5kZW5jeSgpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuRmlsZURl
c2NyaXB0b3JQcm90by5kZXBlbmRlbmN5KQotICByZXR1cm4gJmRlcGVuZGVuY3lfOwotfQotCi0v
LyByZXBlYXRlZCBpbnQzMiBwdWJsaWNfZGVwZW5kZW5jeSA9IDEwOwotaW5saW5lIGludCBGaWxl
RGVzY3JpcHRvclByb3RvOjpwdWJsaWNfZGVwZW5kZW5jeV9zaXplKCkgY29uc3QgewotICByZXR1
cm4gcHVibGljX2RlcGVuZGVuY3lfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlw
dG9yUHJvdG86OmNsZWFyX3B1YmxpY19kZXBlbmRlbmN5KCkgewotICBwdWJsaWNfZGVwZW5kZW5j
eV8uQ2xlYXIoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIEZpbGVEZXNj
cmlwdG9yUHJvdG86OnB1YmxpY19kZXBlbmRlbmN5KGludCBpbmRleCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVz
Y3JpcHRvclByb3RvLnB1YmxpY19kZXBlbmRlbmN5KQotICByZXR1cm4gcHVibGljX2RlcGVuZGVu
Y3lfLkdldChpbmRleCk7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRf
cHVibGljX2RlcGVuZGVuY3koaW50IGluZGV4LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZh
bHVlKSB7Ci0gIHB1YmxpY19kZXBlbmRlbmN5Xy5TZXQoaW5kZXgsIHZhbHVlKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmlsZURlc2Ny
aXB0b3JQcm90by5wdWJsaWNfZGVwZW5kZW5jeSkKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlw
dG9yUHJvdG86OmFkZF9wdWJsaWNfZGVwZW5kZW5jeSg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMy
IHZhbHVlKSB7Ci0gIHB1YmxpY19kZXBlbmRlbmN5Xy5BZGQodmFsdWUpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRv
clByb3RvLnB1YmxpY19kZXBlbmRlbmN5KQotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6UmVwZWF0ZWRGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiA+JgotRmlsZURl
c2NyaXB0b3JQcm90bzo6cHVibGljX2RlcGVuZGVuY3koKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRv
clByb3RvLnB1YmxpY19kZXBlbmRlbmN5KQotICByZXR1cm4gcHVibGljX2RlcGVuZGVuY3lfOwot
fQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRGaWVsZDwgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnQzMiA+KgotRmlsZURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9wdWJsaWNfZGVw
ZW5kZW5jeSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVf
bGlzdDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5wdWJsaWNfZGVwZW5kZW5j
eSkKLSAgcmV0dXJuICZwdWJsaWNfZGVwZW5kZW5jeV87Ci19Ci0KLS8vIHJlcGVhdGVkIGludDMy
IHdlYWtfZGVwZW5kZW5jeSA9IDExOwotaW5saW5lIGludCBGaWxlRGVzY3JpcHRvclByb3RvOjp3
ZWFrX2RlcGVuZGVuY3lfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHdlYWtfZGVwZW5kZW5jeV8u
c2l6ZSgpOwotfQotaW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfd2Vha19k
ZXBlbmRlbmN5KCkgewotICB3ZWFrX2RlcGVuZGVuY3lfLkNsZWFyKCk7Ci19Ci1pbmxpbmUgOjpn
b29nbGU6OnByb3RvYnVmOjppbnQzMiBGaWxlRGVzY3JpcHRvclByb3RvOjp3ZWFrX2RlcGVuZGVu
Y3koaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ud2Vha19kZXBlbmRlbmN5
KQotICByZXR1cm4gd2Vha19kZXBlbmRlbmN5Xy5HZXQoaW5kZXgpOwotfQotaW5saW5lIHZvaWQg
RmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X3dlYWtfZGVwZW5kZW5jeShpbnQgaW5kZXgsIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpIHsKLSAgd2Vha19kZXBlbmRlbmN5Xy5TZXQoaW5k
ZXgsIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29n
bGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by53ZWFrX2RlcGVuZGVuY3kpCi19Ci1pbmxp
bmUgdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjphZGRfd2Vha19kZXBlbmRlbmN5KDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50MzIgdmFsdWUpIHsKLSAgd2Vha19kZXBlbmRlbmN5Xy5BZGQodmFsdWUp
OwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1
Zi5GaWxlRGVzY3JpcHRvclByb3RvLndlYWtfZGVwZW5kZW5jeSkKLX0KLWlubGluZSBjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
MzIgPiYKLUZpbGVEZXNjcmlwdG9yUHJvdG86OndlYWtfZGVwZW5kZW5jeSgpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkZp
bGVEZXNjcmlwdG9yUHJvdG8ud2Vha19kZXBlbmRlbmN5KQotICByZXR1cm4gd2Vha19kZXBlbmRl
bmN5XzsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50MzIgPioKLUZpbGVEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfd2Vh
a19kZXBlbmRlbmN5KCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLndlYWtfZGVwZW5k
ZW5jeSkKLSAgcmV0dXJuICZ3ZWFrX2RlcGVuZGVuY3lfOwotfQotCi0vLyByZXBlYXRlZCAuZ29v
Z2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90byBtZXNzYWdlX3R5cGUgPSA0OwotaW5saW5lIGlu
dCBGaWxlRGVzY3JpcHRvclByb3RvOjptZXNzYWdlX3R5cGVfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0
dXJuIG1lc3NhZ2VfdHlwZV8uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQ
cm90bzo6Y2xlYXJfbWVzc2FnZV90eXBlKCkgewotICBtZXNzYWdlX3R5cGVfLkNsZWFyKCk7Ci19
Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG8mIEZpbGVE
ZXNjcmlwdG9yUHJvdG86Om1lc3NhZ2VfdHlwZShpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmlsZURlc2Ny
aXB0b3JQcm90by5tZXNzYWdlX3R5cGUpCi0gIHJldHVybiBtZXNzYWdlX3R5cGVfLkdldChpbmRl
eCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG8qIEZpbGVE
ZXNjcmlwdG9yUHJvdG86Om11dGFibGVfbWVzc2FnZV90eXBlKGludCBpbmRleCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmls
ZURlc2NyaXB0b3JQcm90by5tZXNzYWdlX3R5cGUpCi0gIHJldHVybiBtZXNzYWdlX3R5cGVfLk11
dGFibGUoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclBy
b3RvKiBGaWxlRGVzY3JpcHRvclByb3RvOjphZGRfbWVzc2FnZV90eXBlKCkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3Jp
cHRvclByb3RvLm1lc3NhZ2VfdHlwZSkKLSAgcmV0dXJuIG1lc3NhZ2VfdHlwZV8uQWRkKCk7Ci19
Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6
cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90byA+KgotRmlsZURlc2NyaXB0b3JQcm90bzo6bXV0YWJs
ZV9tZXNzYWdlX3R5cGUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9t
dXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8ubWVzc2FnZV90
eXBlKQotICByZXR1cm4gJm1lc3NhZ2VfdHlwZV87Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0
b3JQcm90byA+JgotRmlsZURlc2NyaXB0b3JQcm90bzo6bWVzc2FnZV90eXBlKCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYu
RmlsZURlc2NyaXB0b3JQcm90by5tZXNzYWdlX3R5cGUpCi0gIHJldHVybiBtZXNzYWdlX3R5cGVf
OwotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8g
ZW51bV90eXBlID0gNTsKLWlubGluZSBpbnQgRmlsZURlc2NyaXB0b3JQcm90bzo6ZW51bV90eXBl
X3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBlbnVtX3R5cGVfLnNpemUoKTsKLX0KLWlubGluZSB2
b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX2VudW1fdHlwZSgpIHsKLSAgZW51bV90eXBl
Xy5DbGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2Ny
aXB0b3JQcm90byYgRmlsZURlc2NyaXB0b3JQcm90bzo6ZW51bV90eXBlKGludCBpbmRleCkgY29u
c3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90
b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmVudW1fdHlwZSkKLSAgcmV0dXJuIGVudW1fdHlwZV8u
R2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9y
UHJvdG8qIEZpbGVEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfZW51bV90eXBlKGludCBpbmRleCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJv
dG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5lbnVtX3R5cGUpCi0gIHJldHVybiBlbnVtX3R5cGVf
Lk11dGFibGUoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2Ny
aXB0b3JQcm90byogRmlsZURlc2NyaXB0b3JQcm90bzo6YWRkX2VudW1fdHlwZSgpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRmlsZURl
c2NyaXB0b3JQcm90by5lbnVtX3R5cGUpCi0gIHJldHVybiBlbnVtX3R5cGVfLkFkZCgpOwotfQot
aW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnBy
b3RvYnVmOjpFbnVtRGVzY3JpcHRvclByb3RvID4qCi1GaWxlRGVzY3JpcHRvclByb3RvOjptdXRh
YmxlX2VudW1fdHlwZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211
dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5lbnVtX3R5cGUp
Ci0gIHJldHVybiAmZW51bV90eXBlXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3JQ
cm90byA+JgotRmlsZURlc2NyaXB0b3JQcm90bzo6ZW51bV90eXBlKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuRmlsZURl
c2NyaXB0b3JQcm90by5lbnVtX3R5cGUpCi0gIHJldHVybiBlbnVtX3R5cGVfOwotfQotCi0vLyBy
ZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8gc2VydmljZSA9
IDY7Ci1pbmxpbmUgaW50IEZpbGVEZXNjcmlwdG9yUHJvdG86OnNlcnZpY2Vfc2l6ZSgpIGNvbnN0
IHsKLSAgcmV0dXJuIHNlcnZpY2VfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlw
dG9yUHJvdG86OmNsZWFyX3NlcnZpY2UoKSB7Ci0gIHNlcnZpY2VfLkNsZWFyKCk7Ci19Ci1pbmxp
bmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlRGVzY3JpcHRvclByb3RvJiBGaWxl
RGVzY3JpcHRvclByb3RvOjpzZXJ2aWNlKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRv
clByb3RvLnNlcnZpY2UpCi0gIHJldHVybiBzZXJ2aWNlXy5HZXQoaW5kZXgpOwotfQotaW5saW5l
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U2VydmljZURlc2NyaXB0b3JQcm90byogRmlsZURlc2NyaXB0
b3JQcm90bzo6bXV0YWJsZV9zZXJ2aWNlKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQ
cm90by5zZXJ2aWNlKQotICByZXR1cm4gc2VydmljZV8uTXV0YWJsZShpbmRleCk7Ci19Ci1pbmxp
bmUgOjpnb29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlRGVzY3JpcHRvclByb3RvKiBGaWxlRGVzY3Jp
cHRvclByb3RvOjphZGRfc2VydmljZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zZXJ2aWNlKQot
ICByZXR1cm4gc2VydmljZV8uQWRkKCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpS
ZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlNlcnZpY2VEZXNjcmlwdG9yUHJv
dG8gPioKLUZpbGVEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfc2VydmljZSgpIHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYu
RmlsZURlc2NyaXB0b3JQcm90by5zZXJ2aWNlKQotICByZXR1cm4gJnNlcnZpY2VfOwotfQotaW5s
aW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6
OnByb3RvYnVmOjpTZXJ2aWNlRGVzY3JpcHRvclByb3RvID4mCi1GaWxlRGVzY3JpcHRvclByb3Rv
OjpzZXJ2aWNlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
bGlzdDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zZXJ2aWNlKQotICByZXR1
cm4gc2VydmljZV87Ci19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNj
cmlwdG9yUHJvdG8gZXh0ZW5zaW9uID0gNzsKLWlubGluZSBpbnQgRmlsZURlc2NyaXB0b3JQcm90
bzo6ZXh0ZW5zaW9uX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBleHRlbnNpb25fLnNpemUoKTsK
LX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX2V4dGVuc2lvbigpIHsK
LSAgZXh0ZW5zaW9uXy5DbGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8mIEZpbGVEZXNjcmlwdG9yUHJvdG86OmV4dGVuc2lvbihp
bnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dl
dDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5leHRlbnNpb24pCi0gIHJldHVy
biBleHRlbnNpb25fLkdldChpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpG
aWVsZERlc2NyaXB0b3JQcm90byogRmlsZURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9leHRlbnNp
b24oaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRh
YmxlOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbikKLSAgcmV0
dXJuIGV4dGVuc2lvbl8uTXV0YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZERlc2NyaXB0b3JQcm90byogRmlsZURlc2NyaXB0b3JQcm90bzo6YWRkX2V4dGVu
c2lvbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUu
cHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5leHRlbnNpb24pCi0gIHJldHVybiBleHRlbnNp
b25fLkFkZCgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVs
ZDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90byA+KgotRmlsZURlc2Ny
aXB0b3JQcm90bzo6bXV0YWJsZV9leHRlbnNpb24oKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
UHJvdG8uZXh0ZW5zaW9uKQotICByZXR1cm4gJmV4dGVuc2lvbl87Ci19Ci1pbmxpbmUgY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkRGVzY3JpcHRvclByb3RvID4mCi1GaWxlRGVzY3JpcHRvclByb3RvOjpleHRlbnNpb24o
KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2ds
ZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbikKLSAgcmV0dXJuIGV4dGVu
c2lvbl87Ci19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMgb3B0
aW9ucyA9IDg7Ci1pbmxpbmUgYm9vbCBGaWxlRGVzY3JpcHRvclByb3RvOjpoYXNfb3B0aW9ucygp
IGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDIwMHUpICE9IDA7Ci19
Ci1pbmxpbmUgdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfaGFzX29wdGlvbnMoKSB7Ci0g
IF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDIwMHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlRGVzY3Jp
cHRvclByb3RvOjpjbGVhcl9oYXNfb3B0aW9ucygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgw
MDAwMDIwMHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9vcHRp
b25zKCkgewotICBpZiAob3B0aW9uc18gIT0gTlVMTCkgb3B0aW9uc18tPjo6Z29vZ2xlOjpwcm90
b2J1Zjo6RmlsZU9wdGlvbnM6OkNsZWFyKCk7Ci0gIGNsZWFyX2hhc19vcHRpb25zKCk7Ci19Ci1p
bmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0aW9ucyYgRmlsZURlc2NyaXB0
b3JQcm90bzo6b3B0aW9ucygpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5vcHRpb25zKQot
ICByZXR1cm4gb3B0aW9uc18gIT0gTlVMTCA/ICpvcHRpb25zXyA6ICpkZWZhdWx0X2luc3RhbmNl
Xy0+b3B0aW9uc187Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0aW9ucyog
RmlsZURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9vcHRpb25zKCkgewotICBzZXRfaGFzX29wdGlv
bnMoKTsKLSAgaWYgKG9wdGlvbnNfID09IE5VTEwpIHsKLSAgICBvcHRpb25zXyA9IG5ldyA6Omdv
b2dsZTo6cHJvdG9idWY6OkZpbGVPcHRpb25zOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3Rv
Lm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXzsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9i
dWY6OkZpbGVPcHRpb25zKiBGaWxlRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX29wdGlvbnMoKSB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90
b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi0gIGNsZWFyX2hhc19vcHRpb25zKCk7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9wdGlvbnMqIHRlbXAgPSBvcHRpb25zXzsKLSAg
b3B0aW9uc18gPSBOVUxMOwotICByZXR1cm4gdGVtcDsKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNj
cmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfb3B0aW9ucyg6Omdvb2dsZTo6cHJvdG9idWY6OkZp
bGVPcHRpb25zKiBvcHRpb25zKSB7Ci0gIGRlbGV0ZSBvcHRpb25zXzsKLSAgb3B0aW9uc18gPSBv
cHRpb25zOwotICBpZiAob3B0aW9ucykgewotICAgIHNldF9oYXNfb3B0aW9ucygpOwotICB9IGVs
c2UgewotICAgIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlw
dG9yUHJvdG8ub3B0aW9ucykKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5Tb3Vy
Y2VDb2RlSW5mbyBzb3VyY2VfY29kZV9pbmZvID0gOTsKLWlubGluZSBib29sIEZpbGVEZXNjcmlw
dG9yUHJvdG86Omhhc19zb3VyY2VfY29kZV9pbmZvKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNf
Yml0c19bMF0gJiAweDAwMDAwNDAwdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlw
dG9yUHJvdG86OnNldF9oYXNfc291cmNlX2NvZGVfaW5mbygpIHsKLSAgX2hhc19iaXRzX1swXSB8
PSAweDAwMDAwNDAwdTsKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFy
X2hhc19zb3VyY2VfY29kZV9pbmZvKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwNDAw
dTsKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX3NvdXJjZV9jb2Rl
X2luZm8oKSB7Ci0gIGlmIChzb3VyY2VfY29kZV9pbmZvXyAhPSBOVUxMKSBzb3VyY2VfY29kZV9p
bmZvXy0+Ojpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mbzo6Q2xlYXIoKTsKLSAgY2xl
YXJfaGFzX3NvdXJjZV9jb2RlX2luZm8oKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OlNvdXJjZUNvZGVJbmZvJiBGaWxlRGVzY3JpcHRvclByb3RvOjpzb3VyY2VfY29kZV9p
bmZvKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnNvdXJjZV9jb2RlX2luZm8pCi0gIHJl
dHVybiBzb3VyY2VfY29kZV9pbmZvXyAhPSBOVUxMID8gKnNvdXJjZV9jb2RlX2luZm9fIDogKmRl
ZmF1bHRfaW5zdGFuY2VfLT5zb3VyY2VfY29kZV9pbmZvXzsKLX0KLWlubGluZSA6Omdvb2dsZTo6
cHJvdG9idWY6OlNvdXJjZUNvZGVJbmZvKiBGaWxlRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX3Nv
dXJjZV9jb2RlX2luZm8oKSB7Ci0gIHNldF9oYXNfc291cmNlX2NvZGVfaW5mbygpOwotICBpZiAo
c291cmNlX2NvZGVfaW5mb18gPT0gTlVMTCkgewotICAgIHNvdXJjZV9jb2RlX2luZm9fID0gbmV3
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29kZUluZm87Ci0gIH0KLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlw
dG9yUHJvdG8uc291cmNlX2NvZGVfaW5mbykKLSAgcmV0dXJuIHNvdXJjZV9jb2RlX2luZm9fOwot
fQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29kZUluZm8qIEZpbGVEZXNjcmlw
dG9yUHJvdG86OnJlbGVhc2Vfc291cmNlX2NvZGVfaW5mbygpIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9y
UHJvdG8uc291cmNlX2NvZGVfaW5mbykKLSAgY2xlYXJfaGFzX3NvdXJjZV9jb2RlX2luZm8oKTsK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mbyogdGVtcCA9IHNvdXJjZV9jb2Rl
X2luZm9fOwotICBzb3VyY2VfY29kZV9pbmZvXyA9IE5VTEw7Ci0gIHJldHVybiB0ZW1wOwotfQot
aW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X2FsbG9jYXRlZF9zb3VyY2VfY29k
ZV9pbmZvKDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29kZUluZm8qIHNvdXJjZV9jb2RlX2lu
Zm8pIHsKLSAgZGVsZXRlIHNvdXJjZV9jb2RlX2luZm9fOwotICBzb3VyY2VfY29kZV9pbmZvXyA9
IHNvdXJjZV9jb2RlX2luZm87Ci0gIGlmIChzb3VyY2VfY29kZV9pbmZvKSB7Ci0gICAgc2V0X2hh
c19zb3VyY2VfY29kZV9pbmZvKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX3NvdXJjZV9j
b2RlX2luZm8oKTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zb3VyY2VfY29k
ZV9pbmZvKQotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgc3ludGF4ID0gMTI7Ci1pbmxpbmUgYm9v
bCBGaWxlRGVzY3JpcHRvclByb3RvOjpoYXNfc3ludGF4KCkgY29uc3QgewotICByZXR1cm4gKF9o
YXNfYml0c19bMF0gJiAweDAwMDAwODAwdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZpbGVEZXNj
cmlwdG9yUHJvdG86OnNldF9oYXNfc3ludGF4KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAw
MDA4MDB1OwotfQotaW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX3N5
bnRheCgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDgwMHU7Ci19Ci1pbmxpbmUgdm9p
ZCBGaWxlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9zeW50YXgoKSB7Ci0gIHN5bnRheF8uQ2xlYXJU
b0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfc3ludGF4KCk7Ci19Ci1pbmxpbmUgY29u
c3QgOjpzdGQ6OnN0cmluZyYgRmlsZURlc2NyaXB0b3JQcm90bzo6c3ludGF4KCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5G
aWxlRGVzY3JpcHRvclByb3RvLnN5bnRheCkKLSAgcmV0dXJuIHN5bnRheF8uR2V0Tm9BcmVuYSgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCkpOwotfQotaW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X3N5bnRheChjb25z
dCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX3N5bnRheCgpOwotICBzeW50YXhf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8uc3ludGF4KQotfQot
aW5saW5lIHZvaWQgRmlsZURlc2NyaXB0b3JQcm90bzo6c2V0X3N5bnRheChjb25zdCBjaGFyKiB2
YWx1ZSkgewotICBzZXRfaGFzX3N5bnRheCgpOwotICBzeW50YXhfLlNldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6
OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5zeW50YXgpCi19
Ci1pbmxpbmUgdm9pZCBGaWxlRGVzY3JpcHRvclByb3RvOjpzZXRfc3ludGF4KGNvbnN0IGNoYXIq
IHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBzZXRfaGFzX3N5bnRheCgpOwotICBzeW50YXhfLlNl
dE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWxlRGVzY3JpcHRvclByb3RvLnN5bnRh
eCkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBGaWxlRGVzY3JpcHRvclByb3RvOjptdXRhYmxl
X3N5bnRheCgpIHsKLSAgc2V0X2hhc19zeW50YXgoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8u
c3ludGF4KQotICByZXR1cm4gc3ludGF4Xy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5l
IDo6c3RkOjpzdHJpbmcqIEZpbGVEZXNjcmlwdG9yUHJvdG86OnJlbGVhc2Vfc3ludGF4KCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9i
dWYuRmlsZURlc2NyaXB0b3JQcm90by5zeW50YXgpCi0gIGNsZWFyX2hhc19zeW50YXgoKTsKLSAg
cmV0dXJuIHN5bnRheF8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIEZpbGVE
ZXNjcmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfc3ludGF4KDo6c3RkOjpzdHJpbmcqIHN5bnRh
eCkgewotICBpZiAoc3ludGF4ICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX3N5bnRheCgpOwotICB9
IGVsc2UgewotICAgIGNsZWFyX2hhc19zeW50YXgoKTsKLSAgfQotICBzeW50YXhfLlNldEFsbG9j
YXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLCBzeW50YXgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90by5z
eW50YXgpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRGVzY3JpcHRvclByb3RvX0V4dGVuc2lv
blJhbmdlCi0KLS8vIG9wdGlvbmFsIGludDMyIHN0YXJ0ID0gMTsKLWlubGluZSBib29sIERlc2Ny
aXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6aGFzX3N0YXJ0KCkgY29uc3QgewotICByZXR1cm4g
KF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIERlc2Ny
aXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6c2V0X2hhc19zdGFydCgpIHsKLSAgX2hhc19iaXRz
X1swXSB8PSAweDAwMDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90b19FeHRl
bnNpb25SYW5nZTo6Y2xlYXJfaGFzX3N0YXJ0KCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAw
MDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZTo6
Y2xlYXJfc3RhcnQoKSB7Ci0gIHN0YXJ0XyA9IDA7Ci0gIGNsZWFyX2hhc19zdGFydCgpOwotfQot
aW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lv
blJhbmdlOjpzdGFydCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2dldDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lvblJhbmdlLnN0
YXJ0KQotICByZXR1cm4gc3RhcnRfOwotfQotaW5saW5lIHZvaWQgRGVzY3JpcHRvclByb3RvX0V4
dGVuc2lvblJhbmdlOjpzZXRfc3RhcnQoOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSkg
ewotICBzZXRfaGFzX3N0YXJ0KCk7Ci0gIHN0YXJ0XyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8u
RXh0ZW5zaW9uUmFuZ2Uuc3RhcnQpCi19Ci0KLS8vIG9wdGlvbmFsIGludDMyIGVuZCA9IDI7Ci1p
bmxpbmUgYm9vbCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U6Omhhc19lbmQoKSBjb25z
dCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDJ1KSAhPSAwOwotfQotaW5s
aW5lIHZvaWQgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlOjpzZXRfaGFzX2VuZCgpIHsK
LSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0
b3JQcm90b19FeHRlbnNpb25SYW5nZTo6Y2xlYXJfaGFzX2VuZCgpIHsKLSAgX2hhc19iaXRzX1sw
XSAmPSB+MHgwMDAwMDAwMnU7Ci19Ci1pbmxpbmUgdm9pZCBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5z
aW9uUmFuZ2U6OmNsZWFyX2VuZCgpIHsKLSAgZW5kXyA9IDA7Ci0gIGNsZWFyX2hhc19lbmQoKTsK
LX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIERlc2NyaXB0b3JQcm90b19FeHRl
bnNpb25SYW5nZTo6ZW5kKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2Uu
ZW5kKQotICByZXR1cm4gZW5kXzsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90b19FeHRl
bnNpb25SYW5nZTo6c2V0X2VuZCg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0g
IHNldF9oYXNfZW5kKCk7Ci0gIGVuZF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLkV4dGVuc2lv
blJhbmdlLmVuZCkKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBEZXNjcmlwdG9yUHJvdG9fUmVz
ZXJ2ZWRSYW5nZQotCi0vLyBvcHRpb25hbCBpbnQzMiBzdGFydCA9IDE7Ci1pbmxpbmUgYm9vbCBE
ZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6aGFzX3N0YXJ0KCkgY29uc3QgewotICByZXR1
cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIERl
c2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpzZXRfaGFzX3N0YXJ0KCkgewotICBfaGFzX2Jp
dHNfWzBdIHw9IDB4MDAwMDAwMDF1OwotfQotaW5saW5lIHZvaWQgRGVzY3JpcHRvclByb3RvX1Jl
c2VydmVkUmFuZ2U6OmNsZWFyX2hhc19zdGFydCgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgw
MDAwMDAwMXU7Ci19Ci1pbmxpbmUgdm9pZCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZTo6
Y2xlYXJfc3RhcnQoKSB7Ci0gIHN0YXJ0XyA9IDA7Ci0gIGNsZWFyX2hhc19zdGFydCgpOwotfQot
aW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVk
UmFuZ2U6OnN0YXJ0KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5zdGFy
dCkKLSAgcmV0dXJuIHN0YXJ0XzsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90b19SZXNl
cnZlZFJhbmdlOjpzZXRfc3RhcnQoOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSkgewot
ICBzZXRfaGFzX3N0YXJ0KCk7Ci0gIHN0YXJ0XyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVz
ZXJ2ZWRSYW5nZS5zdGFydCkKLX0KLQotLy8gb3B0aW9uYWwgaW50MzIgZW5kID0gMjsKLWlubGlu
ZSBib29sIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpoYXNfZW5kKCkgY29uc3Qgewot
ICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAydSkgIT0gMDsKLX0KLWlubGluZSB2
b2lkIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlOjpzZXRfaGFzX2VuZCgpIHsKLSAgX2hh
c19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90
b19SZXNlcnZlZFJhbmdlOjpjbGVhcl9oYXNfZW5kKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4w
eDAwMDAwMDAydTsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdl
OjpjbGVhcl9lbmQoKSB7Ci0gIGVuZF8gPSAwOwotICBjbGVhcl9oYXNfZW5kKCk7Ci19Ci1pbmxp
bmUgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5n
ZTo6ZW5kKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0
Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZS5lbmQpCi0gIHJl
dHVybiBlbmRfOwotfQotaW5saW5lIHZvaWQgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U6
OnNldF9lbmQoOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSkgewotICBzZXRfaGFzX2Vu
ZCgpOwotICBlbmRfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLmVuZCkK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBEZXNjcmlwdG9yUHJvdG8KLQotLy8gb3B0aW9uYWwg
c3RyaW5nIG5hbWUgPSAxOwotaW5saW5lIGJvb2wgRGVzY3JpcHRvclByb3RvOjpoYXNfbmFtZSgp
IGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMXUpICE9IDA7Ci19
Ci1pbmxpbmUgdm9pZCBEZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfbmFtZSgpIHsKLSAgX2hhc19i
aXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90bzo6
Y2xlYXJfaGFzX25hbWUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDF1OwotfQot
aW5saW5lIHZvaWQgRGVzY3JpcHRvclByb3RvOjpjbGVhcl9uYW1lKCkgewotICBuYW1lXy5DbGVh
clRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc19uYW1lKCk7Ci19Ci1pbmxpbmUgY29u
c3QgOjpzdGQ6OnN0cmluZyYgRGVzY3JpcHRvclByb3RvOjpuYW1lKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9yUHJvdG8ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGlu
ZSB2b2lkIERlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFs
dWUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVm
LkRlc2NyaXB0b3JQcm90by5uYW1lKQotfQotaW5saW5lIHZvaWQgRGVzY3JpcHRvclByb3RvOjpz
ZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8u
U2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJv
dG8ubmFtZSkKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3Qg
Y2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5T
ZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLm5hbWUpCi19
Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX25hbWUoKSB7
Ci0gIHNldF9oYXNfbmFtZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
bXV0YWJsZTpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIHJldHVybiBu
YW1lXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIERlc2Ny
aXB0b3JQcm90bzo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLm5hbWUpCi0g
IGNsZWFyX2hhc19uYW1lKCk7Ci0gIHJldHVybiBuYW1lXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
fQotaW5saW5lIHZvaWQgRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6
OnN0cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19uYW1l
KCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX25hbWUoKTsKLSAgfQotICBuYW1lXy5TZXRB
bGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ubmFt
ZSkKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90
byBmaWVsZCA9IDI7Ci1pbmxpbmUgaW50IERlc2NyaXB0b3JQcm90bzo6ZmllbGRfc2l6ZSgpIGNv
bnN0IHsKLSAgcmV0dXJuIGZpZWxkXy5zaXplKCk7Ci19Ci1pbmxpbmUgdm9pZCBEZXNjcmlwdG9y
UHJvdG86OmNsZWFyX2ZpZWxkKCkgewotICBmaWVsZF8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvJiBEZXNjcmlwdG9yUHJv
dG86OmZpZWxkKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZmllbGQpCi0gIHJl
dHVybiBmaWVsZF8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkRGVzY3JpcHRvclByb3RvKiBEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfZmllbGQoaW50IGlu
ZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2ds
ZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZmllbGQpCi0gIHJldHVybiBmaWVsZF8uTXV0YWJs
ZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQ
cm90byogRGVzY3JpcHRvclByb3RvOjphZGRfZmllbGQoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5maWVs
ZCkKLSAgcmV0dXJuIGZpZWxkXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJv
dG8gPioKLURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9maWVsZCgpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvclByb3RvLmZpZWxkKQotICByZXR1cm4gJmZpZWxkXzsKLX0KLWlubGluZSBjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6Rmll
bGREZXNjcmlwdG9yUHJvdG8gPiYKLURlc2NyaXB0b3JQcm90bzo6ZmllbGQoKSBjb25zdCB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5E
ZXNjcmlwdG9yUHJvdG8uZmllbGQpCi0gIHJldHVybiBmaWVsZF87Ci19Ci0KLS8vIHJlcGVhdGVk
IC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8gZXh0ZW5zaW9uID0gNjsKLWlu
bGluZSBpbnQgRGVzY3JpcHRvclByb3RvOjpleHRlbnNpb25fc2l6ZSgpIGNvbnN0IHsKLSAgcmV0
dXJuIGV4dGVuc2lvbl8uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgRGVzY3JpcHRvclByb3RvOjpj
bGVhcl9leHRlbnNpb24oKSB7Ci0gIGV4dGVuc2lvbl8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvJiBEZXNjcmlwdG9yUHJv
dG86OmV4dGVuc2lvbihpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmV4dGVuc2lv
bikKLSAgcmV0dXJuIGV4dGVuc2lvbl8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6
cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvKiBEZXNjcmlwdG9yUHJvdG86Om11dGFibGVf
ZXh0ZW5zaW9uKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLmV4dGVuc2lvbikKLSAg
cmV0dXJuIGV4dGVuc2lvbl8uTXV0YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90byogRGVzY3JpcHRvclByb3RvOjphZGRfZXh0ZW5z
aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5w
cm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZXh0ZW5zaW9uKQotICByZXR1cm4gZXh0ZW5zaW9uXy5B
ZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG8gPioKLURlc2NyaXB0b3JQcm90
bzo6bXV0YWJsZV9leHRlbnNpb24oKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNp
b24pCi0gIHJldHVybiAmZXh0ZW5zaW9uXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlw
dG9yUHJvdG8gPiYKLURlc2NyaXB0b3JQcm90bzo6ZXh0ZW5zaW9uKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3Jp
cHRvclByb3RvLmV4dGVuc2lvbikKLSAgcmV0dXJuIGV4dGVuc2lvbl87Ci19Ci0KLS8vIHJlcGVh
dGVkIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvIG5lc3RlZF90eXBlID0gMzsKLWlu
bGluZSBpbnQgRGVzY3JpcHRvclByb3RvOjpuZXN0ZWRfdHlwZV9zaXplKCkgY29uc3QgewotICBy
ZXR1cm4gbmVzdGVkX3R5cGVfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90
bzo6Y2xlYXJfbmVzdGVkX3R5cGUoKSB7Ci0gIG5lc3RlZF90eXBlXy5DbGVhcigpOwotfQotaW5s
aW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvJiBEZXNjcmlwdG9y
UHJvdG86Om5lc3RlZF90eXBlKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ubmVz
dGVkX3R5cGUpCi0gIHJldHVybiBuZXN0ZWRfdHlwZV8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6
Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90byogRGVzY3JpcHRvclByb3RvOjptdXRh
YmxlX25lc3RlZF90eXBlKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLm5lc3RlZF90
eXBlKQotICByZXR1cm4gbmVzdGVkX3R5cGVfLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5lIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvKiBEZXNjcmlwdG9yUHJvdG86OmFkZF9u
ZXN0ZWRfdHlwZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpn
b29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLm5lc3RlZF90eXBlKQotICByZXR1cm4gbmVz
dGVkX3R5cGVfLkFkZCgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQ
dHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG8gPioKLURlc2NyaXB0
b3JQcm90bzo6bXV0YWJsZV9uZXN0ZWRfdHlwZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3Rv
Lm5lc3RlZF90eXBlKQotICByZXR1cm4gJm5lc3RlZF90eXBlXzsKLX0KLWlubGluZSBjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RGVzY3JpcHRvclByb3RvID4mCi1EZXNjcmlwdG9yUHJvdG86Om5lc3RlZF90eXBlKCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9i
dWYuRGVzY3JpcHRvclByb3RvLm5lc3RlZF90eXBlKQotICByZXR1cm4gbmVzdGVkX3R5cGVfOwot
fQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8gZW51
bV90eXBlID0gNDsKLWlubGluZSBpbnQgRGVzY3JpcHRvclByb3RvOjplbnVtX3R5cGVfc2l6ZSgp
IGNvbnN0IHsKLSAgcmV0dXJuIGVudW1fdHlwZV8uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgRGVz
Y3JpcHRvclByb3RvOjpjbGVhcl9lbnVtX3R5cGUoKSB7Ci0gIGVudW1fdHlwZV8uQ2xlYXIoKTsK
LX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yUHJvdG8m
IERlc2NyaXB0b3JQcm90bzo6ZW51bV90eXBlKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9y
UHJvdG8uZW51bV90eXBlKQotICByZXR1cm4gZW51bV90eXBlXy5HZXQoaW5kZXgpOwotfQotaW5s
aW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3JQcm90byogRGVzY3JpcHRvclBy
b3RvOjptdXRhYmxlX2VudW1fdHlwZShpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5l
bnVtX3R5cGUpCi0gIHJldHVybiBlbnVtX3R5cGVfLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5l
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3JQcm90byogRGVzY3JpcHRvclByb3Rv
OjphZGRfZW51bV90eXBlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
YWRkOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uZW51bV90eXBlKQotICByZXR1cm4g
ZW51bV90eXBlXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3JQcm90byA+KgotRGVz
Y3JpcHRvclByb3RvOjptdXRhYmxlX2VudW1fdHlwZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclBy
b3RvLmVudW1fdHlwZSkKLSAgcmV0dXJuICZlbnVtX3R5cGVfOwotfQotaW5saW5lIGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpF
bnVtRGVzY3JpcHRvclByb3RvID4mCi1EZXNjcmlwdG9yUHJvdG86OmVudW1fdHlwZSgpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3Rv
YnVmLkRlc2NyaXB0b3JQcm90by5lbnVtX3R5cGUpCi0gIHJldHVybiBlbnVtX3R5cGVfOwotfQot
Ci0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25S
YW5nZSBleHRlbnNpb25fcmFuZ2UgPSA1OwotaW5saW5lIGludCBEZXNjcmlwdG9yUHJvdG86OmV4
dGVuc2lvbl9yYW5nZV9zaXplKCkgY29uc3QgewotICByZXR1cm4gZXh0ZW5zaW9uX3JhbmdlXy5z
aXplKCk7Ci19Ci1pbmxpbmUgdm9pZCBEZXNjcmlwdG9yUHJvdG86OmNsZWFyX2V4dGVuc2lvbl9y
YW5nZSgpIHsKLSAgZXh0ZW5zaW9uX3JhbmdlXy5DbGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlJiBEZXNjcmlw
dG9yUHJvdG86OmV4dGVuc2lvbl9yYW5nZShpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclBy
b3RvLmV4dGVuc2lvbl9yYW5nZSkKLSAgcmV0dXJuIGV4dGVuc2lvbl9yYW5nZV8uR2V0KGluZGV4
KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90b19FeHRlbnNp
b25SYW5nZSogRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX2V4dGVuc2lvbl9yYW5nZShpbnQgaW5k
ZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xl
LnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNpb25fcmFuZ2UpCi0gIHJldHVybiBleHRl
bnNpb25fcmFuZ2VfLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKiBEZXNjcmlwdG9yUHJvdG86OmFkZF9l
eHRlbnNpb25fcmFuZ2UoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9h
ZGQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNpb25fcmFuZ2UpCi0gIHJl
dHVybiBleHRlbnNpb25fcmFuZ2VfLkFkZCgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG9f
RXh0ZW5zaW9uUmFuZ2UgPioKLURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9leHRlbnNpb25fcmFu
Z2UoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6
Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNpb25fcmFuZ2UpCi0gIHJldHVy
biAmZXh0ZW5zaW9uX3JhbmdlXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvX0V4
dGVuc2lvblJhbmdlID4mCi1EZXNjcmlwdG9yUHJvdG86OmV4dGVuc2lvbl9yYW5nZSgpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3Rv
YnVmLkRlc2NyaXB0b3JQcm90by5leHRlbnNpb25fcmFuZ2UpCi0gIHJldHVybiBleHRlbnNpb25f
cmFuZ2VfOwotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9uZW9mRGVzY3JpcHRv
clByb3RvIG9uZW9mX2RlY2wgPSA4OwotaW5saW5lIGludCBEZXNjcmlwdG9yUHJvdG86Om9uZW9m
X2RlY2xfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG9uZW9mX2RlY2xfLnNpemUoKTsKLX0KLWlu
bGluZSB2b2lkIERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfb25lb2ZfZGVjbCgpIHsKLSAgb25lb2Zf
ZGVjbF8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9uZW9m
RGVzY3JpcHRvclByb3RvJiBEZXNjcmlwdG9yUHJvdG86Om9uZW9mX2RlY2woaW50IGluZGV4KSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnBy
b3RvYnVmLkRlc2NyaXB0b3JQcm90by5vbmVvZl9kZWNsKQotICByZXR1cm4gb25lb2ZfZGVjbF8u
R2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6Ok9uZW9mRGVzY3JpcHRv
clByb3RvKiBEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfb25lb2ZfZGVjbChpbnQgaW5kZXgpIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3Rv
YnVmLkRlc2NyaXB0b3JQcm90by5vbmVvZl9kZWNsKQotICByZXR1cm4gb25lb2ZfZGVjbF8uTXV0
YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpPbmVvZkRlc2NyaXB0
b3JQcm90byogRGVzY3JpcHRvclByb3RvOjphZGRfb25lb2ZfZGVjbCgpIHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclBy
b3RvLm9uZW9mX2RlY2wpCi0gIHJldHVybiBvbmVvZl9kZWNsXy5BZGQoKTsKLX0KLWlubGluZSA6
Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
T25lb2ZEZXNjcmlwdG9yUHJvdG8gPioKLURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9vbmVvZl9k
ZWNsKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0
Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ub25lb2ZfZGVjbCkKLSAgcmV0dXJuICZv
bmVvZl9kZWNsXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T25lb2ZEZXNjcmlwdG9yUHJvdG8gPiYKLURl
c2NyaXB0b3JQcm90bzo6b25lb2ZfZGVjbCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5vbmVv
Zl9kZWNsKQotICByZXR1cm4gb25lb2ZfZGVjbF87Ci19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUu
cHJvdG9idWYuTWVzc2FnZU9wdGlvbnMgb3B0aW9ucyA9IDc7Ci1pbmxpbmUgYm9vbCBEZXNjcmlw
dG9yUHJvdG86Omhhc19vcHRpb25zKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0g
JiAweDAwMDAwMDgwdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90bzo6c2V0
X2hhc19vcHRpb25zKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwODB1OwotfQotaW5s
aW5lIHZvaWQgRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfb3B0aW9ucygpIHsKLSAgX2hhc19i
aXRzX1swXSAmPSB+MHgwMDAwMDA4MHU7Ci19Ci1pbmxpbmUgdm9pZCBEZXNjcmlwdG9yUHJvdG86
OmNsZWFyX29wdGlvbnMoKSB7Ci0gIGlmIChvcHRpb25zXyAhPSBOVUxMKSBvcHRpb25zXy0+Ojpn
b29nbGU6OnByb3RvYnVmOjpNZXNzYWdlT3B0aW9uczo6Q2xlYXIoKTsKLSAgY2xlYXJfaGFzX29w
dGlvbnMoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VPcHRp
b25zJiBEZXNjcmlwdG9yUHJvdG86Om9wdGlvbnMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5v
cHRpb25zKQotICByZXR1cm4gb3B0aW9uc18gIT0gTlVMTCA/ICpvcHRpb25zXyA6ICpkZWZhdWx0
X2luc3RhbmNlXy0+b3B0aW9uc187Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlT3B0aW9ucyogRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX29wdGlvbnMoKSB7Ci0gIHNldF9o
YXNfb3B0aW9ucygpOwotICBpZiAob3B0aW9uc18gPT0gTlVMTCkgewotICAgIG9wdGlvbnNfID0g
bmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZU9wdGlvbnM7Ci0gIH0KLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0
b3JQcm90by5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc187Ci19Ci1pbmxpbmUgOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlT3B0aW9ucyogRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX29wdGlv
bnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2ds
ZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAgY2xlYXJfaGFzX29wdGlvbnMo
KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlT3B0aW9ucyogdGVtcCA9IG9wdGlvbnNf
OwotICBvcHRpb25zXyA9IE5VTEw7Ci0gIHJldHVybiB0ZW1wOwotfQotaW5saW5lIHZvaWQgRGVz
Y3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX29wdGlvbnMoOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlT3B0aW9ucyogb3B0aW9ucykgewotICBkZWxldGUgb3B0aW9uc187Ci0gIG9wdGlvbnNf
ID0gb3B0aW9uczsKLSAgaWYgKG9wdGlvbnMpIHsKLSAgICBzZXRfaGFzX29wdGlvbnMoKTsKLSAg
fSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfb3B0aW9ucygpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9yUHJvdG8ub3B0aW9ucykKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5EZXNj
cmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSByZXNlcnZlZF9yYW5nZSA9IDk7Ci1pbmxpbmUgaW50
IERlc2NyaXB0b3JQcm90bzo6cmVzZXJ2ZWRfcmFuZ2Vfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJu
IHJlc2VydmVkX3JhbmdlXy5zaXplKCk7Ci19Ci1pbmxpbmUgdm9pZCBEZXNjcmlwdG9yUHJvdG86
OmNsZWFyX3Jlc2VydmVkX3JhbmdlKCkgewotICByZXNlcnZlZF9yYW5nZV8uQ2xlYXIoKTsKLX0K
LWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQcm90b19SZXNlcnZl
ZFJhbmdlJiBEZXNjcmlwdG9yUHJvdG86OnJlc2VydmVkX3JhbmdlKGludCBpbmRleCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9yUHJvdG8ucmVzZXJ2ZWRfcmFuZ2UpCi0gIHJldHVybiByZXNlcnZlZF9yYW5n
ZV8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQ
cm90b19SZXNlcnZlZFJhbmdlKiBEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfcmVzZXJ2ZWRfcmFu
Z2UoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRh
YmxlOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucmVzZXJ2ZWRfcmFuZ2UpCi0gIHJl
dHVybiByZXNlcnZlZF9yYW5nZV8uTXV0YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6
OnByb3RvYnVmOjpEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSogRGVzY3JpcHRvclByb3Rv
OjphZGRfcmVzZXJ2ZWRfcmFuZ2UoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXNlcnZlZF9yYW5nZSkK
LSAgcmV0dXJuIHJlc2VydmVkX3JhbmdlXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclBy
b3RvX1Jlc2VydmVkUmFuZ2UgPioKLURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9yZXNlcnZlZF9y
YW5nZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlz
dDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlc2VydmVkX3JhbmdlKQotICByZXR1
cm4gJnJlc2VydmVkX3JhbmdlXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclByb3RvX1Jl
c2VydmVkUmFuZ2UgPiYKLURlc2NyaXB0b3JQcm90bzo6cmVzZXJ2ZWRfcmFuZ2UoKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1
Zi5EZXNjcmlwdG9yUHJvdG8ucmVzZXJ2ZWRfcmFuZ2UpCi0gIHJldHVybiByZXNlcnZlZF9yYW5n
ZV87Ci19Ci0KLS8vIHJlcGVhdGVkIHN0cmluZyByZXNlcnZlZF9uYW1lID0gMTA7Ci1pbmxpbmUg
aW50IERlc2NyaXB0b3JQcm90bzo6cmVzZXJ2ZWRfbmFtZV9zaXplKCkgY29uc3QgewotICByZXR1
cm4gcmVzZXJ2ZWRfbmFtZV8uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgRGVzY3JpcHRvclByb3Rv
OjpjbGVhcl9yZXNlcnZlZF9uYW1lKCkgewotICByZXNlcnZlZF9uYW1lXy5DbGVhcigpOwotfQot
aW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIERlc2NyaXB0b3JQcm90bzo6cmVzZXJ2ZWRfbmFt
ZShpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X2dldDpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlc2VydmVkX25hbWUpCi0gIHJl
dHVybiByZXNlcnZlZF9uYW1lXy5HZXQoaW5kZXgpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcq
IERlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9yZXNlcnZlZF9uYW1lKGludCBpbmRleCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYu
RGVzY3JpcHRvclByb3RvLnJlc2VydmVkX25hbWUpCi0gIHJldHVybiByZXNlcnZlZF9uYW1lXy5N
dXRhYmxlKGluZGV4KTsKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90bzo6c2V0X3Jlc2Vy
dmVkX25hbWUoaW50IGluZGV4LCBjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlw
dG9yUHJvdG8ucmVzZXJ2ZWRfbmFtZSkKLSAgcmVzZXJ2ZWRfbmFtZV8uTXV0YWJsZShpbmRleCkt
PmFzc2lnbih2YWx1ZSk7Ci19Ci1pbmxpbmUgdm9pZCBEZXNjcmlwdG9yUHJvdG86OnNldF9yZXNl
cnZlZF9uYW1lKGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUpIHsKLSAgcmVzZXJ2ZWRfbmFt
ZV8uTXV0YWJsZShpbmRleCktPmFzc2lnbih2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJl
c2VydmVkX25hbWUpCi19Ci1pbmxpbmUgdm9pZCBEZXNjcmlwdG9yUHJvdG86OnNldF9yZXNlcnZl
ZF9uYW1lKGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHJl
c2VydmVkX25hbWVfLk11dGFibGUoaW5kZXgpLT5hc3NpZ24oCi0gICAgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucmVz
ZXJ2ZWRfbmFtZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBEZXNjcmlwdG9yUHJvdG86OmFk
ZF9yZXNlcnZlZF9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
YWRkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXNlcnZlZF9uYW1l
KQotICByZXR1cm4gcmVzZXJ2ZWRfbmFtZV8uQWRkKCk7Ci19Ci1pbmxpbmUgdm9pZCBEZXNjcmlw
dG9yUHJvdG86OmFkZF9yZXNlcnZlZF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7
Ci0gIHJlc2VydmVkX25hbWVfLkFkZCgpLT5hc3NpZ24odmFsdWUpOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8u
cmVzZXJ2ZWRfbmFtZSkKLX0KLWlubGluZSB2b2lkIERlc2NyaXB0b3JQcm90bzo6YWRkX3Jlc2Vy
dmVkX25hbWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgcmVzZXJ2ZWRfbmFtZV8uQWRkKCktPmFz
c2lnbih2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGRfY2hh
cjpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLnJlc2VydmVkX25hbWUpCi19Ci1pbmxp
bmUgdm9pZCBEZXNjcmlwdG9yUHJvdG86OmFkZF9yZXNlcnZlZF9uYW1lKGNvbnN0IGNoYXIqIHZh
bHVlLCBzaXplX3Qgc2l6ZSkgewotICByZXNlcnZlZF9uYW1lXy5BZGQoKS0+YXNzaWduKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9hZGRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRGVzY3JpcHRv
clByb3RvLnJlc2VydmVkX25hbWUpCi19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPiYKLURlc2NyaXB0b3JQcm90bzo6cmVz
ZXJ2ZWRfbmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5yZXNlcnZlZF9uYW1lKQotICBy
ZXR1cm4gcmVzZXJ2ZWRfbmFtZV87Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBl
YXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPioKLURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9y
ZXNlcnZlZF9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8ucmVzZXJ2ZWRfbmFtZSkK
LSAgcmV0dXJuICZyZXNlcnZlZF9uYW1lXzsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBGaWVs
ZERlc2NyaXB0b3JQcm90bwotCi0vLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci1pbmxpbmUg
Ym9vbCBGaWVsZERlc2NyaXB0b3JQcm90bzo6aGFzX25hbWUoKSBjb25zdCB7Ci0gIHJldHVybiAo
X2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmllbGRE
ZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAw
MDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNf
bmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMXU7Ci19Ci1pbmxpbmUgdm9p
ZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfbmFtZSgpIHsKLSAgbmFtZV8uQ2xlYXJUb0Vt
cHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfbmFtZSgpOwotfQotaW5saW5lIGNvbnN0IDo6
c3RkOjpzdHJpbmcmIEZpZWxkRGVzY3JpcHRvclByb3RvOjpuYW1lKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZERl
c2NyaXB0b3JQcm90by5uYW1lKQotICByZXR1cm4gbmFtZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQot
aW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0IDo6c3RkOjpz
dHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5uYW1lKQotfQotaW5saW5lIHZvaWQgRmll
bGREZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9o
YXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkp
OwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnBy
b3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci1pbmxpbmUgdm9pZCBGaWVsZERl
c2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7
Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3Rk
OjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJv
dG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5n
KiBGaWVsZERlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9uYW1lKCkgewotICBzZXRfaGFzX25hbWUo
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnBy
b3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIHJldHVybiBuYW1lXy5NdXRhYmxl
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpZWxkRGVzY3JpcHRvclBy
b3RvOjpyZWxlYXNlX25hbWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5uYW1lKQotICBj
bGVhcl9oYXNfbmFtZSgpOwotICByZXR1cm4gbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0K
LWlubGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpz
dGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19u
YW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX25hbWUoKTsKLSAgfQotICBuYW1lXy5T
ZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQ
cm90by5uYW1lKQotfQotCi0vLyBvcHRpb25hbCBpbnQzMiBudW1iZXIgPSAzOwotaW5saW5lIGJv
b2wgRmllbGREZXNjcmlwdG9yUHJvdG86Omhhc19udW1iZXIoKSBjb25zdCB7Ci0gIHJldHVybiAo
X2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDJ1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmllbGRE
ZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfbnVtYmVyKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4
MDAwMDAwMDJ1OwotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hh
c19udW1iZXIoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDJ1OwotfQotaW5saW5l
IHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OmNsZWFyX251bWJlcigpIHsKLSAgbnVtYmVyXyA9
IDA7Ci0gIGNsZWFyX2hhc19udW1iZXIoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6
OmludDMyIEZpZWxkRGVzY3JpcHRvclByb3RvOjpudW1iZXIoKSBjb25zdCB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3Jp
cHRvclByb3RvLm51bWJlcikKLSAgcmV0dXJuIG51bWJlcl87Ci19Ci1pbmxpbmUgdm9pZCBGaWVs
ZERlc2NyaXB0b3JQcm90bzo6c2V0X251bWJlcig6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZh
bHVlKSB7Ci0gIHNldF9oYXNfbnVtYmVyKCk7Ci0gIG51bWJlcl8gPSB2YWx1ZTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGREZXNj
cmlwdG9yUHJvdG8ubnVtYmVyKQotfQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkZp
ZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsIGxhYmVsID0gNDsKLWlubGluZSBib29sIEZpZWxkRGVz
Y3JpcHRvclByb3RvOjpoYXNfbGFiZWwoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1sw
XSAmIDB4MDAwMDAwMDR1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJv
dG86OnNldF9oYXNfbGFiZWwoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwNHU7Ci19
Ci1pbmxpbmUgdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX2xhYmVsKCkgewot
ICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDA0dTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVz
Y3JpcHRvclByb3RvOjpjbGVhcl9sYWJlbCgpIHsKLSAgbGFiZWxfID0gMTsKLSAgY2xlYXJfaGFz
X2xhYmVsKCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQ
cm90b19MYWJlbCBGaWVsZERlc2NyaXB0b3JQcm90bzo6bGFiZWwoKSBjb25zdCB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVz
Y3JpcHRvclByb3RvLmxhYmVsKQotICByZXR1cm4gc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwgPihsYWJlbF8pOwotfQotaW5saW5lIHZv
aWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9sYWJlbCg6Omdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsIHZhbHVlKSB7Ci0gIGFzc2VydCg6Omdvb2dsZTo6cHJv
dG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsX0lzVmFsaWQodmFsdWUpKTsKLSAgc2V0
X2hhc19sYWJlbCgpOwotICBsYWJlbF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ubGFi
ZWwpCi19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJv
dG8uVHlwZSB0eXBlID0gNTsKLWlubGluZSBib29sIEZpZWxkRGVzY3JpcHRvclByb3RvOjpoYXNf
dHlwZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwOHUpICE9
IDA7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2hhc190eXBlKCkg
ewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDh1OwotfQotaW5saW5lIHZvaWQgRmllbGRE
ZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hhc190eXBlKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4w
eDAwMDAwMDA4dTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpjbGVhcl90
eXBlKCkgewotICB0eXBlXyA9IDE7Ci0gIGNsZWFyX2hhc190eXBlKCk7Ci19Ci1pbmxpbmUgOjpn
b29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlIEZpZWxkRGVzY3JpcHRv
clByb3RvOjp0eXBlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by50eXBlKQotICByZXR1
cm4gc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9f
VHlwZSA+KHR5cGVfKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRf
dHlwZSg6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUgdmFsdWUp
IHsKLSAgYXNzZXJ0KDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9fVHlw
ZV9Jc1ZhbGlkKHZhbHVlKSk7Ci0gIHNldF9oYXNfdHlwZSgpOwotICB0eXBlXyA9IHZhbHVlOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5G
aWVsZERlc2NyaXB0b3JQcm90by50eXBlKQotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgdHlwZV9u
YW1lID0gNjsKLWlubGluZSBib29sIEZpZWxkRGVzY3JpcHRvclByb3RvOjpoYXNfdHlwZV9uYW1l
KCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDEwdSkgIT0gMDsK
LX0KLWlubGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfaGFzX3R5cGVfbmFtZSgp
IHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDEwdTsKLX0KLWlubGluZSB2b2lkIEZpZWxk
RGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfdHlwZV9uYW1lKCkgewotICBfaGFzX2JpdHNfWzBd
ICY9IH4weDAwMDAwMDEwdTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpj
bGVhcl90eXBlX25hbWUoKSB7Ci0gIHR5cGVfbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotICBjbGVhcl9oYXNfdHlwZV9uYW1lKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmlu
ZyYgRmllbGREZXNjcmlwdG9yUHJvdG86OnR5cGVfbmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlw
dG9yUHJvdG8udHlwZV9uYW1lKQotICByZXR1cm4gdHlwZV9uYW1lXy5HZXROb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X3R5cGVfbmFtZShjb25z
dCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX3R5cGVfbmFtZSgpOwotICB0eXBl
X25hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnR5cGVf
bmFtZSkKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfdHlwZV9uYW1l
KGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfdHlwZV9uYW1lKCk7Ci0gIHR5cGVfbmFt
ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2Ny
aXB0b3JQcm90by50eXBlX25hbWUpCi19Ci1pbmxpbmUgdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90
bzo6c2V0X3R5cGVfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0
X2hhc190eXBlX25hbWUoKTsKLSAgdHlwZV9uYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6
c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUu
cHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8udHlwZV9uYW1lKQotfQotaW5saW5lIDo6c3Rk
OjpzdHJpbmcqIEZpZWxkRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX3R5cGVfbmFtZSgpIHsKLSAg
c2V0X2hhc190eXBlX25hbWUoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnR5cGVfbmFtZSkK
LSAgcmV0dXJuIHR5cGVfbmFtZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0
ZDo6c3RyaW5nKiBGaWVsZERlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV90eXBlX25hbWUoKSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1
Zi5GaWVsZERlc2NyaXB0b3JQcm90by50eXBlX25hbWUpCi0gIGNsZWFyX2hhc190eXBlX25hbWUo
KTsKLSAgcmV0dXJuIHR5cGVfbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2
b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX3R5cGVfbmFtZSg6OnN0ZDo6
c3RyaW5nKiB0eXBlX25hbWUpIHsKLSAgaWYgKHR5cGVfbmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0
X2hhc190eXBlX25hbWUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfdHlwZV9uYW1lKCk7
Ci0gIH0KLSAgdHlwZV9uYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdHlwZV9uYW1lKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xl
LnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLnR5cGVfbmFtZSkKLX0KLQotLy8gb3B0aW9u
YWwgc3RyaW5nIGV4dGVuZGVlID0gMjsKLWlubGluZSBib29sIEZpZWxkRGVzY3JpcHRvclByb3Rv
OjpoYXNfZXh0ZW5kZWUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAw
MDAwMjB1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9o
YXNfZXh0ZW5kZWUoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAyMHU7Ci19Ci1pbmxp
bmUgdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX2V4dGVuZGVlKCkgewotICBf
aGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDIwdTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVzY3Jp
cHRvclByb3RvOjpjbGVhcl9leHRlbmRlZSgpIHsKLSAgZXh0ZW5kZWVfLkNsZWFyVG9FbXB0eU5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX2V4dGVuZGVlKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpz
dGQ6OnN0cmluZyYgRmllbGREZXNjcmlwdG9yUHJvdG86OmV4dGVuZGVlKCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVs
ZERlc2NyaXB0b3JQcm90by5leHRlbmRlZSkKLSAgcmV0dXJuIGV4dGVuZGVlXy5HZXROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2V4dGVuZGVl
KGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfZXh0ZW5kZWUoKTsKLSAg
ZXh0ZW5kZWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmV4
dGVuZGVlKQotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9leHRlbmRl
ZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFzX2V4dGVuZGVlKCk7Ci0gIGV4dGVuZGVl
Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3Jp
cHRvclByb3RvLmV4dGVuZGVlKQotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86
OnNldF9leHRlbmRlZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hh
c19leHRlbmRlZSgpOwotICBleHRlbmRlZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6
c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3Rv
YnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmV4dGVuZGVlKQotfQotaW5saW5lIDo6c3RkOjpzdHJp
bmcqIEZpZWxkRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX2V4dGVuZGVlKCkgewotICBzZXRfaGFz
X2V4dGVuZGVlKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxl
Omdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5leHRlbmRlZSkKLSAgcmV0dXJu
IGV4dGVuZGVlXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcq
IEZpZWxkRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX2V4dGVuZGVlKCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRmllbGREZXNj
cmlwdG9yUHJvdG8uZXh0ZW5kZWUpCi0gIGNsZWFyX2hhc19leHRlbmRlZSgpOwotICByZXR1cm4g
ZXh0ZW5kZWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlc2Ny
aXB0b3JQcm90bzo6c2V0X2FsbG9jYXRlZF9leHRlbmRlZSg6OnN0ZDo6c3RyaW5nKiBleHRlbmRl
ZSkgewotICBpZiAoZXh0ZW5kZWUgIT0gTlVMTCkgewotICAgIHNldF9oYXNfZXh0ZW5kZWUoKTsK
LSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfZXh0ZW5kZWUoKTsKLSAgfQotICBleHRlbmRlZV8u
U2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGV4dGVuZGVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3Jp
cHRvclByb3RvLmV4dGVuZGVlKQotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgZGVmYXVsdF92YWx1
ZSA9IDc7Ci1pbmxpbmUgYm9vbCBGaWVsZERlc2NyaXB0b3JQcm90bzo6aGFzX2RlZmF1bHRfdmFs
dWUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwNDB1KSAhPSAw
OwotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfZGVmYXVsdF92
YWx1ZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDQwdTsKLX0KLWlubGluZSB2b2lk
IEZpZWxkRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfZGVmYXVsdF92YWx1ZSgpIHsKLSAgX2hh
c19iaXRzX1swXSAmPSB+MHgwMDAwMDA0MHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlc2NyaXB0
b3JQcm90bzo6Y2xlYXJfZGVmYXVsdF92YWx1ZSgpIHsKLSAgZGVmYXVsdF92YWx1ZV8uQ2xlYXJU
b0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfZGVmYXVsdF92YWx1ZSgpOwotfQotaW5s
aW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZpZWxkRGVzY3JpcHRvclByb3RvOjpkZWZhdWx0X3Zh
bHVlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZWZhdWx0X3ZhbHVlKQotICByZXR1
cm4gZGVmYXVsdF92YWx1ZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgRmllbGRE
ZXNjcmlwdG9yUHJvdG86OnNldF9kZWZhdWx0X3ZhbHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZh
bHVlKSB7Ci0gIHNldF9oYXNfZGVmYXVsdF92YWx1ZSgpOwotICBkZWZhdWx0X3ZhbHVlXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5kZWZhdWx0X3ZhbHVlKQot
fQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9kZWZhdWx0X3ZhbHVlKGNv
bnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfZGVmYXVsdF92YWx1ZSgpOwotICBkZWZhdWx0
X3ZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpZWxk
RGVzY3JpcHRvclByb3RvLmRlZmF1bHRfdmFsdWUpCi19Ci1pbmxpbmUgdm9pZCBGaWVsZERlc2Ny
aXB0b3JQcm90bzo6c2V0X2RlZmF1bHRfdmFsdWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBz
aXplKSB7Ci0gIHNldF9oYXNfZGVmYXVsdF92YWx1ZSgpOwotICBkZWZhdWx0X3ZhbHVlXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uZGVmYXVs
dF92YWx1ZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBGaWVsZERlc2NyaXB0b3JQcm90bzo6
bXV0YWJsZV9kZWZhdWx0X3ZhbHVlKCkgewotICBzZXRfaGFzX2RlZmF1bHRfdmFsdWUoKTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVm
LkZpZWxkRGVzY3JpcHRvclByb3RvLmRlZmF1bHRfdmFsdWUpCi0gIHJldHVybiBkZWZhdWx0X3Zh
bHVlXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpZWxk
RGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX2RlZmF1bHRfdmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2Ny
aXB0b3JQcm90by5kZWZhdWx0X3ZhbHVlKQotICBjbGVhcl9oYXNfZGVmYXVsdF92YWx1ZSgpOwot
ICByZXR1cm4gZGVmYXVsdF92YWx1ZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2
b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX2RlZmF1bHRfdmFsdWUoOjpz
dGQ6OnN0cmluZyogZGVmYXVsdF92YWx1ZSkgewotICBpZiAoZGVmYXVsdF92YWx1ZSAhPSBOVUxM
KSB7Ci0gICAgc2V0X2hhc19kZWZhdWx0X3ZhbHVlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJf
aGFzX2RlZmF1bHRfdmFsdWUoKTsKLSAgfQotICBkZWZhdWx0X3ZhbHVlXy5TZXRBbGxvY2F0ZWRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgZGVmYXVsdF92YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90
by5kZWZhdWx0X3ZhbHVlKQotfQotCi0vLyBvcHRpb25hbCBpbnQzMiBvbmVvZl9pbmRleCA9IDk7
Ci1pbmxpbmUgYm9vbCBGaWVsZERlc2NyaXB0b3JQcm90bzo6aGFzX29uZW9mX2luZGV4KCkgY29u
c3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDgwdSkgIT0gMDsKLX0KLWlu
bGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfaGFzX29uZW9mX2luZGV4KCkgewot
ICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwODB1OwotfQotaW5saW5lIHZvaWQgRmllbGREZXNj
cmlwdG9yUHJvdG86OmNsZWFyX2hhc19vbmVvZl9pbmRleCgpIHsKLSAgX2hhc19iaXRzX1swXSAm
PSB+MHgwMDAwMDA4MHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6Y2xl
YXJfb25lb2ZfaW5kZXgoKSB7Ci0gIG9uZW9mX2luZGV4XyA9IDA7Ci0gIGNsZWFyX2hhc19vbmVv
Zl9pbmRleCgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgRmllbGREZXNj
cmlwdG9yUHJvdG86Om9uZW9mX2luZGV4KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5v
bmVvZl9pbmRleCkKLSAgcmV0dXJuIG9uZW9mX2luZGV4XzsKLX0KLWlubGluZSB2b2lkIEZpZWxk
RGVzY3JpcHRvclByb3RvOjpzZXRfb25lb2ZfaW5kZXgoOjpnb29nbGU6OnByb3RvYnVmOjppbnQz
MiB2YWx1ZSkgewotICBzZXRfaGFzX29uZW9mX2luZGV4KCk7Ci0gIG9uZW9mX2luZGV4XyA9IHZh
bHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90
b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5vbmVvZl9pbmRleCkKLX0KLQotLy8gb3B0aW9uYWwg
c3RyaW5nIGpzb25fbmFtZSA9IDEwOwotaW5saW5lIGJvb2wgRmllbGREZXNjcmlwdG9yUHJvdG86
Omhhc19qc29uX25hbWUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAw
MDAxMDB1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9o
YXNfanNvbl9uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAxMDB1OwotfQotaW5s
aW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hhc19qc29uX25hbWUoKSB7Ci0g
IF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAxMDB1OwotfQotaW5saW5lIHZvaWQgRmllbGREZXNj
cmlwdG9yUHJvdG86OmNsZWFyX2pzb25fbmFtZSgpIHsKLSAganNvbl9uYW1lXy5DbGVhclRvRW1w
dHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc19qc29uX25hbWUoKTsKLX0KLWlubGluZSBjb25z
dCA6OnN0ZDo6c3RyaW5nJiBGaWVsZERlc2NyaXB0b3JQcm90bzo6anNvbl9uYW1lKCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1
Zi5GaWVsZERlc2NyaXB0b3JQcm90by5qc29uX25hbWUpCi0gIHJldHVybiBqc29uX25hbWVfLkdl
dE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRf
anNvbl9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfanNvbl9u
YW1lKCk7Ci0gIGpzb25fbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlw
dG9yUHJvdG8uanNvbl9uYW1lKQotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86
OnNldF9qc29uX25hbWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgc2V0X2hhc19qc29uX25hbWUo
KTsKLSAganNvbl9uYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3Rv
YnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmpzb25fbmFtZSkKLX0KLWlubGluZSB2b2lkIEZpZWxk
RGVzY3JpcHRvclByb3RvOjpzZXRfanNvbl9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qg
c2l6ZSkgewotICBzZXRfaGFzX2pzb25fbmFtZSgpOwotICBqc29uX25hbWVfLlNldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2
YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9w
b2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5qc29uX25hbWUpCi19
Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogRmllbGREZXNjcmlwdG9yUHJvdG86Om11dGFibGVfanNv
bl9uYW1lKCkgewotICBzZXRfaGFzX2pzb25fbmFtZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJv
dG8uanNvbl9uYW1lKQotICByZXR1cm4ganNvbl9uYW1lXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
fQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpZWxkRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX2pz
b25fbmFtZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6
Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLmpzb25fbmFtZSkKLSAgY2xlYXJf
aGFzX2pzb25fbmFtZSgpOwotICByZXR1cm4ganNvbl9uYW1lXy5SZWxlYXNlTm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfanNv
bl9uYW1lKDo6c3RkOjpzdHJpbmcqIGpzb25fbmFtZSkgewotICBpZiAoanNvbl9uYW1lICE9IE5V
TEwpIHsKLSAgICBzZXRfaGFzX2pzb25fbmFtZSgpOwotICB9IGVsc2UgewotICAgIGNsZWFyX2hh
c19qc29uX25hbWUoKTsKLSAgfQotICBqc29uX25hbWVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LCBqc29uX25hbWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2Fs
bG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uanNvbl9uYW1lKQot
fQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyBvcHRpb25zID0g
ODsKLWlubGluZSBib29sIEZpZWxkRGVzY3JpcHRvclByb3RvOjpoYXNfb3B0aW9ucygpIGNvbnN0
IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDIwMHUpICE9IDA7Ci19Ci1pbmxp
bmUgdm9pZCBGaWVsZERlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19vcHRpb25zKCkgewotICBfaGFz
X2JpdHNfWzBdIHw9IDB4MDAwMDAyMDB1OwotfQotaW5saW5lIHZvaWQgRmllbGREZXNjcmlwdG9y
UHJvdG86OmNsZWFyX2hhc19vcHRpb25zKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAw
MjAwdTsKLX0KLWlubGluZSB2b2lkIEZpZWxkRGVzY3JpcHRvclByb3RvOjpjbGVhcl9vcHRpb25z
KCkgewotICBpZiAob3B0aW9uc18gIT0gTlVMTCkgb3B0aW9uc18tPjo6Z29vZ2xlOjpwcm90b2J1
Zjo6RmllbGRPcHRpb25zOjpDbGVhcigpOwotICBjbGVhcl9oYXNfb3B0aW9ucygpOwotfQotaW5s
aW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRPcHRpb25zJiBGaWVsZERlc2NyaXB0
b3JQcm90bzo6b3B0aW9ucygpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykK
LSAgcmV0dXJuIG9wdGlvbnNfICE9IE5VTEwgPyAqb3B0aW9uc18gOiAqZGVmYXVsdF9pbnN0YW5j
ZV8tPm9wdGlvbnNfOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRPcHRpb25z
KiBGaWVsZERlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9vcHRpb25zKCkgewotICBzZXRfaGFzX29w
dGlvbnMoKTsKLSAgaWYgKG9wdGlvbnNfID09IE5VTEwpIHsKLSAgICBvcHRpb25zXyA9IG5ldyA6
Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uczsKLSAgfQotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y
UHJvdG8ub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfOwotfQotaW5saW5lIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6RmllbGRPcHRpb25zKiBGaWVsZERlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9vcHRp
b25zKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29n
bGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAgY2xlYXJfaGFzX29w
dGlvbnMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnMqIHRlbXAgPSBvcHRp
b25zXzsKLSAgb3B0aW9uc18gPSBOVUxMOwotICByZXR1cm4gdGVtcDsKLX0KLWlubGluZSB2b2lk
IEZpZWxkRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX29wdGlvbnMoOjpnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZE9wdGlvbnMqIG9wdGlvbnMpIHsKLSAgZGVsZXRlIG9wdGlvbnNfOwotICBv
cHRpb25zXyA9IG9wdGlvbnM7Ci0gIGlmIChvcHRpb25zKSB7Ci0gICAgc2V0X2hhc19vcHRpb25z
KCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX29wdGlvbnMoKTsKLSAgfQotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYu
RmllbGREZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBP
bmVvZkRlc2NyaXB0b3JQcm90bwotCi0vLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci1pbmxp
bmUgYm9vbCBPbmVvZkRlc2NyaXB0b3JQcm90bzo6aGFzX25hbWUoKSBjb25zdCB7Ci0gIHJldHVy
biAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgT25l
b2ZEZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAw
eDAwMDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIE9uZW9mRGVzY3JpcHRvclByb3RvOjpjbGVhcl9o
YXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMXU7Ci19Ci1pbmxpbmUg
dm9pZCBPbmVvZkRlc2NyaXB0b3JQcm90bzo6Y2xlYXJfbmFtZSgpIHsKLSAgbmFtZV8uQ2xlYXJU
b0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfbmFtZSgpOwotfQotaW5saW5lIGNvbnN0
IDo6c3RkOjpzdHJpbmcmIE9uZW9mRGVzY3JpcHRvclByb3RvOjpuYW1lKCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5PbmVv
ZkRlc2NyaXB0b3JQcm90by5uYW1lKQotICByZXR1cm4gbmFtZV8uR2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
fQotaW5saW5lIHZvaWQgT25lb2ZEZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0IDo6c3Rk
OjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdv
b2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5uYW1lKQotfQotaW5saW5lIHZvaWQg
T25lb2ZEZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNl
dF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1
ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xl
LnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci1pbmxpbmUgdm9pZCBPbmVv
ZkRlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXpl
KSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6
c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUu
cHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLWlubGluZSA6OnN0ZDo6c3Ry
aW5nKiBPbmVvZkRlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9uYW1lKCkgewotICBzZXRfaGFzX25h
bWUoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xl
LnByb3RvYnVmLk9uZW9mRGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIHJldHVybiBuYW1lXy5NdXRh
YmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIE9uZW9mRGVzY3JpcHRv
clByb3RvOjpyZWxlYXNlX25hbWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90by5uYW1lKQot
ICBjbGVhcl9oYXNfbmFtZSgpOwotICByZXR1cm4gbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LX0KLWlubGluZSB2b2lkIE9uZW9mRGVzY3JpcHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX25hbWUo
OjpzdGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hh
c19uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX25hbWUoKTsKLSAgfQotICBuYW1l
Xy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0
b3JQcm90by5uYW1lKQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEVudW1EZXNjcmlwdG9yUHJv
dG8KLQotLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotaW5saW5lIGJvb2wgRW51bURlc2Ny
aXB0b3JQcm90bzo6aGFzX25hbWUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAm
IDB4MDAwMDAwMDF1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6
c2V0X2hhc19uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDF1OwotfQotaW5s
aW5lIHZvaWQgRW51bURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX25hbWUoKSB7Ci0gIF9oYXNf
Yml0c19bMF0gJj0gfjB4MDAwMDAwMDF1OwotfQotaW5saW5lIHZvaWQgRW51bURlc2NyaXB0b3JQ
cm90bzo6Y2xlYXJfbmFtZSgpIHsKLSAgbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
ICBjbGVhcl9oYXNfbmFtZSgpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEVudW1E
ZXNjcmlwdG9yUHJvdG86Om5hbWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ubmFtZSkK
LSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIEVudW1EZXNj
cmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNl
dF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3Jp
cHRvclByb3RvLm5hbWUpCi19Ci1pbmxpbmUgdm9pZCBFbnVtRGVzY3JpcHRvclByb3RvOjpzZXRf
bmFtZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclBy
b3RvLm5hbWUpCi19Ci1pbmxpbmUgdm9pZCBFbnVtRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShj
b25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5h
bWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3Rv
Lm5hbWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogRW51bURlc2NyaXB0b3JQcm90bzo6bXV0
YWJsZV9uYW1lKCkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8u
bmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgOjpz
dGQ6OnN0cmluZyogRW51bURlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRW51
bURlc2NyaXB0b3JQcm90by5uYW1lKQotICBjbGVhcl9oYXNfbmFtZSgpOwotICByZXR1cm4gbmFt
ZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIEVudW1EZXNjcmlwdG9yUHJv
dG86OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKSB7Ci0gIGlmIChuYW1l
ICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX25hbWUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9o
YXNfbmFtZSgpOwotICB9Ci0gIG5hbWVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBuYW1lKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xl
LnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLQotLy8gcmVwZWF0ZWQgLmdv
b2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gdmFsdWUgPSAyOwotaW5saW5l
IGludCBFbnVtRGVzY3JpcHRvclByb3RvOjp2YWx1ZV9zaXplKCkgY29uc3QgewotICByZXR1cm4g
dmFsdWVfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIEVudW1EZXNjcmlwdG9yUHJvdG86OmNsZWFy
X3ZhbHVlKCkgewotICB2YWx1ZV8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OkVudW1WYWx1ZURlc2NyaXB0b3JQcm90byYgRW51bURlc2NyaXB0b3JQcm90bzo6
dmFsdWUoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8udmFsdWUpCi0gIHJl
dHVybiB2YWx1ZV8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkVu
dW1WYWx1ZURlc2NyaXB0b3JQcm90byogRW51bURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV92YWx1
ZShpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFi
bGU6Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8udmFsdWUpCi0gIHJldHVybiB2
YWx1ZV8uTXV0YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVt
VmFsdWVEZXNjcmlwdG9yUHJvdG8qIEVudW1EZXNjcmlwdG9yUHJvdG86OmFkZF92YWx1ZSgpIHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYu
RW51bURlc2NyaXB0b3JQcm90by52YWx1ZSkKLSAgcmV0dXJuIHZhbHVlXy5BZGQoKTsKLX0KLWlu
bGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RW51bVZhbHVlRGVzY3JpcHRvclByb3RvID4qCi1FbnVtRGVzY3JpcHRvclByb3RvOjpt
dXRhYmxlX3ZhbHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLnZhbHVlKQotICBy
ZXR1cm4gJnZhbHVlXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlRGVzY3JpcHRvclByb3Rv
ID4mCi1FbnVtRGVzY3JpcHRvclByb3RvOjp2YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9y
UHJvdG8udmFsdWUpCi0gIHJldHVybiB2YWx1ZV87Ci19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUu
cHJvdG9idWYuRW51bU9wdGlvbnMgb3B0aW9ucyA9IDM7Ci1pbmxpbmUgYm9vbCBFbnVtRGVzY3Jp
cHRvclByb3RvOjpoYXNfb3B0aW9ucygpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBd
ICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBFbnVtRGVzY3JpcHRvclByb3Rv
OjpzZXRfaGFzX29wdGlvbnMoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwNHU7Ci19
Ci1pbmxpbmUgdm9pZCBFbnVtRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfb3B0aW9ucygpIHsK
LSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwNHU7Ci19Ci1pbmxpbmUgdm9pZCBFbnVtRGVz
Y3JpcHRvclByb3RvOjpjbGVhcl9vcHRpb25zKCkgewotICBpZiAob3B0aW9uc18gIT0gTlVMTCkg
b3B0aW9uc18tPjo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bU9wdGlvbnM6OkNsZWFyKCk7Ci0gIGNs
ZWFyX2hhc19vcHRpb25zKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpF
bnVtT3B0aW9ucyYgRW51bURlc2NyaXB0b3JQcm90bzo6b3B0aW9ucygpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRW51bURl
c2NyaXB0b3JQcm90by5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc18gIT0gTlVMTCA/ICpvcHRp
b25zXyA6ICpkZWZhdWx0X2luc3RhbmNlXy0+b3B0aW9uc187Ci19Ci1pbmxpbmUgOjpnb29nbGU6
OnByb3RvYnVmOjpFbnVtT3B0aW9ucyogRW51bURlc2NyaXB0b3JQcm90bzo6bXV0YWJsZV9vcHRp
b25zKCkgewotICBzZXRfaGFzX29wdGlvbnMoKTsKLSAgaWYgKG9wdGlvbnNfID09IE5VTEwpIHsK
LSAgICBvcHRpb25zXyA9IG5ldyA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1PcHRpb25zOwotICB9
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90
b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXzsKLX0K
LWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1PcHRpb25zKiBFbnVtRGVzY3JpcHRvclBy
b3RvOjpyZWxlYXNlX29wdGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLm9wdGlvbnMp
Ci0gIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bU9wdGlv
bnMqIHRlbXAgPSBvcHRpb25zXzsKLSAgb3B0aW9uc18gPSBOVUxMOwotICByZXR1cm4gdGVtcDsK
LX0KLWlubGluZSB2b2lkIEVudW1EZXNjcmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfb3B0aW9u
cyg6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1PcHRpb25zKiBvcHRpb25zKSB7Ci0gIGRlbGV0ZSBv
cHRpb25zXzsKLSAgb3B0aW9uc18gPSBvcHRpb25zOwotICBpZiAob3B0aW9ucykgewotICAgIHNl
dF9oYXNfb3B0aW9ucygpOwotICB9IGVsc2UgewotICAgIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0g
IH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29v
Z2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0vLyBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8KLQotLy8gb3B0aW9uYWwgc3RyaW5n
IG5hbWUgPSAxOwotaW5saW5lIGJvb2wgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpoYXNfbmFt
ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMXUpICE9IDA7
Ci19Ci1pbmxpbmUgdm9pZCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OnNldF9oYXNfbmFtZSgp
IHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIEVudW1W
YWx1ZURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX25hbWUoKSB7Ci0gIF9oYXNfYml0c19bMF0g
Jj0gfjB4MDAwMDAwMDF1OwotfQotaW5saW5lIHZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3Rv
OjpjbGVhcl9uYW1lKCkgewotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGNs
ZWFyX2hhc19uYW1lKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgRW51bVZhbHVl
RGVzY3JpcHRvclByb3RvOjpuYW1lKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8u
bmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIEVu
dW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFs
dWUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVm
LkVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5uYW1lKQotfQotaW5saW5lIHZvaWQgRW51bVZhbHVl
RGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICBzZXRfaGFz
X25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90
b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLWlubGluZSB2b2lkIEVudW1W
YWx1ZURlc2NyaXB0b3JQcm90bzo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBz
aXplKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAg
IDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXpl
KSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29n
bGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLm5hbWUpCi19Ci1pbmxpbmUgOjpz
dGQ6OnN0cmluZyogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX25hbWUoKSB7Ci0g
IHNldF9oYXNfbmFtZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZTpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIHJl
dHVybiBuYW1lXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcq
IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRW51bVZhbHVl
RGVzY3JpcHRvclByb3RvLm5hbWUpCi0gIGNsZWFyX2hhc19uYW1lKCk7Ci0gIHJldHVybiBuYW1l
Xy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgRW51bVZhbHVlRGVzY3JpcHRv
clByb3RvOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAo
bmFtZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19uYW1lKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xl
YXJfaGFzX25hbWUoKTsKLSAgfQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFt
ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdv
b2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLQotLy8gb3B0
aW9uYWwgaW50MzIgbnVtYmVyID0gMjsKLWlubGluZSBib29sIEVudW1WYWx1ZURlc2NyaXB0b3JQ
cm90bzo6aGFzX251bWJlcigpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgw
MDAwMDAwMnUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86
OnNldF9oYXNfbnVtYmVyKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDJ1OwotfQot
aW5saW5lIHZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfbnVtYmVyKCkg
ewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAydTsKLX0KLWlubGluZSB2b2lkIEVudW1W
YWx1ZURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfbnVtYmVyKCkgewotICBudW1iZXJfID0gMDsKLSAg
Y2xlYXJfaGFzX251bWJlcigpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIg
RW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpudW1iZXIoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2Ny
aXB0b3JQcm90by5udW1iZXIpCi0gIHJldHVybiBudW1iZXJfOwotfQotaW5saW5lIHZvaWQgRW51
bVZhbHVlRGVzY3JpcHRvclByb3RvOjpzZXRfbnVtYmVyKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
MzIgdmFsdWUpIHsKLSAgc2V0X2hhc19udW1iZXIoKTsKLSAgbnVtYmVyXyA9IHZhbHVlOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVt
VmFsdWVEZXNjcmlwdG9yUHJvdG8ubnVtYmVyKQotfQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnBy
b3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMgb3B0aW9ucyA9IDM7Ci1pbmxpbmUgYm9vbCBFbnVtVmFs
dWVEZXNjcmlwdG9yUHJvdG86Omhhc19vcHRpb25zKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNf
Yml0c19bMF0gJiAweDAwMDAwMDA0dSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEVudW1WYWx1ZURl
c2NyaXB0b3JQcm90bzo6c2V0X2hhc19vcHRpb25zKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4
MDAwMDAwMDR1OwotfQotaW5saW5lIHZvaWQgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjpjbGVh
cl9oYXNfb3B0aW9ucygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwNHU7Ci19Ci1p
bmxpbmUgdm9pZCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG86OmNsZWFyX29wdGlvbnMoKSB7Ci0g
IGlmIChvcHRpb25zXyAhPSBOVUxMKSBvcHRpb25zXy0+Ojpnb29nbGU6OnByb3RvYnVmOjpFbnVt
VmFsdWVPcHRpb25zOjpDbGVhcigpOwotICBjbGVhcl9oYXNfb3B0aW9ucygpOwotfQotaW5saW5l
IGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlT3B0aW9ucyYgRW51bVZhbHVlRGVz
Y3JpcHRvclByb3RvOjpvcHRpb25zKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8u
b3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfICE9IE5VTEwgPyAqb3B0aW9uc18gOiAqZGVmYXVs
dF9pbnN0YW5jZV8tPm9wdGlvbnNfOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51
bVZhbHVlT3B0aW9ucyogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvOjptdXRhYmxlX29wdGlvbnMo
KSB7Ci0gIHNldF9oYXNfb3B0aW9ucygpOwotICBpZiAob3B0aW9uc18gPT0gTlVMTCkgewotICAg
IG9wdGlvbnNfID0gbmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlT3B0aW9uczsKLSAg
fQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJv
dG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25z
XzsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZU9wdGlvbnMqIEVudW1W
YWx1ZURlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9vcHRpb25zKCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVz
Y3JpcHRvclByb3RvLm9wdGlvbnMpCi0gIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RW51bVZhbHVlT3B0aW9ucyogdGVtcCA9IG9wdGlvbnNfOwotICBvcHRpb25z
XyA9IE5VTEw7Ci0gIHJldHVybiB0ZW1wOwotfQotaW5saW5lIHZvaWQgRW51bVZhbHVlRGVzY3Jp
cHRvclByb3RvOjpzZXRfYWxsb2NhdGVkX29wdGlvbnMoOjpnb29nbGU6OnByb3RvYnVmOjpFbnVt
VmFsdWVPcHRpb25zKiBvcHRpb25zKSB7Ci0gIGRlbGV0ZSBvcHRpb25zXzsKLSAgb3B0aW9uc18g
PSBvcHRpb25zOwotICBpZiAob3B0aW9ucykgewotICAgIHNldF9oYXNfb3B0aW9ucygpOwotICB9
IGVsc2UgewotICAgIGNsZWFyX2hhc19vcHRpb25zKCk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1
ZURlc2NyaXB0b3JQcm90by5vcHRpb25zKQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFNlcnZp
Y2VEZXNjcmlwdG9yUHJvdG8KLQotLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotaW5saW5l
IGJvb2wgU2VydmljZURlc2NyaXB0b3JQcm90bzo6aGFzX25hbWUoKSBjb25zdCB7Ci0gIHJldHVy
biAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgU2Vy
dmljZURlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19uYW1lKCkgewotICBfaGFzX2JpdHNfWzBdIHw9
IDB4MDAwMDAwMDF1OwotfQotaW5saW5lIHZvaWQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6Y2xl
YXJfaGFzX25hbWUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDF1OwotfQotaW5s
aW5lIHZvaWQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6Y2xlYXJfbmFtZSgpIHsKLSAgbmFtZV8u
Q2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfbmFtZSgpOwotfQotaW5saW5l
IGNvbnN0IDo6c3RkOjpzdHJpbmcmIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86Om5hbWUoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OnNldF9uYW1l
KGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1l
Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLm5hbWUpCi19
Ci1pbmxpbmUgdm9pZCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFy
KiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6
c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLm5hbWUpCi19
Ci1pbmxpbmUgdm9pZCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFy
KiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLm5hbWUp
Ci19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogU2VydmljZURlc2NyaXB0b3JQcm90bzo6bXV0YWJs
ZV9uYW1lKCkgewotICBzZXRfaGFzX25hbWUoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8u
bmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgOjpz
dGQ6OnN0cmluZyogU2VydmljZURlc2NyaXB0b3JQcm90bzo6cmVsZWFzZV9uYW1lKCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYu
U2VydmljZURlc2NyaXB0b3JQcm90by5uYW1lKQotICBjbGVhcl9oYXNfbmFtZSgpOwotICByZXR1
cm4gbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIFNlcnZpY2VEZXNj
cmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKSB7Ci0g
IGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX25hbWUoKTsKLSAgfSBlbHNlIHsKLSAg
ICBjbGVhcl9oYXNfbmFtZSgpOwotICB9Ci0gIG5hbWVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LCBuYW1lKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0
ZWQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ubmFtZSkKLX0KLQotLy8g
cmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8gbWV0aG9kID0g
MjsKLWlubGluZSBpbnQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6bWV0aG9kX3NpemUoKSBjb25z
dCB7Ci0gIHJldHVybiBtZXRob2RfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIFNlcnZpY2VEZXNj
cmlwdG9yUHJvdG86OmNsZWFyX21ldGhvZCgpIHsKLSAgbWV0aG9kXy5DbGVhcigpOwotfQotaW5s
aW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kRGVzY3JpcHRvclByb3RvJiBTZXJ2
aWNlRGVzY3JpcHRvclByb3RvOjptZXRob2QoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNj
cmlwdG9yUHJvdG8ubWV0aG9kKQotICByZXR1cm4gbWV0aG9kXy5HZXQoaW5kZXgpOwotfQotaW5s
aW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kRGVzY3JpcHRvclByb3RvKiBTZXJ2aWNlRGVz
Y3JpcHRvclByb3RvOjptdXRhYmxlX21ldGhvZChpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNj
cmlwdG9yUHJvdG8ubWV0aG9kKQotICByZXR1cm4gbWV0aG9kXy5NdXRhYmxlKGluZGV4KTsKLX0K
LWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZERlc2NyaXB0b3JQcm90byogU2Vydmlj
ZURlc2NyaXB0b3JQcm90bzo6YWRkX21ldGhvZCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5t
ZXRob2QpCi0gIHJldHVybiBtZXRob2RfLkFkZCgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2REZXNjcmlw
dG9yUHJvdG8gPioKLVNlcnZpY2VEZXNjcmlwdG9yUHJvdG86Om11dGFibGVfbWV0aG9kKCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5w
cm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLm1ldGhvZCkKLSAgcmV0dXJuICZtZXRob2Rf
OwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXRob2REZXNjcmlwdG9yUHJvdG8gPiYKLVNlcnZpY2VEZXNj
cmlwdG9yUHJvdG86Om1ldGhvZCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ubWV0
aG9kKQotICByZXR1cm4gbWV0aG9kXzsKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1
Zi5TZXJ2aWNlT3B0aW9ucyBvcHRpb25zID0gMzsKLWlubGluZSBib29sIFNlcnZpY2VEZXNjcmlw
dG9yUHJvdG86Omhhc19vcHRpb25zKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0g
JiAweDAwMDAwMDA0dSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIFNlcnZpY2VEZXNjcmlwdG9yUHJv
dG86OnNldF9oYXNfb3B0aW9ucygpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDA0dTsK
LX0KLWlubGluZSB2b2lkIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OmNsZWFyX2hhc19vcHRpb25z
KCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDA0dTsKLX0KLWlubGluZSB2b2lkIFNl
cnZpY2VEZXNjcmlwdG9yUHJvdG86OmNsZWFyX29wdGlvbnMoKSB7Ci0gIGlmIChvcHRpb25zXyAh
PSBOVUxMKSBvcHRpb25zXy0+Ojpnb29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlT3B0aW9uczo6Q2xl
YXIoKTsKLSAgY2xlYXJfaGFzX29wdGlvbnMoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6OlNlcnZpY2VPcHRpb25zJiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvOjpvcHRpb25z
KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2ds
ZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi0gIHJldHVybiBvcHRp
b25zXyAhPSBOVUxMID8gKm9wdGlvbnNfIDogKmRlZmF1bHRfaW5zdGFuY2VfLT5vcHRpb25zXzsK
LX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlNlcnZpY2VPcHRpb25zKiBTZXJ2aWNlRGVz
Y3JpcHRvclByb3RvOjptdXRhYmxlX29wdGlvbnMoKSB7Ci0gIHNldF9oYXNfb3B0aW9ucygpOwot
ICBpZiAob3B0aW9uc18gPT0gTlVMTCkgewotICAgIG9wdGlvbnNfID0gbmV3IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6U2VydmljZU9wdGlvbnM7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8u
b3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6U2VydmljZU9wdGlvbnMqIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG86OnJlbGVhc2Vfb3B0aW9u
cygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xl
LnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAgY2xlYXJfaGFzX29w
dGlvbnMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpTZXJ2aWNlT3B0aW9ucyogdGVtcCA9IG9w
dGlvbnNfOwotICBvcHRpb25zXyA9IE5VTEw7Ci0gIHJldHVybiB0ZW1wOwotfQotaW5saW5lIHZv
aWQgU2VydmljZURlc2NyaXB0b3JQcm90bzo6c2V0X2FsbG9jYXRlZF9vcHRpb25zKDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6U2VydmljZU9wdGlvbnMqIG9wdGlvbnMpIHsKLSAgZGVsZXRlIG9wdGlvbnNf
OwotICBvcHRpb25zXyA9IG9wdGlvbnM7Ci0gIGlmIChvcHRpb25zKSB7Ci0gICAgc2V0X2hhc19v
cHRpb25zKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX29wdGlvbnMoKTsKLSAgfQotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJv
dG9idWYuU2VydmljZURlc2NyaXB0b3JQcm90by5vcHRpb25zKQotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLS8vIE1ldGhvZERlc2NyaXB0b3JQcm90bwotCi0vLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9
IDE7Ci1pbmxpbmUgYm9vbCBNZXRob2REZXNjcmlwdG9yUHJvdG86Omhhc19uYW1lKCkgY29uc3Qg
ewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLWlubGlu
ZSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19uYW1lKCkgewotICBfaGFzX2Jp
dHNfWzBdIHw9IDB4MDAwMDAwMDF1OwotfQotaW5saW5lIHZvaWQgTWV0aG9kRGVzY3JpcHRvclBy
b3RvOjpjbGVhcl9oYXNfbmFtZSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMXU7
Ci19Ci1pbmxpbmUgdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OmNsZWFyX25hbWUoKSB7Ci0g
IG5hbWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX25hbWUoKTsKLX0K
LWlubGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBNZXRob2REZXNjcmlwdG9yUHJvdG86Om5hbWUo
KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xl
LnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5uYW1lKQotICByZXR1cm4gbmFtZV8uR2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXRf
bmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX25hbWUoKTsKLSAg
bmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLm5hbWUp
Ci19Ci1pbmxpbmUgdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNldF9uYW1lKGNvbnN0IGNo
YXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfbmFtZSgpOwotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwg
OjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5uYW1lKQot
fQotaW5saW5lIHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXRfbmFtZShjb25zdCBjaGFy
KiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIG5hbWVfLlNldE5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ubmFtZSkK
LX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBNZXRob2REZXNjcmlwdG9yUHJvdG86Om11dGFibGVf
bmFtZSgpIHsKLSAgc2V0X2hhc19uYW1lKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ubmFt
ZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgOjpzdGQ6
OnN0cmluZyogTWV0aG9kRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX25hbWUoKSB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5NZXRo
b2REZXNjcmlwdG9yUHJvdG8ubmFtZSkKLSAgY2xlYXJfaGFzX25hbWUoKTsKLSAgcmV0dXJuIG5h
bWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBNZXRob2REZXNjcmlwdG9y
UHJvdG86OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKSB7Ci0gIGlmIChu
YW1lICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX25hbWUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVh
cl9oYXNfbmFtZSgpOwotICB9Ci0gIG5hbWVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBuYW1l
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29v
Z2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5uYW1lKQotfQotCi0vLyBvcHRpb25h
bCBzdHJpbmcgaW5wdXRfdHlwZSA9IDI7Ci1pbmxpbmUgYm9vbCBNZXRob2REZXNjcmlwdG9yUHJv
dG86Omhhc19pbnB1dF90eXBlKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAw
eDAwMDAwMDAydSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6
c2V0X2hhc19pbnB1dF90eXBlKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDJ1Owot
fQotaW5saW5lIHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfaW5wdXRfdHlw
ZSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMnU7Ci19Ci1pbmxpbmUgdm9pZCBN
ZXRob2REZXNjcmlwdG9yUHJvdG86OmNsZWFyX2lucHV0X3R5cGUoKSB7Ci0gIGlucHV0X3R5cGVf
LkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX2lucHV0X3R5cGUoKTsKLX0K
LWlubGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBNZXRob2REZXNjcmlwdG9yUHJvdG86OmlucHV0
X3R5cGUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6
Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5pbnB1dF90eXBlKQotICByZXR1
cm4gaW5wdXRfdHlwZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgTWV0aG9kRGVz
Y3JpcHRvclByb3RvOjpzZXRfaW5wdXRfdHlwZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkg
ewotICBzZXRfaGFzX2lucHV0X3R5cGUoKTsKLSAgaW5wdXRfdHlwZV8uU2V0Tm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCks
IHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUu
cHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLmlucHV0X3R5cGUpCi19Ci1pbmxpbmUgdm9p
ZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNldF9pbnB1dF90eXBlKGNvbnN0IGNoYXIqIHZhbHVl
KSB7Ci0gIHNldF9oYXNfaW5wdXRfdHlwZSgpOwotICBpbnB1dF90eXBlXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5pbnB1
dF90eXBlKQotfQotaW5saW5lIHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXRfaW5wdXRf
dHlwZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19pbnB1dF90
eXBlKCk7Ci0gIGlucHV0X3R5cGVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmlu
ZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5N
ZXRob2REZXNjcmlwdG9yUHJvdG8uaW5wdXRfdHlwZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5n
KiBNZXRob2REZXNjcmlwdG9yUHJvdG86Om11dGFibGVfaW5wdXRfdHlwZSgpIHsKLSAgc2V0X2hh
c19pbnB1dF90eXBlKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRh
YmxlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uaW5wdXRfdHlwZSkKLSAg
cmV0dXJuIGlucHV0X3R5cGVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgOjpzdGQ6
OnN0cmluZyogTWV0aG9kRGVzY3JpcHRvclByb3RvOjpyZWxlYXNlX2lucHV0X3R5cGUoKSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1
Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uaW5wdXRfdHlwZSkKLSAgY2xlYXJfaGFzX2lucHV0X3R5
cGUoKTsKLSAgcmV0dXJuIGlucHV0X3R5cGVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxp
bmUgdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfaW5wdXRfdHlwZSg6
OnN0ZDo6c3RyaW5nKiBpbnB1dF90eXBlKSB7Ci0gIGlmIChpbnB1dF90eXBlICE9IE5VTEwpIHsK
LSAgICBzZXRfaGFzX2lucHV0X3R5cGUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfaW5w
dXRfdHlwZSgpOwotICB9Ci0gIGlucHV0X3R5cGVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBp
bnB1dF90eXBlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxv
Y2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5pbnB1dF90eXBlKQot
fQotCi0vLyBvcHRpb25hbCBzdHJpbmcgb3V0cHV0X3R5cGUgPSAzOwotaW5saW5lIGJvb2wgTWV0
aG9kRGVzY3JpcHRvclByb3RvOjpoYXNfb3V0cHV0X3R5cGUoKSBjb25zdCB7Ci0gIHJldHVybiAo
X2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDR1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgTWV0aG9k
RGVzY3JpcHRvclByb3RvOjpzZXRfaGFzX291dHB1dF90eXBlKCkgewotICBfaGFzX2JpdHNfWzBd
IHw9IDB4MDAwMDAwMDR1OwotfQotaW5saW5lIHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpj
bGVhcl9oYXNfb3V0cHV0X3R5cGUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDR1
OwotfQotaW5saW5lIHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpjbGVhcl9vdXRwdXRfdHlw
ZSgpIHsKLSAgb3V0cHV0X3R5cGVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJf
aGFzX291dHB1dF90eXBlKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgTWV0aG9k
RGVzY3JpcHRvclByb3RvOjpvdXRwdXRfdHlwZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclBy
b3RvLm91dHB1dF90eXBlKQotICByZXR1cm4gb3V0cHV0X3R5cGVfLkdldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LX0KLWlubGluZSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6c2V0X291dHB1dF90eXBlKGNv
bnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfb3V0cHV0X3R5cGUoKTsKLSAg
b3V0cHV0X3R5cGVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90
by5vdXRwdXRfdHlwZSkKLX0KLWlubGluZSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6c2V0
X291dHB1dF90eXBlKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfb3V0cHV0X3R5cGUo
KTsKLSAgb3V0cHV0X3R5cGVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJv
dG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLm91dHB1dF90eXBlKQotfQotaW5saW5lIHZvaWQg
TWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXRfb3V0cHV0X3R5cGUoY29uc3QgY2hhciogdmFsdWUs
IHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfb3V0cHV0X3R5cGUoKTsKLSAgb3V0cHV0X3R5cGVf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8u
b3V0cHV0X3R5cGUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogTWV0aG9kRGVzY3JpcHRvclBy
b3RvOjptdXRhYmxlX291dHB1dF90eXBlKCkgewotICBzZXRfaGFzX291dHB1dF90eXBlKCk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1
Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ub3V0cHV0X3R5cGUpCi0gIHJldHVybiBvdXRwdXRfdHlw
ZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBNZXRob2RE
ZXNjcmlwdG9yUHJvdG86OnJlbGVhc2Vfb3V0cHV0X3R5cGUoKSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlw
dG9yUHJvdG8ub3V0cHV0X3R5cGUpCi0gIGNsZWFyX2hhc19vdXRwdXRfdHlwZSgpOwotICByZXR1
cm4gb3V0cHV0X3R5cGVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBNZXRo
b2REZXNjcmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfb3V0cHV0X3R5cGUoOjpzdGQ6OnN0cmlu
Zyogb3V0cHV0X3R5cGUpIHsKLSAgaWYgKG91dHB1dF90eXBlICE9IE5VTEwpIHsKLSAgICBzZXRf
aGFzX291dHB1dF90eXBlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX291dHB1dF90eXBl
KCk7Ci0gIH0KLSAgb3V0cHV0X3R5cGVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBvdXRwdXRf
dHlwZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVk
Omdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ub3V0cHV0X3R5cGUpCi19Ci0K
LS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucyBvcHRpb25zID0gNDsK
LWlubGluZSBib29sIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6aGFzX29wdGlvbnMoKSBjb25zdCB7
Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDh1KSAhPSAwOwotfQotaW5saW5l
IHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXRfaGFzX29wdGlvbnMoKSB7Ci0gIF9oYXNf
Yml0c19bMF0gfD0gMHgwMDAwMDAwOHU7Ci19Ci1pbmxpbmUgdm9pZCBNZXRob2REZXNjcmlwdG9y
UHJvdG86OmNsZWFyX2hhc19vcHRpb25zKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAw
MDA4dTsKLX0KLWlubGluZSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfb3B0aW9u
cygpIHsKLSAgaWYgKG9wdGlvbnNfICE9IE5VTEwpIG9wdGlvbnNfLT46Omdvb2dsZTo6cHJvdG9i
dWY6Ok1ldGhvZE9wdGlvbnM6OkNsZWFyKCk7Ci0gIGNsZWFyX2hhc19vcHRpb25zKCk7Ci19Ci1p
bmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2RPcHRpb25zJiBNZXRob2REZXNj
cmlwdG9yUHJvdG86Om9wdGlvbnMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5vcHRp
b25zKQotICByZXR1cm4gb3B0aW9uc18gIT0gTlVMTCA/ICpvcHRpb25zXyA6ICpkZWZhdWx0X2lu
c3RhbmNlXy0+b3B0aW9uc187Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2RP
cHRpb25zKiBNZXRob2REZXNjcmlwdG9yUHJvdG86Om11dGFibGVfb3B0aW9ucygpIHsKLSAgc2V0
X2hhc19vcHRpb25zKCk7Ci0gIGlmIChvcHRpb25zXyA9PSBOVUxMKSB7Ci0gICAgb3B0aW9uc18g
PSBuZXcgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2RPcHRpb25zOwotICB9Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2RE
ZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfOwotfQotaW5saW5lIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWV0aG9kT3B0aW9ucyogTWV0aG9kRGVzY3JpcHRvclByb3RvOjpy
ZWxlYXNlX29wdGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9y
ZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8ub3B0aW9ucykKLSAg
Y2xlYXJfaGFzX29wdGlvbnMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRob2RPcHRpb25z
KiB0ZW1wID0gb3B0aW9uc187Ci0gIG9wdGlvbnNfID0gTlVMTDsKLSAgcmV0dXJuIHRlbXA7Ci19
Ci1pbmxpbmUgdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNldF9hbGxvY2F0ZWRfb3B0aW9u
cyg6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGhvZE9wdGlvbnMqIG9wdGlvbnMpIHsKLSAgZGVsZXRl
IG9wdGlvbnNfOwotICBvcHRpb25zXyA9IG9wdGlvbnM7Ci0gIGlmIChvcHRpb25zKSB7Ci0gICAg
c2V0X2hhc19vcHRpb25zKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX29wdGlvbnMoKTsK
LSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpn
b29nbGUucHJvdG9idWYuTWV0aG9kRGVzY3JpcHRvclByb3RvLm9wdGlvbnMpCi19Ci0KLS8vIG9w
dGlvbmFsIGJvb2wgY2xpZW50X3N0cmVhbWluZyA9IDUgW2RlZmF1bHQgPSBmYWxzZV07Ci1pbmxp
bmUgYm9vbCBNZXRob2REZXNjcmlwdG9yUHJvdG86Omhhc19jbGllbnRfc3RyZWFtaW5nKCkgY29u
c3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDEwdSkgIT0gMDsKLX0KLWlu
bGluZSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6c2V0X2hhc19jbGllbnRfc3RyZWFtaW5n
KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMTB1OwotfQotaW5saW5lIHZvaWQgTWV0
aG9kRGVzY3JpcHRvclByb3RvOjpjbGVhcl9oYXNfY2xpZW50X3N0cmVhbWluZygpIHsKLSAgX2hh
c19iaXRzX1swXSAmPSB+MHgwMDAwMDAxMHU7Ci19Ci1pbmxpbmUgdm9pZCBNZXRob2REZXNjcmlw
dG9yUHJvdG86OmNsZWFyX2NsaWVudF9zdHJlYW1pbmcoKSB7Ci0gIGNsaWVudF9zdHJlYW1pbmdf
ID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19jbGllbnRfc3RyZWFtaW5nKCk7Ci19Ci1pbmxpbmUgYm9v
bCBNZXRob2REZXNjcmlwdG9yUHJvdG86OmNsaWVudF9zdHJlYW1pbmcoKSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhv
ZERlc2NyaXB0b3JQcm90by5jbGllbnRfc3RyZWFtaW5nKQotICByZXR1cm4gY2xpZW50X3N0cmVh
bWluZ187Ci19Ci1pbmxpbmUgdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNldF9jbGllbnRf
c3RyZWFtaW5nKGJvb2wgdmFsdWUpIHsKLSAgc2V0X2hhc19jbGllbnRfc3RyZWFtaW5nKCk7Ci0g
IGNsaWVudF9zdHJlYW1pbmdfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90by5jbGllbnRf
c3RyZWFtaW5nKQotfQotCi0vLyBvcHRpb25hbCBib29sIHNlcnZlcl9zdHJlYW1pbmcgPSA2IFtk
ZWZhdWx0ID0gZmFsc2VdOwotaW5saW5lIGJvb2wgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpoYXNf
c2VydmVyX3N0cmVhbWluZygpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgw
MDAwMDAyMHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBNZXRob2REZXNjcmlwdG9yUHJvdG86OnNl
dF9oYXNfc2VydmVyX3N0cmVhbWluZygpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDIw
dTsKLX0KLWlubGluZSB2b2lkIE1ldGhvZERlc2NyaXB0b3JQcm90bzo6Y2xlYXJfaGFzX3NlcnZl
cl9zdHJlYW1pbmcoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMjB1OwotfQotaW5s
aW5lIHZvaWQgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpjbGVhcl9zZXJ2ZXJfc3RyZWFtaW5nKCkg
ewotICBzZXJ2ZXJfc3RyZWFtaW5nXyA9IGZhbHNlOwotICBjbGVhcl9oYXNfc2VydmVyX3N0cmVh
bWluZygpOwotfQotaW5saW5lIGJvb2wgTWV0aG9kRGVzY3JpcHRvclByb3RvOjpzZXJ2ZXJfc3Ry
ZWFtaW5nKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0
Omdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG8uc2VydmVyX3N0cmVhbWluZykK
LSAgcmV0dXJuIHNlcnZlcl9zdHJlYW1pbmdfOwotfQotaW5saW5lIHZvaWQgTWV0aG9kRGVzY3Jp
cHRvclByb3RvOjpzZXRfc2VydmVyX3N0cmVhbWluZyhib29sIHZhbHVlKSB7Ci0gIHNldF9oYXNf
c2VydmVyX3N0cmVhbWluZygpOwotICBzZXJ2ZXJfc3RyZWFtaW5nXyA9IHZhbHVlOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2RE
ZXNjcmlwdG9yUHJvdG8uc2VydmVyX3N0cmVhbWluZykKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0v
LyBGaWxlT3B0aW9ucwotCi0vLyBvcHRpb25hbCBzdHJpbmcgamF2YV9wYWNrYWdlID0gMTsKLWlu
bGluZSBib29sIEZpbGVPcHRpb25zOjpoYXNfamF2YV9wYWNrYWdlKCkgY29uc3QgewotICByZXR1
cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZp
bGVPcHRpb25zOjpzZXRfaGFzX2phdmFfcGFja2FnZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAw
eDAwMDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9oYXNfamF2YV9w
YWNrYWdlKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAxdTsKLX0KLWlubGluZSB2
b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9qYXZhX3BhY2thZ2UoKSB7Ci0gIGphdmFfcGFja2FnZV8u
Q2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfamF2YV9wYWNrYWdlKCk7Ci19
Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgRmlsZU9wdGlvbnM6OmphdmFfcGFja2FnZSgp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUu
cHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9wYWNrYWdlKQotICByZXR1cm4gamF2YV9wYWNrYWdl
Xy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X2phdmFf
cGFja2FnZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX2phdmFfcGFj
a2FnZSgpOwotICBqYXZhX3BhY2thZ2VfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRp
b25zLmphdmFfcGFja2FnZSkKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfamF2YV9w
YWNrYWdlKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfamF2YV9wYWNrYWdlKCk7Ci0g
IGphdmFfcGFja2FnZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1
Zi5GaWxlT3B0aW9ucy5qYXZhX3BhY2thZ2UpCi19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6
c2V0X2phdmFfcGFja2FnZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0
X2hhc19qYXZhX3BhY2thZ2UoKTsKLSAgamF2YV9wYWNrYWdlXy5TZXROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAg
ICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBz
aXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpn
b29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9wYWNrYWdlKQotfQotaW5saW5lIDo6c3Rk
OjpzdHJpbmcqIEZpbGVPcHRpb25zOjptdXRhYmxlX2phdmFfcGFja2FnZSgpIHsKLSAgc2V0X2hh
c19qYXZhX3BhY2thZ2UoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211
dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfcGFja2FnZSkKLSAgcmV0dXJu
IGphdmFfcGFja2FnZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3Ry
aW5nKiBGaWxlT3B0aW9uczo6cmVsZWFzZV9qYXZhX3BhY2thZ2UoKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5qYXZhX3BhY2thZ2UpCi0gIGNsZWFyX2hhc19qYXZhX3BhY2thZ2UoKTsKLSAgcmV0dXJuIGph
dmFfcGFja2FnZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRp
b25zOjpzZXRfYWxsb2NhdGVkX2phdmFfcGFja2FnZSg6OnN0ZDo6c3RyaW5nKiBqYXZhX3BhY2th
Z2UpIHsKLSAgaWYgKGphdmFfcGFja2FnZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19qYXZhX3Bh
Y2thZ2UoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfamF2YV9wYWNrYWdlKCk7Ci0gIH0K
LSAgamF2YV9wYWNrYWdlXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgamF2YV9wYWNrYWdlKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xl
LnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfcGFja2FnZSkKLX0KLQotLy8gb3B0aW9uYWwgc3Ry
aW5nIGphdmFfb3V0ZXJfY2xhc3NuYW1lID0gODsKLWlubGluZSBib29sIEZpbGVPcHRpb25zOjpo
YXNfamF2YV9vdXRlcl9jbGFzc25hbWUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1sw
XSAmIDB4MDAwMDAwMDJ1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9o
YXNfamF2YV9vdXRlcl9jbGFzc25hbWUoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAw
MnU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfaGFzX2phdmFfb3V0ZXJfY2xh
c3NuYW1lKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAydTsKLX0KLWlubGluZSB2
b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9qYXZhX291dGVyX2NsYXNzbmFtZSgpIHsKLSAgamF2YV9v
dXRlcl9jbGFzc25hbWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX2ph
dmFfb3V0ZXJfY2xhc3NuYW1lKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgRmls
ZU9wdGlvbnM6OmphdmFfb3V0ZXJfY2xhc3NuYW1lKCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5qYXZh
X291dGVyX2NsYXNzbmFtZSkKLSAgcmV0dXJuIGphdmFfb3V0ZXJfY2xhc3NuYW1lXy5HZXROb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X2phdmFfb3V0ZXJfY2xh
c3NuYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfamF2YV9vdXRl
cl9jbGFzc25hbWUoKTsKLSAgamF2YV9vdXRlcl9jbGFzc25hbWVfLlNldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2
YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnBy
b3RvYnVmLkZpbGVPcHRpb25zLmphdmFfb3V0ZXJfY2xhc3NuYW1lKQotfQotaW5saW5lIHZvaWQg
RmlsZU9wdGlvbnM6OnNldF9qYXZhX291dGVyX2NsYXNzbmFtZShjb25zdCBjaGFyKiB2YWx1ZSkg
ewotICBzZXRfaGFzX2phdmFfb3V0ZXJfY2xhc3NuYW1lKCk7Ci0gIGphdmFfb3V0ZXJfY2xhc3Nu
YW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRp
b25zLmphdmFfb3V0ZXJfY2xhc3NuYW1lKQotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OnNl
dF9qYXZhX291dGVyX2NsYXNzbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsK
LSAgc2V0X2hhc19qYXZhX291dGVyX2NsYXNzbmFtZSgpOwotICBqYXZhX291dGVyX2NsYXNzbmFt
ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfb3V0
ZXJfY2xhc3NuYW1lKQotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpbGVPcHRpb25zOjptdXRh
YmxlX2phdmFfb3V0ZXJfY2xhc3NuYW1lKCkgewotICBzZXRfaGFzX2phdmFfb3V0ZXJfY2xhc3Nu
YW1lKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2ds
ZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5qYXZhX291dGVyX2NsYXNzbmFtZSkKLSAgcmV0dXJuIGph
dmFfb3V0ZXJfY2xhc3NuYW1lXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3Rk
OjpzdHJpbmcqIEZpbGVPcHRpb25zOjpyZWxlYXNlX2phdmFfb3V0ZXJfY2xhc3NuYW1lKCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9i
dWYuRmlsZU9wdGlvbnMuamF2YV9vdXRlcl9jbGFzc25hbWUpCi0gIGNsZWFyX2hhc19qYXZhX291
dGVyX2NsYXNzbmFtZSgpOwotICByZXR1cm4gamF2YV9vdXRlcl9jbGFzc25hbWVfLlJlbGVhc2VO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X2FsbG9jYXRlZF9q
YXZhX291dGVyX2NsYXNzbmFtZSg6OnN0ZDo6c3RyaW5nKiBqYXZhX291dGVyX2NsYXNzbmFtZSkg
ewotICBpZiAoamF2YV9vdXRlcl9jbGFzc25hbWUgIT0gTlVMTCkgewotICAgIHNldF9oYXNfamF2
YV9vdXRlcl9jbGFzc25hbWUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfamF2YV9vdXRl
cl9jbGFzc25hbWUoKTsKLSAgfQotICBqYXZhX291dGVyX2NsYXNzbmFtZV8uU2V0QWxsb2NhdGVk
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIGphdmFfb3V0ZXJfY2xhc3NuYW1lKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25z
LmphdmFfb3V0ZXJfY2xhc3NuYW1lKQotfQotCi0vLyBvcHRpb25hbCBib29sIGphdmFfbXVsdGlw
bGVfZmlsZXMgPSAxMCBbZGVmYXVsdCA9IGZhbHNlXTsKLWlubGluZSBib29sIEZpbGVPcHRpb25z
OjpoYXNfamF2YV9tdWx0aXBsZV9maWxlcygpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNf
WzBdICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0
X2hhc19qYXZhX211bHRpcGxlX2ZpbGVzKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAw
MDR1OwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX2hhc19qYXZhX211bHRpcGxl
X2ZpbGVzKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDA0dTsKLX0KLWlubGluZSB2
b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9qYXZhX211bHRpcGxlX2ZpbGVzKCkgewotICBqYXZhX211
bHRpcGxlX2ZpbGVzXyA9IGZhbHNlOwotICBjbGVhcl9oYXNfamF2YV9tdWx0aXBsZV9maWxlcygp
OwotfQotaW5saW5lIGJvb2wgRmlsZU9wdGlvbnM6OmphdmFfbXVsdGlwbGVfZmlsZXMoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLkZpbGVPcHRpb25zLmphdmFfbXVsdGlwbGVfZmlsZXMpCi0gIHJldHVybiBqYXZhX211bHRp
cGxlX2ZpbGVzXzsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfamF2YV9tdWx0aXBs
ZV9maWxlcyhib29sIHZhbHVlKSB7Ci0gIHNldF9oYXNfamF2YV9tdWx0aXBsZV9maWxlcygpOwot
ICBqYXZhX211bHRpcGxlX2ZpbGVzXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5qYXZhX211bHRpcGxl
X2ZpbGVzKQotfQotCi0vLyBvcHRpb25hbCBib29sIGphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9o
YXNoID0gMjAgW2RlZmF1bHQgPSBmYWxzZV07Ci1pbmxpbmUgYm9vbCBGaWxlT3B0aW9uczo6aGFz
X2phdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNf
Yml0c19bMF0gJiAweDAwMDAwMDA4dSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25z
OjpzZXRfaGFzX2phdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoKCkgewotICBfaGFzX2JpdHNf
WzBdIHw9IDB4MDAwMDAwMDh1OwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX2hh
c19qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+
MHgwMDAwMDAwOHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfamF2YV9nZW5l
cmF0ZV9lcXVhbHNfYW5kX2hhc2goKSB7Ci0gIGphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNo
XyA9IGZhbHNlOwotICBjbGVhcl9oYXNfamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2goKTsK
LX0KLWlubGluZSBib29sIEZpbGVPcHRpb25zOjpqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFz
aCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gpCi0g
IHJldHVybiBqYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaF87Ci19Ci1pbmxpbmUgdm9pZCBG
aWxlT3B0aW9uczo6c2V0X2phdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoKGJvb2wgdmFsdWUp
IHsKLSAgc2V0X2hhc19qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaCgpOwotICBqYXZhX2dl
bmVyYXRlX2VxdWFsc19hbmRfaGFzaF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9nZW5lcmF0
ZV9lcXVhbHNfYW5kX2hhc2gpCi19Ci0KLS8vIG9wdGlvbmFsIGJvb2wgamF2YV9zdHJpbmdfY2hl
Y2tfdXRmOCA9IDI3IFtkZWZhdWx0ID0gZmFsc2VdOwotaW5saW5lIGJvb2wgRmlsZU9wdGlvbnM6
Omhhc19qYXZhX3N0cmluZ19jaGVja191dGY4KCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0
c19bMF0gJiAweDAwMDAwMDEwdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpz
ZXRfaGFzX2phdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgw
MDAwMDAxMHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfaGFzX2phdmFfc3Ry
aW5nX2NoZWNrX3V0ZjgoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMTB1OwotfQot
aW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX2phdmFfc3RyaW5nX2NoZWNrX3V0ZjgoKSB7
Ci0gIGphdmFfc3RyaW5nX2NoZWNrX3V0ZjhfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19qYXZhX3N0
cmluZ19jaGVja191dGY4KCk7Ci19Ci1pbmxpbmUgYm9vbCBGaWxlT3B0aW9uczo6amF2YV9zdHJp
bmdfY2hlY2tfdXRmOCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuamF2YV9zdHJpbmdfY2hlY2tfdXRm
OCkKLSAgcmV0dXJuIGphdmFfc3RyaW5nX2NoZWNrX3V0ZjhfOwotfQotaW5saW5lIHZvaWQgRmls
ZU9wdGlvbnM6OnNldF9qYXZhX3N0cmluZ19jaGVja191dGY4KGJvb2wgdmFsdWUpIHsKLSAgc2V0
X2hhc19qYXZhX3N0cmluZ19jaGVja191dGY4KCk7Ci0gIGphdmFfc3RyaW5nX2NoZWNrX3V0Zjhf
ID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xl
LnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfc3RyaW5nX2NoZWNrX3V0ZjgpCi19Ci0KLS8vIG9w
dGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlIG9wdGltaXpl
X2ZvciA9IDkgW2RlZmF1bHQgPSBTUEVFRF07Ci1pbmxpbmUgYm9vbCBGaWxlT3B0aW9uczo6aGFz
X29wdGltaXplX2ZvcigpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAw
MDAyMHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X2hhc19vcHRpbWl6
ZV9mb3IoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAyMHU7Ci19Ci1pbmxpbmUgdm9p
ZCBGaWxlT3B0aW9uczo6Y2xlYXJfaGFzX29wdGltaXplX2ZvcigpIHsKLSAgX2hhc19iaXRzX1sw
XSAmPSB+MHgwMDAwMDAyMHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6Y2xlYXJfb3B0
aW1pemVfZm9yKCkgewotICBvcHRpbWl6ZV9mb3JfID0gMTsKLSAgY2xlYXJfaGFzX29wdGltaXpl
X2ZvcigpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZU9wdGlvbnNfT3B0aW1p
emVNb2RlIEZpbGVPcHRpb25zOjpvcHRpbWl6ZV9mb3IoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLm9w
dGltaXplX2ZvcikKLSAgcmV0dXJuIHN0YXRpY19jYXN0PCA6Omdvb2dsZTo6cHJvdG9idWY6OkZp
bGVPcHRpb25zX09wdGltaXplTW9kZSA+KG9wdGltaXplX2Zvcl8pOwotfQotaW5saW5lIHZvaWQg
RmlsZU9wdGlvbnM6OnNldF9vcHRpbWl6ZV9mb3IoOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlT3B0
aW9uc19PcHRpbWl6ZU1vZGUgdmFsdWUpIHsKLSAgYXNzZXJ0KDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlX0lzVmFsaWQodmFsdWUpKTsKLSAgc2V0X2hhc19vcHRp
bWl6ZV9mb3IoKTsKLSAgb3B0aW1pemVfZm9yXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vcHRpbWl6
ZV9mb3IpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBnb19wYWNrYWdlID0gMTE7Ci1pbmxpbmUg
Ym9vbCBGaWxlT3B0aW9uczo6aGFzX2dvX3BhY2thZ2UoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hh
c19iaXRzX1swXSAmIDB4MDAwMDAwNDB1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlv
bnM6OnNldF9oYXNfZ29fcGFja2FnZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDQw
dTsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9oYXNfZ29fcGFja2FnZSgpIHsK
LSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDA0MHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0
aW9uczo6Y2xlYXJfZ29fcGFja2FnZSgpIHsKLSAgZ29fcGFja2FnZV8uQ2xlYXJUb0VtcHR5Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfZ29fcGFja2FnZSgpOwotfQotaW5saW5lIGNvbnN0IDo6
c3RkOjpzdHJpbmcmIEZpbGVPcHRpb25zOjpnb19wYWNrYWdlKCkgY29uc3QgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5nb19wYWNrYWdlKQotICByZXR1cm4gZ29fcGFja2FnZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQot
aW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9nb19wYWNrYWdlKGNvbnN0IDo6c3RkOjpzdHJp
bmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfZ29fcGFja2FnZSgpOwotICBnb19wYWNrYWdlXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5nb19wYWNrYWdlKQotfQotaW5saW5lIHZv
aWQgRmlsZU9wdGlvbnM6OnNldF9nb19wYWNrYWdlKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNl
dF9oYXNfZ29fcGFja2FnZSgpOwotICBnb19wYWNrYWdlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6
OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmdvX3BhY2thZ2UpCi19Ci1pbmxpbmUg
dm9pZCBGaWxlT3B0aW9uczo6c2V0X2dvX3BhY2thZ2UoY29uc3QgY2hhciogdmFsdWUsIHNpemVf
dCBzaXplKSB7Ci0gIHNldF9oYXNfZ29fcGFja2FnZSgpOwotICBnb19wYWNrYWdlXy5TZXROb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9z
ZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuZ29fcGFja2FnZSkKLX0KLWlu
bGluZSA6OnN0ZDo6c3RyaW5nKiBGaWxlT3B0aW9uczo6bXV0YWJsZV9nb19wYWNrYWdlKCkgewot
ICBzZXRfaGFzX2dvX3BhY2thZ2UoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmdvX3BhY2thZ2UpCi0gIHJl
dHVybiBnb19wYWNrYWdlXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpz
dHJpbmcqIEZpbGVPcHRpb25zOjpyZWxlYXNlX2dvX3BhY2thZ2UoKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5nb19wYWNrYWdlKQotICBjbGVhcl9oYXNfZ29fcGFja2FnZSgpOwotICByZXR1cm4gZ29fcGFj
a2FnZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpz
ZXRfYWxsb2NhdGVkX2dvX3BhY2thZ2UoOjpzdGQ6OnN0cmluZyogZ29fcGFja2FnZSkgewotICBp
ZiAoZ29fcGFja2FnZSAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19nb19wYWNrYWdlKCk7Ci0gIH0g
ZWxzZSB7Ci0gICAgY2xlYXJfaGFzX2dvX3BhY2thZ2UoKTsKLSAgfQotICBnb19wYWNrYWdlXy5T
ZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZ29fcGFja2FnZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5nb19wYWNrYWdlKQotfQotCi0vLyBvcHRpb25hbCBib29sIGNjX2dlbmVyaWNfc2VydmljZXMg
PSAxNiBbZGVmYXVsdCA9IGZhbHNlXTsKLWlubGluZSBib29sIEZpbGVPcHRpb25zOjpoYXNfY2Nf
Z2VuZXJpY19zZXJ2aWNlcygpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgw
MDAwMDA4MHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X2hhc19jY19n
ZW5lcmljX3NlcnZpY2VzKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwODB1OwotfQot
aW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OmNsZWFyX2hhc19jY19nZW5lcmljX3NlcnZpY2VzKCkg
ewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDgwdTsKLX0KLWlubGluZSB2b2lkIEZpbGVP
cHRpb25zOjpjbGVhcl9jY19nZW5lcmljX3NlcnZpY2VzKCkgewotICBjY19nZW5lcmljX3NlcnZp
Y2VzXyA9IGZhbHNlOwotICBjbGVhcl9oYXNfY2NfZ2VuZXJpY19zZXJ2aWNlcygpOwotfQotaW5s
aW5lIGJvb2wgRmlsZU9wdGlvbnM6OmNjX2dlbmVyaWNfc2VydmljZXMoKSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVP
cHRpb25zLmNjX2dlbmVyaWNfc2VydmljZXMpCi0gIHJldHVybiBjY19nZW5lcmljX3NlcnZpY2Vz
XzsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfY2NfZ2VuZXJpY19zZXJ2aWNlcyhi
b29sIHZhbHVlKSB7Ci0gIHNldF9oYXNfY2NfZ2VuZXJpY19zZXJ2aWNlcygpOwotICBjY19nZW5l
cmljX3NlcnZpY2VzXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5jY19nZW5lcmljX3NlcnZpY2VzKQot
fQotCi0vLyBvcHRpb25hbCBib29sIGphdmFfZ2VuZXJpY19zZXJ2aWNlcyA9IDE3IFtkZWZhdWx0
ID0gZmFsc2VdOwotaW5saW5lIGJvb2wgRmlsZU9wdGlvbnM6Omhhc19qYXZhX2dlbmVyaWNfc2Vy
dmljZXMoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAxMDB1KSAh
PSAwOwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9oYXNfamF2YV9nZW5lcmljX3Nl
cnZpY2VzKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAxMDB1OwotfQotaW5saW5lIHZv
aWQgRmlsZU9wdGlvbnM6OmNsZWFyX2hhc19qYXZhX2dlbmVyaWNfc2VydmljZXMoKSB7Ci0gIF9o
YXNfYml0c19bMF0gJj0gfjB4MDAwMDAxMDB1OwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6
OmNsZWFyX2phdmFfZ2VuZXJpY19zZXJ2aWNlcygpIHsKLSAgamF2YV9nZW5lcmljX3NlcnZpY2Vz
XyA9IGZhbHNlOwotICBjbGVhcl9oYXNfamF2YV9nZW5lcmljX3NlcnZpY2VzKCk7Ci19Ci1pbmxp
bmUgYm9vbCBGaWxlT3B0aW9uczo6amF2YV9nZW5lcmljX3NlcnZpY2VzKCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxl
T3B0aW9ucy5qYXZhX2dlbmVyaWNfc2VydmljZXMpCi0gIHJldHVybiBqYXZhX2dlbmVyaWNfc2Vy
dmljZXNfOwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9qYXZhX2dlbmVyaWNfc2Vy
dmljZXMoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFzX2phdmFfZ2VuZXJpY19zZXJ2aWNlcygpOwot
ICBqYXZhX2dlbmVyaWNfc2VydmljZXNfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLmphdmFfZ2VuZXJp
Y19zZXJ2aWNlcykKLX0KLQotLy8gb3B0aW9uYWwgYm9vbCBweV9nZW5lcmljX3NlcnZpY2VzID0g
MTggW2RlZmF1bHQgPSBmYWxzZV07Ci1pbmxpbmUgYm9vbCBGaWxlT3B0aW9uczo6aGFzX3B5X2dl
bmVyaWNfc2VydmljZXMoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAw
MDAyMDB1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9oYXNfcHlfZ2Vu
ZXJpY19zZXJ2aWNlcygpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMjAwdTsKLX0KLWlu
bGluZSB2b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9oYXNfcHlfZ2VuZXJpY19zZXJ2aWNlcygpIHsK
LSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDIwMHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0
aW9uczo6Y2xlYXJfcHlfZ2VuZXJpY19zZXJ2aWNlcygpIHsKLSAgcHlfZ2VuZXJpY19zZXJ2aWNl
c18gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX3B5X2dlbmVyaWNfc2VydmljZXMoKTsKLX0KLWlubGlu
ZSBib29sIEZpbGVPcHRpb25zOjpweV9nZW5lcmljX3NlcnZpY2VzKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0
aW9ucy5weV9nZW5lcmljX3NlcnZpY2VzKQotICByZXR1cm4gcHlfZ2VuZXJpY19zZXJ2aWNlc187
Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X3B5X2dlbmVyaWNfc2VydmljZXMoYm9v
bCB2YWx1ZSkgewotICBzZXRfaGFzX3B5X2dlbmVyaWNfc2VydmljZXMoKTsKLSAgcHlfZ2VuZXJp
Y19zZXJ2aWNlc18gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldDpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMucHlfZ2VuZXJpY19zZXJ2aWNlcykKLX0K
LQotLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMjMgW2RlZmF1bHQgPSBmYWxzZV07Ci1p
bmxpbmUgYm9vbCBGaWxlT3B0aW9uczo6aGFzX2RlcHJlY2F0ZWQoKSBjb25zdCB7Ci0gIHJldHVy
biAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDA0MDB1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmls
ZU9wdGlvbnM6OnNldF9oYXNfZGVwcmVjYXRlZCgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAw
MDAwNDAwdTsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9oYXNfZGVwcmVjYXRl
ZCgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDQwMHU7Ci19Ci1pbmxpbmUgdm9pZCBG
aWxlT3B0aW9uczo6Y2xlYXJfZGVwcmVjYXRlZCgpIHsKLSAgZGVwcmVjYXRlZF8gPSBmYWxzZTsK
LSAgY2xlYXJfaGFzX2RlcHJlY2F0ZWQoKTsKLX0KLWlubGluZSBib29sIEZpbGVPcHRpb25zOjpk
ZXByZWNhdGVkKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
Z2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5kZXByZWNhdGVkKQotICByZXR1cm4gZGVw
cmVjYXRlZF87Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X2RlcHJlY2F0ZWQoYm9v
bCB2YWx1ZSkgewotICBzZXRfaGFzX2RlcHJlY2F0ZWQoKTsKLSAgZGVwcmVjYXRlZF8gPSB2YWx1
ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9i
dWYuRmlsZU9wdGlvbnMuZGVwcmVjYXRlZCkKLX0KLQotLy8gb3B0aW9uYWwgYm9vbCBjY19lbmFi
bGVfYXJlbmFzID0gMzEgW2RlZmF1bHQgPSBmYWxzZV07Ci1pbmxpbmUgYm9vbCBGaWxlT3B0aW9u
czo6aGFzX2NjX2VuYWJsZV9hcmVuYXMoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1sw
XSAmIDB4MDAwMDA4MDB1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6OnNldF9o
YXNfY2NfZW5hYmxlX2FyZW5hcygpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwODAwdTsK
LX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9oYXNfY2NfZW5hYmxlX2FyZW5hcygp
IHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDgwMHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxl
T3B0aW9uczo6Y2xlYXJfY2NfZW5hYmxlX2FyZW5hcygpIHsKLSAgY2NfZW5hYmxlX2FyZW5hc18g
PSBmYWxzZTsKLSAgY2xlYXJfaGFzX2NjX2VuYWJsZV9hcmVuYXMoKTsKLX0KLWlubGluZSBib29s
IEZpbGVPcHRpb25zOjpjY19lbmFibGVfYXJlbmFzKCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5jY19l
bmFibGVfYXJlbmFzKQotICByZXR1cm4gY2NfZW5hYmxlX2FyZW5hc187Ci19Ci1pbmxpbmUgdm9p
ZCBGaWxlT3B0aW9uczo6c2V0X2NjX2VuYWJsZV9hcmVuYXMoYm9vbCB2YWx1ZSkgewotICBzZXRf
aGFzX2NjX2VuYWJsZV9hcmVuYXMoKTsKLSAgY2NfZW5hYmxlX2FyZW5hc18gPSB2YWx1ZTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmls
ZU9wdGlvbnMuY2NfZW5hYmxlX2FyZW5hcykKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIG9iamNf
Y2xhc3NfcHJlZml4ID0gMzY7Ci1pbmxpbmUgYm9vbCBGaWxlT3B0aW9uczo6aGFzX29iamNfY2xh
c3NfcHJlZml4KCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAxMDAw
dSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfaGFzX29iamNfY2xhc3Nf
cHJlZml4KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDEwMDB1OwotfQotaW5saW5lIHZv
aWQgRmlsZU9wdGlvbnM6OmNsZWFyX2hhc19vYmpjX2NsYXNzX3ByZWZpeCgpIHsKLSAgX2hhc19i
aXRzX1swXSAmPSB+MHgwMDAwMTAwMHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6Y2xl
YXJfb2JqY19jbGFzc19wcmVmaXgoKSB7Ci0gIG9iamNfY2xhc3NfcHJlZml4Xy5DbGVhclRvRW1w
dHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc19vYmpjX2NsYXNzX3ByZWZpeCgpOwotfQotaW5s
aW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZpbGVPcHRpb25zOjpvYmpjX2NsYXNzX3ByZWZpeCgp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUu
cHJvdG9idWYuRmlsZU9wdGlvbnMub2JqY19jbGFzc19wcmVmaXgpCi0gIHJldHVybiBvYmpjX2Ns
YXNzX3ByZWZpeF8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6
OnNldF9vYmpjX2NsYXNzX3ByZWZpeChjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBz
ZXRfaGFzX29iamNfY2xhc3NfcHJlZml4KCk7Ci0gIG9iamNfY2xhc3NfcHJlZml4Xy5TZXROb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
Omdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vYmpjX2NsYXNzX3ByZWZpeCkKLX0KLWlubGlu
ZSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfb2JqY19jbGFzc19wcmVmaXgoY29uc3QgY2hhciogdmFs
dWUpIHsKLSAgc2V0X2hhc19vYmpjX2NsYXNzX3ByZWZpeCgpOwotICBvYmpjX2NsYXNzX3ByZWZp
eF8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5vYmpjX2NsYXNzX3ByZWZpeCkKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfb2Jq
Y19jbGFzc19wcmVmaXgoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9o
YXNfb2JqY19jbGFzc19wcmVmaXgoKTsKLSAgb2JqY19jbGFzc19wcmVmaXhfLlNldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2
YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9w
b2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vYmpjX2NsYXNzX3ByZWZpeCkKLX0K
LWlubGluZSA6OnN0ZDo6c3RyaW5nKiBGaWxlT3B0aW9uczo6bXV0YWJsZV9vYmpjX2NsYXNzX3By
ZWZpeCgpIHsKLSAgc2V0X2hhc19vYmpjX2NsYXNzX3ByZWZpeCgpOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMu
b2JqY19jbGFzc19wcmVmaXgpCi0gIHJldHVybiBvYmpjX2NsYXNzX3ByZWZpeF8uTXV0YWJsZU5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBGaWxlT3B0aW9uczo6cmVsZWFz
ZV9vYmpjX2NsYXNzX3ByZWZpeCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLm9iamNfY2xhc3NfcHJlZml4
KQotICBjbGVhcl9oYXNfb2JqY19jbGFzc19wcmVmaXgoKTsKLSAgcmV0dXJuIG9iamNfY2xhc3Nf
cHJlZml4Xy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6
OnNldF9hbGxvY2F0ZWRfb2JqY19jbGFzc19wcmVmaXgoOjpzdGQ6OnN0cmluZyogb2JqY19jbGFz
c19wcmVmaXgpIHsKLSAgaWYgKG9iamNfY2xhc3NfcHJlZml4ICE9IE5VTEwpIHsKLSAgICBzZXRf
aGFzX29iamNfY2xhc3NfcHJlZml4KCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX29iamNf
Y2xhc3NfcHJlZml4KCk7Ci0gIH0KLSAgb2JqY19jbGFzc19wcmVmaXhfLlNldEFsbG9jYXRlZE5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLCBvYmpjX2NsYXNzX3ByZWZpeCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy5vYmpj
X2NsYXNzX3ByZWZpeCkKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGNzaGFycF9uYW1lc3BhY2Ug
PSAzNzsKLWlubGluZSBib29sIEZpbGVPcHRpb25zOjpoYXNfY3NoYXJwX25hbWVzcGFjZSgpIGNv
bnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMjAwMHUpICE9IDA7Ci19Ci1p
bmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X2hhc19jc2hhcnBfbmFtZXNwYWNlKCkgewotICBf
aGFzX2JpdHNfWzBdIHw9IDB4MDAwMDIwMDB1OwotfQotaW5saW5lIHZvaWQgRmlsZU9wdGlvbnM6
OmNsZWFyX2hhc19jc2hhcnBfbmFtZXNwYWNlKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAw
MDAyMDAwdTsKLX0KLWlubGluZSB2b2lkIEZpbGVPcHRpb25zOjpjbGVhcl9jc2hhcnBfbmFtZXNw
YWNlKCkgewotICBjc2hhcnBfbmFtZXNwYWNlXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0g
IGNsZWFyX2hhc19jc2hhcnBfbmFtZXNwYWNlKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0
cmluZyYgRmlsZU9wdGlvbnM6OmNzaGFycF9uYW1lc3BhY2UoKSBjb25zdCB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25z
LmNzaGFycF9uYW1lc3BhY2UpCi0gIHJldHVybiBjc2hhcnBfbmFtZXNwYWNlXy5HZXROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X2NzaGFycF9uYW1lc3BhY2Uo
Y29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19jc2hhcnBfbmFtZXNwYWNl
KCk7Ci0gIGNzaGFycF9uYW1lc3BhY2VfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRp
b25zLmNzaGFycF9uYW1lc3BhY2UpCi19Ci1pbmxpbmUgdm9pZCBGaWxlT3B0aW9uczo6c2V0X2Nz
aGFycF9uYW1lc3BhY2UoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgc2V0X2hhc19jc2hhcnBfbmFt
ZXNwYWNlKCk7Ci0gIGNzaGFycF9uYW1lc3BhY2VfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3Ry
aW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hh
cjpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuY3NoYXJwX25hbWVzcGFjZSkKLX0KLWlubGlu
ZSB2b2lkIEZpbGVPcHRpb25zOjpzZXRfY3NoYXJwX25hbWVzcGFjZShjb25zdCBjaGFyKiB2YWx1
ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19jc2hhcnBfbmFtZXNwYWNlKCk7Ci0gIGNzaGFy
cF9uYW1lc3BhY2VfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
cy5jc2hhcnBfbmFtZXNwYWNlKQotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpbGVPcHRpb25z
OjptdXRhYmxlX2NzaGFycF9uYW1lc3BhY2UoKSB7Ci0gIHNldF9oYXNfY3NoYXJwX25hbWVzcGFj
ZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUu
cHJvdG9idWYuRmlsZU9wdGlvbnMuY3NoYXJwX25hbWVzcGFjZSkKLSAgcmV0dXJuIGNzaGFycF9u
YW1lc3BhY2VfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyog
RmlsZU9wdGlvbnM6OnJlbGVhc2VfY3NoYXJwX25hbWVzcGFjZSgpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25z
LmNzaGFycF9uYW1lc3BhY2UpCi0gIGNsZWFyX2hhc19jc2hhcnBfbmFtZXNwYWNlKCk7Ci0gIHJl
dHVybiBjc2hhcnBfbmFtZXNwYWNlXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZv
aWQgRmlsZU9wdGlvbnM6OnNldF9hbGxvY2F0ZWRfY3NoYXJwX25hbWVzcGFjZSg6OnN0ZDo6c3Ry
aW5nKiBjc2hhcnBfbmFtZXNwYWNlKSB7Ci0gIGlmIChjc2hhcnBfbmFtZXNwYWNlICE9IE5VTEwp
IHsKLSAgICBzZXRfaGFzX2NzaGFycF9uYW1lc3BhY2UoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVh
cl9oYXNfY3NoYXJwX25hbWVzcGFjZSgpOwotICB9Ci0gIGNzaGFycF9uYW1lc3BhY2VfLlNldEFs
bG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLCBjc2hhcnBfbmFtZXNwYWNlKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRp
b25zLmNzaGFycF9uYW1lc3BhY2UpCi19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYu
VW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLWlubGluZSBp
bnQgRmlsZU9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKSBjb25zdCB7Ci0gIHJl
dHVybiB1bmludGVycHJldGVkX29wdGlvbl8uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgRmlsZU9w
dGlvbnM6OmNsZWFyX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICB1bmludGVycHJldGVkX29w
dGlvbl8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50
ZXJwcmV0ZWRPcHRpb24mIEZpbGVPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbihpbnQgaW5k
ZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuRmlsZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1
bmludGVycHJldGVkX29wdGlvbl8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJv
dG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24qIEZpbGVPcHRpb25zOjptdXRhYmxlX3VuaW50ZXJw
cmV0ZWRfb3B0aW9uKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMudW5pbnRlcnByZXRlZF9v
cHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uTXV0YWJsZShpbmRleCk7Ci19
Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uKiBGaWxlT3B0
aW9uczo6YWRkX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucy51bmludGVycHJl
dGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5BZGQoKTsKLX0KLWlu
bGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotRmlsZU9wdGlvbnM6Om11dGFibGVfdW5pbnRl
cnByZXRlZF9vcHRpb24oKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9t
dXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0
aW9uKQotICByZXR1cm4gJnVuaW50ZXJwcmV0ZWRfb3B0aW9uXzsKLX0KLWlubGluZSBjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
VW5pbnRlcnByZXRlZE9wdGlvbiA+JgotRmlsZU9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0aW9u
KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29n
bGUucHJvdG9idWYuRmlsZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1
bmludGVycHJldGVkX29wdGlvbl87Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTWVzc2FnZU9w
dGlvbnMKLQotLy8gb3B0aW9uYWwgYm9vbCBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdCA9IDEgW2Rl
ZmF1bHQgPSBmYWxzZV07Ci1pbmxpbmUgYm9vbCBNZXNzYWdlT3B0aW9uczo6aGFzX21lc3NhZ2Vf
c2V0X3dpcmVfZm9ybWF0KCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAw
MDAwMDAxdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIE1lc3NhZ2VPcHRpb25zOjpzZXRfaGFzX21l
c3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDF1
OwotfQotaW5saW5lIHZvaWQgTWVzc2FnZU9wdGlvbnM6OmNsZWFyX2hhc19tZXNzYWdlX3NldF93
aXJlX2Zvcm1hdCgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMXU7Ci19Ci1pbmxp
bmUgdm9pZCBNZXNzYWdlT3B0aW9uczo6Y2xlYXJfbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSB7
Ci0gIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0XyA9IGZhbHNlOwotICBjbGVhcl9oYXNfbWVzc2Fn
ZV9zZXRfd2lyZV9mb3JtYXQoKTsKLX0KLWlubGluZSBib29sIE1lc3NhZ2VPcHRpb25zOjptZXNz
YWdlX3NldF93aXJlX2Zvcm1hdCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMubWVzc2FnZV9zZXRf
d2lyZV9mb3JtYXQpCi0gIHJldHVybiBtZXNzYWdlX3NldF93aXJlX2Zvcm1hdF87Ci19Ci1pbmxp
bmUgdm9pZCBNZXNzYWdlT3B0aW9uczo6c2V0X21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KGJvb2wg
dmFsdWUpIHsKLSAgc2V0X2hhc19tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCgpOwotICBtZXNzYWdl
X3NldF93aXJlX2Zvcm1hdF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMubWVzc2FnZV9zZXRfd2ly
ZV9mb3JtYXQpCi19Ci0KLS8vIG9wdGlvbmFsIGJvb2wgbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9h
Y2Nlc3NvciA9IDIgW2RlZmF1bHQgPSBmYWxzZV07Ci1pbmxpbmUgYm9vbCBNZXNzYWdlT3B0aW9u
czo6aGFzX25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IoKSBjb25zdCB7Ci0gIHJldHVy
biAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDJ1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgTWVz
c2FnZU9wdGlvbnM6OnNldF9oYXNfbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpIHsK
LSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsKLX0KLWlubGluZSB2b2lkIE1lc3NhZ2VP
cHRpb25zOjpjbGVhcl9oYXNfbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpIHsKLSAg
X2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwMnU7Ci19Ci1pbmxpbmUgdm9pZCBNZXNzYWdlT3B0
aW9uczo6Y2xlYXJfbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvcigpIHsKLSAgbm9fc3Rh
bmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3Nvcl8gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX25vX3N0YW5k
YXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IoKTsKLX0KLWlubGluZSBib29sIE1lc3NhZ2VPcHRpb25z
Ojpub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9u
cy5ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yKQotICByZXR1cm4gbm9fc3RhbmRhcmRf
ZGVzY3JpcHRvcl9hY2Nlc3Nvcl87Ci19Ci1pbmxpbmUgdm9pZCBNZXNzYWdlT3B0aW9uczo6c2V0
X25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFz
X25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IoKTsKLSAgbm9fc3RhbmRhcmRfZGVzY3Jp
cHRvcl9hY2Nlc3Nvcl8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3NldDpnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMubm9fc3RhbmRhcmRfZGVzY3Jp
cHRvcl9hY2Nlc3NvcikKLX0KLQotLy8gb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVkID0gMyBbZGVm
YXVsdCA9IGZhbHNlXTsKLWlubGluZSBib29sIE1lc3NhZ2VPcHRpb25zOjpoYXNfZGVwcmVjYXRl
ZCgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwNHUpICE9IDA7
Ci19Ci1pbmxpbmUgdm9pZCBNZXNzYWdlT3B0aW9uczo6c2V0X2hhc19kZXByZWNhdGVkKCkgewot
ICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDR1OwotfQotaW5saW5lIHZvaWQgTWVzc2FnZU9w
dGlvbnM6OmNsZWFyX2hhc19kZXByZWNhdGVkKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAw
MDAwMDA0dTsKLX0KLWlubGluZSB2b2lkIE1lc3NhZ2VPcHRpb25zOjpjbGVhcl9kZXByZWNhdGVk
KCkgewotICBkZXByZWNhdGVkXyA9IGZhbHNlOwotICBjbGVhcl9oYXNfZGVwcmVjYXRlZCgpOwot
fQotaW5saW5lIGJvb2wgTWVzc2FnZU9wdGlvbnM6OmRlcHJlY2F0ZWQoKSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1lc3Nh
Z2VPcHRpb25zLmRlcHJlY2F0ZWQpCi0gIHJldHVybiBkZXByZWNhdGVkXzsKLX0KLWlubGluZSB2
b2lkIE1lc3NhZ2VPcHRpb25zOjpzZXRfZGVwcmVjYXRlZChib29sIHZhbHVlKSB7Ci0gIHNldF9o
YXNfZGVwcmVjYXRlZCgpOwotICBkZXByZWNhdGVkXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5k
ZXByZWNhdGVkKQotfQotCi0vLyBvcHRpb25hbCBib29sIG1hcF9lbnRyeSA9IDc7Ci1pbmxpbmUg
Ym9vbCBNZXNzYWdlT3B0aW9uczo6aGFzX21hcF9lbnRyeSgpIGNvbnN0IHsKLSAgcmV0dXJuIChf
aGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwOHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBNZXNzYWdl
T3B0aW9uczo6c2V0X2hhc19tYXBfZW50cnkoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAw
MDAwOHU7Ci19Ci1pbmxpbmUgdm9pZCBNZXNzYWdlT3B0aW9uczo6Y2xlYXJfaGFzX21hcF9lbnRy
eSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwOHU7Ci19Ci1pbmxpbmUgdm9pZCBN
ZXNzYWdlT3B0aW9uczo6Y2xlYXJfbWFwX2VudHJ5KCkgewotICBtYXBfZW50cnlfID0gZmFsc2U7
Ci0gIGNsZWFyX2hhc19tYXBfZW50cnkoKTsKLX0KLWlubGluZSBib29sIE1lc3NhZ2VPcHRpb25z
OjptYXBfZW50cnkoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLm1hcF9lbnRyeSkKLSAgcmV0dXJu
IG1hcF9lbnRyeV87Ci19Ci1pbmxpbmUgdm9pZCBNZXNzYWdlT3B0aW9uczo6c2V0X21hcF9lbnRy
eShib29sIHZhbHVlKSB7Ci0gIHNldF9oYXNfbWFwX2VudHJ5KCk7Ci0gIG1hcF9lbnRyeV8gPSB2
YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJv
dG9idWYuTWVzc2FnZU9wdGlvbnMubWFwX2VudHJ5KQotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xl
LnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7
Ci1pbmxpbmUgaW50IE1lc3NhZ2VPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbl9zaXplKCkg
Y29uc3QgewotICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLnNpemUoKTsKLX0KLWlubGlu
ZSB2b2lkIE1lc3NhZ2VPcHRpb25zOjpjbGVhcl91bmludGVycHJldGVkX29wdGlvbigpIHsKLSAg
dW5pbnRlcnByZXRlZF9vcHRpb25fLkNsZWFyKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uJiBNZXNzYWdlT3B0aW9uczo6dW5pbnRlcnBy
ZXRlZF9vcHRpb24oaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLnVuaW50ZXJwcmV0
ZWRfb3B0aW9uKQotICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLkdldChpbmRleCk7Ci19
Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uKiBNZXNzYWdl
T3B0aW9uczo6bXV0YWJsZV91bmludGVycHJldGVkX29wdGlvbihpbnQgaW5kZXgpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLk1l
c3NhZ2VPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1cm4gdW5pbnRlcnByZXRl
ZF9vcHRpb25fLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
VW5pbnRlcnByZXRlZE9wdGlvbiogTWVzc2FnZU9wdGlvbnM6OmFkZF91bmludGVycHJldGVkX29w
dGlvbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUu
cHJvdG9idWYuTWVzc2FnZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1
bmludGVycHJldGVkX29wdGlvbl8uQWRkKCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRp
b24gPioKLU1lc3NhZ2VPcHRpb25zOjptdXRhYmxlX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5w
cm90b2J1Zi5NZXNzYWdlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuICZ1
bmludGVycHJldGVkX29wdGlvbl87Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRp
b24gPiYKLU1lc3NhZ2VPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbigpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLk1l
c3NhZ2VPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1cm4gdW5pbnRlcnByZXRl
ZF9vcHRpb25fOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEZpZWxkT3B0aW9ucwotCi0vLyBv
cHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZSBjdHlwZSA9IDEgW2Rl
ZmF1bHQgPSBTVFJJTkddOwotaW5saW5lIGJvb2wgRmllbGRPcHRpb25zOjpoYXNfY3R5cGUoKSBj
b25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDF1KSAhPSAwOwotfQot
aW5saW5lIHZvaWQgRmllbGRPcHRpb25zOjpzZXRfaGFzX2N0eXBlKCkgewotICBfaGFzX2JpdHNf
WzBdIHw9IDB4MDAwMDAwMDF1OwotfQotaW5saW5lIHZvaWQgRmllbGRPcHRpb25zOjpjbGVhcl9o
YXNfY3R5cGUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDF1OwotfQotaW5saW5l
IHZvaWQgRmllbGRPcHRpb25zOjpjbGVhcl9jdHlwZSgpIHsKLSAgY3R5cGVfID0gMDsKLSAgY2xl
YXJfaGFzX2N0eXBlKCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE9wdGlv
bnNfQ1R5cGUgRmllbGRPcHRpb25zOjpjdHlwZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLmN0eXBl
KQotICByZXR1cm4gc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRPcHRpb25z
X0NUeXBlID4oY3R5cGVfKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkT3B0aW9uczo6c2V0X2N0eXBl
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRPcHRpb25zX0NUeXBlIHZhbHVlKSB7Ci0gIGFzc2Vy
dCg6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19DVHlwZV9Jc1ZhbGlkKHZhbHVlKSk7
Ci0gIHNldF9oYXNfY3R5cGUoKTsKLSAgY3R5cGVfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5jdHlw
ZSkKLX0KLQotLy8gb3B0aW9uYWwgYm9vbCBwYWNrZWQgPSAyOwotaW5saW5lIGJvb2wgRmllbGRP
cHRpb25zOjpoYXNfcGFja2VkKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAw
eDAwMDAwMDAydSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZpZWxkT3B0aW9uczo6c2V0X2hhc19w
YWNrZWQoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwMnU7Ci19Ci1pbmxpbmUgdm9p
ZCBGaWVsZE9wdGlvbnM6OmNsZWFyX2hhc19wYWNrZWQoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0g
fjB4MDAwMDAwMDJ1OwotfQotaW5saW5lIHZvaWQgRmllbGRPcHRpb25zOjpjbGVhcl9wYWNrZWQo
KSB7Ci0gIHBhY2tlZF8gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX3BhY2tlZCgpOwotfQotaW5saW5l
IGJvb2wgRmllbGRPcHRpb25zOjpwYWNrZWQoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5wYWNrZWQp
Ci0gIHJldHVybiBwYWNrZWRfOwotfQotaW5saW5lIHZvaWQgRmllbGRPcHRpb25zOjpzZXRfcGFj
a2VkKGJvb2wgdmFsdWUpIHsKLSAgc2V0X2hhc19wYWNrZWQoKTsKLSAgcGFja2VkXyA9IHZhbHVl
OwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1
Zi5GaWVsZE9wdGlvbnMucGFja2VkKQotfQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVm
LkZpZWxkT3B0aW9ucy5KU1R5cGUganN0eXBlID0gNiBbZGVmYXVsdCA9IEpTX05PUk1BTF07Ci1p
bmxpbmUgYm9vbCBGaWVsZE9wdGlvbnM6Omhhc19qc3R5cGUoKSBjb25zdCB7Ci0gIHJldHVybiAo
X2hhc19iaXRzX1swXSAmIDB4MDAwMDAwMDR1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRmllbGRP
cHRpb25zOjpzZXRfaGFzX2pzdHlwZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDA0
dTsKLX0KLWlubGluZSB2b2lkIEZpZWxkT3B0aW9uczo6Y2xlYXJfaGFzX2pzdHlwZSgpIHsKLSAg
X2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwNHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZE9wdGlv
bnM6OmNsZWFyX2pzdHlwZSgpIHsKLSAganN0eXBlXyA9IDA7Ci0gIGNsZWFyX2hhc19qc3R5cGUo
KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19KU1R5cGUgRmll
bGRPcHRpb25zOjpqc3R5cGUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5qc3R5cGUpCi0gIHJldHVy
biBzdGF0aWNfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnNfSlNUeXBlID4o
anN0eXBlXyk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZE9wdGlvbnM6OnNldF9qc3R5cGUoOjpnb29n
bGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnNfSlNUeXBlIHZhbHVlKSB7Ci0gIGFzc2VydCg6Omdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19KU1R5cGVfSXNWYWxpZCh2YWx1ZSkpOwotICBz
ZXRfaGFzX2pzdHlwZSgpOwotICBqc3R5cGVfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5qc3R5cGUp
Ci19Ci0KLS8vIG9wdGlvbmFsIGJvb2wgbGF6eSA9IDUgW2RlZmF1bHQgPSBmYWxzZV07Ci1pbmxp
bmUgYm9vbCBGaWVsZE9wdGlvbnM6Omhhc19sYXp5KCkgY29uc3QgewotICByZXR1cm4gKF9oYXNf
Yml0c19bMF0gJiAweDAwMDAwMDA4dSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZpZWxkT3B0aW9u
czo6c2V0X2hhc19sYXp5KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDh1OwotfQot
aW5saW5lIHZvaWQgRmllbGRPcHRpb25zOjpjbGVhcl9oYXNfbGF6eSgpIHsKLSAgX2hhc19iaXRz
X1swXSAmPSB+MHgwMDAwMDAwOHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZE9wdGlvbnM6OmNsZWFy
X2xhenkoKSB7Ci0gIGxhenlfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19sYXp5KCk7Ci19Ci1pbmxp
bmUgYm9vbCBGaWVsZE9wdGlvbnM6OmxhenkoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5sYXp5KQot
ICByZXR1cm4gbGF6eV87Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZE9wdGlvbnM6OnNldF9sYXp5KGJv
b2wgdmFsdWUpIHsKLSAgc2V0X2hhc19sYXp5KCk7Ci0gIGxhenlfID0gdmFsdWU7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0
aW9ucy5sYXp5KQotfQotCi0vLyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzIFtkZWZhdWx0
ID0gZmFsc2VdOwotaW5saW5lIGJvb2wgRmllbGRPcHRpb25zOjpoYXNfZGVwcmVjYXRlZCgpIGNv
bnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAxMHUpICE9IDA7Ci19Ci1p
bmxpbmUgdm9pZCBGaWVsZE9wdGlvbnM6OnNldF9oYXNfZGVwcmVjYXRlZCgpIHsKLSAgX2hhc19i
aXRzX1swXSB8PSAweDAwMDAwMDEwdTsKLX0KLWlubGluZSB2b2lkIEZpZWxkT3B0aW9uczo6Y2xl
YXJfaGFzX2RlcHJlY2F0ZWQoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMTB1Owot
fQotaW5saW5lIHZvaWQgRmllbGRPcHRpb25zOjpjbGVhcl9kZXByZWNhdGVkKCkgewotICBkZXBy
ZWNhdGVkXyA9IGZhbHNlOwotICBjbGVhcl9oYXNfZGVwcmVjYXRlZCgpOwotfQotaW5saW5lIGJv
b2wgRmllbGRPcHRpb25zOjpkZXByZWNhdGVkKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZGVwcmVj
YXRlZCkKLSAgcmV0dXJuIGRlcHJlY2F0ZWRfOwotfQotaW5saW5lIHZvaWQgRmllbGRPcHRpb25z
OjpzZXRfZGVwcmVjYXRlZChib29sIHZhbHVlKSB7Ci0gIHNldF9oYXNfZGVwcmVjYXRlZCgpOwot
ICBkZXByZWNhdGVkXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuZGVwcmVjYXRlZCkKLX0KLQotLy8g
b3B0aW9uYWwgYm9vbCB3ZWFrID0gMTAgW2RlZmF1bHQgPSBmYWxzZV07Ci1pbmxpbmUgYm9vbCBG
aWVsZE9wdGlvbnM6Omhhc193ZWFrKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0g
JiAweDAwMDAwMDIwdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEZpZWxkT3B0aW9uczo6c2V0X2hh
c193ZWFrKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMjB1OwotfQotaW5saW5lIHZv
aWQgRmllbGRPcHRpb25zOjpjbGVhcl9oYXNfd2VhaygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+
MHgwMDAwMDAyMHU7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZE9wdGlvbnM6OmNsZWFyX3dlYWsoKSB7
Ci0gIHdlYWtfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc193ZWFrKCk7Ci19Ci1pbmxpbmUgYm9vbCBG
aWVsZE9wdGlvbnM6OndlYWsoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy53ZWFrKQotICByZXR1cm4g
d2Vha187Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZE9wdGlvbnM6OnNldF93ZWFrKGJvb2wgdmFsdWUp
IHsKLSAgc2V0X2hhc193ZWFrKCk7Ci0gIHdlYWtfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy53ZWFr
KQotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24g
dW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci1pbmxpbmUgaW50IEZpZWxkT3B0aW9uczo6dW5p
bnRlcnByZXRlZF9vcHRpb25fc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRf
b3B0aW9uXy5zaXplKCk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZE9wdGlvbnM6OmNsZWFyX3VuaW50
ZXJwcmV0ZWRfb3B0aW9uKCkgewotICB1bmludGVycHJldGVkX29wdGlvbl8uQ2xlYXIoKTsKLX0K
LWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24mIEZp
ZWxkT3B0aW9uczo6dW5pbnRlcnByZXRlZF9vcHRpb24oaW50IGluZGV4KSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxk
T3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0
aW9uXy5HZXQoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnBy
ZXRlZE9wdGlvbiogRmllbGRPcHRpb25zOjptdXRhYmxlX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKGlu
dCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpn
b29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1
cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5lIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogRmllbGRPcHRpb25zOjphZGRfdW5p
bnRlcnByZXRlZF9vcHRpb24oKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikK
LSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2ds
ZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRl
cnByZXRlZE9wdGlvbiA+KgotRmllbGRPcHRpb25zOjptdXRhYmxlX3VuaW50ZXJwcmV0ZWRfb3B0
aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0
Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJl
dHVybiAmdW5pbnRlcnByZXRlZF9vcHRpb25fOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJl
dGVkT3B0aW9uID4mCi1GaWVsZE9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9i
dWYuRmllbGRPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1cm4gdW5pbnRlcnBy
ZXRlZF9vcHRpb25fOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEVudW1PcHRpb25zCi0KLS8v
IG9wdGlvbmFsIGJvb2wgYWxsb3dfYWxpYXMgPSAyOwotaW5saW5lIGJvb2wgRW51bU9wdGlvbnM6
Omhhc19hbGxvd19hbGlhcygpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgw
MDAwMDAwMXUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBFbnVtT3B0aW9uczo6c2V0X2hhc19hbGxv
d19hbGlhcygpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0KLWlubGluZSB2
b2lkIEVudW1PcHRpb25zOjpjbGVhcl9oYXNfYWxsb3dfYWxpYXMoKSB7Ci0gIF9oYXNfYml0c19b
MF0gJj0gfjB4MDAwMDAwMDF1OwotfQotaW5saW5lIHZvaWQgRW51bU9wdGlvbnM6OmNsZWFyX2Fs
bG93X2FsaWFzKCkgewotICBhbGxvd19hbGlhc18gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX2FsbG93
X2FsaWFzKCk7Ci19Ci1pbmxpbmUgYm9vbCBFbnVtT3B0aW9uczo6YWxsb3dfYWxpYXMoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLkVudW1PcHRpb25zLmFsbG93X2FsaWFzKQotICByZXR1cm4gYWxsb3dfYWxpYXNfOwotfQot
aW5saW5lIHZvaWQgRW51bU9wdGlvbnM6OnNldF9hbGxvd19hbGlhcyhib29sIHZhbHVlKSB7Ci0g
IHNldF9oYXNfYWxsb3dfYWxpYXMoKTsKLSAgYWxsb3dfYWxpYXNfID0gdmFsdWU7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1PcHRp
b25zLmFsbG93X2FsaWFzKQotfQotCi0vLyBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzIFtk
ZWZhdWx0ID0gZmFsc2VdOwotaW5saW5lIGJvb2wgRW51bU9wdGlvbnM6Omhhc19kZXByZWNhdGVk
KCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAydSkgIT0gMDsK
LX0KLWlubGluZSB2b2lkIEVudW1PcHRpb25zOjpzZXRfaGFzX2RlcHJlY2F0ZWQoKSB7Ci0gIF9o
YXNfYml0c19bMF0gfD0gMHgwMDAwMDAwMnU7Ci19Ci1pbmxpbmUgdm9pZCBFbnVtT3B0aW9uczo6
Y2xlYXJfaGFzX2RlcHJlY2F0ZWQoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDJ1
OwotfQotaW5saW5lIHZvaWQgRW51bU9wdGlvbnM6OmNsZWFyX2RlcHJlY2F0ZWQoKSB7Ci0gIGRl
cHJlY2F0ZWRfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19kZXByZWNhdGVkKCk7Ci19Ci1pbmxpbmUg
Ym9vbCBFbnVtT3B0aW9uczo6ZGVwcmVjYXRlZCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMuZGVwcmVj
YXRlZCkKLSAgcmV0dXJuIGRlcHJlY2F0ZWRfOwotfQotaW5saW5lIHZvaWQgRW51bU9wdGlvbnM6
OnNldF9kZXByZWNhdGVkKGJvb2wgdmFsdWUpIHsKLSAgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0g
IGRlcHJlY2F0ZWRfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zLmRlcHJlY2F0ZWQpCi19Ci0KLS8vIHJl
cGVhdGVkIC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVk
X29wdGlvbiA9IDk5OTsKLWlubGluZSBpbnQgRW51bU9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0
aW9uX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uc2l6ZSgp
OwotfQotaW5saW5lIHZvaWQgRW51bU9wdGlvbnM6OmNsZWFyX3VuaW50ZXJwcmV0ZWRfb3B0aW9u
KCkgewotICB1bmludGVycHJldGVkX29wdGlvbl8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24mIEVudW1PcHRpb25zOjp1bmlu
dGVycHJldGVkX29wdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudW5pbnRlcnBy
ZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uR2V0KGluZGV4KTsK
LX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24qIEVudW1P
cHRpb25zOjptdXRhYmxlX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKGludCBpbmRleCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRW51
bU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29w
dGlvbl8uTXV0YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpVbmlu
dGVycHJldGVkT3B0aW9uKiBFbnVtT3B0aW9uczo6YWRkX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1
Zi5FbnVtT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0
ZWRfb3B0aW9uXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotRW51
bU9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnByZXRlZF9vcHRpb24oKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkVudW1P
cHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1cm4gJnVuaW50ZXJwcmV0ZWRfb3B0
aW9uXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmll
bGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+JgotRW51bU9wdGlv
bnM6OnVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMudW5pbnRlcnBy
ZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl87Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLy8gRW51bVZhbHVlT3B0aW9ucwotCi0vLyBvcHRpb25hbCBib29sIGRlcHJl
Y2F0ZWQgPSAxIFtkZWZhdWx0ID0gZmFsc2VdOwotaW5saW5lIGJvb2wgRW51bVZhbHVlT3B0aW9u
czo6aGFzX2RlcHJlY2F0ZWQoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4
MDAwMDAwMDF1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgRW51bVZhbHVlT3B0aW9uczo6c2V0X2hh
c19kZXByZWNhdGVkKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDF1OwotfQotaW5s
aW5lIHZvaWQgRW51bVZhbHVlT3B0aW9uczo6Y2xlYXJfaGFzX2RlcHJlY2F0ZWQoKSB7Ci0gIF9o
YXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDF1OwotfQotaW5saW5lIHZvaWQgRW51bVZhbHVlT3B0
aW9uczo6Y2xlYXJfZGVwcmVjYXRlZCgpIHsKLSAgZGVwcmVjYXRlZF8gPSBmYWxzZTsKLSAgY2xl
YXJfaGFzX2RlcHJlY2F0ZWQoKTsKLX0KLWlubGluZSBib29sIEVudW1WYWx1ZU9wdGlvbnM6OmRl
cHJlY2F0ZWQoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9n
ZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMuZGVwcmVjYXRlZCkKLSAgcmV0dXJu
IGRlcHJlY2F0ZWRfOwotfQotaW5saW5lIHZvaWQgRW51bVZhbHVlT3B0aW9uczo6c2V0X2RlcHJl
Y2F0ZWQoYm9vbCB2YWx1ZSkgewotICBzZXRfaGFzX2RlcHJlY2F0ZWQoKTsKLSAgZGVwcmVjYXRl
ZF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29n
bGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucy5kZXByZWNhdGVkKQotfQotCi0vLyByZXBlYXRl
ZCAuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRp
b24gPSA5OTk7Ci1pbmxpbmUgaW50IEVudW1WYWx1ZU9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0
aW9uX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uc2l6ZSgp
OwotfQotaW5saW5lIHZvaWQgRW51bVZhbHVlT3B0aW9uczo6Y2xlYXJfdW5pbnRlcnByZXRlZF9v
cHRpb24oKSB7Ci0gIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5DbGVhcigpOwotfQotaW5saW5lIGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiYgRW51bVZhbHVlT3B0
aW9uczo6dW5pbnRlcnByZXRlZF9vcHRpb24oaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9w
dGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlv
bl8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0
ZWRPcHRpb24qIEVudW1WYWx1ZU9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnByZXRlZF9vcHRpb24o
aW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxl
Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQot
ICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5l
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiogRW51bVZhbHVlT3B0aW9u
czo6YWRkX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnVuaW50ZXJw
cmV0ZWRfb3B0aW9uKQotICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLkFkZCgpOwotfQot
aW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnBy
b3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uID4qCi1FbnVtVmFsdWVPcHRpb25zOjptdXRhYmxl
X3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnVuaW50
ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1cm4gJnVuaW50ZXJwcmV0ZWRfb3B0aW9uXzsKLX0KLWlu
bGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+JgotRW51bVZhbHVlT3B0aW9uczo6dW5p
bnRlcnByZXRlZF9vcHRpb24oKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zLnVuaW50ZXJwcmV0
ZWRfb3B0aW9uKQotICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLS8vIFNlcnZpY2VPcHRpb25zCi0KLS8vIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRl
ZCA9IDMzIFtkZWZhdWx0ID0gZmFsc2VdOwotaW5saW5lIGJvb2wgU2VydmljZU9wdGlvbnM6Omhh
c19kZXByZWNhdGVkKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAw
MDAxdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIFNlcnZpY2VPcHRpb25zOjpzZXRfaGFzX2RlcHJl
Y2F0ZWQoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwMXU7Ci19Ci1pbmxpbmUgdm9p
ZCBTZXJ2aWNlT3B0aW9uczo6Y2xlYXJfaGFzX2RlcHJlY2F0ZWQoKSB7Ci0gIF9oYXNfYml0c19b
MF0gJj0gfjB4MDAwMDAwMDF1OwotfQotaW5saW5lIHZvaWQgU2VydmljZU9wdGlvbnM6OmNsZWFy
X2RlcHJlY2F0ZWQoKSB7Ci0gIGRlcHJlY2F0ZWRfID0gZmFsc2U7Ci0gIGNsZWFyX2hhc19kZXBy
ZWNhdGVkKCk7Ci19Ci1pbmxpbmUgYm9vbCBTZXJ2aWNlT3B0aW9uczo6ZGVwcmVjYXRlZCgpIGNv
bnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJv
dG9idWYuU2VydmljZU9wdGlvbnMuZGVwcmVjYXRlZCkKLSAgcmV0dXJuIGRlcHJlY2F0ZWRfOwot
fQotaW5saW5lIHZvaWQgU2VydmljZU9wdGlvbnM6OnNldF9kZXByZWNhdGVkKGJvb2wgdmFsdWUp
IHsKLSAgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0gIGRlcHJlY2F0ZWRfID0gdmFsdWU7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLlNlcnZp
Y2VPcHRpb25zLmRlcHJlY2F0ZWQpCi19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYu
VW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLWlubGluZSBp
bnQgU2VydmljZU9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0aW9uX3NpemUoKSBjb25zdCB7Ci0g
IHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgU2Vy
dmljZU9wdGlvbnM6OmNsZWFyX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICB1bmludGVycHJl
dGVkX29wdGlvbl8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OlVuaW50ZXJwcmV0ZWRPcHRpb24mIFNlcnZpY2VPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlv
bihpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X2dldDpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMudW5pbnRlcnByZXRlZF9vcHRpb24p
Ci0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6
Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24qIFNlcnZpY2VPcHRpb25zOjpt
dXRhYmxlX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlv
bnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl8u
TXV0YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJl
dGVkT3B0aW9uKiBTZXJ2aWNlT3B0aW9uczo6YWRkX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5T
ZXJ2aWNlT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0
ZWRfb3B0aW9uXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotU2Vy
dmljZU9wdGlvbnM6Om11dGFibGVfdW5pbnRlcnByZXRlZF9vcHRpb24oKSB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlNl
cnZpY2VPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9uKQotICByZXR1cm4gJnVuaW50ZXJwcmV0
ZWRfb3B0aW9uXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+JgotU2Vy
dmljZU9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlv
bnMudW5pbnRlcnByZXRlZF9vcHRpb24pCi0gIHJldHVybiB1bmludGVycHJldGVkX29wdGlvbl87
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gTWV0aG9kT3B0aW9ucwotCi0vLyBvcHRpb25hbCBi
b29sIGRlcHJlY2F0ZWQgPSAzMyBbZGVmYXVsdCA9IGZhbHNlXTsKLWlubGluZSBib29sIE1ldGhv
ZE9wdGlvbnM6Omhhc19kZXByZWNhdGVkKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19b
MF0gJiAweDAwMDAwMDAxdSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIE1ldGhvZE9wdGlvbnM6OnNl
dF9oYXNfZGVwcmVjYXRlZCgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAxdTsKLX0K
LWlubGluZSB2b2lkIE1ldGhvZE9wdGlvbnM6OmNsZWFyX2hhc19kZXByZWNhdGVkKCkgewotICBf
aGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIE1ldGhvZE9wdGlv
bnM6OmNsZWFyX2RlcHJlY2F0ZWQoKSB7Ci0gIGRlcHJlY2F0ZWRfID0gZmFsc2U7Ci0gIGNsZWFy
X2hhc19kZXByZWNhdGVkKCk7Ci19Ci1pbmxpbmUgYm9vbCBNZXRob2RPcHRpb25zOjpkZXByZWNh
dGVkKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLmRlcHJlY2F0ZWQpCi0gIHJldHVybiBkZXByZWNh
dGVkXzsKLX0KLWlubGluZSB2b2lkIE1ldGhvZE9wdGlvbnM6OnNldF9kZXByZWNhdGVkKGJvb2wg
dmFsdWUpIHsKLSAgc2V0X2hhc19kZXByZWNhdGVkKCk7Ci0gIGRlcHJlY2F0ZWRfID0gdmFsdWU7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVm
Lk1ldGhvZE9wdGlvbnMuZGVwcmVjYXRlZCkKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90
b2J1Zi5VbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotaW5s
aW5lIGludCBNZXRob2RPcHRpb25zOjp1bmludGVycHJldGVkX29wdGlvbl9zaXplKCkgY29uc3Qg
ewotICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLnNpemUoKTsKLX0KLWlubGluZSB2b2lk
IE1ldGhvZE9wdGlvbnM6OmNsZWFyX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgewotICB1bmludGVy
cHJldGVkX29wdGlvbl8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24mIE1ldGhvZE9wdGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0
aW9uKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLnVuaW50ZXJwcmV0ZWRfb3B0aW9u
KQotICByZXR1cm4gdW5pbnRlcnByZXRlZF9vcHRpb25fLkdldChpbmRleCk7Ci19Ci1pbmxpbmUg
Ojpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVkT3B0aW9uKiBNZXRob2RPcHRpb25zOjpt
dXRhYmxlX3VuaW50ZXJwcmV0ZWRfb3B0aW9uKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9u
cy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXy5N
dXRhYmxlKGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0
ZWRPcHRpb24qIE1ldGhvZE9wdGlvbnM6OmFkZF91bmludGVycHJldGVkX29wdGlvbigpIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuTWV0
aG9kT3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRf
b3B0aW9uXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRy
RmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5pbnRlcnByZXRlZE9wdGlvbiA+KgotTWV0aG9k
T3B0aW9uczo6bXV0YWJsZV91bmludGVycHJldGVkX29wdGlvbigpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuTWV0aG9k
T3B0aW9ucy51bmludGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuICZ1bmludGVycHJldGVkX29w
dGlvbl87Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZp
ZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb24gPiYKLU1ldGhvZE9w
dGlvbnM6OnVuaW50ZXJwcmV0ZWRfb3B0aW9uKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy51bmlu
dGVycHJldGVkX29wdGlvbikKLSAgcmV0dXJuIHVuaW50ZXJwcmV0ZWRfb3B0aW9uXzsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0vLyBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0Ci0KLS8vIHJl
cXVpcmVkIHN0cmluZyBuYW1lX3BhcnQgPSAxOwotaW5saW5lIGJvb2wgVW5pbnRlcnByZXRlZE9w
dGlvbl9OYW1lUGFydDo6aGFzX25hbWVfcGFydCgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2Jp
dHNfWzBdICYgMHgwMDAwMDAwMXUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBVbmludGVycHJldGVk
T3B0aW9uX05hbWVQYXJ0OjpzZXRfaGFzX25hbWVfcGFydCgpIHsKLSAgX2hhc19iaXRzX1swXSB8
PSAweDAwMDAwMDAxdTsKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBh
cnQ6OmNsZWFyX2hhc19uYW1lX3BhcnQoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAw
MDF1OwotfQotaW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6Y2xlYXJf
bmFtZV9wYXJ0KCkgewotICBuYW1lX3BhcnRfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAg
Y2xlYXJfaGFzX25hbWVfcGFydCgpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIFVu
aW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6Om5hbWVfcGFydCgpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVW5pbnRlcnBy
ZXRlZE9wdGlvbi5OYW1lUGFydC5uYW1lX3BhcnQpCi0gIHJldHVybiBuYW1lX3BhcnRfLkdldE5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ6
OnNldF9uYW1lX3BhcnQoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19u
YW1lX3BhcnQoKTsKLSAgbmFtZV9wYXJ0Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5VbmludGVy
cHJldGVkT3B0aW9uLk5hbWVQYXJ0Lm5hbWVfcGFydCkKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJw
cmV0ZWRPcHRpb25fTmFtZVBhcnQ6OnNldF9uYW1lX3BhcnQoY29uc3QgY2hhciogdmFsdWUpIHsK
LSAgc2V0X2hhc19uYW1lX3BhcnQoKTsKLSAgbmFtZV9wYXJ0Xy5TZXROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpz
dGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQubmFt
ZV9wYXJ0KQotfQotaW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6c2V0
X25hbWVfcGFydChjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19u
YW1lX3BhcnQoKTsKLSAgbmFtZV9wYXJ0Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpz
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydC5uYW1lX3BhcnQpCi19Ci1pbmxpbmUgOjpz
dGQ6OnN0cmluZyogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6bXV0YWJsZV9uYW1lX3Bh
cnQoKSB7Ci0gIHNldF9oYXNfbmFtZV9wYXJ0KCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5h
bWVQYXJ0Lm5hbWVfcGFydCkKLSAgcmV0dXJuIG5hbWVfcGFydF8uTXV0YWJsZU5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0
OjpyZWxlYXNlX25hbWVfcGFydCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQu
bmFtZV9wYXJ0KQotICBjbGVhcl9oYXNfbmFtZV9wYXJ0KCk7Ci0gIHJldHVybiBuYW1lX3BhcnRf
LlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBVbmludGVycHJldGVkT3B0aW9u
X05hbWVQYXJ0OjpzZXRfYWxsb2NhdGVkX25hbWVfcGFydCg6OnN0ZDo6c3RyaW5nKiBuYW1lX3Bh
cnQpIHsKLSAgaWYgKG5hbWVfcGFydCAhPSBOVUxMKSB7Ci0gICAgc2V0X2hhc19uYW1lX3BhcnQo
KTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfbmFtZV9wYXJ0KCk7Ci0gIH0KLSAgbmFtZV9w
YXJ0Xy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZV9wYXJ0KTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50
ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQubmFtZV9wYXJ0KQotfQotCi0vLyByZXF1aXJlZCBib29s
IGlzX2V4dGVuc2lvbiA9IDI7Ci1pbmxpbmUgYm9vbCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQ
YXJ0OjpoYXNfaXNfZXh0ZW5zaW9uKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0g
JiAweDAwMDAwMDAydSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb25f
TmFtZVBhcnQ6OnNldF9oYXNfaXNfZXh0ZW5zaW9uKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4
MDAwMDAwMDJ1OwotfQotaW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydDo6
Y2xlYXJfaGFzX2lzX2V4dGVuc2lvbigpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAw
MnU7Ci19Ci1pbmxpbmUgdm9pZCBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpjbGVhcl9p
c19leHRlbnNpb24oKSB7Ci0gIGlzX2V4dGVuc2lvbl8gPSBmYWxzZTsKLSAgY2xlYXJfaGFzX2lz
X2V4dGVuc2lvbigpOwotfQotaW5saW5lIGJvb2wgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFy
dDo6aXNfZXh0ZW5zaW9uKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0Lmlz
X2V4dGVuc2lvbikKLSAgcmV0dXJuIGlzX2V4dGVuc2lvbl87Ci19Ci1pbmxpbmUgdm9pZCBVbmlu
dGVycHJldGVkT3B0aW9uX05hbWVQYXJ0OjpzZXRfaXNfZXh0ZW5zaW9uKGJvb2wgdmFsdWUpIHsK
LSAgc2V0X2hhc19pc19leHRlbnNpb24oKTsKLSAgaXNfZXh0ZW5zaW9uXyA9IHZhbHVlOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5Vbmlu
dGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0LmlzX2V4dGVuc2lvbikKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0vLyBVbmludGVycHJldGVkT3B0aW9uCi0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydCBuYW1lID0gMjsKLWlubGluZSBpbnQgVW5p
bnRlcnByZXRlZE9wdGlvbjo6bmFtZV9zaXplKCkgY29uc3QgewotICByZXR1cm4gbmFtZV8uc2l6
ZSgpOwotfQotaW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfbmFtZSgpIHsK
LSAgbmFtZV8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlVu
aW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQmIFVuaW50ZXJwcmV0ZWRPcHRpb246Om5hbWUoaW50
IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6
Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24ubmFtZSkKLSAgcmV0dXJuIG5hbWVf
LkdldChpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpVbmludGVycHJldGVk
T3B0aW9uX05hbWVQYXJ0KiBVbmludGVycHJldGVkT3B0aW9uOjptdXRhYmxlX25hbWUoaW50IGlu
ZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2ds
ZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLm5hbWUpCi0gIHJldHVybiBuYW1lXy5NdXRh
YmxlKGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRP
cHRpb25fTmFtZVBhcnQqIFVuaW50ZXJwcmV0ZWRPcHRpb246OmFkZF9uYW1lKCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5VbmludGVy
cHJldGVkT3B0aW9uLm5hbWUpCi0gIHJldHVybiBuYW1lXy5BZGQoKTsKLX0KLWlubGluZSA6Omdv
b2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VW5p
bnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCA+KgotVW5pbnRlcnByZXRlZE9wdGlvbjo6bXV0YWJs
ZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9s
aXN0Omdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLm5hbWUpCi0gIHJldHVybiAm
bmFtZV87Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZp
ZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OlVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQgPiYK
LVVuaW50ZXJwcmV0ZWRPcHRpb246Om5hbWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9u
Lm5hbWUpCi0gIHJldHVybiBuYW1lXzsKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGlkZW50aWZp
ZXJfdmFsdWUgPSAzOwotaW5saW5lIGJvb2wgVW5pbnRlcnByZXRlZE9wdGlvbjo6aGFzX2lkZW50
aWZpZXJfdmFsdWUoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4MDAwMDAw
MDJ1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6c2V0X2hhc19p
ZGVudGlmaWVyX3ZhbHVlKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDJ1OwotfQot
aW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfaGFzX2lkZW50aWZpZXJfdmFs
dWUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDJ1OwotfQotaW5saW5lIHZvaWQg
VW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfaWRlbnRpZmllcl92YWx1ZSgpIHsKLSAgaWRlbnRp
Zmllcl92YWx1ZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfaWRlbnRp
Zmllcl92YWx1ZSgpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIFVuaW50ZXJwcmV0
ZWRPcHRpb246OmlkZW50aWZpZXJfdmFsdWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24u
aWRlbnRpZmllcl92YWx1ZSkKLSAgcmV0dXJuIGlkZW50aWZpZXJfdmFsdWVfLkdldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9pZGVudGlmaWVy
X3ZhbHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHNldF9oYXNfaWRlbnRpZmll
cl92YWx1ZSgpOwotICBpZGVudGlmaWVyX3ZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5V
bmludGVycHJldGVkT3B0aW9uLmlkZW50aWZpZXJfdmFsdWUpCi19Ci1pbmxpbmUgdm9pZCBVbmlu
dGVycHJldGVkT3B0aW9uOjpzZXRfaWRlbnRpZmllcl92YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkg
ewotICBzZXRfaGFzX2lkZW50aWZpZXJfdmFsdWUoKTsKLSAgaWRlbnRpZmllcl92YWx1ZV8uU2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0
aW9uLmlkZW50aWZpZXJfdmFsdWUpCi19Ci1pbmxpbmUgdm9pZCBVbmludGVycHJldGVkT3B0aW9u
OjpzZXRfaWRlbnRpZmllcl92YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsK
LSAgc2V0X2hhc19pZGVudGlmaWVyX3ZhbHVlKCk7Ci0gIGlkZW50aWZpZXJfdmFsdWVfLlNldE5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLmlkZW50aWZp
ZXJfdmFsdWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogVW5pbnRlcnByZXRlZE9wdGlvbjo6
bXV0YWJsZV9pZGVudGlmaWVyX3ZhbHVlKCkgewotICBzZXRfaGFzX2lkZW50aWZpZXJfdmFsdWUo
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnBy
b3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uaWRlbnRpZmllcl92YWx1ZSkKLSAgcmV0dXJuIGlk
ZW50aWZpZXJfdmFsdWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgOjpzdGQ6OnN0
cmluZyogVW5pbnRlcnByZXRlZE9wdGlvbjo6cmVsZWFzZV9pZGVudGlmaWVyX3ZhbHVlKCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9i
dWYuVW5pbnRlcnByZXRlZE9wdGlvbi5pZGVudGlmaWVyX3ZhbHVlKQotICBjbGVhcl9oYXNfaWRl
bnRpZmllcl92YWx1ZSgpOwotICByZXR1cm4gaWRlbnRpZmllcl92YWx1ZV8uUmVsZWFzZU5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9hbGxvY2F0
ZWRfaWRlbnRpZmllcl92YWx1ZSg6OnN0ZDo6c3RyaW5nKiBpZGVudGlmaWVyX3ZhbHVlKSB7Ci0g
IGlmIChpZGVudGlmaWVyX3ZhbHVlICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX2lkZW50aWZpZXJf
dmFsdWUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfaWRlbnRpZmllcl92YWx1ZSgpOwot
ICB9Ci0gIGlkZW50aWZpZXJfdmFsdWVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBpZGVudGlm
aWVyX3ZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxv
Y2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uaWRlbnRpZmllcl92YWx1
ZSkKLX0KLQotLy8gb3B0aW9uYWwgdWludDY0IHBvc2l0aXZlX2ludF92YWx1ZSA9IDQ7Ci1pbmxp
bmUgYm9vbCBVbmludGVycHJldGVkT3B0aW9uOjpoYXNfcG9zaXRpdmVfaW50X3ZhbHVlKCkgY29u
c3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDA0dSkgIT0gMDsKLX0KLWlu
bGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9oYXNfcG9zaXRpdmVfaW50X3ZhbHVl
KCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDR1OwotfQotaW5saW5lIHZvaWQgVW5p
bnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfaGFzX3Bvc2l0aXZlX2ludF92YWx1ZSgpIHsKLSAgX2hh
c19iaXRzX1swXSAmPSB+MHgwMDAwMDAwNHU7Ci19Ci1pbmxpbmUgdm9pZCBVbmludGVycHJldGVk
T3B0aW9uOjpjbGVhcl9wb3NpdGl2ZV9pbnRfdmFsdWUoKSB7Ci0gIHBvc2l0aXZlX2ludF92YWx1
ZV8gPSBHT09HTEVfVUxPTkdMT05HKDApOwotICBjbGVhcl9oYXNfcG9zaXRpdmVfaW50X3ZhbHVl
KCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50NjQgVW5pbnRlcnByZXRlZE9w
dGlvbjo6cG9zaXRpdmVfaW50X3ZhbHVlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnBv
c2l0aXZlX2ludF92YWx1ZSkKLSAgcmV0dXJuIHBvc2l0aXZlX2ludF92YWx1ZV87Ci19Ci1pbmxp
bmUgdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRfcG9zaXRpdmVfaW50X3ZhbHVlKDo6Z29v
Z2xlOjpwcm90b2J1Zjo6dWludDY0IHZhbHVlKSB7Ci0gIHNldF9oYXNfcG9zaXRpdmVfaW50X3Zh
bHVlKCk7Ci0gIHBvc2l0aXZlX2ludF92YWx1ZV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlv
bi5wb3NpdGl2ZV9pbnRfdmFsdWUpCi19Ci0KLS8vIG9wdGlvbmFsIGludDY0IG5lZ2F0aXZlX2lu
dF92YWx1ZSA9IDU7Ci1pbmxpbmUgYm9vbCBVbmludGVycHJldGVkT3B0aW9uOjpoYXNfbmVnYXRp
dmVfaW50X3ZhbHVlKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAw
MDA4dSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9oYXNf
bmVnYXRpdmVfaW50X3ZhbHVlKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDh1Owot
fQotaW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfaGFzX25lZ2F0aXZlX2lu
dF92YWx1ZSgpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+MHgwMDAwMDAwOHU7Ci19Ci1pbmxpbmUg
dm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpjbGVhcl9uZWdhdGl2ZV9pbnRfdmFsdWUoKSB7Ci0g
IG5lZ2F0aXZlX2ludF92YWx1ZV8gPSBHT09HTEVfTE9OR0xPTkcoMCk7Ci0gIGNsZWFyX2hhc19u
ZWdhdGl2ZV9pbnRfdmFsdWUoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDY0
IFVuaW50ZXJwcmV0ZWRPcHRpb246Om5lZ2F0aXZlX2ludF92YWx1ZSgpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVW5pbnRl
cnByZXRlZE9wdGlvbi5uZWdhdGl2ZV9pbnRfdmFsdWUpCi0gIHJldHVybiBuZWdhdGl2ZV9pbnRf
dmFsdWVfOwotfQotaW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6c2V0X25lZ2F0aXZl
X2ludF92YWx1ZSg6Omdvb2dsZTo6cHJvdG9idWY6OmludDY0IHZhbHVlKSB7Ci0gIHNldF9oYXNf
bmVnYXRpdmVfaW50X3ZhbHVlKCk7Ci0gIG5lZ2F0aXZlX2ludF92YWx1ZV8gPSB2YWx1ZTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVW5p
bnRlcnByZXRlZE9wdGlvbi5uZWdhdGl2ZV9pbnRfdmFsdWUpCi19Ci0KLS8vIG9wdGlvbmFsIGRv
dWJsZSBkb3VibGVfdmFsdWUgPSA2OwotaW5saW5lIGJvb2wgVW5pbnRlcnByZXRlZE9wdGlvbjo6
aGFzX2RvdWJsZV92YWx1ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgw
MDAwMDAxMHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRf
aGFzX2RvdWJsZV92YWx1ZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDEwdTsKLX0K
LWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OmNsZWFyX2hhc19kb3VibGVfdmFsdWUo
KSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMTB1OwotfQotaW5saW5lIHZvaWQgVW5p
bnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfZG91YmxlX3ZhbHVlKCkgewotICBkb3VibGVfdmFsdWVf
ID0gMDsKLSAgY2xlYXJfaGFzX2RvdWJsZV92YWx1ZSgpOwotfQotaW5saW5lIGRvdWJsZSBVbmlu
dGVycHJldGVkT3B0aW9uOjpkb3VibGVfdmFsdWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRp
b24uZG91YmxlX3ZhbHVlKQotICByZXR1cm4gZG91YmxlX3ZhbHVlXzsKLX0KLWlubGluZSB2b2lk
IFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9kb3VibGVfdmFsdWUoZG91YmxlIHZhbHVlKSB7Ci0g
IHNldF9oYXNfZG91YmxlX3ZhbHVlKCk7Ci0gIGRvdWJsZV92YWx1ZV8gPSB2YWx1ZTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVW5pbnRl
cnByZXRlZE9wdGlvbi5kb3VibGVfdmFsdWUpCi19Ci0KLS8vIG9wdGlvbmFsIGJ5dGVzIHN0cmlu
Z192YWx1ZSA9IDc7Ci1pbmxpbmUgYm9vbCBVbmludGVycHJldGVkT3B0aW9uOjpoYXNfc3RyaW5n
X3ZhbHVlKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDIwdSkg
IT0gMDsKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9oYXNfc3RyaW5n
X3ZhbHVlKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMjB1OwotfQotaW5saW5lIHZv
aWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfaGFzX3N0cmluZ192YWx1ZSgpIHsKLSAgX2hh
c19iaXRzX1swXSAmPSB+MHgwMDAwMDAyMHU7Ci19Ci1pbmxpbmUgdm9pZCBVbmludGVycHJldGVk
T3B0aW9uOjpjbGVhcl9zdHJpbmdfdmFsdWUoKSB7Ci0gIHN0cmluZ192YWx1ZV8uQ2xlYXJUb0Vt
cHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotICBjbGVhcl9oYXNfc3RyaW5nX3ZhbHVlKCk7Ci19Ci1pbmxpbmUg
Y29uc3QgOjpzdGQ6OnN0cmluZyYgVW5pbnRlcnByZXRlZE9wdGlvbjo6c3RyaW5nX3ZhbHVlKCkg
Y29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5w
cm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnN0cmluZ192YWx1ZSkKLSAgcmV0dXJuIHN0cmlu
Z192YWx1ZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9w
dGlvbjo6c2V0X3N0cmluZ192YWx1ZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBz
ZXRfaGFzX3N0cmluZ192YWx1ZSgpOwotICBzdHJpbmdfdmFsdWVfLlNldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2
YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnBy
b3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc3RyaW5nX3ZhbHVlKQotfQotaW5saW5lIHZvaWQg
VW5pbnRlcnByZXRlZE9wdGlvbjo6c2V0X3N0cmluZ192YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkg
ewotICBzZXRfaGFzX3N0cmluZ192YWx1ZSgpOwotICBzdHJpbmdfdmFsdWVfLlNldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zdHJp
bmdfdmFsdWUpCi19Ci1pbmxpbmUgdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRfc3RyaW5n
X3ZhbHVlKGNvbnN0IHZvaWQqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBzZXRfaGFzX3N0cmlu
Z192YWx1ZSgpOwotICBzdHJpbmdfdmFsdWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6
OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90
b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLnN0cmluZ192YWx1ZSkKLX0KLWlubGluZSA6OnN0ZDo6
c3RyaW5nKiBVbmludGVycHJldGVkT3B0aW9uOjptdXRhYmxlX3N0cmluZ192YWx1ZSgpIHsKLSAg
c2V0X2hhc19zdHJpbmdfdmFsdWUoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uc3RyaW5nX3Zh
bHVlKQotICByZXR1cm4gc3RyaW5nX3ZhbHVlXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5s
aW5lIDo6c3RkOjpzdHJpbmcqIFVuaW50ZXJwcmV0ZWRPcHRpb246OnJlbGVhc2Vfc3RyaW5nX3Zh
bHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29n
bGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5zdHJpbmdfdmFsdWUpCi0gIGNsZWFyX2hh
c19zdHJpbmdfdmFsdWUoKTsKLSAgcmV0dXJuIHN0cmluZ192YWx1ZV8uUmVsZWFzZU5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9hbGxvY2F0ZWRf
c3RyaW5nX3ZhbHVlKDo6c3RkOjpzdHJpbmcqIHN0cmluZ192YWx1ZSkgewotICBpZiAoc3RyaW5n
X3ZhbHVlICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX3N0cmluZ192YWx1ZSgpOwotICB9IGVsc2Ug
ewotICAgIGNsZWFyX2hhc19zdHJpbmdfdmFsdWUoKTsKLSAgfQotICBzdHJpbmdfdmFsdWVfLlNl
dEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBzdHJpbmdfdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuVW5pbnRlcnBy
ZXRlZE9wdGlvbi5zdHJpbmdfdmFsdWUpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBhZ2dyZWdh
dGVfdmFsdWUgPSA4OwotaW5saW5lIGJvb2wgVW5pbnRlcnByZXRlZE9wdGlvbjo6aGFzX2FnZ3Jl
Z2F0ZV92YWx1ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDA0
MHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBVbmludGVycHJldGVkT3B0aW9uOjpzZXRfaGFzX2Fn
Z3JlZ2F0ZV92YWx1ZSgpIHsKLSAgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDQwdTsKLX0KLWlu
bGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OmNsZWFyX2hhc19hZ2dyZWdhdGVfdmFsdWUo
KSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwNDB1OwotfQotaW5saW5lIHZvaWQgVW5p
bnRlcnByZXRlZE9wdGlvbjo6Y2xlYXJfYWdncmVnYXRlX3ZhbHVlKCkgewotICBhZ2dyZWdhdGVf
dmFsdWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgY2xlYXJfaGFzX2FnZ3JlZ2F0ZV92
YWx1ZSgpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIFVuaW50ZXJwcmV0ZWRPcHRp
b246OmFnZ3JlZ2F0ZV92YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5hZ2dyZWdh
dGVfdmFsdWUpCi0gIHJldHVybiBhZ2dyZWdhdGVfdmFsdWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0K
LWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRpb246OnNldF9hZ2dyZWdhdGVfdmFsdWUoY29u
c3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19hZ2dyZWdhdGVfdmFsdWUoKTsK
LSAgYWdncmVnYXRlX3ZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk
T3B0aW9uLmFnZ3JlZ2F0ZV92YWx1ZSkKLX0KLWlubGluZSB2b2lkIFVuaW50ZXJwcmV0ZWRPcHRp
b246OnNldF9hZ2dyZWdhdGVfdmFsdWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgc2V0X2hhc19h
Z2dyZWdhdGVfdmFsdWUoKTsKLSAgYWdncmVnYXRlX3ZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpz
dGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uYWdncmVnYXRlX3Zh
bHVlKQotfQotaW5saW5lIHZvaWQgVW5pbnRlcnByZXRlZE9wdGlvbjo6c2V0X2FnZ3JlZ2F0ZV92
YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19hZ2dyZWdh
dGVfdmFsdWUoKTsKLSAgYWdncmVnYXRlX3ZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6
c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUu
cHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5hZ2dyZWdhdGVfdmFsdWUpCi19Ci1pbmxpbmUg
OjpzdGQ6OnN0cmluZyogVW5pbnRlcnByZXRlZE9wdGlvbjo6bXV0YWJsZV9hZ2dyZWdhdGVfdmFs
dWUoKSB7Ci0gIHNldF9oYXNfYWdncmVnYXRlX3ZhbHVlKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0
aW9uLmFnZ3JlZ2F0ZV92YWx1ZSkKLSAgcmV0dXJuIGFnZ3JlZ2F0ZV92YWx1ZV8uTXV0YWJsZU5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBVbmludGVycHJldGVkT3B0aW9u
OjpyZWxlYXNlX2FnZ3JlZ2F0ZV92YWx1ZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uYWdn
cmVnYXRlX3ZhbHVlKQotICBjbGVhcl9oYXNfYWdncmVnYXRlX3ZhbHVlKCk7Ci0gIHJldHVybiBh
Z2dyZWdhdGVfdmFsdWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBVbmlu
dGVycHJldGVkT3B0aW9uOjpzZXRfYWxsb2NhdGVkX2FnZ3JlZ2F0ZV92YWx1ZSg6OnN0ZDo6c3Ry
aW5nKiBhZ2dyZWdhdGVfdmFsdWUpIHsKLSAgaWYgKGFnZ3JlZ2F0ZV92YWx1ZSAhPSBOVUxMKSB7
Ci0gICAgc2V0X2hhc19hZ2dyZWdhdGVfdmFsdWUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9o
YXNfYWdncmVnYXRlX3ZhbHVlKCk7Ci0gIH0KLSAgYWdncmVnYXRlX3ZhbHVlXy5TZXRBbGxvY2F0
ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSwgYWdncmVnYXRlX3ZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRP
cHRpb24uYWdncmVnYXRlX3ZhbHVlKQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFNvdXJjZUNv
ZGVJbmZvX0xvY2F0aW9uCi0KLS8vIHJlcGVhdGVkIGludDMyIHBhdGggPSAxIFtwYWNrZWQgPSB0
cnVlXTsKLWlubGluZSBpbnQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnBhdGhfc2l6ZSgpIGNv
bnN0IHsKLSAgcmV0dXJuIHBhdGhfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJ
bmZvX0xvY2F0aW9uOjpjbGVhcl9wYXRoKCkgewotICBwYXRoXy5DbGVhcigpOwotfQotaW5saW5l
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnBhdGgo
aW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9n
ZXQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnBhdGgpCi0gIHJldHVy
biBwYXRoXy5HZXQoaW5kZXgpOwotfQotaW5saW5lIHZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRp
b246OnNldF9wYXRoKGludCBpbmRleCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSkg
ewotICBwYXRoXy5TZXQoaW5kZXgsIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ucGF0
aCkKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjphZGRfcGF0aCg6Omdv
b2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIHBhdGhfLkFkZCh2YWx1ZSk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJj
ZUNvZGVJbmZvLkxvY2F0aW9uLnBhdGgpCi19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZEZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyID4mCi1Tb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbjo6cGF0aCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9u
LnBhdGgpCi0gIHJldHVybiBwYXRoXzsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJl
cGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPioKLVNvdXJjZUNvZGVJbmZv
X0xvY2F0aW9uOjptdXRhYmxlX3BhdGgoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0
aW9uLnBhdGgpCi0gIHJldHVybiAmcGF0aF87Ci19Ci0KLS8vIHJlcGVhdGVkIGludDMyIHNwYW4g
PSAyIFtwYWNrZWQgPSB0cnVlXTsKLWlubGluZSBpbnQgU291cmNlQ29kZUluZm9fTG9jYXRpb246
OnNwYW5fc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHNwYW5fLnNpemUoKTsKLX0KLWlubGluZSB2
b2lkIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpjbGVhcl9zcGFuKCkgewotICBzcGFuXy5DbGVh
cigpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgU291cmNlQ29kZUluZm9f
TG9jYXRpb246OnNwYW4oaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9u
LnNwYW4pCi0gIHJldHVybiBzcGFuXy5HZXQoaW5kZXgpOwotfQotaW5saW5lIHZvaWQgU291cmNl
Q29kZUluZm9fTG9jYXRpb246OnNldF9zcGFuKGludCBpbmRleCwgOjpnb29nbGU6OnByb3RvYnVm
OjppbnQzMiB2YWx1ZSkgewotICBzcGFuXy5TZXQoaW5kZXgsIHZhbHVlKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUlu
Zm8uTG9jYXRpb24uc3BhbikKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9u
OjphZGRfc3Bhbig6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIHNwYW5fLkFk
ZCh2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xl
LnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnNwYW4pCi19Ci1pbmxpbmUgY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZEZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dDMyID4mCi1Tb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6c3BhbigpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNv
ZGVJbmZvLkxvY2F0aW9uLnNwYW4pCi0gIHJldHVybiBzcGFuXzsKLX0KLWlubGluZSA6Omdvb2ds
ZTo6cHJvdG9idWY6OlJlcGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPioK
LVNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjptdXRhYmxlX3NwYW4oKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlNvdXJj
ZUNvZGVJbmZvLkxvY2F0aW9uLnNwYW4pCi0gIHJldHVybiAmc3Bhbl87Ci19Ci0KLS8vIG9wdGlv
bmFsIHN0cmluZyBsZWFkaW5nX2NvbW1lbnRzID0gMzsKLWlubGluZSBib29sIFNvdXJjZUNvZGVJ
bmZvX0xvY2F0aW9uOjpoYXNfbGVhZGluZ19jb21tZW50cygpIGNvbnN0IHsKLSAgcmV0dXJuIChf
aGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwNHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBTb3VyY2VD
b2RlSW5mb19Mb2NhdGlvbjo6c2V0X2hhc19sZWFkaW5nX2NvbW1lbnRzKCkgewotICBfaGFzX2Jp
dHNfWzBdIHw9IDB4MDAwMDAwMDR1OwotfQotaW5saW5lIHZvaWQgU291cmNlQ29kZUluZm9fTG9j
YXRpb246OmNsZWFyX2hhc19sZWFkaW5nX2NvbW1lbnRzKCkgewotICBfaGFzX2JpdHNfWzBdICY9
IH4weDAwMDAwMDA0dTsKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpj
bGVhcl9sZWFkaW5nX2NvbW1lbnRzKCkgewotICBsZWFkaW5nX2NvbW1lbnRzXy5DbGVhclRvRW1w
dHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc19sZWFkaW5nX2NvbW1lbnRzKCk7Ci19Ci1pbmxp
bmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgU291cmNlQ29kZUluZm9fTG9jYXRpb246OmxlYWRpbmdf
Y29tbWVudHMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9n
ZXQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdfY29tbWVu
dHMpCi0gIHJldHVybiBsZWFkaW5nX2NvbW1lbnRzXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxp
bmUgdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6c2V0X2xlYWRpbmdfY29tbWVudHMoY29u
c3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgc2V0X2hhc19sZWFkaW5nX2NvbW1lbnRzKCk7
Ci0gIGxlYWRpbmdfY29tbWVudHNfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJ
bmZvLkxvY2F0aW9uLmxlYWRpbmdfY29tbWVudHMpCi19Ci1pbmxpbmUgdm9pZCBTb3VyY2VDb2Rl
SW5mb19Mb2NhdGlvbjo6c2V0X2xlYWRpbmdfY29tbWVudHMoY29uc3QgY2hhciogdmFsdWUpIHsK
LSAgc2V0X2hhc19sZWFkaW5nX2NvbW1lbnRzKCk7Ci0gIGxlYWRpbmdfY29tbWVudHNfLlNldE5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9j
YXRpb24ubGVhZGluZ19jb21tZW50cykKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJbmZvX0xv
Y2F0aW9uOjpzZXRfbGVhZGluZ19jb21tZW50cyhjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNp
emUpIHsKLSAgc2V0X2hhc19sZWFkaW5nX2NvbW1lbnRzKCk7Ci0gIGxlYWRpbmdfY29tbWVudHNf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlv
bi5sZWFkaW5nX2NvbW1lbnRzKQotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIFNvdXJjZUNvZGVJ
bmZvX0xvY2F0aW9uOjptdXRhYmxlX2xlYWRpbmdfY29tbWVudHMoKSB7Ci0gIHNldF9oYXNfbGVh
ZGluZ19jb21tZW50cygpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZTpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ubGVhZGluZ19jb21t
ZW50cykKLSAgcmV0dXJuIGxlYWRpbmdfY29tbWVudHNfLk11dGFibGVOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19
Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogU291cmNlQ29kZUluZm9fTG9jYXRpb246OnJlbGVhc2Vf
bGVhZGluZ19jb21tZW50cygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdf
Y29tbWVudHMpCi0gIGNsZWFyX2hhc19sZWFkaW5nX2NvbW1lbnRzKCk7Ci0gIHJldHVybiBsZWFk
aW5nX2NvbW1lbnRzXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgU291cmNl
Q29kZUluZm9fTG9jYXRpb246OnNldF9hbGxvY2F0ZWRfbGVhZGluZ19jb21tZW50cyg6OnN0ZDo6
c3RyaW5nKiBsZWFkaW5nX2NvbW1lbnRzKSB7Ci0gIGlmIChsZWFkaW5nX2NvbW1lbnRzICE9IE5V
TEwpIHsKLSAgICBzZXRfaGFzX2xlYWRpbmdfY29tbWVudHMoKTsKLSAgfSBlbHNlIHsKLSAgICBj
bGVhcl9oYXNfbGVhZGluZ19jb21tZW50cygpOwotICB9Ci0gIGxlYWRpbmdfY29tbWVudHNfLlNl
dEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBsZWFkaW5nX2NvbW1lbnRzKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJj
ZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdfY29tbWVudHMpCi19Ci0KLS8vIG9wdGlvbmFsIHN0
cmluZyB0cmFpbGluZ19jb21tZW50cyA9IDQ7Ci1pbmxpbmUgYm9vbCBTb3VyY2VDb2RlSW5mb19M
b2NhdGlvbjo6aGFzX3RyYWlsaW5nX2NvbW1lbnRzKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNf
Yml0c19bMF0gJiAweDAwMDAwMDA4dSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJ
bmZvX0xvY2F0aW9uOjpzZXRfaGFzX3RyYWlsaW5nX2NvbW1lbnRzKCkgewotICBfaGFzX2JpdHNf
WzBdIHw9IDB4MDAwMDAwMDh1OwotfQotaW5saW5lIHZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRp
b246OmNsZWFyX2hhc190cmFpbGluZ19jb21tZW50cygpIHsKLSAgX2hhc19iaXRzX1swXSAmPSB+
MHgwMDAwMDAwOHU7Ci19Ci1pbmxpbmUgdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6Y2xl
YXJfdHJhaWxpbmdfY29tbWVudHMoKSB7Ci0gIHRyYWlsaW5nX2NvbW1lbnRzXy5DbGVhclRvRW1w
dHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci0gIGNsZWFyX2hhc190cmFpbGluZ19jb21tZW50cygpOwotfQotaW5s
aW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjp0cmFpbGlu
Z19jb21tZW50cygpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X2dldDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24udHJhaWxpbmdfY29t
bWVudHMpCi0gIHJldHVybiB0cmFpbGluZ19jb21tZW50c18uR2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQot
aW5saW5lIHZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnNldF90cmFpbGluZ19jb21tZW50
cyhjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzZXRfaGFzX3RyYWlsaW5nX2NvbW1l
bnRzKCk7Ci0gIHRyYWlsaW5nX2NvbW1lbnRzXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5Tb3Vy
Y2VDb2RlSW5mby5Mb2NhdGlvbi50cmFpbGluZ19jb21tZW50cykKLX0KLWlubGluZSB2b2lkIFNv
dXJjZUNvZGVJbmZvX0xvY2F0aW9uOjpzZXRfdHJhaWxpbmdfY29tbWVudHMoY29uc3QgY2hhciog
dmFsdWUpIHsKLSAgc2V0X2hhc190cmFpbGluZ19jb21tZW50cygpOwotICB0cmFpbGluZ19jb21t
ZW50c18uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VD
b2RlSW5mby5Mb2NhdGlvbi50cmFpbGluZ19jb21tZW50cykKLX0KLWlubGluZSB2b2lkIFNvdXJj
ZUNvZGVJbmZvX0xvY2F0aW9uOjpzZXRfdHJhaWxpbmdfY29tbWVudHMoY29uc3QgY2hhciogdmFs
dWUsIHNpemVfdCBzaXplKSB7Ci0gIHNldF9oYXNfdHJhaWxpbmdfY29tbWVudHMoKTsKLSAgdHJh
aWxpbmdfY29tbWVudHNfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VD
b2RlSW5mby5Mb2NhdGlvbi50cmFpbGluZ19jb21tZW50cykKLX0KLWlubGluZSA6OnN0ZDo6c3Ry
aW5nKiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6bXV0YWJsZV90cmFpbGluZ19jb21tZW50cygp
IHsKLSAgc2V0X2hhc190cmFpbGluZ19jb21tZW50cygpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9j
YXRpb24udHJhaWxpbmdfY29tbWVudHMpCi0gIHJldHVybiB0cmFpbGluZ19jb21tZW50c18uTXV0
YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBTb3VyY2VDb2RlSW5m
b19Mb2NhdGlvbjo6cmVsZWFzZV90cmFpbGluZ19jb21tZW50cygpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJ
bmZvLkxvY2F0aW9uLnRyYWlsaW5nX2NvbW1lbnRzKQotICBjbGVhcl9oYXNfdHJhaWxpbmdfY29t
bWVudHMoKTsKLSAgcmV0dXJuIHRyYWlsaW5nX2NvbW1lbnRzXy5SZWxlYXNlTm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotfQotaW5saW5lIHZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRpb246OnNldF9hbGxvY2F0ZWRf
dHJhaWxpbmdfY29tbWVudHMoOjpzdGQ6OnN0cmluZyogdHJhaWxpbmdfY29tbWVudHMpIHsKLSAg
aWYgKHRyYWlsaW5nX2NvbW1lbnRzICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX3RyYWlsaW5nX2Nv
bW1lbnRzKCk7Ci0gIH0gZWxzZSB7Ci0gICAgY2xlYXJfaGFzX3RyYWlsaW5nX2NvbW1lbnRzKCk7
Ci0gIH0KLSAgdHJhaWxpbmdfY29tbWVudHNfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB0cmFp
bGluZ19jb21tZW50cyk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRf
YWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi50cmFpbGlu
Z19jb21tZW50cykKLX0KLQotLy8gcmVwZWF0ZWQgc3RyaW5nIGxlYWRpbmdfZGV0YWNoZWRfY29t
bWVudHMgPSA2OwotaW5saW5lIGludCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbjo6bGVhZGluZ19k
ZXRhY2hlZF9jb21tZW50c19zaXplKCkgY29uc3QgewotICByZXR1cm4gbGVhZGluZ19kZXRhY2hl
ZF9jb21tZW50c18uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgU291cmNlQ29kZUluZm9fTG9jYXRp
b246OmNsZWFyX2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoKSB7Ci0gIGxlYWRpbmdfZGV0YWNo
ZWRfY29tbWVudHNfLkNsZWFyKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgU291
cmNlQ29kZUluZm9fTG9jYXRpb246OmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoaW50IGluZGV4
KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xl
LnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdfZGV0YWNoZWRfY29tbWVu
dHMpCi0gIHJldHVybiBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzXy5HZXQoaW5kZXgpOwotfQot
aW5saW5lIDo6c3RkOjpzdHJpbmcqIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjptdXRhYmxlX2xl
YWRpbmdfZGV0YWNoZWRfY29tbWVudHMoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5M
b2NhdGlvbi5sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKQotICByZXR1cm4gbGVhZGluZ19kZXRh
Y2hlZF9jb21tZW50c18uTXV0YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgdm9pZCBTb3VyY2VDb2Rl
SW5mb19Mb2NhdGlvbjo6c2V0X2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoaW50IGluZGV4LCBj
b25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFk
aW5nX2RldGFjaGVkX2NvbW1lbnRzKQotICBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzXy5NdXRh
YmxlKGluZGV4KS0+YXNzaWduKHZhbHVlKTsKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJbmZv
X0xvY2F0aW9uOjpzZXRfbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cyhpbnQgaW5kZXgsIGNvbnN0
IGNoYXIqIHZhbHVlKSB7Ci0gIGxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHNfLk11dGFibGUoaW5k
ZXgpLT5hc3NpZ24odmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdf
ZGV0YWNoZWRfY29tbWVudHMpCi19Ci1pbmxpbmUgdm9pZCBTb3VyY2VDb2RlSW5mb19Mb2NhdGlv
bjo6c2V0X2xlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMoaW50IGluZGV4LCBjb25zdCBjaGFyKiB2
YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgbGVhZGluZ19kZXRhY2hlZF9jb21tZW50c18uTXV0YWJs
ZShpbmRleCktPmFzc2lnbigKLSAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1
ZSksIHNpemUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50
ZXI6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdfZGV0YWNo
ZWRfY29tbWVudHMpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogU291cmNlQ29kZUluZm9fTG9j
YXRpb246OmFkZF9sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNv
ZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMpCi0gIHJldHVybiBsZWFk
aW5nX2RldGFjaGVkX2NvbW1lbnRzXy5BZGQoKTsKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJ
bmZvX0xvY2F0aW9uOjphZGRfbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cyhjb25zdCA6OnN0ZDo6
c3RyaW5nJiB2YWx1ZSkgewotICBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzXy5BZGQoKS0+YXNz
aWduKHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29n
bGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ubGVhZGluZ19kZXRhY2hlZF9jb21t
ZW50cykKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjphZGRfbGVhZGlu
Z19kZXRhY2hlZF9jb21tZW50cyhjb25zdCBjaGFyKiB2YWx1ZSkgewotICBsZWFkaW5nX2RldGFj
aGVkX2NvbW1lbnRzXy5BZGQoKS0+YXNzaWduKHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX2FkZF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5M
b2NhdGlvbi5sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKQotfQotaW5saW5lIHZvaWQgU291cmNl
Q29kZUluZm9fTG9jYXRpb246OmFkZF9sZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzKGNvbnN0IGNo
YXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzXy5B
ZGQoKS0+YXNzaWduKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGRfcG9pbnRlcjpnb29nbGUu
cHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24ubGVhZGluZ19kZXRhY2hlZF9jb21tZW50
cykKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8
IDo6c3RkOjpzdHJpbmc+JgotU291cmNlQ29kZUluZm9fTG9jYXRpb246OmxlYWRpbmdfZGV0YWNo
ZWRfY29tbWVudHMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5sZWFkaW5nX2Rl
dGFjaGVkX2NvbW1lbnRzKQotICByZXR1cm4gbGVhZGluZ19kZXRhY2hlZF9jb21tZW50c187Ci19
Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3Ry
aW5nPioKLVNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uOjptdXRhYmxlX2xlYWRpbmdfZGV0YWNoZWRf
Y29tbWVudHMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxl
X2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLmxlYWRpbmdfZGV0
YWNoZWRfY29tbWVudHMpCi0gIHJldHVybiAmbGVhZGluZ19kZXRhY2hlZF9jb21tZW50c187Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gU291cmNlQ29kZUluZm8KLQotLy8gcmVwZWF0ZWQgLmdv
b2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvbiBsb2NhdGlvbiA9IDE7Ci1pbmxp
bmUgaW50IFNvdXJjZUNvZGVJbmZvOjpsb2NhdGlvbl9zaXplKCkgY29uc3QgewotICByZXR1cm4g
bG9jYXRpb25fLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvZGVJbmZvOjpjbGVhcl9s
b2NhdGlvbigpIHsKLSAgbG9jYXRpb25fLkNsZWFyKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiYgU291cmNlQ29kZUluZm86Omxv
Y2F0aW9uKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5sb2NhdGlvbikKLSAgcmV0
dXJuIGxvY2F0aW9uXy5HZXQoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
U291cmNlQ29kZUluZm9fTG9jYXRpb24qIFNvdXJjZUNvZGVJbmZvOjptdXRhYmxlX2xvY2F0aW9u
KGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJs
ZTpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ubG9jYXRpb24pCi0gIHJldHVybiBsb2Nh
dGlvbl8uTXV0YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpTb3Vy
Y2VDb2RlSW5mb19Mb2NhdGlvbiogU291cmNlQ29kZUluZm86OmFkZF9sb2NhdGlvbigpIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuU291
cmNlQ29kZUluZm8ubG9jYXRpb24pCi0gIHJldHVybiBsb2NhdGlvbl8uQWRkKCk7Ci19Ci1pbmxp
bmUgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9i
dWY6OlNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uID4qCi1Tb3VyY2VDb2RlSW5mbzo6bXV0YWJsZV9s
b2NhdGlvbigpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVf
bGlzdDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ubG9jYXRpb24pCi0gIHJldHVybiAm
bG9jYXRpb25fOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQ
dHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiA+Jgot
U291cmNlQ29kZUluZm86OmxvY2F0aW9uKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8ubG9jYXRp
b24pCi0gIHJldHVybiBsb2NhdGlvbl87Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gR2VuZXJh
dGVkQ29kZUluZm9fQW5ub3RhdGlvbgotCi0vLyByZXBlYXRlZCBpbnQzMiBwYXRoID0gMSBbcGFj
a2VkID0gdHJ1ZV07Ci1pbmxpbmUgaW50IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OnBh
dGhfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHBhdGhfLnNpemUoKTsKLX0KLWlubGluZSB2b2lk
IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmNsZWFyX3BhdGgoKSB7Ci0gIHBhdGhfLkNs
ZWFyKCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBHZW5lcmF0ZWRDb2Rl
SW5mb19Bbm5vdGF0aW9uOjpwYXRoKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5m
by5Bbm5vdGF0aW9uLnBhdGgpCi0gIHJldHVybiBwYXRoXy5HZXQoaW5kZXgpOwotfQotaW5saW5l
IHZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6c2V0X3BhdGgoaW50IGluZGV4LCA6
Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIHBhdGhfLlNldChpbmRleCwgdmFs
dWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90
b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnBhdGgpCi19Ci1pbmxpbmUgdm9pZCBH
ZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjphZGRfcGF0aCg6Omdvb2dsZTo6cHJvdG9idWY6
OmludDMyIHZhbHVlKSB7Ci0gIHBhdGhfLkFkZCh2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFu
bm90YXRpb24ucGF0aCkKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPiYKLUdlbmVyYXRlZENvZGVJbmZv
X0Fubm90YXRpb246OnBhdGgoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9u
LnBhdGgpCi0gIHJldHVybiBwYXRoXzsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJl
cGVhdGVkRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgPioKLUdlbmVyYXRlZENvZGVJ
bmZvX0Fubm90YXRpb246Om11dGFibGVfcGF0aCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUlu
Zm8uQW5ub3RhdGlvbi5wYXRoKQotICByZXR1cm4gJnBhdGhfOwotfQotCi0vLyBvcHRpb25hbCBz
dHJpbmcgc291cmNlX2ZpbGUgPSAyOwotaW5saW5lIGJvb2wgR2VuZXJhdGVkQ29kZUluZm9fQW5u
b3RhdGlvbjo6aGFzX3NvdXJjZV9maWxlKCkgY29uc3QgewotICByZXR1cm4gKF9oYXNfYml0c19b
MF0gJiAweDAwMDAwMDAydSkgIT0gMDsKLX0KLWlubGluZSB2b2lkIEdlbmVyYXRlZENvZGVJbmZv
X0Fubm90YXRpb246OnNldF9oYXNfc291cmNlX2ZpbGUoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0g
MHgwMDAwMDAwMnU7Ci19Ci1pbmxpbmUgdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9u
OjpjbGVhcl9oYXNfc291cmNlX2ZpbGUoKSB7Ci0gIF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAw
MDJ1OwotfQotaW5saW5lIHZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6Y2xlYXJf
c291cmNlX2ZpbGUoKSB7Ci0gIHNvdXJjZV9maWxlXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci0gIGNsZWFyX2hhc19zb3VyY2VfZmlsZSgpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJp
bmcmIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OnNvdXJjZV9maWxlKCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5H
ZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNvdXJjZV9maWxlKQotICByZXR1cm4gc291cmNl
X2ZpbGVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIEdlbmVyYXRlZENvZGVJbmZv
X0Fubm90YXRpb246OnNldF9zb3VyY2VfZmlsZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkg
ewotICBzZXRfaGFzX3NvdXJjZV9maWxlKCk7Ci0gIHNvdXJjZV9maWxlXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNvdXJjZV9maWxlKQotfQot
aW5saW5lIHZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6c2V0X3NvdXJjZV9maWxl
KGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHNldF9oYXNfc291cmNlX2ZpbGUoKTsKLSAgc291cmNl
X2ZpbGVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuR2VuZXJh
dGVkQ29kZUluZm8uQW5ub3RhdGlvbi5zb3VyY2VfZmlsZSkKLX0KLWlubGluZSB2b2lkIEdlbmVy
YXRlZENvZGVJbmZvX0Fubm90YXRpb246OnNldF9zb3VyY2VfZmlsZShjb25zdCBjaGFyKiB2YWx1
ZSwgc2l6ZV90IHNpemUpIHsKLSAgc2V0X2hhc19zb3VyY2VfZmlsZSgpOwotICBzb3VyY2VfZmls
ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFu
bm90YXRpb24uc291cmNlX2ZpbGUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogR2VuZXJhdGVk
Q29kZUluZm9fQW5ub3RhdGlvbjo6bXV0YWJsZV9zb3VyY2VfZmlsZSgpIHsKLSAgc2V0X2hhc19z
b3VyY2VfZmlsZSgpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJs
ZTpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5zb3VyY2VfZmls
ZSkKLSAgcmV0dXJuIHNvdXJjZV9maWxlXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5l
IDo6c3RkOjpzdHJpbmcqIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OnJlbGVhc2Vfc291
cmNlX2ZpbGUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNl
Omdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLnNvdXJjZV9maWxl
KQotICBjbGVhcl9oYXNfc291cmNlX2ZpbGUoKTsKLSAgcmV0dXJuIHNvdXJjZV9maWxlXy5SZWxl
YXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3Rh
dGlvbjo6c2V0X2FsbG9jYXRlZF9zb3VyY2VfZmlsZSg6OnN0ZDo6c3RyaW5nKiBzb3VyY2VfZmls
ZSkgewotICBpZiAoc291cmNlX2ZpbGUgIT0gTlVMTCkgewotICAgIHNldF9oYXNfc291cmNlX2Zp
bGUoKTsKLSAgfSBlbHNlIHsKLSAgICBjbGVhcl9oYXNfc291cmNlX2ZpbGUoKTsKLSAgfQotICBz
b3VyY2VfZmlsZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHNvdXJjZV9maWxlKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3Rv
YnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb24uc291cmNlX2ZpbGUpCi19Ci0KLS8vIG9w
dGlvbmFsIGludDMyIGJlZ2luID0gMzsKLWlubGluZSBib29sIEdlbmVyYXRlZENvZGVJbmZvX0Fu
bm90YXRpb246Omhhc19iZWdpbigpIGNvbnN0IHsKLSAgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYg
MHgwMDAwMDAwNHUpICE9IDA7Ci19Ci1pbmxpbmUgdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5v
dGF0aW9uOjpzZXRfaGFzX2JlZ2luKCkgewotICBfaGFzX2JpdHNfWzBdIHw9IDB4MDAwMDAwMDR1
OwotfQotaW5saW5lIHZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6Y2xlYXJfaGFz
X2JlZ2luKCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDA0dTsKLX0KLWlubGluZSB2
b2lkIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmNsZWFyX2JlZ2luKCkgewotICBiZWdp
bl8gPSAwOwotICBjbGVhcl9oYXNfYmVnaW4oKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludDMyIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmJlZ2luKCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5H
ZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uLmJlZ2luKQotICByZXR1cm4gYmVnaW5fOwotfQot
aW5saW5lIHZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6c2V0X2JlZ2luKDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpIHsKLSAgc2V0X2hhc19iZWdpbigpOwotICBiZWdp
bl8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29n
bGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvbi5iZWdpbikKLX0KLQotLy8g
b3B0aW9uYWwgaW50MzIgZW5kID0gNDsKLWlubGluZSBib29sIEdlbmVyYXRlZENvZGVJbmZvX0Fu
bm90YXRpb246Omhhc19lbmQoKSBjb25zdCB7Ci0gIHJldHVybiAoX2hhc19iaXRzX1swXSAmIDB4
MDAwMDAwMDh1KSAhPSAwOwotfQotaW5saW5lIHZvaWQgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3Rh
dGlvbjo6c2V0X2hhc19lbmQoKSB7Ci0gIF9oYXNfYml0c19bMF0gfD0gMHgwMDAwMDAwOHU7Ci19
Ci1pbmxpbmUgdm9pZCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uOjpjbGVhcl9oYXNfZW5k
KCkgewotICBfaGFzX2JpdHNfWzBdICY9IH4weDAwMDAwMDA4dTsKLX0KLWlubGluZSB2b2lkIEdl
bmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmNsZWFyX2VuZCgpIHsKLSAgZW5kXyA9IDA7Ci0g
IGNsZWFyX2hhc19lbmQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIEdl
bmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb246OmVuZCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUlu
Zm8uQW5ub3RhdGlvbi5lbmQpCi0gIHJldHVybiBlbmRfOwotfQotaW5saW5lIHZvaWQgR2VuZXJh
dGVkQ29kZUluZm9fQW5ub3RhdGlvbjo6c2V0X2VuZCg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMy
IHZhbHVlKSB7Ci0gIHNldF9oYXNfZW5kKCk7Ci0gIGVuZF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29k
ZUluZm8uQW5ub3RhdGlvbi5lbmQpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gR2VuZXJhdGVk
Q29kZUluZm8KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5m
by5Bbm5vdGF0aW9uIGFubm90YXRpb24gPSAxOwotaW5saW5lIGludCBHZW5lcmF0ZWRDb2RlSW5m
bzo6YW5ub3RhdGlvbl9zaXplKCkgY29uc3QgewotICByZXR1cm4gYW5ub3RhdGlvbl8uc2l6ZSgp
OwotfQotaW5saW5lIHZvaWQgR2VuZXJhdGVkQ29kZUluZm86OmNsZWFyX2Fubm90YXRpb24oKSB7
Ci0gIGFubm90YXRpb25fLkNsZWFyKCk7Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uJiBHZW5lcmF0ZWRDb2RlSW5mbzo6YW5u
b3RhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uYW5ub3RhdGlvbikK
LSAgcmV0dXJuIGFubm90YXRpb25fLkdldChpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnBy
b3RvYnVmOjpHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uKiBHZW5lcmF0ZWRDb2RlSW5mbzo6
bXV0YWJsZV9hbm5vdGF0aW9uKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uYW5u
b3RhdGlvbikKLSAgcmV0dXJuIGFubm90YXRpb25fLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5l
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6R2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiogR2VuZXJh
dGVkQ29kZUluZm86OmFkZF9hbm5vdGF0aW9uKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5hbm5vdGF0
aW9uKQotICByZXR1cm4gYW5ub3RhdGlvbl8uQWRkKCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnBy
b3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkdlbmVyYXRlZENv
ZGVJbmZvX0Fubm90YXRpb24gPioKLUdlbmVyYXRlZENvZGVJbmZvOjptdXRhYmxlX2Fubm90YXRp
b24oKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6
Z29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLmFubm90YXRpb24pCi0gIHJldHVybiAm
YW5ub3RhdGlvbl87Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRl
ZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRp
b24gPiYKLUdlbmVyYXRlZENvZGVJbmZvOjphbm5vdGF0aW9uKCkgY29uc3QgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuR2VuZXJhdGVk
Q29kZUluZm8uYW5ub3RhdGlvbikKLSAgcmV0dXJuIGFubm90YXRpb25fOwotfQotCi0jZW5kaWYg
IC8vICFQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChuYW1lc3BhY2Vfc2NvcGUpCi0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFt
ZXNwYWNlIGdvb2dsZQotCi0jaWZuZGVmIFNXSUcKLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNw
YWNlIHByb3RvYnVmIHsKLQotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Byb3RvX2VudW08IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZT4gOiA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjp0cnVlX3R5cGUge307Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0
IEVudW1EZXNjcmlwdG9yKiBHZXRFbnVtRGVzY3JpcHRvcjwgOjpnb29nbGU6OnByb3RvYnVmOjpG
aWVsZERlc2NyaXB0b3JQcm90b19UeXBlPigpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZV9kZXNjcmlwdG9yKCk7Ci19Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgaXNfcHJvdG9fZW51bTwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0
b3JQcm90b19MYWJlbD4gOiA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjp0cnVlX3R5cGUg
e307Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBHZXRFbnVtRGVz
Y3JpcHRvcjwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbD4o
KSB7Ci0gIHJldHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvclByb3RvX0xh
YmVsX2Rlc2NyaXB0b3IoKTsKLX0KLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19wcm90b19lbnVtPCA6
Omdvb2dsZTo6cHJvdG9idWY6OkZpbGVPcHRpb25zX09wdGltaXplTW9kZT4gOiA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjp0cnVlX3R5cGUge307Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGNv
bnN0IEVudW1EZXNjcmlwdG9yKiBHZXRFbnVtRGVzY3JpcHRvcjwgOjpnb29nbGU6OnByb3RvYnVm
OjpGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGU+KCkgewotICByZXR1cm4gOjpnb29nbGU6OnByb3Rv
YnVmOjpGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVfZGVzY3JpcHRvcigpOwotfQotdGVtcGxhdGUg
PD4gc3RydWN0IGlzX3Byb3RvX2VudW08IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRPcHRpb25z
X0NUeXBlPiA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OnRydWVfdHlwZSB7fTsKLXRl
bXBsYXRlIDw+Ci1pbmxpbmUgY29uc3QgRW51bURlc2NyaXB0b3IqIEdldEVudW1EZXNjcmlwdG9y
PCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19DVHlwZT4oKSB7Ci0gIHJldHVybiA6
Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19DVHlwZV9kZXNjcmlwdG9yKCk7Ci19Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfcHJvdG9fZW51bTwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZE9wdGlvbnNfSlNUeXBlPiA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OnRydWVfdHlw
ZSB7fTsKLXRlbXBsYXRlIDw+Ci1pbmxpbmUgY29uc3QgRW51bURlc2NyaXB0b3IqIEdldEVudW1E
ZXNjcmlwdG9yPCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkT3B0aW9uc19KU1R5cGU+KCkgewot
ICByZXR1cm4gOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE9wdGlvbnNfSlNUeXBlX2Rlc2NyaXB0
b3IoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCi0jZW5kaWYgIC8vIFNXSUcKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2Jh
bF9zY29wZSkKLQotI2VuZGlmICAvLyBQUk9UT0JVRl9nb29nbGVfMmZwcm90b2J1Zl8yZmRlc2Ny
aXB0b3JfMmVwcm90b19fSU5DTFVERUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9k
ZXNjcmlwdG9yLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4YjE1NTU0OGJlYjkwZWQ4NTBiZDkyZTg4MmE4
ODk2YTdmMjk1NzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8KKysrIC9kZXYvbnVsbApAQCAt
MSw4MDMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1
dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmln
aW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVm
ZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIFRoZSBtZXNzYWdlcyBpbiB0aGlzIGZpbGUgZGVz
Y3JpYmUgdGhlIGRlZmluaXRpb25zIGZvdW5kIGluIC5wcm90byBmaWxlcy4KLS8vIEEgdmFsaWQg
LnByb3RvIGZpbGUgY2FuIGJlIHRyYW5zbGF0ZWQgZGlyZWN0bHkgdG8gYSBGaWxlRGVzY3JpcHRv
clByb3RvCi0vLyB3aXRob3V0IGFueSBvdGhlciBpbmZvcm1hdGlvbiAoZS5nLiB3aXRob3V0IHJl
YWRpbmcgaXRzIGltcG9ydHMpLgotCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi1wYWNrYWdlIGdv
b2dsZS5wcm90b2J1ZjsKLW9wdGlvbiBnb19wYWNrYWdlID0gImRlc2NyaXB0b3IiOwotb3B0aW9u
IGphdmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmIjsKLW9wdGlvbiBqYXZhX291dGVy
X2NsYXNzbmFtZSA9ICJEZXNjcmlwdG9yUHJvdG9zIjsKLW9wdGlvbiBjc2hhcnBfbmFtZXNwYWNl
ID0gIkdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uIjsKLW9wdGlvbiBvYmpjX2NsYXNzX3ByZWZp
eCA9ICJHUEIiOwotCi0vLyBkZXNjcmlwdG9yLnByb3RvIG11c3QgYmUgb3B0aW1pemVkIGZvciBz
cGVlZCBiZWNhdXNlIHJlZmxlY3Rpb24tYmFzZWQKLS8vIGFsZ29yaXRobXMgZG9uJ3Qgd29yayBk
dXJpbmcgYm9vdHN0cmFwcGluZy4KLW9wdGlvbiBvcHRpbWl6ZV9mb3IgPSBTUEVFRDsKLQotLy8g
VGhlIHByb3RvY29sIGNvbXBpbGVyIGNhbiBvdXRwdXQgYSBGaWxlRGVzY3JpcHRvclNldCBjb250
YWluaW5nIHRoZSAucHJvdG8KLS8vIGZpbGVzIGl0IHBhcnNlcy4KLW1lc3NhZ2UgRmlsZURlc2Ny
aXB0b3JTZXQgewotICByZXBlYXRlZCBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGUgPSAxOwotfQot
Ci0vLyBEZXNjcmliZXMgYSBjb21wbGV0ZSAucHJvdG8gZmlsZS4KLW1lc3NhZ2UgRmlsZURlc2Ny
aXB0b3JQcm90byB7Ci0gIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsgICAgICAgLy8gZmlsZSBu
YW1lLCByZWxhdGl2ZSB0byByb290IG9mIHNvdXJjZSB0cmVlCi0gIG9wdGlvbmFsIHN0cmluZyBw
YWNrYWdlID0gMjsgICAgLy8gZS5nLiAiZm9vIiwgImZvby5iYXIiLCBldGMuCi0KLSAgLy8gTmFt
ZXMgb2YgZmlsZXMgaW1wb3J0ZWQgYnkgdGhpcyBmaWxlLgotICByZXBlYXRlZCBzdHJpbmcgZGVw
ZW5kZW5jeSA9IDM7Ci0gIC8vIEluZGV4ZXMgb2YgdGhlIHB1YmxpYyBpbXBvcnRlZCBmaWxlcyBp
biB0aGUgZGVwZW5kZW5jeSBsaXN0IGFib3ZlLgotICByZXBlYXRlZCBpbnQzMiBwdWJsaWNfZGVw
ZW5kZW5jeSA9IDEwOwotICAvLyBJbmRleGVzIG9mIHRoZSB3ZWFrIGltcG9ydGVkIGZpbGVzIGlu
IHRoZSBkZXBlbmRlbmN5IGxpc3QuCi0gIC8vIEZvciBHb29nbGUtaW50ZXJuYWwgbWlncmF0aW9u
IG9ubHkuIERvIG5vdCB1c2UuCi0gIHJlcGVhdGVkIGludDMyIHdlYWtfZGVwZW5kZW5jeSA9IDEx
OwotCi0gIC8vIEFsbCB0b3AtbGV2ZWwgZGVmaW5pdGlvbnMgaW4gdGhpcyBmaWxlLgotICByZXBl
YXRlZCBEZXNjcmlwdG9yUHJvdG8gbWVzc2FnZV90eXBlID0gNDsKLSAgcmVwZWF0ZWQgRW51bURl
c2NyaXB0b3JQcm90byBlbnVtX3R5cGUgPSA1OwotICByZXBlYXRlZCBTZXJ2aWNlRGVzY3JpcHRv
clByb3RvIHNlcnZpY2UgPSA2OwotICByZXBlYXRlZCBGaWVsZERlc2NyaXB0b3JQcm90byBleHRl
bnNpb24gPSA3OwotCi0gIG9wdGlvbmFsIEZpbGVPcHRpb25zIG9wdGlvbnMgPSA4OwotCi0gIC8v
IFRoaXMgZmllbGQgY29udGFpbnMgb3B0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdp
bmFsIHNvdXJjZSBjb2RlLgotICAvLyBZb3UgbWF5IHNhZmVseSByZW1vdmUgdGhpcyBlbnRpcmUg
ZmllbGQgd2l0aG91dCBoYXJtaW5nIHJ1bnRpbWUKLSAgLy8gZnVuY3Rpb25hbGl0eSBvZiB0aGUg
ZGVzY3JpcHRvcnMgLS0gdGhlIGluZm9ybWF0aW9uIGlzIG5lZWRlZCBvbmx5IGJ5Ci0gIC8vIGRl
dmVsb3BtZW50IHRvb2xzLgotICBvcHRpb25hbCBTb3VyY2VDb2RlSW5mbyBzb3VyY2VfY29kZV9p
bmZvID0gOTsKLQotICAvLyBUaGUgc3ludGF4IG9mIHRoZSBwcm90byBmaWxlLgotICAvLyBUaGUg
c3VwcG9ydGVkIHZhbHVlcyBhcmUgInByb3RvMiIgYW5kICJwcm90bzMiLgotICBvcHRpb25hbCBz
dHJpbmcgc3ludGF4ID0gMTI7Ci19Ci0KLS8vIERlc2NyaWJlcyBhIG1lc3NhZ2UgdHlwZS4KLW1l
c3NhZ2UgRGVzY3JpcHRvclByb3RvIHsKLSAgb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotCi0g
IHJlcGVhdGVkIEZpZWxkRGVzY3JpcHRvclByb3RvIGZpZWxkID0gMjsKLSAgcmVwZWF0ZWQgRmll
bGREZXNjcmlwdG9yUHJvdG8gZXh0ZW5zaW9uID0gNjsKLQotICByZXBlYXRlZCBEZXNjcmlwdG9y
UHJvdG8gbmVzdGVkX3R5cGUgPSAzOwotICByZXBlYXRlZCBFbnVtRGVzY3JpcHRvclByb3RvIGVu
dW1fdHlwZSA9IDQ7Ci0KLSAgbWVzc2FnZSBFeHRlbnNpb25SYW5nZSB7Ci0gICAgb3B0aW9uYWwg
aW50MzIgc3RhcnQgPSAxOwotICAgIG9wdGlvbmFsIGludDMyIGVuZCA9IDI7Ci0gIH0KLSAgcmVw
ZWF0ZWQgRXh0ZW5zaW9uUmFuZ2UgZXh0ZW5zaW9uX3JhbmdlID0gNTsKLQotICByZXBlYXRlZCBP
bmVvZkRlc2NyaXB0b3JQcm90byBvbmVvZl9kZWNsID0gODsKLQotICBvcHRpb25hbCBNZXNzYWdl
T3B0aW9ucyBvcHRpb25zID0gNzsKLQotICAvLyBSYW5nZSBvZiByZXNlcnZlZCB0YWcgbnVtYmVy
cy4gUmVzZXJ2ZWQgdGFnIG51bWJlcnMgbWF5IG5vdCBiZSB1c2VkIGJ5Ci0gIC8vIGZpZWxkcyBv
ciBleHRlbnNpb24gcmFuZ2VzIGluIHRoZSBzYW1lIG1lc3NhZ2UuIFJlc2VydmVkIHJhbmdlcyBt
YXkKLSAgLy8gbm90IG92ZXJsYXAuCi0gIG1lc3NhZ2UgUmVzZXJ2ZWRSYW5nZSB7Ci0gICAgb3B0
aW9uYWwgaW50MzIgc3RhcnQgPSAxOyAvLyBJbmNsdXNpdmUuCi0gICAgb3B0aW9uYWwgaW50MzIg
ZW5kID0gMjsgICAvLyBFeGNsdXNpdmUuCi0gIH0KLSAgcmVwZWF0ZWQgUmVzZXJ2ZWRSYW5nZSBy
ZXNlcnZlZF9yYW5nZSA9IDk7Ci0gIC8vIFJlc2VydmVkIGZpZWxkIG5hbWVzLCB3aGljaCBtYXkg
bm90IGJlIHVzZWQgYnkgZmllbGRzIGluIHRoZSBzYW1lIG1lc3NhZ2UuCi0gIC8vIEEgZ2l2ZW4g
bmFtZSBtYXkgb25seSBiZSByZXNlcnZlZCBvbmNlLgotICByZXBlYXRlZCBzdHJpbmcgcmVzZXJ2
ZWRfbmFtZSA9IDEwOwotfQotCi0vLyBEZXNjcmliZXMgYSBmaWVsZCB3aXRoaW4gYSBtZXNzYWdl
LgotbWVzc2FnZSBGaWVsZERlc2NyaXB0b3JQcm90byB7Ci0gIGVudW0gVHlwZSB7Ci0gICAgLy8g
MCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzLgotICAgIC8vIE9yZGVyIGlzIHdlaXJkIGZvciBoaXN0
b3JpY2FsIHJlYXNvbnMuCi0gICAgVFlQRV9ET1VCTEUgICAgICAgICA9IDE7Ci0gICAgVFlQRV9G
TE9BVCAgICAgICAgICA9IDI7Ci0gICAgLy8gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUg
bnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDY0IGlmCi0gICAgLy8gbmVnYXRp
dmUgdmFsdWVzIGFyZSBsaWtlbHkuCi0gICAgVFlQRV9JTlQ2NCAgICAgICAgICA9IDM7Ci0gICAg
VFlQRV9VSU5UNjQgICAgICAgICA9IDQ7Ci0gICAgLy8gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVn
YXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDMyIGlmCi0gICAgLy8g
bmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuCi0gICAgVFlQRV9JTlQzMiAgICAgICAgICA9IDU7
Ci0gICAgVFlQRV9GSVhFRDY0ICAgICAgICA9IDY7Ci0gICAgVFlQRV9GSVhFRDMyICAgICAgICA9
IDc7Ci0gICAgVFlQRV9CT09MICAgICAgICAgICA9IDg7Ci0gICAgVFlQRV9TVFJJTkcgICAgICAg
ICA9IDk7Ci0gICAgVFlQRV9HUk9VUCAgICAgICAgICA9IDEwOyAgLy8gVGFnLWRlbGltaXRlZCBh
Z2dyZWdhdGUuCi0gICAgVFlQRV9NRVNTQUdFICAgICAgICA9IDExOyAgLy8gTGVuZ3RoLWRlbGlt
aXRlZCBhZ2dyZWdhdGUuCi0KLSAgICAvLyBOZXcgaW4gdmVyc2lvbiAyLgotICAgIFRZUEVfQllU
RVMgICAgICAgICAgPSAxMjsKLSAgICBUWVBFX1VJTlQzMiAgICAgICAgID0gMTM7Ci0gICAgVFlQ
RV9FTlVNICAgICAgICAgICA9IDE0OwotICAgIFRZUEVfU0ZJWEVEMzIgICAgICAgPSAxNTsKLSAg
ICBUWVBFX1NGSVhFRDY0ICAgICAgID0gMTY7Ci0gICAgVFlQRV9TSU5UMzIgICAgICAgICA9IDE3
OyAgLy8gVXNlcyBaaWdaYWcgZW5jb2RpbmcuCi0gICAgVFlQRV9TSU5UNjQgICAgICAgICA9IDE4
OyAgLy8gVXNlcyBaaWdaYWcgZW5jb2RpbmcuCi0gIH07Ci0KLSAgZW51bSBMYWJlbCB7Ci0gICAg
Ly8gMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzCi0gICAgTEFCRUxfT1BUSU9OQUwgICAgICA9IDE7
Ci0gICAgTEFCRUxfUkVRVUlSRUQgICAgICA9IDI7Ci0gICAgTEFCRUxfUkVQRUFURUQgICAgICA9
IDM7Ci0gICAgLy8gVE9ETyhzYW5qYXkpOiBTaG91bGQgd2UgYWRkIExBQkVMX01BUD8KLSAgfTsK
LQotICBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gIG9wdGlvbmFsIGludDMyIG51bWJlciA9
IDM7Ci0gIG9wdGlvbmFsIExhYmVsIGxhYmVsID0gNDsKLQotICAvLyBJZiB0eXBlX25hbWUgaXMg
c2V0LCB0aGlzIG5lZWQgbm90IGJlIHNldC4gIElmIGJvdGggdGhpcyBhbmQgdHlwZV9uYW1lCi0g
IC8vIGFyZSBzZXQsIHRoaXMgbXVzdCBiZSBvbmUgb2YgVFlQRV9FTlVNLCBUWVBFX01FU1NBR0Ug
b3IgVFlQRV9HUk9VUC4KLSAgb3B0aW9uYWwgVHlwZSB0eXBlID0gNTsKLQotICAvLyBGb3IgbWVz
c2FnZSBhbmQgZW51bSB0eXBlcywgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZS4gIElmIHRo
ZSBuYW1lCi0gIC8vIHN0YXJ0cyB3aXRoIGEgJy4nLCBpdCBpcyBmdWxseS1xdWFsaWZpZWQuICBP
dGhlcndpc2UsIEMrKy1saWtlIHNjb3BpbmcKLSAgLy8gcnVsZXMgYXJlIHVzZWQgdG8gZmluZCB0
aGUgdHlwZSAoaS5lLiBmaXJzdCB0aGUgbmVzdGVkIHR5cGVzIHdpdGhpbiB0aGlzCi0gIC8vIG1l
c3NhZ2UgYXJlIHNlYXJjaGVkLCB0aGVuIHdpdGhpbiB0aGUgcGFyZW50LCBvbiB1cCB0byB0aGUg
cm9vdAotICAvLyBuYW1lc3BhY2UpLgotICBvcHRpb25hbCBzdHJpbmcgdHlwZV9uYW1lID0gNjsK
LQotICAvLyBGb3IgZXh0ZW5zaW9ucywgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBiZWlu
ZyBleHRlbmRlZC4gIEl0IGlzCi0gIC8vIHJlc29sdmVkIGluIHRoZSBzYW1lIG1hbm5lciBhcyB0
eXBlX25hbWUuCi0gIG9wdGlvbmFsIHN0cmluZyBleHRlbmRlZSA9IDI7Ci0KLSAgLy8gRm9yIG51
bWVyaWMgdHlwZXMsIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCB0ZXh0IHJlcHJlc2VudGF0aW9uIG9m
IHRoZSB2YWx1ZS4KLSAgLy8gRm9yIGJvb2xlYW5zLCAidHJ1ZSIgb3IgImZhbHNlIi4KLSAgLy8g
Rm9yIHN0cmluZ3MsIGNvbnRhaW5zIHRoZSBkZWZhdWx0IHRleHQgY29udGVudHMgKG5vdCBlc2Nh
cGVkIGluIGFueSB3YXkpLgotICAvLyBGb3IgYnl0ZXMsIGNvbnRhaW5zIHRoZSBDIGVzY2FwZWQg
dmFsdWUuICBBbGwgYnl0ZXMgPj0gMTI4IGFyZSBlc2NhcGVkLgotICAvLyBUT0RPKGtlbnRvbik6
ICBCYXNlLTY0IGVuY29kZT8KLSAgb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfdmFsdWUgPSA3Owot
Ci0gIC8vIElmIHNldCwgZ2l2ZXMgdGhlIGluZGV4IG9mIGEgb25lb2YgaW4gdGhlIGNvbnRhaW5p
bmcgdHlwZSdzIG9uZW9mX2RlY2wKLSAgLy8gbGlzdC4gIFRoaXMgZmllbGQgaXMgYSBtZW1iZXIg
b2YgdGhhdCBvbmVvZi4KLSAgb3B0aW9uYWwgaW50MzIgb25lb2ZfaW5kZXggPSA5OwotCi0gIC8v
IEpTT04gbmFtZSBvZiB0aGlzIGZpZWxkLiBUaGUgdmFsdWUgaXMgc2V0IGJ5IHByb3RvY29sIGNv
bXBpbGVyLiBJZiB0aGUKLSAgLy8gdXNlciBoYXMgc2V0IGEgImpzb25fbmFtZSIgb3B0aW9uIG9u
IHRoaXMgZmllbGQsIHRoYXQgb3B0aW9uJ3MgdmFsdWUKLSAgLy8gd2lsbCBiZSB1c2VkLiBPdGhl
cndpc2UsIGl0J3MgZGVkdWNlZCBmcm9tIHRoZSBmaWVsZCdzIG5hbWUgYnkgY29udmVydGluZwot
ICAvLyBpdCB0byBjYW1lbENhc2UuCi0gIG9wdGlvbmFsIHN0cmluZyBqc29uX25hbWUgPSAxMDsK
LQotICBvcHRpb25hbCBGaWVsZE9wdGlvbnMgb3B0aW9ucyA9IDg7Ci19Ci0KLS8vIERlc2NyaWJl
cyBhIG9uZW9mLgotbWVzc2FnZSBPbmVvZkRlc2NyaXB0b3JQcm90byB7Ci0gIG9wdGlvbmFsIHN0
cmluZyBuYW1lID0gMTsKLX0KLQotLy8gRGVzY3JpYmVzIGFuIGVudW0gdHlwZS4KLW1lc3NhZ2Ug
RW51bURlc2NyaXB0b3JQcm90byB7Ci0gIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLQotICBy
ZXBlYXRlZCBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gdmFsdWUgPSAyOwotCi0gIG9wdGlvbmFs
IEVudW1PcHRpb25zIG9wdGlvbnMgPSAzOwotfQotCi0vLyBEZXNjcmliZXMgYSB2YWx1ZSB3aXRo
aW4gYW4gZW51bS4KLW1lc3NhZ2UgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHsKLSAgb3B0aW9u
YWwgc3RyaW5nIG5hbWUgPSAxOwotICBvcHRpb25hbCBpbnQzMiBudW1iZXIgPSAyOwotCi0gIG9w
dGlvbmFsIEVudW1WYWx1ZU9wdGlvbnMgb3B0aW9ucyA9IDM7Ci19Ci0KLS8vIERlc2NyaWJlcyBh
IHNlcnZpY2UuCi1tZXNzYWdlIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8gewotICBvcHRpb25hbCBz
dHJpbmcgbmFtZSA9IDE7Ci0gIHJlcGVhdGVkIE1ldGhvZERlc2NyaXB0b3JQcm90byBtZXRob2Qg
PSAyOwotCi0gIG9wdGlvbmFsIFNlcnZpY2VPcHRpb25zIG9wdGlvbnMgPSAzOwotfQotCi0vLyBE
ZXNjcmliZXMgYSBtZXRob2Qgb2YgYSBzZXJ2aWNlLgotbWVzc2FnZSBNZXRob2REZXNjcmlwdG9y
UHJvdG8gewotICBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0KLSAgLy8gSW5wdXQgYW5kIG91
dHB1dCB0eXBlIG5hbWVzLiAgVGhlc2UgYXJlIHJlc29sdmVkIGluIHRoZSBzYW1lIHdheSBhcwot
ICAvLyBGaWVsZERlc2NyaXB0b3JQcm90by50eXBlX25hbWUsIGJ1dCBtdXN0IHJlZmVyIHRvIGEg
bWVzc2FnZSB0eXBlLgotICBvcHRpb25hbCBzdHJpbmcgaW5wdXRfdHlwZSA9IDI7Ci0gIG9wdGlv
bmFsIHN0cmluZyBvdXRwdXRfdHlwZSA9IDM7Ci0KLSAgb3B0aW9uYWwgTWV0aG9kT3B0aW9ucyBv
cHRpb25zID0gNDsKLQotICAvLyBJZGVudGlmaWVzIGlmIGNsaWVudCBzdHJlYW1zIG11bHRpcGxl
IGNsaWVudCBtZXNzYWdlcwotICBvcHRpb25hbCBib29sIGNsaWVudF9zdHJlYW1pbmcgPSA1IFtk
ZWZhdWx0PWZhbHNlXTsKLSAgLy8gSWRlbnRpZmllcyBpZiBzZXJ2ZXIgc3RyZWFtcyBtdWx0aXBs
ZSBzZXJ2ZXIgbWVzc2FnZXMKLSAgb3B0aW9uYWwgYm9vbCBzZXJ2ZXJfc3RyZWFtaW5nID0gNiBb
ZGVmYXVsdD1mYWxzZV07Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gT3B0aW9ucwotCi0vLyBF
YWNoIG9mIHRoZSBkZWZpbml0aW9ucyBhYm92ZSBtYXkgaGF2ZSAib3B0aW9ucyIgYXR0YWNoZWQu
ICBUaGVzZSBhcmUKLS8vIGp1c3QgYW5ub3RhdGlvbnMgd2hpY2ggbWF5IGNhdXNlIGNvZGUgdG8g
YmUgZ2VuZXJhdGVkIHNsaWdodGx5IGRpZmZlcmVudGx5Ci0vLyBvciBtYXkgY29udGFpbiBoaW50
cyBmb3IgY29kZSB0aGF0IG1hbmlwdWxhdGVzIHByb3RvY29sIG1lc3NhZ2VzLgotLy8KLS8vIENs
aWVudHMgbWF5IGRlZmluZSBjdXN0b20gb3B0aW9ucyBhcyBleHRlbnNpb25zIG9mIHRoZSAqT3B0
aW9ucyBtZXNzYWdlcy4KLS8vIFRoZXNlIGV4dGVuc2lvbnMgbWF5IG5vdCB5ZXQgYmUga25vd24g
YXQgcGFyc2luZyB0aW1lLCBzbyB0aGUgcGFyc2VyIGNhbm5vdAotLy8gc3RvcmUgdGhlIHZhbHVl
cyBpbiB0aGVtLiAgSW5zdGVhZCBpdCBzdG9yZXMgdGhlbSBpbiBhIGZpZWxkIGluIHRoZSAqT3B0
aW9ucwotLy8gbWVzc2FnZSBjYWxsZWQgdW5pbnRlcnByZXRlZF9vcHRpb24uIFRoaXMgZmllbGQg
bXVzdCBoYXZlIHRoZSBzYW1lIG5hbWUKLS8vIGFjcm9zcyBhbGwgKk9wdGlvbnMgbWVzc2FnZXMu
IFdlIHRoZW4gdXNlIHRoaXMgZmllbGQgdG8gcG9wdWxhdGUgdGhlCi0vLyBleHRlbnNpb25zIHdo
ZW4gd2UgYnVpbGQgYSBkZXNjcmlwdG9yLCBhdCB3aGljaCBwb2ludCBhbGwgcHJvdG9zIGhhdmUg
YmVlbgotLy8gcGFyc2VkIGFuZCBzbyBhbGwgZXh0ZW5zaW9ucyBhcmUga25vd24uCi0vLwotLy8g
RXh0ZW5zaW9uIG51bWJlcnMgZm9yIGN1c3RvbSBvcHRpb25zIG1heSBiZSBjaG9zZW4gYXMgZm9s
bG93czoKLS8vICogRm9yIG9wdGlvbnMgd2hpY2ggd2lsbCBvbmx5IGJlIHVzZWQgd2l0aGluIGEg
c2luZ2xlIGFwcGxpY2F0aW9uIG9yCi0vLyAgIG9yZ2FuaXphdGlvbiwgb3IgZm9yIGV4cGVyaW1l
bnRhbCBvcHRpb25zLCB1c2UgZmllbGQgbnVtYmVycyA1MDAwMAotLy8gICB0aHJvdWdoIDk5OTk5
LiAgSXQgaXMgdXAgdG8geW91IHRvIGVuc3VyZSB0aGF0IHlvdSBkbyBub3QgdXNlIHRoZQotLy8g
ICBzYW1lIG51bWJlciBmb3IgbXVsdGlwbGUgb3B0aW9ucy4KLS8vICogRm9yIG9wdGlvbnMgd2hp
Y2ggd2lsbCBiZSBwdWJsaXNoZWQgYW5kIHVzZWQgcHVibGljbHkgYnkgbXVsdGlwbGUKLS8vICAg
aW5kZXBlbmRlbnQgZW50aXRpZXMsIGUtbWFpbCBwcm90b2J1Zi1nbG9iYWwtZXh0ZW5zaW9uLXJl
Z2lzdHJ5QGdvb2dsZS5jb20KLS8vICAgdG8gcmVzZXJ2ZSBleHRlbnNpb24gbnVtYmVycy4gU2lt
cGx5IHByb3ZpZGUgeW91ciBwcm9qZWN0IG5hbWUgKGUuZy4KLS8vICAgT2JqZWN0aXZlLUMgcGx1
Z2luKSBhbmQgeW91ciBwcm9qZWN0IHdlYnNpdGUgKGlmIGF2YWlsYWJsZSkgLS0gdGhlcmUncyBu
bwotLy8gICBuZWVkIHRvIGV4cGxhaW4gaG93IHlvdSBpbnRlbmQgdG8gdXNlIHRoZW0uIFVzdWFs
bHkgeW91IG9ubHkgbmVlZCBvbmUKLS8vICAgZXh0ZW5zaW9uIG51bWJlci4gWW91IGNhbiBkZWNs
YXJlIG11bHRpcGxlIG9wdGlvbnMgd2l0aCBvbmx5IG9uZSBleHRlbnNpb24KLS8vICAgbnVtYmVy
IGJ5IHB1dHRpbmcgdGhlbSBpbiBhIHN1Yi1tZXNzYWdlLiBTZWUgdGhlIEN1c3RvbSBPcHRpb25z
IHNlY3Rpb24gb2YKLS8vICAgdGhlIGRvY3MgZm9yIGV4YW1wbGVzOgotLy8gICBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8jb3B0aW9ucwot
Ly8gICBJZiB0aGlzIHR1cm5zIG91dCB0byBiZSBwb3B1bGFyLCBhIHdlYiBzZXJ2aWNlIHdpbGwg
YmUgc2V0IHVwCi0vLyAgIHRvIGF1dG9tYXRpY2FsbHkgYXNzaWduIG9wdGlvbiBudW1iZXJzLgot
Ci0KLW1lc3NhZ2UgRmlsZU9wdGlvbnMgewotCi0gIC8vIFNldHMgdGhlIEphdmEgcGFja2FnZSB3
aGVyZSBjbGFzc2VzIGdlbmVyYXRlZCBmcm9tIHRoaXMgLnByb3RvIHdpbGwgYmUKLSAgLy8gcGxh
Y2VkLiAgQnkgZGVmYXVsdCwgdGhlIHByb3RvIHBhY2thZ2UgaXMgdXNlZCwgYnV0IHRoaXMgaXMg
b2Z0ZW4KLSAgLy8gaW5hcHByb3ByaWF0ZSBiZWNhdXNlIHByb3RvIHBhY2thZ2VzIGRvIG5vdCBu
b3JtYWxseSBzdGFydCB3aXRoIGJhY2t3YXJkcwotICAvLyBkb21haW4gbmFtZXMuCi0gIG9wdGlv
bmFsIHN0cmluZyBqYXZhX3BhY2thZ2UgPSAxOwotCi0KLSAgLy8gSWYgc2V0LCBhbGwgdGhlIGNs
YXNzZXMgZnJvbSB0aGUgLnByb3RvIGZpbGUgYXJlIHdyYXBwZWQgaW4gYSBzaW5nbGUKLSAgLy8g
b3V0ZXIgY2xhc3Mgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gIFRoaXMgYXBwbGllcyB0byBib3RoIFBy
b3RvMQotICAvLyAoZXF1aXZhbGVudCB0byB0aGUgb2xkICItLW9uZV9qYXZhX2ZpbGUiIG9wdGlv
bikgYW5kIFByb3RvMiAod2hlcmUKLSAgLy8gYSAucHJvdG8gYWx3YXlzIHRyYW5zbGF0ZXMgdG8g
YSBzaW5nbGUgY2xhc3MsIGJ1dCB5b3UgbWF5IHdhbnQgdG8KLSAgLy8gZXhwbGljaXRseSBjaG9v
c2UgdGhlIGNsYXNzIG5hbWUpLgotICBvcHRpb25hbCBzdHJpbmcgamF2YV9vdXRlcl9jbGFzc25h
bWUgPSA4OwotCi0gIC8vIElmIHNldCB0cnVlLCB0aGVuIHRoZSBKYXZhIGNvZGUgZ2VuZXJhdG9y
IHdpbGwgZ2VuZXJhdGUgYSBzZXBhcmF0ZSAuamF2YQotICAvLyBmaWxlIGZvciBlYWNoIHRvcC1s
ZXZlbCBtZXNzYWdlLCBlbnVtLCBhbmQgc2VydmljZSBkZWZpbmVkIGluIHRoZSAucHJvdG8KLSAg
Ly8gZmlsZS4gIFRodXMsIHRoZXNlIHR5cGVzIHdpbGwgKm5vdCogYmUgbmVzdGVkIGluc2lkZSB0
aGUgb3V0ZXIgY2xhc3MKLSAgLy8gbmFtZWQgYnkgamF2YV9vdXRlcl9jbGFzc25hbWUuICBIb3dl
dmVyLCB0aGUgb3V0ZXIgY2xhc3Mgd2lsbCBzdGlsbCBiZQotICAvLyBnZW5lcmF0ZWQgdG8gY29u
dGFpbiB0aGUgZmlsZSdzIGdldERlc2NyaXB0b3IoKSBtZXRob2QgYXMgd2VsbCBhcyBhbnkKLSAg
Ly8gdG9wLWxldmVsIGV4dGVuc2lvbnMgZGVmaW5lZCBpbiB0aGUgZmlsZS4KLSAgb3B0aW9uYWwg
Ym9vbCBqYXZhX211bHRpcGxlX2ZpbGVzID0gMTAgW2RlZmF1bHQ9ZmFsc2VdOwotCi0gIC8vIElm
IHNldCB0cnVlLCB0aGVuIHRoZSBKYXZhIGNvZGUgZ2VuZXJhdG9yIHdpbGwgZ2VuZXJhdGUgZXF1
YWxzKCkgYW5kCi0gIC8vIGhhc2hDb2RlKCkgbWV0aG9kcyBmb3IgYWxsIG1lc3NhZ2VzIGRlZmlu
ZWQgaW4gdGhlIC5wcm90byBmaWxlLgotICAvLyBUaGlzIGluY3JlYXNlcyBnZW5lcmF0ZWQgY29k
ZSBzaXplLCBwb3RlbnRpYWxseSBzdWJzdGFudGlhbGx5IGZvciBsYXJnZQotICAvLyBwcm90b3Ms
IHdoaWNoIG1heSBoYXJtIGEgbWVtb3J5LWNvbnN0cmFpbmVkIGFwcGxpY2F0aW9uLgotICAvLyAt
IEluIHRoZSBmdWxsIHJ1bnRpbWUgdGhpcyBpcyBhIHNwZWVkIG9wdGltaXphdGlvbiwgYXMgdGhl
Ci0gIC8vIEFic3RyYWN0TWVzc2FnZSBiYXNlIGNsYXNzIGluY2x1ZGVzIHJlZmxlY3Rpb24tYmFz
ZWQgaW1wbGVtZW50YXRpb25zIG9mCi0gIC8vIHRoZXNlIG1ldGhvZHMuCi0gIC8vIC0gSW4gdGhl
IGxpdGUgcnVudGltZSwgc2V0dGluZyB0aGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSBzZW1hbnRpY3Mg
b2YKLSAgLy8gZXF1YWxzKCkgYW5kIGhhc2hDb2RlKCkgdG8gbW9yZSBjbG9zZWx5IG1hdGNoIHRo
b3NlIG9mIHRoZSBmdWxsIHJ1bnRpbWU7Ci0gIC8vIHRoZSBnZW5lcmF0ZWQgbWV0aG9kcyBjb21w
dXRlIHRoZWlyIHJlc3VsdHMgYmFzZWQgb24gZmllbGQgdmFsdWVzIHJhdGhlcgotICAvLyB0aGFu
IG9iamVjdCBpZGVudGl0eS4gKEltcGxlbWVudGF0aW9ucyBzaG91bGQgbm90IGFzc3VtZSB0aGF0
IGhhc2hjb2RlcwotICAvLyB3aWxsIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHJ1bnRpbWVzIG9yIHZl
cnNpb25zIG9mIHRoZSBwcm90b2NvbCBjb21waWxlci4pCi0gIG9wdGlvbmFsIGJvb2wgamF2YV9n
ZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2ggPSAyMCBbZGVmYXVsdD1mYWxzZV07Ci0KLSAgLy8gSWYg
c2V0IHRydWUsIHRoZW4gdGhlIEphdmEyIGNvZGUgZ2VuZXJhdG9yIHdpbGwgZ2VuZXJhdGUgY29k
ZSB0aGF0Ci0gIC8vIHRocm93cyBhbiBleGNlcHRpb24gd2hlbmV2ZXIgYW4gYXR0ZW1wdCBpcyBt
YWRlIHRvIGFzc2lnbiBhIG5vbi1VVEYtOAotICAvLyBieXRlIHNlcXVlbmNlIHRvIGEgc3RyaW5n
IGZpZWxkLgotICAvLyBNZXNzYWdlIHJlZmxlY3Rpb24gd2lsbCBkbyB0aGUgc2FtZS4KLSAgLy8g
SG93ZXZlciwgYW4gZXh0ZW5zaW9uIGZpZWxkIHN0aWxsIGFjY2VwdHMgbm9uLVVURi04IGJ5dGUg
c2VxdWVuY2VzLgotICAvLyBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHdoZW4gdXNlZCB3
aXRoIHRoZSBsaXRlIHJ1bnRpbWUuCi0gIG9wdGlvbmFsIGJvb2wgamF2YV9zdHJpbmdfY2hlY2tf
dXRmOCA9IDI3IFtkZWZhdWx0PWZhbHNlXTsKLQotCi0gIC8vIEdlbmVyYXRlZCBjbGFzc2VzIGNh
biBiZSBvcHRpbWl6ZWQgZm9yIHNwZWVkIG9yIGNvZGUgc2l6ZS4KLSAgZW51bSBPcHRpbWl6ZU1v
ZGUgewotICAgIFNQRUVEID0gMTsgICAgICAgIC8vIEdlbmVyYXRlIGNvbXBsZXRlIGNvZGUgZm9y
IHBhcnNpbmcsIHNlcmlhbGl6YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgLy8gZXRjLgot
ICAgIENPREVfU0laRSA9IDI7ICAgIC8vIFVzZSBSZWZsZWN0aW9uT3BzIHRvIGltcGxlbWVudCB0
aGVzZSBtZXRob2RzLgotICAgIExJVEVfUlVOVElNRSA9IDM7IC8vIEdlbmVyYXRlIGNvZGUgdXNp
bmcgTWVzc2FnZUxpdGUgYW5kIHRoZSBsaXRlIHJ1bnRpbWUuCi0gIH0KLSAgb3B0aW9uYWwgT3B0
aW1pemVNb2RlIG9wdGltaXplX2ZvciA9IDkgW2RlZmF1bHQ9U1BFRURdOwotCi0gIC8vIFNldHMg
dGhlIEdvIHBhY2thZ2Ugd2hlcmUgc3RydWN0cyBnZW5lcmF0ZWQgZnJvbSB0aGlzIC5wcm90byB3
aWxsIGJlCi0gIC8vIHBsYWNlZC4gSWYgb21pdHRlZCwgdGhlIEdvIHBhY2thZ2Ugd2lsbCBiZSBk
ZXJpdmVkIGZyb20gdGhlIGZvbGxvd2luZzoKLSAgLy8gICAtIFRoZSBiYXNlbmFtZSBvZiB0aGUg
cGFja2FnZSBpbXBvcnQgcGF0aCwgaWYgcHJvdmlkZWQuCi0gIC8vICAgLSBPdGhlcndpc2UsIHRo
ZSBwYWNrYWdlIHN0YXRlbWVudCBpbiB0aGUgLnByb3RvIGZpbGUsIGlmIHByZXNlbnQuCi0gIC8v
ICAgLSBPdGhlcndpc2UsIHRoZSBiYXNlbmFtZSBvZiB0aGUgLnByb3RvIGZpbGUsIHdpdGhvdXQg
ZXh0ZW5zaW9uLgotICBvcHRpb25hbCBzdHJpbmcgZ29fcGFja2FnZSA9IDExOwotCi0KLQotICAv
LyBTaG91bGQgZ2VuZXJpYyBzZXJ2aWNlcyBiZSBnZW5lcmF0ZWQgaW4gZWFjaCBsYW5ndWFnZT8g
ICJHZW5lcmljIiBzZXJ2aWNlcwotICAvLyBhcmUgbm90IHNwZWNpZmljIHRvIGFueSBwYXJ0aWN1
bGFyIFJQQyBzeXN0ZW0uICBUaGV5IGFyZSBnZW5lcmF0ZWQgYnkgdGhlCi0gIC8vIG1haW4gY29k
ZSBnZW5lcmF0b3JzIGluIGVhY2ggbGFuZ3VhZ2UgKHdpdGhvdXQgYWRkaXRpb25hbCBwbHVnaW5z
KS4KLSAgLy8gR2VuZXJpYyBzZXJ2aWNlcyB3ZXJlIHRoZSBvbmx5IGtpbmQgb2Ygc2VydmljZSBn
ZW5lcmF0aW9uIHN1cHBvcnRlZCBieQotICAvLyBlYXJseSB2ZXJzaW9ucyBvZiBnb29nbGUucHJv
dG9idWYuCi0gIC8vCi0gIC8vIEdlbmVyaWMgc2VydmljZXMgYXJlIG5vdyBjb25zaWRlcmVkIGRl
cHJlY2F0ZWQgaW4gZmF2b3Igb2YgdXNpbmcgcGx1Z2lucwotICAvLyB0aGF0IGdlbmVyYXRlIGNv
ZGUgc3BlY2lmaWMgdG8geW91ciBwYXJ0aWN1bGFyIFJQQyBzeXN0ZW0uICBUaGVyZWZvcmUsCi0g
IC8vIHRoZXNlIGRlZmF1bHQgdG8gZmFsc2UuICBPbGQgY29kZSB3aGljaCBkZXBlbmRzIG9uIGdl
bmVyaWMgc2VydmljZXMgc2hvdWxkCi0gIC8vIGV4cGxpY2l0bHkgc2V0IHRoZW0gdG8gdHJ1ZS4K
LSAgb3B0aW9uYWwgYm9vbCBjY19nZW5lcmljX3NlcnZpY2VzID0gMTYgW2RlZmF1bHQ9ZmFsc2Vd
OwotICBvcHRpb25hbCBib29sIGphdmFfZ2VuZXJpY19zZXJ2aWNlcyA9IDE3IFtkZWZhdWx0PWZh
bHNlXTsKLSAgb3B0aW9uYWwgYm9vbCBweV9nZW5lcmljX3NlcnZpY2VzID0gMTggW2RlZmF1bHQ9
ZmFsc2VdOwotCi0gIC8vIElzIHRoaXMgZmlsZSBkZXByZWNhdGVkPwotICAvLyBEZXBlbmRpbmcg
b24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRp
b25zCi0gIC8vIGZvciBldmVyeXRoaW5nIGluIHRoZSBmaWxlLCBvciBpdCB3aWxsIGJlIGNvbXBs
ZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkKLSAgLy8gbGVhc3QsIHRoaXMgaXMgYSBmb3JtYWxp
emF0aW9uIGZvciBkZXByZWNhdGluZyBmaWxlcy4KLSAgb3B0aW9uYWwgYm9vbCBkZXByZWNhdGVk
ID0gMjMgW2RlZmF1bHQ9ZmFsc2VdOwotCi0gIC8vIEVuYWJsZXMgdGhlIHVzZSBvZiBhcmVuYXMg
Zm9yIHRoZSBwcm90byBtZXNzYWdlcyBpbiB0aGlzIGZpbGUuIFRoaXMgYXBwbGllcwotICAvLyBv
bmx5IHRvIGdlbmVyYXRlZCBjbGFzc2VzIGZvciBDKysuCi0gIG9wdGlvbmFsIGJvb2wgY2NfZW5h
YmxlX2FyZW5hcyA9IDMxIFtkZWZhdWx0PWZhbHNlXTsKLQotCi0gIC8vIFNldHMgdGhlIG9iamVj
dGl2ZSBjIGNsYXNzIHByZWZpeCB3aGljaCBpcyBwcmVwZW5kZWQgdG8gYWxsIG9iamVjdGl2ZSBj
Ci0gIC8vIGdlbmVyYXRlZCBjbGFzc2VzIGZyb20gdGhpcyAucHJvdG8uIFRoZXJlIGlzIG5vIGRl
ZmF1bHQuCi0gIG9wdGlvbmFsIHN0cmluZyBvYmpjX2NsYXNzX3ByZWZpeCA9IDM2OwotCi0gIC8v
IE5hbWVzcGFjZSBmb3IgZ2VuZXJhdGVkIGNsYXNzZXM7IGRlZmF1bHRzIHRvIHRoZSBwYWNrYWdl
LgotICBvcHRpb25hbCBzdHJpbmcgY3NoYXJwX25hbWVzcGFjZSA9IDM3OwotCi0gIC8vIFRoZSBw
YXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3Zl
LgotICByZXBlYXRlZCBVbmludGVycHJldGVkT3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0g
OTk5OwotCi0gIC8vIENsaWVudHMgY2FuIGRlZmluZSBjdXN0b20gb3B0aW9ucyBpbiBleHRlbnNp
b25zIG9mIHRoaXMgbWVzc2FnZS4gU2VlIGFib3ZlLgotICBleHRlbnNpb25zIDEwMDAgdG8gbWF4
OwotCi0gIHJlc2VydmVkIDM4OwotfQotCi1tZXNzYWdlIE1lc3NhZ2VPcHRpb25zIHsKLSAgLy8g
U2V0IHRydWUgdG8gdXNlIHRoZSBvbGQgcHJvdG8xIE1lc3NhZ2VTZXQgd2lyZSBmb3JtYXQgZm9y
IGV4dGVuc2lvbnMuCi0gIC8vIFRoaXMgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRp
YmlsaXR5IHdpdGggdGhlIE1lc3NhZ2VTZXQgd2lyZQotICAvLyBmb3JtYXQuICBZb3Ugc2hvdWxk
IG5vdCB1c2UgdGhpcyBmb3IgYW55IG90aGVyIHJlYXNvbjogIEl0J3MgbGVzcwotICAvLyBlZmZp
Y2llbnQsIGhhcyBmZXdlciBmZWF0dXJlcywgYW5kIGlzIG1vcmUgY29tcGxpY2F0ZWQuCi0gIC8v
Ci0gIC8vIFRoZSBtZXNzYWdlIG11c3QgYmUgZGVmaW5lZCBleGFjdGx5IGFzIGZvbGxvd3M6Ci0g
IC8vICAgbWVzc2FnZSBGb28gewotICAvLyAgICAgb3B0aW9uIG1lc3NhZ2Vfc2V0X3dpcmVfZm9y
bWF0ID0gdHJ1ZTsKLSAgLy8gICAgIGV4dGVuc2lvbnMgNCB0byBtYXg7Ci0gIC8vICAgfQotICAv
LyBOb3RlIHRoYXQgdGhlIG1lc3NhZ2UgY2Fubm90IGhhdmUgYW55IGRlZmluZWQgZmllbGRzOyBN
ZXNzYWdlU2V0cyBvbmx5Ci0gIC8vIGhhdmUgZXh0ZW5zaW9ucy4KLSAgLy8KLSAgLy8gQWxsIGV4
dGVuc2lvbnMgb2YgeW91ciB0eXBlIG11c3QgYmUgc2luZ3VsYXIgbWVzc2FnZXM7IGUuZy4gdGhl
eSBjYW5ub3QKLSAgLy8gYmUgaW50MzJzLCBlbnVtcywgb3IgcmVwZWF0ZWQgbWVzc2FnZXMuCi0g
IC8vCi0gIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBvcHRpb24sIHRoZSBhYm92ZSB0d28gcmVzdHJp
Y3Rpb25zIGFyZSBub3QgZW5mb3JjZWQgYnkKLSAgLy8gdGhlIHByb3RvY29sIGNvbXBpbGVyLgot
ICBvcHRpb25hbCBib29sIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0ID0gMSBbZGVmYXVsdD1mYWxz
ZV07Ci0KLSAgLy8gRGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgdGhlIHN0YW5kYXJkICJkZXNj
cmlwdG9yKCkiIGFjY2Vzc29yLCB3aGljaCBjYW4KLSAgLy8gY29uZmxpY3Qgd2l0aCBhIGZpZWxk
IG9mIHRoZSBzYW1lIG5hbWUuICBUaGlzIGlzIG1lYW50IHRvIG1ha2UgbWlncmF0aW9uCi0gIC8v
IGZyb20gcHJvdG8xIGVhc2llcjsgbmV3IGNvZGUgc2hvdWxkIGF2b2lkIGZpZWxkcyBuYW1lZCAi
ZGVzY3JpcHRvciIuCi0gIG9wdGlvbmFsIGJvb2wgbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nl
c3NvciA9IDIgW2RlZmF1bHQ9ZmFsc2VdOwotCi0gIC8vIElzIHRoaXMgbWVzc2FnZSBkZXByZWNh
dGVkPwotICAvLyBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1p
dCBEZXByZWNhdGVkIGFubm90YXRpb25zCi0gIC8vIGZvciB0aGUgbWVzc2FnZSwgb3IgaXQgd2ls
bCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LAotICAvLyB0aGlzIGlz
IGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgbWVzc2FnZXMuCi0gIG9wdGlvbmFsIGJv
b2wgZGVwcmVjYXRlZCA9IDMgW2RlZmF1bHQ9ZmFsc2VdOwotCi0gIC8vIFdoZXRoZXIgdGhlIG1l
c3NhZ2UgaXMgYW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFwIGVudHJ5IHR5cGUgZm9yIHRo
ZQotICAvLyBtYXBzIGZpZWxkLgotICAvLwotICAvLyBGb3IgbWFwcyBmaWVsZHM6Ci0gIC8vICAg
ICBtYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiBtYXBfZmllbGQgPSAxOwotICAvLyBUaGUgcGFyc2Vk
IGRlc2NyaXB0b3IgbG9va3MgbGlrZToKLSAgLy8gICAgIG1lc3NhZ2UgTWFwRmllbGRFbnRyeSB7
Ci0gIC8vICAgICAgICAgb3B0aW9uIG1hcF9lbnRyeSA9IHRydWU7Ci0gIC8vICAgICAgICAgb3B0
aW9uYWwgS2V5VHlwZSBrZXkgPSAxOwotICAvLyAgICAgICAgIG9wdGlvbmFsIFZhbHVlVHlwZSB2
YWx1ZSA9IDI7Ci0gIC8vICAgICB9Ci0gIC8vICAgICByZXBlYXRlZCBNYXBGaWVsZEVudHJ5IG1h
cF9maWVsZCA9IDE7Ci0gIC8vCi0gIC8vIEltcGxlbWVudGF0aW9ucyBtYXkgY2hvb3NlIG5vdCB0
byBnZW5lcmF0ZSB0aGUgbWFwX2VudHJ5PXRydWUgbWVzc2FnZSwgYnV0Ci0gIC8vIHVzZSBhIG5h
dGl2ZSBtYXAgaW4gdGhlIHRhcmdldCBsYW5ndWFnZSB0byBob2xkIHRoZSBrZXlzIGFuZCB2YWx1
ZXMuCi0gIC8vIFRoZSByZWZsZWN0aW9uIEFQSXMgaW4gc3VjaCBpbXBsZW1lbnRpb25zIHN0aWxs
IG5lZWQgdG8gd29yayBhcwotICAvLyBpZiB0aGUgZmllbGQgaXMgYSByZXBlYXRlZCBtZXNzYWdl
IGZpZWxkLgotICAvLwotICAvLyBOT1RFOiBEbyBub3Qgc2V0IHRoZSBvcHRpb24gaW4gLnByb3Rv
IGZpbGVzLiBBbHdheXMgdXNlIHRoZSBtYXBzIHN5bnRheAotICAvLyBpbnN0ZWFkLiBUaGUgb3B0
aW9uIHNob3VsZCBvbmx5IGJlIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSBwcm90byBjb21waWxlcgot
ICAvLyBwYXJzZXIuCi0gIG9wdGlvbmFsIGJvb2wgbWFwX2VudHJ5ID0gNzsKLQotICAvLyBUaGUg
cGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92
ZS4KLSAgcmVwZWF0ZWQgVW5pbnRlcnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9
IDk5OTsKLQotICAvLyBDbGllbnRzIGNhbiBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgaW4gZXh0ZW5z
aW9ucyBvZiB0aGlzIG1lc3NhZ2UuIFNlZSBhYm92ZS4KLSAgZXh0ZW5zaW9ucyAxMDAwIHRvIG1h
eDsKLX0KLQotbWVzc2FnZSBGaWVsZE9wdGlvbnMgewotICAvLyBUaGUgY3R5cGUgb3B0aW9uIGlu
c3RydWN0cyB0aGUgQysrIGNvZGUgZ2VuZXJhdG9yIHRvIHVzZSBhIGRpZmZlcmVudAotICAvLyBy
ZXByZXNlbnRhdGlvbiBvZiB0aGUgZmllbGQgdGhhbiBpdCBub3JtYWxseSB3b3VsZC4gIFNlZSB0
aGUgc3BlY2lmaWMKLSAgLy8gb3B0aW9ucyBiZWxvdy4gIFRoaXMgb3B0aW9uIGlzIG5vdCB5ZXQg
aW1wbGVtZW50ZWQgaW4gdGhlIG9wZW4gc291cmNlCi0gIC8vIHJlbGVhc2UgLS0gc29ycnksIHdl
J2xsIHRyeSB0byBpbmNsdWRlIGl0IGluIGEgZnV0dXJlIHZlcnNpb24hCi0gIG9wdGlvbmFsIENU
eXBlIGN0eXBlID0gMSBbZGVmYXVsdCA9IFNUUklOR107Ci0gIGVudW0gQ1R5cGUgewotICAgIC8v
IERlZmF1bHQgbW9kZS4KLSAgICBTVFJJTkcgPSAwOwotCi0gICAgQ09SRCA9IDE7Ci0KLSAgICBT
VFJJTkdfUElFQ0UgPSAyOwotICB9Ci0gIC8vIFRoZSBwYWNrZWQgb3B0aW9uIGNhbiBiZSBlbmFi
bGVkIGZvciByZXBlYXRlZCBwcmltaXRpdmUgZmllbGRzIHRvIGVuYWJsZQotICAvLyBhIG1vcmUg
ZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9uIHRoZSB3aXJlLiBSYXRoZXIgdGhhbiByZXBlYXRl
ZGx5Ci0gIC8vIHdyaXRpbmcgdGhlIHRhZyBhbmQgdHlwZSBmb3IgZWFjaCBlbGVtZW50LCB0aGUg
ZW50aXJlIGFycmF5IGlzIGVuY29kZWQgYXMKLSAgLy8gYSBzaW5nbGUgbGVuZ3RoLWRlbGltaXRl
ZCBibG9iLiBJbiBwcm90bzMsIG9ubHkgZXhwbGljaXQgc2V0dGluZyBpdCB0bwotICAvLyBmYWxz
ZSB3aWxsIGF2b2lkIHVzaW5nIHBhY2tlZCBlbmNvZGluZy4KLSAgb3B0aW9uYWwgYm9vbCBwYWNr
ZWQgPSAyOwotCi0KLSAgLy8gVGhlIGpzdHlwZSBvcHRpb24gZGV0ZXJtaW5lcyB0aGUgSmF2YVNj
cmlwdCB0eXBlIHVzZWQgZm9yIHZhbHVlcyBvZiB0aGUKLSAgLy8gZmllbGQuICBUaGUgb3B0aW9u
IGlzIHBlcm1pdHRlZCBvbmx5IGZvciA2NCBiaXQgaW50ZWdyYWwgYW5kIGZpeGVkIHR5cGVzCi0g
IC8vIChpbnQ2NCwgdWludDY0LCBzaW50NjQsIGZpeGVkNjQsIHNmaXhlZDY0KS4gIEJ5IGRlZmF1
bHQgdGhlc2UgdHlwZXMgYXJlCi0gIC8vIHJlcHJlc2VudGVkIGFzIEphdmFTY3JpcHQgc3RyaW5n
cy4gIFRoaXMgYXZvaWRzIGxvc3Mgb2YgcHJlY2lzaW9uIHRoYXQgY2FuCi0gIC8vIGhhcHBlbiB3
aGVuIGEgbGFyZ2UgdmFsdWUgaXMgY29udmVydGVkIHRvIGEgZmxvYXRpbmcgcG9pbnQgSmF2YVNj
cmlwdAotICAvLyBudW1iZXJzLiAgU3BlY2lmeWluZyBKU19OVU1CRVIgZm9yIHRoZSBqc3R5cGUg
Y2F1c2VzIHRoZSBnZW5lcmF0ZWQKLSAgLy8gSmF2YVNjcmlwdCBjb2RlIHRvIHVzZSB0aGUgSmF2
YVNjcmlwdCAibnVtYmVyIiB0eXBlIGluc3RlYWQgb2Ygc3RyaW5ncy4KLSAgLy8gVGhpcyBvcHRp
b24gaXMgYW4gZW51bSB0byBwZXJtaXQgYWRkaXRpb25hbCB0eXBlcyB0byBiZSBhZGRlZCwKLSAg
Ly8gZS5nLiBnb29nLm1hdGguSW50ZWdlci4KLSAgb3B0aW9uYWwgSlNUeXBlIGpzdHlwZSA9IDYg
W2RlZmF1bHQgPSBKU19OT1JNQUxdOwotICBlbnVtIEpTVHlwZSB7Ci0gICAgLy8gVXNlIHRoZSBk
ZWZhdWx0IHR5cGUuCi0gICAgSlNfTk9STUFMID0gMDsKLQotICAgIC8vIFVzZSBKYXZhU2NyaXB0
IHN0cmluZ3MuCi0gICAgSlNfU1RSSU5HID0gMTsKLQotICAgIC8vIFVzZSBKYXZhU2NyaXB0IG51
bWJlcnMuCi0gICAgSlNfTlVNQkVSID0gMjsKLSAgfQotCi0gIC8vIFNob3VsZCB0aGlzIGZpZWxk
IGJlIHBhcnNlZCBsYXppbHk/ICBMYXp5IGFwcGxpZXMgb25seSB0byBtZXNzYWdlLXR5cGUKLSAg
Ly8gZmllbGRzLiAgSXQgbWVhbnMgdGhhdCB3aGVuIHRoZSBvdXRlciBtZXNzYWdlIGlzIGluaXRp
YWxseSBwYXJzZWQsIHRoZQotICAvLyBpbm5lciBtZXNzYWdlJ3MgY29udGVudHMgd2lsbCBub3Qg
YmUgcGFyc2VkIGJ1dCBpbnN0ZWFkIHN0b3JlZCBpbiBlbmNvZGVkCi0gIC8vIGZvcm0uICBUaGUg
aW5uZXIgbWVzc2FnZSB3aWxsIGFjdHVhbGx5IGJlIHBhcnNlZCB3aGVuIGl0IGlzIGZpcnN0IGFj
Y2Vzc2VkLgotICAvLwotICAvLyBUaGlzIGlzIG9ubHkgYSBoaW50LiAgSW1wbGVtZW50YXRpb25z
IGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZQotICAvLyBlYWdlciBvciBsYXp5IHBh
cnNpbmcgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhpcyBvcHRpb24uICBIb3dldmVyLAot
ICAvLyBzZXR0aW5nIHRoaXMgb3B0aW9uIHRydWUgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvdG9jb2wg
YXV0aG9yIGJlbGlldmVzIHRoYXQKLSAgLy8gdXNpbmcgbGF6eSBwYXJzaW5nIG9uIHRoaXMgZmll
bGQgaXMgd29ydGggdGhlIGFkZGl0aW9uYWwgYm9va2tlZXBpbmcKLSAgLy8gb3ZlcmhlYWQgdHlw
aWNhbGx5IG5lZWRlZCB0byBpbXBsZW1lbnQgaXQuCi0gIC8vCi0gIC8vIFRoaXMgb3B0aW9uIGRv
ZXMgbm90IGFmZmVjdCB0aGUgcHVibGljIGludGVyZmFjZSBvZiBhbnkgZ2VuZXJhdGVkIGNvZGU7
Ci0gIC8vIGFsbCBtZXRob2Qgc2lnbmF0dXJlcyByZW1haW4gdGhlIHNhbWUuICBGdXJ0aGVybW9y
ZSwgdGhyZWFkLXNhZmV0eSBvZiB0aGUKLSAgLy8gaW50ZXJmYWNlIGlzIG5vdCBhZmZlY3RlZCBi
eSB0aGlzIG9wdGlvbjsgY29uc3QgbWV0aG9kcyByZW1haW4gc2FmZSB0bwotICAvLyBjYWxsIGZy
b20gbXVsdGlwbGUgdGhyZWFkcyBjb25jdXJyZW50bHksIHdoaWxlIG5vbi1jb25zdCBtZXRob2Rz
IGNvbnRpbnVlCi0gIC8vIHRvIHJlcXVpcmUgZXhjbHVzaXZlIGFjY2Vzcy4KLSAgLy8KLSAgLy8K
LSAgLy8gTm90ZSB0aGF0IGltcGxlbWVudGF0aW9ucyBtYXkgY2hvb3NlIG5vdCB0byBjaGVjayBy
ZXF1aXJlZCBmaWVsZHMgd2l0aGluCi0gIC8vIGEgbGF6eSBzdWItbWVzc2FnZS4gIFRoYXQgaXMs
IGNhbGxpbmcgSXNJbml0aWFsaXplZCgpIG9uIHRoZSBvdXRoZXIgbWVzc2FnZQotICAvLyBtYXkg
cmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgaW5uZXIgbWVzc2FnZSBoYXMgbWlzc2luZyByZXF1aXJl
ZCBmaWVsZHMuCi0gIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBp
bm5lciBtZXNzYWdlIHdvdWxkIGhhdmUgdG8gYmUKLSAgLy8gcGFyc2VkIGluIG9yZGVyIHRvIHBl
cmZvcm0gdGhlIGNoZWNrLCBkZWZlYXRpbmcgdGhlIHB1cnBvc2Ugb2YgbGF6eQotICAvLyBwYXJz
aW5nLiAgQW4gaW1wbGVtZW50YXRpb24gd2hpY2ggY2hvb3NlcyBub3QgdG8gY2hlY2sgcmVxdWly
ZWQgZmllbGRzCi0gIC8vIG11c3QgYmUgY29uc2lzdGVudCBhYm91dCBpdC4gIFRoYXQgaXMsIGZv
ciBhbnkgcGFydGljdWxhciBzdWItbWVzc2FnZSwgdGhlCi0gIC8vIGltcGxlbWVudGF0aW9uIG11
c3QgZWl0aGVyICphbHdheXMqIGNoZWNrIGl0cyByZXF1aXJlZCBmaWVsZHMsIG9yICpuZXZlcioK
LSAgLy8gY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9y
IG5vdCB0aGUgbWVzc2FnZSBoYXMKLSAgLy8gYmVlbiBwYXJzZWQuCi0gIG9wdGlvbmFsIGJvb2wg
bGF6eSA9IDUgW2RlZmF1bHQ9ZmFsc2VdOwotCi0gIC8vIElzIHRoaXMgZmllbGQgZGVwcmVjYXRl
ZD8KLSAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQg
RGVwcmVjYXRlZCBhbm5vdGF0aW9ucwotICAvLyBmb3IgYWNjZXNzb3JzLCBvciBpdCB3aWxsIGJl
IGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsIHRoaXMKLSAgLy8gaXMgYSBm
b3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBmaWVsZHMuCi0gIG9wdGlvbmFsIGJvb2wgZGVw
cmVjYXRlZCA9IDMgW2RlZmF1bHQ9ZmFsc2VdOwotCi0gIC8vIEZvciBHb29nbGUtaW50ZXJuYWwg
bWlncmF0aW9uIG9ubHkuIERvIG5vdCB1c2UuCi0gIG9wdGlvbmFsIGJvb2wgd2VhayA9IDEwIFtk
ZWZhdWx0PWZhbHNlXTsKLQotCi0gIC8vIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9l
c24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgotICByZXBlYXRlZCBVbmludGVycHJldGVk
T3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotCi0gIC8vIENsaWVudHMgY2FuIGRl
ZmluZSBjdXN0b20gb3B0aW9ucyBpbiBleHRlbnNpb25zIG9mIHRoaXMgbWVzc2FnZS4gU2VlIGFi
b3ZlLgotICBleHRlbnNpb25zIDEwMDAgdG8gbWF4OwotfQotCi1tZXNzYWdlIEVudW1PcHRpb25z
IHsKLQotICAvLyBTZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZSB0byBhbGxvdyBtYXBwaW5nIGRpZmZl
cmVudCB0YWcgbmFtZXMgdG8gdGhlIHNhbWUKLSAgLy8gdmFsdWUuCi0gIG9wdGlvbmFsIGJvb2wg
YWxsb3dfYWxpYXMgPSAyOwotCi0gIC8vIElzIHRoaXMgZW51bSBkZXByZWNhdGVkPwotICAvLyBE
ZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVk
IGFubm90YXRpb25zCi0gIC8vIGZvciB0aGUgZW51bSwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5
IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LCB0aGlzCi0gIC8vIGlzIGEgZm9ybWFsaXphdGlv
biBmb3IgZGVwcmVjYXRpbmcgZW51bXMuCi0gIG9wdGlvbmFsIGJvb2wgZGVwcmVjYXRlZCA9IDMg
W2RlZmF1bHQ9ZmFsc2VdOwotCi0gIC8vIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9l
c24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgotICByZXBlYXRlZCBVbmludGVycHJldGVk
T3B0aW9uIHVuaW50ZXJwcmV0ZWRfb3B0aW9uID0gOTk5OwotCi0gIC8vIENsaWVudHMgY2FuIGRl
ZmluZSBjdXN0b20gb3B0aW9ucyBpbiBleHRlbnNpb25zIG9mIHRoaXMgbWVzc2FnZS4gU2VlIGFi
b3ZlLgotICBleHRlbnNpb25zIDEwMDAgdG8gbWF4OwotfQotCi1tZXNzYWdlIEVudW1WYWx1ZU9w
dGlvbnMgewotICAvLyBJcyB0aGlzIGVudW0gdmFsdWUgZGVwcmVjYXRlZD8KLSAgLy8gRGVwZW5k
aW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5v
dGF0aW9ucwotICAvLyBmb3IgdGhlIGVudW0gdmFsdWUsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVs
eSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwKLSAgLy8gdGhpcyBpcyBhIGZvcm1hbGl6YXRp
b24gZm9yIGRlcHJlY2F0aW5nIGVudW0gdmFsdWVzLgotICBvcHRpb25hbCBib29sIGRlcHJlY2F0
ZWQgPSAxIFtkZWZhdWx0PWZhbHNlXTsKLQotICAvLyBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25z
IGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4KLSAgcmVwZWF0ZWQgVW5pbnRl
cnByZXRlZE9wdGlvbiB1bmludGVycHJldGVkX29wdGlvbiA9IDk5OTsKLQotICAvLyBDbGllbnRz
IGNhbiBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgaW4gZXh0ZW5zaW9ucyBvZiB0aGlzIG1lc3NhZ2Uu
IFNlZSBhYm92ZS4KLSAgZXh0ZW5zaW9ucyAxMDAwIHRvIG1heDsKLX0KLQotbWVzc2FnZSBTZXJ2
aWNlT3B0aW9ucyB7Ci0KLSAgLy8gTm90ZTogIEZpZWxkIG51bWJlcnMgMSB0aHJvdWdoIDMyIGFy
ZSByZXNlcnZlZCBmb3IgR29vZ2xlJ3MgaW50ZXJuYWwgUlBDCi0gIC8vICAgZnJhbWV3b3JrLiAg
V2UgYXBvbG9naXplIGZvciBob2FyZGluZyB0aGVzZSBudW1iZXJzIHRvIG91cnNlbHZlcywgYnV0
Ci0gIC8vICAgd2Ugd2VyZSBhbHJlYWR5IHVzaW5nIHRoZW0gbG9uZyBiZWZvcmUgd2UgZGVjaWRl
ZCB0byByZWxlYXNlIFByb3RvY29sCi0gIC8vICAgQnVmZmVycy4KLQotICAvLyBJcyB0aGlzIHNl
cnZpY2UgZGVwcmVjYXRlZD8KLSAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0s
IHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9ucwotICAvLyBmb3IgdGhlIHNlcnZp
Y2UsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwK
LSAgLy8gdGhpcyBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIHNlcnZpY2VzLgot
ICBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzMyBbZGVmYXVsdD1mYWxzZV07Ci0KLSAgLy8g
VGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUg
YWJvdmUuCi0gIHJlcGVhdGVkIFVuaW50ZXJwcmV0ZWRPcHRpb24gdW5pbnRlcnByZXRlZF9vcHRp
b24gPSA5OTk7Ci0KLSAgLy8gQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4
dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUuCi0gIGV4dGVuc2lvbnMgMTAwMCB0
byBtYXg7Ci19Ci0KLW1lc3NhZ2UgTWV0aG9kT3B0aW9ucyB7Ci0KLSAgLy8gTm90ZTogIEZpZWxk
IG51bWJlcnMgMSB0aHJvdWdoIDMyIGFyZSByZXNlcnZlZCBmb3IgR29vZ2xlJ3MgaW50ZXJuYWwg
UlBDCi0gIC8vICAgZnJhbWV3b3JrLiAgV2UgYXBvbG9naXplIGZvciBob2FyZGluZyB0aGVzZSBu
dW1iZXJzIHRvIG91cnNlbHZlcywgYnV0Ci0gIC8vICAgd2Ugd2VyZSBhbHJlYWR5IHVzaW5nIHRo
ZW0gbG9uZyBiZWZvcmUgd2UgZGVjaWRlZCB0byByZWxlYXNlIFByb3RvY29sCi0gIC8vICAgQnVm
ZmVycy4KLQotICAvLyBJcyB0aGlzIG1ldGhvZCBkZXByZWNhdGVkPwotICAvLyBEZXBlbmRpbmcg
b24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRp
b25zCi0gIC8vIGZvciB0aGUgbWV0aG9kLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3Jl
ZDsgaW4gdGhlIHZlcnkgbGVhc3QsCi0gIC8vIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBk
ZXByZWNhdGluZyBtZXRob2RzLgotICBvcHRpb25hbCBib29sIGRlcHJlY2F0ZWQgPSAzMyBbZGVm
YXVsdD1mYWxzZV07Ci0KLSAgLy8gVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0
IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCi0gIHJlcGVhdGVkIFVuaW50ZXJwcmV0ZWRPcHRp
b24gdW5pbnRlcnByZXRlZF9vcHRpb24gPSA5OTk7Ci0KLSAgLy8gQ2xpZW50cyBjYW4gZGVmaW5l
IGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUu
Ci0gIGV4dGVuc2lvbnMgMTAwMCB0byBtYXg7Ci19Ci0KLQotLy8gQSBtZXNzYWdlIHJlcHJlc2Vu
dGluZyBhIG9wdGlvbiB0aGUgcGFyc2VyIGRvZXMgbm90IHJlY29nbml6ZS4gVGhpcyBvbmx5Ci0v
LyBhcHBlYXJzIGluIG9wdGlvbnMgcHJvdG9zIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyOjpQYXJz
ZXIgY2xhc3MuCi0vLyBEZXNjcmlwdG9yUG9vbCByZXNvbHZlcyB0aGVzZSB3aGVuIGJ1aWxkaW5n
IERlc2NyaXB0b3Igb2JqZWN0cy4gVGhlcmVmb3JlLAotLy8gb3B0aW9ucyBwcm90b3MgaW4gZGVz
Y3JpcHRvciBvYmplY3RzIChlLmcuIHJldHVybmVkIGJ5IERlc2NyaXB0b3I6Om9wdGlvbnMoKSwK
LS8vIG9yIHByb2R1Y2VkIGJ5IERlc2NyaXB0b3I6OkNvcHlUbygpKSB3aWxsIG5ldmVyIGhhdmUg
VW5pbnRlcnByZXRlZE9wdGlvbnMKLS8vIGluIHRoZW0uCi1tZXNzYWdlIFVuaW50ZXJwcmV0ZWRP
cHRpb24gewotICAvLyBUaGUgbmFtZSBvZiB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24uICBFYWNo
IHN0cmluZyByZXByZXNlbnRzIGEgc2VnbWVudCBpbgotICAvLyBhIGRvdC1zZXBhcmF0ZWQgbmFt
ZS4gIGlzX2V4dGVuc2lvbiBpcyB0cnVlIGlmZiBhIHNlZ21lbnQgcmVwcmVzZW50cyBhbgotICAv
LyBleHRlbnNpb24gKGRlbm90ZWQgd2l0aCBwYXJlbnRoZXNlcyBpbiBvcHRpb25zIHNwZWNzIGlu
IC5wcm90byBmaWxlcykuCi0gIC8vIEUuZy4seyBbImZvbyIsIGZhbHNlXSwgWyJiYXIuYmF6Iiwg
dHJ1ZV0sIFsicXV4IiwgZmFsc2VdIH0gcmVwcmVzZW50cwotICAvLyAiZm9vLihiYXIuYmF6KS5x
dXgiLgotICBtZXNzYWdlIE5hbWVQYXJ0IHsKLSAgICByZXF1aXJlZCBzdHJpbmcgbmFtZV9wYXJ0
ID0gMTsKLSAgICByZXF1aXJlZCBib29sIGlzX2V4dGVuc2lvbiA9IDI7Ci0gIH0KLSAgcmVwZWF0
ZWQgTmFtZVBhcnQgbmFtZSA9IDI7Ci0KLSAgLy8gVGhlIHZhbHVlIG9mIHRoZSB1bmludGVycHJl
dGVkIG9wdGlvbiwgaW4gd2hhdGV2ZXIgdHlwZSB0aGUgdG9rZW5pemVyCi0gIC8vIGlkZW50aWZp
ZWQgaXQgYXMgZHVyaW5nIHBhcnNpbmcuIEV4YWN0bHkgb25lIG9mIHRoZXNlIHNob3VsZCBiZSBz
ZXQuCi0gIG9wdGlvbmFsIHN0cmluZyBpZGVudGlmaWVyX3ZhbHVlID0gMzsKLSAgb3B0aW9uYWwg
dWludDY0IHBvc2l0aXZlX2ludF92YWx1ZSA9IDQ7Ci0gIG9wdGlvbmFsIGludDY0IG5lZ2F0aXZl
X2ludF92YWx1ZSA9IDU7Ci0gIG9wdGlvbmFsIGRvdWJsZSBkb3VibGVfdmFsdWUgPSA2OwotICBv
cHRpb25hbCBieXRlcyBzdHJpbmdfdmFsdWUgPSA3OwotICBvcHRpb25hbCBzdHJpbmcgYWdncmVn
YXRlX3ZhbHVlID0gODsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gT3B0aW9uYWwgc291cmNlIGNv
ZGUgaW5mbwotCi0vLyBFbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFs
IHNvdXJjZSBmaWxlIGZyb20gd2hpY2ggYQotLy8gRmlsZURlc2NyaXB0b3JQcm90byB3YXMgZ2Vu
ZXJhdGVkLgotbWVzc2FnZSBTb3VyY2VDb2RlSW5mbyB7Ci0gIC8vIEEgTG9jYXRpb24gaWRlbnRp
ZmllcyBhIHBpZWNlIG9mIHNvdXJjZSBjb2RlIGluIGEgLnByb3RvIGZpbGUgd2hpY2gKLSAgLy8g
Y29ycmVzcG9uZHMgdG8gYSBwYXJ0aWN1bGFyIGRlZmluaXRpb24uICBUaGlzIGluZm9ybWF0aW9u
IGlzIGludGVuZGVkCi0gIC8vIHRvIGJlIHVzZWZ1bCB0byBJREVzLCBjb2RlIGluZGV4ZXJzLCBk
b2N1bWVudGF0aW9uIGdlbmVyYXRvcnMsIGFuZCBzaW1pbGFyCi0gIC8vIHRvb2xzLgotICAvLwot
ICAvLyBGb3IgZXhhbXBsZSwgc2F5IHdlIGhhdmUgYSBmaWxlIGxpa2U6Ci0gIC8vICAgbWVzc2Fn
ZSBGb28gewotICAvLyAgICAgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDE7Ci0gIC8vICAgfQotICAv
LyBMZXQncyBsb29rIGF0IGp1c3QgdGhlIGZpZWxkIGRlZmluaXRpb246Ci0gIC8vICAgb3B0aW9u
YWwgc3RyaW5nIGZvbyA9IDE7Ci0gIC8vICAgXiAgICAgICBeXiAgICAgXl4gIF4gIF5eXgotICAv
LyAgIGEgICAgICAgYmMgICAgIGRlICBmICBnaGkKLSAgLy8gV2UgaGF2ZSB0aGUgZm9sbG93aW5n
IGxvY2F0aW9uczoKLSAgLy8gICBzcGFuICAgcGF0aCAgICAgICAgICAgICAgIHJlcHJlc2VudHMK
LSAgLy8gICBbYSxpKSAgWyA0LCAwLCAyLCAwIF0gICAgIFRoZSB3aG9sZSBmaWVsZCBkZWZpbml0
aW9uLgotICAvLyAgIFthLGIpICBbIDQsIDAsIDIsIDAsIDQgXSAgVGhlIGxhYmVsIChvcHRpb25h
bCkuCi0gIC8vICAgW2MsZCkgIFsgNCwgMCwgMiwgMCwgNSBdICBUaGUgdHlwZSAoc3RyaW5nKS4K
LSAgLy8gICBbZSxmKSAgWyA0LCAwLCAyLCAwLCAxIF0gIFRoZSBuYW1lIChmb28pLgotICAvLyAg
IFtnLGgpICBbIDQsIDAsIDIsIDAsIDMgXSAgVGhlIG51bWJlciAoMSkuCi0gIC8vCi0gIC8vIE5v
dGVzOgotICAvLyAtIEEgbG9jYXRpb24gbWF5IHJlZmVyIHRvIGEgcmVwZWF0ZWQgZmllbGQgaXRz
ZWxmIChpLmUuIG5vdCB0byBhbnkKLSAgLy8gICBwYXJ0aWN1bGFyIGluZGV4IHdpdGhpbiBpdCku
ICBUaGlzIGlzIHVzZWQgd2hlbmV2ZXIgYSBzZXQgb2YgZWxlbWVudHMgYXJlCi0gIC8vICAgbG9n
aWNhbGx5IGVuY2xvc2VkIGluIGEgc2luZ2xlIGNvZGUgc2VnbWVudC4gIEZvciBleGFtcGxlLCBh
biBlbnRpcmUKLSAgLy8gICBleHRlbmQgYmxvY2sgKHBvc3NpYmx5IGNvbnRhaW5pbmcgbXVsdGlw
bGUgZXh0ZW5zaW9uIGRlZmluaXRpb25zKSB3aWxsCi0gIC8vICAgaGF2ZSBhbiBvdXRlciBsb2Nh
dGlvbiB3aG9zZSBwYXRoIHJlZmVycyB0byB0aGUgImV4dGVuc2lvbnMiIHJlcGVhdGVkCi0gIC8v
ICAgZmllbGQgd2l0aG91dCBhbiBpbmRleC4KLSAgLy8gLSBNdWx0aXBsZSBsb2NhdGlvbnMgbWF5
IGhhdmUgdGhlIHNhbWUgcGF0aC4gIFRoaXMgaGFwcGVucyB3aGVuIGEgc2luZ2xlCi0gIC8vICAg
bG9naWNhbCBkZWNsYXJhdGlvbiBpcyBzcHJlYWQgb3V0IGFjcm9zcyBtdWx0aXBsZSBwbGFjZXMu
ICBUaGUgbW9zdAotICAvLyAgIG9idmlvdXMgZXhhbXBsZSBpcyB0aGUgImV4dGVuZCIgYmxvY2sg
YWdhaW4gLS0gdGhlcmUgbWF5IGJlIG11bHRpcGxlCi0gIC8vICAgZXh0ZW5kIGJsb2NrcyBpbiB0
aGUgc2FtZSBzY29wZSwgZWFjaCBvZiB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgcGF0aC4KLSAg
Ly8gLSBBIGxvY2F0aW9uJ3Mgc3BhbiBpcyBub3QgYWx3YXlzIGEgc3Vic2V0IG9mIGl0cyBwYXJl
bnQncyBzcGFuLiAgRm9yCi0gIC8vICAgZXhhbXBsZSwgdGhlICJleHRlbmRlZSIgb2YgYW4gZXh0
ZW5zaW9uIGRlY2xhcmF0aW9uIGFwcGVhcnMgYXQgdGhlCi0gIC8vICAgYmVnaW5uaW5nIG9mIHRo
ZSAiZXh0ZW5kIiBibG9jayBhbmQgaXMgc2hhcmVkIGJ5IGFsbCBleHRlbnNpb25zIHdpdGhpbgot
ICAvLyAgIHRoZSBibG9jay4KLSAgLy8gLSBKdXN0IGJlY2F1c2UgYSBsb2NhdGlvbidzIHNwYW4g
aXMgYSBzdWJzZXQgb2Ygc29tZSBvdGhlciBsb2NhdGlvbidzIHNwYW4KLSAgLy8gICBkb2VzIG5v
dCBtZWFuIHRoYXQgaXQgaXMgYSBkZXNjZW5kZW50LiAgRm9yIGV4YW1wbGUsIGEgImdyb3VwIiBk
ZWZpbmVzCi0gIC8vICAgYm90aCBhIHR5cGUgYW5kIGEgZmllbGQgaW4gYSBzaW5nbGUgZGVjbGFy
YXRpb24uICBUaHVzLCB0aGUgbG9jYXRpb25zCi0gIC8vICAgY29ycmVzcG9uZGluZyB0byB0aGUg
dHlwZSBhbmQgZmllbGQgYW5kIHRoZWlyIGNvbXBvbmVudHMgd2lsbCBvdmVybGFwLgotICAvLyAt
IENvZGUgd2hpY2ggdHJpZXMgdG8gaW50ZXJwcmV0IGxvY2F0aW9ucyBzaG91bGQgcHJvYmFibHkg
YmUgZGVzaWduZWQgdG8KLSAgLy8gICBpZ25vcmUgdGhvc2UgdGhhdCBpdCBkb2Vzbid0IHVuZGVy
c3RhbmQsIGFzIG1vcmUgdHlwZXMgb2YgbG9jYXRpb25zIGNvdWxkCi0gIC8vICAgYmUgcmVjb3Jk
ZWQgaW4gdGhlIGZ1dHVyZS4KLSAgcmVwZWF0ZWQgTG9jYXRpb24gbG9jYXRpb24gPSAxOwotICBt
ZXNzYWdlIExvY2F0aW9uIHsKLSAgICAvLyBJZGVudGlmaWVzIHdoaWNoIHBhcnQgb2YgdGhlIEZp
bGVEZXNjcmlwdG9yUHJvdG8gd2FzIGRlZmluZWQgYXQgdGhpcwotICAgIC8vIGxvY2F0aW9uLgot
ICAgIC8vCi0gICAgLy8gRWFjaCBlbGVtZW50IGlzIGEgZmllbGQgbnVtYmVyIG9yIGFuIGluZGV4
LiAgVGhleSBmb3JtIGEgcGF0aCBmcm9tCi0gICAgLy8gdGhlIHJvb3QgRmlsZURlc2NyaXB0b3JQ
cm90byB0byB0aGUgcGxhY2Ugd2hlcmUgdGhlIGRlZmluaXRpb24uICBGb3IKLSAgICAvLyBleGFt
cGxlLCB0aGlzIHBhdGg6Ci0gICAgLy8gICBbIDQsIDMsIDIsIDcsIDEgXQotICAgIC8vIHJlZmVy
cyB0bzoKLSAgICAvLyAgIGZpbGUubWVzc2FnZV90eXBlKDMpICAvLyA0LCAzCi0gICAgLy8gICAg
ICAgLmZpZWxkKDcpICAgICAgICAgLy8gMiwgNwotICAgIC8vICAgICAgIC5uYW1lKCkgICAgICAg
ICAgIC8vIDEKLSAgICAvLyBUaGlzIGlzIGJlY2F1c2UgRmlsZURlc2NyaXB0b3JQcm90by5tZXNz
YWdlX3R5cGUgaGFzIGZpZWxkIG51bWJlciA0OgotICAgIC8vICAgcmVwZWF0ZWQgRGVzY3JpcHRv
clByb3RvIG1lc3NhZ2VfdHlwZSA9IDQ7Ci0gICAgLy8gYW5kIERlc2NyaXB0b3JQcm90by5maWVs
ZCBoYXMgZmllbGQgbnVtYmVyIDI6Ci0gICAgLy8gICByZXBlYXRlZCBGaWVsZERlc2NyaXB0b3JQ
cm90byBmaWVsZCA9IDI7Ci0gICAgLy8gYW5kIEZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUgaGFz
IGZpZWxkIG51bWJlciAxOgotICAgIC8vICAgb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAg
IC8vCi0gICAgLy8gVGh1cywgdGhlIGFib3ZlIHBhdGggZ2l2ZXMgdGhlIGxvY2F0aW9uIG9mIGEg
ZmllbGQgbmFtZS4gIElmIHdlIHJlbW92ZWQKLSAgICAvLyB0aGUgbGFzdCBlbGVtZW50OgotICAg
IC8vICAgWyA0LCAzLCAyLCA3IF0KLSAgICAvLyB0aGlzIHBhdGggcmVmZXJzIHRvIHRoZSB3aG9s
ZSBmaWVsZCBkZWNsYXJhdGlvbiAoZnJvbSB0aGUgYmVnaW5uaW5nCi0gICAgLy8gb2YgdGhlIGxh
YmVsIHRvIHRoZSB0ZXJtaW5hdGluZyBzZW1pY29sb24pLgotICAgIHJlcGVhdGVkIGludDMyIHBh
dGggPSAxIFtwYWNrZWQ9dHJ1ZV07Ci0KLSAgICAvLyBBbHdheXMgaGFzIGV4YWN0bHkgdGhyZWUg
b3IgZm91ciBlbGVtZW50czogc3RhcnQgbGluZSwgc3RhcnQgY29sdW1uLAotICAgIC8vIGVuZCBs
aW5lIChvcHRpb25hbCwgb3RoZXJ3aXNlIGFzc3VtZWQgc2FtZSBhcyBzdGFydCBsaW5lKSwgZW5k
IGNvbHVtbi4KLSAgICAvLyBUaGVzZSBhcmUgcGFja2VkIGludG8gYSBzaW5nbGUgZmllbGQgZm9y
IGVmZmljaWVuY3kuICBOb3RlIHRoYXQgbGluZQotICAgIC8vIGFuZCBjb2x1bW4gbnVtYmVycyBh
cmUgemVyby1iYXNlZCAtLSB0eXBpY2FsbHkgeW91IHdpbGwgd2FudCB0byBhZGQKLSAgICAvLyAx
IHRvIGVhY2ggYmVmb3JlIGRpc3BsYXlpbmcgdG8gYSB1c2VyLgotICAgIHJlcGVhdGVkIGludDMy
IHNwYW4gPSAyIFtwYWNrZWQ9dHJ1ZV07Ci0KLSAgICAvLyBJZiB0aGlzIFNvdXJjZUNvZGVJbmZv
IHJlcHJlc2VudHMgYSBjb21wbGV0ZSBkZWNsYXJhdGlvbiwgdGhlc2UgYXJlIGFueQotICAgIC8v
IGNvbW1lbnRzIGFwcGVhcmluZyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiB3aGlj
aCBhcHBlYXIgdG8gYmUKLSAgICAvLyBhdHRhY2hlZCB0byB0aGUgZGVjbGFyYXRpb24uCi0gICAg
Ly8KLSAgICAvLyBBIHNlcmllcyBvZiBsaW5lIGNvbW1lbnRzIGFwcGVhcmluZyBvbiBjb25zZWN1
dGl2ZSBsaW5lcywgd2l0aCBubyBvdGhlcgotICAgIC8vIHRva2VucyBhcHBlYXJpbmcgb24gdGhv
c2UgbGluZXMsIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZSBjb21tZW50LgotICAgIC8vCi0g
ICAgLy8gbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cyB3aWxsIGtlZXAgcGFyYWdyYXBocyBvZiBj
b21tZW50cyB0aGF0IGFwcGVhcgotICAgIC8vIGJlZm9yZSAoYnV0IG5vdCBjb25uZWN0ZWQgdG8p
IHRoZSBjdXJyZW50IGVsZW1lbnQuIEVhY2ggcGFyYWdyYXBoLAotICAgIC8vIHNlcGFyYXRlZCBi
eSBlbXB0eSBsaW5lcywgd2lsbCBiZSBvbmUgY29tbWVudCBlbGVtZW50IGluIHRoZSByZXBlYXRl
ZAotICAgIC8vIGZpZWxkLgotICAgIC8vCi0gICAgLy8gT25seSB0aGUgY29tbWVudCBjb250ZW50
IGlzIHByb3ZpZGVkOyBjb21tZW50IG1hcmtlcnMgKGUuZy4gLy8pIGFyZQotICAgIC8vIHN0cmlw
cGVkIG91dC4gIEZvciBibG9jayBjb21tZW50cywgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBhbiBh
c3RlcmlzawotICAgIC8vIHdpbGwgYmUgc3RyaXBwZWQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGVh
Y2ggbGluZSBvdGhlciB0aGFuIHRoZSBmaXJzdC4KLSAgICAvLyBOZXdsaW5lcyBhcmUgaW5jbHVk
ZWQgaW4gdGhlIG91dHB1dC4KLSAgICAvLwotICAgIC8vIEV4YW1wbGVzOgotICAgIC8vCi0gICAg
Ly8gICBvcHRpb25hbCBpbnQzMiBmb28gPSAxOyAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBmb28u
Ci0gICAgLy8gICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGJhci4KLSAgICAvLyAgIG9wdGlvbmFs
IGludDMyIGJhciA9IDI7Ci0gICAgLy8KLSAgICAvLyAgIG9wdGlvbmFsIHN0cmluZyBiYXogPSAz
OwotICAgIC8vICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBiYXouCi0gICAgLy8gICAvLyBBbm90
aGVyIGxpbmUgYXR0YWNoZWQgdG8gYmF6LgotICAgIC8vCi0gICAgLy8gICAvLyBDb21tZW50IGF0
dGFjaGVkIHRvIHF1eC4KLSAgICAvLyAgIC8vCi0gICAgLy8gICAvLyBBbm90aGVyIGxpbmUgYXR0
YWNoZWQgdG8gcXV4LgotICAgIC8vICAgb3B0aW9uYWwgZG91YmxlIHF1eCA9IDQ7Ci0gICAgLy8K
LSAgICAvLyAgIC8vIERldGFjaGVkIGNvbW1lbnQgZm9yIGNvcmdlLiBUaGlzIGlzIG5vdCBsZWFk
aW5nIG9yIHRyYWlsaW5nIGNvbW1lbnRzCi0gICAgLy8gICAvLyB0byBxdXggb3IgY29yZ2UgYmVj
YXVzZSB0aGVyZSBhcmUgYmxhbmsgbGluZXMgc2VwYXJhdGluZyBpdCBmcm9tCi0gICAgLy8gICAv
LyBib3RoLgotICAgIC8vCi0gICAgLy8gICAvLyBEZXRhY2hlZCBjb21tZW50IGZvciBjb3JnZSBw
YXJhZ3JhcGggMi4KLSAgICAvLwotICAgIC8vICAgb3B0aW9uYWwgc3RyaW5nIGNvcmdlID0gNTsK
LSAgICAvLyAgIC8qIEJsb2NrIGNvbW1lbnQgYXR0YWNoZWQKLSAgICAvLyAgICAqIHRvIGNvcmdl
LiAgTGVhZGluZyBhc3Rlcmlza3MKLSAgICAvLyAgICAqIHdpbGwgYmUgcmVtb3ZlZC4gKi8KLSAg
ICAvLyAgIC8qIEJsb2NrIGNvbW1lbnQgYXR0YWNoZWQgdG8KLSAgICAvLyAgICAqIGdyYXVsdC4g
Ki8KLSAgICAvLyAgIG9wdGlvbmFsIGludDMyIGdyYXVsdCA9IDY7Ci0gICAgLy8KLSAgICAvLyAg
IC8vIGlnbm9yZWQgZGV0YWNoZWQgY29tbWVudHMuCi0gICAgb3B0aW9uYWwgc3RyaW5nIGxlYWRp
bmdfY29tbWVudHMgPSAzOwotICAgIG9wdGlvbmFsIHN0cmluZyB0cmFpbGluZ19jb21tZW50cyA9
IDQ7Ci0gICAgcmVwZWF0ZWQgc3RyaW5nIGxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMgPSA2Owot
ICB9Ci19Ci0KLS8vIERlc2NyaWJlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZ2VuZXJhdGVk
IGNvZGUgYW5kIGl0cyBvcmlnaW5hbCBzb3VyY2UKLS8vIGZpbGUuIEEgR2VuZXJhdGVkQ29kZUlu
Zm8gbWVzc2FnZSBpcyBhc3NvY2lhdGVkIHdpdGggb25seSBvbmUgZ2VuZXJhdGVkCi0vLyBzb3Vy
Y2UgZmlsZSwgYnV0IG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gZGlmZmVyZW50IHNvdXJjZSAu
cHJvdG8gZmlsZXMuCi1tZXNzYWdlIEdlbmVyYXRlZENvZGVJbmZvIHsKLSAgLy8gQW4gQW5ub3Rh
dGlvbiBjb25uZWN0cyBzb21lIHNwYW4gb2YgdGV4dCBpbiBnZW5lcmF0ZWQgY29kZSB0byBhbiBl
bGVtZW50Ci0gIC8vIG9mIGl0cyBnZW5lcmF0aW5nIC5wcm90byBmaWxlLgotICByZXBlYXRlZCBB
bm5vdGF0aW9uIGFubm90YXRpb24gPSAxOwotICBtZXNzYWdlIEFubm90YXRpb24gewotICAgIC8v
IElkZW50aWZpZXMgdGhlIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSAucHJvdG8gZmls
ZS4gVGhpcyBmaWVsZAotICAgIC8vIGlzIGZvcm1hdHRlZCB0aGUgc2FtZSBhcyBTb3VyY2VDb2Rl
SW5mby5Mb2NhdGlvbi5wYXRoLgotICAgIHJlcGVhdGVkIGludDMyIHBhdGggPSAxIFtwYWNrZWQ9
dHJ1ZV07Ci0KLSAgICAvLyBJZGVudGlmaWVzIHRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIG9y
aWdpbmFsIHNvdXJjZSAucHJvdG8uCi0gICAgb3B0aW9uYWwgc3RyaW5nIHNvdXJjZV9maWxlID0g
MjsKLQotICAgIC8vIElkZW50aWZpZXMgdGhlIHN0YXJ0aW5nIG9mZnNldCBpbiBieXRlcyBpbiB0
aGUgZ2VuZXJhdGVkIGNvZGUKLSAgICAvLyB0aGF0IHJlbGF0ZXMgdG8gdGhlIGlkZW50aWZpZWQg
b2JqZWN0LgotICAgIG9wdGlvbmFsIGludDMyIGJlZ2luID0gMzsKLQotICAgIC8vIElkZW50aWZp
ZXMgdGhlIGVuZGluZyBvZmZzZXQgaW4gYnl0ZXMgaW4gdGhlIGdlbmVyYXRlZCBjb2RlIHRoYXQK
LSAgICAvLyByZWxhdGVzIHRvIHRoZSBpZGVudGlmaWVkIG9mZnNldC4gVGhlIGVuZCBvZmZzZXQg
c2hvdWxkIGJlIG9uZSBwYXN0Ci0gICAgLy8gdGhlIGxhc3QgcmVsZXZhbnQgYnl0ZSAoc28gdGhl
IGxlbmd0aCBvZiB0aGUgdGV4dCA9IGVuZCAtIGJlZ2luKS4KLSAgICBvcHRpb25hbCBpbnQzMiBl
bmQgPSA0OwotICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRv
cl9kYXRhYmFzZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX2RhdGFiYXNlLmNj
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTE3YzAyMGY1MzA5NTlkNGViYzgxYmUy
MTUwZGZmYjcxYWZlNzk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX2RhdGFiYXNlLmNjCisrKyAvZGV2
L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFz
ZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hl
bWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9kZXNjcmlwdG9yX2RhdGFiYXNlLmg+Ci0KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0bF91dGlsLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hcF91dGlsLmg+Ci0KLW5hbWVzcGFj
ZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotRGVzY3JpcHRvckRhdGFiYXNlOjp+
RGVzY3JpcHRvckRhdGFiYXNlKCkge30KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVmFsdWU+Ci1ib29sIFNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZTo6RGVzY3JpcHRvcklu
ZGV4PFZhbHVlPjo6QWRkRmlsZSgKLSAgICBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBmaWxl
LAotICAgIFZhbHVlIHZhbHVlKSB7Ci0gIGlmICghSW5zZXJ0SWZOb3RQcmVzZW50KCZieV9uYW1l
XywgZmlsZS5uYW1lKCksIHZhbHVlKSkgewotICAgIEdPT0dMRV9MT0coRVJST1IpIDw8ICJGaWxl
IGFscmVhZHkgZXhpc3RzIGluIGRhdGFiYXNlOiAiIDw8IGZpbGUubmFtZSgpOwotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotCi0gIC8vIFdlIG11c3QgYmUgY2FyZWZ1bCBoZXJlIC0tIGNhbGxpbmcg
ZmlsZS5wYWNrYWdlKCkgaWYgZmlsZS5oYXNfcGFja2FnZSgpIGlzCi0gIC8vIGZhbHNlIGNvdWxk
IGFjY2VzcyBhbiB1bmluaXRpYWxpemVkIHN0YXRpYy1zdG9yYWdlIHZhcmlhYmxlIGlmIHdlIGFy
ZSBiZWluZwotICAvLyBydW4gYXQgc3RhcnR1cCB0aW1lLgotICBzdHJpbmcgcGF0aCA9IGZpbGUu
aGFzX3BhY2thZ2UoKSA/IGZpbGUucGFja2FnZSgpIDogc3RyaW5nKCk7Ci0gIGlmICghcGF0aC5l
bXB0eSgpKSBwYXRoICs9ICcuJzsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGUubWVzc2Fn
ZV90eXBlX3NpemUoKTsgaSsrKSB7Ci0gICAgaWYgKCFBZGRTeW1ib2wocGF0aCArIGZpbGUubWVz
c2FnZV90eXBlKGkpLm5hbWUoKSwgdmFsdWUpKSByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFBZGRO
ZXN0ZWRFeHRlbnNpb25zKGZpbGUubWVzc2FnZV90eXBlKGkpLCB2YWx1ZSkpIHJldHVybiBmYWxz
ZTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGUuZW51bV90eXBlX3NpemUoKTsgaSsr
KSB7Ci0gICAgaWYgKCFBZGRTeW1ib2wocGF0aCArIGZpbGUuZW51bV90eXBlKGkpLm5hbWUoKSwg
dmFsdWUpKSByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlLmV4
dGVuc2lvbl9zaXplKCk7IGkrKykgewotICAgIGlmICghQWRkU3ltYm9sKHBhdGggKyBmaWxlLmV4
dGVuc2lvbihpKS5uYW1lKCksIHZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICAgIGlmICghQWRkRXh0
ZW5zaW9uKGZpbGUuZXh0ZW5zaW9uKGkpLCB2YWx1ZSkpIHJldHVybiBmYWxzZTsKLSAgfQotICBm
b3IgKGludCBpID0gMDsgaSA8IGZpbGUuc2VydmljZV9zaXplKCk7IGkrKykgewotICAgIGlmICgh
QWRkU3ltYm9sKHBhdGggKyBmaWxlLnNlcnZpY2UoaSkubmFtZSgpLCB2YWx1ZSkpIHJldHVybiBm
YWxzZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVmFs
dWU+Ci1ib29sIFNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZTo6RGVzY3JpcHRvckluZGV4PFZhbHVl
Pjo6QWRkU3ltYm9sKAotICAgIGNvbnN0IHN0cmluZyYgbmFtZSwgVmFsdWUgdmFsdWUpIHsKLSAg
Ly8gV2UgbmVlZCB0byBtYWtlIHN1cmUgbm90IHRvIHZpb2xhdGUgb3VyIG1hcCBpbnZhcmlhbnQu
Ci0KLSAgLy8gSWYgdGhlIHN5bWJvbCBuYW1lIGlzIGludmFsaWQgaXQgY291bGQgYnJlYWsgb3Vy
IGxvb2t1cCBhbGdvcml0aG0gKHdoaWNoCi0gIC8vIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0ICcu
JyBzb3J0cyBiZWZvcmUgYWxsIG90aGVyIGNoYXJhY3RlcnMgdGhhdCBhcmUKLSAgLy8gdmFsaWQg
aW4gc3ltYm9sIG5hbWVzKS4KLSAgaWYgKCFWYWxpZGF0ZVN5bWJvbE5hbWUobmFtZSkpIHsKLSAg
ICBHT09HTEVfTE9HKEVSUk9SKSA8PCAiSW52YWxpZCBzeW1ib2wgbmFtZTogIiA8PCBuYW1lOwot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFRyeSB0byBsb29rIHVwIHRoZSBzeW1ib2wg
dG8gbWFrZSBzdXJlIGEgc3VwZXItc3ltYm9sIGRvZXNuJ3QgYWxyZWFkeQotICAvLyBleGlzdC4K
LSAgdHlwZW5hbWUgbWFwPHN0cmluZywgVmFsdWU+OjppdGVyYXRvciBpdGVyID0gRmluZExhc3RM
ZXNzT3JFcXVhbChuYW1lKTsKLQotICBpZiAoaXRlciA9PSBieV9zeW1ib2xfLmVuZCgpKSB7Ci0g
ICAgLy8gQXBwYXJlbnRseSB0aGUgbWFwIGlzIGN1cnJlbnRseSBlbXB0eS4gIEp1c3QgaW5zZXJ0
IGFuZCBiZSBkb25lIHdpdGggaXQuCi0gICAgYnlfc3ltYm9sXy5pbnNlcnQodHlwZW5hbWUgbWFw
PHN0cmluZywgVmFsdWU+Ojp2YWx1ZV90eXBlKG5hbWUsIHZhbHVlKSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci0gIH0KLQotICBpZiAoSXNTdWJTeW1ib2woaXRlci0+Zmlyc3QsIG5hbWUpKSB7Ci0gICAg
R09PR0xFX0xPRyhFUlJPUikgPDwgIlN5bWJvbCBuYW1lIFwiIiA8PCBuYW1lIDw8ICJcIiBjb25m
bGljdHMgd2l0aCB0aGUgZXhpc3RpbmcgIgotICAgICAgICAgICAgICAgICAgInN5bWJvbCBcIiIg
PDwgaXRlci0+Zmlyc3QgPDwgIlwiLiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8g
T0ssIHRoYXQgd29ya2VkLiAgTm93IHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgbm8gc3ltYm9s
IGluIHRoZSBtYXAgaXMKLSAgLy8gYSBzdWItc3ltYm9sIG9mIHRoZSBvbmUgd2UgYXJlIGluc2Vy
dGluZy4gIFRoZSBvbmx5IHN5bWJvbCB3aGljaCBjb3VsZAotICAvLyBiZSBzbyBpcyB0aGUgZmly
c3Qgc3ltYm9sIHRoYXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBuZXcgc3ltYm9sLiAgU2luY2UKLSAg
Ly8gfGl0ZXJ8IHBvaW50cyBhdCB0aGUgbGFzdCBzeW1ib2wgdGhhdCBpcyBsZXNzIHRoYW4gb3Ig
ZXF1YWwsIHdlIGp1c3QgaGF2ZQotICAvLyB0byBpbmNyZW1lbnQgaXQuCi0gICsraXRlcjsKLQot
ICBpZiAoaXRlciAhPSBieV9zeW1ib2xfLmVuZCgpICYmIElzU3ViU3ltYm9sKG5hbWUsIGl0ZXIt
PmZpcnN0KSkgewotICAgIEdPT0dMRV9MT0coRVJST1IpIDw8ICJTeW1ib2wgbmFtZSBcIiIgPDwg
bmFtZSA8PCAiXCIgY29uZmxpY3RzIHdpdGggdGhlIGV4aXN0aW5nICIKLSAgICAgICAgICAgICAg
ICAgICJzeW1ib2wgXCIiIDw8IGl0ZXItPmZpcnN0IDw8ICJcIi4iOwotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotCi0gIC8vIE9LLCBubyBjb25mbGljdHMuCi0KLSAgLy8gSW5zZXJ0IHRoZSBuZXcg
c3ltYm9sIHVzaW5nIHRoZSBpdGVyYXRvciBhcyBhIGhpbnQsIHRoZSBuZXcgZW50cnkgd2lsbAot
ICAvLyBhcHBlYXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBvbmUgdGhlIGl0ZXJhdG9yIGlzIHBv
aW50aW5nIGF0LgotICBieV9zeW1ib2xfLmluc2VydChpdGVyLCB0eXBlbmFtZSBtYXA8c3RyaW5n
LCBWYWx1ZT46OnZhbHVlX3R5cGUobmFtZSwgdmFsdWUpKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlPgotYm9vbCBTaW1wbGVEZXNjcmlwdG9yRGF0YWJh
c2U6OkRlc2NyaXB0b3JJbmRleDxWYWx1ZT46OkFkZE5lc3RlZEV4dGVuc2lvbnMoCi0gICAgY29u
c3QgRGVzY3JpcHRvclByb3RvJiBtZXNzYWdlX3R5cGUsCi0gICAgVmFsdWUgdmFsdWUpIHsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlX3R5cGUubmVzdGVkX3R5cGVfc2l6ZSgpOyBpKysp
IHsKLSAgICBpZiAoIUFkZE5lc3RlZEV4dGVuc2lvbnMobWVzc2FnZV90eXBlLm5lc3RlZF90eXBl
KGkpLCB2YWx1ZSkpIHJldHVybiBmYWxzZTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IG1l
c3NhZ2VfdHlwZS5leHRlbnNpb25fc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAoIUFkZEV4dGVuc2lv
bihtZXNzYWdlX3R5cGUuZXh0ZW5zaW9uKGkpLCB2YWx1ZSkpIHJldHVybiBmYWxzZTsKLSAgfQot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlPgotYm9vbCBTaW1w
bGVEZXNjcmlwdG9yRGF0YWJhc2U6OkRlc2NyaXB0b3JJbmRleDxWYWx1ZT46OkFkZEV4dGVuc2lv
bigKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byYgZmllbGQsCi0gICAgVmFsdWUgdmFs
dWUpIHsKLSAgaWYgKCFmaWVsZC5leHRlbmRlZSgpLmVtcHR5KCkgJiYgZmllbGQuZXh0ZW5kZWUo
KVswXSA9PSAnLicpIHsKLSAgICAvLyBUaGUgZXh0ZW5zaW9uIGlzIGZ1bGx5LXF1YWxpZmllZC4g
IFdlIGNhbiB1c2UgaXQgYXMgYSBsb29rdXAga2V5IGluCi0gICAgLy8gdGhlIGJ5X3N5bWJvbF8g
dGFibGUuCi0gICAgaWYgKCFJbnNlcnRJZk5vdFByZXNlbnQoCi0gICAgICAgICAgICAmYnlfZXh0
ZW5zaW9uXywKLSAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKGZpZWxkLmV4dGVuZGVlKCkuc3Vi
c3RyKDEpLCBmaWVsZC5udW1iZXIoKSksCi0gICAgICAgICAgICB2YWx1ZSkpIHsKLSAgICAgIEdP
T0dMRV9MT0coRVJST1IpIDw8ICJFeHRlbnNpb24gY29uZmxpY3RzIHdpdGggZXh0ZW5zaW9uIGFs
cmVhZHkgaW4gZGF0YWJhc2U6ICIKLSAgICAgICAgICAgICAgICAgICAgImV4dGVuZCAiIDw8IGZp
ZWxkLmV4dGVuZGVlKCkgPDwgIiB7ICIKLSAgICAgICAgICAgICAgICAgPDwgZmllbGQubmFtZSgp
IDw8ICIgPSAiIDw8IGZpZWxkLm51bWJlcigpIDw8ICIgfSI7Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8vIE5vdCBmdWxseS1xdWFsaWZpZWQuICBXZSBjYW4n
dCByZWFsbHkgZG8gYW55dGhpbmcgaGVyZSwgdW5mb3J0dW5hdGVseS4KLSAgICAvLyBXZSBkb24n
dCBjb25zaWRlciB0aGlzIGFuIGVycm9yLCB0aG91Z2gsIGJlY2F1c2UgdGhlIGRlc2NyaXB0b3Ig
aXMKLSAgICAvLyB2YWxpZC4KLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFZhbHVlPgotVmFsdWUgU2ltcGxlRGVzY3JpcHRvckRhdGFiYXNlOjpEZXNjcmlwdG9y
SW5kZXg8VmFsdWU+OjpGaW5kRmlsZSgKLSAgICBjb25zdCBzdHJpbmcmIGZpbGVuYW1lKSB7Ci0g
IHJldHVybiBGaW5kV2l0aERlZmF1bHQoYnlfbmFtZV8sIGZpbGVuYW1lLCBWYWx1ZSgpKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlPgotVmFsdWUgU2ltcGxlRGVzY3JpcHRvckRhdGFi
YXNlOjpEZXNjcmlwdG9ySW5kZXg8VmFsdWU+OjpGaW5kU3ltYm9sKAotICAgIGNvbnN0IHN0cmlu
ZyYgbmFtZSkgewotICB0eXBlbmFtZSBtYXA8c3RyaW5nLCBWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIg
PSBGaW5kTGFzdExlc3NPckVxdWFsKG5hbWUpOwotCi0gIHJldHVybiAoaXRlciAhPSBieV9zeW1i
b2xfLmVuZCgpICYmIElzU3ViU3ltYm9sKGl0ZXItPmZpcnN0LCBuYW1lKSkgPwotICAgICAgICAg
aXRlci0+c2Vjb25kIDogVmFsdWUoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlPgot
VmFsdWUgU2ltcGxlRGVzY3JpcHRvckRhdGFiYXNlOjpEZXNjcmlwdG9ySW5kZXg8VmFsdWU+OjpG
aW5kRXh0ZW5zaW9uKAotICAgIGNvbnN0IHN0cmluZyYgY29udGFpbmluZ190eXBlLAotICAgIGlu
dCBmaWVsZF9udW1iZXIpIHsKLSAgcmV0dXJuIEZpbmRXaXRoRGVmYXVsdCgKLSAgICAgIGJ5X2V4
dGVuc2lvbl8sIHN0ZDo6bWFrZV9wYWlyKGNvbnRhaW5pbmdfdHlwZSwgZmllbGRfbnVtYmVyKSwg
VmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZT4KLWJvb2wgU2ltcGxlRGVz
Y3JpcHRvckRhdGFiYXNlOjpEZXNjcmlwdG9ySW5kZXg8VmFsdWU+OjpGaW5kQWxsRXh0ZW5zaW9u
TnVtYmVycygKLSAgICBjb25zdCBzdHJpbmcmIGNvbnRhaW5pbmdfdHlwZSwKLSAgICB2ZWN0b3I8
aW50Piogb3V0cHV0KSB7Ci0gIHR5cGVuYW1lIG1hcDxwYWlyPHN0cmluZywgaW50PiwgVmFsdWU+
Ojpjb25zdF9pdGVyYXRvciBpdCA9Ci0gICAgICBieV9leHRlbnNpb25fLmxvd2VyX2JvdW5kKHN0
ZDo6bWFrZV9wYWlyKGNvbnRhaW5pbmdfdHlwZSwgMCkpOwotICBib29sIHN1Y2Nlc3MgPSBmYWxz
ZTsKLQotICBmb3IgKDsgaXQgIT0gYnlfZXh0ZW5zaW9uXy5lbmQoKSAmJiBpdC0+Zmlyc3QuZmly
c3QgPT0gY29udGFpbmluZ190eXBlOwotICAgICAgICsraXQpIHsKLSAgICBvdXRwdXQtPnB1c2hf
YmFjayhpdC0+Zmlyc3Quc2Vjb25kKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgfQotCi0gIHJl
dHVybiBzdWNjZXNzOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWU+Ci10eXBlbmFtZSBt
YXA8c3RyaW5nLCBWYWx1ZT46Oml0ZXJhdG9yCi1TaW1wbGVEZXNjcmlwdG9yRGF0YWJhc2U6OkRl
c2NyaXB0b3JJbmRleDxWYWx1ZT46OkZpbmRMYXN0TGVzc09yRXF1YWwoCi0gICAgY29uc3Qgc3Ry
aW5nJiBuYW1lKSB7Ci0gIC8vIEZpbmQgdGhlIGxhc3Qga2V5IGluIHRoZSBtYXAgd2hpY2ggc29y
dHMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQotICAvLyBzeW1ib2wgbmFtZS4gIFNpbmNlIHVw
cGVyX2JvdW5kKCkgcmV0dXJucyB0aGUgKmZpcnN0KiBrZXkgdGhhdCBzb3J0cwotICAvLyAqZ3Jl
YXRlciogdGhhbiB0aGUgaW5wdXQsIHdlIHdhbnQgdGhlIGVsZW1lbnQgaW1tZWRpYXRlbHkgYmVm
b3JlIHRoYXQuCi0gIHR5cGVuYW1lIG1hcDxzdHJpbmcsIFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9
IGJ5X3N5bWJvbF8udXBwZXJfYm91bmQobmFtZSk7Ci0gIGlmIChpdGVyICE9IGJ5X3N5bWJvbF8u
YmVnaW4oKSkgLS1pdGVyOwotICByZXR1cm4gaXRlcjsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFZhbHVlPgotYm9vbCBTaW1wbGVEZXNjcmlwdG9yRGF0YWJhc2U6OkRlc2NyaXB0b3JJbmRleDxW
YWx1ZT46OklzU3ViU3ltYm9sKAotICAgIGNvbnN0IHN0cmluZyYgc3ViX3N5bWJvbCwgY29uc3Qg
c3RyaW5nJiBzdXBlcl9zeW1ib2wpIHsKLSAgcmV0dXJuIHN1Yl9zeW1ib2wgPT0gc3VwZXJfc3lt
Ym9sIHx8Ci0gICAgICAgICAoSGFzUHJlZml4U3RyaW5nKHN1cGVyX3N5bWJvbCwgc3ViX3N5bWJv
bCkgJiYKLSAgICAgICAgICAgICBzdXBlcl9zeW1ib2xbc3ViX3N5bWJvbC5zaXplKCldID09ICcu
Jyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZT4KLWJvb2wgU2ltcGxlRGVzY3JpcHRv
ckRhdGFiYXNlOjpEZXNjcmlwdG9ySW5kZXg8VmFsdWU+OjpWYWxpZGF0ZVN5bWJvbE5hbWUoCi0g
ICAgY29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZS5zaXpl
KCk7IGkrKykgewotICAgIC8vIEkgZG9uJ3QgdHJ1c3QgY3R5cGUuaCBkdWUgdG8gbG9jYWxlcy4g
IDooCi0gICAgaWYgKG5hbWVbaV0gIT0gJy4nICYmIG5hbWVbaV0gIT0gJ18nICYmCi0gICAgICAg
IChuYW1lW2ldIDwgJzAnIHx8IG5hbWVbaV0gPiAnOScpICYmCi0gICAgICAgIChuYW1lW2ldIDwg
J0EnIHx8IG5hbWVbaV0gPiAnWicpICYmCi0gICAgICAgIChuYW1lW2ldIDwgJ2EnIHx8IG5hbWVb
aV0gPiAneicpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0gIHJldHVybiB0
cnVlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZTo6U2lt
cGxlRGVzY3JpcHRvckRhdGFiYXNlKCkge30KLVNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZTo6flNp
bXBsZURlc2NyaXB0b3JEYXRhYmFzZSgpIHsKLSAgU1RMRGVsZXRlRWxlbWVudHMoJmZpbGVzX3Rv
X2RlbGV0ZV8pOwotfQotCi1ib29sIFNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZTo6QWRkKGNvbnN0
IEZpbGVEZXNjcmlwdG9yUHJvdG8mIGZpbGUpIHsKLSAgRmlsZURlc2NyaXB0b3JQcm90byogbmV3
X2ZpbGUgPSBuZXcgRmlsZURlc2NyaXB0b3JQcm90bzsKLSAgbmV3X2ZpbGUtPkNvcHlGcm9tKGZp
bGUpOwotICByZXR1cm4gQWRkQW5kT3duKG5ld19maWxlKTsKLX0KLQotYm9vbCBTaW1wbGVEZXNj
cmlwdG9yRGF0YWJhc2U6OkFkZEFuZE93bihjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBmaWxl
KSB7Ci0gIGZpbGVzX3RvX2RlbGV0ZV8ucHVzaF9iYWNrKGZpbGUpOwotICByZXR1cm4gaW5kZXhf
LkFkZEZpbGUoKmZpbGUsIGZpbGUpOwotfQotCi1ib29sIFNpbXBsZURlc2NyaXB0b3JEYXRhYmFz
ZTo6RmluZEZpbGVCeU5hbWUoCi0gICAgY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwKLSAgICBGaWxl
RGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgcmV0dXJuIE1heWJlQ29weShpbmRleF8uRmlu
ZEZpbGUoZmlsZW5hbWUpLCBvdXRwdXQpOwotfQotCi1ib29sIFNpbXBsZURlc2NyaXB0b3JEYXRh
YmFzZTo6RmluZEZpbGVDb250YWluaW5nU3ltYm9sKAotICAgIGNvbnN0IHN0cmluZyYgc3ltYm9s
X25hbWUsCi0gICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gIHJldHVybiBNYXli
ZUNvcHkoaW5kZXhfLkZpbmRTeW1ib2woc3ltYm9sX25hbWUpLCBvdXRwdXQpOwotfQotCi1ib29s
IFNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZTo6RmluZEZpbGVDb250YWluaW5nRXh0ZW5zaW9uKAot
ICAgIGNvbnN0IHN0cmluZyYgY29udGFpbmluZ190eXBlLAotICAgIGludCBmaWVsZF9udW1iZXIs
Ci0gICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gIHJldHVybiBNYXliZUNvcHko
aW5kZXhfLkZpbmRFeHRlbnNpb24oY29udGFpbmluZ190eXBlLCBmaWVsZF9udW1iZXIpLCBvdXRw
dXQpOwotfQotCi1ib29sIFNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZTo6RmluZEFsbEV4dGVuc2lv
bk51bWJlcnMoCi0gICAgY29uc3Qgc3RyaW5nJiBleHRlbmRlZV90eXBlLAotICAgIHZlY3Rvcjxp
bnQ+KiBvdXRwdXQpIHsKLSAgcmV0dXJuIGluZGV4Xy5GaW5kQWxsRXh0ZW5zaW9uTnVtYmVycyhl
eHRlbmRlZV90eXBlLCBvdXRwdXQpOwotfQotCi0KLWJvb2wgU2ltcGxlRGVzY3JpcHRvckRhdGFi
YXNlOjpNYXliZUNvcHkoY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byogZmlsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0
cHV0KSB7Ci0gIGlmIChmaWxlID09IE5VTEwpIHJldHVybiBmYWxzZTsKLSAgb3V0cHV0LT5Db3B5
RnJvbSgqZmlsZSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUVuY29k
ZWREZXNjcmlwdG9yRGF0YWJhc2U6OkVuY29kZWREZXNjcmlwdG9yRGF0YWJhc2UoKSB7fQotRW5j
b2RlZERlc2NyaXB0b3JEYXRhYmFzZTo6fkVuY29kZWREZXNjcmlwdG9yRGF0YWJhc2UoKSB7Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXNfdG9fZGVsZXRlXy5zaXplKCk7IGkrKykgewotICAg
IG9wZXJhdG9yIGRlbGV0ZShmaWxlc190b19kZWxldGVfW2ldKTsKLSAgfQotfQotCi1ib29sIEVu
Y29kZWREZXNjcmlwdG9yRGF0YWJhc2U6OkFkZCgKLSAgICBjb25zdCB2b2lkKiBlbmNvZGVkX2Zp
bGVfZGVzY3JpcHRvciwgaW50IHNpemUpIHsKLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlOwot
ICBpZiAoZmlsZS5QYXJzZUZyb21BcnJheShlbmNvZGVkX2ZpbGVfZGVzY3JpcHRvciwgc2l6ZSkp
IHsKLSAgICByZXR1cm4gaW5kZXhfLkFkZEZpbGUoZmlsZSwgc3RkOjptYWtlX3BhaXIoZW5jb2Rl
ZF9maWxlX2Rlc2NyaXB0b3IsIHNpemUpKTsKLSAgfSBlbHNlIHsKLSAgICBHT09HTEVfTE9HKEVS
Uk9SKSA8PCAiSW52YWxpZCBmaWxlIGRlc2NyaXB0b3IgZGF0YSBwYXNzZWQgdG8gIgotICAgICAg
ICAgICAgICAgICAgIkVuY29kZWREZXNjcmlwdG9yRGF0YWJhc2U6OkFkZCgpLiI7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci19Ci0KLWJvb2wgRW5jb2RlZERlc2NyaXB0b3JEYXRhYmFzZTo6QWRk
Q29weSgKLSAgICBjb25zdCB2b2lkKiBlbmNvZGVkX2ZpbGVfZGVzY3JpcHRvciwgaW50IHNpemUp
IHsKLSAgdm9pZCogY29weSA9IG9wZXJhdG9yIG5ldyhzaXplKTsKLSAgbWVtY3B5KGNvcHksIGVu
Y29kZWRfZmlsZV9kZXNjcmlwdG9yLCBzaXplKTsKLSAgZmlsZXNfdG9fZGVsZXRlXy5wdXNoX2Jh
Y2soY29weSk7Ci0gIHJldHVybiBBZGQoY29weSwgc2l6ZSk7Ci19Ci0KLWJvb2wgRW5jb2RlZERl
c2NyaXB0b3JEYXRhYmFzZTo6RmluZEZpbGVCeU5hbWUoCi0gICAgY29uc3Qgc3RyaW5nJiBmaWxl
bmFtZSwKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgcmV0dXJuIE1heWJl
UGFyc2UoaW5kZXhfLkZpbmRGaWxlKGZpbGVuYW1lKSwgb3V0cHV0KTsKLX0KLQotYm9vbCBFbmNv
ZGVkRGVzY3JpcHRvckRhdGFiYXNlOjpGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woCi0gICAgY29u
c3Qgc3RyaW5nJiBzeW1ib2xfbmFtZSwKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQp
IHsKLSAgcmV0dXJuIE1heWJlUGFyc2UoaW5kZXhfLkZpbmRTeW1ib2woc3ltYm9sX25hbWUpLCBv
dXRwdXQpOwotfQotCi1ib29sIEVuY29kZWREZXNjcmlwdG9yRGF0YWJhc2U6OkZpbmROYW1lT2ZG
aWxlQ29udGFpbmluZ1N5bWJvbCgKLSAgICBjb25zdCBzdHJpbmcmIHN5bWJvbF9uYW1lLAotICAg
IHN0cmluZyogb3V0cHV0KSB7Ci0gIHBhaXI8Y29uc3Qgdm9pZCosIGludD4gZW5jb2RlZF9maWxl
ID0gaW5kZXhfLkZpbmRTeW1ib2woc3ltYm9sX25hbWUpOwotICBpZiAoZW5jb2RlZF9maWxlLmZp
cnN0ID09IE5VTEwpIHJldHVybiBmYWxzZTsKLQotICAvLyBPcHRpbWl6YXRpb246ICBUaGUgbmFt
ZSBzaG91bGQgYmUgdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBlbmNvZGVkIG1lc3NhZ2UuCi0gIC8v
ICAgVHJ5IHRvIGp1c3QgcmVhZCBpdCBkaXJlY3RseS4KLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0g
aW5wdXQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OCo+KGVuY29kZWRfZmlsZS5maXJzdCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRfZmlsZS5zZWNvbmQpOwotCi0g
IGNvbnN0IHVpbnQzMiBrTmFtZVRhZyA9IGludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWFrZVRh
ZygKLSAgICAgIEZpbGVEZXNjcmlwdG9yUHJvdG86OmtOYW1lRmllbGROdW1iZXIsCi0gICAgICBp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpOwotCi0g
IGlmIChpbnB1dC5SZWFkVGFnKCkgPT0ga05hbWVUYWcpIHsKLSAgICAvLyBTdWNjZXNzIQotICAg
IHJldHVybiBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoJmlucHV0LCBvdXRw
dXQpOwotICB9IGVsc2UgewotICAgIC8vIFNsb3cgcGF0aC4gIFBhcnNlIHdob2xlIG1lc3NhZ2Uu
Ci0gICAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICAgIGlmICghZmlsZV9wcm90
by5QYXJzZUZyb21BcnJheShlbmNvZGVkX2ZpbGUuZmlyc3QsIGVuY29kZWRfZmlsZS5zZWNvbmQp
KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgICpvdXRwdXQgPSBmaWxlX3Byb3Rv
Lm5hbWUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQotCi1ib29sIEVuY29kZWREZXNjcmlw
dG9yRGF0YWJhc2U6OkZpbmRGaWxlQ29udGFpbmluZ0V4dGVuc2lvbigKLSAgICBjb25zdCBzdHJp
bmcmIGNvbnRhaW5pbmdfdHlwZSwKLSAgICBpbnQgZmllbGRfbnVtYmVyLAotICAgIEZpbGVEZXNj
cmlwdG9yUHJvdG8qIG91dHB1dCkgewotICByZXR1cm4gTWF5YmVQYXJzZShpbmRleF8uRmluZEV4
dGVuc2lvbihjb250YWluaW5nX3R5cGUsIGZpZWxkX251bWJlciksCi0gICAgICAgICAgICAgICAg
ICAgIG91dHB1dCk7Ci19Ci0KLWJvb2wgRW5jb2RlZERlc2NyaXB0b3JEYXRhYmFzZTo6RmluZEFs
bEV4dGVuc2lvbk51bWJlcnMoCi0gICAgY29uc3Qgc3RyaW5nJiBleHRlbmRlZV90eXBlLAotICAg
IHZlY3RvcjxpbnQ+KiBvdXRwdXQpIHsKLSAgcmV0dXJuIGluZGV4Xy5GaW5kQWxsRXh0ZW5zaW9u
TnVtYmVycyhleHRlbmRlZV90eXBlLCBvdXRwdXQpOwotfQotCi1ib29sIEVuY29kZWREZXNjcmlw
dG9yRGF0YWJhc2U6Ok1heWJlUGFyc2UoCi0gICAgcGFpcjxjb25zdCB2b2lkKiwgaW50PiBlbmNv
ZGVkX2ZpbGUsCi0gICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gIGlmIChlbmNv
ZGVkX2ZpbGUuZmlyc3QgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gb3V0cHV0LT5Q
YXJzZUZyb21BcnJheShlbmNvZGVkX2ZpbGUuZmlyc3QsIGVuY29kZWRfZmlsZS5zZWNvbmQpOwot
fQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLURlc2NyaXB0b3JQb29sRGF0YWJhc2U6OkRlc2NyaXB0b3JQ
b29sRGF0YWJhc2UoY29uc3QgRGVzY3JpcHRvclBvb2wmIHBvb2wpCi0gIDogcG9vbF8ocG9vbCkg
e30KLURlc2NyaXB0b3JQb29sRGF0YWJhc2U6On5EZXNjcmlwdG9yUG9vbERhdGFiYXNlKCkge30K
LQotYm9vbCBEZXNjcmlwdG9yUG9vbERhdGFiYXNlOjpGaW5kRmlsZUJ5TmFtZSgKLSAgICBjb25z
dCBzdHJpbmcmIGZpbGVuYW1lLAotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8qIG91dHB1dCkgewot
ICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSA9IHBvb2xfLkZpbmRGaWxlQnlOYW1lKGZpbGVu
YW1lKTsKLSAgaWYgKGZpbGUgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotICBvdXRwdXQtPkNsZWFy
KCk7Ci0gIGZpbGUtPkNvcHlUbyhvdXRwdXQpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBE
ZXNjcmlwdG9yUG9vbERhdGFiYXNlOjpGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woCi0gICAgY29u
c3Qgc3RyaW5nJiBzeW1ib2xfbmFtZSwKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQp
IHsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUgPSBwb29sXy5GaW5kRmlsZUNvbnRhaW5p
bmdTeW1ib2woc3ltYm9sX25hbWUpOwotICBpZiAoZmlsZSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7
Ci0gIG91dHB1dC0+Q2xlYXIoKTsKLSAgZmlsZS0+Q29weVRvKG91dHB1dCk7Ci0gIHJldHVybiB0
cnVlOwotfQotCi1ib29sIERlc2NyaXB0b3JQb29sRGF0YWJhc2U6OkZpbmRGaWxlQ29udGFpbmlu
Z0V4dGVuc2lvbigKLSAgICBjb25zdCBzdHJpbmcmIGNvbnRhaW5pbmdfdHlwZSwKLSAgICBpbnQg
ZmllbGRfbnVtYmVyLAotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8qIG91dHB1dCkgewotICBjb25z
dCBEZXNjcmlwdG9yKiBleHRlbmRlZSA9IHBvb2xfLkZpbmRNZXNzYWdlVHlwZUJ5TmFtZShjb250
YWluaW5nX3R5cGUpOwotICBpZiAoZXh0ZW5kZWUgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotCi0g
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZXh0ZW5zaW9uID0KLSAgICBwb29sXy5GaW5kRXh0ZW5z
aW9uQnlOdW1iZXIoZXh0ZW5kZWUsIGZpZWxkX251bWJlcik7Ci0gIGlmIChleHRlbnNpb24gPT0g
TlVMTCkgcmV0dXJuIGZhbHNlOwotCi0gIG91dHB1dC0+Q2xlYXIoKTsKLSAgZXh0ZW5zaW9uLT5m
aWxlKCktPkNvcHlUbyhvdXRwdXQpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZXNjcmlw
dG9yUG9vbERhdGFiYXNlOjpGaW5kQWxsRXh0ZW5zaW9uTnVtYmVycygKLSAgICBjb25zdCBzdHJp
bmcmIGV4dGVuZGVlX3R5cGUsCi0gICAgdmVjdG9yPGludD4qIG91dHB1dCkgewotICBjb25zdCBE
ZXNjcmlwdG9yKiBleHRlbmRlZSA9IHBvb2xfLkZpbmRNZXNzYWdlVHlwZUJ5TmFtZShleHRlbmRl
ZV90eXBlKTsKLSAgaWYgKGV4dGVuZGVlID09IE5VTEwpIHJldHVybiBmYWxzZTsKLQotICB2ZWN0
b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZXh0ZW5zaW9uczsKLSAgcG9vbF8uRmluZEFsbEV4
dGVuc2lvbnMoZXh0ZW5kZWUsICZleHRlbnNpb25zKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8
IGV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICBvdXRwdXQtPnB1c2hfYmFjayhleHRlbnNp
b25zW2ldLT5udW1iZXIoKSk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotCi1NZXJnZWREZXNjcmlwdG9yRGF0YWJhc2U6Ok1lcmdlZERlc2NyaXB0b3JEYXRhYmFz
ZSgKLSAgICBEZXNjcmlwdG9yRGF0YWJhc2UqIHNvdXJjZTEsCi0gICAgRGVzY3JpcHRvckRhdGFi
YXNlKiBzb3VyY2UyKSB7Ci0gIHNvdXJjZXNfLnB1c2hfYmFjayhzb3VyY2UxKTsKLSAgc291cmNl
c18ucHVzaF9iYWNrKHNvdXJjZTIpOwotfQotTWVyZ2VkRGVzY3JpcHRvckRhdGFiYXNlOjpNZXJn
ZWREZXNjcmlwdG9yRGF0YWJhc2UoCi0gICAgY29uc3QgdmVjdG9yPERlc2NyaXB0b3JEYXRhYmFz
ZSo+JiBzb3VyY2VzKQotICA6IHNvdXJjZXNfKHNvdXJjZXMpIHt9Ci1NZXJnZWREZXNjcmlwdG9y
RGF0YWJhc2U6On5NZXJnZWREZXNjcmlwdG9yRGF0YWJhc2UoKSB7fQotCi1ib29sIE1lcmdlZERl
c2NyaXB0b3JEYXRhYmFzZTo6RmluZEZpbGVCeU5hbWUoCi0gICAgY29uc3Qgc3RyaW5nJiBmaWxl
bmFtZSwKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzb3VyY2VzXy5zaXplKCk7IGkrKykgewotICAgIGlmIChzb3VyY2VzX1tpXS0+Rmlu
ZEZpbGVCeU5hbWUoZmlsZW5hbWUsIG91dHB1dCkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTWVyZ2VkRGVzY3JpcHRvckRhdGFi
YXNlOjpGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woCi0gICAgY29uc3Qgc3RyaW5nJiBzeW1ib2xf
bmFtZSwKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzb3VyY2VzXy5zaXplKCk7IGkrKykgewotICAgIGlmIChzb3VyY2VzX1tpXS0+Rmlu
ZEZpbGVDb250YWluaW5nU3ltYm9sKHN5bWJvbF9uYW1lLCBvdXRwdXQpKSB7Ci0gICAgICAvLyBU
aGUgc3ltYm9sIHdhcyBmb3VuZCBpbiBzb3VyY2UgaS4gIEhvd2V2ZXIsIGlmIG9uZSBvZiB0aGUg
cHJldmlvdXMKLSAgICAgIC8vIHNvdXJjZXMgZGVmaW5lcyBhIGZpbGUgd2l0aCB0aGUgc2FtZSBu
YW1lICh3aGljaCBwcmVzdW1hYmx5IGRvZXNuJ3QKLSAgICAgIC8vIGNvbnRhaW4gdGhlIHN5bWJv
bCwgc2luY2UgaXQgd2Fzbid0IGZvdW5kIGluIHRoYXQgc291cmNlKSwgdGhlbiB3ZQotICAgICAg
Ly8gbXVzdCBoaWRlIGl0IGZyb20gdGhlIGNhbGxlci4KLSAgICAgIEZpbGVEZXNjcmlwdG9yUHJv
dG8gdGVtcDsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgaisrKSB7Ci0gICAgICAgIGlm
IChzb3VyY2VzX1tqXS0+RmluZEZpbGVCeU5hbWUob3V0cHV0LT5uYW1lKCksICZ0ZW1wKSkgewot
ICAgICAgICAgIC8vIEZvdW5kIGNvbmZsaWN0aW5nIGZpbGUgaW4gYSBwcmV2aW91cyBzb3VyY2Uu
Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE1lcmdlZERl
c2NyaXB0b3JEYXRhYmFzZTo6RmluZEZpbGVDb250YWluaW5nRXh0ZW5zaW9uKAotICAgIGNvbnN0
IHN0cmluZyYgY29udGFpbmluZ190eXBlLAotICAgIGludCBmaWVsZF9udW1iZXIsCi0gICAgRmls
ZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgc291cmNl
c18uc2l6ZSgpOyBpKyspIHsKLSAgICBpZiAoc291cmNlc19baV0tPkZpbmRGaWxlQ29udGFpbmlu
Z0V4dGVuc2lvbigKLSAgICAgICAgICBjb250YWluaW5nX3R5cGUsIGZpZWxkX251bWJlciwgb3V0
cHV0KSkgewotICAgICAgLy8gVGhlIHN5bWJvbCB3YXMgZm91bmQgaW4gc291cmNlIGkuICBIb3dl
dmVyLCBpZiBvbmUgb2YgdGhlIHByZXZpb3VzCi0gICAgICAvLyBzb3VyY2VzIGRlZmluZXMgYSBm
aWxlIHdpdGggdGhlIHNhbWUgbmFtZSAod2hpY2ggcHJlc3VtYWJseSBkb2Vzbid0Ci0gICAgICAv
LyBjb250YWluIHRoZSBzeW1ib2wsIHNpbmNlIGl0IHdhc24ndCBmb3VuZCBpbiB0aGF0IHNvdXJj
ZSksIHRoZW4gd2UKLSAgICAgIC8vIG11c3QgaGlkZSBpdCBmcm9tIHRoZSBjYWxsZXIuCi0gICAg
ICBGaWxlRGVzY3JpcHRvclByb3RvIHRlbXA7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7
IGorKykgewotICAgICAgICBpZiAoc291cmNlc19bal0tPkZpbmRGaWxlQnlOYW1lKG91dHB1dC0+
bmFtZSgpLCAmdGVtcCkpIHsKLSAgICAgICAgICAvLyBGb3VuZCBjb25mbGljdGluZyBmaWxlIGlu
IGEgcHJldmlvdXMgc291cmNlLgotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBNZXJnZWREZXNjcmlwdG9yRGF0YWJhc2U6OkZpbmRBbGxFeHRlbnNpb25OdW1i
ZXJzKAotICAgIGNvbnN0IHN0cmluZyYgZXh0ZW5kZWVfdHlwZSwKLSAgICB2ZWN0b3I8aW50Piog
b3V0cHV0KSB7Ci0gIHNldDxpbnQ+IG1lcmdlZF9yZXN1bHRzOwotICB2ZWN0b3I8aW50PiByZXN1
bHRzOwotICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IHNv
dXJjZXNfLnNpemUoKTsgaSsrKSB7Ci0gICAgaWYgKHNvdXJjZXNfW2ldLT5GaW5kQWxsRXh0ZW5z
aW9uTnVtYmVycyhleHRlbmRlZV90eXBlLCAmcmVzdWx0cykpIHsKLSAgICAgIHN0ZDo6Y29weSgK
LSAgICAgICAgICByZXN1bHRzLmJlZ2luKCksIHJlc3VsdHMuZW5kKCksCi0gICAgICAgICAgaW5z
ZXJ0X2l0ZXJhdG9yPHNldDxpbnQ+ID4obWVyZ2VkX3Jlc3VsdHMsIG1lcmdlZF9yZXN1bHRzLmJl
Z2luKCkpKTsKLSAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgIH0KLSAgICByZXN1bHRzLmNsZWFy
KCk7Ci0gIH0KLQotICBzdGQ6OmNvcHkobWVyZ2VkX3Jlc3VsdHMuYmVnaW4oKSwgbWVyZ2VkX3Jl
c3VsdHMuZW5kKCksCi0gICAgICAgICAgICBpbnNlcnRfaXRlcmF0b3I8dmVjdG9yPGludD4gPigq
b3V0cHV0LCBvdXRwdXQtPmVuZCgpKSk7Ci0KLSAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLQotfSAg
Ly8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9kYXRhYmFzZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2Rlc2NyaXB0b3JfZGF0YWJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODYwMDJkNTZmNjIzZmM2MzM2MjU4MGEwNmMzYTcyMDViMTM4ODFiZS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvcl9kYXRhYmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzY5ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUu
Y29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVy
cyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4K
LS8vCi0vLyBJbnRlcmZhY2UgZm9yIG1hbmlwdWxhdGluZyBkYXRhYmFzZXMgb2YgZGVzY3JpcHRv
cnMuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0RFU0NSSVBUT1JfREFUQUJBU0VfSF9fCi0j
ZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9ERVNDUklQVE9SX0RBVEFCQVNFX0hfXwotCi0jaW5jbHVk
ZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUg
PHZlY3Rvcj4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi0vLyBEZWZpbmVkIGluIHRoaXMgZmlsZS4KLWNsYXNz
IERlc2NyaXB0b3JEYXRhYmFzZTsKLWNsYXNzIFNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZTsKLWNs
YXNzIEVuY29kZWREZXNjcmlwdG9yRGF0YWJhc2U7Ci1jbGFzcyBEZXNjcmlwdG9yUG9vbERhdGFi
YXNlOwotY2xhc3MgTWVyZ2VkRGVzY3JpcHRvckRhdGFiYXNlOwotCi0vLyBBYnN0cmFjdCBpbnRl
cmZhY2UgZm9yIGEgZGF0YWJhc2Ugb2YgZGVzY3JpcHRvcnMuCi0vLwotLy8gVGhpcyBpcyB1c2Vm
dWwgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgRGVzY3JpcHRvclBvb2wgd2hpY2ggbG9hZHMKLS8v
IGRlc2NyaXB0b3JzIG9uLWRlbWFuZCBmcm9tIHNvbWUgc29ydCBvZiBsYXJnZSBkYXRhYmFzZS4g
IElmIHRoZSBkYXRhYmFzZQotLy8gaXMgbGFyZ2UsIGl0IG1heSBiZSBpbmVmZmljaWVudCB0byBl
bnVtZXJhdGUgZXZlcnkgLnByb3RvIGZpbGUgaW5zaWRlIGl0Ci0vLyBjYWxsaW5nIERlc2NyaXB0
b3JQb29sOjpCdWlsZEZpbGUoKSBmb3IgZWFjaCBvbmUuICBJbnN0ZWFkLCBhIERlc2NyaXB0b3JQ
b29sCi0vLyBjYW4gYmUgY3JlYXRlZCB3aGljaCB3cmFwcyBhIERlc2NyaXB0b3JEYXRhYmFzZSBh
bmQgb25seSBidWlsZHMgcGFydGljdWxhcgotLy8gZGVzY3JpcHRvcnMgd2hlbiB0aGV5IGFyZSBu
ZWVkZWQuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgRGVzY3JpcHRvckRhdGFiYXNlIHsKLSBw
dWJsaWM6Ci0gIGlubGluZSBEZXNjcmlwdG9yRGF0YWJhc2UoKSB7fQotICB2aXJ0dWFsIH5EZXNj
cmlwdG9yRGF0YWJhc2UoKTsKLQotICAvLyBGaW5kIGEgZmlsZSBieSBmaWxlIG5hbWUuICBGaWxs
cyBpbiBpbiAqb3V0cHV0IGFuZCByZXR1cm5zIHRydWUgaWYgZm91bmQuCi0gIC8vIE90aGVyd2lz
ZSwgcmV0dXJucyBmYWxzZSwgbGVhdmluZyB0aGUgY29udGVudHMgb2YgKm91dHB1dCB1bmRlZmlu
ZWQuCi0gIHZpcnR1YWwgYm9vbCBGaW5kRmlsZUJ5TmFtZShjb25zdCBzdHJpbmcmIGZpbGVuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0
cHV0KSA9IDA7Ci0KLSAgLy8gRmluZCB0aGUgZmlsZSB0aGF0IGRlY2xhcmVzIHRoZSBnaXZlbiBm
dWxseS1xdWFsaWZpZWQgc3ltYm9sIG5hbWUuCi0gIC8vIElmIGZvdW5kLCBmaWxscyBpbiAqb3V0
cHV0IGFuZCByZXR1cm5zIHRydWUsIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlCi0gIC8vIGFuZCBs
ZWF2ZXMgKm91dHB1dCB1bmRlZmluZWQuCi0gIHZpcnR1YWwgYm9vbCBGaW5kRmlsZUNvbnRhaW5p
bmdTeW1ib2woY29uc3Qgc3RyaW5nJiBzeW1ib2xfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpID0gMDsKLQot
ICAvLyBGaW5kIHRoZSBmaWxlIHdoaWNoIGRlZmluZXMgYW4gZXh0ZW5zaW9uIGV4dGVuZGluZyB0
aGUgZ2l2ZW4gbWVzc2FnZSB0eXBlCi0gIC8vIHdpdGggdGhlIGdpdmVuIGZpZWxkIG51bWJlci4g
IElmIGZvdW5kLCBmaWxscyBpbiAqb3V0cHV0IGFuZCByZXR1cm5zIHRydWUsCi0gIC8vIG90aGVy
d2lzZSByZXR1cm5zIGZhbHNlIGFuZCBsZWF2ZXMgKm91dHB1dCB1bmRlZmluZWQuICBjb250YWlu
aW5nX3R5cGUKLSAgLy8gbXVzdCBiZSBhIGZ1bGx5LXF1YWxpZmllZCB0eXBlIG5hbWUuCi0gIHZp
cnR1YWwgYm9vbCBGaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24oY29uc3Qgc3RyaW5nJiBjb250
YWluaW5nX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpID0gMDsKLQotICAvLyBGaW5kcyB0aGUg
dGFnIG51bWJlcnMgdXNlZCBieSBhbGwga25vd24gZXh0ZW5zaW9ucyBvZgotICAvLyBleHRlbmRl
ZV90eXBlLCBhbmQgYXBwZW5kcyB0aGVtIHRvIG91dHB1dCBpbiBhbiB1bmRlZmluZWQKLSAgLy8g
b3JkZXIuIFRoaXMgbWV0aG9kIGlzIGJlc3QtZWZmb3J0OiBpdCdzIG5vdCBndWFyYW50ZWVkIHRo
YXQgdGhlCi0gIC8vIGRhdGFiYXNlIHdpbGwgZmluZCBhbGwgZXh0ZW5zaW9ucywgYW5kIGl0J3Mg
bm90IGd1YXJhbnRlZWQgdGhhdAotICAvLyBGaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24gd2ls
bCByZXR1cm4gdHJ1ZSBvbiBhbGwgb2YgdGhlIGZvdW5kCi0gIC8vIG51bWJlcnMuIFJldHVybnMg
dHJ1ZSBpZiB0aGUgc2VhcmNoIHdhcyBzdWNjZXNzZnVsLCBvdGhlcndpc2UKLSAgLy8gcmV0dXJu
cyBmYWxzZSBhbmQgbGVhdmVzIG91dHB1dCB1bmNoYW5nZWQuCi0gIC8vCi0gIC8vIFRoaXMgbWV0
aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCBhbHdheXMgcmV0dXJucwotICAv
LyBmYWxzZS4KLSAgdmlydHVhbCBib29sIEZpbmRBbGxFeHRlbnNpb25OdW1iZXJzKGNvbnN0IHN0
cmluZyYgLyogZXh0ZW5kZWVfdHlwZSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZlY3RvcjxpbnQ+KiAvKiBvdXRwdXQgKi8pIHsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLQotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JT
KERlc2NyaXB0b3JEYXRhYmFzZSk7Ci19OwotCi0vLyBBIERlc2NyaXB0b3JEYXRhYmFzZSBpbnRv
IHdoaWNoIHlvdSBjYW4gaW5zZXJ0IGZpbGVzIG1hbnVhbGx5LgotLy8KLS8vIEZpbmRGaWxlQ29u
dGFpbmluZ1N5bWJvbCgpIGlzIGZ1bGx5LWltcGxlbWVudGVkLiAgV2hlbiB5b3UgYWRkIGEgZmls
ZSwgaXRzCi0vLyBzeW1ib2xzIHdpbGwgYmUgaW5kZXhlZCBmb3IgdGhpcyBwdXJwb3NlLiAgTm90
ZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbgotLy8gbWF5IHJldHVybiBmYWxzZSBwb3NpdGl2ZXMs
IGJ1dCBvbmx5IGlmIGl0IGlzbid0IHBvc3NpYmxlIGZvciB0aGUgc3ltYm9sCi0vLyB0byBiZSBk
ZWZpbmVkIGluIGFueSBvdGhlciBmaWxlLiAgSW4gcGFydGljdWxhciwgaWYgYSBmaWxlIGRlZmlu
ZXMgYSBzeW1ib2wKLS8vICJGb28iLCB0aGVuIHNlYXJjaGluZyBmb3IgIkZvby5bYW55dGhpbmdd
IiB3aWxsIG1hdGNoIHRoYXQgZmlsZS4gIFRoaXMgd2F5LAotLy8gdGhlIGRhdGFiYXNlIGRvZXMg
bm90IG5lZWQgdG8gYWdncmVzc2l2ZWx5IGluZGV4IGFsbCBjaGlsZHJlbiBvZiBhIHN5bWJvbC4K
LS8vCi0vLyBGaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24oKSBpcyBtb3N0bHktaW1wbGVtZW50
ZWQuICBJdCB3b3JrcyBpZiBhbmQgb25seQotLy8gaWYgdGhlIG9yaWdpbmFsIEZpZWxkRGVzY3Jp
cHRvclByb3RvIGRlZmluaW5nIHRoZSBleHRlbnNpb24gaGFzIGEKLS8vIGZ1bGx5LXF1YWxpZmll
ZCB0eXBlIG5hbWUgaW4gaXRzICJleHRlbmRlZSIgZmllbGQgKGkuZS4gc3RhcnRzIHdpdGggYSAn
LicpLgotLy8gSWYgdGhlIGV4dGVuZGVlIGlzIGEgcmVsYXRpdmUgbmFtZSwgU2ltcGxlRGVzY3Jp
cHRvckRhdGFiYXNlIHdpbGwgbm90Ci0vLyBhdHRlbXB0IHRvIHJlc29sdmUgdGhlIHR5cGUsIHNv
IGl0IHdpbGwgbm90IGtub3cgd2hhdCB0eXBlIHRoZSBleHRlbnNpb24gaXMKLS8vIGV4dGVuZGlu
Zy4gIFRoZXJlZm9yZSwgY2FsbGluZyBGaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24oKSB3aXRo
IHRoZQotLy8gZXh0ZW5zaW9uJ3MgY29udGFpbmluZyB0eXBlIHdpbGwgbmV2ZXIgYWN0dWFsbHkg
ZmluZCB0aGF0IGV4dGVuc2lvbi4gIE5vdGUKLS8vIHRoYXQgdGhpcyBpcyBhbiB1bmxpa2VseSBw
cm9ibGVtLCBhcyBhbGwgRmlsZURlc2NyaXB0b3JQcm90b3MgY3JlYXRlZCBieSB0aGUKLS8vIHBy
b3RvY29sIGNvbXBpbGVyIChhcyB3ZWxsIGFzIG9uZXMgY3JlYXRlZCBieSBjYWxsaW5nCi0vLyBG
aWxlRGVzY3JpcHRvcjo6Q29weVRvKCkpIHdpbGwgYWx3YXlzIHVzZSBmdWxseS1xdWFsaWZpZWQg
bmFtZXMgZm9yIGFsbAotLy8gdHlwZXMuICBZb3Ugb25seSBuZWVkIHRvIHdvcnJ5IGlmIHlvdSBh
cmUgY29uc3RydWN0aW5nIEZpbGVEZXNjcmlwdG9yUHJvdG9zCi0vLyB5b3Vyc2VsZiwgb3IgYXJl
IGNhbGxpbmcgY29tcGlsZXI6OlBhcnNlciBkaXJlY3RseS4KLWNsYXNzIExJQlBST1RPQlVGX0VY
UE9SVCBTaW1wbGVEZXNjcmlwdG9yRGF0YWJhc2UgOiBwdWJsaWMgRGVzY3JpcHRvckRhdGFiYXNl
IHsKLSBwdWJsaWM6Ci0gIFNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZSgpOwotICB+U2ltcGxlRGVz
Y3JpcHRvckRhdGFiYXNlKCk7Ci0KLSAgLy8gQWRkcyB0aGUgRmlsZURlc2NyaXB0b3JQcm90byB0
byB0aGUgZGF0YWJhc2UsIG1ha2luZyBhIGNvcHkuICBUaGUgb2JqZWN0Ci0gIC8vIGNhbiBiZSBk
ZWxldGVkIGFmdGVyIEFkZCgpIHJldHVybnMuICBSZXR1cm5zIGZhbHNlIGlmIHRoZSBmaWxlIGNv
bmZsaWN0ZWQKLSAgLy8gd2l0aCBhIGZpbGUgYWxyZWFkeSBpbiB0aGUgZGF0YWJhc2UsIGluIHdo
aWNoIGNhc2UgYW4gZXJyb3Igd2lsbCBoYXZlCi0gIC8vIGJlZW4gd3JpdHRlbiB0byBHT09HTEVf
TE9HKEVSUk9SKS4KLSAgYm9vbCBBZGQoY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgZmlsZSk7
Ci0KLSAgLy8gQWRkcyB0aGUgRmlsZURlc2NyaXB0b3JQcm90byB0byB0aGUgZGF0YWJhc2UgYW5k
IHRha2VzIG93bmVyc2hpcCBvZiBpdC4KLSAgYm9vbCBBZGRBbmRPd24oY29uc3QgRmlsZURlc2Ny
aXB0b3JQcm90byogZmlsZSk7Ci0KLSAgLy8gaW1wbGVtZW50cyBEZXNjcmlwdG9yRGF0YWJhc2Ug
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgYm9vbCBGaW5kRmlsZUJ5TmFt
ZShjb25zdCBzdHJpbmcmIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgIEZpbGVEZXNj
cmlwdG9yUHJvdG8qIG91dHB1dCk7Ci0gIGJvb2wgRmluZEZpbGVDb250YWluaW5nU3ltYm9sKGNv
bnN0IHN0cmluZyYgc3ltYm9sX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZpbGVEZXNjcmlwdG9yUHJvdG8qIG91dHB1dCk7Ci0gIGJvb2wgRmluZEZpbGVDb250YWluaW5n
RXh0ZW5zaW9uKGNvbnN0IHN0cmluZyYgY29udGFpbmluZ190eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpOwotICBib29sIEZp
bmRBbGxFeHRlbnNpb25OdW1iZXJzKGNvbnN0IHN0cmluZyYgZXh0ZW5kZWVfdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8aW50Piogb3V0cHV0KTsKLQotIHByaXZh
dGU6Ci0gIC8vIFNvIHRoYXQgaXQgY2FuIHVzZSBEZXNjcmlwdG9ySW5kZXguCi0gIGZyaWVuZCBj
bGFzcyBFbmNvZGVkRGVzY3JpcHRvckRhdGFiYXNlOwotCi0gIC8vIEFuIGluZGV4IG1hcHBpbmcg
ZmlsZSBuYW1lcywgc3ltYm9sIG5hbWVzLCBhbmQgZXh0ZW5zaW9uIG51bWJlcnMgdG8KLSAgLy8g
c29tZSBzb3J0IG9mIHZhbHVlcy4KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlPgotICBjbGFz
cyBEZXNjcmlwdG9ySW5kZXggewotICAgcHVibGljOgotICAgIC8vIEhlbHBlcnMgdG8gcmVjdXJz
aXZlbHkgYWRkIHBhcnRpY3VsYXIgZGVzY3JpcHRvcnMgYW5kIGFsbCB0aGVpciBjb250ZW50cwot
ICAgIC8vIHRvIHRoZSBpbmRleC4KLSAgICBib29sIEFkZEZpbGUoY29uc3QgRmlsZURlc2NyaXB0
b3JQcm90byYgZmlsZSwKLSAgICAgICAgICAgICAgICAgVmFsdWUgdmFsdWUpOwotICAgIGJvb2wg
QWRkU3ltYm9sKGNvbnN0IHN0cmluZyYgbmFtZSwgVmFsdWUgdmFsdWUpOwotICAgIGJvb2wgQWRk
TmVzdGVkRXh0ZW5zaW9ucyhjb25zdCBEZXNjcmlwdG9yUHJvdG8mIG1lc3NhZ2VfdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgdmFsdWUpOwotICAgIGJvb2wgQWRkRXh0
ZW5zaW9uKGNvbnN0IEZpZWxkRGVzY3JpcHRvclByb3RvJiBmaWVsZCwKLSAgICAgICAgICAgICAg
ICAgICAgICBWYWx1ZSB2YWx1ZSk7Ci0KLSAgICBWYWx1ZSBGaW5kRmlsZShjb25zdCBzdHJpbmcm
IGZpbGVuYW1lKTsKLSAgICBWYWx1ZSBGaW5kU3ltYm9sKGNvbnN0IHN0cmluZyYgbmFtZSk7Ci0g
ICAgVmFsdWUgRmluZEV4dGVuc2lvbihjb25zdCBzdHJpbmcmIGNvbnRhaW5pbmdfdHlwZSwgaW50
IGZpZWxkX251bWJlcik7Ci0gICAgYm9vbCBGaW5kQWxsRXh0ZW5zaW9uTnVtYmVycyhjb25zdCBz
dHJpbmcmIGNvbnRhaW5pbmdfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZlY3RvcjxpbnQ+KiBvdXRwdXQpOwotCi0gICBwcml2YXRlOgotICAgIG1hcDxzdHJpbmcsIFZh
bHVlPiBieV9uYW1lXzsKLSAgICBtYXA8c3RyaW5nLCBWYWx1ZT4gYnlfc3ltYm9sXzsKLSAgICBt
YXA8cGFpcjxzdHJpbmcsIGludD4sIFZhbHVlPiBieV9leHRlbnNpb25fOwotCi0gICAgLy8gSW52
YXJpYW50OiAgVGhlIGJ5X3N5bWJvbF8gbWFwIGRvZXMgbm90IGNvbnRhaW4gYW55IHN5bWJvbHMg
d2hpY2ggYXJlCi0gICAgLy8gcHJlZml4ZXMgb2Ygb3RoZXIgc3ltYm9scyBpbiB0aGUgbWFwLiAg
Rm9yIGV4YW1wbGUsICJmb28uYmFyIiBpcyBhCi0gICAgLy8gcHJlZml4IG9mICJmb28uYmFyLmJh
eiIgKGJ1dCBpcyBub3QgYSBwcmVmaXggb2YgImZvby5iYXJiYXoiKS4KLSAgICAvLwotICAgIC8v
IFRoaXMgaW52YXJpYW50IGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgZ2l2ZW4g
YSBzeW1ib2wgbmFtZSwKLSAgICAvLyB3ZSBjYW4gZmluZCBhIGtleSBpbiB0aGUgbWFwIHdoaWNo
IGlzIGEgcHJlZml4IG9mIHRoZSBzeW1ib2wgaW4gTyhsZyBuKQotICAgIC8vIHRpbWUsIGFuZCB3
ZSBrbm93IHRoYXQgdGhlcmUgaXMgYXQgbW9zdCBvbmUgc3VjaCBrZXkuCi0gICAgLy8KLSAgICAv
LyBUaGUgcHJlZml4IGxvb2t1cCBhbGdvcml0aG0gd29ya3MgbGlrZSBzbzoKLSAgICAvLyAxKSBG
aW5kIHRoZSBsYXN0IGtleSBpbiB0aGUgbWFwIHdoaWNoIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0
byB0aGUKLSAgICAvLyAgICBzZWFyY2gga2V5LgotICAgIC8vIDIpIElmIHRoZSBmb3VuZCBrZXkg
aXMgYSBwcmVmaXggb2YgdGhlIHNlYXJjaCBrZXksIHRoZW4gcmV0dXJuIGl0LgotICAgIC8vICAg
IE90aGVyd2lzZSwgdGhlcmUgaXMgbm8gbWF0Y2guCi0gICAgLy8KLSAgICAvLyBJIGFtIHN1cmUg
dGhpcyBhbGdvcml0aG0gaGFzIGJlZW4gZGVzY3JpYmVkIGVsc2V3aGVyZSwgYnV0IHNpbmNlIEkK
LSAgICAvLyB3YXNuJ3QgYWJsZSB0byBmaW5kIGl0IHF1aWNrbHkgSSB3aWxsIGluc3RlYWQgcHJv
dmUgdGhhdCBpdCB3b3JrcwotICAgIC8vIG15c2VsZi4gIFRoZSBrZXkgdG8gdGhlIGFsZ29yaXRo
bSBpcyB0aGF0IGlmIGEgbWF0Y2ggZXhpc3RzLCBzdGVwICgxKQotICAgIC8vIHdpbGwgZmluZCBp
dC4gIFByb29mOgotICAgIC8vIDEpIERlZmluZSB0aGUgInNlYXJjaCBrZXkiIHRvIGJlIHRoZSBr
ZXkgd2UgYXJlIGxvb2tpbmcgZm9yLCB0aGUgImZvdW5kCi0gICAgLy8gICAga2V5IiB0byBiZSB0
aGUga2V5IGZvdW5kIGluIHN0ZXAgKDEpLCBhbmQgdGhlICJtYXRjaCBrZXkiIHRvIGJlIHRoZQot
ICAgIC8vICAgIGtleSB3aGljaCBhY3R1YWxseSBtYXRjaGVzIHRoZSBzZXJhY2gga2V5IChpLmUu
IHRoZSBrZXkgd2UncmUgdHJ5aW5nCi0gICAgLy8gICAgdG8gZmluZCkuCi0gICAgLy8gMikgVGhl
IGZvdW5kIGtleSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc2VhcmNoIGtleSBi
eQotICAgIC8vICAgIGRlZmluaXRpb24uCi0gICAgLy8gMykgVGhlIG1hdGNoIGtleSBtdXN0IGFs
c28gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZWFyY2gga2V5Ci0gICAgLy8gICAgKGJl
Y2F1c2UgaXQgaXMgYSBwcmVmaXgpLgotICAgIC8vIDQpIFRoZSBtYXRjaCBrZXkgY2Fubm90IGJl
IGdyZWF0ZXIgdGhhbiB0aGUgZm91bmQga2V5LCBiZWNhdXNlIGlmIGl0Ci0gICAgLy8gICAgd2Vy
ZSwgdGhlbiBzdGVwICgxKSBvZiB0aGUgYWxnb3JpdGhtIHdvdWxkIGhhdmUgcmV0dXJuZWQgdGhl
IG1hdGNoCi0gICAgLy8gICAga2V5IGluc3RlYWQgKHNpbmNlIGl0IGZpbmRzIHRoZSAqZ3JlYXRl
c3QqIGtleSB3aGljaCBpcyBsZXNzIHRoYW4gb3IKLSAgICAvLyAgICBlcXVhbCB0byB0aGUgc2Vh
cmNoIGtleSkuCi0gICAgLy8gNSkgVGhlcmVmb3JlLCB0aGUgZm91bmQga2V5IG11c3QgYmUgYmV0
d2VlbiB0aGUgbWF0Y2gga2V5IGFuZCB0aGUgc2VhcmNoCi0gICAgLy8gICAga2V5LCBpbmNsdXNp
dmUuCi0gICAgLy8gNikgU2luY2UgdGhlIHNlYXJjaCBrZXkgbXVzdCBiZSBhIHN1Yi1zeW1ib2wg
b2YgdGhlIG1hdGNoIGtleSwgaWYgaXQgaXMKLSAgICAvLyAgICBub3QgZXF1YWwgdG8gdGhlIG1h
dGNoIGtleSwgdGhlbiBzZWFyY2hfa2V5W21hdGNoX2tleS5zaXplKCldIG11c3QKLSAgICAvLyAg
ICBiZSAnLicuCi0gICAgLy8gNykgU2luY2UgJy4nIHNvcnRzIGJlZm9yZSBhbnkgb3RoZXIgY2hh
cmFjdGVyIHRoYXQgaXMgdmFsaWQgaW4gYSBzeW1ib2wKLSAgICAvLyAgICBuYW1lLCB0aGVuIGlm
IHRoZSBmb3VuZCBrZXkgaXMgbm90IGVxdWFsIHRvIHRoZSBtYXRjaCBrZXksIHRoZW4KLSAgICAv
LyAgICBmb3VuZF9rZXlbbWF0Y2hfa2V5LnNpemUoKV0gbXVzdCBhbHNvIGJlICcuJywgYmVjYXVz
ZSBhbnkgb3RoZXIgdmFsdWUKLSAgICAvLyAgICB3b3VsZCBtYWtlIGl0IHNvcnQgYWZ0ZXIgdGhl
IHNlYXJjaCBrZXkuCi0gICAgLy8gOCkgVGhlcmVmb3JlLCBpZiB0aGUgZm91bmQga2V5IGlzIG5v
dCBlcXVhbCB0byB0aGUgbWF0Y2gga2V5LCB0aGVuIHRoZQotICAgIC8vICAgIGZvdW5kIGtleSBt
dXN0IGJlIGEgc3ViLXN5bWJvbCBvZiB0aGUgbWF0Y2gga2V5LiAgSG93ZXZlciwgdGhpcyB3b3Vs
ZAotICAgIC8vICAgIGNvbnRyYWRpY3Qgb3VyIG1hcCBpbnZhcmlhbnQgd2hpY2ggc2F5cyB0aGF0
IG5vIHN5bWJvbCBpbiB0aGUgbWFwIGlzCi0gICAgLy8gICAgYSBzdWItc3ltYm9sIG9mIGFueSBv
dGhlci4KLSAgICAvLyA5KSBUaGVyZWZvcmUsIHRoZSBmb3VuZCBrZXkgbXVzdCBtYXRjaCB0aGUg
bWF0Y2gga2V5LgotICAgIC8vCi0gICAgLy8gVGhlIGFib3ZlIHByb29mIGFzc3VtZXMgdGhlIG1h
dGNoIGtleSBleGlzdHMuICBJbiB0aGUgY2FzZSB0aGF0IHRoZQotICAgIC8vIG1hdGNoIGtleSBk
b2VzIG5vdCBleGlzdCwgdGhlbiBzdGVwICgxKSB3aWxsIHJldHVybiBzb21lIG90aGVyIHN5bWJv
bC4KLSAgICAvLyBUaGF0IHN5bWJvbCBjYW5ub3QgYmUgYSBzdXBlci1zeW1ib2wgb2YgdGhlIHNl
YXJjaCBrZXkgc2luY2UgaWYgaXQgd2VyZSwKLSAgICAvLyB0aGVuIGl0IHdvdWxkIGJlIGEgbWF0
Y2gsIGFuZCB3ZSdyZSBhc3N1bWluZyB0aGUgbWF0Y2gga2V5IGRvZXNuJ3QgZXhpc3QuCi0gICAg
Ly8gVGhlcmVmb3JlLCBzdGVwIDIgd2lsbCBjb3JyZWN0bHkgcmV0dXJuIG5vIG1hdGNoLgotCi0g
ICAgLy8gRmluZCB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgYnlfc3ltYm9sXyBtYXAgd2hvc2Uga2V5
IGlzIGxlc3MgdGhhbiBvcgotICAgIC8vIGVxdWFsIHRvIHRoZSBnaXZlbiBuYW1lLgotICAgIHR5
cGVuYW1lIG1hcDxzdHJpbmcsIFZhbHVlPjo6aXRlcmF0b3IgRmluZExhc3RMZXNzT3JFcXVhbCgK
LSAgICAgICAgY29uc3Qgc3RyaW5nJiBuYW1lKTsKLQotICAgIC8vIFRydWUgaWYgZWl0aGVyIHRo
ZSBhcmd1bWVudHMgYXJlIGVxdWFsIG9yIHN1cGVyX3N5bWJvbCBpZGVudGlmaWVzIGEKLSAgICAv
LyBwYXJlbnQgc3ltYm9sIG9mIHN1Yl9zeW1ib2wgKGUuZy4gImZvby5iYXIiIGlzIGEgcGFyZW50
IG9mCi0gICAgLy8gImZvby5iYXIuYmF6IiwgYnV0IG5vdCBhIHBhcmVudCBvZiAiZm9vLmJhcmJh
eiIpLgotICAgIGJvb2wgSXNTdWJTeW1ib2woY29uc3Qgc3RyaW5nJiBzdWJfc3ltYm9sLCBjb25z
dCBzdHJpbmcmIHN1cGVyX3N5bWJvbCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW5kIG9u
bHkgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIG5hbWUgYXJlIGFscGhhbnVtZXJpY3MsCi0gICAg
Ly8gdW5kZXJzY29yZXMsIG9yIHBlcmlvZHMuCi0gICAgYm9vbCBWYWxpZGF0ZVN5bWJvbE5hbWUo
Y29uc3Qgc3RyaW5nJiBuYW1lKTsKLSAgfTsKLQotCi0gIERlc2NyaXB0b3JJbmRleDxjb25zdCBG
aWxlRGVzY3JpcHRvclByb3RvKj4gaW5kZXhfOwotICB2ZWN0b3I8Y29uc3QgRmlsZURlc2NyaXB0
b3JQcm90byo+IGZpbGVzX3RvX2RlbGV0ZV87Ci0KLSAgLy8gSWYgZmlsZSBpcyBub24tTlVMTCwg
Y29weSBpdCBpbnRvICpvdXRwdXQgYW5kIHJldHVybiB0cnVlLCBvdGhlcndpc2UKLSAgLy8gcmV0
dXJuIGZhbHNlLgotICBib29sIE1heWJlQ29weShjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvKiBm
aWxlLAotICAgICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpOwotCi0g
IEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTaW1wbGVEZXNjcmlwdG9yRGF0YWJh
c2UpOwotfTsKLQotLy8gVmVyeSBzaW1pbGFyIHRvIFNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZSwg
YnV0IHN0b3JlcyBhbGwgdGhlIGRlc2NyaXB0b3JzCi0vLyBhcyByYXcgYnl0ZXMgYW5kIGdlbmVy
YWxseSB0cmllcyB0byB1c2UgYXMgbGl0dGxlIG1lbW9yeSBhcyBwb3NzaWJsZS4KLS8vCi0vLyBU
aGUgc2FtZSBjYXZlYXRzIHJlZ2FyZGluZyBGaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24oKSBh
cHBseSBhcyB3aXRoCi0vLyBTaW1wbGVEZXNjcmlwdG9yRGF0YWJhc2UuCi1jbGFzcyBMSUJQUk9U
T0JVRl9FWFBPUlQgRW5jb2RlZERlc2NyaXB0b3JEYXRhYmFzZSA6IHB1YmxpYyBEZXNjcmlwdG9y
RGF0YWJhc2UgewotIHB1YmxpYzoKLSAgRW5jb2RlZERlc2NyaXB0b3JEYXRhYmFzZSgpOwotICB+
RW5jb2RlZERlc2NyaXB0b3JEYXRhYmFzZSgpOwotCi0gIC8vIEFkZHMgdGhlIEZpbGVEZXNjcmlw
dG9yUHJvdG8gdG8gdGhlIGRhdGFiYXNlLiAgVGhlIGRlc2NyaXB0b3IgaXMgcHJvdmlkZWQKLSAg
Ly8gaW4gZW5jb2RlZCBmb3JtLiAgVGhlIGRhdGFiYXNlIGRvZXMgbm90IG1ha2UgYSBjb3B5IG9m
IHRoZSBieXRlcywgbm9yCi0gIC8vIGRvZXMgaXQgdGFrZSBvd25lcnNoaXA7IGl0J3MgdXAgdG8g
dGhlIGNhbGxlciB0byBtYWtlIHN1cmUgdGhlIGJ5dGVzCi0gIC8vIHJlbWFpbiB2YWxpZCBmb3Ig
dGhlIGxpZmUgb2YgdGhlIGRhdGFiYXNlLiAgUmV0dXJucyBmYWxzZSBhbmQgbG9ncyBhbiBlcnJv
cgotICAvLyBpZiB0aGUgYnl0ZXMgYXJlIG5vdCBhIHZhbGlkIEZpbGVEZXNjcmlwdG9yUHJvdG8g
b3IgaWYgdGhlIGZpbGUgY29uZmxpY3RlZAotICAvLyB3aXRoIGEgZmlsZSBhbHJlYWR5IGluIHRo
ZSBkYXRhYmFzZS4KLSAgYm9vbCBBZGQoY29uc3Qgdm9pZCogZW5jb2RlZF9maWxlX2Rlc2NyaXB0
b3IsIGludCBzaXplKTsKLQotICAvLyBMaWtlIEFkZCgpLCBidXQgbWFrZXMgYSBjb3B5IG9mIHRo
ZSBkYXRhLCBzbyB0aGF0IHRoZSBjYWxsZXIgZG9lcyBub3QKLSAgLy8gbmVlZCB0byBrZWVwIGl0
IGFyb3VuZC4KLSAgYm9vbCBBZGRDb3B5KGNvbnN0IHZvaWQqIGVuY29kZWRfZmlsZV9kZXNjcmlw
dG9yLCBpbnQgc2l6ZSk7Ci0KLSAgLy8gTGlrZSBGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2wgYnV0
IHJldHVybnMgb25seSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KLSAgYm9vbCBGaW5kTmFtZU9mRmls
ZUNvbnRhaW5pbmdTeW1ib2woY29uc3Qgc3RyaW5nJiBzeW1ib2xfbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBvdXRwdXQpOwotCi0gIC8vIGltcGxl
bWVudHMgRGVzY3JpcHRvckRhdGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gIGJvb2wgRmluZEZpbGVCeU5hbWUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpOwotICBib29sIEZp
bmRGaWxlQ29udGFpbmluZ1N5bWJvbChjb25zdCBzdHJpbmcmIHN5bWJvbF9uYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpOwot
ICBib29sIEZpbmRGaWxlQ29udGFpbmluZ0V4dGVuc2lvbihjb25zdCBzdHJpbmcmIGNvbnRhaW5p
bmdfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpZWxkX251
bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQ
cm90byogb3V0cHV0KTsKLSAgYm9vbCBGaW5kQWxsRXh0ZW5zaW9uTnVtYmVycyhjb25zdCBzdHJp
bmcmIGV4dGVuZGVlX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9y
PGludD4qIG91dHB1dCk7Ci0KLSBwcml2YXRlOgotICBTaW1wbGVEZXNjcmlwdG9yRGF0YWJhc2U6
OkRlc2NyaXB0b3JJbmRleDxwYWlyPGNvbnN0IHZvaWQqLCBpbnQ+ID4gaW5kZXhfOwotICB2ZWN0
b3I8dm9pZCo+IGZpbGVzX3RvX2RlbGV0ZV87Ci0KLSAgLy8gSWYgZW5jb2RlZF9maWxlLmZpcnN0
IGlzIG5vbi1OVUxMLCBwYXJzZSB0aGUgZGF0YSBpbnRvICpvdXRwdXQgYW5kIHJldHVybgotICAv
LyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLgotICBib29sIE1heWJlUGFyc2UocGFpcjxj
b25zdCB2b2lkKiwgaW50PiBlbmNvZGVkX2ZpbGUsCi0gICAgICAgICAgICAgICAgICBGaWxlRGVz
Y3JpcHRvclByb3RvKiBvdXRwdXQpOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVD
VE9SUyhFbmNvZGVkRGVzY3JpcHRvckRhdGFiYXNlKTsKLX07Ci0KLS8vIEEgRGVzY3JpcHRvckRh
dGFiYXNlIHRoYXQgZmV0Y2hlcyBmaWxlcyBmcm9tIGEgZ2l2ZW4gcG9vbC4KLWNsYXNzIExJQlBS
T1RPQlVGX0VYUE9SVCBEZXNjcmlwdG9yUG9vbERhdGFiYXNlIDogcHVibGljIERlc2NyaXB0b3JE
YXRhYmFzZSB7Ci0gcHVibGljOgotICBleHBsaWNpdCBEZXNjcmlwdG9yUG9vbERhdGFiYXNlKGNv
bnN0IERlc2NyaXB0b3JQb29sJiBwb29sKTsKLSAgfkRlc2NyaXB0b3JQb29sRGF0YWJhc2UoKTsK
LQotICAvLyBpbXBsZW1lbnRzIERlc2NyaXB0b3JEYXRhYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICBib29sIEZpbmRGaWxlQnlOYW1lKGNvbnN0IHN0cmluZyYgZmls
ZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0
KTsKLSAgYm9vbCBGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woY29uc3Qgc3RyaW5nJiBzeW1ib2xf
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90
byogb3V0cHV0KTsKLSAgYm9vbCBGaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24oY29uc3Qgc3Ry
aW5nJiBjb250YWluaW5nX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBmaWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZp
bGVEZXNjcmlwdG9yUHJvdG8qIG91dHB1dCk7Ci0gIGJvb2wgRmluZEFsbEV4dGVuc2lvbk51bWJl
cnMoY29uc3Qgc3RyaW5nJiBleHRlbmRlZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlY3RvcjxpbnQ+KiBvdXRwdXQpOwotCi0gcHJpdmF0ZToKLSAgY29uc3QgRGVzY3Jp
cHRvclBvb2wmIHBvb2xfOwotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRGVz
Y3JpcHRvclBvb2xEYXRhYmFzZSk7Ci19OwotCi0vLyBBIERlc2NyaXB0b3JEYXRhYmFzZSB0aGF0
IHdyYXBzIHR3byBvciBtb3JlIG90aGVycy4gIEl0IGZpcnN0IHNlYXJjaGVzIHRoZQotLy8gZmly
c3QgZGF0YWJhc2UgYW5kLCBpZiB0aGF0IGZhaWxzLCB0cmllcyB0aGUgc2Vjb25kLCBhbmQgc28g
b24uCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgTWVyZ2VkRGVzY3JpcHRvckRhdGFiYXNlIDog
cHVibGljIERlc2NyaXB0b3JEYXRhYmFzZSB7Ci0gcHVibGljOgotICAvLyBNZXJnZSBqdXN0IHR3
byBkYXRhYmFzZXMuICBUaGUgc291cmNlcyByZW1haW4gcHJvcGVydHkgb2YgdGhlIGNhbGxlci4K
LSAgTWVyZ2VkRGVzY3JpcHRvckRhdGFiYXNlKERlc2NyaXB0b3JEYXRhYmFzZSogc291cmNlMSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JEYXRhYmFzZSogc291cmNlMik7
Ci0gIC8vIE1lcmdlIG1vcmUgdGhhbiB0d28gZGF0YWJhc2VzLiAgVGhlIHNvdXJjZXMgcmVtYWlu
IHByb3BlcnR5IG9mIHRoZSBjYWxsZXIuCi0gIC8vIFRoZSB2ZWN0b3IgbWF5IGJlIGRlbGV0ZWQg
YWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIHJldHVybnMgYnV0IHRoZQotICAvLyBEZXNjcmlwdG9yRGF0
YWJhc2VzIG5lZWQgdG8gc3RpY2sgYXJvdW5kLgotICBleHBsaWNpdCBNZXJnZWREZXNjcmlwdG9y
RGF0YWJhc2UoY29uc3QgdmVjdG9yPERlc2NyaXB0b3JEYXRhYmFzZSo+JiBzb3VyY2VzKTsKLSAg
fk1lcmdlZERlc2NyaXB0b3JEYXRhYmFzZSgpOwotCi0gIC8vIGltcGxlbWVudHMgRGVzY3JpcHRv
ckRhdGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wgRmlu
ZEZpbGVCeU5hbWUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpOwotICBib29sIEZpbmRGaWxlQ29udGFpbmlu
Z1N5bWJvbChjb25zdCBzdHJpbmcmIHN5bWJvbF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpOwotICBib29sIEZpbmRGaWxl
Q29udGFpbmluZ0V4dGVuc2lvbihjb25zdCBzdHJpbmcmIGNvbnRhaW5pbmdfdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpZWxkX251bWJlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KTsK
LSAgLy8gTWVyZ2VzIHRoZSByZXN1bHRzIG9mIGNhbGxpbmcgYWxsIGRhdGFiYXNlcy4gUmV0dXJu
cyB0cnVlIGlmZiBhbnkKLSAgLy8gb2YgdGhlIGRhdGFiYXNlcyByZXR1cm5lZCB0cnVlLgotICBi
b29sIEZpbmRBbGxFeHRlbnNpb25OdW1iZXJzKGNvbnN0IHN0cmluZyYgZXh0ZW5kZWVfdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8aW50Piogb3V0cHV0KTsKLQot
Ci0gcHJpdmF0ZToKLSAgdmVjdG9yPERlc2NyaXB0b3JEYXRhYmFzZSo+IHNvdXJjZXNfOwotICBH
T09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTWVyZ2VkRGVzY3JpcHRvckRhdGFiYXNl
KTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9ERVNDUklQVE9SX0RBVEFCQVNFX0hfXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfZGF0YWJhc2VfdW5pdHRl
c3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9kYXRhYmFzZV91bml0dGVzdC5j
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjMzgxNmUxNmM1N2IyZGJhYTUwYzZh
ODZjY2MxOGM0YTFlNzZlMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9kYXRhYmFzZV91bml0dGVzdC5j
YworKysgL2Rldi9udWxsCkBAIC0xLDc1NCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRh
KQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAg
U2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gVGhpcyBmaWxl
IG1ha2VzIGV4dGVuc2l2ZSB1c2Ugb2YgUkZDIDMwOTIuICA6KQotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX2RhdGFiYXNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3Jp
cHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2NvcGVkX3B0
ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBw
cm90b2J1ZiB7Ci1uYW1lc3BhY2UgewotCi1zdGF0aWMgdm9pZCBBZGRUb0RhdGFiYXNlKFNpbXBs
ZURlc2NyaXB0b3JEYXRhYmFzZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGZpbGVfdGV4dCkgewotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJv
dG87Ci0gIEVYUEVDVF9UUlVFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZyhmaWxlX3RleHQs
ICZmaWxlX3Byb3RvKSk7Ci0gIGRhdGFiYXNlLT5BZGQoZmlsZV9wcm90byk7Ci19Ci0KLXN0YXRp
YyB2b2lkIEV4cGVjdENvbnRhaW5zVHlwZShjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBwcm90
bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHR5cGVfbmFt
ZSkgewotICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvLm1lc3NhZ2VfdHlwZV9zaXplKCk7IGkr
KykgewotICAgIGlmIChwcm90by5tZXNzYWdlX3R5cGUoaSkubmFtZSgpID09IHR5cGVfbmFtZSkg
cmV0dXJuOwotICB9Ci0gIEFERF9GQUlMVVJFKCkgPDwgIlwiIiA8PCBwcm90by5uYW1lKCkKLSAg
ICAgICAgICAgICAgICA8PCAiXCIgZGlkIG5vdCBjb250YWluIGV4cGVjdGVkIHR5cGUgXCIiCi0g
ICAgICAgICAgICAgICAgPDwgdHlwZV9uYW1lIDw8ICJcIi4iOwotfQotCi0vLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0KLSNpZiBHVEVTVF9IQVNfUEFSQU1fVEVTVAotCi0vLyBTaW1wbGVEZXNjcmlwdG9yRGF0YWJh
c2UsIEVuY29kZWREZXNjcmlwdG9yRGF0YWJhc2UsIGFuZAotLy8gRGVzY3JpcHRvclBvb2xEYXRh
YmFzZSBjYWxsIGZvciB2ZXJ5IHNpbWlsYXIgdGVzdHMuICBJbnN0ZWFkIG9mIHdyaXRpbmcKLS8v
IHRocmVlIG5lYXJseS1pZGVudGljYWwgc2V0cyBvZiB0ZXN0cywgd2UgdXNlIHBhcmFtZXRlcml6
ZWQgdGVzdHMgdG8gYXBwbHkKLS8vIHRoZSBzYW1lIGNvZGUgdG8gYWxsIHRocmVlLgotCi0vLyBU
aGUgcGFyYW1ldGVyaXplZCB0ZXN0IHJ1bnMgYWdhaW5zdCBhIERlc2NyaXB0YXJEYXRhYmFzZVRl
c3RDYXNlLiAgV2UgaGF2ZQotLy8gaW1wbGVtZW50YXRpb25zIGZvciBlYWNoIG9mIHRoZSB0aHJl
ZSBjbGFzc2VzIHdlIHdhbnQgdG8gdGVzdC4KLWNsYXNzIERlc2NyaXB0b3JEYXRhYmFzZVRlc3RD
YXNlIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgfkRlc2NyaXB0b3JEYXRhYmFzZVRlc3RDYXNlKCkg
e30KLQotICB2aXJ0dWFsIERlc2NyaXB0b3JEYXRhYmFzZSogR2V0RGF0YWJhc2UoKSA9IDA7Ci0g
IHZpcnR1YWwgYm9vbCBBZGRUb0RhdGFiYXNlKGNvbnN0IEZpbGVEZXNjcmlwdG9yUHJvdG8mIGZp
bGUpID0gMDsKLX07Ci0KLS8vIEZhY3RvcnkgZnVuY3Rpb24gdHlwZS4KLXR5cGVkZWYgRGVzY3Jp
cHRvckRhdGFiYXNlVGVzdENhc2UqIERlc2NyaXB0b3JEYXRhYmFzZVRlc3RDYXNlRmFjdG9yeSgp
OwotCi0vLyBTcGVjaWFsaXphdGlvbiBmb3IgU2ltcGxlRGVzY3JpcHRvckRhdGFiYXNlLgotY2xh
c3MgU2ltcGxlRGVzY3JpcHRvckRhdGFiYXNlVGVzdENhc2UgOiBwdWJsaWMgRGVzY3JpcHRvckRh
dGFiYXNlVGVzdENhc2UgewotIHB1YmxpYzoKLSAgc3RhdGljIERlc2NyaXB0b3JEYXRhYmFzZVRl
c3RDYXNlKiBOZXcoKSB7Ci0gICAgcmV0dXJuIG5ldyBTaW1wbGVEZXNjcmlwdG9yRGF0YWJhc2VU
ZXN0Q2FzZTsKLSAgfQotCi0gIHZpcnR1YWwgflNpbXBsZURlc2NyaXB0b3JEYXRhYmFzZVRlc3RD
YXNlKCkge30KLQotICB2aXJ0dWFsIERlc2NyaXB0b3JEYXRhYmFzZSogR2V0RGF0YWJhc2UoKSB7
Ci0gICAgcmV0dXJuICZkYXRhYmFzZV87Ci0gIH0KLSAgdmlydHVhbCBib29sIEFkZFRvRGF0YWJh
c2UoY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgZmlsZSkgewotICAgIHJldHVybiBkYXRhYmFz
ZV8uQWRkKGZpbGUpOwotICB9Ci0KLSBwcml2YXRlOgotICBTaW1wbGVEZXNjcmlwdG9yRGF0YWJh
c2UgZGF0YWJhc2VfOwotfTsKLQotLy8gU3BlY2lhbGl6YXRpb24gZm9yIEVuY29kZWREZXNjcmlw
dG9yRGF0YWJhc2UuCi1jbGFzcyBFbmNvZGVkRGVzY3JpcHRvckRhdGFiYXNlVGVzdENhc2UgOiBw
dWJsaWMgRGVzY3JpcHRvckRhdGFiYXNlVGVzdENhc2UgewotIHB1YmxpYzoKLSAgc3RhdGljIERl
c2NyaXB0b3JEYXRhYmFzZVRlc3RDYXNlKiBOZXcoKSB7Ci0gICAgcmV0dXJuIG5ldyBFbmNvZGVk
RGVzY3JpcHRvckRhdGFiYXNlVGVzdENhc2U7Ci0gIH0KLQotICB2aXJ0dWFsIH5FbmNvZGVkRGVz
Y3JpcHRvckRhdGFiYXNlVGVzdENhc2UoKSB7fQotCi0gIHZpcnR1YWwgRGVzY3JpcHRvckRhdGFi
YXNlKiBHZXREYXRhYmFzZSgpIHsKLSAgICByZXR1cm4gJmRhdGFiYXNlXzsKLSAgfQotICB2aXJ0
dWFsIGJvb2wgQWRkVG9EYXRhYmFzZShjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBmaWxlKSB7
Ci0gICAgc3RyaW5nIGRhdGE7Ci0gICAgZmlsZS5TZXJpYWxpemVUb1N0cmluZygmZGF0YSk7Ci0g
ICAgcmV0dXJuIGRhdGFiYXNlXy5BZGRDb3B5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci0g
IH0KLQotIHByaXZhdGU6Ci0gIEVuY29kZWREZXNjcmlwdG9yRGF0YWJhc2UgZGF0YWJhc2VfOwot
fTsKLQotLy8gU3BlY2lhbGl6YXRpb24gZm9yIERlc2NyaXB0b3JQb29sRGF0YWJhc2UuCi1jbGFz
cyBEZXNjcmlwdG9yUG9vbERhdGFiYXNlVGVzdENhc2UgOiBwdWJsaWMgRGVzY3JpcHRvckRhdGFi
YXNlVGVzdENhc2UgewotIHB1YmxpYzoKLSAgc3RhdGljIERlc2NyaXB0b3JEYXRhYmFzZVRlc3RD
YXNlKiBOZXcoKSB7Ci0gICAgcmV0dXJuIG5ldyBFbmNvZGVkRGVzY3JpcHRvckRhdGFiYXNlVGVz
dENhc2U7Ci0gIH0KLQotICBEZXNjcmlwdG9yUG9vbERhdGFiYXNlVGVzdENhc2UoKSA6IGRhdGFi
YXNlXyhwb29sXykge30KLSAgdmlydHVhbCB+RGVzY3JpcHRvclBvb2xEYXRhYmFzZVRlc3RDYXNl
KCkge30KLQotICB2aXJ0dWFsIERlc2NyaXB0b3JEYXRhYmFzZSogR2V0RGF0YWJhc2UoKSB7Ci0g
ICAgcmV0dXJuICZkYXRhYmFzZV87Ci0gIH0KLSAgdmlydHVhbCBib29sIEFkZFRvRGF0YWJhc2Uo
Y29uc3QgRmlsZURlc2NyaXB0b3JQcm90byYgZmlsZSkgewotICAgIHJldHVybiBwb29sXy5CdWls
ZEZpbGUoZmlsZSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIERlc2NyaXB0b3JQb29sIHBvb2xfOwot
ICBEZXNjcmlwdG9yUG9vbERhdGFiYXNlIGRhdGFiYXNlXzsKLX07Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgRGVzY3JpcHRvckRhdGFiYXNlVGVzdAotICAgIDogcHVibGljIHRlc3Rpbmc6OlRl
c3RXaXRoUGFyYW08RGVzY3JpcHRvckRhdGFiYXNlVGVzdENhc2VGYWN0b3J5Kj4gewotIHByb3Rl
Y3RlZDoKLSAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIHRlc3RfY2FzZV8ucmVzZXQoR2V0
UGFyYW0oKSgpKTsKLSAgICBkYXRhYmFzZV8gPSB0ZXN0X2Nhc2VfLT5HZXREYXRhYmFzZSgpOwot
ICB9Ci0KLSAgdm9pZCBBZGRUb0RhdGFiYXNlKGNvbnN0IGNoYXIqIGZpbGVfZGVzY3JpcHRvcl90
ZXh0KSB7Ci0gICAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICAgIEVYUEVDVF9U
UlVFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZyhmaWxlX2Rlc2NyaXB0b3JfdGV4dCwgJmZp
bGVfcHJvdG8pKTsKLSAgICBFWFBFQ1RfVFJVRSh0ZXN0X2Nhc2VfLT5BZGRUb0RhdGFiYXNlKGZp
bGVfcHJvdG8pKTsKLSAgfQotCi0gIHZvaWQgQWRkVG9EYXRhYmFzZVdpdGhFcnJvcihjb25zdCBj
aGFyKiBmaWxlX2Rlc2NyaXB0b3JfdGV4dCkgewotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmls
ZV9wcm90bzsKLSAgICBFWFBFQ1RfVFJVRShUZXh0Rm9ybWF0OjpQYXJzZUZyb21TdHJpbmcoZmls
ZV9kZXNjcmlwdG9yX3RleHQsICZmaWxlX3Byb3RvKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHRlc3Rf
Y2FzZV8tPkFkZFRvRGF0YWJhc2UoZmlsZV9wcm90bykpOwotICB9Ci0KLSAgZ29vZ2xlOjpwcm90
b2J1Zjo6c2NvcGVkX3B0cjxEZXNjcmlwdG9yRGF0YWJhc2VUZXN0Q2FzZT4gdGVzdF9jYXNlXzsK
LSAgRGVzY3JpcHRvckRhdGFiYXNlKiBkYXRhYmFzZV87Ci19OwotCi1URVNUX1AoRGVzY3JpcHRv
ckRhdGFiYXNlVGVzdCwgRmluZEZpbGVCeU5hbWUpIHsKLSAgQWRkVG9EYXRhYmFzZSgKLSAgICAi
bmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6XCJGb29cIiB9
Iik7Ci0gIEFkZFRvRGF0YWJhc2UoCi0gICAgIm5hbWU6IFwiYmFyLnByb3RvXCIgIgotICAgICJt
ZXNzYWdlX3R5cGUgeyBuYW1lOlwiQmFyXCIgfSIpOwotCi0gIHsKLSAgICBGaWxlRGVzY3JpcHRv
clByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX1RSVUUoZGF0YWJhc2VfLT5GaW5kRmlsZUJ5TmFtZSgi
Zm9vLnByb3RvIiwgJmZpbGUpKTsKLSAgICBFWFBFQ1RfRVEoImZvby5wcm90byIsIGZpbGUubmFt
ZSgpKTsKLSAgICBFeHBlY3RDb250YWluc1R5cGUoZmlsZSwgIkZvbyIpOwotICB9Ci0KLSAgewot
ICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1RfVFJVRShkYXRhYmFzZV8t
PkZpbmRGaWxlQnlOYW1lKCJiYXIucHJvdG8iLCAmZmlsZSkpOwotICAgIEVYUEVDVF9FUSgiYmFy
LnByb3RvIiwgZmlsZS5uYW1lKCkpOwotICAgIEV4cGVjdENvbnRhaW5zVHlwZShmaWxlLCAiQmFy
Iik7Ci0gIH0KLQotICB7Ci0gICAgLy8gRmFpbHMgdG8gZmluZCB1bmRlZmluZWQgZmlsZXMuCi0g
ICAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlOwotICAgIEVYUEVDVF9GQUxTRShkYXRhYmFzZV8t
PkZpbmRGaWxlQnlOYW1lKCJiYXoucHJvdG8iLCAmZmlsZSkpOwotICB9Ci19Ci0KLVRFU1RfUChE
ZXNjcmlwdG9yRGF0YWJhc2VUZXN0LCBGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2wpIHsKLSAgQWRk
VG9EYXRhYmFzZSgKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlw
ZSB7ICIKLSAgICAiICBuYW1lOiBcIkZvb1wiICIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJxdXhc
IiB9IgotICAgICIgIG5lc3RlZF90eXBlIHsgbmFtZTogXCJHcmF1bHRcIiB9ICIKLSAgICAiICBl
bnVtX3R5cGUgeyBuYW1lOiBcIkdhcnBseVwiIH0gIgotICAgICJ9ICIKLSAgICAiZW51bV90eXBl
IHsgIgotICAgICIgIG5hbWU6IFwiV2FsZG9cIiAiCi0gICAgIiAgdmFsdWUgeyBuYW1lOlwiRlJF
RFwiIH0gIgotICAgICJ9ICIKLSAgICAiZXh0ZW5zaW9uIHsgbmFtZTogXCJwbHVnaFwiIH0gIgot
ICAgICJzZXJ2aWNlIHsgIgotICAgICIgIG5hbWU6IFwiWHl6enlcIiAiCi0gICAgIiAgbWV0aG9k
IHsgbmFtZTogXCJUaHVkXCIgfSAiCi0gICAgIn0iCi0gICAgKTsKLSAgQWRkVG9EYXRhYmFzZSgK
LSAgICAibmFtZTogXCJiYXIucHJvdG9cIiAiCi0gICAgInBhY2thZ2U6IFwiY29yZ2VcIiAiCi0g
ICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6IFwiQmFyXCIgfSIpOwotCi0gIHsKLSAgICBGaWxlRGVz
Y3JpcHRvclByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX1RSVUUoZGF0YWJhc2VfLT5GaW5kRmlsZUNv
bnRhaW5pbmdTeW1ib2woIkZvbyIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJmb28ucHJvdG8i
LCBmaWxlLm5hbWUoKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuIGZpbmQgZmllbGRzLgotICAg
IEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1RfVFJVRShkYXRhYmFzZV8tPkZp
bmRGaWxlQ29udGFpbmluZ1N5bWJvbCgiRm9vLnF1eCIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VR
KCJmb28ucHJvdG8iLCBmaWxlLm5hbWUoKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuIGZpbmQg
bmVzdGVkIHR5cGVzLgotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1Rf
VFJVRShkYXRhYmFzZV8tPkZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbCgiRm9vLkdyYXVsdCIsICZm
aWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJmb28ucHJvdG8iLCBmaWxlLm5hbWUoKSk7Ci0gIH0KLQot
ICB7Ci0gICAgLy8gQ2FuIGZpbmQgbmVzdGVkIGVudW1zLgotICAgIEZpbGVEZXNjcmlwdG9yUHJv
dG8gZmlsZTsKLSAgICBFWFBFQ1RfVFJVRShkYXRhYmFzZV8tPkZpbmRGaWxlQ29udGFpbmluZ1N5
bWJvbCgiRm9vLkdhcnBseSIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJmb28ucHJvdG8iLCBm
aWxlLm5hbWUoKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuIGZpbmQgZW51bSB0eXBlcy4KLSAg
ICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX1RSVUUoZGF0YWJhc2VfLT5G
aW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woIldhbGRvIiwgJmZpbGUpKTsKLSAgICBFWFBFQ1RfRVEo
ImZvby5wcm90byIsIGZpbGUubmFtZSgpKTsKLSAgfQotCi0gIHsKLSAgICAvLyBDYW4gZmluZCBl
bnVtIHZhbHVlcy4KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX1RS
VUUoZGF0YWJhc2VfLT5GaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woIldhbGRvLkZSRUQiLCAmZmls
ZSkpOwotICAgIEVYUEVDVF9FUSgiZm9vLnByb3RvIiwgZmlsZS5uYW1lKCkpOwotICB9Ci0KLSAg
ewotICAgIC8vIENhbiBmaW5kIGV4dGVuc2lvbnMuCi0gICAgRmlsZURlc2NyaXB0b3JQcm90byBm
aWxlOwotICAgIEVYUEVDVF9UUlVFKGRhdGFiYXNlXy0+RmluZEZpbGVDb250YWluaW5nU3ltYm9s
KCJwbHVnaCIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJmb28ucHJvdG8iLCBmaWxlLm5hbWUo
KSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuIGZpbmQgc2VydmljZXMuCi0gICAgRmlsZURlc2Ny
aXB0b3JQcm90byBmaWxlOwotICAgIEVYUEVDVF9UUlVFKGRhdGFiYXNlXy0+RmluZEZpbGVDb250
YWluaW5nU3ltYm9sKCJYeXp6eSIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJmb28ucHJvdG8i
LCBmaWxlLm5hbWUoKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuIGZpbmQgbWV0aG9kcy4KLSAg
ICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX1RSVUUoZGF0YWJhc2VfLT5G
aW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woIlh5enp5LlRodWQiLCAmZmlsZSkpOwotICAgIEVYUEVD
VF9FUSgiZm9vLnByb3RvIiwgZmlsZS5uYW1lKCkpOwotICB9Ci0KLSAgewotICAgIC8vIENhbiBm
aW5kIHRoaW5ncyBpbiBwYWNrYWdlcy4KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0g
ICAgRVhQRUNUX1RSVUUoZGF0YWJhc2VfLT5GaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woImNvcmdl
LkJhciIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJiYXIucHJvdG8iLCBmaWxlLm5hbWUoKSk7
Ci0gIH0KLQotICB7Ci0gICAgLy8gRmFpbHMgdG8gZmluZCB1bmRlZmluZWQgc3ltYm9scy4KLSAg
ICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX0ZBTFNFKGRhdGFiYXNlXy0+
RmluZEZpbGVDb250YWluaW5nU3ltYm9sKCJCYXoiLCAmZmlsZSkpOwotICB9Ci0KLSAgewotICAg
IC8vIE5hbWVzIG11c3QgYmUgZnVsbHktcXVhbGlmaWVkLgotICAgIEZpbGVEZXNjcmlwdG9yUHJv
dG8gZmlsZTsKLSAgICBFWFBFQ1RfRkFMU0UoZGF0YWJhc2VfLT5GaW5kRmlsZUNvbnRhaW5pbmdT
eW1ib2woIkJhciIsICZmaWxlKSk7Ci0gIH0KLX0KLQotVEVTVF9QKERlc2NyaXB0b3JEYXRhYmFz
ZVRlc3QsIEZpbmRGaWxlQ29udGFpbmluZ0V4dGVuc2lvbikgewotICBBZGRUb0RhdGFiYXNlKAot
ICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsgIgotICAgICIg
IG5hbWU6IFwiRm9vXCIgIgotICAgICIgIGV4dGVuc2lvbl9yYW5nZSB7IHN0YXJ0OiAxIGVuZDog
MTAwMCB9ICIKLSAgICAiICBleHRlbnNpb24geyBuYW1lOlwicXV4XCIgbGFiZWw6TEFCRUxfT1BU
SU9OQUwgdHlwZTpUWVBFX0lOVDMyIG51bWJlcjo1ICIKLSAgICAiICAgICAgICAgICAgICBleHRl
bmRlZTogXCIuRm9vXCIgfSIKLSAgICAifSIpOwotICBBZGRUb0RhdGFiYXNlKAotICAgICJuYW1l
OiBcImJhci5wcm90b1wiICIKLSAgICAicGFja2FnZTogXCJjb3JnZVwiICIKLSAgICAiZGVwZW5k
ZW5jeTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7ICIKLSAgICAiICBuYW1l
OiBcIkJhclwiICIKLSAgICAiICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDogMSBlbmQ6IDEwMDAg
fSAiCi0gICAgIn0gIgotICAgICJleHRlbnNpb24geyBuYW1lOlwiZ3JhdWx0XCIgZXh0ZW5kZWU6
IFwiLkZvb1wiICAgICAgIG51bWJlcjozMiB9ICIKLSAgICAiZXh0ZW5zaW9uIHsgbmFtZTpcImdh
cnBseVwiIGV4dGVuZGVlOiBcIi5jb3JnZS5CYXJcIiBudW1iZXI6NzAgfSAiCi0gICAgImV4dGVu
c2lvbiB7IG5hbWU6XCJ3YWxkb1wiICBleHRlbmRlZTogXCJCYXJcIiAgICAgICAgbnVtYmVyOjU2
IH0gIik7Ci0KLSAgewotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1Rf
VFJVRShkYXRhYmFzZV8tPkZpbmRGaWxlQ29udGFpbmluZ0V4dGVuc2lvbigiRm9vIiwgNSwgJmZp
bGUpKTsKLSAgICBFWFBFQ1RfRVEoImZvby5wcm90byIsIGZpbGUubmFtZSgpKTsKLSAgfQotCi0g
IHsKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX1RSVUUoZGF0YWJh
c2VfLT5GaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24oIkZvbyIsIDMyLCAmZmlsZSkpOwotICAg
IEVYUEVDVF9FUSgiYmFyLnByb3RvIiwgZmlsZS5uYW1lKCkpOwotICB9Ci0KLSAgewotICAgIC8v
IENhbiBmaW5kIGV4dGVuc2lvbnMgZm9yIHF1YWxpZmllZCB0eXBlIG5hbWVzLgotICAgIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1RfVFJVRShkYXRhYmFzZV8tPkZpbmRGaWxl
Q29udGFpbmluZ0V4dGVuc2lvbigiY29yZ2UuQmFyIiwgNzAsICZmaWxlKSk7Ci0gICAgRVhQRUNU
X0VRKCJiYXIucHJvdG8iLCBmaWxlLm5hbWUoKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuJ3Qg
ZmluZCBleHRlbnNpb25zIHdob3NlIGV4dGVuZGVlIHdhcyBub3QgZnVsbHktcXVhbGlmaWVkIGlu
IHRoZQotICAgIC8vIEZpbGVEZXNjcmlwdG9yUHJvdG8uCi0gICAgRmlsZURlc2NyaXB0b3JQcm90
byBmaWxlOwotICAgIEVYUEVDVF9GQUxTRShkYXRhYmFzZV8tPkZpbmRGaWxlQ29udGFpbmluZ0V4
dGVuc2lvbigiQmFyIiwgNTYsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKAotICAgICAgICBk
YXRhYmFzZV8tPkZpbmRGaWxlQ29udGFpbmluZ0V4dGVuc2lvbigiY29yZ2UuQmFyIiwgNTYsICZm
aWxlKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuJ3QgZmluZCBub24tZXhpc3RlbnQgZXh0ZW5z
aW9uIG51bWJlcnMuCi0gICAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlOwotICAgIEVYUEVDVF9G
QUxTRShkYXRhYmFzZV8tPkZpbmRGaWxlQ29udGFpbmluZ0V4dGVuc2lvbigiRm9vIiwgMTIsICZm
aWxlKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuJ3QgZmluZCBleHRlbnNpb25zIGZvciBub24t
ZXhpc3RlbnQgdHlwZXMuCi0gICAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlOwotICAgIEVYUEVD
VF9GQUxTRSgKLSAgICAgICAgZGF0YWJhc2VfLT5GaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24o
Ik5vU3VjaFR5cGUiLCA1LCAmZmlsZSkpOwotICB9Ci0KLSAgewotICAgIC8vIENhbid0IGZpbmQg
ZXh0ZW5zaW9ucyBmb3IgdW5xdWFsaWZpZWQgdHlwZSBuYW1lcy4KLSAgICBGaWxlRGVzY3JpcHRv
clByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX0ZBTFNFKGRhdGFiYXNlXy0+RmluZEZpbGVDb250YWlu
aW5nRXh0ZW5zaW9uKCJCYXIiLCA3MCwgJmZpbGUpKTsKLSAgfQotfQotCi1URVNUX1AoRGVzY3Jp
cHRvckRhdGFiYXNlVGVzdCwgRmluZEFsbEV4dGVuc2lvbk51bWJlcnMpIHsKLSAgQWRkVG9EYXRh
YmFzZSgKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7ICIK
LSAgICAiICBuYW1lOiBcIkZvb1wiICIKLSAgICAiICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDog
MSBlbmQ6IDEwMDAgfSAiCi0gICAgIiAgZXh0ZW5zaW9uIHsgbmFtZTpcInF1eFwiIGxhYmVsOkxB
QkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiBudW1iZXI6NSAiCi0gICAgIiAgICAgICAgICAg
ICAgZXh0ZW5kZWU6IFwiLkZvb1wiIH0iCi0gICAgIn0iKTsKLSAgQWRkVG9EYXRhYmFzZSgKLSAg
ICAibmFtZTogXCJiYXIucHJvdG9cIiAiCi0gICAgInBhY2thZ2U6IFwiY29yZ2VcIiAiCi0gICAg
ImRlcGVuZGVuY3k6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyAiCi0gICAg
IiAgbmFtZTogXCJCYXJcIiAiCi0gICAgIiAgZXh0ZW5zaW9uX3JhbmdlIHsgc3RhcnQ6IDEgZW5k
OiAxMDAwIH0gIgotICAgICJ9ICIKLSAgICAiZXh0ZW5zaW9uIHsgbmFtZTpcImdyYXVsdFwiIGV4
dGVuZGVlOiBcIi5Gb29cIiAgICAgICBudW1iZXI6MzIgfSAiCi0gICAgImV4dGVuc2lvbiB7IG5h
bWU6XCJnYXJwbHlcIiBleHRlbmRlZTogXCIuY29yZ2UuQmFyXCIgbnVtYmVyOjcwIH0gIgotICAg
ICJleHRlbnNpb24geyBuYW1lOlwid2FsZG9cIiAgZXh0ZW5kZWU6IFwiQmFyXCIgICAgICAgIG51
bWJlcjo1NiB9ICIpOwotCi0gIHsKLSAgICB2ZWN0b3I8aW50PiBudW1iZXJzOwotICAgIEVYUEVD
VF9UUlVFKGRhdGFiYXNlXy0+RmluZEFsbEV4dGVuc2lvbk51bWJlcnMoIkZvbyIsICZudW1iZXJz
KSk7Ci0gICAgQVNTRVJUX0VRKDIsIG51bWJlcnMuc2l6ZSgpKTsKLSAgICBzdGQ6OnNvcnQobnVt
YmVycy5iZWdpbigpLCBudW1iZXJzLmVuZCgpKTsKLSAgICBFWFBFQ1RfRVEoNSwgbnVtYmVyc1sw
XSk7Ci0gICAgRVhQRUNUX0VRKDMyLCBudW1iZXJzWzFdKTsKLSAgfQotCi0gIHsKLSAgICB2ZWN0
b3I8aW50PiBudW1iZXJzOwotICAgIEVYUEVDVF9UUlVFKGRhdGFiYXNlXy0+RmluZEFsbEV4dGVu
c2lvbk51bWJlcnMoImNvcmdlLkJhciIsICZudW1iZXJzKSk7Ci0gICAgLy8gTm90ZTogd29uJ3Qg
ZmluZCBleHRlbnNpb24gNTYgZHVlIHRvIHRoZSBuYW1lIG5vdCBiZWluZyBmdWxseSBxdWFsaWZp
ZWQuCi0gICAgQVNTRVJUX0VRKDEsIG51bWJlcnMuc2l6ZSgpKTsKLSAgICBFWFBFQ1RfRVEoNzAs
IG51bWJlcnNbMF0pOwotICB9Ci0KLSAgewotICAgIC8vIENhbid0IGZpbmQgZXh0ZW5zaW9ucyBm
b3Igbm9uLWV4aXN0ZW50IHR5cGVzLgotICAgIHZlY3RvcjxpbnQ+IG51bWJlcnM7Ci0gICAgRVhQ
RUNUX0ZBTFNFKGRhdGFiYXNlXy0+RmluZEFsbEV4dGVuc2lvbk51bWJlcnMoIk5vU3VjaFR5cGUi
LCAmbnVtYmVycykpOwotICB9Ci0KLSAgewotICAgIC8vIENhbid0IGZpbmQgZXh0ZW5zaW9ucyBm
b3IgdW5xdWFsaWZpZWQgdHlwZXMuCi0gICAgdmVjdG9yPGludD4gbnVtYmVyczsKLSAgICBFWFBF
Q1RfRkFMU0UoZGF0YWJhc2VfLT5GaW5kQWxsRXh0ZW5zaW9uTnVtYmVycygiQmFyIiwgJm51bWJl
cnMpKTsKLSAgfQotfQotCi1URVNUX1AoRGVzY3JpcHRvckRhdGFiYXNlVGVzdCwgQ29uZmxpY3Rp
bmdGaWxlRXJyb3IpIHsKLSAgQWRkVG9EYXRhYmFzZSgKLSAgICAibmFtZTogXCJmb28ucHJvdG9c
IiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7ICIKLSAgICAiICBuYW1lOiBcIkZvb1wiICIKLSAgICAi
fSIpOwotICBBZGRUb0RhdGFiYXNlV2l0aEVycm9yKAotICAgICJuYW1lOiBcImZvby5wcm90b1wi
ICIKLSAgICAibWVzc2FnZV90eXBlIHsgIgotICAgICIgIG5hbWU6IFwiQmFyXCIgIgotICAgICJ9
Iik7Ci19Ci0KLVRFU1RfUChEZXNjcmlwdG9yRGF0YWJhc2VUZXN0LCBDb25mbGljdGluZ1R5cGVF
cnJvcikgewotICBBZGRUb0RhdGFiYXNlKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAg
ICAibWVzc2FnZV90eXBlIHsgIgotICAgICIgIG5hbWU6IFwiRm9vXCIgIgotICAgICJ9Iik7Ci0g
IEFkZFRvRGF0YWJhc2VXaXRoRXJyb3IoCi0gICAgIm5hbWU6IFwiYmFyLnByb3RvXCIgIgotICAg
ICJtZXNzYWdlX3R5cGUgeyAiCi0gICAgIiAgbmFtZTogXCJGb29cIiAiCi0gICAgIn0iKTsKLX0K
LQotVEVTVF9QKERlc2NyaXB0b3JEYXRhYmFzZVRlc3QsIENvbmZsaWN0aW5nRXh0ZW5zaW9uRXJy
b3IpIHsKLSAgQWRkVG9EYXRhYmFzZSgKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAg
ImV4dGVuc2lvbiB7IG5hbWU6XCJmb29cIiBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVf
SU5UMzIgbnVtYmVyOjUgIgotICAgICIgICAgICAgICAgICBleHRlbmRlZTogXCIuRm9vXCIgfSIp
OwotICBBZGRUb0RhdGFiYXNlV2l0aEVycm9yKAotICAgICJuYW1lOiBcImJhci5wcm90b1wiICIK
LSAgICAiZXh0ZW5zaW9uIHsgbmFtZTpcImJhclwiIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6
VFlQRV9JTlQzMiBudW1iZXI6NSAiCi0gICAgIiAgICAgICAgICAgIGV4dGVuZGVlOiBcIi5Gb29c
IiB9Iik7Ci19Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKFNpbXBsZSwgRGVzY3JpcHRvckRh
dGFiYXNlVGVzdCwKLSAgICB0ZXN0aW5nOjpWYWx1ZXMoJlNpbXBsZURlc2NyaXB0b3JEYXRhYmFz
ZVRlc3RDYXNlOjpOZXcpKTsKLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKE1lbW9yeUNvbnNlcnZp
bmcsIERlc2NyaXB0b3JEYXRhYmFzZVRlc3QsCi0gICAgdGVzdGluZzo6VmFsdWVzKCZFbmNvZGVk
RGVzY3JpcHRvckRhdGFiYXNlVGVzdENhc2U6Ok5ldykpOwotSU5TVEFOVElBVEVfVEVTVF9DQVNF
X1AoUG9vbCwgRGVzY3JpcHRvckRhdGFiYXNlVGVzdCwKLSAgICB0ZXN0aW5nOjpWYWx1ZXMoJkRl
c2NyaXB0b3JQb29sRGF0YWJhc2VUZXN0Q2FzZTo6TmV3KSk7Ci0KLSNlbmRpZiAgLy8gR1RFU1Rf
SEFTX1BBUkFNX1RFU1QKLQotVEVTVChFbmNvZGVkRGVzY3JpcHRvckRhdGFiYXNlRXh0cmFUZXN0
LCBGaW5kTmFtZU9mRmlsZUNvbnRhaW5pbmdTeW1ib2wpIHsKLSAgLy8gQ3JlYXRlIHR3byBmaWxl
cywgb25lIG9mIHdoaWNoIGlzIGluIHR3byBwYXJ0cy4KLSAgRmlsZURlc2NyaXB0b3JQcm90byBm
aWxlMSwgZmlsZTJhLCBmaWxlMmI7Ci0gIGZpbGUxLnNldF9uYW1lKCJmb28ucHJvdG8iKTsKLSAg
ZmlsZTEuc2V0X3BhY2thZ2UoImZvbyIpOwotICBmaWxlMS5hZGRfbWVzc2FnZV90eXBlKCktPnNl
dF9uYW1lKCJGb28iKTsKLSAgZmlsZTJhLnNldF9uYW1lKCJiYXIucHJvdG8iKTsKLSAgZmlsZTJi
LnNldF9wYWNrYWdlKCJiYXIiKTsKLSAgZmlsZTJiLmFkZF9tZXNzYWdlX3R5cGUoKS0+c2V0X25h
bWUoIkJhciIpOwotCi0gIC8vIE5vcm1hbCBzZXJpYWxpemF0aW9uIGFsbG93cyBvdXIgb3B0aW1p
emF0aW9uIHRvIGtpY2sgaW4uCi0gIHN0cmluZyBkYXRhMSA9IGZpbGUxLlNlcmlhbGl6ZUFzU3Ry
aW5nKCk7Ci0KLSAgLy8gRm9yY2Ugb3V0LW9mLW9yZGVyIHNlcmlhbGl6YXRpb24gdG8gdGVzdCBz
bG93IHBhdGguCi0gIHN0cmluZyBkYXRhMiA9IGZpbGUyYi5TZXJpYWxpemVBc1N0cmluZygpICsg
ZmlsZTJhLlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci0KLSAgLy8gQ3JlYXRlIEVuY29kZWREZXNjcmlw
dG9yRGF0YWJhc2UgY29udGFpbmluZyBib3RoIGZpbGVzLgotICBFbmNvZGVkRGVzY3JpcHRvckRh
dGFiYXNlIGRiOwotICBkYi5BZGQoZGF0YTEuZGF0YSgpLCBkYXRhMS5zaXplKCkpOwotICBkYi5B
ZGQoZGF0YTIuZGF0YSgpLCBkYXRhMi5zaXplKCkpOwotCi0gIC8vIFRlc3QhCi0gIHN0cmluZyBm
aWxlbmFtZTsKLSAgRVhQRUNUX1RSVUUoZGIuRmluZE5hbWVPZkZpbGVDb250YWluaW5nU3ltYm9s
KCJmb28uRm9vIiwgJmZpbGVuYW1lKSk7Ci0gIEVYUEVDVF9FUSgiZm9vLnByb3RvIiwgZmlsZW5h
bWUpOwotICBFWFBFQ1RfVFJVRShkYi5GaW5kTmFtZU9mRmlsZUNvbnRhaW5pbmdTeW1ib2woImZv
by5Gb28uQmxhaCIsICZmaWxlbmFtZSkpOwotICBFWFBFQ1RfRVEoImZvby5wcm90byIsIGZpbGVu
YW1lKTsKLSAgRVhQRUNUX1RSVUUoZGIuRmluZE5hbWVPZkZpbGVDb250YWluaW5nU3ltYm9sKCJi
YXIuQmFyIiwgJmZpbGVuYW1lKSk7Ci0gIEVYUEVDVF9FUSgiYmFyLnByb3RvIiwgZmlsZW5hbWUp
OwotICBFWFBFQ1RfRkFMU0UoZGIuRmluZE5hbWVPZkZpbGVDb250YWluaW5nU3ltYm9sKCJmb28i
LCAmZmlsZW5hbWUpKTsKLSAgRVhQRUNUX0ZBTFNFKGRiLkZpbmROYW1lT2ZGaWxlQ29udGFpbmlu
Z1N5bWJvbCgiYmFyIiwgJmZpbGVuYW1lKSk7Ci0gIEVYUEVDVF9GQUxTRShkYi5GaW5kTmFtZU9m
RmlsZUNvbnRhaW5pbmdTeW1ib2woImJhei5CYXoiLCAmZmlsZW5hbWUpKTsKLX0KLQotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi1jbGFzcyBNZXJnZWREZXNjcmlwdG9yRGF0YWJhc2VUZXN0IDogcHVibGljIHRl
c3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgTWVyZ2VkRGVzY3JpcHRvckRhdGFiYXNlVGVz
dCgpCi0gICAgOiBmb3J3YXJkX21lcmdlZF8oJmRhdGFiYXNlMV8sICZkYXRhYmFzZTJfKSwKLSAg
ICAgIHJldmVyc2VfbWVyZ2VkXygmZGF0YWJhc2UyXywgJmRhdGFiYXNlMV8pIHt9Ci0KLSAgdmly
dHVhbCB2b2lkIFNldFVwKCkgewotICAgIEFkZFRvRGF0YWJhc2UoJmRhdGFiYXNlMV8sCi0gICAg
ICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgICAibWVzc2FnZV90eXBlIHsgbmFtZTpcIkZv
b1wiIGV4dGVuc2lvbl9yYW5nZSB7IHN0YXJ0OiAxIGVuZDogMTAwIH0gfSAiCi0gICAgICAiZXh0
ZW5zaW9uIHsgbmFtZTpcImZvb19leHRcIiBleHRlbmRlZTogXCIuRm9vXCIgbnVtYmVyOjMgIgot
ICAgICAgIiAgICAgICAgICAgIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiB9
ICIpOwotICAgIEFkZFRvRGF0YWJhc2UoJmRhdGFiYXNlMl8sCi0gICAgICAibmFtZTogXCJiYXIu
cHJvdG9cIiAiCi0gICAgICAibWVzc2FnZV90eXBlIHsgbmFtZTpcIkJhclwiIGV4dGVuc2lvbl9y
YW5nZSB7IHN0YXJ0OiAxIGVuZDogMTAwIH0gfSAiCi0gICAgICAiZXh0ZW5zaW9uIHsgbmFtZTpc
ImJhcl9leHRcIiBleHRlbmRlZTogXCIuQmFyXCIgbnVtYmVyOjUgIgotICAgICAgIiAgICAgICAg
ICAgIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiB9ICIpOwotCi0gICAgLy8g
YmF6LnByb3RvIGV4aXN0cyBpbiBib3RoIHBvb2xzLCB3aXRoIGRpZmZlcmVudCBkZWZpbml0aW9u
cy4KLSAgICBBZGRUb0RhdGFiYXNlKCZkYXRhYmFzZTFfLAotICAgICAgIm5hbWU6IFwiYmF6LnBy
b3RvXCIgIgotICAgICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6XCJCYXpcIiBleHRlbnNpb25fcmFu
Z2UgeyBzdGFydDogMSBlbmQ6IDEwMCB9IH0gIgotICAgICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6
XCJGcm9tUG9vbDFcIiB9ICIKLSAgICAgICJleHRlbnNpb24geyBuYW1lOlwiYmF6X2V4dFwiIGV4
dGVuZGVlOiBcIi5CYXpcIiBudW1iZXI6MTIgIgotICAgICAgIiAgICAgICAgICAgIGxhYmVsOkxB
QkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiB9ICIKLSAgICAgICJleHRlbnNpb24geyBuYW1l
OlwiZGF0YWJhc2UxX29ubHlfZXh0XCIgZXh0ZW5kZWU6IFwiLkJhelwiIG51bWJlcjoxMyAiCi0g
ICAgICAiICAgICAgICAgICAgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIH0g
Iik7Ci0gICAgQWRkVG9EYXRhYmFzZSgmZGF0YWJhc2UyXywKLSAgICAgICJuYW1lOiBcImJhei5w
cm90b1wiICIKLSAgICAgICJtZXNzYWdlX3R5cGUgeyBuYW1lOlwiQmF6XCIgZXh0ZW5zaW9uX3Jh
bmdlIHsgc3RhcnQ6IDEgZW5kOiAxMDAgfSB9ICIKLSAgICAgICJtZXNzYWdlX3R5cGUgeyBuYW1l
OlwiRnJvbVBvb2wyXCIgfSAiCi0gICAgICAiZXh0ZW5zaW9uIHsgbmFtZTpcImJhel9leHRcIiBl
eHRlbmRlZTogXCIuQmF6XCIgbnVtYmVyOjEyICIKLSAgICAgICIgICAgICAgICAgICBsYWJlbDpM
QUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgfSAiKTsKLSAgfQotCi0gIFNpbXBsZURlc2Ny
aXB0b3JEYXRhYmFzZSBkYXRhYmFzZTFfOwotICBTaW1wbGVEZXNjcmlwdG9yRGF0YWJhc2UgZGF0
YWJhc2UyXzsKLQotICBNZXJnZWREZXNjcmlwdG9yRGF0YWJhc2UgZm9yd2FyZF9tZXJnZWRfOwot
ICBNZXJnZWREZXNjcmlwdG9yRGF0YWJhc2UgcmV2ZXJzZV9tZXJnZWRfOwotfTsKLQotVEVTVF9G
KE1lcmdlZERlc2NyaXB0b3JEYXRhYmFzZVRlc3QsIEZpbmRGaWxlQnlOYW1lKSB7Ci0gIHsKLSAg
ICAvLyBDYW4gZmluZCBmaWxlIHRoYXQgaXMgb25seSBpbiBkYXRhYmFzZTFfLgotICAgIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1RfVFJVRShmb3J3YXJkX21lcmdlZF8uRmlu
ZEZpbGVCeU5hbWUoImZvby5wcm90byIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJmb28ucHJv
dG8iLCBmaWxlLm5hbWUoKSk7Ci0gICAgRXhwZWN0Q29udGFpbnNUeXBlKGZpbGUsICJGb28iKTsK
LSAgfQotCi0gIHsKLSAgICAvLyBDYW4gZmluZCBmaWxlIHRoYXQgaXMgb25seSBpbiBkYXRhYmFz
ZTJfLgotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1RfVFJVRShmb3J3
YXJkX21lcmdlZF8uRmluZEZpbGVCeU5hbWUoImJhci5wcm90byIsICZmaWxlKSk7Ci0gICAgRVhQ
RUNUX0VRKCJiYXIucHJvdG8iLCBmaWxlLm5hbWUoKSk7Ci0gICAgRXhwZWN0Q29udGFpbnNUeXBl
KGZpbGUsICJCYXIiKTsKLSAgfQotCi0gIHsKLSAgICAvLyBJbiBmb3J3YXJkX21lcmdlZF8sIGRh
dGFiYXNlMV8ncyBiYXoucHJvdG8gdGFrZXMgcHJlY2VkZW5jZS4KLSAgICBGaWxlRGVzY3JpcHRv
clByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX1RSVUUoZm9yd2FyZF9tZXJnZWRfLkZpbmRGaWxlQnlO
YW1lKCJiYXoucHJvdG8iLCAmZmlsZSkpOwotICAgIEVYUEVDVF9FUSgiYmF6LnByb3RvIiwgZmls
ZS5uYW1lKCkpOwotICAgIEV4cGVjdENvbnRhaW5zVHlwZShmaWxlLCAiRnJvbVBvb2wxIik7Ci0g
IH0KLQotICB7Ci0gICAgLy8gSW4gcmV2ZXJzZV9tZXJnZWRfLCBkYXRhYmFzZTJfJ3MgYmF6LnBy
b3RvIHRha2VzIHByZWNlZGVuY2UuCi0gICAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlOwotICAg
IEVYUEVDVF9UUlVFKHJldmVyc2VfbWVyZ2VkXy5GaW5kRmlsZUJ5TmFtZSgiYmF6LnByb3RvIiwg
JmZpbGUpKTsKLSAgICBFWFBFQ1RfRVEoImJhei5wcm90byIsIGZpbGUubmFtZSgpKTsKLSAgICBF
eHBlY3RDb250YWluc1R5cGUoZmlsZSwgIkZyb21Qb29sMiIpOwotICB9Ci0KLSAgewotICAgIC8v
IENhbid0IGZpbmQgbm9uLWV4aXN0ZW50IGZpbGUuCi0gICAgRmlsZURlc2NyaXB0b3JQcm90byBm
aWxlOwotICAgIEVYUEVDVF9GQUxTRShmb3J3YXJkX21lcmdlZF8uRmluZEZpbGVCeU5hbWUoIm5v
X3N1Y2gucHJvdG8iLCAmZmlsZSkpOwotICB9Ci19Ci0KLVRFU1RfRihNZXJnZWREZXNjcmlwdG9y
RGF0YWJhc2VUZXN0LCBGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2wpIHsKLSAgewotICAgIC8vIENh
biBmaW5kIGZpbGUgdGhhdCBpcyBvbmx5IGluIGRhdGFiYXNlMV8uCi0gICAgRmlsZURlc2NyaXB0
b3JQcm90byBmaWxlOwotICAgIEVYUEVDVF9UUlVFKGZvcndhcmRfbWVyZ2VkXy5GaW5kRmlsZUNv
bnRhaW5pbmdTeW1ib2woIkZvbyIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJmb28ucHJvdG8i
LCBmaWxlLm5hbWUoKSk7Ci0gICAgRXhwZWN0Q29udGFpbnNUeXBlKGZpbGUsICJGb28iKTsKLSAg
fQotCi0gIHsKLSAgICAvLyBDYW4gZmluZCBmaWxlIHRoYXQgaXMgb25seSBpbiBkYXRhYmFzZTJf
LgotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1RfVFJVRShmb3J3YXJk
X21lcmdlZF8uRmluZEZpbGVDb250YWluaW5nU3ltYm9sKCJCYXIiLCAmZmlsZSkpOwotICAgIEVY
UEVDVF9FUSgiYmFyLnByb3RvIiwgZmlsZS5uYW1lKCkpOwotICAgIEV4cGVjdENvbnRhaW5zVHlw
ZShmaWxlLCAiQmFyIik7Ci0gIH0KLQotICB7Ci0gICAgLy8gSW4gZm9yd2FyZF9tZXJnZWRfLCBk
YXRhYmFzZTFfJ3MgYmF6LnByb3RvIHRha2VzIHByZWNlZGVuY2UuCi0gICAgRmlsZURlc2NyaXB0
b3JQcm90byBmaWxlOwotICAgIEVYUEVDVF9UUlVFKGZvcndhcmRfbWVyZ2VkXy5GaW5kRmlsZUNv
bnRhaW5pbmdTeW1ib2woIkJheiIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJiYXoucHJvdG8i
LCBmaWxlLm5hbWUoKSk7Ci0gICAgRXhwZWN0Q29udGFpbnNUeXBlKGZpbGUsICJGcm9tUG9vbDEi
KTsKLSAgfQotCi0gIHsKLSAgICAvLyBJbiByZXZlcnNlX21lcmdlZF8sIGRhdGFiYXNlMl8ncyBi
YXoucHJvdG8gdGFrZXMgcHJlY2VkZW5jZS4KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7
Ci0gICAgRVhQRUNUX1RSVUUocmV2ZXJzZV9tZXJnZWRfLkZpbmRGaWxlQ29udGFpbmluZ1N5bWJv
bCgiQmF6IiwgJmZpbGUpKTsKLSAgICBFWFBFQ1RfRVEoImJhei5wcm90byIsIGZpbGUubmFtZSgp
KTsKLSAgICBFeHBlY3RDb250YWluc1R5cGUoZmlsZSwgIkZyb21Qb29sMiIpOwotICB9Ci0KLSAg
ewotICAgIC8vIEZyb21Qb29sMSBvbmx5IHNob3dzIHVwIGluIGZvcndhcmRfbWVyZ2VkXyBiZWNh
dXNlIGl0IGlzIG1hc2tlZCBieQotICAgIC8vIGRhdGFiYXNlMl8ncyBiYXoucHJvdG8gaW4gcmV2
ZXJzZV9tZXJnZWRfLgotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1Rf
VFJVRShmb3J3YXJkX21lcmdlZF8uRmluZEZpbGVDb250YWluaW5nU3ltYm9sKCJGcm9tUG9vbDEi
LCAmZmlsZSkpOwotICAgIEVYUEVDVF9GQUxTRShyZXZlcnNlX21lcmdlZF8uRmluZEZpbGVDb250
YWluaW5nU3ltYm9sKCJGcm9tUG9vbDEiLCAmZmlsZSkpOwotICB9Ci0KLSAgewotICAgIC8vIENh
bid0IGZpbmQgbm9uLWV4aXN0ZW50IHN5bWJvbC4KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZp
bGU7Ci0gICAgRVhQRUNUX0ZBTFNFKAotICAgICAgZm9yd2FyZF9tZXJnZWRfLkZpbmRGaWxlQ29u
dGFpbmluZ1N5bWJvbCgiTm9TdWNoVHlwZSIsICZmaWxlKSk7Ci0gIH0KLX0KLQotVEVTVF9GKE1l
cmdlZERlc2NyaXB0b3JEYXRhYmFzZVRlc3QsIEZpbmRGaWxlQ29udGFpbmluZ0V4dGVuc2lvbikg
ewotICB7Ci0gICAgLy8gQ2FuIGZpbmQgZmlsZSB0aGF0IGlzIG9ubHkgaW4gZGF0YWJhc2UxXy4K
LSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0gICAgRVhQRUNUX1RSVUUoCi0gICAgICBm
b3J3YXJkX21lcmdlZF8uRmluZEZpbGVDb250YWluaW5nRXh0ZW5zaW9uKCJGb28iLCAzLCAmZmls
ZSkpOwotICAgIEVYUEVDVF9FUSgiZm9vLnByb3RvIiwgZmlsZS5uYW1lKCkpOwotICAgIEV4cGVj
dENvbnRhaW5zVHlwZShmaWxlLCAiRm9vIik7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuIGZpbmQg
ZmlsZSB0aGF0IGlzIG9ubHkgaW4gZGF0YWJhc2UyXy4KLSAgICBGaWxlRGVzY3JpcHRvclByb3Rv
IGZpbGU7Ci0gICAgRVhQRUNUX1RSVUUoCi0gICAgICBmb3J3YXJkX21lcmdlZF8uRmluZEZpbGVD
b250YWluaW5nRXh0ZW5zaW9uKCJCYXIiLCA1LCAmZmlsZSkpOwotICAgIEVYUEVDVF9FUSgiYmFy
LnByb3RvIiwgZmlsZS5uYW1lKCkpOwotICAgIEV4cGVjdENvbnRhaW5zVHlwZShmaWxlLCAiQmFy
Iik7Ci0gIH0KLQotICB7Ci0gICAgLy8gSW4gZm9yd2FyZF9tZXJnZWRfLCBkYXRhYmFzZTFfJ3Mg
YmF6LnByb3RvIHRha2VzIHByZWNlZGVuY2UuCi0gICAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxl
OwotICAgIEVYUEVDVF9UUlVFKAotICAgICAgZm9yd2FyZF9tZXJnZWRfLkZpbmRGaWxlQ29udGFp
bmluZ0V4dGVuc2lvbigiQmF6IiwgMTIsICZmaWxlKSk7Ci0gICAgRVhQRUNUX0VRKCJiYXoucHJv
dG8iLCBmaWxlLm5hbWUoKSk7Ci0gICAgRXhwZWN0Q29udGFpbnNUeXBlKGZpbGUsICJGcm9tUG9v
bDEiKTsKLSAgfQotCi0gIHsKLSAgICAvLyBJbiByZXZlcnNlX21lcmdlZF8sIGRhdGFiYXNlMl8n
cyBiYXoucHJvdG8gdGFrZXMgcHJlY2VkZW5jZS4KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZp
bGU7Ci0gICAgRVhQRUNUX1RSVUUoCi0gICAgICByZXZlcnNlX21lcmdlZF8uRmluZEZpbGVDb250
YWluaW5nRXh0ZW5zaW9uKCJCYXoiLCAxMiwgJmZpbGUpKTsKLSAgICBFWFBFQ1RfRVEoImJhei5w
cm90byIsIGZpbGUubmFtZSgpKTsKLSAgICBFeHBlY3RDb250YWluc1R5cGUoZmlsZSwgIkZyb21Q
b29sMiIpOwotICB9Ci0KLSAgewotICAgIC8vIEJheidzIGV4dGVuc2lvbiAxMyBvbmx5IHNob3dz
IHVwIGluIGZvcndhcmRfbWVyZ2VkXyBiZWNhdXNlIGl0IGlzCi0gICAgLy8gbWFza2VkIGJ5IGRh
dGFiYXNlMl8ncyBiYXoucHJvdG8gaW4gcmV2ZXJzZV9tZXJnZWRfLgotICAgIEZpbGVEZXNjcmlw
dG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1RfVFJVRShmb3J3YXJkX21lcmdlZF8uRmluZEZpbGVD
b250YWluaW5nRXh0ZW5zaW9uKCJCYXoiLCAxMywgJmZpbGUpKTsKLSAgICBFWFBFQ1RfRkFMU0Uo
cmV2ZXJzZV9tZXJnZWRfLkZpbmRGaWxlQ29udGFpbmluZ0V4dGVuc2lvbigiQmF6IiwgMTMsICZm
aWxlKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuJ3QgZmluZCBub24tZXhpc3RlbnQgZXh0ZW5z
aW9uLgotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBFWFBFQ1RfRkFMU0UoCi0g
ICAgICBmb3J3YXJkX21lcmdlZF8uRmluZEZpbGVDb250YWluaW5nRXh0ZW5zaW9uKCJGb28iLCA2
LCAmZmlsZSkpOwotICB9Ci19Ci0KLVRFU1RfRihNZXJnZWREZXNjcmlwdG9yRGF0YWJhc2VUZXN0
LCBGaW5kQWxsRXh0ZW5zaW9uTnVtYmVycykgewotICB7Ci0gICAgLy8gTWVzc2FnZSBvbmx5IGhh
cyBleHRlbnNpb24gaW4gZGF0YWJhc2UxXwotICAgIHZlY3RvcjxpbnQ+IG51bWJlcnM7Ci0gICAg
RVhQRUNUX1RSVUUoZm9yd2FyZF9tZXJnZWRfLkZpbmRBbGxFeHRlbnNpb25OdW1iZXJzKCJGb28i
LCAmbnVtYmVycykpOwotICAgIEFTU0VSVF9FUSgxLCBudW1iZXJzLnNpemUoKSk7Ci0gICAgRVhQ
RUNUX0VRKDMsIG51bWJlcnNbMF0pOwotICB9Ci0KLSAgewotICAgIC8vIE1lc3NhZ2Ugb25seSBo
YXMgZXh0ZW5zaW9uIGluIGRhdGFiYXNlMl8KLSAgICB2ZWN0b3I8aW50PiBudW1iZXJzOwotICAg
IEVYUEVDVF9UUlVFKGZvcndhcmRfbWVyZ2VkXy5GaW5kQWxsRXh0ZW5zaW9uTnVtYmVycygiQmFy
IiwgJm51bWJlcnMpKTsKLSAgICBBU1NFUlRfRVEoMSwgbnVtYmVycy5zaXplKCkpOwotICAgIEVY
UEVDVF9FUSg1LCBudW1iZXJzWzBdKTsKLSAgfQotCi0gIHsKLSAgICAvLyBNZXJnZSByZXN1bHRz
IGZyb20gdGhlIHR3byBkYXRhYmFzZXMuCi0gICAgdmVjdG9yPGludD4gbnVtYmVyczsKLSAgICBF
WFBFQ1RfVFJVRShmb3J3YXJkX21lcmdlZF8uRmluZEFsbEV4dGVuc2lvbk51bWJlcnMoIkJheiIs
ICZudW1iZXJzKSk7Ci0gICAgQVNTRVJUX0VRKDIsIG51bWJlcnMuc2l6ZSgpKTsKLSAgICBzdGQ6
OnNvcnQobnVtYmVycy5iZWdpbigpLCBudW1iZXJzLmVuZCgpKTsKLSAgICBFWFBFQ1RfRVEoMTIs
IG51bWJlcnNbMF0pOwotICAgIEVYUEVDVF9FUSgxMywgbnVtYmVyc1sxXSk7Ci0gIH0KLQotICB7
Ci0gICAgdmVjdG9yPGludD4gbnVtYmVyczsKLSAgICBFWFBFQ1RfVFJVRShyZXZlcnNlX21lcmdl
ZF8uRmluZEFsbEV4dGVuc2lvbk51bWJlcnMoIkJheiIsICZudW1iZXJzKSk7Ci0gICAgQVNTRVJU
X0VRKDIsIG51bWJlcnMuc2l6ZSgpKTsKLSAgICBzdGQ6OnNvcnQobnVtYmVycy5iZWdpbigpLCBu
dW1iZXJzLmVuZCgpKTsKLSAgICBFWFBFQ1RfRVEoMTIsIG51bWJlcnNbMF0pOwotICAgIEVYUEVD
VF9FUSgxMywgbnVtYmVyc1sxXSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2FuJ3QgZmluZCBleHRl
bnNpb25zIGZvciBhIG5vbi1leGlzdGVudCBtZXNzYWdlLgotICAgIHZlY3RvcjxpbnQ+IG51bWJl
cnM7Ci0gICAgRVhQRUNUX0ZBTFNFKHJldmVyc2VfbWVyZ2VkXy5GaW5kQWxsRXh0ZW5zaW9uTnVt
YmVycygiQmxhaCIsICZudW1iZXJzKSk7Ci0gIH0KLX0KLQotfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl91bml0dGVzdC5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmOTM3YjllYWMyNTNjNGI1NjQyNmIwYWM0NDFmYTYwZWNjY2M5NDZlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9kZXNjcmlwdG9yX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjYxMyAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBr
ZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFBy
b3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4s
IGFuZCBvdGhlcnMuCi0vLwotLy8gVGhpcyBmaWxlIG1ha2VzIGV4dGVuc2l2ZSB1c2Ugb2YgUkZD
IDMwOTIuICA6KQotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVEX1BUUl9ICi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNlbmRpZgotI2lu
Y2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9jb21waWxlci9pbXBv
cnRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wYi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9jdXN0b21fb3B0aW9ucy5wYi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGwuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3Jf
ZGF0YWJhc2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZHluYW1pY19tZXNzYWdlLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3RleHRfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvc3Vic3RpdHV0ZS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Nv
bW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvc2NvcGVkX3B0ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90
ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLS8vIENhbid0IHVzZSBhbiBhbm9u
eW1vdXMgbmFtZXNwYWNlIGhlcmUgZHVlIHRvIGJyb2tlbm5lc3Mgb2YgVHJ1NjQgY29tcGlsZXIu
Ci1uYW1lc3BhY2UgZGVzY3JpcHRvcl91bml0dGVzdCB7Ci0KLS8vIFNvbWUgaGVscGVycyB0byBt
YWtlIGFzc2VtYmxpbmcgZGVzY3JpcHRvcnMgZmFzdGVyLgotRGVzY3JpcHRvclByb3RvKiBBZGRN
ZXNzYWdlKEZpbGVEZXNjcmlwdG9yUHJvdG8qIGZpbGUsIGNvbnN0IHN0cmluZyYgbmFtZSkgewot
ICBEZXNjcmlwdG9yUHJvdG8qIHJlc3VsdCA9IGZpbGUtPmFkZF9tZXNzYWdlX3R5cGUoKTsKLSAg
cmVzdWx0LT5zZXRfbmFtZShuYW1lKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRGVzY3JpcHRv
clByb3RvKiBBZGROZXN0ZWRNZXNzYWdlKERlc2NyaXB0b3JQcm90byogcGFyZW50LCBjb25zdCBz
dHJpbmcmIG5hbWUpIHsKLSAgRGVzY3JpcHRvclByb3RvKiByZXN1bHQgPSBwYXJlbnQtPmFkZF9u
ZXN0ZWRfdHlwZSgpOwotICByZXN1bHQtPnNldF9uYW1lKG5hbWUpOwotICByZXR1cm4gcmVzdWx0
OwotfQotCi1FbnVtRGVzY3JpcHRvclByb3RvKiBBZGRFbnVtKEZpbGVEZXNjcmlwdG9yUHJvdG8q
IGZpbGUsIGNvbnN0IHN0cmluZyYgbmFtZSkgewotICBFbnVtRGVzY3JpcHRvclByb3RvKiByZXN1
bHQgPSBmaWxlLT5hZGRfZW51bV90eXBlKCk7Ci0gIHJlc3VsdC0+c2V0X25hbWUobmFtZSk7Ci0g
IHJldHVybiByZXN1bHQ7Ci19Ci0KLUVudW1EZXNjcmlwdG9yUHJvdG8qIEFkZE5lc3RlZEVudW0o
RGVzY3JpcHRvclByb3RvKiBwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0cmluZyYgbmFtZSkgewotICBFbnVtRGVzY3JpcHRvclByb3RvKiByZXN1bHQg
PSBwYXJlbnQtPmFkZF9lbnVtX3R5cGUoKTsKLSAgcmVzdWx0LT5zZXRfbmFtZShuYW1lKTsKLSAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotU2VydmljZURlc2NyaXB0b3JQcm90byogQWRkU2VydmljZShG
aWxlRGVzY3JpcHRvclByb3RvKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdHJpbmcmIG5hbWUpIHsKLSAgU2VydmljZURlc2NyaXB0b3JQcm90byogcmVz
dWx0ID0gZmlsZS0+YWRkX3NlcnZpY2UoKTsKLSAgcmVzdWx0LT5zZXRfbmFtZShuYW1lKTsKLSAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotRmllbGREZXNjcmlwdG9yUHJvdG8qIEFkZEZpZWxkKERlc2Ny
aXB0b3JQcm90byogcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0cmluZyYgbmFtZSwgaW50IG51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGaWVsZERlc2NyaXB0b3JQcm90bzo6TGFiZWwgbGFiZWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlR5cGUgdHlwZSkgewotICBGaWVsZERl
c2NyaXB0b3JQcm90byogcmVzdWx0ID0gcGFyZW50LT5hZGRfZmllbGQoKTsKLSAgcmVzdWx0LT5z
ZXRfbmFtZShuYW1lKTsKLSAgcmVzdWx0LT5zZXRfbnVtYmVyKG51bWJlcik7Ci0gIHJlc3VsdC0+
c2V0X2xhYmVsKGxhYmVsKTsKLSAgcmVzdWx0LT5zZXRfdHlwZSh0eXBlKTsKLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotRmllbGREZXNjcmlwdG9yUHJvdG8qIEFkZEV4dGVuc2lvbihGaWxlRGVzY3Jp
cHRvclByb3RvKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdHJpbmcmIGV4dGVuZGVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdHJpbmcmIG5hbWUsIGludCBudW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMYWJlbCBsYWJlbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlR5cGUgdHlwZSkg
ewotICBGaWVsZERlc2NyaXB0b3JQcm90byogcmVzdWx0ID0gZmlsZS0+YWRkX2V4dGVuc2lvbigp
OwotICByZXN1bHQtPnNldF9uYW1lKG5hbWUpOwotICByZXN1bHQtPnNldF9udW1iZXIobnVtYmVy
KTsKLSAgcmVzdWx0LT5zZXRfbGFiZWwobGFiZWwpOwotICByZXN1bHQtPnNldF90eXBlKHR5cGUp
OwotICByZXN1bHQtPnNldF9leHRlbmRlZShleHRlbmRlZSk7Ci0gIHJldHVybiByZXN1bHQ7Ci19
Ci0KLUZpZWxkRGVzY3JpcHRvclByb3RvKiBBZGROZXN0ZWRFeHRlbnNpb24oRGVzY3JpcHRvclBy
b3RvKiBwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cmluZyYgZXh0ZW5kZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0cmluZyYgbmFtZSwgaW50IG51bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxhYmVsIGxhYmVs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0
b3JQcm90bzo6VHlwZSB0eXBlKSB7Ci0gIEZpZWxkRGVzY3JpcHRvclByb3RvKiByZXN1bHQgPSBw
YXJlbnQtPmFkZF9leHRlbnNpb24oKTsKLSAgcmVzdWx0LT5zZXRfbmFtZShuYW1lKTsKLSAgcmVz
dWx0LT5zZXRfbnVtYmVyKG51bWJlcik7Ci0gIHJlc3VsdC0+c2V0X2xhYmVsKGxhYmVsKTsKLSAg
cmVzdWx0LT5zZXRfdHlwZSh0eXBlKTsKLSAgcmVzdWx0LT5zZXRfZXh0ZW5kZWUoZXh0ZW5kZWUp
OwotICByZXR1cm4gcmVzdWx0OwotfQotCi1EZXNjcmlwdG9yUHJvdG86OkV4dGVuc2lvblJhbmdl
KiBBZGRFeHRlbnNpb25SYW5nZShEZXNjcmlwdG9yUHJvdG8qIHBhcmVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgaW50IGVu
ZCkgewotICBEZXNjcmlwdG9yUHJvdG86OkV4dGVuc2lvblJhbmdlKiByZXN1bHQgPSBwYXJlbnQt
PmFkZF9leHRlbnNpb25fcmFuZ2UoKTsKLSAgcmVzdWx0LT5zZXRfc3RhcnQoc3RhcnQpOwotICBy
ZXN1bHQtPnNldF9lbmQoZW5kKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRGVzY3JpcHRvclBy
b3RvOjpSZXNlcnZlZFJhbmdlKiBBZGRSZXNlcnZlZFJhbmdlKERlc2NyaXB0b3JQcm90byogcGFy
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBzdGFydCwgaW50IGVuZCkgewotICBEZXNjcmlwdG9yUHJvdG86OlJlc2VydmVkUmFuZ2UqIHJl
c3VsdCA9IHBhcmVudC0+YWRkX3Jlc2VydmVkX3JhbmdlKCk7Ci0gIHJlc3VsdC0+c2V0X3N0YXJ0
KHN0YXJ0KTsKLSAgcmVzdWx0LT5zZXRfZW5kKGVuZCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0K
LUVudW1WYWx1ZURlc2NyaXB0b3JQcm90byogQWRkRW51bVZhbHVlKEVudW1EZXNjcmlwdG9yUHJv
dG8qIGVudW1fcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdHJpbmcmIG5hbWUsIGludCBudW1iZXIpIHsKLSAgRW51bVZhbHVlRGVzY3JpcHRvclBy
b3RvKiByZXN1bHQgPSBlbnVtX3Byb3RvLT5hZGRfdmFsdWUoKTsKLSAgcmVzdWx0LT5zZXRfbmFt
ZShuYW1lKTsKLSAgcmVzdWx0LT5zZXRfbnVtYmVyKG51bWJlcik7Ci0gIHJldHVybiByZXN1bHQ7
Ci19Ci0KLU1ldGhvZERlc2NyaXB0b3JQcm90byogQWRkTWV0aG9kKFNlcnZpY2VEZXNjcmlwdG9y
UHJvdG8qIHNlcnZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmcmIGlucHV0X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJpbmcmIG91dHB1dF90eXBlKSB7Ci0gIE1ldGhvZERlc2NyaXB0b3JQcm90byogcmVzdWx0ID0g
c2VydmljZS0+YWRkX21ldGhvZCgpOwotICByZXN1bHQtPnNldF9uYW1lKG5hbWUpOwotICByZXN1
bHQtPnNldF9pbnB1dF90eXBlKGlucHV0X3R5cGUpOwotICByZXN1bHQtPnNldF9vdXRwdXRfdHlw
ZShvdXRwdXRfdHlwZSk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEVtcHR5IGVudW1zIHRl
Y2huaWNhbGx5IGFyZW4ndCBhbGxvd2VkLiAgV2UgbmVlZCB0byBpbnNlcnQgYSBkdW1teSB2YWx1
ZQotLy8gaW50byB0aGVtLgotdm9pZCBBZGRFbXB0eUVudW0oRmlsZURlc2NyaXB0b3JQcm90byog
ZmlsZSwgY29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gIEFkZEVudW1WYWx1ZShBZGRFbnVtKGZpbGUs
IG5hbWUpLCBuYW1lICsgIl9EVU1NWSIsIDEpOwotfQotCi1jbGFzcyBNb2NrRXJyb3JDb2xsZWN0
b3IgOiBwdWJsaWMgRGVzY3JpcHRvclBvb2w6OkVycm9yQ29sbGVjdG9yIHsKLSBwdWJsaWM6Ci0g
IE1vY2tFcnJvckNvbGxlY3RvcigpIHt9Ci0gIH5Nb2NrRXJyb3JDb2xsZWN0b3IoKSB7fQotCi0g
IHN0cmluZyB0ZXh0XzsKLSAgc3RyaW5nIHdhcm5pbmdfdGV4dF87Ci0KLSAgLy8gaW1wbGVtZW50
cyBFcnJvckNvbGxlY3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgdm9pZCBBZGRFcnJvcihjb25zdCBzdHJpbmcmIGZpbGVuYW1lLAotICAgICAgICAgICAgICAg
IGNvbnN0IHN0cmluZyYgZWxlbWVudF9uYW1lLCBjb25zdCBNZXNzYWdlKiBkZXNjcmlwdG9yLAot
ICAgICAgICAgICAgICAgIEVycm9yTG9jYXRpb24gbG9jYXRpb24sIGNvbnN0IHN0cmluZyYgbWVz
c2FnZSkgewotICAgIGNvbnN0IGNoYXIqIGxvY2F0aW9uX25hbWUgPSBOVUxMOwotICAgIHN3aXRj
aCAobG9jYXRpb24pIHsKLSAgICAgIGNhc2UgTkFNRSAgICAgICAgIDogbG9jYXRpb25fbmFtZSA9
ICJOQU1FIiAgICAgICAgIDsgYnJlYWs7Ci0gICAgICBjYXNlIE5VTUJFUiAgICAgICA6IGxvY2F0
aW9uX25hbWUgPSAiTlVNQkVSIiAgICAgICA7IGJyZWFrOwotICAgICAgY2FzZSBUWVBFICAgICAg
ICAgOiBsb2NhdGlvbl9uYW1lID0gIlRZUEUiICAgICAgICAgOyBicmVhazsKLSAgICAgIGNhc2Ug
RVhURU5ERUUgICAgIDogbG9jYXRpb25fbmFtZSA9ICJFWFRFTkRFRSIgICAgIDsgYnJlYWs7Ci0g
ICAgICBjYXNlIERFRkFVTFRfVkFMVUU6IGxvY2F0aW9uX25hbWUgPSAiREVGQVVMVF9WQUxVRSI7
IGJyZWFrOwotICAgICAgY2FzZSBPUFRJT05fTkFNRSAgOiBsb2NhdGlvbl9uYW1lID0gIk9QVElP
Tl9OQU1FIiAgOyBicmVhazsKLSAgICAgIGNhc2UgT1BUSU9OX1ZBTFVFIDogbG9jYXRpb25fbmFt
ZSA9ICJPUFRJT05fVkFMVUUiIDsgYnJlYWs7Ci0gICAgICBjYXNlIElOUFVUX1RZUEUgICA6IGxv
Y2F0aW9uX25hbWUgPSAiSU5QVVRfVFlQRSIgICA7IGJyZWFrOwotICAgICAgY2FzZSBPVVRQVVRf
VFlQRSAgOiBsb2NhdGlvbl9uYW1lID0gIk9VVFBVVF9UWVBFIiAgOyBicmVhazsKLSAgICAgIGNh
c2UgT1RIRVIgICAgICAgIDogbG9jYXRpb25fbmFtZSA9ICJPVEhFUiIgICAgICAgIDsgYnJlYWs7
Ci0gICAgfQotCi0gICAgc3RyaW5nczo6U3Vic3RpdHV0ZUFuZEFwcGVuZCgKLSAgICAgICZ0ZXh0
XywgIiQwOiAkMTogJDI6ICQzXG4iLAotICAgICAgZmlsZW5hbWUsIGVsZW1lbnRfbmFtZSwgbG9j
YXRpb25fbmFtZSwgbWVzc2FnZSk7Ci0gIH0KLQotICAvLyBpbXBsZW1lbnRzIEVycm9yQ29sbGVj
dG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2b2lkIEFkZFdh
cm5pbmcoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qgc3RyaW5nJiBlbGVtZW50X25hbWUs
Ci0gICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlKiBkZXNjcmlwdG9yLCBFcnJvckxvY2F0
aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBtZXNzYWdlKSB7
Ci0gICAgY29uc3QgY2hhciogbG9jYXRpb25fbmFtZSA9IE5VTEw7Ci0gICAgc3dpdGNoIChsb2Nh
dGlvbikgewotICAgICAgY2FzZSBOQU1FICAgICAgICAgOiBsb2NhdGlvbl9uYW1lID0gIk5BTUUi
ICAgICAgICAgOyBicmVhazsKLSAgICAgIGNhc2UgTlVNQkVSICAgICAgIDogbG9jYXRpb25fbmFt
ZSA9ICJOVU1CRVIiICAgICAgIDsgYnJlYWs7Ci0gICAgICBjYXNlIFRZUEUgICAgICAgICA6IGxv
Y2F0aW9uX25hbWUgPSAiVFlQRSIgICAgICAgICA7IGJyZWFrOwotICAgICAgY2FzZSBFWFRFTkRF
RSAgICAgOiBsb2NhdGlvbl9uYW1lID0gIkVYVEVOREVFIiAgICAgOyBicmVhazsKLSAgICAgIGNh
c2UgREVGQVVMVF9WQUxVRTogbG9jYXRpb25fbmFtZSA9ICJERUZBVUxUX1ZBTFVFIjsgYnJlYWs7
Ci0gICAgICBjYXNlIE9QVElPTl9OQU1FICA6IGxvY2F0aW9uX25hbWUgPSAiT1BUSU9OX05BTUUi
ICA7IGJyZWFrOwotICAgICAgY2FzZSBPUFRJT05fVkFMVUUgOiBsb2NhdGlvbl9uYW1lID0gIk9Q
VElPTl9WQUxVRSIgOyBicmVhazsKLSAgICAgIGNhc2UgSU5QVVRfVFlQRSAgIDogbG9jYXRpb25f
bmFtZSA9ICJJTlBVVF9UWVBFIiAgIDsgYnJlYWs7Ci0gICAgICBjYXNlIE9VVFBVVF9UWVBFICA6
IGxvY2F0aW9uX25hbWUgPSAiT1VUUFVUX1RZUEUiICA7IGJyZWFrOwotICAgICAgY2FzZSBPVEhF
UiAgICAgICAgOiBsb2NhdGlvbl9uYW1lID0gIk9USEVSIiAgICAgICAgOyBicmVhazsKLSAgICB9
Ci0KLSAgICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5kKAotICAgICAgJndhcm5pbmdfdGV4
dF8sICIkMDogJDE6ICQyOiAkM1xuIiwKLSAgICAgIGZpbGVuYW1lLCBlbGVtZW50X25hbWUsIGxv
Y2F0aW9uX25hbWUsIG1lc3NhZ2UpOwotICB9Ci19OwotCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS8vIFRl
c3Qgc2ltcGxlIGZpbGVzLgotY2xhc3MgRmlsZURlc2NyaXB0b3JUZXN0IDogcHVibGljIHRlc3Rp
bmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIC8v
IEJ1aWxkIGRlc2NyaXB0b3JzIGZvciB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zOgotICAgIC8v
Ci0gICAgLy8gICAvLyBpbiAiZm9vLnByb3RvIgotICAgIC8vICAgbWVzc2FnZSBGb29NZXNzYWdl
IHsgZXh0ZW5zaW9ucyAxOyB9Ci0gICAgLy8gICBlbnVtIEZvb0VudW0ge0ZPT19FTlVNX1ZBTFVF
ID0gMTt9Ci0gICAgLy8gICBzZXJ2aWNlIEZvb1NlcnZpY2Uge30KLSAgICAvLyAgIGV4dGVuZCBG
b29NZXNzYWdlIHsgb3B0aW9uYWwgaW50MzIgZm9vX2V4dGVuc2lvbiA9IDE7IH0KLSAgICAvLwot
ICAgIC8vICAgLy8gaW4gImJhci5wcm90byIKLSAgICAvLyAgIHBhY2thZ2UgYmFyX3BhY2thZ2U7
Ci0gICAgLy8gICBtZXNzYWdlIEJhck1lc3NhZ2UgeyBleHRlbnNpb25zIDE7IH0KLSAgICAvLyAg
IGVudW0gQmFyRW51bSB7QkFSX0VOVU1fVkFMVUUgPSAxO30KLSAgICAvLyAgIHNlcnZpY2UgQmFy
U2VydmljZSB7fQotICAgIC8vICAgZXh0ZW5kIEJhck1lc3NhZ2UgeyBvcHRpb25hbCBpbnQzMiBi
YXJfZXh0ZW5zaW9uID0gMTsgfQotICAgIC8vCi0gICAgLy8gQWxzbywgd2UgaGF2ZSBhbiBlbXB0
eSBmaWxlICJiYXoucHJvdG8iLiAgVGhpcyBmaWxlJ3MgcHVycG9zZSBpcyB0bwotICAgIC8vIG1h
a2Ugc3VyZSB0aGF0IGV2ZW4gdGhvdWdoIGl0IGhhcyB0aGUgc2FtZSBwYWNrYWdlIGFzIGZvby5w
cm90bywKLSAgICAvLyBzZWFyY2hpbmcgaXQgZm9yIG1lbWJlcnMgb2YgZm9vLnByb3RvIHdvbid0
IHdvcmsuCi0KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZvb19maWxlOwotICAgIGZvb19maWxl
LnNldF9uYW1lKCJmb28ucHJvdG8iKTsKLSAgICBBZGRFeHRlbnNpb25SYW5nZShBZGRNZXNzYWdl
KCZmb29fZmlsZSwgIkZvb01lc3NhZ2UiKSwgMSwgMik7Ci0gICAgQWRkRW51bVZhbHVlKEFkZEVu
dW0oJmZvb19maWxlLCAiRm9vRW51bSIpLCAiRk9PX0VOVU1fVkFMVUUiLCAxKTsKLSAgICBBZGRT
ZXJ2aWNlKCZmb29fZmlsZSwgIkZvb1NlcnZpY2UiKTsKLSAgICBBZGRFeHRlbnNpb24oJmZvb19m
aWxlLCAiRm9vTWVzc2FnZSIsICJmb29fZXh0ZW5zaW9uIiwgMSwKLSAgICAgICAgICAgICAgICAg
RmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAgICAgICBG
aWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9JTlQzMik7Ci0KLSAgICBGaWxlRGVzY3JpcHRvclBy
b3RvIGJhcl9maWxlOwotICAgIGJhcl9maWxlLnNldF9uYW1lKCJiYXIucHJvdG8iKTsKLSAgICBi
YXJfZmlsZS5zZXRfcGFja2FnZSgiYmFyX3BhY2thZ2UiKTsKLSAgICBiYXJfZmlsZS5hZGRfZGVw
ZW5kZW5jeSgiZm9vLnByb3RvIik7Ci0gICAgQWRkRXh0ZW5zaW9uUmFuZ2UoQWRkTWVzc2FnZSgm
YmFyX2ZpbGUsICJCYXJNZXNzYWdlIiksIDEsIDIpOwotICAgIEFkZEVudW1WYWx1ZShBZGRFbnVt
KCZiYXJfZmlsZSwgIkJhckVudW0iKSwgIkJBUl9FTlVNX1ZBTFVFIiwgMSk7Ci0gICAgQWRkU2Vy
dmljZSgmYmFyX2ZpbGUsICJCYXJTZXJ2aWNlIik7Ci0gICAgQWRkRXh0ZW5zaW9uKCZiYXJfZmls
ZSwgImJhcl9wYWNrYWdlLkJhck1lc3NhZ2UiLCAiYmFyX2V4dGVuc2lvbiIsIDEsCi0gICAgICAg
ICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAg
ICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfSU5UMzIpOwotCi0gICAgRmlsZURl
c2NyaXB0b3JQcm90byBiYXpfZmlsZTsKLSAgICBiYXpfZmlsZS5zZXRfbmFtZSgiYmF6LnByb3Rv
Iik7Ci0KLSAgICAvLyBCdWlsZCB0aGUgZGVzY3JpcHRvcnMgYW5kIGdldCB0aGUgcG9pbnRlcnMu
Ci0gICAgZm9vX2ZpbGVfID0gcG9vbF8uQnVpbGRGaWxlKGZvb19maWxlKTsKLSAgICBBU1NFUlRf
VFJVRShmb29fZmlsZV8gIT0gTlVMTCk7Ci0KLSAgICBiYXJfZmlsZV8gPSBwb29sXy5CdWlsZEZp
bGUoYmFyX2ZpbGUpOwotICAgIEFTU0VSVF9UUlVFKGJhcl9maWxlXyAhPSBOVUxMKTsKLQotICAg
IGJhel9maWxlXyA9IHBvb2xfLkJ1aWxkRmlsZShiYXpfZmlsZSk7Ci0gICAgQVNTRVJUX1RSVUUo
YmF6X2ZpbGVfICE9IE5VTEwpOwotCi0gICAgQVNTRVJUX0VRKDEsIGZvb19maWxlXy0+bWVzc2Fn
ZV90eXBlX2NvdW50KCkpOwotICAgIGZvb19tZXNzYWdlXyA9IGZvb19maWxlXy0+bWVzc2FnZV90
eXBlKDApOwotICAgIEFTU0VSVF9FUSgxLCBmb29fZmlsZV8tPmVudW1fdHlwZV9jb3VudCgpKTsK
LSAgICBmb29fZW51bV8gPSBmb29fZmlsZV8tPmVudW1fdHlwZSgwKTsKLSAgICBBU1NFUlRfRVEo
MSwgZm9vX2VudW1fLT52YWx1ZV9jb3VudCgpKTsKLSAgICBmb29fZW51bV92YWx1ZV8gPSBmb29f
ZW51bV8tPnZhbHVlKDApOwotICAgIEFTU0VSVF9FUSgxLCBmb29fZmlsZV8tPnNlcnZpY2VfY291
bnQoKSk7Ci0gICAgZm9vX3NlcnZpY2VfID0gZm9vX2ZpbGVfLT5zZXJ2aWNlKDApOwotICAgIEFT
U0VSVF9FUSgxLCBmb29fZmlsZV8tPmV4dGVuc2lvbl9jb3VudCgpKTsKLSAgICBmb29fZXh0ZW5z
aW9uXyA9IGZvb19maWxlXy0+ZXh0ZW5zaW9uKDApOwotCi0gICAgQVNTRVJUX0VRKDEsIGJhcl9m
aWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCkpOwotICAgIGJhcl9tZXNzYWdlXyA9IGJhcl9maWxl
Xy0+bWVzc2FnZV90eXBlKDApOwotICAgIEFTU0VSVF9FUSgxLCBiYXJfZmlsZV8tPmVudW1fdHlw
ZV9jb3VudCgpKTsKLSAgICBiYXJfZW51bV8gPSBiYXJfZmlsZV8tPmVudW1fdHlwZSgwKTsKLSAg
ICBBU1NFUlRfRVEoMSwgYmFyX2VudW1fLT52YWx1ZV9jb3VudCgpKTsKLSAgICBiYXJfZW51bV92
YWx1ZV8gPSBiYXJfZW51bV8tPnZhbHVlKDApOwotICAgIEFTU0VSVF9FUSgxLCBiYXJfZmlsZV8t
PnNlcnZpY2VfY291bnQoKSk7Ci0gICAgYmFyX3NlcnZpY2VfID0gYmFyX2ZpbGVfLT5zZXJ2aWNl
KDApOwotICAgIEFTU0VSVF9FUSgxLCBiYXJfZmlsZV8tPmV4dGVuc2lvbl9jb3VudCgpKTsKLSAg
ICBiYXJfZXh0ZW5zaW9uXyA9IGJhcl9maWxlXy0+ZXh0ZW5zaW9uKDApOwotICB9Ci0KLSAgRGVz
Y3JpcHRvclBvb2wgcG9vbF87Ci0KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZvb19maWxlXzsK
LSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGJhcl9maWxlXzsKLSAgY29uc3QgRmlsZURlc2NyaXB0
b3IqIGJhel9maWxlXzsKLQotICBjb25zdCBEZXNjcmlwdG9yKiAgICAgICAgICBmb29fbWVzc2Fn
ZV87Ci0gIGNvbnN0IEVudW1EZXNjcmlwdG9yKiAgICAgIGZvb19lbnVtXzsKLSAgY29uc3QgRW51
bVZhbHVlRGVzY3JpcHRvciogZm9vX2VudW1fdmFsdWVfOwotICBjb25zdCBTZXJ2aWNlRGVzY3Jp
cHRvciogICBmb29fc2VydmljZV87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogICAgIGZvb19l
eHRlbnNpb25fOwotCi0gIGNvbnN0IERlc2NyaXB0b3IqICAgICAgICAgIGJhcl9tZXNzYWdlXzsK
LSAgY29uc3QgRW51bURlc2NyaXB0b3IqICAgICAgYmFyX2VudW1fOwotICBjb25zdCBFbnVtVmFs
dWVEZXNjcmlwdG9yKiBiYXJfZW51bV92YWx1ZV87Ci0gIGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9y
KiAgIGJhcl9zZXJ2aWNlXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiAgICAgYmFyX2V4dGVu
c2lvbl87Ci19OwotCi1URVNUX0YoRmlsZURlc2NyaXB0b3JUZXN0LCBOYW1lKSB7Ci0gIEVYUEVD
VF9FUSgiZm9vLnByb3RvIiwgZm9vX2ZpbGVfLT5uYW1lKCkpOwotICBFWFBFQ1RfRVEoImJhci5w
cm90byIsIGJhcl9maWxlXy0+bmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJiYXoucHJvdG8iLCBiYXpf
ZmlsZV8tPm5hbWUoKSk7Ci19Ci0KLVRFU1RfRihGaWxlRGVzY3JpcHRvclRlc3QsIFBhY2thZ2Up
IHsKLSAgRVhQRUNUX0VRKCIiLCBmb29fZmlsZV8tPnBhY2thZ2UoKSk7Ci0gIEVYUEVDVF9FUSgi
YmFyX3BhY2thZ2UiLCBiYXJfZmlsZV8tPnBhY2thZ2UoKSk7Ci19Ci0KLVRFU1RfRihGaWxlRGVz
Y3JpcHRvclRlc3QsIERlcGVuZGVuY2llcykgewotICBFWFBFQ1RfRVEoMCwgZm9vX2ZpbGVfLT5k
ZXBlbmRlbmN5X2NvdW50KCkpOwotICBFWFBFQ1RfRVEoMSwgYmFyX2ZpbGVfLT5kZXBlbmRlbmN5
X2NvdW50KCkpOwotICBFWFBFQ1RfRVEoZm9vX2ZpbGVfLCBiYXJfZmlsZV8tPmRlcGVuZGVuY3ko
MCkpOwotfQotCi1URVNUX0YoRmlsZURlc2NyaXB0b3JUZXN0LCBGaW5kTWVzc2FnZVR5cGVCeU5h
bWUpIHsKLSAgRVhQRUNUX0VRKGZvb19tZXNzYWdlXywgZm9vX2ZpbGVfLT5GaW5kTWVzc2FnZVR5
cGVCeU5hbWUoIkZvb01lc3NhZ2UiKSk7Ci0gIEVYUEVDVF9FUShiYXJfbWVzc2FnZV8sIGJhcl9m
aWxlXy0+RmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJCYXJNZXNzYWdlIikpOwotCi0gIEVYUEVDVF9U
UlVFKGZvb19maWxlXy0+RmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJCYXJNZXNzYWdlIikgPT0gTlVM
TCk7Ci0gIEVYUEVDVF9UUlVFKGJhcl9maWxlXy0+RmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJGb29N
ZXNzYWdlIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGJhel9maWxlXy0+RmluZE1lc3NhZ2VU
eXBlQnlOYW1lKCJGb29NZXNzYWdlIikgPT0gTlVMTCk7Ci0KLSAgRVhQRUNUX1RSVUUoZm9vX2Zp
bGVfLT5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoIk5vU3VjaE1lc3NhZ2UiKSA9PSBOVUxMKTsKLSAg
RVhQRUNUX1RSVUUoZm9vX2ZpbGVfLT5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoIkZvb0VudW0iKSA9
PSBOVUxMKTsKLX0KLQotVEVTVF9GKEZpbGVEZXNjcmlwdG9yVGVzdCwgRmluZEVudW1UeXBlQnlO
YW1lKSB7Ci0gIEVYUEVDVF9FUShmb29fZW51bV8sIGZvb19maWxlXy0+RmluZEVudW1UeXBlQnlO
YW1lKCJGb29FbnVtIikpOwotICBFWFBFQ1RfRVEoYmFyX2VudW1fLCBiYXJfZmlsZV8tPkZpbmRF
bnVtVHlwZUJ5TmFtZSgiQmFyRW51bSIpKTsKLQotICBFWFBFQ1RfVFJVRShmb29fZmlsZV8tPkZp
bmRFbnVtVHlwZUJ5TmFtZSgiQmFyRW51bSIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShiYXJf
ZmlsZV8tPkZpbmRFbnVtVHlwZUJ5TmFtZSgiRm9vRW51bSIpID09IE5VTEwpOwotICBFWFBFQ1Rf
VFJVRShiYXpfZmlsZV8tPkZpbmRFbnVtVHlwZUJ5TmFtZSgiRm9vRW51bSIpID09IE5VTEwpOwot
Ci0gIEVYUEVDVF9UUlVFKGZvb19maWxlXy0+RmluZEVudW1UeXBlQnlOYW1lKCJOb1N1Y2hFbnVt
IikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGZvb19maWxlXy0+RmluZEVudW1UeXBlQnlOYW1l
KCJGb29NZXNzYWdlIikgPT0gTlVMTCk7Ci19Ci0KLVRFU1RfRihGaWxlRGVzY3JpcHRvclRlc3Qs
IEZpbmRFbnVtVmFsdWVCeU5hbWUpIHsKLSAgRVhQRUNUX0VRKGZvb19lbnVtX3ZhbHVlXywgZm9v
X2ZpbGVfLT5GaW5kRW51bVZhbHVlQnlOYW1lKCJGT09fRU5VTV9WQUxVRSIpKTsKLSAgRVhQRUNU
X0VRKGJhcl9lbnVtX3ZhbHVlXywgYmFyX2ZpbGVfLT5GaW5kRW51bVZhbHVlQnlOYW1lKCJCQVJf
RU5VTV9WQUxVRSIpKTsKLQotICBFWFBFQ1RfVFJVRShmb29fZmlsZV8tPkZpbmRFbnVtVmFsdWVC
eU5hbWUoIkJBUl9FTlVNX1ZBTFVFIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGJhcl9maWxl
Xy0+RmluZEVudW1WYWx1ZUJ5TmFtZSgiRk9PX0VOVU1fVkFMVUUiKSA9PSBOVUxMKTsKLSAgRVhQ
RUNUX1RSVUUoYmF6X2ZpbGVfLT5GaW5kRW51bVZhbHVlQnlOYW1lKCJGT09fRU5VTV9WQUxVRSIp
ID09IE5VTEwpOwotCi0gIEVYUEVDVF9UUlVFKGZvb19maWxlXy0+RmluZEVudW1WYWx1ZUJ5TmFt
ZSgiTk9fU1VDSF9WQUxVRSIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShmb29fZmlsZV8tPkZp
bmRFbnVtVmFsdWVCeU5hbWUoIkZvb01lc3NhZ2UiKSA9PSBOVUxMKTsKLX0KLQotVEVTVF9GKEZp
bGVEZXNjcmlwdG9yVGVzdCwgRmluZFNlcnZpY2VCeU5hbWUpIHsKLSAgRVhQRUNUX0VRKGZvb19z
ZXJ2aWNlXywgZm9vX2ZpbGVfLT5GaW5kU2VydmljZUJ5TmFtZSgiRm9vU2VydmljZSIpKTsKLSAg
RVhQRUNUX0VRKGJhcl9zZXJ2aWNlXywgYmFyX2ZpbGVfLT5GaW5kU2VydmljZUJ5TmFtZSgiQmFy
U2VydmljZSIpKTsKLQotICBFWFBFQ1RfVFJVRShmb29fZmlsZV8tPkZpbmRTZXJ2aWNlQnlOYW1l
KCJCYXJTZXJ2aWNlIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGJhcl9maWxlXy0+RmluZFNl
cnZpY2VCeU5hbWUoIkZvb1NlcnZpY2UiKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoYmF6X2Zp
bGVfLT5GaW5kU2VydmljZUJ5TmFtZSgiRm9vU2VydmljZSIpID09IE5VTEwpOwotCi0gIEVYUEVD
VF9UUlVFKGZvb19maWxlXy0+RmluZFNlcnZpY2VCeU5hbWUoIk5vU3VjaFNlcnZpY2UiKSA9PSBO
VUxMKTsKLSAgRVhQRUNUX1RSVUUoZm9vX2ZpbGVfLT5GaW5kU2VydmljZUJ5TmFtZSgiRm9vTWVz
c2FnZSIpID09IE5VTEwpOwotfQotCi1URVNUX0YoRmlsZURlc2NyaXB0b3JUZXN0LCBGaW5kRXh0
ZW5zaW9uQnlOYW1lKSB7Ci0gIEVYUEVDVF9FUShmb29fZXh0ZW5zaW9uXywgZm9vX2ZpbGVfLT5G
aW5kRXh0ZW5zaW9uQnlOYW1lKCJmb29fZXh0ZW5zaW9uIikpOwotICBFWFBFQ1RfRVEoYmFyX2V4
dGVuc2lvbl8sIGJhcl9maWxlXy0+RmluZEV4dGVuc2lvbkJ5TmFtZSgiYmFyX2V4dGVuc2lvbiIp
KTsKLQotICBFWFBFQ1RfVFJVRShmb29fZmlsZV8tPkZpbmRFeHRlbnNpb25CeU5hbWUoImJhcl9l
eHRlbnNpb24iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoYmFyX2ZpbGVfLT5GaW5kRXh0ZW5z
aW9uQnlOYW1lKCJmb29fZXh0ZW5zaW9uIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGJhel9m
aWxlXy0+RmluZEV4dGVuc2lvbkJ5TmFtZSgiZm9vX2V4dGVuc2lvbiIpID09IE5VTEwpOwotCi0g
IEVYUEVDVF9UUlVFKGZvb19maWxlXy0+RmluZEV4dGVuc2lvbkJ5TmFtZSgibm9fc3VjaF9leHRl
bnNpb24iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoZm9vX2ZpbGVfLT5GaW5kRXh0ZW5zaW9u
QnlOYW1lKCJGb29NZXNzYWdlIikgPT0gTlVMTCk7Ci19Ci0KLVRFU1RfRihGaWxlRGVzY3JpcHRv
clRlc3QsIEZpbmRFeHRlbnNpb25CeU51bWJlcikgewotICBFWFBFQ1RfRVEoZm9vX2V4dGVuc2lv
bl8sIHBvb2xfLkZpbmRFeHRlbnNpb25CeU51bWJlcihmb29fbWVzc2FnZV8sIDEpKTsKLSAgRVhQ
RUNUX0VRKGJhcl9leHRlbnNpb25fLCBwb29sXy5GaW5kRXh0ZW5zaW9uQnlOdW1iZXIoYmFyX21l
c3NhZ2VfLCAxKSk7Ci0KLSAgRVhQRUNUX1RSVUUocG9vbF8uRmluZEV4dGVuc2lvbkJ5TnVtYmVy
KGZvb19tZXNzYWdlXywgMikgPT0gTlVMTCk7Ci19Ci0KLVRFU1RfRihGaWxlRGVzY3JpcHRvclRl
c3QsIEJ1aWxkQWdhaW4pIHsKLSAgLy8gVGVzdCB0aGF0IGlmIHRlIGNhbGwgQnVpbGRGaWxlIGFn
YWluIG9uIHRoZSBzYW1lIGlucHV0IHdlIGdldCB0aGUgc2FtZQotICAvLyBGaWxlRGVzY3JpcHRv
ciBiYWNrLgotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGU7Ci0gIGZvb19maWxlXy0+Q29weVRv
KCZmaWxlKTsKLSAgRVhQRUNUX0VRKGZvb19maWxlXywgcG9vbF8uQnVpbGRGaWxlKGZpbGUpKTsK
LQotICAvLyBCdXQgaWYgd2UgY2hhbmdlIHRoZSBmaWxlIHRoZW4gaXQgd29uJ3Qgd29yay4KLSAg
ZmlsZS5zZXRfcGFja2FnZSgic29tZS5vdGhlci5wYWNrYWdlIik7Ci0gIEVYUEVDVF9UUlVFKHBv
b2xfLkJ1aWxkRmlsZShmaWxlKSA9PSBOVUxMKTsKLX0KLQotVEVTVF9GKEZpbGVEZXNjcmlwdG9y
VGVzdCwgQnVpbGRBZ2FpbldpdGhTeW50YXgpIHsKLSAgLy8gVGVzdCB0aGF0IGlmIHRlIGNhbGwg
QnVpbGRGaWxlIGFnYWluIG9uIHRoZSBzYW1lIGlucHV0IHdlIGdldCB0aGUgc2FtZQotICAvLyBG
aWxlRGVzY3JpcHRvciBiYWNrIGV2ZW4gaWYgc3ludGF4IHBhcmFtIGlzIHNwZWNpZmllZC4KLSAg
RmlsZURlc2NyaXB0b3JQcm90byBwcm90b19zeW50YXgyOwotICBwcm90b19zeW50YXgyLnNldF9u
YW1lKCJmb29fc3ludGF4MiIpOwotICBwcm90b19zeW50YXgyLnNldF9zeW50YXgoInByb3RvMiIp
OwotCi0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBwcm90bzJfZGVzY3JpcHRvciA9IHBvb2xfLkJ1
aWxkRmlsZShwcm90b19zeW50YXgyKTsKLSAgRVhQRUNUX1RSVUUocHJvdG8yX2Rlc2NyaXB0b3Ig
IT0gTlVMTCk7Ci0gIEVYUEVDVF9FUShwcm90bzJfZGVzY3JpcHRvciwgcG9vbF8uQnVpbGRGaWxl
KHByb3RvX3N5bnRheDIpKTsKLQotICBGaWxlRGVzY3JpcHRvclByb3RvIGltcGxpY2l0X3Byb3Rv
MjsKLSAgaW1wbGljaXRfcHJvdG8yLnNldF9uYW1lKCJmb29faW1wbGljaXRfc3ludGF4MiIpOwot
Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBpbXBsaWNpdF9wcm90bzJfZGVzY3JpcHRvciA9Ci0g
ICAgICBwb29sXy5CdWlsZEZpbGUoaW1wbGljaXRfcHJvdG8yKTsKLSAgRVhQRUNUX1RSVUUoaW1w
bGljaXRfcHJvdG8yX2Rlc2NyaXB0b3IgIT0gTlVMTCk7Ci0gIC8vIFdlIGdldCB0aGUgc2FtZSBG
aWxlRGVzY3JpcHRvciBiYWNrIGlmIHN5bnRheCBwYXJhbSBpcyBleHBsaWNpdGx5Ci0gIC8vIHNw
ZWNpZmllZC4KLSAgaW1wbGljaXRfcHJvdG8yLnNldF9zeW50YXgoInByb3RvMiIpOwotICBFWFBF
Q1RfRVEoaW1wbGljaXRfcHJvdG8yX2Rlc2NyaXB0b3IsIHBvb2xfLkJ1aWxkRmlsZShpbXBsaWNp
dF9wcm90bzIpKTsKLQotICBGaWxlRGVzY3JpcHRvclByb3RvIHByb3RvX3N5bnRheDM7Ci0gIHBy
b3RvX3N5bnRheDMuc2V0X25hbWUoImZvb19zeW50YXgzIik7Ci0gIHByb3RvX3N5bnRheDMuc2V0
X3N5bnRheCgicHJvdG8zIik7Ci0KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIHByb3RvM19kZXNj
cmlwdG9yID0gcG9vbF8uQnVpbGRGaWxlKHByb3RvX3N5bnRheDMpOwotICBFWFBFQ1RfVFJVRShw
cm90bzNfZGVzY3JpcHRvciAhPSBOVUxMKTsKLSAgRVhQRUNUX0VRKHByb3RvM19kZXNjcmlwdG9y
LCBwb29sXy5CdWlsZEZpbGUocHJvdG9fc3ludGF4MykpOwotfQotCi1URVNUX0YoRmlsZURlc2Ny
aXB0b3JUZXN0LCBTeW50YXgpIHsKLSAgRmlsZURlc2NyaXB0b3JQcm90byBwcm90bzsKLSAgcHJv
dG8uc2V0X25hbWUoImZvbyIpOwotICAvLyBFbmFibGUgdGhlIHRlc3Qgd2hlbiB3ZSBhbHNvIHBv
cHVsYXRlIHRoZSBzeW50YXggZm9yIHByb3RvMi4KLSNpZiAwCi0gIHsKLSAgICBwcm90by5zZXRf
c3ludGF4KCJwcm90bzIiKTsKLSAgICBEZXNjcmlwdG9yUG9vbCBwb29sOwotICAgIGNvbnN0IEZp
bGVEZXNjcmlwdG9yKiBmaWxlID0gcG9vbC5CdWlsZEZpbGUocHJvdG8pOwotICAgIEVYUEVDVF9U
UlVFKGZpbGUgIT0gTlVMTCk7Ci0gICAgRVhQRUNUX0VRKEZpbGVEZXNjcmlwdG9yOjpTWU5UQVhf
UFJPVE8yLCBmaWxlLT5zeW50YXgoKSk7Ci0gICAgRmlsZURlc2NyaXB0b3JQcm90byBvdGhlcjsK
LSAgICBmaWxlLT5Db3B5VG8oJm90aGVyKTsKLSAgICBFWFBFQ1RfRVEoInByb3RvMiIsIG90aGVy
LnN5bnRheCgpKTsKLSAgfQotI2VuZGlmCi0gIHsKLSAgICBwcm90by5zZXRfc3ludGF4KCJwcm90
bzMiKTsKLSAgICBEZXNjcmlwdG9yUG9vbCBwb29sOwotICAgIGNvbnN0IEZpbGVEZXNjcmlwdG9y
KiBmaWxlID0gcG9vbC5CdWlsZEZpbGUocHJvdG8pOwotICAgIEVYUEVDVF9UUlVFKGZpbGUgIT0g
TlVMTCk7Ci0gICAgRVhQRUNUX0VRKEZpbGVEZXNjcmlwdG9yOjpTWU5UQVhfUFJPVE8zLCBmaWxl
LT5zeW50YXgoKSk7Ci0gICAgRmlsZURlc2NyaXB0b3JQcm90byBvdGhlcjsKLSAgICBmaWxlLT5D
b3B5VG8oJm90aGVyKTsKLSAgICBFWFBFQ1RfRVEoInByb3RvMyIsIG90aGVyLnN5bnRheCgpKTsK
LSAgfQotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS8vIFRlc3Qgc2ltcGxlIGZsYXQgbWVzc2FnZXMg
YW5kIGZpZWxkcy4KLWNsYXNzIERlc2NyaXB0b3JUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qg
ewotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIC8vIEJ1aWxkIGRl
c2NyaXB0b3JzIGZvciB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zOgotICAgIC8vCi0gICAgLy8g
ICAvLyBpbiAiZm9vLnByb3RvIgotICAgIC8vICAgbWVzc2FnZSBUZXN0Rm9yZWlnbiB7fQotICAg
IC8vICAgZW51bSBUZXN0RW51bSB7fQotICAgIC8vCi0gICAgLy8gICBtZXNzYWdlIFRlc3RNZXNz
YWdlIHsKLSAgICAvLyAgICAgcmVxdWlyZWQgc3RyaW5nICAgICAgZm9vID0gMTsKLSAgICAvLyAg
ICAgb3B0aW9uYWwgVGVzdEVudW0gICAgYmFyID0gNjsKLSAgICAvLyAgICAgcmVwZWF0ZWQgVGVz
dEZvcmVpZ24gYmF6ID0gNTAwMDAwMDAwOwotICAgIC8vICAgICBvcHRpb25hbCBncm91cCAgICAg
ICBxdXggPSAxNSB7fQotICAgIC8vICAgfQotICAgIC8vCi0gICAgLy8gICAvLyBpbiAiYmFyLnBy
b3RvIgotICAgIC8vICAgcGFja2FnZSBjb3JnZS5ncmF1bHQ7Ci0gICAgLy8gICBtZXNzYWdlIFRl
c3RNZXNzYWdlMiB7Ci0gICAgLy8gICAgIHJlcXVpcmVkIHN0cmluZyBmb28gPSAxOwotICAgIC8v
ICAgICByZXF1aXJlZCBzdHJpbmcgYmFyID0gMjsKLSAgICAvLyAgICAgcmVxdWlyZWQgc3RyaW5n
IHF1dXggPSA2OwotICAgIC8vICAgfQotICAgIC8vCi0gICAgLy8gICAvLyBpbiAibWFwLnByb3Rv
IgotICAgIC8vICAgbWVzc2FnZSBUZXN0TWVzc2FnZTMgewotICAgIC8vICAgICBtYXA8aW50MzIs
IGludDMyPiBtYXBfaW50MzJfaW50MzIgPSAxOwotICAgIC8vICAgfQotICAgIC8vCi0gICAgLy8g
ICAvLyBpbiAianNvbi5wcm90byIKLSAgICAvLyAgIG1lc3NhZ2UgVGVzdE1lc3NhZ2U0IHsKLSAg
ICAvLyAgICAgb3B0aW9uYWwgaW50MzIgZmllbGRfbmFtZTEgPSAxOwotICAgIC8vICAgICBvcHRp
b25hbCBpbnQzMiBmaWVsZE5hbWUyID0gMjsKLSAgICAvLyAgICAgb3B0aW9uYWwgaW50MzIgRmll
bGROYW1lMyA9IDM7Ci0gICAgLy8gICAgIG9wdGlvbmFsIGludDMyIF9maWVsZF9uYW1lNCA9IDQ7
Ci0gICAgLy8gICAgIG9wdGlvbmFsIGludDMyIEZJRUxEX05BTUU1ID0gNTsKLSAgICAvLyAgICAg
b3B0aW9uYWwgaW50MzIgZmllbGRfbmFtZTYgPSA2IFtqc29uX25hbWUgPSAiQHR5cGUiXTsKLSAg
ICAvLyAgIH0KLSAgICAvLwotICAgIC8vIFdlIGNoZWF0IGFuZCB1c2UgVGVzdEZvcmVpZ24gYXMg
dGhlIHR5cGUgZm9yIHF1eCByYXRoZXIgdGhhbiBjcmVhdGUKLSAgICAvLyBhbiBhY3R1YWwgbmVz
dGVkIHR5cGUuCi0gICAgLy8KLSAgICAvLyBTaW5jZSBhbGwgcHJpbWl0aXZlIHR5cGVzIChpbmNs
dWRpbmcgc3RyaW5nKSB1c2UgdGhlIHNhbWUgYnVpbGRpbmcKLSAgICAvLyBjb2RlLCB0aGVyZSdz
IG5vIG5lZWQgdG8gdGVzdCBlYWNoIG9uZSBpbmRpdmlkdWFsbHkuCi0gICAgLy8KLSAgICAvLyBU
ZXN0TWVzc2FnZTIgaXMgcHJpbWFyaWx5IGhlcmUgdG8gdGVzdCBGaW5kRmllbGRCeU5hbWUgYW5k
IGZyaWVuZHMuCi0gICAgLy8gQWxsIG1lc3NhZ2VzIGNyZWF0ZWQgZnJvbSB0aGUgc2FtZSBEZXNj
cmlwdG9yUG9vbCBzaGFyZSB0aGUgc2FtZSBsb29rdXAKLSAgICAvLyB0YWJsZSwgc28gd2UgbmVl
ZCB0byBpbnN1cmUgdGhhdCB0aGV5IGRvbid0IGludGVyZmVyZS4KLQotICAgIEZpbGVEZXNjcmlw
dG9yUHJvdG8gZm9vX2ZpbGU7Ci0gICAgZm9vX2ZpbGUuc2V0X25hbWUoImZvby5wcm90byIpOwot
ICAgIEFkZE1lc3NhZ2UoJmZvb19maWxlLCAiVGVzdEZvcmVpZ24iKTsKLSAgICBBZGRFbXB0eUVu
dW0oJmZvb19maWxlLCAiVGVzdEVudW0iKTsKLQotICAgIERlc2NyaXB0b3JQcm90byogbWVzc2Fn
ZSA9IEFkZE1lc3NhZ2UoJmZvb19maWxlLCAiVGVzdE1lc3NhZ2UiKTsKLSAgICBBZGRGaWVsZCht
ZXNzYWdlLCAiZm9vIiwgMSwKLSAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6TEFC
RUxfUkVRVUlSRUQsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfU1RS
SU5HKTsKLSAgICBBZGRGaWVsZChtZXNzYWdlLCAiYmFyIiwgNiwKLSAgICAgICAgICAgICBGaWVs
ZERlc2NyaXB0b3JQcm90bzo6TEFCRUxfT1BUSU9OQUwsCi0gICAgICAgICAgICAgRmllbGREZXNj
cmlwdG9yUHJvdG86OlRZUEVfRU5VTSkKLSAgICAgIC0+c2V0X3R5cGVfbmFtZSgiVGVzdEVudW0i
KTsKLSAgICBBZGRGaWVsZChtZXNzYWdlLCAiYmF6IiwgNTAwMDAwMDAwLAotICAgICAgICAgICAg
IEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9SRVBFQVRFRCwKLSAgICAgICAgICAgICBGaWVs
ZERlc2NyaXB0b3JQcm90bzo6VFlQRV9NRVNTQUdFKQotICAgICAgLT5zZXRfdHlwZV9uYW1lKCJU
ZXN0Rm9yZWlnbiIpOwotICAgIEFkZEZpZWxkKG1lc3NhZ2UsICJxdXgiLCAxNSwKLSAgICAgICAg
ICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6TEFCRUxfT1BUSU9OQUwsCi0gICAgICAgICAgICAg
RmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfR1JPVVApCi0gICAgICAtPnNldF90eXBlX25hbWUo
IlRlc3RGb3JlaWduIik7Ci0KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGJhcl9maWxlOwotICAg
IGJhcl9maWxlLnNldF9uYW1lKCJiYXIucHJvdG8iKTsKLSAgICBiYXJfZmlsZS5zZXRfcGFja2Fn
ZSgiY29yZ2UuZ3JhdWx0Iik7Ci0KLSAgICBEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UyID0gQWRk
TWVzc2FnZSgmYmFyX2ZpbGUsICJUZXN0TWVzc2FnZTIiKTsKLSAgICBBZGRGaWVsZChtZXNzYWdl
MiwgImZvbyIsIDEsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX1JF
UVVJUkVELAotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX1NUUklORyk7
Ci0gICAgQWRkRmllbGQobWVzc2FnZTIsICJiYXIiLCAyLAotICAgICAgICAgICAgIEZpZWxkRGVz
Y3JpcHRvclByb3RvOjpMQUJFTF9SRVFVSVJFRCwKLSAgICAgICAgICAgICBGaWVsZERlc2NyaXB0
b3JQcm90bzo6VFlQRV9TVFJJTkcpOwotICAgIEFkZEZpZWxkKG1lc3NhZ2UyLCAicXV1eCIsIDYs
Ci0gICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX1JFUVVJUkVELAotICAg
ICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX1NUUklORyk7Ci0KLSAgICBGaWxl
RGVzY3JpcHRvclByb3RvIG1hcF9maWxlOwotICAgIG1hcF9maWxlLnNldF9uYW1lKCJtYXAucHJv
dG8iKTsKLSAgICBEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2UzID0gQWRkTWVzc2FnZSgmbWFwX2Zp
bGUsICJUZXN0TWVzc2FnZTMiKTsKLQotICAgIERlc2NyaXB0b3JQcm90byogZW50cnkgPSBBZGRO
ZXN0ZWRNZXNzYWdlKG1lc3NhZ2UzLCAiTWFwSW50MzJJbnQzMkVudHJ5Iik7Ci0gICAgQWRkRmll
bGQoZW50cnksICJrZXkiLCAxLAotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpM
QUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9J
TlQzMik7Ci0gICAgQWRkRmllbGQoZW50cnksICJ2YWx1ZSIsIDIsCi0gICAgICAgICAgICAgRmll
bGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAgIEZpZWxkRGVz
Y3JpcHRvclByb3RvOjpUWVBFX0lOVDMyKTsKLSAgICBlbnRyeS0+bXV0YWJsZV9vcHRpb25zKCkt
PnNldF9tYXBfZW50cnkodHJ1ZSk7Ci0KLSAgICBBZGRGaWVsZChtZXNzYWdlMywgIm1hcF9pbnQz
Ml9pbnQzMiIsIDEsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX1JF
UEVBVEVELAotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX01FU1NBR0Up
Ci0gICAgICAgIC0+c2V0X3R5cGVfbmFtZSgiTWFwSW50MzJJbnQzMkVudHJ5Iik7Ci0KLSAgICBG
aWxlRGVzY3JpcHRvclByb3RvIGpzb25fZmlsZTsKLSAgICBqc29uX2ZpbGUuc2V0X25hbWUoImpz
b24ucHJvdG8iKTsKLSAgICBqc29uX2ZpbGUuc2V0X3N5bnRheCgicHJvdG8zIik7Ci0gICAgRGVz
Y3JpcHRvclByb3RvKiBtZXNzYWdlNCA9IEFkZE1lc3NhZ2UoJmpzb25fZmlsZSwgIlRlc3RNZXNz
YWdlNCIpOwotICAgIEFkZEZpZWxkKG1lc3NhZ2U0LCAiZmllbGRfbmFtZTEiLCAxLAotICAgICAg
ICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAg
ICBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9JTlQzMik7Ci0gICAgQWRkRmllbGQobWVzc2Fn
ZTQsICJmaWVsZE5hbWUyIiwgMiwKLSAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6
TEFCRUxfT1BUSU9OQUwsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVf
SU5UMzIpOwotICAgIEFkZEZpZWxkKG1lc3NhZ2U0LCAiRmllbGROYW1lMyIsIDMsCi0gICAgICAg
ICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAg
IEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX0lOVDMyKTsKLSAgICBBZGRGaWVsZChtZXNzYWdl
NCwgIl9maWVsZF9uYW1lNCIsIDQsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86
OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBF
X0lOVDMyKTsKLSAgICBBZGRGaWVsZChtZXNzYWdlNCwgIkZJRUxEX05BTUU1IiwgNSwKLSAgICAg
ICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6TEFCRUxfT1BUSU9OQUwsCi0gICAgICAgICAg
ICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfSU5UMzIpOwotICAgIEFkZEZpZWxkKG1lc3Nh
Z2U0LCAiZmllbGRfbmFtZTYiLCA2LAotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3Rv
OjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQ
RV9JTlQzMikKLSAgICAgICAgLT5zZXRfanNvbl9uYW1lKCJAdHlwZSIpOwotCi0gICAgLy8gQnVp
bGQgdGhlIGRlc2NyaXB0b3JzIGFuZCBnZXQgdGhlIHBvaW50ZXJzLgotICAgIGZvb19maWxlXyA9
IHBvb2xfLkJ1aWxkRmlsZShmb29fZmlsZSk7Ci0gICAgQVNTRVJUX1RSVUUoZm9vX2ZpbGVfICE9
IE5VTEwpOwotCi0gICAgYmFyX2ZpbGVfID0gcG9vbF8uQnVpbGRGaWxlKGJhcl9maWxlKTsKLSAg
ICBBU1NFUlRfVFJVRShiYXJfZmlsZV8gIT0gTlVMTCk7Ci0KLSAgICBtYXBfZmlsZV8gPSBwb29s
Xy5CdWlsZEZpbGUobWFwX2ZpbGUpOwotICAgIEFTU0VSVF9UUlVFKG1hcF9maWxlXyAhPSBOVUxM
KTsKLQotICAgIGpzb25fZmlsZV8gPSBwb29sXy5CdWlsZEZpbGUoanNvbl9maWxlKTsKLSAgICBB
U1NFUlRfVFJVRShqc29uX2ZpbGVfICE9IE5VTEwpOwotCi0gICAgQVNTRVJUX0VRKDEsIGZvb19m
aWxlXy0+ZW51bV90eXBlX2NvdW50KCkpOwotICAgIGVudW1fID0gZm9vX2ZpbGVfLT5lbnVtX3R5
cGUoMCk7Ci0KLSAgICBBU1NFUlRfRVEoMiwgZm9vX2ZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQo
KSk7Ci0gICAgZm9yZWlnbl8gPSBmb29fZmlsZV8tPm1lc3NhZ2VfdHlwZSgwKTsKLSAgICBtZXNz
YWdlXyA9IGZvb19maWxlXy0+bWVzc2FnZV90eXBlKDEpOwotCi0gICAgQVNTRVJUX0VRKDQsIG1l
c3NhZ2VfLT5maWVsZF9jb3VudCgpKTsKLSAgICBmb29fID0gbWVzc2FnZV8tPmZpZWxkKDApOwot
ICAgIGJhcl8gPSBtZXNzYWdlXy0+ZmllbGQoMSk7Ci0gICAgYmF6XyA9IG1lc3NhZ2VfLT5maWVs
ZCgyKTsKLSAgICBxdXhfID0gbWVzc2FnZV8tPmZpZWxkKDMpOwotCi0gICAgQVNTRVJUX0VRKDEs
IGJhcl9maWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCkpOwotICAgIG1lc3NhZ2UyXyA9IGJhcl9m
aWxlXy0+bWVzc2FnZV90eXBlKDApOwotCi0gICAgQVNTRVJUX0VRKDMsIG1lc3NhZ2UyXy0+Zmll
bGRfY291bnQoKSk7Ci0gICAgZm9vMl8gID0gbWVzc2FnZTJfLT5maWVsZCgwKTsKLSAgICBiYXIy
XyAgPSBtZXNzYWdlMl8tPmZpZWxkKDEpOwotICAgIHF1dXgyXyA9IG1lc3NhZ2UyXy0+ZmllbGQo
Mik7Ci0KLSAgICBBU1NFUlRfRVEoMSwgbWFwX2ZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKSk7
Ci0gICAgbWVzc2FnZTNfID0gbWFwX2ZpbGVfLT5tZXNzYWdlX3R5cGUoMCk7Ci0KLSAgICBBU1NF
UlRfRVEoMSwgbWVzc2FnZTNfLT5maWVsZF9jb3VudCgpKTsKLSAgICBtYXBfICA9IG1lc3NhZ2Uz
Xy0+ZmllbGQoMCk7Ci0KLSAgICBBU1NFUlRfRVEoMSwganNvbl9maWxlXy0+bWVzc2FnZV90eXBl
X2NvdW50KCkpOwotICAgIG1lc3NhZ2U0XyA9IGpzb25fZmlsZV8tPm1lc3NhZ2VfdHlwZSgwKTsK
LSAgfQotCi0gIHZvaWQgQ29weVdpdGhKc29uTmFtZShjb25zdCBEZXNjcmlwdG9yKiBtZXNzYWdl
LCBEZXNjcmlwdG9yUHJvdG8qIHByb3RvKSB7Ci0gICAgbWVzc2FnZS0+Q29weVRvKHByb3RvKTsK
LSAgICBtZXNzYWdlLT5Db3B5SnNvbk5hbWVUbyhwcm90byk7Ci0gIH0KLQotICBEZXNjcmlwdG9y
UG9vbCBwb29sXzsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRvciogZm9vX2ZpbGVfOwotICBjb25z
dCBGaWxlRGVzY3JpcHRvciogYmFyX2ZpbGVfOwotICBjb25zdCBGaWxlRGVzY3JpcHRvciogbWFw
X2ZpbGVfOwotICBjb25zdCBGaWxlRGVzY3JpcHRvcioganNvbl9maWxlXzsKLQotICBjb25zdCBE
ZXNjcmlwdG9yKiBtZXNzYWdlXzsKLSAgY29uc3QgRGVzY3JpcHRvciogbWVzc2FnZTJfOwotICBj
b25zdCBEZXNjcmlwdG9yKiBtZXNzYWdlM187Ci0gIGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2U0
XzsKLSAgY29uc3QgRGVzY3JpcHRvciogZm9yZWlnbl87Ci0gIGNvbnN0IEVudW1EZXNjcmlwdG9y
KiBlbnVtXzsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZvb187Ci0gIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogYmFyXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBiYXpfOwotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIHF1eF87Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmb28y
XzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBiYXIyXzsKLSAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBxdXV4Ml87Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBtYXBfOwotfTsKLQotVEVT
VF9GKERlc2NyaXB0b3JUZXN0LCBOYW1lKSB7Ci0gIEVYUEVDVF9FUSgiVGVzdE1lc3NhZ2UiLCBt
ZXNzYWdlXy0+bmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJUZXN0TWVzc2FnZSIsIG1lc3NhZ2VfLT5m
dWxsX25hbWUoKSk7Ci0gIEVYUEVDVF9FUShmb29fZmlsZV8sIG1lc3NhZ2VfLT5maWxlKCkpOwot
Ci0gIEVYUEVDVF9FUSgiVGVzdE1lc3NhZ2UyIiwgbWVzc2FnZTJfLT5uYW1lKCkpOwotICBFWFBF
Q1RfRVEoImNvcmdlLmdyYXVsdC5UZXN0TWVzc2FnZTIiLCBtZXNzYWdlMl8tPmZ1bGxfbmFtZSgp
KTsKLSAgRVhQRUNUX0VRKGJhcl9maWxlXywgbWVzc2FnZTJfLT5maWxlKCkpOwotfQotCi1URVNU
X0YoRGVzY3JpcHRvclRlc3QsIENvbnRhaW5pbmdUeXBlKSB7Ci0gIEVYUEVDVF9UUlVFKG1lc3Nh
Z2VfLT5jb250YWluaW5nX3R5cGUoKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZTJf
LT5jb250YWluaW5nX3R5cGUoKSA9PSBOVUxMKTsKLX0KLQotVEVTVF9GKERlc2NyaXB0b3JUZXN0
LCBGaWVsZHNCeUluZGV4KSB7Ci0gIEFTU0VSVF9FUSg0LCBtZXNzYWdlXy0+ZmllbGRfY291bnQo
KSk7Ci0gIEVYUEVDVF9FUShmb29fLCBtZXNzYWdlXy0+ZmllbGQoMCkpOwotICBFWFBFQ1RfRVEo
YmFyXywgbWVzc2FnZV8tPmZpZWxkKDEpKTsKLSAgRVhQRUNUX0VRKGJhel8sIG1lc3NhZ2VfLT5m
aWVsZCgyKSk7Ci0gIEVYUEVDVF9FUShxdXhfLCBtZXNzYWdlXy0+ZmllbGQoMykpOwotfQotCi1U
RVNUX0YoRGVzY3JpcHRvclRlc3QsIEZpbmRGaWVsZEJ5TmFtZSkgewotICAvLyBBbGwgbWVzc2Fn
ZXMgaW4gdGhlIHNhbWUgRGVzY3JpcHRvclBvb2wgc2hhcmUgYSBzaW5nbGUgbG9va3VwIHRhYmxl
IGZvcgotICAvLyBmaWVsZHMuICBTbywgaW4gYWRkaXRpb24gdG8gdGVzdGluZyB0aGF0IEZpbmRG
aWVsZEJ5TmFtZSBmaW5kcyB0aGUgZmllbGRzCi0gIC8vIG9mIHRoZSBtZXNzYWdlLCB3ZSBuZWVk
IHRvIHRlc3QgdGhhdCBpdCBkb2VzICpub3QqIGZpbmQgdGhlIGZpZWxkcyBvZgotICAvLyAqb3Ro
ZXIqIG1lc3NhZ2VzLgotCi0gIEVYUEVDVF9FUShmb29fLCBtZXNzYWdlXy0+RmluZEZpZWxkQnlO
YW1lKCJmb28iKSk7Ci0gIEVYUEVDVF9FUShiYXJfLCBtZXNzYWdlXy0+RmluZEZpZWxkQnlOYW1l
KCJiYXIiKSk7Ci0gIEVYUEVDVF9FUShiYXpfLCBtZXNzYWdlXy0+RmluZEZpZWxkQnlOYW1lKCJi
YXoiKSk7Ci0gIEVYUEVDVF9FUShxdXhfLCBtZXNzYWdlXy0+RmluZEZpZWxkQnlOYW1lKCJxdXgi
KSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2VfLT5GaW5kRmllbGRCeU5hbWUoIm5vX3N1Y2hfZmll
bGQiKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZV8tPkZpbmRGaWVsZEJ5TmFtZSgi
cXV1eCIpID09IE5VTEwpOwotCi0gIEVYUEVDVF9FUShmb28yXyAsIG1lc3NhZ2UyXy0+RmluZEZp
ZWxkQnlOYW1lKCJmb28iICkpOwotICBFWFBFQ1RfRVEoYmFyMl8gLCBtZXNzYWdlMl8tPkZpbmRG
aWVsZEJ5TmFtZSgiYmFyIiApKTsKLSAgRVhQRUNUX0VRKHF1dXgyXywgbWVzc2FnZTJfLT5GaW5k
RmllbGRCeU5hbWUoInF1dXgiKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UyXy0+RmluZEZpZWxk
QnlOYW1lKCJiYXoiKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZTJfLT5GaW5kRmll
bGRCeU5hbWUoInF1eCIpID09IE5VTEwpOwotfQotCi1URVNUX0YoRGVzY3JpcHRvclRlc3QsIEZp
bmRGaWVsZEJ5TnVtYmVyKSB7Ci0gIEVYUEVDVF9FUShmb29fLCBtZXNzYWdlXy0+RmluZEZpZWxk
QnlOdW1iZXIoMSkpOwotICBFWFBFQ1RfRVEoYmFyXywgbWVzc2FnZV8tPkZpbmRGaWVsZEJ5TnVt
YmVyKDYpKTsKLSAgRVhQRUNUX0VRKGJhel8sIG1lc3NhZ2VfLT5GaW5kRmllbGRCeU51bWJlcig1
MDAwMDAwMDApKTsKLSAgRVhQRUNUX0VRKHF1eF8sIG1lc3NhZ2VfLT5GaW5kRmllbGRCeU51bWJl
cigxNSkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlXy0+RmluZEZpZWxkQnlOdW1iZXIoODM3NTky
KSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZV8tPkZpbmRGaWVsZEJ5TnVtYmVyKDIp
ID09IE5VTEwpOwotCi0gIEVYUEVDVF9FUShmb28yXyAsIG1lc3NhZ2UyXy0+RmluZEZpZWxkQnlO
dW1iZXIoMSkpOwotICBFWFBFQ1RfRVEoYmFyMl8gLCBtZXNzYWdlMl8tPkZpbmRGaWVsZEJ5TnVt
YmVyKDIpKTsKLSAgRVhQRUNUX0VRKHF1dXgyXywgbWVzc2FnZTJfLT5GaW5kRmllbGRCeU51bWJl
cig2KSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UyXy0+RmluZEZpZWxkQnlOdW1iZXIoMTUpID09
IE5VTEwpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlMl8tPkZpbmRGaWVsZEJ5TnVtYmVyKDUwMDAw
MDAwMCkgPT0gTlVMTCk7Ci19Ci0KLVRFU1RfRihEZXNjcmlwdG9yVGVzdCwgRmllbGROYW1lKSB7
Ci0gIEVYUEVDVF9FUSgiZm9vIiwgZm9vXy0+bmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJiYXIiLCBi
YXJfLT5uYW1lKCkpOwotICBFWFBFQ1RfRVEoImJheiIsIGJhel8tPm5hbWUoKSk7Ci0gIEVYUEVD
VF9FUSgicXV4IiwgcXV4Xy0+bmFtZSgpKTsKLX0KLQotVEVTVF9GKERlc2NyaXB0b3JUZXN0LCBG
aWVsZEZ1bGxOYW1lKSB7Ci0gIEVYUEVDVF9FUSgiVGVzdE1lc3NhZ2UuZm9vIiwgZm9vXy0+ZnVs
bF9uYW1lKCkpOwotICBFWFBFQ1RfRVEoIlRlc3RNZXNzYWdlLmJhciIsIGJhcl8tPmZ1bGxfbmFt
ZSgpKTsKLSAgRVhQRUNUX0VRKCJUZXN0TWVzc2FnZS5iYXoiLCBiYXpfLT5mdWxsX25hbWUoKSk7
Ci0gIEVYUEVDVF9FUSgiVGVzdE1lc3NhZ2UucXV4IiwgcXV4Xy0+ZnVsbF9uYW1lKCkpOwotCi0g
IEVYUEVDVF9FUSgiY29yZ2UuZ3JhdWx0LlRlc3RNZXNzYWdlMi5mb28iLCBmb28yXy0+ZnVsbF9u
YW1lKCkpOwotICBFWFBFQ1RfRVEoImNvcmdlLmdyYXVsdC5UZXN0TWVzc2FnZTIuYmFyIiwgYmFy
Ml8tPmZ1bGxfbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJjb3JnZS5ncmF1bHQuVGVzdE1lc3NhZ2Uy
LnF1dXgiLCBxdXV4Ml8tPmZ1bGxfbmFtZSgpKTsKLX0KLQotVEVTVF9GKERlc2NyaXB0b3JUZXN0
LCBGaWVsZEpzb25OYW1lKSB7Ci0gIEVYUEVDVF9FUSgiZmllbGROYW1lMSIsIG1lc3NhZ2U0Xy0+
ZmllbGQoMCktPmpzb25fbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJmaWVsZE5hbWUyIiwgbWVzc2Fn
ZTRfLT5maWVsZCgxKS0+anNvbl9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImZpZWxkTmFtZTMiLCBt
ZXNzYWdlNF8tPmZpZWxkKDIpLT5qc29uX25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiZmllbGROYW1l
NCIsIG1lc3NhZ2U0Xy0+ZmllbGQoMyktPmpzb25fbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJmSUVM
RE5BTUU1IiwgbWVzc2FnZTRfLT5maWVsZCg0KS0+anNvbl9uYW1lKCkpOwotICBFWFBFQ1RfRVEo
IkB0eXBlIiwgbWVzc2FnZTRfLT5maWVsZCg1KS0+anNvbl9uYW1lKCkpOwotCi0gIERlc2NyaXB0
b3JQcm90byBwcm90bzsKLSAgbWVzc2FnZTRfLT5Db3B5VG8oJnByb3RvKTsKLSAgQVNTRVJUX0VR
KDYsIHByb3RvLmZpZWxkX3NpemUoKSk7Ci0gIEVYUEVDVF9GQUxTRShwcm90by5maWVsZCgwKS5o
YXNfanNvbl9uYW1lKCkpOwotICBFWFBFQ1RfRkFMU0UocHJvdG8uZmllbGQoMSkuaGFzX2pzb25f
bmFtZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKHByb3RvLmZpZWxkKDIpLmhhc19qc29uX25hbWUoKSk7
Ci0gIEVYUEVDVF9GQUxTRShwcm90by5maWVsZCgzKS5oYXNfanNvbl9uYW1lKCkpOwotICBFWFBF
Q1RfRkFMU0UocHJvdG8uZmllbGQoNCkuaGFzX2pzb25fbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJA
dHlwZSIsIHByb3RvLmZpZWxkKDUpLmpzb25fbmFtZSgpKTsKLQotICBwcm90by5DbGVhcigpOwot
ICBDb3B5V2l0aEpzb25OYW1lKG1lc3NhZ2U0XywgJnByb3RvKTsKLSAgQVNTRVJUX0VRKDYsIHBy
b3RvLmZpZWxkX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgiZmllbGROYW1lMSIsIHByb3RvLmZpZWxk
KDApLmpzb25fbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJmaWVsZE5hbWUyIiwgcHJvdG8uZmllbGQo
MSkuanNvbl9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImZpZWxkTmFtZTMiLCBwcm90by5maWVsZCgy
KS5qc29uX25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiZmllbGROYW1lNCIsIHByb3RvLmZpZWxkKDMp
Lmpzb25fbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJmSUVMRE5BTUU1IiwgcHJvdG8uZmllbGQoNCku
anNvbl9uYW1lKCkpOwotICBFWFBFQ1RfRVEoIkB0eXBlIiwgcHJvdG8uZmllbGQoNSkuanNvbl9u
YW1lKCkpOwotfQotCi1URVNUX0YoRGVzY3JpcHRvclRlc3QsIEZpZWxkRmlsZSkgewotICBFWFBF
Q1RfRVEoZm9vX2ZpbGVfLCBmb29fLT5maWxlKCkpOwotICBFWFBFQ1RfRVEoZm9vX2ZpbGVfLCBi
YXJfLT5maWxlKCkpOwotICBFWFBFQ1RfRVEoZm9vX2ZpbGVfLCBiYXpfLT5maWxlKCkpOwotICBF
WFBFQ1RfRVEoZm9vX2ZpbGVfLCBxdXhfLT5maWxlKCkpOwotCi0gIEVYUEVDVF9FUShiYXJfZmls
ZV8sIGZvbzJfLT5maWxlKCkpOwotICBFWFBFQ1RfRVEoYmFyX2ZpbGVfLCBiYXIyXy0+ZmlsZSgp
KTsKLSAgRVhQRUNUX0VRKGJhcl9maWxlXywgcXV1eDJfLT5maWxlKCkpOwotfQotCi1URVNUX0Yo
RGVzY3JpcHRvclRlc3QsIEZpZWxkSW5kZXgpIHsKLSAgRVhQRUNUX0VRKDAsIGZvb18tPmluZGV4
KCkpOwotICBFWFBFQ1RfRVEoMSwgYmFyXy0+aW5kZXgoKSk7Ci0gIEVYUEVDVF9FUSgyLCBiYXpf
LT5pbmRleCgpKTsKLSAgRVhQRUNUX0VRKDMsIHF1eF8tPmluZGV4KCkpOwotfQotCi1URVNUX0Yo
RGVzY3JpcHRvclRlc3QsIEZpZWxkTnVtYmVyKSB7Ci0gIEVYUEVDVF9FUSggICAgICAgIDEsIGZv
b18tPm51bWJlcigpKTsKLSAgRVhQRUNUX0VRKCAgICAgICAgNiwgYmFyXy0+bnVtYmVyKCkpOwot
ICBFWFBFQ1RfRVEoNTAwMDAwMDAwLCBiYXpfLT5udW1iZXIoKSk7Ci0gIEVYUEVDVF9FUSggICAg
ICAgMTUsIHF1eF8tPm51bWJlcigpKTsKLX0KLQotVEVTVF9GKERlc2NyaXB0b3JUZXN0LCBGaWVs
ZFR5cGUpIHsKLSAgRVhQRUNUX0VRKEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcgLCBmb29f
LT50eXBlKCkpOwotICBFWFBFQ1RfRVEoRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU0gICAsIGJh
cl8tPnR5cGUoKSk7Ci0gIEVYUEVDVF9FUShGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRSwg
YmF6Xy0+dHlwZSgpKTsKLSAgRVhQRUNUX0VRKEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCAg
LCBxdXhfLT50eXBlKCkpOwotfQotCi1URVNUX0YoRGVzY3JpcHRvclRlc3QsIEZpZWxkTGFiZWwp
IHsKLSAgRVhQRUNUX0VRKEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfUkVRVUlSRUQsIGZvb18tPmxh
YmVsKCkpOwotICBFWFBFQ1RfRVEoRmllbGREZXNjcmlwdG9yOjpMQUJFTF9PUFRJT05BTCwgYmFy
Xy0+bGFiZWwoKSk7Ci0gIEVYUEVDVF9FUShGaWVsZERlc2NyaXB0b3I6OkxBQkVMX1JFUEVBVEVE
LCBiYXpfLT5sYWJlbCgpKTsKLSAgRVhQRUNUX0VRKEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfT1BU
SU9OQUwsIHF1eF8tPmxhYmVsKCkpOwotCi0gIEVYUEVDVF9UUlVFIChmb29fLT5pc19yZXF1aXJl
ZCgpKTsKLSAgRVhQRUNUX0ZBTFNFKGZvb18tPmlzX29wdGlvbmFsKCkpOwotICBFWFBFQ1RfRkFM
U0UoZm9vXy0+aXNfcmVwZWF0ZWQoKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKGJhcl8tPmlzX3JlcXVp
cmVkKCkpOwotICBFWFBFQ1RfVFJVRSAoYmFyXy0+aXNfb3B0aW9uYWwoKSk7Ci0gIEVYUEVDVF9G
QUxTRShiYXJfLT5pc19yZXBlYXRlZCgpKTsKLQotICBFWFBFQ1RfRkFMU0UoYmF6Xy0+aXNfcmVx
dWlyZWQoKSk7Ci0gIEVYUEVDVF9GQUxTRShiYXpfLT5pc19vcHRpb25hbCgpKTsKLSAgRVhQRUNU
X1RSVUUgKGJhel8tPmlzX3JlcGVhdGVkKCkpOwotfQotCi1URVNUX0YoRGVzY3JpcHRvclRlc3Qs
IElzTWFwKSB7Ci0gIEVYUEVDVF9UUlVFKG1hcF8tPmlzX21hcCgpKTsKLSAgRVhQRUNUX0ZBTFNF
KGJhel8tPmlzX21hcCgpKTsKLSAgRVhQRUNUX1RSVUUobWFwXy0+bWVzc2FnZV90eXBlKCktPm9w
dGlvbnMoKS5tYXBfZW50cnkoKSk7Ci19Ci0KLVRFU1RfRihEZXNjcmlwdG9yVGVzdCwgRmllbGRI
YXNEZWZhdWx0KSB7Ci0gIEVYUEVDVF9GQUxTRShmb29fLT5oYXNfZGVmYXVsdF92YWx1ZSgpKTsK
LSAgRVhQRUNUX0ZBTFNFKGJhcl8tPmhhc19kZWZhdWx0X3ZhbHVlKCkpOwotICBFWFBFQ1RfRkFM
U0UoYmF6Xy0+aGFzX2RlZmF1bHRfdmFsdWUoKSk7Ci0gIEVYUEVDVF9GQUxTRShxdXhfLT5oYXNf
ZGVmYXVsdF92YWx1ZSgpKTsKLX0KLQotVEVTVF9GKERlc2NyaXB0b3JUZXN0LCBGaWVsZENvbnRh
aW5pbmdUeXBlKSB7Ci0gIEVYUEVDVF9FUShtZXNzYWdlXywgZm9vXy0+Y29udGFpbmluZ190eXBl
KCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZV8sIGJhcl8tPmNvbnRhaW5pbmdfdHlwZSgpKTsKLSAg
RVhQRUNUX0VRKG1lc3NhZ2VfLCBiYXpfLT5jb250YWluaW5nX3R5cGUoKSk7Ci0gIEVYUEVDVF9F
UShtZXNzYWdlXywgcXV4Xy0+Y29udGFpbmluZ190eXBlKCkpOwotCi0gIEVYUEVDVF9FUShtZXNz
YWdlMl8sIGZvbzJfIC0+Y29udGFpbmluZ190eXBlKCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZTJf
LCBiYXIyXyAtPmNvbnRhaW5pbmdfdHlwZSgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UyXywgcXV1
eDJfLT5jb250YWluaW5nX3R5cGUoKSk7Ci19Ci0KLVRFU1RfRihEZXNjcmlwdG9yVGVzdCwgRmll
bGRNZXNzYWdlVHlwZSkgewotICBFWFBFQ1RfVFJVRShmb29fLT5tZXNzYWdlX3R5cGUoKSA9PSBO
VUxMKTsKLSAgRVhQRUNUX1RSVUUoYmFyXy0+bWVzc2FnZV90eXBlKCkgPT0gTlVMTCk7Ci0KLSAg
RVhQRUNUX0VRKGZvcmVpZ25fLCBiYXpfLT5tZXNzYWdlX3R5cGUoKSk7Ci0gIEVYUEVDVF9FUShm
b3JlaWduXywgcXV4Xy0+bWVzc2FnZV90eXBlKCkpOwotfQotCi1URVNUX0YoRGVzY3JpcHRvclRl
c3QsIEZpZWxkRW51bVR5cGUpIHsKLSAgRVhQRUNUX1RSVUUoZm9vXy0+ZW51bV90eXBlKCkgPT0g
TlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGJhel8tPmVudW1fdHlwZSgpID09IE5VTEwpOwotICBFWFBF
Q1RfVFJVRShxdXhfLT5lbnVtX3R5cGUoKSA9PSBOVUxMKTsKLQotICBFWFBFQ1RfRVEoZW51bV8s
IGJhcl8tPmVudW1fdHlwZSgpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vLyBUZXN0IHNpbXBs
ZSBmbGF0IG1lc3NhZ2VzIGFuZCBmaWVsZHMuCi1jbGFzcyBPbmVvZkRlc2NyaXB0b3JUZXN0IDog
cHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB2b2lkIFNldFVw
KCkgewotICAgIC8vIEJ1aWxkIGRlc2NyaXB0b3JzIGZvciB0aGUgZm9sbG93aW5nIGRlZmluaXRp
b25zOgotICAgIC8vCi0gICAgLy8gICBwYWNrYWdlIGdhcnBseTsKLSAgICAvLyAgIG1lc3NhZ2Ug
VGVzdE9uZW9mIHsKLSAgICAvLyAgICAgb3B0aW9uYWwgaW50MzIgYSA9IDE7Ci0gICAgLy8gICAg
IG9uZW9mIGZvbyB7Ci0gICAgLy8gICAgICAgc3RyaW5nIGIgPSAyOwotICAgIC8vICAgICAgIFRl
c3RPbmVvZiBjID0gMzsKLSAgICAvLyAgICAgfQotICAgIC8vICAgICBvbmVvZiBiYXIgewotICAg
IC8vICAgICAgIGZsb2F0IGQgPSA0OwotICAgIC8vICAgICB9Ci0gICAgLy8gICB9Ci0KLSAgICBG
aWxlRGVzY3JpcHRvclByb3RvIGJhel9maWxlOwotICAgIGJhel9maWxlLnNldF9uYW1lKCJiYXou
cHJvdG8iKTsKLSAgICBiYXpfZmlsZS5zZXRfcGFja2FnZSgiZ2FycGx5Iik7Ci0KLSAgICBEZXNj
cmlwdG9yUHJvdG8qIG9uZW9mX21lc3NhZ2UgPSBBZGRNZXNzYWdlKCZiYXpfZmlsZSwgIlRlc3RP
bmVvZiIpOwotICAgIG9uZW9mX21lc3NhZ2UtPmFkZF9vbmVvZl9kZWNsKCktPnNldF9uYW1lKCJm
b28iKTsKLSAgICBvbmVvZl9tZXNzYWdlLT5hZGRfb25lb2ZfZGVjbCgpLT5zZXRfbmFtZSgiYmFy
Iik7Ci0KLSAgICBBZGRGaWVsZChvbmVvZl9tZXNzYWdlLCAiYSIsIDEsCi0gICAgICAgICAgICAg
RmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAgIEZpZWxk
RGVzY3JpcHRvclByb3RvOjpUWVBFX0lOVDMyKTsKLSAgICBBZGRGaWVsZChvbmVvZl9tZXNzYWdl
LCAiYiIsIDIsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElP
TkFMLAotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX1NUUklORyk7Ci0g
ICAgb25lb2ZfbWVzc2FnZS0+bXV0YWJsZV9maWVsZCgxKS0+c2V0X29uZW9mX2luZGV4KDApOwot
ICAgIEFkZEZpZWxkKG9uZW9mX21lc3NhZ2UsICJjIiwgMywKLSAgICAgICAgICAgICBGaWVsZERl
c2NyaXB0b3JQcm90bzo6TEFCRUxfT1BUSU9OQUwsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlw
dG9yUHJvdG86OlRZUEVfTUVTU0FHRSk7Ci0gICAgb25lb2ZfbWVzc2FnZS0+bXV0YWJsZV9maWVs
ZCgyKS0+c2V0X29uZW9mX2luZGV4KDApOwotICAgIG9uZW9mX21lc3NhZ2UtPm11dGFibGVfZmll
bGQoMiktPnNldF90eXBlX25hbWUoIlRlc3RPbmVvZiIpOwotCi0gICAgQWRkRmllbGQob25lb2Zf
bWVzc2FnZSwgImQiLCA0LAotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJF
TF9PUFRJT05BTCwKLSAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9GTE9B
VCk7Ci0gICAgb25lb2ZfbWVzc2FnZS0+bXV0YWJsZV9maWVsZCgzKS0+c2V0X29uZW9mX2luZGV4
KDEpOwotCi0gICAgLy8gQnVpbGQgdGhlIGRlc2NyaXB0b3JzIGFuZCBnZXQgdGhlIHBvaW50ZXJz
LgotICAgIGJhel9maWxlXyA9IHBvb2xfLkJ1aWxkRmlsZShiYXpfZmlsZSk7Ci0gICAgQVNTRVJU
X1RSVUUoYmF6X2ZpbGVfICE9IE5VTEwpOwotCi0gICAgQVNTRVJUX0VRKDEsIGJhel9maWxlXy0+
bWVzc2FnZV90eXBlX2NvdW50KCkpOwotICAgIG9uZW9mX21lc3NhZ2VfID0gYmF6X2ZpbGVfLT5t
ZXNzYWdlX3R5cGUoMCk7Ci0KLSAgICBBU1NFUlRfRVEoMiwgb25lb2ZfbWVzc2FnZV8tPm9uZW9m
X2RlY2xfY291bnQoKSk7Ci0gICAgb25lb2ZfID0gb25lb2ZfbWVzc2FnZV8tPm9uZW9mX2RlY2wo
MCk7Ci0gICAgb25lb2YyXyA9IG9uZW9mX21lc3NhZ2VfLT5vbmVvZl9kZWNsKDEpOwotCi0gICAg
QVNTRVJUX0VRKDQsIG9uZW9mX21lc3NhZ2VfLT5maWVsZF9jb3VudCgpKTsKLSAgICBhXyA9IG9u
ZW9mX21lc3NhZ2VfLT5maWVsZCgwKTsKLSAgICBiXyA9IG9uZW9mX21lc3NhZ2VfLT5maWVsZCgx
KTsKLSAgICBjXyA9IG9uZW9mX21lc3NhZ2VfLT5maWVsZCgyKTsKLSAgICBkXyA9IG9uZW9mX21l
c3NhZ2VfLT5maWVsZCgzKTsKLSAgfQotCi0gIERlc2NyaXB0b3JQb29sIHBvb2xfOwotCi0gIGNv
bnN0IEZpbGVEZXNjcmlwdG9yKiBiYXpfZmlsZV87Ci0KLSAgY29uc3QgRGVzY3JpcHRvciogb25l
b2ZfbWVzc2FnZV87Ci0KLSAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZl87Ci0gIGNvbnN0
IE9uZW9mRGVzY3JpcHRvciogb25lb2YyXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBhXzsK
LSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBiXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBj
XzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBlXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmXzsKLX07Ci0KLVRFU1RfRihPbmVvZkRl
c2NyaXB0b3JUZXN0LCBOb3JtYWwpIHsKLSAgRVhQRUNUX0VRKCJmb28iLCBvbmVvZl8tPm5hbWUo
KSk7Ci0gIEVYUEVDVF9FUSgiZ2FycGx5LlRlc3RPbmVvZi5mb28iLCBvbmVvZl8tPmZ1bGxfbmFt
ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG9uZW9mXy0+aW5kZXgoKSk7Ci0gIEFTU0VSVF9FUSgyLCBv
bmVvZl8tPmZpZWxkX2NvdW50KCkpOwotICBFWFBFQ1RfRVEoYl8sIG9uZW9mXy0+ZmllbGQoMCkp
OwotICBFWFBFQ1RfRVEoY18sIG9uZW9mXy0+ZmllbGQoMSkpOwotICBFWFBFQ1RfVFJVRShhXy0+
Y29udGFpbmluZ19vbmVvZigpID09IE5VTEwpOwotICBFWFBFQ1RfRVEob25lb2ZfLCBiXy0+Y29u
dGFpbmluZ19vbmVvZigpKTsKLSAgRVhQRUNUX0VRKG9uZW9mXywgY18tPmNvbnRhaW5pbmdfb25l
b2YoKSk7Ci19Ci0KLVRFU1RfRihPbmVvZkRlc2NyaXB0b3JUZXN0LCBGaW5kQnlOYW1lKSB7Ci0g
IEVYUEVDVF9FUShvbmVvZl8sIG9uZW9mX21lc3NhZ2VfLT5GaW5kT25lb2ZCeU5hbWUoImZvbyIp
KTsKLSAgRVhQRUNUX0VRKG9uZW9mMl8sIG9uZW9mX21lc3NhZ2VfLT5GaW5kT25lb2ZCeU5hbWUo
ImJhciIpKTsKLSAgRVhQRUNUX1RSVUUob25lb2ZfbWVzc2FnZV8tPkZpbmRPbmVvZkJ5TmFtZSgi
bm9fc3VjaF9vbmVvZiIpID09IE5VTEwpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWNsYXNzIFN0
eWxpemVkRmllbGROYW1lc1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVk
OgotICB2b2lkIFNldFVwKCkgewotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZTsKLSAgICBm
aWxlLnNldF9uYW1lKCJmb28ucHJvdG8iKTsKLQotICAgIEFkZEV4dGVuc2lvblJhbmdlKEFkZE1l
c3NhZ2UoJmZpbGUsICJFeHRlbmRhYmxlTWVzc2FnZSIpLCAxLCAxMDAwKTsKLQotICAgIERlc2Ny
aXB0b3JQcm90byogbWVzc2FnZSA9IEFkZE1lc3NhZ2UoJmZpbGUsICJUZXN0TWVzc2FnZSIpOwot
ICAgIEFkZEZpZWxkKG1lc3NhZ2UsICJmb29fZm9vIiwgMSwKLSAgICAgICAgICAgICBGaWVsZERl
c2NyaXB0b3JQcm90bzo6TEFCRUxfT1BUSU9OQUwsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlw
dG9yUHJvdG86OlRZUEVfSU5UMzIpOwotICAgIEFkZEZpZWxkKG1lc3NhZ2UsICJGb29CYXIiLCAy
LAotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAg
ICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9JTlQzMik7Ci0gICAgQWRkRmll
bGQobWVzc2FnZSwgImZvb0JheiIsIDMsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJv
dG86OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpU
WVBFX0lOVDMyKTsKLSAgICBBZGRGaWVsZChtZXNzYWdlLCAiZm9vRm9vIiwgNCwgIC8vIENhbWVs
LWNhc2UgY29uZmxpY3Qgd2l0aCBmb29fZm9vLgotICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRv
clByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90
bzo6VFlQRV9JTlQzMik7Ci0gICAgQWRkRmllbGQobWVzc2FnZSwgImZvb2JhciIsIDUsICAvLyBM
b3dlci1jYXNlIGNvbmZsaWN0IHdpdGggRm9vQmFyLgotICAgICAgICAgICAgIEZpZWxkRGVzY3Jp
cHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQ
cm90bzo6VFlQRV9JTlQzMik7Ci0KLSAgICBBZGROZXN0ZWRFeHRlbnNpb24obWVzc2FnZSwgIkV4
dGVuZGFibGVNZXNzYWdlIiwgImJhcl9mb28iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICBG
aWVsZERlc2NyaXB0b3JQcm90bzo6TEFCRUxfT1BUSU9OQUwsCi0gICAgICAgICAgICAgICAgICAg
ICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX0lOVDMyKTsKLSAgICBBZGROZXN0ZWRFeHRl
bnNpb24obWVzc2FnZSwgIkV4dGVuZGFibGVNZXNzYWdlIiwgIkJhckJhciIsIDIsCi0gICAgICAg
ICAgICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfSU5UMzIpOwot
ICAgIEFkZE5lc3RlZEV4dGVuc2lvbihtZXNzYWdlLCAiRXh0ZW5kYWJsZU1lc3NhZ2UiLCAiQmFy
QmF6IiwgMywKLSAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxB
QkVMX09QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90
bzo6VFlQRV9JTlQzMik7Ci0gICAgQWRkTmVzdGVkRXh0ZW5zaW9uKG1lc3NhZ2UsICJFeHRlbmRh
YmxlTWVzc2FnZSIsICJiYXJGb28iLCA0LCAgLy8gQ29uZmxpY3QKLSAgICAgICAgICAgICAgICAg
ICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAg
ICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9JTlQzMik7Ci0gICAgQWRkTmVz
dGVkRXh0ZW5zaW9uKG1lc3NhZ2UsICJFeHRlbmRhYmxlTWVzc2FnZSIsICJiYXJiYXIiLCA1LCAg
Ly8gQ29uZmxpY3QKLSAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86
OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQ
cm90bzo6VFlQRV9JTlQzMik7Ci0KLSAgICBBZGRFeHRlbnNpb24oJmZpbGUsICJFeHRlbmRhYmxl
TWVzc2FnZSIsICJiYXpfZm9vIiwgMTEsCi0gICAgICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRv
clByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9y
UHJvdG86OlRZUEVfSU5UMzIpOwotICAgIEFkZEV4dGVuc2lvbigmZmlsZSwgIkV4dGVuZGFibGVN
ZXNzYWdlIiwgIkJhekJhciIsIDEyLAotICAgICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQ
cm90bzo6TEFCRUxfT1BUSU9OQUwsCi0gICAgICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclBy
b3RvOjpUWVBFX0lOVDMyKTsKLSAgICBBZGRFeHRlbnNpb24oJmZpbGUsICJFeHRlbmRhYmxlTWVz
c2FnZSIsICJCYXpCYXoiLCAxMywKLSAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJv
dG86OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90
bzo6VFlQRV9JTlQzMik7Ci0gICAgQWRkRXh0ZW5zaW9uKCZmaWxlLCAiRXh0ZW5kYWJsZU1lc3Nh
Z2UiLCAiYmF6Rm9vIiwgMTQsICAvLyBDb25mbGljdAotICAgICAgICAgICAgICAgICBGaWVsZERl
c2NyaXB0b3JQcm90bzo6TEFCRUxfT1BUSU9OQUwsCi0gICAgICAgICAgICAgICAgIEZpZWxkRGVz
Y3JpcHRvclByb3RvOjpUWVBFX0lOVDMyKTsKLSAgICBBZGRFeHRlbnNpb24oJmZpbGUsICJFeHRl
bmRhYmxlTWVzc2FnZSIsICJiYXpiYXIiLCAxNSwgIC8vIENvbmZsaWN0Ci0gICAgICAgICAgICAg
ICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAgICAg
ICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfSU5UMzIpOwotCi0gICAgZmlsZV8gPSBwb29s
Xy5CdWlsZEZpbGUoZmlsZSk7Ci0gICAgQVNTRVJUX1RSVUUoZmlsZV8gIT0gTlVMTCk7Ci0gICAg
QVNTRVJUX0VRKDIsIGZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKSk7Ci0gICAgbWVzc2FnZV8g
PSBmaWxlXy0+bWVzc2FnZV90eXBlKDEpOwotICAgIEFTU0VSVF9FUSgiVGVzdE1lc3NhZ2UiLCBt
ZXNzYWdlXy0+bmFtZSgpKTsKLSAgICBBU1NFUlRfRVEoNSwgbWVzc2FnZV8tPmZpZWxkX2NvdW50
KCkpOwotICAgIEFTU0VSVF9FUSg1LCBtZXNzYWdlXy0+ZXh0ZW5zaW9uX2NvdW50KCkpOwotICAg
IEFTU0VSVF9FUSg1LCBmaWxlXy0+ZXh0ZW5zaW9uX2NvdW50KCkpOwotICB9Ci0KLSAgRGVzY3Jp
cHRvclBvb2wgcG9vbF87Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlXzsKLSAgY29uc3Qg
RGVzY3JpcHRvciogbWVzc2FnZV87Ci19OwotCi1URVNUX0YoU3R5bGl6ZWRGaWVsZE5hbWVzVGVz
dCwgTG93ZXJjYXNlTmFtZSkgewotICBFWFBFQ1RfRVEoImZvb19mb28iLCBtZXNzYWdlXy0+Zmll
bGQoMCktPmxvd2VyY2FzZV9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImZvb2JhciIgLCBtZXNzYWdl
Xy0+ZmllbGQoMSktPmxvd2VyY2FzZV9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImZvb2JheiIgLCBt
ZXNzYWdlXy0+ZmllbGQoMiktPmxvd2VyY2FzZV9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImZvb2Zv
byIgLCBtZXNzYWdlXy0+ZmllbGQoMyktPmxvd2VyY2FzZV9uYW1lKCkpOwotICBFWFBFQ1RfRVEo
ImZvb2JhciIgLCBtZXNzYWdlXy0+ZmllbGQoNCktPmxvd2VyY2FzZV9uYW1lKCkpOwotCi0gIEVY
UEVDVF9FUSgiYmFyX2ZvbyIsIG1lc3NhZ2VfLT5leHRlbnNpb24oMCktPmxvd2VyY2FzZV9uYW1l
KCkpOwotICBFWFBFQ1RfRVEoImJhcmJhciIgLCBtZXNzYWdlXy0+ZXh0ZW5zaW9uKDEpLT5sb3dl
cmNhc2VfbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJiYXJiYXoiICwgbWVzc2FnZV8tPmV4dGVuc2lv
bigyKS0+bG93ZXJjYXNlX25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiYmFyZm9vIiAsIG1lc3NhZ2Vf
LT5leHRlbnNpb24oMyktPmxvd2VyY2FzZV9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImJhcmJhciIg
LCBtZXNzYWdlXy0+ZXh0ZW5zaW9uKDQpLT5sb3dlcmNhc2VfbmFtZSgpKTsKLQotICBFWFBFQ1Rf
RVEoImJhel9mb28iLCBmaWxlXy0+ZXh0ZW5zaW9uKDApLT5sb3dlcmNhc2VfbmFtZSgpKTsKLSAg
RVhQRUNUX0VRKCJiYXpiYXIiICwgZmlsZV8tPmV4dGVuc2lvbigxKS0+bG93ZXJjYXNlX25hbWUo
KSk7Ci0gIEVYUEVDVF9FUSgiYmF6YmF6IiAsIGZpbGVfLT5leHRlbnNpb24oMiktPmxvd2VyY2Fz
ZV9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImJhemZvbyIgLCBmaWxlXy0+ZXh0ZW5zaW9uKDMpLT5s
b3dlcmNhc2VfbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJiYXpiYXIiICwgZmlsZV8tPmV4dGVuc2lv
big0KS0+bG93ZXJjYXNlX25hbWUoKSk7Ci19Ci0KLVRFU1RfRihTdHlsaXplZEZpZWxkTmFtZXNU
ZXN0LCBDYW1lbGNhc2VOYW1lKSB7Ci0gIEVYUEVDVF9FUSgiZm9vRm9vIiwgbWVzc2FnZV8tPmZp
ZWxkKDApLT5jYW1lbGNhc2VfbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJmb29CYXIiLCBtZXNzYWdl
Xy0+ZmllbGQoMSktPmNhbWVsY2FzZV9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImZvb0JheiIsIG1l
c3NhZ2VfLT5maWVsZCgyKS0+Y2FtZWxjYXNlX25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiZm9vRm9v
IiwgbWVzc2FnZV8tPmZpZWxkKDMpLT5jYW1lbGNhc2VfbmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJm
b29iYXIiLCBtZXNzYWdlXy0+ZmllbGQoNCktPmNhbWVsY2FzZV9uYW1lKCkpOwotCi0gIEVYUEVD
VF9FUSgiYmFyRm9vIiwgbWVzc2FnZV8tPmV4dGVuc2lvbigwKS0+Y2FtZWxjYXNlX25hbWUoKSk7
Ci0gIEVYUEVDVF9FUSgiYmFyQmFyIiwgbWVzc2FnZV8tPmV4dGVuc2lvbigxKS0+Y2FtZWxjYXNl
X25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiYmFyQmF6IiwgbWVzc2FnZV8tPmV4dGVuc2lvbigyKS0+
Y2FtZWxjYXNlX25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiYmFyRm9vIiwgbWVzc2FnZV8tPmV4dGVu
c2lvbigzKS0+Y2FtZWxjYXNlX25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiYmFyYmFyIiwgbWVzc2Fn
ZV8tPmV4dGVuc2lvbig0KS0+Y2FtZWxjYXNlX25hbWUoKSk7Ci0KLSAgRVhQRUNUX0VRKCJiYXpG
b28iLCBmaWxlXy0+ZXh0ZW5zaW9uKDApLT5jYW1lbGNhc2VfbmFtZSgpKTsKLSAgRVhQRUNUX0VR
KCJiYXpCYXIiLCBmaWxlXy0+ZXh0ZW5zaW9uKDEpLT5jYW1lbGNhc2VfbmFtZSgpKTsKLSAgRVhQ
RUNUX0VRKCJiYXpCYXoiLCBmaWxlXy0+ZXh0ZW5zaW9uKDIpLT5jYW1lbGNhc2VfbmFtZSgpKTsK
LSAgRVhQRUNUX0VRKCJiYXpGb28iLCBmaWxlXy0+ZXh0ZW5zaW9uKDMpLT5jYW1lbGNhc2VfbmFt
ZSgpKTsKLSAgRVhQRUNUX0VRKCJiYXpiYXIiLCBmaWxlXy0+ZXh0ZW5zaW9uKDQpLT5jYW1lbGNh
c2VfbmFtZSgpKTsKLX0KLQotVEVTVF9GKFN0eWxpemVkRmllbGROYW1lc1Rlc3QsIEZpbmRCeUxv
d2VyY2FzZU5hbWUpIHsKLSAgRVhQRUNUX0VRKG1lc3NhZ2VfLT5maWVsZCgwKSwKLSAgICAgICAg
ICAgIG1lc3NhZ2VfLT5GaW5kRmllbGRCeUxvd2VyY2FzZU5hbWUoImZvb19mb28iKSk7Ci0gIEVY
UEVDVF9FUShtZXNzYWdlXy0+ZmllbGQoMSksCi0gICAgICAgICAgICBtZXNzYWdlXy0+RmluZEZp
ZWxkQnlMb3dlcmNhc2VOYW1lKCJmb29iYXIiKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlXy0+Zmll
bGQoMiksCi0gICAgICAgICAgICBtZXNzYWdlXy0+RmluZEZpZWxkQnlMb3dlcmNhc2VOYW1lKCJm
b29iYXoiKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2VfLT5GaW5kRmllbGRCeUxvd2VyY2FzZU5h
bWUoIkZvb0JhciIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlXy0+RmluZEZpZWxk
QnlMb3dlcmNhc2VOYW1lKCJmb29CYXoiKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2Fn
ZV8tPkZpbmRGaWVsZEJ5TG93ZXJjYXNlTmFtZSgiYmFyX2ZvbyIpID09IE5VTEwpOwotICBFWFBF
Q1RfVFJVRShtZXNzYWdlXy0+RmluZEZpZWxkQnlMb3dlcmNhc2VOYW1lKCJub3N1Y2hmaWVsZCIp
ID09IE5VTEwpOwotCi0gIEVYUEVDVF9FUShtZXNzYWdlXy0+ZXh0ZW5zaW9uKDApLAotICAgICAg
ICAgICAgbWVzc2FnZV8tPkZpbmRFeHRlbnNpb25CeUxvd2VyY2FzZU5hbWUoImJhcl9mb28iKSk7
Ci0gIEVYUEVDVF9FUShtZXNzYWdlXy0+ZXh0ZW5zaW9uKDEpLAotICAgICAgICAgICAgbWVzc2Fn
ZV8tPkZpbmRFeHRlbnNpb25CeUxvd2VyY2FzZU5hbWUoImJhcmJhciIpKTsKLSAgRVhQRUNUX0VR
KG1lc3NhZ2VfLT5leHRlbnNpb24oMiksCi0gICAgICAgICAgICBtZXNzYWdlXy0+RmluZEV4dGVu
c2lvbkJ5TG93ZXJjYXNlTmFtZSgiYmFyYmF6IikpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlXy0+
RmluZEV4dGVuc2lvbkJ5TG93ZXJjYXNlTmFtZSgiQmFyQmFyIikgPT0gTlVMTCk7Ci0gIEVYUEVD
VF9UUlVFKG1lc3NhZ2VfLT5GaW5kRXh0ZW5zaW9uQnlMb3dlcmNhc2VOYW1lKCJiYXJCYXoiKSA9
PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZV8tPkZpbmRFeHRlbnNpb25CeUxvd2VyY2Fz
ZU5hbWUoImZvb19mb28iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZV8tPkZpbmRF
eHRlbnNpb25CeUxvd2VyY2FzZU5hbWUoIm5vc3VjaGZpZWxkIikgPT0gTlVMTCk7Ci0KLSAgRVhQ
RUNUX0VRKGZpbGVfLT5leHRlbnNpb24oMCksCi0gICAgICAgICAgICBmaWxlXy0+RmluZEV4dGVu
c2lvbkJ5TG93ZXJjYXNlTmFtZSgiYmF6X2ZvbyIpKTsKLSAgRVhQRUNUX0VRKGZpbGVfLT5leHRl
bnNpb24oMSksCi0gICAgICAgICAgICBmaWxlXy0+RmluZEV4dGVuc2lvbkJ5TG93ZXJjYXNlTmFt
ZSgiYmF6YmFyIikpOwotICBFWFBFQ1RfRVEoZmlsZV8tPmV4dGVuc2lvbigyKSwKLSAgICAgICAg
ICAgIGZpbGVfLT5GaW5kRXh0ZW5zaW9uQnlMb3dlcmNhc2VOYW1lKCJiYXpiYXoiKSk7Ci0gIEVY
UEVDVF9UUlVFKGZpbGVfLT5GaW5kRXh0ZW5zaW9uQnlMb3dlcmNhc2VOYW1lKCJCYXpCYXIiKSA9
PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoZmlsZV8tPkZpbmRFeHRlbnNpb25CeUxvd2VyY2FzZU5h
bWUoImJhekJheiIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShmaWxlXy0+RmluZEV4dGVuc2lv
bkJ5TG93ZXJjYXNlTmFtZSgibm9zdWNoZmllbGQiKSA9PSBOVUxMKTsKLX0KLQotVEVTVF9GKFN0
eWxpemVkRmllbGROYW1lc1Rlc3QsIEZpbmRCeUNhbWVsY2FzZU5hbWUpIHsKLSAgRVhQRUNUX0VR
KG1lc3NhZ2VfLT5maWVsZCgwKSwKLSAgICAgICAgICAgIG1lc3NhZ2VfLT5GaW5kRmllbGRCeUNh
bWVsY2FzZU5hbWUoImZvb0ZvbyIpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2VfLT5maWVsZCgxKSwK
LSAgICAgICAgICAgIG1lc3NhZ2VfLT5GaW5kRmllbGRCeUNhbWVsY2FzZU5hbWUoImZvb0JhciIp
KTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2VfLT5maWVsZCgyKSwKLSAgICAgICAgICAgIG1lc3NhZ2Vf
LT5GaW5kRmllbGRCeUNhbWVsY2FzZU5hbWUoImZvb0JheiIpKTsKLSAgRVhQRUNUX1RSVUUobWVz
c2FnZV8tPkZpbmRGaWVsZEJ5Q2FtZWxjYXNlTmFtZSgiZm9vX2ZvbyIpID09IE5VTEwpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlXy0+RmluZEZpZWxkQnlDYW1lbGNhc2VOYW1lKCJGb29CYXIiKSA9
PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZV8tPkZpbmRGaWVsZEJ5Q2FtZWxjYXNlTmFt
ZSgiYmFyRm9vIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2VfLT5GaW5kRmllbGRC
eUNhbWVsY2FzZU5hbWUoIm5vc3VjaGZpZWxkIikgPT0gTlVMTCk7Ci0KLSAgRVhQRUNUX0VRKG1l
c3NhZ2VfLT5leHRlbnNpb24oMCksCi0gICAgICAgICAgICBtZXNzYWdlXy0+RmluZEV4dGVuc2lv
bkJ5Q2FtZWxjYXNlTmFtZSgiYmFyRm9vIikpOwotICBFWFBFQ1RfRVEobWVzc2FnZV8tPmV4dGVu
c2lvbigxKSwKLSAgICAgICAgICAgIG1lc3NhZ2VfLT5GaW5kRXh0ZW5zaW9uQnlDYW1lbGNhc2VO
YW1lKCJiYXJCYXIiKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlXy0+ZXh0ZW5zaW9uKDIpLAotICAg
ICAgICAgICAgbWVzc2FnZV8tPkZpbmRFeHRlbnNpb25CeUNhbWVsY2FzZU5hbWUoImJhckJheiIp
KTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZV8tPkZpbmRFeHRlbnNpb25CeUNhbWVsY2FzZU5hbWUo
ImJhcl9mb28iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZV8tPkZpbmRFeHRlbnNp
b25CeUNhbWVsY2FzZU5hbWUoIkJhckJhciIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShtZXNz
YWdlXy0+RmluZEV4dGVuc2lvbkJ5Q2FtZWxjYXNlTmFtZSgiZm9vRm9vIikgPT0gTlVMTCk7Ci0g
IEVYUEVDVF9UUlVFKG1lc3NhZ2VfLT5GaW5kRXh0ZW5zaW9uQnlDYW1lbGNhc2VOYW1lKCJub3N1
Y2hmaWVsZCIpID09IE5VTEwpOwotCi0gIEVYUEVDVF9FUShmaWxlXy0+ZXh0ZW5zaW9uKDApLAot
ICAgICAgICAgICAgZmlsZV8tPkZpbmRFeHRlbnNpb25CeUNhbWVsY2FzZU5hbWUoImJhekZvbyIp
KTsKLSAgRVhQRUNUX0VRKGZpbGVfLT5leHRlbnNpb24oMSksCi0gICAgICAgICAgICBmaWxlXy0+
RmluZEV4dGVuc2lvbkJ5Q2FtZWxjYXNlTmFtZSgiYmF6QmFyIikpOwotICBFWFBFQ1RfRVEoZmls
ZV8tPmV4dGVuc2lvbigyKSwKLSAgICAgICAgICAgIGZpbGVfLT5GaW5kRXh0ZW5zaW9uQnlDYW1l
bGNhc2VOYW1lKCJiYXpCYXoiKSk7Ci0gIEVYUEVDVF9UUlVFKGZpbGVfLT5GaW5kRXh0ZW5zaW9u
QnlDYW1lbGNhc2VOYW1lKCJiYXpfZm9vIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGZpbGVf
LT5GaW5kRXh0ZW5zaW9uQnlDYW1lbGNhc2VOYW1lKCJCYXpCYXIiKSA9PSBOVUxMKTsKLSAgRVhQ
RUNUX1RSVUUoZmlsZV8tPkZpbmRFeHRlbnNpb25CeUNhbWVsY2FzZU5hbWUoIm5vc3VjaGZpZWxk
IikgPT0gTlVMTCk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLy8gVGVzdCBlbnVtIGRlc2NyaXB0
b3JzLgotY2xhc3MgRW51bURlc2NyaXB0b3JUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qgewot
IHByb3RlY3RlZDoKLSAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIC8vIEJ1aWxkIGRlc2Ny
aXB0b3JzIGZvciB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zOgotICAgIC8vCi0gICAgLy8gICAv
LyBpbiAiZm9vLnByb3RvIgotICAgIC8vICAgZW51bSBUZXN0RW51bSB7Ci0gICAgLy8gICAgIEZP
TyA9IDE7Ci0gICAgLy8gICAgIEJBUiA9IDI7Ci0gICAgLy8gICB9Ci0gICAgLy8KLSAgICAvLyAg
IC8vIGluICJiYXIucHJvdG8iCi0gICAgLy8gICBwYWNrYWdlIGNvcmdlLmdyYXVsdDsKLSAgICAv
LyAgIGVudW0gVGVzdEVudW0yIHsKLSAgICAvLyAgICAgRk9PID0gMTsKLSAgICAvLyAgICAgQkFa
ID0gMzsKLSAgICAvLyAgIH0KLSAgICAvLwotICAgIC8vIFRlc3RFbnVtMiBpcyBwcmltYXJpbHkg
aGVyZSB0byB0ZXN0IEZpbmRWYWx1ZUJ5TmFtZSBhbmQgZnJpZW5kcy4KLSAgICAvLyBBbGwgZW51
bXMgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIERlc2NyaXB0b3JQb29sIHNoYXJlIHRoZSBzYW1lIGxv
b2t1cAotICAgIC8vIHRhYmxlLCBzbyB3ZSBuZWVkIHRvIGluc3VyZSB0aGF0IHRoZXkgZG9uJ3Qg
aW50ZXJmZXJlLgotCi0gICAgLy8gVGVzdEVudW0KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZv
b19maWxlOwotICAgIGZvb19maWxlLnNldF9uYW1lKCJmb28ucHJvdG8iKTsKLQotICAgIEVudW1E
ZXNjcmlwdG9yUHJvdG8qIGVudW1fcHJvdG8gPSBBZGRFbnVtKCZmb29fZmlsZSwgIlRlc3RFbnVt
Iik7Ci0gICAgQWRkRW51bVZhbHVlKGVudW1fcHJvdG8sICJGT08iLCAxKTsKLSAgICBBZGRFbnVt
VmFsdWUoZW51bV9wcm90bywgIkJBUiIsIDIpOwotCi0gICAgLy8gVGVzdEVudW0yCi0gICAgRmls
ZURlc2NyaXB0b3JQcm90byBiYXJfZmlsZTsKLSAgICBiYXJfZmlsZS5zZXRfbmFtZSgiYmFyLnBy
b3RvIik7Ci0gICAgYmFyX2ZpbGUuc2V0X3BhY2thZ2UoImNvcmdlLmdyYXVsdCIpOwotCi0gICAg
RW51bURlc2NyaXB0b3JQcm90byogZW51bTJfcHJvdG8gPSBBZGRFbnVtKCZiYXJfZmlsZSwgIlRl
c3RFbnVtMiIpOwotICAgIEFkZEVudW1WYWx1ZShlbnVtMl9wcm90bywgIkZPTyIsIDEpOwotICAg
IEFkZEVudW1WYWx1ZShlbnVtMl9wcm90bywgIkJBWiIsIDMpOwotCi0gICAgLy8gQnVpbGQgdGhl
IGRlc2NyaXB0b3JzIGFuZCBnZXQgdGhlIHBvaW50ZXJzLgotICAgIGZvb19maWxlXyA9IHBvb2xf
LkJ1aWxkRmlsZShmb29fZmlsZSk7Ci0gICAgQVNTRVJUX1RSVUUoZm9vX2ZpbGVfICE9IE5VTEwp
OwotCi0gICAgYmFyX2ZpbGVfID0gcG9vbF8uQnVpbGRGaWxlKGJhcl9maWxlKTsKLSAgICBBU1NF
UlRfVFJVRShiYXJfZmlsZV8gIT0gTlVMTCk7Ci0KLSAgICBBU1NFUlRfRVEoMSwgZm9vX2ZpbGVf
LT5lbnVtX3R5cGVfY291bnQoKSk7Ci0gICAgZW51bV8gPSBmb29fZmlsZV8tPmVudW1fdHlwZSgw
KTsKLQotICAgIEFTU0VSVF9FUSgyLCBlbnVtXy0+dmFsdWVfY291bnQoKSk7Ci0gICAgZm9vXyA9
IGVudW1fLT52YWx1ZSgwKTsKLSAgICBiYXJfID0gZW51bV8tPnZhbHVlKDEpOwotCi0gICAgQVNT
RVJUX0VRKDEsIGJhcl9maWxlXy0+ZW51bV90eXBlX2NvdW50KCkpOwotICAgIGVudW0yXyA9IGJh
cl9maWxlXy0+ZW51bV90eXBlKDApOwotCi0gICAgQVNTRVJUX0VRKDIsIGVudW0yXy0+dmFsdWVf
Y291bnQoKSk7Ci0gICAgZm9vMl8gPSBlbnVtMl8tPnZhbHVlKDApOwotICAgIGJhejJfID0gZW51
bTJfLT52YWx1ZSgxKTsKLSAgfQotCi0gIERlc2NyaXB0b3JQb29sIHBvb2xfOwotCi0gIGNvbnN0
IEZpbGVEZXNjcmlwdG9yKiBmb29fZmlsZV87Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBiYXJf
ZmlsZV87Ci0KLSAgY29uc3QgRW51bURlc2NyaXB0b3IqIGVudW1fOwotICBjb25zdCBFbnVtRGVz
Y3JpcHRvciogZW51bTJfOwotCi0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGZvb187Ci0g
IGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGJhcl87Ci0KLSAgY29uc3QgRW51bVZhbHVlRGVz
Y3JpcHRvciogZm9vMl87Ci0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGJhejJfOwotfTsK
LQotVEVTVF9GKEVudW1EZXNjcmlwdG9yVGVzdCwgTmFtZSkgewotICBFWFBFQ1RfRVEoIlRlc3RF
bnVtIiwgZW51bV8tPm5hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiVGVzdEVudW0iLCBlbnVtXy0+ZnVs
bF9uYW1lKCkpOwotICBFWFBFQ1RfRVEoZm9vX2ZpbGVfLCBlbnVtXy0+ZmlsZSgpKTsKLQotICBF
WFBFQ1RfRVEoIlRlc3RFbnVtMiIsIGVudW0yXy0+bmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJjb3Jn
ZS5ncmF1bHQuVGVzdEVudW0yIiwgZW51bTJfLT5mdWxsX25hbWUoKSk7Ci0gIEVYUEVDVF9FUShi
YXJfZmlsZV8sIGVudW0yXy0+ZmlsZSgpKTsKLX0KLQotVEVTVF9GKEVudW1EZXNjcmlwdG9yVGVz
dCwgQ29udGFpbmluZ1R5cGUpIHsKLSAgRVhQRUNUX1RSVUUoZW51bV8tPmNvbnRhaW5pbmdfdHlw
ZSgpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShlbnVtMl8tPmNvbnRhaW5pbmdfdHlwZSgpID09
IE5VTEwpOwotfQotCi1URVNUX0YoRW51bURlc2NyaXB0b3JUZXN0LCBWYWx1ZXNCeUluZGV4KSB7
Ci0gIEFTU0VSVF9FUSgyLCBlbnVtXy0+dmFsdWVfY291bnQoKSk7Ci0gIEVYUEVDVF9FUShmb29f
LCBlbnVtXy0+dmFsdWUoMCkpOwotICBFWFBFQ1RfRVEoYmFyXywgZW51bV8tPnZhbHVlKDEpKTsK
LX0KLQotVEVTVF9GKEVudW1EZXNjcmlwdG9yVGVzdCwgRmluZFZhbHVlQnlOYW1lKSB7Ci0gIEVY
UEVDVF9FUShmb29fICwgZW51bV8gLT5GaW5kVmFsdWVCeU5hbWUoIkZPTyIpKTsKLSAgRVhQRUNU
X0VRKGJhcl8gLCBlbnVtXyAtPkZpbmRWYWx1ZUJ5TmFtZSgiQkFSIikpOwotICBFWFBFQ1RfRVEo
Zm9vMl8sIGVudW0yXy0+RmluZFZhbHVlQnlOYW1lKCJGT08iKSk7Ci0gIEVYUEVDVF9FUShiYXoy
XywgZW51bTJfLT5GaW5kVmFsdWVCeU5hbWUoIkJBWiIpKTsKLQotICBFWFBFQ1RfVFJVRShlbnVt
XyAtPkZpbmRWYWx1ZUJ5TmFtZSgiTk9fU1VDSF9WQUxVRSIpID09IE5VTEwpOwotICBFWFBFQ1Rf
VFJVRShlbnVtXyAtPkZpbmRWYWx1ZUJ5TmFtZSgiQkFaIiAgICAgICAgICApID09IE5VTEwpOwot
ICBFWFBFQ1RfVFJVRShlbnVtMl8tPkZpbmRWYWx1ZUJ5TmFtZSgiQkFSIiAgICAgICAgICApID09
IE5VTEwpOwotfQotCi1URVNUX0YoRW51bURlc2NyaXB0b3JUZXN0LCBGaW5kVmFsdWVCeU51bWJl
cikgewotICBFWFBFQ1RfRVEoZm9vXyAsIGVudW1fIC0+RmluZFZhbHVlQnlOdW1iZXIoMSkpOwot
ICBFWFBFQ1RfRVEoYmFyXyAsIGVudW1fIC0+RmluZFZhbHVlQnlOdW1iZXIoMikpOwotICBFWFBF
Q1RfRVEoZm9vMl8sIGVudW0yXy0+RmluZFZhbHVlQnlOdW1iZXIoMSkpOwotICBFWFBFQ1RfRVEo
YmF6Ml8sIGVudW0yXy0+RmluZFZhbHVlQnlOdW1iZXIoMykpOwotCi0gIEVYUEVDVF9UUlVFKGVu
dW1fIC0+RmluZFZhbHVlQnlOdW1iZXIoNDE2KSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoZW51
bV8gLT5GaW5kVmFsdWVCeU51bWJlcigzKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoZW51bTJf
LT5GaW5kVmFsdWVCeU51bWJlcigyKSA9PSBOVUxMKTsKLX0KLQotVEVTVF9GKEVudW1EZXNjcmlw
dG9yVGVzdCwgVmFsdWVOYW1lKSB7Ci0gIEVYUEVDVF9FUSgiRk9PIiwgZm9vXy0+bmFtZSgpKTsK
LSAgRVhQRUNUX0VRKCJCQVIiLCBiYXJfLT5uYW1lKCkpOwotfQotCi1URVNUX0YoRW51bURlc2Ny
aXB0b3JUZXN0LCBWYWx1ZUZ1bGxOYW1lKSB7Ci0gIEVYUEVDVF9FUSgiRk9PIiwgZm9vXy0+ZnVs
bF9uYW1lKCkpOwotICBFWFBFQ1RfRVEoIkJBUiIsIGJhcl8tPmZ1bGxfbmFtZSgpKTsKLSAgRVhQ
RUNUX0VRKCJjb3JnZS5ncmF1bHQuRk9PIiwgZm9vMl8tPmZ1bGxfbmFtZSgpKTsKLSAgRVhQRUNU
X0VRKCJjb3JnZS5ncmF1bHQuQkFaIiwgYmF6Ml8tPmZ1bGxfbmFtZSgpKTsKLX0KLQotVEVTVF9G
KEVudW1EZXNjcmlwdG9yVGVzdCwgVmFsdWVJbmRleCkgewotICBFWFBFQ1RfRVEoMCwgZm9vXy0+
aW5kZXgoKSk7Ci0gIEVYUEVDVF9FUSgxLCBiYXJfLT5pbmRleCgpKTsKLX0KLQotVEVTVF9GKEVu
dW1EZXNjcmlwdG9yVGVzdCwgVmFsdWVOdW1iZXIpIHsKLSAgRVhQRUNUX0VRKDEsIGZvb18tPm51
bWJlcigpKTsKLSAgRVhQRUNUX0VRKDIsIGJhcl8tPm51bWJlcigpKTsKLX0KLQotVEVTVF9GKEVu
dW1EZXNjcmlwdG9yVGVzdCwgVmFsdWVUeXBlKSB7Ci0gIEVYUEVDVF9FUShlbnVtXyAsIGZvb18g
LT50eXBlKCkpOwotICBFWFBFQ1RfRVEoZW51bV8gLCBiYXJfIC0+dHlwZSgpKTsKLSAgRVhQRUNU
X0VRKGVudW0yXywgZm9vMl8tPnR5cGUoKSk7Ci0gIEVYUEVDVF9FUShlbnVtMl8sIGJhejJfLT50
eXBlKCkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS8vIFRlc3Qgc2VydmljZSBkZXNjcmlwdG9y
cy4KLWNsYXNzIFNlcnZpY2VEZXNjcmlwdG9yVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsK
LSBwcm90ZWN0ZWQ6Ci0gIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsKLSAgICAvLyBCdWlsZCBkZXNj
cmlwdG9ycyBmb3IgdGhlIGZvbGxvd2luZyBtZXNzYWdlcyBhbmQgc2VydmljZToKLSAgICAvLyAg
ICAvLyBpbiAiZm9vLnByb3RvIgotICAgIC8vICAgIG1lc3NhZ2UgRm9vUmVxdWVzdCAge30KLSAg
ICAvLyAgICBtZXNzYWdlIEZvb1Jlc3BvbnNlIHt9Ci0gICAgLy8gICAgbWVzc2FnZSBCYXJSZXF1
ZXN0ICB7fQotICAgIC8vICAgIG1lc3NhZ2UgQmFyUmVzcG9uc2Uge30KLSAgICAvLyAgICBtZXNz
YWdlIEJhelJlcXVlc3QgIHt9Ci0gICAgLy8gICAgbWVzc2FnZSBCYXpSZXNwb25zZSB7fQotICAg
IC8vCi0gICAgLy8gICAgc2VydmljZSBUZXN0U2VydmljZSB7Ci0gICAgLy8gICAgICBycGMgRm9v
KEZvb1JlcXVlc3QpIHJldHVybnMgKEZvb1Jlc3BvbnNlKTsKLSAgICAvLyAgICAgIHJwYyBCYXIo
QmFyUmVxdWVzdCkgcmV0dXJucyAoQmFyUmVzcG9uc2UpOwotICAgIC8vICAgIH0KLSAgICAvLwot
ICAgIC8vICAgIC8vIGluICJiYXIucHJvdG8iCi0gICAgLy8gICAgcGFja2FnZSBjb3JnZS5ncmF1
bHQKLSAgICAvLyAgICBzZXJ2aWNlIFRlc3RTZXJ2aWNlMiB7Ci0gICAgLy8gICAgICBycGMgRm9v
KEZvb1JlcXVlc3QpIHJldHVybnMgKEZvb1Jlc3BvbnNlKTsKLSAgICAvLyAgICAgIHJwYyBCYXoo
QmF6UmVxdWVzdCkgcmV0dXJucyAoQmF6UmVzcG9uc2UpOwotICAgIC8vICAgIH0KLQotICAgIEZp
bGVEZXNjcmlwdG9yUHJvdG8gZm9vX2ZpbGU7Ci0gICAgZm9vX2ZpbGUuc2V0X25hbWUoImZvby5w
cm90byIpOwotCi0gICAgQWRkTWVzc2FnZSgmZm9vX2ZpbGUsICJGb29SZXF1ZXN0Iik7Ci0gICAg
QWRkTWVzc2FnZSgmZm9vX2ZpbGUsICJGb29SZXNwb25zZSIpOwotICAgIEFkZE1lc3NhZ2UoJmZv
b19maWxlLCAiQmFyUmVxdWVzdCIpOwotICAgIEFkZE1lc3NhZ2UoJmZvb19maWxlLCAiQmFyUmVz
cG9uc2UiKTsKLSAgICBBZGRNZXNzYWdlKCZmb29fZmlsZSwgIkJhelJlcXVlc3QiKTsKLSAgICBB
ZGRNZXNzYWdlKCZmb29fZmlsZSwgIkJhelJlc3BvbnNlIik7Ci0KLSAgICBTZXJ2aWNlRGVzY3Jp
cHRvclByb3RvKiBzZXJ2aWNlID0gQWRkU2VydmljZSgmZm9vX2ZpbGUsICJUZXN0U2VydmljZSIp
OwotICAgIEFkZE1ldGhvZChzZXJ2aWNlLCAiRm9vIiwgIkZvb1JlcXVlc3QiLCAiRm9vUmVzcG9u
c2UiKTsKLSAgICBBZGRNZXRob2Qoc2VydmljZSwgIkJhciIsICJCYXJSZXF1ZXN0IiwgIkJhclJl
c3BvbnNlIik7Ci0KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGJhcl9maWxlOwotICAgIGJhcl9m
aWxlLnNldF9uYW1lKCJiYXIucHJvdG8iKTsKLSAgICBiYXJfZmlsZS5zZXRfcGFja2FnZSgiY29y
Z2UuZ3JhdWx0Iik7Ci0gICAgYmFyX2ZpbGUuYWRkX2RlcGVuZGVuY3koImZvby5wcm90byIpOwot
Ci0gICAgU2VydmljZURlc2NyaXB0b3JQcm90byogc2VydmljZTIgPSBBZGRTZXJ2aWNlKCZiYXJf
ZmlsZSwgIlRlc3RTZXJ2aWNlMiIpOwotICAgIEFkZE1ldGhvZChzZXJ2aWNlMiwgIkZvbyIsICJG
b29SZXF1ZXN0IiwgIkZvb1Jlc3BvbnNlIik7Ci0gICAgQWRkTWV0aG9kKHNlcnZpY2UyLCAiQmF6
IiwgIkJhelJlcXVlc3QiLCAiQmF6UmVzcG9uc2UiKTsKLQotICAgIC8vIEJ1aWxkIHRoZSBkZXNj
cmlwdG9ycyBhbmQgZ2V0IHRoZSBwb2ludGVycy4KLSAgICBmb29fZmlsZV8gPSBwb29sXy5CdWls
ZEZpbGUoZm9vX2ZpbGUpOwotICAgIEFTU0VSVF9UUlVFKGZvb19maWxlXyAhPSBOVUxMKTsKLQot
ICAgIGJhcl9maWxlXyA9IHBvb2xfLkJ1aWxkRmlsZShiYXJfZmlsZSk7Ci0gICAgQVNTRVJUX1RS
VUUoYmFyX2ZpbGVfICE9IE5VTEwpOwotCi0gICAgQVNTRVJUX0VRKDYsIGZvb19maWxlXy0+bWVz
c2FnZV90eXBlX2NvdW50KCkpOwotICAgIGZvb19yZXF1ZXN0XyAgPSBmb29fZmlsZV8tPm1lc3Nh
Z2VfdHlwZSgwKTsKLSAgICBmb29fcmVzcG9uc2VfID0gZm9vX2ZpbGVfLT5tZXNzYWdlX3R5cGUo
MSk7Ci0gICAgYmFyX3JlcXVlc3RfICA9IGZvb19maWxlXy0+bWVzc2FnZV90eXBlKDIpOwotICAg
IGJhcl9yZXNwb25zZV8gPSBmb29fZmlsZV8tPm1lc3NhZ2VfdHlwZSgzKTsKLSAgICBiYXpfcmVx
dWVzdF8gID0gZm9vX2ZpbGVfLT5tZXNzYWdlX3R5cGUoNCk7Ci0gICAgYmF6X3Jlc3BvbnNlXyA9
IGZvb19maWxlXy0+bWVzc2FnZV90eXBlKDUpOwotCi0gICAgQVNTRVJUX0VRKDEsIGZvb19maWxl
Xy0+c2VydmljZV9jb3VudCgpKTsKLSAgICBzZXJ2aWNlXyA9IGZvb19maWxlXy0+c2VydmljZSgw
KTsKLQotICAgIEFTU0VSVF9FUSgyLCBzZXJ2aWNlXy0+bWV0aG9kX2NvdW50KCkpOwotICAgIGZv
b18gPSBzZXJ2aWNlXy0+bWV0aG9kKDApOwotICAgIGJhcl8gPSBzZXJ2aWNlXy0+bWV0aG9kKDEp
OwotCi0gICAgQVNTRVJUX0VRKDEsIGJhcl9maWxlXy0+c2VydmljZV9jb3VudCgpKTsKLSAgICBz
ZXJ2aWNlMl8gPSBiYXJfZmlsZV8tPnNlcnZpY2UoMCk7Ci0KLSAgICBBU1NFUlRfRVEoMiwgc2Vy
dmljZTJfLT5tZXRob2RfY291bnQoKSk7Ci0gICAgZm9vMl8gPSBzZXJ2aWNlMl8tPm1ldGhvZCgw
KTsKLSAgICBiYXoyXyA9IHNlcnZpY2UyXy0+bWV0aG9kKDEpOwotICB9Ci0KLSAgRGVzY3JpcHRv
clBvb2wgcG9vbF87Ci0KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZvb19maWxlXzsKLSAgY29u
c3QgRmlsZURlc2NyaXB0b3IqIGJhcl9maWxlXzsKLQotICBjb25zdCBEZXNjcmlwdG9yKiBmb29f
cmVxdWVzdF87Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGZvb19yZXNwb25zZV87Ci0gIGNvbnN0IERl
c2NyaXB0b3IqIGJhcl9yZXF1ZXN0XzsKLSAgY29uc3QgRGVzY3JpcHRvciogYmFyX3Jlc3BvbnNl
XzsKLSAgY29uc3QgRGVzY3JpcHRvciogYmF6X3JlcXVlc3RfOwotICBjb25zdCBEZXNjcmlwdG9y
KiBiYXpfcmVzcG9uc2VfOwotCi0gIGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yKiBzZXJ2aWNlXzsK
LSAgY29uc3QgU2VydmljZURlc2NyaXB0b3IqIHNlcnZpY2UyXzsKLQotICBjb25zdCBNZXRob2RE
ZXNjcmlwdG9yKiBmb29fOwotICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBiYXJfOwotCi0gIGNv
bnN0IE1ldGhvZERlc2NyaXB0b3IqIGZvbzJfOwotICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBi
YXoyXzsKLX07Ci0KLVRFU1RfRihTZXJ2aWNlRGVzY3JpcHRvclRlc3QsIE5hbWUpIHsKLSAgRVhQ
RUNUX0VRKCJUZXN0U2VydmljZSIsIHNlcnZpY2VfLT5uYW1lKCkpOwotICBFWFBFQ1RfRVEoIlRl
c3RTZXJ2aWNlIiwgc2VydmljZV8tPmZ1bGxfbmFtZSgpKTsKLSAgRVhQRUNUX0VRKGZvb19maWxl
Xywgc2VydmljZV8tPmZpbGUoKSk7Ci0KLSAgRVhQRUNUX0VRKCJUZXN0U2VydmljZTIiLCBzZXJ2
aWNlMl8tPm5hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiY29yZ2UuZ3JhdWx0LlRlc3RTZXJ2aWNlMiIs
IHNlcnZpY2UyXy0+ZnVsbF9uYW1lKCkpOwotICBFWFBFQ1RfRVEoYmFyX2ZpbGVfLCBzZXJ2aWNl
Ml8tPmZpbGUoKSk7Ci19Ci0KLVRFU1RfRihTZXJ2aWNlRGVzY3JpcHRvclRlc3QsIE1ldGhvZHNC
eUluZGV4KSB7Ci0gIEFTU0VSVF9FUSgyLCBzZXJ2aWNlXy0+bWV0aG9kX2NvdW50KCkpOwotICBF
WFBFQ1RfRVEoZm9vXywgc2VydmljZV8tPm1ldGhvZCgwKSk7Ci0gIEVYUEVDVF9FUShiYXJfLCBz
ZXJ2aWNlXy0+bWV0aG9kKDEpKTsKLX0KLQotVEVTVF9GKFNlcnZpY2VEZXNjcmlwdG9yVGVzdCwg
RmluZE1ldGhvZEJ5TmFtZSkgewotICBFWFBFQ1RfRVEoZm9vXyAsIHNlcnZpY2VfIC0+RmluZE1l
dGhvZEJ5TmFtZSgiRm9vIikpOwotICBFWFBFQ1RfRVEoYmFyXyAsIHNlcnZpY2VfIC0+RmluZE1l
dGhvZEJ5TmFtZSgiQmFyIikpOwotICBFWFBFQ1RfRVEoZm9vMl8sIHNlcnZpY2UyXy0+RmluZE1l
dGhvZEJ5TmFtZSgiRm9vIikpOwotICBFWFBFQ1RfRVEoYmF6Ml8sIHNlcnZpY2UyXy0+RmluZE1l
dGhvZEJ5TmFtZSgiQmF6IikpOwotCi0gIEVYUEVDVF9UUlVFKHNlcnZpY2VfIC0+RmluZE1ldGhv
ZEJ5TmFtZSgiTm9TdWNoTWV0aG9kIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKHNlcnZpY2Vf
IC0+RmluZE1ldGhvZEJ5TmFtZSgiQmF6IiAgICAgICAgICkgPT0gTlVMTCk7Ci0gIEVYUEVDVF9U
UlVFKHNlcnZpY2UyXy0+RmluZE1ldGhvZEJ5TmFtZSgiQmFyIiAgICAgICAgICkgPT0gTlVMTCk7
Ci19Ci0KLVRFU1RfRihTZXJ2aWNlRGVzY3JpcHRvclRlc3QsIE1ldGhvZE5hbWUpIHsKLSAgRVhQ
RUNUX0VRKCJGb28iLCBmb29fLT5uYW1lKCkpOwotICBFWFBFQ1RfRVEoIkJhciIsIGJhcl8tPm5h
bWUoKSk7Ci19Ci0KLVRFU1RfRihTZXJ2aWNlRGVzY3JpcHRvclRlc3QsIE1ldGhvZEZ1bGxOYW1l
KSB7Ci0gIEVYUEVDVF9FUSgiVGVzdFNlcnZpY2UuRm9vIiwgZm9vXy0+ZnVsbF9uYW1lKCkpOwot
ICBFWFBFQ1RfRVEoIlRlc3RTZXJ2aWNlLkJhciIsIGJhcl8tPmZ1bGxfbmFtZSgpKTsKLSAgRVhQ
RUNUX0VRKCJjb3JnZS5ncmF1bHQuVGVzdFNlcnZpY2UyLkZvbyIsIGZvbzJfLT5mdWxsX25hbWUo
KSk7Ci0gIEVYUEVDVF9FUSgiY29yZ2UuZ3JhdWx0LlRlc3RTZXJ2aWNlMi5CYXoiLCBiYXoyXy0+
ZnVsbF9uYW1lKCkpOwotfQotCi1URVNUX0YoU2VydmljZURlc2NyaXB0b3JUZXN0LCBNZXRob2RJ
bmRleCkgewotICBFWFBFQ1RfRVEoMCwgZm9vXy0+aW5kZXgoKSk7Ci0gIEVYUEVDVF9FUSgxLCBi
YXJfLT5pbmRleCgpKTsKLX0KLQotVEVTVF9GKFNlcnZpY2VEZXNjcmlwdG9yVGVzdCwgTWV0aG9k
UGFyZW50KSB7Ci0gIEVYUEVDVF9FUShzZXJ2aWNlXywgZm9vXy0+c2VydmljZSgpKTsKLSAgRVhQ
RUNUX0VRKHNlcnZpY2VfLCBiYXJfLT5zZXJ2aWNlKCkpOwotfQotCi1URVNUX0YoU2VydmljZURl
c2NyaXB0b3JUZXN0LCBNZXRob2RJbnB1dFR5cGUpIHsKLSAgRVhQRUNUX0VRKGZvb19yZXF1ZXN0
XywgZm9vXy0+aW5wdXRfdHlwZSgpKTsKLSAgRVhQRUNUX0VRKGJhcl9yZXF1ZXN0XywgYmFyXy0+
aW5wdXRfdHlwZSgpKTsKLX0KLQotVEVTVF9GKFNlcnZpY2VEZXNjcmlwdG9yVGVzdCwgTWV0aG9k
T3V0cHV0VHlwZSkgewotICBFWFBFQ1RfRVEoZm9vX3Jlc3BvbnNlXywgZm9vXy0+b3V0cHV0X3R5
cGUoKSk7Ci0gIEVYUEVDVF9FUShiYXJfcmVzcG9uc2VfLCBiYXJfLT5vdXRwdXRfdHlwZSgpKTsK
LX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi0vLyBUZXN0IG5lc3RlZCB0eXBlcy4KLWNsYXNzIE5lc3Rl
ZERlc2NyaXB0b3JUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAg
dmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIC8vIEJ1aWxkIGRlc2NyaXB0b3JzIGZvciB0aGUg
Zm9sbG93aW5nIGRlZmluaXRpb25zOgotICAgIC8vCi0gICAgLy8gICAvLyBpbiAiZm9vLnByb3Rv
IgotICAgIC8vICAgbWVzc2FnZSBUZXN0TWVzc2FnZSB7Ci0gICAgLy8gICAgIG1lc3NhZ2UgRm9v
IHt9Ci0gICAgLy8gICAgIG1lc3NhZ2UgQmFyIHt9Ci0gICAgLy8gICAgIGVudW0gQmF6IHsgQSA9
IDE7IH0KLSAgICAvLyAgICAgZW51bSBRdXggeyBCID0gMTsgfQotICAgIC8vICAgfQotICAgIC8v
Ci0gICAgLy8gICAvLyBpbiAiYmFyLnByb3RvIgotICAgIC8vICAgcGFja2FnZSBjb3JnZS5ncmF1
bHQ7Ci0gICAgLy8gICBtZXNzYWdlIFRlc3RNZXNzYWdlMiB7Ci0gICAgLy8gICAgIG1lc3NhZ2Ug
Rm9vIHt9Ci0gICAgLy8gICAgIG1lc3NhZ2UgQmF6IHt9Ci0gICAgLy8gICAgIGVudW0gUXV4ICB7
IEEgPSAxOyB9Ci0gICAgLy8gICAgIGVudW0gUXV1eCB7IEMgPSAxOyB9Ci0gICAgLy8gICB9Ci0g
ICAgLy8KLSAgICAvLyBUZXN0TWVzc2FnZTIgaXMgcHJpbWFyaWx5IGhlcmUgdG8gdGVzdCBGaW5k
TmVzdGVkVHlwZUJ5TmFtZSBhbmQgZnJpZW5kcy4KLSAgICAvLyBBbGwgbWVzc2FnZXMgY3JlYXRl
ZCBmcm9tIHRoZSBzYW1lIERlc2NyaXB0b3JQb29sIHNoYXJlIHRoZSBzYW1lIGxvb2t1cAotICAg
IC8vIHRhYmxlLCBzbyB3ZSBuZWVkIHRvIGluc3VyZSB0aGF0IHRoZXkgZG9uJ3QgaW50ZXJmZXJl
LgotICAgIC8vCi0gICAgLy8gV2UgYWRkIGVudW0gdmFsdWVzIHRvIHRoZSBlbnVtcyBpbiBvcmRl
ciB0byB0ZXN0IHNlYXJjaGluZyBmb3IgZW51bQotICAgIC8vIHZhbHVlcyBhY3Jvc3MgYSBtZXNz
YWdlJ3Mgc2NvcGUuCi0KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZvb19maWxlOwotICAgIGZv
b19maWxlLnNldF9uYW1lKCJmb28ucHJvdG8iKTsKLQotICAgIERlc2NyaXB0b3JQcm90byogbWVz
c2FnZSA9IEFkZE1lc3NhZ2UoJmZvb19maWxlLCAiVGVzdE1lc3NhZ2UiKTsKLSAgICBBZGROZXN0
ZWRNZXNzYWdlKG1lc3NhZ2UsICJGb28iKTsKLSAgICBBZGROZXN0ZWRNZXNzYWdlKG1lc3NhZ2Us
ICJCYXIiKTsKLSAgICBFbnVtRGVzY3JpcHRvclByb3RvKiBiYXogPSBBZGROZXN0ZWRFbnVtKG1l
c3NhZ2UsICJCYXoiKTsKLSAgICBBZGRFbnVtVmFsdWUoYmF6LCAiQSIsIDEpOwotICAgIEVudW1E
ZXNjcmlwdG9yUHJvdG8qIHF1eCA9IEFkZE5lc3RlZEVudW0obWVzc2FnZSwgIlF1eCIpOwotICAg
IEFkZEVudW1WYWx1ZShxdXgsICJCIiwgMSk7Ci0KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGJh
cl9maWxlOwotICAgIGJhcl9maWxlLnNldF9uYW1lKCJiYXIucHJvdG8iKTsKLSAgICBiYXJfZmls
ZS5zZXRfcGFja2FnZSgiY29yZ2UuZ3JhdWx0Iik7Ci0KLSAgICBEZXNjcmlwdG9yUHJvdG8qIG1l
c3NhZ2UyID0gQWRkTWVzc2FnZSgmYmFyX2ZpbGUsICJUZXN0TWVzc2FnZTIiKTsKLSAgICBBZGRO
ZXN0ZWRNZXNzYWdlKG1lc3NhZ2UyLCAiRm9vIik7Ci0gICAgQWRkTmVzdGVkTWVzc2FnZShtZXNz
YWdlMiwgIkJheiIpOwotICAgIEVudW1EZXNjcmlwdG9yUHJvdG8qIHF1eDIgPSBBZGROZXN0ZWRF
bnVtKG1lc3NhZ2UyLCAiUXV4Iik7Ci0gICAgQWRkRW51bVZhbHVlKHF1eDIsICJBIiwgMSk7Ci0g
ICAgRW51bURlc2NyaXB0b3JQcm90byogcXV1eDIgPSBBZGROZXN0ZWRFbnVtKG1lc3NhZ2UyLCAi
UXV1eCIpOwotICAgIEFkZEVudW1WYWx1ZShxdXV4MiwgIkMiLCAxKTsKLQotICAgIC8vIEJ1aWxk
IHRoZSBkZXNjcmlwdG9ycyBhbmQgZ2V0IHRoZSBwb2ludGVycy4KLSAgICBmb29fZmlsZV8gPSBw
b29sXy5CdWlsZEZpbGUoZm9vX2ZpbGUpOwotICAgIEFTU0VSVF9UUlVFKGZvb19maWxlXyAhPSBO
VUxMKTsKLQotICAgIGJhcl9maWxlXyA9IHBvb2xfLkJ1aWxkRmlsZShiYXJfZmlsZSk7Ci0gICAg
QVNTRVJUX1RSVUUoYmFyX2ZpbGVfICE9IE5VTEwpOwotCi0gICAgQVNTRVJUX0VRKDEsIGZvb19m
aWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCkpOwotICAgIG1lc3NhZ2VfID0gZm9vX2ZpbGVfLT5t
ZXNzYWdlX3R5cGUoMCk7Ci0KLSAgICBBU1NFUlRfRVEoMiwgbWVzc2FnZV8tPm5lc3RlZF90eXBl
X2NvdW50KCkpOwotICAgIGZvb18gPSBtZXNzYWdlXy0+bmVzdGVkX3R5cGUoMCk7Ci0gICAgYmFy
XyA9IG1lc3NhZ2VfLT5uZXN0ZWRfdHlwZSgxKTsKLQotICAgIEFTU0VSVF9FUSgyLCBtZXNzYWdl
Xy0+ZW51bV90eXBlX2NvdW50KCkpOwotICAgIGJhel8gPSBtZXNzYWdlXy0+ZW51bV90eXBlKDAp
OwotICAgIHF1eF8gPSBtZXNzYWdlXy0+ZW51bV90eXBlKDEpOwotCi0gICAgQVNTRVJUX0VRKDEs
IGJhel8tPnZhbHVlX2NvdW50KCkpOwotICAgIGFfID0gYmF6Xy0+dmFsdWUoMCk7Ci0gICAgQVNT
RVJUX0VRKDEsIHF1eF8tPnZhbHVlX2NvdW50KCkpOwotICAgIGJfID0gcXV4Xy0+dmFsdWUoMCk7
Ci0KLSAgICBBU1NFUlRfRVEoMSwgYmFyX2ZpbGVfLT5tZXNzYWdlX3R5cGVfY291bnQoKSk7Ci0g
ICAgbWVzc2FnZTJfID0gYmFyX2ZpbGVfLT5tZXNzYWdlX3R5cGUoMCk7Ci0KLSAgICBBU1NFUlRf
RVEoMiwgbWVzc2FnZTJfLT5uZXN0ZWRfdHlwZV9jb3VudCgpKTsKLSAgICBmb28yXyA9IG1lc3Nh
Z2UyXy0+bmVzdGVkX3R5cGUoMCk7Ci0gICAgYmF6Ml8gPSBtZXNzYWdlMl8tPm5lc3RlZF90eXBl
KDEpOwotCi0gICAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UyXy0+ZW51bV90eXBlX2NvdW50KCkpOwot
ICAgIHF1eDJfID0gbWVzc2FnZTJfLT5lbnVtX3R5cGUoMCk7Ci0gICAgcXV1eDJfID0gbWVzc2Fn
ZTJfLT5lbnVtX3R5cGUoMSk7Ci0KLSAgICBBU1NFUlRfRVEoMSwgcXV4Ml8tPnZhbHVlX2NvdW50
KCkpOwotICAgIGEyXyA9IHF1eDJfLT52YWx1ZSgwKTsKLSAgICBBU1NFUlRfRVEoMSwgcXV1eDJf
LT52YWx1ZV9jb3VudCgpKTsKLSAgICBjMl8gPSBxdXV4Ml8tPnZhbHVlKDApOwotICB9Ci0KLSAg
RGVzY3JpcHRvclBvb2wgcG9vbF87Ci0KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZvb19maWxl
XzsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGJhcl9maWxlXzsKLQotICBjb25zdCBEZXNjcmlw
dG9yKiBtZXNzYWdlXzsKLSAgY29uc3QgRGVzY3JpcHRvciogbWVzc2FnZTJfOwotCi0gIGNvbnN0
IERlc2NyaXB0b3IqIGZvb187Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGJhcl87Ci0gIGNvbnN0IEVu
dW1EZXNjcmlwdG9yKiBiYXpfOwotICBjb25zdCBFbnVtRGVzY3JpcHRvciogcXV4XzsKLSAgY29u
c3QgRW51bVZhbHVlRGVzY3JpcHRvciogYV87Ci0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3Iq
IGJfOwotCi0gIGNvbnN0IERlc2NyaXB0b3IqIGZvbzJfOwotICBjb25zdCBEZXNjcmlwdG9yKiBi
YXoyXzsKLSAgY29uc3QgRW51bURlc2NyaXB0b3IqIHF1eDJfOwotICBjb25zdCBFbnVtRGVzY3Jp
cHRvciogcXV1eDJfOwotICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBhMl87Ci0gIGNvbnN0
IEVudW1WYWx1ZURlc2NyaXB0b3IqIGMyXzsKLX07Ci0KLVRFU1RfRihOZXN0ZWREZXNjcmlwdG9y
VGVzdCwgTWVzc2FnZU5hbWUpIHsKLSAgRVhQRUNUX0VRKCJGb28iLCBmb29fIC0+bmFtZSgpKTsK
LSAgRVhQRUNUX0VRKCJCYXIiLCBiYXJfIC0+bmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJGb28iLCBm
b28yXy0+bmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJCYXoiLCBiYXoyXy0+bmFtZSgpKTsKLQotICBF
WFBFQ1RfRVEoIlRlc3RNZXNzYWdlLkZvbyIsIGZvb18tPmZ1bGxfbmFtZSgpKTsKLSAgRVhQRUNU
X0VRKCJUZXN0TWVzc2FnZS5CYXIiLCBiYXJfLT5mdWxsX25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgi
Y29yZ2UuZ3JhdWx0LlRlc3RNZXNzYWdlMi5Gb28iLCBmb28yXy0+ZnVsbF9uYW1lKCkpOwotICBF
WFBFQ1RfRVEoImNvcmdlLmdyYXVsdC5UZXN0TWVzc2FnZTIuQmF6IiwgYmF6Ml8tPmZ1bGxfbmFt
ZSgpKTsKLX0KLQotVEVTVF9GKE5lc3RlZERlc2NyaXB0b3JUZXN0LCBNZXNzYWdlQ29udGFpbmlu
Z1R5cGUpIHsKLSAgRVhQRUNUX0VRKG1lc3NhZ2VfICwgZm9vXyAtPmNvbnRhaW5pbmdfdHlwZSgp
KTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2VfICwgYmFyXyAtPmNvbnRhaW5pbmdfdHlwZSgpKTsKLSAg
RVhQRUNUX0VRKG1lc3NhZ2UyXywgZm9vMl8tPmNvbnRhaW5pbmdfdHlwZSgpKTsKLSAgRVhQRUNU
X0VRKG1lc3NhZ2UyXywgYmF6Ml8tPmNvbnRhaW5pbmdfdHlwZSgpKTsKLX0KLQotVEVTVF9GKE5l
c3RlZERlc2NyaXB0b3JUZXN0LCBOZXN0ZWRNZXNzYWdlc0J5SW5kZXgpIHsKLSAgQVNTRVJUX0VR
KDIsIG1lc3NhZ2VfLT5uZXN0ZWRfdHlwZV9jb3VudCgpKTsKLSAgRVhQRUNUX0VRKGZvb18sIG1l
c3NhZ2VfLT5uZXN0ZWRfdHlwZSgwKSk7Ci0gIEVYUEVDVF9FUShiYXJfLCBtZXNzYWdlXy0+bmVz
dGVkX3R5cGUoMSkpOwotfQotCi1URVNUX0YoTmVzdGVkRGVzY3JpcHRvclRlc3QsIEZpbmRGaWVs
ZEJ5TmFtZURvZXNudEZpbmROZXN0ZWRUeXBlcykgewotICBFWFBFQ1RfVFJVRShtZXNzYWdlXy0+
RmluZEZpZWxkQnlOYW1lKCJGb28iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZV8t
PkZpbmRGaWVsZEJ5TmFtZSgiUXV4IikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Vf
LT5GaW5kRXh0ZW5zaW9uQnlOYW1lKCJGb28iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVz
c2FnZV8tPkZpbmRFeHRlbnNpb25CeU5hbWUoIlF1eCIpID09IE5VTEwpOwotfQotCi1URVNUX0Yo
TmVzdGVkRGVzY3JpcHRvclRlc3QsIEZpbmROZXN0ZWRUeXBlQnlOYW1lKSB7Ci0gIEVYUEVDVF9F
UShmb29fICwgbWVzc2FnZV8gLT5GaW5kTmVzdGVkVHlwZUJ5TmFtZSgiRm9vIikpOwotICBFWFBF
Q1RfRVEoYmFyXyAsIG1lc3NhZ2VfIC0+RmluZE5lc3RlZFR5cGVCeU5hbWUoIkJhciIpKTsKLSAg
RVhQRUNUX0VRKGZvbzJfLCBtZXNzYWdlMl8tPkZpbmROZXN0ZWRUeXBlQnlOYW1lKCJGb28iKSk7
Ci0gIEVYUEVDVF9FUShiYXoyXywgbWVzc2FnZTJfLT5GaW5kTmVzdGVkVHlwZUJ5TmFtZSgiQmF6
IikpOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2VfIC0+RmluZE5lc3RlZFR5cGVCeU5hbWUoIk5v
U3VjaFR5cGUiKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZV8gLT5GaW5kTmVzdGVk
VHlwZUJ5TmFtZSgiQmF6IiAgICAgICApID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Ml8tPkZpbmROZXN0ZWRUeXBlQnlOYW1lKCJCYXIiICAgICAgICkgPT0gTlVMTCk7Ci0KLSAgRVhQ
RUNUX1RSVUUobWVzc2FnZV8tPkZpbmROZXN0ZWRUeXBlQnlOYW1lKCJRdXgiKSA9PSBOVUxMKTsK
LX0KLQotVEVTVF9GKE5lc3RlZERlc2NyaXB0b3JUZXN0LCBFbnVtTmFtZSkgewotICBFWFBFQ1Rf
RVEoIkJheiIgLCBiYXpfIC0+bmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJRdXgiICwgcXV4XyAtPm5h
bWUoKSk7Ci0gIEVYUEVDVF9FUSgiUXV4IiAsIHF1eDJfLT5uYW1lKCkpOwotICBFWFBFQ1RfRVEo
IlF1dXgiLCBxdXV4Ml8tPm5hbWUoKSk7Ci0KLSAgRVhQRUNUX0VRKCJUZXN0TWVzc2FnZS5CYXoi
LCBiYXpfLT5mdWxsX25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgiVGVzdE1lc3NhZ2UuUXV4IiwgcXV4
Xy0+ZnVsbF9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImNvcmdlLmdyYXVsdC5UZXN0TWVzc2FnZTIu
UXV4IiAsIHF1eDJfIC0+ZnVsbF9uYW1lKCkpOwotICBFWFBFQ1RfRVEoImNvcmdlLmdyYXVsdC5U
ZXN0TWVzc2FnZTIuUXV1eCIsIHF1dXgyXy0+ZnVsbF9uYW1lKCkpOwotfQotCi1URVNUX0YoTmVz
dGVkRGVzY3JpcHRvclRlc3QsIEVudW1Db250YWluaW5nVHlwZSkgewotICBFWFBFQ1RfRVEobWVz
c2FnZV8gLCBiYXpfICAtPmNvbnRhaW5pbmdfdHlwZSgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2Vf
ICwgcXV4XyAgLT5jb250YWluaW5nX3R5cGUoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlMl8sIHF1
eDJfIC0+Y29udGFpbmluZ190eXBlKCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZTJfLCBxdXV4Ml8t
PmNvbnRhaW5pbmdfdHlwZSgpKTsKLX0KLQotVEVTVF9GKE5lc3RlZERlc2NyaXB0b3JUZXN0LCBO
ZXN0ZWRFbnVtc0J5SW5kZXgpIHsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2VfLT5uZXN0ZWRfdHlw
ZV9jb3VudCgpKTsKLSAgRVhQRUNUX0VRKGZvb18sIG1lc3NhZ2VfLT5uZXN0ZWRfdHlwZSgwKSk7
Ci0gIEVYUEVDVF9FUShiYXJfLCBtZXNzYWdlXy0+bmVzdGVkX3R5cGUoMSkpOwotfQotCi1URVNU
X0YoTmVzdGVkRGVzY3JpcHRvclRlc3QsIEZpbmRFbnVtVHlwZUJ5TmFtZSkgewotICBFWFBFQ1Rf
RVEoYmF6XyAgLCBtZXNzYWdlXyAtPkZpbmRFbnVtVHlwZUJ5TmFtZSgiQmF6IiApKTsKLSAgRVhQ
RUNUX0VRKHF1eF8gICwgbWVzc2FnZV8gLT5GaW5kRW51bVR5cGVCeU5hbWUoIlF1eCIgKSk7Ci0g
IEVYUEVDVF9FUShxdXgyXyAsIG1lc3NhZ2UyXy0+RmluZEVudW1UeXBlQnlOYW1lKCJRdXgiICkp
OwotICBFWFBFQ1RfRVEocXV1eDJfLCBtZXNzYWdlMl8tPkZpbmRFbnVtVHlwZUJ5TmFtZSgiUXV1
eCIpKTsKLQotICBFWFBFQ1RfVFJVRShtZXNzYWdlXyAtPkZpbmRFbnVtVHlwZUJ5TmFtZSgiTm9T
dWNoVHlwZSIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlXyAtPkZpbmRFbnVtVHlw
ZUJ5TmFtZSgiUXV1eCIgICAgICApID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlMl8t
PkZpbmRFbnVtVHlwZUJ5TmFtZSgiQmF6IiAgICAgICApID09IE5VTEwpOwotCi0gIEVYUEVDVF9U
UlVFKG1lc3NhZ2VfLT5GaW5kRW51bVR5cGVCeU5hbWUoIkZvbyIpID09IE5VTEwpOwotfQotCi1U
RVNUX0YoTmVzdGVkRGVzY3JpcHRvclRlc3QsIEZpbmRFbnVtVmFsdWVCeU5hbWUpIHsKLSAgRVhQ
RUNUX0VRKGFfICwgbWVzc2FnZV8gLT5GaW5kRW51bVZhbHVlQnlOYW1lKCJBIikpOwotICBFWFBF
Q1RfRVEoYl8gLCBtZXNzYWdlXyAtPkZpbmRFbnVtVmFsdWVCeU5hbWUoIkIiKSk7Ci0gIEVYUEVD
VF9FUShhMl8sIG1lc3NhZ2UyXy0+RmluZEVudW1WYWx1ZUJ5TmFtZSgiQSIpKTsKLSAgRVhQRUNU
X0VRKGMyXywgbWVzc2FnZTJfLT5GaW5kRW51bVZhbHVlQnlOYW1lKCJDIikpOwotCi0gIEVYUEVD
VF9UUlVFKG1lc3NhZ2VfIC0+RmluZEVudW1WYWx1ZUJ5TmFtZSgiTk9fU1VDSF9WQUxVRSIpID09
IE5VTEwpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlXyAtPkZpbmRFbnVtVmFsdWVCeU5hbWUoIkMi
ICAgICAgICAgICAgKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZTJfLT5GaW5kRW51
bVZhbHVlQnlOYW1lKCJCIiAgICAgICAgICAgICkgPT0gTlVMTCk7Ci0KLSAgRVhQRUNUX1RSVUUo
bWVzc2FnZV8tPkZpbmRFbnVtVmFsdWVCeU5hbWUoIkZvbyIpID09IE5VTEwpOwotfQotCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KLS8vIFRlc3QgZXh0ZW5zaW9ucy4KLWNsYXNzIEV4dGVuc2lvbkRlc2NyaXB0
b3JUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB2
b2lkIFNldFVwKCkgewotICAgIC8vIEJ1aWxkIGRlc2NyaXB0b3JzIGZvciB0aGUgZm9sbG93aW5n
IGRlZmluaXRpb25zOgotICAgIC8vCi0gICAgLy8gICBlbnVtIEJheiB7fQotICAgIC8vICAgbWVz
c2FnZSBRdXgge30KLSAgICAvLwotICAgIC8vICAgbWVzc2FnZSBGb28gewotICAgIC8vICAgICBl
eHRlbnNpb25zIDEwIHRvIDE5OwotICAgIC8vICAgICBleHRlbnNpb25zIDMwIHRvIDM5OwotICAg
IC8vICAgfQotICAgIC8vICAgZXh0ZW5kcyBGb28gd2l0aCBvcHRpb25hbCBpbnQzMiBmb29faW50
MzIgPSAxMDsKLSAgICAvLyAgIGV4dGVuZHMgRm9vIHdpdGggcmVwZWF0ZWQgVGVzdEVudW0gZm9v
X2VudW0gPSAxOTsKLSAgICAvLyAgIG1lc3NhZ2UgQmFyIHsKLSAgICAvLyAgICAgZXh0ZW5kcyBG
b28gd2l0aCBvcHRpb25hbCBRdXggZm9vX21lc3NhZ2UgPSAzMDsKLSAgICAvLyAgICAgLy8gKHVz
aW5nIFF1eCBhcyB0aGUgZ3JvdXAgdHlwZSkKLSAgICAvLyAgICAgZXh0ZW5kcyBGb28gd2l0aCBy
ZXBlYXRlZCBncm91cCBmb29fZ3JvdXAgPSAzOTsKLSAgICAvLyAgIH0KLQotICAgIEZpbGVEZXNj
cmlwdG9yUHJvdG8gZm9vX2ZpbGU7Ci0gICAgZm9vX2ZpbGUuc2V0X25hbWUoImZvby5wcm90byIp
OwotCi0gICAgQWRkRW1wdHlFbnVtKCZmb29fZmlsZSwgIkJheiIpOwotICAgIEFkZE1lc3NhZ2Uo
JmZvb19maWxlLCAiUXV4Iik7Ci0KLSAgICBEZXNjcmlwdG9yUHJvdG8qIGZvbyA9IEFkZE1lc3Nh
Z2UoJmZvb19maWxlLCAiRm9vIik7Ci0gICAgQWRkRXh0ZW5zaW9uUmFuZ2UoZm9vLCAxMCwgMjAp
OwotICAgIEFkZEV4dGVuc2lvblJhbmdlKGZvbywgMzAsIDQwKTsKLQotICAgIEFkZEV4dGVuc2lv
bigmZm9vX2ZpbGUsICJGb28iLCAiZm9vX2ludDMyIiwgMTAsCi0gICAgICAgICAgICAgICAgIEZp
ZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgRmll
bGREZXNjcmlwdG9yUHJvdG86OlRZUEVfSU5UMzIpOwotICAgIEFkZEV4dGVuc2lvbigmZm9vX2Zp
bGUsICJGb28iLCAiZm9vX2VudW0iLCAxOSwKLSAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlw
dG9yUHJvdG86OkxBQkVMX1JFUEVBVEVELAotICAgICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0
b3JQcm90bzo6VFlQRV9FTlVNKQotICAgICAgLT5zZXRfdHlwZV9uYW1lKCJCYXoiKTsKLQotICAg
IERlc2NyaXB0b3JQcm90byogYmFyID0gQWRkTWVzc2FnZSgmZm9vX2ZpbGUsICJCYXIiKTsKLSAg
ICBBZGROZXN0ZWRFeHRlbnNpb24oYmFyLCAiRm9vIiwgImZvb19tZXNzYWdlIiwgMzAsCi0gICAg
ICAgICAgICAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwK
LSAgICAgICAgICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfTUVTU0FH
RSkKLSAgICAgIC0+c2V0X3R5cGVfbmFtZSgiUXV4Iik7Ci0gICAgQWRkTmVzdGVkRXh0ZW5zaW9u
KGJhciwgIkZvbyIsICJmb29fZ3JvdXAiLCAzOSwKLSAgICAgICAgICAgICAgICAgICAgICAgRmll
bGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX1JFUEVBVEVELAotICAgICAgICAgICAgICAgICAgICAg
ICBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9HUk9VUCkKLSAgICAgIC0+c2V0X3R5cGVfbmFt
ZSgiUXV4Iik7Ci0KLSAgICAvLyBCdWlsZCB0aGUgZGVzY3JpcHRvcnMgYW5kIGdldCB0aGUgcG9p
bnRlcnMuCi0gICAgZm9vX2ZpbGVfID0gcG9vbF8uQnVpbGRGaWxlKGZvb19maWxlKTsKLSAgICBB
U1NFUlRfVFJVRShmb29fZmlsZV8gIT0gTlVMTCk7Ci0KLSAgICBBU1NFUlRfRVEoMSwgZm9vX2Zp
bGVfLT5lbnVtX3R5cGVfY291bnQoKSk7Ci0gICAgYmF6XyA9IGZvb19maWxlXy0+ZW51bV90eXBl
KDApOwotCi0gICAgQVNTRVJUX0VRKDMsIGZvb19maWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCkp
OwotICAgIHF1eF8gPSBmb29fZmlsZV8tPm1lc3NhZ2VfdHlwZSgwKTsKLSAgICBmb29fID0gZm9v
X2ZpbGVfLT5tZXNzYWdlX3R5cGUoMSk7Ci0gICAgYmFyXyA9IGZvb19maWxlXy0+bWVzc2FnZV90
eXBlKDIpOwotICB9Ci0KLSAgRGVzY3JpcHRvclBvb2wgcG9vbF87Ci0KLSAgY29uc3QgRmlsZURl
c2NyaXB0b3IqIGZvb19maWxlXzsKLQotICBjb25zdCBEZXNjcmlwdG9yKiBmb29fOwotICBjb25z
dCBEZXNjcmlwdG9yKiBiYXJfOwotICBjb25zdCBFbnVtRGVzY3JpcHRvciogYmF6XzsKLSAgY29u
c3QgRGVzY3JpcHRvciogcXV4XzsKLX07Ci0KLVRFU1RfRihFeHRlbnNpb25EZXNjcmlwdG9yVGVz
dCwgRXh0ZW5zaW9uUmFuZ2VzKSB7Ci0gIEVYUEVDVF9FUSgwLCBiYXJfLT5leHRlbnNpb25fcmFu
Z2VfY291bnQoKSk7Ci0gIEFTU0VSVF9FUSgyLCBmb29fLT5leHRlbnNpb25fcmFuZ2VfY291bnQo
KSk7Ci0KLSAgRVhQRUNUX0VRKDEwLCBmb29fLT5leHRlbnNpb25fcmFuZ2UoMCktPnN0YXJ0KTsK
LSAgRVhQRUNUX0VRKDMwLCBmb29fLT5leHRlbnNpb25fcmFuZ2UoMSktPnN0YXJ0KTsKLQotICBF
WFBFQ1RfRVEoMjAsIGZvb18tPmV4dGVuc2lvbl9yYW5nZSgwKS0+ZW5kKTsKLSAgRVhQRUNUX0VR
KDQwLCBmb29fLT5leHRlbnNpb25fcmFuZ2UoMSktPmVuZCk7Ci19OwotCi1URVNUX0YoRXh0ZW5z
aW9uRGVzY3JpcHRvclRlc3QsIEV4dGVuc2lvbnMpIHsKLSAgRVhQRUNUX0VRKDAsIGZvb18tPmV4
dGVuc2lvbl9jb3VudCgpKTsKLSAgQVNTRVJUX0VRKDIsIGZvb19maWxlXy0+ZXh0ZW5zaW9uX2Nv
dW50KCkpOwotICBBU1NFUlRfRVEoMiwgYmFyXy0+ZXh0ZW5zaW9uX2NvdW50KCkpOwotCi0gIEVY
UEVDVF9UUlVFKGZvb19maWxlXy0+ZXh0ZW5zaW9uKDApLT5pc19leHRlbnNpb24oKSk7Ci0gIEVY
UEVDVF9UUlVFKGZvb19maWxlXy0+ZXh0ZW5zaW9uKDEpLT5pc19leHRlbnNpb24oKSk7Ci0gIEVY
UEVDVF9UUlVFKGJhcl8tPmV4dGVuc2lvbigwKS0+aXNfZXh0ZW5zaW9uKCkpOwotICBFWFBFQ1Rf
VFJVRShiYXJfLT5leHRlbnNpb24oMSktPmlzX2V4dGVuc2lvbigpKTsKLQotICBFWFBFQ1RfRVEo
ImZvb19pbnQzMiIgICwgZm9vX2ZpbGVfLT5leHRlbnNpb24oMCktPm5hbWUoKSk7Ci0gIEVYUEVD
VF9FUSgiZm9vX2VudW0iICAgLCBmb29fZmlsZV8tPmV4dGVuc2lvbigxKS0+bmFtZSgpKTsKLSAg
RVhQRUNUX0VRKCJmb29fbWVzc2FnZSIsIGJhcl8tPmV4dGVuc2lvbigwKS0+bmFtZSgpKTsKLSAg
RVhQRUNUX0VRKCJmb29fZ3JvdXAiICAsIGJhcl8tPmV4dGVuc2lvbigxKS0+bmFtZSgpKTsKLQot
ICBFWFBFQ1RfRVEoMTAsIGZvb19maWxlXy0+ZXh0ZW5zaW9uKDApLT5udW1iZXIoKSk7Ci0gIEVY
UEVDVF9FUSgxOSwgZm9vX2ZpbGVfLT5leHRlbnNpb24oMSktPm51bWJlcigpKTsKLSAgRVhQRUNU
X0VRKDMwLCBiYXJfLT5leHRlbnNpb24oMCktPm51bWJlcigpKTsKLSAgRVhQRUNUX0VRKDM5LCBi
YXJfLT5leHRlbnNpb24oMSktPm51bWJlcigpKTsKLQotICBFWFBFQ1RfRVEoRmllbGREZXNjcmlw
dG9yOjpUWVBFX0lOVDMyICAsIGZvb19maWxlXy0+ZXh0ZW5zaW9uKDApLT50eXBlKCkpOwotICBF
WFBFQ1RfRVEoRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU0gICAsIGZvb19maWxlXy0+ZXh0ZW5z
aW9uKDEpLT50eXBlKCkpOwotICBFWFBFQ1RfRVEoRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NB
R0UsIGJhcl8tPmV4dGVuc2lvbigwKS0+dHlwZSgpKTsKLSAgRVhQRUNUX0VRKEZpZWxkRGVzY3Jp
cHRvcjo6VFlQRV9HUk9VUCAgLCBiYXJfLT5leHRlbnNpb24oMSktPnR5cGUoKSk7Ci0KLSAgRVhQ
RUNUX0VRKGJhel8sIGZvb19maWxlXy0+ZXh0ZW5zaW9uKDEpLT5lbnVtX3R5cGUoKSk7Ci0gIEVY
UEVDVF9FUShxdXhfLCBiYXJfLT5leHRlbnNpb24oMCktPm1lc3NhZ2VfdHlwZSgpKTsKLSAgRVhQ
RUNUX0VRKHF1eF8sIGJhcl8tPmV4dGVuc2lvbigxKS0+bWVzc2FnZV90eXBlKCkpOwotCi0gIEVY
UEVDVF9FUShGaWVsZERlc2NyaXB0b3I6OkxBQkVMX09QVElPTkFMLCBmb29fZmlsZV8tPmV4dGVu
c2lvbigwKS0+bGFiZWwoKSk7Ci0gIEVYUEVDVF9FUShGaWVsZERlc2NyaXB0b3I6OkxBQkVMX1JF
UEVBVEVELCBmb29fZmlsZV8tPmV4dGVuc2lvbigxKS0+bGFiZWwoKSk7Ci0gIEVYUEVDVF9FUShG
aWVsZERlc2NyaXB0b3I6OkxBQkVMX09QVElPTkFMLCBiYXJfLT5leHRlbnNpb24oMCktPmxhYmVs
KCkpOwotICBFWFBFQ1RfRVEoRmllbGREZXNjcmlwdG9yOjpMQUJFTF9SRVBFQVRFRCwgYmFyXy0+
ZXh0ZW5zaW9uKDEpLT5sYWJlbCgpKTsKLQotICBFWFBFQ1RfRVEoZm9vXywgZm9vX2ZpbGVfLT5l
eHRlbnNpb24oMCktPmNvbnRhaW5pbmdfdHlwZSgpKTsKLSAgRVhQRUNUX0VRKGZvb18sIGZvb19m
aWxlXy0+ZXh0ZW5zaW9uKDEpLT5jb250YWluaW5nX3R5cGUoKSk7Ci0gIEVYUEVDVF9FUShmb29f
LCBiYXJfLT5leHRlbnNpb24oMCktPmNvbnRhaW5pbmdfdHlwZSgpKTsKLSAgRVhQRUNUX0VRKGZv
b18sIGJhcl8tPmV4dGVuc2lvbigxKS0+Y29udGFpbmluZ190eXBlKCkpOwotCi0gIEVYUEVDVF9U
UlVFKGZvb19maWxlXy0+ZXh0ZW5zaW9uKDApLT5leHRlbnNpb25fc2NvcGUoKSA9PSBOVUxMKTsK
LSAgRVhQRUNUX1RSVUUoZm9vX2ZpbGVfLT5leHRlbnNpb24oMSktPmV4dGVuc2lvbl9zY29wZSgp
ID09IE5VTEwpOwotICBFWFBFQ1RfRVEoYmFyXywgYmFyXy0+ZXh0ZW5zaW9uKDApLT5leHRlbnNp
b25fc2NvcGUoKSk7Ci0gIEVYUEVDVF9FUShiYXJfLCBiYXJfLT5leHRlbnNpb24oMSktPmV4dGVu
c2lvbl9zY29wZSgpKTsKLX07Ci0KLVRFU1RfRihFeHRlbnNpb25EZXNjcmlwdG9yVGVzdCwgSXNF
eHRlbnNpb25OdW1iZXIpIHsKLSAgRVhQRUNUX0ZBTFNFKGZvb18tPklzRXh0ZW5zaW9uTnVtYmVy
KCA5KSk7Ci0gIEVYUEVDVF9UUlVFIChmb29fLT5Jc0V4dGVuc2lvbk51bWJlcigxMCkpOwotICBF
WFBFQ1RfVFJVRSAoZm9vXy0+SXNFeHRlbnNpb25OdW1iZXIoMTkpKTsKLSAgRVhQRUNUX0ZBTFNF
KGZvb18tPklzRXh0ZW5zaW9uTnVtYmVyKDIwKSk7Ci0gIEVYUEVDVF9GQUxTRShmb29fLT5Jc0V4
dGVuc2lvbk51bWJlcigyOSkpOwotICBFWFBFQ1RfVFJVRSAoZm9vXy0+SXNFeHRlbnNpb25OdW1i
ZXIoMzApKTsKLSAgRVhQRUNUX1RSVUUgKGZvb18tPklzRXh0ZW5zaW9uTnVtYmVyKDM5KSk7Ci0g
IEVYUEVDVF9GQUxTRShmb29fLT5Jc0V4dGVuc2lvbk51bWJlcig0MCkpOwotfQotCi1URVNUX0Yo
RXh0ZW5zaW9uRGVzY3JpcHRvclRlc3QsIEZpbmRFeHRlbnNpb25CeU5hbWUpIHsKLSAgLy8gTm90
ZSB0aGF0IEZpbGVEZXNjcmlwdG9yOjpGaW5kRXh0ZW5zaW9uQnlOYW1lKCkgaXMgdGVzdGVkIGJ5
Ci0gIC8vIEZpbGVEZXNjcmlwdG9yVGVzdC4KLSAgQVNTRVJUX0VRKDIsIGJhcl8tPmV4dGVuc2lv
bl9jb3VudCgpKTsKLQotICBFWFBFQ1RfRVEoYmFyXy0+ZXh0ZW5zaW9uKDApLCBiYXJfLT5GaW5k
RXh0ZW5zaW9uQnlOYW1lKCJmb29fbWVzc2FnZSIpKTsKLSAgRVhQRUNUX0VRKGJhcl8tPmV4dGVu
c2lvbigxKSwgYmFyXy0+RmluZEV4dGVuc2lvbkJ5TmFtZSgiZm9vX2dyb3VwIiAgKSk7Ci0KLSAg
RVhQRUNUX1RSVUUoYmFyXy0+RmluZEV4dGVuc2lvbkJ5TmFtZSgibm9fc3VjaF9leHRlbnNpb24i
KSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoZm9vXy0+RmluZEV4dGVuc2lvbkJ5TmFtZSgiZm9v
X2ludDMyIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGZvb18tPkZpbmRFeHRlbnNpb25CeU5h
bWUoImZvb19tZXNzYWdlIikgPT0gTlVMTCk7Ci19Ci0KLVRFU1RfRihFeHRlbnNpb25EZXNjcmlw
dG9yVGVzdCwgRmluZEFsbEV4dGVuc2lvbnMpIHsKLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3Jp
cHRvcio+IGV4dGVuc2lvbnM7Ci0gIHBvb2xfLkZpbmRBbGxFeHRlbnNpb25zKGZvb18sICZleHRl
bnNpb25zKTsKLSAgQVNTRVJUX0VRKDQsIGV4dGVuc2lvbnMuc2l6ZSgpKTsKLSAgRVhQRUNUX0VR
KDEwLCBleHRlbnNpb25zWzBdLT5udW1iZXIoKSk7Ci0gIEVYUEVDVF9FUSgxOSwgZXh0ZW5zaW9u
c1sxXS0+bnVtYmVyKCkpOwotICBFWFBFQ1RfRVEoMzAsIGV4dGVuc2lvbnNbMl0tPm51bWJlcigp
KTsKLSAgRVhQRUNUX0VRKDM5LCBleHRlbnNpb25zWzNdLT5udW1iZXIoKSk7Ci19Ci0KLVRFU1Rf
RihFeHRlbnNpb25EZXNjcmlwdG9yVGVzdCwgRHVwbGljYXRlRmllbGROdW1iZXIpIHsKLSAgRGVz
Y3JpcHRvclBvb2wgcG9vbDsKLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICAv
LyBBZGQgImdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvIi4KLSAgRmlsZURlc2NyaXB0
b3JQcm90bzo6ZGVzY3JpcHRvcigpLT5maWxlKCktPkNvcHlUbygmZmlsZV9wcm90byk7Ci0gIEFT
U0VSVF9UUlVFKHBvb2wuQnVpbGRGaWxlKGZpbGVfcHJvdG8pICE9IE5VTEwpOwotICAvLyBBZGQg
ImZvby5wcm90byI6Ci0gIC8vICAgaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5w
cm90byI7Ci0gIC8vICAgZXh0ZW5kIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMgewotICAv
LyAgICAgb3B0aW9uYWwgaW50MzIgb3B0aW9uMSA9IDEwMDA7Ci0gIC8vICAgfQotICBmaWxlX3By
b3RvLkNsZWFyKCk7Ci0gIGZpbGVfcHJvdG8uc2V0X25hbWUoImZvby5wcm90byIpOwotICBmaWxl
X3Byb3RvLmFkZF9kZXBlbmRlbmN5KCJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90byIp
OwotICBBZGRFeHRlbnNpb24oJmZpbGVfcHJvdG8sICJnb29nbGUucHJvdG9idWYuRmllbGRPcHRp
b25zIiwgIm9wdGlvbjEiLCAxMDAwLAotICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJv
dG86OkxBQkVMX09QVElPTkFMLAotICAgICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86
OlRZUEVfSU5UMzIpOwotICBBU1NFUlRfVFJVRShwb29sLkJ1aWxkRmlsZShmaWxlX3Byb3RvKSAh
PSBOVUxMKTsKLSAgLy8gQWRkICJiYXIucHJvdG8iOgotICAvLyAgIGltcG9ydCAiZ29vZ2xlL3By
b3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8iOwotICAvLyAgIGV4dGVuZCBnb29nbGUucHJvdG9idWYu
RmllbGRPcHRpb25zIHsKLSAgLy8gICAgIG9wdGlvbmFsIGludDMyIG9wdGlvbjIgPSAxMDAwOwot
ICAvLyAgIH0KLSAgZmlsZV9wcm90by5DbGVhcigpOwotICBmaWxlX3Byb3RvLnNldF9uYW1lKCJi
YXIucHJvdG8iKTsKLSAgZmlsZV9wcm90by5hZGRfZGVwZW5kZW5jeSgiZ29vZ2xlL3Byb3RvYnVm
L2Rlc2NyaXB0b3IucHJvdG8iKTsKLSAgQWRkRXh0ZW5zaW9uKCZmaWxlX3Byb3RvLCAiZ29vZ2xl
LnByb3RvYnVmLkZpZWxkT3B0aW9ucyIsICJvcHRpb24yIiwgMTAwMCwKLSAgICAgICAgICAgICAg
IEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAgICAgIEZp
ZWxkRGVzY3JpcHRvclByb3RvOjpUWVBFX0lOVDMyKTsKLSAgLy8gQ3VycmVudGx5IHdlIG9ubHkg
Z2VuZXJhdGUgYSB3YXJuaW5nIGZvciBjb25mbGljdGluZyBleHRlbnNpb24gbnVtYmVycy4KLSAg
Ly8gVE9ETyh4aWFvZmVuZyk6IENoYW5nZSBpdCB0byBhbiBlcnJvci4KLSAgQVNTRVJUX1RSVUUo
cG9vbC5CdWlsZEZpbGUoZmlsZV9wcm90bykgIT0gTlVMTCk7Ci19Ci0KLS8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotLy8gVGVzdCByZXNlcnZlZCBmaWVsZHMuCi1jbGFzcyBSZXNlcnZlZERlc2NyaXB0b3JUZXN0
IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB2b2lkIFNl
dFVwKCkgewotICAgIC8vIEJ1aWxkIGRlc2NyaXB0b3JzIGZvciB0aGUgZm9sbG93aW5nIGRlZmlu
aXRpb25zOgotICAgIC8vCi0gICAgLy8gICBtZXNzYWdlIEZvbyB7Ci0gICAgLy8gICAgIHJlc2Vy
dmVkIDIsIDkgdG8gMTEsIDE1OwotICAgIC8vICAgICByZXNlcnZlZCAiZm9vIiwgImJhciI7Ci0g
ICAgLy8gICB9Ci0KLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZvb19maWxlOwotICAgIGZvb19m
aWxlLnNldF9uYW1lKCJmb28ucHJvdG8iKTsKLQotICAgIERlc2NyaXB0b3JQcm90byogZm9vID0g
QWRkTWVzc2FnZSgmZm9vX2ZpbGUsICJGb28iKTsKLSAgICBBZGRSZXNlcnZlZFJhbmdlKGZvbywg
MiwgMyk7Ci0gICAgQWRkUmVzZXJ2ZWRSYW5nZShmb28sIDksIDEyKTsKLSAgICBBZGRSZXNlcnZl
ZFJhbmdlKGZvbywgMTUsIDE2KTsKLQotICAgIGZvby0+YWRkX3Jlc2VydmVkX25hbWUoImZvbyIp
OwotICAgIGZvby0+YWRkX3Jlc2VydmVkX25hbWUoImJhciIpOwotCi0gICAgLy8gQnVpbGQgdGhl
IGRlc2NyaXB0b3JzIGFuZCBnZXQgdGhlIHBvaW50ZXJzLgotICAgIGZvb19maWxlXyA9IHBvb2xf
LkJ1aWxkRmlsZShmb29fZmlsZSk7Ci0gICAgQVNTRVJUX1RSVUUoZm9vX2ZpbGVfICE9IE5VTEwp
OwotCi0gICAgQVNTRVJUX0VRKDEsIGZvb19maWxlXy0+bWVzc2FnZV90eXBlX2NvdW50KCkpOwot
ICAgIGZvb18gPSBmb29fZmlsZV8tPm1lc3NhZ2VfdHlwZSgwKTsKLSAgfQotCi0gIERlc2NyaXB0
b3JQb29sIHBvb2xfOwotICBjb25zdCBGaWxlRGVzY3JpcHRvciogZm9vX2ZpbGVfOwotICBjb25z
dCBEZXNjcmlwdG9yKiBmb29fOwotfTsKLQotVEVTVF9GKFJlc2VydmVkRGVzY3JpcHRvclRlc3Qs
IFJlc2VydmVkUmFuZ2VzKSB7Ci0gIEFTU0VSVF9FUSgzLCBmb29fLT5yZXNlcnZlZF9yYW5nZV9j
b3VudCgpKTsKLQotICBFWFBFQ1RfRVEoMiwgZm9vXy0+cmVzZXJ2ZWRfcmFuZ2UoMCktPnN0YXJ0
KTsKLSAgRVhQRUNUX0VRKDMsIGZvb18tPnJlc2VydmVkX3JhbmdlKDApLT5lbmQpOwotCi0gIEVY
UEVDVF9FUSg5LCBmb29fLT5yZXNlcnZlZF9yYW5nZSgxKS0+c3RhcnQpOwotICBFWFBFQ1RfRVEo
MTIsIGZvb18tPnJlc2VydmVkX3JhbmdlKDEpLT5lbmQpOwotCi0gIEVYUEVDVF9FUSgxNSwgZm9v
Xy0+cmVzZXJ2ZWRfcmFuZ2UoMiktPnN0YXJ0KTsKLSAgRVhQRUNUX0VRKDE2LCBmb29fLT5yZXNl
cnZlZF9yYW5nZSgyKS0+ZW5kKTsKLX07Ci0KLVRFU1RfRihSZXNlcnZlZERlc2NyaXB0b3JUZXN0
LCBJc1Jlc2VydmVkTnVtYmVyKSB7Ci0gIEVYUEVDVF9GQUxTRShmb29fLT5Jc1Jlc2VydmVkTnVt
YmVyKDEpKTsKLSAgRVhQRUNUX1RSVUUgKGZvb18tPklzUmVzZXJ2ZWROdW1iZXIoMikpOwotICBF
WFBFQ1RfRkFMU0UoZm9vXy0+SXNSZXNlcnZlZE51bWJlcigzKSk7Ci0gIEVYUEVDVF9GQUxTRShm
b29fLT5Jc1Jlc2VydmVkTnVtYmVyKDgpKTsKLSAgRVhQRUNUX1RSVUUgKGZvb18tPklzUmVzZXJ2
ZWROdW1iZXIoOSkpOwotICBFWFBFQ1RfVFJVRSAoZm9vXy0+SXNSZXNlcnZlZE51bWJlcigxMCkp
OwotICBFWFBFQ1RfVFJVRSAoZm9vXy0+SXNSZXNlcnZlZE51bWJlcigxMSkpOwotICBFWFBFQ1Rf
RkFMU0UoZm9vXy0+SXNSZXNlcnZlZE51bWJlcigxMikpOwotICBFWFBFQ1RfRkFMU0UoZm9vXy0+
SXNSZXNlcnZlZE51bWJlcigxMykpOwotICBFWFBFQ1RfRkFMU0UoZm9vXy0+SXNSZXNlcnZlZE51
bWJlcigxNCkpOwotICBFWFBFQ1RfVFJVRSAoZm9vXy0+SXNSZXNlcnZlZE51bWJlcigxNSkpOwot
ICBFWFBFQ1RfRkFMU0UoZm9vXy0+SXNSZXNlcnZlZE51bWJlcigxNikpOwotfTsKLQotVEVTVF9G
KFJlc2VydmVkRGVzY3JpcHRvclRlc3QsIFJlc2VydmVkTmFtZXMpIHsKLSAgQVNTRVJUX0VRKDIs
IGZvb18tPnJlc2VydmVkX25hbWVfY291bnQoKSk7Ci0KLSAgRVhQRUNUX0VRKCJmb28iLCBmb29f
LT5yZXNlcnZlZF9uYW1lKDApKTsKLSAgRVhQRUNUX0VRKCJiYXIiLCBmb29fLT5yZXNlcnZlZF9u
YW1lKDEpKTsKLX07Ci0KLVRFU1RfRihSZXNlcnZlZERlc2NyaXB0b3JUZXN0LCBJc1Jlc2VydmVk
TmFtZSkgewotICBFWFBFQ1RfVFJVRSAoZm9vXy0+SXNSZXNlcnZlZE5hbWUoImZvbyIpKTsKLSAg
RVhQRUNUX1RSVUUgKGZvb18tPklzUmVzZXJ2ZWROYW1lKCJiYXIiKSk7Ci0gIEVYUEVDVF9GQUxT
RShmb29fLT5Jc1Jlc2VydmVkTmFtZSgiYmF6IikpOwotfTsKLQotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1j
bGFzcyBNaXNjVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIC8v
IEZ1bmN0aW9uIHdoaWNoIG1ha2VzIGEgZmllbGQgZGVzY3JpcHRvciBvZiB0aGUgZ2l2ZW4gdHlw
ZS4KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBHZXRGaWVsZERlc2NyaXB0b3JPZlR5cGUoRmll
bGREZXNjcmlwdG9yOjpUeXBlIHR5cGUpIHsKLSAgICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVf
cHJvdG87Ci0gICAgZmlsZV9wcm90by5zZXRfbmFtZSgiZm9vLnByb3RvIik7Ci0gICAgQWRkRW1w
dHlFbnVtKCZmaWxlX3Byb3RvLCAiRHVtbXlFbnVtIik7Ci0KLSAgICBEZXNjcmlwdG9yUHJvdG8q
IG1lc3NhZ2UgPSBBZGRNZXNzYWdlKCZmaWxlX3Byb3RvLCAiVGVzdE1lc3NhZ2UiKTsKLSAgICBG
aWVsZERlc2NyaXB0b3JQcm90byogZmllbGQgPQotICAgICAgQWRkRmllbGQobWVzc2FnZSwgImZv
byIsIDEsIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJT05BTCwKLSAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEZpZWxkRGVzY3JpcHRvclByb3RvOjpUeXBlPihzdGF0aWNfY2FzdDxp
bnQ+KHR5cGUpKSk7Ci0KLSAgICBpZiAodHlwZSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVT
U0FHRSB8fAotICAgICAgICB0eXBlID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9HUk9VUCkgewot
ICAgICAgZmllbGQtPnNldF90eXBlX25hbWUoIlRlc3RNZXNzYWdlIik7Ci0gICAgfSBlbHNlIGlm
ICh0eXBlID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9FTlVNKSB7Ci0gICAgICBmaWVsZC0+c2V0
X3R5cGVfbmFtZSgiRHVtbXlFbnVtIik7Ci0gICAgfQotCi0gICAgLy8gQnVpbGQgdGhlIGRlc2Ny
aXB0b3JzIGFuZCBnZXQgdGhlIHBvaW50ZXJzLgotICAgIHBvb2xfLnJlc2V0KG5ldyBEZXNjcmlw
dG9yUG9vbCgpKTsKLSAgICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSA9IHBvb2xfLT5CdWls
ZEZpbGUoZmlsZV9wcm90byk7Ci0KLSAgICBpZiAoZmlsZSAhPSBOVUxMICYmCi0gICAgICAgIGZp
bGUtPm1lc3NhZ2VfdHlwZV9jb3VudCgpID09IDEgJiYKLSAgICAgICAgZmlsZS0+bWVzc2FnZV90
eXBlKDApLT5maWVsZF9jb3VudCgpID09IDEpIHsKLSAgICAgIHJldHVybiBmaWxlLT5tZXNzYWdl
X3R5cGUoMCktPmZpZWxkKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0gIH0KLQotICBjb25zdCBjaGFyKiBHZXRUeXBlTmFtZUZvckZpZWxkVHlwZShGaWVsZERl
c2NyaXB0b3I6OlR5cGUgdHlwZSkgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQg
PSBHZXRGaWVsZERlc2NyaXB0b3JPZlR5cGUodHlwZSk7Ci0gICAgcmV0dXJuIGZpZWxkICE9IE5V
TEwgPyBmaWVsZC0+dHlwZV9uYW1lKCkgOiAiIjsKLSAgfQotCi0gIEZpZWxkRGVzY3JpcHRvcjo6
Q3BwVHlwZSBHZXRDcHBUeXBlRm9yRmllbGRUeXBlKEZpZWxkRGVzY3JpcHRvcjo6VHlwZSB0eXBl
KSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IEdldEZpZWxkRGVzY3JpcHRv
ck9mVHlwZSh0eXBlKTsKLSAgICByZXR1cm4gZmllbGQgIT0gTlVMTCA/IGZpZWxkLT5jcHBfdHlw
ZSgpIDoKLSAgICAgICAgc3RhdGljX2Nhc3Q8RmllbGREZXNjcmlwdG9yOjpDcHBUeXBlPigwKTsK
LSAgfQotCi0gIGNvbnN0IGNoYXIqIEdldENwcFR5cGVOYW1lRm9yRmllbGRUeXBlKEZpZWxkRGVz
Y3JpcHRvcjo6VHlwZSB0eXBlKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9
IEdldEZpZWxkRGVzY3JpcHRvck9mVHlwZSh0eXBlKTsKLSAgICByZXR1cm4gZmllbGQgIT0gTlVM
TCA/IGZpZWxkLT5jcHBfdHlwZV9uYW1lKCkgOiAiIjsKLSAgfQotCi0gIGNvbnN0IERlc2NyaXB0
b3IqIEdldE1lc3NhZ2VEZXNjcmlwdG9yRm9yRmllbGRUeXBlKAotICAgICAgRmllbGREZXNjcmlw
dG9yOjpUeXBlIHR5cGUpIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gR2V0
RmllbGREZXNjcmlwdG9yT2ZUeXBlKHR5cGUpOwotICAgIHJldHVybiBmaWVsZCAhPSBOVUxMID8g
ZmllbGQtPm1lc3NhZ2VfdHlwZSgpIDogTlVMTDsKLSAgfQotCi0gIGNvbnN0IEVudW1EZXNjcmlw
dG9yKiBHZXRFbnVtRGVzY3JpcHRvckZvckZpZWxkVHlwZSgKLSAgICBGaWVsZERlc2NyaXB0b3I6
OlR5cGUgdHlwZSkgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBHZXRGaWVs
ZERlc2NyaXB0b3JPZlR5cGUodHlwZSk7Ci0gICAgcmV0dXJuIGZpZWxkICE9IE5VTEwgPyBmaWVs
ZC0+ZW51bV90eXBlKCkgOiBOVUxMOwotICB9Ci0KLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVk
X3B0cjxEZXNjcmlwdG9yUG9vbD4gcG9vbF87Ci19OwotCi1URVNUX0YoTWlzY1Rlc3QsIFR5cGVO
YW1lcykgewotICAvLyBUZXN0IHRoYXQgY29ycmVjdCB0eXBlIG5hbWVzIGFyZSByZXR1cm5lZC4K
LQotICB0eXBlZGVmIEZpZWxkRGVzY3JpcHRvciBGRDsgIC8vIGF2b2lkIHVnbHkgbGluZSB3cmFw
cGluZwotCi0gIEVYUEVDVF9TVFJFUSgiZG91YmxlIiAgLCBHZXRUeXBlTmFtZUZvckZpZWxkVHlw
ZShGRDo6VFlQRV9ET1VCTEUgICkpOwotICBFWFBFQ1RfU1RSRVEoImZsb2F0IiAgICwgR2V0VHlw
ZU5hbWVGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfRkxPQVQgICApKTsKLSAgRVhQRUNUX1NUUkVRKCJp
bnQ2NCIgICAsIEdldFR5cGVOYW1lRm9yRmllbGRUeXBlKEZEOjpUWVBFX0lOVDY0ICAgKSk7Ci0g
IEVYUEVDVF9TVFJFUSgidWludDY0IiAgLCBHZXRUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQ
RV9VSU5UNjQgICkpOwotICBFWFBFQ1RfU1RSRVEoImludDMyIiAgICwgR2V0VHlwZU5hbWVGb3JG
aWVsZFR5cGUoRkQ6OlRZUEVfSU5UMzIgICApKTsKLSAgRVhQRUNUX1NUUkVRKCJmaXhlZDY0IiAs
IEdldFR5cGVOYW1lRm9yRmllbGRUeXBlKEZEOjpUWVBFX0ZJWEVENjQgKSk7Ci0gIEVYUEVDVF9T
VFJFUSgiZml4ZWQzMiIgLCBHZXRUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9GSVhFRDMy
ICkpOwotICBFWFBFQ1RfU1RSRVEoImJvb2wiICAgICwgR2V0VHlwZU5hbWVGb3JGaWVsZFR5cGUo
RkQ6OlRZUEVfQk9PTCAgICApKTsKLSAgRVhQRUNUX1NUUkVRKCJzdHJpbmciICAsIEdldFR5cGVO
YW1lRm9yRmllbGRUeXBlKEZEOjpUWVBFX1NUUklORyAgKSk7Ci0gIEVYUEVDVF9TVFJFUSgiZ3Jv
dXAiICAgLCBHZXRUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9HUk9VUCAgICkpOwotICBF
WFBFQ1RfU1RSRVEoIm1lc3NhZ2UiICwgR2V0VHlwZU5hbWVGb3JGaWVsZFR5cGUoRkQ6OlRZUEVf
TUVTU0FHRSApKTsKLSAgRVhQRUNUX1NUUkVRKCJieXRlcyIgICAsIEdldFR5cGVOYW1lRm9yRmll
bGRUeXBlKEZEOjpUWVBFX0JZVEVTICAgKSk7Ci0gIEVYUEVDVF9TVFJFUSgidWludDMyIiAgLCBH
ZXRUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9VSU5UMzIgICkpOwotICBFWFBFQ1RfU1RS
RVEoImVudW0iICAgICwgR2V0VHlwZU5hbWVGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfRU5VTSAgICAp
KTsKLSAgRVhQRUNUX1NUUkVRKCJzZml4ZWQzMiIsIEdldFR5cGVOYW1lRm9yRmllbGRUeXBlKEZE
OjpUWVBFX1NGSVhFRDMyKSk7Ci0gIEVYUEVDVF9TVFJFUSgic2ZpeGVkNjQiLCBHZXRUeXBlTmFt
ZUZvckZpZWxkVHlwZShGRDo6VFlQRV9TRklYRUQ2NCkpOwotICBFWFBFQ1RfU1RSRVEoInNpbnQz
MiIgICwgR2V0VHlwZU5hbWVGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfU0lOVDMyICApKTsKLSAgRVhQ
RUNUX1NUUkVRKCJzaW50NjQiICAsIEdldFR5cGVOYW1lRm9yRmllbGRUeXBlKEZEOjpUWVBFX1NJ
TlQ2NCAgKSk7Ci19Ci0KLVRFU1RfRihNaXNjVGVzdCwgU3RhdGljVHlwZU5hbWVzKSB7Ci0gIC8v
IFRlc3QgdGhhdCBjb3JyZWN0IHR5cGUgbmFtZXMgYXJlIHJldHVybmVkLgotCi0gIHR5cGVkZWYg
RmllbGREZXNjcmlwdG9yIEZEOyAgLy8gYXZvaWQgdWdseSBsaW5lIHdyYXBwaW5nCi0KLSAgRVhQ
RUNUX1NUUkVRKCJkb3VibGUiICAsIEZEOjpUeXBlTmFtZShGRDo6VFlQRV9ET1VCTEUgICkpOwot
ICBFWFBFQ1RfU1RSRVEoImZsb2F0IiAgICwgRkQ6OlR5cGVOYW1lKEZEOjpUWVBFX0ZMT0FUICAg
KSk7Ci0gIEVYUEVDVF9TVFJFUSgiaW50NjQiICAgLCBGRDo6VHlwZU5hbWUoRkQ6OlRZUEVfSU5U
NjQgICApKTsKLSAgRVhQRUNUX1NUUkVRKCJ1aW50NjQiICAsIEZEOjpUeXBlTmFtZShGRDo6VFlQ
RV9VSU5UNjQgICkpOwotICBFWFBFQ1RfU1RSRVEoImludDMyIiAgICwgRkQ6OlR5cGVOYW1lKEZE
OjpUWVBFX0lOVDMyICAgKSk7Ci0gIEVYUEVDVF9TVFJFUSgiZml4ZWQ2NCIgLCBGRDo6VHlwZU5h
bWUoRkQ6OlRZUEVfRklYRUQ2NCApKTsKLSAgRVhQRUNUX1NUUkVRKCJmaXhlZDMyIiAsIEZEOjpU
eXBlTmFtZShGRDo6VFlQRV9GSVhFRDMyICkpOwotICBFWFBFQ1RfU1RSRVEoImJvb2wiICAgICwg
RkQ6OlR5cGVOYW1lKEZEOjpUWVBFX0JPT0wgICAgKSk7Ci0gIEVYUEVDVF9TVFJFUSgic3RyaW5n
IiAgLCBGRDo6VHlwZU5hbWUoRkQ6OlRZUEVfU1RSSU5HICApKTsKLSAgRVhQRUNUX1NUUkVRKCJn
cm91cCIgICAsIEZEOjpUeXBlTmFtZShGRDo6VFlQRV9HUk9VUCAgICkpOwotICBFWFBFQ1RfU1RS
RVEoIm1lc3NhZ2UiICwgRkQ6OlR5cGVOYW1lKEZEOjpUWVBFX01FU1NBR0UgKSk7Ci0gIEVYUEVD
VF9TVFJFUSgiYnl0ZXMiICAgLCBGRDo6VHlwZU5hbWUoRkQ6OlRZUEVfQllURVMgICApKTsKLSAg
RVhQRUNUX1NUUkVRKCJ1aW50MzIiICAsIEZEOjpUeXBlTmFtZShGRDo6VFlQRV9VSU5UMzIgICkp
OwotICBFWFBFQ1RfU1RSRVEoImVudW0iICAgICwgRkQ6OlR5cGVOYW1lKEZEOjpUWVBFX0VOVU0g
ICAgKSk7Ci0gIEVYUEVDVF9TVFJFUSgic2ZpeGVkMzIiLCBGRDo6VHlwZU5hbWUoRkQ6OlRZUEVf
U0ZJWEVEMzIpKTsKLSAgRVhQRUNUX1NUUkVRKCJzZml4ZWQ2NCIsIEZEOjpUeXBlTmFtZShGRDo6
VFlQRV9TRklYRUQ2NCkpOwotICBFWFBFQ1RfU1RSRVEoInNpbnQzMiIgICwgRkQ6OlR5cGVOYW1l
KEZEOjpUWVBFX1NJTlQzMiAgKSk7Ci0gIEVYUEVDVF9TVFJFUSgic2ludDY0IiAgLCBGRDo6VHlw
ZU5hbWUoRkQ6OlRZUEVfU0lOVDY0ICApKTsKLX0KLQotVEVTVF9GKE1pc2NUZXN0LCBDcHBUeXBl
cykgewotICAvLyBUZXN0IHRoYXQgQ1BQIHR5cGVzIGFyZSBhc3NpZ25lZCBjb3JyZWN0bHkuCi0K
LSAgdHlwZWRlZiBGaWVsZERlc2NyaXB0b3IgRkQ7ICAvLyBhdm9pZCB1Z2x5IGxpbmUgd3JhcHBp
bmcKLQotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfRE9VQkxFICwgR2V0Q3BwVHlwZUZvckZpZWxk
VHlwZShGRDo6VFlQRV9ET1VCTEUgICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfRkxPQVQg
ICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9GTE9BVCAgICkpOwotICBFWFBFQ1Rf
RVEoRkQ6OkNQUFRZUEVfSU5UNjQgICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9J
TlQ2NCAgICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfVUlOVDY0ICwgR2V0Q3BwVHlwZUZv
ckZpZWxkVHlwZShGRDo6VFlQRV9VSU5UNjQgICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVf
SU5UMzIgICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9JTlQzMiAgICkpOwotICBF
WFBFQ1RfRVEoRkQ6OkNQUFRZUEVfVUlOVDY0ICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6
VFlQRV9GSVhFRDY0ICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfVUlOVDMyICwgR2V0Q3Bw
VHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9GSVhFRDMyICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQ
UFRZUEVfQk9PTCAgICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9CT09MICAgICkp
OwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfU1RSSU5HICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlw
ZShGRDo6VFlQRV9TVFJJTkcgICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfTUVTU0FHRSwg
R2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9HUk9VUCAgICkpOwotICBFWFBFQ1RfRVEo
RkQ6OkNQUFRZUEVfTUVTU0FHRSwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9NRVNT
QUdFICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfU1RSSU5HICwgR2V0Q3BwVHlwZUZvckZp
ZWxkVHlwZShGRDo6VFlQRV9CWVRFUyAgICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfVUlO
VDMyICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9VSU5UMzIgICkpOwotICBFWFBF
Q1RfRVEoRkQ6OkNQUFRZUEVfRU5VTSAgICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQ
RV9FTlVNICAgICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfSU5UMzIgICwgR2V0Q3BwVHlw
ZUZvckZpZWxkVHlwZShGRDo6VFlQRV9TRklYRUQzMikpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZ
UEVfSU5UNjQgICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9TRklYRUQ2NCkpOwot
ICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfSU5UMzIgICwgR2V0Q3BwVHlwZUZvckZpZWxkVHlwZShG
RDo6VFlQRV9TSU5UMzIgICkpOwotICBFWFBFQ1RfRVEoRkQ6OkNQUFRZUEVfSU5UNjQgICwgR2V0
Q3BwVHlwZUZvckZpZWxkVHlwZShGRDo6VFlQRV9TSU5UNjQgICkpOwotfQotCi1URVNUX0YoTWlz
Y1Rlc3QsIENwcFR5cGVOYW1lcykgewotICAvLyBUZXN0IHRoYXQgY29ycmVjdCBDUFAgdHlwZSBu
YW1lcyBhcmUgcmV0dXJuZWQuCi0KLSAgdHlwZWRlZiBGaWVsZERlc2NyaXB0b3IgRkQ7ICAvLyBh
dm9pZCB1Z2x5IGxpbmUgd3JhcHBpbmcKLQotICBFWFBFQ1RfU1RSRVEoImRvdWJsZSIgLCBHZXRD
cHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9ET1VCTEUgICkpOwotICBFWFBFQ1RfU1RS
RVEoImZsb2F0IiAgLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9GTE9BVCAg
ICkpOwotICBFWFBFQ1RfU1RSRVEoImludDY0IiAgLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlw
ZShGRDo6VFlQRV9JTlQ2NCAgICkpOwotICBFWFBFQ1RfU1RSRVEoInVpbnQ2NCIgLCBHZXRDcHBU
eXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9VSU5UNjQgICkpOwotICBFWFBFQ1RfU1RSRVEo
ImludDMyIiAgLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9JTlQzMiAgICkp
OwotICBFWFBFQ1RfU1RSRVEoInVpbnQ2NCIgLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShG
RDo6VFlQRV9GSVhFRDY0ICkpOwotICBFWFBFQ1RfU1RSRVEoInVpbnQzMiIgLCBHZXRDcHBUeXBl
TmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9GSVhFRDMyICkpOwotICBFWFBFQ1RfU1RSRVEoImJv
b2wiICAgLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9CT09MICAgICkpOwot
ICBFWFBFQ1RfU1RSRVEoInN0cmluZyIgLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6
VFlQRV9TVFJJTkcgICkpOwotICBFWFBFQ1RfU1RSRVEoIm1lc3NhZ2UiLCBHZXRDcHBUeXBlTmFt
ZUZvckZpZWxkVHlwZShGRDo6VFlQRV9HUk9VUCAgICkpOwotICBFWFBFQ1RfU1RSRVEoIm1lc3Nh
Z2UiLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9NRVNTQUdFICkpOwotICBF
WFBFQ1RfU1RSRVEoInN0cmluZyIgLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQ
RV9CWVRFUyAgICkpOwotICBFWFBFQ1RfU1RSRVEoInVpbnQzMiIgLCBHZXRDcHBUeXBlTmFtZUZv
ckZpZWxkVHlwZShGRDo6VFlQRV9VSU5UMzIgICkpOwotICBFWFBFQ1RfU1RSRVEoImVudW0iICAg
LCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9FTlVNICAgICkpOwotICBFWFBF
Q1RfU1RSRVEoImludDMyIiAgLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9T
RklYRUQzMikpOwotICBFWFBFQ1RfU1RSRVEoImludDY0IiAgLCBHZXRDcHBUeXBlTmFtZUZvckZp
ZWxkVHlwZShGRDo6VFlQRV9TRklYRUQ2NCkpOwotICBFWFBFQ1RfU1RSRVEoImludDMyIiAgLCBH
ZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9TSU5UMzIgICkpOwotICBFWFBFQ1Rf
U1RSRVEoImludDY0IiAgLCBHZXRDcHBUeXBlTmFtZUZvckZpZWxkVHlwZShGRDo6VFlQRV9TSU5U
NjQgICkpOwotfQotCi1URVNUX0YoTWlzY1Rlc3QsIFN0YXRpY0NwcFR5cGVOYW1lcykgewotICAv
LyBUZXN0IHRoYXQgY29ycmVjdCBDUFAgdHlwZSBuYW1lcyBhcmUgcmV0dXJuZWQuCi0KLSAgdHlw
ZWRlZiBGaWVsZERlc2NyaXB0b3IgRkQ7ICAvLyBhdm9pZCB1Z2x5IGxpbmUgd3JhcHBpbmcKLQot
ICBFWFBFQ1RfU1RSRVEoImludDMyIiAgLCBGRDo6Q3BwVHlwZU5hbWUoRkQ6OkNQUFRZUEVfSU5U
MzIgICkpOwotICBFWFBFQ1RfU1RSRVEoImludDY0IiAgLCBGRDo6Q3BwVHlwZU5hbWUoRkQ6OkNQ
UFRZUEVfSU5UNjQgICkpOwotICBFWFBFQ1RfU1RSRVEoInVpbnQzMiIgLCBGRDo6Q3BwVHlwZU5h
bWUoRkQ6OkNQUFRZUEVfVUlOVDMyICkpOwotICBFWFBFQ1RfU1RSRVEoInVpbnQ2NCIgLCBGRDo6
Q3BwVHlwZU5hbWUoRkQ6OkNQUFRZUEVfVUlOVDY0ICkpOwotICBFWFBFQ1RfU1RSRVEoImRvdWJs
ZSIgLCBGRDo6Q3BwVHlwZU5hbWUoRkQ6OkNQUFRZUEVfRE9VQkxFICkpOwotICBFWFBFQ1RfU1RS
RVEoImZsb2F0IiAgLCBGRDo6Q3BwVHlwZU5hbWUoRkQ6OkNQUFRZUEVfRkxPQVQgICkpOwotICBF
WFBFQ1RfU1RSRVEoImJvb2wiICAgLCBGRDo6Q3BwVHlwZU5hbWUoRkQ6OkNQUFRZUEVfQk9PTCAg
ICkpOwotICBFWFBFQ1RfU1RSRVEoImVudW0iICAgLCBGRDo6Q3BwVHlwZU5hbWUoRkQ6OkNQUFRZ
UEVfRU5VTSAgICkpOwotICBFWFBFQ1RfU1RSRVEoInN0cmluZyIgLCBGRDo6Q3BwVHlwZU5hbWUo
RkQ6OkNQUFRZUEVfU1RSSU5HICkpOwotICBFWFBFQ1RfU1RSRVEoIm1lc3NhZ2UiLCBGRDo6Q3Bw
VHlwZU5hbWUoRkQ6OkNQUFRZUEVfTUVTU0FHRSkpOwotfQotCi1URVNUX0YoTWlzY1Rlc3QsIE1l
c3NhZ2VUeXBlKSB7Ci0gIC8vIFRlc3QgdGhhdCBtZXNzYWdlX3R5cGUoKSBpcyBOVUxMIGZvciBu
b24tYWdncmVnYXRlIGZpZWxkcwotCi0gIHR5cGVkZWYgRmllbGREZXNjcmlwdG9yIEZEOyAgLy8g
YXZvaWQgdWdseSBsaW5lIHdyYXBwaW5nCi0KLSAgRVhQRUNUX1RSVUUoTlVMTCA9PSBHZXRNZXNz
YWdlRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9ET1VCTEUgICkpOwotICBFWFBFQ1Rf
VFJVRShOVUxMID09IEdldE1lc3NhZ2VEZXNjcmlwdG9yRm9yRmllbGRUeXBlKEZEOjpUWVBFX0ZM
T0FUICAgKSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgPT0gR2V0TWVzc2FnZURlc2NyaXB0b3JGb3JG
aWVsZFR5cGUoRkQ6OlRZUEVfSU5UNjQgICApKTsKLSAgRVhQRUNUX1RSVUUoTlVMTCA9PSBHZXRN
ZXNzYWdlRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9VSU5UNjQgICkpOwotICBFWFBF
Q1RfVFJVRShOVUxMID09IEdldE1lc3NhZ2VEZXNjcmlwdG9yRm9yRmllbGRUeXBlKEZEOjpUWVBF
X0lOVDMyICAgKSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgPT0gR2V0TWVzc2FnZURlc2NyaXB0b3JG
b3JGaWVsZFR5cGUoRkQ6OlRZUEVfRklYRUQ2NCApKTsKLSAgRVhQRUNUX1RSVUUoTlVMTCA9PSBH
ZXRNZXNzYWdlRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9GSVhFRDMyICkpOwotICBF
WFBFQ1RfVFJVRShOVUxMID09IEdldE1lc3NhZ2VEZXNjcmlwdG9yRm9yRmllbGRUeXBlKEZEOjpU
WVBFX0JPT0wgICAgKSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgPT0gR2V0TWVzc2FnZURlc2NyaXB0
b3JGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfU1RSSU5HICApKTsKLSAgRVhQRUNUX1RSVUUoTlVMTCAh
PSBHZXRNZXNzYWdlRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9HUk9VUCAgICkpOwot
ICBFWFBFQ1RfVFJVRShOVUxMICE9IEdldE1lc3NhZ2VEZXNjcmlwdG9yRm9yRmllbGRUeXBlKEZE
OjpUWVBFX01FU1NBR0UgKSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgPT0gR2V0TWVzc2FnZURlc2Ny
aXB0b3JGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfQllURVMgICApKTsKLSAgRVhQRUNUX1RSVUUoTlVM
TCA9PSBHZXRNZXNzYWdlRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9VSU5UMzIgICkp
OwotICBFWFBFQ1RfVFJVRShOVUxMID09IEdldE1lc3NhZ2VEZXNjcmlwdG9yRm9yRmllbGRUeXBl
KEZEOjpUWVBFX0VOVU0gICAgKSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgPT0gR2V0TWVzc2FnZURl
c2NyaXB0b3JGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfU0ZJWEVEMzIpKTsKLSAgRVhQRUNUX1RSVUUo
TlVMTCA9PSBHZXRNZXNzYWdlRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9TRklYRUQ2
NCkpOwotICBFWFBFQ1RfVFJVRShOVUxMID09IEdldE1lc3NhZ2VEZXNjcmlwdG9yRm9yRmllbGRU
eXBlKEZEOjpUWVBFX1NJTlQzMiAgKSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgPT0gR2V0TWVzc2Fn
ZURlc2NyaXB0b3JGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfU0lOVDY0ICApKTsKLX0KLQotVEVTVF9G
KE1pc2NUZXN0LCBFbnVtVHlwZSkgewotICAvLyBUZXN0IHRoYXQgZW51bV90eXBlKCkgaXMgTlVM
TCBmb3Igbm9uLWVudW0gZmllbGRzCi0KLSAgdHlwZWRlZiBGaWVsZERlc2NyaXB0b3IgRkQ7ICAv
LyBhdm9pZCB1Z2x5IGxpbmUgd3JhcHBpbmcKLQotICBFWFBFQ1RfVFJVRShOVUxMID09IEdldEVu
dW1EZXNjcmlwdG9yRm9yRmllbGRUeXBlKEZEOjpUWVBFX0RPVUJMRSAgKSk7Ci0gIEVYUEVDVF9U
UlVFKE5VTEwgPT0gR2V0RW51bURlc2NyaXB0b3JGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfRkxPQVQg
ICApKTsKLSAgRVhQRUNUX1RSVUUoTlVMTCA9PSBHZXRFbnVtRGVzY3JpcHRvckZvckZpZWxkVHlw
ZShGRDo6VFlQRV9JTlQ2NCAgICkpOwotICBFWFBFQ1RfVFJVRShOVUxMID09IEdldEVudW1EZXNj
cmlwdG9yRm9yRmllbGRUeXBlKEZEOjpUWVBFX1VJTlQ2NCAgKSk7Ci0gIEVYUEVDVF9UUlVFKE5V
TEwgPT0gR2V0RW51bURlc2NyaXB0b3JGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfSU5UMzIgICApKTsK
LSAgRVhQRUNUX1RSVUUoTlVMTCA9PSBHZXRFbnVtRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6
VFlQRV9GSVhFRDY0ICkpOwotICBFWFBFQ1RfVFJVRShOVUxMID09IEdldEVudW1EZXNjcmlwdG9y
Rm9yRmllbGRUeXBlKEZEOjpUWVBFX0ZJWEVEMzIgKSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgPT0g
R2V0RW51bURlc2NyaXB0b3JGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfQk9PTCAgICApKTsKLSAgRVhQ
RUNUX1RSVUUoTlVMTCA9PSBHZXRFbnVtRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9T
VFJJTkcgICkpOwotICBFWFBFQ1RfVFJVRShOVUxMID09IEdldEVudW1EZXNjcmlwdG9yRm9yRmll
bGRUeXBlKEZEOjpUWVBFX0dST1VQICAgKSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgPT0gR2V0RW51
bURlc2NyaXB0b3JGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfTUVTU0FHRSApKTsKLSAgRVhQRUNUX1RS
VUUoTlVMTCA9PSBHZXRFbnVtRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9CWVRFUyAg
ICkpOwotICBFWFBFQ1RfVFJVRShOVUxMID09IEdldEVudW1EZXNjcmlwdG9yRm9yRmllbGRUeXBl
KEZEOjpUWVBFX1VJTlQzMiAgKSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgIT0gR2V0RW51bURlc2Ny
aXB0b3JGb3JGaWVsZFR5cGUoRkQ6OlRZUEVfRU5VTSAgICApKTsKLSAgRVhQRUNUX1RSVUUoTlVM
TCA9PSBHZXRFbnVtRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9TRklYRUQzMikpOwot
ICBFWFBFQ1RfVFJVRShOVUxMID09IEdldEVudW1EZXNjcmlwdG9yRm9yRmllbGRUeXBlKEZEOjpU
WVBFX1NGSVhFRDY0KSk7Ci0gIEVYUEVDVF9UUlVFKE5VTEwgPT0gR2V0RW51bURlc2NyaXB0b3JG
b3JGaWVsZFR5cGUoRkQ6OlRZUEVfU0lOVDMyICApKTsKLSAgRVhQRUNUX1RSVUUoTlVMTCA9PSBH
ZXRFbnVtRGVzY3JpcHRvckZvckZpZWxkVHlwZShGRDo6VFlQRV9TSU5UNjQgICkpOwotfQotCi0K
LVRFU1RfRihNaXNjVGVzdCwgRGVmYXVsdFZhbHVlcykgewotICAvLyBUZXN0IHRoYXQgc2V0dGlu
ZyBkZWZhdWx0IHZhbHVlcyB3b3Jrcy4KLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3Rv
OwotICBmaWxlX3Byb3RvLnNldF9uYW1lKCJmb28ucHJvdG8iKTsKLQotICBFbnVtRGVzY3JpcHRv
clByb3RvKiBlbnVtX3R5cGVfcHJvdG8gPSBBZGRFbnVtKCZmaWxlX3Byb3RvLCAiRHVtbXlFbnVt
Iik7Ci0gIEFkZEVudW1WYWx1ZShlbnVtX3R5cGVfcHJvdG8sICJBIiwgMSk7Ci0gIEFkZEVudW1W
YWx1ZShlbnVtX3R5cGVfcHJvdG8sICJCIiwgMik7Ci0KLSAgRGVzY3JpcHRvclByb3RvKiBtZXNz
YWdlX3Byb3RvID0gQWRkTWVzc2FnZSgmZmlsZV9wcm90bywgIlRlc3RNZXNzYWdlIik7Ci0KLSAg
dHlwZWRlZiBGaWVsZERlc2NyaXB0b3JQcm90byBGRDsgIC8vIGF2b2lkIHVnbHkgbGluZSB3cmFw
cGluZwotICBjb25zdCBGRDo6TGFiZWwgbGFiZWwgPSBGRDo6TEFCRUxfT1BUSU9OQUw7Ci0KLSAg
Ly8gQ3JlYXRlIGZpZWxkcyBvZiBldmVyeSBDUFAgdHlwZSB3aXRoIGRlZmF1bHQgdmFsdWVzLgot
ICBBZGRGaWVsZChtZXNzYWdlX3Byb3RvLCAiaW50MzIiICwgMSwgbGFiZWwsIEZEOjpUWVBFX0lO
VDMyICkKLSAgICAtPnNldF9kZWZhdWx0X3ZhbHVlKCItMSIpOwotICBBZGRGaWVsZChtZXNzYWdl
X3Byb3RvLCAiaW50NjQiICwgMiwgbGFiZWwsIEZEOjpUWVBFX0lOVDY0ICkKLSAgICAtPnNldF9k
ZWZhdWx0X3ZhbHVlKCItMTAwMDAwMDAwMDAwMCIpOwotICBBZGRGaWVsZChtZXNzYWdlX3Byb3Rv
LCAidWludDMyIiwgMywgbGFiZWwsIEZEOjpUWVBFX1VJTlQzMikKLSAgICAtPnNldF9kZWZhdWx0
X3ZhbHVlKCI0MiIpOwotICBBZGRGaWVsZChtZXNzYWdlX3Byb3RvLCAidWludDY0IiwgNCwgbGFi
ZWwsIEZEOjpUWVBFX1VJTlQ2NCkKLSAgICAtPnNldF9kZWZhdWx0X3ZhbHVlKCIyMDAwMDAwMDAw
MDAwIik7Ci0gIEFkZEZpZWxkKG1lc3NhZ2VfcHJvdG8sICJmbG9hdCIgLCA1LCBsYWJlbCwgRkQ6
OlRZUEVfRkxPQVQgKQotICAgIC0+c2V0X2RlZmF1bHRfdmFsdWUoIjQuNSIpOwotICBBZGRGaWVs
ZChtZXNzYWdlX3Byb3RvLCAiZG91YmxlIiwgNiwgbGFiZWwsIEZEOjpUWVBFX0RPVUJMRSkKLSAg
ICAtPnNldF9kZWZhdWx0X3ZhbHVlKCIxMGUxMDAiKTsKLSAgQWRkRmllbGQobWVzc2FnZV9wcm90
bywgImJvb2wiICAsIDcsIGxhYmVsLCBGRDo6VFlQRV9CT09MICApCi0gICAgLT5zZXRfZGVmYXVs
dF92YWx1ZSgidHJ1ZSIpOwotICBBZGRGaWVsZChtZXNzYWdlX3Byb3RvLCAic3RyaW5nIiwgOCwg
bGFiZWwsIEZEOjpUWVBFX1NUUklORykKLSAgICAtPnNldF9kZWZhdWx0X3ZhbHVlKCJoZWxsbyIp
OwotICBBZGRGaWVsZChtZXNzYWdlX3Byb3RvLCAiZGF0YSIgICwgOSwgbGFiZWwsIEZEOjpUWVBF
X0JZVEVTICkKLSAgICAtPnNldF9kZWZhdWx0X3ZhbHVlKCJcXDAwMVxcMDAyXFwwMDMiKTsKLQot
ICBGaWVsZERlc2NyaXB0b3JQcm90byogZW51bV9maWVsZCA9Ci0gICAgQWRkRmllbGQobWVzc2Fn
ZV9wcm90bywgImVudW0iLCAxMCwgbGFiZWwsIEZEOjpUWVBFX0VOVU0pOwotICBlbnVtX2ZpZWxk
LT5zZXRfdHlwZV9uYW1lKCJEdW1teUVudW0iKTsKLSAgZW51bV9maWVsZC0+c2V0X2RlZmF1bHRf
dmFsdWUoIkIiKTsKLQotICAvLyBTdHJpbmdzIGFyZSBhbGxvd2VkIHRvIGhhdmUgZW1wdHkgZGVm
YXVsdHMuICAoQXQgb25lIHBvaW50LCBkdWUgdG8KLSAgLy8gYSBidWcsIGVtcHR5IGRlZmF1bHRz
IGZvciBzdHJpbmdzIHdlcmUgcmVqZWN0ZWQuICBPb3BzLikKLSAgQWRkRmllbGQobWVzc2FnZV9w
cm90bywgImVtcHR5X3N0cmluZyIsIDExLCBsYWJlbCwgRkQ6OlRZUEVfU1RSSU5HKQotICAgIC0+
c2V0X2RlZmF1bHRfdmFsdWUoIiIpOwotCi0gIC8vIEFkZCBhIHNlY29uZCBzZXQgb2YgZmllbGRz
IHdpdGggaW1wbGljaXQgZGVmYWx1dCB2YWx1ZXMuCi0gIEFkZEZpZWxkKG1lc3NhZ2VfcHJvdG8s
ICJpbXBsaWNpdF9pbnQzMiIgLCAyMSwgbGFiZWwsIEZEOjpUWVBFX0lOVDMyICk7Ci0gIEFkZEZp
ZWxkKG1lc3NhZ2VfcHJvdG8sICJpbXBsaWNpdF9pbnQ2NCIgLCAyMiwgbGFiZWwsIEZEOjpUWVBF
X0lOVDY0ICk7Ci0gIEFkZEZpZWxkKG1lc3NhZ2VfcHJvdG8sICJpbXBsaWNpdF91aW50MzIiLCAy
MywgbGFiZWwsIEZEOjpUWVBFX1VJTlQzMik7Ci0gIEFkZEZpZWxkKG1lc3NhZ2VfcHJvdG8sICJp
bXBsaWNpdF91aW50NjQiLCAyNCwgbGFiZWwsIEZEOjpUWVBFX1VJTlQ2NCk7Ci0gIEFkZEZpZWxk
KG1lc3NhZ2VfcHJvdG8sICJpbXBsaWNpdF9mbG9hdCIgLCAyNSwgbGFiZWwsIEZEOjpUWVBFX0ZM
T0FUICk7Ci0gIEFkZEZpZWxkKG1lc3NhZ2VfcHJvdG8sICJpbXBsaWNpdF9kb3VibGUiLCAyNiwg
bGFiZWwsIEZEOjpUWVBFX0RPVUJMRSk7Ci0gIEFkZEZpZWxkKG1lc3NhZ2VfcHJvdG8sICJpbXBs
aWNpdF9ib29sIiAgLCAyNywgbGFiZWwsIEZEOjpUWVBFX0JPT0wgICk7Ci0gIEFkZEZpZWxkKG1l
c3NhZ2VfcHJvdG8sICJpbXBsaWNpdF9zdHJpbmciLCAyOCwgbGFiZWwsIEZEOjpUWVBFX1NUUklO
Ryk7Ci0gIEFkZEZpZWxkKG1lc3NhZ2VfcHJvdG8sICJpbXBsaWNpdF9kYXRhIiAgLCAyOSwgbGFi
ZWwsIEZEOjpUWVBFX0JZVEVTICk7Ci0gIEFkZEZpZWxkKG1lc3NhZ2VfcHJvdG8sICJpbXBsaWNp
dF9lbnVtIiAgLCAzMCwgbGFiZWwsIEZEOjpUWVBFX0VOVU0pCi0gICAgLT5zZXRfdHlwZV9uYW1l
KCJEdW1teUVudW0iKTsKLQotICAvLyBCdWlsZCBpdC4KLSAgRGVzY3JpcHRvclBvb2wgcG9vbDsK
LSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUgPSBwb29sLkJ1aWxkRmlsZShmaWxlX3Byb3Rv
KTsKLSAgQVNTRVJUX1RSVUUoZmlsZSAhPSBOVUxMKTsKLQotICBBU1NFUlRfRVEoMSwgZmlsZS0+
ZW51bV90eXBlX2NvdW50KCkpOwotICBjb25zdCBFbnVtRGVzY3JpcHRvciogZW51bV90eXBlID0g
ZmlsZS0+ZW51bV90eXBlKDApOwotICBBU1NFUlRfRVEoMiwgZW51bV90eXBlLT52YWx1ZV9jb3Vu
dCgpKTsKLSAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogZW51bV92YWx1ZV9hID0gZW51bV90
eXBlLT52YWx1ZSgwKTsKLSAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogZW51bV92YWx1ZV9i
ID0gZW51bV90eXBlLT52YWx1ZSgxKTsKLQotICBBU1NFUlRfRVEoMSwgZmlsZS0+bWVzc2FnZV90
eXBlX2NvdW50KCkpOwotICBjb25zdCBEZXNjcmlwdG9yKiBtZXNzYWdlID0gZmlsZS0+bWVzc2Fn
ZV90eXBlKDApOwotCi0gIEFTU0VSVF9FUSgyMSwgbWVzc2FnZS0+ZmllbGRfY291bnQoKSk7Ci0K
LSAgLy8gQ2hlY2sgdGhlIGRlZmF1bHQgdmFsdWVzLgotICBBU1NFUlRfVFJVRShtZXNzYWdlLT5m
aWVsZCgwKS0+aGFzX2RlZmF1bHRfdmFsdWUoKSk7Ci0gIEFTU0VSVF9UUlVFKG1lc3NhZ2UtPmZp
ZWxkKDEpLT5oYXNfZGVmYXVsdF92YWx1ZSgpKTsKLSAgQVNTRVJUX1RSVUUobWVzc2FnZS0+Zmll
bGQoMiktPmhhc19kZWZhdWx0X3ZhbHVlKCkpOwotICBBU1NFUlRfVFJVRShtZXNzYWdlLT5maWVs
ZCgzKS0+aGFzX2RlZmF1bHRfdmFsdWUoKSk7Ci0gIEFTU0VSVF9UUlVFKG1lc3NhZ2UtPmZpZWxk
KDQpLT5oYXNfZGVmYXVsdF92YWx1ZSgpKTsKLSAgQVNTRVJUX1RSVUUobWVzc2FnZS0+ZmllbGQo
NSktPmhhc19kZWZhdWx0X3ZhbHVlKCkpOwotICBBU1NFUlRfVFJVRShtZXNzYWdlLT5maWVsZCg2
KS0+aGFzX2RlZmF1bHRfdmFsdWUoKSk7Ci0gIEFTU0VSVF9UUlVFKG1lc3NhZ2UtPmZpZWxkKDcp
LT5oYXNfZGVmYXVsdF92YWx1ZSgpKTsKLSAgQVNTRVJUX1RSVUUobWVzc2FnZS0+ZmllbGQoOCkt
Pmhhc19kZWZhdWx0X3ZhbHVlKCkpOwotICBBU1NFUlRfVFJVRShtZXNzYWdlLT5maWVsZCg5KS0+
aGFzX2RlZmF1bHRfdmFsdWUoKSk7Ci0gIEFTU0VSVF9UUlVFKG1lc3NhZ2UtPmZpZWxkKDEwKS0+
aGFzX2RlZmF1bHRfdmFsdWUoKSk7Ci0KLSAgRVhQRUNUX0VRKC0xICAgICAgICAgICAgICAsIG1l
c3NhZ2UtPmZpZWxkKDApLT5kZWZhdWx0X3ZhbHVlX2ludDMyICgpKTsKLSAgRVhQRUNUX0VRKC1H
T09HTEVfVUxPTkdMT05HKDEwMDAwMDAwMDAwMDApLAotICAgICAgICAgICAgbWVzc2FnZS0+Zmll
bGQoMSktPmRlZmF1bHRfdmFsdWVfaW50NjQgKCkpOwotICBFWFBFQ1RfRVEoNDIgICAgICAgICAg
ICAgICwgbWVzc2FnZS0+ZmllbGQoMiktPmRlZmF1bHRfdmFsdWVfdWludDMyKCkpOwotICBFWFBF
Q1RfRVEoR09PR0xFX1VMT05HTE9ORygyMDAwMDAwMDAwMDAwKSwKLSAgICAgICAgICAgIG1lc3Nh
Z2UtPmZpZWxkKDMpLT5kZWZhdWx0X3ZhbHVlX3VpbnQ2NCgpKTsKLSAgRVhQRUNUX0VRKDQuNSAg
ICAgICAgICAgICAsIG1lc3NhZ2UtPmZpZWxkKDQpLT5kZWZhdWx0X3ZhbHVlX2Zsb2F0ICgpKTsK
LSAgRVhQRUNUX0VRKDEwZTEwMCAgICAgICAgICAsIG1lc3NhZ2UtPmZpZWxkKDUpLT5kZWZhdWx0
X3ZhbHVlX2RvdWJsZSgpKTsKLSAgRVhQRUNUX1RSVUUoICAgICAgICAgICAgICAgIG1lc3NhZ2Ut
PmZpZWxkKDYpLT5kZWZhdWx0X3ZhbHVlX2Jvb2wgICgpKTsKLSAgRVhQRUNUX0VRKCJoZWxsbyIg
ICAgICAgICAsIG1lc3NhZ2UtPmZpZWxkKDcpLT5kZWZhdWx0X3ZhbHVlX3N0cmluZygpKTsKLSAg
RVhQRUNUX0VRKCJcMDAxXDAwMlwwMDMiICAsIG1lc3NhZ2UtPmZpZWxkKDgpLT5kZWZhdWx0X3Zh
bHVlX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKGVudW1fdmFsdWVfYiAgICAsIG1lc3NhZ2UtPmZp
ZWxkKDkpLT5kZWZhdWx0X3ZhbHVlX2VudW0gICgpKTsKLSAgRVhQRUNUX0VRKCIiICAgICAgICAg
ICAgICAsIG1lc3NhZ2UtPmZpZWxkKDEwKS0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKSk7Ci0KLSAg
QVNTRVJUX0ZBTFNFKG1lc3NhZ2UtPmZpZWxkKDExKS0+aGFzX2RlZmF1bHRfdmFsdWUoKSk7Ci0g
IEFTU0VSVF9GQUxTRShtZXNzYWdlLT5maWVsZCgxMiktPmhhc19kZWZhdWx0X3ZhbHVlKCkpOwot
ICBBU1NFUlRfRkFMU0UobWVzc2FnZS0+ZmllbGQoMTMpLT5oYXNfZGVmYXVsdF92YWx1ZSgpKTsK
LSAgQVNTRVJUX0ZBTFNFKG1lc3NhZ2UtPmZpZWxkKDE0KS0+aGFzX2RlZmF1bHRfdmFsdWUoKSk7
Ci0gIEFTU0VSVF9GQUxTRShtZXNzYWdlLT5maWVsZCgxNSktPmhhc19kZWZhdWx0X3ZhbHVlKCkp
OwotICBBU1NFUlRfRkFMU0UobWVzc2FnZS0+ZmllbGQoMTYpLT5oYXNfZGVmYXVsdF92YWx1ZSgp
KTsKLSAgQVNTRVJUX0ZBTFNFKG1lc3NhZ2UtPmZpZWxkKDE3KS0+aGFzX2RlZmF1bHRfdmFsdWUo
KSk7Ci0gIEFTU0VSVF9GQUxTRShtZXNzYWdlLT5maWVsZCgxOCktPmhhc19kZWZhdWx0X3ZhbHVl
KCkpOwotICBBU1NFUlRfRkFMU0UobWVzc2FnZS0+ZmllbGQoMTkpLT5oYXNfZGVmYXVsdF92YWx1
ZSgpKTsKLSAgQVNTRVJUX0ZBTFNFKG1lc3NhZ2UtPmZpZWxkKDIwKS0+aGFzX2RlZmF1bHRfdmFs
dWUoKSk7Ci0KLSAgRVhQRUNUX0VRKDAgICAgLCBtZXNzYWdlLT5maWVsZCgxMSktPmRlZmF1bHRf
dmFsdWVfaW50MzIgKCkpOwotICBFWFBFQ1RfRVEoMCAgICAsIG1lc3NhZ2UtPmZpZWxkKDEyKS0+
ZGVmYXVsdF92YWx1ZV9pbnQ2NCAoKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS0+Zmll
bGQoMTMpLT5kZWZhdWx0X3ZhbHVlX3VpbnQzMigpKTsKLSAgRVhQRUNUX0VRKDAgICAgLCBtZXNz
YWdlLT5maWVsZCgxNCktPmRlZmF1bHRfdmFsdWVfdWludDY0KCkpOwotICBFWFBFQ1RfRVEoMC4w
ZiAsIG1lc3NhZ2UtPmZpZWxkKDE1KS0+ZGVmYXVsdF92YWx1ZV9mbG9hdCAoKSk7Ci0gIEVYUEVD
VF9FUSgwLjAgICwgbWVzc2FnZS0+ZmllbGQoMTYpLT5kZWZhdWx0X3ZhbHVlX2RvdWJsZSgpKTsK
LSAgRVhQRUNUX0ZBTFNFKCAgICBtZXNzYWdlLT5maWVsZCgxNyktPmRlZmF1bHRfdmFsdWVfYm9v
bCAgKCkpOwotICBFWFBFQ1RfRVEoIiIgICAsIG1lc3NhZ2UtPmZpZWxkKDE4KS0+ZGVmYXVsdF92
YWx1ZV9zdHJpbmcoKSk7Ci0gIEVYUEVDVF9FUSgiIiAgICwgbWVzc2FnZS0+ZmllbGQoMTkpLT5k
ZWZhdWx0X3ZhbHVlX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKGVudW1fdmFsdWVfYSwgbWVzc2Fn
ZS0+ZmllbGQoMjApLT5kZWZhdWx0X3ZhbHVlX2VudW0oKSk7Ci19Ci0KLVRFU1RfRihNaXNjVGVz
dCwgRmllbGRPcHRpb25zKSB7Ci0gIC8vIFRyeSBzZXR0aW5nIGZpZWxkIG9wdGlvbnMuCi0KLSAg
RmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICBmaWxlX3Byb3RvLnNldF9uYW1lKCJm
b28ucHJvdG8iKTsKLQotICBEZXNjcmlwdG9yUHJvdG8qIG1lc3NhZ2VfcHJvdG8gPSBBZGRNZXNz
YWdlKCZmaWxlX3Byb3RvLCAiVGVzdE1lc3NhZ2UiKTsKLSAgQWRkRmllbGQobWVzc2FnZV9wcm90
bywgImZvbyIsIDEsCi0gICAgICAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9PUFRJ
T05BTCwKLSAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfSU5UMzIpOwotICBG
aWVsZERlc2NyaXB0b3JQcm90byogYmFyX3Byb3RvID0KLSAgICBBZGRGaWVsZChtZXNzYWdlX3By
b3RvLCAiYmFyIiwgMiwKLSAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6TEFCRUxf
T1BUSU9OQUwsCi0gICAgICAgICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfSU5UMzIp
OwotCi0gIEZpZWxkT3B0aW9ucyogb3B0aW9ucyA9IGJhcl9wcm90by0+bXV0YWJsZV9vcHRpb25z
KCk7Ci0gIG9wdGlvbnMtPnNldF9jdHlwZShGaWVsZE9wdGlvbnM6OkNPUkQpOwotCi0gIC8vIEJ1
aWxkIHRoZSBkZXNjcmlwdG9ycyBhbmQgZ2V0IHRoZSBwb2ludGVycy4KLSAgRGVzY3JpcHRvclBv
b2wgcG9vbDsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUgPSBwb29sLkJ1aWxkRmlsZShm
aWxlX3Byb3RvKTsKLSAgQVNTRVJUX1RSVUUoZmlsZSAhPSBOVUxMKTsKLQotICBBU1NFUlRfRVEo
MSwgZmlsZS0+bWVzc2FnZV90eXBlX2NvdW50KCkpOwotICBjb25zdCBEZXNjcmlwdG9yKiBtZXNz
YWdlID0gZmlsZS0+bWVzc2FnZV90eXBlKDApOwotCi0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLT5m
aWVsZF9jb3VudCgpKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmb28gPSBtZXNzYWdlLT5m
aWVsZCgwKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBiYXIgPSBtZXNzYWdlLT5maWVsZCgx
KTsKLQotICAvLyAiZm9vIiBoYWQgbm8gb3B0aW9ucyBzZXQsIHNvIGl0IHNob3VsZCByZXR1cm4g
dGhlIGRlZmF1bHQgb3B0aW9ucy4KLSAgRVhQRUNUX0VRKCZGaWVsZE9wdGlvbnM6OmRlZmF1bHRf
aW5zdGFuY2UoKSwgJmZvby0+b3B0aW9ucygpKTsKLQotICAvLyAiYmFyIiBoYWQgb3B0aW9ucyBz
ZXQuCi0gIEVYUEVDVF9ORSgmRmllbGRPcHRpb25zOjpkZWZhdWx0X2luc3RhbmNlKCksIG9wdGlv
bnMpOwotICBFWFBFQ1RfVFJVRShiYXItPm9wdGlvbnMoKS5oYXNfY3R5cGUoKSk7Ci0gIEVYUEVD
VF9FUShGaWVsZE9wdGlvbnM6OkNPUkQsIGJhci0+b3B0aW9ucygpLmN0eXBlKCkpOwotfQotCi0v
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci1lbnVtIERlc2NyaXB0b3JQb29sTW9kZSB7Ci0gIE5PX0RBVEFCQVNFLAot
ICBGQUxMQkFDS19EQVRBQkFTRQotfTsKLQotY2xhc3MgQWxsb3dVbmtub3duRGVwZW5kZW5jaWVz
VGVzdAotICAgIDogcHVibGljIHRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08RGVzY3JpcHRvclBvb2xN
b2RlPiB7Ci0gcHJvdGVjdGVkOgotICBEZXNjcmlwdG9yUG9vbE1vZGUgbW9kZSgpIHsKLSAgICBy
ZXR1cm4gR2V0UGFyYW0oKTsKLSAgIH0KLQotICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSB7Ci0gICAg
RmlsZURlc2NyaXB0b3JQcm90byBmb29fcHJvdG8sIGJhcl9wcm90bzsKLQotICAgIHN3aXRjaCAo
bW9kZSgpKSB7Ci0gICAgICBjYXNlIE5PX0RBVEFCQVNFOgotICAgICAgICBwb29sXy5yZXNldChu
ZXcgRGVzY3JpcHRvclBvb2wpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRkFMTEJBQ0tf
REFUQUJBU0U6Ci0gICAgICAgIHBvb2xfLnJlc2V0KG5ldyBEZXNjcmlwdG9yUG9vbCgmZGJfKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHBvb2xfLT5BbGxvd1Vua25vd25EZXBlbmRl
bmNpZXMoKTsKLQotICAgIEFTU0VSVF9UUlVFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZygK
LSAgICAgICJuYW1lOiAnZm9vLnByb3RvJyIKLSAgICAgICJkZXBlbmRlbmN5OiAnYmFyLnByb3Rv
JyIKLSAgICAgICJkZXBlbmRlbmN5OiAnYmF6LnByb3RvJyIKLSAgICAgICJtZXNzYWdlX3R5cGUg
eyIKLSAgICAgICIgIG5hbWU6ICdGb28nIgotICAgICAgIiAgZmllbGQgeyBuYW1lOidiYXInIG51
bWJlcjoxIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGVfbmFtZTonQmFyJyB9IgotICAgICAgIiAg
ZmllbGQgeyBuYW1lOidiYXonIG51bWJlcjoyIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGVfbmFt
ZTonQmF6JyB9IgotICAgICAgIiAgZmllbGQgeyBuYW1lOidxdXgnIG51bWJlcjozIGxhYmVsOkxB
QkVMX09QVElPTkFMIgotICAgICAgIiAgICB0eXBlX25hbWU6ICcuY29yZ2UuUXV4JyIKLSAgICAg
ICIgICAgdHlwZTogVFlQRV9FTlVNIgotICAgICAgIiAgICBvcHRpb25zIHsiCi0gICAgICAiICAg
ICAgdW5pbnRlcnByZXRlZF9vcHRpb24geyIKLSAgICAgICIgICAgICAgIG5hbWUgeyIKLSAgICAg
ICIgICAgICAgICAgbmFtZV9wYXJ0OiAnZ3JhdWx0JyIKLSAgICAgICIgICAgICAgICAgaXNfZXh0
ZW5zaW9uOiB0cnVlIgotICAgICAgIiAgICAgICAgfSIKLSAgICAgICIgICAgICAgIHBvc2l0aXZl
X2ludF92YWx1ZTogMTIzNCIKLSAgICAgICIgICAgICB9IgotICAgICAgIiAgICB9IgotICAgICAg
IiAgfSIKLSAgICAgICJ9IiwKLSAgICAgICZmb29fcHJvdG8pKTsKLSAgICBBU1NFUlRfVFJVRShU
ZXh0Rm9ybWF0OjpQYXJzZUZyb21TdHJpbmcoCi0gICAgICAibmFtZTogJ2Jhci5wcm90byciCi0g
ICAgICAibWVzc2FnZV90eXBlIHsgbmFtZTogJ0JhcicgfSIsCi0gICAgICAmYmFyX3Byb3RvKSk7
Ci0KLSAgICAvLyBDb2xsZWN0IHBvaW50ZXJzIHRvIHN0dWZmLgotICAgIGJhcl9maWxlXyA9IEJ1
aWxkRmlsZShiYXJfcHJvdG8pOwotICAgIEFTU0VSVF9UUlVFKGJhcl9maWxlXyAhPSBOVUxMKTsK
LQotICAgIEFTU0VSVF9FUSgxLCBiYXJfZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3VudCgpKTsKLSAg
ICBiYXJfdHlwZV8gPSBiYXJfZmlsZV8tPm1lc3NhZ2VfdHlwZSgwKTsKLQotICAgIGZvb19maWxl
XyA9IEJ1aWxkRmlsZShmb29fcHJvdG8pOwotICAgIEFTU0VSVF9UUlVFKGZvb19maWxlXyAhPSBO
VUxMKTsKLQotICAgIEFTU0VSVF9FUSgxLCBmb29fZmlsZV8tPm1lc3NhZ2VfdHlwZV9jb3VudCgp
KTsKLSAgICBmb29fdHlwZV8gPSBmb29fZmlsZV8tPm1lc3NhZ2VfdHlwZSgwKTsKLQotICAgIEFT
U0VSVF9FUSgzLCBmb29fdHlwZV8tPmZpZWxkX2NvdW50KCkpOwotICAgIGJhcl9maWVsZF8gPSBm
b29fdHlwZV8tPmZpZWxkKDApOwotICAgIGJhel9maWVsZF8gPSBmb29fdHlwZV8tPmZpZWxkKDEp
OwotICAgIHF1eF9maWVsZF8gPSBmb29fdHlwZV8tPmZpZWxkKDIpOwotICB9Ci0KLSAgY29uc3Qg
RmlsZURlc2NyaXB0b3IqIEJ1aWxkRmlsZShjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvJiBwcm90
bykgewotICAgIHN3aXRjaCAobW9kZSgpKSB7Ci0gICAgICBjYXNlIE5PX0RBVEFCQVNFOgotICAg
ICAgICByZXR1cm4gcG9vbF8tPkJ1aWxkRmlsZShwcm90byk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBGQUxMQkFDS19EQVRBQkFTRTogewotICAgICAgICBFWFBFQ1RfVFJVRShkYl8uQWRk
KHByb3RvKSk7Ci0gICAgICAgIHJldHVybiBwb29sXy0+RmluZEZpbGVCeU5hbWUocHJvdG8ubmFt
ZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdl
dCBoZXJlLiI7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBjb25zdCBGaWxlRGVzY3JpcHRv
ciogYmFyX2ZpbGVfOwotICBjb25zdCBEZXNjcmlwdG9yKiBiYXJfdHlwZV87Ci0gIGNvbnN0IEZp
bGVEZXNjcmlwdG9yKiBmb29fZmlsZV87Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGZvb190eXBlXzsK
LSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBiYXJfZmllbGRfOwotICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGJhel9maWVsZF87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogcXV4X2ZpZWxkXzsK
LQotICBTaW1wbGVEZXNjcmlwdG9yRGF0YWJhc2UgZGJfOyAgICAgICAgLy8gdXNlZCBpZiBpbiBG
QUxMQkFDS19EQVRBQkFTRSBtb2RlLgotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPERl
c2NyaXB0b3JQb29sPiBwb29sXzsKLX07Ci0KLVRFU1RfUChBbGxvd1Vua25vd25EZXBlbmRlbmNp
ZXNUZXN0LCBQbGFjZWhvbGRlckZpbGUpIHsKLSAgQVNTRVJUX0VRKDIsIGZvb19maWxlXy0+ZGVw
ZW5kZW5jeV9jb3VudCgpKTsKLSAgRVhQRUNUX0VRKGJhcl9maWxlXywgZm9vX2ZpbGVfLT5kZXBl
bmRlbmN5KDApKTsKLSAgRVhQRUNUX0ZBTFNFKGJhcl9maWxlXy0+aXNfcGxhY2Vob2xkZXIoKSk7
Ci0KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGJhel9maWxlID0gZm9vX2ZpbGVfLT5kZXBlbmRl
bmN5KDEpOwotICBFWFBFQ1RfRVEoImJhei5wcm90byIsIGJhel9maWxlLT5uYW1lKCkpOwotICBF
WFBFQ1RfRVEoMCwgYmF6X2ZpbGUtPm1lc3NhZ2VfdHlwZV9jb3VudCgpKTsKLSAgRVhQRUNUX1RS
VUUoYmF6X2ZpbGUtPmlzX3BsYWNlaG9sZGVyKCkpOwotCi0gIC8vIFBsYWNlaG9sZGVyIGZpbGVz
IHNob3VsZCBub3QgYmUgZmluZGFibGUuCi0gIEVYUEVDVF9FUShiYXJfZmlsZV8sIHBvb2xfLT5G
aW5kRmlsZUJ5TmFtZShiYXJfZmlsZV8tPm5hbWUoKSkpOwotICBFWFBFQ1RfVFJVRShwb29sXy0+
RmluZEZpbGVCeU5hbWUoYmF6X2ZpbGUtPm5hbWUoKSkgPT0gTlVMTCk7Ci0KLSAgLy8gQ29weSpU
byBzaG91bGQgbm90IGNyYXNoIGZvciBwbGFjZWhvbGRlciBmaWxlcy4KLSAgRmlsZURlc2NyaXB0
b3JQcm90byBiYXpfZmlsZV9wcm90bzsKLSAgYmF6X2ZpbGUtPkNvcHlUbygmYmF6X2ZpbGVfcHJv
dG8pOwotICBiYXpfZmlsZS0+Q29weVNvdXJjZUNvZGVJbmZvVG8oJmJhel9maWxlX3Byb3RvKTsK
LSAgRVhQRUNUX0ZBTFNFKGJhel9maWxlX3Byb3RvLmhhc19zb3VyY2VfY29kZV9pbmZvKCkpOwot
fQotCi1URVNUX1AoQWxsb3dVbmtub3duRGVwZW5kZW5jaWVzVGVzdCwgUGxhY2Vob2xkZXJUeXBl
cykgewotICBBU1NFUlRfRVEoRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0UsIGJhcl9maWVs
ZF8tPnR5cGUoKSk7Ci0gIEVYUEVDVF9FUShiYXJfdHlwZV8sIGJhcl9maWVsZF8tPm1lc3NhZ2Vf
dHlwZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKGJhcl90eXBlXy0+aXNfcGxhY2Vob2xkZXIoKSk7Ci0K
LSAgQVNTRVJUX0VRKEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdFLCBiYXpfZmllbGRfLT50
eXBlKCkpOwotICBjb25zdCBEZXNjcmlwdG9yKiBiYXpfdHlwZSA9IGJhel9maWVsZF8tPm1lc3Nh
Z2VfdHlwZSgpOwotICBFWFBFQ1RfRVEoIkJheiIsIGJhel90eXBlLT5uYW1lKCkpOwotICBFWFBF
Q1RfRVEoIkJheiIsIGJhel90eXBlLT5mdWxsX25hbWUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBiYXpf
dHlwZS0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCkpOwotICBFWFBFQ1RfVFJVRShiYXpfdHlwZS0+
aXNfcGxhY2Vob2xkZXIoKSk7Ci0KLSAgQVNTRVJUX0VRKEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9F
TlVNLCBxdXhfZmllbGRfLT50eXBlKCkpOwotICBjb25zdCBFbnVtRGVzY3JpcHRvciogcXV4X3R5
cGUgPSBxdXhfZmllbGRfLT5lbnVtX3R5cGUoKTsKLSAgRVhQRUNUX0VRKCJRdXgiLCBxdXhfdHlw
ZS0+bmFtZSgpKTsKLSAgRVhQRUNUX0VRKCJjb3JnZS5RdXgiLCBxdXhfdHlwZS0+ZnVsbF9uYW1l
KCkpOwotICBFWFBFQ1RfVFJVRShxdXhfdHlwZS0+aXNfcGxhY2Vob2xkZXIoKSk7Ci0KLSAgLy8g
UGxhY2Vob2xkZXIgdHlwZXMgc2hvdWxkIG5vdCBiZSBmaW5kYWJsZS4KLSAgRVhQRUNUX0VRKGJh
cl90eXBlXywgcG9vbF8tPkZpbmRNZXNzYWdlVHlwZUJ5TmFtZShiYXJfdHlwZV8tPmZ1bGxfbmFt
ZSgpKSk7Ci0gIEVYUEVDVF9UUlVFKHBvb2xfLT5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoYmF6X3R5
cGUtPmZ1bGxfbmFtZSgpKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUocG9vbF8tPkZpbmRFbnVt
VHlwZUJ5TmFtZShxdXhfdHlwZS0+ZnVsbF9uYW1lKCkpID09IE5VTEwpOwotfQotCi1URVNUX1Ao
QWxsb3dVbmtub3duRGVwZW5kZW5jaWVzVGVzdCwgQ29weVRvKSB7Ci0gIC8vIEZpZWxkRGVzY3Jp
cHRvcjo6Q29weVRvKCkgc2hvdWxkIHdyaXRlIG5vbi1mdWxseS1xdWFsaWZpZWQgdHlwZSBuYW1l
cwotICAvLyBmb3IgcGxhY2Vob2xkZXIgdHlwZXMgd2hpY2ggd2VyZSBub3Qgb3JpZ2luYWxseSBm
dWxseS1xdWFsaWZpZWQuCi0gIEZpZWxkRGVzY3JpcHRvclByb3RvIHByb3RvOwotCi0gIC8vIEJh
ciBpcyBub3QgYSBwbGFjZWhvbGRlciwgc28gaXQgaXMgZnVsbHktcXVhbGlmaWVkLgotICBiYXJf
ZmllbGRfLT5Db3B5VG8oJnByb3RvKTsKLSAgRVhQRUNUX0VRKCIuQmFyIiwgcHJvdG8udHlwZV9u
YW1lKCkpOwotICBFWFBFQ1RfRVEoRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfTUVTU0FHRSwg
cHJvdG8udHlwZSgpKTsKLQotICAvLyBCYXogaXMgYW4gdW5xdWFsaWZpZWQgcGxhY2Vob2xkZXIu
Ci0gIHByb3RvLkNsZWFyKCk7Ci0gIGJhel9maWVsZF8tPkNvcHlUbygmcHJvdG8pOwotICBFWFBF
Q1RfRVEoIkJheiIsIHByb3RvLnR5cGVfbmFtZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKHByb3RvLmhh
c190eXBlKCkpOwotCi0gIC8vIFF1eCBpcyBhIGZ1bGx5LXF1YWxpZmllZCBwbGFjZWhvbGRlci4K
LSAgcHJvdG8uQ2xlYXIoKTsKLSAgcXV4X2ZpZWxkXy0+Q29weVRvKCZwcm90byk7Ci0gIEVYUEVD
VF9FUSgiLmNvcmdlLlF1eCIsIHByb3RvLnR5cGVfbmFtZSgpKTsKLSAgRVhQRUNUX0VRKEZpZWxk
RGVzY3JpcHRvclByb3RvOjpUWVBFX0VOVU0sIHByb3RvLnR5cGUoKSk7Ci19Ci0KLVRFU1RfUChB
bGxvd1Vua25vd25EZXBlbmRlbmNpZXNUZXN0LCBDdXN0b21PcHRpb25zKSB7Ci0gIC8vIFF1eCBz
aG91bGQgc3RpbGwgaGF2ZSB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24gYXR0YWNoZWQuCi0gIEFT
U0VSVF9FUSgxLCBxdXhfZmllbGRfLT5vcHRpb25zKCkudW5pbnRlcnByZXRlZF9vcHRpb25fc2l6
ZSgpKTsKLSAgY29uc3QgVW5pbnRlcnByZXRlZE9wdGlvbiYgb3B0aW9uID0KLSAgICBxdXhfZmll
bGRfLT5vcHRpb25zKCkudW5pbnRlcnByZXRlZF9vcHRpb24oMCk7Ci0gIEFTU0VSVF9FUSgxLCBv
cHRpb24ubmFtZV9zaXplKCkpOwotICBFWFBFQ1RfRVEoImdyYXVsdCIsIG9wdGlvbi5uYW1lKDAp
Lm5hbWVfcGFydCgpKTsKLX0KLQotVEVTVF9QKEFsbG93VW5rbm93bkRlcGVuZGVuY2llc1Rlc3Qs
IFVua25vd25FeHRlbmRlZSkgewotICAvLyBUZXN0IHRoYXQgd2UgY2FuIGV4dGVuZCBhbiB1bmtu
b3duIHR5cGUuICBUaGlzIGlzIHNsaWdodGx5IHRyaWNreSBiZWNhdXNlCi0gIC8vIGl0IG1lYW5z
IHRoYXQgdGhlIHBsYWNlaG9sZGVyIHR5cGUgbXVzdCBoYXZlIGFuIGV4dGVuc2lvbiByYW5nZS4K
LQotICBGaWxlRGVzY3JpcHRvclByb3RvIGV4dGVuc2lvbl9wcm90bzsKLQotICBBU1NFUlRfVFJV
RShUZXh0Rm9ybWF0OjpQYXJzZUZyb21TdHJpbmcoCi0gICAgIm5hbWU6ICdleHRlbnNpb24ucHJv
dG8nIgotICAgICJleHRlbnNpb24geyBleHRlbmRlZTogJ1Vua25vd25UeXBlJyBuYW1lOidzb21l
X2V4dGVuc2lvbicgbnVtYmVyOjEyMyIKLSAgICAiICAgICAgICAgICAgbGFiZWw6TEFCRUxfT1BU
SU9OQUwgdHlwZTpUWVBFX0lOVDMyIH0iLAotICAgICZleHRlbnNpb25fcHJvdG8pKTsKLSAgY29u
c3QgRmlsZURlc2NyaXB0b3IqIGZpbGUgPSBCdWlsZEZpbGUoZXh0ZW5zaW9uX3Byb3RvKTsKLQot
ICBBU1NFUlRfVFJVRShmaWxlICE9IE5VTEwpOwotCi0gIEFTU0VSVF9FUSgxLCBmaWxlLT5leHRl
bnNpb25fY291bnQoKSk7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGV4dGVuZGVlID0gZmlsZS0+ZXh0
ZW5zaW9uKDApLT5jb250YWluaW5nX3R5cGUoKTsKLSAgRVhQRUNUX0VRKCJVbmtub3duVHlwZSIs
IGV4dGVuZGVlLT5uYW1lKCkpOwotICBFWFBFQ1RfVFJVRShleHRlbmRlZS0+aXNfcGxhY2Vob2xk
ZXIoKSk7Ci0gIEFTU0VSVF9FUSgxLCBleHRlbmRlZS0+ZXh0ZW5zaW9uX3JhbmdlX2NvdW50KCkp
OwotICBFWFBFQ1RfRVEoMSwgZXh0ZW5kZWUtPmV4dGVuc2lvbl9yYW5nZSgwKS0+c3RhcnQpOwot
ICBFWFBFQ1RfRVEoRmllbGREZXNjcmlwdG9yOjprTWF4TnVtYmVyICsgMSwgZXh0ZW5kZWUtPmV4
dGVuc2lvbl9yYW5nZSgwKS0+ZW5kKTsKLX0KLQotVEVTVF9QKEFsbG93VW5rbm93bkRlcGVuZGVu
Y2llc1Rlc3QsIEN1c3RvbU9wdGlvbikgewotICAvLyBUZXN0IHRoYXQgd2UgY2FuIHVzZSBhIGN1
c3RvbSBvcHRpb24gd2l0aG91dCBoYXZpbmcgcGFyc2VkCi0gIC8vIGRlc2NyaXB0b3IucHJvdG8u
Ci0KLSAgRmlsZURlc2NyaXB0b3JQcm90byBvcHRpb25fcHJvdG87Ci0KLSAgQVNTRVJUX1RSVUUo
VGV4dEZvcm1hdDo6UGFyc2VGcm9tU3RyaW5nKAotICAgICJuYW1lOiBcInVua25vd25fY3VzdG9t
X29wdGlvbnMucHJvdG9cIiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZ29vZ2xlL3Byb3RvYnVmL2Rl
c2NyaXB0b3IucHJvdG9cIiAiCi0gICAgImV4dGVuc2lvbiB7ICIKLSAgICAiICBleHRlbmRlZTog
XCJnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnNcIiAiCi0gICAgIiAgbmFtZTogXCJzb21lX29w
dGlvblwiICIKLSAgICAiICBudW1iZXI6IDEyMzQ1NiAiCi0gICAgIiAgbGFiZWw6IExBQkVMX09Q
VElPTkFMICIKLSAgICAiICB0eXBlOiBUWVBFX0lOVDMyICIKLSAgICAifSAiCi0gICAgIm9wdGlv
bnMgeyAiCi0gICAgIiAgdW5pbnRlcnByZXRlZF9vcHRpb24geyAiCi0gICAgIiAgICBuYW1lIHsg
IgotICAgICIgICAgICBuYW1lX3BhcnQ6IFwic29tZV9vcHRpb25cIiAiCi0gICAgIiAgICAgIGlz
X2V4dGVuc2lvbjogdHJ1ZSAiCi0gICAgIiAgICB9ICIKLSAgICAiICAgIHBvc2l0aXZlX2ludF92
YWx1ZTogMTIzNCAiCi0gICAgIiAgfSAiCi0gICAgIiAgdW5pbnRlcnByZXRlZF9vcHRpb24geyAi
Ci0gICAgIiAgICBuYW1lIHsgIgotICAgICIgICAgICBuYW1lX3BhcnQ6IFwidW5rbm93bl9vcHRp
b25cIiAiCi0gICAgIiAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSAiCi0gICAgIiAgICB9ICIKLSAg
ICAiICAgIHBvc2l0aXZlX2ludF92YWx1ZTogMTIzNCAiCi0gICAgIiAgfSAiCi0gICAgIiAgdW5p
bnRlcnByZXRlZF9vcHRpb24geyAiCi0gICAgIiAgICBuYW1lIHsgIgotICAgICIgICAgICBuYW1l
X3BhcnQ6IFwib3B0aW1pemVfZm9yXCIgIgotICAgICIgICAgICBpc19leHRlbnNpb246IGZhbHNl
ICIKLSAgICAiICAgIH0gIgotICAgICIgICAgaWRlbnRpZmllcl92YWx1ZTogXCJTUEVFRFwiICIK
LSAgICAiICB9ICIKLSAgICAifSIsCi0gICAgJm9wdGlvbl9wcm90bykpOwotCi0gIGNvbnN0IEZp
bGVEZXNjcmlwdG9yKiBmaWxlID0gQnVpbGRGaWxlKG9wdGlvbl9wcm90byk7Ci0gIEFTU0VSVF9U
UlVFKGZpbGUgIT0gTlVMTCk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgbm8gZXh0ZW5zaW9uIG9wdGlv
bnMgd2VyZSBzZXQsIGJ1dCB0aGV5IHdlcmUgbGVmdCBhcwotICAvLyB1bmludGVycHJldGVkX29w
dGlvbnMuCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIGZpbGUt
Pm9wdGlvbnMoKS5HZXRSZWZsZWN0aW9uKCktPkxpc3RGaWVsZHMoZmlsZS0+b3B0aW9ucygpLCAm
ZmllbGRzKTsKLSAgQVNTRVJUX0VRKDIsIGZpZWxkcy5zaXplKCkpOwotICBFWFBFQ1RfVFJVRShm
aWxlLT5vcHRpb25zKCkuaGFzX29wdGltaXplX2ZvcigpKTsKLSAgRVhQRUNUX0VRKDIsIGZpbGUt
Pm9wdGlvbnMoKS51bmludGVycHJldGVkX29wdGlvbl9zaXplKCkpOwotfQotCi1URVNUX1AoQWxs
b3dVbmtub3duRGVwZW5kZW5jaWVzVGVzdCwKLSAgICAgICBVbmRlY2xhcmVkRGVwZW5kZW5jeVRy
aWdnZXJzQnVpbGRPZkRlcGVuZGVuY3kpIHsKLSAgLy8gQ3JhenkgY2FzZTogc3VwcG9zZSBmb28u
cHJvdG8gcmVmZXJzIHRvIGEgc3ltYm9sIHdpdGhvdXQgZGVjbGFyaW5nIHRoZQotICAvLyBkZXBl
bmRlbmN5IHRoYXQgZmluZHMgaXQuIEluIHRoZSBldmVudCB0aGF0IHRoZSBwb29sIGlzIGJhY2tl
ZCBieSBhCi0gIC8vIERlc2NyaXB0b3JEYXRhYmFzZSwgdGhlIHBvb2wgd2lsbCBhdHRlbXB0IHRv
IGZpbmQgdGhlIHN5bWJvbCBpbiB0aGUKLSAgLy8gZGF0YWJhc2UuIElmIHN1Y2Nlc3NmdWwsIGl0
IHdpbGwgYnVpbGQgdGhlIHVuZGVjbGFyZWQgZGVwZW5kZW5jeSB0byB2ZXJpZnkKLSAgLy8gdGhh
dCB0aGUgZmlsZSBkb2VzIGluZGVlZCBjb250YWluIHRoZSBzeW1ib2wuIElmIHRoYXQgZmlsZSBm
YWlscyB0byBidWlsZCwKLSAgLy8gdGhlbiBpdHMgZGVzY3JpcHRvcnMgbXVzdCBiZSByb2xsZWQg
YmFjay4gSG93ZXZlciwgd2Ugc3RpbGwgd2FudCBmb28ucHJvdG8KLSAgLy8gdG8gYnVpbGQgc3Vj
Y2Vzc2Z1bGx5LCBzaW5jZSB3ZSBhcmUgYWxsb3dpbmcgdW5rbm93biBkZXBlbmRlbmNpZXMuCi0K
LSAgRmlsZURlc2NyaXB0b3JQcm90byB1bmRlY2xhcmVkX2RlcF9wcm90bzsKLSAgLy8gV2UgbWFr
ZSB0aGlzIGZpbGUgZmFpbCB0byBidWlsZCBieSBnaXZpbmcgaXQgdHdvIGZpZWxkcyB3aXRoIHRh
ZyAxLgotICBBU1NFUlRfVFJVRShUZXh0Rm9ybWF0OjpQYXJzZUZyb21TdHJpbmcoCi0gICAgIm5h
bWU6IFwiaW52YWxpZF9maWxlX2FzX3VuZGVjbGFyZWRfZGVwLnByb3RvXCIgIgotICAgICJwYWNr
YWdlOiBcInVuZGVjbGFyZWRcIiAiCi0gICAgIm1lc3NhZ2VfdHlwZTogeyAgIgotICAgICIgIG5h
bWU6IFwiUXV1eFwiICAiCi0gICAgIiAgZmllbGQgeyAiCi0gICAgIiAgICBuYW1lOidxdXgnIG51
bWJlcjoxIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6IFRZUEVfSU5UMzIgIgotICAgICIgIH0i
Ci0gICAgIiAgZmllbGQgeyAiCi0gICAgIiAgICBuYW1lOidxdXV4JyBudW1iZXI6MSBsYWJlbDpM
QUJFTF9PUFRJT05BTCB0eXBlOiBUWVBFX0lOVDY0ICIKLSAgICAiICB9IgotICAgICJ9IiwKLSAg
ICAmdW5kZWNsYXJlZF9kZXBfcHJvdG8pKTsKLSAgLy8gV2UgY2FuJ3QgdXNlIHRoZSBCdWlsZEZp
bGUoKSBoZWxwZXIgYmVjYXVzZSB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIGJ1aWxkCi0gIC8v
IGl0IGludG8gdGhlIGRlc2NyaXB0b3IgcG9vbCBpbiB0aGUgZmFsbGJhY2sgZGF0YWJhc2UgY2Fz
ZTogaXQganVzdCBuZWVkcyB0bwotICAvLyBiZSBzaXR0aW5nIGluIHRoZSBkYXRhYmFzZSBzbyB0
aGF0IGl0IGdldHMgYnVpbHQgZHVyaW5nIHRoZSBidWlsZGluZyBvZgotICAvLyB0ZXN0LnByb3Rv
IGJlbG93LgotICBzd2l0Y2ggKG1vZGUoKSkgewotICAgIGNhc2UgTk9fREFUQUJBU0U6IHsKLSAg
ICAgIEFTU0VSVF9UUlVFKHBvb2xfLT5CdWlsZEZpbGUodW5kZWNsYXJlZF9kZXBfcHJvdG8pID09
IE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkFMTEJBQ0tfREFUQUJBU0U6
IHsKLSAgICAgIEFTU0VSVF9UUlVFKGRiXy5BZGQodW5kZWNsYXJlZF9kZXBfcHJvdG8pKTsKLSAg
ICB9Ci0gIH0KLQotICBGaWxlRGVzY3JpcHRvclByb3RvIHRlc3RfcHJvdG87Ci0gIEFTU0VSVF9U
UlVFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZygKLSAgICAibmFtZTogXCJ0ZXN0LnByb3Rv
XCIgIgotICAgICJtZXNzYWdlX3R5cGU6IHsgIgotICAgICIgIG5hbWU6IFwiQ29yZ2VcIiAiCi0g
ICAgIiAgZmllbGQgeyAiCi0gICAgIiAgICBuYW1lOidxdXV4JyBudW1iZXI6MSBsYWJlbDogTEFC
RUxfT1BUSU9OQUwgIgotICAgICIgICAgdHlwZV9uYW1lOid1bmRlY2xhcmVkLlF1dXgnIHR5cGU6
IFRZUEVfTUVTU0FHRSAiCi0gICAgIiAgfSIKLSAgICAifSIsCi0gICAgJnRlc3RfcHJvdG8pKTsK
LQotICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSA9IEJ1aWxkRmlsZSh0ZXN0X3Byb3RvKTsK
LSAgQVNTRVJUX1RSVUUoZmlsZSAhPSBOVUxMKTsKLSAgR09PR0xFX0xPRyhJTkZPKSA8PCBmaWxl
LT5EZWJ1Z1N0cmluZygpOwotCi0gIEVYUEVDVF9FUSgwLCBmaWxlLT5kZXBlbmRlbmN5X2NvdW50
KCkpOwotICBBU1NFUlRfRVEoMSwgZmlsZS0+bWVzc2FnZV90eXBlX2NvdW50KCkpOwotICBjb25z
dCBEZXNjcmlwdG9yKiBjb3JnZV9kZXNjID0gZmlsZS0+bWVzc2FnZV90eXBlKDApOwotICBBU1NF
UlRfRVEoIkNvcmdlIiwgY29yZ2VfZGVzYy0+bmFtZSgpKTsKLSAgQVNTRVJUX0VRKDEsIGNvcmdl
X2Rlc2MtPmZpZWxkX2NvdW50KCkpOwotICBFWFBFQ1RfRkFMU0UoY29yZ2VfZGVzYy0+aXNfcGxh
Y2Vob2xkZXIoKSk7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBxdXV4X2ZpZWxkID0gY29y
Z2VfZGVzYy0+ZmllbGQoMCk7Ci0gIEFTU0VSVF9FUShGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVT
U0FHRSwgcXV1eF9maWVsZC0+dHlwZSgpKTsKLSAgQVNTRVJUX0VRKCJRdXV4IiwgcXV1eF9maWVs
ZC0+bWVzc2FnZV90eXBlKCktPm5hbWUoKSk7Ci0gIEFTU0VSVF9FUSgidW5kZWNsYXJlZC5RdXV4
IiwgcXV1eF9maWVsZC0+bWVzc2FnZV90eXBlKCktPmZ1bGxfbmFtZSgpKTsKLSAgRVhQRUNUX1RS
VUUocXV1eF9maWVsZC0+bWVzc2FnZV90eXBlKCktPmlzX3BsYWNlaG9sZGVyKCkpOwotICAvLyBU
aGUgcGxhY2UgaG9sZGVyIHR5cGUgc2hvdWxkIG5vdCBiZSBmaW5kYWJsZS4KLSAgQVNTRVJUX1RS
VUUocG9vbF8tPkZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgidW5kZWNsYXJlZC5RdXV4IikgPT0gTlVM
TCk7Ci19Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKERhdGFiYXNlU291cmNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgQWxsb3dVbmtub3duRGVwZW5kZW5jaWVzVGVzdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3Rpbmc6OlZhbHVlcyhOT19EQVRBQkFTRSwgRkFMTEJBQ0tfREFU
QUJBU0UpKTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1URVNUKEN1c3RvbU9wdGlvbnMsIE9wdGlvbkxv
Y2F0aW9ucykgewotICBjb25zdCBEZXNjcmlwdG9yKiBtZXNzYWdlID0KLSAgICAgIHByb3RvYnVm
X3VuaXR0ZXN0OjpUZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRpb25zOjpkZXNjcmlwdG9yKCk7Ci0g
IGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlID0gbWVzc2FnZS0+ZmlsZSgpOwotICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGZpZWxkID0gbWVzc2FnZS0+RmluZEZpZWxkQnlOYW1lKCJmaWVsZDEi
KTsKLSAgY29uc3QgRW51bURlc2NyaXB0b3IqIGVubSA9IG1lc3NhZ2UtPkZpbmRFbnVtVHlwZUJ5
TmFtZSgiQW5FbnVtIik7Ci0gIC8vIFRPRE8oYmVuankpOiBTdXBwb3J0IEVudW1WYWx1ZSBvcHRp
b25zLCBvbmNlIHRoZSBjb21waWxlciBkb2VzLgotICBjb25zdCBTZXJ2aWNlRGVzY3JpcHRvciog
c2VydmljZSA9Ci0gICAgICBmaWxlLT5GaW5kU2VydmljZUJ5TmFtZSgiVGVzdFNlcnZpY2VXaXRo
Q3VzdG9tT3B0aW9ucyIpOwotICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2QgPSBzZXJ2
aWNlLT5GaW5kTWV0aG9kQnlOYW1lKCJGb28iKTsKLQotICBFWFBFQ1RfRVEoR09PR0xFX0xPTkdM
T05HKDk4NzY1NDMyMTApLAotICAgICAgICAgICAgZmlsZS0+b3B0aW9ucygpLkdldEV4dGVuc2lv
bihwcm90b2J1Zl91bml0dGVzdDo6ZmlsZV9vcHQxKSk7Ci0gIEVYUEVDVF9FUSgtNTYsCi0gICAg
ICAgICAgICBtZXNzYWdlLT5vcHRpb25zKCkuR2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0
OjptZXNzYWdlX29wdDEpKTsKLSAgRVhQRUNUX0VRKEdPT0dMRV9MT05HTE9ORyg4NzY1NDMyMTA5
KSwKLSAgICAgICAgICAgIGZpZWxkLT5vcHRpb25zKCkuR2V0RXh0ZW5zaW9uKHByb3RvYnVmX3Vu
aXR0ZXN0OjpmaWVsZF9vcHQxKSk7Ci0gIEVYUEVDVF9FUSg0MiwgIC8vIENoZWNrIHRoYXQgd2Ug
Z2V0IHRoZSBkZWZhdWx0IGZvciBhbiBvcHRpb24gd2UgZG9uJ3Qgc2V0LgotICAgICAgICAgICAg
ZmllbGQtPm9wdGlvbnMoKS5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmZpZWxkX29w
dDIpKTsKLSAgRVhQRUNUX0VRKC03ODksCi0gICAgICAgICAgICBlbm0tPm9wdGlvbnMoKS5HZXRF
eHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmVudW1fb3B0MSkpOwotICBFWFBFQ1RfRVEoMTIz
LAotICAgICAgICAgICAgZW5tLT52YWx1ZSgxKS0+b3B0aW9ucygpLkdldEV4dGVuc2lvbigKLSAg
ICAgICAgICAgICAgcHJvdG9idWZfdW5pdHRlc3Q6OmVudW1fdmFsdWVfb3B0MSkpOwotICBFWFBF
Q1RfRVEoR09PR0xFX0xPTkdMT05HKC05ODc2NTQzMjEwKSwKLSAgICAgICAgICAgIHNlcnZpY2Ut
Pm9wdGlvbnMoKS5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OnNlcnZpY2Vfb3B0MSkp
OwotICBFWFBFQ1RfRVEocHJvdG9idWZfdW5pdHRlc3Q6Ok1FVEhPRE9QVDFfVkFMMiwKLSAgICAg
ICAgICAgIG1ldGhvZC0+b3B0aW9ucygpLkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6
bWV0aG9kX29wdDEpKTsKLQotICAvLyBTZWUgdGhhdCB0aGUgcmVndWxhciBvcHRpb25zIHdlbnQg
dGhyb3VnaCB1bnNjYXRoZWQuCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UtPm9wdGlvbnMoKS5oYXNf
bWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSk7Ci0gIEVYUEVDVF9FUShGaWVsZE9wdGlvbnM6OkNP
UkQsIGZpZWxkLT5vcHRpb25zKCkuY3R5cGUoKSk7Ci19Ci0KLVRFU1QoQ3VzdG9tT3B0aW9ucywg
T3B0aW9uVHlwZXMpIHsKLSAgY29uc3QgTWVzc2FnZU9wdGlvbnMqIG9wdGlvbnMgPSBOVUxMOwot
Ci0gIG9wdGlvbnMgPQotICAgICAgJnByb3RvYnVmX3VuaXR0ZXN0OjpDdXN0b21PcHRpb25NaW5J
bnRlZ2VyVmFsdWVzOjpkZXNjcmlwdG9yKCktPm9wdGlvbnMoKTsKLSAgRVhQRUNUX0VRKGZhbHNl
ICAgICwgb3B0aW9ucy0+R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0Ojpib29sX29wdCkp
OwotICBFWFBFQ1RfRVEoa2ludDMybWluLCBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZf
dW5pdHRlc3Q6OmludDMyX29wdCkpOwotICBFWFBFQ1RfRVEoa2ludDY0bWluLCBvcHRpb25zLT5H
ZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmludDY0X29wdCkpOwotICBFWFBFQ1RfRVEo
MCAgICAgICAgLCBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OnVpbnQz
Ml9vcHQpKTsKLSAgRVhQRUNUX0VRKDAgICAgICAgICwgb3B0aW9ucy0+R2V0RXh0ZW5zaW9uKHBy
b3RvYnVmX3VuaXR0ZXN0Ojp1aW50NjRfb3B0KSk7Ci0gIEVYUEVDVF9FUShraW50MzJtaW4sIG9w
dGlvbnMtPkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6c2ludDMyX29wdCkpOwotICBF
WFBFQ1RfRVEoa2ludDY0bWluLCBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRl
c3Q6OnNpbnQ2NF9vcHQpKTsKLSAgRVhQRUNUX0VRKDAgICAgICAgICwgb3B0aW9ucy0+R2V0RXh0
ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0OjpmaXhlZDMyX29wdCkpOwotICBFWFBFQ1RfRVEoMCAg
ICAgICAgLCBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmZpeGVkNjRf
b3B0KSk7Ci0gIEVYUEVDVF9FUShraW50MzJtaW4sIG9wdGlvbnMtPkdldEV4dGVuc2lvbihwcm90
b2J1Zl91bml0dGVzdDo6c2ZpeGVkMzJfb3B0KSk7Ci0gIEVYUEVDVF9FUShraW50NjRtaW4sIG9w
dGlvbnMtPkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6c2ZpeGVkNjRfb3B0KSk7Ci0K
LSAgb3B0aW9ucyA9Ci0gICAgICAmcHJvdG9idWZfdW5pdHRlc3Q6OkN1c3RvbU9wdGlvbk1heElu
dGVnZXJWYWx1ZXM6OmRlc2NyaXB0b3IoKS0+b3B0aW9ucygpOwotICBFWFBFQ1RfRVEodHJ1ZSAg
ICAgICwgb3B0aW9ucy0+R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0Ojpib29sX29wdCkp
OwotICBFWFBFQ1RfRVEoa2ludDMybWF4ICwgb3B0aW9ucy0+R2V0RXh0ZW5zaW9uKHByb3RvYnVm
X3VuaXR0ZXN0OjppbnQzMl9vcHQpKTsKLSAgRVhQRUNUX0VRKGtpbnQ2NG1heCAsIG9wdGlvbnMt
PkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6aW50NjRfb3B0KSk7Ci0gIEVYUEVDVF9F
UShrdWludDMybWF4LCBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OnVp
bnQzMl9vcHQpKTsKLSAgRVhQRUNUX0VRKGt1aW50NjRtYXgsIG9wdGlvbnMtPkdldEV4dGVuc2lv
bihwcm90b2J1Zl91bml0dGVzdDo6dWludDY0X29wdCkpOwotICBFWFBFQ1RfRVEoa2ludDMybWF4
ICwgb3B0aW9ucy0+R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0OjpzaW50MzJfb3B0KSk7
Ci0gIEVYUEVDVF9FUShraW50NjRtYXggLCBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZf
dW5pdHRlc3Q6OnNpbnQ2NF9vcHQpKTsKLSAgRVhQRUNUX0VRKGt1aW50MzJtYXgsIG9wdGlvbnMt
PkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6Zml4ZWQzMl9vcHQpKTsKLSAgRVhQRUNU
X0VRKGt1aW50NjRtYXgsIG9wdGlvbnMtPkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6
Zml4ZWQ2NF9vcHQpKTsKLSAgRVhQRUNUX0VRKGtpbnQzMm1heCAsIG9wdGlvbnMtPkdldEV4dGVu
c2lvbihwcm90b2J1Zl91bml0dGVzdDo6c2ZpeGVkMzJfb3B0KSk7Ci0gIEVYUEVDVF9FUShraW50
NjRtYXggLCBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OnNmaXhlZDY0
X29wdCkpOwotCi0gIG9wdGlvbnMgPQotICAgICAgJnByb3RvYnVmX3VuaXR0ZXN0OjpDdXN0b21P
cHRpb25PdGhlclZhbHVlczo6ZGVzY3JpcHRvcigpLT5vcHRpb25zKCk7Ci0gIEVYUEVDVF9FUSgt
MTAwLCBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmludDMyX29wdCkp
OwotICBFWFBFQ1RfRkxPQVRfRVEoMTIuMzQ1Njc4OSwKLSAgICAgICAgICAgICAgICAgIG9wdGlv
bnMtPkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6ZmxvYXRfb3B0KSk7Ci0gIEVYUEVD
VF9ET1VCTEVfRVEoMS4yMzQ1Njc4OTAxMjM0NTY3ODksCi0gICAgICAgICAgICAgICAgICAgb3B0
aW9ucy0+R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0Ojpkb3VibGVfb3B0KSk7Ci0gIEVY
UEVDVF9FUSgiSGVsbG8sIFwiV29ybGRcIiIsCi0gICAgICAgICAgICBvcHRpb25zLT5HZXRFeHRl
bnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OnN0cmluZ19vcHQpKTsKLQotICBFWFBFQ1RfRVEoc3Ry
aW5nKCJIZWxsb1wwV29ybGQiLCAxMSksCi0gICAgICAgICAgICBvcHRpb25zLT5HZXRFeHRlbnNp
b24ocHJvdG9idWZfdW5pdHRlc3Q6OmJ5dGVzX29wdCkpOwotCi0gIEVYUEVDVF9FUShwcm90b2J1
Zl91bml0dGVzdDo6RHVtbXlNZXNzYWdlQ29udGFpbmluZ0VudW06OlRFU1RfT1BUSU9OX0VOVU1f
VFlQRTIsCi0gICAgICAgICAgICBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRl
c3Q6OmVudW1fb3B0KSk7Ci0KLSAgb3B0aW9ucyA9Ci0gICAgICAmcHJvdG9idWZfdW5pdHRlc3Q6
OlNldHRpbmdSZWFsc0Zyb21Qb3NpdGl2ZUludHM6OmRlc2NyaXB0b3IoKS0+b3B0aW9ucygpOwot
ICBFWFBFQ1RfRkxPQVRfRVEoMTIsIG9wdGlvbnMtPkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0
dGVzdDo6ZmxvYXRfb3B0KSk7Ci0gIEVYUEVDVF9ET1VCTEVfRVEoMTU0LCBvcHRpb25zLT5HZXRF
eHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmRvdWJsZV9vcHQpKTsKLQotICBvcHRpb25zID0K
LSAgICAgICZwcm90b2J1Zl91bml0dGVzdDo6U2V0dGluZ1JlYWxzRnJvbU5lZ2F0aXZlSW50czo6
ZGVzY3JpcHRvcigpLT5vcHRpb25zKCk7Ci0gIEVYUEVDVF9GTE9BVF9FUSgtMTIsIG9wdGlvbnMt
PkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6ZmxvYXRfb3B0KSk7Ci0gIEVYUEVDVF9E
T1VCTEVfRVEoLTE1NCwgb3B0aW9ucy0+R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0Ojpk
b3VibGVfb3B0KSk7Ci19Ci0KLVRFU1QoQ3VzdG9tT3B0aW9ucywgQ29tcGxleEV4dGVuc2lvbk9w
dGlvbnMpIHsKLSAgY29uc3QgTWVzc2FnZU9wdGlvbnMqIG9wdGlvbnMgPQotICAgICAgJnByb3Rv
YnVmX3VuaXR0ZXN0OjpWYXJpb3VzQ29tcGxleE9wdGlvbnM6OmRlc2NyaXB0b3IoKS0+b3B0aW9u
cygpOwotICBFWFBFQ1RfRVEob3B0aW9ucy0+R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0
Ojpjb21wbGV4X29wdDEpLmZvbygpLCA0Mik7Ci0gIEVYUEVDVF9FUShvcHRpb25zLT5HZXRFeHRl
bnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0MSkuCi0gICAgICAgICAgICBHZXRF
eHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OnF1dXgpLCAzMjQpOwotICBFWFBFQ1RfRVEob3B0
aW9ucy0+R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0Ojpjb21wbGV4X29wdDEpLgotICAg
ICAgICAgICAgR2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0Ojpjb3JnZSkucXV4KCksIDg3
Nik7Ci0gIEVYUEVDVF9FUShvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6
OmNvbXBsZXhfb3B0MikuYmF6KCksIDk4Nyk7Ci0gIEVYUEVDVF9FUShvcHRpb25zLT5HZXRFeHRl
bnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0MikuCi0gICAgICAgICAgICBHZXRF
eHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmdyYXVsdCksIDY1NCk7Ci0gIEVYUEVDVF9FUShv
cHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0MikuYmFy
KCkuZm9vKCksCi0gICAgICAgICAgICA3NDMpOwotICBFWFBFQ1RfRVEob3B0aW9ucy0+R2V0RXh0
ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0Ojpjb21wbGV4X29wdDIpLmJhcigpLgotICAgICAgICAg
ICAgR2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0OjpxdXV4KSwgMTk5OSk7Ci0gIEVYUEVD
VF9FUShvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0
MikuYmFyKCkuCi0gICAgICAgICAgICBHZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmNv
cmdlKS5xdXgoKSwgMjAwOCk7Ci0gIEVYUEVDVF9FUShvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJv
dG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0MikuCi0gICAgICAgICAgICBHZXRFeHRlbnNpb24o
cHJvdG9idWZfdW5pdHRlc3Q6OmdhcnBseSkuZm9vKCksIDc0MSk7Ci0gIEVYUEVDVF9FUShvcHRp
b25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0MikuCi0gICAg
ICAgICAgICBHZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmdhcnBseSkuCi0gICAgICAg
ICAgICBHZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OnF1dXgpLCAxOTk4KTsKLSAgRVhQ
RUNUX0VRKG9wdGlvbnMtPkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6Y29tcGxleF9v
cHQyKS4KLSAgICAgICAgICAgIEdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6Z2FycGx5
KS4KLSAgICAgICAgICAgIEdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6Y29yZ2UpLnF1
eCgpLCAyMTIxKTsKLSAgRVhQRUNUX0VRKG9wdGlvbnMtPkdldEV4dGVuc2lvbigKLSAgICAgIHBy
b3RvYnVmX3VuaXR0ZXN0OjpDb21wbGV4T3B0aW9uVHlwZTI6OkNvbXBsZXhPcHRpb25UeXBlNDo6
Y29tcGxleF9vcHQ0KS4KLSAgICAgICAgICAgIHdhbGRvKCksIDE5NzEpOwotICBFWFBFQ1RfRVEo
b3B0aW9ucy0+R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0Ojpjb21wbGV4X29wdDIpLgot
ICAgICAgICAgICAgZnJlZCgpLndhbGRvKCksIDMyMSk7Ci0gIEVYUEVDVF9FUSg5LCBvcHRpb25z
LT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0MykucXV4KCkpOwot
ICBFWFBFQ1RfRVEoMjIsIG9wdGlvbnMtPkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6
Y29tcGxleF9vcHQzKS4KLSAgICAgICAgICAgICAgICBjb21wbGV4b3B0aW9udHlwZTUoKS5wbHVn
aCgpKTsKLSAgRVhQRUNUX0VRKDI0LCBvcHRpb25zLT5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5p
dHRlc3Q6OmNvbXBsZXhvcHQ2KS54eXp6eSgpKTsKLX0KLQotVEVTVChDdXN0b21PcHRpb25zLCBP
cHRpb25zRnJvbU90aGVyRmlsZSkgewotICAvLyBUZXN0IHRoYXQgdG8gdXNlIGEgY3VzdG9tIG9w
dGlvbiwgd2Ugb25seSBuZWVkIHRvIGltcG9ydCB0aGUgZmlsZQotICAvLyBkZWZpbmluZyB0aGUg
b3B0aW9uOyB3ZSBkbyBub3QgYWxzbyBoYXZlIHRvIGltcG9ydCBkZXNjcmlwdG9yLnByb3RvLgot
ICBEZXNjcmlwdG9yUG9vbCBwb29sOwotCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90
bzsKLSAgRmlsZURlc2NyaXB0b3JQcm90bzo6ZGVzY3JpcHRvcigpLT5maWxlKCktPkNvcHlUbygm
ZmlsZV9wcm90byk7Ci0gIEFTU0VSVF9UUlVFKHBvb2wuQnVpbGRGaWxlKGZpbGVfcHJvdG8pICE9
IE5VTEwpOwotCi0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRp
b25zOjpkZXNjcmlwdG9yKCkKLSAgICAtPmZpbGUoKS0+Q29weVRvKCZmaWxlX3Byb3RvKTsKLSAg
QVNTRVJUX1RSVUUocG9vbC5CdWlsZEZpbGUoZmlsZV9wcm90bykgIT0gTlVMTCk7Ci0KLSAgQVNT
RVJUX1RSVUUoVGV4dEZvcm1hdDo6UGFyc2VGcm9tU3RyaW5nKAotICAgICJuYW1lOiBcImN1c3Rv
bV9vcHRpb25zX2ltcG9ydC5wcm90b1wiICIKLSAgICAicGFja2FnZTogXCJwcm90b2J1Zl91bml0
dGVzdFwiICIKLSAgICAiZGVwZW5kZW5jeTogXCJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfY3Vz
dG9tX29wdGlvbnMucHJvdG9cIiAiCi0gICAgIm9wdGlvbnMgeyAiCi0gICAgIiAgdW5pbnRlcnBy
ZXRlZF9vcHRpb24geyAiCi0gICAgIiAgICBuYW1lIHsgIgotICAgICIgICAgICBuYW1lX3BhcnQ6
IFwiZmlsZV9vcHQxXCIgIgotICAgICIgICAgICBpc19leHRlbnNpb246IHRydWUgIgotICAgICIg
ICAgfSAiCi0gICAgIiAgICBwb3NpdGl2ZV9pbnRfdmFsdWU6IDEyMzQgIgotICAgICIgIH0gIgot
ICAgIC8vIFRlc3QgYSBub24tZXh0ZW5zaW9uIG9wdGlvbiB0b28uICAoQXQgb25lIHBvaW50IHRo
aXMgZmFpbGVkIGR1ZSB0byBhCi0gICAgLy8gYnVnLikKLSAgICAiICB1bmludGVycHJldGVkX29w
dGlvbiB7ICIKLSAgICAiICAgIG5hbWUgeyAiCi0gICAgIiAgICAgIG5hbWVfcGFydDogXCJqYXZh
X3BhY2thZ2VcIiAiCi0gICAgIiAgICAgIGlzX2V4dGVuc2lvbjogZmFsc2UgIgotICAgICIgICAg
fSAiCi0gICAgIiAgICBzdHJpbmdfdmFsdWU6IFwiZm9vXCIgIgotICAgICIgIH0gIgotICAgIC8v
IFRlc3QgdGhhdCBlbnVtLXR5cGVkIG9wdGlvbnMgc3RpbGwgd29yayB0b28uICAoQXQgb25lIHBv
aW50IHRoaXMgYWxzbwotICAgIC8vIGZhaWxlZCBkdWUgdG8gYSBidWcuKQotICAgICIgIHVuaW50
ZXJwcmV0ZWRfb3B0aW9uIHsgIgotICAgICIgICAgbmFtZSB7ICIKLSAgICAiICAgICAgbmFtZV9w
YXJ0OiBcIm9wdGltaXplX2ZvclwiICIKLSAgICAiICAgICAgaXNfZXh0ZW5zaW9uOiBmYWxzZSAi
Ci0gICAgIiAgICB9ICIKLSAgICAiICAgIGlkZW50aWZpZXJfdmFsdWU6IFwiU1BFRURcIiAiCi0g
ICAgIiAgfSAiCi0gICAgIn0iCi0gICAgLAotICAgICZmaWxlX3Byb3RvKSk7Ci0KLSAgY29uc3Qg
RmlsZURlc2NyaXB0b3IqIGZpbGUgPSBwb29sLkJ1aWxkRmlsZShmaWxlX3Byb3RvKTsKLSAgQVNT
RVJUX1RSVUUoZmlsZSAhPSBOVUxMKTsKLSAgRVhQRUNUX0VRKDEyMzQsIGZpbGUtPm9wdGlvbnMo
KS5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmZpbGVfb3B0MSkpOwotICBFWFBFQ1Rf
VFJVRShmaWxlLT5vcHRpb25zKCkuaGFzX2phdmFfcGFja2FnZSgpKTsKLSAgRVhQRUNUX0VRKCJm
b28iLCBmaWxlLT5vcHRpb25zKCkuamF2YV9wYWNrYWdlKCkpOwotICBFWFBFQ1RfVFJVRShmaWxl
LT5vcHRpb25zKCkuaGFzX29wdGltaXplX2ZvcigpKTsKLSAgRVhQRUNUX0VRKEZpbGVPcHRpb25z
OjpTUEVFRCwgZmlsZS0+b3B0aW9ucygpLm9wdGltaXplX2ZvcigpKTsKLX0KLQotVEVTVChDdXN0
b21PcHRpb25zLCBNZXNzYWdlT3B0aW9uVGhyZWVGaWVsZHNTZXQpIHsKLSAgLy8gVGhpcyB0ZXN0
cyBhIGJ1ZyB3aGljaCBwcmV2aW91c2x5IGV4aXN0ZWQgaW4gY3VzdG9tIG9wdGlvbnMgcGFyc2lu
Zy4gIFRoZQotICAvLyBidWcgb2NjdXJyZWQgd2hlbiB5b3UgZGVmaW5lZCBhIGN1c3RvbSBvcHRp
b24gd2l0aCBtZXNzYWdlIHR5cGUgYW5kIHRoZW4KLSAgLy8gc2V0IHRocmVlIGZpZWxkcyBvZiB0
aGF0IG9wdGlvbiBvbiBhIHNpbmdsZSBkZWZpbml0aW9uIChzZWUgdGhlIGV4YW1wbGUKLSAgLy8g
YmVsb3cpLiAgVGhlIGJ1ZyBpcyBhIGJpdCBoYXJkIHRvIGV4cGxhaW4sIHNvIGNoZWNrIHRoZSBj
aGFuZ2UgaGlzdG9yeSBpZgotICAvLyB5b3Ugd2FudCB0byBrbm93IG1vcmUuCi0gIERlc2NyaXB0
b3JQb29sIHBvb2w7Ci0KLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICBGaWxl
RGVzY3JpcHRvclByb3RvOjpkZXNjcmlwdG9yKCktPmZpbGUoKS0+Q29weVRvKCZmaWxlX3Byb3Rv
KTsKLSAgQVNTRVJUX1RSVUUocG9vbC5CdWlsZEZpbGUoZmlsZV9wcm90bykgIT0gTlVMTCk7Ci0K
LSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNZXNzYWdlV2l0aEN1c3RvbU9wdGlvbnM6OmRlc2Ny
aXB0b3IoKQotICAgIC0+ZmlsZSgpLT5Db3B5VG8oJmZpbGVfcHJvdG8pOwotICBBU1NFUlRfVFJV
RShwb29sLkJ1aWxkRmlsZShmaWxlX3Byb3RvKSAhPSBOVUxMKTsKLQotICAvLyBUaGUgZm9sbG93
aW5nIHJlcHJlc2VudHMgdGhlIGRlZmluaXRpb246Ci0gIC8vCi0gIC8vICAgaW1wb3J0ICJnb29n
bGUvcHJvdG9idWYvdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJvdG8iCi0gIC8vICAgcGFja2Fn
ZSBwcm90b2J1Zl91bml0dGVzdDsKLSAgLy8gICBtZXNzYWdlIEZvbyB7Ci0gIC8vICAgICBvcHRp
b24gKGNvbXBsZXhfb3B0MSkuZm9vICA9IDEyMzQ7Ci0gIC8vICAgICBvcHRpb24gKGNvbXBsZXhf
b3B0MSkuZm9vMiA9IDEyMzQ7Ci0gIC8vICAgICBvcHRpb24gKGNvbXBsZXhfb3B0MSkuZm9vMyA9
IDEyMzQ7Ci0gIC8vICAgfQotICBBU1NFUlRfVFJVRShUZXh0Rm9ybWF0OjpQYXJzZUZyb21TdHJp
bmcoCi0gICAgIm5hbWU6IFwiY3VzdG9tX29wdGlvbnNfaW1wb3J0LnByb3RvXCIgIgotICAgICJw
YWNrYWdlOiBcInByb3RvYnVmX3VuaXR0ZXN0XCIgIgotICAgICJkZXBlbmRlbmN5OiBcImdvb2ds
ZS9wcm90b2J1Zi91bml0dGVzdF9jdXN0b21fb3B0aW9ucy5wcm90b1wiICIKLSAgICAibWVzc2Fn
ZV90eXBlIHsgIgotICAgICIgIG5hbWU6IFwiRm9vXCIgIgotICAgICIgIG9wdGlvbnMgeyAiCi0g
ICAgIiAgICB1bmludGVycHJldGVkX29wdGlvbiB7ICIKLSAgICAiICAgICAgbmFtZSB7ICIKLSAg
ICAiICAgICAgICBuYW1lX3BhcnQ6IFwiY29tcGxleF9vcHQxXCIgIgotICAgICIgICAgICAgIGlz
X2V4dGVuc2lvbjogdHJ1ZSAiCi0gICAgIiAgICAgIH0gIgotICAgICIgICAgICBuYW1lIHsgIgot
ICAgICIgICAgICAgIG5hbWVfcGFydDogXCJmb29cIiAiCi0gICAgIiAgICAgICAgaXNfZXh0ZW5z
aW9uOiBmYWxzZSAiCi0gICAgIiAgICAgIH0gIgotICAgICIgICAgICBwb3NpdGl2ZV9pbnRfdmFs
dWU6IDEyMzQgIgotICAgICIgICAgfSAiCi0gICAgIiAgICB1bmludGVycHJldGVkX29wdGlvbiB7
ICIKLSAgICAiICAgICAgbmFtZSB7ICIKLSAgICAiICAgICAgICBuYW1lX3BhcnQ6IFwiY29tcGxl
eF9vcHQxXCIgIgotICAgICIgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSAiCi0gICAgIiAgICAg
IH0gIgotICAgICIgICAgICBuYW1lIHsgIgotICAgICIgICAgICAgIG5hbWVfcGFydDogXCJmb28y
XCIgIgotICAgICIgICAgICAgIGlzX2V4dGVuc2lvbjogZmFsc2UgIgotICAgICIgICAgICB9ICIK
LSAgICAiICAgICAgcG9zaXRpdmVfaW50X3ZhbHVlOiAxMjM0ICIKLSAgICAiICAgIH0gIgotICAg
ICIgICAgdW5pbnRlcnByZXRlZF9vcHRpb24geyAiCi0gICAgIiAgICAgIG5hbWUgeyAiCi0gICAg
IiAgICAgICAgbmFtZV9wYXJ0OiBcImNvbXBsZXhfb3B0MVwiICIKLSAgICAiICAgICAgICBpc19l
eHRlbnNpb246IHRydWUgIgotICAgICIgICAgICB9ICIKLSAgICAiICAgICAgbmFtZSB7ICIKLSAg
ICAiICAgICAgICBuYW1lX3BhcnQ6IFwiZm9vM1wiICIKLSAgICAiICAgICAgICBpc19leHRlbnNp
b246IGZhbHNlICIKLSAgICAiICAgICAgfSAiCi0gICAgIiAgICAgIHBvc2l0aXZlX2ludF92YWx1
ZTogMTIzNCAiCi0gICAgIiAgICB9ICIKLSAgICAiICB9ICIKLSAgICAifSIsCi0gICAgJmZpbGVf
cHJvdG8pKTsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSA9IHBvb2wuQnVpbGRGaWxl
KGZpbGVfcHJvdG8pOwotICBBU1NFUlRfVFJVRShmaWxlICE9IE5VTEwpOwotICBBU1NFUlRfRVEo
MSwgZmlsZS0+bWVzc2FnZV90eXBlX2NvdW50KCkpOwotCi0gIGNvbnN0IE1lc3NhZ2VPcHRpb25z
JiBvcHRpb25zID0gZmlsZS0+bWVzc2FnZV90eXBlKDApLT5vcHRpb25zKCk7Ci0gIEVYUEVDVF9F
USgxMjM0LCBvcHRpb25zLkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6Y29tcGxleF9v
cHQxKS5mb28oKSk7Ci19Ci0KLVRFU1QoQ3VzdG9tT3B0aW9ucywgTWVzc2FnZU9wdGlvblJlcGVh
dGVkTGVhZkZpZWxkU2V0KSB7Ci0gIC8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHJlcGVhdGVk
IGZpZWxkcyBpbiBjdXN0b20gb3B0aW9ucyBjYW4gYmUKLSAgLy8gZ2l2ZW4gbXVsdGlwbGUgdmFs
dWVzIGJ5IHJlcGVhdGluZyB0aGUgb3B0aW9uIHdpdGggYSBkaWZmZXJlbnQgdmFsdWUuCi0gIC8v
IFRoaXMgdGVzdCBjaGVja3MgcmVwZWF0ZWQgbGVhZiB2YWx1ZXMuIEVhY2ggcmVwZWF0ZWQgY3Vz
dG9tIHZhbHVlCi0gIC8vIGFwcGVhcnMgaW4gYSBkaWZmZXJlbnQgdW5pbnRlcnByZXRlZF9vcHRp
b24sIHdoaWNoIHdpbGwgYmUgY29uY2F0ZW5hdGVkCi0gIC8vIHdoZW4gdGhleSBhcmUgbWVyZ2Vk
IGludG8gdGhlIGZpbmFsIG9wdGlvbiB2YWx1ZS4KLSAgRGVzY3JpcHRvclBvb2wgcG9vbDsKLQot
ICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG86
OmRlc2NyaXB0b3IoKS0+ZmlsZSgpLT5Db3B5VG8oJmZpbGVfcHJvdG8pOwotICBBU1NFUlRfVFJV
RShwb29sLkJ1aWxkRmlsZShmaWxlX3Byb3RvKSAhPSBOVUxMKTsKLQotICBwcm90b2J1Zl91bml0
dGVzdDo6VGVzdE1lc3NhZ2VXaXRoQ3VzdG9tT3B0aW9uczo6ZGVzY3JpcHRvcigpCi0gICAgLT5m
aWxlKCktPkNvcHlUbygmZmlsZV9wcm90byk7Ci0gIEFTU0VSVF9UUlVFKHBvb2wuQnVpbGRGaWxl
KGZpbGVfcHJvdG8pICE9IE5VTEwpOwotCi0gIC8vIFRoZSBmb2xsb3dpbmcgcmVwcmVzZW50cyB0
aGUgZGVmaW5pdGlvbjoKLSAgLy8KLSAgLy8gICBpbXBvcnQgImdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdF9jdXN0b21fb3B0aW9ucy5wcm90byIKLSAgLy8gICBwYWNrYWdlIHByb3RvYnVmX3VuaXR0
ZXN0OwotICAvLyAgIG1lc3NhZ2UgRm9vIHsKLSAgLy8gICAgIG9wdGlvbiAoY29tcGxleF9vcHQx
KS5mb280ID0gMTI7Ci0gIC8vICAgICBvcHRpb24gKGNvbXBsZXhfb3B0MSkuZm9vNCA9IDM0Owot
ICAvLyAgICAgb3B0aW9uIChjb21wbGV4X29wdDEpLmZvbzQgPSA1NjsKLSAgLy8gICB9Ci0gIEFT
U0VSVF9UUlVFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZygKLSAgICAibmFtZTogXCJjdXN0
b21fb3B0aW9uc19pbXBvcnQucHJvdG9cIiAiCi0gICAgInBhY2thZ2U6IFwicHJvdG9idWZfdW5p
dHRlc3RcIiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2N1
c3RvbV9vcHRpb25zLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyAiCi0gICAgIiAgbmFt
ZTogXCJGb29cIiAiCi0gICAgIiAgb3B0aW9ucyB7ICIKLSAgICAiICAgIHVuaW50ZXJwcmV0ZWRf
b3B0aW9uIHsgIgotICAgICIgICAgICBuYW1lIHsgIgotICAgICIgICAgICAgIG5hbWVfcGFydDog
XCJjb21wbGV4X29wdDFcIiAiCi0gICAgIiAgICAgICAgaXNfZXh0ZW5zaW9uOiB0cnVlICIKLSAg
ICAiICAgICAgfSAiCi0gICAgIiAgICAgIG5hbWUgeyAiCi0gICAgIiAgICAgICAgbmFtZV9wYXJ0
OiBcImZvbzRcIiAiCi0gICAgIiAgICAgICAgaXNfZXh0ZW5zaW9uOiBmYWxzZSAiCi0gICAgIiAg
ICAgIH0gIgotICAgICIgICAgICBwb3NpdGl2ZV9pbnRfdmFsdWU6IDEyICIKLSAgICAiICAgIH0g
IgotICAgICIgICAgdW5pbnRlcnByZXRlZF9vcHRpb24geyAiCi0gICAgIiAgICAgIG5hbWUgeyAi
Ci0gICAgIiAgICAgICAgbmFtZV9wYXJ0OiBcImNvbXBsZXhfb3B0MVwiICIKLSAgICAiICAgICAg
ICBpc19leHRlbnNpb246IHRydWUgIgotICAgICIgICAgICB9ICIKLSAgICAiICAgICAgbmFtZSB7
ICIKLSAgICAiICAgICAgICBuYW1lX3BhcnQ6IFwiZm9vNFwiICIKLSAgICAiICAgICAgICBpc19l
eHRlbnNpb246IGZhbHNlICIKLSAgICAiICAgICAgfSAiCi0gICAgIiAgICAgIHBvc2l0aXZlX2lu
dF92YWx1ZTogMzQgIgotICAgICIgICAgfSAiCi0gICAgIiAgICB1bmludGVycHJldGVkX29wdGlv
biB7ICIKLSAgICAiICAgICAgbmFtZSB7ICIKLSAgICAiICAgICAgICBuYW1lX3BhcnQ6IFwiY29t
cGxleF9vcHQxXCIgIgotICAgICIgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSAiCi0gICAgIiAg
ICAgIH0gIgotICAgICIgICAgICBuYW1lIHsgIgotICAgICIgICAgICAgIG5hbWVfcGFydDogXCJm
b280XCIgIgotICAgICIgICAgICAgIGlzX2V4dGVuc2lvbjogZmFsc2UgIgotICAgICIgICAgICB9
ICIKLSAgICAiICAgICAgcG9zaXRpdmVfaW50X3ZhbHVlOiA1NiAiCi0gICAgIiAgICB9ICIKLSAg
ICAiICB9ICIKLSAgICAifSIsCi0gICAgJmZpbGVfcHJvdG8pKTsKLQotICBjb25zdCBGaWxlRGVz
Y3JpcHRvciogZmlsZSA9IHBvb2wuQnVpbGRGaWxlKGZpbGVfcHJvdG8pOwotICBBU1NFUlRfVFJV
RShmaWxlICE9IE5VTEwpOwotICBBU1NFUlRfRVEoMSwgZmlsZS0+bWVzc2FnZV90eXBlX2NvdW50
KCkpOwotCi0gIGNvbnN0IE1lc3NhZ2VPcHRpb25zJiBvcHRpb25zID0gZmlsZS0+bWVzc2FnZV90
eXBlKDApLT5vcHRpb25zKCk7Ci0gIEVYUEVDVF9FUSgzLCBvcHRpb25zLkdldEV4dGVuc2lvbihw
cm90b2J1Zl91bml0dGVzdDo6Y29tcGxleF9vcHQxKS5mb280X3NpemUoKSk7Ci0gIEVYUEVDVF9F
USgxMiwgb3B0aW9ucy5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0
MSkuZm9vNCgwKSk7Ci0gIEVYUEVDVF9FUSgzNCwgb3B0aW9ucy5HZXRFeHRlbnNpb24ocHJvdG9i
dWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0MSkuZm9vNCgxKSk7Ci0gIEVYUEVDVF9FUSg1Niwgb3B0
aW9ucy5HZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0MSkuZm9vNCgy
KSk7Ci19Ci0KLVRFU1QoQ3VzdG9tT3B0aW9ucywgTWVzc2FnZU9wdGlvblJlcGVhdGVkTXNnRmll
bGRTZXQpIHsKLSAgLy8gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgcmVwZWF0ZWQgZmllbGRzIGlu
IGN1c3RvbSBvcHRpb25zIGNhbiBiZQotICAvLyBnaXZlbiBtdWx0aXBsZSB2YWx1ZXMgYnkgcmVw
ZWF0aW5nIHRoZSBvcHRpb24gd2l0aCBhIGRpZmZlcmVudCB2YWx1ZS4KLSAgLy8gVGhpcyB0ZXN0
IGNoZWNrcyByZXBlYXRlZCBtZXNzYWdlIHZhbHVlcy4gRWFjaCByZXBlYXRlZCBjdXN0b20gdmFs
dWUKLSAgLy8gYXBwZWFycyBpbiBhIGRpZmZlcmVudCB1bmludGVycHJldGVkX29wdGlvbiwgd2hp
Y2ggd2lsbCBiZSBjb25jYXRlbmF0ZWQKLSAgLy8gd2hlbiB0aGV5IGFyZSBtZXJnZWQgaW50byB0
aGUgZmluYWwgb3B0aW9uIHZhbHVlLgotICBEZXNjcmlwdG9yUG9vbCBwb29sOwotCi0gIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgRmlsZURlc2NyaXB0b3JQcm90bzo6ZGVzY3Jp
cHRvcigpLT5maWxlKCktPkNvcHlUbygmZmlsZV9wcm90byk7Ci0gIEFTU0VSVF9UUlVFKHBvb2wu
QnVpbGRGaWxlKGZpbGVfcHJvdG8pICE9IE5VTEwpOwotCi0gIHByb3RvYnVmX3VuaXR0ZXN0OjpU
ZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRpb25zOjpkZXNjcmlwdG9yKCkKLSAgICAtPmZpbGUoKS0+
Q29weVRvKCZmaWxlX3Byb3RvKTsKLSAgQVNTRVJUX1RSVUUocG9vbC5CdWlsZEZpbGUoZmlsZV9w
cm90bykgIT0gTlVMTCk7Ci0KLSAgLy8gVGhlIGZvbGxvd2luZyByZXByZXNlbnRzIHRoZSBkZWZp
bml0aW9uOgotICAvLwotICAvLyAgIGltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2N1
c3RvbV9vcHRpb25zLnByb3RvIgotICAvLyAgIHBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7Ci0g
IC8vICAgbWVzc2FnZSBGb28gewotICAvLyAgICAgb3B0aW9uIChjb21wbGV4X29wdDIpLmJhcm5l
eSA9IHt3YWxkbzogMX07Ci0gIC8vICAgICBvcHRpb24gKGNvbXBsZXhfb3B0MikuYmFybmV5ID0g
e3dhbGRvOiAxMH07Ci0gIC8vICAgICBvcHRpb24gKGNvbXBsZXhfb3B0MikuYmFybmV5ID0ge3dh
bGRvOiAxMDB9OwotICAvLyAgIH0KLSAgQVNTRVJUX1RSVUUoVGV4dEZvcm1hdDo6UGFyc2VGcm9t
U3RyaW5nKAotICAgICJuYW1lOiBcImN1c3RvbV9vcHRpb25zX2ltcG9ydC5wcm90b1wiICIKLSAg
ICAicGFja2FnZTogXCJwcm90b2J1Zl91bml0dGVzdFwiICIKLSAgICAiZGVwZW5kZW5jeTogXCJn
b29nbGUvcHJvdG9idWYvdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJvdG9cIiAiCi0gICAgIm1l
c3NhZ2VfdHlwZSB7ICIKLSAgICAiICBuYW1lOiBcIkZvb1wiICIKLSAgICAiICBvcHRpb25zIHsg
IgotICAgICIgICAgdW5pbnRlcnByZXRlZF9vcHRpb24geyAiCi0gICAgIiAgICAgIG5hbWUgeyAi
Ci0gICAgIiAgICAgICAgbmFtZV9wYXJ0OiBcImNvbXBsZXhfb3B0MlwiICIKLSAgICAiICAgICAg
ICBpc19leHRlbnNpb246IHRydWUgIgotICAgICIgICAgICB9ICIKLSAgICAiICAgICAgbmFtZSB7
ICIKLSAgICAiICAgICAgICBuYW1lX3BhcnQ6IFwiYmFybmV5XCIgIgotICAgICIgICAgICAgIGlz
X2V4dGVuc2lvbjogZmFsc2UgIgotICAgICIgICAgICB9ICIKLSAgICAiICAgICAgYWdncmVnYXRl
X3ZhbHVlOiBcIndhbGRvOiAxXCIgIgotICAgICIgICAgfSAiCi0gICAgIiAgICB1bmludGVycHJl
dGVkX29wdGlvbiB7ICIKLSAgICAiICAgICAgbmFtZSB7ICIKLSAgICAiICAgICAgICBuYW1lX3Bh
cnQ6IFwiY29tcGxleF9vcHQyXCIgIgotICAgICIgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSAi
Ci0gICAgIiAgICAgIH0gIgotICAgICIgICAgICBuYW1lIHsgIgotICAgICIgICAgICAgIG5hbWVf
cGFydDogXCJiYXJuZXlcIiAiCi0gICAgIiAgICAgICAgaXNfZXh0ZW5zaW9uOiBmYWxzZSAiCi0g
ICAgIiAgICAgIH0gIgotICAgICIgICAgICBhZ2dyZWdhdGVfdmFsdWU6IFwid2FsZG86IDEwXCIg
IgotICAgICIgICAgfSAiCi0gICAgIiAgICB1bmludGVycHJldGVkX29wdGlvbiB7ICIKLSAgICAi
ICAgICAgbmFtZSB7ICIKLSAgICAiICAgICAgICBuYW1lX3BhcnQ6IFwiY29tcGxleF9vcHQyXCIg
IgotICAgICIgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSAiCi0gICAgIiAgICAgIH0gIgotICAg
ICIgICAgICBuYW1lIHsgIgotICAgICIgICAgICAgIG5hbWVfcGFydDogXCJiYXJuZXlcIiAiCi0g
ICAgIiAgICAgICAgaXNfZXh0ZW5zaW9uOiBmYWxzZSAiCi0gICAgIiAgICAgIH0gIgotICAgICIg
ICAgICBhZ2dyZWdhdGVfdmFsdWU6IFwid2FsZG86IDEwMFwiICIKLSAgICAiICAgIH0gIgotICAg
ICIgIH0gIgotICAgICJ9IiwKLSAgICAmZmlsZV9wcm90bykpOwotCi0gIGNvbnN0IEZpbGVEZXNj
cmlwdG9yKiBmaWxlID0gcG9vbC5CdWlsZEZpbGUoZmlsZV9wcm90byk7Ci0gIEFTU0VSVF9UUlVF
KGZpbGUgIT0gTlVMTCk7Ci0gIEFTU0VSVF9FUSgxLCBmaWxlLT5tZXNzYWdlX3R5cGVfY291bnQo
KSk7Ci0KLSAgY29uc3QgTWVzc2FnZU9wdGlvbnMmIG9wdGlvbnMgPSBmaWxlLT5tZXNzYWdlX3R5
cGUoMCktPm9wdGlvbnMoKTsKLSAgRVhQRUNUX0VRKDMsIG9wdGlvbnMuR2V0RXh0ZW5zaW9uKAot
ICAgICAgcHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0MikuYmFybmV5X3NpemUoKSk7Ci0g
IEVYUEVDVF9FUSgxLG9wdGlvbnMuR2V0RXh0ZW5zaW9uKAotICAgICAgcHJvdG9idWZfdW5pdHRl
c3Q6OmNvbXBsZXhfb3B0MikuYmFybmV5KDApLndhbGRvKCkpOwotICBFWFBFQ1RfRVEoMTAsIG9w
dGlvbnMuR2V0RXh0ZW5zaW9uKAotICAgICAgcHJvdG9idWZfdW5pdHRlc3Q6OmNvbXBsZXhfb3B0
MikuYmFybmV5KDEpLndhbGRvKCkpOwotICBFWFBFQ1RfRVEoMTAwLCBvcHRpb25zLkdldEV4dGVu
c2lvbigKLSAgICAgIHByb3RvYnVmX3VuaXR0ZXN0Ojpjb21wbGV4X29wdDIpLmJhcm5leSgyKS53
YWxkbygpKTsKLX0KLQotLy8gQ2hlY2sgdGhhdCBhZ2dyZWdhdGUgb3B0aW9ucyB3ZXJlIHBhcnNl
ZCBhbmQgc2F2ZWQgY29ycmVjdGx5IGluCi0vLyB0aGUgYXBwcm9wcmlhdGUgZGVzY3JpcHRvcnMu
Ci1URVNUKEN1c3RvbU9wdGlvbnMsIEFnZ3JlZ2F0ZU9wdGlvbnMpIHsKLSAgY29uc3QgRGVzY3Jp
cHRvciogbXNnID0gcHJvdG9idWZfdW5pdHRlc3Q6OkFnZ3JlZ2F0ZU1lc3NhZ2U6OmRlc2NyaXB0
b3IoKTsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZpbGUgPSBtc2ctPmZpbGUoKTsKLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IG1zZy0+RmluZEZpZWxkQnlOYW1lKCJmaWVsZG5h
bWUiKTsKLSAgY29uc3QgRW51bURlc2NyaXB0b3IqIGVudW1kID0gZmlsZS0+RmluZEVudW1UeXBl
QnlOYW1lKCJBZ2dyZWdhdGVFbnVtIik7Ci0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGVu
dW12ID0gZW51bWQtPkZpbmRWYWx1ZUJ5TmFtZSgiVkFMVUUiKTsKLSAgY29uc3QgU2VydmljZURl
c2NyaXB0b3IqIHNlcnZpY2UgPSBmaWxlLT5GaW5kU2VydmljZUJ5TmFtZSgKLSAgICAgICJBZ2dy
ZWdhdGVTZXJ2aWNlIik7Ci0gIGNvbnN0IE1ldGhvZERlc2NyaXB0b3IqIG1ldGhvZCA9IHNlcnZp
Y2UtPkZpbmRNZXRob2RCeU5hbWUoIk1ldGhvZCIpOwotCi0gIC8vIFRlc3RzIGZvciB0aGUgZGlm
ZmVyZW50IHR5cGVzIG9mIGRhdGEgZW1iZWRkZWQgaW4gZmlsZW9wdAotICBjb25zdCBwcm90b2J1
Zl91bml0dGVzdDo6QWdncmVnYXRlJiBmaWxlX29wdGlvbnMgPQotICAgICAgZmlsZS0+b3B0aW9u
cygpLkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6ZmlsZW9wdCk7Ci0gIEVYUEVDVF9F
USgxMDAsIGZpbGVfb3B0aW9ucy5pKCkpOwotICBFWFBFQ1RfRVEoIkZpbGVBbm5vdGF0aW9uIiwg
ZmlsZV9vcHRpb25zLnMoKSk7Ci0gIEVYUEVDVF9FUSgiTmVzdGVkRmlsZUFubm90YXRpb24iLCBm
aWxlX29wdGlvbnMuc3ViKCkucygpKTsKLSAgRVhQRUNUX0VRKCJGaWxlRXh0ZW5zaW9uQW5ub3Rh
dGlvbiIsCi0gICAgICAgICAgICBmaWxlX29wdGlvbnMuZmlsZSgpLkdldEV4dGVuc2lvbihwcm90
b2J1Zl91bml0dGVzdDo6ZmlsZW9wdCkucygpKTsKLSAgRVhQRUNUX0VRKCJFbWJlZGRlZE1lc3Nh
Z2VTZXRFbGVtZW50IiwKLSAgICAgICAgICAgIGZpbGVfb3B0aW9ucy5tc2V0KCkuR2V0RXh0ZW5z
aW9uKAotICAgICAgICAgICAgICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpBZ2dyZWdhdGVNZXNzYWdl
U2V0RWxlbWVudAotICAgICAgICAgICAgICAgIDo6bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKS5zKCkp
OwotCi0gIC8vIFNpbXBsZSB0ZXN0cyBmb3IgYWxsIHRoZSBvdGhlciB0eXBlcyBvZiBhbm5vdGF0
aW9ucwotICBFWFBFQ1RfRVEoIk1lc3NhZ2VBbm5vdGF0aW9uIiwKLSAgICAgICAgICAgIG1zZy0+
b3B0aW9ucygpLkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6bXNnb3B0KS5zKCkpOwot
ICBFWFBFQ1RfRVEoIkZpZWxkQW5ub3RhdGlvbiIsCi0gICAgICAgICAgICBmaWVsZC0+b3B0aW9u
cygpLkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6ZmllbGRvcHQpLnMoKSk7Ci0gIEVY
UEVDVF9FUSgiRW51bUFubm90YXRpb24iLAotICAgICAgICAgICAgZW51bWQtPm9wdGlvbnMoKS5H
ZXRFeHRlbnNpb24ocHJvdG9idWZfdW5pdHRlc3Q6OmVudW1vcHQpLnMoKSk7Ci0gIEVYUEVDVF9F
USgiRW51bVZhbHVlQW5ub3RhdGlvbiIsCi0gICAgICAgICAgICBlbnVtdi0+b3B0aW9ucygpLkdl
dEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6ZW51bXZhbG9wdCkucygpKTsKLSAgRVhQRUNU
X0VRKCJTZXJ2aWNlQW5ub3RhdGlvbiIsCi0gICAgICAgICAgICBzZXJ2aWNlLT5vcHRpb25zKCku
R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0OjpzZXJ2aWNlb3B0KS5zKCkpOwotICBFWFBF
Q1RfRVEoIk1ldGhvZEFubm90YXRpb24iLAotICAgICAgICAgICAgbWV0aG9kLT5vcHRpb25zKCku
R2V0RXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0OjptZXRob2RvcHQpLnMoKSk7Ci19Ci0KLVRF
U1QoQ3VzdG9tT3B0aW9ucywgVW51c2VkSW1wb3J0V2FybmluZykgewotICBEZXNjcmlwdG9yUG9v
bCBwb29sOwotCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgRmlsZURlc2Ny
aXB0b3JQcm90bzo6ZGVzY3JpcHRvcigpLT5maWxlKCktPkNvcHlUbygmZmlsZV9wcm90byk7Ci0g
IEFTU0VSVF9UUlVFKHBvb2wuQnVpbGRGaWxlKGZpbGVfcHJvdG8pICE9IE5VTEwpOwotCi0gIHBy
b3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRpb25zOjpkZXNjcmlwdG9y
KCkKLSAgICAgIC0+ZmlsZSgpLT5Db3B5VG8oJmZpbGVfcHJvdG8pOwotICBBU1NFUlRfVFJVRShw
b29sLkJ1aWxkRmlsZShmaWxlX3Byb3RvKSAhPSBOVUxMKTsKLQotICBwb29sLkFkZFVudXNlZElt
cG9ydFRyYWNrRmlsZSgiY3VzdG9tX29wdGlvbnNfaW1wb3J0LnByb3RvIik7Ci0gIEFTU0VSVF9U
UlVFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZygKLSAgICAibmFtZTogXCJjdXN0b21fb3B0
aW9uc19pbXBvcnQucHJvdG9cIiAiCi0gICAgInBhY2thZ2U6IFwicHJvdG9idWZfdW5pdHRlc3Rc
IiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2N1c3RvbV9v
cHRpb25zLnByb3RvXCIgIiwKLSAgICAmZmlsZV9wcm90bykpOwotCi0gIE1vY2tFcnJvckNvbGxl
Y3RvciBlcnJvcl9jb2xsZWN0b3I7Ci0gIEVYUEVDVF9UUlVFKHBvb2wuQnVpbGRGaWxlQ29sbGVj
dGluZ0Vycm9ycyhmaWxlX3Byb3RvLCAmZXJyb3JfY29sbGVjdG9yKSk7Ci0gIEVYUEVDVF9FUSgi
IiwgZXJyb3JfY29sbGVjdG9yLndhcm5pbmdfdGV4dF8pOwotfQotCi0vLyBWZXJpZmllcyB0aGF0
IHByb3RvIGZpbGVzIGNhbiBjb3JyZWN0bHkgYmUgcGFyc2VkLCBldmVuIGlmIHRoZQotLy8gY3Vz
dG9tIG9wdGlvbnMgZGVmaW5lZCBpbiB0aGUgZmlsZSBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhv
c2UKLS8vIGNvbXBpbGVkIGluIHRoZSBiaW5hcnkuIFNlZSBodHRwOi8vYi8xOTI3NjI1MC4KLVRF
U1QoQ3VzdG9tT3B0aW9ucywgT3B0aW9uc1dpdGhSZXF1aXJlZEVudW1zKSB7Ci0gIERlc2NyaXB0
b3JQb29sIHBvb2w7Ci0KLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICBNZXNz
YWdlT3B0aW9uczo6ZGVzY3JpcHRvcigpLT5maWxlKCktPkNvcHlUbygmZmlsZV9wcm90byk7Ci0g
IEFTU0VSVF9UUlVFKHBvb2wuQnVpbGRGaWxlKGZpbGVfcHJvdG8pICE9IE5VTEwpOwotCi0gIC8v
IENyZWF0ZSBhIG5ldyBmaWxlIGRlc2NyaXB0b3IgcHJvdG8gY29udGFpbmluZyBhIHN1YnNldCBv
ZiB0aGUKLSAgLy8gbWVzc2FnZXMgZGVmaW5lZCBpbiBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rf
Y3VzdG9tX29wdGlvbnMucHJvdG8uCi0gIGZpbGVfcHJvdG8uQ2xlYXIoKTsKLSAgZmlsZV9wcm90
by5zZXRfbmFtZSgidW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJvdG8iKTsKLSAgZmlsZV9wcm90
by5zZXRfcGFja2FnZSgicHJvdG9idWZfdW5pdHRlc3QiKTsKLSAgZmlsZV9wcm90by5hZGRfZGVw
ZW5kZW5jeSgiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8iKTsKLQotICAvLyBBZGQg
dGhlICJyZXF1aXJlZF9lbnVtX29wdCIgZXh0ZW5zaW9uLgotICBGaWVsZERlc2NyaXB0b3JQcm90
byogZXh0ZW5zaW9uID0gZmlsZV9wcm90by5hZGRfZXh0ZW5zaW9uKCk7Ci0gIHByb3RvYnVmX3Vu
aXR0ZXN0OjpPbGRPcHRpb25UeXBlOjpkZXNjcmlwdG9yKCktPmZpbGUoKQotICAgICAgLT5GaW5k
RXh0ZW5zaW9uQnlOYW1lKCJyZXF1aXJlZF9lbnVtX29wdCIpLT5Db3B5VG8oZXh0ZW5zaW9uKTsK
LQotICAvLyBBZGQgYSB0ZXN0IG1lc3NhZ2UgdGhhdCB1c2VzIHRoZSAicmVxdWlyZWRfZW51bV9v
cHQiIG9wdGlvbi4KLSAgRGVzY3JpcHRvclByb3RvKiB0ZXN0X21lc3NhZ2VfdHlwZSA9IGZpbGVf
cHJvdG8uYWRkX21lc3NhZ2VfdHlwZSgpOwotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1lc3Nh
Z2VXaXRoUmVxdWlyZWRFbnVtT3B0aW9uOjpkZXNjcmlwdG9yKCkKLSAgICAgIC0+Q29weVRvKHRl
c3RfbWVzc2FnZV90eXBlKTsKLQotICAvLyBJbnN0cnVjdCB0aGUgZXh0ZW5zaW9uIHRvIHVzZSBO
ZXdPcHRpb25UeXBlIGluc3RlYWQgb2YKLSAgLy8gT2xkT3B0aW9uVHlwZSwgYW5kIGFkZCB0aGUg
ZGVzY3JpcHRvciBvZiBOZXdPcHRpb25UeXBlLgotICBleHRlbnNpb24tPnNldF90eXBlX25hbWUo
Ii5wcm90b2J1Zl91bml0dGVzdC5OZXdPcHRpb25UeXBlIik7Ci0gIERlc2NyaXB0b3JQcm90byog
bmV3X29wdGlvbl90eXBlID0gZmlsZV9wcm90by5hZGRfbWVzc2FnZV90eXBlKCk7Ci0gIHByb3Rv
YnVmX3VuaXR0ZXN0OjpOZXdPcHRpb25UeXBlOjpkZXNjcmlwdG9yKCkKLSAgICAgIC0+Q29weVRv
KG5ld19vcHRpb25fdHlwZSk7Ci0KLSAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgb2YgdGhlICJyZXF1
aXJlZF9lbnVtX29wdCIgb3B0aW9uIHVzZWQgaW4gdGhlCi0gIC8vIHRlc3QgbWVzc2FnZSB3aXRo
IGFuIGVudW0gdmFsdWUgdGhhdCBvbmx5IGV4aXN0cyBpbiBOZXdPcHRpb25UeXBlLgotICBBU1NF
UlRfVFJVRShUZXh0Rm9ybWF0OjpQYXJzZUZyb21TdHJpbmcoCi0gICAgICAidW5pbnRlcnByZXRl
ZF9vcHRpb24geyAiCi0gICAgICAiICBuYW1lIHsgIgotICAgICAgIiAgICBuYW1lX3BhcnQ6ICdy
ZXF1aXJlZF9lbnVtX29wdCcgIgotICAgICAgIiAgICBpc19leHRlbnNpb246IHRydWUgIgotICAg
ICAgIiAgfSAiCi0gICAgICAiICBhZ2dyZWdhdGVfdmFsdWU6ICd2YWx1ZTogTkVXX1ZBTFVFJyAi
Ci0gICAgICAifSIsCi0gICAgICB0ZXN0X21lc3NhZ2VfdHlwZS0+bXV0YWJsZV9vcHRpb25zKCkp
KTsKLQotICAvLyBBZGQgdGhlIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgcG9vbC4KLSAgQVNTRVJU
X1RSVUUocG9vbC5CdWlsZEZpbGUoZmlsZV9wcm90bykgIT0gTlVMTCk7Ci0KLSAgLy8gRmluZCB0
aGUgdGVzdCBtZXNzYWdlLgotICBjb25zdCBEZXNjcmlwdG9yKiB0ZXN0X21lc3NhZ2UgPSBwb29s
LkZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgKLSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0TWVz
c2FnZVdpdGhSZXF1aXJlZEVudW1PcHRpb24iKTsKLSAgQVNTRVJUX1RSVUUodGVzdF9tZXNzYWdl
ICE9IE5VTEwpOwotCi0gIGNvbnN0IE1lc3NhZ2VPcHRpb25zJiBvcHRpb25zID0gdGVzdF9tZXNz
YWdlLT5vcHRpb25zKCk7Ci0gIC8vIEV4dHJhY3QgdGhlICJyZXF1aXJlZF9lbnVtX29wdCIgb3B0
aW9uLiBTaW5jZSB0aGUgYmluYXJ5IGRvZXMgbm90Ci0gIC8vIGtub3cgdGhhdCB0aGUgZXh0ZW5z
aW9uIHdhcyB1cGRhdGVkLCB0aGlzIHdpbGwgc3RpbGwgcmV0dXJuIGFuCi0gIC8vIE9sZE9wdGlv
blR5cGUgbWVzc2FnZS4KLSAgQVNTRVJUX1RSVUUoCi0gICAgICBvcHRpb25zLkhhc0V4dGVuc2lv
bihwcm90b2J1Zl91bml0dGVzdDo6cmVxdWlyZWRfZW51bV9vcHQpKTsKLSAgY29uc3QgcHJvdG9i
dWZfdW5pdHRlc3Q6Ok9sZE9wdGlvblR5cGUmIG9sZF9lbnVtX29wdCA9Ci0gICAgICBvcHRpb25z
LkdldEV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6cmVxdWlyZWRfZW51bV9vcHQpOwotCi0g
IC8vIENvbmZpcm0gdGhhdCB0aGUgcmVxdWlyZWQgZW51bSBmaWVsZCBpcyBtaXNzaW5nLgotICBF
WFBFQ1RfRkFMU0Uob2xkX2VudW1fb3B0LklzSW5pdGlhbGl6ZWQoKSk7Ci0gIEVYUEVDVF9GQUxT
RShvbGRfZW51bV9vcHQuaGFzX3ZhbHVlKCkpOwotCi0gIHN0cmluZyBidWY7Ci0gIC8vIFZlcmlm
eSB0aGF0IHRoZSByZXF1aXJlZCBlbnVtIGZpZWxkIGRvZXMgc2hvdyB1cCB3aGVuIHRoZSBvcHRp
b24KLSAgLy8gaXMgcmUtcGFyc2VkIGFzIGEgTmV3T3B0aW9uVHlwZSBtZXNzYWdlOwotICBwcm90
b2J1Zl91bml0dGVzdDo6TmV3T3B0aW9uVHlwZSBuZXdfZW51bV9vcHQ7Ci0gIEVYUEVDVF9UUlVF
KG9sZF9lbnVtX29wdC5BcHBlbmRQYXJ0aWFsVG9TdHJpbmcoJmJ1ZikpOwotICBFWFBFQ1RfVFJV
RShuZXdfZW51bV9vcHQuUGFyc2VGcm9tU3RyaW5nKGJ1ZikpOwotICBFWFBFQ1RfRVEocHJvdG9i
dWZfdW5pdHRlc3Q6Ok5ld09wdGlvblR5cGU6Ok5FV19WQUxVRSwgbmV3X2VudW1fb3B0LnZhbHVl
KCkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWNsYXNzIFZhbGlkYXRpb25FcnJvclRlc3QgOiBw
dWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICAvLyBQYXJzZSBmaWxlX3RleHQg
YXMgYSBGaWxlRGVzY3JpcHRvclByb3RvIGluIHRleHQgZm9ybWF0IGFuZCBhZGQgaXQKLSAgLy8g
dG8gdGhlIERlc2NyaXB0b3JQb29sLiAgRXhwZWN0IG5vIGVycm9ycy4KLSAgY29uc3QgRmlsZURl
c2NyaXB0b3IqIEJ1aWxkRmlsZShjb25zdCBzdHJpbmcmIGZpbGVfdGV4dCkgewotICAgIEZpbGVE
ZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgICBFWFBFQ1RfVFJVRShUZXh0Rm9ybWF0OjpQ
YXJzZUZyb21TdHJpbmcoZmlsZV90ZXh0LCAmZmlsZV9wcm90bykpOwotICAgIHJldHVybiBHT09H
TEVfQ0hFQ0tfTk9UTlVMTChwb29sXy5CdWlsZEZpbGUoZmlsZV9wcm90bykpOwotICB9Ci0KLSAg
Ly8gUGFyc2UgZmlsZV90ZXh0IGFzIGEgRmlsZURlc2NyaXB0b3JQcm90byBpbiB0ZXh0IGZvcm1h
dCBhbmQgYWRkIGl0Ci0gIC8vIHRvIHRoZSBEZXNjcmlwdG9yUG9vbC4gIEV4cGVjdCBlcnJvcnMg
dG8gYmUgcHJvZHVjZWQgd2hpY2ggbWF0Y2ggdGhlCi0gIC8vIGdpdmVuIGVycm9yIHRleHQuCi0g
IHZvaWQgQnVpbGRGaWxlV2l0aEVycm9ycyhjb25zdCBzdHJpbmcmIGZpbGVfdGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZXhwZWN0ZWRfZXJyb3JzKSB7Ci0g
ICAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICAgIEFTU0VSVF9UUlVFKFRleHRG
b3JtYXQ6OlBhcnNlRnJvbVN0cmluZyhmaWxlX3RleHQsICZmaWxlX3Byb3RvKSk7Ci0KLSAgICBN
b2NrRXJyb3JDb2xsZWN0b3IgZXJyb3JfY29sbGVjdG9yOwotICAgIEVYUEVDVF9UUlVFKAotICAg
ICAgcG9vbF8uQnVpbGRGaWxlQ29sbGVjdGluZ0Vycm9ycyhmaWxlX3Byb3RvLCAmZXJyb3JfY29s
bGVjdG9yKSA9PSBOVUxMKTsKLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfZXJyb3JzLCBlcnJvcl9j
b2xsZWN0b3IudGV4dF8pOwotICB9Ci0KLSAgLy8gUGFyc2UgZmlsZV90ZXh0IGFzIGEgRmlsZURl
c2NyaXB0b3JQcm90byBpbiB0ZXh0IGZvcm1hdCBhbmQgYWRkIGl0Ci0gIC8vIHRvIHRoZSBEZXNj
cmlwdG9yUG9vbC4gIEV4cGVjdCBlcnJvcnMgdG8gYmUgcHJvZHVjZWQgd2hpY2ggbWF0Y2ggdGhl
Ci0gIC8vIGdpdmVuIHdhcm5pbmcgdGV4dC4KLSAgdm9pZCBCdWlsZEZpbGVXaXRoV2FybmluZ3Mo
Y29uc3Qgc3RyaW5nJiBmaWxlX3RleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cmluZyYgZXhwZWN0ZWRfd2FybmluZ3MpIHsKLSAgICBGaWxlRGVzY3JpcHRvclByb3Rv
IGZpbGVfcHJvdG87Ci0gICAgQVNTRVJUX1RSVUUoVGV4dEZvcm1hdDo6UGFyc2VGcm9tU3RyaW5n
KGZpbGVfdGV4dCwgJmZpbGVfcHJvdG8pKTsKLQotICAgIE1vY2tFcnJvckNvbGxlY3RvciBlcnJv
cl9jb2xsZWN0b3I7Ci0gICAgRVhQRUNUX1RSVUUocG9vbF8uQnVpbGRGaWxlQ29sbGVjdGluZ0Vy
cm9ycyhmaWxlX3Byb3RvLCAmZXJyb3JfY29sbGVjdG9yKSk7Ci0gICAgRVhQRUNUX0VRKGV4cGVj
dGVkX3dhcm5pbmdzLCBlcnJvcl9jb2xsZWN0b3Iud2FybmluZ190ZXh0Xyk7Ci0gIH0KLQotICAv
LyBCdWlsZHMgc29tZSBhbHJlYWR5LXBhcnNlZCBmaWxlIGluIG91ciB0ZXN0IHBvb2wuCi0gIHZv
aWQgQnVpbGRGaWxlSW5UZXN0UG9vbChjb25zdCBGaWxlRGVzY3JpcHRvciogZmlsZSkgewotICAg
IEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgICBmaWxlLT5Db3B5VG8oJmZpbGVf
cHJvdG8pOwotICAgIEFTU0VSVF9UUlVFKHBvb2xfLkJ1aWxkRmlsZShmaWxlX3Byb3RvKSAhPSBO
VUxMKTsKLSAgfQotCi0gIC8vIEJ1aWxkIGRlc2NyaXB0b3IucHJvdG8gaW4gb3VyIHRlc3QgcG9v
bC4gVGhpcyBhbGxvd3MgdXMgdG8gZXh0ZW5kIGl0IGluCi0gIC8vIHRoZSB0ZXN0IHBvb2wsIHNv
IHdlIGNhbiB0ZXN0IGN1c3RvbSBvcHRpb25zLgotICB2b2lkIEJ1aWxkRGVzY3JpcHRvck1lc3Nh
Z2VzSW5UZXN0UG9vbCgpIHsKLSAgICBCdWlsZEZpbGVJblRlc3RQb29sKERlc2NyaXB0b3JQcm90
bzo6ZGVzY3JpcHRvcigpLT5maWxlKCkpOwotICB9Ci0KLSAgRGVzY3JpcHRvclBvb2wgcG9vbF87
Ci19OwotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgQWxyZWFkeURlZmluZWQpIHsKLSAg
QnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1l
c3NhZ2VfdHlwZSB7IG5hbWU6IFwiRm9vXCIgfSIKLSAgICAibWVzc2FnZV90eXBlIHsgbmFtZTog
XCJGb29cIiB9IiwKLQotICAgICJmb28ucHJvdG86IEZvbzogTkFNRTogXCJGb29cIiBpcyBhbHJl
YWR5IGRlZmluZWQuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEFscmVh
ZHlEZWZpbmVkSW5QYWNrYWdlKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6
IFwiZm9vLnByb3RvXCIgIgotICAgICJwYWNrYWdlOiBcImZvby5iYXJcIiAiCi0gICAgIm1lc3Nh
Z2VfdHlwZSB7IG5hbWU6IFwiRm9vXCIgfSIKLSAgICAibWVzc2FnZV90eXBlIHsgbmFtZTogXCJG
b29cIiB9IiwKLQotICAgICJmb28ucHJvdG86IGZvby5iYXIuRm9vOiBOQU1FOiBcIkZvb1wiIGlz
IGFscmVhZHkgZGVmaW5lZCBpbiAiCi0gICAgICAiXCJmb28uYmFyXCIuXG4iKTsKLX0KLQotVEVT
VF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEFscmVhZHlEZWZpbmVkSW5PdGhlckZpbGUpIHsKLSAg
QnVpbGRGaWxlKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBl
IHsgbmFtZTogXCJGb29cIiB9Iik7Ci0KLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFt
ZTogXCJiYXIucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6IFwiRm9vXCIgfSIs
Ci0KLSAgICAiYmFyLnByb3RvOiBGb286IE5BTUU6IFwiRm9vXCIgaXMgYWxyZWFkeSBkZWZpbmVk
IGluIGZpbGUgIgotICAgICAgIlwiZm9vLnByb3RvXCIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlk
YXRpb25FcnJvclRlc3QsIFBhY2thZ2VBbHJlYWR5RGVmaW5lZCkgewotICBCdWlsZEZpbGUoCi0g
ICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyBuYW1lOiBcImZv
b1wiIH0iKTsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJiYXIucHJvdG9c
IiAiCi0gICAgInBhY2thZ2U6IFwiZm9vLmJhclwiIiwKLQotICAgICJiYXIucHJvdG86IGZvbzog
TkFNRTogXCJmb29cIiBpcyBhbHJlYWR5IGRlZmluZWQgKGFzIHNvbWV0aGluZyBvdGhlciAiCi0g
ICAgICAidGhhbiBhIHBhY2thZ2UpIGluIGZpbGUgXCJmb28ucHJvdG9cIi5cbiIpOwotfQotCi1U
RVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgRW51bVZhbHVlQWxyZWFkeURlZmluZWRJblBhcmVu
dCkgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIK
LSAgICAiZW51bV90eXBlIHsgbmFtZTogXCJGb29cIiB2YWx1ZSB7IG5hbWU6IFwiRk9PXCIgbnVt
YmVyOiAxIH0gfSAiCi0gICAgImVudW1fdHlwZSB7IG5hbWU6IFwiQmFyXCIgdmFsdWUgeyBuYW1l
OiBcIkZPT1wiIG51bWJlcjogMSB9IH0gIiwKLQotICAgICJmb28ucHJvdG86IEZPTzogTkFNRTog
XCJGT09cIiBpcyBhbHJlYWR5IGRlZmluZWQuXG4iCi0gICAgImZvby5wcm90bzogRk9POiBOQU1F
OiBOb3RlIHRoYXQgZW51bSB2YWx1ZXMgdXNlIEMrKyBzY29waW5nIHJ1bGVzLCAiCi0gICAgICAi
bWVhbmluZyB0aGF0IGVudW0gdmFsdWVzIGFyZSBzaWJsaW5ncyBvZiB0aGVpciB0eXBlLCBub3Qg
Y2hpbGRyZW4gb2YgIgotICAgICAgIml0LiAgVGhlcmVmb3JlLCBcIkZPT1wiIG11c3QgYmUgdW5p
cXVlIHdpdGhpbiB0aGUgZ2xvYmFsIHNjb3BlLCBub3QgIgotICAgICAgImp1c3Qgd2l0aGluIFwi
QmFyXCIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEVudW1WYWx1ZUFs
cmVhZHlEZWZpbmVkSW5QYXJlbnROb25HbG9iYWwpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygK
LSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgInBhY2thZ2U6IFwicGtnXCIgIgotICAg
ICJlbnVtX3R5cGUgeyBuYW1lOiBcIkZvb1wiIHZhbHVlIHsgbmFtZTogXCJGT09cIiBudW1iZXI6
IDEgfSB9ICIKLSAgICAiZW51bV90eXBlIHsgbmFtZTogXCJCYXJcIiB2YWx1ZSB7IG5hbWU6IFwi
Rk9PXCIgbnVtYmVyOiAxIH0gfSAiLAotCi0gICAgImZvby5wcm90bzogcGtnLkZPTzogTkFNRTog
XCJGT09cIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gXCJwa2dcIi5cbiIKLSAgICAiZm9vLnByb3Rv
OiBwa2cuRk9POiBOQU1FOiBOb3RlIHRoYXQgZW51bSB2YWx1ZXMgdXNlIEMrKyBzY29waW5nIHJ1
bGVzLCAiCi0gICAgICAibWVhbmluZyB0aGF0IGVudW0gdmFsdWVzIGFyZSBzaWJsaW5ncyBvZiB0
aGVpciB0eXBlLCBub3QgY2hpbGRyZW4gb2YgIgotICAgICAgIml0LiAgVGhlcmVmb3JlLCBcIkZP
T1wiIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBcInBrZ1wiLCBub3QganVzdCB3aXRoaW4gIgotICAg
ICAgIlwiQmFyXCIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1pc3Np
bmdOYW1lKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3Rv
XCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyB9IiwKLQotICAgICJmb28ucHJvdG86IDogTkFNRTog
TWlzc2luZyBuYW1lLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBJbnZh
bGlkTmFtZSkgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90
b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsgbmFtZTogXCIkXCIgfSIsCi0KLSAgICAiZm9vLnBy
b3RvOiAkOiBOQU1FOiBcIiRcIiBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyLlxuIik7Ci19Ci0K
LVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBJbnZhbGlkUGFja2FnZU5hbWUpIHsKLSAgQnVp
bGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgInBhY2th
Z2U6IFwiZm9vLiRcIiIsCi0KLSAgICAiZm9vLnByb3RvOiBmb28uJDogTkFNRTogXCIkXCIgaXMg
bm90IGEgdmFsaWQgaWRlbnRpZmllci5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9y
VGVzdCwgTWlzc2luZ0ZpbGVOYW1lKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIiIs
Ci0KLSAgICAiOiA6IE9USEVSOiBNaXNzaW5nIGZpZWxkOiBGaWxlRGVzY3JpcHRvclByb3RvLm5h
bWUuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIER1cGVEZXBlbmRlbmN5
KSB7Ci0gIEJ1aWxkRmlsZSgibmFtZTogXCJmb28ucHJvdG9cIiIpOwotICBCdWlsZEZpbGVXaXRo
RXJyb3JzKAotICAgICJuYW1lOiBcImJhci5wcm90b1wiICIKLSAgICAiZGVwZW5kZW5jeTogXCJm
b28ucHJvdG9cIiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZm9vLnByb3RvXCIgIiwKLQotICAgICJi
YXIucHJvdG86IGJhci5wcm90bzogT1RIRVI6IEltcG9ydCBcImZvby5wcm90b1wiIHdhcyBsaXN0
ZWQgdHdpY2UuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFVua25vd25E
ZXBlbmRlbmN5KSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiYmFyLnBy
b3RvXCIgIgotICAgICJkZXBlbmRlbmN5OiBcImZvby5wcm90b1wiICIsCi0KLSAgICAiYmFyLnBy
b3RvOiBiYXIucHJvdG86IE9USEVSOiBJbXBvcnQgXCJmb28ucHJvdG9cIiBoYXMgbm90IGJlZW4g
bG9hZGVkLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBJbnZhbGlkUHVi
bGljRGVwZW5kZW5jeUluZGV4KSB7Ci0gIEJ1aWxkRmlsZSgibmFtZTogXCJmb28ucHJvdG9cIiIp
OwotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImJhci5wcm90b1wiICIKLSAg
ICAiZGVwZW5kZW5jeTogXCJmb28ucHJvdG9cIiAiCi0gICAgInB1YmxpY19kZXBlbmRlbmN5OiAx
IiwKLSAgICAiYmFyLnByb3RvOiBiYXIucHJvdG86IE9USEVSOiBJbnZhbGlkIHB1YmxpYyBkZXBl
bmRlbmN5IGluZGV4LlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBGb3Jl
aWduVW5pbXBvcnRlZFBhY2thZ2VOb0NyYXNoKSB7Ci0gIC8vIFVzZWQgdG8gY3Jhc2g6ICBJZiB3
ZSBkZXBlbmQgb24gYSBub24tZXhpc3RlbnQgZmlsZSBhbmQgdGhlbiByZWZlciB0byBhCi0gIC8v
IHBhY2thZ2UgZGVmaW5lZCBpbiBhIGZpbGUgdGhhdCB3ZSBkaWRuJ3QgaW1wb3J0LCBhbmQgdGhh
dCBwYWNrYWdlIGlzCi0gIC8vIG5lc3RlZCB3aXRoaW4gYSBwYXJlbnQgcGFja2FnZSB3aGljaCB0
aGlzIGZpbGUgaXMgYWxzbyBpbiwgYW5kIHdlIGRvbid0Ci0gIC8vIGluY2x1ZGUgdGhhdCBwYXJl
bnQgcGFja2FnZSBpbiB0aGUgbmFtZSAoaS5lLiB3ZSBkbyBhIHJlbGF0aXZlIGxvb2t1cCkuLi4K
LSAgLy8gWWVzLCByZWFsbHkuCi0gIEJ1aWxkRmlsZSgKLSAgICAibmFtZTogJ2Zvby5wcm90bycg
IgotICAgICJwYWNrYWdlOiAnb3V0ZXIuZm9vJyAiKTsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygK
LSAgICAibmFtZTogJ2Jhci5wcm90bycgIgotICAgICJkZXBlbmRlbmN5OiAnYmF6LnByb3RvJyAi
Ci0gICAgInBhY2thZ2U6ICdvdXRlci5iYXInICIKLSAgICAibWVzc2FnZV90eXBlIHsgIgotICAg
ICIgIG5hbWU6ICdCYXInICIKLSAgICAiICBmaWVsZCB7IG5hbWU6J2JhcicgbnVtYmVyOjEgbGFi
ZWw6TEFCRUxfT1BUSU9OQUwgdHlwZV9uYW1lOidmb28uRm9vJyB9IgotICAgICJ9IiwKLQotICAg
ICJiYXIucHJvdG86IGJhci5wcm90bzogT1RIRVI6IEltcG9ydCBcImJhei5wcm90b1wiIGhhcyBu
b3QgYmVlbiBsb2FkZWQuXG4iCi0gICAgImJhci5wcm90bzogb3V0ZXIuYmFyLkJhci5iYXI6IFRZ
UEU6IFwib3V0ZXIuZm9vXCIgc2VlbXMgdG8gYmUgZGVmaW5lZCBpbiAiCi0gICAgICAiXCJmb28u
cHJvdG9cIiwgd2hpY2ggaXMgbm90IGltcG9ydGVkIGJ5IFwiYmFyLnByb3RvXCIuICBUbyB1c2Ug
aXQgaGVyZSwgIgotICAgICAgInBsZWFzZSBhZGQgdGhlIG5lY2Vzc2FyeSBpbXBvcnQuXG4iKTsK
LX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIER1cGVGaWxlKSB7Ci0gIEJ1aWxkRmls
ZSgKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6
IFwiRm9vXCIgfSIpOwotICAvLyBOb3RlOiAgV2Ugc2hvdWxkICpub3QqIGdldCByZWR1bmRhbnQg
ZXJyb3JzIGFib3V0ICJGb28iIGFscmVhZHkgYmVpbmcKLSAgLy8gICBkZWZpbmVkLgotICBCdWls
ZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2Fn
ZV90eXBlIHsgbmFtZTogXCJGb29cIiB9ICIKLSAgICAvLyBBZGQgYW5vdGhlciB0eXBlIHNvIHRo
YXQgdGhlIGZpbGVzIGFyZW4ndCBpZGVudGljYWwgKGluIHdoaWNoIGNhc2UgdGhlcmUKLSAgICAv
LyB3b3VsZCBiZSBubyBlcnJvcikuCi0gICAgImVudW1fdHlwZSB7IG5hbWU6IFwiQmFyXCIgfSIs
Ci0KLSAgICAiZm9vLnByb3RvOiBmb28ucHJvdG86IE9USEVSOiBBIGZpbGUgd2l0aCB0aGlzIG5h
bWUgaXMgYWxyZWFkeSBpbiB0aGUgIgotICAgICAgInBvb2wuXG4iKTsKLX0KLQotVEVTVF9GKFZh
bGlkYXRpb25FcnJvclRlc3QsIEZpZWxkSW5FeHRlbnNpb25SYW5nZSkgewotICBCdWlsZEZpbGVX
aXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBl
IHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBmaWVsZCB7IG5hbWU6IFwiZm9vXCIg
bnVtYmVyOiAgOSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgfSIKLSAgICAi
ICBmaWVsZCB7IG5hbWU6IFwiYmFyXCIgbnVtYmVyOiAxMCBsYWJlbDpMQUJFTF9PUFRJT05BTCB0
eXBlOlRZUEVfSU5UMzIgfSIKLSAgICAiICBmaWVsZCB7IG5hbWU6IFwiYmF6XCIgbnVtYmVyOiAx
OSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgfSIKLSAgICAiICBmaWVsZCB7
IG5hbWU6IFwicXV4XCIgbnVtYmVyOiAyMCBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVf
SU5UMzIgfSIKLSAgICAiICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDogMTAgZW5kOiAyMCB9Igot
ICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZvby5iYXI6IE5VTUJFUjogRXh0ZW5zaW9uIHJh
bmdlIDEwIHRvIDE5IGluY2x1ZGVzIGZpZWxkICIKLSAgICAgICJcImJhclwiICgxMCkuXG4iCi0g
ICAgImZvby5wcm90bzogRm9vLmJhejogTlVNQkVSOiBFeHRlbnNpb24gcmFuZ2UgMTAgdG8gMTkg
aW5jbHVkZXMgZmllbGQgIgotICAgICAgIlwiYmF6XCIgKDE5KS5cbiIpOwotfQotCi1URVNUX0Yo
VmFsaWRhdGlvbkVycm9yVGVzdCwgT3ZlcmxhcHBpbmdFeHRlbnNpb25SYW5nZXMpIHsKLSAgQnVp
bGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3Nh
Z2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAgZXh0ZW5zaW9uX3Jhbmdl
IHsgc3RhcnQ6IDEwIGVuZDogMjAgfSIKLSAgICAiICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDog
MjAgZW5kOiAzMCB9IgotICAgICIgIGV4dGVuc2lvbl9yYW5nZSB7IHN0YXJ0OiAxOSBlbmQ6IDIx
IH0iCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90bzogRm9vOiBOVU1CRVI6IEV4dGVuc2lvbiBy
YW5nZSAxOSB0byAyMCBvdmVybGFwcyB3aXRoICIKLSAgICAgICJhbHJlYWR5LWRlZmluZWQgcmFu
Z2UgMTAgdG8gMTkuXG4iCi0gICAgImZvby5wcm90bzogRm9vOiBOVU1CRVI6IEV4dGVuc2lvbiBy
YW5nZSAxOSB0byAyMCBvdmVybGFwcyB3aXRoICIKLSAgICAgICJhbHJlYWR5LWRlZmluZWQgcmFu
Z2UgMjAgdG8gMjkuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFJlc2Vy
dmVkRmllbGRFcnJvcikgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZv
by5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIK
LSAgICAiICBmaWVsZCB7IG5hbWU6IFwiZm9vXCIgbnVtYmVyOiAxNSBsYWJlbDpMQUJFTF9PUFRJ
T05BTCB0eXBlOlRZUEVfSU5UMzIgfSIKLSAgICAiICByZXNlcnZlZF9yYW5nZSB7IHN0YXJ0OiAx
MCBlbmQ6IDIwIH0iCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90bzogRm9vLmZvbzogTlVNQkVS
OiBGaWVsZCBcImZvb1wiIHVzZXMgcmVzZXJ2ZWQgbnVtYmVyIDE1LlxuIik7Ci19Ci0KLVRFU1Rf
RihWYWxpZGF0aW9uRXJyb3JUZXN0LCBSZXNlcnZlZEV4dGVuc2lvblJhbmdlRXJyb3IpIHsKLSAg
QnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1l
c3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAgZXh0ZW5zaW9uX3Jh
bmdlIHsgc3RhcnQ6IDEwIGVuZDogMjAgfSIKLSAgICAiICByZXNlcnZlZF9yYW5nZSB7IHN0YXJ0
OiA1IGVuZDogMTUgfSIKLSAgICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBGb286IE5VTUJFUjog
RXh0ZW5zaW9uIHJhbmdlIDEwIHRvIDE5IgotICAgICIgb3ZlcmxhcHMgd2l0aCByZXNlcnZlZCBy
YW5nZSA1IHRvIDE0LlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBSZXNl
cnZlZEV4dGVuc2lvblJhbmdlQWRqYWNlbnQpIHsKLSAgQnVpbGRGaWxlKAotICAgICJuYW1lOiBc
ImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29c
IiIKLSAgICAiICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDogMTAgZW5kOiAyMCB9IgotICAgICIg
IHJlc2VydmVkX3JhbmdlIHsgc3RhcnQ6IDUgZW5kOiAxMCB9IgotICAgICJ9Iik7Ci19Ci0KLVRF
U1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBSZXNlcnZlZFJhbmdlT3ZlcmxhcCkgewotICBCdWls
ZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2Fn
ZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICByZXNlcnZlZF9yYW5nZSB7
IHN0YXJ0OiAxMCBlbmQ6IDIwIH0iCi0gICAgIiAgcmVzZXJ2ZWRfcmFuZ2UgeyBzdGFydDogNSBl
bmQ6IDE1IH0iCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90bzogRm9vOiBOVU1CRVI6IFJlc2Vy
dmVkIHJhbmdlIDUgdG8gMTQiCi0gICAgIiBvdmVybGFwcyB3aXRoIGFscmVhZHktZGVmaW5lZCBy
YW5nZSAxMCB0byAxOS5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgUmVz
ZXJ2ZWROYW1lRXJyb3IpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJm
b28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiRm9vXCIi
Ci0gICAgIiAgZmllbGQgeyBuYW1lOiBcImZvb1wiIG51bWJlcjogMTUgbGFiZWw6TEFCRUxfT1BU
SU9OQUwgdHlwZTpUWVBFX0lOVDMyIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOiBcImJhclwiIG51
bWJlcjogMTYgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIH0iCi0gICAgIiAg
ZmllbGQgeyBuYW1lOiBcImJhelwiIG51bWJlcjogMTcgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlw
ZTpUWVBFX0lOVDMyIH0iCi0gICAgIiAgcmVzZXJ2ZWRfbmFtZTogXCJmb29cIiIKLSAgICAiICBy
ZXNlcnZlZF9uYW1lOiBcImJhclwiIgotICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZvby5m
b286IE5BTUU6IEZpZWxkIG5hbWUgXCJmb29cIiBpcyByZXNlcnZlZC5cbiIKLSAgICAiZm9vLnBy
b3RvOiBGb28uYmFyOiBOQU1FOiBGaWVsZCBuYW1lIFwiYmFyXCIgaXMgcmVzZXJ2ZWQuXG4iKTsK
LX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFJlc2VydmVkTmFtZVJlZHVuZGFudCkg
ewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAg
ICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICByZXNlcnZl
ZF9uYW1lOiBcImZvb1wiIgotICAgICIgIHJlc2VydmVkX25hbWU6IFwiZm9vXCIiCi0gICAgIn0i
LAotCi0gICAgImZvby5wcm90bzogZm9vOiBOQU1FOiBGaWVsZCBuYW1lIFwiZm9vXCIgaXMgcmVz
ZXJ2ZWQgbXVsdGlwbGUgdGltZXMuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRl
c3QsIFJlc2VydmVkRmllbGRzRGVidWdTdHJpbmcpIHsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3Iq
IGZpbGUgPSBCdWlsZEZpbGUoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNz
YWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvb1wiIgotICAgICIgIHJlc2VydmVkX25hbWU6
IFwiZm9vXCIiCi0gICAgIiAgcmVzZXJ2ZWRfbmFtZTogXCJiYXJcIiIKLSAgICAiICByZXNlcnZl
ZF9yYW5nZSB7IHN0YXJ0OiA1IGVuZDogNiB9IgotICAgICIgIHJlc2VydmVkX3JhbmdlIHsgc3Rh
cnQ6IDEwIGVuZDogMjAgfSIKLSAgICAifSIpOwotCi0gIEFTU0VSVF9FUSgKLSAgICAic3ludGF4
ID0gXCJwcm90bzJcIjtcblxuIgotICAgICJtZXNzYWdlIEZvbyB7XG4iCi0gICAgIiAgcmVzZXJ2
ZWQgNSwgMTAgdG8gMTk7XG4iCi0gICAgIiAgcmVzZXJ2ZWQgXCJmb29cIiwgXCJiYXJcIjtcbiIK
LSAgICAifVxuXG4iLAotICAgIGZpbGUtPkRlYnVnU3RyaW5nKCkpOwotfQotCi1URVNUX0YoVmFs
aWRhdGlvbkVycm9yVGVzdCwgSW52YWxpZERlZmF1bHRzKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJv
cnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAg
ICAiICBuYW1lOiBcIkZvb1wiIgotCi0gICAgLy8gSW52YWxpZCBudW1iZXIuCi0gICAgIiAgZmll
bGQgeyBuYW1lOiBcImZvb1wiIG51bWJlcjogMSBsYWJlbDogTEFCRUxfT1BUSU9OQUwgdHlwZTog
VFlQRV9JTlQzMiIKLSAgICAiICAgICAgICAgIGRlZmF1bHRfdmFsdWU6IFwiYWJjXCIgfSIKLQot
ICAgIC8vIEVtcHR5IGRlZmF1bHQgdmFsdWUuCi0gICAgIiAgZmllbGQgeyBuYW1lOiBcImJhclwi
IG51bWJlcjogMiBsYWJlbDogTEFCRUxfT1BUSU9OQUwgdHlwZTogVFlQRV9JTlQzMiIKLSAgICAi
ICAgICAgICAgIGRlZmF1bHRfdmFsdWU6IFwiXCIgfSIKLQotICAgIC8vIEludmFsaWQgYm9vbGVh
bi4KLSAgICAiICBmaWVsZCB7IG5hbWU6IFwiYmF6XCIgbnVtYmVyOiAzIGxhYmVsOiBMQUJFTF9P
UFRJT05BTCB0eXBlOiBUWVBFX0JPT0wiCi0gICAgIiAgICAgICAgICBkZWZhdWx0X3ZhbHVlOiBc
ImFiY1wiIH0iCi0KLSAgICAvLyBNZXNzYWdlcyBjYW4ndCBoYXZlIGRlZmF1bHRzLgotICAgICIg
IGZpZWxkIHsgbmFtZTogXCJxdXhcIiBudW1iZXI6IDQgbGFiZWw6IExBQkVMX09QVElPTkFMIHR5
cGU6IFRZUEVfTUVTU0FHRSIKLSAgICAiICAgICAgICAgIGRlZmF1bHRfdmFsdWU6IFwiYWJjXCIg
dHlwZV9uYW1lOiBcIkZvb1wiIH0iCi0KLSAgICAvLyBTYW1lIHRoaW5nLCBidXQgd2UgZG9uJ3Qg
a25vdyB0aGF0IHRoaXMgZmllbGQgaGFzIG1lc3NhZ2UgdHlwZSB1bnRpbAotICAgIC8vIHdlIGxv
b2sgdXAgdGhlIHR5cGUgbmFtZS4KLSAgICAiICBmaWVsZCB7IG5hbWU6IFwicXV1eFwiIG51bWJl
cjogNSBsYWJlbDogTEFCRUxfT1BUSU9OQUwiCi0gICAgIiAgICAgICAgICBkZWZhdWx0X3ZhbHVl
OiBcImFiY1wiIHR5cGVfbmFtZTogXCJGb29cIiB9IgotCi0gICAgLy8gUmVwZWF0ZWRzIGNhbid0
IGhhdmUgZGVmYXVsdHMuCi0gICAgIiAgZmllbGQgeyBuYW1lOiBcImNvcmdlXCIgbnVtYmVyOiA2
IGxhYmVsOiBMQUJFTF9SRVBFQVRFRCB0eXBlOiBUWVBFX0lOVDMyIgotICAgICIgICAgICAgICAg
ZGVmYXVsdF92YWx1ZTogXCIxXCIgfSIKLSAgICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBGb28u
Zm9vOiBERUZBVUxUX1ZBTFVFOiBDb3VsZG4ndCBwYXJzZSBkZWZhdWx0IHZhbHVlIFwiYWJjXCIu
XG4iCi0gICAgImZvby5wcm90bzogRm9vLmJhcjogREVGQVVMVF9WQUxVRTogQ291bGRuJ3QgcGFy
c2UgZGVmYXVsdCB2YWx1ZSBcIlwiLlxuIgotICAgICJmb28ucHJvdG86IEZvby5iYXo6IERFRkFV
TFRfVkFMVUU6IEJvb2xlYW4gZGVmYXVsdCBtdXN0IGJlIHRydWUgb3IgIgotICAgICAgImZhbHNl
LlxuIgotICAgICJmb28ucHJvdG86IEZvby5xdXg6IERFRkFVTFRfVkFMVUU6IE1lc3NhZ2VzIGNh
bid0IGhhdmUgZGVmYXVsdCB2YWx1ZXMuXG4iCi0gICAgImZvby5wcm90bzogRm9vLmNvcmdlOiBE
RUZBVUxUX1ZBTFVFOiBSZXBlYXRlZCBmaWVsZHMgY2FuJ3QgaGF2ZSBkZWZhdWx0ICIKLSAgICAg
ICJ2YWx1ZXMuXG4iCi0gICAgLy8gVGhpcyBlbmRzIHVwIGJlaW5nIHJlcG9ydGVkIGxhdGVyIGJl
Y2F1c2UgdGhlIGVycm9yIGlzIGRldGVjdGVkIGF0Ci0gICAgLy8gY3Jvc3MtbGlua2luZyB0aW1l
LgotICAgICJmb28ucHJvdG86IEZvby5xdXV4OiBERUZBVUxUX1ZBTFVFOiBNZXNzYWdlcyBjYW4n
dCBoYXZlIGRlZmF1bHQgIgotICAgICAgInZhbHVlcy5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRh
dGlvbkVycm9yVGVzdCwgTmVnYXRpdmVGaWVsZE51bWJlcikgewotICBCdWlsZEZpbGVXaXRoRXJy
b3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0g
ICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBmaWVsZCB7IG5hbWU6IFwiZm9vXCIgbnVtYmVy
OiAtMSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgfSIKLSAgICAifSIsCi0K
LSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBOVU1CRVI6IEZpZWxkIG51bWJlcnMgbXVzdCBiZSBw
b3NpdGl2ZSBpbnRlZ2Vycy5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwg
SHVnZUZpZWxkTnVtYmVyKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwi
Zm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvb1wi
IgotICAgICIgIGZpZWxkIHsgbmFtZTogXCJmb29cIiBudW1iZXI6IDB4NzAwMDAwMDAgIgotICAg
ICIgICAgICAgICAgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIH0iCi0gICAg
In0iLAotCi0gICAgImZvby5wcm90bzogRm9vLmZvbzogTlVNQkVSOiBGaWVsZCBudW1iZXJzIGNh
bm5vdCBiZSBncmVhdGVyIHRoYW4gIgotICAgICAgIjUzNjg3MDkxMS5cbiIpOwotfQotCi1URVNU
X0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgUmVzZXJ2ZWRGaWVsZE51bWJlcikgewotICBCdWlsZEZp
bGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90
eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBmaWVsZCB7bmFtZTpcImZvb1wi
IG51bWJlcjogMTg5OTkgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIH0iCi0g
ICAgIiAgZmllbGQge25hbWU6XCJiYXJcIiBudW1iZXI6IDE5MDAwIGxhYmVsOkxBQkVMX09QVElP
TkFMIHR5cGU6VFlQRV9JTlQzMiB9IgotICAgICIgIGZpZWxkIHtuYW1lOlwiYmF6XCIgbnVtYmVy
OiAxOTk5OSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgfSIKLSAgICAiICBm
aWVsZCB7bmFtZTpcInF1eFwiIG51bWJlcjogMjAwMDAgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlw
ZTpUWVBFX0lOVDMyIH0iCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90bzogRm9vLmJhcjogTlVN
QkVSOiBGaWVsZCBudW1iZXJzIDE5MDAwIHRocm91Z2ggMTk5OTkgYXJlICIKLSAgICAgICJyZXNl
cnZlZCBmb3IgdGhlIHByb3RvY29sIGJ1ZmZlciBsaWJyYXJ5IGltcGxlbWVudGF0aW9uLlxuIgot
ICAgICJmb28ucHJvdG86IEZvby5iYXo6IE5VTUJFUjogRmllbGQgbnVtYmVycyAxOTAwMCB0aHJv
dWdoIDE5OTk5IGFyZSAiCi0gICAgICAicmVzZXJ2ZWQgZm9yIHRoZSBwcm90b2NvbCBidWZmZXIg
bGlicmFyeSBpbXBsZW1lbnRhdGlvbi5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9y
VGVzdCwgRXh0ZW5zaW9uTWlzc2luZ0V4dGVuZGVlKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMo
Ci0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAi
ICBuYW1lOiBcIkZvb1wiIgotICAgICIgIGV4dGVuc2lvbiB7IG5hbWU6IFwiZm9vXCIgbnVtYmVy
OiAxIGxhYmVsOiBMQUJFTF9PUFRJT05BTCIKLSAgICAiICAgICAgICAgICAgICB0eXBlX25hbWU6
IFwiRm9vXCIgfSIKLSAgICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBFWFRFTkRF
RTogRmllbGREZXNjcmlwdG9yUHJvdG8uZXh0ZW5kZWUgbm90IHNldCBmb3IgIgotICAgICAgImV4
dGVuc2lvbiBmaWVsZC5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgTm9u
RXh0ZW5zaW9uV2l0aEV4dGVuZGVlKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5h
bWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBc
IkJhclwiIgotICAgICIgIGV4dGVuc2lvbl9yYW5nZSB7IHN0YXJ0OiAxIGVuZDogMiB9IgotICAg
ICJ9IgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvb1wiIgotICAgICIg
IGZpZWxkIHsgbmFtZTogXCJmb29cIiBudW1iZXI6IDEgbGFiZWw6IExBQkVMX09QVElPTkFMIgot
ICAgICIgICAgICAgICAgdHlwZV9uYW1lOiBcIkZvb1wiIGV4dGVuZGVlOiBcIkJhclwiIH0iCi0g
ICAgIn0iLAotCi0gICAgImZvby5wcm90bzogRm9vLmZvbzogRVhURU5ERUU6IEZpZWxkRGVzY3Jp
cHRvclByb3RvLmV4dGVuZGVlIHNldCBmb3IgIgotICAgICAgIm5vbi1leHRlbnNpb24gZmllbGQu
XG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEZpZWxkT25lb2ZJbmRleFRv
b0xhcmdlKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3Rv
XCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvb1wiIgotICAgICIg
IGZpZWxkIHsgbmFtZTpcImZvb1wiIG51bWJlcjoxIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6
VFlQRV9JTlQzMiAiCi0gICAgIiAgICAgICAgICBvbmVvZl9pbmRleDogMSB9IgotICAgICIgIGZp
ZWxkIHsgbmFtZTpcImR1bW15XCIgbnVtYmVyOjIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpU
WVBFX0lOVDMyICIKLSAgICAiICAgICAgICAgIG9uZW9mX2luZGV4OiAwIH0iCi0gICAgIiAgb25l
b2ZfZGVjbCB7IG5hbWU6XCJiYXJcIiB9IgotICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZv
by5mb286IE9USEVSOiBGaWVsZERlc2NyaXB0b3JQcm90by5vbmVvZl9pbmRleCAxIGlzIG91dCBv
ZiAiCi0gICAgICAicmFuZ2UgZm9yIHR5cGUgXCJGb29cIi5cbiIpOwotfQotCi1URVNUX0YoVmFs
aWRhdGlvbkVycm9yVGVzdCwgRmllbGRPbmVvZkluZGV4TmVnYXRpdmUpIHsKLSAgQnVpbGRGaWxl
V2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlw
ZSB7IgotICAgICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIg
bnVtYmVyOjEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyICIKLSAgICAiICAg
ICAgICAgIG9uZW9mX2luZGV4OiAtMSB9IgotICAgICIgIGZpZWxkIHsgbmFtZTpcImR1bW15XCIg
bnVtYmVyOjIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyICIKLSAgICAiICAg
ICAgICAgIG9uZW9mX2luZGV4OiAwIH0iCi0gICAgIiAgb25lb2ZfZGVjbCB7IG5hbWU6XCJiYXJc
IiB9IgotICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZvby5mb286IE9USEVSOiBGaWVsZERl
c2NyaXB0b3JQcm90by5vbmVvZl9pbmRleCAtMSBpcyBvdXQgb2YgIgotICAgICAgInJhbmdlIGZv
ciB0eXBlIFwiRm9vXCIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE9u
ZW9mRmllbGRzQ29uc2VjdXRpdmVEZWZpbml0aW9uKSB7Ci0gIC8vIEZpZWxkcyBiZWxvbmdpbmcg
dG8gdGhlIHNhbWUgb25lb2YgbXVzdCBiZSBkZWZpbmVkIGNvbnNlY3V0aXZlbHkuCi0gIEJ1aWxk
RmlsZVdpdGhFcnJvcnMoCi0gICAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgICAibWVz
c2FnZV90eXBlIHsiCi0gICAgICAiICBuYW1lOiBcIkZvb1wiIgotICAgICAgIiAgZmllbGQgeyBu
YW1lOlwiZm9vMVwiIG51bWJlcjogMSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5U
MzIgIgotICAgICAgIiAgICAgICAgICBvbmVvZl9pbmRleDogMCB9IgotICAgICAgIiAgZmllbGQg
eyBuYW1lOlwiYmFyXCIgbnVtYmVyOiAyIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9J
TlQzMiB9IgotICAgICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vMlwiIG51bWJlcjogMyBsYWJlbDpM
QUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgIgotICAgICAgIiAgICAgICAgICBvbmVvZl9p
bmRleDogMCB9IgotICAgICAgIiAgb25lb2ZfZGVjbCB7IG5hbWU6XCJmb29zXCIgfSIKLSAgICAg
ICJ9IiwKLQotICAgICAgImZvby5wcm90bzogRm9vLmJhcjogT1RIRVI6IEZpZWxkcyBpbiB0aGUg
c2FtZSBvbmVvZiBtdXN0IGJlIGRlZmluZWQgIgotICAgICAgImNvbnNlY3V0aXZlbHkuIFwiYmFy
XCIgY2Fubm90IGJlIGRlZmluZWQgYmVmb3JlIHRoZSBjb21wbGV0aW9uIG9mIHRoZSAiCi0gICAg
ICAiXCJmb29zXCIgb25lb2YgZGVmaW5pdGlvbi5cbiIpOwotCi0gIC8vIFByZXZlbnQgaW50ZXJs
ZWF2ZWQgZmllbGRzLCB3aGljaCBiZWxvbmcgdG8gZGlmZmVyZW50IG9uZW9mcy4KLSAgQnVpbGRG
aWxlV2l0aEVycm9ycygKLSAgICAgICJuYW1lOiBcImZvbzIucHJvdG9cIiAiCi0gICAgICAibWVz
c2FnZV90eXBlIHsiCi0gICAgICAiICBuYW1lOiBcIkZvbzJcIiIKLSAgICAgICIgIGZpZWxkIHsg
bmFtZTpcImZvbzFcIiBudW1iZXI6IDEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lO
VDMyICIKLSAgICAgICIgICAgICAgICAgb25lb2ZfaW5kZXg6IDAgfSIKLSAgICAgICIgIGZpZWxk
IHsgbmFtZTpcImJhcjFcIiBudW1iZXI6IDIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBF
X0lOVDMyICIKLSAgICAgICIgICAgICAgICAgb25lb2ZfaW5kZXg6IDEgfSIKLSAgICAgICIgIGZp
ZWxkIHsgbmFtZTpcImZvbzJcIiBudW1iZXI6IDMgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpU
WVBFX0lOVDMyICIKLSAgICAgICIgICAgICAgICAgb25lb2ZfaW5kZXg6IDAgfSIKLSAgICAgICIg
IGZpZWxkIHsgbmFtZTpcImJhcjJcIiBudW1iZXI6IDQgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlw
ZTpUWVBFX0lOVDMyICIKLSAgICAgICIgICAgICAgICAgb25lb2ZfaW5kZXg6IDEgfSIKLSAgICAg
ICIgIG9uZW9mX2RlY2wgeyBuYW1lOlwiZm9vc1wiIH0iCi0gICAgICAiICBvbmVvZl9kZWNsIHsg
bmFtZTpcImJhcnNcIiB9IgotICAgICAgIn0iLAotICAgICAgImZvbzIucHJvdG86IEZvbzIuYmFy
MTogT1RIRVI6IEZpZWxkcyBpbiB0aGUgc2FtZSBvbmVvZiBtdXN0IGJlIGRlZmluZWQgIgotICAg
ICAgImNvbnNlY3V0aXZlbHkuIFwiYmFyMVwiIGNhbm5vdCBiZSBkZWZpbmVkIGJlZm9yZSB0aGUg
Y29tcGxldGlvbiBvZiB0aGUgIgotICAgICAgIlwiZm9vc1wiIG9uZW9mIGRlZmluaXRpb24uXG4i
Ci0gICAgICAiZm9vMi5wcm90bzogRm9vMi5mb28yOiBPVEhFUjogRmllbGRzIGluIHRoZSBzYW1l
IG9uZW9mIG11c3QgYmUgZGVmaW5lZCAiCi0gICAgICAiY29uc2VjdXRpdmVseS4gXCJmb28yXCIg
Y2Fubm90IGJlIGRlZmluZWQgYmVmb3JlIHRoZSBjb21wbGV0aW9uIG9mIHRoZSAiCi0gICAgICAi
XCJiYXJzXCIgb25lb2YgZGVmaW5pdGlvbi5cbiIpOwotCi0gIC8vIEFub3RoZXIgY2FzZSBmb3Ig
bm9ybWFsIGZpZWxkcyBhbmQgZGlmZmVyZW50IG9uZW9mIGZpZWxkcyBpbnRlcmxlYXZlLgotICBC
dWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICAgIm5hbWU6IFwiZm9vMy5wcm90b1wiICIKLSAgICAg
ICJtZXNzYWdlX3R5cGUgeyIKLSAgICAgICIgIG5hbWU6IFwiRm9vM1wiIgotICAgICAgIiAgZmll
bGQgeyBuYW1lOlwiZm9vMVwiIG51bWJlcjogMSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZ
UEVfSU5UMzIgIgotICAgICAgIiAgICAgICAgICBvbmVvZl9pbmRleDogMCB9IgotICAgICAgIiAg
ZmllbGQgeyBuYW1lOlwiYmFyMVwiIG51bWJlcjogMiBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBl
OlRZUEVfSU5UMzIgIgotICAgICAgIiAgICAgICAgICBvbmVvZl9pbmRleDogMSB9IgotICAgICAg
IiAgZmllbGQgeyBuYW1lOlwiYmF6XCIgbnVtYmVyOiAzIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5
cGU6VFlQRV9JTlQzMiB9IgotICAgICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vMlwiIG51bWJlcjog
NCBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgIgotICAgICAgIiAgICAgICAg
ICBvbmVvZl9pbmRleDogMCB9IgotICAgICAgIiAgb25lb2ZfZGVjbCB7IG5hbWU6XCJmb29zXCIg
fSIKLSAgICAgICIgIG9uZW9mX2RlY2wgeyBuYW1lOlwiYmFyc1wiIH0iCi0gICAgICAifSIsCi0g
ICAgICAiZm9vMy5wcm90bzogRm9vMy5iYXo6IE9USEVSOiBGaWVsZHMgaW4gdGhlIHNhbWUgb25l
b2YgbXVzdCBiZSBkZWZpbmVkICIKLSAgICAgICJjb25zZWN1dGl2ZWx5LiBcImJhelwiIGNhbm5v
dCBiZSBkZWZpbmVkIGJlZm9yZSB0aGUgY29tcGxldGlvbiBvZiB0aGUgIgotICAgICAgIlwiZm9v
c1wiIG9uZW9mIGRlZmluaXRpb24uXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRl
c3QsIEZpZWxkTnVtYmVyQ29uZmxpY3QpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAi
bmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6
IFwiRm9vXCIiCi0gICAgIiAgZmllbGQgeyBuYW1lOiBcImZvb1wiIG51bWJlcjogMSBsYWJlbDpM
QUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgfSIKLSAgICAiICBmaWVsZCB7IG5hbWU6IFwi
YmFyXCIgbnVtYmVyOiAxIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiB9Igot
ICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZvby5iYXI6IE5VTUJFUjogRmllbGQgbnVtYmVy
IDEgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluICIKLSAgICAgICJcIkZvb1wiIGJ5IGZpZWxkIFwi
Zm9vXCIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEJhZE1lc3NhZ2VT
ZXRFeHRlbnNpb25UeXBlKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwi
Zm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIk1lc3Nh
Z2VTZXRcIiIKLSAgICAiICBvcHRpb25zIHsgbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQ6IHRydWUg
fSIKLSAgICAiICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDogNCBlbmQ6IDUgfSIKLSAgICAifSIK
LSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBleHRl
bnNpb24geyBuYW1lOlwiZm9vXCIgbnVtYmVyOjQgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpU
WVBFX0lOVDMyIgotICAgICIgICAgICAgICAgICAgIGV4dGVuZGVlOiBcIk1lc3NhZ2VTZXRcIiB9
IgotICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZvby5mb286IFRZUEU6IEV4dGVuc2lvbnMg
b2YgTWVzc2FnZVNldHMgbXVzdCBiZSBvcHRpb25hbCAiCi0gICAgICAibWVzc2FnZXMuXG4iKTsK
LX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEJhZE1lc3NhZ2VTZXRFeHRlbnNpb25M
YWJlbCkgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wi
ICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJNZXNzYWdlU2V0XCIiCi0g
ICAgIiAgb3B0aW9ucyB7IG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0OiB0cnVlIH0iCi0gICAgIiAg
ZXh0ZW5zaW9uX3JhbmdlIHsgc3RhcnQ6IDQgZW5kOiA1IH0iCi0gICAgIn0iCi0gICAgIm1lc3Nh
Z2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAgZXh0ZW5zaW9uIHsgbmFt
ZTpcImZvb1wiIG51bWJlcjo0IGxhYmVsOkxBQkVMX1JFUEVBVEVEIHR5cGU6VFlQRV9NRVNTQUdF
IgotICAgICIgICAgICAgICAgICAgIHR5cGVfbmFtZTogXCJGb29cIiBleHRlbmRlZTogXCJNZXNz
YWdlU2V0XCIgfSIKLSAgICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBFOiBF
eHRlbnNpb25zIG9mIE1lc3NhZ2VTZXRzIG11c3QgYmUgb3B0aW9uYWwgIgotICAgICAgIm1lc3Nh
Z2VzLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBGaWVsZEluTWVzc2Fn
ZVNldCkgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wi
ICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBv
cHRpb25zIHsgbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQ6IHRydWUgfSIKLSAgICAiICBmaWVsZCB7
IG5hbWU6IFwiZm9vXCIgbnVtYmVyOiAxIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9J
TlQzMiB9IgotICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZvby5mb286IE5BTUU6IE1lc3Nh
Z2VTZXRzIGNhbm5vdCBoYXZlIGZpZWxkcywgb25seSAiCi0gICAgICAiZXh0ZW5zaW9ucy5cbiIp
OwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgTmVnYXRpdmVFeHRlbnNpb25SYW5n
ZU51bWJlcikgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90
b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAi
ICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDogLTEwIGVuZDogLTEgfSIKLSAgICAifSIsCi0KLSAg
ICAiZm9vLnByb3RvOiBGb286IE5VTUJFUjogRXh0ZW5zaW9uIG51bWJlcnMgbXVzdCBiZSBwb3Np
dGl2ZSBpbnRlZ2Vycy5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgSHVn
ZUV4dGVuc2lvblJhbmdlTnVtYmVyKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5h
bWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBc
IkZvb1wiIgotICAgICIgIGV4dGVuc2lvbl9yYW5nZSB7IHN0YXJ0OiAxIGVuZDogMHg3MDAwMDAw
MCB9IgotICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZvbzogTlVNQkVSOiBFeHRlbnNpb24g
bnVtYmVycyBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuICIKLSAgICAgICI1MzY4NzA5MTEuXG4iKTsK
LX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEV4dGVuc2lvblJhbmdlRW5kQmVmb3Jl
U3RhcnQpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9c
IiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAg
ZXh0ZW5zaW9uX3JhbmdlIHsgc3RhcnQ6IDEwIGVuZDogMTAgfSIKLSAgICAiICBleHRlbnNpb25f
cmFuZ2UgeyBzdGFydDogMTAgZW5kOiA1IH0iCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90bzog
Rm9vOiBOVU1CRVI6IEV4dGVuc2lvbiByYW5nZSBlbmQgbnVtYmVyIG11c3QgYmUgZ3JlYXRlciB0
aGFuICIKLSAgICAgICJzdGFydCBudW1iZXIuXG4iCi0gICAgImZvby5wcm90bzogRm9vOiBOVU1C
RVI6IEV4dGVuc2lvbiByYW5nZSBlbmQgbnVtYmVyIG11c3QgYmUgZ3JlYXRlciB0aGFuICIKLSAg
ICAgICJzdGFydCBudW1iZXIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3Qs
IEVtcHR5RW51bSkgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5w
cm90b1wiICIKLSAgICAiZW51bV90eXBlIHsgbmFtZTogXCJGb29cIiB9IgotICAgIC8vIEFsc28g
dXNlIHRoZSBlbXB0eSBlbnVtIGluIGEgbWVzc2FnZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5v
IGNyYXNoZXMKLSAgICAvLyBkdXJpbmcgdmFsaWRhdGlvbiAocG9zc2libGUgaWYgdGhlIGNvZGUg
YXR0ZW1wdHMgdG8gZGVyaXZlIGEgZGVmYXVsdAotICAgIC8vIHZhbHVlIGZvciB0aGUgZmllbGQp
LgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkJhclwiIgotICAgICIgIGZp
ZWxkIHsgbmFtZTogXCJmb29cIiBudW1iZXI6IDEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZV9u
YW1lOlwiRm9vXCIgfSIKLSAgICAiICBmaWVsZCB7IG5hbWU6IFwiYmFyXCIgbnVtYmVyOiAyIGxh
YmVsOkxBQkVMX09QVElPTkFMIHR5cGVfbmFtZTpcIkZvb1wiICIKLSAgICAiICAgICAgICAgIGRl
ZmF1bHRfdmFsdWU6IFwiTk9fU1VDSF9WQUxVRVwiIH0iCi0gICAgIn0iLAotCi0gICAgImZvby5w
cm90bzogRm9vOiBOQU1FOiBFbnVtcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHZhbHVlLlxu
IgotICAgICJmb28ucHJvdG86IEJhci5iYXI6IERFRkFVTFRfVkFMVUU6IEVudW0gdHlwZSBcIkZv
b1wiIGhhcyBubyB2YWx1ZSBuYW1lZCAiCi0gICAgICAiXCJOT19TVUNIX1ZBTFVFXCIuXG4iKTsK
LX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFVuZGVmaW5lZEV4dGVuZGVlKSB7Ci0g
IEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJt
ZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvb1wiIgotICAgICIgIGV4dGVuc2lvbiB7
IG5hbWU6XCJmb29cIiBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5U
MzIiCi0gICAgIiAgICAgICAgICAgICAgZXh0ZW5kZWU6IFwiQmFyXCIgfSIKLSAgICAifSIsCi0K
LSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBFWFRFTkRFRTogXCJCYXJcIiBpcyBub3QgZGVmaW5l
ZC5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgTm9uTWVzc2FnZUV4dGVu
ZGVlKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIg
IgotICAgICJlbnVtX3R5cGUgeyBuYW1lOiBcIkJhclwiIHZhbHVlIHsgbmFtZTpcIkRVTU1ZXCIg
bnVtYmVyOjAgfSB9IgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvb1wi
IgotICAgICIgIGV4dGVuc2lvbiB7IG5hbWU6XCJmb29cIiBudW1iZXI6MSBsYWJlbDpMQUJFTF9P
UFRJT05BTCB0eXBlOlRZUEVfSU5UMzIiCi0gICAgIiAgICAgICAgICAgICAgZXh0ZW5kZWU6IFwi
QmFyXCIgfSIKLSAgICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBFWFRFTkRFRTog
XCJCYXJcIiBpcyBub3QgYSBtZXNzYWdlIHR5cGUuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRp
b25FcnJvclRlc3QsIE5vdEFuRXh0ZW5zaW9uTnVtYmVyKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJv
cnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAg
ICAiICBuYW1lOiBcIkJhclwiIgotICAgICJ9IgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAi
ICBuYW1lOiBcIkZvb1wiIgotICAgICIgIGV4dGVuc2lvbiB7IG5hbWU6XCJmb29cIiBudW1iZXI6
MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIiCi0gICAgIiAgICAgICAgICAg
ICAgZXh0ZW5kZWU6IFwiQmFyXCIgfSIKLSAgICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBGb28u
Zm9vOiBOVU1CRVI6IFwiQmFyXCIgZG9lcyBub3QgZGVjbGFyZSAxIGFzIGFuIGV4dGVuc2lvbiAi
Ci0gICAgICAibnVtYmVyLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBS
ZXF1aXJlZEV4dGVuc2lvbikgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBc
ImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJCYXJc
IiIKLSAgICAiICBleHRlbnNpb25fcmFuZ2UgeyBzdGFydDogMTAwMCBlbmQ6IDEwMDAwIH0iCi0g
ICAgIn0iCi0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiRm9vXCIiCi0gICAg
IiAgZXh0ZW5zaW9uIHsiCi0gICAgIiAgICBuYW1lOlwiZm9vXCIiCi0gICAgIiAgICBudW1iZXI6
MTAwMCIKLSAgICAiICAgIGxhYmVsOkxBQkVMX1JFUVVJUkVEIgotICAgICIgICAgdHlwZTpUWVBF
X0lOVDMyIgotICAgICIgICAgZXh0ZW5kZWU6IFwiQmFyXCIiCi0gICAgIiAgfSIKLSAgICAifSIs
Ci0KLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBFOiBNZXNzYWdlIGV4dGVuc2lvbnMgY2Fu
bm90IGhhdmUgcmVxdWlyZWQgIgotICAgICJmaWVsZHMuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlk
YXRpb25FcnJvclRlc3QsIFVuZGVmaW5lZEZpZWxkVHlwZSkgewotICBCdWlsZEZpbGVXaXRoRXJy
b3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0g
ICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJmb29cIiBudW1iZXI6
MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlX25hbWU6XCJCYXJcIiB9IgotICAgICJ9IiwKLQot
ICAgICJmb28ucHJvdG86IEZvby5mb286IFRZUEU6IFwiQmFyXCIgaXMgbm90IGRlZmluZWQuXG4i
KTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFVuZGVmaW5lZEZpZWxkVHlwZVdp
dGhEZWZhdWx0KSB7Ci0gIC8vIFNlZSBiLzEyNTMzNTgyLiBQcmV2aW91c2x5IHRoaXMgZmFpbGVk
IGJlY2F1c2UgdGhlIGRlZmF1bHQgdmFsdWUgd2FzIG5vdAotICAvLyBhY2NlcHRlZCBieSB0aGUg
cGFyc2VyLCB3aGljaCBhc3N1bWVkIGFuIGVudW0gdHlwZSwgbGVhZGluZyB0byBhbiB1bmNsZWFy
Ci0gIC8vIGVycm9yIG1lc3NhZ2UuIFdlIHdhbnQgdGhpcyBpbnB1dCB0byB5aWVsZCBhIHZhbGlk
YXRpb24gZXJyb3IgaW5zdGVhZCwKLSAgLy8gc2luY2UgdGhlIHVua25vd24gdHlwZSBpcyB0aGUg
cHJpbWFyeSBwcm9ibGVtLgotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZv
by5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIK
LSAgICAiICBmaWVsZCB7IG5hbWU6XCJmb29cIiBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05B
TCB0eXBlX25hbWU6XCJpbnRcIiAiCi0gICAgIiAgICAgICAgICBkZWZhdWx0X3ZhbHVlOlwiMVwi
IH0iCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90bzogRm9vLmZvbzogVFlQRTogXCJpbnRcIiBp
cyBub3QgZGVmaW5lZC5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgVW5k
ZWZpbmVkTmVzdGVkRmllbGRUeXBlKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5h
bWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBc
IkZvb1wiIgotICAgICIgIG5lc3RlZF90eXBlIHsgbmFtZTpcIkJhelwiIH0iCi0gICAgIiAgZmll
bGQgeyBuYW1lOlwiZm9vXCIgbnVtYmVyOjEiCi0gICAgIiAgICAgICAgICBsYWJlbDpMQUJFTF9P
UFRJT05BTCIKLSAgICAiICAgICAgICAgIHR5cGVfbmFtZTpcIkZvby5CYXouQmFyXCIgfSIKLSAg
ICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBFOiBcIkZvby5CYXouQmFyXCIg
aXMgbm90IGRlZmluZWQuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEZp
ZWxkVHlwZURlZmluZWRJblVuZGVjbGFyZWREZXBlbmRlbmN5KSB7Ci0gIEJ1aWxkRmlsZSgKLSAg
ICAibmFtZTogXCJiYXIucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6IFwiQmFy
XCIgfSAiKTsKLQotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90
b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAi
ICBmaWVsZCB7IG5hbWU6XCJmb29cIiBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBl
X25hbWU6XCJCYXJcIiB9IgotICAgICJ9IiwKLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBF
OiBcIkJhclwiIHNlZW1zIHRvIGJlIGRlZmluZWQgaW4gXCJiYXIucHJvdG9cIiwgIgotICAgICAg
IndoaWNoIGlzIG5vdCBpbXBvcnRlZCBieSBcImZvby5wcm90b1wiLiAgVG8gdXNlIGl0IGhlcmUs
IHBsZWFzZSBhZGQgdGhlICIKLSAgICAgICJuZWNlc3NhcnkgaW1wb3J0LlxuIik7Ci19Ci0KLVRF
U1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBGaWVsZFR5cGVEZWZpbmVkSW5JbmRpcmVjdERlcGVu
ZGVuY3kpIHsKLSAgLy8gVGVzdCBmb3IgaGlkZGVuIGRlcGVuZGVuY2llcy4KLSAgLy8KLSAgLy8g
Ly8gYmFyLnByb3RvCi0gIC8vIG1lc3NhZ2UgQmFye30KLSAgLy8KLSAgLy8gLy8gZm9yd2FyZC5w
cm90bwotICAvLyBpbXBvcnQgImJhci5wcm90byIKLSAgLy8KLSAgLy8gLy8gZm9vLnByb3RvCi0g
IC8vIGltcG9ydCAiZm9yd2FyZC5wcm90byIKLSAgLy8gbWVzc2FnZSBGb28gewotICAvLyAgIG9w
dGlvbmFsIEJhciBmb28gPSAxOyAgLy8gRXJyb3IsIG5lZWRzIHRvIGltcG9ydCBiYXIucHJvdG8g
ZXhwbGljaXRseS4KLSAgLy8gfQotICAvLwotICBCdWlsZEZpbGUoCi0gICAgIm5hbWU6IFwiYmFy
LnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyBuYW1lOiBcIkJhclwiIH0iKTsKLQotICBC
dWlsZEZpbGUoCi0gICAgIm5hbWU6IFwiZm9yd2FyZC5wcm90b1wiIgotICAgICJkZXBlbmRlbmN5
OiBcImJhci5wcm90b1wiIik7Ci0KLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTog
XCJmb28ucHJvdG9cIiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZm9yd2FyZC5wcm90b1wiICIKLSAg
ICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBmaWVsZCB7
IG5hbWU6XCJmb29cIiBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlX25hbWU6XCJC
YXJcIiB9IgotICAgICJ9IiwKLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBFOiBcIkJhclwi
IHNlZW1zIHRvIGJlIGRlZmluZWQgaW4gXCJiYXIucHJvdG9cIiwgIgotICAgICAgIndoaWNoIGlz
IG5vdCBpbXBvcnRlZCBieSBcImZvby5wcm90b1wiLiAgVG8gdXNlIGl0IGhlcmUsIHBsZWFzZSBh
ZGQgdGhlICIKLSAgICAgICJuZWNlc3NhcnkgaW1wb3J0LlxuIik7Ci19Ci0KLVRFU1RfRihWYWxp
ZGF0aW9uRXJyb3JUZXN0LCBGaWVsZFR5cGVEZWZpbmVkSW5QdWJsaWNEZXBlbmRlbmN5KSB7Ci0g
IC8vIFRlc3QgZm9yIHB1YmxpYyBkZXBlbmRlbmNpZXMuCi0gIC8vCi0gIC8vIC8vIGJhci5wcm90
bwotICAvLyBtZXNzYWdlIEJhcnt9Ci0gIC8vCi0gIC8vIC8vIGZvcndhcmQucHJvdG8KLSAgLy8g
aW1wb3J0IHB1YmxpYyAiYmFyLnByb3RvIgotICAvLwotICAvLyAvLyBmb28ucHJvdG8KLSAgLy8g
aW1wb3J0ICJmb3J3YXJkLnByb3RvIgotICAvLyBtZXNzYWdlIEZvbyB7Ci0gIC8vICAgb3B0aW9u
YWwgQmFyIGZvbyA9IDE7ICAvLyBDb3JyZWN0LiAiYmFyLnByb3RvIiBpcyBwdWJsaWMgaW1wb3J0
ZWQgaW50bwotICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yd2FyZC5wcm90bywg
c28gd2hlbiAiZm9vLnByb3RvIiBpbXBvcnRzCi0gIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAiZm9yd2FyZC5wcm90byIsIGl0IGltcG9ydHMgImJhci5wcm90byIgdG9vLgotICAvLyB9
Ci0gIC8vCi0gIEJ1aWxkRmlsZSgKLSAgICAibmFtZTogXCJiYXIucHJvdG9cIiAiCi0gICAgIm1l
c3NhZ2VfdHlwZSB7IG5hbWU6IFwiQmFyXCIgfSIpOwotCi0gIEJ1aWxkRmlsZSgKLSAgICAibmFt
ZTogXCJmb3J3YXJkLnByb3RvXCIiCi0gICAgImRlcGVuZGVuY3k6IFwiYmFyLnByb3RvXCIgIgot
ICAgICJwdWJsaWNfZGVwZW5kZW5jeTogMCIpOwotCi0gIEJ1aWxkRmlsZSgKLSAgICAibmFtZTog
XCJmb28ucHJvdG9cIiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZm9yd2FyZC5wcm90b1wiICIKLSAg
ICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBmaWVsZCB7
IG5hbWU6XCJmb29cIiBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlX25hbWU6XCJC
YXJcIiB9IgotICAgICJ9Iik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBGaWVs
ZFR5cGVEZWZpbmVkSW5UcmFuc2l0aXZlUHVibGljRGVwZW5kZW5jeSkgewotICAvLyBUZXN0IGZv
ciBwdWJsaWMgZGVwZW5kZW5jaWVzLgotICAvLwotICAvLyAvLyBiYXIucHJvdG8KLSAgLy8gbWVz
c2FnZSBCYXJ7fQotICAvLwotICAvLyAvLyBmb3J3YXJkLnByb3RvCi0gIC8vIGltcG9ydCBwdWJs
aWMgImJhci5wcm90byIKLSAgLy8KLSAgLy8gLy8gZm9yd2FyZDIucHJvdG8KLSAgLy8gaW1wb3J0
IHB1YmxpYyAiZm9yd2FyZC5wcm90byIKLSAgLy8KLSAgLy8gLy8gZm9vLnByb3RvCi0gIC8vIGlt
cG9ydCAiZm9yd2FyZDIucHJvdG8iCi0gIC8vIG1lc3NhZ2UgRm9vIHsKLSAgLy8gICBvcHRpb25h
bCBCYXIgZm9vID0gMTsgIC8vIENvcnJlY3QsIHB1YmxpYyBpbXBvcnRzIGFyZSB0cmFuc2l0aXZl
LgotICAvLyB9Ci0gIC8vCi0gIEJ1aWxkRmlsZSgKLSAgICAibmFtZTogXCJiYXIucHJvdG9cIiAi
Ci0gICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6IFwiQmFyXCIgfSIpOwotCi0gIEJ1aWxkRmlsZSgK
LSAgICAibmFtZTogXCJmb3J3YXJkLnByb3RvXCIiCi0gICAgImRlcGVuZGVuY3k6IFwiYmFyLnBy
b3RvXCIgIgotICAgICJwdWJsaWNfZGVwZW5kZW5jeTogMCIpOwotCi0gIEJ1aWxkRmlsZSgKLSAg
ICAibmFtZTogXCJmb3J3YXJkMi5wcm90b1wiIgotICAgICJkZXBlbmRlbmN5OiBcImZvcndhcmQu
cHJvdG9cIiAiCi0gICAgInB1YmxpY19kZXBlbmRlbmN5OiAwIik7Ci0KLSAgQnVpbGRGaWxlKAot
ICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAiZGVwZW5kZW5jeTogXCJmb3J3YXJkMi5w
cm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAg
ICAiICBmaWVsZCB7IG5hbWU6XCJmb29cIiBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0
eXBlX25hbWU6XCJCYXJcIiB9IgotICAgICJ9Iik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJy
b3JUZXN0LAotICAgICAgIEZpZWxkVHlwZURlZmluZWRJblByaXZhdGVEZXBlbmRlbmN5T2ZQdWJs
aWNEZXBlbmRlbmN5KSB7Ci0gIC8vIFRlc3QgZm9yIHB1YmxpYyBkZXBlbmRlbmNpZXMuCi0gIC8v
Ci0gIC8vIC8vIGJhci5wcm90bwotICAvLyBtZXNzYWdlIEJhcnt9Ci0gIC8vCi0gIC8vIC8vIGZv
cndhcmQucHJvdG8KLSAgLy8gaW1wb3J0ICJiYXIucHJvdG8iCi0gIC8vCi0gIC8vIC8vIGZvcndh
cmQyLnByb3RvCi0gIC8vIGltcG9ydCBwdWJsaWMgImZvcndhcmQucHJvdG8iCi0gIC8vCi0gIC8v
IC8vIGZvby5wcm90bwotICAvLyBpbXBvcnQgImZvcndhcmQyLnByb3RvIgotICAvLyBtZXNzYWdl
IEZvbyB7Ci0gIC8vICAgb3B0aW9uYWwgQmFyIGZvbyA9IDE7ICAvLyBFcnJvciwgdGhlICJiYXIu
cHJvdG8iIGlzIG5vdCBwdWJsaWMgaW1wb3J0ZWQKLSAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGludG8gImZvcndhcmQucHJvdG8iLCBzbyB3aWxsIG5vdCBiZSBpbXBvcnRlZAotICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50byBlaXRoZXIgImZvcndhcmQyLnByb3Rv
IiBvciAiZm9vLnByb3RvIi4KLSAgLy8gfQotICAvLwotICBCdWlsZEZpbGUoCi0gICAgIm5hbWU6
IFwiYmFyLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyBuYW1lOiBcIkJhclwiIH0iKTsK
LQotICBCdWlsZEZpbGUoCi0gICAgIm5hbWU6IFwiZm9yd2FyZC5wcm90b1wiIgotICAgICJkZXBl
bmRlbmN5OiBcImJhci5wcm90b1wiIik7Ci0KLSAgQnVpbGRGaWxlKAotICAgICJuYW1lOiBcImZv
cndhcmQyLnByb3RvXCIiCi0gICAgImRlcGVuZGVuY3k6IFwiZm9yd2FyZC5wcm90b1wiICIKLSAg
ICAicHVibGljX2RlcGVuZGVuY3k6IDAiKTsKLQotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAg
ICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAiZGVwZW5kZW5jeTogXCJmb3J3YXJkMi5wcm90
b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAi
ICBmaWVsZCB7IG5hbWU6XCJmb29cIiBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBl
X25hbWU6XCJCYXJcIiB9IgotICAgICJ9IiwKLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBF
OiBcIkJhclwiIHNlZW1zIHRvIGJlIGRlZmluZWQgaW4gXCJiYXIucHJvdG9cIiwgIgotICAgICAg
IndoaWNoIGlzIG5vdCBpbXBvcnRlZCBieSBcImZvby5wcm90b1wiLiAgVG8gdXNlIGl0IGhlcmUs
IHBsZWFzZSBhZGQgdGhlICIKLSAgICAgICJuZWNlc3NhcnkgaW1wb3J0LlxuIik7Ci19Ci0KLQot
VEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFNlYXJjaE1vc3RMb2NhbEZpcnN0KSB7Ci0gIC8v
IFRoZSBmb2xsb3dpbmcgc2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IgdGhhdCBCYXIuQmF6IGlzIHJl
c29sdmVkIGJ1dAotICAvLyBub3QgZGVmaW5lZDoKLSAgLy8gICBtZXNzYWdlIEJhciB7IG1lc3Nh
Z2UgQmF6IHt9IH0KLSAgLy8gICBtZXNzYWdlIEZvbyB7Ci0gIC8vICAgICBtZXNzYWdlIEJhciB7
Ci0gIC8vICAgICAgIC8vIFBsYWNpbmcgIm1lc3NhZ2UgQmF6e30iIGhlcmUsIG9yIHJlbW92aW5n
IEZvby5CYXIgYWx0b2dldGhlciwKLSAgLy8gICAgICAgLy8gd291bGQgZml4IHRoZSBlcnJvci4K
LSAgLy8gICAgIH0KLSAgLy8gICAgIG9wdGlvbmFsIEJhci5CYXogYmF6ID0gMTsKLSAgLy8gICB9
Ci0gIC8vIEFuIG9uZSBwb2ludCB0aGUgbG9va3VwIGNvZGUgaW5jb3JyZWN0bHkgZGlkIG5vdCBw
cm9kdWNlIGFuIGVycm9yIGluIHRoaXMKLSAgLy8gY2FzZSwgYmVjYXVzZSB3aGVuIGxvb2tpbmcg
Zm9yIEJhci5CYXosIGl0IHdvdWxkIHRyeSAiRm9vLkJhci5CYXoiIGZpcnN0LAotICAvLyBmYWls
LCBhbmQgdGVuIHRyeSAiQmFyLkJheiIgYW5kIHN1Y2NlZWQsIGV2ZW4gdGhvdWdoICJCYXIiIHNo
b3VsZCBhY3R1YWxseQotICAvLyByZWZlciB0byB0aGUgaW5uZXIgQmFyLCBub3QgdGhlIG91dGVy
IG9uZS4KLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAi
Ci0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiQmFyXCIiCi0gICAgIiAgbmVz
dGVkX3R5cGUgeyBuYW1lOiBcIkJhelwiIH0iCi0gICAgIn0iCi0gICAgIm1lc3NhZ2VfdHlwZSB7
IgotICAgICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAgbmVzdGVkX3R5cGUgeyBuYW1lOiBcIkJh
clwiIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiYmF6XCIgbnVtYmVyOjEgbGFiZWw6TEFCRUxf
T1BUSU9OQUwiCi0gICAgIiAgICAgICAgICB0eXBlX25hbWU6XCJCYXIuQmF6XCIgfSIKLSAgICAi
fSIsCi0KLSAgICAiZm9vLnByb3RvOiBGb28uYmF6OiBUWVBFOiBcIkJhci5CYXpcIiBpcyByZXNv
bHZlZCB0byBcIkZvby5CYXIuQmF6XCIsIgotICAgICIgd2hpY2ggaXMgbm90IGRlZmluZWQuIFRo
ZSBpbm5lcm1vc3Qgc2NvcGUgaXMgc2VhcmNoZWQgZmlyc3QgaW4gbmFtZSAiCi0gICAgInJlc29s
dXRpb24uIENvbnNpZGVyIHVzaW5nIGEgbGVhZGluZyAnLicoaS5lLiwgXCIuQmFyLkJhelwiKSB0
byBzdGFydCAiCi0gICAgImZyb20gdGhlIG91dGVybW9zdCBzY29wZS5cbiIpOwotfQotCi1URVNU
X0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgU2VhcmNoTW9zdExvY2FsRmlyc3QyKSB7Ci0gIC8vIFRo
aXMgdGVzdCB3b3VsZCBmaW5kIHRoZSBtb3N0IGxvY2FsICJCYXIiIGZpcnN0LCBhbmQgZG9lcywg
YnV0Ci0gIC8vIHByb2NlZWRzIHRvIGZpbmQgdGhlIG91dGVyIG9uZSBiZWNhdXNlIHRoZSBpbm5l
ciBvbmUncyBub3QgYW4KLSAgLy8gYWdncmVnYXRlLgotICBCdWlsZEZpbGUoCi0gICAgIm5hbWU6
IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkJh
clwiIgotICAgICIgIG5lc3RlZF90eXBlIHsgbmFtZTogXCJCYXpcIiB9IgotICAgICJ9IgotICAg
ICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvb1wiIgotICAgICIgIGZpZWxkIHsg
bmFtZTogXCJCYXJcIiBudW1iZXI6MSB0eXBlOlRZUEVfQllURVMgfSAiCi0gICAgIiAgZmllbGQg
eyBuYW1lOlwiYmF6XCIgbnVtYmVyOjIgbGFiZWw6TEFCRUxfT1BUSU9OQUwiCi0gICAgIiAgICAg
ICAgICB0eXBlX25hbWU6XCJCYXIuQmF6XCIgfSIKLSAgICAifSIpOwotfQotCi1URVNUX0YoVmFs
aWRhdGlvbkVycm9yVGVzdCwgUGFja2FnZU9yaWdpbmFsbHlEZWNsYXJlZEluVHJhbnNpdGl2ZURl
cGVuZGVudCkgewotICAvLyBJbWFnaW5lIHdlIGhhdmUgdGhlIGZvbGxvd2luZzoKLSAgLy8KLSAg
Ly8gZm9vLnByb3RvOgotICAvLyAgIHBhY2thZ2UgZm9vLmJhcjsKLSAgLy8gYmFyLnByb3RvOgot
ICAvLyAgIHBhY2thZ2UgZm9vLmJhcjsKLSAgLy8gICBpbXBvcnQgImZvby5wcm90byI7Ci0gIC8v
ICAgbWVzc2FnZSBCYXIge30KLSAgLy8gYmF6LnByb3RvOgotICAvLyAgIHBhY2thZ2UgZm9vOwot
ICAvLyAgIGltcG9ydCAiYmFyLnByb3RvIgotICAvLyAgIG1lc3NhZ2UgQmF6IHsgb3B0aW9uYWwg
YmFyLkJhciBxdXggPSAxOyB9Ci0gIC8vCi0gIC8vIFdoZW4gdmFsaWRhdGluZyBiYXoucHJvdG8s
IHdlIHdpbGwgbG9vayB1cCAiYmFyLkJhciIuICBBcyBwYXJ0IG9mIHRoaXMKLSAgLy8gbG9va3Vw
LCB3ZSBmaXJzdCBsb29rdXAgImJhciIgdGhlbiB0cnkgdG8gZmluZCAiQmFyIiB3aXRoaW4gaXQu
ICAiYmFyIgotICAvLyBzaG91bGQgcmVzb2x2ZSB0byAiZm9vLmJhciIuICBOb3RlLCB0aG91Z2gs
IHRoYXQgImZvby5iYXIiIHdhcyBvcmlnaW5hbGx5Ci0gIC8vIGRlZmluZWQgaW4gZm9vLnByb3Rv
LCB3aGljaCBpcyBub3QgYSBkaXJlY3QgZGVwZW5kZW5jeSBvZiBiYXoucHJvdG8uICBUaGUKLSAg
Ly8gaW1wbGVtZW50YXRpb24gb2YgRmluZFN5bWJvbCgpIG5vcm1hbGx5IG9ubHkgcmV0dXJucyBz
eW1ib2xzIGluIGRpcmVjdAotICAvLyBkZXBlbmRlbmNpZXMsIG5vdCBpbmRpcmVjdCBvbmVzLiAg
VGhpcyB0ZXN0IGluc3VyZXMgdGhhdCB0aGlzIGRvZXMgbm90Ci0gIC8vIHByZXZlbnQgaXQgZnJv
bSBmaW5kaW5nICJmb28uYmFyIi4KLQotICBCdWlsZEZpbGUoCi0gICAgIm5hbWU6IFwiZm9vLnBy
b3RvXCIgIgotICAgICJwYWNrYWdlOiBcImZvby5iYXJcIiAiKTsKLSAgQnVpbGRGaWxlKAotICAg
ICJuYW1lOiBcImJhci5wcm90b1wiICIKLSAgICAicGFja2FnZTogXCJmb28uYmFyXCIgIgotICAg
ICJkZXBlbmRlbmN5OiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsgbmFtZTog
XCJCYXJcIiB9Iik7Ci0gIEJ1aWxkRmlsZSgKLSAgICAibmFtZTogXCJiYXoucHJvdG9cIiAiCi0g
ICAgInBhY2thZ2U6IFwiZm9vXCIgIgotICAgICJkZXBlbmRlbmN5OiBcImJhci5wcm90b1wiICIK
LSAgICAibWVzc2FnZV90eXBlIHsgIgotICAgICIgIG5hbWU6IFwiQmF6XCIgIgotICAgICIgIGZp
ZWxkIHsgbmFtZTpcInF1eFwiIG51bWJlcjoxIGxhYmVsOkxBQkVMX09QVElPTkFMICIKLSAgICAi
ICAgICAgICAgIHR5cGVfbmFtZTpcImJhci5CYXJcIiB9IgotICAgICJ9Iik7Ci19Ci0KLVRFU1Rf
RihWYWxpZGF0aW9uRXJyb3JUZXN0LCBGaWVsZFR5cGVOb3RBVHlwZSkgewotICBCdWlsZEZpbGVX
aXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBl
IHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJmb29cIiBu
dW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCAiCi0gICAgIiAgICAgICAgICB0eXBlX25hbWU6
XCIuRm9vLmJhclwiIH0iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiYmFyXCIgbnVtYmVyOjIgbGFi
ZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIH0iCi0gICAgIn0iLAotCi0gICAgImZv
by5wcm90bzogRm9vLmZvbzogVFlQRTogXCIuRm9vLmJhclwiIGlzIG5vdCBhIHR5cGUuXG4iKTsK
LX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFJlbGF0aXZlRmllbGRUeXBlTm90QVR5
cGUpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAi
Ci0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5lc3RlZF90eXBlIHsiCi0gICAgIiAgICBu
YW1lOiBcIkJhclwiIgotICAgICIgICAgZmllbGQgeyBuYW1lOlwiQmF6XCIgbnVtYmVyOjIgbGFi
ZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIH0iCi0gICAgIiAgfSIKLSAgICAiICBu
YW1lOiBcIkZvb1wiIgotICAgICIgIGZpZWxkIHsgbmFtZTpcImZvb1wiIG51bWJlcjoxIGxhYmVs
OkxBQkVMX09QVElPTkFMICIKLSAgICAiICAgICAgICAgIHR5cGVfbmFtZTpcIkJhci5CYXpcIiB9
IgotICAgICJ9IiwKLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBFOiBcIkJhci5CYXpcIiBp
cyBub3QgYSB0eXBlLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBGaWVs
ZFR5cGVNYXlCZUl0c05hbWUpIHsKLSAgQnVpbGRGaWxlKAotICAgICJuYW1lOiBcImZvby5wcm90
b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJCYXJcIiIKLSAgICAi
fSIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTogXCJGb29cIiIKLSAgICAiICBm
aWVsZCB7IG5hbWU6XCJCYXJcIiBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlX25h
bWU6XCJCYXJcIiB9IgotICAgICJ9Iik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0
LCBFbnVtRmllbGRUeXBlSXNNZXNzYWdlKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAg
Im5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyBuYW1lOiBcIkJhclwi
IH0gIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvb1wiIgotICAgICIg
IGZpZWxkIHsgbmFtZTpcImZvb1wiIG51bWJlcjoxIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6
VFlQRV9FTlVNIgotICAgICIgICAgICAgICAgdHlwZV9uYW1lOlwiQmFyXCIgfSIKLSAgICAifSIs
Ci0KLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBFOiBcIkJhclwiIGlzIG5vdCBhbiBlbnVt
IHR5cGUuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1lc3NhZ2VGaWVs
ZFR5cGVJc0VudW0pIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28u
cHJvdG9cIiAiCi0gICAgImVudW1fdHlwZSB7IG5hbWU6IFwiQmFyXCIgdmFsdWUgeyBuYW1lOlwi
RFVNTVlcIiBudW1iZXI6MCB9IH0gIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1l
OiBcIkZvb1wiIgotICAgICIgIGZpZWxkIHsgbmFtZTpcImZvb1wiIG51bWJlcjoxIGxhYmVsOkxB
QkVMX09QVElPTkFMIHR5cGU6VFlQRV9NRVNTQUdFIgotICAgICIgICAgICAgICAgdHlwZV9uYW1l
OlwiQmFyXCIgfSIKLSAgICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBFOiBc
IkJhclwiIGlzIG5vdCBhIG1lc3NhZ2UgdHlwZS5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlv
bkVycm9yVGVzdCwgQmFkRW51bURlZmF1bHRWYWx1ZSkgewotICBCdWlsZEZpbGVXaXRoRXJyb3Jz
KAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAiZW51bV90eXBlIHsgbmFtZTogXCJC
YXJcIiB2YWx1ZSB7IG5hbWU6XCJEVU1NWVwiIG51bWJlcjowIH0gfSAiCi0gICAgIm1lc3NhZ2Vf
dHlwZSB7IgotICAgICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9v
XCIgbnVtYmVyOjEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZV9uYW1lOlwiQmFyXCIiCi0gICAg
IiAgICAgICAgICBkZWZhdWx0X3ZhbHVlOlwiTk9fU1VDSF9WQUxVRVwiIH0iCi0gICAgIn0iLAot
Ci0gICAgImZvby5wcm90bzogRm9vLmZvbzogREVGQVVMVF9WQUxVRTogRW51bSB0eXBlIFwiQmFy
XCIgaGFzIG5vIHZhbHVlIG5hbWVkICIKLSAgICAgICJcIk5PX1NVQ0hfVkFMVUVcIi5cbiIpOwot
fQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgRW51bURlZmF1bHRWYWx1ZUlzSW50ZWdl
cikgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIK
LSAgICAiZW51bV90eXBlIHsgbmFtZTogXCJCYXJcIiB2YWx1ZSB7IG5hbWU6XCJEVU1NWVwiIG51
bWJlcjowIH0gfSAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICIgIG5hbWU6IFwiRm9vXCIi
Ci0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbnVtYmVyOjEgbGFiZWw6TEFCRUxfT1BUSU9O
QUwgdHlwZV9uYW1lOlwiQmFyXCIiCi0gICAgIiAgICAgICAgICBkZWZhdWx0X3ZhbHVlOlwiMFwi
IH0iCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90bzogRm9vLmZvbzogREVGQVVMVF9WQUxVRTog
RGVmYXVsdCB2YWx1ZSBmb3IgYW4gZW51bSBmaWVsZCBtdXN0ICIKLSAgICAiYmUgYW4gaWRlbnRp
Zmllci5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgUHJpbWl0aXZlV2l0
aFR5cGVOYW1lKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnBy
b3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvb1wiIgotICAg
ICIgIGZpZWxkIHsgbmFtZTpcImZvb1wiIG51bWJlcjoxIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5
cGU6VFlQRV9JTlQzMiIKLSAgICAiICAgICAgICAgIHR5cGVfbmFtZTpcIkZvb1wiIH0iCi0gICAg
In0iLAotCi0gICAgImZvby5wcm90bzogRm9vLmZvbzogVFlQRTogRmllbGQgd2l0aCBwcmltaXRp
dmUgdHlwZSBoYXMgdHlwZV9uYW1lLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JU
ZXN0LCBOb25QcmltaXRpdmVXaXRob3V0VHlwZU5hbWUpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9y
cygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAg
ICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbnVtYmVyOjEg
bGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX01FU1NBR0UgfSIKLSAgICAifSIsCi0KLSAg
ICAiZm9vLnByb3RvOiBGb28uZm9vOiBUWVBFOiBGaWVsZCB3aXRoIG1lc3NhZ2Ugb3IgZW51bSB0
eXBlIG1pc3NpbmcgIgotICAgICAgInR5cGVfbmFtZS5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRh
dGlvbkVycm9yVGVzdCwgT25lb2ZXaXRoTm9GaWVsZHMpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9y
cygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IgotICAg
ICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAgb25lb2ZfZGVjbCB7IG5hbWU6XCJiYXJcIiB9Igot
ICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZvby5iYXI6IE5BTUU6IE9uZW9mIG11c3QgaGF2
ZSBhdCBsZWFzdCBvbmUgZmllbGQuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRl
c3QsIE9uZW9mTGFiZWxNaXNtYXRjaCkgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJu
YW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsiCi0gICAgIiAgbmFtZTog
XCJGb29cIiIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJmb29cIiBudW1iZXI6MSBsYWJlbDpMQUJF
TF9SRVBFQVRFRCB0eXBlOlRZUEVfSU5UMzIgIgotICAgICIgICAgICAgICAgb25lb2ZfaW5kZXg6
MCB9IgotICAgICIgIG9uZW9mX2RlY2wgeyBuYW1lOlwiYmFyXCIgfSIKLSAgICAifSIsCi0KLSAg
ICAiZm9vLnByb3RvOiBGb28uZm9vOiBOQU1FOiBGaWVsZHMgb2Ygb25lb2ZzIG11c3QgdGhlbXNl
bHZlcyBoYXZlIGxhYmVsICIKLSAgICAgICJMQUJFTF9PUFRJT05BTC5cbiIpOwotfQotCi1URVNU
X0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgSW5wdXRUeXBlTm90RGVmaW5lZCkgewotICBCdWlsZEZp
bGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90
eXBlIHsgbmFtZTogXCJGb29cIiB9ICIKLSAgICAic2VydmljZSB7IgotICAgICIgIG5hbWU6IFwi
VGVzdFNlcnZpY2VcIiIKLSAgICAiICBtZXRob2QgeyBuYW1lOiBcIkFcIiBpbnB1dF90eXBlOiBc
IkJhclwiIG91dHB1dF90eXBlOiBcIkZvb1wiIH0iCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90
bzogVGVzdFNlcnZpY2UuQTogSU5QVVRfVFlQRTogXCJCYXJcIiBpcyBub3QgZGVmaW5lZC5cbiIK
LSAgICApOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgSW5wdXRUeXBlTm90QU1l
c3NhZ2UpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9c
IiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6IFwiRm9vXCIgfSAiCi0gICAgImVudW1fdHlw
ZSB7IG5hbWU6IFwiQmFyXCIgdmFsdWUgeyBuYW1lOlwiRFVNTVlcIiBudW1iZXI6MCB9IH0gIgot
ICAgICJzZXJ2aWNlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0U2VydmljZVwiIgotICAgICIgIG1l
dGhvZCB7IG5hbWU6IFwiQVwiIGlucHV0X3R5cGU6IFwiQmFyXCIgb3V0cHV0X3R5cGU6IFwiRm9v
XCIgfSIKLSAgICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBUZXN0U2VydmljZS5BOiBJTlBVVF9U
WVBFOiBcIkJhclwiIGlzIG5vdCBhIG1lc3NhZ2UgdHlwZS5cbiIKLSAgICApOwotfQotCi1URVNU
X0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgT3V0cHV0VHlwZU5vdERlZmluZWQpIHsKLSAgQnVpbGRG
aWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2Vf
dHlwZSB7IG5hbWU6IFwiRm9vXCIgfSAiCi0gICAgInNlcnZpY2UgeyIKLSAgICAiICBuYW1lOiBc
IlRlc3RTZXJ2aWNlXCIiCi0gICAgIiAgbWV0aG9kIHsgbmFtZTogXCJBXCIgaW5wdXRfdHlwZTog
XCJGb29cIiBvdXRwdXRfdHlwZTogXCJCYXJcIiB9IgotICAgICJ9IiwKLQotICAgICJmb28ucHJv
dG86IFRlc3RTZXJ2aWNlLkE6IE9VVFBVVF9UWVBFOiBcIkJhclwiIGlzIG5vdCBkZWZpbmVkLlxu
IgotICAgICk7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBPdXRwdXRUeXBlTm90
QU1lc3NhZ2UpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJv
dG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7IG5hbWU6IFwiRm9vXCIgfSAiCi0gICAgImVudW1f
dHlwZSB7IG5hbWU6IFwiQmFyXCIgdmFsdWUgeyBuYW1lOlwiRFVNTVlcIiBudW1iZXI6MCB9IH0g
IgotICAgICJzZXJ2aWNlIHsiCi0gICAgIiAgbmFtZTogXCJUZXN0U2VydmljZVwiIgotICAgICIg
IG1ldGhvZCB7IG5hbWU6IFwiQVwiIGlucHV0X3R5cGU6IFwiRm9vXCIgb3V0cHV0X3R5cGU6IFwi
QmFyXCIgfSIKLSAgICAifSIsCi0KLSAgICAiZm9vLnByb3RvOiBUZXN0U2VydmljZS5BOiBPVVRQ
VVRfVFlQRTogXCJCYXJcIiBpcyBub3QgYSBtZXNzYWdlIHR5cGUuXG4iCi0gICAgKTsKLX0KLQot
Ci1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgSWxsZWdhbFBhY2tlZEZpZWxkKSB7Ci0gIEJ1
aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNz
YWdlX3R5cGUge1xuIgotICAgICIgIG5hbWU6IFwiRm9vXCIiCi0gICAgIiAgZmllbGQgeyBuYW1l
OlwicGFja2VkX3N0cmluZ1wiIG51bWJlcjoxIGxhYmVsOkxBQkVMX1JFUEVBVEVEICIKLSAgICAi
ICAgICAgICAgIHR5cGU6VFlQRV9TVFJJTkcgIgotICAgICIgICAgICAgICAgb3B0aW9ucyB7IHVu
aW50ZXJwcmV0ZWRfb3B0aW9uIHsiCi0gICAgIiAgICAgICAgICAgIG5hbWUgeyBuYW1lX3BhcnQ6
IFwicGFja2VkXCIgaXNfZXh0ZW5zaW9uOiBmYWxzZSB9IgotICAgICIgICAgICAgICAgICBpZGVu
dGlmaWVyX3ZhbHVlOiBcInRydWVcIiB9fX1cbiIKLSAgICAiICBmaWVsZCB7IG5hbWU6XCJwYWNr
ZWRfbWVzc2FnZVwiIG51bWJlcjozIGxhYmVsOkxBQkVMX1JFUEVBVEVEICIKLSAgICAiICAgICAg
ICAgIHR5cGVfbmFtZTogXCJGb29cIiIKLSAgICAiICAgICAgICAgIG9wdGlvbnMgeyB1bmludGVy
cHJldGVkX29wdGlvbiB7IgotICAgICIgICAgICAgICAgICBuYW1lIHsgbmFtZV9wYXJ0OiBcInBh
Y2tlZFwiIGlzX2V4dGVuc2lvbjogZmFsc2UgfSIKLSAgICAiICAgICAgICAgICAgaWRlbnRpZmll
cl92YWx1ZTogXCJ0cnVlXCIgfX19XG4iCi0gICAgIiAgZmllbGQgeyBuYW1lOlwib3B0aW9uYWxf
aW50MzJcIiBudW1iZXI6IDQgbGFiZWw6IExBQkVMX09QVElPTkFMICIKLSAgICAiICAgICAgICAg
IHR5cGU6VFlQRV9JTlQzMiAiCi0gICAgIiAgICAgICAgICBvcHRpb25zIHsgdW5pbnRlcnByZXRl
ZF9vcHRpb24geyIKLSAgICAiICAgICAgICAgICAgbmFtZSB7IG5hbWVfcGFydDogXCJwYWNrZWRc
IiBpc19leHRlbnNpb246IGZhbHNlIH0iCi0gICAgIiAgICAgICAgICAgIGlkZW50aWZpZXJfdmFs
dWU6IFwidHJ1ZVwiIH19fVxuIgotICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IEZvby5wYWNr
ZWRfc3RyaW5nOiBUWVBFOiBbcGFja2VkID0gdHJ1ZV0gY2FuIG9ubHkgYmUgIgotICAgICAgICAi
c3BlY2lmaWVkIGZvciByZXBlYXRlZCBwcmltaXRpdmUgZmllbGRzLlxuIgotICAgICJmb28ucHJv
dG86IEZvby5wYWNrZWRfbWVzc2FnZTogVFlQRTogW3BhY2tlZCA9IHRydWVdIGNhbiBvbmx5IGJl
ICIKLSAgICAgICAgInNwZWNpZmllZCBmb3IgcmVwZWF0ZWQgcHJpbWl0aXZlIGZpZWxkcy5cbiIK
LSAgICAiZm9vLnByb3RvOiBGb28ub3B0aW9uYWxfaW50MzI6IFRZUEU6IFtwYWNrZWQgPSB0cnVl
XSBjYW4gb25seSBiZSAiCi0gICAgICAgICJzcGVjaWZpZWQgZm9yIHJlcGVhdGVkIHByaW1pdGl2
ZSBmaWVsZHMuXG4iCi0gICAgICAgICk7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0
LCBPcHRpb25Xcm9uZ1R5cGUpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTog
XCJmb28ucHJvdG9cIiAiCi0gICAgIm1lc3NhZ2VfdHlwZSB7ICIKLSAgICAiICBuYW1lOiBcIlRl
c3RNZXNzYWdlXCIgIgotICAgICIgIGZpZWxkIHsgbmFtZTpcImZvb1wiIG51bWJlcjoxIGxhYmVs
OkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9TVFJJTkcgIgotICAgICIgICAgICAgICAgb3B0aW9u
cyB7IHVuaW50ZXJwcmV0ZWRfb3B0aW9uIHsgbmFtZSB7IG5hbWVfcGFydDogXCJjdHlwZVwiICIK
LSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c19leHRlbnNpb246IGZhbHNlIH0iCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3NpdGl2ZV9pbnRfdmFsdWU6IDEgfSIKLSAgICAiICAgICAgICAgIH0i
Ci0gICAgIiAgfSIKLSAgICAifVxuIiwKLQotICAgICJmb28ucHJvdG86IFRlc3RNZXNzYWdlLmZv
bzogT1BUSU9OX1ZBTFVFOiBWYWx1ZSBtdXN0IGJlIGlkZW50aWZpZXIgZm9yICIKLSAgICAiZW51
bS12YWx1ZWQgb3B0aW9uIFwiZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5jdHlwZVwiLlxu
Iik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBPcHRpb25FeHRlbmRzQXRvbWlj
VHlwZSkgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wi
ICIKLSAgICAibWVzc2FnZV90eXBlIHsgIgotICAgICIgIG5hbWU6IFwiVGVzdE1lc3NhZ2VcIiAi
Ci0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIgbnVtYmVyOjEgbGFiZWw6TEFCRUxfT1BUSU9O
QUwgdHlwZTpUWVBFX1NUUklORyAiCi0gICAgIiAgICAgICAgICBvcHRpb25zIHsgdW5pbnRlcnBy
ZXRlZF9vcHRpb24geyBuYW1lIHsgbmFtZV9wYXJ0OiBcImN0eXBlXCIgIgotICAgICIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjog
ZmFsc2UgfSIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUgeyBuYW1lX3BhcnQ6IFwiZm9vXCIgIgotICAgICIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSB9IgotICAgICIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmVfaW50X3Zh
bHVlOiAxIH0iCi0gICAgIiAgICAgICAgICB9IgotICAgICIgIH0iCi0gICAgIn1cbiIsCi0KLSAg
ICAiZm9vLnByb3RvOiBUZXN0TWVzc2FnZS5mb286IE9QVElPTl9OQU1FOiBPcHRpb24gXCJjdHlw
ZVwiIGlzIGFuICIKLSAgICAiYXRvbWljIHR5cGUsIG5vdCBhIG1lc3NhZ2UuXG4iKTsKLX0KLQot
VEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIER1cE9wdGlvbikgewotICBCdWlsZEZpbGVXaXRo
RXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsg
IgotICAgICIgIG5hbWU6IFwiVGVzdE1lc3NhZ2VcIiAiCi0gICAgIiAgZmllbGQgeyBuYW1lOlwi
Zm9vXCIgbnVtYmVyOjEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX1VJTlQzMiAiCi0g
ICAgIiAgICAgICAgICBvcHRpb25zIHsgdW5pbnRlcnByZXRlZF9vcHRpb24geyBuYW1lIHsgbmFt
ZV9wYXJ0OiBcImN0eXBlXCIgIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogZmFsc2UgfSIKLSAgICAiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdmFsdWU6IFwiQ09S
RFwiIH0iCi0gICAgIiAgICAgICAgICAgICAgICAgICAgdW5pbnRlcnByZXRlZF9vcHRpb24geyBu
YW1lIHsgbmFtZV9wYXJ0OiBcImN0eXBlXCIgIgotICAgICIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogZmFsc2UgfSIKLSAgICAi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdmFs
dWU6IFwiQ09SRFwiIH0iCi0gICAgIiAgICAgICAgICB9IgotICAgICIgIH0iCi0gICAgIn1cbiIs
Ci0KLSAgICAiZm9vLnByb3RvOiBUZXN0TWVzc2FnZS5mb286IE9QVElPTl9OQU1FOiBPcHRpb24g
XCJjdHlwZVwiIHdhcyAiCi0gICAgImFscmVhZHkgc2V0LlxuIik7Ci19Ci0KLVRFU1RfRihWYWxp
ZGF0aW9uRXJyb3JUZXN0LCBJbnZhbGlkT3B0aW9uTmFtZSkgewotICBCdWlsZEZpbGVXaXRoRXJy
b3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsgIgot
ICAgICIgIG5hbWU6IFwiVGVzdE1lc3NhZ2VcIiAiCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9v
XCIgbnVtYmVyOjEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0JPT0wgIgotICAgICIg
ICAgICAgICAgb3B0aW9ucyB7IHVuaW50ZXJwcmV0ZWRfb3B0aW9uIHsgIgotICAgICIgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSB7IG5hbWVfcGFydDogXCJ1bmludGVycHJldGVkX29wdGlvblwi
ICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19leHRlbnNpb246IGZhbHNl
IH0iCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZV9pbnRfdmFsdWU6IDEgIgot
ICAgICIgICAgICAgICAgICAgICAgICAgIH0iCi0gICAgIiAgICAgICAgICB9IgotICAgICIgIH0i
Ci0gICAgIn1cbiIsCi0KLSAgICAiZm9vLnByb3RvOiBUZXN0TWVzc2FnZS5mb286IE9QVElPTl9O
QU1FOiBPcHRpb24gbXVzdCBub3QgdXNlICIKLSAgICAicmVzZXJ2ZWQgbmFtZSBcInVuaW50ZXJw
cmV0ZWRfb3B0aW9uXCIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFJl
cGVhdGVkTWVzc2FnZU9wdGlvbikgewotICBCdWlsZERlc2NyaXB0b3JNZXNzYWdlc0luVGVzdFBv
b2woKTsKLQotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wi
ICIKLSAgICAiZGVwZW5kZW5jeTogXCJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90b1wi
ICIKLSAgICAibWVzc2FnZV90eXBlOiB7IG5hbWU6IFwiQmFyXCIgZmllbGQ6IHsgIgotICAgICIg
IG5hbWU6IFwiZm9vXCIgbnVtYmVyOiAxIGxhYmVsOiBMQUJFTF9PUFRJT05BTCB0eXBlOiBUWVBF
X0lOVDMyIH0gIgotICAgICJ9ICIKLSAgICAiZXh0ZW5zaW9uIHsgbmFtZTogXCJiYXJcIiBudW1i
ZXI6IDc2NzI3NTcgbGFiZWw6IExBQkVMX1JFUEVBVEVEICIKLSAgICAiICAgICAgICAgICAgdHlw
ZTogVFlQRV9NRVNTQUdFIHR5cGVfbmFtZTogXCJCYXJcIiAiCi0gICAgIiAgICAgICAgICAgIGV4
dGVuZGVlOiBcImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1wiIH0iCi0gICAgIm9wdGlvbnMg
eyB1bmludGVycHJldGVkX29wdGlvbiB7IG5hbWUgeyBuYW1lX3BhcnQ6IFwiYmFyXCIgIgotICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXh0ZW5zaW9uOiB0
cnVlIH0gIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHsgbmFt
ZV9wYXJ0OiBcImZvb1wiICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzX2V4dGVuc2lvbjogZmFsc2UgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvc2l0aXZlX2ludF92YWx1ZTogMSB9IH0iLAotCi0gICAgImZvby5wcm90
bzogZm9vLnByb3RvOiBPUFRJT05fTkFNRTogT3B0aW9uIGZpZWxkIFwiKGJhcilcIiBpcyBhICIK
LSAgICAicmVwZWF0ZWQgbWVzc2FnZS4gUmVwZWF0ZWQgbWVzc2FnZSBvcHRpb25zIG11c3QgYmUg
aW5pdGlhbGl6ZWQgIgotICAgICJ1c2luZyBhbiBhZ2dyZWdhdGUgdmFsdWUuXG4iKTsKLX0KLQot
VEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFJlc29sdmVVbmRlZmluZWRPcHRpb24pIHsKLSAg
Ly8gVGhlIGZvbGxvd2luZyBzaG91bGQgcHJvZHVjZSBhbiBlcm9yIHRoYXQgYmF6LmJhciBpcyBy
ZXNvbHZlZCBidXQgbm90Ci0gIC8vIGRlZmluZWQuCi0gIC8vIGZvby5wcm90bzoKLSAgLy8gICBw
YWNrYWdlIGJhegotICAvLyAgIGltcG9ydCBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90
bwotICAvLyAgIG1lc3NhZ2UgQmFyIHsgb3B0aW9uYWwgaW50MzIgZm9vID0gMTsgfQotICAvLyAg
IGV4dGVuZCBGaWxlT3B0aW9ucyB7IG9wdGlvbmFsIEJhciBiYXIgPSA3NjcyNzU3OyB9Ci0gIC8v
Ci0gIC8vIHF1eC5wcm90bzoKLSAgLy8gICBwYWNrYWdlIHF1eC5iYXoKLSAgLy8gICBvcHRpb24g
KGJhei5iYXIpLmZvbyA9IDE7Ci0gIC8vCi0gIC8vIEFsdGhvdWdoICJiYXouYmFyIiBpcyBhbHJl
YWR5IGRlZmluZWQsIHRoZSBsb29rdXAgY29kZSB3aWxsIHRyeQotICAvLyAicXV4LmJhei5iYXIi
LCBzaW5jZSBpdCdzIHRoZSBtYXRjaCBmcm9tIHRoZSBpbm5lcm1vc3Qgc2NvcGUsIHdoaWNoIHdp
bGwKLSAgLy8gY2F1c2UgYSBzeW1ib2wgbm90IGRlZmluZWQgZXJyb3IuCi0gIEJ1aWxkRGVzY3Jp
cHRvck1lc3NhZ2VzSW5UZXN0UG9vbCgpOwotCi0gIEJ1aWxkRmlsZSgKLSAgICAibmFtZTogXCJm
b28ucHJvdG9cIiAiCi0gICAgInBhY2thZ2U6IFwiYmF6XCIgIgotICAgICJkZXBlbmRlbmN5OiBc
Imdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGU6
IHsgbmFtZTogXCJCYXJcIiBmaWVsZDogeyAiCi0gICAgIiAgbmFtZTogXCJmb29cIiBudW1iZXI6
IDEgbGFiZWw6IExBQkVMX09QVElPTkFMIHR5cGU6IFRZUEVfSU5UMzIgfSAiCi0gICAgIn0gIgot
ICAgICJleHRlbnNpb24geyBuYW1lOiBcImJhclwiIG51bWJlcjogNzY3Mjc1NyBsYWJlbDogTEFC
RUxfT1BUSU9OQUwgIgotICAgICIgICAgICAgICAgICB0eXBlOiBUWVBFX01FU1NBR0UgdHlwZV9u
YW1lOiBcIkJhclwiICIKLSAgICAiICAgICAgICAgICAgZXh0ZW5kZWU6IFwiZ29vZ2xlLnByb3Rv
YnVmLkZpbGVPcHRpb25zXCIgfSIpOwotCi0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5h
bWU6IFwicXV4LnByb3RvXCIgIgotICAgICJwYWNrYWdlOiBcInF1eC5iYXpcIiAiCi0gICAgIm9w
dGlvbnMgeyB1bmludGVycHJldGVkX29wdGlvbiB7IG5hbWUgeyBuYW1lX3BhcnQ6IFwiYmF6LmJh
clwiICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V4
dGVuc2lvbjogdHJ1ZSB9ICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZSB7IG5hbWVfcGFydDogXCJmb29cIiAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpc19leHRlbnNpb246IGZhbHNlIH0gIgotICAgICIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZV9pbnRfdmFsdWU6IDEgfSB9IiwKLQotICAg
ICJxdXgucHJvdG86IHF1eC5wcm90bzogT1BUSU9OX05BTUU6IE9wdGlvbiBcIihiYXouYmFyKVwi
IGlzIHJlc29sdmVkIHRvICIKLSAgICAiXCIocXV4LmJhei5iYXIpXCIsIgotICAgICIgd2hpY2gg
aXMgbm90IGRlZmluZWQuIFRoZSBpbm5lcm1vc3Qgc2NvcGUgaXMgc2VhcmNoZWQgZmlyc3QgaW4g
bmFtZSAiCi0gICAgInJlc29sdXRpb24uIENvbnNpZGVyIHVzaW5nIGEgbGVhZGluZyAnLicoaS5l
LiwgXCIoLmJhei5iYXIpXCIpIHRvIHN0YXJ0ICIKLSAgICAiZnJvbSB0aGUgb3V0ZXJtb3N0IHNj
b3BlLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBVbmtub3duT3B0aW9u
KSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwicXV4LnByb3RvXCIgIgot
ICAgICJwYWNrYWdlOiBcInF1eC5iYXpcIiAiCi0gICAgIm9wdGlvbnMgeyB1bmludGVycHJldGVk
X29wdGlvbiB7IG5hbWUgeyBuYW1lX3BhcnQ6IFwiYmFhei5iYXJcIiAiCi0gICAgIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19leHRlbnNpb246IHRydWUgfSAiCi0g
ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgeyBuYW1lX3BhcnQ6IFwi
Zm9vXCIgIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNf
ZXh0ZW5zaW9uOiBmYWxzZSB9ICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9zaXRpdmVfaW50X3ZhbHVlOiAxIH0gfSIsCi0KLSAgICAicXV4LnByb3RvOiBxdXgucHJv
dG86IE9QVElPTl9OQU1FOiBPcHRpb24gXCIoYmFhei5iYXIpXCIgdW5rbm93bi5cbiIpOwotfQot
Ci1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgQ3VzdG9tT3B0aW9uQ29uZmxpY3RpbmdGaWVs
ZE51bWJlcikgewotICBCdWlsZERlc2NyaXB0b3JNZXNzYWdlc0luVGVzdFBvb2woKTsKLQotICBC
dWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAiZGVw
ZW5kZW5jeTogXCJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90b1wiICIKLSAgICAiZXh0
ZW5zaW9uIHsgbmFtZTogXCJmb28xXCIgbnVtYmVyOiA3NjcyNzU3IGxhYmVsOiBMQUJFTF9PUFRJ
T05BTCAiCi0gICAgIiAgICAgICAgICAgIHR5cGU6IFRZUEVfSU5UMzIgZXh0ZW5kZWU6IFwiZ29v
Z2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc1wiIH0iCi0gICAgImV4dGVuc2lvbiB7IG5hbWU6IFwi
Zm9vMlwiIG51bWJlcjogNzY3Mjc1NyBsYWJlbDogTEFCRUxfT1BUSU9OQUwgIgotICAgICIgICAg
ICAgICAgICB0eXBlOiBUWVBFX0lOVDMyIGV4dGVuZGVlOiBcImdvb2dsZS5wcm90b2J1Zi5GaWVs
ZE9wdGlvbnNcIiB9IiwKLQotICAgICJmb28ucHJvdG86IGZvbzI6IE5VTUJFUjogRXh0ZW5zaW9u
IG51bWJlciA3NjcyNzU3IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCAiCi0gICAgImluIFwiZ29vZ2xl
LnByb3RvYnVmLkZpZWxkT3B0aW9uc1wiIGJ5IGV4dGVuc2lvbiBcImZvbzFcIi5cbiIpOwotfQot
Ci1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgSW50MzJPcHRpb25WYWx1ZU91dE9mUG9zaXRp
dmVSYW5nZSkgewotICBCdWlsZERlc2NyaXB0b3JNZXNzYWdlc0luVGVzdFBvb2woKTsKLQotICBC
dWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAiZGVw
ZW5kZW5jeTogXCJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90b1wiICIKLSAgICAiZXh0
ZW5zaW9uIHsgbmFtZTogXCJmb29cIiBudW1iZXI6IDc2NzI3NTcgbGFiZWw6IExBQkVMX09QVElP
TkFMICIKLSAgICAiICAgICAgICAgICAgdHlwZTogVFlQRV9JTlQzMiBleHRlbmRlZTogXCJnb29n
bGUucHJvdG9idWYuRmlsZU9wdGlvbnNcIiB9IgotICAgICJvcHRpb25zIHsgdW5pbnRlcnByZXRl
ZF9vcHRpb24geyBuYW1lIHsgbmFtZV9wYXJ0OiBcImZvb1wiICIKLSAgICAiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSB9ICIKLSAgICAi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmVfaW50X3ZhbHVlOiAweDgw
MDAwMDAwIH0gIgotICAgICJ9IiwKLQotICAgICJmb28ucHJvdG86IGZvby5wcm90bzogT1BUSU9O
X1ZBTFVFOiBWYWx1ZSBvdXQgb2YgcmFuZ2UgIgotICAgICJmb3IgaW50MzIgb3B0aW9uIFwiZm9v
XCIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEludDMyT3B0aW9uVmFs
dWVPdXRPZk5lZ2F0aXZlUmFuZ2UpIHsKLSAgQnVpbGREZXNjcmlwdG9yTWVzc2FnZXNJblRlc3RQ
b29sKCk7Ci0KLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9c
IiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG9c
IiAiCi0gICAgImV4dGVuc2lvbiB7IG5hbWU6IFwiZm9vXCIgbnVtYmVyOiA3NjcyNzU3IGxhYmVs
OiBMQUJFTF9PUFRJT05BTCAiCi0gICAgIiAgICAgICAgICAgIHR5cGU6IFRZUEVfSU5UMzIgZXh0
ZW5kZWU6IFwiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zXCIgfSIKLSAgICAib3B0aW9ucyB7
IHVuaW50ZXJwcmV0ZWRfb3B0aW9uIHsgbmFtZSB7IG5hbWVfcGFydDogXCJmb29cIiAiCi0gICAg
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19leHRlbnNpb246IHRy
dWUgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlX2lu
dF92YWx1ZTogLTB4ODAwMDAwMDEgfSAiCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90bzogZm9v
LnByb3RvOiBPUFRJT05fVkFMVUU6IFZhbHVlIG91dCBvZiByYW5nZSAiCi0gICAgImZvciBpbnQz
MiBvcHRpb24gXCJmb29cIi5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwg
SW50MzJPcHRpb25WYWx1ZUlzTm90UG9zaXRpdmVJbnQpIHsKLSAgQnVpbGREZXNjcmlwdG9yTWVz
c2FnZXNJblRlc3RQb29sKCk7Ci0KLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTog
XCJmb28ucHJvdG9cIiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZ29vZ2xlL3Byb3RvYnVmL2Rlc2Ny
aXB0b3IucHJvdG9cIiAiCi0gICAgImV4dGVuc2lvbiB7IG5hbWU6IFwiZm9vXCIgbnVtYmVyOiA3
NjcyNzU3IGxhYmVsOiBMQUJFTF9PUFRJT05BTCAiCi0gICAgIiAgICAgICAgICAgIHR5cGU6IFRZ
UEVfSU5UMzIgZXh0ZW5kZWU6IFwiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zXCIgfSIKLSAg
ICAib3B0aW9ucyB7IHVuaW50ZXJwcmV0ZWRfb3B0aW9uIHsgbmFtZSB7IG5hbWVfcGFydDogXCJm
b29cIiAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19l
eHRlbnNpb246IHRydWUgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmluZ192YWx1ZTogXCI1XCIgfSB9IiwKLQotICAgICJmb28ucHJvdG86IGZvby5wcm90bzog
T1BUSU9OX1ZBTFVFOiBWYWx1ZSBtdXN0IGJlIGludGVnZXIgIgotICAgICJmb3IgaW50MzIgb3B0
aW9uIFwiZm9vXCIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEludDY0
T3B0aW9uVmFsdWVPdXRPZlJhbmdlKSB7Ci0gIEJ1aWxkRGVzY3JpcHRvck1lc3NhZ2VzSW5UZXN0
UG9vbCgpOwotCi0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3Rv
XCIgIgotICAgICJkZXBlbmRlbmN5OiBcImdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3Rv
XCIgIgotICAgICJleHRlbnNpb24geyBuYW1lOiBcImZvb1wiIG51bWJlcjogNzY3Mjc1NyBsYWJl
bDogTEFCRUxfT1BUSU9OQUwgIgotICAgICIgICAgICAgICAgICB0eXBlOiBUWVBFX0lOVDY0IGV4
dGVuZGVlOiBcImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1wiIH0iCi0gICAgIm9wdGlvbnMg
eyB1bmludGVycHJldGVkX29wdGlvbiB7IG5hbWUgeyBuYW1lX3BhcnQ6IFwiZm9vXCIgIgotICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXh0ZW5zaW9uOiB0
cnVlIH0gIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZV9p
bnRfdmFsdWU6IDB4ODAwMDAwMDAwMDAwMDAwMCB9ICIKLSAgICAifSIsCi0KLSAgICAiZm9vLnBy
b3RvOiBmb28ucHJvdG86IE9QVElPTl9WQUxVRTogVmFsdWUgb3V0IG9mIHJhbmdlICIKLSAgICAi
Zm9yIGludDY0IG9wdGlvbiBcImZvb1wiLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJy
b3JUZXN0LCBJbnQ2NE9wdGlvblZhbHVlSXNOb3RQb3NpdGl2ZUludCkgewotICBCdWlsZERlc2Ny
aXB0b3JNZXNzYWdlc0luVGVzdFBvb2woKTsKLQotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAg
ICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAiZGVwZW5kZW5jeTogXCJnb29nbGUvcHJvdG9i
dWYvZGVzY3JpcHRvci5wcm90b1wiICIKLSAgICAiZXh0ZW5zaW9uIHsgbmFtZTogXCJmb29cIiBu
dW1iZXI6IDc2NzI3NTcgbGFiZWw6IExBQkVMX09QVElPTkFMICIKLSAgICAiICAgICAgICAgICAg
dHlwZTogVFlQRV9JTlQ2NCBleHRlbmRlZTogXCJnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnNc
IiB9IgotICAgICJvcHRpb25zIHsgdW5pbnRlcnByZXRlZF9vcHRpb24geyBuYW1lIHsgbmFtZV9w
YXJ0OiBcImZvb1wiICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSB9ICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWRlbnRpZmllcl92YWx1ZTogXCI1XCIgfSB9IiwKLQotICAgICJmb28ucHJvdG86
IGZvby5wcm90bzogT1BUSU9OX1ZBTFVFOiBWYWx1ZSBtdXN0IGJlIGludGVnZXIgIgotICAgICJm
b3IgaW50NjQgb3B0aW9uIFwiZm9vXCIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJv
clRlc3QsIFVJbnQzMk9wdGlvblZhbHVlT3V0T2ZSYW5nZSkgewotICBCdWlsZERlc2NyaXB0b3JN
ZXNzYWdlc0luVGVzdFBvb2woKTsKLQotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1l
OiBcImZvby5wcm90b1wiICIKLSAgICAiZGVwZW5kZW5jeTogXCJnb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5wcm90b1wiICIKLSAgICAiZXh0ZW5zaW9uIHsgbmFtZTogXCJmb29cIiBudW1iZXI6
IDc2NzI3NTcgbGFiZWw6IExBQkVMX09QVElPTkFMICIKLSAgICAiICAgICAgICAgICAgdHlwZTog
VFlQRV9VSU5UMzIgZXh0ZW5kZWU6IFwiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zXCIgfSIK
LSAgICAib3B0aW9ucyB7IHVuaW50ZXJwcmV0ZWRfb3B0aW9uIHsgbmFtZSB7IG5hbWVfcGFydDog
XCJmb29cIiAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c19leHRlbnNpb246IHRydWUgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBvc2l0aXZlX2ludF92YWx1ZTogMHgxMDAwMDAwMDAgfSB9IiwKLQotICAgICJmb28ucHJv
dG86IGZvby5wcm90bzogT1BUSU9OX1ZBTFVFOiBWYWx1ZSBvdXQgb2YgcmFuZ2UgIgotICAgICJm
b3IgdWludDMyIG9wdGlvbiBcImZvb1wiLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJy
b3JUZXN0LCBVSW50MzJPcHRpb25WYWx1ZUlzTm90UG9zaXRpdmVJbnQpIHsKLSAgQnVpbGREZXNj
cmlwdG9yTWVzc2FnZXNJblRlc3RQb29sKCk7Ci0KLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAg
ICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZ29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IucHJvdG9cIiAiCi0gICAgImV4dGVuc2lvbiB7IG5hbWU6IFwiZm9vXCIg
bnVtYmVyOiA3NjcyNzU3IGxhYmVsOiBMQUJFTF9PUFRJT05BTCAiCi0gICAgIiAgICAgICAgICAg
IHR5cGU6IFRZUEVfVUlOVDMyIGV4dGVuZGVlOiBcImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u
c1wiIH0iCi0gICAgIm9wdGlvbnMgeyB1bmludGVycHJldGVkX29wdGlvbiB7IG5hbWUgeyBuYW1l
X3BhcnQ6IFwiZm9vXCIgIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNfZXh0ZW5zaW9uOiB0cnVlIH0gIgotICAgICIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGVfdmFsdWU6IC01LjYgfSB9IiwKLQotICAgICJmb28ucHJvdG86IGZv
by5wcm90bzogT1BUSU9OX1ZBTFVFOiBWYWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBpbnRlZ2Vy
ICIKLSAgICAiZm9yIHVpbnQzMiBvcHRpb24gXCJmb29cIi5cbiIpOwotfQotCi1URVNUX0YoVmFs
aWRhdGlvbkVycm9yVGVzdCwgVUludDY0T3B0aW9uVmFsdWVJc05vdFBvc2l0aXZlSW50KSB7Ci0g
IEJ1aWxkRGVzY3JpcHRvck1lc3NhZ2VzSW5UZXN0UG9vbCgpOwotCi0gIEJ1aWxkRmlsZVdpdGhF
cnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJkZXBlbmRlbmN5OiBcImdv
b2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvXCIgIgotICAgICJleHRlbnNpb24geyBuYW1l
OiBcImZvb1wiIG51bWJlcjogNzY3Mjc1NyBsYWJlbDogTEFCRUxfT1BUSU9OQUwgIgotICAgICIg
ICAgICAgICAgICB0eXBlOiBUWVBFX1VJTlQ2NCBleHRlbmRlZTogXCJnb29nbGUucHJvdG9idWYu
RmlsZU9wdGlvbnNcIiB9IgotICAgICJvcHRpb25zIHsgdW5pbnRlcnByZXRlZF9vcHRpb24geyBu
YW1lIHsgbmFtZV9wYXJ0OiBcImZvb1wiICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSB9ICIKLSAgICAiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmVfaW50X3ZhbHVlOiAtNSB9IH0iLAotCi0gICAg
ImZvby5wcm90bzogZm9vLnByb3RvOiBPUFRJT05fVkFMVUU6IFZhbHVlIG11c3QgYmUgbm9uLW5l
Z2F0aXZlIGludGVnZXIgIgotICAgICJmb3IgdWludDY0IG9wdGlvbiBcImZvb1wiLlxuIik7Ci19
Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBGbG9hdE9wdGlvblZhbHVlSXNOb3ROdW1i
ZXIpIHsKLSAgQnVpbGREZXNjcmlwdG9yTWVzc2FnZXNJblRlc3RQb29sKCk7Ci0KLSAgQnVpbGRG
aWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgImRlcGVuZGVu
Y3k6IFwiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG9cIiAiCi0gICAgImV4dGVuc2lv
biB7IG5hbWU6IFwiZm9vXCIgbnVtYmVyOiA3NjcyNzU3IGxhYmVsOiBMQUJFTF9PUFRJT05BTCAi
Ci0gICAgIiAgICAgICAgICAgIHR5cGU6IFRZUEVfRkxPQVQgZXh0ZW5kZWU6IFwiZ29vZ2xlLnBy
b3RvYnVmLkZpbGVPcHRpb25zXCIgfSIKLSAgICAib3B0aW9ucyB7IHVuaW50ZXJwcmV0ZWRfb3B0
aW9uIHsgbmFtZSB7IG5hbWVfcGFydDogXCJmb29cIiAiCi0gICAgIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc19leHRlbnNpb246IHRydWUgfSAiCi0gICAgIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ192YWx1ZTogXCJiYXJcIiB9IH0iLAot
Ci0gICAgImZvby5wcm90bzogZm9vLnByb3RvOiBPUFRJT05fVkFMVUU6IFZhbHVlIG11c3QgYmUg
bnVtYmVyICIKLSAgICAiZm9yIGZsb2F0IG9wdGlvbiBcImZvb1wiLlxuIik7Ci19Ci0KLVRFU1Rf
RihWYWxpZGF0aW9uRXJyb3JUZXN0LCBEb3VibGVPcHRpb25WYWx1ZUlzTm90TnVtYmVyKSB7Ci0g
IEJ1aWxkRGVzY3JpcHRvck1lc3NhZ2VzSW5UZXN0UG9vbCgpOwotCi0gIEJ1aWxkRmlsZVdpdGhF
cnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJkZXBlbmRlbmN5OiBcImdv
b2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvXCIgIgotICAgICJleHRlbnNpb24geyBuYW1l
OiBcImZvb1wiIG51bWJlcjogNzY3Mjc1NyBsYWJlbDogTEFCRUxfT1BUSU9OQUwgIgotICAgICIg
ICAgICAgICAgICB0eXBlOiBUWVBFX0RPVUJMRSBleHRlbmRlZTogXCJnb29nbGUucHJvdG9idWYu
RmlsZU9wdGlvbnNcIiB9IgotICAgICJvcHRpb25zIHsgdW5pbnRlcnByZXRlZF9vcHRpb24geyBu
YW1lIHsgbmFtZV9wYXJ0OiBcImZvb1wiICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSB9ICIKLSAgICAiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZhbHVlOiBcImJhclwiIH0gfSIsCi0KLSAgICAi
Zm9vLnByb3RvOiBmb28ucHJvdG86IE9QVElPTl9WQUxVRTogVmFsdWUgbXVzdCBiZSBudW1iZXIg
IgotICAgICJmb3IgZG91YmxlIG9wdGlvbiBcImZvb1wiLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxp
ZGF0aW9uRXJyb3JUZXN0LCBCb29sT3B0aW9uVmFsdWVJc05vdFRydWVPckZhbHNlKSB7Ci0gIEJ1
aWxkRGVzY3JpcHRvck1lc3NhZ2VzSW5UZXN0UG9vbCgpOwotCi0gIEJ1aWxkRmlsZVdpdGhFcnJv
cnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJkZXBlbmRlbmN5OiBcImdvb2ds
ZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvXCIgIgotICAgICJleHRlbnNpb24geyBuYW1lOiBc
ImZvb1wiIG51bWJlcjogNzY3Mjc1NyBsYWJlbDogTEFCRUxfT1BUSU9OQUwgIgotICAgICIgICAg
ICAgICAgICB0eXBlOiBUWVBFX0JPT0wgZXh0ZW5kZWU6IFwiZ29vZ2xlLnByb3RvYnVmLkZpbGVP
cHRpb25zXCIgfSIKLSAgICAib3B0aW9ucyB7IHVuaW50ZXJwcmV0ZWRfb3B0aW9uIHsgbmFtZSB7
IG5hbWVfcGFydDogXCJmb29cIiAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc19leHRlbnNpb246IHRydWUgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdmFsdWU6IFwiYmFyXCIgfSB9IiwKLQotICAgICJm
b28ucHJvdG86IGZvby5wcm90bzogT1BUSU9OX1ZBTFVFOiBWYWx1ZSBtdXN0IGJlIFwidHJ1ZVwi
IG9yIFwiZmFsc2VcIiAiCi0gICAgImZvciBib29sZWFuIG9wdGlvbiBcImZvb1wiLlxuIik7Ci19
Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBFbnVtT3B0aW9uVmFsdWVJc05vdElkZW50
aWZpZXIpIHsKLSAgQnVpbGREZXNjcmlwdG9yTWVzc2FnZXNJblRlc3RQb29sKCk7Ci0KLSAgQnVp
bGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgImRlcGVu
ZGVuY3k6IFwiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG9cIiAiCi0gICAgImVudW1f
dHlwZSB7IG5hbWU6IFwiRm9vRW51bVwiIHZhbHVlIHsgbmFtZTogXCJCQVJcIiBudW1iZXI6IDEg
fSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHsgbmFtZTogXCJC
QVpcIiBudW1iZXI6IDIgfSB9IgotICAgICJleHRlbnNpb24geyBuYW1lOiBcImZvb1wiIG51bWJl
cjogNzY3Mjc1NyBsYWJlbDogTEFCRUxfT1BUSU9OQUwgIgotICAgICIgICAgICAgICAgICB0eXBl
OiBUWVBFX0VOVU0gdHlwZV9uYW1lOiBcIkZvb0VudW1cIiAiCi0gICAgIiAgICAgICAgICAgIGV4
dGVuZGVlOiBcImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1wiIH0iCi0gICAgIm9wdGlvbnMg
eyB1bmludGVycHJldGVkX29wdGlvbiB7IG5hbWUgeyBuYW1lX3BhcnQ6IFwiZm9vXCIgIgotICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXh0ZW5zaW9uOiB0
cnVlIH0gIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfdmFs
dWU6IFwiUVVVWFwiIH0gfSIsCi0KLSAgICAiZm9vLnByb3RvOiBmb28ucHJvdG86IE9QVElPTl9W
QUxVRTogVmFsdWUgbXVzdCBiZSBpZGVudGlmaWVyIGZvciAiCi0gICAgImVudW0tdmFsdWVkIG9w
dGlvbiBcImZvb1wiLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBFbnVt
T3B0aW9uVmFsdWVJc05vdEVudW1WYWx1ZU5hbWUpIHsKLSAgQnVpbGREZXNjcmlwdG9yTWVzc2Fn
ZXNJblRlc3RQb29sKCk7Ci0KLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJm
b28ucHJvdG9cIiAiCi0gICAgImRlcGVuZGVuY3k6IFwiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0
b3IucHJvdG9cIiAiCi0gICAgImVudW1fdHlwZSB7IG5hbWU6IFwiRm9vRW51bVwiIHZhbHVlIHsg
bmFtZTogXCJCQVJcIiBudW1iZXI6IDEgfSAiCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlIHsgbmFtZTogXCJCQVpcIiBudW1iZXI6IDIgfSB9IgotICAgICJleHRlbnNp
b24geyBuYW1lOiBcImZvb1wiIG51bWJlcjogNzY3Mjc1NyBsYWJlbDogTEFCRUxfT1BUSU9OQUwg
IgotICAgICIgICAgICAgICAgICB0eXBlOiBUWVBFX0VOVU0gdHlwZV9uYW1lOiBcIkZvb0VudW1c
IiAiCi0gICAgIiAgICAgICAgICAgIGV4dGVuZGVlOiBcImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0
aW9uc1wiIH0iCi0gICAgIm9wdGlvbnMgeyB1bmludGVycHJldGVkX29wdGlvbiB7IG5hbWUgeyBu
YW1lX3BhcnQ6IFwiZm9vXCIgIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNfZXh0ZW5zaW9uOiB0cnVlIH0gIgotICAgICIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyX3ZhbHVlOiBcIlFVVVhcIiB9IH0iLAotCi0gICAgImZv
by5wcm90bzogZm9vLnByb3RvOiBPUFRJT05fVkFMVUU6IEVudW0gdHlwZSBcIkZvb0VudW1cIiBo
YXMgbm8gdmFsdWUgIgotICAgICJuYW1lZCBcIlFVVVhcIiBmb3Igb3B0aW9uIFwiZm9vXCIuXG4i
KTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEVudW1PcHRpb25WYWx1ZUlzU2li
bGluZ0VudW1WYWx1ZU5hbWUpIHsKLSAgQnVpbGREZXNjcmlwdG9yTWVzc2FnZXNJblRlc3RQb29s
KCk7Ci0KLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJvdG9cIiAi
Ci0gICAgImRlcGVuZGVuY3k6IFwiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG9cIiAi
Ci0gICAgImVudW1fdHlwZSB7IG5hbWU6IFwiRm9vRW51bTFcIiB2YWx1ZSB7IG5hbWU6IFwiQkFS
XCIgbnVtYmVyOiAxIH0gIgotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgeyBuYW1lOiBcIkJBWlwiIG51bWJlcjogMiB9IH0iCi0gICAgImVudW1fdHlwZSB7IG5hbWU6
IFwiRm9vRW51bTJcIiB2YWx1ZSB7IG5hbWU6IFwiUVVYXCIgbnVtYmVyOiAxIH0gIgotICAgICIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgeyBuYW1lOiBcIlFVVVhcIiBudW1i
ZXI6IDIgfSB9IgotICAgICJleHRlbnNpb24geyBuYW1lOiBcImZvb1wiIG51bWJlcjogNzY3Mjc1
NyBsYWJlbDogTEFCRUxfT1BUSU9OQUwgIgotICAgICIgICAgICAgICAgICB0eXBlOiBUWVBFX0VO
VU0gdHlwZV9uYW1lOiBcIkZvb0VudW0xXCIgIgotICAgICIgICAgICAgICAgICBleHRlbmRlZTog
XCJnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnNcIiB9IgotICAgICJvcHRpb25zIHsgdW5pbnRl
cnByZXRlZF9vcHRpb24geyBuYW1lIHsgbmFtZV9wYXJ0OiBcImZvb1wiICIKLSAgICAiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V4dGVuc2lvbjogdHJ1ZSB9ICIK
LSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcl92YWx1ZTog
XCJRVVVYXCIgfSB9IiwKLQotICAgICJmb28ucHJvdG86IGZvby5wcm90bzogT1BUSU9OX1ZBTFVF
OiBFbnVtIHR5cGUgXCJGb29FbnVtMVwiIGhhcyBubyB2YWx1ZSAiCi0gICAgIm5hbWVkIFwiUVVV
WFwiIGZvciBvcHRpb24gXCJmb29cIi4gVGhpcyBhcHBlYXJzIHRvIGJlIGEgdmFsdWUgZnJvbSBh
ICIKLSAgICAic2libGluZyB0eXBlLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JU
ZXN0LCBTdHJpbmdPcHRpb25WYWx1ZUlzTm90U3RyaW5nKSB7Ci0gIEJ1aWxkRGVzY3JpcHRvck1l
c3NhZ2VzSW5UZXN0UG9vbCgpOwotCi0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6
IFwiZm9vLnByb3RvXCIgIgotICAgICJkZXBlbmRlbmN5OiBcImdvb2dsZS9wcm90b2J1Zi9kZXNj
cmlwdG9yLnByb3RvXCIgIgotICAgICJleHRlbnNpb24geyBuYW1lOiBcImZvb1wiIG51bWJlcjog
NzY3Mjc1NyBsYWJlbDogTEFCRUxfT1BUSU9OQUwgIgotICAgICIgICAgICAgICAgICB0eXBlOiBU
WVBFX1NUUklORyBleHRlbmRlZTogXCJnb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnNcIiB9Igot
ICAgICJvcHRpb25zIHsgdW5pbnRlcnByZXRlZF9vcHRpb24geyBuYW1lIHsgbmFtZV9wYXJ0OiBc
ImZvb1wiICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
X2V4dGVuc2lvbjogdHJ1ZSB9ICIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcl92YWx1ZTogXCJRVVVYXCIgfSB9IiwKLQotICAgICJmb28ucHJvdG86IGZv
by5wcm90bzogT1BUSU9OX1ZBTFVFOiBWYWx1ZSBtdXN0IGJlIHF1b3RlZCBzdHJpbmcgZm9yICIK
LSAgICAic3RyaW5nIG9wdGlvbiBcImZvb1wiLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9u
RXJyb3JUZXN0LCBEdXBsaWNhdGVFeHRlbnNpb25GaWVsZE51bWJlcikgewotICBCdWlsZERlc2Ny
aXB0b3JNZXNzYWdlc0luVGVzdFBvb2woKTsKLQotICBCdWlsZEZpbGUoCi0gICAgICAibmFtZTog
XCJmb28ucHJvdG9cIiAiCi0gICAgICAiZGVwZW5kZW5jeTogXCJnb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5wcm90b1wiICIKLSAgICAgICJleHRlbnNpb24geyBuYW1lOiBcIm9wdGlvbjFcIiBu
dW1iZXI6IDEwMDAgbGFiZWw6IExBQkVMX09QVElPTkFMICIKLSAgICAgICIgICAgICAgICAgICB0
eXBlOiBUWVBFX0lOVDMyIGV4dGVuZGVlOiBcImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1wi
IH0iKTsKLQotICBCdWlsZEZpbGVXaXRoV2FybmluZ3MoCi0gICAgICAibmFtZTogXCJiYXIucHJv
dG9cIiAiCi0gICAgICAiZGVwZW5kZW5jeTogXCJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5w
cm90b1wiICIKLSAgICAgICJleHRlbnNpb24geyBuYW1lOiBcIm9wdGlvbjJcIiBudW1iZXI6IDEw
MDAgbGFiZWw6IExBQkVMX09QVElPTkFMICIKLSAgICAgICIgICAgICAgICAgICB0eXBlOiBUWVBF
X0lOVDMyIGV4dGVuZGVlOiBcImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1wiIH0iLAotICAg
ICAgImJhci5wcm90bzogb3B0aW9uMjogTlVNQkVSOiBFeHRlbnNpb24gbnVtYmVyIDEwMDAgaGFz
IGFscmVhZHkgYmVlbiB1c2VkICIKLSAgICAgICJpbiBcImdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0
aW9uc1wiIGJ5IGV4dGVuc2lvbiBcIm9wdGlvbjFcIiBkZWZpbmVkIGluICIKLSAgICAgICJmb28u
cHJvdG8uXG4iKTsKLX0KLQotLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXN0cyB0aGF0IGNoZWNr
IGZvciBhZ2dyZWdhdGUgdmFsdWUgcGFyc2luZwotLy8gZXJyb3JzLiAgVGhlICJ2YWx1ZSIgYXJn
dW1lbnQgaXMgZW1iZWRkZWQgaW5zaWRlIHRoZQotLy8gInVuaW50ZXJwcmV0ZWRfb3B0aW9uIiBw
b3J0aW9uIG9mIHRoZSByZXN1bHQuCi1zdGF0aWMgc3RyaW5nIEVtYmVkQWdncmVnYXRlVmFsdWUo
Y29uc3QgY2hhciogdmFsdWUpIHsKLSAgcmV0dXJuIHN0cmluZ3M6OlN1YnN0aXR1dGUoCi0gICAg
ICAibmFtZTogXCJmb28ucHJvdG9cIiAiCi0gICAgICAiZGVwZW5kZW5jeTogXCJnb29nbGUvcHJv
dG9idWYvZGVzY3JpcHRvci5wcm90b1wiICIKLSAgICAgICJtZXNzYWdlX3R5cGUgeyBuYW1lOiBc
IkZvb1wiIH0gIgotICAgICAgImV4dGVuc2lvbiB7IG5hbWU6IFwiZm9vXCIgbnVtYmVyOiA3Njcy
NzU3IGxhYmVsOiBMQUJFTF9PUFRJT05BTCAiCi0gICAgICAiICAgICAgICAgICAgdHlwZTogVFlQ
RV9NRVNTQUdFIHR5cGVfbmFtZTogXCJGb29cIiAiCi0gICAgICAiICAgICAgICAgICAgZXh0ZW5k
ZWU6IFwiZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zXCIgfSIKLSAgICAgICJvcHRpb25zIHsg
dW5pbnRlcnByZXRlZF9vcHRpb24geyBuYW1lIHsgbmFtZV9wYXJ0OiBcImZvb1wiICIKLSAgICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXh0ZW5zaW9uOiB0
cnVlIH0gIgotICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQwIH0gfSIs
Ci0gICAgICB2YWx1ZSk7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBBZ2dyZWdh
dGVWYWx1ZU5vdEZvdW5kKSB7Ci0gIEJ1aWxkRGVzY3JpcHRvck1lc3NhZ2VzSW5UZXN0UG9vbCgp
OwotCi0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgICBFbWJlZEFnZ3JlZ2F0ZVZhbHVlKCJz
dHJpbmdfdmFsdWU6IFwiXCIiKSwKLSAgICAgICJmb28ucHJvdG86IGZvby5wcm90bzogT1BUSU9O
X1ZBTFVFOiBPcHRpb24gXCJmb29cIiBpcyBhIG1lc3NhZ2UuICIKLSAgICAgICJUbyBzZXQgdGhl
IGVudGlyZSBtZXNzYWdlLCB1c2Ugc3ludGF4IGxpa2UgIgotICAgICAgIlwiZm9vID0geyA8cHJv
dG8gdGV4dCBmb3JtYXQ+IH1cIi4gVG8gc2V0IGZpZWxkcyB3aXRoaW4gaXQsIHVzZSAiCi0gICAg
ICAic3ludGF4IGxpa2UgXCJmb28uZm9vID0gdmFsdWVcIi5cbiIpOwotfQotCi1URVNUX0YoVmFs
aWRhdGlvbkVycm9yVGVzdCwgQWdncmVnYXRlVmFsdWVQYXJzZUVycm9yKSB7Ci0gIEJ1aWxkRGVz
Y3JpcHRvck1lc3NhZ2VzSW5UZXN0UG9vbCgpOwotCi0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0g
ICAgICBFbWJlZEFnZ3JlZ2F0ZVZhbHVlKCJhZ2dyZWdhdGVfdmFsdWU6IFwiMSsyXCIiKSwKLSAg
ICAgICJmb28ucHJvdG86IGZvby5wcm90bzogT1BUSU9OX1ZBTFVFOiBFcnJvciB3aGlsZSBwYXJz
aW5nIG9wdGlvbiAiCi0gICAgICAidmFsdWUgZm9yIFwiZm9vXCI6IEV4cGVjdGVkIGlkZW50aWZp
ZXIuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIEFnZ3JlZ2F0ZVZhbHVl
VW5rbm93bkZpZWxkcykgewotICBCdWlsZERlc2NyaXB0b3JNZXNzYWdlc0luVGVzdFBvb2woKTsK
LQotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICAgRW1iZWRBZ2dyZWdhdGVWYWx1ZSgiYWdn
cmVnYXRlX3ZhbHVlOiBcIng6MTAwXCIiKSwKLSAgICAgICJmb28ucHJvdG86IGZvby5wcm90bzog
T1BUSU9OX1ZBTFVFOiBFcnJvciB3aGlsZSBwYXJzaW5nIG9wdGlvbiAiCi0gICAgICAidmFsdWUg
Zm9yIFwiZm9vXCI6IE1lc3NhZ2UgdHlwZSBcIkZvb1wiIGhhcyBubyBmaWVsZCBuYW1lZCBcInhc
Ii5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgTm90TGl0ZUltcG9ydHNM
aXRlKSB7Ci0gIEJ1aWxkRmlsZSgKLSAgICAibmFtZTogXCJiYXIucHJvdG9cIiAiCi0gICAgIm9w
dGlvbnMgeyBvcHRpbWl6ZV9mb3I6IExJVEVfUlVOVElNRSB9ICIpOwotCi0gIEJ1aWxkRmlsZVdp
dGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJkZXBlbmRlbmN5OiBc
ImJhci5wcm90b1wiICIsCi0KLSAgICAiZm9vLnByb3RvOiBmb28ucHJvdG86IE9USEVSOiBGaWxl
cyB0aGF0IGRvIG5vdCB1c2Ugb3B0aW1pemVfZm9yID0gIgotICAgICAgIkxJVEVfUlVOVElNRSBj
YW5ub3QgaW1wb3J0IGZpbGVzIHdoaWNoIGRvIHVzZSB0aGlzIG9wdGlvbi4gIFRoaXMgZmlsZSAi
Ci0gICAgICAiaXMgbm90IGxpdGUsIGJ1dCBpdCBpbXBvcnRzIFwiYmFyLnByb3RvXCIgd2hpY2gg
aXMuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIExpdGVFeHRlbmRzTm90
TGl0ZSkgewotICBCdWlsZEZpbGUoCi0gICAgIm5hbWU6IFwiYmFyLnByb3RvXCIgIgotICAgICJt
ZXNzYWdlX3R5cGU6IHsiCi0gICAgIiAgbmFtZTogXCJCYXJcIiIKLSAgICAiICBleHRlbnNpb25f
cmFuZ2UgeyBzdGFydDogMSBlbmQ6IDEwMDAgfSIKLSAgICAifSIpOwotCi0gIEJ1aWxkRmlsZVdp
dGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJkZXBlbmRlbmN5OiBc
ImJhci5wcm90b1wiICIKLSAgICAib3B0aW9ucyB7IG9wdGltaXplX2ZvcjogTElURV9SVU5USU1F
IH0gIgotICAgICJleHRlbnNpb24geyBuYW1lOiBcImV4dFwiIG51bWJlcjogMTIzIGxhYmVsOiBM
QUJFTF9PUFRJT05BTCAiCi0gICAgIiAgICAgICAgICAgIHR5cGU6IFRZUEVfSU5UMzIgZXh0ZW5k
ZWU6IFwiQmFyXCIgfSIsCi0KLSAgICAiZm9vLnByb3RvOiBleHQ6IEVYVEVOREVFOiBFeHRlbnNp
b25zIHRvIG5vbi1saXRlIHR5cGVzIGNhbiBvbmx5IGJlICIKLSAgICAgICJkZWNsYXJlZCBpbiBu
b24tbGl0ZSBmaWxlcy4gIE5vdGUgdGhhdCB5b3UgY2Fubm90IGV4dGVuZCBhIG5vbi1saXRlICIK
LSAgICAgICJ0eXBlIHRvIGNvbnRhaW4gYSBsaXRlIHR5cGUsIGJ1dCB0aGUgcmV2ZXJzZSBpcyBh
bGxvd2VkLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBOb0xpdGVTZXJ2
aWNlcykgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICJuYW1lOiBcImZvby5wcm90b1wi
ICIKLSAgICAib3B0aW9ucyB7IgotICAgICIgIG9wdGltaXplX2ZvcjogTElURV9SVU5USU1FIgot
ICAgICIgIGNjX2dlbmVyaWNfc2VydmljZXM6IHRydWUiCi0gICAgIiAgamF2YV9nZW5lcmljX3Nl
cnZpY2VzOiB0cnVlIgotICAgICJ9ICIKLSAgICAic2VydmljZSB7IG5hbWU6IFwiRm9vXCIgfSIs
Ci0KLSAgICAiZm9vLnByb3RvOiBGb286IE5BTUU6IEZpbGVzIHdpdGggb3B0aW1pemVfZm9yID0g
TElURV9SVU5USU1FIGNhbm5vdCAiCi0gICAgImRlZmluZSBzZXJ2aWNlcyB1bmxlc3MgeW91IHNl
dCBib3RoIG9wdGlvbnMgY2NfZ2VuZXJpY19zZXJ2aWNlcyBhbmQgIgotICAgICJqYXZhX2dlbmVy
aWNfc2V2aWNlcyB0byBmYWxzZS5cbiIpOwotCi0gIEJ1aWxkRmlsZSgKLSAgICAibmFtZTogXCJi
YXIucHJvdG9cIiAiCi0gICAgIm9wdGlvbnMgeyIKLSAgICAiICBvcHRpbWl6ZV9mb3I6IExJVEVf
UlVOVElNRSIKLSAgICAiICBjY19nZW5lcmljX3NlcnZpY2VzOiBmYWxzZSIKLSAgICAiICBqYXZh
X2dlbmVyaWNfc2VydmljZXM6IGZhbHNlIgotICAgICJ9ICIKLSAgICAic2VydmljZSB7IG5hbWU6
IFwiQmFyXCIgfSIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgUm9sbGJhY2tB
ZnRlckVycm9yKSB7Ci0gIC8vIEJ1aWxkIGEgZmlsZSB3aGljaCBjb250YWlucyBldmVyeSBraW5k
IG9mIGNvbnN0cnVjdCBidXQgcmVmZXJlbmNlcyBhbgotICAvLyB1bmRlZmluZWQgdHlwZS4gIEFs
bCB0aGVzZSBjb25zdHJ1Y3RzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHN5bWJvbCB0YWJsZQotICAv
LyBiZWZvcmUgdGhlIHVuZGVmaW5lZCB0eXBlIGVycm9yIGlzIG5vdGljZWQuICBUaGUgRGVzY3Jp
cHRvclBvb2wgd2lsbCB0aGVuCi0gIC8vIGhhdmUgdG8gcm9sbCBldmVyeXRoaW5nIGJhY2suCi0g
IEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJt
ZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIlRlc3RNZXNzYWdlXCIiCi0gICAgIiAgZmll
bGQgeyBuYW1lOlwiZm9vXCIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIG51
bWJlcjoxIH0iCi0gICAgIn0gIgotICAgICJlbnVtX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIlRl
c3RFbnVtXCIiCi0gICAgIiAgdmFsdWUgeyBuYW1lOlwiQkFSXCIgbnVtYmVyOjEgfSIKLSAgICAi
fSAiCi0gICAgInNlcnZpY2UgeyIKLSAgICAiICBuYW1lOiBcIlRlc3RTZXJ2aWNlXCIiCi0gICAg
IiAgbWV0aG9kIHsiCi0gICAgIiAgICBuYW1lOiBcIkJhelwiIgotICAgICIgICAgaW5wdXRfdHlw
ZTogXCJOb1N1Y2hUeXBlXCIiICAgIC8vIGVycm9yCi0gICAgIiAgICBvdXRwdXRfdHlwZTogXCJU
ZXN0TWVzc2FnZVwiIgotICAgICIgIH0iCi0gICAgIn0iLAotCi0gICAgImZvby5wcm90bzogVGVz
dFNlcnZpY2UuQmF6OiBJTlBVVF9UWVBFOiBcIk5vU3VjaFR5cGVcIiBpcyBub3QgZGVmaW5lZC5c
biIKLSAgICApOwotCi0gIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIHdlIGJ1aWxkIHRoZSBzYW1lIGZp
bGUgYWdhaW4gd2l0aCB0aGUgZXJyb3IgZml4ZWQsCi0gIC8vIGl0IHdvcmtzLiAgSWYgdGhlIGFi
b3ZlIHJvbGxiYWNrIHdhcyBpbmNvbXBsZXRlLCB0aGVuIHNvbWUgc3ltYm9scyB3aWxsCi0gIC8v
IGJlIGxlZnQgZGVmaW5lZCwgYW5kIHRoaXMgc2Vjb25kIGF0dGVtcHQgd2lsbCBmYWlsIHNpbmNl
IGl0IHRyaWVzIHRvCi0gIC8vIHJlLWRlZmluZSB0aGUgc2FtZSBzeW1ib2xzLgotICBCdWlsZEZp
bGUoCi0gICAgIm5hbWU6IFwiZm9vLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAg
ICAiICBuYW1lOiBcIlRlc3RNZXNzYWdlXCIiCi0gICAgIiAgZmllbGQgeyBuYW1lOlwiZm9vXCIg
bGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIG51bWJlcjoxIH0iCi0gICAgIn0g
IgotICAgICJlbnVtX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIlRlc3RFbnVtXCIiCi0gICAgIiAg
dmFsdWUgeyBuYW1lOlwiQkFSXCIgbnVtYmVyOjEgfSIKLSAgICAifSAiCi0gICAgInNlcnZpY2Ug
eyIKLSAgICAiICBuYW1lOiBcIlRlc3RTZXJ2aWNlXCIiCi0gICAgIiAgbWV0aG9kIHsgbmFtZTpc
IkJhelwiIgotICAgICIgICAgICAgICAgIGlucHV0X3R5cGU6XCJUZXN0TWVzc2FnZVwiIgotICAg
ICIgICAgICAgICAgIG91dHB1dF90eXBlOlwiVGVzdE1lc3NhZ2VcIiB9IgotICAgICJ9Iik7Ci19
Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBFcnJvcnNSZXBvcnRlZFRvTG9nRXJyb3Ip
IHsKLSAgLy8gVGVzdCB0aGF0IGVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gR09PR0xFX0xPRyhFUlJP
UikgaWYgbm8gZXJyb3IgY29sbGVjdG9yIGlzCi0gIC8vIHByb3ZpZGVkLgotCi0gIEZpbGVEZXNj
cmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgQVNTRVJUX1RSVUUoVGV4dEZvcm1hdDo6UGFyc2VG
cm9tU3RyaW5nKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBl
IHsgbmFtZTogXCJGb29cIiB9ICIKLSAgICAibWVzc2FnZV90eXBlIHsgbmFtZTogXCJGb29cIiB9
ICIsCi0gICAgJmZpbGVfcHJvdG8pKTsKLQotICB2ZWN0b3I8c3RyaW5nPiBlcnJvcnM7Ci0KLSAg
ewotICAgIFNjb3BlZE1lbW9yeUxvZyBsb2c7Ci0gICAgRVhQRUNUX1RSVUUocG9vbF8uQnVpbGRG
aWxlKGZpbGVfcHJvdG8pID09IE5VTEwpOwotICAgIGVycm9ycyA9IGxvZy5HZXRNZXNzYWdlcyhF
UlJPUik7Ci0gIH0KLQotICBBU1NFUlRfRVEoMiwgZXJyb3JzLnNpemUoKSk7Ci0KLSAgRVhQRUNU
X0VRKCJJbnZhbGlkIHByb3RvIGRlc2NyaXB0b3IgZm9yIGZpbGUgXCJmb28ucHJvdG9cIjoiLCBl
cnJvcnNbMF0pOwotICBFWFBFQ1RfRVEoIiAgRm9vOiBcIkZvb1wiIGlzIGFscmVhZHkgZGVmaW5l
ZC4iLCBlcnJvcnNbMV0pOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgRGlzYWxs
b3dFbnVtQWxpYXMpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28u
cHJvdG9cIiAiCi0gICAgImVudW1fdHlwZSB7IgotICAgICIgIG5hbWU6IFwiQmFyXCIiCi0gICAg
IiAgdmFsdWUgeyBuYW1lOlwiRU5VTV9BXCIgbnVtYmVyOjAgfSIKLSAgICAiICB2YWx1ZSB7IG5h
bWU6XCJFTlVNX0JcIiBudW1iZXI6MCB9IgotICAgICJ9IiwKLSAgICAiZm9vLnByb3RvOiBCYXI6
IE5VTUJFUjogIgotICAgICJcIkVOVU1fQlwiIHVzZXMgdGhlIHNhbWUgZW51bSB2YWx1ZSBhcyBc
IkVOVU1fQVwiLiAiCi0gICAgIklmIHRoaXMgaXMgaW50ZW5kZWQsIHNldCAnb3B0aW9uIGFsbG93
X2FsaWFzID0gdHJ1ZTsnIHRvIHRoZSBlbnVtICIKLSAgICAiZGVmaW5pdGlvbi5cbiIpOwotfQot
Ci1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgQWxsb3dFbnVtQWxpYXMpIHsKLSAgQnVpbGRG
aWxlKAotICAgICJuYW1lOiBcImZvby5wcm90b1wiICIKLSAgICAiZW51bV90eXBlIHsiCi0gICAg
IiAgbmFtZTogXCJCYXJcIiIKLSAgICAiICB2YWx1ZSB7IG5hbWU6XCJFTlVNX0FcIiBudW1iZXI6
MCB9IgotICAgICIgIHZhbHVlIHsgbmFtZTpcIkVOVU1fQlwiIG51bWJlcjowIH0iCi0gICAgIiAg
b3B0aW9ucyB7IGFsbG93X2FsaWFzOiB0cnVlIH0iCi0gICAgIn0iKTsKLX0KLQotVEVTVF9GKFZh
bGlkYXRpb25FcnJvclRlc3QsIFVudXNlZEltcG9ydFdhcm5pbmcpIHsKLSAgcG9vbF8uQWRkVW51
c2VkSW1wb3J0VHJhY2tGaWxlKCJiYXIucHJvdG8iKTsKLSAgQnVpbGRGaWxlKAotICAgICJuYW1l
OiBcImJhci5wcm90b1wiICIKLSAgICAibWVzc2FnZV90eXBlIHsgbmFtZTogXCJCYXJcIiB9Iik7
Ci0KLSAgcG9vbF8uQWRkVW51c2VkSW1wb3J0VHJhY2tGaWxlKCJiYXNlLnByb3RvIik7Ci0gIEJ1
aWxkRmlsZSgKLSAgICAibmFtZTogXCJiYXNlLnByb3RvXCIgIgotICAgICJtZXNzYWdlX3R5cGUg
eyBuYW1lOiBcIkJhc2VcIiB9Iik7Ci0KLSAgcG9vbF8uQWRkVW51c2VkSW1wb3J0VHJhY2tGaWxl
KCJiYXoucHJvdG8iKTsKLSAgQnVpbGRGaWxlKAotICAgICJuYW1lOiBcImJhei5wcm90b1wiICIK
LSAgICAibWVzc2FnZV90eXBlIHsgbmFtZTogXCJCYXpcIiB9Iik7Ci0KLSAgcG9vbF8uQWRkVW51
c2VkSW1wb3J0VHJhY2tGaWxlKCJwdWJsaWMucHJvdG8iKTsKLSAgQnVpbGRGaWxlKAotICAgICJu
YW1lOiBcInB1YmxpYy5wcm90b1wiICIKLSAgICAiZGVwZW5kZW5jeTogXCJiYXIucHJvdG9cIiIK
LSAgICAicHVibGljX2RlcGVuZGVuY3k6IDAiKTsKLQotICAvLyAvLyBmb3J3YXJkLnByb3RvCi0g
IC8vIGltcG9ydCAiYmFzZS5wcm90byIgICAgICAgLy8gTm8gd2FybmluZzogQmFzZSBtZXNzYWdl
IGlzIHVzZWQuCi0gIC8vIGltcG9ydCAiYmFyLnByb3RvIiAgICAgICAgLy8gV2lsbCBsb2cgYSB3
YXJuaW5nLgotICAvLyBpbXBvcnQgcHVibGljICJiYXoucHJvdG8iIC8vIE5vIHdhcm5pbmc6IERv
IG5vdCB0cmFjayBpbXBvcnQgcHVibGljLgotICAvLyBpbXBvcnQgInB1YmxpYy5wcm90byIgICAg
IC8vIE5vIHdhcm5pbmc6IHB1YmxpYy5wcm90byBoYXMgaW1wb3J0IHB1YmxpYy4KLSAgLy8gbWVz
c2FnZSBGb3J3YXJkIHsKLSAgLy8gICBvcHRpb25hbCBCYXNlIGJhc2UgPSAxOwotICAvLyB9Ci0g
IC8vCi0gIHBvb2xfLkFkZFVudXNlZEltcG9ydFRyYWNrRmlsZSgiZm9yd2FyZC5wcm90byIpOwot
ICBCdWlsZEZpbGVXaXRoV2FybmluZ3MoCi0gICAgIm5hbWU6IFwiZm9yd2FyZC5wcm90b1wiIgot
ICAgICJkZXBlbmRlbmN5OiBcImJhc2UucHJvdG9cIiIKLSAgICAiZGVwZW5kZW5jeTogXCJiYXIu
cHJvdG9cIiIKLSAgICAiZGVwZW5kZW5jeTogXCJiYXoucHJvdG9cIiIKLSAgICAiZGVwZW5kZW5j
eTogXCJwdWJsaWMucHJvdG9cIiIKLSAgICAicHVibGljX2RlcGVuZGVuY3k6IDIgIgotICAgICJt
ZXNzYWdlX3R5cGUgeyIKLSAgICAiICBuYW1lOiBcIkZvcndhcmRcIiIKLSAgICAiICBmaWVsZCB7
IG5hbWU6XCJiYXNlXCIgbnVtYmVyOjEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZV9uYW1lOlwi
QmFzZVwiIH0iCi0gICAgIn0iLAotICAgICJmb3J3YXJkLnByb3RvOiBiYXIucHJvdG86IE9USEVS
OiBJbXBvcnQgYmFyLnByb3RvIGJ1dCBub3QgdXNlZC5cbiIpOwotfQotCi1uYW1lc3BhY2Ugewot
dm9pZCBGaWxsVmFsaWRNYXBFbnRyeShGaWxlRGVzY3JpcHRvclByb3RvKiBmaWxlX3Byb3RvKSB7
Ci0gIEFTU0VSVF9UUlVFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZygKLSAgICAgICJuYW1l
OiAnZm9vLnByb3RvJyAiCi0gICAgICAibWVzc2FnZV90eXBlIHsgIgotICAgICAgIiAgbmFtZTog
J0ZvbycgIgotICAgICAgIiAgZmllbGQgeyAiCi0gICAgICAiICAgIG5hbWU6ICdmb29fbWFwJyBu
dW1iZXI6IDEgbGFiZWw6TEFCRUxfUkVQRUFURUQgIgotICAgICAgIiAgICB0eXBlX25hbWU6ICdG
b29NYXBFbnRyeScgIgotICAgICAgIiAgfSAiCi0gICAgICAiICBuZXN0ZWRfdHlwZSB7ICIKLSAg
ICAgICIgICAgbmFtZTogJ0Zvb01hcEVudHJ5JyAiCi0gICAgICAiICAgIG9wdGlvbnMgeyAgbWFw
X2VudHJ5OiB0cnVlIH0gIgotICAgICAgIiAgICBmaWVsZCB7ICIKLSAgICAgICIgICAgICBuYW1l
OiAna2V5JyBudW1iZXI6IDEgdHlwZTpUWVBFX0lOVDMyIGxhYmVsOkxBQkVMX09QVElPTkFMICIK
LSAgICAgICIgICAgfSAiCi0gICAgICAiICAgIGZpZWxkIHsgIgotICAgICAgIiAgICAgIG5hbWU6
ICd2YWx1ZScgbnVtYmVyOiAyIHR5cGU6VFlQRV9JTlQzMiBsYWJlbDpMQUJFTF9PUFRJT05BTCAi
Ci0gICAgICAiICAgIH0gIgotICAgICAgIiAgfSAiCi0gICAgICAifSAiCi0gICAgICAibWVzc2Fn
ZV90eXBlIHsgIgotICAgICAgIiAgbmFtZTogJ0JhcicgIgotICAgICAgIiAgZXh0ZW5zaW9uX3Jh
bmdlIHsgc3RhcnQ6IDEgZW5kOiAxMCB9IgotICAgICAgIn0gIiwKLSAgICAgIGZpbGVfcHJvdG8p
KTsKLX0KLXN0YXRpYyBjb25zdCBjaGFyKiBrTWFwRW50cnlFcnJvck1lc3NhZ2UgPQotICAgICJm
b28ucHJvdG86IEZvby5mb29fbWFwOiBPVEhFUjogbWFwX2VudHJ5IHNob3VsZCBub3QgYmUgc2V0
IGV4cGxpY2l0bHkuICIKLSAgICAiVXNlIG1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IGluc3RlYWQu
XG4iOwotc3RhdGljIGNvbnN0IGNoYXIqIGtNYXBFbnRyeUtleVR5cGVFcnJvck1lc3NhZ2UgPQot
ICAgICJmb28ucHJvdG86IEZvby5mb29fbWFwOiBUWVBFOiBLZXkgaW4gbWFwIGZpZWxkcyBjYW5u
b3QgYmUgZmxvYXQvZG91YmxlLCAiCi0gICAgImJ5dGVzIG9yIG1lc3NhZ2UgdHlwZXMuXG4iOwot
Ci19ICAvLyBuYW1lc3BhY2UKLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5
QmFzZSkgewotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIEZpbGxWYWxpZE1h
cEVudHJ5KCZmaWxlX3Byb3RvKTsKLSAgQnVpbGRGaWxlKGZpbGVfcHJvdG8uRGVidWdTdHJpbmco
KSk7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBNYXBFbnRyeUV4dGVuc2lvblJh
bmdlKSB7Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgRmlsbFZhbGlkTWFw
RW50cnkoJmZpbGVfcHJvdG8pOwotICBUZXh0Rm9ybWF0OjpNZXJnZUZyb21TdHJpbmcoCi0gICAg
ICAiZXh0ZW5zaW9uX3JhbmdlIHsgIgotICAgICAgIiAgc3RhcnQ6IDEwIGVuZDogMjAgIgotICAg
ICAgIn0gIiwKLSAgICAgIGZpbGVfcHJvdG8ubXV0YWJsZV9tZXNzYWdlX3R5cGUoMCktPm11dGFi
bGVfbmVzdGVkX3R5cGUoMCkpOwotICBCdWlsZEZpbGVXaXRoRXJyb3JzKGZpbGVfcHJvdG8uRGVi
dWdTdHJpbmcoKSwga01hcEVudHJ5RXJyb3JNZXNzYWdlKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRp
b25FcnJvclRlc3QsIE1hcEVudHJ5RXh0ZW5zaW9uKSB7Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8g
ZmlsZV9wcm90bzsKLSAgRmlsbFZhbGlkTWFwRW50cnkoJmZpbGVfcHJvdG8pOwotICBUZXh0Rm9y
bWF0OjpNZXJnZUZyb21TdHJpbmcoCi0gICAgICAiZXh0ZW5zaW9uIHsgIgotICAgICAgIiAgbmFt
ZTogJ2Zvb19leHQnIGV4dGVuZGVlOiAnLkJhcicgbnVtYmVyOiA1IgotICAgICAgIn0gIiwKLSAg
ICAgIGZpbGVfcHJvdG8ubXV0YWJsZV9tZXNzYWdlX3R5cGUoMCktPm11dGFibGVfbmVzdGVkX3R5
cGUoMCkpOwotICBCdWlsZEZpbGVXaXRoRXJyb3JzKGZpbGVfcHJvdG8uRGVidWdTdHJpbmcoKSwg
a01hcEVudHJ5RXJyb3JNZXNzYWdlKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3Qs
IE1hcEVudHJ5TmVzdGVkVHlwZSkgewotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87
Ci0gIEZpbGxWYWxpZE1hcEVudHJ5KCZmaWxlX3Byb3RvKTsKLSAgVGV4dEZvcm1hdDo6TWVyZ2VG
cm9tU3RyaW5nKAotICAgICAgIm5lc3RlZF90eXBlIHsgIgotICAgICAgIiAgbmFtZTogJ0Jhcicg
IgotICAgICAgIn0gIiwKLSAgICAgIGZpbGVfcHJvdG8ubXV0YWJsZV9tZXNzYWdlX3R5cGUoMCkt
Pm11dGFibGVfbmVzdGVkX3R5cGUoMCkpOwotICBCdWlsZEZpbGVXaXRoRXJyb3JzKGZpbGVfcHJv
dG8uRGVidWdTdHJpbmcoKSwga01hcEVudHJ5RXJyb3JNZXNzYWdlKTsKLX0KLQotVEVTVF9GKFZh
bGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5RW51bVR5cGVzKSB7Ci0gIEZpbGVEZXNjcmlwdG9y
UHJvdG8gZmlsZV9wcm90bzsKLSAgRmlsbFZhbGlkTWFwRW50cnkoJmZpbGVfcHJvdG8pOwotICBU
ZXh0Rm9ybWF0OjpNZXJnZUZyb21TdHJpbmcoCi0gICAgICAiZW51bV90eXBlIHsgIgotICAgICAg
IiAgbmFtZTogJ0JhckVudW0nICIKLSAgICAgICIgIHZhbHVlIHsgbmFtZTogJ0JBUl9CQVInIG51
bWJlcjowIH0gIgotICAgICAgIn0gIiwKLSAgICAgIGZpbGVfcHJvdG8ubXV0YWJsZV9tZXNzYWdl
X3R5cGUoMCktPm11dGFibGVfbmVzdGVkX3R5cGUoMCkpOwotICBCdWlsZEZpbGVXaXRoRXJyb3Jz
KGZpbGVfcHJvdG8uRGVidWdTdHJpbmcoKSwga01hcEVudHJ5RXJyb3JNZXNzYWdlKTsKLX0KLQot
VEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5RXh0cmFGaWVsZCkgewotICBGaWxl
RGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIEZpbGxWYWxpZE1hcEVudHJ5KCZmaWxlX3By
b3RvKTsKLSAgVGV4dEZvcm1hdDo6TWVyZ2VGcm9tU3RyaW5nKAotICAgICAgImZpZWxkIHsgIgot
ICAgICAgIiAgbmFtZTogJ290aGVyX2ZpZWxkJyAiCi0gICAgICAiICBsYWJlbDogTEFCRUxfT1BU
SU9OQUwgIgotICAgICAgIiAgdHlwZTogVFlQRV9JTlQzMiAiCi0gICAgICAiICBudW1iZXI6IDMg
IgotICAgICAgIn0gIiwKLSAgICAgIGZpbGVfcHJvdG8ubXV0YWJsZV9tZXNzYWdlX3R5cGUoMCkt
Pm11dGFibGVfbmVzdGVkX3R5cGUoMCkpOwotICBCdWlsZEZpbGVXaXRoRXJyb3JzKGZpbGVfcHJv
dG8uRGVidWdTdHJpbmcoKSwga01hcEVudHJ5RXJyb3JNZXNzYWdlKTsKLX0KLQotVEVTVF9GKFZh
bGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5TWVzc2FnZU5hbWUpIHsKLSAgRmlsZURlc2NyaXB0
b3JQcm90byBmaWxlX3Byb3RvOwotICBGaWxsVmFsaWRNYXBFbnRyeSgmZmlsZV9wcm90byk7Ci0g
IGZpbGVfcHJvdG8ubXV0YWJsZV9tZXNzYWdlX3R5cGUoMCktPm11dGFibGVfbmVzdGVkX3R5cGUo
MCktPnNldF9uYW1lKAotICAgICAgIk90aGVyTWFwRW50cnkiKTsKLSAgZmlsZV9wcm90by5tdXRh
YmxlX21lc3NhZ2VfdHlwZSgwKS0+bXV0YWJsZV9maWVsZCgwKS0+c2V0X3R5cGVfbmFtZSgKLSAg
ICAgICJPdGhlck1hcEVudHJ5Iik7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoZmlsZV9wcm90by5E
ZWJ1Z1N0cmluZygpLCBrTWFwRW50cnlFcnJvck1lc3NhZ2UpOwotfQotCi1URVNUX0YoVmFsaWRh
dGlvbkVycm9yVGVzdCwgTWFwRW50cnlOb25lUmVwZWF0ZWRNYXBFbnRyeSkgewotICBGaWxlRGVz
Y3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIEZpbGxWYWxpZE1hcEVudHJ5KCZmaWxlX3Byb3Rv
KTsKLSAgZmlsZV9wcm90by5tdXRhYmxlX21lc3NhZ2VfdHlwZSgwKS0+bXV0YWJsZV9maWVsZCgw
KS0+c2V0X2xhYmVsKAotICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX09QVElPTkFM
KTsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycyhmaWxlX3Byb3RvLkRlYnVnU3RyaW5nKCksIGtNYXBF
bnRyeUVycm9yTWVzc2FnZSk7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBNYXBF
bnRyeURpZmZlcmVudENvbnRhaW5pbmdUeXBlKSB7Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmls
ZV9wcm90bzsKLSAgRmlsbFZhbGlkTWFwRW50cnkoJmZpbGVfcHJvdG8pOwotICAvLyBNb3ZlIHRo
ZSBuZXN0ZWQgTWFwRW50cnkgbWVzc2FnZSBpbnRvIHRoZSB0b3AgbGV2ZWwsIHdoaWNoIHNob3Vs
ZCBub3QgcGFzcwotICAvLyB0aGUgdmFsaWRhdGlvbi4KLSAgZmlsZV9wcm90by5tdXRhYmxlX21l
c3NhZ2VfdHlwZSgpLT5BZGRBbGxvY2F0ZWQoCi0gICAgICBmaWxlX3Byb3RvLm11dGFibGVfbWVz
c2FnZV90eXBlKDApLT5tdXRhYmxlX25lc3RlZF90eXBlKCktPlJlbGVhc2VMYXN0KCkpOwotICBC
dWlsZEZpbGVXaXRoRXJyb3JzKGZpbGVfcHJvdG8uRGVidWdTdHJpbmcoKSwga01hcEVudHJ5RXJy
b3JNZXNzYWdlKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5S2V5
TmFtZSkgewotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIEZpbGxWYWxpZE1h
cEVudHJ5KCZmaWxlX3Byb3RvKTsKLSAgRmllbGREZXNjcmlwdG9yUHJvdG8qIGtleSA9IGZpbGVf
cHJvdG8ubXV0YWJsZV9tZXNzYWdlX3R5cGUoMCkKLSAgICAgIC0+bXV0YWJsZV9uZXN0ZWRfdHlw
ZSgwKQotICAgICAgLT5tdXRhYmxlX2ZpZWxkKDApOwotICBrZXktPnNldF9uYW1lKCJLZXkiKTsK
LSAgQnVpbGRGaWxlV2l0aEVycm9ycyhmaWxlX3Byb3RvLkRlYnVnU3RyaW5nKCksIGtNYXBFbnRy
eUVycm9yTWVzc2FnZSk7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBNYXBFbnRy
eUtleUxhYmVsKSB7Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgRmlsbFZh
bGlkTWFwRW50cnkoJmZpbGVfcHJvdG8pOwotICBGaWVsZERlc2NyaXB0b3JQcm90byoga2V5ID0g
ZmlsZV9wcm90by5tdXRhYmxlX21lc3NhZ2VfdHlwZSgwKQotICAgICAgLT5tdXRhYmxlX25lc3Rl
ZF90eXBlKDApCi0gICAgICAtPm11dGFibGVfZmllbGQoMCk7Ci0gIGtleS0+c2V0X2xhYmVsKEZp
ZWxkRGVzY3JpcHRvclByb3RvOjpMQUJFTF9SRVFVSVJFRCk7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJv
cnMoZmlsZV9wcm90by5EZWJ1Z1N0cmluZygpLCBrTWFwRW50cnlFcnJvck1lc3NhZ2UpOwotfQot
Ci1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgTWFwRW50cnlLZXlOdW1iZXIpIHsKLSAgRmls
ZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICBGaWxsVmFsaWRNYXBFbnRyeSgmZmlsZV9w
cm90byk7Ci0gIEZpZWxkRGVzY3JpcHRvclByb3RvKiBrZXkgPSBmaWxlX3Byb3RvLm11dGFibGVf
bWVzc2FnZV90eXBlKDApCi0gICAgICAtPm11dGFibGVfbmVzdGVkX3R5cGUoMCkKLSAgICAgIC0+
bXV0YWJsZV9maWVsZCgwKTsKLSAga2V5LT5zZXRfbnVtYmVyKDMpOwotICBCdWlsZEZpbGVXaXRo
RXJyb3JzKGZpbGVfcHJvdG8uRGVidWdTdHJpbmcoKSwga01hcEVudHJ5RXJyb3JNZXNzYWdlKTsK
LX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5VmFsdWVOYW1lKSB7Ci0g
IEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgRmlsbFZhbGlkTWFwRW50cnkoJmZp
bGVfcHJvdG8pOwotICBGaWVsZERlc2NyaXB0b3JQcm90byogdmFsdWUgPSBmaWxlX3Byb3RvLm11
dGFibGVfbWVzc2FnZV90eXBlKDApCi0gICAgICAtPm11dGFibGVfbmVzdGVkX3R5cGUoMCkKLSAg
ICAgIC0+bXV0YWJsZV9maWVsZCgxKTsKLSAgdmFsdWUtPnNldF9uYW1lKCJWYWx1ZSIpOwotICBC
dWlsZEZpbGVXaXRoRXJyb3JzKGZpbGVfcHJvdG8uRGVidWdTdHJpbmcoKSwga01hcEVudHJ5RXJy
b3JNZXNzYWdlKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5VmFs
dWVMYWJlbCkgewotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIEZpbGxWYWxp
ZE1hcEVudHJ5KCZmaWxlX3Byb3RvKTsKLSAgRmllbGREZXNjcmlwdG9yUHJvdG8qIHZhbHVlID0g
ZmlsZV9wcm90by5tdXRhYmxlX21lc3NhZ2VfdHlwZSgwKQotICAgICAgLT5tdXRhYmxlX25lc3Rl
ZF90eXBlKDApCi0gICAgICAtPm11dGFibGVfZmllbGQoMSk7Ci0gIHZhbHVlLT5zZXRfbGFiZWwo
RmllbGREZXNjcmlwdG9yUHJvdG86OkxBQkVMX1JFUVVJUkVEKTsKLSAgQnVpbGRGaWxlV2l0aEVy
cm9ycyhmaWxlX3Byb3RvLkRlYnVnU3RyaW5nKCksIGtNYXBFbnRyeUVycm9yTWVzc2FnZSk7Ci19
Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBNYXBFbnRyeVZhbHVlTnVtYmVyKSB7Ci0g
IEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90bzsKLSAgRmlsbFZhbGlkTWFwRW50cnkoJmZp
bGVfcHJvdG8pOwotICBGaWVsZERlc2NyaXB0b3JQcm90byogdmFsdWUgPSBmaWxlX3Byb3RvLm11
dGFibGVfbWVzc2FnZV90eXBlKDApCi0gICAgICAtPm11dGFibGVfbmVzdGVkX3R5cGUoMCkKLSAg
ICAgIC0+bXV0YWJsZV9maWVsZCgxKTsKLSAgdmFsdWUtPnNldF9udW1iZXIoMyk7Ci0gIEJ1aWxk
RmlsZVdpdGhFcnJvcnMoZmlsZV9wcm90by5EZWJ1Z1N0cmluZygpLCBrTWFwRW50cnlFcnJvck1l
c3NhZ2UpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgTWFwRW50cnlLZXlUeXBl
RmxvYXQpIHsKLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICBGaWxsVmFsaWRN
YXBFbnRyeSgmZmlsZV9wcm90byk7Ci0gIEZpZWxkRGVzY3JpcHRvclByb3RvKiBrZXkgPSBmaWxl
X3Byb3RvLm11dGFibGVfbWVzc2FnZV90eXBlKDApCi0gICAgICAtPm11dGFibGVfbmVzdGVkX3R5
cGUoMCkKLSAgICAgIC0+bXV0YWJsZV9maWVsZCgwKTsKLSAga2V5LT5zZXRfdHlwZShGaWVsZERl
c2NyaXB0b3JQcm90bzo6VFlQRV9GTE9BVCk7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoZmlsZV9w
cm90by5EZWJ1Z1N0cmluZygpLCBrTWFwRW50cnlLZXlUeXBlRXJyb3JNZXNzYWdlKTsKLX0KLQot
VEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5S2V5VHlwZURvdWJsZSkgewotICBG
aWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIEZpbGxWYWxpZE1hcEVudHJ5KCZmaWxl
X3Byb3RvKTsKLSAgRmllbGREZXNjcmlwdG9yUHJvdG8qIGtleSA9IGZpbGVfcHJvdG8ubXV0YWJs
ZV9tZXNzYWdlX3R5cGUoMCkKLSAgICAgIC0+bXV0YWJsZV9uZXN0ZWRfdHlwZSgwKQotICAgICAg
LT5tdXRhYmxlX2ZpZWxkKDApOwotICBrZXktPnNldF90eXBlKEZpZWxkRGVzY3JpcHRvclByb3Rv
OjpUWVBFX0RPVUJMRSk7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoZmlsZV9wcm90by5EZWJ1Z1N0
cmluZygpLCBrTWFwRW50cnlLZXlUeXBlRXJyb3JNZXNzYWdlKTsKLX0KLQotVEVTVF9GKFZhbGlk
YXRpb25FcnJvclRlc3QsIE1hcEVudHJ5S2V5VHlwZUJ5dGVzKSB7Ci0gIEZpbGVEZXNjcmlwdG9y
UHJvdG8gZmlsZV9wcm90bzsKLSAgRmlsbFZhbGlkTWFwRW50cnkoJmZpbGVfcHJvdG8pOwotICBG
aWVsZERlc2NyaXB0b3JQcm90byoga2V5ID0gZmlsZV9wcm90by5tdXRhYmxlX21lc3NhZ2VfdHlw
ZSgwKQotICAgICAgLT5tdXRhYmxlX25lc3RlZF90eXBlKDApCi0gICAgICAtPm11dGFibGVfZmll
bGQoMCk7Ci0gIGtleS0+c2V0X3R5cGUoRmllbGREZXNjcmlwdG9yUHJvdG86OlRZUEVfQllURVMp
OwotICBCdWlsZEZpbGVXaXRoRXJyb3JzKGZpbGVfcHJvdG8uRGVidWdTdHJpbmcoKSwga01hcEVu
dHJ5S2V5VHlwZUVycm9yTWVzc2FnZSk7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0
LCBNYXBFbnRyeUtleVR5cGVFbnVtKSB7Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9wcm90
bzsKLSAgRmlsbFZhbGlkTWFwRW50cnkoJmZpbGVfcHJvdG8pOwotICBGaWVsZERlc2NyaXB0b3JQ
cm90byoga2V5ID0gZmlsZV9wcm90by5tdXRhYmxlX21lc3NhZ2VfdHlwZSgwKQotICAgICAgLT5t
dXRhYmxlX25lc3RlZF90eXBlKDApCi0gICAgICAtPm11dGFibGVfZmllbGQoMCk7Ci0gIGtleS0+
Y2xlYXJfdHlwZSgpOwotICBrZXktPnNldF90eXBlX25hbWUoIkJhckVudW0iKTsKLSAgRW51bURl
c2NyaXB0b3JQcm90byogZW51bV9wcm90byA9IGZpbGVfcHJvdG8uYWRkX2VudW1fdHlwZSgpOwot
ICBlbnVtX3Byb3RvLT5zZXRfbmFtZSgiQmFyRW51bSIpOwotICBFbnVtVmFsdWVEZXNjcmlwdG9y
UHJvdG8qIGVudW1fdmFsdWVfcHJvdG8gPSBlbnVtX3Byb3RvLT5hZGRfdmFsdWUoKTsKLSAgZW51
bV92YWx1ZV9wcm90by0+c2V0X25hbWUoIkJBUl9WQUxVRTAiKTsKLSAgZW51bV92YWx1ZV9wcm90
by0+c2V0X251bWJlcigwKTsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycyhmaWxlX3Byb3RvLkRlYnVn
U3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgImZvby5wcm90bzogRm9vLmZvb19tYXA6
IFRZUEU6IEtleSBpbiBtYXAgZmllbGRzIGNhbm5vdCAiCi0gICAgICAgICAgICAgICAgICAgICAg
ImJlIGVudW0gdHlwZXMuXG4iKTsKLSAgLy8gRW51bSBrZXlzIGFyZSBub3QgYWxsb3dlZCBpbiBw
cm90bzMgYXMgd2VsbC4KLSAgLy8gR2V0IHJpZCBvZiBleHRlbnNpb25zIGZvciBwcm90bzMgdG8g
bWFrZSBpdCBwcm90bzMgY29tcGF0aWJsZS4KLSAgZmlsZV9wcm90by5tdXRhYmxlX21lc3NhZ2Vf
dHlwZSgpLT5SZW1vdmVMYXN0KCk7Ci0gIGZpbGVfcHJvdG8uc2V0X3N5bnRheCgicHJvdG8zIik7
Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoZmlsZV9wcm90by5EZWJ1Z1N0cmluZygpLAotICAgICAg
ICAgICAgICAgICAgICAgICJmb28ucHJvdG86IEZvby5mb29fbWFwOiBUWVBFOiBLZXkgaW4gbWFw
IGZpZWxkcyBjYW5ub3QgIgotICAgICAgICAgICAgICAgICAgICAgICJiZSBlbnVtIHR5cGVzLlxu
Iik7Ci19Ci0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5S2V5VHlwZU1l
c3NhZ2UpIHsKLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICBGaWxsVmFsaWRN
YXBFbnRyeSgmZmlsZV9wcm90byk7Ci0gIEZpZWxkRGVzY3JpcHRvclByb3RvKiBrZXkgPSBmaWxl
X3Byb3RvLm11dGFibGVfbWVzc2FnZV90eXBlKDApCi0gICAgICAtPm11dGFibGVfbmVzdGVkX3R5
cGUoMCkKLSAgICAgIC0+bXV0YWJsZV9maWVsZCgwKTsKLSAga2V5LT5jbGVhcl90eXBlKCk7Ci0g
IGtleS0+c2V0X3R5cGVfbmFtZSgiLkJhciIpOwotICBCdWlsZEZpbGVXaXRoRXJyb3JzKGZpbGVf
cHJvdG8uRGVidWdTdHJpbmcoKSwga01hcEVudHJ5S2V5VHlwZUVycm9yTWVzc2FnZSk7Ci19Ci0K
LVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBNYXBFbnRyeUNvbmZsaWN0c1dpdGhGaWVsZCkg
ewotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIEZpbGxWYWxpZE1hcEVudHJ5
KCZmaWxlX3Byb3RvKTsKLSAgVGV4dEZvcm1hdDo6TWVyZ2VGcm9tU3RyaW5nKAotICAgICAgImZp
ZWxkIHsgIgotICAgICAgIiAgbmFtZTogJ0Zvb01hcEVudHJ5JyAiCi0gICAgICAiICB0eXBlOiBU
WVBFX0lOVDMyICIKLSAgICAgICIgIGxhYmVsOiBMQUJFTF9PUFRJT05BTCAiCi0gICAgICAiICBu
dW1iZXI6IDEwMCAiCi0gICAgICAifSIsCi0gICAgICBmaWxlX3Byb3RvLm11dGFibGVfbWVzc2Fn
ZV90eXBlKDApKTsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAgIGZpbGVfcHJvdG8uRGVi
dWdTdHJpbmcoKSwKLSAgICAgICJmb28ucHJvdG86IEZvby5Gb29NYXBFbnRyeTogTkFNRTogXCJG
b29NYXBFbnRyeVwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiAiCi0gICAgICAiXCJGb29cIi5cbiIK
LSAgICAgICJmb28ucHJvdG86IEZvby5mb29fbWFwOiBUWVBFOiBcIkZvb01hcEVudHJ5XCIgaXMg
bm90IGRlZmluZWQuXG4iCi0gICAgICAiZm9vLnByb3RvOiBGb286IE5BTUU6IEV4cGFuZGVkIG1h
cCBlbnRyeSB0eXBlIEZvb01hcEVudHJ5IGNvbmZsaWN0cyAiCi0gICAgICAid2l0aCBhbiBleGlz
dGluZyBmaWVsZC5cbiIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgTWFwRW50
cnlDb25mbGljdHNXaXRoTWVzc2FnZSkgewotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJv
dG87Ci0gIEZpbGxWYWxpZE1hcEVudHJ5KCZmaWxlX3Byb3RvKTsKLSAgVGV4dEZvcm1hdDo6TWVy
Z2VGcm9tU3RyaW5nKAotICAgICAgIm5lc3RlZF90eXBlIHsgIgotICAgICAgIiAgbmFtZTogJ0Zv
b01hcEVudHJ5JyAiCi0gICAgICAifSIsCi0gICAgICBmaWxlX3Byb3RvLm11dGFibGVfbWVzc2Fn
ZV90eXBlKDApKTsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAgIGZpbGVfcHJvdG8uRGVi
dWdTdHJpbmcoKSwKLSAgICAgICJmb28ucHJvdG86IEZvby5Gb29NYXBFbnRyeTogTkFNRTogXCJG
b29NYXBFbnRyeVwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiAiCi0gICAgICAiXCJGb29cIi5cbiIK
LSAgICAgICJmb28ucHJvdG86IEZvbzogTkFNRTogRXhwYW5kZWQgbWFwIGVudHJ5IHR5cGUgRm9v
TWFwRW50cnkgY29uZmxpY3RzICIKLSAgICAgICJ3aXRoIGFuIGV4aXN0aW5nIG5lc3RlZCBtZXNz
YWdlIHR5cGUuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIE1hcEVudHJ5
Q29uZmxpY3RzV2l0aEVudW0pIHsKLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwot
ICBGaWxsVmFsaWRNYXBFbnRyeSgmZmlsZV9wcm90byk7Ci0gIFRleHRGb3JtYXQ6Ok1lcmdlRnJv
bVN0cmluZygKLSAgICAgICJlbnVtX3R5cGUgeyAiCi0gICAgICAiICBuYW1lOiAnRm9vTWFwRW50
cnknICIKLSAgICAgICIgIHZhbHVlIHsgbmFtZTogJ0VOVFJZX0ZPTycgbnVtYmVyOiAwIH0iCi0g
ICAgICAifSIsCi0gICAgICBmaWxlX3Byb3RvLm11dGFibGVfbWVzc2FnZV90eXBlKDApKTsKLSAg
QnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAgIGZpbGVfcHJvdG8uRGVidWdTdHJpbmcoKSwKLSAg
ICAgICJmb28ucHJvdG86IEZvby5Gb29NYXBFbnRyeTogTkFNRTogXCJGb29NYXBFbnRyeVwiIGlz
IGFscmVhZHkgZGVmaW5lZCBpbiAiCi0gICAgICAiXCJGb29cIi5cbiIKLSAgICAgICJmb28ucHJv
dG86IEZvbzogTkFNRTogRXhwYW5kZWQgbWFwIGVudHJ5IHR5cGUgRm9vTWFwRW50cnkgY29uZmxp
Y3RzICIKLSAgICAgICJ3aXRoIGFuIGV4aXN0aW5nIGVudW0gdHlwZS5cbiIpOwotfQotCi1URVNU
X0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgTWFwRW50cnlDb25mbGljdHNXaXRoT25lb2YpIHsKLSAg
RmlsZURlc2NyaXB0b3JQcm90byBmaWxlX3Byb3RvOwotICBGaWxsVmFsaWRNYXBFbnRyeSgmZmls
ZV9wcm90byk7Ci0gIFRleHRGb3JtYXQ6Ok1lcmdlRnJvbVN0cmluZygKLSAgICAgICJvbmVvZl9k
ZWNsIHsgIgotICAgICAgIiAgbmFtZTogJ0Zvb01hcEVudHJ5JyAiCi0gICAgICAifSIKLSAgICAg
ICJmaWVsZCB7ICIKLSAgICAgICIgIG5hbWU6ICdpbnRfZmllbGQnICIKLSAgICAgICIgIHR5cGU6
IFRZUEVfSU5UMzIgIgotICAgICAgIiAgbGFiZWw6IExBQkVMX09QVElPTkFMICIKLSAgICAgICIg
IG9uZW9mX2luZGV4OiAwICIKLSAgICAgICIgIG51bWJlcjogMTAwICIKLSAgICAgICJ9ICIsCi0g
ICAgICBmaWxlX3Byb3RvLm11dGFibGVfbWVzc2FnZV90eXBlKDApKTsKLSAgQnVpbGRGaWxlV2l0
aEVycm9ycygKLSAgICAgIGZpbGVfcHJvdG8uRGVidWdTdHJpbmcoKSwKLSAgICAgICJmb28ucHJv
dG86IEZvby5Gb29NYXBFbnRyeTogTkFNRTogXCJGb29NYXBFbnRyeVwiIGlzIGFscmVhZHkgZGVm
aW5lZCBpbiAiCi0gICAgICAiXCJGb29cIi5cbiIKLSAgICAgICJmb28ucHJvdG86IEZvby5mb29f
bWFwOiBUWVBFOiBcIkZvb01hcEVudHJ5XCIgaXMgbm90IGRlZmluZWQuXG4iCi0gICAgICAiZm9v
LnByb3RvOiBGb286IE5BTUU6IEV4cGFuZGVkIG1hcCBlbnRyeSB0eXBlIEZvb01hcEVudHJ5IGNv
bmZsaWN0cyAiCi0gICAgICAid2l0aCBhbiBleGlzdGluZyBvbmVvZiB0eXBlLlxuIik7Ci19Ci0K
LVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBNYXBFbnRyeVVzZXNOb25lWmVyb0VudW1EZWZh
dWx0VmFsdWUpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAibmFtZTogXCJmb28ucHJv
dG9cIiAiCi0gICAgImVudW1fdHlwZSB7IgotICAgICIgIG5hbWU6IFwiQmFyXCIiCi0gICAgIiAg
dmFsdWUgeyBuYW1lOlwiRU5VTV9BXCIgbnVtYmVyOjEgfSIKLSAgICAiICB2YWx1ZSB7IG5hbWU6
XCJFTlVNX0JcIiBudW1iZXI6MiB9IgotICAgICJ9IgotICAgICJtZXNzYWdlX3R5cGUgeyIKLSAg
ICAiICBuYW1lOiAnRm9vJyAiCi0gICAgIiAgZmllbGQgeyAiCi0gICAgIiAgICBuYW1lOiAnZm9v
X21hcCcgbnVtYmVyOiAxIGxhYmVsOkxBQkVMX1JFUEVBVEVEICIKLSAgICAiICAgIHR5cGVfbmFt
ZTogJ0Zvb01hcEVudHJ5JyAiCi0gICAgIiAgfSAiCi0gICAgIiAgbmVzdGVkX3R5cGUgeyAiCi0g
ICAgIiAgICBuYW1lOiAnRm9vTWFwRW50cnknICIKLSAgICAiICAgIG9wdGlvbnMgeyAgbWFwX2Vu
dHJ5OiB0cnVlIH0gIgotICAgICIgICAgZmllbGQgeyAiCi0gICAgIiAgICAgIG5hbWU6ICdrZXkn
IG51bWJlcjogMSB0eXBlOlRZUEVfSU5UMzIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgIgotICAgICIg
ICAgfSAiCi0gICAgIiAgICBmaWVsZCB7ICIKLSAgICAiICAgICAgbmFtZTogJ3ZhbHVlJyBudW1i
ZXI6IDIgdHlwZV9uYW1lOlwiQmFyXCIgbGFiZWw6TEFCRUxfT1BUSU9OQUwgIgotICAgICIgICAg
fSAiCi0gICAgIiAgfSAiCi0gICAgIn0iLAotICAgICJmb28ucHJvdG86IEZvby5mb29fbWFwOiAi
Ci0gICAgIlRZUEU6IEVudW0gdmFsdWUgaW4gbWFwIG11c3QgZGVmaW5lIDAgYXMgdGhlIGZpcnN0
IHZhbHVlLlxuIik7Ci19Ci0KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBQcm90bzNSZXF1
aXJlZEZpZWxkcykgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICAgIm5hbWU6ICdmb28u
cHJvdG8nICIKLSAgICAgICJzeW50YXg6ICdwcm90bzMnICIKLSAgICAgICJtZXNzYWdlX3R5cGUg
eyAiCi0gICAgICAiICBuYW1lOiAnRm9vJyAiCi0gICAgICAiICBmaWVsZCB7IG5hbWU6J2Zvbycg
bnVtYmVyOjEgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX0lOVDMyIH0gIgotICAgICAg
In0iLAotICAgICAgImZvby5wcm90bzogRm9vLmZvbzogT1RIRVI6IFJlcXVpcmVkIGZpZWxkcyBh
cmUgbm90IGFsbG93ZWQgaW4gIgotICAgICAgInByb3RvMy5cbiIpOwotCi0gIC8vIGFwcGxpZWQg
dG8gbmVzdGVkIHR5cGVzIGFzIHdlbGwuCi0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgICAi
bmFtZTogJ2Zvby5wcm90bycgIgotICAgICAgInN5bnRheDogJ3Byb3RvMycgIgotICAgICAgIm1l
c3NhZ2VfdHlwZSB7ICIKLSAgICAgICIgIG5hbWU6ICdGb28nICIKLSAgICAgICIgIG5lc3RlZF90
eXBlIHsgIgotICAgICAgIiAgICBuYW1lIDogJ0JhcicgIgotICAgICAgIiAgICBmaWVsZCB7IG5h
bWU6J2JhcicgbnVtYmVyOjEgbGFiZWw6TEFCRUxfUkVRVUlSRUQgdHlwZTpUWVBFX0lOVDMyIH0g
IgotICAgICAgIiAgfSAiCi0gICAgICAifSIsCi0gICAgICAiZm9vLnByb3RvOiBGb28uQmFyLmJh
cjogT1RIRVI6IFJlcXVpcmVkIGZpZWxkcyBhcmUgbm90IGFsbG93ZWQgaW4gIgotICAgICAgInBy
b3RvMy5cbiIpOwotCi0gIC8vIG9wdGlvbmFsIGFuZCByZXBlYXRlZCBmaWVsZHMgYXJlIE9LLgot
ICBCdWlsZEZpbGUoCi0gICAgICAibmFtZTogJ2Zvby5wcm90bycgIgotICAgICAgInN5bnRheDog
J3Byb3RvMycgIgotICAgICAgIm1lc3NhZ2VfdHlwZSB7ICIKLSAgICAgICIgIG5hbWU6ICdGb28n
ICIKLSAgICAgICIgIGZpZWxkIHsgbmFtZTonZm9vJyBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJ
T05BTCB0eXBlOlRZUEVfSU5UMzIgfSAiCi0gICAgICAiICBmaWVsZCB7IG5hbWU6J2JhcicgbnVt
YmVyOjIgbGFiZWw6TEFCRUxfUkVQRUFURUQgdHlwZTpUWVBFX0lOVDMyIH0gIgotICAgICAgIn0i
KTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFZhbGlkYXRlUHJvdG8zRGVmYXVs
dFZhbHVlKSB7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgICAibmFtZTogJ2Zvby5wcm90
bycgIgotICAgICAgInN5bnRheDogJ3Byb3RvMycgIgotICAgICAgIm1lc3NhZ2VfdHlwZSB7ICIK
LSAgICAgICIgIG5hbWU6ICdGb28nICIKLSAgICAgICIgIGZpZWxkIHsgbmFtZTonZm9vJyBudW1i
ZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIgIgotICAgICAgIiAgICAg
ICAgICBkZWZhdWx0X3ZhbHVlOiAnMScgfSIKLSAgICAgICJ9IiwKLSAgICAgICJmb28ucHJvdG86
IEZvby5mb286IE9USEVSOiBFeHBsaWNpdCBkZWZhdWx0IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQg
aW4gIgotICAgICAgInByb3RvMy5cbiIpOwotCi0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAg
ICAibmFtZTogJ2Zvby5wcm90bycgIgotICAgICAgInN5bnRheDogJ3Byb3RvMycgIgotICAgICAg
Im1lc3NhZ2VfdHlwZSB7ICIKLSAgICAgICIgIG5hbWU6ICdGb28nICIKLSAgICAgICIgIG5lc3Rl
ZF90eXBlIHsgIgotICAgICAgIiAgICBuYW1lIDogJ0JhcicgIgotICAgICAgIiAgICBmaWVsZCB7
IG5hbWU6J2JhcicgbnVtYmVyOjEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMy
ICIKLSAgICAgICIgICAgICAgICAgICBkZWZhdWx0X3ZhbHVlOiAnMScgfSIKLSAgICAgICIgIH0g
IgotICAgICAgIn0iLAotICAgICAgImZvby5wcm90bzogRm9vLkJhci5iYXI6IE9USEVSOiBFeHBs
aWNpdCBkZWZhdWx0IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgIgotICAgICAgImluIHByb3RvMy5c
biIpOwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgVmFsaWRhdGVQcm90bzNFeHRl
bnNpb25SYW5nZSkgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICAgIm5hbWU6ICdmb28u
cHJvdG8nICIKLSAgICAgICJzeW50YXg6ICdwcm90bzMnICIKLSAgICAgICJtZXNzYWdlX3R5cGUg
eyAiCi0gICAgICAiICBuYW1lOiAnRm9vJyAiCi0gICAgICAiICBmaWVsZCB7IG5hbWU6J2Zvbycg
bnVtYmVyOjEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgdHlwZTpUWVBFX0lOVDMyIH0gIgotICAgICAg
IiAgZXh0ZW5zaW9uX3JhbmdlIHsgc3RhcnQ6MTAgZW5kOjEwMCB9ICIKLSAgICAgICJ9IiwKLSAg
ICAgICJmb28ucHJvdG86IEZvbzogT1RIRVI6IEV4dGVuc2lvbiByYW5nZXMgYXJlIG5vdCBhbGxv
d2VkIGluICIKLSAgICAgICJwcm90bzMuXG4iKTsKLQotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAot
ICAgICAgIm5hbWU6ICdmb28ucHJvdG8nICIKLSAgICAgICJzeW50YXg6ICdwcm90bzMnICIKLSAg
ICAgICJtZXNzYWdlX3R5cGUgeyAiCi0gICAgICAiICBuYW1lOiAnRm9vJyAiCi0gICAgICAiICBu
ZXN0ZWRfdHlwZSB7ICIKLSAgICAgICIgICAgbmFtZSA6ICdCYXInICIKLSAgICAgICIgICAgZmll
bGQgeyBuYW1lOidiYXInIG51bWJlcjoxIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9J
TlQzMiB9ICIKLSAgICAgICIgICAgZXh0ZW5zaW9uX3JhbmdlIHsgc3RhcnQ6MTAgZW5kOjEwMCB9
ICIKLSAgICAgICIgIH0gIgotICAgICAgIn0iLAotICAgICAgImZvby5wcm90bzogRm9vLkJhcjog
T1RIRVI6IEV4dGVuc2lvbiByYW5nZXMgYXJlIG5vdCBhbGxvd2VkIGluICIKLSAgICAgICJwcm90
bzMuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFZhbGlkYXRlUHJvdG8z
TWVzc2FnZVNldFdpcmVGb3JtYXQpIHsKLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAgICJu
YW1lOiAnZm9vLnByb3RvJyAiCi0gICAgICAic3ludGF4OiAncHJvdG8zJyAiCi0gICAgICAibWVz
c2FnZV90eXBlIHsgIgotICAgICAgIiAgbmFtZTogJ0ZvbycgIgotICAgICAgIiAgb3B0aW9ucyB7
IG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0OiB0cnVlIH0gIgotICAgICAgIn0iLAotICAgICAgImZv
by5wcm90bzogRm9vOiBPVEhFUjogTWVzc2FnZVNldCBpcyBub3Qgc3VwcG9ydGVkICIKLSAgICAg
ICJpbiBwcm90bzMuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRpb25FcnJvclRlc3QsIFZhbGlk
YXRlUHJvdG8zRW51bSkgewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICAgIm5hbWU6ICdm
b28ucHJvdG8nICIKLSAgICAgICJzeW50YXg6ICdwcm90bzMnICIKLSAgICAgICJlbnVtX3R5cGUg
eyAiCi0gICAgICAiICBuYW1lOiAnRm9vRW51bScgIgotICAgICAgIiAgdmFsdWUgeyBuYW1lOiAn
Rk9PX0ZPTycgbnVtYmVyOjEgfSAiCi0gICAgICAifSIsCi0gICAgICAiZm9vLnByb3RvOiBGb29F
bnVtOiBPVEhFUjogVGhlIGZpcnN0IGVudW0gdmFsdWUgbXVzdCBiZSAiCi0gICAgICAiemVybyBp
biBwcm90bzMuXG4iKTsKLQotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICAgIm5hbWU6ICdm
b28ucHJvdG8nICIKLSAgICAgICJzeW50YXg6ICdwcm90bzMnICIKLSAgICAgICJtZXNzYWdlX3R5
cGUgeyAiCi0gICAgICAiICBuYW1lOiAnRm9vJyAiCi0gICAgICAiICBlbnVtX3R5cGUgeyAiCi0g
ICAgICAiICAgIG5hbWU6ICdGb29FbnVtJyAiCi0gICAgICAiICAgIHZhbHVlIHsgbmFtZTogJ0ZP
T19GT08nIG51bWJlcjoxIH0gIgotICAgICAgIiAgfSAiCi0gICAgICAifSIsCi0gICAgICAiZm9v
LnByb3RvOiBGb28uRm9vRW51bTogT1RIRVI6IFRoZSBmaXJzdCBlbnVtIHZhbHVlIG11c3QgYmUg
IgotICAgICAgInplcm8gaW4gcHJvdG8zLlxuIik7Ci0KLSAgLy8gdmFsaWQgY2FzZS4KLSAgQnVp
bGRGaWxlKAotICAgICAgIm5hbWU6ICdmb28ucHJvdG8nICIKLSAgICAgICJzeW50YXg6ICdwcm90
bzMnICIKLSAgICAgICJlbnVtX3R5cGUgeyAiCi0gICAgICAiICBuYW1lOiAnRm9vRW51bScgIgot
ICAgICAgIiAgdmFsdWUgeyBuYW1lOiAnRk9PX0ZPTycgbnVtYmVyOjAgfSAiCi0gICAgICAifSIp
OwotfQotCi1URVNUX0YoVmFsaWRhdGlvbkVycm9yVGVzdCwgVmFsaWRhdGVQcm90bzNHcm91cCkg
ewotICBCdWlsZEZpbGVXaXRoRXJyb3JzKAotICAgICAgIm5hbWU6ICdmb28ucHJvdG8nICIKLSAg
ICAgICJzeW50YXg6ICdwcm90bzMnICIKLSAgICAgICJtZXNzYWdlX3R5cGUgeyAiCi0gICAgICAi
ICBuYW1lOiAnRm9vJyAiCi0gICAgICAiICBuZXN0ZWRfdHlwZSB7ICIKLSAgICAgICIgICAgbmFt
ZTogJ0Zvb0dyb3VwJyAiCi0gICAgICAiICB9ICIKLSAgICAgICIgIGZpZWxkIHsgbmFtZTonZm9v
X2dyb3VwJyBudW1iZXI6IDEgbGFiZWw6TEFCRUxfT1BUSU9OQUwgIgotICAgICAgIiAgICAgICAg
ICB0eXBlOiBUWVBFX0dST1VQIHR5cGVfbmFtZTonRm9vR3JvdXAnIH0gIgotICAgICAgIn0iLAot
ICAgICAgImZvby5wcm90bzogRm9vLmZvb19ncm91cDogVFlQRTogR3JvdXBzIGFyZSBub3Qgc3Vw
cG9ydGVkIGluIHByb3RvMyAiCi0gICAgICAic3ludGF4LlxuIik7Ci19Ci0KLQotVEVTVF9GKFZh
bGlkYXRpb25FcnJvclRlc3QsIFZhbGlkYXRlUHJvdG8zRW51bUZyb21Qcm90bzIpIHsKLSAgLy8g
RGVmaW5lIGFuIGVudW0gaW4gYSBwcm90bzIgZmlsZS4KLSAgQnVpbGRGaWxlKAotICAgICAgIm5h
bWU6ICdmb28ucHJvdG8nICIKLSAgICAgICJwYWNrYWdlOiAnZm9vJyAiCi0gICAgICAic3ludGF4
OiAncHJvdG8yJyAiCi0gICAgICAiZW51bV90eXBlIHsgIgotICAgICAgIiAgbmFtZTogJ0Zvb0Vu
dW0nICIKLSAgICAgICIgIHZhbHVlIHsgbmFtZTogJ0RFRkFVTFRfT1BUSU9OJyBudW1iZXI6MCB9
ICIKLSAgICAgICJ9Iik7Ci0KLSAgLy8gTm93IHRyeSB0byByZWZlciB0byBpdC4gKEFsbCB0ZXN0
cyBpbiB0aGUgZml4dHVyZSB1c2UgdGhlIHNhbWUgcG9vbCwgc28gd2UKLSAgLy8gY2FuIHJlZmVy
IHRvIHRoZSBlbnVtIGFib3ZlIGluIHRoaXMgZGVmaW5pdGlvbi4pCi0gIEJ1aWxkRmlsZVdpdGhF
cnJvcnMoCi0gICAgICAibmFtZTogJ2Jhci5wcm90bycgIgotICAgICAgImRlcGVuZGVuY3k6ICdm
b28ucHJvdG8nICIKLSAgICAgICJzeW50YXg6ICdwcm90bzMnICIKLSAgICAgICJtZXNzYWdlX3R5
cGUgeyAiCi0gICAgICAiICBuYW1lOiAnRm9vJyAiCi0gICAgICAiICAgIGZpZWxkIHsgbmFtZTon
YmFyJyBudW1iZXI6MSBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfRU5VTSAiCi0gICAg
ICAiICAgICAgICAgICAgdHlwZV9uYW1lOiAnZm9vLkZvb0VudW0nIH0iCi0gICAgICAifSIsCi0g
ICAgICAiYmFyLnByb3RvOiBGb28uYmFyOiBUWVBFOiBFbnVtIHR5cGUgXCJmb28uRm9vRW51bVwi
IGlzIG5vdCBhIHByb3RvMyAiCi0gICAgICAiZW51bSwgYnV0IGlzIHVzZWQgaW4gXCJGb29cIiB3
aGljaCBpcyBhIHByb3RvMyBtZXNzYWdlIHR5cGUuXG4iKTsKLX0KLQotVEVTVF9GKFZhbGlkYXRp
b25FcnJvclRlc3QsIFZhbGlkYXRlUHJvdG8zRXh0ZW5zaW9uKSB7Ci0gIC8vIFZhbGlkIGZvciBv
cHRpb25zLgotICBEZXNjcmlwdG9yUG9vbCBwb29sOwotICBGaWxlRGVzY3JpcHRvclByb3RvIGZp
bGVfcHJvdG87Ci0gIC8vIEFkZCAiZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8iLgot
ICBGaWxlRGVzY3JpcHRvclByb3RvOjpkZXNjcmlwdG9yKCktPmZpbGUoKS0+Q29weVRvKCZmaWxl
X3Byb3RvKTsKLSAgQVNTRVJUX1RSVUUocG9vbC5CdWlsZEZpbGUoZmlsZV9wcm90bykgIT0gTlVM
TCk7Ci0gIC8vIEFkZCAiZm9vLnByb3RvIjoKLSAgLy8gICBpbXBvcnQgImdvb2dsZS9wcm90b2J1
Zi9kZXNjcmlwdG9yLnByb3RvIjsKLSAgLy8gICBleHRlbmQgZ29vZ2xlLnByb3RvYnVmLkZpZWxk
T3B0aW9ucyB7Ci0gIC8vICAgICBvcHRpb25hbCBpbnQzMiBvcHRpb24xID0gMTAwMDsKLSAgLy8g
ICB9Ci0gIGZpbGVfcHJvdG8uQ2xlYXIoKTsKLSAgZmlsZV9wcm90by5zZXRfbmFtZSgiZm9vLnBy
b3RvIik7Ci0gIGZpbGVfcHJvdG8uc2V0X3N5bnRheCgicHJvdG8zIik7Ci0gIGZpbGVfcHJvdG8u
YWRkX2RlcGVuZGVuY3koImdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvIik7Ci0gIEFk
ZEV4dGVuc2lvbigmZmlsZV9wcm90bywgImdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMiLCAi
b3B0aW9uMSIsIDEwMDAsCi0gICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6TEFC
RUxfT1BUSU9OQUwsCi0gICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3JQcm90bzo6VFlQRV9J
TlQzMik7Ci0gIEFTU0VSVF9UUlVFKHBvb2wuQnVpbGRGaWxlKGZpbGVfcHJvdG8pICE9IE5VTEwp
OwotCi0gIC8vIENvcHkgYW5kIGNoYW5nZSB0aGUgcGFja2FnZSBvZiB0aGUgZGVzY3JpcHRvci5w
cm90bwotICBCdWlsZEZpbGUoCi0gICAgICAibmFtZTogJ2dvb2dsZS5wcm90b2J1Zi5wcm90bycg
IgotICAgICAgInN5bnRheDogJ3Byb3RvMicgIgotICAgICAgIm1lc3NhZ2VfdHlwZSB7ICIKLSAg
ICAgICIgIG5hbWU6ICdDb250YWluZXInIGV4dGVuc2lvbl9yYW5nZSB7IHN0YXJ0OiAxIGVuZDog
MTAwMCB9ICIKLSAgICAgICJ9Iik7Ci0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgICAibmFt
ZTogJ2Jhci5wcm90bycgIgotICAgICAgInN5bnRheDogJ3Byb3RvMycgIgotICAgICAgImRlcGVu
ZGVuY3k6ICdnb29nbGUucHJvdG9idWYucHJvdG8nICIKLSAgICAgICJleHRlbnNpb24geyAiCi0g
ICAgICAiICBuYW1lOiAnYmFyJyBudW1iZXI6IDEgbGFiZWw6IExBQkVMX09QVElPTkFMIHR5cGU6
IFRZUEVfSU5UMzIgIgotICAgICAgIiAgZXh0ZW5kZWU6ICdDb250YWluZXInICIKLSAgICAgICJ9
IiwKLSAgICAgICJiYXIucHJvdG86IGJhcjogT1RIRVI6IEV4dGVuc2lvbnMgaW4gcHJvdG8zIGFy
ZSBvbmx5IGFsbG93ZWQgZm9yICIKLSAgICAgICJkZWZpbmluZyBvcHRpb25zLlxuIik7Ci19Ci0K
LS8vIFRlc3QgdGhhdCBmaWVsZCBuYW1lcyB0aGF0IG1heSBjb25mbGljdCBpbiBKU09OIGlzIG5v
dCBhbGxvd2VkIGJ5IHByb3RvYy4KLVRFU1RfRihWYWxpZGF0aW9uRXJyb3JUZXN0LCBWYWxpZGF0
ZVByb3RvM0pzb25OYW1lKSB7Ci0gIC8vIFRoZSBjb21wYXJpc29uIGlzIGNhc2UtaW5zZW5zaXRp
dmUuCi0gIEJ1aWxkRmlsZVdpdGhFcnJvcnMoCi0gICAgICAibmFtZTogJ2Zvby5wcm90bycgIgot
ICAgICAgInN5bnRheDogJ3Byb3RvMycgIgotICAgICAgIm1lc3NhZ2VfdHlwZSB7IgotICAgICAg
IiAgbmFtZTogJ0ZvbyciCi0gICAgICAiICBmaWVsZCB7IG5hbWU6J25hbWUnIG51bWJlcjoxIGxh
YmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiB9IgotICAgICAgIiAgZmllbGQgeyBu
YW1lOidOYW1lJyBudW1iZXI6MiBsYWJlbDpMQUJFTF9PUFRJT05BTCB0eXBlOlRZUEVfSU5UMzIg
fSIKLSAgICAgICJ9IiwKLSAgICAgICJmb28ucHJvdG86IEZvbzogT1RIRVI6IFRoZSBKU09OIGNh
bWNlbC1jYXNlIG5hbWUgb2YgZmllbGQgXCJOYW1lXCIgIgotICAgICAgImNvbmZsaWN0cyB3aXRo
IGZpZWxkIFwibmFtZVwiLiBUaGlzIGlzIG5vdCBhbGxvd2VkIGluIHByb3RvMy5cbiIpOwotICAv
LyBVbmRlcnNjb3JlcyBhcmUgaWdub3JlZC4KLSAgQnVpbGRGaWxlV2l0aEVycm9ycygKLSAgICAg
ICJuYW1lOiAnZm9vLnByb3RvJyAiCi0gICAgICAic3ludGF4OiAncHJvdG8zJyAiCi0gICAgICAi
bWVzc2FnZV90eXBlIHsiCi0gICAgICAiICBuYW1lOiAnRm9vJyIKLSAgICAgICIgIGZpZWxkIHsg
bmFtZTonYWInIG51bWJlcjoxIGxhYmVsOkxBQkVMX09QVElPTkFMIHR5cGU6VFlQRV9JTlQzMiB9
IgotICAgICAgIiAgZmllbGQgeyBuYW1lOidfYV9fYl8nIG51bWJlcjoyIGxhYmVsOkxBQkVMX09Q
VElPTkFMIHR5cGU6VFlQRV9JTlQzMiB9IgotICAgICAgIn0iLAotICAgICAgImZvby5wcm90bzog
Rm9vOiBPVEhFUjogVGhlIEpTT04gY2FtY2VsLWNhc2UgbmFtZSBvZiBmaWVsZCBcIl9hX19iX1wi
ICIKLSAgICAgICJjb25mbGljdHMgd2l0aCBmaWVsZCBcImFiXCIuIFRoaXMgaXMgbm90IGFsbG93
ZWQgaW4gcHJvdG8zLlxuIik7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIERlc2NyaXB0b3JEYXRh
YmFzZQotCi1zdGF0aWMgdm9pZCBBZGRUb0RhdGFiYXNlKFNpbXBsZURlc2NyaXB0b3JEYXRhYmFz
ZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVf
dGV4dCkgewotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfcHJvdG87Ci0gIEVYUEVDVF9UUlVF
KFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZyhmaWxlX3RleHQsICZmaWxlX3Byb3RvKSk7Ci0g
IGRhdGFiYXNlLT5BZGQoZmlsZV9wcm90byk7Ci19Ci0KLWNsYXNzIERhdGFiYXNlQmFja2VkUG9v
bFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICBEYXRhYmFzZUJh
Y2tlZFBvb2xUZXN0KCkge30KLQotICBTaW1wbGVEZXNjcmlwdG9yRGF0YWJhc2UgZGF0YWJhc2Vf
OwotCi0gIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsKLSAgICBBZGRUb0RhdGFiYXNlKCZkYXRhYmFz
ZV8sCi0gICAgICAibmFtZTogJ2Zvby5wcm90bycgIgotICAgICAgIm1lc3NhZ2VfdHlwZSB7IG5h
bWU6J0ZvbycgZXh0ZW5zaW9uX3JhbmdlIHsgc3RhcnQ6IDEgZW5kOiAxMDAgfSB9ICIKLSAgICAg
ICJlbnVtX3R5cGUgeyBuYW1lOidUZXN0RW51bScgdmFsdWUgeyBuYW1lOidEVU1NWScgbnVtYmVy
OjAgfSB9ICIKLSAgICAgICJzZXJ2aWNlIHsgbmFtZTonVGVzdFNlcnZpY2UnIH0gIik7Ci0gICAg
QWRkVG9EYXRhYmFzZSgmZGF0YWJhc2VfLAotICAgICAgIm5hbWU6ICdiYXIucHJvdG8nICIKLSAg
ICAgICJkZXBlbmRlbmN5OiAnZm9vLnByb3RvJyAiCi0gICAgICAibWVzc2FnZV90eXBlIHsgbmFt
ZTonQmFyJyB9ICIKLSAgICAgICJleHRlbnNpb24geyBuYW1lOidmb29fZXh0JyBleHRlbmRlZTog
Jy5Gb28nIG51bWJlcjo1ICIKLSAgICAgICIgICAgICAgICAgICBsYWJlbDpMQUJFTF9PUFRJT05B
TCB0eXBlOlRZUEVfSU5UMzIgfSAiKTsKLSAgICAvLyBCYXogaGFzIGFuIHVuZGVjbGFyZWQgZGVw
ZW5kZW5jeSBvbiBGb28uCi0gICAgQWRkVG9EYXRhYmFzZSgmZGF0YWJhc2VfLAotICAgICAgIm5h
bWU6ICdiYXoucHJvdG8nICIKLSAgICAgICJtZXNzYWdlX3R5cGUgeyAiCi0gICAgICAiICBuYW1l
OidCYXonICIKLSAgICAgICIgIGZpZWxkIHsgbmFtZTonZm9vJyBudW1iZXI6MSBsYWJlbDpMQUJF
TF9PUFRJT05BTCB0eXBlX25hbWU6J0ZvbycgfSAiCi0gICAgICAifSIpOwotICB9Ci0KLSAgLy8g
V2UgY2FuJ3QgaW5qZWN0IGEgZmlsZSBjb250YWluaW5nIGVycm9ycyBpbnRvIGEgRGVzY3JpcHRv
clBvb2wsIHNvIHdlCi0gIC8vIG5lZWQgYW4gYWN0dWFsIG1vY2sgRGVzY3JpcHRvckRhdGFiYXNl
IHRvIHRlc3QgZXJyb3JzLgotICBjbGFzcyBFcnJvckRlc2NyaXB0b3JEYXRhYmFzZSA6IHB1Ymxp
YyBEZXNjcmlwdG9yRGF0YWJhc2UgewotICAgcHVibGljOgotICAgIEVycm9yRGVzY3JpcHRvckRh
dGFiYXNlKCkge30KLSAgICB+RXJyb3JEZXNjcmlwdG9yRGF0YWJhc2UoKSB7fQotCi0gICAgLy8g
aW1wbGVtZW50cyBEZXNjcmlwdG9yRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gICAgYm9vbCBGaW5kRmlsZUJ5TmFtZShjb25zdCBzdHJpbmcmIGZpbGVuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0g
ICAgICAvLyBlcnJvci5wcm90byBhbmQgZXJyb3IyLnByb3RvIGN5Y2xpY2FsbHkgaW1wb3J0IGVh
Y2ggb3RoZXIuCi0gICAgICBpZiAoZmlsZW5hbWUgPT0gImVycm9yLnByb3RvIikgewotICAgICAg
ICBvdXRwdXQtPkNsZWFyKCk7Ci0gICAgICAgIG91dHB1dC0+c2V0X25hbWUoImVycm9yLnByb3Rv
Iik7Ci0gICAgICAgIG91dHB1dC0+YWRkX2RlcGVuZGVuY3koImVycm9yMi5wcm90byIpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gZWxzZSBpZiAoZmlsZW5hbWUgPT0gImVycm9yMi5w
cm90byIpIHsKLSAgICAgICAgb3V0cHV0LT5DbGVhcigpOwotICAgICAgICBvdXRwdXQtPnNldF9u
YW1lKCJlcnJvcjIucHJvdG8iKTsKLSAgICAgICAgb3V0cHV0LT5hZGRfZGVwZW5kZW5jeSgiZXJy
b3IucHJvdG8iKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIGJvb2wgRmluZEZpbGVDb250YWlu
aW5nU3ltYm9sKGNvbnN0IHN0cmluZyYgc3ltYm9sX25hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIGJvb2wgRmluZEZpbGVDb250YWluaW5nRXh0ZW5zaW9uKGNv
bnN0IHN0cmluZyYgY29udGFpbmluZ190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmaWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICB9OwotCi0gIC8vIEEgRGVzY3JpcHRvckRhdGFiYXNlIHRoYXQgY291bnRz
IGhvdyBtYW55IHRpbWVzIGVhY2ggbWV0aG9kIGhhcyBiZWVuCi0gIC8vIGNhbGxlZCBhbmQgZm9y
d2FyZHMgdG8gc29tZSBvdGhlciBEZXNjcmlwdG9yRGF0YWJhc2UuCi0gIGNsYXNzIENhbGxDb3Vu
dGluZ0RhdGFiYXNlIDogcHVibGljIERlc2NyaXB0b3JEYXRhYmFzZSB7Ci0gICBwdWJsaWM6Ci0g
ICAgQ2FsbENvdW50aW5nRGF0YWJhc2UoRGVzY3JpcHRvckRhdGFiYXNlKiB3cmFwcGVkX2RiKQot
ICAgICAgOiB3cmFwcGVkX2RiXyh3cmFwcGVkX2RiKSB7Ci0gICAgICBDbGVhcigpOwotICAgIH0K
LSAgICB+Q2FsbENvdW50aW5nRGF0YWJhc2UoKSB7fQotCi0gICAgRGVzY3JpcHRvckRhdGFiYXNl
KiB3cmFwcGVkX2RiXzsKLQotICAgIGludCBjYWxsX2NvdW50XzsKLQotICAgIHZvaWQgQ2xlYXIo
KSB7Ci0gICAgICBjYWxsX2NvdW50XyA9IDA7Ci0gICAgfQotCi0gICAgLy8gaW1wbGVtZW50cyBE
ZXNjcmlwdG9yRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
Ym9vbCBGaW5kRmlsZUJ5TmFtZShjb25zdCBzdHJpbmcmIGZpbGVuYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gICAgICArK2NhbGxf
Y291bnRfOwotICAgICAgcmV0dXJuIHdyYXBwZWRfZGJfLT5GaW5kRmlsZUJ5TmFtZShmaWxlbmFt
ZSwgb3V0cHV0KTsKLSAgICB9Ci0gICAgYm9vbCBGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woY29u
c3Qgc3RyaW5nJiBzeW1ib2xfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgICAgICsrY2FsbF9jb3VudF87Ci0g
ICAgICByZXR1cm4gd3JhcHBlZF9kYl8tPkZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbChzeW1ib2xf
bmFtZSwgb3V0cHV0KTsKLSAgICB9Ci0gICAgYm9vbCBGaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNp
b24oY29uc3Qgc3RyaW5nJiBjb250YWluaW5nX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgICAgICsrY2Fs
bF9jb3VudF87Ci0gICAgICByZXR1cm4gd3JhcHBlZF9kYl8tPkZpbmRGaWxlQ29udGFpbmluZ0V4
dGVuc2lvbigKLSAgICAgICAgY29udGFpbmluZ190eXBlLCBmaWVsZF9udW1iZXIsIG91dHB1dCk7
Ci0gICAgfQotICB9OwotCi0gIC8vIEEgRGVzY3JpcHRvckRhdGFiYXNlIHdoaWNoIGZhbHNlbHkg
YWx3YXlzIHJldHVybnMgZm9vLnByb3RvIHdoZW4gc2VhcmNoaW5nCi0gIC8vIGZvciBhbnkgc3lt
Ym9sIG9yIGV4dGVuc2lvbiBudW1iZXIuICBUaGlzIHNob3VsZG4ndCBjYXVzZSB0aGUKLSAgLy8g
RGVzY3JpcHRvclBvb2wgdG8gcmVsb2FkIGZvby5wcm90byBpZiBpdCBpcyBhbHJlYWR5IGxvYWRl
ZC4KLSAgY2xhc3MgRmFsc2VQb3NpdGl2ZURhdGFiYXNlIDogcHVibGljIERlc2NyaXB0b3JEYXRh
YmFzZSB7Ci0gICBwdWJsaWM6Ci0gICAgRmFsc2VQb3NpdGl2ZURhdGFiYXNlKERlc2NyaXB0b3JE
YXRhYmFzZSogd3JhcHBlZF9kYikKLSAgICAgIDogd3JhcHBlZF9kYl8od3JhcHBlZF9kYikge30K
LSAgICB+RmFsc2VQb3NpdGl2ZURhdGFiYXNlKCkge30KLQotICAgIERlc2NyaXB0b3JEYXRhYmFz
ZSogd3JhcHBlZF9kYl87Ci0KLSAgICAvLyBpbXBsZW1lbnRzIERlc2NyaXB0b3JEYXRhYmFzZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBib29sIEZpbmRGaWxlQnlOYW1l
KGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBGaWxlRGVz
Y3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgICAgIHJldHVybiB3cmFwcGVkX2RiXy0+RmluZEZp
bGVCeU5hbWUoZmlsZW5hbWUsIG91dHB1dCk7Ci0gICAgfQotICAgIGJvb2wgRmluZEZpbGVDb250
YWluaW5nU3ltYm9sKGNvbnN0IHN0cmluZyYgc3ltYm9sX25hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gICAgICBy
ZXR1cm4gRmluZEZpbGVCeU5hbWUoImZvby5wcm90byIsIG91dHB1dCk7Ci0gICAgfQotICAgIGJv
b2wgRmluZEZpbGVDb250YWluaW5nRXh0ZW5zaW9uKGNvbnN0IHN0cmluZyYgY29udGFpbmluZ190
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZF9udW1i
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JQ
cm90byogb3V0cHV0KSB7Ci0gICAgICByZXR1cm4gRmluZEZpbGVCeU5hbWUoImZvby5wcm90byIs
IG91dHB1dCk7Ci0gICAgfQotICB9OwotfTsKLQotVEVTVF9GKERhdGFiYXNlQmFja2VkUG9vbFRl
c3QsIEZpbmRGaWxlQnlOYW1lKSB7Ci0gIERlc2NyaXB0b3JQb29sIHBvb2woJmRhdGFiYXNlXyk7
Ci0KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGZvbyA9IHBvb2wuRmluZEZpbGVCeU5hbWUoImZv
by5wcm90byIpOwotICBBU1NFUlRfVFJVRShmb28gIT0gTlVMTCk7Ci0gIEVYUEVDVF9FUSgiZm9v
LnByb3RvIiwgZm9vLT5uYW1lKCkpOwotICBBU1NFUlRfRVEoMSwgZm9vLT5tZXNzYWdlX3R5cGVf
Y291bnQoKSk7Ci0gIEVYUEVDVF9FUSgiRm9vIiwgZm9vLT5tZXNzYWdlX3R5cGUoMCktPm5hbWUo
KSk7Ci0KLSAgRVhQRUNUX0VRKGZvbywgcG9vbC5GaW5kRmlsZUJ5TmFtZSgiZm9vLnByb3RvIikp
OwotCi0gIEVYUEVDVF9UUlVFKHBvb2wuRmluZEZpbGVCeU5hbWUoIm5vX3N1Y2hfZmlsZS5wcm90
byIpID09IE5VTEwpOwotfQotCi1URVNUX0YoRGF0YWJhc2VCYWNrZWRQb29sVGVzdCwgRmluZERl
cGVuZGVuY3lCZWZvcmVEZXBlbmRlbnQpIHsKLSAgRGVzY3JpcHRvclBvb2wgcG9vbCgmZGF0YWJh
c2VfKTsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRvciogZm9vID0gcG9vbC5GaW5kRmlsZUJ5TmFt
ZSgiZm9vLnByb3RvIik7Ci0gIEFTU0VSVF9UUlVFKGZvbyAhPSBOVUxMKTsKLSAgRVhQRUNUX0VR
KCJmb28ucHJvdG8iLCBmb28tPm5hbWUoKSk7Ci0gIEFTU0VSVF9FUSgxLCBmb28tPm1lc3NhZ2Vf
dHlwZV9jb3VudCgpKTsKLSAgRVhQRUNUX0VRKCJGb28iLCBmb28tPm1lc3NhZ2VfdHlwZSgwKS0+
bmFtZSgpKTsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRvciogYmFyID0gcG9vbC5GaW5kRmlsZUJ5
TmFtZSgiYmFyLnByb3RvIik7Ci0gIEFTU0VSVF9UUlVFKGJhciAhPSBOVUxMKTsKLSAgRVhQRUNU
X0VRKCJiYXIucHJvdG8iLCBiYXItPm5hbWUoKSk7Ci0gIEFTU0VSVF9FUSgxLCBiYXItPm1lc3Nh
Z2VfdHlwZV9jb3VudCgpKTsKLSAgRVhQRUNUX0VRKCJCYXIiLCBiYXItPm1lc3NhZ2VfdHlwZSgw
KS0+bmFtZSgpKTsKLQotICBBU1NFUlRfRVEoMSwgYmFyLT5kZXBlbmRlbmN5X2NvdW50KCkpOwot
ICBFWFBFQ1RfRVEoZm9vLCBiYXItPmRlcGVuZGVuY3koMCkpOwotfQotCi1URVNUX0YoRGF0YWJh
c2VCYWNrZWRQb29sVGVzdCwgRmluZERlcGVuZGVudEJlZm9yZURlcGVuZGVuY3kpIHsKLSAgRGVz
Y3JpcHRvclBvb2wgcG9vbCgmZGF0YWJhc2VfKTsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRvciog
YmFyID0gcG9vbC5GaW5kRmlsZUJ5TmFtZSgiYmFyLnByb3RvIik7Ci0gIEFTU0VSVF9UUlVFKGJh
ciAhPSBOVUxMKTsKLSAgRVhQRUNUX0VRKCJiYXIucHJvdG8iLCBiYXItPm5hbWUoKSk7Ci0gIEFT
U0VSVF9FUSgxLCBiYXItPm1lc3NhZ2VfdHlwZV9jb3VudCgpKTsKLSAgQVNTRVJUX0VRKCJCYXIi
LCBiYXItPm1lc3NhZ2VfdHlwZSgwKS0+bmFtZSgpKTsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRv
ciogZm9vID0gcG9vbC5GaW5kRmlsZUJ5TmFtZSgiZm9vLnByb3RvIik7Ci0gIEFTU0VSVF9UUlVF
KGZvbyAhPSBOVUxMKTsKLSAgRVhQRUNUX0VRKCJmb28ucHJvdG8iLCBmb28tPm5hbWUoKSk7Ci0g
IEFTU0VSVF9FUSgxLCBmb28tPm1lc3NhZ2VfdHlwZV9jb3VudCgpKTsKLSAgQVNTRVJUX0VRKCJG
b28iLCBmb28tPm1lc3NhZ2VfdHlwZSgwKS0+bmFtZSgpKTsKLQotICBBU1NFUlRfRVEoMSwgYmFy
LT5kZXBlbmRlbmN5X2NvdW50KCkpOwotICBFWFBFQ1RfRVEoZm9vLCBiYXItPmRlcGVuZGVuY3ko
MCkpOwotfQotCi1URVNUX0YoRGF0YWJhc2VCYWNrZWRQb29sVGVzdCwgRmluZEZpbGVDb250YWlu
aW5nU3ltYm9sKSB7Ci0gIERlc2NyaXB0b3JQb29sIHBvb2woJmRhdGFiYXNlXyk7Ci0KLSAgY29u
c3QgRmlsZURlc2NyaXB0b3IqIGZpbGUgPSBwb29sLkZpbmRGaWxlQ29udGFpbmluZ1N5bWJvbCgi
Rm9vIik7Ci0gIEFTU0VSVF9UUlVFKGZpbGUgIT0gTlVMTCk7Ci0gIEVYUEVDVF9FUSgiZm9vLnBy
b3RvIiwgZmlsZS0+bmFtZSgpKTsKLSAgRVhQRUNUX0VRKGZpbGUsIHBvb2wuRmluZEZpbGVCeU5h
bWUoImZvby5wcm90byIpKTsKLQotICBFWFBFQ1RfVFJVRShwb29sLkZpbmRGaWxlQ29udGFpbmlu
Z1N5bWJvbCgiTm9TdWNoU3ltYm9sIikgPT0gTlVMTCk7Ci19Ci0KLVRFU1RfRihEYXRhYmFzZUJh
Y2tlZFBvb2xUZXN0LCBGaW5kTWVzc2FnZVR5cGVCeU5hbWUpIHsKLSAgRGVzY3JpcHRvclBvb2wg
cG9vbCgmZGF0YWJhc2VfKTsKLQotICBjb25zdCBEZXNjcmlwdG9yKiB0eXBlID0gcG9vbC5GaW5k
TWVzc2FnZVR5cGVCeU5hbWUoIkZvbyIpOwotICBBU1NFUlRfVFJVRSh0eXBlICE9IE5VTEwpOwot
ICBFWFBFQ1RfRVEoIkZvbyIsIHR5cGUtPm5hbWUoKSk7Ci0gIEVYUEVDVF9FUSh0eXBlLT5maWxl
KCksIHBvb2wuRmluZEZpbGVCeU5hbWUoImZvby5wcm90byIpKTsKLQotICBFWFBFQ1RfVFJVRShw
b29sLkZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgiTm9TdWNoVHlwZSIpID09IE5VTEwpOwotfQotCi1U
RVNUX0YoRGF0YWJhc2VCYWNrZWRQb29sVGVzdCwgRmluZEV4dGVuc2lvbkJ5TnVtYmVyKSB7Ci0g
IERlc2NyaXB0b3JQb29sIHBvb2woJmRhdGFiYXNlXyk7Ci0KLSAgY29uc3QgRGVzY3JpcHRvciog
Zm9vID0gcG9vbC5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoIkZvbyIpOwotICBBU1NFUlRfVFJVRShm
b28gIT0gTlVMTCk7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBleHRlbnNpb24gPSBwb29s
LkZpbmRFeHRlbnNpb25CeU51bWJlcihmb28sIDUpOwotICBBU1NFUlRfVFJVRShleHRlbnNpb24g
IT0gTlVMTCk7Ci0gIEVYUEVDVF9FUSgiZm9vX2V4dCIsIGV4dGVuc2lvbi0+bmFtZSgpKTsKLSAg
RVhQRUNUX0VRKGV4dGVuc2lvbi0+ZmlsZSgpLCBwb29sLkZpbmRGaWxlQnlOYW1lKCJiYXIucHJv
dG8iKSk7Ci0KLSAgRVhQRUNUX1RSVUUocG9vbC5GaW5kRXh0ZW5zaW9uQnlOdW1iZXIoZm9vLCAx
MikgPT0gTlVMTCk7Ci19Ci0KLVRFU1RfRihEYXRhYmFzZUJhY2tlZFBvb2xUZXN0LCBGaW5kQWxs
RXh0ZW5zaW9ucykgewotICBEZXNjcmlwdG9yUG9vbCBwb29sKCZkYXRhYmFzZV8pOwotCi0gIGNv
bnN0IERlc2NyaXB0b3IqIGZvbyA9IHBvb2wuRmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJGb28iKTsK
LQotICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgIC8vIFJlcGVhdCB0aGUgbG9v
a3VwIHR3aWNlLCB0byBjaGVjayB0aGF0IHdlIGdldCBjb25zaXN0ZW50Ci0gICAgLy8gcmVzdWx0
cyBkZXNwaXRlIHRoZSBmYWxsYmFjayBkYXRhYmFzZSBsb29rdXAgbXV0YXRpbmcgdGhlIHBvb2wu
Ci0gICAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGV4dGVuc2lvbnM7Ci0gICAgcG9v
bC5GaW5kQWxsRXh0ZW5zaW9ucyhmb28sICZleHRlbnNpb25zKTsKLSAgICBBU1NFUlRfRVEoMSwg
ZXh0ZW5zaW9ucy5zaXplKCkpOwotICAgIEVYUEVDVF9FUSg1LCBleHRlbnNpb25zWzBdLT5udW1i
ZXIoKSk7Ci0gIH0KLX0KLQotVEVTVF9GKERhdGFiYXNlQmFja2VkUG9vbFRlc3QsIEVycm9yV2l0
aG91dEVycm9yQ29sbGVjdG9yKSB7Ci0gIEVycm9yRGVzY3JpcHRvckRhdGFiYXNlIGVycm9yX2Rh
dGFiYXNlOwotICBEZXNjcmlwdG9yUG9vbCBwb29sKCZlcnJvcl9kYXRhYmFzZSk7Ci0KLSAgdmVj
dG9yPHN0cmluZz4gZXJyb3JzOwotCi0gIHsKLSAgICBTY29wZWRNZW1vcnlMb2cgbG9nOwotICAg
IEVYUEVDVF9UUlVFKHBvb2wuRmluZEZpbGVCeU5hbWUoImVycm9yLnByb3RvIikgPT0gTlVMTCk7
Ci0gICAgZXJyb3JzID0gbG9nLkdldE1lc3NhZ2VzKEVSUk9SKTsKLSAgfQotCi0gIEVYUEVDVF9G
QUxTRShlcnJvcnMuZW1wdHkoKSk7Ci19Ci0KLVRFU1RfRihEYXRhYmFzZUJhY2tlZFBvb2xUZXN0
LCBFcnJvcldpdGhFcnJvckNvbGxlY3RvcikgewotICBFcnJvckRlc2NyaXB0b3JEYXRhYmFzZSBl
cnJvcl9kYXRhYmFzZTsKLSAgTW9ja0Vycm9yQ29sbGVjdG9yIGVycm9yX2NvbGxlY3RvcjsKLSAg
RGVzY3JpcHRvclBvb2wgcG9vbCgmZXJyb3JfZGF0YWJhc2UsICZlcnJvcl9jb2xsZWN0b3IpOwot
Ci0gIEVYUEVDVF9UUlVFKHBvb2wuRmluZEZpbGVCeU5hbWUoImVycm9yLnByb3RvIikgPT0gTlVM
TCk7Ci0gIEVYUEVDVF9FUSgKLSAgICAiZXJyb3IucHJvdG86IGVycm9yLnByb3RvOiBPVEhFUjog
RmlsZSByZWN1cnNpdmVseSBpbXBvcnRzIGl0c2VsZjogIgotICAgICAgImVycm9yLnByb3RvIC0+
IGVycm9yMi5wcm90byAtPiBlcnJvci5wcm90b1xuIgotICAgICJlcnJvcjIucHJvdG86IGVycm9y
Mi5wcm90bzogT1RIRVI6IEltcG9ydCBcImVycm9yLnByb3RvXCIgd2FzIG5vdCAiCi0gICAgICAi
Zm91bmQgb3IgaGFkIGVycm9ycy5cbiIKLSAgICAiZXJyb3IucHJvdG86IGVycm9yLnByb3RvOiBP
VEhFUjogSW1wb3J0IFwiZXJyb3IyLnByb3RvXCIgd2FzIG5vdCAiCi0gICAgICAiZm91bmQgb3Ig
aGFkIGVycm9ycy5cbiIsCi0gICAgZXJyb3JfY29sbGVjdG9yLnRleHRfKTsKLX0KLQotVEVTVF9G
KERhdGFiYXNlQmFja2VkUG9vbFRlc3QsIFVuZGVjbGFyZWREZXBlbmRlbmN5T25VbmJ1aWx0VHlw
ZSkgewotICAvLyBDaGVjayB0aGF0IHdlIGZpbmQgYW5kIHJlcG9ydCB1bmRlY2xhcmVkIGRlcGVu
ZGVuY2llcyBvbiB0eXBlcyB0aGF0IGV4aXN0Ci0gIC8vIGluIHRoZSBkZXNjcmlwdG9yIGRhdGFi
YXNlIGJ1dCB0aGF0IGhhdmUgbm90IG5vdCBiZWVuIGJ1aWx0IHlldC4KLSAgTW9ja0Vycm9yQ29s
bGVjdG9yIGVycm9yX2NvbGxlY3RvcjsKLSAgRGVzY3JpcHRvclBvb2wgcG9vbCgmZGF0YWJhc2Vf
LCAmZXJyb3JfY29sbGVjdG9yKTsKLSAgRVhQRUNUX1RSVUUocG9vbC5GaW5kTWVzc2FnZVR5cGVC
eU5hbWUoIkJheiIpID09IE5VTEwpOwotICBFWFBFQ1RfRVEoCi0gICAgImJhei5wcm90bzogQmF6
LmZvbzogVFlQRTogXCJGb29cIiBzZWVtcyB0byBiZSBkZWZpbmVkIGluIFwiZm9vLnByb3RvXCIs
ICIKLSAgICAid2hpY2ggaXMgbm90IGltcG9ydGVkIGJ5IFwiYmF6LnByb3RvXCIuICBUbyB1c2Ug
aXQgaGVyZSwgcGxlYXNlIGFkZCAiCi0gICAgInRoZSBuZWNlc3NhcnkgaW1wb3J0LlxuIiwKLSAg
ICBlcnJvcl9jb2xsZWN0b3IudGV4dF8pOwotfQotCi1URVNUX0YoRGF0YWJhc2VCYWNrZWRQb29s
VGVzdCwgUm9sbGJhY2tBZnRlckVycm9yKSB7Ci0gIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCB0cmFj
ZXMgb2YgYmFkIHR5cGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIHBvb2wuIFRoaXMgdXNlZAotICAv
LyB0byBiZSBiLzQ1Mjk0MzYsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IGEgc3ltYm9sIHJlc29sdXRp
b24gZmFpbHVyZSBjb3VsZAotICAvLyBwb3RlbnRpYWxseSBjYXVzZSBhbm90aGVyIGZpbGUgdG8g
YmUgcmVjdXJzaXZlbHkgYnVpbHQsIHdoaWNoIHdvdWxkIHRyaWdnZXIKLSAgLy8gYSBjaGVja3Bv
aW50IF9wYXN0XyBwb3NzaWJseSBpbnZhbGlkIHN5bWJvbHMuCi0gIC8vIEJheiBpcyBkZWZpbmVk
IGluIHRoZSBkYXRhYmFzZSwgYnV0IHRoZSBmaWxlIGlzIGludmFsaWQgYmVjYXVzZSBpdCBpcwot
ICAvLyBtaXNzaW5nIGEgbmVjZXNzYXJ5IGltcG9ydC4KLSAgRGVzY3JpcHRvclBvb2wgcG9vbCgm
ZGF0YWJhc2VfKTsKLSAgRVhQRUNUX1RSVUUocG9vbC5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoIkJh
eiIpID09IE5VTEwpOwotICAvLyBNYWtlIHN1cmUgdGhhdCBzZWFyY2hpbmcgYWdhaW4gZm9yIHRo
ZSBmaWxlIG9yIHRoZSB0eXBlIGZhaWxzLgotICBFWFBFQ1RfVFJVRShwb29sLkZpbmRGaWxlQnlO
YW1lKCJiYXoucHJvdG8iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUocG9vbC5GaW5kTWVzc2Fn
ZVR5cGVCeU5hbWUoIkJheiIpID09IE5VTEwpOwotfQotCi1URVNUX0YoRGF0YWJhc2VCYWNrZWRQ
b29sVGVzdCwgVW5pdHRlc3RQcm90bykgewotICAvLyBUcnkgdG8gbG9hZCBhbGwgb2YgdW5pdHRl
c3QucHJvdG8gZnJvbSBhIERlc2NyaXB0b3JEYXRhYmFzZS4gIFRoaXMgc2hvdWxkCi0gIC8vIHRo
b3JvdWdobHkgdGVzdCBhbGwgcGF0aHMgdGhyb3VnaCBEZXNjcmlwdG9yQnVpbGRlciB0byBpbnN1
cmUgdGhhdCB0aGVyZQotICAvLyBhcmUgbm8gZGVhZGxvY2tpbmcgcHJvYmxlbXMgd2hlbiBwb29s
Xy0+bXV0ZXhfIGlzIG5vbi1OVUxMLgotICBjb25zdCBGaWxlRGVzY3JpcHRvciogb3JpZ2luYWxf
ZmlsZSA9Ci0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6ZGVzY3JpcHRvcigp
LT5maWxlKCk7Ci0KLSAgRGVzY3JpcHRvclBvb2xEYXRhYmFzZSBkYXRhYmFzZSgqRGVzY3JpcHRv
clBvb2w6OmdlbmVyYXRlZF9wb29sKCkpOwotICBEZXNjcmlwdG9yUG9vbCBwb29sKCZkYXRhYmFz
ZSk7Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlX2Zyb21fZGF0YWJhc2UgPQotICAgIHBv
b2wuRmluZEZpbGVCeU5hbWUob3JpZ2luYWxfZmlsZS0+bmFtZSgpKTsKLQotICBBU1NFUlRfVFJV
RShmaWxlX2Zyb21fZGF0YWJhc2UgIT0gTlVMTCk7Ci0KLSAgRmlsZURlc2NyaXB0b3JQcm90byBv
cmlnaW5hbF9maWxlX3Byb3RvOwotICBvcmlnaW5hbF9maWxlLT5Db3B5VG8oJm9yaWdpbmFsX2Zp
bGVfcHJvdG8pOwotCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9mcm9tX2RhdGFiYXNlX3By
b3RvOwotICBmaWxlX2Zyb21fZGF0YWJhc2UtPkNvcHlUbygmZmlsZV9mcm9tX2RhdGFiYXNlX3By
b3RvKTsKLQotICBFWFBFQ1RfRVEob3JpZ2luYWxfZmlsZV9wcm90by5EZWJ1Z1N0cmluZygpLAot
ICAgICAgICAgICAgZmlsZV9mcm9tX2RhdGFiYXNlX3Byb3RvLkRlYnVnU3RyaW5nKCkpOwotCi0g
IC8vIEFsc28gdmVyaWZ5IHRoYXQgQ29weVRvKCkgZGlkIG5vdCBvbWl0IGFueSBpbmZvcm1hdGlv
bi4KLSAgRVhQRUNUX0VRKG9yaWdpbmFsX2ZpbGUtPkRlYnVnU3RyaW5nKCksCi0gICAgICAgICAg
ICBmaWxlX2Zyb21fZGF0YWJhc2UtPkRlYnVnU3RyaW5nKCkpOwotfQotCi1URVNUX0YoRGF0YWJh
c2VCYWNrZWRQb29sVGVzdCwgRG9lc250UmV0cnlEYlVubmVjZXNzYXJpbHkpIHsKLSAgLy8gU2Vh
cmNoaW5nIGZvciBhIGNoaWxkIG9mIGFuIGV4aXN0aW5nIGRlc2NyaXB0b3Igc2hvdWxkIG5ldmVy
IGZhbGwgYmFjawotICAvLyB0byB0aGUgRGVzY3JpcHRvckRhdGFiYXNlIGV2ZW4gaWYgaXQgaXNu
J3QgZm91bmQsIGJlY2F1c2Ugd2Uga25vdyBhbGwKLSAgLy8gY2hpbGRyZW4gYXJlIGFscmVhZHkg
bG9hZGVkLgotICBDYWxsQ291bnRpbmdEYXRhYmFzZSBjYWxsX2NvdW50ZXIoJmRhdGFiYXNlXyk7
Ci0gIERlc2NyaXB0b3JQb29sIHBvb2woJmNhbGxfY291bnRlcik7Ci0KLSAgY29uc3QgRmlsZURl
c2NyaXB0b3IqIGZpbGUgPSBwb29sLkZpbmRGaWxlQnlOYW1lKCJmb28ucHJvdG8iKTsKLSAgQVNT
RVJUX1RSVUUoZmlsZSAhPSBOVUxMKTsKLSAgY29uc3QgRGVzY3JpcHRvciogZm9vID0gcG9vbC5G
aW5kTWVzc2FnZVR5cGVCeU5hbWUoIkZvbyIpOwotICBBU1NFUlRfVFJVRShmb28gIT0gTlVMTCk7
Ci0gIGNvbnN0IEVudW1EZXNjcmlwdG9yKiB0ZXN0X2VudW0gPSBwb29sLkZpbmRFbnVtVHlwZUJ5
TmFtZSgiVGVzdEVudW0iKTsKLSAgQVNTRVJUX1RSVUUodGVzdF9lbnVtICE9IE5VTEwpOwotICBj
b25zdCBTZXJ2aWNlRGVzY3JpcHRvciogdGVzdF9zZXJ2aWNlID0gcG9vbC5GaW5kU2VydmljZUJ5
TmFtZSgiVGVzdFNlcnZpY2UiKTsKLSAgQVNTRVJUX1RSVUUodGVzdF9zZXJ2aWNlICE9IE5VTEwp
OwotCi0gIEVYUEVDVF9ORSgwLCBjYWxsX2NvdW50ZXIuY2FsbF9jb3VudF8pOwotICBjYWxsX2Nv
dW50ZXIuQ2xlYXIoKTsKLQotICBFWFBFQ1RfVFJVRShmb28tPkZpbmRGaWVsZEJ5TmFtZSgibm9f
c3VjaF9maWVsZCIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShmb28tPkZpbmRFeHRlbnNpb25C
eU5hbWUoIm5vX3N1Y2hfZXh0ZW5zaW9uIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGZvby0+
RmluZE5lc3RlZFR5cGVCeU5hbWUoIk5vU3VjaE1lc3NhZ2VUeXBlIikgPT0gTlVMTCk7Ci0gIEVY
UEVDVF9UUlVFKGZvby0+RmluZEVudW1UeXBlQnlOYW1lKCJOb1N1Y2hFbnVtVHlwZSIpID09IE5V
TEwpOwotICBFWFBFQ1RfVFJVRShmb28tPkZpbmRFbnVtVmFsdWVCeU5hbWUoIk5PX1NVQ0hfVkFM
VUUiKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUodGVzdF9lbnVtLT5GaW5kVmFsdWVCeU5hbWUo
Ik5PX1NVQ0hfVkFMVUUiKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUodGVzdF9zZXJ2aWNlLT5G
aW5kTWV0aG9kQnlOYW1lKCJOb1N1Y2hNZXRob2QiKSA9PSBOVUxMKTsKLQotICBFWFBFQ1RfVFJV
RShmaWxlLT5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoIk5vU3VjaE1lc3NhZ2VUeXBlIikgPT0gTlVM
TCk7Ci0gIEVYUEVDVF9UUlVFKGZpbGUtPkZpbmRFbnVtVHlwZUJ5TmFtZSgiTm9TdWNoRW51bVR5
cGUiKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoZmlsZS0+RmluZEVudW1WYWx1ZUJ5TmFtZSgi
Tk9fU1VDSF9WQUxVRSIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShmaWxlLT5GaW5kU2Vydmlj
ZUJ5TmFtZSgiTk9fU1VDSF9WQUxVRSIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShmaWxlLT5G
aW5kRXh0ZW5zaW9uQnlOYW1lKCJub19zdWNoX2V4dGVuc2lvbiIpID09IE5VTEwpOwotCi0gIEVY
UEVDVF9UUlVFKHBvb2wuRmluZEZpbGVDb250YWluaW5nU3ltYm9sKCJGb28ubm8uc3VjaC5maWVs
ZCIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShwb29sLkZpbmRGaWxlQ29udGFpbmluZ1N5bWJv
bCgiRm9vLm5vX3N1Y2hfZmllbGQiKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUocG9vbC5GaW5k
TWVzc2FnZVR5cGVCeU5hbWUoIkZvby5Ob1N1Y2hNZXNzYWdlVHlwZSIpID09IE5VTEwpOwotICBF
WFBFQ1RfVFJVRShwb29sLkZpbmRGaWVsZEJ5TmFtZSgiRm9vLm5vX3N1Y2hfZmllbGQiKSA9PSBO
VUxMKTsKLSAgRVhQRUNUX1RSVUUocG9vbC5GaW5kRXh0ZW5zaW9uQnlOYW1lKCJGb28ubm9fc3Vj
aF9leHRlbnNpb24iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUocG9vbC5GaW5kRW51bVR5cGVC
eU5hbWUoIkZvby5Ob1N1Y2hFbnVtVHlwZSIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShwb29s
LkZpbmRFbnVtVmFsdWVCeU5hbWUoIkZvby5OT19TVUNIX1ZBTFVFIikgPT0gTlVMTCk7Ci0gIEVY
UEVDVF9UUlVFKHBvb2wuRmluZE1ldGhvZEJ5TmFtZSgiVGVzdFNlcnZpY2UuTm9TdWNoTWV0aG9k
IikgPT0gTlVMTCk7Ci0KLSAgRVhQRUNUX0VRKDAsIGNhbGxfY291bnRlci5jYWxsX2NvdW50Xyk7
Ci19Ci0KLVRFU1RfRihEYXRhYmFzZUJhY2tlZFBvb2xUZXN0LCBEb2VzbnRSZWxvYWRGaWxlc1Vu
Y2VzZXNzYXJpbHkpIHsKLSAgLy8gSWYgRmluZEZpbGVDb250YWluaW5nU3ltYm9sKCkgb3IgRmlu
ZEZpbGVDb250YWluaW5nRXh0ZW5zaW9uKCkgcmV0dXJuIGEKLSAgLy8gZmlsZSB0aGF0IGlzIGFs
cmVhZHkgaW4gdGhlIERlc2NyaXB0b3JQb29sLCBpdCBzaG91bGQgbm90IGF0dGVtcHQgdG8KLSAg
Ly8gcmVsb2FkIHRoZSBmaWxlLgotICBGYWxzZVBvc2l0aXZlRGF0YWJhc2UgZmFsc2VfcG9zaXRp
dmVfZGF0YWJhc2UoJmRhdGFiYXNlXyk7Ci0gIE1vY2tFcnJvckNvbGxlY3RvciBlcnJvcl9jb2xs
ZWN0b3I7Ci0gIERlc2NyaXB0b3JQb29sIHBvb2woJmZhbHNlX3Bvc2l0aXZlX2RhdGFiYXNlLCAm
ZXJyb3JfY29sbGVjdG9yKTsKLQotICAvLyBGaXJzdCBtYWtlIHN1cmUgZm9vLnByb3RvIGlzIGxv
YWRlZC4KLSAgY29uc3QgRGVzY3JpcHRvciogZm9vID0gcG9vbC5GaW5kTWVzc2FnZVR5cGVCeU5h
bWUoIkZvbyIpOwotICBBU1NFUlRfVFJVRShmb28gIT0gTlVMTCk7Ci0KLSAgLy8gVHJ5IGluZHVj
aW5nIGZhbHNlIHBvc2l0aXZlcy4KLSAgRVhQRUNUX1RSVUUocG9vbC5GaW5kTWVzc2FnZVR5cGVC
eU5hbWUoIk5vU3VjaFN5bWJvbCIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShwb29sLkZpbmRF
eHRlbnNpb25CeU51bWJlcihmb28sIDIyKSA9PSBOVUxMKTsKLQotICAvLyBObyBlcnJvcnMgc2hv
dWxkIGhhdmUgYmVlbiByZXBvcnRlZC4gIChJZiBmb28ucHJvdG8gd2FzIGluY29ycmVjdGx5Ci0g
IC8vIGxvYWRlZCBtdWx0aXBsZSB0aW1lcywgZXJyb3JzIHdvdWxkIGhhdmUgYmVlbiByZXBvcnRl
ZC4pCi0gIEVYUEVDVF9FUSgiIiwgZXJyb3JfY29sbGVjdG9yLnRleHRfKTsKLX0KLQotLy8gRGVz
Y3JpcHRvckRhdGFiYXNlIHRoYXQgYXR0ZW1wdHMgdG8gaW5kdWNlIGV4cG9uZW50aWFsbHktYmFk
IHBlcmZvcm1hbmNlCi0vLyBpbiBEZXNjcmlwdG9yUG9vbC4gRm9yIGV2ZXJ5IHBvc2l0aXZlIE4s
IHRoZSBkYXRhYmFzZSBjb250YWlucyBhIGZpbGUKLS8vIGZpbGVOLnByb3RvLCB3aGljaCBkZWZp
bmVzIGEgbWVzc2FnZSBNZXNzYWdlTiwgd2hpY2ggY29udGFpbnMgZmllbGRzIG9mCi0vLyB0eXBl
IE1lc3NhZ2VLIGZvciBhbGwgSyBpbiBbMCxOKS4gTWVzc2FnZTAgaXMgbm90IGRlZmluZWQgYW55
d2hlcmUKLS8vIChmaWxlMC5wcm90byBleGlzdHMsIGJ1dCBpcyBlbXB0eSksIHNvIGV2ZXJ5IG90
aGVyIGZpbGUgYW5kIG1lc3NhZ2UgdHlwZQotLy8gd2lsbCBmYWlsIHRvIGJ1aWxkLgotLy8KLS8v
IElmIHRoZSBEZXNjcmlwdG9yUG9vbCBpcyBub3QgY2FyZWZ1bCB0byBtZW1vaXplIGVycm9ycywg
YW4gYXR0ZW1wdCB0bwotLy8gYnVpbGQgYSBkZXNjcmlwdG9yIGZvciBNZXNzYWdlTiBjYW4gcmVx
dWlyZSBPKDJeTikgdGltZS4KLWNsYXNzIEV4cG9uZW50aWFsRXJyb3JEYXRhYmFzZSA6IHB1Ymxp
YyBEZXNjcmlwdG9yRGF0YWJhc2UgewotIHB1YmxpYzoKLSAgRXhwb25lbnRpYWxFcnJvckRhdGFi
YXNlKCkge30KLSAgfkV4cG9uZW50aWFsRXJyb3JEYXRhYmFzZSgpIHt9Ci0KLSAgLy8gaW1wbGVt
ZW50cyBEZXNjcmlwdG9yRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gIGJvb2wgRmluZEZpbGVCeU5hbWUoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvclByb3RvKiBvdXRwdXQpIHsKLSAgICBpbnQgZmls
ZV9udW0gPSAtMTsKLSAgICBGdWxsTWF0Y2goZmlsZW5hbWUsICJmaWxlIiwgIi5wcm90byIsICZm
aWxlX251bSk7Ci0gICAgaWYgKGZpbGVfbnVtID4gLTEpIHsKLSAgICAgIHJldHVybiBQb3B1bGF0
ZUZpbGUoZmlsZV9udW0sIG91dHB1dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gIH0KLSAgYm9vbCBGaW5kRmlsZUNvbnRhaW5pbmdTeW1ib2woY29uc3Qgc3Ry
aW5nJiBzeW1ib2xfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURl
c2NyaXB0b3JQcm90byogb3V0cHV0KSB7Ci0gICAgaW50IGZpbGVfbnVtID0gLTE7Ci0gICAgRnVs
bE1hdGNoKHN5bWJvbF9uYW1lLCAiTWVzc2FnZSIsICIiLCAmZmlsZV9udW0pOwotICAgIGlmIChm
aWxlX251bSA+IDApIHsKLSAgICAgIHJldHVybiBQb3B1bGF0ZUZpbGUoZmlsZV9udW0sIG91dHB1
dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgYm9v
bCBGaW5kRmlsZUNvbnRhaW5pbmdFeHRlbnNpb24oY29uc3Qgc3RyaW5nJiBjb250YWluaW5nX3R5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZF9udW1iZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8q
IG91dHB1dCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgdm9pZCBG
dWxsTWF0Y2goY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmcmIGJlZ2luX3dpdGgsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZW5kX3dpdGgs
Ci0gICAgICAgICAgICAgICAgIGludCogZmlsZV9udW0pIHsKLSAgICBpbnQgYmVnaW5fc2l6ZSA9
IGJlZ2luX3dpdGguc2l6ZSgpOwotICAgIGludCBlbmRfc2l6ZSA9IGVuZF93aXRoLnNpemUoKTsK
LSAgICBpZiAobmFtZS5zdWJzdHIoMCwgYmVnaW5fc2l6ZSkgIT0gYmVnaW5fd2l0aCB8fAotICAg
ICAgICBuYW1lLnN1YnN0cihuYW1lLnNpemUoKS0gZW5kX3NpemUsIGVuZF9zaXplKSAhPSBlbmRf
d2l0aCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzYWZlX3N0cnRvMzIobmFtZS5zdWJz
dHIoYmVnaW5fc2l6ZSwgbmFtZS5zaXplKCkgLSBlbmRfc2l6ZSAtIGJlZ2luX3NpemUpLAotICAg
ICAgICAgICAgICAgICBmaWxlX251bSk7Ci0gIH0KLQotICBib29sIFBvcHVsYXRlRmlsZShpbnQg
ZmlsZV9udW0sIEZpbGVEZXNjcmlwdG9yUHJvdG8qIG91dHB1dCkgewotICAgIHVzaW5nIHN0cmlu
Z3M6OlN1YnN0aXR1dGU7Ci0gICAgR09PR0xFX0NIRUNLX0dFKGZpbGVfbnVtLCAwKTsKLSAgICBv
dXRwdXQtPkNsZWFyKCk7Ci0gICAgb3V0cHV0LT5zZXRfbmFtZShTdWJzdGl0dXRlKCJmaWxlJDAu
cHJvdG8iLCBmaWxlX251bSkpOwotICAgIC8vIGZpbGUwLnByb3RvIGRvZXNuJ3QgZGVmaW5lIE1l
c3NhZ2UwCi0gICAgaWYgKGZpbGVfbnVtID4gMCkgewotICAgICAgRGVzY3JpcHRvclByb3RvKiBt
ZXNzYWdlID0gb3V0cHV0LT5hZGRfbWVzc2FnZV90eXBlKCk7Ci0gICAgICBtZXNzYWdlLT5zZXRf
bmFtZShTdWJzdGl0dXRlKCJNZXNzYWdlJDAiLCBmaWxlX251bSkpOwotICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBmaWxlX251bTsgKytpKSB7Ci0gICAgICAgIG91dHB1dC0+YWRkX2RlcGVuZGVu
Y3koU3Vic3RpdHV0ZSgiZmlsZSQwLnByb3RvIiwgaSkpOwotICAgICAgICBGaWVsZERlc2NyaXB0
b3JQcm90byogZmllbGQgPSBtZXNzYWdlLT5hZGRfZmllbGQoKTsKLSAgICAgICAgZmllbGQtPnNl
dF9uYW1lKFN1YnN0aXR1dGUoImZpZWxkJDAiLCBpKSk7Ci0gICAgICAgIGZpZWxkLT5zZXRfbnVt
YmVyKGkpOwotICAgICAgICBmaWVsZC0+c2V0X2xhYmVsKEZpZWxkRGVzY3JpcHRvclByb3RvOjpM
QUJFTF9PUFRJT05BTCk7Ci0gICAgICAgIGZpZWxkLT5zZXRfdHlwZShGaWVsZERlc2NyaXB0b3JQ
cm90bzo6VFlQRV9NRVNTQUdFKTsKLSAgICAgICAgZmllbGQtPnNldF90eXBlX25hbWUoU3Vic3Rp
dHV0ZSgiTWVzc2FnZSQwIiwgaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotfTsKLQotVEVTVF9GKERhdGFiYXNlQmFja2VkUG9vbFRlc3QsIERvZXNudFJlbG9hZEtu
b3duQmFkRmlsZXMpIHsKLSAgRXhwb25lbnRpYWxFcnJvckRhdGFiYXNlIGVycm9yX2RhdGFiYXNl
OwotICBEZXNjcmlwdG9yUG9vbCBwb29sKCZlcnJvcl9kYXRhYmFzZSk7Ci0KLSAgR09PR0xFX0xP
RyhJTkZPKSA8PCAiQSB0aW1lb3V0IGluIHRoaXMgdGVzdCBwcm9iYWJseSBpbmRpY2F0ZXMgYSBy
ZWFsIGJ1Zy4iOwotCi0gIEVYUEVDVF9UUlVFKHBvb2wuRmluZEZpbGVCeU5hbWUoImZpbGU0MC5w
cm90byIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShwb29sLkZpbmRNZXNzYWdlVHlwZUJ5TmFt
ZSgiTWVzc2FnZTQwIikgPT0gTlVMTCk7Ci19Ci0KLVRFU1RfRihEYXRhYmFzZUJhY2tlZFBvb2xU
ZXN0LCBEb2VzbnRGYWxsYmFja09uV3JvbmdUeXBlKSB7Ci0gIC8vIElmIGEgbG9va3VwIGZpbmRz
IGEgc3ltYm9sIG9mIHRoZSB3cm9uZyB0eXBlIChlLmcuIHdlIHBhc3MgYSB0eXBlIG5hbWUKLSAg
Ly8gdG8gRmluZEZpZWxkQnlOYW1lKCkpLCB3ZSBzaG91bGQgZmFpbCBmYXN0LCB3aXRob3V0IGNo
ZWNraW5nIHRoZSBmYWxsYmFjawotICAvLyBkYXRhYmFzZS4KLSAgQ2FsbENvdW50aW5nRGF0YWJh
c2UgY2FsbF9jb3VudGVyKCZkYXRhYmFzZV8pOwotICBEZXNjcmlwdG9yUG9vbCBwb29sKCZjYWxs
X2NvdW50ZXIpOwotCi0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlID0gcG9vbC5GaW5kRmls
ZUJ5TmFtZSgiZm9vLnByb3RvIik7Ci0gIEFTU0VSVF9UUlVFKGZpbGUgIT0gTlVMTCk7Ci0gIGNv
bnN0IERlc2NyaXB0b3IqIGZvbyA9IHBvb2wuRmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJGb28iKTsK
LSAgQVNTRVJUX1RSVUUoZm9vICE9IE5VTEwpOwotICBjb25zdCBFbnVtRGVzY3JpcHRvciogdGVz
dF9lbnVtID0gcG9vbC5GaW5kRW51bVR5cGVCeU5hbWUoIlRlc3RFbnVtIik7Ci0gIEFTU0VSVF9U
UlVFKHRlc3RfZW51bSAhPSBOVUxMKTsKLQotICBFWFBFQ1RfTkUoMCwgY2FsbF9jb3VudGVyLmNh
bGxfY291bnRfKTsKLSAgY2FsbF9jb3VudGVyLkNsZWFyKCk7Ci0KLSAgRVhQRUNUX1RSVUUocG9v
bC5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoIlRlc3RFbnVtIikgPT0gTlVMTCk7Ci0gIEVYUEVDVF9U
UlVFKHBvb2wuRmluZEZpZWxkQnlOYW1lKCJGb28iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUo
cG9vbC5GaW5kRXh0ZW5zaW9uQnlOYW1lKCJGb28iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUo
cG9vbC5GaW5kRW51bVR5cGVCeU5hbWUoIkZvbyIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShw
b29sLkZpbmRFbnVtVmFsdWVCeU5hbWUoIkZvbyIpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShw
b29sLkZpbmRTZXJ2aWNlQnlOYW1lKCJGb28iKSA9PSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUocG9v
bC5GaW5kTWV0aG9kQnlOYW1lKCJGb28iKSA9PSBOVUxMKTsKLQotICBFWFBFQ1RfRVEoMCwgY2Fs
bF9jb3VudGVyLmNhbGxfY291bnRfKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1jbGFzcyBBYm9y
dGluZ0Vycm9yQ29sbGVjdG9yIDogcHVibGljIERlc2NyaXB0b3JQb29sOjpFcnJvckNvbGxlY3Rv
ciB7Ci0gcHVibGljOgotICBBYm9ydGluZ0Vycm9yQ29sbGVjdG9yKCkge30KLQotICB2aXJ0dWFs
IHZvaWQgQWRkRXJyb3IoCi0gICAgICBjb25zdCBzdHJpbmcgJmZpbGVuYW1lLAotICAgICAgY29u
c3Qgc3RyaW5nICZlbGVtZW50X25hbWUsCi0gICAgICBjb25zdCBNZXNzYWdlICptZXNzYWdlLAot
ICAgICAgRXJyb3JMb2NhdGlvbiBsb2NhdGlvbiwKLSAgICAgIGNvbnN0IHN0cmluZyAmZXJyb3Jf
bWVzc2FnZSkgewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJBZGRFcnJvcigpIGNhbGxlZCB1
bmV4cGVjdGVkbHk6ICIgPDwgZmlsZW5hbWUgPDwgIiBbIgotICAgICAgICAgICAgICAgPDwgZWxl
bWVudF9uYW1lIDw8ICJdOiAiIDw8IGVycm9yX21lc3NhZ2U7Ci0gIH0KLSBwcml2YXRlOgotICBH
T09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQWJvcnRpbmdFcnJvckNvbGxlY3Rvcik7
Ci19OwotCi0vLyBBIHNvdXJjZSB0cmVlIGNvbnRhaW5pbmcgb25seSBvbmUgZmlsZS4KLWNsYXNz
IFNpbmdsZXRvblNvdXJjZVRyZWUgOiBwdWJsaWMgY29tcGlsZXI6OlNvdXJjZVRyZWUgewotIHB1
YmxpYzoKLSAgU2luZ2xldG9uU291cmNlVHJlZShjb25zdCBzdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBzdHJpbmcmIGNvbnRlbnRzKQotICAgICAgOiBmaWxlbmFtZV8oZmlsZW5hbWUpLCBjb250ZW50
c18oY29udGVudHMpIHt9Ci0KLSAgdmlydHVhbCBpbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogT3Bl
bihjb25zdCBzdHJpbmcmIGZpbGVuYW1lKSB7Ci0gICAgcmV0dXJuIGZpbGVuYW1lID09IGZpbGVu
YW1lXyA/Ci0gICAgICAgIG5ldyBpbzo6QXJyYXlJbnB1dFN0cmVhbShjb250ZW50c18uZGF0YSgp
LCBjb250ZW50c18uc2l6ZSgpKSA6IE5VTEw7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGNvbnN0IHN0
cmluZyBmaWxlbmFtZV87Ci0gIGNvbnN0IHN0cmluZyBjb250ZW50c187Ci0KLSAgR09PR0xFX0RJ
U0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFNpbmdsZXRvblNvdXJjZVRyZWUpOwotfTsKLQotY29u
c3QgY2hhciAqY29uc3Qga1NvdXJjZUxvY2F0aW9uVGVzdElucHV0ID0KLSAgInN5bnRheCA9IFwi
cHJvdG8yXCI7XG4iCi0gICJtZXNzYWdlIEEge1xuIgotICAiICBvcHRpb25hbCBpbnQzMiBhID0g
MTtcbiIKLSAgIiAgbWVzc2FnZSBCIHtcbiIKLSAgIiAgICByZXF1aXJlZCBkb3VibGUgYiA9IDE7
XG4iCi0gICIgIH1cbiIKLSAgIn1cbiIKLSAgImVudW0gSW5kZWNpc2lvbiB7XG4iCi0gICIgIFlF
UyAgID0gMTtcbiIKLSAgIiAgTk8gICAgPSAyO1xuIgotICAiICBNQVlCRSA9IDM7XG4iCi0gICJ9
XG4iCi0gICJzZXJ2aWNlIFMge1xuIgotICAiICBycGMgTWV0aG9kKEEpIHJldHVybnMgKEEuQik7
XG4iCi0gIC8vIFB1dCBhbiBlbXB0eSBsaW5lIGhlcmUgdG8gbWFrZSB0aGUgc291cmNlIGxvY2F0
aW9uIHJhbmdlIG1hdGNoLgotICAiXG4iCi0gICJ9XG4iCi0gICJtZXNzYWdlIE1lc3NhZ2VXaXRo
RXh0ZW5zaW9ucyB7XG4iCi0gICIgIGV4dGVuc2lvbnMgMTAwMCB0byBtYXg7XG4iCi0gICJ9XG4i
Ci0gICJleHRlbmQgTWVzc2FnZVdpdGhFeHRlbnNpb25zIHtcbiIKLSAgIiAgb3B0aW9uYWwgaW50
MzIgaW50MzJfZXh0ZW5zaW9uID0gMTAwMTtcbiIKLSAgIn1cbiIKLSAgIm1lc3NhZ2UgQyB7XG4i
Ci0gICIgIGV4dGVuZCBNZXNzYWdlV2l0aEV4dGVuc2lvbnMge1xuIgotICAiICAgIG9wdGlvbmFs
IEMgbWVzc2FnZV9leHRlbnNpb24gPSAxMDAyO1xuIgotICAiICB9XG4iCi0gICJ9XG4iOwotCi1j
bGFzcyBTb3VyY2VMb2NhdGlvblRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGlj
OgotICBTb3VyY2VMb2NhdGlvblRlc3QoKQotICAgICAgOiBzb3VyY2VfdHJlZV8oIi90ZXN0L3Rl
c3QucHJvdG8iLCBrU291cmNlTG9jYXRpb25UZXN0SW5wdXQpLAotICAgICAgICBkYl8oJnNvdXJj
ZV90cmVlXyksCi0gICAgICAgIHBvb2xfKCZkYl8sICZjb2xsZWN0b3JfKSB7fQotCi0gIHN0YXRp
YyBzdHJpbmcgUHJpbnRTb3VyY2VMb2NhdGlvbihjb25zdCBTb3VyY2VMb2NhdGlvbiAmbG9jKSB7
Ci0gICAgcmV0dXJuIHN0cmluZ3M6OlN1YnN0aXR1dGUoIiQwOiQxLSQyOiQzIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxICsgbG9jLnN0YXJ0X2xpbmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMSArIGxvYy5zdGFydF9jb2x1bW4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMSArIGxvYy5lbmRfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxICsgbG9jLmVuZF9jb2x1bW4pOwotICB9Ci0KLSBwcml2YXRlOgotICBBYm9ydGlu
Z0Vycm9yQ29sbGVjdG9yIGNvbGxlY3Rvcl87Ci0gIFNpbmdsZXRvblNvdXJjZVRyZWUgc291cmNl
X3RyZWVfOwotICBjb21waWxlcjo6U291cmNlVHJlZURlc2NyaXB0b3JEYXRhYmFzZSBkYl87Ci0K
LSBwcm90ZWN0ZWQ6Ci0gIERlc2NyaXB0b3JQb29sIHBvb2xfOwotfTsKLQotLy8gVE9ETyhhZG9u
b3Zhbik6IGltcGxlbWVudCBzdXBwb3J0IGZvciBvcHRpb24gZmllbGRzIGFuZCBmb3IKLS8vIHN1
YnBhcnRzIG9mIGRlY2xhcmF0aW9ucy4KLQotVEVTVF9GKFNvdXJjZUxvY2F0aW9uVGVzdCwgR2V0
U291cmNlTG9jYXRpb24pIHsKLSAgU291cmNlTG9jYXRpb24gbG9jOwotCi0gIGNvbnN0IEZpbGVE
ZXNjcmlwdG9yICpmaWxlX2Rlc2MgPQotICAgICAgR09PR0xFX0NIRUNLX05PVE5VTEwocG9vbF8u
RmluZEZpbGVCeU5hbWUoIi90ZXN0L3Rlc3QucHJvdG8iKSk7Ci0KLSAgY29uc3QgRGVzY3JpcHRv
ciAqYV9kZXNjID0gZmlsZV9kZXNjLT5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoIkEiKTsKLSAgRVhQ
RUNUX1RSVUUoYV9kZXNjLT5HZXRTb3VyY2VMb2NhdGlvbigmbG9jKSk7Ci0gIEVYUEVDVF9FUSgi
MjoxLTc6MiIsIFByaW50U291cmNlTG9jYXRpb24obG9jKSk7Ci0KLSAgY29uc3QgRGVzY3JpcHRv
ciAqYV9iX2Rlc2MgPSBhX2Rlc2MtPkZpbmROZXN0ZWRUeXBlQnlOYW1lKCJCIik7Ci0gIEVYUEVD
VF9UUlVFKGFfYl9kZXNjLT5HZXRTb3VyY2VMb2NhdGlvbigmbG9jKSk7Ci0gIEVYUEVDVF9FUSgi
NDozLTY6NCIsIFByaW50U291cmNlTG9jYXRpb24obG9jKSk7Ci0KLSAgY29uc3QgRW51bURlc2Ny
aXB0b3IgKmVfZGVzYyA9IGZpbGVfZGVzYy0+RmluZEVudW1UeXBlQnlOYW1lKCJJbmRlY2lzaW9u
Iik7Ci0gIEVYUEVDVF9UUlVFKGVfZGVzYy0+R2V0U291cmNlTG9jYXRpb24oJmxvYykpOwotICBF
WFBFQ1RfRVEoIjg6MS0xMjoyIiwgUHJpbnRTb3VyY2VMb2NhdGlvbihsb2MpKTsKLQotICBjb25z
dCBFbnVtVmFsdWVEZXNjcmlwdG9yICp5ZXNfZGVzYyA9IGVfZGVzYy0+RmluZFZhbHVlQnlOYW1l
KCJZRVMiKTsKLSAgRVhQRUNUX1RSVUUoeWVzX2Rlc2MtPkdldFNvdXJjZUxvY2F0aW9uKCZsb2Mp
KTsKLSAgRVhQRUNUX0VRKCI5OjMtOToxMyIsIFByaW50U291cmNlTG9jYXRpb24obG9jKSk7Ci0K
LSAgY29uc3QgU2VydmljZURlc2NyaXB0b3IgKnNfZGVzYyA9IGZpbGVfZGVzYy0+RmluZFNlcnZp
Y2VCeU5hbWUoIlMiKTsKLSAgRVhQRUNUX1RSVUUoc19kZXNjLT5HZXRTb3VyY2VMb2NhdGlvbigm
bG9jKSk7Ci0gIEVYUEVDVF9FUSgiMTM6MS0xNjoyIiwgUHJpbnRTb3VyY2VMb2NhdGlvbihsb2Mp
KTsKLQotICBjb25zdCBNZXRob2REZXNjcmlwdG9yICptX2Rlc2MgPSBzX2Rlc2MtPkZpbmRNZXRo
b2RCeU5hbWUoIk1ldGhvZCIpOwotICBFWFBFQ1RfVFJVRShtX2Rlc2MtPkdldFNvdXJjZUxvY2F0
aW9uKCZsb2MpKTsKLSAgRVhQRUNUX0VRKCIxNDozLTE0OjMxIiwgUHJpbnRTb3VyY2VMb2NhdGlv
bihsb2MpKTsKLQotfQotCi1URVNUX0YoU291cmNlTG9jYXRpb25UZXN0LCBFeHRlbnNpb25Tb3Vy
Y2VMb2NhdGlvbikgewotICBTb3VyY2VMb2NhdGlvbiBsb2M7Ci0KLSAgY29uc3QgRmlsZURlc2Ny
aXB0b3IgKmZpbGVfZGVzYyA9Ci0gICAgICBHT09HTEVfQ0hFQ0tfTk9UTlVMTChwb29sXy5GaW5k
RmlsZUJ5TmFtZSgiL3Rlc3QvdGVzdC5wcm90byIpKTsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IgKmludDMyX2V4dGVuc2lvbl9kZXNjID0KLSAgICAgIGZpbGVfZGVzYy0+RmluZEV4dGVuc2lv
bkJ5TmFtZSgiaW50MzJfZXh0ZW5zaW9uIik7Ci0gIEVYUEVDVF9UUlVFKGludDMyX2V4dGVuc2lv
bl9kZXNjLT5HZXRTb3VyY2VMb2NhdGlvbigmbG9jKSk7Ci0gIEVYUEVDVF9FUSgiMjE6My0yMTo0
MSIsIFByaW50U291cmNlTG9jYXRpb24obG9jKSk7Ci0KLSAgY29uc3QgRGVzY3JpcHRvciAqY19k
ZXNjID0gZmlsZV9kZXNjLT5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoIkMiKTsKLSAgRVhQRUNUX1RS
VUUoY19kZXNjLT5HZXRTb3VyY2VMb2NhdGlvbigmbG9jKSk7Ci0gIEVYUEVDVF9FUSgiMjM6MS0y
NzoyIiwgUHJpbnRTb3VyY2VMb2NhdGlvbihsb2MpKTsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IgKm1lc3NhZ2VfZXh0ZW5zaW9uX2Rlc2MgPQotICAgICAgY19kZXNjLT5GaW5kRXh0ZW5zaW9u
QnlOYW1lKCJtZXNzYWdlX2V4dGVuc2lvbiIpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlX2V4dGVu
c2lvbl9kZXNjLT5HZXRTb3VyY2VMb2NhdGlvbigmbG9jKSk7Ci0gIEVYUEVDVF9FUSgiMjU6NS0y
NTo0MSIsIFByaW50U291cmNlTG9jYXRpb24obG9jKSk7Ci19Ci0KLS8vIE1pc3NpbmcgU291cmNl
Q29kZUluZm8gZG9lc24ndCBjYXVzZSBjcmFzaDoKLVRFU1RfRihTb3VyY2VMb2NhdGlvblRlc3Qs
IEdldFNvdXJjZUxvY2F0aW9uX01pc3NpbmdTb3VyY2VDb2RlSW5mbykgewotICBTb3VyY2VMb2Nh
dGlvbiBsb2M7Ci0KLSAgY29uc3QgRmlsZURlc2NyaXB0b3IgKmZpbGVfZGVzYyA9Ci0gICAgICBH
T09HTEVfQ0hFQ0tfTk9UTlVMTChwb29sXy5GaW5kRmlsZUJ5TmFtZSgiL3Rlc3QvdGVzdC5wcm90
byIpKTsKLQotICBGaWxlRGVzY3JpcHRvclByb3RvIHByb3RvOwotICBmaWxlX2Rlc2MtPkNvcHlU
bygmcHJvdG8pOyAgLy8gTm90ZSwgdGhpcyBkaXNjYXJkcyB0aGUgU291cmNlQ29kZUluZm8uCi0g
IEVYUEVDVF9GQUxTRShwcm90by5oYXNfc291cmNlX2NvZGVfaW5mbygpKTsKLQotICBEZXNjcmlw
dG9yUG9vbCBiYWQxX3Bvb2woJnBvb2xfKTsKLSAgY29uc3QgRmlsZURlc2NyaXB0b3IqIGJhZDFf
ZmlsZV9kZXNjID0KLSAgICAgIEdPT0dMRV9DSEVDS19OT1ROVUxMKGJhZDFfcG9vbC5CdWlsZEZp
bGUocHJvdG8pKTsKLSAgY29uc3QgRGVzY3JpcHRvciAqYmFkMV9hX2Rlc2MgPSBiYWQxX2ZpbGVf
ZGVzYy0+RmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJBIik7Ci0gIEVYUEVDVF9GQUxTRShiYWQxX2Ff
ZGVzYy0+R2V0U291cmNlTG9jYXRpb24oJmxvYykpOwotfQotCi0vLyBDb3JydXB0IFNvdXJjZUNv
ZGVJbmZvIGRvZXNuJ3QgY2F1c2UgY3Jhc2g6Ci1URVNUX0YoU291cmNlTG9jYXRpb25UZXN0LCBH
ZXRTb3VyY2VMb2NhdGlvbl9Cb2d1c1NvdXJjZUNvZGVJbmZvKSB7Ci0gIFNvdXJjZUxvY2F0aW9u
IGxvYzsKLQotICBjb25zdCBGaWxlRGVzY3JpcHRvciAqZmlsZV9kZXNjID0KLSAgICAgIEdPT0dM
RV9DSEVDS19OT1ROVUxMKHBvb2xfLkZpbmRGaWxlQnlOYW1lKCIvdGVzdC90ZXN0LnByb3RvIikp
OwotCi0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gcHJvdG87Ci0gIGZpbGVfZGVzYy0+Q29weVRvKCZw
cm90byk7ICAvLyBOb3RlLCB0aGlzIGRpc2NhcmRzIHRoZSBTb3VyY2VDb2RlSW5mby4KLSAgRVhQ
RUNUX0ZBTFNFKHByb3RvLmhhc19zb3VyY2VfY29kZV9pbmZvKCkpOwotICBTb3VyY2VDb2RlSW5m
b19Mb2NhdGlvbiAqbG9jX21zZyA9Ci0gICAgICBwcm90by5tdXRhYmxlX3NvdXJjZV9jb2RlX2lu
Zm8oKS0+YWRkX2xvY2F0aW9uKCk7Ci0gIGxvY19tc2ctPmFkZF9wYXRoKDEpOwotICBsb2NfbXNn
LT5hZGRfcGF0aCgyKTsKLSAgbG9jX21zZy0+YWRkX3BhdGgoMyk7Ci0gIGxvY19tc2ctPmFkZF9z
cGFuKDQpOwotICBsb2NfbXNnLT5hZGRfc3Bhbig1KTsKLSAgbG9jX21zZy0+YWRkX3NwYW4oNik7
Ci0KLSAgRGVzY3JpcHRvclBvb2wgYmFkMl9wb29sKCZwb29sXyk7Ci0gIGNvbnN0IEZpbGVEZXNj
cmlwdG9yKiBiYWQyX2ZpbGVfZGVzYyA9Ci0gICAgICBHT09HTEVfQ0hFQ0tfTk9UTlVMTChiYWQy
X3Bvb2wuQnVpbGRGaWxlKHByb3RvKSk7Ci0gIGNvbnN0IERlc2NyaXB0b3IgKmJhZDJfYV9kZXNj
ID0gYmFkMl9maWxlX2Rlc2MtPkZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgiQSIpOwotICBFWFBFQ1Rf
RkFMU0UoYmFkMl9hX2Rlc2MtPkdldFNvdXJjZUxvY2F0aW9uKCZsb2MpKTsKLX0KLQotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi1jb25zdCBjaGFyKiBjb25zdCBrQ29weVNvdXJjZUNvZGVJbmZvVG9UZXN0SW5w
dXQgPQotICAic3ludGF4ID0gXCJwcm90bzJcIjtcbiIKLSAgIm1lc3NhZ2UgRm9vIHt9XG4iOwot
Ci0vLyBSZXF1aXJlZCBzaW5jZSBzb3VyY2UgY29kZSBpbmZvcm1hdGlvbiBpcyBub3QgcHJlc2Vy
dmVkIGJ5Ci0vLyBGaWxlRGVzY3JpcHRvclRlc3QuCi1jbGFzcyBDb3B5U291cmNlQ29kZUluZm9U
b1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBDb3B5U291cmNlQ29k
ZUluZm9Ub1Rlc3QoKQotICAgICAgOiBzb3VyY2VfdHJlZV8oIi90ZXN0L3Rlc3QucHJvdG8iLCBr
Q29weVNvdXJjZUNvZGVJbmZvVG9UZXN0SW5wdXQpLAotICAgICAgICBkYl8oJnNvdXJjZV90cmVl
XyksCi0gICAgICAgIHBvb2xfKCZkYl8sICZjb2xsZWN0b3JfKSB7fQotCi0gcHJpdmF0ZToKLSAg
QWJvcnRpbmdFcnJvckNvbGxlY3RvciBjb2xsZWN0b3JfOwotICBTaW5nbGV0b25Tb3VyY2VUcmVl
IHNvdXJjZV90cmVlXzsKLSAgY29tcGlsZXI6OlNvdXJjZVRyZWVEZXNjcmlwdG9yRGF0YWJhc2Ug
ZGJfOwotCi0gcHJvdGVjdGVkOgotICBEZXNjcmlwdG9yUG9vbCBwb29sXzsKLX07Ci0KLVRFU1Rf
RihDb3B5U291cmNlQ29kZUluZm9Ub1Rlc3QsIENvcHlUb19Eb2VzTm90Q29weVNvdXJjZUNvZGVJ
bmZvKSB7Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlX2Rlc2MgPQotICAgICAgR09PR0xF
X0NIRUNLX05PVE5VTEwocG9vbF8uRmluZEZpbGVCeU5hbWUoIi90ZXN0L3Rlc3QucHJvdG8iKSk7
Ci0gIEZpbGVEZXNjcmlwdG9yUHJvdG8gZmlsZV9kZXNjX3Byb3RvOwotICBBU1NFUlRfRkFMU0Uo
ZmlsZV9kZXNjX3Byb3RvLmhhc19zb3VyY2VfY29kZV9pbmZvKCkpOwotCi0gIGZpbGVfZGVzYy0+
Q29weVRvKCZmaWxlX2Rlc2NfcHJvdG8pOwotICBFWFBFQ1RfRkFMU0UoZmlsZV9kZXNjX3Byb3Rv
Lmhhc19zb3VyY2VfY29kZV9pbmZvKCkpOwotfQotCi1URVNUX0YoQ29weVNvdXJjZUNvZGVJbmZv
VG9UZXN0LCBDb3B5U291cmNlQ29kZUluZm9UbykgewotICBjb25zdCBGaWxlRGVzY3JpcHRvciog
ZmlsZV9kZXNjID0KLSAgICAgIEdPT0dMRV9DSEVDS19OT1ROVUxMKHBvb2xfLkZpbmRGaWxlQnlO
YW1lKCIvdGVzdC90ZXN0LnByb3RvIikpOwotICBGaWxlRGVzY3JpcHRvclByb3RvIGZpbGVfZGVz
Y19wcm90bzsKLSAgQVNTRVJUX0ZBTFNFKGZpbGVfZGVzY19wcm90by5oYXNfc291cmNlX2NvZGVf
aW5mbygpKTsKLQotICBmaWxlX2Rlc2MtPkNvcHlTb3VyY2VDb2RlSW5mb1RvKCZmaWxlX2Rlc2Nf
cHJvdG8pOwotICBjb25zdCBTb3VyY2VDb2RlSW5mbyYgaW5mbyA9IGZpbGVfZGVzY19wcm90by5z
b3VyY2VfY29kZV9pbmZvKCk7Ci0gIEFTU0VSVF9FUSg0LCBpbmZvLmxvY2F0aW9uX3NpemUoKSk7
Ci0gIC8vIEdldCB0aGUgRm9vIG1lc3NhZ2UgbG9jYXRpb24KLSAgY29uc3QgU291cmNlQ29kZUlu
Zm9fTG9jYXRpb24mIGZvb19sb2NhdGlvbiA9IGluZm8ubG9jYXRpb24oMik7Ci0gIEFTU0VSVF9F
USgyLCBmb29fbG9jYXRpb24ucGF0aF9zaXplKCkpOwotICBFWFBFQ1RfRVEoRmlsZURlc2NyaXB0
b3JQcm90bzo6a01lc3NhZ2VUeXBlRmllbGROdW1iZXIsIGZvb19sb2NhdGlvbi5wYXRoKDApKTsK
LSAgRVhQRUNUX0VRKDAsIGZvb19sb2NhdGlvbi5wYXRoKDEpKTsgICAgICAvLyBGb28gaXMgdGhl
IGZpcnN0IG1lc3NhZ2UgZGVmaW5lZAotICBBU1NFUlRfRVEoMywgZm9vX2xvY2F0aW9uLnNwYW5f
c2l6ZSgpKTsgIC8vIEZvbyBzcGFucyBvbmUgbGluZQotICBFWFBFQ1RfRVEoMSwgZm9vX2xvY2F0
aW9uLnNwYW4oMCkpOyAgICAgIC8vIEZvbyBpcyBkZWNsYXJlZCBvbiBsaW5lIDEKLSAgRVhQRUNU
X0VRKDAsIGZvb19sb2NhdGlvbi5zcGFuKDEpKTsgICAgICAvLyBGb28gc3RhcnRzIGF0IGNvbHVt
biAwCi0gIEVYUEVDVF9FUSgxNCwgZm9vX2xvY2F0aW9uLnNwYW4oMikpOyAgICAgLy8gRm9vIGVu
ZHMgb24gY29sdW1uIDE0Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi19ICAvLyBuYW1lc3BhY2Ug
ZGVzY3JpcHRvcl91bml0dGVzdAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZHJvcF91bmtub3du
X2ZpZWxkc190ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2Ryb3BfdW5rbm93bl9maWVsZHNf
dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYxNmRjNTM0MTU5Njg3OWM2
MWI0MmUzNjVhY2RhZjA4NzkyNTFmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZHJvcF91bmtub3duX2ZpZWxkc190ZXN0
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gK
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZHJvcF91bmtub3duX2ZpZWxkcy5w
Yi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9keW5hbWljX21lc3NhZ2UuaD4KLSNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLXVzaW5nIHVuaXR0ZXN0
X2Ryb3BfdW5rbm93bl9maWVsZHM6OkZvbzsKLXVzaW5nIHVuaXR0ZXN0X2Ryb3BfdW5rbm93bl9m
aWVsZHM6OkZvb1dpdGhFeHRyYUZpZWxkczsKLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotVEVT
VChEcm9wVW5rbm93bkZpZWxkc1Rlc3QsIEdlbmVyYXRlZE1lc3NhZ2UpIHsKLSAgRm9vV2l0aEV4
dHJhRmllbGRzIGZvb193aXRoX2V4dHJhX2ZpZWxkczsKLSAgZm9vX3dpdGhfZXh0cmFfZmllbGRz
LnNldF9pbnQzMl92YWx1ZSgxKTsKLSAgZm9vX3dpdGhfZXh0cmFfZmllbGRzLnNldF9lbnVtX3Zh
bHVlKEZvb1dpdGhFeHRyYUZpZWxkczo6UVVYKTsKLSAgZm9vX3dpdGhfZXh0cmFfZmllbGRzLnNl
dF9leHRyYV9pbnQzMl92YWx1ZSgyKTsKLQotICBGb28gZm9vOwotICBBU1NFUlRfVFJVRShmb28u
UGFyc2VGcm9tU3RyaW5nKGZvb193aXRoX2V4dHJhX2ZpZWxkcy5TZXJpYWxpemVBc1N0cmluZygp
KSk7Ci0gIEVYUEVDVF9FUSgxLCBmb28uaW50MzJfdmFsdWUoKSk7Ci0gIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxpbnQ+KEZvb1dpdGhFeHRyYUZpZWxkczo6UVVYKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludD4oZm9vLmVudW1fdmFsdWUoKSkpOwotICAvLyBXZSBkb24ndCBnZW5lcmF0ZSB1
bmtub3duIGZpZWxkIGFjY2Vzc29ycyBidXQgdGhlIFVua25vd25GaWVsZFNldCBpcwotICAvLyBz
dGlsbCBleHBvc2VkIHRocm91Z2ggcmVmbGVjdGlvbiBBUEkuCi0gIEVYUEVDVF9UUlVFKGZvby5H
ZXRSZWZsZWN0aW9uKCktPkdldFVua25vd25GaWVsZHMoZm9vKS5lbXB0eSgpKTsKLQotICBBU1NF
UlRfVFJVRShmb29fd2l0aF9leHRyYV9maWVsZHMuUGFyc2VGcm9tU3RyaW5nKGZvby5TZXJpYWxp
emVBc1N0cmluZygpKSk7Ci0gIEVYUEVDVF9FUSgxLCBmb29fd2l0aF9leHRyYV9maWVsZHMuaW50
MzJfdmFsdWUoKSk7Ci0gIEVYUEVDVF9FUShGb29XaXRoRXh0cmFGaWVsZHM6OlFVWCwgZm9vX3dp
dGhfZXh0cmFfZmllbGRzLmVudW1fdmFsdWUoKSk7Ci0gIC8vIFRoZSAiZXh0cmFfaW50MzJfdmFs
dWUiIGZpZWxkIHNob3VsZCBiZSBsb3N0LgotICBFWFBFQ1RfRVEoMCwgZm9vX3dpdGhfZXh0cmFf
ZmllbGRzLmV4dHJhX2ludDMyX3ZhbHVlKCkpOwotfQotCi1URVNUKERyb3BVbmtub3duRmllbGRz
VGVzdCwgRHluYW1pY01lc3NhZ2UpIHsKLSAgRm9vV2l0aEV4dHJhRmllbGRzIGZvb193aXRoX2V4
dHJhX2ZpZWxkczsKLSAgZm9vX3dpdGhfZXh0cmFfZmllbGRzLnNldF9pbnQzMl92YWx1ZSgxKTsK
LSAgZm9vX3dpdGhfZXh0cmFfZmllbGRzLnNldF9lbnVtX3ZhbHVlKEZvb1dpdGhFeHRyYUZpZWxk
czo6UVVYKTsKLSAgZm9vX3dpdGhfZXh0cmFfZmllbGRzLnNldF9leHRyYV9pbnQzMl92YWx1ZSgy
KTsKLQotICBnb29nbGU6OnByb3RvYnVmOjpEeW5hbWljTWVzc2FnZUZhY3RvcnkgZmFjdG9yeTsK
LSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdl
PiBmb28oCi0gICAgICBmYWN0b3J5LkdldFByb3RvdHlwZShGb286OmRlc2NyaXB0b3IoKSktPk5l
dygpKTsKLSAgQVNTRVJUX1RSVUUoZm9vLT5QYXJzZUZyb21TdHJpbmcoZm9vX3dpdGhfZXh0cmFf
ZmllbGRzLlNlcmlhbGl6ZUFzU3RyaW5nKCkpKTsKLSAgRVhQRUNUX1RSVUUoZm9vLT5HZXRSZWZs
ZWN0aW9uKCktPkdldFVua25vd25GaWVsZHMoKmZvbykuZW1wdHkoKSk7Ci0KLSAgQVNTRVJUX1RS
VUUoZm9vX3dpdGhfZXh0cmFfZmllbGRzLlBhcnNlRnJvbVN0cmluZyhmb28tPlNlcmlhbGl6ZUFz
U3RyaW5nKCkpKTsKLSAgRVhQRUNUX0VRKDEsIGZvb193aXRoX2V4dHJhX2ZpZWxkcy5pbnQzMl92
YWx1ZSgpKTsKLSAgRVhQRUNUX0VRKEZvb1dpdGhFeHRyYUZpZWxkczo6UVVYLCBmb29fd2l0aF9l
eHRyYV9maWVsZHMuZW51bV92YWx1ZSgpKTsKLSAgLy8gVGhlICJleHRyYV9pbnQzMl92YWx1ZSIg
ZmllbGQgc2hvdWxkIGJlIGxvc3QuCi0gIEVYUEVDVF9FUSgwLCBmb29fd2l0aF9leHRyYV9maWVs
ZHMuZXh0cmFfaW50MzJfdmFsdWUoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1Zgot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2R1
cmF0aW9uLnBiLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnBiLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzYzOTM0NmRkOTRlNjFkOWExNWU4MTFhNDM3OWI3ZjE1
YjVlMDBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wYi5jYworKysgL2Rldi9udWxsCkBAIC0xLDQyNSAr
MCwwIEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERP
IE5PVCBFRElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8KLQot
I2RlZmluZSBJTlRFUk5BTF9TVVBQUkVTU19QUk9UT0JVRl9GSUVMRF9ERVBSRUNBVElPTgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wYi5oPgotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9wb3J0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL29uY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3Ry
ZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGVfaW5sLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX29wcy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi93aXJlX2Zvcm1hdC5oPgotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGluY2x1ZGVzKQot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5hbWVzcGFjZSB7
Ci0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogRHVyYXRpb25fZGVzY3Jp
cHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJh
dGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIER1cmF0aW9uX3JlZmxlY3Rpb25fID0gTlVMTDsKLQot
fSAgLy8gbmFtZXNwYWNlCi0KLQotdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnBy
b3RvYnVmXzJmZHVyYXRpb25fMmVwcm90bygpIHsKLSAgcHJvdG9idWZfQWRkRGVzY19nb29nbGVf
MmZwcm90b2J1Zl8yZmR1cmF0aW9uXzJlcHJvdG8oKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpGaWxlRGVzY3JpcHRvciogZmlsZSA9Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNj
cmlwdG9yUG9vbDo6Z2VuZXJhdGVkX3Bvb2woKS0+RmluZEZpbGVCeU5hbWUoCi0gICAgICAiZ29v
Z2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvIik7Ci0gIEdPT0dMRV9DSEVDSyhmaWxlICE9IE5V
TEwpOwotICBEdXJhdGlvbl9kZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlwZSgwKTsKLSAg
c3RhdGljIGNvbnN0IGludCBEdXJhdGlvbl9vZmZzZXRzX1syXSA9IHsKLSAgICBHT09HTEVfUFJP
VE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKER1cmF0aW9uLCBzZWNvbmRzXyks
Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChEdXJh
dGlvbiwgbmFub3NfKSwKLSAgfTsKLSAgRHVyYXRpb25fcmVmbGVjdGlvbl8gPQotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdH
ZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIER1cmF0aW9uX2Rlc2NyaXB0b3JfLAot
ICAgICAgRHVyYXRpb246OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgRHVyYXRpb25fb2Zmc2V0
c18sCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoRHVyYXRp
b24pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNF
VChEdXJhdGlvbiwgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICBHT09HTEVfUFJPVE9CVUZf
R0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKER1cmF0aW9uLCBfaXNfZGVmYXVsdF9pbnN0
YW5jZV8pKTsKLX0KLQotbmFtZXNwYWNlIHsKLQotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05D
RShwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc19vbmNlXyk7Ci1pbmxpbmUgdm9pZCBwcm90b2J1
Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xl
T25jZUluaXQoJnByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzX29uY2VfLAotICAgICAgICAgICAg
ICAgICAmcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmR1cmF0aW9uXzJl
cHJvdG8pOwotfQotCi12b2lkIHByb3RvYnVmX1JlZ2lzdGVyVHlwZXMoY29uc3QgOjpzdGQ6OnN0
cmluZyYpIHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNz
YWdlKAotICAgICAgRHVyYXRpb25fZGVzY3JpcHRvcl8sICZEdXJhdGlvbjo6ZGVmYXVsdF9pbnN0
YW5jZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLXZvaWQgcHJvdG9idWZfU2h1dGRvd25G
aWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZHVyYXRpb25fMmVwcm90bygpIHsKLSAgZGVsZXRlIER1
cmF0aW9uOjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRlIER1cmF0aW9uX3JlZmxlY3Rpb25f
OwotfQotCi12b2lkIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZkdXJhdGlv
bl8yZXByb3RvKCkgewotICBzdGF0aWMgYm9vbCBhbHJlYWR5X2hlcmUgPSBmYWxzZTsKLSAgaWYg
KGFscmVhZHlfaGVyZSkgcmV0dXJuOwotICBhbHJlYWR5X2hlcmUgPSB0cnVlOwotICBHT09HTEVf
UFJPVE9CVUZfVkVSSUZZX1ZFUlNJT047Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlw
dG9yUG9vbDo6SW50ZXJuYWxBZGRHZW5lcmF0ZWRGaWxlKAotICAgICJcblwwMzZnb29nbGUvcHJv
dG9idWYvZHVyYXRpb24ucHJvdG9cMDIyXDAxN2dvb2dsZSIKLSAgICAiLnByb3RvYnVmXCIqXG5c
MDEwRHVyYXRpb25cMDIyXDAxN1xuXDAwN3NlY29uZHNcMDMwXDAwMSBcMDAxKFwwMDNcMDIyXHIi
Ci0gICAgIlxuXDAwNW5hbm9zXDAzMFwwMDIgXDAwMShcMDA1QnxcblwwMjNjb20uZ29vZ2xlLnBy
b3RvYnVmQlxyRHUiCi0gICAgInJhdGlvblByb3RvUFwwMDFaKmdpdGh1Yi5jb20vZ29sYW5nL3By
b3RvYnUiCi0gICAgImYvcHR5cGVzL2R1cmF0aW9uXDI0MFwwMDFcMDAxXDI0MlwwMDJcMDAzR1BC
XDI1MlwwMDJcMDM2R29vZ2xlLlByb3QiCi0gICAgIm9idWYuV2VsbEtub3duVHlwZXNiXDAwNnBy
b3RvMyIsIDIyNyk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVy
bmFsUmVnaXN0ZXJHZW5lcmF0ZWRGaWxlKAotICAgICJnb29nbGUvcHJvdG9idWYvZHVyYXRpb24u
cHJvdG8iLCAmcHJvdG9idWZfUmVnaXN0ZXJUeXBlcyk7Ci0gIER1cmF0aW9uOjpkZWZhdWx0X2lu
c3RhbmNlXyA9IG5ldyBEdXJhdGlvbigpOwotICBEdXJhdGlvbjo6ZGVmYXVsdF9pbnN0YW5jZV8t
PkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpPblNodXRkb3duKCZwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZk
dXJhdGlvbl8yZXByb3RvKTsKLX0KLQotLy8gRm9yY2UgQWRkRGVzY3JpcHRvcnMoKSB0byBiZSBj
YWxsZWQgYXQgc3RhdGljIGluaXRpYWxpemF0aW9uIHRpbWUuCi1zdHJ1Y3QgU3RhdGljRGVzY3Jp
cHRvckluaXRpYWxpemVyX2dvb2dsZV8yZnByb3RvYnVmXzJmZHVyYXRpb25fMmVwcm90byB7Ci0g
IFN0YXRpY0Rlc2NyaXB0b3JJbml0aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8yZmR1cmF0aW9u
XzJlcHJvdG8oKSB7Ci0gICAgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmR1
cmF0aW9uXzJlcHJvdG8oKTsKLSAgfQotfSBzdGF0aWNfZGVzY3JpcHRvcl9pbml0aWFsaXplcl9n
b29nbGVfMmZwcm90b2J1Zl8yZmR1cmF0aW9uXzJlcHJvdG9fOwotCi1uYW1lc3BhY2UgewotCi1z
dGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGludCBsaW5lKSBHT09HTEVfQVRUUklCVVRFX0NPTEQ7
Ci1zdGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGludCBsaW5lKSB7Ci0gIEdPT0dMRV9DSEVDSyhm
YWxzZSkgPDwgX19GSUxFX18gPDwgIjoiIDw8IGxpbmU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQot
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+
PSAxOTAwCi1jb25zdCBpbnQgRHVyYXRpb246OmtTZWNvbmRzRmllbGROdW1iZXI7Ci1jb25zdCBp
bnQgRHVyYXRpb246OmtOYW5vc0ZpZWxkTnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVND
X1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotCi1EdXJhdGlvbjo6RHVyYXRpb24oKQotICA6IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsK
LSAgU2hhcmVkQ3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0
b3I6Z29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uKQotfQotCi12b2lkIER1cmF0aW9uOjpJbml0QXNE
ZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IHRydWU7Ci19Ci0K
LUR1cmF0aW9uOjpEdXJhdGlvbihjb25zdCBEdXJhdGlvbiYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAg
U2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbikKLX0KLQot
dm9pZCBEdXJhdGlvbjo6U2hhcmVkQ3RvcigpIHsKLSAgICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8g
PSBmYWxzZTsKLSAgX2NhY2hlZF9zaXplXyA9IDA7Ci0gIHNlY29uZHNfID0gR09PR0xFX0xPTkdM
T05HKDApOwotICBuYW5vc18gPSAwOwotfQotCi1EdXJhdGlvbjo6fkR1cmF0aW9uKCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRHVy
YXRpb24pCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBEdXJhdGlvbjo6U2hhcmVkRHRvcigp
IHsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIER1
cmF0aW9uOjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NP
TkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09H
TEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RGVzY3JpcHRvciogRHVyYXRpb246OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fz
c2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gRHVyYXRpb25fZGVzY3JpcHRvcl87Ci19
Ci0KLWNvbnN0IER1cmF0aW9uJiBEdXJhdGlvbjo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYg
KGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJv
dG9idWZfMmZkdXJhdGlvbl8yZXByb3RvKCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87
Ci19Ci0KLUR1cmF0aW9uKiBEdXJhdGlvbjo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1E
dXJhdGlvbiogRHVyYXRpb246Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkg
Y29uc3QgewotICBEdXJhdGlvbiogbiA9IG5ldyBEdXJhdGlvbjsKLSAgaWYgKGFyZW5hICE9IE5V
TEwpIHsKLSAgICBhcmVuYS0+T3duKG4pOwotICB9Ci0gIHJldHVybiBuOwotfQotCi12b2lkIER1
cmF0aW9uOjpDbGVhcigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2Ns
ZWFyX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbikKLSNpZiBkZWZpbmVkKF9fY2xhbmdf
XykKLSNkZWZpbmUgWlJfSEVMUEVSXyhmKSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMg
cHVzaCIpIFwKLSAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdpbnZhbGlk
LW9mZnNldG9mXCIiKSBcCi0gIF9fYnVpbHRpbl9vZmZzZXRvZihEdXJhdGlvbiwgZikgXAotICBf
UHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHBvcCIpCi0jZWxzZQotI2RlZmluZSBaUl9IRUxQRVJf
KGYpIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KFwKLSAgJnJlaW50ZXJwcmV0X2Nhc3Q8RHVyYXRp
b24qPigxNiktPmYpCi0jZW5kaWYKLQotI2RlZmluZSBaUl8oZmlyc3QsIGxhc3QpIGRvIHtcCi0g
IDo6bWVtc2V0KCZmaXJzdCwgMCxcCi0gICAgICAgICAgIFpSX0hFTFBFUl8obGFzdCkgLSBaUl9I
RUxQRVJfKGZpcnN0KSArIHNpemVvZihsYXN0KSk7XAotfSB3aGlsZSAoMCkKLQotICBaUl8oc2Vj
b25kc18sIG5hbm9zXyk7Ci0KLSN1bmRlZiBaUl9IRUxQRVJfCi0jdW5kZWYgWlJfCi0KLX0KLQot
Ym9vbCBEdXJhdGlvbjo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhF
WFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFp
bHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpnb29nbGUucHJvdG9idWYuRHVyYXRpb24pCi0gIGZv
ciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJv
b2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0
OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGRO
dW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0aW9uYWwgaW50NjQgc2Vjb25kcyA9IDE7Ci0gICAg
ICBjYXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA4KSB7Ci0gICAgICAgICAgRE9fKCg6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwK
LSAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDY0LCA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9JTlQ2ND4oCi0gICAgICAg
ICAgICAgICAgIGlucHV0LCAmc2Vjb25kc18pKSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+
RXhwZWN0VGFnKDE2KSkgZ290byBwYXJzZV9uYW5vczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0KLSAgICAgIC8vIG9wdGlvbmFsIGludDMyIG5hbm9zID0gMjsKLSAgICAgIGNhc2UgMjogewot
ICAgICAgICBpZiAodGFnID09IDE2KSB7Ci0gICAgICAgICBwYXJzZV9uYW5vczoKLSAgICAgICAg
ICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFk
UHJpbWl0aXZlPAotICAgICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIs
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0lOVDMy
PigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZuYW5vc18pKSk7Ci0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChpbnB1dC0+RXhwZWN0QXRFbmQoKSkgZ290byBzdWNjZXNzOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLQotICAgICAgZGVmYXVsdDogewotICAgICAgaGFuZGxlX3VudXN1YWw6Ci0gICAgICAg
IGlmICh0YWcgPT0gMCB8fAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAgICAgICAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9FTkRf
R1JPVVApIHsKLSAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgRE9f
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTa2lwRmllbGQo
aW5wdXQsIHRhZykpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nl
c3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5w
cm90b2J1Zi5EdXJhdGlvbikKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuRHVyYXRpb24p
Ci0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9pZCBEdXJhdGlvbjo6U2VyaWFs
aXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0
cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuRHVyYXRpb24pCi0gIC8vIG9wdGlvbmFs
IGludDY0IHNlY29uZHMgPSAxOwotICBpZiAodGhpcy0+c2Vjb25kcygpICE9IDApIHsKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQ2NCgx
LCB0aGlzLT5zZWNvbmRzKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBpbnQzMiBu
YW5vcyA9IDI7Ci0gIGlmICh0aGlzLT5uYW5vcygpICE9IDApIHsKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQzMigyLCB0aGlzLT5uYW5v
cygpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlh
bGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uKQotfQotCi06Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQ4KiBEdXJhdGlvbjo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgKLSAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29nbGUucHJvdG9i
dWYuRHVyYXRpb24pCi0gIC8vIG9wdGlvbmFsIGludDY0IHNlY29uZHMgPSAxOwotICBpZiAodGhp
cy0+c2Vjb25kcygpICE9IDApIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQ2NFRvQXJyYXkoMSwgdGhpcy0+c2Vjb25k
cygpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgaW50MzIgbmFub3MgPSAyOwotICBp
ZiAodGhpcy0+bmFub3MoKSAhPSAwKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzJUb0FycmF5KDIsIHRoaXMtPm5h
bm9zKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2Vy
aWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuRHVyYXRpb24pCi0gIHJldHVybiB0
YXJnZXQ7Ci19Ci0KLWludCBEdXJhdGlvbjo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LkR1cmF0aW9uKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgLy8gb3B0aW9uYWwgaW50NjQg
c2Vjb25kcyA9IDE7Ci0gIGlmICh0aGlzLT5zZWNvbmRzKCkgIT0gMCkgewotICAgIHRvdGFsX3Np
emUgKz0gMSArCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6SW50NjRTaXplKAotICAgICAgICB0aGlzLT5zZWNvbmRzKCkpOwotICB9Ci0KLSAgLy8g
b3B0aW9uYWwgaW50MzIgbmFub3MgPSAyOwotICBpZiAodGhpcy0+bmFub3MoKSAhPSAwKSB7Ci0g
ICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpJbnQzMlNpemUoCi0gICAgICAgIHRoaXMtPm5hbm9zKCkpOwotICB9
Ci0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9z
aXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgp
OwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBEdXJhdGlvbjo6TWVyZ2VGcm9tKGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LkR1cmF0aW9uKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1l
cmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25zdCBEdXJhdGlvbiogc291cmNlID0gCi0gICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNv
bnN0IER1cmF0aW9uPigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9j
YXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uKQotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2Ug
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9j
YXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uKQotICAgIE1lcmdlRnJvbSgqc291
cmNlKTsKLSAgfQotfQotCi12b2lkIER1cmF0aW9uOjpNZXJnZUZyb20oY29uc3QgRHVyYXRpb24m
IGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19tZXJn
ZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbikKLSAgaWYgKEdPT0dMRV9QUkVE
SUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgaWYg
KGZyb20uc2Vjb25kcygpICE9IDApIHsKLSAgICBzZXRfc2Vjb25kcyhmcm9tLnNlY29uZHMoKSk7
Ci0gIH0KLSAgaWYgKGZyb20ubmFub3MoKSAhPSAwKSB7Ci0gICAgc2V0X25hbm9zKGZyb20ubmFu
b3MoKSk7Ci0gIH0KLX0KLQotdm9pZCBEdXJhdGlvbjo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Z2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbikKLSAg
aWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20p
OwotfQotCi12b2lkIER1cmF0aW9uOjpDb3B5RnJvbShjb25zdCBEdXJhdGlvbiYgZnJvbSkgewot
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFy
dDpnb29nbGUucHJvdG9idWYuRHVyYXRpb24pCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47
Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBEdXJhdGlvbjo6SXNJ
bml0aWFsaXplZCgpIGNvbnN0IHsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBEdXJhdGlv
bjo6U3dhcChEdXJhdGlvbiogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsK
LSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgRHVyYXRpb246OkludGVybmFsU3dhcChE
dXJhdGlvbiogb3RoZXIpIHsKLSAgc3RkOjpzd2FwKHNlY29uZHNfLCBvdGhlci0+c2Vjb25kc18p
OwotICBzdGQ6OnN3YXAobmFub3NfLCBvdGhlci0+bmFub3NfKTsKLSAgX2ludGVybmFsX21ldGFk
YXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7Ci0gIHN0ZDo6c3dhcChfY2Fj
aGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWV0YWRhdGEgRHVyYXRpb246OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9B
c3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBt
ZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IER1cmF0aW9uX2Rlc2NyaXB0b3JfOwot
ICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gRHVyYXRpb25fcmVmbGVjdGlvbl87Ci0gIHJldHVybiBt
ZXRhZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gRHVy
YXRpb24KLQotLy8gb3B0aW9uYWwgaW50NjQgc2Vjb25kcyA9IDE7Ci12b2lkIER1cmF0aW9uOjpj
bGVhcl9zZWNvbmRzKCkgewotICBzZWNvbmRzXyA9IEdPT0dMRV9MT05HTE9ORygwKTsKLX0KLSA6
Omdvb2dsZTo6cHJvdG9idWY6OmludDY0IER1cmF0aW9uOjpzZWNvbmRzKCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5EdXJh
dGlvbi5zZWNvbmRzKQotICByZXR1cm4gc2Vjb25kc187Ci19Ci0gdm9pZCBEdXJhdGlvbjo6c2V0
X3NlY29uZHMoOjpnb29nbGU6OnByb3RvYnVmOjppbnQ2NCB2YWx1ZSkgewotICAKLSAgc2Vjb25k
c18gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29n
bGUucHJvdG9idWYuRHVyYXRpb24uc2Vjb25kcykKLX0KLQotLy8gb3B0aW9uYWwgaW50MzIgbmFu
b3MgPSAyOwotdm9pZCBEdXJhdGlvbjo6Y2xlYXJfbmFub3MoKSB7Ci0gIG5hbm9zXyA9IDA7Ci19
Ci0gOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBEdXJhdGlvbjo6bmFub3MoKSBjb25zdCB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkR1
cmF0aW9uLm5hbm9zKQotICByZXR1cm4gbmFub3NfOwotfQotIHZvaWQgRHVyYXRpb246OnNldF9u
YW5vcyg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIAotICBuYW5vc18gPSB2
YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJv
dG9idWYuRHVyYXRpb24ubmFub3MpCi19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05P
VF9JTl9IRUFERVJTCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChuYW1lc3BhY2Vfc2Nv
cGUpCi0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQot
Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2xvYmFsX3Njb3BlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnBiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZHVy
YXRpb24ucGIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE1YTUyYzQyYzYzNTk0
YjIyMzlmNDE4YzRiNGExN2FmNTdlYzg2MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucGIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1
ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYv
ZHVyYXRpb24ucHJvdG8KLQotI2lmbmRlZiBQUk9UT0JVRl9nb29nbGVfMmZwcm90b2J1Zl8yZmR1
cmF0aW9uXzJlcHJvdG9fX0lOQ0xVREVECi0jZGVmaW5lIFBST1RPQlVGX2dvb2dsZV8yZnByb3Rv
YnVmXzJmZHVyYXRpb25fMmVwcm90b19fSU5DTFVERUQKLQotI2luY2x1ZGUgPHN0cmluZz4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotI2lmIEdPT0dMRV9Q
Uk9UT0JVRl9WRVJTSU9OIDwgMzAwMDAwMAotI2Vycm9yIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVk
IGJ5IGEgbmV3ZXIgdmVyc2lvbiBvZiBwcm90b2Mgd2hpY2ggaXMKLSNlcnJvciBpbmNvbXBhdGli
bGUgd2l0aCB5b3VyIFByb3RvY29sIEJ1ZmZlciBoZWFkZXJzLiAgUGxlYXNlIHVwZGF0ZQotI2Vy
cm9yIHlvdXIgaGVhZGVycy4KLSNlbmRpZgotI2lmIDMwMDAwMDAgPCBHT09HTEVfUFJPVE9CVUZf
TUlOX1BST1RPQ19WRVJTSU9OCi0jZXJyb3IgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgYW4g
b2xkZXIgdmVyc2lvbiBvZiBwcm90b2Mgd2hpY2ggaXMKLSNlcnJvciBpbmNvbXBhdGlibGUgd2l0
aCB5b3VyIFByb3RvY29sIEJ1ZmZlciBoZWFkZXJzLiAgUGxlYXNlCi0jZXJyb3IgcmVnZW5lcmF0
ZSB0aGlzIGZpbGUgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgcHJvdG9jLgotI2VuZGlmCi0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYXJlbmEuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvYXJlbmFzdHJpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21l
c3NhZ2VfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXRhZGF0YS5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3JlcGVhdGVkX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2V4dGVuc2lv
bl9zZXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5rbm93bl9maWVsZF9zZXQuaD4K
LS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbmNsdWRlcykKLQotbmFtZXNwYWNlIGdvb2ds
ZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi0vLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWwgLS0gZG8gbm90IGNhbGwgdGhlc2UuCi12b2lkIExJQlBST1RPQlVGX0VYUE9SVCBwcm90
b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZHVyYXRpb25fMmVwcm90bygpOwotdm9p
ZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZHVyYXRpb25fMmVwcm90
bygpOwotdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZkdXJh
dGlvbl8yZXByb3RvKCk7Ci0KLWNsYXNzIER1cmF0aW9uOwotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWNs
YXNzIExJQlBST1RPQlVGX0VYUE9SVCBEdXJhdGlvbiA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgRHVyYXRpb24oKTsKLSAgdmlydHVhbCB+RHVyYXRp
b24oKTsKLQotICBEdXJhdGlvbihjb25zdCBEdXJhdGlvbiYgZnJvbSk7Ci0KLSAgaW5saW5lIER1
cmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgRHVyYXRpb24mIGZyb20pIHsKLSAgICBDb3B5RnJvbShm
cm9tKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBEdXJh
dGlvbiYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChEdXJhdGlvbiogb3RoZXIp
OwotCi0gIC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgaW5saW5lIER1cmF0aW9uKiBOZXcoKSBjb25zdCB7IHJl
dHVybiBOZXcoTlVMTCk7IH0KLQotICBEdXJhdGlvbiogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6
QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IER1cmF0aW9u
JiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgRHVyYXRpb24mIGZyb20pOwotICB2b2lk
IENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGludCBCeXRlU2l6
ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLSAgdm9pZCBT
ZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpD
b2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1
aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRDdG9yKCk7Ci0g
IHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0
OwotICB2b2lkIEludGVybmFsU3dhcChEdXJhdGlvbiogb3RoZXIpOwotICBwcml2YXRlOgotICBp
bmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25z
dCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxp
bmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21l
dGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlw
ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgaW50NjQgc2Vjb25kcyA9IDE7Ci0gIHZv
aWQgY2xlYXJfc2Vjb25kcygpOwotICBzdGF0aWMgY29uc3QgaW50IGtTZWNvbmRzRmllbGROdW1i
ZXIgPSAxOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDY0IHNlY29uZHMoKSBjb25zdDsKLSAg
dm9pZCBzZXRfc2Vjb25kcyg6Omdvb2dsZTo6cHJvdG9idWY6OmludDY0IHZhbHVlKTsKLQotICAv
LyBvcHRpb25hbCBpbnQzMiBuYW5vcyA9IDI7Ci0gIHZvaWQgY2xlYXJfbmFub3MoKTsKLSAgc3Rh
dGljIGNvbnN0IGludCBrTmFub3NGaWVsZE51bWJlciA9IDI7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50MzIgbmFub3MoKSBjb25zdDsKLSAgdm9pZCBzZXRfbmFub3MoOjpnb29nbGU6OnByb3Rv
YnVmOjppbnQzMiB2YWx1ZSk7Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNz
X3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbikKLSBwcml2YXRlOgotCi0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFs
X21ldGFkYXRhXzsKLSAgYm9vbCBfaXNfZGVmYXVsdF9pbnN0YW5jZV87Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50NjQgc2Vjb25kc187Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgbmFu
b3NfOwotICBtdXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9U
T0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmR1cmF0aW9u
XzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZw
cm90b2J1Zl8yZmR1cmF0aW9uXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfU2h1
dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZHVyYXRpb25fMmVwcm90bygpOwotCi0gIHZv
aWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBEdXJhdGlvbiogZGVmYXVsdF9p
bnN0YW5jZV87Ci19OwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmICFQ
Uk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIER1cmF0aW9uCi0KLS8vIG9wdGlvbmFs
IGludDY0IHNlY29uZHMgPSAxOwotaW5saW5lIHZvaWQgRHVyYXRpb246OmNsZWFyX3NlY29uZHMo
KSB7Ci0gIHNlY29uZHNfID0gR09PR0xFX0xPTkdMT05HKDApOwotfQotaW5saW5lIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50NjQgRHVyYXRpb246OnNlY29uZHMoKSBjb25zdCB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uLnNl
Y29uZHMpCi0gIHJldHVybiBzZWNvbmRzXzsKLX0KLWlubGluZSB2b2lkIER1cmF0aW9uOjpzZXRf
c2Vjb25kcyg6Omdvb2dsZTo6cHJvdG9idWY6OmludDY0IHZhbHVlKSB7Ci0gIAotICBzZWNvbmRz
XyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5EdXJhdGlvbi5zZWNvbmRzKQotfQotCi0vLyBvcHRpb25hbCBpbnQzMiBuYW5v
cyA9IDI7Ci1pbmxpbmUgdm9pZCBEdXJhdGlvbjo6Y2xlYXJfbmFub3MoKSB7Ci0gIG5hbm9zXyA9
IDA7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBEdXJhdGlvbjo6bmFub3Mo
KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xl
LnByb3RvYnVmLkR1cmF0aW9uLm5hbm9zKQotICByZXR1cm4gbmFub3NfOwotfQotaW5saW5lIHZv
aWQgRHVyYXRpb246OnNldF9uYW5vcyg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7
Ci0gIAotICBuYW5vc18gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3NldDpnb29nbGUucHJvdG9idWYuRHVyYXRpb24ubmFub3MpCi19Ci0KLSNlbmRpZiAgLy8g
IVBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotCi0vLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQobmFtZXNwYWNlX3Njb3BlKQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2JhbF9z
Y29wZSkKLQotI2VuZGlmICAvLyBQUk9UT0JVRl9nb29nbGVfMmZwcm90b2J1Zl8yZmR1cmF0aW9u
XzJlcHJvdG9fX0lOQ0xVREVECmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZHVyYXRp
b24ucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk2YzE3OTZkNjU5NGE2M2YwNWE4YmViMThkODk1NjMzYjU1Mjlh
ZTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9ICJwcm90bzMi
OwotCi1wYWNrYWdlIGdvb2dsZS5wcm90b2J1ZjsKLQotb3B0aW9uIGNzaGFycF9uYW1lc3BhY2Ug
PSAiR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzIjsKLW9wdGlvbiBnb19wYWNrYWdlID0g
ImdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3B0eXBlcy9kdXJhdGlvbiI7Ci1vcHRpb24gamF2
YV9wYWNrYWdlID0gImNvbS5nb29nbGUucHJvdG9idWYiOwotb3B0aW9uIGphdmFfb3V0ZXJfY2xh
c3NuYW1lID0gIkR1cmF0aW9uUHJvdG8iOwotb3B0aW9uIGphdmFfbXVsdGlwbGVfZmlsZXMgPSB0
cnVlOwotb3B0aW9uIGphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoID0gdHJ1ZTsKLW9wdGlv
biBvYmpjX2NsYXNzX3ByZWZpeCA9ICJHUEIiOwotCi0vLyBBIER1cmF0aW9uIHJlcHJlc2VudHMg
YSBzaWduZWQsIGZpeGVkLWxlbmd0aCBzcGFuIG9mIHRpbWUgcmVwcmVzZW50ZWQKLS8vIGFzIGEg
Y291bnQgb2Ygc2Vjb25kcyBhbmQgZnJhY3Rpb25zIG9mIHNlY29uZHMgYXQgbmFub3NlY29uZAot
Ly8gcmVzb2x1dGlvbi4gSXQgaXMgaW5kZXBlbmRlbnQgb2YgYW55IGNhbGVuZGFyIGFuZCBjb25j
ZXB0cyBsaWtlICJkYXkiCi0vLyBvciAibW9udGgiLiBJdCBpcyByZWxhdGVkIHRvIFRpbWVzdGFt
cCBpbiB0aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLS8vIHR3byBUaW1lc3RhbXAgdmFsdWVz
IGlzIGEgRHVyYXRpb24gYW5kIGl0IGNhbiBiZSBhZGRlZCBvciBzdWJ0cmFjdGVkCi0vLyBmcm9t
IGEgVGltZXN0YW1wLiBSYW5nZSBpcyBhcHByb3hpbWF0ZWx5ICstMTAsMDAwIHllYXJzLgotLy8K
LS8vIEV4YW1wbGUgMTogQ29tcHV0ZSBEdXJhdGlvbiBmcm9tIHR3byBUaW1lc3RhbXBzIGluIHBz
ZXVkbyBjb2RlLgotLy8KLS8vICAgICBUaW1lc3RhbXAgc3RhcnQgPSAuLi47Ci0vLyAgICAgVGlt
ZXN0YW1wIGVuZCA9IC4uLjsKLS8vICAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IC4uLjsKLS8vCi0v
LyAgICAgZHVyYXRpb24uc2Vjb25kcyA9IGVuZC5zZWNvbmRzIC0gc3RhcnQuc2Vjb25kczsKLS8v
ICAgICBkdXJhdGlvbi5uYW5vcyA9IGVuZC5uYW5vcyAtIHN0YXJ0Lm5hbm9zOwotLy8KLS8vICAg
ICBpZiAoZHVyYXRpb24uc2Vjb25kcyA8IDAgJiYgZHVyYXRpb24ubmFub3MgPiAwKSB7Ci0vLyAg
ICAgICBkdXJhdGlvbi5zZWNvbmRzICs9IDE7Ci0vLyAgICAgICBkdXJhdGlvbi5uYW5vcyAtPSAx
MDAwMDAwMDAwOwotLy8gICAgIH0gZWxzZSBpZiAoZHVyYXRpb25zLnNlY29uZHMgPiAwICYmIGR1
cmF0aW9uLm5hbm9zIDwgMCkgewotLy8gICAgICAgZHVyYXRpb24uc2Vjb25kcyAtPSAxOwotLy8g
ICAgICAgZHVyYXRpb24ubmFub3MgKz0gMTAwMDAwMDAwMDsKLS8vICAgICB9Ci0vLwotLy8gRXhh
bXBsZSAyOiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIFRpbWVzdGFtcCArIER1cmF0aW9uIGluIHBz
ZXVkbyBjb2RlLgotLy8KLS8vICAgICBUaW1lc3RhbXAgc3RhcnQgPSAuLi47Ci0vLyAgICAgRHVy
YXRpb24gZHVyYXRpb24gPSAuLi47Ci0vLyAgICAgVGltZXN0YW1wIGVuZCA9IC4uLjsKLS8vCi0v
LyAgICAgZW5kLnNlY29uZHMgPSBzdGFydC5zZWNvbmRzICsgZHVyYXRpb24uc2Vjb25kczsKLS8v
ICAgICBlbmQubmFub3MgPSBzdGFydC5uYW5vcyArIGR1cmF0aW9uLm5hbm9zOwotLy8KLS8vICAg
ICBpZiAoZW5kLm5hbm9zIDwgMCkgewotLy8gICAgICAgZW5kLnNlY29uZHMgLT0gMTsKLS8vICAg
ICAgIGVuZC5uYW5vcyArPSAxMDAwMDAwMDAwOwotLy8gICAgIH0gZWxzZSBpZiAoZW5kLm5hbm9z
ID49IDEwMDAwMDAwMDApIHsKLS8vICAgICAgIGVuZC5zZWNvbmRzICs9IDE7Ci0vLyAgICAgICBl
bmQubmFub3MgLT0gMTAwMDAwMDAwMDsKLS8vICAgICB9Ci0vLwotLy8KLW1lc3NhZ2UgRHVyYXRp
b24gewotCi0gIC8vIFNpZ25lZCBzZWNvbmRzIG9mIHRoZSBzcGFuIG9mIHRpbWUuIE11c3QgYmUg
ZnJvbSAtMzE1LDU3NiwwMDAsMDAwCi0gIC8vIHRvICszMTUsNTc2LDAwMCwwMDAgaW5jbHVzaXZl
LgotICBpbnQ2NCBzZWNvbmRzID0gMTsKLQotICAvLyBTaWduZWQgZnJhY3Rpb25zIG9mIGEgc2Vj
b25kIGF0IG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBvZiB0aGUgc3BhbgotICAvLyBvZiB0aW1lLiBE
dXJhdGlvbnMgbGVzcyB0aGFuIG9uZSBzZWNvbmQgYXJlIHJlcHJlc2VudGVkIHdpdGggYSAwCi0g
IC8vIGBzZWNvbmRzYCBmaWVsZCBhbmQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBgbmFub3NgIGZp
ZWxkLiBGb3IgZHVyYXRpb25zCi0gIC8vIG9mIG9uZSBzZWNvbmQgb3IgbW9yZSwgYSBub24temVy
byB2YWx1ZSBmb3IgdGhlIGBuYW5vc2AgZmllbGQgbXVzdCBiZQotICAvLyBvZiB0aGUgc2FtZSBz
aWduIGFzIHRoZSBgc2Vjb25kc2AgZmllbGQuIE11c3QgYmUgZnJvbSAtOTk5LDk5OSw5OTkKLSAg
Ly8gdG8gKzk5OSw5OTksOTk5IGluY2x1c2l2ZS4KLSAgaW50MzIgbmFub3MgPSAyOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9keW5hbWljX21lc3NhZ2UuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDllODNiZDI5MThlNGU4MjgzMTIwMjY1MTVhNmI0YzVlYzQzOTk4NTYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2R5
bmFtaWNfbWVzc2FnZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDg3NCArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNv
bSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMg
ZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0v
LwotLy8gRHluYW1pY01lc3NhZ2UgaXMgaW1wbGVtZW50ZWQgYnkgY29uc3RydWN0aW5nIGEgZGF0
YSBzdHJ1Y3R1cmUgd2hpY2gKLS8vIGhhcyByb3VnaGx5IHRoZSBzYW1lIG1lbW9yeSBsYXlvdXQg
YXMgYSBnZW5lcmF0ZWQgbWVzc2FnZSB3b3VsZCBoYXZlLgotLy8gVGhlbiwgd2UgdXNlIEdlbmVy
YXRlZE1lc3NhZ2VSZWZsZWN0aW9uIHRvIGltcGxlbWVudCBvdXIgcmVmbGVjdGlvbgotLy8gaW50
ZXJmYWNlLiAgQWxsIHRoZSBvdGhlciBvcGVyYXRpb25zIHdlIG5lZWQgdG8gaW1wbGVtZW50IChl
LmcuCi0vLyBwYXJzaW5nLCBjb3B5aW5nLCBldGMuKSBhcmUgYWxyZWFkeSBpbXBsZW1lbnRlZCBp
biB0ZXJtcyBvZgotLy8gUmVmbGVjdGlvbiwgc28gdGhlIHJlc3QgaXMgZWFzeS4KLS8vCi0vLyBU
aGUgdXAgc2lkZSBvZiB0aGlzIHN0cmF0ZWd5IGlzIHRoYXQgaXQncyB2ZXJ5IGVmZmljaWVudC4g
IFdlIGRvbid0Ci0vLyBuZWVkIHRvIHVzZSBoYXNoX21hcHMgb3IgZ2VuZXJpYyByZXByZXNlbnRh
dGlvbnMgb2YgZmllbGRzLiAgVGhlCi0vLyBkb3duIHNpZGUgaXMgdGhhdCB0aGlzIGlzIGEgbG93
LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGhhY2sgd2hpY2gKLS8vIGNhbiBiZSB0cmlja3kgdG8g
Z2V0IHJpZ2h0LgotLy8KLS8vIEFzIG1lbnRpb25lZCBpbiB0aGUgaGVhZGVyLCB3ZSBvbmx5IGV4
cG9zZSBhIER5bmFtaWNNZXNzYWdlRmFjdG9yeQotLy8gcHVibGljbHksIG5vdCB0aGUgRHluYW1p
Y01lc3NhZ2UgY2xhc3MgaXRzZWxmLiAgVGhpcyBpcyBiZWNhdXNlCi0vLyBHZW5lcmljTWVzc2Fn
ZVJlZmxlY3Rpb24gd2FudHMgdG8gaGF2ZSBhIHBvaW50ZXIgdG8gYSAiZGVmYXVsdCIKLS8vIGNv
cHkgb2YgdGhlIGNsYXNzLCB3aXRoIGFsbCBmaWVsZHMgaW5pdGlhbGl6ZWQgdG8gdGhlaXIgZGVm
YXVsdAotLy8gdmFsdWVzLiAgV2Ugb25seSB3YW50IHRvIGNvbnN0cnVjdCBvbmUgb2YgdGhlc2Ug
cGVyIG1lc3NhZ2UgdHlwZSwKLS8vIHNvIER5bmFtaWNNZXNzYWdlRmFjdG9yeSBzdG9yZXMgYSBj
YWNoZSBvZiBkZWZhdWx0IG1lc3NhZ2VzIGZvcgotLy8gZWFjaCB0eXBlIGl0IHNlZXMgKGVhY2gg
dW5pcXVlIERlc2NyaXB0b3IgcG9pbnRlcikuICBUaGUgY29kZQotLy8gcmVmZXJzIHRvIHRoZSAi
ZGVmYXVsdCIgY29weSBvZiB0aGUgY2xhc3MgYXMgdGhlICJwcm90b3R5cGUiLgotLy8KLS8vIE5v
dGUgb24gbWVtb3J5IGFsbG9jYXRpb246ICBUaGlzIG1vZHVsZSBvZnRlbiBjYWxscyAib3BlcmF0
b3IgbmV3KCkiCi0vLyB0byBhbGxvY2F0ZSB1bnR5cGVkIG1lbW9yeSwgcmF0aGVyIHRoYW4gY2Fs
bGluZyBzb21ldGhpbmcgbGlrZQotLy8gIm5ldyB1aW50OFtdIi4gIFRoaXMgaXMgYmVjYXVzZSAi
b3BlcmF0b3IgbmV3KCkiIG1lYW5zICJHaXZlIG1lIHNvbWUKLS8vIHNwYWNlIHdoaWNoIEkgY2Fu
IHVzZSBhcyBJIHBsZWFzZS4iIHdoaWxlICJuZXcgdWludDhbXSIgbWVhbnMgIkdpdmUKLS8vIG1l
IGFuIGFycmF5IG9mIDgtYml0IGludGVnZXJzLiIuICBJbiBwcmFjdGljZSwgdGhlIGxhdGVyIG1h
eSByZXR1cm4KLS8vIGEgcG9pbnRlciB0aGF0IGlzIG5vdCBhbGlnbmVkIGNvcnJlY3RseSBmb3Ig
Z2VuZXJhbCB1c2UuICBJIGJlbGlldmUKLS8vIEl0ZW0gOCBvZiAiTW9yZSBFZmZlY3RpdmUgQysr
IiBkaXNjdXNzZXMgdGhpcyBpbiBtb3JlIGRldGFpbCwgdGhvdWdoCi0vLyBJIGRvbid0IGhhdmUg
dGhlIGJvb2sgb24gbWUgcmlnaHQgbm93IHNvIEknbSBub3Qgc3VyZS4KLQotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oPgotI2luY2x1
ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2Nv
cGVkX3B0ci5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Z2VuZXJhdGVkX21lc3NhZ2VfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5l
cmF0ZWRfbWVzc2FnZV9yZWZsZWN0aW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Fy
ZW5hc3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZF9pbmwuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbl9vcHMuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvbWFwX3R5cGVfaGFuZGxlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9leHRlbnNp
b25fc2V0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLXVzaW5nIGludGVybmFsOjpXaXJlRm9ybWF0OwotdXNp
bmcgaW50ZXJuYWw6OkV4dGVuc2lvblNldDsKLXVzaW5nIGludGVybmFsOjpHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvbjsKLXVzaW5nIGludGVybmFsOjpNYXBGaWVsZDsKLXVzaW5nIGludGVybmFs
OjpEeW5hbWljTWFwRmllbGQ7Ci0KLQotdXNpbmcgaW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyOwot
Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0vLyBTb21lIGhlbHBlciB0YWJsZXMgYW5kIGZ1bmN0aW9ucy4uLgot
Ci1uYW1lc3BhY2UgewotCi1ib29sIElzTWFwRmllbGRJbkFwaShjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkKSB7Ci0gIHJldHVybiBmaWVsZC0+aXNfbWFwKCk7Ci19Ci0KLS8vIENvbXB1dGUg
dGhlIGJ5dGUgc2l6ZSBvZiB0aGUgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaWVs
ZC4KLWludCBGaWVsZFNwYWNlVXNlZChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0g
IHR5cGVkZWYgRmllbGREZXNjcmlwdG9yIEZEOyAgLy8gYXZvaWQgbGluZSB3cmFwcGluZwotICBp
ZiAoZmllbGQtPmxhYmVsKCkgPT0gRkQ6OkxBQkVMX1JFUEVBVEVEKSB7Ci0gICAgc3dpdGNoIChm
aWVsZC0+Y3BwX3R5cGUoKSkgewotICAgICAgY2FzZSBGRDo6Q1BQVFlQRV9JTlQzMiAgOiByZXR1
cm4gc2l6ZW9mKFJlcGVhdGVkRmllbGQ8aW50MzIgICA+KTsKLSAgICAgIGNhc2UgRkQ6OkNQUFRZ
UEVfSU5UNjQgIDogcmV0dXJuIHNpemVvZihSZXBlYXRlZEZpZWxkPGludDY0ICAgPik7Ci0gICAg
ICBjYXNlIEZEOjpDUFBUWVBFX1VJTlQzMiA6IHJldHVybiBzaXplb2YoUmVwZWF0ZWRGaWVsZDx1
aW50MzIgID4pOwotICAgICAgY2FzZSBGRDo6Q1BQVFlQRV9VSU5UNjQgOiByZXR1cm4gc2l6ZW9m
KFJlcGVhdGVkRmllbGQ8dWludDY0ICA+KTsKLSAgICAgIGNhc2UgRkQ6OkNQUFRZUEVfRE9VQkxF
IDogcmV0dXJuIHNpemVvZihSZXBlYXRlZEZpZWxkPGRvdWJsZSAgPik7Ci0gICAgICBjYXNlIEZE
OjpDUFBUWVBFX0ZMT0FUICA6IHJldHVybiBzaXplb2YoUmVwZWF0ZWRGaWVsZDxmbG9hdCAgID4p
OwotICAgICAgY2FzZSBGRDo6Q1BQVFlQRV9CT09MICAgOiByZXR1cm4gc2l6ZW9mKFJlcGVhdGVk
RmllbGQ8Ym9vbCAgICA+KTsKLSAgICAgIGNhc2UgRkQ6OkNQUFRZUEVfRU5VTSAgIDogcmV0dXJu
IHNpemVvZihSZXBlYXRlZEZpZWxkPGludCAgICAgPik7Ci0gICAgICBjYXNlIEZEOjpDUFBUWVBF
X01FU1NBR0U6Ci0gICAgICAgIGlmIChJc01hcEZpZWxkSW5BcGkoZmllbGQpKSB7Ci0gICAgICAg
ICAgcmV0dXJuIHNpemVvZihEeW5hbWljTWFwRmllbGQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIHJldHVybiBzaXplb2YoUmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPik7Ci0gICAgICAg
IH0KLQotICAgICAgY2FzZSBGRDo6Q1BQVFlQRV9TVFJJTkc6Ci0gICAgICAgIHN3aXRjaCAoZmll
bGQtPm9wdGlvbnMoKS5jdHlwZSgpKSB7Ci0gICAgICAgICAgZGVmYXVsdDogIC8vIFRPRE8oa2Vu
dG9uKTogIFN1cHBvcnQgb3RoZXIgc3RyaW5nIHJlcHMuCi0gICAgICAgICAgY2FzZSBGaWVsZE9w
dGlvbnM6OlNUUklORzoKLSAgICAgICAgICAgIHJldHVybiBzaXplb2YoUmVwZWF0ZWRQdHJGaWVs
ZDxzdHJpbmc+KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0gZWxzZSB7
Ci0gICAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotICAgICAgY2FzZSBGRDo6Q1BQVFlQ
RV9JTlQzMiAgOiByZXR1cm4gc2l6ZW9mKGludDMyICAgKTsKLSAgICAgIGNhc2UgRkQ6OkNQUFRZ
UEVfSU5UNjQgIDogcmV0dXJuIHNpemVvZihpbnQ2NCAgICk7Ci0gICAgICBjYXNlIEZEOjpDUFBU
WVBFX1VJTlQzMiA6IHJldHVybiBzaXplb2YodWludDMyICApOwotICAgICAgY2FzZSBGRDo6Q1BQ
VFlQRV9VSU5UNjQgOiByZXR1cm4gc2l6ZW9mKHVpbnQ2NCAgKTsKLSAgICAgIGNhc2UgRkQ6OkNQ
UFRZUEVfRE9VQkxFIDogcmV0dXJuIHNpemVvZihkb3VibGUgICk7Ci0gICAgICBjYXNlIEZEOjpD
UFBUWVBFX0ZMT0FUICA6IHJldHVybiBzaXplb2YoZmxvYXQgICApOwotICAgICAgY2FzZSBGRDo6
Q1BQVFlQRV9CT09MICAgOiByZXR1cm4gc2l6ZW9mKGJvb2wgICAgKTsKLSAgICAgIGNhc2UgRkQ6
OkNQUFRZUEVfRU5VTSAgIDogcmV0dXJuIHNpemVvZihpbnQgICAgICk7Ci0KLSAgICAgIGNhc2Ug
RkQ6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgcmV0dXJuIHNpemVvZihNZXNzYWdlKik7Ci0K
LSAgICAgIGNhc2UgRkQ6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgICBzd2l0Y2ggKGZpZWxkLT5v
cHRpb25zKCkuY3R5cGUoKSkgewotICAgICAgICAgIGRlZmF1bHQ6ICAvLyBUT0RPKGtlbnRvbik6
ICBTdXBwb3J0IG90aGVyIHN0cmluZyByZXBzLgotICAgICAgICAgIGNhc2UgRmllbGRPcHRpb25z
OjpTVFJJTkc6Ci0gICAgICAgICAgICByZXR1cm4gc2l6ZW9mKEFyZW5hU3RyaW5nUHRyKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBHT09HTEVfTE9HKERGQVRB
TCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJldHVybiAwOwotfQotCi0vLyBDb21wdXRlIHRo
ZSBieXRlIHNpemUgb2YgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvbmVvZiBmaWVs
ZHMKLS8vIGluIGRlZmF1bHQgb25lb2YgaW5zdGFuY2UuCi1pbnQgT25lb2ZGaWVsZFNwYWNlVXNl
ZChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHR5cGVkZWYgRmllbGREZXNjcmlw
dG9yIEZEOyAgLy8gYXZvaWQgbGluZSB3cmFwcGluZwotICBzd2l0Y2ggKGZpZWxkLT5jcHBfdHlw
ZSgpKSB7Ci0gICAgY2FzZSBGRDo6Q1BQVFlQRV9JTlQzMiAgOiByZXR1cm4gc2l6ZW9mKGludDMy
ICAgKTsKLSAgICBjYXNlIEZEOjpDUFBUWVBFX0lOVDY0ICA6IHJldHVybiBzaXplb2YoaW50NjQg
ICApOwotICAgIGNhc2UgRkQ6OkNQUFRZUEVfVUlOVDMyIDogcmV0dXJuIHNpemVvZih1aW50MzIg
ICk7Ci0gICAgY2FzZSBGRDo6Q1BQVFlQRV9VSU5UNjQgOiByZXR1cm4gc2l6ZW9mKHVpbnQ2NCAg
KTsKLSAgICBjYXNlIEZEOjpDUFBUWVBFX0RPVUJMRSA6IHJldHVybiBzaXplb2YoZG91YmxlICAp
OwotICAgIGNhc2UgRkQ6OkNQUFRZUEVfRkxPQVQgIDogcmV0dXJuIHNpemVvZihmbG9hdCAgICk7
Ci0gICAgY2FzZSBGRDo6Q1BQVFlQRV9CT09MICAgOiByZXR1cm4gc2l6ZW9mKGJvb2wgICAgKTsK
LSAgICBjYXNlIEZEOjpDUFBUWVBFX0VOVU0gICA6IHJldHVybiBzaXplb2YoaW50ICAgICApOwot
Ci0gICAgY2FzZSBGRDo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgcmV0dXJuIHNpemVvZihNZXNz
YWdlKik7Ci0KLSAgICBjYXNlIEZEOjpDUFBUWVBFX1NUUklORzoKLSAgICAgIHN3aXRjaCAoZmll
bGQtPm9wdGlvbnMoKS5jdHlwZSgpKSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNhc2Ug
RmllbGRPcHRpb25zOjpTVFJJTkc6Ci0gICAgICAgICAgcmV0dXJuIHNpemVvZihBcmVuYVN0cmlu
Z1B0cik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdPT0dMRV9MT0coREZBVEFM
KSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsKLSAgcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBpbnQgRGl2
aWRlUm91bmRpbmdVcChpbnQgaSwgaW50IGopIHsKLSAgcmV0dXJuIChpICsgKGogLSAxKSkgLyBq
OwotfQotCi1zdGF0aWMgY29uc3QgaW50IGtTYWZlQWxpZ25tZW50ID0gc2l6ZW9mKHVpbnQ2NCk7
Ci1zdGF0aWMgY29uc3QgaW50IGtNYXhPbmVvZlVuaW9uU2l6ZSA9IHNpemVvZih1aW50NjQpOwot
Ci1pbmxpbmUgaW50IEFsaWduVG8oaW50IG9mZnNldCwgaW50IGFsaWdubWVudCkgewotICByZXR1
cm4gRGl2aWRlUm91bmRpbmdVcChvZmZzZXQsIGFsaWdubWVudCkgKiBhbGlnbm1lbnQ7Ci19Ci0K
LS8vIFJvdW5kcyB0aGUgZ2l2ZW4gYnl0ZSBvZmZzZXQgdXAgdG8gdGhlIG5leHQgb2Zmc2V0IGFs
aWduZWQgc3VjaCB0aGF0IGFueQotLy8gdHlwZSBtYXkgYmUgc3RvcmVkIGF0IGl0LgotaW5saW5l
IGludCBBbGlnbk9mZnNldChpbnQgb2Zmc2V0KSB7Ci0gIHJldHVybiBBbGlnblRvKG9mZnNldCwg
a1NhZmVBbGlnbm1lbnQpOwotfQotCi0jZGVmaW5lIGJpdHNpemVvZihUKSAoc2l6ZW9mKFQpICog
OCkKLQotfSAgLy8gbmFtZXNwYWNlCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotY2xhc3MgRHluYW1pY01l
c3NhZ2UgOiBwdWJsaWMgTWVzc2FnZSB7Ci0gcHVibGljOgotICBzdHJ1Y3QgVHlwZUluZm8gewot
ICAgIGludCBzaXplOwotICAgIGludCBoYXNfYml0c19vZmZzZXQ7Ci0gICAgaW50IG9uZW9mX2Nh
c2Vfb2Zmc2V0OwotICAgIGludCB1bmtub3duX2ZpZWxkc19vZmZzZXQ7Ci0gICAgaW50IGV4dGVu
c2lvbnNfb2Zmc2V0OwotICAgIGludCBpc19kZWZhdWx0X2luc3RhbmNlX29mZnNldDsKLQotICAg
IC8vIE5vdCBvd25lZCBieSB0aGUgVHlwZUluZm8uCi0gICAgRHluYW1pY01lc3NhZ2VGYWN0b3J5
KiBmYWN0b3J5OyAgLy8gVGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVkIHRoaXMgb2JqZWN0LgotICAg
IGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29sOyAgICAgIC8vIFRoZSBmYWN0b3J5J3MgRGVzY3Jp
cHRvclBvb2wuCi0gICAgY29uc3QgRGVzY3JpcHRvciogdHlwZTsgICAgICAgICAgLy8gVHlwZSBv
ZiB0aGlzIER5bmFtaWNNZXNzYWdlLgotCi0gICAgLy8gV2FybmluZzogIFRoZSBvcmRlciBpbiB3
aGljaCB0aGUgZm9sbG93aW5nIHBvaW50ZXJzIGFyZSBkZWZpbmVkIGlzCi0gICAgLy8gICBpbXBv
cnRhbnQgKHRoZSBwcm90b3R5cGUgbXVzdCBiZSBkZWxldGVkICpiZWZvcmUqIHRoZSBvZmZzZXRz
KS4KLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfYXJyYXk8aW50PiBvZmZzZXRzOwotICAg
IGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8Y29uc3QgR2VuZXJhdGVkTWVzc2FnZVJlZmxl
Y3Rpb24+IHJlZmxlY3Rpb247Ci0gICAgLy8gRG9uJ3QgdXNlIGEgc2NvcGVkX3B0ciB0byBob2xk
IHRoZSBwcm90b3R5cGU6IHRoZSBkZXN0cnVjdG9yIGZvcgotICAgIC8vIER5bmFtaWNNZXNzYWdl
IG5lZWRzIHRvIGtub3cgd2hldGhlciBpdCBpcyB0aGUgcHJvdG90eXBlLCBhbmQgZG9lcyBzbyBi
eQotICAgIC8vIGxvb2tpbmcgYmFjayBhdCB0aGlzIGZpZWxkLiBUaGlzIHdvdWxkIGFzc3VtZSBk
ZXRhaWxzIGFib3V0IHRoZQotICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIHNjb3BlZF9wdHIuCi0g
ICAgY29uc3QgRHluYW1pY01lc3NhZ2UqIHByb3RvdHlwZTsKLSAgICB2b2lkKiBkZWZhdWx0X29u
ZW9mX2luc3RhbmNlOwotCi0gICAgVHlwZUluZm8oKSA6IHByb3RvdHlwZShOVUxMKSwgZGVmYXVs
dF9vbmVvZl9pbnN0YW5jZShOVUxMKSB7fQotCi0gICAgflR5cGVJbmZvKCkgewotICAgICAgZGVs
ZXRlIHByb3RvdHlwZTsKLSAgICAgIG9wZXJhdG9yIGRlbGV0ZShkZWZhdWx0X29uZW9mX2luc3Rh
bmNlKTsKLSAgICB9Ci0gIH07Ci0KLSAgRHluYW1pY01lc3NhZ2UoY29uc3QgVHlwZUluZm8qIHR5
cGVfaW5mbyk7Ci0gIH5EeW5hbWljTWVzc2FnZSgpOwotCi0gIC8vIENhbGxlZCBvbiB0aGUgcHJv
dG90eXBlIGFmdGVyIGNvbnN0cnVjdGlvbiB0byBpbml0aWFsaXplIG1lc3NhZ2UgZmllbGRzLgot
ICB2b2lkIENyb3NzTGlua1Byb3RvdHlwZXMoKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2Ug
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIE1lc3Nh
Z2UqIE5ldygpIGNvbnN0OwotICBNZXNzYWdlKiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YSogYXJlbmEpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZXRBcmVuYSgp
IGNvbnN0IHsgcmV0dXJuIE5VTEw7IH07Ci0KLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdDsK
LSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLQotICBNZXRhZGF0YSBHZXRN
ZXRhZGF0YSgpIGNvbnN0OwotCi0gIC8vIFdlIGFjdHVhbGx5IGFsbG9jYXRlIG1vcmUgbWVtb3J5
IHRoYW4gc2l6ZW9mKCp0aGlzKSB3aGVuIHRoaXMKLSAgLy8gY2xhc3MncyBtZW1vcnkgaXMgYWxs
b2NhdGVkIHZpYSB0aGUgZ2xvYmFsIG9wZXJhdG9yIG5ldy4gVGh1cywgd2UgbmVlZCB0bwotICAv
LyBtYW51YWxseSBjYWxsIHRoZSBnbG9iYWwgb3BlcmF0b3IgZGVsZXRlLiBDYWxsaW5nIHRoZSBk
ZXN0cnVjdG9yIGlzIHRha2VuCi0gIC8vIGNhcmUgb2YgZm9yIHVzLiBUaGlzIG1ha2VzIER5bmFt
aWNNZXNzYWdlIGNvbXBhdGlibGUgd2l0aCAtZnNpemVkLWRlbGV0ZS4KLSAgLy8gSXQgZG9lc24n
dCB3b3JrIGZvciBNU1ZDIHRob3VnaC4KLSNpZm5kZWYgX01TQ19WRVIKLSAgc3RhdGljIHZvaWQg
b3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0cikgewotICAgIDo6b3BlcmF0b3IgZGVsZXRlKHB0cik7
Ci0gIH0KLSNlbmRpZiAgLy8gIV9NU0NfVkVSCi0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxM
T1dfRVZJTF9DT05TVFJVQ1RPUlMoRHluYW1pY01lc3NhZ2UpOwotICBEeW5hbWljTWVzc2FnZShj
b25zdCBUeXBlSW5mbyogdHlwZV9pbmZvLCA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVu
YSk7Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotCi0gIGlubGluZSBib29sIGlzX3Byb3RvdHlwZSgp
IGNvbnN0IHsKLSAgICByZXR1cm4gdHlwZV9pbmZvXy0+cHJvdG90eXBlID09IHRoaXMgfHwKLSAg
ICAgICAgICAgLy8gSWYgdHlwZV9pbmZvXy0+cHJvdG90eXBlIGlzIE5VTEwsIHRoZW4gd2UgbXVz
dCBiZSBjb25zdHJ1Y3RpbmcKLSAgICAgICAgICAgLy8gdGhlIHByb3RvdHlwZSBub3csIHdoaWNo
IG1lYW5zIHdlIG11c3QgYmUgdGhlIHByb3RvdHlwZS4KLSAgICAgICAgICAgdHlwZV9pbmZvXy0+
cHJvdG90eXBlID09IE5VTEw7Ci0gIH0KLQotICBpbmxpbmUgdm9pZCogT2Zmc2V0VG9Qb2ludGVy
KGludCBvZmZzZXQpIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KHRoaXMp
ICsgb2Zmc2V0OwotICB9Ci0gIGlubGluZSBjb25zdCB2b2lkKiBPZmZzZXRUb1BvaW50ZXIoaW50
IG9mZnNldCkgY29uc3QgewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
Kj4odGhpcykgKyBvZmZzZXQ7Ci0gIH0KLQotICBjb25zdCBUeXBlSW5mbyogdHlwZV9pbmZvXzsK
LSAgLy8gVE9ETyhrZW50b24pOiAgTWFrZSB0aGlzIGFuIGF0b21pYzxpbnQ+IHdoZW4gQysrIHN1
cHBvcnRzIGl0LgotICBtdXRhYmxlIGludCBjYWNoZWRfYnl0ZV9zaXplXzsKLX07Ci0KLUR5bmFt
aWNNZXNzYWdlOjpEeW5hbWljTWVzc2FnZShjb25zdCBUeXBlSW5mbyogdHlwZV9pbmZvKQotICA6
IHR5cGVfaW5mb18odHlwZV9pbmZvKSwKLSAgICBjYWNoZWRfYnl0ZV9zaXplXygwKSB7Ci0gIFNo
YXJlZEN0b3IoKTsKLX0KLQotRHluYW1pY01lc3NhZ2U6OkR5bmFtaWNNZXNzYWdlKGNvbnN0IFR5
cGVJbmZvKiB0eXBlX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpCi0gIDogdHlwZV9pbmZvXyh0eXBlX2luZm8pLAot
ICAgIGNhY2hlZF9ieXRlX3NpemVfKDApIHsKLSAgU2hhcmVkQ3RvcigpOwotfQotCi12b2lkIER5
bmFtaWNNZXNzYWdlOjpTaGFyZWRDdG9yKCkgewotICAvLyBXZSBuZWVkIHRvIGNhbGwgY29uc3Ry
dWN0b3JzIGZvciB2YXJpb3VzIGZpZWxkcyBtYW51YWxseSBhbmQgc2V0Ci0gIC8vIGRlZmF1bHQg
dmFsdWVzIHdoZXJlIGFwcHJvcHJpYXRlLiAgV2UgdXNlIHBsYWNlbWVudCBuZXcgdG8gY2FsbAot
ICAvLyBjb25zdHJ1Y3RvcnMuICBJZiB5b3UgaGF2ZW4ndCBoZWFyZCBvZiBwbGFjZW1lbnQgbmV3
LCBJIHN1Z2dlc3QgR29vZ2xpbmcKLSAgLy8gaXQgbm93LiAgV2UgdXNlIHBsYWNlbWVudCBuZXcg
ZXZlbiBmb3IgcHJpbWl0aXZlIHR5cGVzIHRoYXQgZG9uJ3QgaGF2ZQotICAvLyBjb25zdHJ1Y3Rv
cnMgZm9yIGNvbnNpc3RlbmN5LiAgKEluIHRoZW9yeSwgcGxhY2VtZW50IG5ldyBzaG91bGQgYmUg
dXNlZAotICAvLyBhbnkgdGltZSB5b3UgYXJlIHRyeWluZyB0byBjb252ZXJ0IHVudHlwZWQgbWVt
b3J5IHRvIHR5cGVkIG1lbW9yeSwgdGhvdWdoCi0gIC8vIGluIHByYWN0aWNlIHRoYXQncyBub3Qg
c3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0eXBlcyB0aGF0IGRvbid0IGhhdmUgYQotICAvLyBjb25z
dHJ1Y3Rvci4pCi0KLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVfaW5mb18t
PnR5cGU7Ci0KLSAgLy8gSW5pdGlhbGl6ZSBvbmVvZiBjYXNlcy4KLSAgZm9yIChpbnQgaSA9IDAg
OyBpIDwgZGVzY3JpcHRvci0+b25lb2ZfZGVjbF9jb3VudCgpOyArK2kpIHsKLSAgICBuZXcoT2Zm
c2V0VG9Qb2ludGVyKHR5cGVfaW5mb18tPm9uZW9mX2Nhc2Vfb2Zmc2V0ICsgc2l6ZW9mKHVpbnQz
MikgKiBpKSkKLSAgICAgICAgdWludDMyKDApOwotICB9Ci0KLSAgaWYgKHR5cGVfaW5mb18tPmlz
X2RlZmF1bHRfaW5zdGFuY2Vfb2Zmc2V0ICE9IC0xKSB7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8
Ym9vbCo+KAotICAgICAgICBPZmZzZXRUb1BvaW50ZXIodHlwZV9pbmZvXy0+aXNfZGVmYXVsdF9p
bnN0YW5jZV9vZmZzZXQpKSA9IGZhbHNlOwotICB9Ci0KLSAgbmV3KE9mZnNldFRvUG9pbnRlcih0
eXBlX2luZm9fLT51bmtub3duX2ZpZWxkc19vZmZzZXQpKSBVbmtub3duRmllbGRTZXQ7Ci0KLSAg
aWYgKHR5cGVfaW5mb18tPmV4dGVuc2lvbnNfb2Zmc2V0ICE9IC0xKSB7Ci0gICAgbmV3KE9mZnNl
dFRvUG9pbnRlcih0eXBlX2luZm9fLT5leHRlbnNpb25zX29mZnNldCkpIEV4dGVuc2lvblNldDsK
LSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKTsg
aSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3ItPmZp
ZWxkKGkpOwotICAgIHZvaWQqIGZpZWxkX3B0ciA9IE9mZnNldFRvUG9pbnRlcih0eXBlX2luZm9f
LT5vZmZzZXRzW2ldKTsKLSAgICBpZiAoZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSkgewotICAg
ICAgY29udGludWU7Ci0gICAgfQotICAgIHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSNk
ZWZpbmUgSEFORExFX1RZUEUoQ1BQVFlQRSwgVFlQRSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
IyNDUFBUWVBFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICgh
ZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICBuZXcoZmllbGRfcHRyKSBUWVBFKGZpZWxkLT5kZWZhdWx0X3Zh
bHVlXyMjVFlQRSgpKTsgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgbmV3KGZpZWxkX3B0cikgUmVwZWF0ZWRGaWVsZDxUWVBFPigpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBicmVh
azsKLQotICAgICAgSEFORExFX1RZUEUoSU5UMzIgLCBpbnQzMiApOwotICAgICAgSEFORExFX1RZ
UEUoSU5UNjQgLCBpbnQ2NCApOwotICAgICAgSEFORExFX1RZUEUoVUlOVDMyLCB1aW50MzIpOwot
ICAgICAgSEFORExFX1RZUEUoVUlOVDY0LCB1aW50NjQpOwotICAgICAgSEFORExFX1RZUEUoRE9V
QkxFLCBkb3VibGUpOwotICAgICAgSEFORExFX1RZUEUoRkxPQVQgLCBmbG9hdCApOwotICAgICAg
SEFORExFX1RZUEUoQk9PTCAgLCBib29sICApOwotI3VuZGVmIEhBTkRMRV9UWVBFCi0KLSAgICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAgICAgIGlmICghZmllbGQt
PmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgICAgICBuZXcoZmllbGRfcHRyKSBpbnQoZmllbGQtPmRl
ZmF1bHRfdmFsdWVfZW51bSgpLT5udW1iZXIoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgbmV3KGZpZWxkX3B0cikgUmVwZWF0ZWRGaWVsZDxpbnQ+KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzoK
LSAgICAgICAgc3dpdGNoIChmaWVsZC0+b3B0aW9ucygpLmN0eXBlKCkpIHsKLSAgICAgICAgICBk
ZWZhdWx0OiAgLy8gVE9ETyhrZW50b24pOiAgU3VwcG9ydCBvdGhlciBzdHJpbmcgcmVwcy4KLSAg
ICAgICAgICBjYXNlIEZpZWxkT3B0aW9uczo6U1RSSU5HOgotICAgICAgICAgICAgaWYgKCFmaWVs
ZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgICAgICAgICAgICBjb25zdCBzdHJpbmcqIGRlZmF1bHRf
dmFsdWU7Ci0gICAgICAgICAgICAgIGlmIChpc19wcm90b3R5cGUoKSkgewotICAgICAgICAgICAg
ICAgIGRlZmF1bHRfdmFsdWUgPSAmZmllbGQtPmRlZmF1bHRfdmFsdWVfc3RyaW5nKCk7Ci0gICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdF92YWx1ZSA9Ci0gICAg
ICAgICAgICAgICAgICAmKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXJlbmFTdHJpbmdQdHIqPigK
LSAgICAgICAgICAgICAgICAgICAgdHlwZV9pbmZvXy0+cHJvdG90eXBlLT5PZmZzZXRUb1BvaW50
ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZV9pbmZvXy0+b2Zmc2V0c1tpXSkpLT5HZXQo
TlVMTCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIEFyZW5hU3RyaW5nUHRyKiBh
c3AgPSBuZXcoZmllbGRfcHRyKSBBcmVuYVN0cmluZ1B0cigpOwotICAgICAgICAgICAgICBhc3At
PlVuc2FmZVNldERlZmF1bHQoZGVmYXVsdF92YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICBuZXcoZmllbGRfcHRyKSBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4oKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOiB7Ci0g
ICAgICAgIGlmICghZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgICAgICBuZXcoZmllbGRf
cHRyKSBNZXNzYWdlKihOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoSXNN
YXBGaWVsZEluQXBpKGZpZWxkKSkgewotICAgICAgICAgICAgbmV3IChmaWVsZF9wdHIpIER5bmFt
aWNNYXBGaWVsZCgKLSAgICAgICAgICAgICAgICB0eXBlX2luZm9fLT5mYWN0b3J5LT5HZXRQcm90
b3R5cGVOb0xvY2soZmllbGQtPm1lc3NhZ2VfdHlwZSgpKSk7Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG5ldyAoZmllbGRfcHRyKSBSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+KCk7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0K
LSAgfQotfQotCi1EeW5hbWljTWVzc2FnZTo6fkR5bmFtaWNNZXNzYWdlKCkgewotICBjb25zdCBE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZV9pbmZvXy0+dHlwZTsKLQotICByZWludGVycHJl
dF9jYXN0PFVua25vd25GaWVsZFNldCo+KAotICAgIE9mZnNldFRvUG9pbnRlcih0eXBlX2luZm9f
LT51bmtub3duX2ZpZWxkc19vZmZzZXQpKS0+flVua25vd25GaWVsZFNldCgpOwotCi0gIGlmICh0
eXBlX2luZm9fLT5leHRlbnNpb25zX29mZnNldCAhPSAtMSkgewotICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8RXh0ZW5zaW9uU2V0Kj4oCi0gICAgICBPZmZzZXRUb1BvaW50ZXIodHlwZV9pbmZvXy0+ZXh0
ZW5zaW9uc19vZmZzZXQpKS0+fkV4dGVuc2lvblNldCgpOwotICB9Ci0KLSAgLy8gV2UgbmVlZCB0
byBtYW51YWxseSBydW4gdGhlIGRlc3RydWN0b3JzIGZvciByZXBlYXRlZCBmaWVsZHMgYW5kIHN0
cmluZ3MsCi0gIC8vIGp1c3QgYXMgd2UgcmFuIHRoZWlyIGNvbnN0cnVjdG9ycyBpbiB0aGUgRHlu
YW1pY01lc3NhZ2UgY29uc3RydWN0b3IuCi0gIC8vIFdlIGFsc28gbmVlZCB0byBtYW51YWxseSBk
ZWxldGUgb25lb2YgZmllbGRzIGlmIGl0IGlzIHNldCBhbmQgaXMgc3RyaW5nCi0gIC8vIG9yIG1l
c3NhZ2UuCi0gIC8vIEFkZGl0aW9uYWxseSwgaWYgYW55IHNpbmd1bGFyIGVtYmVkZGVkIG1lc3Nh
Z2VzIGhhdmUgYmVlbiBhbGxvY2F0ZWQsIHdlCi0gIC8vIG5lZWQgdG8gZGVsZXRlIHRoZW0sIFVO
TEVTUyB3ZSBhcmUgdGhlIHByb3RvdHlwZSBtZXNzYWdlIG9mIHRoaXMgdHlwZSwKLSAgLy8gaW4g
d2hpY2ggY2FzZSBhbnkgZW1iZWRkZWQgbWVzc2FnZXMgYXJlIG90aGVyIHByb3RvdHlwZXMgYW5k
IHNob3VsZG4ndAotICAvLyBiZSB0b3VjaGVkLgotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2Ny
aXB0b3ItPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQgPSBkZXNjcmlwdG9yLT5maWVsZChpKTsKLSAgICBpZiAoZmllbGQtPmNvbnRhaW5pbmdf
b25lb2YoKSkgewotICAgICAgdm9pZCogZmllbGRfcHRyID0gT2Zmc2V0VG9Qb2ludGVyKAotICAg
ICAgICAgIHR5cGVfaW5mb18tPm9uZW9mX2Nhc2Vfb2Zmc2V0Ci0gICAgICAgICAgKyBzaXplb2Yo
dWludDMyKSAqIGZpZWxkLT5jb250YWluaW5nX29uZW9mKCktPmluZGV4KCkpOwotICAgICAgaWYg
KCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzIqPihmaWVsZF9wdHIpKSA9PQotICAgICAg
ICAgIGZpZWxkLT5udW1iZXIoKSkgewotICAgICAgICBmaWVsZF9wdHIgPSBPZmZzZXRUb1BvaW50
ZXIodHlwZV9pbmZvXy0+b2Zmc2V0c1sKLSAgICAgICAgICAgIGRlc2NyaXB0b3ItPmZpZWxkX2Nv
dW50KCkgKyBmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpLT5pbmRleCgpXSk7Ci0gICAgICAgIGlm
IChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HKSB7
Ci0gICAgICAgICAgc3dpdGNoIChmaWVsZC0+b3B0aW9ucygpLmN0eXBlKCkpIHsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBjYXNlIEZpZWxkT3B0aW9uczo6U1RSSU5HOiB7Ci0g
ICAgICAgICAgICAgIGNvbnN0IDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUgPQotICAgICAg
ICAgICAgICAgICAgJihyZWludGVycHJldF9jYXN0PGNvbnN0IEFyZW5hU3RyaW5nUHRyKj4oCi0g
ICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KAotICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlX2luZm9fLT5kZWZhdWx0X29uZW9mX2luc3RhbmNlKQotICAg
ICAgICAgICAgICAgICAgICAgICsgdHlwZV9pbmZvXy0+b2Zmc2V0c1tpXSkKLSAgICAgICAgICAg
ICAgICAgICAgLT5HZXQoTlVMTCkpOwotICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFy
ZW5hU3RyaW5nUHRyKj4oZmllbGRfcHRyKS0+RGVzdHJveSgKLSAgICAgICAgICAgICAgICAgIGRl
ZmF1bHRfdmFsdWUsIE5VTEwpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICAgICAgICAgIGRlbGV0ZSAqcmVp
bnRlcnByZXRfY2FzdDxNZXNzYWdlKio+KGZpZWxkX3B0cik7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICB2b2lkKiBmaWVsZF9wdHIgPSBPZmZzZXRUb1Bv
aW50ZXIodHlwZV9pbmZvXy0+b2Zmc2V0c1tpXSk7Ci0KLSAgICBpZiAoZmllbGQtPmlzX3JlcGVh
dGVkKCkpIHsKLSAgICAgIHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSNkZWZpbmUgSEFO
RExFX1RZUEUoVVBQRVJDQVNFLCBMT1dFUkNBU0UpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfIyNVUFBF
UkNBU0UgOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICByZWludGVycHJl
dF9jYXN0PFJlcGVhdGVkRmllbGQ8TE9XRVJDQVNFPio+KGZpZWxkX3B0cikgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgLT5+UmVwZWF0ZWRGaWVsZDxMT1dFUkNBU0U+KCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBicmVhawotCi0gICAgICAgIEhB
TkRMRV9UWVBFKCBJTlQzMiwgIGludDMyKTsKLSAgICAgICAgSEFORExFX1RZUEUoIElOVDY0LCAg
aW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRShVSU5UMzIsIHVpbnQzMik7Ci0gICAgICAgIEhB
TkRMRV9UWVBFKFVJTlQ2NCwgdWludDY0KTsKLSAgICAgICAgSEFORExFX1RZUEUoRE9VQkxFLCBk
b3VibGUpOwotICAgICAgICBIQU5ETEVfVFlQRSggRkxPQVQsICBmbG9hdCk7Ci0gICAgICAgIEhB
TkRMRV9UWVBFKCAgQk9PTCwgICBib29sKTsKLSAgICAgICAgSEFORExFX1RZUEUoICBFTlVNLCAg
ICBpbnQpOwotI3VuZGVmIEhBTkRMRV9UWVBFCi0KLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgICAgIHN3aXRjaCAoZmllbGQtPm9wdGlvbnMoKS5j
dHlwZSgpKSB7Ci0gICAgICAgICAgICBkZWZhdWx0OiAgLy8gVE9ETyhrZW50b24pOiAgU3VwcG9y
dCBvdGhlciBzdHJpbmcgcmVwcy4KLSAgICAgICAgICAgIGNhc2UgRmllbGRPcHRpb25zOjpTVFJJ
Tkc6Ci0gICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UmVwZWF0ZWRQdHJGaWVsZDxzdHJp
bmc+Kj4oZmllbGRfcHRyKQotICAgICAgICAgICAgICAgICAgLT5+UmVwZWF0ZWRQdHJGaWVsZDxz
dHJpbmc+KCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOgot
ICAgICAgICAgIGlmIChJc01hcEZpZWxkSW5BcGkoZmllbGQpKSB7Ci0gICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PER5bmFtaWNNYXBGaWVsZCo+KGZpZWxkX3B0ciktPn5EeW5hbWljTWFwRmll
bGQoKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxS
ZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+Kj4oZmllbGRfcHRyKQotICAgICAgICAgICAgICAgIC0+
flJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4oKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0KLSAgICB9IGVsc2UgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxk
RGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkcpIHsKLSAgICAgIHN3aXRjaCAoZmllbGQtPm9wdGlv
bnMoKS5jdHlwZSgpKSB7Ci0gICAgICAgIGRlZmF1bHQ6ICAvLyBUT0RPKGtlbnRvbik6ICBTdXBw
b3J0IG90aGVyIHN0cmluZyByZXBzLgotICAgICAgICBjYXNlIEZpZWxkT3B0aW9uczo6U1RSSU5H
OiB7Ci0gICAgICAgICAgY29uc3QgOjpzdGQ6OnN0cmluZyogZGVmYXVsdF92YWx1ZSA9Ci0gICAg
ICAgICAgICAgICYocmVpbnRlcnByZXRfY2FzdDxjb25zdCBBcmVuYVN0cmluZ1B0cio+KAotICAg
ICAgICAgICAgICAgICAgdHlwZV9pbmZvXy0+cHJvdG90eXBlLT5PZmZzZXRUb1BvaW50ZXIoCi0g
ICAgICAgICAgICAgICAgICAgICAgdHlwZV9pbmZvXy0+b2Zmc2V0c1tpXSkpLT5HZXQoTlVMTCkp
OwotICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXJlbmFTdHJpbmdQdHIqPihmaWVsZF9wdHIp
LT5EZXN0cm95KAotICAgICAgICAgICAgICBkZWZhdWx0X3ZhbHVlLCBOVUxMKTsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZmllbGQtPmNwcF90
eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICAgIGlmICgh
aXNfcHJvdG90eXBlKCkpIHsKLSAgICAgICAgTWVzc2FnZSogbWVzc2FnZSA9ICpyZWludGVycHJl
dF9jYXN0PE1lc3NhZ2UqKj4oZmllbGRfcHRyKTsKLSAgICAgICAgaWYgKG1lc3NhZ2UgIT0gTlVM
TCkgewotICAgICAgICAgIGRlbGV0ZSBtZXNzYWdlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotICB9Ci19Ci0KLXZvaWQgRHluYW1pY01lc3NhZ2U6OkNyb3NzTGlua1Byb3RvdHlwZXMoKSB7
Ci0gIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBwcm90b3R5cGUgbWVzc2Fn
ZS4KLSAgR09PR0xFX0NIRUNLKGlzX3Byb3RvdHlwZSgpKTsKLQotICBEeW5hbWljTWVzc2FnZUZh
Y3RvcnkqIGZhY3RvcnkgPSB0eXBlX2luZm9fLT5mYWN0b3J5OwotICBjb25zdCBEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gdHlwZV9pbmZvXy0+dHlwZTsKLQotICAvLyBDcm9zcy1saW5rIGRlZmF1
bHQgbWVzc2FnZXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+ZmllbGRfY291
bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0
b3ItPmZpZWxkKGkpOwotICAgIHZvaWQqIGZpZWxkX3B0ciA9IE9mZnNldFRvUG9pbnRlcih0eXBl
X2luZm9fLT5vZmZzZXRzW2ldKTsKLSAgICBpZiAoZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSkg
ewotICAgICAgZmllbGRfcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KAotICAgICAgICAg
IHR5cGVfaW5mb18tPmRlZmF1bHRfb25lb2ZfaW5zdGFuY2UpICsgdHlwZV9pbmZvXy0+b2Zmc2V0
c1tpXTsKLSAgICB9Ci0KLSAgICBpZiAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX01FU1NBR0UgJiYKLSAgICAgICAgIWZpZWxkLT5pc19yZXBlYXRlZCgpKSB7
Ci0gICAgICAvLyBGb3IgZmllbGRzIHdpdGggbWVzc2FnZSB0eXBlcywgd2UgbmVlZCB0byBjcm9z
cy1saW5rIHdpdGggdGhlCi0gICAgICAvLyBwcm90b3R5cGUgZm9yIHRoZSBmaWVsZCdzIHR5cGUu
Ci0gICAgICAvLyBGb3Igc2luZ3VsYXIgZmllbGRzLCB0aGUgZmllbGQgaXMganVzdCBhIHBvaW50
ZXIgd2hpY2ggc2hvdWxkCi0gICAgICAvLyBwb2ludCB0byB0aGUgcHJvdG90eXBlLgotICAgICAg
KnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTWVzc2FnZSoqPihmaWVsZF9wdHIpID0KLSAgICAgICAg
ZmFjdG9yeS0+R2V0UHJvdG90eXBlTm9Mb2NrKGZpZWxkLT5tZXNzYWdlX3R5cGUoKSk7Ci0gICAg
fQotICB9Ci0KLSAgLy8gU2V0IGFzIHRoZSBkZWZhdWx0IGluc3RhbmNlIC0tIHRoaXMgYWZmZWN0
cyBmaWVsZC1wcmVzZW5jZSBzZW1hbnRpY3MgZm9yCi0gIC8vIHByb3RvMy4KLSAgaWYgKHR5cGVf
aW5mb18tPmlzX2RlZmF1bHRfaW5zdGFuY2Vfb2Zmc2V0ICE9IC0xKSB7Ci0gICAgdm9pZCogaXNf
ZGVmYXVsdF9pbnN0YW5jZV9wdHIgPQotICAgICAgICBPZmZzZXRUb1BvaW50ZXIodHlwZV9pbmZv
Xy0+aXNfZGVmYXVsdF9pbnN0YW5jZV9vZmZzZXQpOwotICAgICpyZWludGVycHJldF9jYXN0PGJv
b2wqPihpc19kZWZhdWx0X2luc3RhbmNlX3B0cikgPSB0cnVlOwotICB9Ci19Ci0KLU1lc3NhZ2Uq
IER5bmFtaWNNZXNzYWdlOjpOZXcoKSBjb25zdCB7Ci0gIHZvaWQqIG5ld19iYXNlID0gb3BlcmF0
b3IgbmV3KHR5cGVfaW5mb18tPnNpemUpOwotICBtZW1zZXQobmV3X2Jhc2UsIDAsIHR5cGVfaW5m
b18tPnNpemUpOwotICByZXR1cm4gbmV3KG5ld19iYXNlKSBEeW5hbWljTWVzc2FnZSh0eXBlX2lu
Zm9fKTsKLX0KLQotTWVzc2FnZSogRHluYW1pY01lc3NhZ2U6Ok5ldyg6Omdvb2dsZTo6cHJvdG9i
dWY6OkFyZW5hKiBhcmVuYSkgY29uc3QgewotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIE1l
c3NhZ2UqIG1lc3NhZ2UgPSBOZXcoKTsKLSAgICBhcmVuYS0+T3duKG1lc3NhZ2UpOwotICAgIHJl
dHVybiBtZXNzYWdlOwotICB9IGVsc2UgewotICAgIHJldHVybiBOZXcoKTsKLSAgfQotfQotCi1p
bnQgRHluYW1pY01lc3NhZ2U6OkdldENhY2hlZFNpemUoKSBjb25zdCB7Ci0gIHJldHVybiBjYWNo
ZWRfYnl0ZV9zaXplXzsKLX0KLQotdm9pZCBEeW5hbWljTWVzc2FnZTo6U2V0Q2FjaGVkU2l6ZShp
bnQgc2l6ZSkgY29uc3QgewotICAvLyBUaGlzIGlzIHRoZW9yZXRpY2FsbHkgbm90IHRocmVhZC1j
b21wYXRpYmxlLCBidXQgaW4gcHJhY3RpY2UgaXQgd29ya3MKLSAgLy8gYmVjYXVzZSBpZiBtdWx0
aXBsZSB0aHJlYWRzIHdyaXRlIHRoaXMgc2ltdWx0YW5lb3VzbHksIHRoZXkgd2lsbCBiZQotICAv
LyB3cml0aW5nIHRoZSBleGFjdCBzYW1lIHZhbHVlLgotICBHT09HTEVfU0FGRV9DT05DVVJSRU5U
X1dSSVRFU19CRUdJTigpOwotICBjYWNoZWRfYnl0ZV9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9T
QUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotCi1NZXRhZGF0YSBEeW5hbWljTWVzc2Fn
ZTo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIE1ldGFkYXRhIG1ldGFkYXRhOwotICBtZXRhZGF0
YS5kZXNjcmlwdG9yID0gdHlwZV9pbmZvXy0+dHlwZTsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9
IHR5cGVfaW5mb18tPnJlZmxlY3Rpb24uZ2V0KCk7Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQot
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRHluYW1pY01lc3NhZ2VGYWN0b3J5OjpQcm90b3R5cGVN
YXAgewotICB0eXBlZGVmIGhhc2hfbWFwPGNvbnN0IERlc2NyaXB0b3IqLCBjb25zdCBEeW5hbWlj
TWVzc2FnZTo6VHlwZUluZm8qPiBNYXA7Ci0gIE1hcCBtYXBfOwotfTsKLQotRHluYW1pY01lc3Nh
Z2VGYWN0b3J5OjpEeW5hbWljTWVzc2FnZUZhY3RvcnkoKQotICA6IHBvb2xfKE5VTEwpLCBkZWxl
Z2F0ZV90b19nZW5lcmF0ZWRfZmFjdG9yeV8oZmFsc2UpLAotICAgIHByb3RvdHlwZXNfKG5ldyBQ
cm90b3R5cGVNYXApIHsKLX0KLQotRHluYW1pY01lc3NhZ2VGYWN0b3J5OjpEeW5hbWljTWVzc2Fn
ZUZhY3RvcnkoY29uc3QgRGVzY3JpcHRvclBvb2wqIHBvb2wpCi0gIDogcG9vbF8ocG9vbCksIGRl
bGVnYXRlX3RvX2dlbmVyYXRlZF9mYWN0b3J5XyhmYWxzZSksCi0gICAgcHJvdG90eXBlc18obmV3
IFByb3RvdHlwZU1hcCkgewotfQotCi1EeW5hbWljTWVzc2FnZUZhY3Rvcnk6On5EeW5hbWljTWVz
c2FnZUZhY3RvcnkoKSB7Ci0gIGZvciAoUHJvdG90eXBlTWFwOjpNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBwcm90b3R5cGVzXy0+bWFwXy5iZWdpbigpOwotICAgICAgIGl0ZXIgIT0gcHJvdG90eXBlc18t
Pm1hcF8uZW5kKCk7ICsraXRlcikgewotICAgIERlbGV0ZURlZmF1bHRPbmVvZkluc3RhbmNlKGl0
ZXItPnNlY29uZC0+dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyLT5z
ZWNvbmQtPm9mZnNldHMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRl
ci0+c2Vjb25kLT5kZWZhdWx0X29uZW9mX2luc3RhbmNlKTsKLSAgICBkZWxldGUgaXRlci0+c2Vj
b25kOwotICB9Ci19Ci0KLWNvbnN0IE1lc3NhZ2UqIER5bmFtaWNNZXNzYWdlRmFjdG9yeTo6R2V0
UHJvdG90eXBlKGNvbnN0IERlc2NyaXB0b3IqIHR5cGUpIHsKLSAgTXV0ZXhMb2NrIGxvY2soJnBy
b3RvdHlwZXNfbXV0ZXhfKTsKLSAgcmV0dXJuIEdldFByb3RvdHlwZU5vTG9jayh0eXBlKTsKLX0K
LQotY29uc3QgTWVzc2FnZSogRHluYW1pY01lc3NhZ2VGYWN0b3J5OjpHZXRQcm90b3R5cGVOb0xv
Y2soCi0gICAgY29uc3QgRGVzY3JpcHRvciogdHlwZSkgewotICBpZiAoZGVsZWdhdGVfdG9fZ2Vu
ZXJhdGVkX2ZhY3RvcnlfICYmCi0gICAgICB0eXBlLT5maWxlKCktPnBvb2woKSA9PSBEZXNjcmlw
dG9yUG9vbDo6Z2VuZXJhdGVkX3Bvb2woKSkgewotICAgIHJldHVybiBNZXNzYWdlRmFjdG9yeTo6
Z2VuZXJhdGVkX2ZhY3RvcnkoKS0+R2V0UHJvdG90eXBlKHR5cGUpOwotICB9Ci0KLSAgY29uc3Qg
RHluYW1pY01lc3NhZ2U6OlR5cGVJbmZvKiogdGFyZ2V0ID0gJnByb3RvdHlwZXNfLT5tYXBfW3R5
cGVdOwotICBpZiAoKnRhcmdldCAhPSBOVUxMKSB7Ci0gICAgLy8gQWxyZWFkeSBleGlzdHMuCi0g
ICAgcmV0dXJuICgqdGFyZ2V0KS0+cHJvdG90eXBlOwotICB9Ci0KLSAgRHluYW1pY01lc3NhZ2U6
OlR5cGVJbmZvKiB0eXBlX2luZm8gPSBuZXcgRHluYW1pY01lc3NhZ2U6OlR5cGVJbmZvOwotICAq
dGFyZ2V0ID0gdHlwZV9pbmZvOwotCi0gIHR5cGVfaW5mby0+dHlwZSA9IHR5cGU7Ci0gIHR5cGVf
aW5mby0+cG9vbCA9IChwb29sXyA9PSBOVUxMKSA/IHR5cGUtPmZpbGUoKS0+cG9vbCgpIDogcG9v
bF87Ci0gIHR5cGVfaW5mby0+ZmFjdG9yeSA9IHRoaXM7Ci0KLSAgLy8gV2UgbmVlZCB0byBjb25z
dHJ1Y3QgYWxsIHRoZSBzdHJ1Y3R1cmVzIHBhc3NlZCB0bwotICAvLyBHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvbidzIGNvbnN0cnVjdG9yLiAgVGhpcyBpbmNsdWRlczoKLSAgLy8gLSBBIGJsb2Nr
IG9mIG1lbW9yeSB0aGF0IGNvbnRhaW5zIHNwYWNlIGZvciBhbGwgdGhlIG1lc3NhZ2UncyBmaWVs
ZHMuCi0gIC8vIC0gQW4gYXJyYXkgb2YgaW50ZWdlcnMgaW5kaWNhdGluZyB0aGUgYnl0ZSBvZmZz
ZXQgb2YgZWFjaCBmaWVsZCB3aXRoaW4KLSAgLy8gICB0aGlzIGJsb2NrLgotICAvLyAtIEEgYmln
IGJpdGZpZWxkIGNvbnRhaW5pbmcgYSBiaXQgZm9yIGVhY2ggZmllbGQgaW5kaWNhdGluZyB3aGV0
aGVyCi0gIC8vICAgb3Igbm90IHRoYXQgZmllbGQgaXMgc2V0LgotCi0gIC8vIENvbXB1dGUgc2l6
ZSBhbmQgb2Zmc2V0cy4KLSAgaW50KiBvZmZzZXRzID0gbmV3IGludFt0eXBlLT5maWVsZF9jb3Vu
dCgpICsgdHlwZS0+b25lb2ZfZGVjbF9jb3VudCgpXTsKLSAgdHlwZV9pbmZvLT5vZmZzZXRzLnJl
c2V0KG9mZnNldHMpOwotCi0gIC8vIERlY2lkZSBhbGwgZmllbGQgb2Zmc2V0cyBieSBwYWNraW5n
IGluIG9yZGVyLgotICAvLyBXZSBwbGFjZSB0aGUgRHluYW1pY01lc3NhZ2Ugb2JqZWN0IGl0c2Vs
ZiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhbGxvY2F0ZWQKLSAgLy8gc3BhY2UuCi0gIGludCBz
aXplID0gc2l6ZW9mKER5bmFtaWNNZXNzYWdlKTsKLSAgc2l6ZSA9IEFsaWduT2Zmc2V0KHNpemUp
OwotCi0gIC8vIE5leHQgdGhlIGhhc19iaXRzLCB3aGljaCBpcyBhbiBhcnJheSBvZiB1aW50MzJz
LgotICBpZiAodHlwZS0+ZmlsZSgpLT5zeW50YXgoKSA9PSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFY
X1BST1RPMykgewotICAgIHR5cGVfaW5mby0+aGFzX2JpdHNfb2Zmc2V0ID0gLTE7Ci0gIH0gZWxz
ZSB7Ci0gICAgdHlwZV9pbmZvLT5oYXNfYml0c19vZmZzZXQgPSBzaXplOwotICAgIGludCBoYXNf
Yml0c19hcnJheV9zaXplID0KLSAgICAgIERpdmlkZVJvdW5kaW5nVXAodHlwZS0+ZmllbGRfY291
bnQoKSwgYml0c2l6ZW9mKHVpbnQzMikpOwotICAgIHNpemUgKz0gaGFzX2JpdHNfYXJyYXlfc2l6
ZSAqIHNpemVvZih1aW50MzIpOwotICAgIHNpemUgPSBBbGlnbk9mZnNldChzaXplKTsKLSAgfQot
Ci0gIC8vIFRoZSBpc19kZWZhdWx0X2luc3RhbmNlIG1lbWJlciwgaWYgYW55LgotICBpZiAodHlw
ZS0+ZmlsZSgpLT5zeW50YXgoKSA9PSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFYX1BST1RPMykgewot
ICAgIHR5cGVfaW5mby0+aXNfZGVmYXVsdF9pbnN0YW5jZV9vZmZzZXQgPSBzaXplOwotICAgIHNp
emUgKz0gc2l6ZW9mKGJvb2wpOwotICAgIHNpemUgPSBBbGlnbk9mZnNldChzaXplKTsKLSAgfSBl
bHNlIHsKLSAgICB0eXBlX2luZm8tPmlzX2RlZmF1bHRfaW5zdGFuY2Vfb2Zmc2V0ID0gLTE7Ci0g
IH0KLQotICAvLyBUaGUgb25lb2ZfY2FzZSwgaWYgYW55LiBJdCBpcyBhbiBhcnJheSBvZiB1aW50
MzJzLgotICBpZiAodHlwZS0+b25lb2ZfZGVjbF9jb3VudCgpID4gMCkgewotICAgIHR5cGVfaW5m
by0+b25lb2ZfY2FzZV9vZmZzZXQgPSBzaXplOwotICAgIHNpemUgKz0gdHlwZS0+b25lb2ZfZGVj
bF9jb3VudCgpICogc2l6ZW9mKHVpbnQzMik7Ci0gICAgc2l6ZSA9IEFsaWduT2Zmc2V0KHNpemUp
OwotICB9Ci0KLSAgLy8gVGhlIEV4dGVuc2lvblNldCwgaWYgYW55LgotICBpZiAodHlwZS0+ZXh0
ZW5zaW9uX3JhbmdlX2NvdW50KCkgPiAwKSB7Ci0gICAgdHlwZV9pbmZvLT5leHRlbnNpb25zX29m
ZnNldCA9IHNpemU7Ci0gICAgc2l6ZSArPSBzaXplb2YoRXh0ZW5zaW9uU2V0KTsKLSAgICBzaXpl
ID0gQWxpZ25PZmZzZXQoc2l6ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gTm8gZXh0ZW5zaW9ucy4K
LSAgICB0eXBlX2luZm8tPmV4dGVuc2lvbnNfb2Zmc2V0ID0gLTE7Ci0gIH0KLQotICAvLyBBbGwg
dGhlIGZpZWxkcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLT5maWVsZF9jb3VudCgpOyBp
KyspIHsKLSAgICAvLyBNYWtlIHN1cmUgZmllbGQgaXMgYWxpZ25lZCB0byBhdm9pZCBidXMgZXJy
b3JzLgotICAgIC8vIE9uZW9mIGZpZWxkcyBkbyBub3QgdXNlIGFueSBzcGFjZS4KLSAgICBpZiAo
IXR5cGUtPmZpZWxkKGkpLT5jb250YWluaW5nX29uZW9mKCkpIHsKLSAgICAgIGludCBmaWVsZF9z
aXplID0gRmllbGRTcGFjZVVzZWQodHlwZS0+ZmllbGQoaSkpOwotICAgICAgc2l6ZSA9IEFsaWdu
VG8oc2l6ZSwgc3RkOjptaW4oa1NhZmVBbGlnbm1lbnQsIGZpZWxkX3NpemUpKTsKLSAgICAgIG9m
ZnNldHNbaV0gPSBzaXplOwotICAgICAgc2l6ZSArPSBmaWVsZF9zaXplOwotICAgIH0KLSAgfQot
Ci0gIC8vIFRoZSBvbmVvZnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS0+b25lb2ZfZGVj
bF9jb3VudCgpOyBpKyspIHsKLSAgICBzaXplID0gQWxpZ25UbyhzaXplLCBrU2FmZUFsaWdubWVu
dCk7Ci0gICAgb2Zmc2V0c1t0eXBlLT5maWVsZF9jb3VudCgpICsgaV0gPSBzaXplOwotICAgIHNp
emUgKz0ga01heE9uZW9mVW5pb25TaXplOwotICB9Ci0KLSAgLy8gQWRkIHRoZSBVbmtub3duRmll
bGRTZXQgdG8gdGhlIGVuZC4KLSAgc2l6ZSA9IEFsaWduT2Zmc2V0KHNpemUpOwotICB0eXBlX2lu
Zm8tPnVua25vd25fZmllbGRzX29mZnNldCA9IHNpemU7Ci0gIHNpemUgKz0gc2l6ZW9mKFVua25v
d25GaWVsZFNldCk7Ci0KLSAgLy8gQWxpZ24gdGhlIGZpbmFsIHNpemUgdG8gbWFrZSBzdXJlIG5v
IGNsZXZlciBhbGxvY2F0b3JzIHRoaW5rIHRoYXQKLSAgLy8gYWxpZ25tZW50IGlzIG5vdCBuZWNl
c3NhcnkuCi0gIHNpemUgPSBBbGlnbk9mZnNldChzaXplKTsKLSAgdHlwZV9pbmZvLT5zaXplID0g
c2l6ZTsKLQotICAvLyBBbGxvY2F0ZSB0aGUgcHJvdG90eXBlLgotICB2b2lkKiBiYXNlID0gb3Bl
cmF0b3IgbmV3KHNpemUpOwotICBtZW1zZXQoYmFzZSwgMCwgc2l6ZSk7Ci0gIC8vIFRoZSBwcm90
b3R5cGUgaW4gdHlwZV9pbmZvIGhhcyB0byBiZSBzZXQgYmVmb3JlIGNyZWF0aW5nIHRoZSBwcm90
b3R5cGUKLSAgLy8gaW5zdGFuY2Ugb24gbWVtb3J5LiBlLmcuLCBtZXNzYWdlIEZvbyB7IG1hcDxp
bnQzMiwgRm9vPiBhID0gMTsgfS4gV2hlbgotICAvLyBjcmVhdGluZyBwcm90b3R5cGUgZm9yIEZv
bywgcHJvdG90eXBlIG9mIHRoZSBtYXAgZW50cnkgd2lsbCBhbHNvIGJlCi0gIC8vIGNyZWF0ZWQs
IHdoaWNoIG5lZWRzIHRoZSBhZGRyZXNzIG9mIHRoZSBwcm90b3R5cGUgb2YgRm9vICh0aGUgdmFs
dWUgaW4KLSAgLy8gbWFwKS4gVG8gYnJlYWsgdGhlIGN5Y2xpYyBkZXBlbmRlbmN5LCB3ZSBoYXZl
IHRvIGFzc2dpbiB0aGUgYWRkcmVzcyBvZgotICAvLyBwcm90b3R5cGUgaW50byB0eXBlX2luZm8g
Zmlyc3QuCi0gIHR5cGVfaW5mby0+cHJvdG90eXBlID0gc3RhdGljX2Nhc3Q8RHluYW1pY01lc3Nh
Z2UqPihiYXNlKTsKLSAgRHluYW1pY01lc3NhZ2UqIHByb3RvdHlwZSA9IG5ldyhiYXNlKSBEeW5h
bWljTWVzc2FnZSh0eXBlX2luZm8pOwotCi0gIC8vIENvbnN0cnVjdCB0aGUgcmVmbGVjdGlvbiBv
YmplY3QuCi0gIGlmICh0eXBlLT5vbmVvZl9kZWNsX2NvdW50KCkgPiAwKSB7Ci0gICAgLy8gQ29t
cHV0ZSB0aGUgc2l6ZSBvZiBkZWZhdWx0IG9uZW9mIGluc3RhbmNlIGFuZCBvZmZzZXRzIG9mIGRl
ZmF1bHQKLSAgICAvLyBvbmVvZiBmaWVsZHMuCi0gICAgaW50IG9uZW9mX3NpemUgPSAwOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgdHlwZS0+b25lb2ZfZGVjbChpKS0+ZmllbGRfY291bnQo
KTsgaisrKSB7Ci0gICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSB0eXBlLT5v
bmVvZl9kZWNsKGkpLT5maWVsZChqKTsKLSAgICAgICAgaW50IGZpZWxkX3NpemUgPSBPbmVvZkZp
ZWxkU3BhY2VVc2VkKGZpZWxkKTsKLSAgICAgICAgb25lb2Zfc2l6ZSA9IEFsaWduVG8ob25lb2Zf
c2l6ZSwgc3RkOjptaW4oa1NhZmVBbGlnbm1lbnQsIGZpZWxkX3NpemUpKTsKLSAgICAgICAgb2Zm
c2V0c1tmaWVsZC0+aW5kZXgoKV0gPSBvbmVvZl9zaXplOwotICAgICAgICBvbmVvZl9zaXplICs9
IGZpZWxkX3NpemU7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIENvbnN0cnVjdCBkZWZhdWx0IG9u
ZW9mIGluc3RhbmNlLgotICAgIHR5cGVfaW5mby0+ZGVmYXVsdF9vbmVvZl9pbnN0YW5jZSA9IDo6
b3BlcmF0b3IgbmV3KG9uZW9mX3NpemUpOwotICAgIENvbnN0cnVjdERlZmF1bHRPbmVvZkluc3Rh
bmNlKHR5cGVfaW5mby0+dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlX2luZm8tPm9mZnNldHMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZV9pbmZvLT5kZWZhdWx0X29uZW9mX2luc3RhbmNlKTsKLSAgICB0eXBlX2luZm8tPnJl
ZmxlY3Rpb24ucmVzZXQoCi0gICAgICAgIG5ldyBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigK
LSAgICAgICAgICAgIHR5cGVfaW5mby0+dHlwZSwKLSAgICAgICAgICAgIHR5cGVfaW5mby0+cHJv
dG90eXBlLAotICAgICAgICAgICAgdHlwZV9pbmZvLT5vZmZzZXRzLmdldCgpLAotICAgICAgICAg
ICAgdHlwZV9pbmZvLT5oYXNfYml0c19vZmZzZXQsCi0gICAgICAgICAgICB0eXBlX2luZm8tPnVu
a25vd25fZmllbGRzX29mZnNldCwKLSAgICAgICAgICAgIHR5cGVfaW5mby0+ZXh0ZW5zaW9uc19v
ZmZzZXQsCi0gICAgICAgICAgICB0eXBlX2luZm8tPmRlZmF1bHRfb25lb2ZfaW5zdGFuY2UsCi0g
ICAgICAgICAgICB0eXBlX2luZm8tPm9uZW9mX2Nhc2Vfb2Zmc2V0LAotICAgICAgICAgICAgdHlw
ZV9pbmZvLT5wb29sLAotICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgIHR5cGVfaW5mby0+
c2l6ZSwKLSAgICAgICAgICAgIC0xIC8qIGFyZW5hX29mZnNldCAqLywKLSAgICAgICAgICAgIHR5
cGVfaW5mby0+aXNfZGVmYXVsdF9pbnN0YW5jZV9vZmZzZXQpKTsKLSAgfSBlbHNlIHsKLSAgICB0
eXBlX2luZm8tPnJlZmxlY3Rpb24ucmVzZXQoCi0gICAgICAgIG5ldyBHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvbigKLSAgICAgICAgICAgIHR5cGVfaW5mby0+dHlwZSwKLSAgICAgICAgICAgIHR5
cGVfaW5mby0+cHJvdG90eXBlLAotICAgICAgICAgICAgdHlwZV9pbmZvLT5vZmZzZXRzLmdldCgp
LAotICAgICAgICAgICAgdHlwZV9pbmZvLT5oYXNfYml0c19vZmZzZXQsCi0gICAgICAgICAgICB0
eXBlX2luZm8tPnVua25vd25fZmllbGRzX29mZnNldCwKLSAgICAgICAgICAgIHR5cGVfaW5mby0+
ZXh0ZW5zaW9uc19vZmZzZXQsCi0gICAgICAgICAgICB0eXBlX2luZm8tPnBvb2wsCi0gICAgICAg
ICAgICB0aGlzLAotICAgICAgICAgICAgdHlwZV9pbmZvLT5zaXplLAotICAgICAgICAgICAgLTEg
LyogYXJlbmFfb2Zmc2V0ICovLAotICAgICAgICAgICAgdHlwZV9pbmZvLT5pc19kZWZhdWx0X2lu
c3RhbmNlX29mZnNldCkpOwotICB9Ci0gIC8vIENyb3NzIGxpbmsgcHJvdG90eXBlcy4KLSAgcHJv
dG90eXBlLT5Dcm9zc0xpbmtQcm90b3R5cGVzKCk7Ci0KLSAgcmV0dXJuIHByb3RvdHlwZTsKLX0K
LQotdm9pZCBEeW5hbWljTWVzc2FnZUZhY3Rvcnk6OkNvbnN0cnVjdERlZmF1bHRPbmVvZkluc3Rh
bmNlKAotICAgIGNvbnN0IERlc2NyaXB0b3IqIHR5cGUsCi0gICAgY29uc3QgaW50IG9mZnNldHNb
XSwKLSAgICB2b2lkKiBkZWZhdWx0X29uZW9mX2luc3RhbmNlKSB7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgdHlwZS0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICBmb3IgKGludCBqID0g
MDsgaiA8IHR5cGUtPm9uZW9mX2RlY2woaSktPmZpZWxkX2NvdW50KCk7IGorKykgewotICAgICAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IHR5cGUtPm9uZW9mX2RlY2woaSktPmZpZWxk
KGopOwotICAgICAgdm9pZCogZmllbGRfcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KAot
ICAgICAgICAgIGRlZmF1bHRfb25lb2ZfaW5zdGFuY2UpICsgb2Zmc2V0c1tmaWVsZC0+aW5kZXgo
KV07Ci0gICAgICBzd2l0Y2ggKGZpZWxkLT5jcHBfdHlwZSgpKSB7Ci0jZGVmaW5lIEhBTkRMRV9U
WVBFKENQUFRZUEUsIFRZUEUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFXyMjQ1BQVFlQRTogICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbmV3KGZpZWxkX3B0cikgVFlQRShmaWVsZC0+
ZGVmYXVsdF92YWx1ZV8jI1RZUEUoKSk7ICAgICAgICAgICBcCi0gICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgSEFORExFX1RZUEUoSU5UMzIgLCBpbnQzMiApOwotICAgICAgICBIQU5ETEVfVFlQ
RShJTlQ2NCAsIGludDY0ICk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKFVJTlQzMiwgdWludDMyKTsK
LSAgICAgICAgSEFORExFX1RZUEUoVUlOVDY0LCB1aW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQ
RShET1VCTEUsIGRvdWJsZSk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKEZMT0FUICwgZmxvYXQgKTsK
LSAgICAgICAgSEFORExFX1RZUEUoQk9PTCAgLCBib29sICApOwotI3VuZGVmIEhBTkRMRV9UWVBF
Ci0KLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTToKLSAgICAgICAg
ICBuZXcoZmllbGRfcHRyKSBpbnQoZmllbGQtPmRlZmF1bHRfdmFsdWVfZW51bSgpLT5udW1iZXIo
KSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX1NUUklORzoKLSAgICAgICAgICBzd2l0Y2ggKGZpZWxkLT5vcHRpb25zKCkuY3R5cGUoKSkg
ewotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNhc2UgRmllbGRPcHRpb25zOjpT
VFJJTkc6Ci0gICAgICAgICAgICAgIEFyZW5hU3RyaW5nUHRyKiBhc3AgPSBuZXcgKGZpZWxkX3B0
cikgQXJlbmFTdHJpbmdQdHIoKTsKLSAgICAgICAgICAgICAgYXNwLT5VbnNhZmVTZXREZWZhdWx0
KCZmaWVsZC0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9NRVNTQUdFOiB7Ci0gICAgICAgICAgbmV3KGZpZWxkX3B0cikgTWVzc2Fn
ZSooTlVMTCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
IH0KLX0KLQotdm9pZCBEeW5hbWljTWVzc2FnZUZhY3Rvcnk6OkRlbGV0ZURlZmF1bHRPbmVvZklu
c3RhbmNlKAotICAgIGNvbnN0IERlc2NyaXB0b3IqIHR5cGUsCi0gICAgY29uc3QgaW50IG9mZnNl
dHNbXSwKLSAgICB2b2lkKiBkZWZhdWx0X29uZW9mX2luc3RhbmNlKSB7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgdHlwZS0+b25lb2ZfZGVjbF9jb3VudCgpOyBpKyspIHsKLSAgICBmb3IgKGludCBq
ID0gMDsgaiA8IHR5cGUtPm9uZW9mX2RlY2woaSktPmZpZWxkX2NvdW50KCk7IGorKykgewotICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IHR5cGUtPm9uZW9mX2RlY2woaSktPmZp
ZWxkKGopOwotICAgICAgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9TVFJJTkcpIHsKLSAgICAgICAgc3dpdGNoIChmaWVsZC0+b3B0aW9ucygpLmN0eXBl
KCkpIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGNhc2UgRmllbGRPcHRpb25zOjpT
VFJJTkc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAg
fQotfQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9keW5hbWljX21lc3NhZ2UuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9keW5hbWljX21lc3NhZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjc0Y2Q3ZGQyNTE1NGZhNDUzNmUyODBkZmFmYjlkMzg4ZGY3NWU2NC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
ZHluYW1pY19tZXNzYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5j
b20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJz
IGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgot
Ly8KLS8vIERlZmluZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgTWVzc2FnZSB3aGljaCBjYW4gZW11
bGF0ZSB0eXBlcyB3aGljaCBhcmUgbm90Ci0vLyBrbm93biBhdCBjb21waWxlLXRpbWUuCi0KLSNp
Zm5kZWYgR09PR0xFX1BST1RPQlVGX0RZTkFNSUNfTUVTU0FHRV9IX18KLSNkZWZpbmUgR09PR0xF
X1BST1RPQlVGX0RZTkFNSUNfTUVTU0FHRV9IX18KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5k
ZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRf
cHRyLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9tdXRleC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFj
ZSBwcm90b2J1ZiB7Ci0KLS8vIERlZmluZWQgaW4gb3RoZXIgZmlsZXMuCi1jbGFzcyBEZXNjcmlw
dG9yOyAgICAgICAgLy8gZGVzY3JpcHRvci5oCi1jbGFzcyBEZXNjcmlwdG9yUG9vbDsgICAgLy8g
ZGVzY3JpcHRvci5oCi0KLS8vIENvbnN0cnVjdHMgaW1wbGVtZW50YXRpb25zIG9mIE1lc3NhZ2Ug
d2hpY2ggY2FuIGVtdWxhdGUgdHlwZXMgd2hpY2ggYXJlIG5vdAotLy8ga25vd24gYXQgY29tcGls
ZS10aW1lLgotLy8KLS8vIFNvbWV0aW1lcyB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIG1hbmlwdWxh
dGUgcHJvdG9jb2wgdHlwZXMgdGhhdCB5b3UgZG9uJ3QKLS8vIGtub3cgYWJvdXQgYXQgY29tcGls
ZSB0aW1lLiAgSXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGNvbnN0cnVjdAotLy8gYSBN
ZXNzYWdlIG9iamVjdCB3aGljaCBpbXBsZW1lbnRzIHRoZSBtZXNzYWdlIHR5cGUgZ2l2ZW4gYnkg
YW55IGFyYml0cmFyeQotLy8gRGVzY3JpcHRvci4gIER5bmFtaWNNZXNzYWdlIHByb3ZpZGVzIHRo
aXMuCi0vLwotLy8gQXMgaXQgdHVybnMgb3V0LCBhIER5bmFtaWNNZXNzYWdlIG5lZWRzIHRvIGNv
bnN0cnVjdCBleHRyYQotLy8gaW5mb3JtYXRpb24gYWJvdXQgaXRzIHR5cGUgaW4gb3JkZXIgdG8g
b3BlcmF0ZS4gIE1vc3Qgb2YgdGhpcyBpbmZvcm1hdGlvbgotLy8gY2FuIGJlIHNoYXJlZCBiZXR3
ZWVuIGFsbCBEeW5hbWljTWVzc2FnZXMgb2YgdGhlIHNhbWUgdHlwZS4gIEJ1dCwgY2FjaGluZwot
Ly8gdGhpcyBpbmZvcm1hdGlvbiBpbiBzb21lIHNvcnQgb2YgZ2xvYmFsIG1hcCB3b3VsZCBiZSBh
IGJhZCBpZGVhLCBzaW5jZQotLy8gdGhlIGNhY2hlZCBpbmZvcm1hdGlvbiBmb3IgYSBwYXJ0aWN1
bGFyIGRlc2NyaXB0b3IgY291bGQgb3V0bGl2ZSB0aGUKLS8vIGRlc2NyaXB0b3IgaXRzZWxmLiAg
VG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBEeW5hbWljTWVzc2FnZUZhY3RvcnkKLS8vIGVuY2Fwc3Vs
YXRlcyB0aGlzICJjYWNoZSIuICBBbGwgRHluYW1pY01lc3NhZ2VzIG9mIHRoZSBzYW1lIHR5cGUg
Y3JlYXRlZAotLy8gZnJvbSB0aGUgc2FtZSBmYWN0b3J5IHdpbGwgc2hhcmUgdGhlIHNhbWUgc3Vw
cG9ydCBkYXRhLiAgQW55IERlc2NyaXB0b3JzCi0vLyB1c2VkIHdpdGggYSBwYXJ0aWN1bGFyIGZh
Y3RvcnkgbXVzdCBvdXRsaXZlIHRoZSBmYWN0b3J5LgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JU
IER5bmFtaWNNZXNzYWdlRmFjdG9yeSA6IHB1YmxpYyBNZXNzYWdlRmFjdG9yeSB7Ci0gcHVibGlj
OgotICAvLyBDb25zdHJ1Y3QgYSBEeW5hbWljTWVzc2FnZUZhY3RvcnkgdGhhdCB3aWxsIHNlYXJj
aCBmb3IgZXh0ZW5zaW9ucyBpbgotICAvLyB0aGUgRGVzY3JpcHRvclBvb2wgaW4gd2hpY2ggdGhl
IGV4dGVuZGVlIGlzIGRlZmluZWQuCi0gIER5bmFtaWNNZXNzYWdlRmFjdG9yeSgpOwotCi0gIC8v
IENvbnN0cnVjdCBhIER5bmFtaWNNZXNzYWdlRmFjdG9yeSB0aGF0IHdpbGwgc2VhcmNoIGZvciBl
eHRlbnNpb25zIGluCi0gIC8vIHRoZSBnaXZlbiBEZXNjcmlwdG9yUG9vbC4KLSAgLy8KLSAgLy8g
REVQUkVDQVRFRDogIFVzZSBDb2RlZElucHV0U3RyZWFtOjpTZXRFeHRlbnNpb25SZWdpc3RyeSgp
IHRvIHRlbGwgdGhlCi0gIC8vICAgcGFyc2VyIHRvIGxvb2sgZm9yIGV4dGVuc2lvbnMgaW4gYW4g
YWx0ZXJuYXRlIHBvb2wuICBIb3dldmVyLCBub3RlIHRoYXQKLSAgLy8gICB0aGlzIGlzIGFsbW9z
dCBuZXZlciB3aGF0IHlvdSB3YW50IHRvIGRvLiAgQWxtb3N0IGFsbCB1c2VycyBzaG91bGQgdXNl
Ci0gIC8vICAgdGhlIHplcm8tYXJnIGNvbnN0cnVjdG9yLgotICBEeW5hbWljTWVzc2FnZUZhY3Rv
cnkoY29uc3QgRGVzY3JpcHRvclBvb2wqIHBvb2wpOwotCi0gIH5EeW5hbWljTWVzc2FnZUZhY3Rv
cnkoKTsKLQotICAvLyBDYWxsIHRoaXMgdG8gdGVsbCB0aGUgRHluYW1pY01lc3NhZ2VGYWN0b3J5
IHRoYXQgaWYgaXQgaXMgZ2l2ZW4gYQotICAvLyBEZXNjcmlwdG9yIGQgZm9yIHdoaWNoOgotICAv
LyAgIGQtPmZpbGUoKS0+cG9vbCgpID09IERlc2NyaXB0b3JQb29sOjpnZW5lcmF0ZWRfcG9vbCgp
LAotICAvLyB0aGVuIGl0IHNob3VsZCBkZWxlZ2F0ZSB0byBNZXNzYWdlRmFjdG9yeTo6Z2VuZXJh
dGVkX2ZhY3RvcnkoKSBpbnN0ZWFkCi0gIC8vIG9mIGNvbnN0cnVjdGluZyBhIGR5bmFtaWMgaW1w
bGVtZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UuICBJbiB0aGVvcnkgdGhlcmUKLSAgLy8gaXMgbm8g
ZG93biBzaWRlIHRvIGRvaW5nIHRoaXMsIHNvIGl0IG1heSBiZWNvbWUgdGhlIGRlZmF1bHQgaW4g
dGhlIGZ1dHVyZS4KLSAgdm9pZCBTZXREZWxlZ2F0ZVRvR2VuZXJhdGVkRmFjdG9yeShib29sIGVu
YWJsZSkgewotICAgIGRlbGVnYXRlX3RvX2dlbmVyYXRlZF9mYWN0b3J5XyA9IGVuYWJsZTsKLSAg
fQotCi0gIC8vIGltcGxlbWVudHMgTWVzc2FnZUZhY3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gR2l2ZW4gYSBEZXNjcmlwdG9yLCBjb25zdHJ1Y3Rz
IHRoZSBkZWZhdWx0IChwcm90b3R5cGUpIE1lc3NhZ2Ugb2YgdGhhdAotICAvLyB0eXBlLiAgWW91
IGNhbiB0aGVuIGNhbGwgdGhhdCBtZXNzYWdlJ3MgTmV3KCkgbWV0aG9kIHRvIGNvbnN0cnVjdCBh
Ci0gIC8vIG11dGFibGUgbWVzc2FnZSBvZiB0aGF0IHR5cGUuCi0gIC8vCi0gIC8vIENhbGxpbmcg
dGhpcyBtZXRob2QgdHdpY2Ugd2l0aCB0aGUgc2FtZSBEZXNjcmlwdG9yIHJldHVybnMgdGhlIHNh
bWUKLSAgLy8gb2JqZWN0LiAgVGhlIHJldHVybmVkIG9iamVjdCByZW1haW5zIHByb3BlcnR5IG9m
IHRoZSBmYWN0b3J5IGFuZCB3aWxsCi0gIC8vIGJlIGRlc3Ryb3llZCB3aGVuIHRoZSBmYWN0b3J5
IGlzIGRlc3Ryb3llZC4gIEFsc28sIGFueSBvYmplY3RzIGNyZWF0ZWQKLSAgLy8gYnkgY2FsbGlu
ZyB0aGUgcHJvdG90eXBlJ3MgTmV3KCkgbWV0aG9kIHNoYXJlIHNvbWUgZGF0YSB3aXRoIHRoZQot
ICAvLyBwcm90b3R5cGUsIHNvIHRoZXNlIG11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSB0aGUgRHlu
YW1pY01lc3NhZ2VGYWN0b3J5Ci0gIC8vIGlzIGRlc3Ryb3llZC4KLSAgLy8KLSAgLy8gVGhlIGdp
dmVuIGRlc2NyaXB0b3IgbXVzdCBvdXRsaXZlIHRoZSByZXR1cm5lZCBtZXNzYWdlLCBhbmQgaGVu
Y2UgbXVzdAotICAvLyBvdXRsaXZlIHRoZSBEeW5hbWljTWVzc2FnZUZhY3RvcnkuCi0gIC8vCi0g
IC8vIFRoZSBtZXRob2QgaXMgdGhyZWFkLXNhZmUuCi0gIGNvbnN0IE1lc3NhZ2UqIEdldFByb3Rv
dHlwZShjb25zdCBEZXNjcmlwdG9yKiB0eXBlKTsKLQotIHByaXZhdGU6Ci0gIGNvbnN0IERlc2Ny
aXB0b3JQb29sKiBwb29sXzsKLSAgYm9vbCBkZWxlZ2F0ZV90b19nZW5lcmF0ZWRfZmFjdG9yeV87
Ci0KLSAgLy8gVGhpcyBzdHJ1Y3QganVzdCBjb250YWlucyBhIGhhc2hfbWFwLiAgV2UgY2FuJ3Qg
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+IGZyb20KLSAgLy8gdGhpcyBo
ZWFkZXIgZHVlIHRvIGhhY2tzIG5lZWRlZCBmb3IgaGFzaF9tYXAgcG9ydGFiaWxpdHkgaW4gdGhl
IG9wZW4gc291cmNlCi0gIC8vIHJlbGVhc2UuICBOYW1lbHksIHN0dWJzL2hhc2guaCwgd2hpY2gg
ZGVmaW5lcyBoYXNoX21hcCBwb3J0YWJseSwgaXMgbm90IGEKLSAgLy8gcHVibGljIGhlYWRlciAo
Zm9yIGdvb2QgcmVhc29uKSwgYnV0IGR5bmFtaWNfbWVzc2FnZS5oIGlzLCBhbmQgcHVibGljCi0g
IC8vIGhlYWRlcnMgbWF5IG9ubHkgI2luY2x1ZGUgb3RoZXIgcHVibGljIGhlYWRlcnMuCi0gIHN0
cnVjdCBQcm90b3R5cGVNYXA7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8UHJvdG90
eXBlTWFwPiBwcm90b3R5cGVzXzsKLSAgbXV0YWJsZSBNdXRleCBwcm90b3R5cGVzX211dGV4XzsK
LQotICBmcmllbmQgY2xhc3MgRHluYW1pY01lc3NhZ2U7Ci0gIGNvbnN0IE1lc3NhZ2UqIEdldFBy
b3RvdHlwZU5vTG9jayhjb25zdCBEZXNjcmlwdG9yKiB0eXBlKTsKLQotICAvLyBDb25zdHJ1Y3Qg
ZGVmYXVsdCBvbmVvZiBpbnN0YW5jZSBmb3IgcmVmbGVjdGlvbiB1c2FnZSBpZiBvbmVvZgotICAv
LyBpcyBkZWZpbmVkLgotICBzdGF0aWMgdm9pZCBDb25zdHJ1Y3REZWZhdWx0T25lb2ZJbnN0YW5j
ZShjb25zdCBEZXNjcmlwdG9yKiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbnQgb2Zmc2V0c1tdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBkZWZhdWx0X29uZW9mX2luc3RhbmNlKTsKLSAg
Ly8gRGVsZXRlIGRlZmF1bHQgb25lb2YgaW5zdGFuY2UuIENhbGxlZCBieSB+RHluYW1pY01lc3Nh
Z2VGYWN0b3J5LgotICBzdGF0aWMgdm9pZCBEZWxldGVEZWZhdWx0T25lb2ZJbnN0YW5jZShjb25z
dCBEZXNjcmlwdG9yKiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgb2Zmc2V0c1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkKiBkZWZhdWx0X29uZW9mX2luc3RhbmNlKTsKLQotICBHT09HTEVfRElT
QUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRHluYW1pY01lc3NhZ2VGYWN0b3J5KTsKLX07Ci0KLX0g
IC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYg
IC8vIEdPT0dMRV9QUk9UT0JVRl9EWU5BTUlDX01FU1NBR0VfSF9fCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvZHluYW1pY19tZXNzYWdlX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2R5bmFtaWNfbWVzc2FnZV91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzBlNDM3ZDdkMmMyMTQwNWE0Y2JkMGQ3MTcwNzM3ZjAxZDcxMmZjMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvZHluYW1pY19tZXNzYWdlX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtl
bnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJv
dG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwg
YW5kIG90aGVycy4KLS8vCi0vLyBTaW5jZSB0aGUgcmVmbGVjdGlvbiBpbnRlcmZhY2UgZm9yIER5
bmFtaWNNZXNzYWdlIGlzIGltcGxlbWVudGVkIGJ5Ci0vLyBHZW5lcmljTWVzc2FnZVJlZmxlY3Rp
b24sIHRoZSBvbmx5IHRoaW5nIHdlIHJlYWxseSBoYXZlIHRvIHRlc3QgaXMKLS8vIHRoYXQgRHlu
YW1pY01lc3NhZ2UgY29ycmVjdGx5IHNldHMgdXAgdGhlIGluZm9ybWF0aW9uIHRoYXQKLS8vIEdl
bmVyaWNNZXNzYWdlUmVmbGVjdGlvbiBuZWVkcyB0byB1c2UuICBTbywgd2UgZm9jdXMgb24gdGhh
dCBpbiB0aGlzCi0vLyB0ZXN0LiAgT3RoZXIgdGVzdHMsIHN1Y2ggYXMgZ2VuZXJpY19tZXNzYWdl
X3JlZmxlY3Rpb25fdW5pdHRlc3QgYW5kCi0vLyByZWZsZWN0aW9uX29wc191bml0dGVzdCwgY292
ZXIgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgdXNlZCBieQotLy8gRHluYW1pY01lc3Nh
Z2UuCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2NvcGVkX3B0ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZHluYW1p
Y19tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi90ZXN0X3V0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5pdHRl
c3QucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fZmllbGRfcHJl
c2VuY2UucGIuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1
ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLQotY2xhc3MgRHluYW1pY01lc3NhZ2VUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qg
ewotIHByb3RlY3RlZDoKLSAgRGVzY3JpcHRvclBvb2wgcG9vbF87Ci0gIER5bmFtaWNNZXNzYWdl
RmFjdG9yeSBmYWN0b3J5XzsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcl87Ci0gIGNv
bnN0IE1lc3NhZ2UqIHByb3RvdHlwZV87Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGV4dGVuc2lvbnNf
ZGVzY3JpcHRvcl87Ci0gIGNvbnN0IE1lc3NhZ2UqIGV4dGVuc2lvbnNfcHJvdG90eXBlXzsKLSAg
Y29uc3QgRGVzY3JpcHRvciogcGFja2VkX2Rlc2NyaXB0b3JfOwotICBjb25zdCBNZXNzYWdlKiBw
YWNrZWRfcHJvdG90eXBlXzsKLSAgY29uc3QgRGVzY3JpcHRvciogb25lb2ZfZGVzY3JpcHRvcl87
Ci0gIGNvbnN0IE1lc3NhZ2UqIG9uZW9mX3Byb3RvdHlwZV87Ci0gIGNvbnN0IERlc2NyaXB0b3Iq
IHByb3RvM19kZXNjcmlwdG9yXzsKLSAgY29uc3QgTWVzc2FnZSogcHJvdG8zX3Byb3RvdHlwZV87
Ci0KLSAgRHluYW1pY01lc3NhZ2VUZXN0KCk6IGZhY3RvcnlfKCZwb29sXykge30KLQotICB2aXJ0
dWFsIHZvaWQgU2V0VXAoKSB7Ci0gICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBEeW5h
bWljTWVzc2FnZSB3b3JrcyAocGFydGljdWxhcmx5IHdpdGgKLSAgICAvLyBleHRlbnNpb25zKSBl
dmVuIGlmIHdlIHVzZSBkZXNjcmlwdG9ycyB0aGF0IGFyZSAqbm90KiBmcm9tIGNvbXBpbGVkLWlu
Ci0gICAgLy8gdHlwZXMsIHNvIHdlIG1ha2UgY29waWVzIG9mIHRoZSBkZXNjcmlwdG9ycyBmb3Ig
dW5pdHRlc3QucHJvdG8gYW5kCi0gICAgLy8gdW5pdHRlc3RfaW1wb3J0LnByb3RvLgotICAgIEZp
bGVEZXNjcmlwdG9yUHJvdG8gdW5pdHRlc3RfZmlsZTsKLSAgICBGaWxlRGVzY3JpcHRvclByb3Rv
IHVuaXR0ZXN0X2ltcG9ydF9maWxlOwotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gdW5pdHRlc3Rf
aW1wb3J0X3B1YmxpY19maWxlOwotICAgIEZpbGVEZXNjcmlwdG9yUHJvdG8gdW5pdHRlc3Rfbm9f
ZmllbGRfcHJlc2VuY2VfZmlsZTsKLQotICAgIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRlc2Ny
aXB0b3IoKS0+ZmlsZSgpLT5Db3B5VG8oJnVuaXR0ZXN0X2ZpbGUpOwotICAgIHVuaXR0ZXN0X2lt
cG9ydDo6SW1wb3J0TWVzc2FnZTo6ZGVzY3JpcHRvcigpLT5maWxlKCktPkNvcHlUbygKLSAgICAg
ICZ1bml0dGVzdF9pbXBvcnRfZmlsZSk7Ci0gICAgdW5pdHRlc3RfaW1wb3J0OjpQdWJsaWNJbXBv
cnRNZXNzYWdlOjpkZXNjcmlwdG9yKCktPmZpbGUoKS0+Q29weVRvKAotICAgICAgJnVuaXR0ZXN0
X2ltcG9ydF9wdWJsaWNfZmlsZSk7Ci0gICAgcHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0dGVz
dDo6VGVzdEFsbFR5cGVzOjpkZXNjcmlwdG9yKCktPgotICAgICAgICBmaWxlKCktPkNvcHlUbygm
dW5pdHRlc3Rfbm9fZmllbGRfcHJlc2VuY2VfZmlsZSk7Ci0KLSAgICBBU1NFUlRfVFJVRShwb29s
Xy5CdWlsZEZpbGUodW5pdHRlc3RfaW1wb3J0X3B1YmxpY19maWxlKSAhPSBOVUxMKTsKLSAgICBB
U1NFUlRfVFJVRShwb29sXy5CdWlsZEZpbGUodW5pdHRlc3RfaW1wb3J0X2ZpbGUpICE9IE5VTEwp
OwotICAgIEFTU0VSVF9UUlVFKHBvb2xfLkJ1aWxkRmlsZSh1bml0dGVzdF9maWxlKSAhPSBOVUxM
KTsKLSAgICBBU1NFUlRfVFJVRShwb29sXy5CdWlsZEZpbGUodW5pdHRlc3Rfbm9fZmllbGRfcHJl
c2VuY2VfZmlsZSkgIT0gTlVMTCk7Ci0KLSAgICBkZXNjcmlwdG9yXyA9IHBvb2xfLkZpbmRNZXNz
YWdlVHlwZUJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzIik7Ci0gICAgQVNT
RVJUX1RSVUUoZGVzY3JpcHRvcl8gIT0gTlVMTCk7Ci0gICAgcHJvdG90eXBlXyA9IGZhY3Rvcnlf
LkdldFByb3RvdHlwZShkZXNjcmlwdG9yXyk7Ci0KLSAgICBleHRlbnNpb25zX2Rlc2NyaXB0b3Jf
ID0KLSAgICAgIHBvb2xfLkZpbmRNZXNzYWdlVHlwZUJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3Qu
VGVzdEFsbEV4dGVuc2lvbnMiKTsKLSAgICBBU1NFUlRfVFJVRShleHRlbnNpb25zX2Rlc2NyaXB0
b3JfICE9IE5VTEwpOwotICAgIGV4dGVuc2lvbnNfcHJvdG90eXBlXyA9IGZhY3RvcnlfLkdldFBy
b3RvdHlwZShleHRlbnNpb25zX2Rlc2NyaXB0b3JfKTsKLQotICAgIHBhY2tlZF9kZXNjcmlwdG9y
XyA9Ci0gICAgICBwb29sXy5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoInByb3RvYnVmX3VuaXR0ZXN0
LlRlc3RQYWNrZWRUeXBlcyIpOwotICAgIEFTU0VSVF9UUlVFKHBhY2tlZF9kZXNjcmlwdG9yXyAh
PSBOVUxMKTsKLSAgICBwYWNrZWRfcHJvdG90eXBlXyA9IGZhY3RvcnlfLkdldFByb3RvdHlwZShw
YWNrZWRfZGVzY3JpcHRvcl8pOwotCi0gICAgb25lb2ZfZGVzY3JpcHRvcl8gPQotICAgICAgcG9v
bF8uRmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJwcm90b2J1Zl91bml0dGVzdC5UZXN0T25lb2YyIik7
Ci0gICAgQVNTRVJUX1RSVUUob25lb2ZfZGVzY3JpcHRvcl8gIT0gTlVMTCk7Ci0gICAgb25lb2Zf
cHJvdG90eXBlXyA9IGZhY3RvcnlfLkdldFByb3RvdHlwZShvbmVvZl9kZXNjcmlwdG9yXyk7Ci0K
LSAgICBwcm90bzNfZGVzY3JpcHRvcl8gPQotICAgICAgcG9vbF8uRmluZE1lc3NhZ2VUeXBlQnlO
YW1lKAotICAgICAgICAgICJwcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0LlRlc3RBbGxU
eXBlcyIpOwotICAgIEFTU0VSVF9UUlVFKHByb3RvM19kZXNjcmlwdG9yXyAhPSBOVUxMKTsKLSAg
ICBwcm90bzNfcHJvdG90eXBlXyA9IGZhY3RvcnlfLkdldFByb3RvdHlwZShwcm90bzNfZGVzY3Jp
cHRvcl8pOwotICB9Ci19OwotCi1URVNUX0YoRHluYW1pY01lc3NhZ2VUZXN0LCBEZXNjcmlwdG9y
KSB7Ci0gIC8vIENoZWNrIHRoYXQgdGhlIGRlc2NyaXB0b3Igb24gdGhlIER5bmFtaWNNZXNzYWdl
IG1hdGNoZXMgdGhlIGRlc2NyaXB0b3IKLSAgLy8gcGFzc2VkIHRvIEdldFByb3RvdHlwZSgpLgot
ICBFWFBFQ1RfRVEocHJvdG90eXBlXy0+R2V0RGVzY3JpcHRvcigpLCBkZXNjcmlwdG9yXyk7Ci19
Ci0KLVRFU1RfRihEeW5hbWljTWVzc2FnZVRlc3QsIE9uZVByb3RvdHlwZSkgewotICAvLyBDaGVj
ayB0aGF0IHJlcXVlc3RpbmcgdGhlIHNhbWUgcHJvdG90eXBlIHR3aWNlIHByb2R1Y2VzIHRoZSBz
YW1lIG9iamVjdC4KLSAgRVhQRUNUX0VRKHByb3RvdHlwZV8sIGZhY3RvcnlfLkdldFByb3RvdHlw
ZShkZXNjcmlwdG9yXykpOwotfQotCi1URVNUX0YoRHluYW1pY01lc3NhZ2VUZXN0LCBEZWZhdWx0
cykgewotICAvLyBDaGVjayB0aGF0IGFsbCBkZWZhdWx0IHZhbHVlcyBhcmUgc2V0IGNvcnJlY3Rs
eSBpbiB0aGUgaW5pdGlhbCBtZXNzYWdlLgotICBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3RlciBy
ZWZsZWN0aW9uX3Rlc3RlcihkZXNjcmlwdG9yXyk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4cGVj
dENsZWFyVmlhUmVmbGVjdGlvbigqcHJvdG90eXBlXyk7Ci19Ci0KLVRFU1RfRihEeW5hbWljTWVz
c2FnZVRlc3QsIEluZGVwZW5kZW50T2Zmc2V0cykgewotICAvLyBDaGVjayB0aGF0IGFsbCBmaWVs
ZHMgaGF2ZSBpbmRlcGVuZGVudCBvZmZzZXRzIGJ5IHNldHRpbmcgZWFjaAotICAvLyBvbmUgdG8g
YSB1bmlxdWUgdmFsdWUgdGhlbiBjaGVja2luZyB0aGF0IHRoZXkgYWxsIHN0aWxsIGhhdmUgdGhv
c2UKLSAgLy8gdW5pcXVlIHZhbHVlcyAoaS5lLiB0aGV5IGRvbid0IHN0b21wIGVhY2ggb3RoZXIp
LgotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IG1lc3NhZ2UocHJvdG90
eXBlXy0+TmV3KCkpOwotICBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3RlciByZWZsZWN0aW9uX3Rl
c3RlcihkZXNjcmlwdG9yXyk7Ci0KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU2V0QWxsRmllbGRzVmlh
UmVmbGVjdGlvbihtZXNzYWdlLmdldCgpKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0QWxs
RmllbGRzU2V0VmlhUmVmbGVjdGlvbigqbWVzc2FnZSk7Ci19Ci0KLVRFU1RfRihEeW5hbWljTWVz
c2FnZVRlc3QsIEV4dGVuc2lvbnMpIHsKLSAgLy8gQ2hlY2sgdGhhdCBleHRlbnNpb25zIHdvcmsu
Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8TWVzc2FnZT4gbWVzc2FnZShleHRlbnNp
b25zX3Byb3RvdHlwZV8tPk5ldygpKTsKLSAgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXIgcmVm
bGVjdGlvbl90ZXN0ZXIoZXh0ZW5zaW9uc19kZXNjcmlwdG9yXyk7Ci0KLSAgcmVmbGVjdGlvbl90
ZXN0ZXIuU2V0QWxsRmllbGRzVmlhUmVmbGVjdGlvbihtZXNzYWdlLmdldCgpKTsKLSAgcmVmbGVj
dGlvbl90ZXN0ZXIuRXhwZWN0QWxsRmllbGRzU2V0VmlhUmVmbGVjdGlvbigqbWVzc2FnZSk7Ci19
Ci0KLVRFU1RfRihEeW5hbWljTWVzc2FnZVRlc3QsIFBhY2tlZEZpZWxkcykgewotICAvLyBDaGVj
ayB0aGF0IHBhY2tlZCBmaWVsZHMgd29yayBwcm9wZXJseS4KLSAgZ29vZ2xlOjpwcm90b2J1Zjo6
c2NvcGVkX3B0cjxNZXNzYWdlPiBtZXNzYWdlKHBhY2tlZF9wcm90b3R5cGVfLT5OZXcoKSk7Ci0g
IFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyIHJlZmxlY3Rpb25fdGVzdGVyKHBhY2tlZF9kZXNj
cmlwdG9yXyk7Ci0KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU2V0UGFja2VkRmllbGRzVmlhUmVmbGVj
dGlvbihtZXNzYWdlLmdldCgpKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0UGFja2VkRmll
bGRzU2V0VmlhUmVmbGVjdGlvbigqbWVzc2FnZSk7Ci19Ci0KLVRFU1RfRihEeW5hbWljTWVzc2Fn
ZVRlc3QsIE9uZW9mKSB7Ci0gIC8vIENoZWNrIHRoYXQgb25lb2YgZmllbGRzIHdvcmsgcHJvcGVy
bHkuCi0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8TWVzc2FnZT4gbWVzc2FnZShvbmVv
Zl9wcm90b3R5cGVfLT5OZXcoKSk7Ci0KLSAgLy8gQ2hlY2sgZGVmYXVsdCB2YWx1ZXMuCi0gIGNv
bnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBtZXNzYWdlLT5HZXREZXNjcmlwdG9yKCk7Ci0g
IGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7
Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0aW9uLT5HZXRJbnQzMigKLSAgICAgICptZXNzYWdlLCBk
ZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZvb19pbnQiKSkpOwotICBFWFBFQ1RfRVEoIiIs
IHJlZmxlY3Rpb24tPkdldFN0cmluZygKLSAgICAgICptZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5k
RmllbGRCeU5hbWUoImZvb19zdHJpbmciKSkpOwotICBFWFBFQ1RfRVEoIiIsIHJlZmxlY3Rpb24t
PkdldFN0cmluZygKLSAgICAgICptZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUo
ImZvb19jb3JkIikpKTsKLSAgRVhQRUNUX0VRKCIiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcoCi0g
ICAgICAqbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJmb29fc3RyaW5nX3Bp
ZWNlIikpKTsKLSAgRVhQRUNUX0VRKCIiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcoCi0gICAgICAq
bWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJmb29fYnl0ZXMiKSkpOwotICBF
WFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RPbmVvZjI6OkZPTywgcmVmbGVjdGlvbi0+R2V0RW51bSgK
LSAgICAgICptZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZvb19lbnVtIikp
LT5udW1iZXIoKSk7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIG5lc3RlZF9kZXNjcmlwdG9yOwotICBj
b25zdCBNZXNzYWdlKiBuZXN0ZWRfcHJvdG90eXBlOwotICBuZXN0ZWRfZGVzY3JpcHRvciA9Ci0g
ICAgICBwb29sXy5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RP
bmVvZjIuTmVzdGVkTWVzc2FnZSIpOwotICBuZXN0ZWRfcHJvdG90eXBlID0gZmFjdG9yeV8uR2V0
UHJvdG90eXBlKG5lc3RlZF9kZXNjcmlwdG9yKTsKLSAgRVhQRUNUX0VRKG5lc3RlZF9wcm90b3R5
cGUsCi0gICAgICAgICAgICAmcmVmbGVjdGlvbi0+R2V0TWVzc2FnZSgKLSAgICAgICAgICAgICAg
ICAqbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJmb29fbWVzc2FnZSIpKSk7
Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGZvb2dyb3VwX2Rlc2NyaXB0b3I7Ci0gIGNvbnN0IE1lc3Nh
Z2UqIGZvb2dyb3VwX3Byb3RvdHlwZTsKLSAgZm9vZ3JvdXBfZGVzY3JpcHRvciA9Ci0gICAgICBw
b29sXy5GaW5kTWVzc2FnZVR5cGVCeU5hbWUoInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RPbmVvZjIu
Rm9vR3JvdXAiKTsKLSAgZm9vZ3JvdXBfcHJvdG90eXBlID0gZmFjdG9yeV8uR2V0UHJvdG90eXBl
KGZvb2dyb3VwX2Rlc2NyaXB0b3IpOwotICBFWFBFQ1RfRVEoZm9vZ3JvdXBfcHJvdG90eXBlLAot
ICAgICAgICAgICAgJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UoCi0gICAgICAgICAgICAgICAgKm1l
c3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiZm9vZ3JvdXAiKSkpOwotICBFWFBF
Q1RfTkUoZm9vZ3JvdXBfcHJvdG90eXBlLAotICAgICAgICAgICAgJnJlZmxlY3Rpb24tPkdldE1l
c3NhZ2UoCi0gICAgICAgICAgICAgICAgKm1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5
TmFtZSgiZm9vX2xhenlfbWVzc2FnZSIpKSk7Ci0gIEVYUEVDVF9FUSg1LCByZWZsZWN0aW9uLT5H
ZXRJbnQzMigKLSAgICAgICptZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImJh
cl9pbnQiKSkpOwotICBFWFBFQ1RfRVEoIlNUUklORyIsIHJlZmxlY3Rpb24tPkdldFN0cmluZygK
LSAgICAgICptZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImJhcl9zdHJpbmci
KSkpOwotICBFWFBFQ1RfRVEoIkNPUkQiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcoCi0gICAgICAq
bWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJiYXJfY29yZCIpKSk7Ci0gIEVY
UEVDVF9FUSgiU1BJRUNFIiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nKAotICAgICAgKm1lc3NhZ2Us
IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiYmFyX3N0cmluZ19waWVjZSIpKSk7Ci0gIEVY
UEVDVF9FUSgiQllURVMiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcoCi0gICAgICAqbWVzc2FnZSwg
ZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJiYXJfYnl0ZXMiKSkpOwotICBFWFBFQ1RfRVEo
dW5pdHRlc3Q6OlRlc3RPbmVvZjI6OkJBUiwgcmVmbGVjdGlvbi0+R2V0RW51bSgKLSAgICAgICpt
ZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImJhcl9lbnVtIikpLT5udW1iZXIo
KSk7Ci0KLSAgLy8gQ2hlY2sgc2V0IGZ1bmN0aW9ucy4KLSAgVGVzdFV0aWw6OlJlZmxlY3Rpb25U
ZXN0ZXIgcmVmbGVjdGlvbl90ZXN0ZXIob25lb2ZfZGVzY3JpcHRvcl8pOwotICByZWZsZWN0aW9u
X3Rlc3Rlci5TZXRPbmVvZlZpYVJlZmxlY3Rpb24obWVzc2FnZS5nZXQoKSk7Ci0gIHJlZmxlY3Rp
b25fdGVzdGVyLkV4cGVjdE9uZW9mU2V0VmlhUmVmbGVjdGlvbigqbWVzc2FnZSk7Ci19Ci0KLVRF
U1RfRihEeW5hbWljTWVzc2FnZVRlc3QsIFNwYWNlVXNlZCkgewotICAvLyBUZXN0IHRoYXQgU3Bh
Y2VVc2VkKCkgd29ya3MgcHJvcGVybHkKLQotICAvLyBTaW5jZSB3ZSBzaGFyZSB0aGUgaW1wbGVt
ZW50YXRpb24gd2l0aCBnZW5lcmF0ZWQgbWVzc2FnZXMsIHdlIGRvbid0IG5lZWQKLSAgLy8gdG8g
dGVzdCB2ZXJ5IG11Y2ggaGVyZS4gIEp1c3QgbWFrZSBzdXJlIGl0IGFwcGVhcnMgdG8gYmUgd29y
a2luZy4KLQotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IG1lc3NhZ2Uo
cHJvdG90eXBlXy0+TmV3KCkpOwotICBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3RlciByZWZsZWN0
aW9uX3Rlc3RlcihkZXNjcmlwdG9yXyk7Ci0KLSAgaW50IGluaXRpYWxfc3BhY2VfdXNlZCA9IG1l
c3NhZ2UtPlNwYWNlVXNlZCgpOwotCi0gIHJlZmxlY3Rpb25fdGVzdGVyLlNldEFsbEZpZWxkc1Zp
YVJlZmxlY3Rpb24obWVzc2FnZS5nZXQoKSk7Ci0gIEVYUEVDVF9MVChpbml0aWFsX3NwYWNlX3Vz
ZWQsIG1lc3NhZ2UtPlNwYWNlVXNlZCgpKTsKLX0KLQotVEVTVF9GKER5bmFtaWNNZXNzYWdlVGVz
dCwgQXJlbmEpIHsKLSAgQXJlbmEgYXJlbmE7Ci0gIE1lc3NhZ2UqIG1lc3NhZ2UgPSBwcm90b3R5
cGVfLT5OZXcoJmFyZW5hKTsKLSAgKHZvaWQpbWVzc2FnZTsgIC8vIGF2b2lkIHVudXNlZC12YXJp
YWJsZSBlcnJvci4KLSAgLy8gUmV0dXJuIHdpdGhvdXQgZnJlZWluZzogc2hvdWxkIG5vdCBsZWFr
LgotfQotCi1URVNUX0YoRHluYW1pY01lc3NhZ2VUZXN0LCBQcm90bzMpIHsKLSAgTWVzc2FnZSog
bWVzc2FnZSA9IHByb3RvM19wcm90b3R5cGVfLT5OZXcoKTsKLSAgY29uc3QgUmVmbGVjdGlvbiog
cmVmbCA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVz
YyA9IG1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKTsKLQotICAvLyBKdXN0IHRlc3QgYSBzaW5nbGUg
cHJpbXRpdmUgYW5kIHNpbmdsZSBtZXNzYWdlIGZpZWxkIGhlcmUgdG8gbWFrZSBzdXJlIHdlCi0g
IC8vIGFyZSBnZXR0aW5nIHRoZSBuby1maWVsZC1wcmVzZW5jZSBzZW1hbnRpY3MgZWxzZXdoZXJl
LiBEeW5hbWljTWVzc2FnZSB1c2VzCi0gIC8vIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uIHVu
ZGVyIHRoZSBob29kLCBzbyB0aGUgcmVzdCBzaG91bGQgYmUgZmluZSBhcwotICAvLyBsb25nIGFz
IEdNUiByZWNvZ25pemVzIHRoYXQgd2UncmUgdXNpbmcgYSBwcm90bzMgbWVzc2FnZS4KLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBvcHRpb25hbF9pbnQzMiA9Ci0gICAgICBkZXNjLT5GaW5kRmll
bGRCeU5hbWUoIm9wdGlvbmFsX2ludDMyIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogb3B0
aW9uYWxfbXNnID0KLSAgICAgIGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UiKTsKLSAgRVhQRUNUX1RSVUUob3B0aW9uYWxfaW50MzIgIT0gTlVMTCk7Ci0gIEVY
UEVDVF9UUlVFKG9wdGlvbmFsX21zZyAhPSBOVUxMKTsKLQotICBFWFBFQ1RfRVEoZmFsc2UsIHJl
ZmwtPkhhc0ZpZWxkKCptZXNzYWdlLCBvcHRpb25hbF9pbnQzMikpOwotICByZWZsLT5TZXRJbnQz
MihtZXNzYWdlLCBvcHRpb25hbF9pbnQzMiwgNDIpOwotICBFWFBFQ1RfRVEodHJ1ZSwgcmVmbC0+
SGFzRmllbGQoKm1lc3NhZ2UsIG9wdGlvbmFsX2ludDMyKSk7Ci0gIHJlZmwtPlNldEludDMyKG1l
c3NhZ2UsIG9wdGlvbmFsX2ludDMyLCAwKTsKLSAgRVhQRUNUX0VRKGZhbHNlLCByZWZsLT5IYXNG
aWVsZCgqbWVzc2FnZSwgb3B0aW9uYWxfaW50MzIpKTsKLQotICBFWFBFQ1RfRVEoZmFsc2UsIHJl
ZmwtPkhhc0ZpZWxkKCptZXNzYWdlLCBvcHRpb25hbF9tc2cpKTsKLSAgcmVmbC0+TXV0YWJsZU1l
c3NhZ2UobWVzc2FnZSwgb3B0aW9uYWxfbXNnKTsKLSAgRVhQRUNUX0VRKHRydWUsIHJlZmwtPkhh
c0ZpZWxkKCptZXNzYWdlLCBvcHRpb25hbF9tc2cpKTsKLSAgZGVsZXRlIHJlZmwtPlJlbGVhc2VN
ZXNzYWdlKG1lc3NhZ2UsIG9wdGlvbmFsX21zZyk7Ci0gIEVYUEVDVF9FUShmYWxzZSwgcmVmbC0+
SGFzRmllbGQoKm1lc3NhZ2UsIG9wdGlvbmFsX21zZykpOwotCi0gIC8vIEFsc28gZW5zdXJlIHRo
YXQgdGhlIGRlZmF1bHQgaW5zdGFuY2UgaGFuZGxlcyBmaWVsZCBwcmVzZW5jZSBwcm9wZXJseS4K
LSAgRVhQRUNUX0VRKGZhbHNlLCByZWZsLT5IYXNGaWVsZCgqcHJvdG8zX3Byb3RvdHlwZV8sIG9w
dGlvbmFsX21zZykpOwotCi0gIGRlbGV0ZSBtZXNzYWdlOwotfQotCi0KLX0gIC8vIG5hbWVzcGFj
ZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2VtcHR5LnBiLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnBiLmNjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2Y4NDI2MzExMTJkNjdlZjhlMDdkNWE2ZjEz
ZjZjZjA3ZDlhOTYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wYi5jYworKysgL2Rldi9udWxsCkBAIC0xLDMx
OSArMCwwIEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4g
IERPIE5PVCBFRElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG8KLQot
I2RlZmluZSBJTlRFUk5BTF9TVVBQUkVTU19QUk9UT0JVRl9GSUVMRF9ERVBSRUNBVElPTgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9lbXB0eS5wYi5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGht
PgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9wb3J0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL29uY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFt
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGVfaW5sLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9yZWZsZWN0aW9uX29wcy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93
aXJlX2Zvcm1hdC5oPgotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGluY2x1ZGVzKQotCi1u
YW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5hbWVzcGFjZSB7Ci0K
LWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogRW1wdHlfZGVzY3JpcHRvcl8g
PSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVz
c2FnZVJlZmxlY3Rpb24qCi0gIEVtcHR5X3JlZmxlY3Rpb25fID0gTlVMTDsKLQotfSAgLy8gbmFt
ZXNwYWNlCi0KLQotdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJm
ZW1wdHlfMmVwcm90bygpIHsKLSAgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8y
ZmVtcHR5XzJlcHJvdG8oKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlRGVzY3Jp
cHRvciogZmlsZSA9Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbDo6Z2Vu
ZXJhdGVkX3Bvb2woKS0+RmluZEZpbGVCeU5hbWUoCi0gICAgICAiZ29vZ2xlL3Byb3RvYnVmL2Vt
cHR5LnByb3RvIik7Ci0gIEdPT0dMRV9DSEVDSyhmaWxlICE9IE5VTEwpOwotICBFbXB0eV9kZXNj
cmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlwZSgwKTsKLSAgc3RhdGljIGNvbnN0IGludCBFbXB0
eV9vZmZzZXRzX1sxXSA9IHsKLSAgfTsKLSAgRW1wdHlfcmVmbGVjdGlvbl8gPQotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdH
ZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIEVtcHR5X2Rlc2NyaXB0b3JfLAotICAg
ICAgRW1wdHk6OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgRW1wdHlfb2Zmc2V0c18sCi0gICAg
ICAtMSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoRW1wdHkpLAotICAgICAg
R09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChFbXB0eSwgX2lu
dGVybmFsX21ldGFkYXRhXyksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NB
R0VfRklFTERfT0ZGU0VUKEVtcHR5LCBfaXNfZGVmYXVsdF9pbnN0YW5jZV8pKTsKLX0KLQotbmFt
ZXNwYWNlIHsKLQotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShwcm90b2J1Zl9Bc3NpZ25E
ZXNjcmlwdG9yc19vbmNlXyk7Ci1pbmxpbmUgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9y
c09uY2UoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xlT25jZUluaXQoJnByb3RvYnVm
X0Fzc2lnbkRlc2NyaXB0b3JzX29uY2VfLAotICAgICAgICAgICAgICAgICAmcHJvdG9idWZfQXNz
aWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmVtcHR5XzJlcHJvdG8pOwotfQotCi12b2lkIHBy
b3RvYnVmX1JlZ2lzdGVyVHlwZXMoY29uc3QgOjpzdGQ6OnN0cmluZyYpIHsKLSAgcHJvdG9idWZf
QXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZh
Y3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgRW1wdHlfZGVz
Y3JpcHRvcl8sICZFbXB0eTo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlCi0KLXZvaWQgcHJvdG9idWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZW1w
dHlfMmVwcm90bygpIHsKLSAgZGVsZXRlIEVtcHR5OjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVs
ZXRlIEVtcHR5X3JlZmxlY3Rpb25fOwotfQotCi12b2lkIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZlbXB0eV8yZXByb3RvKCkgewotICBzdGF0aWMgYm9vbCBhbHJlYWR5X2hl
cmUgPSBmYWxzZTsKLSAgaWYgKGFscmVhZHlfaGVyZSkgcmV0dXJuOwotICBhbHJlYWR5X2hlcmUg
PSB0cnVlOwotICBHT09HTEVfUFJPVE9CVUZfVkVSSUZZX1ZFUlNJT047Ci0KLSAgOjpnb29nbGU6
OnByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbDo6SW50ZXJuYWxBZGRHZW5lcmF0ZWRGaWxlKAotICAg
ICJcblwwMzNnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG9cMDIyXDAxN2dvb2dsZS5wciIKLSAg
ICAib3RvYnVmXCJcMDA3XG5cMDA1RW1wdHlCeVxuXDAyM2NvbS5nb29nbGUucHJvdG9idWZCXG4i
Ci0gICAgIkVtcHR5UHJvdG9QXDAwMVpcJ2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmIgotICAg
ICIvcHR5cGVzL2VtcHR5XDI0MFwwMDFcMDAxXDM3MFwwMDFcMDAxXDI0MlwwMDJcMDAzR1BCXDI1
MlwwMDJcMDM2R29vZ2xlLlByb3RvIgotICAgICJidWYuV2VsbEtub3duVHlwZXNiXDAwNnByb3Rv
MyIsIDE4Nik7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFs
UmVnaXN0ZXJHZW5lcmF0ZWRGaWxlKAotICAgICJnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG8i
LCAmcHJvdG9idWZfUmVnaXN0ZXJUeXBlcyk7Ci0gIEVtcHR5OjpkZWZhdWx0X2luc3RhbmNlXyA9
IG5ldyBFbXB0eSgpOwotICBFbXB0eTo6ZGVmYXVsdF9pbnN0YW5jZV8tPkluaXRBc0RlZmF1bHRJ
bnN0YW5jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpPblNodXRkb3duKCZw
cm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZlbXB0eV8yZXByb3RvKTsK
LX0KLQotLy8gRm9yY2UgQWRkRGVzY3JpcHRvcnMoKSB0byBiZSBjYWxsZWQgYXQgc3RhdGljIGlu
aXRpYWxpemF0aW9uIHRpbWUuCi1zdHJ1Y3QgU3RhdGljRGVzY3JpcHRvckluaXRpYWxpemVyX2dv
b2dsZV8yZnByb3RvYnVmXzJmZW1wdHlfMmVwcm90byB7Ci0gIFN0YXRpY0Rlc2NyaXB0b3JJbml0
aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8yZmVtcHR5XzJlcHJvdG8oKSB7Ci0gICAgcHJvdG9i
dWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZmVtcHR5XzJlcHJvdG8oKTsKLSAgfQotfSBz
dGF0aWNfZGVzY3JpcHRvcl9pbml0aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8yZmVtcHR5XzJl
cHJvdG9fOwotCi1uYW1lc3BhY2UgewotCi1zdGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGludCBs
aW5lKSBHT09HTEVfQVRUUklCVVRFX0NPTEQ7Ci1zdGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGlu
dCBsaW5lKSB7Ci0gIEdPT0dMRV9DSEVDSyhmYWxzZSkgPDwgX19GSUxFX18gPDwgIjoiIDw8IGxp
bmU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZp
bmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0jZW5kaWYgIC8vICFkZWZpbmVkKF9N
U0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUVtcHR5OjpFbXB0eSgpCi0gIDogOjpnb29n
bGU6OnByb3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBT
aGFyZWRDdG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb25zdHJ1Y3Rvcjpn
b29nbGUucHJvdG9idWYuRW1wdHkpCi19Ci0KLUVtcHR5OjpFbXB0eSg6Omdvb2dsZTo6cHJvdG9i
dWY6OkFyZW5hKiBhcmVuYSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAg
X2ludGVybmFsX21ldGFkYXRhXyhhcmVuYSkgewotICBTaGFyZWRDdG9yKCk7Ci0gIFJlZ2lzdGVy
QXJlbmFEdG9yKGFyZW5hKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGFyZW5hX2Nv
bnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5FbXB0eSkKLX0KLQotdm9pZCBFbXB0eTo6SW5pdEFz
RGVmYXVsdEluc3RhbmNlKCkgewotICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSB0cnVlOwotfQot
Ci1FbXB0eTo6RW1wdHkoY29uc3QgRW1wdHkmIGZyb20pCi0gIDogOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0
b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Y29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRW1wdHkpCi19Ci0KLXZvaWQgRW1wdHk6
OlNoYXJlZEN0b3IoKSB7Ci0gICAgX2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gZmFsc2U7Ci0gIF9j
YWNoZWRfc2l6ZV8gPSAwOwotfQotCi1FbXB0eTo6fkVtcHR5KCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRW1wdHkpCi0gIFNoYXJl
ZER0b3IoKTsKLX0KLQotdm9pZCBFbXB0eTo6U2hhcmVkRHRvcigpIHsKLSAgaWYgKEdldEFyZW5h
Tm9WaXJ0dWFsKCkgIT0gTlVMTCkgewotICAgIHJldHVybjsKLSAgfQotCi0gIGlmICh0aGlzICE9
IGRlZmF1bHRfaW5zdGFuY2VfKSB7Ci0gIH0KLX0KLQotdm9pZCBFbXB0eTo6QXJlbmFEdG9yKHZv
aWQqIG9iamVjdCkgewotICBFbXB0eSogX3RoaXMgPSByZWludGVycHJldF9jYXN0PCBFbXB0eSog
PihvYmplY3QpOwotICAodm9pZClfdGhpczsKLX0KLXZvaWQgRW1wdHk6OlJlZ2lzdGVyQXJlbmFE
dG9yKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSB7Ci19Ci12b2lkIEVtcHR5OjpT
ZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9D
T05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogRW1wdHk6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0
b3JzT25jZSgpOwotICByZXR1cm4gRW1wdHlfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IEVtcHR5
JiBFbXB0eTo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09
IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZlbXB0eV8yZXByb3Rv
KCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLUVtcHR5KiBFbXB0eTo6ZGVm
YXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1FbXB0eSogRW1wdHk6Ok5ldyg6Omdvb2dsZTo6cHJv
dG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3QgewotICByZXR1cm4gOjpnb29nbGU6OnByb3RvYnVm
OjpBcmVuYTo6Q3JlYXRlTWVzc2FnZTxFbXB0eT4oYXJlbmEpOwotfQotCi12b2lkIEVtcHR5OjpD
bGVhcigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2NsZWFyX3N0YXJ0
Omdvb2dsZS5wcm90b2J1Zi5FbXB0eSkKLX0KLQotYm9vbCBFbXB0eTo6TWVyZ2VQYXJ0aWFsRnJv
bUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJl
YW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVESUNU
X1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVp
bnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpnb29n
bGUucHJvdG9idWYuRW1wdHkpCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29n
bGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYo
MTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxl
X3VudXN1YWw7Ci0gIGhhbmRsZV91bnVzdWFsOgotICAgIGlmICh0YWcgPT0gMCB8fAotICAgICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2ly
ZVR5cGUodGFnKSA9PQotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7Ci0gICAgICBnb3RvIHN1Y2Nlc3M7Ci0g
ICAgfQotICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6U2tpcEZpZWxkKGlucHV0LCB0YWcpKTsKLSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkVtcHR5KQotICBy
ZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJz
ZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5FbXB0eSkKLSAgcmV0dXJuIGZhbHNlOwotI3VuZGVm
IERPXwotfQotCi12b2lkIEVtcHR5OjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90
b2J1Zi5FbXB0eSkKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6
Z29vZ2xlLnByb3RvYnVmLkVtcHR5KQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBF
bXB0eTo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSgKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29nbGUucHJvdG9idWYuRW1wdHkpCi0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5w
cm90b2J1Zi5FbXB0eSkKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IEVtcHR5OjpCeXRlU2l6
ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6
ZV9zdGFydDpnb29nbGUucHJvdG9idWYuRW1wdHkpCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQot
ICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVf
ID0gdG90YWxfc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0g
IHJldHVybiB0b3RhbF9zaXplOwotfQotCi12b2lkIEVtcHR5OjpNZXJnZUZyb20oY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRW1wdHkp
Ci0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFp
bChfX0xJTkVfXyk7Ci0gIGNvbnN0IEVtcHR5KiBzb3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgRW1wdHk+KAot
ICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29nbGUu
cHJvdG9idWYuRW1wdHkpCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6UmVmbGVj
dGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpnb29nbGUu
cHJvdG9idWYuRW1wdHkpCi0gICAgTWVyZ2VGcm9tKCpzb3VyY2UpOwotICB9Ci19Ci0KLXZvaWQg
RW1wdHk6Ok1lcmdlRnJvbShjb25zdCBFbXB0eSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LkVtcHR5KQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdl
RnJvbUZhaWwoX19MSU5FX18pOwotfQotCi12b2lkIEVtcHR5OjpDb3B5RnJvbShjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVtcHR5KQot
ICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJv
bSk7Ci19Ci0KLXZvaWQgRW1wdHk6OkNvcHlGcm9tKGNvbnN0IEVtcHR5JiBmcm9tKSB7Ci0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5FbXB0eSkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xl
YXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi1ib29sIEVtcHR5OjpJc0luaXRpYWxpemVk
KCkgY29uc3QgewotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIEVtcHR5OjpTd2FwKEVtcHR5
KiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBpZiAoR2V0QXJlbmFO
b1ZpcnR1YWwoKSA9PSBvdGhlci0+R2V0QXJlbmFOb1ZpcnR1YWwoKSkgewotICAgIEludGVybmFs
U3dhcChvdGhlcik7Ci0gIH0gZWxzZSB7Ci0gICAgRW1wdHkgdGVtcDsKLSAgICB0ZW1wLk1lcmdl
RnJvbSgqdGhpcyk7Ci0gICAgQ29weUZyb20oKm90aGVyKTsKLSAgICBvdGhlci0+Q29weUZyb20o
dGVtcCk7Ci0gIH0KLX0KLXZvaWQgRW1wdHk6OlVuc2FmZUFyZW5hU3dhcChFbXB0eSogb3RoZXIp
IHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgR09PR0xFX0RDSEVDSyhHZXRBcmVu
YU5vVmlydHVhbCgpID09IG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKTsKLSAgSW50ZXJuYWxT
d2FwKG90aGVyKTsKLX0KLXZvaWQgRW1wdHk6OkludGVybmFsU3dhcChFbXB0eSogb3RoZXIpIHsK
LSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7
Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19Ci0K
LTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgRW1wdHk6OkdldE1ldGFkYXRhKCkgY29uc3Qg
ewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IEVtcHR5X2Rl
c2NyaXB0b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gRW1wdHlfcmVmbGVjdGlvbl87Ci0g
IHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVS
UwotLy8gRW1wdHkKLQotI2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMK
LQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8g
bmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvZW1wdHkucGIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wYi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjgwMDlmY2U0ZTUwNTBhOGQ0YzM5YTgyNGExNzI0MjI0
NDdhOTFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAg
QEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9U
IEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90bwotCi0jaWZuZGVm
IFBST1RPQlVGX2dvb2dsZV8yZnByb3RvYnVmXzJmZW1wdHlfMmVwcm90b19fSU5DTFVERUQKLSNk
ZWZpbmUgUFJPVE9CVUZfZ29vZ2xlXzJmcHJvdG9idWZfMmZlbXB0eV8yZXByb3RvX19JTkNMVURF
RAotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2NvbW1vbi5oPgotCi0jaWYgR09PR0xFX1BST1RPQlVGX1ZFUlNJT04gPCAzMDAwMDAwCi0jZXJy
b3IgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgYSBuZXdlciB2ZXJzaW9uIG9mIHByb3RvYyB3
aGljaCBpcwotI2Vycm9yIGluY29tcGF0aWJsZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhl
YWRlcnMuICBQbGVhc2UgdXBkYXRlCi0jZXJyb3IgeW91ciBoZWFkZXJzLgotI2VuZGlmCi0jaWYg
MzAwMDAwMCA8IEdPT0dMRV9QUk9UT0JVRl9NSU5fUFJPVE9DX1ZFUlNJT04KLSNlcnJvciBUaGlz
IGZpbGUgd2FzIGdlbmVyYXRlZCBieSBhbiBvbGRlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBp
cwotI2Vycm9yIGluY29tcGF0aWJsZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMu
ICBQbGVhc2UKLSNlcnJvciByZWdlbmVyYXRlIHRoaXMgZmlsZSB3aXRoIGEgbmV3ZXIgdmVyc2lv
biBvZiBwcm90b2MuCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL21ldGFkYXRhLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2Uu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi91bmtub3duX2ZpZWxkX3NldC5oPgotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGlu
Y2x1ZGVzKQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLS8v
IEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCAtLSBkbyBub3QgY2FsbCB0aGVzZS4KLXZv
aWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZf
MmZlbXB0eV8yZXByb3RvKCk7Ci12b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJv
dG9idWZfMmZlbXB0eV8yZXByb3RvKCk7Ci12b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29n
bGVfMmZwcm90b2J1Zl8yZmVtcHR5XzJlcHJvdG8oKTsKLQotY2xhc3MgRW1wdHk7Ci0KLS8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIEVtcHR5IDogcHVibGljIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgotICBFbXB0eSgpOwotICB2aXJ0dWFs
IH5FbXB0eSgpOwotCi0gIEVtcHR5KGNvbnN0IEVtcHR5JiBmcm9tKTsKLQotICBpbmxpbmUgRW1w
dHkmIG9wZXJhdG9yPShjb25zdCBFbXB0eSYgZnJvbSkgewotICAgIENvcHlGcm9tKGZyb20pOwot
ICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFy
ZW5hKiBHZXRBcmVuYSgpIGNvbnN0IHsgcmV0dXJuIEdldEFyZW5hTm9WaXJ0dWFsKCk7IH0KLSAg
aW5saW5lIHZvaWQqIEdldE1heWJlQXJlbmFQb2ludGVyKCkgY29uc3QgewotICAgIHJldHVybiBN
YXliZUFyZW5hUHRyKCk7Ci0gIH0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgRW1wdHkmIGRlZmF1bHRf
aW5zdGFuY2UoKTsKLQotICB2b2lkIFVuc2FmZUFyZW5hU3dhcChFbXB0eSogb3RoZXIpOwotICB2
b2lkIFN3YXAoRW1wdHkqIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBFbXB0
eSogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgRW1wdHkqIE5ldyg6Omdv
b2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20o
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJv
bShjb25zdCBFbXB0eSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IEVtcHR5JiBmcm9t
KTsKLSAgdm9pZCBDbGVhcigpOwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBp
bnQgQnl0ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0o
Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7
Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6
OnByb3RvYnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBj
b25zdCB7IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVk
Q3RvcigpOwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBz
aXplKSBjb25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoRW1wdHkqIG90aGVyKTsKLSAgcHJvdGVj
dGVkOgotICBleHBsaWNpdCBFbXB0eSg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSk7
Ci0gIHByaXZhdGU6Ci0gIHN0YXRpYyB2b2lkIEFyZW5hRHRvcih2b2lkKiBvYmplY3QpOwotICBp
bmxpbmUgdm9pZCBSZWdpc3RlckFyZW5hRHRvcig6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBh
cmVuYSk7Ci0gIHByaXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBH
ZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRh
Xy5hcmVuYSgpOwotICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkgY29uc3Qgewot
ICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsKLSAgfQotICBw
dWJsaWM6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRhZGF0YSgpIGNv
bnN0OwotCi0gIC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLkVtcHR5KQotIHByaXZh
dGU6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdp
dGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnBy
b3RvYnVmOjpBcmVuYTsKLSAgdHlwZWRlZiB2b2lkIEludGVybmFsQXJlbmFDb25zdHJ1Y3RhYmxl
XzsKLSAgdHlwZWRlZiB2b2lkIERlc3RydWN0b3JTa2lwcGFibGVfOwotICBib29sIF9pc19kZWZh
dWx0X2luc3RhbmNlXzsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgZnJpZW5kIHZv
aWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZf
MmZlbXB0eV8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29v
Z2xlXzJmcHJvdG9idWZfMmZlbXB0eV8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVm
X1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmVtcHR5XzJlcHJvdG8oKTsKLQotICB2
b2lkIEluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBzdGF0aWMgRW1wdHkqIGRlZmF1bHRfaW5z
dGFuY2VfOwotfTsKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhUFJP
VE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0vLyBFbXB0eQotCi0jZW5kaWYgIC8vICFQUk9U
T0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUp
Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfZ29vZ2xlXzJmcHJvdG9idWZfMmZlbXB0eV8yZXByb3Rv
X19JTkNMVURFRApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzN2Y0Y2QxMGVlZTU3YWMzNGM5ZmM1YWU0NjdjOTRjN2E1MjYzMmRmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9l
bXB0eS5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBnb29n
bGUucHJvdG9idWY7Ci0KLW9wdGlvbiBjc2hhcnBfbmFtZXNwYWNlID0gIkdvb2dsZS5Qcm90b2J1
Zi5XZWxsS25vd25UeXBlcyI7Ci1vcHRpb24gZ29fcGFja2FnZSA9ICJnaXRodWIuY29tL2dvbGFu
Zy9wcm90b2J1Zi9wdHlwZXMvZW1wdHkiOwotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZ29v
Z2xlLnByb3RvYnVmIjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJFbXB0eVByb3Rv
IjsKLW9wdGlvbiBqYXZhX211bHRpcGxlX2ZpbGVzID0gdHJ1ZTsKLW9wdGlvbiBqYXZhX2dlbmVy
YXRlX2VxdWFsc19hbmRfaGFzaCA9IHRydWU7Ci1vcHRpb24gb2JqY19jbGFzc19wcmVmaXggPSAi
R1BCIjsKLW9wdGlvbiBjY19lbmFibGVfYXJlbmFzID0gdHJ1ZTsKLQotLy8gQSBnZW5lcmljIGVt
cHR5IG1lc3NhZ2UgdGhhdCB5b3UgY2FuIHJlLXVzZSB0byBhdm9pZCBkZWZpbmluZyBkdXBsaWNh
dGVkCi0vLyBlbXB0eSBtZXNzYWdlcyBpbiB5b3VyIEFQSXMuIEEgdHlwaWNhbCBleGFtcGxlIGlz
IHRvIHVzZSBpdCBhcyB0aGUgcmVxdWVzdAotLy8gb3IgdGhlIHJlc3BvbnNlIHR5cGUgb2YgYW4g
QVBJIG1ldGhvZC4gRm9yIGluc3RhbmNlOgotLy8KLS8vICAgICBzZXJ2aWNlIEZvbyB7Ci0vLyAg
ICAgICBycGMgQmFyKGdvb2dsZS5wcm90b2J1Zi5FbXB0eSkgcmV0dXJucyAoZ29vZ2xlLnByb3Rv
YnVmLkVtcHR5KTsKLS8vICAgICB9Ci0vLwotLy8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9y
IGBFbXB0eWAgaXMgZW1wdHkgSlNPTiBvYmplY3QgYHt9YC4KLW1lc3NhZ2UgRW1wdHkge30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0LmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2V4dGVuc2lvbl9zZXQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDlhZmIyMzYxNDdjMGNmZDYwYzRkNjBiNWQzYmQ1NWE4MzMwNTIxNjEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2V4dGVu
c2lvbl9zZXQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxODE1ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChL
ZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNp
Z24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9v
bmNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2V4dGVuc2lvbl9zZXQuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZV9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJl
X2Zvcm1hdF9saXRlX2lubC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9m
aWVsZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXBfdXRpbC5oPgotCi1u
YW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJu
YWwgewotCi1uYW1lc3BhY2UgewotCi1pbmxpbmUgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBy
ZWFsX3R5cGUoRmllbGRUeXBlIHR5cGUpIHsKLSAgR09PR0xFX0RDSEVDSyh0eXBlID4gMCAmJiB0
eXBlIDw9IFdpcmVGb3JtYXRMaXRlOjpNQVhfRklFTERfVFlQRSk7Ci0gIHJldHVybiBzdGF0aWNf
Y2FzdDxXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlPih0eXBlKTsKLX0KLQotaW5saW5lIFdpcmVG
b3JtYXRMaXRlOjpDcHBUeXBlIGNwcF90eXBlKEZpZWxkVHlwZSB0eXBlKSB7Ci0gIHJldHVybiBX
aXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlVG9DcHBUeXBlKHJlYWxfdHlwZSh0eXBlKSk7Ci19Ci0K
LWlubGluZSBib29sIGlzX3BhY2thYmxlKFdpcmVGb3JtYXRMaXRlOjpXaXJlVHlwZSB0eXBlKSB7
Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX1ZB
UklOVDoKLSAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9GSVhFRDY0OgotICAgIGNh
c2UgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0ZJWEVEMzI6Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEOgotICAg
IGNhc2UgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX1NUQVJUX0dST1VQOgotICAgIGNhc2UgV2ly
ZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUDoKLSAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIERvIG5vdCBhZGQgYSBkZWZhdWx0IHN0YXRlbWVudC4gTGV0IHRoZSBjb21waWxlciBj
b21wbGFpbiB3aGVuIHNvbWVvbmUKLSAgICAvLyBhZGRzIGEgbmV3IHdpcmUgdHlwZS4KLSAgfQot
ICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiY2FuJ3QgcmVhY2ggaGVyZS4iOwotICByZXR1cm4gZmFs
c2U7Ci19Ci0KLS8vIFJlZ2lzdHJ5IHN0dWZmLgotdHlwZWRlZiBoYXNoX21hcDxwYWlyPGNvbnN0
IE1lc3NhZ2VMaXRlKiwgaW50PiwKLSAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uSW5mbz4gRXh0
ZW5zaW9uUmVnaXN0cnk7Ci1FeHRlbnNpb25SZWdpc3RyeSogcmVnaXN0cnlfID0gTlVMTDsKLUdP
T0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0UocmVnaXN0cnlfaW5pdF8pOwotCi12b2lkIERlbGV0
ZVJlZ2lzdHJ5KCkgewotICBkZWxldGUgcmVnaXN0cnlfOwotICByZWdpc3RyeV8gPSBOVUxMOwot
fQotCi12b2lkIEluaXRSZWdpc3RyeSgpIHsKLSAgcmVnaXN0cnlfID0gbmV3IEV4dGVuc2lvblJl
Z2lzdHJ5OwotICBPblNodXRkb3duKCZEZWxldGVSZWdpc3RyeSk7Ci19Ci0KLS8vIFRoaXMgZnVu
Y3Rpb24gaXMgb25seSBjYWxsZWQgYXQgc3RhcnR1cCwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3Ig
dGhyZWFkLQotLy8gc2FmZXR5Lgotdm9pZCBSZWdpc3Rlcihjb25zdCBNZXNzYWdlTGl0ZSogY29u
dGFpbmluZ190eXBlLAotICAgICAgICAgICAgICBpbnQgbnVtYmVyLCBFeHRlbnNpb25JbmZvIGlu
Zm8pIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpHb29nbGVPbmNlSW5pdCgmcmVnaXN0cnlfaW5p
dF8sICZJbml0UmVnaXN0cnkpOwotCi0gIGlmICghSW5zZXJ0SWZOb3RQcmVzZW50KHJlZ2lzdHJ5
Xywgc3RkOjptYWtlX3BhaXIoY29udGFpbmluZ190eXBlLCBudW1iZXIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmZvKSkgewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJNdWx0aXBs
ZSBleHRlbnNpb24gcmVnaXN0cmF0aW9ucyBmb3IgdHlwZSBcIiIKLSAgICAgICAgICAgICAgIDw8
IGNvbnRhaW5pbmdfdHlwZS0+R2V0VHlwZU5hbWUoKQotICAgICAgICAgICAgICAgPDwgIlwiLCBm
aWVsZCBudW1iZXIgIiA8PCBudW1iZXIgPDwgIi4iOwotICB9Ci19Ci0KLWNvbnN0IEV4dGVuc2lv
bkluZm8qIEZpbmRSZWdpc3RlcmVkRXh0ZW5zaW9uKAotICAgIGNvbnN0IE1lc3NhZ2VMaXRlKiBj
b250YWluaW5nX3R5cGUsIGludCBudW1iZXIpIHsKLSAgcmV0dXJuIChyZWdpc3RyeV8gPT0gTlVM
TCkKLSAgICAgICAgICAgICA/IE5VTEwKLSAgICAgICAgICAgICA6IEZpbmRPck51bGwoKnJlZ2lz
dHJ5Xywgc3RkOjptYWtlX3BhaXIoY29udGFpbmluZ190eXBlLCBudW1iZXIpKTsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlCi0KLUV4dGVuc2lvbkZpbmRlcjo6fkV4dGVuc2lvbkZpbmRlcigpIHt9Ci0K
LWJvb2wgR2VuZXJhdGVkRXh0ZW5zaW9uRmluZGVyOjpGaW5kKGludCBudW1iZXIsIEV4dGVuc2lv
bkluZm8qIG91dHB1dCkgewotICBjb25zdCBFeHRlbnNpb25JbmZvKiBleHRlbnNpb24gPQotICAg
ICAgRmluZFJlZ2lzdGVyZWRFeHRlbnNpb24oY29udGFpbmluZ190eXBlXywgbnVtYmVyKTsKLSAg
aWYgKGV4dGVuc2lvbiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2Ugewot
ICAgICpvdXRwdXQgPSAqZXh0ZW5zaW9uOwotICAgIHJldHVybiB0cnVlOwotICB9Ci19Ci0KLXZv
aWQgRXh0ZW5zaW9uU2V0OjpSZWdpc3RlckV4dGVuc2lvbihjb25zdCBNZXNzYWdlTGl0ZSogY29u
dGFpbmluZ190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBu
dW1iZXIsIEZpZWxkVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNfcmVwZWF0ZWQsIGJvb2wgaXNfcGFja2VkKSB7Ci0gIEdPT0dMRV9DSEVDS19O
RSh0eXBlLCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9FTlVNKTsKLSAgR09PR0xFX0NIRUNLX05FKHR5
cGUsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX01FU1NBR0UpOwotICBHT09HTEVfQ0hFQ0tfTkUodHlw
ZSwgV2lyZUZvcm1hdExpdGU6OlRZUEVfR1JPVVApOwotICBFeHRlbnNpb25JbmZvIGluZm8odHlw
ZSwgaXNfcmVwZWF0ZWQsIGlzX3BhY2tlZCk7Ci0gIFJlZ2lzdGVyKGNvbnRhaW5pbmdfdHlwZSwg
bnVtYmVyLCBpbmZvKTsKLX0KLQotc3RhdGljIGJvb2wgQ2FsbE5vQXJnVmFsaWRpdHlGdW5jKGNv
bnN0IHZvaWQqIGFyZywgaW50IG51bWJlcikgewotICAvLyBOb3RlOiAgTXVzdCB1c2UgQy1zdHls
ZSBjYXN0IGhlcmUgcmF0aGVyIHRoYW4gcmVpbnRlcnByZXRfY2FzdCBiZWNhdXNlCi0gIC8vICAg
dGhlIEMrKyBzdGFuZGFyZCBhdCBvbmUgcG9pbnQgZGlkIG5vdCBhbGxvdyBjYXN0cyBiZXR3ZWVu
IGZ1bmN0aW9uIGFuZAotICAvLyAgIGRhdGEgcG9pbnRlcnMgYW5kIHNvbWUgY29tcGlsZXJzIGVu
Zm9yY2UgdGhpcyBmb3IgQysrLXN0eWxlIGNhc3RzLiAgTm8KLSAgLy8gICBjb21waWxlciBlbmZv
cmNlcyBpdCBmb3IgQy1zdHlsZSBjYXN0cyBzaW5jZSBsb3RzIG9mIEMtc3R5bGUgY29kZSBoYXMK
LSAgLy8gICByZWxpZWQgb24gdGhlc2Uga2luZHMgb2YgY2FzdHMgZm9yIGEgbG9uZyB0aW1lLCBk
ZXNwaXRlIGJlaW5nCi0gIC8vICAgdGVjaG5pY2FsbHkgdW5kZWZpbmVkLiAgU2VlOgotICAvLyAg
ICAgaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9jd2dfZGVmZWN0
cy5odG1sIzE5NQotICAvLyBBbHNvIG5vdGU6ICBTb21lIGNvbXBpbGVycyBkbyBub3QgYWxsb3cg
ZnVuY3Rpb24gcG9pbnRlcnMgdG8gYmUgImNvbnN0Ii4KLSAgLy8gICBXaGljaCBtYWtlcyBzZW5z
ZSwgSSBzdXBwb3NlLCBiZWNhdXNlIGl0J3MgbWVhbmluZ2xlc3MuCi0gIHJldHVybiAoKEVudW1W
YWxpZGl0eUZ1bmMqKWFyZykobnVtYmVyKTsKLX0KLQotdm9pZCBFeHRlbnNpb25TZXQ6OlJlZ2lz
dGVyRW51bUV4dGVuc2lvbihjb25zdCBNZXNzYWdlTGl0ZSogY29udGFpbmluZ190eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyLCBGaWVsZFR5
cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c19yZXBlYXRlZCwgYm9vbCBpc19wYWNrZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVudW1WYWxpZGl0eUZ1bmMqIGlzX3ZhbGlkKSB7Ci0gIEdPT0dMRV9DSEVD
S19FUSh0eXBlLCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9FTlVNKTsKLSAgRXh0ZW5zaW9uSW5mbyBp
bmZvKHR5cGUsIGlzX3JlcGVhdGVkLCBpc19wYWNrZWQpOwotICBpbmZvLmVudW1fdmFsaWRpdHlf
Y2hlY2suZnVuYyA9IENhbGxOb0FyZ1ZhbGlkaXR5RnVuYzsKLSAgLy8gU2VlIGNvbW1lbnQgaW4g
Q2FsbE5vQXJnVmFsaWRpdHlGdW5jKCkgYWJvdXQgd2h5IHdlIHVzZSBhIGMtc3R5bGUgY2FzdC4K
LSAgaW5mby5lbnVtX3ZhbGlkaXR5X2NoZWNrLmFyZyA9ICh2b2lkKilpc192YWxpZDsKLSAgUmVn
aXN0ZXIoY29udGFpbmluZ190eXBlLCBudW1iZXIsIGluZm8pOwotfQotCi12b2lkIEV4dGVuc2lv
blNldDo6UmVnaXN0ZXJNZXNzYWdlRXh0ZW5zaW9uKGNvbnN0IE1lc3NhZ2VMaXRlKiBjb250YWlu
aW5nX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzX3JlcGVhdGVkLCBib29sIGlzX3BhY2tlZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZUxpdGUqIHBy
b3RvdHlwZSkgewotICBHT09HTEVfQ0hFQ0sodHlwZSA9PSBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9N
RVNTQUdFIHx8Ci0gICAgICAgIHR5cGUgPT0gV2lyZUZvcm1hdExpdGU6OlRZUEVfR1JPVVApOwot
ICBFeHRlbnNpb25JbmZvIGluZm8odHlwZSwgaXNfcmVwZWF0ZWQsIGlzX3BhY2tlZCk7Ci0gIGlu
Zm8ubWVzc2FnZV9wcm90b3R5cGUgPSBwcm90b3R5cGU7Ci0gIFJlZ2lzdGVyKGNvbnRhaW5pbmdf
dHlwZSwgbnVtYmVyLCBpbmZvKTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBDb25zdHJ1Y3Rv
cnMgYW5kIGJhc2ljIG1ldGhvZHMuCi0KLUV4dGVuc2lvblNldDo6RXh0ZW5zaW9uU2V0KDo6Z29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSA6IGFyZW5hXyhhcmVuYSkgewotICBpZiAoYXJl
bmFfICE9IE5VTEwpIHsKLSAgICBhcmVuYV8tPk93bkRlc3RydWN0b3IoJmV4dGVuc2lvbnNfKTsK
LSAgfQotfQotCi1FeHRlbnNpb25TZXQ6OkV4dGVuc2lvblNldCgpIDogYXJlbmFfKE5VTEwpIHt9
Ci0KLUV4dGVuc2lvblNldDo6fkV4dGVuc2lvblNldCgpIHsKLSAgLy8gRGVsZXRlcyBhbGwgYWxs
b2NhdGVkIGV4dGVuc2lvbnMuCi0gIGlmIChhcmVuYV8gPT0gTlVMTCkgewotICAgIGZvciAobWFw
PGludCwgRXh0ZW5zaW9uPjo6aXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbnNfLmJlZ2luKCk7Ci0g
ICAgICAgICBpdGVyICE9IGV4dGVuc2lvbnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgIGl0ZXIt
PnNlY29uZC5GcmVlKCk7Ci0gICAgfQotICB9Ci19Ci0KLS8vIERlZmluZWQgaW4gZXh0ZW5zaW9u
X3NldF9oZWF2eS5jYy4KLS8vIHZvaWQgRXh0ZW5zaW9uU2V0OjpBcHBlbmRUb0xpc3QoY29uc3Qg
RGVzY3JpcHRvciogY29udGFpbmluZ190eXBlLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbCwKLS8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+KiBvdXRwdXQpIGNv
bnN0Ci0KLWJvb2wgRXh0ZW5zaW9uU2V0OjpIYXMoaW50IG51bWJlcikgY29uc3QgewotICBtYXA8
aW50LCBFeHRlbnNpb24+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uc18uZmluZChu
dW1iZXIpOwotICBpZiAoaXRlciA9PSBleHRlbnNpb25zXy5lbmQoKSkgcmV0dXJuIGZhbHNlOwot
ICBHT09HTEVfRENIRUNLKCFpdGVyLT5zZWNvbmQuaXNfcmVwZWF0ZWQpOwotICByZXR1cm4gIWl0
ZXItPnNlY29uZC5pc19jbGVhcmVkOwotfQotCi1pbnQgRXh0ZW5zaW9uU2V0OjpOdW1FeHRlbnNp
b25zKCkgY29uc3QgewotICBpbnQgcmVzdWx0ID0gMDsKLSAgZm9yIChtYXA8aW50LCBFeHRlbnNp
b24+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uc18uYmVnaW4oKTsKLSAgICAgICBp
dGVyICE9IGV4dGVuc2lvbnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICBpZiAoIWl0ZXItPnNlY29u
ZC5pc19jbGVhcmVkKSB7Ci0gICAgICArK3Jlc3VsdDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotaW50IEV4dGVuc2lvblNldDo6RXh0ZW5zaW9uU2l6ZShpbnQgbnVtYmVyKSBj
b25zdCB7Ci0gIG1hcDxpbnQsIEV4dGVuc2lvbj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRl
bnNpb25zXy5maW5kKG51bWJlcik7Ci0gIGlmIChpdGVyID09IGV4dGVuc2lvbnNfLmVuZCgpKSBy
ZXR1cm4gZmFsc2U7Ci0gIHJldHVybiBpdGVyLT5zZWNvbmQuR2V0U2l6ZSgpOwotfQotCi1GaWVs
ZFR5cGUgRXh0ZW5zaW9uU2V0OjpFeHRlbnNpb25UeXBlKGludCBudW1iZXIpIGNvbnN0IHsKLSAg
bWFwPGludCwgRXh0ZW5zaW9uPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbnNfLmZp
bmQobnVtYmVyKTsKLSAgaWYgKGl0ZXIgPT0gZXh0ZW5zaW9uc18uZW5kKCkpIHsKLSAgICBHT09H
TEVfTE9HKERGQVRBTCkgPDwgIkRvbid0IGxvb2t1cCBleHRlbnNpb24gdHlwZXMgaWYgdGhleSBh
cmVuJ3QgcHJlc2VudCAoMSkuICI7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKGl0ZXItPnNl
Y29uZC5pc19jbGVhcmVkKSB7Ci0gICAgR09PR0xFX0xPRyhERkFUQUwpIDw8ICJEb24ndCBsb29r
dXAgZXh0ZW5zaW9uIHR5cGVzIGlmIHRoZXkgYXJlbid0IHByZXNlbnQgKDIpLiAiOwotICB9Ci0g
IHJldHVybiBpdGVyLT5zZWNvbmQudHlwZTsKLX0KLQotdm9pZCBFeHRlbnNpb25TZXQ6OkNsZWFy
RXh0ZW5zaW9uKGludCBudW1iZXIpIHsKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6aXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbnNfLmZpbmQobnVtYmVyKTsKLSAgaWYgKGl0ZXIgPT0gZXh0ZW5zaW9u
c18uZW5kKCkpIHJldHVybjsKLSAgaXRlci0+c2Vjb25kLkNsZWFyKCk7Ci19Ci0KLS8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS8vIEZpZWxkIGFjY2Vzc29ycwotCi1uYW1lc3BhY2UgewotCi1lbnVtIENhcmRpbmFs
aXR5IHsKLSAgUkVQRUFURUQsCi0gIE9QVElPTkFMCi19OwotCi19ICAvLyBuYW1lc3BhY2UKLQot
I2RlZmluZSBHT09HTEVfRENIRUNLX1RZUEUoRVhURU5TSU9OLCBMQUJFTCwgQ1BQVFlQRSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR09PR0xFX0RDSEVDS19FUSgoRVhURU5TSU9O
KS5pc19yZXBlYXRlZCA/IFJFUEVBVEVEIDogT1BUSU9OQUwsIExBQkVMKTsgICAgICAgICBcCi0g
IEdPT0dMRV9EQ0hFQ0tfRVEoY3BwX3R5cGUoKEVYVEVOU0lPTikudHlwZSksIFdpcmVGb3JtYXRM
aXRlOjpDUFBUWVBFXyMjQ1BQVFlQRSkKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUHJpbWl0aXZlcwot
Ci0jZGVmaW5lIFBSSU1JVElWRV9BQ0NFU1NPUlMoVVBQRVJDQVNFLCBMT1dFUkNBU0UsIENBTUVM
Q0FTRSkgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUxPV0VS
Q0FTRSBFeHRlbnNpb25TZXQ6OkdldCMjQ0FNRUxDQVNFKGludCBudW1iZXIsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMT1dFUkNBU0UgZGVmYXVsdF92YWx1ZSkgY29uc3QgeyAgICAgICAgXAotICBtYXA8aW50LCBF
eHRlbnNpb24+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uc18uZmluZChudW1iZXIp
OyAgICAgICAgIFwKLSAgaWYgKGl0ZXIgPT0gZXh0ZW5zaW9uc18uZW5kKCkgfHwgaXRlci0+c2Vj
b25kLmlzX2NsZWFyZWQpIHsgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIGRlZmF1bHRf
dmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHT09HTEVfRENIRUNLX1RZUEUoaXRl
ci0+c2Vjb25kLCBPUFRJT05BTCwgVVBQRVJDQVNFKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHJldHVybiBpdGVyLT5zZWNvbmQuTE9XRVJDQVNFIyNfdmFsdWU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgRXh0
ZW5zaW9uU2V0OjpTZXQjI0NBTUVMQ0FTRShpbnQgbnVtYmVyLCBGaWVsZFR5cGUgdHlwZSwgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9XRVJD
QVNFIHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcikgeyAg
ICAgICAgIFwKLSAgRXh0ZW5zaW9uKiBleHRlbnNpb247ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChNYXliZU5ld0V4dGVuc2lv
bihudW1iZXIsIGRlc2NyaXB0b3IsICZleHRlbnNpb24pKSB7ICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGV4dGVuc2lvbi0+dHlwZSA9IHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHT09HTEVfRENIRUNLX0VRKGNwcF90eXBl
KGV4dGVuc2lvbi0+dHlwZSksIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFXyMjVVBQRVJDQVNFKTsg
XAotICAgIGV4dGVuc2lvbi0+aXNfcmVwZWF0ZWQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
R09PR0xFX0RDSEVDS19UWVBFKCpleHRlbnNpb24sIE9QVElPTkFMLCBVUFBFUkNBU0UpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGV4
dGVuc2lvbi0+aXNfY2xlYXJlZCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBleHRlbnNpb24tPkxPV0VSQ0FTRSMjX3ZhbHVlID0gdmFs
dWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotTE9XRVJDQVNFIEV4dGVuc2lv
blNldDo6R2V0UmVwZWF0ZWQjI0NBTUVMQ0FTRShpbnQgbnVtYmVyLCBpbnQgaW5kZXgpIGNvbnN0
IHsgIFwKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVu
c2lvbnNfLmZpbmQobnVtYmVyKTsgICAgICAgICBcCi0gIEdPT0dMRV9DSEVDSyhpdGVyICE9IGV4
dGVuc2lvbnNfLmVuZCgpKSA8PCAiSW5kZXggb3V0LW9mLWJvdW5kcyAoZmllbGQgaXMgZW1wdHkp
LiI7IFwKLSAgR09PR0xFX0RDSEVDS19UWVBFKGl0ZXItPnNlY29uZCwgUkVQRUFURUQsIFVQUEVS
Q0FTRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gaXRlci0+c2Vj
b25kLnJlcGVhdGVkXyMjTE9XRVJDQVNFIyNfdmFsdWUtPkdldChpbmRleCk7ICAgICAgICAgICAg
ICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
dm9pZCBFeHRlbnNpb25TZXQ6OlNldFJlcGVhdGVkIyNDQU1FTENBU0UoICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpbnQgbnVtYmVyLCBpbnQgaW5kZXgsIExPV0VS
Q0FTRSB2YWx1ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG1hcDxp
bnQsIEV4dGVuc2lvbj46Oml0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25zXy5maW5kKG51bWJlcik7
ICAgICAgICAgICAgICAgXAotICBHT09HTEVfQ0hFQ0soaXRlciAhPSBleHRlbnNpb25zXy5lbmQo
KSkgPDwgIkluZGV4IG91dC1vZi1ib3VuZHMgKGZpZWxkIGlzIGVtcHR5KS4iOyBcCi0gIEdPT0dM
RV9EQ0hFQ0tfVFlQRShpdGVyLT5zZWNvbmQsIFJFUEVBVEVELCBVUFBFUkNBU0UpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaXRlci0+c2Vjb25kLnJlcGVhdGVkXyMjTE9XRVJD
QVNFIyNfdmFsdWUtPlNldChpbmRleCwgdmFsdWUpOyAgICAgICAgICAgICAgICBcCi19ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgRXh0ZW5zaW9u
U2V0OjpBZGQjI0NBTUVMQ0FTRShpbnQgbnVtYmVyLCBGaWVsZFR5cGUgdHlwZSwgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWQs
IExPV0VSQ0FTRSB2YWx1ZSwgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcikgeyAgICAgICAg
IFwKLSAgRXh0ZW5zaW9uKiBleHRlbnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChNYXliZU5ld0V4dGVuc2lvbihudW1i
ZXIsIGRlc2NyaXB0b3IsICZleHRlbnNpb24pKSB7ICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGV4dGVuc2lvbi0+dHlwZSA9IHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBHT09HTEVfRENIRUNLX0VRKGNwcF90eXBlKGV4dGVu
c2lvbi0+dHlwZSksIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFXyMjVVBQRVJDQVNFKTsgXAotICAg
IGV4dGVuc2lvbi0+aXNfcmVwZWF0ZWQgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBleHRlbnNpb24tPmlzX3BhY2tlZCA9IHBhY2tlZDsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZXh0ZW5z
aW9uLT5yZXBlYXRlZF8jI0xPV0VSQ0FTRSMjX3ZhbHVlID0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8UmVwZWF0ZWRGaWVsZDxM
T1dFUkNBU0U+ID4oYXJlbmFfKTsgICAgICAgICAgICAgICAgIFwKLSAgfSBlbHNlIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgR09PR0xFX0RDSEVDS19UWVBFKCpleHRlbnNpb24sIFJFUEVBVEVELCBVUFBF
UkNBU0UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHT09HTEVfRENIRUNL
X0VRKGV4dGVuc2lvbi0+aXNfcGFja2VkLCBwYWNrZWQpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZXh0ZW5zaW9uLT5yZXBl
YXRlZF8jI0xPV0VSQ0FTRSMjX3ZhbHVlLT5BZGQodmFsdWUpOyAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi19Ci0KLVBSSU1JVElWRV9BQ0NFU1NPUlMoIElOVDMyLCAgaW50MzIsICBJbnQzMikK
LVBSSU1JVElWRV9BQ0NFU1NPUlMoIElOVDY0LCAgaW50NjQsICBJbnQ2NCkKLVBSSU1JVElWRV9B
Q0NFU1NPUlMoVUlOVDMyLCB1aW50MzIsIFVJbnQzMikKLVBSSU1JVElWRV9BQ0NFU1NPUlMoVUlO
VDY0LCB1aW50NjQsIFVJbnQ2NCkKLVBSSU1JVElWRV9BQ0NFU1NPUlMoIEZMT0FULCAgZmxvYXQs
ICBGbG9hdCkKLVBSSU1JVElWRV9BQ0NFU1NPUlMoRE9VQkxFLCBkb3VibGUsIERvdWJsZSkKLVBS
SU1JVElWRV9BQ0NFU1NPUlMoICBCT09MLCAgIGJvb2wsICAgQm9vbCkKLQotI3VuZGVmIFBSSU1J
VElWRV9BQ0NFU1NPUlMKLQotY29uc3Qgdm9pZCogRXh0ZW5zaW9uU2V0OjpHZXRSYXdSZXBlYXRl
ZEZpZWxkKGludCBudW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCogZGVmYXVsdF92YWx1ZSkgY29uc3QgewotICBtYXA8aW50LCBF
eHRlbnNpb24+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uc18uZmluZChudW1iZXIp
OwotICBpZiAoaXRlciA9PSBleHRlbnNpb25zXy5lbmQoKSkgewotICAgIHJldHVybiBkZWZhdWx0
X3ZhbHVlOwotICB9Ci0gIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCB0aGUgUmVwZWF0ZWRGaWVsZDw+
KiBwb2ludGVycyBoYXZlIHRoZSBzYW1lCi0gIC8vIHNpemUgYW5kIGFsaWdubWVudCB3aXRoaW4g
dGhlIGFub255bW91cyB1bmlvbiBpbiBFeHRlbnNpb24uCi0gIHJldHVybiBpdGVyLT5zZWNvbmQu
cmVwZWF0ZWRfaW50MzJfdmFsdWU7Ci19Ci0KLXZvaWQqIEV4dGVuc2lvblNldDo6TXV0YWJsZVJh
d1JlcGVhdGVkRmllbGQoaW50IG51bWJlciwgRmllbGRUeXBlIGZpZWxkX3R5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGRlc2MpIHsKLSAgRXh0ZW5zaW9uKiBleHRlbnNpb247Ci0KLSAgLy8gV2UgaW5zdGFudGlh
dGUgYW4gZW1wdHkgUmVwZWF0ZWR7LFB0cn1GaWVsZCBpZiBvbmUgZG9lc24ndCBleGlzdCBmb3Ig
dGhpcwotICAvLyBleHRlbnNpb24uCi0gIGlmIChNYXliZU5ld0V4dGVuc2lvbihudW1iZXIsIGRl
c2MsICZleHRlbnNpb24pKSB7Ci0gICAgZXh0ZW5zaW9uLT5pc19yZXBlYXRlZCA9IHRydWU7Ci0g
ICAgZXh0ZW5zaW9uLT50eXBlID0gZmllbGRfdHlwZTsKLSAgICBleHRlbnNpb24tPmlzX3BhY2tl
ZCA9IHBhY2tlZDsKLQotICAgIHN3aXRjaCAoV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZVRvQ3Bw
VHlwZSgKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZT4oZmll
bGRfdHlwZSkpKSB7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0lOVDMyOgot
ICAgICAgICBleHRlbnNpb24tPnJlcGVhdGVkX2ludDMyX3ZhbHVlID0KLSAgICAgICAgICAgIEFy
ZW5hOjpDcmVhdGVNZXNzYWdlPFJlcGVhdGVkRmllbGQ8aW50MzI+ID4oYXJlbmFfKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0lOVDY0OgotICAg
ICAgICBleHRlbnNpb24tPnJlcGVhdGVkX2ludDY0X3ZhbHVlID0KLSAgICAgICAgICAgIEFyZW5h
OjpDcmVhdGVNZXNzYWdlPFJlcGVhdGVkRmllbGQ8aW50NjQ+ID4oYXJlbmFfKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX1VJTlQzMjoKLSAgICAg
ICAgZXh0ZW5zaW9uLT5yZXBlYXRlZF91aW50MzJfdmFsdWUgPQotICAgICAgICAgICAgQXJlbmE6
OkNyZWF0ZU1lc3NhZ2U8UmVwZWF0ZWRGaWVsZDx1aW50MzI+ID4oYXJlbmFfKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX1VJTlQ2NDoKLSAgICAg
ICAgZXh0ZW5zaW9uLT5yZXBlYXRlZF91aW50NjRfdmFsdWUgPQotICAgICAgICAgICAgQXJlbmE6
OkNyZWF0ZU1lc3NhZ2U8UmVwZWF0ZWRGaWVsZDx1aW50NjQ+ID4oYXJlbmFfKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0RPVUJMRToKLSAgICAg
ICAgZXh0ZW5zaW9uLT5yZXBlYXRlZF9kb3VibGVfdmFsdWUgPQotICAgICAgICAgICAgQXJlbmE6
OkNyZWF0ZU1lc3NhZ2U8UmVwZWF0ZWRGaWVsZDxkb3VibGU+ID4oYXJlbmFfKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0ZMT0FUOgotICAgICAg
ICBleHRlbnNpb24tPnJlcGVhdGVkX2Zsb2F0X3ZhbHVlID0KLSAgICAgICAgICAgIEFyZW5hOjpD
cmVhdGVNZXNzYWdlPFJlcGVhdGVkRmllbGQ8ZmxvYXQ+ID4oYXJlbmFfKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0JPT0w6Ci0gICAgICAgIGV4
dGVuc2lvbi0+cmVwZWF0ZWRfYm9vbF92YWx1ZSA9Ci0gICAgICAgICAgICBBcmVuYTo6Q3JlYXRl
TWVzc2FnZTxSZXBlYXRlZEZpZWxkPGJvb2w+ID4oYXJlbmFfKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0VOVU06Ci0gICAgICAgIGV4dGVuc2lv
bi0+cmVwZWF0ZWRfZW51bV92YWx1ZSA9Ci0gICAgICAgICAgICBBcmVuYTo6Q3JlYXRlTWVzc2Fn
ZTxSZXBlYXRlZEZpZWxkPGludD4gPihhcmVuYV8pOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgICBleHRlbnNpb24tPnJl
cGVhdGVkX3N0cmluZ192YWx1ZSA9Ci0gICAgICAgICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxS
ZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPiA+KGFyZW5hXyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgICBl
eHRlbnNpb24tPnJlcGVhdGVkX21lc3NhZ2VfdmFsdWUgPQotICAgICAgICAgICAgQXJlbmE6OkNy
ZWF0ZU1lc3NhZ2U8UmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlTGl0ZT4gPihhcmVuYV8pOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvLyBXZSBhc3N1bWUgdGhhdCBhbGwgdGhlIFJl
cGVhdGVkRmllbGQ8PiogcG9pbnRlcnMgaGF2ZSB0aGUgc2FtZQotICAvLyBzaXplIGFuZCBhbGln
bm1lbnQgd2l0aGluIHRoZSBhbm9ueW1vdXMgdW5pb24gaW4gRXh0ZW5zaW9uLgotICByZXR1cm4g
ZXh0ZW5zaW9uLT5yZXBlYXRlZF9pbnQzMl92YWx1ZTsKLX0KLQotLy8gQ29tcGF0aWJsZSB2ZXJz
aW9uIHVzaW5nIG9sZCBjYWxsIHNpZ25hdHVyZS4gRG9lcyBub3QgY3JlYXRlIGV4dGVuc2lvbnMg
d2hlbgotLy8gdGhlIGRvbid0IGFscmVhZHkgZXhpc3Q7IGluc3RlYWQsIGp1c3QgR09PR0xFX0NI
RUNLLWZhaWxzLgotdm9pZCogRXh0ZW5zaW9uU2V0OjpNdXRhYmxlUmF3UmVwZWF0ZWRGaWVsZChp
bnQgbnVtYmVyKSB7Ci0gIG1hcDxpbnQsIEV4dGVuc2lvbj46Oml0ZXJhdG9yIGl0ZXIgPSBleHRl
bnNpb25zXy5maW5kKG51bWJlcik7Ci0gIEdPT0dMRV9DSEVDSyhpdGVyID09IGV4dGVuc2lvbnNf
LmVuZCgpKSA8PCAiRXh0ZW5zaW9uIG5vdCBmb3VuZC4iOwotICAvLyBXZSBhc3N1bWUgdGhhdCBh
bGwgdGhlIFJlcGVhdGVkRmllbGQ8PiogcG9pbnRlcnMgaGF2ZSB0aGUgc2FtZQotICAvLyBzaXpl
IGFuZCBhbGlnbm1lbnQgd2l0aGluIHRoZSBhbm9ueW1vdXMgdW5pb24gaW4gRXh0ZW5zaW9uLgot
ICByZXR1cm4gaXRlci0+c2Vjb25kLnJlcGVhdGVkX2ludDMyX3ZhbHVlOwotfQotCi0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIEVudW1zCi0KLWludCBFeHRlbnNpb25TZXQ6OkdldEVudW0oaW50IG51bWJl
ciwgaW50IGRlZmF1bHRfdmFsdWUpIGNvbnN0IHsKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbnNfLmZpbmQobnVtYmVyKTsKLSAgaWYgKGl0ZXIg
PT0gZXh0ZW5zaW9uc18uZW5kKCkgfHwgaXRlci0+c2Vjb25kLmlzX2NsZWFyZWQpIHsKLSAgICAv
LyBOb3QgcHJlc2VudC4gIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4KLSAgICByZXR1cm4gZGVm
YXVsdF92YWx1ZTsKLSAgfSBlbHNlIHsKLSAgICBHT09HTEVfRENIRUNLX1RZUEUoaXRlci0+c2Vj
b25kLCBPUFRJT05BTCwgRU5VTSk7Ci0gICAgcmV0dXJuIGl0ZXItPnNlY29uZC5lbnVtX3ZhbHVl
OwotICB9Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uU2V0OjpTZXRFbnVtKGludCBudW1iZXIsIEZpZWxk
VHlwZSB0eXBlLCBpbnQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgRXh0ZW5zaW9uKiBleHRlbnNpb247Ci0g
IGlmIChNYXliZU5ld0V4dGVuc2lvbihudW1iZXIsIGRlc2NyaXB0b3IsICZleHRlbnNpb24pKSB7
Ci0gICAgZXh0ZW5zaW9uLT50eXBlID0gdHlwZTsKLSAgICBHT09HTEVfRENIRUNLX0VRKGNwcF90
eXBlKGV4dGVuc2lvbi0+dHlwZSksIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0VOVU0pOwotICAg
IGV4dGVuc2lvbi0+aXNfcmVwZWF0ZWQgPSBmYWxzZTsKLSAgfSBlbHNlIHsKLSAgICBHT09HTEVf
RENIRUNLX1RZUEUoKmV4dGVuc2lvbiwgT1BUSU9OQUwsIEVOVU0pOwotICB9Ci0gIGV4dGVuc2lv
bi0+aXNfY2xlYXJlZCA9IGZhbHNlOwotICBleHRlbnNpb24tPmVudW1fdmFsdWUgPSB2YWx1ZTsK
LX0KLQotaW50IEV4dGVuc2lvblNldDo6R2V0UmVwZWF0ZWRFbnVtKGludCBudW1iZXIsIGludCBp
bmRleCkgY29uc3QgewotICBtYXA8aW50LCBFeHRlbnNpb24+Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gZXh0ZW5zaW9uc18uZmluZChudW1iZXIpOwotICBHT09HTEVfQ0hFQ0soaXRlciAhPSBleHRl
bnNpb25zXy5lbmQoKSkgPDwgIkluZGV4IG91dC1vZi1ib3VuZHMgKGZpZWxkIGlzIGVtcHR5KS4i
OwotICBHT09HTEVfRENIRUNLX1RZUEUoaXRlci0+c2Vjb25kLCBSRVBFQVRFRCwgRU5VTSk7Ci0g
IHJldHVybiBpdGVyLT5zZWNvbmQucmVwZWF0ZWRfZW51bV92YWx1ZS0+R2V0KGluZGV4KTsKLX0K
LQotdm9pZCBFeHRlbnNpb25TZXQ6OlNldFJlcGVhdGVkRW51bShpbnQgbnVtYmVyLCBpbnQgaW5k
ZXgsIGludCB2YWx1ZSkgewotICBtYXA8aW50LCBFeHRlbnNpb24+OjppdGVyYXRvciBpdGVyID0g
ZXh0ZW5zaW9uc18uZmluZChudW1iZXIpOwotICBHT09HTEVfQ0hFQ0soaXRlciAhPSBleHRlbnNp
b25zXy5lbmQoKSkgPDwgIkluZGV4IG91dC1vZi1ib3VuZHMgKGZpZWxkIGlzIGVtcHR5KS4iOwot
ICBHT09HTEVfRENIRUNLX1RZUEUoaXRlci0+c2Vjb25kLCBSRVBFQVRFRCwgRU5VTSk7Ci0gIGl0
ZXItPnNlY29uZC5yZXBlYXRlZF9lbnVtX3ZhbHVlLT5TZXQoaW5kZXgsIHZhbHVlKTsKLX0KLQot
dm9pZCBFeHRlbnNpb25TZXQ6OkFkZEVudW0oaW50IG51bWJlciwgRmllbGRUeXBlIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZCwgaW50IHZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7
Ci0gIEV4dGVuc2lvbiogZXh0ZW5zaW9uOwotICBpZiAoTWF5YmVOZXdFeHRlbnNpb24obnVtYmVy
LCBkZXNjcmlwdG9yLCAmZXh0ZW5zaW9uKSkgewotICAgIGV4dGVuc2lvbi0+dHlwZSA9IHR5cGU7
Ci0gICAgR09PR0xFX0RDSEVDS19FUShjcHBfdHlwZShleHRlbnNpb24tPnR5cGUpLCBXaXJlRm9y
bWF0TGl0ZTo6Q1BQVFlQRV9FTlVNKTsKLSAgICBleHRlbnNpb24tPmlzX3JlcGVhdGVkID0gdHJ1
ZTsKLSAgICBleHRlbnNpb24tPmlzX3BhY2tlZCA9IHBhY2tlZDsKLSAgICBleHRlbnNpb24tPnJl
cGVhdGVkX2VudW1fdmFsdWUgPQotICAgICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxSZXBlYXRl
ZEZpZWxkPGludD4gPihhcmVuYV8pOwotICB9IGVsc2UgewotICAgIEdPT0dMRV9EQ0hFQ0tfVFlQ
RSgqZXh0ZW5zaW9uLCBSRVBFQVRFRCwgRU5VTSk7Ci0gICAgR09PR0xFX0RDSEVDS19FUShleHRl
bnNpb24tPmlzX3BhY2tlZCwgcGFja2VkKTsKLSAgfQotICBleHRlbnNpb24tPnJlcGVhdGVkX2Vu
dW1fdmFsdWUtPkFkZCh2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFN0cmluZ3MKLQot
Y29uc3Qgc3RyaW5nJiBFeHRlbnNpb25TZXQ6OkdldFN0cmluZyhpbnQgbnVtYmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGRlZmF1bHRfdmFs
dWUpIGNvbnN0IHsKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IGV4dGVuc2lvbnNfLmZpbmQobnVtYmVyKTsKLSAgaWYgKGl0ZXIgPT0gZXh0ZW5zaW9uc18uZW5k
KCkgfHwgaXRlci0+c2Vjb25kLmlzX2NsZWFyZWQpIHsKLSAgICAvLyBOb3QgcHJlc2VudC4gIFJl
dHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4KLSAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKLSAgfSBl
bHNlIHsKLSAgICBHT09HTEVfRENIRUNLX1RZUEUoaXRlci0+c2Vjb25kLCBPUFRJT05BTCwgU1RS
SU5HKTsKLSAgICByZXR1cm4gKml0ZXItPnNlY29uZC5zdHJpbmdfdmFsdWU7Ci0gIH0KLX0KLQot
c3RyaW5nKiBFeHRlbnNpb25TZXQ6Ok11dGFibGVTdHJpbmcoaW50IG51bWJlciwgRmllbGRUeXBl
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgRXh0ZW5zaW9uKiBleHRlbnNpb247Ci0gIGlmIChN
YXliZU5ld0V4dGVuc2lvbihudW1iZXIsIGRlc2NyaXB0b3IsICZleHRlbnNpb24pKSB7Ci0gICAg
ZXh0ZW5zaW9uLT50eXBlID0gdHlwZTsKLSAgICBHT09HTEVfRENIRUNLX0VRKGNwcF90eXBlKGV4
dGVuc2lvbi0+dHlwZSksIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX1NUUklORyk7Ci0gICAgZXh0
ZW5zaW9uLT5pc19yZXBlYXRlZCA9IGZhbHNlOwotICAgIGV4dGVuc2lvbi0+c3RyaW5nX3ZhbHVl
ID0gQXJlbmE6OkNyZWF0ZTxzdHJpbmc+KGFyZW5hXyk7Ci0gIH0gZWxzZSB7Ci0gICAgR09PR0xF
X0RDSEVDS19UWVBFKCpleHRlbnNpb24sIE9QVElPTkFMLCBTVFJJTkcpOwotICB9Ci0gIGV4dGVu
c2lvbi0+aXNfY2xlYXJlZCA9IGZhbHNlOwotICByZXR1cm4gZXh0ZW5zaW9uLT5zdHJpbmdfdmFs
dWU7Ci19Ci0KLWNvbnN0IHN0cmluZyYgRXh0ZW5zaW9uU2V0OjpHZXRSZXBlYXRlZFN0cmluZyhp
bnQgbnVtYmVyLCBpbnQgaW5kZXgpIGNvbnN0IHsKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbnNfLmZpbmQobnVtYmVyKTsKLSAgR09PR0xFX0NI
RUNLKGl0ZXIgIT0gZXh0ZW5zaW9uc18uZW5kKCkpIDw8ICJJbmRleCBvdXQtb2YtYm91bmRzIChm
aWVsZCBpcyBlbXB0eSkuIjsKLSAgR09PR0xFX0RDSEVDS19UWVBFKGl0ZXItPnNlY29uZCwgUkVQ
RUFURUQsIFNUUklORyk7Ci0gIHJldHVybiBpdGVyLT5zZWNvbmQucmVwZWF0ZWRfc3RyaW5nX3Zh
bHVlLT5HZXQoaW5kZXgpOwotfQotCi1zdHJpbmcqIEV4dGVuc2lvblNldDo6TXV0YWJsZVJlcGVh
dGVkU3RyaW5nKGludCBudW1iZXIsIGludCBpbmRleCkgewotICBtYXA8aW50LCBFeHRlbnNpb24+
OjppdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uc18uZmluZChudW1iZXIpOwotICBHT09HTEVfQ0hF
Q0soaXRlciAhPSBleHRlbnNpb25zXy5lbmQoKSkgPDwgIkluZGV4IG91dC1vZi1ib3VuZHMgKGZp
ZWxkIGlzIGVtcHR5KS4iOwotICBHT09HTEVfRENIRUNLX1RZUEUoaXRlci0+c2Vjb25kLCBSRVBF
QVRFRCwgU1RSSU5HKTsKLSAgcmV0dXJuIGl0ZXItPnNlY29uZC5yZXBlYXRlZF9zdHJpbmdfdmFs
dWUtPk11dGFibGUoaW5kZXgpOwotfQotCi1zdHJpbmcqIEV4dGVuc2lvblNldDo6QWRkU3RyaW5n
KGludCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgRXh0ZW5zaW9uKiBl
eHRlbnNpb247Ci0gIGlmIChNYXliZU5ld0V4dGVuc2lvbihudW1iZXIsIGRlc2NyaXB0b3IsICZl
eHRlbnNpb24pKSB7Ci0gICAgZXh0ZW5zaW9uLT50eXBlID0gdHlwZTsKLSAgICBHT09HTEVfRENI
RUNLX0VRKGNwcF90eXBlKGV4dGVuc2lvbi0+dHlwZSksIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBF
X1NUUklORyk7Ci0gICAgZXh0ZW5zaW9uLT5pc19yZXBlYXRlZCA9IHRydWU7Ci0gICAgZXh0ZW5z
aW9uLT5pc19wYWNrZWQgPSBmYWxzZTsKLSAgICBleHRlbnNpb24tPnJlcGVhdGVkX3N0cmluZ192
YWx1ZSA9Ci0gICAgICAgIEFyZW5hOjpDcmVhdGVNZXNzYWdlPFJlcGVhdGVkUHRyRmllbGQ8c3Ry
aW5nPiA+KGFyZW5hXyk7Ci0gIH0gZWxzZSB7Ci0gICAgR09PR0xFX0RDSEVDS19UWVBFKCpleHRl
bnNpb24sIFJFUEVBVEVELCBTVFJJTkcpOwotICB9Ci0gIHJldHVybiBleHRlbnNpb24tPnJlcGVh
dGVkX3N0cmluZ192YWx1ZS0+QWRkKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1lc3NhZ2Vz
Ci0KLWNvbnN0IE1lc3NhZ2VMaXRlJiBFeHRlbnNpb25TZXQ6OkdldE1lc3NhZ2UoCi0gICAgaW50
IG51bWJlciwgY29uc3QgTWVzc2FnZUxpdGUmIGRlZmF1bHRfdmFsdWUpIGNvbnN0IHsKLSAgbWFw
PGludCwgRXh0ZW5zaW9uPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbnNfLmZpbmQo
bnVtYmVyKTsKLSAgaWYgKGl0ZXIgPT0gZXh0ZW5zaW9uc18uZW5kKCkpIHsKLSAgICAvLyBOb3Qg
cHJlc2VudC4gIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4KLSAgICByZXR1cm4gZGVmYXVsdF92
YWx1ZTsKLSAgfSBlbHNlIHsKLSAgICBHT09HTEVfRENIRUNLX1RZUEUoaXRlci0+c2Vjb25kLCBP
UFRJT05BTCwgTUVTU0FHRSk7Ci0gICAgaWYgKGl0ZXItPnNlY29uZC5pc19sYXp5KSB7Ci0gICAg
ICByZXR1cm4gaXRlci0+c2Vjb25kLmxhenltZXNzYWdlX3ZhbHVlLT5HZXRNZXNzYWdlKGRlZmF1
bHRfdmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gKml0ZXItPnNlY29uZC5tZXNz
YWdlX3ZhbHVlOwotICAgIH0KLSAgfQotfQotCi0vLyBEZWZpbmVkIGluIGV4dGVuc2lvbl9zZXRf
aGVhdnkuY2MuCi0vLyBjb25zdCBNZXNzYWdlTGl0ZSYgRXh0ZW5zaW9uU2V0OjpHZXRNZXNzYWdl
KGludCBudW1iZXIsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IERlc2NyaXB0b3IqIG1lc3NhZ2VfdHlwZSwKLS8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkqIGZhY3RvcnkpIGNvbnN0
Ci0KLU1lc3NhZ2VMaXRlKiBFeHRlbnNpb25TZXQ6Ok11dGFibGVNZXNzYWdlKGludCBudW1iZXIs
IEZpZWxkVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTWVzc2FnZUxpdGUmIHByb3RvdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewot
ICBFeHRlbnNpb24qIGV4dGVuc2lvbjsKLSAgaWYgKE1heWJlTmV3RXh0ZW5zaW9uKG51bWJlciwg
ZGVzY3JpcHRvciwgJmV4dGVuc2lvbikpIHsKLSAgICBleHRlbnNpb24tPnR5cGUgPSB0eXBlOwot
ICAgIEdPT0dMRV9EQ0hFQ0tfRVEoY3BwX3R5cGUoZXh0ZW5zaW9uLT50eXBlKSwgV2lyZUZvcm1h
dExpdGU6OkNQUFRZUEVfTUVTU0FHRSk7Ci0gICAgZXh0ZW5zaW9uLT5pc19yZXBlYXRlZCA9IGZh
bHNlOwotICAgIGV4dGVuc2lvbi0+aXNfbGF6eSA9IGZhbHNlOwotICAgIGV4dGVuc2lvbi0+bWVz
c2FnZV92YWx1ZSA9IHByb3RvdHlwZS5OZXcoYXJlbmFfKTsKLSAgICBleHRlbnNpb24tPmlzX2Ns
ZWFyZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gZXh0ZW5zaW9uLT5tZXNzYWdlX3ZhbHVlOwotICB9
IGVsc2UgewotICAgIEdPT0dMRV9EQ0hFQ0tfVFlQRSgqZXh0ZW5zaW9uLCBPUFRJT05BTCwgTUVT
U0FHRSk7Ci0gICAgZXh0ZW5zaW9uLT5pc19jbGVhcmVkID0gZmFsc2U7Ci0gICAgaWYgKGV4dGVu
c2lvbi0+aXNfbGF6eSkgewotICAgICAgcmV0dXJuIGV4dGVuc2lvbi0+bGF6eW1lc3NhZ2VfdmFs
dWUtPk11dGFibGVNZXNzYWdlKHByb3RvdHlwZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVy
biBleHRlbnNpb24tPm1lc3NhZ2VfdmFsdWU7Ci0gICAgfQotICB9Ci19Ci0KLS8vIERlZmluZWQg
aW4gZXh0ZW5zaW9uX3NldF9oZWF2eS5jYy4KLS8vIE1lc3NhZ2VMaXRlKiBFeHRlbnNpb25TZXQ6
Ok11dGFibGVNZXNzYWdlKGludCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLAotLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVzY3JpcHRvciogbWVzc2Fn
ZV90eXBlLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVz
c2FnZUZhY3RvcnkqIGZhY3RvcnkpCi0KLXZvaWQgRXh0ZW5zaW9uU2V0OjpTZXRBbGxvY2F0ZWRN
ZXNzYWdlKGludCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUxpdGUqIG1lc3NhZ2Up
IHsKLSAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkgewotICAgIENsZWFyRXh0ZW5zaW9uKG51bWJlcik7
Ci0gICAgcmV0dXJuOwotICB9Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIG1lc3NhZ2Vf
YXJlbmEgPSBtZXNzYWdlLT5HZXRBcmVuYSgpOwotICBFeHRlbnNpb24qIGV4dGVuc2lvbjsKLSAg
aWYgKE1heWJlTmV3RXh0ZW5zaW9uKG51bWJlciwgZGVzY3JpcHRvciwgJmV4dGVuc2lvbikpIHsK
LSAgICBleHRlbnNpb24tPnR5cGUgPSB0eXBlOwotICAgIEdPT0dMRV9EQ0hFQ0tfRVEoY3BwX3R5
cGUoZXh0ZW5zaW9uLT50eXBlKSwgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfTUVTU0FHRSk7Ci0g
ICAgZXh0ZW5zaW9uLT5pc19yZXBlYXRlZCA9IGZhbHNlOwotICAgIGV4dGVuc2lvbi0+aXNfbGF6
eSA9IGZhbHNlOwotICAgIGlmIChtZXNzYWdlX2FyZW5hID09IGFyZW5hXykgewotICAgICAgZXh0
ZW5zaW9uLT5tZXNzYWdlX3ZhbHVlID0gbWVzc2FnZTsKLSAgICB9IGVsc2UgaWYgKG1lc3NhZ2Vf
YXJlbmEgPT0gTlVMTCkgewotICAgICAgZXh0ZW5zaW9uLT5tZXNzYWdlX3ZhbHVlID0gbWVzc2Fn
ZTsKLSAgICAgIGFyZW5hXy0+T3duKG1lc3NhZ2UpOyAgLy8gbm90IE5VTEwgYmVjYXVzZSBub3Qg
ZXF1YWwgdG8gbWVzc2FnZV9hcmVuYQotICAgIH0gZWxzZSB7Ci0gICAgICBleHRlbnNpb24tPm1l
c3NhZ2VfdmFsdWUgPSBtZXNzYWdlLT5OZXcoYXJlbmFfKTsKLSAgICAgIGV4dGVuc2lvbi0+bWVz
c2FnZV92YWx1ZS0+Q2hlY2tUeXBlQW5kTWVyZ2VGcm9tKCptZXNzYWdlKTsKLSAgICB9Ci0gIH0g
ZWxzZSB7Ci0gICAgR09PR0xFX0RDSEVDS19UWVBFKCpleHRlbnNpb24sIE9QVElPTkFMLCBNRVNT
QUdFKTsKLSAgICBpZiAoZXh0ZW5zaW9uLT5pc19sYXp5KSB7Ci0gICAgICBleHRlbnNpb24tPmxh
enltZXNzYWdlX3ZhbHVlLT5TZXRBbGxvY2F0ZWRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBpZiAoYXJlbmFfID09IE5VTEwpIHsKLSAgICAgICAgZGVsZXRlIGV4dGVuc2lv
bi0+bWVzc2FnZV92YWx1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChtZXNzYWdlX2FyZW5hID09IGFy
ZW5hXykgewotICAgICAgICBleHRlbnNpb24tPm1lc3NhZ2VfdmFsdWUgPSBtZXNzYWdlOwotICAg
ICAgfSBlbHNlIGlmIChtZXNzYWdlX2FyZW5hID09IE5VTEwpIHsKLSAgICAgICAgZXh0ZW5zaW9u
LT5tZXNzYWdlX3ZhbHVlID0gbWVzc2FnZTsKLSAgICAgICAgYXJlbmFfLT5Pd24obWVzc2FnZSk7
ICAvLyBub3QgTlVMTCBiZWNhdXNlIG5vdCBlcXVhbCB0byBtZXNzYWdlX2FyZW5hCi0gICAgICB9
IGVsc2UgewotICAgICAgICBleHRlbnNpb24tPm1lc3NhZ2VfdmFsdWUgPSBtZXNzYWdlLT5OZXco
YXJlbmFfKTsKLSAgICAgICAgZXh0ZW5zaW9uLT5tZXNzYWdlX3ZhbHVlLT5DaGVja1R5cGVBbmRN
ZXJnZUZyb20oKm1lc3NhZ2UpOwotICAgICAgfQotICAgIH0KLSAgfQotICBleHRlbnNpb24tPmlz
X2NsZWFyZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBFeHRlbnNpb25TZXQ6OlVuc2FmZUFyZW5hU2V0
QWxsb2NhdGVkTWVzc2FnZSgKLSAgICBpbnQgbnVtYmVyLCBGaWVsZFR5cGUgdHlwZSwgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgIE1lc3NhZ2VMaXRlKiBtZXNzYWdlKSB7
Ci0gIGlmIChtZXNzYWdlID09IE5VTEwpIHsKLSAgICBDbGVhckV4dGVuc2lvbihudW1iZXIpOwot
ICAgIHJldHVybjsKLSAgfQotICBFeHRlbnNpb24qIGV4dGVuc2lvbjsKLSAgaWYgKE1heWJlTmV3
RXh0ZW5zaW9uKG51bWJlciwgZGVzY3JpcHRvciwgJmV4dGVuc2lvbikpIHsKLSAgICBleHRlbnNp
b24tPnR5cGUgPSB0eXBlOwotICAgIEdPT0dMRV9EQ0hFQ0tfRVEoY3BwX3R5cGUoZXh0ZW5zaW9u
LT50eXBlKSwgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfTUVTU0FHRSk7Ci0gICAgZXh0ZW5zaW9u
LT5pc19yZXBlYXRlZCA9IGZhbHNlOwotICAgIGV4dGVuc2lvbi0+aXNfbGF6eSA9IGZhbHNlOwot
ICAgIGV4dGVuc2lvbi0+bWVzc2FnZV92YWx1ZSA9IG1lc3NhZ2U7Ci0gIH0gZWxzZSB7Ci0gICAg
R09PR0xFX0RDSEVDS19UWVBFKCpleHRlbnNpb24sIE9QVElPTkFMLCBNRVNTQUdFKTsKLSAgICBp
ZiAoZXh0ZW5zaW9uLT5pc19sYXp5KSB7Ci0gICAgICBleHRlbnNpb24tPmxhenltZXNzYWdlX3Zh
bHVlLT5VbnNhZmVBcmVuYVNldEFsbG9jYXRlZE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGlmIChhcmVuYV8gPT0gTlVMTCkgewotICAgICAgICBkZWxldGUgZXh0ZW5zaW9u
LT5tZXNzYWdlX3ZhbHVlOwotICAgICAgfQotICAgICAgZXh0ZW5zaW9uLT5tZXNzYWdlX3ZhbHVl
ID0gbWVzc2FnZTsKLSAgICB9Ci0gIH0KLSAgZXh0ZW5zaW9uLT5pc19jbGVhcmVkID0gZmFsc2U7
Ci19Ci0KLQotTWVzc2FnZUxpdGUqIEV4dGVuc2lvblNldDo6UmVsZWFzZU1lc3NhZ2UoaW50IG51
bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1l
c3NhZ2VMaXRlJiBwcm90b3R5cGUpIHsKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6aXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbnNfLmZpbmQobnVtYmVyKTsKLSAgaWYgKGl0ZXIgPT0gZXh0ZW5zaW9u
c18uZW5kKCkpIHsKLSAgICAvLyBOb3QgcHJlc2VudC4gIFJldHVybiBOVUxMLgotICAgIHJldHVy
biBOVUxMOwotICB9IGVsc2UgewotICAgIEdPT0dMRV9EQ0hFQ0tfVFlQRShpdGVyLT5zZWNvbmQs
IE9QVElPTkFMLCBNRVNTQUdFKTsKLSAgICBNZXNzYWdlTGl0ZSogcmV0ID0gTlVMTDsKLSAgICBp
ZiAoaXRlci0+c2Vjb25kLmlzX2xhenkpIHsKLSAgICAgIHJldCA9IGl0ZXItPnNlY29uZC5sYXp5
bWVzc2FnZV92YWx1ZS0+UmVsZWFzZU1lc3NhZ2UocHJvdG90eXBlKTsKLSAgICAgIGlmIChhcmVu
YV8gPT0gTlVMTCkgewotICAgICAgICBkZWxldGUgaXRlci0+c2Vjb25kLmxhenltZXNzYWdlX3Zh
bHVlOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoYXJlbmFfID09IE5VTEwpIHsK
LSAgICAgICAgcmV0ID0gaXRlci0+c2Vjb25kLm1lc3NhZ2VfdmFsdWU7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBSZWxlYXNlTWVzc2FnZSgpIGFsd2F5cyByZXR1cm5zIGEgaGVhcC1hbGxv
Y2F0ZWQgbWVzc2FnZSwgYW5kIHdlIGFyZQotICAgICAgICAvLyBvbiBhbiBhcmVuYSwgc28gd2Ug
bmVlZCB0byBtYWtlIGEgY29weSBvZiB0aGlzIG1lc3NhZ2UgdG8gcmV0dXJuLgotICAgICAgICBy
ZXQgPSAoaXRlci0+c2Vjb25kLm1lc3NhZ2VfdmFsdWUpLT5OZXcoKTsKLSAgICAgICAgcmV0LT5D
aGVja1R5cGVBbmRNZXJnZUZyb20oKml0ZXItPnNlY29uZC5tZXNzYWdlX3ZhbHVlKTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgZXh0ZW5zaW9uc18uZXJhc2UobnVtYmVyKTsKLSAgICByZXR1cm4gcmV0
OwotICB9Ci19Ci0KLU1lc3NhZ2VMaXRlKiBFeHRlbnNpb25TZXQ6OlVuc2FmZUFyZW5hUmVsZWFz
ZU1lc3NhZ2UoCi0gICAgaW50IG51bWJlciwgY29uc3QgTWVzc2FnZUxpdGUmIHByb3RvdHlwZSkg
ewotICBtYXA8aW50LCBFeHRlbnNpb24+OjppdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uc18uZmlu
ZChudW1iZXIpOwotICBpZiAoaXRlciA9PSBleHRlbnNpb25zXy5lbmQoKSkgewotICAgIC8vIE5v
dCBwcmVzZW50LiAgUmV0dXJuIE5VTEwuCi0gICAgcmV0dXJuIE5VTEw7Ci0gIH0gZWxzZSB7Ci0g
ICAgR09PR0xFX0RDSEVDS19UWVBFKGl0ZXItPnNlY29uZCwgT1BUSU9OQUwsIE1FU1NBR0UpOwot
ICAgIE1lc3NhZ2VMaXRlKiByZXQgPSBOVUxMOwotICAgIGlmIChpdGVyLT5zZWNvbmQuaXNfbGF6
eSkgewotICAgICAgcmV0ID0KLSAgICAgICAgaXRlci0+c2Vjb25kLmxhenltZXNzYWdlX3ZhbHVl
LT5VbnNhZmVBcmVuYVJlbGVhc2VNZXNzYWdlKHByb3RvdHlwZSk7Ci0gICAgICBpZiAoYXJlbmFf
ID09IE5VTEwpIHsKLSAgICAgICAgZGVsZXRlIGl0ZXItPnNlY29uZC5sYXp5bWVzc2FnZV92YWx1
ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgcmV0ID0gaXRlci0+c2Vjb25kLm1lc3Nh
Z2VfdmFsdWU7Ci0gICAgfQotICAgIGV4dGVuc2lvbnNfLmVyYXNlKG51bWJlcik7Ci0gICAgcmV0
dXJuIHJldDsKLSAgfQotfQotCi0vLyBEZWZpbmVkIGluIGV4dGVuc2lvbl9zZXRfaGVhdnkuY2Mu
Ci0vLyBNZXNzYWdlTGl0ZSogRXh0ZW5zaW9uU2V0OjpSZWxlYXNlTWVzc2FnZShjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNZXNzYWdlRmFjdG9yeSogZmFjdG9yeSk7Ci0KLWNvbnN0IE1lc3NhZ2VM
aXRlJiBFeHRlbnNpb25TZXQ6OkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICBpbnQgbnVtYmVyLCBp
bnQgaW5kZXgpIGNvbnN0IHsKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbnNfLmZpbmQobnVtYmVyKTsKLSAgR09PR0xFX0NIRUNLKGl0ZXIgIT0g
ZXh0ZW5zaW9uc18uZW5kKCkpIDw8ICJJbmRleCBvdXQtb2YtYm91bmRzIChmaWVsZCBpcyBlbXB0
eSkuIjsKLSAgR09PR0xFX0RDSEVDS19UWVBFKGl0ZXItPnNlY29uZCwgUkVQRUFURUQsIE1FU1NB
R0UpOwotICByZXR1cm4gaXRlci0+c2Vjb25kLnJlcGVhdGVkX21lc3NhZ2VfdmFsdWUtPkdldChp
bmRleCk7Ci19Ci0KLU1lc3NhZ2VMaXRlKiBFeHRlbnNpb25TZXQ6Ok11dGFibGVSZXBlYXRlZE1l
c3NhZ2UoaW50IG51bWJlciwgaW50IGluZGV4KSB7Ci0gIG1hcDxpbnQsIEV4dGVuc2lvbj46Oml0
ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25zXy5maW5kKG51bWJlcik7Ci0gIEdPT0dMRV9DSEVDSyhp
dGVyICE9IGV4dGVuc2lvbnNfLmVuZCgpKSA8PCAiSW5kZXggb3V0LW9mLWJvdW5kcyAoZmllbGQg
aXMgZW1wdHkpLiI7Ci0gIEdPT0dMRV9EQ0hFQ0tfVFlQRShpdGVyLT5zZWNvbmQsIFJFUEVBVEVE
LCBNRVNTQUdFKTsKLSAgcmV0dXJuIGl0ZXItPnNlY29uZC5yZXBlYXRlZF9tZXNzYWdlX3ZhbHVl
LT5NdXRhYmxlKGluZGV4KTsKLX0KLQotTWVzc2FnZUxpdGUqIEV4dGVuc2lvblNldDo6QWRkTWVz
c2FnZShpbnQgbnVtYmVyLCBGaWVsZFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZUxpdGUmIHByb3RvdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yKSB7Ci0gIEV4dGVuc2lvbiogZXh0ZW5zaW9uOwotICBpZiAoTWF5YmVOZXdFeHRlbnNpb24o
bnVtYmVyLCBkZXNjcmlwdG9yLCAmZXh0ZW5zaW9uKSkgewotICAgIGV4dGVuc2lvbi0+dHlwZSA9
IHR5cGU7Ci0gICAgR09PR0xFX0RDSEVDS19FUShjcHBfdHlwZShleHRlbnNpb24tPnR5cGUpLCBX
aXJlRm9ybWF0TGl0ZTo6Q1BQVFlQRV9NRVNTQUdFKTsKLSAgICBleHRlbnNpb24tPmlzX3JlcGVh
dGVkID0gdHJ1ZTsKLSAgICBleHRlbnNpb24tPnJlcGVhdGVkX21lc3NhZ2VfdmFsdWUgPQotICAg
ICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2VMaXRlPiA+
KGFyZW5hXyk7Ci0gIH0gZWxzZSB7Ci0gICAgR09PR0xFX0RDSEVDS19UWVBFKCpleHRlbnNpb24s
IFJFUEVBVEVELCBNRVNTQUdFKTsKLSAgfQotCi0gIC8vIFJlcGVhdGVkUHRyRmllbGQ8TWVzc2Fn
ZUxpdGU+IGRvZXMgbm90IGtub3cgaG93IHRvIEFkZCgpIHNpbmNlIGl0IGNhbm5vdAotICAvLyBh
bGxvY2F0ZSBhbiBhYnN0cmFjdCBvYmplY3QsIHNvIHdlIGhhdmUgdG8gYmUgdHJpY2t5LgotICBN
ZXNzYWdlTGl0ZSogcmVzdWx0ID0gZXh0ZW5zaW9uLT5yZXBlYXRlZF9tZXNzYWdlX3ZhbHVlCi0g
ICAgICAtPkFkZEZyb21DbGVhcmVkPEdlbmVyaWNUeXBlSGFuZGxlcjxNZXNzYWdlTGl0ZT4gPigp
OwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICByZXN1bHQgPSBwcm90b3R5cGUuTmV3KGFy
ZW5hXyk7Ci0gICAgZXh0ZW5zaW9uLT5yZXBlYXRlZF9tZXNzYWdlX3ZhbHVlLT5BZGRBbGxvY2F0
ZWQocmVzdWx0KTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBEZWZpbmVkIGluIGV4
dGVuc2lvbl9zZXRfaGVhdnkuY2MuCi0vLyBNZXNzYWdlTGl0ZSogRXh0ZW5zaW9uU2V0OjpBZGRN
ZXNzYWdlKGludCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLAotLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9yKiBtZXNzYWdlX3R5cGUsCi0vLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VGYWN0b3J5KiBmYWN0
b3J5KQotCi0jdW5kZWYgR09PR0xFX0RDSEVDS19UWVBFCi0KLXZvaWQgRXh0ZW5zaW9uU2V0OjpS
ZW1vdmVMYXN0KGludCBudW1iZXIpIHsKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6aXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbnNfLmZpbmQobnVtYmVyKTsKLSAgR09PR0xFX0NIRUNLKGl0ZXIgIT0g
ZXh0ZW5zaW9uc18uZW5kKCkpIDw8ICJJbmRleCBvdXQtb2YtYm91bmRzIChmaWVsZCBpcyBlbXB0
eSkuIjsKLQotICBFeHRlbnNpb24qIGV4dGVuc2lvbiA9ICZpdGVyLT5zZWNvbmQ7Ci0gIEdPT0dM
RV9EQ0hFQ0soZXh0ZW5zaW9uLT5pc19yZXBlYXRlZCk7Ci0KLSAgc3dpdGNoKGNwcF90eXBlKGV4
dGVuc2lvbi0+dHlwZSkpIHsKLSAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0lOVDMy
OgotICAgICAgZXh0ZW5zaW9uLT5yZXBlYXRlZF9pbnQzMl92YWx1ZS0+UmVtb3ZlTGFzdCgpOwot
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6Q1BQVFlQRV9JTlQ2NDoKLSAg
ICAgIGV4dGVuc2lvbi0+cmVwZWF0ZWRfaW50NjRfdmFsdWUtPlJlbW92ZUxhc3QoKTsKLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfVUlOVDMyOgotICAgICAg
ZXh0ZW5zaW9uLT5yZXBlYXRlZF91aW50MzJfdmFsdWUtPlJlbW92ZUxhc3QoKTsKLSAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfVUlOVDY0OgotICAgICAgZXh0
ZW5zaW9uLT5yZXBlYXRlZF91aW50NjRfdmFsdWUtPlJlbW92ZUxhc3QoKTsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfRkxPQVQ6Ci0gICAgICBleHRlbnNp
b24tPnJlcGVhdGVkX2Zsb2F0X3ZhbHVlLT5SZW1vdmVMYXN0KCk7Ci0gICAgICBicmVhazsKLSAg
ICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0RPVUJMRToKLSAgICAgIGV4dGVuc2lvbi0+
cmVwZWF0ZWRfZG91YmxlX3ZhbHVlLT5SZW1vdmVMYXN0KCk7Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX0JPT0w6Ci0gICAgICBleHRlbnNpb24tPnJlcGVh
dGVkX2Jvb2xfdmFsdWUtPlJlbW92ZUxhc3QoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ly
ZUZvcm1hdExpdGU6OkNQUFRZUEVfRU5VTToKLSAgICAgIGV4dGVuc2lvbi0+cmVwZWF0ZWRfZW51
bV92YWx1ZS0+UmVtb3ZlTGFzdCgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaXJlRm9ybWF0
TGl0ZTo6Q1BQVFlQRV9TVFJJTkc6Ci0gICAgICBleHRlbnNpb24tPnJlcGVhdGVkX3N0cmluZ192
YWx1ZS0+UmVtb3ZlTGFzdCgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaXJlRm9ybWF0TGl0
ZTo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgZXh0ZW5zaW9uLT5yZXBlYXRlZF9tZXNzYWdlX3Zh
bHVlLT5SZW1vdmVMYXN0KCk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1NZXNzYWdlTGl0ZSog
RXh0ZW5zaW9uU2V0OjpSZWxlYXNlTGFzdChpbnQgbnVtYmVyKSB7Ci0gIG1hcDxpbnQsIEV4dGVu
c2lvbj46Oml0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25zXy5maW5kKG51bWJlcik7Ci0gIEdPT0dM
RV9DSEVDSyhpdGVyICE9IGV4dGVuc2lvbnNfLmVuZCgpKSA8PCAiSW5kZXggb3V0LW9mLWJvdW5k
cyAoZmllbGQgaXMgZW1wdHkpLiI7Ci0KLSAgRXh0ZW5zaW9uKiBleHRlbnNpb24gPSAmaXRlci0+
c2Vjb25kOwotICBHT09HTEVfRENIRUNLKGV4dGVuc2lvbi0+aXNfcmVwZWF0ZWQpOwotICBHT09H
TEVfRENIRUNLKGNwcF90eXBlKGV4dGVuc2lvbi0+dHlwZSkgPT0gV2lyZUZvcm1hdExpdGU6OkNQ
UFRZUEVfTUVTU0FHRSk7Ci0gIHJldHVybiBleHRlbnNpb24tPnJlcGVhdGVkX21lc3NhZ2VfdmFs
dWUtPlJlbGVhc2VMYXN0KCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uU2V0OjpTd2FwRWxlbWVudHMo
aW50IG51bWJlciwgaW50IGluZGV4MSwgaW50IGluZGV4MikgewotICBtYXA8aW50LCBFeHRlbnNp
b24+OjppdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uc18uZmluZChudW1iZXIpOwotICBHT09HTEVf
Q0hFQ0soaXRlciAhPSBleHRlbnNpb25zXy5lbmQoKSkgPDwgIkluZGV4IG91dC1vZi1ib3VuZHMg
KGZpZWxkIGlzIGVtcHR5KS4iOwotCi0gIEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gJml0ZXItPnNl
Y29uZDsKLSAgR09PR0xFX0RDSEVDSyhleHRlbnNpb24tPmlzX3JlcGVhdGVkKTsKLQotICBzd2l0
Y2goY3BwX3R5cGUoZXh0ZW5zaW9uLT50eXBlKSkgewotICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6
OkNQUFRZUEVfSU5UMzI6Ci0gICAgICBleHRlbnNpb24tPnJlcGVhdGVkX2ludDMyX3ZhbHVlLT5T
d2FwRWxlbWVudHMoaW5kZXgxLCBpbmRleDIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaXJl
Rm9ybWF0TGl0ZTo6Q1BQVFlQRV9JTlQ2NDoKLSAgICAgIGV4dGVuc2lvbi0+cmVwZWF0ZWRfaW50
NjRfdmFsdWUtPlN3YXBFbGVtZW50cyhpbmRleDEsIGluZGV4Mik7Ci0gICAgICBicmVhazsKLSAg
ICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX1VJTlQzMjoKLSAgICAgIGV4dGVuc2lvbi0+
cmVwZWF0ZWRfdWludDMyX3ZhbHVlLT5Td2FwRWxlbWVudHMoaW5kZXgxLCBpbmRleDIpOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6Q1BQVFlQRV9VSU5UNjQ6Ci0gICAg
ICBleHRlbnNpb24tPnJlcGVhdGVkX3VpbnQ2NF92YWx1ZS0+U3dhcEVsZW1lbnRzKGluZGV4MSwg
aW5kZXgyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVf
RkxPQVQ6Ci0gICAgICBleHRlbnNpb24tPnJlcGVhdGVkX2Zsb2F0X3ZhbHVlLT5Td2FwRWxlbWVu
dHMoaW5kZXgxLCBpbmRleDIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaXJlRm9ybWF0TGl0
ZTo6Q1BQVFlQRV9ET1VCTEU6Ci0gICAgICBleHRlbnNpb24tPnJlcGVhdGVkX2RvdWJsZV92YWx1
ZS0+U3dhcEVsZW1lbnRzKGluZGV4MSwgaW5kZXgyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfQk9PTDoKLSAgICAgIGV4dGVuc2lvbi0+cmVwZWF0ZWRf
Ym9vbF92YWx1ZS0+U3dhcEVsZW1lbnRzKGluZGV4MSwgaW5kZXgyKTsKLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfRU5VTToKLSAgICAgIGV4dGVuc2lvbi0+
cmVwZWF0ZWRfZW51bV92YWx1ZS0+U3dhcEVsZW1lbnRzKGluZGV4MSwgaW5kZXgyKTsKLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfU1RSSU5HOgotICAgICAg
ZXh0ZW5zaW9uLT5yZXBlYXRlZF9zdHJpbmdfdmFsdWUtPlN3YXBFbGVtZW50cyhpbmRleDEsIGlu
ZGV4Mik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX01F
U1NBR0U6Ci0gICAgICBleHRlbnNpb24tPnJlcGVhdGVkX21lc3NhZ2VfdmFsdWUtPlN3YXBFbGVt
ZW50cyhpbmRleDEsIGluZGV4Mik7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0KLXZvaWQgRXh0ZW5zaW9uU2V0OjpDbGVhcigpIHsKLSAgZm9yIChtYXA8aW50LCBFeHRl
bnNpb24+OjppdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uc18uYmVnaW4oKTsKLSAgICAgICBpdGVy
ICE9IGV4dGVuc2lvbnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICBpdGVyLT5zZWNvbmQuQ2xlYXIo
KTsKLSAgfQotfQotCi12b2lkIEV4dGVuc2lvblNldDo6TWVyZ2VGcm9tKGNvbnN0IEV4dGVuc2lv
blNldCYgb3RoZXIpIHsKLSAgZm9yIChtYXA8aW50LCBFeHRlbnNpb24+Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0gb3RoZXIuZXh0ZW5zaW9uc18uYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IG90aGVy
LmV4dGVuc2lvbnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICBjb25zdCBFeHRlbnNpb24mIG90aGVy
X2V4dGVuc2lvbiA9IGl0ZXItPnNlY29uZDsKLSAgICBJbnRlcm5hbEV4dGVuc2lvbk1lcmdlRnJv
bShpdGVyLT5maXJzdCwgb3RoZXJfZXh0ZW5zaW9uKTsKLSAgfQotfQotCi12b2lkIEV4dGVuc2lv
blNldDo6SW50ZXJuYWxFeHRlbnNpb25NZXJnZUZyb20oCi0gIGludCBudW1iZXIsIGNvbnN0IEV4
dGVuc2lvbiYgb3RoZXJfZXh0ZW5zaW9uKSB7Ci0gIGlmIChvdGhlcl9leHRlbnNpb24uaXNfcmVw
ZWF0ZWQpIHsKLSAgICBFeHRlbnNpb24qIGV4dGVuc2lvbjsKLSAgICBib29sIGlzX25ldyA9IE1h
eWJlTmV3RXh0ZW5zaW9uKG51bWJlciwgb3RoZXJfZXh0ZW5zaW9uLmRlc2NyaXB0b3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0ZW5zaW9uKTsKLSAgICBpZiAoaXNf
bmV3KSB7Ci0gICAgICAvLyBFeHRlbnNpb24gZGlkIG5vdCBhbHJlYWR5IGV4aXN0IGluIHNldC4K
LSAgICAgIGV4dGVuc2lvbi0+dHlwZSA9IG90aGVyX2V4dGVuc2lvbi50eXBlOwotICAgICAgZXh0
ZW5zaW9uLT5pc19wYWNrZWQgPSBvdGhlcl9leHRlbnNpb24uaXNfcGFja2VkOwotICAgICAgZXh0
ZW5zaW9uLT5pc19yZXBlYXRlZCA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdPT0dMRV9E
Q0hFQ0tfRVEoZXh0ZW5zaW9uLT50eXBlLCBvdGhlcl9leHRlbnNpb24udHlwZSk7Ci0gICAgICBH
T09HTEVfRENIRUNLX0VRKGV4dGVuc2lvbi0+aXNfcGFja2VkLCBvdGhlcl9leHRlbnNpb24uaXNf
cGFja2VkKTsKLSAgICAgIEdPT0dMRV9EQ0hFQ0soZXh0ZW5zaW9uLT5pc19yZXBlYXRlZCk7Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChjcHBfdHlwZShvdGhlcl9leHRlbnNpb24udHlwZSkpIHsKLSNk
ZWZpbmUgSEFORExFX1RZUEUoVVBQRVJDQVNFLCBMT1dFUkNBU0UsIFJFUEVBVEVEX1RZUEUpICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFXyMj
VVBQRVJDQVNFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoaXNf
bmV3KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICBleHRlbnNpb24tPnJlcGVhdGVkXyMjTE9XRVJDQVNFIyNfdmFsdWUg
PSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBBcmVuYTo6Q3JlYXRlTWVz
c2FnZTxSRVBFQVRFRF9UWVBFID4oYXJlbmFfKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgZXh0ZW5zaW9uLT5yZXBlYXRlZF8jI0xPV0VSQ0FTRSMj
X3ZhbHVlLT5NZXJnZUZyb20oICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKm90aGVyX2V4
dGVuc2lvbi5yZXBlYXRlZF8jI0xPV0VSQ0FTRSMjX3ZhbHVlKTsgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBicmVhazsKLQotICAgICAgSEFORExFX1RZUEUoICBJTlQzMiwgICBpbnQzMiwg
UmVwZWF0ZWRGaWVsZCAgIDwgIGludDMyPik7Ci0gICAgICBIQU5ETEVfVFlQRSggIElOVDY0LCAg
IGludDY0LCBSZXBlYXRlZEZpZWxkICAgPCAgaW50NjQ+KTsKLSAgICAgIEhBTkRMRV9UWVBFKCBV
SU5UMzIsICB1aW50MzIsIFJlcGVhdGVkRmllbGQgICA8IHVpbnQzMj4pOwotICAgICAgSEFORExF
X1RZUEUoIFVJTlQ2NCwgIHVpbnQ2NCwgUmVwZWF0ZWRGaWVsZCAgIDwgdWludDY0Pik7Ci0gICAg
ICBIQU5ETEVfVFlQRSggIEZMT0FULCAgIGZsb2F0LCBSZXBlYXRlZEZpZWxkICAgPCAgZmxvYXQ+
KTsKLSAgICAgIEhBTkRMRV9UWVBFKCBET1VCTEUsICBkb3VibGUsIFJlcGVhdGVkRmllbGQgICA8
IGRvdWJsZT4pOwotICAgICAgSEFORExFX1RZUEUoICAgQk9PTCwgICAgYm9vbCwgUmVwZWF0ZWRG
aWVsZCAgIDwgICBib29sPik7Ci0gICAgICBIQU5ETEVfVFlQRSggICBFTlVNLCAgICBlbnVtLCBS
ZXBlYXRlZEZpZWxkICAgPCAgICBpbnQ+KTsKLSAgICAgIEhBTkRMRV9UWVBFKCBTVFJJTkcsICBz
dHJpbmcsIFJlcGVhdGVkUHRyRmllbGQ8IHN0cmluZz4pOwotI3VuZGVmIEhBTkRMRV9UWVBFCi0K
LSAgICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgaWYg
KGlzX25ldykgewotICAgICAgICAgIGV4dGVuc2lvbi0+cmVwZWF0ZWRfbWVzc2FnZV92YWx1ZSA9
Ci0gICAgICAgICAgICAgIEFyZW5hOjpDcmVhdGVNZXNzYWdlPFJlcGVhdGVkUHRyRmllbGQ8TWVz
c2FnZUxpdGU+ID4oYXJlbmFfKTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBjYW4ndCBjYWxs
IFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZUxpdGU+OjpNZXJnZUZyb20oKSBiZWNhdXNlCi0gICAg
ICAgIC8vIGl0IHdvdWxkIGF0dGVtcHQgdG8gYWxsb2NhdGUgbmV3IG9iamVjdHMuCi0gICAgICAg
IFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZUxpdGU+KiBvdGhlcl9yZXBlYXRlZF9tZXNzYWdlID0K
LSAgICAgICAgICAgIG90aGVyX2V4dGVuc2lvbi5yZXBlYXRlZF9tZXNzYWdlX3ZhbHVlOwotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90aGVyX3JlcGVhdGVkX21lc3NhZ2UtPnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgICAgY29uc3QgTWVzc2FnZUxpdGUmIG90aGVyX21lc3NhZ2UgPSBvdGhl
cl9yZXBlYXRlZF9tZXNzYWdlLT5HZXQoaSk7Ci0gICAgICAgICAgTWVzc2FnZUxpdGUqIHRhcmdl
dCA9IGV4dGVuc2lvbi0+cmVwZWF0ZWRfbWVzc2FnZV92YWx1ZQotICAgICAgICAgICAgICAgICAg
IC0+QWRkRnJvbUNsZWFyZWQ8R2VuZXJpY1R5cGVIYW5kbGVyPE1lc3NhZ2VMaXRlPiA+KCk7Ci0g
ICAgICAgICAgaWYgKHRhcmdldCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB0YXJnZXQgPSBvdGhl
cl9tZXNzYWdlLk5ldyhhcmVuYV8pOwotICAgICAgICAgICAgZXh0ZW5zaW9uLT5yZXBlYXRlZF9t
ZXNzYWdlX3ZhbHVlLT5BZGRBbGxvY2F0ZWQodGFyZ2V0KTsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgdGFyZ2V0LT5DaGVja1R5cGVBbmRNZXJnZUZyb20ob3RoZXJfbWVzc2FnZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmICghb3RoZXJfZXh0
ZW5zaW9uLmlzX2NsZWFyZWQpIHsKLSAgICAgIHN3aXRjaCAoY3BwX3R5cGUob3RoZXJfZXh0ZW5z
aW9uLnR5cGUpKSB7Ci0jZGVmaW5lIEhBTkRMRV9UWVBFKFVQUEVSQ0FTRSwgTE9XRVJDQVNFLCBD
QU1FTENBU0UpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNhc2UgV2lyZUZvcm1h
dExpdGU6OkNQUFRZUEVfIyNVUFBFUkNBU0U6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgU2V0IyNDQU1FTENBU0UobnVtYmVyLCBvdGhlcl9leHRlbnNpb24udHlwZSwgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJfZXh0ZW5z
aW9uLkxPV0VSQ0FTRSMjX3ZhbHVlLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgb3RoZXJfZXh0ZW5zaW9uLmRlc2NyaXB0b3IpOyAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgSEFORExFX1RZUEUoIElOVDMyLCAgaW50
MzIsICBJbnQzMik7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCBJTlQ2NCwgIGludDY0LCAgSW50NjQp
OwotICAgICAgICBIQU5ETEVfVFlQRShVSU5UMzIsIHVpbnQzMiwgVUludDMyKTsKLSAgICAgICAg
SEFORExFX1RZUEUoVUlOVDY0LCB1aW50NjQsIFVJbnQ2NCk7Ci0gICAgICAgIEhBTkRMRV9UWVBF
KCBGTE9BVCwgIGZsb2F0LCAgRmxvYXQpOwotICAgICAgICBIQU5ETEVfVFlQRShET1VCTEUsIGRv
dWJsZSwgRG91YmxlKTsKLSAgICAgICAgSEFORExFX1RZUEUoICBCT09MLCAgIGJvb2wsICAgQm9v
bCk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCAgRU5VTSwgICBlbnVtLCAgIEVudW0pOwotI3VuZGVm
IEhBTkRMRV9UWVBFCi0gICAgICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfU1RSSU5H
OgotICAgICAgICAgIFNldFN0cmluZyhudW1iZXIsIG90aGVyX2V4dGVuc2lvbi50eXBlLAotICAg
ICAgICAgICAgICAgICAgICAqb3RoZXJfZXh0ZW5zaW9uLnN0cmluZ192YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgb3RoZXJfZXh0ZW5zaW9uLmRlc2NyaXB0b3IpOwotICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX01FU1NBR0U6IHsKLSAgICAg
ICAgICBFeHRlbnNpb24qIGV4dGVuc2lvbjsKLSAgICAgICAgICBib29sIGlzX25ldyA9IE1heWJl
TmV3RXh0ZW5zaW9uKG51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG90aGVyX2V4dGVuc2lvbi5kZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmV4dGVuc2lvbik7Ci0gICAgICAgICAgaWYgKGlzX25ldykg
ewotICAgICAgICAgICAgZXh0ZW5zaW9uLT50eXBlID0gb3RoZXJfZXh0ZW5zaW9uLnR5cGU7Ci0g
ICAgICAgICAgICBleHRlbnNpb24tPmlzX3BhY2tlZCA9IG90aGVyX2V4dGVuc2lvbi5pc19wYWNr
ZWQ7Ci0gICAgICAgICAgICBleHRlbnNpb24tPmlzX3JlcGVhdGVkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBpZiAob3RoZXJfZXh0ZW5zaW9uLmlzX2xhenkpIHsKLSAgICAgICAgICAgICAgZXh0ZW5z
aW9uLT5pc19sYXp5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgZXh0ZW5zaW9uLT5sYXp5bWVzc2Fn
ZV92YWx1ZSA9Ci0gICAgICAgICAgICAgICAgICBvdGhlcl9leHRlbnNpb24ubGF6eW1lc3NhZ2Vf
dmFsdWUtPk5ldyhhcmVuYV8pOwotICAgICAgICAgICAgICBleHRlbnNpb24tPmxhenltZXNzYWdl
X3ZhbHVlLT5NZXJnZUZyb20oCi0gICAgICAgICAgICAgICAgICAqb3RoZXJfZXh0ZW5zaW9uLmxh
enltZXNzYWdlX3ZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGV4
dGVuc2lvbi0+aXNfbGF6eSA9IGZhbHNlOwotICAgICAgICAgICAgICBleHRlbnNpb24tPm1lc3Nh
Z2VfdmFsdWUgPQotICAgICAgICAgICAgICAgICAgb3RoZXJfZXh0ZW5zaW9uLm1lc3NhZ2VfdmFs
dWUtPk5ldyhhcmVuYV8pOwotICAgICAgICAgICAgICBleHRlbnNpb24tPm1lc3NhZ2VfdmFsdWUt
PkNoZWNrVHlwZUFuZE1lcmdlRnJvbSgKLSAgICAgICAgICAgICAgICAgICpvdGhlcl9leHRlbnNp
b24ubWVzc2FnZV92YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEdPT0dMRV9EQ0hFQ0tfRVEoZXh0ZW5zaW9uLT50eXBlLCBvdGhlcl9leHRlbnNp
b24udHlwZSk7Ci0gICAgICAgICAgICBHT09HTEVfRENIRUNLX0VRKGV4dGVuc2lvbi0+aXNfcGFj
a2VkLG90aGVyX2V4dGVuc2lvbi5pc19wYWNrZWQpOwotICAgICAgICAgICAgR09PR0xFX0RDSEVD
SyghZXh0ZW5zaW9uLT5pc19yZXBlYXRlZCk7Ci0gICAgICAgICAgICBpZiAob3RoZXJfZXh0ZW5z
aW9uLmlzX2xhenkpIHsKLSAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbi0+aXNfbGF6eSkgewot
ICAgICAgICAgICAgICAgIGV4dGVuc2lvbi0+bGF6eW1lc3NhZ2VfdmFsdWUtPk1lcmdlRnJvbSgK
LSAgICAgICAgICAgICAgICAgICAgKm90aGVyX2V4dGVuc2lvbi5sYXp5bWVzc2FnZV92YWx1ZSk7
Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uLT5tZXNz
YWdlX3ZhbHVlLT5DaGVja1R5cGVBbmRNZXJnZUZyb20oCi0gICAgICAgICAgICAgICAgICAgIG90
aGVyX2V4dGVuc2lvbi5sYXp5bWVzc2FnZV92YWx1ZS0+R2V0TWVzc2FnZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICpleHRlbnNpb24tPm1lc3NhZ2VfdmFsdWUpKTsKLSAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbi0+aXNf
bGF6eSkgewotICAgICAgICAgICAgICAgIGV4dGVuc2lvbi0+bGF6eW1lc3NhZ2VfdmFsdWUtPk11
dGFibGVNZXNzYWdlKAotICAgICAgICAgICAgICAgICAgICAqb3RoZXJfZXh0ZW5zaW9uLm1lc3Nh
Z2VfdmFsdWUpLT5DaGVja1R5cGVBbmRNZXJnZUZyb20oCi0gICAgICAgICAgICAgICAgICAgICAg
ICAqb3RoZXJfZXh0ZW5zaW9uLm1lc3NhZ2VfdmFsdWUpOwotICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGV4dGVuc2lvbi0+bWVzc2FnZV92YWx1ZS0+Q2hlY2tUeXBlQW5k
TWVyZ2VGcm9tKAotICAgICAgICAgICAgICAgICAgICAqb3RoZXJfZXh0ZW5zaW9uLm1lc3NhZ2Vf
dmFsdWUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAg
ICAgICAgIGV4dGVuc2lvbi0+aXNfY2xlYXJlZCA9IGZhbHNlOwotICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uU2V0OjpT
d2FwKEV4dGVuc2lvblNldCogeCkgewotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSB4LT5H
ZXRBcmVuYU5vVmlydHVhbCgpKSB7Ci0gICAgZXh0ZW5zaW9uc18uc3dhcCh4LT5leHRlbnNpb25z
Xyk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gVE9ETyhjZmFsbGluLCByb2hhbmFuaWwpOiBXZSBtYXli
ZSBhYmxlIHRvIG9wdGltaXplIGEgY2FzZSB3aGVyZSB3ZSBhcmUKLSAgICAvLyBzd2FwcGluZyBm
cm9tIGhlYXAgdG8gYXJlbmEtYWxsb2NhdGVkIGV4dGVuc2lvbiBzZXQsIGJ5IGp1c3QgT3duKCkn
aW5nCi0gICAgLy8gdGhlIGV4dGVuc2lvbnMuCi0gICAgRXh0ZW5zaW9uU2V0IGV4dGVuc2lvbl9z
ZXQ7Ci0gICAgZXh0ZW5zaW9uX3NldC5NZXJnZUZyb20oKngpOwotICAgIHgtPkNsZWFyKCk7Ci0g
ICAgeC0+TWVyZ2VGcm9tKCp0aGlzKTsKLSAgICBDbGVhcigpOwotICAgIE1lcmdlRnJvbShleHRl
bnNpb25fc2V0KTsKLSAgfQotfQotCi12b2lkIEV4dGVuc2lvblNldDo6U3dhcEV4dGVuc2lvbihF
eHRlbnNpb25TZXQqIG90aGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG51bWJlcikgewotICBpZiAodGhpcyA9PSBvdGhlcikgcmV0dXJuOwotICBtYXA8aW50LCBFeHRl
bnNpb24+OjppdGVyYXRvciB0aGlzX2l0ZXIgPSBleHRlbnNpb25zXy5maW5kKG51bWJlcik7Ci0g
IG1hcDxpbnQsIEV4dGVuc2lvbj46Oml0ZXJhdG9yIG90aGVyX2l0ZXIgPSBvdGhlci0+ZXh0ZW5z
aW9uc18uZmluZChudW1iZXIpOwotCi0gIGlmICh0aGlzX2l0ZXIgPT0gZXh0ZW5zaW9uc18uZW5k
KCkgJiYKLSAgICAgIG90aGVyX2l0ZXIgPT0gb3RoZXItPmV4dGVuc2lvbnNfLmVuZCgpKSB7Ci0g
ICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKHRoaXNfaXRlciAhPSBleHRlbnNpb25zXy5lbmQoKSAm
JgotICAgICAgb3RoZXJfaXRlciAhPSBvdGhlci0+ZXh0ZW5zaW9uc18uZW5kKCkpIHsKLSAgICBp
ZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBvdGhlci0+R2V0QXJlbmFOb1ZpcnR1YWwoKSkgewot
ICAgICAgdXNpbmcgc3RkOjpzd2FwOwotICAgICAgc3dhcCh0aGlzX2l0ZXItPnNlY29uZCwgb3Ro
ZXJfaXRlci0+c2Vjb25kKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gVE9ETyhjZmFsbGluLCBy
b2hhbmFuaWwpOiBXZSBjb3VsZCBmdXJ0aGVyIG9wdGltaXplIHRoZXNlIGNhc2VzLAotICAgICAg
Ly8gZXNwZWNpYWxseSBhdm9pZCBjcmVhdGlvbiBvZiBFeHRlbnNpb25TZXQsIGFuZCBtb3ZlIE1l
cmdlRnJvbSBsb2dpYwotICAgICAgLy8gaW50byBFeHRlbnNpb25zIGl0c2VsZiAod2hpY2ggdGFr
ZXMgYXJlbmEgYXMgYW4gYXJndW1lbnQpLgotICAgICAgLy8gV2UgZG8gaXQgdGhpcyB3YXkgdG8g
cmV1c2UgdGhlIGNvcHktYWNyb3NzLWFyZW5hcyBsb2dpYyBhbHJlYWR5Ci0gICAgICAvLyBpbXBs
ZW1lbnRlZCBpbiBFeHRlbnNpb25TZXQncyBNZXJnZUZyb20uCi0gICAgICBFeHRlbnNpb25TZXQg
dGVtcDsKLSAgICAgIHRlbXAuSW50ZXJuYWxFeHRlbnNpb25NZXJnZUZyb20obnVtYmVyLCBvdGhl
cl9pdGVyLT5zZWNvbmQpOwotICAgICAgbWFwPGludCwgRXh0ZW5zaW9uPjo6aXRlcmF0b3IgdGVt
cF9pdGVyID0gdGVtcC5leHRlbnNpb25zXy5maW5kKG51bWJlcik7Ci0gICAgICBvdGhlcl9pdGVy
LT5zZWNvbmQuQ2xlYXIoKTsKLSAgICAgIG90aGVyLT5JbnRlcm5hbEV4dGVuc2lvbk1lcmdlRnJv
bShudW1iZXIsIHRoaXNfaXRlci0+c2Vjb25kKTsKLSAgICAgIHRoaXNfaXRlci0+c2Vjb25kLkNs
ZWFyKCk7Ci0gICAgICBJbnRlcm5hbEV4dGVuc2lvbk1lcmdlRnJvbShudW1iZXIsIHRlbXBfaXRl
ci0+c2Vjb25kKTsKLSAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKHRoaXNfaXRlciA9
PSBleHRlbnNpb25zXy5lbmQoKSkgewotICAgIGlmIChHZXRBcmVuYU5vVmlydHVhbCgpID09IG90
aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKSB7Ci0gICAgICBleHRlbnNpb25zXy5pbnNlcnQoc3Rk
OjptYWtlX3BhaXIobnVtYmVyLCBvdGhlcl9pdGVyLT5zZWNvbmQpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgSW50ZXJuYWxFeHRlbnNpb25NZXJnZUZyb20obnVtYmVyLCBvdGhlcl9pdGVyLT5zZWNv
bmQpOwotICAgIH0KLSAgICBvdGhlci0+ZXh0ZW5zaW9uc18uZXJhc2UobnVtYmVyKTsKLSAgICBy
ZXR1cm47Ci0gIH0KLQotICBpZiAob3RoZXJfaXRlciA9PSBvdGhlci0+ZXh0ZW5zaW9uc18uZW5k
KCkpIHsKLSAgICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBvdGhlci0+R2V0QXJlbmFOb1Zp
cnR1YWwoKSkgewotICAgICAgb3RoZXItPmV4dGVuc2lvbnNfLmluc2VydChzdGQ6Om1ha2VfcGFp
cihudW1iZXIsIHRoaXNfaXRlci0+c2Vjb25kKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG90aGVy
LT5JbnRlcm5hbEV4dGVuc2lvbk1lcmdlRnJvbShudW1iZXIsIHRoaXNfaXRlci0+c2Vjb25kKTsK
LSAgICB9Ci0gICAgZXh0ZW5zaW9uc18uZXJhc2UobnVtYmVyKTsKLSAgICByZXR1cm47Ci0gIH0K
LX0KLQotYm9vbCBFeHRlbnNpb25TZXQ6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0gIC8vIEV4
dGVuc2lvbnMgYXJlIG5ldmVyIHJlcXVpcmVkLiAgSG93ZXZlciwgd2UgbmVlZCB0byBjaGVjayB0
aGF0IGFsbAotICAvLyBlbWJlZGRlZCBtZXNzYWdlcyBhcmUgaW5pdGlhbGl6ZWQuCi0gIGZvciAo
bWFwPGludCwgRXh0ZW5zaW9uPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbnNfLmJl
Z2luKCk7Ci0gICAgICAgaXRlciAhPSBleHRlbnNpb25zXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
Y29uc3QgRXh0ZW5zaW9uJiBleHRlbnNpb24gPSBpdGVyLT5zZWNvbmQ7Ci0gICAgaWYgKGNwcF90
eXBlKGV4dGVuc2lvbi50eXBlKSA9PSBXaXJlRm9ybWF0TGl0ZTo6Q1BQVFlQRV9NRVNTQUdFKSB7
Ci0gICAgICBpZiAoZXh0ZW5zaW9uLmlzX3JlcGVhdGVkKSB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZXh0ZW5zaW9uLnJlcGVhdGVkX21lc3NhZ2VfdmFsdWUtPnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgICAgaWYgKCFleHRlbnNpb24ucmVwZWF0ZWRfbWVzc2FnZV92YWx1ZS0+R2V0KGkp
LklzSW5pdGlhbGl6ZWQoKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFleHRlbnNpb24uaXNf
Y2xlYXJlZCkgewotICAgICAgICAgIGlmIChleHRlbnNpb24uaXNfbGF6eSkgewotICAgICAgICAg
ICAgaWYgKCFleHRlbnNpb24ubGF6eW1lc3NhZ2VfdmFsdWUtPklzSW5pdGlhbGl6ZWQoKSkgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWV4dGVuc2lv
bi5tZXNzYWdlX3ZhbHVlLT5Jc0luaXRpYWxpemVkKCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBFeHRlbnNpb25TZXQ6OkZpbmRFeHRlbnNpb25JbmZvRnJvbVRhZygKLSAgICB1aW50
MzIgdGFnLCBFeHRlbnNpb25GaW5kZXIqIGV4dGVuc2lvbl9maW5kZXIsIGludCogZmllbGRfbnVt
YmVyLAotICAgIEV4dGVuc2lvbkluZm8qIGV4dGVuc2lvbiwgYm9vbCogd2FzX3BhY2tlZF9vbl93
aXJlKSB7Ci0gICpmaWVsZF9udW1iZXIgPSBXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1i
ZXIodGFnKTsKLSAgV2lyZUZvcm1hdExpdGU6OldpcmVUeXBlIHdpcmVfdHlwZSA9IFdpcmVGb3Jt
YXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpOwotICByZXR1cm4gRmluZEV4dGVuc2lvbkluZm9G
cm9tRmllbGROdW1iZXIod2lyZV90eXBlLCAqZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX2ZpbmRlciwgZXh0ZW5zaW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzX3BhY2tlZF9vbl93
aXJlKTsKLX0KLQotYm9vbCBFeHRlbnNpb25TZXQ6OkZpbmRFeHRlbnNpb25JbmZvRnJvbUZpZWxk
TnVtYmVyKAotICAgIGludCB3aXJlX3R5cGUsIGludCBmaWVsZF9udW1iZXIsIEV4dGVuc2lvbkZp
bmRlciogZXh0ZW5zaW9uX2ZpbmRlciwKLSAgICBFeHRlbnNpb25JbmZvKiBleHRlbnNpb24sIGJv
b2wqIHdhc19wYWNrZWRfb25fd2lyZSkgewotICBpZiAoIWV4dGVuc2lvbl9maW5kZXItPkZpbmQo
ZmllbGRfbnVtYmVyLCBleHRlbnNpb24pKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
V2lyZUZvcm1hdExpdGU6OldpcmVUeXBlIGV4cGVjdGVkX3dpcmVfdHlwZSA9Ci0gICAgICBXaXJl
Rm9ybWF0TGl0ZTo6V2lyZVR5cGVGb3JGaWVsZFR5cGUocmVhbF90eXBlKGV4dGVuc2lvbi0+dHlw
ZSkpOwotCi0gIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBwYWNrZWQgZmllbGQuCi0gICp3YXNfcGFj
a2VkX29uX3dpcmUgPSBmYWxzZTsKLSAgaWYgKGV4dGVuc2lvbi0+aXNfcmVwZWF0ZWQgJiYKLSAg
ICAgIHdpcmVfdHlwZSA9PSBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRF
RCAmJgotICAgICAgaXNfcGFja2FibGUoZXhwZWN0ZWRfd2lyZV90eXBlKSkgewotICAgICp3YXNf
cGFja2VkX29uX3dpcmUgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIC8vIE90aGVy
d2lzZSB0aGUgd2lyZSB0eXBlIG11c3QgbWF0Y2guCi0gIHJldHVybiBleHBlY3RlZF93aXJlX3R5
cGUgPT0gd2lyZV90eXBlOwotfQotCi1ib29sIEV4dGVuc2lvblNldDo6UGFyc2VGaWVsZCh1aW50
MzIgdGFnLCBpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFeHRlbnNpb25GaW5kZXIqIGV4dGVuc2lvbl9maW5kZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGaWVsZFNraXBwZXIqIGZpZWxkX3NraXBwZXIpIHsKLSAgaW50
IG51bWJlcjsKLSAgYm9vbCB3YXNfcGFja2VkX29uX3dpcmU7Ci0gIEV4dGVuc2lvbkluZm8gZXh0
ZW5zaW9uOwotICBpZiAoIUZpbmRFeHRlbnNpb25JbmZvRnJvbVRhZygKLSAgICAgIHRhZywgZXh0
ZW5zaW9uX2ZpbmRlciwgJm51bWJlciwgJmV4dGVuc2lvbiwgJndhc19wYWNrZWRfb25fd2lyZSkp
IHsKLSAgICByZXR1cm4gZmllbGRfc2tpcHBlci0+U2tpcEZpZWxkKGlucHV0LCB0YWcpOwotICB9
IGVsc2UgewotICAgIHJldHVybiBQYXJzZUZpZWxkV2l0aEV4dGVuc2lvbkluZm8oCi0gICAgICAg
IG51bWJlciwgd2FzX3BhY2tlZF9vbl93aXJlLCBleHRlbnNpb24sIGlucHV0LCBmaWVsZF9za2lw
cGVyKTsKLSAgfQotfQotCi1ib29sIEV4dGVuc2lvblNldDo6UGFyc2VGaWVsZFdpdGhFeHRlbnNp
b25JbmZvKAotICAgIGludCBudW1iZXIsIGJvb2wgd2FzX3BhY2tlZF9vbl93aXJlLCBjb25zdCBF
eHRlbnNpb25JbmZvJiBleHRlbnNpb24sCi0gICAgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0
LAotICAgIEZpZWxkU2tpcHBlciogZmllbGRfc2tpcHBlcikgewotICAvLyBFeHBsaWNpdGx5IG5v
dCByZWFkIGV4dGVuc2lvbi5pc19wYWNrZWQsIGluc3RlYWQgY2hlY2sgd2hldGhlciB0aGUgZmll
bGQKLSAgLy8gd2FzIGVuY29kZWQgaW4gcGFja2VkIGZvcm0gb24gdGhlIHdpcmUuCi0gIGlmICh3
YXNfcGFja2VkX29uX3dpcmUpIHsKLSAgICB1aW50MzIgc2l6ZTsKLSAgICBpZiAoIWlucHV0LT5S
ZWFkVmFyaW50MzIoJnNpemUpKSByZXR1cm4gZmFsc2U7Ci0gICAgaW86OkNvZGVkSW5wdXRTdHJl
YW06OkxpbWl0IGxpbWl0ID0gaW5wdXQtPlB1c2hMaW1pdChzaXplKTsKLQotICAgIHN3aXRjaCAo
ZXh0ZW5zaW9uLnR5cGUpIHsKLSNkZWZpbmUgSEFORExFX1RZUEUoVVBQRVJDQVNFLCBDUFBfQ0FN
RUxDQVNFLCBDUFBfTE9XRVJDQVNFKSAgICAgICAgXAotICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0
ZTo6VFlQRV8jI1VQUEVSQ0FTRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgd2hpbGUgKGlucHV0LT5CeXRlc1VudGlsTGltaXQoKSA+IDApIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgQ1BQX0xPV0VSQ0FTRSB2YWx1ZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgIGlmICghV2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENQUF9MT1dFUkNBU0UsIFdpcmVG
b3JtYXRMaXRlOjpUWVBFXyMjVVBQRVJDQVNFPiggICAgICAgICAgICBcCi0gICAgICAgICAgICAg
ICAgaW5wdXQsICZ2YWx1ZSkpIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgIEFkZCMjQ1BQX0NBTUVMQ0FTRShudW1iZXIsIFdpcmVGb3Jt
YXRMaXRlOjpUWVBFXyMjVVBQRVJDQVNFLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXh0ZW5zaW9uLmlzX3BhY2tlZCwgdmFsdWUsICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbi5kZXNjcmlwdG9yKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgYnJlYWsKLQotICAgICAgSEFORExFX1RZUEUoICAgSU5UMzIsICBJbnQzMiwgICBpbnQz
Mik7Ci0gICAgICBIQU5ETEVfVFlQRSggICBJTlQ2NCwgIEludDY0LCAgIGludDY0KTsKLSAgICAg
IEhBTkRMRV9UWVBFKCAgVUlOVDMyLCBVSW50MzIsICB1aW50MzIpOwotICAgICAgSEFORExFX1RZ
UEUoICBVSU5UNjQsIFVJbnQ2NCwgIHVpbnQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQRSggIFNJTlQz
MiwgIEludDMyLCAgIGludDMyKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgU0lOVDY0LCAgSW50NjQs
ICAgaW50NjQpOwotICAgICAgSEFORExFX1RZUEUoIEZJWEVEMzIsIFVJbnQzMiwgIHVpbnQzMik7
Ci0gICAgICBIQU5ETEVfVFlQRSggRklYRUQ2NCwgVUludDY0LCAgdWludDY0KTsKLSAgICAgIEhB
TkRMRV9UWVBFKFNGSVhFRDMyLCAgSW50MzIsICAgaW50MzIpOwotICAgICAgSEFORExFX1RZUEUo
U0ZJWEVENjQsICBJbnQ2NCwgICBpbnQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQRSggICBGTE9BVCwg
IEZsb2F0LCAgIGZsb2F0KTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgRE9VQkxFLCBEb3VibGUsICBk
b3VibGUpOwotICAgICAgSEFORExFX1RZUEUoICAgIEJPT0wsICAgQm9vbCwgICAgYm9vbCk7Ci0j
dW5kZWYgSEFORExFX1RZUEUKLQotICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9FTlVN
OgotICAgICAgICB3aGlsZSAoaW5wdXQtPkJ5dGVzVW50aWxMaW1pdCgpID4gMCkgewotICAgICAg
ICAgIGludCB2YWx1ZTsKLSAgICAgICAgICBpZiAoIVdpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0
aXZlPGludCwgV2lyZUZvcm1hdExpdGU6OlRZUEVfRU5VTT4oCi0gICAgICAgICAgICAgICAgICBp
bnB1dCwgJnZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGlmIChleHRlbnNpb24uZW51
bV92YWxpZGl0eV9jaGVjay5mdW5jKAotICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLmVudW1f
dmFsaWRpdHlfY2hlY2suYXJnLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIEFkZEVudW0obnVtYmVy
LCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9FTlVNLCBleHRlbnNpb24uaXNfcGFja2VkLAotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSwgZXh0ZW5zaW9uLmRlc2NyaXB0b3IpOwotICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBJbnZhbGlkIHZhbHVlLiAgVHJlYXQgYXMgdW5rbm93bi4K
LSAgICAgICAgICAgIGZpZWxkX3NraXBwZXItPlNraXBVbmtub3duRW51bShudW1iZXIsIHZhbHVl
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Ug
V2lyZUZvcm1hdExpdGU6OlRZUEVfU1RSSU5HOgotICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6
VFlQRV9CWVRFUzoKLSAgICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OlRZUEVfR1JPVVA6Ci0gICAg
ICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpUWVBFX01FU1NBR0U6Ci0gICAgICAgIEdPT0dMRV9MT0co
RkFUQUwpIDw8ICJOb24tcHJpbWl0aXZlIHR5cGVzIGNhbid0IGJlIHBhY2tlZC4iOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBpbnB1dC0+UG9wTGltaXQobGltaXQpOwotICB9IGVsc2Ug
ewotICAgIHN3aXRjaCAoZXh0ZW5zaW9uLnR5cGUpIHsKLSNkZWZpbmUgSEFORExFX1RZUEUoVVBQ
RVJDQVNFLCBDUFBfQ0FNRUxDQVNFLCBDUFBfTE9XRVJDQVNFKSAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjVVBQRVJDQVNFOiB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDUFBfTE9XRVJDQVNFIHZhbHVlOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgaWYgKCFXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQ1BQX0xPV0VSQ0FTRSwgV2lyZUZv
cm1hdExpdGU6OlRZUEVfIyNVUFBFUkNBU0U+KCAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgaW5wdXQsICZ2YWx1ZSkpIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgaWYgKGV4dGVuc2lvbi5pc19yZXBlYXRlZCkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgQWRkIyNDUFBf
Q0FNRUxDQVNFKG51bWJlciwgV2lyZUZvcm1hdExpdGU6OlRZUEVfIyNVUFBFUkNBU0UsICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24uaXNfcGFja2VkLCB2
YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXh0ZW5zaW9uLmRlc2NyaXB0b3IpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIFNldCMjQ1BQX0NBTUVMQ0FTRShudW1i
ZXIsIFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjVVBQRVJDQVNFLCB2YWx1ZSwgIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLmRlc2NyaXB0b3IpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSBicmVhawot
Ci0gICAgICBIQU5ETEVfVFlQRSggICBJTlQzMiwgIEludDMyLCAgIGludDMyKTsKLSAgICAgIEhB
TkRMRV9UWVBFKCAgIElOVDY0LCAgSW50NjQsICAgaW50NjQpOwotICAgICAgSEFORExFX1RZUEUo
ICBVSU5UMzIsIFVJbnQzMiwgIHVpbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQRSggIFVJTlQ2NCwg
VUludDY0LCAgdWludDY0KTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgU0lOVDMyLCAgSW50MzIsICAg
aW50MzIpOwotICAgICAgSEFORExFX1RZUEUoICBTSU5UNjQsICBJbnQ2NCwgICBpbnQ2NCk7Ci0g
ICAgICBIQU5ETEVfVFlQRSggRklYRUQzMiwgVUludDMyLCAgdWludDMyKTsKLSAgICAgIEhBTkRM
RV9UWVBFKCBGSVhFRDY0LCBVSW50NjQsICB1aW50NjQpOwotICAgICAgSEFORExFX1RZUEUoU0ZJ
WEVEMzIsICBJbnQzMiwgICBpbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQRShTRklYRUQ2NCwgIElu
dDY0LCAgIGludDY0KTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgIEZMT0FULCAgRmxvYXQsICAgZmxv
YXQpOwotICAgICAgSEFORExFX1RZUEUoICBET1VCTEUsIERvdWJsZSwgIGRvdWJsZSk7Ci0gICAg
ICBIQU5ETEVfVFlQRSggICAgQk9PTCwgICBCb29sLCAgICBib29sKTsKLSN1bmRlZiBIQU5ETEVf
VFlQRQotCi0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0VOVU06IHsKLSAgICAgICAg
aW50IHZhbHVlOwotICAgICAgICBpZiAoIVdpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPGlu
dCwgV2lyZUZvcm1hdExpdGU6OlRZUEVfRU5VTT4oCi0gICAgICAgICAgICAgICAgaW5wdXQsICZ2
YWx1ZSkpIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWV4dGVuc2lvbi5lbnVtX3ZhbGlk
aXR5X2NoZWNrLmZ1bmMoCi0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uLmVudW1fdmFsaWRpdHlf
Y2hlY2suYXJnLCB2YWx1ZSkpIHsKLSAgICAgICAgICAvLyBJbnZhbGlkIHZhbHVlLiAgVHJlYXQg
YXMgdW5rbm93bi4KLSAgICAgICAgICBmaWVsZF9za2lwcGVyLT5Ta2lwVW5rbm93bkVudW0obnVt
YmVyLCB2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9uLmlzX3JlcGVhdGVkKSB7
Ci0gICAgICAgICAgQWRkRW51bShudW1iZXIsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0VOVU0sIGV4
dGVuc2lvbi5pc19wYWNrZWQsIHZhbHVlLAotICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLmRl
c2NyaXB0b3IpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFNldEVudW0obnVtYmVyLCBX
aXJlRm9ybWF0TGl0ZTo6VFlQRV9FTlVNLCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgIGV4dGVu
c2lvbi5kZXNjcmlwdG9yKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQot
ICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9TVFJJTkc6ICB7Ci0gICAgICAgIHN0cmlu
ZyogdmFsdWUgPSBleHRlbnNpb24uaXNfcmVwZWF0ZWQgPwotICAgICAgICAgIEFkZFN0cmluZyhu
dW1iZXIsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX1NUUklORywgZXh0ZW5zaW9uLmRlc2NyaXB0b3Ip
IDoKLSAgICAgICAgICBNdXRhYmxlU3RyaW5nKG51bWJlciwgV2lyZUZvcm1hdExpdGU6OlRZUEVf
U1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLmRlc2NyaXB0b3IpOwot
ICAgICAgICBpZiAoIVdpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKGlucHV0LCB2YWx1ZSkpIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgV2lyZUZv
cm1hdExpdGU6OlRZUEVfQllURVM6ICB7Ci0gICAgICAgIHN0cmluZyogdmFsdWUgPSBleHRlbnNp
b24uaXNfcmVwZWF0ZWQgPwotICAgICAgICAgIEFkZFN0cmluZyhudW1iZXIsIFdpcmVGb3JtYXRM
aXRlOjpUWVBFX0JZVEVTLCBleHRlbnNpb24uZGVzY3JpcHRvcikgOgotICAgICAgICAgIE11dGFi
bGVTdHJpbmcobnVtYmVyLCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9CWVRFUywKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dGVuc2lvbi5kZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKCFXaXJlRm9y
bWF0TGl0ZTo6UmVhZEJ5dGVzKGlucHV0LCB2YWx1ZSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OlRZUEVfR1JPVVA6
IHsKLSAgICAgICAgTWVzc2FnZUxpdGUqIHZhbHVlID0gZXh0ZW5zaW9uLmlzX3JlcGVhdGVkID8K
LSAgICAgICAgICAgIEFkZE1lc3NhZ2UobnVtYmVyLCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9HUk9V
UCwKLSAgICAgICAgICAgICAgICAgICAgICAgKmV4dGVuc2lvbi5tZXNzYWdlX3Byb3RvdHlwZSwg
ZXh0ZW5zaW9uLmRlc2NyaXB0b3IpIDoKLSAgICAgICAgICAgIE11dGFibGVNZXNzYWdlKG51bWJl
ciwgV2lyZUZvcm1hdExpdGU6OlRZUEVfR1JPVVAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAqZXh0ZW5zaW9uLm1lc3NhZ2VfcHJvdG90eXBlLCBleHRlbnNpb24uZGVzY3JpcHRvcik7Ci0g
ICAgICAgIGlmICghV2lyZUZvcm1hdExpdGU6OlJlYWRHcm91cChudW1iZXIsIGlucHV0LCB2YWx1
ZSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2Ug
V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRTogewotICAgICAgICBNZXNzYWdlTGl0ZSogdmFs
dWUgPSBleHRlbnNpb24uaXNfcmVwZWF0ZWQgPwotICAgICAgICAgICAgQWRkTWVzc2FnZShudW1i
ZXIsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX01FU1NBR0UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICpleHRlbnNpb24ubWVzc2FnZV9wcm90b3R5cGUsIGV4dGVuc2lvbi5kZXNjcmlwdG9yKSA6Ci0g
ICAgICAgICAgICBNdXRhYmxlTWVzc2FnZShudW1iZXIsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX01F
U1NBR0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqZXh0ZW5zaW9uLm1lc3NhZ2VfcHJv
dG90eXBlLCBleHRlbnNpb24uZGVzY3JpcHRvcik7Ci0gICAgICAgIGlmICghV2lyZUZvcm1hdExp
dGU6OlJlYWRNZXNzYWdlKGlucHV0LCB2YWx1ZSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRXh0
ZW5zaW9uU2V0OjpQYXJzZUZpZWxkKHVpbnQzMiB0YWcsIGlvOjpDb2RlZElucHV0U3RyZWFtKiBp
bnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2VMaXRlKiBj
b250YWluaW5nX3R5cGUpIHsKLSAgRmllbGRTa2lwcGVyIHNraXBwZXI7Ci0gIEdlbmVyYXRlZEV4
dGVuc2lvbkZpbmRlciBmaW5kZXIoY29udGFpbmluZ190eXBlKTsKLSAgcmV0dXJuIFBhcnNlRmll
bGQodGFnLCBpbnB1dCwgJmZpbmRlciwgJnNraXBwZXIpOwotfQotCi1ib29sIEV4dGVuc2lvblNl
dDo6UGFyc2VGaWVsZCh1aW50MzIgdGFnLCBpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlTGl0ZSogY29udGFpbmlu
Z190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3Ry
ZWFtKiB1bmtub3duX2ZpZWxkcykgewotICBDb2RlZE91dHB1dFN0cmVhbUZpZWxkU2tpcHBlciBz
a2lwcGVyKHVua25vd25fZmllbGRzKTsKLSAgR2VuZXJhdGVkRXh0ZW5zaW9uRmluZGVyIGZpbmRl
cihjb250YWluaW5nX3R5cGUpOwotICByZXR1cm4gUGFyc2VGaWVsZCh0YWcsIGlucHV0LCAmZmlu
ZGVyLCAmc2tpcHBlcik7Ci19Ci0KLS8vIERlZmluZWQgaW4gZXh0ZW5zaW9uX3NldF9oZWF2eS5j
Yy4KLS8vIGJvb2wgRXh0ZW5zaW9uU2V0OjpQYXJzZUZpZWxkKHVpbnQzMiB0YWcsIGlvOjpDb2Rl
ZElucHV0U3RyZWFtKiBpbnB1dCwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE1lc3NhZ2VMaXRlKiBjb250YWluaW5nX3R5cGUsCi0vLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBVbmtub3duRmllbGRTZXQqIHVua25vd25fZmllbGRzKQotCi0vLyBEZWZpbmVk
IGluIGV4dGVuc2lvbl9zZXRfaGVhdnkuY2MuCi0vLyBib29sIEV4dGVuc2lvblNldDo6UGFyc2VN
ZXNzYWdlU2V0KGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLS8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZUxpdGUqIGNvbnRhaW5pbmdfdHlwZSwK
LS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5rbm93bkZpZWxkU2V0KiB1
bmtub3duX2ZpZWxkcyk7Ci0KLXZvaWQgRXh0ZW5zaW9uU2V0OjpTZXJpYWxpemVXaXRoQ2FjaGVk
U2l6ZXMoCi0gICAgaW50IHN0YXJ0X2ZpZWxkX251bWJlciwgaW50IGVuZF9maWVsZF9udW1iZXIs
Ci0gICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgbWFwPGludCwg
RXh0ZW5zaW9uPjo6Y29uc3RfaXRlcmF0b3IgaXRlcjsKLSAgZm9yIChpdGVyID0gZXh0ZW5zaW9u
c18ubG93ZXJfYm91bmQoc3RhcnRfZmllbGRfbnVtYmVyKTsKLSAgICAgICBpdGVyICE9IGV4dGVu
c2lvbnNfLmVuZCgpICYmIGl0ZXItPmZpcnN0IDwgZW5kX2ZpZWxkX251bWJlcjsKLSAgICAgICAr
K2l0ZXIpIHsKLSAgICBpdGVyLT5zZWNvbmQuU2VyaWFsaXplRmllbGRXaXRoQ2FjaGVkU2l6ZXMo
aXRlci0+Zmlyc3QsIG91dHB1dCk7Ci0gIH0KLX0KLQotaW50IEV4dGVuc2lvblNldDo6Qnl0ZVNp
emUoKSBjb25zdCB7Ci0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICBmb3IgKG1hcDxpbnQsIEV4
dGVuc2lvbj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25zXy5iZWdpbigpOwotICAg
ICAgIGl0ZXIgIT0gZXh0ZW5zaW9uc18uZW5kKCk7ICsraXRlcikgewotICAgIHRvdGFsX3NpemUg
Kz0gaXRlci0+c2Vjb25kLkJ5dGVTaXplKGl0ZXItPmZpcnN0KTsKLSAgfQotCi0gIHJldHVybiB0
b3RhbF9zaXplOwotfQotCi0vLyBEZWZpbmVkIGluIGV4dGVuc2lvbl9zZXRfaGVhdnkuY2MuCi0v
LyBpbnQgRXh0ZW5zaW9uU2V0OjpTcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCkgY29uc3QKLQotYm9v
bCBFeHRlbnNpb25TZXQ6Ok1heWJlTmV3RXh0ZW5zaW9uKGludCBudW1iZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbioqIHJl
c3VsdCkgewotICBwYWlyPG1hcDxpbnQsIEV4dGVuc2lvbj46Oml0ZXJhdG9yLCBib29sPiBpbnNl
cnRfcmVzdWx0ID0KLSAgICAgIGV4dGVuc2lvbnNfLmluc2VydChzdGQ6Om1ha2VfcGFpcihudW1i
ZXIsIEV4dGVuc2lvbigpKSk7Ci0gICpyZXN1bHQgPSAmaW5zZXJ0X3Jlc3VsdC5maXJzdC0+c2Vj
b25kOwotICAoKnJlc3VsdCktPmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwotICByZXR1cm4gaW5z
ZXJ0X3Jlc3VsdC5zZWNvbmQ7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIE1ldGhvZHMgb2YgRXh0
ZW5zaW9uU2V0OjpFeHRlbnNpb24KLQotdm9pZCBFeHRlbnNpb25TZXQ6OkV4dGVuc2lvbjo6Q2xl
YXIoKSB7Ci0gIGlmIChpc19yZXBlYXRlZCkgewotICAgIHN3aXRjaCAoY3BwX3R5cGUodHlwZSkp
IHsKLSNkZWZpbmUgSEFORExFX1RZUEUoVVBQRVJDQVNFLCBMT1dFUkNBU0UpICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFXyMjVVBQ
RVJDQVNFOiAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXBlYXRlZF8jI0xPV0VSQ0FT
RSMjX3ZhbHVlLT5DbGVhcigpOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYnJlYWsK
LQotICAgICAgSEFORExFX1RZUEUoICBJTlQzMiwgICBpbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQ
RSggIElOVDY0LCAgIGludDY0KTsKLSAgICAgIEhBTkRMRV9UWVBFKCBVSU5UMzIsICB1aW50MzIp
OwotICAgICAgSEFORExFX1RZUEUoIFVJTlQ2NCwgIHVpbnQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQ
RSggIEZMT0FULCAgIGZsb2F0KTsKLSAgICAgIEhBTkRMRV9UWVBFKCBET1VCTEUsICBkb3VibGUp
OwotICAgICAgSEFORExFX1RZUEUoICAgQk9PTCwgICAgYm9vbCk7Ci0gICAgICBIQU5ETEVfVFlQ
RSggICBFTlVNLCAgICBlbnVtKTsKLSAgICAgIEhBTkRMRV9UWVBFKCBTVFJJTkcsICBzdHJpbmcp
OwotICAgICAgSEFORExFX1RZUEUoTUVTU0FHRSwgbWVzc2FnZSk7Ci0jdW5kZWYgSEFORExFX1RZ
UEUKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKCFpc19jbGVhcmVkKSB7Ci0gICAgICBzd2l0
Y2ggKGNwcF90eXBlKHR5cGUpKSB7Ci0gICAgICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZ
UEVfU1RSSU5HOgotICAgICAgICAgIHN0cmluZ192YWx1ZS0+Y2xlYXIoKTsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6Q1BQVFlQRV9NRVNTQUdFOgotICAg
ICAgICAgIGlmIChpc19sYXp5KSB7Ci0gICAgICAgICAgICBsYXp5bWVzc2FnZV92YWx1ZS0+Q2xl
YXIoKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVzc2FnZV92YWx1ZS0+Q2xl
YXIoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgLy8gTm8gbmVlZCB0byBkbyBhbnl0aGluZy4gIEdldCooKSB3aWxsIHJldHVybiB0
aGUgZGVmYXVsdCB2YWx1ZQotICAgICAgICAgIC8vIGFzIGxvbmcgYXMgaXNfY2xlYXJlZCBpcyB0
cnVlIGFuZCBTZXQqKCkgd2lsbCBvdmVyd3JpdGUgdGhlCi0gICAgICAgICAgLy8gcHJldmlvdXMg
dmFsdWUuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlzX2NsZWFyZWQgPSB0
cnVlOwotICAgIH0KLSAgfQotfQotCi12b2lkIEV4dGVuc2lvblNldDo6RXh0ZW5zaW9uOjpTZXJp
YWxpemVGaWVsZFdpdGhDYWNoZWRTaXplcygKLSAgICBpbnQgbnVtYmVyLAotICAgIGlvOjpDb2Rl
ZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIGlmIChpc19yZXBlYXRlZCkgewotICAg
IGlmIChpc19wYWNrZWQpIHsKLSAgICAgIGlmIChjYWNoZWRfc2l6ZSA9PSAwKSByZXR1cm47Ci0K
LSAgICAgIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVRhZyhudW1iZXIsCi0gICAgICAgICAgV2lyZUZv
cm1hdExpdGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQsIG91dHB1dCk7Ci0gICAgICBvdXRw
dXQtPldyaXRlVmFyaW50MzIoY2FjaGVkX3NpemUpOwotCi0gICAgICBzd2l0Y2ggKHJlYWxfdHlw
ZSh0eXBlKSkgewotI2RlZmluZSBIQU5ETEVfVFlQRShVUFBFUkNBU0UsIENBTUVMQ0FTRSwgTE9X
RVJDQVNFKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY2FzZSBXaXJlRm9ybWF0
TGl0ZTo6VFlQRV8jI1VQUEVSQ0FTRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXRlZF8jI0xPV0VSQ0FTRSMjX3ZhbHVl
LT5zaXplKCk7IGkrKykgeyAgXAotICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6OldyaXRlIyND
QU1FTENBU0UjI05vVGFnKCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
cmVwZWF0ZWRfIyNMT1dFUkNBU0UjI192YWx1ZS0+R2V0KGkpLCBvdXRwdXQpOyAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAg
SEFORExFX1RZUEUoICAgSU5UMzIsICAgIEludDMyLCAgIGludDMyKTsKLSAgICAgICAgSEFORExF
X1RZUEUoICAgSU5UNjQsICAgIEludDY0LCAgIGludDY0KTsKLSAgICAgICAgSEFORExFX1RZUEUo
ICBVSU5UMzIsICAgVUludDMyLCAgdWludDMyKTsKLSAgICAgICAgSEFORExFX1RZUEUoICBVSU5U
NjQsICAgVUludDY0LCAgdWludDY0KTsKLSAgICAgICAgSEFORExFX1RZUEUoICBTSU5UMzIsICAg
U0ludDMyLCAgIGludDMyKTsKLSAgICAgICAgSEFORExFX1RZUEUoICBTSU5UNjQsICAgU0ludDY0
LCAgIGludDY0KTsKLSAgICAgICAgSEFORExFX1RZUEUoIEZJWEVEMzIsICBGaXhlZDMyLCAgdWlu
dDMyKTsKLSAgICAgICAgSEFORExFX1RZUEUoIEZJWEVENjQsICBGaXhlZDY0LCAgdWludDY0KTsK
LSAgICAgICAgSEFORExFX1RZUEUoU0ZJWEVEMzIsIFNGaXhlZDMyLCAgIGludDMyKTsKLSAgICAg
ICAgSEFORExFX1RZUEUoU0ZJWEVENjQsIFNGaXhlZDY0LCAgIGludDY0KTsKLSAgICAgICAgSEFO
RExFX1RZUEUoICAgRkxPQVQsICAgIEZsb2F0LCAgIGZsb2F0KTsKLSAgICAgICAgSEFORExFX1RZ
UEUoICBET1VCTEUsICAgRG91YmxlLCAgZG91YmxlKTsKLSAgICAgICAgSEFORExFX1RZUEUoICAg
IEJPT0wsICAgICBCb29sLCAgICBib29sKTsKLSAgICAgICAgSEFORExFX1RZUEUoICAgIEVOVU0s
ICAgICBFbnVtLCAgICBlbnVtKTsKLSN1bmRlZiBIQU5ETEVfVFlQRQotCi0gICAgICAgIGNhc2Ug
V2lyZUZvcm1hdExpdGU6OlRZUEVfU1RSSU5HOgotICAgICAgICBjYXNlIFdpcmVGb3JtYXRMaXRl
OjpUWVBFX0JZVEVTOgotICAgICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0dST1VQOgot
ICAgICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpUWVBFX01FU1NBR0U6Ci0gICAgICAgICAgR09P
R0xFX0xPRyhGQVRBTCkgPDwgIk5vbi1wcmltaXRpdmUgdHlwZXMgY2FuJ3QgYmUgcGFja2VkLiI7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN3aXRjaCAo
cmVhbF90eXBlKHR5cGUpKSB7Ci0jZGVmaW5lIEhBTkRMRV9UWVBFKFVQUEVSQ0FTRSwgQ0FNRUxD
QVNFLCBMT1dFUkNBU0UpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjYXNlIFdp
cmVGb3JtYXRMaXRlOjpUWVBFXyMjVVBQRVJDQVNFOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdGVkXyMjTE9XRVJDQVNF
IyNfdmFsdWUtPnNpemUoKTsgaSsrKSB7ICBcCi0gICAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6
V3JpdGUjI0NBTUVMQ0FTRShudW1iZXIsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICByZXBlYXRlZF8jI0xPV0VSQ0FTRSMjX3ZhbHVlLT5HZXQoaSksIG91dHB1dCk7ICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgYnJlYWsKLQot
ICAgICAgICBIQU5ETEVfVFlQRSggICBJTlQzMiwgICAgSW50MzIsICAgaW50MzIpOwotICAgICAg
ICBIQU5ETEVfVFlQRSggICBJTlQ2NCwgICAgSW50NjQsICAgaW50NjQpOwotICAgICAgICBIQU5E
TEVfVFlQRSggIFVJTlQzMiwgICBVSW50MzIsICB1aW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQ
RSggIFVJTlQ2NCwgICBVSW50NjQsICB1aW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRSggIFNJ
TlQzMiwgICBTSW50MzIsICAgaW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRSggIFNJTlQ2NCwg
ICBTSW50NjQsICAgaW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRSggRklYRUQzMiwgIEZpeGVk
MzIsICB1aW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRSggRklYRUQ2NCwgIEZpeGVkNjQsICB1
aW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRShTRklYRUQzMiwgU0ZpeGVkMzIsICAgaW50MzIp
OwotICAgICAgICBIQU5ETEVfVFlQRShTRklYRUQ2NCwgU0ZpeGVkNjQsICAgaW50NjQpOwotICAg
ICAgICBIQU5ETEVfVFlQRSggICBGTE9BVCwgICAgRmxvYXQsICAgZmxvYXQpOwotICAgICAgICBI
QU5ETEVfVFlQRSggIERPVUJMRSwgICBEb3VibGUsICBkb3VibGUpOwotICAgICAgICBIQU5ETEVf
VFlQRSggICAgQk9PTCwgICAgIEJvb2wsICAgIGJvb2wpOwotICAgICAgICBIQU5ETEVfVFlQRSgg
IFNUUklORywgICBTdHJpbmcsICBzdHJpbmcpOwotICAgICAgICBIQU5ETEVfVFlQRSggICBCWVRF
UywgICAgQnl0ZXMsICBzdHJpbmcpOwotICAgICAgICBIQU5ETEVfVFlQRSggICAgRU5VTSwgICAg
IEVudW0sICAgIGVudW0pOwotICAgICAgICBIQU5ETEVfVFlQRSggICBHUk9VUCwgICAgR3JvdXAs
IG1lc3NhZ2UpOwotICAgICAgICBIQU5ETEVfVFlQRSggTUVTU0FHRSwgIE1lc3NhZ2UsIG1lc3Nh
Z2UpOwotI3VuZGVmIEhBTkRMRV9UWVBFCi0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgaWYgKCFp
c19jbGVhcmVkKSB7Ci0gICAgc3dpdGNoIChyZWFsX3R5cGUodHlwZSkpIHsKLSNkZWZpbmUgSEFO
RExFX1RZUEUoVVBQRVJDQVNFLCBDQU1FTENBU0UsIFZBTFVFKSAgICAgICAgICAgICAgICAgXAot
ICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6VFlQRV8jI1VQUEVSQ0FTRTogICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIFdpcmVGb3JtYXRMaXRlOjpXcml0ZSMjQ0FNRUxDQVNFKG51bWJl
ciwgVkFMVUUsIG91dHB1dCk7IFwKLSAgICAgICAgYnJlYWsKLQotICAgICAgSEFORExFX1RZUEUo
ICAgSU5UMzIsICAgIEludDMyLCAgICBpbnQzMl92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSgg
ICBJTlQ2NCwgICAgSW50NjQsICAgIGludDY0X3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAg
VUlOVDMyLCAgIFVJbnQzMiwgICB1aW50MzJfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoICBV
SU5UNjQsICAgVUludDY0LCAgIHVpbnQ2NF92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggIFNJ
TlQzMiwgICBTSW50MzIsICAgIGludDMyX3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgU0lO
VDY0LCAgIFNJbnQ2NCwgICAgaW50NjRfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoIEZJWEVE
MzIsICBGaXhlZDMyLCAgIHVpbnQzMl92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggRklYRUQ2
NCwgIEZpeGVkNjQsICAgdWludDY0X3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKFNGSVhFRDMy
LCBTRml4ZWQzMiwgICAgaW50MzJfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoU0ZJWEVENjQs
IFNGaXhlZDY0LCAgICBpbnQ2NF92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggICBGTE9BVCwg
ICAgRmxvYXQsICAgIGZsb2F0X3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgRE9VQkxFLCAg
IERvdWJsZSwgICBkb3VibGVfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoICAgIEJPT0wsICAg
ICBCb29sLCAgICAgYm9vbF92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggIFNUUklORywgICBT
dHJpbmcsICAqc3RyaW5nX3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgIEJZVEVTLCAgICBC
eXRlcywgICpzdHJpbmdfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoICAgIEVOVU0sICAgICBF
bnVtLCAgICAgZW51bV92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggICBHUk9VUCwgICAgR3Jv
dXAsICptZXNzYWdlX3ZhbHVlKTsKLSN1bmRlZiBIQU5ETEVfVFlQRQotICAgICAgY2FzZSBXaXJl
Rm9ybWF0TGl0ZTo6VFlQRV9NRVNTQUdFOgotICAgICAgICBpZiAoaXNfbGF6eSkgewotICAgICAg
ICAgIGxhenltZXNzYWdlX3ZhbHVlLT5Xcml0ZU1lc3NhZ2UobnVtYmVyLCBvdXRwdXQpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2UobnVt
YmVyLCAqbWVzc2FnZV92YWx1ZSwgb3V0cHV0KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gIH0KLX0KLQotaW50IEV4dGVuc2lvblNldDo6RXh0ZW5zaW9uOjpCeXRlU2l6ZShp
bnQgbnVtYmVyKSBjb25zdCB7Ci0gIGludCByZXN1bHQgPSAwOwotCi0gIGlmIChpc19yZXBlYXRl
ZCkgewotICAgIGlmIChpc19wYWNrZWQpIHsKLSAgICAgIHN3aXRjaCAocmVhbF90eXBlKHR5cGUp
KSB7Ci0jZGVmaW5lIEhBTkRMRV9UWVBFKFVQUEVSQ0FTRSwgQ0FNRUxDQVNFLCBMT1dFUkNBU0Up
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpU
WVBFXyMjVVBQRVJDQVNFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdGVkXyMjTE9XRVJDQVNFIyNfdmFsdWUtPnNpemUo
KTsgaSsrKSB7ICBcCi0gICAgICAgICAgICByZXN1bHQgKz0gV2lyZUZvcm1hdExpdGU6OkNBTUVM
Q0FTRSMjU2l6ZSggICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICByZXBlYXRl
ZF8jI0xPV0VSQ0FTRSMjX3ZhbHVlLT5HZXQoaSkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgYnJlYWsKLQotICAgICAgICBIQU5ETEVf
VFlQRSggICBJTlQzMiwgICAgSW50MzIsICAgaW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRSgg
ICBJTlQ2NCwgICAgSW50NjQsICAgaW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRSggIFVJTlQz
MiwgICBVSW50MzIsICB1aW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRSggIFVJTlQ2NCwgICBV
SW50NjQsICB1aW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRSggIFNJTlQzMiwgICBTSW50MzIs
ICAgaW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRSggIFNJTlQ2NCwgICBTSW50NjQsICAgaW50
NjQpOwotICAgICAgICBIQU5ETEVfVFlQRSggICAgRU5VTSwgICAgIEVudW0sICAgIGVudW0pOwot
I3VuZGVmIEhBTkRMRV9UWVBFCi0KLSAgICAgICAgLy8gU3R1ZmYgd2l0aCBmaXhlZCBzaXplLgot
I2RlZmluZSBIQU5ETEVfVFlQRShVUFBFUkNBU0UsIENBTUVMQ0FTRSwgTE9XRVJDQVNFKSAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6VFlQRV8j
I1VQUEVSQ0FTRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgcmVz
dWx0ICs9IFdpcmVGb3JtYXRMaXRlOjprIyNDQU1FTENBU0UjI1NpemUgKiAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgICAgICByZXBlYXRlZF8jI0xPV0VSQ0FTRSMjX3ZhbHVl
LT5zaXplKCk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBicmVhawotICAgICAgICBI
QU5ETEVfVFlQRSggRklYRUQzMiwgIEZpeGVkMzIsIHVpbnQzMik7Ci0gICAgICAgIEhBTkRMRV9U
WVBFKCBGSVhFRDY0LCAgRml4ZWQ2NCwgdWludDY0KTsKLSAgICAgICAgSEFORExFX1RZUEUoU0ZJ
WEVEMzIsIFNGaXhlZDMyLCAgaW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRShTRklYRUQ2NCwg
U0ZpeGVkNjQsICBpbnQ2NCk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCAgIEZMT0FULCAgICBGbG9h
dCwgIGZsb2F0KTsKLSAgICAgICAgSEFORExFX1RZUEUoICBET1VCTEUsICAgRG91YmxlLCBkb3Vi
bGUpOwotICAgICAgICBIQU5ETEVfVFlQRSggICAgQk9PTCwgICAgIEJvb2wsICAgYm9vbCk7Ci0j
dW5kZWYgSEFORExFX1RZUEUKLQotICAgICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpUWVBFX1NU
UklORzoKLSAgICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9CWVRFUzoKLSAgICAgICAg
Y2FzZSBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9HUk9VUDoKLSAgICAgICAgY2FzZSBXaXJlRm9ybWF0
TGl0ZTo6VFlQRV9NRVNTQUdFOgotICAgICAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJOb24t
cHJpbWl0aXZlIHR5cGVzIGNhbid0IGJlIHBhY2tlZC4iOwotICAgICAgICAgIGJyZWFrOwotICAg
ICAgfQotCi0gICAgICBjYWNoZWRfc2l6ZSA9IHJlc3VsdDsKLSAgICAgIGlmIChyZXN1bHQgPiAw
KSB7Ci0gICAgICAgIHJlc3VsdCArPSBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OlZhcmludFNpemUz
MihyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpWYXJp
bnRTaXplMzIoCi0gICAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6TWFrZVRhZyhudW1iZXIsCi0g
ICAgICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQp
KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaW50IHRhZ19zaXplID0gV2lyZUZvcm1h
dExpdGU6OlRhZ1NpemUobnVtYmVyLCByZWFsX3R5cGUodHlwZSkpOwotCi0gICAgICBzd2l0Y2gg
KHJlYWxfdHlwZSh0eXBlKSkgewotI2RlZmluZSBIQU5ETEVfVFlQRShVUFBFUkNBU0UsIENBTUVM
Q0FTRSwgTE9XRVJDQVNFKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY2FzZSBX
aXJlRm9ybWF0TGl0ZTo6VFlQRV8jI1VQUEVSQ0FTRTogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgcmVzdWx0ICs9IHRhZ19zaXplICogcmVwZWF0ZWRfIyNMT1dFUkNB
U0UjI192YWx1ZS0+c2l6ZSgpOyAgICAgICAgXAotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgcmVwZWF0ZWRfIyNMT1dFUkNBU0UjI192YWx1ZS0+c2l6ZSgpOyBpKyspIHsgIFwKLSAgICAg
ICAgICAgIHJlc3VsdCArPSBXaXJlRm9ybWF0TGl0ZTo6Q0FNRUxDQVNFIyNTaXplKCAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIHJlcGVhdGVkXyMjTE9XRVJDQVNFIyNfdmFs
dWUtPkdldChpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICBicmVhawotCi0gICAgICAgIEhBTkRMRV9UWVBFKCAgIElOVDMyLCAgICBJ
bnQzMiwgICBpbnQzMik7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCAgIElOVDY0LCAgICBJbnQ2NCwg
ICBpbnQ2NCk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCAgVUlOVDMyLCAgIFVJbnQzMiwgIHVpbnQz
Mik7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCAgVUlOVDY0LCAgIFVJbnQ2NCwgIHVpbnQ2NCk7Ci0g
ICAgICAgIEhBTkRMRV9UWVBFKCAgU0lOVDMyLCAgIFNJbnQzMiwgICBpbnQzMik7Ci0gICAgICAg
IEhBTkRMRV9UWVBFKCAgU0lOVDY0LCAgIFNJbnQ2NCwgICBpbnQ2NCk7Ci0gICAgICAgIEhBTkRM
RV9UWVBFKCAgU1RSSU5HLCAgIFN0cmluZywgIHN0cmluZyk7Ci0gICAgICAgIEhBTkRMRV9UWVBF
KCAgIEJZVEVTLCAgICBCeXRlcywgIHN0cmluZyk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCAgICBF
TlVNLCAgICAgRW51bSwgICAgZW51bSk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCAgIEdST1VQLCAg
ICBHcm91cCwgbWVzc2FnZSk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCBNRVNTQUdFLCAgTWVzc2Fn
ZSwgbWVzc2FnZSk7Ci0jdW5kZWYgSEFORExFX1RZUEUKLQotICAgICAgICAvLyBTdHVmZiB3aXRo
IGZpeGVkIHNpemUuCi0jZGVmaW5lIEhBTkRMRV9UWVBFKFVQUEVSQ0FTRSwgQ0FNRUxDQVNFLCBM
T1dFUkNBU0UpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjYXNlIFdpcmVGb3Jt
YXRMaXRlOjpUWVBFXyMjVVBQRVJDQVNFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICByZXN1bHQgKz0gKHRhZ19zaXplICsgV2lyZUZvcm1hdExpdGU6OmsjI0NBTUVM
Q0FTRSMjU2l6ZSkgKiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkXyMjTE9X
RVJDQVNFIyNfdmFsdWUtPnNpemUoKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGJy
ZWFrCi0gICAgICAgIEhBTkRMRV9UWVBFKCBGSVhFRDMyLCAgRml4ZWQzMiwgdWludDMyKTsKLSAg
ICAgICAgSEFORExFX1RZUEUoIEZJWEVENjQsICBGaXhlZDY0LCB1aW50NjQpOwotICAgICAgICBI
QU5ETEVfVFlQRShTRklYRUQzMiwgU0ZpeGVkMzIsICBpbnQzMik7Ci0gICAgICAgIEhBTkRMRV9U
WVBFKFNGSVhFRDY0LCBTRml4ZWQ2NCwgIGludDY0KTsKLSAgICAgICAgSEFORExFX1RZUEUoICAg
RkxPQVQsICAgIEZsb2F0LCAgZmxvYXQpOwotICAgICAgICBIQU5ETEVfVFlQRSggIERPVUJMRSwg
ICBEb3VibGUsIGRvdWJsZSk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCAgICBCT09MLCAgICAgQm9v
bCwgICBib29sKTsKLSN1bmRlZiBIQU5ETEVfVFlQRQotICAgICAgfQotICAgIH0KLSAgfSBlbHNl
IGlmICghaXNfY2xlYXJlZCkgewotICAgIHJlc3VsdCArPSBXaXJlRm9ybWF0TGl0ZTo6VGFnU2l6
ZShudW1iZXIsIHJlYWxfdHlwZSh0eXBlKSk7Ci0gICAgc3dpdGNoIChyZWFsX3R5cGUodHlwZSkp
IHsKLSNkZWZpbmUgSEFORExFX1RZUEUoVVBQRVJDQVNFLCBDQU1FTENBU0UsIExPV0VSQ0FTRSkg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6VFlQRV8j
I1VQUEVSQ0FTRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJlc3Vs
dCArPSBXaXJlRm9ybWF0TGl0ZTo6Q0FNRUxDQVNFIyNTaXplKExPV0VSQ0FTRSk7ICAgICAgICAg
ICAgIFwKLSAgICAgICAgYnJlYWsKLQotICAgICAgSEFORExFX1RZUEUoICAgSU5UMzIsICAgIElu
dDMyLCAgICBpbnQzMl92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggICBJTlQ2NCwgICAgSW50
NjQsICAgIGludDY0X3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgVUlOVDMyLCAgIFVJbnQz
MiwgICB1aW50MzJfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoICBVSU5UNjQsICAgVUludDY0
LCAgIHVpbnQ2NF92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggIFNJTlQzMiwgICBTSW50MzIs
ICAgIGludDMyX3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgU0lOVDY0LCAgIFNJbnQ2NCwg
ICAgaW50NjRfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoICBTVFJJTkcsICAgU3RyaW5nLCAg
KnN0cmluZ192YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggICBCWVRFUywgICAgQnl0ZXMsICAq
c3RyaW5nX3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgICBFTlVNLCAgICAgRW51bSwgICAg
IGVudW1fdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoICAgR1JPVVAsICAgIEdyb3VwLCAqbWVz
c2FnZV92YWx1ZSk7Ci0jdW5kZWYgSEFORExFX1RZUEUKLSAgICAgIGNhc2UgV2lyZUZvcm1hdExp
dGU6OlRZUEVfTUVTU0FHRTogewotICAgICAgICBpZiAoaXNfbGF6eSkgewotICAgICAgICAgIGlu
dCBzaXplID0gbGF6eW1lc3NhZ2VfdmFsdWUtPkJ5dGVTaXplKCk7Ci0gICAgICAgICAgcmVzdWx0
ICs9IGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6ZTMyKHNpemUpICsgc2l6ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXN1bHQgKz0gV2lyZUZvcm1hdExpdGU6Ok1lc3Nh
Z2VTaXplKCptZXNzYWdlX3ZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IH0KLQotICAgICAgLy8gU3R1ZmYgd2l0aCBmaXhlZCBzaXplLgotI2RlZmluZSBIQU5ETEVfVFlQ
RShVUFBFUkNBU0UsIENBTUVMQ0FTRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjVVBQRVJDQVNFOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmVzdWx0ICs9IFdpcmVGb3JtYXRMaXRlOjpr
IyNDQU1FTENBU0UjI1NpemU7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBicmVhawot
ICAgICAgSEFORExFX1RZUEUoIEZJWEVEMzIsICBGaXhlZDMyKTsKLSAgICAgIEhBTkRMRV9UWVBF
KCBGSVhFRDY0LCAgRml4ZWQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQRShTRklYRUQzMiwgU0ZpeGVk
MzIpOwotICAgICAgSEFORExFX1RZUEUoU0ZJWEVENjQsIFNGaXhlZDY0KTsKLSAgICAgIEhBTkRM
RV9UWVBFKCAgIEZMT0FULCAgICBGbG9hdCk7Ci0gICAgICBIQU5ETEVfVFlQRSggIERPVUJMRSwg
ICBEb3VibGUpOwotICAgICAgSEFORExFX1RZUEUoICAgIEJPT0wsICAgICBCb29sKTsKLSN1bmRl
ZiBIQU5ETEVfVFlQRQotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBF
eHRlbnNpb25TZXQ6OkV4dGVuc2lvbjo6R2V0U2l6ZSgpIGNvbnN0IHsKLSAgR09PR0xFX0RDSEVD
Syhpc19yZXBlYXRlZCk7Ci0gIHN3aXRjaCAoY3BwX3R5cGUodHlwZSkpIHsKLSNkZWZpbmUgSEFO
RExFX1RZUEUoVVBQRVJDQVNFLCBMT1dFUkNBU0UpICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfIyNVUFBFUkNBU0U6ICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICByZXR1cm4gcmVwZWF0ZWRfIyNMT1dFUkNBU0UjI192YWx1ZS0+c2l6
ZSgpCi0KLSAgICBIQU5ETEVfVFlQRSggIElOVDMyLCAgIGludDMyKTsKLSAgICBIQU5ETEVfVFlQ
RSggIElOVDY0LCAgIGludDY0KTsKLSAgICBIQU5ETEVfVFlQRSggVUlOVDMyLCAgdWludDMyKTsK
LSAgICBIQU5ETEVfVFlQRSggVUlOVDY0LCAgdWludDY0KTsKLSAgICBIQU5ETEVfVFlQRSggIEZM
T0FULCAgIGZsb2F0KTsKLSAgICBIQU5ETEVfVFlQRSggRE9VQkxFLCAgZG91YmxlKTsKLSAgICBI
QU5ETEVfVFlQRSggICBCT09MLCAgICBib29sKTsKLSAgICBIQU5ETEVfVFlQRSggICBFTlVNLCAg
ICBlbnVtKTsKLSAgICBIQU5ETEVfVFlQRSggU1RSSU5HLCAgc3RyaW5nKTsKLSAgICBIQU5ETEVf
VFlQRShNRVNTQUdFLCBtZXNzYWdlKTsKLSN1bmRlZiBIQU5ETEVfVFlQRQotICB9Ci0KLSAgR09P
R0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gIHJldHVybiAwOwotfQotCi0v
LyBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYWxsIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBiZSBvbmx5Ci0vLyBjYWxsZWQgaWYgdGhlIEV4dGVuc2lvbiB3YXMgY3JlYXRl
ZCB3aXRoIGFuIGFyZW5hLgotdm9pZCBFeHRlbnNpb25TZXQ6OkV4dGVuc2lvbjo6RnJlZSgpIHsK
LSAgaWYgKGlzX3JlcGVhdGVkKSB7Ci0gICAgc3dpdGNoIChjcHBfdHlwZSh0eXBlKSkgewotI2Rl
ZmluZSBIQU5ETEVfVFlQRShVUFBFUkNBU0UsIExPV0VSQ0FTRSkgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OkNQUFRZUEVfIyNVUFBFUkNBU0U6
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRlbGV0ZSByZXBlYXRlZF8jI0xPV0VSQ0FT
RSMjX3ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBicmVhawotCi0gICAg
ICBIQU5ETEVfVFlQRSggIElOVDMyLCAgIGludDMyKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgSU5U
NjQsICAgaW50NjQpOwotICAgICAgSEFORExFX1RZUEUoIFVJTlQzMiwgIHVpbnQzMik7Ci0gICAg
ICBIQU5ETEVfVFlQRSggVUlOVDY0LCAgdWludDY0KTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgRkxP
QVQsICAgZmxvYXQpOwotICAgICAgSEFORExFX1RZUEUoIERPVUJMRSwgIGRvdWJsZSk7Ci0gICAg
ICBIQU5ETEVfVFlQRSggICBCT09MLCAgICBib29sKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgIEVO
VU0sICAgIGVudW0pOwotICAgICAgSEFORExFX1RZUEUoIFNUUklORywgIHN0cmluZyk7Ci0gICAg
ICBIQU5ETEVfVFlQRShNRVNTQUdFLCBtZXNzYWdlKTsKLSN1bmRlZiBIQU5ETEVfVFlQRQotICAg
IH0KLSAgfSBlbHNlIHsKLSAgICBzd2l0Y2ggKGNwcF90eXBlKHR5cGUpKSB7Ci0gICAgICBjYXNl
IFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBFX1NUUklORzoKLSAgICAgICAgZGVsZXRlIHN0cmluZ192
YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpDUFBUWVBF
X01FU1NBR0U6Ci0gICAgICAgIGlmIChpc19sYXp5KSB7Ci0gICAgICAgICAgZGVsZXRlIGxhenlt
ZXNzYWdlX3ZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGRlbGV0ZSBtZXNzYWdl
X3ZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLS8vIERlZmluZWQgaW4gZXh0ZW5zaW9uX3NldF9o
ZWF2eS5jYy4KLS8vIGludCBFeHRlbnNpb25TZXQ6OkV4dGVuc2lvbjo6U3BhY2VVc2VkRXhjbHVk
aW5nU2VsZigpIGNvbnN0Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRGVmYXVsdCByZXBlYXRlZCBmaWVs
ZCBpbnN0YW5jZXMgZm9yIGl0ZXJhdG9yLWNvbXBhdGlibGUgYWNjZXNzb3JzCi0KLUdPT0dMRV9Q
Uk9UT0JVRl9ERUNMQVJFX09OQ0UocmVwZWF0ZWRfcHJpbWl0aXZlX2dlbmVyaWNfdHlwZV90cmFp
dHNfb25jZV9pbml0Xyk7Ci1HT09HTEVfUFJPVE9CVUZfREVDTEFSRV9PTkNFKHJlcGVhdGVkX3N0
cmluZ190eXBlX3RyYWl0c19vbmNlX2luaXRfKTsKLUdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09O
Q0UocmVwZWF0ZWRfbWVzc2FnZV9nZW5lcmljX3R5cGVfdHJhaXRzX29uY2VfaW5pdF8pOwotCi12
b2lkIFJlcGVhdGVkUHJpbWl0aXZlR2VuZXJpY1R5cGVUcmFpdHM6OkluaXRpYWxpemVEZWZhdWx0
UmVwZWF0ZWRGaWVsZHMoKSB7Ci0gIGRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfaW50MzJfID0gbmV3
IFJlcGVhdGVkRmllbGQ8aW50MzI+OwotICBkZWZhdWx0X3JlcGVhdGVkX2ZpZWxkX2ludDY0XyA9
IG5ldyBSZXBlYXRlZEZpZWxkPGludDY0PjsKLSAgZGVmYXVsdF9yZXBlYXRlZF9maWVsZF91aW50
MzJfID0gbmV3IFJlcGVhdGVkRmllbGQ8dWludDMyPjsKLSAgZGVmYXVsdF9yZXBlYXRlZF9maWVs
ZF91aW50NjRfID0gbmV3IFJlcGVhdGVkRmllbGQ8dWludDY0PjsKLSAgZGVmYXVsdF9yZXBlYXRl
ZF9maWVsZF9kb3VibGVfID0gbmV3IFJlcGVhdGVkRmllbGQ8ZG91YmxlPjsKLSAgZGVmYXVsdF9y
ZXBlYXRlZF9maWVsZF9mbG9hdF8gPSBuZXcgUmVwZWF0ZWRGaWVsZDxmbG9hdD47Ci0gIGRlZmF1
bHRfcmVwZWF0ZWRfZmllbGRfYm9vbF8gPSBuZXcgUmVwZWF0ZWRGaWVsZDxib29sPjsKLSAgT25T
aHV0ZG93bigmRGVzdHJveURlZmF1bHRSZXBlYXRlZEZpZWxkcyk7Ci19Ci0KLXZvaWQgUmVwZWF0
ZWRQcmltaXRpdmVHZW5lcmljVHlwZVRyYWl0czo6RGVzdHJveURlZmF1bHRSZXBlYXRlZEZpZWxk
cygpIHsKLSAgZGVsZXRlIGRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfaW50MzJfOwotICBkZWxldGUg
ZGVmYXVsdF9yZXBlYXRlZF9maWVsZF9pbnQ2NF87Ci0gIGRlbGV0ZSBkZWZhdWx0X3JlcGVhdGVk
X2ZpZWxkX3VpbnQzMl87Ci0gIGRlbGV0ZSBkZWZhdWx0X3JlcGVhdGVkX2ZpZWxkX3VpbnQ2NF87
Ci0gIGRlbGV0ZSBkZWZhdWx0X3JlcGVhdGVkX2ZpZWxkX2RvdWJsZV87Ci0gIGRlbGV0ZSBkZWZh
dWx0X3JlcGVhdGVkX2ZpZWxkX2Zsb2F0XzsKLSAgZGVsZXRlIGRlZmF1bHRfcmVwZWF0ZWRfZmll
bGRfYm9vbF87Ci19Ci0KLXZvaWQgUmVwZWF0ZWRTdHJpbmdUeXBlVHJhaXRzOjpJbml0aWFsaXpl
RGVmYXVsdFJlcGVhdGVkRmllbGRzKCkgewotICBkZWZhdWx0X3JlcGVhdGVkX2ZpZWxkXyA9IG5l
dyBSZXBlYXRlZEZpZWxkVHlwZTsKLSAgT25TaHV0ZG93bigmRGVzdHJveURlZmF1bHRSZXBlYXRl
ZEZpZWxkcyk7Ci19Ci0KLXZvaWQgUmVwZWF0ZWRTdHJpbmdUeXBlVHJhaXRzOjpEZXN0cm95RGVm
YXVsdFJlcGVhdGVkRmllbGRzKCkgewotICBkZWxldGUgZGVmYXVsdF9yZXBlYXRlZF9maWVsZF87
Ci19Ci0KLXZvaWQgUmVwZWF0ZWRNZXNzYWdlR2VuZXJpY1R5cGVUcmFpdHM6OkluaXRpYWxpemVE
ZWZhdWx0UmVwZWF0ZWRGaWVsZHMoKSB7Ci0gIGRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfID0gbmV3
IFJlcGVhdGVkRmllbGRUeXBlOwotICBPblNodXRkb3duKCZEZXN0cm95RGVmYXVsdFJlcGVhdGVk
RmllbGRzKTsKLX0KLQotdm9pZCBSZXBlYXRlZE1lc3NhZ2VHZW5lcmljVHlwZVRyYWl0czo6RGVz
dHJveURlZmF1bHRSZXBlYXRlZEZpZWxkcygpIHsKLSAgZGVsZXRlIGRlZmF1bHRfcmVwZWF0ZWRf
ZmllbGRfOwotfQotCi1jb25zdCBSZXBlYXRlZEZpZWxkPGludDMyPioKLVJlcGVhdGVkUHJpbWl0
aXZlR2VuZXJpY1R5cGVUcmFpdHM6OmRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfaW50MzJfID0gTlVM
TDsKLWNvbnN0IFJlcGVhdGVkRmllbGQ8aW50NjQ+KgotUmVwZWF0ZWRQcmltaXRpdmVHZW5lcmlj
VHlwZVRyYWl0czo6ZGVmYXVsdF9yZXBlYXRlZF9maWVsZF9pbnQ2NF8gPSBOVUxMOwotY29uc3Qg
UmVwZWF0ZWRGaWVsZDx1aW50MzI+KgotUmVwZWF0ZWRQcmltaXRpdmVHZW5lcmljVHlwZVRyYWl0
czo6ZGVmYXVsdF9yZXBlYXRlZF9maWVsZF91aW50MzJfID0gTlVMTDsKLWNvbnN0IFJlcGVhdGVk
RmllbGQ8dWludDY0PioKLVJlcGVhdGVkUHJpbWl0aXZlR2VuZXJpY1R5cGVUcmFpdHM6OmRlZmF1
bHRfcmVwZWF0ZWRfZmllbGRfdWludDY0XyA9IE5VTEw7Ci1jb25zdCBSZXBlYXRlZEZpZWxkPGRv
dWJsZT4qCi1SZXBlYXRlZFByaW1pdGl2ZUdlbmVyaWNUeXBlVHJhaXRzOjpkZWZhdWx0X3JlcGVh
dGVkX2ZpZWxkX2RvdWJsZV8gPSBOVUxMOwotY29uc3QgUmVwZWF0ZWRGaWVsZDxmbG9hdD4qCi1S
ZXBlYXRlZFByaW1pdGl2ZUdlbmVyaWNUeXBlVHJhaXRzOjpkZWZhdWx0X3JlcGVhdGVkX2ZpZWxk
X2Zsb2F0XyA9IE5VTEw7Ci1jb25zdCBSZXBlYXRlZEZpZWxkPGJvb2w+KgotUmVwZWF0ZWRQcmlt
aXRpdmVHZW5lcmljVHlwZVRyYWl0czo6ZGVmYXVsdF9yZXBlYXRlZF9maWVsZF9ib29sXyA9IE5V
TEw7Ci1jb25zdCBSZXBlYXRlZFN0cmluZ1R5cGVUcmFpdHM6OlJlcGVhdGVkRmllbGRUeXBlKgot
UmVwZWF0ZWRTdHJpbmdUeXBlVHJhaXRzOjpkZWZhdWx0X3JlcGVhdGVkX2ZpZWxkXyA9IE5VTEw7
Ci1jb25zdCBSZXBlYXRlZE1lc3NhZ2VHZW5lcmljVHlwZVRyYWl0czo6UmVwZWF0ZWRGaWVsZFR5
cGUqCi1SZXBlYXRlZE1lc3NhZ2VHZW5lcmljVHlwZVRyYWl0czo6ZGVmYXVsdF9yZXBlYXRlZF9m
aWVsZF8gPSBOVUxMOwotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFj
ZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2V4dGVuc2lvbl9zZXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9leHRlbnNpb25f
c2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYTE3OWJlMDFkZGJhYTFjNzY3
ODYwMzc4ZDEyMGUwNDNlZWM4MDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2V4dGVuc2lvbl9zZXQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyNjYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNl
ZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVt
YXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIFRoaXMgaGVhZGVyIGlzIGxvZ2lj
YWxseSBpbnRlcm5hbCwgYnV0IGlzIG1hZGUgcHVibGljIGJlY2F1c2UgaXQgaXMgdXNlZAotLy8g
ZnJvbSBwcm90b2NvbC1jb21waWxlci1nZW5lcmF0ZWQgY29kZSwgd2hpY2ggbWF5IHJlc2lkZSBp
biBvdGhlciBjb21wb25lbnRzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9FWFRFTlNJT05f
U0VUX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfRVhURU5TSU9OX1NFVF9IX18KLQotI2lu
Y2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNs
dWRlIDxzdHJpbmc+Ci0KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24u
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvcmVwZWF0ZWRfZmllbGQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci0KLW5hbWVzcGFjZSBw
cm90b2J1ZiB7Ci0gIGNsYXNzIEFyZW5hOwotICBjbGFzcyBEZXNjcmlwdG9yOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0b3IuaAotICBjbGFzcyBGaWVsZERl
c2NyaXB0b3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2NyaXB0b3IuaAot
ICBjbGFzcyBEZXNjcmlwdG9yUG9vbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGRlc2NyaXB0b3IuaAotICBjbGFzcyBNZXNzYWdlTGl0ZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG1lc3NhZ2VfbGl0ZS5oCi0gIGNsYXNzIE1lc3NhZ2U7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVzc2FnZS5oCi0gIGNsYXNzIE1lc3Nh
Z2VGYWN0b3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVzc2FnZS5oCi0g
IGNsYXNzIFVua25vd25GaWVsZFNldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dW5rbm93bl9maWVsZF9zZXQuaAotICBuYW1lc3BhY2UgaW8gewotICAgIGNsYXNzIENvZGVkSW5w
dXRTdHJlYW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29kZWRfc3RyZWFtLmgK
LSAgICBjbGFzcyBDb2RlZE91dHB1dFN0cmVhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNvZGVkX3N0cmVhbS5oCi0gIH0KLSAgbmFtZXNwYWNlIGludGVybmFsIHsKLSAgICBjbGFz
cyBGaWVsZFNraXBwZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpcmVf
Zm9ybWF0X2xpdGUuaAotICB9Ci19Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ug
aW50ZXJuYWwgewotCi0vLyBVc2VkIHRvIHN0b3JlIHZhbHVlcyBvZiB0eXBlIFdpcmVGb3JtYXRM
aXRlOjpGaWVsZFR5cGUgd2l0aG91dCBoYXZpbmcgdG8KLS8vICNpbmNsdWRlIHdpcmVfZm9ybWF0
X2xpdGUuaC4gIEFsc28sIGVuc3VyZXMgdGhhdCB3ZSB1c2Ugb25seSBvbmUgYnl0ZSB0bwotLy8g
c3RvcmUgdGhlc2UgdmFsdWVzLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgbGF5b3V0
IG9mCi0vLyBFeHRlbnNpb25TZXQ6OkV4dGVuc2lvbiBzbWFsbC4KLXR5cGVkZWYgdWludDggRmll
bGRUeXBlOwotCi0vLyBBIGZ1bmN0aW9uIHdoaWNoLCBnaXZlbiBhbiBpbnRlZ2VyIHZhbHVlLCBy
ZXR1cm5zIHRydWUgaWYgdGhlIG51bWJlcgotLy8gbWF0Y2hlcyBvbmUgb2YgdGhlIGRlZmluZWQg
dmFsdWVzIGZvciB0aGUgY29ycmVzcG9uZGluZyBlbnVtIHR5cGUuICBUaGlzCi0vLyBpcyB1c2Vk
IHdpdGggUmVnaXN0ZXJFbnVtRXh0ZW5zaW9uLCBiZWxvdy4KLXR5cGVkZWYgYm9vbCBFbnVtVmFs
aWRpdHlGdW5jKGludCBudW1iZXIpOwotCi0vLyBWZXJzaW9uIG9mIHRoZSBhYm92ZSB3aGljaCB0
YWtlcyBhbiBhcmd1bWVudC4gIFRoaXMgaXMgbmVlZGVkIHRvIGRlYWwgd2l0aAotLy8gZXh0ZW5z
aW9ucyB0aGF0IGFyZSBub3QgY29tcGlsZWQgaW4uCi10eXBlZGVmIGJvb2wgRW51bVZhbGlkaXR5
RnVuY1dpdGhBcmcoY29uc3Qgdm9pZCogYXJnLCBpbnQgbnVtYmVyKTsKLQotLy8gSW5mb3JtYXRp
b24gYWJvdXQgYSByZWdpc3RlcmVkIGV4dGVuc2lvbi4KLXN0cnVjdCBFeHRlbnNpb25JbmZvIHsK
LSAgaW5saW5lIEV4dGVuc2lvbkluZm8oKSB7fQotICBpbmxpbmUgRXh0ZW5zaW9uSW5mbyhGaWVs
ZFR5cGUgdHlwZV9wYXJhbSwgYm9vbCBpc3JlcGVhdGVkLCBib29sIGlzcGFja2VkKQotICAgICAg
OiB0eXBlKHR5cGVfcGFyYW0pLCBpc19yZXBlYXRlZChpc3JlcGVhdGVkKSwgaXNfcGFja2VkKGlz
cGFja2VkKSwKLSAgICAgICAgZGVzY3JpcHRvcihOVUxMKSB7fQotCi0gIEZpZWxkVHlwZSB0eXBl
OwotICBib29sIGlzX3JlcGVhdGVkOwotICBib29sIGlzX3BhY2tlZDsKLQotICBzdHJ1Y3QgRW51
bVZhbGlkaXR5Q2hlY2sgewotICAgIEVudW1WYWxpZGl0eUZ1bmNXaXRoQXJnKiBmdW5jOwotICAg
IGNvbnN0IHZvaWQqIGFyZzsKLSAgfTsKLQotICB1bmlvbiB7Ci0gICAgRW51bVZhbGlkaXR5Q2hl
Y2sgZW51bV92YWxpZGl0eV9jaGVjazsKLSAgICBjb25zdCBNZXNzYWdlTGl0ZSogbWVzc2FnZV9w
cm90b3R5cGU7Ci0gIH07Ci0KLSAgLy8gVGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgZXh0ZW5zaW9u
LCBpZiBvbmUgZXhpc3RzIGFuZCBpcyBrbm93bi4gIE1heSBiZQotICAvLyBOVUxMLiAgTXVzdCBu
b3QgYmUgTlVMTCBpZiB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIGV4dGVuc2lvbiBkb2VzIG5vdAot
ICAvLyBsaXZlIGluIHRoZSBzYW1lIHBvb2wgYXMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBjb250
YWluaW5nIHR5cGUuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcjsKLX07Ci0K
LS8vIEFic3RyYWN0IGludGVyZmFjZSBmb3IgYW4gb2JqZWN0IHdoaWNoIGxvb2tzIHVwIGV4dGVu
c2lvbiBkZWZpbml0aW9ucy4gIFVzZWQKLS8vIHdoZW4gcGFyc2luZy4KLWNsYXNzIExJQlBST1RP
QlVGX0VYUE9SVCBFeHRlbnNpb25GaW5kZXIgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+RXh0ZW5z
aW9uRmluZGVyKCk7Ci0KLSAgLy8gRmluZCB0aGUgZXh0ZW5zaW9uIHdpdGggdGhlIGdpdmVuIGNv
bnRhaW5pbmcgdHlwZSBhbmQgbnVtYmVyLgotICB2aXJ0dWFsIGJvb2wgRmluZChpbnQgbnVtYmVy
LCBFeHRlbnNpb25JbmZvKiBvdXRwdXQpID0gMDsKLX07Ci0KLS8vIEltcGxlbWVudGF0aW9uIG9m
IEV4dGVuc2lvbkZpbmRlciB3aGljaCBmaW5kcyBleHRlbnNpb25zIGRlZmluZWQgaW4gLnByb3Rv
Ci0vLyBmaWxlcyB3aGljaCBoYXZlIGJlZW4gY29tcGlsZWQgaW50byB0aGUgYmluYXJ5LgotY2xh
c3MgTElCUFJPVE9CVUZfRVhQT1JUIEdlbmVyYXRlZEV4dGVuc2lvbkZpbmRlciA6IHB1YmxpYyBF
eHRlbnNpb25GaW5kZXIgewotIHB1YmxpYzoKLSAgR2VuZXJhdGVkRXh0ZW5zaW9uRmluZGVyKGNv
bnN0IE1lc3NhZ2VMaXRlKiBjb250YWluaW5nX3R5cGUpCi0gICAgICA6IGNvbnRhaW5pbmdfdHlw
ZV8oY29udGFpbmluZ190eXBlKSB7fQotICB2aXJ0dWFsIH5HZW5lcmF0ZWRFeHRlbnNpb25GaW5k
ZXIoKSB7fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBhbmQgZmlsbHMgaW4gKm91dHB1dCBpZiBmb3Vu
ZCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCi0gIHZpcnR1YWwgYm9vbCBGaW5kKGludCBudW1i
ZXIsIEV4dGVuc2lvbkluZm8qIG91dHB1dCk7Ci0KLSBwcml2YXRlOgotICBjb25zdCBNZXNzYWdl
TGl0ZSogY29udGFpbmluZ190eXBlXzsKLX07Ci0KLS8vIEEgRmllbGRTa2lwcGVyIHVzZWQgZm9y
IHBhcnNpbmcgTWVzc2FnZVNldC4KLWNsYXNzIE1lc3NhZ2VTZXRGaWVsZFNraXBwZXI7Ci0KLS8v
IE5vdGU6ICBleHRlbnNpb25fc2V0X2hlYXZ5LmNjIGRlZmluZXMgRGVzY3JpcHRvclBvb2xFeHRl
bnNpb25GaW5kZXIgZm9yCi0vLyBmaW5kaW5nIGV4dGVuc2lvbnMgZnJvbSBhIERlc2NyaXB0b3JQ
b29sLgotCi0vLyBUaGlzIGlzIGFuIGludGVybmFsIGhlbHBlciBjbGFzcyBpbnRlbmRlZCBmb3Ig
dXNlIHdpdGhpbiB0aGUgcHJvdG9jb2wgYnVmZmVyCi0vLyBsaWJyYXJ5IGFuZCBnZW5lcmF0ZWQg
Y2xhc3Nlcy4gIENsaWVudHMgc2hvdWxkIG5vdCB1c2UgaXQgZGlyZWN0bHkuICBJbnN0ZWFkLAot
Ly8gdXNlIHRoZSBnZW5lcmF0ZWQgYWNjZXNzb3JzIHN1Y2ggYXMgR2V0RXh0ZW5zaW9uKCkgb2Yg
dGhlIGNsYXNzIGJlaW5nCi0vLyBleHRlbmRlZC4KLS8vCi0vLyBUaGlzIGNsYXNzIG1hbmFnZXMg
ZXh0ZW5zaW9ucyBmb3IgYSBwcm90b2NvbCBtZXNzYWdlIG9iamVjdC4gIFRoZQotLy8gbWVzc2Fn
ZSdzIEhhc0V4dGVuc2lvbigpLCBHZXRFeHRlbnNpb24oKSwgTXV0YWJsZUV4dGVuc2lvbigpLCBh
bmQKLS8vIENsZWFyRXh0ZW5zaW9uKCkgbWV0aG9kcyBhcmUganVzdCB0aGluIHdyYXBwZXJzIGFy
b3VuZCB0aGUgZW1iZWRkZWQKLS8vIEV4dGVuc2lvblNldC4gIFdoZW4gcGFyc2luZywgaWYgYSB0
YWcgbnVtYmVyIGlzIGVuY291bnRlcmVkIHdoaWNoIGlzCi0vLyBpbnNpZGUgb25lIG9mIHRoZSBt
ZXNzYWdlIHR5cGUncyBleHRlbnNpb24gcmFuZ2VzLCB0aGUgdGFnIGlzIHBhc3NlZAotLy8gb2Zm
IHRvIHRoZSBFeHRlbnNpb25TZXQgZm9yIHBhcnNpbmcuICBFdGMuCi1jbGFzcyBMSUJQUk9UT0JV
Rl9FWFBPUlQgRXh0ZW5zaW9uU2V0IHsKLSBwdWJsaWM6Ci0gIEV4dGVuc2lvblNldCgpOwotICBl
eHBsaWNpdCBFeHRlbnNpb25TZXQoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwot
ICB+RXh0ZW5zaW9uU2V0KCk7Ci0KLSAgLy8gVGhlc2UgYXJlIGNhbGxlZCBhdCBzdGFydHVwIGJ5
IHByb3RvY29sLWNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIHRvCi0gIC8vIHJlZ2lzdGVyIGtub3du
IGV4dGVuc2lvbnMuICBUaGUgcmVnaXN0cmF0aW9ucyBhcmUgdXNlZCBieSBQYXJzZUZpZWxkKCkK
LSAgLy8gdG8gbG9vayB1cCBleHRlbnNpb25zIGZvciBwYXJzZWQgZmllbGQgbnVtYmVycy4gIE5v
dGUgdGhhdCBkeW5hbWljIHBhcnNpbmcKLSAgLy8gZG9lcyBub3QgdXNlIFBhcnNlRmllbGQoKTsg
b25seSBwcm90b2NvbC1jb21waWxlci1nZW5lcmF0ZWQgcGFyc2luZwotICAvLyBtZXRob2RzIGRv
LgotICBzdGF0aWMgdm9pZCBSZWdpc3RlckV4dGVuc2lvbihjb25zdCBNZXNzYWdlTGl0ZSogY29u
dGFpbmluZ190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVy
LCBGaWVsZFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c19yZXBlYXRlZCwgYm9vbCBpc19wYWNrZWQpOwotICBzdGF0aWMgdm9pZCBSZWdpc3RlckVudW1F
eHRlbnNpb24oY29uc3QgTWVzc2FnZUxpdGUqIGNvbnRhaW5pbmdfdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19yZXBlYXRlZCwgYm9vbCBp
c19wYWNrZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtVmFsaWRp
dHlGdW5jKiBpc192YWxpZCk7Ci0gIHN0YXRpYyB2b2lkIFJlZ2lzdGVyTWVzc2FnZUV4dGVuc2lv
bihjb25zdCBNZXNzYWdlTGl0ZSogY29udGFpbmluZ190eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IG51bWJlciwgRmllbGRUeXBlIHR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX3JlcGVhdGVkLCBib29sIGlz
X3BhY2tlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1l
c3NhZ2VMaXRlKiBwcm90b3R5cGUpOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgLy8gQWRkIGFsbCBm
aWVsZHMgd2hpY2ggYXJlIGN1cnJlbnRseSBwcmVzZW50IHRvIHRoZSBnaXZlbiB2ZWN0b3IuICBU
aGlzCi0gIC8vIGlzIHVzZWZ1bCB0byBpbXBsZW1lbnQgUmVmbGVjdGlvbjo6TGlzdEZpZWxkcygp
LgotICB2b2lkIEFwcGVuZFRvTGlzdChjb25zdCBEZXNjcmlwdG9yKiBjb250YWluaW5nX3R5cGUs
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29sLAotICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiogb3V0cHV0
KSBjb25zdDsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBBY2Nlc3NvcnMKLSAgLy8KLSAgLy8gR2Vu
ZXJhdGVkIG1lc3NhZ2UgY2xhc3NlcyBpbmNsdWRlIHR5cGUtc2FmZSB0ZW1wbGF0ZWQgd3JhcHBl
cnMgYXJvdW5kCi0gIC8vIHRoZXNlIG1ldGhvZHMuICBHZW5lcmFsbHkgeW91IHNob3VsZCB1c2Ug
dGhvc2UgcmF0aGVyIHRoYW4gY2FsbCB0aGVzZQotICAvLyBkaXJlY3RseSwgdW5sZXNzIHlvdSBh
cmUgZG9pbmcgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LgotICAvLwotICAvLyBXaGVuIGNh
bGxpbmcgYW55IG9mIHRoZXNlIGFjY2Vzc29ycywgdGhlIGV4dGVuc2lvbiBudW1iZXIgcmVxdWVz
dGVkCi0gIC8vIE1VU1QgZXhpc3QgaW4gdGhlIERlc2NyaXB0b3JQb29sIHByb3ZpZGVkIHRvIHRo
ZSBjb25zdHJ1Y3Rvci4gIE90aGVyd2lzZSwKLSAgLy8gdGhlIG1ldGhvZCB3aWxsIGZhaWwgYW4g
YXNzZXJ0LiAgTm9ybWFsbHksIHRob3VnaCwgeW91IHdvdWxkIG5vdCBjYWxsCi0gIC8vIHRoZXNl
IGRpcmVjdGx5OyB5b3Ugd291bGQgZWl0aGVyIGNhbGwgdGhlIGdlbmVyYXRlZCBhY2Nlc3NvcnMg
b2YgeW91cgotICAvLyBtZXNzYWdlIGNsYXNzIChlLmcuIEdldEV4dGVuc2lvbigpKSBvciB5b3Ug
d291bGQgY2FsbCB0aGUgYWNjZXNzb3JzCi0gIC8vIG9mIHRoZSByZWZsZWN0aW9uIGludGVyZmFj
ZS4gIEluIGJvdGggY2FzZXMsIGl0IGlzIGltcG9zc2libGUgdG8KLSAgLy8gdHJpZ2dlciB0aGlz
IGFzc2VydCBmYWlsdXJlOiAgdGhlIGdlbmVyYXRlZCBhY2Nlc3NvcnMgb25seSBhY2NlcHQKLSAg
Ly8gbGlua2VkLWluIGV4dGVuc2lvbiB0eXBlcyBhcyBwYXJhbWV0ZXJzLCB3aGlsZSB0aGUgUmVm
bGVjdGlvbiBpbnRlcmZhY2UKLSAgLy8gcmVxdWlyZXMgeW91IHRvIHByb3ZpZGUgdGhlIEZpZWxk
RGVzY3JpcHRvciBkZXNjcmliaW5nIHRoZSBleHRlbnNpb24uCi0gIC8vCi0gIC8vIFdoZW4gY2Fs
bGluZyBhbnkgb2YgdGhlc2UgYWNjZXNzb3JzLCBhIHByb3RvY29sLWNvbXBpbGVyLWdlbmVyYXRl
ZAotICAvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZXh0ZW5zaW9uIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIG51bWJlciBNVVNUCi0gIC8vIGJlIGxpbmtlZCBpbiwgYW5kIHRoZSBGaWVsZERlc2NyaXB0
b3IgdXNlZCB0byByZWZlciB0byBpdCBNVVNUIGJlCi0gIC8vIHRoZSBvbmUgZ2VuZXJhdGVkIGJ5
IHRoYXQgbGlua2VkLWluIGNvZGUuICBPdGhlcndpc2UsIHRoZSBtZXRob2Qgd2lsbAotICAvLyBk
aWUgb24gYW4gYXNzZXJ0IGZhaWx1cmUuICBUaGUgbWVzc2FnZSBvYmplY3RzIHJldHVybmVkIGJ5
IHRoZSBtZXNzYWdlCi0gIC8vIGFjY2Vzc29ycyBhcmUgZ3VhcmFudGVlZCB0byBiZSBvZiB0aGUg
Y29ycmVjdCBsaW5rZWQtaW4gdHlwZS4KLSAgLy8KLSAgLy8gVGhlc2UgbWV0aG9kcyBwcmV0dHkg
bXVjaCBtYXRjaCBSZWZsZWN0aW9uIGV4Y2VwdCB0aGF0OgotICAvLyAtIFRoZXkncmUgbm90IHZp
cnR1YWwuCi0gIC8vIC0gVGhleSBpZGVudGlmeSBmaWVsZHMgYnkgbnVtYmVyIHJhdGhlciB0aGFu
IEZpZWxkRGVzY3JpcHRvcnMuCi0gIC8vIC0gVGhleSBpZGVudGlmeSBlbnVtIHZhbHVlcyB1c2lu
ZyBpbnRlZ2VycyByYXRoZXIgdGhhbiBkZXNjcmlwdG9ycy4KLSAgLy8gLSBTdHJpbmdzIHByb3Zp
ZGUgTXV0YWJsZSgpIGluIGFkZGl0aW9uIHRvIFNldCgpIGFjY2Vzc29ycy4KLQotICBib29sIEhh
cyhpbnQgbnVtYmVyKSBjb25zdDsKLSAgaW50IEV4dGVuc2lvblNpemUoaW50IG51bWJlcikgY29u
c3Q7ICAgLy8gU2l6ZSBvZiBhIHJlcGVhdGVkIGV4dGVuc2lvbi4KLSAgaW50IE51bUV4dGVuc2lv
bnMoKSBjb25zdDsgIC8vIFRoZSBudW1iZXIgb2YgZXh0ZW5zaW9ucwotICBGaWVsZFR5cGUgRXh0
ZW5zaW9uVHlwZShpbnQgbnVtYmVyKSBjb25zdDsKLSAgdm9pZCBDbGVhckV4dGVuc2lvbihpbnQg
bnVtYmVyKTsKLQotICAvLyBzaW5ndWxhciBmaWVsZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGludDMyICBHZXRJbnQzMiAoaW50IG51bWJl
ciwgaW50MzIgIGRlZmF1bHRfdmFsdWUpIGNvbnN0OwotICBpbnQ2NCAgR2V0SW50NjQgKGludCBu
dW1iZXIsIGludDY0ICBkZWZhdWx0X3ZhbHVlKSBjb25zdDsKLSAgdWludDMyIEdldFVJbnQzMihp
bnQgbnVtYmVyLCB1aW50MzIgZGVmYXVsdF92YWx1ZSkgY29uc3Q7Ci0gIHVpbnQ2NCBHZXRVSW50
NjQoaW50IG51bWJlciwgdWludDY0IGRlZmF1bHRfdmFsdWUpIGNvbnN0OwotICBmbG9hdCAgR2V0
RmxvYXQgKGludCBudW1iZXIsIGZsb2F0ICBkZWZhdWx0X3ZhbHVlKSBjb25zdDsKLSAgZG91Ymxl
IEdldERvdWJsZShpbnQgbnVtYmVyLCBkb3VibGUgZGVmYXVsdF92YWx1ZSkgY29uc3Q7Ci0gIGJv
b2wgICBHZXRCb29sICAoaW50IG51bWJlciwgYm9vbCAgIGRlZmF1bHRfdmFsdWUpIGNvbnN0Owot
ICBpbnQgICAgR2V0RW51bSAgKGludCBudW1iZXIsIGludCAgICBkZWZhdWx0X3ZhbHVlKSBjb25z
dDsKLSAgY29uc3Qgc3RyaW5nICYgR2V0U3RyaW5nIChpbnQgbnVtYmVyLCBjb25zdCBzdHJpbmcm
ICBkZWZhdWx0X3ZhbHVlKSBjb25zdDsKLSAgY29uc3QgTWVzc2FnZUxpdGUmIEdldE1lc3NhZ2Uo
aW50IG51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWVzc2Fn
ZUxpdGUmIGRlZmF1bHRfdmFsdWUpIGNvbnN0OwotICBjb25zdCBNZXNzYWdlTGl0ZSYgR2V0TWVz
c2FnZShpbnQgbnVtYmVyLCBjb25zdCBEZXNjcmlwdG9yKiBtZXNzYWdlX3R5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VGYWN0b3J5KiBmYWN0b3J5KSBjb25zdDsK
LQotICAvLyB8ZGVzY3JpcHRvcnwgbWF5IGJlIE5VTEwgc28gbG9uZyBhcyBpdCBpcyBrbm93biB0
aGF0IHRoZSBkZXNjcmlwdG9yIGZvcgotICAvLyB0aGUgZXh0ZW5zaW9uIGxpdmVzIGluIHRoZSBz
YW1lIHBvb2wgYXMgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBjb250YWluaW5nCi0gIC8vIHR5cGUu
Ci0jZGVmaW5lIGRlc2MgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yICAvLyBhdm9p
ZCBsaW5lIHdyYXBwaW5nCi0gIHZvaWQgU2V0SW50MzIgKGludCBudW1iZXIsIEZpZWxkVHlwZSB0
eXBlLCBpbnQzMiAgdmFsdWUsIGRlc2MpOwotICB2b2lkIFNldEludDY0IChpbnQgbnVtYmVyLCBG
aWVsZFR5cGUgdHlwZSwgaW50NjQgIHZhbHVlLCBkZXNjKTsKLSAgdm9pZCBTZXRVSW50MzIoaW50
IG51bWJlciwgRmllbGRUeXBlIHR5cGUsIHVpbnQzMiB2YWx1ZSwgZGVzYyk7Ci0gIHZvaWQgU2V0
VUludDY0KGludCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLCB1aW50NjQgdmFsdWUsIGRlc2MpOwot
ICB2b2lkIFNldEZsb2F0IChpbnQgbnVtYmVyLCBGaWVsZFR5cGUgdHlwZSwgZmxvYXQgIHZhbHVl
LCBkZXNjKTsKLSAgdm9pZCBTZXREb3VibGUoaW50IG51bWJlciwgRmllbGRUeXBlIHR5cGUsIGRv
dWJsZSB2YWx1ZSwgZGVzYyk7Ci0gIHZvaWQgU2V0Qm9vbCAgKGludCBudW1iZXIsIEZpZWxkVHlw
ZSB0eXBlLCBib29sICAgdmFsdWUsIGRlc2MpOwotICB2b2lkIFNldEVudW0gIChpbnQgbnVtYmVy
LCBGaWVsZFR5cGUgdHlwZSwgaW50ICAgIHZhbHVlLCBkZXNjKTsKLSAgdm9pZCBTZXRTdHJpbmco
aW50IG51bWJlciwgRmllbGRUeXBlIHR5cGUsIGNvbnN0IHN0cmluZyYgdmFsdWUsIGRlc2MpOwot
ICBzdHJpbmcgKiBNdXRhYmxlU3RyaW5nIChpbnQgbnVtYmVyLCBGaWVsZFR5cGUgdHlwZSwgZGVz
Yyk7Ci0gIE1lc3NhZ2VMaXRlKiBNdXRhYmxlTWVzc2FnZShpbnQgbnVtYmVyLCBGaWVsZFR5cGUg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2VMaXRlJiBw
cm90b3R5cGUsIGRlc2MpOwotICBNZXNzYWdlTGl0ZSogTXV0YWJsZU1lc3NhZ2UoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZWNzcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWVzc2FnZUZhY3RvcnkqIGZhY3RvcnkpOwotICAvLyBBZGRzIHRoZSBnaXZlbiBtZXNzYWdlIHRv
IHRoZSBFeHRlbnNpb25TZXQsIHRha2luZyBvd25lcnNoaXAgb2YgdGhlCi0gIC8vIG1lc3NhZ2Ug
b2JqZWN0LiBFeGlzdGluZyBtZXNzYWdlIHdpdGggdGhlIHNhbWUgbnVtYmVyIHdpbGwgYmUgZGVs
ZXRlZC4KLSAgLy8gSWYgIm1lc3NhZ2UiIGlzIE5VTEwsIHRoaXMgaXMgZXF1aXZhbGVudCB0byAi
Q2xlYXJFeHRlbnNpb24obnVtYmVyKSIuCi0gIHZvaWQgU2V0QWxsb2NhdGVkTWVzc2FnZShpbnQg
bnVtYmVyLCBGaWVsZFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1lc3NhZ2VMaXRlKiBtZXNzYWdlKTsKLSAgdm9pZCBVbnNhZmVBcmVuYVNldEFsbG9jYXRlZE1l
c3NhZ2UoaW50IG51bWJlciwgRmllbGRUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUxpdGUqIG1lc3NhZ2UpOwot
ICBNZXNzYWdlTGl0ZSogUmVsZWFzZU1lc3NhZ2UoaW50IG51bWJlciwgY29uc3QgTWVzc2FnZUxp
dGUmIHByb3RvdHlwZSk7Ci0gIE1lc3NhZ2VMaXRlKiBVbnNhZmVBcmVuYVJlbGVhc2VNZXNzYWdl
KAotICAgICAgaW50IG51bWJlciwgY29uc3QgTWVzc2FnZUxpdGUmIHByb3RvdHlwZSk7Ci0KLSAg
TWVzc2FnZUxpdGUqIFJlbGVhc2VNZXNzYWdlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3Jp
cHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VGYWN0b3J5KiBmYWN0
b3J5KTsKLSN1bmRlZiBkZXNjCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5h
Tm9WaXJ0dWFsKCkgY29uc3QgeyByZXR1cm4gYXJlbmFfOyB9Ci0KLSAgLy8gcmVwZWF0ZWQgZmll
bGRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAvLyBGZXRjaGVzIGEgUmVwZWF0ZWRGaWVsZCBleHRlbnNpb24gYnkgbnVtYmVyOyByZXR1cm5z
IHxkZWZhdWx0X3ZhbHVlfAotICAvLyBpZiBubyBzdWNoIGV4dGVuc2lvbiBleGlzdHMuIFVzZXIg
c2hvdWxkIG5vdCB0b3VjaCB0aGlzIGRpcmVjdGx5OyBpdCBpcwotICAvLyB1c2VkIGJ5IHRoZSBH
ZXRSZXBlYXRlZEV4dGVuc2lvbigpIG1ldGhvZC4KLSAgY29uc3Qgdm9pZCogR2V0UmF3UmVwZWF0
ZWRGaWVsZChpbnQgbnVtYmVyLCBjb25zdCB2b2lkKiBkZWZhdWx0X3ZhbHVlKSBjb25zdDsKLSAg
Ly8gRmV0Y2hlcyBhIG11dGFibGUgdmVyc2lvbiBvZiBhIFJlcGVhdGVkRmllbGQgZXh0ZW5zaW9u
IGJ5IG51bWJlciwKLSAgLy8gaW5zdGFudGlhdGluZyBvbmUgaWYgbm9uZSBleGlzdHMuIFNpbWls
YXIgdG8gYWJvdmUsIHVzZXIgc2hvdWxkIG5vdCB1c2UKLSAgLy8gdGhpcyBkaXJlY3RseTsgaXQg
dW5kZXJsaWVzIE11dGFibGVSZXBlYXRlZEV4dGVuc2lvbigpLgotICB2b2lkKiBNdXRhYmxlUmF3
UmVwZWF0ZWRGaWVsZChpbnQgbnVtYmVyLCBGaWVsZFR5cGUgZmllbGRfdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWQsIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZGVzYyk7Ci0KLSAgLy8gVGhpcyBpcyBhbiBvdmVybG9hZCBvZiBNdXRhYmxlUmF3UmVwZWF0
ZWRGaWVsZCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5Ci0gIC8vIHdpdGggb2xkIGNvZGUgdXNp
bmcgYSBwcmV2aW91cyBBUEkuIFRoaXMgdmVyc2lvbiBvZgotICAvLyBNdXRhYmxlUmF3UmVwZWF0
ZWRGaWVsZCgpIHdpbGwgR09PR0xFX0NIRUNLLWZhaWwgb24gYSBtaXNzaW5nIGV4dGVuc2lvbi4K
LSAgLy8gKEUuZy46IGJvcmcvY2xpZW50cy9pbnRlcm5hbC9wcm90bzEvcHJvdG8yX3JlZmxlY3Rp
b24uY2MuKQotICB2b2lkKiBNdXRhYmxlUmF3UmVwZWF0ZWRGaWVsZChpbnQgbnVtYmVyKTsKLQot
ICBpbnQzMiAgR2V0UmVwZWF0ZWRJbnQzMiAoaW50IG51bWJlciwgaW50IGluZGV4KSBjb25zdDsK
LSAgaW50NjQgIEdldFJlcGVhdGVkSW50NjQgKGludCBudW1iZXIsIGludCBpbmRleCkgY29uc3Q7
Ci0gIHVpbnQzMiBHZXRSZXBlYXRlZFVJbnQzMihpbnQgbnVtYmVyLCBpbnQgaW5kZXgpIGNvbnN0
OwotICB1aW50NjQgR2V0UmVwZWF0ZWRVSW50NjQoaW50IG51bWJlciwgaW50IGluZGV4KSBjb25z
dDsKLSAgZmxvYXQgIEdldFJlcGVhdGVkRmxvYXQgKGludCBudW1iZXIsIGludCBpbmRleCkgY29u
c3Q7Ci0gIGRvdWJsZSBHZXRSZXBlYXRlZERvdWJsZShpbnQgbnVtYmVyLCBpbnQgaW5kZXgpIGNv
bnN0OwotICBib29sICAgR2V0UmVwZWF0ZWRCb29sICAoaW50IG51bWJlciwgaW50IGluZGV4KSBj
b25zdDsKLSAgaW50ICAgIEdldFJlcGVhdGVkRW51bSAgKGludCBudW1iZXIsIGludCBpbmRleCkg
Y29uc3Q7Ci0gIGNvbnN0IHN0cmluZyAmIEdldFJlcGVhdGVkU3RyaW5nIChpbnQgbnVtYmVyLCBp
bnQgaW5kZXgpIGNvbnN0OwotICBjb25zdCBNZXNzYWdlTGl0ZSYgR2V0UmVwZWF0ZWRNZXNzYWdl
KGludCBudW1iZXIsIGludCBpbmRleCkgY29uc3Q7Ci0KLSAgdm9pZCBTZXRSZXBlYXRlZEludDMy
IChpbnQgbnVtYmVyLCBpbnQgaW5kZXgsIGludDMyICB2YWx1ZSk7Ci0gIHZvaWQgU2V0UmVwZWF0
ZWRJbnQ2NCAoaW50IG51bWJlciwgaW50IGluZGV4LCBpbnQ2NCAgdmFsdWUpOwotICB2b2lkIFNl
dFJlcGVhdGVkVUludDMyKGludCBudW1iZXIsIGludCBpbmRleCwgdWludDMyIHZhbHVlKTsKLSAg
dm9pZCBTZXRSZXBlYXRlZFVJbnQ2NChpbnQgbnVtYmVyLCBpbnQgaW5kZXgsIHVpbnQ2NCB2YWx1
ZSk7Ci0gIHZvaWQgU2V0UmVwZWF0ZWRGbG9hdCAoaW50IG51bWJlciwgaW50IGluZGV4LCBmbG9h
dCAgdmFsdWUpOwotICB2b2lkIFNldFJlcGVhdGVkRG91YmxlKGludCBudW1iZXIsIGludCBpbmRl
eCwgZG91YmxlIHZhbHVlKTsKLSAgdm9pZCBTZXRSZXBlYXRlZEJvb2wgIChpbnQgbnVtYmVyLCBp
bnQgaW5kZXgsIGJvb2wgICB2YWx1ZSk7Ci0gIHZvaWQgU2V0UmVwZWF0ZWRFbnVtICAoaW50IG51
bWJlciwgaW50IGluZGV4LCBpbnQgICAgdmFsdWUpOwotICB2b2lkIFNldFJlcGVhdGVkU3RyaW5n
KGludCBudW1iZXIsIGludCBpbmRleCwgY29uc3Qgc3RyaW5nJiB2YWx1ZSk7Ci0gIHN0cmluZyAq
IE11dGFibGVSZXBlYXRlZFN0cmluZyAoaW50IG51bWJlciwgaW50IGluZGV4KTsKLSAgTWVzc2Fn
ZUxpdGUqIE11dGFibGVSZXBlYXRlZE1lc3NhZ2UoaW50IG51bWJlciwgaW50IGluZGV4KTsKLQot
I2RlZmluZSBkZXNjIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciAgLy8gYXZvaWQg
bGluZSB3cmFwcGluZwotICB2b2lkIEFkZEludDMyIChpbnQgbnVtYmVyLCBGaWVsZFR5cGUgdHlw
ZSwgYm9vbCBwYWNrZWQsIGludDMyICB2YWx1ZSwgZGVzYyk7Ci0gIHZvaWQgQWRkSW50NjQgKGlu
dCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLCBib29sIHBhY2tlZCwgaW50NjQgIHZhbHVlLCBkZXNj
KTsKLSAgdm9pZCBBZGRVSW50MzIoaW50IG51bWJlciwgRmllbGRUeXBlIHR5cGUsIGJvb2wgcGFj
a2VkLCB1aW50MzIgdmFsdWUsIGRlc2MpOwotICB2b2lkIEFkZFVJbnQ2NChpbnQgbnVtYmVyLCBG
aWVsZFR5cGUgdHlwZSwgYm9vbCBwYWNrZWQsIHVpbnQ2NCB2YWx1ZSwgZGVzYyk7Ci0gIHZvaWQg
QWRkRmxvYXQgKGludCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLCBib29sIHBhY2tlZCwgZmxvYXQg
IHZhbHVlLCBkZXNjKTsKLSAgdm9pZCBBZGREb3VibGUoaW50IG51bWJlciwgRmllbGRUeXBlIHR5
cGUsIGJvb2wgcGFja2VkLCBkb3VibGUgdmFsdWUsIGRlc2MpOwotICB2b2lkIEFkZEJvb2wgIChp
bnQgbnVtYmVyLCBGaWVsZFR5cGUgdHlwZSwgYm9vbCBwYWNrZWQsIGJvb2wgICB2YWx1ZSwgZGVz
Yyk7Ci0gIHZvaWQgQWRkRW51bSAgKGludCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLCBib29sIHBh
Y2tlZCwgaW50ICAgIHZhbHVlLCBkZXNjKTsKLSAgdm9pZCBBZGRTdHJpbmcoaW50IG51bWJlciwg
RmllbGRUeXBlIHR5cGUsIGNvbnN0IHN0cmluZyYgdmFsdWUsIGRlc2MpOwotICBzdHJpbmcgKiBB
ZGRTdHJpbmcgKGludCBudW1iZXIsIEZpZWxkVHlwZSB0eXBlLCBkZXNjKTsKLSAgTWVzc2FnZUxp
dGUqIEFkZE1lc3NhZ2UoaW50IG51bWJlciwgRmllbGRUeXBlIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2VMaXRlJiBwcm90b3R5cGUsIGRlc2MpOwotICBNZXNz
YWdlTGl0ZSogQWRkTWVzc2FnZShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VGYWN0b3J5KiBmYWN0b3J5KTsKLSAgdm9p
ZCBBZGRBbGxvY2F0ZWRNZXNzYWdlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VMaXRlKiBuZXdfZW50cnkpOwotI3Vu
ZGVmIGRlc2MKLQotICB2b2lkIFJlbW92ZUxhc3QoaW50IG51bWJlcik7Ci0gIE1lc3NhZ2VMaXRl
KiBSZWxlYXNlTGFzdChpbnQgbnVtYmVyKTsKLSAgdm9pZCBTd2FwRWxlbWVudHMoaW50IG51bWJl
ciwgaW50IGluZGV4MSwgaW50IGluZGV4Mik7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gVE9ETyhr
ZW50b24pOiAgSGFyZGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYWNjZXNzb3JzCi0KLSAgLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLSAgLy8gY29udmVuaWVuY2UgbWV0aG9kcyBmb3IgaW1wbGVtZW50aW5nIG1ldGhvZHMg
b2YgTWVzc2FnZQotICAvLwotICAvLyBUaGVzZSBjb3VsZCBhbGwgYmUgaW1wbGVtZW50ZWQgaW4g
dGVybXMgb2YgdGhlIG90aGVyIG1ldGhvZHMgb2YgdGhpcwotICAvLyBjbGFzcywgYnV0IHByb3Zp
ZGluZyB0aGVtIGhlcmUgaGVscHMga2VlcCB0aGUgZ2VuZXJhdGVkIGNvZGUgc2l6ZSBkb3duLgot
Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgRXh0ZW5zaW9uU2V0JiBv
dGhlcik7Ci0gIHZvaWQgU3dhcChFeHRlbnNpb25TZXQqIG90aGVyKTsKLSAgdm9pZCBTd2FwRXh0
ZW5zaW9uKEV4dGVuc2lvblNldCogb3RoZXIsIGludCBudW1iZXIpOwotICBib29sIElzSW5pdGlh
bGl6ZWQoKSBjb25zdDsKLQotICAvLyBQYXJzZXMgYSBzaW5nbGUgZXh0ZW5zaW9uIGZyb20gdGhl
IGlucHV0LiBUaGUgaW5wdXQgc2hvdWxkIHN0YXJ0IG91dAotICAvLyBwb3NpdGlvbmVkIGltbWVk
aWF0ZWx5IGFmdGVyIHRoZSB0YWcuCi0gIGJvb2wgUGFyc2VGaWVsZCh1aW50MzIgdGFnLCBpbzo6
Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgICAgICAgICAgICAgICBFeHRlbnNpb25GaW5k
ZXIqIGV4dGVuc2lvbl9maW5kZXIsCi0gICAgICAgICAgICAgICAgICBGaWVsZFNraXBwZXIqIGZp
ZWxkX3NraXBwZXIpOwotCi0gIC8vIFNwZWNpZmljIHZlcnNpb25zIGZvciBsaXRlIG9yIGZ1bGwg
bWVzc2FnZXMgKGNvbnN0cnVjdHMgdGhlIGFwcHJvcHJpYXRlCi0gIC8vIEZpZWxkU2tpcHBlciBh
dXRvbWF0aWNhbGx5KS4gIHxjb250YWluaW5nX3R5cGV8IGlzIHRoZSBkZWZhdWx0Ci0gIC8vIGlu
c3RhbmNlIGZvciB0aGUgY29udGFpbmluZyBtZXNzYWdlOyBpdCBpcyB1c2VkIG9ubHkgdG8gbG9v
ayB1cCB0aGUKLSAgLy8gZXh0ZW5zaW9uIGJ5IG51bWJlci4gIFNlZSBSZWdpc3RlckV4dGVuc2lv
bigpLCBhYm92ZS4gIFVubGlrZSB0aGUgb3RoZXIKLSAgLy8gbWV0aG9kcyBvZiBFeHRlbnNpb25T
ZXQsIHRoaXMgb25seSB3b3JrcyBmb3IgZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZXMgLS0KLSAgLy8g
aXQgbG9va3MgdXAgZXh0ZW5zaW9ucyByZWdpc3RlcmVkIHVzaW5nIFJlZ2lzdGVyRXh0ZW5zaW9u
KCkuCi0gIGJvb2wgUGFyc2VGaWVsZCh1aW50MzIgdGFnLCBpbzo6Q29kZWRJbnB1dFN0cmVhbSog
aW5wdXQsCi0gICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlTGl0ZSogY29udGFpbmluZ190
eXBlKTsKLSAgYm9vbCBQYXJzZUZpZWxkKHVpbnQzMiB0YWcsIGlvOjpDb2RlZElucHV0U3RyZWFt
KiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UqIGNvbnRhaW5pbmdfdHlw
ZSwKLSAgICAgICAgICAgICAgICAgIFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZHMpOwot
ICBib29sIFBhcnNlRmllbGQodWludDMyIHRhZywgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0
LAotICAgICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZUxpdGUqIGNvbnRhaW5pbmdfdHlwZSwK
LSAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogdW5rbm93bl9maWVsZHMp
OwotCi0gIC8vIFBhcnNlIGFuIGVudGlyZSBtZXNzYWdlIGluIE1lc3NhZ2VTZXQgZm9ybWF0LiAg
U3VjaCBtZXNzYWdlcyBoYXZlIG5vCi0gIC8vIGZpZWxkcywgb25seSBleHRlbnNpb25zLgotICBi
b29sIFBhcnNlTWVzc2FnZVNldChpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgIEV4dGVuc2lvbkZpbmRlciogZXh0ZW5zaW9uX2ZpbmRlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgTWVzc2FnZVNldEZpZWxkU2tpcHBlciogZmllbGRfc2tpcHBlcik7
Ci0KLSAgLy8gU3BlY2lmaWMgdmVyc2lvbnMgZm9yIGxpdGUgb3IgZnVsbCBtZXNzYWdlcyAoY29u
c3RydWN0cyB0aGUgYXBwcm9wcmlhdGUKLSAgLy8gRmllbGRTa2lwcGVyIGF1dG9tYXRpY2FsbHkp
LgotICBib29sIFBhcnNlTWVzc2FnZVNldChpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2VMaXRlKiBjb250YWluaW5nX3R5cGUp
OwotICBib29sIFBhcnNlTWVzc2FnZVNldChpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UqIGNvbnRhaW5pbmdfdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgVW5rbm93bkZpZWxkU2V0KiB1bmtub3duX2ZpZWxkcyk7Ci0K
LSAgLy8gV3JpdGUgYWxsIGV4dGVuc2lvbiBmaWVsZHMgd2l0aCBmaWVsZCBudW1iZXJzIGluIHRo
ZSByYW5nZQotICAvLyAgIFtzdGFydF9maWVsZF9udW1iZXIsIGVuZF9maWVsZF9udW1iZXIpCi0g
IC8vIHRvIHRoZSBvdXRwdXQgc3RyZWFtLCB1c2luZyB0aGUgY2FjaGVkIHNpemVzIGNvbXB1dGVk
IHdoZW4gQnl0ZVNpemUoKSB3YXMKLSAgLy8gbGFzdCBjYWxsZWQuICBOb3RlIHRoYXQgdGhlIHJh
bmdlIGJvdW5kcyBhcmUgaW5jbHVzaXZlLWV4Y2x1c2l2ZS4KLSAgdm9pZCBTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXMoaW50IHN0YXJ0X2ZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGVuZF9maWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLQotICAvLyBT
YW1lIGFzIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcywgYnV0IHdpdGhvdXQgYW55IGJvdW5kcyBj
aGVja2luZy4KLSAgLy8gVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRhcmdldCBoYXMgc3Vm
ZmljaWVudCBjYXBhY2l0eSBmb3IgdGhlCi0gIC8vIHNlcmlhbGl6ZWQgZXh0ZW5zaW9ucy4KLSAg
Ly8KLSAgLy8gUmV0dXJucyBhIHBvaW50ZXIgcGFzdCB0aGUgbGFzdCB3cml0dGVuIGJ5dGUuCi0g
IHVpbnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KGludCBzdGFydF9maWVsZF9u
dW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmRf
ZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50OCogdGFyZ2V0KSBjb25zdDsKLQotICAvLyBMaWtlIGFib3ZlIGJ1dCBzZXJpYWxpemVzIGlu
IE1lc3NhZ2VTZXQgZm9ybWF0LgotICB2b2lkIFNlcmlhbGl6ZU1lc3NhZ2VTZXRXaXRoQ2FjaGVk
U2l6ZXMoaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICB1aW50OCogU2Vy
aWFsaXplTWVzc2FnZVNldFdpdGhDYWNoZWRTaXplc1RvQXJyYXkodWludDgqIHRhcmdldCkgY29u
c3Q7Ci0KLSAgLy8gUmV0dXJucyB0aGUgdG90YWwgc2VyaWFsaXplZCBzaXplIG9mIGFsbCB0aGUg
ZXh0ZW5zaW9ucy4KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0KLSAgLy8gTGlrZSBCeXRlU2l6
ZSgpIGJ1dCB1c2VzIE1lc3NhZ2VTZXQgZm9ybWF0LgotICBpbnQgTWVzc2FnZVNldEJ5dGVTaXpl
KCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyAoYW4gZXN0aW1hdGUgb2YpIHRoZSB0b3RhbCBudW1i
ZXIgb2YgYnl0ZXMgdXNlZCBmb3Igc3RvcmluZyB0aGUKLSAgLy8gZXh0ZW5zaW9ucyBpbiBtZW1v
cnksIGV4Y2x1ZGluZyBzaXplb2YoKnRoaXMpLiAgSWYgdGhlIEV4dGVuc2lvblNldCBpcwotICAv
LyBmb3IgYSBsaXRlIG1lc3NhZ2UgKGFuZCB0aHVzIHBvc3NpYmx5IGNvbnRhaW5zIGxpdGUgbWVz
c2FnZXMpLCB0aGUgcmVzdWx0cwotICAvLyBhcmUgdW5kZWZpbmVkIChtaWdodCB3b3JrLCBtaWdo
dCBjcmFzaCwgbWlnaHQgY29ycnVwdCBkYXRhLCBtaWdodCBub3QgZXZlbgotICAvLyBiZSBsaW5r
ZWQgaW4pLiAgSXQncyB1cCB0byB0aGUgcHJvdG9jb2wgY29tcGlsZXIgdG8gYXZvaWQgY2FsbGlu
ZyB0aGlzIG9uCi0gIC8vIHN1Y2ggRXh0ZW5zaW9uU2V0cyAoZWFzeSBlbm91Z2ggc2luY2UgbGl0
ZSBtZXNzYWdlcyBkb24ndCBpbXBsZW1lbnQKLSAgLy8gU3BhY2VVc2VkKCkpLgotICBpbnQgU3Bh
Y2VVc2VkRXhjbHVkaW5nU2VsZigpIGNvbnN0OwotCi0gcHJpdmF0ZToKLQotICAvLyBJbnRlcmZh
Y2Ugb2YgYSBsYXppbHkgcGFyc2VkIHNpbmd1bGFyIG1lc3NhZ2UgZXh0ZW5zaW9uLgotICBjbGFz
cyBMSUJQUk9UT0JVRl9FWFBPUlQgTGF6eU1lc3NhZ2VFeHRlbnNpb24gewotICAgcHVibGljOgot
ICAgIExhenlNZXNzYWdlRXh0ZW5zaW9uKCkge30KLSAgICB2aXJ0dWFsIH5MYXp5TWVzc2FnZUV4
dGVuc2lvbigpIHt9Ci0KLSAgICB2aXJ0dWFsIExhenlNZXNzYWdlRXh0ZW5zaW9uKiBOZXcoOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNv
bnN0IE1lc3NhZ2VMaXRlJiBHZXRNZXNzYWdlKAotICAgICAgICBjb25zdCBNZXNzYWdlTGl0ZSYg
cHJvdG90eXBlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBNZXNzYWdlTGl0ZSogTXV0YWJsZU1l
c3NhZ2UoY29uc3QgTWVzc2FnZUxpdGUmIHByb3RvdHlwZSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBTZXRBbGxvY2F0ZWRNZXNzYWdlKE1lc3NhZ2VMaXRlICptZXNzYWdlKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIFVuc2FmZUFyZW5hU2V0QWxsb2NhdGVkTWVzc2FnZShNZXNzYWdlTGl0ZSAqbWVz
c2FnZSkgPSAwOwotICAgIHZpcnR1YWwgTWVzc2FnZUxpdGUqIFJlbGVhc2VNZXNzYWdlKGNvbnN0
IE1lc3NhZ2VMaXRlJiBwcm90b3R5cGUpID0gMDsKLSAgICB2aXJ0dWFsIE1lc3NhZ2VMaXRlKiBV
bnNhZmVBcmVuYVJlbGVhc2VNZXNzYWdlKAotICAgICAgICBjb25zdCBNZXNzYWdlTGl0ZSYgcHJv
dG90eXBlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGludCBCeXRlU2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGlu
dCBTcGFjZVVzZWQoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgTWVyZ2VGcm9tKGNv
bnN0IExhenlNZXNzYWdlRXh0ZW5zaW9uJiBvdGhlcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBD
bGVhcigpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBSZWFkTWVzc2FnZShjb25zdCBNZXNzYWdl
TGl0ZSYgcHJvdG90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6Q29kZWRJ
bnB1dFN0cmVhbSogaW5wdXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGVNZXNzYWdlKGlu
dCBudW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6Q29kZWRPdXRwdXRT
dHJlYW0qIG91dHB1dCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdWludDgqIFdyaXRlTWVzc2Fn
ZVRvQXJyYXkoaW50IG51bWJlciwgdWludDgqIHRhcmdldCkgY29uc3QgPSAwOwotICAgcHJpdmF0
ZToKLSAgICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTGF6eU1lc3NhZ2VFeHRl
bnNpb24pOwotICB9OwotICBzdHJ1Y3QgRXh0ZW5zaW9uIHsKLSAgICAvLyBUaGUgb3JkZXIgb2Yg
dGhlc2UgZmllbGRzIHBhY2tzIEV4dGVuc2lvbiBpbnRvIDI0IGJ5dGVzIHdoZW4gdXNpbmcgOAot
ICAgIC8vIGJ5dGUgYWxpZ25tZW50LiBDb25zaWRlciB0aGlzIHdoZW4gYWRkaW5nIG9yIHJlbW92
aW5nIGZpZWxkcyBoZXJlLgotICAgIHVuaW9uIHsKLSAgICAgIGludDMyICAgICAgICAgICAgICAg
ICBpbnQzMl92YWx1ZTsKLSAgICAgIGludDY0ICAgICAgICAgICAgICAgICBpbnQ2NF92YWx1ZTsK
LSAgICAgIHVpbnQzMiAgICAgICAgICAgICAgICB1aW50MzJfdmFsdWU7Ci0gICAgICB1aW50NjQg
ICAgICAgICAgICAgICAgdWludDY0X3ZhbHVlOwotICAgICAgZmxvYXQgICAgICAgICAgICAgICAg
IGZsb2F0X3ZhbHVlOwotICAgICAgZG91YmxlICAgICAgICAgICAgICAgIGRvdWJsZV92YWx1ZTsK
LSAgICAgIGJvb2wgICAgICAgICAgICAgICAgICBib29sX3ZhbHVlOwotICAgICAgaW50ICAgICAg
ICAgICAgICAgICAgIGVudW1fdmFsdWU7Ci0gICAgICBzdHJpbmcqICAgICAgICAgICAgICAgc3Ry
aW5nX3ZhbHVlOwotICAgICAgTWVzc2FnZUxpdGUqICAgICAgICAgIG1lc3NhZ2VfdmFsdWU7Ci0g
ICAgICBMYXp5TWVzc2FnZUV4dGVuc2lvbiogbGF6eW1lc3NhZ2VfdmFsdWU7Ci0KLSAgICAgIFJl
cGVhdGVkRmllbGQgICA8aW50MzIgICAgICA+KiByZXBlYXRlZF9pbnQzMl92YWx1ZTsKLSAgICAg
IFJlcGVhdGVkRmllbGQgICA8aW50NjQgICAgICA+KiByZXBlYXRlZF9pbnQ2NF92YWx1ZTsKLSAg
ICAgIFJlcGVhdGVkRmllbGQgICA8dWludDMyICAgICA+KiByZXBlYXRlZF91aW50MzJfdmFsdWU7
Ci0gICAgICBSZXBlYXRlZEZpZWxkICAgPHVpbnQ2NCAgICAgPiogcmVwZWF0ZWRfdWludDY0X3Zh
bHVlOwotICAgICAgUmVwZWF0ZWRGaWVsZCAgIDxmbG9hdCAgICAgID4qIHJlcGVhdGVkX2Zsb2F0
X3ZhbHVlOwotICAgICAgUmVwZWF0ZWRGaWVsZCAgIDxkb3VibGUgICAgID4qIHJlcGVhdGVkX2Rv
dWJsZV92YWx1ZTsKLSAgICAgIFJlcGVhdGVkRmllbGQgICA8Ym9vbCAgICAgICA+KiByZXBlYXRl
ZF9ib29sX3ZhbHVlOwotICAgICAgUmVwZWF0ZWRGaWVsZCAgIDxpbnQgICAgICAgID4qIHJlcGVh
dGVkX2VudW1fdmFsdWU7Ci0gICAgICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZyAgICAgPiogcmVw
ZWF0ZWRfc3RyaW5nX3ZhbHVlOwotICAgICAgUmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlTGl0ZT4q
IHJlcGVhdGVkX21lc3NhZ2VfdmFsdWU7Ci0gICAgfTsKLQotICAgIEZpZWxkVHlwZSB0eXBlOwot
ICAgIGJvb2wgaXNfcmVwZWF0ZWQ7Ci0KLSAgICAvLyBGb3Igc2luZ3VsYXIgdHlwZXMsIGluZGlj
YXRlcyBpZiB0aGUgZXh0ZW5zaW9uIGlzICJjbGVhcmVkIi4gIFRoaXMKLSAgICAvLyBoYXBwZW5z
IHdoZW4gYW4gZXh0ZW5zaW9uIGlzIHNldCBhbmQgdGhlbiBsYXRlciBjbGVhcmVkIGJ5IHRoZSBj
YWxsZXIuCi0gICAgLy8gV2Ugd2FudCB0byBrZWVwIHRoZSBFeHRlbnNpb24gb2JqZWN0IGFyb3Vu
ZCBmb3IgcmV1c2UsIHNvIGluc3RlYWQgb2YKLSAgICAvLyByZW1vdmluZyBpdCBmcm9tIHRoZSBt
YXAsIHdlIGp1c3Qgc2V0IGlzX2NsZWFyZWQgPSB0cnVlLiAgVGhpcyBoYXMgbm8KLSAgICAvLyBt
ZWFuaW5nIGZvciByZXBlYXRlZCB0eXBlczsgZm9yIHRob3NlLCB0aGUgc2l6ZSBvZiB0aGUgUmVw
ZWF0ZWRGaWVsZAotICAgIC8vIHNpbXBseSBiZWNvbWVzIHplcm8gd2hlbiBjbGVhcmVkLgotICAg
IGJvb2wgaXNfY2xlYXJlZCA6IDQ7Ci0KLSAgICAvLyBGb3Igc2luZ3VsYXIgbWVzc2FnZSB0eXBl
cywgaW5kaWNhdGVzIHdoZXRoZXIgbGF6eSBwYXJzaW5nIGlzIGVuYWJsZWQKLSAgICAvLyBmb3Ig
dGhpcyBleHRlbnNpb24uIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCB3aGVuIHR5cGUgPT0gVFlQ
RV9NRVNTQUdFCi0gICAgLy8gYW5kICFpc19yZXBlYXRlZCBiZWNhdXNlIHdlIG9ubHkgc3VwcG9y
dCBsYXp5IHBhcnNpbmcgZm9yIHNpbmd1bGFyCi0gICAgLy8gbWVzc2FnZSB0eXBlcyBjdXJyZW50
bHkuIElmIGlzX2xhenkgPSB0cnVlLCB0aGUgZXh0ZW5zaW9uIGlzIHN0b3JlZCBpbgotICAgIC8v
IGxhenltZXNzYWdlX3ZhbHVlLiBPdGhlcndpc2UsIHRoZSBleHRlbnNpb24gd2lsbCBiZSBtZXNz
YWdlX3ZhbHVlLgotICAgIGJvb2wgaXNfbGF6eSA6IDQ7Ci0KLSAgICAvLyBGb3IgcmVwZWF0ZWQg
dHlwZXMsIHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBbcGFja2VkPXRydWVdIG9wdGlvbiBpcyBzZXQu
Ci0gICAgYm9vbCBpc19wYWNrZWQ7Ci0KLSAgICAvLyBGb3IgcGFja2VkIGZpZWxkcywgdGhlIHNp
emUgb2YgdGhlIHBhY2tlZCBkYXRhIGlzIHJlY29yZGVkIGhlcmUgd2hlbgotICAgIC8vIEJ5dGVT
aXplKCkgaXMgY2FsbGVkIHRoZW4gdXNlZCBkdXJpbmcgc2VyaWFsaXphdGlvbi4KLSAgICAvLyBU
T0RPKGtlbnRvbik6ICBVc2UgYXRvbWljPGludD4gd2hlbiBDKysgc3VwcG9ydHMgaXQuCi0gICAg
bXV0YWJsZSBpbnQgY2FjaGVkX3NpemU7Ci0KLSAgICAvLyBUaGUgZGVzY3JpcHRvciBmb3IgdGhp
cyBleHRlbnNpb24sIGlmIG9uZSBleGlzdHMgYW5kIGlzIGtub3duLiAgTWF5IGJlCi0gICAgLy8g
TlVMTC4gIE11c3Qgbm90IGJlIE5VTEwgaWYgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBleHRlbnNp
b24gZG9lcyBub3QKLSAgICAvLyBsaXZlIGluIHRoZSBzYW1lIHBvb2wgYXMgdGhlIGRlc2NyaXB0
b3IgZm9yIHRoZSBjb250YWluaW5nIHR5cGUuCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yOwotCi0gICAgLy8gU29tZSBoZWxwZXIgbWV0aG9kcyBmb3Igb3BlcmF0aW9ucyBv
biBhIHNpbmdsZSBFeHRlbnNpb24uCi0gICAgdm9pZCBTZXJpYWxpemVGaWVsZFdpdGhDYWNoZWRT
aXplcygKLSAgICAgICAgaW50IG51bWJlciwKLSAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFt
KiBvdXRwdXQpIGNvbnN0OwotICAgIHVpbnQ4KiBTZXJpYWxpemVGaWVsZFdpdGhDYWNoZWRTaXpl
c1RvQXJyYXkoCi0gICAgICAgIGludCBudW1iZXIsCi0gICAgICAgIHVpbnQ4KiB0YXJnZXQpIGNv
bnN0OwotICAgIHZvaWQgU2VyaWFsaXplTWVzc2FnZVNldEl0ZW1XaXRoQ2FjaGVkU2l6ZXMoCi0g
ICAgICAgIGludCBudW1iZXIsCi0gICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0
KSBjb25zdDsKLSAgICB1aW50OCogU2VyaWFsaXplTWVzc2FnZVNldEl0ZW1XaXRoQ2FjaGVkU2l6
ZXNUb0FycmF5KAotICAgICAgICBpbnQgbnVtYmVyLAotICAgICAgICB1aW50OCogdGFyZ2V0KSBj
b25zdDsKLSAgICBpbnQgQnl0ZVNpemUoaW50IG51bWJlcikgY29uc3Q7Ci0gICAgaW50IE1lc3Nh
Z2VTZXRJdGVtQnl0ZVNpemUoaW50IG51bWJlcikgY29uc3Q7Ci0gICAgdm9pZCBDbGVhcigpOwot
ICAgIGludCBHZXRTaXplKCkgY29uc3Q7Ci0gICAgdm9pZCBGcmVlKCk7Ci0gICAgaW50IFNwYWNl
VXNlZEV4Y2x1ZGluZ1NlbGYoKSBjb25zdDsKLSAgfTsKLQotCi0gIC8vIE1lcmdlcyBleGlzdGlu
ZyBFeHRlbnNpb24gZnJvbSBvdGhlcl9leHRlbnNpb24KLSAgdm9pZCBJbnRlcm5hbEV4dGVuc2lv
bk1lcmdlRnJvbShpbnQgbnVtYmVyLCBjb25zdCBFeHRlbnNpb24mIG90aGVyX2V4dGVuc2lvbik7
Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGFuZCBmaWxscyBmaWVsZF9udW1iZXIgYW5kIGV4dGVuc2lv
biBpZiBleHRlbnNpb24gaXMgZm91bmQuCi0gIC8vIE5vdGUgdG8gc3VwcG9ydCBwYWNrZWQgcmVw
ZWF0ZWQgZmllbGQgY29tcGF0aWJpbGl0eSwgaXQgYWxzbyBmaWxscyB3aGV0aGVyCi0gIC8vIHRo
ZSB0YWcgb24gd2lyZSBpcyBwYWNrZWQsIHdoaWNoIGNhbiBiZSBkaWZmZXJlbnQgZnJvbQotICAv
LyBleHRlbnNpb24tPmlzX3BhY2tlZCAod2hldGhlciBwYWNrZWQ9dHJ1ZSBpcyBzcGVjaWZpZWQp
LgotICBib29sIEZpbmRFeHRlbnNpb25JbmZvRnJvbVRhZyh1aW50MzIgdGFnLCBFeHRlbnNpb25G
aW5kZXIqIGV4dGVuc2lvbl9maW5kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCogZmllbGRfbnVtYmVyLCBFeHRlbnNpb25JbmZvKiBleHRlbnNpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHdhc19wYWNrZWRfb25fd2lyZSk7Ci0KLSAgLy8g
UmV0dXJucyB0cnVlIGFuZCBmaWxscyBleHRlbnNpb24gaWYgZXh0ZW5zaW9uIGlzIGZvdW5kLgot
ICAvLyBOb3RlIHRvIHN1cHBvcnQgcGFja2VkIHJlcGVhdGVkIGZpZWxkIGNvbXBhdGliaWxpdHks
IGl0IGFsc28gZmlsbHMgd2hldGhlcgotICAvLyB0aGUgdGFnIG9uIHdpcmUgaXMgcGFja2VkLCB3
aGljaCBjYW4gYmUgZGlmZmVyZW50IGZyb20KLSAgLy8gZXh0ZW5zaW9uLT5pc19wYWNrZWQgKHdo
ZXRoZXIgcGFja2VkPXRydWUgaXMgc3BlY2lmaWVkKS4KLSAgYm9vbCBGaW5kRXh0ZW5zaW9uSW5m
b0Zyb21GaWVsZE51bWJlcihpbnQgd2lyZV90eXBlLCBpbnQgZmllbGRfbnVtYmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbkZpbmRlciogZXh0ZW5z
aW9uX2ZpbmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRl
bnNpb25JbmZvKiBleHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCogd2FzX3BhY2tlZF9vbl93aXJlKTsKLQotICAvLyBQYXJzZXMgYSBzaW5nbGUg
ZXh0ZW5zaW9uIGZyb20gdGhlIGlucHV0LiBUaGUgaW5wdXQgc2hvdWxkIHN0YXJ0IG91dAotICAv
LyBwb3NpdGlvbmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB3aXJlIHRhZy4gVGhpcyBtZXRob2Qg
aXMgY2FsbGVkIGluCi0gIC8vIFBhcnNlRmllbGQoKSBhZnRlciBmaWVsZCBudW1iZXIgYW5kIHdh
c19wYWNrZWRfb25fd2lyZSBpcyBleHRyYWN0ZWQgZnJvbQotICAvLyB0aGUgd2lyZSB0YWcgYW5k
IEV4dGVuc2lvbkluZm8gaXMgZm91bmQgYnkgdGhlIGZpZWxkIG51bWJlci4KLSAgYm9vbCBQYXJz
ZUZpZWxkV2l0aEV4dGVuc2lvbkluZm8oaW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCB3YXNfcGFja2VkX29uX3dpcmUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEV4dGVuc2lvbkluZm8mIGV4dGVuc2lvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkSW5wdXRTdHJlYW0q
IGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZFNraXBwZXIq
IGZpZWxkX3NraXBwZXIpOwotCi0gIC8vIExpa2UgUGFyc2VGaWVsZCgpLCBidXQgdGhpcyBtZXRo
b2QgbWF5IHBhcnNlIHNpbmd1bGFyIG1lc3NhZ2UgZXh0ZW5zaW9ucwotICAvLyBsYXppbHkgZGVw
ZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBGTEFHU19lYWdlcmx5X3BhcnNlX21lc3NhZ2Vfc2V0cy4K
LSAgYm9vbCBQYXJzZUZpZWxkTWF5YmVMYXppbHkoaW50IHdpcmVfdHlwZSwgaW50IGZpZWxkX251
bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkSW5wdXRTdHJlYW0q
IGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb25GaW5kZXIqIGV4
dGVuc2lvbl9maW5kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VTZXRG
aWVsZFNraXBwZXIqIGZpZWxkX3NraXBwZXIpOwotCi0gIC8vIEdldHMgdGhlIGV4dGVuc2lvbiB3
aXRoIHRoZSBnaXZlbiBudW1iZXIsIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXMgbm90Ci0gIC8vIGFs
cmVhZHkgZXhpc3QuICBSZXR1cm5zIHRydWUgaWYgdGhlIGV4dGVuc2lvbiBkaWQgbm90IGFscmVh
ZHkgZXhpc3QuCi0gIGJvb2wgTWF5YmVOZXdFeHRlbnNpb24oaW50IG51bWJlciwgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVu
c2lvbioqIHJlc3VsdCk7Ci0KLSAgLy8gR2V0cyB0aGUgcmVwZWF0ZWQgZXh0ZW5zaW9uIGZvciB0
aGUgZ2l2ZW4gZGVzY3JpcHRvciwgY3JlYXRpbmcgaXQgaWYKLSAgLy8gaXQgZG9lcyBub3QgZXhp
c3QuCi0gIEV4dGVuc2lvbiogTWF5YmVOZXdSZXBlYXRlZEV4dGVuc2lvbihjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IpOwotCi0gIC8vIFBhcnNlIGEgc2luZ2xlIE1lc3NhZ2VTZXQg
aXRlbSAtLSBjYWxsZWQganVzdCBhZnRlciB0aGUgaXRlbSBncm91cCBzdGFydAotICAvLyB0YWcg
aGFzIGJlZW4gcmVhZC4KLSAgYm9vbCBQYXJzZU1lc3NhZ2VTZXRJdGVtKGlvOjpDb2RlZElucHV0
U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbkZpbmRl
ciogZXh0ZW5zaW9uX2ZpbmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VT
ZXRGaWVsZFNraXBwZXIqIGZpZWxkX3NraXBwZXIpOwotCi0gIC8vIEhhY2s6ICBSZXBlYXRlZFB0
ckZpZWxkQmFzZSBkZWNsYXJlcyBFeHRlbnNpb25TZXQgYXMgYSBmcmllbmQuICBUaGlzCi0gIC8v
ICAgZnJpZW5kc2hpcCBzaG91bGQgYXV0b21hdGljYWxseSBleHRlbmQgdG8gRXh0ZW5zaW9uU2V0
OjpFeHRlbnNpb24sIGJ1dAotICAvLyAgIHVuZm9ydHVuYXRlbHkgc29tZSBvbGRlciBjb21waWxl
cnMgKGUuZy4gR0NDIDMuNC40KSBkbyBub3QgaW1wbGVtZW50IHRoaXMKLSAgLy8gICBjb3JyZWN0
bHkuICBTbywgd2UgbXVzdCBwcm92aWRlIGhlbHBlcnMgZm9yIGNhbGxpbmcgbWV0aG9kcyBvZiB0
aGF0Ci0gIC8vICAgY2xhc3MuCi0KLSAgLy8gRGVmaW5lZCBpbiBleHRlbnNpb25fc2V0X2hlYXZ5
LmNjLgotICBzdGF0aWMgaW5saW5lIGludCBSZXBlYXRlZE1lc3NhZ2VfU3BhY2VVc2VkRXhjbHVk
aW5nU2VsZigKLSAgICAgIFJlcGVhdGVkUHRyRmllbGRCYXNlKiBmaWVsZCk7Ci0KLSAgLy8gVGhl
IEV4dGVuc2lvbiBzdHJ1Y3QgaXMgc21hbGwgZW5vdWdoIHRvIGJlIHBhc3NlZCBieSB2YWx1ZSwg
c28gd2UgdXNlIGl0Ci0gIC8vIGRpcmVjdGx5IGFzIHRoZSB2YWx1ZSB0eXBlIGluIHRoZSBtYXAg
cmF0aGVyIHRoYW4gdXNlIHBvaW50ZXJzLiAgV2UgdXNlCi0gIC8vIGEgbWFwIHJhdGhlciB0aGFu
IGhhc2hfbWFwIGhlcmUgYmVjYXVzZSB3ZSBleHBlY3QgbW9zdCBFeHRlbnNpb25TZXRzIHdpbGwK
LSAgLy8gb25seSBjb250YWluIGEgc21hbGwgbnVtYmVyIG9mIGV4dGVuc2lvbnMgd2hlcmVhcyBo
YXNoX21hcCBpcyBvcHRpbWl6ZWQKLSAgLy8gZm9yIDEwMCBlbGVtZW50cyBvciBtb3JlLiAgQWxz
bywgd2Ugd2FudCBBcHBlbmRUb0xpc3QoKSB0byBvcmRlciBmaWVsZHMKLSAgLy8gYnkgZmllbGQg
bnVtYmVyLgotICBzdGQ6Om1hcDxpbnQsIEV4dGVuc2lvbj4gZXh0ZW5zaW9uc187Ci0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hXzsKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09O
U1RSVUNUT1JTKEV4dGVuc2lvblNldCk7Ci19OwotCi0vLyBUaGVzZSBhcmUganVzdCBmb3IgY29u
dmVuaWVuY2UuLi4KLWlubGluZSB2b2lkIEV4dGVuc2lvblNldDo6U2V0U3RyaW5nKGludCBudW1i
ZXIsIEZpZWxkVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RyaW5nJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICBNdXRhYmxlU3RyaW5nKG51
bWJlciwgdHlwZSwgZGVzY3JpcHRvciktPmFzc2lnbih2YWx1ZSk7Ci19Ci1pbmxpbmUgdm9pZCBF
eHRlbnNpb25TZXQ6OlNldFJlcGVhdGVkU3RyaW5nKGludCBudW1iZXIsIGludCBpbmRleCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB2
YWx1ZSkgewotICBNdXRhYmxlUmVwZWF0ZWRTdHJpbmcobnVtYmVyLCBpbmRleCktPmFzc2lnbih2
YWx1ZSk7Ci19Ci1pbmxpbmUgdm9pZCBFeHRlbnNpb25TZXQ6OkFkZFN0cmluZyhpbnQgbnVtYmVy
LCBGaWVsZFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cmluZyYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgQWRkU3RyaW5nKG51bWJlciwg
dHlwZSwgZGVzY3JpcHRvciktPmFzc2lnbih2YWx1ZSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8v
IEdsdWUgZm9yIGdlbmVyYXRlZCBleHRlbnNpb24gYWNjZXNzb3JzCi0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIFRlbXBsYXRlIG1hZ2ljCi0KLS8vIEZpcnN0IHdlIGhhdmUgYSBzZXQgb2YgY2xhc3NlcyBy
ZXByZXNlbnRpbmcgInR5cGUgdHJhaXRzIiBmb3IgZGlmZmVyZW50Ci0vLyBmaWVsZCB0eXBlcy4g
IEEgdHlwZSB0cmFpdHMgY2xhc3Mga25vd3MgaG93IHRvIGltcGxlbWVudCBiYXNpYyBhY2Nlc3Nv
cnMKLS8vIGZvciBleHRlbnNpb25zIG9mIGEgcGFydGljdWxhciB0eXBlIGdpdmVuIGFuIEV4dGVu
c2lvblNldC4gIFRoZSBzaWduYXR1cmUKLS8vIGZvciBhIHR5cGUgdHJhaXRzIGNsYXNzIGxvb2tz
IGxpa2UgdGhpczoKLS8vCi0vLyAgIGNsYXNzIFR5cGVUcmFpdHMgewotLy8gICAgcHVibGljOgot
Ly8gICAgIHR5cGVkZWYgPyBDb25zdFR5cGU7Ci0vLyAgICAgdHlwZWRlZiA/IE11dGFibGVUeXBl
OwotLy8gICAgIC8vIFR5cGVUcmFpdHMgZm9yIHNpbmd1bGFyIGZpZWxkcyBhbmQgcmVwZWF0ZWQg
ZmllbGRzIHdpbGwgZGVmaW5lIHRoZQotLy8gICAgIC8vIHN5bWJvbCAiU2luZ3VsYXIiIG9yICJS
ZXBlYXRlZCIgcmVzcGVjdGl2ZWx5LiBUaGVzZSB0d28gc3ltYm9scyB3aWxsCi0vLyAgICAgLy8g
YmUgdXNlZCBpbiBleHRlbnNpb24gYWNjZXNzb3JzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gc2lu
Z3VsYXIKLS8vICAgICAvLyBleHRlbnNpb25zIGFuZCByZXBlYXRlZCBleHRlbnNpb25zLiBJZiB0
aGUgVHlwZVRyYWl0cyBmb3IgdGhlIHBhc3NlZAotLy8gICAgIC8vIGluIGV4dGVuc2lvbiBkb2Vz
bid0IGhhdmUgdGhlIGV4cGVjdGVkIHN5bWJvbCBkZWZpbmVkLCBpdCBtZWFucyB0aGUKLS8vICAg
ICAvLyB1c2VyIGlzIHBhc3NpbmcgYSByZXBlYXRlZCBleHRlbnNpb24gdG8gYSBzaW5ndWxhciBh
Y2Nlc3Nvciwgb3IgdGhlCi0vLyAgICAgLy8gb3Bwb3NpdGUuIEluIHRoYXQgY2FzZSB0aGUgQysr
IGNvbXBpbGVyIHdpbGwgZ2VuZXJhdGUgYW4gZXJyb3IKLS8vICAgICAvLyBtZXNzYWdlICJubyBt
YXRjaGluZyBtZW1iZXIgZnVuY3Rpb24iIHRvIGluZm9ybSB0aGUgdXNlci4KLS8vICAgICB0eXBl
ZGVmID8gU2luZ3VsYXIKLS8vICAgICB0eXBlZGVmID8gUmVwZWF0ZWQKLS8vCi0vLyAgICAgc3Rh
dGljIGlubGluZSBDb25zdFR5cGUgR2V0KGludCBudW1iZXIsIGNvbnN0IEV4dGVuc2lvblNldCYg
c2V0KTsKLS8vICAgICBzdGF0aWMgaW5saW5lIHZvaWQgU2V0KGludCBudW1iZXIsIENvbnN0VHlw
ZSB2YWx1ZSwgRXh0ZW5zaW9uU2V0KiBzZXQpOwotLy8gICAgIHN0YXRpYyBpbmxpbmUgTXV0YWJs
ZVR5cGUgTXV0YWJsZShpbnQgbnVtYmVyLCBFeHRlbnNpb25TZXQqIHNldCk7Ci0vLwotLy8gICAg
IC8vIFZhcmlhbnRzIGZvciByZXBlYXRlZCBmaWVsZHMuCi0vLyAgICAgc3RhdGljIGlubGluZSBD
b25zdFR5cGUgR2V0KGludCBudW1iZXIsIGNvbnN0IEV4dGVuc2lvblNldCYgc2V0LAotLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgpOwotLy8gICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBTZXQoaW50IG51bWJlciwgaW50IGluZGV4LAotLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29uc3RUeXBlIHZhbHVlLCBFeHRlbnNpb25TZXQqIHNldCk7Ci0vLyAgICAg
c3RhdGljIGlubGluZSBNdXRhYmxlVHlwZSBNdXRhYmxlKGludCBudW1iZXIsIGludCBpbmRleCwK
LS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uU2V0KiBz
ZXQpOwotLy8gICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBBZGQoaW50IG51bWJlciwgQ29uc3RUeXBl
IHZhbHVlLCBFeHRlbnNpb25TZXQqIHNldCk7Ci0vLyAgICAgc3RhdGljIGlubGluZSBNdXRhYmxl
VHlwZSBBZGQoaW50IG51bWJlciwgRXh0ZW5zaW9uU2V0KiBzZXQpOwotLy8gICB9OwotLy8KLS8v
IE5vdCBhbGwgb2YgdGhlc2UgbWV0aG9kcyBtYWtlIHNlbnNlIGZvciBhbGwgZmllbGQgdHlwZXMu
ICBGb3IgZXhhbXBsZSwgdGhlCi0vLyAiTXV0YWJsZSIgbWV0aG9kcyBvbmx5IG1ha2Ugc2Vuc2Ug
Zm9yIHN0cmluZ3MgYW5kIG1lc3NhZ2VzLCBhbmQgdGhlCi0vLyByZXBlYXRlZCBtZXRob2RzIG9u
bHkgbWFrZSBzZW5zZSBmb3IgcmVwZWF0ZWQgdHlwZXMuICBTbywgZWFjaCB0eXBlCi0vLyB0cmFp
dHMgY2xhc3MgaW1wbGVtZW50cyBvbmx5IHRoZSBzZXQgb2YgbWV0aG9kcyBmcm9tIHRoaXMgc2ln
bmF0dXJlIHRoYXQgaXQKLS8vIGFjdHVhbGx5IHN1cHBvcnRzLiAgVGhpcyB3aWxsIGNhdXNlIGEg
Y29tcGlsZXIgZXJyb3IgaWYgdGhlIHVzZXIgdHJpZXMgdG8KLS8vIGFjY2VzcyBhbiBleHRlbnNp
b24gdXNpbmcgYSBtZXRob2QgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIGl0cyB0eXBlLgot
Ly8gRm9yIGV4YW1wbGUsIGlmICJmb28iIGlzIGFuIGV4dGVuc2lvbiBvZiB0eXBlICJvcHRpb25h
bCBpbnQzMiIsIHRoZW4gaWYgeW91Ci0vLyB0cnkgdG8gd3JpdGUgY29kZSBsaWtlOgotLy8gICBt
eV9tZXNzYWdlLk11dGFibGVFeHRlbnNpb24oZm9vKQotLy8geW91IHdpbGwgZ2V0IGEgY29tcGls
ZSBlcnJvciBiZWNhdXNlIFByaW1pdGl2ZVR5cGVUcmFpdHM8aW50MzI+IGRvZXMgbm90Ci0vLyBo
YXZlIGEgIk11dGFibGUoKSIgbWV0aG9kLgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQcmltaXRpdmVU
eXBlVHJhaXRzCi0KLS8vIFNpbmNlIHRoZSBFeHRlbnNpb25TZXQgaGFzIGRpZmZlcmVudCBtZXRo
b2RzIGZvciBlYWNoIHByaW1pdGl2ZSB0eXBlLAotLy8gd2UgbXVzdCBleHBsaWNpdGx5IGRlZmlu
ZSB0aGUgbWV0aG9kcyBvZiB0aGUgdHlwZSB0cmFpdHMgY2xhc3MgZm9yIGVhY2gKLS8vIGtub3du
IHR5cGUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KLWNsYXNzIFByaW1pdGl2ZVR5cGVUcmFp
dHMgewotIHB1YmxpYzoKLSAgdHlwZWRlZiBUeXBlIENvbnN0VHlwZTsKLSAgdHlwZWRlZiBUeXBl
IE11dGFibGVUeXBlOwotICB0eXBlZGVmIFByaW1pdGl2ZVR5cGVUcmFpdHM8VHlwZT4gU2luZ3Vs
YXI7Ci0KLSAgc3RhdGljIGlubGluZSBDb25zdFR5cGUgR2V0KGludCBudW1iZXIsIGNvbnN0IEV4
dGVuc2lvblNldCYgc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RUeXBl
IGRlZmF1bHRfdmFsdWUpOwotICBzdGF0aWMgaW5saW5lIHZvaWQgU2V0KGludCBudW1iZXIsIEZp
ZWxkVHlwZSBmaWVsZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0VHlwZSB2
YWx1ZSwgRXh0ZW5zaW9uU2V0KiBzZXQpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+
Ci1jbGFzcyBSZXBlYXRlZFByaW1pdGl2ZVR5cGVUcmFpdHMgewotIHB1YmxpYzoKLSAgdHlwZWRl
ZiBUeXBlIENvbnN0VHlwZTsKLSAgdHlwZWRlZiBUeXBlIE11dGFibGVUeXBlOwotICB0eXBlZGVm
IFJlcGVhdGVkUHJpbWl0aXZlVHlwZVRyYWl0czxUeXBlPiBSZXBlYXRlZDsKLQotICB0eXBlZGVm
IFJlcGVhdGVkRmllbGQ8VHlwZT4gUmVwZWF0ZWRGaWVsZFR5cGU7Ci0KLSAgc3RhdGljIGlubGlu
ZSBUeXBlIEdldChpbnQgbnVtYmVyLCBjb25zdCBFeHRlbnNpb25TZXQmIHNldCwgaW50IGluZGV4
KTsKLSAgc3RhdGljIGlubGluZSB2b2lkIFNldChpbnQgbnVtYmVyLCBpbnQgaW5kZXgsIFR5cGUg
dmFsdWUsIEV4dGVuc2lvblNldCogc2V0KTsKLSAgc3RhdGljIGlubGluZSB2b2lkIEFkZChpbnQg
bnVtYmVyLCBGaWVsZFR5cGUgZmllbGRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGlzX3BhY2tlZCwgVHlwZSB2YWx1ZSwgRXh0ZW5zaW9uU2V0KiBzZXQpOwotCi0gIHN0YXRp
YyBpbmxpbmUgY29uc3QgUmVwZWF0ZWRGaWVsZDxDb25zdFR5cGU+JgotICAgICAgR2V0UmVwZWF0
ZWQoaW50IG51bWJlciwgY29uc3QgRXh0ZW5zaW9uU2V0JiBzZXQpOwotICBzdGF0aWMgaW5saW5l
IFJlcGVhdGVkRmllbGQ8VHlwZT4qCi0gICAgICBNdXRhYmxlUmVwZWF0ZWQoaW50IG51bWJlciwg
RmllbGRUeXBlIGZpZWxkX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19wYWNr
ZWQsIEV4dGVuc2lvblNldCogc2V0KTsKLQotICBzdGF0aWMgY29uc3QgUmVwZWF0ZWRGaWVsZFR5
cGUqIEdldERlZmF1bHRSZXBlYXRlZEZpZWxkKCk7Ci19OwotCi1MSUJQUk9UT0JVRl9FWFBPUlQg
ZXh0ZXJuIFByb3RvYnVmT25jZVR5cGUgcmVwZWF0ZWRfcHJpbWl0aXZlX2dlbmVyaWNfdHlwZV90
cmFpdHNfb25jZV9pbml0XzsKLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFJlcGVhdGVkUHJp
bWl0aXZlR2VuZXJpY1R5cGVUcmFpdHMgewotIHByaXZhdGU6Ci0gIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+IGZyaWVuZCBjbGFzcyBSZXBlYXRlZFByaW1pdGl2ZVR5cGVUcmFpdHM7Ci0gIHN0YXRp
YyB2b2lkIEluaXRpYWxpemVEZWZhdWx0UmVwZWF0ZWRGaWVsZHMoKTsKLSAgc3RhdGljIHZvaWQg
RGVzdHJveURlZmF1bHRSZXBlYXRlZEZpZWxkcygpOwotICBzdGF0aWMgY29uc3QgUmVwZWF0ZWRG
aWVsZDxpbnQzMj4qIGRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfaW50MzJfOwotICBzdGF0aWMgY29u
c3QgUmVwZWF0ZWRGaWVsZDxpbnQ2ND4qIGRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfaW50NjRfOwot
ICBzdGF0aWMgY29uc3QgUmVwZWF0ZWRGaWVsZDx1aW50MzI+KiBkZWZhdWx0X3JlcGVhdGVkX2Zp
ZWxkX3VpbnQzMl87Ci0gIHN0YXRpYyBjb25zdCBSZXBlYXRlZEZpZWxkPHVpbnQ2ND4qIGRlZmF1
bHRfcmVwZWF0ZWRfZmllbGRfdWludDY0XzsKLSAgc3RhdGljIGNvbnN0IFJlcGVhdGVkRmllbGQ8
ZG91YmxlPiogZGVmYXVsdF9yZXBlYXRlZF9maWVsZF9kb3VibGVfOwotICBzdGF0aWMgY29uc3Qg
UmVwZWF0ZWRGaWVsZDxmbG9hdD4qIGRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfZmxvYXRfOwotICBz
dGF0aWMgY29uc3QgUmVwZWF0ZWRGaWVsZDxib29sPiogZGVmYXVsdF9yZXBlYXRlZF9maWVsZF9i
b29sXzsKLX07Ci0KLSNkZWZpbmUgUFJPVE9CVUZfREVGSU5FX1BSSU1JVElWRV9UWVBFKFRZUEUs
IE1FVEhPRCkgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlPD4gaW5saW5lIFRZUEUg
UHJpbWl0aXZlVHlwZVRyYWl0czxUWVBFPjo6R2V0KCAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBpbnQgbnVtYmVyLCBjb25zdCBFeHRlbnNpb25TZXQmIHNldCwgVFlQRSBkZWZhdWx0X3ZhbHVl
KSB7ICAgICAgICAgICAgIFwKLSAgcmV0dXJuIHNldC5HZXQjI01FVEhPRChudW1iZXIsIGRlZmF1
bHRfdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLXRlbXBsYXRlPD4gaW5saW5lIHZvaWQgUHJpbWl0aXZlVHlwZVRyYWl0czxUWVBFPjo6U2V0
KCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpbnQgbnVtYmVyLCBGaWVsZFR5cGUgZmllbGRf
dHlwZSwgVFlQRSB2YWx1ZSwgRXh0ZW5zaW9uU2V0KiBzZXQpIHsgICAgIFwKLSAgc2V0LT5TZXQj
I01FVEhPRChudW1iZXIsIGZpZWxkX3R5cGUsIHZhbHVlLCBOVUxMKTsgICAgICAgICAgICAgICAg
ICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBs
YXRlPD4gaW5saW5lIFRZUEUgUmVwZWF0ZWRQcmltaXRpdmVUeXBlVHJhaXRzPFRZUEU+OjpHZXQo
ICAgICAgICAgICAgIFwKLSAgICBpbnQgbnVtYmVyLCBjb25zdCBFeHRlbnNpb25TZXQmIHNldCwg
aW50IGluZGV4KSB7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIHNldC5HZXRSZXBl
YXRlZCMjTUVUSE9EKG51bWJlciwgaW5kZXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlPD4gaW5saW5lIHZvaWQgUmVwZWF0ZWRQcmlt
aXRpdmVUeXBlVHJhaXRzPFRZUEU+OjpTZXQoICAgICAgICAgICAgIFwKLSAgICBpbnQgbnVtYmVy
LCBpbnQgaW5kZXgsIFRZUEUgdmFsdWUsIEV4dGVuc2lvblNldCogc2V0KSB7ICAgICAgICAgICAg
ICAgIFwKLSAgc2V0LT5TZXRSZXBlYXRlZCMjTUVUSE9EKG51bWJlciwgaW5kZXgsIHZhbHVlKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRl
PD4gaW5saW5lIHZvaWQgUmVwZWF0ZWRQcmltaXRpdmVUeXBlVHJhaXRzPFRZUEU+OjpBZGQoICAg
ICAgICAgICAgIFwKLSAgICBpbnQgbnVtYmVyLCBGaWVsZFR5cGUgZmllbGRfdHlwZSwgYm9vbCBp
c19wYWNrZWQsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBUWVBFIHZhbHVlLCBFeHRlbnNp
b25TZXQqIHNldCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
c2V0LT5BZGQjI01FVEhPRChudW1iZXIsIGZpZWxkX3R5cGUsIGlzX3BhY2tlZCwgdmFsdWUsIE5V
TEwpOyAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlPD4gaW5saW5l
IGNvbnN0IFJlcGVhdGVkRmllbGQ8VFlQRT4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBSZXBlYXRlZFByaW1pdGl2ZVR5cGVUcmFpdHM8VFlQRT46OkdldERlZmF1bHRSZXBl
YXRlZEZpZWxkKCkgeyAgICAgICAgIFwKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpHb29nbGVPbmNl
SW5pdCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgJnJlcGVhdGVkX3ByaW1pdGl2ZV9nZW5lcmljX3R5cGVfdHJhaXRzX29u
Y2VfaW5pdF8sICAgICAgICAgICAgICAgICAgXAotICAgICAgJlJlcGVhdGVkUHJpbWl0aXZlR2Vu
ZXJpY1R5cGVUcmFpdHM6OkluaXRpYWxpemVEZWZhdWx0UmVwZWF0ZWRGaWVsZHMpOyBcCi0gIHJl
dHVybiBSZXBlYXRlZFByaW1pdGl2ZUdlbmVyaWNUeXBlVHJhaXRzOjogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBkZWZhdWx0X3JlcGVhdGVkX2ZpZWxkXyMjVFlQRSMjXzsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBSZXBlYXRlZEZpZWxkPFRZUEU+JiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgUmVwZWF0ZWRQcmltaXRpdmVUeXBlVHJhaXRzPFRZ
UEU+OjpHZXRSZXBlYXRlZChpbnQgbnVtYmVyLCAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEV4dGVuc2lvblNldCYgc2V0
KSB7ICBcCi0gIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBSZXBlYXRlZEZpZWxkPFRZ
UEU+Kj4oICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0LkdldFJhd1JlcGVhdGVkRmllbGQoICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciwgR2V0RGVmYXVsdFJlcGVhdGVkRmllbGQo
KSkpOyAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi10ZW1wbGF0ZTw+IGlubGluZSBSZXBl
YXRlZEZpZWxkPFRZUEU+KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgUmVwZWF0ZWRQcmltaXRpdmVUeXBlVHJhaXRzPFRZUEU+OjpNdXRhYmxlUmVwZWF0ZWQoaW50
IG51bWJlciwgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGaWVsZFR5cGUgZmllbGRfdHlwZSwgICBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX3BhY2tlZCwgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
eHRlbnNpb25TZXQqIHNldCkgeyAgICBcCi0gIHJldHVybiByZWludGVycHJldF9jYXN0PFJlcGVh
dGVkRmllbGQ8VFlQRT4qPiggICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBzZXQt
Pk11dGFibGVSYXdSZXBlYXRlZEZpZWxkKG51bWJlciwgZmllbGRfdHlwZSwgaXNfcGFja2VkLCBO
VUxMKSk7ICBcCi19Ci0KLVBST1RPQlVGX0RFRklORV9QUklNSVRJVkVfVFlQRSggaW50MzIsICBJ
bnQzMikKLVBST1RPQlVGX0RFRklORV9QUklNSVRJVkVfVFlQRSggaW50NjQsICBJbnQ2NCkKLVBS
T1RPQlVGX0RFRklORV9QUklNSVRJVkVfVFlQRSh1aW50MzIsIFVJbnQzMikKLVBST1RPQlVGX0RF
RklORV9QUklNSVRJVkVfVFlQRSh1aW50NjQsIFVJbnQ2NCkKLVBST1RPQlVGX0RFRklORV9QUklN
SVRJVkVfVFlQRSggZmxvYXQsICBGbG9hdCkKLVBST1RPQlVGX0RFRklORV9QUklNSVRJVkVfVFlQ
RShkb3VibGUsIERvdWJsZSkKLVBST1RPQlVGX0RFRklORV9QUklNSVRJVkVfVFlQRSggIGJvb2ws
ICAgQm9vbCkKLQotI3VuZGVmIFBST1RPQlVGX0RFRklORV9QUklNSVRJVkVfVFlQRQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBTdHJpbmdUeXBlVHJhaXRzCi0KLS8vIFN0cmluZ3Mgc3VwcG9ydCBib3Ro
IFNldCgpIGFuZCBNdXRhYmxlKCkuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgU3RyaW5nVHlw
ZVRyYWl0cyB7Ci0gcHVibGljOgotICB0eXBlZGVmIGNvbnN0IHN0cmluZyYgQ29uc3RUeXBlOwot
ICB0eXBlZGVmIHN0cmluZyogTXV0YWJsZVR5cGU7Ci0gIHR5cGVkZWYgU3RyaW5nVHlwZVRyYWl0
cyBTaW5ndWxhcjsKLQotICBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cmluZyYgR2V0KGludCBudW1i
ZXIsIGNvbnN0IEV4dGVuc2lvblNldCYgc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbnN0VHlwZSBkZWZhdWx0X3ZhbHVlKSB7Ci0gICAgcmV0dXJuIHNldC5HZXRTdHJp
bmcobnVtYmVyLCBkZWZhdWx0X3ZhbHVlKTsKLSAgfQotICBzdGF0aWMgaW5saW5lIHZvaWQgU2V0
KGludCBudW1iZXIsIEZpZWxkVHlwZSBmaWVsZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0cmluZyYgdmFsdWUsIEV4dGVuc2lvblNldCogc2V0KSB7Ci0gICAgc2V0LT5T
ZXRTdHJpbmcobnVtYmVyLCBmaWVsZF90eXBlLCB2YWx1ZSwgTlVMTCk7Ci0gIH0KLSAgc3RhdGlj
IGlubGluZSBzdHJpbmcqIE11dGFibGUoaW50IG51bWJlciwgRmllbGRUeXBlIGZpZWxkX3R5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvblNldCogc2V0KSB7Ci0g
ICAgcmV0dXJuIHNldC0+TXV0YWJsZVN0cmluZyhudW1iZXIsIGZpZWxkX3R5cGUsIE5VTEwpOwot
ICB9Ci19OwotCi1MSUJQUk9UT0JVRl9FWFBPUlQgZXh0ZXJuIFByb3RvYnVmT25jZVR5cGUgcmVw
ZWF0ZWRfc3RyaW5nX3R5cGVfdHJhaXRzX29uY2VfaW5pdF87Ci0KLWNsYXNzIExJQlBST1RPQlVG
X0VYUE9SVCBSZXBlYXRlZFN0cmluZ1R5cGVUcmFpdHMgewotIHB1YmxpYzoKLSAgdHlwZWRlZiBj
b25zdCBzdHJpbmcmIENvbnN0VHlwZTsKLSAgdHlwZWRlZiBzdHJpbmcqIE11dGFibGVUeXBlOwot
ICB0eXBlZGVmIFJlcGVhdGVkU3RyaW5nVHlwZVRyYWl0cyBSZXBlYXRlZDsKLQotICB0eXBlZGVm
IFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPiBSZXBlYXRlZEZpZWxkVHlwZTsKLQotICBzdGF0aWMg
aW5saW5lIGNvbnN0IHN0cmluZyYgR2V0KGludCBudW1iZXIsIGNvbnN0IEV4dGVuc2lvblNldCYg
c2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCkgewotICAg
IHJldHVybiBzZXQuR2V0UmVwZWF0ZWRTdHJpbmcobnVtYmVyLCBpbmRleCk7Ci0gIH0KLSAgc3Rh
dGljIGlubGluZSB2b2lkIFNldChpbnQgbnVtYmVyLCBpbnQgaW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB2YWx1ZSwgRXh0ZW5zaW9uU2V0KiBzZXQpIHsKLSAg
ICBzZXQtPlNldFJlcGVhdGVkU3RyaW5nKG51bWJlciwgaW5kZXgsIHZhbHVlKTsKLSAgfQotICBz
dGF0aWMgaW5saW5lIHN0cmluZyogTXV0YWJsZShpbnQgbnVtYmVyLCBpbnQgaW5kZXgsIEV4dGVu
c2lvblNldCogc2V0KSB7Ci0gICAgcmV0dXJuIHNldC0+TXV0YWJsZVJlcGVhdGVkU3RyaW5nKG51
bWJlciwgaW5kZXgpOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgdm9pZCBBZGQoaW50IG51bWJlciwg
RmllbGRUeXBlIGZpZWxkX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKmlz
X3BhY2tlZCovLCBjb25zdCBzdHJpbmcmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
IEV4dGVuc2lvblNldCogc2V0KSB7Ci0gICAgc2V0LT5BZGRTdHJpbmcobnVtYmVyLCBmaWVsZF90
eXBlLCB2YWx1ZSwgTlVMTCk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSBzdHJpbmcqIEFkZChpbnQg
bnVtYmVyLCBGaWVsZFR5cGUgZmllbGRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFeHRlbnNpb25TZXQqIHNldCkgewotICAgIHJldHVybiBzZXQtPkFkZFN0cmluZyhudW1iZXIs
IGZpZWxkX3R5cGUsIE5VTEwpOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVwZWF0ZWRQ
dHJGaWVsZDxzdHJpbmc+JgotICAgICAgR2V0UmVwZWF0ZWQoaW50IG51bWJlciwgY29uc3QgRXh0
ZW5zaW9uU2V0JiBzZXQpIHsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUmVw
ZWF0ZWRQdHJGaWVsZDxzdHJpbmc+Kj4oCi0gICAgICAgIHNldC5HZXRSYXdSZXBlYXRlZEZpZWxk
KG51bWJlciwgR2V0RGVmYXVsdFJlcGVhdGVkRmllbGQoKSkpOwotICB9Ci0KLSAgc3RhdGljIGlu
bGluZSBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4qCi0gICAgICBNdXRhYmxlUmVwZWF0ZWQoaW50
IG51bWJlciwgRmllbGRUeXBlIGZpZWxkX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpc19wYWNrZWQsIEV4dGVuc2lvblNldCogc2V0KSB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+Kj4oCi0gICAgICAgIHNldC0+TXV0YWJsZVJh
d1JlcGVhdGVkRmllbGQobnVtYmVyLCBmaWVsZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzX3BhY2tlZCwgTlVMTCkpOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0
IFJlcGVhdGVkRmllbGRUeXBlKiBHZXREZWZhdWx0UmVwZWF0ZWRGaWVsZCgpIHsKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6Okdvb2dsZU9uY2VJbml0KCZyZXBlYXRlZF9zdHJpbmdfdHlwZV90cmFp
dHNfb25jZV9pbml0XywKLSAgICAgICAgICAgICAgICAgICAmSW5pdGlhbGl6ZURlZmF1bHRSZXBl
YXRlZEZpZWxkcyk7Ci0gICAgcmV0dXJuIGRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfOwotICB9Ci0K
LSBwcml2YXRlOgotICBzdGF0aWMgdm9pZCBJbml0aWFsaXplRGVmYXVsdFJlcGVhdGVkRmllbGRz
KCk7Ci0gIHN0YXRpYyB2b2lkIERlc3Ryb3lEZWZhdWx0UmVwZWF0ZWRGaWVsZHMoKTsKLSAgc3Rh
dGljIGNvbnN0IFJlcGVhdGVkRmllbGRUeXBlICpkZWZhdWx0X3JlcGVhdGVkX2ZpZWxkXzsKLX07
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vIEVudW1UeXBlVHJhaXRzCi0KLS8vIEV4dGVuc2lvblNldCBy
ZXByZXNlbnRzIGVudW1zIHVzaW5nIGludGVnZXJzIGludGVybmFsbHksIHNvIHdlIGhhdmUgdG8K
LS8vIHN0YXRpY19jYXN0IGFyb3VuZC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlLCBib29sIElz
VmFsaWQoaW50KT4KLWNsYXNzIEVudW1UeXBlVHJhaXRzIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYg
VHlwZSBDb25zdFR5cGU7Ci0gIHR5cGVkZWYgVHlwZSBNdXRhYmxlVHlwZTsKLSAgdHlwZWRlZiBF
bnVtVHlwZVRyYWl0czxUeXBlLCBJc1ZhbGlkPiBTaW5ndWxhcjsKLQotICBzdGF0aWMgaW5saW5l
IENvbnN0VHlwZSBHZXQoaW50IG51bWJlciwgY29uc3QgRXh0ZW5zaW9uU2V0JiBzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdFR5cGUgZGVmYXVsdF92YWx1ZSkgewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihzZXQuR2V0RW51bShudW1iZXIsIGRlZmF1bHRfdmFs
dWUpKTsKLSAgfQotICBzdGF0aWMgaW5saW5lIHZvaWQgU2V0KGludCBudW1iZXIsIEZpZWxkVHlw
ZSBmaWVsZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0VHlwZSB2YWx1ZSwg
RXh0ZW5zaW9uU2V0KiBzZXQpIHsKLSAgICBHT09HTEVfRENIRUNLKElzVmFsaWQodmFsdWUpKTsK
LSAgICBzZXQtPlNldEVudW0obnVtYmVyLCBmaWVsZF90eXBlLCB2YWx1ZSwgTlVMTCk7Ci0gIH0K
LX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlLCBib29sIElzVmFsaWQoaW50KT4KLWNsYXNz
IFJlcGVhdGVkRW51bVR5cGVUcmFpdHMgewotIHB1YmxpYzoKLSAgdHlwZWRlZiBUeXBlIENvbnN0
VHlwZTsKLSAgdHlwZWRlZiBUeXBlIE11dGFibGVUeXBlOwotICB0eXBlZGVmIFJlcGVhdGVkRW51
bVR5cGVUcmFpdHM8VHlwZSwgSXNWYWxpZD4gUmVwZWF0ZWQ7Ci0KLSAgdHlwZWRlZiBSZXBlYXRl
ZEZpZWxkPFR5cGU+IFJlcGVhdGVkRmllbGRUeXBlOwotCi0gIHN0YXRpYyBpbmxpbmUgQ29uc3RU
eXBlIEdldChpbnQgbnVtYmVyLCBjb25zdCBFeHRlbnNpb25TZXQmIHNldCwgaW50IGluZGV4KSB7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHNldC5HZXRSZXBlYXRlZEVudW0obnVtYmVy
LCBpbmRleCkpOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgdm9pZCBTZXQoaW50IG51bWJlciwgaW50
IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0VHlwZSB2YWx1ZSwgRXh0ZW5z
aW9uU2V0KiBzZXQpIHsKLSAgICBHT09HTEVfRENIRUNLKElzVmFsaWQodmFsdWUpKTsKLSAgICBz
ZXQtPlNldFJlcGVhdGVkRW51bShudW1iZXIsIGluZGV4LCB2YWx1ZSk7Ci0gIH0KLSAgc3RhdGlj
IGlubGluZSB2b2lkIEFkZChpbnQgbnVtYmVyLCBGaWVsZFR5cGUgZmllbGRfdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGlzX3BhY2tlZCwgQ29uc3RUeXBlIHZhbHVlLCBFeHRl
bnNpb25TZXQqIHNldCkgewotICAgIEdPT0dMRV9EQ0hFQ0soSXNWYWxpZCh2YWx1ZSkpOwotICAg
IHNldC0+QWRkRW51bShudW1iZXIsIGZpZWxkX3R5cGUsIGlzX3BhY2tlZCwgdmFsdWUsIE5VTEwp
OwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVwZWF0ZWRGaWVsZDxUeXBlPiYgR2V0UmVw
ZWF0ZWQoaW50IG51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBFeHRlbnNpb25TZXQmCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KSB7Ci0gICAgLy8gSGFjazog
dGhlIGBFeHRlbnNpb25gIHN0cnVjdCBzdG9yZXMgYSBSZXBlYXRlZEZpZWxkPGludD4gZm9yIGVu
dW1zLgotICAgIC8vIFJlcGVhdGVkRmllbGQ8aW50PiBjYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0
IHRvIFJlcGVhdGVkRmllbGQ8RW51bVR5cGU+Ci0gICAgLy8gc28gd2UgbmVlZCB0byBkbyBzb21l
IGNhc3RpbmcgbWFnaWMuIFNlZSBtZXNzYWdlLmggZm9yIHNpbWlsYXIKLSAgICAvLyBjb250b3J0
aW9ucyBmb3Igbm9uLWV4dGVuc2lvbiBmaWVsZHMuCi0gICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PGNvbnN0IFJlcGVhdGVkRmllbGQ8VHlwZT4qPigKLSAgICAgICAgc2V0LkdldFJhd1JlcGVh
dGVkRmllbGQobnVtYmVyLCBHZXREZWZhdWx0UmVwZWF0ZWRGaWVsZCgpKSk7Ci0gIH0KLQotICBz
dGF0aWMgaW5saW5lIFJlcGVhdGVkRmllbGQ8VHlwZT4qIE11dGFibGVSZXBlYXRlZChpbnQgbnVt
YmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGaWVsZFR5cGUgZmllbGRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19wYWNrZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvblNldCogc2V0KSB7Ci0g
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmVwZWF0ZWRGaWVsZDxUeXBlPio+KAotICAgICAg
ICBzZXQtPk11dGFibGVSYXdSZXBlYXRlZEZpZWxkKG51bWJlciwgZmllbGRfdHlwZSwgaXNfcGFj
a2VkLCBOVUxMKSk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3QgUmVwZWF0ZWRGaWVsZFR5cGUqIEdl
dERlZmF1bHRSZXBlYXRlZEZpZWxkKCkgewotICAgIC8vIEhhY2s6IGFzIG5vdGVkIGFib3ZlLCBy
ZXBlYXRlZCBlbnVtIGZpZWxkcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgYXMgYQotICAgIC8vIFJl
cGVhdGVkRmllbGQ8aW50Pi4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGluc3RhbnRpYXRlIGdsb2Jh
bCBzdGF0aWMKLSAgICAvLyBvYmplY3RzIHRvIHJldHVybiBhcyBkZWZhdWx0IChlbXB0eSkgcmVw
ZWF0ZWQgZmllbGRzIG9uIG5vbi1leGlzdGVudAotICAgIC8vIGV4dGVuc2lvbnMuIFdlIHdvdWxk
IG5vdCBiZSBhYmxlIHRvIGtub3cgYS1wcmlvcmkgYWxsIG9mIHRoZSBlbnVtIHR5cGVzCi0gICAg
Ly8gKHZhbHVlcyBvZiB8VHlwZXwpIHRvIGluc3RhbnRpYXRlIGFsbCBvZiB0aGVzZSwgc28gd2Ug
anVzdCByZS11c2UgaW50MzIncwotICAgIC8vIGRlZmF1bHQgcmVwZWF0ZWQgZmllbGQgb2JqZWN0
LgotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFJlcGVhdGVkRmllbGQ8VHlwZT4q
PigKLSAgICAgICAgUmVwZWF0ZWRQcmltaXRpdmVUeXBlVHJhaXRzPGludDMyPjo6R2V0RGVmYXVs
dFJlcGVhdGVkRmllbGQoKSk7Ci0gIH0KLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1lc3NhZ2VU
eXBlVHJhaXRzCi0KLS8vIEV4dGVuc2lvblNldCBndWFyYW50ZWVzIHRoYXQgd2hlbiBtYW5pcHVs
YXRpbmcgZXh0ZW5zaW9ucyB3aXRoIG1lc3NhZ2UKLS8vIHR5cGVzLCB0aGUgaW1wbGVtZW50YXRp
b24gdXNlZCB3aWxsIGJlIHRoZSBjb21waWxlZC1pbiBjbGFzcyByZXByZXNlbnRpbmcKLS8vIHRo
YXQgdHlwZS4gIFNvLCB3ZSBjYW4gc3RhdGljX2Nhc3QgZG93biB0byB0aGUgZXhhY3QgdHlwZSB3
ZSBleHBlY3QuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KLWNsYXNzIE1lc3NhZ2VUeXBlVHJh
aXRzIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgY29uc3QgVHlwZSYgQ29uc3RUeXBlOwotICB0eXBl
ZGVmIFR5cGUqIE11dGFibGVUeXBlOwotICB0eXBlZGVmIE1lc3NhZ2VUeXBlVHJhaXRzPFR5cGU+
IFNpbmd1bGFyOwotCi0gIHN0YXRpYyBpbmxpbmUgQ29uc3RUeXBlIEdldChpbnQgbnVtYmVyLCBj
b25zdCBFeHRlbnNpb25TZXQmIHNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bnN0VHlwZSBkZWZhdWx0X3ZhbHVlKSB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFR5
cGUmPigKLSAgICAgICAgc2V0LkdldE1lc3NhZ2UobnVtYmVyLCBkZWZhdWx0X3ZhbHVlKSk7Ci0g
IH0KLSAgc3RhdGljIGlubGluZSBNdXRhYmxlVHlwZSBNdXRhYmxlKGludCBudW1iZXIsIEZpZWxk
VHlwZSBmaWVsZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0
ZW5zaW9uU2V0KiBzZXQpIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZSo+KAotICAgICAg
c2V0LT5NdXRhYmxlTWVzc2FnZShudW1iZXIsIGZpZWxkX3R5cGUsIFR5cGU6OmRlZmF1bHRfaW5z
dGFuY2UoKSwgTlVMTCkpOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgdm9pZCBTZXRBbGxvY2F0ZWQo
aW50IG51bWJlciwgRmllbGRUeXBlIGZpZWxkX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTXV0YWJsZVR5cGUgbWVzc2FnZSwgRXh0ZW5zaW9uU2V0KiBzZXQpIHsKLSAg
ICBzZXQtPlNldEFsbG9jYXRlZE1lc3NhZ2UobnVtYmVyLCBmaWVsZF90eXBlLCBOVUxMLCBtZXNz
YWdlKTsKLSAgfQotICBzdGF0aWMgaW5saW5lIE11dGFibGVUeXBlIFJlbGVhc2UoaW50IG51bWJl
ciwgRmllbGRUeXBlIC8qIGZpZWxkX3R5cGUgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFeHRlbnNpb25TZXQqIHNldCkgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
eXBlKj4oc2V0LT5SZWxlYXNlTWVzc2FnZSgKLSAgICAgICAgbnVtYmVyLCBUeXBlOjpkZWZhdWx0
X2luc3RhbmNlKCkpKTsKLSAgfQotfTsKLQotLy8gZm9yd2FyZCBkZWNsYXJhdGlvbgotY2xhc3Mg
UmVwZWF0ZWRNZXNzYWdlR2VuZXJpY1R5cGVUcmFpdHM7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
eXBlPgotY2xhc3MgUmVwZWF0ZWRNZXNzYWdlVHlwZVRyYWl0cyB7Ci0gcHVibGljOgotICB0eXBl
ZGVmIGNvbnN0IFR5cGUmIENvbnN0VHlwZTsKLSAgdHlwZWRlZiBUeXBlKiBNdXRhYmxlVHlwZTsK
LSAgdHlwZWRlZiBSZXBlYXRlZE1lc3NhZ2VUeXBlVHJhaXRzPFR5cGU+IFJlcGVhdGVkOwotCi0g
IHR5cGVkZWYgUmVwZWF0ZWRQdHJGaWVsZDxUeXBlPiBSZXBlYXRlZEZpZWxkVHlwZTsKLQotICBz
dGF0aWMgaW5saW5lIENvbnN0VHlwZSBHZXQoaW50IG51bWJlciwgY29uc3QgRXh0ZW5zaW9uU2V0
JiBzZXQsIGludCBpbmRleCkgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUeXBlJj4o
c2V0LkdldFJlcGVhdGVkTWVzc2FnZShudW1iZXIsIGluZGV4KSk7Ci0gIH0KLSAgc3RhdGljIGlu
bGluZSBNdXRhYmxlVHlwZSBNdXRhYmxlKGludCBudW1iZXIsIGludCBpbmRleCwgRXh0ZW5zaW9u
U2V0KiBzZXQpIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZSo+KHNldC0+TXV0YWJsZVJl
cGVhdGVkTWVzc2FnZShudW1iZXIsIGluZGV4KSk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSBNdXRh
YmxlVHlwZSBBZGQoaW50IG51bWJlciwgRmllbGRUeXBlIGZpZWxkX3R5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvblNldCogc2V0KSB7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFR5cGUqPigKLSAgICAgICAgc2V0LT5BZGRNZXNzYWdlKG51bWJlciwgZmllbGRf
dHlwZSwgVHlwZTo6ZGVmYXVsdF9pbnN0YW5jZSgpLCBOVUxMKSk7Ci0gIH0KLSAgc3RhdGljIGlu
bGluZSBjb25zdCBSZXBlYXRlZFB0ckZpZWxkPFR5cGU+JiBHZXRSZXBlYXRlZChpbnQgbnVtYmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEV4dGVuc2lvblNldCYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQpIHsKLSAgICAvLyBTZWUgbm90ZXMgYWJvdmUg
aW4gUmVwZWF0ZWRFbnVtVHlwZVRyYWl0czo6R2V0UmVwZWF0ZWQoKTogc2FtZQotICAgIC8vIGNh
c3RpbmcgaGFjayBhcHBsaWVzIGhlcmUsIGJlY2F1c2UgYSBSZXBlYXRlZFB0ckZpZWxkPE1lc3Nh
Z2VMaXRlPgotICAgIC8vIGNhbm5vdCBuYXR1cmFsbHkgYmVjb21lIGEgUmVwZWF0ZWRQdHJUeXBl
PFR5cGU+IGV2ZW4gdGhvdWdoIFR5cGUgaXMKLSAgICAvLyBwcmVzdW1hYmx5IGEgbWVzc2FnZS4g
Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSBnb2VzIHRocm91Z2ggc2ltaWxhciBjb250b3J0aW9u
cwotICAgIC8vIHdpdGggYSByZWludGVycHJldF9jYXN0PD4uCi0gICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PGNvbnN0IFJlcGVhdGVkUHRyRmllbGQ8VHlwZT4qPigKLSAgICAgICAgc2V0Lkdl
dFJhd1JlcGVhdGVkRmllbGQobnVtYmVyLCBHZXREZWZhdWx0UmVwZWF0ZWRGaWVsZCgpKSk7Ci0g
IH0KLSAgc3RhdGljIGlubGluZSBSZXBlYXRlZFB0ckZpZWxkPFR5cGU+KiBNdXRhYmxlUmVwZWF0
ZWQoaW50IG51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRmllbGRUeXBlIGZpZWxkX3R5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcGFja2VkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRl
bnNpb25TZXQqIHNldCkgewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFJlcGVhdGVkUHRy
RmllbGQ8VHlwZT4qPigKLSAgICAgICAgc2V0LT5NdXRhYmxlUmF3UmVwZWF0ZWRGaWVsZChudW1i
ZXIsIGZpZWxkX3R5cGUsIGlzX3BhY2tlZCwgTlVMTCkpOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0
IFJlcGVhdGVkRmllbGRUeXBlKiBHZXREZWZhdWx0UmVwZWF0ZWRGaWVsZCgpOwotfTsKLQotTElC
UFJPVE9CVUZfRVhQT1JUIGV4dGVybiBQcm90b2J1Zk9uY2VUeXBlIHJlcGVhdGVkX21lc3NhZ2Vf
Z2VuZXJpY190eXBlX3RyYWl0c19vbmNlX2luaXRfOwotCi0vLyBUaGlzIGNsYXNzIGV4aXN0cyBv
bmx5IHRvIGhvbGQgYSBnZW5lcmljIGRlZmF1bHQgZW1wdHkgcmVwZWF0ZWQgZmllbGQgZm9yIGFs
bAotLy8gbWVzc2FnZS10eXBlIHJlcGVhdGVkIGZpZWxkIGV4dGVuc2lvbnMuCi1jbGFzcyBMSUJQ
Uk9UT0JVRl9FWFBPUlQgUmVwZWF0ZWRNZXNzYWdlR2VuZXJpY1R5cGVUcmFpdHMgewotIHB1Ymxp
YzoKLSAgdHlwZWRlZiBSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3Nh
Z2VMaXRlKj4gUmVwZWF0ZWRGaWVsZFR5cGU7Ci0gcHJpdmF0ZToKLSAgdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4gZnJpZW5kIGNsYXNzIFJlcGVhdGVkTWVzc2FnZVR5cGVUcmFpdHM7Ci0gIHN0YXRp
YyB2b2lkIEluaXRpYWxpemVEZWZhdWx0UmVwZWF0ZWRGaWVsZHMoKTsKLSAgc3RhdGljIHZvaWQg
RGVzdHJveURlZmF1bHRSZXBlYXRlZEZpZWxkcygpOwotICBzdGF0aWMgY29uc3QgUmVwZWF0ZWRG
aWVsZFR5cGUqIGRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4gaW5saW5lCi0gICAgY29uc3QgdHlwZW5hbWUgUmVwZWF0ZWRNZXNzYWdlVHlwZVRy
YWl0czxUeXBlPjo6UmVwZWF0ZWRGaWVsZFR5cGUqCi0gICAgUmVwZWF0ZWRNZXNzYWdlVHlwZVRy
YWl0czxUeXBlPjo6R2V0RGVmYXVsdFJlcGVhdGVkRmllbGQoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6R29vZ2xlT25jZUluaXQoCi0gICAgICAmcmVwZWF0ZWRfbWVzc2FnZV9nZW5lcmljX3R5
cGVfdHJhaXRzX29uY2VfaW5pdF8sCi0gICAgICAmUmVwZWF0ZWRNZXNzYWdlR2VuZXJpY1R5cGVU
cmFpdHM6OkluaXRpYWxpemVEZWZhdWx0UmVwZWF0ZWRGaWVsZHMpOwotICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBSZXBlYXRlZEZpZWxkVHlwZSo+KAotICAgICAgUmVwZWF0ZWRNZXNz
YWdlR2VuZXJpY1R5cGVUcmFpdHM6OmRlZmF1bHRfcmVwZWF0ZWRfZmllbGRfKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gRXh0ZW5zaW9uSWRlbnRpZmllcgotCi0vLyBUaGlzIGlzIHRoZSB0eXBl
IG9mIGFjdHVhbCBleHRlbnNpb24gb2JqZWN0cy4gIEUuZy4gaWYgeW91IGhhdmU6Ci0vLyAgIGV4
dGVuZHMgRm9vIHdpdGggb3B0aW9uYWwgaW50MzIgYmFyID0gMTIzNDsKLS8vIHRoZW4gImJhciIg
d2lsbCBiZSBkZWZpbmVkIGluIEMrKyBhczoKLS8vICAgRXh0ZW5zaW9uSWRlbnRpZmllcjxGb28s
IFByaW1pdGl2ZVR5cGVUcmFpdHM8aW50MzI+LCAxLCBmYWxzZT4gYmFyKDEyMzQpOwotLy8KLS8v
IE5vdGUgdGhhdCB3ZSBjb3VsZCwgaW4gdGhlb3J5LCBzdXBwbHkgdGhlIGZpZWxkIG51bWJlciBh
cyBhIHRlbXBsYXRlCi0vLyBwYXJhbWV0ZXIsIGFuZCB0aHVzIG1ha2UgYW4gaW5zdGFuY2Ugb2Yg
RXh0ZW5zaW9uSWRlbnRpZmllciBoYXZlIG5vCi0vLyBhY3R1YWwgY29udGVudHMuICBIb3dldmVy
LCBpZiB3ZSBkaWQgdGhhdCwgdGhlbiB1c2luZyBhdCBleHRlbnNpb24KLS8vIGlkZW50aWZpZXIg
d291bGQgbm90IG5lY2Vzc2FyaWx5IGNhdXNlIHRoZSBjb21waWxlciB0byBvdXRwdXQgYW55IHNv
cnQKLS8vIG9mIHJlZmVyZW5jZSB0byBhbnkgc2ltcGxlIGRlZmluZWQgaW4gdGhlIGV4dGVuc2lv
bidzIC5wYi5vIGZpbGUuICBTb21lCi0vLyBsaW5rZXJzIHdpbGwgYWN0dWFsbHkgZHJvcCBvYmpl
Y3QgZmlsZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgcmVmZXJlbmNlZCwKLS8vIGJ1dCB0aGF0
IHdvdWxkIGJlIGJhZCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIHRoaXMgZXh0ZW5zaW9uIHRvIG5v
dCBiZQotLy8gcmVnaXN0ZXJlZCBhdCBzdGF0aWMgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGVyZWZv
cmUgdXNpbmcgaXQgd291bGQgY3Jhc2guCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFeHRlbmRlZVR5
cGUsIHR5cGVuYW1lIFR5cGVUcmFpdHNUeXBlLAotICAgICAgICAgIEZpZWxkVHlwZSBmaWVsZF90
eXBlLCBib29sIGlzX3BhY2tlZD4KLWNsYXNzIEV4dGVuc2lvbklkZW50aWZpZXIgewotIHB1Ymxp
YzoKLSAgdHlwZWRlZiBUeXBlVHJhaXRzVHlwZSBUeXBlVHJhaXRzOwotICB0eXBlZGVmIEV4dGVu
ZGVlVHlwZSBFeHRlbmRlZTsKLQotICBFeHRlbnNpb25JZGVudGlmaWVyKGludCBudW1iZXIsIHR5
cGVuYW1lIFR5cGVUcmFpdHM6OkNvbnN0VHlwZSBkZWZhdWx0X3ZhbHVlKQotICAgICAgOiBudW1i
ZXJfKG51bWJlciksIGRlZmF1bHRfdmFsdWVfKGRlZmF1bHRfdmFsdWUpIHt9Ci0gIGlubGluZSBp
bnQgbnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbnVtYmVyXzsgfQotICB0eXBlbmFtZSBUeXBlVHJh
aXRzOjpDb25zdFR5cGUgZGVmYXVsdF92YWx1ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gZGVmYXVs
dF92YWx1ZV87Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGNvbnN0IGludCBudW1iZXJfOwotICB0eXBl
bmFtZSBUeXBlVHJhaXRzOjpDb25zdFR5cGUgZGVmYXVsdF92YWx1ZV87Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBHZW5lcmF0ZWQgYWNjZXNzb3JzCi0KLS8vIFRoaXMgbWFjcm8gc2hvdWxkIGJl
IGV4cGFuZGVkIGluIHRoZSBjb250ZXh0IG9mIGEgZ2VuZXJhdGVkIHR5cGUgd2hpY2gKLS8vIGhh
cyBleHRlbnNpb25zLgotLy8KLS8vIFdlIHVzZSAiX3Byb3RvX1R5cGVUcmFpdHMiIGFzIGEgdHlw
ZSBuYW1lIGJlbG93IGJlY2F1c2UgIlR5cGVUcmFpdHMiCi0vLyBjYXVzZXMgcHJvYmxlbXMgaWYg
dGhlIGNsYXNzIGhhcyBhIG5lc3RlZCBtZXNzYWdlIG9yIGVudW0gdHlwZSB3aXRoIHRoYXQKLS8v
IG5hbWUgYW5kICJfVHlwZVRyYWl0cyIgaXMgdGVjaG5pY2FsbHkgcmVzZXJ2ZWQgZm9yIHRoZSBD
KysgbGlicmFyeSBzaW5jZQotLy8gaXQgc3RhcnRzIHdpdGggYW4gdW5kZXJzY29yZSBmb2xsb3dl
ZCBieSBhIGNhcGl0YWwgbGV0dGVyLgotLy8KLS8vIEZvciBzaW1pbGFyIHJlYXNvbiwgd2UgdXNl
ICJfZmllbGRfdHlwZSIgYW5kICJfaXNfcGFja2VkIiBhcyBwYXJhbWV0ZXIgbmFtZXMKLS8vIGJl
bG93LCBzbyB0aGF0ICJmaWVsZF90eXBlIiBhbmQgImlzX3BhY2tlZCIgY2FuIGJlIHVzZWQgYXMg
ZmllbGQgbmFtZXMuCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9FWFRFTlNJT05fQUNDRVNTT1JT
KENMQVNTTkFNRSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC8qIEhhcywgU2l6ZSwgQ2xl
YXIgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBfcHJvdG9fVHlwZVRyYWl0cywgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpGaWVsZFR5cGUgX2ZpZWxkX3R5cGUsICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgYm9vbCBfaXNfcGFja2VkPiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgYm9vbCBIYXNFeHRlbnNpb24o
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RXh0ZW5zaW9uSWRlbnRpZmll
cjwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ0xBU1NOQU1FLCBfcHJvdG9f
VHlwZVRyYWl0cywgX2ZpZWxkX3R5cGUsIF9pc19wYWNrZWQ+JiBpZCkgY29uc3QgeyAgIFwKLSAg
ICByZXR1cm4gX2V4dGVuc2lvbnNfLkhhcyhpZC5udW1iZXIoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIF9wcm90b19UeXBlVHJhaXRzLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkZpZWxkVHlwZSBfZmllbGRfdHlwZSwgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBib29sIF9pc19wYWNrZWQ+ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSB2b2lkIENsZWFy
RXh0ZW5zaW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpFeHRlbnNpb25J
ZGVudGlmaWVyPCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDTEFTU05BTUUs
IF9wcm90b19UeXBlVHJhaXRzLCBfZmllbGRfdHlwZSwgX2lzX3BhY2tlZD4mIGlkKSB7ICAgICAg
ICAgXAotICAgIF9leHRlbnNpb25zXy5DbGVhckV4dGVuc2lvbihpZC5udW1iZXIoKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX3Byb3RvX1R5cGVUcmFp
dHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RmllbGRUeXBlIF9maWVsZF90eXBlLCAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJvb2wgX2lzX3BhY2tlZD4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGlu
dCBFeHRlbnNpb25TaXplKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkV4
dGVuc2lvbklkZW50aWZpZXI8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENM
QVNTTkFNRSwgX3Byb3RvX1R5cGVUcmFpdHMsIF9maWVsZF90eXBlLCBfaXNfcGFja2VkPiYgaWQp
IGNvbnN0IHsgICBcCi0gICAgcmV0dXJuIF9leHRlbnNpb25zXy5FeHRlbnNpb25TaXplKGlkLm51
bWJlcigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC8qIFNpbmd1bGFyIGFjY2Vzc29ycyAqLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBfcHJvdG9fVHlwZVRyYWl0cywgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpGaWVsZFR5cGUgX2ZpZWxkX3R5cGUsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgYm9vbCBfaXNfcGFja2VkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgdHlwZW5hbWUgX3Byb3RvX1R5cGVUcmFpdHM6
OlNpbmd1bGFyOjpDb25zdFR5cGUgR2V0RXh0ZW5zaW9uKCAgICAgICAgXAotICAgICAgY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RXh0ZW5zaW9uSWRlbnRpZmllcjwgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ0xBU1NOQU1FLCBfcHJvdG9fVHlwZVRyYWl0
cywgX2ZpZWxkX3R5cGUsIF9pc19wYWNrZWQ+JiBpZCkgY29uc3QgeyAgIFwKLSAgICByZXR1cm4g
X3Byb3RvX1R5cGVUcmFpdHM6OkdldChpZC5udW1iZXIoKSwgX2V4dGVuc2lvbnNfLCAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZC5kZWZhdWx0
X3ZhbHVlKCkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIF9wcm90b19U
eXBlVHJhaXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkZpZWxkVHlwZSBfZmllbGRfdHlw
ZSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBib29sIF9pc19wYWNrZWQ+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlu
bGluZSB0eXBlbmFtZSBfcHJvdG9fVHlwZVRyYWl0czo6U2luZ3VsYXI6Ok11dGFibGVUeXBlIE11
dGFibGVFeHRlbnNpb24oICBcCi0gICAgICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpFeHRlbnNpb25JZGVudGlmaWVyPCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBDTEFTU05BTUUsIF9wcm90b19UeXBlVHJhaXRzLCBfZmllbGRfdHlwZSwgX2lzX3BhY2tl
ZD4mIGlkKSB7ICAgICAgICAgXAotICAgIHJldHVybiBfcHJvdG9fVHlwZVRyYWl0czo6TXV0YWJs
ZShpZC5udW1iZXIoKSwgX2ZpZWxkX3R5cGUsICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmX2V4dGVuc2lvbnNfKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX3Byb3RvX1R5cGVUcmFpdHMsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6RmllbGRUeXBlIF9maWVsZF90eXBlLCAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIGJvb2wgX2lzX3BhY2tlZD4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIHZvaWQgU2V0RXh0ZW5zaW9uKCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
IGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkV4dGVuc2lvbklkZW50aWZpZXI8
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENMQVNTTkFNRSwgX3Byb3RvX1R5
cGVUcmFpdHMsIF9maWVsZF90eXBlLCBfaXNfcGFja2VkPiYgaWQsICAgICAgICAgICBcCi0gICAg
ICB0eXBlbmFtZSBfcHJvdG9fVHlwZVRyYWl0czo6U2luZ3VsYXI6OkNvbnN0VHlwZSB2YWx1ZSkg
eyAgICAgICAgICAgICAgICBcCi0gICAgX3Byb3RvX1R5cGVUcmFpdHM6OlNldChpZC5udW1iZXIo
KSwgX2ZpZWxkX3R5cGUsIHZhbHVlLCAmX2V4dGVuc2lvbnNfKTsgICBcCi0gIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBf
cHJvdG9fVHlwZVRyYWl0cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpGaWVsZFR5cGUgX2Zp
ZWxkX3R5cGUsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYm9vbCBfaXNf
cGFja2VkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBpbmxpbmUgdm9pZCBTZXRBbGxvY2F0ZWRFeHRlbnNpb24oICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6RXh0ZW5zaW9uSWRlbnRpZmllcjwgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgQ0xBU1NOQU1FLCBfcHJvdG9fVHlwZVRyYWl0cywgX2ZpZWxkX3R5cGUsIF9p
c19wYWNrZWQ+JiBpZCwgICAgICAgICAgIFwKLSAgICAgIHR5cGVuYW1lIF9wcm90b19UeXBlVHJh
aXRzOjpTaW5ndWxhcjo6TXV0YWJsZVR5cGUgdmFsdWUpIHsgICAgICAgICAgICAgIFwKLSAgICBf
cHJvdG9fVHlwZVRyYWl0czo6U2V0QWxsb2NhdGVkKGlkLm51bWJlcigpLCBfZmllbGRfdHlwZSwg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlLCAmX2V4dGVuc2lvbnNfKTsgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIF9wcm90b19UeXBlVHJhaXRzLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkZpZWxkVHlwZSBfZmllbGRfdHlwZSwgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICBib29sIF9pc19wYWNrZWQ+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSB0eXBlbmFtZSBfcHJv
dG9fVHlwZVRyYWl0czo6U2luZ3VsYXI6Ok11dGFibGVUeXBlIFJlbGVhc2VFeHRlbnNpb24oICBc
Ci0gICAgICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpFeHRlbnNpb25JZGVu
dGlmaWVyPCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDTEFTU05BTUUsIF9w
cm90b19UeXBlVHJhaXRzLCBfZmllbGRfdHlwZSwgX2lzX3BhY2tlZD4mIGlkKSB7ICAgICAgICAg
XAotICAgIHJldHVybiBfcHJvdG9fVHlwZVRyYWl0czo6UmVsZWFzZShpZC5udW1iZXIoKSwgX2Zp
ZWxkX3R5cGUsICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmX2V4dGVuc2lvbnNfKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiBSZXBlYXRlZCBh
Y2Nlc3NvcnMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX3Byb3RvX1R5cGVUcmFpdHMsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6RmllbGRUeXBlIF9maWVsZF90eXBlLCAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIGJvb2wgX2lzX3BhY2tlZD4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIHR5cGVuYW1lIF9wcm90
b19UeXBlVHJhaXRzOjpSZXBlYXRlZDo6Q29uc3RUeXBlIEdldEV4dGVuc2lvbiggICAgICAgIFwK
LSAgICAgIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkV4dGVuc2lvbklkZW50
aWZpZXI8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENMQVNTTkFNRSwgX3By
b3RvX1R5cGVUcmFpdHMsIF9maWVsZF90eXBlLCBfaXNfcGFja2VkPiYgaWQsICAgICAgICAgICBc
Ci0gICAgICBpbnQgaW5kZXgpIGNvbnN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIF9wcm90b19UeXBlVHJhaXRzOjpH
ZXQoaWQubnVtYmVyKCksIF9leHRlbnNpb25zXywgaW5kZXgpOyAgICAgICAgICBcCi0gIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBl
bmFtZSBfcHJvdG9fVHlwZVRyYWl0cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpGaWVsZFR5
cGUgX2ZpZWxkX3R5cGUsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYm9v
bCBfaXNfcGFja2VkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBpbmxpbmUgdHlwZW5hbWUgX3Byb3RvX1R5cGVUcmFpdHM6OlJlcGVhdGVkOjpN
dXRhYmxlVHlwZSBNdXRhYmxlRXh0ZW5zaW9uKCAgXAotICAgICAgY29uc3QgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6RXh0ZW5zaW9uSWRlbnRpZmllcjwgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgQ0xBU1NOQU1FLCBfcHJvdG9fVHlwZVRyYWl0cywgX2ZpZWxkX3R5
cGUsIF9pc19wYWNrZWQ+JiBpZCwgICAgICAgICAgIFwKLSAgICAgIGludCBpbmRleCkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICByZXR1cm4gX3Byb3RvX1R5cGVUcmFpdHM6Ok11dGFibGUoaWQubnVtYmVyKCksIGluZGV4
LCAmX2V4dGVuc2lvbnNfKTsgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIF9wcm90b19UeXBlVHJhaXRzLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkZpZWxkVHlwZSBfZmllbGRfdHlwZSwgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBib29sIF9pc19wYWNrZWQ+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSB2b2lkIFNl
dEV4dGVuc2lvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpFeHRlbnNp
b25JZGVudGlmaWVyPCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDTEFTU05B
TUUsIF9wcm90b19UeXBlVHJhaXRzLCBfZmllbGRfdHlwZSwgX2lzX3BhY2tlZD4mIGlkLCAgICAg
ICAgICAgXAotICAgICAgaW50IGluZGV4LCB0eXBlbmFtZSBfcHJvdG9fVHlwZVRyYWl0czo6UmVw
ZWF0ZWQ6OkNvbnN0VHlwZSB2YWx1ZSkgeyAgICAgXAotICAgIF9wcm90b19UeXBlVHJhaXRzOjpT
ZXQoaWQubnVtYmVyKCksIGluZGV4LCB2YWx1ZSwgJl9leHRlbnNpb25zXyk7ICAgICAgICAgXAot
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX3Byb3RvX1R5cGVUcmFpdHMsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
RmllbGRUeXBlIF9maWVsZF90eXBlLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIGJvb2wgX2lzX3BhY2tlZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgaW5saW5lIHR5cGVuYW1lIF9wcm90b19UeXBlVHJhaXRzOjpSZXBl
YXRlZDo6TXV0YWJsZVR5cGUgQWRkRXh0ZW5zaW9uKCAgICAgIFwKLSAgICAgIGNvbnN0IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkV4dGVuc2lvbklkZW50aWZpZXI8ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIENMQVNTTkFNRSwgX3Byb3RvX1R5cGVUcmFpdHMsIF9m
aWVsZF90eXBlLCBfaXNfcGFja2VkPiYgaWQpIHsgICAgICAgICBcCi0gICAgcmV0dXJuIF9wcm90
b19UeXBlVHJhaXRzOjpBZGQoaWQubnVtYmVyKCksIF9maWVsZF90eXBlLCAmX2V4dGVuc2lvbnNf
KTsgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBfcHJvdG9fVHlwZVRyYWl0cywgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpGaWVsZFR5cGUgX2ZpZWxkX3R5cGUsICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgYm9vbCBfaXNfcGFja2VkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgdm9pZCBBZGRFeHRlbnNpb24oICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RXh0ZW5zaW9uSWRlbnRpZmllcjwgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ0xBU1NOQU1FLCBfcHJvdG9fVHlwZVRy
YWl0cywgX2ZpZWxkX3R5cGUsIF9pc19wYWNrZWQ+JiBpZCwgICAgICAgICAgIFwKLSAgICAgIHR5
cGVuYW1lIF9wcm90b19UeXBlVHJhaXRzOjpSZXBlYXRlZDo6Q29uc3RUeXBlIHZhbHVlKSB7ICAg
ICAgICAgICAgICAgIFwKLSAgICBfcHJvdG9fVHlwZVRyYWl0czo6QWRkKGlkLm51bWJlcigpLCBf
ZmllbGRfdHlwZSwgX2lzX3BhY2tlZCwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlLCAmX2V4dGVuc2lvbnNfKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9wcm90b19UeXBlVHJhaXRzLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkZpZWxkVHlwZSBfZmllbGRfdHlwZSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICBib29sIF9pc19wYWNrZWQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSBjb25zdCB0eXBlbmFtZSBfcHJvdG9fVHlw
ZVRyYWl0czo6UmVwZWF0ZWQ6OlJlcGVhdGVkRmllbGRUeXBlJiAgICAgICBcCi0gICAgICBHZXRS
ZXBlYXRlZEV4dGVuc2lvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6RXh0ZW5zaW9uSWRlbnRpZmllcjwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgQ0xBU1NOQU1FLCBfcHJvdG9fVHlwZVRyYWl0cywgX2ZpZWxkX3R5cGUsICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgX2lzX3BhY2tlZD4mIGlkKSBjb25zdCB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBfcHJvdG9f
VHlwZVRyYWl0czo6R2V0UmVwZWF0ZWQoaWQubnVtYmVyKCksIF9leHRlbnNpb25zXyk7ICAgICAg
ICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX3Byb3RvX1R5cGVUcmFpdHMsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6RmllbGRUeXBlIF9maWVsZF90eXBlLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgIGJvb2wgX2lzX3BhY2tlZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIHR5cGVuYW1lIF9wcm90b19UeXBlVHJhaXRz
OjpSZXBlYXRlZDo6UmVwZWF0ZWRGaWVsZFR5cGUqICAgICAgICAgICAgIFwKLSAgICAgIE11dGFi
bGVSZXBlYXRlZEV4dGVuc2lvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpFeHRlbnNpb25JZGVudGlmaWVyPCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgIENMQVNTTkFNRSwgX3Byb3RvX1R5cGVUcmFpdHMsIF9maWVsZF90eXBlLCAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgIF9pc19wYWNrZWQ+JiBpZCkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIF9wcm90b19U
eXBlVHJhaXRzOjpNdXRhYmxlUmVwZWF0ZWQoaWQubnVtYmVyKCksIF9maWVsZF90eXBlLCAgICAg
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2lzX3Bh
Y2tlZCwgJl9leHRlbnNpb25zXyk7ICAgICBcCi0gIH0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVy
bmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQot
I2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfRVhURU5TSU9OX1NFVF9IX18KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0X2hlYXZ5LmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2V4dGVuc2lvbl9zZXRfaGVhdnkuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDgyZTNlMDk5NjMxYWJhNTYxNTA5OTVkZGQ5ZjI4YTY4NmE4MjZmMWYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2V4
dGVuc2lvbl9zZXRfaGVhdnkuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw3NTQgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2ds
ZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZm
ZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJz
LgotLy8KLS8vIENvbnRhaW5zIG1ldGhvZHMgZGVmaW5lZCBpbiBleHRlbnNpb25fc2V0Lmggd2hp
Y2ggY2Fubm90IGJlIHBhcnQgb2YgdGhlCi0vLyBsaXRlIGxpYnJhcnkgYmVjYXVzZSB0aGV5IHVz
ZSBkZXNjcmlwdG9ycyBvciByZWZsZWN0aW9uLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2lvL3plcm9fY29weV9zdHJlYW1faW1wbF9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3Nl
dC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3dpcmVfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xp
dGVfaW5sLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotCi1uYW1lc3BhY2UgcHJvdG9idWYgewot
bmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gQSBGaWVsZFNraXBwZXIgdXNlZCB0byBzdG9yZSB1
bmtub3duIE1lc3NhZ2VTZXQgZmllbGRzIGludG8gVW5rbm93bkZpZWxkU2V0LgotY2xhc3MgTWVz
c2FnZVNldEZpZWxkU2tpcHBlcgotICAgIDogcHVibGljIFVua25vd25GaWVsZFNldEZpZWxkU2tp
cHBlciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBNZXNzYWdlU2V0RmllbGRTa2lwcGVyKFVua25v
d25GaWVsZFNldCogdW5rbm93bl9maWVsZHMpCi0gICAgICA6IFVua25vd25GaWVsZFNldEZpZWxk
U2tpcHBlcih1bmtub3duX2ZpZWxkcykge30KLSAgdmlydHVhbCB+TWVzc2FnZVNldEZpZWxkU2tp
cHBlcigpIHt9Ci0KLSAgdmlydHVhbCBib29sIFNraXBNZXNzYWdlU2V0RmllbGQoaW86OkNvZGVk
SW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZmllbGRfbnVtYmVyKTsKLX07Ci1ib29sIE1lc3NhZ2VTZXRGaWVsZFNraXBwZXI6OlNraXBN
ZXNzYWdlU2V0RmllbGQoCi0gICAgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCBpbnQgZmll
bGRfbnVtYmVyKSB7Ci0gIHVpbnQzMiBsZW5ndGg7Ci0gIGlmICghaW5wdXQtPlJlYWRWYXJpbnQz
MigmbGVuZ3RoKSkgcmV0dXJuIGZhbHNlOwotICBpZiAodW5rbm93bl9maWVsZHNfID09IE5VTEwp
IHsKLSAgICByZXR1cm4gaW5wdXQtPlNraXAobGVuZ3RoKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gaW5wdXQtPlJlYWRTdHJpbmcoCi0gICAgICAgIHVua25vd25fZmllbGRzXy0+QWRkTGVuZ3Ro
RGVsaW1pdGVkKGZpZWxkX251bWJlciksIGxlbmd0aCk7Ci0gIH0KLX0KLQotCi0vLyBJbXBsZW1l
bnRhdGlvbiBvZiBFeHRlbnNpb25GaW5kZXIgd2hpY2ggZmluZHMgZXh0ZW5zaW9ucyBpbiBhIGdp
dmVuCi0vLyBEZXNjcmlwdG9yUG9vbCwgdXNpbmcgdGhlIGdpdmVuIE1lc3NhZ2VGYWN0b3J5IHRv
IGNvbnN0cnVjdCBzdWItb2JqZWN0cy4KLS8vIFRoaXMgY2xhc3MgaXMgaW1wbGVtZW50ZWQgaW4g
ZXh0ZW5zaW9uX3NldF9oZWF2eS5jYy4KLWNsYXNzIERlc2NyaXB0b3JQb29sRXh0ZW5zaW9uRmlu
ZGVyIDogcHVibGljIEV4dGVuc2lvbkZpbmRlciB7Ci0gcHVibGljOgotICBEZXNjcmlwdG9yUG9v
bEV4dGVuc2lvbkZpbmRlcihjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkqIGZhY3RvcnksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIGNvbnRhaW5pbmdfdHlwZSkK
LSAgICAgIDogcG9vbF8ocG9vbCksIGZhY3RvcnlfKGZhY3RvcnkpLCBjb250YWluaW5nX3R5cGVf
KGNvbnRhaW5pbmdfdHlwZSkge30KLSAgdmlydHVhbCB+RGVzY3JpcHRvclBvb2xFeHRlbnNpb25G
aW5kZXIoKSB7fQotCi0gIHZpcnR1YWwgYm9vbCBGaW5kKGludCBudW1iZXIsIEV4dGVuc2lvbklu
Zm8qIG91dHB1dCk7Ci0KLSBwcml2YXRlOgotICBjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbF87
Ci0gIE1lc3NhZ2VGYWN0b3J5KiBmYWN0b3J5XzsKLSAgY29uc3QgRGVzY3JpcHRvciogY29udGFp
bmluZ190eXBlXzsKLX07Ci0KLXZvaWQgRXh0ZW5zaW9uU2V0OjpBcHBlbmRUb0xpc3QoCi0gICAg
Y29uc3QgRGVzY3JpcHRvciogY29udGFpbmluZ190eXBlLAotICAgIGNvbnN0IERlc2NyaXB0b3JQ
b29sKiBwb29sLAotICAgIHN0ZDo6dmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+KiBvdXRw
dXQpIGNvbnN0IHsKLSAgZm9yIChtYXA8aW50LCBFeHRlbnNpb24+Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gZXh0ZW5zaW9uc18uYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IGV4dGVuc2lvbnNfLmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICBib29sIGhhcyA9IGZhbHNlOwotICAgIGlmIChpdGVyLT5zZWNv
bmQuaXNfcmVwZWF0ZWQpIHsKLSAgICAgIGhhcyA9IGl0ZXItPnNlY29uZC5HZXRTaXplKCkgPiAw
OwotICAgIH0gZWxzZSB7Ci0gICAgICBoYXMgPSAhaXRlci0+c2Vjb25kLmlzX2NsZWFyZWQ7Ci0g
ICAgfQotCi0gICAgaWYgKGhhcykgewotICAgICAgLy8gVE9ETyhrZW50b24pOiBMb29raW5nIHVw
IGVhY2ggZmllbGQgYnkgbnVtYmVyIGlzIHNvbWV3aGF0IHVuZm9ydHVuYXRlLgotICAgICAgLy8g
ICBJcyB0aGVyZSBhIGJldHRlciB3YXk/ICBUaGUgcHJvYmxlbSBpcyB0aGF0IGRlc2NyaXB0b3Jz
IGFyZSBsYXppbHktCi0gICAgICAvLyAgIGluaXRpYWxpemVkLCBzbyB0aGV5IG1pZ2h0IG5vdCBl
dmVuIGJlIGNvbnN0cnVjdGVkIHVudGlsCi0gICAgICAvLyAgIEFwcGVuZFRvTGlzdCgpIGlzIGNh
bGxlZC4KLQotICAgICAgaWYgKGl0ZXItPnNlY29uZC5kZXNjcmlwdG9yID09IE5VTEwpIHsKLSAg
ICAgICAgb3V0cHV0LT5wdXNoX2JhY2socG9vbC0+RmluZEV4dGVuc2lvbkJ5TnVtYmVyKAotICAg
ICAgICAgICAgY29udGFpbmluZ190eXBlLCBpdGVyLT5maXJzdCkpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgb3V0cHV0LT5wdXNoX2JhY2soaXRlci0+c2Vjb25kLmRlc2NyaXB0b3IpOwotICAg
ICAgfQotICAgIH0KLSAgfQotfQotCi1pbmxpbmUgRmllbGREZXNjcmlwdG9yOjpUeXBlIHJlYWxf
dHlwZShGaWVsZFR5cGUgdHlwZSkgewotICBHT09HTEVfRENIRUNLKHR5cGUgPiAwICYmIHR5cGUg
PD0gRmllbGREZXNjcmlwdG9yOjpNQVhfVFlQRSk7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxGaWVs
ZERlc2NyaXB0b3I6OlR5cGU+KHR5cGUpOwotfQotCi1pbmxpbmUgRmllbGREZXNjcmlwdG9yOjpD
cHBUeXBlIGNwcF90eXBlKEZpZWxkVHlwZSB0eXBlKSB7Ci0gIHJldHVybiBGaWVsZERlc2NyaXB0
b3I6OlR5cGVUb0NwcFR5cGUoCi0gICAgICBzdGF0aWNfY2FzdDxGaWVsZERlc2NyaXB0b3I6OlR5
cGU+KHR5cGUpKTsKLX0KLQotaW5saW5lIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUgZmllbGRf
dHlwZShGaWVsZFR5cGUgdHlwZSkgewotICBHT09HTEVfRENIRUNLKHR5cGUgPiAwICYmIHR5cGUg
PD0gV2lyZUZvcm1hdExpdGU6Ok1BWF9GSUVMRF9UWVBFKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0
PFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGU+KHR5cGUpOwotfQotCi0jZGVmaW5lIEdPT0dMRV9E
Q0hFQ0tfVFlQRShFWFRFTlNJT04sIExBQkVMLCBDUFBUWVBFKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIEdPT0dMRV9EQ0hFQ0tfRVEoKEVYVEVOU0lPTikuaXNfcmVwZWF0ZWQgPyBG
aWVsZERlc2NyaXB0b3I6OkxBQkVMX1JFUEVBVEVEICAgICBcCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX09QVElPTkFMLCAgICAgIFwK
LSAgICAgICAgICAgIEZpZWxkRGVzY3JpcHRvcjo6TEFCRUxfIyNMQUJFTCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBHT09HTEVfRENIRUNLX0VRKGNwcF90eXBlKChFWFRFTlNJ
T04pLnR5cGUpLCBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfIyNDUFBUWVBFKQotCi1jb25zdCBN
ZXNzYWdlTGl0ZSYgRXh0ZW5zaW9uU2V0OjpHZXRNZXNzYWdlKGludCBudW1iZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3IqIG1l
c3NhZ2VfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWVzc2FnZUZhY3RvcnkqIGZhY3RvcnkpIGNvbnN0IHsKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbnNfLmZpbmQobnVtYmVyKTsKLSAgaWYgKGl0
ZXIgPT0gZXh0ZW5zaW9uc18uZW5kKCkgfHwgaXRlci0+c2Vjb25kLmlzX2NsZWFyZWQpIHsKLSAg
ICAvLyBOb3QgcHJlc2VudC4gIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4KLSAgICByZXR1cm4g
KmZhY3RvcnktPkdldFByb3RvdHlwZShtZXNzYWdlX3R5cGUpOwotICB9IGVsc2UgewotICAgIEdP
T0dMRV9EQ0hFQ0tfVFlQRShpdGVyLT5zZWNvbmQsIE9QVElPTkFMLCBNRVNTQUdFKTsKLSAgICBp
ZiAoaXRlci0+c2Vjb25kLmlzX2xhenkpIHsKLSAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQubGF6
eW1lc3NhZ2VfdmFsdWUtPkdldE1lc3NhZ2UoCi0gICAgICAgICAgKmZhY3RvcnktPkdldFByb3Rv
dHlwZShtZXNzYWdlX3R5cGUpKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuICppdGVyLT5z
ZWNvbmQubWVzc2FnZV92YWx1ZTsKLSAgICB9Ci0gIH0KLX0KLQotTWVzc2FnZUxpdGUqIEV4dGVu
c2lvblNldDo6TXV0YWJsZU1lc3NhZ2UoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3Rv
cnkqIGZhY3RvcnkpIHsKLSAgRXh0ZW5zaW9uKiBleHRlbnNpb247Ci0gIGlmIChNYXliZU5ld0V4
dGVuc2lvbihkZXNjcmlwdG9yLT5udW1iZXIoKSwgZGVzY3JpcHRvciwgJmV4dGVuc2lvbikpIHsK
LSAgICBleHRlbnNpb24tPnR5cGUgPSBkZXNjcmlwdG9yLT50eXBlKCk7Ci0gICAgR09PR0xFX0RD
SEVDS19FUShjcHBfdHlwZShleHRlbnNpb24tPnR5cGUpLCBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfTUVTU0FHRSk7Ci0gICAgZXh0ZW5zaW9uLT5pc19yZXBlYXRlZCA9IGZhbHNlOwotICAgIGV4
dGVuc2lvbi0+aXNfcGFja2VkID0gZmFsc2U7Ci0gICAgY29uc3QgTWVzc2FnZUxpdGUqIHByb3Rv
dHlwZSA9Ci0gICAgICAgIGZhY3RvcnktPkdldFByb3RvdHlwZShkZXNjcmlwdG9yLT5tZXNzYWdl
X3R5cGUoKSk7Ci0gICAgZXh0ZW5zaW9uLT5pc19sYXp5ID0gZmFsc2U7Ci0gICAgZXh0ZW5zaW9u
LT5tZXNzYWdlX3ZhbHVlID0gcHJvdG90eXBlLT5OZXcoYXJlbmFfKTsKLSAgICBleHRlbnNpb24t
PmlzX2NsZWFyZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gZXh0ZW5zaW9uLT5tZXNzYWdlX3ZhbHVl
OwotICB9IGVsc2UgewotICAgIEdPT0dMRV9EQ0hFQ0tfVFlQRSgqZXh0ZW5zaW9uLCBPUFRJT05B
TCwgTUVTU0FHRSk7Ci0gICAgZXh0ZW5zaW9uLT5pc19jbGVhcmVkID0gZmFsc2U7Ci0gICAgaWYg
KGV4dGVuc2lvbi0+aXNfbGF6eSkgewotICAgICAgcmV0dXJuIGV4dGVuc2lvbi0+bGF6eW1lc3Nh
Z2VfdmFsdWUtPk11dGFibGVNZXNzYWdlKAotICAgICAgICAgICpmYWN0b3J5LT5HZXRQcm90b3R5
cGUoZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0
dXJuIGV4dGVuc2lvbi0+bWVzc2FnZV92YWx1ZTsKLSAgICB9Ci0gIH0KLX0KLQotTWVzc2FnZUxp
dGUqIEV4dGVuc2lvblNldDo6UmVsZWFzZU1lc3NhZ2UoY29uc3QgRmllbGREZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVz
c2FnZUZhY3RvcnkqIGZhY3RvcnkpIHsKLSAgbWFwPGludCwgRXh0ZW5zaW9uPjo6aXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbnNfLmZpbmQoZGVzY3JpcHRvci0+bnVtYmVyKCkpOwotICBpZiAoaXRl
ciA9PSBleHRlbnNpb25zXy5lbmQoKSkgewotICAgIC8vIE5vdCBwcmVzZW50LiAgUmV0dXJuIE5V
TEwuCi0gICAgcmV0dXJuIE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgR09PR0xFX0RDSEVDS19UWVBF
KGl0ZXItPnNlY29uZCwgT1BUSU9OQUwsIE1FU1NBR0UpOwotICAgIE1lc3NhZ2VMaXRlKiByZXQg
PSBOVUxMOwotICAgIGlmIChpdGVyLT5zZWNvbmQuaXNfbGF6eSkgewotICAgICAgcmV0ID0gaXRl
ci0+c2Vjb25kLmxhenltZXNzYWdlX3ZhbHVlLT5SZWxlYXNlTWVzc2FnZSgKLSAgICAgICAgICAq
ZmFjdG9yeS0+R2V0UHJvdG90eXBlKGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpKSk7Ci0gICAg
ICBpZiAoYXJlbmFfID09IE5VTEwpIHsKLSAgICAgICAgZGVsZXRlIGl0ZXItPnNlY29uZC5sYXp5
bWVzc2FnZV92YWx1ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKGFyZW5hXyAh
PSBOVUxMKSB7Ci0gICAgICAgIHJldCA9IChpdGVyLT5zZWNvbmQubWVzc2FnZV92YWx1ZSktPk5l
dygpOwotICAgICAgICByZXQtPkNoZWNrVHlwZUFuZE1lcmdlRnJvbSgqKGl0ZXItPnNlY29uZC5t
ZXNzYWdlX3ZhbHVlKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXQgPSBpdGVyLT5zZWNv
bmQubWVzc2FnZV92YWx1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZXh0ZW5zaW9uc18uZXJhc2Uo
ZGVzY3JpcHRvci0+bnVtYmVyKCkpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotRXh0ZW5z
aW9uU2V0OjpFeHRlbnNpb24qIEV4dGVuc2lvblNldDo6TWF5YmVOZXdSZXBlYXRlZEV4dGVuc2lv
bihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgRXh0ZW5zaW9uKiBleHRl
bnNpb247Ci0gIGlmIChNYXliZU5ld0V4dGVuc2lvbihkZXNjcmlwdG9yLT5udW1iZXIoKSwgZGVz
Y3JpcHRvciwgJmV4dGVuc2lvbikpIHsKLSAgICBleHRlbnNpb24tPnR5cGUgPSBkZXNjcmlwdG9y
LT50eXBlKCk7Ci0gICAgR09PR0xFX0RDSEVDS19FUShjcHBfdHlwZShleHRlbnNpb24tPnR5cGUp
LCBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSk7Ci0gICAgZXh0ZW5zaW9uLT5pc19y
ZXBlYXRlZCA9IHRydWU7Ci0gICAgZXh0ZW5zaW9uLT5yZXBlYXRlZF9tZXNzYWdlX3ZhbHVlID0K
LSAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6Q3JlYXRlTWVzc2FnZTxSZXBlYXRl
ZFB0ckZpZWxkPE1lc3NhZ2VMaXRlPiA+KGFyZW5hXyk7Ci0gIH0gZWxzZSB7Ci0gICAgR09PR0xF
X0RDSEVDS19UWVBFKCpleHRlbnNpb24sIFJFUEVBVEVELCBNRVNTQUdFKTsKLSAgfQotICByZXR1
cm4gZXh0ZW5zaW9uOwotfQotCi1NZXNzYWdlTGl0ZSogRXh0ZW5zaW9uU2V0OjpBZGRNZXNzYWdl
KGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkqIGZhY3RvcnkpIHsKLSAgRXh0ZW5zaW9u
KiBleHRlbnNpb24gPSBNYXliZU5ld1JlcGVhdGVkRXh0ZW5zaW9uKGRlc2NyaXB0b3IpOwotCi0g
IC8vIFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4gZG9lcyBub3Qga25vdyBob3cgdG8gQWRkKCkg
c2luY2UgaXQgY2Fubm90Ci0gIC8vIGFsbG9jYXRlIGFuIGFic3RyYWN0IG9iamVjdCwgc28gd2Ug
aGF2ZSB0byBiZSB0cmlja3kuCi0gIE1lc3NhZ2VMaXRlKiByZXN1bHQgPSBleHRlbnNpb24tPnJl
cGVhdGVkX21lc3NhZ2VfdmFsdWUKLSAgICAgIC0+QWRkRnJvbUNsZWFyZWQ8R2VuZXJpY1R5cGVI
YW5kbGVyPE1lc3NhZ2VMaXRlPiA+KCk7Ci0gIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgIGNv
bnN0IE1lc3NhZ2VMaXRlKiBwcm90b3R5cGU7Ci0gICAgaWYgKGV4dGVuc2lvbi0+cmVwZWF0ZWRf
bWVzc2FnZV92YWx1ZS0+c2l6ZSgpID09IDApIHsKLSAgICAgIHByb3RvdHlwZSA9IGZhY3Rvcnkt
PkdldFByb3RvdHlwZShkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKSk7Ci0gICAgICBHT09HTEVf
Q0hFQ0socHJvdG90eXBlICE9IE5VTEwpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcm90b3R5cGUg
PSAmZXh0ZW5zaW9uLT5yZXBlYXRlZF9tZXNzYWdlX3ZhbHVlLT5HZXQoMCk7Ci0gICAgfQotICAg
IHJlc3VsdCA9IHByb3RvdHlwZS0+TmV3KGFyZW5hXyk7Ci0gICAgZXh0ZW5zaW9uLT5yZXBlYXRl
ZF9tZXNzYWdlX3ZhbHVlLT5BZGRBbGxvY2F0ZWQocmVzdWx0KTsKLSAgfQotICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkIEV4dGVuc2lvblNldDo6QWRkQWxsb2NhdGVkTWVzc2FnZShjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNZXNzYWdlTGl0ZSogbmV3X2VudHJ5KSB7Ci0gIEV4dGVuc2lvbiogZXh0ZW5z
aW9uID0gTWF5YmVOZXdSZXBlYXRlZEV4dGVuc2lvbihkZXNjcmlwdG9yKTsKLQotICBleHRlbnNp
b24tPnJlcGVhdGVkX21lc3NhZ2VfdmFsdWUtPkFkZEFsbG9jYXRlZChuZXdfZW50cnkpOwotfQot
Ci1zdGF0aWMgYm9vbCBWYWxpZGF0ZUVudW1Vc2luZ0Rlc2NyaXB0b3IoY29uc3Qgdm9pZCogYXJn
LCBpbnQgbnVtYmVyKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEVudW1EZXNj
cmlwdG9yKj4oYXJnKQotICAgICAgLT5GaW5kVmFsdWVCeU51bWJlcihudW1iZXIpICE9IE5VTEw7
Ci19Ci0KLWJvb2wgRGVzY3JpcHRvclBvb2xFeHRlbnNpb25GaW5kZXI6OkZpbmQoaW50IG51bWJl
ciwgRXh0ZW5zaW9uSW5mbyogb3V0cHV0KSB7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZXh0
ZW5zaW9uID0KLSAgICAgIHBvb2xfLT5GaW5kRXh0ZW5zaW9uQnlOdW1iZXIoY29udGFpbmluZ190
eXBlXywgbnVtYmVyKTsKLSAgaWYgKGV4dGVuc2lvbiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIGZh
bHNlOwotICB9IGVsc2UgewotICAgIG91dHB1dC0+dHlwZSA9IGV4dGVuc2lvbi0+dHlwZSgpOwot
ICAgIG91dHB1dC0+aXNfcmVwZWF0ZWQgPSBleHRlbnNpb24tPmlzX3JlcGVhdGVkKCk7Ci0gICAg
b3V0cHV0LT5pc19wYWNrZWQgPSBleHRlbnNpb24tPm9wdGlvbnMoKS5wYWNrZWQoKTsKLSAgICBv
dXRwdXQtPmRlc2NyaXB0b3IgPSBleHRlbnNpb247Ci0gICAgaWYgKGV4dGVuc2lvbi0+Y3BwX3R5
cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAgICAgb3V0cHV0
LT5tZXNzYWdlX3Byb3RvdHlwZSA9Ci0gICAgICAgICAgZmFjdG9yeV8tPkdldFByb3RvdHlwZShl
eHRlbnNpb24tPm1lc3NhZ2VfdHlwZSgpKTsKLSAgICAgIEdPT0dMRV9DSEVDSyhvdXRwdXQtPm1l
c3NhZ2VfcHJvdG90eXBlICE9IE5VTEwpCi0gICAgICAgICAgPDwgIkV4dGVuc2lvbiBmYWN0b3J5
J3MgR2V0UHJvdG90eXBlKCkgcmV0dXJuZWQgTlVMTCBmb3IgZXh0ZW5zaW9uOiAiCi0gICAgICAg
ICAgPDwgZXh0ZW5zaW9uLT5mdWxsX25hbWUoKTsKLSAgICB9IGVsc2UgaWYgKGV4dGVuc2lvbi0+
Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTSkgewotICAgICAgb3V0
cHV0LT5lbnVtX3ZhbGlkaXR5X2NoZWNrLmZ1bmMgPSBWYWxpZGF0ZUVudW1Vc2luZ0Rlc2NyaXB0
b3I7Ci0gICAgICBvdXRwdXQtPmVudW1fdmFsaWRpdHlfY2hlY2suYXJnID0gZXh0ZW5zaW9uLT5l
bnVtX3R5cGUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQotCi1ib29sIEV4
dGVuc2lvblNldDo6UGFyc2VGaWVsZCh1aW50MzIgdGFnLCBpbzo6Q29kZWRJbnB1dFN0cmVhbSog
aW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlKiBjb250
YWluaW5nX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmtub3duRmllbGRT
ZXQqIHVua25vd25fZmllbGRzKSB7Ci0gIFVua25vd25GaWVsZFNldEZpZWxkU2tpcHBlciBza2lw
cGVyKHVua25vd25fZmllbGRzKTsKLSAgaWYgKGlucHV0LT5HZXRFeHRlbnNpb25Qb29sKCkgPT0g
TlVMTCkgewotICAgIEdlbmVyYXRlZEV4dGVuc2lvbkZpbmRlciBmaW5kZXIoY29udGFpbmluZ190
eXBlKTsKLSAgICByZXR1cm4gUGFyc2VGaWVsZCh0YWcsIGlucHV0LCAmZmluZGVyLCAmc2tpcHBl
cik7Ci0gIH0gZWxzZSB7Ci0gICAgRGVzY3JpcHRvclBvb2xFeHRlbnNpb25GaW5kZXIgZmluZGVy
KGlucHV0LT5HZXRFeHRlbnNpb25Qb29sKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0LT5HZXRFeHRlbnNpb25GYWN0b3J5KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZS0+R2V0RGVzY3JpcHRv
cigpKTsKLSAgICByZXR1cm4gUGFyc2VGaWVsZCh0YWcsIGlucHV0LCAmZmluZGVyLCAmc2tpcHBl
cik7Ci0gIH0KLX0KLQotYm9vbCBFeHRlbnNpb25TZXQ6OlBhcnNlTWVzc2FnZVNldChpbzo6Q29k
ZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE1lc3NhZ2UqIGNvbnRhaW5pbmdfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVW5rbm93bkZpZWxkU2V0KiB1bmtub3duX2ZpZWxkcykgewotICBNZXNzYWdl
U2V0RmllbGRTa2lwcGVyIHNraXBwZXIodW5rbm93bl9maWVsZHMpOwotICBpZiAoaW5wdXQtPkdl
dEV4dGVuc2lvblBvb2woKSA9PSBOVUxMKSB7Ci0gICAgR2VuZXJhdGVkRXh0ZW5zaW9uRmluZGVy
IGZpbmRlcihjb250YWluaW5nX3R5cGUpOwotICAgIHJldHVybiBQYXJzZU1lc3NhZ2VTZXQoaW5w
dXQsICZmaW5kZXIsICZza2lwcGVyKTsKLSAgfSBlbHNlIHsKLSAgICBEZXNjcmlwdG9yUG9vbEV4
dGVuc2lvbkZpbmRlciBmaW5kZXIoaW5wdXQtPkdldEV4dGVuc2lvblBvb2woKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtPkdldEV4dGVuc2lvbkZhY3Rv
cnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmlu
Z190eXBlLT5HZXREZXNjcmlwdG9yKCkpOwotICAgIHJldHVybiBQYXJzZU1lc3NhZ2VTZXQoaW5w
dXQsICZmaW5kZXIsICZza2lwcGVyKTsKLSAgfQotfQotCi1pbnQgRXh0ZW5zaW9uU2V0OjpTcGFj
ZVVzZWRFeGNsdWRpbmdTZWxmKCkgY29uc3QgewotICBpbnQgdG90YWxfc2l6ZSA9Ci0gICAgICBl
eHRlbnNpb25zXy5zaXplKCkgKiBzaXplb2YobWFwPGludCwgRXh0ZW5zaW9uPjo6dmFsdWVfdHlw
ZSk7Ci0gIGZvciAobWFwPGludCwgRXh0ZW5zaW9uPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4
dGVuc2lvbnNfLmJlZ2luKCksCi0gICAgICAgZW5kID0gZXh0ZW5zaW9uc18uZW5kKCk7Ci0gICAg
ICAgaXRlciAhPSBlbmQ7Ci0gICAgICAgKytpdGVyKSB7Ci0gICAgdG90YWxfc2l6ZSArPSBpdGVy
LT5zZWNvbmQuU3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpOwotICB9Ci0gIHJldHVybiB0b3RhbF9z
aXplOwotfQotCi1pbmxpbmUgaW50IEV4dGVuc2lvblNldDo6UmVwZWF0ZWRNZXNzYWdlX1NwYWNl
VXNlZEV4Y2x1ZGluZ1NlbGYoCi0gICAgUmVwZWF0ZWRQdHJGaWVsZEJhc2UqIGZpZWxkKSB7Ci0g
IHJldHVybiBmaWVsZC0+U3BhY2VVc2VkRXhjbHVkaW5nU2VsZjxHZW5lcmljVHlwZUhhbmRsZXI8
TWVzc2FnZT4gPigpOwotfQotCi1pbnQgRXh0ZW5zaW9uU2V0OjpFeHRlbnNpb246OlNwYWNlVXNl
ZEV4Y2x1ZGluZ1NlbGYoKSBjb25zdCB7Ci0gIGludCB0b3RhbF9zaXplID0gMDsKLSAgaWYgKGlz
X3JlcGVhdGVkKSB7Ci0gICAgc3dpdGNoIChjcHBfdHlwZSh0eXBlKSkgewotI2RlZmluZSBIQU5E
TEVfVFlQRShVUFBFUkNBU0UsIExPV0VSQ0FTRSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFXyMjVVBQRVJDQVNFOiAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIHRvdGFsX3NpemUgKz0gc2l6ZW9mKCpyZXBlYXRlZF8jI0xP
V0VSQ0FTRSMjX3ZhbHVlKSArICAgICAgXAotICAgICAgICAgICAgcmVwZWF0ZWRfIyNMT1dFUkNB
U0UjI192YWx1ZS0+U3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpO1wKLSAgICAgICAgYnJlYWsKLQot
ICAgICAgSEFORExFX1RZUEUoICBJTlQzMiwgICBpbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQRSgg
IElOVDY0LCAgIGludDY0KTsKLSAgICAgIEhBTkRMRV9UWVBFKCBVSU5UMzIsICB1aW50MzIpOwot
ICAgICAgSEFORExFX1RZUEUoIFVJTlQ2NCwgIHVpbnQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQRSgg
IEZMT0FULCAgIGZsb2F0KTsKLSAgICAgIEhBTkRMRV9UWVBFKCBET1VCTEUsICBkb3VibGUpOwot
ICAgICAgSEFORExFX1RZUEUoICAgQk9PTCwgICAgYm9vbCk7Ci0gICAgICBIQU5ETEVfVFlQRSgg
ICBFTlVNLCAgICBlbnVtKTsKLSAgICAgIEhBTkRMRV9UWVBFKCBTVFJJTkcsICBzdHJpbmcpOwot
I3VuZGVmIEhBTkRMRV9UWVBFCi0KLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X01FU1NBR0U6Ci0gICAgICAgIC8vIHJlcGVhdGVkX21lc3NhZ2VfdmFsdWUgaXMgYWN0dWFsbHkg
YSBSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2VMaXRlPiwKLSAgICAgICAgLy8gYnV0IE1lc3NhZ2VM
aXRlIGhhcyBubyBTcGFjZVVzZWQoKSwgc28gd2UgbXVzdCBkaXJlY3RseSBjYWxsCi0gICAgICAg
IC8vIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpTcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCkgd2l0aCBh
IGRpZmZlcmVudCB0eXBlCi0gICAgICAgIC8vIGhhbmRsZXIuCi0gICAgICAgIHRvdGFsX3NpemUg
Kz0gc2l6ZW9mKCpyZXBlYXRlZF9tZXNzYWdlX3ZhbHVlKSArCi0gICAgICAgICAgICBSZXBlYXRl
ZE1lc3NhZ2VfU3BhY2VVc2VkRXhjbHVkaW5nU2VsZihyZXBlYXRlZF9tZXNzYWdlX3ZhbHVlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHN3aXRjaCAoY3BwX3R5cGUo
dHlwZSkpIHsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzoKLSAg
ICAgICAgdG90YWxfc2l6ZSArPSBzaXplb2YoKnN0cmluZ192YWx1ZSkgKwotICAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZ1NwYWNlVXNlZEV4Y2x1ZGluZ1NlbGYoKnN0cmluZ192YWx1ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FH
RToKLSAgICAgICAgaWYgKGlzX2xhenkpIHsKLSAgICAgICAgICB0b3RhbF9zaXplICs9IGxhenlt
ZXNzYWdlX3ZhbHVlLT5TcGFjZVVzZWQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0
b3RhbF9zaXplICs9IGRvd25fY2FzdDxNZXNzYWdlKj4obWVzc2FnZV92YWx1ZSktPlNwYWNlVXNl
ZCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
Ly8gTm8gZXh0cmEgc3RvcmFnZSBjb3N0cyBmb3IgcHJpbWl0aXZlIHR5cGVzLgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLS8vIFRoZSBTZXJp
YWxpemUqVG9BcnJheSBtZXRob2RzIGFyZSBvbmx5IG5lZWRlZCBpbiB0aGUgaGVhdnkgbGlicmFy
eSwgYXMKLS8vIHRoZSBsaXRlIGxpYnJhcnkgb25seSBnZW5lcmF0ZXMgU2VyaWFsaXplV2l0aENh
Y2hlZFNpemVzLgotdWludDgqIEV4dGVuc2lvblNldDo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVz
VG9BcnJheSgKLSAgICBpbnQgc3RhcnRfZmllbGRfbnVtYmVyLCBpbnQgZW5kX2ZpZWxkX251bWJl
ciwKLSAgICB1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIG1hcDxpbnQsIEV4dGVuc2lvbj46OmNv
bnN0X2l0ZXJhdG9yIGl0ZXI7Ci0gIGZvciAoaXRlciA9IGV4dGVuc2lvbnNfLmxvd2VyX2JvdW5k
KHN0YXJ0X2ZpZWxkX251bWJlcik7Ci0gICAgICAgaXRlciAhPSBleHRlbnNpb25zXy5lbmQoKSAm
JiBpdGVyLT5maXJzdCA8IGVuZF9maWVsZF9udW1iZXI7Ci0gICAgICAgKytpdGVyKSB7Ci0gICAg
dGFyZ2V0ID0gaXRlci0+c2Vjb25kLlNlcmlhbGl6ZUZpZWxkV2l0aENhY2hlZFNpemVzVG9BcnJh
eShpdGVyLT5maXJzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCk7Ci0gIH0KLSAgcmV0dXJuIHRhcmdldDsKLX0K
LQotdWludDgqIEV4dGVuc2lvblNldDo6U2VyaWFsaXplTWVzc2FnZVNldFdpdGhDYWNoZWRTaXpl
c1RvQXJyYXkoCi0gICAgdWludDgqIHRhcmdldCkgY29uc3QgewotICBtYXA8aW50LCBFeHRlbnNp
b24+Ojpjb25zdF9pdGVyYXRvciBpdGVyOwotICBmb3IgKGl0ZXIgPSBleHRlbnNpb25zXy5iZWdp
bigpOyBpdGVyICE9IGV4dGVuc2lvbnNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICB0YXJnZXQgPSBp
dGVyLT5zZWNvbmQuU2VyaWFsaXplTWVzc2FnZVNldEl0ZW1XaXRoQ2FjaGVkU2l6ZXNUb0FycmF5
KAotICAgICAgICBpdGVyLT5maXJzdCwgdGFyZ2V0KTsKLSAgfQotICByZXR1cm4gdGFyZ2V0Owot
fQotCi11aW50OCogRXh0ZW5zaW9uU2V0OjpFeHRlbnNpb246OlNlcmlhbGl6ZUZpZWxkV2l0aENh
Y2hlZFNpemVzVG9BcnJheSgKLSAgICBpbnQgbnVtYmVyLCB1aW50OCogdGFyZ2V0KSBjb25zdCB7
Ci0gIGlmIChpc19yZXBlYXRlZCkgewotICAgIGlmIChpc19wYWNrZWQpIHsKLSAgICAgIGlmIChj
YWNoZWRfc2l6ZSA9PSAwKSByZXR1cm4gdGFyZ2V0OwotCi0gICAgICB0YXJnZXQgPSBXaXJlRm9y
bWF0TGl0ZTo6V3JpdGVUYWdUb0FycmF5KG51bWJlciwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0
ZTo6V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCwgdGFyZ2V0KTsKLSAgICAgIHRhcmdldCA9IFdp
cmVGb3JtYXRMaXRlOjpXcml0ZUludDMyTm9UYWdUb0FycmF5KGNhY2hlZF9zaXplLCB0YXJnZXQp
OwotCi0gICAgICBzd2l0Y2ggKHJlYWxfdHlwZSh0eXBlKSkgewotI2RlZmluZSBIQU5ETEVfVFlQ
RShVUFBFUkNBU0UsIENBTUVMQ0FTRSwgTE9XRVJDQVNFKSAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfIyNVUFBFUkNBU0U6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
ZXBlYXRlZF8jI0xPV0VSQ0FTRSMjX3ZhbHVlLT5zaXplKCk7IGkrKykgeyAgXAotICAgICAgICAg
ICAgdGFyZ2V0ID0gV2lyZUZvcm1hdExpdGU6OldyaXRlIyNDQU1FTENBU0UjI05vVGFnVG9BcnJh
eSggICAgICAgIFwKLSAgICAgICAgICAgICAgcmVwZWF0ZWRfIyNMT1dFUkNBU0UjI192YWx1ZS0+
R2V0KGkpLCB0YXJnZXQpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgSEFORExFX1RZUEUoICAgSU5UMzIsICAgIEludDMy
LCAgIGludDMyKTsKLSAgICAgICAgSEFORExFX1RZUEUoICAgSU5UNjQsICAgIEludDY0LCAgIGlu
dDY0KTsKLSAgICAgICAgSEFORExFX1RZUEUoICBVSU5UMzIsICAgVUludDMyLCAgdWludDMyKTsK
LSAgICAgICAgSEFORExFX1RZUEUoICBVSU5UNjQsICAgVUludDY0LCAgdWludDY0KTsKLSAgICAg
ICAgSEFORExFX1RZUEUoICBTSU5UMzIsICAgU0ludDMyLCAgIGludDMyKTsKLSAgICAgICAgSEFO
RExFX1RZUEUoICBTSU5UNjQsICAgU0ludDY0LCAgIGludDY0KTsKLSAgICAgICAgSEFORExFX1RZ
UEUoIEZJWEVEMzIsICBGaXhlZDMyLCAgdWludDMyKTsKLSAgICAgICAgSEFORExFX1RZUEUoIEZJ
WEVENjQsICBGaXhlZDY0LCAgdWludDY0KTsKLSAgICAgICAgSEFORExFX1RZUEUoU0ZJWEVEMzIs
IFNGaXhlZDMyLCAgIGludDMyKTsKLSAgICAgICAgSEFORExFX1RZUEUoU0ZJWEVENjQsIFNGaXhl
ZDY0LCAgIGludDY0KTsKLSAgICAgICAgSEFORExFX1RZUEUoICAgRkxPQVQsICAgIEZsb2F0LCAg
IGZsb2F0KTsKLSAgICAgICAgSEFORExFX1RZUEUoICBET1VCTEUsICAgRG91YmxlLCAgZG91Ymxl
KTsKLSAgICAgICAgSEFORExFX1RZUEUoICAgIEJPT0wsICAgICBCb29sLCAgICBib29sKTsKLSAg
ICAgICAgSEFORExFX1RZUEUoICAgIEVOVU0sICAgICBFbnVtLCAgICBlbnVtKTsKLSN1bmRlZiBI
QU5ETEVfVFlQRQotCi0gICAgICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OlRZUEVfU1RSSU5HOgot
ICAgICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0JZVEVTOgotICAgICAgICBjYXNlIFdp
cmVGb3JtYXRMaXRlOjpUWVBFX0dST1VQOgotICAgICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpU
WVBFX01FU1NBR0U6Ci0gICAgICAgICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIk5vbi1wcmltaXRp
dmUgdHlwZXMgY2FuJ3QgYmUgcGFja2VkLiI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHN3aXRjaCAocmVhbF90eXBlKHR5cGUpKSB7Ci0jZGVmaW5lIEhB
TkRMRV9UWVBFKFVQUEVSQ0FTRSwgQ0FNRUxDQVNFLCBMT1dFUkNBU0UpICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV8jI1VQUEVSQ0FT
RTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJlcGVhdGVkXyMjTE9XRVJDQVNFIyNfdmFsdWUtPnNpemUoKTsgaSsrKSB7ICBcCi0g
ICAgICAgICAgICB0YXJnZXQgPSBXaXJlRm9ybWF0TGl0ZTo6V3JpdGUjI0NBTUVMQ0FTRSMjVG9B
cnJheShudW1iZXIsICAgICAgXAotICAgICAgICAgICAgICByZXBlYXRlZF8jI0xPV0VSQ0FTRSMj
X3ZhbHVlLT5HZXQoaSksIHRhcmdldCk7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgYnJlYWsKLQotICAgICAgICBIQU5ETEVfVFlQRSggICBJTlQzMiwg
ICAgSW50MzIsICAgaW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRSggICBJTlQ2NCwgICAgSW50
NjQsICAgaW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRSggIFVJTlQzMiwgICBVSW50MzIsICB1
aW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRSggIFVJTlQ2NCwgICBVSW50NjQsICB1aW50NjQp
OwotICAgICAgICBIQU5ETEVfVFlQRSggIFNJTlQzMiwgICBTSW50MzIsICAgaW50MzIpOwotICAg
ICAgICBIQU5ETEVfVFlQRSggIFNJTlQ2NCwgICBTSW50NjQsICAgaW50NjQpOwotICAgICAgICBI
QU5ETEVfVFlQRSggRklYRUQzMiwgIEZpeGVkMzIsICB1aW50MzIpOwotICAgICAgICBIQU5ETEVf
VFlQRSggRklYRUQ2NCwgIEZpeGVkNjQsICB1aW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRShT
RklYRUQzMiwgU0ZpeGVkMzIsICAgaW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRShTRklYRUQ2
NCwgU0ZpeGVkNjQsICAgaW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRSggICBGTE9BVCwgICAg
RmxvYXQsICAgZmxvYXQpOwotICAgICAgICBIQU5ETEVfVFlQRSggIERPVUJMRSwgICBEb3VibGUs
ICBkb3VibGUpOwotICAgICAgICBIQU5ETEVfVFlQRSggICAgQk9PTCwgICAgIEJvb2wsICAgIGJv
b2wpOwotICAgICAgICBIQU5ETEVfVFlQRSggIFNUUklORywgICBTdHJpbmcsICBzdHJpbmcpOwot
ICAgICAgICBIQU5ETEVfVFlQRSggICBCWVRFUywgICAgQnl0ZXMsICBzdHJpbmcpOwotICAgICAg
ICBIQU5ETEVfVFlQRSggICAgRU5VTSwgICAgIEVudW0sICAgIGVudW0pOwotICAgICAgICBIQU5E
TEVfVFlQRSggICBHUk9VUCwgICAgR3JvdXAsIG1lc3NhZ2UpOwotICAgICAgICBIQU5ETEVfVFlQ
RSggTUVTU0FHRSwgIE1lc3NhZ2UsIG1lc3NhZ2UpOwotI3VuZGVmIEhBTkRMRV9UWVBFCi0gICAg
ICB9Ci0gICAgfQotICB9IGVsc2UgaWYgKCFpc19jbGVhcmVkKSB7Ci0gICAgc3dpdGNoIChyZWFs
X3R5cGUodHlwZSkpIHsKLSNkZWZpbmUgSEFORExFX1RZUEUoVVBQRVJDQVNFLCBDQU1FTENBU0Us
IFZBTFVFKSAgICAgICAgICAgICAgICAgXAotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZ
UEVfIyNVUFBFUkNBU0U6ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHRhcmdldCA9IFdp
cmVGb3JtYXRMaXRlOjpXcml0ZSMjQ0FNRUxDQVNFIyNUb0FycmF5KCAgICAgIFwKLSAgICAgICAg
ICAgIG51bWJlciwgVkFMVUUsIHRhcmdldCk7IFwKLSAgICAgICAgYnJlYWsKLQotICAgICAgSEFO
RExFX1RZUEUoICAgSU5UMzIsICAgIEludDMyLCAgICBpbnQzMl92YWx1ZSk7Ci0gICAgICBIQU5E
TEVfVFlQRSggICBJTlQ2NCwgICAgSW50NjQsICAgIGludDY0X3ZhbHVlKTsKLSAgICAgIEhBTkRM
RV9UWVBFKCAgVUlOVDMyLCAgIFVJbnQzMiwgICB1aW50MzJfdmFsdWUpOwotICAgICAgSEFORExF
X1RZUEUoICBVSU5UNjQsICAgVUludDY0LCAgIHVpbnQ2NF92YWx1ZSk7Ci0gICAgICBIQU5ETEVf
VFlQRSggIFNJTlQzMiwgICBTSW50MzIsICAgIGludDMyX3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9U
WVBFKCAgU0lOVDY0LCAgIFNJbnQ2NCwgICAgaW50NjRfdmFsdWUpOwotICAgICAgSEFORExFX1RZ
UEUoIEZJWEVEMzIsICBGaXhlZDMyLCAgIHVpbnQzMl92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQ
RSggRklYRUQ2NCwgIEZpeGVkNjQsICAgdWludDY0X3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBF
KFNGSVhFRDMyLCBTRml4ZWQzMiwgICAgaW50MzJfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUo
U0ZJWEVENjQsIFNGaXhlZDY0LCAgICBpbnQ2NF92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSgg
ICBGTE9BVCwgICAgRmxvYXQsICAgIGZsb2F0X3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAg
RE9VQkxFLCAgIERvdWJsZSwgICBkb3VibGVfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoICAg
IEJPT0wsICAgICBCb29sLCAgICAgYm9vbF92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggIFNU
UklORywgICBTdHJpbmcsICAqc3RyaW5nX3ZhbHVlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgIEJZ
VEVTLCAgICBCeXRlcywgICpzdHJpbmdfdmFsdWUpOwotICAgICAgSEFORExFX1RZUEUoICAgIEVO
VU0sICAgICBFbnVtLCAgICAgZW51bV92YWx1ZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggICBHUk9V
UCwgICAgR3JvdXAsICptZXNzYWdlX3ZhbHVlKTsKLSN1bmRlZiBIQU5ETEVfVFlQRQotICAgICAg
Y2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRToKLSAgICAgICAgaWYgKGlzX2xhenkp
IHsKLSAgICAgICAgICB0YXJnZXQgPSBsYXp5bWVzc2FnZV92YWx1ZS0+V3JpdGVNZXNzYWdlVG9B
cnJheShudW1iZXIsIHRhcmdldCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGFyZ2V0
ID0gV2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZVRvQXJyYXkoCi0gICAgICAgICAgICAgIG51
bWJlciwgKm1lc3NhZ2VfdmFsdWUsIHRhcmdldCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICB9Ci0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLXVpbnQ4KiBFeHRlbnNpb25TZXQ6
OkV4dGVuc2lvbjo6U2VyaWFsaXplTWVzc2FnZVNldEl0ZW1XaXRoQ2FjaGVkU2l6ZXNUb0FycmF5
KAotICAgIGludCBudW1iZXIsCi0gICAgdWludDgqIHRhcmdldCkgY29uc3QgewotICBpZiAodHlw
ZSAhPSBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9NRVNTQUdFIHx8IGlzX3JlcGVhdGVkKSB7Ci0gICAg
Ly8gTm90IGEgdmFsaWQgTWVzc2FnZVNldCBleHRlbnNpb24sIGJ1dCBzZXJpYWxpemUgaXQgdGhl
IG5vcm1hbCB3YXkuCi0gICAgR09PR0xFX0xPRyhXQVJOSU5HKSA8PCAiSW52YWxpZCBtZXNzYWdl
IHNldCBleHRlbnNpb24uIjsKLSAgICByZXR1cm4gU2VyaWFsaXplRmllbGRXaXRoQ2FjaGVkU2l6
ZXNUb0FycmF5KG51bWJlciwgdGFyZ2V0KTsKLSAgfQotCi0gIGlmIChpc19jbGVhcmVkKSByZXR1
cm4gdGFyZ2V0OwotCi0gIC8vIFN0YXJ0IGdyb3VwLgotICB0YXJnZXQgPSBpbzo6Q29kZWRPdXRw
dXRTdHJlYW06OldyaXRlVGFnVG9BcnJheSgKLSAgICAgIFdpcmVGb3JtYXRMaXRlOjprTWVzc2Fn
ZVNldEl0ZW1TdGFydFRhZywgdGFyZ2V0KTsKLSAgLy8gV3JpdGUgdHlwZSBJRC4KLSAgdGFyZ2V0
ID0gV2lyZUZvcm1hdExpdGU6OldyaXRlVUludDMyVG9BcnJheSgKLSAgICAgIFdpcmVGb3JtYXRM
aXRlOjprTWVzc2FnZVNldFR5cGVJZE51bWJlciwgbnVtYmVyLCB0YXJnZXQpOwotICAvLyBXcml0
ZSBtZXNzYWdlLgotICBpZiAoaXNfbGF6eSkgewotICAgIHRhcmdldCA9IGxhenltZXNzYWdlX3Zh
bHVlLT5Xcml0ZU1lc3NhZ2VUb0FycmF5KAotICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6a01lc3Nh
Z2VTZXRNZXNzYWdlTnVtYmVyLCB0YXJnZXQpOwotICB9IGVsc2UgewotICAgIHRhcmdldCA9IFdp
cmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VUb0FycmF5KAotICAgICAgICBXaXJlRm9ybWF0TGl0
ZTo6a01lc3NhZ2VTZXRNZXNzYWdlTnVtYmVyLCAqbWVzc2FnZV92YWx1ZSwgdGFyZ2V0KTsKLSAg
fQotICAvLyBFbmQgZ3JvdXAuCi0gIHRhcmdldCA9IGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6V3Jp
dGVUYWdUb0FycmF5KAotICAgICAgV2lyZUZvcm1hdExpdGU6OmtNZXNzYWdlU2V0SXRlbUVuZFRh
ZywgdGFyZ2V0KTsKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotCi1ib29sIEV4dGVuc2lvblNldDo6
UGFyc2VGaWVsZE1heWJlTGF6aWx5KAotICAgIGludCB3aXJlX3R5cGUsIGludCBmaWVsZF9udW1i
ZXIsIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICBFeHRlbnNpb25GaW5kZXIqIGV4
dGVuc2lvbl9maW5kZXIsCi0gICAgTWVzc2FnZVNldEZpZWxkU2tpcHBlciogZmllbGRfc2tpcHBl
cikgewotICByZXR1cm4gUGFyc2VGaWVsZChXaXJlRm9ybWF0TGl0ZTo6TWFrZVRhZygKLSAgICAg
IGZpZWxkX251bWJlciwgc3RhdGljX2Nhc3Q8V2lyZUZvcm1hdExpdGU6OldpcmVUeXBlPih3aXJl
X3R5cGUpKSwKLSAgICAgICAgICAgICAgICAgICAgaW5wdXQsIGV4dGVuc2lvbl9maW5kZXIsIGZp
ZWxkX3NraXBwZXIpOwotfQotCi1ib29sIEV4dGVuc2lvblNldDo6UGFyc2VNZXNzYWdlU2V0KGlv
OjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRXh0ZW5zaW9uRmluZGVyKiBleHRlbnNpb25fZmluZGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNZXNzYWdlU2V0RmllbGRTa2lwcGVyKiBmaWVsZF9za2lwcGVy
KSB7Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgY29uc3QgdWludDMyIHRhZyA9IGlucHV0LT5SZWFk
VGFnKCk7Ci0gICAgc3dpdGNoICh0YWcpIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjprTWVzc2FnZVNldEl0ZW1TdGFydFRh
ZzoKLSAgICAgICAgaWYgKCFQYXJzZU1lc3NhZ2VTZXRJdGVtKGlucHV0LCBleHRlbnNpb25fZmlu
ZGVyLCBmaWVsZF9za2lwcGVyKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICghUGFyc2VGaWVs
ZCh0YWcsIGlucHV0LCBleHRlbnNpb25fZmluZGVyLCBmaWVsZF9za2lwcGVyKSkgewotICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0K
LX0KLQotYm9vbCBFeHRlbnNpb25TZXQ6OlBhcnNlTWVzc2FnZVNldChpbzo6Q29kZWRJbnB1dFN0
cmVhbSogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1l
c3NhZ2VMaXRlKiBjb250YWluaW5nX3R5cGUpIHsKLSAgTWVzc2FnZVNldEZpZWxkU2tpcHBlciBz
a2lwcGVyKE5VTEwpOwotICBHZW5lcmF0ZWRFeHRlbnNpb25GaW5kZXIgZmluZGVyKGNvbnRhaW5p
bmdfdHlwZSk7Ci0gIHJldHVybiBQYXJzZU1lc3NhZ2VTZXQoaW5wdXQsICZmaW5kZXIsICZza2lw
cGVyKTsKLX0KLQotYm9vbCBFeHRlbnNpb25TZXQ6OlBhcnNlTWVzc2FnZVNldEl0ZW0oaW86OkNv
ZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRXh0ZW5zaW9uRmluZGVyKiBleHRlbnNpb25fZmluZGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVNldEZpZWxkU2tpcHBlciogZmllbGRfc2tp
cHBlcikgewotICAvLyBUT0RPKGtlbnRvbik6ICBJdCB3b3VsZCBiZSBuaWNlIHRvIHNoYXJlIGNv
ZGUgYmV0d2VlbiB0aGlzIGFuZAotICAvLyBXaXJlRm9ybWF0TGl0ZTo6UGFyc2VBbmRNZXJnZU1l
c3NhZ2VTZXRJdGVtKCksIGJ1dCBJIHRoaW5rIHRoZQotICAvLyBkaWZmZXJlbmNlcyB3b3VsZCBi
ZSBoYXJkIHRvIGZhY3RvciBvdXQuCi0KLSAgLy8gVGhpcyBtZXRob2QgcGFyc2VzIGEgZ3JvdXAg
d2hpY2ggc2hvdWxkIGNvbnRhaW4gdHdvIGZpZWxkczoKLSAgLy8gICByZXF1aXJlZCBpbnQzMiB0
eXBlX2lkID0gMjsKLSAgLy8gICByZXF1aXJlZCBkYXRhIG1lc3NhZ2UgPSAzOwotCi0gIHVpbnQz
MiBsYXN0X3R5cGVfaWQgPSAwOwotCi0gIC8vIElmIHdlIHNlZSBtZXNzYWdlIGRhdGEgYmVmb3Jl
IHRoZSB0eXBlX2lkLCB3ZSdsbCBhcHBlbmQgaXQgdG8gdGhpcyBzbwotICAvLyB3ZSBjYW4gcGFy
c2UgaXQgbGF0ZXIuCi0gIHN0cmluZyBtZXNzYWdlX2RhdGE7Ci0KLSAgd2hpbGUgKHRydWUpIHsK
LSAgICBjb25zdCB1aW50MzIgdGFnID0gaW5wdXQtPlJlYWRUYWcoKTsKLSAgICBpZiAodGFnID09
IDApIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICBjYXNlIFdpcmVG
b3JtYXRMaXRlOjprTWVzc2FnZVNldFR5cGVJZFRhZzogewotICAgICAgICB1aW50MzIgdHlwZV9p
ZDsKLSAgICAgICAgaWYgKCFpbnB1dC0+UmVhZFZhcmludDMyKCZ0eXBlX2lkKSkgcmV0dXJuIGZh
bHNlOwotICAgICAgICBsYXN0X3R5cGVfaWQgPSB0eXBlX2lkOwotCi0gICAgICAgIGlmICghbWVz
c2FnZV9kYXRhLmVtcHR5KCkpIHsKLSAgICAgICAgICAvLyBXZSBzYXcgc29tZSBtZXNzYWdlIGRh
dGEgYmVmb3JlIHRoZSB0eXBlX2lkLiAgSGF2ZSB0byBwYXJzZSBpdAotICAgICAgICAgIC8vIG5v
dy4KLSAgICAgICAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSBzdWJfaW5wdXQoCi0gICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgqPihtZXNzYWdlX2RhdGEuZGF0YSgpKSwK
LSAgICAgICAgICAgICAgbWVzc2FnZV9kYXRhLnNpemUoKSk7Ci0gICAgICAgICAgaWYgKCFQYXJz
ZUZpZWxkTWF5YmVMYXppbHkoV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJTUlU
RUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90eXBlX2lkLCAm
c3ViX2lucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lv
bl9maW5kZXIsIGZpZWxkX3NraXBwZXIpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIG1lc3NhZ2VfZGF0YS5jbGVhcigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OmtN
ZXNzYWdlU2V0TWVzc2FnZVRhZzogewotICAgICAgICBpZiAobGFzdF90eXBlX2lkID09IDApIHsK
LSAgICAgICAgICAvLyBXZSBoYXZlbid0IHNlZW4gYSB0eXBlX2lkIHlldC4gIEFwcGVuZCB0aGlz
IGRhdGEgdG8gbWVzc2FnZV9kYXRhLgotICAgICAgICAgIHN0cmluZyB0ZW1wOwotICAgICAgICAg
IHVpbnQzMiBsZW5ndGg7Ci0gICAgICAgICAgaWYgKCFpbnB1dC0+UmVhZFZhcmludDMyKCZsZW5n
dGgpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgaWYgKCFpbnB1dC0+UmVhZFN0cmluZygmdGVt
cCwgbGVuZ3RoKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGlvOjpTdHJpbmdPdXRwdXRTdHJl
YW0gb3V0cHV0X3N0cmVhbSgmbWVzc2FnZV9kYXRhKTsKLSAgICAgICAgICBpbzo6Q29kZWRPdXRw
dXRTdHJlYW0gY29kZWRfb3V0cHV0KCZvdXRwdXRfc3RyZWFtKTsKLSAgICAgICAgICBjb2RlZF9v
dXRwdXQuV3JpdGVWYXJpbnQzMihsZW5ndGgpOwotICAgICAgICAgIGNvZGVkX291dHB1dC5Xcml0
ZVN0cmluZyh0ZW1wKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBBbHJlYWR5IHNh
dyB0eXBlX2lkLCBzbyB3ZSBjYW4gcGFyc2UgdGhpcyBkaXJlY3RseS4KLSAgICAgICAgICBpZiAo
IVBhcnNlRmllbGRNYXliZUxhemlseShXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfTEVOR1RIX0RF
TElNSVRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3R5cGVf
aWQsIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lv
bl9maW5kZXIsIGZpZWxkX3NraXBwZXIpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAg
IGNhc2UgV2lyZUZvcm1hdExpdGU6OmtNZXNzYWdlU2V0SXRlbUVuZFRhZzogewotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDogewotICAgICAgICBpZiAoIWZp
ZWxkX3NraXBwZXItPlNraXBGaWVsZChpbnB1dCwgdGFnKSkgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotICAgIH0KLSAgfQotfQotCi12b2lkIEV4dGVuc2lvblNldDo6RXh0ZW5zaW9uOjpTZXJpYWxp
emVNZXNzYWdlU2V0SXRlbVdpdGhDYWNoZWRTaXplcygKLSAgICBpbnQgbnVtYmVyLAotICAgIGlv
OjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIGlmICh0eXBlICE9IFdpcmVG
b3JtYXRMaXRlOjpUWVBFX01FU1NBR0UgfHwgaXNfcmVwZWF0ZWQpIHsKLSAgICAvLyBOb3QgYSB2
YWxpZCBNZXNzYWdlU2V0IGV4dGVuc2lvbiwgYnV0IHNlcmlhbGl6ZSBpdCB0aGUgbm9ybWFsIHdh
eS4KLSAgICBTZXJpYWxpemVGaWVsZFdpdGhDYWNoZWRTaXplcyhudW1iZXIsIG91dHB1dCk7Ci0g
ICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGlzX2NsZWFyZWQpIHJldHVybjsKLQotICAvLyBTdGFy
dCBncm91cC4KLSAgb3V0cHV0LT5Xcml0ZVRhZyhXaXJlRm9ybWF0TGl0ZTo6a01lc3NhZ2VTZXRJ
dGVtU3RhcnRUYWcpOwotCi0gIC8vIFdyaXRlIHR5cGUgSUQuCi0gIFdpcmVGb3JtYXRMaXRlOjpX
cml0ZVVJbnQzMihXaXJlRm9ybWF0TGl0ZTo6a01lc3NhZ2VTZXRUeXBlSWROdW1iZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQpOwotICAvLyBXcml0ZSBtZXNzYWdlLgotICBpZiAoaXNfbGF6eSkgewot
ICAgIGxhenltZXNzYWdlX3ZhbHVlLT5Xcml0ZU1lc3NhZ2UoCi0gICAgICAgIFdpcmVGb3JtYXRM
aXRlOjprTWVzc2FnZVNldE1lc3NhZ2VOdW1iZXIsIG91dHB1dCk7Ci0gIH0gZWxzZSB7Ci0gICAg
V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgICAgV2lyZUZv
cm1hdExpdGU6OmtNZXNzYWdlU2V0TWVzc2FnZU51bWJlciwKLSAgICAgICAgKm1lc3NhZ2VfdmFs
dWUsCi0gICAgICAgIG91dHB1dCk7Ci0gIH0KLQotICAvLyBFbmQgZ3JvdXAuCi0gIG91dHB1dC0+
V3JpdGVUYWcoV2lyZUZvcm1hdExpdGU6OmtNZXNzYWdlU2V0SXRlbUVuZFRhZyk7Ci19Ci0KLWlu
dCBFeHRlbnNpb25TZXQ6OkV4dGVuc2lvbjo6TWVzc2FnZVNldEl0ZW1CeXRlU2l6ZShpbnQgbnVt
YmVyKSBjb25zdCB7Ci0gIGlmICh0eXBlICE9IFdpcmVGb3JtYXRMaXRlOjpUWVBFX01FU1NBR0Ug
fHwgaXNfcmVwZWF0ZWQpIHsKLSAgICAvLyBOb3QgYSB2YWxpZCBNZXNzYWdlU2V0IGV4dGVuc2lv
biwgYnV0IGNvbXB1dGUgdGhlIGJ5dGUgc2l6ZSBmb3IgaXQgdGhlCi0gICAgLy8gbm9ybWFsIHdh
eS4KLSAgICByZXR1cm4gQnl0ZVNpemUobnVtYmVyKTsKLSAgfQotCi0gIGlmIChpc19jbGVhcmVk
KSByZXR1cm4gMDsKLQotICBpbnQgb3VyX3NpemUgPSBXaXJlRm9ybWF0TGl0ZTo6a01lc3NhZ2VT
ZXRJdGVtVGFnc1NpemU7Ci0KLSAgLy8gdHlwZV9pZAotICBvdXJfc2l6ZSArPSBpbzo6Q29kZWRP
dXRwdXRTdHJlYW06OlZhcmludFNpemUzMihudW1iZXIpOwotCi0gIC8vIG1lc3NhZ2UKLSAgaW50
IG1lc3NhZ2Vfc2l6ZSA9IDA7Ci0gIGlmIChpc19sYXp5KSB7Ci0gICAgbWVzc2FnZV9zaXplID0g
bGF6eW1lc3NhZ2VfdmFsdWUtPkJ5dGVTaXplKCk7Ci0gIH0gZWxzZSB7Ci0gICAgbWVzc2FnZV9z
aXplID0gbWVzc2FnZV92YWx1ZS0+Qnl0ZVNpemUoKTsKLSAgfQotCi0gIG91cl9zaXplICs9IGlv
OjpDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6ZTMyKG1lc3NhZ2Vfc2l6ZSk7Ci0gIG91cl9z
aXplICs9IG1lc3NhZ2Vfc2l6ZTsKLQotICByZXR1cm4gb3VyX3NpemU7Ci19Ci0KLXZvaWQgRXh0
ZW5zaW9uU2V0OjpTZXJpYWxpemVNZXNzYWdlU2V0V2l0aENhY2hlZFNpemVzKAotICAgIGlvOjpD
b2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIGZvciAobWFwPGludCwgRXh0ZW5z
aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbnNfLmJlZ2luKCk7Ci0gICAgICAg
aXRlciAhPSBleHRlbnNpb25zXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgaXRlci0+c2Vjb25kLlNl
cmlhbGl6ZU1lc3NhZ2VTZXRJdGVtV2l0aENhY2hlZFNpemVzKGl0ZXItPmZpcnN0LCBvdXRwdXQp
OwotICB9Ci19Ci0KLWludCBFeHRlbnNpb25TZXQ6Ok1lc3NhZ2VTZXRCeXRlU2l6ZSgpIGNvbnN0
IHsKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIGZvciAobWFwPGludCwgRXh0ZW5zaW9uPjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbnNfLmJlZ2luKCk7Ci0gICAgICAgaXRlciAh
PSBleHRlbnNpb25zXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgdG90YWxfc2l6ZSArPSBpdGVyLT5z
ZWNvbmQuTWVzc2FnZVNldEl0ZW1CeXRlU2l6ZShpdGVyLT5maXJzdCk7Ci0gIH0KLQotICByZXR1
cm4gdG90YWxfc2l6ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0X3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2V4dGVuc2lvbl9zZXRfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGY0MGZjYmMyNmQ5Yjc3YzIyMjI4MGI5OWI2ZmIxMjlmYzE4MWY3YWIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2V4
dGVuc2lvbl9zZXRfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjA3ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBn
b29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wg
QnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90
aGVycy4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0Lmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3VuaXR0ZXN0X21zZXQucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVz
dF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYXJlbmEuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9keW5hbWljX21lc3Nh
Z2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0Lmg+Ci0jaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RsX3V0aWwu
aD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3Bh
Y2UgaW50ZXJuYWwgewotbmFtZXNwYWNlIHsKLQotLy8gVGhpcyB0ZXN0IGNsb3NlbHkgbWlycm9y
cyBnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL3VuaXR0ZXN0LmNjCi0vLyBleGNlcHQgdGhh
dCBpdCB1c2VzIGV4dGVuc2lvbnMgcmF0aGVyIHRoYW4gcmVndWxhciBmaWVsZHMuCi0KLVRFU1Qo
RXh0ZW5zaW9uU2V0VGVzdCwgRGVmYXVsdHMpIHsKLSAgLy8gQ2hlY2sgdGhhdCBhbGwgZGVmYXVs
dCB2YWx1ZXMgYXJlIHNldCBjb3JyZWN0bHkgaW4gdGhlIGluaXRpYWwgbWVzc2FnZS4KLSAgdW5p
dHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2U7Ci0KLSAgVGVzdFV0aWw6OkV4cGVjdEV4
dGVuc2lvbnNDbGVhcihtZXNzYWdlKTsKLQotICAvLyBNZXNzYWdlcyBzaG91bGQgcmV0dXJuIHBv
aW50ZXJzIHRvIGRlZmF1bHQgaW5zdGFuY2VzIHVudGlsIGZpcnN0IHVzZS4KLSAgLy8gKFRoaXMg
aXMgbm90IGNoZWNrZWQgYnkgRXhwZWN0Q2xlYXIoKSBzaW5jZSBpdCBpcyBub3QgYWN0dWFsbHkg
dHJ1ZSBhZnRlcgotICAvLyB0aGUgZmllbGRzIGhhdmUgYmVlbiBzZXQgYW5kIHRoZW4gY2xlYXJl
ZC4pCi0gIEVYUEVDVF9FUSgmdW5pdHRlc3Q6Ok9wdGlvbmFsR3JvdXBfZXh0ZW5zaW9uOjpkZWZh
dWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsZ3JvdXBfZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9FUSgmdW5pdHRlc3Q6OlRl
c3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZTo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAgICAg
ICAgJm1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfbWVzc2Fn
ZV9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKCZ1bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2U6OmRl
ZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZtZXNzYWdlLkdldEV4dGVuc2lvbigKLSAg
ICAgICAgICAgICAgdW5pdHRlc3Q6Om9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24p
KTsKLSAgRVhQRUNUX0VRKCZ1bml0dGVzdF9pbXBvcnQ6OkltcG9ydE1lc3NhZ2U6OmRlZmF1bHRf
aW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6
b3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uKSk7Ci19Ci0KLVRFU1QoRXh0ZW5zaW9u
U2V0VGVzdCwgQWNjZXNzb3JzKSB7Ci0gIC8vIFNldCBldmVyeSBmaWVsZCB0byBhIHVuaXF1ZSB2
YWx1ZSB0aGVuIGdvIGJhY2sgYW5kIGNoZWNrIGFsbCB0aG9zZQotICAvLyB2YWx1ZXMuCi0gIHVu
aXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxF
eHRlbnNpb25zKCZtZXNzYWdlKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEV4dGVuc2lvbnNTZXQo
bWVzc2FnZSk7Ci0KLSAgVGVzdFV0aWw6Ok1vZGlmeVJlcGVhdGVkRXh0ZW5zaW9ucygmbWVzc2Fn
ZSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RSZXBlYXRlZEV4dGVuc2lvbnNNb2RpZmllZChtZXNzYWdl
KTsKLX0KLQotVEVTVChFeHRlbnNpb25TZXRUZXN0LCBDbGVhcikgewotICAvLyBTZXQgZXZlcnkg
ZmllbGQgdG8gYSB1bmlxdWUgdmFsdWUsIGNsZWFyIHRoZSBtZXNzYWdlLCB0aGVuIGNoZWNrIHRo
YXQKLSAgLy8gaXQgaXMgY2xlYXJlZC4KLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1l
c3NhZ2U7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEV4dGVuc2lvbnMoJm1lc3NhZ2UpOwotICBtZXNz
YWdlLkNsZWFyKCk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RFeHRlbnNpb25zQ2xlYXIobWVzc2FnZSk7
Ci0KLSAgLy8gVW5saWtlIHdpdGggdGhlIGRlZmF1bHRzIHRlc3QsIHdlIGRvIE5PVCBleHBlY3Qg
dGhhdCByZXF1ZXN0aW5nIGVtYmVkZGVkCi0gIC8vIG1lc3NhZ2VzIHdpbGwgcmV0dXJuIGEgcG9p
bnRlciB0byB0aGUgZGVmYXVsdCBpbnN0YW5jZS4gIEluc3RlYWQsIHRoZXkKLSAgLy8gc2hvdWxk
IHJldHVybiB0aGUgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCB3aGVuIG11dGFibGVfYmxhaCgp
IHdhcwotICAvLyBjYWxsZWQuCi0gIEVYUEVDVF9ORSgmdW5pdHRlc3Q6Ok9wdGlvbmFsR3JvdXBf
ZXh0ZW5zaW9uOjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsZ3JvdXBfZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9O
RSgmdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZTo6ZGVmYXVsdF9pbnN0YW5j
ZSgpLAotICAgICAgICAgICAgJm1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25h
bF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pKTsKLSAgRVhQRUNUX05FKCZ1bml0dGVzdDo6Rm9y
ZWlnbk1lc3NhZ2U6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZtZXNzYWdlLkdl
dEV4dGVuc2lvbigKLSAgICAgICAgICAgICAgdW5pdHRlc3Q6Om9wdGlvbmFsX2ZvcmVpZ25fbWVz
c2FnZV9leHRlbnNpb24pKTsKLSAgRVhQRUNUX05FKCZ1bml0dGVzdF9pbXBvcnQ6OkltcG9ydE1l
c3NhZ2U6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZtZXNzYWdlLkdldEV4dGVu
c2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uKSk7Ci0KLSAg
Ly8gTWFrZSBzdXJlIHNldHRpbmcgc3R1ZmYgYWdhaW4gYWZ0ZXIgY2xlYXJpbmcgd29ya3MuICAo
VGhpcyB0YWtlcyBzbGlnaHRseQotICAvLyBkaWZmZXJlbnQgY29kZSBwYXRocyBzaW5jZSB0aGUg
b2JqZWN0cyBhcmUgcmV1c2VkLikKLSAgVGVzdFV0aWw6OlNldEFsbEV4dGVuc2lvbnMoJm1lc3Nh
Z2UpOwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlKTsKLX0KLQot
VEVTVChFeHRlbnNpb25TZXRUZXN0LCBDbGVhck9uZUZpZWxkKSB7Ci0gIC8vIFNldCBldmVyeSBm
aWVsZCB0byBhIHVuaXF1ZSB2YWx1ZSwgdGhlbiBjbGVhciBvbmUgdmFsdWUgYW5kIGluc3VyZSB0
aGF0Ci0gIC8vIG9ubHkgdGhhdCBvbmUgdmFsdWUgaXMgY2xlYXJlZC4KLSAgdW5pdHRlc3Q6OlRl
c3RBbGxFeHRlbnNpb25zIG1lc3NhZ2U7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEV4dGVuc2lvbnMo
Jm1lc3NhZ2UpOwotICBpbnQ2NCBvcmlnaW5hbF92YWx1ZSA9Ci0gICAgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4dGVuc2lvbik7Ci0KLSAgLy8gQ2xlYXIg
dGhlIGZpZWxkIGFuZCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAgYXMgY2xlYXJlZC4KLSAgbWVzc2Fn
ZS5DbGVhckV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW50NjRfZXh0ZW5zaW9uKTsKLSAg
RVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbnQ2
NF9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpvcHRpb25hbF9pbnQ2NF9leHRlbnNpb24pKTsKLQotICAvLyBPdGhlciBhZGphY2VudCBm
aWVsZHMgc2hvdWxkIG5vdCBiZSBjbGVhcmVkLgotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4
dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9U
UlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF91aW50MzJfZXh0ZW5z
aW9uKSk7Ci0KLSAgLy8gTWFrZSBzdXJlIGlmIHdlIHNldCBpdCBhZ2FpbiwgdGhlbiBhbGwgZmll
bGRzIGFyZSBzZXQuCi0gIG1lc3NhZ2UuU2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9p
bnQ2NF9leHRlbnNpb24sIG9yaWdpbmFsX3ZhbHVlKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEV4
dGVuc2lvbnNTZXQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoRXh0ZW5zaW9uU2V0VGVzdCwgU2V0QWxs
b2NhdGVkRXh0ZW5zaW9uKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdl
OwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24oCi0gICAgICB1bml0dGVzdDo6
b3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lvbikpOwotICAvLyBBZGQgYSBleHRlbnNp
b24gdXNpbmcgU2V0QWxsb2NhdGVkRXh0ZW5zaW9uCi0gIHVuaXR0ZXN0OjpGb3JlaWduTWVzc2Fn
ZSogZm9yZWlnbl9tZXNzYWdlID0gbmV3IHVuaXR0ZXN0OjpGb3JlaWduTWVzc2FnZSgpOwotICBt
ZXNzYWdlLlNldEFsbG9jYXRlZEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9t
ZXNzYWdlX2V4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWln
bl9tZXNzYWdlKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24oCi0gICAgICB1
bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lvbikpOwotICBFWFBFQ1Rf
RVEoZm9yZWlnbl9tZXNzYWdlLAotICAgICAgICAgICAgbWVzc2FnZS5NdXRhYmxlRXh0ZW5zaW9u
KAotICAgICAgICAgICAgICAgIHVuaXR0ZXN0OjpvcHRpb25hbF9mb3JlaWduX21lc3NhZ2VfZXh0
ZW5zaW9uKSk7Ci0gIEVYUEVDVF9FUShmb3JlaWduX21lc3NhZ2UsCi0gICAgICAgICAgICAmbWVz
c2FnZS5HZXRFeHRlbnNpb24oCi0gICAgICAgICAgICAgICAgdW5pdHRlc3Q6Om9wdGlvbmFsX2Zv
cmVpZ25fbWVzc2FnZV9leHRlbnNpb24pKTsKLQotICAvLyBTZXRBbGxvY2F0ZWRFeHRlbnNpb24g
c2hvdWxkIGRlbGV0ZSB0aGUgcHJldmlvdXNseSBleGlzdGluZyBleHRlbnNpb24uCi0gIC8vIChX
ZSByZXBseSBvbiB1bml0dGVzdCB0byBjaGVjayBtZW1vcnkgbGVha3MgZm9yIHRoaXMgY2FzZSkK
LSAgbWVzc2FnZS5TZXRBbGxvY2F0ZWRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZvcmVp
Z25fbWVzc2FnZV9leHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
dyB1bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2UoKSk7Ci0KLSAgLy8gU2V0QWxsb2NhdGVkRXh0ZW5z
aW9uIHdpdGggYSBOVUxMIHBhcmFtZXRlciBpcyBlcXVpdmFsZW50IHRvIENsZWFyRXh0ZW5pb24u
Ci0gIG1lc3NhZ2UuU2V0QWxsb2NhdGVkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9mb3Jl
aWduX21lc3NhZ2VfZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKAotICAgICAgdW5pdHRl
c3Q6Om9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24pKTsKLX0KLQotVEVTVChFeHRl
bnNpb25TZXRUZXN0LCBSZWxlYXNlRXh0ZW5zaW9uKSB7Ci0gIHByb3RvMl93aXJlZm9ybWF0X3Vu
aXR0ZXN0OjpUZXN0TWVzc2FnZVNldCBtZXNzYWdlOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5I
YXNFeHRlbnNpb24oCi0gICAgICB1bml0dGVzdDo6VGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xOjpt
ZXNzYWdlX3NldF9leHRlbnNpb24pKTsKLSAgLy8gQWRkIGEgZXh0ZW5zaW9uIHVzaW5nIFNldEFs
bG9jYXRlZEV4dGVuc2lvbgotICB1bml0dGVzdDo6VGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xKiBl
eHRlbnNpb24gPQotICAgICAgbmV3IHVuaXR0ZXN0OjpUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEo
KTsKLSAgbWVzc2FnZS5TZXRBbGxvY2F0ZWRFeHRlbnNpb24oCi0gICAgICB1bml0dGVzdDo6VGVz
dE1lc3NhZ2VTZXRFeHRlbnNpb24xOjptZXNzYWdlX3NldF9leHRlbnNpb24sCi0gICAgICBleHRl
bnNpb24pOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbigKLSAgICAgIHVuaXR0
ZXN0OjpUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjE6Om1lc3NhZ2Vfc2V0X2V4dGVuc2lvbikpOwot
ICAvLyBSZWxlYXNlIHRoZSBleHRlbnNpb24gdXNpbmcgUmVsZWFzZUV4dGVuc2lvbgotICB1bml0
dGVzdDo6VGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xKiByZWxlYXNlZF9leHRlbnNpb24gPQotICAg
ICAgbWVzc2FnZS5SZWxlYXNlRXh0ZW5zaW9uKAotICAgICAgICAgIHVuaXR0ZXN0OjpUZXN0TWVz
c2FnZVNldEV4dGVuc2lvbjE6Om1lc3NhZ2Vfc2V0X2V4dGVuc2lvbik7Ci0gIEVYUEVDVF9FUShl
eHRlbnNpb24sIHJlbGVhc2VkX2V4dGVuc2lvbik7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhh
c0V4dGVuc2lvbigKLSAgICAgIHVuaXR0ZXN0OjpUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjE6Om1l
c3NhZ2Vfc2V0X2V4dGVuc2lvbikpOwotICAvLyBSZWxlYXNlRXh0ZW5zaW9uIHdpbGwgcmV0dXJu
IHRoZSB1bmRlcmx5aW5nIG9iamVjdCBldmVuIGFmdGVyCi0gIC8vIENsZWFyRXh0ZW5zaW9uIGlz
IGNhbGxlZC4KLSAgbWVzc2FnZS5TZXRBbGxvY2F0ZWRFeHRlbnNpb24oCi0gICAgICB1bml0dGVz
dDo6VGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xOjptZXNzYWdlX3NldF9leHRlbnNpb24sCi0gICAg
ICBleHRlbnNpb24pOwotICBtZXNzYWdlLkNsZWFyRXh0ZW5zaW9uKAotICAgICAgdW5pdHRlc3Q6
OlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMTo6bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKTsKLSAgcmVs
ZWFzZWRfZXh0ZW5zaW9uID0gbWVzc2FnZS5SZWxlYXNlRXh0ZW5zaW9uKAotICAgICAgdW5pdHRl
c3Q6OlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMTo6bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKTsKLSAg
RVhQRUNUX1RSVUUocmVsZWFzZWRfZXh0ZW5zaW9uICE9IE5VTEwpOwotICBkZWxldGUgcmVsZWFz
ZWRfZXh0ZW5zaW9uOwotfQotCi0KLVRFU1QoRXh0ZW5zaW9uU2V0VGVzdCwgQ29weUZyb20pIHsK
LSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLQotICBU
ZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucygmbWVzc2FnZTEpOwotICBtZXNzYWdlMi5Db3B5RnJv
bShtZXNzYWdlMSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxFeHRlbnNpb25zU2V0KG1lc3NhZ2Uy
KTsKLSAgbWVzc2FnZTIuQ29weUZyb20obWVzc2FnZTEpOyAgLy8gZXhlcmNpc2UgY29weSB3aGVu
IGZpZWxkcyBhbHJlYWR5IGV4aXN0Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxFeHRlbnNpb25zU2V0
KG1lc3NhZ2UyKTsKLX0KLQotVEVTVChFeHRlbnNpb1NldFRlc3QsIENvcHlGcm9tUGFja2VkKSB7
Ci0gIHVuaXR0ZXN0OjpUZXN0UGFja2VkRXh0ZW5zaW9ucyBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0K
LSAgVGVzdFV0aWw6OlNldFBhY2tlZEV4dGVuc2lvbnMoJm1lc3NhZ2UxKTsKLSAgbWVzc2FnZTIu
Q29weUZyb20obWVzc2FnZTEpOwotICBUZXN0VXRpbDo6RXhwZWN0UGFja2VkRXh0ZW5zaW9uc1Nl
dChtZXNzYWdlMik7Ci0gIG1lc3NhZ2UyLkNvcHlGcm9tKG1lc3NhZ2UxKTsgIC8vIGV4ZXJjaXNl
IGNvcHkgd2hlbiBmaWVsZHMgYWxyZWFkeSBleGlzdAotICBUZXN0VXRpbDo6RXhwZWN0UGFja2Vk
RXh0ZW5zaW9uc1NldChtZXNzYWdlMik7Ci19Ci0KLVRFU1QoRXh0ZW5zaW9uU2V0VGVzdCwgQ29w
eUZyb21VcGNhc3RlZCkgewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTEs
IG1lc3NhZ2UyOwotICBjb25zdCBNZXNzYWdlJiB1cGNhc3RlZF9tZXNzYWdlID0gbWVzc2FnZTE7
Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEV4dGVuc2lvbnMoJm1lc3NhZ2UxKTsKLSAgbWVzc2FnZTIu
Q29weUZyb20odXBjYXN0ZWRfbWVzc2FnZSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxFeHRlbnNp
b25zU2V0KG1lc3NhZ2UyKTsKLSAgLy8gZXhlcmNpc2UgY29weSB3aGVuIGZpZWxkcyBhbHJlYWR5
IGV4aXN0Ci0gIG1lc3NhZ2UyLkNvcHlGcm9tKHVwY2FzdGVkX21lc3NhZ2UpOwotICBUZXN0VXRp
bDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlMik7Ci19Ci0KLVRFU1QoRXh0ZW5zaW9u
U2V0VGVzdCwgU3dhcFdpdGhFbXB0eSkgewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMg
bWVzc2FnZTEsIG1lc3NhZ2UyOwotICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucygmbWVzc2Fn
ZTEpOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RBbGxFeHRlbnNpb25zU2V0KG1lc3NhZ2UxKTsKLSAg
VGVzdFV0aWw6OkV4cGVjdEV4dGVuc2lvbnNDbGVhcihtZXNzYWdlMik7Ci0gIG1lc3NhZ2UxLlN3
YXAoJm1lc3NhZ2UyKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEV4dGVuc2lvbnNTZXQobWVzc2Fn
ZTIpOwotICBUZXN0VXRpbDo6RXhwZWN0RXh0ZW5zaW9uc0NsZWFyKG1lc3NhZ2UxKTsKLX0KLQot
VEVTVChFeHRlbnNpb25TZXRUZXN0LCBTd2FwV2l0aFNlbGYpIHsKLSAgdW5pdHRlc3Q6OlRlc3RB
bGxFeHRlbnNpb25zIG1lc3NhZ2U7Ci0gIFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKCZtZXNz
YWdlKTsKLQotICBUZXN0VXRpbDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlKTsKLSAg
bWVzc2FnZS5Td2FwKCZtZXNzYWdlKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEV4dGVuc2lvbnNT
ZXQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoRXh0ZW5zaW9uU2V0VGVzdCwgU3dhcEV4dGVuc2lvbikg
ewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTE7Ci0gIHVuaXR0ZXN0OjpU
ZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlMjsKLQotICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9u
cygmbWVzc2FnZTEpOwotICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmllbGRzOwot
Ci0gIC8vIFN3YXAgZW1wdHkgZmllbGRzLgotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9u
ID0gbWVzc2FnZTEuR2V0UmVmbGVjdGlvbigpOwotICByZWZsZWN0aW9uLT5Td2FwRmllbGRzKCZt
ZXNzYWdlMSwgJm1lc3NhZ2UyLCBmaWVsZHMpOwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRXh0ZW5z
aW9uc1NldChtZXNzYWdlMSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RFeHRlbnNpb25zQ2xlYXIobWVz
c2FnZTIpOwotCi0gIC8vIFN3YXAgdHdvIGV4dGVuc2lvbnMuCi0gIGZpZWxkcy5wdXNoX2JhY2so
Ci0gICAgICByZWZsZWN0aW9uLT5GaW5kS25vd25FeHRlbnNpb25CeU51bWJlcigxMikpOwotICBm
aWVsZHMucHVzaF9iYWNrKAotICAgICAgcmVmbGVjdGlvbi0+RmluZEtub3duRXh0ZW5zaW9uQnlO
dW1iZXIoMjUpKTsKLSAgcmVmbGVjdGlvbi0+U3dhcEZpZWxkcygmbWVzc2FnZTEsICZtZXNzYWdl
MiwgZmllbGRzKTsKLQotICBFWFBFQ1RfVFJVRShtZXNzYWdlMS5IYXNFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbikpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZTEu
SGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9kb3VibGVfZXh0ZW5zaW9uKSk7Ci0gIEVY
UEVDVF9GQUxTRShtZXNzYWdlMS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2NvcmRf
ZXh0ZW5zaW9uKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UyLkhhc0V4dGVuc2lvbih1bml0
dGVzdDo6b3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uy
Lkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZG91YmxlX2V4dGVuc2lvbikpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlMi5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2NvcmRf
ZXh0ZW5zaW9uKSk7Ci19Ci0KLVRFU1QoRXh0ZW5zaW9uU2V0VGVzdCwgU3dhcEV4dGVuc2lvbldp
dGhFbXB0eSkgewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTE7Ci0gIHVu
aXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlMjsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxF
eHRlbnNpb25zIG1lc3NhZ2UzOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKCZtZXNz
YWdlMyk7Ci0KLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UzLkdldFJl
ZmxlY3Rpb24oKTsKLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGZpZWxkczsKLSAg
cmVmbGVjdGlvbi0+TGlzdEZpZWxkcyhtZXNzYWdlMywgJmZpZWxkcyk7Ci0KLSAgcmVmbGVjdGlv
bi0+U3dhcEZpZWxkcygmbWVzc2FnZTEsICZtZXNzYWdlMiwgZmllbGRzKTsKLQotICBUZXN0VXRp
bDo6RXhwZWN0RXh0ZW5zaW9uc0NsZWFyKG1lc3NhZ2UxKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEV4
dGVuc2lvbnNDbGVhcihtZXNzYWdlMik7Ci19Ci0KLVRFU1QoRXh0ZW5zaW9uU2V0VGVzdCwgU3dh
cEV4dGVuc2lvbkJvdGhGdWxsKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNz
YWdlMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2UyOwotCi0gIFRlc3RV
dGlsOjpTZXRBbGxFeHRlbnNpb25zKCZtZXNzYWdlMSk7Ci0gIFRlc3RVdGlsOjpTZXRBbGxFeHRl
bnNpb25zKCZtZXNzYWdlMik7Ci0KLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1l
c3NhZ2UxLkdldFJlZmxlY3Rpb24oKTsKLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+
IGZpZWxkczsKLSAgcmVmbGVjdGlvbi0+TGlzdEZpZWxkcyhtZXNzYWdlMSwgJmZpZWxkcyk7Ci0K
LSAgcmVmbGVjdGlvbi0+U3dhcEZpZWxkcygmbWVzc2FnZTEsICZtZXNzYWdlMiwgZmllbGRzKTsK
LQotICBUZXN0VXRpbDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlMSk7Ci0gIFRlc3RV
dGlsOjpFeHBlY3RBbGxFeHRlbnNpb25zU2V0KG1lc3NhZ2UyKTsKLX0KLQotVEVTVChFeHRlbnNp
b25TZXRUZXN0LCBBcmVuYVNldEFsbEV4dGVuc2lvbikgewotICA6Omdvb2dsZTo6cHJvdG9idWY6
OkFyZW5hIGFyZW5hMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zKiBtZXNzYWdlMSA9
Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOjpDcmVhdGVNZXNzYWdlPHVuaXR0ZXN0
OjpUZXN0QWxsRXh0ZW5zaW9ucz4oJmFyZW5hMSk7Ci0gIFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNp
b25zKG1lc3NhZ2UxKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEV4dGVuc2lvbnNTZXQoKm1lc3Nh
Z2UxKTsKLX0KLQotVEVTVChFeHRlbnNpb25TZXRUZXN0LCBBcmVuYUNvcHlDb25zdHJ1Y3Rvcikg
ewotICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hIGFyZW5hMTsKLSAgdW5pdHRlc3Q6OlRlc3RB
bGxFeHRlbnNpb25zKiBtZXNzYWdlMSA9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5h
OjpDcmVhdGVNZXNzYWdlPHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucz4oJmFyZW5hMSk7Ci0g
IFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKG1lc3NhZ2UxKTsKLSAgdW5pdHRlc3Q6OlRlc3RB
bGxFeHRlbnNpb25zIG1lc3NhZ2UyKCptZXNzYWdlMSk7Ci0gIGFyZW5hMS5SZXNldCgpOwotICBU
ZXN0VXRpbDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlMik7Ci19Ci0KLVRFU1QoRXh0
ZW5zaW9uU2V0VGVzdCwgQXJlbmFNZXJnZUZyb20pIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpB
cmVuYSBhcmVuYTE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyogbWVzc2FnZTEgPQot
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6Q3JlYXRlTWVzc2FnZTx1bml0dGVzdDo6
VGVzdEFsbEV4dGVuc2lvbnM+KCZhcmVuYTEpOwotICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9u
cyhtZXNzYWdlMSk7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlMjsKLSAg
bWVzc2FnZTIuTWVyZ2VGcm9tKCptZXNzYWdlMSk7Ci0gIGFyZW5hMS5SZXNldCgpOwotICBUZXN0
VXRpbDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlMik7Ci19Ci0KLVRFU1QoRXh0ZW5z
aW9uU2V0VGVzdCwgQXJlbmFTZXRBbGxvY2F0ZWRNZXNzYWdlQW5kUmVsZWFzZSkgewotICA6Omdv
b2dsZTo6cHJvdG9idWY6OkFyZW5hIGFyZW5hOwotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lv
bnMqIG1lc3NhZ2UgPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6Q3JlYXRlTWVz
c2FnZTx1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnM+KCZhcmVuYSk7Ci0gIEVYUEVDVF9GQUxT
RShtZXNzYWdlLT5IYXNFeHRlbnNpb24oCi0gICAgICB1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWln
bl9tZXNzYWdlX2V4dGVuc2lvbikpOwotICAvLyBBZGQgYSBleHRlbnNpb24gdXNpbmcgU2V0QWxs
b2NhdGVkRXh0ZW5zaW9uCi0gIHVuaXR0ZXN0OjpGb3JlaWduTWVzc2FnZSogZm9yZWlnbl9tZXNz
YWdlID0gbmV3IHVuaXR0ZXN0OjpGb3JlaWduTWVzc2FnZSgpOwotICBtZXNzYWdlLT5TZXRBbGxv
Y2F0ZWRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNp
b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduX21lc3NhZ2UpOwot
ICAvLyBmb3JlaWduX21lc3NhZ2UgaXMgbm93IG93bmVkIGJ5IHRoZSBhcmVuYS4KLSAgRVhQRUNU
X0VRKGZvcmVpZ25fbWVzc2FnZSwKLSAgICAgICAgICAgIG1lc3NhZ2UtPk11dGFibGVFeHRlbnNp
b24oCi0gICAgICAgICAgICAgICAgdW5pdHRlc3Q6Om9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZV9l
eHRlbnNpb24pKTsKLQotICAvLyBVbmRlcmx5aW5nIG1lc3NhZ2UgaXMgY29waWVkLCBhbmQgcmV0
dXJuZWQuCi0gIHVuaXR0ZXN0OjpGb3JlaWduTWVzc2FnZSogcmVsZWFzZWRfbWVzc2FnZSA9IG1l
c3NhZ2UtPlJlbGVhc2VFeHRlbnNpb24oCi0gICAgICB1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWln
bl9tZXNzYWdlX2V4dGVuc2lvbik7Ci0gIGRlbGV0ZSByZWxlYXNlZF9tZXNzYWdlOwotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS0+SGFzRXh0ZW5zaW9uKAotICAgICAgdW5pdHRlc3Q6Om9wdGlvbmFs
X2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24pKTsKLX0KLQotVEVTVChFeHRlbnNpb25TZXRUZXN0
LCBTd2FwRXh0ZW5zaW9uQm90aEZ1bGxXaXRoQXJlbmEpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpBcmVuYSBhcmVuYTE7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmE+IGFyZW5hMihuZXcgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSgpKTsK
LQotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMqIG1lc3NhZ2UxID0KLSAgICAgIEFyZW5h
OjpDcmVhdGVNZXNzYWdlPHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucz4oJmFyZW5hMSk7Ci0g
IHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyogbWVzc2FnZTIgPQotICAgICAgQXJlbmE6OkNy
ZWF0ZU1lc3NhZ2U8dW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zPihhcmVuYTIuZ2V0KCkpOwot
Ci0gIFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKG1lc3NhZ2UxKTsKLSAgVGVzdFV0aWw6OlNl
dEFsbEV4dGVuc2lvbnMobWVzc2FnZTIpOwotICBtZXNzYWdlMS0+U2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpvcHRpb25hbF9pbnQzMl9leHRlbnNpb24sIDEpOwotICBtZXNzYWdlMi0+U2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbnQzMl9leHRlbnNpb24sIDIpOwotICBtZXNzYWdlMS0+
U3dhcChtZXNzYWdlMik7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlMS0+R2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpvcHRpb25hbF9pbnQzMl9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3Nh
Z2UyLT5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbikpOwot
ICAvLyBSZS1zZXQgdGhlIG9yaWdpbmFsIHZhbHVlcyBzbyBFeHBlY3RBbGxFeHRlbnNpb25zU2V0
IGlzIGhhcHB5LgotICBtZXNzYWdlMS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9p
bnQzMl9leHRlbnNpb24sIDEwMSk7Ci0gIG1lc3NhZ2UyLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6
Om9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbiwgMTAxKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEV4
dGVuc2lvbnNTZXQoKm1lc3NhZ2UxKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEV4dGVuc2lvbnNT
ZXQoKm1lc3NhZ2UyKTsKLSAgYXJlbmEyLnJlc2V0KE5VTEwpOwotICBUZXN0VXRpbDo6RXhwZWN0
QWxsRXh0ZW5zaW9uc1NldCgqbWVzc2FnZTEpOwotICAvLyBUZXN0IGNvcm5lciBjYXNlcywgd2hl
biBvbmUgaXMgZW1wdHkgYW5kIG90aGVyIGlzIG5vdC4KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpB
cmVuYSBhcmVuYTMsIGFyZW5hNDsKLQotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMqIG1l
c3NhZ2UzID0KLSAgICAgIEFyZW5hOjpDcmVhdGVNZXNzYWdlPHVuaXR0ZXN0OjpUZXN0QWxsRXh0
ZW5zaW9ucz4oJmFyZW5hMyk7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyogbWVzc2Fn
ZTQgPQotICAgICAgQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8dW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNp
b25zPigmYXJlbmE0KTsKLSAgVGVzdFV0aWw6OlNldEFsbEV4dGVuc2lvbnMobWVzc2FnZTMpOwot
ICBtZXNzYWdlMy0+U3dhcChtZXNzYWdlNCk7Ci0gIGFyZW5hMy5SZXNldCgpOwotICBUZXN0VXRp
bDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldCgqbWVzc2FnZTQpOwotfQotCi1URVNUKEV4dGVuc2lv
blNldFRlc3QsIFN3YXBGaWVsZHNPZkV4dGVuc2lvbkJvdGhGdWxsV2l0aEFyZW5hKSB7Ci0gIGdv
b2dsZTo6cHJvdG9idWY6OkFyZW5hIGFyZW5hMTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEq
IGFyZW5hMiA9IG5ldyA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKCk7Ci0KLSAgdW5pdHRlc3Q6
OlRlc3RBbGxFeHRlbnNpb25zKiBtZXNzYWdlMSA9Ci0gICAgICBBcmVuYTo6Q3JlYXRlTWVzc2Fn
ZTx1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnM+KCZhcmVuYTEpOwotICB1bml0dGVzdDo6VGVz
dEFsbEV4dGVuc2lvbnMqIG1lc3NhZ2UyID0KLSAgICAgIEFyZW5hOjpDcmVhdGVNZXNzYWdlPHVu
aXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucz4oYXJlbmEyKTsKLQotICBUZXN0VXRpbDo6U2V0QWxs
RXh0ZW5zaW9ucyhtZXNzYWdlMSk7Ci0gIFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKG1lc3Nh
Z2UyKTsKLQotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZTEtPkdldFJl
ZmxlY3Rpb24oKTsKLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGZpZWxkczsKLSAg
cmVmbGVjdGlvbi0+TGlzdEZpZWxkcygqbWVzc2FnZTEsICZmaWVsZHMpOwotICByZWZsZWN0aW9u
LT5Td2FwRmllbGRzKG1lc3NhZ2UxLCBtZXNzYWdlMiwgZmllbGRzKTsKLSAgVGVzdFV0aWw6OkV4
cGVjdEFsbEV4dGVuc2lvbnNTZXQoKm1lc3NhZ2UxKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEV4
dGVuc2lvbnNTZXQoKm1lc3NhZ2UyKTsKLSAgZGVsZXRlIGFyZW5hMjsKLSAgVGVzdFV0aWw6OkV4
cGVjdEFsbEV4dGVuc2lvbnNTZXQoKm1lc3NhZ2UxKTsKLX0KLQotVEVTVChFeHRlbnNpb25TZXRU
ZXN0LCBTd2FwRXh0ZW5zaW9uV2l0aFNlbGYpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNp
b25zIG1lc3NhZ2UxOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKCZtZXNzYWdlMSk7
Ci0KLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGZpZWxkczsKLSAgY29uc3QgUmVm
bGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UxLkdldFJlZmxlY3Rpb24oKTsKLSAgcmVmbGVj
dGlvbi0+TGlzdEZpZWxkcyhtZXNzYWdlMSwgJmZpZWxkcyk7Ci0gIHJlZmxlY3Rpb24tPlN3YXBG
aWVsZHMoJm1lc3NhZ2UxLCAmbWVzc2FnZTEsIGZpZWxkcyk7Ci0KLSAgVGVzdFV0aWw6OkV4cGVj
dEFsbEV4dGVuc2lvbnNTZXQobWVzc2FnZTEpOwotfQotCi1URVNUKEV4dGVuc2lvblNldFRlc3Qs
IFNlcmlhbGl6YXRpb25Ub0FycmF5KSB7Ci0gIC8vIFNlcmlhbGl6ZSBhcyBUZXN0QWxsRXh0ZW5z
aW9ucyBhbmQgcGFyc2UgYXMgVGVzdEFsbFR5cGVzIHRvIGluc3VyZSB3aXJlCi0gIC8vIGNvbXBh
dGliaWxpdHkgb2YgZXh0ZW5zaW9ucy4KLSAgLy8KLSAgLy8gVGhpcyBjaGVja3Mgc2VyaWFsaXph
dGlvbiB0byBhIGZsYXQgYXJyYXkgYnkgZXhwbGljaXRseSByZXNlcnZpbmcgc3BhY2UgaW4KLSAg
Ly8gdGhlIHN0cmluZyBhbmQgY2FsbGluZyB0aGUgZ2VuZXJhdGVkIG1lc3NhZ2UncwotICAvLyBT
ZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5LgotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVu
c2lvbnMgc291cmNlOwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIGRlc3RpbmF0aW9uOwotICBU
ZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucygmc291cmNlKTsKLSAgaW50IHNpemUgPSBzb3VyY2Uu
Qnl0ZVNpemUoKTsKLSAgc3RyaW5nIGRhdGE7Ci0gIGRhdGEucmVzaXplKHNpemUpOwotICB1aW50
OCogdGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KHN0cmluZ19hc19hcnJheSgmZGF0
YSkpOwotICB1aW50OCogZW5kID0gc291cmNlLlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJy
YXkodGFyZ2V0KTsKLSAgRVhQRUNUX0VRKHNpemUsIGVuZCAtIHRhcmdldCk7Ci0gIEVYUEVDVF9U
UlVFKGRlc3RpbmF0aW9uLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gIFRlc3RVdGlsOjpFeHBl
Y3RBbGxGaWVsZHNTZXQoZGVzdGluYXRpb24pOwotfQotCi1URVNUKEV4dGVuc2lvblNldFRlc3Qs
IFNlcmlhbGl6YXRpb25Ub1N0cmVhbSkgewotICAvLyBTZXJpYWxpemUgYXMgVGVzdEFsbEV4dGVu
c2lvbnMgYW5kIHBhcnNlIGFzIFRlc3RBbGxUeXBlcyB0byBpbnN1cmUgd2lyZQotICAvLyBjb21w
YXRpYmlsaXR5IG9mIGV4dGVuc2lvbnMuCi0gIC8vCi0gIC8vIFRoaXMgY2hlY2tzIHNlcmlhbGl6
YXRpb24gdG8gYW4gb3V0cHV0IHN0cmVhbSBieSBjcmVhdGluZyBhbiBhcnJheSBvdXRwdXQKLSAg
Ly8gc3RyZWFtIHRoYXQgY2FuIG9ubHkgYnVmZmVyIDEgYnl0ZSBhdCBhIHRpbWUgLSB0aGlzIHBy
ZXZlbnRzIHRoZSBtZXNzYWdlCi0gIC8vIGZyb20gZXZlciBqdW1waW5nIHRvIHRoZSBmYXN0IHBh
dGgsIGVuc3VyaW5nIHRoYXQgc2VyaWFsaXphdGlvbiBoYXBwZW5zIHZpYQotICAvLyB0aGUgQ29k
ZWRPdXRwdXRTdHJlYW0uCi0gIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBzb3VyY2U7Ci0g
IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgZGVzdGluYXRpb247Ci0gIFRlc3RVdGlsOjpTZXRBbGxF
eHRlbnNpb25zKCZzb3VyY2UpOwotICBpbnQgc2l6ZSA9IHNvdXJjZS5CeXRlU2l6ZSgpOwotICBz
dHJpbmcgZGF0YTsKLSAgZGF0YS5yZXNpemUoc2l6ZSk7Ci0gIHsKLSAgICBpbzo6QXJyYXlPdXRw
dXRTdHJlYW0gYXJyYXlfc3RyZWFtKHN0cmluZ19hc19hcnJheSgmZGF0YSksIHNpemUsIDEpOwot
ICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKCZhcnJheV9zdHJlYW0pOwot
ICAgIHNvdXJjZS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoJm91dHB1dF9zdHJlYW0pOwotICAg
IEFTU0VSVF9GQUxTRShvdXRwdXRfc3RyZWFtLkhhZEVycm9yKCkpOwotICB9Ci0gIEVYUEVDVF9U
UlVFKGRlc3RpbmF0aW9uLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gIFRlc3RVdGlsOjpFeHBl
Y3RBbGxGaWVsZHNTZXQoZGVzdGluYXRpb24pOwotfQotCi1URVNUKEV4dGVuc2lvblNldFRlc3Qs
IFBhY2tlZFNlcmlhbGl6YXRpb25Ub0FycmF5KSB7Ci0gIC8vIFNlcmlhbGl6ZSBhcyBUZXN0UGFj
a2VkRXh0ZW5zaW9ucyBhbmQgcGFyc2UgYXMgVGVzdFBhY2tlZFR5cGVzIHRvIGluc3VyZQotICAv
LyB3aXJlIGNvbXBhdGliaWxpdHkgb2YgZXh0ZW5zaW9ucy4KLSAgLy8KLSAgLy8gVGhpcyBjaGVj
a3Mgc2VyaWFsaXphdGlvbiB0byBhIGZsYXQgYXJyYXkgYnkgZXhwbGljaXRseSByZXNlcnZpbmcg
c3BhY2UgaW4KLSAgLy8gdGhlIHN0cmluZyBhbmQgY2FsbGluZyB0aGUgZ2VuZXJhdGVkIG1lc3Nh
Z2UncwotICAvLyBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5LgotICB1bml0dGVzdDo6
VGVzdFBhY2tlZEV4dGVuc2lvbnMgc291cmNlOwotICB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVz
IGRlc3RpbmF0aW9uOwotICBUZXN0VXRpbDo6U2V0UGFja2VkRXh0ZW5zaW9ucygmc291cmNlKTsK
LSAgaW50IHNpemUgPSBzb3VyY2UuQnl0ZVNpemUoKTsKLSAgc3RyaW5nIGRhdGE7Ci0gIGRhdGEu
cmVzaXplKHNpemUpOwotICB1aW50OCogdGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+
KHN0cmluZ19hc19hcnJheSgmZGF0YSkpOwotICB1aW50OCogZW5kID0gc291cmNlLlNlcmlhbGl6
ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkodGFyZ2V0KTsKLSAgRVhQRUNUX0VRKHNpemUsIGVuZCAt
IHRhcmdldCk7Ci0gIEVYUEVDVF9UUlVFKGRlc3RpbmF0aW9uLlBhcnNlRnJvbVN0cmluZyhkYXRh
KSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RQYWNrZWRGaWVsZHNTZXQoZGVzdGluYXRpb24pOwotfQot
Ci1URVNUKEV4dGVuc2lvblNldFRlc3QsIFBhY2tlZFNlcmlhbGl6YXRpb25Ub1N0cmVhbSkgewot
ICAvLyBTZXJpYWxpemUgYXMgVGVzdFBhY2tlZEV4dGVuc2lvbnMgYW5kIHBhcnNlIGFzIFRlc3RQ
YWNrZWRUeXBlcyB0byBpbnN1cmUKLSAgLy8gd2lyZSBjb21wYXRpYmlsaXR5IG9mIGV4dGVuc2lv
bnMuCi0gIC8vCi0gIC8vIFRoaXMgY2hlY2tzIHNlcmlhbGl6YXRpb24gdG8gYW4gb3V0cHV0IHN0
cmVhbSBieSBjcmVhdGluZyBhbiBhcnJheSBvdXRwdXQKLSAgLy8gc3RyZWFtIHRoYXQgY2FuIG9u
bHkgYnVmZmVyIDEgYnl0ZSBhdCBhIHRpbWUgLSB0aGlzIHByZXZlbnRzIHRoZSBtZXNzYWdlCi0g
IC8vIGZyb20gZXZlciBqdW1waW5nIHRvIHRoZSBmYXN0IHBhdGgsIGVuc3VyaW5nIHRoYXQgc2Vy
aWFsaXphdGlvbiBoYXBwZW5zIHZpYQotICAvLyB0aGUgQ29kZWRPdXRwdXRTdHJlYW0uCi0gIHVu
aXR0ZXN0OjpUZXN0UGFja2VkRXh0ZW5zaW9ucyBzb3VyY2U7Ci0gIHVuaXR0ZXN0OjpUZXN0UGFj
a2VkVHlwZXMgZGVzdGluYXRpb247Ci0gIFRlc3RVdGlsOjpTZXRQYWNrZWRFeHRlbnNpb25zKCZz
b3VyY2UpOwotICBpbnQgc2l6ZSA9IHNvdXJjZS5CeXRlU2l6ZSgpOwotICBzdHJpbmcgZGF0YTsK
LSAgZGF0YS5yZXNpemUoc2l6ZSk7Ci0gIHsKLSAgICBpbzo6QXJyYXlPdXRwdXRTdHJlYW0gYXJy
YXlfc3RyZWFtKHN0cmluZ19hc19hcnJheSgmZGF0YSksIHNpemUsIDEpOwotICAgIGlvOjpDb2Rl
ZE91dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKCZhcnJheV9zdHJlYW0pOwotICAgIHNvdXJjZS5T
ZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoJm91dHB1dF9zdHJlYW0pOwotICAgIEFTU0VSVF9GQUxT
RShvdXRwdXRfc3RyZWFtLkhhZEVycm9yKCkpOwotICB9Ci0gIEVYUEVDVF9UUlVFKGRlc3RpbmF0
aW9uLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RQYWNrZWRGaWVs
ZHNTZXQoZGVzdGluYXRpb24pOwotfQotCi1URVNUKEV4dGVuc2lvblNldFRlc3QsIFBhcnNpbmcp
IHsKLSAgLy8gU2VyaWFsaXplIGFzIFRlc3RBbGxUeXBlcyBhbmQgcGFyc2UgYXMgVGVzdEFsbEV4
dGVuc2lvbnMuCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgc291cmNlOwotICB1bml0dGVzdDo6
VGVzdEFsbEV4dGVuc2lvbnMgZGVzdGluYXRpb247Ci0gIHN0cmluZyBkYXRhOwotCi0gIFRlc3RV
dGlsOjpTZXRBbGxGaWVsZHMoJnNvdXJjZSk7Ci0gIHNvdXJjZS5TZXJpYWxpemVUb1N0cmluZygm
ZGF0YSk7Ci0gIEVYUEVDVF9UUlVFKGRlc3RpbmF0aW9uLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7
Ci0gIFRlc3RVdGlsOjpTZXRPbmVvZkZpZWxkcygmZGVzdGluYXRpb24pOwotICBUZXN0VXRpbDo6
RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChkZXN0aW5hdGlvbik7Ci19Ci0KLVRFU1QoRXh0ZW5zaW9u
U2V0VGVzdCwgUGFja2VkUGFyc2luZykgewotICAvLyBTZXJpYWxpemUgYXMgVGVzdFBhY2tlZFR5
cGVzIGFuZCBwYXJzZSBhcyBUZXN0UGFja2VkRXh0ZW5zaW9ucy4KLSAgdW5pdHRlc3Q6OlRlc3RQ
YWNrZWRUeXBlcyBzb3VyY2U7Ci0gIHVuaXR0ZXN0OjpUZXN0UGFja2VkRXh0ZW5zaW9ucyBkZXN0
aW5hdGlvbjsKLSAgc3RyaW5nIGRhdGE7Ci0KLSAgVGVzdFV0aWw6OlNldFBhY2tlZEZpZWxkcygm
c291cmNlKTsKLSAgc291cmNlLlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRhKTsKLSAgRVhQRUNUX1RS
VUUoZGVzdGluYXRpb24uUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgVGVzdFV0aWw6OkV4cGVj
dFBhY2tlZEV4dGVuc2lvbnNTZXQoZGVzdGluYXRpb24pOwotfQotCi1URVNUKEV4dGVuc2lvblNl
dFRlc3QsIFBhY2tlZFRvVW5wYWNrZWRQYXJzaW5nKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UGFja2Vk
VHlwZXMgc291cmNlOwotICB1bml0dGVzdDo6VGVzdFVucGFja2VkRXh0ZW5zaW9ucyBkZXN0aW5h
dGlvbjsKLSAgc3RyaW5nIGRhdGE7Ci0KLSAgVGVzdFV0aWw6OlNldFBhY2tlZEZpZWxkcygmc291
cmNlKTsKLSAgc291cmNlLlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRhKTsKLSAgRVhQRUNUX1RSVUUo
ZGVzdGluYXRpb24uUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgVGVzdFV0aWw6OkV4cGVjdFVu
cGFja2VkRXh0ZW5zaW9uc1NldChkZXN0aW5hdGlvbik7Ci0KLSAgLy8gUmVzZXJpYWxpemUKLSAg
dW5pdHRlc3Q6OlRlc3RVbnBhY2tlZFR5cGVzIHVucGFja2VkOwotICBUZXN0VXRpbDo6U2V0VW5w
YWNrZWRGaWVsZHMoJnVucGFja2VkKTsKLSAgRVhQRUNUX1RSVUUodW5wYWNrZWQuU2VyaWFsaXpl
QXNTdHJpbmcoKSA9PSBkZXN0aW5hdGlvbi5TZXJpYWxpemVBc1N0cmluZygpKTsKLQotICAvLyBN
YWtlIHN1cmUgd2UgY2FuIGFkZCBleHRlbnNpb25zLgotICBkZXN0aW5hdGlvbi5BZGRFeHRlbnNp
b24odW5pdHRlc3Q6OnVucGFja2VkX2ludDMyX2V4dGVuc2lvbiwgMSk7Ci0gIGRlc3RpbmF0aW9u
LkFkZEV4dGVuc2lvbih1bml0dGVzdDo6dW5wYWNrZWRfZW51bV9leHRlbnNpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm90b2J1Zl91bml0dGVzdDo6Rk9SRUlHTl9CQVIpOwotfQot
Ci1URVNUKEV4dGVuc2lvblNldFRlc3QsIFVucGFja2VkVG9QYWNrZWRQYXJzaW5nKSB7Ci0gIHVu
aXR0ZXN0OjpUZXN0VW5wYWNrZWRUeXBlcyBzb3VyY2U7Ci0gIHVuaXR0ZXN0OjpUZXN0UGFja2Vk
RXh0ZW5zaW9ucyBkZXN0aW5hdGlvbjsKLSAgc3RyaW5nIGRhdGE7Ci0KLSAgVGVzdFV0aWw6OlNl
dFVucGFja2VkRmllbGRzKCZzb3VyY2UpOwotICBzb3VyY2UuU2VyaWFsaXplVG9TdHJpbmcoJmRh
dGEpOwotICBFWFBFQ1RfVFJVRShkZXN0aW5hdGlvbi5QYXJzZUZyb21TdHJpbmcoZGF0YSkpOwot
ICBUZXN0VXRpbDo6RXhwZWN0UGFja2VkRXh0ZW5zaW9uc1NldChkZXN0aW5hdGlvbik7Ci0KLSAg
Ly8gUmVzZXJpYWxpemUKLSAgdW5pdHRlc3Q6OlRlc3RQYWNrZWRUeXBlcyBwYWNrZWQ7Ci0gIFRl
c3RVdGlsOjpTZXRQYWNrZWRGaWVsZHMoJnBhY2tlZCk7Ci0gIEVYUEVDVF9UUlVFKHBhY2tlZC5T
ZXJpYWxpemVBc1N0cmluZygpID09IGRlc3RpbmF0aW9uLlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwot
Ci0gIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gYWRkIGV4dGVuc2lvbnMuCi0gIGRlc3RpbmF0aW9uLkFk
ZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ludDMyX2V4dGVuc2lvbiwgMSk7Ci0gIGRlc3Rp
bmF0aW9uLkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2VudW1fZXh0ZW5zaW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9idWZfdW5pdHRlc3Q6OkZPUkVJR05fQkFSKTsK
LX0KLQotVEVTVChFeHRlbnNpb25TZXRUZXN0LCBJc0luaXRpYWxpemVkKSB7Ci0gIC8vIFRlc3Qg
dGhhdCBJc0luaXRpYWxpemVkKCkgcmV0dXJucyBmYWxzZSBpZiByZXF1aXJlZCBmaWVsZHMgaW4g
bmVzdGVkCi0gIC8vIGV4dGVuc2lvbnMgYXJlIG1pc3NpbmcuCi0gIHVuaXR0ZXN0OjpUZXN0QWxs
RXh0ZW5zaW9ucyBtZXNzYWdlOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSXNJbml0aWFsaXpl
ZCgpKTsKLQotICBtZXNzYWdlLk11dGFibGVFeHRlbnNpb24odW5pdHRlc3Q6OlRlc3RSZXF1aXJl
ZDo6c2luZ2xlKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSXNJbml0aWFsaXplZCgpKTsKLQot
ICBtZXNzYWdlLk11dGFibGVFeHRlbnNpb24odW5pdHRlc3Q6OlRlc3RSZXF1aXJlZDo6c2luZ2xl
KS0+c2V0X2EoMSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLklzSW5pdGlhbGl6ZWQoKSk7Ci0g
IG1lc3NhZ2UuTXV0YWJsZUV4dGVuc2lvbih1bml0dGVzdDo6VGVzdFJlcXVpcmVkOjpzaW5nbGUp
LT5zZXRfYigyKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSXNJbml0aWFsaXplZCgpKTsKLSAg
bWVzc2FnZS5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQ6OnNpbmdsZSkt
PnNldF9jKDMpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLklzSW5pdGlhbGl6ZWQoKSk7Ci0KLSAg
bWVzc2FnZS5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OlRlc3RSZXF1aXJlZDo6bXVsdGkpOwotICBF
WFBFQ1RfRkFMU0UobWVzc2FnZS5Jc0luaXRpYWxpemVkKCkpOwotCi0gIG1lc3NhZ2UuTXV0YWJs
ZUV4dGVuc2lvbih1bml0dGVzdDo6VGVzdFJlcXVpcmVkOjptdWx0aSwgMCktPnNldF9hKDEpOwot
ICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5Jc0luaXRpYWxpemVkKCkpOwotICBtZXNzYWdlLk11dGFi
bGVFeHRlbnNpb24odW5pdHRlc3Q6OlRlc3RSZXF1aXJlZDo6bXVsdGksIDApLT5zZXRfYigyKTsK
LSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSXNJbml0aWFsaXplZCgpKTsKLSAgbWVzc2FnZS5NdXRh
YmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQ6Om11bHRpLCAwKS0+c2V0X2MoMyk7
Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSXNJbml0aWFsaXplZCgpKTsKLX0KLQotVEVTVChFeHRl
bnNpb25TZXRUZXN0LCBNdXRhYmxlU3RyaW5nKSB7Ci0gIC8vIFRlc3QgdGhlIG11dGFibGUgc3Ry
aW5nIGFjY2Vzc29ycy4KLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2U7Ci0K
LSAgbWVzc2FnZS5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9zdHJpbmdfZXh0
ZW5zaW9uKS0+YXNzaWduKCJmb28iKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX3N0cmluZ19leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKCJm
b28iLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfc3RyaW5nX2V4dGVu
c2lvbikpOwotCi0gIG1lc3NhZ2UuQWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJp
bmdfZXh0ZW5zaW9uKS0+YXNzaWduKCJiYXIiKTsKLSAgQVNTRVJUX0VRKDEsIG1lc3NhZ2UuRXh0
ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbikpOwotICBFWFBF
Q1RfRVEoImJhciIsCi0gICAgICAgICAgICBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6
cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbiwgMCkpOwotfQotCi1URVNUKEV4dGVuc2lvblNldFRl
c3QsIFNwYWNlVXNlZEV4Y2x1ZGluZ1NlbGYpIHsKLSAgLy8gU2NhbGFyIHByaW1pdGl2ZSBleHRl
bnNpb25zIHNob3VsZCBpbmNyZWFzZSB0aGUgZXh0ZW5zaW9uIHNldCBzaXplIGJ5IGEKLSAgLy8g
bWluaW11bSBvZiB0aGUgc2l6ZSBvZiB0aGUgcHJpbWl0aXZlIHR5cGUuCi0jZGVmaW5lIFRFU1Rf
U0NBTEFSX0VYVEVOU0lPTlNfU1BBQ0VfVVNFRCh0eXBlLCB2YWx1ZSkgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdW5pdHRlc3Q6OlRlc3RBbGxF
eHRlbnNpb25zIG1lc3NhZ2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY29uc3QgaW50IGJhc2Vfc2l6ZSA9IG1lc3NhZ2UuU3BhY2VVc2VkKCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWVzc2FnZS5TZXRFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsXyMjdHlwZSMjX2V4dGVuc2lvbiwgdmFsdWUpOyAgICAgICBcCi0gICAgaW50
IG1pbl9leHBlY3RlZF9zaXplID0gYmFzZV9zaXplICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIHNpemVvZihtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6b3B0aW9uYWxfIyN0eXBlIyNfZXh0ZW5zaW9uKSk7ICBcCi0gICAgRVhQRUNUX0xFKG1p
bl9leHBlY3RlZF9zaXplLCBtZXNzYWdlLlNwYWNlVXNlZCgpKTsgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSAgVEVTVF9TQ0FMQVJfRVhURU5TSU9OU19TUEFDRV9V
U0VEKGludDMyICAgLCAxMDEpOwotICBURVNUX1NDQUxBUl9FWFRFTlNJT05TX1NQQUNFX1VTRUQo
aW50NjQgICAsIDEwMik7Ci0gIFRFU1RfU0NBTEFSX0VYVEVOU0lPTlNfU1BBQ0VfVVNFRCh1aW50
MzIgICwgMTAzKTsKLSAgVEVTVF9TQ0FMQVJfRVhURU5TSU9OU19TUEFDRV9VU0VEKHVpbnQ2NCAg
LCAxMDQpOwotICBURVNUX1NDQUxBUl9FWFRFTlNJT05TX1NQQUNFX1VTRUQoc2ludDMyICAsIDEw
NSk7Ci0gIFRFU1RfU0NBTEFSX0VYVEVOU0lPTlNfU1BBQ0VfVVNFRChzaW50NjQgICwgMTA2KTsK
LSAgVEVTVF9TQ0FMQVJfRVhURU5TSU9OU19TUEFDRV9VU0VEKGZpeGVkMzIgLCAxMDcpOwotICBU
RVNUX1NDQUxBUl9FWFRFTlNJT05TX1NQQUNFX1VTRUQoZml4ZWQ2NCAsIDEwOCk7Ci0gIFRFU1Rf
U0NBTEFSX0VYVEVOU0lPTlNfU1BBQ0VfVVNFRChzZml4ZWQzMiwgMTA5KTsKLSAgVEVTVF9TQ0FM
QVJfRVhURU5TSU9OU19TUEFDRV9VU0VEKHNmaXhlZDY0LCAxMTApOwotICBURVNUX1NDQUxBUl9F
WFRFTlNJT05TX1NQQUNFX1VTRUQoZmxvYXQgICAsIDExMSk7Ci0gIFRFU1RfU0NBTEFSX0VYVEVO
U0lPTlNfU1BBQ0VfVVNFRChkb3VibGUgICwgMTEyKTsKLSAgVEVTVF9TQ0FMQVJfRVhURU5TSU9O
U19TUEFDRV9VU0VEKGJvb2wgICAgLCB0cnVlKTsKLSN1bmRlZiBURVNUX1NDQUxBUl9FWFRFTlNJ
T05TX1NQQUNFX1VTRUQKLSAgewotICAgIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNz
YWdlOwotICAgIGNvbnN0IGludCBiYXNlX3NpemUgPSBtZXNzYWdlLlNwYWNlVXNlZCgpOwotICAg
IG1lc3NhZ2UuU2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfZW51bV9leHRl
bnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6
Rk9PKTsKLSAgICBpbnQgbWluX2V4cGVjdGVkX3NpemUgPSBiYXNlX3NpemUgKwotICAgICAgICBz
aXplb2YobWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX25lc3RlZF9lbnVt
X2V4dGVuc2lvbikpOwotICAgIEVYUEVDVF9MRShtaW5fZXhwZWN0ZWRfc2l6ZSwgbWVzc2FnZS5T
cGFjZVVzZWQoKSk7Ci0gIH0KLSAgewotICAgIC8vIFN0cmluZ3MgbWF5IGNhdXNlIGV4dHJhIGFs
bG9jYXRpb25zIGRlcGVuZGluZyBvbiB0aGVpciBsZW5ndGg7IGVuc3VyZQotICAgIC8vIHRoYXQg
Z2V0cyBpbmNsdWRlZCBhcyB3ZWxsLgotICAgIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBt
ZXNzYWdlOwotICAgIGNvbnN0IGludCBiYXNlX3NpemUgPSBtZXNzYWdlLlNwYWNlVXNlZCgpOwot
ICAgIGNvbnN0IHN0cmluZyBzKCJ0aGlzIGlzIGEgZmFpcmx5IGxhcmdlIHN0cmluZyB0aGF0IHdp
bGwgY2F1c2Ugc29tZSAiCi0gICAgICAgICAgICAgICAgICAgImFsbG9jYXRpb24gaW4gb3JkZXIg
dG8gc3RvcmUgaXQgaW4gdGhlIGV4dGVuc2lvbiIpOwotICAgIG1lc3NhZ2UuU2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpvcHRpb25hbF9zdHJpbmdfZXh0ZW5zaW9uLCBzKTsKLSAgICBpbnQgbWluX2V4
cGVjdGVkX3NpemUgPSBiYXNlX3NpemUgKyBzLmxlbmd0aCgpOwotICAgIEVYUEVDVF9MRShtaW5f
ZXhwZWN0ZWRfc2l6ZSwgbWVzc2FnZS5TcGFjZVVzZWQoKSk7Ci0gIH0KLSAgewotICAgIC8vIE1l
c3NhZ2VzIGFsc28gaGF2ZSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gdGhhdCBuZWVkIHRvIGJlIGNv
dW50ZWQuCi0gICAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2U7Ci0gICAgY29u
c3QgaW50IGJhc2Vfc2l6ZSA9IG1lc3NhZ2UuU3BhY2VVc2VkKCk7Ci0gICAgdW5pdHRlc3Q6OkZv
cmVpZ25NZXNzYWdlIGZvcmVpZ247Ci0gICAgZm9yZWlnbi5zZXRfYyg0Mik7Ci0gICAgbWVzc2Fn
ZS5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9mb3JlaWduX21lc3NhZ2VfZXh0
ZW5zaW9uKS0+Ci0gICAgICAgIENvcHlGcm9tKGZvcmVpZ24pOwotICAgIGludCBtaW5fZXhwZWN0
ZWRfc2l6ZSA9IGJhc2Vfc2l6ZSArIGZvcmVpZ24uU3BhY2VVc2VkKCk7Ci0gICAgRVhQRUNUX0xF
KG1pbl9leHBlY3RlZF9zaXplLCBtZXNzYWdlLlNwYWNlVXNlZCgpKTsKLSAgfQotCi0gIC8vIFJl
cGVhdGVkIHByaW1pdGl2ZSBleHRlbnNpb25zIHdpbGwgaW5jcmVhc2Ugc3BhY2UgdXNlZCBieSBh
dCBsZWFzdCBhCi0gIC8vIFJlcGVhdGVkRmllbGQ8VD4sIGFuZCB3aWxsIGNhdXNlIGFkZGl0aW9u
YWwgYWxsb2NhdGlvbnMgd2hlbiB0aGUgYXJyYXkKLSAgLy8gZ2V0cyB0b28gYmlnIGZvciB0aGUg
aW5pdGlhbCBzcGFjZS4KLSAgLy8gVGhpcyBtYWNybzoKLSAgLy8gICAtIEFkZHMgYSB2YWx1ZSB0
byB0aGUgcmVwZWF0ZWQgZXh0ZW5zaW9uLCB0aGVuIGNsZWFycyBpdCwgZXN0YWJsaXNoaW5nCi0g
IC8vICAgICB0aGUgYmFzZSBzaXplLgotICAvLyAgIC0gQWRkcyBhIHNtYWxsIG51bWJlciBvZiB2
YWx1ZXMsIHRlc3RpbmcgdGhhdCBpdCBkb2Vzbid0IGluY3JlYXNlIHRoZQotICAvLyAgICAgU3Bh
Y2VVc2VkKCkKLSAgLy8gICAtIEFkZHMgYSBsYXJnZSBudW1iZXIgb2YgdmFsdWVzIChyZXF1aXJp
bmcgYWxsb2NhdGlvbiBpbiB0aGUgcmVwZWF0ZWQKLSAgLy8gICAgIGZpZWxkKSwgYW5kIGVuc3Vy
ZXMgdGhhdCB0aGF0IGFsbG9jYXRpb24gaXMgaW5jbHVkZWQgaW4gU3BhY2VVc2VkKCkKLSNkZWZp
bmUgVEVTVF9SRVBFQVRFRF9FWFRFTlNJT05TX1NQQUNFX1VTRUQodHlwZSwgY3BwdHlwZSwgdmFs
dWUpICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHVuaXR0ZXN0
OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBjb25zdCBpbnQgYmFzZV9zaXplID0gbWVzc2FnZS5TcGFjZVVzZWQo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaW50IG1pbl9leHBlY3Rl
ZF9zaXplID0gc2l6ZW9mKFJlcGVhdGVkRmllbGQ8Y3BwdHlwZT4pICsgYmFzZV9zaXplOyAgICAg
ICAgXAotICAgIG1lc3NhZ2UuQWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF8jI3R5cGUj
I19leHRlbnNpb24sIHZhbHVlKTsgICAgICAgIFwKLSAgICBtZXNzYWdlLkNsZWFyRXh0ZW5zaW9u
KHVuaXR0ZXN0OjpyZXBlYXRlZF8jI3R5cGUjI19leHRlbnNpb24pOyAgICAgICAgICAgICBcCi0g
ICAgY29uc3QgaW50IGVtcHR5X3JlcGVhdGVkX2ZpZWxkX3NpemUgPSBtZXNzYWdlLlNwYWNlVXNl
ZCgpOyAgICAgICAgICAgICAgICAgXAotICAgIEVYUEVDVF9MRShtaW5fZXhwZWN0ZWRfc2l6ZSwg
ZW1wdHlfcmVwZWF0ZWRfZmllbGRfc2l6ZSkgPDwgI3R5cGU7ICAgICAgICAgIFwKLSAgICBtZXNz
YWdlLkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfIyN0eXBlIyNfZXh0ZW5zaW9uLCB2
YWx1ZSk7ICAgICAgICBcCi0gICAgbWVzc2FnZS5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVh
dGVkXyMjdHlwZSMjX2V4dGVuc2lvbiwgdmFsdWUpOyAgICAgICAgXAotICAgIEVYUEVDVF9FUShl
bXB0eV9yZXBlYXRlZF9maWVsZF9zaXplLCBtZXNzYWdlLlNwYWNlVXNlZCgpKSA8PCAjdHlwZTsg
ICAgICAgIFwKLSAgICBtZXNzYWdlLkNsZWFyRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF8j
I3R5cGUjI19leHRlbnNpb24pOyAgICAgICAgICAgICBcCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCAxNjsgKytpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgbWVzc2FnZS5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkXyMjdHlwZSMj
X2V4dGVuc2lvbiwgdmFsdWUpOyAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
aW50IGV4cGVjdGVkX3NpemUgPSBzaXplb2YoY3BwdHlwZSkgKiAoMTYgLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBrTWluUmVwZWF0ZWRGaWVsZEFsbG9jYXRpb25T
aXplKSArIGVtcHR5X3JlcGVhdGVkX2ZpZWxkX3NpemU7ICAgICAgICAgIFwKLSAgICBFWFBFQ1Rf
RVEoZXhwZWN0ZWRfc2l6ZSwgbWVzc2FnZS5TcGFjZVVzZWQoKSkgPDwgI3R5cGU7ICAgICAgICAg
ICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSAgVEVTVF9SRVBFQVRFRF9FWFRFTlNJT05T
X1NQQUNFX1VTRUQoaW50MzIgICAsIGludDMyICwgMTAxKTsKLSAgVEVTVF9SRVBFQVRFRF9FWFRF
TlNJT05TX1NQQUNFX1VTRUQoaW50NjQgICAsIGludDY0ICwgMTAyKTsKLSAgVEVTVF9SRVBFQVRF
RF9FWFRFTlNJT05TX1NQQUNFX1VTRUQodWludDMyICAsIHVpbnQzMiwgMTAzKTsKLSAgVEVTVF9S
RVBFQVRFRF9FWFRFTlNJT05TX1NQQUNFX1VTRUQodWludDY0ICAsIHVpbnQ2NCwgMTA0KTsKLSAg
VEVTVF9SRVBFQVRFRF9FWFRFTlNJT05TX1NQQUNFX1VTRUQoc2ludDMyICAsIGludDMyICwgMTA1
KTsKLSAgVEVTVF9SRVBFQVRFRF9FWFRFTlNJT05TX1NQQUNFX1VTRUQoc2ludDY0ICAsIGludDY0
ICwgMTA2KTsKLSAgVEVTVF9SRVBFQVRFRF9FWFRFTlNJT05TX1NQQUNFX1VTRUQoZml4ZWQzMiAs
IHVpbnQzMiwgMTA3KTsKLSAgVEVTVF9SRVBFQVRFRF9FWFRFTlNJT05TX1NQQUNFX1VTRUQoZml4
ZWQ2NCAsIHVpbnQ2NCwgMTA4KTsKLSAgVEVTVF9SRVBFQVRFRF9FWFRFTlNJT05TX1NQQUNFX1VT
RUQoc2ZpeGVkMzIsIGludDMyICwgMTA5KTsKLSAgVEVTVF9SRVBFQVRFRF9FWFRFTlNJT05TX1NQ
QUNFX1VTRUQoc2ZpeGVkNjQsIGludDY0ICwgMTEwKTsKLSAgVEVTVF9SRVBFQVRFRF9FWFRFTlNJ
T05TX1NQQUNFX1VTRUQoZmxvYXQgICAsIGZsb2F0ICwgMTExKTsKLSAgVEVTVF9SRVBFQVRFRF9F
WFRFTlNJT05TX1NQQUNFX1VTRUQoZG91YmxlICAsIGRvdWJsZSwgMTEyKTsKLSAgVEVTVF9SRVBF
QVRFRF9FWFRFTlNJT05TX1NQQUNFX1VTRUQoYm9vbCAgICAsIGJvb2wgICwgdHJ1ZSk7Ci0gIFRF
U1RfUkVQRUFURURfRVhURU5TSU9OU19TUEFDRV9VU0VEKG5lc3RlZF9lbnVtLCBpbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6
OkZPTyk7Ci0jdW5kZWYgVEVTVF9SRVBFQVRFRF9FWFRFTlNJT05TX1NQQUNFX1VTRUQKLSAgLy8g
UmVwZWF0ZWQgc3RyaW5ncwotICB7Ci0gICAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1l
c3NhZ2U7Ci0gICAgY29uc3QgaW50IGJhc2Vfc2l6ZSA9IG1lc3NhZ2UuU3BhY2VVc2VkKCk7Ci0g
ICAgaW50IG1pbl9leHBlY3RlZF9zaXplID0gc2l6ZW9mKFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5n
PikgKyBiYXNlX3NpemU7Ci0gICAgY29uc3Qgc3RyaW5nIHZhbHVlKDI1NiwgJ3gnKTsKLSAgICAv
LyBPbmNlIGl0ZW1zIGFyZSBhbGxvY2F0ZWQsIHRoZXkgbWF5IHN0aWNrIGFyb3VuZCBldmVuIHdo
ZW4gY2xlYXJlZCBzbwotICAgIC8vIHdpdGhvdXQgdGhlIGhhcmRjb3JlIG1lbW9yeSBtYW5hZ2Vt
ZW50IGFjY2Vzc29ycyB0aGVyZSBpc24ndCBhIG5vdGlvbiBvZgotICAgIC8vIHRoZSBlbXB0eSBy
ZXBlYXRlZCBmaWVsZCBtZW1vcnkgdXNhZ2UgYXMgdGhlcmUgaXMgd2l0aCBwcmltaXRpdmUgdHlw
ZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgKytpKSB7Ci0gICAgICBtZXNzYWdlLkFk
ZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbiwgdmFsdWUpOwot
ICAgIH0KLSAgICBtaW5fZXhwZWN0ZWRfc2l6ZSArPSAoc2l6ZW9mKHZhbHVlKSArIHZhbHVlLnNp
emUoKSkgKgotICAgICAgICAoMTYgLSBrTWluUmVwZWF0ZWRGaWVsZEFsbG9jYXRpb25TaXplKTsK
LSAgICBFWFBFQ1RfTEUobWluX2V4cGVjdGVkX3NpemUsIG1lc3NhZ2UuU3BhY2VVc2VkKCkpOwot
ICB9Ci0gIC8vIFJlcGVhdGVkIG1lc3NhZ2VzCi0gIHsKLSAgICB1bml0dGVzdDo6VGVzdEFsbEV4
dGVuc2lvbnMgbWVzc2FnZTsKLSAgICBjb25zdCBpbnQgYmFzZV9zaXplID0gbWVzc2FnZS5TcGFj
ZVVzZWQoKTsKLSAgICBpbnQgbWluX2V4cGVjdGVkX3NpemUgPSBzaXplb2YoUmVwZWF0ZWRQdHJG
aWVsZDx1bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2U+KSArCi0gICAgICAgIGJhc2Vfc2l6ZTsKLSAg
ICB1bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2UgcHJvdG90eXBlOwotICAgIHByb3RvdHlwZS5zZXRf
YygyKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICAgIG1lc3NhZ2Uu
QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9u
KS0+Ci0gICAgICAgICAgQ29weUZyb20ocHJvdG90eXBlKTsKLSAgICB9Ci0gICAgbWluX2V4cGVj
dGVkX3NpemUgKz0KLSAgICAgICAgKDE2IC0ga01pblJlcGVhdGVkRmllbGRBbGxvY2F0aW9uU2l6
ZSkgKiBwcm90b3R5cGUuU3BhY2VVc2VkKCk7Ci0gICAgRVhQRUNUX0xFKG1pbl9leHBlY3RlZF9z
aXplLCBtZXNzYWdlLlNwYWNlVXNlZCgpKTsKLSAgfQotfQotCi0vLyBOLkIuOiBXZSBkbyBub3Qg
dGVzdCByYW5nZS1iYXNlZCBmb3IgaGVyZSBiZWNhdXNlIHdlIHJlbWFpbiBDKyswMyBjb21wYXRp
YmxlLgotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTSwgdHlwZW5hbWUgSUQ+Ci1pbmxp
bmUgVCBTdW1BbGxFeHRlbnNpb25zKGNvbnN0IE0mIG1lc3NhZ2UsIElEIGV4dGVuc2lvbiwgVCB6
ZXJvKSB7Ci0gIFQgc3VtID0gemVybzsKLSAgdHlwZW5hbWUgUmVwZWF0ZWRGaWVsZDxUPjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9Ci0gICAgICBtZXNzYWdlLkdldFJlcGVhdGVkRXh0ZW5zaW9uKGV4
dGVuc2lvbikuYmVnaW4oKTsKLSAgdHlwZW5hbWUgUmVwZWF0ZWRGaWVsZDxUPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0KLSAgICAgIG1lc3NhZ2UuR2V0UmVwZWF0ZWRFeHRlbnNpb24oZXh0ZW5zaW9u
KS5lbmQoKTsKLSAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICBzdW0gKz0gKml0
ZXI7Ci0gIH0KLSAgcmV0dXJuIHN1bTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgTSwgdHlwZW5hbWUgSUQ+Ci1pbmxpbmUgdm9pZCBJbmNBbGxFeHRlbnNpb25zKE0qIG1lc3Nh
Z2UsIElEIGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVCB2YWwpIHsKLSAg
dHlwZW5hbWUgUmVwZWF0ZWRGaWVsZDxUPjo6aXRlcmF0b3IgaXRlciA9Ci0gICAgICBtZXNzYWdl
LT5NdXRhYmxlUmVwZWF0ZWRFeHRlbnNpb24oZXh0ZW5zaW9uKS0+YmVnaW4oKTsKLSAgdHlwZW5h
bWUgUmVwZWF0ZWRGaWVsZDxUPjo6aXRlcmF0b3IgZW5kICA9Ci0gICAgICBtZXNzYWdlLT5NdXRh
YmxlUmVwZWF0ZWRFeHRlbnNpb24oZXh0ZW5zaW9uKS0+ZW5kKCk7Ci0gIGZvciAoOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7Ci0gICAgKml0ZXIgKz0gdmFsOwotICB9Ci19Ci0KLVRFU1QoRXh0ZW5z
aW9uU2V0VGVzdCwgUmVwZWF0ZWRGaWVsZHMpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNp
b25zIG1lc3NhZ2U7Ci0KLSAgLy8gVGVzdCBlbXB0eSByZXBlYXRlZC1maWVsZCBjYXNlIChiLzEy
OTI2MTYzKQotICBBU1NFUlRfRVEoMCwgbWVzc2FnZS5HZXRSZXBlYXRlZEV4dGVuc2lvbigKLSAg
ICAgIHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb24pLnNpemUoKSk7Ci0gIEFTU0VS
VF9FUSgwLCBtZXNzYWdlLkdldFJlcGVhdGVkRXh0ZW5zaW9uKAotICAgICAgdW5pdHRlc3Q6OnJl
cGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbikuc2l6ZSgpKTsKLSAgQVNTRVJUX0VRKDAsIG1l
c3NhZ2UuR2V0UmVwZWF0ZWRFeHRlbnNpb24oCi0gICAgICB1bml0dGVzdDo6cmVwZWF0ZWRfc3Ry
aW5nX2V4dGVuc2lvbikuc2l6ZSgpKTsKLSAgQVNTRVJUX0VRKDAsIG1lc3NhZ2UuR2V0UmVwZWF0
ZWRFeHRlbnNpb24oCi0gICAgICB1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0
ZW5zaW9uKS5zaXplKCkpOwotCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3Nh
Z2UgbmVzdGVkX21lc3NhZ2U7Ci0gIG5lc3RlZF9tZXNzYWdlLnNldF9iYig0Mik7Ci0gIHVuaXR0
ZXN0OjpUZXN0QWxsVHlwZXM6Ok5lc3RlZEVudW0gbmVzdGVkX2VudW0gPQotICAgICAgdW5pdHRl
c3Q6OlRlc3RBbGxUeXBlczo6TmVzdGVkRW51bV9NSU47Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCAxMDsgKytpKSB7Ci0gICAgbWVzc2FnZS5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVk
X2ludDMyX2V4dGVuc2lvbiwgMSk7Ci0gICAgbWVzc2FnZS5BZGRFeHRlbnNpb24odW5pdHRlc3Q6
OnJlcGVhdGVkX2ludDY0X2V4dGVuc2lvbiwgMik7Ci0gICAgbWVzc2FnZS5BZGRFeHRlbnNpb24o
dW5pdHRlc3Q6OnJlcGVhdGVkX3VpbnQzMl9leHRlbnNpb24sIDMpOwotICAgIG1lc3NhZ2UuQWRk
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uLCA0KTsKLSAgICBt
ZXNzYWdlLkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDMyX2V4dGVuc2lvbiwg
NSk7Ci0gICAgbWVzc2FnZS5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQ2NF9l
eHRlbnNpb24sIDYpOwotICAgIG1lc3NhZ2UuQWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRl
ZF9maXhlZDMyX2V4dGVuc2lvbiwgNyk7Ci0gICAgbWVzc2FnZS5BZGRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX2ZpeGVkNjRfZXh0ZW5zaW9uLCA4KTsKLSAgICBtZXNzYWdlLkFkZEV4dGVu
c2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uLCA3KTsKLSAgICBtZXNz
YWdlLkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uLCA4
KTsKLSAgICBtZXNzYWdlLkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZmxvYXRfZXh0
ZW5zaW9uLCA5LjApOwotICAgIG1lc3NhZ2UuQWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRl
ZF9kb3VibGVfZXh0ZW5zaW9uLCAxMC4wKTsKLSAgICBtZXNzYWdlLkFkZEV4dGVuc2lvbih1bml0
dGVzdDo6cmVwZWF0ZWRfYm9vbF9leHRlbnNpb24sIHRydWUpOwotICAgIG1lc3NhZ2UuQWRkRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb24sIG5lc3RlZF9l
bnVtKTsKLSAgICBtZXNzYWdlLkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5n
X2V4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6c3RyaW5nKCJ0ZXN0
IikpOwotICAgIG1lc3NhZ2UuQWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9ieXRlc19l
eHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OnN0cmluZygidGVzdFx4
RkYiKSk7Ci0gICAgbWVzc2FnZS5BZGRFeHRlbnNpb24oCi0gICAgICAgIHVuaXR0ZXN0OjpyZXBl
YXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pLT5Db3B5RnJvbShuZXN0ZWRfbWVzc2FnZSk7
Ci0gICAgbWVzc2FnZS5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9lbnVt
X2V4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWRfZW51bSk7Ci0gIH0K
LQotICBBU1NFUlRfRVEoMTAsIFN1bUFsbEV4dGVuc2lvbnM8aW50MzI+KAotICAgICAgbWVzc2Fn
ZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbiwgMCkpOwotICBJbmNBbGxFeHRl
bnNpb25zPGludDMyPigKLSAgICAgICZtZXNzYWdlLCB1bml0dGVzdDo6cmVwZWF0ZWRfaW50MzJf
ZXh0ZW5zaW9uLCAxKTsKLSAgQVNTRVJUX0VRKDIwLCBTdW1BbGxFeHRlbnNpb25zPGludDMyPigK
LSAgICAgIG1lc3NhZ2UsIHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb24sIDApKTsK
LQotICBBU1NFUlRfRVEoMjAsIFN1bUFsbEV4dGVuc2lvbnM8aW50NjQ+KAotICAgICAgbWVzc2Fn
ZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX2ludDY0X2V4dGVuc2lvbiwgMCkpOwotICBJbmNBbGxFeHRl
bnNpb25zPGludDY0PigKLSAgICAgICZtZXNzYWdlLCB1bml0dGVzdDo6cmVwZWF0ZWRfaW50NjRf
ZXh0ZW5zaW9uLCAxKTsKLSAgQVNTRVJUX0VRKDMwLCBTdW1BbGxFeHRlbnNpb25zPGludDY0PigK
LSAgICAgIG1lc3NhZ2UsIHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQ2NF9leHRlbnNpb24sIDApKTsK
LQotICBBU1NFUlRfRVEoMzAsIFN1bUFsbEV4dGVuc2lvbnM8dWludDMyPigKLSAgICAgIG1lc3Nh
Z2UsIHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uLCAwKSk7Ci0gIEluY0FsbEV4
dGVuc2lvbnM8dWludDMyPigKLSAgICAgICZtZXNzYWdlLCB1bml0dGVzdDo6cmVwZWF0ZWRfdWlu
dDMyX2V4dGVuc2lvbiwgMSk7Ci0gIEFTU0VSVF9FUSg0MCwgU3VtQWxsRXh0ZW5zaW9uczx1aW50
MzI+KAotICAgICAgbWVzc2FnZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX3VpbnQzMl9leHRlbnNpb24s
IDApKTsKLQotICBBU1NFUlRfRVEoNDAsIFN1bUFsbEV4dGVuc2lvbnM8dWludDY0PigKLSAgICAg
IG1lc3NhZ2UsIHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uLCAwKSk7Ci0gIElu
Y0FsbEV4dGVuc2lvbnM8dWludDY0PigKLSAgICAgICZtZXNzYWdlLCB1bml0dGVzdDo6cmVwZWF0
ZWRfdWludDY0X2V4dGVuc2lvbiwgMSk7Ci0gIEFTU0VSVF9FUSg1MCwgU3VtQWxsRXh0ZW5zaW9u
czx1aW50NjQ+KAotICAgICAgbWVzc2FnZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX3VpbnQ2NF9leHRl
bnNpb24sIDApKTsKLQotICBBU1NFUlRfRVEoNTAsIFN1bUFsbEV4dGVuc2lvbnM8aW50MzI+KAot
ICAgICAgbWVzc2FnZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQzMl9leHRlbnNpb24sIDApKTsK
LSAgSW5jQWxsRXh0ZW5zaW9uczxpbnQzMj4oCi0gICAgICAmbWVzc2FnZSwgdW5pdHRlc3Q6OnJl
cGVhdGVkX3NpbnQzMl9leHRlbnNpb24sIDEpOwotICBBU1NFUlRfRVEoNjAsIFN1bUFsbEV4dGVu
c2lvbnM8aW50MzI+KAotICAgICAgbWVzc2FnZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQzMl9l
eHRlbnNpb24sIDApKTsKLQotICBBU1NFUlRfRVEoNjAsIFN1bUFsbEV4dGVuc2lvbnM8aW50NjQ+
KAotICAgICAgbWVzc2FnZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb24sIDAp
KTsKLSAgSW5jQWxsRXh0ZW5zaW9uczxpbnQ2ND4oCi0gICAgICAmbWVzc2FnZSwgdW5pdHRlc3Q6
OnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb24sIDEpOwotICBBU1NFUlRfRVEoNzAsIFN1bUFsbEV4
dGVuc2lvbnM8aW50NjQ+KAotICAgICAgbWVzc2FnZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQ2
NF9leHRlbnNpb24sIDApKTsKLQotICBBU1NFUlRfRVEoNzAsIFN1bUFsbEV4dGVuc2lvbnM8dWlu
dDMyPigKLSAgICAgIG1lc3NhZ2UsIHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lv
biwgMCkpOwotICBJbmNBbGxFeHRlbnNpb25zPHVpbnQzMj4oCi0gICAgICAmbWVzc2FnZSwgdW5p
dHRlc3Q6OnJlcGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uLCAxKTsKLSAgQVNTRVJUX0VRKDgwLCBT
dW1BbGxFeHRlbnNpb25zPHVpbnQzMj4oCi0gICAgICBtZXNzYWdlLCB1bml0dGVzdDo6cmVwZWF0
ZWRfZml4ZWQzMl9leHRlbnNpb24sIDApKTsKLQotICBBU1NFUlRfRVEoODAsIFN1bUFsbEV4dGVu
c2lvbnM8dWludDY0PigKLSAgICAgIG1lc3NhZ2UsIHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0
X2V4dGVuc2lvbiwgMCkpOwotICBJbmNBbGxFeHRlbnNpb25zPHVpbnQ2ND4oCi0gICAgICAmbWVz
c2FnZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkNjRfZXh0ZW5zaW9uLCAxKTsKLSAgQVNTRVJU
X0VRKDkwLCBTdW1BbGxFeHRlbnNpb25zPHVpbnQ2ND4oCi0gICAgICBtZXNzYWdlLCB1bml0dGVz
dDo6cmVwZWF0ZWRfZml4ZWQ2NF9leHRlbnNpb24sIDApKTsKLQotICAvLyBVc3VhbGx5LCBmbG9h
dGluZy1wb2ludCBhcml0aG1ldGljIGNhbm5vdCBiZSB0cnVzdGVkIHRvIGJlIGV4YWN0LCBzbyBp
dCBpcwotICAvLyBhIEJhZCBJZGVhIHRvIGFzc2VydCBlcXVhbGl0eSBpbiBhIHRlc3QgbGlrZSB0
aGlzLiBIb3dldmVyLCB3ZSdyZSBkZWFsaW5nCi0gIC8vIHdpdGggaW50ZWdlcnMgd2l0aCBhIHNt
YWxsIG51bWJlciBvZiBzaWduaWZpY2FudCBtYW50aXNzYSBiaXRzLCBzbyB3ZQotICAvLyBzaG91
bGQgYWN0dWFsbHkgaGF2ZSBleGFjdCBwcmVjaXNpb24gaGVyZS4KLSAgQVNTRVJUX0VRKDkwLCBT
dW1BbGxFeHRlbnNpb25zPGZsb2F0PigKLSAgICAgIG1lc3NhZ2UsIHVuaXR0ZXN0OjpyZXBlYXRl
ZF9mbG9hdF9leHRlbnNpb24sIDApKTsKLSAgSW5jQWxsRXh0ZW5zaW9uczxmbG9hdD4oCi0gICAg
ICAmbWVzc2FnZSwgdW5pdHRlc3Q6OnJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lvbiwgMSk7Ci0gIEFT
U0VSVF9FUSgxMDAsIFN1bUFsbEV4dGVuc2lvbnM8ZmxvYXQ+KAotICAgICAgbWVzc2FnZSwgdW5p
dHRlc3Q6OnJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lvbiwgMCkpOwotCi0gIEFTU0VSVF9FUSgxMDAs
IFN1bUFsbEV4dGVuc2lvbnM8ZG91YmxlPigKLSAgICAgIG1lc3NhZ2UsIHVuaXR0ZXN0OjpyZXBl
YXRlZF9kb3VibGVfZXh0ZW5zaW9uLCAwKSk7Ci0gIEluY0FsbEV4dGVuc2lvbnM8ZG91YmxlPigK
LSAgICAgICZtZXNzYWdlLCB1bml0dGVzdDo6cmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbiwgMSk7
Ci0gIEFTU0VSVF9FUSgxMTAsIFN1bUFsbEV4dGVuc2lvbnM8ZG91YmxlPigKLSAgICAgIG1lc3Nh
Z2UsIHVuaXR0ZXN0OjpyZXBlYXRlZF9kb3VibGVfZXh0ZW5zaW9uLCAwKSk7Ci0KLSAgUmVwZWF0
ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmluZz46Oml0ZXJhdG9yIHN0cmluZ19pdGVyOwotICBSZXBl
YXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPjo6aXRlcmF0b3Igc3RyaW5nX2VuZDsKLSAgZm9y
IChzdHJpbmdfaXRlciA9IG1lc3NhZ2UuTXV0YWJsZVJlcGVhdGVkRXh0ZW5zaW9uKAotICAgICAg
ICAgIHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uKS0+YmVnaW4oKSwKLSAgICAg
ICBzdHJpbmdfZW5kICA9IG1lc3NhZ2UuTXV0YWJsZVJlcGVhdGVkRXh0ZW5zaW9uKAotICAgICAg
ICAgICB1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbiktPmVuZCgpOwotICAgICAg
IHN0cmluZ19pdGVyICE9IHN0cmluZ19lbmQ7ICsrc3RyaW5nX2l0ZXIpIHsKLSAgICAqc3RyaW5n
X2l0ZXIgKz0gInRlc3QiOwotICB9Ci0gIFJlcGVhdGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBzdHJpbmdfY29uc3RfaXRlcjsKLSAgUmVwZWF0ZWRQdHJGaWVsZDwg
OjpzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHN0cmluZ19jb25zdF9lbmQ7Ci0gIGZvciAo
c3RyaW5nX2NvbnN0X2l0ZXIgPSBtZXNzYWdlLkdldFJlcGVhdGVkRXh0ZW5zaW9uKAotICAgICAg
ICAgICB1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbikuYmVnaW4oKSwKLSAgICAg
ICBzdHJpbmdfY29uc3RfZW5kICA9IG1lc3NhZ2UuR2V0UmVwZWF0ZWRFeHRlbnNpb24oCi0gICAg
ICAgICAgIHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uKS5lbmQoKTsKLSAgICAg
ICBzdHJpbmdfaXRlciAhPSBzdHJpbmdfZW5kOyArK3N0cmluZ19pdGVyKSB7Ci0gICAgQVNTRVJU
X1RSVUUoKnN0cmluZ19pdGVyID09ICJ0ZXN0dGVzdCIpOwotICB9Ci0KLSAgUmVwZWF0ZWRGaWVs
ZDx1bml0dGVzdDo6VGVzdEFsbFR5cGVzX05lc3RlZEVudW0+OjppdGVyYXRvciBlbnVtX2l0ZXI7
Ci0gIFJlcGVhdGVkRmllbGQ8dW5pdHRlc3Q6OlRlc3RBbGxUeXBlc19OZXN0ZWRFbnVtPjo6aXRl
cmF0b3IgZW51bV9lbmQ7Ci0gIGZvciAoZW51bV9pdGVyID0gbWVzc2FnZS5NdXRhYmxlUmVwZWF0
ZWRFeHRlbnNpb24oCi0gICAgICAgICAgIHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51bV9l
eHRlbnNpb24pLT5iZWdpbigpLAotICAgICAgIGVudW1fZW5kICA9IG1lc3NhZ2UuTXV0YWJsZVJl
cGVhdGVkRXh0ZW5zaW9uKAotICAgICAgICAgICB1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX2Vu
dW1fZXh0ZW5zaW9uKS0+ZW5kKCk7Ci0gICAgICAgZW51bV9pdGVyICE9IGVudW1fZW5kOyArK2Vu
dW1faXRlcikgewotICAgICplbnVtX2l0ZXIgPSB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0
ZWRFbnVtX01BWDsKLSAgfQotICBSZXBlYXRlZEZpZWxkPHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNf
TmVzdGVkRW51bT46OmNvbnN0X2l0ZXJhdG9yCi0gICAgICBlbnVtX2NvbnN0X2l0ZXI7Ci0gIFJl
cGVhdGVkRmllbGQ8dW5pdHRlc3Q6OlRlc3RBbGxUeXBlc19OZXN0ZWRFbnVtPjo6Y29uc3RfaXRl
cmF0b3IKLSAgICAgIGVudW1fY29uc3RfZW5kOwotICBmb3IgKGVudW1fY29uc3RfaXRlciA9IG1l
c3NhZ2UuR2V0UmVwZWF0ZWRFeHRlbnNpb24oCi0gICAgICAgICAgIHVuaXR0ZXN0OjpyZXBlYXRl
ZF9uZXN0ZWRfZW51bV9leHRlbnNpb24pLmJlZ2luKCksCi0gICAgICAgZW51bV9jb25zdF9lbmQg
ID0gbWVzc2FnZS5HZXRSZXBlYXRlZEV4dGVuc2lvbigKLSAgICAgICAgICAgdW5pdHRlc3Q6OnJl
cGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbikuZW5kKCk7Ci0gICAgICAgZW51bV9pdGVyICE9
IGVudW1fZW5kOyArK2VudW1faXRlcikgewotICAgIEFTU0VSVF9FUSgqZW51bV9jb25zdF9pdGVy
LCB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRFbnVtX01BWCk7Ci0gIH0KLQotICBSZXBl
YXRlZFB0ckZpZWxkPHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNfTmVzdGVkTWVzc2FnZT46Oml0ZXJh
dG9yCi0gICAgICBtc2dfaXRlcjsKLSAgUmVwZWF0ZWRQdHJGaWVsZDx1bml0dGVzdDo6VGVzdEFs
bFR5cGVzX05lc3RlZE1lc3NhZ2U+OjppdGVyYXRvcgotICAgICAgbXNnX2VuZDsKLSAgZm9yICht
c2dfaXRlciA9IG1lc3NhZ2UuTXV0YWJsZVJlcGVhdGVkRXh0ZW5zaW9uKAotICAgICAgICAgICB1
bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uKS0+YmVnaW4oKSwKLSAg
ICAgICBtc2dfZW5kICA9IG1lc3NhZ2UuTXV0YWJsZVJlcGVhdGVkRXh0ZW5zaW9uKAotICAgICAg
ICAgICB1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uKS0+ZW5kKCk7
Ci0gICAgICAgbXNnX2l0ZXIgIT0gbXNnX2VuZDsgKyttc2dfaXRlcikgewotICAgIG1zZ19pdGVy
LT5zZXRfYmIoMTIzNCk7Ci0gIH0KLSAgUmVwZWF0ZWRQdHJGaWVsZDx1bml0dGVzdDo6VGVzdEFs
bFR5cGVzX05lc3RlZE1lc3NhZ2U+OjoKLSAgICAgIGNvbnN0X2l0ZXJhdG9yIG1zZ19jb25zdF9p
dGVyOwotICBSZXBlYXRlZFB0ckZpZWxkPHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNfTmVzdGVkTWVz
c2FnZT46OgotICAgICAgY29uc3RfaXRlcmF0b3IgbXNnX2NvbnN0X2VuZDsKLSAgZm9yIChtc2df
Y29uc3RfaXRlciA9IG1lc3NhZ2UuR2V0UmVwZWF0ZWRFeHRlbnNpb24oCi0gICAgICAgICAgIHVu
aXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pLmJlZ2luKCksCi0gICAg
ICAgbXNnX2NvbnN0X2VuZCAgPSBtZXNzYWdlLkdldFJlcGVhdGVkRXh0ZW5zaW9uKAotICAgICAg
ICAgICB1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uKS5lbmQoKTsK
LSAgICAgICBtc2dfY29uc3RfaXRlciAhPSBtc2dfY29uc3RfZW5kOyArK21zZ19jb25zdF9pdGVy
KSB7Ci0gICAgQVNTRVJUX0VRKG1zZ19jb25zdF9pdGVyLT5iYigpLCAxMjM0KTsKLSAgfQotCi0g
IC8vIFRlc3QgcmFuZ2UtYmFzZWQgZm9yIGFzIHdlbGwsIGJ1dCBvbmx5IGlmIGNvbXBpbGVkIGFz
IEMrKzExLgotI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKLSAgLy8gVGVzdCBvbmUgcHJpbWl0
aXZlIGZpZWxkLgotICBmb3IgKGF1dG8mIHggOiAqbWVzc2FnZS5NdXRhYmxlUmVwZWF0ZWRFeHRl
bnNpb24oCi0gICAgICAgICAgdW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbikpIHsK
LSAgICB4ID0gNDMyMTsKLSAgfQotICBmb3IgKGNvbnN0IGF1dG8mIHggOiBtZXNzYWdlLkdldFJl
cGVhdGVkRXh0ZW5zaW9uKAotICAgICAgICAgIHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRl
bnNpb24pKSB7Ci0gICAgQVNTRVJUX0VRKHgsIDQzMjEpOwotICB9Ci0gIC8vIFRlc3Qgb25lIHN0
cmluZyBmaWVsZC4KLSAgZm9yIChhdXRvJiB4IDogKm1lc3NhZ2UuTXV0YWJsZVJlcGVhdGVkRXh0
ZW5zaW9uKAotICAgICAgICAgIHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uKSkg
ewotICAgIHggPSAidGVzdF9yYW5nZV9iYXNlZF9mb3IiOwotICB9Ci0gIGZvciAoY29uc3QgYXV0
byYgeCA6IG1lc3NhZ2UuR2V0UmVwZWF0ZWRFeHRlbnNpb24oCi0gICAgICAgICAgdW5pdHRlc3Q6
OnJlcGVhdGVkX3N0cmluZ19leHRlbnNpb24pKSB7Ci0gICAgQVNTRVJUX1RSVUUoeCA9PSAidGVz
dF9yYW5nZV9iYXNlZF9mb3IiKTsKLSAgfQotICAvLyBUZXN0IG9uZSBtZXNzYWdlIGZpZWxkLgot
ICBmb3IgKGF1dG8mIHggOiAqbWVzc2FnZS5NdXRhYmxlUmVwZWF0ZWRFeHRlbnNpb24oCi0gICAg
ICAgICAgdW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbikpIHsKLSAg
ICB4LnNldF9iYig0MzIxKTsKLSAgfQotICBmb3IgKGNvbnN0IGF1dG8mIHggOiAqbWVzc2FnZS5N
dXRhYmxlUmVwZWF0ZWRFeHRlbnNpb24oCi0gICAgICAgICAgdW5pdHRlc3Q6OnJlcGVhdGVkX25l
c3RlZF9tZXNzYWdlX2V4dGVuc2lvbikpIHsKLSAgICBBU1NFUlRfRVEoeC5iYigpLCA0MzIxKTsK
LSAgfQotI2VuZGlmCi19Ci0KLS8vIEZyb20gYi8xMjkyNjE2MwotVEVTVChFeHRlbnNpb25TZXRU
ZXN0LCBBYnNlbnRFeHRlbnNpb24pIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1l
c3NhZ2U7Ci0gIG1lc3NhZ2UuTXV0YWJsZVJlcGVhdGVkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBl
YXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pCi0gICAgICAtPkFkZCgpLT5zZXRfYmIoMTIz
KTsKLSAgQVNTRVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSgKLSAgICAgIHVuaXR0ZXN0
OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKAotICAg
ICAgMTIzLCBtZXNzYWdlLkdldEV4dGVuc2lvbigKLSAgICAgICAgICB1bml0dGVzdDo6cmVwZWF0
ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uLCAwKS5iYigpKTsKLX0KLQotI2lmZGVmIFBST1RP
QlVGX0hBU19ERUFUSF9URVNUCi0KLVRFU1QoRXh0ZW5zaW9uU2V0VGVzdCwgSW52YWxpZEVudW1E
ZWF0aCkgewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTsKLSAgRVhQRUNU
X0RFQlVHX0RFQVRIKAotICAgIG1lc3NhZ2UuU2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25h
bF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVuaXR0ZXN0OjpGb3JlaWduRW51bT4oNTMpKSwKLSAgICAiSXNWYWxpZCIpOwotfQot
Ci0jZW5kaWYgIC8vIFBST1RPQlVGX0hBU19ERUFUSF9URVNUCi0KLVRFU1QoRXh0ZW5zaW9uU2V0
VGVzdCwgRHluYW1pY0V4dGVuc2lvbnMpIHsKLSAgLy8gVGVzdCBhZGRpbmcgYSBkeW5hbWljIGV4
dGVuc2lvbiB0byBhIGNvbXBpbGVkLWluIG1lc3NhZ2Ugb2JqZWN0LgotCi0gIEZpbGVEZXNjcmlw
dG9yUHJvdG8gZHluYW1pY19wcm90bzsKLSAgZHluYW1pY19wcm90by5zZXRfbmFtZSgiZHluYW1p
Y19leHRlbnNpb25zX3Rlc3QucHJvdG8iKTsKLSAgZHluYW1pY19wcm90by5hZGRfZGVwZW5kZW5j
eSgKLSAgICAgIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9uczo6ZGVzY3JpcHRvcigpLT5maWxl
KCktPm5hbWUoKSk7Ci0gIGR5bmFtaWNfcHJvdG8uc2V0X3BhY2thZ2UoImR5bmFtaWNfZXh0ZW5z
aW9ucyIpOwotCi0gIC8vIENvcHkgdGhlIGZpZWxkcyBhbmQgbmVzdGVkIHR5cGVzIGZyb20gVGVz
dER5bmFtaWNFeHRlbnNpb25zIGludG8gb3VyIG5ldwotICAvLyBwcm90bywgY29udmVydGluZyB0
aGUgZmllbGRzIGludG8gZXh0ZW5zaW9ucy4KLSAgY29uc3QgRGVzY3JpcHRvciogdGVtcGxhdGVf
ZGVzY3JpcHRvciA9Ci0gICAgICB1bml0dGVzdDo6VGVzdER5bmFtaWNFeHRlbnNpb25zOjpkZXNj
cmlwdG9yKCk7Ci0gIERlc2NyaXB0b3JQcm90byB0ZW1wbGF0ZV9kZXNjcmlwdG9yX3Byb3RvOwot
ICB0ZW1wbGF0ZV9kZXNjcmlwdG9yLT5Db3B5VG8oJnRlbXBsYXRlX2Rlc2NyaXB0b3JfcHJvdG8p
OwotICBkeW5hbWljX3Byb3RvLm11dGFibGVfbWVzc2FnZV90eXBlKCktPk1lcmdlRnJvbSgKLSAg
ICAgIHRlbXBsYXRlX2Rlc2NyaXB0b3JfcHJvdG8ubmVzdGVkX3R5cGUoKSk7Ci0gIGR5bmFtaWNf
cHJvdG8ubXV0YWJsZV9lbnVtX3R5cGUoKS0+TWVyZ2VGcm9tKAotICAgICAgdGVtcGxhdGVfZGVz
Y3JpcHRvcl9wcm90by5lbnVtX3R5cGUoKSk7Ci0gIGR5bmFtaWNfcHJvdG8ubXV0YWJsZV9leHRl
bnNpb24oKS0+TWVyZ2VGcm9tKAotICAgICAgdGVtcGxhdGVfZGVzY3JpcHRvcl9wcm90by5maWVs
ZCgpKTsKLQotICAvLyBGb3IgZWFjaCBleHRlbnNpb24gdGhhdCB3ZSBhZGRlZC4uLgotICBmb3Ig
KGludCBpID0gMDsgaSA8IGR5bmFtaWNfcHJvdG8uZXh0ZW5zaW9uX3NpemUoKTsgaSsrKSB7Ci0g
ICAgLy8gU2V0IGl0cyBleHRlbmRlZSB0byBUZXN0QWxsRXh0ZW5zaW9ucy4KLSAgICBGaWVsZERl
c2NyaXB0b3JQcm90byogZXh0ZW5zaW9uID0gZHluYW1pY19wcm90by5tdXRhYmxlX2V4dGVuc2lv
bihpKTsKLSAgICBleHRlbnNpb24tPnNldF9leHRlbmRlZSgKLSAgICAgICAgdW5pdHRlc3Q6OlRl
c3RBbGxFeHRlbnNpb25zOjpkZXNjcmlwdG9yKCktPmZ1bGxfbmFtZSgpKTsKLQotICAgIC8vIElm
IHRoZSBmaWVsZCByZWZlcnMgdG8gb25lIG9mIHRoZSB0eXBlcyBuZXN0ZWQgaW4gVGVzdER5bmFt
aWNFeHRlbnNpb25zLAotICAgIC8vIG1ha2UgaXQgcmVmZXIgdG8gdGhlIHR5cGUgaW4gb3VyIGR5
bmFtaWMgcHJvdG8gaW5zdGVhZC4KLSAgICBzdHJpbmcgcHJlZml4ID0gIi4iICsgdGVtcGxhdGVf
ZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCkgKyAiLiI7Ci0gICAgaWYgKGV4dGVuc2lvbi0+aGFzX3R5
cGVfbmFtZSgpKSB7Ci0gICAgICBzdHJpbmcqIHR5cGVfbmFtZSA9IGV4dGVuc2lvbi0+bXV0YWJs
ZV90eXBlX25hbWUoKTsKLSAgICAgIGlmIChIYXNQcmVmaXhTdHJpbmcoKnR5cGVfbmFtZSwgcHJl
Zml4KSkgewotICAgICAgICB0eXBlX25hbWUtPnJlcGxhY2UoMCwgcHJlZml4LnNpemUoKSwgIi5k
eW5hbWljX2V4dGVuc2lvbnMuIik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gTm93IGJ1
aWxkIHRoZSBmaWxlLCB1c2luZyB0aGUgZ2VuZXJhdGVkIHBvb2wgYXMgYW4gdW5kZXJsYXkuCi0g
IERlc2NyaXB0b3JQb29sIGR5bmFtaWNfcG9vbChEZXNjcmlwdG9yUG9vbDo6Z2VuZXJhdGVkX3Bv
b2woKSk7Ci0gIGNvbnN0IEZpbGVEZXNjcmlwdG9yKiBmaWxlID0gZHluYW1pY19wb29sLkJ1aWxk
RmlsZShkeW5hbWljX3Byb3RvKTsKLSAgQVNTRVJUX1RSVUUoZmlsZSAhPSBOVUxMKTsKLSAgRHlu
YW1pY01lc3NhZ2VGYWN0b3J5IGR5bmFtaWNfZmFjdG9yeSgmZHluYW1pY19wb29sKTsKLSAgZHlu
YW1pY19mYWN0b3J5LlNldERlbGVnYXRlVG9HZW5lcmF0ZWRGYWN0b3J5KHRydWUpOwotCi0gIC8v
IENvbnN0cnVjdCBhIG1lc3NhZ2UgdGhhdCB3ZSBjYW4gcGFyc2Ugd2l0aCB0aGUgZXh0ZW5zaW9u
cyB3ZSBkZWZpbmVkLgotICAvLyBTaW5jZSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGJhc2VkIG9mZiBv
ZiB0aGUgZmllbGRzIG9mIFRlc3REeW5hbWljRXh0ZW5zaW9ucywKLSAgLy8gd2UgY2FuIHVzZSB0
aGF0IG1lc3NhZ2UgdG8gY3JlYXRlIHRoaXMgdGVzdCBtZXNzYWdlLgotICBzdHJpbmcgZGF0YTsK
LSAgewotICAgIHVuaXR0ZXN0OjpUZXN0RHluYW1pY0V4dGVuc2lvbnMgbWVzc2FnZTsKLSAgICBt
ZXNzYWdlLnNldF9zY2FsYXJfZXh0ZW5zaW9uKDEyMyk7Ci0gICAgbWVzc2FnZS5zZXRfZW51bV9l
eHRlbnNpb24odW5pdHRlc3Q6OkZPUkVJR05fQkFSKTsKLSAgICBtZXNzYWdlLnNldF9keW5hbWlj
X2VudW1fZXh0ZW5zaW9uKAotICAgICAgICB1bml0dGVzdDo6VGVzdER5bmFtaWNFeHRlbnNpb25z
OjpEWU5BTUlDX0JBWik7Ci0gICAgbWVzc2FnZS5tdXRhYmxlX21lc3NhZ2VfZXh0ZW5zaW9uKCkt
PnNldF9jKDQ1Nik7Ci0gICAgbWVzc2FnZS5tdXRhYmxlX2R5bmFtaWNfbWVzc2FnZV9leHRlbnNp
b24oKS0+c2V0X2R5bmFtaWNfZmllbGQoNzg5KTsKLSAgICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9l
eHRlbnNpb24oImZvbyIpOwotICAgIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2V4dGVuc2lvbigiYmFy
Iik7Ci0gICAgbWVzc2FnZS5hZGRfcGFja2VkX2V4dGVuc2lvbigxMik7Ci0gICAgbWVzc2FnZS5h
ZGRfcGFja2VkX2V4dGVuc2lvbigtMzQpOwotICAgIG1lc3NhZ2UuYWRkX3BhY2tlZF9leHRlbnNp
b24oNTYpOwotICAgIG1lc3NhZ2UuYWRkX3BhY2tlZF9leHRlbnNpb24oLTc4KTsKLQotICAgIC8v
IEFsc28gYWRkIHNvbWUgdW5rbm93biBmaWVsZHMuCi0KLSAgICAvLyBBbiB1bmtub3duIGVudW0g
dmFsdWUgKGZvciBhIGtub3duIGZpZWxkKS4KLSAgICBtZXNzYWdlLm11dGFibGVfdW5rbm93bl9m
aWVsZHMoKS0+QWRkVmFyaW50KAotICAgICAgdW5pdHRlc3Q6OlRlc3REeW5hbWljRXh0ZW5zaW9u
czo6a0R5bmFtaWNFbnVtRXh0ZW5zaW9uRmllbGROdW1iZXIsCi0gICAgICAxMjM0NSk7Ci0gICAg
Ly8gQSByZWd1bGFyIHVua25vd24gZmllbGQuCi0gICAgbWVzc2FnZS5tdXRhYmxlX3Vua25vd25f
ZmllbGRzKCktPkFkZExlbmd0aERlbGltaXRlZCg1NDMyMSwgInVua25vd24iKTsKLQotICAgIG1l
c3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoJmRhdGEpOwotICB9Ci0KLSAgLy8gTm93IHdlIGNhbiBw
YXJzZSB0aGlzIHVzaW5nIG91ciBkeW5hbWljIGV4dGVuc2lvbiBkZWZpbml0aW9ucy4uLgotICB1
bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTsKLSAgewotICAgIGlvOjpBcnJheUlu
cHV0U3RyZWFtIHJhd19pbnB1dChkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwotICAgIGlvOjpD
b2RlZElucHV0U3RyZWFtIGlucHV0KCZyYXdfaW5wdXQpOwotICAgIGlucHV0LlNldEV4dGVuc2lv
blJlZ2lzdHJ5KCZkeW5hbWljX3Bvb2wsICZkeW5hbWljX2ZhY3RvcnkpOwotICAgIEFTU0VSVF9U
UlVFKG1lc3NhZ2UuUGFyc2VGcm9tQ29kZWRTdHJlYW0oJmlucHV0KSk7Ci0gICAgQVNTRVJUX1RS
VUUoaW5wdXQuQ29uc3VtZWRFbnRpcmVNZXNzYWdlKCkpOwotICB9Ci0KLSAgLy8gQ2FuIHdlIHBy
aW50IGl0PwotICBFWFBFQ1RfRVEoCi0gICAgIltkeW5hbWljX2V4dGVuc2lvbnMuc2NhbGFyX2V4
dGVuc2lvbl06IDEyM1xuIgotICAgICJbZHluYW1pY19leHRlbnNpb25zLmVudW1fZXh0ZW5zaW9u
XTogRk9SRUlHTl9CQVJcbiIKLSAgICAiW2R5bmFtaWNfZXh0ZW5zaW9ucy5keW5hbWljX2VudW1f
ZXh0ZW5zaW9uXTogRFlOQU1JQ19CQVpcbiIKLSAgICAiW2R5bmFtaWNfZXh0ZW5zaW9ucy5tZXNz
YWdlX2V4dGVuc2lvbl0ge1xuIgotICAgICIgIGM6IDQ1NlxuIgotICAgICJ9XG4iCi0gICAgIltk
eW5hbWljX2V4dGVuc2lvbnMuZHluYW1pY19tZXNzYWdlX2V4dGVuc2lvbl0ge1xuIgotICAgICIg
IGR5bmFtaWNfZmllbGQ6IDc4OVxuIgotICAgICJ9XG4iCi0gICAgIltkeW5hbWljX2V4dGVuc2lv
bnMucmVwZWF0ZWRfZXh0ZW5zaW9uXTogXCJmb29cIlxuIgotICAgICJbZHluYW1pY19leHRlbnNp
b25zLnJlcGVhdGVkX2V4dGVuc2lvbl06IFwiYmFyXCJcbiIKLSAgICAiW2R5bmFtaWNfZXh0ZW5z
aW9ucy5wYWNrZWRfZXh0ZW5zaW9uXTogMTJcbiIKLSAgICAiW2R5bmFtaWNfZXh0ZW5zaW9ucy5w
YWNrZWRfZXh0ZW5zaW9uXTogLTM0XG4iCi0gICAgIltkeW5hbWljX2V4dGVuc2lvbnMucGFja2Vk
X2V4dGVuc2lvbl06IDU2XG4iCi0gICAgIltkeW5hbWljX2V4dGVuc2lvbnMucGFja2VkX2V4dGVu
c2lvbl06IC03OFxuIgotICAgICIyMDAyOiAxMjM0NVxuIgotICAgICI1NDMyMTogXCJ1bmtub3du
XCJcbiIsCi0gICAgbWVzc2FnZS5EZWJ1Z1N0cmluZygpKTsKLQotICAvLyBDYW4gd2Ugc2VyaWFs
aXplIGl0PwotICAvLyAoRG9uJ3QgdXNlIEVYUEVDVF9FUSBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
dG8gZHVtcCByYXcgYmluYXJ5IGRhdGEgdG8gdGhlCi0gIC8vIHRlcm1pbmFsIG9uIGZhaWx1cmUu
KQotICBFWFBFQ1RfVFJVRShtZXNzYWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCkgPT0gZGF0YSk7Ci0K
LSAgLy8gV2hhdCBpZiB3ZSBwYXJzZSB1c2luZyB0aGUgcmVmbGVjdGlvbi1iYXNlZCBwYXJzZXI/
Ci0gIHsKLSAgICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTI7Ci0gICAgaW86
OkFycmF5SW5wdXRTdHJlYW0gcmF3X2lucHV0KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci0g
ICAgaW86OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQoJnJhd19pbnB1dCk7Ci0gICAgaW5wdXQuU2V0
RXh0ZW5zaW9uUmVnaXN0cnkoJmR5bmFtaWNfcG9vbCwgJmR5bmFtaWNfZmFjdG9yeSk7Ci0gICAg
QVNTRVJUX1RSVUUoV2lyZUZvcm1hdDo6UGFyc2VBbmRNZXJnZVBhcnRpYWwoJmlucHV0LCAmbWVz
c2FnZTIpKTsKLSAgICBBU1NFUlRfVFJVRShpbnB1dC5Db25zdW1lZEVudGlyZU1lc3NhZ2UoKSk7
Ci0gICAgRVhQRUNUX0VRKG1lc3NhZ2UuRGVidWdTdHJpbmcoKSwgbWVzc2FnZTIuRGVidWdTdHJp
bmcoKSk7Ci0gIH0KLQotICAvLyBBcmUgdGhlIGVtYmVkZGVkIGdlbmVyYXRlZCB0eXBlcyBhY3R1
YWxseSB1c2luZyB0aGUgZ2VuZXJhdGVkIG9iamVjdHM/Ci0gIHsKLSAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIG1lc3NhZ2VfZXh0ZW5zaW9uID0KLSAgICAgICAgZmlsZS0+RmluZEV4dGVuc2lv
bkJ5TmFtZSgibWVzc2FnZV9leHRlbnNpb24iKTsKLSAgICBBU1NFUlRfVFJVRShtZXNzYWdlX2V4
dGVuc2lvbiAhPSBOVUxMKTsKLSAgICBjb25zdCBNZXNzYWdlJiBzdWJfbWVzc2FnZSA9Ci0gICAg
ICAgIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2Vf
ZXh0ZW5zaW9uKTsKLSAgICBjb25zdCB1bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2UqIHR5cGVkX3N1
Yl9tZXNzYWdlID0KLSNpZmRlZiBHT09HTEVfUFJPVE9CVUZfTk9fUlRUSQotICAgICAgICBzdGF0
aWNfY2FzdDxjb25zdCB1bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2UqPigmc3ViX21lc3NhZ2UpOwot
I2Vsc2UKLSAgICAgICAgZHluYW1pY19jYXN0PGNvbnN0IHVuaXR0ZXN0OjpGb3JlaWduTWVzc2Fn
ZSo+KCZzdWJfbWVzc2FnZSk7Ci0jZW5kaWYKLSAgICBBU1NFUlRfVFJVRSh0eXBlZF9zdWJfbWVz
c2FnZSAhPSBOVUxMKTsKLSAgICBFWFBFQ1RfRVEoNDU2LCB0eXBlZF9zdWJfbWVzc2FnZS0+Yygp
KTsKLSAgfQotCi0gIC8vIFdoYXQgZG9lcyBHZXRNZXNzYWdlKCkgcmV0dXJuIGZvciB0aGUgZW1i
ZWRkZWQgZHluYW1pYyB0eXBlIGlmIGl0IGlzbid0Ci0gIC8vIHByZXNlbnQ/Ci0gIHsKLSAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGR5bmFtaWNfbWVzc2FnZV9leHRlbnNpb24gPQotICAgICAg
ICBmaWxlLT5GaW5kRXh0ZW5zaW9uQnlOYW1lKCJkeW5hbWljX21lc3NhZ2VfZXh0ZW5zaW9uIik7
Ci0gICAgQVNTRVJUX1RSVUUoZHluYW1pY19tZXNzYWdlX2V4dGVuc2lvbiAhPSBOVUxMKTsKLSAg
ICBjb25zdCBNZXNzYWdlJiBwYXJlbnQgPSB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnM6OmRl
ZmF1bHRfaW5zdGFuY2UoKTsKLSAgICBjb25zdCBNZXNzYWdlJiBzdWJfbWVzc2FnZSA9Ci0gICAg
ICAgIHBhcmVudC5HZXRSZWZsZWN0aW9uKCktPkdldE1lc3NhZ2UocGFyZW50LCBkeW5hbWljX21l
c3NhZ2VfZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZkeW5hbWljX2ZhY3RvcnkpOwotICAgIGNvbnN0IE1lc3NhZ2UqIHByb3RvdHlwZSA9Ci0g
ICAgICAgIGR5bmFtaWNfZmFjdG9yeS5HZXRQcm90b3R5cGUoZHluYW1pY19tZXNzYWdlX2V4dGVu
c2lvbi0+bWVzc2FnZV90eXBlKCkpOwotICAgIEVYUEVDVF9FUShwcm90b3R5cGUsICZzdWJfbWVz
c2FnZSk7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJu
YWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucGIuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvZmllbGRfbWFzay5wYi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzQ5ZWJjZWI1YmI3ZjJlNWI4ODdkM2ZlZGY1ZTZkYmMxMzY4ZTc0Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZmllbGRf
bWFzay5wYi5jYworKysgL2Rldi9udWxsCkBAIC0xLDQwNSArMCwwIEBACi0vLyBHZW5lcmF0ZWQg
YnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQotLy8gc291cmNl
OiBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90bwotCi0jZGVmaW5lIElOVEVSTkFMX1NV
UFBSRVNTX1BST1RPQlVGX0ZJRUxEX0RFUFJFQ0FUSU9OCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2ZpZWxkX21hc2sucGIuaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvcG9ydC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVy
YXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVm
bGVjdGlvbl9vcHMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4K
LS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbmNsdWRlcykKLQotbmFtZXNwYWNlIGdvb2ds
ZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1uYW1lc3BhY2UgewotCi1jb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIEZpZWxkTWFza19kZXNjcmlwdG9yXyA9IE5VTEw7Ci1j
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVj
dGlvbioKLSAgRmllbGRNYXNrX3JlZmxlY3Rpb25fID0gTlVMTDsKLQotfSAgLy8gbmFtZXNwYWNl
Ci0KLQotdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZmllbGRf
NWZtYXNrXzJlcHJvdG8oKSB7Ci0gIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZf
MmZmaWVsZF81Zm1hc2tfMmVwcm90bygpOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkZp
bGVEZXNjcmlwdG9yKiBmaWxlID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQ
b29sOjpnZW5lcmF0ZWRfcG9vbCgpLT5GaW5kRmlsZUJ5TmFtZSgKLSAgICAgICJnb29nbGUvcHJv
dG9idWYvZmllbGRfbWFzay5wcm90byIpOwotICBHT09HTEVfQ0hFQ0soZmlsZSAhPSBOVUxMKTsK
LSAgRmllbGRNYXNrX2Rlc2NyaXB0b3JfID0gZmlsZS0+bWVzc2FnZV90eXBlKDApOwotICBzdGF0
aWMgY29uc3QgaW50IEZpZWxkTWFza19vZmZzZXRzX1sxXSA9IHsKLSAgICBHT09HTEVfUFJPVE9C
VUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkTWFzaywgcGF0aHNfKSwKLSAg
fTsKLSAgRmllbGRNYXNrX3JlZmxlY3Rpb25fID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJl
ZmxlY3Rpb24oCi0gICAgICBGaWVsZE1hc2tfZGVzY3JpcHRvcl8sCi0gICAgICBGaWVsZE1hc2s6
OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgRmllbGRNYXNrX29mZnNldHNfLAotICAgICAgLTEs
Ci0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKEZpZWxkTWFzayksCi0gICAgICBH
T09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkTWFzaywg
X2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01F
U1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkTWFzaywgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci19
Ci0KLW5hbWVzcGFjZSB7Ci0KLUdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0UocHJvdG9idWZf
QXNzaWduRGVzY3JpcHRvcnNfb25jZV8pOwotaW5saW5lIHZvaWQgcHJvdG9idWZfQXNzaWduRGVz
Y3JpcHRvcnNPbmNlKCkgewotICA6Omdvb2dsZTo6cHJvdG9idWY6Okdvb2dsZU9uY2VJbml0KCZw
cm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc19vbmNlXywKLSAgICAgICAgICAgICAgICAgJnByb3Rv
YnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZmaWVsZF81Zm1hc2tfMmVwcm90byk7
Ci19Ci0KLXZvaWQgcHJvdG9idWZfUmVnaXN0ZXJUeXBlcyhjb25zdCA6OnN0ZDo6c3RyaW5nJikg
ewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0g
ICAgICBGaWVsZE1hc2tfZGVzY3JpcHRvcl8sICZGaWVsZE1hc2s6OmRlZmF1bHRfaW5zdGFuY2Uo
KSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi12b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9n
b29nbGVfMmZwcm90b2J1Zl8yZmZpZWxkXzVmbWFza18yZXByb3RvKCkgewotICBkZWxldGUgRmll
bGRNYXNrOjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRlIEZpZWxkTWFza19yZWZsZWN0aW9u
XzsKLX0KLQotdm9pZCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZmllbGRf
NWZtYXNrXzJlcHJvdG8oKSB7Ci0gIHN0YXRpYyBib29sIGFscmVhZHlfaGVyZSA9IGZhbHNlOwot
ICBpZiAoYWxyZWFkeV9oZXJlKSByZXR1cm47Ci0gIGFscmVhZHlfaGVyZSA9IHRydWU7Ci0gIEdP
T0dMRV9QUk9UT0JVRl9WRVJJRllfVkVSU0lPTjsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OkRl
c2NyaXB0b3JQb29sOjpJbnRlcm5hbEFkZEdlbmVyYXRlZEZpbGUoCi0gICAgIlxuIGdvb2dsZS9w
cm90b2J1Zi9maWVsZF9tYXNrLnByb3RvXDAyMlwwMTdnb29nIgotICAgICJsZS5wcm90b2J1Zlwi
XDAzMlxuXHRGaWVsZE1hc2tcMDIyXHJcblwwMDVwYXRoc1wwMzBcMDAxIFwwMDMoXHRCIgotICAg
ICJRXG5cMDIzY29tLmdvb2dsZS5wcm90b2J1ZkJcMDE2RmllbGRNYXNrUHJvdG9QXDAwMSIKLSAg
ICAiXDI0MFwwMDFcMDAxXDI0MlwwMDJcMDAzR1BCXDI1MlwwMDJcMDM2R29vZ2xlLlByb3RvYnVm
LldlbGxLbm93blR5cCIKLSAgICAiZXNiXDAwNnByb3RvMyIsIDE3MCk7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRGaWxlKAot
ICAgICJnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90byIsICZwcm90b2J1Zl9SZWdpc3Rl
clR5cGVzKTsKLSAgRmllbGRNYXNrOjpkZWZhdWx0X2luc3RhbmNlXyA9IG5ldyBGaWVsZE1hc2so
KTsKLSAgRmllbGRNYXNrOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNl
KCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok9uU2h1dGRvd24oJnByb3RvYnVm
X1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZmZpZWxkXzVmbWFza18yZXByb3RvKTsK
LX0KLQotLy8gRm9yY2UgQWRkRGVzY3JpcHRvcnMoKSB0byBiZSBjYWxsZWQgYXQgc3RhdGljIGlu
aXRpYWxpemF0aW9uIHRpbWUuCi1zdHJ1Y3QgU3RhdGljRGVzY3JpcHRvckluaXRpYWxpemVyX2dv
b2dsZV8yZnByb3RvYnVmXzJmZmllbGRfNWZtYXNrXzJlcHJvdG8gewotICBTdGF0aWNEZXNjcmlw
dG9ySW5pdGlhbGl6ZXJfZ29vZ2xlXzJmcHJvdG9idWZfMmZmaWVsZF81Zm1hc2tfMmVwcm90bygp
IHsKLSAgICBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZmllbGRfNWZtYXNr
XzJlcHJvdG8oKTsKLSAgfQotfSBzdGF0aWNfZGVzY3JpcHRvcl9pbml0aWFsaXplcl9nb29nbGVf
MmZwcm90b2J1Zl8yZmZpZWxkXzVmbWFza18yZXByb3RvXzsKLQotbmFtZXNwYWNlIHsKLQotc3Rh
dGljIHZvaWQgTWVyZ2VGcm9tRmFpbChpbnQgbGluZSkgR09PR0xFX0FUVFJJQlVURV9DT0xEOwot
c3RhdGljIHZvaWQgTWVyZ2VGcm9tRmFpbChpbnQgbGluZSkgewotICBHT09HTEVfQ0hFQ0soZmFs
c2UpIDw8IF9fRklMRV9fIDw8ICI6IiA8PCBsaW5lOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQot
Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0g
MTkwMAotY29uc3QgaW50IEZpZWxkTWFzazo6a1BhdGhzRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8v
ICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUZpZWxkTWFzazo6Rmll
bGRNYXNrKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21l
dGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2spCi19Ci0KLXZvaWQg
RmllbGRNYXNrOjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3Rh
bmNlXyA9IHRydWU7Ci19Ci0KLUZpZWxkTWFzazo6RmllbGRNYXNrKGNvbnN0IEZpZWxkTWFzayYg
ZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxf
bWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90
b2J1Zi5GaWVsZE1hc2spCi19Ci0KLXZvaWQgRmllbGRNYXNrOjpTaGFyZWRDdG9yKCkgewotICAg
IF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IGZhbHNlOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZygpOwotICBfY2FjaGVkX3NpemVfID0gMDsKLX0KLQotRmll
bGRNYXNrOjp+RmllbGRNYXNrKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVz
dHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRmllbGRNYXNrKQotICBTaGFyZWREdG9yKCk7Ci19Ci0K
LXZvaWQgRmllbGRNYXNrOjpTaGFyZWREdG9yKCkgewotICBpZiAodGhpcyAhPSBkZWZhdWx0X2lu
c3RhbmNlXykgewotICB9Ci19Ci0KLXZvaWQgRmllbGRNYXNrOjpTZXRDYWNoZWRTaXplKGludCBz
aXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0g
IF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19F
TkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogRmllbGRNYXNr
OjpkZXNjcmlwdG9yKCkgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAg
cmV0dXJuIEZpZWxkTWFza19kZXNjcmlwdG9yXzsKLX0KLQotY29uc3QgRmllbGRNYXNrJiBGaWVs
ZE1hc2s6OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBO
VUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZmllbGRfNWZtYXNrXzJl
cHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRmllbGRNYXNrKiBG
aWVsZE1hc2s6OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotRmllbGRNYXNrKiBGaWVsZE1h
c2s6Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3QgewotICBGaWVs
ZE1hc2sqIG4gPSBuZXcgRmllbGRNYXNrOwotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFy
ZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgRmllbGRNYXNrOjpDbGVh
cigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2NsZWFyX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5GaWVsZE1hc2spCi0gIHBhdGhzXy5DbGVhcigpOwotfQotCi1ib29sIEZp
ZWxkTWFzazo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNT
SU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChwYXJzZV9zdGFydDpnb29nbGUucHJvdG9idWYuRmllbGRNYXNrKQotICBmb3IgKDs7
KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyLCBib29sPiBw
ID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0b2ZmKDEyNyk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAg
ICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVy
KHRhZykpIHsKLSAgICAgIC8vIHJlcGVhdGVkIHN0cmluZyBwYXRocyA9IDE7Ci0gICAgICBjYXNl
IDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxMCkgewotICAgICAgICAgcGFyc2VfcGF0aHM6Ci0g
ICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5hZGRfcGF0aHMoKSkp
OwotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgICAgICAgIHRoaXMtPnBhdGhzKHRoaXMtPnBh
dGhzX3NpemUoKSAtIDEpLmRhdGEoKSwKLSAgICAgICAgICAgIHRoaXMtPnBhdGhzKHRoaXMtPnBh
dGhzX3NpemUoKSAtIDEpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5w
cm90b2J1Zi5GaWVsZE1hc2sucGF0aHMiKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
Z290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVj
dFRhZygxMCkpIGdvdG8gcGFyc2VfcGF0aHM7Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0QXRF
bmQoKSkgZ290byBzdWNjZXNzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVm
YXVsdDogewotICAgICAgaGFuZGxlX3VudXN1YWw6Ci0gICAgICAgIGlmICh0YWcgPT0gMCB8fAot
ICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9FTkRfR1JPVVApIHsKLSAgICAgICAg
ICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTa2lwRmllbGQoaW5wdXQsIHRhZykpOwotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sp
Ci0gIHJldHVybiB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KHBhcnNlX2ZhaWx1cmU6Z29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzaykKLSAgcmV0dXJuIGZhbHNl
OwotI3VuZGVmIERPXwotfQotCi12b2lkIEZpZWxkTWFzazo6U2VyaWFsaXplV2l0aENhY2hlZFNp
emVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRw
dXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFy
dDpnb29nbGUucHJvdG9idWYuRmllbGRNYXNrKQotICAvLyByZXBlYXRlZCBzdHJpbmcgcGF0aHMg
PSAxOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPnBhdGhzX3NpemUoKTsgaSsrKSB7Ci0g
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlZlcmlmeVV0
ZjhTdHJpbmcoCi0gICAgICB0aGlzLT5wYXRocyhpKS5kYXRhKCksIHRoaXMtPnBhdGhzKGkpLmxl
bmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuRmllbGRNYXNrLnBhdGhzIik7
Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRl
U3RyaW5nKAotICAgICAgMSwgdGhpcy0+cGF0aHMoaSksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuRmll
bGRNYXNrKQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBGaWVsZE1hc2s6OlNlcmlh
bGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50
OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxp
emVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzaykKLSAgLy8gcmVwZWF0
ZWQgc3RyaW5nIHBhdGhzID0gMTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT5wYXRoc19z
aXplKCk7IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+cGF0aHMoaSkuZGF0YSgpLCB0
aGlzLT5wYXRocyhpKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkZp
ZWxkTWFzay5wYXRocyIpOwotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlU3RyaW5nVG9BcnJheSgxLCB0aGlzLT5w
YXRocyhpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChz
ZXJpYWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2spCi0gIHJldHVy
biB0YXJnZXQ7Ci19Ci0KLWludCBGaWVsZE1hc2s6OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90
b2J1Zi5GaWVsZE1hc2spCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICAvLyByZXBlYXRlZCBz
dHJpbmcgcGF0aHMgPSAxOwotICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5wYXRoc19zaXplKCk7
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+cGF0aHNfc2l6ZSgpOyBpKyspIHsKLSAgICB0
b3RhbF9zaXplICs9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpTdHJpbmdTaXplKAotICAgICAgdGhpcy0+cGF0aHMoaSkpOwotICB9Ci0KLSAgR09PR0xFX1NB
RkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3Np
emU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90
YWxfc2l6ZTsKLX0KLQotdm9pZCBGaWVsZE1hc2s6Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChn
ZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2spCi0g
IGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChf
X0xJTkVfXyk7Ci0gIGNvbnN0IEZpZWxkTWFzayogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IEZpZWxkTWFz
az4oCi0gICAgICAgICAgJmZyb20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdv
b2dsZS5wcm90b2J1Zi5GaWVsZE1hc2spCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6UmVmbGVjdGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vz
czpnb29nbGUucHJvdG9idWYuRmllbGRNYXNrKQotICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAg
fQotfQotCi12b2lkIEZpZWxkTWFzazo6TWVyZ2VGcm9tKGNvbnN0IEZpZWxkTWFzayYgZnJvbSkg
ewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21f
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzaykKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZB
TFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgcGF0aHNfLk1l
cmdlRnJvbShmcm9tLnBhdGhzXyk7Ci19Ci0KLXZvaWQgRmllbGRNYXNrOjpDb3B5RnJvbShjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZp
ZWxkTWFzaykKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVy
Z2VGcm9tKGZyb20pOwotfQotCi12b2lkIEZpZWxkTWFzazo6Q29weUZyb20oY29uc3QgRmllbGRN
YXNrJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNf
Y29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2spCi0gIGlmICgmZnJvbSA9
PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9v
bCBGaWVsZE1hc2s6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgRmllbGRNYXNrOjpTd2FwKEZpZWxkTWFzayogb3RoZXIpIHsKLSAgaWYgKG90aGVy
ID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgRmllbGRN
YXNrOjpJbnRlcm5hbFN3YXAoRmllbGRNYXNrKiBvdGhlcikgewotICBwYXRoc18uVW5zYWZlQXJl
bmFTd2FwKCZvdGhlci0+cGF0aHNfKTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhl
ci0+X2ludGVybmFsX21ldGFkYXRhXyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhl
ci0+X2NhY2hlZF9zaXplXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgRmll
bGRNYXNrOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRv
cnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1l
dGFkYXRhLmRlc2NyaXB0b3IgPSBGaWVsZE1hc2tfZGVzY3JpcHRvcl87Ci0gIG1ldGFkYXRhLnJl
ZmxlY3Rpb24gPSBGaWVsZE1hc2tfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0K
LQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gRmllbGRNYXNrCi0KLS8v
IHJlcGVhdGVkIHN0cmluZyBwYXRocyA9IDE7Ci1pbnQgRmllbGRNYXNrOjpwYXRoc19zaXplKCkg
Y29uc3QgewotICByZXR1cm4gcGF0aHNfLnNpemUoKTsKLX0KLXZvaWQgRmllbGRNYXNrOjpjbGVh
cl9wYXRocygpIHsKLSAgcGF0aHNfLkNsZWFyKCk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYg
RmllbGRNYXNrOjpwYXRocyhpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGRNYXNrLnBhdGhzKQotICBy
ZXR1cm4gcGF0aHNfLkdldChpbmRleCk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogRmllbGRNYXNrOjpt
dXRhYmxlX3BhdGhzKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuRmllbGRNYXNrLnBhdGhzKQotICByZXR1cm4g
cGF0aHNfLk11dGFibGUoaW5kZXgpOwotfQotIHZvaWQgRmllbGRNYXNrOjpzZXRfcGF0aHMoaW50
IGluZGV4LCBjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sucGF0aHMpCi0g
IHBhdGhzXy5NdXRhYmxlKGluZGV4KS0+YXNzaWduKHZhbHVlKTsKLX0KLSB2b2lkIEZpZWxkTWFz
azo6c2V0X3BhdGhzKGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUpIHsKLSAgcGF0aHNfLk11
dGFibGUoaW5kZXgpLT5hc3NpZ24odmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzay5wYXRocykKLX0KLSB2
b2lkIEZpZWxkTWFzazo6c2V0X3BhdGhzKGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUsIHNp
emVfdCBzaXplKSB7Ci0gIHBhdGhzXy5NdXRhYmxlKGluZGV4KS0+YXNzaWduKAotICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuRmllbGRNYXNr
LnBhdGhzKQotfQotIDo6c3RkOjpzdHJpbmcqIEZpZWxkTWFzazo6YWRkX3BhdGhzKCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX211dGFibGU6Z29vZ2xlLnByb3Rv
YnVmLkZpZWxkTWFzay5wYXRocykKLSAgcmV0dXJuIHBhdGhzXy5BZGQoKTsKLX0KLSB2b2lkIEZp
ZWxkTWFzazo6YWRkX3BhdGhzKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHBhdGhz
Xy5BZGQoKS0+YXNzaWduKHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRmllbGRNYXNrLnBhdGhzKQotfQotIHZvaWQgRmllbGRN
YXNrOjphZGRfcGF0aHMoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgcGF0aHNfLkFkZCgpLT5hc3Np
Z24odmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX2NoYXI6
Z29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzay5wYXRocykKLX0KLSB2b2lkIEZpZWxkTWFzazo6YWRk
X3BhdGhzKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBwYXRoc18uQWRkKCkt
PmFzc2lnbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX3BvaW50ZXI6Z29vZ2xlLnByb3Rv
YnVmLkZpZWxkTWFzay5wYXRocykKLX0KLSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+JgotRmllbGRNYXNrOjpwYXRocygpIGNvbnN0IHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVm
LkZpZWxkTWFzay5wYXRocykKLSAgcmV0dXJuIHBhdGhzXzsKLX0KLSA6Omdvb2dsZTo6cHJvdG9i
dWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+KgotRmllbGRNYXNrOjptdXRhYmxl
X3BhdGhzKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9s
aXN0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sucGF0aHMpCi0gIHJldHVybiAmcGF0aHNfOwot
fQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotCi0vLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQobmFtZXNwYWNlX3Njb3BlKQotCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGdsb2JhbF9zY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9maWVs
ZF9tYXNrLnBiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wYi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWUwYjY1NTMzMjg4ZGI4MThjOTg3MWNiZTU4MDhlNzhi
YTYzMTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNrLnBiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIg
KzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBE
TyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucHJvdG8K
LQotI2lmbmRlZiBQUk9UT0JVRl9nb29nbGVfMmZwcm90b2J1Zl8yZmZpZWxkXzVmbWFza18yZXBy
b3RvX19JTkNMVURFRAotI2RlZmluZSBQUk9UT0JVRl9nb29nbGVfMmZwcm90b2J1Zl8yZmZpZWxk
XzVmbWFza18yZXByb3RvX19JTkNMVURFRAotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotCi0jaWYgR09PR0xFX1BST1RPQlVG
X1ZFUlNJT04gPCAzMDAwMDAwCi0jZXJyb3IgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgYSBu
ZXdlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcwotI2Vycm9yIGluY29tcGF0aWJsZSB3aXRo
IHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQbGVhc2UgdXBkYXRlCi0jZXJyb3IgeW91
ciBoZWFkZXJzLgotI2VuZGlmCi0jaWYgMzAwMDAwMCA8IEdPT0dMRV9QUk9UT0JVRl9NSU5fUFJP
VE9DX1ZFUlNJT04KLSNlcnJvciBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBhbiBvbGRlciB2
ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcwotI2Vycm9yIGluY29tcGF0aWJsZSB3aXRoIHlvdXIg
UHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQbGVhc2UKLSNlcnJvciByZWdlbmVyYXRlIHRoaXMg
ZmlsZSB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBwcm90b2MuCi0jZW5kaWYKLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVu
YXN0cmluZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91
dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21ldGFkYXRhLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVw
ZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldC5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldC5oPgotLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGluY2x1ZGVzKQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci0KLS8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCAt
LSBkbyBub3QgY2FsbCB0aGVzZS4KLXZvaWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0Fk
ZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZmaWVsZF81Zm1hc2tfMmVwcm90bygpOwotdm9pZCBw
cm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmZmllbGRfNWZtYXNrXzJlcHJv
dG8oKTsKLXZvaWQgcHJvdG9idWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmZmll
bGRfNWZtYXNrXzJlcHJvdG8oKTsKLQotY2xhc3MgRmllbGRNYXNrOwotCi0vLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBGaWVsZE1hc2sgOiBwdWJsaWMgOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIEZpZWxkTWFzaygpOwotICB2aXJ0dWFs
IH5GaWVsZE1hc2soKTsKLQotICBGaWVsZE1hc2soY29uc3QgRmllbGRNYXNrJiBmcm9tKTsKLQot
ICBpbmxpbmUgRmllbGRNYXNrJiBvcGVyYXRvcj0oY29uc3QgRmllbGRNYXNrJiBmcm9tKSB7Ci0g
ICAgQ29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgc3RhdGljIGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0
aWMgY29uc3QgRmllbGRNYXNrJiBkZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBTd2FwKEZp
ZWxkTWFzayogb3RoZXIpOwotCi0gIC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgaW5saW5lIEZpZWxkTWFzayog
TmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgRmllbGRNYXNrKiBOZXcoOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0OwotICB2b2lkIENvcHlGcm9tKGNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9t
KGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZy
b20oY29uc3QgRmllbGRNYXNrJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgRmllbGRN
YXNrJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigpOwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25z
dDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29k
ZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFt
KiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXko
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hl
ZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZv
aWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRT
aXplKGludCBzaXplKSBjb25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoRmllbGRNYXNrKiBvdGhl
cik7Ci0gIHByaXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZXRB
cmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5h
cmVuYSgpOwotICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkgY29uc3QgewotICAg
IHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsKLSAgfQotICBwdWJs
aWM6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRhZGF0YSgpIGNvbnN0
OwotCi0gIC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyByZXBlYXRlZCBzdHJp
bmcgcGF0aHMgPSAxOwotICBpbnQgcGF0aHNfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3Bh
dGhzKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1BhdGhzRmllbGROdW1iZXIgPSAxOwotICBjb25z
dCA6OnN0ZDo6c3RyaW5nJiBwYXRocyhpbnQgaW5kZXgpIGNvbnN0OwotICA6OnN0ZDo6c3RyaW5n
KiBtdXRhYmxlX3BhdGhzKGludCBpbmRleCk7Ci0gIHZvaWQgc2V0X3BhdGhzKGludCBpbmRleCwg
Y29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNldF9wYXRocyhpbnQgaW5kZXgs
IGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfcGF0aHMoaW50IGluZGV4LCBjb25zdCBj
aGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBhZGRfcGF0aHMoKTsK
LSAgdm9pZCBhZGRfcGF0aHMoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIGFk
ZF9wYXRocyhjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgYWRkX3BhdGhzKGNvbnN0IGNoYXIq
IHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0
ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmluZz4mIHBhdGhzKCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmluZz4qIG11dGFibGVfcGF0aHMo
KTsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnBy
b3RvYnVmLkZpZWxkTWFzaykKLSBwcml2YXRlOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFsX21ldGFkYXRhXzsKLSAg
Ym9vbCBfaXNfZGVmYXVsdF9pbnN0YW5jZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0
ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmluZz4gcGF0aHNfOwotICBtdXRhYmxlIGludCBfY2FjaGVk
X3NpemVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVz
Y19nb29nbGVfMmZwcm90b2J1Zl8yZmZpZWxkXzVmbWFza18yZXByb3RvKCk7Ci0gIGZyaWVuZCB2
b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZmaWVsZF81Zm1hc2tf
MmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJm
cHJvdG9idWZfMmZmaWVsZF81Zm1hc2tfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVs
dEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBGaWVsZE1hc2sqIGRlZmF1bHRfaW5zdGFuY2VfOwotfTsK
LS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhUFJPVE9CVUZfSU5MSU5F
X05PVF9JTl9IRUFERVJTCi0vLyBGaWVsZE1hc2sKLQotLy8gcmVwZWF0ZWQgc3RyaW5nIHBhdGhz
ID0gMTsKLWlubGluZSBpbnQgRmllbGRNYXNrOjpwYXRoc19zaXplKCkgY29uc3QgewotICByZXR1
cm4gcGF0aHNfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkTWFzazo6Y2xlYXJfcGF0aHMo
KSB7Ci0gIHBhdGhzXy5DbGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZp
ZWxkTWFzazo6cGF0aHMoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzay5wYXRocykKLSAgcmV0
dXJuIHBhdGhzXy5HZXQoaW5kZXgpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpZWxkTWFz
azo6bXV0YWJsZV9wYXRocyhpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzay5wYXRocykKLSAgcmV0
dXJuIHBhdGhzXy5NdXRhYmxlKGluZGV4KTsKLX0KLWlubGluZSB2b2lkIEZpZWxkTWFzazo6c2V0
X3BhdGhzKGludCBpbmRleCwgY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGRNYXNr
LnBhdGhzKQotICBwYXRoc18uTXV0YWJsZShpbmRleCktPmFzc2lnbih2YWx1ZSk7Ci19Ci1pbmxp
bmUgdm9pZCBGaWVsZE1hc2s6OnNldF9wYXRocyhpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIHZhbHVl
KSB7Ci0gIHBhdGhzXy5NdXRhYmxlKGluZGV4KS0+YXNzaWduKHZhbHVlKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1h
c2sucGF0aHMpCi19Ci1pbmxpbmUgdm9pZCBGaWVsZE1hc2s6OnNldF9wYXRocyhpbnQgaW5kZXgs
IGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBwYXRoc18uTXV0YWJsZShpbmRl
eCktPmFzc2lnbigKLSAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNp
emUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29v
Z2xlLnByb3RvYnVmLkZpZWxkTWFzay5wYXRocykKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBG
aWVsZE1hc2s6OmFkZF9wYXRocygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2FkZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sucGF0aHMpCi0gIHJldHVy
biBwYXRoc18uQWRkKCk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZE1hc2s6OmFkZF9wYXRocyhjb25z
dCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBwYXRoc18uQWRkKCktPmFzc2lnbih2YWx1ZSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVm
LkZpZWxkTWFzay5wYXRocykKLX0KLWlubGluZSB2b2lkIEZpZWxkTWFzazo6YWRkX3BhdGhzKGNv
bnN0IGNoYXIqIHZhbHVlKSB7Ci0gIHBhdGhzXy5BZGQoKS0+YXNzaWduKHZhbHVlKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5G
aWVsZE1hc2sucGF0aHMpCi19Ci1pbmxpbmUgdm9pZCBGaWVsZE1hc2s6OmFkZF9wYXRocyhjb25z
dCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgcGF0aHNfLkFkZCgpLT5hc3NpZ24ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1h
c2sucGF0aHMpCi19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0
ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPiYKLUZpZWxkTWFzazo6cGF0aHMoKSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWVs
ZE1hc2sucGF0aHMpCi0gIHJldHVybiBwYXRoc187Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPioKLUZpZWxkTWFzazo6bXV0YWJs
ZV9wYXRocygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVf
bGlzdDpnb29nbGUucHJvdG9idWYuRmllbGRNYXNrLnBhdGhzKQotICByZXR1cm4gJnBhdGhzXzsK
LX0KLQotI2VuZGlmICAvLyAhUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0KLS8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChuYW1lc3BhY2Vfc2NvcGUpCi0KLX0gIC8vIG5hbWVzcGFj
ZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZ2xvYmFsX3Njb3BlKQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX2dvb2dsZV8yZnBy
b3RvYnVmXzJmZmllbGRfNWZtYXNrXzJlcHJvdG9fX0lOQ0xVREVECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9maWVs
ZF9tYXNrLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWY2ZGJlODk4MDU5
NjNjNjZhZTk5YmUxYjNhZmZkMGRjZWM4MTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNrLnByb3RvCisr
KyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBnb29nbGUucHJvdG9idWY7
Ci0KLW9wdGlvbiBjc2hhcnBfbmFtZXNwYWNlID0gIkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25U
eXBlcyI7Ci1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUucHJvdG9idWYiOwotb3B0
aW9uIGphdmFfb3V0ZXJfY2xhc3NuYW1lID0gIkZpZWxkTWFza1Byb3RvIjsKLW9wdGlvbiBqYXZh
X211bHRpcGxlX2ZpbGVzID0gdHJ1ZTsKLW9wdGlvbiBvYmpjX2NsYXNzX3ByZWZpeCA9ICJHUEIi
Owotb3B0aW9uIGphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoID0gdHJ1ZTsKLQotLy8gYEZp
ZWxkTWFza2AgcmVwcmVzZW50cyBhIHNldCBvZiBzeW1ib2xpYyBmaWVsZCBwYXRocywgZm9yIGV4
YW1wbGU6Ci0vLwotLy8gICAgIHBhdGhzOiAiZi5hIgotLy8gICAgIHBhdGhzOiAiZi5iLmQiCi0v
LwotLy8gSGVyZSBgZmAgcmVwcmVzZW50cyBhIGZpZWxkIGluIHNvbWUgcm9vdCBtZXNzYWdlLCBg
YWAgYW5kIGBiYAotLy8gZmllbGRzIGluIHRoZSBtZXNzYWdlIGZvdW5kIGluIGBmYCwgYW5kIGBk
YCBhIGZpZWxkIGZvdW5kIGluIHRoZQotLy8gbWVzc2FnZSBpbiBgZi5iYC4KLS8vCi0vLyBGaWVs
ZCBtYXNrcyBhcmUgdXNlZCB0byBzcGVjaWZ5IGEgc3Vic2V0IG9mIGZpZWxkcyB0aGF0IHNob3Vs
ZCBiZQotLy8gcmV0dXJuZWQgYnkgYSBnZXQgb3BlcmF0aW9uIG9yIG1vZGlmaWVkIGJ5IGFuIHVw
ZGF0ZSBvcGVyYXRpb24uCi0vLyBGaWVsZCBtYXNrcyBhbHNvIGhhdmUgYSBjdXN0b20gSlNPTiBl
bmNvZGluZyAoc2VlIGJlbG93KS4KLS8vCi0vLyAjIEZpZWxkIE1hc2tzIGluIFByb2plY3Rpb25z
Ci0vLwotLy8gV2hlbiB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGEgcHJvamVjdGlvbiwgYSByZXNw
b25zZSBtZXNzYWdlIG9yCi0vLyBzdWItbWVzc2FnZSBpcyBmaWx0ZXJlZCBieSB0aGUgQVBJIHRv
IG9ubHkgY29udGFpbiB0aG9zZSBmaWVsZHMgYXMKLS8vIHNwZWNpZmllZCBpbiB0aGUgbWFzay4g
Rm9yIGV4YW1wbGUsIGlmIHRoZSBtYXNrIGluIHRoZSBwcmV2aW91cwotLy8gZXhhbXBsZSBpcyBh
cHBsaWVkIHRvIGEgcmVzcG9uc2UgbWVzc2FnZSBhcyBmb2xsb3dzOgotLy8KLS8vICAgICBmIHsK
LS8vICAgICAgIGEgOiAyMgotLy8gICAgICAgYiB7Ci0vLyAgICAgICAgIGQgOiAxCi0vLyAgICAg
ICAgIHggOiAyCi0vLyAgICAgICB9Ci0vLyAgICAgICB5IDogMTMKLS8vICAgICB9Ci0vLyAgICAg
ejogOAotLy8KLS8vIFRoZSByZXN1bHQgd2lsbCBub3QgY29udGFpbiBzcGVjaWZpYyB2YWx1ZXMg
Zm9yIGZpZWxkcyB4LHkgYW5kIHoKLS8vICh0aGVpciB2YWx1ZSB3aWxsIGJlIHNldCB0byB0aGUg
ZGVmYXVsdCwgYW5kIG9taXR0ZWQgaW4gcHJvdG8gdGV4dAotLy8gb3V0cHV0KToKLS8vCi0vLwot
Ly8gICAgIGYgewotLy8gICAgICAgYSA6IDIyCi0vLyAgICAgICBiIHsKLS8vICAgICAgICAgZCA6
IDEKLS8vICAgICAgIH0KLS8vICAgICB9Ci0vLwotLy8gQSByZXBlYXRlZCBmaWVsZCBpcyBub3Qg
YWxsb3dlZCBleGNlcHQgYXQgdGhlIGxhc3QgcG9zaXRpb24gb2YgYQotLy8gZmllbGQgbWFzay4K
LS8vCi0vLyBJZiBhIEZpZWxkTWFzayBvYmplY3QgaXMgbm90IHByZXNlbnQgaW4gYSBnZXQgb3Bl
cmF0aW9uLCB0aGUKLS8vIG9wZXJhdGlvbiBhcHBsaWVzIHRvIGFsbCBmaWVsZHMgKGFzIGlmIGEg
RmllbGRNYXNrIG9mIGFsbCBmaWVsZHMKLS8vIGhhZCBiZWVuIHNwZWNpZmllZCkuCi0vLwotLy8g
Tm90ZSB0aGF0IGEgZmllbGQgbWFzayBkb2VzIG5vdCBuZWNlc3NhcmlseSBhcHBseSB0byB0aGUK
LS8vIHRvcC1sZXZlbCByZXNwb25zZSBtZXNzYWdlLiBJbiBjYXNlIG9mIGEgUkVTVCBnZXQgb3Bl
cmF0aW9uLCB0aGUKLS8vIGZpZWxkIG1hc2sgYXBwbGllcyBkaXJlY3RseSB0byB0aGUgcmVzcG9u
c2UsIGJ1dCBpbiBjYXNlIG9mIGEgUkVTVAotLy8gbGlzdCBvcGVyYXRpb24sIHRoZSBtYXNrIGlu
c3RlYWQgYXBwbGllcyB0byBlYWNoIGluZGl2aWR1YWwgbWVzc2FnZQotLy8gaW4gdGhlIHJldHVy
bmVkIHJlc291cmNlIGxpc3QuIEluIGNhc2Ugb2YgYSBSRVNUIGN1c3RvbSBtZXRob2QsCi0vLyBv
dGhlciBkZWZpbml0aW9ucyBtYXkgYmUgdXNlZC4gV2hlcmUgdGhlIG1hc2sgYXBwbGllcyB3aWxs
IGJlCi0vLyBjbGVhcmx5IGRvY3VtZW50ZWQgdG9nZXRoZXIgd2l0aCBpdHMgZGVjbGFyYXRpb24g
aW4gdGhlIEFQSS4gIEluCi0vLyBhbnkgY2FzZSwgdGhlIGVmZmVjdCBvbiB0aGUgcmV0dXJuZWQg
cmVzb3VyY2UvcmVzb3VyY2VzIGlzIHJlcXVpcmVkCi0vLyBiZWhhdmlvciBmb3IgQVBJcy4KLS8v
Ci0vLyAjIEZpZWxkIE1hc2tzIGluIFVwZGF0ZSBPcGVyYXRpb25zCi0vLwotLy8gQSBmaWVsZCBt
YXNrIGluIHVwZGF0ZSBvcGVyYXRpb25zIHNwZWNpZmllcyB3aGljaCBmaWVsZHMgb2YgdGhlCi0v
LyB0YXJnZXRlZCByZXNvdXJjZSBhcmUgZ29pbmcgdG8gYmUgdXBkYXRlZC4gVGhlIEFQSSBpcyBy
ZXF1aXJlZAotLy8gdG8gb25seSBjaGFuZ2UgdGhlIHZhbHVlcyBvZiB0aGUgZmllbGRzIGFzIHNw
ZWNpZmllZCBpbiB0aGUgbWFzawotLy8gYW5kIGxlYXZlIHRoZSBvdGhlcnMgdW50b3VjaGVkLiBJ
ZiBhIHJlc291cmNlIGlzIHBhc3NlZCBpbiB0bwotLy8gZGVzY3JpYmUgdGhlIHVwZGF0ZWQgdmFs
dWVzLCB0aGUgQVBJIGlnbm9yZXMgdGhlIHZhbHVlcyBvZiBhbGwKLS8vIGZpZWxkcyBub3QgY292
ZXJlZCBieSB0aGUgbWFzay4KLS8vCi0vLyBJbiBvcmRlciB0byByZXNldCBhIGZpZWxkJ3MgdmFs
dWUgdG8gdGhlIGRlZmF1bHQsIHRoZSBmaWVsZCBtdXN0Ci0vLyBiZSBpbiB0aGUgbWFzayBhbmQg
c2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlIGluIHRoZSBwcm92aWRlZCByZXNvdXJjZS4KLS8vIEhl
bmNlLCBpbiBvcmRlciB0byByZXNldCBhbGwgZmllbGRzIG9mIGEgcmVzb3VyY2UsIHByb3ZpZGUg
YSBkZWZhdWx0Ci0vLyBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgYW5kIHNldCBhbGwgZmllbGRz
IGluIHRoZSBtYXNrLCBvciBkbwotLy8gbm90IHByb3ZpZGUgYSBtYXNrIGFzIGRlc2NyaWJlZCBi
ZWxvdy4KLS8vCi0vLyBJZiBhIGZpZWxkIG1hc2sgaXMgbm90IHByZXNlbnQgb24gdXBkYXRlLCB0
aGUgb3BlcmF0aW9uIGFwcGxpZXMgdG8KLS8vIGFsbCBmaWVsZHMgKGFzIGlmIGEgZmllbGQgbWFz
ayBvZiBhbGwgZmllbGRzIGhhcyBiZWVuIHNwZWNpZmllZCkuCi0vLyBOb3RlIHRoYXQgaW4gdGhl
IHByZXNlbmNlIG9mIHNjaGVtYSBldm9sdXRpb24sIHRoaXMgbWF5IG1lYW4gdGhhdAotLy8gZmll
bGRzIHRoZSBjbGllbnQgZG9lcyBub3Qga25vdyBhbmQgaGFzIHRoZXJlZm9yZSBub3QgZmlsbGVk
IGludG8KLS8vIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmVzZXQgdG8gdGhlaXIgZGVmYXVsdC4gSWYg
dGhpcyBpcyB1bndhbnRlZAotLy8gYmVoYXZpb3IsIGEgc3BlY2lmaWMgc2VydmljZSBtYXkgcmVx
dWlyZSBhIGNsaWVudCB0byBhbHdheXMgc3BlY2lmeQotLy8gYSBmaWVsZCBtYXNrLCBwcm9kdWNp
bmcgYW4gZXJyb3IgaWYgbm90LgotLy8KLS8vIEFzIHdpdGggZ2V0IG9wZXJhdGlvbnMsIHRoZSBs
b2NhdGlvbiBvZiB0aGUgcmVzb3VyY2Ugd2hpY2gKLS8vIGRlc2NyaWJlcyB0aGUgdXBkYXRlZCB2
YWx1ZXMgaW4gdGhlIHJlcXVlc3QgbWVzc2FnZSBkZXBlbmRzIG9uIHRoZQotLy8gb3BlcmF0aW9u
IGtpbmQuIEluIGFueSBjYXNlLCB0aGUgZWZmZWN0IG9mIHRoZSBmaWVsZCBtYXNrIGlzCi0vLyBy
ZXF1aXJlZCB0byBiZSBob25vcmVkIGJ5IHRoZSBBUEkuCi0vLwotLy8gIyMgQ29uc2lkZXJhdGlv
bnMgZm9yIEhUVFAgUkVTVAotLy8KLS8vIFRoZSBIVFRQIGtpbmQgb2YgYW4gdXBkYXRlIG9wZXJh
dGlvbiB3aGljaCB1c2VzIGEgZmllbGQgbWFzayBtdXN0Ci0vLyBiZSBzZXQgdG8gUEFUQ0ggaW5z
dGVhZCBvZiBQVVQgaW4gb3JkZXIgdG8gc2F0aXNmeSBIVFRQIHNlbWFudGljcwotLy8gKFBVVCBt
dXN0IG9ubHkgYmUgdXNlZCBmb3IgZnVsbCB1cGRhdGVzKS4KLS8vCi0vLyAjIEpTT04gRW5jb2Rp
bmcgb2YgRmllbGQgTWFza3MKLS8vCi0vLyBJbiBKU09OLCBhIGZpZWxkIG1hc2sgaXMgZW5jb2Rl
ZCBhcyBhIHNpbmdsZSBzdHJpbmcgd2hlcmUgcGF0aHMgYXJlCi0vLyBzZXBhcmF0ZWQgYnkgYSBj
b21tYS4gRmllbGRzIG5hbWUgaW4gZWFjaCBwYXRoIGFyZSBjb252ZXJ0ZWQKLS8vIHRvL2Zyb20g
bG93ZXItY2FtZWwgbmFtaW5nIGNvbnZlbnRpb25zLgotLy8KLS8vIEFzIGFuIGV4YW1wbGUsIGNv
bnNpZGVyIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSBkZWNsYXJhdGlvbnM6Ci0vLwotLy8gICAgIG1l
c3NhZ2UgUHJvZmlsZSB7Ci0vLyAgICAgICBVc2VyIHVzZXIgPSAxOwotLy8gICAgICAgUGhvdG8g
cGhvdG8gPSAyOwotLy8gICAgIH0KLS8vICAgICBtZXNzYWdlIFVzZXIgewotLy8gICAgICAgc3Ry
aW5nIGRpc3BsYXlfbmFtZSA9IDE7Ci0vLyAgICAgICBzdHJpbmcgYWRkcmVzcyA9IDI7Ci0vLyAg
ICAgfQotLy8KLS8vIEluIHByb3RvIGEgZmllbGQgbWFzayBmb3IgYFByb2ZpbGVgIG1heSBsb29r
IGFzIHN1Y2g6Ci0vLwotLy8gICAgIG1hc2sgewotLy8gICAgICAgcGF0aHM6ICJ1c2VyLmRpc3Bs
YXlfbmFtZSIKLS8vICAgICAgIHBhdGhzOiAicGhvdG8iCi0vLyAgICAgfQotLy8KLS8vIEluIEpT
T04sIHRoZSBzYW1lIG1hc2sgaXMgcmVwcmVzZW50ZWQgYXMgYmVsb3c6Ci0vLwotLy8gICAgIHsK
LS8vICAgICAgIG1hc2s6ICJ1c2VyLmRpc3BsYXlOYW1lLHBob3RvIgotLy8gICAgIH0KLS8vCi0v
LyAjIEZpZWxkIE1hc2tzIGFuZCBPbmVvZiBGaWVsZHMKLS8vCi0vLyBGaWVsZCBtYXNrcyB0cmVh
dCBmaWVsZHMgaW4gb25lb2ZzIGp1c3QgYXMgcmVndWxhciBmaWVsZHMuIENvbnNpZGVyIHRoZQot
Ly8gZm9sbG93aW5nIG1lc3NhZ2U6Ci0vLwotLy8gICAgIG1lc3NhZ2UgU2FtcGxlTWVzc2FnZSB7
Ci0vLyAgICAgICBvbmVvZiB0ZXN0X29uZW9mIHsKLS8vICAgICAgICAgc3RyaW5nIG5hbWUgPSA0
OwotLy8gICAgICAgICBTdWJNZXNzYWdlIHN1Yl9tZXNzYWdlID0gOTsKLS8vICAgICAgIH0KLS8v
ICAgICB9Ci0vLwotLy8gVGhlIGZpZWxkIG1hc2sgY2FuIGJlOgotLy8KLS8vICAgICBtYXNrIHsK
LS8vICAgICAgIHBhdGhzOiAibmFtZSIKLS8vICAgICB9Ci0vLwotLy8gT3I6Ci0vLwotLy8gICAg
IG1hc2sgewotLy8gICAgICAgcGF0aHM6ICJzdWJfbWVzc2FnZSIKLS8vICAgICB9Ci0vLwotLy8g
Tm90ZSB0aGF0IG9uZW9mIHR5cGUgbmFtZXMgKCJ0ZXN0X29uZW9mIiBpbiB0aGlzIGNhc2UpIGNh
bm5vdCBiZSB1c2VkIGluCi0vLyBwYXRocy4KLW1lc3NhZ2UgRmllbGRNYXNrIHsKLSAgLy8gVGhl
IHNldCBvZiBmaWVsZCBtYXNrIHBhdGhzLgotICByZXBlYXRlZCBzdHJpbmcgcGF0aHMgPSAxOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9lbnVtX3JlZmxlY3Rp
b24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfZW51bV9yZWZsZWN0aW9uLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkY2RjMjc3OTA5ZWVkNDQ0ZmY4ZDdmZDdiYzg5
N2E5YjNjZmM3NDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9lbnVtX3JlZmxlY3Rpb24uaAorKysgL2Rl
di9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyBBdXRob3I6IGphc29uaEBnb29nbGUuY29tIChKYXNvbiBIc3VlaCkKLS8vCi0vLyBU
aGlzIGhlYWRlciBpcyBsb2dpY2FsbHkgaW50ZXJuYWwsIGJ1dCBpcyBtYWRlIHB1YmxpYyBiZWNh
dXNlIGl0IGlzIHVzZWQKLS8vIGZyb20gcHJvdG9jb2wtY29tcGlsZXItZ2VuZXJhdGVkIGNvZGUs
IHdoaWNoIG1heSByZXNpZGUgaW4gb3RoZXIgY29tcG9uZW50cy4KLS8vIEl0IHByb3ZpZGVzIHJl
ZmxlY3Rpb24gc3VwcG9ydCBmb3IgZ2VuZXJhdGVkIGVudW1zLCBhbmQgaXMgaW5jbHVkZWQgaW4K
LS8vIGdlbmVyYXRlZCAucGIuaCBmaWxlcyBhbmQgc2hvdWxkIGhhdmUgbWluaW1hbCBkZXBlbmRl
bmNpZXMuIFRoZSBtZXRob2RzIGFyZQotLy8gaW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkX21lc3Nh
Z2VfcmVmbGVjdGlvbi5jYy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX0VO
VU1fUkVGTEVDVElPTl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9FTlVN
X1JFRkxFQ1RJT05fSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvdGVtcGxhdGVfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9nZW5lcmF0ZWRfZW51bV91dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLSAgY2xhc3MgRW51bURlc2NyaXB0b3I7Ci19ICAvLyBuYW1lc3BhY2UgcHJv
dG9idWYKLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotLy8gUmV0dXJucyB0aGUgRW51bURlc2Ny
aXB0b3IgZm9yIGVudW0gdHlwZSBFLCB3aGljaCBtdXN0IGJlIGEKLS8vIHByb3RvLWRlY2xhcmVk
IGVudW0gdHlwZS4gIENvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBjb21waWxlcgotLy8g
d2lsbCBpbmNsdWRlIHNwZWNpYWxpemF0aW9ucyBvZiB0aGlzIHRlbXBsYXRlIGZvciBlYWNoIGVu
dW0gdHlwZSBkZWNsYXJlZC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBFPgotY29uc3QgRW51bURlc2Ny
aXB0b3IqIEdldEVudW1EZXNjcmlwdG9yKCk7Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8v
IEhlbHBlciBmb3IgRW51bVR5cGVfUGFyc2UgZnVuY3Rpb25zOiB0cnkgdG8gcGFyc2UgdGhlIHN0
cmluZyAnbmFtZScgYXMgYW4KLS8vIGVudW0gbmFtZSBvZiB0aGUgZ2l2ZW4gdHlwZSwgcmV0dXJu
aW5nIHRydWUgYW5kIGZpbGxpbmcgaW4gdmFsdWUgb24gc3VjY2VzcywKLS8vIG9yIHJldHVybmlu
ZyBmYWxzZSBhbmQgbGVhdmluZyB2YWx1ZSB1bmNoYW5nZWQgb24gZmFpbHVyZS4KLUxJQlBST1RP
QlVGX0VYUE9SVCBib29sIFBhcnNlTmFtZWRFbnVtKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBkZXNj
cmlwdG9yLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgIGludCogdmFsdWUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbnVtVHlwZT4K
LWJvb2wgUGFyc2VOYW1lZEVudW0oY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgRW51bVR5cGUqIHZhbHVlKSB7Ci0gIGludCB0bXA7Ci0gIGlmICghUGFyc2VOYW1lZEVudW0o
ZGVzY3JpcHRvciwgbmFtZSwgJnRtcCkpIHJldHVybiBmYWxzZTsKLSAgKnZhbHVlID0gc3RhdGlj
X2Nhc3Q8RW51bVR5cGU+KHRtcCk7Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyBKdXN0IGEgd3Jh
cHBlciBhcm91bmQgcHJpbnRpbmcgdGhlIG5hbWUgb2YgYSB2YWx1ZS4gVGhlIG1haW4gcG9pbnQg
b2YgdGhpcwotLy8gZnVuY3Rpb24gaXMgbm90IHRvIGJlIGlubGluZWQsIHNvIHRoYXQgeW91IGNh
biBkbyB0aGlzIHdpdGhvdXQgaW5jbHVkaW5nCi0vLyBkZXNjcmlwdG9yLmguCi1MSUJQUk9UT0JV
Rl9FWFBPUlQgY29uc3Qgc3RyaW5nJiBOYW1lT2ZFbnVtKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yLCBpbnQgdmFsdWUpOwotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8v
IG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8v
IEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfRU5VTV9SRUZMRUNUSU9OX0hfXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9lbnVtX3V0aWwuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9nZW5lcmF0ZWRfZW51bV91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU0MjQyMDU1ZTk5MWEyZjU4MTY2OWMyMTk4ZmZjOTA5Nzk0ZGE5YWMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2dl
bmVyYXRlZF9lbnVtX3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfRU5VTV9VVElMX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVE
X0VOVU1fVVRJTF9IX18KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy90ZW1wbGF0
ZV91dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQot
Ly8gVGhpcyB0eXBlIHRyYWl0IGNhbiBiZSB1c2VkIHRvIGNhdXNlIHRlbXBsYXRlcyB0byBvbmx5
IG1hdGNoIHByb3RvMiBlbnVtCi0vLyB0eXBlcy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1
Y3QgaXNfcHJvdG9fZW51bSA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OmZhbHNlX3R5
cGUge307Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfRU5VTV9VVElMX0hfXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rp
b24uY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5j
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMxMzE4MWNjOTk1MjIwZmUzOWNlMjMy
MzZlMzY1YjQ2N2UwNTI3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5j
YworKysgL2Rldi9udWxsCkBAIC0xLDIzMTggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJk
YSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8g
IFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8YWxn
b3JpdGhtPgotI2luY2x1ZGUgPHNldD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZXh0
ZW5zaW9uX3NldC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2Fn
ZV9yZWZsZWN0aW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNz
YWdlX3V0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmg+Ci0KLQotI2RlZmluZSBHT09H
TEVfUFJPVE9CVUZfSEFTX09ORU9GCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLW5hbWVzcGFjZSB7Ci1ib29sIElzTWFw
RmllbGRJbkFwaShjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHJldHVybiBmaWVs
ZC0+aXNfbWFwKCk7Ci19Ci19ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLWJvb2wgUGFyc2VO
YW1lZEVudW0oY29uc3QgRW51bURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgaW50KiB2YWx1
ZSkgewotICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBkID0gZGVzY3JpcHRvci0+RmluZFZh
bHVlQnlOYW1lKG5hbWUpOwotICBpZiAoZCA9PSBOVUxMKSByZXR1cm4gZmFsc2U7Ci0gICp2YWx1
ZSA9IGQtPm51bWJlcigpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3Qgc3RyaW5nJiBOYW1l
T2ZFbnVtKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBpbnQgdmFsdWUpIHsKLSAg
Y29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogZCA9IGRlc2NyaXB0b3ItPkZpbmRWYWx1ZUJ5TnVt
YmVyKHZhbHVlKTsKLSAgcmV0dXJuIChkID09IE5VTEwgPyBHZXRFbXB0eVN0cmluZygpIDogZC0+
bmFtZSgpKTsKLX0KLQotbmFtZXNwYWNlIHsKLWlubGluZSBib29sIFN1cHBvcnRzQXJlbmFzKGNv
bnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgcmV0dXJuIGRlc2NyaXB0b3ItPmZpbGUo
KS0+b3B0aW9ucygpLmNjX2VuYWJsZV9hcmVuYXMoKTsKLX0KLX0gIC8vIGFub255bW91cyBuYW1l
c3BhY2UKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLy8gSGVscGVycyBmb3IgcmVwb3J0aW5nIHVzYWdlIGVy
cm9ycyAoZS5nLiB0cnlpbmcgdG8gdXNlIEdldEludDMyKCkgb24KLS8vIGEgc3RyaW5nIGZpZWxk
KS4KLQotbmFtZXNwYWNlIHsKLQotdm9pZCBSZXBvcnRSZWZsZWN0aW9uVXNhZ2VFcnJvcigKLSAg
ICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkLAotICAgIGNvbnN0IGNoYXIqIG1ldGhvZCwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pIHsK
LSAgR09PR0xFX0xPRyhGQVRBTCkKLSAgICA8PCAiUHJvdG9jb2wgQnVmZmVyIHJlZmxlY3Rpb24g
dXNhZ2UgZXJyb3I6XG4iCi0gICAgICAgIiAgTWV0aG9kICAgICAgOiBnb29nbGU6OnByb3RvYnVm
OjpSZWZsZWN0aW9uOjoiIDw8IG1ldGhvZCA8PCAiXG4iCi0gICAgICAgIiAgTWVzc2FnZSB0eXBl
OiAiIDw8IGRlc2NyaXB0b3ItPmZ1bGxfbmFtZSgpIDw8ICJcbiIKLSAgICAgICAiICBGaWVsZCAg
ICAgICA6ICIgPDwgZmllbGQtPmZ1bGxfbmFtZSgpIDw8ICJcbiIKLSAgICAgICAiICBQcm9ibGVt
ICAgICA6ICIgPDwgZGVzY3JpcHRpb247Ci19Ci0KLWNvbnN0IGNoYXIqIGNwcHR5cGVfbmFtZXNf
W0ZpZWxkRGVzY3JpcHRvcjo6TUFYX0NQUFRZUEUgKyAxXSA9IHsKLSAgIklOVkFMSURfQ1BQVFlQ
RSIsCi0gICJDUFBUWVBFX0lOVDMyIiwKLSAgIkNQUFRZUEVfSU5UNjQiLAotICAiQ1BQVFlQRV9V
SU5UMzIiLAotICAiQ1BQVFlQRV9VSU5UNjQiLAotICAiQ1BQVFlQRV9ET1VCTEUiLAotICAiQ1BQ
VFlQRV9GTE9BVCIsCi0gICJDUFBUWVBFX0JPT0wiLAotICAiQ1BQVFlQRV9FTlVNIiwKLSAgIkNQ
UFRZUEVfU1RSSU5HIiwKLSAgIkNQUFRZUEVfTUVTU0FHRSIKLX07Ci0KLXN0YXRpYyB2b2lkIFJl
cG9ydFJlZmxlY3Rpb25Vc2FnZVR5cGVFcnJvcigKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNj
cmlwdG9yLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIGNvbnN0IGNoYXIqIG1l
dGhvZCwKLSAgICBGaWVsZERlc2NyaXB0b3I6OkNwcFR5cGUgZXhwZWN0ZWRfdHlwZSkgewotICBH
T09HTEVfTE9HKEZBVEFMKQotICAgIDw8ICJQcm90b2NvbCBCdWZmZXIgcmVmbGVjdGlvbiB1c2Fn
ZSBlcnJvcjpcbiIKLSAgICAgICAiICBNZXRob2QgICAgICA6IGdvb2dsZTo6cHJvdG9idWY6OlJl
ZmxlY3Rpb246OiIgPDwgbWV0aG9kIDw8ICJcbiIKLSAgICAgICAiICBNZXNzYWdlIHR5cGU6ICIg
PDwgZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCkgPDwgIlxuIgotICAgICAgICIgIEZpZWxkICAgICAg
IDogIiA8PCBmaWVsZC0+ZnVsbF9uYW1lKCkgPDwgIlxuIgotICAgICAgICIgIFByb2JsZW0gICAg
IDogRmllbGQgaXMgbm90IHRoZSByaWdodCB0eXBlIGZvciB0aGlzIG1lc3NhZ2U6XG4iCi0gICAg
ICAgIiAgICBFeHBlY3RlZCAgOiAiIDw8IGNwcHR5cGVfbmFtZXNfW2V4cGVjdGVkX3R5cGVdIDw8
ICJcbiIKLSAgICAgICAiICAgIEZpZWxkIHR5cGU6ICIgPDwgY3BwdHlwZV9uYW1lc19bZmllbGQt
PmNwcF90eXBlKCldOwotfQotCi1zdGF0aWMgdm9pZCBSZXBvcnRSZWZsZWN0aW9uVXNhZ2VFbnVt
VHlwZUVycm9yKAotICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZmllbGQsCi0gICAgY29uc3QgY2hhciogbWV0aG9kLCBjb25zdCBFbnVtVmFs
dWVEZXNjcmlwdG9yKiB2YWx1ZSkgewotICBHT09HTEVfTE9HKEZBVEFMKQotICAgIDw8ICJQcm90
b2NvbCBCdWZmZXIgcmVmbGVjdGlvbiB1c2FnZSBlcnJvcjpcbiIKLSAgICAgICAiICBNZXRob2Qg
ICAgICA6IGdvb2dsZTo6cHJvdG9idWY6OlJlZmxlY3Rpb246OiIgPDwgbWV0aG9kIDw8ICJcbiIK
LSAgICAgICAiICBNZXNzYWdlIHR5cGU6ICIgPDwgZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCkgPDwg
IlxuIgotICAgICAgICIgIEZpZWxkICAgICAgIDogIiA8PCBmaWVsZC0+ZnVsbF9uYW1lKCkgPDwg
IlxuIgotICAgICAgICIgIFByb2JsZW0gICAgIDogRW51bSB2YWx1ZSBkaWQgbm90IG1hdGNoIGZp
ZWxkIHR5cGU6XG4iCi0gICAgICAgIiAgICBFeHBlY3RlZCAgOiAiIDw8IGZpZWxkLT5lbnVtX3R5
cGUoKS0+ZnVsbF9uYW1lKCkgPDwgIlxuIgotICAgICAgICIgICAgQWN0dWFsICAgIDogIiA8PCB2
YWx1ZS0+ZnVsbF9uYW1lKCk7Ci19Ci0KLSNkZWZpbmUgVVNBR0VfQ0hFQ0soQ09ORElUSU9OLCBN
RVRIT0QsIEVSUk9SX0RFU0NSSVBUSU9OKSAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICgh
KENPTkRJVElPTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIFJlcG9ydFJlZmxlY3Rpb25Vc2FnZUVycm9yKGRlc2NyaXB0
b3JfLCBmaWVsZCwgI01FVEhPRCwgRVJST1JfREVTQ1JJUFRJT04pCi0jZGVmaW5lIFVTQUdFX0NI
RUNLX0VRKEEsIEIsIE1FVEhPRCwgRVJST1JfREVTQ1JJUFRJT04pICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBVU0FHRV9DSEVDSygoQSkgPT0gKEIpLCBNRVRIT0QsIEVSUk9SX0RFU0NSSVBU
SU9OKQotI2RlZmluZSBVU0FHRV9DSEVDS19ORShBLCBCLCBNRVRIT0QsIEVSUk9SX0RFU0NSSVBU
SU9OKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVVNBR0VfQ0hFQ0soKEEpICE9IChCKSwg
TUVUSE9ELCBFUlJPUl9ERVNDUklQVElPTikKLQotI2RlZmluZSBVU0FHRV9DSEVDS19UWVBFKE1F
VEhPRCwgQ1BQVFlQRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
aWYgKGZpZWxkLT5jcHBfdHlwZSgpICE9IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV8jI0NQUFRZ
UEUpICAgICAgICAgICAgICAgICBcCi0gICAgUmVwb3J0UmVmbGVjdGlvblVzYWdlVHlwZUVycm9y
KGRlc2NyaXB0b3JfLCBmaWVsZCwgI01FVEhPRCwgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfIyNDUFBU
WVBFKQotCi0jZGVmaW5lIFVTQUdFX0NIRUNLX0VOVU1fVkFMVUUoTUVUSE9EKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAodmFsdWUtPnR5cGUoKSAhPSBm
aWVsZC0+ZW51bV90eXBlKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBSZXBvcnRSZWZsZWN0aW9uVXNhZ2VFbnVtVHlwZUVycm9yKGRlc2NyaXB0b3JfLCBmaWVs
ZCwgI01FVEhPRCwgdmFsdWUpCi0KLSNkZWZpbmUgVVNBR0VfQ0hFQ0tfTUVTU0FHRV9UWVBFKE1F
VEhPRCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFVTQUdFX0NI
RUNLX0VRKGZpZWxkLT5jb250YWluaW5nX3R5cGUoKSwgZGVzY3JpcHRvcl8sICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBNRVRIT0QsICJGaWVsZCBkb2VzIG5vdCBt
YXRjaCBtZXNzYWdlIHR5cGUuIik7Ci0jZGVmaW5lIFVTQUdFX0NIRUNLX1NJTkdVTEFSKE1FVEhP
RCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBVU0FHRV9D
SEVDS19ORShmaWVsZC0+bGFiZWwoKSwgRmllbGREZXNjcmlwdG9yOjpMQUJFTF9SRVBFQVRFRCwg
TUVUSE9ELCAgICAgIFwKLSAgICAgICAgICAgICAgICAgIkZpZWxkIGlzIHJlcGVhdGVkOyB0aGUg
bWV0aG9kIHJlcXVpcmVzIGEgc2luZ3VsYXIgZmllbGQuIikKLSNkZWZpbmUgVVNBR0VfQ0hFQ0tf
UkVQRUFURUQoTUVUSE9EKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIFVTQUdFX0NIRUNLX0VRKGZpZWxkLT5sYWJlbCgpLCBGaWVsZERlc2NyaXB0b3I6OkxB
QkVMX1JFUEVBVEVELCBNRVRIT0QsICAgICAgXAotICAgICAgICAgICAgICAgICAiRmllbGQgaXMg
c2luZ3VsYXI7IHRoZSBtZXRob2QgcmVxdWlyZXMgYSByZXBlYXRlZCBmaWVsZC4iKQotCi0jZGVm
aW5lIFVTQUdFX0NIRUNLX0FMTChNRVRIT0QsIExBQkVMLCBDUFBUWVBFKSAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIFVTQUdFX0NIRUNLX01FU1NBR0VfVFlQRShNRVRIT0QpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBVU0FHRV9DSEVDS18jI0xBQkVMKE1FVEhP
RCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVVNBR0VfQ0hF
Q0tfVFlQRShNRVRIT0QsIENQUFRZUEUpCi0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0KLUdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVj
dGlvbigKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgIGNvbnN0IE1lc3Nh
Z2UqIGRlZmF1bHRfaW5zdGFuY2UsCi0gICAgY29uc3QgaW50IG9mZnNldHNbXSwKLSAgICBpbnQg
aGFzX2JpdHNfb2Zmc2V0LAotICAgIGludCB1bmtub3duX2ZpZWxkc19vZmZzZXQsCi0gICAgaW50
IGV4dGVuc2lvbnNfb2Zmc2V0LAotICAgIGNvbnN0IERlc2NyaXB0b3JQb29sKiBkZXNjcmlwdG9y
X3Bvb2wsCi0gICAgTWVzc2FnZUZhY3RvcnkqIGZhY3RvcnksCi0gICAgaW50IG9iamVjdF9zaXpl
LAotICAgIGludCBhcmVuYV9vZmZzZXQsCi0gICAgaW50IGlzX2RlZmF1bHRfaW5zdGFuY2Vfb2Zm
c2V0KQotICA6IGRlc2NyaXB0b3JfICAgICAgIChkZXNjcmlwdG9yKSwKLSAgICBkZWZhdWx0X2lu
c3RhbmNlXyAoZGVmYXVsdF9pbnN0YW5jZSksCi0gICAgb2Zmc2V0c18gICAgICAgICAgKG9mZnNl
dHMpLAotICAgIGhhc19iaXRzX29mZnNldF8gIChoYXNfYml0c19vZmZzZXQpLAotICAgIHVua25v
d25fZmllbGRzX29mZnNldF8odW5rbm93bl9maWVsZHNfb2Zmc2V0KSwKLSAgICBleHRlbnNpb25z
X29mZnNldF8oZXh0ZW5zaW9uc19vZmZzZXQpLAotICAgIGFyZW5hX29mZnNldF8gICAgIChhcmVu
YV9vZmZzZXQpLAotICAgIGlzX2RlZmF1bHRfaW5zdGFuY2Vfb2Zmc2V0Xyhpc19kZWZhdWx0X2lu
c3RhbmNlX29mZnNldCksCi0gICAgb2JqZWN0X3NpemVfICAgICAgKG9iamVjdF9zaXplKSwKLSAg
ICBkZXNjcmlwdG9yX3Bvb2xfICAoKGRlc2NyaXB0b3JfcG9vbCA9PSBOVUxMKSA/Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCkgOgotICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JfcG9vbCksCi0gICAgbWVzc2FnZV9mYWN0
b3J5XyAgKGZhY3RvcnkpIHsKLX0KLQotR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OkdlbmVy
YXRlZE1lc3NhZ2VSZWZsZWN0aW9uKAotICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3Is
Ci0gICAgY29uc3QgTWVzc2FnZSogZGVmYXVsdF9pbnN0YW5jZSwKLSAgICBjb25zdCBpbnQgb2Zm
c2V0c1tdLAotICAgIGludCBoYXNfYml0c19vZmZzZXQsCi0gICAgaW50IHVua25vd25fZmllbGRz
X29mZnNldCwKLSAgICBpbnQgZXh0ZW5zaW9uc19vZmZzZXQsCi0gICAgY29uc3Qgdm9pZCogZGVm
YXVsdF9vbmVvZl9pbnN0YW5jZSwKLSAgICBpbnQgb25lb2ZfY2FzZV9vZmZzZXQsCi0gICAgY29u
c3QgRGVzY3JpcHRvclBvb2wqIGRlc2NyaXB0b3JfcG9vbCwKLSAgICBNZXNzYWdlRmFjdG9yeSog
ZmFjdG9yeSwKLSAgICBpbnQgb2JqZWN0X3NpemUsCi0gICAgaW50IGFyZW5hX29mZnNldCwKLSAg
ICBpbnQgaXNfZGVmYXVsdF9pbnN0YW5jZV9vZmZzZXQpCi0gIDogZGVzY3JpcHRvcl8gICAgICAg
KGRlc2NyaXB0b3IpLAotICAgIGRlZmF1bHRfaW5zdGFuY2VfIChkZWZhdWx0X2luc3RhbmNlKSwK
LSAgICBkZWZhdWx0X29uZW9mX2luc3RhbmNlXyAoZGVmYXVsdF9vbmVvZl9pbnN0YW5jZSksCi0g
ICAgb2Zmc2V0c18gICAgICAgICAgKG9mZnNldHMpLAotICAgIGhhc19iaXRzX29mZnNldF8gICho
YXNfYml0c19vZmZzZXQpLAotICAgIG9uZW9mX2Nhc2Vfb2Zmc2V0XyhvbmVvZl9jYXNlX29mZnNl
dCksCi0gICAgdW5rbm93bl9maWVsZHNfb2Zmc2V0Xyh1bmtub3duX2ZpZWxkc19vZmZzZXQpLAot
ICAgIGV4dGVuc2lvbnNfb2Zmc2V0XyhleHRlbnNpb25zX29mZnNldCksCi0gICAgYXJlbmFfb2Zm
c2V0XyAgICAgKGFyZW5hX29mZnNldCksCi0gICAgaXNfZGVmYXVsdF9pbnN0YW5jZV9vZmZzZXRf
KGlzX2RlZmF1bHRfaW5zdGFuY2Vfb2Zmc2V0KSwKLSAgICBvYmplY3Rfc2l6ZV8gICAgICAob2Jq
ZWN0X3NpemUpLAotICAgIGRlc2NyaXB0b3JfcG9vbF8gICgoZGVzY3JpcHRvcl9wb29sID09IE5V
TEwpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yUG9vbDo6Z2VuZXJhdGVk
X3Bvb2woKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcl9wb29sKSwKLSAg
ICBtZXNzYWdlX2ZhY3RvcnlfICAoZmFjdG9yeSkgewotfQotCi1HZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbjo6fkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKCkge30KLQotbmFtZXNwYWNlIHsK
LVVua25vd25GaWVsZFNldCogZW1wdHlfdW5rbm93bl9maWVsZF9zZXRfID0gTlVMTDsKLUdPT0dM
RV9QUk9UT0JVRl9ERUNMQVJFX09OQ0UoZW1wdHlfdW5rbm93bl9maWVsZF9zZXRfb25jZV8pOwot
Ci12b2lkIERlbGV0ZUVtcHR5VW5rbm93bkZpZWxkU2V0KCkgewotICBkZWxldGUgZW1wdHlfdW5r
bm93bl9maWVsZF9zZXRfOwotICBlbXB0eV91bmtub3duX2ZpZWxkX3NldF8gPSBOVUxMOwotfQot
Ci12b2lkIEluaXRFbXB0eVVua25vd25GaWVsZFNldCgpIHsKLSAgZW1wdHlfdW5rbm93bl9maWVs
ZF9zZXRfID0gbmV3IFVua25vd25GaWVsZFNldDsKLSAgaW50ZXJuYWw6Ok9uU2h1dGRvd24oJkRl
bGV0ZUVtcHR5VW5rbm93bkZpZWxkU2V0KTsKLX0KLQotY29uc3QgVW5rbm93bkZpZWxkU2V0JiBH
ZXRFbXB0eVVua25vd25GaWVsZFNldCgpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpHb29nbGVP
bmNlSW5pdCgmZW1wdHlfdW5rbm93bl9maWVsZF9zZXRfb25jZV8sICZJbml0RW1wdHlVbmtub3du
RmllbGRTZXQpOwotICByZXR1cm4gKmVtcHR5X3Vua25vd25fZmllbGRfc2V0XzsKLX0KLX0gIC8v
IG5hbWVzcGFjZQotCi1jb25zdCBVbmtub3duRmllbGRTZXQmIEdlbmVyYXRlZE1lc3NhZ2VSZWZs
ZWN0aW9uOjpHZXRVbmtub3duRmllbGRzKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UpIGNv
bnN0IHsKLSAgaWYgKGRlc2NyaXB0b3JfLT5maWxlKCktPnN5bnRheCgpID09IEZpbGVEZXNjcmlw
dG9yOjpTWU5UQVhfUFJPVE8zKSB7Ci0gICAgcmV0dXJuIEdldEVtcHR5VW5rbm93bkZpZWxkU2V0
KCk7Ci0gIH0KLSAgaWYgKHVua25vd25fZmllbGRzX29mZnNldF8gPT0ga1Vua25vd25GaWVsZFNl
dEluTWV0YWRhdGEpIHsKLSAgICByZXR1cm4gR2V0SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSht
ZXNzYWdlKS51bmtub3duX2ZpZWxkcygpOwotICB9Ci0gIGNvbnN0IHZvaWQqIHB0ciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgqPigmbWVzc2FnZSkgKwotICAgICAgICAgICAgICAgICAg
ICB1bmtub3duX2ZpZWxkc19vZmZzZXRfOwotICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgVW5rbm93bkZpZWxkU2V0Kj4ocHRyKTsKLX0KLQotVW5rbm93bkZpZWxkU2V0KiBHZW5lcmF0
ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TXV0YWJsZVVua25vd25GaWVsZHMoCi0gICAgTWVzc2FnZSog
bWVzc2FnZSkgY29uc3QgewotICBpZiAodW5rbm93bl9maWVsZHNfb2Zmc2V0XyA9PSBrVW5rbm93
bkZpZWxkU2V0SW5NZXRhZGF0YSkgewotICAgIHJldHVybiBNdXRhYmxlSW50ZXJuYWxNZXRhZGF0
YVdpdGhBcmVuYShtZXNzYWdlKS0+Ci0gICAgICAgIG11dGFibGVfdW5rbm93bl9maWVsZHMoKTsK
LSAgfQotICB2b2lkKiBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4obWVzc2FnZSkgKyB1
bmtub3duX2ZpZWxkc19vZmZzZXRfOwotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxVbmtub3du
RmllbGRTZXQqPihwdHIpOwotfQotCi1pbnQgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OlNw
YWNlVXNlZChjb25zdCBNZXNzYWdlJiBtZXNzYWdlKSBjb25zdCB7Ci0gIC8vIG9iamVjdF9zaXpl
XyBhbHJlYWR5IGluY2x1ZGVzIHRoZSBpbi1tZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgZWFjaCBm
aWVsZAotICAvLyBpbiB0aGUgbWVzc2FnZSwgc28gd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9y
IGFkZGl0aW9uYWwgbWVtb3J5IHVzZWQgYnkKLSAgLy8gdGhlIGZpZWxkcy4KLSAgaW50IHRvdGFs
X3NpemUgPSBvYmplY3Rfc2l6ZV87Ci0KLSAgdG90YWxfc2l6ZSArPSBHZXRVbmtub3duRmllbGRz
KG1lc3NhZ2UpLlNwYWNlVXNlZEV4Y2x1ZGluZ1NlbGYoKTsKLQotICBpZiAoZXh0ZW5zaW9uc19v
ZmZzZXRfICE9IC0xKSB7Ci0gICAgdG90YWxfc2l6ZSArPSBHZXRFeHRlbnNpb25TZXQobWVzc2Fn
ZSkuU3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0b3JfLT5maWVsZChpKTsKLQotICAgIGlmIChmaWVsZC0+
aXNfcmVwZWF0ZWQoKSkgewotICAgICAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotI2Rl
ZmluZSBIQU5ETEVfVFlQRShVUFBFUkNBU0UsIExPV0VSQ0FTRSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV8jI1VQUEVSQ0FTRSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHRv
dGFsX3NpemUgKz0gR2V0UmF3PFJlcGVhdGVkRmllbGQ8TE9XRVJDQVNFPiA+KG1lc3NhZ2UsIGZp
ZWxkKSAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAuU3BhY2VVc2VkRXhjbHVkaW5n
U2VsZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGJyZWFrCi0KLSAg
ICAgICAgSEFORExFX1RZUEUoIElOVDMyLCAgaW50MzIpOwotICAgICAgICBIQU5ETEVfVFlQRSgg
SU5UNjQsICBpbnQ2NCk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKFVJTlQzMiwgdWludDMyKTsKLSAg
ICAgICAgSEFORExFX1RZUEUoVUlOVDY0LCB1aW50NjQpOwotICAgICAgICBIQU5ETEVfVFlQRShE
T1VCTEUsIGRvdWJsZSk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKCBGTE9BVCwgIGZsb2F0KTsKLSAg
ICAgICAgSEFORExFX1RZUEUoICBCT09MLCAgIGJvb2wpOwotICAgICAgICBIQU5ETEVfVFlQRSgg
IEVOVU0sICAgIGludCk7Ci0jdW5kZWYgSEFORExFX1RZUEUKLQotICAgICAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6Ci0gICAgICAgICAgc3dpdGNoIChmaWVsZC0+b3B0
aW9ucygpLmN0eXBlKCkpIHsKLSAgICAgICAgICAgIGRlZmF1bHQ6ICAvLyBUT0RPKGtlbnRvbik6
ICBTdXBwb3J0IG90aGVyIHN0cmluZyByZXBzLgotICAgICAgICAgICAgY2FzZSBGaWVsZE9wdGlv
bnM6OlNUUklORzoKLSAgICAgICAgICAgICAgdG90YWxfc2l6ZSArPSBHZXRSYXc8UmVwZWF0ZWRQ
dHJGaWVsZDxzdHJpbmc+ID4obWVzc2FnZSwgZmllbGQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuU3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpOwotICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgICBpZiAoSXNNYXBGaWVsZEluQXBpKGZp
ZWxkKSkgewotICAgICAgICAgICAgdG90YWxfc2l6ZSArPQotICAgICAgICAgICAgICAgIEdldFJh
dzxNYXBGaWVsZEJhc2U+KG1lc3NhZ2UsIGZpZWxkKS5TcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCk7
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2gg
c3ViY2xhc3Mgb2YgUmVwZWF0ZWRQdHJGaWVsZEJhc2UgdGhlIHR5cGUgaXMsCi0gICAgICAgICAg
ICAvLyBzbyB3ZSB1c2UgUmVwZWF0ZWRQdHJGaWVsZEJhc2UgZGlyZWN0bHkuCi0gICAgICAgICAg
ICB0b3RhbF9zaXplICs9Ci0gICAgICAgICAgICAgICAgR2V0UmF3PFJlcGVhdGVkUHRyRmllbGRC
YXNlPihtZXNzYWdlLCBmaWVsZCkKLSAgICAgICAgICAgICAgICAgIC5TcGFjZVVzZWRFeGNsdWRp
bmdTZWxmPEdlbmVyaWNUeXBlSGFuZGxlcjxNZXNzYWdlPiA+KCk7Ci0gICAgICAgICAgfQotCi0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChmaWVsZC0+
Y29udGFpbmluZ19vbmVvZigpICYmICFIYXNPbmVvZkZpZWxkKG1lc3NhZ2UsIGZpZWxkKSkgewot
ICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIHN3aXRjaCAoZmllbGQtPmNwcF90eXBl
KCkpIHsKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UMzIgOgotICAg
ICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQ2NCA6Ci0gICAgICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQzMjoKLSAgICAgICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfVUlOVDY0OgotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQ
VFlQRV9ET1VCTEU6Ci0gICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FU
IDoKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTCAgOgotICAgICAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNICA6Ci0gICAgICAgICAgLy8gRmll
bGQgaXMgaW5saW5lLCBzbyB3ZSd2ZSBhbHJlYWR5IGNvdW50ZWQgaXQuCi0gICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOiB7Ci0g
ICAgICAgICAgc3dpdGNoIChmaWVsZC0+b3B0aW9ucygpLmN0eXBlKCkpIHsKLSAgICAgICAgICAg
IGRlZmF1bHQ6ICAvLyBUT0RPKGtlbnRvbik6ICBTdXBwb3J0IG90aGVyIHN0cmluZyByZXBzLgot
ICAgICAgICAgICAgY2FzZSBGaWVsZE9wdGlvbnM6OlNUUklORzogewotICAgICAgICAgICAgICAv
LyBJbml0aWFsbHksIHRoZSBzdHJpbmcgcG9pbnRzIHRvIHRoZSBkZWZhdWx0IHZhbHVlIHN0b3Jl
ZCBpbgotICAgICAgICAgICAgICAvLyB0aGUgcHJvdG90eXBlLiBPbmx5IGNvdW50IHRoZSBzdHJp
bmcgaWYgaXQgaGFzIGJlZW4gY2hhbmdlZAotICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBkZWZh
dWx0IHZhbHVlLgotICAgICAgICAgICAgICBjb25zdCBzdHJpbmcqIGRlZmF1bHRfcHRyID0KLSAg
ICAgICAgICAgICAgICAgICZEZWZhdWx0UmF3PEFyZW5hU3RyaW5nUHRyPihmaWVsZCkuR2V0KE5V
TEwpOwotICAgICAgICAgICAgICBjb25zdCBzdHJpbmcqIHB0ciA9Ci0gICAgICAgICAgICAgICAg
ICAmR2V0RmllbGQ8QXJlbmFTdHJpbmdQdHI+KG1lc3NhZ2UsIGZpZWxkKS5HZXQoZGVmYXVsdF9w
dHIpOwotCi0gICAgICAgICAgICAgIGlmIChwdHIgIT0gZGVmYXVsdF9wdHIpIHsKLSAgICAgICAg
ICAgICAgICAvLyBzdHJpbmcgZmllbGRzIGFyZSByZXByZXNlbnRlZCBieSBqdXN0IGEgcG9pbnRl
ciwgc28gYWxzbwotICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgc2l6ZW9mKHN0cmluZykgYXMg
d2VsbC4KLSAgICAgICAgICAgICAgICB0b3RhbF9zaXplICs9IHNpemVvZigqcHRyKSArIFN0cmlu
Z1NwYWNlVXNlZEV4Y2x1ZGluZ1NlbGYoKnB0cik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVT
U0FHRToKLSAgICAgICAgICBpZiAoJm1lc3NhZ2UgPT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAg
ICAgICAgICAgIC8vIEZvciBzaW5ndWxhciBmaWVsZHMsIHRoZSBwcm90b3R5cGUganVzdCBzdG9y
ZXMgYSBwb2ludGVyIHRvIHRoZQotICAgICAgICAgICAgLy8gZXh0ZXJuYWwgdHlwZSdzIHByb3Rv
dHlwZSwgc28gdGhlcmUgaXMgbm8gZXh0cmEgbWVtb3J5IHVzYWdlLgotICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBjb25zdCBNZXNzYWdlKiBzdWJfbWVzc2FnZSA9IEdldFJhdzxjb25z
dCBNZXNzYWdlKj4obWVzc2FnZSwgZmllbGQpOwotICAgICAgICAgICAgaWYgKHN1Yl9tZXNzYWdl
ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgdG90YWxfc2l6ZSArPSBzdWJfbWVzc2FnZS0+U3Bh
Y2VVc2VkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiB0b3RhbF9zaXplOwotfQotCi12b2lkIEdl
bmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpTd2FwRmllbGQoCi0gICAgTWVzc2FnZSogbWVzc2Fn
ZTEsCi0gICAgTWVzc2FnZSogbWVzc2FnZTIsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCkgY29uc3QgewotICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICBzd2l0Y2gg
KGZpZWxkLT5jcHBfdHlwZSgpKSB7Ci0jZGVmaW5lIFNXQVBfQVJSQVlTKENQUFRZUEUsIFRZUEUp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6Q1BQVFlQRV8jI0NQUFRZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIE11dGFibGVSYXc8UmVwZWF0ZWRGaWVsZDxUWVBFPiA+KG1lc3NhZ2UxLCBmaWVs
ZCktPlN3YXAoICAgICAgICBcCi0gICAgICAgICAgICBNdXRhYmxlUmF3PFJlcGVhdGVkRmllbGQ8
VFlQRT4gPihtZXNzYWdlMiwgZmllbGQpKTsgICAgICAgICBcCi0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBTV0FQX0FSUkFZUyhJTlQzMiAsIGludDMyICk7Ci0gICAgICBTV0FQX0FSUkFZUyhJTlQ2
NCAsIGludDY0ICk7Ci0gICAgICBTV0FQX0FSUkFZUyhVSU5UMzIsIHVpbnQzMik7Ci0gICAgICBT
V0FQX0FSUkFZUyhVSU5UNjQsIHVpbnQ2NCk7Ci0gICAgICBTV0FQX0FSUkFZUyhGTE9BVCAsIGZs
b2F0ICk7Ci0gICAgICBTV0FQX0FSUkFZUyhET1VCTEUsIGRvdWJsZSk7Ci0gICAgICBTV0FQX0FS
UkFZUyhCT09MICAsIGJvb2wgICk7Ci0gICAgICBTV0FQX0FSUkFZUyhFTlVNICAsIGludCAgICk7
Ci0jdW5kZWYgU1dBUF9BUlJBWVMKLQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfU1RSSU5HOgotICAgICAgICBzd2l0Y2ggKGZpZWxkLT5vcHRpb25zKCkuY3R5cGUoKSkgewot
ICAgICAgICAgIGRlZmF1bHQ6ICAvLyBUT0RPKGtlbnRvbik6ICBTdXBwb3J0IG90aGVyIHN0cmlu
ZyByZXBzLgotICAgICAgICAgIGNhc2UgRmllbGRPcHRpb25zOjpTVFJJTkc6Ci0gICAgICAgICAg
ICBNdXRhYmxlUmF3PFJlcGVhdGVkUHRyRmllbGRCYXNlPihtZXNzYWdlMSwgZmllbGQpLT4KLSAg
ICAgICAgICAgICAgICBTd2FwPEdlbmVyaWNUeXBlSGFuZGxlcjxzdHJpbmc+ID4oCi0gICAgICAg
ICAgICAgICAgICAgIE11dGFibGVSYXc8UmVwZWF0ZWRQdHJGaWVsZEJhc2U+KG1lc3NhZ2UyLCBm
aWVsZCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgICBpZiAo
SXNNYXBGaWVsZEluQXBpKGZpZWxkKSkgewotICAgICAgICAgIE11dGFibGVSYXc8TWFwRmllbGRC
YXNlPihtZXNzYWdlMSwgZmllbGQpLT4KLSAgICAgICAgICAgIE11dGFibGVSZXBlYXRlZEZpZWxk
KCktPgotICAgICAgICAgICAgICBTd2FwPEdlbmVyaWNUeXBlSGFuZGxlcjxnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlPiA+KAotICAgICAgICAgICAgICAgIE11dGFibGVSYXc8TWFwRmllbGRCYXNl
PihtZXNzYWdlMiwgZmllbGQpLT4KLSAgICAgICAgICAgICAgICAgIE11dGFibGVSZXBlYXRlZEZp
ZWxkKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIE11dGFibGVSYXc8UmVwZWF0ZWRQ
dHJGaWVsZEJhc2U+KG1lc3NhZ2UxLCBmaWVsZCktPgotICAgICAgICAgICAgU3dhcDxHZW5lcmlj
VHlwZUhhbmRsZXI8Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZT4gPigKLSAgICAgICAgICAgICAg
TXV0YWJsZVJhdzxSZXBlYXRlZFB0ckZpZWxkQmFzZT4obWVzc2FnZTIsIGZpZWxkKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdPT0dMRV9M
T0coRkFUQUwpIDw8ICJVbmltcGxlbWVudGVkIHR5cGU6ICIgPDwgZmllbGQtPmNwcF90eXBlKCk7
Ci0gICAgfQotICB9IGVsc2UgewotICAgIHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSNk
ZWZpbmUgU1dBUF9WQUxVRVMoQ1BQVFlQRSwgVFlQRSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFXyMjQ1BQ
VFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RkOjpzd2FwKCpNdXRh
YmxlUmF3PFRZUEU+KG1lc3NhZ2UxLCBmaWVsZCksICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgICpNdXRhYmxlUmF3PFRZUEU+KG1lc3NhZ2UyLCBmaWVsZCkpOyAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIFNXQVBfVkFMVUVTKElOVDMyICwg
aW50MzIgKTsKLSAgICAgIFNXQVBfVkFMVUVTKElOVDY0ICwgaW50NjQgKTsKLSAgICAgIFNXQVBf
VkFMVUVTKFVJTlQzMiwgdWludDMyKTsKLSAgICAgIFNXQVBfVkFMVUVTKFVJTlQ2NCwgdWludDY0
KTsKLSAgICAgIFNXQVBfVkFMVUVTKEZMT0FUICwgZmxvYXQgKTsKLSAgICAgIFNXQVBfVkFMVUVT
KERPVUJMRSwgZG91YmxlKTsKLSAgICAgIFNXQVBfVkFMVUVTKEJPT0wgICwgYm9vbCAgKTsKLSAg
ICAgIFNXQVBfVkFMVUVTKEVOVU0gICwgaW50ICAgKTsKLSN1bmRlZiBTV0FQX1ZBTFVFUwotICAg
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgaWYgKEdl
dEFyZW5hKG1lc3NhZ2UxKSA9PSBHZXRBcmVuYShtZXNzYWdlMikpIHsKLSAgICAgICAgICBzdGQ6
OnN3YXAoKk11dGFibGVSYXc8TWVzc2FnZSo+KG1lc3NhZ2UxLCBmaWVsZCksCi0gICAgICAgICAg
ICAgICAgICAgICpNdXRhYmxlUmF3PE1lc3NhZ2UqPihtZXNzYWdlMiwgZmllbGQpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBNZXNzYWdlKiogc3ViX21zZzEgPSBNdXRhYmxlUmF3PE1l
c3NhZ2UqPihtZXNzYWdlMSwgZmllbGQpOwotICAgICAgICAgIE1lc3NhZ2UqKiBzdWJfbXNnMiA9
IE11dGFibGVSYXc8TWVzc2FnZSo+KG1lc3NhZ2UyLCBmaWVsZCk7Ci0gICAgICAgICAgaWYgKCpz
dWJfbXNnMSA9PSBOVUxMICYmICpzdWJfbXNnMiA9PSBOVUxMKSBicmVhazsKLSAgICAgICAgICBp
ZiAoKnN1Yl9tc2cxICYmICpzdWJfbXNnMikgewotICAgICAgICAgICAgKCpzdWJfbXNnMSktPkdl
dFJlZmxlY3Rpb24oKS0+U3dhcCgqc3ViX21zZzEsICpzdWJfbXNnMik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCpzdWJfbXNnMSA9PSBOVUxMKSB7Ci0g
ICAgICAgICAgICAqc3ViX21zZzEgPSAoKnN1Yl9tc2cyKS0+TmV3KG1lc3NhZ2UxLT5HZXRBcmVu
YSgpKTsKLSAgICAgICAgICAgICgqc3ViX21zZzEpLT5Db3B5RnJvbSgqKnN1Yl9tc2cyKTsKLSAg
ICAgICAgICAgIENsZWFyRmllbGQobWVzc2FnZTIsIGZpZWxkKTsKLSAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgKnN1Yl9tc2cyID0gKCpzdWJfbXNnMSktPk5ldyhtZXNzYWdlMi0+R2V0
QXJlbmEoKSk7Ci0gICAgICAgICAgICAoKnN1Yl9tc2cyKS0+Q29weUZyb20oKipzdWJfbXNnMSk7
Ci0gICAgICAgICAgICBDbGVhckZpZWxkKG1lc3NhZ2UxLCBmaWVsZCk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9TVFJJTkc6Ci0gICAgICAgIHN3aXRjaCAoZmllbGQtPm9wdGlvbnMoKS5jdHlwZSgp
KSB7Ci0gICAgICAgICAgZGVmYXVsdDogIC8vIFRPRE8oa2VudG9uKTogIFN1cHBvcnQgb3RoZXIg
c3RyaW5nIHJlcHMuCi0gICAgICAgICAgY2FzZSBGaWVsZE9wdGlvbnM6OlNUUklORzoKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgQXJlbmEqIGFyZW5hMSA9IEdldEFyZW5hKG1lc3NhZ2Ux
KTsKLSAgICAgICAgICAgICAgQXJlbmEqIGFyZW5hMiA9IEdldEFyZW5hKG1lc3NhZ2UyKTsKLSAg
ICAgICAgICAgICAgQXJlbmFTdHJpbmdQdHIqIHN0cmluZzEgPQotICAgICAgICAgICAgICAgICAg
TXV0YWJsZVJhdzxBcmVuYVN0cmluZ1B0cj4obWVzc2FnZTEsIGZpZWxkKTsKLSAgICAgICAgICAg
ICAgQXJlbmFTdHJpbmdQdHIqIHN0cmluZzIgPQotICAgICAgICAgICAgICAgICAgTXV0YWJsZVJh
dzxBcmVuYVN0cmluZ1B0cj4obWVzc2FnZTIsIGZpZWxkKTsKLSAgICAgICAgICAgICAgaWYgKGFy
ZW5hMSA9PSBhcmVuYTIpIHsKLSAgICAgICAgICAgICAgICBzdHJpbmcxLT5Td2FwKHN0cmluZzIp
OwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyog
ZGVmYXVsdF9wdHIgPQotICAgICAgICAgICAgICAgICAgICAmRGVmYXVsdFJhdzxBcmVuYVN0cmlu
Z1B0cj4oZmllbGQpLkdldChOVUxMKTsKLSAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgdGVt
cCA9IHN0cmluZzEtPkdldChkZWZhdWx0X3B0cik7Ci0gICAgICAgICAgICAgICAgc3RyaW5nMS0+
U2V0KGRlZmF1bHRfcHRyLCBzdHJpbmcyLT5HZXQoZGVmYXVsdF9wdHIpLCBhcmVuYTEpOwotICAg
ICAgICAgICAgICAgIHN0cmluZzItPlNldChkZWZhdWx0X3B0ciwgdGVtcCwgYXJlbmEyKTsKLSAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdPT0dMRV9MT0co
RkFUQUwpIDw8ICJVbmltcGxlbWVudGVkIHR5cGU6ICIgPDwgZmllbGQtPmNwcF90eXBlKCk7Ci0g
ICAgfQotICB9Ci19Ci0KLXZvaWQgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OlN3YXBPbmVv
ZkZpZWxkKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UxLAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UyLAot
ICAgIGNvbnN0IE9uZW9mRGVzY3JpcHRvciogb25lb2ZfZGVzY3JpcHRvcikgY29uc3QgewotICB1
aW50MzIgb25lb2ZfY2FzZTEgPSBHZXRPbmVvZkNhc2UoKm1lc3NhZ2UxLCBvbmVvZl9kZXNjcmlw
dG9yKTsKLSAgdWludDMyIG9uZW9mX2Nhc2UyID0gR2V0T25lb2ZDYXNlKCptZXNzYWdlMiwgb25l
b2ZfZGVzY3JpcHRvcik7Ci0KLSAgaW50MzIgdGVtcF9pbnQzMjsKLSAgaW50NjQgdGVtcF9pbnQ2
NDsKLSAgdWludDMyIHRlbXBfdWludDMyOwotICB1aW50NjQgdGVtcF91aW50NjQ7Ci0gIGZsb2F0
IHRlbXBfZmxvYXQ7Ci0gIGRvdWJsZSB0ZW1wX2RvdWJsZTsKLSAgYm9vbCB0ZW1wX2Jvb2w7Ci0g
IGludCB0ZW1wX2ludDsKLSAgTWVzc2FnZSogdGVtcF9tZXNzYWdlID0gTlVMTDsKLSAgc3RyaW5n
IHRlbXBfc3RyaW5nOwotCi0gIC8vIFN0b3JlcyBtZXNzYWdlMSdzIG9uZW9mIGZpZWxkIHRvIGEg
dGVtcCB2YXJpYWJsZS4KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZDEgPSBOVUxMOwot
ICBpZiAob25lb2ZfY2FzZTEgPiAwKSB7Ci0gICAgZmllbGQxID0gZGVzY3JpcHRvcl8tPkZpbmRG
aWVsZEJ5TnVtYmVyKG9uZW9mX2Nhc2UxKTsKLSAgICAvL29uZW9mX2Rlc2NyaXB0b3ItPmZpZWxk
KG9uZW9mX2Nhc2UxKTsKLSAgICBzd2l0Y2ggKGZpZWxkMS0+Y3BwX3R5cGUoKSkgewotI2RlZmlu
ZSBHRVRfVEVNUF9WQUxVRShDUFBUWVBFLCBUWVBFKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfIyNDUFBUWVBF
OiAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0ZW1wXyMjVFlQRSA9IEdldEZp
ZWxkPFRZUEU+KCptZXNzYWdlMSwgZmllbGQxKTsgICAgICAgICAgICAgICAgXAotICAgICAgICBi
cmVhazsKLQotICAgICAgR0VUX1RFTVBfVkFMVUUoSU5UMzIgLCBpbnQzMiApOwotICAgICAgR0VU
X1RFTVBfVkFMVUUoSU5UNjQgLCBpbnQ2NCApOwotICAgICAgR0VUX1RFTVBfVkFMVUUoVUlOVDMy
LCB1aW50MzIpOwotICAgICAgR0VUX1RFTVBfVkFMVUUoVUlOVDY0LCB1aW50NjQpOwotICAgICAg
R0VUX1RFTVBfVkFMVUUoRkxPQVQgLCBmbG9hdCApOwotICAgICAgR0VUX1RFTVBfVkFMVUUoRE9V
QkxFLCBkb3VibGUpOwotICAgICAgR0VUX1RFTVBfVkFMVUUoQk9PTCAgLCBib29sICApOwotICAg
ICAgR0VUX1RFTVBfVkFMVUUoRU5VTSAgLCBpbnQgICApOwotI3VuZGVmIEdFVF9URU1QX1ZBTFVF
Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgICB0
ZW1wX21lc3NhZ2UgPSBSZWxlYXNlTWVzc2FnZShtZXNzYWdlMSwgZmllbGQxKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzoKLSAg
ICAgICAgdGVtcF9zdHJpbmcgPSBHZXRTdHJpbmcoKm1lc3NhZ2UxLCBmaWVsZDEpOwotICAgICAg
ICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR09PR0xFX0xPRyhGQVRBTCkgPDwg
IlVuaW1wbGVtZW50ZWQgdHlwZTogIiA8PCBmaWVsZDEtPmNwcF90eXBlKCk7Ci0gICAgfQotICB9
Ci0KLSAgLy8gU2V0cyBtZXNzYWdlMSdzIG9uZW9mIGZpZWxkIGZyb20gdGhlIG1lc3NhZ2UyJ3Mg
b25lb2YgZmllbGQuCi0gIGlmIChvbmVvZl9jYXNlMiA+IDApIHsKLSAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkMiA9Ci0gICAgICAgIGRlc2NyaXB0b3JfLT5GaW5kRmllbGRCeU51bWJl
cihvbmVvZl9jYXNlMik7Ci0gICAgc3dpdGNoIChmaWVsZDItPmNwcF90eXBlKCkpIHsKLSNkZWZp
bmUgU0VUX09ORU9GX1ZBTFVFMShDUFBUWVBFLCBUWVBFKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFXyMjQ1BQVFlQ
RTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgU2V0RmllbGQ8VFlQRT4obWVz
c2FnZTEsIGZpZWxkMiwgR2V0RmllbGQ8VFlQRT4oKm1lc3NhZ2UyLCBmaWVsZDIpKTsgXAotICAg
ICAgICBicmVhazsKLQotICAgICAgU0VUX09ORU9GX1ZBTFVFMShJTlQzMiAsIGludDMyICk7Ci0g
ICAgICBTRVRfT05FT0ZfVkFMVUUxKElOVDY0ICwgaW50NjQgKTsKLSAgICAgIFNFVF9PTkVPRl9W
QUxVRTEoVUlOVDMyLCB1aW50MzIpOwotICAgICAgU0VUX09ORU9GX1ZBTFVFMShVSU5UNjQsIHVp
bnQ2NCk7Ci0gICAgICBTRVRfT05FT0ZfVkFMVUUxKEZMT0FUICwgZmxvYXQgKTsKLSAgICAgIFNF
VF9PTkVPRl9WQUxVRTEoRE9VQkxFLCBkb3VibGUpOwotICAgICAgU0VUX09ORU9GX1ZBTFVFMShC
T09MICAsIGJvb2wgICk7Ci0gICAgICBTRVRfT05FT0ZfVkFMVUUxKEVOVU0gICwgaW50ICAgKTsK
LSN1bmRlZiBTRVRfT05FT0ZfVkFMVUUxCi0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQ
VFlQRV9NRVNTQUdFOgotICAgICAgICBTZXRBbGxvY2F0ZWRNZXNzYWdlKG1lc3NhZ2UxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VNZXNzYWdlKG1lc3NhZ2UyLCBmaWVsZDIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkMik7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6Ci0gICAgICAgIFNl
dFN0cmluZyhtZXNzYWdlMSwgZmllbGQyLCBHZXRTdHJpbmcoKm1lc3NhZ2UyLCBmaWVsZDIpKTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdPT0dMRV9MT0coRkFU
QUwpIDw8ICJVbmltcGxlbWVudGVkIHR5cGU6ICIgPDwgZmllbGQyLT5jcHBfdHlwZSgpOwotICAg
IH0KLSAgfSBlbHNlIHsKLSAgICBDbGVhck9uZW9mKG1lc3NhZ2UxLCBvbmVvZl9kZXNjcmlwdG9y
KTsKLSAgfQotCi0gIC8vIFNldHMgbWVzc2FnZTIncyBvbmVvZiBmaWVsZCBmcm9tIHRoZSB0ZW1w
IHZhcmlhYmxlLgotICBpZiAob25lb2ZfY2FzZTEgPiAwKSB7Ci0gICAgc3dpdGNoIChmaWVsZDEt
PmNwcF90eXBlKCkpIHsKLSNkZWZpbmUgU0VUX09ORU9GX1ZBTFVFMihDUFBUWVBFLCBUWVBFKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFXyMjQ1BQVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgU2V0RmllbGQ8VFlQRT4obWVzc2FnZTIsIGZpZWxkMSwgdGVtcF8jI1RZUEUpOyAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIFNFVF9PTkVPRl9WQUxVRTIoSU5U
MzIgLCBpbnQzMiApOwotICAgICAgU0VUX09ORU9GX1ZBTFVFMihJTlQ2NCAsIGludDY0ICk7Ci0g
ICAgICBTRVRfT05FT0ZfVkFMVUUyKFVJTlQzMiwgdWludDMyKTsKLSAgICAgIFNFVF9PTkVPRl9W
QUxVRTIoVUlOVDY0LCB1aW50NjQpOwotICAgICAgU0VUX09ORU9GX1ZBTFVFMihGTE9BVCAsIGZs
b2F0ICk7Ci0gICAgICBTRVRfT05FT0ZfVkFMVUUyKERPVUJMRSwgZG91YmxlKTsKLSAgICAgIFNF
VF9PTkVPRl9WQUxVRTIoQk9PTCAgLCBib29sICApOwotICAgICAgU0VUX09ORU9GX1ZBTFVFMihF
TlVNICAsIGludCAgICk7Ci0jdW5kZWYgU0VUX09ORU9GX1ZBTFVFMgotICAgICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgU2V0QWxsb2NhdGVkTWVzc2Fn
ZShtZXNzYWdlMiwgdGVtcF9tZXNzYWdlLCBmaWVsZDEpOwotICAgICAgICBicmVhazsKLQotICAg
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgICBTZXRTdHJp
bmcobWVzc2FnZTIsIGZpZWxkMSwgdGVtcF9zdHJpbmcpOwotICAgICAgICBicmVhazsKLQotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIlVuaW1wbGVtZW50ZWQg
dHlwZTogIiA8PCBmaWVsZDEtPmNwcF90eXBlKCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIENs
ZWFyT25lb2YobWVzc2FnZTIsIG9uZW9mX2Rlc2NyaXB0b3IpOwotICB9Ci19Ci0KLXZvaWQgR2Vu
ZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OlN3YXAoCi0gICAgTWVzc2FnZSogbWVzc2FnZTEsCi0g
ICAgTWVzc2FnZSogbWVzc2FnZTIpIGNvbnN0IHsKLSAgaWYgKG1lc3NhZ2UxID09IG1lc3NhZ2Uy
KSByZXR1cm47Ci0KLSAgLy8gVE9ETyhrZW50b24pOiAgT3RoZXIgUmVmbGVjdGlvbiBtZXRob2Rz
IHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGlzIHRvby4KLSAgR09PR0xFX0NIRUNLX0VRKG1lc3Nh
Z2UxLT5HZXRSZWZsZWN0aW9uKCksIHRoaXMpCi0gICAgPDwgIkZpcnN0IGFyZ3VtZW50IHRvIFN3
YXAoKSAob2YgdHlwZSBcIiIKLSAgICA8PCBtZXNzYWdlMS0+R2V0RGVzY3JpcHRvcigpLT5mdWxs
X25hbWUoKQotICAgIDw8ICJcIikgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIHJlZmxlY3Rp
b24gb2JqZWN0ICh3aGljaCBpcyBmb3IgdHlwZSBcIiIKLSAgICA8PCBkZXNjcmlwdG9yXy0+ZnVs
bF9uYW1lKCkKLSAgICA8PCAiXCIpLiAgTm90ZSB0aGF0IHRoZSBleGFjdCBzYW1lIGNsYXNzIGlz
IHJlcXVpcmVkOyBub3QganVzdCB0aGUgc2FtZSAiCi0gICAgICAgImRlc2NyaXB0b3IuIjsKLSAg
R09PR0xFX0NIRUNLX0VRKG1lc3NhZ2UyLT5HZXRSZWZsZWN0aW9uKCksIHRoaXMpCi0gICAgPDwg
IlNlY29uZCBhcmd1bWVudCB0byBTd2FwKCkgKG9mIHR5cGUgXCIiCi0gICAgPDwgbWVzc2FnZTIt
PkdldERlc2NyaXB0b3IoKS0+ZnVsbF9uYW1lKCkKLSAgICA8PCAiXCIpIGlzIG5vdCBjb21wYXRp
YmxlIHdpdGggdGhpcyByZWZsZWN0aW9uIG9iamVjdCAod2hpY2ggaXMgZm9yIHR5cGUgXCIiCi0g
ICAgPDwgZGVzY3JpcHRvcl8tPmZ1bGxfbmFtZSgpCi0gICAgPDwgIlwiKS4gIE5vdGUgdGhhdCB0
aGUgZXhhY3Qgc2FtZSBjbGFzcyBpcyByZXF1aXJlZDsgbm90IGp1c3QgdGhlIHNhbWUgIgotICAg
ICAgICJkZXNjcmlwdG9yLiI7Ci0KLSAgLy8gQ2hlY2sgdGhhdCBib3RoIG1lc3NhZ2VzIGFyZSBp
biB0aGUgc2FtZSBhcmVuYSAob3IgYm90aCBvbiB0aGUgaGVhcCkuIFdlCi0gIC8vIG5lZWQgdG8g
Y29weSBhbGwgZGF0YSBpZiBub3QsIGR1ZSB0byBvd25lcnNoaXAgc2VtYW50aWNzLgotICBpZiAo
R2V0QXJlbmEobWVzc2FnZTEpICE9IEdldEFyZW5hKG1lc3NhZ2UyKSkgewotICAgIC8vIFNsb3cg
Y29weSBwYXRoLgotICAgIC8vIFVzZSBvdXIgYXJlbmEgYXMgdGVtcCBzcGFjZSwgaWYgYXZhaWxh
YmxlLgotICAgIE1lc3NhZ2UqIHRlbXAgPSBtZXNzYWdlMS0+TmV3KEdldEFyZW5hKG1lc3NhZ2Ux
KSk7Ci0gICAgdGVtcC0+TWVyZ2VGcm9tKCptZXNzYWdlMSk7Ci0gICAgbWVzc2FnZTEtPkNvcHlG
cm9tKCptZXNzYWdlMik7Ci0gICAgbWVzc2FnZTItPkNvcHlGcm9tKCp0ZW1wKTsKLSAgICBpZiAo
R2V0QXJlbmEobWVzc2FnZTEpID09IE5VTEwpIHsKLSAgICAgIGRlbGV0ZSB0ZW1wOwotICAgIH0K
LSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoaGFzX2JpdHNfb2Zmc2V0XyAhPSAtMSkgewotICAg
IHVpbnQzMiogaGFzX2JpdHMxID0gTXV0YWJsZUhhc0JpdHMobWVzc2FnZTEpOwotICAgIHVpbnQz
MiogaGFzX2JpdHMyID0gTXV0YWJsZUhhc0JpdHMobWVzc2FnZTIpOwotICAgIGludCBoYXNfYml0
c19zaXplID0gKGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpICsgMzEpIC8gMzI7Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGhhc19iaXRzX3NpemU7IGkrKykgewotICAgICAgc3RkOjpzd2Fw
KGhhc19iaXRzMVtpXSwgaGFzX2JpdHMyW2ldKTsKLSAgICB9Ci0gIH0KLQotICBmb3IgKGludCBp
ID0gMDsgaSA8IGRlc2NyaXB0b3JfLT5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPmZpZWxkKGkpOwotICAgIGlmICgh
ZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSkgewotICAgICAgU3dhcEZpZWxkKG1lc3NhZ2UxLCBt
ZXNzYWdlMiwgZmllbGQpOwotICAgIH0KLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVz
Y3JpcHRvcl8tPm9uZW9mX2RlY2xfY291bnQoKTsgaSsrKSB7Ci0gICAgU3dhcE9uZW9mRmllbGQo
bWVzc2FnZTEsIG1lc3NhZ2UyLCBkZXNjcmlwdG9yXy0+b25lb2ZfZGVjbChpKSk7Ci0gIH0KLQot
ICBpZiAoZXh0ZW5zaW9uc19vZmZzZXRfICE9IC0xKSB7Ci0gICAgTXV0YWJsZUV4dGVuc2lvblNl
dChtZXNzYWdlMSktPlN3YXAoTXV0YWJsZUV4dGVuc2lvblNldChtZXNzYWdlMikpOwotICB9Ci0K
LSAgTXV0YWJsZVVua25vd25GaWVsZHMobWVzc2FnZTEpLT5Td2FwKE11dGFibGVVbmtub3duRmll
bGRzKG1lc3NhZ2UyKSk7Ci19Ci0KLXZvaWQgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OlN3
YXBGaWVsZHMoCi0gICAgTWVzc2FnZSogbWVzc2FnZTEsCi0gICAgTWVzc2FnZSogbWVzc2FnZTIs
Ci0gICAgY29uc3QgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBmaWVsZHMpIGNvbnN0
IHsKLSAgaWYgKG1lc3NhZ2UxID09IG1lc3NhZ2UyKSByZXR1cm47Ci0KLSAgLy8gVE9ETyhrZW50
b24pOiAgT3RoZXIgUmVmbGVjdGlvbiBtZXRob2RzIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGlz
IHRvby4KLSAgR09PR0xFX0NIRUNLX0VRKG1lc3NhZ2UxLT5HZXRSZWZsZWN0aW9uKCksIHRoaXMp
Ci0gICAgPDwgIkZpcnN0IGFyZ3VtZW50IHRvIFN3YXBGaWVsZHMoKSAob2YgdHlwZSBcIiIKLSAg
ICA8PCBtZXNzYWdlMS0+R2V0RGVzY3JpcHRvcigpLT5mdWxsX25hbWUoKQotICAgIDw8ICJcIikg
aXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIHJlZmxlY3Rpb24gb2JqZWN0ICh3aGljaCBpcyBm
b3IgdHlwZSBcIiIKLSAgICA8PCBkZXNjcmlwdG9yXy0+ZnVsbF9uYW1lKCkKLSAgICA8PCAiXCIp
LiAgTm90ZSB0aGF0IHRoZSBleGFjdCBzYW1lIGNsYXNzIGlzIHJlcXVpcmVkOyBub3QganVzdCB0
aGUgc2FtZSAiCi0gICAgICAgImRlc2NyaXB0b3IuIjsKLSAgR09PR0xFX0NIRUNLX0VRKG1lc3Nh
Z2UyLT5HZXRSZWZsZWN0aW9uKCksIHRoaXMpCi0gICAgPDwgIlNlY29uZCBhcmd1bWVudCB0byBT
d2FwRmllbGRzKCkgKG9mIHR5cGUgXCIiCi0gICAgPDwgbWVzc2FnZTItPkdldERlc2NyaXB0b3Io
KS0+ZnVsbF9uYW1lKCkKLSAgICA8PCAiXCIpIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyBy
ZWZsZWN0aW9uIG9iamVjdCAod2hpY2ggaXMgZm9yIHR5cGUgXCIiCi0gICAgPDwgZGVzY3JpcHRv
cl8tPmZ1bGxfbmFtZSgpCi0gICAgPDwgIlwiKS4gIE5vdGUgdGhhdCB0aGUgZXhhY3Qgc2FtZSBj
bGFzcyBpcyByZXF1aXJlZDsgbm90IGp1c3QgdGhlIHNhbWUgIgotICAgICAgICJkZXNjcmlwdG9y
LiI7Ci0KLSAgc3RkOjpzZXQ8aW50PiBzd2FwcGVkX29uZW9mOwotCi0gIGZvciAoaW50IGkgPSAw
OyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCA9IGZpZWxkc1tpXTsKLSAgICBpZiAoZmllbGQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAg
ICBNdXRhYmxlRXh0ZW5zaW9uU2V0KG1lc3NhZ2UxKS0+U3dhcEV4dGVuc2lvbigKLSAgICAgICAg
ICBNdXRhYmxlRXh0ZW5zaW9uU2V0KG1lc3NhZ2UyKSwKLSAgICAgICAgICBmaWVsZC0+bnVtYmVy
KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSkg
ewotICAgICAgICBpbnQgb25lb2ZfaW5kZXggPSBmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpLT5p
bmRleCgpOwotICAgICAgICAvLyBPbmx5IHN3YXAgdGhlIG9uZW9mIGZpZWxkIG9uY2UuCi0gICAg
ICAgIGlmIChzd2FwcGVkX29uZW9mLmZpbmQob25lb2ZfaW5kZXgpICE9IHN3YXBwZWRfb25lb2Yu
ZW5kKCkpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBzd2FwcGVk
X29uZW9mLmluc2VydChvbmVvZl9pbmRleCk7Ci0gICAgICAgIFN3YXBPbmVvZkZpZWxkKG1lc3Nh
Z2UxLCBtZXNzYWdlMiwgZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBTd2FwIGhhcyBiaXQuCi0gICAgICAgIFN3YXBCaXQobWVzc2FnZTEsIG1l
c3NhZ2UyLCBmaWVsZCk7Ci0gICAgICAgIC8vIFN3YXAgZmllbGQuCi0gICAgICAgIFN3YXBGaWVs
ZChtZXNzYWdlMSwgbWVzc2FnZTIsIGZpZWxkKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1ib29sIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpIYXNGaWVs
ZChjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgewotICBVU0FH
RV9DSEVDS19NRVNTQUdFX1RZUEUoSGFzRmllbGQpOwotICBVU0FHRV9DSEVDS19TSU5HVUxBUihI
YXNGaWVsZCk7Ci0KLSAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24oKSkgewotICAgIHJldHVybiBH
ZXRFeHRlbnNpb25TZXQobWVzc2FnZSkuSGFzKGZpZWxkLT5udW1iZXIoKSk7Ci0gIH0gZWxzZSB7
Ci0gICAgaWYgKGZpZWxkLT5jb250YWluaW5nX29uZW9mKCkpIHsKLSAgICAgIHJldHVybiBIYXNP
bmVvZkZpZWxkKG1lc3NhZ2UsIGZpZWxkKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIEhh
c0JpdChtZXNzYWdlLCBmaWVsZCk7Ci0gICAgfQotICB9Ci19Ci0KLWludCBHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvbjo6RmllbGRTaXplKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkKSBjb25zdCB7Ci0gIFVTQUdFX0NIRUNLX01FU1NBR0VfVFlQRShGaWVsZFNpemUpOwot
ICBVU0FHRV9DSEVDS19SRVBFQVRFRChGaWVsZFNpemUpOwotCi0gIGlmIChmaWVsZC0+aXNfZXh0
ZW5zaW9uKCkpIHsKLSAgICByZXR1cm4gR2V0RXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLkV4dGVuc2lv
blNpemUoZmllbGQtPm51bWJlcigpKTsKLSAgfSBlbHNlIHsKLSAgICBzd2l0Y2ggKGZpZWxkLT5j
cHBfdHlwZSgpKSB7Ci0jZGVmaW5lIEhBTkRMRV9UWVBFKFVQUEVSQ0FTRSwgTE9XRVJDQVNFKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBjYXNlIEZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV8jI1VQUEVSQ0FTRSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHJldHVybiBHZXRSYXc8UmVwZWF0ZWRGaWVsZDxMT1dFUkNBU0U+ID4obWVz
c2FnZSwgZmllbGQpLnNpemUoKQotCi0gICAgICBIQU5ETEVfVFlQRSggSU5UMzIsICBpbnQzMik7
Ci0gICAgICBIQU5ETEVfVFlQRSggSU5UNjQsICBpbnQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQRShV
SU5UMzIsIHVpbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQRShVSU5UNjQsIHVpbnQ2NCk7Ci0gICAg
ICBIQU5ETEVfVFlQRShET1VCTEUsIGRvdWJsZSk7Ci0gICAgICBIQU5ETEVfVFlQRSggRkxPQVQs
ICBmbG9hdCk7Ci0gICAgICBIQU5ETEVfVFlQRSggIEJPT0wsICAgYm9vbCk7Ci0gICAgICBIQU5E
TEVfVFlQRSggIEVOVU0sICAgIGludCk7Ci0jdW5kZWYgSEFORExFX1RZUEUKLQotICAgICAgY2Fz
ZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgaWYgKElzTWFwRmllbGRJbkFwaShmaWVs
ZCkpIHsKLSAgICAgICAgICByZXR1cm4gR2V0UmF3PE1hcEZpZWxkQmFzZT4obWVzc2FnZSwgZmll
bGQpLkdldFJlcGVhdGVkRmllbGQoKS5zaXplKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgcmV0dXJuIEdldFJhdzxSZXBlYXRlZFB0ckZpZWxkQmFzZT4obWVzc2FnZSwgZmllbGQpLnNp
emUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4n
dCBnZXQgaGVyZS4iOwotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLXZvaWQgR2VuZXJhdGVkTWVz
c2FnZVJlZmxlY3Rpb246OkNsZWFyRmllbGQoCi0gICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgewotICBVU0FHRV9DSEVDS19NRVNTQUdFX1RZ
UEUoQ2xlYXJGaWVsZCk7Ci0KLSAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24oKSkgewotICAgIE11
dGFibGVFeHRlbnNpb25TZXQobWVzc2FnZSktPkNsZWFyRXh0ZW5zaW9uKGZpZWxkLT5udW1iZXIo
KSk7Ci0gIH0gZWxzZSBpZiAoIWZpZWxkLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgaWYgKGZpZWxk
LT5jb250YWluaW5nX29uZW9mKCkpIHsKLSAgICAgIENsZWFyT25lb2ZGaWVsZChtZXNzYWdlLCBm
aWVsZCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKEhhc0JpdCgqbWVzc2FnZSwg
ZmllbGQpKSB7Ci0gICAgICBDbGVhckJpdChtZXNzYWdlLCBmaWVsZCk7Ci0KLSAgICAgIC8vIFdl
IG5lZWQgdG8gc2V0IHRoZSBmaWVsZCBiYWNrIHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAg
c3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotI2RlZmluZSBDTEVBUl9UWVBFKENQUFRZUEUs
IFRZUEUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFXyMjQ1BQVFlQRTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAqTXV0YWJsZVJhdzxUWVBFPihtZXNzYWdlLCBm
aWVsZCkgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZmll
bGQtPmRlZmF1bHRfdmFsdWVfIyNUWVBFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgQ0xFQVJfVFlQRShJTlQzMiAsIGlu
dDMyICk7Ci0gICAgICAgIENMRUFSX1RZUEUoSU5UNjQgLCBpbnQ2NCApOwotICAgICAgICBDTEVB
Ul9UWVBFKFVJTlQzMiwgdWludDMyKTsKLSAgICAgICAgQ0xFQVJfVFlQRShVSU5UNjQsIHVpbnQ2
NCk7Ci0gICAgICAgIENMRUFSX1RZUEUoRkxPQVQgLCBmbG9hdCApOwotICAgICAgICBDTEVBUl9U
WVBFKERPVUJMRSwgZG91YmxlKTsKLSAgICAgICAgQ0xFQVJfVFlQRShCT09MICAsIGJvb2wgICk7
Ci0jdW5kZWYgQ0xFQVJfVFlQRQotCi0gICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX0VOVU06Ci0gICAgICAgICAgKk11dGFibGVSYXc8aW50PihtZXNzYWdlLCBmaWVsZCkgPQot
ICAgICAgICAgICAgZmllbGQtPmRlZmF1bHRfdmFsdWVfZW51bSgpLT5udW1iZXIoKTsKLSAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJ
Tkc6IHsKLSAgICAgICAgICBzd2l0Y2ggKGZpZWxkLT5vcHRpb25zKCkuY3R5cGUoKSkgewotICAg
ICAgICAgICAgZGVmYXVsdDogIC8vIFRPRE8oa2VudG9uKTogIFN1cHBvcnQgb3RoZXIgc3RyaW5n
IHJlcHMuCi0gICAgICAgICAgICBjYXNlIEZpZWxkT3B0aW9uczo6U1RSSU5HOiB7Ci0gICAgICAg
ICAgICAgIGNvbnN0IHN0cmluZyogZGVmYXVsdF9wdHIgPQotICAgICAgICAgICAgICAgICAgJkRl
ZmF1bHRSYXc8QXJlbmFTdHJpbmdQdHI+KGZpZWxkKS5HZXQoTlVMTCk7Ci0gICAgICAgICAgICAg
IE11dGFibGVSYXc8QXJlbmFTdHJpbmdQdHI+KG1lc3NhZ2UsIGZpZWxkKS0+RGVzdHJveShkZWZh
dWx0X3B0ciwKLSAgICAgICAgICAgICAgICAgIEdldEFyZW5hKG1lc3NhZ2UpKTsKLSAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVT
U0FHRToKLSAgICAgICAgICBpZiAoaGFzX2JpdHNfb2Zmc2V0XyA9PSAtMSkgewotICAgICAgICAg
ICAgLy8gUHJvdG8zIGRvZXMgbm90IGhhdmUgaGFzLWJpdHMgYW5kIHdlIG5lZWQgdG8gc2V0IGEg
bWVzc2FnZSBmaWVsZAotICAgICAgICAgICAgLy8gdG8gTlVMTCBpbiBvcmRlciB0byBpbmRpY2F0
ZSBpdHMgdW4tcHJlc2VuY2UuCi0gICAgICAgICAgICBpZiAoR2V0QXJlbmEobWVzc2FnZSkgPT0g
TlVMTCkgewotICAgICAgICAgICAgICBkZWxldGUgKk11dGFibGVSYXc8TWVzc2FnZSo+KG1lc3Nh
Z2UsIGZpZWxkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpNdXRhYmxlUmF3PE1lc3Nh
Z2UqPihtZXNzYWdlLCBmaWVsZCkgPSBOVUxMOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAoKk11dGFibGVSYXc8TWVzc2FnZSo+KG1lc3NhZ2UsIGZpZWxkKSktPkNsZWFyKCk7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsK
LSAgICBzd2l0Y2ggKGZpZWxkLT5jcHBfdHlwZSgpKSB7Ci0jZGVmaW5lIEhBTkRMRV9UWVBFKFVQ
UEVSQ0FTRSwgTE9XRVJDQVNFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV8jI1VQUEVSQ0FTRSA6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE11dGFibGVSYXc8UmVwZWF0ZWRGaWVs
ZDxMT1dFUkNBU0U+ID4obWVzc2FnZSwgZmllbGQpLT5DbGVhcigpOyAgICAgICBcCi0gICAgICAg
IGJyZWFrCi0KLSAgICAgIEhBTkRMRV9UWVBFKCBJTlQzMiwgIGludDMyKTsKLSAgICAgIEhBTkRM
RV9UWVBFKCBJTlQ2NCwgIGludDY0KTsKLSAgICAgIEhBTkRMRV9UWVBFKFVJTlQzMiwgdWludDMy
KTsKLSAgICAgIEhBTkRMRV9UWVBFKFVJTlQ2NCwgdWludDY0KTsKLSAgICAgIEhBTkRMRV9UWVBF
KERPVUJMRSwgZG91YmxlKTsKLSAgICAgIEhBTkRMRV9UWVBFKCBGTE9BVCwgIGZsb2F0KTsKLSAg
ICAgIEhBTkRMRV9UWVBFKCAgQk9PTCwgICBib29sKTsKLSAgICAgIEhBTkRMRV9UWVBFKCAgRU5V
TSwgICAgaW50KTsKLSN1bmRlZiBIQU5ETEVfVFlQRQotCi0gICAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9TVFJJTkc6IHsKLSAgICAgICAgc3dpdGNoIChmaWVsZC0+b3B0aW9ucygp
LmN0eXBlKCkpIHsKLSAgICAgICAgICBkZWZhdWx0OiAgLy8gVE9ETyhrZW50b24pOiAgU3VwcG9y
dCBvdGhlciBzdHJpbmcgcmVwcy4KLSAgICAgICAgICBjYXNlIEZpZWxkT3B0aW9uczo6U1RSSU5H
OgotICAgICAgICAgICAgTXV0YWJsZVJhdzxSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4gPihtZXNz
YWdlLCBmaWVsZCktPkNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfTUVTU0FHRTogewotICAgICAgICBpZiAoSXNNYXBGaWVsZEluQXBpKGZpZWxkKSkgewotICAg
ICAgICAgIE11dGFibGVSYXc8TWFwRmllbGRCYXNlPihtZXNzYWdlLCBmaWVsZCkKLSAgICAgICAg
ICAgICAgLT5NdXRhYmxlUmVwZWF0ZWRGaWVsZCgpCi0gICAgICAgICAgICAgIC0+Q2xlYXI8R2Vu
ZXJpY1R5cGVIYW5kbGVyPE1lc3NhZ2U+ID4oKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAvLyBXZSBkb24ndCBrbm93IHdoaWNoIHN1YmNsYXNzIG9mIFJlcGVhdGVkUHRyRmllbGRCYXNl
IHRoZSB0eXBlIGlzLAotICAgICAgICAgIC8vIHNvIHdlIHVzZSBSZXBlYXRlZFB0ckZpZWxkQmFz
ZSBkaXJlY3RseS4KLSAgICAgICAgICBNdXRhYmxlUmF3PFJlcGVhdGVkUHRyRmllbGRCYXNlPiht
ZXNzYWdlLCBmaWVsZCkKLSAgICAgICAgICAgICAgLT5DbGVhcjxHZW5lcmljVHlwZUhhbmRsZXI8
TWVzc2FnZT4gPigpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0K
LSAgfQotfQotCi12b2lkIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpSZW1vdmVMYXN0KAot
ICAgIE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkg
Y29uc3QgewotICBVU0FHRV9DSEVDS19NRVNTQUdFX1RZUEUoUmVtb3ZlTGFzdCk7Ci0gIFVTQUdF
X0NIRUNLX1JFUEVBVEVEKFJlbW92ZUxhc3QpOwotCi0gIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9u
KCkpIHsKLSAgICBNdXRhYmxlRXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLT5SZW1vdmVMYXN0KGZpZWxk
LT5udW1iZXIoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkg
ewotI2RlZmluZSBIQU5ETEVfVFlQRShVUFBFUkNBU0UsIExPV0VSQ0FTRSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfIyNVUFBFUkNBU0UgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICBNdXRhYmxlUmF3PFJlcGVhdGVkRmllbGQ8TE9XRVJDQVNFPiA+KG1lc3NhZ2UsIGZpZWxkKS0+
UmVtb3ZlTGFzdCgpOyAgXAotICAgICAgICBicmVhawotCi0gICAgICBIQU5ETEVfVFlQRSggSU5U
MzIsICBpbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQRSggSU5UNjQsICBpbnQ2NCk7Ci0gICAgICBI
QU5ETEVfVFlQRShVSU5UMzIsIHVpbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQRShVSU5UNjQsIHVp
bnQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQRShET1VCTEUsIGRvdWJsZSk7Ci0gICAgICBIQU5ETEVf
VFlQRSggRkxPQVQsICBmbG9hdCk7Ci0gICAgICBIQU5ETEVfVFlQRSggIEJPT0wsICAgYm9vbCk7
Ci0gICAgICBIQU5ETEVfVFlQRSggIEVOVU0sICAgIGludCk7Ci0jdW5kZWYgSEFORExFX1RZUEUK
LQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgICBz
d2l0Y2ggKGZpZWxkLT5vcHRpb25zKCkuY3R5cGUoKSkgewotICAgICAgICAgIGRlZmF1bHQ6ICAv
LyBUT0RPKGtlbnRvbik6ICBTdXBwb3J0IG90aGVyIHN0cmluZyByZXBzLgotICAgICAgICAgIGNh
c2UgRmllbGRPcHRpb25zOjpTVFJJTkc6Ci0gICAgICAgICAgICBNdXRhYmxlUmF3PFJlcGVhdGVk
UHRyRmllbGQ8c3RyaW5nPiA+KG1lc3NhZ2UsIGZpZWxkKS0+UmVtb3ZlTGFzdCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgIGlmIChJc01hcEZpZWxkSW5B
cGkoZmllbGQpKSB7Ci0gICAgICAgICAgTXV0YWJsZVJhdzxNYXBGaWVsZEJhc2U+KG1lc3NhZ2Us
IGZpZWxkKQotICAgICAgICAgICAgICAtPk11dGFibGVSZXBlYXRlZEZpZWxkKCkKLSAgICAgICAg
ICAgICAgLT5SZW1vdmVMYXN0PEdlbmVyaWNUeXBlSGFuZGxlcjxNZXNzYWdlPiA+KCk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgTXV0YWJsZVJhdzxSZXBlYXRlZFB0ckZpZWxkQmFzZT4o
bWVzc2FnZSwgZmllbGQpCi0gICAgICAgICAgICAtPlJlbW92ZUxhc3Q8R2VuZXJpY1R5cGVIYW5k
bGVyPE1lc3NhZ2U+ID4oKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0K
LX0KLQotTWVzc2FnZSogR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OlJlbGVhc2VMYXN0KAot
ICAgIE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkg
Y29uc3QgewotICBVU0FHRV9DSEVDS19BTEwoUmVsZWFzZUxhc3QsIFJFUEVBVEVELCBNRVNTQUdF
KTsKLQotICBpZiAoZmllbGQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PE1lc3NhZ2UqPigKLSAgICAgICAgTXV0YWJsZUV4dGVuc2lvblNldChtZXNzYWdlKS0+UmVs
ZWFzZUxhc3QoZmllbGQtPm51bWJlcigpKSk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKElzTWFwRmll
bGRJbkFwaShmaWVsZCkpIHsKLSAgICAgIHJldHVybiBNdXRhYmxlUmF3PE1hcEZpZWxkQmFzZT4o
bWVzc2FnZSwgZmllbGQpCi0gICAgICAgICAgLT5NdXRhYmxlUmVwZWF0ZWRGaWVsZCgpCi0gICAg
ICAgICAgLT5SZWxlYXNlTGFzdDxHZW5lcmljVHlwZUhhbmRsZXI8TWVzc2FnZT4gPigpOwotICAg
IH0gZWxzZSB7Ci0gICAgICByZXR1cm4gTXV0YWJsZVJhdzxSZXBlYXRlZFB0ckZpZWxkQmFzZT4o
bWVzc2FnZSwgZmllbGQpCi0gICAgICAgIC0+UmVsZWFzZUxhc3Q8R2VuZXJpY1R5cGVIYW5kbGVy
PE1lc3NhZ2U+ID4oKTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbjo6U3dhcEVsZW1lbnRzKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBpbnQgaW5kZXgxLAotICAgIGludCBpbmRleDIp
IGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0tfTUVTU0FHRV9UWVBFKFN3YXApOwotICBVU0FHRV9DSEVD
S19SRVBFQVRFRChTd2FwKTsKLQotICBpZiAoZmllbGQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAg
TXV0YWJsZUV4dGVuc2lvblNldChtZXNzYWdlKS0+U3dhcEVsZW1lbnRzKGZpZWxkLT5udW1iZXIo
KSwgaW5kZXgxLCBpbmRleDIpOwotICB9IGVsc2UgewotICAgIHN3aXRjaCAoZmllbGQtPmNwcF90
eXBlKCkpIHsKLSNkZWZpbmUgSEFORExFX1RZUEUoVVBQRVJDQVNFLCBMT1dFUkNBU0UpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFXyMjVVBQRVJDQVNFIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgTXV0YWJsZVJhdzxSZXBlYXRlZEZpZWxkPExPV0VSQ0FTRT4gPihtZXNzYWdlLCBm
aWVsZCkgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIC0+U3dhcEVsZW1lbnRzKGluZGV4
MSwgaW5kZXgyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
YnJlYWsKLQotICAgICAgSEFORExFX1RZUEUoIElOVDMyLCAgaW50MzIpOwotICAgICAgSEFORExF
X1RZUEUoIElOVDY0LCAgaW50NjQpOwotICAgICAgSEFORExFX1RZUEUoVUlOVDMyLCB1aW50MzIp
OwotICAgICAgSEFORExFX1RZUEUoVUlOVDY0LCB1aW50NjQpOwotICAgICAgSEFORExFX1RZUEUo
RE9VQkxFLCBkb3VibGUpOwotICAgICAgSEFORExFX1RZUEUoIEZMT0FULCAgZmxvYXQpOwotICAg
ICAgSEFORExFX1RZUEUoICBCT09MLCAgIGJvb2wpOwotICAgICAgSEFORExFX1RZUEUoICBFTlVN
LCAgICBpbnQpOwotI3VuZGVmIEhBTkRMRV9UWVBFCi0KLSAgICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX1NUUklORzoKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X01FU1NBR0U6Ci0gICAgICAgIGlmIChJc01hcEZpZWxkSW5BcGkoZmllbGQpKSB7Ci0gICAgICAg
ICAgTXV0YWJsZVJhdzxNYXBGaWVsZEJhc2U+KG1lc3NhZ2UsIGZpZWxkKQotICAgICAgICAgICAg
ICAtPk11dGFibGVSZXBlYXRlZEZpZWxkKCkKLSAgICAgICAgICAgICAgLT5Td2FwRWxlbWVudHMo
aW5kZXgxLCBpbmRleDIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIE11dGFibGVSYXc8
UmVwZWF0ZWRQdHJGaWVsZEJhc2U+KG1lc3NhZ2UsIGZpZWxkKQotICAgICAgICAgICAgLT5Td2Fw
RWxlbWVudHMoaW5kZXgxLCBpbmRleDIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgfQotfQotCi1uYW1lc3BhY2UgewotLy8gQ29tcGFyaXNvbiBmdW5jdG9yIGZvciBzb3J0
aW5nIEZpZWxkRGVzY3JpcHRvcnMgYnkgZmllbGQgbnVtYmVyLgotc3RydWN0IEZpZWxkTnVtYmVy
U29ydGVyIHsKLSAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbGVmdCwK
LSAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogcmlnaHQpIGNvbnN0IHsK
LSAgICByZXR1cm4gbGVmdC0+bnVtYmVyKCkgPCByaWdodC0+bnVtYmVyKCk7Ci0gIH0KLX07Ci19
ICAvLyBuYW1lc3BhY2UKLQotdm9pZCBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TGlzdEZp
ZWxkcygKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgIHZlY3Rvcjxjb25zdCBGaWVs
ZERlc2NyaXB0b3IqPiogb3V0cHV0KSBjb25zdCB7Ci0gIG91dHB1dC0+Y2xlYXIoKTsKLQotICAv
LyBPcHRpbWl6YXRpb246ICBUaGUgZGVmYXVsdCBpbnN0YW5jZSBuZXZlciBoYXMgYW55IGZpZWxk
cyBzZXQuCi0gIGlmICgmbWVzc2FnZSA9PSBkZWZhdWx0X2luc3RhbmNlXykgcmV0dXJuOwotCi0g
IG91dHB1dC0+cmVzZXJ2ZShkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKSk7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgZGVzY3JpcHRvcl8tPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+ZmllbGQoaSk7Ci0gICAgaWYg
KGZpZWxkLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgICBpZiAoRmllbGRTaXplKG1lc3NhZ2UsIGZp
ZWxkKSA+IDApIHsKLSAgICAgICAgb3V0cHV0LT5wdXNoX2JhY2soZmllbGQpOwotICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSkgewotICAg
ICAgICBpZiAoSGFzT25lb2ZGaWVsZChtZXNzYWdlLCBmaWVsZCkpIHsKLSAgICAgICAgICBvdXRw
dXQtPnB1c2hfYmFjayhmaWVsZCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoSGFzQml0
KG1lc3NhZ2UsIGZpZWxkKSkgewotICAgICAgICBvdXRwdXQtPnB1c2hfYmFjayhmaWVsZCk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGV4dGVuc2lvbnNfb2Zmc2V0XyAhPSAtMSkgewot
ICAgIEdldEV4dGVuc2lvblNldChtZXNzYWdlKS5BcHBlbmRUb0xpc3QoZGVzY3JpcHRvcl8sIGRl
c2NyaXB0b3JfcG9vbF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQpOwotICB9Ci0KLSAgLy8gTGlzdEZpZWxkcygpIG11c3Qgc29ydCBvdXRwdXQgYnkg
ZmllbGQgbnVtYmVyLgotICBzdGQ6OnNvcnQob3V0cHV0LT5iZWdpbigpLCBvdXRwdXQtPmVuZCgp
LCBGaWVsZE51bWJlclNvcnRlcigpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jdW5kZWYgREVG
SU5FX1BSSU1JVElWRV9BQ0NFU1NPUlMKLSNkZWZpbmUgREVGSU5FX1BSSU1JVElWRV9BQ0NFU1NP
UlMoVFlQRU5BTUUsIFRZUEUsIFBBU1NUWVBFLCBDUFBUWVBFKSAgICAgICAgXAotICBQQVNTVFlQ
RSBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6R2V0IyNUWVBFTkFNRSggICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7ICAgICAgICAgIFwKLSAgICBVU0FHRV9DSEVDS19BTEwo
R2V0IyNUWVBFTkFNRSwgU0lOR1VMQVIsIENQUFRZUEUpOyAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gR2V0RXh0ZW5zaW9uU2V0KG1l
c3NhZ2UpLkdldCMjVFlQRU5BTUUoICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ZmllbGQtPm51bWJlcigpLCBmaWVsZC0+ZGVmYXVsdF92YWx1ZV8jI1BBU1NUWVBFKCkpOyAgICAg
ICAgICAgICAgICAgXAotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gR2V0Rmll
bGQ8VFlQRT4obWVzc2FnZSwgZmllbGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgdm9pZCBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6U2V0IyNU
WVBFTkFNRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICBQQVNTVFlQRSB2YWx1ZSkgY29uc3QgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBVU0FHRV9DSEVDS19BTEwoU2V0IyNUWVBF
TkFNRSwgU0lOR1VMQVIsIENQUFRZUEUpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlm
IChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gTXV0YWJsZUV4dGVuc2lvblNldChtZXNzYWdl
KS0+U2V0IyNUWVBFTkFNRSggICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZmllbGQtPm51
bWJlcigpLCBmaWVsZC0+dHlwZSgpLCB2YWx1ZSwgZmllbGQpOyAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBTZXRGaWVsZDxUWVBFPihtZXNzYWdl
LCBmaWVsZCwgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgUEFTU1RZUEUgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OkdldFJlcGVhdGVk
IyNUWVBFTkFNRSggICAgICAgICAgICAgICAgXAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2Fn
ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQgaW5kZXgpIGNvbnN0IHsgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBVU0FHRV9DSEVDS19BTEwoR2V0UmVwZWF0ZWQjI1RZUEVO
QU1FLCBSRVBFQVRFRCwgQ1BQVFlQRSk7ICAgICAgICAgICAgICAgXAotICAgIGlmIChmaWVsZC0+
aXNfZXh0ZW5zaW9uKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICByZXR1cm4gR2V0RXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLkdldFJlcGVhdGVk
IyNUWVBFTkFNRSggICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZmllbGQtPm51bWJlcigpLCBp
bmRleCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gR2V0UmVwZWF0ZWRGaWVsZDxUWVBFPiht
ZXNzYWdlLCBmaWVsZCwgaW5kZXgpOyAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
dm9pZCBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6U2V0UmVwZWF0ZWQjI1RZUEVOQU1FKCAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpbnQgaW5k
ZXgsIFBBU1NUWVBFIHZhbHVlKSBjb25zdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBVU0FHRV9DSEVDS19BTEwoU2V0UmVwZWF0ZWQjI1RZUEVOQU1FLCBSRVBF
QVRFRCwgQ1BQVFlQRSk7ICAgICAgICAgICAgICAgXAotICAgIGlmIChmaWVsZC0+aXNfZXh0ZW5z
aW9uKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBNdXRhYmxlRXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLT5TZXRSZXBlYXRlZCMjVFlQRU5BTUUo
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZmllbGQtPm51bWJlcigpLCBpbmRleCwgdmFs
dWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICBTZXRSZXBlYXRlZEZpZWxkPFRZUEU+KG1lc3NhZ2UsIGZpZWxkLCBp
bmRleCwgdmFsdWUpOyAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdm9pZCBHZW5l
cmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6QWRkIyNUWVBFTkFNRSggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBQQVNTVFlQRSB2YWx1ZSkg
Y29uc3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBVU0FHRV9DSEVDS19BTEwoQWRkIyNUWVBFTkFNRSwgUkVQRUFURUQsIENQUFRZUEUpOyAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBNdXRh
YmxlRXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLT5BZGQjI1RZUEVOQU1FKCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgZmllbGQtPm51bWJlcigpLCBmaWVsZC0+dHlwZSgpLCBmaWVs
ZC0+b3B0aW9ucygpLnBhY2tlZCgpLCB2YWx1ZSwgICAgXAotICAgICAgICBmaWVsZCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEFkZEZpZWxkPFRZUEU+KG1lc3NhZ2UsIGZp
ZWxkLCB2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIH0KLQotREVGSU5FX1BSSU1JVElWRV9BQ0NFU1NPUlMoSW50MzIgLCBp
bnQzMiAsIGludDMyICwgSU5UMzIgKQotREVGSU5FX1BSSU1JVElWRV9BQ0NFU1NPUlMoSW50NjQg
LCBpbnQ2NCAsIGludDY0ICwgSU5UNjQgKQotREVGSU5FX1BSSU1JVElWRV9BQ0NFU1NPUlMoVUlu
dDMyLCB1aW50MzIsIHVpbnQzMiwgVUlOVDMyKQotREVGSU5FX1BSSU1JVElWRV9BQ0NFU1NPUlMo
VUludDY0LCB1aW50NjQsIHVpbnQ2NCwgVUlOVDY0KQotREVGSU5FX1BSSU1JVElWRV9BQ0NFU1NP
UlMoRmxvYXQgLCBmbG9hdCAsIGZsb2F0ICwgRkxPQVQgKQotREVGSU5FX1BSSU1JVElWRV9BQ0NF
U1NPUlMoRG91YmxlLCBkb3VibGUsIGRvdWJsZSwgRE9VQkxFKQotREVGSU5FX1BSSU1JVElWRV9B
Q0NFU1NPUlMoQm9vbCAgLCBib29sICAsIGJvb2wgICwgQk9PTCAgKQotI3VuZGVmIERFRklORV9Q
UklNSVRJVkVfQUNDRVNTT1JTCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RyaW5nIEdlbmVyYXRlZE1l
c3NhZ2VSZWZsZWN0aW9uOjpHZXRTdHJpbmcoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgewotICBVU0FHRV9DSEVDS19BTEwo
R2V0U3RyaW5nLCBTSU5HVUxBUiwgU1RSSU5HKTsKLSAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24o
KSkgewotICAgIHJldHVybiBHZXRFeHRlbnNpb25TZXQobWVzc2FnZSkuR2V0U3RyaW5nKGZpZWxk
LT5udW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZC0+ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNo
IChmaWVsZC0+b3B0aW9ucygpLmN0eXBlKCkpIHsKLSAgICAgIGRlZmF1bHQ6ICAvLyBUT0RPKGtl
bnRvbik6ICBTdXBwb3J0IG90aGVyIHN0cmluZyByZXBzLgotICAgICAgY2FzZSBGaWVsZE9wdGlv
bnM6OlNUUklORzogewotICAgICAgICBjb25zdCBzdHJpbmcqIGRlZmF1bHRfcHRyID0KLSAgICAg
ICAgICAgICZEZWZhdWx0UmF3PEFyZW5hU3RyaW5nUHRyPihmaWVsZCkuR2V0KE5VTEwpOwotICAg
ICAgICByZXR1cm4gR2V0RmllbGQ8QXJlbmFTdHJpbmdQdHI+KG1lc3NhZ2UsIGZpZWxkKS5HZXQo
ZGVmYXVsdF9wdHIpOwotICAgICAgfQotICAgIH0KLQotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8
ICJDYW4ndCBnZXQgaGVyZS4iOwotICAgIHJldHVybiBHZXRFbXB0eVN0cmluZygpOyAgLy8gTWFr
ZSBjb21waWxlciBoYXBweS4KLSAgfQotfQotCi1jb25zdCBzdHJpbmcmIEdlbmVyYXRlZE1lc3Nh
Z2VSZWZsZWN0aW9uOjpHZXRTdHJpbmdSZWZlcmVuY2UoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVz
c2FnZSwKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBzdHJpbmcqIHNjcmF0Y2gp
IGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0tfQUxMKEdldFN0cmluZ1JlZmVyZW5jZSwgU0lOR1VMQVIs
IFNUUklORyk7Ci0gIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICByZXR1cm4gR2V0
RXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLkdldFN0cmluZyhmaWVsZC0+bnVtYmVyKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPmRlZmF1bHRfdmFs
dWVfc3RyaW5nKCkpOwotICB9IGVsc2UgewotICAgIHN3aXRjaCAoZmllbGQtPm9wdGlvbnMoKS5j
dHlwZSgpKSB7Ci0gICAgICBkZWZhdWx0OiAgLy8gVE9ETyhrZW50b24pOiAgU3VwcG9ydCBvdGhl
ciBzdHJpbmcgcmVwcy4KLSAgICAgIGNhc2UgRmllbGRPcHRpb25zOjpTVFJJTkc6IHsKLSAgICAg
ICAgY29uc3Qgc3RyaW5nKiBkZWZhdWx0X3B0ciA9Ci0gICAgICAgICAgICAmRGVmYXVsdFJhdzxB
cmVuYVN0cmluZ1B0cj4oZmllbGQpLkdldChOVUxMKTsKLSAgICAgICAgcmV0dXJuIEdldEZpZWxk
PEFyZW5hU3RyaW5nUHRyPihtZXNzYWdlLCBmaWVsZCkuR2V0KGRlZmF1bHRfcHRyKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsK
LSAgICByZXR1cm4gR2V0RW1wdHlTdHJpbmcoKTsgIC8vIE1ha2UgY29tcGlsZXIgaGFwcHkuCi0g
IH0KLX0KLQotCi12b2lkIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpTZXRTdHJpbmcoCi0g
ICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBj
b25zdCBzdHJpbmcmIHZhbHVlKSBjb25zdCB7Ci0gIFVTQUdFX0NIRUNLX0FMTChTZXRTdHJpbmcs
IFNJTkdVTEFSLCBTVFJJTkcpOwotICBpZiAoZmllbGQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAg
cmV0dXJuIE11dGFibGVFeHRlbnNpb25TZXQobWVzc2FnZSktPlNldFN0cmluZyhmaWVsZC0+bnVt
YmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZC0+dHlwZSgpLCB2YWx1ZSwgZmllbGQpOwotICB9IGVsc2UgewotICAgIHN3aXRjaCAo
ZmllbGQtPm9wdGlvbnMoKS5jdHlwZSgpKSB7Ci0gICAgICBkZWZhdWx0OiAgLy8gVE9ETyhrZW50
b24pOiAgU3VwcG9ydCBvdGhlciBzdHJpbmcgcmVwcy4KLSAgICAgIGNhc2UgRmllbGRPcHRpb25z
OjpTVFJJTkc6IHsKLSAgICAgICAgY29uc3Qgc3RyaW5nKiBkZWZhdWx0X3B0ciA9Ci0gICAgICAg
ICAgICAmRGVmYXVsdFJhdzxBcmVuYVN0cmluZ1B0cj4oZmllbGQpLkdldChOVUxMKTsKLSAgICAg
ICAgaWYgKGZpZWxkLT5jb250YWluaW5nX29uZW9mKCkgJiYgIUhhc09uZW9mRmllbGQoKm1lc3Nh
Z2UsIGZpZWxkKSkgewotICAgICAgICAgIENsZWFyT25lb2YobWVzc2FnZSwgZmllbGQtPmNvbnRh
aW5pbmdfb25lb2YoKSk7Ci0gICAgICAgICAgTXV0YWJsZUZpZWxkPEFyZW5hU3RyaW5nUHRyPiht
ZXNzYWdlLCBmaWVsZCktPlVuc2FmZVNldERlZmF1bHQoCi0gICAgICAgICAgICAgIGRlZmF1bHRf
cHRyKTsKLSAgICAgICAgfQotICAgICAgICBNdXRhYmxlRmllbGQ8QXJlbmFTdHJpbmdQdHI+KG1l
c3NhZ2UsIGZpZWxkKS0+U2V0KGRlZmF1bHRfcHRyLAotICAgICAgICAgICAgdmFsdWUsIEdldEFy
ZW5hKG1lc3NhZ2UpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0K
LQotc3RyaW5nIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpHZXRSZXBlYXRlZFN0cmluZygK
LSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LCBpbnQgaW5kZXgpIGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0tfQUxMKEdldFJlcGVhdGVkU3RyaW5n
LCBSRVBFQVRFRCwgU1RSSU5HKTsKLSAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24oKSkgewotICAg
IHJldHVybiBHZXRFeHRlbnNpb25TZXQobWVzc2FnZSkuR2V0UmVwZWF0ZWRTdHJpbmcoZmllbGQt
Pm51bWJlcigpLCBpbmRleCk7Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNoIChmaWVsZC0+b3B0aW9u
cygpLmN0eXBlKCkpIHsKLSAgICAgIGRlZmF1bHQ6ICAvLyBUT0RPKGtlbnRvbik6ICBTdXBwb3J0
IG90aGVyIHN0cmluZyByZXBzLgotICAgICAgY2FzZSBGaWVsZE9wdGlvbnM6OlNUUklORzoKLSAg
ICAgICAgcmV0dXJuIEdldFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPihtZXNzYWdlLCBmaWVsZCwg
aW5kZXgpOwotICAgIH0KLQotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4ndCBnZXQgaGVy
ZS4iOwotICAgIHJldHVybiBHZXRFbXB0eVN0cmluZygpOyAgLy8gTWFrZSBjb21waWxlciBoYXBw
eS4KLSAgfQotfQotCi1jb25zdCBzdHJpbmcmIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpH
ZXRSZXBlYXRlZFN0cmluZ1JlZmVyZW5jZSgKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIGludCBpbmRleCwgc3RyaW5nKiBzY3Jh
dGNoKSBjb25zdCB7Ci0gIFVTQUdFX0NIRUNLX0FMTChHZXRSZXBlYXRlZFN0cmluZ1JlZmVyZW5j
ZSwgUkVQRUFURUQsIFNUUklORyk7Ci0gIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAg
ICByZXR1cm4gR2V0RXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLkdldFJlcGVhdGVkU3RyaW5nKGZpZWxk
LT5udW1iZXIoKSwgaW5kZXgpOwotICB9IGVsc2UgewotICAgIHN3aXRjaCAoZmllbGQtPm9wdGlv
bnMoKS5jdHlwZSgpKSB7Ci0gICAgICBkZWZhdWx0OiAgLy8gVE9ETyhrZW50b24pOiAgU3VwcG9y
dCBvdGhlciBzdHJpbmcgcmVwcy4KLSAgICAgIGNhc2UgRmllbGRPcHRpb25zOjpTVFJJTkc6Ci0g
ICAgICAgIHJldHVybiBHZXRSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4obWVzc2FnZSwgZmllbGQs
IGluZGV4KTsKLSAgICB9Ci0KLSAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhl
cmUuIjsKLSAgICByZXR1cm4gR2V0RW1wdHlTdHJpbmcoKTsgIC8vIE1ha2UgY29tcGlsZXIgaGFw
cHkuCi0gIH0KLX0KLQotCi12b2lkIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpTZXRSZXBl
YXRlZFN0cmluZygKLSAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkLAotICAgIGludCBpbmRleCwgY29uc3Qgc3RyaW5nJiB2YWx1ZSkgY29uc3QgewotICBV
U0FHRV9DSEVDS19BTEwoU2V0UmVwZWF0ZWRTdHJpbmcsIFJFUEVBVEVELCBTVFJJTkcpOwotICBp
ZiAoZmllbGQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgTXV0YWJsZUV4dGVuc2lvblNldChtZXNz
YWdlKS0+U2V0UmVwZWF0ZWRTdHJpbmcoCi0gICAgICBmaWVsZC0+bnVtYmVyKCksIGluZGV4LCB2
YWx1ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNoIChmaWVsZC0+b3B0aW9ucygpLmN0eXBlKCkp
IHsKLSAgICAgIGRlZmF1bHQ6ICAvLyBUT0RPKGtlbnRvbik6ICBTdXBwb3J0IG90aGVyIHN0cmlu
ZyByZXBzLgotICAgICAgY2FzZSBGaWVsZE9wdGlvbnM6OlNUUklORzoKLSAgICAgICAgKk11dGFi
bGVSZXBlYXRlZEZpZWxkPHN0cmluZz4obWVzc2FnZSwgZmllbGQsIGluZGV4KSA9IHZhbHVlOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotCi12b2lkIEdlbmVyYXRlZE1lc3NhZ2VS
ZWZsZWN0aW9uOjpBZGRTdHJpbmcoCi0gICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBjb25zdCBzdHJpbmcmIHZhbHVlKSBjb25zdCB7Ci0gIFVT
QUdFX0NIRUNLX0FMTChBZGRTdHJpbmcsIFJFUEVBVEVELCBTVFJJTkcpOwotICBpZiAoZmllbGQt
PmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgTXV0YWJsZUV4dGVuc2lvblNldChtZXNzYWdlKS0+QWRk
U3RyaW5nKGZpZWxkLT5udW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmllbGQtPnR5cGUoKSwgdmFsdWUsIGZpZWxkKTsKLSAgfSBlbHNlIHsKLSAg
ICBzd2l0Y2ggKGZpZWxkLT5vcHRpb25zKCkuY3R5cGUoKSkgewotICAgICAgZGVmYXVsdDogIC8v
IFRPRE8oa2VudG9uKTogIFN1cHBvcnQgb3RoZXIgc3RyaW5nIHJlcHMuCi0gICAgICBjYXNlIEZp
ZWxkT3B0aW9uczo6U1RSSU5HOgotICAgICAgICAqQWRkRmllbGQ8c3RyaW5nPihtZXNzYWdlLCBm
aWVsZCkgPSB2YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1pbmxpbmUgYm9vbCBDcmVhdGVVbmtub3duRW51bVZhbHVlcyhjb25zdCBGaWxl
RGVzY3JpcHRvciogZmlsZSkgewotICByZXR1cm4gZmlsZS0+c3ludGF4KCkgPT0gRmlsZURlc2Ny
aXB0b3I6OlNZTlRBWF9QUk9UTzM7Ci19Ci0KLWNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIEdl
bmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpHZXRFbnVtKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsKLSAgLy8gVXNhZ2Ug
Y2hlY2tlZCBieSBHZXRFbnVtVmFsdWUuCi0gIGludCB2YWx1ZSA9IEdldEVudW1WYWx1ZShtZXNz
YWdlLCBmaWVsZCk7Ci0gIHJldHVybiBmaWVsZC0+ZW51bV90eXBlKCktPkZpbmRWYWx1ZUJ5TnVt
YmVyQ3JlYXRpbmdJZlVua25vd24odmFsdWUpOwotfQotCi1pbnQgR2VuZXJhdGVkTWVzc2FnZVJl
ZmxlY3Rpb246OkdldEVudW1WYWx1ZSgKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0gIFVTQUdFX0NIRUNLX0FMTChHZXRF
bnVtVmFsdWUsIFNJTkdVTEFSLCBFTlVNKTsKLQotICBpbnQzMiB2YWx1ZTsKLSAgaWYgKGZpZWxk
LT5pc19leHRlbnNpb24oKSkgewotICAgIHZhbHVlID0gR2V0RXh0ZW5zaW9uU2V0KG1lc3NhZ2Up
LkdldEVudW0oCi0gICAgICBmaWVsZC0+bnVtYmVyKCksIGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2Vu
dW0oKS0+bnVtYmVyKCkpOwotICB9IGVsc2UgewotICAgIHZhbHVlID0gR2V0RmllbGQ8aW50Piht
ZXNzYWdlLCBmaWVsZCk7Ci0gIH0KLSAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIEdlbmVyYXRl
ZE1lc3NhZ2VSZWZsZWN0aW9uOjpTZXRFbnVtKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciog
dmFsdWUpIGNvbnN0IHsKLSAgLy8gVXNhZ2UgY2hlY2tlZCBieSBTZXRFbnVtVmFsdWUuCi0gIFVT
QUdFX0NIRUNLX0VOVU1fVkFMVUUoU2V0RW51bSk7Ci0gIFNldEVudW1WYWx1ZUludGVybmFsKG1l
c3NhZ2UsIGZpZWxkLCB2YWx1ZS0+bnVtYmVyKCkpOwotfQotCi12b2lkIEdlbmVyYXRlZE1lc3Nh
Z2VSZWZsZWN0aW9uOjpTZXRFbnVtVmFsdWUoCi0gICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBpbnQgdmFsdWUpIGNvbnN0IHsKLSAgVVNBR0Vf
Q0hFQ0tfQUxMKFNldEVudW1WYWx1ZSwgU0lOR1VMQVIsIEVOVU0pOwotICBpZiAoIUNyZWF0ZVVu
a25vd25FbnVtVmFsdWVzKGRlc2NyaXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgLy8gQ2hlY2sgdGhh
dCB0aGUgdmFsdWUgaXMgdmFsaWQgaWYgd2UgZG9uJ3Qgc3VwcG9ydCBkaXJlY3Qgc3RvcmFnZSBv
ZgotICAgIC8vIHVua25vd24gZW51bSB2YWx1ZXMuCi0gICAgY29uc3QgRW51bVZhbHVlRGVzY3Jp
cHRvciogdmFsdWVfZGVzYyA9Ci0gICAgICAgIGZpZWxkLT5lbnVtX3R5cGUoKS0+RmluZFZhbHVl
QnlOdW1iZXIodmFsdWUpOwotICAgIGlmICh2YWx1ZV9kZXNjID09IE5VTEwpIHsKLSAgICAgIEdP
T0dMRV9MT0coREZBVEFMKSA8PCAiU2V0RW51bVZhbHVlIGFjY2VwdHMgb25seSB2YWxpZCBpbnRl
Z2VyIHZhbHVlczogdmFsdWUgIgotICAgICAgICAgICAgICAgICAgPDwgdmFsdWUgPDwgIiB1bmV4
cGVjdGVkIGZvciBmaWVsZCAiIDw8IGZpZWxkLT5mdWxsX25hbWUoKTsKLSAgICAgIC8vIEluIHBy
b2R1Y3Rpb24gYnVpbGRzLCBERkFUQUwgd2lsbCBub3QgdGVybWluYXRlIHRoZSBwcm9ncmFtLCBz
byB3ZSBoYXZlCi0gICAgICAvLyB0byBkbyBzb21ldGhpbmcgcmVhc29uYWJsZToganVzdCBzZXQg
dGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICB2YWx1ZSA9IGZpZWxkLT5kZWZhdWx0X3ZhbHVlX2Vu
dW0oKS0+bnVtYmVyKCk7Ci0gICAgfQotICB9Ci0gIFNldEVudW1WYWx1ZUludGVybmFsKG1lc3Nh
Z2UsIGZpZWxkLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246
OlNldEVudW1WYWx1ZUludGVybmFsKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZmllbGQsCi0gICAgaW50IHZhbHVlKSBjb25zdCB7Ci0gIGlmIChmaWVsZC0+
aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICBNdXRhYmxlRXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLT5TZXRF
bnVtKGZpZWxkLT5udW1iZXIoKSwgZmllbGQtPnR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBmaWVsZCk7Ci0gIH0gZWxzZSB7Ci0gICAgU2V0
RmllbGQ8aW50PihtZXNzYWdlLCBmaWVsZCwgdmFsdWUpOwotICB9Ci19Ci0KLWNvbnN0IEVudW1W
YWx1ZURlc2NyaXB0b3IqIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpHZXRSZXBlYXRlZEVu
dW0oCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCwgaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIFVzYWdlIGNoZWNrZWQgYnkgR2V0UmVwZWF0
ZWRFbnVtVmFsdWUuCi0gIGludCB2YWx1ZSA9IEdldFJlcGVhdGVkRW51bVZhbHVlKG1lc3NhZ2Us
IGZpZWxkLCBpbmRleCk7Ci0gIHJldHVybiBmaWVsZC0+ZW51bV90eXBlKCktPkZpbmRWYWx1ZUJ5
TnVtYmVyQ3JlYXRpbmdJZlVua25vd24odmFsdWUpOwotfQotCi1pbnQgR2VuZXJhdGVkTWVzc2Fn
ZVJlZmxlY3Rpb246OkdldFJlcGVhdGVkRW51bVZhbHVlKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGludCBpbmRleCkgY29uc3Qgewot
ICBVU0FHRV9DSEVDS19BTEwoR2V0UmVwZWF0ZWRFbnVtVmFsdWUsIFJFUEVBVEVELCBFTlVNKTsK
LQotICBpbnQgdmFsdWU7Ci0gIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICB2YWx1
ZSA9IEdldEV4dGVuc2lvblNldChtZXNzYWdlKS5HZXRSZXBlYXRlZEVudW0oZmllbGQtPm51bWJl
cigpLCBpbmRleCk7Ci0gIH0gZWxzZSB7Ci0gICAgdmFsdWUgPSBHZXRSZXBlYXRlZEZpZWxkPGlu
dD4obWVzc2FnZSwgZmllbGQsIGluZGV4KTsKLSAgfQotICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZv
aWQgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OlNldFJlcGVhdGVkRW51bSgKLSAgICBNZXNz
YWdlKiBtZXNzYWdlLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGludCBpbmRl
eCwKLSAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiB2YWx1ZSkgY29uc3QgewotICAvLyBV
c2FnZSBjaGVja2VkIGJ5IFNldFJlcGVhdGVkRW51bVZhbHVlLgotICBVU0FHRV9DSEVDS19FTlVN
X1ZBTFVFKFNldFJlcGVhdGVkRW51bSk7Ci0gIFNldFJlcGVhdGVkRW51bVZhbHVlSW50ZXJuYWwo
bWVzc2FnZSwgZmllbGQsIGluZGV4LCB2YWx1ZS0+bnVtYmVyKCkpOwotfQotCi12b2lkIEdlbmVy
YXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpTZXRSZXBlYXRlZEVudW1WYWx1ZSgKLSAgICBNZXNzYWdl
KiBtZXNzYWdlLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGludCBpbmRleCwK
LSAgICBpbnQgdmFsdWUpIGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0tfQUxMKFNldFJlcGVhdGVkRW51
bSwgUkVQRUFURUQsIEVOVU0pOwotICBpZiAoIUNyZWF0ZVVua25vd25FbnVtVmFsdWVzKGRlc2Ny
aXB0b3JfLT5maWxlKCkpKSB7Ci0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgdmFsdWUgaXMgdmFsaWQg
aWYgd2UgZG9uJ3Qgc3VwcG9ydCBkaXJlY3Qgc3RvcmFnZSBvZgotICAgIC8vIHVua25vd24gZW51
bSB2YWx1ZXMuCi0gICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWVfZGVzYyA9Ci0g
ICAgICAgIGZpZWxkLT5lbnVtX3R5cGUoKS0+RmluZFZhbHVlQnlOdW1iZXIodmFsdWUpOwotICAg
IGlmICh2YWx1ZV9kZXNjID09IE5VTEwpIHsKLSAgICAgIEdPT0dMRV9MT0coREZBVEFMKSA8PCAi
U2V0UmVwZWF0ZWRFbnVtVmFsdWUgYWNjZXB0cyBvbmx5IHZhbGlkIGludGVnZXIgdmFsdWVzOiAi
Ci0gICAgICAgICAgICAgICAgICA8PCAidmFsdWUgIiA8PCB2YWx1ZSA8PCAiIHVuZXhwZWN0ZWQg
Zm9yIGZpZWxkICIKLSAgICAgICAgICAgICAgICAgIDw8IGZpZWxkLT5mdWxsX25hbWUoKTsKLSAg
ICAgIC8vIEluIHByb2R1Y3Rpb24gYnVpbGRzLCBERkFUQUwgd2lsbCBub3QgdGVybWluYXRlIHRo
ZSBwcm9ncmFtLCBzbyB3ZSBoYXZlCi0gICAgICAvLyB0byBkbyBzb21ldGhpbmcgcmVhc29uYWJs
ZToganVzdCBzZXQgdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICB2YWx1ZSA9IGZpZWxkLT5kZWZh
dWx0X3ZhbHVlX2VudW0oKS0+bnVtYmVyKCk7Ci0gICAgfQotICB9Ci0gIFNldFJlcGVhdGVkRW51
bVZhbHVlSW50ZXJuYWwobWVzc2FnZSwgZmllbGQsIGluZGV4LCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OlNldFJlcGVhdGVkRW51bVZhbHVlSW50ZXJuYWwo
Ci0gICAgTWVzc2FnZSogbWVzc2FnZSwKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LCBpbnQgaW5kZXgsCi0gICAgaW50IHZhbHVlKSBjb25zdCB7Ci0gIGlmIChmaWVsZC0+aXNfZXh0
ZW5zaW9uKCkpIHsKLSAgICBNdXRhYmxlRXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLT5TZXRSZXBlYXRl
ZEVudW0oCi0gICAgICBmaWVsZC0+bnVtYmVyKCksIGluZGV4LCB2YWx1ZSk7Ci0gIH0gZWxzZSB7
Ci0gICAgU2V0UmVwZWF0ZWRGaWVsZDxpbnQ+KG1lc3NhZ2UsIGZpZWxkLCBpbmRleCwgdmFsdWUp
OwotICB9Ci19Ci0KLXZvaWQgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OkFkZEVudW0oCi0g
ICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBj
b25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiB2YWx1ZSkgY29uc3QgewotICAvLyBVc2FnZSBjaGVj
a2VkIGJ5IEFkZEVudW1WYWx1ZS4KLSAgVVNBR0VfQ0hFQ0tfRU5VTV9WQUxVRShBZGRFbnVtKTsK
LSAgQWRkRW51bVZhbHVlSW50ZXJuYWwobWVzc2FnZSwgZmllbGQsIHZhbHVlLT5udW1iZXIoKSk7
Ci19Ci0KLXZvaWQgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OkFkZEVudW1WYWx1ZSgKLSAg
ICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIGlu
dCB2YWx1ZSkgY29uc3QgewotICBVU0FHRV9DSEVDS19BTEwoQWRkRW51bSwgUkVQRUFURUQsIEVO
VU0pOwotICBpZiAoIUNyZWF0ZVVua25vd25FbnVtVmFsdWVzKGRlc2NyaXB0b3JfLT5maWxlKCkp
KSB7Ci0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgdmFsdWUgaXMgdmFsaWQgaWYgd2UgZG9uJ3Qgc3Vw
cG9ydCBkaXJlY3Qgc3RvcmFnZSBvZgotICAgIC8vIHVua25vd24gZW51bSB2YWx1ZXMuCi0gICAg
Y29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWVfZGVzYyA9Ci0gICAgICAgIGZpZWxkLT5l
bnVtX3R5cGUoKS0+RmluZFZhbHVlQnlOdW1iZXIodmFsdWUpOwotICAgIGlmICh2YWx1ZV9kZXNj
ID09IE5VTEwpIHsKLSAgICAgIEdPT0dMRV9MT0coREZBVEFMKSA8PCAiQWRkRW51bVZhbHVlIGFj
Y2VwdHMgb25seSB2YWxpZCBpbnRlZ2VyIHZhbHVlczogdmFsdWUgIgotICAgICAgICAgICAgICAg
ICAgPDwgdmFsdWUgPDwgIiB1bmV4cGVjdGVkIGZvciBmaWVsZCAiIDw8IGZpZWxkLT5mdWxsX25h
bWUoKTsKLSAgICAgIC8vIEluIHByb2R1Y3Rpb24gYnVpbGRzLCBERkFUQUwgd2lsbCBub3QgdGVy
bWluYXRlIHRoZSBwcm9ncmFtLCBzbyB3ZSBoYXZlCi0gICAgICAvLyB0byBkbyBzb21ldGhpbmcg
cmVhc29uYWJsZToganVzdCBzZXQgdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICB2YWx1ZSA9IGZp
ZWxkLT5kZWZhdWx0X3ZhbHVlX2VudW0oKS0+bnVtYmVyKCk7Ci0gICAgfQotICB9Ci0gIEFkZEVu
dW1WYWx1ZUludGVybmFsKG1lc3NhZ2UsIGZpZWxkLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR2VuZXJh
dGVkTWVzc2FnZVJlZmxlY3Rpb246OkFkZEVudW1WYWx1ZUludGVybmFsKAotICAgIE1lc3NhZ2Uq
IG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgaW50IHZhbHVlKSBj
b25zdCB7Ci0gIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICBNdXRhYmxlRXh0ZW5z
aW9uU2V0KG1lc3NhZ2UpLT5BZGRFbnVtKGZpZWxkLT5udW1iZXIoKSwgZmllbGQtPnR5cGUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLT5vcHRpb25z
KCkucGFja2VkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSwgZmllbGQpOwotICB9IGVsc2UgewotICAgIEFkZEZpZWxkPGludD4obWVzc2FnZSwgZmll
bGQsIHZhbHVlKTsKLSAgfQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNvbnN0IE1lc3NhZ2UmIEdl
bmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpHZXRNZXNzYWdlKAotICAgIGNvbnN0IE1lc3NhZ2Um
IG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgTWVzc2FnZUZhY3Rv
cnkqIGZhY3RvcnkpIGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0tfQUxMKEdldE1lc3NhZ2UsIFNJTkdV
TEFSLCBNRVNTQUdFKTsKLQotICBpZiAoZmFjdG9yeSA9PSBOVUxMKSBmYWN0b3J5ID0gbWVzc2Fn
ZV9mYWN0b3J5XzsKLQotICBpZiAoZmllbGQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IE1lc3NhZ2UmPigKLSAgICAgICAgR2V0RXh0ZW5zaW9uU2V0KG1l
c3NhZ2UpLkdldE1lc3NhZ2UoCi0gICAgICAgICAgZmllbGQtPm51bWJlcigpLCBmaWVsZC0+bWVz
c2FnZV90eXBlKCksIGZhY3RvcnkpKTsKLSAgfSBlbHNlIHsKLSAgICBjb25zdCBNZXNzYWdlKiBy
ZXN1bHQ7Ci0gICAgcmVzdWx0ID0gR2V0UmF3PGNvbnN0IE1lc3NhZ2UqPihtZXNzYWdlLCBmaWVs
ZCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAgICByZXN1bHQgPSBEZWZhdWx0UmF3
PGNvbnN0IE1lc3NhZ2UqPihmaWVsZCk7Ci0gICAgfQotICAgIHJldHVybiAqcmVzdWx0OwotICB9
Ci19Ci0KLU1lc3NhZ2UqIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpNdXRhYmxlTWVzc2Fn
ZSgKLSAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAot
ICAgIE1lc3NhZ2VGYWN0b3J5KiBmYWN0b3J5KSBjb25zdCB7Ci0gIFVTQUdFX0NIRUNLX0FMTChN
dXRhYmxlTWVzc2FnZSwgU0lOR1VMQVIsIE1FU1NBR0UpOwotCi0gIGlmIChmYWN0b3J5ID09IE5V
TEwpIGZhY3RvcnkgPSBtZXNzYWdlX2ZhY3RvcnlfOwotCi0gIGlmIChmaWVsZC0+aXNfZXh0ZW5z
aW9uKCkpIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVzc2FnZSo+KAotICAgICAgICBNdXRh
YmxlRXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLT5NdXRhYmxlTWVzc2FnZShmaWVsZCwgZmFjdG9yeSkp
OwotICB9IGVsc2UgewotICAgIE1lc3NhZ2UqIHJlc3VsdDsKLSAgICBNZXNzYWdlKiogcmVzdWx0
X2hvbGRlciA9IE11dGFibGVSYXc8TWVzc2FnZSo+KG1lc3NhZ2UsIGZpZWxkKTsKLQotICAgIGlm
IChmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpKSB7Ci0gICAgICBpZiAoIUhhc09uZW9mRmllbGQo
Km1lc3NhZ2UsIGZpZWxkKSkgewotICAgICAgICBDbGVhck9uZW9mKG1lc3NhZ2UsIGZpZWxkLT5j
b250YWluaW5nX29uZW9mKCkpOwotICAgICAgICByZXN1bHRfaG9sZGVyID0gTXV0YWJsZUZpZWxk
PE1lc3NhZ2UqPihtZXNzYWdlLCBmaWVsZCk7Ci0gICAgICAgIGNvbnN0IE1lc3NhZ2UqIGRlZmF1
bHRfbWVzc2FnZSA9IERlZmF1bHRSYXc8Y29uc3QgTWVzc2FnZSo+KGZpZWxkKTsKLSAgICAgICAg
KnJlc3VsdF9ob2xkZXIgPSBkZWZhdWx0X21lc3NhZ2UtPk5ldyhtZXNzYWdlLT5HZXRBcmVuYSgp
KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgU2V0Qml0KG1lc3NhZ2UsIGZpZWxkKTsK
LSAgICB9Ci0KLSAgICBpZiAoKnJlc3VsdF9ob2xkZXIgPT0gTlVMTCkgewotICAgICAgY29uc3Qg
TWVzc2FnZSogZGVmYXVsdF9tZXNzYWdlID0gRGVmYXVsdFJhdzxjb25zdCBNZXNzYWdlKj4oZmll
bGQpOwotICAgICAgKnJlc3VsdF9ob2xkZXIgPSBkZWZhdWx0X21lc3NhZ2UtPk5ldyhtZXNzYWdl
LT5HZXRBcmVuYSgpKTsKLSAgICB9Ci0gICAgcmVzdWx0ID0gKnJlc3VsdF9ob2xkZXI7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi12b2lkIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9u
OjpVbnNhZmVBcmVuYVNldEFsbG9jYXRlZE1lc3NhZ2UoCi0gICAgTWVzc2FnZSogbWVzc2FnZSwK
LSAgICBNZXNzYWdlKiBzdWJfbWVzc2FnZSwKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkKSBjb25zdCB7Ci0gIFVTQUdFX0NIRUNLX0FMTChTZXRBbGxvY2F0ZWRNZXNzYWdlLCBTSU5H
VUxBUiwgTUVTU0FHRSk7Ci0KLSAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24oKSkgewotICAgIE11
dGFibGVFeHRlbnNpb25TZXQobWVzc2FnZSktPlNldEFsbG9jYXRlZE1lc3NhZ2UoCi0gICAgICAg
IGZpZWxkLT5udW1iZXIoKSwgZmllbGQtPnR5cGUoKSwgZmllbGQsIHN1Yl9tZXNzYWdlKTsKLSAg
fSBlbHNlIHsKLSAgICBpZiAoZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSkgewotICAgICAgaWYg
KHN1Yl9tZXNzYWdlID09IE5VTEwpIHsKLSAgICAgICAgQ2xlYXJPbmVvZihtZXNzYWdlLCBmaWVs
ZC0+Y29udGFpbmluZ19vbmVvZigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAg
ICBDbGVhck9uZW9mKG1lc3NhZ2UsIGZpZWxkLT5jb250YWluaW5nX29uZW9mKCkpOwotICAgICAg
ICAqTXV0YWJsZVJhdzxNZXNzYWdlKj4obWVzc2FnZSwgZmllbGQpID0gc3ViX21lc3NhZ2U7Ci0g
ICAgICBTZXRPbmVvZkNhc2UobWVzc2FnZSwgZmllbGQpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChzdWJfbWVzc2FnZSA9PSBOVUxMKSB7Ci0gICAgICBDbGVhckJpdChtZXNzYWdl
LCBmaWVsZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFNldEJpdChtZXNzYWdlLCBmaWVsZCk7Ci0g
ICAgfQotICAgIE1lc3NhZ2UqKiBzdWJfbWVzc2FnZV9ob2xkZXIgPSBNdXRhYmxlUmF3PE1lc3Nh
Z2UqPihtZXNzYWdlLCBmaWVsZCk7Ci0gICAgaWYgKEdldEFyZW5hKG1lc3NhZ2UpID09IE5VTEwp
IHsKLSAgICAgIGRlbGV0ZSAqc3ViX21lc3NhZ2VfaG9sZGVyOwotICAgIH0KLSAgICAqc3ViX21l
c3NhZ2VfaG9sZGVyID0gc3ViX21lc3NhZ2U7Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvbjo6U2V0QWxsb2NhdGVkTWVzc2FnZSgKLSAgICBNZXNzYWdlKiBtZXNzYWdl
LAotICAgIE1lc3NhZ2UqIHN1Yl9tZXNzYWdlLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQpIGNvbnN0IHsKLSAgLy8gSWYgbWVzc2FnZSBhbmQgc3ViLW1lc3NhZ2UgYXJlIGluIGRp
ZmZlcmVudCBtZW1vcnkgb3duZXJzaGlwIGRvbWFpbnMKLSAgLy8gKGRpZmZlcmVudCBhcmVuYXMs
IG9yIG9uZSBpcyBvbiBoZWFwIGFuZCBvbmUgaXMgbm90KSwgdGhlbiB3ZSBtYXkgbmVlZCB0bwot
ICAvLyBkbyBhIGNvcHkuCi0gIGlmIChzdWJfbWVzc2FnZSAhPSBOVUxMICYmCi0gICAgICBzdWJf
bWVzc2FnZS0+R2V0QXJlbmEoKSAhPSBtZXNzYWdlLT5HZXRBcmVuYSgpKSB7Ci0gICAgaWYgKHN1
Yl9tZXNzYWdlLT5HZXRBcmVuYSgpID09IE5VTEwgJiYgbWVzc2FnZS0+R2V0QXJlbmEoKSAhPSBO
VUxMKSB7Ci0gICAgICAvLyBDYXNlIDE6IHBhcmVudCBpcyBvbiBhbiBhcmVuYSBhbmQgY2hpbGQg
aXMgaGVhcC1hbGxvY2F0ZWQuIFdlIGNhbiBhZGQKLSAgICAgIC8vIHRoZSBjaGlsZCB0byB0aGUg
YXJlbmEncyBPd24oKSBsaXN0IHRvIGZyZWUgb24gYXJlbmEgZGVzdHJ1Y3Rpb24sIHRoZW4KLSAg
ICAgIC8vIHNldCBvdXIgcG9pbnRlci4KLSAgICAgIG1lc3NhZ2UtPkdldEFyZW5hKCktPk93bihz
dWJfbWVzc2FnZSk7Ci0gICAgICBVbnNhZmVBcmVuYVNldEFsbG9jYXRlZE1lc3NhZ2UobWVzc2Fn
ZSwgc3ViX21lc3NhZ2UsIGZpZWxkKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gQ2FzZSAyOiBh
bGwgb3RoZXIgY2FzZXMuIFdlIG5lZWQgdG8gbWFrZSBhIGNvcHkuIE11dGFibGVNZXNzYWdlKCkg
d2lsbAotICAgICAgLy8gZWl0aGVyIGdldCB0aGUgZXhpc3RpbmcgbWVzc2FnZSBvYmplY3QsIG9y
IGluc3RhbnRpYXRlIGEgbmV3IG9uZSBhcwotICAgICAgLy8gYXBwcm9wcmlhdGUgdy5yLnQuIG91
ciBhcmVuYS4KLSAgICAgIE1lc3NhZ2UqIHN1Yl9tZXNzYWdlX2NvcHkgPSBNdXRhYmxlTWVzc2Fn
ZShtZXNzYWdlLCBmaWVsZCk7Ci0gICAgICBzdWJfbWVzc2FnZV9jb3B5LT5Db3B5RnJvbSgqc3Vi
X21lc3NhZ2UpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvLyBTYW1lIG1lbW9yeSBvd25lcnNo
aXAgZG9tYWlucy4KLSAgICBVbnNhZmVBcmVuYVNldEFsbG9jYXRlZE1lc3NhZ2UobWVzc2FnZSwg
c3ViX21lc3NhZ2UsIGZpZWxkKTsKLSAgfQotfQotCi1NZXNzYWdlKiBHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvbjo6VW5zYWZlQXJlbmFSZWxlYXNlTWVzc2FnZSgKLSAgICBNZXNzYWdlKiBtZXNz
YWdlLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgTWVzc2FnZUZhY3Rv
cnkqIGZhY3RvcnkpIGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0tfQUxMKFJlbGVhc2VNZXNzYWdlLCBT
SU5HVUxBUiwgTUVTU0FHRSk7Ci0KLSAgaWYgKGZhY3RvcnkgPT0gTlVMTCkgZmFjdG9yeSA9IG1l
c3NhZ2VfZmFjdG9yeV87Ci0KLSAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24oKSkgewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNZXNzYWdlKj4oCi0gICAgICAgIE11dGFibGVFeHRlbnNpb25TZXQo
bWVzc2FnZSktPlJlbGVhc2VNZXNzYWdlKGZpZWxkLCBmYWN0b3J5KSk7Ci0gIH0gZWxzZSB7Ci0g
ICAgQ2xlYXJCaXQobWVzc2FnZSwgZmllbGQpOwotICAgIGlmIChmaWVsZC0+Y29udGFpbmluZ19v
bmVvZigpKSB7Ci0gICAgICBpZiAoSGFzT25lb2ZGaWVsZCgqbWVzc2FnZSwgZmllbGQpKSB7Ci0g
ICAgICAgICpNdXRhYmxlT25lb2ZDYXNlKG1lc3NhZ2UsIGZpZWxkLT5jb250YWluaW5nX29uZW9m
KCkpID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQot
ICAgIH0KLSAgICBNZXNzYWdlKiogcmVzdWx0ID0gTXV0YWJsZVJhdzxNZXNzYWdlKj4obWVzc2Fn
ZSwgZmllbGQpOwotICAgIE1lc3NhZ2UqIHJldCA9ICpyZXN1bHQ7Ci0gICAgKnJlc3VsdCA9IE5V
TEw7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi1NZXNzYWdlKiBHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvbjo6UmVsZWFzZU1lc3NhZ2UoCi0gICAgTWVzc2FnZSogbWVzc2FnZSwKLSAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIE1lc3NhZ2VGYWN0b3J5KiBmYWN0b3J5
KSBjb25zdCB7Ci0gIE1lc3NhZ2UqIHJlbGVhc2VkID0gVW5zYWZlQXJlbmFSZWxlYXNlTWVzc2Fn
ZShtZXNzYWdlLCBmaWVsZCwgZmFjdG9yeSk7Ci0gIGlmIChHZXRBcmVuYShtZXNzYWdlKSAhPSBO
VUxMICYmIHJlbGVhc2VkICE9IE5VTEwpIHsKLSAgICBNZXNzYWdlKiBjb3B5X2Zyb21fYXJlbmEg
PSByZWxlYXNlZC0+TmV3KCk7Ci0gICAgY29weV9mcm9tX2FyZW5hLT5Db3B5RnJvbSgqcmVsZWFz
ZWQpOwotICAgIHJlbGVhc2VkID0gY29weV9mcm9tX2FyZW5hOwotICB9Ci0gIHJldHVybiByZWxl
YXNlZDsKLX0KLQotY29uc3QgTWVzc2FnZSYgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Okdl
dFJlcGVhdGVkTWVzc2FnZSgKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQgaW5kZXgpIGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0tfQUxM
KEdldFJlcGVhdGVkTWVzc2FnZSwgUkVQRUFURUQsIE1FU1NBR0UpOwotCi0gIGlmIChmaWVsZC0+
aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTWVzc2FnZSY+
KAotICAgICAgICBHZXRFeHRlbnNpb25TZXQobWVzc2FnZSkuR2V0UmVwZWF0ZWRNZXNzYWdlKGZp
ZWxkLT5udW1iZXIoKSwgaW5kZXgpKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoSXNNYXBGaWVsZElu
QXBpKGZpZWxkKSkgewotICAgICAgcmV0dXJuIEdldFJhdzxNYXBGaWVsZEJhc2U+KG1lc3NhZ2Us
IGZpZWxkKQotICAgICAgICAgIC5HZXRSZXBlYXRlZEZpZWxkKCkKLSAgICAgICAgICAuR2V0PEdl
bmVyaWNUeXBlSGFuZGxlcjxNZXNzYWdlPiA+KGluZGV4KTsKLSAgICB9IGVsc2UgewotICAgICAg
cmV0dXJuIEdldFJhdzxSZXBlYXRlZFB0ckZpZWxkQmFzZT4obWVzc2FnZSwgZmllbGQpCi0gICAg
ICAgICAgLkdldDxHZW5lcmljVHlwZUhhbmRsZXI8TWVzc2FnZT4gPihpbmRleCk7Ci0gICAgfQot
ICB9Ci19Ci0KLU1lc3NhZ2UqIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpNdXRhYmxlUmVw
ZWF0ZWRNZXNzYWdlKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQsIGludCBpbmRleCkgY29uc3QgewotICBVU0FHRV9DSEVDS19BTEwoTXV0YWJsZVJl
cGVhdGVkTWVzc2FnZSwgUkVQRUFURUQsIE1FU1NBR0UpOwotCi0gIGlmIChmaWVsZC0+aXNfZXh0
ZW5zaW9uKCkpIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVzc2FnZSo+KAotICAgICAgICBN
dXRhYmxlRXh0ZW5zaW9uU2V0KG1lc3NhZ2UpLT5NdXRhYmxlUmVwZWF0ZWRNZXNzYWdlKAotICAg
ICAgICAgIGZpZWxkLT5udW1iZXIoKSwgaW5kZXgpKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoSXNN
YXBGaWVsZEluQXBpKGZpZWxkKSkgewotICAgICAgcmV0dXJuIE11dGFibGVSYXc8TWFwRmllbGRC
YXNlPihtZXNzYWdlLCBmaWVsZCkKLSAgICAgICAgICAtPk11dGFibGVSZXBlYXRlZEZpZWxkKCkK
LSAgICAgICAgICAtPk11dGFibGU8R2VuZXJpY1R5cGVIYW5kbGVyPE1lc3NhZ2U+ID4oaW5kZXgp
OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gTXV0YWJsZVJhdzxSZXBlYXRlZFB0ckZpZWxk
QmFzZT4obWVzc2FnZSwgZmllbGQpCi0gICAgICAgIC0+TXV0YWJsZTxHZW5lcmljVHlwZUhhbmRs
ZXI8TWVzc2FnZT4gPihpbmRleCk7Ci0gICAgfQotICB9Ci19Ci0KLU1lc3NhZ2UqIEdlbmVyYXRl
ZE1lc3NhZ2VSZWZsZWN0aW9uOjpBZGRNZXNzYWdlKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UsIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgTWVzc2FnZUZhY3RvcnkqIGZhY3Rvcnkp
IGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0tfQUxMKEFkZE1lc3NhZ2UsIFJFUEVBVEVELCBNRVNTQUdF
KTsKLQotICBpZiAoZmFjdG9yeSA9PSBOVUxMKSBmYWN0b3J5ID0gbWVzc2FnZV9mYWN0b3J5XzsK
LQotICBpZiAoZmllbGQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PE1lc3NhZ2UqPigKLSAgICAgICAgTXV0YWJsZUV4dGVuc2lvblNldChtZXNzYWdlKS0+QWRkTWVz
c2FnZShmaWVsZCwgZmFjdG9yeSkpOwotICB9IGVsc2UgewotICAgIE1lc3NhZ2UqIHJlc3VsdCA9
IE5VTEw7Ci0KLSAgICAvLyBXZSBjYW4ndCB1c2UgQWRkRmllbGQ8TWVzc2FnZT4oKSBiZWNhdXNl
IFJlcGVhdGVkUHRyRmllbGRCYXNlIGRvZXNuJ3QKLSAgICAvLyBrbm93IGhvdyB0byBhbGxvY2F0
ZSBvbmUuCi0gICAgUmVwZWF0ZWRQdHJGaWVsZEJhc2UqIHJlcGVhdGVkID0gTlVMTDsKLSAgICBp
ZiAoSXNNYXBGaWVsZEluQXBpKGZpZWxkKSkgewotICAgICAgcmVwZWF0ZWQgPQotICAgICAgICAg
IE11dGFibGVSYXc8TWFwRmllbGRCYXNlPihtZXNzYWdlLCBmaWVsZCktPk11dGFibGVSZXBlYXRl
ZEZpZWxkKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlcGVhdGVkID0gTXV0YWJsZVJhdzxSZXBl
YXRlZFB0ckZpZWxkQmFzZT4obWVzc2FnZSwgZmllbGQpOwotICAgIH0KLSAgICByZXN1bHQgPSBy
ZXBlYXRlZC0+QWRkRnJvbUNsZWFyZWQ8R2VuZXJpY1R5cGVIYW5kbGVyPE1lc3NhZ2U+ID4oKTsK
LSAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgIC8vIFdlIG11c3QgYWxsb2NhdGUgYSBu
ZXcgb2JqZWN0LgotICAgICAgY29uc3QgTWVzc2FnZSogcHJvdG90eXBlOwotICAgICAgaWYgKHJl
cGVhdGVkLT5zaXplKCkgPT0gMCkgewotICAgICAgICBwcm90b3R5cGUgPSBmYWN0b3J5LT5HZXRQ
cm90b3R5cGUoZmllbGQtPm1lc3NhZ2VfdHlwZSgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHByb3RvdHlwZSA9ICZyZXBlYXRlZC0+R2V0PEdlbmVyaWNUeXBlSGFuZGxlcjxNZXNzYWdlPiA+
KDApOwotICAgICAgfQotICAgICAgcmVzdWx0ID0gcHJvdG90eXBlLT5OZXcobWVzc2FnZS0+R2V0
QXJlbmEoKSk7Ci0gICAgICAvLyBXZSBjYW4gZ3VhcmFudGVlIGhlcmUgdGhhdCByZXBlYXRlZCBh
bmQgcmVzdWx0IGFyZSBlaXRoZXIgYm90aCBoZWFwCi0gICAgICAvLyBhbGxvY2F0ZWQgb3IgYXJl
bmEgb3duZWQuIFNvIGl0IGlzIHNhZmUgdG8gY2FsbCB0aGUgdW5zYWZlIHZlcnNpb24KLSAgICAg
IC8vIG9mIEFkZEFsbG9jYXRlZC4KLSAgICAgIHJlcGVhdGVkLT5VbnNhZmVBcmVuYUFkZEFsbG9j
YXRlZDxHZW5lcmljVHlwZUhhbmRsZXI8TWVzc2FnZT4gPihyZXN1bHQpOwotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KLQotdm9pZCBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlv
bjo6QWRkQWxsb2NhdGVkTWVzc2FnZSgKLSAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIE1lc3NhZ2UqIG5ld19lbnRyeSkgY29uc3QgewotICBV
U0FHRV9DSEVDS19BTEwoQWRkQWxsb2NhdGVkTWVzc2FnZSwgUkVQRUFURUQsIE1FU1NBR0UpOwot
Ci0gIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICBNdXRhYmxlRXh0ZW5zaW9uU2V0
KG1lc3NhZ2UpLT5BZGRBbGxvY2F0ZWRNZXNzYWdlKGZpZWxkLCBuZXdfZW50cnkpOwotICB9IGVs
c2UgewotICAgIFJlcGVhdGVkUHRyRmllbGRCYXNlKiByZXBlYXRlZCA9IE5VTEw7Ci0gICAgaWYg
KElzTWFwRmllbGRJbkFwaShmaWVsZCkpIHsKLSAgICAgIHJlcGVhdGVkID0KLSAgICAgICAgICBN
dXRhYmxlUmF3PE1hcEZpZWxkQmFzZT4obWVzc2FnZSwgZmllbGQpLT5NdXRhYmxlUmVwZWF0ZWRG
aWVsZCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXBlYXRlZCA9IE11dGFibGVSYXc8UmVwZWF0
ZWRQdHJGaWVsZEJhc2U+KG1lc3NhZ2UsIGZpZWxkKTsKLSAgICB9Ci0gICAgcmVwZWF0ZWQtPkFk
ZEFsbG9jYXRlZDxHZW5lcmljVHlwZUhhbmRsZXI8TWVzc2FnZT4gPihuZXdfZW50cnkpOwotICB9
Ci19Ci0KLXZvaWQqIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpNdXRhYmxlUmF3UmVwZWF0
ZWRGaWVsZCgKLSAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkLAotICAgIEZpZWxkRGVzY3JpcHRvcjo6Q3BwVHlwZSBjcHB0eXBlLAotICAgIGludCBjdHlw
ZSwgY29uc3QgRGVzY3JpcHRvciogZGVzYykgY29uc3QgewotICBVU0FHRV9DSEVDS19SRVBFQVRF
RCgiTXV0YWJsZVJhd1JlcGVhdGVkRmllbGQiKTsKLSAgaWYgKGZpZWxkLT5jcHBfdHlwZSgpICE9
IGNwcHR5cGUpCi0gICAgUmVwb3J0UmVmbGVjdGlvblVzYWdlVHlwZUVycm9yKGRlc2NyaXB0b3Jf
LAotICAgICAgICBmaWVsZCwgIk11dGFibGVSYXdSZXBlYXRlZEZpZWxkIiwgY3BwdHlwZSk7Ci0g
IGlmIChjdHlwZSA+PSAwKQotICAgIEdPT0dMRV9DSEVDS19FUShmaWVsZC0+b3B0aW9ucygpLmN0
eXBlKCksIGN0eXBlKSA8PCAic3VidHlwZSBtaXNtYXRjaCI7Ci0gIGlmIChkZXNjICE9IE5VTEwp
Ci0gICAgR09PR0xFX0NIRUNLX0VRKGZpZWxkLT5tZXNzYWdlX3R5cGUoKSwgZGVzYykgPDwgIndy
b25nIHN1Ym1lc3NhZ2UgdHlwZSI7Ci0gIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAg
ICByZXR1cm4gTXV0YWJsZUV4dGVuc2lvblNldChtZXNzYWdlKS0+TXV0YWJsZVJhd1JlcGVhdGVk
RmllbGQoCi0gICAgICAgIGZpZWxkLT5udW1iZXIoKSwgZmllbGQtPnR5cGUoKSwgZmllbGQtPmlz
X3BhY2tlZCgpLCBmaWVsZCk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gVHJpZ2dlciB0cmFuc2Zvcm0g
Zm9yIE1hcEZpZWxkCi0gICAgaWYgKElzTWFwRmllbGRJbkFwaShmaWVsZCkpIHsKLSAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PE1hcEZpZWxkQmFzZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDgqPihtZXNzYWdlKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRzX1tmaWVsZC0+aW5kZXgoKV0pCi0gICAgICAgICAgLT5NdXRhYmxlUmVwZWF0
ZWRGaWVsZCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KG1l
c3NhZ2UpICsgb2Zmc2V0c19bZmllbGQtPmluZGV4KCldOwotICB9Ci19Ci0KLWNvbnN0IHZvaWQq
IEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpHZXRSYXdSZXBlYXRlZEZpZWxkKAotICAgIGNv
bnN0IE1lc3NhZ2UmIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAg
RmllbGREZXNjcmlwdG9yOjpDcHBUeXBlIGNwcHR5cGUsCi0gICAgaW50IGN0eXBlLCBjb25zdCBE
ZXNjcmlwdG9yKiBkZXNjKSBjb25zdCB7Ci0gIFVTQUdFX0NIRUNLX1JFUEVBVEVEKCJHZXRSYXdS
ZXBlYXRlZEZpZWxkIik7Ci0gIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSAhPSBjcHB0eXBlKQotICAg
IFJlcG9ydFJlZmxlY3Rpb25Vc2FnZVR5cGVFcnJvcihkZXNjcmlwdG9yXywKLSAgICAgICAgZmll
bGQsICJHZXRSYXdSZXBlYXRlZEZpZWxkIiwgY3BwdHlwZSk7Ci0gIGlmIChjdHlwZSA+PSAwKQot
ICAgIEdPT0dMRV9DSEVDS19FUShmaWVsZC0+b3B0aW9ucygpLmN0eXBlKCksIGN0eXBlKSA8PCAi
c3VidHlwZSBtaXNtYXRjaCI7Ci0gIGlmIChkZXNjICE9IE5VTEwpCi0gICAgR09PR0xFX0NIRUNL
X0VRKGZpZWxkLT5tZXNzYWdlX3R5cGUoKSwgZGVzYykgPDwgIndyb25nIHN1Ym1lc3NhZ2UgdHlw
ZSI7Ci0gIGlmIChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICAvLyBTaG91bGQgdXNlIGV4
dGVuc2lvbl9zZXQ6OkdldFJhd1JlcGVhdGVkRmllbGQuIEhvd2V2ZXIsIHRoZSByZXF1aXJlZAot
ICAgIC8vIHBhcmFtZXRlciAiZGVmYXVsdCByZXBlYXRlZCB2YWx1ZSIgaXMgbm90IHZlcnkgZWFz
eSB0byBnZXQgaGVyZS4KLSAgICAvLyBNYXAgaXMgbm90IHN1cHBvcnRlZCBpbiBleHRlbnNpb25z
LCBpdCBpcyBhY2NlcHRhYmxlIHRvIHVzZQotICAgIC8vIGV4dGVuc2lvbl9zZXQ6Ok11dGFibGVS
YXdSZXBlYXRlZEZpZWxkIHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgbWVzc2FnZS4KLSAgICBy
ZXR1cm4gTXV0YWJsZUV4dGVuc2lvblNldChjb25zdF9jYXN0PE1lc3NhZ2UqPigmbWVzc2FnZSkp
Ci0gICAgICAgIC0+TXV0YWJsZVJhd1JlcGVhdGVkRmllbGQoCi0gICAgICAgIGZpZWxkLT5udW1i
ZXIoKSwgZmllbGQtPnR5cGUoKSwgZmllbGQtPmlzX3BhY2tlZCgpLCBmaWVsZCk7Ci0gIH0gZWxz
ZSB7Ci0gICAgLy8gVHJpZ2dlciB0cmFuc2Zvcm0gZm9yIE1hcEZpZWxkCi0gICAgaWYgKElzTWFw
RmllbGRJbkFwaShmaWVsZCkpIHsKLSAgICAgIHJldHVybiAmKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTWFwRmllbGRCYXNlKj4oCi0gICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OCo+KCZtZXNzYWdlKSArCi0gICAgICAgICAgb2Zmc2V0c19bZmllbGQtPmluZGV4KCldKS0+R2V0
UmVwZWF0ZWRGaWVsZCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDgqPigmbWVzc2FnZSkgKyBvZmZzZXRzX1tmaWVsZC0+aW5kZXgoKV07Ci0gIH0KLX0K
LQotY29uc3QgRmllbGREZXNjcmlwdG9yKiBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6R2V0
T25lb2ZGaWVsZERlc2NyaXB0b3IoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICBj
b25zdCBPbmVvZkRlc2NyaXB0b3IqIG9uZW9mX2Rlc2NyaXB0b3IpIGNvbnN0IHsKLSAgdWludDMy
IGZpZWxkX251bWJlciA9IEdldE9uZW9mQ2FzZShtZXNzYWdlLCBvbmVvZl9kZXNjcmlwdG9yKTsK
LSAgaWYgKGZpZWxkX251bWJlciA9PSAwKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0
dXJuIGRlc2NyaXB0b3JfLT5GaW5kRmllbGRCeU51bWJlcihmaWVsZF9udW1iZXIpOwotfQotCi1i
b29sIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpDb250YWluc01hcEtleSgKLSAgICBjb25z
dCBNZXNzYWdlJiBtZXNzYWdlLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0g
ICAgY29uc3QgTWFwS2V5JiBrZXkpIGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0soSXNNYXBGaWVsZElu
QXBpKGZpZWxkKSwKLSAgICAgICAgICAgICAgIkxvb2t1cE1hcFZhbHVlIiwKLSAgICAgICAgICAg
ICAgIkZpZWxkIGlzIG5vdCBhIG1hcCBmaWVsZC4iKTsKLSAgcmV0dXJuIEdldFJhdzxNYXBGaWVs
ZEJhc2U+KG1lc3NhZ2UsIGZpZWxkKS5Db250YWluc01hcEtleShrZXkpOwotfQotCi1ib29sIEdl
bmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpJbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAgIE1l
c3NhZ2UqIG1lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBj
b25zdCBNYXBLZXkmIGtleSwKLSAgICBNYXBWYWx1ZVJlZiogdmFsKSBjb25zdCB7Ci0gIFVTQUdF
X0NIRUNLKElzTWFwRmllbGRJbkFwaShmaWVsZCksCi0gICAgICAgICAgICAgICJJbnNlcnRPckxv
b2t1cE1hcFZhbHVlIiwKLSAgICAgICAgICAgICAgIkZpZWxkIGlzIG5vdCBhIG1hcCBmaWVsZC4i
KTsKLSAgdmFsLT5TZXRUeXBlKGZpZWxkLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1l
KCJ2YWx1ZSIpLT5jcHBfdHlwZSgpKTsKLSAgcmV0dXJuIE11dGFibGVSYXc8TWFwRmllbGRCYXNl
PihtZXNzYWdlLCBmaWVsZCktPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBrZXksIHZh
bCk7Ci19Ci0KLWJvb2wgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OkRlbGV0ZU1hcFZhbHVl
KAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCwKLSAgICBjb25zdCBNYXBLZXkmIGtleSkgY29uc3QgewotICBVU0FHRV9DSEVDSyhJc01hcEZp
ZWxkSW5BcGkoZmllbGQpLAotICAgICAgICAgICAgICAiRGVsZXRlTWFwVmFsdWUiLAotICAgICAg
ICAgICAgICAiRmllbGQgaXMgbm90IGEgbWFwIGZpZWxkLiIpOwotICByZXR1cm4gTXV0YWJsZVJh
dzxNYXBGaWVsZEJhc2U+KG1lc3NhZ2UsIGZpZWxkKS0+RGVsZXRlTWFwVmFsdWUoa2V5KTsKLX0K
LQotTWFwSXRlcmF0b3IgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Ok1hcEJlZ2luKAotICAg
IE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29u
c3QgewotICBVU0FHRV9DSEVDSyhJc01hcEZpZWxkSW5BcGkoZmllbGQpLAotICAgICAgICAgICAg
ICAiTWFwQmVnaW4iLAotICAgICAgICAgICAgICAiRmllbGQgaXMgbm90IGEgbWFwIGZpZWxkLiIp
OwotICBNYXBJdGVyYXRvciBpdGVyKG1lc3NhZ2UsIGZpZWxkKTsKLSAgR2V0UmF3PE1hcEZpZWxk
QmFzZT4oKm1lc3NhZ2UsIGZpZWxkKS5NYXBCZWdpbigmaXRlcik7Ci0gIHJldHVybiBpdGVyOwot
fQotCi1NYXBJdGVyYXRvciBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TWFwRW5kKAotICAg
IE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29u
c3QgewotICBVU0FHRV9DSEVDSyhJc01hcEZpZWxkSW5BcGkoZmllbGQpLAotICAgICAgICAgICAg
ICAiTWFwRW5kIiwKLSAgICAgICAgICAgICAgIkZpZWxkIGlzIG5vdCBhIG1hcCBmaWVsZC4iKTsK
LSAgTWFwSXRlcmF0b3IgaXRlcihtZXNzYWdlLCBmaWVsZCk7Ci0gIEdldFJhdzxNYXBGaWVsZEJh
c2U+KCptZXNzYWdlLCBmaWVsZCkuTWFwRW5kKCZpdGVyKTsKLSAgcmV0dXJuIGl0ZXI7Ci19Ci0K
LWludCBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TWFwU2l6ZSgKLSAgICBjb25zdCBNZXNz
YWdlJiBtZXNzYWdlLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsK
LSAgVVNBR0VfQ0hFQ0soSXNNYXBGaWVsZEluQXBpKGZpZWxkKSwKLSAgICAgICAgICAgICAgIk1h
cFNpemUiLAotICAgICAgICAgICAgICAiRmllbGQgaXMgbm90IGEgbWFwIGZpZWxkLiIpOwotICBy
ZXR1cm4gR2V0UmF3PE1hcEZpZWxkQmFzZT4obWVzc2FnZSwgZmllbGQpLnNpemUoKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY29uc3QgRmllbGREZXNjcmlwdG9yKiBHZW5lcmF0
ZWRNZXNzYWdlUmVmbGVjdGlvbjo6RmluZEtub3duRXh0ZW5zaW9uQnlOYW1lKAotICAgIGNvbnN0
IHN0cmluZyYgbmFtZSkgY29uc3QgewotICBpZiAoZXh0ZW5zaW9uc19vZmZzZXRfID09IC0xKSBy
ZXR1cm4gTlVMTDsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHJlc3VsdCA9IGRlc2NyaXB0
b3JfcG9vbF8tPkZpbmRFeHRlbnNpb25CeU5hbWUobmFtZSk7Ci0gIGlmIChyZXN1bHQgIT0gTlVM
TCAmJiByZXN1bHQtPmNvbnRhaW5pbmdfdHlwZSgpID09IGRlc2NyaXB0b3JfKSB7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSAgfQotCi0gIGlmIChkZXNjcmlwdG9yXy0+b3B0aW9ucygpLm1lc3NhZ2Vf
c2V0X3dpcmVfZm9ybWF0KCkpIHsKLSAgICAvLyBNZXNzYWdlU2V0IGV4dGVuc2lvbnMgbWF5IGJl
IGlkZW50aWZpZWQgYnkgdHlwZSBuYW1lLgotICAgIGNvbnN0IERlc2NyaXB0b3IqIHR5cGUgPSBk
ZXNjcmlwdG9yX3Bvb2xfLT5GaW5kTWVzc2FnZVR5cGVCeU5hbWUobmFtZSk7Ci0gICAgaWYgKHR5
cGUgIT0gTlVMTCkgewotICAgICAgLy8gTG9vayBmb3IgYSBtYXRjaGluZyBleHRlbnNpb24gaW4g
dGhlIGZvcmVpZ24gdHlwZSdzIHNjb3BlLgotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBl
LT5leHRlbnNpb25fY291bnQoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZXh0ZW5zaW9uID0gdHlwZS0+ZXh0ZW5zaW9uKGkpOwotICAgICAgICBpZiAoZXh0ZW5zaW9u
LT5jb250YWluaW5nX3R5cGUoKSA9PSBkZXNjcmlwdG9yXyAmJgotICAgICAgICAgICAgZXh0ZW5z
aW9uLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0UgJiYKLSAgICAgICAg
ICAgIGV4dGVuc2lvbi0+aXNfb3B0aW9uYWwoKSAmJgotICAgICAgICAgICAgZXh0ZW5zaW9uLT5t
ZXNzYWdlX3R5cGUoKSA9PSB0eXBlKSB7Ci0gICAgICAgICAgLy8gRm91bmQgaXQuCi0gICAgICAg
ICAgcmV0dXJuIGV4dGVuc2lvbjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IHJldHVybiBOVUxMOwotfQotCi1jb25zdCBGaWVsZERlc2NyaXB0b3IqIEdlbmVyYXRlZE1lc3Nh
Z2VSZWZsZWN0aW9uOjpGaW5kS25vd25FeHRlbnNpb25CeU51bWJlcigKLSAgICBpbnQgbnVtYmVy
KSBjb25zdCB7Ci0gIGlmIChleHRlbnNpb25zX29mZnNldF8gPT0gLTEpIHJldHVybiBOVUxMOwot
ICByZXR1cm4gZGVzY3JpcHRvcl9wb29sXy0+RmluZEV4dGVuc2lvbkJ5TnVtYmVyKGRlc2NyaXB0
b3JfLCBudW1iZXIpOwotfQotCi1ib29sIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpTdXBw
b3J0c1Vua25vd25FbnVtVmFsdWVzKCkgY29uc3QgewotICByZXR1cm4gQ3JlYXRlVW5rbm93bkVu
dW1WYWx1ZXMoZGVzY3JpcHRvcl8tPmZpbGUoKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFNv
bWUgcHJpdmF0ZSBoZWxwZXJzLgotCi0vLyBUaGVzZSBzaW1wbGUgdGVtcGxhdGUgYWNjZXNzb3Jz
IG9idGFpbiBwb2ludGVycyAob3IgcmVmZXJlbmNlcykgdG8KLS8vIHRoZSBnaXZlbiBmaWVsZC4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5saW5lIGNvbnN0IFR5cGUmIEdlbmVyYXRlZE1l
c3NhZ2VSZWZsZWN0aW9uOjpHZXRSYXcoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgewotICBpZiAoZmllbGQtPmNvbnRhaW5p
bmdfb25lb2YoKSAmJiAhSGFzT25lb2ZGaWVsZChtZXNzYWdlLCBmaWVsZCkpIHsKLSAgICByZXR1
cm4gRGVmYXVsdFJhdzxUeXBlPihmaWVsZCk7Ci0gIH0KLSAgaW50IGluZGV4ID0gZmllbGQtPmNv
bnRhaW5pbmdfb25lb2YoKSA/Ci0gICAgICBkZXNjcmlwdG9yXy0+ZmllbGRfY291bnQoKSArIGZp
ZWxkLT5jb250YWluaW5nX29uZW9mKCktPmluZGV4KCkgOgotICAgICAgZmllbGQtPmluZGV4KCk7
Ci0gIGNvbnN0IHZvaWQqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgqPigmbWVz
c2FnZSkgKwotICAgICAgb2Zmc2V0c19baW5kZXhdOwotICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVHlwZSo+KHB0cik7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5s
aW5lIFR5cGUqIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpNdXRhYmxlUmF3KAotICAgIE1l
c3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsKLSAg
aW50IGluZGV4ID0gZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSA/Ci0gICAgICBkZXNjcmlwdG9y
Xy0+ZmllbGRfY291bnQoKSArIGZpZWxkLT5jb250YWluaW5nX29uZW9mKCktPmluZGV4KCkgOgot
ICAgICAgZmllbGQtPmluZGV4KCk7Ci0gIHZvaWQqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDgqPihtZXNzYWdlKSArIG9mZnNldHNfW2luZGV4XTsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VHlwZSo+KHB0cik7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5saW5lIGNv
bnN0IFR5cGUmIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpEZWZhdWx0UmF3KAotICAgIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsKLSAgY29uc3Qgdm9pZCogcHRyID0g
ZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSA/Ci0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4Kj4oZGVmYXVsdF9vbmVvZl9pbnN0YW5jZV8pICsKLSAgICAgIG9mZnNldHNfW2ZpZWxk
LT5pbmRleCgpXSA6Ci0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4oZGVmYXVs
dF9pbnN0YW5jZV8pICsKLSAgICAgIG9mZnNldHNfW2ZpZWxkLT5pbmRleCgpXTsKLSAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IFR5cGUqPihwdHIpOwotfQotCi1pbmxpbmUgY29uc3Qg
dWludDMyKiBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6R2V0SGFzQml0cygKLSAgICBjb25z
dCBNZXNzYWdlJiBtZXNzYWdlKSBjb25zdCB7Ci0gIGlmIChoYXNfYml0c19vZmZzZXRfID09IC0x
KSB7ICAvLyBwcm90bzMgd2l0aCBubyBoYXMtYml0cy4KLSAgICByZXR1cm4gTlVMTDsKLSAgfQot
ICBjb25zdCB2b2lkKiBwdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4oJm1lc3Nh
Z2UpICsgaGFzX2JpdHNfb2Zmc2V0XzsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyKj4ocHRyKTsKLX0KLWlubGluZSB1aW50MzIqIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0
aW9uOjpNdXRhYmxlSGFzQml0cygKLSAgICBNZXNzYWdlKiBtZXNzYWdlKSBjb25zdCB7Ci0gIGlm
IChoYXNfYml0c19vZmZzZXRfID09IC0xKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgdm9p
ZCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KG1lc3NhZ2UpICsgaGFzX2JpdHNfb2Zm
c2V0XzsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyKj4ocHRyKTsKLX0KLQotaW5s
aW5lIHVpbnQzMiBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6R2V0T25lb2ZDYXNlKAotICAg
IGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVv
Zl9kZXNjcmlwdG9yKSBjb25zdCB7Ci0gIGNvbnN0IHZvaWQqIHB0ciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDgqPigmbWVzc2FnZSkKLSAgICAgICsgb25lb2ZfY2FzZV9vZmZzZXRfOwot
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzIqPihwdHIpW29uZW9mX2Rlc2Ny
aXB0b3ItPmluZGV4KCldOwotfQotCi1pbmxpbmUgdWludDMyKiBHZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbjo6TXV0YWJsZU9uZW9mQ2FzZSgKLSAgICBNZXNzYWdlKiBtZXNzYWdlLAotICAgIGNv
bnN0IE9uZW9mRGVzY3JpcHRvciogb25lb2ZfZGVzY3JpcHRvcikgY29uc3QgewotICB2b2lkKiBw
dHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4obWVzc2FnZSkgKyBvbmVvZl9jYXNlX29mZnNl
dF87Ci0gIHJldHVybiAmKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyKj4ocHRyKVtvbmVvZl9kZXNj
cmlwdG9yLT5pbmRleCgpXSk7Ci19Ci0KLWlubGluZSBjb25zdCBFeHRlbnNpb25TZXQmIEdlbmVy
YXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpHZXRFeHRlbnNpb25TZXQoCi0gICAgY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZSkgY29uc3QgewotICBHT09HTEVfRENIRUNLX05FKGV4dGVuc2lvbnNfb2Zmc2V0
XywgLTEpOwotICBjb25zdCB2b2lkKiBwdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
Kj4oJm1lc3NhZ2UpICsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uc19vZmZzZXRfOwot
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXh0ZW5zaW9uU2V0Kj4ocHRyKTsKLX0K
LWlubGluZSBFeHRlbnNpb25TZXQqIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpNdXRhYmxl
RXh0ZW5zaW9uU2V0KAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UpIGNvbnN0IHsKLSAgR09PR0xFX0RD
SEVDS19ORShleHRlbnNpb25zX29mZnNldF8sIC0xKTsKLSAgdm9pZCogcHRyID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OCo+KG1lc3NhZ2UpICsgZXh0ZW5zaW9uc19vZmZzZXRfOwotICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxFeHRlbnNpb25TZXQqPihwdHIpOwotfQotCi1pbmxpbmUgQXJlbmEq
IEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpHZXRBcmVuYShNZXNzYWdlKiBtZXNzYWdlKSBj
b25zdCB7Ci0gIGlmIChhcmVuYV9vZmZzZXRfID09IGtOb0FyZW5hUG9pbnRlcikgewotICAgIHJl
dHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKHVua25vd25fZmllbGRzX29mZnNldF8gPT0ga1Vua25v
d25GaWVsZFNldEluTWV0YWRhdGEpIHsKLSAgICAvLyB6ZXJvLW92ZXJoZWFkIGFyZW5hIHBvaW50
ZXIgb3ZlcmxvYWRpbmcgVW5rbm93bkZpZWxkcwotICAgIHJldHVybiBHZXRJbnRlcm5hbE1ldGFk
YXRhV2l0aEFyZW5hKCptZXNzYWdlKS5hcmVuYSgpOwotICB9Ci0KLSAgLy8gQmFzZWxpbmUgY2Fz
ZTogbWVzc2FnZSBjbGFzcyBoYXMgYSBkZWRpY2F0ZWQgYXJlbmEgcG9pbnRlci4KLSAgdm9pZCog
cHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KG1lc3NhZ2UpICsgYXJlbmFfb2Zmc2V0XzsK
LSAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEFyZW5hKio+KHB0cik7Ci19Ci0KLWlubGluZSBj
b25zdCBJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hJgotR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b246OkdldEludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVz
c2FnZSkgY29uc3QgewotICBjb25zdCB2b2lkKiBwdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4Kj4oJm1lc3NhZ2UpICsgYXJlbmFfb2Zmc2V0XzsKLSAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IEludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEqPihwdHIpOwotfQotCi1pbmxp
bmUgSW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSoKLUdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9u
OjpNdXRhYmxlSW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSgKLSAgICBNZXNzYWdlKiBtZXNzYWdl
KSBjb25zdCB7Ci0gIHZvaWQqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihtZXNzYWdl
KSArIGFyZW5hX29mZnNldF87Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PEludGVybmFsTWV0
YWRhdGFXaXRoQXJlbmEqPihwdHIpOwotfQotCi1pbmxpbmUgYm9vbAotR2VuZXJhdGVkTWVzc2Fn
ZVJlZmxlY3Rpb246OkdldElzRGVmYXVsdEluc3RhbmNlKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UpIGNvbnN0IHsKLSAgaWYgKGlzX2RlZmF1bHRfaW5zdGFuY2Vfb2Zmc2V0XyA9PSBrSGFz
Tm9EZWZhdWx0SW5zdGFuY2VGaWVsZCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBjb25z
dCB2b2lkKiBwdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4oJm1lc3NhZ2UpICsK
LSAgICAgIGlzX2RlZmF1bHRfaW5zdGFuY2Vfb2Zmc2V0XzsKLSAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IGJvb2wqPihwdHIpOwotfQotCi0vLyBTaW1wbGUgYWNjZXNzb3JzIGZvciBt
YW5pcHVsYXRpbmcgaGFzX2JpdHNfLgotaW5saW5lIGJvb2wgR2VuZXJhdGVkTWVzc2FnZVJlZmxl
Y3Rpb246Okhhc0JpdCgKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0gIGlmIChoYXNfYml0c19vZmZzZXRfID09IC0xKSB7
Ci0gICAgLy8gcHJvdG8zOiBubyBoYXMtYml0cy4gQWxsIGZpZWxkcyBwcmVzZW50IGV4Y2VwdCBt
ZXNzYWdlcywgd2hpY2ggYXJlCi0gICAgLy8gcHJlc2VudCBvbmx5IGlmIHRoZWlyIG1lc3NhZ2Ut
ZmllbGQgcG9pbnRlciBpcyBub24tTlVMTC4KLSAgICBpZiAoZmllbGQtPmNwcF90eXBlKCkgPT0g
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICAgIHJldHVybiAhR2V0SXNE
ZWZhdWx0SW5zdGFuY2UobWVzc2FnZSkgJiYKLSAgICAgICAgICBHZXRSYXc8Y29uc3QgTWVzc2Fn
ZSo+KG1lc3NhZ2UsIGZpZWxkKSAhPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBOb24t
bWVzc2FnZSBmaWVsZCAoYW5kIG5vbi1vbmVvZiwgc2luY2UgdGhhdCB3YXMgaGFuZGxlZCBpbiBI
YXNGaWVsZCgpCi0gICAgICAvLyBiZWZvcmUgY2FsbGluZyB1cyksIGFuZCBzaW5ndWxhciAoYWdh
aW4sIGNoZWNrZWQgaW4gSGFzRmllbGQpLiBTbywgdGhpcwotICAgICAgLy8gZmllbGQgbXVzdCBi
ZSBhIHNjYWxhci4KLQotICAgICAgLy8gU2NhbGFyIHByaW1pdGl2ZSAobnVtZXJpYyBvciBzdHJp
bmcvYnl0ZXMpIGZpZWxkcyBhcmUgcHJlc2VudCBpZgotICAgICAgLy8gdGhlaXIgdmFsdWUgaXMg
bm9uLXplcm8gKG51bWVyaWMpIG9yIG5vbi1lbXB0eSAoc3RyaW5nL2J5dGVzKS4gIE4uQi46Ci0g
ICAgICAvLyB3ZSBtdXN0IHVzZSB0aGlzIGRlZmluaXRpb24gaGVyZSwgcmF0aGVyIHRoYW4gdGhl
ICJzY2FsYXIgZmllbGRzCi0gICAgICAvLyBhbHdheXMgcHJlc2VudCIgaW4gdGhlIHByb3RvMyBk
b2NzLCBiZWNhdXNlIE1lcmdlRnJvbSgpIHNlbWFudGljcwotICAgICAgLy8gcmVxdWlyZSBwcmVz
ZW5jZSBhcyAicHJlc2VudCBvbiB3aXJlIiwgYW5kIHJlZmxlY3Rpb24tYmFzZWQgbWVyZ2UKLSAg
ICAgIC8vICh3aGljaCB1c2VzIEhhc0ZpZWxkKCkpIG5lZWRzIHRvIGJlIGNvbnNpc3RlbnQgd2l0
aCB0aGlzLgotICAgICAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotICAgICAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6Ci0gICAgICAgICAgc3dpdGNoIChmaWVs
ZC0+b3B0aW9ucygpLmN0eXBlKCkpIHsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAg
ICAgICAgY29uc3Qgc3RyaW5nKiBkZWZhdWx0X3B0ciA9Ci0gICAgICAgICAgICAgICAgICAmRGVm
YXVsdFJhdzxBcmVuYVN0cmluZ1B0cj4oZmllbGQpLkdldChOVUxMKTsKLSAgICAgICAgICAgICAg
cmV0dXJuIEdldEZpZWxkPEFyZW5hU3RyaW5nUHRyPihtZXNzYWdlLCBmaWVsZCkuR2V0KAotICAg
ICAgICAgICAgICAgICAgZGVmYXVsdF9wdHIpLnNpemUoKSA+IDA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICAgICAgICByZXR1cm4gR2V0UmF3PGJvb2w+KG1l
c3NhZ2UsIGZpZWxkKSAhPSBmYWxzZTsKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfSU5UMzI6Ci0gICAgICAgICAgcmV0dXJuIEdldFJhdzxpbnQzMj4obWVzc2FnZSwgZmll
bGQpICE9IDA7Ci0gICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0Ogot
ICAgICAgICAgIHJldHVybiBHZXRSYXc8aW50NjQ+KG1lc3NhZ2UsIGZpZWxkKSAhPSAwOwotICAg
ICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UMzI6Ci0gICAgICAgICAgcmV0
dXJuIEdldFJhdzx1aW50MzI+KG1lc3NhZ2UsIGZpZWxkKSAhPSAwOwotICAgICAgICBjYXNlIEZp
ZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UNjQ6Ci0gICAgICAgICAgcmV0dXJuIEdldFJhdzx1
aW50NjQ+KG1lc3NhZ2UsIGZpZWxkKSAhPSAwOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9GTE9BVDoKLSAgICAgICAgICByZXR1cm4gR2V0UmF3PGZsb2F0PihtZXNzYWdl
LCBmaWVsZCkgIT0gMC4wOwotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9E
T1VCTEU6Ci0gICAgICAgICAgcmV0dXJuIEdldFJhdzxkb3VibGU+KG1lc3NhZ2UsIGZpZWxkKSAh
PSAwLjA7Ci0gICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAg
ICAgICAgcmV0dXJuIEdldFJhdzxpbnQ+KG1lc3NhZ2UsIGZpZWxkKSAhPSAwOwotICAgICAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgICAgIC8vIGhhbmRs
ZWQgYWJvdmU7IGF2b2lkIHdhcm5pbmcKLSAgICAgICAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAi
UmVhY2hlZCBpbXBvc3NpYmxlIGNhc2UgaW4gSGFzQml0KCkuIjsKLSAgICAgICAgICBicmVhazsK
LSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIEdldEhhc0JpdHMobWVzc2FnZSlbZmllbGQt
PmluZGV4KCkgLyAzMl0gJgotICAgICgxIDw8IChmaWVsZC0+aW5kZXgoKSAlIDMyKSk7Ci19Ci0K
LWlubGluZSB2b2lkIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpTZXRCaXQoCi0gICAgTWVz
c2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgewotICBp
ZiAoaGFzX2JpdHNfb2Zmc2V0XyA9PSAtMSkgewotICAgIHJldHVybjsKLSAgfQotICBNdXRhYmxl
SGFzQml0cyhtZXNzYWdlKVtmaWVsZC0+aW5kZXgoKSAvIDMyXSB8PSAoMSA8PCAoZmllbGQtPmlu
ZGV4KCkgJSAzMikpOwotfQotCi1pbmxpbmUgdm9pZCBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlv
bjo6Q2xlYXJCaXQoCi0gICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCkgY29uc3QgewotICBpZiAoaGFzX2JpdHNfb2Zmc2V0XyA9PSAtMSkgewotICAgIHJl
dHVybjsKLSAgfQotICBNdXRhYmxlSGFzQml0cyhtZXNzYWdlKVtmaWVsZC0+aW5kZXgoKSAvIDMy
XSAmPSB+KDEgPDwgKGZpZWxkLT5pbmRleCgpICUgMzIpKTsKLX0KLQotaW5saW5lIHZvaWQgR2Vu
ZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OlN3YXBCaXQoCi0gICAgTWVzc2FnZSogbWVzc2FnZTEs
IE1lc3NhZ2UqIG1lc3NhZ2UyLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7
Ci0gIGlmIChoYXNfYml0c19vZmZzZXRfID09IC0xKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGJv
b2wgdGVtcF9oYXNfYml0ID0gSGFzQml0KCptZXNzYWdlMSwgZmllbGQpOwotICBpZiAoSGFzQml0
KCptZXNzYWdlMiwgZmllbGQpKSB7Ci0gICAgU2V0Qml0KG1lc3NhZ2UxLCBmaWVsZCk7Ci0gIH0g
ZWxzZSB7Ci0gICAgQ2xlYXJCaXQobWVzc2FnZTEsIGZpZWxkKTsKLSAgfQotICBpZiAodGVtcF9o
YXNfYml0KSB7Ci0gICAgU2V0Qml0KG1lc3NhZ2UyLCBmaWVsZCk7Ci0gIH0gZWxzZSB7Ci0gICAg
Q2xlYXJCaXQobWVzc2FnZTIsIGZpZWxkKTsKLSAgfQotfQotCi1pbmxpbmUgYm9vbCBHZW5lcmF0
ZWRNZXNzYWdlUmVmbGVjdGlvbjo6SGFzT25lb2YoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2Fn
ZSwgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZl9kZXNjcmlwdG9yKSBjb25zdCB7Ci0gIHJl
dHVybiAoR2V0T25lb2ZDYXNlKG1lc3NhZ2UsIG9uZW9mX2Rlc2NyaXB0b3IpID4gMCk7Ci19Ci0K
LWlubGluZSBib29sIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpIYXNPbmVvZkZpZWxkKAot
ICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQp
IGNvbnN0IHsKLSAgcmV0dXJuIChHZXRPbmVvZkNhc2UobWVzc2FnZSwgZmllbGQtPmNvbnRhaW5p
bmdfb25lb2YoKSkgPT0gZmllbGQtPm51bWJlcigpKTsKLX0KLQotaW5saW5lIHZvaWQgR2VuZXJh
dGVkTWVzc2FnZVJlZmxlY3Rpb246OlNldE9uZW9mQ2FzZSgKLSAgICBNZXNzYWdlKiBtZXNzYWdl
LCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0gICpNdXRhYmxlT25lb2ZD
YXNlKG1lc3NhZ2UsIGZpZWxkLT5jb250YWluaW5nX29uZW9mKCkpID0gZmllbGQtPm51bWJlcigp
OwotfQotCi1pbmxpbmUgdm9pZCBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6Q2xlYXJPbmVv
ZkZpZWxkKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmll
bGQpIGNvbnN0IHsKLSAgaWYgKEhhc09uZW9mRmllbGQoKm1lc3NhZ2UsIGZpZWxkKSkgewotICAg
IENsZWFyT25lb2YobWVzc2FnZSwgZmllbGQtPmNvbnRhaW5pbmdfb25lb2YoKSk7Ci0gIH0KLX0K
LQotaW5saW5lIHZvaWQgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OkNsZWFyT25lb2YoCi0g
ICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZl9kZXNjcmlw
dG9yKSBjb25zdCB7Ci0gIC8vIFRPRE8oamllbHVvKTogQ29uc2lkZXIgdG8gY2FjaGUgdGhlIHVu
dXNlZCBvYmplY3QgaW5zdGVhZCBvZiBkZWxldGluZwotICAvLyBpdC4gSXQgd2lsbCBiZSBtdWNo
IGZhc3RlciBpZiBhbiBhcGxpY2F0aW9uIHN3aXRjaGVzIGEgbG90IGZyb20KLSAgLy8gYSBmZXcg
b25lb2YgZmllbGRzLiAgVGltZS9zcGFjZSB0cmFkZW9mZgotICB1aW50MzIgb25lb2ZfY2FzZSA9
IEdldE9uZW9mQ2FzZSgqbWVzc2FnZSwgb25lb2ZfZGVzY3JpcHRvcik7Ci0gIGlmIChvbmVvZl9j
YXNlID4gMCkgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9y
Xy0+RmluZEZpZWxkQnlOdW1iZXIob25lb2ZfY2FzZSk7Ci0gICAgaWYgKEdldEFyZW5hKG1lc3Nh
Z2UpID09IE5VTEwpIHsKLSAgICAgIHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSAgICAg
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOiB7Ci0gICAgICAgICAgc3dp
dGNoIChmaWVsZC0+b3B0aW9ucygpLmN0eXBlKCkpIHsKLSAgICAgICAgICAgIGRlZmF1bHQ6ICAv
LyBUT0RPKGtlbnRvbik6ICBTdXBwb3J0IG90aGVyIHN0cmluZyByZXBzLgotICAgICAgICAgICAg
Y2FzZSBGaWVsZE9wdGlvbnM6OlNUUklORzogewotICAgICAgICAgICAgICBjb25zdCBzdHJpbmcq
IGRlZmF1bHRfcHRyID0KLSAgICAgICAgICAgICAgICAgICZEZWZhdWx0UmF3PEFyZW5hU3RyaW5n
UHRyPihmaWVsZCkuR2V0KE5VTEwpOwotICAgICAgICAgICAgICBNdXRhYmxlRmllbGQ8QXJlbmFT
dHJpbmdQdHI+KG1lc3NhZ2UsIGZpZWxkKS0+Ci0gICAgICAgICAgICAgICAgICBEZXN0cm95KGRl
ZmF1bHRfcHRyLCBHZXRBcmVuYShtZXNzYWdlKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgICAg
ZGVsZXRlICpNdXRhYmxlUmF3PE1lc3NhZ2UqPihtZXNzYWdlLCBmaWVsZCk7Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgKk11dGFibGVPbmVvZkNhc2UobWVzc2FnZSwgb25lb2ZfZGVzY3JpcHRvcikgPSAw
OwotICB9Ci19Ci0KLS8vIFRlbXBsYXRlIGltcGxlbWVudGF0aW9ucyBvZiBiYXNpYyBhY2Nlc3Nv
cnMuICBJbmxpbmUgYmVjYXVzZSBlYWNoCi0vLyB0ZW1wbGF0ZSBpbnN0YW5jZSBpcyBvbmx5IGNh
bGxlZCBmcm9tIG9uZSBsb2NhdGlvbi4gIFRoZXNlIGFyZQotLy8gdXNlZCBmb3IgYWxsIHR5cGVz
IGV4Y2VwdCBtZXNzYWdlcy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5saW5lIGNvbnN0
IFR5cGUmIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpHZXRGaWVsZCgKLSAgICBjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0g
IHJldHVybiBHZXRSYXc8VHlwZT4obWVzc2FnZSwgZmllbGQpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVHlwZT4KLWlubGluZSB2b2lkIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpTZXRG
aWVsZCgKLSAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LCBjb25zdCBUeXBlJiB2YWx1ZSkgY29uc3QgewotICBpZiAoZmllbGQtPmNvbnRhaW5pbmdfb25l
b2YoKSAmJiAhSGFzT25lb2ZGaWVsZCgqbWVzc2FnZSwgZmllbGQpKSB7Ci0gICAgQ2xlYXJPbmVv
ZihtZXNzYWdlLCBmaWVsZC0+Y29udGFpbmluZ19vbmVvZigpKTsKLSAgfQotICAqTXV0YWJsZVJh
dzxUeXBlPihtZXNzYWdlLCBmaWVsZCkgPSB2YWx1ZTsKLSAgZmllbGQtPmNvbnRhaW5pbmdfb25l
b2YoKSA/Ci0gICAgICBTZXRPbmVvZkNhc2UobWVzc2FnZSwgZmllbGQpIDogU2V0Qml0KG1lc3Nh
Z2UsIGZpZWxkKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci1pbmxpbmUgVHlwZSog
R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Ok11dGFibGVGaWVsZCgKLSAgICBNZXNzYWdlKiBt
ZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0gIGZpZWxkLT5j
b250YWluaW5nX29uZW9mKCkgPwotICAgICAgU2V0T25lb2ZDYXNlKG1lc3NhZ2UsIGZpZWxkKSA6
IFNldEJpdChtZXNzYWdlLCBmaWVsZCk7Ci0gIHJldHVybiBNdXRhYmxlUmF3PFR5cGU+KG1lc3Nh
Z2UsIGZpZWxkKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci1pbmxpbmUgY29uc3Qg
VHlwZSYgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246OkdldFJlcGVhdGVkRmllbGQoCi0gICAg
Y29uc3QgTWVzc2FnZSYgbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50
IGluZGV4KSBjb25zdCB7Ci0gIHJldHVybiBHZXRSYXc8UmVwZWF0ZWRGaWVsZDxUeXBlPiA+KG1l
c3NhZ2UsIGZpZWxkKS5HZXQoaW5kZXgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4K
LWlubGluZSBjb25zdCBUeXBlJiBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6R2V0UmVwZWF0
ZWRQdHJGaWVsZCgKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkLCBpbnQgaW5kZXgpIGNvbnN0IHsKLSAgcmV0dXJuIEdldFJhdzxSZXBlYXRl
ZFB0ckZpZWxkPFR5cGU+ID4obWVzc2FnZSwgZmllbGQpLkdldChpbmRleCk7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUeXBlPgotaW5saW5lIHZvaWQgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b246OlNldFJlcGVhdGVkRmllbGQoCi0gICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBpbnQgaW5kZXgsIFR5cGUgdmFsdWUpIGNvbnN0IHsKLSAg
TXV0YWJsZVJhdzxSZXBlYXRlZEZpZWxkPFR5cGU+ID4obWVzc2FnZSwgZmllbGQpLT5TZXQoaW5k
ZXgsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci1pbmxpbmUgVHlwZSog
R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb246Ok11dGFibGVSZXBlYXRlZEZpZWxkKAotICAgIE1l
c3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGludCBpbmRleCkg
Y29uc3QgewotICBSZXBlYXRlZFB0ckZpZWxkPFR5cGU+KiByZXBlYXRlZCA9Ci0gICAgTXV0YWJs
ZVJhdzxSZXBlYXRlZFB0ckZpZWxkPFR5cGU+ID4obWVzc2FnZSwgZmllbGQpOwotICByZXR1cm4g
cmVwZWF0ZWQtPk11dGFibGUoaW5kZXgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4K
LWlubGluZSB2b2lkIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpBZGRGaWVsZCgKLSAgICBN
ZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBjb25zdCBUeXBl
JiB2YWx1ZSkgY29uc3QgewotICBNdXRhYmxlUmF3PFJlcGVhdGVkRmllbGQ8VHlwZT4gPihtZXNz
YWdlLCBmaWVsZCktPkFkZCh2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgot
aW5saW5lIFR5cGUqIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpBZGRGaWVsZCgKLSAgICBN
ZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0g
IFJlcGVhdGVkUHRyRmllbGQ8VHlwZT4qIHJlcGVhdGVkID0KLSAgICBNdXRhYmxlUmF3PFJlcGVh
dGVkUHRyRmllbGQ8VHlwZT4gPihtZXNzYWdlLCBmaWVsZCk7Ci0gIHJldHVybiByZXBlYXRlZC0+
QWRkKCk7Ci19Ci0KLU1lc3NhZ2VGYWN0b3J5KiBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6
R2V0TWVzc2FnZUZhY3RvcnkoKSBjb25zdCB7Ci0gIHJldHVybiBtZXNzYWdlX2ZhY3RvcnlfOwot
fQotCi12b2lkKiBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6UmVwZWF0ZWRGaWVsZERhdGEo
Ci0gICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAg
ICBGaWVsZERlc2NyaXB0b3I6OkNwcFR5cGUgY3BwX3R5cGUsCi0gICAgY29uc3QgRGVzY3JpcHRv
ciogbWVzc2FnZV90eXBlKSBjb25zdCB7Ci0gIEdPT0dMRV9DSEVDSyhmaWVsZC0+aXNfcmVwZWF0
ZWQoKSk7Ci0gIEdPT0dMRV9DSEVDSyhmaWVsZC0+Y3BwX3R5cGUoKSA9PSBjcHBfdHlwZSB8fAot
ICAgICAgICAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VO
VU0gJiYKLSAgICAgICAgIGNwcF90eXBlID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQz
MikpCi0gICAgICA8PCAiVGhlIHR5cGUgcGFyYW1ldGVyIFQgaW4gUmVwZWF0ZWRGaWVsZFJlZjxU
PiBBUEkgZG9lc24ndCBtYXRjaCAiCi0gICAgICA8PCAidGhlIGFjdHVhbCBmaWVsZCB0eXBlIChm
b3IgZW51bXMgVCBzaG91bGQgYmUgdGhlIGdlbmVyYXRlZCBlbnVtICIKLSAgICAgIDw8ICJ0eXBl
IG9yIGludDMyKS4iOwotICBpZiAobWVzc2FnZV90eXBlICE9IE5VTEwpIHsKLSAgICBHT09HTEVf
Q0hFQ0tfRVEobWVzc2FnZV90eXBlLCBmaWVsZC0+bWVzc2FnZV90eXBlKCkpOwotICB9Ci0gIGlm
IChmaWVsZC0+aXNfZXh0ZW5zaW9uKCkpIHsKLSAgICByZXR1cm4gTXV0YWJsZUV4dGVuc2lvblNl
dChtZXNzYWdlKS0+TXV0YWJsZVJhd1JlcGVhdGVkRmllbGQoCi0gICAgICAgIGZpZWxkLT5udW1i
ZXIoKSwgZmllbGQtPnR5cGUoKSwgZmllbGQtPmlzX3BhY2tlZCgpLCBmaWVsZCk7Ci0gIH0gZWxz
ZSB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihtZXNzYWdlKSArIG9mZnNl
dHNfW2ZpZWxkLT5pbmRleCgpXTsKLSAgfQotfQotCi1NYXBGaWVsZEJhc2UqIEdlbmVyYXRlZE1l
c3NhZ2VSZWZsZWN0aW9uOjpNYXBEYXRhKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsKLSAgVVNBR0VfQ0hFQ0soSXNNYXBGaWVsZElu
QXBpKGZpZWxkKSwKLSAgICAgICAgICAgICAgIkdldE1hcERhdGEiLAotICAgICAgICAgICAgICAi
RmllbGQgaXMgbm90IGEgbWFwIGZpZWxkLiIpOwotICByZXR1cm4gTXV0YWJsZVJhdzxNYXBGaWVs
ZEJhc2U+KG1lc3NhZ2UsIGZpZWxkKTsKLX0KLQotR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24q
Ci1HZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b24oCi0gICAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICBjb25zdCBNZXNzYWdl
KiBkZWZhdWx0X2luc3RhbmNlLAotICAgIGNvbnN0IGludCBvZmZzZXRzW10sCi0gICAgaW50IGhh
c19iaXRzX29mZnNldCwKLSAgICBpbnQgdW5rbm93bl9maWVsZHNfb2Zmc2V0LAotICAgIGludCBl
eHRlbnNpb25zX29mZnNldCwKLSAgICBjb25zdCB2b2lkKiBkZWZhdWx0X29uZW9mX2luc3RhbmNl
LAotICAgIGludCBvbmVvZl9jYXNlX29mZnNldCwKLSAgICBpbnQgb2JqZWN0X3NpemUsCi0gICAg
aW50IGFyZW5hX29mZnNldCwKLSAgICBpbnQgaXNfZGVmYXVsdF9pbnN0YW5jZV9vZmZzZXQpIHsK
LSAgcmV0dXJuIG5ldyBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbihkZXNjcmlwdG9yLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfaW5zdGFuY2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfYml0c19vZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bl9maWVsZHNfb2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNfb2Zmc2V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfb25lb2Zf
aW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lb2Zf
Y2FzZV9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVz
Y3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWVzc2FnZUZhY3Rvcnk6OmdlbmVyYXRlZF9mYWN0b3J5KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3NpemUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlbmFfb2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2RlZmF1bHRfaW5zdGFuY2Vfb2Zmc2V0
KTsKLX0KLQotR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24qCi1HZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgY29uc3QgRGVzY3Jp
cHRvciogZGVzY3JpcHRvciwKLSAgICBjb25zdCBNZXNzYWdlKiBkZWZhdWx0X2luc3RhbmNlLAot
ICAgIGNvbnN0IGludCBvZmZzZXRzW10sCi0gICAgaW50IGhhc19iaXRzX29mZnNldCwKLSAgICBp
bnQgdW5rbm93bl9maWVsZHNfb2Zmc2V0LAotICAgIGludCBleHRlbnNpb25zX29mZnNldCwKLSAg
ICBpbnQgb2JqZWN0X3NpemUsCi0gICAgaW50IGFyZW5hX29mZnNldCwKLSAgICBpbnQgaXNfZGVm
YXVsdF9pbnN0YW5jZV9vZmZzZXQpIHsKLSAgcmV0dXJuIG5ldyBHZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbihkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHRfaW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
YXNfYml0c19vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5rbm93bl9maWVsZHNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4dGVuc2lvbnNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERlc2NyaXB0b3JQb29sOjpnZW5lcmF0ZWRfcG9vbCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFj
dG9yeSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9z
aXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZW5hX29mZnNl
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19kZWZhdWx0X2lu
c3RhbmNlX29mZnNldCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTVmYzgwMmNlMThlYWZhYWQzNjJhN2E1YWFmMzgzN2YzZDgwOTA2NC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjgzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBB
dXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3Jp
Z2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEpl
ZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBUaGlzIGhlYWRlciBpcyBsb2dpY2FsbHkgaW50
ZXJuYWwsIGJ1dCBpcyBtYWRlIHB1YmxpYyBiZWNhdXNlIGl0IGlzIHVzZWQKLS8vIGZyb20gcHJv
dG9jb2wtY29tcGlsZXItZ2VuZXJhdGVkIGNvZGUsIHdoaWNoIG1heSByZXNpZGUgaW4gb3RoZXIg
Y29tcG9uZW50cy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
UkVGTEVDVElPTl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdF
X1JFRkxFQ1RJT05fSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jYXN0cy5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLS8vIFRPRE8oamFzb25oKTogUmVtb3ZlIHRoaXMg
b25jZSB0aGUgY29tcGlsZXIgY2hhbmdlIHRvIGRpcmVjdGx5IGluY2x1ZGUgdGhpcwotLy8gaXMg
cmVsZWFzZWQgdG8gY29tcG9uZW50cy4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZ2VuZXJh
dGVkX2VudW1fcmVmbGVjdGlvbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdl
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21ldGFkYXRhLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0Lmg+Ci0KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgdXBiIHsKLW5hbWVzcGFjZSBnb29nbGVfb3BlbnNvdXJjZSB7Ci1jbGFzcyBH
TVJfSGFuZGxlcnM7Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlX29wZW5zb3VyY2UKLX0gIC8vIG5h
bWVzcGFjZSB1cGIKLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLWNsYXNzIERlc2NyaXB0b3JQb29s
OwotY2xhc3MgTWFwS2V5OwotY2xhc3MgTWFwVmFsdWVSZWY7Ci19Ci0KLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotY2xhc3MgRGVmYXVsdEVtcHR5T25lb2Y7Ci0K
LS8vIERlZmluZWQgaW4gdGhpcyBmaWxlLgotY2xhc3MgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b247Ci0KLS8vIERlZmluZWQgaW4gb3RoZXIgZmlsZXMuCi1jbGFzcyBFeHRlbnNpb25TZXQ7ICAg
ICAgICAgICAgIC8vIGV4dGVuc2lvbl9zZXQuaAotCi0vLyBUSElTIENMQVNTIElTIE5PVCBJTlRF
TkRFRCBGT1IgRElSRUNUIFVTRS4gIEl0IGlzIGludGVuZGVkIGZvciB1c2UKLS8vIGJ5IGdlbmVy
YXRlZCBjb2RlLiAgVGhpcyBjbGFzcyBpcyBqdXN0IGEgYmlnIGhhY2sgdGhhdCByZWR1Y2VzIGNv
ZGUKLS8vIHNpemUuCi0vLwotLy8gQSBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbiBpcyBhbiBp
bXBsZW1lbnRhdGlvbiBvZiBSZWZsZWN0aW9uCi0vLyB3aGljaCBleHBlY3RzIGFsbCBmaWVsZHMg
dG8gYmUgYmFja2VkIGJ5IHNpbXBsZSB2YXJpYWJsZXMgbG9jYXRlZCBpbgotLy8gbWVtb3J5LiAg
VGhlIGxvY2F0aW9ucyBhcmUgZ2l2ZW4gdXNpbmcgYSBiYXNlIHBvaW50ZXIgYW5kIGEgc2V0IG9m
Ci0vLyBvZmZzZXRzLgotLy8KLS8vIEl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIHVzZXIgcmVwcmVz
ZW50cyBmaWVsZHMgb2YgZWFjaCB0eXBlIGluIGEgc3RhbmRhcmQKLS8vIHdheSwgc28gdGhhdCBH
ZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbiBjYW4gY2FzdCB0aGUgdm9pZCogcG9pbnRlciB0bwot
Ly8gdGhlIGFwcHJvcHJpYXRlIHR5cGUuICBGb3IgcHJpbWl0aXZlIGZpZWxkcyBhbmQgc3RyaW5n
IGZpZWxkcywgZWFjaCBmaWVsZAotLy8gc2hvdWxkIGJlIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBv
YnZpb3VzIEMrKyBwcmltaXRpdmUgdHlwZS4gIEVudW1zIGFuZAotLy8gTWVzc2FnZXMgYXJlIGRp
ZmZlcmVudDoKLS8vICAtIFNpbmd1bGFyIE1lc3NhZ2UgZmllbGRzIGFyZSBzdG9yZWQgYXMgYSBw
b2ludGVyIHRvIGEgTWVzc2FnZS4gIFRoZXNlCi0vLyAgICBzaG91bGQgc3RhcnQgb3V0IE5VTEws
IGV4Y2VwdCBmb3IgaW4gdGhlIGRlZmF1bHQgaW5zdGFuY2Ugd2hlcmUgdGhleQotLy8gICAgc2hv
dWxkIHN0YXJ0IG91dCBwb2ludGluZyB0byBvdGhlciBkZWZhdWx0IGluc3RhbmNlcy4KLS8vICAt
IEVudW0gZmllbGRzIGFyZSBzdG9yZWQgYXMgYW4gaW50LiAgVGhpcyBpbnQgbXVzdCBhbHdheXMg
Y29udGFpbgotLy8gICAgYSB2YWxpZCB2YWx1ZSwgc3VjaCB0aGF0IEVudW1EZXNjcmlwdG9yOjpG
aW5kVmFsdWVCeU51bWJlcigpIHdvdWxkCi0vLyAgICBub3QgcmV0dXJuIE5VTEwuCi0vLyAgLSBS
ZXBlYXRlZCBmaWVsZHMgYXJlIHN0b3JlZCBhcyBSZXBlYXRlZEZpZWxkcyBvciBSZXBlYXRlZFB0
ckZpZWxkcwotLy8gICAgb2Ygd2hhdGV2ZXIgdHlwZSB0aGUgaW5kaXZpZHVhbCBmaWVsZCB3b3Vs
ZCBiZS4gIFN0cmluZ3MgYW5kCi0vLyAgICBNZXNzYWdlcyB1c2UgUmVwZWF0ZWRQdHJGaWVsZHMg
d2hpbGUgZXZlcnl0aGluZyBlbHNlIHVzZXMKLS8vICAgIFJlcGVhdGVkRmllbGRzLgotY2xhc3Mg
TElCUFJPVE9CVUZfRVhQT1JUIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uIDogcHVibGljIFJl
ZmxlY3Rpb24gewotIHB1YmxpYzoKLSAgLy8gQ29uc3RydWN0cyBhIEdlbmVyYXRlZE1lc3NhZ2VS
ZWZsZWN0aW9uLgotICAvLyBQYXJhbWV0ZXJzOgotICAvLyAgIGRlc2NyaXB0b3I6ICAgIFRoZSBk
ZXNjcmlwdG9yIGZvciB0aGUgbWVzc2FnZSB0eXBlIGJlaW5nIGltcGxlbWVudGVkLgotICAvLyAg
IGRlZmF1bHRfaW5zdGFuY2U6ICBUaGUgZGVmYXVsdCBpbnN0YW5jZSBvZiB0aGUgbWVzc2FnZS4g
IFRoaXMgaXMgb25seQotICAvLyAgICAgICAgICAgICAgICAgIHVzZWQgdG8gb2J0YWluIHBvaW50
ZXJzIHRvIGRlZmF1bHQgaW5zdGFuY2VzIG9mIGVtYmVkZGVkCi0gIC8vICAgICAgICAgICAgICAg
ICAgbWVzc2FnZXMsIHdoaWNoIEdldE1lc3NhZ2UoKSB3aWxsIHJldHVybiBpZiB0aGUgcGFydGlj
dWxhcgotICAvLyAgICAgICAgICAgICAgICAgIHN1Yi1tZXNzYWdlIGhhcyBub3QgYmVlbiBpbml0
aWFsaXplZCB5ZXQuICAoVGh1cywgYWxsCi0gIC8vICAgICAgICAgICAgICAgICAgZW1iZWRkZWQg
bWVzc2FnZSBmaWVsZHMgKm11c3QqIGhhdmUgbm9uLU5VTEwgcG9pbnRlcnMKLSAgLy8gICAgICAg
ICAgICAgICAgICBpbiB0aGUgZGVmYXVsdCBpbnN0YW5jZS4pCi0gIC8vICAgb2Zmc2V0czogICAg
ICAgQW4gYXJyYXkgb2YgaW50cyBnaXZpbmcgdGhlIGJ5dGUgb2Zmc2V0cywgcmVsYXRpdmUgdG8K
LSAgLy8gICAgICAgICAgICAgICAgICB0aGUgc3RhcnQgb2YgdGhlIG1lc3NhZ2Ugb2JqZWN0LCBv
ZiBlYWNoIGZpZWxkLiAgVGhlc2UgY2FuCi0gIC8vICAgICAgICAgICAgICAgICAgYmUgY29tcHV0
ZWQgYXQgY29tcGlsZSB0aW1lIHVzaW5nIHRoZQotICAvLyAgICAgICAgICAgICAgICAgIEdPT0dM
RV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoKSBtYWNybywgZGVmaW5l
ZAotICAvLyAgICAgICAgICAgICAgICAgIGJlbG93LgotICAvLyAgIGhhc19iaXRzX29mZnNldDog
IE9mZnNldCBpbiB0aGUgbWVzc2FnZSBvZiBhbiBhcnJheSBvZiB1aW50MzJzIG9mIHNpemUKLSAg
Ly8gICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5maWVsZF9jb3VudCgpLzMyLCByb3VuZGVk
IHVwLiAgVGhpcyBpcyBhCi0gIC8vICAgICAgICAgICAgICAgICAgYml0ZmllbGQgd2hlcmUgZWFj
aCBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZQotICAvLyAgICAgICAgICAgICAgICAg
IGNvcnJlc3BvbmRpbmcgZmllbGQgb2YgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWQu
Ci0gIC8vICAgICAgICAgICAgICAgICAgVGhlIGJpdCBmb3IgZmllbGQgaW5kZXggaSBpcyBvYnRh
aW5lZCBieSB0aGUgZXhwcmVzc2lvbjoKLSAgLy8gICAgICAgICAgICAgICAgICAgIGhhc19iaXRz
W2kgLyAzMl0gJiAoMSA8PCAoaSAlIDMyKSkKLSAgLy8gICB1bmtub3duX2ZpZWxkc19vZmZzZXQ6
ICBPZmZzZXQgaW4gdGhlIG1lc3NhZ2Ugb2YgdGhlIFVua25vd25GaWVsZFNldCBmb3IKLSAgLy8g
ICAgICAgICAgICAgICAgICB0aGUgbWVzc2FnZS4KLSAgLy8gICBleHRlbnNpb25zX29mZnNldDog
IE9mZnNldCBpbiB0aGUgbWVzc2FnZSBvZiB0aGUgRXh0ZW5zaW9uU2V0IGZvciB0aGUKLSAgLy8g
ICAgICAgICAgICAgICAgICBtZXNzYWdlLCBvciAtMSBpZiB0aGUgbWVzc2FnZSB0eXBlIGhhcyBu
byBleHRlbnNpb24KLSAgLy8gICAgICAgICAgICAgICAgICByYW5nZXMuCi0gIC8vICAgcG9vbDog
ICAgICAgICAgRGVzY3JpcHRvclBvb2wgdG8gc2VhcmNoIGZvciBleHRlbnNpb24gZGVmaW5pdGlv
bnMuICBPbmx5Ci0gIC8vICAgICAgICAgICAgICAgICAgdXNlZCBieSBGaW5kS25vd25FeHRlbnNp
b25CeU5hbWUoKSBhbmQKLSAgLy8gICAgICAgICAgICAgICAgICBGaW5kS25vd25FeHRlbnNpb25C
eU51bWJlcigpLgotICAvLyAgIGZhY3Rvcnk6ICAgICAgIE1lc3NhZ2VGYWN0b3J5IHRvIHVzZSB0
byBjb25zdHJ1Y3QgZXh0ZW5zaW9uIG1lc3NhZ2VzLgotICAvLyAgIG9iamVjdF9zaXplOiAgIFRo
ZSBzaXplIG9mIGEgbWVzc2FnZSBvYmplY3Qgb2YgdGhpcyB0eXBlLCBhcyBtZWFzdXJlZAotICAv
LyAgICAgICAgICAgICAgICAgIGJ5IHNpemVvZigpLgotICBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVj
dGlvbihjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBNZXNzYWdlKiBkZWZhdWx0X2luc3RhbmNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbnQgb2Zmc2V0c1tdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaGFzX2JpdHNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgdW5rbm93bl9maWVsZHNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZXh0ZW5zaW9uc19vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IERlc2NyaXB0b3JQb29sKiBwb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
ZXNzYWdlRmFjdG9yeSogZmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG9iamVjdF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJlbmFfb2Zm
c2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfZGVmYXVsdF9pbnN0YW5j
ZV9vZmZzZXQgPSAtMSk7Ci0KLSAgLy8gU2ltaWxhciB3aXRoIHRoZSBjb25zdHJ1Y3Rpb24gYWJv
dmUuIENhbGwgdGhpcyBjb25zdHJ1Y3Rpb24gaWYgdGhlCi0gIC8vIG1lc3NhZ2UgaGFzIG9uZW9m
IGRlZmluaXRpb24uCi0gIC8vIFBhcmFtZXRlcnM6Ci0gIC8vICAgb2Zmc2V0czogICAgICAgQW4g
YXJyYXkgb2YgaW50cyBnaXZpbmcgdGhlIGJ5dGUgb2Zmc2V0cy4KLSAgLy8gICAgICAgICAgICAg
ICAgICBGb3IgZWFjaCBvbmVvZiBmaWVsZCwgdGhlIG9mZnNldCBpcyByZWxhdGl2ZSB0byB0aGUK
LSAgLy8gICAgICAgICAgICAgICAgICBkZWZhdWx0X29uZW9mX2luc3RhbmNlLiBUaGVzZSBjYW4g
YmUgY29tcHV0ZWQgYXQgY29tcGlsZQotICAvLyAgICAgICAgICAgICAgICAgIHRpbWUgdXNpbmcg
dGhlCi0gIC8vICAgICAgICAgICAgICAgICAgUFJPVE8yX0dFTkVSQVRFRF9ERUZBVUxUX09ORU9G
X0ZJRUxEX09GRlNFVCgpIG1hY3JvLgotICAvLyAgICAgICAgICAgICAgICAgIEZvciBlYWNoIG5v
bmUgb25lb2YgZmllbGQsIHRoZSBvZmZzZXQgaXMgcmVsYXRlZCB0bwotICAvLyAgICAgICAgICAg
ICAgICAgIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZSBvYmplY3QuICBUaGVzZSBjYW4gYmUgY29t
cHV0ZWQKLSAgLy8gICAgICAgICAgICAgICAgICBhdCBjb21waWxlIHRpbWUgdXNpbmcgdGhlCi0g
IC8vICAgICAgICAgICAgICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJ
RUxEX09GRlNFVCgpIG1hY3JvLgotICAvLyAgICAgICAgICAgICAgICAgIEJlc2lkZXMgb2Zmc2V0
cyBmb3IgYWxsIGZpZWxkcywgdGhpcyBhcnJheSBhbHNvIGNvbnRhaW5zCi0gIC8vICAgICAgICAg
ICAgICAgICAgb2Zmc2V0cyBmb3Igb25lb2YgdW5pb25zLiBUaGUgb2Zmc2V0IG9mIHRoZSBpLXRo
IG9uZW9mCi0gIC8vICAgICAgICAgICAgICAgICAgdW5pb24gaXMgb2Zmc2V0c1tkZXNjcmlwdG9y
LT5maWVsZF9jb3VudCgpICsgaV0uCi0gIC8vICAgZGVmYXVsdF9vbmVvZl9pbnN0YW5jZTogVGhl
IGRlZmF1bHQgaW5zdGFuY2Ugb2YgdGhlIG9uZW9mcy4gSXQgaXMgYQotICAvLyAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBob2xkaW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGFsbCBvbmVvZiBmaWVs
ZHMKLSAgLy8gICAgICAgICAgICAgICAgICBmb3IgdGhpcyBtZXNzYWdlLiBJdCBpcyBvbmx5IHVz
ZWQgdG8gb2J0YWluIHBvaW50ZXJzCi0gIC8vICAgICAgICAgICAgICAgICAgdG8gZGVmYXVsdCBp
bnN0YW5jZXMgb2Ygb25lb2YgZmllbGRzLCB3aGljaCBHZXQKLSAgLy8gICAgICAgICAgICAgICAg
ICBtZXRob2RzIHdpbGwgcmV0dXJuIGlmIHRoZSBmaWVsZCBpcyBub3Qgc2V0LgotICAvLyAgIG9u
ZW9mX2Nhc2Vfb2Zmc2V0OiAgT2Zmc2V0IGluIHRoZSBtZXNzYWdlIG9mIGFuIGFycmF5IG9mIHVp
bnQzMnMgb2YKLSAgLy8gICAgICAgICAgICAgICAgICBzaXplIGRlc2NyaXB0b3ItPm9uZW9mX2Rl
Y2xfY291bnQoKS4gIEVhY2ggdWludDMyCi0gIC8vICAgICAgICAgICAgICAgICAgaW5kaWNhdGVz
IHdoYXQgZmllbGQgaXMgc2V0IGZvciBlYWNoIG9uZW9mLgotICAvLyAgIG90aGVyIHBhcmFtZXRl
cnMgYXJlIHRoZSBzYW1lIHdpdGggdGhlIGNvbnN0cnVjdGlvbiBhYm92ZS4KLSAgR2VuZXJhdGVk
TWVzc2FnZVJlZmxlY3Rpb24oY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZSogZGVmYXVsdF9pbnN0YW5jZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG9mZnNldHNbXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGhhc19iaXRzX29mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHVua25vd25fZmllbGRzX29mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGV4dGVuc2lvbnNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2b2lkKiBkZWZhdWx0X29uZW9mX2luc3RhbmNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgb25lb2ZfY2FzZV9vZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29sLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNZXNzYWdlRmFjdG9yeSogZmFjdG9yeSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG9iamVjdF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgYXJlbmFfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aXNfZGVmYXVsdF9pbnN0YW5jZV9vZmZzZXQgPSAtMSk7Ci0gIH5HZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbigpOwotCi0gIC8vIFNob3J0ZXItdG8tY2FsbCBoZWxwZXJzIGZvciB0aGUgYWJvdmUg
dHdvIGNvbnN0cnVjdGlvbnMgdGhhdCB3b3JrIGlmIHRoZQotICAvLyBwb29sIGFuZCBmYWN0b3J5
IGFyZSB0aGUgdXN1YWwsIG5hbWVseSwgRGVzY3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCkK
LSAgLy8gYW5kIE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFjdG9yeSgpLgotCi0gIHN0YXRp
YyBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbiogTmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b24oCi0gICAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgY29uc3QgTWVz
c2FnZSogZGVmYXVsdF9pbnN0YW5jZSwKLSAgICAgIGNvbnN0IGludCBvZmZzZXRzW10sCi0gICAg
ICBpbnQgaGFzX2JpdHNfb2Zmc2V0LAotICAgICAgaW50IHVua25vd25fZmllbGRzX29mZnNldCwK
LSAgICAgIGludCBleHRlbnNpb25zX29mZnNldCwKLSAgICAgIGNvbnN0IHZvaWQqIGRlZmF1bHRf
b25lb2ZfaW5zdGFuY2UsCi0gICAgICBpbnQgb25lb2ZfY2FzZV9vZmZzZXQsCi0gICAgICBpbnQg
b2JqZWN0X3NpemUsCi0gICAgICBpbnQgYXJlbmFfb2Zmc2V0LAotICAgICAgaW50IGlzX2RlZmF1
bHRfaW5zdGFuY2Vfb2Zmc2V0ID0gLTEpOwotCi0gIHN0YXRpYyBHZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbiogTmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBjb25zdCBEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgY29uc3QgTWVzc2FnZSogZGVmYXVsdF9pbnN0YW5j
ZSwKLSAgICAgIGNvbnN0IGludCBvZmZzZXRzW10sCi0gICAgICBpbnQgaGFzX2JpdHNfb2Zmc2V0
LAotICAgICAgaW50IHVua25vd25fZmllbGRzX29mZnNldCwKLSAgICAgIGludCBleHRlbnNpb25z
X29mZnNldCwKLSAgICAgIGludCBvYmplY3Rfc2l6ZSwKLSAgICAgIGludCBhcmVuYV9vZmZzZXQs
Ci0gICAgICBpbnQgaXNfZGVmYXVsdF9pbnN0YW5jZV9vZmZzZXQgPSAtMSk7Ci0KLSAgLy8gaW1w
bGVtZW50cyBSZWZsZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotICBjb25zdCBVbmtub3duRmllbGRTZXQmIEdldFVua25vd25GaWVsZHMoY29uc3Qg
TWVzc2FnZSYgbWVzc2FnZSkgY29uc3Q7Ci0gIFVua25vd25GaWVsZFNldCogTXV0YWJsZVVua25v
d25GaWVsZHMoTWVzc2FnZSogbWVzc2FnZSkgY29uc3Q7Ci0KLSAgaW50IFNwYWNlVXNlZChjb25z
dCBNZXNzYWdlJiBtZXNzYWdlKSBjb25zdDsKLQotICBib29sIEhhc0ZpZWxkKGNvbnN0IE1lc3Nh
Z2UmIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0OwotICBpbnQg
RmllbGRTaXplKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQpIGNvbnN0OwotICB2b2lkIENsZWFyRmllbGQoTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0gIGJvb2wgSGFzT25lb2YoY29uc3QgTWVz
c2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICBjb25zdCBPbmVvZkRlc2NyaXB0b3IqIG9u
ZW9mX2Rlc2NyaXB0b3IpIGNvbnN0OwotICB2b2lkIENsZWFyT25lb2YoTWVzc2FnZSogbWVzc2Fn
ZSwgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0gIHZvaWQgUmVtb3ZlTGFz
dChNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsK
LSAgTWVzc2FnZSogUmVsZWFzZUxhc3QoTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0gIHZvaWQgU3dhcChNZXNzYWdlKiBtZXNzYWdlMSwgTWVz
c2FnZSogbWVzc2FnZTIpIGNvbnN0OwotICB2b2lkIFN3YXBGaWVsZHMoTWVzc2FnZSogbWVzc2Fn
ZTEsIE1lc3NhZ2UqIG1lc3NhZ2UyLAotICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yPGNv
bnN0IEZpZWxkRGVzY3JpcHRvcio+JiBmaWVsZHMpIGNvbnN0OwotICB2b2lkIFN3YXBFbGVtZW50
cyhNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKSBjb25zdDsKLSAgdm9pZCBMaXN0
RmllbGRzKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICB2ZWN0b3I8
Y29uc3QgRmllbGREZXNjcmlwdG9yKj4qIG91dHB1dCkgY29uc3Q7Ci0KLSAgaW50MzIgIEdldElu
dDMyIChjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0OwotICBpbnQ2NCAgR2V0SW50NjQgKGNvbnN0IE1l
c3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCkgY29uc3Q7Ci0gIHVpbnQzMiBHZXRVSW50MzIoY29uc3QgTWVzc2FnZSYgbWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25z
dDsKLSAgdWludDY0IEdldFVJbnQ2NChjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0OwotICBmbG9hdCAg
R2V0RmxvYXQgKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0gIGRvdWJsZSBHZXREb3VibGUoY29u
c3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkKSBjb25zdDsKLSAgYm9vbCAgIEdldEJvb2wgIChjb25zdCBNZXNzYWdlJiBt
ZXNzYWdlLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQp
IGNvbnN0OwotICBzdHJpbmcgR2V0U3RyaW5nKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0gIGNv
bnN0IHN0cmluZyYgR2V0U3RyaW5nUmVmZXJlbmNlKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogc2NyYXRj
aCkgY29uc3Q7Ci0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIEdldEVudW0oY29uc3QgTWVz
c2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLSAgaW50IEdldEVudW1WYWx1ZShjb25z
dCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQpIGNvbnN0OwotICBjb25zdCBNZXNzYWdlJiBHZXRNZXNzYWdlKGNvbnN0IE1l
c3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRmFj
dG9yeSogZmFjdG9yeSA9IE5VTEwpIGNvbnN0OwotCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
R2V0T25lb2ZGaWVsZERlc2NyaXB0b3IoCi0gICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAot
ICAgICAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiBvbmVvZl9kZXNjcmlwdG9yKSBjb25zdDsKLQot
IHByaXZhdGU6Ci0gIGJvb2wgQ29udGFpbnNNYXBLZXkoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwK
LSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hcEtleSYga2V5KSBjb25zdDsKLSAgYm9vbCBJbnNl
cnRPckxvb2t1cE1hcFZhbHVlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTWFwS2V5JiBrZXksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNYXBWYWx1ZVJlZiogdmFsKSBjb25zdDsKLSAgYm9vbCBEZWxldGVNYXBWYWx1ZShN
ZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFwS2V5JiBrZXkpIGNv
bnN0OwotICBNYXBJdGVyYXRvciBNYXBCZWdpbigKLSAgICAgIE1lc3NhZ2UqIG1lc3NhZ2UsCi0g
ICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLSAgTWFwSXRlcmF0b3Ig
TWFwRW5kKAotICAgICAgTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQpIGNvbnN0OwotICBpbnQgTWFwU2l6ZShjb25zdCBNZXNzYWdlJiBtZXNzYWdl
LCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLQotIHB1YmxpYzoKLSAgdm9p
ZCBTZXRJbnQzMiAoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwgaW50MzIgIHZhbHVlKSBjb25zdDsKLSAgdm9pZCBTZXRJbnQ2
NCAoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCwgaW50NjQgIHZhbHVlKSBjb25zdDsKLSAgdm9pZCBTZXRVSW50MzIoTWVzc2Fn
ZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCwgdWludDMyIHZhbHVlKSBjb25zdDsKLSAgdm9pZCBTZXRVSW50NjQoTWVzc2FnZSogbWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgdWludDY0
IHZhbHVlKSBjb25zdDsKLSAgdm9pZCBTZXRGbG9hdCAoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAg
ICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgZmxvYXQgIHZhbHVlKSBj
b25zdDsKLSAgdm9pZCBTZXREb3VibGUoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgZG91YmxlIHZhbHVlKSBjb25zdDsKLSAg
dm9pZCBTZXRCb29sICAoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCwgYm9vbCAgIHZhbHVlKSBjb25zdDsKLSAgdm9pZCBTZXRT
dHJpbmcoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB2YWx1ZSkgY29u
c3Q7Ci0gIHZvaWQgU2V0RW51bSAgKE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3Iq
IHZhbHVlKSBjb25zdDsKLSAgdm9pZCBTZXRFbnVtVmFsdWUoTWVzc2FnZSogbWVzc2FnZSwgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVl
KSBjb25zdDsKLSAgTWVzc2FnZSogTXV0YWJsZU1lc3NhZ2UoTWVzc2FnZSogbWVzc2FnZSwgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWVz
c2FnZUZhY3RvcnkqIGZhY3RvcnkgPSBOVUxMKSBjb25zdDsKLSAgdm9pZCBTZXRBbGxvY2F0ZWRN
ZXNzYWdlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNz
YWdlKiBzdWJfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZmllbGQpIGNvbnN0OwotICBNZXNzYWdlKiBSZWxlYXNlTWVzc2FnZShNZXNz
YWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBNZXNzYWdlRmFjdG9yeSogZmFjdG9yeSA9IE5VTEwpIGNvbnN0OwotCi0g
IGludDMyICBHZXRSZXBlYXRlZEludDMyIChjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGlu
ZGV4KSBjb25zdDsKLSAgaW50NjQgIEdldFJlcGVhdGVkSW50NjQgKGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkLCBpbnQgaW5kZXgpIGNvbnN0OwotICB1aW50MzIgR2V0UmVwZWF0ZWRVSW50MzIoY29u
c3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQsIGludCBpbmRleCkgY29uc3Q7Ci0gIHVpbnQ2NCBHZXRSZXBl
YXRlZFVJbnQ2NChjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4KSBjb25zdDsKLSAg
ZmxvYXQgIEdldFJlcGVhdGVkRmxvYXQgKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQgaW5k
ZXgpIGNvbnN0OwotICBkb3VibGUgR2V0UmVwZWF0ZWREb3VibGUoY29uc3QgTWVzc2FnZSYgbWVz
c2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQsIGludCBpbmRleCkgY29uc3Q7Ci0gIGJvb2wgICBHZXRSZXBlYXRlZEJvb2wgIChjb25z
dCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4KSBjb25zdDsKLSAgc3RyaW5nIEdldFJlcGVh
dGVkU3RyaW5nKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQgaW5kZXgpIGNvbnN0OwotICBj
b25zdCBzdHJpbmcmIEdldFJlcGVhdGVkU3RyaW5nUmVmZXJlbmNlKGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5kZXgsIHN0cmluZyogc2NyYXRjaCkgY29uc3Q7Ci0gIGNvbnN0IEVu
dW1WYWx1ZURlc2NyaXB0b3IqIEdldFJlcGVhdGVkRW51bShjb25zdCBNZXNzYWdlJiBtZXNzYWdl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbmRleCkgY29uc3Q7Ci0gIGludCBHZXRSZXBlYXRlZEVudW1WYWx1ZShj
b25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bmRleCkgY29uc3Q7Ci0gIGNvbnN0IE1lc3NhZ2UmIEdldFJlcGVhdGVkTWVzc2FnZShjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbmRleCkgY29uc3Q7Ci0KLSAgLy8gU2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxk
LgotICB2b2lkIFNldFJlcGVhdGVkSW50MzIgKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4LCBp
bnQzMiAgdmFsdWUpIGNvbnN0OwotICB2b2lkIFNldFJlcGVhdGVkSW50NjQgKE1lc3NhZ2UqIG1l
c3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCwgaW50IGluZGV4LCBpbnQ2NCAgdmFsdWUpIGNvbnN0OwotICB2b2lkIFNldFJlcGVhdGVk
VUludDMyKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4LCB1aW50MzIgdmFsdWUpIGNvbnN0Owot
ICB2b2lkIFNldFJlcGVhdGVkVUludDY0KE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4LCB1aW50
NjQgdmFsdWUpIGNvbnN0OwotICB2b2lkIFNldFJlcGVhdGVkRmxvYXQgKE1lc3NhZ2UqIG1lc3Nh
Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCwgaW50IGluZGV4LCBmbG9hdCAgdmFsdWUpIGNvbnN0OwotICB2b2lkIFNldFJlcGVhdGVkRG91
YmxlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0OwotICB2
b2lkIFNldFJlcGVhdGVkQm9vbCAgKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4LCBib29sICAg
dmFsdWUpIGNvbnN0OwotICB2b2lkIFNldFJlcGVhdGVkU3RyaW5nKE1lc3NhZ2UqIG1lc3NhZ2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwg
aW50IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgdmFsdWUp
IGNvbnN0OwotICB2b2lkIFNldFJlcGVhdGVkRW51bShNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgs
IGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIHZhbHVlKSBjb25zdDsKLSAgdm9pZCBTZXRSZXBl
YXRlZEVudW1WYWx1ZShNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwgaW50IHZhbHVlKSBj
b25zdDsKLSAgLy8gR2V0IGEgbXV0YWJsZSBwb2ludGVyIHRvIGEgZmllbGQgd2l0aCBhIG1lc3Nh
Z2UgdHlwZS4KLSAgTWVzc2FnZSogTXV0YWJsZVJlcGVhdGVkTWVzc2FnZShNZXNzYWdlKiBtZXNz
YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
KSBjb25zdDsKLQotICB2b2lkIEFkZEludDMyIChNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAg
ICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQzMiAgdmFsdWUpIGNvbnN0
OwotICB2b2lkIEFkZEludDY0IChNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQ2NCAgdmFsdWUpIGNvbnN0OwotICB2b2lk
IEFkZFVJbnQzMihNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkLCB1aW50MzIgdmFsdWUpIGNvbnN0OwotICB2b2lkIEFkZFVJbnQ2
NChNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkLCB1aW50NjQgdmFsdWUpIGNvbnN0OwotICB2b2lkIEFkZEZsb2F0IChNZXNzYWdl
KiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LCBmbG9hdCAgdmFsdWUpIGNvbnN0OwotICB2b2lkIEFkZERvdWJsZShNZXNzYWdlKiBtZXNzYWdl
LAotICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBkb3VibGUg
dmFsdWUpIGNvbnN0OwotICB2b2lkIEFkZEJvb2wgIChNZXNzYWdlKiBtZXNzYWdlLAotICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBib29sICAgdmFsdWUpIGNv
bnN0OwotICB2b2lkIEFkZFN0cmluZyhNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBjb25zdCBzdHJpbmcmIHZhbHVlKSBjb25z
dDsKLSAgdm9pZCBBZGRFbnVtKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgY29uc3QgRW51bVZhbHVl
RGVzY3JpcHRvciogdmFsdWUpIGNvbnN0OwotICB2b2lkIEFkZEVudW1WYWx1ZShNZXNzYWdlKiBt
ZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LAotICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpIGNvbnN0OwotICBNZXNzYWdlKiBBZGRN
ZXNzYWdlKE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0g
ICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkqIGZhY3RvcnkgPSBOVUxMKSBjb25z
dDsKLSAgdm9pZCBBZGRBbGxvY2F0ZWRNZXNzYWdlKAotICAgICAgTWVzc2FnZSogbWVzc2FnZSwg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgIE1lc3NhZ2UqIG5ld19lbnRyeSkg
Y29uc3Q7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBGaW5kS25vd25FeHRlbnNpb25CeU5h
bWUoY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBG
aW5kS25vd25FeHRlbnNpb25CeU51bWJlcihpbnQgbnVtYmVyKSBjb25zdDsKLQotICBib29sIFN1
cHBvcnRzVW5rbm93bkVudW1WYWx1ZXMoKSBjb25zdDsKLQotICAvLyBUaGlzIHZhbHVlIGZvciBh
cmVuYV9vZmZzZXRfIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIG5vIGFyZW5hIHBvaW50ZXIgaW4K
LSAgLy8gdGhpcyBtZXNzYWdlIChlLmcuLCBvbGQgZ2VuZXJhdGVkIGNvZGUpLgotICBzdGF0aWMg
Y29uc3QgaW50IGtOb0FyZW5hUG9pbnRlciA9IC0xOwotCi0gIC8vIFRoaXMgdmFsdWUgZm9yIHVu
a25vd25fZmllbGRfb2Zmc2V0XyBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubwotICAvLyBVbmtu
b3duRmllbGRTZXQgaW4gdGhpcyBtZXNzYWdlLCBhbmQgdGhhdCBpbnN0ZWFkLCB3ZSBhcmUgdXNp
bmcgdGhlCi0gIC8vIFplcm8tT3ZlcmhlYWQgQXJlbmEgUG9pbnRlciB0cmljay4gV2hlbiB0aGlz
IGlzIHRoZSBjYXNlLCBhcmVuYV9vZmZzZXRfCi0gIC8vIGFjdHVhbGx5IGluZGV4ZXMgdG8gYW4g
SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBpbnN0YW5jZSwgd2hpY2ggY2FuIHJldHVybgotICAv
LyBlaXRoZXIgYW4gYXJlbmEgcG9pbnRlciBvciBhbiBVbmtub3duRmllbGRTZXQgb3IgYm90aC4g
SXQgaXMgbmV2ZXIgdGhlIGNhc2UKLSAgLy8gdGhhdCB1bmtub3duX2ZpZWxkX29mZnNldF8gPT0g
a1Vua25vd25GaWVsZFNldEluTWV0YWRhdGEgJiYgYXJlbmFfb2Zmc2V0XwotICAvLyA9PSBrTm9B
cmVuYVBvaW50ZXIuCi0gIHN0YXRpYyBjb25zdCBpbnQga1Vua25vd25GaWVsZFNldEluTWV0YWRh
dGEgPSAtMTsKLQotIHByb3RlY3RlZDoKLSAgdm9pZCogTXV0YWJsZVJhd1JlcGVhdGVkRmllbGQo
Ci0gICAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBG
aWVsZERlc2NyaXB0b3I6OkNwcFR5cGUsCi0gICAgICBpbnQgY3R5cGUsIGNvbnN0IERlc2NyaXB0
b3IqIGRlc2MpIGNvbnN0OwotCi0gIGNvbnN0IHZvaWQqIEdldFJhd1JlcGVhdGVkRmllbGQoCi0g
ICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LAotICAgICAgRmllbGREZXNjcmlwdG9yOjpDcHBUeXBlLCBpbnQgY3R5cGUsCi0gICAgICBjb25z
dCBEZXNjcmlwdG9yKiBkZXNjKSBjb25zdDsKLQotICB2aXJ0dWFsIE1lc3NhZ2VGYWN0b3J5KiBH
ZXRNZXNzYWdlRmFjdG9yeSgpIGNvbnN0OwotCi0gIHZpcnR1YWwgdm9pZCogUmVwZWF0ZWRGaWVs
ZERhdGEoCi0gICAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkLAotICAgICAgRmllbGREZXNjcmlwdG9yOjpDcHBUeXBlIGNwcF90eXBlLAotICAgICAgY29u
c3QgRGVzY3JpcHRvciogbWVzc2FnZV90eXBlKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGZyaWVu
ZCBjbGFzcyBHZW5lcmF0ZWRNZXNzYWdlOwotCi0gIC8vIFRvIHBhcnNlIGRpcmVjdGx5IGludG8g
YSBwcm90bzIgZ2VuZXJhdGVkIGNsYXNzLCB0aGUgY2xhc3MgR01SX0hhbmRsZXJzCi0gIC8vIG5l
ZWRzIGFjY2VzcyB0byBtZW1iZXIgb2Zmc2V0cyBhbmQgaGFzYml0cy4KLSAgZnJpZW5kIGNsYXNz
IHVwYjo6Z29vZ2xlX29wZW5zb3VyY2U6OkdNUl9IYW5kbGVyczsKLQotICBjb25zdCBEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yXzsKLSAgY29uc3QgTWVzc2FnZSogZGVmYXVsdF9pbnN0YW5jZV87Ci0g
IGNvbnN0IHZvaWQqIGRlZmF1bHRfb25lb2ZfaW5zdGFuY2VfOwotICBjb25zdCBpbnQqIG9mZnNl
dHNfOwotCi0gIGludCBoYXNfYml0c19vZmZzZXRfOwotICBpbnQgb25lb2ZfY2FzZV9vZmZzZXRf
OwotICBpbnQgdW5rbm93bl9maWVsZHNfb2Zmc2V0XzsKLSAgaW50IGV4dGVuc2lvbnNfb2Zmc2V0
XzsKLSAgaW50IGFyZW5hX29mZnNldF87Ci0gIGludCBpc19kZWZhdWx0X2luc3RhbmNlX29mZnNl
dF87Ci0gIGludCBvYmplY3Rfc2l6ZV87Ci0KLSAgc3RhdGljIGNvbnN0IGludCBrSGFzTm9EZWZh
dWx0SW5zdGFuY2VGaWVsZCA9IC0xOwotCi0gIGNvbnN0IERlc2NyaXB0b3JQb29sKiBkZXNjcmlw
dG9yX3Bvb2xfOwotICBNZXNzYWdlRmFjdG9yeSogbWVzc2FnZV9mYWN0b3J5XzsKLQotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVHlwZT4KLSAgaW5saW5lIGNvbnN0IFR5cGUmIEdldFJhdyhjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZmllbGQpIGNvbnN0OwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KLSAg
aW5saW5lIFR5cGUqIE11dGFibGVSYXcoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0gIHRlbXBs
YXRlIDx0eXBlbmFtZSBUeXBlPgotICBpbmxpbmUgY29uc3QgVHlwZSYgRGVmYXVsdFJhdyhjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5
cGU+Ci0gIGlubGluZSBjb25zdCBUeXBlJiBEZWZhdWx0T25lb2ZSYXcoY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0KLSAgaW5saW5lIGNvbnN0IHVpbnQzMiogR2V0SGFzQml0
cyhjb25zdCBNZXNzYWdlJiBtZXNzYWdlKSBjb25zdDsKLSAgaW5saW5lIHVpbnQzMiogTXV0YWJs
ZUhhc0JpdHMoTWVzc2FnZSogbWVzc2FnZSkgY29uc3Q7Ci0gIGlubGluZSB1aW50MzIgR2V0T25l
b2ZDYXNlKAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgIGNvbnN0IE9uZW9m
RGVzY3JpcHRvciogb25lb2ZfZGVzY3JpcHRvcikgY29uc3Q7Ci0gIGlubGluZSB1aW50MzIqIE11
dGFibGVPbmVvZkNhc2UoCi0gICAgICBNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgY29uc3QgT25l
b2ZEZXNjcmlwdG9yKiBvbmVvZl9kZXNjcmlwdG9yKSBjb25zdDsKLSAgaW5saW5lIGNvbnN0IEV4
dGVuc2lvblNldCYgR2V0RXh0ZW5zaW9uU2V0KGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UpIGNvbnN0
OwotICBpbmxpbmUgRXh0ZW5zaW9uU2V0KiBNdXRhYmxlRXh0ZW5zaW9uU2V0KE1lc3NhZ2UqIG1l
c3NhZ2UpIGNvbnN0OwotICBpbmxpbmUgQXJlbmEqIEdldEFyZW5hKE1lc3NhZ2UqIG1lc3NhZ2Up
IGNvbnN0OwotICBpbmxpbmUgY29uc3QgaW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJl
bmEmCi0gICAgICBHZXRJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hKGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UpIGNvbnN0OwotICBpbmxpbmUgaW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJl
bmEqCi0gICAgICBNdXRhYmxlSW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYShNZXNzYWdlKiBtZXNz
YWdlKSBjb25zdDsKLQotICBpbmxpbmUgYm9vbCBHZXRJc0RlZmF1bHRJbnN0YW5jZShjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlKSBjb25zdDsKLQotICBpbmxpbmUgYm9vbCBIYXNCaXQoY29uc3QgTWVz
c2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQpIGNvbnN0OwotICBpbmxpbmUgdm9pZCBTZXRCaXQoTWVzc2FnZSogbWVzc2FnZSwK
LSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0
OwotICBpbmxpbmUgdm9pZCBDbGVhckJpdChNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLSAgaW5saW5l
IHZvaWQgU3dhcEJpdChNZXNzYWdlKiBtZXNzYWdlMSwKLSAgICAgICAgICAgICAgICAgICAgICBN
ZXNzYWdlKiBtZXNzYWdlMiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkKSBjb25zdDsKLQotICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgc3dhcHMgdGhl
IGZpZWxkLiBTaG91bGQgc3dhcCBjb3JyZXNwb25kaW5nIGhhc19iaXQKLSAgLy8gYmVmb3JlIG9y
IGFmdGVyIHVzaW5nIHRoaXMgZnVuY3Rpb24uCi0gIHZvaWQgU3dhcEZpZWxkKE1lc3NhZ2UqIG1l
c3NhZ2UxLAotICAgICAgICAgICAgICAgICBNZXNzYWdlKiBtZXNzYWdlMiwKLSAgICAgICAgICAg
ICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0KLSAgdm9pZCBTd2Fw
T25lb2ZGaWVsZChNZXNzYWdlKiBtZXNzYWdlMSwKLSAgICAgICAgICAgICAgICAgICAgICBNZXNz
YWdlKiBtZXNzYWdlMiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPbmVvZkRlc2NyaXB0
b3IqIG9uZW9mX2Rlc2NyaXB0b3IpIGNvbnN0OwotCi0gIGlubGluZSBib29sIEhhc09uZW9mRmll
bGQoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLSAgaW5saW5lIHZvaWQgU2V0T25l
b2ZDYXNlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLSAgaW5saW5lIHZvaWQgQ2xlYXJPbmVv
ZkZpZWxkKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLQotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZT4KLSAgaW5saW5lIGNvbnN0IFR5cGUmIEdldEZpZWxkKGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkKSBjb25zdDsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci0gIGlubGluZSB2
b2lkIFNldEZpZWxkKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGNvbnN0IFR5cGUmIHZhbHVlKSBjb25zdDsKLSAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci0gIGlubGluZSBUeXBlKiBNdXRhYmxlRmllbGQoTWVz
c2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci0gIGlu
bGluZSBjb25zdCBUeXBlJiBHZXRSZXBlYXRlZEZpZWxkKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bmRleCkgY29uc3Q7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotICBpbmxpbmUgY29uc3Qg
VHlwZSYgR2V0UmVwZWF0ZWRQdHJGaWVsZChjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5k
ZXgpIGNvbnN0OwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KLSAgaW5saW5lIHZvaWQgU2V0
UmVwZWF0ZWRGaWVsZChNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGludCBpbmRleCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUeXBlIHZhbHVlKSBjb25zdDsKLSAgdGVtcGxhdGUgPHR5
cGVuYW1lIFR5cGU+Ci0gIGlubGluZSBUeXBlKiBNdXRhYmxlUmVwZWF0ZWRGaWVsZChNZXNzYWdl
KiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbmRleCkgY29uc3Q7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotICBpbmxpbmUg
dm9pZCBBZGRGaWVsZChNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBjb25zdCBUeXBlJiB2YWx1ZSkgY29uc3Q7Ci0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotICBpbmxpbmUgVHlwZSogQWRkRmllbGQoTWVzc2Fn
ZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQpIGNvbnN0OwotCi0gIGludCBHZXRFeHRlbnNpb25OdW1iZXJPckRpZShjb25zdCBE
ZXNjcmlwdG9yKiB0eXBlKSBjb25zdDsKLQotICAvLyBJbnRlcm5hbCB2ZXJzaW9ucyBvZiBFbnVt
VmFsdWUgQVBJIHBlcmZvcm0gbm8gY2hlY2tpbmcuIENhbGxlZCBhZnRlciBjaGVja3MKLSAgLy8g
YnkgcHVibGljIG1ldGhvZHMuCi0gIHZvaWQgU2V0RW51bVZhbHVlSW50ZXJuYWwoTWVzc2FnZSog
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkgY29uc3Q7
Ci0gIHZvaWQgU2V0UmVwZWF0ZWRFbnVtVmFsdWVJbnRlcm5hbChNZXNzYWdlKiBtZXNzYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkgY29uc3Q7Ci0g
IHZvaWQgQWRkRW51bVZhbHVlSW50ZXJuYWwoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkgY29uc3Q7Ci0KLQotICBNZXNzYWdlKiBVbnNh
ZmVBcmVuYVJlbGVhc2VNZXNzYWdlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRmFjdG9yeSogZmFjdG9yeSA9
IE5VTEwpIGNvbnN0OwotCi0gIHZvaWQgVW5zYWZlQXJlbmFTZXRBbGxvY2F0ZWRNZXNzYWdlKE1l
c3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1l
c3NhZ2UqIHN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLQotICBpbnRlcm5hbDo6TWFw
RmllbGRCYXNlKiBNYXBEYXRhKAotICAgICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RS
VUNUT1JTKEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKTsKLX07Ci0KLS8vIFJldHVybnMgdGhl
IG9mZnNldCBvZiB0aGUgZ2l2ZW4gZmllbGQgd2l0aGluIHRoZSBnaXZlbiBhZ2dyZWdhdGUgdHlw
ZS4KLS8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgQU5TSSBDIG9mZnNldG9mKCkgbWFjcm8u
ICBIb3dldmVyLCBhY2NvcmRpbmcKLS8vIHRvIHRoZSBDKysgc3RhbmRhcmQsIG9mZnNldG9mKCkg
b25seSB3b3JrcyBvbiBQT0QgdHlwZXMsIGFuZCBHQ0MKLS8vIGVuZm9yY2VzIHRoaXMgcmVxdWly
ZW1lbnQgd2l0aCBhIHdhcm5pbmcuICBJbiBwcmFjdGljZSwgdGhpcyBydWxlIGlzCi0vLyB1bm5l
Y2Vzc2FyaWx5IHN0cmljdDsgdGhlcmUgaXMgcHJvYmFibHkgbm8gY29tcGlsZXIgb3IgcGxhdGZv
cm0gb24KLS8vIHdoaWNoIHRoZSBvZmZzZXRzIG9mIHRoZSBkaXJlY3QgZmllbGRzIG9mIGEgY2xh
c3MgYXJlIG5vbi1jb25zdGFudC4KLS8vIEZpZWxkcyBpbmhlcml0ZWQgZnJvbSBzdXBlcmNsYXNz
ZXMgKmNhbiogaGF2ZSBub24tY29uc3RhbnQgb2Zmc2V0cywKLS8vIGJ1dCB0aGF0J3Mgbm90IHdo
YXQgdGhpcyBtYWNybyB3aWxsIGJlIHVzZWQgZm9yLgotI2lmIGRlZmluZWQoX19jbGFuZ19fKQot
Ly8gRm9yIENsYW5nIHdlIHVzZSBfX2J1aWx0aW5fb2Zmc2V0b2YoKSBhbmQgc3VwcHJlc3MgdGhl
IHdhcm5pbmcsCi0vLyB0byBhdm9pZCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IGFuZCBVQlNhbiB2
cHRyIHNhbml0aXplcnMgZnJvbQotLy8gY3Jhc2hpbmcgd2hpbGUgdHJ5aW5nIHRvIHZhbGlkYXRl
IHRoZSBpbnZhbGlkIHJlaW50ZXJwZXRfY2FzdHMuCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVFlQRSwgRklFTEQpICAgIFwKLSAgX1ByYWdt
YSgiY2xhbmcgZGlhZ25vc3RpYyBwdXNoIikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2ludmFsaWQtb2Zmc2V0b2Zc
IiIpICBcCi0gIF9fYnVpbHRpbl9vZmZzZXRvZihUWVBFLCBGSUVMRCkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBwb3AiKQotI2Vsc2UK
LS8vIE5vdGUgdGhhdCB3ZSBjYWxjdWxhdGUgcmVsYXRpdmUgdG8gdGhlIHBvaW50ZXIgdmFsdWUg
MTYgaGVyZSBzaW5jZSBpZiB3ZQotLy8ganVzdCB1c2UgemVybywgR0NDIGNvbXBsYWlucyBhYm91
dCBkZXJlZmVyZW5jaW5nIGEgTlVMTCBwb2ludGVyLiAgV2UKLS8vIGNob29zZSAxNiByYXRoZXIg
dGhhbiBzb21lIG90aGVyIG51bWJlciBqdXN0IGluIGNhc2UgdGhlIGNvbXBpbGVyIHdvdWxkCi0v
LyBiZSBjb25mdXNlZCBieSBhbiB1bmFsaWduZWQgcG9pbnRlci4KLSNkZWZpbmUgR09PR0xFX1BS
T1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChUWVBFLCBGSUVMRCkgICAgXAot
ICBzdGF0aWNfY2FzdDxpbnQ+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPiggICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAmcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUWVBFKj4o
MTYpLT5GSUVMRCkgLSAgICAgICAgXAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oMTYpKQotI2VuZGlmCi0KLSNkZWZpbmUgUFJPVE8yX0dFTkVSQVRFRF9ERUZBVUxUX09ORU9G
X0ZJRUxEX09GRlNFVChPTkVPRiwgRklFTEQpICAgICBcCi0gIHN0YXRpY19jYXN0PGludD4oICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJihPTkVPRi0+RklFTEQpKSAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oT05FT0YpKQot
Ci0vLyBUaGVyZSBhcmUgc29tZSBwbGFjZXMgaW4gcHJvdG8yIHdoZXJlIGR5bmFtaWNfY2FzdCB3
b3VsZCBiZSB1c2VmdWwgYXMgYW4KLS8vIG9wdGltaXphdGlvbi4gIEZvciBleGFtcGxlLCB0YWtl
IE1lc3NhZ2U6Ok1lcmdlRnJvbShjb25zdCBNZXNzYWdlJiBvdGhlcikuCi0vLyBGb3IgYSBnaXZl
biBnZW5lcmF0ZWQgbWVzc2FnZSBGb29NZXNzYWdlLCB3ZSBnZW5lcmF0ZSB0aGVzZSB0d28gbWV0
aG9kczoKLS8vICAgdm9pZCBNZXJnZUZyb20oY29uc3QgRm9vTWVzc2FnZSYgb3RoZXIpOwotLy8g
ICB2b2lkIE1lcmdlRnJvbShjb25zdCBNZXNzYWdlJiBvdGhlcik7Ci0vLyBUaGUgZm9ybWVyIG1l
dGhvZCBjYW4gYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkgaW4gdGVybXMgb2YgRm9vTWVzc2FnZSdz
Ci0vLyBpbmxpbmUgYWNjZXNzb3JzLCBidXQgdGhlIGxhdHRlciBtZXRob2QgbXVzdCB3b3JrIHdp
dGggdGhlIHJlZmxlY3Rpb24KLS8vIGludGVyZmFjZS4gIEhvd2V2ZXIsIGlmIHRoZSBwYXJhbWV0
ZXIgdG8gdGhlIGxhdHRlciBtZXRob2QgaXMgYWN0dWFsbHkgb2YKLS8vIHR5cGUgRm9vTWVzc2Fn
ZSwgdGhlbiB3ZSdkIGxpa2UgdG8gYmUgYWJsZSB0byBqdXN0IGNhbGwgdGhlIG90aGVyIG1ldGhv
ZAotLy8gYXMgYW4gb3B0aW1pemF0aW9uLiAgU28sIHdlIHVzZSBkeW5hbWljX2Nhc3QgdG8gY2hl
Y2sgdGhpcy4KLS8vCi0vLyBUaGF0IHNhaWQsIGR5bmFtaWNfY2FzdCByZXF1aXJlcyBSVFRJLCB3
aGljaCBtYW55IHBlb3BsZSBsaWtlIHRvIGRpc2FibGUKLS8vIGZvciBwZXJmb3JtYW5jZSBhbmQg
Y29kZSBzaXplIHJlYXNvbnMuICBXaGVuIFJUVEkgaXMgbm90IGF2YWlsYWJsZSwgd2UKLS8vIHN0
aWxsIG5lZWQgdG8gcHJvZHVjZSBjb3JyZWN0IHJlc3VsdHMuICBTbywgaW4gdGhpcyBjYXNlIHdl
IGhhdmUgdG8gZmFsbAotLy8gYmFjayB0byB1c2luZyByZWZsZWN0aW9uLCB3aGljaCBpcyB3aGF0
IHdlIHdvdWxkIGhhdmUgZG9uZSBhbnl3YXkgaWYgdGhlCi0vLyBvYmplY3RzIHdlcmUgbm90IG9m
IHRoZSBleGFjdCBzYW1lIGNsYXNzLgotLy8KLS8vIGR5bmFtaWNfY2FzdF9pZl9hdmFpbGFibGUo
KSBpbXBsZW1lbnRzIHRoaXMgbG9naWMuICBJZiBSVFRJIGlzCi0vLyBlbmFibGVkLCBpdCBkb2Vz
IGEgZHluYW1pY19jYXN0LiAgSWYgUlRUSSBpcyBkaXNhYmxlZCwgaXQganVzdCByZXR1cm5zCi0v
LyBOVUxMLgotLy8KLS8vIElmIHlvdSBuZWVkIHRvIGNvbXBpbGUgd2l0aG91dCBSVFRJLCBzaW1w
bHkgI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfTk9fUlRUSS4KLS8vIE9uIE1TVkMsIHRoaXMgc2hv
dWxkIGJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlw
ZW5hbWUgRnJvbT4KLWlubGluZSBUbyBkeW5hbWljX2Nhc3RfaWZfYXZhaWxhYmxlKEZyb20gZnJv
bSkgewotI2lmIGRlZmluZWQoR09PR0xFX1BST1RPQlVGX05PX1JUVEkpIHx8IChkZWZpbmVkKF9N
U0NfVkVSKSYmIWRlZmluZWQoX0NQUFJUVEkpKQotICByZXR1cm4gTlVMTDsKLSNlbHNlCi0gIHJl
dHVybiBkeW5hbWljX2Nhc3Q8VG8+KGZyb20pOwotI2VuZGlmCi19Ci0KLS8vIFRyaWVzIHRvIGRv
d25jYXN0IHRoaXMgbWVzc2FnZSB0byBhIGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUuCi0vLyBSZXR1
cm5zIE5VTEwgaWYgdGhpcyBjbGFzcyBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVC4KLS8vCi0vLyBU
aGlzIGlzIGxpa2UgZHluYW1pY19jYXN0X2lmX2F2YWlsYWJsZSwgZXhjZXB0IGl0IHdvcmtzIGV2
ZW4gd2hlbgotLy8gZHluYW1pY19jYXN0IGlzIG5vdCBhdmFpbGFibGUgYnkgdXNpbmcgUmVmbGVj
dGlvbi4gIEhvd2V2ZXIgaXQgb25seSB3b3JrcwotLy8gd2l0aCBNZXNzYWdlIG9iamVjdHMuCi0v
LwotLy8gVE9ETyhoYWJlcm1hbik6IGNhbiB3ZSByZW1vdmUgZHluYW1pY19jYXN0X2lmX2F2YWls
YWJsZSBpbiBmYXZvciBvZiB0aGlzPwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1UKiBEeW5hbWlj
Q2FzdFRvR2VuZXJhdGVkKGNvbnN0IE1lc3NhZ2UqIGZyb20pIHsKLSAgLy8gQ29tcGlsZS10aW1l
IGFzc2VydCB0aGF0IFQgaXMgYSBnZW5lcmF0ZWQgdHlwZSB0aGF0IGhhcyBhCi0gIC8vIGRlZmF1
bHRfaW5zdGFuY2UoKSBhY2Nlc3NvciwgYnV0IGF2b2lkIGFjdHVhbGx5IGNhbGxpbmcgaXQuCi0g
IGNvbnN0IFQmKCpnZXRfZGVmYXVsdF9pbnN0YW5jZSkoKSA9ICZUOjpkZWZhdWx0X2luc3RhbmNl
OwotICAodm9pZClnZXRfZGVmYXVsdF9pbnN0YW5jZTsKLQotICAvLyBDb21waWxlLXRpbWUgYXNz
ZXJ0IHRoYXQgVCBpcyBhIHN1YmNsYXNzIG9mIGdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UuCi0g
IGNvbnN0IE1lc3NhZ2UqIHVudXNlZCA9IHN0YXRpY19jYXN0PFQqPihOVUxMKTsKLSAgKHZvaWQp
dW51c2VkOwotCi0jaWYgZGVmaW5lZChHT09HTEVfUFJPVE9CVUZfTk9fUlRUSSkgfHwgXAotICAo
ZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX0NQUFJUVEkpKQotICBib29sIG9rID0gJlQ6
OmRlZmF1bHRfaW5zdGFuY2UoKSA9PQotICAgICAgICAgICAgZnJvbS0+R2V0UmVmbGVjdGlvbigp
LT5HZXRNZXNzYWdlRmFjdG9yeSgpLT5HZXRQcm90b3R5cGUoCi0gICAgICAgICAgICAgICAgZnJv
bS0+R2V0RGVzY3JpcHRvcigpKTsKLSAgcmV0dXJuIG9rID8gZG93bl9jYXN0PFQqPihmcm9tKSA6
IE5VTEw7Ci0jZWxzZQotICByZXR1cm4gZHluYW1pY19jYXN0PFQqPihmcm9tKTsKLSNlbmRpZgot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLVQqIER5bmFtaWNDYXN0VG9HZW5lcmF0ZWQoTWVz
c2FnZSogZnJvbSkgewotICBjb25zdCBNZXNzYWdlKiBtZXNzYWdlX2NvbnN0ID0gZnJvbTsKLSAg
cmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KER5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgVD4obWVz
c2FnZV9jb25zdCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dM
RV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9SRUZMRUNUSU9OX0hfXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb25fdW5pdHRlc3Qu
Y2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbl91bml0
dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlYmRlZjFmYzkyNmFhMDhk
YjkxODE3YzkwZjA5ODFmZDYxNGNjYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVj
dGlvbl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDg1MiArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNv
bSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMg
ZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0v
LwotLy8gVG8gdGVzdCBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbiwgd2UgYWN0dWFsbHkgbGV0
IHRoZSBwcm90b2NvbCBjb21waWxlcgotLy8gZ2VuZXJhdGUgYSBmdWxsIHByb3RvY29sIG1lc3Nh
Z2UgaW1wbGVtZW50YXRpb24gYW5kIHRoZW4gdGVzdCBpdHMKLS8vIHJlZmxlY3Rpb24gaW50ZXJm
YWNlLiAgVGhpcyBpcyBtdWNoIGVhc2llciBhbmQgbW9yZSBtYWludGFpbmFibGUgdGhhbgotLy8g
dHJ5aW5nIHRvIGNyZWF0ZSBvdXIgb3duIE1lc3NhZ2UgY2xhc3MgZm9yIEdlbmVyYXRlZE1lc3Nh
Z2VSZWZsZWN0aW9uCi0vLyB0byB3cmFwLgotLy8KLS8vIFRoZSB0ZXN0cyBoZXJlIGNsb3NlbHkg
bWlycm9yIHNvbWUgb2YgdGhlIHRlc3RzIGluCi0vLyBjb21waWxlci9jcHAvdW5pdHRlc3QsIGV4
Y2VwdCB1c2luZyB0aGUgcmVmbGVjdGlvbiBpbnRlcmZhY2UKLS8vIHJhdGhlciB0aGFuIGdlbmVy
YXRlZCBhY2Nlc3NvcnMuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21l
c3NhZ2VfcmVmbGVjdGlvbi5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9Q
VFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5k
aWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3Rlc3RfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91
bml0dGVzdC5wYi5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotbmFt
ZXNwYWNlIHsKLQotLy8gU2hvcnRoYW5kIHRvIGdldCBhIEZpZWxkRGVzY3JpcHRvciBmb3IgYSBm
aWVsZCBvZiB1bml0dGVzdDo6VGVzdEFsbFR5cGVzLgotY29uc3QgRmllbGREZXNjcmlwdG9yKiBG
KGNvbnN0IHN0cmluZyYgbmFtZSkgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHJlc3VsdCA9
Ci0gICAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6ZGVzY3JpcHRvcigpLT5GaW5kRmllbGRCeU5h
bWUobmFtZSk7Ci0gIEdPT0dMRV9DSEVDSyhyZXN1bHQgIT0gTlVMTCk7Ci0gIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBEZWZhdWx0cykg
ewotICAvLyBDaGVjayB0aGF0IGFsbCBkZWZhdWx0IHZhbHVlcyBhcmUgc2V0IGNvcnJlY3RseSBp
biB0aGUgaW5pdGlhbCBtZXNzYWdlLgotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7
Ci0gIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyIHJlZmxlY3Rpb25fdGVzdGVyKAotICAgIHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRlc2NyaXB0b3IoKSk7Ci0KLSAgcmVmbGVjdGlvbl90ZXN0
ZXIuRXhwZWN0Q2xlYXJWaWFSZWZsZWN0aW9uKG1lc3NhZ2UpOwotCi0gIGNvbnN0IFJlZmxlY3Rp
b24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLQotICAvLyBNZXNzYWdl
cyBzaG91bGQgcmV0dXJuIHBvaW50ZXJzIHRvIGRlZmF1bHQgaW5zdGFuY2VzIHVudGlsIGZpcnN0
IHVzZS4KLSAgLy8gKFRoaXMgaXMgbm90IGNoZWNrZWQgYnkgRXhwZWN0Q2xlYXIoKSBzaW5jZSBp
dCBpcyBub3QgYWN0dWFsbHkgdHJ1ZSBhZnRlcgotICAvLyB0aGUgZmllbGRzIGhhdmUgYmVlbiBz
ZXQgYW5kIHRoZW4gY2xlYXJlZC4pCi0gIEVYUEVDVF9FUSgmdW5pdHRlc3Q6OlRlc3RBbGxUeXBl
czo6T3B0aW9uYWxHcm91cDo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAgICAgICAgJnJlZmxl
Y3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxncm91cCIpKSk7Ci0gIEVYUEVD
VF9FUSgmdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZTo6ZGVmYXVsdF9pbnN0
YW5jZSgpLAotICAgICAgICAgICAgJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigi
b3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiKSkpOwotICBFWFBFQ1RfRVEoJnVuaXR0ZXN0OjpGb3Jl
aWduTWVzc2FnZTo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAgICAgICAgJnJlZmxlY3Rpb24t
PkdldE1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlIikpKTsKLSAg
RVhQRUNUX0VRKCZ1bml0dGVzdF9pbXBvcnQ6OkltcG9ydE1lc3NhZ2U6OmRlZmF1bHRfaW5zdGFu
Y2UoKSwKLSAgICAgICAgICAgICZyZWZsZWN0aW9uLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIEYoIm9w
dGlvbmFsX2ltcG9ydF9tZXNzYWdlIikpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvblRlc3QsIEFjY2Vzc29ycykgewotICAvLyBTZXQgZXZlcnkgZmllbGQgdG8gYSB1bmlx
dWUgdmFsdWUgdGhlbiBnbyBiYWNrIGFuZCBjaGVjayBhbGwgdGhvc2UKLSAgLy8gdmFsdWVzLgot
ICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIFRlc3RVdGlsOjpSZWZsZWN0aW9u
VGVzdGVyIHJlZmxlY3Rpb25fdGVzdGVyKAotICAgIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRl
c2NyaXB0b3IoKSk7Ci0KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU2V0QWxsRmllbGRzVmlhUmVmbGVj
dGlvbigmbWVzc2FnZSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZSk7
Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4cGVjdEFsbEZpZWxkc1NldFZpYVJlZmxlY3Rpb24obWVz
c2FnZSk7Ci0KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuTW9kaWZ5UmVwZWF0ZWRGaWVsZHNWaWFSZWZs
ZWN0aW9uKCZtZXNzYWdlKTsKLSAgVGVzdFV0aWw6OkV4cGVjdFJlcGVhdGVkRmllbGRzTW9kaWZp
ZWQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBH
ZXRTdHJpbmdSZWZlcmVuY2UpIHsKLSAgLy8gVGVzdCB0aGF0IEdldFN0cmluZ1JlZmVyZW5jZSgp
IHJldHVybnMgdGhlIHVuZGVybHlpbmcgc3RyaW5nIHdoZW4gaXQgaXMKLSAgLy8gYSBub3JtYWwg
c3RyaW5nIGZpZWxkLgotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIG1lc3Nh
Z2Uuc2V0X29wdGlvbmFsX3N0cmluZygiZm9vIik7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX3N0
cmluZygiZm9vIik7Ci0KLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2Uu
R2V0UmVmbGVjdGlvbigpOwotICBzdHJpbmcgc2NyYXRjaDsKLQotICBFWFBFQ1RfRVEoJm1lc3Nh
Z2Uub3B0aW9uYWxfc3RyaW5nKCksCi0gICAgICAmcmVmbGVjdGlvbi0+R2V0U3RyaW5nUmVmZXJl
bmNlKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3N0cmluZyIpLCAmc2NyYXRjaCkpCi0gICAgPDwgIkZv
ciBzaW1wbGUgc3RyaW5nIGZpZWxkcywgR2V0U3RyaW5nUmVmZXJlbmNlKCkgc2hvdWxkIHJldHVy
biBhICIKLSAgICAgICAicmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIHN0cmluZy4iOwotICBF
WFBFQ1RfRVEoJm1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nKDApLAotICAgICAgJnJlZmxlY3Rpb24t
PkdldFJlcGVhdGVkU3RyaW5nUmVmZXJlbmNlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3N0cmluZyIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICZzY3Jh
dGNoKSkKLSAgICA8PCAiRm9yIHNpbXBsZSBzdHJpbmcgZmllbGRzLCBHZXRSZXBlYXRlZFN0cmlu
Z1JlZmVyZW5jZSgpIHNob3VsZCByZXR1cm4gIgotICAgICAgICJhIHJlZmVyZW5jZSB0byB0aGUg
dW5kZXJseWluZyBzdHJpbmcuIjsKLX0KLQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0
aW9uVGVzdCwgRGVmYXVsdHNBZnRlckNsZWFyKSB7Ci0gIC8vIENoZWNrIHRoYXQgYWZ0ZXIgc2V0
dGluZyBhbGwgZmllbGRzIGFuZCB0aGVuIGNsZWFyaW5nLCBnZXR0aW5nIGFuCi0gIC8vIGVtYmVk
ZGVkIG1lc3NhZ2UgZG9lcyBOT1QgcmV0dXJuIHRoZSBkZWZhdWx0IGluc3RhbmNlLgotICB1bml0
dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVy
IHJlZmxlY3Rpb25fdGVzdGVyKAotICAgIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRlc2NyaXB0
b3IoKSk7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbWVzc2FnZSk7Ci0gIG1lc3NhZ2Uu
Q2xlYXIoKTsKLQotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS5HZXRS
ZWZsZWN0aW9uKCk7Ci0KLSAgRVhQRUNUX05FKCZ1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpPcHRp
b25hbEdyb3VwOjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmcmVmbGVjdGlvbi0+
R2V0TWVzc2FnZShtZXNzYWdlLCBGKCJvcHRpb25hbGdyb3VwIikpKTsKLSAgRVhQRUNUX05FKCZ1
bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlOjpkZWZhdWx0X2luc3RhbmNlKCks
Ci0gICAgICAgICAgICAmcmVmbGVjdGlvbi0+R2V0TWVzc2FnZShtZXNzYWdlLCBGKCJvcHRpb25h
bF9uZXN0ZWRfbWVzc2FnZSIpKSk7Ci0gIEVYUEVDVF9ORSgmdW5pdHRlc3Q6OkZvcmVpZ25NZXNz
YWdlOjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmcmVmbGVjdGlvbi0+R2V0TWVz
c2FnZShtZXNzYWdlLCBGKCJvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UiKSkpOwotICBFWFBFQ1Rf
TkUoJnVuaXR0ZXN0X2ltcG9ydDo6SW1wb3J0TWVzc2FnZTo6ZGVmYXVsdF9pbnN0YW5jZSgpLAot
ICAgICAgICAgICAgJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxf
aW1wb3J0X21lc3NhZ2UiKSkpOwotfQotCi0KLVRFU1QoR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b25UZXN0LCBTd2FwKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTE7Ci0gIHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTI7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxk
cygmbWVzc2FnZTEpOwotCi0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdl
MS5HZXRSZWZsZWN0aW9uKCk7Ci0gIHJlZmxlY3Rpb24tPlN3YXAoJm1lc3NhZ2UxLCAmbWVzc2Fn
ZTIpOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RDbGVhcihtZXNzYWdlMSk7Ci0gIFRlc3RVdGlsOjpF
eHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZTIpOwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VS
ZWZsZWN0aW9uVGVzdCwgU3dhcFdpdGhCb3RoU2V0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlw
ZXMgbWVzc2FnZTE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTI7Ci0KLSAgVGVz
dFV0aWw6OlNldEFsbEZpZWxkcygmbWVzc2FnZTEpOwotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRz
KCZtZXNzYWdlMik7Ci0gIFRlc3RVdGlsOjpNb2RpZnlSZXBlYXRlZEZpZWxkcygmbWVzc2FnZTIp
OwotCi0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlMS5HZXRSZWZsZWN0
aW9uKCk7Ci0gIHJlZmxlY3Rpb24tPlN3YXAoJm1lc3NhZ2UxLCAmbWVzc2FnZTIpOwotCi0gIFRl
c3RVdGlsOjpFeHBlY3RSZXBlYXRlZEZpZWxkc01vZGlmaWVkKG1lc3NhZ2UxKTsKLSAgVGVzdFV0
aWw6OkV4cGVjdEFsbEZpZWxkc1NldChtZXNzYWdlMik7Ci0KLSAgbWVzc2FnZTEuc2V0X29wdGlv
bmFsX2ludDMyKDUzMjgxOSk7Ci0KLSAgcmVmbGVjdGlvbi0+U3dhcCgmbWVzc2FnZTEsICZtZXNz
YWdlMik7Ci0KLSAgRVhQRUNUX0VRKDUzMjgxOSwgbWVzc2FnZTIub3B0aW9uYWxfaW50MzIoKSk7
Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBTd2FwRXh0ZW5zaW9u
cykgewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTE7Ci0gIHVuaXR0ZXN0
OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlMjsKLQotICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5z
aW9ucygmbWVzc2FnZTEpOwotCi0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNz
YWdlMS5HZXRSZWZsZWN0aW9uKCk7Ci0gIHJlZmxlY3Rpb24tPlN3YXAoJm1lc3NhZ2UxLCAmbWVz
c2FnZTIpOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RFeHRlbnNpb25zQ2xlYXIobWVzc2FnZTEpOwot
ICBUZXN0VXRpbDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlMik7Ci19Ci0KLVRFU1Qo
R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBTd2FwVW5rbm93bikgewotICB1bml0dGVz
dDo6VGVzdEVtcHR5TWVzc2FnZSBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0KLSAgbWVzc2FnZTEubXV0
YWJsZV91bmtub3duX2ZpZWxkcygpLT5BZGRWYXJpbnQoMTIzNCwgMSk7Ci0KLSAgRVhQRUNUX0VR
KDEsIG1lc3NhZ2UxLnVua25vd25fZmllbGRzKCkuZmllbGRfY291bnQoKSk7Ci0gIEVYUEVDVF9F
USgwLCBtZXNzYWdlMi51bmtub3duX2ZpZWxkcygpLmZpZWxkX2NvdW50KCkpOwotICBjb25zdCBS
ZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZTEuR2V0UmVmbGVjdGlvbigpOwotICByZWZs
ZWN0aW9uLT5Td2FwKCZtZXNzYWdlMSwgJm1lc3NhZ2UyKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UxLnVua25vd25fZmllbGRzKCkuZmllbGRfY291bnQoKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNz
YWdlMi51bmtub3duX2ZpZWxkcygpLmZpZWxkX2NvdW50KCkpOwotfQotCi1URVNUKEdlbmVyYXRl
ZE1lc3NhZ2VSZWZsZWN0aW9uVGVzdCwgU3dhcEZpZWxkcykgewotICB1bml0dGVzdDo6VGVzdEFs
bFR5cGVzIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLSAgbWVzc2FnZTEuc2V0X29wdGlvbmFsX2RvdWJs
ZSgxMi4zKTsKLSAgbWVzc2FnZTEubXV0YWJsZV9yZXBlYXRlZF9pbnQzMigpLT5BZGQoMTApOwot
ICBtZXNzYWdlMS5tdXRhYmxlX3JlcGVhdGVkX2ludDMyKCktPkFkZCgyMCk7Ci0KLSAgbWVzc2Fn
ZTIuc2V0X29wdGlvbmFsX3N0cmluZygiaGVsbG8iKTsKLSAgbWVzc2FnZTIubXV0YWJsZV9yZXBl
YXRlZF9pbnQ2NCgpLT5BZGQoMzApOwotCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3Iq
PiBmaWVsZHM7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBtZXNzYWdlMS5HZXRE
ZXNjcmlwdG9yKCk7Ci0gIGZpZWxkcy5wdXNoX2JhY2soZGVzY3JpcHRvci0+RmluZEZpZWxkQnlO
YW1lKCJvcHRpb25hbF9kb3VibGUiKSk7Ci0gIGZpZWxkcy5wdXNoX2JhY2soZGVzY3JpcHRvci0+
RmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9pbnQzMiIpKTsKLSAgZmllbGRzLnB1c2hfYmFjayhk
ZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX3N0cmluZyIpKTsKLSAgZmllbGRz
LnB1c2hfYmFjayhkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX3VpbnQ2NCIp
KTsKLQotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZTEuR2V0UmVmbGVj
dGlvbigpOwotICByZWZsZWN0aW9uLT5Td2FwRmllbGRzKCZtZXNzYWdlMSwgJm1lc3NhZ2UyLCBm
aWVsZHMpOwotCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdlMS5oYXNfb3B0aW9uYWxfZG91YmxlKCkp
OwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZTEucmVwZWF0ZWRfaW50MzJfc2l6ZSgpKTsKLSAgRVhQ
RUNUX1RSVUUobWVzc2FnZTEuaGFzX29wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKCJo
ZWxsbyIsIG1lc3NhZ2UxLm9wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UxLnJlcGVhdGVkX2ludDY0X3NpemUoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlMS5oYXNf
b3B0aW9uYWxfdWludDY0KCkpOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UyLmhhc19vcHRpb25h
bF9kb3VibGUoKSk7Ci0gIEVYUEVDVF9FUSgxMi4zLCBtZXNzYWdlMi5vcHRpb25hbF9kb3VibGUo
KSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlMi5yZXBlYXRlZF9pbnQzMl9zaXplKCkpOwotICBF
WFBFQ1RfRVEoMTAsIG1lc3NhZ2UyLnJlcGVhdGVkX2ludDMyKDApKTsKLSAgRVhQRUNUX0VRKDIw
LCBtZXNzYWdlMi5yZXBlYXRlZF9pbnQzMigxKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlMi5o
YXNfb3B0aW9uYWxfc3RyaW5nKCkpOwotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZTIucmVwZWF0ZWRf
aW50NjRfc2l6ZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UyLmhhc19vcHRpb25hbF91aW50
NjQoKSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBTd2FwRmll
bGRzQWxsKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTE7Ci0gIHVuaXR0ZXN0
OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTI7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbWVz
c2FnZTIpOwotCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIGNv
bnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlMS5HZXRSZWZsZWN0aW9uKCk7Ci0g
IHJlZmxlY3Rpb24tPkxpc3RGaWVsZHMobWVzc2FnZTIsICZmaWVsZHMpOwotICByZWZsZWN0aW9u
LT5Td2FwRmllbGRzKCZtZXNzYWdlMSwgJm1lc3NhZ2UyLCBmaWVsZHMpOwotCi0gIFRlc3RVdGls
OjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZTEpOwotICBUZXN0VXRpbDo6RXhwZWN0Q2xlYXIo
bWVzc2FnZTIpOwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uVGVzdCwgU3dh
cEZpZWxkc0FsbEV4dGVuc2lvbikgewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVz
c2FnZTE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlMjsKLQotICBUZXN0
VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucygmbWVzc2FnZTEpOwotCi0gIHZlY3Rvcjxjb25zdCBGaWVs
ZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBt
ZXNzYWdlMS5HZXRSZWZsZWN0aW9uKCk7Ci0gIHJlZmxlY3Rpb24tPkxpc3RGaWVsZHMobWVzc2Fn
ZTEsICZmaWVsZHMpOwotICByZWZsZWN0aW9uLT5Td2FwRmllbGRzKCZtZXNzYWdlMSwgJm1lc3Nh
Z2UyLCBmaWVsZHMpOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RFeHRlbnNpb25zQ2xlYXIobWVzc2Fn
ZTEpOwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlMik7Ci19Ci0K
LVRFU1QoR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBTd2FwT25lb2YpIHsKLSAgdW5p
dHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTEsIG1lc3NhZ2UyOwotICBUZXN0VXRpbDo6U2V0T25l
b2YxKCZtZXNzYWdlMSk7Ci0KLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3Nh
Z2UxLkdldFJlZmxlY3Rpb24oKTsKLSAgcmVmbGVjdGlvbi0+U3dhcCgmbWVzc2FnZTEsICZtZXNz
YWdlMik7Ci0KLSAgVGVzdFV0aWw6OkV4cGVjdE9uZW9mQ2xlYXIobWVzc2FnZTEpOwotICBUZXN0
VXRpbDo6RXhwZWN0T25lb2ZTZXQxKG1lc3NhZ2UyKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvblRlc3QsIFN3YXBPbmVvZkJvdGhTZXQpIHsKLSAgdW5pdHRlc3Q6OlRlc3RP
bmVvZjIgbWVzc2FnZTEsIG1lc3NhZ2UyOwotICBUZXN0VXRpbDo6U2V0T25lb2YxKCZtZXNzYWdl
MSk7Ci0gIFRlc3RVdGlsOjpTZXRPbmVvZjIoJm1lc3NhZ2UyKTsKLQotICBjb25zdCBSZWZsZWN0
aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZTEuR2V0UmVmbGVjdGlvbigpOwotICByZWZsZWN0aW9u
LT5Td2FwKCZtZXNzYWdlMSwgJm1lc3NhZ2UyKTsKLQotICBUZXN0VXRpbDo6RXhwZWN0T25lb2ZT
ZXQyKG1lc3NhZ2UxKTsKLSAgVGVzdFV0aWw6OkV4cGVjdE9uZW9mU2V0MShtZXNzYWdlMik7Ci19
Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBTd2FwRmllbGRzT25lb2Yp
IHsKLSAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTEsIG1lc3NhZ2UyOwotICBUZXN0VXRp
bDo6U2V0T25lb2YxKCZtZXNzYWdlMSk7Ci0KLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRv
cio+IGZpZWxkczsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IG1lc3NhZ2UxLkdl
dERlc2NyaXB0b3IoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLT5maWVsZF9j
b3VudCgpOyBpKyspIHsKLSAgICBmaWVsZHMucHVzaF9iYWNrKGRlc2NyaXB0b3ItPmZpZWxkKGkp
KTsKLSAgfQotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZTEuR2V0UmVm
bGVjdGlvbigpOwotICByZWZsZWN0aW9uLT5Td2FwRmllbGRzKCZtZXNzYWdlMSwgJm1lc3NhZ2Uy
LCBmaWVsZHMpOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RPbmVvZkNsZWFyKG1lc3NhZ2UxKTsKLSAg
VGVzdFV0aWw6OkV4cGVjdE9uZW9mU2V0MShtZXNzYWdlMik7Ci19Ci0KLVRFU1QoR2VuZXJhdGVk
TWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBSZW1vdmVMYXN0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxs
VHlwZXMgbWVzc2FnZTsKLSAgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXIgcmVmbGVjdGlvbl90
ZXN0ZXIoCi0gICAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6ZGVzY3JpcHRvcigpKTsKLQotICBU
ZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtZXNzYWdlKTsKLQotICByZWZsZWN0aW9uX3Rlc3Rlci5S
ZW1vdmVMYXN0UmVwZWF0ZWRzVmlhUmVmbGVjdGlvbigmbWVzc2FnZSk7Ci0KLSAgVGVzdFV0aWw6
OkV4cGVjdExhc3RSZXBlYXRlZHNSZW1vdmVkKG1lc3NhZ2UpOwotfQotCi1URVNUKEdlbmVyYXRl
ZE1lc3NhZ2VSZWZsZWN0aW9uVGVzdCwgUmVtb3ZlTGFzdEV4dGVuc2lvbnMpIHsKLSAgdW5pdHRl
c3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2U7Ci0gIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVz
dGVyIHJlZmxlY3Rpb25fdGVzdGVyKAotICAgIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9uczo6
ZGVzY3JpcHRvcigpKTsKLQotICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucygmbWVzc2FnZSk7
Ci0KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuUmVtb3ZlTGFzdFJlcGVhdGVkc1ZpYVJlZmxlY3Rpb24o
Jm1lc3NhZ2UpOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RMYXN0UmVwZWF0ZWRFeHRlbnNpb25zUmVt
b3ZlZChtZXNzYWdlKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvblRlc3Qs
IFJlbGVhc2VMYXN0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsKLSAgY29u
c3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IG1lc3NhZ2UuR2V0RGVzY3JpcHRvcigpOwotICBU
ZXN0VXRpbDo6UmVmbGVjdGlvblRlc3RlciByZWZsZWN0aW9uX3Rlc3RlcihkZXNjcmlwdG9yKTsK
LQotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtZXNzYWdlKTsKLQotICByZWZsZWN0aW9uX3Rl
c3Rlci5SZWxlYXNlTGFzdFJlcGVhdGVkc1ZpYVJlZmxlY3Rpb24oJm1lc3NhZ2UsIGZhbHNlKTsK
LQotICBUZXN0VXRpbDo6RXhwZWN0TGFzdFJlcGVhdGVkc1JlbGVhc2VkKG1lc3NhZ2UpOwotCi0g
IC8vIE5vdyB0ZXN0IHRoYXQgd2UgYWN0dWFsbHkgcmVsZWFzZSB0aGUgcmlnaHQgbWVzc2FnZS4K
LSAgbWVzc2FnZS5DbGVhcigpOwotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtZXNzYWdlKTsK
LSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX3NpemUoKSk7
Ci0gIGNvbnN0IHByb3RvYnVmX3VuaXR0ZXN0OjpGb3JlaWduTWVzc2FnZSogZXhwZWN0ZWQgPQot
ICAgICAgbWVzc2FnZS5tdXRhYmxlX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgxKTsKLSAgZ29v
Z2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxNZXNzYWdlPiByZWxlYXNlZChtZXNzYWdlLkdldFJl
ZmxlY3Rpb24oKS0+UmVsZWFzZUxhc3QoCi0gICAgICAmbWVzc2FnZSwgZGVzY3JpcHRvci0+Rmlu
ZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UiKSkpOwotICBFWFBFQ1RfRVEo
ZXhwZWN0ZWQsIHJlbGVhc2VkLmdldCgpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvblRlc3QsIFJlbGVhc2VMYXN0RXh0ZW5zaW9ucykgewotICB1bml0dGVzdDo6VGVzdEFs
bEV4dGVuc2lvbnMgbWVzc2FnZTsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IG1l
c3NhZ2UuR2V0RGVzY3JpcHRvcigpOwotICBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3RlciByZWZs
ZWN0aW9uX3Rlc3RlcihkZXNjcmlwdG9yKTsKLQotICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9u
cygmbWVzc2FnZSk7Ci0KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuUmVsZWFzZUxhc3RSZXBlYXRlZHNW
aWFSZWZsZWN0aW9uKCZtZXNzYWdlLCB0cnVlKTsKLQotICBUZXN0VXRpbDo6RXhwZWN0TGFzdFJl
cGVhdGVkRXh0ZW5zaW9uc1JlbGVhc2VkKG1lc3NhZ2UpOwotCi0gIC8vIE5vdyB0ZXN0IHRoYXQg
d2UgYWN0dWFsbHkgcmVsZWFzZSB0aGUgcmlnaHQgbWVzc2FnZS4KLSAgbWVzc2FnZS5DbGVhcigp
OwotICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucygmbWVzc2FnZSk7Ci0gIEFTU0VSVF9FUSgy
LCBtZXNzYWdlLkV4dGVuc2lvblNpemUoCi0gICAgICB1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWln
bl9tZXNzYWdlX2V4dGVuc2lvbikpOwotICBjb25zdCBwcm90b2J1Zl91bml0dGVzdDo6Rm9yZWln
bk1lc3NhZ2UqIGV4cGVjdGVkID0gbWVzc2FnZS5NdXRhYmxlRXh0ZW5zaW9uKAotICAgICAgdW5p
dHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24sIDEpOwotICBnb29nbGU6
OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IHJlbGVhc2VkKG1lc3NhZ2UuR2V0UmVmbGVj
dGlvbigpLT5SZWxlYXNlTGFzdCgKLSAgICAgICZtZXNzYWdlLCBkZXNjcmlwdG9yLT5maWxlKCkt
PkZpbmRFeHRlbnNpb25CeU5hbWUoCi0gICAgICAgICAgICAgICAgICAgICJyZXBlYXRlZF9mb3Jl
aWduX21lc3NhZ2VfZXh0ZW5zaW9uIikpKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkLCByZWxlYXNl
ZC5nZXQoKSk7Ci0KLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvblRlc3QsIFN3
YXBSZXBlYXRlZEVsZW1lbnRzKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsK
LSAgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXIgcmVmbGVjdGlvbl90ZXN0ZXIoCi0gICAgdW5p
dHRlc3Q6OlRlc3RBbGxUeXBlczo6ZGVzY3JpcHRvcigpKTsKLQotICBUZXN0VXRpbDo6U2V0QWxs
RmllbGRzKCZtZXNzYWdlKTsKLQotICAvLyBTd2FwIGFuZCB0ZXN0IHRoYXQgZmllbGRzIGFyZSBh
bGwgc3dhcHBlZC4KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU3dhcFJlcGVhdGVkc1ZpYVJlZmxlY3Rp
b24oJm1lc3NhZ2UpOwotICBUZXN0VXRpbDo6RXhwZWN0UmVwZWF0ZWRzU3dhcHBlZChtZXNzYWdl
KTsKLQotICAvLyBTd2FwIGJhY2sgYW5kIHRlc3QgdGhhdCBmaWVsZHMgYXJlIGFsbCBiYWNrIHRv
IG9yaWdpbmFsIHZhbHVlcy4KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU3dhcFJlcGVhdGVkc1ZpYVJl
ZmxlY3Rpb24oJm1lc3NhZ2UpOwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KG1lc3Nh
Z2UpOwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uVGVzdCwgU3dhcFJlcGVh
dGVkRWxlbWVudHNFeHRlbnNpb24pIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1l
c3NhZ2U7Ci0gIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyIHJlZmxlY3Rpb25fdGVzdGVyKAot
ICAgIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9uczo6ZGVzY3JpcHRvcigpKTsKLQotICBUZXN0
VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucygmbWVzc2FnZSk7Ci0KLSAgLy8gU3dhcCBhbmQgdGVzdCB0
aGF0IGZpZWxkcyBhcmUgYWxsIHN3YXBwZWQuCi0gIHJlZmxlY3Rpb25fdGVzdGVyLlN3YXBSZXBl
YXRlZHNWaWFSZWZsZWN0aW9uKCZtZXNzYWdlKTsKLSAgVGVzdFV0aWw6OkV4cGVjdFJlcGVhdGVk
RXh0ZW5zaW9uc1N3YXBwZWQobWVzc2FnZSk7Ci0KLSAgLy8gU3dhcCBiYWNrIGFuZCB0ZXN0IHRo
YXQgZmllbGRzIGFyZSBhbGwgYmFjayB0byBvcmlnaW5hbCB2YWx1ZXMuCi0gIHJlZmxlY3Rpb25f
dGVzdGVyLlN3YXBSZXBlYXRlZHNWaWFSZWZsZWN0aW9uKCZtZXNzYWdlKTsKLSAgVGVzdFV0aWw6
OkV4cGVjdEFsbEV4dGVuc2lvbnNTZXQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVz
c2FnZVJlZmxlY3Rpb25UZXN0LCBFeHRlbnNpb25zKSB7Ci0gIC8vIFNldCBldmVyeSBleHRlbnNp
b24gdG8gYSB1bmlxdWUgdmFsdWUgdGhlbiBnbyBiYWNrIGFuZCBjaGVjayBhbGwgdGhvc2UKLSAg
Ly8gdmFsdWVzLgotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTsKLSAgVGVz
dFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXIgcmVmbGVjdGlvbl90ZXN0ZXIoCi0gICAgdW5pdHRlc3Q6
OlRlc3RBbGxFeHRlbnNpb25zOjpkZXNjcmlwdG9yKCkpOwotCi0gIHJlZmxlY3Rpb25fdGVzdGVy
LlNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rpb24oJm1lc3NhZ2UpOwotICBUZXN0VXRpbDo6RXhwZWN0
QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0QWxs
RmllbGRzU2V0VmlhUmVmbGVjdGlvbihtZXNzYWdlKTsKLQotICByZWZsZWN0aW9uX3Rlc3Rlci5N
b2RpZnlSZXBlYXRlZEZpZWxkc1ZpYVJlZmxlY3Rpb24oJm1lc3NhZ2UpOwotICBUZXN0VXRpbDo6
RXhwZWN0UmVwZWF0ZWRFeHRlbnNpb25zTW9kaWZpZWQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoR2Vu
ZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBGaW5kRXh0ZW5zaW9uVHlwZUJ5TnVtYmVyKSB7
Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPQotICAgIHVuaXR0ZXN0OjpUZXN0QWxs
RXh0ZW5zaW9uczo6ZGVmYXVsdF9pbnN0YW5jZSgpLkdldFJlZmxlY3Rpb24oKTsKLQotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGV4dGVuc2lvbjEgPQotICAgIHVuaXR0ZXN0OjpUZXN0QWxsRXh0
ZW5zaW9uczo6ZGVzY3JpcHRvcigpLT5maWxlKCktPkZpbmRFeHRlbnNpb25CeU5hbWUoCi0gICAg
ICAib3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZXh0ZW5zaW9uMiA9Ci0gICAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zOjpkZXNjcmlwdG9y
KCktPmZpbGUoKS0+RmluZEV4dGVuc2lvbkJ5TmFtZSgKLSAgICAgICJyZXBlYXRlZF9zdHJpbmdf
ZXh0ZW5zaW9uIik7Ci0KLSAgRVhQRUNUX0VRKGV4dGVuc2lvbjEsCi0gICAgICAgICAgICByZWZs
ZWN0aW9uLT5GaW5kS25vd25FeHRlbnNpb25CeU51bWJlcihleHRlbnNpb24xLT5udW1iZXIoKSkp
OwotICBFWFBFQ1RfRVEoZXh0ZW5zaW9uMiwKLSAgICAgICAgICAgIHJlZmxlY3Rpb24tPkZpbmRL
bm93bkV4dGVuc2lvbkJ5TnVtYmVyKGV4dGVuc2lvbjItPm51bWJlcigpKSk7Ci0KLSAgLy8gTm9u
LWV4aXN0ZW50IGV4dGVuc2lvbi4KLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+RmluZEtub3du
RXh0ZW5zaW9uQnlOdW1iZXIoNjIzNDEpID09IE5VTEwpOwotCi0gIC8vIEV4dGVuc2lvbnMgb2Yg
VGVzdEFsbEV4dGVuc2lvbnMgc2hvdWxkIG5vdCBzaG93IHVwIGFzIGV4dGVuc2lvbnMgb2YKLSAg
Ly8gb3RoZXIgdHlwZXMuCi0gIEVYUEVDVF9UUlVFKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRl
ZmF1bHRfaW5zdGFuY2UoKS5HZXRSZWZsZWN0aW9uKCktPgotICAgICAgICAgICAgICBGaW5kS25v
d25FeHRlbnNpb25CeU51bWJlcihleHRlbnNpb24xLT5udW1iZXIoKSkgPT0gTlVMTCk7Ci19Ci0K
LVRFU1QoR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb25UZXN0LCBGaW5kS25vd25FeHRlbnNpb25C
eU5hbWUpIHsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9Ci0gICAgdW5pdHRlc3Q6
OlRlc3RBbGxFeHRlbnNpb25zOjpkZWZhdWx0X2luc3RhbmNlKCkuR2V0UmVmbGVjdGlvbigpOwot
Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZXh0ZW5zaW9uMSA9Ci0gICAgdW5pdHRlc3Q6OlRl
c3RBbGxFeHRlbnNpb25zOjpkZXNjcmlwdG9yKCktPmZpbGUoKS0+RmluZEV4dGVuc2lvbkJ5TmFt
ZSgKLSAgICAgICJvcHRpb25hbF9pbnQzMl9leHRlbnNpb24iKTsKLSAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBleHRlbnNpb24yID0KLSAgICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnM6OmRl
c2NyaXB0b3IoKS0+ZmlsZSgpLT5GaW5kRXh0ZW5zaW9uQnlOYW1lKAotICAgICAgInJlcGVhdGVk
X3N0cmluZ19leHRlbnNpb24iKTsKLQotICBFWFBFQ1RfRVEoZXh0ZW5zaW9uMSwKLSAgICAgICAg
ICAgIHJlZmxlY3Rpb24tPkZpbmRLbm93bkV4dGVuc2lvbkJ5TmFtZShleHRlbnNpb24xLT5mdWxs
X25hbWUoKSkpOwotICBFWFBFQ1RfRVEoZXh0ZW5zaW9uMiwKLSAgICAgICAgICAgIHJlZmxlY3Rp
b24tPkZpbmRLbm93bkV4dGVuc2lvbkJ5TmFtZShleHRlbnNpb24yLT5mdWxsX25hbWUoKSkpOwot
Ci0gIC8vIE5vbi1leGlzdGVudCBleHRlbnNpb24uCi0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24t
PkZpbmRLbm93bkV4dGVuc2lvbkJ5TmFtZSgibm9fc3VjaF9leHQiKSA9PSBOVUxMKTsKLQotICAv
LyBFeHRlbnNpb25zIG9mIFRlc3RBbGxFeHRlbnNpb25zIHNob3VsZCBub3Qgc2hvdyB1cCBhcyBl
eHRlbnNpb25zIG9mCi0gIC8vIG90aGVyIHR5cGVzLgotICBFWFBFQ1RfVFJVRSh1bml0dGVzdDo6
VGVzdEFsbFR5cGVzOjpkZWZhdWx0X2luc3RhbmNlKCkuR2V0UmVmbGVjdGlvbigpLT4KLSAgICAg
ICAgICAgICAgRmluZEtub3duRXh0ZW5zaW9uQnlOYW1lKGV4dGVuc2lvbjEtPmZ1bGxfbmFtZSgp
KSA9PSBOVUxMKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvblRlc3QsIFNl
dEFsbG9jYXRlZE1lc3NhZ2VUZXN0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgZnJvbV9t
ZXNzYWdlMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBmcm9tX21lc3NhZ2UyOwotICB1bml0
dGVzdDo6VGVzdEFsbFR5cGVzIHRvX21lc3NhZ2U7Ci0gIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVz
dGVyIHJlZmxlY3Rpb25fdGVzdGVyKAotICAgIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRlc2Ny
aXB0b3IoKSk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLlNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rpb24o
JmZyb21fbWVzc2FnZTEpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5TZXRBbGxGaWVsZHNWaWFSZWZs
ZWN0aW9uKCZmcm9tX21lc3NhZ2UyKTsKLQotICAvLyBCZWZvcmUgbW92aW5nIGZpZWxkcywgd2Ug
ZXhwZWN0IHRoZSBuZXN0ZWQgbWVzc2FnZXMgdG8gYmUgTlVMTC4KLSAgcmVmbGVjdGlvbl90ZXN0
ZXIuRXhwZWN0TWVzc2FnZXNSZWxlYXNlZFZpYVJlZmxlY3Rpb24oCi0gICAgICAmdG9fbWVzc2Fn
ZSwgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OklTX05VTEwpOwotCi0gIC8vIEFmdGVyIGZp
ZWxkcyBhcmUgbW92ZWQgd2Ugc2hvdWxkIGdldCBub24tTlVMTCByZWxlYXNlcy4KLSAgcmVmbGVj
dGlvbl90ZXN0ZXIuU2V0QWxsb2NhdGVkT3B0aW9uYWxNZXNzYWdlRmllbGRzVG9NZXNzYWdlVmlh
UmVmbGVjdGlvbigKLSAgICAgICZmcm9tX21lc3NhZ2UxLCAmdG9fbWVzc2FnZSk7Ci0gIHJlZmxl
Y3Rpb25fdGVzdGVyLkV4cGVjdE1lc3NhZ2VzUmVsZWFzZWRWaWFSZWZsZWN0aW9uKAotICAgICAg
JnRvX21lc3NhZ2UsIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyOjpOT1RfTlVMTCk7Ci0KLSAg
Ly8gQW5vdGhlciBtb3ZlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBTZXRBbGxvY2F0ZWQgc2V2
ZXJhbCB0aW1lcy4KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU2V0QWxsb2NhdGVkT3B0aW9uYWxNZXNz
YWdlRmllbGRzVG9NZXNzYWdlVmlhUmVmbGVjdGlvbigKLSAgICAgICZmcm9tX21lc3NhZ2UyLCAm
dG9fbWVzc2FnZSk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4cGVjdE1lc3NhZ2VzUmVsZWFzZWRW
aWFSZWZsZWN0aW9uKAotICAgICAgJnRvX21lc3NhZ2UsIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVz
dGVyOjpOT1RfTlVMTCk7Ci0KLSAgLy8gQWZ0ZXIgU2V0QWxsb2NhdGVkT3B0aW9uYWxNZXNzYWdl
RmllbGRzVG9OdWxsVmlhUmVmbGVjdGlvbigpIHdlIGV4cGVjdCB0aGUKLSAgLy8gcmVsZWFzZXMg
dG8gYmUgTlVMTCBhZ2Fpbi4KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU2V0QWxsb2NhdGVkT3B0aW9u
YWxNZXNzYWdlRmllbGRzVG9OdWxsVmlhUmVmbGVjdGlvbigKLSAgICAgICZ0b19tZXNzYWdlKTsK
LSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0TWVzc2FnZXNSZWxlYXNlZFZpYVJlZmxlY3Rpb24o
Ci0gICAgICAmdG9fbWVzc2FnZSwgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OklTX05VTEwp
OwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uVGVzdCwgU2V0QWxsb2NhdGVk
RXh0ZW5zaW9uTWVzc2FnZVRlc3QpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIGZy
b21fbWVzc2FnZTE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBmcm9tX21lc3NhZ2Uy
OwotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgdG9fbWVzc2FnZTsKLSAgVGVzdFV0aWw6
OlJlZmxlY3Rpb25UZXN0ZXIgcmVmbGVjdGlvbl90ZXN0ZXIoCi0gICAgdW5pdHRlc3Q6OlRlc3RB
bGxFeHRlbnNpb25zOjpkZXNjcmlwdG9yKCkpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5TZXRBbGxG
aWVsZHNWaWFSZWZsZWN0aW9uKCZmcm9tX21lc3NhZ2UxKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIu
U2V0QWxsRmllbGRzVmlhUmVmbGVjdGlvbigmZnJvbV9tZXNzYWdlMik7Ci0KLSAgLy8gQmVmb3Jl
IG1vdmluZyBmaWVsZHMsIHdlIGV4cGVjdCB0aGUgbmVzdGVkIG1lc3NhZ2VzIHRvIGJlIE5VTEwu
Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4cGVjdE1lc3NhZ2VzUmVsZWFzZWRWaWFSZWZsZWN0aW9u
KAotICAgICAgJnRvX21lc3NhZ2UsIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyOjpJU19OVUxM
KTsKLQotICAvLyBBZnRlciBmaWVsZHMgYXJlIG1vdmVkIHdlIHNob3VsZCBnZXQgbm9uLU5VTEwg
cmVsZWFzZXMuCi0gIHJlZmxlY3Rpb25fdGVzdGVyLlNldEFsbG9jYXRlZE9wdGlvbmFsTWVzc2Fn
ZUZpZWxkc1RvTWVzc2FnZVZpYVJlZmxlY3Rpb24oCi0gICAgICAmZnJvbV9tZXNzYWdlMSwgJnRv
X21lc3NhZ2UpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5FeHBlY3RNZXNzYWdlc1JlbGVhc2VkVmlh
UmVmbGVjdGlvbigKLSAgICAgICZ0b19tZXNzYWdlLCBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3Rl
cjo6Tk9UX05VTEwpOwotCi0gIC8vIEFub3RoZXIgbW92ZSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBj
YW4gU2V0QWxsb2NhdGVkIHNldmVyYWwgdGltZXMuCi0gIHJlZmxlY3Rpb25fdGVzdGVyLlNldEFs
bG9jYXRlZE9wdGlvbmFsTWVzc2FnZUZpZWxkc1RvTWVzc2FnZVZpYVJlZmxlY3Rpb24oCi0gICAg
ICAmZnJvbV9tZXNzYWdlMiwgJnRvX21lc3NhZ2UpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5FeHBl
Y3RNZXNzYWdlc1JlbGVhc2VkVmlhUmVmbGVjdGlvbigKLSAgICAgICZ0b19tZXNzYWdlLCBUZXN0
VXRpbDo6UmVmbGVjdGlvblRlc3Rlcjo6Tk9UX05VTEwpOwotCi0gIC8vIEFmdGVyIFNldEFsbG9j
YXRlZE9wdGlvbmFsTWVzc2FnZUZpZWxkc1RvTnVsbFZpYVJlZmxlY3Rpb24oKSB3ZSBleHBlY3Qg
dGhlCi0gIC8vIHJlbGVhc2VzIHRvIGJlIE5VTEwgYWdhaW4uCi0gIHJlZmxlY3Rpb25fdGVzdGVy
LlNldEFsbG9jYXRlZE9wdGlvbmFsTWVzc2FnZUZpZWxkc1RvTnVsbFZpYVJlZmxlY3Rpb24oCi0g
ICAgICAmdG9fbWVzc2FnZSk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4cGVjdE1lc3NhZ2VzUmVs
ZWFzZWRWaWFSZWZsZWN0aW9uKAotICAgICAgJnRvX21lc3NhZ2UsIFRlc3RVdGlsOjpSZWZsZWN0
aW9uVGVzdGVyOjpJU19OVUxMKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlv
blRlc3QsIEFkZFJlcGVhdGVkTWVzc2FnZSkgewotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1l
c3NhZ2U7Ci0KLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVm
bGVjdGlvbigpOwotICBjb25zdCBSZWZsZWN0aW9uKiBuZXN0ZWRfcmVmbGVjdGlvbiA9Ci0gICAg
ICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlOjpkZWZhdWx0X2luc3RhbmNl
KCkuR2V0UmVmbGVjdGlvbigpOwotCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbmVzdGVkX2Ji
ID0KLSAgICAgIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2U6OmRlc2NyaXB0
b3IoKS0+RmluZEZpZWxkQnlOYW1lKAotICAgICAgICAgICJiYiIpOwotCi0gIE1lc3NhZ2UqIG5l
c3RlZCA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UoCi0gICAgICAmbWVzc2FnZSwgRigicmVwZWF0
ZWRfbmVzdGVkX21lc3NhZ2UiKSk7Ci0gIG5lc3RlZF9yZWZsZWN0aW9uLT5TZXRJbnQzMihuZXN0
ZWQsIG5lc3RlZF9iYiwgMTEpOwotCi0gIEVYUEVDVF9FUSgxMSwgbWVzc2FnZS5yZXBlYXRlZF9u
ZXN0ZWRfbWVzc2FnZSgwKS5iYigpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlUmVmbGVj
dGlvblRlc3QsIE11dGFibGVSZXBlYXRlZE1lc3NhZ2UpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxU
eXBlcyBtZXNzYWdlOwotCi0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdl
LkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogbmVzdGVkX3JlZmxlY3Rpb24g
PQotICAgICAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZTo6ZGVmYXVsdF9p
bnN0YW5jZSgpLkdldFJlZmxlY3Rpb24oKTsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG5l
c3RlZF9iYiA9Ci0gICAgICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlOjpk
ZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgKLSAgICAgICAgICAiYmIiKTsKLQotICBtZXNz
YWdlLmFkZF9yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSgpLT5zZXRfYmIoMTIpOwotCi0gIE1lc3Nh
Z2UqIG5lc3RlZCA9IHJlZmxlY3Rpb24tPk11dGFibGVSZXBlYXRlZE1lc3NhZ2UoCi0gICAgICAm
bWVzc2FnZSwgRigicmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UiKSwgMCk7Ci0gIEVYUEVDVF9FUSgx
MiwgbmVzdGVkX3JlZmxlY3Rpb24tPkdldEludDMyKCpuZXN0ZWQsIG5lc3RlZF9iYikpOwotICBu
ZXN0ZWRfcmVmbGVjdGlvbi0+U2V0SW50MzIobmVzdGVkLCBuZXN0ZWRfYmIsIDEzKTsKLSAgRVhQ
RUNUX0VRKDEzLCBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKDApLmJiKCkpOwotfQot
Ci1URVNUKEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uVGVzdCwgQWRkQWxsb2NhdGVkTWVzc2Fn
ZSkgewotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0KLSAgY29uc3QgUmVmbGVj
dGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotCi0gIHVuaXR0ZXN0
OjpUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UqIG5lc3RlZCA9Ci0gICAgICBuZXcgdW5pdHRl
c3Q6OlRlc3RBbGxUeXBlczo6TmVzdGVkTWVzc2FnZSgpOwotICBuZXN0ZWQtPnNldF9iYigxMSk7
Ci0gIHJlZmxlY3Rpb24tPkFkZEFsbG9jYXRlZE1lc3NhZ2UoJm1lc3NhZ2UsIEYoInJlcGVhdGVk
X25lc3RlZF9tZXNzYWdlIiksIG5lc3RlZCk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLnJlcGVh
dGVkX25lc3RlZF9tZXNzYWdlX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgxMSwgbWVzc2FnZS5yZXBl
YXRlZF9uZXN0ZWRfbWVzc2FnZSgwKS5iYigpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvblRlc3QsIExpc3RGaWVsZHNPbmVPZikgewotICB1bml0dGVzdDo6VGVzdE9uZW9m
MiBtZXNzYWdlOwotICBUZXN0VXRpbDo6U2V0T25lb2YxKCZtZXNzYWdlKTsKLQotICBjb25zdCBS
ZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0gIHZlY3Rv
cjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIHJlZmxlY3Rpb24tPkxpc3RGaWVs
ZHMobWVzc2FnZSwgJmZpZWxkcyk7Ci0gIEVYUEVDVF9FUSg0LCBmaWVsZHMuc2l6ZSgpKTsKLX0K
LQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvblRlc3QsIE9uZW9mKSB7Ci0gIHVuaXR0
ZXN0OjpUZXN0T25lb2YyIG1lc3NhZ2U7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3Ig
PSBtZXNzYWdlLkdldERlc2NyaXB0b3IoKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlv
biA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotCi0gIC8vIENoZWNrIGRlZmF1bHQgdmFsdWVz
LgotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+R2V0SW50MzIoCi0gICAgICBtZXNzYWdlLCBk
ZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZvb19pbnQiKSkpOwotICBFWFBFQ1RfRVEoIiIs
IHJlZmxlY3Rpb24tPkdldFN0cmluZygKLSAgICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRG
aWVsZEJ5TmFtZSgiZm9vX3N0cmluZyIpKSk7Ci0gIEVYUEVDVF9FUSgiIiwgcmVmbGVjdGlvbi0+
R2V0U3RyaW5nKAotICAgICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJm
b29fY29yZCIpKSk7Ci0gIEVYUEVDVF9FUSgiIiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nKAotICAg
ICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJmb29fc3RyaW5nX3BpZWNl
IikpKTsKLSAgRVhQRUNUX0VRKCIiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcoCi0gICAgICBtZXNz
YWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZvb19ieXRlcyIpKSk7Ci0gIEVYUEVD
VF9FUSh1bml0dGVzdDo6VGVzdE9uZW9mMjo6Rk9PLCByZWZsZWN0aW9uLT5HZXRFbnVtKAotICAg
ICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJmb29fZW51bSIpKS0+bnVt
YmVyKCkpOwotICBFWFBFQ1RfRVEoJnVuaXR0ZXN0OjpUZXN0T25lb2YyOjpOZXN0ZWRNZXNzYWdl
OjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmcmVmbGVjdGlvbi0+R2V0TWVzc2Fn
ZSgKLSAgICAgICAgICAgICAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUo
ImZvb19tZXNzYWdlIikpKTsKLSAgRVhQRUNUX0VRKCZ1bml0dGVzdDo6VGVzdE9uZW9mMjo6Rm9v
R3JvdXA6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZyZWZsZWN0aW9uLT5HZXRN
ZXNzYWdlKAotICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5
TmFtZSgiZm9vZ3JvdXAiKSkpOwotICBFWFBFQ1RfTkUoJnVuaXR0ZXN0OjpUZXN0T25lb2YyOjpG
b29Hcm91cDo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAgICAgICAgJnJlZmxlY3Rpb24tPkdl
dE1lc3NhZ2UoCi0gICAgICAgICAgICAgICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxk
QnlOYW1lKCJmb29fbGF6eV9tZXNzYWdlIikpKTsKLSAgRVhQRUNUX0VRKDUsIHJlZmxlY3Rpb24t
PkdldEludDMyKAotICAgICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJi
YXJfaW50IikpKTsKLSAgRVhQRUNUX0VRKCJTVFJJTkciLCByZWZsZWN0aW9uLT5HZXRTdHJpbmco
Ci0gICAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImJhcl9zdHJpbmci
KSkpOwotICBFWFBFQ1RfRVEoIkNPUkQiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcoCi0gICAgICBt
ZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImJhcl9jb3JkIikpKTsKLSAgRVhQ
RUNUX0VRKCJTUElFQ0UiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcoCi0gICAgICBtZXNzYWdlLCBk
ZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImJhcl9zdHJpbmdfcGllY2UiKSkpOwotICBFWFBF
Q1RfRVEoIkJZVEVTIiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nKAotICAgICAgbWVzc2FnZSwgZGVz
Y3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJiYXJfYnl0ZXMiKSkpOwotICBFWFBFQ1RfRVEodW5p
dHRlc3Q6OlRlc3RPbmVvZjI6OkJBUiwgcmVmbGVjdGlvbi0+R2V0RW51bSgKLSAgICAgIG1lc3Nh
Z2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiYmFyX2VudW0iKSktPm51bWJlcigpKTsK
LQotICAvLyBDaGVjayBTZXQgZnVuY3Rpb25zLgotICByZWZsZWN0aW9uLT5TZXRJbnQzMigKLSAg
ICAgICZtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZvb19pbnQiKSwgMTIz
KTsKLSAgRVhQRUNUX0VRKDEyMywgcmVmbGVjdGlvbi0+R2V0SW50MzIoCi0gICAgICBtZXNzYWdl
LCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZvb19pbnQiKSkpOwotICByZWZsZWN0aW9u
LT5TZXRTdHJpbmcoCi0gICAgICAmbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1l
KCJmb29fc3RyaW5nIiksICJhYmMiKTsKLSAgRVhQRUNUX0VRKCJhYmMiLCByZWZsZWN0aW9uLT5H
ZXRTdHJpbmcoCi0gICAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZv
b19zdHJpbmciKSkpOwotICByZWZsZWN0aW9uLT5TZXRTdHJpbmcoCi0gICAgICAmbWVzc2FnZSwg
ZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJmb29fYnl0ZXMiKSwgImJ5dGVzIik7Ci0gIEVY
UEVDVF9FUSgiYnl0ZXMiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcoCi0gICAgICBtZXNzYWdlLCBk
ZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZvb19ieXRlcyIpKSk7Ci0gIHJlZmxlY3Rpb24t
PlNldFN0cmluZygKLSAgICAgICZtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUo
ImJhcl9jb3JkIiksICJjaGFuZ2VfY29yZCIpOwotICBFWFBFQ1RfRVEoImNoYW5nZV9jb3JkIiwg
cmVmbGVjdGlvbi0+R2V0U3RyaW5nKAotICAgICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZp
ZWxkQnlOYW1lKCJiYXJfY29yZCIpKSk7Ci0gIHJlZmxlY3Rpb24tPlNldFN0cmluZygKLSAgICAg
ICZtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImJhcl9zdHJpbmdfcGllY2Ui
KSwKLSAgICAgICJjaGFuZ2Vfc3BpZWNlIik7Ci0gIEVYUEVDVF9FUSgiY2hhbmdlX3NwaWVjZSIs
IHJlZmxlY3Rpb24tPkdldFN0cmluZygKLSAgICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRG
aWVsZEJ5TmFtZSgiYmFyX3N0cmluZ19waWVjZSIpKSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVz
c2FnZVJlZmxlY3Rpb25UZXN0LCBTZXRBbGxvY2F0ZWRPbmVvZk1lc3NhZ2VUZXN0KSB7Ci0gIHVu
aXR0ZXN0OjpUZXN0T25lb2YyIGZyb21fbWVzc2FnZTE7Ci0gIHVuaXR0ZXN0OjpUZXN0T25lb2Yy
IGZyb21fbWVzc2FnZTI7Ci0gIHVuaXR0ZXN0OjpUZXN0T25lb2YyIHRvX21lc3NhZ2U7Ci0gIGNv
bnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB1bml0dGVzdDo6VGVzdE9uZW9mMjo6ZGVzY3Jp
cHRvcigpOwotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gdG9fbWVzc2FnZS5HZXRS
ZWZsZWN0aW9uKCk7Ci0KLSAgTWVzc2FnZSogcmVsZWFzZWQgPSByZWZsZWN0aW9uLT5SZWxlYXNl
TWVzc2FnZSgKLSAgICAgICZ0b19tZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUo
ImZvb19sYXp5X21lc3NhZ2UiKSk7Ci0gIEVYUEVDVF9UUlVFKHJlbGVhc2VkID09IE5VTEwpOwot
ICByZWxlYXNlZCA9IHJlZmxlY3Rpb24tPlJlbGVhc2VNZXNzYWdlKAotICAgICAgJnRvX21lc3Nh
Z2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiZm9vX21lc3NhZ2UiKSk7Ci0gIEVYUEVD
VF9UUlVFKHJlbGVhc2VkID09IE5VTEwpOwotCi0gIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVy
OjpTZXRPbmVvZlZpYVJlZmxlY3Rpb24oJmZyb21fbWVzc2FnZTEpOwotICBUZXN0VXRpbDo6UmVm
bGVjdGlvblRlc3Rlcjo6RXhwZWN0T25lb2ZTZXRWaWFSZWZsZWN0aW9uKGZyb21fbWVzc2FnZTEp
OwotCi0gIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyOjoKLSAgICAgIFNldEFsbG9jYXRlZE9w
dGlvbmFsTWVzc2FnZUZpZWxkc1RvTWVzc2FnZVZpYVJlZmxlY3Rpb24oCi0gICAgICAgICAgJmZy
b21fbWVzc2FnZTEsICZ0b19tZXNzYWdlKTsKLSAgY29uc3QgTWVzc2FnZSYgc3ViX21lc3NhZ2Ug
PSByZWZsZWN0aW9uLT5HZXRNZXNzYWdlKAotICAgICAgdG9fbWVzc2FnZSwgZGVzY3JpcHRvci0+
RmluZEZpZWxkQnlOYW1lKCJmb29fbGF6eV9tZXNzYWdlIikpOwotICByZWxlYXNlZCA9IHJlZmxl
Y3Rpb24tPlJlbGVhc2VNZXNzYWdlKAotICAgICAgJnRvX21lc3NhZ2UsIGRlc2NyaXB0b3ItPkZp
bmRGaWVsZEJ5TmFtZSgiZm9vX2xhenlfbWVzc2FnZSIpKTsKLSAgRVhQRUNUX1RSVUUocmVsZWFz
ZWQgIT0gTlVMTCk7Ci0gIEVYUEVDVF9FUSgmc3ViX21lc3NhZ2UsIHJlbGVhc2VkKTsKLSAgZGVs
ZXRlIHJlbGVhc2VkOwotCi0gIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyOjpTZXRPbmVvZlZp
YVJlZmxlY3Rpb24oJmZyb21fbWVzc2FnZTIpOwotCi0gIHJlZmxlY3Rpb24tPk11dGFibGVNZXNz
YWdlKAotICAgICAgJmZyb21fbWVzc2FnZTIsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgi
Zm9vX21lc3NhZ2UiKSk7Ci0KLSAgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OgotICAgICAg
U2V0QWxsb2NhdGVkT3B0aW9uYWxNZXNzYWdlRmllbGRzVG9NZXNzYWdlVmlhUmVmbGVjdGlvbigK
LSAgICAgICAgICAmZnJvbV9tZXNzYWdlMiwgJnRvX21lc3NhZ2UpOwotCi0gIGNvbnN0IE1lc3Nh
Z2UmIHN1Yl9tZXNzYWdlMiA9IHJlZmxlY3Rpb24tPkdldE1lc3NhZ2UoCi0gICAgICB0b19tZXNz
YWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZvb19tZXNzYWdlIikpOwotICByZWxl
YXNlZCA9IHJlZmxlY3Rpb24tPlJlbGVhc2VNZXNzYWdlKAotICAgICAgJnRvX21lc3NhZ2UsIGRl
c2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiZm9vX21lc3NhZ2UiKSk7Ci0gIEVYUEVDVF9UUlVF
KHJlbGVhc2VkICE9IE5VTEwpOwotICBFWFBFQ1RfRVEoJnN1Yl9tZXNzYWdlMiwgcmVsZWFzZWQp
OwotICBkZWxldGUgcmVsZWFzZWQ7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b25UZXN0LCBSZWxlYXNlTWVzc2FnZVRlc3QpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBt
ZXNzYWdlOwotICBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3RlciByZWZsZWN0aW9uX3Rlc3RlcigK
LSAgICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpkZXNjcmlwdG9yKCkpOwotCi0gIC8vIFdoZW4g
bm90aGluZyBpcyBzZXQsIHdlIGV4cGVjdCBhbGwgcmVsZWFzZWQgbWVzc2FnZXMgdG8gYmUgTlVM
TC4KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0TWVzc2FnZXNSZWxlYXNlZFZpYVJlZmxlY3Rp
b24oCi0gICAgICAmbWVzc2FnZSwgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OklTX05VTEwp
OwotCi0gIC8vIEFmdGVyIGZpZWxkcyBhcmUgc2V0IHdlIHNob3VsZCBnZXQgbm9uLU5VTEwgcmVs
ZWFzZXMuCi0gIHJlZmxlY3Rpb25fdGVzdGVyLlNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rpb24oJm1l
c3NhZ2UpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5FeHBlY3RNZXNzYWdlc1JlbGVhc2VkVmlhUmVm
bGVjdGlvbigKLSAgICAgICZtZXNzYWdlLCBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3Rlcjo6Tk9U
X05VTEwpOwotCi0gIC8vIEFmdGVyIENsZWFyKCkgd2UgbWF5IG9yIG1heSBub3QgZ2V0IGEgbWVz
c2FnZSBmcm9tIFJlbGVhc2VNZXNzYWdlKCkuCi0gIC8vIFRoaXMgaXMgaW1wbGVtZW50YXRpb24g
c3BlY2lmaWMuCi0gIHJlZmxlY3Rpb25fdGVzdGVyLlNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rpb24o
Jm1lc3NhZ2UpOwotICBtZXNzYWdlLkNsZWFyKCk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4cGVj
dE1lc3NhZ2VzUmVsZWFzZWRWaWFSZWZsZWN0aW9uKAotICAgICAgJm1lc3NhZ2UsIFRlc3RVdGls
OjpSZWZsZWN0aW9uVGVzdGVyOjpDQU5fQkVfTlVMTCk7Ci0KLSAgLy8gVGVzdCBhIGRpZmZlcmVu
dCBjb2RlIHBhdGggZm9yIHNldHRpbmcgYWZ0ZXIgcmVsZWFzaW5nLgotICBUZXN0VXRpbDo6U2V0
QWxsRmllbGRzKCZtZXNzYWdlKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEZpZWxkc1NldChtZXNz
YWdlKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvblRlc3QsIFJlbGVhc2VF
eHRlbnNpb25NZXNzYWdlVGVzdCkgewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVz
c2FnZTsKLSAgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXIgcmVmbGVjdGlvbl90ZXN0ZXIoCi0g
ICAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zOjpkZXNjcmlwdG9yKCkpOwotCi0gIC8vIFdo
ZW4gbm90aGluZyBpcyBzZXQsIHdlIGV4cGVjdCBhbGwgcmVsZWFzZWQgbWVzc2FnZXMgdG8gYmUg
TlVMTC4KLSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0TWVzc2FnZXNSZWxlYXNlZFZpYVJlZmxl
Y3Rpb24oCi0gICAgICAmbWVzc2FnZSwgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OklTX05V
TEwpOwotCi0gIC8vIEFmdGVyIGZpZWxkcyBhcmUgc2V0IHdlIHNob3VsZCBnZXQgbm9uLU5VTEwg
cmVsZWFzZXMuCi0gIHJlZmxlY3Rpb25fdGVzdGVyLlNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rpb24o
Jm1lc3NhZ2UpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5FeHBlY3RNZXNzYWdlc1JlbGVhc2VkVmlh
UmVmbGVjdGlvbigKLSAgICAgICZtZXNzYWdlLCBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3Rlcjo6
Tk9UX05VTEwpOwotCi0gIC8vIEFmdGVyIENsZWFyKCkgd2UgbWF5IG9yIG1heSBub3QgZ2V0IGEg
bWVzc2FnZSBmcm9tIFJlbGVhc2VNZXNzYWdlKCkuCi0gIC8vIFRoaXMgaXMgaW1wbGVtZW50YXRp
b24gc3BlY2lmaWMuCi0gIHJlZmxlY3Rpb25fdGVzdGVyLlNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rp
b24oJm1lc3NhZ2UpOwotICBtZXNzYWdlLkNsZWFyKCk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4
cGVjdE1lc3NhZ2VzUmVsZWFzZWRWaWFSZWZsZWN0aW9uKAotICAgICAgJm1lc3NhZ2UsIFRlc3RV
dGlsOjpSZWZsZWN0aW9uVGVzdGVyOjpDQU5fQkVfTlVMTCk7Ci0KLSAgLy8gVGVzdCBhIGRpZmZl
cmVudCBjb2RlIHBhdGggZm9yIHNldHRpbmcgYWZ0ZXIgcmVsZWFzaW5nLgotICBUZXN0VXRpbDo6
U2V0QWxsRXh0ZW5zaW9ucygmbWVzc2FnZSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxFeHRlbnNp
b25zU2V0KG1lc3NhZ2UpOwotfQotCi1URVNUKEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uVGVz
dCwgUmVsZWFzZU9uZW9mTWVzc2FnZVRlc3QpIHsKLSAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVz
c2FnZTsKLSAgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OlNldE9uZW9mVmlhUmVmbGVjdGlv
bigmbWVzc2FnZSk7Ci0KLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHVuaXR0ZXN0
OjpUZXN0T25lb2YyOjpkZXNjcmlwdG9yKCk7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rp
b24gPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgTWVzc2FnZSYgc3ViX21lc3Nh
Z2UgPSByZWZsZWN0aW9uLT5HZXRNZXNzYWdlKAotICAgICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+
RmluZEZpZWxkQnlOYW1lKCJmb29fbGF6eV9tZXNzYWdlIikpOwotICBNZXNzYWdlKiByZWxlYXNl
ZCA9IHJlZmxlY3Rpb24tPlJlbGVhc2VNZXNzYWdlKAotICAgICAgJm1lc3NhZ2UsIGRlc2NyaXB0
b3ItPkZpbmRGaWVsZEJ5TmFtZSgiZm9vX2xhenlfbWVzc2FnZSIpKTsKLQotICBFWFBFQ1RfVFJV
RShyZWxlYXNlZCAhPSBOVUxMKTsKLSAgRVhQRUNUX0VRKCZzdWJfbWVzc2FnZSwgcmVsZWFzZWQp
OwotICBkZWxldGUgcmVsZWFzZWQ7Ci0KLSAgcmVsZWFzZWQgPSByZWZsZWN0aW9uLT5SZWxlYXNl
TWVzc2FnZSgKLSAgICAgICZtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImZv
b19sYXp5X21lc3NhZ2UiKSk7Ci0gIEVYUEVDVF9UUlVFKHJlbGVhc2VkID09IE5VTEwpOwotfQot
Ci0jaWZkZWYgUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLQotVEVTVChHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvblRlc3QsIFVzYWdlRXJyb3JzKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMg
bWVzc2FnZTsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVm
bGVjdGlvbigpOwotICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gbWVzc2FnZS5HZXRE
ZXNjcmlwdG9yKCk7Ci0KLSNkZWZpbmUgZihOQU1FKSBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5h
bWUoTkFNRSkKLQotICAvLyBUZXN0aW5nIGV2ZXJ5IHNpbmdsZSBmYWlsdXJlIG1vZGUgd291bGQg
YmUgdG9vIG11Y2ggd29yay4gIExldCdzIGp1c3QKLSAgLy8gY2hlY2sgYSBmZXcuCi0gIEVYUEVD
VF9ERUFUSCgKLSAgICByZWZsZWN0aW9uLT5HZXRJbnQzMigKLSAgICAgIG1lc3NhZ2UsIGRlc2Ny
aXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfaW50NjQiKSksCi0gICAgIlByb3RvY29s
IEJ1ZmZlciByZWZsZWN0aW9uIHVzYWdlIGVycm9yOlxuIgotICAgICIgIE1ldGhvZCAgICAgIDog
Z29vZ2xlOjpwcm90b2J1Zjo6UmVmbGVjdGlvbjo6R2V0SW50MzJcbiIKLSAgICAiICBNZXNzYWdl
IHR5cGU6IHByb3RvYnVmX3VuaXR0ZXN0XFwuVGVzdEFsbFR5cGVzXG4iCi0gICAgIiAgRmllbGQg
ICAgICAgOiBwcm90b2J1Zl91bml0dGVzdFxcLlRlc3RBbGxUeXBlc1xcLm9wdGlvbmFsX2ludDY0
XG4iCi0gICAgIiAgUHJvYmxlbSAgICAgOiBGaWVsZCBpcyBub3QgdGhlIHJpZ2h0IHR5cGUgZm9y
IHRoaXMgbWVzc2FnZTpcbiIKLSAgICAiICAgIEV4cGVjdGVkICA6IENQUFRZUEVfSU5UMzJcbiIK
LSAgICAiICAgIEZpZWxkIHR5cGU6IENQUFRZUEVfSU5UNjQiKTsKLSAgRVhQRUNUX0RFQVRIKAot
ICAgIHJlZmxlY3Rpb24tPkdldEludDMyKAotICAgICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+Rmlu
ZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9pbnQzMiIpKSwKLSAgICAiUHJvdG9jb2wgQnVmZmVyIHJl
ZmxlY3Rpb24gdXNhZ2UgZXJyb3I6XG4iCi0gICAgIiAgTWV0aG9kICAgICAgOiBnb29nbGU6OnBy
b3RvYnVmOjpSZWZsZWN0aW9uOjpHZXRJbnQzMlxuIgotICAgICIgIE1lc3NhZ2UgdHlwZTogcHJv
dG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzXG4iCi0gICAgIiAgRmllbGQgICAgICAgOiBwcm90
b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMucmVwZWF0ZWRfaW50MzJcbiIKLSAgICAiICBQcm9i
bGVtICAgICA6IEZpZWxkIGlzIHJlcGVhdGVkOyB0aGUgbWV0aG9kIHJlcXVpcmVzIGEgc2luZ3Vs
YXIgZmllbGQuIik7Ci0gIEVYUEVDVF9ERUFUSCgKLSAgICByZWZsZWN0aW9uLT5HZXRJbnQzMigK
LSAgICAgIG1lc3NhZ2UsIHVuaXR0ZXN0OjpGb3JlaWduTWVzc2FnZTo6ZGVzY3JpcHRvcigpLT5G
aW5kRmllbGRCeU5hbWUoImMiKSksCi0gICAgIlByb3RvY29sIEJ1ZmZlciByZWZsZWN0aW9uIHVz
YWdlIGVycm9yOlxuIgotICAgICIgIE1ldGhvZCAgICAgIDogZ29vZ2xlOjpwcm90b2J1Zjo6UmVm
bGVjdGlvbjo6R2V0SW50MzJcbiIKLSAgICAiICBNZXNzYWdlIHR5cGU6IHByb3RvYnVmX3VuaXR0
ZXN0LlRlc3RBbGxUeXBlc1xuIgotICAgICIgIEZpZWxkICAgICAgIDogcHJvdG9idWZfdW5pdHRl
c3QuRm9yZWlnbk1lc3NhZ2UuY1xuIgotICAgICIgIFByb2JsZW0gICAgIDogRmllbGQgZG9lcyBu
b3QgbWF0Y2ggbWVzc2FnZSB0eXBlLiIpOwotICBFWFBFQ1RfREVBVEgoCi0gICAgcmVmbGVjdGlv
bi0+SGFzRmllbGQoCi0gICAgICBtZXNzYWdlLCB1bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2U6OmRl
c2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKCJjIikpLAotICAgICJQcm90b2NvbCBCdWZmZXIg
cmVmbGVjdGlvbiB1c2FnZSBlcnJvcjpcbiIKLSAgICAiICBNZXRob2QgICAgICA6IGdvb2dsZTo6
cHJvdG9idWY6OlJlZmxlY3Rpb246Okhhc0ZpZWxkXG4iCi0gICAgIiAgTWVzc2FnZSB0eXBlOiBw
cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXNcbiIKLSAgICAiICBGaWVsZCAgICAgICA6IHBy
b3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25NZXNzYWdlLmNcbiIKLSAgICAiICBQcm9ibGVtICAgICA6
IEZpZWxkIGRvZXMgbm90IG1hdGNoIG1lc3NhZ2UgdHlwZS4iKTsKLQotI3VuZGVmIGYKLX0KLQot
I2VuZGlmICAvLyBQUk9UT0JVRl9IQVNfREVBVEhfVEVTVAotCi0KLX0gIC8vIG5hbWVzcGFjZQot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfdXRpbC5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmNjCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzMzQwNTFhMDEzZTQwOThhZmVhNmVlZDM5OWE1NGNhYWUzMGFjNzI5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsODQg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjog
a2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQ
cm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFu
LCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNz
YWdlX3V0aWwuaD4KLQotI2luY2x1ZGUgPGxpbWl0cz4KLQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi1kb3VibGUgSW5m
aW5pdHkoKSB7Ci0gIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5
KCk7Ci19Ci1kb3VibGUgTmFOKCkgewotICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjpxdWlldF9OYU4oKTsKLX0KLQotY29uc3QgOjpzdGQ6OnN0cmluZyogZW1wdHlfc3RyaW5n
XzsKLUdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0UoZW1wdHlfc3RyaW5nX29uY2VfaW5pdF8p
OwotCi12b2lkIERlbGV0ZUVtcHR5U3RyaW5nKCkgewotICBkZWxldGUgZW1wdHlfc3RyaW5nXzsK
LX0KLQotdm9pZCBJbml0RW1wdHlTdHJpbmcoKSB7Ci0gIGVtcHR5X3N0cmluZ18gPSBuZXcgc3Ry
aW5nOwotICBPblNodXRkb3duKCZEZWxldGVFbXB0eVN0cmluZyk7Ci19Ci0KLWNvbnN0IDo6c3Rk
OjpzdHJpbmcmIEdldEVtcHR5U3RyaW5nKCkgewotICA6Omdvb2dsZTo6cHJvdG9idWY6Okdvb2ds
ZU9uY2VJbml0KCZlbXB0eV9zdHJpbmdfb25jZV9pbml0XywgJkluaXRFbXB0eVN0cmluZyk7Ci0g
IHJldHVybiBHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKTsKLX0KLQotCi1pbnQgU3RyaW5n
U3BhY2VVc2VkRXhjbHVkaW5nU2VsZihjb25zdCBzdHJpbmcmIHN0cikgewotICBjb25zdCB2b2lk
KiBzdGFydCA9ICZzdHI7Ci0gIGNvbnN0IHZvaWQqIGVuZCA9ICZzdHIgKyAxOwotICBpZiAoc3Rh
cnQgPD0gc3RyLmRhdGEoKSAmJiBzdHIuZGF0YSgpIDwgZW5kKSB7Ci0gICAgLy8gVGhlIHN0cmlu
ZydzIGRhdGEgaXMgc3RvcmVkIGluc2lkZSB0aGUgc3RyaW5nIG9iamVjdCBpdHNlbGYuCi0gICAg
cmV0dXJuIDA7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHN0ci5jYXBhY2l0eSgpOwotICB9Ci19
Ci0KLQotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2dlbmVyYXRlZF9tZXNzYWdlX3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRf
bWVzc2FnZV91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZjE4ZGE5NDBi
MzgzMTgwODk0MTExOGM1MTU2YTIzNTNkN2EwYmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdl
X3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9u
IFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5
Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gVGhp
cyBmaWxlIGNvbnRhaW5zIG1pc2NlbGxhbmVvdXMgaGVscGVyIGNvZGUgdXNlZCBieSBnZW5lcmF0
ZWQgY29kZSAtLQotLy8gaW5jbHVkaW5nIGxpdGUgdHlwZXMgLS0gYnV0IHdoaWNoIHNob3VsZCBu
b3QgYmUgdXNlZCBkaXJlY3RseSBieSB1c2Vycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZf
R0VORVJBVEVEX01FU1NBR0VfVVRJTF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0dFTkVS
QVRFRF9NRVNTQUdFX1VUSUxfSF9fCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxz
dHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLWNsYXNzIEFyZW5hOwotbmFtZXNwYWNlIGlvIHsg
Y2xhc3MgQ29kZWRJbnB1dFN0cmVhbTsgfQotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0KLS8v
IEFubm90YXRpb24gZm9yIHRoZSBjb21waWxlciB0byBlbWl0IGEgZGVwcmVjYXRpb24gbWVzc2Fn
ZSBpZiBhIGZpZWxkIG1hcmtlZAotLy8gd2l0aCBvcHRpb24gJ2RlcHJlY2F0ZWQ9dHJ1ZScgaXMg
dXNlZCBpbiB0aGUgY29kZSwgb3IgZm9yIG90aGVyIHRoaW5ncyBpbgotLy8gZ2VuZXJhdGVkIGNv
ZGUgd2hpY2ggYXJlIGRlcHJlY2F0ZWQuCi0vLwotLy8gRm9yIGludGVybmFsIHVzZSBpbiB0aGUg
cGIuY2MgZmlsZXMsIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGFyZSBzdXBwcmVzc2VkCi0vLyB0aGVy
ZS4KLSN1bmRlZiBERVBSRUNBVEVEX1BST1RPQlVGX0ZJRUxECi0jZGVmaW5lIFBST1RPQlVGX0RF
UFJFQ0FURUQKLQotI2RlZmluZSBQUk9UT0JVRl9ERVBSRUNBVEVEX0FUVFIKLQotCi0vLyBDb25z
dGFudHMgZm9yIHNwZWNpYWwgZmxvYXRpbmcgcG9pbnQgdmFsdWVzLgotTElCUFJPVE9CVUZfRVhQ
T1JUIGRvdWJsZSBJbmZpbml0eSgpOwotTElCUFJPVE9CVUZfRVhQT1JUIGRvdWJsZSBOYU4oKTsK
LQotLy8gVE9ETyhqaWVsdW8pOiBDaGFuZ2UgdG8gdGVtcGxhdGUuIFdlIGhhdmUgdHJpZWQgdG8g
dXNlIHRlbXBsYXRlLAotLy8gYnV0IGl0IGNhdXNlcyBuZXQvcnBjL3B5dGhvbjpycGN1dGlsX3Rl
c3QgZmFpbCAodGhlIGVtcHR5IHN0cmluZyB3aWxsCi0vLyBpbml0IHR3aWNlKS4gSXQgbWF5IHJl
bGF0ZWQgdG8gc3dpZy4gQ2hhbmdlIHRvIHRlbXBsYXRlIGFmdGVyIHdlCi0vLyBmb3VuZCB0aGUg
c29sdXRpb24uCi0KLS8vIERlZmF1bHQgZW1wdHkgc3RyaW5nIG9iamVjdC4gRG9uJ3QgdXNlIHRo
ZSBwb2ludGVyIGRpcmVjdGx5LiBJbnN0ZWFkLCBjYWxsCi0vLyBHZXRFbXB0eVN0cmluZygpIHRv
IGdldCB0aGUgcmVmZXJlbmNlLgotTElCUFJPVE9CVUZfRVhQT1JUIGV4dGVybiBjb25zdCA6OnN0
ZDo6c3RyaW5nKiBlbXB0eV9zdHJpbmdfOwotTElCUFJPVE9CVUZfRVhQT1JUIGV4dGVybiBQcm90
b2J1Zk9uY2VUeXBlIGVtcHR5X3N0cmluZ19vbmNlX2luaXRfOwotTElCUFJPVE9CVUZfRVhQT1JU
IHZvaWQgSW5pdEVtcHR5U3RyaW5nKCk7Ci0KLQotTElCUFJPVE9CVUZfRVhQT1JUIGlubGluZSBj
b25zdCA6OnN0ZDo6c3RyaW5nJiBHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSB7Ci0gIGFz
c2VydChlbXB0eV9zdHJpbmdfICE9IE5VTEwpOwotICByZXR1cm4gKmVtcHR5X3N0cmluZ187Ci19
Ci0KLUxJQlBST1RPQlVGX0VYUE9SVCBjb25zdCA6OnN0ZDo6c3RyaW5nJiBHZXRFbXB0eVN0cmlu
ZygpOwotCi1MSUJQUk9UT0JVRl9FWFBPUlQgaW50IFN0cmluZ1NwYWNlVXNlZEV4Y2x1ZGluZ1Nl
bGYoY29uc3Qgc3RyaW5nJiBzdHIpOwotCi0KLS8vIFRydWUgaWYgSXNJbml0aWFsaXplZCgpIGlz
IHRydWUgZm9yIGFsbCBlbGVtZW50cyBvZiB0LiAgVHlwZSBpcyBleHBlY3RlZAotLy8gdG8gYmUg
YSBSZXBlYXRlZFB0ckZpZWxkPHNvbWUgbWVzc2FnZSB0eXBlPi4gIEl0J3MgdXNlZnVsIHRvIGhh
dmUgdGhpcwotLy8gaGVscGVyIGhlcmUgdG8ga2VlcCB0aGUgcHJvdG9idWYgY29tcGlsZXIgZnJv
bSBldmVyIGhhdmluZyB0byBlbWl0IGxvb3BzIGluCi0vLyBJc0luaXRpYWxpemVkKCkgbWV0aG9k
cy4gIFdlIHdhbnQgdGhlIEMrKyBjb21waWxlciB0byBpbmxpbmUgdGhpcyBvciBub3QKLS8vIGFz
IGl0IHNlZXMgZml0LgotdGVtcGxhdGUgPGNsYXNzIFR5cGU+IGJvb2wgQWxsQXJlSW5pdGlhbGl6
ZWQoY29uc3QgVHlwZSYgdCkgewotICBmb3IgKGludCBpID0gdC5zaXplKCk7IC0taSA+PSAwOyAp
IHsKLSAgICBpZiAoIXQuR2V0KGkpLklzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuIGZhbHNlOwotICB9
Ci0gIHJldHVybiB0cnVlOwotfQotCi1jbGFzcyBBcmVuYVN0cmluZzsKLQotLy8gUmVhZCBhIGxl
bmd0aCAodmFyaW50MzIpLCBmb2xsb3dlZCBieSBhIHN0cmluZywgZnJvbSAqaW5wdXQuICBSZXR1
cm4gYQotLy8gcG9pbnRlciB0byBhIGNvcHkgb2YgdGhlIHN0cmluZyB0aGF0IHJlc2lkZXMgaW4g
KmFyZW5hLiAgUmVxdWlyZXMgYm90aAotLy8gYXJncyB0byBiZSBub24tTlVMTC4gIElmIHNvbWV0
aGluZyBnb2VzIHdyb25nIHdoaWxlIHJlYWRpbmcgdGhlIGRhdGEKLS8vIHRoZW4gTlVMTCBpcyBy
ZXR1cm5lZCAoZS5nLiwgaW5wdXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHZhbGlkIHZhcmludCku
Ci1BcmVuYVN0cmluZyogUmVhZEFyZW5hU3RyaW5nKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNv
ZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5h
bAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNl
bmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX1VUSUxfSF9fCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDgzNTRjMWY5Y2VmNWQ0NjU0Mzg3M2UyMjk4NTJiZmZiMTc4NDcyZS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8v
Y29kZWRfc3RyZWFtLmNjCisrKyAvZGV2L251bGwKQEAgLTEsOTE3ICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29t
IChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBk
ZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8v
Ci0vLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGhlYXZpbHkgb3B0aW1pemVkIHRvIG1ha2UgcmVh
ZHMgYW5kIHdyaXRlcwotLy8gb2Ygc21hbGwgdmFsdWVzIChlc3BlY2lhbGx5IHZhcmludHMpIGFz
IGZhc3QgYXMgcG9zc2libGUuICBJbgotLy8gcGFydGljdWxhciwgd2Ugb3B0aW1pemUgZm9yIHRo
ZSBjb21tb24gY2FzZSB0aGF0IGEgcmVhZCBvciBhIHdyaXRlCi0vLyB3aWxsIG5vdCBjcm9zcyB0
aGUgZW5kIG9mIHRoZSBidWZmZXIsIHNpbmNlIHdlIGNhbiBhdm9pZCBhIGxvdAotLy8gb2YgYnJh
bmNoaW5nIGluIHRoaXMgY2FzZS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9jb2Rl
ZF9zdHJlYW1faW5sLmg+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHV0aWxpdHk+
Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9f
Y29weV9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYXJlbmEuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
c3RsX3V0aWwuaD4KLQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci1uYW1lc3BhY2UgaW8gewotCi1uYW1lc3BhY2UgewotCi1zdGF0aWMgY29uc3QgaW50IGtNYXhW
YXJpbnRCeXRlcyA9IDEwOwotc3RhdGljIGNvbnN0IGludCBrTWF4VmFyaW50MzJCeXRlcyA9IDU7
Ci0KLQotaW5saW5lIGJvb2wgTmV4dE5vbkVtcHR5KFplcm9Db3B5SW5wdXRTdHJlYW0qIGlucHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqKiBkYXRhLCBpbnQqIHNpemUp
IHsKLSAgYm9vbCBzdWNjZXNzOwotICBkbyB7Ci0gICAgc3VjY2VzcyA9IGlucHV0LT5OZXh0KGRh
dGEsIHNpemUpOwotICB9IHdoaWxlIChzdWNjZXNzICYmICpzaXplID09IDApOwotICByZXR1cm4g
c3VjY2VzczsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLS8vIENvZGVkSW5wdXRTdHJlYW0gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQ29kZWRJ
bnB1dFN0cmVhbTo6fkNvZGVkSW5wdXRTdHJlYW0oKSB7Ci0gIGlmIChpbnB1dF8gIT0gTlVMTCkg
ewotICAgIEJhY2tVcElucHV0VG9DdXJyZW50UG9zaXRpb24oKTsKLSAgfQotCi0gIGlmICh0b3Rh
bF9ieXRlc193YXJuaW5nX3RocmVzaG9sZF8gPT0gLTIpIHsKLSAgICBHT09HTEVfTE9HKFdBUk5J
TkcpIDw8ICJUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgd2FzICIgPDwgdG90YWxfYnl0
ZXNfcmVhZF87Ci0gIH0KLX0KLQotLy8gU3RhdGljLgotaW50IENvZGVkSW5wdXRTdHJlYW06OmRl
ZmF1bHRfcmVjdXJzaW9uX2xpbWl0XyA9IDEwMDsKLQotCi12b2lkIENvZGVkT3V0cHV0U3RyZWFt
OjpFbmFibGVBbGlhc2luZyhib29sIGVuYWJsZWQpIHsKLSAgYWxpYXNpbmdfZW5hYmxlZF8gPSBl
bmFibGVkICYmIG91dHB1dF8tPkFsbG93c0FsaWFzaW5nKCk7Ci19Ci0KLXZvaWQgQ29kZWRJbnB1
dFN0cmVhbTo6QmFja1VwSW5wdXRUb0N1cnJlbnRQb3NpdGlvbigpIHsKLSAgaW50IGJhY2t1cF9i
eXRlcyA9IEJ1ZmZlclNpemUoKSArIGJ1ZmZlcl9zaXplX2FmdGVyX2xpbWl0XyArIG92ZXJmbG93
X2J5dGVzXzsKLSAgaWYgKGJhY2t1cF9ieXRlcyA+IDApIHsKLSAgICBpbnB1dF8tPkJhY2tVcChi
YWNrdXBfYnl0ZXMpOwotCi0gICAgLy8gdG90YWxfYnl0ZXNfcmVhZF8gZG9lc24ndCBpbmNsdWRl
IG92ZXJmbG93X2J5dGVzXy4KLSAgICB0b3RhbF9ieXRlc19yZWFkXyAtPSBCdWZmZXJTaXplKCkg
KyBidWZmZXJfc2l6ZV9hZnRlcl9saW1pdF87Ci0gICAgYnVmZmVyX2VuZF8gPSBidWZmZXJfOwot
ICAgIGJ1ZmZlcl9zaXplX2FmdGVyX2xpbWl0XyA9IDA7Ci0gICAgb3ZlcmZsb3dfYnl0ZXNfID0g
MDsKLSAgfQotfQotCi1pbmxpbmUgdm9pZCBDb2RlZElucHV0U3RyZWFtOjpSZWNvbXB1dGVCdWZm
ZXJMaW1pdHMoKSB7Ci0gIGJ1ZmZlcl9lbmRfICs9IGJ1ZmZlcl9zaXplX2FmdGVyX2xpbWl0XzsK
LSAgaW50IGNsb3Nlc3RfbGltaXQgPSBzdGQ6Om1pbihjdXJyZW50X2xpbWl0XywgdG90YWxfYnl0
ZXNfbGltaXRfKTsKLSAgaWYgKGNsb3Nlc3RfbGltaXQgPCB0b3RhbF9ieXRlc19yZWFkXykgewot
ICAgIC8vIFRoZSBsaW1pdCBwb3NpdGlvbiBpcyBpbiB0aGUgY3VycmVudCBidWZmZXIuICBXZSBt
dXN0IGFkanVzdAotICAgIC8vIHRoZSBidWZmZXIgc2l6ZSBhY2NvcmRpbmdseS4KLSAgICBidWZm
ZXJfc2l6ZV9hZnRlcl9saW1pdF8gPSB0b3RhbF9ieXRlc19yZWFkXyAtIGNsb3Nlc3RfbGltaXQ7
Ci0gICAgYnVmZmVyX2VuZF8gLT0gYnVmZmVyX3NpemVfYWZ0ZXJfbGltaXRfOwotICB9IGVsc2Ug
ewotICAgIGJ1ZmZlcl9zaXplX2FmdGVyX2xpbWl0XyA9IDA7Ci0gIH0KLX0KLQotQ29kZWRJbnB1
dFN0cmVhbTo6TGltaXQgQ29kZWRJbnB1dFN0cmVhbTo6UHVzaExpbWl0KGludCBieXRlX2xpbWl0
KSB7Ci0gIC8vIEN1cnJlbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0
aGUgc3RyZWFtLgotICBpbnQgY3VycmVudF9wb3NpdGlvbiA9IEN1cnJlbnRQb3NpdGlvbigpOwot
Ci0gIExpbWl0IG9sZF9saW1pdCA9IGN1cnJlbnRfbGltaXRfOwotCi0gIC8vIHNlY3VyaXR5OiBi
eXRlX2xpbWl0IGlzIHBvc3NpYmx5IGV2aWwsIHNvIGNoZWNrIGZvciBuZWdhdGl2ZSB2YWx1ZXMK
LSAgLy8gYW5kIG92ZXJmbG93LgotICBpZiAoYnl0ZV9saW1pdCA+PSAwICYmCi0gICAgICBieXRl
X2xpbWl0IDw9IElOVF9NQVggLSBjdXJyZW50X3Bvc2l0aW9uKSB7Ci0gICAgY3VycmVudF9saW1p
dF8gPSBjdXJyZW50X3Bvc2l0aW9uICsgYnl0ZV9saW1pdDsKLSAgfSBlbHNlIHsKLSAgICAvLyBO
ZWdhdGl2ZSBvciBvdmVyZmxvdy4KLSAgICBjdXJyZW50X2xpbWl0XyA9IElOVF9NQVg7Ci0gIH0K
LQotICAvLyBXZSBuZWVkIHRvIGVuZm9yY2UgYWxsIGxpbWl0cywgbm90IGp1c3QgdGhlIG5ldyBv
bmUsIHNvIGlmIHRoZSBwcmV2aW91cwotICAvLyBsaW1pdCB3YXMgYmVmb3JlIHRoZSBuZXcgcmVx
dWVzdGVkIGxpbWl0LCB3ZSBjb250aW51ZSB0byBlbmZvcmNlIHRoZQotICAvLyBwcmV2aW91cyBs
aW1pdC4KLSAgY3VycmVudF9saW1pdF8gPSBzdGQ6Om1pbihjdXJyZW50X2xpbWl0Xywgb2xkX2xp
bWl0KTsKLQotICBSZWNvbXB1dGVCdWZmZXJMaW1pdHMoKTsKLSAgcmV0dXJuIG9sZF9saW1pdDsK
LX0KLQotdm9pZCBDb2RlZElucHV0U3RyZWFtOjpQb3BMaW1pdChMaW1pdCBsaW1pdCkgewotICAv
LyBUaGUgbGltaXQgcGFzc2VkIGluIGlzIGFjdHVhbGx5IHRoZSAqb2xkKiBsaW1pdCwgd2hpY2gg
d2UgcmV0dXJuZWQgZnJvbQotICAvLyBQdXNoTGltaXQoKS4KLSAgY3VycmVudF9saW1pdF8gPSBs
aW1pdDsKLSAgUmVjb21wdXRlQnVmZmVyTGltaXRzKCk7Ci0KLSAgLy8gV2UgbWF5IG5vIGxvbmdl
ciBiZSBhdCBhIGxlZ2l0aW1hdGUgbWVzc2FnZSBlbmQuICBSZWFkVGFnKCkgbmVlZHMgdG8gYmUK
LSAgLy8gY2FsbGVkIGFnYWluIHRvIGZpbmQgb3V0LgotICBsZWdpdGltYXRlX21lc3NhZ2VfZW5k
XyA9IGZhbHNlOwotfQotCi1zdGQ6OnBhaXI8Q29kZWRJbnB1dFN0cmVhbTo6TGltaXQsIGludD4K
LUNvZGVkSW5wdXRTdHJlYW06OkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoQW5kUHVzaExpbWl0KGlu
dCBieXRlX2xpbWl0KSB7Ci0gIHJldHVybiBzdGQ6Om1ha2VfcGFpcihQdXNoTGltaXQoYnl0ZV9s
aW1pdCksIC0tcmVjdXJzaW9uX2J1ZGdldF8pOwotfQotCi1Db2RlZElucHV0U3RyZWFtOjpMaW1p
dCBDb2RlZElucHV0U3RyZWFtOjpSZWFkTGVuZ3RoQW5kUHVzaExpbWl0KCkgewotICB1aW50MzIg
bGVuZ3RoOwotICByZXR1cm4gUHVzaExpbWl0KFJlYWRWYXJpbnQzMigmbGVuZ3RoKSA/IGxlbmd0
aCA6IDApOwotfQotCi1ib29sIENvZGVkSW5wdXRTdHJlYW06OkRlY3JlbWVudFJlY3Vyc2lvbkRl
cHRoQW5kUG9wTGltaXQoTGltaXQgbGltaXQpIHsKLSAgYm9vbCByZXN1bHQgPSBDb25zdW1lZEVu
dGlyZU1lc3NhZ2UoKTsKLSAgUG9wTGltaXQobGltaXQpOwotICBHT09HTEVfRENIRUNLX0xUKHJl
Y3Vyc2lvbl9idWRnZXRfLCByZWN1cnNpb25fbGltaXRfKTsKLSAgKytyZWN1cnNpb25fYnVkZ2V0
XzsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBDb2RlZElucHV0U3RyZWFtOjpDaGVja0Vu
dGlyZU1lc3NhZ2VDb25zdW1lZEFuZFBvcExpbWl0KExpbWl0IGxpbWl0KSB7Ci0gIGJvb2wgcmVz
dWx0ID0gQ29uc3VtZWRFbnRpcmVNZXNzYWdlKCk7Ci0gIFBvcExpbWl0KGxpbWl0KTsKLSAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotaW50IENvZGVkSW5wdXRTdHJlYW06OkJ5dGVzVW50aWxMaW1pdCgp
IGNvbnN0IHsKLSAgaWYgKGN1cnJlbnRfbGltaXRfID09IElOVF9NQVgpIHJldHVybiAtMTsKLSAg
aW50IGN1cnJlbnRfcG9zaXRpb24gPSBDdXJyZW50UG9zaXRpb24oKTsKLQotICByZXR1cm4gY3Vy
cmVudF9saW1pdF8gLSBjdXJyZW50X3Bvc2l0aW9uOwotfQotCi12b2lkIENvZGVkSW5wdXRTdHJl
YW06OlNldFRvdGFsQnl0ZXNMaW1pdCgKLSAgICBpbnQgdG90YWxfYnl0ZXNfbGltaXQsIGludCB3
YXJuaW5nX3RocmVzaG9sZCkgewotICAvLyBNYWtlIHN1cmUgdGhlIGxpbWl0IGlzbid0IGFscmVh
ZHkgcGFzdCwgc2luY2UgdGhpcyBjb3VsZCBjb25mdXNlIG90aGVyCi0gIC8vIGNvZGUuCi0gIGlu
dCBjdXJyZW50X3Bvc2l0aW9uID0gQ3VycmVudFBvc2l0aW9uKCk7Ci0gIHRvdGFsX2J5dGVzX2xp
bWl0XyA9IHN0ZDo6bWF4KGN1cnJlbnRfcG9zaXRpb24sIHRvdGFsX2J5dGVzX2xpbWl0KTsKLSAg
aWYgKHdhcm5pbmdfdGhyZXNob2xkID49IDApIHsKLSAgICB0b3RhbF9ieXRlc193YXJuaW5nX3Ro
cmVzaG9sZF8gPSB3YXJuaW5nX3RocmVzaG9sZDsKLSAgfSBlbHNlIHsKLSAgICAvLyB3YXJuaW5n
X3RocmVzaG9sZCBpcyBuZWdhdGl2ZQotICAgIHRvdGFsX2J5dGVzX3dhcm5pbmdfdGhyZXNob2xk
XyA9IC0xOwotICB9Ci0gIFJlY29tcHV0ZUJ1ZmZlckxpbWl0cygpOwotfQotCi1pbnQgQ29kZWRJ
bnB1dFN0cmVhbTo6Qnl0ZXNVbnRpbFRvdGFsQnl0ZXNMaW1pdCgpIGNvbnN0IHsKLSAgaWYgKHRv
dGFsX2J5dGVzX2xpbWl0XyA9PSBJTlRfTUFYKSByZXR1cm4gLTE7Ci0gIHJldHVybiB0b3RhbF9i
eXRlc19saW1pdF8gLSBDdXJyZW50UG9zaXRpb24oKTsKLX0KLQotdm9pZCBDb2RlZElucHV0U3Ry
ZWFtOjpQcmludFRvdGFsQnl0ZXNMaW1pdEVycm9yKCkgewotICBHT09HTEVfTE9HKEVSUk9SKSA8
PCAiQSBwcm90b2NvbCBtZXNzYWdlIHdhcyByZWplY3RlZCBiZWNhdXNlIGl0IHdhcyB0b28gIgot
ICAgICAgICAgICAgICAgICJiaWcgKG1vcmUgdGhhbiAiIDw8IHRvdGFsX2J5dGVzX2xpbWl0Xwot
ICAgICAgICAgICAgIDw8ICIgYnl0ZXMpLiAgVG8gaW5jcmVhc2UgdGhlIGxpbWl0IChvciB0byBk
aXNhYmxlIHRoZXNlICIKLSAgICAgICAgICAgICAgICAid2FybmluZ3MpLCBzZWUgQ29kZWRJbnB1
dFN0cmVhbTo6U2V0VG90YWxCeXRlc0xpbWl0KCkgIgotICAgICAgICAgICAgICAgICJpbiBnb29n
bGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmguIjsKLX0KLQotYm9vbCBDb2RlZElucHV0U3Ry
ZWFtOjpTa2lwKGludCBjb3VudCkgewotICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7ICAv
LyBzZWN1cml0eTogY291bnQgaXMgb2Z0ZW4gdXNlci1zdXBwbGllZAotCi0gIGNvbnN0IGludCBv
cmlnaW5hbF9idWZmZXJfc2l6ZSA9IEJ1ZmZlclNpemUoKTsKLQotICBpZiAoY291bnQgPD0gb3Jp
Z2luYWxfYnVmZmVyX3NpemUpIHsKLSAgICAvLyBKdXN0IHNraXBwaW5nIHdpdGhpbiB0aGUgY3Vy
cmVudCBidWZmZXIuICBFYXN5LgotICAgIEFkdmFuY2UoY291bnQpOwotICAgIHJldHVybiB0cnVl
OwotICB9Ci0KLSAgaWYgKGJ1ZmZlcl9zaXplX2FmdGVyX2xpbWl0XyA+IDApIHsKLSAgICAvLyBX
ZSBoaXQgYSBsaW1pdCBpbnNpZGUgdGhpcyBidWZmZXIuICBBZHZhbmNlIHRvIHRoZSBsaW1pdCBh
bmQgZmFpbC4KLSAgICBBZHZhbmNlKG9yaWdpbmFsX2J1ZmZlcl9zaXplKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICBjb3VudCAtPSBvcmlnaW5hbF9idWZmZXJfc2l6ZTsKLSAgYnVmZmVy
XyA9IE5VTEw7Ci0gIGJ1ZmZlcl9lbmRfID0gYnVmZmVyXzsKLQotICAvLyBNYWtlIHN1cmUgdGhp
cyBza2lwIGRvZXNuJ3QgdHJ5IHRvIHNraXAgcGFzdCB0aGUgY3VycmVudCBsaW1pdC4KLSAgaW50
IGNsb3Nlc3RfbGltaXQgPSBzdGQ6Om1pbihjdXJyZW50X2xpbWl0XywgdG90YWxfYnl0ZXNfbGlt
aXRfKTsKLSAgaW50IGJ5dGVzX3VudGlsX2xpbWl0ID0gY2xvc2VzdF9saW1pdCAtIHRvdGFsX2J5
dGVzX3JlYWRfOwotICBpZiAoYnl0ZXNfdW50aWxfbGltaXQgPCBjb3VudCkgewotICAgIC8vIFdl
IGhpdCB0aGUgbGltaXQuICBTa2lwIHVwIHRvIGl0IHRoZW4gZmFpbC4KLSAgICBpZiAoYnl0ZXNf
dW50aWxfbGltaXQgPiAwKSB7Ci0gICAgICB0b3RhbF9ieXRlc19yZWFkXyA9IGNsb3Nlc3RfbGlt
aXQ7Ci0gICAgICBpbnB1dF8tPlNraXAoYnl0ZXNfdW50aWxfbGltaXQpOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB0b3RhbF9ieXRlc19yZWFkXyArPSBjb3VudDsKLSAgcmV0
dXJuIGlucHV0Xy0+U2tpcChjb3VudCk7Ci19Ci0KLWJvb2wgQ29kZWRJbnB1dFN0cmVhbTo6R2V0
RGlyZWN0QnVmZmVyUG9pbnRlcihjb25zdCB2b2lkKiogZGF0YSwgaW50KiBzaXplKSB7Ci0gIGlm
IChCdWZmZXJTaXplKCkgPT0gMCAmJiAhUmVmcmVzaCgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgKmRh
dGEgPSBidWZmZXJfOwotICAqc2l6ZSA9IEJ1ZmZlclNpemUoKTsKLSAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ29kZWRJbnB1dFN0cmVhbTo6UmVhZFJhdyh2b2lkKiBidWZmZXIsIGludCBzaXpl
KSB7Ci0gIHJldHVybiBJbnRlcm5hbFJlYWRSYXdJbmxpbmUoYnVmZmVyLCBzaXplKTsKLX0KLQot
Ym9vbCBDb2RlZElucHV0U3RyZWFtOjpSZWFkU3RyaW5nKHN0cmluZyogYnVmZmVyLCBpbnQgc2l6
ZSkgewotICBpZiAoc2l6ZSA8IDApIHJldHVybiBmYWxzZTsgIC8vIHNlY3VyaXR5OiBzaXplIGlz
IG9mdGVuIHVzZXItc3VwcGxpZWQKLSAgcmV0dXJuIEludGVybmFsUmVhZFN0cmluZ0lubGluZShi
dWZmZXIsIHNpemUpOwotfQotCi1ib29sIENvZGVkSW5wdXRTdHJlYW06OlJlYWRTdHJpbmdGYWxs
YmFjayhzdHJpbmcqIGJ1ZmZlciwgaW50IHNpemUpIHsKLSAgaWYgKCFidWZmZXItPmVtcHR5KCkp
IHsKLSAgICBidWZmZXItPmNsZWFyKCk7Ci0gIH0KLQotICBpbnQgY2xvc2VzdF9saW1pdCA9IHN0
ZDo6bWluKGN1cnJlbnRfbGltaXRfLCB0b3RhbF9ieXRlc19saW1pdF8pOwotICBpZiAoY2xvc2Vz
dF9saW1pdCAhPSBJTlRfTUFYKSB7Ci0gICAgaW50IGJ5dGVzX3RvX2xpbWl0ID0gY2xvc2VzdF9s
aW1pdCAtIEN1cnJlbnRQb3NpdGlvbigpOwotICAgIGlmIChieXRlc190b19saW1pdCA+IDAgJiYg
c2l6ZSA+IDAgJiYgc2l6ZSA8PSBieXRlc190b19saW1pdCkgewotICAgICAgYnVmZmVyLT5yZXNl
cnZlKHNpemUpOwotICAgIH0KLSAgfQotCi0gIGludCBjdXJyZW50X2J1ZmZlcl9zaXplOwotICB3
aGlsZSAoKGN1cnJlbnRfYnVmZmVyX3NpemUgPSBCdWZmZXJTaXplKCkpIDwgc2l6ZSkgewotICAg
IC8vIFNvbWUgU1RMIGltcGxlbWVudGF0aW9ucyAiaGVscGZ1bGx5IiBjcmFzaCBvbiBidWZmZXIt
PmFwcGVuZChOVUxMLCAwKS4KLSAgICBpZiAoY3VycmVudF9idWZmZXJfc2l6ZSAhPSAwKSB7Ci0g
ICAgICAvLyBOb3RlOiAgc3RyaW5nMS5hcHBlbmQoc3RyaW5nMikgaXMgTyhzdHJpbmcyLnNpemUo
KSkgKGFzIG9wcG9zZWQgdG8KLSAgICAgIC8vICAgTyhzdHJpbmcxLnNpemUoKSArIHN0cmluZzIu
c2l6ZSgpKSwgd2hpY2ggd291bGQgYmUgYmFkKS4KLSAgICAgIGJ1ZmZlci0+YXBwZW5kKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlcl8pLAotICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudF9idWZmZXJfc2l6ZSk7Ci0gICAgfQotICAgIHNpemUgLT0gY3VycmVudF9idWZmZXJf
c2l6ZTsKLSAgICBBZHZhbmNlKGN1cnJlbnRfYnVmZmVyX3NpemUpOwotICAgIGlmICghUmVmcmVz
aCgpKSByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBidWZmZXItPmFwcGVuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihidWZmZXJfKSwgc2l6ZSk7Ci0gIEFkdmFuY2Uoc2l6ZSk7Ci0KLSAg
cmV0dXJuIHRydWU7Ci19Ci0KLQotYm9vbCBDb2RlZElucHV0U3RyZWFtOjpSZWFkTGl0dGxlRW5k
aWFuMzJGYWxsYmFjayh1aW50MzIqIHZhbHVlKSB7Ci0gIHVpbnQ4IGJ5dGVzW3NpemVvZigqdmFs
dWUpXTsKLQotICBjb25zdCB1aW50OCogcHRyOwotICBpZiAoQnVmZmVyU2l6ZSgpID49IHNpemVv
ZigqdmFsdWUpKSB7Ci0gICAgLy8gRmFzdCBwYXRoOiAgRW5vdWdoIGJ5dGVzIGluIHRoZSBidWZm
ZXIgdG8gcmVhZCBkaXJlY3RseS4KLSAgICBwdHIgPSBidWZmZXJfOwotICAgIEFkdmFuY2Uoc2l6
ZW9mKCp2YWx1ZSkpOwotICB9IGVsc2UgewotICAgIC8vIFNsb3cgcGF0aDogIEhhZCB0byByZWFk
IHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotICAgIGlmICghUmVhZFJhdyhieXRlcywgc2l6
ZW9mKCp2YWx1ZSkpKSByZXR1cm4gZmFsc2U7Ci0gICAgcHRyID0gYnl0ZXM7Ci0gIH0KLSAgUmVh
ZExpdHRsZUVuZGlhbjMyRnJvbUFycmF5KHB0ciwgdmFsdWUpOwotICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBDb2RlZElucHV0U3RyZWFtOjpSZWFkTGl0dGxlRW5kaWFuNjRGYWxsYmFjayh1aW50
NjQqIHZhbHVlKSB7Ci0gIHVpbnQ4IGJ5dGVzW3NpemVvZigqdmFsdWUpXTsKLQotICBjb25zdCB1
aW50OCogcHRyOwotICBpZiAoQnVmZmVyU2l6ZSgpID49IHNpemVvZigqdmFsdWUpKSB7Ci0gICAg
Ly8gRmFzdCBwYXRoOiAgRW5vdWdoIGJ5dGVzIGluIHRoZSBidWZmZXIgdG8gcmVhZCBkaXJlY3Rs
eS4KLSAgICBwdHIgPSBidWZmZXJfOwotICAgIEFkdmFuY2Uoc2l6ZW9mKCp2YWx1ZSkpOwotICB9
IGVsc2UgewotICAgIC8vIFNsb3cgcGF0aDogIEhhZCB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0
aGUgYnVmZmVyLgotICAgIGlmICghUmVhZFJhdyhieXRlcywgc2l6ZW9mKCp2YWx1ZSkpKSByZXR1
cm4gZmFsc2U7Ci0gICAgcHRyID0gYnl0ZXM7Ci0gIH0KLSAgUmVhZExpdHRsZUVuZGlhbjY0RnJv
bUFycmF5KHB0ciwgdmFsdWUpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotbmFtZXNwYWNlIHsKLQot
Ly8gUmVhZCBhIHZhcmludCBmcm9tIHRoZSBnaXZlbiBidWZmZXIsIHdyaXRlIGl0IHRvICp2YWx1
ZSwgYW5kIHJldHVybiBhIHBhaXIuCi0vLyBUaGUgZmlyc3QgcGFydCBvZiB0aGUgcGFpciBpcyB0
cnVlIGlmZiB0aGUgcmVhZCB3YXMgc3VjY2Vzc2Z1bC4gIFRoZSBzZWNvbmQKLS8vIHBhcnQgaXMg
YnVmZmVyICsgKG51bWJlciBvZiBieXRlcyByZWFkKS4gIFRoaXMgZnVuY3Rpb24gaXMgYWx3YXlz
IGlubGluZWQsCi0vLyBzbyByZXR1cm5pbmcgYSBwYWlyIGlzIGNvc3RsZXNzLgotR09PR0xFX0FU
VFJJQlVURV9BTFdBWVNfSU5MSU5FIDo6c3RkOjpwYWlyPGJvb2wsIGNvbnN0IHVpbnQ4Kj4gUmVh
ZFZhcmludDMyRnJvbUFycmF5KAotICAgIHVpbnQzMiBmaXJzdF9ieXRlLCBjb25zdCB1aW50OCog
YnVmZmVyLAotICAgIHVpbnQzMiogdmFsdWUpOwotaW5saW5lIDo6c3RkOjpwYWlyPGJvb2wsIGNv
bnN0IHVpbnQ4Kj4gUmVhZFZhcmludDMyRnJvbUFycmF5KAotICAgIHVpbnQzMiBmaXJzdF9ieXRl
LCBjb25zdCB1aW50OCogYnVmZmVyLCB1aW50MzIqIHZhbHVlKSB7Ci0gIC8vIEZhc3QgcGF0aDog
IFdlIGhhdmUgZW5vdWdoIGJ5dGVzIGxlZnQgaW4gdGhlIGJ1ZmZlciB0byBndWFyYW50ZWUgdGhh
dAotICAvLyB0aGlzIHJlYWQgd29uJ3QgY3Jvc3MgdGhlIGVuZCwgc28gd2UgY2FuIHNraXAgdGhl
IGNoZWNrcy4KLSAgR09PR0xFX0RDSEVDS19FUSgqYnVmZmVyLCBmaXJzdF9ieXRlKTsKLSAgR09P
R0xFX0RDSEVDS19FUShmaXJzdF9ieXRlICYgMHg4MCwgMHg4MCkgPDwgZmlyc3RfYnl0ZTsKLSAg
Y29uc3QgdWludDgqIHB0ciA9IGJ1ZmZlcjsKLSAgdWludDMyIGI7Ci0gIHVpbnQzMiByZXN1bHQg
PSBmaXJzdF9ieXRlIC0gMHg4MDsKLSAgKytwdHI7ICAvLyBXZSBqdXN0IHByb2Nlc3NlZCB0aGUg
Zmlyc3QgYnl0ZS4gIE1vdmUgb24gdG8gdGhlIHNlY29uZC4KLSAgYiA9ICoocHRyKyspOyByZXN1
bHQgKz0gYiA8PCAgNzsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gIHJlc3VsdCAtPSAw
eDgwIDw8IDc7Ci0gIGIgPSAqKHB0cisrKTsgcmVzdWx0ICs9IGIgPDwgMTQ7IGlmICghKGIgJiAw
eDgwKSkgZ290byBkb25lOwotICByZXN1bHQgLT0gMHg4MCA8PCAxNDsKLSAgYiA9ICoocHRyKysp
OyByZXN1bHQgKz0gYiA8PCAyMTsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gIHJlc3Vs
dCAtPSAweDgwIDw8IDIxOwotICBiID0gKihwdHIrKyk7IHJlc3VsdCArPSBiIDw8IDI4OyBpZiAo
IShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgLy8gInJlc3VsdCAtPSAweDgwIDw8IDI4IiBpcyBp
cnJldmVsYW50LgotCi0gIC8vIElmIHRoZSBpbnB1dCBpcyBsYXJnZXIgdGhhbiAzMiBiaXRzLCB3
ZSBzdGlsbCBuZWVkIHRvIHJlYWQgaXQgYWxsCi0gIC8vIGFuZCBkaXNjYXJkIHRoZSBoaWdoLW9y
ZGVyIGJpdHMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwga01heFZhcmludEJ5dGVzIC0ga01heFZh
cmludDMyQnl0ZXM7IGkrKykgewotICAgIGIgPSAqKHB0cisrKTsgaWYgKCEoYiAmIDB4ODApKSBn
b3RvIGRvbmU7Ci0gIH0KLQotICAvLyBXZSBoYXZlIG92ZXJydW4gdGhlIG1heGltdW0gc2l6ZSBv
ZiBhIHZhcmludCAoMTAgYnl0ZXMpLiAgQXNzdW1lCi0gIC8vIHRoZSBkYXRhIGlzIGNvcnJ1cHQu
Ci0gIHJldHVybiBzdGQ6Om1ha2VfcGFpcihmYWxzZSwgcHRyKTsKLQotIGRvbmU6Ci0gICp2YWx1
ZSA9IHJlc3VsdDsKLSAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHRydWUsIHB0cik7Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZQotCi1ib29sIENvZGVkSW5wdXRTdHJlYW06OlJlYWRWYXJpbnQzMlNsb3co
dWludDMyKiB2YWx1ZSkgewotICAvLyBEaXJlY3RseSBpbnZva2UgUmVhZFZhcmludDY0RmFsbGJh
Y2ssIHNpbmNlIHdlIGFscmVhZHkgdHJpZWQgdG8gb3B0aW1pemUKLSAgLy8gZm9yIG9uZS1ieXRl
IHZhcmludHMuCi0gIHN0ZDo6cGFpcjx1aW50NjQsIGJvb2w+IHAgPSBSZWFkVmFyaW50NjRGYWxs
YmFjaygpOwotICAqdmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50MzI+KHAuZmlyc3QpOwotICByZXR1
cm4gcC5zZWNvbmQ7Ci19Ci0KLWludDY0IENvZGVkSW5wdXRTdHJlYW06OlJlYWRWYXJpbnQzMkZh
bGxiYWNrKHVpbnQzMiBmaXJzdF9ieXRlX29yX3plcm8pIHsKLSAgaWYgKEJ1ZmZlclNpemUoKSA+
PSBrTWF4VmFyaW50Qnl0ZXMgfHwKLSAgICAgIC8vIE9wdGltaXphdGlvbjogIFdlJ3JlIGFsc28g
c2FmZSBpZiB0aGUgYnVmZmVyIGlzIG5vbi1lbXB0eSBhbmQgaXQgZW5kcwotICAgICAgLy8gd2l0
aCBhIGJ5dGUgdGhhdCB3b3VsZCB0ZXJtaW5hdGUgYSB2YXJpbnQuCi0gICAgICAoYnVmZmVyX2Vu
ZF8gPiBidWZmZXJfICYmICEoYnVmZmVyX2VuZF9bLTFdICYgMHg4MCkpKSB7Ci0gICAgR09PR0xF
X0RDSEVDS19ORShmaXJzdF9ieXRlX29yX3plcm8sIDApCi0gICAgICAgIDw8ICJDYWxsZXIgc2hv
dWxkIHByb3ZpZGUgdXMgd2l0aCAqYnVmZmVyXyB3aGVuIGJ1ZmZlciBpcyBub24tZW1wdHkiOwot
ICAgIHVpbnQzMiB0ZW1wOwotICAgIDo6c3RkOjpwYWlyPGJvb2wsIGNvbnN0IHVpbnQ4Kj4gcCA9
Ci0gICAgICAgICAgUmVhZFZhcmludDMyRnJvbUFycmF5KGZpcnN0X2J5dGVfb3JfemVybywgYnVm
ZmVyXywgJnRlbXApOwotICAgIGlmICghcC5maXJzdCkgcmV0dXJuIC0xOwotICAgIGJ1ZmZlcl8g
PSBwLnNlY29uZDsKLSAgICByZXR1cm4gdGVtcDsKLSAgfSBlbHNlIHsKLSAgICAvLyBSZWFsbHkg
c2xvdyBjYXNlOiB3ZSB3aWxsIGluY3VyIHRoZSBjb3N0IG9mIGFuIGV4dHJhIGZ1bmN0aW9uIGNh
bGwgaGVyZSwKLSAgICAvLyBidXQgbW92aW5nIHRoaXMgb3V0IG9mIGxpbmUgcmVkdWNlcyB0aGUg
c2l6ZSBvZiB0aGlzIGZ1bmN0aW9uLCB3aGljaAotICAgIC8vIGltcHJvdmVzIHRoZSBjb21tb24g
Y2FzZS4gSW4gbWljcm8gYmVuY2htYXJrcywgdGhpcyBpcyB3b3J0aCBhYm91dCAxMC0xNSUKLSAg
ICB1aW50MzIgdGVtcDsKLSAgICByZXR1cm4gUmVhZFZhcmludDMyU2xvdygmdGVtcCkgPyBzdGF0
aWNfY2FzdDxpbnQ2ND4odGVtcCkgOiAtMTsKLSAgfQotfQotCi11aW50MzIgQ29kZWRJbnB1dFN0
cmVhbTo6UmVhZFRhZ1Nsb3coKSB7Ci0gIGlmIChidWZmZXJfID09IGJ1ZmZlcl9lbmRfKSB7Ci0g
ICAgLy8gQ2FsbCByZWZyZXNoLgotICAgIGlmICghUmVmcmVzaCgpKSB7Ci0gICAgICAvLyBSZWZy
ZXNoIGZhaWxlZC4gIE1ha2Ugc3VyZSB0aGF0IGl0IGZhaWxlZCBkdWUgdG8gRU9GLCBub3QgYmVj
YXVzZQotICAgICAgLy8gd2UgaGl0IHRvdGFsX2J5dGVzX2xpbWl0Xywgd2hpY2gsIHVubGlrZSBu
b3JtYWwgbGltaXRzLCBpcyBub3QgYQotICAgICAgLy8gdmFsaWQgcGxhY2UgdG8gZW5kIGEgbWVz
c2FnZS4KLSAgICAgIGludCBjdXJyZW50X3Bvc2l0aW9uID0gdG90YWxfYnl0ZXNfcmVhZF8gLSBi
dWZmZXJfc2l6ZV9hZnRlcl9saW1pdF87Ci0gICAgICBpZiAoY3VycmVudF9wb3NpdGlvbiA+PSB0
b3RhbF9ieXRlc19saW1pdF8pIHsKLSAgICAgICAgLy8gSGl0IHRvdGFsX2J5dGVzX2xpbWl0Xy4g
IEJ1dCBpZiB3ZSBhbHNvIGhpdCB0aGUgbm9ybWFsIGxpbWl0LAotICAgICAgICAvLyB3ZSdyZSBz
dGlsbCBPSy4KLSAgICAgICAgbGVnaXRpbWF0ZV9tZXNzYWdlX2VuZF8gPSBjdXJyZW50X2xpbWl0
XyA9PSB0b3RhbF9ieXRlc19saW1pdF87Ci0gICAgICB9IGVsc2UgewotICAgICAgICBsZWdpdGlt
YXRlX21lc3NhZ2VfZW5kXyA9IHRydWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gIH0KLQotICAvLyBGb3IgdGhlIHNsb3cgcGF0aCwganVzdCBkbyBhIDY0LWJpdCByZWFkLiBU
cnkgdG8gb3B0aW1pemUgZm9yIG9uZS1ieXRlIHRhZ3MKLSAgLy8gYWdhaW4sIHNpbmNlIHdlIGhh
dmUgbm93IHJlZnJlc2hlZCB0aGUgYnVmZmVyLgotICB1aW50NjQgcmVzdWx0ID0gMDsKLSAgaWYg
KCFSZWFkVmFyaW50NjQoJnJlc3VsdCkpIHJldHVybiAwOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDMyPihyZXN1bHQpOwotfQotCi11aW50MzIgQ29kZWRJbnB1dFN0cmVhbTo6UmVhZFRhZ0Zh
bGxiYWNrKHVpbnQzMiBmaXJzdF9ieXRlX29yX3plcm8pIHsKLSAgY29uc3QgaW50IGJ1Zl9zaXpl
ID0gQnVmZmVyU2l6ZSgpOwotICBpZiAoYnVmX3NpemUgPj0ga01heFZhcmludEJ5dGVzIHx8Ci0g
ICAgICAvLyBPcHRpbWl6YXRpb246ICBXZSdyZSBhbHNvIHNhZmUgaWYgdGhlIGJ1ZmZlciBpcyBu
b24tZW1wdHkgYW5kIGl0IGVuZHMKLSAgICAgIC8vIHdpdGggYSBieXRlIHRoYXQgd291bGQgdGVy
bWluYXRlIGEgdmFyaW50LgotICAgICAgKGJ1Zl9zaXplID4gMCAmJiAhKGJ1ZmZlcl9lbmRfWy0x
XSAmIDB4ODApKSkgewotICAgIEdPT0dMRV9EQ0hFQ0tfRVEoZmlyc3RfYnl0ZV9vcl96ZXJvLCBi
dWZmZXJfWzBdKTsKLSAgICBpZiAoZmlyc3RfYnl0ZV9vcl96ZXJvID09IDApIHsKLSAgICAgICsr
YnVmZmVyXzsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB1aW50MzIgdGFnOwotICAgIDo6
c3RkOjpwYWlyPGJvb2wsIGNvbnN0IHVpbnQ4Kj4gcCA9Ci0gICAgICAgIFJlYWRWYXJpbnQzMkZy
b21BcnJheShmaXJzdF9ieXRlX29yX3plcm8sIGJ1ZmZlcl8sICZ0YWcpOwotICAgIGlmICghcC5m
aXJzdCkgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGJ1ZmZlcl8gPSBwLnNlY29uZDsK
LSAgICByZXR1cm4gdGFnOwotICB9IGVsc2UgewotICAgIC8vIFdlIGFyZSBjb21tb25seSBhdCBh
IGxpbWl0IHdoZW4gYXR0ZW1wdGluZyB0byByZWFkIHRhZ3MuIFRyeSB0byBxdWlja2x5Ci0gICAg
Ly8gZGV0ZWN0IHRoaXMgY2FzZSB3aXRob3V0IG1ha2luZyBhbm90aGVyIGZ1bmN0aW9uIGNhbGwu
Ci0gICAgaWYgKChidWZfc2l6ZSA9PSAwKSAmJgotICAgICAgICAoKGJ1ZmZlcl9zaXplX2FmdGVy
X2xpbWl0XyA+IDApIHx8Ci0gICAgICAgICAodG90YWxfYnl0ZXNfcmVhZF8gPT0gY3VycmVudF9s
aW1pdF8pKSAmJgotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbGltaXQgd2UgaGl0IGlz
IG5vdCB0b3RhbF9ieXRlc19saW1pdF8sIHNpbmNlCi0gICAgICAgIC8vIGluIHRoYXQgY2FzZSB3
ZSBzdGlsbCBuZWVkIHRvIGNhbGwgUmVmcmVzaCgpIHNvIHRoYXQgaXQgcHJpbnRzIGFuCi0gICAg
ICAgIC8vIGVycm9yLgotICAgICAgICB0b3RhbF9ieXRlc19yZWFkXyAtIGJ1ZmZlcl9zaXplX2Fm
dGVyX2xpbWl0XyA8IHRvdGFsX2J5dGVzX2xpbWl0XykgewotICAgICAgLy8gV2UgaGl0IGEgYnl0
ZSBsaW1pdC4KLSAgICAgIGxlZ2l0aW1hdGVfbWVzc2FnZV9lbmRfID0gdHJ1ZTsKLSAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gUmVhZFRhZ1Nsb3coKTsKLSAgfQotfQotCi1ib29s
IENvZGVkSW5wdXRTdHJlYW06OlJlYWRWYXJpbnQ2NFNsb3codWludDY0KiB2YWx1ZSkgewotICAv
LyBTbG93IHBhdGg6ICBUaGlzIHJlYWQgbWlnaHQgY3Jvc3MgdGhlIGVuZCBvZiB0aGUgYnVmZmVy
LCBzbyB3ZQotICAvLyBuZWVkIHRvIGNoZWNrIGFuZCByZWZyZXNoIHRoZSBidWZmZXIgaWYgYW5k
IHdoZW4gaXQgZG9lcy4KLQotICB1aW50NjQgcmVzdWx0ID0gMDsKLSAgaW50IGNvdW50ID0gMDsK
LSAgdWludDMyIGI7Ci0KLSAgZG8gewotICAgIGlmIChjb3VudCA9PSBrTWF4VmFyaW50Qnl0ZXMp
IHJldHVybiBmYWxzZTsKLSAgICB3aGlsZSAoYnVmZmVyXyA9PSBidWZmZXJfZW5kXykgewotICAg
ICAgaWYgKCFSZWZyZXNoKCkpIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYiA9ICpidWZmZXJf
OwotICAgIHJlc3VsdCB8PSBzdGF0aWNfY2FzdDx1aW50NjQ+KGIgJiAweDdGKSA8PCAoNyAqIGNv
dW50KTsKLSAgICBBZHZhbmNlKDEpOwotICAgICsrY291bnQ7Ci0gIH0gd2hpbGUgKGIgJiAweDgw
KTsKLQotICAqdmFsdWUgPSByZXN1bHQ7Ci0gIHJldHVybiB0cnVlOwotfQotCi1zdGQ6OnBhaXI8
dWludDY0LCBib29sPiBDb2RlZElucHV0U3RyZWFtOjpSZWFkVmFyaW50NjRGYWxsYmFjaygpIHsK
LSAgaWYgKEJ1ZmZlclNpemUoKSA+PSBrTWF4VmFyaW50Qnl0ZXMgfHwKLSAgICAgIC8vIE9wdGlt
aXphdGlvbjogIFdlJ3JlIGFsc28gc2FmZSBpZiB0aGUgYnVmZmVyIGlzIG5vbi1lbXB0eSBhbmQg
aXQgZW5kcwotICAgICAgLy8gd2l0aCBhIGJ5dGUgdGhhdCB3b3VsZCB0ZXJtaW5hdGUgYSB2YXJp
bnQuCi0gICAgICAoYnVmZmVyX2VuZF8gPiBidWZmZXJfICYmICEoYnVmZmVyX2VuZF9bLTFdICYg
MHg4MCkpKSB7Ci0gICAgLy8gRmFzdCBwYXRoOiAgV2UgaGF2ZSBlbm91Z2ggYnl0ZXMgbGVmdCBp
biB0aGUgYnVmZmVyIHRvIGd1YXJhbnRlZSB0aGF0Ci0gICAgLy8gdGhpcyByZWFkIHdvbid0IGNy
b3NzIHRoZSBlbmQsIHNvIHdlIGNhbiBza2lwIHRoZSBjaGVja3MuCi0KLSAgICBjb25zdCB1aW50
OCogcHRyID0gYnVmZmVyXzsKLSAgICB1aW50MzIgYjsKLQotICAgIC8vIFNwbGl0dGluZyBpbnRv
IDMyLWJpdCBwaWVjZXMgZ2l2ZXMgYmV0dGVyIHBlcmZvcm1hbmNlIG9uIDMyLWJpdAotICAgIC8v
IHByb2Nlc3NvcnMuCi0gICAgdWludDMyIHBhcnQwID0gMCwgcGFydDEgPSAwLCBwYXJ0MiA9IDA7
Ci0KLSAgICBiID0gKihwdHIrKyk7IHBhcnQwICA9IGIgICAgICA7IGlmICghKGIgJiAweDgwKSkg
Z290byBkb25lOwotICAgIHBhcnQwIC09IDB4ODA7Ci0gICAgYiA9ICoocHRyKyspOyBwYXJ0MCAr
PSBiIDw8ICA3OyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgICBwYXJ0MCAtPSAweDgw
IDw8IDc7Ci0gICAgYiA9ICoocHRyKyspOyBwYXJ0MCArPSBiIDw8IDE0OyBpZiAoIShiICYgMHg4
MCkpIGdvdG8gZG9uZTsKLSAgICBwYXJ0MCAtPSAweDgwIDw8IDE0OwotICAgIGIgPSAqKHB0cisr
KTsgcGFydDAgKz0gYiA8PCAyMTsgaWYgKCEoYiAmIDB4ODApKSBnb3RvIGRvbmU7Ci0gICAgcGFy
dDAgLT0gMHg4MCA8PCAyMTsKLSAgICBiID0gKihwdHIrKyk7IHBhcnQxICA9IGIgICAgICA7IGlm
ICghKGIgJiAweDgwKSkgZ290byBkb25lOwotICAgIHBhcnQxIC09IDB4ODA7Ci0gICAgYiA9ICoo
cHRyKyspOyBwYXJ0MSArPSBiIDw8ICA3OyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAg
ICBwYXJ0MSAtPSAweDgwIDw8IDc7Ci0gICAgYiA9ICoocHRyKyspOyBwYXJ0MSArPSBiIDw8IDE0
OyBpZiAoIShiICYgMHg4MCkpIGdvdG8gZG9uZTsKLSAgICBwYXJ0MSAtPSAweDgwIDw8IDE0Owot
ICAgIGIgPSAqKHB0cisrKTsgcGFydDEgKz0gYiA8PCAyMTsgaWYgKCEoYiAmIDB4ODApKSBnb3Rv
IGRvbmU7Ci0gICAgcGFydDEgLT0gMHg4MCA8PCAyMTsKLSAgICBiID0gKihwdHIrKyk7IHBhcnQy
ICA9IGIgICAgICA7IGlmICghKGIgJiAweDgwKSkgZ290byBkb25lOwotICAgIHBhcnQyIC09IDB4
ODA7Ci0gICAgYiA9ICoocHRyKyspOyBwYXJ0MiArPSBiIDw8ICA3OyBpZiAoIShiICYgMHg4MCkp
IGdvdG8gZG9uZTsKLSAgICAvLyAicGFydDIgLT0gMHg4MCA8PCA3IiBpcyBpcnJlbGV2YW50IGJl
Y2F1c2UgKDB4ODAgPDwgNykgPDwgNTYgaXMgMC4KLQotICAgIC8vIFdlIGhhdmUgb3ZlcnJ1biB0
aGUgbWF4aW11bSBzaXplIG9mIGEgdmFyaW50ICgxMCBieXRlcykuICBUaGUgZGF0YQotICAgIC8v
IG11c3QgYmUgY29ycnVwdC4KLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoMCwgZmFsc2UpOwot
Ci0gICBkb25lOgotICAgIEFkdmFuY2UocHRyIC0gYnVmZmVyXyk7Ci0gICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKChzdGF0aWNfY2FzdDx1aW50NjQ+KHBhcnQwKSkgfAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQ2ND4ocGFydDEpIDw8IDI4KSB8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDY0PihwYXJ0MikgPDwg
NTYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgfSBlbHNlIHsKLSAgICB1
aW50NjQgdGVtcDsKLSAgICBib29sIHN1Y2Nlc3MgPSBSZWFkVmFyaW50NjRTbG93KCZ0ZW1wKTsK
LSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIodGVtcCwgc3VjY2Vzcyk7Ci0gIH0KLX0KLQotYm9v
bCBDb2RlZElucHV0U3RyZWFtOjpSZWZyZXNoKCkgewotICBHT09HTEVfRENIRUNLX0VRKDAsIEJ1
ZmZlclNpemUoKSk7Ci0KLSAgaWYgKGJ1ZmZlcl9zaXplX2FmdGVyX2xpbWl0XyA+IDAgfHwgb3Zl
cmZsb3dfYnl0ZXNfID4gMCB8fAotICAgICAgdG90YWxfYnl0ZXNfcmVhZF8gPT0gY3VycmVudF9s
aW1pdF8pIHsKLSAgICAvLyBXZSd2ZSBoaXQgYSBsaW1pdC4gIFN0b3AuCi0gICAgaW50IGN1cnJl
bnRfcG9zaXRpb24gPSB0b3RhbF9ieXRlc19yZWFkXyAtIGJ1ZmZlcl9zaXplX2FmdGVyX2xpbWl0
XzsKLQotICAgIGlmIChjdXJyZW50X3Bvc2l0aW9uID49IHRvdGFsX2J5dGVzX2xpbWl0XyAmJgot
ICAgICAgICB0b3RhbF9ieXRlc19saW1pdF8gIT0gY3VycmVudF9saW1pdF8pIHsKLSAgICAgIC8v
IEhpdCB0b3RhbF9ieXRlc19saW1pdF8uCi0gICAgICBQcmludFRvdGFsQnl0ZXNMaW1pdEVycm9y
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKHRvdGFsX2J5dGVz
X3dhcm5pbmdfdGhyZXNob2xkXyA+PSAwICYmCi0gICAgICB0b3RhbF9ieXRlc19yZWFkXyA+PSB0
b3RhbF9ieXRlc193YXJuaW5nX3RocmVzaG9sZF8pIHsKLSAgICAgIEdPT0dMRV9MT0coV0FSTklO
RykgPDwgIlJlYWRpbmcgZGFuZ2Vyb3VzbHkgbGFyZ2UgcHJvdG9jb2wgbWVzc2FnZS4gIElmIHRo
ZSAiCi0gICAgICAgICAgICAgICAgICAgICAgIm1lc3NhZ2UgdHVybnMgb3V0IHRvIGJlIGxhcmdl
ciB0aGFuICIKLSAgICAgICAgICAgICAgICAgICA8PCB0b3RhbF9ieXRlc19saW1pdF8gPDwgIiBi
eXRlcywgcGFyc2luZyB3aWxsIGJlIGhhbHRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgImZv
ciBzZWN1cml0eSByZWFzb25zLiAgVG8gaW5jcmVhc2UgdGhlIGxpbWl0IChvciB0byAiCi0gICAg
ICAgICAgICAgICAgICAgICAgImRpc2FibGUgdGhlc2Ugd2FybmluZ3MpLCBzZWUgIgotICAgICAg
ICAgICAgICAgICAgICAgICJDb2RlZElucHV0U3RyZWFtOjpTZXRUb3RhbEJ5dGVzTGltaXQoKSBp
biAiCi0gICAgICAgICAgICAgICAgICAgICAgImdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJl
YW0uaC4iOwotCi0gICAgLy8gRG9uJ3Qgd2FybiBhZ2FpbiBmb3IgdGhpcyBzdHJlYW0sIGFuZCBw
cmludCB0b3RhbCBzaXplIGF0IHRoZSBlbmQuCi0gICAgdG90YWxfYnl0ZXNfd2FybmluZ190aHJl
c2hvbGRfID0gLTI7Ci0gIH0KLQotICBjb25zdCB2b2lkKiB2b2lkX2J1ZmZlcjsKLSAgaW50IGJ1
ZmZlcl9zaXplOwotICBpZiAoTmV4dE5vbkVtcHR5KGlucHV0XywgJnZvaWRfYnVmZmVyLCAmYnVm
ZmVyX3NpemUpKSB7Ci0gICAgYnVmZmVyXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgq
Pih2b2lkX2J1ZmZlcik7Ci0gICAgYnVmZmVyX2VuZF8gPSBidWZmZXJfICsgYnVmZmVyX3NpemU7
Ci0gICAgR09PR0xFX0NIRUNLX0dFKGJ1ZmZlcl9zaXplLCAwKTsKLQotICAgIGlmICh0b3RhbF9i
eXRlc19yZWFkXyA8PSBJTlRfTUFYIC0gYnVmZmVyX3NpemUpIHsKLSAgICAgIHRvdGFsX2J5dGVz
X3JlYWRfICs9IGJ1ZmZlcl9zaXplOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBPdmVyZmxvdy4g
IFJlc2V0IGJ1ZmZlcl9lbmRfIHRvIG5vdCBpbmNsdWRlIHRoZSBieXRlcyBiZXlvbmQgSU5UX01B
WC4KLSAgICAgIC8vIFdlIGNhbid0IGdldCB0aGF0IGZhciBhbnl3YXksIGJlY2F1c2UgdG90YWxf
Ynl0ZXNfbGltaXRfIGlzIGd1YXJhbnRlZWQKLSAgICAgIC8vIHRvIGJlIGxlc3MgdGhhbiBpdC4g
IFdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzCi0gICAgICAvLyB3
ZSBkaXNjYXJkZWQsIHRob3VnaCwgc28gdGhhdCB3ZSBjYW4gY2FsbCBpbnB1dF8tPkJhY2tVcCgp
IHRvIGJhY2sKLSAgICAgIC8vIHVwIG92ZXIgdGhlbSBvbiBkZXN0cnVjdGlvbi4KLQotICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGVxdWl2YWxlbnQgdG86Ci0gICAgICAvLyAgIG92ZXJm
bG93X2J5dGVzXyA9IHRvdGFsX2J5dGVzX3JlYWRfICsgYnVmZmVyX3NpemUgLSBJTlRfTUFYOwot
ICAgICAgLy8gZXhjZXB0IHRoYXQgaXQgYXZvaWRzIG92ZXJmbG93cy4gIFNpZ25lZCBpbnRlZ2Vy
IG92ZXJmbG93IGhhcwotICAgICAgLy8gdW5kZWZpbmVkIHJlc3VsdHMgYWNjb3JkaW5nIHRvIHRo
ZSBDIHN0YW5kYXJkLgotICAgICAgb3ZlcmZsb3dfYnl0ZXNfID0gdG90YWxfYnl0ZXNfcmVhZF8g
LSAoSU5UX01BWCAtIGJ1ZmZlcl9zaXplKTsKLSAgICAgIGJ1ZmZlcl9lbmRfIC09IG92ZXJmbG93
X2J5dGVzXzsKLSAgICAgIHRvdGFsX2J5dGVzX3JlYWRfID0gSU5UX01BWDsKLSAgICB9Ci0KLSAg
ICBSZWNvbXB1dGVCdWZmZXJMaW1pdHMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsK
LSAgICBidWZmZXJfID0gTlVMTDsKLSAgICBidWZmZXJfZW5kXyA9IE5VTEw7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci19Ci0KLS8vIENvZGVkT3V0cHV0U3RyZWFtID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQ29kZWRPdXRwdXRTdHJlYW06OkNv
ZGVkT3V0cHV0U3RyZWFtKFplcm9Db3B5T3V0cHV0U3RyZWFtKiBvdXRwdXQpCi0gIDogb3V0cHV0
XyhvdXRwdXQpLAotICAgIGJ1ZmZlcl8oTlVMTCksCi0gICAgYnVmZmVyX3NpemVfKDApLAotICAg
IHRvdGFsX2J5dGVzXygwKSwKLSAgICBoYWRfZXJyb3JfKGZhbHNlKSwKLSAgICBhbGlhc2luZ19l
bmFibGVkXyhmYWxzZSkgewotICAvLyBFYWdlcmx5IFJlZnJlc2goKSBzbyBidWZmZXIgc3BhY2Ug
aXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLgotICBSZWZyZXNoKCk7Ci0gIC8vIFRoZSBSZWZyZXNo
KCkgbWF5IGhhdmUgZmFpbGVkLiBJZiB0aGUgY2xpZW50IGRvZXNuJ3Qgd3JpdGUgYW55IGRhdGEs
Ci0gIC8vIHRob3VnaCwgZG9uJ3QgY29uc2lkZXIgdGhpcyBhbiBlcnJvci4gSWYgdGhlIGNsaWVu
dCBkb2VzIHdyaXRlIGRhdGEsIHRoZW4KLSAgLy8gYW5vdGhlciBSZWZyZXNoKCkgd2lsbCBiZSBh
dHRlbXB0ZWQgYW5kIGl0IHdpbGwgc2V0IHRoZSBlcnJvciBvbmNlIGFnYWluLgotICBoYWRfZXJy
b3JfID0gZmFsc2U7Ci19Ci0KLUNvZGVkT3V0cHV0U3RyZWFtOjpDb2RlZE91dHB1dFN0cmVhbSha
ZXJvQ29weU91dHB1dFN0cmVhbSogb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZG9fZWFnZXJfcmVmcmVzaCkKLSAgOiBvdXRwdXRfKG91dHB1dCksCi0g
ICAgYnVmZmVyXyhOVUxMKSwKLSAgICBidWZmZXJfc2l6ZV8oMCksCi0gICAgdG90YWxfYnl0ZXNf
KDApLAotICAgIGhhZF9lcnJvcl8oZmFsc2UpLAotICAgIGFsaWFzaW5nX2VuYWJsZWRfKGZhbHNl
KSB7Ci0gIGlmIChkb19lYWdlcl9yZWZyZXNoKSB7Ci0gICAgLy8gRWFnZXJseSBSZWZyZXNoKCkg
c28gYnVmZmVyIHNwYWNlIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4KLSAgICBSZWZyZXNoKCk7
Ci0gICAgLy8gVGhlIFJlZnJlc2goKSBtYXkgaGF2ZSBmYWlsZWQuIElmIHRoZSBjbGllbnQgZG9l
c24ndCB3cml0ZSBhbnkgZGF0YSwKLSAgICAvLyB0aG91Z2gsIGRvbid0IGNvbnNpZGVyIHRoaXMg
YW4gZXJyb3IuIElmIHRoZSBjbGllbnQgZG9lcyB3cml0ZSBkYXRhLCB0aGVuCi0gICAgLy8gYW5v
dGhlciBSZWZyZXNoKCkgd2lsbCBiZSBhdHRlbXB0ZWQgYW5kIGl0IHdpbGwgc2V0IHRoZSBlcnJv
ciBvbmNlIGFnYWluLgotICAgIGhhZF9lcnJvcl8gPSBmYWxzZTsKLSAgfQotfQotCi1Db2RlZE91
dHB1dFN0cmVhbTo6fkNvZGVkT3V0cHV0U3RyZWFtKCkgewotICBUcmltKCk7Ci19Ci0KLXZvaWQg
Q29kZWRPdXRwdXRTdHJlYW06OlRyaW0oKSB7Ci0gIGlmIChidWZmZXJfc2l6ZV8gPiAwKSB7Ci0g
ICAgb3V0cHV0Xy0+QmFja1VwKGJ1ZmZlcl9zaXplXyk7Ci0gICAgdG90YWxfYnl0ZXNfIC09IGJ1
ZmZlcl9zaXplXzsKLSAgICBidWZmZXJfc2l6ZV8gPSAwOwotICAgIGJ1ZmZlcl8gPSBOVUxMOwot
ICB9Ci19Ci0KLWJvb2wgQ29kZWRPdXRwdXRTdHJlYW06OlNraXAoaW50IGNvdW50KSB7Ci0gIGlm
IChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKLQotICB3aGlsZSAoY291bnQgPiBidWZmZXJfc2l6
ZV8pIHsKLSAgICBjb3VudCAtPSBidWZmZXJfc2l6ZV87Ci0gICAgaWYgKCFSZWZyZXNoKCkpIHJl
dHVybiBmYWxzZTsKLSAgfQotCi0gIEFkdmFuY2UoY291bnQpOwotICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBDb2RlZE91dHB1dFN0cmVhbTo6R2V0RGlyZWN0QnVmZmVyUG9pbnRlcih2b2lkKiog
ZGF0YSwgaW50KiBzaXplKSB7Ci0gIGlmIChidWZmZXJfc2l6ZV8gPT0gMCAmJiAhUmVmcmVzaCgp
KSByZXR1cm4gZmFsc2U7Ci0KLSAgKmRhdGEgPSBidWZmZXJfOwotICAqc2l6ZSA9IGJ1ZmZlcl9z
aXplXzsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29kZWRPdXRwdXRTdHJlYW06OldyaXRl
UmF3KGNvbnN0IHZvaWQqIGRhdGEsIGludCBzaXplKSB7Ci0gIHdoaWxlIChidWZmZXJfc2l6ZV8g
PCBzaXplKSB7Ci0gICAgbWVtY3B5KGJ1ZmZlcl8sIGRhdGEsIGJ1ZmZlcl9zaXplXyk7Ci0gICAg
c2l6ZSAtPSBidWZmZXJfc2l6ZV87Ci0gICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDgqPihkYXRhKSArIGJ1ZmZlcl9zaXplXzsKLSAgICBpZiAoIVJlZnJlc2goKSkgcmV0dXJu
OwotICB9Ci0KLSAgbWVtY3B5KGJ1ZmZlcl8sIGRhdGEsIHNpemUpOwotICBBZHZhbmNlKHNpemUp
OwotfQotCi11aW50OCogQ29kZWRPdXRwdXRTdHJlYW06OldyaXRlUmF3VG9BcnJheSgKLSAgICBj
b25zdCB2b2lkKiBkYXRhLCBpbnQgc2l6ZSwgdWludDgqIHRhcmdldCkgewotICBtZW1jcHkodGFy
Z2V0LCBkYXRhLCBzaXplKTsKLSAgcmV0dXJuIHRhcmdldCArIHNpemU7Ci19Ci0KLQotdm9pZCBD
b2RlZE91dHB1dFN0cmVhbTo6V3JpdGVBbGlhc2VkUmF3KGNvbnN0IHZvaWQqIGRhdGEsIGludCBz
aXplKSB7Ci0gIGlmIChzaXplIDwgYnVmZmVyX3NpemVfCi0gICAgICApIHsKLSAgICBXcml0ZVJh
dyhkYXRhLCBzaXplKTsKLSAgfSBlbHNlIHsKLSAgICBUcmltKCk7Ci0KLSAgICB0b3RhbF9ieXRl
c18gKz0gc2l6ZTsKLSAgICBoYWRfZXJyb3JfIHw9ICFvdXRwdXRfLT5Xcml0ZUFsaWFzZWRSYXco
ZGF0YSwgc2l6ZSk7Ci0gIH0KLX0KLQotdm9pZCBDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVMaXR0
bGVFbmRpYW4zMih1aW50MzIgdmFsdWUpIHsKLSAgdWludDggYnl0ZXNbc2l6ZW9mKHZhbHVlKV07
Ci0KLSAgYm9vbCB1c2VfZmFzdCA9IGJ1ZmZlcl9zaXplXyA+PSBzaXplb2YodmFsdWUpOwotICB1
aW50OCogcHRyID0gdXNlX2Zhc3QgPyBidWZmZXJfIDogYnl0ZXM7Ci0KLSAgV3JpdGVMaXR0bGVF
bmRpYW4zMlRvQXJyYXkodmFsdWUsIHB0cik7Ci0KLSAgaWYgKHVzZV9mYXN0KSB7Ci0gICAgQWR2
YW5jZShzaXplb2YodmFsdWUpKTsKLSAgfSBlbHNlIHsKLSAgICBXcml0ZVJhdyhieXRlcywgc2l6
ZW9mKHZhbHVlKSk7Ci0gIH0KLX0KLQotdm9pZCBDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVMaXR0
bGVFbmRpYW42NCh1aW50NjQgdmFsdWUpIHsKLSAgdWludDggYnl0ZXNbc2l6ZW9mKHZhbHVlKV07
Ci0KLSAgYm9vbCB1c2VfZmFzdCA9IGJ1ZmZlcl9zaXplXyA+PSBzaXplb2YodmFsdWUpOwotICB1
aW50OCogcHRyID0gdXNlX2Zhc3QgPyBidWZmZXJfIDogYnl0ZXM7Ci0KLSAgV3JpdGVMaXR0bGVF
bmRpYW42NFRvQXJyYXkodmFsdWUsIHB0cik7Ci0KLSAgaWYgKHVzZV9mYXN0KSB7Ci0gICAgQWR2
YW5jZShzaXplb2YodmFsdWUpKTsKLSAgfSBlbHNlIHsKLSAgICBXcml0ZVJhdyhieXRlcywgc2l6
ZW9mKHZhbHVlKSk7Ci0gIH0KLX0KLQotdm9pZCBDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVWYXJp
bnQzMlNsb3dQYXRoKHVpbnQzMiB2YWx1ZSkgewotICB1aW50OCBieXRlc1trTWF4VmFyaW50MzJC
eXRlc107Ci0gIHVpbnQ4KiB0YXJnZXQgPSAmYnl0ZXNbMF07Ci0gIHVpbnQ4KiBlbmQgPSBXcml0
ZVZhcmludDMyVG9BcnJheSh2YWx1ZSwgdGFyZ2V0KTsKLSAgaW50IHNpemUgPSBlbmQgLSB0YXJn
ZXQ7Ci0gIFdyaXRlUmF3KGJ5dGVzLCBzaXplKTsKLX0KLQotaW5saW5lIHVpbnQ4KiBDb2RlZE91
dHB1dFN0cmVhbTo6V3JpdGVWYXJpbnQ2NFRvQXJyYXlJbmxpbmUoCi0gICAgdWludDY0IHZhbHVl
LCB1aW50OCogdGFyZ2V0KSB7Ci0gIC8vIFNwbGl0dGluZyBpbnRvIDMyLWJpdCBwaWVjZXMgZ2l2
ZXMgYmV0dGVyIHBlcmZvcm1hbmNlIG9uIDMyLWJpdAotICAvLyBwcm9jZXNzb3JzLgotICB1aW50
MzIgcGFydDAgPSBzdGF0aWNfY2FzdDx1aW50MzI+KHZhbHVlICAgICAgKTsKLSAgdWludDMyIHBh
cnQxID0gc3RhdGljX2Nhc3Q8dWludDMyPih2YWx1ZSA+PiAyOCk7Ci0gIHVpbnQzMiBwYXJ0MiA9
IHN0YXRpY19jYXN0PHVpbnQzMj4odmFsdWUgPj4gNTYpOwotCi0gIGludCBzaXplOwotCi0gIC8v
IEhlcmUgd2UgY2FuJ3QgcmVhbGx5IG9wdGltaXplIGZvciBzbWFsbCBudW1iZXJzLCBzaW5jZSB0
aGUgdmFsdWUgaXMKLSAgLy8gc3BsaXQgaW50byB0aHJlZSBwYXJ0cy4gIENoZWtpbmcgZm9yIG51
bWJlcnMgPCAxMjgsIGZvciBpbnN0YW5jZSwKLSAgLy8gd291bGQgcmVxdWlyZSB0aHJlZSBjb21w
YXJpc29ucywgc2luY2UgeW91J2QgaGF2ZSB0byBtYWtlIHN1cmUgcGFydDEKLSAgLy8gYW5kIHBh
cnQyIGFyZSB6ZXJvLiAgSG93ZXZlciwgaWYgdGhlIGNhbGxlciBpcyB1c2luZyA2NC1iaXQgaW50
ZWdlcnMsCi0gIC8vIGl0IGlzIGxpa2VseSB0aGF0IHRoZXkgZXhwZWN0IHRoZSBudW1iZXJzIHRv
IG9mdGVuIGJlIHZlcnkgbGFyZ2UsIHNvCi0gIC8vIHdlIHByb2JhYmx5IGRvbid0IHdhbnQgdG8g
b3B0aW1pemUgZm9yIHNtYWxsIG51bWJlcnMgYW55d2F5LiAgVGh1cywKLSAgLy8gd2UgZW5kIHVw
IHdpdGggYSBoYXJkY29kZWQgYmluYXJ5IHNlYXJjaCB0cmVlLi4uCi0gIGlmIChwYXJ0MiA9PSAw
KSB7Ci0gICAgaWYgKHBhcnQxID09IDApIHsKLSAgICAgIGlmIChwYXJ0MCA8ICgxIDw8IDE0KSkg
ewotICAgICAgICBpZiAocGFydDAgPCAoMSA8PCA3KSkgewotICAgICAgICAgIHNpemUgPSAxOyBn
b3RvIHNpemUxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHNpemUgPSAyOyBnb3RvIHNp
emUyOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAocGFydDAgPCAoMSA8
PCAyMSkpIHsKLSAgICAgICAgICBzaXplID0gMzsgZ290byBzaXplMzsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICBzaXplID0gNDsgZ290byBzaXplNDsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICBpZiAocGFydDEgPCAoMSA8PCAxNCkpIHsKLSAgICAgICAgaWYg
KHBhcnQxIDwgKDEgPDwgNykpIHsKLSAgICAgICAgICBzaXplID0gNTsgZ290byBzaXplNTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzaXplID0gNjsgZ290byBzaXplNjsKLSAgICAgICAg
fQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBhcnQxIDwgKDEgPDwgMjEpKSB7Ci0gICAg
ICAgICAgc2l6ZSA9IDc7IGdvdG8gc2l6ZTc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
c2l6ZSA9IDg7IGdvdG8gc2l6ZTg7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxz
ZSB7Ci0gICAgaWYgKHBhcnQyIDwgKDEgPDwgNykpIHsKLSAgICAgIHNpemUgPSA5OyBnb3RvIHNp
emU5OwotICAgIH0gZWxzZSB7Ci0gICAgICBzaXplID0gMTA7IGdvdG8gc2l6ZTEwOwotICAgIH0K
LSAgfQotCi0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4ndCBnZXQgaGVyZS4iOwotCi0gIHNp
emUxMDogdGFyZ2V0WzldID0gc3RhdGljX2Nhc3Q8dWludDg+KChwYXJ0MiA+PiAgNykgfCAweDgw
KTsKLSAgc2l6ZTkgOiB0YXJnZXRbOF0gPSBzdGF0aWNfY2FzdDx1aW50OD4oKHBhcnQyICAgICAg
KSB8IDB4ODApOwotICBzaXplOCA6IHRhcmdldFs3XSA9IHN0YXRpY19jYXN0PHVpbnQ4PigocGFy
dDEgPj4gMjEpIHwgMHg4MCk7Ci0gIHNpemU3IDogdGFyZ2V0WzZdID0gc3RhdGljX2Nhc3Q8dWlu
dDg+KChwYXJ0MSA+PiAxNCkgfCAweDgwKTsKLSAgc2l6ZTYgOiB0YXJnZXRbNV0gPSBzdGF0aWNf
Y2FzdDx1aW50OD4oKHBhcnQxID4+ICA3KSB8IDB4ODApOwotICBzaXplNSA6IHRhcmdldFs0XSA9
IHN0YXRpY19jYXN0PHVpbnQ4PigocGFydDEgICAgICApIHwgMHg4MCk7Ci0gIHNpemU0IDogdGFy
Z2V0WzNdID0gc3RhdGljX2Nhc3Q8dWludDg+KChwYXJ0MCA+PiAyMSkgfCAweDgwKTsKLSAgc2l6
ZTMgOiB0YXJnZXRbMl0gPSBzdGF0aWNfY2FzdDx1aW50OD4oKHBhcnQwID4+IDE0KSB8IDB4ODAp
OwotICBzaXplMiA6IHRhcmdldFsxXSA9IHN0YXRpY19jYXN0PHVpbnQ4PigocGFydDAgPj4gIDcp
IHwgMHg4MCk7Ci0gIHNpemUxIDogdGFyZ2V0WzBdID0gc3RhdGljX2Nhc3Q8dWludDg+KChwYXJ0
MCAgICAgICkgfCAweDgwKTsKLQotICB0YXJnZXRbc2l6ZS0xXSAmPSAweDdGOwotICByZXR1cm4g
dGFyZ2V0ICsgc2l6ZTsKLX0KLQotdm9pZCBDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVWYXJpbnQ2
NCh1aW50NjQgdmFsdWUpIHsKLSAgaWYgKGJ1ZmZlcl9zaXplXyA+PSBrTWF4VmFyaW50Qnl0ZXMp
IHsKLSAgICAvLyBGYXN0IHBhdGg6ICBXZSBoYXZlIGVub3VnaCBieXRlcyBsZWZ0IGluIHRoZSBi
dWZmZXIgdG8gZ3VhcmFudGVlIHRoYXQKLSAgICAvLyB0aGlzIHdyaXRlIHdvbid0IGNyb3NzIHRo
ZSBlbmQsIHNvIHdlIGNhbiBza2lwIHRoZSBjaGVja3MuCi0gICAgdWludDgqIHRhcmdldCA9IGJ1
ZmZlcl87Ci0KLSAgICB1aW50OCogZW5kID0gV3JpdGVWYXJpbnQ2NFRvQXJyYXlJbmxpbmUodmFs
dWUsIHRhcmdldCk7Ci0gICAgaW50IHNpemUgPSBlbmQgLSB0YXJnZXQ7Ci0gICAgQWR2YW5jZShz
aXplKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBTbG93IHBhdGg6ICBUaGlzIHdyaXRlIG1pZ2h0IGNy
b3NzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgc28gd2UKLSAgICAvLyBjb21wb3NlIHRoZSBieXRl
cyBmaXJzdCB0aGVuIHVzZSBXcml0ZVJhdygpLgotICAgIHVpbnQ4IGJ5dGVzW2tNYXhWYXJpbnRC
eXRlc107Ci0gICAgaW50IHNpemUgPSAwOwotICAgIHdoaWxlICh2YWx1ZSA+IDB4N0YpIHsKLSAg
ICAgIGJ5dGVzW3NpemUrK10gPSAoc3RhdGljX2Nhc3Q8dWludDg+KHZhbHVlKSAmIDB4N0YpIHwg
MHg4MDsKLSAgICAgIHZhbHVlID4+PSA3OwotICAgIH0KLSAgICBieXRlc1tzaXplKytdID0gc3Rh
dGljX2Nhc3Q8dWludDg+KHZhbHVlKSAmIDB4N0Y7Ci0gICAgV3JpdGVSYXcoYnl0ZXMsIHNpemUp
OwotICB9Ci19Ci0KLXVpbnQ4KiBDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVWYXJpbnQ2NFRvQXJy
YXkoCi0gICAgdWludDY0IHZhbHVlLCB1aW50OCogdGFyZ2V0KSB7Ci0gIHJldHVybiBXcml0ZVZh
cmludDY0VG9BcnJheUlubGluZSh2YWx1ZSwgdGFyZ2V0KTsKLX0KLQotYm9vbCBDb2RlZE91dHB1
dFN0cmVhbTo6UmVmcmVzaCgpIHsKLSAgdm9pZCogdm9pZF9idWZmZXI7Ci0gIGlmIChvdXRwdXRf
LT5OZXh0KCZ2b2lkX2J1ZmZlciwgJmJ1ZmZlcl9zaXplXykpIHsKLSAgICBidWZmZXJfID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OCo+KHZvaWRfYnVmZmVyKTsKLSAgICB0b3RhbF9ieXRlc18gKz0g
YnVmZmVyX3NpemVfOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIGJ1ZmZlcl8g
PSBOVUxMOwotICAgIGJ1ZmZlcl9zaXplXyA9IDA7Ci0gICAgaGFkX2Vycm9yXyA9IHRydWU7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLWludCBDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50
U2l6ZTMyRmFsbGJhY2sodWludDMyIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA8ICgxIDw8IDcpKSB7
Ci0gICAgcmV0dXJuIDE7Ci0gIH0gZWxzZSBpZiAodmFsdWUgPCAoMSA8PCAxNCkpIHsKLSAgICBy
ZXR1cm4gMjsKLSAgfSBlbHNlIGlmICh2YWx1ZSA8ICgxIDw8IDIxKSkgewotICAgIHJldHVybiAz
OwotICB9IGVsc2UgaWYgKHZhbHVlIDwgKDEgPDwgMjgpKSB7Ci0gICAgcmV0dXJuIDQ7Ci0gIH0g
ZWxzZSB7Ci0gICAgcmV0dXJuIDU7Ci0gIH0KLX0KLQotaW50IENvZGVkT3V0cHV0U3RyZWFtOjpW
YXJpbnRTaXplNjQodWludDY0IHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA8ICgxdWxsIDw8IDM1KSkg
ewotICAgIGlmICh2YWx1ZSA8ICgxdWxsIDw8IDcpKSB7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9
IGVsc2UgaWYgKHZhbHVlIDwgKDF1bGwgPDwgMTQpKSB7Ci0gICAgICByZXR1cm4gMjsKLSAgICB9
IGVsc2UgaWYgKHZhbHVlIDwgKDF1bGwgPDwgMjEpKSB7Ci0gICAgICByZXR1cm4gMzsKLSAgICB9
IGVsc2UgaWYgKHZhbHVlIDwgKDF1bGwgPDwgMjgpKSB7Ci0gICAgICByZXR1cm4gNDsKLSAgICB9
IGVsc2UgewotICAgICAgcmV0dXJuIDU7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmICh2YWx1
ZSA8ICgxdWxsIDw8IDQyKSkgewotICAgICAgcmV0dXJuIDY7Ci0gICAgfSBlbHNlIGlmICh2YWx1
ZSA8ICgxdWxsIDw8IDQ5KSkgewotICAgICAgcmV0dXJuIDc7Ci0gICAgfSBlbHNlIGlmICh2YWx1
ZSA8ICgxdWxsIDw8IDU2KSkgewotICAgICAgcmV0dXJuIDg7Ci0gICAgfSBlbHNlIGlmICh2YWx1
ZSA8ICgxdWxsIDw8IDYzKSkgewotICAgICAgcmV0dXJuIDk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHJldHVybiAxMDsKLSAgICB9Ci0gIH0KLX0KLQotdWludDgqIENvZGVkT3V0cHV0U3RyZWFtOjpX
cml0ZVN0cmluZ1dpdGhTaXplVG9BcnJheShjb25zdCBzdHJpbmcmIHN0ciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDgqIHRhcmdldCkg
ewotICBHT09HTEVfRENIRUNLX0xFKHN0ci5zaXplKCksIGt1aW50MzJtYXgpOwotICB0YXJnZXQg
PSBXcml0ZVZhcmludDMyVG9BcnJheShzdHIuc2l6ZSgpLCB0YXJnZXQpOwotICByZXR1cm4gV3Jp
dGVTdHJpbmdUb0FycmF5KHN0ciwgdGFyZ2V0KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGlvCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9pby9jb2RlZF9zdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgx
YTMzYWM2YjI1YzQ1OTgxOWZhNGM0OGEwYjg4NTY3NWUxOTRjZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vY29kZWRf
c3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjk0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50
b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24g
YnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBU
aGlzIGZpbGUgY29udGFpbnMgdGhlIENvZGVkSW5wdXRTdHJlYW0gYW5kIENvZGVkT3V0cHV0U3Ry
ZWFtIGNsYXNzZXMsCi0vLyB3aGljaCB3cmFwIGEgWmVyb0NvcHlJbnB1dFN0cmVhbSBvciBaZXJv
Q29weU91dHB1dFN0cmVhbSwgcmVzcGVjdGl2ZWx5LAotLy8gYW5kIGFsbG93IHlvdSB0byByZWFk
IG9yIHdyaXRlIGluZGl2aWR1YWwgcGllY2VzIG9mIGRhdGEgaW4gdmFyaW91cwotLy8gZm9ybWF0
cy4gIEluIHBhcnRpY3VsYXIsIHRoZXNlIGltcGxlbWVudCB0aGUgdmFyaW50IGVuY29kaW5nIGZv
cgotLy8gaW50ZWdlcnMsIGEgc2ltcGxlIHZhcmlhYmxlLWxlbmd0aCBlbmNvZGluZyBpbiB3aGlj
aCBzbWFsbGVyIG51bWJlcnMKLS8vIHRha2UgZmV3ZXIgYnl0ZXMuCi0vLwotLy8gVHlwaWNhbGx5
IHRoZXNlIGNsYXNzZXMgd2lsbCBvbmx5IGJlIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgcHJvdG9j
b2wKLS8vIGJ1ZmZlciBsaWJyYXJ5IGluIG9yZGVyIHRvIGVuY29kZSBhbmQgZGVjb2RlIHByb3Rv
Y29sIGJ1ZmZlcnMuICBDbGllbnRzCi0vLyBvZiB0aGUgbGlicmFyeSBvbmx5IG5lZWQgdG8ga25v
dyBhYm91dCB0aGlzIGNsYXNzIGlmIHRoZXkgd2lzaCB0byB3cml0ZQotLy8gY3VzdG9tIG1lc3Nh
Z2UgcGFyc2luZyBvciBzZXJpYWxpemF0aW9uIHByb2NlZHVyZXMuCi0vLwotLy8gQ29kZWRPdXRw
dXRTdHJlYW0gZXhhbXBsZToKLS8vICAgLy8gV3JpdGUgc29tZSBkYXRhIHRvICJteWZpbGUiLiAg
Rmlyc3Qgd2Ugd3JpdGUgYSA0LWJ5dGUgIm1hZ2ljIG51bWJlciIKLS8vICAgLy8gdG8gaWRlbnRp
ZnkgdGhlIGZpbGUgdHlwZSwgdGhlbiB3cml0ZSBhIGxlbmd0aC1kZWxpbWl0ZWQgc3RyaW5nLiAg
VGhlCi0vLyAgIC8vIHN0cmluZyBpcyBjb21wb3NlZCBvZiBhIHZhcmludCBnaXZpbmcgdGhlIGxl
bmd0aCBmb2xsb3dlZCBieSB0aGUgcmF3Ci0vLyAgIC8vIGJ5dGVzLgotLy8gICBpbnQgZmQgPSBv
cGVuKCJteWZpbGUiLCBPX0NSRUFUIHwgT19XUk9OTFkpOwotLy8gICBaZXJvQ29weU91dHB1dFN0
cmVhbSogcmF3X291dHB1dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZkKTsKLS8vICAgQ29kZWRP
dXRwdXRTdHJlYW0qIGNvZGVkX291dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShyYXdfb3V0
cHV0KTsKLS8vCi0vLyAgIGludCBtYWdpY19udW1iZXIgPSAxMjM0OwotLy8gICBjaGFyIHRleHRb
XSA9ICJIZWxsbyB3b3JsZCEiOwotLy8gICBjb2RlZF9vdXRwdXQtPldyaXRlTGl0dGxlRW5kaWFu
MzIobWFnaWNfbnVtYmVyKTsKLS8vICAgY29kZWRfb3V0cHV0LT5Xcml0ZVZhcmludDMyKHN0cmxl
bih0ZXh0KSk7Ci0vLyAgIGNvZGVkX291dHB1dC0+V3JpdGVSYXcodGV4dCwgc3RybGVuKHRleHQp
KTsKLS8vCi0vLyAgIGRlbGV0ZSBjb2RlZF9vdXRwdXQ7Ci0vLyAgIGRlbGV0ZSByYXdfb3V0cHV0
OwotLy8gICBjbG9zZShmZCk7Ci0vLwotLy8gQ29kZWRJbnB1dFN0cmVhbSBleGFtcGxlOgotLy8g
ICAvLyBSZWFkIGEgZmlsZSBjcmVhdGVkIGJ5IHRoZSBhYm92ZSBjb2RlLgotLy8gICBpbnQgZmQg
PSBvcGVuKCJteWZpbGUiLCBPX1JET05MWSk7Ci0vLyAgIFplcm9Db3B5SW5wdXRTdHJlYW0qIHJh
d19pbnB1dCA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmQpOwotLy8gICBDb2RlZElucHV0U3RyZWFt
IGNvZGVkX2lucHV0ID0gbmV3IENvZGVkSW5wdXRTdHJlYW0ocmF3X2lucHV0KTsKLS8vCi0vLyAg
IGNvZGVkX2lucHV0LT5SZWFkTGl0dGxlRW5kaWFuMzIoJm1hZ2ljX251bWJlcik7Ci0vLyAgIGlm
IChtYWdpY19udW1iZXIgIT0gMTIzNCkgewotLy8gICAgIGNlcnIgPDwgIkZpbGUgbm90IGluIGV4
cGVjdGVkIGZvcm1hdC4iIDw8IGVuZGw7Ci0vLyAgICAgcmV0dXJuOwotLy8gICB9Ci0vLwotLy8g
ICB1aW50MzIgc2l6ZTsKLS8vICAgY29kZWRfaW5wdXQtPlJlYWRWYXJpbnQzMigmc2l6ZSk7Ci0v
LwotLy8gICBjaGFyKiB0ZXh0ID0gbmV3IGNoYXJbc2l6ZSArIDFdOwotLy8gICBjb2RlZF9pbnB1
dC0+UmVhZFJhdyhidWZmZXIsIHNpemUpOwotLy8gICB0ZXh0W3NpemVdID0gJ1wwJzsKLS8vCi0v
LyAgIGRlbGV0ZSBjb2RlZF9pbnB1dDsKLS8vICAgZGVsZXRlIHJhd19pbnB1dDsKLS8vICAgY2xv
c2UoZmQpOwotLy8KLS8vICAgY291dCA8PCAiVGV4dCBpczogIiA8PCB0ZXh0IDw8IGVuZGw7Ci0v
LyAgIGRlbGV0ZSBbXSB0ZXh0OwotLy8KLS8vIEZvciB0aG9zZSB3aG8gYXJlIGludGVyZXN0ZWQs
IHZhcmludCBlbmNvZGluZyBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6Ci0vLwotLy8gVGhlIGVuY29k
aW5nIG9wZXJhdGVzIG9uIHVuc2lnbmVkIGludGVnZXJzIG9mIHVwIHRvIDY0IGJpdHMgaW4gbGVu
Z3RoLgotLy8gRWFjaCBieXRlIG9mIHRoZSBlbmNvZGVkIHZhbHVlIGhhcyB0aGUgZm9ybWF0Ogot
Ly8gKiBiaXRzIDAtNjogU2V2ZW4gYml0cyBvZiB0aGUgbnVtYmVyIGJlaW5nIGVuY29kZWQuCi0v
LyAqIGJpdCA3OiBaZXJvIGlmIHRoaXMgaXMgdGhlIGxhc3QgYnl0ZSBpbiB0aGUgZW5jb2Rpbmcg
KGluIHdoaWNoCi0vLyAgIGNhc2UgYWxsIHJlbWFpbmluZyBiaXRzIG9mIHRoZSBudW1iZXIgYXJl
IHplcm8pIG9yIDEgaWYKLS8vICAgbW9yZSBieXRlcyBmb2xsb3cuCi0vLyBUaGUgZmlyc3QgYnl0
ZSBjb250YWlucyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgNyBiaXRzIG9mIHRoZSBudW1iZXIsIHRo
ZQotLy8gc2Vjb25kIGJ5dGUgKGlmIHByZXNlbnQpIGNvbnRhaW5zIHRoZSBuZXh0LWxlYXN0LXNp
Z25pZmljYW50IDcgYml0cywKLS8vIGFuZCBzbyBvbi4gIFNvLCB0aGUgYmluYXJ5IG51bWJlciAx
MDExMDAwMTAxMDExIHdvdWxkIGJlIGVuY29kZWQgaW4gdHdvCi0vLyBieXRlcyBhcyAiMTAxMDEw
MTEgMDAxMDExMDAiLgotLy8KLS8vIEluIHRoZW9yeSwgdmFyaW50IGNvdWxkIGJlIHVzZWQgdG8g
ZW5jb2RlIGludGVnZXJzIG9mIGFueSBsZW5ndGguCi0vLyBIb3dldmVyLCBmb3IgcHJhY3RpY2Fs
aXR5IHdlIHNldCBhIGxpbWl0IGF0IDY0IGJpdHMuICBUaGUgbWF4aW11bSBlbmNvZGVkCi0vLyBs
ZW5ndGggb2YgYSBudW1iZXIgaXMgdGh1cyAxMCBieXRlcy4KLQotI2lmbmRlZiBHT09HTEVfUFJP
VE9CVUZfSU9fQ09ERURfU1RSRUFNX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfSU9fQ09E
RURfU1RSRUFNX0hfXwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgot
I2luY2x1ZGUgPHV0aWxpdHk+Ci0jaWZkZWYgX01TQ19WRVIKLSAgLy8gQXNzdW1pbmcgd2luZG93
cyBpcyBhbHdheXMgbGl0dGxlLWVuZGlhbi4KLSAgI2lmICFkZWZpbmVkKFBST1RPQlVGX0RJU0FC
TEVfTElUVExFX0VORElBTl9PUFRfRk9SX1RFU1QpCi0gICAgI2RlZmluZSBQUk9UT0JVRl9MSVRU
TEVfRU5ESUFOIDEKLSAgI2VuZGlmCi0gICNpZiBfTVNDX1ZFUiA+PSAxMzAwICYmICFkZWZpbmVk
KF9fSU5URUxfQ09NUElMRVIpCi0gICAgLy8gSWYgTVNWQyBoYXMgIi9SVENjIiBzZXQsIGl0IHdp
bGwgY29tcGxhaW4gYWJvdXQgdHJ1bmNhdGluZyBjYXN0cyBhdAotICAgIC8vIHJ1bnRpbWUuICBU
aGlzIGZpbGUgY29udGFpbnMgc29tZSBpbnRlbnRpb25hbCB0cnVuY2F0aW5nIGNhc3RzLgotICAg
ICNwcmFnbWEgcnVudGltZV9jaGVja3MoImMiLCBvZmYpCi0gICNlbmRpZgotI2Vsc2UKLSAgI2lu
Y2x1ZGUgPHN5cy9wYXJhbS5oPiAgIC8vIF9fQllURV9PUkRFUgotICAjaWYgKChkZWZpbmVkKF9f
TElUVExFX0VORElBTl9fKSAmJiAhZGVmaW5lZChfX0JJR19FTkRJQU5fXykpIHx8IFwKLSAgICAg
ICAgIChkZWZpbmVkKF9fQllURV9PUkRFUikgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VO
RElBTikpICYmIFwKLSAgICAgICFkZWZpbmVkKFBST1RPQlVGX0RJU0FCTEVfTElUVExFX0VORElB
Tl9PUFRfRk9SX1RFU1QpCi0gICAgI2RlZmluZSBQUk9UT0JVRl9MSVRUTEVfRU5ESUFOIDEKLSAg
I2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+
Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotCi1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1jbGFzcyBE
ZXNjcmlwdG9yUG9vbDsKLWNsYXNzIE1lc3NhZ2VGYWN0b3J5OwotCi1uYW1lc3BhY2UgaW8gewot
Ci0vLyBEZWZpbmVkIGluIHRoaXMgZmlsZS4KLWNsYXNzIENvZGVkSW5wdXRTdHJlYW07Ci1jbGFz
cyBDb2RlZE91dHB1dFN0cmVhbTsKLQotLy8gRGVmaW5lZCBpbiBvdGhlciBmaWxlcy4KLWNsYXNz
IFplcm9Db3B5SW5wdXRTdHJlYW07ICAgICAgICAgICAvLyB6ZXJvX2NvcHlfc3RyZWFtLmgKLWNs
YXNzIFplcm9Db3B5T3V0cHV0U3RyZWFtOyAgICAgICAgICAvLyB6ZXJvX2NvcHlfc3RyZWFtLmgK
LQotLy8gQ2xhc3Mgd2hpY2ggcmVhZHMgYW5kIGRlY29kZXMgYmluYXJ5IGRhdGEgd2hpY2ggaXMg
Y29tcG9zZWQgb2YgdmFyaW50LQotLy8gZW5jb2RlZCBpbnRlZ2VycyBhbmQgZml4ZWQtd2lkdGgg
cGllY2VzLiAgV3JhcHMgYSBaZXJvQ29weUlucHV0U3RyZWFtLgotLy8gTW9zdCB1c2VycyB3aWxs
IG5vdCBuZWVkIHRvIGRlYWwgd2l0aCBDb2RlZElucHV0U3RyZWFtLgotLy8KLS8vIE1vc3QgbWV0
aG9kcyBvZiBDb2RlZElucHV0U3RyZWFtIHRoYXQgcmV0dXJuIGEgYm9vbCByZXR1cm4gZmFsc2Ug
aWYgYW4KLS8vIHVuZGVybHlpbmcgSS9PIGVycm9yIG9jY3VycyBvciBpZiB0aGUgZGF0YSBpcyBt
YWxmb3JtZWQuICBPbmNlIHN1Y2ggYQotLy8gZmFpbHVyZSBvY2N1cnMsIHRoZSBDb2RlZElucHV0
U3RyZWFtIGlzIGJyb2tlbiBhbmQgaXMgbm8gbG9uZ2VyIHVzZWZ1bC4KLWNsYXNzIExJQlBST1RP
QlVGX0VYUE9SVCBDb2RlZElucHV0U3RyZWFtIHsKLSBwdWJsaWM6Ci0gIC8vIENyZWF0ZSBhIENv
ZGVkSW5wdXRTdHJlYW0gdGhhdCByZWFkcyBmcm9tIHRoZSBnaXZlbiBaZXJvQ29weUlucHV0U3Ry
ZWFtLgotICBleHBsaWNpdCBDb2RlZElucHV0U3RyZWFtKFplcm9Db3B5SW5wdXRTdHJlYW0qIGlu
cHV0KTsKLQotICAvLyBDcmVhdGUgYSBDb2RlZElucHV0U3RyZWFtIHRoYXQgcmVhZHMgZnJvbSB0
aGUgZ2l2ZW4gZmxhdCBhcnJheS4gIFRoaXMgaXMKLSAgLy8gZmFzdGVyIHRoYW4gdXNpbmcgYW4g
QXJyYXlJbnB1dFN0cmVhbS4gIFB1c2hMaW1pdChzaXplKSBpcyBpbXBsaWVkIGJ5Ci0gIC8vIHRo
aXMgY29uc3RydWN0b3IuCi0gIGV4cGxpY2l0IENvZGVkSW5wdXRTdHJlYW0oY29uc3QgdWludDgq
IGJ1ZmZlciwgaW50IHNpemUpOwotCi0gIC8vIERlc3Ryb3kgdGhlIENvZGVkSW5wdXRTdHJlYW0g
YW5kIHBvc2l0aW9uIHRoZSB1bmRlcmx5aW5nCi0gIC8vIFplcm9Db3B5SW5wdXRTdHJlYW0gYXQg
dGhlIGZpcnN0IHVucmVhZCBieXRlLiAgSWYgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUKLSAgLy8g
cmVhZGluZyAoY2F1c2luZyBhIG1ldGhvZCB0byByZXR1cm4gZmFsc2UpLCB0aGVuIHRoZSBleGFj
dCBwb3NpdGlvbiBvZgotICAvLyB0aGUgaW5wdXQgc3RyZWFtIG1heSBiZSBhbnl3aGVyZSBiZXR3
ZWVuIHRoZSBsYXN0IHZhbHVlIHRoYXQgd2FzIHJlYWQKLSAgLy8gc3VjY2Vzc2Z1bGx5IGFuZCB0
aGUgc3RyZWFtJ3MgYnl0ZSBsaW1pdC4KLSAgfkNvZGVkSW5wdXRTdHJlYW0oKTsKLQotICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGlzIENvZGVkSW5wdXRTdHJlYW0gcmVhZHMgZnJvbSBhIGZsYXQgYXJy
YXkgaW5zdGVhZCBvZgotICAvLyBhIFplcm9Db3B5SW5wdXRTdHJlYW0uCi0gIGlubGluZSBib29s
IElzRmxhdCgpIGNvbnN0OwotCi0gIC8vIFNraXBzIGEgbnVtYmVyIG9mIGJ5dGVzLiAgUmV0dXJu
cyBmYWxzZSBpZiBhbiB1bmRlcmx5aW5nIHJlYWQgZXJyb3IKLSAgLy8gb2NjdXJzLgotICBib29s
IFNraXAoaW50IGNvdW50KTsKLQotICAvLyBTZXRzICpkYXRhIHRvIHBvaW50IGRpcmVjdGx5IGF0
IHRoZSB1bnJlYWQgcGFydCBvZiB0aGUgQ29kZWRJbnB1dFN0cmVhbSdzCi0gIC8vIHVuZGVybHlp
bmcgYnVmZmVyLCBhbmQgKnNpemUgdG8gdGhlIHNpemUgb2YgdGhhdCBidWZmZXIsIGJ1dCBkb2Vz
IG5vdAotICAvLyBhZHZhbmNlIHRoZSBzdHJlYW0ncyBjdXJyZW50IHBvc2l0aW9uLiAgVGhpcyB3
aWxsIGFsd2F5cyBlaXRoZXIgcHJvZHVjZQotICAvLyBhIG5vbi1lbXB0eSBidWZmZXIgb3IgcmV0
dXJuIGZhbHNlLiAgSWYgdGhlIGNhbGxlciBjb25zdW1lcyBhbnkgb2YKLSAgLy8gdGhpcyBkYXRh
LCBpdCBzaG91bGQgdGhlbiBjYWxsIFNraXAoKSB0byBza2lwIG92ZXIgdGhlIGNvbnN1bWVkIGJ5
dGVzLgotICAvLyBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBleHRlcm5hbCBm
YXN0IHBhcnNpbmcgcm91dGluZXMgZm9yCi0gIC8vIHR5cGVzIG9mIGRhdGEgbm90IGNvdmVyZWQg
YnkgdGhlIENvZGVkSW5wdXRTdHJlYW0gaW50ZXJmYWNlLgotICBib29sIEdldERpcmVjdEJ1ZmZl
clBvaW50ZXIoY29uc3Qgdm9pZCoqIGRhdGEsIGludCogc2l6ZSk7Ci0KLSAgLy8gTGlrZSBHZXRE
aXJlY3RCdWZmZXJQb2ludGVyLCBidXQgdGhpcyBtZXRob2QgaXMgaW5saW5lZCwgYW5kIGRvZXMg
bm90Ci0gIC8vIGF0dGVtcHQgdG8gUmVmcmVzaCgpIGlmIHRoZSBidWZmZXIgaXMgY3VycmVudGx5
IGVtcHR5LgotICBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUgdm9pZCBHZXREaXJlY3RC
dWZmZXJQb2ludGVySW5saW5lKGNvbnN0IHZvaWQqKiBkYXRhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzaXplKTsKLQot
ICAvLyBSZWFkIHJhdyBieXRlcywgY29weWluZyB0aGVtIGludG8gdGhlIGdpdmVuIGJ1ZmZlci4K
LSAgYm9vbCBSZWFkUmF3KHZvaWQqIGJ1ZmZlciwgaW50IHNpemUpOwotCi0gIC8vIExpa2UgdGhl
IGFib3ZlLCB3aXRoIGlubGluZWQgb3B0aW1pemF0aW9ucy4gVGhpcyBzaG91bGQgb25seSBiZSB1
c2VkCi0gIC8vIGJ5IHRoZSBwcm90b2J1ZiBpbXBsZW1lbnRhdGlvbi4KLSAgR09PR0xFX0FUVFJJ
QlVURV9BTFdBWVNfSU5MSU5FIGJvb2wgSW50ZXJuYWxSZWFkUmF3SW5saW5lKHZvaWQqIGJ1ZmZl
ciwgaW50IHNpemUpOwotCi0gIC8vIExpa2UgUmVhZFJhdywgYnV0IHJlYWRzIGludG8gYSBzdHJp
bmcuCi0gIC8vCi0gIC8vIEltcGxlbWVudGF0aW9uIE5vdGU6ICBSZWFkU3RyaW5nKCkgZ3Jvd3Mg
dGhlIHN0cmluZyBncmFkdWFsbHkgYXMgaXQKLSAgLy8gcmVhZHMgaW4gdGhlIGRhdGEsIHJhdGhl
ciB0aGFuIGFsbG9jYXRpbmcgdGhlIGVudGlyZSByZXF1ZXN0ZWQgc2l6ZQotICAvLyB1cGZyb250
LiAgVGhpcyBwcmV2ZW50cyBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzIGluIHdoaWNoIGEgY2xp
ZW50Ci0gIC8vIGNvdWxkIGNsYWltIHRoYXQgYSBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgTUFYX0lO
VCBieXRlcyBsb25nIGluIG9yZGVyIHRvCi0gIC8vIGNyYXNoIHRoZSBzZXJ2ZXIgYmVjYXVzZSBp
dCBjYW4ndCBhbGxvY2F0ZSB0aGlzIG11Y2ggc3BhY2UgYXQgb25jZS4KLSAgYm9vbCBSZWFkU3Ry
aW5nKHN0cmluZyogYnVmZmVyLCBpbnQgc2l6ZSk7Ci0gIC8vIExpa2UgdGhlIGFib3ZlLCB3aXRo
IGlubGluZWQgb3B0aW1pemF0aW9ucy4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkCi0gIC8vIGJ5
IHRoZSBwcm90b2J1ZiBpbXBsZW1lbnRhdGlvbi4KLSAgR09PR0xFX0FUVFJJQlVURV9BTFdBWVNf
SU5MSU5FIGJvb2wgSW50ZXJuYWxSZWFkU3RyaW5nSW5saW5lKHN0cmluZyogYnVmZmVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c2l6ZSk7Ci0KLQotICAvLyBSZWFkIGEgMzItYml0IGxpdHRsZS1lbmRpYW4gaW50ZWdlci4KLSAg
Ym9vbCBSZWFkTGl0dGxlRW5kaWFuMzIodWludDMyKiB2YWx1ZSk7Ci0gIC8vIFJlYWQgYSA2NC1i
aXQgbGl0dGxlLWVuZGlhbiBpbnRlZ2VyLgotICBib29sIFJlYWRMaXR0bGVFbmRpYW42NCh1aW50
NjQqIHZhbHVlKTsKLQotICAvLyBUaGVzZSBtZXRob2RzIHJlYWQgZnJvbSBhbiBleHRlcm5hbGx5
IHByb3ZpZGVkIGJ1ZmZlci4gVGhlIGNhbGxlciBpcwotICAvLyByZXNwb25zaWJsZSBmb3IgZW5z
dXJpbmcgdGhhdCB0aGUgYnVmZmVyIGhhcyBzdWZmaWNpZW50IHNwYWNlLgotICAvLyBSZWFkIGEg
MzItYml0IGxpdHRsZS1lbmRpYW4gaW50ZWdlci4KLSAgc3RhdGljIGNvbnN0IHVpbnQ4KiBSZWFk
TGl0dGxlRW5kaWFuMzJGcm9tQXJyYXkoY29uc3QgdWludDgqIGJ1ZmZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMiogdmFsdWUpOwot
ICAvLyBSZWFkIGEgNjQtYml0IGxpdHRsZS1lbmRpYW4gaW50ZWdlci4KLSAgc3RhdGljIGNvbnN0
IHVpbnQ4KiBSZWFkTGl0dGxlRW5kaWFuNjRGcm9tQXJyYXkoY29uc3QgdWludDgqIGJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2
NCogdmFsdWUpOwotCi0gIC8vIFJlYWQgYW4gdW5zaWduZWQgaW50ZWdlciB3aXRoIFZhcmludCBl
bmNvZGluZywgdHJ1bmNhdGluZyB0byAzMiBiaXRzLgotICAvLyBSZWFkaW5nIGEgMzItYml0IHZh
bHVlIGlzIGVxdWl2YWxlbnQgdG8gcmVhZGluZyBhIDY0LWJpdCBvbmUgYW5kIGNhc3RpbmcKLSAg
Ly8gaXQgdG8gdWludDMyLCBidXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50LgotICBib29sIFJlYWRW
YXJpbnQzMih1aW50MzIqIHZhbHVlKTsKLSAgLy8gUmVhZCBhbiB1bnNpZ25lZCBpbnRlZ2VyIHdp
dGggVmFyaW50IGVuY29kaW5nLgotICBib29sIFJlYWRWYXJpbnQ2NCh1aW50NjQqIHZhbHVlKTsK
LQotICAvLyBSZWFkIGEgdGFnLiAgVGhpcyBjYWxscyBSZWFkVmFyaW50MzIoKSBhbmQgcmV0dXJu
cyB0aGUgcmVzdWx0LCBvciByZXR1cm5zCi0gIC8vIHplcm8gKHdoaWNoIGlzIG5vdCBhIHZhbGlk
IHRhZykgaWYgUmVhZFZhcmludDMyKCkgZmFpbHMuICBBbHNvLCBpdCB1cGRhdGVzCi0gIC8vIHRo
ZSBsYXN0IHRhZyB2YWx1ZSwgd2hpY2ggY2FuIGJlIGNoZWNrZWQgd2l0aCBMYXN0VGFnV2FzKCku
Ci0gIC8vIEFsd2F5cyBpbmxpbmUgYmVjYXVzZSB0aGlzIGlzIG9ubHkgY2FsbGVkIGluIG9uZSBw
bGFjZSBwZXIgcGFyc2UgbG9vcAotICAvLyBidXQgaXQgaXMgY2FsbGVkIGZvciBldmVyeSBpdGVy
YXRpb24gb2Ygc2FpZCBsb29wLCBzbyBpdCBzaG91bGQgYmUgZmFzdC4KLSAgLy8gR0NDIGRvZXNu
J3Qgd2FudCB0byBpbmxpbmUgdGhpcyBieSBkZWZhdWx0LgotICBHT09HTEVfQVRUUklCVVRFX0FM
V0FZU19JTkxJTkUgdWludDMyIFJlYWRUYWcoKTsKLQotICAvLyBUaGlzIHVzdWFsbHkgYSBmYXN0
ZXIgYWx0ZXJuYXRpdmUgdG8gUmVhZFRhZygpIHdoZW4gY3V0b2ZmIGlzIGEgbWFuaWZlc3QKLSAg
Ly8gY29uc3RhbnQuICBJdCBkb2VzIHBhcnRpY3VsYXJseSB3ZWxsIGZvciBjdXRvZmYgPj0gMTI3
LiAgVGhlIGZpcnN0IHBhcnQKLSAgLy8gb2YgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgdGFnIHRo
YXQgd2FzIHJlYWQsIHRob3VnaCBpdCBjYW4gYWxzbyBiZSAwIGluCi0gIC8vIHRoZSBjYXNlcyB3
aGVyZSBSZWFkVGFnKCkgd291bGQgcmV0dXJuIDAuICBJZiB0aGUgc2Vjb25kIHBhcnQgaXMgdHJ1
ZQotICAvLyB0aGVuIHRoZSB0YWcgaXMga25vd24gdG8gYmUgaW4gWzAsIGN1dG9mZl0uICBJZiBu
b3QsIHRoZSB0YWcgZWl0aGVyIGlzCi0gIC8vIGFib3ZlIGN1dG9mZiBvciBpcyAwLiAgKFRoZXJl
J3MgaW50ZW50aW9uYWwgd2lnZ2xlIHJvb20gd2hlbiB0YWcgaXMgMCwKLSAgLy8gYmVjYXVzZSB0
aGF0IGNhbiBhcmlzZSBpbiBzZXZlcmFsIHdheXMsIGFuZCBmb3IgYmVzdCBwZXJmb3JtYW5jZSB3
ZSB3YW50Ci0gIC8vIHRvIGF2b2lkIGFuIGV4dHJhICJpcyB0YWcgPT0gMD8iIGNoZWNrIGhlcmUu
KQotICBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUgc3RkOjpwYWlyPHVpbnQzMiwgYm9v
bD4gUmVhZFRhZ1dpdGhDdXRvZmYoCi0gICAgICB1aW50MzIgY3V0b2ZmKTsKLQotICAvLyBVc3Vh
bGx5IHJldHVybnMgdHJ1ZSBpZiBjYWxsaW5nIFJlYWRWYXJpbnQzMigpIG5vdyB3b3VsZCBwcm9k
dWNlIHRoZSBnaXZlbgotICAvLyB2YWx1ZS4gIFdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBpZiBS
ZWFkVmFyaW50MzIoKSB3b3VsZCBub3QgcmV0dXJuIHRoZQotICAvLyBnaXZlbiB2YWx1ZS4gIElm
IEV4cGVjdFRhZygpIHJldHVybnMgdHJ1ZSwgaXQgYWxzbyBhZHZhbmNlcyBwYXN0Ci0gIC8vIHRo
ZSB2YXJpbnQuICBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgdXNlIGEgY29tcGlsZS10aW1lIGNvbnN0
YW50IGFzIHRoZQotICAvLyBwYXJhbWV0ZXIuCi0gIC8vIEFsd2F5cyBpbmxpbmUgYmVjYXVzZSB0
aGlzIGNvbGxhcHNlcyB0byBhIHNtYWxsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMKLSAgLy8gd2hl
biBnaXZlbiBhIGNvbnN0YW50IHBhcmFtZXRlciwgYnV0IEdDQyBkb2Vzbid0IHdhbnQgdG8gaW5s
aW5lIGJ5IGRlZmF1bHQuCi0gIEdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSBib29sIEV4
cGVjdFRhZyh1aW50MzIgZXhwZWN0ZWQpOwotCi0gIC8vIExpa2UgYWJvdmUsIGV4Y2VwdCB0aGlz
IHJlYWRzIGZyb20gdGhlIHNwZWNpZmllZCBidWZmZXIuIFRoZSBjYWxsZXIgaXMKLSAgLy8gcmVz
cG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggdG8g
cmVhZCBhIHZhcmludAotICAvLyBvZiB0aGUgZXhwZWN0ZWQgc2l6ZS4gRm9yIGJlc3QgcGVyZm9y
bWFuY2UsIHVzZSBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBhcwotICAvLyB0aGUgZXhwZWN0ZWQg
dGFnIHBhcmFtZXRlci4KLSAgLy8KLSAgLy8gUmV0dXJucyBhIHBvaW50ZXIgYmV5b25kIHRoZSBl
eHBlY3RlZCB0YWcgaWYgaXQgd2FzIGZvdW5kLCBvciBOVUxMIGlmIGl0Ci0gIC8vIHdhcyBub3Qu
Ci0gIEdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3QgdWludDgqIEV4
cGVjdFRhZ0Zyb21BcnJheSgKLSAgICAgIGNvbnN0IHVpbnQ4KiBidWZmZXIsCi0gICAgICB1aW50
MzIgZXhwZWN0ZWQpOwotCi0gIC8vIFVzdWFsbHkgcmV0dXJucyB0cnVlIGlmIG5vIG1vcmUgYnl0
ZXMgY2FuIGJlIHJlYWQuICBBbHdheXMgcmV0dXJucyBmYWxzZQotICAvLyBpZiBtb3JlIGJ5dGVz
IGNhbiBiZSByZWFkLiAgSWYgRXhwZWN0QXRFbmQoKSByZXR1cm5zIHRydWUsIGEgc3Vic2VxdWVu
dAotICAvLyBjYWxsIHRvIExhc3RUYWdXYXMoKSB3aWxsIGFjdCBhcyBpZiBSZWFkVGFnKCkgaGFk
IGJlZW4gY2FsbGVkIGFuZCByZXR1cm5lZAotICAvLyB6ZXJvLCBhbmQgQ29uc3VtZWRFbnRpcmVN
ZXNzYWdlKCkgd2lsbCByZXR1cm4gdHJ1ZS4KLSAgYm9vbCBFeHBlY3RBdEVuZCgpOwotCi0gIC8v
IElmIHRoZSBsYXN0IGNhbGwgdG8gUmVhZFRhZygpIG9yIFJlYWRUYWdXaXRoQ3V0b2ZmKCkgcmV0
dXJuZWQgdGhlCi0gIC8vIGdpdmVuIHZhbHVlLCByZXR1cm5zIHRydWUuICBPdGhlcndpc2UsIHJl
dHVybnMgZmFsc2U7Ci0gIC8vCi0gIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgcGFyc2VycyBm
b3Igc29tZSB0eXBlcyBvZiBlbWJlZGRlZCBtZXNzYWdlcwotICAvLyAod2l0aCBmaWVsZCB0eXBl
IFRZUEVfR1JPVVApIGRvbid0IGFjdHVhbGx5IGtub3cgdGhhdCB0aGV5J3ZlIHJlYWNoZWQgdGhl
Ci0gIC8vIGVuZCBvZiBhIG1lc3NhZ2UgdW50aWwgdGhleSBzZWUgYW4gRU5ER1JPVVAgdGFnLCB3
aGljaCB3YXMgYWN0dWFsbHkgcGFydAotICAvLyBvZiB0aGUgZW5jbG9zaW5nIG1lc3NhZ2UuICBU
aGUgZW5jbG9zaW5nIG1lc3NhZ2Ugd291bGQgbGlrZSB0byBjaGVjayB0aGF0Ci0gIC8vIHRhZyB0
byBtYWtlIHN1cmUgaXQgaGFkIHRoZSByaWdodCBudW1iZXIsIHNvIGl0IGNhbGxzIExhc3RUYWdX
YXMoKSBvbgotICAvLyByZXR1cm4gZnJvbSB0aGUgZW1iZWRkZWQgcGFyc2VyIHRvIGNoZWNrLgot
ICBib29sIExhc3RUYWdXYXModWludDMyIGV4cGVjdGVkKTsKLQotICAvLyBXaGVuIHBhcnNpbmcg
bWVzc2FnZSAoYnV0IE5PVCBhIGdyb3VwKSwgdGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQKLSAg
Ly8gaW1tZWRpYXRlbHkgYWZ0ZXIgTWVyZ2VGcm9tQ29kZWRTdHJlYW0oKSByZXR1cm5zIChpZiBp
dCByZXR1cm5zIHRydWUpCi0gIC8vIHRvIGZ1cnRoZXIgdmVyaWZ5IHRoYXQgdGhlIG1lc3NhZ2Ug
ZW5kZWQgaW4gYSBsZWdpdGltYXRlIHdheS4gIEZvcgotICAvLyBleGFtcGxlLCB0aGlzIHZlcmlm
aWVzIHRoYXQgcGFyc2luZyBkaWQgbm90IGVuZCBvbiBhbiBlbmQtZ3JvdXAgdGFnLgotICAvLyBJ
dCBhbHNvIGNoZWNrcyBmb3Igc29tZSBjYXNlcyB3aGVyZSwgZHVlIHRvIG9wdGltaXphdGlvbnMs
Ci0gIC8vIE1lcmdlRnJvbUNvZGVkU3RyZWFtKCkgY2FuIGluY29ycmVjdGx5IHJldHVybiB0cnVl
LgotICBib29sIENvbnN1bWVkRW50aXJlTWVzc2FnZSgpOwotCi0gIC8vIExpbWl0cyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8v
IExpbWl0cyBhcmUgdXNlZCB3aGVuIHBhcnNpbmcgbGVuZ3RoLWRlbGltaXRlZCBlbWJlZGRlZCBt
ZXNzYWdlcy4KLSAgLy8gQWZ0ZXIgdGhlIG1lc3NhZ2UncyBsZW5ndGggaXMgcmVhZCwgUHVzaExp
bWl0KCkgaXMgdXNlZCB0byBwcmV2ZW50Ci0gIC8vIHRoZSBDb2RlZElucHV0U3RyZWFtIGZyb20g
cmVhZGluZyBiZXlvbmQgdGhhdCBsZW5ndGguICBPbmNlIHRoZQotICAvLyBlbWJlZGRlZCBtZXNz
YWdlIGhhcyBiZWVuIHBhcnNlZCwgUG9wTGltaXQoKSBpcyBjYWxsZWQgdG8gdW5kbyB0aGUKLSAg
Ly8gbGltaXQuCi0KLSAgLy8gT3BhcXVlIHR5cGUgdXNlZCB3aXRoIFB1c2hMaW1pdCgpIGFuZCBQ
b3BMaW1pdCgpLiAgRG8gbm90IG1vZGlmeQotICAvLyB2YWx1ZXMgb2YgdGhpcyB0eXBlIHlvdXJz
ZWxmLiAgVGhlIG9ubHkgcmVhc29uIHRoYXQgdGhpcyBpc24ndCBhCi0gIC8vIHN0cnVjdCB3aXRo
IHByaXZhdGUgaW50ZXJuYWxzIGlzIGZvciBlZmZpY2llbmN5LgotICB0eXBlZGVmIGludCBMaW1p
dDsKLQotICAvLyBQbGFjZXMgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhl
IHN0cmVhbSBtYXkgcmVhZCwKLSAgLy8gc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlv
bi4gIE9uY2UgdGhlIHN0cmVhbSBoaXRzIHRoaXMgbGltaXQsCi0gIC8vIGl0IHdpbGwgYWN0IGxp
a2UgdGhlIGVuZCBvZiB0aGUgaW5wdXQgaGFzIGJlZW4gcmVhY2hlZCB1bnRpbCBQb3BMaW1pdCgp
Ci0gIC8vIGlzIGNhbGxlZC4KLSAgLy8KLSAgLy8gQXMgdGhlIG5hbWVzIGltcGx5LCB0aGUgc3Ry
ZWFtIGNvbmNlcHR1YWxseSBoYXMgYSBzdGFjayBvZiBsaW1pdHMuICBUaGUKLSAgLy8gc2hvcnRl
c3QgbGltaXQgb24gdGhlIHN0YWNrIGlzIGFsd2F5cyBlbmZvcmNlZCwgZXZlbiBpZiBpdCBpcyBu
b3QgdGhlCi0gIC8vIHRvcCBsaW1pdC4KLSAgLy8KLSAgLy8gVGhlIHZhbHVlIHJldHVybmVkIGJ5
IFB1c2hMaW1pdCgpIGlzIG9wYXF1ZSB0byB0aGUgY2FsbGVyLCBhbmQgbXVzdAotICAvLyBiZSBw
YXNzZWQgdW5jaGFuZ2VkIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNhbGwgdG8gUG9wTGltaXQoKS4K
LSAgTGltaXQgUHVzaExpbWl0KGludCBieXRlX2xpbWl0KTsKLQotICAvLyBQb3BzIHRoZSBsYXN0
IGxpbWl0IHB1c2hlZCBieSBQdXNoTGltaXQoKS4gIFRoZSBpbnB1dCBtdXN0IGJlIHRoZSB2YWx1
ZQotICAvLyByZXR1cm5lZCBieSB0aGF0IGNhbGwgdG8gUHVzaExpbWl0KCkuCi0gIHZvaWQgUG9w
TGltaXQoTGltaXQgbGltaXQpOwotCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBs
ZWZ0IHVudGlsIHRoZSBuZWFyZXN0IGxpbWl0IG9uIHRoZQotICAvLyBzdGFjayBpcyBoaXQsIG9y
IC0xIGlmIG5vIGxpbWl0cyBhcmUgaW4gcGxhY2UuCi0gIGludCBCeXRlc1VudGlsTGltaXQoKSBj
b25zdDsKLQotICAvLyBSZXR1cm5zIGN1cnJlbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGJl
Z2lubmluZyBvZiB0aGUgaW5wdXQgc3RyZWFtLgotICBpbnQgQ3VycmVudFBvc2l0aW9uKCkgY29u
c3Q7Ci0KLSAgLy8gVG90YWwgQnl0ZXMgTGltaXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gVG8gcHJldmVudCBtYWxpY2lvdXMgdXNlcnMgZnJv
bSBzZW5kaW5nIGV4Y2Vzc2l2ZWx5IGxhcmdlIG1lc3NhZ2VzCi0gIC8vIGFuZCBjYXVzaW5nIGlu
dGVnZXIgb3ZlcmZsb3dzIG9yIG1lbW9yeSBleGhhdXN0aW9uLCBDb2RlZElucHV0U3RyZWFtCi0g
IC8vIGltcG9zZXMgYSBoYXJkIGxpbWl0IG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaXQg
d2lsbCByZWFkLgotCi0gIC8vIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQg
dGhpcyBDb2RlZElucHV0U3RyZWFtIHdpbGwgcmVhZAotICAvLyBiZWZvcmUgcmVmdXNpbmcgdG8g
Y29udGludWUuICBUbyBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGluIHRoZQotICAvLyBwcm90
b2NvbCBidWZmZXJzIGltcGxlbWVudGF0aW9uLCBhcyB3ZWxsIGFzIHRvIHByZXZlbnQgc2VydmVy
cyBmcm9tCi0gIC8vIGFsbG9jYXRpbmcgZW5vcm1vdXMgYW1vdW50cyBvZiBtZW1vcnkgdG8gaG9s
ZCBwYXJzZWQgbWVzc2FnZXMsIHRoZQotICAvLyBtYXhpbXVtIG1lc3NhZ2UgbGVuZ3RoIHNob3Vs
ZCBiZSBsaW1pdGVkIHRvIHRoZSBzaG9ydGVzdCBsZW5ndGggdGhhdAotICAvLyB3aWxsIG5vdCBo
YXJtIHVzYWJpbGl0eS4gIFRoZSB0aGVvcmV0aWNhbCBzaG9ydGVzdCBtZXNzYWdlIHRoYXQgY291
bGQKLSAgLy8gY2F1c2UgaW50ZWdlciBvdmVyZmxvd3MgaXMgNTEyTUIuICBUaGUgZGVmYXVsdCBs
aW1pdCBpcyA2NE1CLiAgQXBwcwotICAvLyBzaG91bGQgc2V0IHNob3J0ZXIgbGltaXRzIGlmIHBv
c3NpYmxlLiAgSWYgd2FybmluZ190aHJlc2hvbGQgaXMgbm90IC0xLAotICAvLyBhIHdhcm5pbmcg
d2lsbCBiZSBwcmludGVkIHRvIHN0ZGVyciBhZnRlciB3YXJuaW5nX3RocmVzaG9sZCBieXRlcyBh
cmUKLSAgLy8gcmVhZC4gIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbGwgbmVnYXRpdmUg
dmFsdWVzIGdldCBzcXVhc2hlZCB0byAtMSwKLSAgLy8gYXMgb3RoZXIgbmVnYXRpdmUgdmFsdWVz
IG1pZ2h0IGhhdmUgc3BlY2lhbCBpbnRlcm5hbCBtZWFuaW5ncy4KLSAgLy8gQW4gZXJyb3Igd2ls
bCBhbHdheXMgYmUgcHJpbnRlZCB0byBzdGRlcnIgaWYgdGhlIGxpbWl0IGlzIHJlYWNoZWQuCi0g
IC8vCi0gIC8vIFRoaXMgaXMgdW5yZWxhdGVkIHRvIFB1c2hMaW1pdCgpL1BvcExpbWl0KCkuCi0g
IC8vCi0gIC8vIEhpbnQ6ICBJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyBiZWNhdXNlIHlvdXIgcHJv
Z3JhbSBpcyBwcmludGluZyBhCi0gIC8vICAgd2FybmluZyBhYm91dCBkYW5nZXJvdXNseSBsYXJn
ZSBwcm90b2NvbCBtZXNzYWdlcywgeW91IG1heSBiZQotICAvLyAgIGNvbmZ1c2VkIGFib3V0IHdo
YXQgdG8gZG8gbmV4dC4gIFRoZSBiZXN0IG9wdGlvbiBpcyB0byBjaGFuZ2UgeW91cgotICAvLyAg
IGRlc2lnbiBzdWNoIHRoYXQgZXhjZXNzaXZlbHkgbGFyZ2UgbWVzc2FnZXMgYXJlIG5vdCBuZWNl
c3NhcnkuCi0gIC8vICAgRm9yIGV4YW1wbGUsIHRyeSB0byBkZXNpZ24gZmlsZSBmb3JtYXRzIHRv
IGNvbnNpc3Qgb2YgbWFueSBzbWFsbAotICAvLyAgIG1lc3NhZ2VzIHJhdGhlciB0aGFuIGEgc2lu
Z2xlIGxhcmdlIG9uZS4gIElmIHRoaXMgaXMgaW5mZWFzaWJsZSwKLSAgLy8gICB5b3Ugd2lsbCBu
ZWVkIHRvIGluY3JlYXNlIHRoZSBsaW1pdC4gIENoYW5jZXMgYXJlLCB0aG91Z2gsIHRoYXQKLSAg
Ly8gICB5b3VyIGNvZGUgbmV2ZXIgY29uc3RydWN0cyBhIENvZGVkSW5wdXRTdHJlYW0gb24gd2hp
Y2ggdGhlIGxpbWl0Ci0gIC8vICAgY2FuIGJlIHNldC4gIFlvdSBwcm9iYWJseSBwYXJzZSBtZXNz
YWdlcyBieSBjYWxsaW5nIHRoaW5ncyBsaWtlCi0gIC8vICAgTWVzc2FnZTo6UGFyc2VGcm9tU3Ry
aW5nKCkuICBJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlCi0gIC8vICAgeW91
ciBjb2RlIHRvIGluc3RlYWQgY29uc3RydWN0IHNvbWUgc29ydCBvZiBaZXJvQ29weUlucHV0U3Ry
ZWFtCi0gIC8vICAgKGUuZy4gYW4gQXJyYXlJbnB1dFN0cmVhbSksIGNvbnN0cnVjdCBhIENvZGVk
SW5wdXRTdHJlYW0gYXJvdW5kCi0gIC8vICAgdGhhdCwgdGhlbiBjYWxsIE1lc3NhZ2U6OlBhcnNl
RnJvbUNvZGVkU3RyZWFtKCkgaW5zdGVhZC4gIFRoZW4KLSAgLy8gICB5b3UgY2FuIGFkanVzdCB0
aGUgbGltaXQuICBZZXMsIGl0J3MgbW9yZSB3b3JrLCBidXQgeW91J3JlIGRvaW5nCi0gIC8vICAg
c29tZXRoaW5nIHVudXN1YWwuCi0gIHZvaWQgU2V0VG90YWxCeXRlc0xpbWl0KGludCB0b3RhbF9i
eXRlc19saW1pdCwgaW50IHdhcm5pbmdfdGhyZXNob2xkKTsKLQotICAvLyBUaGUgVG90YWwgQnl0
ZXMgTGltaXQgbWludXMgdGhlIEN1cnJlbnQgUG9zaXRpb24sIG9yIC0xIGlmIHRoZXJlCi0gIC8v
IGlzIG5vIFRvdGFsIEJ5dGVzIExpbWl0LgotICBpbnQgQnl0ZXNVbnRpbFRvdGFsQnl0ZXNMaW1p
dCgpIGNvbnN0OwotCi0gIC8vIFJlY3Vyc2lvbiBMaW1pdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIFRvIHByZXZlbnQgY29ycnVwdCBvciBt
YWxpY2lvdXMgbWVzc2FnZXMgZnJvbSBjYXVzaW5nIHN0YWNrIG92ZXJmbG93cywKLSAgLy8gd2Ug
bXVzdCBrZWVwIHRyYWNrIG9mIHRoZSBkZXB0aCBvZiByZWN1cnNpb24gd2hlbiBwYXJzaW5nIGVt
YmVkZGVkCi0gIC8vIG1lc3NhZ2VzIGFuZCBncm91cHMuICBDb2RlZElucHV0U3RyZWFtIGtlZXBz
IHRyYWNrIG9mIHRoaXMgYmVjYXVzZSBpdAotICAvLyBpcyB0aGUgb25seSBvYmplY3QgdGhhdCBp
cyBwYXNzZWQgZG93biB0aGUgc3RhY2sgZHVyaW5nIHBhcnNpbmcuCi0KLSAgLy8gU2V0cyB0aGUg
bWF4aW11bSByZWN1cnNpb24gZGVwdGguICBUaGUgZGVmYXVsdCBpcyAxMDAuCi0gIHZvaWQgU2V0
UmVjdXJzaW9uTGltaXQoaW50IGxpbWl0KTsKLQotCi0gIC8vIEluY3JlbWVudHMgdGhlIGN1cnJl
bnQgcmVjdXJzaW9uIGRlcHRoLiAgUmV0dXJucyB0cnVlIGlmIHRoZSBkZXB0aCBpcwotICAvLyB1
bmRlciB0aGUgbGltaXQsIGZhbHNlIGlmIGl0IGhhcyBnb25lIG92ZXIuCi0gIGJvb2wgSW5jcmVt
ZW50UmVjdXJzaW9uRGVwdGgoKTsKLQotICAvLyBEZWNyZW1lbnRzIHRoZSByZWN1cnNpb24gZGVw
dGggaWYgcG9zc2libGUuCi0gIHZvaWQgRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLQotICAv
LyBEZWNyZW1lbnRzIHRoZSByZWN1cnNpb24gZGVwdGggYmxpbmRseS4gIFRoaXMgaXMgZmFzdGVy
IHRoYW4KLSAgLy8gRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKS4gIEl0IHNob3VsZCBiZSB1c2Vk
IG9ubHkgaWYgYWxsIHByZXZpb3VzCi0gIC8vIGluY3JlbWVudHMgdG8gcmVjdXJzaW9uIGRlcHRo
IHdlcmUgc3VjY2Vzc2Z1bC4KLSAgdm9pZCBVbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgp
OwotCi0gIC8vIFNob3J0aGFuZCBmb3IgbWFrZV9wYWlyKFB1c2hMaW1pdChieXRlX2xpbWl0KSwg
LS1yZWN1cnNpb25fYnVkZ2V0XykuCi0gIC8vIFVzaW5nIHRoaXMgY2FuIHJlZHVjZSBjb2RlIHNp
emUgYW5kIGNvbXBsZXhpdHkgaW4gc29tZSBjYXNlcy4gIFRoZSBjYWxsZXIKLSAgLy8gaXMgZXhw
ZWN0ZWQgdG8gY2hlY2sgdGhhdCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHJlc3VsdCBpcyBub24t
bmVnYXRpdmUgKHRvCi0gIC8vIGJhaWwgb3V0IGlmIHRoZSBkZXB0aCBvZiByZWN1cnNpb24gaXMg
dG9vIGhpZ2gpIGFuZCwgaWYgYWxsIGlzIHdlbGwsIHRvCi0gIC8vIGxhdGVyIHBhc3MgdGhlIGZp
cnN0IHBhcnQgb2YgdGhlIHJlc3VsdCB0byBQb3BMaW1pdCgpIG9yIHNpbWlsYXIuCi0gIHN0ZDo6
cGFpcjxDb2RlZElucHV0U3RyZWFtOjpMaW1pdCwgaW50PiBJbmNyZW1lbnRSZWN1cnNpb25EZXB0
aEFuZFB1c2hMaW1pdCgKLSAgICAgIGludCBieXRlX2xpbWl0KTsKLQotICAvLyBTaG9ydGhhbmQg
Zm9yIFB1c2hMaW1pdChSZWFkVmFyaW50MzIoJmxlbmd0aCkgPyBsZW5ndGggOiAwKS4KLSAgTGlt
aXQgUmVhZExlbmd0aEFuZFB1c2hMaW1pdCgpOwotCi0gIC8vIEhlbHBlciB0aGF0IGlzIGVxdWl2
YWxlbnQgdG86IHsKLSAgLy8gIGJvb2wgcmVzdWx0ID0gQ29uc3VtZWRFbnRpcmVNZXNzYWdlKCk7
Ci0gIC8vICBQb3BMaW1pdChsaW1pdCk7Ci0gIC8vICBVbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25E
ZXB0aCgpOwotICAvLyAgcmV0dXJuIHJlc3VsdDsgfQotICAvLyBVc2luZyB0aGlzIGNhbiByZWR1
Y2UgY29kZSBzaXplIGFuZCBjb21wbGV4aXR5IGluIHNvbWUgY2FzZXMuCi0gIC8vIERvIG5vdCB1
c2UgdW5sZXNzIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBkZXB0aCBpcyBncmVhdGVyIHRoYW4gemVy
by4KLSAgYm9vbCBEZWNyZW1lbnRSZWN1cnNpb25EZXB0aEFuZFBvcExpbWl0KExpbWl0IGxpbWl0
KTsKLQotICAvLyBIZWxwZXIgdGhhdCBpcyBlcXVpdmFsZW50IHRvOiB7Ci0gIC8vICBib29sIHJl
c3VsdCA9IENvbnN1bWVkRW50aXJlTWVzc2FnZSgpOwotICAvLyAgUG9wTGltaXQobGltaXQpOwot
ICAvLyAgcmV0dXJuIHJlc3VsdDsgfQotICAvLyBVc2luZyB0aGlzIGNhbiByZWR1Y2UgY29kZSBz
aXplIGFuZCBjb21wbGV4aXR5IGluIHNvbWUgY2FzZXMuCi0gIGJvb2wgQ2hlY2tFbnRpcmVNZXNz
YWdlQ29uc3VtZWRBbmRQb3BMaW1pdChMaW1pdCBsaW1pdCk7Ci0KLSAgLy8gRXh0ZW5zaW9uIFJl
Z2lzdHJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
Ly8gQURWQU5DRUQgVVNBR0U6ICA5OS45JSBvZiBwZW9wbGUgY2FuIGlnbm9yZSB0aGlzIHNlY3Rp
b24uCi0gIC8vCi0gIC8vIEJ5IGRlZmF1bHQsIHdoZW4gcGFyc2luZyBleHRlbnNpb25zLCB0aGUg
cGFyc2VyIGxvb2tzIGZvciBleHRlbnNpb24KLSAgLy8gZGVmaW5pdGlvbnMgaW4gdGhlIHBvb2wg
d2hpY2ggb3ducyB0aGUgb3V0ZXIgbWVzc2FnZSdzIERlc2NyaXB0b3IuCi0gIC8vIEhvd2V2ZXIs
IHlvdSBtYXkgY2FsbCBTZXRFeHRlbnNpb25SZWdpc3RyeSgpIHRvIHByb3ZpZGUgYW4gYWx0ZXJu
YXRpdmUKLSAgLy8gcG9vbCBpbnN0ZWFkLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSwgZm9yIGV4
YW1wbGUsIHRvIHBhcnNlIGEgbWVzc2FnZQotICAvLyB1c2luZyBhIGdlbmVyYXRlZCBjbGFzcywg
YnV0IHJlcHJlc2VudCBzb21lIGV4dGVuc2lvbnMgdXNpbmcKLSAgLy8gRHluYW1pY01lc3NhZ2Uu
Ci0KLSAgLy8gU2V0IHRoZSBwb29sIHVzZWQgdG8gbG9vayB1cCBleHRlbnNpb25zLiAgTW9zdCB1
c2VycyBkbyBub3QgbmVlZCB0byBjYWxsCi0gIC8vIHRoaXMgYXMgdGhlIGNvcnJlY3QgcG9vbCB3
aWxsIGJlIGNob3NlbiBhdXRvbWF0aWNhbGx5LgotICAvLwotICAvLyBXQVJOSU5HOiAgSXQgaXMg
dmVyeSBlYXN5IHRvIG1pc3VzZSB0aGlzLiAgQ2FyZWZ1bGx5IHJlYWQgdGhlIHJlcXVpcmVtZW50
cwotICAvLyAgIGJlbG93LiAgRG8gbm90IHVzZSB0aGlzIHVubGVzcyB5b3UgYXJlIHN1cmUgeW91
IG5lZWQgaXQuICBBbG1vc3Qgbm8gb25lCi0gIC8vICAgZG9lcy4KLSAgLy8KLSAgLy8gTGV0J3Mg
c2F5IHlvdSBhcmUgcGFyc2luZyBhIG1lc3NhZ2UgaW50byBtZXNzYWdlIG9iamVjdCBtLCBhbmQg
eW91IHdhbnQKLSAgLy8gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgU2V0RXh0ZW5zaW9uUmVnaXN0cnko
KS4gIFlvdSBtdXN0IGZvbGxvdyB0aGVzZQotICAvLyByZXF1aXJlbWVudHM6Ci0gIC8vCi0gIC8v
IFRoZSBnaXZlbiBEZXNjcmlwdG9yUG9vbCBtdXN0IGNvbnRhaW4gbS0+R2V0RGVzY3JpcHRvcigp
LiAgSXQgaXMgbm90Ci0gIC8vIHN1ZmZpY2llbnQgZm9yIGl0IHRvIHNpbXBseSBjb250YWluIGEg
ZGVzY3JpcHRvciB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lCi0gIC8vIGFuZCBjb250ZW50IC0tIGl0
IG11c3QgYmUgdGhlICpleGFjdCBvYmplY3QqLiAgSW4gb3RoZXIgd29yZHM6Ci0gIC8vICAgYXNz
ZXJ0KHBvb2wtPkZpbmRNZXNzYWdlVHlwZUJ5TmFtZShtLT5HZXREZXNjcmlwdG9yKCktPmZ1bGxf
bmFtZSgpKSA9PQotICAvLyAgICAgICAgICBtLT5HZXREZXNjcmlwdG9yKCkpOwotICAvLyBUaGVy
ZSBhcmUgdHdvIHdheXMgdG8gc2F0aXNmeSB0aGlzIHJlcXVpcmVtZW50OgotICAvLyAxKSBVc2Ug
bS0+R2V0RGVzY3JpcHRvcigpLT5wb29sKCkgYXMgdGhlIHBvb2wuICBUaGlzIGlzIGdlbmVyYWxs
eSB1c2VsZXNzCi0gIC8vICAgIGJlY2F1c2UgdGhpcyBpcyB0aGUgcG9vbCB0aGF0IHdvdWxkIGJl
IHVzZWQgYW55d2F5IGlmIHlvdSBkaWRuJ3QgY2FsbAotICAvLyAgICBTZXRFeHRlbnNpb25SZWdp
c3RyeSgpIGF0IGFsbC4KLSAgLy8gMikgVXNlIGEgRGVzY3JpcHRvclBvb2wgd2hpY2ggaGFzIG0t
PkdldERlc2NyaXB0b3IoKS0+cG9vbCgpIGFzIGFuCi0gIC8vICAgICJ1bmRlcmxheSIuICBSZWFk
IHRoZSBkb2N1bWVudGF0aW9uIGZvciBEZXNjcmlwdG9yUG9vbCBmb3IgbW9yZQotICAvLyAgICBp
bmZvcm1hdGlvbiBhYm91dCB1bmRlcmxheXMuCi0gIC8vCi0gIC8vIFlvdSBtdXN0IGFsc28gcHJv
dmlkZSBhIE1lc3NhZ2VGYWN0b3J5LiAgVGhpcyBmYWN0b3J5IHdpbGwgYmUgdXNlZCB0bwotICAv
LyBjb25zdHJ1Y3QgTWVzc2FnZSBvYmplY3RzIHJlcHJlc2VudGluZyBleHRlbnNpb25zLiAgVGhl
IGZhY3RvcnkncwotICAvLyBHZXRQcm90b3R5cGUoKSBNVVNUIHJldHVybiBub24tTlVMTCBmb3Ig
YW55IERlc2NyaXB0b3Igd2hpY2ggY2FuIGJlIGZvdW5kCi0gIC8vIHRocm91Z2ggdGhlIHByb3Zp
ZGVkIHBvb2wuCi0gIC8vCi0gIC8vIElmIHRoZSBwcm92aWRlZCBmYWN0b3J5IG1pZ2h0IHJldHVy
biBpbnN0YW5jZXMgb2YgcHJvdG9jb2wtY29tcGlsZXItCi0gIC8vIGdlbmVyYXRlZCAoaS5lLiBj
b21waWxlZC1pbikgdHlwZXMsIG9yIGlmIHRoZSBvdXRlciBtZXNzYWdlIG9iamVjdCBtIGlzCi0g
IC8vIGEgZ2VuZXJhdGVkIHR5cGUsIHRoZW4gdGhlIGdpdmVuIGZhY3RvcnkgTVVTVCBoYXZlIHRo
aXMgcHJvcGVydHk6ICBJZgotICAvLyBHZXRQcm90b3R5cGUoKSBpcyBnaXZlbiBhIERlc2NyaXB0
b3Igd2hpY2ggcmVzaWRlcyBpbgotICAvLyBEZXNjcmlwdG9yUG9vbDo6Z2VuZXJhdGVkX3Bvb2wo
KSwgdGhlIGZhY3RvcnkgTVVTVCByZXR1cm4gdGhlIHNhbWUKLSAgLy8gcHJvdG90eXBlIHdoaWNo
IE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFjdG9yeSgpIHdvdWxkIHJldHVybi4gIFRoYXQK
LSAgLy8gaXMsIGdpdmVuIGEgZGVzY3JpcHRvciBmb3IgYSBnZW5lcmF0ZWQgdHlwZSwgdGhlIGZh
Y3RvcnkgbXVzdCByZXR1cm4gYW4KLSAgLy8gaW5zdGFuY2Ugb2YgdGhlIGdlbmVyYXRlZCBjbGFz
cyAoTk9UIER5bmFtaWNNZXNzYWdlKS4gIEhvd2V2ZXIsIHdoZW4KLSAgLy8gZ2l2ZW4gYSBkZXNj
cmlwdG9yIGZvciBhIHR5cGUgdGhhdCBpcyBOT1QgaW4gZ2VuZXJhdGVkX3Bvb2wsIHRoZSBmYWN0
b3J5Ci0gIC8vIGlzIGZyZWUgdG8gcmV0dXJuIGFueSBpbXBsZW1lbnRhdGlvbi4KLSAgLy8KLSAg
Ly8gVGhlIHJlYXNvbiBmb3IgdGhpcyByZXF1aXJlbWVudCBpcyB0aGF0IGdlbmVyYXRlZCBzdWIt
b2JqZWN0cyBtYXkgYmUKLSAgLy8gYWNjZXNzZWQgdmlhIHRoZSBzdGFuZGFyZCAobm9uLXJlZmxl
Y3Rpb24pIGV4dGVuc2lvbiBhY2Nlc3NvciBtZXRob2RzLAotICAvLyBhbmQgdGhlc2UgbWV0aG9k
cyB3aWxsIGRvd24tY2FzdCB0aGUgb2JqZWN0IHRvIHRoZSBnZW5lcmF0ZWQgY2xhc3MgdHlwZS4K
LSAgLy8gSWYgdGhlIG9iamVjdCBpcyBub3QgYWN0dWFsbHkgb2YgdGhhdCB0eXBlLCB0aGUgcmVz
dWx0cyB3b3VsZCBiZSB1bmRlZmluZWQuCi0gIC8vIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBhbiBl
eHRlbnNpb24gaXMgbm90IGNvbXBpbGVkIGluLCB0aGVuIHRoZXJlIGlzIG5vCi0gIC8vIHdheSB0
aGUgY29kZSBjb3VsZCBlbmQgdXAgYWNjZXNzaW5nIGl0IHZpYSB0aGUgc3RhbmRhcmQgYWNjZXNz
b3JzIC0tIHRoZQotICAvLyBvbmx5IHdheSB0byBhY2Nlc3MgdGhlIGV4dGVuc2lvbiBpcyB2aWEg
cmVmbGVjdGlvbi4gIFdoZW4gdXNpbmcgcmVmbGVjdGlvbiwKLSAgLy8gRHluYW1pY01lc3NhZ2Ug
YW5kIGdlbmVyYXRlZCBtZXNzYWdlcyBhcmUgaW5kaXN0aW5ndWlzaGFibGUsIHNvIGl0J3MgZmlu
ZQotICAvLyBpZiB0aGVzZSBvYmplY3RzIGFyZSByZXByZXNlbnRlZCB1c2luZyBEeW5hbWljTWVz
c2FnZS4KLSAgLy8KLSAgLy8gVXNpbmcgRHluYW1pY01lc3NhZ2VGYWN0b3J5IG9uIHdoaWNoIHlv
dSBoYXZlIGNhbGxlZAotICAvLyBTZXREZWxlZ2F0ZVRvR2VuZXJhdGVkRmFjdG9yeSh0cnVlKSBz
aG91bGQgYmUgc3VmZmljaWVudCB0byBzYXRpc2Z5IHRoZQotICAvLyBhYm92ZSByZXF1aXJlbWVu
dC4KLSAgLy8KLSAgLy8gSWYgZWl0aGVyIHBvb2wgb3IgZmFjdG9yeSBpcyBOVUxMLCBib3RoIG11
c3QgYmUgTlVMTC4KLSAgLy8KLSAgLy8gTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBpZ25vcmVk
IHdoZW4gcGFyc2luZyAibGl0ZSIgbWVzc2FnZXMgYXMgdGhleSBkbwotICAvLyBub3QgaGF2ZSBk
ZXNjcmlwdG9ycy4KLSAgdm9pZCBTZXRFeHRlbnNpb25SZWdpc3RyeShjb25zdCBEZXNjcmlwdG9y
UG9vbCogcG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRmFjdG9yeSog
ZmFjdG9yeSk7Ci0KLSAgLy8gR2V0IHRoZSBEZXNjcmlwdG9yUG9vbCBzZXQgdmlhIFNldEV4dGVu
c2lvblJlZ2lzdHJ5KCksIG9yIE5VTEwgaWYgbm8gcG9vbAotICAvLyBoYXMgYmVlbiBwcm92aWRl
ZC4KLSAgY29uc3QgRGVzY3JpcHRvclBvb2wqIEdldEV4dGVuc2lvblBvb2woKTsKLQotICAvLyBH
ZXQgdGhlIE1lc3NhZ2VGYWN0b3J5IHNldCB2aWEgU2V0RXh0ZW5zaW9uUmVnaXN0cnkoKSwgb3Ig
TlVMTCBpZiBubwotICAvLyBmYWN0b3J5IGhhcyBiZWVuIHByb3ZpZGVkLgotICBNZXNzYWdlRmFj
dG9yeSogR2V0RXh0ZW5zaW9uRmFjdG9yeSgpOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FM
TE9XX0VWSUxfQ09OU1RSVUNUT1JTKENvZGVkSW5wdXRTdHJlYW0pOwotCi0gIGNvbnN0IHVpbnQ4
KiBidWZmZXJfOwotICBjb25zdCB1aW50OCogYnVmZmVyX2VuZF87ICAgICAvLyBwb2ludGVyIHRv
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgWmVyb0NvcHlJbnB1dFN0cmVhbSogaW5wdXRfOwot
ICBpbnQgdG90YWxfYnl0ZXNfcmVhZF87ICAvLyB0b3RhbCBieXRlcyByZWFkIGZyb20gaW5wdXRf
LCBpbmNsdWRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgYnVm
ZmVyCi0KLSAgLy8gSWYgdG90YWxfYnl0ZXNfcmVhZF8gc3VycGFzc2VzIElOVF9NQVgsIHdlIHJl
Y29yZCB0aGUgZXh0cmEgYnl0ZXMgaGVyZQotICAvLyBzbyB0aGF0IHdlIGNhbiBCYWNrVXAoKSBv
biBkZXN0cnVjdGlvbi4KLSAgaW50IG92ZXJmbG93X2J5dGVzXzsKLQotICAvLyBMYXN0VGFnV2Fz
KCkgc3R1ZmYuCi0gIHVpbnQzMiBsYXN0X3RhZ187ICAgICAgICAgLy8gcmVzdWx0IG9mIGxhc3Qg
UmVhZFRhZygpIG9yIFJlYWRUYWdXaXRoQ3V0b2ZmKCkuCi0KLSAgLy8gVGhpcyBpcyBzZXQgdHJ1
ZSBieSBSZWFkVGFne0ZhbGxiYWNrL1Nsb3d9KCkgaWYgaXQgaXMgY2FsbGVkIHdoZW4gZXhhY3Rs
eQotICAvLyBhdCBFT0YsIG9yIGJ5IEV4cGVjdEF0RW5kKCkgd2hlbiBpdCByZXR1cm5zIHRydWUu
ICBUaGlzIGhhcHBlbnMgd2hlbiB3ZQotICAvLyByZWFjaCB0aGUgZW5kIG9mIGEgbWVzc2FnZSBh
bmQgYXR0ZW1wdCB0byByZWFkIGFub3RoZXIgdGFnLgotICBib29sIGxlZ2l0aW1hdGVfbWVzc2Fn
ZV9lbmRfOwotCi0gIC8vIFNlZSBFbmFibGVBbGlhc2luZygpLgotICBib29sIGFsaWFzaW5nX2Vu
YWJsZWRfOwotCi0gIC8vIExpbWl0cwotICBMaW1pdCBjdXJyZW50X2xpbWl0XzsgICAvLyBpZiBw
b3NpdGlvbiA9IC0xLCBubyBsaW1pdCBpcyBhcHBsaWVkCi0KLSAgLy8gRm9yIHNpbXBsaWNpdHks
IGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBjcm9zc2VzIGEgbGltaXQgKGVpdGhlciBhIG5vcm1hbAot
ICAvLyBsaW1pdCBjcmVhdGVkIGJ5IFB1c2hMaW1pdCgpIG9yIHRoZSB0b3RhbCBieXRlcyBsaW1p
dCksIGJ1ZmZlcl9zaXplXwotICAvLyBvbmx5IHRyYWNrcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGJl
Zm9yZSB0aGF0IGxpbWl0LiAgVGhpcyBmaWVsZAotICAvLyBjb250YWlucyB0aGUgbnVtYmVyIG9m
IGJ5dGVzIGFmdGVyIGl0LiAgTm90ZSB0aGF0IHRoaXMgaW1wbGllcyB0aGF0IGlmCi0gIC8vIGJ1
ZmZlcl9zaXplXyA9PSAwIGFuZCBidWZmZXJfc2l6ZV9hZnRlcl9saW1pdF8gPiAwLCB3ZSBrbm93
IHdlJ3ZlCi0gIC8vIGhpdCBhIGxpbWl0LiAgSG93ZXZlciwgaWYgYm90aCBhcmUgemVybywgaXQg
ZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuCi0gIC8vIHdlIGFyZW4ndCBhdCBhIGxpbWl0IC0tIHRo
ZSBidWZmZXIgbWF5IGhhdmUgZW5kZWQgZXhhY3RseSBhdCB0aGUgbGltaXQuCi0gIGludCBidWZm
ZXJfc2l6ZV9hZnRlcl9saW1pdF87Ci0KLSAgLy8gTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8g
cmVhZCwgcGVyaW9kLiAgVGhpcyBpcyB1bnJlbGF0ZWQgdG8KLSAgLy8gY3VycmVudF9saW1pdF8u
ICBTZXQgdXNpbmcgU2V0VG90YWxCeXRlc0xpbWl0KCkuCi0gIGludCB0b3RhbF9ieXRlc19saW1p
dF87Ci0KLSAgLy8gSWYgcG9zaXRpdmUvMDogTGltaXQgZm9yIGJ5dGVzIHJlYWQgYWZ0ZXIgd2hp
Y2ggYSB3YXJuaW5nIGR1ZSB0byBzaXplCi0gIC8vIHNob3VsZCBiZSBsb2dnZWQuCi0gIC8vIElm
IC0xOiBQcmludGluZyBvZiB3YXJuaW5nIGRpc2FibGVkLiBDYW4gYmUgc2V0IGJ5IGNsaWVudC4K
LSAgLy8gSWYgLTI6IEludGVybmFsOiBMaW1pdCBoYXMgYmVlbiByZWFjaGVkLCBwcmludCBmdWxs
IHNpemUgd2hlbiBkZXN0cnVjdGluZy4KLSAgaW50IHRvdGFsX2J5dGVzX3dhcm5pbmdfdGhyZXNo
b2xkXzsKLQotICAvLyBDdXJyZW50IHJlY3Vyc2lvbiBidWRnZXQsIGNvbnRyb2xsZWQgYnkgSW5j
cmVtZW50UmVjdXJzaW9uRGVwdGgoKSBhbmQKLSAgLy8gc2ltaWxhci4gIFN0YXJ0cyBhdCByZWN1
cnNpb25fbGltaXRfIGFuZCBnb2VzIGRvd246IGlmIHRoaXMgcmVhY2hlcwotICAvLyAtMSB3ZSBh
cmUgb3ZlciBidWRnZXQuCi0gIGludCByZWN1cnNpb25fYnVkZ2V0XzsKLSAgLy8gUmVjdXJzaW9u
IGRlcHRoIGxpbWl0LCBzZXQgYnkgU2V0UmVjdXJzaW9uTGltaXQoKS4KLSAgaW50IHJlY3Vyc2lv
bl9saW1pdF87Ci0KLSAgLy8gU2VlIFNldEV4dGVuc2lvblJlZ2lzdHJ5KCkuCi0gIGNvbnN0IERl
c2NyaXB0b3JQb29sKiBleHRlbnNpb25fcG9vbF87Ci0gIE1lc3NhZ2VGYWN0b3J5KiBleHRlbnNp
b25fZmFjdG9yeV87Ci0KLSAgLy8gUHJpdmF0ZSBtZW1iZXIgZnVuY3Rpb25zLgotCi0gIC8vIEFk
dmFuY2UgdGhlIGJ1ZmZlciBieSBhIGdpdmVuIG51bWJlciBvZiBieXRlcy4KLSAgdm9pZCBBZHZh
bmNlKGludCBhbW91bnQpOwotCi0gIC8vIEJhY2sgdXAgaW5wdXRfIHRvIHRoZSBjdXJyZW50IGJ1
ZmZlciBwb3NpdGlvbi4KLSAgdm9pZCBCYWNrVXBJbnB1dFRvQ3VycmVudFBvc2l0aW9uKCk7Ci0K
LSAgLy8gUmVjb21wdXRlcyB0aGUgdmFsdWUgb2YgYnVmZmVyX3NpemVfYWZ0ZXJfbGltaXRfLiAg
TXVzdCBiZSBjYWxsZWQgYWZ0ZXIKLSAgLy8gY3VycmVudF9saW1pdF8gb3IgdG90YWxfYnl0ZXNf
bGltaXRfIGNoYW5nZXMuCi0gIHZvaWQgUmVjb21wdXRlQnVmZmVyTGltaXRzKCk7Ci0KLSAgLy8g
V3JpdGVzIGFuIGVycm9yIG1lc3NhZ2Ugc2F5aW5nIHRoYXQgd2UgaGl0IHRvdGFsX2J5dGVzX2xp
bWl0Xy4KLSAgdm9pZCBQcmludFRvdGFsQnl0ZXNMaW1pdEVycm9yKCk7Ci0KLSAgLy8gQ2FsbGVk
IHdoZW4gdGhlIGJ1ZmZlciBydW5zIG91dCB0byByZXF1ZXN0IG1vcmUgZGF0YS4gIEltcGxpZXMg
YW4KLSAgLy8gQWR2YW5jZShCdWZmZXJTaXplKCkpLgotICBib29sIFJlZnJlc2goKTsKLQotICAv
LyBXaGVuIHBhcnNpbmcgdmFyaW50cywgd2Ugb3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSBv
ZiBzbWFsbCB2YWx1ZXMsIGFuZAotICAvLyB0aGVuIG9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVu
IHRoZSB2YXJpbnQgZml0cyB3aXRoaW4gdGhlIGN1cnJlbnQgYnVmZmVyCi0gIC8vIHBpZWNlLiBU
aGUgRmFsbGJhY2sgbWV0aG9kIGlzIHVzZWQgd2hlbiB3ZSBjYW4ndCB1c2UgdGhlIG9uZS1ieXRl
Ci0gIC8vIG9wdGltaXphdGlvbi4gVGhlIFNsb3cgbWV0aG9kIGlzIHlldCBhbm90aGVyIGZhbGxi
YWNrIHdoZW4gdGhlIGJ1ZmZlciBpcwotICAvLyBub3QgbGFyZ2UgZW5vdWdoLiBNYWtpbmcgdGhl
IHNsb3cgcGF0aCBvdXQtb2YtbGluZSBzcGVlZHMgdXAgdGhlIGNvbW1vbgotICAvLyBjYXNlIGJ5
IDEwLTE1JS4gVGhlIHNsb3cgcGF0aCBpcyBmYWlybHkgdW5jb21tb246IGl0IG9ubHkgdHJpZ2dl
cnMgd2hlbiBhCi0gIC8vIG1lc3NhZ2UgY3Jvc3NlcyBtdWx0aXBsZSBidWZmZXJzLiAgTm90ZTog
UmVhZFZhcmludDMyRmFsbGJhY2soKSBhbmQKLSAgLy8gUmVhZFZhcmludDY0RmFsbGJhY2soKSBh
cmUgY2FsbGVkIGZyZXF1ZW50bHkgYW5kIGdlbmVyYWxseSBub3QgaW5saW5lZCwgc28KLSAgLy8g
dGhleSBoYXZlIGJlZW4gb3B0aW1pemVkIHRvIGF2b2lkICJvdXQiIHBhcmFtZXRlcnMuICBUaGUg
Zm9ybWVyIHJldHVybnMgLTEKLSAgLy8gaWYgaXQgZmFpbHMgYW5kIHRoZSB1aW50MzIgaXQgcmVh
ZCBvdGhlcndpc2UuICBUaGUgbGF0dGVyIGhhcyBhIGJvb2wKLSAgLy8gaW5kaWNhdGluZyBzdWNj
ZXNzIG9yIGZhaWx1cmUgYXMgcGFydCBvZiBpdHMgcmV0dXJuIHR5cGUuCi0gIGludDY0IFJlYWRW
YXJpbnQzMkZhbGxiYWNrKHVpbnQzMiBmaXJzdF9ieXRlX29yX3plcm8pOwotICBzdGQ6OnBhaXI8
dWludDY0LCBib29sPiBSZWFkVmFyaW50NjRGYWxsYmFjaygpOwotICBib29sIFJlYWRWYXJpbnQz
MlNsb3codWludDMyKiB2YWx1ZSk7Ci0gIGJvb2wgUmVhZFZhcmludDY0U2xvdyh1aW50NjQqIHZh
bHVlKTsKLSAgYm9vbCBSZWFkTGl0dGxlRW5kaWFuMzJGYWxsYmFjayh1aW50MzIqIHZhbHVlKTsK
LSAgYm9vbCBSZWFkTGl0dGxlRW5kaWFuNjRGYWxsYmFjayh1aW50NjQqIHZhbHVlKTsKLSAgLy8g
RmFsbGJhY2svc2xvdyBtZXRob2RzIGZvciByZWFkaW5nIHRhZ3MuIFRoZXNlIGRvIG5vdCB1cGRh
dGUgbGFzdF90YWdfLAotICAvLyBidXQgd2lsbCBzZXQgbGVnaXRpbWF0ZV9tZXNzYWdlX2VuZF8g
aWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0Ci0gIC8vIHN0cmVhbS4KLSAgdWludDMy
IFJlYWRUYWdGYWxsYmFjayh1aW50MzIgZmlyc3RfYnl0ZV9vcl96ZXJvKTsKLSAgdWludDMyIFJl
YWRUYWdTbG93KCk7Ci0gIGJvb2wgUmVhZFN0cmluZ0ZhbGxiYWNrKHN0cmluZyogYnVmZmVyLCBp
bnQgc2l6ZSk7Ci0KLSAgLy8gUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuCi0gIGludCBC
dWZmZXJTaXplKCkgY29uc3Q7Ci0KLSAgc3RhdGljIGNvbnN0IGludCBrRGVmYXVsdFRvdGFsQnl0
ZXNMaW1pdCA9IDY0IDw8IDIwOyAgLy8gNjRNQgotCi0gIHN0YXRpYyBjb25zdCBpbnQga0RlZmF1
bHRUb3RhbEJ5dGVzV2FybmluZ1RocmVzaG9sZCA9IDMyIDw8IDIwOyAgLy8gMzJNQgotCi0gIHN0
YXRpYyBpbnQgZGVmYXVsdF9yZWN1cnNpb25fbGltaXRfOyAgLy8gMTAwIGJ5IGRlZmF1bHQuCi19
OwotCi0vLyBDbGFzcyB3aGljaCBlbmNvZGVzIGFuZCB3cml0ZXMgYmluYXJ5IGRhdGEgd2hpY2gg
aXMgY29tcG9zZWQgb2YgdmFyaW50LQotLy8gZW5jb2RlZCBpbnRlZ2VycyBhbmQgZml4ZWQtd2lk
dGggcGllY2VzLiAgV3JhcHMgYSBaZXJvQ29weU91dHB1dFN0cmVhbS4KLS8vIE1vc3QgdXNlcnMg
d2lsbCBub3QgbmVlZCB0byBkZWFsIHdpdGggQ29kZWRPdXRwdXRTdHJlYW0uCi0vLwotLy8gTW9z
dCBtZXRob2RzIG9mIENvZGVkT3V0cHV0U3RyZWFtIHdoaWNoIHJldHVybiBhIGJvb2wgcmV0dXJu
IGZhbHNlIGlmIGFuCi0vLyB1bmRlcmx5aW5nIEkvTyBlcnJvciBvY2N1cnMuICBPbmNlIHN1Y2gg
YSBmYWlsdXJlIG9jY3VycywgdGhlCi0vLyBDb2RlZE91dHB1dFN0cmVhbSBpcyBicm9rZW4gYW5k
IGlzIG5vIGxvbmdlciB1c2VmdWwuIFRoZSBXcml0ZSogbWV0aG9kcyBkbwotLy8gbm90IHJldHVy
biB0aGUgc3RyZWFtIHN0YXR1cywgYnV0IHdpbGwgaW52YWxpZGF0ZSB0aGUgc3RyZWFtIGlmIGFu
IGVycm9yCi0vLyBvY2N1cnMuIFRoZSBjbGllbnQgY2FuIHByb2JlIEhhZEVycm9yKCkgdG8gZGV0
ZXJtaW5lIHRoZSBzdGF0dXMuCi0vLwotLy8gTm90ZSB0aGF0IGV2ZXJ5IG1ldGhvZCBvZiBDb2Rl
ZE91dHB1dFN0cmVhbSB3aGljaCB3cml0ZXMgc29tZSBkYXRhIGhhcwotLy8gYSBjb3JyZXNwb25k
aW5nIHN0YXRpYyAiVG9BcnJheSIgdmVyc2lvbi4gVGhlc2UgdmVyc2lvbnMgd3JpdGUgZGlyZWN0
bHkKLS8vIHRvIHRoZSBwcm92aWRlZCBidWZmZXIsIHJldHVybmluZyBhIHBvaW50ZXIgcGFzdCB0
aGUgbGFzdCB3cml0dGVuIGJ5dGUuCi0vLyBUaGV5IHJlcXVpcmUgdGhhdCB0aGUgYnVmZmVyIGhh
cyBzdWZmaWNpZW50IGNhcGFjaXR5IGZvciB0aGUgZW5jb2RlZCBkYXRhLgotLy8gVGhpcyBhbGxv
d3MgYW4gb3B0aW1pemF0aW9uIHdoZXJlIHdlIGNoZWNrIGlmIGFuIG91dHB1dCBzdHJlYW0gaGFz
IGVub3VnaAotLy8gc3BhY2UgZm9yIGFuIGVudGlyZSBtZXNzYWdlIGJlZm9yZSB3ZSBzdGFydCB3
cml0aW5nIGFuZCwgaWYgdGhlcmUgaXMsIHdlCi0vLyBjYWxsIG9ubHkgdGhlIFRvQXJyYXkgbWV0
aG9kcyB0byBhdm9pZCBkb2luZyBib3VuZCBjaGVja3MgZm9yIGVhY2gKLS8vIGluZGl2aWR1YWwg
dmFsdWUuCi0vLyBpLmUuLCBpbiB0aGUgZXhhbXBsZSBhYm92ZToKLS8vCi0vLyAgIENvZGVkT3V0
cHV0U3RyZWFtIGNvZGVkX291dHB1dCA9IG5ldyBDb2RlZE91dHB1dFN0cmVhbShyYXdfb3V0cHV0
KTsKLS8vICAgaW50IG1hZ2ljX251bWJlciA9IDEyMzQ7Ci0vLyAgIGNoYXIgdGV4dFtdID0gIkhl
bGxvIHdvcmxkISI7Ci0vLwotLy8gICBpbnQgY29kZWRfc2l6ZSA9IHNpemVvZihtYWdpY19udW1i
ZXIpICsKLS8vICAgICAgICAgICAgICAgICAgICBDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6
ZTMyKHN0cmxlbih0ZXh0KSkgKwotLy8gICAgICAgICAgICAgICAgICAgIHN0cmxlbih0ZXh0KTsK
LS8vCi0vLyAgIHVpbnQ4KiBidWZmZXIgPQotLy8gICAgICAgY29kZWRfb3V0cHV0LT5HZXREaXJl
Y3RCdWZmZXJGb3JOQnl0ZXNBbmRBZHZhbmNlKGNvZGVkX3NpemUpOwotLy8gICBpZiAoYnVmZmVy
ICE9IE5VTEwpIHsKLS8vICAgICAvLyBUaGUgb3V0cHV0IHN0cmVhbSBoYXMgZW5vdWdoIHNwYWNl
IGluIHRoZSBidWZmZXI6IHdyaXRlIGRpcmVjdGx5IHRvCi0vLyAgICAgLy8gdGhlIGFycmF5Lgot
Ly8gICAgIGJ1ZmZlciA9IENvZGVkT3V0cHV0U3RyZWFtOjpXcml0ZUxpdHRsZUVuZGlhbjMyVG9B
cnJheShtYWdpY19udW1iZXIsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcik7Ci0vLyAgICAgYnVmZmVyID0gQ29kZWRP
dXRwdXRTdHJlYW06OldyaXRlVmFyaW50MzJUb0FycmF5KHN0cmxlbih0ZXh0KSwgYnVmZmVyKTsK
LS8vICAgICBidWZmZXIgPSBDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVSYXdUb0FycmF5KHRleHQs
IHN0cmxlbih0ZXh0KSwgYnVmZmVyKTsKLS8vICAgfSBlbHNlIHsKLS8vICAgICAvLyBNYWtlIGJv
dW5kLWNoZWNrZWQgd3JpdGVzLCB3aGljaCB3aWxsIGFzayB0aGUgdW5kZXJseWluZyBzdHJlYW0g
Zm9yCi0vLyAgICAgLy8gbW9yZSBzcGFjZSBhcyBuZWVkZWQuCi0vLyAgICAgY29kZWRfb3V0cHV0
LT5Xcml0ZUxpdHRsZUVuZGlhbjMyKG1hZ2ljX251bWJlcik7Ci0vLyAgICAgY29kZWRfb3V0cHV0
LT5Xcml0ZVZhcmludDMyKHN0cmxlbih0ZXh0KSk7Ci0vLyAgICAgY29kZWRfb3V0cHV0LT5Xcml0
ZVJhdyh0ZXh0LCBzdHJsZW4odGV4dCkpOwotLy8gICB9Ci0vLwotLy8gICBkZWxldGUgY29kZWRf
b3V0cHV0OwotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIENvZGVkT3V0cHV0U3RyZWFtIHsKLSBw
dWJsaWM6Ci0gIC8vIENyZWF0ZSBhbiBDb2RlZE91dHB1dFN0cmVhbSB0aGF0IHdyaXRlcyB0byB0
aGUgZ2l2ZW4gWmVyb0NvcHlPdXRwdXRTdHJlYW0uCi0gIGV4cGxpY2l0IENvZGVkT3V0cHV0U3Ry
ZWFtKFplcm9Db3B5T3V0cHV0U3RyZWFtKiBvdXRwdXQpOwotICBDb2RlZE91dHB1dFN0cmVhbSha
ZXJvQ29weU91dHB1dFN0cmVhbSogb3V0cHV0LCBib29sIGRvX2VhZ2VyX3JlZnJlc2gpOwotCi0g
IC8vIERlc3Ryb3kgdGhlIENvZGVkT3V0cHV0U3RyZWFtIGFuZCBwb3NpdGlvbiB0aGUgdW5kZXJs
eWluZwotICAvLyBaZXJvQ29weU91dHB1dFN0cmVhbSBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFz
dCBieXRlIHdyaXR0ZW4uCi0gIH5Db2RlZE91dHB1dFN0cmVhbSgpOwotCi0gIC8vIFRyaW1zIGFu
eSB1bnVzZWQgc3BhY2UgaW4gdGhlIHVuZGVybHlpbmcgYnVmZmVyIHNvIHRoYXQgaXRzIHNpemUg
bWF0Y2hlcwotICAvLyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gYnkgdGhpcyBzdHJlYW0u
IFRoZSB1bmRlcmx5aW5nIGJ1ZmZlciB3aWxsCi0gIC8vIGF1dG9tYXRpY2FsbHkgYmUgdHJpbW1l
ZCB3aGVuIHRoaXMgc3RyZWFtIGlzIGRlc3Ryb3llZDsgdGhpcyBjYWxsIGlzIG9ubHkKLSAgLy8g
bmVjZXNzYXJ5IGlmIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBpcyBhY2Nlc3NlZCAqYmVmb3JlKiB0
aGUgc3RyZWFtIGlzCi0gIC8vIGRlc3Ryb3llZC4KLSAgdm9pZCBUcmltKCk7Ci0KLSAgLy8gU2tp
cHMgYSBudW1iZXIgb2YgYnl0ZXMsIGxlYXZpbmcgdGhlIGJ5dGVzIHVubW9kaWZpZWQgaW4gdGhl
IHVuZGVybHlpbmcKLSAgLy8gYnVmZmVyLiAgUmV0dXJucyBmYWxzZSBpZiBhbiB1bmRlcmx5aW5n
IHdyaXRlIGVycm9yIG9jY3Vycy4gIFRoaXMgaXMKLSAgLy8gbWFpbmx5IHVzZWZ1bCB3aXRoIEdl
dERpcmVjdEJ1ZmZlclBvaW50ZXIoKS4KLSAgYm9vbCBTa2lwKGludCBjb3VudCk7Ci0KLSAgLy8g
U2V0cyAqZGF0YSB0byBwb2ludCBkaXJlY3RseSBhdCB0aGUgdW53cml0dGVuIHBhcnQgb2YgdGhl
Ci0gIC8vIENvZGVkT3V0cHV0U3RyZWFtJ3MgdW5kZXJseWluZyBidWZmZXIsIGFuZCAqc2l6ZSB0
byB0aGUgc2l6ZSBvZiB0aGF0Ci0gIC8vIGJ1ZmZlciwgYnV0IGRvZXMgbm90IGFkdmFuY2UgdGhl
IHN0cmVhbSdzIGN1cnJlbnQgcG9zaXRpb24uICBUaGlzIHdpbGwKLSAgLy8gYWx3YXlzIGVpdGhl
ciBwcm9kdWNlIGEgbm9uLWVtcHR5IGJ1ZmZlciBvciByZXR1cm4gZmFsc2UuICBJZiB0aGUgY2Fs
bGVyCi0gIC8vIHdyaXRlcyBhbnkgZGF0YSB0byB0aGlzIGJ1ZmZlciwgaXQgc2hvdWxkIHRoZW4g
Y2FsbCBTa2lwKCkgdG8gc2tpcCBvdmVyCi0gIC8vIHRoZSBjb25zdW1lZCBieXRlcy4gIFRoaXMg
bWF5IGJlIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIGV4dGVybmFsIGZhc3QKLSAgLy8gc2VyaWFs
aXphdGlvbiByb3V0aW5lcyBmb3IgdHlwZXMgb2YgZGF0YSBub3QgY292ZXJlZCBieSB0aGUKLSAg
Ly8gQ29kZWRPdXRwdXRTdHJlYW0gaW50ZXJmYWNlLgotICBib29sIEdldERpcmVjdEJ1ZmZlclBv
aW50ZXIodm9pZCoqIGRhdGEsIGludCogc2l6ZSk7Ci0KLSAgLy8gSWYgdGhlcmUgYXJlIGF0IGxl
YXN0ICJzaXplIiBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLAotICAvLyBy
ZXR1cm5zIGEgcG9pbnRlciBkaXJlY3RseSBpbnRvIHRoZSBidWZmZXIgYW5kIGFkdmFuY2VzIG92
ZXIgdGhlc2UgYnl0ZXMuCi0gIC8vIFRoZSBjYWxsZXIgbWF5IHRoZW4gd3JpdGUgZGlyZWN0bHkg
aW50byB0aGlzIGJ1ZmZlciAoZS5nLiB1c2luZyB0aGUKLSAgLy8gKlRvQXJyYXkgc3RhdGljIG1l
dGhvZHMpIHJhdGhlciB0aGFuIGdvIHRocm91Z2ggQ29kZWRPdXRwdXRTdHJlYW0uICBJZgotICAv
LyB0aGVyZSBhcmUgbm90IGVub3VnaCBieXRlcyBhdmFpbGFibGUsIHJldHVybnMgTlVMTC4gIFRo
ZSByZXR1cm4gcG9pbnRlciBpcwotICAvLyBpbnZhbGlkYXRlZCBhcyBzb29uIGFzIGFueSBvdGhl
ciBub24tY29uc3QgbWV0aG9kIG9mIENvZGVkT3V0cHV0U3RyZWFtCi0gIC8vIGlzIGNhbGxlZC4K
LSAgaW5saW5lIHVpbnQ4KiBHZXREaXJlY3RCdWZmZXJGb3JOQnl0ZXNBbmRBZHZhbmNlKGludCBz
aXplKTsKLQotICAvLyBXcml0ZSByYXcgYnl0ZXMsIGNvcHlpbmcgdGhlbSBmcm9tIHRoZSBnaXZl
biBidWZmZXIuCi0gIHZvaWQgV3JpdGVSYXcoY29uc3Qgdm9pZCogYnVmZmVyLCBpbnQgc2l6ZSk7
Ci0gIC8vIExpa2UgV3JpdGVSYXcoKSAgYnV0IHdpbGwgdHJ5IHRvIHdyaXRlIGFsaWFzZWQgZGF0
YSBpZiBhbGlhc2luZyBpcwotICAvLyB0dXJuZWQgb24uCi0gIHZvaWQgV3JpdGVSYXdNYXliZUFs
aWFzZWQoY29uc3Qgdm9pZCogZGF0YSwgaW50IHNpemUpOwotICAvLyBMaWtlIFdyaXRlUmF3KCkg
IGJ1dCB3cml0aW5nIGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgYXJyYXkuCi0gIC8vIFRoaXMgaXMg
X25vdF8gaW5saW5lZCwgYXMgdGhlIGNvbXBpbGVyIG9mdGVuIG9wdGltaXplcyBtZW1jcHkgaW50
byBpbmxpbmUKLSAgLy8gY29weSBsb29wcy4gU2luY2UgdGhpcyBnZXRzIGNhbGxlZCBieSBldmVy
eSBmaWVsZCB3aXRoIHN0cmluZyBvciBieXRlcwotICAvLyB0eXBlLCBpbmxpbmluZyBtYXkgbGVh
ZCB0byBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBjb2RlIGJsb2F0LCB3aXRoIG9ubHkgYQotICAv
LyBtaW5vciBwZXJmb3JtYW5jZSBnYWluLgotICBzdGF0aWMgdWludDgqIFdyaXRlUmF3VG9BcnJh
eShjb25zdCB2b2lkKiBidWZmZXIsIGludCBzaXplLCB1aW50OCogdGFyZ2V0KTsKLQotICAvLyBF
cXVpdmFsZW50IHRvIFdyaXRlUmF3KHN0ci5kYXRhKCksIHN0ci5zaXplKCkpLgotICB2b2lkIFdy
aXRlU3RyaW5nKGNvbnN0IHN0cmluZyYgc3RyKTsKLSAgLy8gTGlrZSBXcml0ZVN0cmluZygpICBi
dXQgd3JpdGluZyBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IGFycmF5LgotICBzdGF0aWMgdWludDgq
IFdyaXRlU3RyaW5nVG9BcnJheShjb25zdCBzdHJpbmcmIHN0ciwgdWludDgqIHRhcmdldCk7Ci0g
IC8vIFdyaXRlIHRoZSB2YXJpbnQtZW5jb2RlZCBzaXplIG9mIHN0ciBmb2xsb3dlZCBieSBzdHIu
Ci0gIHN0YXRpYyB1aW50OCogV3JpdGVTdHJpbmdXaXRoU2l6ZVRvQXJyYXkoY29uc3Qgc3RyaW5n
JiBzdHIsIHVpbnQ4KiB0YXJnZXQpOwotCi0KLSAgLy8gSW5zdHJ1Y3RzIHRoZSBDb2RlZE91dHB1
dFN0cmVhbSB0byBhbGxvdyB0aGUgdW5kZXJseWluZwotICAvLyBaZXJvQ29weU91dHB1dFN0cmVh
bSB0byBob2xkIHBvaW50ZXJzIHRvIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUgaW5zdGVhZCBvZgot
ICAvLyBjb3B5aW5nLCBpZiBpdCBzdXBwb3J0cyBpdCAoaS5lLiBvdXRwdXQtPkFsbG93c0FsaWFz
aW5nKCkgaXMgdHJ1ZSkuICBJZiB0aGUKLSAgLy8gdW5kZXJseWluZyBzdHJlYW0gZG9lcyBub3Qg
c3VwcG9ydCBhbGlhc2luZywgdGhlbiBlbmFibGluZyBpdCBoYXMgbm8KLSAgLy8gYWZmZWN0LiAg
Rm9yIG5vdywgdGhpcyBvbmx5IGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mCi0gIC8vIFdyaXRlUmF3
TWF5YmVBbGlhc2VkKCkuCi0gIC8vCi0gIC8vIE5PVEU6IEl0IGlzIGNhbGxlcidzIHJlc3BvbnNp
YmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZSBjaHVuayBvZiBtZW1vcnkKLSAgLy8gcmVtYWlucyBs
aXZlIHVudGlsIGFsbCBvZiB0aGUgZGF0YSBoYXMgYmVlbiBjb25zdW1lZCBmcm9tIHRoZSBzdHJl
YW0uCi0gIHZvaWQgRW5hYmxlQWxpYXNpbmcoYm9vbCBlbmFibGVkKTsKLQotICAvLyBXcml0ZSBh
IDMyLWJpdCBsaXR0bGUtZW5kaWFuIGludGVnZXIuCi0gIHZvaWQgV3JpdGVMaXR0bGVFbmRpYW4z
Mih1aW50MzIgdmFsdWUpOwotICAvLyBMaWtlIFdyaXRlTGl0dGxlRW5kaWFuMzIoKSAgYnV0IHdy
aXRpbmcgZGlyZWN0bHkgdG8gdGhlIHRhcmdldCBhcnJheS4KLSAgc3RhdGljIHVpbnQ4KiBXcml0
ZUxpdHRsZUVuZGlhbjMyVG9BcnJheSh1aW50MzIgdmFsdWUsIHVpbnQ4KiB0YXJnZXQpOwotICAv
LyBXcml0ZSBhIDY0LWJpdCBsaXR0bGUtZW5kaWFuIGludGVnZXIuCi0gIHZvaWQgV3JpdGVMaXR0
bGVFbmRpYW42NCh1aW50NjQgdmFsdWUpOwotICAvLyBMaWtlIFdyaXRlTGl0dGxlRW5kaWFuNjQo
KSAgYnV0IHdyaXRpbmcgZGlyZWN0bHkgdG8gdGhlIHRhcmdldCBhcnJheS4KLSAgc3RhdGljIHVp
bnQ4KiBXcml0ZUxpdHRsZUVuZGlhbjY0VG9BcnJheSh1aW50NjQgdmFsdWUsIHVpbnQ4KiB0YXJn
ZXQpOwotCi0gIC8vIFdyaXRlIGFuIHVuc2lnbmVkIGludGVnZXIgd2l0aCBWYXJpbnQgZW5jb2Rp
bmcuICBXcml0aW5nIGEgMzItYml0IHZhbHVlCi0gIC8vIGlzIGVxdWl2YWxlbnQgdG8gY2FzdGlu
ZyBpdCB0byB1aW50NjQgYW5kIHdyaXRpbmcgaXQgYXMgYSA2NC1iaXQgdmFsdWUsCi0gIC8vIGJ1
dCBtYXkgYmUgbW9yZSBlZmZpY2llbnQuCi0gIHZvaWQgV3JpdGVWYXJpbnQzMih1aW50MzIgdmFs
dWUpOwotICAvLyBMaWtlIFdyaXRlVmFyaW50MzIoKSAgYnV0IHdyaXRpbmcgZGlyZWN0bHkgdG8g
dGhlIHRhcmdldCBhcnJheS4KLSAgc3RhdGljIHVpbnQ4KiBXcml0ZVZhcmludDMyVG9BcnJheSh1
aW50MzIgdmFsdWUsIHVpbnQ4KiB0YXJnZXQpOwotICAvLyBXcml0ZSBhbiB1bnNpZ25lZCBpbnRl
Z2VyIHdpdGggVmFyaW50IGVuY29kaW5nLgotICB2b2lkIFdyaXRlVmFyaW50NjQodWludDY0IHZh
bHVlKTsKLSAgLy8gTGlrZSBXcml0ZVZhcmludDY0KCkgIGJ1dCB3cml0aW5nIGRpcmVjdGx5IHRv
IHRoZSB0YXJnZXQgYXJyYXkuCi0gIHN0YXRpYyB1aW50OCogV3JpdGVWYXJpbnQ2NFRvQXJyYXko
dWludDY0IHZhbHVlLCB1aW50OCogdGFyZ2V0KTsKLQotICAvLyBFcXVpdmFsZW50IHRvIFdyaXRl
VmFyaW50MzIoKSBleGNlcHQgd2hlbiB0aGUgdmFsdWUgaXMgbmVnYXRpdmUsCi0gIC8vIGluIHdo
aWNoIGNhc2UgaXQgbXVzdCBiZSBzaWduLWV4dGVuZGVkIHRvIGEgZnVsbCAxMCBieXRlcy4KLSAg
dm9pZCBXcml0ZVZhcmludDMyU2lnbkV4dGVuZGVkKGludDMyIHZhbHVlKTsKLSAgLy8gTGlrZSBX
cml0ZVZhcmludDMyU2lnbkV4dGVuZGVkKCkgIGJ1dCB3cml0aW5nIGRpcmVjdGx5IHRvIHRoZSB0
YXJnZXQgYXJyYXkuCi0gIHN0YXRpYyB1aW50OCogV3JpdGVWYXJpbnQzMlNpZ25FeHRlbmRlZFRv
QXJyYXkoaW50MzIgdmFsdWUsIHVpbnQ4KiB0YXJnZXQpOwotCi0gIC8vIFRoaXMgaXMgaWRlbnRp
Y2FsIHRvIFdyaXRlVmFyaW50MzIoKSwgYnV0IG9wdGltaXplZCBmb3Igd3JpdGluZyB0YWdzLgot
ICAvLyBJbiBwYXJ0aWN1bGFyLCBpZiB0aGUgaW5wdXQgaXMgYSBjb21waWxlLXRpbWUgY29uc3Rh
bnQsIHRoaXMgbWV0aG9kCi0gIC8vIGNvbXBpbGVzIGRvd24gdG8gYSBjb3VwbGUgaW5zdHJ1Y3Rp
b25zLgotICAvLyBBbHdheXMgaW5saW5lIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBhZm9ybWVudGlv
bmVkIG9wdGltaXphdGlvbiBjYW4ndCB3b3JrLAotICAvLyBidXQgR0NDIGJ5IGRlZmF1bHQgZG9l
c24ndCB3YW50IHRvIGlubGluZSB0aGlzLgotICB2b2lkIFdyaXRlVGFnKHVpbnQzMiB2YWx1ZSk7
Ci0gIC8vIExpa2UgV3JpdGVUYWcoKSAgYnV0IHdyaXRpbmcgZGlyZWN0bHkgdG8gdGhlIHRhcmdl
dCBhcnJheS4KLSAgR09PR0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FIHN0YXRpYyB1aW50OCog
V3JpdGVUYWdUb0FycmF5KHVpbnQzMiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDgqIHRhcmdldCk7Ci0KLSAgLy8gUmV0
dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byBlbmNvZGUgdGhlIGdpdmVuIHZhbHVl
IGFzIGEgdmFyaW50LgotICBzdGF0aWMgaW50IFZhcmludFNpemUzMih1aW50MzIgdmFsdWUpOwot
ICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvIGVuY29kZSB0aGUgZ2l2
ZW4gdmFsdWUgYXMgYSB2YXJpbnQuCi0gIHN0YXRpYyBpbnQgVmFyaW50U2l6ZTY0KHVpbnQ2NCB2
YWx1ZSk7Ci0KLSAgLy8gSWYgbmVnYXRpdmUsIDEwIGJ5dGVzLiAgT3RoZXJpd3NlLCBzYW1lIGFz
IFZhcmludFNpemUzMigpLgotICBzdGF0aWMgaW50IFZhcmludFNpemUzMlNpZ25FeHRlbmRlZChp
bnQzMiB2YWx1ZSk7Ci0KLSAgLy8gQ29tcGlsZS10aW1lIGVxdWl2YWxlbnQgb2YgVmFyaW50U2l6
ZTMyKCkuCi0gIHRlbXBsYXRlIDx1aW50MzIgVmFsdWU+Ci0gIHN0cnVjdCBTdGF0aWNWYXJpbnRT
aXplMzIgewotICAgIHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPQotICAgICAgICAoVmFsdWUgPCAo
MSA8PCA3KSkKLSAgICAgICAgICAgID8gMQotICAgICAgICAgICAgOiAoVmFsdWUgPCAoMSA8PCAx
NCkpCi0gICAgICAgICAgICAgICAgPyAyCi0gICAgICAgICAgICAgICAgOiAoVmFsdWUgPCAoMSA8
PCAyMSkpCi0gICAgICAgICAgICAgICAgICAgID8gMwotICAgICAgICAgICAgICAgICAgICA6IChW
YWx1ZSA8ICgxIDw8IDI4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgID8gNAotICAgICAgICAg
ICAgICAgICAgICAgICAgOiA1OwotICB9OwotCi0gIC8vIFJldHVybnMgdGhlIHRvdGFsIG51bWJl
ciBvZiBieXRlcyB3cml0dGVuIHNpbmNlIHRoaXMgb2JqZWN0IHdhcyBjcmVhdGVkLgotICBpbmxp
bmUgaW50IEJ5dGVDb3VudCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3
YXMgYW4gdW5kZXJseWluZyBJL08gZXJyb3Igc2luY2UgdGhpcyBvYmplY3Qgd2FzCi0gIC8vIGNy
ZWF0ZWQuCi0gIGJvb2wgSGFkRXJyb3IoKSBjb25zdCB7IHJldHVybiBoYWRfZXJyb3JfOyB9Ci0K
LSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQ29kZWRPdXRw
dXRTdHJlYW0pOwotCi0gIFplcm9Db3B5T3V0cHV0U3RyZWFtKiBvdXRwdXRfOwotICB1aW50OCog
YnVmZmVyXzsKLSAgaW50IGJ1ZmZlcl9zaXplXzsKLSAgaW50IHRvdGFsX2J5dGVzXzsgIC8vIFN1
bSBvZiBzaXplcyBvZiBhbGwgYnVmZmVycyBzZWVuIHNvIGZhci4KLSAgYm9vbCBoYWRfZXJyb3Jf
OyAgIC8vIFdoZXRoZXIgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIG91dHB1dC4KLSAgYm9vbCBh
bGlhc2luZ19lbmFibGVkXzsgIC8vIFNlZSBFbmFibGVBbGlhc2luZygpLgotCi0gIC8vIEFkdmFu
Y2UgdGhlIGJ1ZmZlciBieSBhIGdpdmVuIG51bWJlciBvZiBieXRlcy4KLSAgdm9pZCBBZHZhbmNl
KGludCBhbW91bnQpOwotCi0gIC8vIENhbGxlZCB3aGVuIHRoZSBidWZmZXIgcnVucyBvdXQgdG8g
cmVxdWVzdCBtb3JlIGRhdGEuICBJbXBsaWVzIGFuCi0gIC8vIEFkdmFuY2UoYnVmZmVyX3NpemVf
KS4KLSAgYm9vbCBSZWZyZXNoKCk7Ci0KLSAgLy8gTGlrZSBXcml0ZVJhdygpIGJ1dCBtYXkgYXZv
aWQgY29weWluZyBpZiB0aGUgdW5kZXJseWluZwotICAvLyBaZXJvQ29weU91dHB1dFN0cmVhbSBz
dXBwb3J0cyBpdC4KLSAgdm9pZCBXcml0ZUFsaWFzZWRSYXcoY29uc3Qgdm9pZCogYnVmZmVyLCBp
bnQgc2l6ZSk7Ci0KLSAgLy8gSWYgdGhpcyB3cml0ZSBtaWdodCBjcm9zcyB0aGUgZW5kIG9mIHRo
ZSBidWZmZXIsIHdlIGNvbXBvc2UgdGhlIGJ5dGVzIGZpcnN0Ci0gIC8vIHRoZW4gdXNlIFdyaXRl
UmF3KCkuCi0gIHZvaWQgV3JpdGVWYXJpbnQzMlNsb3dQYXRoKHVpbnQzMiB2YWx1ZSk7Ci0KLSAg
Ly8gQWx3YXlzLWlubGluZWQgdmVyc2lvbnMgb2YgV3JpdGVWYXJpbnQqIGZ1bmN0aW9ucyBzbyB0
aGF0IGNvZGUgY2FuIGJlCi0gIC8vIHJldXNlZCwgd2hpbGUgc3RpbGwgY29udHJvbGxpbmcgc2l6
ZS4gRm9yIGluc3RhbmNlLCBXcml0ZVZhcmludDMyVG9BcnJheSgpCi0gIC8vIHNob3VsZCBub3Qg
ZGlyZWN0bHkgY2FsbCB0aGlzOiBzaW5jZSBpdCBpcyBpbmxpbmVkIGl0c2VsZiwgZG9pbmcgc28K
LSAgLy8gd291bGQgZ3JlYXRseSBpbmNyZWFzZSB0aGUgc2l6ZSBvZiBnZW5lcmF0ZWQgY29kZS4g
SW5zdGVhZCwgaXQgc2hvdWxkIGNhbGwKLSAgLy8gV3JpdGVWYXJpbnQzMkZhbGxiYWNrVG9BcnJh
eS4gIE1lYW53aGlsZSwgV3JpdGVWYXJpbnQzMigpIGlzIGFscmVhZHkKLSAgLy8gb3V0LW9mLWxp
bmUsIHNvIGl0IHNob3VsZCBqdXN0IGludm9rZSB0aGlzIGRpcmVjdGx5IHRvIGF2b2lkIGFueSBl
eHRyYQotICAvLyBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLgotICBHT09HTEVfQVRUUklCVVRFX0FM
V0FZU19JTkxJTkUgc3RhdGljIHVpbnQ4KiBXcml0ZVZhcmludDY0VG9BcnJheUlubGluZSgKLSAg
ICAgIHVpbnQ2NCB2YWx1ZSwgdWludDgqIHRhcmdldCk7Ci0KLSAgc3RhdGljIGludCBWYXJpbnRT
aXplMzJGYWxsYmFjayh1aW50MzIgdmFsdWUpOwotfTsKLQotLy8gaW5saW5lIG1ldGhvZHMgPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gVGhl
IHZhc3QgbWFqb3JpdHkgb2YgdmFyaW50cyBhcmUgb25seSBvbmUgYnl0ZS4gIFRoZXNlIGlubGlu
ZQotLy8gbWV0aG9kcyBvcHRpbWl6ZSBmb3IgdGhhdCBjYXNlLgotCi1pbmxpbmUgYm9vbCBDb2Rl
ZElucHV0U3RyZWFtOjpSZWFkVmFyaW50MzIodWludDMyKiB2YWx1ZSkgewotICB1aW50MzIgdiA9
IDA7Ci0gIGlmIChHT09HTEVfUFJFRElDVF9UUlVFKGJ1ZmZlcl8gPCBidWZmZXJfZW5kXykpIHsK
LSAgICB2ID0gKmJ1ZmZlcl87Ci0gICAgaWYgKHYgPCAweDgwKSB7Ci0gICAgICAqdmFsdWUgPSB2
OwotICAgICAgQWR2YW5jZSgxKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICBp
bnQ2NCByZXN1bHQgPSBSZWFkVmFyaW50MzJGYWxsYmFjayh2KTsKLSAgKnZhbHVlID0gc3RhdGlj
X2Nhc3Q8dWludDMyPihyZXN1bHQpOwotICByZXR1cm4gcmVzdWx0ID49IDA7Ci19Ci0KLWlubGlu
ZSBib29sIENvZGVkSW5wdXRTdHJlYW06OlJlYWRWYXJpbnQ2NCh1aW50NjQqIHZhbHVlKSB7Ci0g
IGlmIChHT09HTEVfUFJFRElDVF9UUlVFKGJ1ZmZlcl8gPCBidWZmZXJfZW5kXykgJiYgKmJ1ZmZl
cl8gPCAweDgwKSB7Ci0gICAgKnZhbHVlID0gKmJ1ZmZlcl87Ci0gICAgQWR2YW5jZSgxKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotICBzdGQ6OnBhaXI8dWludDY0LCBib29sPiBwID0gUmVhZFZh
cmludDY0RmFsbGJhY2soKTsKLSAgKnZhbHVlID0gcC5maXJzdDsKLSAgcmV0dXJuIHAuc2Vjb25k
OwotfQotCi0vLyBzdGF0aWMKLWlubGluZSBjb25zdCB1aW50OCogQ29kZWRJbnB1dFN0cmVhbTo6
UmVhZExpdHRsZUVuZGlhbjMyRnJvbUFycmF5KAotICAgIGNvbnN0IHVpbnQ4KiBidWZmZXIsCi0g
ICAgdWludDMyKiB2YWx1ZSkgewotI2lmIGRlZmluZWQoUFJPVE9CVUZfTElUVExFX0VORElBTikK
LSAgbWVtY3B5KHZhbHVlLCBidWZmZXIsIHNpemVvZigqdmFsdWUpKTsKLSAgcmV0dXJuIGJ1ZmZl
ciArIHNpemVvZigqdmFsdWUpOwotI2Vsc2UKLSAgKnZhbHVlID0gKHN0YXRpY19jYXN0PHVpbnQz
Mj4oYnVmZmVyWzBdKSAgICAgICkgfAotICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDMyPihi
dWZmZXJbMV0pIDw8ICA4KSB8Ci0gICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzI+KGJ1ZmZl
clsyXSkgPDwgMTYpIHwKLSAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQzMj4oYnVmZmVyWzNd
KSA8PCAyNCk7Ci0gIHJldHVybiBidWZmZXIgKyBzaXplb2YoKnZhbHVlKTsKLSNlbmRpZgotfQot
Ly8gc3RhdGljCi1pbmxpbmUgY29uc3QgdWludDgqIENvZGVkSW5wdXRTdHJlYW06OlJlYWRMaXR0
bGVFbmRpYW42NEZyb21BcnJheSgKLSAgICBjb25zdCB1aW50OCogYnVmZmVyLAotICAgIHVpbnQ2
NCogdmFsdWUpIHsKLSNpZiBkZWZpbmVkKFBST1RPQlVGX0xJVFRMRV9FTkRJQU4pCi0gIG1lbWNw
eSh2YWx1ZSwgYnVmZmVyLCBzaXplb2YoKnZhbHVlKSk7Ci0gIHJldHVybiBidWZmZXIgKyBzaXpl
b2YoKnZhbHVlKTsKLSNlbHNlCi0gIHVpbnQzMiBwYXJ0MCA9IChzdGF0aWNfY2FzdDx1aW50MzI+
KGJ1ZmZlclswXSkgICAgICApIHwKLSAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQz
Mj4oYnVmZmVyWzFdKSA8PCAgOCkgfAotICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWlu
dDMyPihidWZmZXJbMl0pIDw8IDE2KSB8Ci0gICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
aW50MzI+KGJ1ZmZlclszXSkgPDwgMjQpOwotICB1aW50MzIgcGFydDEgPSAoc3RhdGljX2Nhc3Q8
dWludDMyPihidWZmZXJbNF0pICAgICAgKSB8Ci0gICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx1aW50MzI+KGJ1ZmZlcls1XSkgPDwgIDgpIHwKLSAgICAgICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHVpbnQzMj4oYnVmZmVyWzZdKSA8PCAxNikgfAotICAgICAgICAgICAgICAgICAoc3RhdGlj
X2Nhc3Q8dWludDMyPihidWZmZXJbN10pIDw8IDI0KTsKLSAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8
dWludDY0PihwYXJ0MCkgfAotICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50NjQ+KHBhcnQxKSA8
PCAzMik7Ci0gIHJldHVybiBidWZmZXIgKyBzaXplb2YoKnZhbHVlKTsKLSNlbmRpZgotfQotCi1p
bmxpbmUgYm9vbCBDb2RlZElucHV0U3RyZWFtOjpSZWFkTGl0dGxlRW5kaWFuMzIodWludDMyKiB2
YWx1ZSkgewotI2lmIGRlZmluZWQoUFJPVE9CVUZfTElUVExFX0VORElBTikKLSAgaWYgKEdPT0dM
RV9QUkVESUNUX1RSVUUoQnVmZmVyU2l6ZSgpID49IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKCp2
YWx1ZSkpKSkgewotICAgIG1lbWNweSh2YWx1ZSwgYnVmZmVyXywgc2l6ZW9mKCp2YWx1ZSkpOwot
ICAgIEFkdmFuY2Uoc2l6ZW9mKCp2YWx1ZSkpOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2Ug
ewotICAgIHJldHVybiBSZWFkTGl0dGxlRW5kaWFuMzJGYWxsYmFjayh2YWx1ZSk7Ci0gIH0KLSNl
bHNlCi0gIHJldHVybiBSZWFkTGl0dGxlRW5kaWFuMzJGYWxsYmFjayh2YWx1ZSk7Ci0jZW5kaWYK
LX0KLQotaW5saW5lIGJvb2wgQ29kZWRJbnB1dFN0cmVhbTo6UmVhZExpdHRsZUVuZGlhbjY0KHVp
bnQ2NCogdmFsdWUpIHsKLSNpZiBkZWZpbmVkKFBST1RPQlVGX0xJVFRMRV9FTkRJQU4pCi0gIGlm
IChHT09HTEVfUFJFRElDVF9UUlVFKEJ1ZmZlclNpemUoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZigqdmFsdWUpKSkpIHsKLSAgICBtZW1jcHkodmFsdWUsIGJ1ZmZlcl8sIHNpemVvZigqdmFs
dWUpKTsKLSAgICBBZHZhbmNlKHNpemVvZigqdmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAg
fSBlbHNlIHsKLSAgICByZXR1cm4gUmVhZExpdHRsZUVuZGlhbjY0RmFsbGJhY2sodmFsdWUpOwot
ICB9Ci0jZWxzZQotICByZXR1cm4gUmVhZExpdHRsZUVuZGlhbjY0RmFsbGJhY2sodmFsdWUpOwot
I2VuZGlmCi19Ci0KLWlubGluZSB1aW50MzIgQ29kZWRJbnB1dFN0cmVhbTo6UmVhZFRhZygpIHsK
LSAgdWludDMyIHYgPSAwOwotICBpZiAoR09PR0xFX1BSRURJQ1RfVFJVRShidWZmZXJfIDwgYnVm
ZmVyX2VuZF8pKSB7Ci0gICAgdiA9ICpidWZmZXJfOwotICAgIGlmICh2IDwgMHg4MCkgewotICAg
ICAgbGFzdF90YWdfID0gdjsKLSAgICAgIEFkdmFuY2UoMSk7Ci0gICAgICByZXR1cm4gdjsKLSAg
ICB9Ci0gIH0KLSAgbGFzdF90YWdfID0gUmVhZFRhZ0ZhbGxiYWNrKHYpOwotICByZXR1cm4gbGFz
dF90YWdfOwotfQotCi1pbmxpbmUgc3RkOjpwYWlyPHVpbnQzMiwgYm9vbD4gQ29kZWRJbnB1dFN0
cmVhbTo6UmVhZFRhZ1dpdGhDdXRvZmYoCi0gICAgdWludDMyIGN1dG9mZikgewotICAvLyBJbiBw
ZXJmb3JtYW5jZS1zZW5zaXRpdmUgY29kZSB3ZSBjYW4gZXhwZWN0IGN1dG9mZiB0byBiZSBhIGNv
bXBpbGUtdGltZQotICAvLyBjb25zdGFudCwgYW5kIHRoaW5ncyBsaWtlICJjdXRvZmYgPj0ga01h
eDFCeXRlVmFyaW50IiB0byBiZSBldmFsdWF0ZWQgYXQKLSAgLy8gY29tcGlsZSB0aW1lLgotICB1
aW50MzIgZmlyc3RfYnl0ZV9vcl96ZXJvID0gMDsKLSAgaWYgKEdPT0dMRV9QUkVESUNUX1RSVUUo
YnVmZmVyXyA8IGJ1ZmZlcl9lbmRfKSkgewotICAgIC8vIEhvdCBjYXNlOiBidWZmZXJfIG5vbl9l
bXB0eSwgYnVmZmVyX1swXSBpbiBbMSwgMTI4KS4KLSAgICAvLyBUT0RPKGdwaWtlKTogSXMgaXQg
d29ydGggcmVhcnJhbmdpbmcgdGhpcz8gRS5nLiwgaWYgdGhlIG51bWJlciBvZiBmaWVsZHMKLSAg
ICAvLyBpcyBsYXJnZSBlbm91Z2ggdGhlbiBpcyBpdCBiZXR0ZXIgdG8gY2hlY2sgZm9yIHRoZSB0
d28tYnl0ZSBjYXNlIGZpcnN0PwotICAgIGZpcnN0X2J5dGVfb3JfemVybyA9IGJ1ZmZlcl9bMF07
Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludDg+KGJ1ZmZlcl9bMF0pID4gMCkgewotICAgICAgY29u
c3QgdWludDMyIGtNYXgxQnl0ZVZhcmludCA9IDB4N2Y7Ci0gICAgICB1aW50MzIgdGFnID0gbGFz
dF90YWdfID0gYnVmZmVyX1swXTsKLSAgICAgIEFkdmFuY2UoMSk7Ci0gICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIodGFnLCBjdXRvZmYgPj0ga01heDFCeXRlVmFyaW50IHx8IHRhZyA8PSBjdXRv
ZmYpOwotICAgIH0KLSAgICAvLyBPdGhlciBob3QgY2FzZTogY3V0b2ZmID49IDB4ODAsIGJ1ZmZl
cl8gaGFzIGF0IGxlYXN0IHR3byBieXRlcyBhdmFpbGFibGUsCi0gICAgLy8gYW5kIHRhZyBpcyB0
d28gYnl0ZXMuICBUaGUgbGF0dGVyIGlzIHRlc3RlZCBieSBiaXR3aXNlLWFuZC1ub3Qgb2YgdGhl
Ci0gICAgLy8gZmlyc3QgYnl0ZSBhbmQgdGhlIHNlY29uZCBieXRlLgotICAgIGlmIChjdXRvZmYg
Pj0gMHg4MCAmJgotICAgICAgICBHT09HTEVfUFJFRElDVF9UUlVFKGJ1ZmZlcl8gKyAxIDwgYnVm
ZmVyX2VuZF8pICYmCi0gICAgICAgIEdPT0dMRV9QUkVESUNUX1RSVUUoKGJ1ZmZlcl9bMF0gJiB+
YnVmZmVyX1sxXSkgPj0gMHg4MCkpIHsKLSAgICAgIGNvbnN0IHVpbnQzMiBrTWF4MkJ5dGVWYXJp
bnQgPSAoMHg3ZiA8PCA3KSArIDB4N2Y7Ci0gICAgICB1aW50MzIgdGFnID0gbGFzdF90YWdfID0g
KDF1IDw8IDcpICogYnVmZmVyX1sxXSArIChidWZmZXJfWzBdIC0gMHg4MCk7Ci0gICAgICBBZHZh
bmNlKDIpOwotICAgICAgLy8gSXQgbWlnaHQgbWFrZSBzZW5zZSB0byB0ZXN0IGZvciB0YWcgPT0g
MCBub3csIGJ1dCBpdCBpcyBzbyByYXJlIHRoYXQKLSAgICAgIC8vIHRoYXQgd2UgZG9uJ3QgYm90
aGVyLiAgQSB2YXJpbnQtZW5jb2RlZCAwIHNob3VsZCBiZSBvbmUgYnl0ZSB1bmxlc3MKLSAgICAg
IC8vIHRoZSBlbmNvZGVyIGxvc3QgaXRzIG1pbmQuICBUaGUgc2Vjb25kIHBhcnQgb2YgdGhlIHJl
dHVybiB2YWx1ZSBvZgotICAgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIGJlIGVp
dGhlciB0cnVlIG9yIGZhbHNlIGlmIHRoZSB0YWcgaXMgMCwKLSAgICAgIC8vIHNvIHdlIGRvbid0
IGhhdmUgdG8gY2hlY2sgZm9yIHRhZyA9PSAwLiAgV2UgbWF5IG5lZWQgdG8gY2hlY2sgd2hldGhl
cgotICAgICAgLy8gaXQgZXhjZWVkcyBjdXRvZmYuCi0gICAgICBib29sIGF0X29yX2JlbG93X2N1
dG9mZiA9IGN1dG9mZiA+PSBrTWF4MkJ5dGVWYXJpbnQgfHwgdGFnIDw9IGN1dG9mZjsKLSAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcih0YWcsIGF0X29yX2JlbG93X2N1dG9mZik7Ci0gICAgfQot
ICB9Ci0gIC8vIFNsb3cgcGF0aAotICBsYXN0X3RhZ18gPSBSZWFkVGFnRmFsbGJhY2soZmlyc3Rf
Ynl0ZV9vcl96ZXJvKTsKLSAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxhc3RfdGFnXywgc3RhdGlj
X2Nhc3Q8dWludDMyPihsYXN0X3RhZ18gLSAxKSA8IGN1dG9mZik7Ci19Ci0KLWlubGluZSBib29s
IENvZGVkSW5wdXRTdHJlYW06Okxhc3RUYWdXYXModWludDMyIGV4cGVjdGVkKSB7Ci0gIHJldHVy
biBsYXN0X3RhZ18gPT0gZXhwZWN0ZWQ7Ci19Ci0KLWlubGluZSBib29sIENvZGVkSW5wdXRTdHJl
YW06OkNvbnN1bWVkRW50aXJlTWVzc2FnZSgpIHsKLSAgcmV0dXJuIGxlZ2l0aW1hdGVfbWVzc2Fn
ZV9lbmRfOwotfQotCi1pbmxpbmUgYm9vbCBDb2RlZElucHV0U3RyZWFtOjpFeHBlY3RUYWcodWlu
dDMyIGV4cGVjdGVkKSB7Ci0gIGlmIChleHBlY3RlZCA8ICgxIDw8IDcpKSB7Ci0gICAgaWYgKEdP
T0dMRV9QUkVESUNUX1RSVUUoYnVmZmVyXyA8IGJ1ZmZlcl9lbmRfKSAmJiBidWZmZXJfWzBdID09
IGV4cGVjdGVkKSB7Ci0gICAgICBBZHZhbmNlKDEpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoZXhwZWN0
ZWQgPCAoMSA8PCAxNCkpIHsKLSAgICBpZiAoR09PR0xFX1BSRURJQ1RfVFJVRShCdWZmZXJTaXpl
KCkgPj0gMikgJiYKLSAgICAgICAgYnVmZmVyX1swXSA9PSBzdGF0aWNfY2FzdDx1aW50OD4oZXhw
ZWN0ZWQgfCAweDgwKSAmJgotICAgICAgICBidWZmZXJfWzFdID09IHN0YXRpY19jYXN0PHVpbnQ4
PihleHBlY3RlZCA+PiA3KSkgewotICAgICAgQWR2YW5jZSgyKTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9IGVsc2Ugewot
ICAgIC8vIERvbid0IGJvdGhlciBvcHRpbWl6aW5nIGZvciBsYXJnZXIgdmFsdWVzLgotICAgIHJl
dHVybiBmYWxzZTsKLSAgfQotfQotCi1pbmxpbmUgY29uc3QgdWludDgqIENvZGVkSW5wdXRTdHJl
YW06OkV4cGVjdFRhZ0Zyb21BcnJheSgKLSAgICBjb25zdCB1aW50OCogYnVmZmVyLCB1aW50MzIg
ZXhwZWN0ZWQpIHsKLSAgaWYgKGV4cGVjdGVkIDwgKDEgPDwgNykpIHsKLSAgICBpZiAoYnVmZmVy
WzBdID09IGV4cGVjdGVkKSB7Ci0gICAgICByZXR1cm4gYnVmZmVyICsgMTsKLSAgICB9Ci0gIH0g
ZWxzZSBpZiAoZXhwZWN0ZWQgPCAoMSA8PCAxNCkpIHsKLSAgICBpZiAoYnVmZmVyWzBdID09IHN0
YXRpY19jYXN0PHVpbnQ4PihleHBlY3RlZCB8IDB4ODApICYmCi0gICAgICAgIGJ1ZmZlclsxXSA9
PSBzdGF0aWNfY2FzdDx1aW50OD4oZXhwZWN0ZWQgPj4gNykpIHsKLSAgICAgIHJldHVybiBidWZm
ZXIgKyAyOwotICAgIH0KLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotaW5saW5lIHZvaWQgQ29k
ZWRJbnB1dFN0cmVhbTo6R2V0RGlyZWN0QnVmZmVyUG9pbnRlcklubGluZShjb25zdCB2b2lkKiog
ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50KiBzaXplKSB7Ci0gICpkYXRhID0gYnVmZmVyXzsKLSAgKnNpemUgPSBzdGF0
aWNfY2FzdDxpbnQ+KGJ1ZmZlcl9lbmRfIC0gYnVmZmVyXyk7Ci19Ci0KLWlubGluZSBib29sIENv
ZGVkSW5wdXRTdHJlYW06OkV4cGVjdEF0RW5kKCkgewotICAvLyBJZiB3ZSBhcmUgYXQgYSBsaW1p
dCB3ZSBrbm93IG5vIG1vcmUgYnl0ZXMgY2FuIGJlIHJlYWQuICBPdGhlcndpc2UsIGl0J3MKLSAg
Ly8gaGFyZCB0byBzYXkgd2l0aG91dCBjYWxsaW5nIFJlZnJlc2goKSwgYW5kIHdlJ2QgcmF0aGVy
IG5vdCBkbyB0aGF0LgotCi0gIGlmIChidWZmZXJfID09IGJ1ZmZlcl9lbmRfICYmCi0gICAgICAo
KGJ1ZmZlcl9zaXplX2FmdGVyX2xpbWl0XyAhPSAwKSB8fAotICAgICAgICh0b3RhbF9ieXRlc19y
ZWFkXyA9PSBjdXJyZW50X2xpbWl0XykpKSB7Ci0gICAgbGFzdF90YWdfID0gMDsgICAgICAgICAg
ICAgICAgICAgLy8gUHJldGVuZCB3ZSBjYWxsZWQgUmVhZFRhZygpLi4uCi0gICAgbGVnaXRpbWF0
ZV9tZXNzYWdlX2VuZF8gPSB0cnVlOyAgLy8gLi4uIGFuZCBpdCBoaXQgRU9GLgotICAgIHJldHVy
biB0cnVlOwotICB9IGVsc2UgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1pbmxpbmUg
aW50IENvZGVkSW5wdXRTdHJlYW06OkN1cnJlbnRQb3NpdGlvbigpIGNvbnN0IHsKLSAgcmV0dXJu
IHRvdGFsX2J5dGVzX3JlYWRfIC0gKEJ1ZmZlclNpemUoKSArIGJ1ZmZlcl9zaXplX2FmdGVyX2xp
bWl0Xyk7Ci19Ci0KLWlubGluZSB1aW50OCogQ29kZWRPdXRwdXRTdHJlYW06OkdldERpcmVjdEJ1
ZmZlckZvck5CeXRlc0FuZEFkdmFuY2UoaW50IHNpemUpIHsKLSAgaWYgKGJ1ZmZlcl9zaXplXyA8
IHNpemUpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICB1aW50OCogcmVzdWx0
ID0gYnVmZmVyXzsKLSAgICBBZHZhbmNlKHNpemUpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0K
LX0KLQotaW5saW5lIHVpbnQ4KiBDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVWYXJpbnQzMlRvQXJy
YXkodWludDMyIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDgqIHRhcmdldCkgewotICB3aGlsZSAodmFsdWUgPj0gMHg4MCkg
ewotICAgICp0YXJnZXQgPSBzdGF0aWNfY2FzdDx1aW50OD4odmFsdWUgfCAweDgwKTsKLSAgICB2
YWx1ZSA+Pj0gNzsKLSAgICArK3RhcmdldDsKLSAgfQotICAqdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
dWludDg+KHZhbHVlKTsKLSAgcmV0dXJuIHRhcmdldCArIDE7Ci19Ci0KLWlubGluZSB2b2lkIENv
ZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVZhcmludDMyU2lnbkV4dGVuZGVkKGludDMyIHZhbHVlKSB7
Ci0gIGlmICh2YWx1ZSA8IDApIHsKLSAgICBXcml0ZVZhcmludDY0KHN0YXRpY19jYXN0PHVpbnQ2
ND4odmFsdWUpKTsKLSAgfSBlbHNlIHsKLSAgICBXcml0ZVZhcmludDMyKHN0YXRpY19jYXN0PHVp
bnQzMj4odmFsdWUpKTsKLSAgfQotfQotCi1pbmxpbmUgdWludDgqIENvZGVkT3V0cHV0U3RyZWFt
OjpXcml0ZVZhcmludDMyU2lnbkV4dGVuZGVkVG9BcnJheSgKLSAgICBpbnQzMiB2YWx1ZSwgdWlu
dDgqIHRhcmdldCkgewotICBpZiAodmFsdWUgPCAwKSB7Ci0gICAgcmV0dXJuIFdyaXRlVmFyaW50
NjRUb0FycmF5KHN0YXRpY19jYXN0PHVpbnQ2ND4odmFsdWUpLCB0YXJnZXQpOwotICB9IGVsc2Ug
ewotICAgIHJldHVybiBXcml0ZVZhcmludDMyVG9BcnJheShzdGF0aWNfY2FzdDx1aW50MzI+KHZh
bHVlKSwgdGFyZ2V0KTsKLSAgfQotfQotCi1pbmxpbmUgdWludDgqIENvZGVkT3V0cHV0U3RyZWFt
OjpXcml0ZUxpdHRsZUVuZGlhbjMyVG9BcnJheSh1aW50MzIgdmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OCogdGFy
Z2V0KSB7Ci0jaWYgZGVmaW5lZChQUk9UT0JVRl9MSVRUTEVfRU5ESUFOKQotICBtZW1jcHkodGFy
Z2V0LCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwotI2Vsc2UKLSAgdGFyZ2V0WzBdID0gc3RhdGlj
X2Nhc3Q8dWludDg+KHZhbHVlKTsKLSAgdGFyZ2V0WzFdID0gc3RhdGljX2Nhc3Q8dWludDg+KHZh
bHVlID4+ICA4KTsKLSAgdGFyZ2V0WzJdID0gc3RhdGljX2Nhc3Q8dWludDg+KHZhbHVlID4+IDE2
KTsKLSAgdGFyZ2V0WzNdID0gc3RhdGljX2Nhc3Q8dWludDg+KHZhbHVlID4+IDI0KTsKLSNlbmRp
ZgotICByZXR1cm4gdGFyZ2V0ICsgc2l6ZW9mKHZhbHVlKTsKLX0KLQotaW5saW5lIHVpbnQ4KiBD
b2RlZE91dHB1dFN0cmVhbTo6V3JpdGVMaXR0bGVFbmRpYW42NFRvQXJyYXkodWludDY0IHZhbHVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDgqIHRhcmdldCkgewotI2lmIGRlZmluZWQoUFJPVE9CVUZfTElUVExFX0VORElB
TikKLSAgbWVtY3B5KHRhcmdldCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKLSNlbHNlCi0gIHVp
bnQzMiBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMj4odmFsdWUpOwotICB1aW50MzIgcGFydDEg
PSBzdGF0aWNfY2FzdDx1aW50MzI+KHZhbHVlID4+IDMyKTsKLQotICB0YXJnZXRbMF0gPSBzdGF0
aWNfY2FzdDx1aW50OD4ocGFydDApOwotICB0YXJnZXRbMV0gPSBzdGF0aWNfY2FzdDx1aW50OD4o
cGFydDAgPj4gIDgpOwotICB0YXJnZXRbMl0gPSBzdGF0aWNfY2FzdDx1aW50OD4ocGFydDAgPj4g
MTYpOwotICB0YXJnZXRbM10gPSBzdGF0aWNfY2FzdDx1aW50OD4ocGFydDAgPj4gMjQpOwotICB0
YXJnZXRbNF0gPSBzdGF0aWNfY2FzdDx1aW50OD4ocGFydDEpOwotICB0YXJnZXRbNV0gPSBzdGF0
aWNfY2FzdDx1aW50OD4ocGFydDEgPj4gIDgpOwotICB0YXJnZXRbNl0gPSBzdGF0aWNfY2FzdDx1
aW50OD4ocGFydDEgPj4gMTYpOwotICB0YXJnZXRbN10gPSBzdGF0aWNfY2FzdDx1aW50OD4ocGFy
dDEgPj4gMjQpOwotI2VuZGlmCi0gIHJldHVybiB0YXJnZXQgKyBzaXplb2YodmFsdWUpOwotfQot
Ci1pbmxpbmUgdm9pZCBDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVWYXJpbnQzMih1aW50MzIgdmFs
dWUpIHsKLSAgaWYgKGJ1ZmZlcl9zaXplXyA+PSA1KSB7Ci0gICAgLy8gRmFzdCBwYXRoOiAgV2Ug
aGF2ZSBlbm91Z2ggYnl0ZXMgbGVmdCBpbiB0aGUgYnVmZmVyIHRvIGd1YXJhbnRlZSB0aGF0Ci0g
ICAgLy8gdGhpcyB3cml0ZSB3b24ndCBjcm9zcyB0aGUgZW5kLCBzbyB3ZSBjYW4gc2tpcCB0aGUg
Y2hlY2tzLgotICAgIHVpbnQ4KiB0YXJnZXQgPSBidWZmZXJfOwotICAgIHVpbnQ4KiBlbmQgPSBX
cml0ZVZhcmludDMyVG9BcnJheSh2YWx1ZSwgdGFyZ2V0KTsKLSAgICBpbnQgc2l6ZSA9IHN0YXRp
Y19jYXN0PGludD4oZW5kIC0gdGFyZ2V0KTsKLSAgICBBZHZhbmNlKHNpemUpOwotICB9IGVsc2Ug
ewotICAgIFdyaXRlVmFyaW50MzJTbG93UGF0aCh2YWx1ZSk7Ci0gIH0KLX0KLQotaW5saW5lIHZv
aWQgQ29kZWRPdXRwdXRTdHJlYW06OldyaXRlVGFnKHVpbnQzMiB2YWx1ZSkgewotICBXcml0ZVZh
cmludDMyKHZhbHVlKTsKLX0KLQotaW5saW5lIHVpbnQ4KiBDb2RlZE91dHB1dFN0cmVhbTo6V3Jp
dGVUYWdUb0FycmF5KAotICAgIHVpbnQzMiB2YWx1ZSwgdWludDgqIHRhcmdldCkgewotICByZXR1
cm4gV3JpdGVWYXJpbnQzMlRvQXJyYXkodmFsdWUsIHRhcmdldCk7Ci19Ci0KLWlubGluZSBpbnQg
Q29kZWRPdXRwdXRTdHJlYW06OlZhcmludFNpemUzMih1aW50MzIgdmFsdWUpIHsKLSAgaWYgKHZh
bHVlIDwgKDEgPDwgNykpIHsKLSAgICByZXR1cm4gMTsKLSAgfSBlbHNlICB7Ci0gICAgcmV0dXJu
IFZhcmludFNpemUzMkZhbGxiYWNrKHZhbHVlKTsKLSAgfQotfQotCi1pbmxpbmUgaW50IENvZGVk
T3V0cHV0U3RyZWFtOjpWYXJpbnRTaXplMzJTaWduRXh0ZW5kZWQoaW50MzIgdmFsdWUpIHsKLSAg
aWYgKHZhbHVlIDwgMCkgewotICAgIHJldHVybiAxMDsgICAgIC8vIFRPRE8oa2VudG9uKTogIE1h
a2UgdGhpcyBhIHN5bWJvbGljIGNvbnN0YW50LgotICB9IGVsc2UgewotICAgIHJldHVybiBWYXJp
bnRTaXplMzIoc3RhdGljX2Nhc3Q8dWludDMyPih2YWx1ZSkpOwotICB9Ci19Ci0KLWlubGluZSB2
b2lkIENvZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVN0cmluZyhjb25zdCBzdHJpbmcmIHN0cikgewot
ICBXcml0ZVJhdyhzdHIuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KHN0ci5zaXplKCkpKTsKLX0K
LQotaW5saW5lIHZvaWQgQ29kZWRPdXRwdXRTdHJlYW06OldyaXRlUmF3TWF5YmVBbGlhc2VkKAot
ICAgIGNvbnN0IHZvaWQqIGRhdGEsIGludCBzaXplKSB7Ci0gIGlmIChhbGlhc2luZ19lbmFibGVk
XykgewotICAgIFdyaXRlQWxpYXNlZFJhdyhkYXRhLCBzaXplKTsKLSAgfSBlbHNlIHsKLSAgICBX
cml0ZVJhdyhkYXRhLCBzaXplKTsKLSAgfQotfQotCi1pbmxpbmUgdWludDgqIENvZGVkT3V0cHV0
U3RyZWFtOjpXcml0ZVN0cmluZ1RvQXJyYXkoCi0gICAgY29uc3Qgc3RyaW5nJiBzdHIsIHVpbnQ4
KiB0YXJnZXQpIHsKLSAgcmV0dXJuIFdyaXRlUmF3VG9BcnJheShzdHIuZGF0YSgpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHN0ci5zaXplKCkpLCB0YXJnZXQpOwotfQotCi1pbmxpbmUgaW50IENvZGVkT3V0
cHV0U3RyZWFtOjpCeXRlQ291bnQoKSBjb25zdCB7Ci0gIHJldHVybiB0b3RhbF9ieXRlc18gLSBi
dWZmZXJfc2l6ZV87Ci19Ci0KLWlubGluZSB2b2lkIENvZGVkSW5wdXRTdHJlYW06OkFkdmFuY2Uo
aW50IGFtb3VudCkgewotICBidWZmZXJfICs9IGFtb3VudDsKLX0KLQotaW5saW5lIHZvaWQgQ29k
ZWRPdXRwdXRTdHJlYW06OkFkdmFuY2UoaW50IGFtb3VudCkgewotICBidWZmZXJfICs9IGFtb3Vu
dDsKLSAgYnVmZmVyX3NpemVfIC09IGFtb3VudDsKLX0KLQotaW5saW5lIHZvaWQgQ29kZWRJbnB1
dFN0cmVhbTo6U2V0UmVjdXJzaW9uTGltaXQoaW50IGxpbWl0KSB7Ci0gIHJlY3Vyc2lvbl9idWRn
ZXRfICs9IGxpbWl0IC0gcmVjdXJzaW9uX2xpbWl0XzsKLSAgcmVjdXJzaW9uX2xpbWl0XyA9IGxp
bWl0OwotfQotCi1pbmxpbmUgYm9vbCBDb2RlZElucHV0U3RyZWFtOjpJbmNyZW1lbnRSZWN1cnNp
b25EZXB0aCgpIHsKLSAgLS1yZWN1cnNpb25fYnVkZ2V0XzsKLSAgcmV0dXJuIHJlY3Vyc2lvbl9i
dWRnZXRfID49IDA7Ci19Ci0KLWlubGluZSB2b2lkIENvZGVkSW5wdXRTdHJlYW06OkRlY3JlbWVu
dFJlY3Vyc2lvbkRlcHRoKCkgewotICBpZiAocmVjdXJzaW9uX2J1ZGdldF8gPCByZWN1cnNpb25f
bGltaXRfKSArK3JlY3Vyc2lvbl9idWRnZXRfOwotfQotCi1pbmxpbmUgdm9pZCBDb2RlZElucHV0
U3RyZWFtOjpVbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpIHsKLSAgYXNzZXJ0KHJlY3Vy
c2lvbl9idWRnZXRfIDwgcmVjdXJzaW9uX2xpbWl0Xyk7Ci0gICsrcmVjdXJzaW9uX2J1ZGdldF87
Ci19Ci0KLWlubGluZSB2b2lkIENvZGVkSW5wdXRTdHJlYW06OlNldEV4dGVuc2lvblJlZ2lzdHJ5
KGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkqIGZhY3RvcnkpIHsKLSAgZXh0
ZW5zaW9uX3Bvb2xfID0gcG9vbDsKLSAgZXh0ZW5zaW9uX2ZhY3RvcnlfID0gZmFjdG9yeTsKLX0K
LQotaW5saW5lIGNvbnN0IERlc2NyaXB0b3JQb29sKiBDb2RlZElucHV0U3RyZWFtOjpHZXRFeHRl
bnNpb25Qb29sKCkgewotICByZXR1cm4gZXh0ZW5zaW9uX3Bvb2xfOwotfQotCi1pbmxpbmUgTWVz
c2FnZUZhY3RvcnkqIENvZGVkSW5wdXRTdHJlYW06OkdldEV4dGVuc2lvbkZhY3RvcnkoKSB7Ci0g
IHJldHVybiBleHRlbnNpb25fZmFjdG9yeV87Ci19Ci0KLWlubGluZSBpbnQgQ29kZWRJbnB1dFN0
cmVhbTo6QnVmZmVyU2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYnVm
ZmVyX2VuZF8gLSBidWZmZXJfKTsKLX0KLQotaW5saW5lIENvZGVkSW5wdXRTdHJlYW06OkNvZGVk
SW5wdXRTdHJlYW0oWmVyb0NvcHlJbnB1dFN0cmVhbSogaW5wdXQpCi0gIDogYnVmZmVyXyhOVUxM
KSwKLSAgICBidWZmZXJfZW5kXyhOVUxMKSwKLSAgICBpbnB1dF8oaW5wdXQpLAotICAgIHRvdGFs
X2J5dGVzX3JlYWRfKDApLAotICAgIG92ZXJmbG93X2J5dGVzXygwKSwKLSAgICBsYXN0X3RhZ18o
MCksCi0gICAgbGVnaXRpbWF0ZV9tZXNzYWdlX2VuZF8oZmFsc2UpLAotICAgIGFsaWFzaW5nX2Vu
YWJsZWRfKGZhbHNlKSwKLSAgICBjdXJyZW50X2xpbWl0XyhraW50MzJtYXgpLAotICAgIGJ1ZmZl
cl9zaXplX2FmdGVyX2xpbWl0XygwKSwKLSAgICB0b3RhbF9ieXRlc19saW1pdF8oa0RlZmF1bHRU
b3RhbEJ5dGVzTGltaXQpLAotICAgIHRvdGFsX2J5dGVzX3dhcm5pbmdfdGhyZXNob2xkXyhrRGVm
YXVsdFRvdGFsQnl0ZXNXYXJuaW5nVGhyZXNob2xkKSwKLSAgICByZWN1cnNpb25fYnVkZ2V0Xyhk
ZWZhdWx0X3JlY3Vyc2lvbl9saW1pdF8pLAotICAgIHJlY3Vyc2lvbl9saW1pdF8oZGVmYXVsdF9y
ZWN1cnNpb25fbGltaXRfKSwKLSAgICBleHRlbnNpb25fcG9vbF8oTlVMTCksCi0gICAgZXh0ZW5z
aW9uX2ZhY3RvcnlfKE5VTEwpIHsKLSAgLy8gRWFnZXJseSBSZWZyZXNoKCkgc28gYnVmZmVyIHNw
YWNlIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4KLSAgUmVmcmVzaCgpOwotfQotCi1pbmxpbmUg
Q29kZWRJbnB1dFN0cmVhbTo6Q29kZWRJbnB1dFN0cmVhbShjb25zdCB1aW50OCogYnVmZmVyLCBp
bnQgc2l6ZSkKLSAgOiBidWZmZXJfKGJ1ZmZlciksCi0gICAgYnVmZmVyX2VuZF8oYnVmZmVyICsg
c2l6ZSksCi0gICAgaW5wdXRfKE5VTEwpLAotICAgIHRvdGFsX2J5dGVzX3JlYWRfKHNpemUpLAot
ICAgIG92ZXJmbG93X2J5dGVzXygwKSwKLSAgICBsYXN0X3RhZ18oMCksCi0gICAgbGVnaXRpbWF0
ZV9tZXNzYWdlX2VuZF8oZmFsc2UpLAotICAgIGFsaWFzaW5nX2VuYWJsZWRfKGZhbHNlKSwKLSAg
ICBjdXJyZW50X2xpbWl0XyhzaXplKSwKLSAgICBidWZmZXJfc2l6ZV9hZnRlcl9saW1pdF8oMCks
Ci0gICAgdG90YWxfYnl0ZXNfbGltaXRfKGtEZWZhdWx0VG90YWxCeXRlc0xpbWl0KSwKLSAgICB0
b3RhbF9ieXRlc193YXJuaW5nX3RocmVzaG9sZF8oa0RlZmF1bHRUb3RhbEJ5dGVzV2FybmluZ1Ro
cmVzaG9sZCksCi0gICAgcmVjdXJzaW9uX2J1ZGdldF8oZGVmYXVsdF9yZWN1cnNpb25fbGltaXRf
KSwKLSAgICByZWN1cnNpb25fbGltaXRfKGRlZmF1bHRfcmVjdXJzaW9uX2xpbWl0XyksCi0gICAg
ZXh0ZW5zaW9uX3Bvb2xfKE5VTEwpLAotICAgIGV4dGVuc2lvbl9mYWN0b3J5XyhOVUxMKSB7Ci0g
IC8vIE5vdGUgdGhhdCBzZXR0aW5nIGN1cnJlbnRfbGltaXRfID09IHNpemUgaXMgaW1wb3J0YW50
IHRvIHByZXZlbnQgc29tZQotICAvLyBjb2RlIHBhdGhzIGZyb20gdHJ5aW5nIHRvIGFjY2VzcyBp
bnB1dF8gYW5kIHNlZ2ZhdWx0aW5nLgotfQotCi1pbmxpbmUgYm9vbCBDb2RlZElucHV0U3RyZWFt
OjpJc0ZsYXQoKSBjb25zdCB7Ci0gIHJldHVybiBpbnB1dF8gPT0gTlVMTDsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIGlvCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotCi0jaWYgX01TQ19WRVIg
Pj0gMTMwMCAmJiAhZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQotICAjcHJhZ21hIHJ1bnRpbWVf
Y2hlY2tzKCJjIiwgcmVzdG9yZSkKLSNlbmRpZiAgLy8gX01TQ19WRVIgJiYgIWRlZmluZWQoX19J
TlRFTF9DT01QSUxFUikKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09H
TEVfUFJPVE9CVUZfSU9fQ09ERURfU1RSRUFNX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2lvL2NvZGVkX3N0cmVhbV9pbmwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9jb2Rl
ZF9zdHJlYW1faW5sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NWIwNmUwNGU1
MzEwZDI1ZWI0Mjk0OTU5YmFjZDI0Nzk5MzNlMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbV9p
bmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGphc29uaEBnb29nbGUuY29tIChKYXNvbiBIc3Vl
aCkKLS8vCi0vLyBJbXBsZW1lbnRzIG1ldGhvZHMgb2YgY29kZWRfc3RyZWFtLmggdGhhdCBuZWVk
IHRvIGJlIGlubGluZWQgZm9yIHBlcmZvcm1hbmNlCi0vLyByZWFzb25zLCBidXQgc2hvdWxkIG5v
dCBiZSBkZWZpbmVkIGluIGEgcHVibGljIGhlYWRlci4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9C
VUZfSU9fQ09ERURfU1RSRUFNX0lOTF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0lPX0NP
REVEX1NUUkVBTV9JTkxfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9n
Z2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbF9saXRlLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGxfdXRpbC5oPgotCi1uYW1l
c3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW8gewotCi1p
bmxpbmUgYm9vbCBDb2RlZElucHV0U3RyZWFtOjpJbnRlcm5hbFJlYWRTdHJpbmdJbmxpbmUoc3Ry
aW5nKiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHNpemUpIHsKLSAgaWYgKHNpemUgPCAwKSByZXR1cm4gZmFsc2U7ICAv
LyBzZWN1cml0eTogc2l6ZSBpcyBvZnRlbiB1c2VyLXN1cHBsaWVkCi0KLSAgaWYgKEJ1ZmZlclNp
emUoKSA+PSBzaXplKSB7Ci0gICAgU1RMU3RyaW5nUmVzaXplVW5pbml0aWFsaXplZChidWZmZXIs
IHNpemUpOwotICAgIHN0ZDo6cGFpcjxjaGFyKiwgYm9vbD4geiA9IGFzX3N0cmluZ19kYXRhKGJ1
ZmZlcik7Ci0gICAgaWYgKHouc2Vjb25kKSB7Ci0gICAgICAvLyBPZGRseSBlbm91Z2gsIG1lbWNw
eSgpIHJlcXVpcmVzIGl0cyBmaXJzdCB0d28gYXJncyB0byBiZSBub24tTlVMTCBldmVuCi0gICAg
ICAvLyBpZiB3ZSBjb3B5IDAgYnl0ZXMuICBTbywgd2UgaGF2ZSBlbnN1cmVkIHRoYXQgei5maXJz
dCBpcyBub24tTlVMTCBoZXJlLgotICAgICAgR09PR0xFX0RDSEVDSyh6LmZpcnN0ICE9IE5VTEwp
OwotICAgICAgbWVtY3B5KHouZmlyc3QsIGJ1ZmZlcl8sIHNpemUpOwotICAgICAgQWR2YW5jZShz
aXplKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gUmVhZFN0cmlu
Z0ZhbGxiYWNrKGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KLWlubGluZSBib29sIENvZGVkSW5wdXRTdHJl
YW06OkludGVybmFsUmVhZFJhd0lubGluZSh2b2lkKiBidWZmZXIsIGludCBzaXplKSB7Ci0gIGlu
dCBjdXJyZW50X2J1ZmZlcl9zaXplOwotICB3aGlsZSAoKGN1cnJlbnRfYnVmZmVyX3NpemUgPSBC
dWZmZXJTaXplKCkpIDwgc2l6ZSkgewotICAgIC8vIFJlYWRpbmcgcGFzdCBlbmQgb2YgYnVmZmVy
LiAgQ29weSB3aGF0IHdlIGhhdmUsIHRoZW4gcmVmcmVzaC4KLSAgICBtZW1jcHkoYnVmZmVyLCBi
dWZmZXJfLCBjdXJyZW50X2J1ZmZlcl9zaXplKTsKLSAgICBidWZmZXIgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4Kj4oYnVmZmVyKSArIGN1cnJlbnRfYnVmZmVyX3NpemU7Ci0gICAgc2l6ZSAtPSBj
dXJyZW50X2J1ZmZlcl9zaXplOwotICAgIEFkdmFuY2UoY3VycmVudF9idWZmZXJfc2l6ZSk7Ci0g
ICAgaWYgKCFSZWZyZXNoKCkpIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIG1lbWNweShidWZmZXIs
IGJ1ZmZlcl8sIHNpemUpOwotICBBZHZhbmNlKHNpemUpOwotCi0gIHJldHVybiB0cnVlOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFt
ZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfSU9fQ09ERURfU1RSRUFN
X0lOTF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW1f
dW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtX3VuaXR0ZXN0
LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODEwOGU0NTcyYmM1MTExNjQ4ZTEy
ZThiOWQyZmUxY2ZlNGQyZmJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW1fdW5pdHRlc3QuY2MK
KysrIC9kZXYvbnVsbApAQCAtMSwxMzg1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEp
Ci0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBT
YW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBUaGlzIGZpbGUg
Y29udGFpbnMgdGVzdHMgYW5kIGJlbmNobWFya3MuCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZu
ZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVk
X3B0ci5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
bG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3Qu
aD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9p
by96ZXJvX2NvcHlfc3RyZWFtX2ltcGwuaD4KLQotCi0vLyBUaGlzIGRlY2xhcmVzIGFuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnRlZ2VyIGxpdGVyYWwgaW4gYSBwb3J0YWJsZSB3YXkuCi0vLyAoVGhl
IG9yaWdpbmFsIG1hY3JvIGlzIHdheSB0b28gYmlnIGFuZCBydWlucyBteSBmb3JtYXR0aW5nLikK
LSN1bmRlZiBVTEwKLSNkZWZpbmUgVUxMKHgpIEdPT0dMRV9VTE9OR0xPTkcoeCkKLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGlvIHsKLW5hbWVz
cGFjZSB7Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIERhdGEtRHJpdmVuIFRlc3QgSW5mcmFzdHJ1Y3R1
cmUKLQotLy8gVEVTVF8xRCBhbmQgVEVTVF8yRCBhcmUgbWFjcm9zIEknZCBldmVudHVhbGx5IGxp
a2UgdG8gc2VlIGFkZGVkIHRvCi0vLyBnVGVzdC4gIFRoZXNlIG1hY3JvcyBjYW4gYmUgdXNlZCB0
byBkZWNsYXJlIHRlc3RzIHdoaWNoIHNob3VsZCBiZQotLy8gcnVuIG11bHRpcGxlIHRpbWVzLCBv
bmNlIGZvciBlYWNoIGl0ZW0gaW4gc29tZSBpbnB1dCBhcnJheS4gIFRFU1RfMUQKLS8vIHRlc3Rz
IGFsbCBjYXNlcyBpbiBhIHNpbmdsZSBpbnB1dCBhcnJheS4gIFRFU1RfMkQgdGVzdHMgYWxsCi0v
LyBjb21iaW5hdGlvbnMgb2YgY2FzZXMgZnJvbSB0d28gYXJyYXlzLiAgVGhlIGFycmF5cyBtdXN0
IGJlIHN0YXRpY2FsbHkKLS8vIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBHT09HTEVfQVJSQVlTSVpF
KCkgbWFjcm8gd29ya3Mgb24gdGhlbS4gIEV4YW1wbGU6Ci0vLwotLy8gaW50IGtDYXNlc1tdID0g
ezEsIDIsIDMsIDR9Ci0vLyBURVNUXzFEKE15Rml4dHVyZSwgTXlUZXN0LCBrQ2FzZXMpIHsKLS8v
ICAgRVhQRUNUX0dUKGtDYXNlc19jYXNlLCAwKTsKLS8vIH0KLS8vCi0vLyBUaGlzIHRlc3QgaXRl
cmF0ZXMgdGhyb3VnaCB0aGUgbnVtYmVycyAxLCAyLCAzLCBhbmQgNCBhbmQgdGVzdHMgdGhhdAot
Ly8gdGhleSBhcmUgYWxsIGdyYXRlciB0aGFuIHplcm8uICBJbiBjYXNlIG9mIGZhaWx1cmUsIHRo
ZSBleGFjdCBjYXNlCi0vLyB3aGljaCBmYWlsZWQgd2lsbCBiZSBwcmludGVkLiAgVGhlIGNhc2Ug
dHlwZSBtdXN0IGJlIHByaW50YWJsZSB1c2luZwotLy8gb3N0cmVhbTo6b3BlcmF0b3I8PC4KLQot
Ly8gVE9ETyhrZW50b24pOiAgZ1Rlc3Qgbm93IHN1cHBvcnRzICJwYXJhbWV0ZXJpemVkIHRlc3Rz
IiB3aGljaCB3b3VsZCBiZQotLy8gICBhIGJldHRlciB3YXkgdG8gYWNjb21wbGlzaCB0aGlzLiAg
UmV3cml0ZSB3aGVuIHRpbWUgcGVybWl0cy4KLQotI2RlZmluZSBURVNUXzFEKEZJWFRVUkUsIE5B
TUUsIENBU0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjbGFz
cyBGSVhUVVJFIyNfIyNOQU1FIyNfREQgOiBwdWJsaWMgRklYVFVSRSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgcHJvdGVjdGVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDYXNlVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHZvaWQgRG9TaW5nbGVDYXNlKGNvbnN0IENhc2VUeXBlJiBDQVNFUyMjX2Nhc2UpOyAgICAg
ICAgICAgICAgICAgICAgICAgXAotICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBURVNUX0YoRklYVFVSRSMjXyMjTkFNRSMjX0RELCBOQU1FKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgR09PR0xF
X0FSUkFZU0laRShDQVNFUyk7IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIFNDT1BFRF9UUkFDRSh0ZXN0aW5nOjpNZXNzYWdlKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgPDwgI0NBU0VTICIgY2FzZSAjIiA8PCBpIDw8ICI6
ICIgPDwgQ0FTRVNbaV0pOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIERvU2luZ2xlQ2Fz
ZShDQVNFU1tpXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIENhc2VUeXBlPiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdm9pZCBGSVhUVVJFIyNfIyNOQU1FIyNf
REQ6OkRvU2luZ2xlQ2FzZShjb25zdCBDYXNlVHlwZSYgQ0FTRVMjI19jYXNlKQotCi0jZGVmaW5l
IFRFU1RfMkQoRklYVFVSRSwgTkFNRSwgQ0FTRVMxLCBDQVNFUzIpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGNsYXNzIEZJWFRVUkUjI18jI05BTUUjI19ERCA6IHB1YmxpYyBGSVhU
VVJFIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBwcm90ZWN0ZWQ6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIENhc2VUeXBlMSwgdHlwZW5hbWUgQ2FzZVR5cGUyPiAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBEb1NpbmdsZUNhc2UoY29uc3QgQ2FzZVR5cGUx
JiBDQVNFUzEjI19jYXNlLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQ2FzZVR5cGUyJiBDQVNFUzIjI19jYXNlKTsgICAgICAgICAgICAgICAgICAg
ICBcCi0gIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFRFU1RfRihG
SVhUVVJFIyNfIyNOQU1FIyNfREQsIE5BTUUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBHT09HTEVfQVJSQVlTSVpFKENBU0VT
MSk7IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCBHT09HTEVfQVJSQVlTSVpFKENBU0VTMik7IGorKykgeyAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgU0NPUEVEX1RSQUNFKHRlc3Rpbmc6Ok1lc3NhZ2UoKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICA8PCAjQ0FTRVMxICIgY2Fz
ZSAjIiA8PCBpIDw8ICI6ICIgPDwgQ0FTRVMxW2ldIDw8ICIsICIgICAgICAgICAgIFwKLSAgICAg
ICAgICA8PCAjQ0FTRVMyICIgY2FzZSAjIiA8PCBqIDw8ICI6ICIgPDwgQ0FTRVMyW2pdKTsgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgRG9TaW5nbGVDYXNlKENBU0VTMVtpXSwgQ0FTRVMyW2pd
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIENhc2VUeXBlMSwgdHlwZW5hbWUgQ2FzZVR5cGUy
PiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdm9pZCBGSVhUVVJFIyNfIyNOQU1FIyNfREQ6
OkRvU2luZ2xlQ2FzZShjb25zdCBDYXNlVHlwZTEmIENBU0VTMSMjX2Nhc2UsIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDYXNlVHlwZTImIENBU0VT
MiMjX2Nhc2UpCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotY2xhc3MgQ29kZWRTdHJlYW1UZXN0IDogcHVi
bGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgLy8gSGVscGVyIG1ldGhvZCB1c2Vk
IGJ5IHRlc3RzIGZvciBieXRlcyB3YXJuaW5nLiBTZWUgaW1wbGVtZW50YXRpb24gY29tbWVudAot
ICAvLyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KLSAgc3RhdGljIHZvaWQgU2V0dXBUb3RhbEJ5
dGVzTGltaXRXYXJuaW5nVGVzdCgKLSAgICAgIGludCB0b3RhbF9ieXRlc19saW1pdCwgaW50IHdh
cm5pbmdfdGhyZXNob2xkLAotICAgICAgdmVjdG9yPHN0cmluZz4qIG91dF9lcnJvcnMsIHZlY3Rv
cjxzdHJpbmc+KiBvdXRfd2FybmluZ3MpOwotCi0gIC8vIEJ1ZmZlciB1c2VkIGR1cmluZyBtb3N0
IG9mIHRoZSB0ZXN0cy4gVGhpcyBhc3N1bWVzIHRlc3RzIHJ1biBzZXF1ZW50aWFsbHkuCi0gIHN0
YXRpYyBjb25zdCBpbnQga0J1ZmZlclNpemUgPSAxMDI0ICogNjQ7Ci0gIHN0YXRpYyB1aW50OCBi
dWZmZXJfW2tCdWZmZXJTaXplXTsKLX07Ci0KLXVpbnQ4IENvZGVkU3RyZWFtVGVzdDo6YnVmZmVy
X1tDb2RlZFN0cmVhbVRlc3Q6OmtCdWZmZXJTaXplXTsKLQotLy8gV2UgdGVzdCBlYWNoIG9wZXJh
dGlvbiBvdmVyIGEgdmFyaWV0eSBvZiBibG9jayBzaXplcyB0byBpbnN1cmUgdGhhdAotLy8gd2Ug
dGVzdCBjYXNlcyB3aGVyZSByZWFkcyBvciB3cml0ZXMgY3Jvc3MgYnVmZmVyIGJvdW5kYXJpZXMs
IGNhc2VzCi0vLyB3aGVyZSB0aGV5IGRvbid0LCBhbmQgY2FzZXMgd2hlcmUgdGhlcmUgaXMgc28g
bXVjaCBidWZmZXIgbGVmdCB0aGF0Ci0vLyB3ZSBjYW4gdXNlIHNwZWNpYWwgb3B0aW1pemVkIHBh
dGhzIHRoYXQgZG9uJ3Qgd29ycnkgYWJvdXQgYm91bmRzCi0vLyBjaGVja3MuCi1jb25zdCBpbnQg
a0Jsb2NrU2l6ZXNbXSA9IHsxLCAyLCAzLCA1LCA3LCAxMywgMzIsIDEwMjR9OwotCi0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIFZhcmludCB0ZXN0cy4KLQotc3RydWN0IFZhcmludENhc2UgewotICB1aW50
OCBieXRlc1sxMF07ICAgICAgICAgIC8vIEVuY29kZWQgYnl0ZXMuCi0gIGludCBzaXplOyAgICAg
ICAgICAgICAgICAgLy8gRW5jb2RlZCBzaXplLCBpbiBieXRlcy4KLSAgdWludDY0IHZhbHVlOyAg
ICAgICAgICAgICAvLyBQYXJzZWQgdmFsdWUuCi19OwotCi1pbmxpbmUgc3RkOjpvc3RyZWFtJiBv
cGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IFZhcmludENhc2UmIGMpIHsKLSAgcmV0
dXJuIG9zIDw8IGMudmFsdWU7Ci19Ci0KLVZhcmludENhc2Uga1ZhcmludENhc2VzW10gPSB7Ci0g
IC8vIDMyLWJpdCB2YWx1ZXMKLSAge3sweDAwfSAgICAgICwgMSwgMH0sCi0gIHt7MHgwMX0gICAg
ICAsIDEsIDF9LAotICB7ezB4N2Z9ICAgICAgLCAxLCAxMjd9LAotICB7ezB4YTIsIDB4NzR9LCAy
LCAoMHgyMiA8PCAwKSB8ICgweDc0IDw8IDcpfSwgICAgICAgICAgLy8gMTQ4ODIKLSAge3sweGJl
LCAweGY3LCAweDkyLCAweDg0LCAweDBifSwgNSwgICAgICAgICAgICAgICAgICAgIC8vIDI5NjE0
ODg4MzAKLSAgICAoMHgzZSA8PCAwKSB8ICgweDc3IDw8IDcpIHwgKDB4MTIgPDwgMTQpIHwgKDB4
MDQgPDwgMjEpIHwKLSAgICAoVUxMKDB4MGIpIDw8IDI4KX0sCi0KLSAgLy8gNjQtYml0Ci0gIHt7
MHhiZSwgMHhmNywgMHg5MiwgMHg4NCwgMHgxYn0sIDUsICAgICAgICAgICAgICAgICAgICAvLyA3
MjU2NDU2MTI2Ci0gICAgKDB4M2UgPDwgMCkgfCAoMHg3NyA8PCA3KSB8ICgweDEyIDw8IDE0KSB8
ICgweDA0IDw8IDIxKSB8Ci0gICAgKFVMTCgweDFiKSA8PCAyOCl9LAotICB7ezB4ODAsIDB4ZTYs
IDB4ZWIsIDB4OWMsIDB4YzMsIDB4YzksIDB4YTQsIDB4NDl9LCA4LCAgLy8gNDEyNTYyMDI1ODA3
MTgzMzYKLSAgICAoMHgwMCA8PCAwKSB8ICgweDY2IDw8IDcpIHwgKDB4NmIgPDwgMTQpIHwgKDB4
MWMgPDwgMjEpIHwKLSAgICAoVUxMKDB4NDMpIDw8IDI4KSB8IChVTEwoMHg0OSkgPDwgMzUpIHwg
KFVMTCgweDI0KSA8PCA0MikgfAotICAgIChVTEwoMHg0OSkgPDwgNDkpfSwKLSAgLy8gMTE5NjQz
NzgzMzA5Nzg3MzUxMzEKLSAge3sweDliLCAweGE4LCAweGY5LCAweGMyLCAweGJiLCAweGQ2LCAw
eDgwLCAweDg1LCAweGE2LCAweDAxfSwgMTAsCi0gICAgKDB4MWIgPDwgMCkgfCAoMHgyOCA8PCA3
KSB8ICgweDc5IDw8IDE0KSB8ICgweDQyIDw8IDIxKSB8Ci0gICAgKFVMTCgweDNiKSA8PCAyOCkg
fCAoVUxMKDB4NTYpIDw8IDM1KSB8IChVTEwoMHgwMCkgPDwgNDIpIHwKLSAgICAoVUxMKDB4MDUp
IDw8IDQ5KSB8IChVTEwoMHgyNikgPDwgNTYpIHwgKFVMTCgweDAxKSA8PCA2Myl9LAotfTsKLQot
VEVTVF8yRChDb2RlZFN0cmVhbVRlc3QsIFJlYWRWYXJpbnQzMiwga1ZhcmludENhc2VzLCBrQmxv
Y2tTaXplcykgewotICBtZW1jcHkoYnVmZmVyXywga1ZhcmludENhc2VzX2Nhc2UuYnl0ZXMsIGtW
YXJpbnRDYXNlc19jYXNlLnNpemUpOwotICBBcnJheUlucHV0U3RyZWFtIGlucHV0KGJ1ZmZlcl8s
IHNpemVvZihidWZmZXJfKSwga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0KLSAgewotICAgIENvZGVkSW5w
dXRTdHJlYW0gY29kZWRfaW5wdXQoJmlucHV0KTsKLQotICAgIHVpbnQzMiB2YWx1ZTsKLSAgICBF
WFBFQ1RfVFJVRShjb2RlZF9pbnB1dC5SZWFkVmFyaW50MzIoJnZhbHVlKSk7Ci0gICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHVpbnQzMj4oa1ZhcmludENhc2VzX2Nhc2UudmFsdWUpLCB2YWx1ZSk7
Ci0gIH0KLQotICBFWFBFQ1RfRVEoa1ZhcmludENhc2VzX2Nhc2Uuc2l6ZSwgaW5wdXQuQnl0ZUNv
dW50KCkpOwotfQotCi1URVNUXzJEKENvZGVkU3RyZWFtVGVzdCwgUmVhZFRhZywga1ZhcmludENh
c2VzLCBrQmxvY2tTaXplcykgewotICBtZW1jcHkoYnVmZmVyXywga1ZhcmludENhc2VzX2Nhc2Uu
Ynl0ZXMsIGtWYXJpbnRDYXNlc19jYXNlLnNpemUpOwotICBBcnJheUlucHV0U3RyZWFtIGlucHV0
KGJ1ZmZlcl8sIHNpemVvZihidWZmZXJfKSwga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0KLSAgewotICAg
IENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJmlucHV0KTsKLQotICAgIHVpbnQzMiBleHBl
Y3RlZF92YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQzMj4oa1ZhcmludENhc2VzX2Nhc2UudmFsdWUp
OwotICAgIEVYUEVDVF9FUShleHBlY3RlZF92YWx1ZSwgY29kZWRfaW5wdXQuUmVhZFRhZygpKTsK
LQotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0Lkxhc3RUYWdXYXMoZXhwZWN0ZWRfdmFsdWUp
KTsKLSAgICBFWFBFQ1RfRkFMU0UoY29kZWRfaW5wdXQuTGFzdFRhZ1dhcyhleHBlY3RlZF92YWx1
ZSArIDEpKTsKLSAgfQotCi0gIEVYUEVDVF9FUShrVmFyaW50Q2FzZXNfY2FzZS5zaXplLCBpbnB1
dC5CeXRlQ291bnQoKSk7Ci19Ci0KLS8vIFRoaXMgaXMgdGhlIHJlZ3Jlc3Npb24gdGVzdCB0aGF0
IHZlcmlmaWVzIHRoYXQgdGhlcmUgaXMgbm8gaXNzdWVzCi0vLyB3aXRoIHRoZSBlbXB0eSBpbnB1
dCBidWZmZXJzIGhhbmRsaW5nLgotVEVTVF9GKENvZGVkU3RyZWFtVGVzdCwgRW1wdHlJbnB1dEJl
Zm9yZUVvcykgewotICBjbGFzcyBJbiA6IHB1YmxpYyBaZXJvQ29weUlucHV0U3RyZWFtIHsKLSAg
IHB1YmxpYzoKLSAgICBJbigpIDogY291bnRfKDApIHt9Ci0gICBwcml2YXRlOgotICAgIHZpcnR1
YWwgYm9vbCBOZXh0KGNvbnN0IHZvaWQqKiBkYXRhLCBpbnQqIHNpemUpIHsKLSAgICAgICpkYXRh
ID0gTlVMTDsKLSAgICAgICpzaXplID0gMDsKLSAgICAgIHJldHVybiBjb3VudF8rKyA8IDI7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBCYWNrVXAoaW50IGNvdW50KSAgewotICAgICAgR09PR0xF
X0xPRyhGQVRBTCkgPDwgIlRlc3RzIG5ldmVyIGNhbGwgdGhpcy4iOwotICAgIH0KLSAgICB2aXJ0
dWFsIGJvb2wgU2tpcChpbnQgY291bnQpIHsKLSAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJU
ZXN0cyBuZXZlciBjYWxsIHRoaXMuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
dmlydHVhbCBpbnQ2NCBCeXRlQ291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgaW50IGNv
dW50XzsKLSAgfSBpbjsKLSAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCgmaW4pOwotICBpbnB1dC5S
ZWFkVGFnKCk7Ci0gIEVYUEVDVF9UUlVFKGlucHV0LkNvbnN1bWVkRW50aXJlTWVzc2FnZSgpKTsK
LX0KLQotVEVTVF8xRChDb2RlZFN0cmVhbVRlc3QsIEV4cGVjdFRhZywga1ZhcmludENhc2VzKSB7
Ci0gIC8vIExlYXZlIG9uZSBieXRlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBzbyB3
ZSBjYW4gcmVhZCBpdAotICAvLyB0byBmb3JjZSB0aGUgZmlyc3QgYnVmZmVyIHRvIGJlIGxvYWRl
ZC4KLSAgYnVmZmVyX1swXSA9ICdcMCc7Ci0gIG1lbWNweShidWZmZXJfICsgMSwga1ZhcmludENh
c2VzX2Nhc2UuYnl0ZXMsIGtWYXJpbnRDYXNlc19jYXNlLnNpemUpOwotICBBcnJheUlucHV0U3Ry
ZWFtIGlucHV0KGJ1ZmZlcl8sIHNpemVvZihidWZmZXJfKSk7Ci0KLSAgewotICAgIENvZGVkSW5w
dXRTdHJlYW0gY29kZWRfaW5wdXQoJmlucHV0KTsKLQotICAgIC8vIFJlYWQgb25lIGJ5dGUgdG8g
Zm9yY2UgY29kZWRfaW5wdXQuUmVmaWxsKCkgdG8gYmUgY2FsbGVkLiAgT3RoZXJ3aXNlLAotICAg
IC8vIEV4cGVjdFRhZygpIHdpbGwgcmV0dXJuIGEgZmFsc2UgbmVnYXRpdmUuCi0gICAgdWludDgg
ZHVtbXk7Ci0gICAgY29kZWRfaW5wdXQuUmVhZFJhdygmZHVtbXksIDEpOwotICAgIEVYUEVDVF9F
USgodWludCknXDAnLCAodWludClkdW1teSk7Ci0KLSAgICB1aW50MzIgZXhwZWN0ZWRfdmFsdWUg
PSBzdGF0aWNfY2FzdDx1aW50MzI+KGtWYXJpbnRDYXNlc19jYXNlLnZhbHVlKTsKLQotICAgIC8v
IEV4cGVjdFRhZygpIHByb2R1Y2VzIGZhbHNlIG5lZ2F0aXZlcyBmb3IgbGFyZ2UgdmFsdWVzLgot
ICAgIGlmIChrVmFyaW50Q2FzZXNfY2FzZS5zaXplIDw9IDIpIHsKLSAgICAgIEVYUEVDVF9GQUxT
RShjb2RlZF9pbnB1dC5FeHBlY3RUYWcoZXhwZWN0ZWRfdmFsdWUgKyAxKSk7Ci0gICAgICBFWFBF
Q1RfVFJVRShjb2RlZF9pbnB1dC5FeHBlY3RUYWcoZXhwZWN0ZWRfdmFsdWUpKTsKLSAgICB9IGVs
c2UgewotICAgICAgRVhQRUNUX0ZBTFNFKGNvZGVkX2lucHV0LkV4cGVjdFRhZyhleHBlY3RlZF92
YWx1ZSkpOwotICAgIH0KLSAgfQotCi0gIGlmIChrVmFyaW50Q2FzZXNfY2FzZS5zaXplIDw9IDIp
IHsKLSAgICBFWFBFQ1RfRVEoa1ZhcmludENhc2VzX2Nhc2Uuc2l6ZSArIDEsIGlucHV0LkJ5dGVD
b3VudCgpKTsKLSAgfSBlbHNlIHsKLSAgICBFWFBFQ1RfRVEoMSwgaW5wdXQuQnl0ZUNvdW50KCkp
OwotICB9Ci19Ci0KLVRFU1RfMUQoQ29kZWRTdHJlYW1UZXN0LCBFeHBlY3RUYWdGcm9tQXJyYXks
IGtWYXJpbnRDYXNlcykgewotICBtZW1jcHkoYnVmZmVyXywga1ZhcmludENhc2VzX2Nhc2UuYnl0
ZXMsIGtWYXJpbnRDYXNlc19jYXNlLnNpemUpOwotCi0gIGNvbnN0IHVpbnQzMiBleHBlY3RlZF92
YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQzMj4oa1ZhcmludENhc2VzX2Nhc2UudmFsdWUpOwotCi0g
IC8vIElmIHRoZSBleHBlY3RhdGlvbiBzdWNjZWVkcywgaXQgc2hvdWxkIHJldHVybiBhIHBvaW50
ZXIgcGFzdCB0aGUgdGFnLgotICBpZiAoa1ZhcmludENhc2VzX2Nhc2Uuc2l6ZSA8PSAyKSB7Ci0g
ICAgRVhQRUNUX1RSVUUoTlVMTCA9PQotICAgICAgICAgICAgICAgIENvZGVkSW5wdXRTdHJlYW06
OkV4cGVjdFRhZ0Zyb21BcnJheShidWZmZXJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF92YWx1ZSArIDEpKTsKLSAgICBFWFBF
Q1RfVFJVRShidWZmZXJfICsga1ZhcmludENhc2VzX2Nhc2Uuc2l6ZSA9PQotICAgICAgICAgICAg
ICAgIENvZGVkSW5wdXRTdHJlYW06OkV4cGVjdFRhZ0Zyb21BcnJheShidWZmZXJfLCBleHBlY3Rl
ZF92YWx1ZSkpOwotICB9IGVsc2UgewotICAgIEVYUEVDVF9UUlVFKE5VTEwgPT0KLSAgICAgICAg
ICAgICAgICBDb2RlZElucHV0U3RyZWFtOjpFeHBlY3RUYWdGcm9tQXJyYXkoYnVmZmVyXywgZXhw
ZWN0ZWRfdmFsdWUpKTsKLSAgfQotfQotCi1URVNUXzJEKENvZGVkU3RyZWFtVGVzdCwgUmVhZFZh
cmludDY0LCBrVmFyaW50Q2FzZXMsIGtCbG9ja1NpemVzKSB7Ci0gIG1lbWNweShidWZmZXJfLCBr
VmFyaW50Q2FzZXNfY2FzZS5ieXRlcywga1ZhcmludENhc2VzX2Nhc2Uuc2l6ZSk7Ci0gIEFycmF5
SW5wdXRTdHJlYW0gaW5wdXQoYnVmZmVyXywgc2l6ZW9mKGJ1ZmZlcl8pLCBrQmxvY2tTaXplc19j
YXNlKTsKLQotICB7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSBjb2RlZF9pbnB1dCgmaW5wdXQpOwot
Ci0gICAgdWludDY0IHZhbHVlOwotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRWYXJp
bnQ2NCgmdmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoa1ZhcmludENhc2VzX2Nhc2UudmFsdWUsIHZh
bHVlKTsKLSAgfQotCi0gIEVYUEVDVF9FUShrVmFyaW50Q2FzZXNfY2FzZS5zaXplLCBpbnB1dC5C
eXRlQ291bnQoKSk7Ci19Ci0KLVRFU1RfMkQoQ29kZWRTdHJlYW1UZXN0LCBXcml0ZVZhcmludDMy
LCBrVmFyaW50Q2FzZXMsIGtCbG9ja1NpemVzKSB7Ci0gIGlmIChrVmFyaW50Q2FzZXNfY2FzZS52
YWx1ZSA+IFVMTCgweDAwMDAwMDAwRkZGRkZGRkYpKSB7Ci0gICAgLy8gU2tpcCB0aGlzIHRlc3Qg
Zm9yIHRoZSA2NC1iaXQgdmFsdWVzLgotICAgIHJldHVybjsKLSAgfQotCi0gIEFycmF5T3V0cHV0
U3RyZWFtIG91dHB1dChidWZmZXJfLCBzaXplb2YoYnVmZmVyXyksIGtCbG9ja1NpemVzX2Nhc2Up
OwotCi0gIHsKLSAgICBDb2RlZE91dHB1dFN0cmVhbSBjb2RlZF9vdXRwdXQoJm91dHB1dCk7Ci0K
LSAgICBjb2RlZF9vdXRwdXQuV3JpdGVWYXJpbnQzMihzdGF0aWNfY2FzdDx1aW50MzI+KGtWYXJp
bnRDYXNlc19jYXNlLnZhbHVlKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvZGVkX291dHB1dC5IYWRF
cnJvcigpKTsKLQotICAgIEVYUEVDVF9FUShrVmFyaW50Q2FzZXNfY2FzZS5zaXplLCBjb2RlZF9v
dXRwdXQuQnl0ZUNvdW50KCkpOwotICB9Ci0KLSAgRVhQRUNUX0VRKGtWYXJpbnRDYXNlc19jYXNl
LnNpemUsIG91dHB1dC5CeXRlQ291bnQoKSk7Ci0gIEVYUEVDVF9FUSgwLAotICAgIG1lbWNtcChi
dWZmZXJfLCBrVmFyaW50Q2FzZXNfY2FzZS5ieXRlcywga1ZhcmludENhc2VzX2Nhc2Uuc2l6ZSkp
OwotfQotCi1URVNUXzJEKENvZGVkU3RyZWFtVGVzdCwgV3JpdGVWYXJpbnQ2NCwga1ZhcmludENh
c2VzLCBrQmxvY2tTaXplcykgewotICBBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQoYnVmZmVyXywg
c2l6ZW9mKGJ1ZmZlcl8pLCBrQmxvY2tTaXplc19jYXNlKTsKLQotICB7Ci0gICAgQ29kZWRPdXRw
dXRTdHJlYW0gY29kZWRfb3V0cHV0KCZvdXRwdXQpOwotCi0gICAgY29kZWRfb3V0cHV0LldyaXRl
VmFyaW50NjQoa1ZhcmludENhc2VzX2Nhc2UudmFsdWUpOwotICAgIEVYUEVDVF9GQUxTRShjb2Rl
ZF9vdXRwdXQuSGFkRXJyb3IoKSk7Ci0KLSAgICBFWFBFQ1RfRVEoa1ZhcmludENhc2VzX2Nhc2Uu
c2l6ZSwgY29kZWRfb3V0cHV0LkJ5dGVDb3VudCgpKTsKLSAgfQotCi0gIEVYUEVDVF9FUShrVmFy
aW50Q2FzZXNfY2FzZS5zaXplLCBvdXRwdXQuQnl0ZUNvdW50KCkpOwotICBFWFBFQ1RfRVEoMCwK
LSAgICBtZW1jbXAoYnVmZmVyXywga1ZhcmludENhc2VzX2Nhc2UuYnl0ZXMsIGtWYXJpbnRDYXNl
c19jYXNlLnNpemUpKTsKLX0KLQotLy8gVGhpcyB0ZXN0IGNhdXNlcyBnY2MgMy4zLjUgKGFuZCBl
YXJsaWVyPykgdG8gZ2l2ZSB0aGUgY3J5cHRpYyBlcnJvcjoKLS8vICAgInNvcnJ5LCB1bmltcGxl
bWVudGVkOiBgbWV0aG9kX2NhbGxfZXhwcicgbm90IHN1cHBvcnRlZCBieSBkdW1wX2V4cHIiCi0j
aWYgIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAm
JiBfX0dOVUNfTUlOT1JfXyA+IDMpCi0KLWludDMyIGtTaWduRXh0ZW5kZWRWYXJpbnRDYXNlc1td
ID0gewotICAwLCAxLCAtMSwgMTIzNzg5NCwgLTM3ODk1MTM4Ci19OwotCi1URVNUXzJEKENvZGVk
U3RyZWFtVGVzdCwgV3JpdGVWYXJpbnQzMlNpZ25FeHRlbmRlZCwKLSAgICAgICAga1NpZ25FeHRl
bmRlZFZhcmludENhc2VzLCBrQmxvY2tTaXplcykgewotICBBcnJheU91dHB1dFN0cmVhbSBvdXRw
dXQoYnVmZmVyXywgc2l6ZW9mKGJ1ZmZlcl8pLCBrQmxvY2tTaXplc19jYXNlKTsKLQotICB7Ci0g
ICAgQ29kZWRPdXRwdXRTdHJlYW0gY29kZWRfb3V0cHV0KCZvdXRwdXQpOwotCi0gICAgY29kZWRf
b3V0cHV0LldyaXRlVmFyaW50MzJTaWduRXh0ZW5kZWQoa1NpZ25FeHRlbmRlZFZhcmludENhc2Vz
X2Nhc2UpOwotICAgIEVYUEVDVF9GQUxTRShjb2RlZF9vdXRwdXQuSGFkRXJyb3IoKSk7Ci0KLSAg
ICBpZiAoa1NpZ25FeHRlbmRlZFZhcmludENhc2VzX2Nhc2UgPCAwKSB7Ci0gICAgICBFWFBFQ1Rf
RVEoMTAsIGNvZGVkX291dHB1dC5CeXRlQ291bnQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEVY
UEVDVF9MRShjb2RlZF9vdXRwdXQuQnl0ZUNvdW50KCksIDUpOwotICAgIH0KLSAgfQotCi0gIGlm
IChrU2lnbkV4dGVuZGVkVmFyaW50Q2FzZXNfY2FzZSA8IDApIHsKLSAgICBFWFBFQ1RfRVEoMTAs
IG91dHB1dC5CeXRlQ291bnQoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgRVhQRUNUX0xFKG91dHB1dC5C
eXRlQ291bnQoKSwgNSk7Ci0gIH0KLQotICAvLyBSZWFkIHZhbHVlIGJhY2sgaW4gYXMgYSB2YXJp
bnQ2NCBhbmQgaW5zdXJlIGl0IG1hdGNoZXMuCi0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVm
ZmVyXywgc2l6ZW9mKGJ1ZmZlcl8pKTsKLQotICB7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSBjb2Rl
ZF9pbnB1dCgmaW5wdXQpOwotCi0gICAgdWludDY0IHZhbHVlOwotICAgIEVYUEVDVF9UUlVFKGNv
ZGVkX2lucHV0LlJlYWRWYXJpbnQ2NCgmdmFsdWUpKTsKLQotICAgIEVYUEVDVF9FUShrU2lnbkV4
dGVuZGVkVmFyaW50Q2FzZXNfY2FzZSwgc3RhdGljX2Nhc3Q8aW50NjQ+KHZhbHVlKSk7Ci0gIH0K
LQotICBFWFBFQ1RfRVEob3V0cHV0LkJ5dGVDb3VudCgpLCBpbnB1dC5CeXRlQ291bnQoKSk7Ci19
Ci0KLSNlbmRpZgotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFZhcmludCBmYWlsdXJlIHRlc3QuCi0K
LXN0cnVjdCBWYXJpbnRFcnJvckNhc2UgewotICB1aW50OCBieXRlc1sxMl07Ci0gIGludCBzaXpl
OwotICBib29sIGNhbl9wYXJzZTsKLX07Ci0KLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9y
PDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgVmFyaW50RXJyb3JDYXNlJiBjKSB7Ci0gIHJldHVy
biBvcyA8PCAic2l6ZSAiIDw8IGMuc2l6ZTsKLX0KLQotY29uc3QgVmFyaW50RXJyb3JDYXNlIGtW
YXJpbnRFcnJvckNhc2VzW10gPSB7Ci0gIC8vIENvbnRyb2wgY2FzZS4gIChJbnN1cmVzIHRoYXQg
dGhlcmUgaXNuJ3Qgc29tZXRoaW5nIGVsc2Ugd3JvbmcgdGhhdAotICAvLyBtYWtlcyBwYXJzaW5n
IGFsd2F5cyBmYWlsLikKLSAge3sweDAwfSwgMSwgdHJ1ZX0sCi0KLSAgLy8gTm8gaW5wdXQgZGF0
YS4KLSAge3t9LCAwLCBmYWxzZX0sCi0KLSAgLy8gSW5wdXQgZW5kcyB1bmV4cGVjdGVkbHkuCi0g
IHt7MHhmMCwgMHhhYn0sIDIsIGZhbHNlfSwKLQotICAvLyBJbnB1dCBlbmRzIHVuZXhwZWN0ZWRs
eSBhZnRlciAzMiBiaXRzLgotICB7ezB4ZjAsIDB4YWIsIDB4YzksIDB4OWEsIDB4ZjgsIDB4YjJ9
LCA2LCBmYWxzZX0sCi0KLSAgLy8gTG9uZ2VyIHRoYW4gMTAgYnl0ZXMuCi0gIHt7MHhmZiwgMHhm
ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMX0s
Ci0gICAxMSwgZmFsc2V9LAotfTsKLQotVEVTVF8yRChDb2RlZFN0cmVhbVRlc3QsIFJlYWRWYXJp
bnQzMkVycm9yLCBrVmFyaW50RXJyb3JDYXNlcywga0Jsb2NrU2l6ZXMpIHsKLSAgbWVtY3B5KGJ1
ZmZlcl8sIGtWYXJpbnRFcnJvckNhc2VzX2Nhc2UuYnl0ZXMsIGtWYXJpbnRFcnJvckNhc2VzX2Nh
c2Uuc2l6ZSk7Ci0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVmZmVyXywga1ZhcmludEVycm9y
Q2FzZXNfY2FzZS5zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgIGtCbG9ja1NpemVzX2Nh
c2UpOwotICBDb2RlZElucHV0U3RyZWFtIGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0KLSAgdWludDMy
IHZhbHVlOwotICBFWFBFQ1RfRVEoa1ZhcmludEVycm9yQ2FzZXNfY2FzZS5jYW5fcGFyc2UsIGNv
ZGVkX2lucHV0LlJlYWRWYXJpbnQzMigmdmFsdWUpKTsKLX0KLQotVEVTVF8yRChDb2RlZFN0cmVh
bVRlc3QsIFJlYWRWYXJpbnQ2NEVycm9yLCBrVmFyaW50RXJyb3JDYXNlcywga0Jsb2NrU2l6ZXMp
IHsKLSAgbWVtY3B5KGJ1ZmZlcl8sIGtWYXJpbnRFcnJvckNhc2VzX2Nhc2UuYnl0ZXMsIGtWYXJp
bnRFcnJvckNhc2VzX2Nhc2Uuc2l6ZSk7Ci0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVmZmVy
Xywga1ZhcmludEVycm9yQ2FzZXNfY2FzZS5zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGtCbG9ja1NpemVzX2Nhc2UpOwotICBDb2RlZElucHV0U3RyZWFtIGNvZGVkX2lucHV0KCZpbnB1
dCk7Ci0KLSAgdWludDY0IHZhbHVlOwotICBFWFBFQ1RfRVEoa1ZhcmludEVycm9yQ2FzZXNfY2Fz
ZS5jYW5fcGFyc2UsIGNvZGVkX2lucHV0LlJlYWRWYXJpbnQ2NCgmdmFsdWUpKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gVmFyaW50U2l6ZQotCi1zdHJ1Y3QgVmFyaW50U2l6ZUNhc2UgewotICB1
aW50NjQgdmFsdWU7Ci0gIGludCBzaXplOwotfTsKLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3Bl
cmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBWYXJpbnRTaXplQ2FzZSYgYykgewotICBy
ZXR1cm4gb3MgPDwgYy52YWx1ZTsKLX0KLQotVmFyaW50U2l6ZUNhc2Uga1ZhcmludFNpemVDYXNl
c1tdID0gewotICB7MHUsIDF9LAotICB7MXUsIDF9LAotICB7MTI3dSwgMX0sCi0gIHsxMjh1LCAy
fSwKLSAgezc1ODkyM3UsIDN9LAotICB7NDAwMDAwMDAwMHUsIDV9LAotICB7VUxMKDQxMjU2MjAy
NTgwNzE4MzM2KSwgOH0sCi0gIHtVTEwoMTE5NjQzNzgzMzA5Nzg3MzUxMzEpLCAxMH0sCi19Owot
Ci1URVNUXzFEKENvZGVkU3RyZWFtVGVzdCwgVmFyaW50U2l6ZTMyLCBrVmFyaW50U2l6ZUNhc2Vz
KSB7Ci0gIGlmIChrVmFyaW50U2l6ZUNhc2VzX2Nhc2UudmFsdWUgPiAweGZmZmZmZmZmdSkgewot
ICAgIC8vIFNraXAgNjQtYml0IHZhbHVlcy4KLSAgICByZXR1cm47Ci0gIH0KLQotICBFWFBFQ1Rf
RVEoa1ZhcmludFNpemVDYXNlc19jYXNlLnNpemUsCi0gICAgQ29kZWRPdXRwdXRTdHJlYW06OlZh
cmludFNpemUzMigKLSAgICAgIHN0YXRpY19jYXN0PHVpbnQzMj4oa1ZhcmludFNpemVDYXNlc19j
YXNlLnZhbHVlKSkpOwotfQotCi1URVNUXzFEKENvZGVkU3RyZWFtVGVzdCwgVmFyaW50U2l6ZTY0
LCBrVmFyaW50U2l6ZUNhc2VzKSB7Ci0gIEVYUEVDVF9FUShrVmFyaW50U2l6ZUNhc2VzX2Nhc2Uu
c2l6ZSwKLSAgICBDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6ZTY0KGtWYXJpbnRTaXplQ2Fz
ZXNfY2FzZS52YWx1ZSkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBGaXhlZC1zaXplIGludCB0
ZXN0cwotCi1zdHJ1Y3QgRml4ZWQzMkNhc2UgewotICB1aW50OCBieXRlc1tzaXplb2YodWludDMy
KV07ICAgICAgICAgIC8vIEVuY29kZWQgYnl0ZXMuCi0gIHVpbnQzMiB2YWx1ZTsgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUGFyc2VkIHZhbHVlLgotfTsKLQotc3RydWN0IEZpeGVkNjRDYXNl
IHsKLSAgdWludDggYnl0ZXNbc2l6ZW9mKHVpbnQ2NCldOyAgICAgICAgICAvLyBFbmNvZGVkIGJ5
dGVzLgotICB1aW50NjQgdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlZCB2
YWx1ZS4KLX07Ci0KLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFt
JiBvcywgY29uc3QgRml4ZWQzMkNhc2UmIGMpIHsKLSAgcmV0dXJuIG9zIDw8ICIweCIgPDwgc3Rk
OjpoZXggPDwgYy52YWx1ZSA8PCBzdGQ6OmRlYzsKLX0KLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYg
b3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBGaXhlZDY0Q2FzZSYgYykgewotICBy
ZXR1cm4gb3MgPDwgIjB4IiA8PCBzdGQ6OmhleCA8PCBjLnZhbHVlIDw8IHN0ZDo6ZGVjOwotfQot
Ci1GaXhlZDMyQ2FzZSBrRml4ZWQzMkNhc2VzW10gPSB7Ci0gIHt7MHhlZiwgMHhjZCwgMHhhYiwg
MHg5MH0sIDB4OTBhYmNkZWZ1fSwKLSAge3sweDEyLCAweDM0LCAweDU2LCAweDc4fSwgMHg3ODU2
MzQxMnV9LAotfTsKLQotRml4ZWQ2NENhc2Uga0ZpeGVkNjRDYXNlc1tdID0gewotICB7ezB4ZWYs
IDB4Y2QsIDB4YWIsIDB4OTAsIDB4MTIsIDB4MzQsIDB4NTYsIDB4Nzh9LCBVTEwoMHg3ODU2MzQx
MjkwYWJjZGVmKX0sCi0gIHt7MHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3
NywgMHg4OH0sIFVMTCgweDg4Nzc2NjU1NDQzMzIyMTEpfSwKLX07Ci0KLVRFU1RfMkQoQ29kZWRT
dHJlYW1UZXN0LCBSZWFkTGl0dGxlRW5kaWFuMzIsIGtGaXhlZDMyQ2FzZXMsIGtCbG9ja1NpemVz
KSB7Ci0gIG1lbWNweShidWZmZXJfLCBrRml4ZWQzMkNhc2VzX2Nhc2UuYnl0ZXMsIHNpemVvZihr
Rml4ZWQzMkNhc2VzX2Nhc2UuYnl0ZXMpKTsKLSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dChidWZm
ZXJfLCBzaXplb2YoYnVmZmVyXyksIGtCbG9ja1NpemVzX2Nhc2UpOwotCi0gIHsKLSAgICBDb2Rl
ZElucHV0U3RyZWFtIGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0KLSAgICB1aW50MzIgdmFsdWU7Ci0g
ICAgRVhQRUNUX1RSVUUoY29kZWRfaW5wdXQuUmVhZExpdHRsZUVuZGlhbjMyKCZ2YWx1ZSkpOwot
ICAgIEVYUEVDVF9FUShrRml4ZWQzMkNhc2VzX2Nhc2UudmFsdWUsIHZhbHVlKTsKLSAgfQotCi0g
IEVYUEVDVF9FUShzaXplb2YodWludDMyKSwgaW5wdXQuQnl0ZUNvdW50KCkpOwotfQotCi1URVNU
XzJEKENvZGVkU3RyZWFtVGVzdCwgUmVhZExpdHRsZUVuZGlhbjY0LCBrRml4ZWQ2NENhc2VzLCBr
QmxvY2tTaXplcykgewotICBtZW1jcHkoYnVmZmVyXywga0ZpeGVkNjRDYXNlc19jYXNlLmJ5dGVz
LCBzaXplb2Yoa0ZpeGVkNjRDYXNlc19jYXNlLmJ5dGVzKSk7Ci0gIEFycmF5SW5wdXRTdHJlYW0g
aW5wdXQoYnVmZmVyXywgc2l6ZW9mKGJ1ZmZlcl8pLCBrQmxvY2tTaXplc19jYXNlKTsKLQotICB7
Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSBjb2RlZF9pbnB1dCgmaW5wdXQpOwotCi0gICAgdWludDY0
IHZhbHVlOwotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRMaXR0bGVFbmRpYW42NCgm
dmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoa0ZpeGVkNjRDYXNlc19jYXNlLnZhbHVlLCB2YWx1ZSk7
Ci0gIH0KLQotICBFWFBFQ1RfRVEoc2l6ZW9mKHVpbnQ2NCksIGlucHV0LkJ5dGVDb3VudCgpKTsK
LX0KLQotVEVTVF8yRChDb2RlZFN0cmVhbVRlc3QsIFdyaXRlTGl0dGxlRW5kaWFuMzIsIGtGaXhl
ZDMyQ2FzZXMsIGtCbG9ja1NpemVzKSB7Ci0gIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZm
ZXJfLCBzaXplb2YoYnVmZmVyXyksIGtCbG9ja1NpemVzX2Nhc2UpOwotCi0gIHsKLSAgICBDb2Rl
ZE91dHB1dFN0cmVhbSBjb2RlZF9vdXRwdXQoJm91dHB1dCk7Ci0KLSAgICBjb2RlZF9vdXRwdXQu
V3JpdGVMaXR0bGVFbmRpYW4zMihrRml4ZWQzMkNhc2VzX2Nhc2UudmFsdWUpOwotICAgIEVYUEVD
VF9GQUxTRShjb2RlZF9vdXRwdXQuSGFkRXJyb3IoKSk7Ci0KLSAgICBFWFBFQ1RfRVEoc2l6ZW9m
KHVpbnQzMiksIGNvZGVkX291dHB1dC5CeXRlQ291bnQoKSk7Ci0gIH0KLQotICBFWFBFQ1RfRVEo
c2l6ZW9mKHVpbnQzMiksIG91dHB1dC5CeXRlQ291bnQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZW1j
bXAoYnVmZmVyXywga0ZpeGVkMzJDYXNlc19jYXNlLmJ5dGVzLCBzaXplb2YodWludDMyKSkpOwot
fQotCi1URVNUXzJEKENvZGVkU3RyZWFtVGVzdCwgV3JpdGVMaXR0bGVFbmRpYW42NCwga0ZpeGVk
NjRDYXNlcywga0Jsb2NrU2l6ZXMpIHsKLSAgQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0KGJ1ZmZl
cl8sIHNpemVvZihidWZmZXJfKSwga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0KLSAgewotICAgIENvZGVk
T3V0cHV0U3RyZWFtIGNvZGVkX291dHB1dCgmb3V0cHV0KTsKLQotICAgIGNvZGVkX291dHB1dC5X
cml0ZUxpdHRsZUVuZGlhbjY0KGtGaXhlZDY0Q2FzZXNfY2FzZS52YWx1ZSk7Ci0gICAgRVhQRUNU
X0ZBTFNFKGNvZGVkX291dHB1dC5IYWRFcnJvcigpKTsKLQotICAgIEVYUEVDVF9FUShzaXplb2Yo
dWludDY0KSwgY29kZWRfb3V0cHV0LkJ5dGVDb3VudCgpKTsKLSAgfQotCi0gIEVYUEVDVF9FUShz
aXplb2YodWludDY0KSwgb3V0cHV0LkJ5dGVDb3VudCgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lbWNt
cChidWZmZXJfLCBrRml4ZWQ2NENhc2VzX2Nhc2UuYnl0ZXMsIHNpemVvZih1aW50NjQpKSk7Ci19
Ci0KLS8vIFRlc3RzIHVzaW5nIHRoZSBzdGF0aWMgbWV0aG9kcyB0byByZWFkIGZpeGVkLXNpemUg
dmFsdWVzIGZyb20gcmF3IGFycmF5cy4KLQotVEVTVF8xRChDb2RlZFN0cmVhbVRlc3QsIFJlYWRM
aXR0bGVFbmRpYW4zMkZyb21BcnJheSwga0ZpeGVkMzJDYXNlcykgewotICBtZW1jcHkoYnVmZmVy
Xywga0ZpeGVkMzJDYXNlc19jYXNlLmJ5dGVzLCBzaXplb2Yoa0ZpeGVkMzJDYXNlc19jYXNlLmJ5
dGVzKSk7Ci0KLSAgdWludDMyIHZhbHVlOwotICBjb25zdCB1aW50OCogZW5kID0gQ29kZWRJbnB1
dFN0cmVhbTo6UmVhZExpdHRsZUVuZGlhbjMyRnJvbUFycmF5KAotICAgICAgYnVmZmVyXywgJnZh
bHVlKTsKLSAgRVhQRUNUX0VRKGtGaXhlZDMyQ2FzZXNfY2FzZS52YWx1ZSwgdmFsdWUpOwotICBF
WFBFQ1RfVFJVRShlbmQgPT0gYnVmZmVyXyArIHNpemVvZih2YWx1ZSkpOwotfQotCi1URVNUXzFE
KENvZGVkU3RyZWFtVGVzdCwgUmVhZExpdHRsZUVuZGlhbjY0RnJvbUFycmF5LCBrRml4ZWQ2NENh
c2VzKSB7Ci0gIG1lbWNweShidWZmZXJfLCBrRml4ZWQ2NENhc2VzX2Nhc2UuYnl0ZXMsIHNpemVv
ZihrRml4ZWQ2NENhc2VzX2Nhc2UuYnl0ZXMpKTsKLQotICB1aW50NjQgdmFsdWU7Ci0gIGNvbnN0
IHVpbnQ4KiBlbmQgPSBDb2RlZElucHV0U3RyZWFtOjpSZWFkTGl0dGxlRW5kaWFuNjRGcm9tQXJy
YXkoCi0gICAgICBidWZmZXJfLCAmdmFsdWUpOwotICBFWFBFQ1RfRVEoa0ZpeGVkNjRDYXNlc19j
YXNlLnZhbHVlLCB2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGVuZCA9PSBidWZmZXJfICsgc2l6ZW9m
KHZhbHVlKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJhdyByZWFkcyBhbmQgd3JpdGVzCi0K
LWNvbnN0IGNoYXIga1Jhd0J5dGVzW10gPSAiU29tZSBieXRlcyB3aGljaCB3aWxsIGJlIHdyaXR0
ZW4gYW5kIHJlYWQgcmF3LiI7Ci0KLVRFU1RfMUQoQ29kZWRTdHJlYW1UZXN0LCBSZWFkUmF3LCBr
QmxvY2tTaXplcykgewotICBtZW1jcHkoYnVmZmVyXywga1Jhd0J5dGVzLCBzaXplb2Yoa1Jhd0J5
dGVzKSk7Ci0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVmZmVyXywgc2l6ZW9mKGJ1ZmZlcl8p
LCBrQmxvY2tTaXplc19jYXNlKTsKLSAgY2hhciByZWFkX2J1ZmZlcltzaXplb2Yoa1Jhd0J5dGVz
KV07Ci0KLSAgewotICAgIENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJmlucHV0KTsKLQot
ICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRSYXcocmVhZF9idWZmZXIsIHNpemVvZihr
UmF3Qnl0ZXMpKSk7Ci0gICAgRVhQRUNUX0VRKDAsIG1lbWNtcChrUmF3Qnl0ZXMsIHJlYWRfYnVm
ZmVyLCBzaXplb2Yoa1Jhd0J5dGVzKSkpOwotICB9Ci0KLSAgRVhQRUNUX0VRKHNpemVvZihrUmF3
Qnl0ZXMpLCBpbnB1dC5CeXRlQ291bnQoKSk7Ci19Ci0KLVRFU1RfMUQoQ29kZWRTdHJlYW1UZXN0
LCBXcml0ZVJhdywga0Jsb2NrU2l6ZXMpIHsKLSAgQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0KGJ1
ZmZlcl8sIHNpemVvZihidWZmZXJfKSwga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0KLSAgewotICAgIENv
ZGVkT3V0cHV0U3RyZWFtIGNvZGVkX291dHB1dCgmb3V0cHV0KTsKLQotICAgIGNvZGVkX291dHB1
dC5Xcml0ZVJhdyhrUmF3Qnl0ZXMsIHNpemVvZihrUmF3Qnl0ZXMpKTsKLSAgICBFWFBFQ1RfRkFM
U0UoY29kZWRfb3V0cHV0LkhhZEVycm9yKCkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVvZihrUmF3
Qnl0ZXMpLCBjb2RlZF9vdXRwdXQuQnl0ZUNvdW50KCkpOwotICB9Ci0KLSAgRVhQRUNUX0VRKHNp
emVvZihrUmF3Qnl0ZXMpLCBvdXRwdXQuQnl0ZUNvdW50KCkpOwotICBFWFBFQ1RfRVEoMCwgbWVt
Y21wKGJ1ZmZlcl8sIGtSYXdCeXRlcywgc2l6ZW9mKGtSYXdCeXRlcykpKTsKLX0KLQotVEVTVF8x
RChDb2RlZFN0cmVhbVRlc3QsIFJlYWRTdHJpbmcsIGtCbG9ja1NpemVzKSB7Ci0gIG1lbWNweShi
dWZmZXJfLCBrUmF3Qnl0ZXMsIHNpemVvZihrUmF3Qnl0ZXMpKTsKLSAgQXJyYXlJbnB1dFN0cmVh
bSBpbnB1dChidWZmZXJfLCBzaXplb2YoYnVmZmVyXyksIGtCbG9ja1NpemVzX2Nhc2UpOwotCi0g
IHsKLSAgICBDb2RlZElucHV0U3RyZWFtIGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0KLSAgICBzdHJp
bmcgc3RyOwotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRTdHJpbmcoJnN0ciwgc3Ry
bGVuKGtSYXdCeXRlcykpKTsKLSAgICBFWFBFQ1RfRVEoa1Jhd0J5dGVzLCBzdHIpOwotICB9Ci0K
LSAgRVhQRUNUX0VRKHN0cmxlbihrUmF3Qnl0ZXMpLCBpbnB1dC5CeXRlQ291bnQoKSk7Ci19Ci0K
LS8vIENoZWNrIHRvIG1ha2Ugc3VyZSBSZWFkU3RyaW5nIGRvZXNuJ3QgY3Jhc2ggb24gaW1wb3Nz
aWJseSBsYXJnZSBzdHJpbmdzLgotVEVTVF8xRChDb2RlZFN0cmVhbVRlc3QsIFJlYWRTdHJpbmdJ
bXBvc3NpYmx5TGFyZ2UsIGtCbG9ja1NpemVzKSB7Ci0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQo
YnVmZmVyXywgc2l6ZW9mKGJ1ZmZlcl8pLCBrQmxvY2tTaXplc19jYXNlKTsKLQotICB7Ci0gICAg
Q29kZWRJbnB1dFN0cmVhbSBjb2RlZF9pbnB1dCgmaW5wdXQpOwotCi0gICAgc3RyaW5nIHN0cjsK
LSAgICAvLyBUcnkgdG8gcmVhZCBhIGdpZ2FieXRlLgotICAgIEVYUEVDVF9GQUxTRShjb2RlZF9p
bnB1dC5SZWFkU3RyaW5nKCZzdHIsIDEgPDwgMzApKTsKLSAgfQotfQotCi1URVNUX0YoQ29kZWRT
dHJlYW1UZXN0LCBSZWFkU3RyaW5nSW1wb3NzaWJseUxhcmdlRnJvbVN0cmluZ09uU3RhY2spIHsK
LSAgLy8gU2FtZSB0ZXN0IGFzIGFib3ZlLCBleGNlcHQgZGlyZWN0bHkgdXNlIGEgYnVmZmVyLiBU
aGlzIHVzZWQgdG8gY2F1c2UKLSAgLy8gY3Jhc2hlcyB3aGlsZSB0aGUgYWJvdmUgZGlkIG5vdC4K
LSAgdWludDggYnVmZmVyWzhdOwotICBDb2RlZElucHV0U3RyZWFtIGNvZGVkX2lucHV0KGJ1ZmZl
ciwgOCk7Ci0gIHN0cmluZyBzdHI7Ci0gIEVYUEVDVF9GQUxTRShjb2RlZF9pbnB1dC5SZWFkU3Ry
aW5nKCZzdHIsIDEgPDwgMzApKTsKLX0KLQotVEVTVF9GKENvZGVkU3RyZWFtVGVzdCwgUmVhZFN0
cmluZ0ltcG9zc2libHlMYXJnZUZyb21TdHJpbmdPbkhlYXApIHsKLSAgZ29vZ2xlOjpwcm90b2J1
Zjo6c2NvcGVkX2FycmF5PHVpbnQ4PiBidWZmZXIobmV3IHVpbnQ4WzhdKTsKLSAgQ29kZWRJbnB1
dFN0cmVhbSBjb2RlZF9pbnB1dChidWZmZXIuZ2V0KCksIDgpOwotICBzdHJpbmcgc3RyOwotICBF
WFBFQ1RfRkFMU0UoY29kZWRfaW5wdXQuUmVhZFN0cmluZygmc3RyLCAxIDw8IDMwKSk7Ci19Ci0K
LVRFU1RfMUQoQ29kZWRTdHJlYW1UZXN0LCBSZWFkU3RyaW5nUmVzZXJ2ZXNNZW1vcnlPblRvdGFs
TGltaXQsIGtCbG9ja1NpemVzKSB7Ci0gIG1lbWNweShidWZmZXJfLCBrUmF3Qnl0ZXMsIHNpemVv
ZihrUmF3Qnl0ZXMpKTsKLSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dChidWZmZXJfLCBzaXplb2Yo
YnVmZmVyXyksIGtCbG9ja1NpemVzX2Nhc2UpOwotCi0gIHsKLSAgICBDb2RlZElucHV0U3RyZWFt
IGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0gICAgY29kZWRfaW5wdXQuU2V0VG90YWxCeXRlc0xpbWl0
KHNpemVvZihrUmF3Qnl0ZXMpLCBzaXplb2Yoa1Jhd0J5dGVzKSk7Ci0gICAgRVhQRUNUX0VRKHNp
emVvZihrUmF3Qnl0ZXMpLCBjb2RlZF9pbnB1dC5CeXRlc1VudGlsVG90YWxCeXRlc0xpbWl0KCkp
OwotCi0gICAgc3RyaW5nIHN0cjsKLSAgICBFWFBFQ1RfVFJVRShjb2RlZF9pbnB1dC5SZWFkU3Ry
aW5nKCZzdHIsIHN0cmxlbihrUmF3Qnl0ZXMpKSk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihrUmF3
Qnl0ZXMpIC0gc3RybGVuKGtSYXdCeXRlcyksCi0gICAgICAgICAgICAgIGNvZGVkX2lucHV0LkJ5
dGVzVW50aWxUb3RhbEJ5dGVzTGltaXQoKSk7Ci0gICAgRVhQRUNUX0VRKGtSYXdCeXRlcywgc3Ry
KTsKLSAgICAvLyBUT0RPKGxpdWppc2kpOiBSZXBsYWNlIHdpdGggYSBtb3JlIG1lYW5pbmdmdWwg
dGVzdCAoc2VlIGNsLzYwOTY2MDIzKS4KLSAgICBFWFBFQ1RfR0Uoc3RyLmNhcGFjaXR5KCksIHN0
cmxlbihrUmF3Qnl0ZXMpKTsKLSAgfQotCi0gIEVYUEVDVF9FUShzdHJsZW4oa1Jhd0J5dGVzKSwg
aW5wdXQuQnl0ZUNvdW50KCkpOwotfQotCi1URVNUXzFEKENvZGVkU3RyZWFtVGVzdCwgUmVhZFN0
cmluZ1Jlc2VydmVzTWVtb3J5T25QdXNoZWRMaW1pdCwga0Jsb2NrU2l6ZXMpIHsKLSAgbWVtY3B5
KGJ1ZmZlcl8sIGtSYXdCeXRlcywgc2l6ZW9mKGtSYXdCeXRlcykpOwotICBBcnJheUlucHV0U3Ry
ZWFtIGlucHV0KGJ1ZmZlcl8sIHNpemVvZihidWZmZXJfKSwga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0K
LSAgewotICAgIENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJmlucHV0KTsKLSAgICBjb2Rl
ZF9pbnB1dC5QdXNoTGltaXQoc2l6ZW9mKGJ1ZmZlcl8pKTsKLQotICAgIHN0cmluZyBzdHI7Ci0g
ICAgRVhQRUNUX1RSVUUoY29kZWRfaW5wdXQuUmVhZFN0cmluZygmc3RyLCBzdHJsZW4oa1Jhd0J5
dGVzKSkpOwotICAgIEVYUEVDVF9FUShrUmF3Qnl0ZXMsIHN0cik7Ci0gICAgLy8gVE9ETyhsaXVq
aXNpKTogUmVwbGFjZSB3aXRoIGEgbW9yZSBtZWFuaW5nZnVsIHRlc3QgKHNlZSBjbC82MDk2NjAy
MykuCi0gICAgRVhQRUNUX0dFKHN0ci5jYXBhY2l0eSgpLCBzdHJsZW4oa1Jhd0J5dGVzKSk7Ci0g
IH0KLQotICBFWFBFQ1RfRVEoc3RybGVuKGtSYXdCeXRlcyksIGlucHV0LkJ5dGVDb3VudCgpKTsK
LX0KLQotVEVTVF9GKENvZGVkU3RyZWFtVGVzdCwgUmVhZFN0cmluZ05vUmVzZXJ2YXRpb25JZkxp
bWl0c05vdFNldCkgewotICBtZW1jcHkoYnVmZmVyXywga1Jhd0J5dGVzLCBzaXplb2Yoa1Jhd0J5
dGVzKSk7Ci0gIC8vIEJ1ZmZlciBzaXplIGluIHRoZSBpbnB1dCBtdXN0IGJlIHNtYWxsZXIgdGhh
biBzaXplb2Yoa1Jhd0J5dGVzKSwKLSAgLy8gb3RoZXJ3aXNlIGNoZWNrIGFnYWluc3QgY2FwYWNp
dHkgd2lsbCBmYWlsIGFzIFJlYWRTdHJpbmdJbmxpbmUoKQotICAvLyB3aWxsIGhhbmRsZSB0aGUg
cmVhZGluZyBhbmQgd2lsbCByZXNlcnZlIHRoZSBtZW1vcnkgYXMgbmVlZGVkLgotICBBcnJheUlu
cHV0U3RyZWFtIGlucHV0KGJ1ZmZlcl8sIHNpemVvZihidWZmZXJfKSwgMzIpOwotCi0gIHsKLSAg
ICBDb2RlZElucHV0U3RyZWFtIGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0KLSAgICBzdHJpbmcgc3Ry
OwotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRTdHJpbmcoJnN0ciwgc3RybGVuKGtS
YXdCeXRlcykpKTsKLSAgICBFWFBFQ1RfRVEoa1Jhd0J5dGVzLCBzdHIpOwotICAgIC8vIE5vdGU6
IHRoaXMgY2hlY2sgZGVwZW5kcyBvbiBzdHJpbmcgY2xhc3MgaW1wbGVtZW50YXRpb24uIEl0Ci0g
ICAgLy8gZXhwZWN0cyB0aGF0IHN0cmluZyB3aWxsIGFsbG9jYXRlIG1vcmUgdGhhbiBzdHJsZW4o
a1Jhd0J5dGVzKQotICAgIC8vIGlmIHRoZSBjb250ZW50IG9mIGtSYXdCeXRlcyBpcyBhcHBlbmRl
ZCB0byBzdHJpbmcgaW4gc21hbGwKLSAgICAvLyBjaHVua3MuCi0gICAgLy8gVE9ETyhsaXVqaXNp
KTogUmVwbGFjZSB3aXRoIGEgbW9yZSBtZWFuaW5nZnVsIHRlc3QgKHNlZSBjbC82MDk2NjAyMyku
Ci0gICAgRVhQRUNUX0dFKHN0ci5jYXBhY2l0eSgpLCBzdHJsZW4oa1Jhd0J5dGVzKSk7Ci0gIH0K
LQotICBFWFBFQ1RfRVEoc3RybGVuKGtSYXdCeXRlcyksIGlucHV0LkJ5dGVDb3VudCgpKTsKLX0K
LQotVEVTVF9GKENvZGVkU3RyZWFtVGVzdCwgUmVhZFN0cmluZ05vUmVzZXJ2YXRpb25TaXplSXNO
ZWdhdGl2ZSkgewotICBtZW1jcHkoYnVmZmVyXywga1Jhd0J5dGVzLCBzaXplb2Yoa1Jhd0J5dGVz
KSk7Ci0gIC8vIEJ1ZmZlciBzaXplIGluIHRoZSBpbnB1dCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBz
aXplb2Yoa1Jhd0J5dGVzKSwKLSAgLy8gb3RoZXJ3aXNlIGNoZWNrIGFnYWluc3QgY2FwYWNpdHkg
d2lsbCBmYWlsIGFzIFJlYWRTdHJpbmdJbmxpbmUoKQotICAvLyB3aWxsIGhhbmRsZSB0aGUgcmVh
ZGluZyBhbmQgd2lsbCByZXNlcnZlIHRoZSBtZW1vcnkgYXMgbmVlZGVkLgotICBBcnJheUlucHV0
U3RyZWFtIGlucHV0KGJ1ZmZlcl8sIHNpemVvZihidWZmZXJfKSwgMzIpOwotCi0gIHsKLSAgICBD
b2RlZElucHV0U3RyZWFtIGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0gICAgY29kZWRfaW5wdXQuUHVz
aExpbWl0KHNpemVvZihidWZmZXJfKSk7Ci0KLSAgICBzdHJpbmcgc3RyOwotICAgIEVYUEVDVF9G
QUxTRShjb2RlZF9pbnB1dC5SZWFkU3RyaW5nKCZzdHIsIC0xKSk7Ci0gICAgLy8gTm90ZTogdGhp
cyBjaGVjayBkZXBlbmRzIG9uIHN0cmluZyBjbGFzcyBpbXBsZW1lbnRhdGlvbi4gSXQKLSAgICAv
LyBleHBlY3RzIHRoYXQgc3RyaW5nIHdpbGwgYWx3YXlzIGFsbG9jYXRlIHRoZSBzYW1lIGFtb3Vu
dCBvZgotICAgIC8vIG1lbW9yeSBmb3IgYW4gZW1wdHkgc3RyaW5nLgotICAgIEVYUEVDVF9FUShz
dHJpbmcoKS5jYXBhY2l0eSgpLCBzdHIuY2FwYWNpdHkoKSk7Ci0gIH0KLX0KLQotVEVTVF9GKENv
ZGVkU3RyZWFtVGVzdCwgUmVhZFN0cmluZ05vUmVzZXJ2YXRpb25TaXplSXNMYXJnZSkgewotICBt
ZW1jcHkoYnVmZmVyXywga1Jhd0J5dGVzLCBzaXplb2Yoa1Jhd0J5dGVzKSk7Ci0gIC8vIEJ1ZmZl
ciBzaXplIGluIHRoZSBpbnB1dCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBzaXplb2Yoa1Jhd0J5dGVz
KSwKLSAgLy8gb3RoZXJ3aXNlIGNoZWNrIGFnYWluc3QgY2FwYWNpdHkgd2lsbCBmYWlsIGFzIFJl
YWRTdHJpbmdJbmxpbmUoKQotICAvLyB3aWxsIGhhbmRsZSB0aGUgcmVhZGluZyBhbmQgd2lsbCBy
ZXNlcnZlIHRoZSBtZW1vcnkgYXMgbmVlZGVkLgotICBBcnJheUlucHV0U3RyZWFtIGlucHV0KGJ1
ZmZlcl8sIHNpemVvZihidWZmZXJfKSwgMzIpOwotCi0gIHsKLSAgICBDb2RlZElucHV0U3RyZWFt
IGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0gICAgY29kZWRfaW5wdXQuUHVzaExpbWl0KHNpemVvZihi
dWZmZXJfKSk7Ci0KLSAgICBzdHJpbmcgc3RyOwotICAgIEVYUEVDVF9GQUxTRShjb2RlZF9pbnB1
dC5SZWFkU3RyaW5nKCZzdHIsIDEgPDwgMzApKTsKLSAgICBFWFBFQ1RfR1QoMSA8PCAzMCwgc3Ry
LmNhcGFjaXR5KCkpOwotICB9Ci19Ci0KLVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsIFJlYWRTdHJp
bmdOb1Jlc2VydmF0aW9uU2l6ZUlzT3ZlclRoZUxpbWl0KSB7Ci0gIG1lbWNweShidWZmZXJfLCBr
UmF3Qnl0ZXMsIHNpemVvZihrUmF3Qnl0ZXMpKTsKLSAgLy8gQnVmZmVyIHNpemUgaW4gdGhlIGlu
cHV0IG11c3QgYmUgc21hbGxlciB0aGFuIHNpemVvZihrUmF3Qnl0ZXMpLAotICAvLyBvdGhlcndp
c2UgY2hlY2sgYWdhaW5zdCBjYXBhY2l0eSB3aWxsIGZhaWwgYXMgUmVhZFN0cmluZ0lubGluZSgp
Ci0gIC8vIHdpbGwgaGFuZGxlIHRoZSByZWFkaW5nIGFuZCB3aWxsIHJlc2VydmUgdGhlIG1lbW9y
eSBhcyBuZWVkZWQuCi0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVmZmVyXywgc2l6ZW9mKGJ1
ZmZlcl8pLCAzMik7Ci0KLSAgewotICAgIENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJmlu
cHV0KTsKLSAgICBjb2RlZF9pbnB1dC5QdXNoTGltaXQoMTYpOwotCi0gICAgc3RyaW5nIHN0cjsK
LSAgICBFWFBFQ1RfRkFMU0UoY29kZWRfaW5wdXQuUmVhZFN0cmluZygmc3RyLCBzdHJsZW4oa1Jh
d0J5dGVzKSkpOwotICAgIC8vIE5vdGU6IHRoaXMgY2hlY2sgZGVwZW5kcyBvbiBzdHJpbmcgY2xh
c3MgaW1wbGVtZW50YXRpb24uIEl0Ci0gICAgLy8gZXhwZWN0cyB0aGF0IHN0cmluZyB3aWxsIGFs
bG9jYXRlIGxlc3MgdGhhbiBzdHJsZW4oa1Jhd0J5dGVzKQotICAgIC8vIGZvciBhbiBlbXB0eSBz
dHJpbmcuCi0gICAgRVhQRUNUX0dUKHN0cmxlbihrUmF3Qnl0ZXMpLCBzdHIuY2FwYWNpdHkoKSk7
Ci0gIH0KLX0KLQotVEVTVF9GKENvZGVkU3RyZWFtVGVzdCwgUmVhZFN0cmluZ05vUmVzZXJ2YXRp
b25TaXplSXNPdmVyVGhlVG90YWxCeXRlc0xpbWl0KSB7Ci0gIG1lbWNweShidWZmZXJfLCBrUmF3
Qnl0ZXMsIHNpemVvZihrUmF3Qnl0ZXMpKTsKLSAgLy8gQnVmZmVyIHNpemUgaW4gdGhlIGlucHV0
IG11c3QgYmUgc21hbGxlciB0aGFuIHNpemVvZihrUmF3Qnl0ZXMpLAotICAvLyBvdGhlcndpc2Ug
Y2hlY2sgYWdhaW5zdCBjYXBhY2l0eSB3aWxsIGZhaWwgYXMgUmVhZFN0cmluZ0lubGluZSgpCi0g
IC8vIHdpbGwgaGFuZGxlIHRoZSByZWFkaW5nIGFuZCB3aWxsIHJlc2VydmUgdGhlIG1lbW9yeSBh
cyBuZWVkZWQuCi0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVmZmVyXywgc2l6ZW9mKGJ1ZmZl
cl8pLCAzMik7Ci0KLSAgewotICAgIENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJmlucHV0
KTsKLSAgICBjb2RlZF9pbnB1dC5TZXRUb3RhbEJ5dGVzTGltaXQoMTYsIDE2KTsKLQotICAgIHN0
cmluZyBzdHI7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvZGVkX2lucHV0LlJlYWRTdHJpbmcoJnN0ciwg
c3RybGVuKGtSYXdCeXRlcykpKTsKLSAgICAvLyBOb3RlOiB0aGlzIGNoZWNrIGRlcGVuZHMgb24g
c3RyaW5nIGNsYXNzIGltcGxlbWVudGF0aW9uLiBJdAotICAgIC8vIGV4cGVjdHMgdGhhdCBzdHJp
bmcgd2lsbCBhbGxvY2F0ZSBsZXNzIHRoYW4gc3RybGVuKGtSYXdCeXRlcykKLSAgICAvLyBmb3Ig
YW4gZW1wdHkgc3RyaW5nLgotICAgIEVYUEVDVF9HVChzdHJsZW4oa1Jhd0J5dGVzKSwgc3RyLmNh
cGFjaXR5KCkpOwotICB9Ci19Ci0KLVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsCi0gICAgICAgUmVh
ZFN0cmluZ05vUmVzZXJ2YXRpb25TaXplSXNPdmVyVGhlQ2xvc2VzdExpbWl0X0dsb2JhbExpbWl0
SXNDbG9zZXIpIHsKLSAgbWVtY3B5KGJ1ZmZlcl8sIGtSYXdCeXRlcywgc2l6ZW9mKGtSYXdCeXRl
cykpOwotICAvLyBCdWZmZXIgc2l6ZSBpbiB0aGUgaW5wdXQgbXVzdCBiZSBzbWFsbGVyIHRoYW4g
c2l6ZW9mKGtSYXdCeXRlcyksCi0gIC8vIG90aGVyd2lzZSBjaGVjayBhZ2FpbnN0IGNhcGFjaXR5
IHdpbGwgZmFpbCBhcyBSZWFkU3RyaW5nSW5saW5lKCkKLSAgLy8gd2lsbCBoYW5kbGUgdGhlIHJl
YWRpbmcgYW5kIHdpbGwgcmVzZXJ2ZSB0aGUgbWVtb3J5IGFzIG5lZWRlZC4KLSAgQXJyYXlJbnB1
dFN0cmVhbSBpbnB1dChidWZmZXJfLCBzaXplb2YoYnVmZmVyXyksIDMyKTsKLQotICB7Ci0gICAg
Q29kZWRJbnB1dFN0cmVhbSBjb2RlZF9pbnB1dCgmaW5wdXQpOwotICAgIGNvZGVkX2lucHV0LlB1
c2hMaW1pdChzaXplb2YoYnVmZmVyXykpOwotICAgIGNvZGVkX2lucHV0LlNldFRvdGFsQnl0ZXNM
aW1pdCgxNiwgMTYpOwotCi0gICAgc3RyaW5nIHN0cjsKLSAgICBFWFBFQ1RfRkFMU0UoY29kZWRf
aW5wdXQuUmVhZFN0cmluZygmc3RyLCBzdHJsZW4oa1Jhd0J5dGVzKSkpOwotICAgIC8vIE5vdGU6
IHRoaXMgY2hlY2sgZGVwZW5kcyBvbiBzdHJpbmcgY2xhc3MgaW1wbGVtZW50YXRpb24uIEl0Ci0g
ICAgLy8gZXhwZWN0cyB0aGF0IHN0cmluZyB3aWxsIGFsbG9jYXRlIGxlc3MgdGhhbiBzdHJsZW4o
a1Jhd0J5dGVzKQotICAgIC8vIGZvciBhbiBlbXB0eSBzdHJpbmcuCi0gICAgRVhQRUNUX0dUKHN0
cmxlbihrUmF3Qnl0ZXMpLCBzdHIuY2FwYWNpdHkoKSk7Ci0gIH0KLX0KLQotVEVTVF9GKENvZGVk
U3RyZWFtVGVzdCwKLSAgICAgICBSZWFkU3RyaW5nTm9SZXNlcnZhdGlvblNpemVJc092ZXJUaGVD
bG9zZXN0TGltaXRfTG9jYWxMaW1pdElzQ2xvc2VyKSB7Ci0gIG1lbWNweShidWZmZXJfLCBrUmF3
Qnl0ZXMsIHNpemVvZihrUmF3Qnl0ZXMpKTsKLSAgLy8gQnVmZmVyIHNpemUgaW4gdGhlIGlucHV0
IG11c3QgYmUgc21hbGxlciB0aGFuIHNpemVvZihrUmF3Qnl0ZXMpLAotICAvLyBvdGhlcndpc2Ug
Y2hlY2sgYWdhaW5zdCBjYXBhY2l0eSB3aWxsIGZhaWwgYXMgUmVhZFN0cmluZ0lubGluZSgpCi0g
IC8vIHdpbGwgaGFuZGxlIHRoZSByZWFkaW5nIGFuZCB3aWxsIHJlc2VydmUgdGhlIG1lbW9yeSBh
cyBuZWVkZWQuCi0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVmZmVyXywgc2l6ZW9mKGJ1ZmZl
cl8pLCAzMik7Ci0KLSAgewotICAgIENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJmlucHV0
KTsKLSAgICBjb2RlZF9pbnB1dC5QdXNoTGltaXQoMTYpOwotICAgIGNvZGVkX2lucHV0LlNldFRv
dGFsQnl0ZXNMaW1pdChzaXplb2YoYnVmZmVyXyksIHNpemVvZihidWZmZXJfKSk7Ci0gICAgRVhQ
RUNUX0VRKHNpemVvZihidWZmZXJfKSwgY29kZWRfaW5wdXQuQnl0ZXNVbnRpbFRvdGFsQnl0ZXNM
aW1pdCgpKTsKLQotICAgIHN0cmluZyBzdHI7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvZGVkX2lucHV0
LlJlYWRTdHJpbmcoJnN0ciwgc3RybGVuKGtSYXdCeXRlcykpKTsKLSAgICAvLyBOb3RlOiB0aGlz
IGNoZWNrIGRlcGVuZHMgb24gc3RyaW5nIGNsYXNzIGltcGxlbWVudGF0aW9uLiBJdAotICAgIC8v
IGV4cGVjdHMgdGhhdCBzdHJpbmcgd2lsbCBhbGxvY2F0ZSBsZXNzIHRoYW4gc3RybGVuKGtSYXdC
eXRlcykKLSAgICAvLyBmb3IgYW4gZW1wdHkgc3RyaW5nLgotICAgIEVYUEVDVF9HVChzdHJsZW4o
a1Jhd0J5dGVzKSwgc3RyLmNhcGFjaXR5KCkpOwotICB9Ci19Ci0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gU2tpcAotCi1jb25zdCBjaGFyIGtTa2lwVGVzdEJ5dGVzW10gPQotICAiPEJlZm9yZSBza2lw
cGluZz48VG8gYmUgc2tpcHBlZD48QWZ0ZXIgc2tpcHBpbmc+IjsKLQotVEVTVF8xRChDb2RlZFN0
cmVhbVRlc3QsIFNraXBJbnB1dCwga0Jsb2NrU2l6ZXMpIHsKLSAgbWVtY3B5KGJ1ZmZlcl8sIGtT
a2lwVGVzdEJ5dGVzLCBzaXplb2Yoa1NraXBUZXN0Qnl0ZXMpKTsKLSAgQXJyYXlJbnB1dFN0cmVh
bSBpbnB1dChidWZmZXJfLCBzaXplb2YoYnVmZmVyXyksIGtCbG9ja1NpemVzX2Nhc2UpOwotCi0g
IHsKLSAgICBDb2RlZElucHV0U3RyZWFtIGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0KLSAgICBzdHJp
bmcgc3RyOwotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRTdHJpbmcoJnN0ciwgc3Ry
bGVuKCI8QmVmb3JlIHNraXBwaW5nPiIpKSk7Ci0gICAgRVhQRUNUX0VRKCI8QmVmb3JlIHNraXBw
aW5nPiIsIHN0cik7Ci0gICAgRVhQRUNUX1RSVUUoY29kZWRfaW5wdXQuU2tpcChzdHJsZW4oIjxU
byBiZSBza2lwcGVkPiIpKSk7Ci0gICAgRVhQRUNUX1RSVUUoY29kZWRfaW5wdXQuUmVhZFN0cmlu
Zygmc3RyLCBzdHJsZW4oIjxBZnRlciBza2lwcGluZz4iKSkpOwotICAgIEVYUEVDVF9FUSgiPEFm
dGVyIHNraXBwaW5nPiIsIHN0cik7Ci0gIH0KLQotICBFWFBFQ1RfRVEoc3RybGVuKGtTa2lwVGVz
dEJ5dGVzKSwgaW5wdXQuQnl0ZUNvdW50KCkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBHZXRE
aXJlY3RCdWZmZXJQb2ludGVyCi0KLVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsIEdldERpcmVjdEJ1
ZmZlclBvaW50ZXJJbnB1dCkgewotICBBcnJheUlucHV0U3RyZWFtIGlucHV0KGJ1ZmZlcl8sIHNp
emVvZihidWZmZXJfKSwgOCk7Ci0gIENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJmlucHV0
KTsKLQotICBjb25zdCB2b2lkKiBwdHI7Ci0gIGludCBzaXplOwotCi0gIEVYUEVDVF9UUlVFKGNv
ZGVkX2lucHV0LkdldERpcmVjdEJ1ZmZlclBvaW50ZXIoJnB0ciwgJnNpemUpKTsKLSAgRVhQRUNU
X0VRKGJ1ZmZlcl8sIHB0cik7Ci0gIEVYUEVDVF9FUSg4LCBzaXplKTsKLQotICAvLyBQZWVraW5n
IGFnYWluIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgcG9pbnRlci4KLSAgRVhQRUNUX1RSVUUoY29k
ZWRfaW5wdXQuR2V0RGlyZWN0QnVmZmVyUG9pbnRlcigmcHRyLCAmc2l6ZSkpOwotICBFWFBFQ1Rf
RVEoYnVmZmVyXywgcHRyKTsKLSAgRVhQRUNUX0VRKDgsIHNpemUpOwotCi0gIC8vIFNraXAgZm9y
d2FyZCBpbiB0aGUgc2FtZSBidWZmZXIgdGhlbiBwZWVrIGFnYWluLgotICBFWFBFQ1RfVFJVRShj
b2RlZF9pbnB1dC5Ta2lwKDMpKTsKLSAgRVhQRUNUX1RSVUUoY29kZWRfaW5wdXQuR2V0RGlyZWN0
QnVmZmVyUG9pbnRlcigmcHRyLCAmc2l6ZSkpOwotICBFWFBFQ1RfRVEoYnVmZmVyXyArIDMsIHB0
cik7Ci0gIEVYUEVDVF9FUSg1LCBzaXplKTsKLQotICAvLyBTa2lwIHRvIGVuZCBvZiBidWZmZXIg
YW5kIHBlZWsgLS0gc2hvdWxkIGdldCBuZXh0IGJ1ZmZlci4KLSAgRVhQRUNUX1RSVUUoY29kZWRf
aW5wdXQuU2tpcCg1KSk7Ci0gIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LkdldERpcmVjdEJ1ZmZl
clBvaW50ZXIoJnB0ciwgJnNpemUpKTsKLSAgRVhQRUNUX0VRKGJ1ZmZlcl8gKyA4LCBwdHIpOwot
ICBFWFBFQ1RfRVEoOCwgc2l6ZSk7Ci19Ci0KLVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsIEdldERp
cmVjdEJ1ZmZlclBvaW50ZXJJbmxpbmVJbnB1dCkgewotICBBcnJheUlucHV0U3RyZWFtIGlucHV0
KGJ1ZmZlcl8sIHNpemVvZihidWZmZXJfKSwgOCk7Ci0gIENvZGVkSW5wdXRTdHJlYW0gY29kZWRf
aW5wdXQoJmlucHV0KTsKLQotICBjb25zdCB2b2lkKiBwdHI7Ci0gIGludCBzaXplOwotCi0gIGNv
ZGVkX2lucHV0LkdldERpcmVjdEJ1ZmZlclBvaW50ZXJJbmxpbmUoJnB0ciwgJnNpemUpOwotICBF
WFBFQ1RfRVEoYnVmZmVyXywgcHRyKTsKLSAgRVhQRUNUX0VRKDgsIHNpemUpOwotCi0gIC8vIFBl
ZWtpbmcgYWdhaW4gc2hvdWxkIHJldHVybiB0aGUgc2FtZSBwb2ludGVyLgotICBjb2RlZF9pbnB1
dC5HZXREaXJlY3RCdWZmZXJQb2ludGVySW5saW5lKCZwdHIsICZzaXplKTsKLSAgRVhQRUNUX0VR
KGJ1ZmZlcl8sIHB0cik7Ci0gIEVYUEVDVF9FUSg4LCBzaXplKTsKLQotICAvLyBTa2lwIGZvcndh
cmQgaW4gdGhlIHNhbWUgYnVmZmVyIHRoZW4gcGVlayBhZ2Fpbi4KLSAgRVhQRUNUX1RSVUUoY29k
ZWRfaW5wdXQuU2tpcCgzKSk7Ci0gIGNvZGVkX2lucHV0LkdldERpcmVjdEJ1ZmZlclBvaW50ZXJJ
bmxpbmUoJnB0ciwgJnNpemUpOwotICBFWFBFQ1RfRVEoYnVmZmVyXyArIDMsIHB0cik7Ci0gIEVY
UEVDVF9FUSg1LCBzaXplKTsKLQotICAvLyBTa2lwIHRvIGVuZCBvZiBidWZmZXIgYW5kIHBlZWsg
LS0gc2hvdWxkIHJldHVybiBmYWxzZSBhbmQgcHJvdmlkZSBhbiBlbXB0eQotICAvLyBidWZmZXIu
IEl0IGRvZXMgbm90IHRyeSB0byBSZWZyZXNoKCkuCi0gIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0
LlNraXAoNSkpOwotICBjb2RlZF9pbnB1dC5HZXREaXJlY3RCdWZmZXJQb2ludGVySW5saW5lKCZw
dHIsICZzaXplKTsKLSAgRVhQRUNUX0VRKGJ1ZmZlcl8gKyA4LCBwdHIpOwotICBFWFBFQ1RfRVEo
MCwgc2l6ZSk7Ci19Ci0KLVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsIEdldERpcmVjdEJ1ZmZlclBv
aW50ZXJPdXRwdXQpIHsKLSAgQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0KGJ1ZmZlcl8sIHNpemVv
ZihidWZmZXJfKSwgOCk7Ci0gIENvZGVkT3V0cHV0U3RyZWFtIGNvZGVkX291dHB1dCgmb3V0cHV0
KTsKLQotICB2b2lkKiBwdHI7Ci0gIGludCBzaXplOwotCi0gIEVYUEVDVF9UUlVFKGNvZGVkX291
dHB1dC5HZXREaXJlY3RCdWZmZXJQb2ludGVyKCZwdHIsICZzaXplKSk7Ci0gIEVYUEVDVF9FUShi
dWZmZXJfLCBwdHIpOwotICBFWFBFQ1RfRVEoOCwgc2l6ZSk7Ci0KLSAgLy8gUGVla2luZyBhZ2Fp
biBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHBvaW50ZXIuCi0gIEVYUEVDVF9UUlVFKGNvZGVkX291
dHB1dC5HZXREaXJlY3RCdWZmZXJQb2ludGVyKCZwdHIsICZzaXplKSk7Ci0gIEVYUEVDVF9FUShi
dWZmZXJfLCBwdHIpOwotICBFWFBFQ1RfRVEoOCwgc2l6ZSk7Ci0KLSAgLy8gU2tpcCBmb3J3YXJk
IGluIHRoZSBzYW1lIGJ1ZmZlciB0aGVuIHBlZWsgYWdhaW4uCi0gIEVYUEVDVF9UUlVFKGNvZGVk
X291dHB1dC5Ta2lwKDMpKTsKLSAgRVhQRUNUX1RSVUUoY29kZWRfb3V0cHV0LkdldERpcmVjdEJ1
ZmZlclBvaW50ZXIoJnB0ciwgJnNpemUpKTsKLSAgRVhQRUNUX0VRKGJ1ZmZlcl8gKyAzLCBwdHIp
OwotICBFWFBFQ1RfRVEoNSwgc2l6ZSk7Ci0KLSAgLy8gU2tpcCB0byBlbmQgb2YgYnVmZmVyIGFu
ZCBwZWVrIC0tIHNob3VsZCBnZXQgbmV4dCBidWZmZXIuCi0gIEVYUEVDVF9UUlVFKGNvZGVkX291
dHB1dC5Ta2lwKDUpKTsKLSAgRVhQRUNUX1RSVUUoY29kZWRfb3V0cHV0LkdldERpcmVjdEJ1ZmZl
clBvaW50ZXIoJnB0ciwgJnNpemUpKTsKLSAgRVhQRUNUX0VRKGJ1ZmZlcl8gKyA4LCBwdHIpOwot
ICBFWFBFQ1RfRVEoOCwgc2l6ZSk7Ci0KLSAgLy8gU2tpcCBvdmVyIG11bHRpcGxlIGJ1ZmZlcnMu
Ci0gIEVYUEVDVF9UUlVFKGNvZGVkX291dHB1dC5Ta2lwKDIyKSk7Ci0gIEVYUEVDVF9UUlVFKGNv
ZGVkX291dHB1dC5HZXREaXJlY3RCdWZmZXJQb2ludGVyKCZwdHIsICZzaXplKSk7Ci0gIEVYUEVD
VF9FUShidWZmZXJfICsgMzAsIHB0cik7Ci0gIEVYUEVDVF9FUSgyLCBzaXplKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gTGltaXRzCi0KLVRFU1RfMUQoQ29kZWRTdHJlYW1UZXN0LCBCYXNpY0xp
bWl0LCBrQmxvY2tTaXplcykgewotICBBcnJheUlucHV0U3RyZWFtIGlucHV0KGJ1ZmZlcl8sIHNp
emVvZihidWZmZXJfKSwga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0KLSAgewotICAgIENvZGVkSW5wdXRT
dHJlYW0gY29kZWRfaW5wdXQoJmlucHV0KTsKLQotICAgIEVYUEVDVF9FUSgtMSwgY29kZWRfaW5w
dXQuQnl0ZXNVbnRpbExpbWl0KCkpOwotICAgIENvZGVkSW5wdXRTdHJlYW06OkxpbWl0IGxpbWl0
ID0gY29kZWRfaW5wdXQuUHVzaExpbWl0KDgpOwotCi0gICAgLy8gUmVhZCB1bnRpbCB3ZSBoaXQg
dGhlIGxpbWl0LgotICAgIHVpbnQzMiB2YWx1ZTsKLSAgICBFWFBFQ1RfRVEoOCwgY29kZWRfaW5w
dXQuQnl0ZXNVbnRpbExpbWl0KCkpOwotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRM
aXR0bGVFbmRpYW4zMigmdmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoNCwgY29kZWRfaW5wdXQuQnl0
ZXNVbnRpbExpbWl0KCkpOwotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRMaXR0bGVF
bmRpYW4zMigmdmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoMCwgY29kZWRfaW5wdXQuQnl0ZXNVbnRp
bExpbWl0KCkpOwotICAgIEVYUEVDVF9GQUxTRShjb2RlZF9pbnB1dC5SZWFkTGl0dGxlRW5kaWFu
MzIoJnZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGNvZGVkX2lucHV0LkJ5dGVzVW50aWxMaW1p
dCgpKTsKLQotICAgIGNvZGVkX2lucHV0LlBvcExpbWl0KGxpbWl0KTsKLQotICAgIEVYUEVDVF9F
USgtMSwgY29kZWRfaW5wdXQuQnl0ZXNVbnRpbExpbWl0KCkpOwotICAgIEVYUEVDVF9UUlVFKGNv
ZGVkX2lucHV0LlJlYWRMaXR0bGVFbmRpYW4zMigmdmFsdWUpKTsKLSAgfQotCi0gIEVYUEVDVF9F
USgxMiwgaW5wdXQuQnl0ZUNvdW50KCkpOwotfQotCi0vLyBUZXN0IHdoYXQgaGFwcGVucyB3aGVu
IHdlIHB1c2ggdHdvIGxpbWl0cyB3aGVyZSB0aGUgc2Vjb25kICh0b3ApIG9uZSBpcwotLy8gc2hv
cnRlci4KLVRFU1RfMUQoQ29kZWRTdHJlYW1UZXN0LCBTbWFsbExpbWl0T25Ub3BPZkJpZ0xpbWl0
LCBrQmxvY2tTaXplcykgewotICBBcnJheUlucHV0U3RyZWFtIGlucHV0KGJ1ZmZlcl8sIHNpemVv
ZihidWZmZXJfKSwga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0KLSAgewotICAgIENvZGVkSW5wdXRTdHJl
YW0gY29kZWRfaW5wdXQoJmlucHV0KTsKLQotICAgIEVYUEVDVF9FUSgtMSwgY29kZWRfaW5wdXQu
Qnl0ZXNVbnRpbExpbWl0KCkpOwotICAgIENvZGVkSW5wdXRTdHJlYW06OkxpbWl0IGxpbWl0MSA9
IGNvZGVkX2lucHV0LlB1c2hMaW1pdCg4KTsKLSAgICBFWFBFQ1RfRVEoOCwgY29kZWRfaW5wdXQu
Qnl0ZXNVbnRpbExpbWl0KCkpOwotICAgIENvZGVkSW5wdXRTdHJlYW06OkxpbWl0IGxpbWl0MiA9
IGNvZGVkX2lucHV0LlB1c2hMaW1pdCg0KTsKLQotICAgIHVpbnQzMiB2YWx1ZTsKLQotICAgIC8v
IFJlYWQgdW50aWwgd2UgaGl0IGxpbWl0MiwgdGhlIHRvcCBhbmQgc2hvcnRlc3QgbGltaXQuCi0g
ICAgRVhQRUNUX0VRKDQsIGNvZGVkX2lucHV0LkJ5dGVzVW50aWxMaW1pdCgpKTsKLSAgICBFWFBF
Q1RfVFJVRShjb2RlZF9pbnB1dC5SZWFkTGl0dGxlRW5kaWFuMzIoJnZhbHVlKSk7Ci0gICAgRVhQ
RUNUX0VRKDAsIGNvZGVkX2lucHV0LkJ5dGVzVW50aWxMaW1pdCgpKTsKLSAgICBFWFBFQ1RfRkFM
U0UoY29kZWRfaW5wdXQuUmVhZExpdHRsZUVuZGlhbjMyKCZ2YWx1ZSkpOwotICAgIEVYUEVDVF9F
USgwLCBjb2RlZF9pbnB1dC5CeXRlc1VudGlsTGltaXQoKSk7Ci0KLSAgICBjb2RlZF9pbnB1dC5Q
b3BMaW1pdChsaW1pdDIpOwotCi0gICAgLy8gUmVhZCB1bnRpbCB3ZSBoaXQgbGltaXQxLgotICAg
IEVYUEVDVF9FUSg0LCBjb2RlZF9pbnB1dC5CeXRlc1VudGlsTGltaXQoKSk7Ci0gICAgRVhQRUNU
X1RSVUUoY29kZWRfaW5wdXQuUmVhZExpdHRsZUVuZGlhbjMyKCZ2YWx1ZSkpOwotICAgIEVYUEVD
VF9FUSgwLCBjb2RlZF9pbnB1dC5CeXRlc1VudGlsTGltaXQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KGNvZGVkX2lucHV0LlJlYWRMaXR0bGVFbmRpYW4zMigmdmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEo
MCwgY29kZWRfaW5wdXQuQnl0ZXNVbnRpbExpbWl0KCkpOwotCi0gICAgY29kZWRfaW5wdXQuUG9w
TGltaXQobGltaXQxKTsKLQotICAgIC8vIE5vIG1vcmUgbGltaXRzLgotICAgIEVYUEVDVF9FUSgt
MSwgY29kZWRfaW5wdXQuQnl0ZXNVbnRpbExpbWl0KCkpOwotICAgIEVYUEVDVF9UUlVFKGNvZGVk
X2lucHV0LlJlYWRMaXR0bGVFbmRpYW4zMigmdmFsdWUpKTsKLSAgfQotCi0gIEVYUEVDVF9FUSgx
MiwgaW5wdXQuQnl0ZUNvdW50KCkpOwotfQotCi0vLyBUZXN0IHdoYXQgaGFwcGVucyB3aGVuIHdl
IHB1c2ggdHdvIGxpbWl0cyB3aGVyZSB0aGUgc2Vjb25kICh0b3ApIG9uZSBpcwotLy8gbG9uZ2Vy
LiAgSW4gdGhpcyBjYXNlLCB0aGUgdG9wIGxpbWl0IGlzIHNob3J0ZW5lZCB0byBtYXRjaCB0aGUg
cHJldmlvdXMKLS8vIGxpbWl0LgotVEVTVF8xRChDb2RlZFN0cmVhbVRlc3QsIEJpZ0xpbWl0T25U
b3BPZlNtYWxsTGltaXQsIGtCbG9ja1NpemVzKSB7Ci0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQo
YnVmZmVyXywgc2l6ZW9mKGJ1ZmZlcl8pLCBrQmxvY2tTaXplc19jYXNlKTsKLQotICB7Ci0gICAg
Q29kZWRJbnB1dFN0cmVhbSBjb2RlZF9pbnB1dCgmaW5wdXQpOwotCi0gICAgRVhQRUNUX0VRKC0x
LCBjb2RlZF9pbnB1dC5CeXRlc1VudGlsTGltaXQoKSk7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbTo6
TGltaXQgbGltaXQxID0gY29kZWRfaW5wdXQuUHVzaExpbWl0KDQpOwotICAgIEVYUEVDVF9FUSg0
LCBjb2RlZF9pbnB1dC5CeXRlc1VudGlsTGltaXQoKSk7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbTo6
TGltaXQgbGltaXQyID0gY29kZWRfaW5wdXQuUHVzaExpbWl0KDgpOwotCi0gICAgdWludDMyIHZh
bHVlOwotCi0gICAgLy8gUmVhZCB1bnRpbCB3ZSBoaXQgbGltaXQyLiAgRXhjZXB0LCB3YWl0ISAg
bGltaXQxIGlzIHNob3J0ZXIsIHNvCi0gICAgLy8gd2UgZW5kIHVwIGhpdHRpbmcgdGhhdCBmaXJz
dCwgZGVzcGl0ZSBoYXZpbmcgNCBieXRlcyB0byBnbyBvbgotICAgIC8vIGxpbWl0Mi4KLSAgICBF
WFBFQ1RfRVEoNCwgY29kZWRfaW5wdXQuQnl0ZXNVbnRpbExpbWl0KCkpOwotICAgIEVYUEVDVF9U
UlVFKGNvZGVkX2lucHV0LlJlYWRMaXR0bGVFbmRpYW4zMigmdmFsdWUpKTsKLSAgICBFWFBFQ1Rf
RVEoMCwgY29kZWRfaW5wdXQuQnl0ZXNVbnRpbExpbWl0KCkpOwotICAgIEVYUEVDVF9GQUxTRShj
b2RlZF9pbnB1dC5SZWFkTGl0dGxlRW5kaWFuMzIoJnZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKDAs
IGNvZGVkX2lucHV0LkJ5dGVzVW50aWxMaW1pdCgpKTsKLQotICAgIGNvZGVkX2lucHV0LlBvcExp
bWl0KGxpbWl0Mik7Ci0KLSAgICAvLyBPSywgcG9wcGVkIGxpbWl0Miwgbm93IGxpbWl0MSBpcyBv
biB0b3AsIHdoaWNoIHdlJ3ZlIGFscmVhZHkgaGl0LgotICAgIEVYUEVDVF9FUSgwLCBjb2RlZF9p
bnB1dC5CeXRlc1VudGlsTGltaXQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNvZGVkX2lucHV0LlJl
YWRMaXR0bGVFbmRpYW4zMigmdmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoMCwgY29kZWRfaW5wdXQu
Qnl0ZXNVbnRpbExpbWl0KCkpOwotCi0gICAgY29kZWRfaW5wdXQuUG9wTGltaXQobGltaXQxKTsK
LQotICAgIC8vIE5vIG1vcmUgbGltaXRzLgotICAgIEVYUEVDVF9FUSgtMSwgY29kZWRfaW5wdXQu
Qnl0ZXNVbnRpbExpbWl0KCkpOwotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRMaXR0
bGVFbmRpYW4zMigmdmFsdWUpKTsKLSAgfQotCi0gIEVYUEVDVF9FUSg4LCBpbnB1dC5CeXRlQ291
bnQoKSk7Ci19Ci0KLVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsIEV4cGVjdEF0RW5kKSB7Ci0gIC8v
IFRlc3QgRXhwZWN0QXRFbmQoKSwgd2hpY2ggaXMgYmFzZWQgb24gbGltaXRzLgotICBBcnJheUlu
cHV0U3RyZWFtIGlucHV0KGJ1ZmZlcl8sIHNpemVvZihidWZmZXJfKSk7Ci0gIENvZGVkSW5wdXRT
dHJlYW0gY29kZWRfaW5wdXQoJmlucHV0KTsKLQotICBFWFBFQ1RfRkFMU0UoY29kZWRfaW5wdXQu
RXhwZWN0QXRFbmQoKSk7Ci0KLSAgQ29kZWRJbnB1dFN0cmVhbTo6TGltaXQgbGltaXQgPSBjb2Rl
ZF9pbnB1dC5QdXNoTGltaXQoNCk7Ci0KLSAgdWludDMyIHZhbHVlOwotICBFWFBFQ1RfVFJVRShj
b2RlZF9pbnB1dC5SZWFkTGl0dGxlRW5kaWFuMzIoJnZhbHVlKSk7Ci0gIEVYUEVDVF9UUlVFKGNv
ZGVkX2lucHV0LkV4cGVjdEF0RW5kKCkpOwotCi0gIGNvZGVkX2lucHV0LlBvcExpbWl0KGxpbWl0
KTsKLSAgRVhQRUNUX0ZBTFNFKGNvZGVkX2lucHV0LkV4cGVjdEF0RW5kKCkpOwotfQotCi1URVNU
X0YoQ29kZWRTdHJlYW1UZXN0LCBOZWdhdGl2ZUxpbWl0KSB7Ci0gIC8vIENoZWNrIHdoYXQgaGFw
cGVucyB3aGVuIHdlIHB1c2ggYSBuZWdhdGl2ZSBsaW1pdC4KLSAgQXJyYXlJbnB1dFN0cmVhbSBp
bnB1dChidWZmZXJfLCBzaXplb2YoYnVmZmVyXykpOwotICBDb2RlZElucHV0U3RyZWFtIGNvZGVk
X2lucHV0KCZpbnB1dCk7Ci0KLSAgQ29kZWRJbnB1dFN0cmVhbTo6TGltaXQgbGltaXQgPSBjb2Rl
ZF9pbnB1dC5QdXNoTGltaXQoLTEyMzQpOwotICAvLyBCeXRlc1VudGlsTGltaXQoKSByZXR1cm5z
IC0xIHRvIG1lYW4gIm5vIGxpbWl0Iiwgd2hpY2ggYWN0dWFsbHkgbWVhbnMKLSAgLy8gInRoZSBs
aW1pdCBpcyBJTlRfTUFYIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbSIu
Ci0gIEVYUEVDVF9FUSgtMSwgY29kZWRfaW5wdXQuQnl0ZXNVbnRpbExpbWl0KCkpOwotICBjb2Rl
ZF9pbnB1dC5Qb3BMaW1pdChsaW1pdCk7Ci19Ci0KLVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsIE5l
Z2F0aXZlTGltaXRBZnRlclJlYWRpbmcpIHsKLSAgLy8gQ2hlY2sgd2hhdCBoYXBwZW5zIHdoZW4g
d2UgcHVzaCBhIG5lZ2F0aXZlIGxpbWl0LgotICBBcnJheUlucHV0U3RyZWFtIGlucHV0KGJ1ZmZl
cl8sIHNpemVvZihidWZmZXJfKSk7Ci0gIENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJmlu
cHV0KTsKLSAgQVNTRVJUX1RSVUUoY29kZWRfaW5wdXQuU2tpcCgxMjgpKTsKLQotICBDb2RlZElu
cHV0U3RyZWFtOjpMaW1pdCBsaW1pdCA9IGNvZGVkX2lucHV0LlB1c2hMaW1pdCgtNjQpOwotICAv
LyBCeXRlc1VudGlsTGltaXQoKSByZXR1cm5zIC0xIHRvIG1lYW4gIm5vIGxpbWl0Iiwgd2hpY2gg
YWN0dWFsbHkgbWVhbnMKLSAgLy8gInRoZSBsaW1pdCBpcyBJTlRfTUFYIHJlbGF0aXZlIHRvIHRo
ZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbSIuCi0gIEVYUEVDVF9FUSgtMSwgY29kZWRfaW5wdXQu
Qnl0ZXNVbnRpbExpbWl0KCkpOwotICBjb2RlZF9pbnB1dC5Qb3BMaW1pdChsaW1pdCk7Ci19Ci0K
LVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsIE92ZXJmbG93TGltaXQpIHsKLSAgLy8gQ2hlY2sgd2hh
dCBoYXBwZW5zIHdoZW4gd2UgcHVzaCBhIGxpbWl0IGxhcmdlIGVub3VnaCB0aGF0IGl0cyBhYnNv
bHV0ZQotICAvLyBwb3NpdGlvbiBpcyBtb3JlIHRoYW4gMkdCIGludG8gdGhlIHN0cmVhbS4KLSAg
QXJyYXlJbnB1dFN0cmVhbSBpbnB1dChidWZmZXJfLCBzaXplb2YoYnVmZmVyXykpOwotICBDb2Rl
ZElucHV0U3RyZWFtIGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0gIEFTU0VSVF9UUlVFKGNvZGVkX2lu
cHV0LlNraXAoMTI4KSk7Ci0KLSAgQ29kZWRJbnB1dFN0cmVhbTo6TGltaXQgbGltaXQgPSBjb2Rl
ZF9pbnB1dC5QdXNoTGltaXQoSU5UX01BWCk7Ci0gIC8vIEJ5dGVzVW50aWxMaW1pdCgpIHJldHVy
bnMgLTEgdG8gbWVhbiAibm8gbGltaXQiLCB3aGljaCBhY3R1YWxseSBtZWFucwotICAvLyAidGhl
IGxpbWl0IGlzIElOVF9NQVggcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFt
Ii4KLSAgRVhQRUNUX0VRKC0xLCBjb2RlZF9pbnB1dC5CeXRlc1VudGlsTGltaXQoKSk7Ci0gIGNv
ZGVkX2lucHV0LlBvcExpbWl0KGxpbWl0KTsKLX0KLQotVEVTVF9GKENvZGVkU3RyZWFtVGVzdCwg
VG90YWxCeXRlc0xpbWl0KSB7Ci0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVmZmVyXywgc2l6
ZW9mKGJ1ZmZlcl8pKTsKLSAgQ29kZWRJbnB1dFN0cmVhbSBjb2RlZF9pbnB1dCgmaW5wdXQpOwot
ICBjb2RlZF9pbnB1dC5TZXRUb3RhbEJ5dGVzTGltaXQoMTYsIC0xKTsKLSAgRVhQRUNUX0VRKDE2
LCBjb2RlZF9pbnB1dC5CeXRlc1VudGlsVG90YWxCeXRlc0xpbWl0KCkpOwotCi0gIHN0cmluZyBz
dHI7Ci0gIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRTdHJpbmcoJnN0ciwgMTYpKTsKLSAg
RVhQRUNUX0VRKDAsIGNvZGVkX2lucHV0LkJ5dGVzVW50aWxUb3RhbEJ5dGVzTGltaXQoKSk7Ci0K
LSAgdmVjdG9yPHN0cmluZz4gZXJyb3JzOwotCi0gIHsKLSAgICBTY29wZWRNZW1vcnlMb2cgZXJy
b3JfbG9nOwotICAgIEVYUEVDVF9GQUxTRShjb2RlZF9pbnB1dC5SZWFkU3RyaW5nKCZzdHIsIDEp
KTsKLSAgICBlcnJvcnMgPSBlcnJvcl9sb2cuR2V0TWVzc2FnZXMoRVJST1IpOwotICB9Ci0KLSAg
QVNTRVJUX0VRKDEsIGVycm9ycy5zaXplKCkpOwotICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHRlc3Rp
bmc6OklzU3Vic3RyaW5nLAotICAgICJBIHByb3RvY29sIG1lc3NhZ2Ugd2FzIHJlamVjdGVkIGJl
Y2F1c2UgaXQgd2FzIHRvbyBiaWciLCBlcnJvcnNbMF0pOwotCi0gIGNvZGVkX2lucHV0LlNldFRv
dGFsQnl0ZXNMaW1pdCgzMiwgLTEpOwotICBFWFBFQ1RfRVEoMTYsIGNvZGVkX2lucHV0LkJ5dGVz
VW50aWxUb3RhbEJ5dGVzTGltaXQoKSk7Ci0gIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJlYWRT
dHJpbmcoJnN0ciwgMTYpKTsKLSAgRVhQRUNUX0VRKDAsIGNvZGVkX2lucHV0LkJ5dGVzVW50aWxU
b3RhbEJ5dGVzTGltaXQoKSk7Ci19Ci0KLVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsIFRvdGFsQnl0
ZXNMaW1pdE5vdFZhbGlkTWVzc2FnZUVuZCkgewotICAvLyB0b3RhbF9ieXRlc19saW1pdF8gaXMg
bm90IGEgdmFsaWQgcGxhY2UgZm9yIGEgbWVzc2FnZSB0byBlbmQuCi0KLSAgQXJyYXlJbnB1dFN0
cmVhbSBpbnB1dChidWZmZXJfLCBzaXplb2YoYnVmZmVyXykpOwotICBDb2RlZElucHV0U3RyZWFt
IGNvZGVkX2lucHV0KCZpbnB1dCk7Ci0KLSAgLy8gU2V0IGJvdGggdG90YWxfYnl0ZXNfbGltaXQg
YW5kIGEgcmVndWxhciBsaW1pdCBhdCAxNiBieXRlcy4KLSAgY29kZWRfaW5wdXQuU2V0VG90YWxC
eXRlc0xpbWl0KDE2LCAtMSk7Ci0gIENvZGVkSW5wdXRTdHJlYW06OkxpbWl0IGxpbWl0ID0gY29k
ZWRfaW5wdXQuUHVzaExpbWl0KDE2KTsKLQotICAvLyBSZWFkIDE2IGJ5dGVzLgotICBzdHJpbmcg
c3RyOwotICBFWFBFQ1RfVFJVRShjb2RlZF9pbnB1dC5SZWFkU3RyaW5nKCZzdHIsIDE2KSk7Ci0K
LSAgLy8gUmVhZCBhIHRhZy4gIFNob3VsZCBmYWlsLCBidXQgcmVwb3J0IGJlaW5nIGEgdmFsaWQg
ZW5kcG9pbnQgc2luY2UgaXQncwotICAvLyBhIHJlZ3VsYXIgbGltaXQuCi0gIEVYUEVDVF9FUSgw
LCBjb2RlZF9pbnB1dC5SZWFkVGFnKCkpOwotICBFWFBFQ1RfVFJVRShjb2RlZF9pbnB1dC5Db25z
dW1lZEVudGlyZU1lc3NhZ2UoKSk7Ci0KLSAgLy8gUG9wIHRoZSBsaW1pdC4KLSAgY29kZWRfaW5w
dXQuUG9wTGltaXQobGltaXQpOwotCi0gIC8vIFJlYWQgYSB0YWcuICBTaG91bGQgZmFpbCwgYW5k
IHJlcG9ydCAqbm90KiBiZWluZyBhIHZhbGlkIGVuZHBvaW50LCBzaW5jZQotICAvLyB0aGlzIHRp
bWUgd2UncmUgaGl0dGluZyB0aGUgdG90YWwgYnl0ZXMgbGltaXQuCi0gIEVYUEVDVF9FUSgwLCBj
b2RlZF9pbnB1dC5SZWFkVGFnKCkpOwotICBFWFBFQ1RfRkFMU0UoY29kZWRfaW5wdXQuQ29uc3Vt
ZWRFbnRpcmVNZXNzYWdlKCkpOwotfQotCi0vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSB0
ZXN0cyBiZWxvdy4KLS8vIEl0IGNvbnN0cnVjdHMgYSBDb2RlZElucHV0U3RyZWFtIHdpdGggdGhl
IGdpdmVuIGxpbWl0cyBhbmQgdHJpZXMgdG8gcmVhZCAyS2lCCi0vLyBvZiBkYXRhIGZyb20gaXQu
IFRoZW4gaXQgcmV0dXJucyB0aGUgbG9nZ2VkIGVycm9ycyBhbmQgd2FybmluZ3MgaW4gdGhlIGdp
dmVuCi0vLyB2ZWN0b3JzLgotdm9pZCBDb2RlZFN0cmVhbVRlc3Q6OlNldHVwVG90YWxCeXRlc0xp
bWl0V2FybmluZ1Rlc3QoCi0gICAgaW50IHRvdGFsX2J5dGVzX2xpbWl0LCBpbnQgd2FybmluZ190
aHJlc2hvbGQsCi0gICAgdmVjdG9yPHN0cmluZz4qIG91dF9lcnJvcnMsIHZlY3RvcjxzdHJpbmc+
KiBvdXRfd2FybmluZ3MpIHsKLSAgQXJyYXlJbnB1dFN0cmVhbSByYXdfaW5wdXQoYnVmZmVyXywg
c2l6ZW9mKGJ1ZmZlcl8pLCAxMjgpOwotCi0gIFNjb3BlZE1lbW9yeUxvZyBzY29wZWRfbG9nOwot
ICB7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSBpbnB1dCgmcmF3X2lucHV0KTsKLSAgICBpbnB1dC5T
ZXRUb3RhbEJ5dGVzTGltaXQodG90YWxfYnl0ZXNfbGltaXQsIHdhcm5pbmdfdGhyZXNob2xkKTsK
LSAgICBzdHJpbmcgc3RyOwotICAgIEVYUEVDVF9UUlVFKGlucHV0LlJlYWRTdHJpbmcoJnN0ciwg
MjA0OCkpOwotICB9Ci0KLSAgKm91dF9lcnJvcnMgPSBzY29wZWRfbG9nLkdldE1lc3NhZ2VzKEVS
Uk9SKTsKLSAgKm91dF93YXJuaW5ncyA9IHNjb3BlZF9sb2cuR2V0TWVzc2FnZXMoV0FSTklORyk7
Ci19Ci0KLVRFU1RfRihDb2RlZFN0cmVhbVRlc3QsIFRvdGFsQnl0ZXNMaW1pdFdhcm5pbmcpIHsK
LSAgdmVjdG9yPHN0cmluZz4gZXJyb3JzOwotICB2ZWN0b3I8c3RyaW5nPiB3YXJuaW5nczsKLSAg
U2V0dXBUb3RhbEJ5dGVzTGltaXRXYXJuaW5nVGVzdCgxMDI0MCwgMTAyNCwgJmVycm9ycywgJndh
cm5pbmdzKTsKLQotICBFWFBFQ1RfRVEoMCwgZXJyb3JzLnNpemUoKSk7Ci0KLSAgQVNTRVJUX0VR
KDIsIHdhcm5pbmdzLnNpemUoKSk7Ci0gIEVYUEVDVF9QUkVEX0ZPUk1BVDIodGVzdGluZzo6SXNT
dWJzdHJpbmcsCi0gICAgIlJlYWRpbmcgZGFuZ2Vyb3VzbHkgbGFyZ2UgcHJvdG9jb2wgbWVzc2Fn
ZS4gIElmIHRoZSBtZXNzYWdlIHR1cm5zIG91dCB0byAiCi0gICAgImJlIGxhcmdlciB0aGFuIDEw
MjQwIGJ5dGVzLCBwYXJzaW5nIHdpbGwgYmUgaGFsdGVkIGZvciBzZWN1cml0eSByZWFzb25zLiIs
Ci0gICAgd2FybmluZ3NbMF0pOwotICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHRlc3Rpbmc6OklzU3Vi
c3RyaW5nLAotICAgICJUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgd2FzIDIwNDgiLAot
ICAgIHdhcm5pbmdzWzFdKTsKLX0KLQotVEVTVF9GKENvZGVkU3RyZWFtVGVzdCwgVG90YWxCeXRl
c0xpbWl0V2FybmluZ0Rpc2FibGVkKSB7Ci0gIHZlY3RvcjxzdHJpbmc+IGVycm9yczsKLSAgdmVj
dG9yPHN0cmluZz4gd2FybmluZ3M7Ci0KLSAgLy8gVGVzdCB3aXRoIC0xCi0gIFNldHVwVG90YWxC
eXRlc0xpbWl0V2FybmluZ1Rlc3QoMTAyNDAsIC0xLCAmZXJyb3JzLCAmd2FybmluZ3MpOwotICBF
WFBFQ1RfRVEoMCwgZXJyb3JzLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCB3YXJuaW5ncy5zaXpl
KCkpOwotCi0gIC8vIFRlc3QgYWdhaW4gd2l0aCAtMiwgZXhwZWN0aW5nIHRoZSBzYW1lIHJlc3Vs
dAotICBTZXR1cFRvdGFsQnl0ZXNMaW1pdFdhcm5pbmdUZXN0KDEwMjQwLCAtMiwgJmVycm9ycywg
Jndhcm5pbmdzKTsKLSAgRVhQRUNUX0VRKDAsIGVycm9ycy5zaXplKCkpOwotICBFWFBFQ1RfRVEo
MCwgd2FybmluZ3Muc2l6ZSgpKTsKLX0KLQotCi1URVNUX0YoQ29kZWRTdHJlYW1UZXN0LCBSZWN1
cnNpb25MaW1pdCkgewotICBBcnJheUlucHV0U3RyZWFtIGlucHV0KGJ1ZmZlcl8sIHNpemVvZihi
dWZmZXJfKSk7Ci0gIENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJmlucHV0KTsKLSAgY29k
ZWRfaW5wdXQuU2V0UmVjdXJzaW9uTGltaXQoNCk7Ci0KLSAgLy8gVGhpcyBpcyB3YXkgdG9vIG11
Y2ggdGVzdGluZyBmb3IgYSBjb3VudGVyLgotICBFWFBFQ1RfVFJVRShjb2RlZF9pbnB1dC5JbmNy
ZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsgICAgICAvLyAxCi0gIEVYUEVDVF9UUlVFKGNvZGVkX2lu
cHV0LkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOyAgICAgIC8vIDIKLSAgRVhQRUNUX1RSVUUo
Y29kZWRfaW5wdXQuSW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7ICAgICAgLy8gMwotICBFWFBF
Q1RfVFJVRShjb2RlZF9pbnB1dC5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsgICAgICAvLyA0
Ci0gIEVYUEVDVF9GQUxTRShjb2RlZF9pbnB1dC5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsg
ICAgIC8vIDUKLSAgRVhQRUNUX0ZBTFNFKGNvZGVkX2lucHV0LkluY3JlbWVudFJlY3Vyc2lvbkRl
cHRoKCkpOyAgICAgLy8gNgotICBjb2RlZF9pbnB1dC5EZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgp
OyAgICAgICAgICAgICAgICAgICAvLyA1Ci0gIEVYUEVDVF9GQUxTRShjb2RlZF9pbnB1dC5JbmNy
ZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsgICAgIC8vIDYKLSAgY29kZWRfaW5wdXQuRGVjcmVtZW50
UmVjdXJzaW9uRGVwdGgoKTsgICAgICAgICAgICAgICAgICAgLy8gNQotICBjb2RlZF9pbnB1dC5E
ZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOyAgICAgICAgICAgICAgICAgICAvLyA0Ci0gIGNvZGVk
X2lucHV0LkRlY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCk7ICAgICAgICAgICAgICAgICAgIC8vIDMK
LSAgRVhQRUNUX1RSVUUoY29kZWRfaW5wdXQuSW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7ICAg
ICAgLy8gNAotICBFWFBFQ1RfRkFMU0UoY29kZWRfaW5wdXQuSW5jcmVtZW50UmVjdXJzaW9uRGVw
dGgoKSk7ICAgICAvLyA1Ci0gIGNvZGVkX2lucHV0LkRlY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCk7
ICAgICAgICAgICAgICAgICAgIC8vIDQKLSAgY29kZWRfaW5wdXQuRGVjcmVtZW50UmVjdXJzaW9u
RGVwdGgoKTsgICAgICAgICAgICAgICAgICAgLy8gMwotICBjb2RlZF9pbnB1dC5EZWNyZW1lbnRS
ZWN1cnNpb25EZXB0aCgpOyAgICAgICAgICAgICAgICAgICAvLyAyCi0gIGNvZGVkX2lucHV0LkRl
Y3JlbWVudFJlY3Vyc2lvbkRlcHRoKCk7ICAgICAgICAgICAgICAgICAgIC8vIDEKLSAgY29kZWRf
aW5wdXQuRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsgICAgICAgICAgICAgICAgICAgLy8gMAot
ICBjb2RlZF9pbnB1dC5EZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOyAgICAgICAgICAgICAgICAg
ICAvLyAwCi0gIGNvZGVkX2lucHV0LkRlY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCk7ICAgICAgICAg
ICAgICAgICAgIC8vIDAKLSAgRVhQRUNUX1RSVUUoY29kZWRfaW5wdXQuSW5jcmVtZW50UmVjdXJz
aW9uRGVwdGgoKSk7ICAgICAgLy8gMQotICBFWFBFQ1RfVFJVRShjb2RlZF9pbnB1dC5JbmNyZW1l
bnRSZWN1cnNpb25EZXB0aCgpKTsgICAgICAvLyAyCi0gIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0
LkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOyAgICAgIC8vIDMKLSAgRVhQRUNUX1RSVUUoY29k
ZWRfaW5wdXQuSW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7ICAgICAgLy8gNAotICBFWFBFQ1Rf
RkFMU0UoY29kZWRfaW5wdXQuSW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7ICAgICAvLyA1Ci0K
LSAgY29kZWRfaW5wdXQuU2V0UmVjdXJzaW9uTGltaXQoNik7Ci0gIEVYUEVDVF9UUlVFKGNvZGVk
X2lucHV0LkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOyAgICAgIC8vIDYKLSAgRVhQRUNUX0ZB
TFNFKGNvZGVkX2lucHV0LkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOyAgICAgLy8gNwotfQot
Ci0KLWNsYXNzIFJlYWxseUJpZ0lucHV0U3RyZWFtIDogcHVibGljIFplcm9Db3B5SW5wdXRTdHJl
YW0gewotIHB1YmxpYzoKLSAgUmVhbGx5QmlnSW5wdXRTdHJlYW0oKSA6IGJhY2t1cF9hbW91bnRf
KDApLCBidWZmZXJfY291bnRfKDApIHt9Ci0gIH5SZWFsbHlCaWdJbnB1dFN0cmVhbSgpIHt9Ci0K
LSAgLy8gaW1wbGVtZW50cyBaZXJvQ29weUlucHV0U3RyZWFtIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAgYm9vbCBOZXh0KGNvbnN0IHZvaWQqKiBkYXRhLCBpbnQqIHNpemUp
IHsKLSAgICAvLyBXZSBvbmx5IGV4cGVjdCBCYWNrVXAoKSB0byBiZSBjYWxsZWQgYXQgdGhlIGVu
ZC4KLSAgICBFWFBFQ1RfRVEoMCwgYmFja3VwX2Ftb3VudF8pOwotCi0gICAgc3dpdGNoIChidWZm
ZXJfY291bnRfKyspIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgICAgKmRhdGEgPSBidWZmZXJfOwot
ICAgICAgICAqc2l6ZSA9IHNpemVvZihidWZmZXJfKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICBjYXNlIDE6Ci0gICAgICAgIC8vIFJldHVybiBhbiBlbm9ybW91c2x5IGxhcmdlIGJ1ZmZl
ciB0aGF0LCB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIDFrCi0gICAgICAgIC8vIHJldHVybmVkIGFs
cmVhZHksIHNob3VsZCBvdmVyZmxvdyB0aGUgdG90YWxfYnl0ZXNfcmVhZF8gY291bnRlciBpbgot
ICAgICAgICAvLyBDb2RlZElucHV0U3RyZWFtLiAgTm90ZSB0aGF0IHdlJ2xsIG9ubHkgcmVhZCB0
aGUgZmlyc3QgMTAyNCBieXRlcwotICAgICAgICAvLyBvZiB0aGlzIGJ1ZmZlciBzbyBpdCdzIE9L
IHRoYXQgd2UgaGF2ZSBpdCBwb2ludCBhdCBidWZmZXJfLgotICAgICAgICAqZGF0YSA9IGJ1ZmZl
cl87Ci0gICAgICAgICpzaXplID0gSU5UX01BWDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBC
YWNrVXAoaW50IGNvdW50KSB7Ci0gICAgYmFja3VwX2Ftb3VudF8gPSBjb3VudDsKLSAgfQotCi0g
IGJvb2wgU2tpcChpbnQgY291bnQpICAgIHsgR09PR0xFX0xPRyhGQVRBTCkgPDwgIk5vdCBpbXBs
ZW1lbnRlZC4iOyByZXR1cm4gZmFsc2U7IH0KLSAgaW50NjQgQnl0ZUNvdW50KCkgY29uc3QgeyBH
T09HTEVfTE9HKEZBVEFMKSA8PCAiTm90IGltcGxlbWVudGVkLiI7IHJldHVybiAwOyB9Ci0KLSAg
aW50IGJhY2t1cF9hbW91bnRfOwotCi0gcHJpdmF0ZToKLSAgY2hhciBidWZmZXJfWzEwMjRdOwot
ICBpbnQ2NCBidWZmZXJfY291bnRfOwotfTsKLQotVEVTVF9GKENvZGVkU3RyZWFtVGVzdCwgSW5w
dXRPdmVyMkcpIHsKLSAgLy8gQ29kZWRJbnB1dFN0cmVhbSBzaG91bGQgZ3JhY2VmdWxseSBoYW5k
bGUgaW5wdXQgb3ZlciAyRyBhbmQgY2FsbAotICAvLyBpbnB1dC5CYWNrVXAoKSB3aXRoIHRoZSBj
b3JyZWN0IG51bWJlciBvZiBieXRlcyBvbiBkZXN0cnVjdGlvbi4KLSAgUmVhbGx5QmlnSW5wdXRT
dHJlYW0gaW5wdXQ7Ci0KLSAgdmVjdG9yPHN0cmluZz4gZXJyb3JzOwotCi0gIHsKLSAgICBTY29w
ZWRNZW1vcnlMb2cgZXJyb3JfbG9nOwotICAgIENvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQo
JmlucHV0KTsKLSAgICBzdHJpbmcgc3RyOwotICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LlJl
YWRTdHJpbmcoJnN0ciwgNTEyKSk7Ci0gICAgRVhQRUNUX1RSVUUoY29kZWRfaW5wdXQuUmVhZFN0
cmluZygmc3RyLCAxMDI0KSk7Ci0gICAgZXJyb3JzID0gZXJyb3JfbG9nLkdldE1lc3NhZ2VzKEVS
Uk9SKTsKLSAgfQotCi0gIEVYUEVDVF9FUShJTlRfTUFYIC0gNTEyLCBpbnB1dC5iYWNrdXBfYW1v
dW50Xyk7Ci0gIEVYUEVDVF9FUSgwLCBlcnJvcnMuc2l6ZSgpKTsKLX0KLQotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi0KLX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIGlvCi19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9pby9nemlwX3N0cmVhbS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9nemlw
X3N0cmVhbS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM2MjFiNmEyNzliMDc3
MzczZjc0OThiMzkyYTZlNmI2NTczZTRkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vZ3ppcF9zdHJlYW0uY2MKKysr
IC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2ds
ZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29t
L3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLS8vIEF1dGhvcjogYnJpYW5vbHNvbkBnb29nbGUuY29tIChCcmlhbiBPbHNvbikK
LS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGNsYXNzZXMg
R3ppcElucHV0U3RyZWFtIGFuZAotLy8gR3ppcE91dHB1dFN0cmVhbS4KLQotCi0jaWYgSEFWRV9a
TElCCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2d6aXBfc3RyZWFtLmg+Ci0KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2Ug
cHJvdG9idWYgewotbmFtZXNwYWNlIGlvIHsKLQotc3RhdGljIGNvbnN0IGludCBrRGVmYXVsdEJ1
ZmZlclNpemUgPSA2NTUzNjsKLQotR3ppcElucHV0U3RyZWFtOjpHemlwSW5wdXRTdHJlYW0oCi0g
ICAgWmVyb0NvcHlJbnB1dFN0cmVhbSogc3ViX3N0cmVhbSwgRm9ybWF0IGZvcm1hdCwgaW50IGJ1
ZmZlcl9zaXplKQotICAgIDogZm9ybWF0Xyhmb3JtYXQpLCBzdWJfc3RyZWFtXyhzdWJfc3RyZWFt
KSwgemVycm9yXyhaX09LKSwgYnl0ZV9jb3VudF8oMCkgewotICB6Y29udGV4dF8uc3RhdGUgPSBa
X05VTEw7Ci0gIHpjb250ZXh0Xy56YWxsb2MgPSBaX05VTEw7Ci0gIHpjb250ZXh0Xy56ZnJlZSA9
IFpfTlVMTDsKLSAgemNvbnRleHRfLm9wYXF1ZSA9IFpfTlVMTDsKLSAgemNvbnRleHRfLnRvdGFs
X291dCA9IDA7Ci0gIHpjb250ZXh0Xy5uZXh0X2luID0gTlVMTDsKLSAgemNvbnRleHRfLmF2YWls
X2luID0gMDsKLSAgemNvbnRleHRfLnRvdGFsX2luID0gMDsKLSAgemNvbnRleHRfLm1zZyA9IE5V
TEw7Ci0gIGlmIChidWZmZXJfc2l6ZSA9PSAtMSkgewotICAgIG91dHB1dF9idWZmZXJfbGVuZ3Ro
XyA9IGtEZWZhdWx0QnVmZmVyU2l6ZTsKLSAgfSBlbHNlIHsKLSAgICBvdXRwdXRfYnVmZmVyX2xl
bmd0aF8gPSBidWZmZXJfc2l6ZTsKLSAgfQotICBvdXRwdXRfYnVmZmVyXyA9IG9wZXJhdG9yIG5l
dyhvdXRwdXRfYnVmZmVyX2xlbmd0aF8pOwotICBHT09HTEVfQ0hFQ0sob3V0cHV0X2J1ZmZlcl8g
IT0gTlVMTCk7Ci0gIHpjb250ZXh0Xy5uZXh0X291dCA9IHN0YXRpY19jYXN0PEJ5dGVmKj4ob3V0
cHV0X2J1ZmZlcl8pOwotICB6Y29udGV4dF8uYXZhaWxfb3V0ID0gb3V0cHV0X2J1ZmZlcl9sZW5n
dGhfOwotICBvdXRwdXRfcG9zaXRpb25fID0gb3V0cHV0X2J1ZmZlcl87Ci19Ci1HemlwSW5wdXRT
dHJlYW06On5HemlwSW5wdXRTdHJlYW0oKSB7Ci0gIG9wZXJhdG9yIGRlbGV0ZShvdXRwdXRfYnVm
ZmVyXyk7Ci0gIHplcnJvcl8gPSBpbmZsYXRlRW5kKCZ6Y29udGV4dF8pOwotfQotCi1zdGF0aWMg
aW5saW5lIGludCBpbnRlcm5hbEluZmxhdGVJbml0MigKLSAgICB6X3N0cmVhbSogemNvbnRleHQs
IEd6aXBJbnB1dFN0cmVhbTo6Rm9ybWF0IGZvcm1hdCkgewotICBpbnQgd2luZG93Qml0c0Zvcm1h
dCA9IDA7Ci0gIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHemlwSW5wdXRTdHJlYW06Okda
SVA6IHdpbmRvd0JpdHNGb3JtYXQgPSAxNjsgYnJlYWs7Ci0gICAgY2FzZSBHemlwSW5wdXRTdHJl
YW06OkFVVE86IHdpbmRvd0JpdHNGb3JtYXQgPSAzMjsgYnJlYWs7Ci0gICAgY2FzZSBHemlwSW5w
dXRTdHJlYW06OlpMSUI6IHdpbmRvd0JpdHNGb3JtYXQgPSAwOyBicmVhazsKLSAgfQotICByZXR1
cm4gaW5mbGF0ZUluaXQyKHpjb250ZXh0LCAvKiB3aW5kb3dCaXRzICovMTUgfCB3aW5kb3dCaXRz
Rm9ybWF0KTsKLX0KLQotaW50IEd6aXBJbnB1dFN0cmVhbTo6SW5mbGF0ZShpbnQgZmx1c2gpIHsK
LSAgaWYgKCh6ZXJyb3JfID09IFpfT0spICYmICh6Y29udGV4dF8uYXZhaWxfb3V0ID09IDApKSB7
Ci0gICAgLy8gcHJldmlvdXMgaW5mbGF0ZSBmaWxsZWQgb3V0cHV0IGJ1ZmZlci4gZG9uJ3QgY2hh
bmdlIGlucHV0IHBhcmFtcyB5ZXQuCi0gIH0gZWxzZSBpZiAoemNvbnRleHRfLmF2YWlsX2luID09
IDApIHsKLSAgICBjb25zdCB2b2lkKiBpbjsKLSAgICBpbnQgaW5fc2l6ZTsKLSAgICBib29sIGZp
cnN0ID0gemNvbnRleHRfLm5leHRfaW4gPT0gTlVMTDsKLSAgICBib29sIG9rID0gc3ViX3N0cmVh
bV8tPk5leHQoJmluLCAmaW5fc2l6ZSk7Ci0gICAgaWYgKCFvaykgewotICAgICAgemNvbnRleHRf
Lm5leHRfb3V0ID0gTlVMTDsKLSAgICAgIHpjb250ZXh0Xy5hdmFpbF9vdXQgPSAwOwotICAgICAg
cmV0dXJuIFpfU1RSRUFNX0VORDsKLSAgICB9Ci0gICAgemNvbnRleHRfLm5leHRfaW4gPSBzdGF0
aWNfY2FzdDxCeXRlZio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGluKSk7Ci0gICAgemNvbnRleHRfLmF2
YWlsX2luID0gaW5fc2l6ZTsKLSAgICBpZiAoZmlyc3QpIHsKLSAgICAgIGludCBlcnJvciA9IGlu
dGVybmFsSW5mbGF0ZUluaXQyKCZ6Y29udGV4dF8sIGZvcm1hdF8pOwotICAgICAgaWYgKGVycm9y
ICE9IFpfT0spIHsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgICAgfQotICAgIH0KLSAgfQot
ICB6Y29udGV4dF8ubmV4dF9vdXQgPSBzdGF0aWNfY2FzdDxCeXRlZio+KG91dHB1dF9idWZmZXJf
KTsKLSAgemNvbnRleHRfLmF2YWlsX291dCA9IG91dHB1dF9idWZmZXJfbGVuZ3RoXzsKLSAgb3V0
cHV0X3Bvc2l0aW9uXyA9IG91dHB1dF9idWZmZXJfOwotICBpbnQgZXJyb3IgPSBpbmZsYXRlKCZ6
Y29udGV4dF8sIGZsdXNoKTsKLSAgcmV0dXJuIGVycm9yOwotfQotCi12b2lkIEd6aXBJbnB1dFN0
cmVhbTo6RG9OZXh0T3V0cHV0KGNvbnN0IHZvaWQqKiBkYXRhLCBpbnQqIHNpemUpIHsKLSAgKmRh
dGEgPSBvdXRwdXRfcG9zaXRpb25fOwotICAqc2l6ZSA9ICgodWludHB0cl90KXpjb250ZXh0Xy5u
ZXh0X291dCkgLSAoKHVpbnRwdHJfdClvdXRwdXRfcG9zaXRpb25fKTsKLSAgb3V0cHV0X3Bvc2l0
aW9uXyA9IHpjb250ZXh0Xy5uZXh0X291dDsKLX0KLQotLy8gaW1wbGVtZW50cyBaZXJvQ29weUlu
cHV0U3RyZWFtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWJvb2wgR3ppcElu
cHV0U3RyZWFtOjpOZXh0KGNvbnN0IHZvaWQqKiBkYXRhLCBpbnQqIHNpemUpIHsKLSAgYm9vbCBv
ayA9ICh6ZXJyb3JfID09IFpfT0spIHx8ICh6ZXJyb3JfID09IFpfU1RSRUFNX0VORCkKLSAgICAg
IHx8ICh6ZXJyb3JfID09IFpfQlVGX0VSUk9SKTsKLSAgaWYgKCghb2spIHx8ICh6Y29udGV4dF8u
bmV4dF9vdXQgPT0gTlVMTCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKHpjb250
ZXh0Xy5uZXh0X291dCAhPSBvdXRwdXRfcG9zaXRpb25fKSB7Ci0gICAgRG9OZXh0T3V0cHV0KGRh
dGEsIHNpemUpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGlmICh6ZXJyb3JfID09IFpfU1RS
RUFNX0VORCkgewotICAgIGlmICh6Y29udGV4dF8ubmV4dF9vdXQgIT0gTlVMTCkgewotICAgICAg
Ly8gc3ViX3N0cmVhbV8gbWF5IGhhdmUgY29uY2F0ZW5hdGVkIHN0cmVhbXMgdG8gZm9sbG93Ci0g
ICAgICB6ZXJyb3JfID0gaW5mbGF0ZUVuZCgmemNvbnRleHRfKTsKLSAgICAgIGJ5dGVfY291bnRf
ICs9IHpjb250ZXh0Xy50b3RhbF9vdXQ7Ci0gICAgICBpZiAoemVycm9yXyAhPSBaX09LKSB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHplcnJvcl8gPSBpbnRlcm5hbElu
ZmxhdGVJbml0MigmemNvbnRleHRfLCBmb3JtYXRfKTsKLSAgICAgIGlmICh6ZXJyb3JfICE9IFpf
T0spIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAqZGF0YSA9IE5VTEw7Ci0gICAgICAqc2l6ZSA9IDA7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICB9Ci0gIHplcnJvcl8gPSBJbmZsYXRlKFpfTk9fRkxVU0gpOwotICBpZiAoKHplcnJv
cl8gPT0gWl9TVFJFQU1fRU5EKSAmJiAoemNvbnRleHRfLm5leHRfb3V0ID09IE5VTEwpKSB7Ci0g
ICAgLy8gVGhlIHVuZGVybHlpbmcgc3RyZWFtJ3MgTmV4dCByZXR1cm5lZCBmYWxzZSBpbnNpZGUg
SW5mbGF0ZS4KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgb2sgPSAoemVycm9yXyA9PSBaX09L
KSB8fCAoemVycm9yXyA9PSBaX1NUUkVBTV9FTkQpCi0gICAgICB8fCAoemVycm9yXyA9PSBaX0JV
Rl9FUlJPUik7Ci0gIGlmICghb2spIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgRG9OZXh0
T3V0cHV0KGRhdGEsIHNpemUpOwotICByZXR1cm4gdHJ1ZTsKLX0KLXZvaWQgR3ppcElucHV0U3Ry
ZWFtOjpCYWNrVXAoaW50IGNvdW50KSB7Ci0gIG91dHB1dF9wb3NpdGlvbl8gPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPigKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvdXRwdXRf
cG9zaXRpb25fKSAtIGNvdW50KTsKLX0KLWJvb2wgR3ppcElucHV0U3RyZWFtOjpTa2lwKGludCBj
b3VudCkgewotICBjb25zdCB2b2lkKiBkYXRhOwotICBpbnQgc2l6ZTsKLSAgYm9vbCBvayA9IE5l
eHQoJmRhdGEsICZzaXplKTsKLSAgd2hpbGUgKG9rICYmIChzaXplIDwgY291bnQpKSB7Ci0gICAg
Y291bnQgLT0gc2l6ZTsKLSAgICBvayA9IE5leHQoJmRhdGEsICZzaXplKTsKLSAgfQotICBpZiAo
c2l6ZSA+IGNvdW50KSB7Ci0gICAgQmFja1VwKHNpemUgLSBjb3VudCk7Ci0gIH0KLSAgcmV0dXJu
IG9rOwotfQotaW50NjQgR3ppcElucHV0U3RyZWFtOjpCeXRlQ291bnQoKSBjb25zdCB7Ci0gIGlu
dDY0IHJldCA9IGJ5dGVfY291bnRfICsgemNvbnRleHRfLnRvdGFsX291dDsKLSAgaWYgKHpjb250
ZXh0Xy5uZXh0X291dCAhPSBOVUxMICYmIG91dHB1dF9wb3NpdGlvbl8gIT0gTlVMTCkgewotICAg
IHJldCArPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oemNvbnRleHRfLm5leHRfb3V0KSAt
Ci0gICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvdXRwdXRfcG9zaXRpb25f
KTsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUd6aXBP
dXRwdXRTdHJlYW06Ok9wdGlvbnM6Ok9wdGlvbnMoKQotICAgIDogZm9ybWF0KEdaSVApLAotICAg
ICAgYnVmZmVyX3NpemUoa0RlZmF1bHRCdWZmZXJTaXplKSwKLSAgICAgIGNvbXByZXNzaW9uX2xl
dmVsKFpfREVGQVVMVF9DT01QUkVTU0lPTiksCi0gICAgICBjb21wcmVzc2lvbl9zdHJhdGVneSha
X0RFRkFVTFRfU1RSQVRFR1kpIHt9Ci0KLUd6aXBPdXRwdXRTdHJlYW06Okd6aXBPdXRwdXRTdHJl
YW0oWmVyb0NvcHlPdXRwdXRTdHJlYW0qIHN1Yl9zdHJlYW0pIHsKLSAgSW5pdChzdWJfc3RyZWFt
LCBPcHRpb25zKCkpOwotfQotCi1HemlwT3V0cHV0U3RyZWFtOjpHemlwT3V0cHV0U3RyZWFtKFpl
cm9Db3B5T3V0cHV0U3RyZWFtKiBzdWJfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zKSB7Ci0gIEluaXQoc3ViX3N0cmVhbSwg
b3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3ppcE91dHB1dFN0cmVhbTo6SW5pdChaZXJvQ29weU91dHB1
dFN0cmVhbSogc3ViX3N0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBP
cHRpb25zJiBvcHRpb25zKSB7Ci0gIHN1Yl9zdHJlYW1fID0gc3ViX3N0cmVhbTsKLSAgc3ViX2Rh
dGFfID0gTlVMTDsKLSAgc3ViX2RhdGFfc2l6ZV8gPSAwOwotCi0gIGlucHV0X2J1ZmZlcl9sZW5n
dGhfID0gb3B0aW9ucy5idWZmZXJfc2l6ZTsKLSAgaW5wdXRfYnVmZmVyXyA9IG9wZXJhdG9yIG5l
dyhpbnB1dF9idWZmZXJfbGVuZ3RoXyk7Ci0gIEdPT0dMRV9DSEVDSyhpbnB1dF9idWZmZXJfICE9
IE5VTEwpOwotCi0gIHpjb250ZXh0Xy56YWxsb2MgPSBaX05VTEw7Ci0gIHpjb250ZXh0Xy56ZnJl
ZSA9IFpfTlVMTDsKLSAgemNvbnRleHRfLm9wYXF1ZSA9IFpfTlVMTDsKLSAgemNvbnRleHRfLm5l
eHRfb3V0ID0gTlVMTDsKLSAgemNvbnRleHRfLmF2YWlsX291dCA9IDA7Ci0gIHpjb250ZXh0Xy50
b3RhbF9vdXQgPSAwOwotICB6Y29udGV4dF8ubmV4dF9pbiA9IE5VTEw7Ci0gIHpjb250ZXh0Xy5h
dmFpbF9pbiA9IDA7Ci0gIHpjb250ZXh0Xy50b3RhbF9pbiA9IDA7Ci0gIHpjb250ZXh0Xy5tc2cg
PSBOVUxMOwotICAvLyBkZWZhdWx0IHRvIEdaSVAgZm9ybWF0Ci0gIGludCB3aW5kb3dCaXRzRm9y
bWF0ID0gMTY7Ci0gIGlmIChvcHRpb25zLmZvcm1hdCA9PSBaTElCKSB7Ci0gICAgd2luZG93Qml0
c0Zvcm1hdCA9IDA7Ci0gIH0KLSAgemVycm9yXyA9IGRlZmxhdGVJbml0MigKLSAgICAgICZ6Y29u
dGV4dF8sCi0gICAgICBvcHRpb25zLmNvbXByZXNzaW9uX2xldmVsLAotICAgICAgWl9ERUZMQVRF
RCwKLSAgICAgIC8qIHdpbmRvd0JpdHMgKi8xNSB8IHdpbmRvd0JpdHNGb3JtYXQsCi0gICAgICAv
KiBtZW1MZXZlbCAoZGVmYXVsdCkgKi84LAotICAgICAgb3B0aW9ucy5jb21wcmVzc2lvbl9zdHJh
dGVneSk7Ci19Ci0KLUd6aXBPdXRwdXRTdHJlYW06On5HemlwT3V0cHV0U3RyZWFtKCkgewotICBD
bG9zZSgpOwotICBvcGVyYXRvciBkZWxldGUoaW5wdXRfYnVmZmVyXyk7Ci19Ci0KLS8vIHByaXZh
dGUKLWludCBHemlwT3V0cHV0U3RyZWFtOjpEZWZsYXRlKGludCBmbHVzaCkgewotICBpbnQgZXJy
b3IgPSBaX09LOwotICBkbyB7Ci0gICAgaWYgKChzdWJfZGF0YV8gPT0gTlVMTCkgfHwgKHpjb250
ZXh0Xy5hdmFpbF9vdXQgPT0gMCkpIHsKLSAgICAgIGJvb2wgb2sgPSBzdWJfc3RyZWFtXy0+TmV4
dCgmc3ViX2RhdGFfLCAmc3ViX2RhdGFfc2l6ZV8pOwotICAgICAgaWYgKCFvaykgewotICAgICAg
ICBzdWJfZGF0YV8gPSBOVUxMOwotICAgICAgICBzdWJfZGF0YV9zaXplXyA9IDA7Ci0gICAgICAg
IHJldHVybiBaX0JVRl9FUlJPUjsKLSAgICAgIH0KLSAgICAgIEdPT0dMRV9DSEVDS19HVChzdWJf
ZGF0YV9zaXplXywgMCk7Ci0gICAgICB6Y29udGV4dF8ubmV4dF9vdXQgPSBzdGF0aWNfY2FzdDxC
eXRlZio+KHN1Yl9kYXRhXyk7Ci0gICAgICB6Y29udGV4dF8uYXZhaWxfb3V0ID0gc3ViX2RhdGFf
c2l6ZV87Ci0gICAgfQotICAgIGVycm9yID0gZGVmbGF0ZSgmemNvbnRleHRfLCBmbHVzaCk7Ci0g
IH0gd2hpbGUgKGVycm9yID09IFpfT0sgJiYgemNvbnRleHRfLmF2YWlsX291dCA9PSAwKTsKLSAg
aWYgKChmbHVzaCA9PSBaX0ZVTExfRkxVU0gpIHx8IChmbHVzaCA9PSBaX0ZJTklTSCkpIHsKLSAg
ICAvLyBOb3RpZnkgbG93ZXIgbGF5ZXIgb2YgZGF0YS4KLSAgICBzdWJfc3RyZWFtXy0+QmFja1Vw
KHpjb250ZXh0Xy5hdmFpbF9vdXQpOwotICAgIC8vIFdlIGRvbid0IG93biB0aGUgYnVmZmVyIGFu
eW1vcmUuCi0gICAgc3ViX2RhdGFfID0gTlVMTDsKLSAgICBzdWJfZGF0YV9zaXplXyA9IDA7Ci0g
IH0KLSAgcmV0dXJuIGVycm9yOwotfQotCi0vLyBpbXBsZW1lbnRzIFplcm9Db3B5T3V0cHV0U3Ry
ZWFtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYm9vbCBHemlwT3V0cHV0U3Ry
ZWFtOjpOZXh0KHZvaWQqKiBkYXRhLCBpbnQqIHNpemUpIHsKLSAgaWYgKCh6ZXJyb3JfICE9IFpf
T0spICYmICh6ZXJyb3JfICE9IFpfQlVGX0VSUk9SKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotICBpZiAoemNvbnRleHRfLmF2YWlsX2luICE9IDApIHsKLSAgICB6ZXJyb3JfID0gRGVmbGF0
ZShaX05PX0ZMVVNIKTsKLSAgICBpZiAoemVycm9yXyAhPSBaX09LKSB7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICB9Ci0gIGlmICh6Y29udGV4dF8uYXZhaWxfaW4gPT0gMCkgewotICAg
IC8vIGFsbCBpbnB1dCB3YXMgY29uc3VtZWQuIHJlc2V0IHRoZSBidWZmZXIuCi0gICAgemNvbnRl
eHRfLm5leHRfaW4gPSBzdGF0aWNfY2FzdDxCeXRlZio+KGlucHV0X2J1ZmZlcl8pOwotICAgIHpj
b250ZXh0Xy5hdmFpbF9pbiA9IGlucHV0X2J1ZmZlcl9sZW5ndGhfOwotICAgICpkYXRhID0gaW5w
dXRfYnVmZmVyXzsKLSAgICAqc2l6ZSA9IGlucHV0X2J1ZmZlcl9sZW5ndGhfOwotICB9IGVsc2Ug
ewotICAgIC8vIFRoZSBsb29wIGluIERlZmxhdGUgc2hvdWxkIGNvbnN1bWUgYWxsIGF2YWlsX2lu
Ci0gICAgR09PR0xFX0xPRyhERkFUQUwpIDw8ICJEZWZsYXRlIGxlZnQgYnl0ZXMgdW5jb25zdW1l
ZCI7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci12b2lkIEd6aXBPdXRwdXRTdHJlYW06OkJhY2tV
cChpbnQgY291bnQpIHsKLSAgR09PR0xFX0NIRUNLX0dFKHpjb250ZXh0Xy5hdmFpbF9pbiwgY291
bnQpOwotICB6Y29udGV4dF8uYXZhaWxfaW4gLT0gY291bnQ7Ci19Ci1pbnQ2NCBHemlwT3V0cHV0
U3RyZWFtOjpCeXRlQ291bnQoKSBjb25zdCB7Ci0gIHJldHVybiB6Y29udGV4dF8udG90YWxfaW4g
KyB6Y29udGV4dF8uYXZhaWxfaW47Ci19Ci0KLWJvb2wgR3ppcE91dHB1dFN0cmVhbTo6Rmx1c2go
KSB7Ci0gIHplcnJvcl8gPSBEZWZsYXRlKFpfRlVMTF9GTFVTSCk7Ci0gIC8vIFJldHVybiB0cnVl
IGlmIHRoZSBmbHVzaCBzdWNjZWVkZWQgb3IgaWYgaXQgd2FzIGEgbm8tb3AuCi0gIHJldHVybiAg
KHplcnJvcl8gPT0gWl9PSykgfHwKLSAgICAgICh6ZXJyb3JfID09IFpfQlVGX0VSUk9SICYmIHpj
b250ZXh0Xy5hdmFpbF9pbiA9PSAwICYmCi0gICAgICAgemNvbnRleHRfLmF2YWlsX291dCAhPSAw
KTsKLX0KLQotYm9vbCBHemlwT3V0cHV0U3RyZWFtOjpDbG9zZSgpIHsKLSAgaWYgKCh6ZXJyb3Jf
ICE9IFpfT0spICYmICh6ZXJyb3JfICE9IFpfQlVGX0VSUk9SKSkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICBkbyB7Ci0gICAgemVycm9yXyA9IERlZmxhdGUoWl9GSU5JU0gpOwotICB9IHdo
aWxlICh6ZXJyb3JfID09IFpfT0spOwotICB6ZXJyb3JfID0gZGVmbGF0ZUVuZCgmemNvbnRleHRf
KTsKLSAgYm9vbCBvayA9IHplcnJvcl8gPT0gWl9PSzsKLSAgemVycm9yXyA9IFpfU1RSRUFNX0VO
RDsKLSAgcmV0dXJuIG9rOwotfQotCi19ICAvLyBuYW1lc3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFj
ZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEhBVkVfWkxJ
QgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL2d6aXBfc3RyZWFtLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvaW8vZ3ppcF9zdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTViMDJmZTNkN2RjN2ZkZjk3YzI3YmZhMTk4ZDBjMzgwZWNjNDk1Zi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
aW8vZ3ppcF9zdHJlYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBicmlhbm9sc29uQGdvb2ds
ZS5jb20gKEJyaWFuIE9sc29uKQotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5p
dGlvbiBmb3IgY2xhc3NlcyBHemlwSW5wdXRTdHJlYW0gYW5kCi0vLyBHemlwT3V0cHV0U3RyZWFt
LgotLy8KLS8vIEd6aXBJbnB1dFN0cmVhbSBkZWNvbXByZXNzZXMgZGF0YSBmcm9tIGFuIHVuZGVy
bHlpbmcKLS8vIFplcm9Db3B5SW5wdXRTdHJlYW0gYW5kIHByb3ZpZGVzIHRoZSBkZWNvbXByZXNz
ZWQgZGF0YSBhcyBhCi0vLyBaZXJvQ29weUlucHV0U3RyZWFtLgotLy8KLS8vIEd6aXBPdXRwdXRT
dHJlYW0gaXMgYW4gWmVyb0NvcHlPdXRwdXRTdHJlYW0gdGhhdCBjb21wcmVzc2VzIGRhdGEgdG8K
LS8vIGFuIHVuZGVybHlpbmcgWmVyb0NvcHlPdXRwdXRTdHJlYW0uCi0KLSNpZm5kZWYgR09PR0xF
X1BST1RPQlVGX0lPX0daSVBfU1RSRUFNX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfSU9f
R1pJUF9TVFJFQU1fSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9u
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW0uaD4KLSNp
bmNsdWRlIDx6bGliLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBpbyB7Ci0KLS8vIEEgWmVyb0NvcHlJbnB1dFN0cmVhbSB0aGF0IHJlYWRz
IGNvbXByZXNzZWQgZGF0YSB0aHJvdWdoIHpsaWIKLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBH
emlwSW5wdXRTdHJlYW0gOiBwdWJsaWMgWmVyb0NvcHlJbnB1dFN0cmVhbSB7Ci0gcHVibGljOgot
ICAvLyBGb3JtYXQga2V5IGZvciBjb25zdHJ1Y3RvcgotICBlbnVtIEZvcm1hdCB7Ci0gICAgLy8g
emxpYiB3aWxsIGF1dG9kZXRlY3QgZ3ppcCBoZWFkZXIgb3IgZGVmbGF0ZSBzdHJlYW0KLSAgICBB
VVRPID0gMCwKLQotICAgIC8vIEdaSVAgc3RyZWFtcyBoYXZlIHNvbWUgZXh0cmEgaGVhZGVyIGRh
dGEgZm9yIGZpbGUgYXR0cmlidXRlcy4KLSAgICBHWklQID0gMSwKLQotICAgIC8vIFNpbXBsZXIg
emxpYiBzdHJlYW0gZm9ybWF0LgotICAgIFpMSUIgPSAyLAotICB9OwotCi0gIC8vIGJ1ZmZlcl9z
aXplIGFuZCBmb3JtYXQgbWF5IGJlIC0xIGZvciBkZWZhdWx0IG9mIDY0a0IgYW5kIEdaSVAgZm9y
bWF0Ci0gIGV4cGxpY2l0IEd6aXBJbnB1dFN0cmVhbSgKLSAgICAgIFplcm9Db3B5SW5wdXRTdHJl
YW0qIHN1Yl9zdHJlYW0sCi0gICAgICBGb3JtYXQgZm9ybWF0ID0gQVVUTywKLSAgICAgIGludCBi
dWZmZXJfc2l6ZSA9IC0xKTsKLSAgdmlydHVhbCB+R3ppcElucHV0U3RyZWFtKCk7Ci0KLSAgLy8g
UmV0dXJuIGxhc3QgZXJyb3IgbWVzc2FnZSBvciBOVUxMIGlmIG5vIGVycm9yLgotICBpbmxpbmUg
Y29uc3QgY2hhciogWmxpYkVycm9yTWVzc2FnZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gemNvbnRl
eHRfLm1zZzsKLSAgfQotICBpbmxpbmUgaW50IFpsaWJFcnJvckNvZGUoKSBjb25zdCB7Ci0gICAg
cmV0dXJuIHplcnJvcl87Ci0gIH0KLQotICAvLyBpbXBsZW1lbnRzIFplcm9Db3B5SW5wdXRTdHJl
YW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBib29sIE5leHQoY29uc3Qg
dm9pZCoqIGRhdGEsIGludCogc2l6ZSk7Ci0gIHZvaWQgQmFja1VwKGludCBjb3VudCk7Ci0gIGJv
b2wgU2tpcChpbnQgY291bnQpOwotICBpbnQ2NCBCeXRlQ291bnQoKSBjb25zdDsKLQotIHByaXZh
dGU6Ci0gIEZvcm1hdCBmb3JtYXRfOwotCi0gIFplcm9Db3B5SW5wdXRTdHJlYW0qIHN1Yl9zdHJl
YW1fOwotCi0gIHpfc3RyZWFtIHpjb250ZXh0XzsKLSAgaW50IHplcnJvcl87Ci0KLSAgdm9pZCog
b3V0cHV0X2J1ZmZlcl87Ci0gIHZvaWQqIG91dHB1dF9wb3NpdGlvbl87Ci0gIHNpemVfdCBvdXRw
dXRfYnVmZmVyX2xlbmd0aF87Ci0gIGludDY0IGJ5dGVfY291bnRfOwotCi0gIGludCBJbmZsYXRl
KGludCBmbHVzaCk7Ci0gIHZvaWQgRG9OZXh0T3V0cHV0KGNvbnN0IHZvaWQqKiBkYXRhLCBpbnQq
IHNpemUpOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhHemlwSW5wdXRT
dHJlYW0pOwotfTsKLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgR3ppcE91dHB1dFN0cmVh
bSA6IHB1YmxpYyBaZXJvQ29weU91dHB1dFN0cmVhbSB7Ci0gcHVibGljOgotICAvLyBGb3JtYXQg
a2V5IGZvciBjb25zdHJ1Y3RvcgotICBlbnVtIEZvcm1hdCB7Ci0gICAgLy8gR1pJUCBzdHJlYW1z
IGhhdmUgc29tZSBleHRyYSBoZWFkZXIgZGF0YSBmb3IgZmlsZSBhdHRyaWJ1dGVzLgotICAgIEda
SVAgPSAxLAotCi0gICAgLy8gU2ltcGxlciB6bGliIHN0cmVhbSBmb3JtYXQuCi0gICAgWkxJQiA9
IDIsCi0gIH07Ci0KLSAgc3RydWN0IE9wdGlvbnMgewotICAgIC8vIERlZmF1bHRzIHRvIEdaSVAu
Ci0gICAgRm9ybWF0IGZvcm1hdDsKLQotICAgIC8vIFdoYXQgc2l6ZSBidWZmZXIgdG8gdXNlIGlu
dGVybmFsbHkuICBEZWZhdWx0cyB0byA2NGtCLgotICAgIGludCBidWZmZXJfc2l6ZTsKLQotICAg
IC8vIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOSwgd2hlcmUgMCBpcyBubyBjb21wcmVzc2lvbiBh
bmQgOSBpcyBiZXN0Ci0gICAgLy8gY29tcHJlc3Npb24uICBEZWZhdWx0cyB0byBaX0RFRkFVTFRf
Q09NUFJFU1NJT04gKHNlZSB6bGliLmgpLgotICAgIGludCBjb21wcmVzc2lvbl9sZXZlbDsKLQot
ICAgIC8vIERlZmF1bHRzIHRvIFpfREVGQVVMVF9TVFJBVEVHWS4gIENhbiBhbHNvIGJlIHNldCB0
byBaX0ZJTFRFUkVELAotICAgIC8vIFpfSFVGRk1BTl9PTkxZLCBvciBaX1JMRS4gIFNlZSB0aGUg
ZG9jdW1lbnRhdGlvbiBmb3IgZGVmbGF0ZUluaXQyIGluCi0gICAgLy8gemxpYi5oIGZvciBkZWZp
bml0aW9ucyBvZiB0aGVzZSBjb25zdGFudHMuCi0gICAgaW50IGNvbXByZXNzaW9uX3N0cmF0ZWd5
OwotCi0gICAgT3B0aW9ucygpOyAgLy8gSW5pdGlhbGl6ZXMgd2l0aCBkZWZhdWx0IHZhbHVlcy4K
LSAgfTsKLQotICAvLyBDcmVhdGUgYSBHemlwT3V0cHV0U3RyZWFtIHdpdGggZGVmYXVsdCBvcHRp
b25zLgotICBleHBsaWNpdCBHemlwT3V0cHV0U3RyZWFtKFplcm9Db3B5T3V0cHV0U3RyZWFtKiBz
dWJfc3RyZWFtKTsKLQotICAvLyBDcmVhdGUgYSBHemlwT3V0cHV0U3RyZWFtIHdpdGggdGhlIGdp
dmVuIG9wdGlvbnMuCi0gIEd6aXBPdXRwdXRTdHJlYW0oCi0gICAgICBaZXJvQ29weU91dHB1dFN0
cmVhbSogc3ViX3N0cmVhbSwKLSAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotCi0gIHZp
cnR1YWwgfkd6aXBPdXRwdXRTdHJlYW0oKTsKLQotICAvLyBSZXR1cm4gbGFzdCBlcnJvciBtZXNz
YWdlIG9yIE5VTEwgaWYgbm8gZXJyb3IuCi0gIGlubGluZSBjb25zdCBjaGFyKiBabGliRXJyb3JN
ZXNzYWdlKCkgY29uc3QgewotICAgIHJldHVybiB6Y29udGV4dF8ubXNnOwotICB9Ci0gIGlubGlu
ZSBpbnQgWmxpYkVycm9yQ29kZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gemVycm9yXzsKLSAgfQot
Ci0gIC8vIEZsdXNoZXMgZGF0YSB3cml0dGVuIHNvIGZhciB0byB6aXBwZWQgZGF0YSBpbiB0aGUg
dW5kZXJseWluZyBzdHJlYW0uCi0gIC8vIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0
eSB0byBmbHVzaCB0aGUgdW5kZXJseWluZyBzdHJlYW0gaWYKLSAgLy8gbmVjZXNzYXJ5LgotICAv
LyBDb21wcmVzc2lvbiBtYXkgYmUgbGVzcyBlZmZpY2llbnQgc3RvcHBpbmcgYW5kIHN0YXJ0aW5n
IGFyb3VuZCBmbHVzaGVzLgotICAvLyBSZXR1cm5zIHRydWUgaWYgbm8gZXJyb3IuCi0gIC8vCi0g
IC8vIFBsZWFzZSBlbnN1cmUgdGhhdCBibG9jayBzaXplIGlzID4gNi4gSGVyZSBpcyBhbiBleGNl
cnB0IGZyb20gdGhlIHpsaWIKLSAgLy8gZG9jIHRoYXQgZXhwbGFpbnMgd2h5OgotICAvLwotICAv
LyBJbiB0aGUgY2FzZSBvZiBhIFpfRlVMTF9GTFVTSCBvciBaX1NZTkNfRkxVU0gsIG1ha2Ugc3Vy
ZSB0aGF0IGF2YWlsX291dAotICAvLyBpcyBncmVhdGVyIHRoYW4gc2l4IHRvIGF2b2lkIHJlcGVh
dGVkIGZsdXNoIG1hcmtlcnMgZHVlIHRvCi0gIC8vIGF2YWlsX291dCA9PSAwIG9uIHJldHVybi4K
LSAgYm9vbCBGbHVzaCgpOwotCi0gIC8vIFdyaXRlcyBvdXQgYWxsIGRhdGEgYW5kIGNsb3NlcyB0
aGUgZ3ppcCBzdHJlYW0uCi0gIC8vIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0
byBjbG9zZSB0aGUgdW5kZXJseWluZyBzdHJlYW0gaWYKLSAgLy8gbmVjZXNzYXJ5LgotICAvLyBS
ZXR1cm5zIHRydWUgaWYgbm8gZXJyb3IuCi0gIGJvb2wgQ2xvc2UoKTsKLQotICAvLyBpbXBsZW1l
bnRzIFplcm9Db3B5T3V0cHV0U3RyZWFtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICBib29sIE5leHQodm9pZCoqIGRhdGEsIGludCogc2l6ZSk7Ci0gIHZvaWQgQmFja1VwKGlu
dCBjb3VudCk7Ci0gIGludDY0IEJ5dGVDb3VudCgpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgWmVy
b0NvcHlPdXRwdXRTdHJlYW0qIHN1Yl9zdHJlYW1fOwotICAvLyBSZXN1bHQgZnJvbSBjYWxsaW5n
IE5leHQoKSBvbiBzdWJfc3RyZWFtXwotICB2b2lkKiBzdWJfZGF0YV87Ci0gIGludCBzdWJfZGF0
YV9zaXplXzsKLQotICB6X3N0cmVhbSB6Y29udGV4dF87Ci0gIGludCB6ZXJyb3JfOwotICB2b2lk
KiBpbnB1dF9idWZmZXJfOwotICBzaXplX3QgaW5wdXRfYnVmZmVyX2xlbmd0aF87Ci0KLSAgLy8g
U2hhcmVkIGNvbnN0cnVjdG9yIGNvZGUuCi0gIHZvaWQgSW5pdChaZXJvQ29weU91dHB1dFN0cmVh
bSogc3ViX3N0cmVhbSwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0KLSAgLy8gRG8gc29tZSBj
b21wcmVzc2lvbi4KLSAgLy8gVGFrZXMgemxpYiBmbHVzaCBtb2RlLgotICAvLyBSZXR1cm5zIHps
aWIgZXJyb3IgY29kZS4KLSAgaW50IERlZmxhdGUoaW50IGZsdXNoKTsKLQotICBHT09HTEVfRElT
QUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoR3ppcE91dHB1dFN0cmVhbSk7Ci19OwotCi19ICAvLyBu
YW1lc3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2Ug
Z29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9JT19HWklQX1NUUkVBTV9IX18KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9nemlwX3N0cmVhbV91bml0dGVzdC5zaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9pby9nemlwX3N0cmVhbV91bml0dGVzdC5zaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMTYyNTFhOTRkM2I3ZDhlMmVkZjllMWZiZmNmOWRmZWMwNTlm
MTQ2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvaW8vZ3ppcF9zdHJlYW1fdW5pdHRlc3Quc2gKKysrIC9kZXYvbnVsbApA
QCAtMSw0NCArMCwwIEBACi0jIS9iaW4vc2ggLXgKLSMKLSMgUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0jIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBt
ZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSMKLSMgQXV0aG9yOiBicmlh
bm9sc29uQGdvb2dsZS5jb20gKEJyaWFuIE9sc29uKQotIwotIyBUZXN0IGNvbXBhdGliaWxpdHkg
YmV0d2VlbiBjb21tYW5kIGxpbmUgZ3ppcC9ndW56aXAgYmluYXJpZXMgYW5kCi0jIFplcm9Db3B5
U3RyZWFtIHZlcnNpb25zLgotCi1URVNURklMRT1NYWtlZmlsZQotCi0oLi96Y2d6aXAgPCAke1RF
U1RGSUxFfSB8IGd1bnppcCB8IGNtcCAtICR7VEVTVEZJTEV9KSAmJiBcCi0oZ3ppcCA8ICR7VEVT
VEZJTEV9IHwgLi96Y2d1bnppcCB8IGNtcCAtICR7VEVTVEZJTEV9KQotCi0jIFJlc3VsdCBvZiAi
KGNtZCkgJiYgKGNtZCkiIGltcGxpY2l0bHkgYmVjb21lcyByZXN1bHQgb2YgdGhpcyBzY3JpcHQK
LSMgYW5kIHRodXMgdGhlIHRlc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8v
cGFja2FnZV9pbmZvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vcGFja2FnZV9pbmZvLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMWZjOTFlNWI0ZWIwNjc1YzhlNWFhYjdmYzc5
NmM2ODU0NDBlMWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3BhY2thZ2VfaW5mby5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1
dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmln
aW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVm
ZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIFRoaXMgZmlsZSBleGlzdHMgc29sZWx5IHRvIGRv
Y3VtZW50IHRoZSBnb29nbGU6OnByb3RvYnVmOjppbyBuYW1lc3BhY2UuCi0vLyBJdCBpcyBub3Qg
Y29tcGlsZWQgaW50byBhbnl0aGluZywgYnV0IGl0IG1heSBiZSByZWFkIGJ5IGFuIGF1dG9tYXRl
ZAotLy8gZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IuCi0KLW5hbWVzcGFjZSBnb29nbGUgewotCi1u
YW1lc3BhY2UgcHJvdG9idWYgewotCi0vLyBBdXhpbGlhcnkgY2xhc3NlcyB1c2VkIGZvciBJL08u
Ci0vLwotLy8gVGhlIFByb3RvY29sIEJ1ZmZlciBsaWJyYXJ5IHVzZXMgdGhlIGNsYXNzZXMgaW4g
dGhpcyBwYWNrYWdlIHRvIGRlYWwgd2l0aAotLy8gSS9PIGFuZCBlbmNvZGluZy9kZWNvZGluZyBy
YXcgYnl0ZXMuICBNb3N0IHVzZXJzIHdpbGwgbm90IG5lZWQgdG8KLS8vIGRlYWwgd2l0aCB0aGlz
IHBhY2thZ2UuICBIb3dldmVyLCB1c2VycyB3aG8gd2FudCB0byBhZGFwdCB0aGUgc3lzdGVtIHRv
Ci0vLyB3b3JrIHdpdGggdGhlaXIgb3duIEkvTyBhYnN0cmFjdGlvbnMgLS0gZS5nLiwgdG8gYWxs
b3cgUHJvdG9jb2wgQnVmZmVycwotLy8gdG8gYmUgcmVhZCBmcm9tIGEgZGlmZmVyZW50IGtpbmQg
b2YgaW5wdXQgc3RyZWFtIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEKLS8vIHRlbXBvcmFyeSBidWZm
ZXIgLS0gc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vay4KLW5hbWVzcGFjZSBpbyB7fQotCi19ICAv
LyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lv
L3ByaW50ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MzJiMDk4YmNmNjRk
ZTMyMmE3N2FhMjVkMTAyZDRjMjcxMTc4ZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNDYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBC
YXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBH
aGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2lvL3ByaW50ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5
X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotCi1uYW1lc3BhY2UgZ29v
Z2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW8gewotCi1QcmludGVyOjpQ
cmludGVyKFplcm9Db3B5T3V0cHV0U3RyZWFtKiBvdXRwdXQsIGNoYXIgdmFyaWFibGVfZGVsaW1p
dGVyKQotICAgIDogdmFyaWFibGVfZGVsaW1pdGVyXyh2YXJpYWJsZV9kZWxpbWl0ZXIpLAotICAg
ICAgb3V0cHV0XyhvdXRwdXQpLAotICAgICAgYnVmZmVyXyhOVUxMKSwKLSAgICAgIGJ1ZmZlcl9z
aXplXygwKSwKLSAgICAgIG9mZnNldF8oMCksCi0gICAgICBhdF9zdGFydF9vZl9saW5lXyh0cnVl
KSwKLSAgICAgIGZhaWxlZF8oZmFsc2UpLAotICAgICAgYW5ub3RhdGlvbl9jb2xsZWN0b3JfKE5V
TEwpIHt9Ci0KLVByaW50ZXI6OlByaW50ZXIoWmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCwg
Y2hhciB2YXJpYWJsZV9kZWxpbWl0ZXIsCi0gICAgICAgICAgICAgICAgIEFubm90YXRpb25Db2xs
ZWN0b3IqIGFubm90YXRpb25fY29sbGVjdG9yKQotICAgIDogdmFyaWFibGVfZGVsaW1pdGVyXyh2
YXJpYWJsZV9kZWxpbWl0ZXIpLAotICAgICAgb3V0cHV0XyhvdXRwdXQpLAotICAgICAgYnVmZmVy
XyhOVUxMKSwKLSAgICAgIGJ1ZmZlcl9zaXplXygwKSwKLSAgICAgIG9mZnNldF8oMCksCi0gICAg
ICBhdF9zdGFydF9vZl9saW5lXyh0cnVlKSwKLSAgICAgIGZhaWxlZF8oZmFsc2UpLAotICAgICAg
YW5ub3RhdGlvbl9jb2xsZWN0b3JfKGFubm90YXRpb25fY29sbGVjdG9yKSB7fQotCi1QcmludGVy
Ojp+UHJpbnRlcigpIHsKLSAgLy8gT25seSBCYWNrVXAoKSBpZiB3ZSBoYXZlIGNhbGxlZCBOZXh0
KCkgYXQgbGVhc3Qgb25jZSBhbmQgbmV2ZXIgZmFpbGVkLgotICBpZiAoYnVmZmVyX3NpemVfID4g
MCAmJiAhZmFpbGVkXykgewotICAgIG91dHB1dF8tPkJhY2tVcChidWZmZXJfc2l6ZV8pOwotICB9
Ci19Ci0KLWJvb2wgUHJpbnRlcjo6R2V0U3Vic3RpdHV0aW9uUmFuZ2UoY29uc3QgY2hhciogdmFy
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpcjxzaXplX3QsIHNp
emVfdD4qIHJhbmdlKSB7Ci0gIG1hcDxzdHJpbmcsIHBhaXI8c2l6ZV90LCBzaXplX3Q+ID46OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPQotICAgICAgc3Vic3RpdHV0aW9uc18uZmluZCh2YXJuYW1lKTsK
LSAgaWYgKGl0ZXIgPT0gc3Vic3RpdHV0aW9uc18uZW5kKCkpIHsKLSAgICBHT09HTEVfTE9HKERG
QVRBTCkgPDwgIiBVbmRlZmluZWQgdmFyaWFibGUgaW4gYW5ub3RhdGlvbjogIiA8PCB2YXJuYW1l
OwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoaXRlci0+c2Vjb25kLmZpcnN0ID4gaXRl
ci0+c2Vjb25kLnNlY29uZCkgewotICAgIEdPT0dMRV9MT0coREZBVEFMKSA8PCAiIFZhcmlhYmxl
IHVzZWQgZm9yIGFubm90YXRpb24gdXNlZCBtdWx0aXBsZSB0aW1lczogIgotICAgICAgICAgICAg
ICAgIDw8IHZhcm5hbWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICpyYW5nZSA9IGl0ZXIt
PnNlY29uZDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJpbnRlcjo6QW5ub3RhdGUoY29u
c3QgY2hhciogYmVnaW5fdmFybmFtZSwgY29uc3QgY2hhciogZW5kX3Zhcm5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZmlsZV9wYXRoLCBjb25zdCB2ZWN0b3I8aW50
PiYgcGF0aCkgewotICBpZiAoYW5ub3RhdGlvbl9jb2xsZWN0b3JfID09IE5VTEwpIHsKLSAgICAv
LyBDYW4ndCBnZW5lcmF0ZSBzaWduYXR1cmVzIHdpdGggdGhpcyBQcmludGVyLgotICAgIHJldHVy
bjsKLSAgfQotICBwYWlyPHNpemVfdCwgc2l6ZV90PiBiZWdpbiwgZW5kOwotICBpZiAoIUdldFN1
YnN0aXR1dGlvblJhbmdlKGJlZ2luX3Zhcm5hbWUsICZiZWdpbikgfHwKLSAgICAgICFHZXRTdWJz
dGl0dXRpb25SYW5nZShlbmRfdmFybmFtZSwgJmVuZCkpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAg
aWYgKGJlZ2luLmZpcnN0ID4gZW5kLnNlY29uZCkgewotICAgIEdPT0dMRV9MT0coREZBVEFMKSA8
PCAiICBBbm5vdGF0aW9uIGhhcyBuZWdhdGl2ZSBsZW5ndGggZnJvbSAiIDw8IGJlZ2luX3Zhcm5h
bWUKLSAgICAgICAgICAgICAgICA8PCAiIHRvICIgPDwgZW5kX3Zhcm5hbWU7Ci0gIH0gZWxzZSB7
Ci0gICAgYW5ub3RhdGlvbl9jb2xsZWN0b3JfLT5BZGRBbm5vdGF0aW9uKGJlZ2luLmZpcnN0LCBl
bmQuc2Vjb25kLCBmaWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdGgpOwotICB9Ci19Ci0KLXZvaWQgUHJpbnRlcjo6UHJpbnQoY29uc3QgbWFwPHN0
cmluZywgc3RyaW5nPiYgdmFyaWFibGVzLCBjb25zdCBjaGFyKiB0ZXh0KSB7Ci0gIGludCBzaXpl
ID0gc3RybGVuKHRleHQpOwotICBpbnQgcG9zID0gMDsgIC8vIFRoZSBudW1iZXIgb2YgYnl0ZXMg
d2UndmUgd3JpdHRlbiBzbyBmYXIuCi0gIHN1YnN0aXR1dGlvbnNfLmNsZWFyKCk7Ci0KLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICBpZiAodGV4dFtpXSA9PSAnXG4nKSB7
Ci0gICAgICAvLyBTYXcgbmV3bGluZS4gIElmIHRoZXJlIGlzIG1vcmUgdGV4dCwgd2UgbWF5IG5l
ZWQgdG8gaW5zZXJ0IGFuIGluZGVudAotICAgICAgLy8gaGVyZS4gIFNvLCB3cml0ZSB3aGF0IHdl
IGhhdmUgc28gZmFyLCBpbmNsdWRpbmcgdGhlICdcbicuCi0gICAgICBXcml0ZVJhdyh0ZXh0ICsg
cG9zLCBpIC0gcG9zICsgMSk7Ci0gICAgICBwb3MgPSBpICsgMTsKLQotICAgICAgLy8gU2V0dGlu
ZyB0aGlzIHRydWUgd2lsbCBjYXVzZSB0aGUgbmV4dCBXcml0ZVJhdygpIHRvIGluc2VydCBhbiBp
bmRlbnQKLSAgICAgIC8vIGZpcnN0LgotICAgICAgYXRfc3RhcnRfb2ZfbGluZV8gPSB0cnVlOwot
Ci0gICAgfSBlbHNlIGlmICh0ZXh0W2ldID09IHZhcmlhYmxlX2RlbGltaXRlcl8pIHsKLSAgICAg
IC8vIFNhdyB0aGUgc3RhcnQgb2YgYSB2YXJpYWJsZSBuYW1lLgotCi0gICAgICAvLyBXcml0ZSB3
aGF0IHdlIGhhdmUgc28gZmFyLgotICAgICAgV3JpdGVSYXcodGV4dCArIHBvcywgaSAtIHBvcyk7
Ci0gICAgICBwb3MgPSBpICsgMTsKLQotICAgICAgLy8gRmluZCBjbG9zaW5nIGRlbGltaXRlci4K
LSAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IHN0cmNocih0ZXh0ICsgcG9zLCB2YXJpYWJsZV9kZWxp
bWl0ZXJfKTsKLSAgICAgIGlmIChlbmQgPT0gTlVMTCkgewotICAgICAgICBHT09HTEVfTE9HKERG
QVRBTCkgPDwgIiBVbmNsb3NlZCB2YXJpYWJsZSBuYW1lLiI7Ci0gICAgICAgIGVuZCA9IHRleHQg
KyBwb3M7Ci0gICAgICB9Ci0gICAgICBpbnQgZW5kcG9zID0gZW5kIC0gdGV4dDsKLQotICAgICAg
c3RyaW5nIHZhcm5hbWUodGV4dCArIHBvcywgZW5kcG9zIC0gcG9zKTsKLSAgICAgIGlmICh2YXJu
YW1lLmVtcHR5KCkpIHsKLSAgICAgICAgLy8gVHdvIGRlbGltaXRlcnMgaW4gYSByb3cgcmVkdWNl
IHRvIGEgbGl0ZXJhbCBkZWxpbWl0ZXIgY2hhcmFjdGVyLgotICAgICAgICBXcml0ZVJhdygmdmFy
aWFibGVfZGVsaW1pdGVyXywgMSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBSZXBsYWNl
IHdpdGggdGhlIHZhcmlhYmxlJ3MgdmFsdWUuCi0gICAgICAgIG1hcDxzdHJpbmcsIHN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB2YXJpYWJsZXMuZmluZCh2YXJuYW1lKTsKLSAgICAgICAg
aWYgKGl0ZXIgPT0gdmFyaWFibGVzLmVuZCgpKSB7Ci0gICAgICAgICAgR09PR0xFX0xPRyhERkFU
QUwpIDw8ICIgVW5kZWZpbmVkIHZhcmlhYmxlOiAiIDw8IHZhcm5hbWU7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgc2l6ZV90IGJlZ2luID0gb2Zmc2V0XzsKLSAgICAgICAgICBXcml0ZVJh
dyhpdGVyLT5zZWNvbmQuZGF0YSgpLCBpdGVyLT5zZWNvbmQuc2l6ZSgpKTsKLSAgICAgICAgICBw
YWlyPG1hcDxzdHJpbmcsIHBhaXI8c2l6ZV90LCBzaXplX3Q+ID46Oml0ZXJhdG9yLCBib29sPiBp
bnNlcnRlZCA9Ci0gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbnNfLmluc2VydCgKLSAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKHZhcm5hbWUsIHN0ZDo6bWFrZV9wYWlyKGJlZ2luLCBv
ZmZzZXRfKSkpOwotICAgICAgICAgIGlmICghaW5zZXJ0ZWQuc2Vjb25kKSB7Ci0gICAgICAgICAg
ICAvLyBUaGlzIHZhcmlhYmxlIHdhcyB1c2VkIG11bHRpcGxlIHRpbWVzLiAgTWFrZSBpdHMgc3Bh
biBoYXZlCi0gICAgICAgICAgICAvLyBuZWdhdGl2ZSBsZW5ndGggc28gd2UgY2FuIGRldGVjdCBp
dCBpZiBpdCBnZXRzIHVzZWQgaW4gYW4KLSAgICAgICAgICAgIC8vIGFubm90YXRpb24uCi0gICAg
ICAgICAgICBpbnNlcnRlZC5maXJzdC0+c2Vjb25kID0gc3RkOjptYWtlX3BhaXIoMSwgMCk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFkdmFuY2UgcGFzdCB0
aGlzIHZhcmlhYmxlLgotICAgICAgaSA9IGVuZHBvczsKLSAgICAgIHBvcyA9IGVuZHBvcyArIDE7
Ci0gICAgfQotICB9Ci0KLSAgLy8gV3JpdGUgdGhlIHJlc3QuCi0gIFdyaXRlUmF3KHRleHQgKyBw
b3MsIHNpemUgLSBwb3MpOwotfQotCi12b2lkIFByaW50ZXI6OlByaW50KGNvbnN0IGNoYXIqIHRl
eHQpIHsKLSAgc3RhdGljIG1hcDxzdHJpbmcsIHN0cmluZz4gZW1wdHk7Ci0gIFByaW50KGVtcHR5
LCB0ZXh0KTsKLX0KLQotdm9pZCBQcmludGVyOjpQcmludChjb25zdCBjaGFyKiB0ZXh0LAotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YXJpYWJsZSwgY29uc3Qgc3RyaW5nJiB2YWx1
ZSkgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gIHZhcnNbdmFyaWFibGVdID0gdmFs
dWU7Ci0gIFByaW50KHZhcnMsIHRleHQpOwotfQotCi12b2lkIFByaW50ZXI6OlByaW50KGNvbnN0
IGNoYXIqIHRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMSwg
Y29uc3Qgc3RyaW5nJiB2YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZh
cmlhYmxlMiwgY29uc3Qgc3RyaW5nJiB2YWx1ZTIpIHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2
YXJzOwotICB2YXJzW3ZhcmlhYmxlMV0gPSB2YWx1ZTE7Ci0gIHZhcnNbdmFyaWFibGUyXSA9IHZh
bHVlMjsKLSAgUHJpbnQodmFycywgdGV4dCk7Ci19Ci0KLXZvaWQgUHJpbnRlcjo6UHJpbnQoY29u
c3QgY2hhciogdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyaWFibGUx
LCBjb25zdCBzdHJpbmcmIHZhbHVlMSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
dmFyaWFibGUyLCBjb25zdCBzdHJpbmcmIHZhbHVlMiwKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogdmFyaWFibGUzLCBjb25zdCBzdHJpbmcmIHZhbHVlMykgewotICBtYXA8c3RyaW5n
LCBzdHJpbmc+IHZhcnM7Ci0gIHZhcnNbdmFyaWFibGUxXSA9IHZhbHVlMTsKLSAgdmFyc1t2YXJp
YWJsZTJdID0gdmFsdWUyOwotICB2YXJzW3ZhcmlhYmxlM10gPSB2YWx1ZTM7Ci0gIFByaW50KHZh
cnMsIHRleHQpOwotfQotCi12b2lkIFByaW50ZXI6OlByaW50KGNvbnN0IGNoYXIqIHRleHQsCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMSwgY29uc3Qgc3RyaW5nJiB2
YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMiwgY29uc3Qg
c3RyaW5nJiB2YWx1ZTIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxl
MywgY29uc3Qgc3RyaW5nJiB2YWx1ZTMsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHZhcmlhYmxlNCwgY29uc3Qgc3RyaW5nJiB2YWx1ZTQpIHsKLSAgbWFwPHN0cmluZywgc3RyaW5n
PiB2YXJzOwotICB2YXJzW3ZhcmlhYmxlMV0gPSB2YWx1ZTE7Ci0gIHZhcnNbdmFyaWFibGUyXSA9
IHZhbHVlMjsKLSAgdmFyc1t2YXJpYWJsZTNdID0gdmFsdWUzOwotICB2YXJzW3ZhcmlhYmxlNF0g
PSB2YWx1ZTQ7Ci0gIFByaW50KHZhcnMsIHRleHQpOwotfQotCi12b2lkIFByaW50ZXI6OlByaW50
KGNvbnN0IGNoYXIqIHRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlh
YmxlMSwgY29uc3Qgc3RyaW5nJiB2YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHZhcmlhYmxlMiwgY29uc3Qgc3RyaW5nJiB2YWx1ZTIsCi0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIHZhcmlhYmxlMywgY29uc3Qgc3RyaW5nJiB2YWx1ZTMsCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNCwgY29uc3Qgc3RyaW5nJiB2YWx1ZTQsCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNSwgY29uc3Qgc3RyaW5nJiB2
YWx1ZTUpIHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICB2YXJzW3ZhcmlhYmxlMV0g
PSB2YWx1ZTE7Ci0gIHZhcnNbdmFyaWFibGUyXSA9IHZhbHVlMjsKLSAgdmFyc1t2YXJpYWJsZTNd
ID0gdmFsdWUzOwotICB2YXJzW3ZhcmlhYmxlNF0gPSB2YWx1ZTQ7Ci0gIHZhcnNbdmFyaWFibGU1
XSA9IHZhbHVlNTsKLSAgUHJpbnQodmFycywgdGV4dCk7Ci19Ci0KLXZvaWQgUHJpbnRlcjo6UHJp
bnQoY29uc3QgY2hhciogdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFy
aWFibGUxLCBjb25zdCBzdHJpbmcmIHZhbHVlMSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogdmFyaWFibGUyLCBjb25zdCBzdHJpbmcmIHZhbHVlMiwKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogdmFyaWFibGUzLCBjb25zdCBzdHJpbmcmIHZhbHVlMywKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogdmFyaWFibGU0LCBjb25zdCBzdHJpbmcmIHZhbHVlNCwK
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyaWFibGU1LCBjb25zdCBzdHJpbmcm
IHZhbHVlNSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyaWFibGU2LCBjb25z
dCBzdHJpbmcmIHZhbHVlNikgewotICBtYXA8c3RyaW5nLCBzdHJpbmc+IHZhcnM7Ci0gIHZhcnNb
dmFyaWFibGUxXSA9IHZhbHVlMTsKLSAgdmFyc1t2YXJpYWJsZTJdID0gdmFsdWUyOwotICB2YXJz
W3ZhcmlhYmxlM10gPSB2YWx1ZTM7Ci0gIHZhcnNbdmFyaWFibGU0XSA9IHZhbHVlNDsKLSAgdmFy
c1t2YXJpYWJsZTVdID0gdmFsdWU1OwotICB2YXJzW3ZhcmlhYmxlNl0gPSB2YWx1ZTY7Ci0gIFBy
aW50KHZhcnMsIHRleHQpOwotfQotCi12b2lkIFByaW50ZXI6OlByaW50KGNvbnN0IGNoYXIqIHRl
eHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMSwgY29uc3Qgc3Ry
aW5nJiB2YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMiwg
Y29uc3Qgc3RyaW5nJiB2YWx1ZTIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZh
cmlhYmxlMywgY29uc3Qgc3RyaW5nJiB2YWx1ZTMsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHZhcmlhYmxlNCwgY29uc3Qgc3RyaW5nJiB2YWx1ZTQsCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNSwgY29uc3Qgc3RyaW5nJiB2YWx1ZTUsCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNiwgY29uc3Qgc3RyaW5nJiB2YWx1ZTYs
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNywgY29uc3Qgc3RyaW5n
JiB2YWx1ZTcpIHsKLSAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotICB2YXJzW3ZhcmlhYmxl
MV0gPSB2YWx1ZTE7Ci0gIHZhcnNbdmFyaWFibGUyXSA9IHZhbHVlMjsKLSAgdmFyc1t2YXJpYWJs
ZTNdID0gdmFsdWUzOwotICB2YXJzW3ZhcmlhYmxlNF0gPSB2YWx1ZTQ7Ci0gIHZhcnNbdmFyaWFi
bGU1XSA9IHZhbHVlNTsKLSAgdmFyc1t2YXJpYWJsZTZdID0gdmFsdWU2OwotICB2YXJzW3Zhcmlh
YmxlN10gPSB2YWx1ZTc7Ci0gIFByaW50KHZhcnMsIHRleHQpOwotfQotCi12b2lkIFByaW50ZXI6
OlByaW50KGNvbnN0IGNoYXIqIHRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHZhcmlhYmxlMSwgY29uc3Qgc3RyaW5nJiB2YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHZhcmlhYmxlMiwgY29uc3Qgc3RyaW5nJiB2YWx1ZTIsCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMywgY29uc3Qgc3RyaW5nJiB2YWx1ZTMsCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNCwgY29uc3Qgc3RyaW5nJiB2YWx1
ZTQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNSwgY29uc3Qgc3Ry
aW5nJiB2YWx1ZTUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNiwg
Y29uc3Qgc3RyaW5nJiB2YWx1ZTYsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZh
cmlhYmxlNywgY29uc3Qgc3RyaW5nJiB2YWx1ZTcsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHZhcmlhYmxlOCwgY29uc3Qgc3RyaW5nJiB2YWx1ZTgpIHsKLSAgbWFwPHN0cmluZywg
c3RyaW5nPiB2YXJzOwotICB2YXJzW3ZhcmlhYmxlMV0gPSB2YWx1ZTE7Ci0gIHZhcnNbdmFyaWFi
bGUyXSA9IHZhbHVlMjsKLSAgdmFyc1t2YXJpYWJsZTNdID0gdmFsdWUzOwotICB2YXJzW3Zhcmlh
YmxlNF0gPSB2YWx1ZTQ7Ci0gIHZhcnNbdmFyaWFibGU1XSA9IHZhbHVlNTsKLSAgdmFyc1t2YXJp
YWJsZTZdID0gdmFsdWU2OwotICB2YXJzW3ZhcmlhYmxlN10gPSB2YWx1ZTc7Ci0gIHZhcnNbdmFy
aWFibGU4XSA9IHZhbHVlODsKLSAgUHJpbnQodmFycywgdGV4dCk7Ci19Ci0KLXZvaWQgUHJpbnRl
cjo6SW5kZW50KCkgewotICBpbmRlbnRfICs9ICIgICI7Ci19Ci0KLXZvaWQgUHJpbnRlcjo6T3V0
ZGVudCgpIHsKLSAgaWYgKGluZGVudF8uZW1wdHkoKSkgewotICAgIEdPT0dMRV9MT0coREZBVEFM
KSA8PCAiIE91dGRlbnQoKSB3aXRob3V0IG1hdGNoaW5nIEluZGVudCgpLiI7Ci0gICAgcmV0dXJu
OwotICB9Ci0KLSAgaW5kZW50Xy5yZXNpemUoaW5kZW50Xy5zaXplKCkgLSAyKTsKLX0KLQotdm9p
ZCBQcmludGVyOjpQcmludFJhdyhjb25zdCBzdHJpbmcmIGRhdGEpIHsKLSAgV3JpdGVSYXcoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLX0KLQotdm9pZCBQcmludGVyOjpQcmludFJhdyhjb25z
dCBjaGFyKiBkYXRhKSB7Ci0gIGlmIChmYWlsZWRfKSByZXR1cm47Ci0gIFdyaXRlUmF3KGRhdGEs
IHN0cmxlbihkYXRhKSk7Ci19Ci0KLXZvaWQgUHJpbnRlcjo6V3JpdGVSYXcoY29uc3QgY2hhciog
ZGF0YSwgaW50IHNpemUpIHsKLSAgaWYgKGZhaWxlZF8pIHJldHVybjsKLSAgaWYgKHNpemUgPT0g
MCkgcmV0dXJuOwotCi0gIGlmIChhdF9zdGFydF9vZl9saW5lXyAmJiAoc2l6ZSA+IDApICYmIChk
YXRhWzBdICE9ICdcbicpKSB7Ci0gICAgLy8gSW5zZXJ0IGFuIGluZGVudC4KLSAgICBhdF9zdGFy
dF9vZl9saW5lXyA9IGZhbHNlOwotICAgIFdyaXRlUmF3KGluZGVudF8uZGF0YSgpLCBpbmRlbnRf
LnNpemUoKSk7Ci0gICAgaWYgKGZhaWxlZF8pIHJldHVybjsKLSAgfQotCi0gIHdoaWxlIChzaXpl
ID4gYnVmZmVyX3NpemVfKSB7Ci0gICAgLy8gRGF0YSBleGNlZWRzIHNwYWNlIGluIHRoZSBidWZm
ZXIuICBDb3B5IHdoYXQgd2UgY2FuIGFuZCByZXF1ZXN0IGEKLSAgICAvLyBuZXcgYnVmZmVyLgot
ICAgIG1lbWNweShidWZmZXJfLCBkYXRhLCBidWZmZXJfc2l6ZV8pOwotICAgIG9mZnNldF8gKz0g
YnVmZmVyX3NpemVfOwotICAgIGRhdGEgKz0gYnVmZmVyX3NpemVfOwotICAgIHNpemUgLT0gYnVm
ZmVyX3NpemVfOwotICAgIHZvaWQqIHZvaWRfYnVmZmVyOwotICAgIGZhaWxlZF8gPSAhb3V0cHV0
Xy0+TmV4dCgmdm9pZF9idWZmZXIsICZidWZmZXJfc2l6ZV8pOwotICAgIGlmIChmYWlsZWRfKSBy
ZXR1cm47Ci0gICAgYnVmZmVyXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZvaWRfYnVmZmVy
KTsKLSAgfQotCi0gIC8vIEJ1ZmZlciBpcyBiaWcgZW5vdWdoIHRvIHJlY2VpdmUgdGhlIGRhdGE7
IGNvcHkgaXQuCi0gIG1lbWNweShidWZmZXJfLCBkYXRhLCBzaXplKTsKLSAgYnVmZmVyXyArPSBz
aXplOwotICBidWZmZXJfc2l6ZV8gLT0gc2l6ZTsKLSAgb2Zmc2V0XyArPSBzaXplOwotfQotCi19
ICAvLyBuYW1lc3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNw
YWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJiYTg0NTU5MDZkMzQyYTIzOWRhZmU3MzZlN2JkOGNkY2NiZWZiZDAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2lvL3ByaW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAo
S2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVz
aWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwot
Ly8gVXRpbGl0eSBjbGFzcyBmb3Igd3JpdGluZyB0ZXh0IHRvIGEgWmVyb0NvcHlPdXRwdXRTdHJl
YW0uCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0lPX1BSSU5URVJfSF9fCi0jZGVmaW5lIEdP
T0dMRV9QUk9UT0JVRl9JT19QUklOVEVSX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1
ZGUgPG1hcD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2NvbW1vbi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci1uYW1lc3BhY2UgaW8gewotCi1jbGFzcyBaZXJvQ29weU91dHB1dFN0cmVhbTsgICAgIC8vIHpl
cm9fY29weV9zdHJlYW0uaAotCi0vLyBSZWNvcmRzIGFubm90YXRpb25zIGFib3V0IGEgUHJpbnRl
cidzIG91dHB1dC4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBBbm5vdGF0aW9uQ29sbGVjdG9y
IHsKLSBwdWJsaWM6Ci0gIC8vIFJlY29yZHMgdGhhdCB0aGUgYnl0ZXMgaW4gZmlsZV9wYXRoIGJl
Z2lubmluZyB3aXRoIGJlZ2luX29mZnNldCBhbmQgZW5kaW5nCi0gIC8vIGJlZm9yZSBlbmRfb2Zm
c2V0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIFNvdXJjZUNvZGVJbmZvLXN0eWxlIHBhdGguCi0g
IHZpcnR1YWwgdm9pZCBBZGRBbm5vdGF0aW9uKHNpemVfdCBiZWdpbl9vZmZzZXQsIHNpemVfdCBl
bmRfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGZp
bGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yPGludD4m
IHBhdGgpID0gMDsKLQotICB2aXJ0dWFsIH5Bbm5vdGF0aW9uQ29sbGVjdG9yKCkge30KLX07Ci0K
LS8vIFJlY29yZHMgYW5ub3RhdGlvbnMgYWJvdXQgYSBQcmludGVyJ3Mgb3V0cHV0IHRvIHRoZSBn
aXZlbiBwcm90b2NvbCBidWZmZXIsCi0vLyBhc3N1bWluZyB0aGF0IHRoZSBidWZmZXIgaGFzIGFu
IDo6QW5ub3RhdGlvbiBtZXNzYWdlIGV4cG9zaW5nIHBhdGgsCi0vLyBzb3VyY2VfZmlsZSwgYmVn
aW4gYW5kIGVuZCBmaWVsZHMuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQW5ub3RhdGlvblByb3RvPgot
Y2xhc3MgQW5ub3RhdGlvblByb3RvQ29sbGVjdG9yIDogcHVibGljIEFubm90YXRpb25Db2xsZWN0
b3IgewotIHB1YmxpYzoKLSAgLy8gYW5ub3RhdGlvbl9wcm90byBpcyB0aGUgcHJvdG9jb2wgYnVm
ZmVyIHRvIHdoaWNoIG5ldyBBbm5vdGF0aW9ucyBzaG91bGQgYmUKLSAgLy8gYWRkZWQuIEl0IGlz
IG5vdCBvd25lZCBieSB0aGUgQW5ub3RhdGlvblByb3RvQ29sbGVjdG9yLgotICBleHBsaWNpdCBB
bm5vdGF0aW9uUHJvdG9Db2xsZWN0b3IoQW5ub3RhdGlvblByb3RvKiBhbm5vdGF0aW9uX3Byb3Rv
KQotICAgICAgOiBhbm5vdGF0aW9uX3Byb3RvXyhhbm5vdGF0aW9uX3Byb3RvKSB7fQotCi0gIC8v
IE92ZXJyaWRlIGZvciBBbm5vdGF0aW9uQ29sbGVjdG9yOjpBZGRBbm5vdGF0aW9uLgotICB2aXJ0
dWFsIHZvaWQgQWRkQW5ub3RhdGlvbihzaXplX3QgYmVnaW5fb2Zmc2V0LCBzaXplX3QgZW5kX29m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBmaWxlX3Bh
dGgsIGNvbnN0IHZlY3RvcjxpbnQ+JiBwYXRoKSB7Ci0gICAgdHlwZW5hbWUgQW5ub3RhdGlvblBy
b3RvOjpBbm5vdGF0aW9uKiBhbm5vdGF0aW9uID0KLSAgICAgICAgYW5ub3RhdGlvbl9wcm90b18t
PmFkZF9hbm5vdGF0aW9uKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRoLnNpemUoKTsg
KytpKSB7Ci0gICAgICBhbm5vdGF0aW9uLT5hZGRfcGF0aChwYXRoW2ldKTsKLSAgICB9Ci0gICAg
YW5ub3RhdGlvbi0+c2V0X3NvdXJjZV9maWxlKGZpbGVfcGF0aCk7Ci0gICAgYW5ub3RhdGlvbi0+
c2V0X2JlZ2luKGJlZ2luX29mZnNldCk7Ci0gICAgYW5ub3RhdGlvbi0+c2V0X2VuZChlbmRfb2Zm
c2V0KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gVGhlIHByb3RvY29sIGJ1ZmZlciB0byB3aGlj
aCBuZXcgYW5ub3RhdGlvbnMgc2hvdWxkIGJlIGFkZGVkLgotICBBbm5vdGF0aW9uUHJvdG8qIGNv
bnN0IGFubm90YXRpb25fcHJvdG9fOwotfTsKLQotLy8gVGhpcyBzaW1wbGUgdXRpbGl0eSBjbGFz
cyBhc3Npc3RzIGluIGNvZGUgZ2VuZXJhdGlvbi4gIEl0IGJhc2ljYWxseQotLy8gYWxsb3dzIHRo
ZSBjYWxsZXIgdG8gZGVmaW5lIGEgc2V0IG9mIHZhcmlhYmxlcyBhbmQgdGhlbiBvdXRwdXQgc29t
ZQotLy8gdGV4dCB3aXRoIHZhcmlhYmxlIHN1YnN0aXR1dGlvbnMuICBFeGFtcGxlIHVzYWdlOgot
Ly8KLS8vICAgUHJpbnRlciBwcmludGVyKG91dHB1dCwgJyQnKTsKLS8vICAgbWFwPHN0cmluZywg
c3RyaW5nPiB2YXJzOwotLy8gICB2YXJzWyJuYW1lIl0gPSAiQm9iIjsKLS8vICAgcHJpbnRlci5Q
cmludCh2YXJzLCAiTXkgbmFtZSBpcyAkbmFtZSQuIik7Ci0vLwotLy8gVGhlIGFib3ZlIHdyaXRl
cyAiTXkgbmFtZSBpcyBCb2IuIiB0byB0aGUgb3V0cHV0IHN0cmVhbS4KLS8vCi0vLyBQcmludGVy
IGFnZ3Jlc3NpdmVseSBlbmZvcmNlcyBjb3JyZWN0IHVzYWdlLCBjcmFzaGluZyAod2l0aCBhc3Nl
cnQgZmFpbHVyZXMpCi0vLyBpbiB0aGUgY2FzZSBvZiB1bmRlZmluZWQgdmFyaWFibGVzIGluIGRl
YnVnIGJ1aWxkcy4gVGhpcyBoZWxwcyBncmVhdGx5IGluCi0vLyBkZWJ1Z2dpbmcgY29kZSB3aGlj
aCB1c2VzIGl0LgotLy8KLS8vIElmIGEgUHJpbnRlciBpcyBjb25zdHJ1Y3RlZCB3aXRoIGFuIEFu
bm90YXRpb25Db2xsZWN0b3IsIGl0IHdpbGwgcHJvdmlkZSBpdAotLy8gd2l0aCBhbm5vdGF0aW9u
cyB0aGF0IGNvbm5lY3QgdGhlIFByaW50ZXIncyBvdXRwdXQgdG8gcGF0aHMgdGhhdCBjYW4gaWRl
bnRpZnkKLS8vIHZhcmlvdXMgZGVzY3JpcHRvcnMuICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgaWYg
cGVyc29uXyBpcyBhIGRlc2NyaXB0b3IgdGhhdAotLy8gaWRlbnRpZmllcyBCb2IsIHdlIGNhbiBh
c3NvY2lhdGUgdGhlIG91dHB1dCBzdHJpbmcgIk15IG5hbWUgaXMgQm9iLiIgd2l0aAotLy8gYSBz
b3VyY2UgcGF0aCBwb2ludGluZyB0byB0aGF0IGRlc2NyaXB0b3Igd2l0aDoKLS8vCi0vLyAgIHBy
aW50ZXIuQW5ub3RhdGUoIm5hbWUiLCBwZXJzb25fKTsKLS8vCi0vLyBUaGUgQW5ub3RhdGlvbkNv
bGxlY3RvciB3aWxsIGJlIHNlbnQgYW4gYW5ub3RhdGlvbiBsaW5raW5nIHRoZSBvdXRwdXQgcmFu
Z2UKLS8vIGNvdmVyaW5nICJCb2IiIHRvIHRoZSBsb2dpY2FsIHBhdGggcHJvdmlkZWQgYnkgcGVy
c29uXy4gIFRvb2xzIG1heSB1c2UKLS8vIHRoaXMgYXNzb2NpYXRpb24gdG8gKGZvciBleGFtcGxl
KSBsaW5rICJCb2IiIGluIHRoZSBvdXRwdXQgYmFjayB0byB0aGUKLS8vIHNvdXJjZSBmaWxlIHRo
YXQgZGVmaW5lZCB0aGUgcGVyc29uXyBkZXNjcmlwdG9yIGlkZW50aWZ5aW5nIEJvYi4KLS8vCi0v
LyBBbm5vdGF0ZSBjYW4gb25seSBleGFtaW5lIHZhcmlhYmxlcyBzdWJzdGl0dXRlZCBkdXJpbmcg
dGhlIGxhc3QgY2FsbCB0bwotLy8gUHJpbnQuICBJdCBpcyBpbnZhbGlkIHRvIHJlZmVyIHRvIGEg
dmFyaWFibGUgdGhhdCB3YXMgdXNlZCBtdWx0aXBsZSB0aW1lcwotLy8gaW4gYSBzaW5nbGUgUHJp
bnQgY2FsbC4KLS8vCi0vLyBJbiBmdWxsIGdlbmVyYWxpdHksIG9uZSBtYXkgc3BlY2lmeSBhIHJh
bmdlIG9mIG91dHB1dCB0ZXh0IHVzaW5nIGEgYmVnaW5uaW5nCi0vLyBzdWJzdGl0dXRpb24gdmFy
aWFibGUgYW5kIGFuIGVuZGluZyB2YXJpYWJsZS4gIFRoZSByZXN1bHRpbmcgYW5ub3RhdGlvbiB3
aWxsCi0vLyBzcGFuIGZyb20gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3Vic3RpdHV0ZWQg
dmFsdWUgZm9yIHRoZSBiZWdpbm5pbmcKLS8vIHZhcmlhYmxlIHRvIHRoZSBsYXN0IGNoYXJhY3Rl
ciBvZiB0aGUgc3Vic3RpdHV0ZWQgdmFsdWUgZm9yIHRoZSBlbmRpbmcKLS8vIHZhcmlhYmxlLiAg
Rm9yIGV4YW1wbGUsIHRoZSBBbm5vdGF0ZSBjYWxsIGFib3ZlIGlzIGVxdWl2YWxlbnQgdG8gdGhp
cyBvbmU6Ci0vLwotLy8gICBwcmludGVyLkFubm90YXRlKCJuYW1lIiwgIm5hbWUiLCBwZXJzb25f
KTsKLS8vCi0vLyBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZSB2YXJpYWJsZXMgY29tYmluZSB0
byBmb3JtIGEgc2luZ2xlIHNwYW4gb2Ygb3V0cHV0Ci0vLyB0aGF0IHNob3VsZCBiZSBhbm5vdGF0
ZWQgd2l0aCB0aGUgc2FtZSBzb3VyY2UgcGF0aC4gIEZvciBleGFtcGxlOgotLy8KLS8vICAgUHJp
bnRlciBwcmludGVyKG91dHB1dCwgJyQnKTsKLS8vICAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJz
OwotLy8gICB2YXJzWyJmaXJzdCJdID0gIkFsaWNlIjsKLS8vICAgdmFyc1sibGFzdCJdID0gIlNt
aXRoIjsKLS8vICAgcHJpbnRlci5QcmludCh2YXJzLCAiTXkgbmFtZSBpcyAkZmlyc3QkICRsYXN0
JC4iKTsKLS8vICAgcHJpbnRlci5Bbm5vdGF0ZSgiZmlyc3QiLCAibGFzdCIsIHBlcnNvbl8pOwot
Ly8KLS8vIFRoaXMgY29kZSB3b3VsZCBhc3NvY2lhdGUgdGhlIHNwYW4gY292ZXJpbmcgIkFsaWNl
IFNtaXRoIiBpbiB0aGUgb3V0cHV0IHdpdGgKLS8vIHRoZSBwZXJzb25fIGRlc2NyaXB0b3IuCi0v
LwotLy8gTm90ZSB0aGF0IHRoZSBiZWdpbm5pbmcgdmFyaWFibGUgbXVzdCBjb21lIGJlZm9yZSAo
b3Igb3ZlcmxhcCB3aXRoLCBpbiB0aGUKLS8vIGNhc2Ugb2YgemVyby1zaXplZCBzdWJzdGl0dXRp
b24gdmFsdWVzKSB0aGUgZW5kaW5nIHZhcmlhYmxlLgotLy8KLS8vIEl0IGlzIGFsc28gc29tZXRp
bWVzIHVzZWZ1bCB0byB1c2UgdmFyaWFibGVzIHdpdGggemVyby1zaXplZCB2YWx1ZXMgYXMKLS8v
IG1hcmtlcnMuICBUaGlzIGF2b2lkcyBpc3N1ZXMgd2l0aCBtdWx0aXBsZSByZWZlcmVuY2VzIHRv
IHRoZSBzYW1lIHZhcmlhYmxlCi0vLyBhbmQgYWxzbyBhbGxvd3MgYW5ub3RhdGlvbiByYW5nZXMg
dG8gc3BhbiBsaXRlcmFsIHRleHQgZnJvbSB0aGUgUHJpbnQKLS8vIHRlbXBsYXRlczoKLS8vCi0v
LyAgIFByaW50ZXIgcHJpbnRlcihvdXRwdXQsICckJyk7Ci0vLyAgIG1hcDxzdHJpbmcsIHN0cmlu
Zz4gdmFyczsKLS8vICAgdmFyc1siZm9vIl0gPSAiYmFyIjsKLS8vICAgdmFyc1siZnVuY3Rpb24i
XSA9ICJjYWxsIjsKLS8vICAgdmFyc1sibWFyayJdID0gIiI7Ci0vLyAgIHByaW50ZXIuUHJpbnQo
dmFycywgIiRmdW5jdGlvbiQoJGZvbyQsJGZvbyQpJG1hcmskIik7Ci0vLyAgIHByaW50ZXIuQW5u
b3RhdGUoImZ1bmN0aW9uIiwgInJtYXJrIiwgY2FsbF8pOwotLy8KLS8vIFRoaXMgY29kZSBhc3Nv
Y2lhdGVzIHRoZSBzcGFuIGNvdmVyaW5nICJjYWxsKGJhcixiYXIpIiBpbiB0aGUgb3V0cHV0IHdp
dGggdGhlCi0vLyBjYWxsXyBkZXNjcmlwdG9yLgotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQg
UHJpbnRlciB7Ci0gcHVibGljOgotICAvLyBDcmVhdGUgYSBwcmludGVyIHRoYXQgd3JpdGVzIHRl
eHQgdG8gdGhlIGdpdmVuIG91dHB1dCBzdHJlYW0uICBVc2UgdGhlCi0gIC8vIGdpdmVuIGNoYXJh
Y3RlciBhcyB0aGUgZGVsaW1pdGVyIGZvciB2YXJpYWJsZXMuCi0gIFByaW50ZXIoWmVyb0NvcHlP
dXRwdXRTdHJlYW0qIG91dHB1dCwgY2hhciB2YXJpYWJsZV9kZWxpbWl0ZXIpOwotCi0gIC8vIENy
ZWF0ZSBhIHByaW50ZXIgdGhhdCB3cml0ZXMgdGV4dCB0byB0aGUgZ2l2ZW4gb3V0cHV0IHN0cmVh
bS4gIFVzZSB0aGUKLSAgLy8gZ2l2ZW4gY2hhcmFjdGVyIGFzIHRoZSBkZWxpbWl0ZXIgZm9yIHZh
cmlhYmxlcy4gIElmIGFubm90YXRpb25fY29sbGVjdG9yCi0gIC8vIGlzIG5vdCBudWxsLCBQcmlu
dGVyIHdpbGwgcHJvdmlkZSBpdCB3aXRoIGFubm90YXRpb25zIGFib3V0IGNvZGUgd3JpdHRlbgot
ICAvLyB0byB0aGUgc3RyZWFtLiAgYW5ub3RhdGlvbl9jb2xsZWN0b3IgaXMgbm90IG93bmVkIGJ5
IFByaW50ZXIuCi0gIFByaW50ZXIoWmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCwgY2hhciB2
YXJpYWJsZV9kZWxpbWl0ZXIsCi0gICAgICAgICAgQW5ub3RhdGlvbkNvbGxlY3RvciogYW5ub3Rh
dGlvbl9jb2xsZWN0b3IpOwotCi0gIH5QcmludGVyKCk7Ci0KLSAgLy8gTGluayBhIHN1YnNpdHV0
aW9uIHZhcmlhYmxlIGVtaXR0ZWQgYnkgdGhlIGxhc3QgY2FsbCB0byBQcmludCB0byB0aGUgb2Jq
ZWN0Ci0gIC8vIGRlc2NyaWJlZCBieSBkZXNjcmlwdG9yLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
U29tZURlc2NyaXB0b3I+Ci0gIHZvaWQgQW5ub3RhdGUoY29uc3QgY2hhciogdmFybmFtZSwgY29u
c3QgU29tZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgICBBbm5vdGF0ZSh2YXJuYW1lLCB2
YXJuYW1lLCBkZXNjcmlwdG9yKTsKLSAgfQotCi0gIC8vIExpbmsgdGhlIG91dHB1dCByYW5nZSBk
ZWZpbmVkIGJ5IHRoZSBzdWJzdGl0dXRpb24gdmFyaWFibGVzIGFzIGVtaXR0ZWQgYnkKLSAgLy8g
dGhlIGxhc3QgY2FsbCB0byBQcmludCB0byB0aGUgb2JqZWN0IGRlc2NyaWJlZCBieSBkZXNjcmlw
dG9yLiBUaGUgcmFuZ2UKLSAgLy8gYmVnaW5zIGF0IGJlZ2luX3Zhcm5hbWUncyB2YWx1ZSBhbmQg
ZW5kcyBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlCi0gIC8vIHZhbHVlIHN1YnN0aXR1
dGVkIGZvciBlbmRfdmFybmFtZS4KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFNvbWVEZXNjcmlwdG9y
PgotICB2b2lkIEFubm90YXRlKGNvbnN0IGNoYXIqIGJlZ2luX3Zhcm5hbWUsIGNvbnN0IGNoYXIq
IGVuZF92YXJuYW1lLAotICAgICAgICAgICAgICAgIGNvbnN0IFNvbWVEZXNjcmlwdG9yKiBkZXNj
cmlwdG9yKSB7Ci0gICAgaWYgKGFubm90YXRpb25fY29sbGVjdG9yXyA9PSBOVUxMKSB7Ci0gICAg
ICAvLyBBbm5vdGF0aW9ucyBhcmVuJ3QgdHVybmVkIG9uIGZvciB0aGlzIFByaW50ZXIsIHNvIGRv
bid0IHBheSB0aGUgY29zdAotICAgICAgLy8gb2YgYnVpbGRpbmcgdGhlIGxvY2F0aW9uIHBhdGgu
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHZlY3RvcjxpbnQ+IHBhdGg7Ci0gICAgZGVzY3Jp
cHRvci0+R2V0TG9jYXRpb25QYXRoKCZwYXRoKTsKLSAgICBBbm5vdGF0ZShiZWdpbl92YXJuYW1l
LCBlbmRfdmFybmFtZSwgZGVzY3JpcHRvci0+ZmlsZSgpLT5uYW1lKCksIHBhdGgpOwotICB9Ci0K
LSAgLy8gUHJpbnQgc29tZSB0ZXh0IGFmdGVyIGFwcGx5aW5nIHZhcmlhYmxlIHN1YnN0aXR1dGlv
bnMuICBJZiBhIHBhcnRpY3VsYXIKLSAgLy8gdmFyaWFibGUgaW4gdGhlIHRleHQgaXMgbm90IGRl
ZmluZWQsIHRoaXMgd2lsbCBjcmFzaC4gIFZhcmlhYmxlcyB0byBiZQotICAvLyBzdWJzdGl0dXRl
ZCBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBuYW1lcyBzdXJyb3VuZGVkIGJ5IGRlbGltaXRlcgot
ICAvLyBjaGFyYWN0ZXJzIChhcyBnaXZlbiB0byB0aGUgY29uc3RydWN0b3IpLiAgVGhlIHZhcmlh
YmxlIGJpbmRpbmdzIGFyZQotICAvLyBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBtYXAuCi0gIHZvaWQg
UHJpbnQoY29uc3QgbWFwPHN0cmluZywgc3RyaW5nPiYgdmFyaWFibGVzLCBjb25zdCBjaGFyKiB0
ZXh0KTsKLQotICAvLyBMaWtlIHRoZSBmaXJzdCBQcmludCgpLCBleGNlcHQgdGhlIHN1YnN0aXR1
dGlvbnMgYXJlIGdpdmVuIGFzIHBhcmFtZXRlcnMuCi0gIHZvaWQgUHJpbnQoY29uc3QgY2hhciog
dGV4dCk7Ci0gIC8vIExpa2UgdGhlIGZpcnN0IFByaW50KCksIGV4Y2VwdCB0aGUgc3Vic3RpdHV0
aW9ucyBhcmUgZ2l2ZW4gYXMgcGFyYW1ldGVycy4KLSAgdm9pZCBQcmludChjb25zdCBjaGFyKiB0
ZXh0LCBjb25zdCBjaGFyKiB2YXJpYWJsZSwgY29uc3Qgc3RyaW5nJiB2YWx1ZSk7Ci0gIC8vIExp
a2UgdGhlIGZpcnN0IFByaW50KCksIGV4Y2VwdCB0aGUgc3Vic3RpdHV0aW9ucyBhcmUgZ2l2ZW4g
YXMgcGFyYW1ldGVycy4KLSAgdm9pZCBQcmludChjb25zdCBjaGFyKiB0ZXh0LCBjb25zdCBjaGFy
KiB2YXJpYWJsZTEsIGNvbnN0IHN0cmluZyYgdmFsdWUxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMiwgY29uc3Qgc3RyaW5nJiB2YWx1ZTIpOwot
ICAvLyBMaWtlIHRoZSBmaXJzdCBQcmludCgpLCBleGNlcHQgdGhlIHN1YnN0aXR1dGlvbnMgYXJl
IGdpdmVuIGFzIHBhcmFtZXRlcnMuCi0gIHZvaWQgUHJpbnQoY29uc3QgY2hhciogdGV4dCwgY29u
c3QgY2hhciogdmFyaWFibGUxLCBjb25zdCBzdHJpbmcmIHZhbHVlMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YXJpYWJsZTIsIGNvbnN0IHN0cmluZyYgdmFs
dWUyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxl
MywgY29uc3Qgc3RyaW5nJiB2YWx1ZTMpOwotICAvLyBMaWtlIHRoZSBmaXJzdCBQcmludCgpLCBl
eGNlcHQgdGhlIHN1YnN0aXR1dGlvbnMgYXJlIGdpdmVuIGFzIHBhcmFtZXRlcnMuCi0gIHZvaWQg
UHJpbnQoY29uc3QgY2hhciogdGV4dCwgY29uc3QgY2hhciogdmFyaWFibGUxLCBjb25zdCBzdHJp
bmcmIHZhbHVlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2
YXJpYWJsZTIsIGNvbnN0IHN0cmluZyYgdmFsdWUyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMywgY29uc3Qgc3RyaW5nJiB2YWx1ZTMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyaWFibGU0LCBjb25zdCBz
dHJpbmcmIHZhbHVlNCk7Ci0gIC8vIExpa2UgdGhlIGZpcnN0IFByaW50KCksIGV4Y2VwdCB0aGUg
c3Vic3RpdHV0aW9ucyBhcmUgZ2l2ZW4gYXMgcGFyYW1ldGVycy4KLSAgdm9pZCBQcmludChjb25z
dCBjaGFyKiB0ZXh0LCBjb25zdCBjaGFyKiB2YXJpYWJsZTEsIGNvbnN0IHN0cmluZyYgdmFsdWUx
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMiwg
Y29uc3Qgc3RyaW5nJiB2YWx1ZTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogdmFyaWFibGUzLCBjb25zdCBzdHJpbmcmIHZhbHVlMywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YXJpYWJsZTQsIGNvbnN0IHN0cmluZyYgdmFs
dWU0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxl
NSwgY29uc3Qgc3RyaW5nJiB2YWx1ZTUpOwotICAvLyBMaWtlIHRoZSBmaXJzdCBQcmludCgpLCBl
eGNlcHQgdGhlIHN1YnN0aXR1dGlvbnMgYXJlIGdpdmVuIGFzIHBhcmFtZXRlcnMuCi0gIHZvaWQg
UHJpbnQoY29uc3QgY2hhciogdGV4dCwgY29uc3QgY2hhciogdmFyaWFibGUxLCBjb25zdCBzdHJp
bmcmIHZhbHVlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2
YXJpYWJsZTIsIGNvbnN0IHN0cmluZyYgdmFsdWUyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMywgY29uc3Qgc3RyaW5nJiB2YWx1ZTMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyaWFibGU0LCBjb25zdCBz
dHJpbmcmIHZhbHVlNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiB2YXJpYWJsZTUsIGNvbnN0IHN0cmluZyYgdmFsdWU1LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNiwgY29uc3Qgc3RyaW5nJiB2YWx1ZTYpOwot
ICAvLyBMaWtlIHRoZSBmaXJzdCBQcmludCgpLCBleGNlcHQgdGhlIHN1YnN0aXR1dGlvbnMgYXJl
IGdpdmVuIGFzIHBhcmFtZXRlcnMuCi0gIHZvaWQgUHJpbnQoY29uc3QgY2hhciogdGV4dCwgY29u
c3QgY2hhciogdmFyaWFibGUxLCBjb25zdCBzdHJpbmcmIHZhbHVlMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YXJpYWJsZTIsIGNvbnN0IHN0cmluZyYgdmFs
dWUyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxl
MywgY29uc3Qgc3RyaW5nJiB2YWx1ZTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogdmFyaWFibGU0LCBjb25zdCBzdHJpbmcmIHZhbHVlNCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YXJpYWJsZTUsIGNvbnN0IHN0cmluZyYg
dmFsdWU1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlh
YmxlNiwgY29uc3Qgc3RyaW5nJiB2YWx1ZTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogdmFyaWFibGU3LCBjb25zdCBzdHJpbmcmIHZhbHVlNyk7Ci0gIC8vIExp
a2UgdGhlIGZpcnN0IFByaW50KCksIGV4Y2VwdCB0aGUgc3Vic3RpdHV0aW9ucyBhcmUgZ2l2ZW4g
YXMgcGFyYW1ldGVycy4KLSAgdm9pZCBQcmludChjb25zdCBjaGFyKiB0ZXh0LCBjb25zdCBjaGFy
KiB2YXJpYWJsZTEsIGNvbnN0IHN0cmluZyYgdmFsdWUxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlMiwgY29uc3Qgc3RyaW5nJiB2YWx1ZTIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyaWFibGUzLCBjb25z
dCBzdHJpbmcmIHZhbHVlMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiB2YXJpYWJsZTQsIGNvbnN0IHN0cmluZyYgdmFsdWU0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlNSwgY29uc3Qgc3RyaW5nJiB2YWx1ZTUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyaWFibGU2LCBj
b25zdCBzdHJpbmcmIHZhbHVlNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiB2YXJpYWJsZTcsIGNvbnN0IHN0cmluZyYgdmFsdWU3LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmlhYmxlOCwgY29uc3Qgc3RyaW5nJiB2YWx1
ZTgpOwotCi0gIC8vIEluZGVudCB0ZXh0IGJ5IHR3byBzcGFjZXMuICBBZnRlciBjYWxsaW5nIElu
ZGVudCgpLCB0d28gc3BhY2VzIHdpbGwgYmUKLSAgLy8gaW5zZXJ0ZWQgYXQgdGhlIGJlZ2lubmlu
ZyBvZiBlYWNoIGxpbmUgb2YgdGV4dC4gIEluZGVudCgpIG1heSBiZSBjYWxsZWQKLSAgLy8gbXVs
dGlwbGUgdGltZXMgdG8gcHJvZHVjZSBkZWVwZXIgaW5kZW50cy4KLSAgdm9pZCBJbmRlbnQoKTsK
LQotICAvLyBSZWR1Y2VzIHRoZSBjdXJyZW50IGluZGVudCBsZXZlbCBieSB0d28gc3BhY2VzLCBv
ciBjcmFzaGVzIGlmIHRoZSBpbmRlbnQKLSAgLy8gbGV2ZWwgaXMgemVyby4KLSAgdm9pZCBPdXRk
ZW50KCk7Ci0KLSAgLy8gV3JpdGUgYSBzdHJpbmcgdG8gdGhlIG91dHB1dCBidWZmZXIuCi0gIC8v
IFRoaXMgbWV0aG9kIGRvZXMgbm90IGxvb2sgZm9yIG5ld2xpbmVzIHRvIGFkZCBpbmRlbnRhdGlv
bi4KLSAgdm9pZCBQcmludFJhdyhjb25zdCBzdHJpbmcmIGRhdGEpOwotCi0gIC8vIFdyaXRlIGEg
emVyby1kZWxpbWl0ZWQgc3RyaW5nIHRvIG91dHB1dCBidWZmZXIuCi0gIC8vIFRoaXMgbWV0aG9k
IGRvZXMgbm90IGxvb2sgZm9yIG5ld2xpbmVzIHRvIGFkZCBpbmRlbnRhdGlvbi4KLSAgdm9pZCBQ
cmludFJhdyhjb25zdCBjaGFyKiBkYXRhKTsKLQotICAvLyBXcml0ZSBzb21lIGJ5dGVzIHRvIHRo
ZSBvdXRwdXQgYnVmZmVyLgotICAvLyBUaGlzIG1ldGhvZCBkb2VzIG5vdCBsb29rIGZvciBuZXds
aW5lcyB0byBhZGQgaW5kZW50YXRpb24uCi0gIHZvaWQgV3JpdGVSYXcoY29uc3QgY2hhciogZGF0
YSwgaW50IHNpemUpOwotCi0gIC8vIFRydWUgaWYgYW55IHdyaXRlIHRvIHRoZSB1bmRlcmx5aW5n
IHN0cmVhbSBmYWlsZWQuICAoV2UgZG9uJ3QganVzdAotICAvLyBjcmFzaCBpbiB0aGlzIGNhc2Ug
YmVjYXVzZSB0aGlzIGlzIGFuIEkvTyBmYWlsdXJlLCBub3QgYSBwcm9ncmFtbWluZwotICAvLyBl
cnJvci4pCi0gIGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gZmFpbGVkXzsgfQotCi0gcHJp
dmF0ZToKLSAgLy8gTGluayB0aGUgb3V0cHV0IHJhbmdlIGRlZmluZWQgYnkgdGhlIHN1YnN0aXR1
dGlvbiB2YXJpYWJsZXMgYXMgZW1pdHRlZCBieQotICAvLyB0aGUgbGFzdCBjYWxsIHRvIFByaW50
IHRvIHRoZSBvYmplY3QgZm91bmQgYXQgdGhlIFNvdXJjZUNvZGVJbmZvLXN0eWxlIHBhdGgKLSAg
Ly8gaW4gYSBmaWxlIHdpdGggcGF0aCBmaWxlX3BhdGguIFRoZSByYW5nZSBiZWdpbnMgYXQgdGhl
IHN0YXJ0IG9mCi0gIC8vIGJlZ2luX3Zhcm5hbWUncyB2YWx1ZSBhbmQgZW5kcyBhZnRlciB0aGUg
bGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHZhbHVlCi0gIC8vIHN1YnN0aXR1dGVkIGZvciBlbmRfdmFy
bmFtZS4gTm90ZSB0aGF0IGJlZ2luX3Zhcm5hbWUgYW5kIGVuZF92YXJuYW1lCi0gIC8vIG1heSBy
ZWZlciB0byB0aGUgc2FtZSB2YXJpYWJsZS4KLSAgdm9pZCBBbm5vdGF0ZShjb25zdCBjaGFyKiBi
ZWdpbl92YXJuYW1lLCBjb25zdCBjaGFyKiBlbmRfdmFybmFtZSwKLSAgICAgICAgICAgICAgICBj
b25zdCBzdHJpbmcmIGZpbGVfcGF0aCwgY29uc3QgdmVjdG9yPGludD4mIHBhdGgpOwotCi0gIGNv
bnN0IGNoYXIgdmFyaWFibGVfZGVsaW1pdGVyXzsKLQotICBaZXJvQ29weU91dHB1dFN0cmVhbSog
Y29uc3Qgb3V0cHV0XzsKLSAgY2hhciogYnVmZmVyXzsKLSAgaW50IGJ1ZmZlcl9zaXplXzsKLSAg
Ly8gVGhlIGN1cnJlbnQgcG9zaXRpb24sIGluIGJ5dGVzLCBpbiB0aGUgb3V0cHV0IHN0cmVhbS4g
IFRoaXMgaXMgZXF1aXZhbGVudAotICAvLyB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRo
YXQgaGF2ZSBiZWVuIHdyaXR0ZW4gc28gZmFyLiAgVGhpcyB2YWx1ZSBpcwotICAvLyB1c2VkIHRv
IGNhbGN1bGF0ZSBhbm5vdGF0aW9uIHJhbmdlcyBpbiB0aGUgc3Vic3RpdHV0aW9uc18gbWFwIGJl
bG93LgotICBzaXplX3Qgb2Zmc2V0XzsKLQotICBzdHJpbmcgaW5kZW50XzsKLSAgYm9vbCBhdF9z
dGFydF9vZl9saW5lXzsKLSAgYm9vbCBmYWlsZWRfOwotCi0gIC8vIEEgbWFwIGZyb20gdmFyaWFi
bGUgbmFtZSB0byBbc3RhcnQsIGVuZCkgb2Zmc2V0cyBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4KLSAg
Ly8gVGhlc2UgcmVmZXIgdG8gdGhlIG9mZnNldHMgdXNlZCBmb3IgYSB2YXJpYWJsZSBhZnRlciB0
aGUgbGFzdCBjYWxsIHRvCi0gIC8vIFByaW50LiAgSWYgYSB2YXJpYWJsZSB3YXMgdXNlZCBtb3Jl
IHRoYW4gb25jZSwgdGhlIGVudHJ5IHVzZWQgaW4KLSAgLy8gdGhpcyBtYXAgaXMgc2V0IHRvIGEg
bmVnYXRpdmUtbGVuZ3RoIHNwYW4uICBGb3Igc2luZ2x5LXVzZWQgdmFyaWFibGVzLCB0aGUKLSAg
Ly8gc3RhcnQgb2Zmc2V0IGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN1YnN0aXR1dGlvbjsgdGhl
IGVuZCBvZmZzZXQgaXMgdGhlCi0gIC8vIGxhc3QgYnl0ZSBvZiB0aGUgc3Vic3RpdHV0aW9uIHBs
dXMgb25lIChzdWNoIHRoYXQgKGVuZCAtIHN0YXJ0KSBpcyB0aGUKLSAgLy8gbGVuZ3RoIG9mIHRo
ZSBzdWJzdGl0dXRlZCBzdHJpbmcpLgotICBtYXA8c3RyaW5nLCBwYWlyPHNpemVfdCwgc2l6ZV90
PiA+IHN1YnN0aXR1dGlvbnNfOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBhbmQgc2V0cyByYW5nZSB0
byB0aGUgc3Vic3RpdHV0aW9uIHJhbmdlIGluIHRoZSBvdXRwdXQgZm9yCi0gIC8vIHZhcm5hbWUg
aWYgdmFybmFtZSB3YXMgdXNlZCBvbmNlIGluIHRoZSBsYXN0IGNhbGwgdG8gUHJpbnQuIElmIHZh
cm5hbWUKLSAgLy8gd2FzIG5vdCB1c2VkLCBvciBpZiBpdCB3YXMgdXNlZCBtdWx0aXBsZSB0aW1l
cywgcmV0dXJucyBmYWxzZSAoYW5kCi0gIC8vIGZhaWxzIGEgZGVidWcgYXNzZXJ0aW9uKS4KLSAg
Ym9vbCBHZXRTdWJzdGl0dXRpb25SYW5nZShjb25zdCBjaGFyKiB2YXJuYW1lLCBwYWlyPHNpemVf
dCwgc2l6ZV90PiogcmFuZ2UpOwotCi0gIC8vIElmIG5vbi1udWxsLCBhbm5vdGF0aW9uX2NvbGxl
Y3Rvcl8gaXMgdXNlZCB0byBzdG9yZSBhbm5vdGF0aW9ucyBhYm91dAotICAvLyBnZW5lcmF0ZWQg
Y29kZS4KLSAgQW5ub3RhdGlvbkNvbGxlY3RvciogY29uc3QgYW5ub3RhdGlvbl9jb2xsZWN0b3Jf
OwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhQcmludGVyKTsKLX07Ci0K
LX0gIC8vIG5hbWVzcGFjZSBpbwotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0lPX1BSSU5URVJfSF9f
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlcl91bml0dGVzdC5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9pby9wcmludGVyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5NWYzYWZhMjE4MmUwYmYxMGM3NDdjNzZjYTcxOWFiOTBlNDQxMzI2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9pby9wcmludGVyX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTIz
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6
IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwg
UHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVh
biwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9pby9wcmludGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9f
Y29weV9zdHJlYW1faW1wbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9y
LnBiLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0Lmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGlv
IHsKLW5hbWVzcGFjZSB7Ci0KLS8vIEVhY2ggdGVzdCByZXBlYXRzIG92ZXIgc2V2ZXJhbCBibG9j
ayBzaXplcyBpbiBvcmRlciB0byB0ZXN0IGJvdGggY2FzZXMKLS8vIHdoZXJlIHBhcnRpY3VsYXIg
d3JpdGVzIGNyb3NzIGEgYnVmZmVyIGJvdW5kYXJ5IGFuZCBjYXNlcyB3aGVyZSB0aGV5IGRvCi0v
LyBub3QuCi0KLVRFU1QoUHJpbnRlciwgRW1wdHlQcmludGVyKSB7Ci0gIGNoYXIgYnVmZmVyWzgx
OTJdOwotICBjb25zdCBpbnQgYmxvY2tfc2l6ZSA9IDEwMDsKLSAgQXJyYXlPdXRwdXRTdHJlYW0g
b3V0cHV0KGJ1ZmZlciwgR09PR0xFX0FSUkFZU0laRShidWZmZXIpLCBibG9ja19zaXplKTsKLSAg
UHJpbnRlciBwcmludGVyKCZvdXRwdXQsICdcMCcpOwotICBFWFBFQ1RfVFJVRSghcHJpbnRlci5m
YWlsZWQoKSk7Ci19Ci0KLVRFU1QoUHJpbnRlciwgQmFzaWNQcmludGluZykgewotICBjaGFyIGJ1
ZmZlcls4MTkyXTsKLQotICBmb3IgKGludCBibG9ja19zaXplID0gMTsgYmxvY2tfc2l6ZSA8IDUx
MjsgYmxvY2tfc2l6ZSAqPSAyKSB7Ci0gICAgQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0KGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlciksIGJsb2NrX3NpemUpOwotCi0gICAgewotICAgICAgUHJpbnRlciBw
cmludGVyKCZvdXRwdXQsICdcMCcpOwotCi0gICAgICBwcmludGVyLlByaW50KCJIZWxsbyBXb3Js
ZCEiKTsKLSAgICAgIHByaW50ZXIuUHJpbnQoIiAgVGhpcyBpcyB0aGUgc2FtZSBsaW5lLlxuIik7
Ci0gICAgICBwcmludGVyLlByaW50KCJCdXQgdGhpcyBpcyBhIG5ldyBvbmUuXG5BbmQgdGhpcyBp
cyBhbm90aGVyIG9uZS4iKTsKLQotICAgICAgRVhQRUNUX0ZBTFNFKHByaW50ZXIuZmFpbGVkKCkp
OwotICAgIH0KLQotICAgIGJ1ZmZlcltvdXRwdXQuQnl0ZUNvdW50KCldID0gJ1wwJzsKLQotICAg
IEVYUEVDVF9TVFJFUSgiSGVsbG8gV29ybGQhICBUaGlzIGlzIHRoZSBzYW1lIGxpbmUuXG4iCi0g
ICAgICAgICAgICAgICAgICJCdXQgdGhpcyBpcyBhIG5ldyBvbmUuXG4iCi0gICAgICAgICAgICAg
ICAgICJBbmQgdGhpcyBpcyBhbm90aGVyIG9uZS4iLAotICAgICAgICAgICAgICAgICBidWZmZXIp
OwotICB9Ci19Ci0KLVRFU1QoUHJpbnRlciwgV3JpdGVSYXcpIHsKLSAgY2hhciBidWZmZXJbODE5
Ml07Ci0KLSAgZm9yIChpbnQgYmxvY2tfc2l6ZSA9IDE7IGJsb2NrX3NpemUgPCA1MTI7IGJsb2Nr
X3NpemUgKj0gMikgewotICAgIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIsIHNpemVv
ZihidWZmZXIpLCBibG9ja19zaXplKTsKLQotICAgIHsKLSAgICAgIHN0cmluZyBzdHJpbmdfb2Jq
ID0gIkZyb20gYW4gb2JqZWN0XG4iOwotICAgICAgUHJpbnRlciBwcmludGVyKCZvdXRwdXQsICck
Jyk7Ci0gICAgICBwcmludGVyLldyaXRlUmF3KCJIZWxsbyBXb3JsZCEiLCAxMik7Ci0gICAgICBw
cmludGVyLlByaW50UmF3KCIgIFRoaXMgaXMgdGhlIHNhbWUgbGluZS5cbiIpOwotICAgICAgcHJp
bnRlci5QcmludFJhdygiQnV0IHRoaXMgaXMgYSBuZXcgb25lLlxuQW5kIHRoaXMgaXMgYW5vdGhl
ciBvbmUuIik7Ci0gICAgICBwcmludGVyLldyaXRlUmF3KCJcbiIsIDEpOwotICAgICAgcHJpbnRl
ci5QcmludFJhdyhzdHJpbmdfb2JqKTsKLSAgICAgIEVYUEVDVF9GQUxTRShwcmludGVyLmZhaWxl
ZCgpKTsKLSAgICB9Ci0KLSAgICBidWZmZXJbb3V0cHV0LkJ5dGVDb3VudCgpXSA9ICdcMCc7Ci0K
LSAgICBFWFBFQ1RfU1RSRVEoIkhlbGxvIFdvcmxkISAgVGhpcyBpcyB0aGUgc2FtZSBsaW5lLlxu
IgotICAgICAgICAgICAgICAgICAiQnV0IHRoaXMgaXMgYSBuZXcgb25lLlxuIgotICAgICAgICAg
ICAgICAgICAiQW5kIHRoaXMgaXMgYW5vdGhlciBvbmUuIgotICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICJGcm9tIGFuIG9iamVjdFxuIiwKLSAgICAgICAgICAgICAgICAg
YnVmZmVyKTsKLSAgfQotfQotCi1URVNUKFByaW50ZXIsIFZhcmlhYmxlU3Vic3RpdHV0aW9uKSB7
Ci0gIGNoYXIgYnVmZmVyWzgxOTJdOwotCi0gIGZvciAoaW50IGJsb2NrX3NpemUgPSAxOyBibG9j
a19zaXplIDwgNTEyOyBibG9ja19zaXplICo9IDIpIHsKLSAgICBBcnJheU91dHB1dFN0cmVhbSBv
dXRwdXQoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgYmxvY2tfc2l6ZSk7Ci0KLSAgICB7Ci0gICAg
ICBQcmludGVyIHByaW50ZXIoJm91dHB1dCwgJyQnKTsKLSAgICAgIG1hcDxzdHJpbmcsIHN0cmlu
Zz4gdmFyczsKLQotICAgICAgdmFyc1siZm9vIl0gPSAiV29ybGQiOwotICAgICAgdmFyc1siYmFy
Il0gPSAiJGZvbyQiOwotICAgICAgdmFyc1siYWJjZGVmZyJdID0gIjEyMzQiOwotCi0gICAgICBw
cmludGVyLlByaW50KHZhcnMsICJIZWxsbyAkZm9vJCFcbmJhciA9ICRiYXIkXG4iKTsKLSAgICAg
IHByaW50ZXIuUHJpbnRSYXcoIlJhd0JpdFxuIik7Ci0gICAgICBwcmludGVyLlByaW50KHZhcnMs
ICIkYWJjZGVmZyRcbkEgbGl0ZXJhbCBkb2xsYXIgc2lnbjogICQkIik7Ci0KLSAgICAgIHZhcnNb
ImZvbyJdID0gImJsYWgiOwotICAgICAgcHJpbnRlci5QcmludCh2YXJzLCAiXG5Ob3cgZm9vID0g
JGZvbyQuIik7Ci0KLSAgICAgIEVYUEVDVF9GQUxTRShwcmludGVyLmZhaWxlZCgpKTsKLSAgICB9
Ci0KLSAgICBidWZmZXJbb3V0cHV0LkJ5dGVDb3VudCgpXSA9ICdcMCc7Ci0KLSAgICBFWFBFQ1Rf
U1RSRVEoIkhlbGxvIFdvcmxkIVxuIgotICAgICAgICAgICAgICAgICAiYmFyID0gJGZvbyRcbiIK
LSAgICAgICAgICAgICAgICAgIlJhd0JpdFxuIgotICAgICAgICAgICAgICAgICAiMTIzNFxuIgot
ICAgICAgICAgICAgICAgICAiQSBsaXRlcmFsIGRvbGxhciBzaWduOiAgJFxuIgotICAgICAgICAg
ICAgICAgICAiTm93IGZvbyA9IGJsYWguIiwKLSAgICAgICAgICAgICAgICAgYnVmZmVyKTsKLSAg
fQotfQotCi1URVNUKFByaW50ZXIsIElubGluZVZhcmlhYmxlU3Vic3RpdHV0aW9uKSB7Ci0gIGNo
YXIgYnVmZmVyWzgxOTJdOwotCi0gIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIsIHNp
emVvZihidWZmZXIpKTsKLQotICB7Ci0gICAgUHJpbnRlciBwcmludGVyKCZvdXRwdXQsICckJyk7
Ci0gICAgcHJpbnRlci5QcmludCgiSGVsbG8gJGZvbyQhXG4iLCAiZm9vIiwgIldvcmxkIik7Ci0g
ICAgcHJpbnRlci5QcmludFJhdygiUmF3Qml0XG4iKTsKLSAgICBwcmludGVyLlByaW50KCIkZm9v
JCAkYmFyJFxuIiwgImZvbyIsICJvbmUiLCAiYmFyIiwgInR3byIpOwotICAgIEVYUEVDVF9GQUxT
RShwcmludGVyLmZhaWxlZCgpKTsKLSAgfQotCi0gIGJ1ZmZlcltvdXRwdXQuQnl0ZUNvdW50KCld
ID0gJ1wwJzsKLQotICBFWFBFQ1RfU1RSRVEoIkhlbGxvIFdvcmxkIVxuIgotICAgICAgICAgICAg
ICAgIlJhd0JpdFxuIgotICAgICAgICAgICAgICAgIm9uZSB0d29cbiIsCi0gICAgICAgICAgICAg
ICBidWZmZXIpOwotfQotCi0vLyBNb2NrRGVzY3JpcHRvckZpbGUgZGVmaW5lcyBvbmx5IHRob3Nl
IG1lbWJlcnMgdGhhdCBQcmludGVyIHVzZXMgdG8gd3JpdGUgb3V0Ci0vLyBhbm5vdGF0aW9ucy4K
LWNsYXNzIE1vY2tEZXNjcmlwdG9yRmlsZSB7Ci0gcHVibGljOgotICBleHBsaWNpdCBNb2NrRGVz
Y3JpcHRvckZpbGUoY29uc3Qgc3RyaW5nJiBmaWxlKSA6IGZpbGVfKGZpbGUpIHt9Ci0KLSAgLy8g
VGhlIG1vY2sgZmlsZW5hbWUgZm9yIHRoaXMgZmlsZS4KLSAgY29uc3Qgc3RyaW5nJiBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gZmlsZV87IH0KLQotIHByaXZhdGU6Ci0gIHN0cmluZyBmaWxlXzsKLX07
Ci0KLS8vIE1vY2tEZXNjcmlwdG9yIGRlZmluZXMgb25seSB0aG9zZSBtZW1iZXJzIHRoYXQgUHJp
bnRlciB1c2VzIHRvIHdyaXRlIG91dAotLy8gYW5ub3RhdGlvbnMuCi1jbGFzcyBNb2NrRGVzY3Jp
cHRvciB7Ci0gcHVibGljOgotICBNb2NrRGVzY3JpcHRvcihjb25zdCBzdHJpbmcmIGZpbGUsIGNv
bnN0IHZlY3RvcjxpbnQ+JiBwYXRoKQotICAgICAgOiBmaWxlXyhmaWxlKSwgcGF0aF8ocGF0aCkg
e30KLQotICAvLyBUaGUgbW9jayBmaWxlIGluIHdoaWNoIHRoaXMgZGVzY3JpcHRvciB3YXMgZGVm
aW5lZC4KLSAgY29uc3QgTW9ja0Rlc2NyaXB0b3JGaWxlKiBmaWxlKCkgY29uc3QgeyByZXR1cm4g
JmZpbGVfOyB9Ci0KLSBwcml2YXRlOgotICAvLyBBbGxvd3MgYWNjZXNzIHRvIEdldExvY2F0aW9u
UGF0aC4KLSAgZnJpZW5kIGNsYXNzIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OlByaW50ZXI7Ci0K
LSAgLy8gQ29waWVzIHRoZSBwcmUtc3RvcmVkIHBhdGggdG8gb3V0cHV0LgotICB2b2lkIEdldExv
Y2F0aW9uUGF0aChzdGQ6OnZlY3RvcjxpbnQ+KiBvdXRwdXQpIGNvbnN0IHsgKm91dHB1dCA9IHBh
dGhfOyB9Ci0KLSAgTW9ja0Rlc2NyaXB0b3JGaWxlIGZpbGVfOwotICB2ZWN0b3I8aW50PiBwYXRo
XzsKLX07Ci0KLVRFU1QoUHJpbnRlciwgQW5ub3RhdGVNYXApIHsKLSAgY2hhciBidWZmZXJbODE5
Ml07Ci0gIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIsIHNpemVvZihidWZmZXIpKTsK
LSAgR2VuZXJhdGVkQ29kZUluZm8gaW5mbzsKLSAgQW5ub3RhdGlvblByb3RvQ29sbGVjdG9yPEdl
bmVyYXRlZENvZGVJbmZvPiBpbmZvX2NvbGxlY3RvcigmaW5mbyk7Ci0gIHsKLSAgICBQcmludGVy
IHByaW50ZXIoJm91dHB1dCwgJyQnLCAmaW5mb19jb2xsZWN0b3IpOwotICAgIG1hcDxzdHJpbmcs
IHN0cmluZz4gdmFyczsKLSAgICB2YXJzWyJmb28iXSA9ICIzIjsKLSAgICB2YXJzWyJiYXIiXSA9
ICI1IjsKLSAgICBwcmludGVyLlByaW50KHZhcnMsICIwMTIkZm9vJDQkYmFyJFxuIik7Ci0gICAg
dmVjdG9yPGludD4gcGF0aF8xOwotICAgIHBhdGhfMS5wdXNoX2JhY2soMzMpOwotICAgIHZlY3Rv
cjxpbnQ+IHBhdGhfMjsKLSAgICBwYXRoXzIucHVzaF9iYWNrKDExKTsKLSAgICBwYXRoXzIucHVz
aF9iYWNrKDIyKTsKLSAgICBNb2NrRGVzY3JpcHRvciBkZXNjcmlwdG9yXzEoInBhdGhfMSIsIHBh
dGhfMSk7Ci0gICAgTW9ja0Rlc2NyaXB0b3IgZGVzY3JpcHRvcl8yKCJwYXRoXzIiLCBwYXRoXzIp
OwotICAgIHByaW50ZXIuQW5ub3RhdGUoImZvbyIsICJmb28iLCAmZGVzY3JpcHRvcl8xKTsKLSAg
ICBwcmludGVyLkFubm90YXRlKCJiYXIiLCAiYmFyIiwgJmRlc2NyaXB0b3JfMik7Ci0gIH0KLSAg
YnVmZmVyW291dHB1dC5CeXRlQ291bnQoKV0gPSAnXDAnOwotICBFWFBFQ1RfU1RSRVEoIjAxMjM0
NVxuIiwgYnVmZmVyKTsKLSAgQVNTRVJUX0VRKDIsIGluZm8uYW5ub3RhdGlvbl9zaXplKCkpOwot
ICBjb25zdCBHZW5lcmF0ZWRDb2RlSW5mbzo6QW5ub3RhdGlvbiogZm9vID0gaW5mby5hbm5vdGF0
aW9uKDApLnBhdGhfc2l6ZSgpID09IDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/ICZpbmZvLmFubm90YXRpb24oMCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICZpbmZvLmFubm90YXRpb24oMSk7Ci0g
IGNvbnN0IEdlbmVyYXRlZENvZGVJbmZvOjpBbm5vdGF0aW9uKiBiYXIgPSBpbmZvLmFubm90YXRp
b24oMCkucGF0aF9zaXplKCkgPT0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID8gJmluZm8uYW5ub3RhdGlvbigxKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJmluZm8uYW5ub3RhdGlvbigwKTsKLSAg
QVNTRVJUX0VRKDEsIGZvby0+cGF0aF9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgYmFyLT5wYXRo
X3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgzMywgZm9vLT5wYXRoKDApKTsKLSAgRVhQRUNUX0VRKDEx
LCBiYXItPnBhdGgoMCkpOwotICBFWFBFQ1RfRVEoMjIsIGJhci0+cGF0aCgxKSk7Ci0gIEVYUEVD
VF9FUSgicGF0aF8xIiwgZm9vLT5zb3VyY2VfZmlsZSgpKTsKLSAgRVhQRUNUX0VRKCJwYXRoXzIi
LCBiYXItPnNvdXJjZV9maWxlKCkpOwotICBFWFBFQ1RfRVEoMywgZm9vLT5iZWdpbigpKTsKLSAg
RVhQRUNUX0VRKDQsIGZvby0+ZW5kKCkpOwotICBFWFBFQ1RfRVEoNSwgYmFyLT5iZWdpbigpKTsK
LSAgRVhQRUNUX0VRKDYsIGJhci0+ZW5kKCkpOwotfQotCi1URVNUKFByaW50ZXIsIEFubm90YXRl
SW5saW5lKSB7Ci0gIGNoYXIgYnVmZmVyWzgxOTJdOwotICBBcnJheU91dHB1dFN0cmVhbSBvdXRw
dXQoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gIEdlbmVyYXRlZENvZGVJbmZvIGluZm87Ci0g
IEFubm90YXRpb25Qcm90b0NvbGxlY3RvcjxHZW5lcmF0ZWRDb2RlSW5mbz4gaW5mb19jb2xsZWN0
b3IoJmluZm8pOwotICB7Ci0gICAgUHJpbnRlciBwcmludGVyKCZvdXRwdXQsICckJywgJmluZm9f
Y29sbGVjdG9yKTsKLSAgICBwcmludGVyLlByaW50KCIwMTIkZm9vJDQkYmFyJFxuIiwgImZvbyIs
ICIzIiwgImJhciIsICI1Iik7Ci0gICAgdmVjdG9yPGludD4gcGF0aF8xOwotICAgIHBhdGhfMS5w
dXNoX2JhY2soMzMpOwotICAgIHZlY3RvcjxpbnQ+IHBhdGhfMjsKLSAgICBwYXRoXzIucHVzaF9i
YWNrKDExKTsKLSAgICBwYXRoXzIucHVzaF9iYWNrKDIyKTsKLSAgICBNb2NrRGVzY3JpcHRvciBk
ZXNjcmlwdG9yXzEoInBhdGhfMSIsIHBhdGhfMSk7Ci0gICAgTW9ja0Rlc2NyaXB0b3IgZGVzY3Jp
cHRvcl8yKCJwYXRoXzIiLCBwYXRoXzIpOwotICAgIHByaW50ZXIuQW5ub3RhdGUoImZvbyIsICJm
b28iLCAmZGVzY3JpcHRvcl8xKTsKLSAgICBwcmludGVyLkFubm90YXRlKCJiYXIiLCAiYmFyIiwg
JmRlc2NyaXB0b3JfMik7Ci0gIH0KLSAgYnVmZmVyW291dHB1dC5CeXRlQ291bnQoKV0gPSAnXDAn
OwotICBFWFBFQ1RfU1RSRVEoIjAxMjM0NVxuIiwgYnVmZmVyKTsKLSAgQVNTRVJUX0VRKDIsIGlu
Zm8uYW5ub3RhdGlvbl9zaXplKCkpOwotICBjb25zdCBHZW5lcmF0ZWRDb2RlSW5mbzo6QW5ub3Rh
dGlvbiogZm9vID0gaW5mby5hbm5vdGF0aW9uKDApLnBhdGhfc2l6ZSgpID09IDEKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICZpbmZvLmFubm90YXRp
b24oMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
ICZpbmZvLmFubm90YXRpb24oMSk7Ci0gIGNvbnN0IEdlbmVyYXRlZENvZGVJbmZvOjpBbm5vdGF0
aW9uKiBiYXIgPSBpbmZvLmFubm90YXRpb24oMCkucGF0aF9zaXplKCkgPT0gMQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJmluZm8uYW5ub3RhdGlv
bigxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
JmluZm8uYW5ub3RhdGlvbigwKTsKLSAgQVNTRVJUX0VRKDEsIGZvby0+cGF0aF9zaXplKCkpOwot
ICBBU1NFUlRfRVEoMiwgYmFyLT5wYXRoX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgzMywgZm9vLT5w
YXRoKDApKTsKLSAgRVhQRUNUX0VRKDExLCBiYXItPnBhdGgoMCkpOwotICBFWFBFQ1RfRVEoMjIs
IGJhci0+cGF0aCgxKSk7Ci0gIEVYUEVDVF9FUSgicGF0aF8xIiwgZm9vLT5zb3VyY2VfZmlsZSgp
KTsKLSAgRVhQRUNUX0VRKCJwYXRoXzIiLCBiYXItPnNvdXJjZV9maWxlKCkpOwotICBFWFBFQ1Rf
RVEoMywgZm9vLT5iZWdpbigpKTsKLSAgRVhQRUNUX0VRKDQsIGZvby0+ZW5kKCkpOwotICBFWFBF
Q1RfRVEoNSwgYmFyLT5iZWdpbigpKTsKLSAgRVhQRUNUX0VRKDYsIGJhci0+ZW5kKCkpOwotfQot
Ci1URVNUKFByaW50ZXIsIEFubm90YXRlUmFuZ2UpIHsKLSAgY2hhciBidWZmZXJbODE5Ml07Ci0g
IEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgR2Vu
ZXJhdGVkQ29kZUluZm8gaW5mbzsKLSAgQW5ub3RhdGlvblByb3RvQ29sbGVjdG9yPEdlbmVyYXRl
ZENvZGVJbmZvPiBpbmZvX2NvbGxlY3RvcigmaW5mbyk7Ci0gIHsKLSAgICBQcmludGVyIHByaW50
ZXIoJm91dHB1dCwgJyQnLCAmaW5mb19jb2xsZWN0b3IpOwotICAgIHByaW50ZXIuUHJpbnQoIjAx
MiRmb28kNCRiYXIkXG4iLCAiZm9vIiwgIjMiLCAiYmFyIiwgIjUiKTsKLSAgICB2ZWN0b3I8aW50
PiBwYXRoOwotICAgIHBhdGgucHVzaF9iYWNrKDMzKTsKLSAgICBNb2NrRGVzY3JpcHRvciBkZXNj
cmlwdG9yKCJwYXRoIiwgcGF0aCk7Ci0gICAgcHJpbnRlci5Bbm5vdGF0ZSgiZm9vIiwgImJhciIs
ICZkZXNjcmlwdG9yKTsKLSAgfQotICBidWZmZXJbb3V0cHV0LkJ5dGVDb3VudCgpXSA9ICdcMCc7
Ci0gIEVYUEVDVF9TVFJFUSgiMDEyMzQ1XG4iLCBidWZmZXIpOwotICBBU1NFUlRfRVEoMSwgaW5m
by5hbm5vdGF0aW9uX3NpemUoKSk7Ci0gIGNvbnN0IEdlbmVyYXRlZENvZGVJbmZvOjpBbm5vdGF0
aW9uKiBmb29iYXIgPSAmaW5mby5hbm5vdGF0aW9uKDApOwotICBBU1NFUlRfRVEoMSwgZm9vYmFy
LT5wYXRoX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgzMywgZm9vYmFyLT5wYXRoKDApKTsKLSAgRVhQ
RUNUX0VRKCJwYXRoIiwgZm9vYmFyLT5zb3VyY2VfZmlsZSgpKTsKLSAgRVhQRUNUX0VRKDMsIGZv
b2Jhci0+YmVnaW4oKSk7Ci0gIEVYUEVDVF9FUSg2LCBmb29iYXItPmVuZCgpKTsKLX0KLQotVEVT
VChQcmludGVyLCBBbm5vdGF0ZUVtcHR5UmFuZ2UpIHsKLSAgY2hhciBidWZmZXJbODE5Ml07Ci0g
IEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgR2Vu
ZXJhdGVkQ29kZUluZm8gaW5mbzsKLSAgQW5ub3RhdGlvblByb3RvQ29sbGVjdG9yPEdlbmVyYXRl
ZENvZGVJbmZvPiBpbmZvX2NvbGxlY3RvcigmaW5mbyk7Ci0gIHsKLSAgICBQcmludGVyIHByaW50
ZXIoJm91dHB1dCwgJyQnLCAmaW5mb19jb2xsZWN0b3IpOwotICAgIHByaW50ZXIuUHJpbnQoIjAx
MiRmb28kNCRiYXokJGJhbSQkYmFyJFxuIiwgImZvbyIsICIzIiwgImJhciIsICI1IiwgImJheiIs
Ci0gICAgICAgICAgICAgICAgICAiIiwgImJhbSIsICIiKTsKLSAgICB2ZWN0b3I8aW50PiBwYXRo
OwotICAgIHBhdGgucHVzaF9iYWNrKDMzKTsKLSAgICBNb2NrRGVzY3JpcHRvciBkZXNjcmlwdG9y
KCJwYXRoIiwgcGF0aCk7Ci0gICAgcHJpbnRlci5Bbm5vdGF0ZSgiYmF6IiwgImJhbSIsICZkZXNj
cmlwdG9yKTsKLSAgfQotICBidWZmZXJbb3V0cHV0LkJ5dGVDb3VudCgpXSA9ICdcMCc7Ci0gIEVY
UEVDVF9TVFJFUSgiMDEyMzQ1XG4iLCBidWZmZXIpOwotICBBU1NFUlRfRVEoMSwgaW5mby5hbm5v
dGF0aW9uX3NpemUoKSk7Ci0gIGNvbnN0IEdlbmVyYXRlZENvZGVJbmZvOjpBbm5vdGF0aW9uKiBi
YXpiYW0gPSAmaW5mby5hbm5vdGF0aW9uKDApOwotICBBU1NFUlRfRVEoMSwgYmF6YmFtLT5wYXRo
X3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgzMywgYmF6YmFtLT5wYXRoKDApKTsKLSAgRVhQRUNUX0VR
KCJwYXRoIiwgYmF6YmFtLT5zb3VyY2VfZmlsZSgpKTsKLSAgRVhQRUNUX0VRKDUsIGJhemJhbS0+
YmVnaW4oKSk7Ci0gIEVYUEVDVF9FUSg1LCBiYXpiYW0tPmVuZCgpKTsKLX0KLQotVEVTVChQcmlu
dGVyLCBBbm5vdGF0ZURlc3BpdGVVbnJlbGF0ZWRNdWx0aXBsZVVzZXMpIHsKLSAgY2hhciBidWZm
ZXJbODE5Ml07Ci0gIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIsIHNpemVvZihidWZm
ZXIpKTsKLSAgR2VuZXJhdGVkQ29kZUluZm8gaW5mbzsKLSAgQW5ub3RhdGlvblByb3RvQ29sbGVj
dG9yPEdlbmVyYXRlZENvZGVJbmZvPiBpbmZvX2NvbGxlY3RvcigmaW5mbyk7Ci0gIHsKLSAgICBQ
cmludGVyIHByaW50ZXIoJm91dHB1dCwgJyQnLCAmaW5mb19jb2xsZWN0b3IpOwotICAgIHByaW50
ZXIuUHJpbnQoIjAxMiRmb28kNCRmb28kJGJhciRcbiIsICJmb28iLCAiMyIsICJiYXIiLCAiNSIp
OwotICAgIHZlY3RvcjxpbnQ+IHBhdGg7Ci0gICAgcGF0aC5wdXNoX2JhY2soMzMpOwotICAgIE1v
Y2tEZXNjcmlwdG9yIGRlc2NyaXB0b3IoInBhdGgiLCBwYXRoKTsKLSAgICBwcmludGVyLkFubm90
YXRlKCJiYXIiLCAiYmFyIiwgJmRlc2NyaXB0b3IpOwotICB9Ci0gIGJ1ZmZlcltvdXRwdXQuQnl0
ZUNvdW50KCldID0gJ1wwJzsKLSAgRVhQRUNUX1NUUkVRKCIwMTIzNDM1XG4iLCBidWZmZXIpOwot
ICBBU1NFUlRfRVEoMSwgaW5mby5hbm5vdGF0aW9uX3NpemUoKSk7Ci0gIGNvbnN0IEdlbmVyYXRl
ZENvZGVJbmZvOjpBbm5vdGF0aW9uKiBiYXIgPSAmaW5mby5hbm5vdGF0aW9uKDApOwotICBBU1NF
UlRfRVEoMSwgYmFyLT5wYXRoX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgzMywgYmFyLT5wYXRoKDAp
KTsKLSAgRVhQRUNUX0VRKCJwYXRoIiwgYmFyLT5zb3VyY2VfZmlsZSgpKTsKLSAgRVhQRUNUX0VR
KDYsIGJhci0+YmVnaW4oKSk7Ci0gIEVYUEVDVF9FUSg3LCBiYXItPmVuZCgpKTsKLX0KLQotVEVT
VChQcmludGVyLCBJbmRlbnRpbmcpIHsKLSAgY2hhciBidWZmZXJbODE5Ml07Ci0KLSAgZm9yIChp
bnQgYmxvY2tfc2l6ZSA9IDE7IGJsb2NrX3NpemUgPCA1MTI7IGJsb2NrX3NpemUgKj0gMikgewot
ICAgIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIsIHNpemVvZihidWZmZXIpLCBibG9j
a19zaXplKTsKLQotICAgIHsKLSAgICAgIFByaW50ZXIgcHJpbnRlcigmb3V0cHV0LCAnJCcpOwot
ICAgICAgbWFwPHN0cmluZywgc3RyaW5nPiB2YXJzOwotCi0gICAgICB2YXJzWyJuZXdsaW5lIl0g
PSAiXG4iOwotCi0gICAgICBwcmludGVyLlByaW50KCJUaGlzIGlzIG5vdCBpbmRlbnRlZC5cbiIp
OwotICAgICAgcHJpbnRlci5JbmRlbnQoKTsKLSAgICAgIHByaW50ZXIuUHJpbnQoIlRoaXMgaXMg
aW5kZW50ZWRcbkFuZCBzbyBpcyB0aGlzXG4iKTsKLSAgICAgIHByaW50ZXIuT3V0ZGVudCgpOwot
ICAgICAgcHJpbnRlci5QcmludCgiQnV0IHRoaXMgaXMgbm90LiIpOwotICAgICAgcHJpbnRlci5J
bmRlbnQoKTsKLSAgICAgIHByaW50ZXIuUHJpbnQoIiAgQW5kIHRoaXMgaXMgc3RpbGwgdGhlIHNh
bWUgbGluZS5cbiIKLSAgICAgICAgICAgICAgICAgICAgIkJ1dCB0aGlzIGlzIGluZGVudGVkLlxu
Iik7Ci0gICAgICBwcmludGVyLlByaW50UmF3KCJSYXdCaXQgaGFzIGluZGVudCBhdCBzdGFydFxu
Iik7Ci0gICAgICBwcmludGVyLlByaW50UmF3KCJidXQgbm90IGFmdGVyIGEgcmF3IG5ld2xpbmVc
biIpOwotICAgICAgcHJpbnRlci5QcmludCh2YXJzLCAiTm90ZSB0aGF0IGEgbmV3bGluZSBpbiBh
IHZhcmlhYmxlIHdpbGwgYnJlYWsgIgotICAgICAgICAgICAgICAgICAgICAiaW5kZW50aW5nLCBh
cyB3ZSBzZWUkbmV3bGluZSRoZXJlLlxuIik7Ci0gICAgICBwcmludGVyLkluZGVudCgpOwotICAg
ICAgcHJpbnRlci5QcmludCgiQW5kIHRoaXMiKTsKLSAgICAgIHByaW50ZXIuT3V0ZGVudCgpOwot
ICAgICAgcHJpbnRlci5PdXRkZW50KCk7Ci0gICAgICBwcmludGVyLlByaW50KCIgaXMgZG91Ymxl
LWluZGVudGVkXG5CYWNrIHRvIG5vcm1hbC4iKTsKLQotICAgICAgRVhQRUNUX0ZBTFNFKHByaW50
ZXIuZmFpbGVkKCkpOwotICAgIH0KLQotICAgIGJ1ZmZlcltvdXRwdXQuQnl0ZUNvdW50KCldID0g
J1wwJzsKLQotICAgIEVYUEVDVF9TVFJFUSgKLSAgICAgICJUaGlzIGlzIG5vdCBpbmRlbnRlZC5c
biIKLSAgICAgICIgIFRoaXMgaXMgaW5kZW50ZWRcbiIKLSAgICAgICIgIEFuZCBzbyBpcyB0aGlz
XG4iCi0gICAgICAiQnV0IHRoaXMgaXMgbm90LiAgQW5kIHRoaXMgaXMgc3RpbGwgdGhlIHNhbWUg
bGluZS5cbiIKLSAgICAgICIgIEJ1dCB0aGlzIGlzIGluZGVudGVkLlxuIgotICAgICAgIiAgUmF3
Qml0IGhhcyBpbmRlbnQgYXQgc3RhcnRcbiIKLSAgICAgICJidXQgbm90IGFmdGVyIGEgcmF3IG5l
d2xpbmVcbiIKLSAgICAgICJOb3RlIHRoYXQgYSBuZXdsaW5lIGluIGEgdmFyaWFibGUgd2lsbCBi
cmVhayBpbmRlbnRpbmcsIGFzIHdlIHNlZVxuIgotICAgICAgImhlcmUuXG4iCi0gICAgICAiICAg
IEFuZCB0aGlzIGlzIGRvdWJsZS1pbmRlbnRlZFxuIgotICAgICAgIkJhY2sgdG8gbm9ybWFsLiIs
Ci0gICAgICBidWZmZXIpOwotICB9Ci19Ci0KLS8vIERlYXRoIHRlc3RzIGRvIG5vdCB3b3JrIG9u
IFdpbmRvd3MgYXMgb2YgeWV0LgotI2lmZGVmIFBST1RPQlVGX0hBU19ERUFUSF9URVNUCi1URVNU
KFByaW50ZXIsIERlYXRoKSB7Ci0gIGNoYXIgYnVmZmVyWzgxOTJdOwotCi0gIEFycmF5T3V0cHV0
U3RyZWFtIG91dHB1dChidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgUHJpbnRlciBwcmludGVy
KCZvdXRwdXQsICckJyk7Ci0KLSAgRVhQRUNUX0RFQlVHX0RFQVRIKHByaW50ZXIuUHJpbnQoIiRu
b3N1Y2h2YXIkIiksICJVbmRlZmluZWQgdmFyaWFibGUiKTsKLSAgRVhQRUNUX0RFQlVHX0RFQVRI
KHByaW50ZXIuUHJpbnQoIiR1bmNsb3NlZCIpLCAiVW5jbG9zZWQgdmFyaWFibGUgbmFtZSIpOwot
ICBFWFBFQ1RfREVCVUdfREVBVEgocHJpbnRlci5PdXRkZW50KCksICJ3aXRob3V0IG1hdGNoaW5n
IEluZGVudCIpOwotfQotCi1URVNUKFByaW50ZXIsIEFubm90YXRlTXVsdGlwbGVVc2VzRGVhdGgp
IHsKLSAgY2hhciBidWZmZXJbODE5Ml07Ci0gIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZm
ZXIsIHNpemVvZihidWZmZXIpKTsKLSAgR2VuZXJhdGVkQ29kZUluZm8gaW5mbzsKLSAgQW5ub3Rh
dGlvblByb3RvQ29sbGVjdG9yPEdlbmVyYXRlZENvZGVJbmZvPiBpbmZvX2NvbGxlY3RvcigmaW5m
byk7Ci0gIHsKLSAgICBQcmludGVyIHByaW50ZXIoJm91dHB1dCwgJyQnLCAmaW5mb19jb2xsZWN0
b3IpOwotICAgIHByaW50ZXIuUHJpbnQoIjAxMiRmb28kNCRmb28kXG4iLCAiZm9vIiwgIjMiKTsK
LSAgICB2ZWN0b3I8aW50PiBwYXRoOwotICAgIHBhdGgucHVzaF9iYWNrKDMzKTsKLSAgICBNb2Nr
RGVzY3JpcHRvciBkZXNjcmlwdG9yKCJwYXRoIiwgcGF0aCk7Ci0gICAgRVhQRUNUX0RFQlVHX0RF
QVRIKHByaW50ZXIuQW5ub3RhdGUoImZvbyIsICJmb28iLCAmZGVzY3JpcHRvciksICJtdWx0aXBs
ZSIpOwotICB9Ci19Ci0KLVRFU1QoUHJpbnRlciwgQW5ub3RhdGVOZWdhdGl2ZUxlbmd0aERlYXRo
KSB7Ci0gIGNoYXIgYnVmZmVyWzgxOTJdOwotICBBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQoYnVm
ZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gIEdlbmVyYXRlZENvZGVJbmZvIGluZm87Ci0gIEFubm90
YXRpb25Qcm90b0NvbGxlY3RvcjxHZW5lcmF0ZWRDb2RlSW5mbz4gaW5mb19jb2xsZWN0b3IoJmlu
Zm8pOwotICB7Ci0gICAgUHJpbnRlciBwcmludGVyKCZvdXRwdXQsICckJywgJmluZm9fY29sbGVj
dG9yKTsKLSAgICBwcmludGVyLlByaW50KCIwMTIkZm9vJDQkYmFyJFxuIiwgImZvbyIsICIzIiwg
ImJhciIsICI1Iik7Ci0gICAgdmVjdG9yPGludD4gcGF0aDsKLSAgICBwYXRoLnB1c2hfYmFjaygz
Myk7Ci0gICAgTW9ja0Rlc2NyaXB0b3IgZGVzY3JpcHRvcigicGF0aCIsIHBhdGgpOwotICAgIEVY
UEVDVF9ERUJVR19ERUFUSChwcmludGVyLkFubm90YXRlKCJiYXIiLCAiZm9vIiwgJmRlc2NyaXB0
b3IpLCAibmVnYXRpdmUiKTsKLSAgfQotfQotCi1URVNUKFByaW50ZXIsIEFubm90YXRlVW5kZWZp
bmVkRGVhdGgpIHsKLSAgY2hhciBidWZmZXJbODE5Ml07Ci0gIEFycmF5T3V0cHV0U3RyZWFtIG91
dHB1dChidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgR2VuZXJhdGVkQ29kZUluZm8gaW5mbzsK
LSAgQW5ub3RhdGlvblByb3RvQ29sbGVjdG9yPEdlbmVyYXRlZENvZGVJbmZvPiBpbmZvX2NvbGxl
Y3RvcigmaW5mbyk7Ci0gIHsKLSAgICBQcmludGVyIHByaW50ZXIoJm91dHB1dCwgJyQnLCAmaW5m
b19jb2xsZWN0b3IpOwotICAgIHByaW50ZXIuUHJpbnQoIjAxMiRmb28kNCRmb28kXG4iLCAiZm9v
IiwgIjMiKTsKLSAgICB2ZWN0b3I8aW50PiBwYXRoOwotICAgIHBhdGgucHVzaF9iYWNrKDMzKTsK
LSAgICBNb2NrRGVzY3JpcHRvciBkZXNjcmlwdG9yKCJwYXRoIiwgcGF0aCk7Ci0gICAgRVhQRUNU
X0RFQlVHX0RFQVRIKHByaW50ZXIuQW5ub3RhdGUoImJhciIsICJiYXIiLCAmZGVzY3JpcHRvciks
Ci0gICAgICAgICAgICAgICAgICAgICAgICJVbmRlZmluZWQiKTsKLSAgfQotfQotI2VuZGlmICAv
LyBQUk9UT0JVRl9IQVNfREVBVEhfVEVTVAotCi1URVNUKFByaW50ZXIsIFdyaXRlRmFpbHVyZVBh
cnRpYWwpIHsKLSAgY2hhciBidWZmZXJbMTddOwotCi0gIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1
dChidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgUHJpbnRlciBwcmludGVyKCZvdXRwdXQsICck
Jyk7Ci0KLSAgLy8gUHJpbnQgMTYgYnl0ZXMgdG8gYWxtb3N0IGZpbGwgdGhlIGJ1ZmZlciAoc2hv
dWxkIG5vdCBmYWlsKS4KLSAgcHJpbnRlci5QcmludCgiMDEyMzQ1Njc4OWFiY2RlZiIpOwotICBF
WFBFQ1RfRkFMU0UocHJpbnRlci5mYWlsZWQoKSk7Ci0KLSAgLy8gVHJ5IHRvIHByaW50IDIgY2hh
cnMuIE9ubHkgb25lIGZpdHMuCi0gIHByaW50ZXIuUHJpbnQoIjw+Iik7Ci0gIEVYUEVDVF9UUlVF
KHByaW50ZXIuZmFpbGVkKCkpOwotCi0gIC8vIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGZhaWwgdG9v
LgotICBwcmludGVyLlByaW50KCIgIik7Ci0gIEVYUEVDVF9UUlVFKHByaW50ZXIuZmFpbGVkKCkp
OwotICBwcmludGVyLlByaW50KCJibGFoIik7Ci0gIEVYUEVDVF9UUlVFKHByaW50ZXIuZmFpbGVk
KCkpOwotCi0gIC8vIEJ1ZmZlciBzaG91bGQgY29udGFpbiB0aGUgZmlyc3QgMTcgYnl0ZXMgd3Jp
dHRlbi4KLSAgRVhQRUNUX0VRKCIwMTIzNDU2Nzg5YWJjZGVmPCIsIHN0cmluZyhidWZmZXIsIHNp
emVvZihidWZmZXIpKSk7Ci19Ci0KLVRFU1QoUHJpbnRlciwgV3JpdGVGYWlsdXJlRXhhY3QpIHsK
LSAgY2hhciBidWZmZXJbMTZdOwotCi0gIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIs
IHNpemVvZihidWZmZXIpKTsKLSAgUHJpbnRlciBwcmludGVyKCZvdXRwdXQsICckJyk7Ci0KLSAg
Ly8gUHJpbnQgMTYgYnl0ZXMgdG8gZmlsbCB0aGUgYnVmZmVyIGV4YWN0bHkgKHNob3VsZCBub3Qg
ZmFpbCkuCi0gIHByaW50ZXIuUHJpbnQoIjAxMjM0NTY3ODlhYmNkZWYiKTsKLSAgRVhQRUNUX0ZB
TFNFKHByaW50ZXIuZmFpbGVkKCkpOwotCi0gIC8vIFRyeSB0byBwcmludCBvbmUgbW9yZSBieXRl
IChzaG91bGQgZmFpbCkuCi0gIHByaW50ZXIuUHJpbnQoIiAiKTsKLSAgRVhQRUNUX1RSVUUocHJp
bnRlci5mYWlsZWQoKSk7Ci0KLSAgLy8gU2hvdWxkIG5vdCBjcmFzaAotICBwcmludGVyLlByaW50
KCJibGFoIik7Ci0gIEVYUEVDVF9UUlVFKHByaW50ZXIuZmFpbGVkKCkpOwotCi0gIC8vIEJ1ZmZl
ciBzaG91bGQgY29udGFpbiB0aGUgZmlyc3QgMTYgYnl0ZXMgd3JpdHRlbi4KLSAgRVhQRUNUX0VR
KCIwMTIzNDU2Nzg5YWJjZGVmIiwgc3RyaW5nKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFjZSBw
cm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2lvL3N0cnRvZC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9zdHJ0b2QuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MGJiOWEzMWVmZjM1ODFlYjE0NzAyNTViMjcy
NzA4Zjc0Y2E4ODkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3N0cnRvZC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEy
NSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9pby9zdHJ0b2QuaD4KLQotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNs
dWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3Bh
Y2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGlvIHsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTm9M
b2NhbGVTdHJ0b2QoKQotLy8gICBUaGlzIGNvZGUgd2lsbCBtYWtlIHlvdSBjcnkuCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLW5hbWVzcGFjZSB7Ci0KLS8vIFJldHVybnMgYSBzdHJpbmcgaWRlbnRpY2Fs
IHRvICppbnB1dCBleGNlcHQgdGhhdCB0aGUgY2hhcmFjdGVyIHBvaW50ZWQgdG8KLS8vIGJ5IHJh
ZGl4X3BvcyAod2hpY2ggc2hvdWxkIGJlICcuJykgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbG9jYWxl
LXNwZWNpZmljCi0vLyByYWRpeCBjaGFyYWN0ZXIuCi1zdHJpbmcgTG9jYWxpemVSYWRpeChjb25z
dCBjaGFyKiBpbnB1dCwgY29uc3QgY2hhciogcmFkaXhfcG9zKSB7Ci0gIC8vIERldGVybWluZSB0
aGUgbG9jYWxlLXNwZWNpZmljIHJhZGl4IGNoYXJhY3RlciBieSBjYWxsaW5nIHNwcmludGYoKSB0
bwotICAvLyBwcmludCB0aGUgbnVtYmVyIDEuNSwgdGhlbiBzdHJpcHBpbmcgb2ZmIHRoZSBkaWdp
dHMuICBBcyBmYXIgYXMgSSBjYW4KLSAgLy8gdGVsbCwgdGhpcyBpcyB0aGUgb25seSBwb3J0YWJs
ZSwgdGhyZWFkLXNhZmUgd2F5IHRvIGdldCB0aGUgQyBsaWJyYXJ5Ci0gIC8vIHRvIGRpdnVsZGdl
IHRoZSBsb2NhbGUncyByYWRpeCBjaGFyYWN0ZXIuICBObywgbG9jYWxlY29udigpIGlzIE5PVAot
ICAvLyB0aHJlYWQtc2FmZS4KLSAgY2hhciB0ZW1wWzE2XTsKLSAgaW50IHNpemUgPSBzcHJpbnRm
KHRlbXAsICIlLjFmIiwgMS41KTsKLSAgR09PR0xFX0NIRUNLX0VRKHRlbXBbMF0sICcxJyk7Ci0g
IEdPT0dMRV9DSEVDS19FUSh0ZW1wW3NpemUtMV0sICc1Jyk7Ci0gIEdPT0dMRV9DSEVDS19MRShz
aXplLCA2KTsKLQotICAvLyBOb3cgcmVwbGFjZSB0aGUgJy4nIGluIHRoZSBpbnB1dCB3aXRoIGl0
LgotICBzdHJpbmcgcmVzdWx0OwotICByZXN1bHQucmVzZXJ2ZShzdHJsZW4oaW5wdXQpICsgc2l6
ZSAtIDMpOwotICByZXN1bHQuYXBwZW5kKGlucHV0LCByYWRpeF9wb3MpOwotICByZXN1bHQuYXBw
ZW5kKHRlbXAgKyAxLCBzaXplIC0gMik7Ci0gIHJlc3VsdC5hcHBlbmQocmFkaXhfcG9zICsgMSk7
Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1kb3VibGUgTm9Mb2Nh
bGVTdHJ0b2QoY29uc3QgY2hhciogdGV4dCwgY2hhcioqIG9yaWdpbmFsX2VuZHB0cikgewotICAv
LyBXZSBjYW5ub3Qgc2ltcGx5IHNldCB0aGUgbG9jYWxlIHRvICJDIiB0ZW1wb3JhcmlseSB3aXRo
IHNldGxvY2FsZSgpCi0gIC8vIGFzIHRoaXMgaXMgbm90IHRocmVhZC1zYWZlLiAgSW5zdGVhZCwg
d2UgdHJ5IHRvIHBhcnNlIGluIHRoZSBjdXJyZW50Ci0gIC8vIGxvY2FsZSBmaXJzdC4gIElmIHBh
cnNpbmcgc3RvcHMgYXQgYSAnLicgY2hhcmFjdGVyLCB0aGVuIHRoaXMgaXMgYQotICAvLyBwcmV0
dHkgZ29vZCBoaW50IHRoYXQgd2UncmUgYWN0dWFsbHkgaW4gc29tZSBvdGhlciBsb2NhbGUgaW4g
d2hpY2gKLSAgLy8gJy4nIGlzIG5vdCB0aGUgcmFkaXggY2hhcmFjdGVyLgotCi0gIGNoYXIqIHRl
bXBfZW5kcHRyOwotICBkb3VibGUgcmVzdWx0ID0gc3RydG9kKHRleHQsICZ0ZW1wX2VuZHB0cik7
Ci0gIGlmIChvcmlnaW5hbF9lbmRwdHIgIT0gTlVMTCkgKm9yaWdpbmFsX2VuZHB0ciA9IHRlbXBf
ZW5kcHRyOwotICBpZiAoKnRlbXBfZW5kcHRyICE9ICcuJykgcmV0dXJuIHJlc3VsdDsKLQotICAv
LyBQYXJzaW5nIGhhbHRlZCBvbiBhICcuJy4gIFBlcmhhcHMgd2UncmUgaW4gYSBkaWZmZXJlbnQg
bG9jYWxlPyAgTGV0J3MKLSAgLy8gdHJ5IHRvIHJlcGxhY2UgdGhlICcuJyB3aXRoIGEgbG9jYWxl
LXNwZWNpZmljIHJhZGl4IGNoYXJhY3RlciBhbmQKLSAgLy8gdHJ5IGFnYWluLgotICBzdHJpbmcg
bG9jYWxpemVkID0gTG9jYWxpemVSYWRpeCh0ZXh0LCB0ZW1wX2VuZHB0cik7Ci0gIGNvbnN0IGNo
YXIqIGxvY2FsaXplZF9jc3RyID0gbG9jYWxpemVkLmNfc3RyKCk7Ci0gIGNoYXIqIGxvY2FsaXpl
ZF9lbmRwdHI7Ci0gIHJlc3VsdCA9IHN0cnRvZChsb2NhbGl6ZWRfY3N0ciwgJmxvY2FsaXplZF9l
bmRwdHIpOwotICBpZiAoKGxvY2FsaXplZF9lbmRwdHIgLSBsb2NhbGl6ZWRfY3N0cikgPgotICAg
ICAgKHRlbXBfZW5kcHRyIC0gdGV4dCkpIHsKLSAgICAvLyBUaGlzIGF0dGVtcHQgZ290IGZ1cnRo
ZXIsIHNvIHJlcGxhY2luZyB0aGUgZGVjaW1hbCBtdXN0IGhhdmUgaGVscGVkLgotICAgIC8vIFVw
ZGF0ZSBvcmlnaW5hbF9lbmRwdHIgdG8gcG9pbnQgYXQgdGhlIHJpZ2h0IGxvY2F0aW9uLgotICAg
IGlmIChvcmlnaW5hbF9lbmRwdHIgIT0gTlVMTCkgewotICAgICAgLy8gc2l6ZV9kaWZmIGlzIG5v
bi16ZXJvIGlmIHRoZSBsb2NhbGl6ZWQgcmFkaXggaGFzIG11bHRpcGxlIGJ5dGVzLgotICAgICAg
aW50IHNpemVfZGlmZiA9IGxvY2FsaXplZC5zaXplKCkgLSBzdHJsZW4odGV4dCk7Ci0gICAgICAv
LyBjb25zdF9jYXN0IGlzIG5lY2Vzc2FyeSB0byBtYXRjaCB0aGUgc3RydG9kKCkgaW50ZXJmYWNl
LgotICAgICAgKm9yaWdpbmFsX2VuZHB0ciA9IGNvbnN0X2Nhc3Q8Y2hhcio+KAotICAgICAgICB0
ZXh0ICsgKGxvY2FsaXplZF9lbmRwdHIgLSBsb2NhbGl6ZWRfY3N0ciAtIHNpemVfZGlmZikpOwot
ICAgIH0KLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWZsb2F0IFNhZmVEb3VibGVUb0Zs
b2F0KGRvdWJsZSB2YWx1ZSkgewotICBpZiAodmFsdWUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6bWF4KCkpIHsKLSAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Omlu
ZmluaXR5KCk7Ci0gIH0gZWxzZSBpZiAodmFsdWUgPCAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46Om1heCgpKSB7Ci0gICAgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5m
aW5pdHkoKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVl
KTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L2lvL3N0cnRvZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3N0cnRvZC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmNTZlNDFjODQwMzA4NzMxNmZlYTQ2OWE1ODAzNTA5YTQ1MmE3
ODdhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9pby9zdHJ0b2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBIGxvY2FsZS1pbmRlcGVu
ZGVudCB2ZXJzaW9uIG9mIHN0cnRvZCgpLCB1c2VkIHRvIHBhcnNlIGZsb2F0aW5nCi0vLyBwb2lu
dCBkZWZhdWx0IHZhbHVlcyBpbiAucHJvdG8gZmlsZXMsIHdoZXJlIHRoZSBkZWNpbWFsIHNlcGFy
YXRvcgotLy8gaXMgYWx3YXlzIGEgZG90LgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9JT19T
VFJUT0RfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9JT19TVFJUT0RfSF9fCi0KLW5hbWVz
cGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbyB7Ci0KLS8v
IEEgbG9jYWxlLWluZGVwZW5kZW50IHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIHN0cnRvZCgpLCB3
aGljaCBhbHdheXMKLS8vIHVzZXMgYSBkb3QgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLgotZG91
YmxlIE5vTG9jYWxlU3RydG9kKGNvbnN0IGNoYXIqIHN0ciwgY2hhcioqIGVuZHB0cik7Ci0KLS8v
IENhc3RzIGEgZG91YmxlIHZhbHVlIHRvIGEgZmxvYXQgdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBv
dXRzaWRlIG9mIHRoZQotLy8gcmVwcmVzZW50YWJsZSByYW5nZSBvZiBmbG9hdCwgaXQgd2lsbCBi
ZSBjb252ZXJ0ZWQgdG8gcG9zaXRpdmUgb3IgbmVnYXRpdmUKLS8vIGluZmluaXR5LgotZmxvYXQg
U2FmZURvdWJsZVRvRmxvYXQoZG91YmxlIHZhbHVlKTsKLQotfSAgLy8gbmFtZXNwYWNlIGlvCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlm
ICAvLyBHT09HTEVfUFJPVE9CVUZfSU9fU1RSVE9EX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL2lvL3Rva2VuaXplci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby90b2tlbml6
ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNTUwZGZiYWZjNjM4NGI5NzM1
YjEwNTk4NGZmY2YyODhhZTA3YjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3Rva2VuaXplci5jYworKysgL2Rldi9u
dWxsCkBAIC0xLDExMzkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNl
ZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVt
YXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIEhlcmUgd2UgaGF2ZSBhIGhhbmQt
d3JpdHRlbiBsZXhlci4gIEF0IGZpcnN0IHlvdSBtaWdodCBhc2sgeW91cnNlbGYsCi0vLyAiSGFu
ZC13cml0dGVuIHRleHQgcHJvY2Vzc2luZz8gIElzIEtlbnRvbiBjcmF6eT8hIiAgV2VsbCwgZmly
c3Qgb2YgYWxsLAotLy8geWVzIEkgYW0gY3JhenksIGJ1dCB0aGF0J3MgYmVzaWRlIHRoZSBwb2lu
dC4gIFRoZXJlIGFyZSBhY3R1YWxseSByZWFzb25zCi0vLyB3aHkgSSBlbmRlZCB1cCB3cml0aW5n
IHRoaXMgdGhpcyB3YXkuCi0vLwotLy8gVGhlIHRyYWRpdGlvbmFsIGFwcHJvYWNoIHRvIGxleGlu
ZyBpcyB0byB1c2UgbGV4IHRvIGdlbmVyYXRlIGEgbGV4ZXIgZm9yCi0vLyB5b3UuICBVbmZvcnR1
bmF0ZWx5LCBsZXgncyBvdXRwdXQgaXMgcmlkaWN1bG91c2x5IHVnbHkgYW5kIGRpZmZpY3VsdCB0
bwotLy8gaW50ZWdyYXRlIGNsZWFubHkgd2l0aCBDKysgY29kZSwgZXNwZWNpYWxseSBhYnN0cmFj
dCBjb2RlIG9yIGNvZGUgbWVhbnQKLS8vIGFzIGEgbGlicmFyeS4gIEJldHRlciBwYXJzZXItZ2Vu
ZXJhdG9ycyBleGlzdCBidXQgd291bGQgYWRkIGRlcGVuZGVuY2llcwotLy8gd2hpY2ggbW9zdCB1
c2VycyB3b24ndCBhbHJlYWR5IGhhdmUsIHdoaWNoIHdlJ2QgbGlrZSB0byBhdm9pZC4gIChHTlUg
ZmxleAotLy8gaGFzIGEgQysrIG91dHB1dCBvcHRpb24sIGJ1dCBpdCdzIHN0aWxsIHJpZGljdWxv
dXNseSB1Z2x5LCBub24tYWJzdHJhY3QsCi0vLyBhbmQgbm90IGxpYnJhcnktZnJpZW5kbHkuKQot
Ly8KLS8vIFRoZSBuZXh0IGFwcHJvYWNoIHRoYXQgYW55IGdvb2Qgc29mdHdhcmUgZW5naW5lZXIg
c2hvdWxkIGxvb2sgYXQgaXMgdG8KLS8vIHVzZSByZWd1bGFyIGV4cHJlc3Npb25zLiAgQW5kLCBp
bmRlZWQsIEkgZGlkLiAgSSBoYXZlIGNvZGUgd2hpY2gKLS8vIGltcGxlbWVudHMgdGhpcyBzYW1l
IGNsYXNzIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICBJdCdzIGFib3V0IDIwMAotLy8gbGlu
ZXMgc2hvcnRlci4gIEhvd2V2ZXI6Ci0vLyAtIFJhdGhlciB0aGFuIGVycm9yIG1lc3NhZ2VzIHRl
bGxpbmcgeW91ICJUaGlzIHN0cmluZyBoYXMgYW4gaW52YWxpZAotLy8gICBlc2NhcGUgc2VxdWVu
Y2UgYXQgbGluZSA1LCBjb2x1bW4gNDUiLCB5b3UgZ2V0IGVycm9yIG1lc3NhZ2VzIGxpa2UKLS8v
ICAgIlBhcnNlIGVycm9yIG9uIGxpbmUgNSIuICBHaXZpbmcgbW9yZSBwcmVjaXNlIGVycm9ycyBy
ZXF1aXJlcyBhZGRpbmcKLS8vICAgYSBsb3Qgb2YgY29kZSB0aGF0IGVuZHMgdXAgYmFzaWNhbGx5
IGFzIGNvbXBsZXggYXMgdGhlIGhhbmQtY29kZWQKLS8vICAgdmVyc2lvbiBhbnl3YXkuCi0vLyAt
IFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYSBzdHJpbmcgbGl0ZXJhbCBsb29rcyBs
aWtlIHRoaXM6Ci0vLyAgICAga1N0cmluZyAgPSBuZXcgUkUoIihcIihbXlwiXFxcXF18IiAgICAg
ICAgICAgICAgLy8gbm9uLWVzY2FwZWQKLS8vICAgICAgICAgICAgICAgICAgICAgICAiXFxcXFth
YmZucnR2P1wiJ1xcXFwwLTddfCIgICAvLyBub3JtYWwgZXNjYXBlCi0vLyAgICAgICAgICAgICAg
ICAgICAgICAgIlxcXFx4WzAtOWEtZkEtRl0pKlwifCIgICAgICAgLy8gaGV4IGVzY2FwZQotLy8g
ICAgICAgICAgICAgICAgICAgICAgICJcJyhbXlwnXFxcXF18IiAgICAgICAgLy8gQWxzbyBzdXBw
b3J0IHNpbmdsZS1xdW90ZXMuCi0vLyAgICAgICAgICAgICAgICAgICAgICAgIlxcXFxbYWJmbnJ0
dj9cIidcXFxcMC03XXwiCi0vLyAgICAgICAgICAgICAgICAgICAgICAgIlxcXFx4WzAtOWEtZkEt
Rl0pKlwnKSIpOwotLy8gICBWZXJpZnlpbmcgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgbGluZSBu
b2lzZSBpcyBhY3R1YWxseSBoYXJkZXIgdGhhbgotLy8gICB2ZXJpZnlpbmcgdGhlIGNvcnJlY3Ru
ZXNzIG9mIENvbnN1bWVTdHJpbmcoKSwgZGVmaW5lZCBiZWxvdy4gIEknbSBub3QKLS8vICAgZXZl
biBjb25maWRlbnQgdGhhdCB0aGUgYWJvdmUgaXMgY29ycmVjdCwgYWZ0ZXIgc3RhcmluZyBhdCBp
dCBmb3Igc29tZQotLy8gICB0aW1lLgotLy8gLSBQQ1JFIGlzIGZhc3QsIGJ1dCB0aGVyZSdzIHN0
aWxsIG1vcmUgb3ZlcmhlYWQgaW52b2x2ZWQgdGhhbiB0aGUgY29kZQotLy8gICBiZWxvdy4KLS8v
IC0gU2FkbHksIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBDIHN0YW5k
YXJkIGxpYnJhcnksIHNvCi0vLyAgIHVzaW5nIHRoZW0gd291bGQgcmVxdWlyZSBkZXBlbmRpbmcg
b24gc29tZSBvdGhlciBsaWJyYXJ5LiAgRm9yIHRoZQotLy8gICBvcGVuIHNvdXJjZSByZWxlYXNl
LCB0aGlzIGNvdWxkIGJlIHJlYWxseSBhbm5veWluZy4gIE5vYm9keSBsaWtlcwotLy8gICBkb3du
bG9hZGluZyBvbmUgcGllY2Ugb2Ygc29mdHdhcmUganVzdCB0byBmaW5kIHRoYXQgdGhleSBuZWVk
IHRvCi0vLyAgIGRvd25sb2FkIHNvbWV0aGluZyBlbHNlIHRvIG1ha2UgaXQgd29yaywgYW5kIGlu
IGFsbCBsaWtlbGlob29kCi0vLyAgIHBlb3BsZSBkb3dubG9hZGluZyBQcm90b2NvbCBCdWZmZXJz
IHdpbGwgYWxyZWFkeSBiZSBkb2luZyBzbyBqdXN0Ci0vLyAgIHRvIG1ha2Ugc29tZXRoaW5nIGVs
c2Ugd29yay4gIFdlIGNvdWxkIGluY2x1ZGUgYSBjb3B5IG9mIFBDUkUgd2l0aAotLy8gICBvdXIg
Y29kZSwgYnV0IHRoYXQgb2JsaWdhdGVzIHVzIHRvIGtlZXAgaXQgdXAtdG8tZGF0ZSBhbmQganVz
dCBzZWVtcwotLy8gICBsaWtlIGEgYmlnIHdhc3RlIGp1c3QgdG8gc2F2ZSAyMDAgbGluZXMgb2Yg
Y29kZS4KLS8vCi0vLyBPbiBhIHNpbWlsYXIgYnV0IHVucmVsYXRlZCBub3RlLCBJJ20gZXZlbiBz
Y2FyZWQgdG8gdXNlIGN0eXBlLmguCi0vLyBBcHBhcmVudGx5IGZ1bmN0aW9ucyBsaWtlIGlzYWxw
aGEoKSBhcmUgbG9jYWxlLWRlcGVuZGVudC4gIFNvLCBpZiB3ZSB1c2VkCi0vLyB0aGF0LCB0aGVu
IGlmIHRoaXMgY29kZSBpcyBiZWluZyBjYWxsZWQgZnJvbSBzb21lIHByb2dyYW0gdGhhdCBkb2Vz
bid0Ci0vLyBoYXZlIGl0cyBsb2NhbGUgc2V0IHRvICJDIiwgaXQgd291bGQgYmVoYXZlIHN0cmFu
Z2VseS4gIFdlIGNhbid0IGp1c3Qgc2V0Ci0vLyB0aGUgbG9jYWxlIHRvICJDIiBvdXJzZWx2ZXMg
c2luY2Ugd2UgbWlnaHQgYnJlYWsgdGhlIGNhbGxpbmcgcHJvZ3JhbSB0aGF0Ci0vLyB3YXksIHBh
cnRpY3VsYXJseSBpZiBpdCBpcyBtdWx0aS10aHJlYWRlZC4gIFdURj8gIFNvbWVvbmUgcGxlYXNl
IGxldCBtZQotLy8gKEtlbnRvbikga25vdyBpZiBJJ20gbWlzc2luZyBzb21ldGhpbmcgaGVyZS4u
LgotLy8KLS8vIEknZCBsb3ZlIHRvIGhlYXIgYWJvdXQgb3RoZXIgYWx0ZXJuYXRpdmVzLCB0aG91
Z2gsIGFzIHRoaXMgY29kZSBpc24ndAotLy8gZXhhY3RseSBwcmV0dHkuCi0KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvaW8vdG9rZW5pemVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5n
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3ByaW50Zi5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9zdHJ0b2QuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0bF91dGls
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFj
ZSBpbyB7Ci1uYW1lc3BhY2UgewotCi0vLyBBcyBtZW50aW9uZWQgYWJvdmUsIEkgZG9uJ3QgdHJ1
c3QgY3R5cGUuaCBkdWUgdG8gdGhlIHByZXNlbmNlIG9mICJsb2NhbGVzIi4KLS8vIFNvLCBJIGhh
dmUgd3JpdHRlbiByZXBsYWNlbWVudCBmdW5jdGlvbnMgaGVyZS4gIFNvbWVvbmUgcGxlYXNlIHNt
YWNrIG1lIGlmCi0vLyB0aGlzIGlzIGEgYmFkIGlkZWEgb3IgaWYgdGhlcmUgaXMgc29tZSB3YXkg
YXJvdW5kIHRoaXMuCi0vLwotLy8gVGhlc2UgImNoYXJhY3RlciBjbGFzc2VzIiBhcmUgZGVzaWdu
ZWQgdG8gYmUgdXNlZCBpbiB0ZW1wbGF0ZSBtZXRob2RzLgotLy8gRm9yIGluc3RhbmNlLCBUb2tl
bml6ZXI6OkNvbnN1bWVaZXJvT3JNb3JlPFdoaXRlc3BhY2U+KCkgd2lsbCBlYXQKLS8vIHdoaXRl
c3BhY2UuCi0KLS8vIE5vdGU6ICBObyBjbGFzcyBpcyBhbGxvd2VkIHRvIGNvbnRhaW4gJ1wwJywg
c2luY2UgdGhpcyBpcyB1c2VkIHRvIG1hcmsgZW5kLQotLy8gICBvZi1pbnB1dCBhbmQgaXMgaGFu
ZGxlZCBzcGVjaWFsbHkuCi0KLSNkZWZpbmUgQ0hBUkFDVEVSX0NMQVNTKE5BTUUsIEVYUFJFU1NJ
T04pICAgICAgXAotICBjbGFzcyBOQU1FIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBzdGF0aWMgaW5saW5lIGJvb2wgSW5DbGFzcyhjaGFyIGMpIHsgICAgICAgXAotICAgICAgcmV0
dXJuIEVYUFJFU1NJT047ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi1DSEFSQUNURVJfQ0xBU1Mo
V2hpdGVzcGFjZSwgYyA9PSAnICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x0JyB8fAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGMgPT0gJ1xyJyB8fCBjID09ICdcdicgfHwgYyA9PSAnXGYn
KTsKLUNIQVJBQ1RFUl9DTEFTUyhXaGl0ZXNwYWNlTm9OZXdsaW5lLCBjID09ICcgJyB8fCBjID09
ICdcdCcgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID09ICdccicg
fHwgYyA9PSAnXHYnIHx8IGMgPT0gJ1xmJyk7Ci0KLUNIQVJBQ1RFUl9DTEFTUyhVbnByaW50YWJs
ZSwgYyA8ICcgJyAmJiBjID4gJ1wwJyk7Ci0KLUNIQVJBQ1RFUl9DTEFTUyhEaWdpdCwgJzAnIDw9
IGMgJiYgYyA8PSAnOScpOwotQ0hBUkFDVEVSX0NMQVNTKE9jdGFsRGlnaXQsICcwJyA8PSBjICYm
IGMgPD0gJzcnKTsKLUNIQVJBQ1RFUl9DTEFTUyhIZXhEaWdpdCwgKCcwJyA8PSBjICYmIGMgPD0g
JzknKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EnIDw9IGMgJiYgYyA8PSAnZicp
IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgnQScgPD0gYyAmJiBjIDw9ICdGJykpOwot
Ci1DSEFSQUNURVJfQ0xBU1MoTGV0dGVyLCAoJ2EnIDw9IGMgJiYgYyA8PSAneicpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAoJ0EnIDw9IGMgJiYgYyA8PSAnWicpIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoYyA9PSAnXycpKTsKLQotQ0hBUkFDVEVSX0NMQVNTKEFscGhhbnVtZXJp
YywgKCdhJyA8PSBjICYmIGMgPD0gJ3onKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCdBJyA8PSBjICYmIGMgPD0gJ1onKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCcwJyA8PSBjICYmIGMgPD0gJzknKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGMgPT0gJ18nKSk7Ci0KLUNIQVJBQ1RFUl9DTEFTUyhFc2NhcGUsIGMgPT0gJ2EnIHx8IGMg
PT0gJ2InIHx8IGMgPT0gJ2YnIHx8IGMgPT0gJ24nIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjID09ICdyJyB8fCBjID09ICd0JyB8fCBjID09ICd2JyB8fCBjID09ICdcXCcgfHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGMgPT0gJz8nIHx8IGMgPT0gJ1wnJyB8fCBjID09ICdcIicpOwot
Ci0jdW5kZWYgQ0hBUkFDVEVSX0NMQVNTCi0KLS8vIEdpdmVuIGEgY2hhciwgaW50ZXJwcmV0IGl0
IGFzIGEgbnVtZXJpYyBkaWdpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KLS8vIFRoaXMgc3VwcG9y
dHMgYW55IG51bWJlciBiYXNlIHVwIHRvIDM2LgotaW5saW5lIGludCBEaWdpdFZhbHVlKGNoYXIg
ZGlnaXQpIHsKLSAgaWYgKCcwJyA8PSBkaWdpdCAmJiBkaWdpdCA8PSAnOScpIHJldHVybiBkaWdp
dCAtICcwJzsKLSAgaWYgKCdhJyA8PSBkaWdpdCAmJiBkaWdpdCA8PSAneicpIHJldHVybiBkaWdp
dCAtICdhJyArIDEwOwotICBpZiAoJ0EnIDw9IGRpZ2l0ICYmIGRpZ2l0IDw9ICdaJykgcmV0dXJu
IGRpZ2l0IC0gJ0EnICsgMTA7Ci0gIHJldHVybiAtMTsKLX0KLQotLy8gSW5saW5lIGJlY2F1c2Ug
aXQncyBvbmx5IHVzZWQgaW4gb25lIHBsYWNlLgotaW5saW5lIGNoYXIgVHJhbnNsYXRlRXNjYXBl
KGNoYXIgYykgewotICBzd2l0Y2ggKGMpIHsKLSAgICBjYXNlICdhJzogIHJldHVybiAnXGEnOwot
ICAgIGNhc2UgJ2InOiAgcmV0dXJuICdcYic7Ci0gICAgY2FzZSAnZic6ICByZXR1cm4gJ1xmJzsK
LSAgICBjYXNlICduJzogIHJldHVybiAnXG4nOwotICAgIGNhc2UgJ3InOiAgcmV0dXJuICdccic7
Ci0gICAgY2FzZSAndCc6ICByZXR1cm4gJ1x0JzsKLSAgICBjYXNlICd2JzogIHJldHVybiAnXHYn
OwotICAgIGNhc2UgJ1xcJzogcmV0dXJuICdcXCc7Ci0gICAgY2FzZSAnPyc6ICByZXR1cm4gJ1w/
JzsgICAgLy8gVHJpZ3JhcGhzID0gOigKLSAgICBjYXNlICdcJyc6IHJldHVybiAnXCcnOwotICAg
IGNhc2UgJyInOiAgcmV0dXJuICdcIic7Ci0KLSAgICAvLyBXZSBleHBlY3QgZXNjYXBlIHNlcXVl
bmNlcyB0byBoYXZlIGJlZW4gdmFsaWRhdGVkIHNlcGFyYXRlbHkuCi0gICAgZGVmYXVsdDogICBy
ZXR1cm4gJz8nOwotICB9Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotRXJyb3JD
b2xsZWN0b3I6On5FcnJvckNvbGxlY3RvcigpIHt9Ci0KLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVG9rZW5p
emVyOjpUb2tlbml6ZXIoWmVyb0NvcHlJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgICAgICAgICAg
ICAgICAgICBFcnJvckNvbGxlY3RvciogZXJyb3JfY29sbGVjdG9yKQotICA6IGlucHV0XyhpbnB1
dCksCi0gICAgZXJyb3JfY29sbGVjdG9yXyhlcnJvcl9jb2xsZWN0b3IpLAotICAgIGJ1ZmZlcl8o
TlVMTCksCi0gICAgYnVmZmVyX3NpemVfKDApLAotICAgIGJ1ZmZlcl9wb3NfKDApLAotICAgIHJl
YWRfZXJyb3JfKGZhbHNlKSwKLSAgICBsaW5lXygwKSwKLSAgICBjb2x1bW5fKDApLAotICAgIHJl
Y29yZF90YXJnZXRfKE5VTEwpLAotICAgIHJlY29yZF9zdGFydF8oLTEpLAotICAgIGFsbG93X2Zf
YWZ0ZXJfZmxvYXRfKGZhbHNlKSwKLSAgICBjb21tZW50X3N0eWxlXyhDUFBfQ09NTUVOVF9TVFlM
RSksCi0gICAgcmVxdWlyZV9zcGFjZV9hZnRlcl9udW1iZXJfKHRydWUpLAotICAgIGFsbG93X211
bHRpbGluZV9zdHJpbmdzXyhmYWxzZSkgewotCi0gIGN1cnJlbnRfLmxpbmUgPSAwOwotICBjdXJy
ZW50Xy5jb2x1bW4gPSAwOwotICBjdXJyZW50Xy5lbmRfY29sdW1uID0gMDsKLSAgY3VycmVudF8u
dHlwZSA9IFRZUEVfU1RBUlQ7Ci0KLSAgUmVmcmVzaCgpOwotfQotCi1Ub2tlbml6ZXI6On5Ub2tl
bml6ZXIoKSB7Ci0gIC8vIElmIHdlIGhhZCBhbnkgYnVmZmVyIGxlZnQgdW5yZWFkLCByZXR1cm4g
aXQgdG8gdGhlIHVuZGVybHlpbmcgc3RyZWFtCi0gIC8vIHNvIHRoYXQgc29tZW9uZSBlbHNlIGNh
biByZWFkIGl0LgotICBpZiAoYnVmZmVyX3NpemVfID4gYnVmZmVyX3Bvc18pIHsKLSAgICBpbnB1
dF8tPkJhY2tVcChidWZmZXJfc2l6ZV8gLSBidWZmZXJfcG9zXyk7Ci0gIH0KLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gSW50ZXJuYWwgaGVscGVycy4KLQotdm9pZCBUb2tlbml6ZXI6Ok5leHRDaGFy
KCkgewotICAvLyBVcGRhdGUgb3VyIGxpbmUgYW5kIGNvbHVtbiBjb3VudGVycyBiYXNlZCBvbiB0
aGUgY2hhcmFjdGVyIGJlaW5nCi0gIC8vIGNvbnN1bWVkLgotICBpZiAoY3VycmVudF9jaGFyXyA9
PSAnXG4nKSB7Ci0gICAgKytsaW5lXzsKLSAgICBjb2x1bW5fID0gMDsKLSAgfSBlbHNlIGlmIChj
dXJyZW50X2NoYXJfID09ICdcdCcpIHsKLSAgICBjb2x1bW5fICs9IGtUYWJXaWR0aCAtIGNvbHVt
bl8gJSBrVGFiV2lkdGg7Ci0gIH0gZWxzZSB7Ci0gICAgKytjb2x1bW5fOwotICB9Ci0KLSAgLy8g
QWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIuCi0gICsrYnVmZmVyX3Bvc187Ci0gIGlmIChi
dWZmZXJfcG9zXyA8IGJ1ZmZlcl9zaXplXykgewotICAgIGN1cnJlbnRfY2hhcl8gPSBidWZmZXJf
W2J1ZmZlcl9wb3NfXTsKLSAgfSBlbHNlIHsKLSAgICBSZWZyZXNoKCk7Ci0gIH0KLX0KLQotdm9p
ZCBUb2tlbml6ZXI6OlJlZnJlc2goKSB7Ci0gIGlmIChyZWFkX2Vycm9yXykgewotICAgIGN1cnJl
bnRfY2hhcl8gPSAnXDAnOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIElmIHdlJ3JlIGluIGEg
dG9rZW4sIGFwcGVuZCB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIHRvIGl0LgotICBpZiAocmVjb3Jk
X3RhcmdldF8gIT0gTlVMTCAmJiByZWNvcmRfc3RhcnRfIDwgYnVmZmVyX3NpemVfKSB7Ci0gICAg
cmVjb3JkX3RhcmdldF8tPmFwcGVuZChidWZmZXJfICsgcmVjb3JkX3N0YXJ0XywgYnVmZmVyX3Np
emVfIC0gcmVjb3JkX3N0YXJ0Xyk7Ci0gICAgcmVjb3JkX3N0YXJ0XyA9IDA7Ci0gIH0KLQotICBj
b25zdCB2b2lkKiBkYXRhID0gTlVMTDsKLSAgYnVmZmVyXyA9IE5VTEw7Ci0gIGJ1ZmZlcl9wb3Nf
ID0gMDsKLSAgZG8gewotICAgIGlmICghaW5wdXRfLT5OZXh0KCZkYXRhLCAmYnVmZmVyX3NpemVf
KSkgewotICAgICAgLy8gZW5kIG9mIHN0cmVhbSAob3IgcmVhZCBlcnJvcikKLSAgICAgIGJ1ZmZl
cl9zaXplXyA9IDA7Ci0gICAgICByZWFkX2Vycm9yXyA9IHRydWU7Ci0gICAgICBjdXJyZW50X2No
YXJfID0gJ1wwJzsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0gd2hpbGUgKGJ1ZmZlcl9zaXpl
XyA9PSAwKTsKLQotICBidWZmZXJfID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpOwot
Ci0gIGN1cnJlbnRfY2hhcl8gPSBidWZmZXJfWzBdOwotfQotCi1pbmxpbmUgdm9pZCBUb2tlbml6
ZXI6OlJlY29yZFRvKHN0cmluZyogdGFyZ2V0KSB7Ci0gIHJlY29yZF90YXJnZXRfID0gdGFyZ2V0
OwotICByZWNvcmRfc3RhcnRfID0gYnVmZmVyX3Bvc187Ci19Ci0KLWlubGluZSB2b2lkIFRva2Vu
aXplcjo6U3RvcFJlY29yZGluZygpIHsKLSAgLy8gTm90ZTogIFRoZSBpZigpIGlzIG5lY2Vzc2Fy
eSBiZWNhdXNlIHNvbWUgU1RMIGltcGxlbWVudGF0aW9ucyBjcmFzaCB3aGVuCi0gIC8vICAgeW91
IGNhbGwgc3RyaW5nOjphcHBlbmQoTlVMTCwgMCksIHByZXN1bWFibHkgYmVjYXVzZSB0aGV5IGFy
ZSB0cnlpbmcgdG8KLSAgLy8gICBiZSBoZWxwZnVsIGJ5IGRldGVjdGluZyB0aGUgTlVMTCBwb2lu
dGVyLCBldmVuIHRob3VnaCB0aGVyZSdzIG5vdGhpbmcKLSAgLy8gICB3cm9uZyB3aXRoIHJlYWRp
bmcgemVybyBieXRlcyBmcm9tIE5VTEwuCi0gIGlmIChidWZmZXJfcG9zXyAhPSByZWNvcmRfc3Rh
cnRfKSB7Ci0gICAgcmVjb3JkX3RhcmdldF8tPmFwcGVuZChidWZmZXJfICsgcmVjb3JkX3N0YXJ0
XywgYnVmZmVyX3Bvc18gLSByZWNvcmRfc3RhcnRfKTsKLSAgfQotICByZWNvcmRfdGFyZ2V0XyA9
IE5VTEw7Ci0gIHJlY29yZF9zdGFydF8gPSAtMTsKLX0KLQotaW5saW5lIHZvaWQgVG9rZW5pemVy
OjpTdGFydFRva2VuKCkgewotICBjdXJyZW50Xy50eXBlID0gVFlQRV9TVEFSVDsgICAgLy8gSnVz
dCBmb3IgdGhlIHNha2Ugb2YgaW5pdGlhbGl6aW5nIGl0LgotICBjdXJyZW50Xy50ZXh0LmNsZWFy
KCk7Ci0gIGN1cnJlbnRfLmxpbmUgPSBsaW5lXzsKLSAgY3VycmVudF8uY29sdW1uID0gY29sdW1u
XzsKLSAgUmVjb3JkVG8oJmN1cnJlbnRfLnRleHQpOwotfQotCi1pbmxpbmUgdm9pZCBUb2tlbml6
ZXI6OkVuZFRva2VuKCkgewotICBTdG9wUmVjb3JkaW5nKCk7Ci0gIGN1cnJlbnRfLmVuZF9jb2x1
bW4gPSBjb2x1bW5fOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIZWxwZXIgbWV0aG9kcyB0aGF0
IGNvbnN1bWUgY2hhcmFjdGVycy4KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyQ2xhc3M+
Ci1pbmxpbmUgYm9vbCBUb2tlbml6ZXI6Okxvb2tpbmdBdCgpIHsKLSAgcmV0dXJuIENoYXJhY3Rl
ckNsYXNzOjpJbkNsYXNzKGN1cnJlbnRfY2hhcl8pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJDbGFzcz4KLWlubGluZSBib29sIFRva2VuaXplcjo6VHJ5Q29uc3VtZU9uZSgpIHsK
LSAgaWYgKENoYXJhY3RlckNsYXNzOjpJbkNsYXNzKGN1cnJlbnRfY2hhcl8pKSB7Ci0gICAgTmV4
dENoYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLX0KLQotaW5saW5lIGJvb2wgVG9rZW5pemVyOjpUcnlDb25zdW1lKGNoYXIgYykgewot
ICBpZiAoY3VycmVudF9jaGFyXyA9PSBjKSB7Ci0gICAgTmV4dENoYXIoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyQ2xhc3M+Ci1pbmxpbmUgdm9pZCBUb2tlbml6ZXI6OkNvbnN1bWVa
ZXJvT3JNb3JlKCkgewotICB3aGlsZSAoQ2hhcmFjdGVyQ2xhc3M6OkluQ2xhc3MoY3VycmVudF9j
aGFyXykpIHsKLSAgICBOZXh0Q2hhcigpOwotICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlckNsYXNzPgotaW5saW5lIHZvaWQgVG9rZW5pemVyOjpDb25zdW1lT25lT3JNb3JlKGNv
bnN0IGNoYXIqIGVycm9yKSB7Ci0gIGlmICghQ2hhcmFjdGVyQ2xhc3M6OkluQ2xhc3MoY3VycmVu
dF9jaGFyXykpIHsKLSAgICBBZGRFcnJvcihlcnJvcik7Ci0gIH0gZWxzZSB7Ci0gICAgZG8gewot
ICAgICAgTmV4dENoYXIoKTsKLSAgICB9IHdoaWxlIChDaGFyYWN0ZXJDbGFzczo6SW5DbGFzcyhj
dXJyZW50X2NoYXJfKSk7Ci0gIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWV0aG9kcyB0aGF0
IHJlYWQgd2hvbGUgcGF0dGVybnMgbWF0Y2hpbmcgY2VydGFpbiBraW5kcyBvZiB0b2tlbnMKLS8v
IG9yIGNvbW1lbnRzLgotCi12b2lkIFRva2VuaXplcjo6Q29uc3VtZVN0cmluZyhjaGFyIGRlbGlt
aXRlcikgewotICB3aGlsZSAodHJ1ZSkgewotICAgIHN3aXRjaCAoY3VycmVudF9jaGFyXykgewot
ICAgICAgY2FzZSAnXDAnOgotICAgICAgICBBZGRFcnJvcigiVW5leHBlY3RlZCBlbmQgb2Ygc3Ry
aW5nLiIpOwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgJ1xuJzogewotICAgICAgICBp
ZiAoIWFsbG93X211bHRpbGluZV9zdHJpbmdzXykgewotICAgICAgICAgIEFkZEVycm9yKCJTdHJp
bmcgbGl0ZXJhbHMgY2Fubm90IGNyb3NzIGxpbmUgYm91bmRhcmllcy4iKTsKLSAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTmV4dENoYXIoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0KLSAgICAgIGNhc2UgJ1xcJzogewotICAgICAgICAvLyBBbiBlc2NhcGUgc2VxdWVu
Y2UuCi0gICAgICAgIE5leHRDaGFyKCk7Ci0gICAgICAgIGlmIChUcnlDb25zdW1lT25lPEVzY2Fw
ZT4oKSkgewotICAgICAgICAgIC8vIFZhbGlkIGVzY2FwZSBzZXF1ZW5jZS4KLSAgICAgICAgfSBl
bHNlIGlmIChUcnlDb25zdW1lT25lPE9jdGFsRGlnaXQ+KCkpIHsKLSAgICAgICAgICAvLyBQb3Nz
aWJseSBmb2xsb3dlZCBieSB0d28gbW9yZSBvY3RhbCBkaWdpdHMsIGJ1dCB0aGVzZSB3aWxsCi0g
ICAgICAgICAgLy8ganVzdCBiZSBjb25zdW1lZCBieSB0aGUgbWFpbiBsb29wIGFueXdheSBzbyB3
ZSBkb24ndCBuZWVkCi0gICAgICAgICAgLy8gdG8gZG8gc28gZXhwbGljaXRseSBoZXJlLgotICAg
ICAgICB9IGVsc2UgaWYgKFRyeUNvbnN1bWUoJ3gnKSkgewotICAgICAgICAgIGlmICghVHJ5Q29u
c3VtZU9uZTxIZXhEaWdpdD4oKSkgewotICAgICAgICAgICAgQWRkRXJyb3IoIkV4cGVjdGVkIGhl
eCBkaWdpdHMgZm9yIGVzY2FwZSBzZXF1ZW5jZS4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
Ly8gUG9zc2libHkgZm9sbG93ZWQgYnkgYW5vdGhlciBoZXggZGlnaXQsIGJ1dCBhZ2FpbiB3ZSBk
b24ndCBjYXJlLgotICAgICAgICB9IGVsc2UgaWYgKFRyeUNvbnN1bWUoJ3UnKSkgewotICAgICAg
ICAgIGlmICghVHJ5Q29uc3VtZU9uZTxIZXhEaWdpdD4oKSB8fAotICAgICAgICAgICAgICAhVHJ5
Q29uc3VtZU9uZTxIZXhEaWdpdD4oKSB8fAotICAgICAgICAgICAgICAhVHJ5Q29uc3VtZU9uZTxI
ZXhEaWdpdD4oKSB8fAotICAgICAgICAgICAgICAhVHJ5Q29uc3VtZU9uZTxIZXhEaWdpdD4oKSkg
ewotICAgICAgICAgICAgQWRkRXJyb3IoIkV4cGVjdGVkIGZvdXIgaGV4IGRpZ2l0cyBmb3IgXFx1
IGVzY2FwZSBzZXF1ZW5jZS4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoVHJ5
Q29uc3VtZSgnVScpKSB7Ci0gICAgICAgICAgLy8gV2UgZXhwZWN0IDggaGV4IGRpZ2l0czsgYnV0
IG9ubHkgdGhlIHJhbmdlIHVwIHRvIDB4MTBmZmZmIGlzCi0gICAgICAgICAgLy8gbGVnYWwuCi0g
ICAgICAgICAgaWYgKCFUcnlDb25zdW1lKCcwJykgfHwKLSAgICAgICAgICAgICAgIVRyeUNvbnN1
bWUoJzAnKSB8fAotICAgICAgICAgICAgICAhKFRyeUNvbnN1bWUoJzAnKSB8fCBUcnlDb25zdW1l
KCcxJykpIHx8Ci0gICAgICAgICAgICAgICFUcnlDb25zdW1lT25lPEhleERpZ2l0PigpIHx8Ci0g
ICAgICAgICAgICAgICFUcnlDb25zdW1lT25lPEhleERpZ2l0PigpIHx8Ci0gICAgICAgICAgICAg
ICFUcnlDb25zdW1lT25lPEhleERpZ2l0PigpIHx8Ci0gICAgICAgICAgICAgICFUcnlDb25zdW1l
T25lPEhleERpZ2l0PigpIHx8Ci0gICAgICAgICAgICAgICFUcnlDb25zdW1lT25lPEhleERpZ2l0
PigpKSB7Ci0gICAgICAgICAgICBBZGRFcnJvcigiRXhwZWN0ZWQgZWlnaHQgaGV4IGRpZ2l0cyB1
cCB0byAxMGZmZmYgZm9yIFxcVSBlc2NhcGUgIgotICAgICAgICAgICAgICAgICAgICAgInNlcXVl
bmNlIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEFkZEVycm9y
KCJJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSBpbiBzdHJpbmcgbGl0ZXJhbC4iKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDogewotICAgICAgICBp
ZiAoY3VycmVudF9jaGFyXyA9PSBkZWxpbWl0ZXIpIHsKLSAgICAgICAgICBOZXh0Q2hhcigpOwot
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBOZXh0Q2hhcigpOwotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotVG9rZW5pemVyOjpUb2tlblR5cGUg
VG9rZW5pemVyOjpDb25zdW1lTnVtYmVyKGJvb2wgc3RhcnRlZF93aXRoX3plcm8sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkX3dpdGhf
ZG90KSB7Ci0gIGJvb2wgaXNfZmxvYXQgPSBmYWxzZTsKLQotICBpZiAoc3RhcnRlZF93aXRoX3pl
cm8gJiYgKFRyeUNvbnN1bWUoJ3gnKSB8fCBUcnlDb25zdW1lKCdYJykpKSB7Ci0gICAgLy8gQSBo
ZXggbnVtYmVyIChzdGFydGVkIHdpdGggIjB4IikuCi0gICAgQ29uc3VtZU9uZU9yTW9yZTxIZXhE
aWdpdD4oIlwiMHhcIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGhleCBkaWdpdHMuIik7Ci0KLSAgfSBl
bHNlIGlmIChzdGFydGVkX3dpdGhfemVybyAmJiBMb29raW5nQXQ8RGlnaXQ+KCkpIHsKLSAgICAv
LyBBbiBvY3RhbCBudW1iZXIgKGhhZCBhIGxlYWRpbmcgemVybykuCi0gICAgQ29uc3VtZVplcm9P
ck1vcmU8T2N0YWxEaWdpdD4oKTsKLSAgICBpZiAoTG9va2luZ0F0PERpZ2l0PigpKSB7Ci0gICAg
ICBBZGRFcnJvcigiTnVtYmVycyBzdGFydGluZyB3aXRoIGxlYWRpbmcgemVybyBtdXN0IGJlIGlu
IG9jdGFsLiIpOwotICAgICAgQ29uc3VtZVplcm9Pck1vcmU8RGlnaXQ+KCk7Ci0gICAgfQotCi0g
IH0gZWxzZSB7Ci0gICAgLy8gQSBkZWNpbWFsIG51bWJlci4KLSAgICBpZiAoc3RhcnRlZF93aXRo
X2RvdCkgewotICAgICAgaXNfZmxvYXQgPSB0cnVlOwotICAgICAgQ29uc3VtZVplcm9Pck1vcmU8
RGlnaXQ+KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIENvbnN1bWVaZXJvT3JNb3JlPERpZ2l0Pigp
OwotCi0gICAgICBpZiAoVHJ5Q29uc3VtZSgnLicpKSB7Ci0gICAgICAgIGlzX2Zsb2F0ID0gdHJ1
ZTsKLSAgICAgICAgQ29uc3VtZVplcm9Pck1vcmU8RGlnaXQ+KCk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKFRyeUNvbnN1bWUoJ2UnKSB8fCBUcnlDb25zdW1lKCdFJykpIHsKLSAgICAgIGlz
X2Zsb2F0ID0gdHJ1ZTsKLSAgICAgIFRyeUNvbnN1bWUoJy0nKSB8fCBUcnlDb25zdW1lKCcrJyk7
Ci0gICAgICBDb25zdW1lT25lT3JNb3JlPERpZ2l0PigiXCJlXCIgbXVzdCBiZSBmb2xsb3dlZCBi
eSBleHBvbmVudC4iKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsb3dfZl9hZnRlcl9mbG9hdF8gJiYg
KFRyeUNvbnN1bWUoJ2YnKSB8fCBUcnlDb25zdW1lKCdGJykpKSB7Ci0gICAgICBpc19mbG9hdCA9
IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKExvb2tpbmdBdDxMZXR0ZXI+KCkgJiYgcmVxdWly
ZV9zcGFjZV9hZnRlcl9udW1iZXJfKSB7Ci0gICAgQWRkRXJyb3IoIk5lZWQgc3BhY2UgYmV0d2Vl
biBudW1iZXIgYW5kIGlkZW50aWZpZXIuIik7Ci0gIH0gZWxzZSBpZiAoY3VycmVudF9jaGFyXyA9
PSAnLicpIHsKLSAgICBpZiAoaXNfZmxvYXQpIHsKLSAgICAgIEFkZEVycm9yKAotICAgICAgICAi
QWxyZWFkeSBzYXcgZGVjaW1hbCBwb2ludCBvciBleHBvbmVudDsgY2FuJ3QgaGF2ZSBhbm90aGVy
IG9uZS4iKTsKLSAgICB9IGVsc2UgewotICAgICAgQWRkRXJyb3IoIkhleCBhbmQgb2N0YWwgbnVt
YmVycyBtdXN0IGJlIGludGVnZXJzLiIpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBpc19mbG9h
dCA/IFRZUEVfRkxPQVQgOiBUWVBFX0lOVEVHRVI7Ci19Ci0KLXZvaWQgVG9rZW5pemVyOjpDb25z
dW1lTGluZUNvbW1lbnQoc3RyaW5nKiBjb250ZW50KSB7Ci0gIGlmIChjb250ZW50ICE9IE5VTEwp
IFJlY29yZFRvKGNvbnRlbnQpOwotCi0gIHdoaWxlIChjdXJyZW50X2NoYXJfICE9ICdcMCcgJiYg
Y3VycmVudF9jaGFyXyAhPSAnXG4nKSB7Ci0gICAgTmV4dENoYXIoKTsKLSAgfQotICBUcnlDb25z
dW1lKCdcbicpOwotCi0gIGlmIChjb250ZW50ICE9IE5VTEwpIFN0b3BSZWNvcmRpbmcoKTsKLX0K
LQotdm9pZCBUb2tlbml6ZXI6OkNvbnN1bWVCbG9ja0NvbW1lbnQoc3RyaW5nKiBjb250ZW50KSB7
Ci0gIGludCBzdGFydF9saW5lID0gbGluZV87Ci0gIGludCBzdGFydF9jb2x1bW4gPSBjb2x1bW5f
IC0gMjsKLQotICBpZiAoY29udGVudCAhPSBOVUxMKSBSZWNvcmRUbyhjb250ZW50KTsKLQotICB3
aGlsZSAodHJ1ZSkgewotICAgIHdoaWxlIChjdXJyZW50X2NoYXJfICE9ICdcMCcgJiYKLSAgICAg
ICAgICAgY3VycmVudF9jaGFyXyAhPSAnKicgJiYKLSAgICAgICAgICAgY3VycmVudF9jaGFyXyAh
PSAnLycgJiYKLSAgICAgICAgICAgY3VycmVudF9jaGFyXyAhPSAnXG4nKSB7Ci0gICAgICBOZXh0
Q2hhcigpOwotICAgIH0KLQotICAgIGlmIChUcnlDb25zdW1lKCdcbicpKSB7Ci0gICAgICBpZiAo
Y29udGVudCAhPSBOVUxMKSBTdG9wUmVjb3JkaW5nKCk7Ci0KLSAgICAgIC8vIENvbnN1bWUgbGVh
ZGluZyB3aGl0ZXNwYWNlIGFuZCBhc3RlcmlzazsKLSAgICAgIENvbnN1bWVaZXJvT3JNb3JlPFdo
aXRlc3BhY2VOb05ld2xpbmU+KCk7Ci0gICAgICBpZiAoVHJ5Q29uc3VtZSgnKicpKSB7Ci0gICAg
ICAgIGlmIChUcnlDb25zdW1lKCcvJykpIHsKLSAgICAgICAgICAvLyBFbmQgb2YgY29tbWVudC4K
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoY29udGVu
dCAhPSBOVUxMKSBSZWNvcmRUbyhjb250ZW50KTsKLSAgICB9IGVsc2UgaWYgKFRyeUNvbnN1bWUo
JyonKSAmJiBUcnlDb25zdW1lKCcvJykpIHsKLSAgICAgIC8vIEVuZCBvZiBjb21tZW50LgotICAg
ICAgaWYgKGNvbnRlbnQgIT0gTlVMTCkgewotICAgICAgICBTdG9wUmVjb3JkaW5nKCk7Ci0gICAg
ICAgIC8vIFN0cmlwIHRyYWlsaW5nICIqLyIuCi0gICAgICAgIGNvbnRlbnQtPmVyYXNlKGNvbnRl
bnQtPnNpemUoKSAtIDIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIGlmIChU
cnlDb25zdW1lKCcvJykgJiYgY3VycmVudF9jaGFyXyA9PSAnKicpIHsKLSAgICAgIC8vIE5vdGU6
ICBXZSBkaWRuJ3QgY29uc3VtZSB0aGUgJyonIGJlY2F1c2UgaWYgdGhlcmUgaXMgYSAnLycgYWZ0
ZXIgaXQKLSAgICAgIC8vICAgd2Ugd2FudCB0byBpbnRlcnByZXQgdGhhdCBhcyB0aGUgZW5kIG9m
IHRoZSBjb21tZW50LgotICAgICAgQWRkRXJyb3IoCi0gICAgICAgICJcIi8qXCIgaW5zaWRlIGJs
b2NrIGNvbW1lbnQuICBCbG9jayBjb21tZW50cyBjYW5ub3QgYmUgbmVzdGVkLiIpOwotICAgIH0g
ZWxzZSBpZiAoY3VycmVudF9jaGFyXyA9PSAnXDAnKSB7Ci0gICAgICBBZGRFcnJvcigiRW5kLW9m
LWZpbGUgaW5zaWRlIGJsb2NrIGNvbW1lbnQuIik7Ci0gICAgICBlcnJvcl9jb2xsZWN0b3JfLT5B
ZGRFcnJvcigKLSAgICAgICAgc3RhcnRfbGluZSwgc3RhcnRfY29sdW1uLCAiICBDb21tZW50IHN0
YXJ0ZWQgaGVyZS4iKTsKLSAgICAgIGlmIChjb250ZW50ICE9IE5VTEwpIFN0b3BSZWNvcmRpbmco
KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotfQotCi1Ub2tlbml6ZXI6Ok5leHRDb21tZW50
U3RhdHVzIFRva2VuaXplcjo6VHJ5Q29uc3VtZUNvbW1lbnRTdGFydCgpIHsKLSAgaWYgKGNvbW1l
bnRfc3R5bGVfID09IENQUF9DT01NRU5UX1NUWUxFICYmIFRyeUNvbnN1bWUoJy8nKSkgewotICAg
IGlmIChUcnlDb25zdW1lKCcvJykpIHsKLSAgICAgIHJldHVybiBMSU5FX0NPTU1FTlQ7Ci0gICAg
fSBlbHNlIGlmIChUcnlDb25zdW1lKCcqJykpIHsKLSAgICAgIHJldHVybiBCTE9DS19DT01NRU5U
OwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBPb3BzLCBpdCB3YXMganVzdCBhIHNsYXNoLiAgUmV0
dXJuIGl0LgotICAgICAgY3VycmVudF8udHlwZSA9IFRZUEVfU1lNQk9MOwotICAgICAgY3VycmVu
dF8udGV4dCA9ICIvIjsKLSAgICAgIGN1cnJlbnRfLmxpbmUgPSBsaW5lXzsKLSAgICAgIGN1cnJl
bnRfLmNvbHVtbiA9IGNvbHVtbl8gLSAxOwotICAgICAgY3VycmVudF8uZW5kX2NvbHVtbiA9IGNv
bHVtbl87Ci0gICAgICByZXR1cm4gU0xBU0hfTk9UX0NPTU1FTlQ7Ci0gICAgfQotICB9IGVsc2Ug
aWYgKGNvbW1lbnRfc3R5bGVfID09IFNIX0NPTU1FTlRfU1RZTEUgJiYgVHJ5Q29uc3VtZSgnIycp
KSB7Ci0gICAgcmV0dXJuIExJTkVfQ09NTUVOVDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gTk9f
Q09NTUVOVDsKLSAgfQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgVG9rZW5pemVyOjpOZXh0
KCkgewotICBwcmV2aW91c18gPSBjdXJyZW50XzsKLQotICB3aGlsZSAoIXJlYWRfZXJyb3JfKSB7
Ci0gICAgQ29uc3VtZVplcm9Pck1vcmU8V2hpdGVzcGFjZT4oKTsKLQotICAgIHN3aXRjaCAoVHJ5
Q29uc3VtZUNvbW1lbnRTdGFydCgpKSB7Ci0gICAgICBjYXNlIExJTkVfQ09NTUVOVDoKLSAgICAg
ICAgQ29uc3VtZUxpbmVDb21tZW50KE5VTEwpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIGNh
c2UgQkxPQ0tfQ09NTUVOVDoKLSAgICAgICAgQ29uc3VtZUJsb2NrQ29tbWVudChOVUxMKTsKLSAg
ICAgICAgY29udGludWU7Ci0gICAgICBjYXNlIFNMQVNIX05PVF9DT01NRU5UOgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgTk9fQ09NTUVOVDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgLy8gQ2hlY2sgZm9yIEVPRiBiZWZvcmUgY29udGludWluZy4KLSAgICBpZiAocmVh
ZF9lcnJvcl8pIGJyZWFrOwotCi0gICAgaWYgKExvb2tpbmdBdDxVbnByaW50YWJsZT4oKSB8fCBj
dXJyZW50X2NoYXJfID09ICdcMCcpIHsKLSAgICAgIEFkZEVycm9yKCJJbnZhbGlkIGNvbnRyb2wg
Y2hhcmFjdGVycyBlbmNvdW50ZXJlZCBpbiB0ZXh0LiIpOwotICAgICAgTmV4dENoYXIoKTsKLSAg
ICAgIC8vIFNraXAgbW9yZSB1bnByaW50YWJsZSBjaGFyYWN0ZXJzLCB0b28uICBCdXQsIHJlbWVt
YmVyIHRoYXQgJ1wwJyBpcwotICAgICAgLy8gYWxzbyB3aGF0IGN1cnJlbnRfY2hhcl8gaXMgc2V0
IHRvIGFmdGVyIEVPRiAvIHJlYWQgZXJyb3IuICBXZSBoYXZlCi0gICAgICAvLyB0byBiZSBjYXJl
ZnVsIG5vdCB0byBnbyBpbnRvIGFuIGluZmluaXRlIGxvb3Agb2YgdHJ5aW5nIHRvIGNvbnN1bWUK
LSAgICAgIC8vIGl0LCBzbyBtYWtlIHN1cmUgdG8gY2hlY2sgcmVhZF9lcnJvcl8gZXhwbGljaXRs
eSBiZWZvcmUgY29uc3VtaW5nCi0gICAgICAvLyAnXDAnLgotICAgICAgd2hpbGUgKFRyeUNvbnN1
bWVPbmU8VW5wcmludGFibGU+KCkgfHwKLSAgICAgICAgICAgICAoIXJlYWRfZXJyb3JfICYmIFRy
eUNvbnN1bWUoJ1wwJykpKSB7Ci0gICAgICAgIC8vIElnbm9yZS4KLSAgICAgIH0KLQotICAgIH0g
ZWxzZSB7Ci0gICAgICAvLyBSZWFkaW5nIHNvbWUgc29ydCBvZiB0b2tlbi4KLSAgICAgIFN0YXJ0
VG9rZW4oKTsKLQotICAgICAgaWYgKFRyeUNvbnN1bWVPbmU8TGV0dGVyPigpKSB7Ci0gICAgICAg
IENvbnN1bWVaZXJvT3JNb3JlPEFscGhhbnVtZXJpYz4oKTsKLSAgICAgICAgY3VycmVudF8udHlw
ZSA9IFRZUEVfSURFTlRJRklFUjsKLSAgICAgIH0gZWxzZSBpZiAoVHJ5Q29uc3VtZSgnMCcpKSB7
Ci0gICAgICAgIGN1cnJlbnRfLnR5cGUgPSBDb25zdW1lTnVtYmVyKHRydWUsIGZhbHNlKTsKLSAg
ICAgIH0gZWxzZSBpZiAoVHJ5Q29uc3VtZSgnLicpKSB7Ci0gICAgICAgIC8vIFRoaXMgY291bGQg
YmUgdGhlIGJlZ2lubmluZyBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgb3IgaXQgY291bGQK
LSAgICAgICAgLy8ganVzdCBiZSBhICcuJyBzeW1ib2wuCi0KLSAgICAgICAgaWYgKFRyeUNvbnN1
bWVPbmU8RGlnaXQ+KCkpIHsKLSAgICAgICAgICAvLyBJdCdzIGEgZmxvYXRpbmctcG9pbnQgbnVt
YmVyLgotICAgICAgICAgIGlmIChwcmV2aW91c18udHlwZSA9PSBUWVBFX0lERU5USUZJRVIgJiYK
LSAgICAgICAgICAgICAgY3VycmVudF8ubGluZSA9PSBwcmV2aW91c18ubGluZSAmJgotICAgICAg
ICAgICAgICBjdXJyZW50Xy5jb2x1bW4gPT0gcHJldmlvdXNfLmVuZF9jb2x1bW4pIHsKLSAgICAg
ICAgICAgIC8vIFdlIGRvbid0IGFjY2VwdCBzeW50YXggbGlrZSAiYmxhaC4xMjMiLgotICAgICAg
ICAgICAgZXJyb3JfY29sbGVjdG9yXy0+QWRkRXJyb3IobGluZV8sIGNvbHVtbl8gLSAyLAotICAg
ICAgICAgICAgICAiTmVlZCBzcGFjZSBiZXR3ZWVuIGlkZW50aWZpZXIgYW5kIGRlY2ltYWwgcG9p
bnQuIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGN1cnJlbnRfLnR5cGUgPSBDb25zdW1lTnVt
YmVyKGZhbHNlLCB0cnVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjdXJyZW50Xy50
eXBlID0gVFlQRV9TWU1CT0w7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoVHJ5Q29uc3Vt
ZU9uZTxEaWdpdD4oKSkgewotICAgICAgICBjdXJyZW50Xy50eXBlID0gQ29uc3VtZU51bWJlcihm
YWxzZSwgZmFsc2UpOwotICAgICAgfSBlbHNlIGlmIChUcnlDb25zdW1lKCdcIicpKSB7Ci0gICAg
ICAgIENvbnN1bWVTdHJpbmcoJ1wiJyk7Ci0gICAgICAgIGN1cnJlbnRfLnR5cGUgPSBUWVBFX1NU
UklORzsKLSAgICAgIH0gZWxzZSBpZiAoVHJ5Q29uc3VtZSgnXCcnKSkgewotICAgICAgICBDb25z
dW1lU3RyaW5nKCdcJycpOwotICAgICAgICBjdXJyZW50Xy50eXBlID0gVFlQRV9TVFJJTkc7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICAvLyBDaGVjayBpZiB0aGUgaGlnaCBvcmRlciBiaXQgaXMg
c2V0LgotICAgICAgICBpZiAoY3VycmVudF9jaGFyXyAmIDB4ODApIHsKLSAgICAgICAgICBlcnJv
cl9jb2xsZWN0b3JfLT5BZGRFcnJvcihsaW5lXywgY29sdW1uXywKLSAgICAgICAgICAgICAgU3Ry
aW5nUHJpbnRmKCJJbnRlcnByZXRpbmcgbm9uIGFzY2lpIGNvZGVwb2ludCAlZC4iLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY3VycmVudF9j
aGFyXykpKTsKLSAgICAgICAgfQotICAgICAgICBOZXh0Q2hhcigpOwotICAgICAgICBjdXJyZW50
Xy50eXBlID0gVFlQRV9TWU1CT0w7Ci0gICAgICB9Ci0KLSAgICAgIEVuZFRva2VuKCk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBFT0YKLSAgY3VycmVudF8udHlwZSA9
IFRZUEVfRU5EOwotICBjdXJyZW50Xy50ZXh0LmNsZWFyKCk7Ci0gIGN1cnJlbnRfLmxpbmUgPSBs
aW5lXzsKLSAgY3VycmVudF8uY29sdW1uID0gY29sdW1uXzsKLSAgY3VycmVudF8uZW5kX2NvbHVt
biA9IGNvbHVtbl87Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHsKLQotLy8gSGVs
cGVyIGNsYXNzIGZvciBjb2xsZWN0aW5nIGNvbW1lbnRzIGFuZCBwdXR0aW5nIHRoZW0gaW4gdGhl
IHJpZ2h0IHBsYWNlcy4KLS8vCi0vLyBUaGlzIGJhc2ljYWxseSBqdXN0IGJ1ZmZlcnMgdGhlIG1v
c3QgcmVjZW50IGNvbW1lbnQgdW50aWwgaXQgY2FuIGJlIGRlY2lkZWQKLS8vIGV4YWN0bHkgd2hl
cmUgdGhhdCBjb21tZW50IHNob3VsZCBiZSBwbGFjZWQuICBXaGVuIEZsdXNoKCkgaXMgY2FsbGVk
LCB0aGUKLS8vIGN1cnJlbnQgY29tbWVudCBnb2VzIGludG8gZWl0aGVyIHByZXZfdHJhaWxpbmdf
Y29tbWVudHMgb3IgZGV0YWNoZWRfY29tbWVudHMuCi0vLyBXaGVuIHRoZSBDb21tZW50Q29sbGVj
dG9yIGlzIGRlc3Ryb3llZCwgdGhlIGxhc3QgYnVmZmVyZWQgY29tbWVudCBnb2VzIGludG8KLS8v
IG5leHRfbGVhZGluZ19jb21tZW50cy4KLWNsYXNzIENvbW1lbnRDb2xsZWN0b3IgewotIHB1Ymxp
YzoKLSAgQ29tbWVudENvbGxlY3RvcihzdHJpbmcqIHByZXZfdHJhaWxpbmdfY29tbWVudHMsCi0g
ICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4qIGRldGFjaGVkX2NvbW1lbnRzLAotICAg
ICAgICAgICAgICAgICAgIHN0cmluZyogbmV4dF9sZWFkaW5nX2NvbW1lbnRzKQotICAgICAgOiBw
cmV2X3RyYWlsaW5nX2NvbW1lbnRzXyhwcmV2X3RyYWlsaW5nX2NvbW1lbnRzKSwKLSAgICAgICAg
ZGV0YWNoZWRfY29tbWVudHNfKGRldGFjaGVkX2NvbW1lbnRzKSwKLSAgICAgICAgbmV4dF9sZWFk
aW5nX2NvbW1lbnRzXyhuZXh0X2xlYWRpbmdfY29tbWVudHMpLAotICAgICAgICBoYXNfY29tbWVu
dF8oZmFsc2UpLAotICAgICAgICBpc19saW5lX2NvbW1lbnRfKGZhbHNlKSwKLSAgICAgICAgY2Fu
X2F0dGFjaF90b19wcmV2Xyh0cnVlKSB7Ci0gICAgaWYgKHByZXZfdHJhaWxpbmdfY29tbWVudHMg
IT0gTlVMTCkgcHJldl90cmFpbGluZ19jb21tZW50cy0+Y2xlYXIoKTsKLSAgICBpZiAoZGV0YWNo
ZWRfY29tbWVudHMgIT0gTlVMTCkgZGV0YWNoZWRfY29tbWVudHMtPmNsZWFyKCk7Ci0gICAgaWYg
KG5leHRfbGVhZGluZ19jb21tZW50cyAhPSBOVUxMKSBuZXh0X2xlYWRpbmdfY29tbWVudHMtPmNs
ZWFyKCk7Ci0gIH0KLQotICB+Q29tbWVudENvbGxlY3RvcigpIHsKLSAgICAvLyBXaGF0ZXZlciBp
cyBpbiB0aGUgYnVmZmVyIGlzIGEgbGVhZGluZyBjb21tZW50LgotICAgIGlmIChuZXh0X2xlYWRp
bmdfY29tbWVudHNfICE9IE5VTEwgJiYgaGFzX2NvbW1lbnRfKSB7Ci0gICAgICBjb21tZW50X2J1
ZmZlcl8uc3dhcCgqbmV4dF9sZWFkaW5nX2NvbW1lbnRzXyk7Ci0gICAgfQotICB9Ci0KLSAgLy8g
QWJvdXQgdG8gcmVhZCBhIGxpbmUgY29tbWVudC4gIEdldCB0aGUgY29tbWVudCBidWZmZXIgcG9p
bnRlciBpbiBvcmRlciB0bwotICAvLyByZWFkIGludG8gaXQuCi0gIHN0cmluZyogR2V0QnVmZmVy
Rm9yTGluZUNvbW1lbnQoKSB7Ci0gICAgLy8gV2Ugd2FudCB0byBjb21iaW5lIHdpdGggcHJldmlv
dXMgbGluZSBjb21tZW50cywgYnV0IG5vdCBibG9jayBjb21tZW50cy4KLSAgICBpZiAoaGFzX2Nv
bW1lbnRfICYmICFpc19saW5lX2NvbW1lbnRfKSB7Ci0gICAgICBGbHVzaCgpOwotICAgIH0KLSAg
ICBoYXNfY29tbWVudF8gPSB0cnVlOwotICAgIGlzX2xpbmVfY29tbWVudF8gPSB0cnVlOwotICAg
IHJldHVybiAmY29tbWVudF9idWZmZXJfOwotICB9Ci0KLSAgLy8gQWJvdXQgdG8gcmVhZCBhIGJs
b2NrIGNvbW1lbnQuICBHZXQgdGhlIGNvbW1lbnQgYnVmZmVyIHBvaW50ZXIgaW4gb3JkZXIgdG8K
LSAgLy8gcmVhZCBpbnRvIGl0LgotICBzdHJpbmcqIEdldEJ1ZmZlckZvckJsb2NrQ29tbWVudCgp
IHsKLSAgICBpZiAoaGFzX2NvbW1lbnRfKSB7Ci0gICAgICBGbHVzaCgpOwotICAgIH0KLSAgICBo
YXNfY29tbWVudF8gPSB0cnVlOwotICAgIGlzX2xpbmVfY29tbWVudF8gPSBmYWxzZTsKLSAgICBy
ZXR1cm4gJmNvbW1lbnRfYnVmZmVyXzsKLSAgfQotCi0gIHZvaWQgQ2xlYXJCdWZmZXIoKSB7Ci0g
ICAgY29tbWVudF9idWZmZXJfLmNsZWFyKCk7Ci0gICAgaGFzX2NvbW1lbnRfID0gZmFsc2U7Ci0g
IH0KLQotICAvLyBDYWxsZWQgb25jZSB3ZSBrbm93IHRoYXQgdGhlIGNvbW1lbnQgYnVmZmVyIGlz
IGNvbXBsZXRlIGFuZCBpcyAqbm90KgotICAvLyBjb25uZWN0ZWQgdG8gdGhlIG5leHQgdG9rZW4u
Ci0gIHZvaWQgRmx1c2goKSB7Ci0gICAgaWYgKGhhc19jb21tZW50XykgewotICAgICAgaWYgKGNh
bl9hdHRhY2hfdG9fcHJldl8pIHsKLSAgICAgICAgaWYgKHByZXZfdHJhaWxpbmdfY29tbWVudHNf
ICE9IE5VTEwpIHsKLSAgICAgICAgICBwcmV2X3RyYWlsaW5nX2NvbW1lbnRzXy0+YXBwZW5kKGNv
bW1lbnRfYnVmZmVyXyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FuX2F0dGFjaF90b19wcmV2XyA9
IGZhbHNlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGRldGFjaGVkX2NvbW1lbnRzXyAh
PSBOVUxMKSB7Ci0gICAgICAgICAgZGV0YWNoZWRfY29tbWVudHNfLT5wdXNoX2JhY2soY29tbWVu
dF9idWZmZXJfKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgQ2xlYXJCdWZmZXIoKTsKLSAg
ICB9Ci0gIH0KLQotICB2b2lkIERldGFjaEZyb21QcmV2KCkgewotICAgIGNhbl9hdHRhY2hfdG9f
cHJldl8gPSBmYWxzZTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgc3RyaW5nKiBwcmV2X3RyYWlsaW5n
X2NvbW1lbnRzXzsKLSAgdmVjdG9yPHN0cmluZz4qIGRldGFjaGVkX2NvbW1lbnRzXzsKLSAgc3Ry
aW5nKiBuZXh0X2xlYWRpbmdfY29tbWVudHNfOwotCi0gIHN0cmluZyBjb21tZW50X2J1ZmZlcl87
Ci0KLSAgLy8gVHJ1ZSBpZiBhbnkgY29tbWVudHMgd2VyZSByZWFkIGludG8gY29tbWVudF9idWZm
ZXJfLiAgVGhpcyBjYW4gYmUgdHJ1ZSBldmVuCi0gIC8vIGlmIGNvbW1lbnRfYnVmZmVyXyBpcyBl
bXB0eSwgbmFtZWx5IGlmIHRoZSBjb21tZW50IHdhcyAiLyoqLyIuCi0gIGJvb2wgaGFzX2NvbW1l
bnRfOwotCi0gIC8vIElzIHRoZSBjb21tZW50IGluIHRoZSBjb21tZW50IGJ1ZmZlciBhIGxpbmUg
Y29tbWVudD8KLSAgYm9vbCBpc19saW5lX2NvbW1lbnRfOwotCi0gIC8vIElzIGl0IHN0aWxsIHBv
c3NpYmxlIHRoYXQgd2UgY291bGQgYmUgcmVhZGluZyBhIGNvbW1lbnQgYXR0YWNoZWQgdG8gdGhl
Ci0gIC8vIHByZXZpb3VzIHRva2VuPwotICBib29sIGNhbl9hdHRhY2hfdG9fcHJldl87Ci19Owot
Ci19IC8vIG5hbWVzcGFjZQotCi1ib29sIFRva2VuaXplcjo6TmV4dFdpdGhDb21tZW50cyhzdHJp
bmcqIHByZXZfdHJhaWxpbmdfY29tbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ZWN0b3I8c3RyaW5nPiogZGV0YWNoZWRfY29tbWVudHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJpbmcqIG5leHRfbGVhZGluZ19jb21tZW50cykgewotICBDb21t
ZW50Q29sbGVjdG9yIGNvbGxlY3RvcihwcmV2X3RyYWlsaW5nX2NvbW1lbnRzLCBkZXRhY2hlZF9j
b21tZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9sZWFkaW5nX2NvbW1l
bnRzKTsKLQotICBpZiAoY3VycmVudF8udHlwZSA9PSBUWVBFX1NUQVJUKSB7Ci0gICAgLy8gSWdu
b3JlIHVuaWNvZGUgYnl0ZSBvcmRlciBtYXJrKEJPTSkgaWYgaXQgYXBwZWFycyBhdCB0aGUgZmls
ZQotICAgIC8vIGJlZ2lubmluZy4gT25seSBVVEYtOCBCT00gKDB4RUYgMHhCQiAweEJGKSBpcyBh
Y2NlcHRlZC4KLSAgICBpZiAoVHJ5Q29uc3VtZSgoY2hhcikweEVGKSkgewotICAgICAgaWYgKCFU
cnlDb25zdW1lKChjaGFyKTB4QkIpIHx8ICFUcnlDb25zdW1lKChjaGFyKTB4QkYpKSB7Ci0gICAg
ICAgIEFkZEVycm9yKCJQcm90byBmaWxlIHN0YXJ0cyB3aXRoIDB4RUYgYnV0IG5vdCBVVEYtOCBC
T00uICIKLSAgICAgICAgICAgICAgICAgIk9ubHkgVVRGLTggaXMgYWNjZXB0ZWQgZm9yIHByb3Rv
IGZpbGUuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY29s
bGVjdG9yLkRldGFjaEZyb21QcmV2KCk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gQSBjb21tZW50IGFw
cGVhcmluZyBvbiB0aGUgc2FtZSBsaW5lIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIHByZXZpb3Vz
Ci0gICAgLy8gZGVjbGFyYXRpb24uCi0gICAgQ29uc3VtZVplcm9Pck1vcmU8V2hpdGVzcGFjZU5v
TmV3bGluZT4oKTsKLSAgICBzd2l0Y2ggKFRyeUNvbnN1bWVDb21tZW50U3RhcnQoKSkgewotICAg
ICAgY2FzZSBMSU5FX0NPTU1FTlQ6Ci0gICAgICAgIENvbnN1bWVMaW5lQ29tbWVudChjb2xsZWN0
b3IuR2V0QnVmZmVyRm9yTGluZUNvbW1lbnQoKSk7Ci0KLSAgICAgICAgLy8gRG9uJ3QgYWxsb3cg
Y29tbWVudHMgb24gc3Vic2VxdWVudCBsaW5lcyB0byBiZSBhdHRhY2hlZCB0byBhIHRyYWlsaW5n
Ci0gICAgICAgIC8vIGNvbW1lbnQuCi0gICAgICAgIGNvbGxlY3Rvci5GbHVzaCgpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgQkxPQ0tfQ09NTUVOVDoKLSAgICAgICAgQ29uc3VtZUJsb2Nr
Q29tbWVudChjb2xsZWN0b3IuR2V0QnVmZmVyRm9yQmxvY2tDb21tZW50KCkpOwotCi0gICAgICAg
IENvbnN1bWVaZXJvT3JNb3JlPFdoaXRlc3BhY2VOb05ld2xpbmU+KCk7Ci0gICAgICAgIGlmICgh
VHJ5Q29uc3VtZSgnXG4nKSkgewotICAgICAgICAgIC8vIE9vcHMsIHRoZSBuZXh0IHRva2VuIGlz
IG9uIHRoZSBzYW1lIGxpbmUuICBJZiB3ZSByZWNvcmRlZCBhIGNvbW1lbnQKLSAgICAgICAgICAv
LyB3ZSByZWFsbHkgaGF2ZSBubyBpZGVhIHdoaWNoIHRva2VuIGl0IHNob3VsZCBiZSBhdHRhY2hl
ZCB0by4KLSAgICAgICAgICBjb2xsZWN0b3IuQ2xlYXJCdWZmZXIoKTsKLSAgICAgICAgICByZXR1
cm4gTmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRG9uJ3QgYWxsb3cgY29tbWVudHMg
b24gc3Vic2VxdWVudCBsaW5lcyB0byBiZSBhdHRhY2hlZCB0byBhIHRyYWlsaW5nCi0gICAgICAg
IC8vIGNvbW1lbnQuCi0gICAgICAgIGNvbGxlY3Rvci5GbHVzaCgpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgU0xBU0hfTk9UX0NPTU1FTlQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgY2FzZSBOT19DT01NRU5UOgotICAgICAgICBpZiAoIVRyeUNvbnN1bWUoJ1xuJykpIHsKLSAg
ICAgICAgICAvLyBUaGUgbmV4dCB0b2tlbiBpcyBvbiB0aGUgc2FtZSBsaW5lLiAgVGhlcmUgYXJl
IG5vIGNvbW1lbnRzLgotICAgICAgICAgIHJldHVybiBOZXh0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLy8gT0ssIHdlIGFyZSBub3cgb24gdGhlIGxpbmUg
KmFmdGVyKiB0aGUgcHJldmlvdXMgdG9rZW4uCi0gIHdoaWxlICh0cnVlKSB7Ci0gICAgQ29uc3Vt
ZVplcm9Pck1vcmU8V2hpdGVzcGFjZU5vTmV3bGluZT4oKTsKLQotICAgIHN3aXRjaCAoVHJ5Q29u
c3VtZUNvbW1lbnRTdGFydCgpKSB7Ci0gICAgICBjYXNlIExJTkVfQ09NTUVOVDoKLSAgICAgICAg
Q29uc3VtZUxpbmVDb21tZW50KGNvbGxlY3Rvci5HZXRCdWZmZXJGb3JMaW5lQ29tbWVudCgpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEJMT0NLX0NPTU1FTlQ6Ci0gICAgICAgIENvbnN1
bWVCbG9ja0NvbW1lbnQoY29sbGVjdG9yLkdldEJ1ZmZlckZvckJsb2NrQ29tbWVudCgpKTsKLQot
ICAgICAgICAvLyBDb25zdW1lIHRoZSByZXN0IG9mIHRoZSBsaW5lIHNvIHRoYXQgd2UgZG9uJ3Qg
aW50ZXJwcmV0IGl0IGFzIGEKLSAgICAgICAgLy8gYmxhbmsgbGluZSB0aGUgbmV4dCB0aW1lIGFy
b3VuZCB0aGUgbG9vcC4KLSAgICAgICAgQ29uc3VtZVplcm9Pck1vcmU8V2hpdGVzcGFjZU5vTmV3
bGluZT4oKTsKLSAgICAgICAgVHJ5Q29uc3VtZSgnXG4nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIFNMQVNIX05PVF9DT01NRU5UOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNh
c2UgTk9fQ09NTUVOVDoKLSAgICAgICAgaWYgKFRyeUNvbnN1bWUoJ1xuJykpIHsKLSAgICAgICAg
ICAvLyBDb21wbGV0ZWx5IGJsYW5rIGxpbmUuCi0gICAgICAgICAgY29sbGVjdG9yLkZsdXNoKCk7
Ci0gICAgICAgICAgY29sbGVjdG9yLkRldGFjaEZyb21QcmV2KCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgYm9vbCByZXN1bHQgPSBOZXh0KCk7Ci0gICAgICAgICAgaWYgKCFyZXN1bHQg
fHwKLSAgICAgICAgICAgICAgY3VycmVudF8udGV4dCA9PSAifSIgfHwKLSAgICAgICAgICAgICAg
Y3VycmVudF8udGV4dCA9PSAiXSIgfHwKLSAgICAgICAgICAgICAgY3VycmVudF8udGV4dCA9PSAi
KSIpIHsKLSAgICAgICAgICAgIC8vIEl0IGxvb2tzIGxpa2Ugd2UncmUgYXQgdGhlIGVuZCBvZiBh
IHNjb3BlLiAgSW4gdGhpcyBjYXNlIGl0Ci0gICAgICAgICAgICAvLyBtYWtlcyBubyBzZW5zZSB0
byBhdHRhY2ggYSBjb21tZW50IHRvIHRoZSBmb2xsb3dpbmcgdG9rZW4uCi0gICAgICAgICAgICBj
b2xsZWN0b3IuRmx1c2goKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8gVG9rZW4tcGFyc2luZyBoZWxwZXJzLiAgUmVtZW1iZXIgdGhhdCB0aGVzZSBkb24ndCBu
ZWVkIHRvIHJlcG9ydAotLy8gZXJyb3JzIHNpbmNlIGFueSBlcnJvcnMgc2hvdWxkIGFscmVhZHkg
aGF2ZSBiZWVuIHJlcG9ydGVkIHdoaWxlCi0vLyB0b2tlbml6aW5nLiAgQWxzbywgdGhlc2UgY2Fu
IGFzc3VtZSB0aGF0IHdoYXRldmVyIHRleHQgdGhleQotLy8gYXJlIGdpdmVuIGlzIHRleHQgdGhh
dCB0aGUgdG9rZW5pemVyIGFjdHVhbGx5IHBhcnNlZCBhcyBhIHRva2VuCi0vLyBvZiB0aGUgZ2l2
ZW4gdHlwZS4KLQotYm9vbCBUb2tlbml6ZXI6OlBhcnNlSW50ZWdlcihjb25zdCBzdHJpbmcmIHRl
eHQsIHVpbnQ2NCBtYXhfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2
NCogb3V0cHV0KSB7Ci0gIC8vIFNhZGx5LCB3ZSBjYW4ndCBqdXN0IHVzZSBzdHJ0b3VsKCkgc2lu
Y2UgaXQgaXMgb25seSAzMi1iaXQgYW5kIHN0cnRvdWxsKCkKLSAgLy8gaXMgbm9uLXN0YW5kYXJk
LiAgSSBoYXRlIHRoZSBDIHN0YW5kYXJkIGxpYnJhcnkuICA6KAotCi0vLyAgcmV0dXJuIHN0cnRv
dWxsKHRleHQuY19zdHIoKSwgTlVMTCwgMCk7Ci0KLSAgY29uc3QgY2hhciogcHRyID0gdGV4dC5j
X3N0cigpOwotICBpbnQgYmFzZSA9IDEwOwotICBpZiAocHRyWzBdID09ICcwJykgewotICAgIGlm
IChwdHJbMV0gPT0gJ3gnIHx8IHB0clsxXSA9PSAnWCcpIHsKLSAgICAgIC8vIFRoaXMgaXMgaGV4
LgotICAgICAgYmFzZSA9IDE2OwotICAgICAgcHRyICs9IDI7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IC8vIFRoaXMgaXMgb2N0YWwuCi0gICAgICBiYXNlID0gODsKLSAgICB9Ci0gIH0KLQotICB1aW50
NjQgcmVzdWx0ID0gMDsKLSAgZm9yICg7ICpwdHIgIT0gJ1wwJzsgcHRyKyspIHsKLSAgICBpbnQg
ZGlnaXQgPSBEaWdpdFZhbHVlKCpwdHIpOwotICAgIGlmIChkaWdpdCA8IDAgfHwgZGlnaXQgPj0g
YmFzZSkgewotICAgICAgLy8gVGhlIHRva2VuIHByb3ZpZGVkIGJ5IFRva2VuaXplciBpcyBpbnZh
bGlkLiBpLmUuLCAwOTkgaXMgYW4gaW52YWxpZAotICAgICAgLy8gdG9rZW4sIGJ1dCBUb2tlbml6
ZXIgc3RpbGwgdGhpbmsgaXQncyBpbnRlZ2VyLgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAoZGlnaXQgPiBtYXhfdmFsdWUgfHwgcmVzdWx0ID4gKG1heF92YWx1ZSAtIGRpZ2l0
KSAvIGJhc2UpIHsKLSAgICAgIC8vIE92ZXJmbG93LgotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgZGlnaXQ7Ci0gIH0KLQotICAqb3V0cHV0
ID0gcmVzdWx0OwotICByZXR1cm4gdHJ1ZTsKLX0KLQotZG91YmxlIFRva2VuaXplcjo6UGFyc2VG
bG9hdChjb25zdCBzdHJpbmcmIHRleHQpIHsKLSAgY29uc3QgY2hhciogc3RhcnQgPSB0ZXh0LmNf
c3RyKCk7Ci0gIGNoYXIqIGVuZDsKLSAgZG91YmxlIHJlc3VsdCA9IE5vTG9jYWxlU3RydG9kKHN0
YXJ0LCAmZW5kKTsKLQotICAvLyAiMWUiIGlzIG5vdCBhIHZhbGlkIGZsb2F0LCBidXQgaWYgdGhl
IHRva2VuaXplciByZWFkcyBpdCwgaXQgd2lsbAotICAvLyByZXBvcnQgYW4gZXJyb3IgYnV0IHN0
aWxsIHJldHVybiBpdCBhcyBhIHZhbGlkIHRva2VuLiAgV2UgbmVlZCB0bwotICAvLyBhY2NlcHQg
YW55dGhpbmcgdGhlIHRva2VuaXplciBjb3VsZCBwb3NzaWJseSByZXR1cm4sIGVycm9yIG9yIG5v
dC4KLSAgaWYgKCplbmQgPT0gJ2UnIHx8ICplbmQgPT0gJ0UnKSB7Ci0gICAgKytlbmQ7Ci0gICAg
aWYgKCplbmQgPT0gJy0nIHx8ICplbmQgPT0gJysnKSArK2VuZDsKLSAgfQotCi0gIC8vIElmIHRo
ZSBUb2tlbml6ZXIgaGFkIGFsbG93X2ZfYWZ0ZXJfZmxvYXRfIGVuYWJsZWQsIHRoZSBmbG9hdCBt
YXkgYmUKLSAgLy8gc3VmZml4ZWQgd2l0aCB0aGUgbGV0dGVyICdmJy4KLSAgaWYgKCplbmQgPT0g
J2YnIHx8ICplbmQgPT0gJ0YnKSB7Ci0gICAgKytlbmQ7Ci0gIH0KLQotICBHT09HTEVfTE9HX0lG
KERGQVRBTCwgZW5kIC0gc3RhcnQgIT0gdGV4dC5zaXplKCkgfHwgKnN0YXJ0ID09ICctJykKLSAg
ICA8PCAiIFRva2VuaXplcjo6UGFyc2VGbG9hdCgpIHBhc3NlZCB0ZXh0IHRoYXQgY291bGQgbm90
IGhhdmUgYmVlbiIKLSAgICAgICAiIHRva2VuaXplZCBhcyBhIGZsb2F0OiAiIDw8IENFc2NhcGUo
dGV4dCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEhlbHBlciB0byBhcHBlbmQgYSBVbmlj
b2RlIGNvZGUgcG9pbnQgdG8gYSBzdHJpbmcgYXMgVVRGOCwgd2l0aG91dCBicmluZ2luZwotLy8g
aW4gYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcy4KLXN0YXRpYyB2b2lkIEFwcGVuZFVURjgodWlu
dDMyIGNvZGVfcG9pbnQsIHN0cmluZyogb3V0cHV0KSB7Ci0gIHVpbnQzMiB0bXAgPSAwOwotICBp
bnQgbGVuID0gMDsKLSAgaWYgKGNvZGVfcG9pbnQgPD0gMHg3ZikgewotICAgIHRtcCA9IGNvZGVf
cG9pbnQ7Ci0gICAgbGVuID0gMTsKLSAgfSBlbHNlIGlmIChjb2RlX3BvaW50IDw9IDB4MDdmZikg
ewotICAgIHRtcCA9IDB4MDAwMGMwODAgfAotICAgICAgICAoKGNvZGVfcG9pbnQgJiAweDA3YzAp
IDw8IDIpIHwKLSAgICAgICAgKGNvZGVfcG9pbnQgJiAweDAwM2YpOwotICAgIGxlbiA9IDI7Ci0g
IH0gZWxzZSBpZiAoY29kZV9wb2ludCA8PSAweGZmZmYpIHsKLSAgICB0bXAgPSAweDAwZTA4MDgw
IHwKLSAgICAgICAgKChjb2RlX3BvaW50ICYgMHhmMDAwKSA8PCA0KSB8Ci0gICAgICAgICgoY29k
ZV9wb2ludCAmIDB4MGZjMCkgPDwgMikgfAotICAgICAgICAoY29kZV9wb2ludCAmIDB4MDAzZik7
Ci0gICAgbGVuID0gMzsKLSAgfSBlbHNlIGlmIChjb2RlX3BvaW50IDw9IDB4MWZmZmZmKSB7Ci0g
ICAgdG1wID0gMHhmMDgwODA4MCB8Ci0gICAgICAgICgoY29kZV9wb2ludCAmIDB4MWMwMDAwKSA8
PCA2KSB8Ci0gICAgICAgICgoY29kZV9wb2ludCAmIDB4MDNmMDAwKSA8PCA0KSB8Ci0gICAgICAg
ICgoY29kZV9wb2ludCAmIDB4MDAwZmMwKSA8PCAyKSB8Ci0gICAgICAgIChjb2RlX3BvaW50ICYg
MHgwMDNmKTsKLSAgICBsZW4gPSA0OwotICB9IGVsc2UgewotICAgIC8vIFVURi0xNiBpcyBvbmx5
IGRlZmluZWQgZm9yIGNvZGUgcG9pbnRzIHVwIHRvIDB4MTBGRkZGLCBhbmQgVVRGLTggaXMKLSAg
ICAvLyBub3JtYWxseSBvbmx5IGRlZmluZWQgdXAgdG8gdGhlcmUgYXMgd2VsbC4KLSAgICBTdHJp
bmdBcHBlbmRGKG91dHB1dCwgIlxcVSUwOHgiLCBjb2RlX3BvaW50KTsKLSAgICByZXR1cm47Ci0g
IH0KLSAgdG1wID0gZ2h0b25sKHRtcCk7Ci0gIG91dHB1dC0+YXBwZW5kKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KCZ0bXApICsgc2l6ZW9mKHRtcCkgLSBsZW4sIGxlbik7Ci19Ci0KLS8v
IFRyeSB0byByZWFkIDxsZW4+IGhleCBkaWdpdHMgZnJvbSBwdHIsIGFuZCBzdHVmZiB0aGUgbnVt
ZXJpYyByZXN1bHQgaW50bwotLy8gKnJlc3VsdC4gUmV0dXJucyB0cnVlIGlmIHRoYXQgbWFueSBk
aWdpdHMgd2VyZSBzdWNjZXNzZnVsbHkgY29uc3VtZWQuCi1zdGF0aWMgYm9vbCBSZWFkSGV4RGln
aXRzKGNvbnN0IGNoYXIqIHB0ciwgaW50IGxlbiwgdWludDMyKiByZXN1bHQpIHsKLSAgKnJlc3Vs
dCA9IDA7Ci0gIGlmIChsZW4gPT0gMCkgcmV0dXJuIGZhbHNlOwotICBmb3IgKGNvbnN0IGNoYXIq
IGVuZCA9IHB0ciArIGxlbjsgcHRyIDwgZW5kOyArK3B0cikgewotICAgIGlmICgqcHRyID09ICdc
MCcpIHJldHVybiBmYWxzZTsKLSAgICAqcmVzdWx0ID0gKCpyZXN1bHQgPDwgNCkgKyBEaWdpdFZh
bHVlKCpwdHIpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyBIYW5kbGluZyBVVEYtMTYg
c3Vycm9nYXRlIHBhaXJzLiBVVEYtMTYgZW5jb2RlcyBjb2RlIHBvaW50cyBpbiB0aGUgcmFuZ2UK
LS8vIDB4MTAwMDAuLi4weDEwZmZmZiBhcyBhIHBhaXIgb2YgbnVtYmVycywgYSBoZWFkIHN1cnJv
Z2F0ZSBmb2xsb3dlZCBieSBhIHRyYWlsCi0vLyBzdXJyb2dhdGUuIFRoZXNlIG51bWJlcnMgYXJl
IGluIGEgcmVzZXJ2ZWQgcmFuZ2Ugb2YgVW5pY29kZSBjb2RlIHBvaW50cywgc28KLS8vIGlmIHdl
IGVuY291bnRlciBzdWNoIGEgcGFpciB3ZSBrbm93IGhvdyB0byBwYXJzZSBpdCBhbmQgY29udmVy
dCBpdCBpbnRvIGEKLS8vIHNpbmdsZSBjb2RlIHBvaW50Lgotc3RhdGljIGNvbnN0IHVpbnQzMiBr
TWluSGVhZFN1cnJvZ2F0ZSA9IDB4ZDgwMDsKLXN0YXRpYyBjb25zdCB1aW50MzIga01heEhlYWRT
dXJyb2dhdGUgPSAweGRjMDA7Ci1zdGF0aWMgY29uc3QgdWludDMyIGtNaW5UcmFpbFN1cnJvZ2F0
ZSA9IDB4ZGMwMDsKLXN0YXRpYyBjb25zdCB1aW50MzIga01heFRyYWlsU3Vycm9nYXRlID0gMHhl
MDAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgSXNIZWFkU3Vycm9nYXRlKHVpbnQzMiBjb2RlX3Bv
aW50KSB7Ci0gIHJldHVybiAoY29kZV9wb2ludCA+PSBrTWluSGVhZFN1cnJvZ2F0ZSkgJiYgKGNv
ZGVfcG9pbnQgPCBrTWF4SGVhZFN1cnJvZ2F0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBJ
c1RyYWlsU3Vycm9nYXRlKHVpbnQzMiBjb2RlX3BvaW50KSB7Ci0gIHJldHVybiAoY29kZV9wb2lu
dCA+PSBrTWluVHJhaWxTdXJyb2dhdGUpICYmCi0gICAgICAoY29kZV9wb2ludCA8IGtNYXhUcmFp
bFN1cnJvZ2F0ZSk7Ci19Ci0KLS8vIENvbWJpbmUgYSBoZWFkIGFuZCB0cmFpbCBzdXJyb2dhdGUg
aW50byBhIHNpbmdsZSBVbmljb2RlIGNvZGUgcG9pbnQuCi1zdGF0aWMgdWludDMyIEFzc2VtYmxl
VVRGMTYodWludDMyIGhlYWRfc3Vycm9nYXRlLCB1aW50MzIgdHJhaWxfc3Vycm9nYXRlKSB7Ci0g
IEdPT0dMRV9EQ0hFQ0soSXNIZWFkU3Vycm9nYXRlKGhlYWRfc3Vycm9nYXRlKSk7Ci0gIEdPT0dM
RV9EQ0hFQ0soSXNUcmFpbFN1cnJvZ2F0ZSh0cmFpbF9zdXJyb2dhdGUpKTsKLSAgcmV0dXJuIDB4
MTAwMDAgKyAoKChoZWFkX3N1cnJvZ2F0ZSAtIGtNaW5IZWFkU3Vycm9nYXRlKSA8PCAxMCkgfAot
ICAgICAgKHRyYWlsX3N1cnJvZ2F0ZSAtIGtNaW5UcmFpbFN1cnJvZ2F0ZSkpOwotfQotCi0vLyBD
b252ZXJ0IHRoZSBlc2NhcGUgc2VxdWVuY2UgcGFyYW1ldGVyIHRvIGEgbnVtYmVyIG9mIGV4cGVj
dGVkIGhleCBkaWdpdHMuCi1zdGF0aWMgaW5saW5lIGludCBVbmljb2RlTGVuZ3RoKGNoYXIga2V5
KSB7Ci0gIGlmIChrZXkgPT0gJ3UnKSByZXR1cm4gNDsKLSAgaWYgKGtleSA9PSAnVScpIHJldHVy
biA4OwotICByZXR1cm4gMDsKLX0KLQotLy8gR2l2ZW4gYSBwb2ludGVyIHRvIHRoZSAndScgb3Ig
J1UnIHN0YXJ0aW5nIGEgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UsIGF0dGVtcHQKLS8vIHRvIHBh
cnNlIHRoYXQgc2VxdWVuY2UuIE9uIHN1Y2Nlc3MsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBm
aXJzdCBjaGFyCi0vLyBiZXlvbmQgdGhhdCBzZXF1ZW5jZSwgYW5kIGZpbGxzIGluICpjb2RlX3Bv
aW50LiBPbiBmYWlsdXJlLCByZXR1cm5zIHB0cgotLy8gaXRzZWxmLgotc3RhdGljIGNvbnN0IGNo
YXIqIEZldGNoVW5pY29kZVBvaW50KGNvbnN0IGNoYXIqIHB0ciwgdWludDMyKiBjb2RlX3BvaW50
KSB7Ci0gIGNvbnN0IGNoYXIqIHAgPSBwdHI7Ci0gIC8vIEZldGNoIHRoZSBjb2RlIHBvaW50Lgot
ICBjb25zdCBpbnQgbGVuID0gVW5pY29kZUxlbmd0aCgqcCsrKTsKLSAgaWYgKCFSZWFkSGV4RGln
aXRzKHAsIGxlbiwgY29kZV9wb2ludCkpCi0gICAgcmV0dXJuIHB0cjsKLSAgcCArPSBsZW47Ci0K
LSAgLy8gQ2hlY2sgaWYgdGhlIGNvZGUgcG9pbnQgd2UgcmVhZCBpcyBhICJoZWFkIHN1cnJvZ2F0
ZS4iIElmIHNvLCB0aGVuIHdlCi0gIC8vIGV4cGVjdCBpdCB0byBiZSBpbW1lZGlhdGVseSBmb2xs
b3dlZCBieSBhbm90aGVyIGNvZGUgcG9pbnQgd2hpY2ggaXMgYSB2YWxpZAotICAvLyAidHJhaWwg
c3Vycm9nYXRlLCIgYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSBhIFVURi0xNiBwYWlyIHdoaWNoIGRl
Y29kZXMgaW50bwotICAvLyBhIHNpbmdsZSBVbmljb2RlIHBvaW50LiBUcmFpbCBzdXJyb2dhdGVz
IG1heSBvbmx5IHVzZSBcdSwgbm90IFxVLgotICBpZiAoSXNIZWFkU3Vycm9nYXRlKCpjb2RlX3Bv
aW50KSAmJiAqcCA9PSAnXFwnICYmICoocCArIDEpID09ICd1JykgewotICAgIHVpbnQzMiB0cmFp
bF9zdXJyb2dhdGU7Ci0gICAgaWYgKFJlYWRIZXhEaWdpdHMocCArIDIsIDQsICZ0cmFpbF9zdXJy
b2dhdGUpICYmCi0gICAgICAgIElzVHJhaWxTdXJyb2dhdGUodHJhaWxfc3Vycm9nYXRlKSkgewot
ICAgICAgKmNvZGVfcG9pbnQgPSBBc3NlbWJsZVVURjE2KCpjb2RlX3BvaW50LCB0cmFpbF9zdXJy
b2dhdGUpOwotICAgICAgcCArPSA2OwotICAgIH0KLSAgICAvLyBJZiB0aGlzIGZhaWxlZCwgdGhl
biB3ZSBqdXN0IGVtaXQgdGhlIGhlYWQgc3Vycm9nYXRlIGFzIGEgY29kZSBwb2ludC4KLSAgICAv
LyBJdCdzIGJvZ3VzLCBidXQgc28gaXMgdGhlIHN0cmluZy4KLSAgfQotCi0gIHJldHVybiBwOwot
fQotCi0vLyBUaGUgdGV4dCBzdHJpbmcgbXVzdCBiZWdpbiBhbmQgZW5kIHdpdGggc2luZ2xlIG9y
IGRvdWJsZSBxdW90ZQotLy8gY2hhcmFjdGVycy4KLXZvaWQgVG9rZW5pemVyOjpQYXJzZVN0cmlu
Z0FwcGVuZChjb25zdCBzdHJpbmcmIHRleHQsIHN0cmluZyogb3V0cHV0KSB7Ci0gIC8vIFJlbWlu
ZGVyOiB0ZXh0WzBdIGlzIGFsd2F5cyBhIHF1b3RlIGNoYXJhY3Rlci4gIChJZiB0ZXh0IGlzCi0g
IC8vIGVtcHR5LCBpdCdzIGludmFsaWQsIHNvIHdlJ2xsIGp1c3QgcmV0dXJuKS4KLSAgY29uc3Qg
c2l6ZV90IHRleHRfc2l6ZSA9IHRleHQuc2l6ZSgpOwotICBpZiAodGV4dF9zaXplID09IDApIHsK
LSAgICBHT09HTEVfTE9HKERGQVRBTCkKLSAgICAgIDw8ICIgVG9rZW5pemVyOjpQYXJzZVN0cmlu
Z0FwcGVuZCgpIHBhc3NlZCB0ZXh0IHRoYXQgY291bGQgbm90IgotICAgICAgICAgIiBoYXZlIGJl
ZW4gdG9rZW5pemVkIGFzIGEgc3RyaW5nOiAiIDw8IENFc2NhcGUodGV4dCk7Ci0gICAgcmV0dXJu
OwotICB9Ci0KLSAgLy8gUmVzZXJ2ZSByb29tIGZvciBuZXcgc3RyaW5nLiBUaGUgYnJhbmNoIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIGlmCi0gIC8vIHRoZXJlIGlzIGFscmVhZHkgc3BhY2UgYXZhaWxh
YmxlIHRoZSByZXNlcnZlKCkgY2FsbCBtaWdodAotICAvLyBkb3duc2l6ZSB0aGUgb3V0cHV0Lgot
ICBjb25zdCBzaXplX3QgbmV3X2xlbiA9IHRleHRfc2l6ZSArIG91dHB1dC0+c2l6ZSgpOwotICBp
ZiAobmV3X2xlbiA+IG91dHB1dC0+Y2FwYWNpdHkoKSkgewotICAgIG91dHB1dC0+cmVzZXJ2ZShu
ZXdfbGVuKTsKLSAgfQotCi0gIC8vIExvb3AgdGhyb3VnaCB0aGUgc3RyaW5nIGNvcHlpbmcgY2hh
cmFjdGVycyB0byAib3V0cHV0IiBhbmQKLSAgLy8gaW50ZXJwcmV0aW5nIGVzY2FwZSBzZXF1ZW5j
ZXMuICBOb3RlIHRoYXQgYW55IGludmFsaWQgZXNjYXBlCi0gIC8vIHNlcXVlbmNlcyBvciBvdGhl
ciBlcnJvcnMgd2VyZSBhbHJlYWR5IHJlcG9ydGVkIHdoaWxlIHRva2VuaXppbmcuCi0gIC8vIElu
IHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBwcm9kdWNlIHZhbGlkIHJlc3VsdHMuCi0gIGZv
ciAoY29uc3QgY2hhciogcHRyID0gdGV4dC5jX3N0cigpICsgMTsgKnB0ciAhPSAnXDAnOyBwdHIr
KykgewotICAgIGlmICgqcHRyID09ICdcXCcgJiYgcHRyWzFdICE9ICdcMCcpIHsKLSAgICAgIC8v
IEFuIGVzY2FwZSBzZXF1ZW5jZS4KLSAgICAgICsrcHRyOwotCi0gICAgICBpZiAoT2N0YWxEaWdp
dDo6SW5DbGFzcygqcHRyKSkgewotICAgICAgICAvLyBBbiBvY3RhbCBlc2NhcGUuICBNYXkgb25l
LCB0d28sIG9yIHRocmVlIGRpZ2l0cy4KLSAgICAgICAgaW50IGNvZGUgPSBEaWdpdFZhbHVlKCpw
dHIpOwotICAgICAgICBpZiAoT2N0YWxEaWdpdDo6SW5DbGFzcyhwdHJbMV0pKSB7Ci0gICAgICAg
ICAgKytwdHI7Ci0gICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgRGlnaXRWYWx1ZSgqcHRyKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoT2N0YWxEaWdpdDo6SW5DbGFzcyhwdHJbMV0pKSB7Ci0g
ICAgICAgICAgKytwdHI7Ci0gICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgRGlnaXRWYWx1ZSgq
cHRyKTsKLSAgICAgICAgfQotICAgICAgICBvdXRwdXQtPnB1c2hfYmFjayhzdGF0aWNfY2FzdDxj
aGFyPihjb2RlKSk7Ci0KLSAgICAgIH0gZWxzZSBpZiAoKnB0ciA9PSAneCcpIHsKLSAgICAgICAg
Ly8gQSBoZXggZXNjYXBlLiAgTWF5IHplcm8sIG9uZSwgb3IgdHdvIGRpZ2l0cy4gIChUaGUgemVy
byBjYXNlCi0gICAgICAgIC8vIHdpbGwgaGF2ZSBiZWVuIGNhdWdodCBhcyBhbiBlcnJvciBlYXJs
aWVyLikKLSAgICAgICAgaW50IGNvZGUgPSAwOwotICAgICAgICBpZiAoSGV4RGlnaXQ6OkluQ2xh
c3MocHRyWzFdKSkgewotICAgICAgICAgICsrcHRyOwotICAgICAgICAgIGNvZGUgPSBEaWdpdFZh
bHVlKCpwdHIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChIZXhEaWdpdDo6SW5DbGFzcyhwdHJb
MV0pKSB7Ci0gICAgICAgICAgKytwdHI7Ci0gICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArIERp
Z2l0VmFsdWUoKnB0cik7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0cHV0LT5wdXNoX2JhY2soc3Rh
dGljX2Nhc3Q8Y2hhcj4oY29kZSkpOwotCi0gICAgICB9IGVsc2UgaWYgKCpwdHIgPT0gJ3UnIHx8
ICpwdHIgPT0gJ1UnKSB7Ci0gICAgICAgIHVpbnQzMiB1bmljb2RlOwotICAgICAgICBjb25zdCBj
aGFyKiBlbmQgPSBGZXRjaFVuaWNvZGVQb2ludChwdHIsICZ1bmljb2RlKTsKLSAgICAgICAgaWYg
KGVuZCA9PSBwdHIpIHsKLSAgICAgICAgICAvLyBGYWlsdXJlOiBKdXN0IGR1bXAgb3V0IHdoYXQg
d2Ugc2F3LCBkb24ndCB0cnkgdG8gcGFyc2UgaXQuCi0gICAgICAgICAgb3V0cHV0LT5wdXNoX2Jh
Y2soKnB0cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgQXBwZW5kVVRGOCh1bmljb2Rl
LCBvdXRwdXQpOwotICAgICAgICAgIHB0ciA9IGVuZCAtIDE7ICAvLyBCZWNhdXNlIHdlJ3JlIGFi
b3V0IHRvICsrcHRyLgotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBTb21l
IG90aGVyIGVzY2FwZSBjb2RlLgotICAgICAgICBvdXRwdXQtPnB1c2hfYmFjayhUcmFuc2xhdGVF
c2NhcGUoKnB0cikpOwotICAgICAgfQotCi0gICAgfSBlbHNlIGlmICgqcHRyID09IHRleHRbMF0g
JiYgcHRyWzFdID09ICdcMCcpIHsKLSAgICAgIC8vIElnbm9yZSBmaW5hbCBxdW90ZSBtYXRjaGlu
ZyB0aGUgc3RhcnRpbmcgcXVvdGUuCi0gICAgfSBlbHNlIHsKLSAgICAgIG91dHB1dC0+cHVzaF9i
YWNrKCpwdHIpOwotICAgIH0KLSAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJD
bGFzcz4KLXN0YXRpYyBib29sIEFsbEluQ2xhc3MoY29uc3Qgc3RyaW5nJiBzKSB7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgcy5zaXplKCk7ICsraSkgewotICAgIGlmICghQ2hhcmFjdGVyQ2xhc3M6
OkluQ2xhc3Moc1tpXSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgVG9rZW5pemVyOjpJc0lkZW50aWZpZXIoY29uc3Qgc3RyaW5nJiB0ZXh0KSB7
Ci0gIC8vIE1pcnJvcnMgSURFTlRJRklFUiBkZWZpbml0aW9uIGluIFRva2VuaXplcjo6TmV4dCgp
IGFib3ZlLgotICBpZiAodGV4dC5zaXplKCkgPT0gMCkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlm
ICghTGV0dGVyOjpJbkNsYXNzKHRleHQuYXQoMCkpKQotICAgIHJldHVybiBmYWxzZTsKLSAgaWYg
KCFBbGxJbkNsYXNzPEFscGhhbnVtZXJpYz4odGV4dC5zdWJzdHIoMSkpKQotICAgIHJldHVybiBm
YWxzZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbwotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvaW8vdG9rZW5pemVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vdG9r
ZW5pemVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZWU3ZDg0NzVkOGQ4OWM3
MWU2MDAzN2UyOGYxYTQyZDk4NjcwMGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3Rva2VuaXplci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDExICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFz
ZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hl
bWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBDbGFzcyBmb3IgcGFyc2luZyB0
b2tlbml6ZWQgdGV4dCBmcm9tIGEgWmVyb0NvcHlJbnB1dFN0cmVhbS4KLQotI2lmbmRlZiBHT09H
TEVfUFJPVE9CVUZfSU9fVE9LRU5JWkVSX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfSU9f
VE9LRU5JWkVSX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3Bh
Y2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGlvIHsKLQotY2xhc3MgWmVyb0NvcHlJbnB1dFN0cmVh
bTsgICAgIC8vIHplcm9fY29weV9zdHJlYW0uaAotCi0vLyBEZWZpbmVkIGluIHRoaXMgZmlsZS4K
LWNsYXNzIEVycm9yQ29sbGVjdG9yOwotY2xhc3MgVG9rZW5pemVyOwotCi0vLyBCeSAiY29sdW1u
IG51bWJlciIsIHRoZSBwcm90byBjb21waWxlciByZWZlcnMgdG8gYSBjb3VudCBvZiB0aGUgbnVt
YmVyCi0vLyBvZiBieXRlcyBiZWZvcmUgYSBnaXZlbiBieXRlLCBleGNlcHQgdGhhdCBhIHRhYiBj
aGFyYWN0ZXIgYWR2YW5jZXMgdG8KLS8vIHRoZSBuZXh0IG11bHRpcGxlIG9mIDggYnl0ZXMuICBO
b3RlIGluIHBhcnRpY3VsYXIgdGhhdCBjb2x1bW4gbnVtYmVycwotLy8gYXJlIHplcm8tYmFzZWQs
IHdoaWxlIG1hbnkgdXNlciBpbnRlcmZhY2VzIHVzZSBvbmUtYmFzZWQgY29sdW1uIG51bWJlcnMu
Ci10eXBlZGVmIGludCBDb2x1bW5OdW1iZXI7Ci0KLS8vIEFic3RyYWN0IGludGVyZmFjZSBmb3Ig
YW4gb2JqZWN0IHdoaWNoIGNvbGxlY3RzIHRoZSBlcnJvcnMgdGhhdCBvY2N1cgotLy8gZHVyaW5n
IHBhcnNpbmcuICBBIHR5cGljYWwgaW1wbGVtZW50YXRpb24gbWlnaHQgc2ltcGx5IHByaW50IHRo
ZSBlcnJvcnMKLS8vIHRvIHN0ZG91dC4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBFcnJvckNv
bGxlY3RvciB7Ci0gcHVibGljOgotICBpbmxpbmUgRXJyb3JDb2xsZWN0b3IoKSB7fQotICB2aXJ0
dWFsIH5FcnJvckNvbGxlY3RvcigpOwotCi0gIC8vIEluZGljYXRlcyB0aGF0IHRoZXJlIHdhcyBh
biBlcnJvciBpbiB0aGUgaW5wdXQgYXQgdGhlIGdpdmVuIGxpbmUgYW5kCi0gIC8vIGNvbHVtbiBu
dW1iZXJzLiAgVGhlIG51bWJlcnMgYXJlIHplcm8tYmFzZWQsIHNvIHlvdSBtYXkgd2FudCB0byBh
ZGQKLSAgLy8gMSB0byBlYWNoIGJlZm9yZSBwcmludGluZyB0aGVtLgotICB2aXJ0dWFsIHZvaWQg
QWRkRXJyb3IoaW50IGxpbmUsIENvbHVtbk51bWJlciBjb2x1bW4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmcmIG1lc3NhZ2UpID0gMDsKLQotICAvLyBJbmRpY2F0ZXMgdGhh
dCB0aGVyZSB3YXMgYSB3YXJuaW5nIGluIHRoZSBpbnB1dCBhdCB0aGUgZ2l2ZW4gbGluZSBhbmQK
LSAgLy8gY29sdW1uIG51bWJlcnMuICBUaGUgbnVtYmVycyBhcmUgemVyby1iYXNlZCwgc28geW91
IG1heSB3YW50IHRvIGFkZAotICAvLyAxIHRvIGVhY2ggYmVmb3JlIHByaW50aW5nIHRoZW0uCi0g
IHZpcnR1YWwgdm9pZCBBZGRXYXJuaW5nKGludCBsaW5lLCBDb2x1bW5OdW1iZXIgY29sdW1uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIG1lc3NhZ2UpIHsgfQotCi0g
cHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEVycm9yQ29sbGVj
dG9yKTsKLX07Ci0KLS8vIFRoaXMgY2xhc3MgY29udmVydHMgYSBzdHJlYW0gb2YgcmF3IHRleHQg
aW50byBhIHN0cmVhbSBvZiB0b2tlbnMgZm9yCi0vLyB0aGUgcHJvdG9jb2wgZGVmaW5pdGlvbiBw
YXJzZXIgdG8gcGFyc2UuICBUaGUgdG9rZW5zIHJlY29nbml6ZWQgYXJlCi0vLyBzaW1pbGFyIHRv
IHRob3NlIHRoYXQgbWFrZSB1cCB0aGUgQyBsYW5ndWFnZTsgc2VlIHRoZSBUb2tlblR5cGUgZW51
bSBmb3IKLS8vIHByZWNpc2UgZGVzY3JpcHRpb25zLiAgV2hpdGVzcGFjZSBhbmQgY29tbWVudHMg
YXJlIHNraXBwZWQuICBCeSBkZWZhdWx0LAotLy8gQy0gYW5kIEMrKy1zdHlsZSBjb21tZW50cyBh
cmUgcmVjb2duaXplZCwgYnV0IG90aGVyIHN0eWxlcyBjYW4gYmUgdXNlZCBieQotLy8gY2FsbGlu
ZyBzZXRfY29tbWVudF9zdHlsZSgpLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFRva2VuaXpl
ciB7Ci0gcHVibGljOgotICAvLyBDb25zdHJ1Y3QgYSBUb2tlbml6ZXIgdGhhdCByZWFkcyBhbmQg
dG9rZW5pemVzIHRleHQgZnJvbSB0aGUgZ2l2ZW4KLSAgLy8gaW5wdXQgc3RyZWFtIGFuZCB3cml0
ZXMgZXJyb3JzIHRvIHRoZSBnaXZlbiBlcnJvcl9jb2xsZWN0b3IuCi0gIC8vIFRoZSBjYWxsZXIg
a2VlcHMgb3duZXJzaGlwIG9mIGlucHV0IGFuZCBlcnJvcl9jb2xsZWN0b3IuCi0gIFRva2VuaXpl
cihaZXJvQ29weUlucHV0U3RyZWFtKiBpbnB1dCwgRXJyb3JDb2xsZWN0b3IqIGVycm9yX2NvbGxl
Y3Rvcik7Ci0gIH5Ub2tlbml6ZXIoKTsKLQotICBlbnVtIFRva2VuVHlwZSB7Ci0gICAgVFlQRV9T
VEFSVCwgICAgICAgLy8gTmV4dCgpIGhhcyBub3QgeWV0IGJlZW4gY2FsbGVkLgotICAgIFRZUEVf
RU5ELCAgICAgICAgIC8vIEVuZCBvZiBpbnB1dCByZWFjaGVkLiAgInRleHQiIGlzIGVtcHR5Lgot
Ci0gICAgVFlQRV9JREVOVElGSUVSLCAgLy8gQSBzZXF1ZW5jZSBvZiBsZXR0ZXJzLCBkaWdpdHMs
IGFuZCB1bmRlcnNjb3Jlcywgbm90Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnRpbmcg
d2l0aCBhIGRpZ2l0LiAgSXQgaXMgYW4gZXJyb3IgZm9yIGEgbnVtYmVyCi0gICAgICAgICAgICAg
ICAgICAgICAgLy8gdG8gYmUgZm9sbG93ZWQgYnkgYW4gaWRlbnRpZmllciB3aXRoIG5vIHNwYWNl
IGluCi0gICAgICAgICAgICAgICAgICAgICAgLy8gYmV0d2Vlbi4KLSAgICBUWVBFX0lOVEVHRVIs
ICAgICAvLyBBIHNlcXVlbmNlIG9mIGRpZ2l0cyByZXByZXNlbnRpbmcgYW4gaW50ZWdlci4gIE5v
cm1hbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGRpZ2l0cyBhcmUgZGVjaW1hbCwg
YnV0IGEgcHJlZml4IG9mICIweCIgaW5kaWNhdGVzCi0gICAgICAgICAgICAgICAgICAgICAgLy8g
YSBoZXggbnVtYmVyIGFuZCBhIGxlYWRpbmcgemVybyBpbmRpY2F0ZXMgb2N0YWwsIGp1c3QKLSAg
ICAgICAgICAgICAgICAgICAgICAvLyBsaWtlIHdpdGggQyBudW1lcmljIGxpdGVyYWxzLiAgQSBs
ZWFkaW5nIG5lZ2F0aXZlIHNpZ24KLSAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBOT1QgaW5j
bHVkZWQgaW4gdGhlIHRva2VuOyBpdCdzIHVwIHRvIHRoZSBwYXJzZXIgdG8KLSAgICAgICAgICAg
ICAgICAgICAgICAvLyBpbnRlcnByZXQgdGhlIHVuYXJ5IG1pbnVzIG9wZXJhdG9yIG9uIGl0cyBv
d24uCi0gICAgVFlQRV9GTE9BVCwgICAgICAgLy8gQSBmbG9hdGluZyBwb2ludCBsaXRlcmFsLCB3
aXRoIGEgZnJhY3Rpb25hbCBwYXJ0IGFuZC9vcgotICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
IGV4cG9uZW50LiAgQWx3YXlzIGluIGRlY2ltYWwuICBBZ2FpbiwgbmV2ZXIKLSAgICAgICAgICAg
ICAgICAgICAgICAvLyBuZWdhdGl2ZS4KLSAgICBUWVBFX1NUUklORywgICAgICAvLyBBIHF1b3Rl
ZCBzZXF1ZW5jZSBvZiBlc2NhcGVkIGNoYXJhY3RlcnMuICBFaXRoZXIgc2luZ2xlCi0gICAgICAg
ICAgICAgICAgICAgICAgLy8gb3IgZG91YmxlIHF1b3RlcyBjYW4gYmUgdXNlZCwgYnV0IHRoZXkg
bXVzdCBtYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgICAvLyBBIHN0cmluZyBsaXRlcmFsIGNh
bm5vdCBjcm9zcyBhIGxpbmUgYnJlYWsuCi0gICAgVFlQRV9TWU1CT0wsICAgICAgLy8gQW55IG90
aGVyIHByaW50YWJsZSBjaGFyYWN0ZXIsIGxpa2UgJyEnIG9yICcrJy4KLSAgICAgICAgICAgICAg
ICAgICAgICAvLyBTeW1ib2xzIGFyZSBhbHdheXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBzbyAiISsk
JSIgaXMKLSAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VyIHRva2Vucy4KLSAgfTsKLQotICAv
LyBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgdG9rZW4gcmVhZCBmcm9tIHRoZSB0b2tlbiBzdHJl
YW0uCi0gIHN0cnVjdCBUb2tlbiB7Ci0gICAgVG9rZW5UeXBlIHR5cGU7Ci0gICAgc3RyaW5nIHRl
eHQ7ICAgICAgIC8vIFRoZSBleGFjdCB0ZXh0IG9mIHRoZSB0b2tlbiBhcyBpdCBhcHBlYXJlZCBp
bgotICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaW5wdXQuICBlLmcuIHRva2VucyBvZiBU
WVBFX1NUUklORyB3aWxsIHN0aWxsCi0gICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIGVzY2Fw
ZWQgYW5kIGluIHF1b3Rlcy4KLQotICAgIC8vICJsaW5lIiBhbmQgImNvbHVtbiIgc3BlY2lmeSB0
aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZgotICAgIC8vIHRoZSB0b2tlbiB3
aXRoaW4gdGhlIGlucHV0IHN0cmVhbS4gIFRoZXkgYXJlIHplcm8tYmFzZWQuCi0gICAgaW50IGxp
bmU7Ci0gICAgQ29sdW1uTnVtYmVyIGNvbHVtbjsKLSAgICBDb2x1bW5OdW1iZXIgZW5kX2NvbHVt
bjsKLSAgfTsKLQotICAvLyBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uICBUaGlzIGlzIHVwZGF0ZWQg
d2hlbiBOZXh0KCkgaXMgY2FsbGVkLiAgQmVmb3JlCi0gIC8vIHRoZSBmaXJzdCBjYWxsIHRvIE5l
eHQoKSwgY3VycmVudCgpIGhhcyB0eXBlIFRZUEVfU1RBUlQgYW5kIG5vIGNvbnRlbnRzLgotICBj
b25zdCBUb2tlbiYgY3VycmVudCgpOwotCi0gIC8vIFJldHVybiB0aGUgcHJldmlvdXMgdG9rZW4g
LS0gaS5lLiB3aGF0IGN1cnJlbnQoKSByZXR1cm5lZCBiZWZvcmUgdGhlCi0gIC8vIHByZXZpb3Vz
IGNhbGwgdG8gTmV4dCgpLgotICBjb25zdCBUb2tlbiYgcHJldmlvdXMoKTsKLQotICAvLyBBZHZh
bmNlIHRvIHRoZSBuZXh0IHRva2VuLiAgUmV0dXJucyBmYWxzZSBpZiB0aGUgZW5kIG9mIHRoZSBp
bnB1dCBpcwotICAvLyByZWFjaGVkLgotICBib29sIE5leHQoKTsKLQotICAvLyBMaWtlIE5leHQo
KSwgYnV0IGFsc28gY29sbGVjdHMgY29tbWVudHMgd2hpY2ggYXBwZWFyIGJldHdlZW4gdGhlIHBy
ZXZpb3VzCi0gIC8vIGFuZCBuZXh0IHRva2Vucy4KLSAgLy8KLSAgLy8gQ29tbWVudHMgd2hpY2gg
YXBwZWFyIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBwcmV2aW91cyB0b2tlbiBhcmUgc3RvcmVkCi0g
IC8vIGluICpwcmV2X3RhaWxpbmdfY29tbWVudHMuICBDb21tZW50cyB3aGljaCBhcHBlYXIgdG8g
YmUgYXR0YWNoZWQgdG8gdGhlCi0gIC8vIG5leHQgdG9rZW4gYXJlIHN0b3JlZCBpbiAqbmV4dF9s
ZWFkaW5nX2NvbW1lbnRzLiAgQ29tbWVudHMgYXBwZWFyaW5nIGluCi0gIC8vIGJldHdlZW4gd2hp
Y2ggZG8gbm90IGFwcGVhciB0byBiZSBhdHRhY2hlZCB0byBlaXRoZXIgd2lsbCBiZSBhZGRlZCB0
bwotICAvLyBkZXRhY2hlZF9jb21tZW50cy4gIEFueSBvZiB0aGVzZSBwYXJhbWV0ZXJzIGNhbiBi
ZSBOVUxMIHRvIHNpbXBseSBkaXNjYXJkCi0gIC8vIHRoZSBjb21tZW50cy4KLSAgLy8KLSAgLy8g
QSBzZXJpZXMgb2YgbGluZSBjb21tZW50cyBhcHBlYXJpbmcgb24gY29uc2VjdXRpdmUgbGluZXMs
IHdpdGggbm8gb3RoZXIKLSAgLy8gdG9rZW5zIGFwcGVhcmluZyBvbiB0aG9zZSBsaW5lcywgd2ls
bCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlIGNvbW1lbnQuCi0gIC8vCi0gIC8vIE9ubHkgdGhlIGNv
bW1lbnQgY29udGVudCBpcyByZXR1cm5lZDsgY29tbWVudCBtYXJrZXJzIChlLmcuIC8vKSBhcmUK
LSAgLy8gc3RyaXBwZWQgb3V0LiAgRm9yIGJsb2NrIGNvbW1lbnRzLCBsZWFkaW5nIHdoaXRlc3Bh
Y2UgYW5kIGFuIGFzdGVyaXNrIHdpbGwKLSAgLy8gYmUgc3RyaXBwZWQgZnJvbSB0aGUgYmVnaW5u
aW5nIG9mIGVhY2ggbGluZSBvdGhlciB0aGFuIHRoZSBmaXJzdC4gIE5ld2xpbmVzCi0gIC8vIGFy
ZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LgotICAvLwotICAvLyBFeGFtcGxlczoKLSAgLy8KLSAg
Ly8gICBvcHRpb25hbCBpbnQzMiBmb28gPSAxOyAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBmb28u
Ci0gIC8vICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBiYXIuCi0gIC8vICAgb3B0aW9uYWwgaW50
MzIgYmFyID0gMjsKLSAgLy8KLSAgLy8gICBvcHRpb25hbCBzdHJpbmcgYmF6ID0gMzsKLSAgLy8g
ICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGJhei4KLSAgLy8gICAvLyBBbm90aGVyIGxpbmUgYXR0
YWNoZWQgdG8gYmF6LgotICAvLwotICAvLyAgIC8vIENvbW1lbnQgYXR0YWNoZWQgdG8gcXV4Lgot
ICAvLyAgIC8vCi0gIC8vICAgLy8gQW5vdGhlciBsaW5lIGF0dGFjaGVkIHRvIHF1eC4KLSAgLy8g
ICBvcHRpb25hbCBkb3VibGUgcXV4ID0gNDsKLSAgLy8KLSAgLy8gICAvLyBEZXRhY2hlZCBjb21t
ZW50LiAgVGhpcyBpcyBub3QgYXR0YWNoZWQgdG8gcXV4IG9yIGNvcmdlCi0gIC8vICAgLy8gYmVj
YXVzZSB0aGVyZSBhcmUgYmxhbmsgbGluZXMgc2VwYXJhdGluZyBpdCBmcm9tIGJvdGguCi0gIC8v
Ci0gIC8vICAgb3B0aW9uYWwgc3RyaW5nIGNvcmdlID0gNTsKLSAgLy8gICAvKiBCbG9jayBjb21t
ZW50IGF0dGFjaGVkCi0gIC8vICAgICogdG8gY29yZ2UuICBMZWFkaW5nIGFzdGVyaXNrcwotICAv
LyAgICAqIHdpbGwgYmUgcmVtb3ZlZC4gKi8KLSAgLy8gICAvKiBCbG9jayBjb21tZW50IGF0dGFj
aGVkIHRvCi0gIC8vICAgICogZ3JhdWx0LiAqLwotICAvLyAgIG9wdGlvbmFsIGludDMyIGdyYXVs
dCA9IDY7Ci0gIGJvb2wgTmV4dFdpdGhDb21tZW50cyhzdHJpbmcqIHByZXZfdHJhaWxpbmdfY29t
bWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8c3RyaW5nPiogZGV0YWNoZWRf
Y29tbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcqIG5leHRfbGVhZGluZ19j
b21tZW50cyk7Ci0KLSAgLy8gUGFyc2UgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBQYXJzZXMgYSBUWVBFX0ZMT0FUIHRv
a2VuLiAgVGhpcyBuZXZlciBmYWlscywgc28gbG9uZyBhcyB0aGUgdGV4dCBhY3R1YWxseQotICAv
LyBjb21lcyBmcm9tIGEgVFlQRV9GTE9BVCB0b2tlbiBwYXJzZWQgYnkgVG9rZW5pemVyLiAgSWYg
aXQgZG9lc24ndCwgdGhlCi0gIC8vIHJlc3VsdCBpcyB1bmRlZmluZWQgKHBvc3NpYmx5IGFuIGFz
c2VydCBmYWlsdXJlKS4KLSAgc3RhdGljIGRvdWJsZSBQYXJzZUZsb2F0KGNvbnN0IHN0cmluZyYg
dGV4dCk7Ci0KLSAgLy8gUGFyc2VzIGEgVFlQRV9TVFJJTkcgdG9rZW4uICBUaGlzIG5ldmVyIGZh
aWxzLCBzbyBsb25nIGFzIHRoZSB0ZXh0IGFjdHVhbGx5Ci0gIC8vIGNvbWVzIGZyb20gYSBUWVBF
X1NUUklORyB0b2tlbiBwYXJzZWQgYnkgVG9rZW5pemVyLiAgSWYgaXQgZG9lc24ndCwgdGhlCi0g
IC8vIHJlc3VsdCBpcyB1bmRlZmluZWQgKHBvc3NpYmx5IGFuIGFzc2VydCBmYWlsdXJlKS4KLSAg
c3RhdGljIHZvaWQgUGFyc2VTdHJpbmcoY29uc3Qgc3RyaW5nJiB0ZXh0LCBzdHJpbmcqIG91dHB1
dCk7Ci0KLSAgLy8gSWRlbnRpY2FsIHRvIFBhcnNlU3RyaW5nLCBidXQgYXBwZW5kcyB0byBvdXRw
dXQuCi0gIHN0YXRpYyB2b2lkIFBhcnNlU3RyaW5nQXBwZW5kKGNvbnN0IHN0cmluZyYgdGV4dCwg
c3RyaW5nKiBvdXRwdXQpOwotCi0gIC8vIFBhcnNlcyBhIFRZUEVfSU5URUdFUiB0b2tlbi4gIFJl
dHVybnMgZmFsc2UgaWYgdGhlIHJlc3VsdCB3b3VsZCBiZQotICAvLyBncmVhdGVyIHRoYW4gbWF4
X3ZhbHVlLiAgT3RoZXJ3aXNlLCByZXR1cm5zIHRydWUgYW5kIHNldHMgKm91dHB1dCB0byB0aGUK
LSAgLy8gcmVzdWx0LiAgSWYgdGhlIHRleHQgaXMgbm90IGZyb20gYSBUb2tlbiBvZiB0eXBlIFRZ
UEVfSU5URUdFUiBvcmlnaW5hbGx5Ci0gIC8vIHBhcnNlZCBieSBhIFRva2VuaXplciwgdGhlIHJl
c3VsdCBpcyB1bmRlZmluZWQgKHBvc3NpYmx5IGFuIGFzc2VydAotICAvLyBmYWlsdXJlKS4KLSAg
c3RhdGljIGJvb2wgUGFyc2VJbnRlZ2VyKGNvbnN0IHN0cmluZyYgdGV4dCwgdWludDY0IG1heF92
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NCogb3V0cHV0KTsKLQotICAv
LyBPcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gIC8vIFNldCB0cnVlIHRvIGFsbG93IGZsb2F0cyB0byBiZSBzdWZmaXhl
ZCB3aXRoIHRoZSBsZXR0ZXIgJ2YnLiAgVG9rZW5zCi0gIC8vIHdoaWNoIHdvdWxkIG90aGVyd2lz
ZSBiZSBpbnRlZ2VycyBidXQgd2hpY2ggaGF2ZSB0aGUgJ2YnIHN1ZmZpeCB3aWxsIGJlCi0gIC8v
IGZvcmNlZCB0byBiZSBpbnRlcnByZXRlZCBhcyBmbG9hdHMuICBGb3IgYWxsIG90aGVyIHB1cnBv
c2VzLCB0aGUgJ2YnIGlzCi0gIC8vIGlnbm9yZWQuCi0gIHZvaWQgc2V0X2FsbG93X2ZfYWZ0ZXJf
ZmxvYXQoYm9vbCB2YWx1ZSkgeyBhbGxvd19mX2FmdGVyX2Zsb2F0XyA9IHZhbHVlOyB9Ci0KLSAg
Ly8gVmFsaWQgdmFsdWVzIGZvciBzZXRfY29tbWVudF9zdHlsZSgpLgotICBlbnVtIENvbW1lbnRT
dHlsZSB7Ci0gICAgLy8gTGluZSBjb21tZW50cyBiZWdpbiB3aXRoICIvLyIsIGJsb2NrIGNvbW1l
bnRzIGFyZSBkZWxpbWl0ZWQgYnkgIi8qIiBhbmQKLSAgICAvLyAiKi8iLgotICAgIENQUF9DT01N
RU5UX1NUWUxFLAotICAgIC8vIExpbmUgY29tbWVudHMgYmVnaW4gd2l0aCAiIyIuICBObyB3YXkg
dG8gd3JpdGUgYmxvY2sgY29tbWVudHMuCi0gICAgU0hfQ09NTUVOVF9TVFlMRQotICB9OwotCi0g
IC8vIFNldHMgdGhlIGNvbW1lbnQgc3R5bGUuCi0gIHZvaWQgc2V0X2NvbW1lbnRfc3R5bGUoQ29t
bWVudFN0eWxlIHN0eWxlKSB7IGNvbW1lbnRfc3R5bGVfID0gc3R5bGU7IH0KLQotICAvLyBXaGV0
aGVyIHRvIHJlcXVpcmUgd2hpdGVzcGFjZSBiZXR3ZWVuIGEgbnVtYmVyIGFuZCBhIGZpZWxkIG5h
bWUuCi0gIC8vIERlZmF1bHQgaXMgdHJ1ZS4gRG8gbm90IHVzZSB0aGlzOyBmb3IgR29vZ2xlLWlu
dGVybmFsIGNsZWFudXAgb25seS4KLSAgdm9pZCBzZXRfcmVxdWlyZV9zcGFjZV9hZnRlcl9udW1i
ZXIoYm9vbCByZXF1aXJlKSB7Ci0gICAgcmVxdWlyZV9zcGFjZV9hZnRlcl9udW1iZXJfID0gcmVx
dWlyZTsKLSAgfQotCi0gIC8vIFdoZXRoZXIgdG8gYWxsb3cgc3RyaW5nIGxpdGVyYWxzIHRvIHNw
YW4gbXVsdGlwbGUgbGluZXMuIERlZmF1bHQgaXMgZmFsc2UuCi0gIC8vIERvIG5vdCB1c2UgdGhp
czsgZm9yIEdvb2dsZS1pbnRlcm5hbCBjbGVhbnVwIG9ubHkuCi0gIHZvaWQgc2V0X2FsbG93X211
bHRpbGluZV9zdHJpbmdzKGJvb2wgYWxsb3cpIHsKLSAgICBhbGxvd19tdWx0aWxpbmVfc3RyaW5n
c18gPSBhbGxvdzsKLSAgfQotCi0gIC8vIEV4dGVybmFsIGhlbHBlcjogdmFsaWRhdGUgYW4gaWRl
bnRpZmllci4KLSAgc3RhdGljIGJvb2wgSXNJZGVudGlmaWVyKGNvbnN0IHN0cmluZyYgdGV4dCk7
Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05T
VFJVQ1RPUlMoVG9rZW5pemVyKTsKLQotICBUb2tlbiBjdXJyZW50XzsgICAgICAgICAgIC8vIFJl
dHVybmVkIGJ5IGN1cnJlbnQoKS4KLSAgVG9rZW4gcHJldmlvdXNfOyAgICAgICAgICAvLyBSZXR1
cm5lZCBieSBwcmV2aW91cygpLgotCi0gIFplcm9Db3B5SW5wdXRTdHJlYW0qIGlucHV0XzsKLSAg
RXJyb3JDb2xsZWN0b3IqIGVycm9yX2NvbGxlY3Rvcl87Ci0KLSAgY2hhciBjdXJyZW50X2NoYXJf
OyAgICAgICAvLyA9PSBidWZmZXJfW2J1ZmZlcl9wb3NfXSwgdXBkYXRlZCBieSBOZXh0Q2hhcigp
LgotICBjb25zdCBjaGFyKiBidWZmZXJfOyAgICAgIC8vIEN1cnJlbnQgYnVmZmVyIHJldHVybmVk
IGZyb20gaW5wdXRfLgotICBpbnQgYnVmZmVyX3NpemVfOyAgICAgICAgIC8vIFNpemUgb2YgYnVm
ZmVyXy4KLSAgaW50IGJ1ZmZlcl9wb3NfOyAgICAgICAgICAvLyBDdXJyZW50IHBvc2l0aW9uIHdp
dGhpbiB0aGUgYnVmZmVyLgotICBib29sIHJlYWRfZXJyb3JfOyAgICAgICAgIC8vIERpZCB3ZSBw
cmV2aW91c2x5IGVuY291bnRlciBhIHJlYWQgZXJyb3I/Ci0KLSAgLy8gTGluZSBhbmQgY29sdW1u
IG51bWJlciBvZiBjdXJyZW50X2NoYXJfIHdpdGhpbiB0aGUgd2hvbGUgaW5wdXQgc3RyZWFtLgot
ICBpbnQgbGluZV87Ci0gIENvbHVtbk51bWJlciBjb2x1bW5fOwotCi0gIC8vIFN0cmluZyB0byB3
aGljaCB0ZXh0IHNob3VsZCBiZSBhcHBlbmRlZCBhcyB3ZSBhZHZhbmNlIHRocm91Z2ggaXQuCi0g
IC8vIENhbGwgUmVjb3JkVG8oJnN0cikgdG8gc3RhcnQgcmVjb3JkaW5nIGFuZCBTdG9wUmVjb3Jk
aW5nKCkgdG8gc3RvcC4KLSAgLy8gRS5nLiBTdGFydFRva2VuKCkgY2FsbHMgUmVjb3JkVG8oJmN1
cnJlbnRfLnRleHQpLiAgcmVjb3JkX3N0YXJ0XyBpcyB0aGUKLSAgLy8gcG9zaXRpb24gd2l0aGlu
IHRoZSBjdXJyZW50IGJ1ZmZlciB3aGVyZSByZWNvcmRpbmcgc3RhcnRlZC4KLSAgc3RyaW5nKiBy
ZWNvcmRfdGFyZ2V0XzsKLSAgaW50IHJlY29yZF9zdGFydF87Ci0KLSAgLy8gT3B0aW9ucy4KLSAg
Ym9vbCBhbGxvd19mX2FmdGVyX2Zsb2F0XzsKLSAgQ29tbWVudFN0eWxlIGNvbW1lbnRfc3R5bGVf
OwotICBib29sIHJlcXVpcmVfc3BhY2VfYWZ0ZXJfbnVtYmVyXzsKLSAgYm9vbCBhbGxvd19tdWx0
aWxpbmVfc3RyaW5nc187Ci0KLSAgLy8gU2luY2Ugd2UgY291bnQgY29sdW1ucyB3ZSBuZWVkIHRv
IGludGVycHJldCB0YWJzIHNvbWVob3cuICBXZSdsbCB0YWtlCi0gIC8vIHRoZSBzdGFuZGFyZCA4
LWNoYXJhY3RlciBkZWZpbml0aW9uIGZvciBsYWNrIG9mIGFueSB3YXkgdG8gZG8gYmV0dGVyLgot
ICAvLyBUaGlzIG11c3QgbWF0Y2ggdGhlIGRvY3VtZW50YXRpb24gb2YgQ29sdW1uTnVtYmVyLgot
ICBzdGF0aWMgY29uc3QgaW50IGtUYWJXaWR0aCA9IDg7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8g
SGVscGVyIG1ldGhvZHMuCi0KLSAgLy8gQ29uc3VtZSB0aGlzIGNoYXJhY3RlciBhbmQgYWR2YW5j
ZSB0byB0aGUgbmV4dCBvbmUuCi0gIHZvaWQgTmV4dENoYXIoKTsKLQotICAvLyBSZWFkIGEgbmV3
IGJ1ZmZlciBmcm9tIHRoZSBpbnB1dC4KLSAgdm9pZCBSZWZyZXNoKCk7Ci0KLSAgaW5saW5lIHZv
aWQgUmVjb3JkVG8oc3RyaW5nKiB0YXJnZXQpOwotICBpbmxpbmUgdm9pZCBTdG9wUmVjb3JkaW5n
KCk7Ci0KLSAgLy8gQ2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgb2YgYSBuZXcKLSAgLy8gdG9rZW4gKG5vdCBpbmNsdWRpbmcgd2hpdGVzcGFj
ZSBvciBjb21tZW50cykuCi0gIGlubGluZSB2b2lkIFN0YXJ0VG9rZW4oKTsKLSAgLy8gQ2FsbGVk
IHdoZW4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIg
dGhlCi0gIC8vIGVuZCBvZiB0aGUgbGFzdCB0b2tlbi4gIEFmdGVyIHRoaXMgcmV0dXJucywgY3Vy
cmVudF8udGV4dCB3aWxsCi0gIC8vIGNvbnRhaW4gYWxsIHRleHQgY29uc3VtZWQgc2luY2UgU3Rh
cnRUb2tlbigpIHdhcyBjYWxsZWQuCi0gIGlubGluZSB2b2lkIEVuZFRva2VuKCk7Ci0KLSAgLy8g
Q29udmVuaWVuY2UgbWV0aG9kIHRvIGFkZCBhbiBlcnJvciBhdCB0aGUgY3VycmVudCBsaW5lIGFu
ZCBjb2x1bW4uCi0gIHZvaWQgQWRkRXJyb3IoY29uc3Qgc3RyaW5nJiBtZXNzYWdlKSB7Ci0gICAg
ZXJyb3JfY29sbGVjdG9yXy0+QWRkRXJyb3IobGluZV8sIGNvbHVtbl8sIG1lc3NhZ2UpOwotICB9
Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gVGhlIGZvbGxvd2luZyBmb3VyIG1ldGhvZHMgYXJlIHVz
ZWQgdG8gY29uc3VtZSB0b2tlbnMgb2Ygc3BlY2lmaWMKLSAgLy8gdHlwZXMuICBUaGV5IGFyZSBh
Y3R1YWxseSB1c2VkIHRvIGNvbnN1bWUgYWxsIGNoYXJhY3RlcnMgKmFmdGVyKgotICAvLyB0aGUg
Zmlyc3QsIHNpbmNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGNvbnN1bWVzIHRoZSBmaXJzdCBjaGFy
YWN0ZXIKLSAgLy8gaW4gb3JkZXIgdG8gZGVjaWRlIHdoYXQga2luZCBvZiB0b2tlbiBpcyBiZWlu
ZyByZWFkLgotCi0gIC8vIFJlYWQgYW5kIGNvbnN1bWUgYSBzdHJpbmcsIGVuZGluZyB3aGVuIHRo
ZSBnaXZlbiBkZWxpbWl0ZXIgaXMKLSAgLy8gY29uc3VtZWQuCi0gIHZvaWQgQ29uc3VtZVN0cmlu
ZyhjaGFyIGRlbGltaXRlcik7Ci0KLSAgLy8gUmVhZCBhbmQgY29uc3VtZSBhIG51bWJlciwgcmV0
dXJuaW5nIFRZUEVfRkxPQVQgb3IgVFlQRV9JTlRFR0VSCi0gIC8vIGRlcGVuZGluZyBvbiB3aGF0
IHdhcyByZWFkLiAgVGhpcyBuZWVkcyB0byBrbm93IGlmIHRoZSBmaXJzdAotICAvLyBjaGFyYWN0
ZXIgd2FzIGEgemVybyBpbiBvcmRlciB0byBjb3JyZWN0bHkgcmVjb2duaXplIGhleCBhbmQgb2N0
YWwKLSAgLy8gbnVtYmVycy4KLSAgLy8gSXQgYWxzbyBuZWVkcyB0byBrbm93IGlmIHRoZSBmaXJz
dCBjaGFyYWN0ZWQgd2FzIGEgLiB0byBwYXJzZSBmbG9hdGluZwotICAvLyBwb2ludCBjb3JyZWN0
bHkuCi0gIFRva2VuVHlwZSBDb25zdW1lTnVtYmVyKGJvb2wgc3RhcnRlZF93aXRoX3plcm8sIGJv
b2wgc3RhcnRlZF93aXRoX2RvdCk7Ci0KLSAgLy8gQ29uc3VtZSB0aGUgcmVzdCBvZiBhIGxpbmUu
Ci0gIHZvaWQgQ29uc3VtZUxpbmVDb21tZW50KHN0cmluZyogY29udGVudCk7Ci0gIC8vIENvbnN1
bWUgdW50aWwgIiovIi4KLSAgdm9pZCBDb25zdW1lQmxvY2tDb21tZW50KHN0cmluZyogY29udGVu
dCk7Ci0KLSAgZW51bSBOZXh0Q29tbWVudFN0YXR1cyB7Ci0gICAgLy8gU3RhcnRlZCBhIGxpbmUg
Y29tbWVudC4KLSAgICBMSU5FX0NPTU1FTlQsCi0KLSAgICAvLyBTdGFydGVkIGEgYmxvY2sgY29t
bWVudC4KLSAgICBCTE9DS19DT01NRU5ULAotCi0gICAgLy8gQ29uc3VtZWQgYSBzbGFzaCwgdGhl
biByZWFsaXplZCBpdCB3YXNuJ3QgYSBjb21tZW50LiAgY3VycmVudF8gaGFzCi0gICAgLy8gYmVl
biBmaWxsZWQgaW4gd2l0aCBhIHNsYXNoIHRva2VuLiAgVGhlIGNhbGxlciBzaG91bGQgcmV0dXJu
IGl0LgotICAgIFNMQVNIX05PVF9DT01NRU5ULAotCi0gICAgLy8gV2UgZG8gbm90IGFwcGVhciB0
byBiZSBzdGFydGluZyBhIGNvbW1lbnQgaGVyZS4KLSAgICBOT19DT01NRU5UCi0gIH07Ci0KLSAg
Ly8gSWYgd2UncmUgYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IGNvbW1lbnQsIGNvbnN1bWUgaXQgYW5k
IHJldHVybiB3aGF0IGtpbmQKLSAgLy8gb2YgY29tbWVudCBpdCBpcy4KLSAgTmV4dENvbW1lbnRT
dGF0dXMgVHJ5Q29uc3VtZUNvbW1lbnRTdGFydCgpOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIFRo
ZXNlIGhlbHBlciBtZXRob2RzIG1ha2UgdGhlIHBhcnNpbmcgY29kZSBtb3JlIHJlYWRhYmxlLiAg
VGhlCi0gIC8vICJjaGFyYWN0ZXIgY2xhc3NlcyIgcmVmZXJyZWQgdG8gYXJlIGRlZmluZWQgYXQg
dGhlIHRvcCBvZiB0aGUgLmNjIGZpbGUuCi0gIC8vIEJhc2ljYWxseSBpdCBpcyBhIEMrKyBjbGFz
cyB3aXRoIG9uZSBtZXRob2Q6Ci0gIC8vICAgc3RhdGljIGJvb2wgSW5DbGFzcyhjaGFyIGMpOwot
ICAvLyBUaGUgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiBjIGlzIGEgbWVtYmVyIG9mIHRoaXMgImNs
YXNzIiwgbGlrZSAiTGV0dGVyIgotICAvLyBvciAiRGlnaXQiLgotCi0gIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgb2YgdGhlIGdpdmVuIGNoYXJhY3RlcgotICAv
LyBjbGFzcywgYnV0IGRvZXMgbm90IGNvbnN1bWUgYW55dGhpbmcuCi0gIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlckNsYXNzPgotICBpbmxpbmUgYm9vbCBMb29raW5nQXQoKTsKLQotICAvLyBJ
ZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgaW4gdGhlIGdpdmVuIGNsYXNzLCBjb25zdW1lIGl0
IGFuZCByZXR1cm4KLSAgLy8gdHJ1ZS4gIE90aGVyd2lzZSByZXR1cm4gZmFsc2UuCi0gIC8vIGUu
Zy4gVHJ5Q29uc3VtZU9uZTxMZXR0ZXI+KCkKLSAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
Q2xhc3M+Ci0gIGlubGluZSBib29sIFRyeUNvbnN1bWVPbmUoKTsKLQotICAvLyBMaWtlIGFib3Zl
LCBidXQgdHJ5IHRvIGNvbnN1bWUgdGhlIHNwZWNpZmljIGNoYXJhY3RlciBpbmRpY2F0ZWQuCi0g
IGlubGluZSBib29sIFRyeUNvbnN1bWUoY2hhciBjKTsKLQotICAvLyBDb25zdW1lIHplcm8gb3Ig
bW9yZSBvZiB0aGUgZ2l2ZW4gY2hhcmFjdGVyIGNsYXNzLgotICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJDbGFzcz4KLSAgaW5saW5lIHZvaWQgQ29uc3VtZVplcm9Pck1vcmUoKTsKLQotICAv
LyBDb25zdW1lIG9uZSBvciBtb3JlIG9mIHRoZSBnaXZlbiBjaGFyYWN0ZXIgY2xhc3Mgb3IgbG9n
IHRoZSBnaXZlbgotICAvLyBlcnJvciBtZXNzYWdlLgotICAvLyBlLmcuIENvbnN1bWVPbmVPck1v
cmU8RGlnaXQ+KCJFeHBlY3RlZCBkaWdpdHMuIik7Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlckNsYXNzPgotICBpbmxpbmUgdm9pZCBDb25zdW1lT25lT3JNb3JlKGNvbnN0IGNoYXIqIGVy
cm9yKTsKLX07Ci0KLS8vIGlubGluZSBtZXRob2RzID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWlubGluZSBjb25zdCBUb2tlbml6ZXI6OlRva2Vu
JiBUb2tlbml6ZXI6OmN1cnJlbnQoKSB7Ci0gIHJldHVybiBjdXJyZW50XzsKLX0KLQotaW5saW5l
IGNvbnN0IFRva2VuaXplcjo6VG9rZW4mIFRva2VuaXplcjo6cHJldmlvdXMoKSB7Ci0gIHJldHVy
biBwcmV2aW91c187Ci19Ci0KLWlubGluZSB2b2lkIFRva2VuaXplcjo6UGFyc2VTdHJpbmcoY29u
c3Qgc3RyaW5nJiB0ZXh0LCBzdHJpbmcqIG91dHB1dCkgewotICBvdXRwdXQtPmNsZWFyKCk7Ci0g
IFBhcnNlU3RyaW5nQXBwZW5kKHRleHQsIG91dHB1dCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBp
bwotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNl
bmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0lPX1RPS0VOSVpFUl9IX18KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9pby90b2tlbml6ZXJfdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvaW8vdG9rZW5pemVyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhZTA4MTFmODkyNjkyYzIwMTM3YjNhOTAwMWE1YzFjZWViMDUyZWQ4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9p
by90b2tlbml6ZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw5OTYgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdv
b2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBC
dWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3Ro
ZXJzLgotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVk
ZSA8dmVjdG9yPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3Rva2VuaXplci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGwuaD4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1
dGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0Lmg+Ci0j
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2Ug
cHJvdG9idWYgewotbmFtZXNwYWNlIGlvIHsKLW5hbWVzcGFjZSB7Ci0KLS8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS8vIERhdGEtRHJpdmVuIFRlc3QgSW5mcmFzdHJ1Y3R1cmUKLQotLy8gVE9ETyhrZW50b24pOiAg
VGhpcyBpcyBjb3BpZWQgZnJvbSBjb2RlZF9zdHJlYW1fdW5pdHRlc3QuICBUaGlzIGlzCi0vLyAg
IHRlbXBvcmFyeSB1bnRpbCB0aGVzZSBmZXRhdXJlcyBhcmUgaW50ZWdyYXRlZCBpbnRvIGdUZXN0
IGl0c2VsZi4KLQotLy8gVEVTVF8xRCBhbmQgVEVTVF8yRCBhcmUgbWFjcm9zIEknZCBldmVudHVh
bGx5IGxpa2UgdG8gc2VlIGFkZGVkIHRvCi0vLyBnVGVzdC4gIFRoZXNlIG1hY3JvcyBjYW4gYmUg
dXNlZCB0byBkZWNsYXJlIHRlc3RzIHdoaWNoIHNob3VsZCBiZQotLy8gcnVuIG11bHRpcGxlIHRp
bWVzLCBvbmNlIGZvciBlYWNoIGl0ZW0gaW4gc29tZSBpbnB1dCBhcnJheS4gIFRFU1RfMUQKLS8v
IHRlc3RzIGFsbCBjYXNlcyBpbiBhIHNpbmdsZSBpbnB1dCBhcnJheS4gIFRFU1RfMkQgdGVzdHMg
YWxsCi0vLyBjb21iaW5hdGlvbnMgb2YgY2FzZXMgZnJvbSB0d28gYXJyYXlzLiAgVGhlIGFycmF5
cyBtdXN0IGJlIHN0YXRpY2FsbHkKLS8vIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBHT09HTEVfQVJS
QVlTSVpFKCkgbWFjcm8gd29ya3Mgb24gdGhlbS4gIEV4YW1wbGU6Ci0vLwotLy8gaW50IGtDYXNl
c1tdID0gezEsIDIsIDMsIDR9Ci0vLyBURVNUXzFEKE15Rml4dHVyZSwgTXlUZXN0LCBrQ2FzZXMp
IHsKLS8vICAgRVhQRUNUX0dUKGtDYXNlc19jYXNlLCAwKTsKLS8vIH0KLS8vCi0vLyBUaGlzIHRl
c3QgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbnVtYmVycyAxLCAyLCAzLCBhbmQgNCBhbmQgdGVzdHMg
dGhhdAotLy8gdGhleSBhcmUgYWxsIGdyYXRlciB0aGFuIHplcm8uICBJbiBjYXNlIG9mIGZhaWx1
cmUsIHRoZSBleGFjdCBjYXNlCi0vLyB3aGljaCBmYWlsZWQgd2lsbCBiZSBwcmludGVkLiAgVGhl
IGNhc2UgdHlwZSBtdXN0IGJlIHByaW50YWJsZSB1c2luZwotLy8gb3N0cmVhbTo6b3BlcmF0b3I8
PC4KLQotI2RlZmluZSBURVNUXzFEKEZJWFRVUkUsIE5BTUUsIENBU0VTKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjbGFzcyBGSVhUVVJFIyNfIyNOQU1FIyNfREQg
OiBwdWJsaWMgRklYVFVSRSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgcHJvdGVj
dGVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDYXNlVHlwZT4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHZvaWQgRG9TaW5nbGVDYXNlKGNv
bnN0IENhc2VUeXBlJiBDQVNFUyMjX2Nhc2UpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICB9
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBURVNUX0YoRklYVFVSRSMj
XyMjTkFNRSMjX0RELCBOQU1FKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgR09PR0xFX0FSUkFZU0laRShDQVNFUyk7IGkrKykg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFNDT1BFRF9UUkFDRSh0ZXN0aW5n
OjpNZXNzYWdlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgPDwgI0NBU0VTICIgY2FzZSAjIiA8PCBpIDw8ICI6ICIgPDwgQ0FTRVNbaV0pOyAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIERvU2luZ2xlQ2FzZShDQVNFU1tpXSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5
cGVuYW1lIENhc2VUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgdm9pZCBGSVhUVVJFIyNfIyNOQU1FIyNfREQ6OkRvU2luZ2xlQ2FzZShjb25zdCBD
YXNlVHlwZSYgQ0FTRVMjI19jYXNlKQotCi0jZGVmaW5lIFRFU1RfMkQoRklYVFVSRSwgTkFNRSwg
Q0FTRVMxLCBDQVNFUzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNsYXNzIEZJ
WFRVUkUjI18jI05BTUUjI19ERCA6IHB1YmxpYyBGSVhUVVJFIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICBwcm90ZWN0ZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENh
c2VUeXBlMSwgdHlwZW5hbWUgQ2FzZVR5cGUyPiAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
dm9pZCBEb1NpbmdsZUNhc2UoY29uc3QgQ2FzZVR5cGUxJiBDQVNFUzEjI19jYXNlLCAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2FzZVR5cGUyJiBD
QVNFUzIjI19jYXNlKTsgICAgICAgICAgICAgICAgICAgICBcCi0gIH07ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIFRFU1RfRihGSVhUVVJFIyNfIyNOQU1FIyNfREQsIE5B
TUUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBHT09HTEVfQVJSQVlTSVpFKENBU0VTMSk7IGkrKykgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBHT09HTEVfQVJSQVlTSVpF
KENBU0VTMik7IGorKykgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgU0NPUEVE
X1RSQUNFKHRlc3Rpbmc6Ok1lc3NhZ2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICA8PCAjQ0FTRVMxICIgY2FzZSAjIiA8PCBpIDw8ICI6ICIgPDwgQ0FT
RVMxW2ldIDw8ICIsICIgICAgICAgICAgIFwKLSAgICAgICAgICA8PCAjQ0FTRVMyICIgY2FzZSAj
IiA8PCBqIDw8ICI6ICIgPDwgQ0FTRVMyW2pdKTsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
RG9TaW5nbGVDYXNlKENBU0VTMVtpXSwgQ0FTRVMyW2pdKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVu
YW1lIENhc2VUeXBlMSwgdHlwZW5hbWUgQ2FzZVR5cGUyPiAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgdm9pZCBGSVhUVVJFIyNfIyNOQU1FIyNfREQ6OkRvU2luZ2xlQ2FzZShjb25zdCBDYXNl
VHlwZTEmIENBU0VTMSMjX2Nhc2UsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDYXNlVHlwZTImIENBU0VTMiMjX2Nhc2UpCi0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotLy8gQW4gaW5wdXQgc3RyZWFtIHRoYXQgaXMgYmFzaWNhbGx5IGxpa2UgYW4gQXJyYXlJ
bnB1dFN0cmVhbSBidXQgc29tZXRpbWVzCi0vLyByZXR1cm5zIGVtcHR5IGJ1ZmZlcnMsIGp1c3Qg
dG8gdGhyb3cgdXMgb2ZmLgotY2xhc3MgVGVzdElucHV0U3RyZWFtIDogcHVibGljIFplcm9Db3B5
SW5wdXRTdHJlYW0gewotIHB1YmxpYzoKLSAgVGVzdElucHV0U3RyZWFtKGNvbnN0IHZvaWQqIGRh
dGEsIGludCBzaXplLCBpbnQgYmxvY2tfc2l6ZSkKLSAgICA6IGFycmF5X3N0cmVhbV8oZGF0YSwg
c2l6ZSwgYmxvY2tfc2l6ZSksIGNvdW50ZXJfKDApIHt9Ci0gIH5UZXN0SW5wdXRTdHJlYW0oKSB7
fQotCi0gIC8vIGltcGxlbWVudHMgWmVyb0NvcHlJbnB1dFN0cmVhbSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wgTmV4dChjb25zdCB2b2lkKiogZGF0YSwgaW50KiBz
aXplKSB7Ci0gICAgLy8gV2UnbGwgcmV0dXJuIGVtcHR5IGJ1ZmZlcnMgc3RhcnRpbmcgd2l0aCB0
aGUgZmlyc3QgYnVmZmVyLCBhbmQgZXZlcnkKLSAgICAvLyAzIGFuZCA1IGJ1ZmZlcnMgYWZ0ZXIg
dGhhdC4KLSAgICBpZiAoY291bnRlcl8gJSAzID09IDAgfHwgY291bnRlcl8gJSA1ID09IDApIHsK
LSAgICAgICpkYXRhID0gTlVMTDsKLSAgICAgICpzaXplID0gMDsKLSAgICAgICsrY291bnRlcl87
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgKytjb3VudGVyXzsKLSAg
ICAgIHJldHVybiBhcnJheV9zdHJlYW1fLk5leHQoZGF0YSwgc2l6ZSk7Ci0gICAgfQotICB9Ci0K
LSAgdm9pZCBCYWNrVXAoaW50IGNvdW50KSAgeyByZXR1cm4gYXJyYXlfc3RyZWFtXy5CYWNrVXAo
Y291bnQpOyB9Ci0gIGJvb2wgU2tpcChpbnQgY291bnQpICAgIHsgcmV0dXJuIGFycmF5X3N0cmVh
bV8uU2tpcChjb3VudCk7ICAgfQotICBpbnQ2NCBCeXRlQ291bnQoKSBjb25zdCB7IHJldHVybiBh
cnJheV9zdHJlYW1fLkJ5dGVDb3VudCgpOyAgIH0KLQotIHByaXZhdGU6Ci0gIEFycmF5SW5wdXRT
dHJlYW0gYXJyYXlfc3RyZWFtXzsKLSAgaW50IGNvdW50ZXJfOwotfTsKLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0vLyBBbiBlcnJvciBjb2xsZWN0b3Igd2hpY2ggc2ltcGx5IGNvbmNhdGVuYXRlcyBhbGwg
aXRzIGVycm9ycyBpbnRvIGEgYmlnCi0vLyBibG9jayBvZiB0ZXh0IHdoaWNoIGNhbiBiZSBjaGVj
a2VkLgotY2xhc3MgVGVzdEVycm9yQ29sbGVjdG9yIDogcHVibGljIEVycm9yQ29sbGVjdG9yIHsK
LSBwdWJsaWM6Ci0gIFRlc3RFcnJvckNvbGxlY3RvcigpIHt9Ci0gIH5UZXN0RXJyb3JDb2xsZWN0
b3IoKSB7fQotCi0gIHN0cmluZyB0ZXh0XzsKLQotICAvLyBpbXBsZW1lbnRzIEVycm9yQ29sbGVj
dG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2b2lkIEFkZEVy
cm9yKGludCBsaW5lLCBpbnQgY29sdW1uLCBjb25zdCBzdHJpbmcmIG1lc3NhZ2UpIHsKLSAgICBz
dHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5kKCZ0ZXh0XywgIiQwOiQxOiAkMlxuIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIGNvbHVtbiwgbWVzc2FnZSk7Ci0gIH0K
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gV2UgdGVzdCBlYWNoIG9wZXJhdGlvbiBvdmVyIGEg
dmFyaWV0eSBvZiBibG9jayBzaXplcyB0byBpbnN1cmUgdGhhdAotLy8gd2UgdGVzdCBjYXNlcyB3
aGVyZSByZWFkcyBjcm9zcyBidWZmZXIgYm91bmRhcmllcyBhcyB3ZWxsIGFzIGNhc2VzCi0vLyB3
aGVyZSB0aGV5IGRvbid0LiAgVGhpcyBpcyBzb3J0IG9mIGEgYnJ1dGUtZm9yY2UgYXBwcm9hY2gg
dG8gdGhpcywKLS8vIGJ1dCBpdCdzIGVhc3kgdG8gd3JpdGUgYW5kIGVhc3kgdG8gdW5kZXJzdGFu
ZC4KLWNvbnN0IGludCBrQmxvY2tTaXplc1tdID0gezEsIDIsIDMsIDUsIDcsIDEzLCAzMiwgMTAy
NH07Ci0KLWNsYXNzIFRva2VuaXplclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJv
dGVjdGVkOgotICAvLyBGb3IgZWFzeSB0ZXN0aW5nLgotICB1aW50NjQgUGFyc2VJbnRlZ2VyKGNv
bnN0IHN0cmluZyYgdGV4dCkgewotICAgIHVpbnQ2NCByZXN1bHQ7Ci0gICAgRVhQRUNUX1RSVUUo
VG9rZW5pemVyOjpQYXJzZUludGVnZXIodGV4dCwga3VpbnQ2NG1heCwgJnJlc3VsdCkpOwotICAg
IHJldHVybiByZXN1bHQ7Ci0gIH0KLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLy8gVGhlc2UgdGVz
dHMgY2F1c2VzIGdjYyAzLjMuNSAoYW5kIGVhcmxpZXI/KSB0byBnaXZlIHRoZSBjcnlwdGljIGVy
cm9yOgotLy8gICAic29ycnksIHVuaW1wbGVtZW50ZWQ6IGBtZXRob2RfY2FsbF9leHByJyBub3Qg
c3VwcG9ydGVkIGJ5IGR1bXBfZXhwciIKLSNpZiAhZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVD
X18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMykKLQotLy8gSW4g
ZWFjaCB0ZXN0IGNhc2UsIHRoZSBlbnRpcmUgaW5wdXQgdGV4dCBzaG91bGQgcGFyc2UgYXMgYSBz
aW5nbGUgdG9rZW4KLS8vIG9mIHRoZSBnaXZlbiB0eXBlLgotc3RydWN0IFNpbXBsZVRva2VuQ2Fz
ZSB7Ci0gIHN0cmluZyBpbnB1dDsKLSAgVG9rZW5pemVyOjpUb2tlblR5cGUgdHlwZTsKLX07Ci0K
LWlubGluZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG91dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFNpbXBsZVRva2VuQ2FzZSYgdGVzdF9jYXNlKSB7Ci0gIHJldHVy
biBvdXQgPDwgQ0VzY2FwZSh0ZXN0X2Nhc2UuaW5wdXQpOwotfQotCi1TaW1wbGVUb2tlbkNhc2Ug
a1NpbXBsZVRva2VuQ2FzZXNbXSA9IHsKLSAgLy8gVGVzdCBpZGVudGlmaWVycy4KLSAgeyAiaGVs
bG8iLCAgICAgICBUb2tlbml6ZXI6OlRZUEVfSURFTlRJRklFUiB9LAotCi0gIC8vIFRlc3QgaW50
ZWdlcnMuCi0gIHsgIjEyMyIsICAgICAgICAgVG9rZW5pemVyOjpUWVBFX0lOVEVHRVIgfSwKLSAg
eyAiMHhhYjYiLCAgICAgICBUb2tlbml6ZXI6OlRZUEVfSU5URUdFUiB9LAotICB7ICIwWEFCNiIs
ICAgICAgIFRva2VuaXplcjo6VFlQRV9JTlRFR0VSIH0sCi0gIHsgIjBYMTIzNDU2NyIsICAgVG9r
ZW5pemVyOjpUWVBFX0lOVEVHRVIgfSwKLSAgeyAiMHg4OWFiY2RlZiIsICBUb2tlbml6ZXI6OlRZ
UEVfSU5URUdFUiB9LAotICB7ICIweDg5QUJDREVGIiwgIFRva2VuaXplcjo6VFlQRV9JTlRFR0VS
IH0sCi0gIHsgIjAxMjM0NTY3IiwgICAgVG9rZW5pemVyOjpUWVBFX0lOVEVHRVIgfSwKLQotICAv
LyBUZXN0IGZsb2F0cy4KLSAgeyAiMTIzLjQ1IiwgICAgICBUb2tlbml6ZXI6OlRZUEVfRkxPQVQg
fSwKLSAgeyAiMS4iLCAgICAgICAgICBUb2tlbml6ZXI6OlRZUEVfRkxPQVQgfSwKLSAgeyAiMWUz
IiwgICAgICAgICBUb2tlbml6ZXI6OlRZUEVfRkxPQVQgfSwKLSAgeyAiMUUzIiwgICAgICAgICBU
b2tlbml6ZXI6OlRZUEVfRkxPQVQgfSwKLSAgeyAiMWUtMyIsICAgICAgICBUb2tlbml6ZXI6OlRZ
UEVfRkxPQVQgfSwKLSAgeyAiMWUrMyIsICAgICAgICBUb2tlbml6ZXI6OlRZUEVfRkxPQVQgfSwK
LSAgeyAiMS5lMyIsICAgICAgICBUb2tlbml6ZXI6OlRZUEVfRkxPQVQgfSwKLSAgeyAiMS4yZTMi
LCAgICAgICBUb2tlbml6ZXI6OlRZUEVfRkxPQVQgfSwKLSAgeyAiLjEiLCAgICAgICAgICBUb2tl
bml6ZXI6OlRZUEVfRkxPQVQgfSwKLSAgeyAiLjFlMyIsICAgICAgICBUb2tlbml6ZXI6OlRZUEVf
RkxPQVQgfSwKLSAgeyAiLjFlLTMiLCAgICAgICBUb2tlbml6ZXI6OlRZUEVfRkxPQVQgfSwKLSAg
eyAiLjFlKzMiLCAgICAgICBUb2tlbml6ZXI6OlRZUEVfRkxPQVQgfSwKLQotICAvLyBUZXN0IHN0
cmluZ3MuCi0gIHsgIidoZWxsbyciLCAgICAgVG9rZW5pemVyOjpUWVBFX1NUUklORyB9LAotICB7
ICJcImZvb1wiIiwgICAgIFRva2VuaXplcjo6VFlQRV9TVFJJTkcgfSwKLSAgeyAiJ2FcImInIiwg
ICAgICBUb2tlbml6ZXI6OlRZUEVfU1RSSU5HIH0sCi0gIHsgIlwiYSdiXCIiLCAgICAgVG9rZW5p
emVyOjpUWVBFX1NUUklORyB9LAotICB7ICInYVxcJ2InIiwgICAgIFRva2VuaXplcjo6VFlQRV9T
VFJJTkcgfSwKLSAgeyAiXCJhXFxcImJcIiIsICBUb2tlbml6ZXI6OlRZUEVfU1RSSU5HIH0sCi0g
IHsgIidcXHhmJyIsICAgICAgVG9rZW5pemVyOjpUWVBFX1NUUklORyB9LAotICB7ICInXFwwJyIs
ICAgICAgIFRva2VuaXplcjo6VFlQRV9TVFJJTkcgfSwKLQotICAvLyBUZXN0IHN5bWJvbHMuCi0g
IHsgIisiLCAgICAgICAgICAgVG9rZW5pemVyOjpUWVBFX1NZTUJPTCB9LAotICB7ICIuIiwgICAg
ICAgICAgIFRva2VuaXplcjo6VFlQRV9TWU1CT0wgfSwKLX07Ci0KLVRFU1RfMkQoVG9rZW5pemVy
VGVzdCwgU2ltcGxlVG9rZW5zLCBrU2ltcGxlVG9rZW5DYXNlcywga0Jsb2NrU2l6ZXMpIHsKLSAg
Ly8gU2V0IHVwIHRoZSB0b2tlbml6ZXIuCi0gIFRlc3RJbnB1dFN0cmVhbSBpbnB1dChrU2ltcGxl
VG9rZW5DYXNlc19jYXNlLmlucHV0LmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGtT
aW1wbGVUb2tlbkNhc2VzX2Nhc2UuaW5wdXQuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0gIFRlc3RFcnJvckNvbGxlY3RvciBlcnJvcl9jb2xsZWN0
b3I7Ci0gIFRva2VuaXplciB0b2tlbml6ZXIoJmlucHV0LCAmZXJyb3JfY29sbGVjdG9yKTsKLQot
ICAvLyBCZWZvcmUgTmV4dCgpIGlzIGNhbGxlZCwgdGhlIGluaXRpYWwgdG9rZW4gc2hvdWxkIGFs
d2F5cyBiZSBUWVBFX1NUQVJULgotICBFWFBFQ1RfRVEoVG9rZW5pemVyOjpUWVBFX1NUQVJULCB0
b2tlbml6ZXIuY3VycmVudCgpLnR5cGUpOwotICBFWFBFQ1RfRVEoIiIsIHRva2VuaXplci5jdXJy
ZW50KCkudGV4dCk7Ci0gIEVYUEVDVF9FUSgwLCB0b2tlbml6ZXIuY3VycmVudCgpLmxpbmUpOwot
ICBFWFBFQ1RfRVEoMCwgdG9rZW5pemVyLmN1cnJlbnQoKS5jb2x1bW4pOwotICBFWFBFQ1RfRVEo
MCwgdG9rZW5pemVyLmN1cnJlbnQoKS5lbmRfY29sdW1uKTsKLQotICAvLyBQYXJzZSB0aGUgdG9r
ZW4uCi0gIEFTU0VSVF9UUlVFKHRva2VuaXplci5OZXh0KCkpOwotCi0gIC8vIENoZWNrIHRoYXQg
aXQgaGFzIHRoZSByaWdodCB0eXBlLgotICBFWFBFQ1RfRVEoa1NpbXBsZVRva2VuQ2FzZXNfY2Fz
ZS50eXBlLCB0b2tlbml6ZXIuY3VycmVudCgpLnR5cGUpOwotICAvLyBDaGVjayB0aGF0IGl0IGNv
bnRhaW5zIHRoZSBjb21wbGV0ZSBpbnB1dCB0ZXh0LgotICBFWFBFQ1RfRVEoa1NpbXBsZVRva2Vu
Q2FzZXNfY2FzZS5pbnB1dCwgdG9rZW5pemVyLmN1cnJlbnQoKS50ZXh0KTsKLSAgLy8gQ2hlY2sg
dGhhdCBpdCBpcyBsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0Ci0gIEVYUEVD
VF9FUSgwLCB0b2tlbml6ZXIuY3VycmVudCgpLmxpbmUpOwotICBFWFBFQ1RfRVEoMCwgdG9rZW5p
emVyLmN1cnJlbnQoKS5jb2x1bW4pOwotICBFWFBFQ1RfRVEoa1NpbXBsZVRva2VuQ2FzZXNfY2Fz
ZS5pbnB1dC5zaXplKCksCi0gICAgICAgICAgICB0b2tlbml6ZXIuY3VycmVudCgpLmVuZF9jb2x1
bW4pOwotCi0gIC8vIFRoZXJlIHNob3VsZCBiZSBubyBtb3JlIGlucHV0LgotICBFWFBFQ1RfRkFM
U0UodG9rZW5pemVyLk5leHQoKSk7Ci0KLSAgLy8gQWZ0ZXIgTmV4dCgpIHJldHVybnMgZmFsc2Us
IHRoZSB0b2tlbiBzaG91bGQgaGF2ZSB0eXBlIFRZUEVfRU5ELgotICBFWFBFQ1RfRVEoVG9rZW5p
emVyOjpUWVBFX0VORCwgdG9rZW5pemVyLmN1cnJlbnQoKS50eXBlKTsKLSAgRVhQRUNUX0VRKCIi
LCB0b2tlbml6ZXIuY3VycmVudCgpLnRleHQpOwotICBFWFBFQ1RfRVEoMCwgdG9rZW5pemVyLmN1
cnJlbnQoKS5saW5lKTsKLSAgRVhQRUNUX0VRKGtTaW1wbGVUb2tlbkNhc2VzX2Nhc2UuaW5wdXQu
c2l6ZSgpLCB0b2tlbml6ZXIuY3VycmVudCgpLmNvbHVtbik7Ci0gIEVYUEVDVF9FUShrU2ltcGxl
VG9rZW5DYXNlc19jYXNlLmlucHV0LnNpemUoKSwKLSAgICAgICAgICAgIHRva2VuaXplci5jdXJy
ZW50KCkuZW5kX2NvbHVtbik7Ci0KLSAgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGVycm9ycy4KLSAg
RVhQRUNUX1RSVUUoZXJyb3JfY29sbGVjdG9yLnRleHRfLmVtcHR5KCkpOwotfQotCi1URVNUXzFE
KFRva2VuaXplclRlc3QsIEZsb2F0U3VmZml4LCBrQmxvY2tTaXplcykgewotICAvLyBUZXN0IHRo
ZSAiYWxsb3dfZl9hZnRlcl9mbG9hdCIgb3B0aW9uLgotCi0gIC8vIFNldCB1cCB0aGUgdG9rZW5p
emVyLgotICBjb25zdCBjaGFyKiB0ZXh0ID0gIjFmIDIuNWYgNmUzZiA3RiI7Ci0gIFRlc3RJbnB1
dFN0cmVhbSBpbnB1dCh0ZXh0LCBzdHJsZW4odGV4dCksIGtCbG9ja1NpemVzX2Nhc2UpOwotICBU
ZXN0RXJyb3JDb2xsZWN0b3IgZXJyb3JfY29sbGVjdG9yOwotICBUb2tlbml6ZXIgdG9rZW5pemVy
KCZpbnB1dCwgJmVycm9yX2NvbGxlY3Rvcik7Ci0gIHRva2VuaXplci5zZXRfYWxsb3dfZl9hZnRl
cl9mbG9hdCh0cnVlKTsKLQotICAvLyBBZHZhbmNlIHRocm91Z2ggdG9rZW5zIGFuZCBjaGVjayB0
aGF0IHRoZXkgYXJlIHBhcnNlZCBhcyBleHBlY3RlZC4KLSAgQVNTRVJUX1RSVUUodG9rZW5pemVy
Lk5leHQoKSk7Ci0gIEVYUEVDVF9FUSh0b2tlbml6ZXIuY3VycmVudCgpLnRleHQsICIxZiIpOwot
ICBFWFBFQ1RfRVEodG9rZW5pemVyLmN1cnJlbnQoKS50eXBlLCBUb2tlbml6ZXI6OlRZUEVfRkxP
QVQpOwotICBBU1NFUlRfVFJVRSh0b2tlbml6ZXIuTmV4dCgpKTsKLSAgRVhQRUNUX0VRKHRva2Vu
aXplci5jdXJyZW50KCkudGV4dCwgIjIuNWYiKTsKLSAgRVhQRUNUX0VRKHRva2VuaXplci5jdXJy
ZW50KCkudHlwZSwgVG9rZW5pemVyOjpUWVBFX0ZMT0FUKTsKLSAgQVNTRVJUX1RSVUUodG9rZW5p
emVyLk5leHQoKSk7Ci0gIEVYUEVDVF9FUSh0b2tlbml6ZXIuY3VycmVudCgpLnRleHQsICI2ZTNm
Iik7Ci0gIEVYUEVDVF9FUSh0b2tlbml6ZXIuY3VycmVudCgpLnR5cGUsIFRva2VuaXplcjo6VFlQ
RV9GTE9BVCk7Ci0gIEFTU0VSVF9UUlVFKHRva2VuaXplci5OZXh0KCkpOwotICBFWFBFQ1RfRVEo
dG9rZW5pemVyLmN1cnJlbnQoKS50ZXh0LCAiN0YiKTsKLSAgRVhQRUNUX0VRKHRva2VuaXplci5j
dXJyZW50KCkudHlwZSwgVG9rZW5pemVyOjpUWVBFX0ZMT0FUKTsKLQotICAvLyBUaGVyZSBzaG91
bGQgYmUgbm8gbW9yZSBpbnB1dC4KLSAgRVhQRUNUX0ZBTFNFKHRva2VuaXplci5OZXh0KCkpOwot
ICAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZXJyb3JzLgotICBFWFBFQ1RfVFJVRShlcnJvcl9jb2xs
ZWN0b3IudGV4dF8uZW1wdHkoKSk7Ci19Ci0KLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8v
IEluIGVhY2ggY2FzZSwgdGhlIGlucHV0IGlzIHBhcnNlZCB0byBwcm9kdWNlIGEgbGlzdCBvZiB0
b2tlbnMuICBUaGUKLS8vIGxhc3QgdG9rZW4gaW4gIm91dHB1dCIgbXVzdCBoYXZlIHR5cGUgVFlQ
RV9FTkQuCi1zdHJ1Y3QgTXVsdGlUb2tlbkNhc2UgewotICBzdHJpbmcgaW5wdXQ7Ci0gIFRva2Vu
aXplcjo6VG9rZW4gb3V0cHV0WzEwXTsgIC8vIFRoZSBjb21waWxlciB3YW50cyBhIGNvbnN0YW50
IGFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpemUgZm9yIGluaXRp
YWxpemF0aW9uIHRvIHdvcmsuICBUaGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpcyBubyByZWFzb24gdGhpcyBjYW4ndCBiZSBpbmNyZWFzZWQgaWYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZGVkLgotfTsKLQotaW5saW5lIG9zdHJlYW0mIG9w
ZXJhdG9yPDwob3N0cmVhbSYgb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TXVsdGlUb2tlbkNhc2UmIHRlc3RfY2FzZSkgewotICByZXR1cm4gb3V0IDw8IENFc2NhcGUodGVz
dF9jYXNlLmlucHV0KTsKLX0KLQotTXVsdGlUb2tlbkNhc2Uga011bHRpVG9rZW5DYXNlc1tdID0g
ewotICAvLyBUZXN0IGVtcHR5IGlucHV0LgotICB7ICIiLCB7Ci0gICAgeyBUb2tlbml6ZXI6OlRZ
UEVfRU5EICAgICAgICwgIiIgICAgICwgMCwgIDAgfSwKLSAgfX0sCi0KLSAgLy8gVGVzdCBhbGwg
dG9rZW4gdHlwZXMgYXQgdGhlIHNhbWUgdGltZS4KLSAgeyAiZm9vIDEgMS4yICsgJ2JhciciLCB7
Ci0gICAgeyBUb2tlbml6ZXI6OlRZUEVfSURFTlRJRklFUiwgImZvbyIgICwgMCwgIDAsICAzIH0s
Ci0gICAgeyBUb2tlbml6ZXI6OlRZUEVfSU5URUdFUiAgICwgIjEiICAgICwgMCwgIDQsICA1IH0s
Ci0gICAgeyBUb2tlbml6ZXI6OlRZUEVfRkxPQVQgICAgICwgIjEuMiIgICwgMCwgIDYsICA5IH0s
Ci0gICAgeyBUb2tlbml6ZXI6OlRZUEVfU1lNQk9MICAgICwgIisiICAgICwgMCwgMTAsIDExIH0s
Ci0gICAgeyBUb2tlbml6ZXI6OlRZUEVfU1RSSU5HICAgICwgIidiYXInIiwgMCwgMTIsIDE3IH0s
Ci0gICAgeyBUb2tlbml6ZXI6OlRZUEVfRU5EICAgICAgICwgIiIgICAgICwgMCwgMTcsIDE3IH0s
Ci0gIH19LAotCi0gIC8vIFRlc3QgdGhhdCBjb25zZWN1dGl2ZSBzeW1ib2xzIGFyZSBwYXJzZWQg
YXMgc2VwYXJhdGUgdG9rZW5zLgotICB7ICIhQCslIiwgewotICAgIHsgVG9rZW5pemVyOjpUWVBF
X1NZTUJPTCAgICAsICIhIiAgICAsIDAsIDAsIDEgfSwKLSAgICB7IFRva2VuaXplcjo6VFlQRV9T
WU1CT0wgICAgLCAiQCIgICAgLCAwLCAxLCAyIH0sCi0gICAgeyBUb2tlbml6ZXI6OlRZUEVfU1lN
Qk9MICAgICwgIisiICAgICwgMCwgMiwgMyB9LAotICAgIHsgVG9rZW5pemVyOjpUWVBFX1NZTUJP
TCAgICAsICIlIiAgICAsIDAsIDMsIDQgfSwKLSAgICB7IFRva2VuaXplcjo6VFlQRV9FTkQgICAg
ICAgLCAiIiAgICAgLCAwLCA0LCA0IH0sCi0gIH19LAotCi0gIC8vIFRlc3QgdGhhdCBuZXdsaW5l
cyBhZmZlY3QgbGluZSBudW1iZXJzIGNvcnJlY3RseS4KLSAgeyAiZm9vIGJhclxucmFiIG9vZiIs
IHsKLSAgICB7IFRva2VuaXplcjo6VFlQRV9JREVOVElGSUVSLCAiZm9vIiwgMCwgIDAsIDMgfSwK
LSAgICB7IFRva2VuaXplcjo6VFlQRV9JREVOVElGSUVSLCAiYmFyIiwgMCwgIDQsIDcgfSwKLSAg
ICB7IFRva2VuaXplcjo6VFlQRV9JREVOVElGSUVSLCAicmFiIiwgMSwgIDAsIDMgfSwKLSAgICB7
IFRva2VuaXplcjo6VFlQRV9JREVOVElGSUVSLCAib29mIiwgMSwgIDQsIDcgfSwKLSAgICB7IFRv
a2VuaXplcjo6VFlQRV9FTkQgICAgICAgLCAiIiAgICwgMSwgIDcsIDcgfSwKLSAgfX0sCi0KLSAg
Ly8gVGVzdCB0aGF0IHRhYnMgYWZmZWN0IGNvbHVtbiBudW1iZXJzIGNvcnJlY3RseS4KLSAgeyAi
Zm9vXHRiYXIgIFx0YmF6IiwgewotICAgIHsgVG9rZW5pemVyOjpUWVBFX0lERU5USUZJRVIsICJm
b28iLCAwLCAgMCwgIDMgfSwKLSAgICB7IFRva2VuaXplcjo6VFlQRV9JREVOVElGSUVSLCAiYmFy
IiwgMCwgIDgsIDExIH0sCi0gICAgeyBUb2tlbml6ZXI6OlRZUEVfSURFTlRJRklFUiwgImJheiIs
IDAsIDE2LCAxOSB9LAotICAgIHsgVG9rZW5pemVyOjpUWVBFX0VORCAgICAgICAsICIiICAgLCAw
LCAxOSwgMTkgfSwKLSAgfX0sCi0KLSAgLy8gVGVzdCB0aGF0IHRhYnMgaW4gc3RyaW5nIGxpdGVy
YWxzIGFmZmVjdCBjb2x1bW4gbnVtYmVycyBjb3JyZWN0bHkuCi0gIHsgIlwiZm9vXHRiYXJcIiBi
YXoiLCB7Ci0gICAgeyBUb2tlbml6ZXI6OlRZUEVfU1RSSU5HICAgICwgIlwiZm9vXHRiYXJcIiIs
IDAsICAwLCAxMiB9LAotICAgIHsgVG9rZW5pemVyOjpUWVBFX0lERU5USUZJRVIsICJiYXoiICAg
ICAgICAgLCAwLCAxMywgMTYgfSwKLSAgICB7IFRva2VuaXplcjo6VFlQRV9FTkQgICAgICAgLCAi
IiAgICAgICAgICAgICwgMCwgMTYsIDE2IH0sCi0gIH19LAotCi0gIC8vIFRlc3QgdGhhdCBsaW5l
IGNvbW1lbnRzIGFyZSBpZ25vcmVkLgotICB7ICJmb28gLy8gVGhpcyBpcyBhIGNvbW1lbnRcbiIK
LSAgICAiYmFyIC8vIFRoaXMgaXMgYW5vdGhlciBjb21tZW50IiwgewotICAgIHsgVG9rZW5pemVy
OjpUWVBFX0lERU5USUZJRVIsICJmb28iLCAwLCAgMCwgIDMgfSwKLSAgICB7IFRva2VuaXplcjo6
VFlQRV9JREVOVElGSUVSLCAiYmFyIiwgMSwgIDAsICAzIH0sCi0gICAgeyBUb2tlbml6ZXI6OlRZ
UEVfRU5EICAgICAgICwgIiIgICAsIDEsIDMwLCAzMCB9LAotICB9fSwKLQotICAvLyBUZXN0IHRo
YXQgYmxvY2sgY29tbWVudHMgYXJlIGlnbm9yZWQuCi0gIHsgImZvbyAvKiBUaGlzIGlzIGEgYmxv
Y2sgY29tbWVudCAqLyBiYXIiLCB7Ci0gICAgeyBUb2tlbml6ZXI6OlRZUEVfSURFTlRJRklFUiwg
ImZvbyIsIDAsICAwLCAgMyB9LAotICAgIHsgVG9rZW5pemVyOjpUWVBFX0lERU5USUZJRVIsICJi
YXIiLCAwLCAzNCwgMzcgfSwKLSAgICB7IFRva2VuaXplcjo6VFlQRV9FTkQgICAgICAgLCAiIiAg
ICwgMCwgMzcsIDM3IH0sCi0gIH19LAotCi0gIC8vIFRlc3QgdGhhdCBzaC1zdHlsZSBjb21tZW50
cyBhcmUgbm90IGlnbm9yZWQgYnkgZGVmYXVsdC4KLSAgeyAiZm9vICMgYmFyXG4iCi0gICAgImJh
eiIsIHsKLSAgICB7IFRva2VuaXplcjo6VFlQRV9JREVOVElGSUVSLCAiZm9vIiwgMCwgMCwgMyB9
LAotICAgIHsgVG9rZW5pemVyOjpUWVBFX1NZTUJPTCAgICAsICIjIiAgLCAwLCA0LCA1IH0sCi0g
ICAgeyBUb2tlbml6ZXI6OlRZUEVfSURFTlRJRklFUiwgImJhciIsIDAsIDYsIDkgfSwKLSAgICB7
IFRva2VuaXplcjo6VFlQRV9JREVOVElGSUVSLCAiYmF6IiwgMSwgMCwgMyB9LAotICAgIHsgVG9r
ZW5pemVyOjpUWVBFX0VORCAgICAgICAsICIiICAgLCAxLCAzLCAzIH0sCi0gIH19LAotCi0gIC8v
IFRlc3QgYWxsIHdoaXRlc3BhY2UgY2hhcnMKLSAgeyAiZm9vXG5cdFxyXHZcZmJhciIsIHsKLSAg
ICB7IFRva2VuaXplcjo6VFlQRV9JREVOVElGSUVSLCAiZm9vIiwgMCwgIDAsICAzIH0sCi0gICAg
eyBUb2tlbml6ZXI6OlRZUEVfSURFTlRJRklFUiwgImJhciIsIDEsIDExLCAxNCB9LAotICAgIHsg
VG9rZW5pemVyOjpUWVBFX0VORCAgICAgICAsICIiICAgLCAxLCAxNCwgMTQgfSwKLSAgfX0sCi19
OwotCi1URVNUXzJEKFRva2VuaXplclRlc3QsIE11bHRpcGxlVG9rZW5zLCBrTXVsdGlUb2tlbkNh
c2VzLCBrQmxvY2tTaXplcykgewotICAvLyBTZXQgdXAgdGhlIHRva2VuaXplci4KLSAgVGVzdElu
cHV0U3RyZWFtIGlucHV0KGtNdWx0aVRva2VuQ2FzZXNfY2FzZS5pbnB1dC5kYXRhKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBrTXVsdGlUb2tlbkNhc2VzX2Nhc2UuaW5wdXQuc2l6ZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0gIFRlc3RFcnJvckNv
bGxlY3RvciBlcnJvcl9jb2xsZWN0b3I7Ci0gIFRva2VuaXplciB0b2tlbml6ZXIoJmlucHV0LCAm
ZXJyb3JfY29sbGVjdG9yKTsKLQotICAvLyBCZWZvcmUgTmV4dCgpIGlzIGNhbGxlZCwgdGhlIGlu
aXRpYWwgdG9rZW4gc2hvdWxkIGFsd2F5cyBiZSBUWVBFX1NUQVJULgotICBFWFBFQ1RfRVEoVG9r
ZW5pemVyOjpUWVBFX1NUQVJULCB0b2tlbml6ZXIuY3VycmVudCgpLnR5cGUpOwotICBFWFBFQ1Rf
RVEoIiIsIHRva2VuaXplci5jdXJyZW50KCkudGV4dCk7Ci0gIEVYUEVDVF9FUSgwLCB0b2tlbml6
ZXIuY3VycmVudCgpLmxpbmUpOwotICBFWFBFQ1RfRVEoMCwgdG9rZW5pemVyLmN1cnJlbnQoKS5j
b2x1bW4pOwotICBFWFBFQ1RfRVEoMCwgdG9rZW5pemVyLmN1cnJlbnQoKS5lbmRfY29sdW1uKTsK
LQotICAvLyBMb29wIHRocm91Z2ggYWxsIGV4cGVjdGVkIHRva2Vucy4KLSAgaW50IGkgPSAwOwot
ICBUb2tlbml6ZXI6OlRva2VuIHRva2VuOwotICBkbyB7Ci0gICAgdG9rZW4gPSBrTXVsdGlUb2tl
bkNhc2VzX2Nhc2Uub3V0cHV0W2krK107Ci0KLSAgICBTQ09QRURfVFJBQ0UodGVzdGluZzo6TWVz
c2FnZSgpIDw8ICJUb2tlbiAjIiA8PCBpIDw8ICI6ICIgPDwgdG9rZW4udGV4dCk7Ci0KLSAgICBU
b2tlbml6ZXI6OlRva2VuIHByZXZpb3VzID0gdG9rZW5pemVyLmN1cnJlbnQoKTsKLQotICAgIC8v
IE5leHQoKSBzaG91bGQgb25seSByZXR1cm4gZmFsc2Ugd2hlbiBpdCBoaXRzIHRoZSBlbmQgdG9r
ZW4uCi0gICAgaWYgKHRva2VuLnR5cGUgIT0gVG9rZW5pemVyOjpUWVBFX0VORCkgewotICAgICAg
QVNTRVJUX1RSVUUodG9rZW5pemVyLk5leHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEFTU0VS
VF9GQUxTRSh0b2tlbml6ZXIuTmV4dCgpKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRo
ZSBwcmV2aW91cyB0b2tlbiBpcyBzZXQgY29ycmVjdGx5LgotICAgIEVYUEVDVF9FUShwcmV2aW91
cy50eXBlLCB0b2tlbml6ZXIucHJldmlvdXMoKS50eXBlKTsKLSAgICBFWFBFQ1RfRVEocHJldmlv
dXMudGV4dCwgdG9rZW5pemVyLnByZXZpb3VzKCkudGV4dCk7Ci0gICAgRVhQRUNUX0VRKHByZXZp
b3VzLmxpbmUsIHRva2VuaXplci5wcmV2aW91cygpLmxpbmUpOwotICAgIEVYUEVDVF9FUShwcmV2
aW91cy5jb2x1bW4sIHRva2VuaXplci5wcmV2aW91cygpLmNvbHVtbik7Ci0gICAgRVhQRUNUX0VR
KHByZXZpb3VzLmVuZF9jb2x1bW4sIHRva2VuaXplci5wcmV2aW91cygpLmVuZF9jb2x1bW4pOwot
Ci0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgdG9rZW4gbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgb25lLgot
ICAgIEVYUEVDVF9FUSh0b2tlbi50eXBlLCB0b2tlbml6ZXIuY3VycmVudCgpLnR5cGUpOwotICAg
IEVYUEVDVF9FUSh0b2tlbi50ZXh0LCB0b2tlbml6ZXIuY3VycmVudCgpLnRleHQpOwotICAgIEVY
UEVDVF9FUSh0b2tlbi5saW5lLCB0b2tlbml6ZXIuY3VycmVudCgpLmxpbmUpOwotICAgIEVYUEVD
VF9FUSh0b2tlbi5jb2x1bW4sIHRva2VuaXplci5jdXJyZW50KCkuY29sdW1uKTsKLSAgICBFWFBF
Q1RfRVEodG9rZW4uZW5kX2NvbHVtbiwgdG9rZW5pemVyLmN1cnJlbnQoKS5lbmRfY29sdW1uKTsK
LQotICB9IHdoaWxlICh0b2tlbi50eXBlICE9IFRva2VuaXplcjo6VFlQRV9FTkQpOwotCi0gIC8v
IFRoZXJlIHNob3VsZCBiZSBubyBlcnJvcnMuCi0gIEVYUEVDVF9UUlVFKGVycm9yX2NvbGxlY3Rv
ci50ZXh0Xy5lbXB0eSgpKTsKLX0KLQotLy8gVGhpcyB0ZXN0IGNhdXNlcyBnY2MgMy4zLjUgKGFu
ZCBlYXJsaWVyPykgdG8gZ2l2ZSB0aGUgY3J5cHRpYyBlcnJvcjoKLS8vICAgInNvcnJ5LCB1bmlt
cGxlbWVudGVkOiBgbWV0aG9kX2NhbGxfZXhwcicgbm90IHN1cHBvcnRlZCBieSBkdW1wX2V4cHIi
Ci0jaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0g
MyAmJiBfX0dOVUNfTUlOT1JfXyA+IDMpCi0KLVRFU1RfMUQoVG9rZW5pemVyVGVzdCwgU2hDb21t
ZW50U3R5bGUsIGtCbG9ja1NpemVzKSB7Ci0gIC8vIFRlc3QgdGhlICJjb21tZW50X3N0eWxlIiBv
cHRpb24uCi0KLSAgY29uc3QgY2hhciogdGV4dCA9ICJmb28gIyBiYXJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICJiYXogLy8gcXV4XG4iCi0gICAgICAgICAgICAgICAgICAgICAiY29yZ2UgLyog
Z3JhdWx0ICovXG4iCi0gICAgICAgICAgICAgICAgICAgICAiZ2FycGx5IjsKLSAgY29uc3QgY2hh
ciogY29uc3Qga1Rva2Vuc1tdID0geyJmb28iLCAgLy8gIiMgYmFyIiBpcyBpZ25vcmVkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmF6IiwgIi8iLCAiLyIsICJxdXgiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmdlIiwgIi8iLCAiKiIsICJncmF1bHQi
LCAiKiIsICIvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnYXJwbHkifTsK
LQotICAvLyBTZXQgdXAgdGhlIHRva2VuaXplci4KLSAgVGVzdElucHV0U3RyZWFtIGlucHV0KHRl
eHQsIHN0cmxlbih0ZXh0KSwga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0gIFRlc3RFcnJvckNvbGxlY3Rv
ciBlcnJvcl9jb2xsZWN0b3I7Ci0gIFRva2VuaXplciB0b2tlbml6ZXIoJmlucHV0LCAmZXJyb3Jf
Y29sbGVjdG9yKTsKLSAgdG9rZW5pemVyLnNldF9jb21tZW50X3N0eWxlKFRva2VuaXplcjo6U0hf
Q09NTUVOVF9TVFlMRSk7Ci0KLSAgLy8gQWR2YW5jZSB0aHJvdWdoIHRva2VucyBhbmQgY2hlY2sg
dGhhdCB0aGV5IGFyZSBwYXJzZWQgYXMgZXhwZWN0ZWQuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwg
R09PR0xFX0FSUkFZU0laRShrVG9rZW5zKTsgaSsrKSB7Ci0gICAgRVhQRUNUX1RSVUUodG9rZW5p
emVyLk5leHQoKSk7Ci0gICAgRVhQRUNUX0VRKHRva2VuaXplci5jdXJyZW50KCkudGV4dCwga1Rv
a2Vuc1tpXSk7Ci0gIH0KLQotICAvLyBUaGVyZSBzaG91bGQgYmUgbm8gbW9yZSBpbnB1dC4KLSAg
RVhQRUNUX0ZBTFNFKHRva2VuaXplci5OZXh0KCkpOwotICAvLyBUaGVyZSBzaG91bGQgYmUgbm8g
ZXJyb3JzLgotICBFWFBFQ1RfVFJVRShlcnJvcl9jb2xsZWN0b3IudGV4dF8uZW1wdHkoKSk7Ci19
Ci0KLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEluIGVhY2ggY2FzZSwgdGhlIGlucHV0
IGlzIGV4cGVjdGVkIHRvIGhhdmUgdHdvIHRva2VucyBuYW1lZCAicHJldiIgYW5kCi0vLyAibmV4
dCIgd2l0aCBjb21tZW50cyBpbiBiZXR3ZWVuLgotc3RydWN0IERvY0NvbW1lbnRDYXNlIHsKLSAg
c3RyaW5nIGlucHV0OwotCi0gIGNvbnN0IGNoYXIqIHByZXZfdHJhaWxpbmdfY29tbWVudHM7Ci0g
IGNvbnN0IGNoYXIqIGRldGFjaGVkX2NvbW1lbnRzWzEwXTsKLSAgY29uc3QgY2hhciogbmV4dF9s
ZWFkaW5nX2NvbW1lbnRzOwotfTsKLQotaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVh
bSYgb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRG9jQ29tbWVudENhc2Um
IHRlc3RfY2FzZSkgewotICByZXR1cm4gb3V0IDw8IENFc2NhcGUodGVzdF9jYXNlLmlucHV0KTsK
LX0KLQotRG9jQ29tbWVudENhc2Uga0RvY0NvbW1lbnRDYXNlc1tdID0gewotICB7Ci0gICAgInBy
ZXYgbmV4dCIsCi0KLSAgICAiIiwKLSAgICB7fSwKLSAgICAiIgotICAgICAgfSwKLQotICAgICAg
ICB7Ci0gICAgICAicHJldiAvKiBpZ25vcmVkICovIG5leHQiLAotCi0gICAgICAiIiwKLSAgICAg
IHt9LAotICAgICAgIiIKLSAgICAgICAgfSwKLQotICAgICAgICAgIHsKLSAgICAgICAgInByZXYg
Ly8gdHJhaWxpbmcgY29tbWVudFxuIgotICAgICAgICAgICAgIm5leHQiLAotCi0gICAgICAgICAg
ICAiIHRyYWlsaW5nIGNvbW1lbnRcbiIsCi0gICAgICAgICAgICB7fSwKLSAgICAgICAgICAgICIi
Ci0gICAgICAgICAgfSwKLQotICAgICAgICAgICAgewotICAgICAgICAgICJwcmV2XG4iCi0gICAg
ICAgICAgICAgICIvLyBsZWFkaW5nIGNvbW1lbnRcbiIKLSAgICAgICAgICAgICAgIi8vIGxpbmUg
MlxuIgotICAgICAgICAgICAgICAibmV4dCIsCi0KLSAgICAgICAgICAgICAgIiIsCi0gICAgICAg
ICAgICAgIHt9LAotICAgICAgICAgICAgICAiIGxlYWRpbmcgY29tbWVudFxuIgotICAgICAgICAg
ICAgICAiIGxpbmUgMlxuIgotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAicHJldlxuIgotICAgICAgICAgICAgICAgICIvLyB0cmFpbGluZyBjb21tZW50XG4i
Ci0gICAgICAgICAgICAgICAgIi8vIGxpbmUgMlxuIgotICAgICAgICAgICAgICAgICJcbiIKLSAg
ICAgICAgICAgICAgICAibmV4dCIsCi0KLSAgICAgICAgICAgICAgICAiIHRyYWlsaW5nIGNvbW1l
bnRcbiIKLSAgICAgICAgICAgICAgICAiIGxpbmUgMlxuIiwKLSAgICAgICAgICAgICAgICB7fSwK
LSAgICAgICAgICAgICAgICAiIgotICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAicHJldiAvLyB0cmFpbGluZyBjb21tZW50XG4iCi0gICAgICAgICAg
ICAgICAgICAiLy8gbGVhZGluZyBjb21tZW50XG4iCi0gICAgICAgICAgICAgICAgICAiLy8gbGlu
ZSAyXG4iCi0gICAgICAgICAgICAgICAgICAibmV4dCIsCi0KLSAgICAgICAgICAgICAgICAgICIg
dHJhaWxpbmcgY29tbWVudFxuIiwKLSAgICAgICAgICAgICAgICAgIHt9LAotICAgICAgICAgICAg
ICAgICAgIiBsZWFkaW5nIGNvbW1lbnRcbiIKLSAgICAgICAgICAgICAgICAgICIgbGluZSAyXG4i
Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICJwcmV2IC8qIHRyYWlsaW5nIGJsb2NrIGNvbW1lbnQgKi9cbiIKLSAgICAgICAgICAgICAg
ICAgICAgIi8qIGxlYWRpbmcgYmxvY2sgY29tbWVudFxuIgotICAgICAgICAgICAgICAgICAgICAi
ICogbGluZSAyXG4iCi0gICAgICAgICAgICAgICAgICAgICIgKiBsaW5lIDMgKi8iCi0gICAgICAg
ICAgICAgICAgICAgICJuZXh0IiwKLQotICAgICAgICAgICAgICAgICAgICAiIHRyYWlsaW5nIGJs
b2NrIGNvbW1lbnQgIiwKLSAgICAgICAgICAgICAgICAgICAge30sCi0gICAgICAgICAgICAgICAg
ICAgICIgbGVhZGluZyBibG9jayBjb21tZW50XG4iCi0gICAgICAgICAgICAgICAgICAgICIgbGlu
ZSAyXG4iCi0gICAgICAgICAgICAgICAgICAgICIgbGluZSAzICIKLSAgICAgICAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgInByZXZcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAiLyogdHJhaWxpbmcgYmxvY2sgY29tbWVudFxuIgotICAg
ICAgICAgICAgICAgICAgICAgICIgKiBsaW5lIDJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAi
ICogbGluZSAzXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAqL1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICIvKiBsZWFkaW5nIGJsb2NrIGNvbW1lbnRcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAiICogbGluZSAyXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAqIGxpbmUgMyAqLyIK
LSAgICAgICAgICAgICAgICAgICAgICAibmV4dCIsCi0KLSAgICAgICAgICAgICAgICAgICAgICAi
IHRyYWlsaW5nIGJsb2NrIGNvbW1lbnRcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiIGxpbmUg
MlxuIgotICAgICAgICAgICAgICAgICAgICAgICIgbGluZSAzXG4iLAotICAgICAgICAgICAgICAg
ICAgICAgIHt9LAotICAgICAgICAgICAgICAgICAgICAgICIgbGVhZGluZyBibG9jayBjb21tZW50
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiBsaW5lIDJcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAiIGxpbmUgMyAiCi0gICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwcmV2XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICAiLy8gdHJhaWxpbmcgY29tbWVudFxuIgotICAgICAgICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIi8vIGRldGFjaGVkIGNvbW1lbnRcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICIvLyBsaW5lIDJcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIvLyBzZWNvbmQgZGV0YWNoZWQgY29t
bWVudFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIi8qIHRoaXJkIGRldGFjaGVkIGNvbW1l
bnRcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgKiBsaW5lIDIgKi9cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICIvLyBsZWFkaW5nIGNvbW1lbnRcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICJuZXh0IiwKLQotICAgICAgICAgICAgICAgICAgICAgICAgIiB0cmFpbGluZyBjb21t
ZW50XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICIgZGV0YWNoZWQgY29tbWVudFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiIGxpbmUg
MlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzZWNvbmQgZGV0YWNoZWQgY29tbWVu
dFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGlyZCBkZXRhY2hlZCBjb21tZW50
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgbGluZSAyICIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgbGVhZGluZyBjb21tZW50
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJwcmV2IC8qKi9cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8vIGRl
dGFjaGVkIGNvbW1lbnRcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIi8vIGxlYWRpbmcgY29tbWVudFxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJuZXh0IiwKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiBkZXRhY2hlZCBjb21tZW50XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbGVhZGluZyBjb21tZW50XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmV2IC8qKi9cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8vIGxlYWRpbmcgY29tbWVudFxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAibmV4dCIsCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGxlYWRpbmcgY29tbWVudFxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH07Ci0KLVRFU1RfMkQoVG9rZW5pemVyVGVzdCwgRG9jQ29tbWVudHMsIGtEb2NDb21tZW50Q2Fz
ZXMsIGtCbG9ja1NpemVzKSB7Ci0gIC8vIFNldCB1cCB0aGUgdG9rZW5pemVyLgotICBUZXN0SW5w
dXRTdHJlYW0gaW5wdXQoa0RvY0NvbW1lbnRDYXNlc19jYXNlLmlucHV0LmRhdGEoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGtEb2NDb21tZW50Q2FzZXNfY2FzZS5pbnB1dC5zaXplKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBrQmxvY2tTaXplc19jYXNlKTsKLSAgVGVzdEVycm9yQ29s
bGVjdG9yIGVycm9yX2NvbGxlY3RvcjsKLSAgVG9rZW5pemVyIHRva2VuaXplcigmaW5wdXQsICZl
cnJvcl9jb2xsZWN0b3IpOwotCi0gIC8vIFNldCB1cCBhIHNlY29uZCB0b2tlbml6ZXIgd2hlcmUg
d2UnbGwgcGFzcyBhbGwgTlVMTHMgdG8gTmV4dFdpdGhDb21tZW50cygpLgotICBUZXN0SW5wdXRT
dHJlYW0gaW5wdXQyKGtEb2NDb21tZW50Q2FzZXNfY2FzZS5pbnB1dC5kYXRhKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBrRG9jQ29tbWVudENhc2VzX2Nhc2UuaW5wdXQuc2l6ZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0gIFRva2VuaXplciB0b2tl
bml6ZXIyKCZpbnB1dDIsICZlcnJvcl9jb2xsZWN0b3IpOwotCi0gIHRva2VuaXplci5OZXh0KCk7
Ci0gIHRva2VuaXplcjIuTmV4dCgpOwotCi0gIEVYUEVDVF9FUSgicHJldiIsIHRva2VuaXplci5j
dXJyZW50KCkudGV4dCk7Ci0gIEVYUEVDVF9FUSgicHJldiIsIHRva2VuaXplcjIuY3VycmVudCgp
LnRleHQpOwotCi0gIHN0cmluZyBwcmV2X3RyYWlsaW5nX2NvbW1lbnRzOwotICB2ZWN0b3I8c3Ry
aW5nPiBkZXRhY2hlZF9jb21tZW50czsKLSAgc3RyaW5nIG5leHRfbGVhZGluZ19jb21tZW50czsK
LSAgdG9rZW5pemVyLk5leHRXaXRoQ29tbWVudHMoJnByZXZfdHJhaWxpbmdfY29tbWVudHMsICZk
ZXRhY2hlZF9jb21tZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5leHRfbGVh
ZGluZ19jb21tZW50cyk7Ci0gIHRva2VuaXplcjIuTmV4dFdpdGhDb21tZW50cyhOVUxMLCBOVUxM
LCBOVUxMKTsKLSAgRVhQRUNUX0VRKCJuZXh0IiwgdG9rZW5pemVyLmN1cnJlbnQoKS50ZXh0KTsK
LSAgRVhQRUNUX0VRKCJuZXh0IiwgdG9rZW5pemVyMi5jdXJyZW50KCkudGV4dCk7Ci0KLSAgRVhQ
RUNUX0VRKGtEb2NDb21tZW50Q2FzZXNfY2FzZS5wcmV2X3RyYWlsaW5nX2NvbW1lbnRzLAotICAg
ICAgICAgICAgcHJldl90cmFpbGluZ19jb21tZW50cyk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBkZXRhY2hlZF9jb21tZW50cy5zaXplKCk7IGkrKykgewotICAgIEFTU0VSVF9MVChpLCBHT09H
TEVfQVJSQVlTSVpFKGtEb2NDb21tZW50Q2FzZXMpKTsKLSAgICBBU1NFUlRfVFJVRShrRG9jQ29t
bWVudENhc2VzX2Nhc2UuZGV0YWNoZWRfY29tbWVudHNbaV0gIT0gTlVMTCk7Ci0gICAgRVhQRUNU
X0VRKGtEb2NDb21tZW50Q2FzZXNfY2FzZS5kZXRhY2hlZF9jb21tZW50c1tpXSwKLSAgICAgICAg
ICAgICAgZGV0YWNoZWRfY29tbWVudHNbaV0pOwotICB9Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgd2Ug
bWF0Y2hlZCBhbGwgdGhlIGRldGFjaGVkIGNvbW1lbnRzLgotICBFWFBFQ1RfRVEoTlVMTCwKLSAg
ICAgIGtEb2NDb21tZW50Q2FzZXNfY2FzZS5kZXRhY2hlZF9jb21tZW50c1tkZXRhY2hlZF9jb21t
ZW50cy5zaXplKCldKTsKLQotICBFWFBFQ1RfRVEoa0RvY0NvbW1lbnRDYXNlc19jYXNlLm5leHRf
bGVhZGluZ19jb21tZW50cywKLSAgICAgICAgICAgIG5leHRfbGVhZGluZ19jb21tZW50cyk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVGVzdCBwYXJzZSBoZWxwZXJzLiAgSXQncyBub3QgcmVh
bGx5IHdvcnRoIHNldHRpbmcgdXAgYSBmdWxsIGRhdGEtZHJpdmVuCi0vLyB0ZXN0IGhlcmUuCi1U
RVNUX0YoVG9rZW5pemVyVGVzdCwgUGFyc2VJbnRlZ2VyKSB7Ci0gIEVYUEVDVF9FUSgwLCBQYXJz
ZUludGVnZXIoIjAiKSk7Ci0gIEVYUEVDVF9FUSgxMjMsIFBhcnNlSW50ZWdlcigiMTIzIikpOwot
ICBFWFBFQ1RfRVEoMHhhYmNkZWYxMnUsIFBhcnNlSW50ZWdlcigiMHhhYmNkZWYxMiIpKTsKLSAg
RVhQRUNUX0VRKDB4YWJjZGVmMTJ1LCBQYXJzZUludGVnZXIoIjB4QUJDREVGMTIiKSk7Ci0gIEVY
UEVDVF9FUShrdWludDY0bWF4LCBQYXJzZUludGVnZXIoIjB4RkZGRkZGRkZGRkZGRkZGRiIpKTsK
LSAgRVhQRUNUX0VRKDAxMjM0NTY3LCBQYXJzZUludGVnZXIoIjAxMjM0NTY3IikpOwotICBFWFBF
Q1RfRVEoMFgxMjMsIFBhcnNlSW50ZWdlcigiMFgxMjMiKSk7Ci0KLSAgLy8gVGVzdCBpbnZhbGlk
IGludGVnZXJzIHRoYXQgbWF5IHN0aWxsIGJlIHRva2VuaXplZCBhcyBpbnRlZ2Vycy4KLSAgRVhQ
RUNUX0VRKDAsIFBhcnNlSW50ZWdlcigiMHgiKSk7Ci0KLSAgdWludDY0IGk7Ci0KLSAgLy8gVGVz
dCBpbnZhbGlkIGludGVnZXJzIHRoYXQgd2lsbCBuZXZlciBiZSB0b2tlbml6ZWQgYXMgaW50ZWdl
cnMuCi0gIEVYUEVDVF9GQUxTRShUb2tlbml6ZXI6OlBhcnNlSW50ZWdlcigienh5Iiwga3VpbnQ2
NG1heCwgJmkpKTsKLSAgRVhQRUNUX0ZBTFNFKFRva2VuaXplcjo6UGFyc2VJbnRlZ2VyKCIxLjIi
LCBrdWludDY0bWF4LCAmaSkpOwotICBFWFBFQ1RfRkFMU0UoVG9rZW5pemVyOjpQYXJzZUludGVn
ZXIoIjA4Iiwga3VpbnQ2NG1heCwgJmkpKTsKLSAgRVhQRUNUX0ZBTFNFKFRva2VuaXplcjo6UGFy
c2VJbnRlZ2VyKCIweGciLCBrdWludDY0bWF4LCAmaSkpOwotICBFWFBFQ1RfRkFMU0UoVG9rZW5p
emVyOjpQYXJzZUludGVnZXIoIi0xIiwga3VpbnQ2NG1heCwgJmkpKTsKLQotICAvLyBUZXN0IG92
ZXJmbG93cy4KLSAgRVhQRUNUX1RSVUUgKFRva2VuaXplcjo6UGFyc2VJbnRlZ2VyKCIwIiwgMCwg
JmkpKTsKLSAgRVhQRUNUX0ZBTFNFKFRva2VuaXplcjo6UGFyc2VJbnRlZ2VyKCIxIiwgMCwgJmkp
KTsKLSAgRVhQRUNUX1RSVUUgKFRva2VuaXplcjo6UGFyc2VJbnRlZ2VyKCIxIiwgMSwgJmkpKTsK
LSAgRVhQRUNUX1RSVUUgKFRva2VuaXplcjo6UGFyc2VJbnRlZ2VyKCIxMjM0NSIsIDEyMzQ1LCAm
aSkpOwotICBFWFBFQ1RfRkFMU0UoVG9rZW5pemVyOjpQYXJzZUludGVnZXIoIjEyMzQ2IiwgMTIz
NDUsICZpKSk7Ci0gIEVYUEVDVF9UUlVFIChUb2tlbml6ZXI6OlBhcnNlSW50ZWdlcigiMHhGRkZG
RkZGRkZGRkZGRkZGIiAsIGt1aW50NjRtYXgsICZpKSk7Ci0gIEVYUEVDVF9GQUxTRShUb2tlbml6
ZXI6OlBhcnNlSW50ZWdlcigiMHgxMDAwMDAwMDAwMDAwMDAwMCIsIGt1aW50NjRtYXgsICZpKSk7
Ci19Ci0KLVRFU1RfRihUb2tlbml6ZXJUZXN0LCBQYXJzZUZsb2F0KSB7Ci0gIEVYUEVDVF9ET1VC
TEVfRVEoMSAgICAsIFRva2VuaXplcjo6UGFyc2VGbG9hdCgiMS4iKSk7Ci0gIEVYUEVDVF9ET1VC
TEVfRVEoMWUzICAsIFRva2VuaXplcjo6UGFyc2VGbG9hdCgiMWUzIikpOwotICBFWFBFQ1RfRE9V
QkxFX0VRKDFlMyAgLCBUb2tlbml6ZXI6OlBhcnNlRmxvYXQoIjFFMyIpKTsKLSAgRVhQRUNUX0RP
VUJMRV9FUSgxLjVlMywgVG9rZW5pemVyOjpQYXJzZUZsb2F0KCIxLjVlMyIpKTsKLSAgRVhQRUNU
X0RPVUJMRV9FUSguMSAgICwgVG9rZW5pemVyOjpQYXJzZUZsb2F0KCIuMSIpKTsKLSAgRVhQRUNU
X0RPVUJMRV9FUSguMjUgICwgVG9rZW5pemVyOjpQYXJzZUZsb2F0KCIuMjUiKSk7Ci0gIEVYUEVD
VF9ET1VCTEVfRVEoLjFlMyAsIFRva2VuaXplcjo6UGFyc2VGbG9hdCgiLjFlMyIpKTsKLSAgRVhQ
RUNUX0RPVUJMRV9FUSguMjVlMywgVG9rZW5pemVyOjpQYXJzZUZsb2F0KCIuMjVlMyIpKTsKLSAg
RVhQRUNUX0RPVUJMRV9FUSguMWUrMywgVG9rZW5pemVyOjpQYXJzZUZsb2F0KCIuMWUrMyIpKTsK
LSAgRVhQRUNUX0RPVUJMRV9FUSguMWUtMywgVG9rZW5pemVyOjpQYXJzZUZsb2F0KCIuMWUtMyIp
KTsKLSAgRVhQRUNUX0RPVUJMRV9FUSg1ICAgICwgVG9rZW5pemVyOjpQYXJzZUZsb2F0KCI1Iikp
OwotICBFWFBFQ1RfRE9VQkxFX0VRKDZlLTEyLCBUb2tlbml6ZXI6OlBhcnNlRmxvYXQoIjZlLTEy
IikpOwotICBFWFBFQ1RfRE9VQkxFX0VRKDEuMiAgLCBUb2tlbml6ZXI6OlBhcnNlRmxvYXQoIjEu
MiIpKTsKLSAgRVhQRUNUX0RPVUJMRV9FUSgxLmUyICwgVG9rZW5pemVyOjpQYXJzZUZsb2F0KCIx
LmUyIikpOwotCi0gIC8vIFRlc3QgaW52YWxpZCBpbnRlZ2VycyB0aGF0IG1heSBzdGlsbCBiZSB0
b2tlbml6ZWQgYXMgaW50ZWdlcnMuCi0gIEVYUEVDVF9ET1VCTEVfRVEoMSwgVG9rZW5pemVyOjpQ
YXJzZUZsb2F0KCIxZSIpKTsKLSAgRVhQRUNUX0RPVUJMRV9FUSgxLCBUb2tlbml6ZXI6OlBhcnNl
RmxvYXQoIjFlLSIpKTsKLSAgRVhQRUNUX0RPVUJMRV9FUSgxLCBUb2tlbml6ZXI6OlBhcnNlRmxv
YXQoIjEuZSIpKTsKLQotICAvLyBUZXN0ICdmJyBzdWZmaXguCi0gIEVYUEVDVF9ET1VCTEVfRVEo
MSwgVG9rZW5pemVyOjpQYXJzZUZsb2F0KCIxZiIpKTsKLSAgRVhQRUNUX0RPVUJMRV9FUSgxLCBU
b2tlbml6ZXI6OlBhcnNlRmxvYXQoIjEuMGYiKSk7Ci0gIEVYUEVDVF9ET1VCTEVfRVEoMSwgVG9r
ZW5pemVyOjpQYXJzZUZsb2F0KCIxRiIpKTsKLQotICAvLyBUaGVzZSBzaG91bGQgcGFyc2Ugc3Vj
Y2Vzc2Z1bGx5IGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG91dCBvZiByYW5nZS4KLSAgLy8gT3ZlcmZs
b3dzIGJlY29tZSBpbmZpbml0eSBhbmQgdW5kZXJmbG93cyBiZWNvbWUgemVyby4KLSAgRVhQRUNU
X0VRKCAgICAgMC4wLCBUb2tlbml6ZXI6OlBhcnNlRmxvYXQoIjFlLTk5OTk5OTk5OTk5OTk5OTk5
OTk5OTk5OTk5OTkiKSk7Ci0gIEVYUEVDVF9FUShIVUdFX1ZBTCwgVG9rZW5pemVyOjpQYXJzZUZs
b2F0KCIxZSs5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IikpOwotCi0jaWZkZWYgUFJPVE9C
VUZfSEFTX0RFQVRIX1RFU1QgIC8vIGRlYXRoIHRlc3RzIGRvIG5vdCB3b3JrIG9uIFdpbmRvd3Mg
eWV0Ci0gIC8vIFRlc3QgaW52YWxpZCBpbnRlZ2VycyB0aGF0IHdpbGwgbmV2ZXIgYmUgdG9rZW5p
emVkIGFzIGludGVnZXJzLgotICBFWFBFQ1RfREVCVUdfREVBVEgoVG9rZW5pemVyOjpQYXJzZUZs
b2F0KCJ6eHkiKSwKLSAgICAicGFzc2VkIHRleHQgdGhhdCBjb3VsZCBub3QgaGF2ZSBiZWVuIHRv
a2VuaXplZCBhcyBhIGZsb2F0Iik7Ci0gIEVYUEVDVF9ERUJVR19ERUFUSChUb2tlbml6ZXI6OlBh
cnNlRmxvYXQoIjEtZTAiKSwKLSAgICAicGFzc2VkIHRleHQgdGhhdCBjb3VsZCBub3QgaGF2ZSBi
ZWVuIHRva2VuaXplZCBhcyBhIGZsb2F0Iik7Ci0gIEVYUEVDVF9ERUJVR19ERUFUSChUb2tlbml6
ZXI6OlBhcnNlRmxvYXQoIi0xLjAiKSwKLSAgICAicGFzc2VkIHRleHQgdGhhdCBjb3VsZCBub3Qg
aGF2ZSBiZWVuIHRva2VuaXplZCBhcyBhIGZsb2F0Iik7Ci0jZW5kaWYgIC8vIFBST1RPQlVGX0hB
U19ERUFUSF9URVNUCi19Ci0KLVRFU1RfRihUb2tlbml6ZXJUZXN0LCBQYXJzZVN0cmluZykgewot
ICBzdHJpbmcgb3V0cHV0OwotICBUb2tlbml6ZXI6OlBhcnNlU3RyaW5nKCInaGVsbG8nIiwgJm91
dHB1dCk7Ci0gIEVYUEVDVF9FUSgiaGVsbG8iLCBvdXRwdXQpOwotICBUb2tlbml6ZXI6OlBhcnNl
U3RyaW5nKCJcImJsYWhcXG5ibGFoMlwiIiwgJm91dHB1dCk7Ci0gIEVYUEVDVF9FUSgiYmxhaFxu
YmxhaDIiLCBvdXRwdXQpOwotICBUb2tlbml6ZXI6OlBhcnNlU3RyaW5nKCInXFwxeFxcMVxcMTIz
XFw3MzlcXDUyXFwzMzRuXFwzJyIsICZvdXRwdXQpOwotICBFWFBFQ1RfRVEoIlwxeFwxXDEyM1w3
MzlcNTJcMzM0blwzIiwgb3V0cHV0KTsKLSAgVG9rZW5pemVyOjpQYXJzZVN0cmluZygiJ1xceDIw
XFx4NCciLCAmb3V0cHV0KTsKLSAgRVhQRUNUX0VRKCJceDIwXHg0Iiwgb3V0cHV0KTsKLQotICAv
LyBUZXN0IGludmFsaWQgc3RyaW5ncyB0aGF0IG1heSBzdGlsbCBiZSB0b2tlbml6ZWQgYXMgc3Ry
aW5ncy4KLSAgVG9rZW5pemVyOjpQYXJzZVN0cmluZygiXCJcXGFcXGxcXHZcXHQiLCAmb3V0cHV0
KTsgIC8vIFxsIGlzIGludmFsaWQKLSAgRVhQRUNUX0VRKCJcYT9cdlx0Iiwgb3V0cHV0KTsKLSAg
VG9rZW5pemVyOjpQYXJzZVN0cmluZygiJyIsICZvdXRwdXQpOwotICBFWFBFQ1RfRVEoIiIsIG91
dHB1dCk7Ci0gIFRva2VuaXplcjo6UGFyc2VTdHJpbmcoIidcXCIsICZvdXRwdXQpOwotICBFWFBF
Q1RfRVEoIlxcIiwgb3V0cHV0KTsKLQotICAvLyBFeHBlcmltZW50IHdpdGggVW5pY29kZSBlc2Nh
cGVzLiBIZXJlIGFyZSBvbmUtLCB0d28tIGFuZCB0aHJlZS1ieXRlIFVuaWNvZGUKLSAgLy8gY2hh
cmFjdGVycy4KLSAgVG9rZW5pemVyOjpQYXJzZVN0cmluZygiJ1xcdTAwMjRcXHUwMGEyXFx1MjBh
Y1xcVTAwMDI0YjYyWFgnIiwgJm91dHB1dCk7Ci0gIEVYUEVDVF9FUSgiJMKi4oKs8KStolhYIiwg
b3V0cHV0KTsKLSAgLy8gU2FtZSB0aGluZyBlbmNvZGVkIHVzaW5nIFVURjE2LgotICBUb2tlbml6
ZXI6OlBhcnNlU3RyaW5nKCInXFx1MDAyNFxcdTAwYTJcXHUyMGFjXFx1ZDg1MlxcdWRmNjJYWCci
LCAmb3V0cHV0KTsKLSAgRVhQRUNUX0VRKCIkwqLigqzwpK2iWFgiLCBvdXRwdXQpOwotICAvLyBI
ZXJlJ3Mgc29tZSBicm9rZW4gVVRGMTY7IHRoZXJlJ3MgYSBoZWFkIHN1cnJvZ2F0ZSB3aXRoIG5v
IHRhaWwgc3Vycm9nYXRlLgotICAvLyBXZSBqdXN0IG91dHB1dCB0aGlzIGFzIGlmIGl0IHdlcmUg
VVRGODsgaXQncyBub3QgYSBkZWZpbmVkIGNvZGUgcG9pbnQsIGJ1dAotICAvLyBpdCBoYXMgYSBk
ZWZpbmVkIGVuY29kaW5nLgotICBUb2tlbml6ZXI6OlBhcnNlU3RyaW5nKCInXFx1ZDg1MlhYJyIs
ICZvdXRwdXQpOwotICBFWFBFQ1RfRVEoIlx4ZWRceGExXHg5MlhYIiwgb3V0cHV0KTsKLSAgLy8g
TWFsZm9ybWVkIGVzY2FwZTogRGVtb25zIG1heSBmbHkgb3V0IG9mIHRoZSBub3NlLgotICBUb2tl
bml6ZXI6OlBhcnNlU3RyaW5nKCJcXHUwIiwgJm91dHB1dCk7Ci0gIEVYUEVDVF9FUSgidTAiLCBv
dXRwdXQpOwotCi0gIC8vIFRlc3QgaW52YWxpZCBzdHJpbmdzIHRoYXQgd2lsbCBuZXZlciBiZSB0
b2tlbml6ZWQgYXMgc3RyaW5ncy4KLSNpZmRlZiBQUk9UT0JVRl9IQVNfREVBVEhfVEVTVCAgLy8g
ZGVhdGggdGVzdHMgZG8gbm90IHdvcmsgb24gV2luZG93cyB5ZXQKLSAgRVhQRUNUX0RFQlVHX0RF
QVRIKFRva2VuaXplcjo6UGFyc2VTdHJpbmcoIiIsICZvdXRwdXQpLAotICAgICJwYXNzZWQgdGV4
dCB0aGF0IGNvdWxkIG5vdCBoYXZlIGJlZW4gdG9rZW5pemVkIGFzIGEgc3RyaW5nIik7Ci0jZW5k
aWYgIC8vIFBST1RPQlVGX0hBU19ERUFUSF9URVNUCi19Ci0KLVRFU1RfRihUb2tlbml6ZXJUZXN0
LCBQYXJzZVN0cmluZ0FwcGVuZCkgewotICAvLyBDaGVjayB0aGF0IFBhcnNlU3RyaW5nIGFuZCBQ
YXJzZVN0cmluZ0FwcGVuZCBkaWZmZXIuCi0gIHN0cmluZyBvdXRwdXQoInN0dWZmKyIpOwotICBU
b2tlbml6ZXI6OlBhcnNlU3RyaW5nQXBwZW5kKCInaGVsbG8nIiwgJm91dHB1dCk7Ci0gIEVYUEVD
VF9FUSgic3R1ZmYraGVsbG8iLCBvdXRwdXQpOwotICBUb2tlbml6ZXI6OlBhcnNlU3RyaW5nKCIn
aGVsbG8nIiwgJm91dHB1dCk7Ci0gIEVYUEVDVF9FUSgiaGVsbG8iLCBvdXRwdXQpOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLS8vIEVhY2ggY2FzZSBwYXJzZXMgc29tZSBpbnB1dCB0ZXh0LCBpZ25v
cmluZyB0aGUgdG9rZW5zIHByb2R1Y2VkLCBhbmQKLS8vIGNoZWNrcyB0aGF0IHRoZSBlcnJvciBv
dXRwdXQgbWF0Y2hlcyB3aGF0IGlzIGV4cGVjdGVkLgotc3RydWN0IEVycm9yQ2FzZSB7Ci0gIHN0
cmluZyBpbnB1dDsKLSAgYm9vbCByZWNvdmVyYWJsZTsgIC8vIFRydWUgaWYgdGhlIHRva2VuaXpl
ciBzaG91bGQgYmUgYWJsZSB0byByZWNvdmVyIGFuZAotICAgICAgICAgICAgICAgICAgICAgLy8g
cGFyc2UgbW9yZSB0b2tlbnMgYWZ0ZXIgc2VlaW5nIHRoaXMgZXJyb3IuICBDYXNlcwotICAgICAg
ICAgICAgICAgICAgICAgLy8gZm9yIHdoaWNoIHRoaXMgaXMgdHJ1ZSBtdXN0IGVuZCB3aXRoICJm
b28iIGFzCi0gICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGFzdCB0b2tlbiwgd2hpY2ggdGhl
IHRlc3Qgd2lsbCBjaGVjayBmb3IuCi0gIGNvbnN0IGNoYXIqIGVycm9yczsKLX07Ci0KLWlubGlu
ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG91dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEVycm9yQ2FzZSYgdGVzdF9jYXNlKSB7Ci0gIHJldHVybiBvdXQgPDwgQ0Vz
Y2FwZSh0ZXN0X2Nhc2UuaW5wdXQpOwotfQotCi1FcnJvckNhc2Uga0Vycm9yQ2FzZXNbXSA9IHsK
LSAgLy8gU3RyaW5nIGVycm9ycy4KLSAgeyAiJ1xcbCcgZm9vIiwgdHJ1ZSwKLSAgICAiMDoyOiBJ
bnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSBpbiBzdHJpbmcgbGl0ZXJhbC5cbiIgfSwKLSAgeyAiJ1xc
WCcgZm9vIiwgdHJ1ZSwKLSAgICAiMDoyOiBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSBpbiBzdHJp
bmcgbGl0ZXJhbC5cbiIgfSwKLSAgeyAiJ1xceCcgZm9vIiwgdHJ1ZSwKLSAgICAiMDozOiBFeHBl
Y3RlZCBoZXggZGlnaXRzIGZvciBlc2NhcGUgc2VxdWVuY2UuXG4iIH0sCi0gIHsgIidmb28iLCBm
YWxzZSwKLSAgICAiMDo0OiBVbmV4cGVjdGVkIGVuZCBvZiBzdHJpbmcuXG4iIH0sCi0gIHsgIidi
YXJcbmZvbyIsIHRydWUsCi0gICAgIjA6NDogU3RyaW5nIGxpdGVyYWxzIGNhbm5vdCBjcm9zcyBs
aW5lIGJvdW5kYXJpZXMuXG4iIH0sCi0gIHsgIidcXHUwMScgZm9vIiwgdHJ1ZSwKLSAgICAiMDo1
OiBFeHBlY3RlZCBmb3VyIGhleCBkaWdpdHMgZm9yIFxcdSBlc2NhcGUgc2VxdWVuY2UuXG4iIH0s
Ci0gIHsgIidcXHUwMScgZm9vIiwgdHJ1ZSwKLSAgICAiMDo1OiBFeHBlY3RlZCBmb3VyIGhleCBk
aWdpdHMgZm9yIFxcdSBlc2NhcGUgc2VxdWVuY2UuXG4iIH0sCi0gIHsgIidcXHVYWVonIGZvbyIs
IHRydWUsCi0gICAgIjA6MzogRXhwZWN0ZWQgZm91ciBoZXggZGlnaXRzIGZvciBcXHUgZXNjYXBl
IHNlcXVlbmNlLlxuIiB9LAotCi0gIC8vIEludGVnZXIgZXJyb3JzLgotICB7ICIxMjNmb28iLCB0
cnVlLAotICAgICIwOjM6IE5lZWQgc3BhY2UgYmV0d2VlbiBudW1iZXIgYW5kIGlkZW50aWZpZXIu
XG4iIH0sCi0KLSAgLy8gSGV4L29jdGFsIGVycm9ycy4KLSAgeyAiMHggZm9vIiwgdHJ1ZSwKLSAg
ICAiMDoyOiBcIjB4XCIgbXVzdCBiZSBmb2xsb3dlZCBieSBoZXggZGlnaXRzLlxuIiB9LAotICB7
ICIwNTQxODIzIGZvbyIsIHRydWUsCi0gICAgIjA6NDogTnVtYmVycyBzdGFydGluZyB3aXRoIGxl
YWRpbmcgemVybyBtdXN0IGJlIGluIG9jdGFsLlxuIiB9LAotICB7ICIweDEyM3ogZm9vIiwgdHJ1
ZSwKLSAgICAiMDo1OiBOZWVkIHNwYWNlIGJldHdlZW4gbnVtYmVyIGFuZCBpZGVudGlmaWVyLlxu
IiB9LAotICB7ICIweDEyMy40IGZvbyIsIHRydWUsCi0gICAgIjA6NTogSGV4IGFuZCBvY3RhbCBu
dW1iZXJzIG11c3QgYmUgaW50ZWdlcnMuXG4iIH0sCi0gIHsgIjAxMjMuNCBmb28iLCB0cnVlLAot
ICAgICIwOjQ6IEhleCBhbmQgb2N0YWwgbnVtYmVycyBtdXN0IGJlIGludGVnZXJzLlxuIiB9LAot
Ci0gIC8vIEZsb2F0IGVycm9ycy4KLSAgeyAiMWUgZm9vIiwgdHJ1ZSwKLSAgICAiMDoyOiBcImVc
IiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGV4cG9uZW50LlxuIiB9LAotICB7ICIxZS0gZm9vIiwgdHJ1
ZSwKLSAgICAiMDozOiBcImVcIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGV4cG9uZW50LlxuIiB9LAot
ICB7ICIxLjIuMyBmb28iLCB0cnVlLAotICAgICIwOjM6IEFscmVhZHkgc2F3IGRlY2ltYWwgcG9p
bnQgb3IgZXhwb25lbnQ7IGNhbid0IGhhdmUgYW5vdGhlciBvbmUuXG4iIH0sCi0gIHsgIjFlMi4z
IGZvbyIsIHRydWUsCi0gICAgIjA6MzogQWxyZWFkeSBzYXcgZGVjaW1hbCBwb2ludCBvciBleHBv
bmVudDsgY2FuJ3QgaGF2ZSBhbm90aGVyIG9uZS5cbiIgfSwKLSAgeyAiYS4xIGZvbyIsIHRydWUs
Ci0gICAgIjA6MTogTmVlZCBzcGFjZSBiZXR3ZWVuIGlkZW50aWZpZXIgYW5kIGRlY2ltYWwgcG9p
bnQuXG4iIH0sCi0gIC8vIGFsbG93X2ZfYWZ0ZXJfZmxvYXQgbm90IGVuYWJsZWQsIHNvIHRoaXMg
c2hvdWxkIGJlIGFuIGVycm9yLgotICB7ICIxLjBmIGZvbyIsIHRydWUsCi0gICAgIjA6MzogTmVl
ZCBzcGFjZSBiZXR3ZWVuIG51bWJlciBhbmQgaWRlbnRpZmllci5cbiIgfSwKLQotICAvLyBCbG9j
ayBjb21tZW50IGVycm9ycy4KLSAgeyAiLyoiLCBmYWxzZSwKLSAgICAiMDoyOiBFbmQtb2YtZmls
ZSBpbnNpZGUgYmxvY2sgY29tbWVudC5cbiIKLSAgICAiMDowOiAgIENvbW1lbnQgc3RhcnRlZCBo
ZXJlLlxuIn0sCi0gIHsgIi8qLyovIGZvbyIsIHRydWUsCi0gICAgIjA6MzogXCIvKlwiIGluc2lk
ZSBibG9jayBjb21tZW50LiAgQmxvY2sgY29tbWVudHMgY2Fubm90IGJlIG5lc3RlZC5cbiJ9LAot
Ci0gIC8vIENvbnRyb2wgY2hhcmFjdGVycy4gIE11bHRpcGxlIGNvbnNlY3V0aXZlIGNvbnRyb2wg
Y2hhcmFjdGVycyBzaG91bGQgb25seQotICAvLyBwcm9kdWNlIG9uZSBlcnJvci4KLSAgeyAiXGIg
Zm9vIiwgdHJ1ZSwKLSAgICAiMDowOiBJbnZhbGlkIGNvbnRyb2wgY2hhcmFjdGVycyBlbmNvdW50
ZXJlZCBpbiB0ZXh0LlxuIiB9LAotICB7ICJcYlxiIGZvbyIsIHRydWUsCi0gICAgIjA6MDogSW52
YWxpZCBjb250cm9sIGNoYXJhY3RlcnMgZW5jb3VudGVyZWQgaW4gdGV4dC5cbiIgfSwKLQotICAv
LyBDaGVjayB0aGF0IGNvbnRyb2wgY2hhcmFjdGVycyBhdCBlbmQgb2YgaW5wdXQgZG9uJ3QgcmVz
dWx0IGluIGFuCi0gIC8vIGluZmluaXRlIGxvb3AuCi0gIHsgIlxiIiwgZmFsc2UsCi0gICAgIjA6
MDogSW52YWxpZCBjb250cm9sIGNoYXJhY3RlcnMgZW5jb3VudGVyZWQgaW4gdGV4dC5cbiIgfSwK
LQotICAvLyBDaGVjayByZWNvdmVyeSBmcm9tICdcMCcuICBXZSBoYXZlIHRvIGV4cGxpY2l0bHkg
c3BlY2lmeSB0aGUgbGVuZ3RoIG9mCi0gIC8vIHRoZXNlIHN0cmluZ3MgYmVjYXVzZSBvdGhlcndp
c2UgdGhlIHN0cmluZyBjb25zdHJ1Y3RvciB3aWxsIGp1c3QgY2FsbAotICAvLyBzdHJsZW4oKSB3
aGljaCB3aWxsIHNlZSB0aGUgZmlyc3QgJ1wwJyBhbmQgdGhpbmsgdGhhdCBpcyB0aGUgZW5kIG9m
IHRoZQotICAvLyBzdHJpbmcuCi0gIHsgc3RyaW5nKCJcMGZvbyIsIDQpLCB0cnVlLAotICAgICIw
OjA6IEludmFsaWQgY29udHJvbCBjaGFyYWN0ZXJzIGVuY291bnRlcmVkIGluIHRleHQuXG4iIH0s
Ci0gIHsgc3RyaW5nKCJcMFwwZm9vIiwgNSksIHRydWUsCi0gICAgIjA6MDogSW52YWxpZCBjb250
cm9sIGNoYXJhY3RlcnMgZW5jb3VudGVyZWQgaW4gdGV4dC5cbiIgfSwKLQotICAvLyBDaGVjayBl
cnJvciBmcm9tIGhpZ2ggb3JkZXIgYml0cyBzZXQKLSAgeyAiXDMwMGZvbyIsIHRydWUsCi0gICAg
IjA6MDogSW50ZXJwcmV0aW5nIG5vbiBhc2NpaSBjb2RlcG9pbnQgMTkyLlxuIiB9LAotfTsKLQot
VEVTVF8yRChUb2tlbml6ZXJUZXN0LCBFcnJvcnMsIGtFcnJvckNhc2VzLCBrQmxvY2tTaXplcykg
ewotICAvLyBTZXQgdXAgdGhlIHRva2VuaXplci4KLSAgVGVzdElucHV0U3RyZWFtIGlucHV0KGtF
cnJvckNhc2VzX2Nhc2UuaW5wdXQuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAga0Vy
cm9yQ2FzZXNfY2FzZS5pbnB1dC5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBrQmxv
Y2tTaXplc19jYXNlKTsKLSAgVGVzdEVycm9yQ29sbGVjdG9yIGVycm9yX2NvbGxlY3RvcjsKLSAg
VG9rZW5pemVyIHRva2VuaXplcigmaW5wdXQsICZlcnJvcl9jb2xsZWN0b3IpOwotCi0gIC8vIEln
bm9yZSBhbGwgaW5wdXQsIGV4Y2VwdCByZW1lbWJlciBpZiB0aGUgbGFzdCB0b2tlbiB3YXMgImZv
byIuCi0gIGJvb2wgbGFzdF93YXNfZm9vID0gZmFsc2U7Ci0gIHdoaWxlICh0b2tlbml6ZXIuTmV4
dCgpKSB7Ci0gICAgbGFzdF93YXNfZm9vID0gdG9rZW5pemVyLmN1cnJlbnQoKS50ZXh0ID09ICJm
b28iOwotICB9Ci0KLSAgLy8gQ2hlY2sgdGhhdCB0aGUgZXJyb3JzIG1hdGNoIHdoYXQgd2FzIGV4
cGVjdGVkLgotICBFWFBFQ1RfRVEoa0Vycm9yQ2FzZXNfY2FzZS5lcnJvcnMsIGVycm9yX2NvbGxl
Y3Rvci50ZXh0Xyk7Ci0KLSAgLy8gSWYgdGhlIGVycm9yIHdhcyByZWNvdmVyYWJsZSwgbWFrZSBz
dXJlIHdlIHNhdyAiZm9vIiBhZnRlciBpdC4KLSAgaWYgKGtFcnJvckNhc2VzX2Nhc2UucmVjb3Zl
cmFibGUpIHsKLSAgICBFWFBFQ1RfVFJVRShsYXN0X3dhc19mb28pOwotICB9Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotVEVTVF8xRChUb2tlbml6ZXJUZXN0LCBCYWNrVXBPbkRlc3RydWN0aW9uLCBr
QmxvY2tTaXplcykgewotICBzdHJpbmcgdGV4dCA9ICJmb28gYmFyIjsKLSAgVGVzdElucHV0U3Ry
ZWFtIGlucHV0KHRleHQuZGF0YSgpLCB0ZXh0LnNpemUoKSwga0Jsb2NrU2l6ZXNfY2FzZSk7Ci0K
LSAgLy8gQ3JlYXRlIGEgdG9rZW5pemVyLCByZWFkIG9uZSB0b2tlbiwgdGhlbiBkZXN0cm95IGl0
LgotICB7Ci0gICAgVGVzdEVycm9yQ29sbGVjdG9yIGVycm9yX2NvbGxlY3RvcjsKLSAgICBUb2tl
bml6ZXIgdG9rZW5pemVyKCZpbnB1dCwgJmVycm9yX2NvbGxlY3Rvcik7Ci0KLSAgICB0b2tlbml6
ZXIuTmV4dCgpOwotICB9Ci0KLSAgLy8gT25seSAiZm9vIiBzaG91bGQgaGF2ZSBiZWVuIHJlYWQu
Ci0gIEVYUEVDVF9FUShzdHJsZW4oImZvbyIpLCBpbnB1dC5CeXRlQ291bnQoKSk7Ci19Ci0KLQot
fSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2lvL3plcm9fY29weV9zdHJlYW0uY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19j
b3B5X3N0cmVhbS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg2ZGUwMDE0MWQ1
NGY5NTY2YmU2YzgwZGM2OGFmYTYzOGUxNDY3MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVh
bS5jYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFy
ZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8v
ICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9jb21tb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewot
bmFtZXNwYWNlIGlvIHsKLQotWmVyb0NvcHlJbnB1dFN0cmVhbTo6flplcm9Db3B5SW5wdXRTdHJl
YW0oKSB7fQotWmVyb0NvcHlPdXRwdXRTdHJlYW06On5aZXJvQ29weU91dHB1dFN0cmVhbSgpIHt9
Ci0KLQotYm9vbCBaZXJvQ29weU91dHB1dFN0cmVhbTo6V3JpdGVBbGlhc2VkUmF3KGNvbnN0IHZv
aWQqIC8qIGRhdGEgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IC8qIHNpemUgKi8pIHsKLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIlRoaXMgWmVyb0Nv
cHlPdXRwdXRTdHJlYW0gZG9lc24ndCBzdXBwb3J0IGFsaWFzaW5nLiAiCi0gICAgICAgICAgICAg
ICAgIlJlYWNoaW5nIGhlcmUgdXN1YWxseSBtZWFucyBhIFplcm9Db3B5T3V0cHV0U3RyZWFtICIK
LSAgICAgICAgICAgICAgICAiaW1wbGVtZW50YXRpb24gYnVnLiI7Ci0gIHJldHVybiBmYWxzZTsK
LX0KLQotfSAgLy8gbmFtZXNwYWNlIGlvCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby96ZXJv
X2NvcHlfc3RyZWFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjY1MGZjNjY4NmQ1MGJiYWE3MGIwMzhi
MmJlZjhmMDRkZTdjNDM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwyNDggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNl
ZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVt
YXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyB0
aGUgWmVyb0NvcHlJbnB1dFN0cmVhbSBhbmQgWmVyb0NvcHlPdXRwdXRTdHJlYW0KLS8vIGludGVy
ZmFjZXMsIHdoaWNoIHJlcHJlc2VudCBhYnN0cmFjdCBJL08gc3RyZWFtcyB0byBhbmQgZnJvbSB3
aGljaAotLy8gcHJvdG9jb2wgYnVmZmVycyBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbi4gIEZvciBh
IGZldyBzaW1wbGUKLS8vIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBpbnRlcmZhY2VzLCBzZWUg
emVyb19jb3B5X3N0cmVhbV9pbXBsLmguCi0vLwotLy8gVGhlc2UgaW50ZXJmYWNlcyBhcmUgZGlm
ZmVyZW50IGZyb20gY2xhc3NpYyBJL08gc3RyZWFtcyBpbiB0aGF0IHRoZXkKLS8vIHRyeSB0byBt
aW5pbWl6ZSB0aGUgYW1vdW50IG9mIGRhdGEgY29weWluZyB0aGF0IG5lZWRzIHRvIGJlIGRvbmUu
Ci0vLyBUbyBhY2NvbXBsaXNoIHRoaXMsIHJlc3BvbnNpYmlsaXR5IGZvciBhbGxvY2F0aW5nIGJ1
ZmZlcnMgaXMgbW92ZWQgdG8KLS8vIHRoZSBzdHJlYW0gb2JqZWN0LCByYXRoZXIgdGhhbiBiZWlu
ZyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlci4KLS8vIFNvLCB0aGUgc3RyZWFtIGNh
biByZXR1cm4gYSBidWZmZXIgd2hpY2ggYWN0dWFsbHkgcG9pbnRzIGRpcmVjdGx5IGludG8KLS8v
IHRoZSBmaW5hbCBkYXRhIHN0cnVjdHVyZSB3aGVyZSB0aGUgYnl0ZXMgYXJlIHRvIGJlIHN0b3Jl
ZCwgYW5kIHRoZSBjYWxsZXIKLS8vIGNhbiBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoYXQgYnVm
ZmVyLCBlbGltaW5hdGluZyBhbiBpbnRlcm1lZGlhdGUgY29weQotLy8gb3BlcmF0aW9uLgotLy8K
LS8vIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBjb21tb24gY2FzZSBpbiB3aGljaCB5b3Ug
YXJlIHJlYWRpbmcgYnl0ZXMKLS8vIGZyb20gYW4gYXJyYXkgdGhhdCBpcyBhbHJlYWR5IGluIG1l
bW9yeSAob3IgcGVyaGFwcyBhbiBtbWFwKCllZCBmaWxlKS4KLS8vIFdpdGggY2xhc3NpYyBJL08g
c3RyZWFtcywgeW91IHdvdWxkIGRvIHNvbWV0aGluZyBsaWtlOgotLy8gICBjaGFyIGJ1ZmZlcltC
VUZGRVJfU0laRV07Ci0vLyAgIGlucHV0LT5SZWFkKGJ1ZmZlciwgQlVGRkVSX1NJWkUpOwotLy8g
ICBEb1NvbWV0aGluZyhidWZmZXIsIEJVRkZFUl9TSVpFKTsKLS8vIFRoZW4sIHRoZSBzdHJlYW0g
YmFzaWNhbGx5IGp1c3QgY2FsbHMgbWVtY3B5KCkgdG8gY29weSB0aGUgZGF0YSBmcm9tCi0vLyB0
aGUgYXJyYXkgaW50byB5b3VyIGJ1ZmZlci4gIFdpdGggYSBaZXJvQ29weUlucHV0U3RyZWFtLCB5
b3Ugd291bGQgZG8KLS8vIHRoaXMgaW5zdGVhZDoKLS8vICAgY29uc3Qgdm9pZCogYnVmZmVyOwot
Ly8gICBpbnQgc2l6ZTsKLS8vICAgaW5wdXQtPk5leHQoJmJ1ZmZlciwgJnNpemUpOwotLy8gICBE
b1NvbWV0aGluZyhidWZmZXIsIHNpemUpOwotLy8gSGVyZSwgbm8gY29weSBpcyBwZXJmb3JtZWQu
ICBUaGUgaW5wdXQgc3RyZWFtIHJldHVybnMgYSBwb2ludGVyIGRpcmVjdGx5Ci0vLyBpbnRvIHRo
ZSBiYWNraW5nIGFycmF5LCBhbmQgdGhlIGNhbGxlciBlbmRzIHVwIHJlYWRpbmcgZGlyZWN0bHkg
ZnJvbSBpdC4KLS8vCi0vLyBJZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJlYWQgdGhlIG9sZC1m
YXNoaW9uIHdheSwgeW91IGNhbiBjcmVhdGUKLS8vIGEgQ29kZWRJbnB1dFN0cmVhbSBvciBDb2Rl
ZE91dHB1dFN0cmVhbSB3cmFwcGluZyB0aGVzZSBvYmplY3RzIGFuZCB1c2UKLS8vIHRoZWlyIFJl
YWRSYXcoKS9Xcml0ZVJhdygpIG1ldGhvZHMuICBUaGVzZSB3aWxsLCBvZiBjb3Vyc2UsIGFkZCBh
IGNvcHkKLS8vIHN0ZXAsIGJ1dCBDb2RlZCpTdHJlYW0gd2lsbCBoYW5kbGUgYnVmZmVyaW5nIHNv
IGF0IGxlYXN0IGl0IHdpbGwgYmUKLS8vIHJlYXNvbmFibHkgZWZmaWNpZW50LgotLy8KLS8vIFpl
cm9Db3B5SW5wdXRTdHJlYW0gZXhhbXBsZToKLS8vICAgLy8gUmVhZCBpbiBhIGZpbGUgYW5kIHBy
aW50IGl0cyBjb250ZW50cyB0byBzdGRvdXQuCi0vLyAgIGludCBmZCA9IG9wZW4oIm15ZmlsZSIs
IE9fUkRPTkxZKTsKLS8vICAgWmVyb0NvcHlJbnB1dFN0cmVhbSogaW5wdXQgPSBuZXcgRmlsZUlu
cHV0U3RyZWFtKGZkKTsKLS8vCi0vLyAgIGNvbnN0IHZvaWQqIGJ1ZmZlcjsKLS8vICAgaW50IHNp
emU7Ci0vLyAgIHdoaWxlIChpbnB1dC0+TmV4dCgmYnVmZmVyLCAmc2l6ZSkpIHsKLS8vICAgICBj
b3V0LndyaXRlKGJ1ZmZlciwgc2l6ZSk7Ci0vLyAgIH0KLS8vCi0vLyAgIGRlbGV0ZSBpbnB1dDsK
LS8vICAgY2xvc2UoZmQpOwotLy8KLS8vIFplcm9Db3B5T3V0cHV0U3RyZWFtIGV4YW1wbGU6Ci0v
LyAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mICJpbmZpbGUiIHRvICJvdXRmaWxlIiwgdXNpbmcg
cGxhaW4gcmVhZCgpIGZvcgotLy8gICAvLyAiaW5maWxlIiBidXQgYSBaZXJvQ29weU91dHB1dFN0
cmVhbSBmb3IgIm91dGZpbGUiLgotLy8gICBpbnQgaW5mZCA9IG9wZW4oImluZmlsZSIsIE9fUkRP
TkxZKTsKLS8vICAgaW50IG91dGZkID0gb3Blbigib3V0ZmlsZSIsIE9fV1JPTkxZKTsKLS8vICAg
WmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dGZk
KTsKLS8vCi0vLyAgIHZvaWQqIGJ1ZmZlcjsKLS8vICAgaW50IHNpemU7Ci0vLyAgIHdoaWxlIChv
dXRwdXQtPk5leHQoJmJ1ZmZlciwgJnNpemUpKSB7Ci0vLyAgICAgaW50IGJ5dGVzID0gcmVhZChp
bmZkLCBidWZmZXIsIHNpemUpOwotLy8gICAgIGlmIChieXRlcyA8IHNpemUpIHsKLS8vICAgICAg
IC8vIFJlYWNoZWQgRU9GLgotLy8gICAgICAgb3V0cHV0LT5CYWNrVXAoc2l6ZSAtIGJ5dGVzKTsK
LS8vICAgICAgIGJyZWFrOwotLy8gICAgIH0KLS8vICAgfQotLy8KLS8vICAgZGVsZXRlIG91dHB1
dDsKLS8vICAgY2xvc2UoaW5mZCk7Ci0vLyAgIGNsb3NlKG91dGZkKTsKLQotI2lmbmRlZiBHT09H
TEVfUFJPVE9CVUZfSU9fWkVST19DT1BZX1NUUkVBTV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RP
QlVGX0lPX1pFUk9fQ09QWV9TVFJFQU1fSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbyB7Ci0KLS8vIERlZmluZWQgaW4g
dGhpcyBmaWxlLgotY2xhc3MgWmVyb0NvcHlJbnB1dFN0cmVhbTsKLWNsYXNzIFplcm9Db3B5T3V0
cHV0U3RyZWFtOwotCi0vLyBBYnN0cmFjdCBpbnRlcmZhY2Ugc2ltaWxhciB0byBhbiBpbnB1dCBz
dHJlYW0gYnV0IGRlc2lnbmVkIHRvIG1pbmltaXplCi0vLyBjb3B5aW5nLgotY2xhc3MgTElCUFJP
VE9CVUZfRVhQT1JUIFplcm9Db3B5SW5wdXRTdHJlYW0gewotIHB1YmxpYzoKLSAgaW5saW5lIFpl
cm9Db3B5SW5wdXRTdHJlYW0oKSB7fQotICB2aXJ0dWFsIH5aZXJvQ29weUlucHV0U3RyZWFtKCk7
Ci0KLSAgLy8gT2J0YWlucyBhIGNodW5rIG9mIGRhdGEgZnJvbSB0aGUgc3RyZWFtLgotICAvLwot
ICAvLyBQcmVjb25kaXRpb25zOgotICAvLyAqICJzaXplIiBhbmQgImRhdGEiIGFyZSBub3QgTlVM
TC4KLSAgLy8KLSAgLy8gUG9zdGNvbmRpdGlvbnM6Ci0gIC8vICogSWYgdGhlIHJldHVybmVkIHZh
bHVlIGlzIGZhbHNlLCB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuIG9yCi0gIC8vICAg
YW4gZXJyb3Igb2NjdXJyZWQuICBBbGwgZXJyb3JzIGFyZSBwZXJtYW5lbnQuCi0gIC8vICogT3Ro
ZXJ3aXNlLCAic2l6ZSIgcG9pbnRzIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQg
YW5kICJkYXRhIgotICAvLyAgIHBvaW50cyB0byBhIHBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFp
bmluZyB0aGVzZSBieXRlcy4KLSAgLy8gKiBPd25lcnNoaXAgb2YgdGhpcyBidWZmZXIgcmVtYWlu
cyB3aXRoIHRoZSBzdHJlYW0sIGFuZCB0aGUgYnVmZmVyCi0gIC8vICAgcmVtYWlucyB2YWxpZCBv
bmx5IHVudGlsIHNvbWUgb3RoZXIgbWV0aG9kIG9mIHRoZSBzdHJlYW0gaXMgY2FsbGVkCi0gIC8v
ICAgb3IgdGhlIHN0cmVhbSBpcyBkZXN0cm95ZWQuCi0gIC8vICogSXQgaXMgbGVnYWwgZm9yIHRo
ZSByZXR1cm5lZCBidWZmZXIgdG8gaGF2ZSB6ZXJvIHNpemUsIGFzIGxvbmcKLSAgLy8gICBhcyBy
ZXBlYXRlZGx5IGNhbGxpbmcgTmV4dCgpIGV2ZW50dWFsbHkgeWllbGRzIGEgYnVmZmVyIHdpdGgg
bm9uLXplcm8KLSAgLy8gICBzaXplLgotICB2aXJ0dWFsIGJvb2wgTmV4dChjb25zdCB2b2lkKiog
ZGF0YSwgaW50KiBzaXplKSA9IDA7Ci0KLSAgLy8gQmFja3MgdXAgYSBudW1iZXIgb2YgYnl0ZXMs
IHNvIHRoYXQgdGhlIG5leHQgY2FsbCB0byBOZXh0KCkgcmV0dXJucwotICAvLyBkYXRhIGFnYWlu
IHRoYXQgd2FzIGFscmVhZHkgcmV0dXJuZWQgYnkgdGhlIGxhc3QgY2FsbCB0byBOZXh0KCkuICBU
aGlzCi0gIC8vIGlzIHVzZWZ1bCB3aGVuIHdyaXRpbmcgcHJvY2VkdXJlcyB0aGF0IGFyZSBvbmx5
IHN1cHBvc2VkIHRvIHJlYWQgdXAKLSAgLy8gdG8gYSBjZXJ0YWluIHBvaW50IGluIHRoZSBpbnB1
dCwgdGhlbiByZXR1cm4uICBJZiBOZXh0KCkgcmV0dXJucyBhCi0gIC8vIGJ1ZmZlciB0aGF0IGdv
ZXMgYmV5b25kIHdoYXQgeW91IHdhbnRlZCB0byByZWFkLCB5b3UgY2FuIHVzZSBCYWNrVXAoKQot
ICAvLyB0byByZXR1cm4gdG8gdGhlIHBvaW50IHdoZXJlIHlvdSBpbnRlbmRlZCB0byBmaW5pc2gu
Ci0gIC8vCi0gIC8vIFByZWNvbmRpdGlvbnM6Ci0gIC8vICogVGhlIGxhc3QgbWV0aG9kIGNhbGxl
ZCBtdXN0IGhhdmUgYmVlbiBOZXh0KCkuCi0gIC8vICogY291bnQgbXVzdCBiZSBsZXNzIHRoYW4g
b3IgZXF1YWwgdG8gdGhlIHNpemUgb2YgdGhlIGxhc3QgYnVmZmVyCi0gIC8vICAgcmV0dXJuZWQg
YnkgTmV4dCgpLgotICAvLwotICAvLyBQb3N0Y29uZGl0aW9uczoKLSAgLy8gKiBUaGUgbGFzdCAi
Y291bnQiIGJ5dGVzIG9mIHRoZSBsYXN0IGJ1ZmZlciByZXR1cm5lZCBieSBOZXh0KCkgd2lsbCBi
ZQotICAvLyAgIHB1c2hlZCBiYWNrIGludG8gdGhlIHN0cmVhbS4gIFN1YnNlcXVlbnQgY2FsbHMg
dG8gTmV4dCgpIHdpbGwgcmV0dXJuCi0gIC8vICAgdGhlIHNhbWUgZGF0YSBhZ2FpbiBiZWZvcmUg
cHJvZHVjaW5nIG5ldyBkYXRhLgotICB2aXJ0dWFsIHZvaWQgQmFja1VwKGludCBjb3VudCkgPSAw
OwotCi0gIC8vIFNraXBzIGEgbnVtYmVyIG9mIGJ5dGVzLiAgUmV0dXJucyBmYWxzZSBpZiB0aGUg
ZW5kIG9mIHRoZSBzdHJlYW0gaXMKLSAgLy8gcmVhY2hlZCBvciBzb21lIGlucHV0IGVycm9yIG9j
Y3VycmVkLiAgSW4gdGhlIGVuZC1vZi1zdHJlYW0gY2FzZSwgdGhlCi0gIC8vIHN0cmVhbSBpcyBh
ZHZhbmNlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gKHNvIEJ5dGVDb3VudCgpIHdpbGwgcmV0
dXJuCi0gIC8vIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBzdHJlYW0pLgotICB2aXJ0dWFsIGJvb2wg
U2tpcChpbnQgY291bnQpID0gMDsKLQotICAvLyBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2Yg
Ynl0ZXMgcmVhZCBzaW5jZSB0aGlzIG9iamVjdCB3YXMgY3JlYXRlZC4KLSAgdmlydHVhbCBpbnQ2
NCBCeXRlQ291bnQoKSBjb25zdCA9IDA7Ci0KLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExP
V19FVklMX0NPTlNUUlVDVE9SUyhaZXJvQ29weUlucHV0U3RyZWFtKTsKLX07Ci0KLS8vIEFic3Ry
YWN0IGludGVyZmFjZSBzaW1pbGFyIHRvIGFuIG91dHB1dCBzdHJlYW0gYnV0IGRlc2lnbmVkIHRv
IG1pbmltaXplCi0vLyBjb3B5aW5nLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFplcm9Db3B5
T3V0cHV0U3RyZWFtIHsKLSBwdWJsaWM6Ci0gIGlubGluZSBaZXJvQ29weU91dHB1dFN0cmVhbSgp
IHt9Ci0gIHZpcnR1YWwgflplcm9Db3B5T3V0cHV0U3RyZWFtKCk7Ci0KLSAgLy8gT2J0YWlucyBh
IGJ1ZmZlciBpbnRvIHdoaWNoIGRhdGEgY2FuIGJlIHdyaXR0ZW4uICBBbnkgZGF0YSB3cml0dGVu
Ci0gIC8vIGludG8gdGhpcyBidWZmZXIgd2lsbCBldmVudHVhbGx5IChtYXliZSBpbnN0YW50bHks
IG1heWJlIGxhdGVyIG9uKQotICAvLyBiZSB3cml0dGVuIHRvIHRoZSBvdXRwdXQuCi0gIC8vCi0g
IC8vIFByZWNvbmRpdGlvbnM6Ci0gIC8vICogInNpemUiIGFuZCAiZGF0YSIgYXJlIG5vdCBOVUxM
LgotICAvLwotICAvLyBQb3N0Y29uZGl0aW9uczoKLSAgLy8gKiBJZiB0aGUgcmV0dXJuZWQgdmFs
dWUgaXMgZmFsc2UsIGFuIGVycm9yIG9jY3VycmVkLiAgQWxsIGVycm9ycyBhcmUKLSAgLy8gICBw
ZXJtYW5lbnQuCi0gIC8vICogT3RoZXJ3aXNlLCAic2l6ZSIgcG9pbnRzIHRvIHRoZSBhY3R1YWwg
bnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIKLSAgLy8gICBhbmQgImRhdGEiIHBvaW50cyB0
byB0aGUgYnVmZmVyLgotICAvLyAqIE93bmVyc2hpcCBvZiB0aGlzIGJ1ZmZlciByZW1haW5zIHdp
dGggdGhlIHN0cmVhbSwgYW5kIHRoZSBidWZmZXIKLSAgLy8gICByZW1haW5zIHZhbGlkIG9ubHkg
dW50aWwgc29tZSBvdGhlciBtZXRob2Qgb2YgdGhlIHN0cmVhbSBpcyBjYWxsZWQKLSAgLy8gICBv
ciB0aGUgc3RyZWFtIGlzIGRlc3Ryb3llZC4KLSAgLy8gKiBBbnkgZGF0YSB3aGljaCB0aGUgY2Fs
bGVyIHN0b3JlcyBpbiB0aGlzIGJ1ZmZlciB3aWxsIGV2ZW50dWFsbHkgYmUKLSAgLy8gICB3cml0
dGVuIHRvIHRoZSBvdXRwdXQgKHVubGVzcyBCYWNrVXAoKSBpcyBjYWxsZWQpLgotICAvLyAqIEl0
IGlzIGxlZ2FsIGZvciB0aGUgcmV0dXJuZWQgYnVmZmVyIHRvIGhhdmUgemVybyBzaXplLCBhcyBs
b25nCi0gIC8vICAgYXMgcmVwZWF0ZWRseSBjYWxsaW5nIE5leHQoKSBldmVudHVhbGx5IHlpZWxk
cyBhIGJ1ZmZlciB3aXRoIG5vbi16ZXJvCi0gIC8vICAgc2l6ZS4KLSAgdmlydHVhbCBib29sIE5l
eHQodm9pZCoqIGRhdGEsIGludCogc2l6ZSkgPSAwOwotCi0gIC8vIEJhY2tzIHVwIGEgbnVtYmVy
IG9mIGJ5dGVzLCBzbyB0aGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgYnVmZmVyIHJldHVybmVkCi0g
IC8vIGJ5IE5leHQoKSBpcyBub3QgYWN0dWFsbHkgd3JpdHRlbi4gIFRoaXMgaXMgbmVlZGVkIHdo
ZW4geW91IGZpbmlzaAotICAvLyB3cml0aW5nIGFsbCB0aGUgZGF0YSB5b3Ugd2FudCB0byB3cml0
ZSwgYnV0IHRoZSBsYXN0IGJ1ZmZlciB3YXMgYmlnZ2VyCi0gIC8vIHRoYW4geW91IG5lZWRlZC4g
IFlvdSBkb24ndCB3YW50IHRvIHdyaXRlIGEgYnVuY2ggb2YgZ2FyYmFnZSBhZnRlciB0aGUKLSAg
Ly8gZW5kIG9mIHlvdXIgZGF0YSwgc28geW91IHVzZSBCYWNrVXAoKSB0byBiYWNrIHVwLgotICAv
LwotICAvLyBQcmVjb25kaXRpb25zOgotICAvLyAqIFRoZSBsYXN0IG1ldGhvZCBjYWxsZWQgbXVz
dCBoYXZlIGJlZW4gTmV4dCgpLgotICAvLyAqIGNvdW50IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVx
dWFsIHRvIHRoZSBzaXplIG9mIHRoZSBsYXN0IGJ1ZmZlcgotICAvLyAgIHJldHVybmVkIGJ5IE5l
eHQoKS4KLSAgLy8gKiBUaGUgY2FsbGVyIG11c3Qgbm90IGhhdmUgd3JpdHRlbiBhbnl0aGluZyB0
byB0aGUgbGFzdCAiY291bnQiIGJ5dGVzCi0gIC8vICAgb2YgdGhhdCBidWZmZXIuCi0gIC8vCi0g
IC8vIFBvc3Rjb25kaXRpb25zOgotICAvLyAqIFRoZSBsYXN0ICJjb3VudCIgYnl0ZXMgb2YgdGhl
IGxhc3QgYnVmZmVyIHJldHVybmVkIGJ5IE5leHQoKSB3aWxsIGJlCi0gIC8vICAgaWdub3JlZC4K
LSAgdmlydHVhbCB2b2lkIEJhY2tVcChpbnQgY291bnQpID0gMDsKLQotICAvLyBSZXR1cm5zIHRo
ZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzaW5jZSB0aGlzIG9iamVjdCB3YXMgY3Jl
YXRlZC4KLSAgdmlydHVhbCBpbnQ2NCBCeXRlQ291bnQoKSBjb25zdCA9IDA7Ci0KLSAgLy8gV3Jp
dGUgYSBnaXZlbiBjaHVuayBvZiBkYXRhIHRvIHRoZSBvdXRwdXQuICBTb21lIG91dHB1dCBzdHJl
YW1zIG1heQotICAvLyBpbXBsZW1lbnQgdGhpcyBpbiBhIHdheSB0aGF0IGF2b2lkcyBjb3B5aW5n
LiBDaGVjayBBbGxvd3NBbGlhc2luZygpIGJlZm9yZQotICAvLyBjYWxsaW5nIFdyaXRlQWxpYXNl
ZFJhdygpLiBJdCB3aWxsIEdPT0dMRV9DSEVDSyBmYWlsIGlmIFdyaXRlQWxpYXNlZFJhdygpIGlz
Ci0gIC8vIGNhbGxlZCBvbiBhIHN0cmVhbSB0aGF0IGRvZXMgbm90IGFsbG93IGFsaWFzaW5nLgot
ICAvLwotICAvLyBOT1RFOiBJdCBpcyBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUg
dGhhdCB0aGUgY2h1bmsgb2YgbWVtb3J5Ci0gIC8vIHJlbWFpbnMgbGl2ZSB1bnRpbCBhbGwgb2Yg
dGhlIGRhdGEgaGFzIGJlZW4gY29uc3VtZWQgZnJvbSB0aGUgc3RyZWFtLgotICB2aXJ0dWFsIGJv
b2wgV3JpdGVBbGlhc2VkUmF3KGNvbnN0IHZvaWQqIGRhdGEsIGludCBzaXplKTsKLSAgdmlydHVh
bCBib29sIEFsbG93c0FsaWFzaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotCi0gcHJp
dmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFplcm9Db3B5T3V0cHV0
U3RyZWFtKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbwotfSAgLy8gbmFtZXNwYWNlIHByb3Rv
YnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVG
X0lPX1pFUk9fQ09QWV9TVFJFQU1fSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
aW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9f
Y29weV9zdHJlYW1faW1wbC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjMmI1
ZGE1Y2I5ZGFlYzEyZDA2MDU5YzMxYTViMTE2ZTgxMWJjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5
X3N0cmVhbV9pbXBsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDc0ICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29t
IChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBk
ZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQot
I2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aW8uaD4KLSNlbHNlCi0jaW5jbHVkZSA8dW5pc3Rk
Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNs
dWRlIDxmY250bC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpb3N0
cmVhbT4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
aW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0bF91dGlsLmg+Ci0KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGlvIHsKLQotI2lm
ZGVmIF9XSU4zMgotLy8gV2luMzIgbHNlZWsgaXMgYnJva2VuOiAgSWYgaW52b2tlZCBvbiBhIG5v
bi1zZWVrYWJsZSBmaWxlIGRlc2NyaXB0b3IsIGl0cwotLy8gcmV0dXJuIHZhbHVlIGlzIHVuZGVm
aW5lZC4gIFdlIHJlLWRlZmluZSBpdCB0byBhbHdheXMgcHJvZHVjZSBhbiBlcnJvci4KLSNkZWZp
bmUgbHNlZWsoZmQsIG9mZnNldCwgb3JpZ2luKSAoKG9mZl90KS0xKQotI2VuZGlmCi0KLW5hbWVz
cGFjZSB7Ci0KLS8vIEVJTlRSIHN1Y2tzLgotaW50IGNsb3NlX25vX2VpbnRyKGludCBmZCkgewot
ICBpbnQgcmVzdWx0OwotICBkbyB7Ci0gICAgcmVzdWx0ID0gY2xvc2UoZmQpOwotICB9IHdoaWxl
IChyZXN1bHQgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlCi0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1GaWxlSW5wdXRTdHJlYW06OkZp
bGVJbnB1dFN0cmVhbShpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgYmxvY2tfc2l6ZSkKLSAgOiBj
b3B5aW5nX2lucHV0XyhmaWxlX2Rlc2NyaXB0b3IpLAotICAgIGltcGxfKCZjb3B5aW5nX2lucHV0
XywgYmxvY2tfc2l6ZSkgewotfQotCi1GaWxlSW5wdXRTdHJlYW06On5GaWxlSW5wdXRTdHJlYW0o
KSB7fQotCi1ib29sIEZpbGVJbnB1dFN0cmVhbTo6Q2xvc2UoKSB7Ci0gIHJldHVybiBjb3B5aW5n
X2lucHV0Xy5DbG9zZSgpOwotfQotCi1ib29sIEZpbGVJbnB1dFN0cmVhbTo6TmV4dChjb25zdCB2
b2lkKiogZGF0YSwgaW50KiBzaXplKSB7Ci0gIHJldHVybiBpbXBsXy5OZXh0KGRhdGEsIHNpemUp
OwotfQotCi12b2lkIEZpbGVJbnB1dFN0cmVhbTo6QmFja1VwKGludCBjb3VudCkgewotICBpbXBs
Xy5CYWNrVXAoY291bnQpOwotfQotCi1ib29sIEZpbGVJbnB1dFN0cmVhbTo6U2tpcChpbnQgY291
bnQpIHsKLSAgcmV0dXJuIGltcGxfLlNraXAoY291bnQpOwotfQotCi1pbnQ2NCBGaWxlSW5wdXRT
dHJlYW06OkJ5dGVDb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIGltcGxfLkJ5dGVDb3VudCgpOwot
fQotCi1GaWxlSW5wdXRTdHJlYW06OkNvcHlpbmdGaWxlSW5wdXRTdHJlYW06OkNvcHlpbmdGaWxl
SW5wdXRTdHJlYW0oCi0gICAgaW50IGZpbGVfZGVzY3JpcHRvcikKLSAgOiBmaWxlXyhmaWxlX2Rl
c2NyaXB0b3IpLAotICAgIGNsb3NlX29uX2RlbGV0ZV8oZmFsc2UpLAotICAgIGlzX2Nsb3NlZF8o
ZmFsc2UpLAotICAgIGVycm5vXygwKSwKLSAgICBwcmV2aW91c19zZWVrX2ZhaWxlZF8oZmFsc2Up
IHsKLX0KLQotRmlsZUlucHV0U3RyZWFtOjpDb3B5aW5nRmlsZUlucHV0U3RyZWFtOjp+Q29weWlu
Z0ZpbGVJbnB1dFN0cmVhbSgpIHsKLSAgaWYgKGNsb3NlX29uX2RlbGV0ZV8pIHsKLSAgICBpZiAo
IUNsb3NlKCkpIHsKLSAgICAgIEdPT0dMRV9MT0coRVJST1IpIDw8ICJjbG9zZSgpIGZhaWxlZDog
IiA8PCBzdHJlcnJvcihlcnJub18pOwotICAgIH0KLSAgfQotfQotCi1ib29sIEZpbGVJbnB1dFN0
cmVhbTo6Q29weWluZ0ZpbGVJbnB1dFN0cmVhbTo6Q2xvc2UoKSB7Ci0gIEdPT0dMRV9DSEVDSygh
aXNfY2xvc2VkXyk7Ci0KLSAgaXNfY2xvc2VkXyA9IHRydWU7Ci0gIGlmIChjbG9zZV9ub19laW50
cihmaWxlXykgIT0gMCkgewotICAgIC8vIFRoZSBkb2NzIG9uIGNsb3NlKCkgZG8gbm90IHNwZWNp
Znkgd2hldGhlciBhIGZpbGUgZGVzY3JpcHRvciBpcyBzdGlsbAotICAgIC8vIG9wZW4gYWZ0ZXIg
Y2xvc2UoKSBmYWlscyB3aXRoIEVJTy4gIEhvd2V2ZXIsIHRoZSBnbGliYyBzb3VyY2UgY29kZQot
ICAgIC8vIHNlZW1zIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgbm90LgotICAgIGVycm5vXyA9IGVy
cm5vOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1pbnQg
RmlsZUlucHV0U3RyZWFtOjpDb3B5aW5nRmlsZUlucHV0U3RyZWFtOjpSZWFkKHZvaWQqIGJ1ZmZl
ciwgaW50IHNpemUpIHsKLSAgR09PR0xFX0NIRUNLKCFpc19jbG9zZWRfKTsKLQotICBpbnQgcmVz
dWx0OwotICBkbyB7Ci0gICAgcmVzdWx0ID0gcmVhZChmaWxlXywgYnVmZmVyLCBzaXplKTsKLSAg
fSB3aGlsZSAocmVzdWx0IDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0KLSAgaWYgKHJlc3VsdCA8
IDApIHsKLSAgICAvLyBSZWFkIGVycm9yIChub3QgRU9GKS4KLSAgICBlcnJub18gPSBlcnJubzsK
LSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBGaWxlSW5wdXRTdHJlYW06OkNvcHlp
bmdGaWxlSW5wdXRTdHJlYW06OlNraXAoaW50IGNvdW50KSB7Ci0gIEdPT0dMRV9DSEVDSyghaXNf
Y2xvc2VkXyk7Ci0KLSAgaWYgKCFwcmV2aW91c19zZWVrX2ZhaWxlZF8gJiYKLSAgICAgIGxzZWVr
KGZpbGVfLCBjb3VudCwgU0VFS19DVVIpICE9IChvZmZfdCktMSkgewotICAgIC8vIFNlZWsgc3Vj
Y2VlZGVkLgotICAgIHJldHVybiBjb3VudDsKLSAgfSBlbHNlIHsKLSAgICAvLyBGYWlsZWQgdG8g
c2Vlay4KLQotICAgIC8vIE5vdGUgdG8gc2VsZjogIERvbid0IHNlZWsgYWdhaW4uICBUaGlzIGZp
bGUgZGVzY3JpcHRvciBkb2Vzbid0Ci0gICAgLy8gc3VwcG9ydCBpdC4KLSAgICBwcmV2aW91c19z
ZWVrX2ZhaWxlZF8gPSB0cnVlOwotCi0gICAgLy8gVXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uLgotICAgIHJldHVybiBDb3B5aW5nSW5wdXRTdHJlYW06OlNraXAoY291bnQpOwotICB9Ci19
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotRmlsZU91dHB1dFN0cmVhbTo6RmlsZU91dHB1dFN0cmVhbShp
bnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgYmxvY2tfc2l6ZSkKLSAgOiBjb3B5aW5nX291dHB1dF8o
ZmlsZV9kZXNjcmlwdG9yKSwKLSAgICBpbXBsXygmY29weWluZ19vdXRwdXRfLCBibG9ja19zaXpl
KSB7Ci19Ci0KLUZpbGVPdXRwdXRTdHJlYW06On5GaWxlT3V0cHV0U3RyZWFtKCkgewotICBpbXBs
Xy5GbHVzaCgpOwotfQotCi1ib29sIEZpbGVPdXRwdXRTdHJlYW06OkNsb3NlKCkgewotICBib29s
IGZsdXNoX3N1Y2NlZWRlZCA9IGltcGxfLkZsdXNoKCk7Ci0gIHJldHVybiBjb3B5aW5nX291dHB1
dF8uQ2xvc2UoKSAmJiBmbHVzaF9zdWNjZWVkZWQ7Ci19Ci0KLWJvb2wgRmlsZU91dHB1dFN0cmVh
bTo6Rmx1c2goKSB7Ci0gIHJldHVybiBpbXBsXy5GbHVzaCgpOwotfQotCi1ib29sIEZpbGVPdXRw
dXRTdHJlYW06Ok5leHQodm9pZCoqIGRhdGEsIGludCogc2l6ZSkgewotICByZXR1cm4gaW1wbF8u
TmV4dChkYXRhLCBzaXplKTsKLX0KLQotdm9pZCBGaWxlT3V0cHV0U3RyZWFtOjpCYWNrVXAoaW50
IGNvdW50KSB7Ci0gIGltcGxfLkJhY2tVcChjb3VudCk7Ci19Ci0KLWludDY0IEZpbGVPdXRwdXRT
dHJlYW06OkJ5dGVDb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIGltcGxfLkJ5dGVDb3VudCgpOwot
fQotCi1GaWxlT3V0cHV0U3RyZWFtOjpDb3B5aW5nRmlsZU91dHB1dFN0cmVhbTo6Q29weWluZ0Zp
bGVPdXRwdXRTdHJlYW0oCi0gICAgaW50IGZpbGVfZGVzY3JpcHRvcikKLSAgOiBmaWxlXyhmaWxl
X2Rlc2NyaXB0b3IpLAotICAgIGNsb3NlX29uX2RlbGV0ZV8oZmFsc2UpLAotICAgIGlzX2Nsb3Nl
ZF8oZmFsc2UpLAotICAgIGVycm5vXygwKSB7Ci19Ci0KLUZpbGVPdXRwdXRTdHJlYW06OkNvcHlp
bmdGaWxlT3V0cHV0U3RyZWFtOjp+Q29weWluZ0ZpbGVPdXRwdXRTdHJlYW0oKSB7Ci0gIGlmIChj
bG9zZV9vbl9kZWxldGVfKSB7Ci0gICAgaWYgKCFDbG9zZSgpKSB7Ci0gICAgICBHT09HTEVfTE9H
KEVSUk9SKSA8PCAiY2xvc2UoKSBmYWlsZWQ6ICIgPDwgc3RyZXJyb3IoZXJybm9fKTsKLSAgICB9
Ci0gIH0KLX0KLQotYm9vbCBGaWxlT3V0cHV0U3RyZWFtOjpDb3B5aW5nRmlsZU91dHB1dFN0cmVh
bTo6Q2xvc2UoKSB7Ci0gIEdPT0dMRV9DSEVDSyghaXNfY2xvc2VkXyk7Ci0KLSAgaXNfY2xvc2Vk
XyA9IHRydWU7Ci0gIGlmIChjbG9zZV9ub19laW50cihmaWxlXykgIT0gMCkgewotICAgIC8vIFRo
ZSBkb2NzIG9uIGNsb3NlKCkgZG8gbm90IHNwZWNpZnkgd2hldGhlciBhIGZpbGUgZGVzY3JpcHRv
ciBpcyBzdGlsbAotICAgIC8vIG9wZW4gYWZ0ZXIgY2xvc2UoKSBmYWlscyB3aXRoIEVJTy4gIEhv
d2V2ZXIsIHRoZSBnbGliYyBzb3VyY2UgY29kZQotICAgIC8vIHNlZW1zIHRvIGluZGljYXRlIHRo
YXQgaXQgaXMgbm90LgotICAgIGVycm5vXyA9IGVycm5vOwotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZpbGVPdXRwdXRTdHJlYW06OkNvcHlpbmdG
aWxlT3V0cHV0U3RyZWFtOjpXcml0ZSgKLSAgICBjb25zdCB2b2lkKiBidWZmZXIsIGludCBzaXpl
KSB7Ci0gIEdPT0dMRV9DSEVDSyghaXNfY2xvc2VkXyk7Ci0gIGludCB0b3RhbF93cml0dGVuID0g
MDsKLQotICBjb25zdCB1aW50OCogYnVmZmVyX2Jhc2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4Kj4oYnVmZmVyKTsKLQotICB3aGlsZSAodG90YWxfd3JpdHRlbiA8IHNpemUpIHsKLSAg
ICBpbnQgYnl0ZXM7Ci0gICAgZG8gewotICAgICAgYnl0ZXMgPSB3cml0ZShmaWxlXywgYnVmZmVy
X2Jhc2UgKyB0b3RhbF93cml0dGVuLCBzaXplIC0gdG90YWxfd3JpdHRlbik7Ci0gICAgfSB3aGls
ZSAoYnl0ZXMgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLQotICAgIGlmIChieXRlcyA8PSAwKSB7
Ci0gICAgICAvLyBXcml0ZSBlcnJvci4KLQotICAgICAgLy8gRklYTUUoa2VudG9uKTogIEFjY29y
ZGluZyB0byB0aGUgbWFuIHBhZ2UsIGlmIHdyaXRlKCkgcmV0dXJucyB6ZXJvLAotICAgICAgLy8g
ICB0aGVyZSB3YXMgbm8gZXJyb3I7IHdyaXRlKCkgc2ltcGx5IGRpZCBub3Qgd3JpdGUgYW55dGhp
bmcuICBJdCdzCi0gICAgICAvLyAgIHVuY2xlYXIgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRo
aXMgbWlnaHQgaGFwcGVuLCBidXQgcHJlc3VtYWJseQotICAgICAgLy8gICBlcnJubyB3b24ndCBi
ZSBzZXQgaW4gdGhpcyBjYXNlLiAgSSBhbSBjb25mdXNlZCBhcyB0byBob3cgc3VjaCBhbgotICAg
ICAgLy8gICBldmVudCBzaG91bGQgYmUgaGFuZGxlZC4gIEZvciBub3cgSSdtIHRyZWF0aW5nIGl0
IGFzIGFuIGVycm9yLCBzaW5jZQotICAgICAgLy8gICByZXRyeWluZyBzZWVtcyBsaWtlIGl0IGNv
dWxkIGxlYWQgdG8gYW4gaW5maW5pdGUgbG9vcC4gIEkgc3VzcGVjdAotICAgICAgLy8gICB0aGlz
IG5ldmVyIGFjdHVhbGx5IGhhcHBlbnMgYW55d2F5LgotCi0gICAgICBpZiAoYnl0ZXMgPCAwKSB7
Ci0gICAgICAgIGVycm5vXyA9IGVycm5vOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICB0b3RhbF93cml0dGVuICs9IGJ5dGVzOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotSXN0cmVhbUlucHV0U3RyZWFtOjpJc3RyZWFtSW5wdXRT
dHJlYW0oaXN0cmVhbSogaW5wdXQsIGludCBibG9ja19zaXplKQotICA6IGNvcHlpbmdfaW5wdXRf
KGlucHV0KSwKLSAgICBpbXBsXygmY29weWluZ19pbnB1dF8sIGJsb2NrX3NpemUpIHsKLX0KLQot
SXN0cmVhbUlucHV0U3RyZWFtOjp+SXN0cmVhbUlucHV0U3RyZWFtKCkge30KLQotYm9vbCBJc3Ry
ZWFtSW5wdXRTdHJlYW06Ok5leHQoY29uc3Qgdm9pZCoqIGRhdGEsIGludCogc2l6ZSkgewotICBy
ZXR1cm4gaW1wbF8uTmV4dChkYXRhLCBzaXplKTsKLX0KLQotdm9pZCBJc3RyZWFtSW5wdXRTdHJl
YW06OkJhY2tVcChpbnQgY291bnQpIHsKLSAgaW1wbF8uQmFja1VwKGNvdW50KTsKLX0KLQotYm9v
bCBJc3RyZWFtSW5wdXRTdHJlYW06OlNraXAoaW50IGNvdW50KSB7Ci0gIHJldHVybiBpbXBsXy5T
a2lwKGNvdW50KTsKLX0KLQotaW50NjQgSXN0cmVhbUlucHV0U3RyZWFtOjpCeXRlQ291bnQoKSBj
b25zdCB7Ci0gIHJldHVybiBpbXBsXy5CeXRlQ291bnQoKTsKLX0KLQotSXN0cmVhbUlucHV0U3Ry
ZWFtOjpDb3B5aW5nSXN0cmVhbUlucHV0U3RyZWFtOjpDb3B5aW5nSXN0cmVhbUlucHV0U3RyZWFt
KAotICAgIGlzdHJlYW0qIGlucHV0KQotICA6IGlucHV0XyhpbnB1dCkgewotfQotCi1Jc3RyZWFt
SW5wdXRTdHJlYW06OkNvcHlpbmdJc3RyZWFtSW5wdXRTdHJlYW06On5Db3B5aW5nSXN0cmVhbUlu
cHV0U3RyZWFtKCkge30KLQotaW50IElzdHJlYW1JbnB1dFN0cmVhbTo6Q29weWluZ0lzdHJlYW1J
bnB1dFN0cmVhbTo6UmVhZCgKLSAgICB2b2lkKiBidWZmZXIsIGludCBzaXplKSB7Ci0gIGlucHV0
Xy0+cmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIpLCBzaXplKTsKLSAgaW50IHJl
c3VsdCA9IGlucHV0Xy0+Z2NvdW50KCk7Ci0gIGlmIChyZXN1bHQgPT0gMCAmJiBpbnB1dF8tPmZh
aWwoKSAmJiAhaW5wdXRfLT5lb2YoKSkgewotICAgIHJldHVybiAtMTsKLSAgfQotICByZXR1cm4g
cmVzdWx0OwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU9zdHJlYW1PdXRwdXRTdHJlYW06Ok9zdHJl
YW1PdXRwdXRTdHJlYW0ob3N0cmVhbSogb3V0cHV0LCBpbnQgYmxvY2tfc2l6ZSkKLSAgOiBjb3B5
aW5nX291dHB1dF8ob3V0cHV0KSwKLSAgICBpbXBsXygmY29weWluZ19vdXRwdXRfLCBibG9ja19z
aXplKSB7Ci19Ci0KLU9zdHJlYW1PdXRwdXRTdHJlYW06On5Pc3RyZWFtT3V0cHV0U3RyZWFtKCkg
ewotICBpbXBsXy5GbHVzaCgpOwotfQotCi1ib29sIE9zdHJlYW1PdXRwdXRTdHJlYW06Ok5leHQo
dm9pZCoqIGRhdGEsIGludCogc2l6ZSkgewotICByZXR1cm4gaW1wbF8uTmV4dChkYXRhLCBzaXpl
KTsKLX0KLQotdm9pZCBPc3RyZWFtT3V0cHV0U3RyZWFtOjpCYWNrVXAoaW50IGNvdW50KSB7Ci0g
IGltcGxfLkJhY2tVcChjb3VudCk7Ci19Ci0KLWludDY0IE9zdHJlYW1PdXRwdXRTdHJlYW06OkJ5
dGVDb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIGltcGxfLkJ5dGVDb3VudCgpOwotfQotCi1Pc3Ry
ZWFtT3V0cHV0U3RyZWFtOjpDb3B5aW5nT3N0cmVhbU91dHB1dFN0cmVhbTo6Q29weWluZ09zdHJl
YW1PdXRwdXRTdHJlYW0oCi0gICAgb3N0cmVhbSogb3V0cHV0KQotICA6IG91dHB1dF8ob3V0cHV0
KSB7Ci19Ci0KLU9zdHJlYW1PdXRwdXRTdHJlYW06OkNvcHlpbmdPc3RyZWFtT3V0cHV0U3RyZWFt
Ojp+Q29weWluZ09zdHJlYW1PdXRwdXRTdHJlYW0oKSB7Ci19Ci0KLWJvb2wgT3N0cmVhbU91dHB1
dFN0cmVhbTo6Q29weWluZ09zdHJlYW1PdXRwdXRTdHJlYW06OldyaXRlKAotICAgIGNvbnN0IHZv
aWQqIGJ1ZmZlciwgaW50IHNpemUpIHsKLSAgb3V0cHV0Xy0+d3JpdGUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oYnVmZmVyKSwgc2l6ZSk7Ci0gIHJldHVybiBvdXRwdXRfLT5nb29kKCk7
Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotQ29uY2F0ZW5hdGluZ0lucHV0U3RyZWFtOjpDb25jYXRl
bmF0aW5nSW5wdXRTdHJlYW0oCi0gICAgWmVyb0NvcHlJbnB1dFN0cmVhbSogY29uc3Qgc3RyZWFt
c1tdLCBpbnQgY291bnQpCi0gIDogc3RyZWFtc18oc3RyZWFtcyksIHN0cmVhbV9jb3VudF8oY291
bnQpLCBieXRlc19yZXRpcmVkXygwKSB7Ci19Ci0KLUNvbmNhdGVuYXRpbmdJbnB1dFN0cmVhbTo6
fkNvbmNhdGVuYXRpbmdJbnB1dFN0cmVhbSgpIHsKLX0KLQotYm9vbCBDb25jYXRlbmF0aW5nSW5w
dXRTdHJlYW06Ok5leHQoY29uc3Qgdm9pZCoqIGRhdGEsIGludCogc2l6ZSkgewotICB3aGlsZSAo
c3RyZWFtX2NvdW50XyA+IDApIHsKLSAgICBpZiAoc3RyZWFtc19bMF0tPk5leHQoZGF0YSwgc2l6
ZSkpIHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhhdCBzdHJlYW0gaXMgZG9uZS4gIEFkdmFuY2Ug
dG8gdGhlIG5leHQgb25lLgotICAgIGJ5dGVzX3JldGlyZWRfICs9IHN0cmVhbXNfWzBdLT5CeXRl
Q291bnQoKTsKLSAgICArK3N0cmVhbXNfOwotICAgIC0tc3RyZWFtX2NvdW50XzsKLSAgfQotCi0g
IC8vIE5vIG1vcmUgc3RyZWFtcy4KLSAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvbmNhdGVu
YXRpbmdJbnB1dFN0cmVhbTo6QmFja1VwKGludCBjb3VudCkgewotICBpZiAoc3RyZWFtX2NvdW50
XyA+IDApIHsKLSAgICBzdHJlYW1zX1swXS0+QmFja1VwKGNvdW50KTsKLSAgfSBlbHNlIHsKLSAg
ICBHT09HTEVfTE9HKERGQVRBTCkgPDwgIkNhbid0IEJhY2tVcCgpIGFmdGVyIGZhaWxlZCBOZXh0
KCkuIjsKLSAgfQotfQotCi1ib29sIENvbmNhdGVuYXRpbmdJbnB1dFN0cmVhbTo6U2tpcChpbnQg
Y291bnQpIHsKLSAgd2hpbGUgKHN0cmVhbV9jb3VudF8gPiAwKSB7Ci0gICAgLy8gQXNzdW1lIHRo
YXQgQnl0ZUNvdW50KCkgY2FuIGJlIHVzZWQgdG8gZmluZCBvdXQgaG93IG11Y2ggd2UgYWN0dWFs
bHkKLSAgICAvLyBza2lwcGVkIHdoZW4gU2tpcCgpIGZhaWxzLgotICAgIGludDY0IHRhcmdldF9i
eXRlX2NvdW50ID0gc3RyZWFtc19bMF0tPkJ5dGVDb3VudCgpICsgY291bnQ7Ci0gICAgaWYgKHN0
cmVhbXNfWzBdLT5Ta2lwKGNvdW50KSkgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIaXQgdGhlIGVu
ZCBvZiB0aGUgc3RyZWFtLiAgRmlndXJlIG91dCBob3cgbWFueSBtb3JlIGJ5dGVzIHdlIHN0aWxs
IGhhdmUKLSAgICAvLyB0byBza2lwLgotICAgIGludDY0IGZpbmFsX2J5dGVfY291bnQgPSBzdHJl
YW1zX1swXS0+Qnl0ZUNvdW50KCk7Ci0gICAgR09PR0xFX0RDSEVDS19MVChmaW5hbF9ieXRlX2Nv
dW50LCB0YXJnZXRfYnl0ZV9jb3VudCk7Ci0gICAgY291bnQgPSB0YXJnZXRfYnl0ZV9jb3VudCAt
IGZpbmFsX2J5dGVfY291bnQ7Ci0KLSAgICAvLyBUaGF0IHN0cmVhbSBpcyBkb25lLiAgQWR2YW5j
ZSB0byB0aGUgbmV4dCBvbmUuCi0gICAgYnl0ZXNfcmV0aXJlZF8gKz0gZmluYWxfYnl0ZV9jb3Vu
dDsKLSAgICArK3N0cmVhbXNfOwotICAgIC0tc3RyZWFtX2NvdW50XzsKLSAgfQotCi0gIHJldHVy
biBmYWxzZTsKLX0KLQotaW50NjQgQ29uY2F0ZW5hdGluZ0lucHV0U3RyZWFtOjpCeXRlQ291bnQo
KSBjb25zdCB7Ci0gIGlmIChzdHJlYW1fY291bnRfID09IDApIHsKLSAgICByZXR1cm4gYnl0ZXNf
cmV0aXJlZF87Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGJ5dGVzX3JldGlyZWRfICsgc3RyZWFt
c19bMF0tPkJ5dGVDb3VudCgpOwotICB9Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1MaW1pdGlu
Z0lucHV0U3RyZWFtOjpMaW1pdGluZ0lucHV0U3RyZWFtKFplcm9Db3B5SW5wdXRTdHJlYW0qIGlu
cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NCBsaW1p
dCkKLSAgOiBpbnB1dF8oaW5wdXQpLCBsaW1pdF8obGltaXQpIHsKLSAgcHJpb3JfYnl0ZXNfcmVh
ZF8gPSBpbnB1dF8tPkJ5dGVDb3VudCgpOwotfQotCi1MaW1pdGluZ0lucHV0U3RyZWFtOjp+TGlt
aXRpbmdJbnB1dFN0cmVhbSgpIHsKLSAgLy8gSWYgd2Ugb3ZlcnNob3QgdGhlIGxpbWl0LCBiYWNr
IHVwLgotICBpZiAobGltaXRfIDwgMCkgaW5wdXRfLT5CYWNrVXAoLWxpbWl0Xyk7Ci19Ci0KLWJv
b2wgTGltaXRpbmdJbnB1dFN0cmVhbTo6TmV4dChjb25zdCB2b2lkKiogZGF0YSwgaW50KiBzaXpl
KSB7Ci0gIGlmIChsaW1pdF8gPD0gMCkgcmV0dXJuIGZhbHNlOwotICBpZiAoIWlucHV0Xy0+TmV4
dChkYXRhLCBzaXplKSkgcmV0dXJuIGZhbHNlOwotCi0gIGxpbWl0XyAtPSAqc2l6ZTsKLSAgaWYg
KGxpbWl0XyA8IDApIHsKLSAgICAvLyBXZSBvdmVyc2hvdCB0aGUgbGltaXQuICBSZWR1Y2UgKnNp
emUgdG8gaGlkZSB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLgotICAgICpzaXplICs9IGxpbWl0XzsK
LSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMaW1pdGluZ0lucHV0U3RyZWFtOjpCYWNr
VXAoaW50IGNvdW50KSB7Ci0gIGlmIChsaW1pdF8gPCAwKSB7Ci0gICAgaW5wdXRfLT5CYWNrVXAo
Y291bnQgLSBsaW1pdF8pOwotICAgIGxpbWl0XyA9IGNvdW50OwotICB9IGVsc2UgewotICAgIGlu
cHV0Xy0+QmFja1VwKGNvdW50KTsKLSAgICBsaW1pdF8gKz0gY291bnQ7Ci0gIH0KLX0KLQotYm9v
bCBMaW1pdGluZ0lucHV0U3RyZWFtOjpTa2lwKGludCBjb3VudCkgewotICBpZiAoY291bnQgPiBs
aW1pdF8pIHsKLSAgICBpZiAobGltaXRfIDwgMCkgcmV0dXJuIGZhbHNlOwotICAgIGlucHV0Xy0+
U2tpcChsaW1pdF8pOwotICAgIGxpbWl0XyA9IDA7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVs
c2UgewotICAgIGlmICghaW5wdXRfLT5Ta2lwKGNvdW50KSkgcmV0dXJuIGZhbHNlOwotICAgIGxp
bWl0XyAtPSBjb3VudDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfQotCi1pbnQ2NCBMaW1pdGlu
Z0lucHV0U3RyZWFtOjpCeXRlQ291bnQoKSBjb25zdCB7Ci0gIGlmIChsaW1pdF8gPCAwKSB7Ci0g
ICAgcmV0dXJuIGlucHV0Xy0+Qnl0ZUNvdW50KCkgKyBsaW1pdF8gLSBwcmlvcl9ieXRlc19yZWFk
XzsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gaW5wdXRfLT5CeXRlQ291bnQoKSAtIHByaW9yX2J5
dGVzX3JlYWRfOwotICB9Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi19ICAvLyBuYW1lc3BhY2Ug
aW8KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwNzQ2ZmE2YWZlNjk2ZmYyMTc2ZmFlNjY5NmUxNDA4MGE5ZTI2
MGViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGwuaAorKysgL2Rldi9udWxsCkBA
IC0xLDM1OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8g
QXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9y
aWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBK
ZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvbW1vbiBp
bXBsZW1lbnRhdGlvbnMgb2YgdGhlIGludGVyZmFjZXMgZGVmaW5lZCBpbgotLy8gemVyb19jb3B5
X3N0cmVhbS5oIHdoaWNoIGFyZSBvbmx5IGluY2x1ZGVkIGluIHRoZSBmdWxsIChub24tbGl0ZSkK
LS8vIHByb3RvYnVmIGxpYnJhcnkuICBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgaW5jbHVkZSBVbml4
IGZpbGUgZGVzY3JpcHRvcnMKLS8vIGFuZCBDKysgaW9zdHJlYW1zLiAgU2VlIGFsc286ICB6ZXJv
X2NvcHlfc3RyZWFtX2ltcGxfbGl0ZS5oCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0lPX1pF
Uk9fQ09QWV9TVFJFQU1fSU1QTF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0lPX1pFUk9f
Q09QWV9TVFJFQU1fSU1QTF9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxpb3Nm
d2Q+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW0uaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsX2xpdGUuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGlvIHsKLQotCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KLS8vIEEgWmVyb0NvcHlJbnB1dFN0cmVhbSB3aGljaCByZWFkcyBmcm9tIGEg
ZmlsZSBkZXNjcmlwdG9yLgotLy8KLS8vIEZpbGVJbnB1dFN0cmVhbSBpcyBwcmVmZXJyZWQgb3Zl
ciB1c2luZyBhbiBpZnN0cmVhbSB3aXRoIElzdHJlYW1JbnB1dFN0cmVhbS4KLS8vIFRoZSBsYXR0
ZXIgd2lsbCBpbnRyb2R1Y2UgYW4gZXh0cmEgbGF5ZXIgb2YgYnVmZmVyaW5nLCBoYXJtaW5nIHBl
cmZvcm1hbmNlLgotLy8gQWxzbywgaXQncyBjb25jZWl2YWJsZSB0aGF0IEZpbGVJbnB1dFN0cmVh
bSBjb3VsZCBzb21lZGF5IGJlIGVuaGFuY2VkCi0vLyB0byB1c2UgemVyby1jb3B5IGZpbGUgZGVz
Y3JpcHRvcnMgb24gT1NzIHdoaWNoIHN1cHBvcnQgdGhlbS4KLWNsYXNzIExJQlBST1RPQlVGX0VY
UE9SVCBGaWxlSW5wdXRTdHJlYW0gOiBwdWJsaWMgWmVyb0NvcHlJbnB1dFN0cmVhbSB7Ci0gcHVi
bGljOgotICAvLyBDcmVhdGVzIGEgc3RyZWFtIHRoYXQgcmVhZHMgZnJvbSB0aGUgZ2l2ZW4gVW5p
eCBmaWxlIGRlc2NyaXB0b3IuCi0gIC8vIElmIGEgYmxvY2tfc2l6ZSBpcyBnaXZlbiwgaXQgc3Bl
Y2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdAotICAvLyBzaG91bGQgYmUgcmVhZCBhbmQg
cmV0dXJuZWQgd2l0aCBlYWNoIGNhbGwgdG8gTmV4dCgpLiAgT3RoZXJ3aXNlLAotICAvLyBhIHJl
YXNvbmFibGUgZGVmYXVsdCBpcyB1c2VkLgotICBleHBsaWNpdCBGaWxlSW5wdXRTdHJlYW0oaW50
IGZpbGVfZGVzY3JpcHRvciwgaW50IGJsb2NrX3NpemUgPSAtMSk7Ci0gIH5GaWxlSW5wdXRTdHJl
YW0oKTsKLQotICAvLyBGbHVzaGVzIGFueSBidWZmZXJzIGFuZCBjbG9zZXMgdGhlIHVuZGVybHlp
bmcgZmlsZS4gIFJldHVybnMgZmFsc2UgaWYKLSAgLy8gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0
aGUgcHJvY2VzczsgdXNlIEdldEVycm5vKCkgdG8gZXhhbWluZSB0aGUgZXJyb3IuCi0gIC8vIEV2
ZW4gaWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNsb3NlZCB3aGVu
IHRoaXMgcmV0dXJucy4KLSAgYm9vbCBDbG9zZSgpOwotCi0gIC8vIEJ5IGRlZmF1bHQsIHRoZSBm
aWxlIGRlc2NyaXB0b3IgaXMgbm90IGNsb3NlZCB3aGVuIHRoZSBzdHJlYW0gaXMKLSAgLy8gZGVz
dHJveWVkLiAgQ2FsbCBTZXRDbG9zZU9uRGVsZXRlKHRydWUpIHRvIGNoYW5nZSB0aGF0LiAgV0FS
TklORzoKLSAgLy8gVGhpcyBsZWF2ZXMgbm8gd2F5IGZvciB0aGUgY2FsbGVyIHRvIGRldGVjdCBp
ZiBjbG9zZSgpIGZhaWxzLiAgSWYKLSAgLy8gZGV0ZWN0aW5nIGNsb3NlKCkgZXJyb3JzIGlzIGlt
cG9ydGFudCB0byB5b3UsIHlvdSBzaG91bGQgYXJyYW5nZQotICAvLyB0byBjbG9zZSB0aGUgZGVz
Y3JpcHRvciB5b3Vyc2VsZi4KLSAgdm9pZCBTZXRDbG9zZU9uRGVsZXRlKGJvb2wgdmFsdWUpIHsg
Y29weWluZ19pbnB1dF8uU2V0Q2xvc2VPbkRlbGV0ZSh2YWx1ZSk7IH0KLQotICAvLyBJZiBhbiBJ
L08gZXJyb3IgaGFzIG9jY3VycmVkIG9uIHRoaXMgZmlsZSBkZXNjcmlwdG9yLCB0aGlzIGlzIHRo
ZQotICAvLyBlcnJubyBmcm9tIHRoYXQgZXJyb3IuICBPdGhlcndpc2UsIHRoaXMgaXMgemVyby4g
IE9uY2UgYW4gZXJyb3IKLSAgLy8gb2NjdXJzLCB0aGUgc3RyZWFtIGlzIGJyb2tlbiBhbmQgYWxs
IHN1YnNlcXVlbnQgb3BlcmF0aW9ucyB3aWxsCi0gIC8vIGZhaWwuCi0gIGludCBHZXRFcnJubygp
IHsgcmV0dXJuIGNvcHlpbmdfaW5wdXRfLkdldEVycm5vKCk7IH0KLQotICAvLyBpbXBsZW1lbnRz
IFplcm9Db3B5SW5wdXRTdHJlYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICBib29sIE5leHQoY29uc3Qgdm9pZCoqIGRhdGEsIGludCogc2l6ZSk7Ci0gIHZvaWQgQmFja1Vw
KGludCBjb3VudCk7Ci0gIGJvb2wgU2tpcChpbnQgY291bnQpOwotICBpbnQ2NCBCeXRlQ291bnQo
KSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBDb3B5aW5n
RmlsZUlucHV0U3RyZWFtIDogcHVibGljIENvcHlpbmdJbnB1dFN0cmVhbSB7Ci0gICBwdWJsaWM6
Ci0gICAgQ29weWluZ0ZpbGVJbnB1dFN0cmVhbShpbnQgZmlsZV9kZXNjcmlwdG9yKTsKLSAgICB+
Q29weWluZ0ZpbGVJbnB1dFN0cmVhbSgpOwotCi0gICAgYm9vbCBDbG9zZSgpOwotICAgIHZvaWQg
U2V0Q2xvc2VPbkRlbGV0ZShib29sIHZhbHVlKSB7IGNsb3NlX29uX2RlbGV0ZV8gPSB2YWx1ZTsg
fQotICAgIGludCBHZXRFcnJubygpIHsgcmV0dXJuIGVycm5vXzsgfQotCi0gICAgLy8gaW1wbGVt
ZW50cyBDb3B5aW5nSW5wdXRTdHJlYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gICAgaW50IFJlYWQodm9pZCogYnVmZmVyLCBpbnQgc2l6ZSk7Ci0gICAgaW50IFNraXAoaW50
IGNvdW50KTsKLQotICAgcHJpdmF0ZToKLSAgICAvLyBUaGUgZmlsZSBkZXNjcmlwdG9yLgotICAg
IGNvbnN0IGludCBmaWxlXzsKLSAgICBib29sIGNsb3NlX29uX2RlbGV0ZV87Ci0gICAgYm9vbCBp
c19jbG9zZWRfOwotCi0gICAgLy8gVGhlIGVycm5vIG9mIHRoZSBJL08gZXJyb3IsIGlmIG9uZSBo
YXMgb2NjdXJyZWQuICBPdGhlcndpc2UsIHplcm8uCi0gICAgaW50IGVycm5vXzsKLQotICAgIC8v
IERpZCB3ZSB0cnkgdG8gc2VlayBvbmNlIGFuZCBmYWlsPyAgSWYgc28sIHdlIGFzc3VtZSB0aGlz
IGZpbGUgZGVzY3JpcHRvcgotICAgIC8vIGRvZXNuJ3Qgc3VwcG9ydCBzZWVraW5nIGFuZCB3b24n
dCB0cnkgYWdhaW4uCi0gICAgYm9vbCBwcmV2aW91c19zZWVrX2ZhaWxlZF87Ci0KLSAgICBHT09H
TEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQ29weWluZ0ZpbGVJbnB1dFN0cmVhbSk7Ci0g
IH07Ci0KLSAgQ29weWluZ0ZpbGVJbnB1dFN0cmVhbSBjb3B5aW5nX2lucHV0XzsKLSAgQ29weWlu
Z0lucHV0U3RyZWFtQWRhcHRvciBpbXBsXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05T
VFJVQ1RPUlMoRmlsZUlucHV0U3RyZWFtKTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLy8gQSBa
ZXJvQ29weU91dHB1dFN0cmVhbSB3aGljaCB3cml0ZXMgdG8gYSBmaWxlIGRlc2NyaXB0b3IuCi0v
LwotLy8gRmlsZU91dHB1dFN0cmVhbSBpcyBwcmVmZXJyZWQgb3ZlciB1c2luZyBhbiBvZnN0cmVh
bSB3aXRoCi0vLyBPc3RyZWFtT3V0cHV0U3RyZWFtLiAgVGhlIGxhdHRlciB3aWxsIGludHJvZHVj
ZSBhbiBleHRyYSBsYXllciBvZiBidWZmZXJpbmcsCi0vLyBoYXJtaW5nIHBlcmZvcm1hbmNlLiAg
QWxzbywgaXQncyBjb25jZWl2YWJsZSB0aGF0IEZpbGVPdXRwdXRTdHJlYW0gY291bGQKLS8vIHNv
bWVkYXkgYmUgZW5oYW5jZWQgdG8gdXNlIHplcm8tY29weSBmaWxlIGRlc2NyaXB0b3JzIG9uIE9T
cyB3aGljaAotLy8gc3VwcG9ydCB0aGVtLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIEZpbGVP
dXRwdXRTdHJlYW0gOiBwdWJsaWMgWmVyb0NvcHlPdXRwdXRTdHJlYW0gewotIHB1YmxpYzoKLSAg
Ly8gQ3JlYXRlcyBhIHN0cmVhbSB0aGF0IHdyaXRlcyB0byB0aGUgZ2l2ZW4gVW5peCBmaWxlIGRl
c2NyaXB0b3IuCi0gIC8vIElmIGEgYmxvY2tfc2l6ZSBpcyBnaXZlbiwgaXQgc3BlY2lmaWVzIHRo
ZSBzaXplIG9mIHRoZSBidWZmZXJzCi0gIC8vIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkIGJ5IE5l
eHQoKS4gIE90aGVyd2lzZSwgYSByZWFzb25hYmxlIGRlZmF1bHQKLSAgLy8gaXMgdXNlZC4KLSAg
ZXhwbGljaXQgRmlsZU91dHB1dFN0cmVhbShpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgYmxvY2tf
c2l6ZSA9IC0xKTsKLSAgfkZpbGVPdXRwdXRTdHJlYW0oKTsKLQotICAvLyBGbHVzaGVzIGFueSBi
dWZmZXJzIGFuZCBjbG9zZXMgdGhlIHVuZGVybHlpbmcgZmlsZS4gIFJldHVybnMgZmFsc2UgaWYK
LSAgLy8gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgcHJvY2VzczsgdXNlIEdldEVycm5vKCkg
dG8gZXhhbWluZSB0aGUgZXJyb3IuCi0gIC8vIEV2ZW4gaWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUg
ZmlsZSBkZXNjcmlwdG9yIGlzIGNsb3NlZCB3aGVuIHRoaXMgcmV0dXJucy4KLSAgYm9vbCBDbG9z
ZSgpOwotCi0gIC8vIEZsdXNoZXMgRmlsZU91dHB1dFN0cmVhbSdzIGJ1ZmZlcnMgYnV0IGRvZXMg
bm90IGNsb3NlIHRoZQotICAvLyB1bmRlcmx5aW5nIGZpbGUuIE5vIHNwZWNpYWwgbWVhc3VyZXMg
YXJlIHRha2VuIHRvIGVuc3VyZSB0aGF0Ci0gIC8vIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3Rl
bSBmaWxlIG9iamVjdCBpcyBzeW5jaHJvbml6ZWQgdG8gZGlzay4KLSAgYm9vbCBGbHVzaCgpOwot
Ci0gIC8vIEJ5IGRlZmF1bHQsIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgbm90IGNsb3NlZCB3aGVu
IHRoZSBzdHJlYW0gaXMKLSAgLy8gZGVzdHJveWVkLiAgQ2FsbCBTZXRDbG9zZU9uRGVsZXRlKHRy
dWUpIHRvIGNoYW5nZSB0aGF0LiAgV0FSTklORzoKLSAgLy8gVGhpcyBsZWF2ZXMgbm8gd2F5IGZv
ciB0aGUgY2FsbGVyIHRvIGRldGVjdCBpZiBjbG9zZSgpIGZhaWxzLiAgSWYKLSAgLy8gZGV0ZWN0
aW5nIGNsb3NlKCkgZXJyb3JzIGlzIGltcG9ydGFudCB0byB5b3UsIHlvdSBzaG91bGQgYXJyYW5n
ZQotICAvLyB0byBjbG9zZSB0aGUgZGVzY3JpcHRvciB5b3Vyc2VsZi4KLSAgdm9pZCBTZXRDbG9z
ZU9uRGVsZXRlKGJvb2wgdmFsdWUpIHsgY29weWluZ19vdXRwdXRfLlNldENsb3NlT25EZWxldGUo
dmFsdWUpOyB9Ci0KLSAgLy8gSWYgYW4gSS9PIGVycm9yIGhhcyBvY2N1cnJlZCBvbiB0aGlzIGZp
bGUgZGVzY3JpcHRvciwgdGhpcyBpcyB0aGUKLSAgLy8gZXJybm8gZnJvbSB0aGF0IGVycm9yLiAg
T3RoZXJ3aXNlLCB0aGlzIGlzIHplcm8uICBPbmNlIGFuIGVycm9yCi0gIC8vIG9jY3VycywgdGhl
IHN0cmVhbSBpcyBicm9rZW4gYW5kIGFsbCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgd2lsbAotICAv
LyBmYWlsLgotICBpbnQgR2V0RXJybm8oKSB7IHJldHVybiBjb3B5aW5nX291dHB1dF8uR2V0RXJy
bm8oKTsgfQotCi0gIC8vIGltcGxlbWVudHMgWmVyb0NvcHlPdXRwdXRTdHJlYW0gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wgTmV4dCh2b2lkKiogZGF0YSwgaW50KiBz
aXplKTsKLSAgdm9pZCBCYWNrVXAoaW50IGNvdW50KTsKLSAgaW50NjQgQnl0ZUNvdW50KCkgY29u
c3Q7Ci0KLSBwcml2YXRlOgotICBjbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgQ29weWluZ0ZpbGVP
dXRwdXRTdHJlYW0gOiBwdWJsaWMgQ29weWluZ091dHB1dFN0cmVhbSB7Ci0gICBwdWJsaWM6Ci0g
ICAgQ29weWluZ0ZpbGVPdXRwdXRTdHJlYW0oaW50IGZpbGVfZGVzY3JpcHRvcik7Ci0gICAgfkNv
cHlpbmdGaWxlT3V0cHV0U3RyZWFtKCk7Ci0KLSAgICBib29sIENsb3NlKCk7Ci0gICAgdm9pZCBT
ZXRDbG9zZU9uRGVsZXRlKGJvb2wgdmFsdWUpIHsgY2xvc2Vfb25fZGVsZXRlXyA9IHZhbHVlOyB9
Ci0gICAgaW50IEdldEVycm5vKCkgeyByZXR1cm4gZXJybm9fOyB9Ci0KLSAgICAvLyBpbXBsZW1l
bnRzIENvcHlpbmdPdXRwdXRTdHJlYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgICBib29sIFdyaXRlKGNvbnN0IHZvaWQqIGJ1ZmZlciwgaW50IHNpemUpOwotCi0gICBwcml2
YXRlOgotICAgIC8vIFRoZSBmaWxlIGRlc2NyaXB0b3IuCi0gICAgY29uc3QgaW50IGZpbGVfOwot
ICAgIGJvb2wgY2xvc2Vfb25fZGVsZXRlXzsKLSAgICBib29sIGlzX2Nsb3NlZF87Ci0KLSAgICAv
LyBUaGUgZXJybm8gb2YgdGhlIEkvTyBlcnJvciwgaWYgb25lIGhhcyBvY2N1cnJlZC4gIE90aGVy
d2lzZSwgemVyby4KLSAgICBpbnQgZXJybm9fOwotCi0gICAgR09PR0xFX0RJU0FMTE9XX0VWSUxf
Q09OU1RSVUNUT1JTKENvcHlpbmdGaWxlT3V0cHV0U3RyZWFtKTsKLSAgfTsKLQotICBDb3B5aW5n
RmlsZU91dHB1dFN0cmVhbSBjb3B5aW5nX291dHB1dF87Ci0gIENvcHlpbmdPdXRwdXRTdHJlYW1B
ZGFwdG9yIGltcGxfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhGaWxl
T3V0cHV0U3RyZWFtKTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLy8gQSBaZXJvQ29weUlucHV0
U3RyZWFtIHdoaWNoIHJlYWRzIGZyb20gYSBDKysgaXN0cmVhbS4KLS8vCi0vLyBOb3RlIHRoYXQg
Zm9yIHJlYWRpbmcgZmlsZXMgKG9yIGFueXRoaW5nIHJlcHJlc2VudGVkIGJ5IGEgZmlsZSBkZXNj
cmlwdG9yKSwKLS8vIEZpbGVJbnB1dFN0cmVhbSBpcyBtb3JlIGVmZmljaWVudC4KLWNsYXNzIExJ
QlBST1RPQlVGX0VYUE9SVCBJc3RyZWFtSW5wdXRTdHJlYW0gOiBwdWJsaWMgWmVyb0NvcHlJbnB1
dFN0cmVhbSB7Ci0gcHVibGljOgotICAvLyBDcmVhdGVzIGEgc3RyZWFtIHRoYXQgcmVhZHMgZnJv
bSB0aGUgZ2l2ZW4gQysrIGlzdHJlYW0uCi0gIC8vIElmIGEgYmxvY2tfc2l6ZSBpcyBnaXZlbiwg
aXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdAotICAvLyBzaG91bGQgYmUgcmVh
ZCBhbmQgcmV0dXJuZWQgd2l0aCBlYWNoIGNhbGwgdG8gTmV4dCgpLiAgT3RoZXJ3aXNlLAotICAv
LyBhIHJlYXNvbmFibGUgZGVmYXVsdCBpcyB1c2VkLgotICBleHBsaWNpdCBJc3RyZWFtSW5wdXRT
dHJlYW0oaXN0cmVhbSogc3RyZWFtLCBpbnQgYmxvY2tfc2l6ZSA9IC0xKTsKLSAgfklzdHJlYW1J
bnB1dFN0cmVhbSgpOwotCi0gIC8vIGltcGxlbWVudHMgWmVyb0NvcHlJbnB1dFN0cmVhbSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wgTmV4dChjb25zdCB2b2lkKiog
ZGF0YSwgaW50KiBzaXplKTsKLSAgdm9pZCBCYWNrVXAoaW50IGNvdW50KTsKLSAgYm9vbCBTa2lw
KGludCBjb3VudCk7Ci0gIGludDY0IEJ5dGVDb3VudCgpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAg
Y2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIENvcHlpbmdJc3RyZWFtSW5wdXRTdHJlYW0gOiBwdWJs
aWMgQ29weWluZ0lucHV0U3RyZWFtIHsKLSAgIHB1YmxpYzoKLSAgICBDb3B5aW5nSXN0cmVhbUlu
cHV0U3RyZWFtKGlzdHJlYW0qIGlucHV0KTsKLSAgICB+Q29weWluZ0lzdHJlYW1JbnB1dFN0cmVh
bSgpOwotCi0gICAgLy8gaW1wbGVtZW50cyBDb3B5aW5nSW5wdXRTdHJlYW0gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgaW50IFJlYWQodm9pZCogYnVmZmVyLCBpbnQgc2l6
ZSk7Ci0gICAgLy8gKFdlIHVzZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBTa2lwKCku
KQotCi0gICBwcml2YXRlOgotICAgIC8vIFRoZSBzdHJlYW0uCi0gICAgaXN0cmVhbSogaW5wdXRf
OwotCi0gICAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKENvcHlpbmdJc3RyZWFt
SW5wdXRTdHJlYW0pOwotICB9OwotCi0gIENvcHlpbmdJc3RyZWFtSW5wdXRTdHJlYW0gY29weWlu
Z19pbnB1dF87Ci0gIENvcHlpbmdJbnB1dFN0cmVhbUFkYXB0b3IgaW1wbF87Ci0KLSAgR09PR0xF
X0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKElzdHJlYW1JbnB1dFN0cmVhbSk7Ci19OwotCi0v
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0KLS8vIEEgWmVyb0NvcHlPdXRwdXRTdHJlYW0gd2hpY2ggd3JpdGVzIHRv
IGEgQysrIG9zdHJlYW0uCi0vLwotLy8gTm90ZSB0aGF0IGZvciB3cml0aW5nIGZpbGVzIChvciBh
bnl0aGluZyByZXByZXNlbnRlZCBieSBhIGZpbGUgZGVzY3JpcHRvciksCi0vLyBGaWxlT3V0cHV0
U3RyZWFtIGlzIG1vcmUgZWZmaWNpZW50LgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE9zdHJl
YW1PdXRwdXRTdHJlYW0gOiBwdWJsaWMgWmVyb0NvcHlPdXRwdXRTdHJlYW0gewotIHB1YmxpYzoK
LSAgLy8gQ3JlYXRlcyBhIHN0cmVhbSB0aGF0IHdyaXRlcyB0byB0aGUgZ2l2ZW4gQysrIG9zdHJl
YW0uCi0gIC8vIElmIGEgYmxvY2tfc2l6ZSBpcyBnaXZlbiwgaXQgc3BlY2lmaWVzIHRoZSBzaXpl
IG9mIHRoZSBidWZmZXJzCi0gIC8vIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkIGJ5IE5leHQoKS4g
IE90aGVyd2lzZSwgYSByZWFzb25hYmxlIGRlZmF1bHQKLSAgLy8gaXMgdXNlZC4KLSAgZXhwbGlj
aXQgT3N0cmVhbU91dHB1dFN0cmVhbShvc3RyZWFtKiBzdHJlYW0sIGludCBibG9ja19zaXplID0g
LTEpOwotICB+T3N0cmVhbU91dHB1dFN0cmVhbSgpOwotCi0gIC8vIGltcGxlbWVudHMgWmVyb0Nv
cHlPdXRwdXRTdHJlYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wg
TmV4dCh2b2lkKiogZGF0YSwgaW50KiBzaXplKTsKLSAgdm9pZCBCYWNrVXAoaW50IGNvdW50KTsK
LSAgaW50NjQgQnl0ZUNvdW50KCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBjbGFzcyBMSUJQUk9U
T0JVRl9FWFBPUlQgQ29weWluZ09zdHJlYW1PdXRwdXRTdHJlYW0gOiBwdWJsaWMgQ29weWluZ091
dHB1dFN0cmVhbSB7Ci0gICBwdWJsaWM6Ci0gICAgQ29weWluZ09zdHJlYW1PdXRwdXRTdHJlYW0o
b3N0cmVhbSogb3V0cHV0KTsKLSAgICB+Q29weWluZ09zdHJlYW1PdXRwdXRTdHJlYW0oKTsKLQot
ICAgIC8vIGltcGxlbWVudHMgQ29weWluZ091dHB1dFN0cmVhbSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgIGJvb2wgV3JpdGUoY29uc3Qgdm9pZCogYnVmZmVyLCBpbnQgc2l6
ZSk7Ci0KLSAgIHByaXZhdGU6Ci0gICAgLy8gVGhlIHN0cmVhbS4KLSAgICBvc3RyZWFtKiBvdXRw
dXRfOwotCi0gICAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKENvcHlpbmdPc3Ry
ZWFtT3V0cHV0U3RyZWFtKTsKLSAgfTsKLQotICBDb3B5aW5nT3N0cmVhbU91dHB1dFN0cmVhbSBj
b3B5aW5nX291dHB1dF87Ci0gIENvcHlpbmdPdXRwdXRTdHJlYW1BZGFwdG9yIGltcGxfOwotCi0g
IEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhPc3RyZWFtT3V0cHV0U3RyZWFtKTsK
LX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotLy8gQSBaZXJvQ29weUlucHV0U3RyZWFtIHdoaWNoIHJl
YWRzIGZyb20gc2V2ZXJhbCBvdGhlciBzdHJlYW1zIGluIHNlcXVlbmNlLgotLy8gQ29uY2F0ZW5h
dGluZ0lucHV0U3RyZWFtIGlzIHVuYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVuZC1vZi1z
dHJlYW0KLS8vIGFuZCByZWFkIGVycm9ycyBpbiB0aGUgdW5kZXJseWluZyBzdHJlYW1zLCBzbyBp
dCBhc3N1bWVzIGFueSBlcnJvcnMgbWVhbgotLy8gZW5kLW9mLXN0cmVhbS4gIFNvLCBpZiB0aGUg
dW5kZXJseWluZyBzdHJlYW1zIGZhaWwgZm9yIGFueSBvdGhlciByZWFzb24sCi0vLyBDb25jYXRl
bmF0aW5nSW5wdXRTdHJlYW0gbWF5IGRvIG9kZCB0aGluZ3MuICBJdCBpcyBzdWdnZXN0ZWQgdGhh
dCB5b3UgZG8KLS8vIG5vdCB1c2UgQ29uY2F0ZW5hdGluZ0lucHV0U3RyZWFtIG9uIHN0cmVhbXMg
dGhhdCBtaWdodCBwcm9kdWNlIHJlYWQgZXJyb3JzCi0vLyBvdGhlciB0aGFuIGVuZC1vZi1zdHJl
YW0uCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgQ29uY2F0ZW5hdGluZ0lucHV0U3RyZWFtIDog
cHVibGljIFplcm9Db3B5SW5wdXRTdHJlYW0gewotIHB1YmxpYzoKLSAgLy8gQWxsIHN0cmVhbXMg
cGFzc2VkIGluIGFzIHdlbGwgYXMgdGhlIGFycmF5IGl0c2VsZiBtdXN0IHJlbWFpbiB2YWxpZAot
ICAvLyB1bnRpbCB0aGUgQ29uY2F0ZW5hdGluZ0lucHV0U3RyZWFtIGlzIGRlc3Ryb3llZC4KLSAg
Q29uY2F0ZW5hdGluZ0lucHV0U3RyZWFtKFplcm9Db3B5SW5wdXRTdHJlYW0qIGNvbnN0IHN0cmVh
bXNbXSwgaW50IGNvdW50KTsKLSAgfkNvbmNhdGVuYXRpbmdJbnB1dFN0cmVhbSgpOwotCi0gIC8v
IGltcGxlbWVudHMgWmVyb0NvcHlJbnB1dFN0cmVhbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gIGJvb2wgTmV4dChjb25zdCB2b2lkKiogZGF0YSwgaW50KiBzaXplKTsKLSAg
dm9pZCBCYWNrVXAoaW50IGNvdW50KTsKLSAgYm9vbCBTa2lwKGludCBjb3VudCk7Ci0gIGludDY0
IEJ5dGVDb3VudCgpIGNvbnN0OwotCi0KLSBwcml2YXRlOgotICAvLyBBcyBzdHJlYW1zIGFyZSBy
ZXRpcmVkLCBzdHJlYW1zXyBpcyBpbmNyZW1lbnRlZCBhbmQgY291bnRfIGlzCi0gIC8vIGRlY3Jl
bWVudGVkLgotICBaZXJvQ29weUlucHV0U3RyZWFtKiBjb25zdCogc3RyZWFtc187Ci0gIGludCBz
dHJlYW1fY291bnRfOwotICBpbnQ2NCBieXRlc19yZXRpcmVkXzsgIC8vIEJ5dGVzIHJlYWQgZnJv
bSBwcmV2aW91cyBzdHJlYW1zLgotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9S
UyhDb25jYXRlbmF0aW5nSW5wdXRTdHJlYW0pOwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vLyBB
IFplcm9Db3B5SW5wdXRTdHJlYW0gd2hpY2ggd3JhcHMgc29tZSBvdGhlciBzdHJlYW0gYW5kIGxp
bWl0cyBpdCB0bwotLy8gYSBwYXJ0aWN1bGFyIGJ5dGUgY291bnQuCi1jbGFzcyBMSUJQUk9UT0JV
Rl9FWFBPUlQgTGltaXRpbmdJbnB1dFN0cmVhbSA6IHB1YmxpYyBaZXJvQ29weUlucHV0U3RyZWFt
IHsKLSBwdWJsaWM6Ci0gIExpbWl0aW5nSW5wdXRTdHJlYW0oWmVyb0NvcHlJbnB1dFN0cmVhbSog
aW5wdXQsIGludDY0IGxpbWl0KTsKLSAgfkxpbWl0aW5nSW5wdXRTdHJlYW0oKTsKLQotICAvLyBp
bXBsZW1lbnRzIFplcm9Db3B5SW5wdXRTdHJlYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICBib29sIE5leHQoY29uc3Qgdm9pZCoqIGRhdGEsIGludCogc2l6ZSk7Ci0gIHZv
aWQgQmFja1VwKGludCBjb3VudCk7Ci0gIGJvb2wgU2tpcChpbnQgY291bnQpOwotICBpbnQ2NCBC
eXRlQ291bnQoKSBjb25zdDsKLQotCi0gcHJpdmF0ZToKLSAgWmVyb0NvcHlJbnB1dFN0cmVhbSog
aW5wdXRfOwotICBpbnQ2NCBsaW1pdF87ICAvLyBEZWNyZWFzZXMgYXMgd2UgZ28sIGJlY29tZXMg
bmVnYXRpdmUgaWYgd2Ugb3ZlcnNob290LgotICBpbnQ2NCBwcmlvcl9ieXRlc19yZWFkXzsgIC8v
IEJ5dGVzIHJlYWQgb24gdW5kZXJseWluZyBzdHJlYW0gYXQgY29uc3RydWN0aW9uCi0KLSAgR09P
R0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKExpbWl0aW5nSW5wdXRTdHJlYW0pOwotfTsK
LQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotCi19ICAvLyBuYW1lc3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFjZSBw
cm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9U
T0JVRl9JT19aRVJPX0NPUFlfU1RSRUFNX0lNUExfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsX2xpdGUuY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsX2xpdGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGU2Y2E4OGMyMWIxMzVlMDYzMDRjMmM0MmIyZjBlNjQ5YzVlOGRiODMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbF9saXRlLmNjCisrKyAvZGV2L251bGwKQEAg
LTEsNDM4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBB
dXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3Jp
Z2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEpl
ZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJv
X2NvcHlfc3RyZWFtX2ltcGxfbGl0ZS5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1
ZGUgPGxpbWl0cz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jYXN0cy5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdGxfdXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1
ZiB7Ci1uYW1lc3BhY2UgaW8gewotCi1uYW1lc3BhY2UgewotCi0vLyBEZWZhdWx0IGJsb2NrIHNp
emUgZm9yIENvcHlpbmd7SW4sT3V0fXB1dFN0cmVhbUFkYXB0b3IuCi1zdGF0aWMgY29uc3QgaW50
IGtEZWZhdWx0QmxvY2tTaXplID0gODE5MjsKLQotfSAgLy8gbmFtZXNwYWNlCi0KLS8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLQotQXJyYXlJbnB1dFN0cmVhbTo6QXJyYXlJbnB1dFN0cmVhbShjb25zdCB2b2lkKiBk
YXRhLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJs
b2NrX3NpemUpCi0gIDogZGF0YV8ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OCo+KGRhdGEp
KSwKLSAgICBzaXplXyhzaXplKSwKLSAgICBibG9ja19zaXplXyhibG9ja19zaXplID4gMCA/IGJs
b2NrX3NpemUgOiBzaXplKSwKLSAgICBwb3NpdGlvbl8oMCksCi0gICAgbGFzdF9yZXR1cm5lZF9z
aXplXygwKSB7Ci19Ci0KLUFycmF5SW5wdXRTdHJlYW06On5BcnJheUlucHV0U3RyZWFtKCkgewot
fQotCi1ib29sIEFycmF5SW5wdXRTdHJlYW06Ok5leHQoY29uc3Qgdm9pZCoqIGRhdGEsIGludCog
c2l6ZSkgewotICBpZiAocG9zaXRpb25fIDwgc2l6ZV8pIHsKLSAgICBsYXN0X3JldHVybmVkX3Np
emVfID0gc3RkOjptaW4oYmxvY2tfc2l6ZV8sIHNpemVfIC0gcG9zaXRpb25fKTsKLSAgICAqZGF0
YSA9IGRhdGFfICsgcG9zaXRpb25fOwotICAgICpzaXplID0gbGFzdF9yZXR1cm5lZF9zaXplXzsK
LSAgICBwb3NpdGlvbl8gKz0gbGFzdF9yZXR1cm5lZF9zaXplXzsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfSBlbHNlIHsKLSAgICAvLyBXZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAgICBs
YXN0X3JldHVybmVkX3NpemVfID0gMDsgICAvLyBEb24ndCBsZXQgY2FsbGVyIGJhY2sgdXAuCi0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLXZvaWQgQXJyYXlJbnB1dFN0cmVhbTo6QmFja1Vw
KGludCBjb3VudCkgewotICBHT09HTEVfQ0hFQ0tfR1QobGFzdF9yZXR1cm5lZF9zaXplXywgMCkK
LSAgICAgIDw8ICJCYWNrVXAoKSBjYW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVs
IE5leHQoKS4iOwotICBHT09HTEVfQ0hFQ0tfTEUoY291bnQsIGxhc3RfcmV0dXJuZWRfc2l6ZV8p
OwotICBHT09HTEVfQ0hFQ0tfR0UoY291bnQsIDApOwotICBwb3NpdGlvbl8gLT0gY291bnQ7Ci0g
IGxhc3RfcmV0dXJuZWRfc2l6ZV8gPSAwOyAgLy8gRG9uJ3QgbGV0IGNhbGxlciBiYWNrIHVwIGZ1
cnRoZXIuCi19Ci0KLWJvb2wgQXJyYXlJbnB1dFN0cmVhbTo6U2tpcChpbnQgY291bnQpIHsKLSAg
R09PR0xFX0NIRUNLX0dFKGNvdW50LCAwKTsKLSAgbGFzdF9yZXR1cm5lZF9zaXplXyA9IDA7ICAg
Ly8gRG9uJ3QgbGV0IGNhbGxlciBiYWNrIHVwLgotICBpZiAoY291bnQgPiBzaXplXyAtIHBvc2l0
aW9uXykgewotICAgIHBvc2l0aW9uXyA9IHNpemVfOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBl
bHNlIHsKLSAgICBwb3NpdGlvbl8gKz0gY291bnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0K
LQotaW50NjQgQXJyYXlJbnB1dFN0cmVhbTo6Qnl0ZUNvdW50KCkgY29uc3QgewotICByZXR1cm4g
cG9zaXRpb25fOwotfQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQXJyYXlPdXRwdXRTdHJlYW06OkFy
cmF5T3V0cHV0U3RyZWFtKHZvaWQqIGRhdGEsIGludCBzaXplLCBpbnQgYmxvY2tfc2l6ZSkKLSAg
OiBkYXRhXyhyZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oZGF0YSkpLAotICAgIHNpemVfKHNpemUp
LAotICAgIGJsb2NrX3NpemVfKGJsb2NrX3NpemUgPiAwID8gYmxvY2tfc2l6ZSA6IHNpemUpLAot
ICAgIHBvc2l0aW9uXygwKSwKLSAgICBsYXN0X3JldHVybmVkX3NpemVfKDApIHsKLX0KLQotQXJy
YXlPdXRwdXRTdHJlYW06On5BcnJheU91dHB1dFN0cmVhbSgpIHsKLX0KLQotYm9vbCBBcnJheU91
dHB1dFN0cmVhbTo6TmV4dCh2b2lkKiogZGF0YSwgaW50KiBzaXplKSB7Ci0gIGlmIChwb3NpdGlv
bl8gPCBzaXplXykgewotICAgIGxhc3RfcmV0dXJuZWRfc2l6ZV8gPSBzdGQ6Om1pbihibG9ja19z
aXplXywgc2l6ZV8gLSBwb3NpdGlvbl8pOwotICAgICpkYXRhID0gZGF0YV8gKyBwb3NpdGlvbl87
Ci0gICAgKnNpemUgPSBsYXN0X3JldHVybmVkX3NpemVfOwotICAgIHBvc2l0aW9uXyArPSBsYXN0
X3JldHVybmVkX3NpemVfOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIC8vIFdl
J3JlIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGxhc3RfcmV0dXJuZWRfc2l6ZV8gPSAw
OyAgIC8vIERvbid0IGxldCBjYWxsZXIgYmFjayB1cC4KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LX0KLQotdm9pZCBBcnJheU91dHB1dFN0cmVhbTo6QmFja1VwKGludCBjb3VudCkgewotICBHT09H
TEVfQ0hFQ0tfR1QobGFzdF9yZXR1cm5lZF9zaXplXywgMCkKLSAgICAgIDw8ICJCYWNrVXAoKSBj
YW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIE5leHQoKS4iOwotICBHT09HTEVf
Q0hFQ0tfTEUoY291bnQsIGxhc3RfcmV0dXJuZWRfc2l6ZV8pOwotICBHT09HTEVfQ0hFQ0tfR0Uo
Y291bnQsIDApOwotICBwb3NpdGlvbl8gLT0gY291bnQ7Ci0gIGxhc3RfcmV0dXJuZWRfc2l6ZV8g
PSAwOyAgLy8gRG9uJ3QgbGV0IGNhbGxlciBiYWNrIHVwIGZ1cnRoZXIuCi19Ci0KLWludDY0IEFy
cmF5T3V0cHV0U3RyZWFtOjpCeXRlQ291bnQoKSBjb25zdCB7Ci0gIHJldHVybiBwb3NpdGlvbl87
Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotU3RyaW5nT3V0cHV0U3RyZWFtOjpTdHJpbmdPdXRwdXRT
dHJlYW0oc3RyaW5nKiB0YXJnZXQpCi0gIDogdGFyZ2V0Xyh0YXJnZXQpIHsKLX0KLQotU3RyaW5n
T3V0cHV0U3RyZWFtOjp+U3RyaW5nT3V0cHV0U3RyZWFtKCkgewotfQotCi1ib29sIFN0cmluZ091
dHB1dFN0cmVhbTo6TmV4dCh2b2lkKiogZGF0YSwgaW50KiBzaXplKSB7Ci0gIEdPT0dMRV9DSEVD
Syh0YXJnZXRfICE9IE5VTEwpOwotICBpbnQgb2xkX3NpemUgPSB0YXJnZXRfLT5zaXplKCk7Ci0K
LSAgLy8gR3JvdyB0aGUgc3RyaW5nLgotICBpZiAob2xkX3NpemUgPCB0YXJnZXRfLT5jYXBhY2l0
eSgpKSB7Ci0gICAgLy8gUmVzaXplIHRoZSBzdHJpbmcgdG8gbWF0Y2ggaXRzIGNhcGFjaXR5LCBz
aW5jZSB3ZSBjYW4gZ2V0IGF3YXkKLSAgICAvLyB3aXRob3V0IGEgbWVtb3J5IGFsbG9jYXRpb24g
dGhpcyB3YXkuCi0gICAgU1RMU3RyaW5nUmVzaXplVW5pbml0aWFsaXplZCh0YXJnZXRfLCB0YXJn
ZXRfLT5jYXBhY2l0eSgpKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBTaXplIGhhcyByZWFjaGVkIGNh
cGFjaXR5LCB0cnkgdG8gZG91YmxlIHRoZSBzaXplLgotICAgIGlmIChvbGRfc2l6ZSA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyAyKSB7Ci0gICAgICAvLyBDYW4gbm90IGRvdWJs
ZSB0aGUgc2l6ZSBvdGhlcndpc2UgaXQgaXMgZ29pbmcgdG8gY2F1c2UgaW50ZWdlcgotICAgICAg
Ly8gb3ZlcmZsb3cgaW4gdGhlIGV4cHJlc3Npb24gYmVsb3c6IG9sZF9zaXplICogMiAiOwotICAg
ICAgR09PR0xFX0xPRyhFUlJPUikgPDwgIkNhbm5vdCBhbGxvY2F0ZSBidWZmZXIgbGFyZ2VyIHRo
YW4ga2ludDMybWF4IGZvciAiCi0gICAgICAgICAgICAgICAgIDw8ICJTdHJpbmdPdXRwdXRTdHJl
YW0uIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gRG91YmxlIHRoZSBzaXpl
LCBhbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgc2l6ZSBpcyBhdCBsZWFzdAotICAgIC8vIGtN
aW5pbXVtU2l6ZS4KLSAgICBTVExTdHJpbmdSZXNpemVVbmluaXRpYWxpemVkKAotICAgICAgICB0
YXJnZXRfLAotICAgICAgICBzdGQ6Om1heChvbGRfc2l6ZSAqIDIsCi0gICAgICAgICAgICAgICAg
IGtNaW5pbXVtU2l6ZSArIDApKTsgIC8vICIrIDAiIHdvcmtzIGFyb3VuZCBHQ0M0IHdlaXJkbmVz
cy4KLSAgfQotCi0gICpkYXRhID0gbXV0YWJsZV9zdHJpbmdfZGF0YSh0YXJnZXRfKSArIG9sZF9z
aXplOwotICAqc2l6ZSA9IHRhcmdldF8tPnNpemUoKSAtIG9sZF9zaXplOwotICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBTdHJpbmdPdXRwdXRTdHJlYW06OkJhY2tVcChpbnQgY291bnQpIHsKLSAg
R09PR0xFX0NIRUNLX0dFKGNvdW50LCAwKTsKLSAgR09PR0xFX0NIRUNLKHRhcmdldF8gIT0gTlVM
TCk7Ci0gIEdPT0dMRV9DSEVDS19MRShjb3VudCwgdGFyZ2V0Xy0+c2l6ZSgpKTsKLSAgdGFyZ2V0
Xy0+cmVzaXplKHRhcmdldF8tPnNpemUoKSAtIGNvdW50KTsKLX0KLQotaW50NjQgU3RyaW5nT3V0
cHV0U3RyZWFtOjpCeXRlQ291bnQoKSBjb25zdCB7Ci0gIEdPT0dMRV9DSEVDSyh0YXJnZXRfICE9
IE5VTEwpOwotICByZXR1cm4gdGFyZ2V0Xy0+c2l6ZSgpOwotfQotCi12b2lkIFN0cmluZ091dHB1
dFN0cmVhbTo6U2V0U3RyaW5nKHN0cmluZyogdGFyZ2V0KSB7Ci0gIHRhcmdldF8gPSB0YXJnZXQ7
Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotTGF6eVN0cmluZ091dHB1dFN0cmVhbTo6TGF6eVN0cmlu
Z091dHB1dFN0cmVhbSgKLSAgICBSZXN1bHRDYWxsYmFjazxzdHJpbmcqPiogY2FsbGJhY2spCi0g
ICAgOiBTdHJpbmdPdXRwdXRTdHJlYW0oTlVMTCksCi0gICAgICBjYWxsYmFja18oR09PR0xFX0NI
RUNLX05PVE5VTEwoY2FsbGJhY2spKSwKLSAgICAgIHN0cmluZ19pc19zZXRfKGZhbHNlKSB7Ci19
Ci0KLUxhenlTdHJpbmdPdXRwdXRTdHJlYW06On5MYXp5U3RyaW5nT3V0cHV0U3RyZWFtKCkgewot
fQotCi1ib29sIExhenlTdHJpbmdPdXRwdXRTdHJlYW06Ok5leHQodm9pZCoqIGRhdGEsIGludCog
c2l6ZSkgewotICBpZiAoIXN0cmluZ19pc19zZXRfKSB7Ci0gICAgU2V0U3RyaW5nKGNhbGxiYWNr
Xy0+UnVuKCkpOwotICAgIHN0cmluZ19pc19zZXRfID0gdHJ1ZTsKLSAgfQotICByZXR1cm4gU3Ry
aW5nT3V0cHV0U3RyZWFtOjpOZXh0KGRhdGEsIHNpemUpOwotfQotCi1pbnQ2NCBMYXp5U3RyaW5n
T3V0cHV0U3RyZWFtOjpCeXRlQ291bnQoKSBjb25zdCB7Ci0gIHJldHVybiBzdHJpbmdfaXNfc2V0
XyA/IFN0cmluZ091dHB1dFN0cmVhbTo6Qnl0ZUNvdW50KCkgOiAwOwotfQotCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0KLUNvcHlpbmdJbnB1dFN0cmVhbTo6fkNvcHlpbmdJbnB1dFN0cmVhbSgpIHt9Ci0KLWlu
dCBDb3B5aW5nSW5wdXRTdHJlYW06OlNraXAoaW50IGNvdW50KSB7Ci0gIGNoYXIganVua1s0MDk2
XTsKLSAgaW50IHNraXBwZWQgPSAwOwotICB3aGlsZSAoc2tpcHBlZCA8IGNvdW50KSB7Ci0gICAg
aW50IGJ5dGVzID0KLSAgICAgICAgUmVhZChqdW5rLCBzdGQ6Om1pbihjb3VudCAtIHNraXBwZWQs
IGltcGxpY2l0X2Nhc3Q8aW50PihzaXplb2YoanVuaykpKSk7Ci0gICAgaWYgKGJ5dGVzIDw9IDAp
IHsKLSAgICAgIC8vIEVPRiBvciByZWFkIGVycm9yLgotICAgICAgcmV0dXJuIHNraXBwZWQ7Ci0g
ICAgfQotICAgIHNraXBwZWQgKz0gYnl0ZXM7Ci0gIH0KLSAgcmV0dXJuIHNraXBwZWQ7Ci19Ci0K
LUNvcHlpbmdJbnB1dFN0cmVhbUFkYXB0b3I6OkNvcHlpbmdJbnB1dFN0cmVhbUFkYXB0b3IoCi0g
ICAgQ29weWluZ0lucHV0U3RyZWFtKiBjb3B5aW5nX3N0cmVhbSwgaW50IGJsb2NrX3NpemUpCi0g
IDogY29weWluZ19zdHJlYW1fKGNvcHlpbmdfc3RyZWFtKSwKLSAgICBvd25zX2NvcHlpbmdfc3Ry
ZWFtXyhmYWxzZSksCi0gICAgZmFpbGVkXyhmYWxzZSksCi0gICAgcG9zaXRpb25fKDApLAotICAg
IGJ1ZmZlcl9zaXplXyhibG9ja19zaXplID4gMCA/IGJsb2NrX3NpemUgOiBrRGVmYXVsdEJsb2Nr
U2l6ZSksCi0gICAgYnVmZmVyX3VzZWRfKDApLAotICAgIGJhY2t1cF9ieXRlc18oMCkgewotfQot
Ci1Db3B5aW5nSW5wdXRTdHJlYW1BZGFwdG9yOjp+Q29weWluZ0lucHV0U3RyZWFtQWRhcHRvcigp
IHsKLSAgaWYgKG93bnNfY29weWluZ19zdHJlYW1fKSB7Ci0gICAgZGVsZXRlIGNvcHlpbmdfc3Ry
ZWFtXzsKLSAgfQotfQotCi1ib29sIENvcHlpbmdJbnB1dFN0cmVhbUFkYXB0b3I6Ok5leHQoY29u
c3Qgdm9pZCoqIGRhdGEsIGludCogc2l6ZSkgewotICBpZiAoZmFpbGVkXykgewotICAgIC8vIEFs
cmVhZHkgZmFpbGVkIG9uIGEgcHJldmlvdXMgcmVhZC4KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LQotICBBbGxvY2F0ZUJ1ZmZlcklmTmVlZGVkKCk7Ci0KLSAgaWYgKGJhY2t1cF9ieXRlc18gPiAw
KSB7Ci0gICAgLy8gV2UgaGF2ZSBkYXRhIGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgQmFja1Vw
KCksIHNvIGp1c3QgcmV0dXJuIHRoYXQuCi0gICAgKmRhdGEgPSBidWZmZXJfLmdldCgpICsgYnVm
ZmVyX3VzZWRfIC0gYmFja3VwX2J5dGVzXzsKLSAgICAqc2l6ZSA9IGJhY2t1cF9ieXRlc187Ci0g
ICAgYmFja3VwX2J5dGVzXyA9IDA7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBSZWFk
IG5ldyBkYXRhIGludG8gdGhlIGJ1ZmZlci4KLSAgYnVmZmVyX3VzZWRfID0gY29weWluZ19zdHJl
YW1fLT5SZWFkKGJ1ZmZlcl8uZ2V0KCksIGJ1ZmZlcl9zaXplXyk7Ci0gIGlmIChidWZmZXJfdXNl
ZF8gPD0gMCkgewotICAgIC8vIEVPRiBvciByZWFkIGVycm9yLiAgV2UgZG9uJ3QgbmVlZCB0aGUg
YnVmZmVyIGFueW1vcmUuCi0gICAgaWYgKGJ1ZmZlcl91c2VkXyA8IDApIHsKLSAgICAgIC8vIFJl
YWQgZXJyb3IgKG5vdCBFT0YpLgotICAgICAgZmFpbGVkXyA9IHRydWU7Ci0gICAgfQotICAgIEZy
ZWVCdWZmZXIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcG9zaXRpb25fICs9IGJ1ZmZl
cl91c2VkXzsKLQotICAqc2l6ZSA9IGJ1ZmZlcl91c2VkXzsKLSAgKmRhdGEgPSBidWZmZXJfLmdl
dCgpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb3B5aW5nSW5wdXRTdHJlYW1BZGFwdG9y
OjpCYWNrVXAoaW50IGNvdW50KSB7Ci0gIEdPT0dMRV9DSEVDSyhiYWNrdXBfYnl0ZXNfID09IDAg
JiYgYnVmZmVyXy5nZXQoKSAhPSBOVUxMKQotICAgIDw8ICIgQmFja1VwKCkgY2FuIG9ubHkgYmUg
Y2FsbGVkIGFmdGVyIE5leHQoKS4iOwotICBHT09HTEVfQ0hFQ0tfTEUoY291bnQsIGJ1ZmZlcl91
c2VkXykKLSAgICA8PCAiIENhbid0IGJhY2sgdXAgb3ZlciBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBy
ZXR1cm5lZCBieSB0aGUgbGFzdCBjYWxsIgotICAgICAgICIgdG8gTmV4dCgpLiI7Ci0gIEdPT0dM
RV9DSEVDS19HRShjb3VudCwgMCkKLSAgICA8PCAiIFBhcmFtZXRlciB0byBCYWNrVXAoKSBjYW4n
dCBiZSBuZWdhdGl2ZS4iOwotCi0gIGJhY2t1cF9ieXRlc18gPSBjb3VudDsKLX0KLQotYm9vbCBD
b3B5aW5nSW5wdXRTdHJlYW1BZGFwdG9yOjpTa2lwKGludCBjb3VudCkgewotICBHT09HTEVfQ0hF
Q0tfR0UoY291bnQsIDApOwotCi0gIGlmIChmYWlsZWRfKSB7Ci0gICAgLy8gQWxyZWFkeSBmYWls
ZWQgb24gYSBwcmV2aW91cyByZWFkLgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIEZp
cnN0IHNraXAgYW55IGJ5dGVzIGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgQmFja1VwKCkuCi0g
IGlmIChiYWNrdXBfYnl0ZXNfID49IGNvdW50KSB7Ci0gICAgLy8gV2UgaGF2ZSBtb3JlIGRhdGEg
bGVmdCBvdmVyIHRoYW4gd2UncmUgdHJ5aW5nIHRvIHNraXAuICBKdXN0IGNob3AgaXQuCi0gICAg
YmFja3VwX2J5dGVzXyAtPSBjb3VudDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGNvdW50
IC09IGJhY2t1cF9ieXRlc187Ci0gIGJhY2t1cF9ieXRlc18gPSAwOwotCi0gIGludCBza2lwcGVk
ID0gY29weWluZ19zdHJlYW1fLT5Ta2lwKGNvdW50KTsKLSAgcG9zaXRpb25fICs9IHNraXBwZWQ7
Ci0gIHJldHVybiBza2lwcGVkID09IGNvdW50OwotfQotCi1pbnQ2NCBDb3B5aW5nSW5wdXRTdHJl
YW1BZGFwdG9yOjpCeXRlQ291bnQoKSBjb25zdCB7Ci0gIHJldHVybiBwb3NpdGlvbl8gLSBiYWNr
dXBfYnl0ZXNfOwotfQotCi12b2lkIENvcHlpbmdJbnB1dFN0cmVhbUFkYXB0b3I6OkFsbG9jYXRl
QnVmZmVySWZOZWVkZWQoKSB7Ci0gIGlmIChidWZmZXJfLmdldCgpID09IE5VTEwpIHsKLSAgICBi
dWZmZXJfLnJlc2V0KG5ldyB1aW50OFtidWZmZXJfc2l6ZV9dKTsKLSAgfQotfQotCi12b2lkIENv
cHlpbmdJbnB1dFN0cmVhbUFkYXB0b3I6OkZyZWVCdWZmZXIoKSB7Ci0gIEdPT0dMRV9DSEVDS19F
UShiYWNrdXBfYnl0ZXNfLCAwKTsKLSAgYnVmZmVyX3VzZWRfID0gMDsKLSAgYnVmZmVyXy5yZXNl
dCgpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUNvcHlpbmdPdXRwdXRTdHJlYW06On5Db3B5aW5n
T3V0cHV0U3RyZWFtKCkge30KLQotQ29weWluZ091dHB1dFN0cmVhbUFkYXB0b3I6OkNvcHlpbmdP
dXRwdXRTdHJlYW1BZGFwdG9yKAotICAgIENvcHlpbmdPdXRwdXRTdHJlYW0qIGNvcHlpbmdfc3Ry
ZWFtLCBpbnQgYmxvY2tfc2l6ZSkKLSAgOiBjb3B5aW5nX3N0cmVhbV8oY29weWluZ19zdHJlYW0p
LAotICAgIG93bnNfY29weWluZ19zdHJlYW1fKGZhbHNlKSwKLSAgICBmYWlsZWRfKGZhbHNlKSwK
LSAgICBwb3NpdGlvbl8oMCksCi0gICAgYnVmZmVyX3NpemVfKGJsb2NrX3NpemUgPiAwID8gYmxv
Y2tfc2l6ZSA6IGtEZWZhdWx0QmxvY2tTaXplKSwKLSAgICBidWZmZXJfdXNlZF8oMCkgewotfQot
Ci1Db3B5aW5nT3V0cHV0U3RyZWFtQWRhcHRvcjo6fkNvcHlpbmdPdXRwdXRTdHJlYW1BZGFwdG9y
KCkgewotICBXcml0ZUJ1ZmZlcigpOwotICBpZiAob3duc19jb3B5aW5nX3N0cmVhbV8pIHsKLSAg
ICBkZWxldGUgY29weWluZ19zdHJlYW1fOwotICB9Ci19Ci0KLWJvb2wgQ29weWluZ091dHB1dFN0
cmVhbUFkYXB0b3I6OkZsdXNoKCkgewotICByZXR1cm4gV3JpdGVCdWZmZXIoKTsKLX0KLQotYm9v
bCBDb3B5aW5nT3V0cHV0U3RyZWFtQWRhcHRvcjo6TmV4dCh2b2lkKiogZGF0YSwgaW50KiBzaXpl
KSB7Ci0gIGlmIChidWZmZXJfdXNlZF8gPT0gYnVmZmVyX3NpemVfKSB7Ci0gICAgaWYgKCFXcml0
ZUJ1ZmZlcigpKSByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBBbGxvY2F0ZUJ1ZmZlcklmTmVlZGVk
KCk7Ci0KLSAgKmRhdGEgPSBidWZmZXJfLmdldCgpICsgYnVmZmVyX3VzZWRfOwotICAqc2l6ZSA9
IGJ1ZmZlcl9zaXplXyAtIGJ1ZmZlcl91c2VkXzsKLSAgYnVmZmVyX3VzZWRfID0gYnVmZmVyX3Np
emVfOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb3B5aW5nT3V0cHV0U3RyZWFtQWRhcHRv
cjo6QmFja1VwKGludCBjb3VudCkgewotICBHT09HTEVfQ0hFQ0tfR0UoY291bnQsIDApOwotICBH
T09HTEVfQ0hFQ0tfRVEoYnVmZmVyX3VzZWRfLCBidWZmZXJfc2l6ZV8pCi0gICAgPDwgIiBCYWNr
VXAoKSBjYW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgTmV4dCgpLiI7Ci0gIEdPT0dMRV9DSEVDS19M
RShjb3VudCwgYnVmZmVyX3VzZWRfKQotICAgIDw8ICIgQ2FuJ3QgYmFjayB1cCBvdmVyIG1vcmUg
Ynl0ZXMgdGhhbiB3ZXJlIHJldHVybmVkIGJ5IHRoZSBsYXN0IGNhbGwiCi0gICAgICAgIiB0byBO
ZXh0KCkuIjsKLQotICBidWZmZXJfdXNlZF8gLT0gY291bnQ7Ci19Ci0KLWludDY0IENvcHlpbmdP
dXRwdXRTdHJlYW1BZGFwdG9yOjpCeXRlQ291bnQoKSBjb25zdCB7Ci0gIHJldHVybiBwb3NpdGlv
bl8gKyBidWZmZXJfdXNlZF87Ci19Ci0KLWJvb2wgQ29weWluZ091dHB1dFN0cmVhbUFkYXB0b3I6
OldyaXRlQnVmZmVyKCkgewotICBpZiAoZmFpbGVkXykgewotICAgIC8vIEFscmVhZHkgZmFpbGVk
IG9uIGEgcHJldmlvdXMgd3JpdGUuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKGJ1
ZmZlcl91c2VkXyA9PSAwKSByZXR1cm4gdHJ1ZTsKLQotICBpZiAoY29weWluZ19zdHJlYW1fLT5X
cml0ZShidWZmZXJfLmdldCgpLCBidWZmZXJfdXNlZF8pKSB7Ci0gICAgcG9zaXRpb25fICs9IGJ1
ZmZlcl91c2VkXzsKLSAgICBidWZmZXJfdXNlZF8gPSAwOwotICAgIHJldHVybiB0cnVlOwotICB9
IGVsc2UgewotICAgIGZhaWxlZF8gPSB0cnVlOwotICAgIEZyZWVCdWZmZXIoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLX0KLQotdm9pZCBDb3B5aW5nT3V0cHV0U3RyZWFtQWRhcHRvcjo6QWxs
b2NhdGVCdWZmZXJJZk5lZWRlZCgpIHsKLSAgaWYgKGJ1ZmZlcl8gPT0gTlVMTCkgewotICAgIGJ1
ZmZlcl8ucmVzZXQobmV3IHVpbnQ4W2J1ZmZlcl9zaXplX10pOwotICB9Ci19Ci0KLXZvaWQgQ29w
eWluZ091dHB1dFN0cmVhbUFkYXB0b3I6OkZyZWVCdWZmZXIoKSB7Ci0gIGJ1ZmZlcl91c2VkXyA9
IDA7Ci0gIGJ1ZmZlcl8ucmVzZXQoKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi19ICAvLyBuYW1l
c3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2ds
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1w
bF9saXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsX2xp
dGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4MWNjZmJmZDA4ZThjNDVjYjY1
MDRjNWFlMzlmZWZiMTY2OTM2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsX2xp
dGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxMSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZh
cmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0v
LyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gVGhpcyBm
aWxlIGNvbnRhaW5zIGNvbW1vbiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGludGVyZmFjZXMgZGVm
aW5lZCBpbgotLy8gemVyb19jb3B5X3N0cmVhbS5oIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiB0aGUg
ImxpdGUiIHByb3RvYnVmIGxpYnJhcnkuCi0vLyBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgY292ZXIg
SS9PIG9uIHJhdyBhcnJheXMgYW5kIHN0cmluZ3MsIGFzIHdlbGwgYXMKLS8vIGFkYXB0b3JzIHdo
aWNoIG1ha2UgaXQgZWFzeSB0byBpbXBsZW1lbnQgc3RyZWFtcyBiYXNlZCBvbiB0cmFkaXRpb25h
bAotLy8gc3RyZWFtcy4gIE9mIGNvdXJzZSwgbWFueSB1c2VycyB3aWxsIHByb2JhYmx5IHdhbnQg
dG8gd3JpdGUgdGhlaXIgb3duCi0vLyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgaW50ZXJmYWNl
cyBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBJL08KLS8vIGFic3RyYWN0aW9ucyB0aGV5IHBy
ZWZlciB0byB1c2UsIGJ1dCB0aGVzZSBzaG91bGQgY292ZXIgdGhlIG1vc3QgY29tbW9uCi0vLyBj
YXNlcy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfSU9fWkVST19DT1BZX1NUUkVBTV9JTVBM
X0xJVEVfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9JT19aRVJPX0NPUFlfU1RSRUFNX0lN
UExfTElURV9IX18KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNp
bmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8aW9zZndkPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2NhbGxiYWNrLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zY29wZWRfcHRyLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0bF91dGlsLmg+Ci0KLQotbmFtZXNwYWNlIGdvb2ds
ZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGlvIHsKLQotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi0vLyBBIFplcm9Db3B5SW5wdXRTdHJlYW0gYmFja2VkIGJ5IGFuIGluLW1lbW9yeSBhcnJh
eSBvZiBieXRlcy4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBBcnJheUlucHV0U3RyZWFtIDog
cHVibGljIFplcm9Db3B5SW5wdXRTdHJlYW0gewotIHB1YmxpYzoKLSAgLy8gQ3JlYXRlIGFuIElu
cHV0U3RyZWFtIHRoYXQgcmV0dXJucyB0aGUgYnl0ZXMgcG9pbnRlZCB0byBieSAiZGF0YSIuCi0g
IC8vICJkYXRhIiByZW1haW5zIHRoZSBwcm9wZXJ0eSBvZiB0aGUgY2FsbGVyIGJ1dCBtdXN0IHJl
bWFpbiB2YWxpZCB1bnRpbAotICAvLyB0aGUgc3RyZWFtIGlzIGRlc3Ryb3llZC4gIElmIGEgYmxv
Y2tfc2l6ZSBpcyBnaXZlbiwgY2FsbHMgdG8gTmV4dCgpCi0gIC8vIHdpbGwgcmV0dXJuIGRhdGEg
YmxvY2tzIG5vIGxhcmdlciB0aGFuIHRoZSBnaXZlbiBzaXplLiAgT3RoZXJ3aXNlLCB0aGUKLSAg
Ly8gZmlyc3QgY2FsbCB0byBOZXh0KCkgcmV0dXJucyB0aGUgZW50aXJlIGFycmF5LiAgYmxvY2tf
c2l6ZSBpcyBtYWlubHkKLSAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nOyBpbiBwcm9kdWN0aW9uIHlv
dSB3b3VsZCBwcm9iYWJseSBuZXZlciB3YW50IHRvIHNldAotICAvLyBpdC4KLSAgQXJyYXlJbnB1
dFN0cmVhbShjb25zdCB2b2lkKiBkYXRhLCBpbnQgc2l6ZSwgaW50IGJsb2NrX3NpemUgPSAtMSk7
Ci0gIH5BcnJheUlucHV0U3RyZWFtKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBaZXJvQ29weUlucHV0
U3RyZWFtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgYm9vbCBOZXh0KGNv
bnN0IHZvaWQqKiBkYXRhLCBpbnQqIHNpemUpOwotICB2b2lkIEJhY2tVcChpbnQgY291bnQpOwot
ICBib29sIFNraXAoaW50IGNvdW50KTsKLSAgaW50NjQgQnl0ZUNvdW50KCkgY29uc3Q7Ci0KLQot
IHByaXZhdGU6Ci0gIGNvbnN0IHVpbnQ4KiBjb25zdCBkYXRhXzsgIC8vIFRoZSBieXRlIGFycmF5
LgotICBjb25zdCBpbnQgc2l6ZV87ICAgICAgICAgICAvLyBUb3RhbCBzaXplIG9mIHRoZSBhcnJh
eS4KLSAgY29uc3QgaW50IGJsb2NrX3NpemVfOyAgICAgLy8gSG93IG1hbnkgYnl0ZXMgdG8gcmV0
dXJuIGF0IGEgdGltZS4KLQotICBpbnQgcG9zaXRpb25fOwotICBpbnQgbGFzdF9yZXR1cm5lZF9z
aXplXzsgICAvLyBIb3cgbWFueSBieXRlcyB3ZSByZXR1cm5lZCBsYXN0IHRpbWUgTmV4dCgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhcyBjYWxsZWQgKHVzZWQgZm9yIGVycm9y
IGNoZWNraW5nIG9ubHkpLgotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhB
cnJheUlucHV0U3RyZWFtKTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLy8gQSBaZXJvQ29weU91
dHB1dFN0cmVhbSBiYWNrZWQgYnkgYW4gaW4tbWVtb3J5IGFycmF5IG9mIGJ5dGVzLgotY2xhc3Mg
TElCUFJPVE9CVUZfRVhQT1JUIEFycmF5T3V0cHV0U3RyZWFtIDogcHVibGljIFplcm9Db3B5T3V0
cHV0U3RyZWFtIHsKLSBwdWJsaWM6Ci0gIC8vIENyZWF0ZSBhbiBPdXRwdXRTdHJlYW0gdGhhdCB3
cml0ZXMgdG8gdGhlIGJ5dGVzIHBvaW50ZWQgdG8gYnkgImRhdGEiLgotICAvLyAiZGF0YSIgcmVt
YWlucyB0aGUgcHJvcGVydHkgb2YgdGhlIGNhbGxlciBidXQgbXVzdCByZW1haW4gdmFsaWQgdW50
aWwKLSAgLy8gdGhlIHN0cmVhbSBpcyBkZXN0cm95ZWQuICBJZiBhIGJsb2NrX3NpemUgaXMgZ2l2
ZW4sIGNhbGxzIHRvIE5leHQoKQotICAvLyB3aWxsIHJldHVybiBkYXRhIGJsb2NrcyBubyBsYXJn
ZXIgdGhhbiB0aGUgZ2l2ZW4gc2l6ZS4gIE90aGVyd2lzZSwgdGhlCi0gIC8vIGZpcnN0IGNhbGwg
dG8gTmV4dCgpIHJldHVybnMgdGhlIGVudGlyZSBhcnJheS4gIGJsb2NrX3NpemUgaXMgbWFpbmx5
Ci0gIC8vIHVzZWZ1bCBmb3IgdGVzdGluZzsgaW4gcHJvZHVjdGlvbiB5b3Ugd291bGQgcHJvYmFi
bHkgbmV2ZXIgd2FudCB0byBzZXQKLSAgLy8gaXQuCi0gIEFycmF5T3V0cHV0U3RyZWFtKHZvaWQq
IGRhdGEsIGludCBzaXplLCBpbnQgYmxvY2tfc2l6ZSA9IC0xKTsKLSAgfkFycmF5T3V0cHV0U3Ry
ZWFtKCk7Ci0KLSAgLy8gaW1wbGVtZW50cyBaZXJvQ29weU91dHB1dFN0cmVhbSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgYm9vbCBOZXh0KHZvaWQqKiBkYXRhLCBpbnQqIHNp
emUpOwotICB2b2lkIEJhY2tVcChpbnQgY291bnQpOwotICBpbnQ2NCBCeXRlQ291bnQoKSBjb25z
dDsKLQotIHByaXZhdGU6Ci0gIHVpbnQ4KiBjb25zdCBkYXRhXzsgICAgICAgIC8vIFRoZSBieXRl
IGFycmF5LgotICBjb25zdCBpbnQgc2l6ZV87ICAgICAgICAgICAvLyBUb3RhbCBzaXplIG9mIHRo
ZSBhcnJheS4KLSAgY29uc3QgaW50IGJsb2NrX3NpemVfOyAgICAgLy8gSG93IG1hbnkgYnl0ZXMg
dG8gcmV0dXJuIGF0IGEgdGltZS4KLQotICBpbnQgcG9zaXRpb25fOwotICBpbnQgbGFzdF9yZXR1
cm5lZF9zaXplXzsgICAvLyBIb3cgbWFueSBieXRlcyB3ZSByZXR1cm5lZCBsYXN0IHRpbWUgTmV4
dCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhcyBjYWxsZWQgKHVzZWQgZm9y
IGVycm9yIGNoZWNraW5nIG9ubHkpLgotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVD
VE9SUyhBcnJheU91dHB1dFN0cmVhbSk7Ci19OwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS8vIEEgWmVy
b0NvcHlPdXRwdXRTdHJlYW0gd2hpY2ggYXBwZW5kcyBieXRlcyB0byBhIHN0cmluZy4KLWNsYXNz
IExJQlBST1RPQlVGX0VYUE9SVCBTdHJpbmdPdXRwdXRTdHJlYW0gOiBwdWJsaWMgWmVyb0NvcHlP
dXRwdXRTdHJlYW0gewotIHB1YmxpYzoKLSAgLy8gQ3JlYXRlIGEgU3RyaW5nT3V0cHV0U3RyZWFt
IHdoaWNoIGFwcGVuZHMgYnl0ZXMgdG8gdGhlIGdpdmVuIHN0cmluZy4KLSAgLy8gVGhlIHN0cmlu
ZyByZW1haW5zIHByb3BlcnR5IG9mIHRoZSBjYWxsZXIsIGJ1dCBpdCBpcyBtdXRhdGVkIGluIGFy
Yml0cmFyeQotICAvLyB3YXlzIGFuZCBNVVNUIE5PVCBiZSBhY2Nlc3NlZCBpbiBhbnkgd2F5IHVu
dGlsIHlvdSdyZSBkb25lIHdpdGggdGhlCi0gIC8vIHN0cmVhbS4gRWl0aGVyIGJlIHN1cmUgdGhl
cmUncyBubyBmdXJ0aGVyIHVzYWdlLCBvciAoc2FmZXN0KSBkZXN0cm95IHRoZQotICAvLyBzdHJl
YW0gYmVmb3JlIHVzaW5nIHRoZSBjb250ZW50cy4KLSAgLy8KLSAgLy8gSGludDogIElmIHlvdSBj
YWxsIHRhcmdldC0+cmVzZXJ2ZShuKSBiZWZvcmUgY3JlYXRpbmcgdGhlIHN0cmVhbSwKLSAgLy8g
ICB0aGUgZmlyc3QgY2FsbCB0byBOZXh0KCkgd2lsbCByZXR1cm4gYXQgbGVhc3QgbiBieXRlcyBv
ZiBidWZmZXIKLSAgLy8gICBzcGFjZS4KLSAgZXhwbGljaXQgU3RyaW5nT3V0cHV0U3RyZWFtKHN0
cmluZyogdGFyZ2V0KTsKLSAgflN0cmluZ091dHB1dFN0cmVhbSgpOwotCi0gIC8vIGltcGxlbWVu
dHMgWmVyb0NvcHlPdXRwdXRTdHJlYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gIGJvb2wgTmV4dCh2b2lkKiogZGF0YSwgaW50KiBzaXplKTsKLSAgdm9pZCBCYWNrVXAoaW50
IGNvdW50KTsKLSAgaW50NjQgQnl0ZUNvdW50KCkgY29uc3Q7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZv
aWQgU2V0U3RyaW5nKHN0cmluZyogdGFyZ2V0KTsKLQotIHByaXZhdGU6Ci0gIHN0YXRpYyBjb25z
dCBpbnQga01pbmltdW1TaXplID0gMTY7Ci0KLSAgc3RyaW5nKiB0YXJnZXRfOwotCi0gIEdPT0dM
RV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTdHJpbmdPdXRwdXRTdHJlYW0pOwotfTsKLQot
Ly8gTGF6eVN0cmluZ091dHB1dFN0cmVhbSBpcyBhIFN0cmluZ091dHB1dFN0cmVhbSB3aXRoIGxh
enkgYWNxdWlzaXRpb24gb2YKLS8vIHRoZSBvdXRwdXQgc3RyaW5nIGZyb20gYSBjYWxsYmFjay4g
VGhlIHN0cmluZyBpcyBvd25lZCBleHRlcm5hbGx5LCBhbmQgbm90Ci0vLyBkZWxldGVkIGluIHRo
ZSBzdHJlYW0gZGVzdHJ1Y3Rvci4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBMYXp5U3RyaW5n
T3V0cHV0U3RyZWFtIDogcHVibGljIFN0cmluZ091dHB1dFN0cmVhbSB7Ci0gcHVibGljOgotICAv
LyBDYWxsYmFjayBzaG91bGQgYmUgcGVybWFuZW50IChub24tc2VsZi1kZWxldGluZykuIE93bmVy
c2hpcCBpcyB0cmFuc2ZlcnJlZAotICAvLyB0byB0aGUgTGF6eVN0cmluZ091dHB1dFN0cmVhbS4K
LSAgZXhwbGljaXQgTGF6eVN0cmluZ091dHB1dFN0cmVhbShSZXN1bHRDYWxsYmFjazxzdHJpbmcq
PiogY2FsbGJhY2spOwotICB+TGF6eVN0cmluZ091dHB1dFN0cmVhbSgpOwotCi0gIC8vIGltcGxl
bWVudHMgWmVyb0NvcHlPdXRwdXRTdHJlYW0sIG92ZXJyaWRpbmcgU3RyaW5nT3V0cHV0U3RyZWFt
IC0tLS0tLS0tLS0tCi0gIGJvb2wgTmV4dCh2b2lkKiogZGF0YSwgaW50KiBzaXplKTsKLSAgaW50
NjQgQnl0ZUNvdW50KCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBjb25zdCBnb29nbGU6OnByb3Rv
YnVmOjpzY29wZWRfcHRyPFJlc3VsdENhbGxiYWNrPHN0cmluZyo+ID4gY2FsbGJhY2tfOwotICBi
b29sIHN0cmluZ19pc19zZXRfOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9S
UyhMYXp5U3RyaW5nT3V0cHV0U3RyZWFtKTsKLX07Ci0KLS8vIE5vdGU6ICBUaGVyZSBpcyBubyBT
dHJpbmdJbnB1dFN0cmVhbS4gIEluc3RlYWQsIGp1c3QgY3JlYXRlIGFuCi0vLyBBcnJheUlucHV0
U3RyZWFtIGFzIGZvbGxvd3M6Ci0vLyAgIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoc3RyLmRhdGEo
KSwgc3RyLnNpemUoKSk7Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLy8gQSBnZW5lcmljIHRyYWRpdGlv
bmFsIGlucHV0IHN0cmVhbSBpbnRlcmZhY2UuCi0vLwotLy8gTG90cyBvZiB0cmFkaXRpb25hbCBp
bnB1dCBzdHJlYW1zIChlLmcuIGZpbGUgZGVzY3JpcHRvcnMsIEMgc3RkaW8KLS8vIHN0cmVhbXMs
IGFuZCBDKysgaW9zdHJlYW1zKSBleHBvc2UgYW4gaW50ZXJmYWNlIHdoZXJlIGV2ZXJ5IHJlYWQK
LS8vIGludm9sdmVzIGNvcHlpbmcgYnl0ZXMgaW50byBhIGJ1ZmZlci4gIElmIHlvdSB3YW50IHRv
IHRha2Ugc3VjaCBhbgotLy8gaW50ZXJmYWNlIGFuZCBtYWtlIGEgWmVyb0NvcHlJbnB1dFN0cmVh
bSBiYXNlZCBvbiBpdCwgc2ltcGx5IGltcGxlbWVudAotLy8gQ29weWluZ0lucHV0U3RyZWFtIGFu
ZCB0aGVuIHVzZSBDb3B5aW5nSW5wdXRTdHJlYW1BZGFwdG9yLgotLy8KLS8vIENvcHlpbmdJbnB1
dFN0cmVhbSBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGF2b2lkIGJ1ZmZlcmluZyBpZiBwb3NzaWJs
ZS4KLS8vIENvcHlpbmdJbnB1dFN0cmVhbUFkYXB0b3IgZG9lcyBpdHMgb3duIGJ1ZmZlcmluZyBh
bmQgd2lsbCByZWFkIGRhdGEKLS8vIGluIGxhcmdlIGJsb2Nrcy4KLWNsYXNzIExJQlBST1RPQlVG
X0VYUE9SVCBDb3B5aW5nSW5wdXRTdHJlYW0gewotIHB1YmxpYzoKLSAgdmlydHVhbCB+Q29weWlu
Z0lucHV0U3RyZWFtKCk7Ci0KLSAgLy8gUmVhZHMgdXAgdG8gInNpemUiIGJ5dGVzIGludG8gdGhl
IGdpdmVuIGJ1ZmZlci4gIFJldHVybnMgdGhlIG51bWJlciBvZgotICAvLyBieXRlcyByZWFkLiAg
UmVhZCgpIHdhaXRzIHVudGlsIGF0IGxlYXN0IG9uZSBieXRlIGlzIGF2YWlsYWJsZSwgb3IKLSAg
Ly8gcmV0dXJucyB6ZXJvIGlmIG5vIGJ5dGVzIHdpbGwgZXZlciBiZWNvbWUgYXZhaWxhYmxlIChF
T0YpLCBvciAtMSBpZiBhCi0gIC8vIHBlcm1hbmVudCByZWFkIGVycm9yIG9jY3VycmVkLgotICB2
aXJ0dWFsIGludCBSZWFkKHZvaWQqIGJ1ZmZlciwgaW50IHNpemUpID0gMDsKLQotICAvLyBTa2lw
cyB0aGUgbmV4dCAiY291bnQiIGJ5dGVzIG9mIGlucHV0LiAgUmV0dXJucyB0aGUgbnVtYmVyIG9m
IGJ5dGVzCi0gIC8vIGFjdHVhbGx5IHNraXBwZWQuICBUaGlzIHdpbGwgYWx3YXlzIGJlIGV4YWN0
bHkgZXF1YWwgdG8gImNvdW50IiB1bmxlc3MKLSAgLy8gRU9GIHdhcyByZWFjaGVkIG9yIGEgcGVy
bWFuZW50IHJlYWQgZXJyb3Igb2NjdXJyZWQuCi0gIC8vCi0gIC8vIFRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIGp1c3QgcmVwZWF0ZWRseSBjYWxscyBSZWFkKCkgaW50byBhIHNjcmF0Y2gKLSAg
Ly8gYnVmZmVyLgotICB2aXJ0dWFsIGludCBTa2lwKGludCBjb3VudCk7Ci19OwotCi0vLyBBIFpl
cm9Db3B5SW5wdXRTdHJlYW0gd2hpY2ggcmVhZHMgZnJvbSBhIENvcHlpbmdJbnB1dFN0cmVhbS4g
IFRoaXMgaXMKLS8vIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIFplcm9Db3B5SW5wdXRTdHJlYW1z
IHRoYXQgcmVhZCBmcm9tIHRyYWRpdGlvbmFsCi0vLyBzdHJlYW1zLiAgTm90ZSB0aGF0IHRoaXMg
Y2xhc3MgaXMgbm90IHJlYWxseSB6ZXJvLWNvcHkuCi0vLwotLy8gSWYgeW91IHdhbnQgdG8gcmVh
ZCBmcm9tIGZpbGUgZGVzY3JpcHRvcnMgb3IgQysrIGlzdHJlYW1zLCB0aGlzIGlzCi0vLyBhbHJl
YWR5IGltcGxlbWVudGVkIGZvciB5b3U6ICB1c2UgRmlsZUlucHV0U3RyZWFtIG9yIElzdHJlYW1J
bnB1dFN0cmVhbQotLy8gcmVzcGVjdGl2ZWx5LgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIENv
cHlpbmdJbnB1dFN0cmVhbUFkYXB0b3IgOiBwdWJsaWMgWmVyb0NvcHlJbnB1dFN0cmVhbSB7Ci0g
cHVibGljOgotICAvLyBDcmVhdGVzIGEgc3RyZWFtIHRoYXQgcmVhZHMgZnJvbSB0aGUgZ2l2ZW4g
Q29weWluZ0lucHV0U3RyZWFtLgotICAvLyBJZiBhIGJsb2NrX3NpemUgaXMgZ2l2ZW4sIGl0IHNw
ZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQKLSAgLy8gc2hvdWxkIGJlIHJlYWQgYW5k
IHJldHVybmVkIHdpdGggZWFjaCBjYWxsIHRvIE5leHQoKS4gIE90aGVyd2lzZSwKLSAgLy8gYSBy
ZWFzb25hYmxlIGRlZmF1bHQgaXMgdXNlZC4gIFRoZSBjYWxsZXIgcmV0YWlucyBvd25lcnNoaXAg
b2YKLSAgLy8gY29weWluZ19zdHJlYW0gdW5sZXNzIFNldE93bnNDb3B5aW5nU3RyZWFtKHRydWUp
IGlzIGNhbGxlZC4KLSAgZXhwbGljaXQgQ29weWluZ0lucHV0U3RyZWFtQWRhcHRvcihDb3B5aW5n
SW5wdXRTdHJlYW0qIGNvcHlpbmdfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBibG9ja19zaXplID0gLTEpOwotICB+Q29weWluZ0lucHV0U3RyZWFtQWRh
cHRvcigpOwotCi0gIC8vIENhbGwgU2V0T3duc0NvcHlpbmdTdHJlYW0odHJ1ZSkgdG8gdGVsbCB0
aGUgQ29weWluZ0lucHV0U3RyZWFtQWRhcHRvciB0bwotICAvLyBkZWxldGUgdGhlIHVuZGVybHlp
bmcgQ29weWluZ0lucHV0U3RyZWFtIHdoZW4gaXQgaXMgZGVzdHJveWVkLgotICB2b2lkIFNldE93
bnNDb3B5aW5nU3RyZWFtKGJvb2wgdmFsdWUpIHsgb3duc19jb3B5aW5nX3N0cmVhbV8gPSB2YWx1
ZTsgfQotCi0gIC8vIGltcGxlbWVudHMgWmVyb0NvcHlJbnB1dFN0cmVhbSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGJvb2wgTmV4dChjb25zdCB2b2lkKiogZGF0YSwgaW50
KiBzaXplKTsKLSAgdm9pZCBCYWNrVXAoaW50IGNvdW50KTsKLSAgYm9vbCBTa2lwKGludCBjb3Vu
dCk7Ci0gIGludDY0IEJ5dGVDb3VudCgpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgLy8gSW5zdXJl
cyB0aGF0IGJ1ZmZlcl8gaXMgbm90IE5VTEwuCi0gIHZvaWQgQWxsb2NhdGVCdWZmZXJJZk5lZWRl
ZCgpOwotICAvLyBGcmVlcyB0aGUgYnVmZmVyIGFuZCByZXNldHMgYnVmZmVyX3VzZWRfLgotICB2
b2lkIEZyZWVCdWZmZXIoKTsKLQotICAvLyBUaGUgdW5kZXJseWluZyBjb3B5aW5nIHN0cmVhbS4K
LSAgQ29weWluZ0lucHV0U3RyZWFtKiBjb3B5aW5nX3N0cmVhbV87Ci0gIGJvb2wgb3duc19jb3B5
aW5nX3N0cmVhbV87Ci0KLSAgLy8gVHJ1ZSBpZiB3ZSBoYXZlIHNlZW4gYSBwZXJtZW5hbnQgZXJy
b3IgZnJvbSB0aGUgdW5kZXJseWluZyBzdHJlYW0uCi0gIGJvb2wgZmFpbGVkXzsKLQotICAvLyBU
aGUgY3VycmVudCBwb3NpdGlvbiBvZiBjb3B5aW5nX3N0cmVhbV8sIHJlbGF0aXZlIHRvIHRoZSBw
b2ludCB3aGVyZQotICAvLyB3ZSBzdGFydGVkIHJlYWRpbmcuCi0gIGludDY0IHBvc2l0aW9uXzsK
LQotICAvLyBEYXRhIGlzIHJlYWQgaW50byB0aGlzIGJ1ZmZlci4gIEl0IG1heSBiZSBOVUxMIGlm
IG5vIGJ1ZmZlciBpcyBjdXJyZW50bHkKLSAgLy8gaW4gdXNlLiAgT3RoZXJ3aXNlLCBpdCBwb2lu
dHMgdG8gYW4gYXJyYXkgb2Ygc2l6ZSBidWZmZXJfc2l6ZV8uCi0gIGdvb2dsZTo6cHJvdG9idWY6
OnNjb3BlZF9hcnJheTx1aW50OD4gYnVmZmVyXzsKLSAgY29uc3QgaW50IGJ1ZmZlcl9zaXplXzsK
LQotICAvLyBOdW1iZXIgb2YgdmFsaWQgYnl0ZXMgY3VycmVudGx5IGluIHRoZSBidWZmZXIgKGku
ZS4gdGhlIHNpemUgbGFzdAotICAvLyByZXR1cm5lZCBieSBOZXh0KCkpLiAgMCA8PSBidWZmZXJf
dXNlZF8gPD0gYnVmZmVyX3NpemVfLgotICBpbnQgYnVmZmVyX3VzZWRfOwotCi0gIC8vIE51bWJl
ciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHdoaWNoIHdlcmUgYmFja2VkIHVwIG92ZXIgYnkgYSBj
YWxsIHRvCi0gIC8vIEJhY2tVcCgpLiAgVGhlc2UgbmVlZCB0byBiZSByZXR1cm5lZCBhZ2Fpbi4K
LSAgLy8gMCA8PSBiYWNrdXBfYnl0ZXNfIDw9IGJ1ZmZlcl91c2VkXwotICBpbnQgYmFja3VwX2J5
dGVzXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQ29weWluZ0lucHV0
U3RyZWFtQWRhcHRvcik7Ci19OwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS8vIEEgZ2VuZXJpYyB0cmFk
aXRpb25hbCBvdXRwdXQgc3RyZWFtIGludGVyZmFjZS4KLS8vCi0vLyBMb3RzIG9mIHRyYWRpdGlv
bmFsIG91dHB1dCBzdHJlYW1zIChlLmcuIGZpbGUgZGVzY3JpcHRvcnMsIEMgc3RkaW8KLS8vIHN0
cmVhbXMsIGFuZCBDKysgaW9zdHJlYW1zKSBleHBvc2UgYW4gaW50ZXJmYWNlIHdoZXJlIGV2ZXJ5
IHdyaXRlCi0vLyBpbnZvbHZlcyBjb3B5aW5nIGJ5dGVzIGZyb20gYSBidWZmZXIuICBJZiB5b3Ug
d2FudCB0byB0YWtlIHN1Y2ggYW4KLS8vIGludGVyZmFjZSBhbmQgbWFrZSBhIFplcm9Db3B5T3V0
cHV0U3RyZWFtIGJhc2VkIG9uIGl0LCBzaW1wbHkgaW1wbGVtZW50Ci0vLyBDb3B5aW5nT3V0cHV0
U3RyZWFtIGFuZCB0aGVuIHVzZSBDb3B5aW5nT3V0cHV0U3RyZWFtQWRhcHRvci4KLS8vCi0vLyBD
b3B5aW5nT3V0cHV0U3RyZWFtIGltcGxlbWVudGF0aW9ucyBzaG91bGQgYXZvaWQgYnVmZmVyaW5n
IGlmIHBvc3NpYmxlLgotLy8gQ29weWluZ091dHB1dFN0cmVhbUFkYXB0b3IgZG9lcyBpdHMgb3du
IGJ1ZmZlcmluZyBhbmQgd2lsbCB3cml0ZSBkYXRhCi0vLyBpbiBsYXJnZSBibG9ja3MuCi1jbGFz
cyBMSUJQUk9UT0JVRl9FWFBPUlQgQ29weWluZ091dHB1dFN0cmVhbSB7Ci0gcHVibGljOgotICB2
aXJ0dWFsIH5Db3B5aW5nT3V0cHV0U3RyZWFtKCk7Ci0KLSAgLy8gV3JpdGVzICJzaXplIiBieXRl
cyBmcm9tIHRoZSBnaXZlbiBidWZmZXIgdG8gdGhlIG91dHB1dC4gIFJldHVybnMgdHJ1ZQotICAv
LyBpZiBzdWNjZXNzZnVsLCBmYWxzZSBvbiBhIHdyaXRlIGVycm9yLgotICB2aXJ0dWFsIGJvb2wg
V3JpdGUoY29uc3Qgdm9pZCogYnVmZmVyLCBpbnQgc2l6ZSkgPSAwOwotfTsKLQotLy8gQSBaZXJv
Q29weU91dHB1dFN0cmVhbSB3aGljaCB3cml0ZXMgdG8gYSBDb3B5aW5nT3V0cHV0U3RyZWFtLiAg
VGhpcyBpcwotLy8gdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgWmVyb0NvcHlPdXRwdXRTdHJlYW1z
IHRoYXQgd3JpdGUgdG8gdHJhZGl0aW9uYWwKLS8vIHN0cmVhbXMuICBOb3RlIHRoYXQgdGhpcyBj
bGFzcyBpcyBub3QgcmVhbGx5IHplcm8tY29weS4KLS8vCi0vLyBJZiB5b3Ugd2FudCB0byB3cml0
ZSB0byBmaWxlIGRlc2NyaXB0b3JzIG9yIEMrKyBvc3RyZWFtcywgdGhpcyBpcwotLy8gYWxyZWFk
eSBpbXBsZW1lbnRlZCBmb3IgeW91OiAgdXNlIEZpbGVPdXRwdXRTdHJlYW0gb3IgT3N0cmVhbU91
dHB1dFN0cmVhbQotLy8gcmVzcGVjdGl2ZWx5LgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIENv
cHlpbmdPdXRwdXRTdHJlYW1BZGFwdG9yIDogcHVibGljIFplcm9Db3B5T3V0cHV0U3RyZWFtIHsK
LSBwdWJsaWM6Ci0gIC8vIENyZWF0ZXMgYSBzdHJlYW0gdGhhdCB3cml0ZXMgdG8gdGhlIGdpdmVu
IFVuaXggZmlsZSBkZXNjcmlwdG9yLgotICAvLyBJZiBhIGJsb2NrX3NpemUgaXMgZ2l2ZW4sIGl0
IHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVycwotICAvLyB0aGF0IHNob3VsZCBiZSBy
ZXR1cm5lZCBieSBOZXh0KCkuICBPdGhlcndpc2UsIGEgcmVhc29uYWJsZSBkZWZhdWx0Ci0gIC8v
IGlzIHVzZWQuCi0gIGV4cGxpY2l0IENvcHlpbmdPdXRwdXRTdHJlYW1BZGFwdG9yKENvcHlpbmdP
dXRwdXRTdHJlYW0qIGNvcHlpbmdfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYmxvY2tfc2l6ZSA9IC0xKTsKLSAgfkNvcHlpbmdPdXRwdXRTdHJlYW1B
ZGFwdG9yKCk7Ci0KLSAgLy8gV3JpdGVzIGFsbCBwZW5kaW5nIGRhdGEgdG8gdGhlIHVuZGVybHlp
bmcgc3RyZWFtLiAgUmV0dXJucyBmYWxzZSBpZiBhCi0gIC8vIHdyaXRlIGVycm9yIG9jY3VycmVk
IG9uIHRoZSB1bmRlcmx5aW5nIHN0cmVhbS4gIChUaGUgdW5kZXJseWluZwotICAvLyBzdHJlYW0g
aXRzZWxmIGlzIG5vdCBuZWNlc3NhcmlseSBmbHVzaGVkLikKLSAgYm9vbCBGbHVzaCgpOwotCi0g
IC8vIENhbGwgU2V0T3duc0NvcHlpbmdTdHJlYW0odHJ1ZSkgdG8gdGVsbCB0aGUgQ29weWluZ091
dHB1dFN0cmVhbUFkYXB0b3IgdG8KLSAgLy8gZGVsZXRlIHRoZSB1bmRlcmx5aW5nIENvcHlpbmdP
dXRwdXRTdHJlYW0gd2hlbiBpdCBpcyBkZXN0cm95ZWQuCi0gIHZvaWQgU2V0T3duc0NvcHlpbmdT
dHJlYW0oYm9vbCB2YWx1ZSkgeyBvd25zX2NvcHlpbmdfc3RyZWFtXyA9IHZhbHVlOyB9Ci0KLSAg
Ly8gaW1wbGVtZW50cyBaZXJvQ29weU91dHB1dFN0cmVhbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgYm9vbCBOZXh0KHZvaWQqKiBkYXRhLCBpbnQqIHNpemUpOwotICB2b2lk
IEJhY2tVcChpbnQgY291bnQpOwotICBpbnQ2NCBCeXRlQ291bnQoKSBjb25zdDsKLQotIHByaXZh
dGU6Ci0gIC8vIFdyaXRlIHRoZSBjdXJyZW50IGJ1ZmZlciwgaWYgaXQgaXMgcHJlc2VudC4KLSAg
Ym9vbCBXcml0ZUJ1ZmZlcigpOwotICAvLyBJbnN1cmVzIHRoYXQgYnVmZmVyXyBpcyBub3QgTlVM
TC4KLSAgdm9pZCBBbGxvY2F0ZUJ1ZmZlcklmTmVlZGVkKCk7Ci0gIC8vIEZyZWVzIHRoZSBidWZm
ZXIuCi0gIHZvaWQgRnJlZUJ1ZmZlcigpOwotCi0gIC8vIFRoZSB1bmRlcmx5aW5nIGNvcHlpbmcg
c3RyZWFtLgotICBDb3B5aW5nT3V0cHV0U3RyZWFtKiBjb3B5aW5nX3N0cmVhbV87Ci0gIGJvb2wg
b3duc19jb3B5aW5nX3N0cmVhbV87Ci0KLSAgLy8gVHJ1ZSBpZiB3ZSBoYXZlIHNlZW4gYSBwZXJt
ZW5hbnQgZXJyb3IgZnJvbSB0aGUgdW5kZXJseWluZyBzdHJlYW0uCi0gIGJvb2wgZmFpbGVkXzsK
LQotICAvLyBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiBjb3B5aW5nX3N0cmVhbV8sIHJlbGF0aXZl
IHRvIHRoZSBwb2ludCB3aGVyZQotICAvLyB3ZSBzdGFydGVkIHdyaXRpbmcuCi0gIGludDY0IHBv
c2l0aW9uXzsKLQotICAvLyBEYXRhIGlzIHdyaXR0ZW4gZnJvbSB0aGlzIGJ1ZmZlci4gIEl0IG1h
eSBiZSBOVUxMIGlmIG5vIGJ1ZmZlciBpcwotICAvLyBjdXJyZW50bHkgaW4gdXNlLiAgT3RoZXJ3
aXNlLCBpdCBwb2ludHMgdG8gYW4gYXJyYXkgb2Ygc2l6ZSBidWZmZXJfc2l6ZV8uCi0gIGdvb2ds
ZTo6cHJvdG9idWY6OnNjb3BlZF9hcnJheTx1aW50OD4gYnVmZmVyXzsKLSAgY29uc3QgaW50IGJ1
ZmZlcl9zaXplXzsKLQotICAvLyBOdW1iZXIgb2YgdmFsaWQgYnl0ZXMgY3VycmVudGx5IGluIHRo
ZSBidWZmZXIgKGkuZS4gdGhlIHNpemUgbGFzdAotICAvLyByZXR1cm5lZCBieSBOZXh0KCkpLiAg
V2hlbiBCYWNrVXAoKSBpcyBjYWxsZWQsIHdlIGp1c3QgcmVkdWNlIHRoaXMuCi0gIC8vIDAgPD0g
YnVmZmVyX3VzZWRfIDw9IGJ1ZmZlcl9zaXplXy4KLSAgaW50IGJ1ZmZlcl91c2VkXzsKLQotICBH
T09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoQ29weWluZ091dHB1dFN0cmVhbUFkYXB0
b3IpOwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vLyBtdXRhYmxlX3N0cmluZ19kYXRhKCkgYW5k
IGFzX3N0cmluZ19kYXRhKCkgYXJlIHdvcmthcm91bmRzIHRvIGltcHJvdmUKLS8vIHRoZSBwZXJm
b3JtYW5jZSBvZiB3cml0aW5nIG5ldyBkYXRhIHRvIGFuIGV4aXN0aW5nIHN0cmluZy4gIFVuZm9y
dHVuYXRlbHkKLS8vIHRoZSBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBzdHJpbmcgY2xhc3MgYXJl
IHN1Ym9wdGltYWwsIGFuZCB1c2luZyBtZW1jcHkoKQotLy8gaXMgbWlsZGx5IGFubm95aW5nIGJl
Y2F1c2UgaXQgcmVxdWlyZXMgaXRzIHBvaW50ZXIgYXJncyB0byBiZSBub24tTlVMTCBldmVuCi0v
LyBpZiB3ZSBhc2sgaXQgdG8gY29weSAwIGJ5dGVzLiAgRnVydGhlcm1vcmUsIHN0cmluZ19hc19h
cnJheSgpIGhhcyB0aGUKLS8vIHByb3BlcnR5IHRoYXQgaXQgYWx3YXlzIHJldHVybnMgTlVMTCBp
ZiBpdHMgYXJnIGlzIHRoZSBlbXB0eSBzdHJpbmcsIGV4YWN0bHkKLS8vIHdoYXQgd2Ugd2FudCB0
byBhdm9pZCBpZiB3ZSdyZSB1c2luZyBpdCBpbiBjb25qdW5jdGlvbiB3aXRoIG1lbWNweSgpIQot
Ly8gV2l0aCBDKysxMSwgdGhlIGRlc2lyZWQgbWVtY3B5KCkgYm9pbHMgZG93biB0byBtZW1jcHko
Li4uLCAmKCpzKVswXSwgc2l6ZSksCi0vLyB3aGVyZSBzIGlzIGEgc3RyaW5nKi4gIFdpdGhvdXQg
QysrMTEsICYoKnMpWzBdIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHNhZmUsCi0vLyBzbyB3ZSB1
c2Ugc3RyaW5nX2FzX2FycmF5KCksIGFuZCBsaXZlIHdpdGggdGhlIGV4dHJhIGxvZ2ljIHRoYXQg
dGVzdHMgd2hldGhlcgotLy8gKnMgaXMgZW1wdHkuCi0KLS8vIFJldHVybiBhIHBvaW50ZXIgdG8g
bXV0YWJsZSBjaGFyYWN0ZXJzIHVuZGVybHlpbmcgdGhlIGdpdmVuIHN0cmluZy4gIFRoZQotLy8g
cmV0dXJuIHZhbHVlIGlzIHZhbGlkIHVudGlsIHRoZSBuZXh0IHRpbWUgdGhlIHN0cmluZyBpcyBy
ZXNpemVkLiAgV2UKLS8vIHRydXN0IHRoZSBjYWxsZXIgdG8gdHJlYXQgdGhlIHJldHVybiB2YWx1
ZSBhcyBhbiBhcnJheSBvZiBsZW5ndGggcy0+c2l6ZSgpLgotaW5saW5lIGNoYXIqIG11dGFibGVf
c3RyaW5nX2RhdGEoc3RyaW5nKiBzKSB7Ci0jaWZkZWYgTEFOR19DWFgxMQotICAvLyBUaGlzIHNo
b3VsZCBiZSBzaW1wbGVyICYgZmFzdGVyIHRoYW4gc3RyaW5nX2FzX2FycmF5KCkgYmVjYXVzZSB0
aGUgbGF0dGVyCi0gIC8vIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIE5VTEwgd2hlbiAqcyBpcyBl
bXB0eSwgc28gaXQgaGFzIHRvIGNoZWNrIGZvciB0aGF0LgotICByZXR1cm4gJigqcylbMF07Ci0j
ZWxzZQotICByZXR1cm4gc3RyaW5nX2FzX2FycmF5KHMpOwotI2VuZGlmCi19Ci0KLS8vIGFzX3N0
cmluZ19kYXRhKHMpIGlzIGVxdWl2YWxlbnQgdG8KLS8vICAoeyBjaGFyKiBwID0gbXV0YWJsZV9z
dHJpbmdfZGF0YShzKTsgbWFrZV9wYWlyKHAsIHAgIT0gTlVMTCk7IH0pCi0vLyBTb21ldGltZXMg
aXQncyBmYXN0ZXI6IGluIHNvbWUgc2NlbmFyaW9zIHAgY2Fubm90IGJlIE5VTEwsIGFuZCB0aGVu
IHRoZQotLy8gY29kZSBjYW4gYXZvaWQgdGhhdCBjaGVjay4KLWlubGluZSBzdGQ6OnBhaXI8Y2hh
ciosIGJvb2w+IGFzX3N0cmluZ19kYXRhKHN0cmluZyogcykgewotICBjaGFyICpwID0gbXV0YWJs
ZV9zdHJpbmdfZGF0YShzKTsKLSNpZmRlZiBMQU5HX0NYWDExCi0gIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihwLCB0cnVlKTsKLSNlbHNlCi0gIHJldHVybiBtYWtlX3BhaXIocCwgcCAhPSBOVUxMKTsK
LSNlbmRpZgotfQotCi19ICAvLyBuYW1lc3BhY2UgaW8KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9J
T19aRVJPX0NPUFlfU1RSRUFNX0lNUExfTElURV9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2lvL3plcm9fY29weV9zdHJlYW1fdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE5ZGI4ODcyZDQxZTQ5OWU1YTgwY2MyNTAzOTQ4ZTNmNjliMzU2YmEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL2lvL3plcm9fY29weV9zdHJlYW1fdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDA3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRo
b3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2lu
YWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYg
RGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBUZXN0aW5nIHN0cmF0ZWd5OiAgRm9yIGVhY2ggdHlw
ZSBvZiBJL08gKGFycmF5LCBzdHJpbmcsIGZpbGUsIGV0Yy4pIHdlCi0vLyBjcmVhdGUgYW4gb3V0
cHV0IHN0cmVhbSBhbmQgd3JpdGUgc29tZSBkYXRhIHRvIGl0LCB0aGVuIGNyZWF0ZSBhCi0vLyBj
b3JyZXNwb25kaW5nIGlucHV0IHN0cmVhbSB0byByZWFkIHRoZSBzYW1lIGRhdGEgYmFjayBhbmQg
ZXhwZWN0IGl0IHRvCi0vLyBtYXRjaC4gIFdoZW4gdGhlIGRhdGEgaXMgd3JpdHRlbiwgaXQgaXMg
d3JpdHRlbiBpbiBzZXZlcmFsIHNtYWxsIGNodW5rcwotLy8gb2YgdmFyeWluZyBzaXplcywgd2l0
aCBhIEJhY2tVcCgpIGFmdGVyIGVhY2ggY2h1bmsuICBJdCBpcyByZWFkIGJhY2sKLS8vIHNpbWls
YXJseSwgYnV0IHdpdGggY2h1bmtzIHNlcGFyYXRlZCBhdCBkaWZmZXJlbnQgcG9pbnRzLiAgVGhl
IHdob2xlCi0vLyBwcm9jZXNzIGlzIHJ1biB3aXRoIGEgdmFyaWV0eSBvZiBibG9jayBzaXplcyBm
b3IgYm90aCB0aGUgaW5wdXQgYW5kCi0vLyB0aGUgb3V0cHV0LgotLy8KLS8vIFRPRE8oa2VudG9u
KTogIFJld3JpdGUgdGhpcyB0ZXN0IHRvIGJyaW5nIGl0IHVwIHRvIHRoZSBzdGFuZGFyZHMgb2Yg
YWxsCi0vLyAgIHRoZSBvdGhlciBwcm90bzIgdGVzdHMuICBNYXkgd2FudCB0byB3YWl0IGZvciBn
VGVzdCB0byBpbXBsZW1lbnQKLS8vICAgInBhcmFtZXRpemVkIHRlc3RzIiBzbyB0aGF0IG9uZSBz
ZXQgb2YgdGVzdHMgY2FuIGJlIHVzZWQgb24gYWxsIHRoZQotLy8gICBpbXBsZW1lbnRhdGlvbnMu
Ci0KLQotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aW8uaD4KLSNlbHNlCi0jaW5jbHVkZSA8
dW5pc3RkLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVk
ZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0jaW5j
bHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2ZpbGUu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oPgotCi0jaWYgSEFW
RV9aTElCCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2d6aXBfc3RyZWFtLmg+Ci0jZW5k
aWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVz
dGluZy9maWxlLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotbmFtZXNwYWNlIGdvb2ds
ZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGlvIHsKLW5hbWVzcGFjZSB7Ci0K
LSNpZmRlZiBfV0lOMzIKLSNkZWZpbmUgcGlwZShmZHMpIF9waXBlKGZkcywgNDA5NiwgT19CSU5B
UlkpCi0jZW5kaWYKLQotI2lmbmRlZiBPX0JJTkFSWQotI2lmZGVmIF9PX0JJTkFSWQotI2RlZmlu
ZSBPX0JJTkFSWSBfT19CSU5BUlkKLSNlbHNlCi0jZGVmaW5lIE9fQklOQVJZIDAgICAgIC8vIElm
IHRoaXMgaXNuJ3QgZGVmaW5lZCwgdGhlIHBsYXRmb3JtIGRvZXNuJ3QgbmVlZCBpdC4KLSNlbmRp
ZgotI2VuZGlmCi0KLWNsYXNzIElvVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwcm90
ZWN0ZWQ6Ci0gIC8vIFRlc3QgaGVscGVycy4KLQotICAvLyBIZWxwZXIgdG8gd3JpdGUgYW4gYXJy
YXkgb2YgZGF0YSB0byBhbiBvdXRwdXQgc3RyZWFtLgotICBib29sIFdyaXRlVG9PdXRwdXQoWmVy
b0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCwgY29uc3Qgdm9pZCogZGF0YSwgaW50IHNpemUpOwot
ICAvLyBIZWxwZXIgdG8gcmVhZCBhIGZpeGVkLWxlbmd0aCBhcnJheSBvZiBkYXRhIGZyb20gYW4g
aW5wdXQgc3RyZWFtLgotICBpbnQgUmVhZEZyb21JbnB1dChaZXJvQ29weUlucHV0U3RyZWFtKiBp
bnB1dCwgdm9pZCogZGF0YSwgaW50IHNpemUpOwotICAvLyBXcml0ZSBhIHN0cmluZyB0byB0aGUg
b3V0cHV0IHN0cmVhbS4KLSAgdm9pZCBXcml0ZVN0cmluZyhaZXJvQ29weU91dHB1dFN0cmVhbSog
b3V0cHV0LCBjb25zdCBzdHJpbmcmIHN0cik7Ci0gIC8vIFJlYWQgYSBudW1iZXIgb2YgYnl0ZXMg
ZXF1YWwgdG8gdGhlIHNpemUgb2YgdGhlIGdpdmVuIHN0cmluZyBhbmQgY2hlY2tzCi0gIC8vIHRo
YXQgaXQgbWF0Y2hlcyB0aGUgc3RyaW5nLgotICB2b2lkIFJlYWRTdHJpbmcoWmVyb0NvcHlJbnB1
dFN0cmVhbSogaW5wdXQsIGNvbnN0IHN0cmluZyYgc3RyKTsKLSAgLy8gV3JpdGVzIHNvbWUgdGV4
dCB0byB0aGUgb3V0cHV0IHN0cmVhbSBpbiBhIHBhcnRpY3VsYXIgb3JkZXIuICBSZXR1cm5zCi0g
IC8vIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgaW5jYXNlIHRoZSBjYWxsZXIgbmVlZHMg
dGhhdCB0byBzZXQgdXAgYW4KLSAgLy8gaW5wdXQgc3RyZWFtLgotICBpbnQgV3JpdGVTdHVmZiha
ZXJvQ29weU91dHB1dFN0cmVhbSogb3V0cHV0KTsKLSAgLy8gUmVhZHMgdGV4dCBmcm9tIGFuIGlu
cHV0IHN0cmVhbSBhbmQgZXhwZWN0cyBpdCB0byBtYXRjaCB3aGF0Ci0gIC8vIFdyaXRlU3R1ZmYo
KSB3cml0ZXMuCi0gIHZvaWQgUmVhZFN0dWZmKFplcm9Db3B5SW5wdXRTdHJlYW0qIGlucHV0KTsK
LQotICAvLyBTaW1pbGFyIHRvIFdyaXRlU3R1ZmYsIGJ1dCBwZXJmb3JtcyBtb3JlIHNvcGhpc3Rp
Y2F0ZWQgdGVzdGluZy4KLSAgaW50IFdyaXRlU3R1ZmZMYXJnZShaZXJvQ29weU91dHB1dFN0cmVh
bSogb3V0cHV0KTsKLSAgLy8gUmVhZHMgYW5kIHRlc3RzIGEgc3RyZWFtIHRoYXQgc2hvdWxkIGhh
dmUgYmVlbiB3cml0dGVuIHRvCi0gIC8vIHZpYSBXcml0ZVN0dWZmTGFyZ2UoKS4KLSAgdm9pZCBS
ZWFkU3R1ZmZMYXJnZShaZXJvQ29weUlucHV0U3RyZWFtKiBpbnB1dCk7Ci0KLSNpZiBIQVZFX1pM
SUIKLSAgc3RyaW5nIENvbXByZXNzKGNvbnN0IHN0cmluZyYgZGF0YSwgY29uc3QgR3ppcE91dHB1
dFN0cmVhbTo6T3B0aW9ucyYgb3B0aW9ucyk7Ci0gIHN0cmluZyBVbmNvbXByZXNzKGNvbnN0IHN0
cmluZyYgZGF0YSk7Ci0jZW5kaWYKLQotICBzdGF0aWMgY29uc3QgaW50IGtCbG9ja1NpemVzW107
Ci0gIHN0YXRpYyBjb25zdCBpbnQga0Jsb2NrU2l6ZUNvdW50OwotfTsKLQotY29uc3QgaW50IElv
VGVzdDo6a0Jsb2NrU2l6ZXNbXSA9IHstMSwgMSwgMiwgNSwgNywgMTAsIDIzLCA2NH07Ci1jb25z
dCBpbnQgSW9UZXN0OjprQmxvY2tTaXplQ291bnQgPSBHT09HTEVfQVJSQVlTSVpFKElvVGVzdDo6
a0Jsb2NrU2l6ZXMpOwotCi1ib29sIElvVGVzdDo6V3JpdGVUb091dHB1dChaZXJvQ29weU91dHB1
dFN0cmVhbSogb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCog
ZGF0YSwgaW50IHNpemUpIHsKLSAgY29uc3QgdWludDgqIGluID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OCo+KGRhdGEpOwotICBpbnQgaW5fc2l6ZSA9IHNpemU7Ci0KLSAgdm9pZCogb3V0
OwotICBpbnQgb3V0X3NpemU7Ci0KLSAgd2hpbGUgKHRydWUpIHsKLSAgICBpZiAoIW91dHB1dC0+
TmV4dCgmb3V0LCAmb3V0X3NpemUpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IEVYUEVDVF9HVChvdXRfc2l6ZSwgMCk7Ci0KLSAgICBpZiAoaW5fc2l6ZSA8PSBvdXRfc2l6ZSkg
ewotICAgICAgbWVtY3B5KG91dCwgaW4sIGluX3NpemUpOwotICAgICAgb3V0cHV0LT5CYWNrVXAo
b3V0X3NpemUgLSBpbl9zaXplKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIG1l
bWNweShvdXQsIGluLCBvdXRfc2l6ZSk7Ci0gICAgaW4gKz0gb3V0X3NpemU7Ci0gICAgaW5fc2l6
ZSAtPSBvdXRfc2l6ZTsKLSAgfQotfQotCi0jZGVmaW5lIE1BWF9SRVBFQVRFRF9aRVJPUyAxMDAK
LQotaW50IElvVGVzdDo6UmVhZEZyb21JbnB1dChaZXJvQ29weUlucHV0U3RyZWFtKiBpbnB1dCwg
dm9pZCogZGF0YSwgaW50IHNpemUpIHsKLSAgdWludDgqIG91dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDgqPihkYXRhKTsKLSAgaW50IG91dF9zaXplID0gc2l6ZTsKLQotICBjb25zdCB2b2lkKiBp
bjsKLSAgaW50IGluX3NpemUgPSAwOwotCi0gIGludCByZXBlYXRlZF96ZXJvcyA9IDA7Ci0KLSAg
d2hpbGUgKHRydWUpIHsKLSAgICBpZiAoIWlucHV0LT5OZXh0KCZpbiwgJmluX3NpemUpKSB7Ci0g
ICAgICByZXR1cm4gc2l6ZSAtIG91dF9zaXplOwotICAgIH0KLSAgICBFWFBFQ1RfR1QoaW5fc2l6
ZSwgLTEpOwotICAgIGlmIChpbl9zaXplID09IDApIHsKLSAgICAgIHJlcGVhdGVkX3plcm9zKys7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlcGVhdGVkX3plcm9zID0gMDsKLSAgICB9Ci0gICAgRVhQ
RUNUX0xUKHJlcGVhdGVkX3plcm9zLCBNQVhfUkVQRUFURURfWkVST1MpOwotCi0gICAgaWYgKG91
dF9zaXplIDw9IGluX3NpemUpIHsKLSAgICAgIG1lbWNweShvdXQsIGluLCBvdXRfc2l6ZSk7Ci0g
ICAgICBpZiAoaW5fc2l6ZSA+IG91dF9zaXplKSB7Ci0gICAgICAgIGlucHV0LT5CYWNrVXAoaW5f
c2l6ZSAtIG91dF9zaXplKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzaXplOyAgLy8gQ29waWVk
IGFsbCBvZiBpdC4KLSAgICB9Ci0KLSAgICBtZW1jcHkob3V0LCBpbiwgaW5fc2l6ZSk7Ci0gICAg
b3V0ICs9IGluX3NpemU7Ci0gICAgb3V0X3NpemUgLT0gaW5fc2l6ZTsKLSAgfQotfQotCi12b2lk
IElvVGVzdDo6V3JpdGVTdHJpbmcoWmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCwgY29uc3Qg
c3RyaW5nJiBzdHIpIHsKLSAgRVhQRUNUX1RSVUUoV3JpdGVUb091dHB1dChvdXRwdXQsIHN0ci5j
X3N0cigpLCBzdHIuc2l6ZSgpKSk7Ci19Ci0KLXZvaWQgSW9UZXN0OjpSZWFkU3RyaW5nKFplcm9D
b3B5SW5wdXRTdHJlYW0qIGlucHV0LCBjb25zdCBzdHJpbmcmIHN0cikgewotICBnb29nbGU6OnBy
b3RvYnVmOjpzY29wZWRfYXJyYXk8Y2hhcj4gYnVmZmVyKG5ldyBjaGFyW3N0ci5zaXplKCkgKyAx
XSk7Ci0gIGJ1ZmZlcltzdHIuc2l6ZSgpXSA9ICdcMCc7Ci0gIEVYUEVDVF9FUShSZWFkRnJvbUlu
cHV0KGlucHV0LCBidWZmZXIuZ2V0KCksIHN0ci5zaXplKCkpLCBzdHIuc2l6ZSgpKTsKLSAgRVhQ
RUNUX1NUUkVRKHN0ci5jX3N0cigpLCBidWZmZXIuZ2V0KCkpOwotfQotCi1pbnQgSW9UZXN0OjpX
cml0ZVN0dWZmKFplcm9Db3B5T3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgV3JpdGVTdHJpbmco
b3V0cHV0LCAiSGVsbG8gd29ybGQhXG4iKTsKLSAgV3JpdGVTdHJpbmcob3V0cHV0LCAiU29tZSB0
ZSIpOwotICBXcml0ZVN0cmluZyhvdXRwdXQsICJ4dC4gIEJsYWggYmxhaC4iKTsKLSAgV3JpdGVT
dHJpbmcob3V0cHV0LCAiYWJjZGVmZyIpOwotICBXcml0ZVN0cmluZyhvdXRwdXQsICIwMTIzNDU2
Nzg5MDEyMzQ1Njc4OSIpOwotICBXcml0ZVN0cmluZyhvdXRwdXQsICJmb29iYXIiKTsKLQotICBF
WFBFQ1RfRVEob3V0cHV0LT5CeXRlQ291bnQoKSwgNjgpOwotCi0gIGludCByZXN1bHQgPSBvdXRw
dXQtPkJ5dGVDb3VudCgpOwotICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBSZWFkcyB0ZXh0IGZy
b20gYW4gaW5wdXQgc3RyZWFtIGFuZCBleHBlY3RzIGl0IHRvIG1hdGNoIHdoYXQgV3JpdGVTdHVm
ZigpCi0vLyB3cml0ZXMuCi12b2lkIElvVGVzdDo6UmVhZFN0dWZmKFplcm9Db3B5SW5wdXRTdHJl
YW0qIGlucHV0KSB7Ci0gIFJlYWRTdHJpbmcoaW5wdXQsICJIZWxsbyB3b3JsZCFcbiIpOwotICBS
ZWFkU3RyaW5nKGlucHV0LCAiU29tZSB0ZXh0LiAgIik7Ci0gIFJlYWRTdHJpbmcoaW5wdXQsICJC
bGFoICIpOwotICBSZWFkU3RyaW5nKGlucHV0LCAiYmxhaC4iKTsKLSAgUmVhZFN0cmluZyhpbnB1
dCwgImFiY2RlZmciKTsKLSAgRVhQRUNUX1RSVUUoaW5wdXQtPlNraXAoMjApKTsKLSAgUmVhZFN0
cmluZyhpbnB1dCwgImZvbyIpOwotICBSZWFkU3RyaW5nKGlucHV0LCAiYmFyIik7Ci0KLSAgRVhQ
RUNUX0VRKGlucHV0LT5CeXRlQ291bnQoKSwgNjgpOwotCi0gIHVpbnQ4IGJ5dGU7Ci0gIEVYUEVD
VF9FUShSZWFkRnJvbUlucHV0KGlucHV0LCAmYnl0ZSwgMSksIDApOwotfQotCi1pbnQgSW9UZXN0
OjpXcml0ZVN0dWZmTGFyZ2UoWmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBXcml0
ZVN0cmluZyhvdXRwdXQsICJIZWxsbyB3b3JsZCFcbiIpOwotICBXcml0ZVN0cmluZyhvdXRwdXQs
ICJTb21lIHRlIik7Ci0gIFdyaXRlU3RyaW5nKG91dHB1dCwgInh0LiAgQmxhaCBibGFoLiIpOwot
ICBXcml0ZVN0cmluZyhvdXRwdXQsIHN0cmluZygxMDAwMDAsICd4JykpOyAgLy8gQSB2ZXJ5IGxv
bmcgc3RyaW5nCi0gIFdyaXRlU3RyaW5nKG91dHB1dCwgc3RyaW5nKDEwMDAwMCwgJ3knKSk7ICAv
LyBBIHZlcnkgbG9uZyBzdHJpbmcKLSAgV3JpdGVTdHJpbmcob3V0cHV0LCAiMDEyMzQ1Njc4OTAx
MjM0NTY3ODkiKTsKLQotICBFWFBFQ1RfRVEob3V0cHV0LT5CeXRlQ291bnQoKSwgMjAwMDU1KTsK
LQotICBpbnQgcmVzdWx0ID0gb3V0cHV0LT5CeXRlQ291bnQoKTsKLSAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotLy8gUmVhZHMgdGV4dCBmcm9tIGFuIGlucHV0IHN0cmVhbSBhbmQgZXhwZWN0cyBpdCB0
byBtYXRjaCB3aGF0IFdyaXRlU3R1ZmYoKQotLy8gd3JpdGVzLgotdm9pZCBJb1Rlc3Q6OlJlYWRT
dHVmZkxhcmdlKFplcm9Db3B5SW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0gIFJlYWRTdHJpbmcoaW5w
dXQsICJIZWxsbyB3b3JsZCFcblNvbWUgdGV4dC4gICIpOwotICBFWFBFQ1RfVFJVRShpbnB1dC0+
U2tpcCg1KSk7Ci0gIFJlYWRTdHJpbmcoaW5wdXQsICJibGFoLiIpOwotICBFWFBFQ1RfVFJVRShp
bnB1dC0+U2tpcCgxMDAwMDAgLSAxMCkpOwotICBSZWFkU3RyaW5nKGlucHV0LCBzdHJpbmcoMTAs
ICd4JykgKyBzdHJpbmcoMTAwMDAwIC0gMjAwMDAsICd5JykpOwotICBFWFBFQ1RfVFJVRShpbnB1
dC0+U2tpcCgyMDAwMCAtIDEwKSk7Ci0gIFJlYWRTdHJpbmcoaW5wdXQsICJ5eXl5eXl5eXl5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkiKTsKLQotICBFWFBFQ1RfRVEoaW5wdXQtPkJ5dGVDb3VudCgpLCAy
MDAwNTUpOwotCi0gIHVpbnQ4IGJ5dGU7Ci0gIEVYUEVDVF9FUShSZWFkRnJvbUlucHV0KGlucHV0
LCAmYnl0ZSwgMSksIDApOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRFU1RfRihJb1Rlc3QsIEFy
cmF5SW8pIHsKLSAgY29uc3QgaW50IGtCdWZmZXJTaXplID0gMjU2OwotICB1aW50OCBidWZmZXJb
a0J1ZmZlclNpemVdOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwga0Jsb2NrU2l6ZUNvdW50OyBp
KyspIHsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGtCbG9ja1NpemVDb3VudDsgaisrKSB7Ci0g
ICAgICBpbnQgc2l6ZTsKLSAgICAgIHsKLSAgICAgICAgQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0
KGJ1ZmZlciwga0J1ZmZlclNpemUsIGtCbG9ja1NpemVzW2ldKTsKLSAgICAgICAgc2l6ZSA9IFdy
aXRlU3R1ZmYoJm91dHB1dCk7Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgIEFycmF5SW5wdXRT
dHJlYW0gaW5wdXQoYnVmZmVyLCBzaXplLCBrQmxvY2tTaXplc1tqXSk7Ci0gICAgICAgIFJlYWRT
dHVmZigmaW5wdXQpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1URVNUX0YoSW9UZXN0LCBU
d29TZXNzaW9uV3JpdGUpIHsKLSAgLy8gVGVzdCB0aGF0IHR3byBjb25jYXRlbmF0ZWQgd3JpdGUg
c2Vzc2lvbnMgcmVhZCBjb3JyZWN0bHkKLQotICBzdGF0aWMgY29uc3QgY2hhciogc3RyQSA9ICIw
MTIzNDU2Nzg5IjsKLSAgc3RhdGljIGNvbnN0IGNoYXIqIHN0ckIgPSAiV2hpcmxlZFBlYXMiOwot
ICBjb25zdCBpbnQga0J1ZmZlclNpemUgPSAyKjEwMjQ7Ci0gIHVpbnQ4KiBidWZmZXIgPSBuZXcg
dWludDhba0J1ZmZlclNpemVdOwotICBjaGFyKiB0ZW1wX2J1ZmZlciA9IG5ldyBjaGFyWzQwXTsK
LQotICBmb3IgKGludCBpID0gMDsgaSA8IGtCbG9ja1NpemVDb3VudDsgaSsrKSB7Ci0gICAgZm9y
IChpbnQgaiA9IDA7IGogPCBrQmxvY2tTaXplQ291bnQ7IGorKykgewotICAgICAgQXJyYXlPdXRw
dXRTdHJlYW0qIG91dHB1dCA9Ci0gICAgICAgICAgbmV3IEFycmF5T3V0cHV0U3RyZWFtKGJ1ZmZl
ciwga0J1ZmZlclNpemUsIGtCbG9ja1NpemVzW2ldKTsKLSAgICAgIENvZGVkT3V0cHV0U3RyZWFt
KiBjb2RlZF9vdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0ob3V0cHV0KTsKLSAgICAgIGNv
ZGVkX291dHB1dC0+V3JpdGVWYXJpbnQzMihzdHJsZW4oc3RyQSkpOwotICAgICAgY29kZWRfb3V0
cHV0LT5Xcml0ZVJhdyhzdHJBLCBzdHJsZW4oc3RyQSkpOwotICAgICAgZGVsZXRlIGNvZGVkX291
dHB1dDsgIC8vIGZsdXNoCi0gICAgICBpbnQ2NCBwb3MgPSBvdXRwdXQtPkJ5dGVDb3VudCgpOwot
ICAgICAgZGVsZXRlIG91dHB1dDsKLSAgICAgIG91dHB1dCA9IG5ldyBBcnJheU91dHB1dFN0cmVh
bSgKLSAgICAgICAgICBidWZmZXIgKyBwb3MsIGtCdWZmZXJTaXplIC0gcG9zLCBrQmxvY2tTaXpl
c1tpXSk7Ci0gICAgICBjb2RlZF9vdXRwdXQgPSBuZXcgQ29kZWRPdXRwdXRTdHJlYW0ob3V0cHV0
KTsKLSAgICAgIGNvZGVkX291dHB1dC0+V3JpdGVWYXJpbnQzMihzdHJsZW4oc3RyQikpOwotICAg
ICAgY29kZWRfb3V0cHV0LT5Xcml0ZVJhdyhzdHJCLCBzdHJsZW4oc3RyQikpOwotICAgICAgZGVs
ZXRlIGNvZGVkX291dHB1dDsgIC8vIGZsdXNoCi0gICAgICBpbnQ2NCBzaXplID0gcG9zICsgb3V0
cHV0LT5CeXRlQ291bnQoKTsKLSAgICAgIGRlbGV0ZSBvdXRwdXQ7Ci0KLSAgICAgIEFycmF5SW5w
dXRTdHJlYW0qIGlucHV0ID0KLSAgICAgICAgICBuZXcgQXJyYXlJbnB1dFN0cmVhbShidWZmZXIs
IHNpemUsIGtCbG9ja1NpemVzW2pdKTsKLSAgICAgIENvZGVkSW5wdXRTdHJlYW0qIGNvZGVkX2lu
cHV0ID0gbmV3IENvZGVkSW5wdXRTdHJlYW0oaW5wdXQpOwotICAgICAgdWludDMyIGluc2l6ZTsK
LSAgICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LT5SZWFkVmFyaW50MzIoJmluc2l6ZSkpOwot
ICAgICAgRVhQRUNUX0VRKHN0cmxlbihzdHJBKSwgaW5zaXplKTsKLSAgICAgIEVYUEVDVF9UUlVF
KGNvZGVkX2lucHV0LT5SZWFkUmF3KHRlbXBfYnVmZmVyLCBpbnNpemUpKTsKLSAgICAgIEVYUEVD
VF9FUSgwLCBtZW1jbXAodGVtcF9idWZmZXIsIHN0ckEsIGluc2l6ZSkpOwotCi0gICAgICBFWFBF
Q1RfVFJVRShjb2RlZF9pbnB1dC0+UmVhZFZhcmludDMyKCZpbnNpemUpKTsKLSAgICAgIEVYUEVD
VF9FUShzdHJsZW4oc3RyQiksIGluc2l6ZSk7Ci0gICAgICBFWFBFQ1RfVFJVRShjb2RlZF9pbnB1
dC0+UmVhZFJhdyh0ZW1wX2J1ZmZlciwgaW5zaXplKSk7Ci0gICAgICBFWFBFQ1RfRVEoMCwgbWVt
Y21wKHRlbXBfYnVmZmVyLCBzdHJCLCBpbnNpemUpKTsKLQotICAgICAgZGVsZXRlIGNvZGVkX2lu
cHV0OwotICAgICAgZGVsZXRlIGlucHV0OwotICAgIH0KLSAgfQotCi0gIGRlbGV0ZSBbXSB0ZW1w
X2J1ZmZlcjsKLSAgZGVsZXRlIFtdIGJ1ZmZlcjsKLX0KLQotI2lmIEhBVkVfWkxJQgotVEVTVF9G
KElvVGVzdCwgR3ppcElvKSB7Ci0gIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IDIqMTAyNDsKLSAg
dWludDgqIGJ1ZmZlciA9IG5ldyB1aW50OFtrQnVmZmVyU2l6ZV07Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwga0Jsb2NrU2l6ZUNvdW50OyBpKyspIHsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGtC
bG9ja1NpemVDb3VudDsgaisrKSB7Ci0gICAgICBmb3IgKGludCB6ID0gMDsgeiA8IGtCbG9ja1Np
emVDb3VudDsgeisrKSB7Ci0gICAgICAgIGludCBnemlwX2J1ZmZlcl9zaXplID0ga0Jsb2NrU2l6
ZXNbel07Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICB7Ci0gICAgICAgICAgQXJyYXlPdXRw
dXRTdHJlYW0gb3V0cHV0KGJ1ZmZlciwga0J1ZmZlclNpemUsIGtCbG9ja1NpemVzW2ldKTsKLSAg
ICAgICAgICBHemlwT3V0cHV0U3RyZWFtOjpPcHRpb25zIG9wdGlvbnM7Ci0gICAgICAgICAgb3B0
aW9ucy5mb3JtYXQgPSBHemlwT3V0cHV0U3RyZWFtOjpHWklQOwotICAgICAgICAgIGlmIChnemlw
X2J1ZmZlcl9zaXplICE9IC0xKSB7Ci0gICAgICAgICAgICBvcHRpb25zLmJ1ZmZlcl9zaXplID0g
Z3ppcF9idWZmZXJfc2l6ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgR3ppcE91dHB1dFN0cmVh
bSBnem91dCgmb3V0cHV0LCBvcHRpb25zKTsKLSAgICAgICAgICBXcml0ZVN0dWZmKCZnem91dCk7
Ci0gICAgICAgICAgZ3pvdXQuQ2xvc2UoKTsKLSAgICAgICAgICBzaXplID0gb3V0cHV0LkJ5dGVD
b3VudCgpOwotICAgICAgICB9Ci0gICAgICAgIHsKLSAgICAgICAgICBBcnJheUlucHV0U3RyZWFt
IGlucHV0KGJ1ZmZlciwgc2l6ZSwga0Jsb2NrU2l6ZXNbal0pOwotICAgICAgICAgIEd6aXBJbnB1
dFN0cmVhbSBnemluKAotICAgICAgICAgICAgICAmaW5wdXQsIEd6aXBJbnB1dFN0cmVhbTo6R1pJ
UCwgZ3ppcF9idWZmZXJfc2l6ZSk7Ci0gICAgICAgICAgUmVhZFN0dWZmKCZnemluKTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICBkZWxldGUgW10gYnVmZmVyOwotfQotCi1URVNU
X0YoSW9UZXN0LCBHemlwSW9XaXRoRmx1c2gpIHsKLSAgY29uc3QgaW50IGtCdWZmZXJTaXplID0g
MioxMDI0OwotICB1aW50OCogYnVmZmVyID0gbmV3IHVpbnQ4W2tCdWZmZXJTaXplXTsKLSAgLy8g
V2Ugc3RhcnQgd2l0aCBpID0gNCBhcyB3ZSB3YW50IGEgYmxvY2sgc2l6ZSA+IDYuIFdpdGggYmxv
Y2sgc2l6ZSA8PSA2Ci0gIC8vIEZsdXNoKCkgZmlsbHMgdXAgdGhlIGVudGlyZSAySyBidWZmZXIg
d2l0aCBmbHVzaCBtYXJrZXJzIGFuZCB0aGUgdGVzdAotICAvLyBmYWlscy4gU2VlIGRvY3VtZW50
YXRpb24gZm9yIEZsdXNoKCkgZm9yIG1vcmUgZGV0YWlsLgotICBmb3IgKGludCBpID0gNDsgaSA8
IGtCbG9ja1NpemVDb3VudDsgaSsrKSB7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBrQmxvY2tT
aXplQ291bnQ7IGorKykgewotICAgICAgZm9yIChpbnQgeiA9IDA7IHogPCBrQmxvY2tTaXplQ291
bnQ7IHorKykgewotICAgICAgICBpbnQgZ3ppcF9idWZmZXJfc2l6ZSA9IGtCbG9ja1NpemVzW3pd
OwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgewotICAgICAgICAgIEFycmF5T3V0cHV0U3Ry
ZWFtIG91dHB1dChidWZmZXIsIGtCdWZmZXJTaXplLCBrQmxvY2tTaXplc1tpXSk7Ci0gICAgICAg
ICAgR3ppcE91dHB1dFN0cmVhbTo6T3B0aW9ucyBvcHRpb25zOwotICAgICAgICAgIG9wdGlvbnMu
Zm9ybWF0ID0gR3ppcE91dHB1dFN0cmVhbTo6R1pJUDsKLSAgICAgICAgICBpZiAoZ3ppcF9idWZm
ZXJfc2l6ZSAhPSAtMSkgewotICAgICAgICAgICAgb3B0aW9ucy5idWZmZXJfc2l6ZSA9IGd6aXBf
YnVmZmVyX3NpemU7Ci0gICAgICAgICAgfQotICAgICAgICAgIEd6aXBPdXRwdXRTdHJlYW0gZ3pv
dXQoJm91dHB1dCwgb3B0aW9ucyk7Ci0gICAgICAgICAgV3JpdGVTdHVmZigmZ3pvdXQpOwotICAg
ICAgICAgIEVYUEVDVF9UUlVFKGd6b3V0LkZsdXNoKCkpOwotICAgICAgICAgIGd6b3V0LkNsb3Nl
KCk7Ci0gICAgICAgICAgc2l6ZSA9IG91dHB1dC5CeXRlQ291bnQoKTsKLSAgICAgICAgfQotICAg
ICAgICB7Ci0gICAgICAgICAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dChidWZmZXIsIHNpemUsIGtC
bG9ja1NpemVzW2pdKTsKLSAgICAgICAgICBHemlwSW5wdXRTdHJlYW0gZ3ppbigKLSAgICAgICAg
ICAgICAgJmlucHV0LCBHemlwSW5wdXRTdHJlYW06OkdaSVAsIGd6aXBfYnVmZmVyX3NpemUpOwot
ICAgICAgICAgIFJlYWRTdHVmZigmZ3ppbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
IH0KLSAgZGVsZXRlIFtdIGJ1ZmZlcjsKLX0KLQotVEVTVF9GKElvVGVzdCwgR3ppcElvQ29udGln
dW91c0ZsdXNoZXMpIHsKLSAgY29uc3QgaW50IGtCdWZmZXJTaXplID0gMioxMDI0OwotICB1aW50
OCogYnVmZmVyID0gbmV3IHVpbnQ4W2tCdWZmZXJTaXplXTsKLQotICBpbnQgYmxvY2tfc2l6ZSA9
IGtCbG9ja1NpemVzWzRdOwotICBpbnQgZ3ppcF9idWZmZXJfc2l6ZSA9IGJsb2NrX3NpemU7Ci0g
IGludCBzaXplOwotCi0gIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIsIGtCdWZmZXJT
aXplLCBibG9ja19zaXplKTsKLSAgR3ppcE91dHB1dFN0cmVhbTo6T3B0aW9ucyBvcHRpb25zOwot
ICBvcHRpb25zLmZvcm1hdCA9IEd6aXBPdXRwdXRTdHJlYW06OkdaSVA7Ci0gIGlmIChnemlwX2J1
ZmZlcl9zaXplICE9IC0xKSB7Ci0gICAgb3B0aW9ucy5idWZmZXJfc2l6ZSA9IGd6aXBfYnVmZmVy
X3NpemU7Ci0gIH0KLSAgR3ppcE91dHB1dFN0cmVhbSBnem91dCgmb3V0cHV0LCBvcHRpb25zKTsK
LSAgV3JpdGVTdHVmZigmZ3pvdXQpOwotICBFWFBFQ1RfVFJVRShnem91dC5GbHVzaCgpKTsKLSAg
RVhQRUNUX1RSVUUoZ3pvdXQuRmx1c2goKSk7Ci0gIGd6b3V0LkNsb3NlKCk7Ci0gIHNpemUgPSBv
dXRwdXQuQnl0ZUNvdW50KCk7Ci0KLSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dChidWZmZXIsIHNp
emUsIGJsb2NrX3NpemUpOwotICBHemlwSW5wdXRTdHJlYW0gZ3ppbigKLSAgICAgICZpbnB1dCwg
R3ppcElucHV0U3RyZWFtOjpHWklQLCBnemlwX2J1ZmZlcl9zaXplKTsKLSAgUmVhZFN0dWZmKCZn
emluKTsKLQotICBkZWxldGUgW10gYnVmZmVyOwotfQotCi1URVNUX0YoSW9UZXN0LCBHemlwSW9S
ZWFkQWZ0ZXJGbHVzaCkgewotICBjb25zdCBpbnQga0J1ZmZlclNpemUgPSAyKjEwMjQ7Ci0gIHVp
bnQ4KiBidWZmZXIgPSBuZXcgdWludDhba0J1ZmZlclNpemVdOwotCi0gIGludCBibG9ja19zaXpl
ID0ga0Jsb2NrU2l6ZXNbNF07Ci0gIGludCBnemlwX2J1ZmZlcl9zaXplID0gYmxvY2tfc2l6ZTsK
LSAgaW50IHNpemU7Ci0gIEFycmF5T3V0cHV0U3RyZWFtIG91dHB1dChidWZmZXIsIGtCdWZmZXJT
aXplLCBibG9ja19zaXplKTsKLSAgR3ppcE91dHB1dFN0cmVhbTo6T3B0aW9ucyBvcHRpb25zOwot
ICBvcHRpb25zLmZvcm1hdCA9IEd6aXBPdXRwdXRTdHJlYW06OkdaSVA7Ci0gIGlmIChnemlwX2J1
ZmZlcl9zaXplICE9IC0xKSB7Ci0gICAgb3B0aW9ucy5idWZmZXJfc2l6ZSA9IGd6aXBfYnVmZmVy
X3NpemU7Ci0gIH0KLQotICBHemlwT3V0cHV0U3RyZWFtIGd6b3V0KCZvdXRwdXQsIG9wdGlvbnMp
OwotICBXcml0ZVN0dWZmKCZnem91dCk7Ci0gIEVYUEVDVF9UUlVFKGd6b3V0LkZsdXNoKCkpOwot
ICBzaXplID0gb3V0cHV0LkJ5dGVDb3VudCgpOwotCi0gIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQo
YnVmZmVyLCBzaXplLCBibG9ja19zaXplKTsKLSAgR3ppcElucHV0U3RyZWFtIGd6aW4oCi0gICAg
ICAmaW5wdXQsIEd6aXBJbnB1dFN0cmVhbTo6R1pJUCwgZ3ppcF9idWZmZXJfc2l6ZSk7Ci0gIFJl
YWRTdHVmZigmZ3ppbik7Ci0KLSAgZ3pvdXQuQ2xvc2UoKTsKLQotICBkZWxldGUgW10gYnVmZmVy
OwotfQotCi1URVNUX0YoSW9UZXN0LCBabGliSW8pIHsKLSAgY29uc3QgaW50IGtCdWZmZXJTaXpl
ID0gMioxMDI0OwotICB1aW50OCogYnVmZmVyID0gbmV3IHVpbnQ4W2tCdWZmZXJTaXplXTsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBrQmxvY2tTaXplQ291bnQ7IGkrKykgewotICAgIGZvciAoaW50
IGogPSAwOyBqIDwga0Jsb2NrU2l6ZUNvdW50OyBqKyspIHsKLSAgICAgIGZvciAoaW50IHogPSAw
OyB6IDwga0Jsb2NrU2l6ZUNvdW50OyB6KyspIHsKLSAgICAgICAgaW50IGd6aXBfYnVmZmVyX3Np
emUgPSBrQmxvY2tTaXplc1t6XTsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIHsKLSAgICAg
ICAgICBBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQoYnVmZmVyLCBrQnVmZmVyU2l6ZSwga0Jsb2Nr
U2l6ZXNbaV0pOwotICAgICAgICAgIEd6aXBPdXRwdXRTdHJlYW06Ok9wdGlvbnMgb3B0aW9uczsK
LSAgICAgICAgICBvcHRpb25zLmZvcm1hdCA9IEd6aXBPdXRwdXRTdHJlYW06OlpMSUI7Ci0gICAg
ICAgICAgaWYgKGd6aXBfYnVmZmVyX3NpemUgIT0gLTEpIHsKLSAgICAgICAgICAgIG9wdGlvbnMu
YnVmZmVyX3NpemUgPSBnemlwX2J1ZmZlcl9zaXplOwotICAgICAgICAgIH0KLSAgICAgICAgICBH
emlwT3V0cHV0U3RyZWFtIGd6b3V0KCZvdXRwdXQsIG9wdGlvbnMpOwotICAgICAgICAgIFdyaXRl
U3R1ZmYoJmd6b3V0KTsKLSAgICAgICAgICBnem91dC5DbG9zZSgpOwotICAgICAgICAgIHNpemUg
PSBvdXRwdXQuQnl0ZUNvdW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgewotICAgICAgICAgIEFy
cmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVmZmVyLCBzaXplLCBrQmxvY2tTaXplc1tqXSk7Ci0gICAg
ICAgICAgR3ppcElucHV0U3RyZWFtIGd6aW4oCi0gICAgICAgICAgICAgICZpbnB1dCwgR3ppcElu
cHV0U3RyZWFtOjpaTElCLCBnemlwX2J1ZmZlcl9zaXplKTsKLSAgICAgICAgICBSZWFkU3R1ZmYo
Jmd6aW4pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGRlbGV0ZSBbXSBidWZm
ZXI7Ci19Ci0KLVRFU1RfRihJb1Rlc3QsIFpsaWJJb0lucHV0QXV0b2RldGVjdCkgewotICBjb25z
dCBpbnQga0J1ZmZlclNpemUgPSAyKjEwMjQ7Ci0gIHVpbnQ4KiBidWZmZXIgPSBuZXcgdWludDhb
a0J1ZmZlclNpemVdOwotICBpbnQgc2l6ZTsKLSAgewotICAgIEFycmF5T3V0cHV0U3RyZWFtIG91
dHB1dChidWZmZXIsIGtCdWZmZXJTaXplKTsKLSAgICBHemlwT3V0cHV0U3RyZWFtOjpPcHRpb25z
IG9wdGlvbnM7Ci0gICAgb3B0aW9ucy5mb3JtYXQgPSBHemlwT3V0cHV0U3RyZWFtOjpaTElCOwot
ICAgIEd6aXBPdXRwdXRTdHJlYW0gZ3pvdXQoJm91dHB1dCwgb3B0aW9ucyk7Ci0gICAgV3JpdGVT
dHVmZigmZ3pvdXQpOwotICAgIGd6b3V0LkNsb3NlKCk7Ci0gICAgc2l6ZSA9IG91dHB1dC5CeXRl
Q291bnQoKTsKLSAgfQotICB7Ci0gICAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dChidWZmZXIsIHNp
emUpOwotICAgIEd6aXBJbnB1dFN0cmVhbSBnemluKCZpbnB1dCwgR3ppcElucHV0U3RyZWFtOjpB
VVRPKTsKLSAgICBSZWFkU3R1ZmYoJmd6aW4pOwotICB9Ci0gIHsKLSAgICBBcnJheU91dHB1dFN0
cmVhbSBvdXRwdXQoYnVmZmVyLCBrQnVmZmVyU2l6ZSk7Ci0gICAgR3ppcE91dHB1dFN0cmVhbTo6
T3B0aW9ucyBvcHRpb25zOwotICAgIG9wdGlvbnMuZm9ybWF0ID0gR3ppcE91dHB1dFN0cmVhbTo6
R1pJUDsKLSAgICBHemlwT3V0cHV0U3RyZWFtIGd6b3V0KCZvdXRwdXQsIG9wdGlvbnMpOwotICAg
IFdyaXRlU3R1ZmYoJmd6b3V0KTsKLSAgICBnem91dC5DbG9zZSgpOwotICAgIHNpemUgPSBvdXRw
dXQuQnl0ZUNvdW50KCk7Ci0gIH0KLSAgewotICAgIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoYnVm
ZmVyLCBzaXplKTsKLSAgICBHemlwSW5wdXRTdHJlYW0gZ3ppbigmaW5wdXQsIEd6aXBJbnB1dFN0
cmVhbTo6QVVUTyk7Ci0gICAgUmVhZFN0dWZmKCZnemluKTsKLSAgfQotICBkZWxldGUgW10gYnVm
ZmVyOwotfQotCi1zdHJpbmcgSW9UZXN0OjpDb21wcmVzcyhjb25zdCBzdHJpbmcmIGRhdGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHemlwT3V0cHV0U3RyZWFtOjpPcHRpb25zJiBv
cHRpb25zKSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0gIHsKLSAgICBTdHJpbmdPdXRwdXRTdHJlYW0g
b3V0cHV0KCZyZXN1bHQpOwotICAgIEd6aXBPdXRwdXRTdHJlYW0gZ3pvdXQoJm91dHB1dCwgb3B0
aW9ucyk7Ci0gICAgV3JpdGVUb091dHB1dCgmZ3pvdXQsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUo
KSk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RyaW5nIElvVGVzdDo6VW5jb21wcmVz
cyhjb25zdCBzdHJpbmcmIGRhdGEpIHsKLSAgc3RyaW5nIHJlc3VsdDsKLSAgewotICAgIEFycmF5
SW5wdXRTdHJlYW0gaW5wdXQoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgICBHemlwSW5w
dXRTdHJlYW0gZ3ppbigmaW5wdXQpOwotICAgIGNvbnN0IHZvaWQqIGJ1ZmZlcjsKLSAgICBpbnQg
c2l6ZTsKLSAgICB3aGlsZSAoZ3ppbi5OZXh0KCZidWZmZXIsICZzaXplKSkgewotICAgICAgcmVz
dWx0LmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCBzaXplKTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotVEVTVF9GKElvVGVzdCwgQ29tcHJl
c3Npb25PcHRpb25zKSB7Ci0gIC8vIFNvbWUgYWQtaG9jIHRlc3Rpbmcgb2YgY29tcHJlc3Npb24g
b3B0aW9ucy4KLQotICBzdHJpbmcgZ29sZGVuOwotICBHT09HTEVfQ0hFQ0tfT0soRmlsZTo6R2V0
Q29udGVudHMoCi0gICAgICBUZXN0U291cmNlRGlyKCkgKwotICAgICAgICAgICIvZ29vZ2xlL3By
b3RvYnVmL3Rlc3RkYXRhL2dvbGRlbl9tZXNzYWdlIiwKLSAgICAgICZnb2xkZW4sIHRydWUpKTsK
LQotICBHemlwT3V0cHV0U3RyZWFtOjpPcHRpb25zIG9wdGlvbnM7Ci0gIHN0cmluZyBnemlwX2Nv
bXByZXNzZWQgPSBDb21wcmVzcyhnb2xkZW4sIG9wdGlvbnMpOwotCi0gIG9wdGlvbnMuY29tcHJl
c3Npb25fbGV2ZWwgPSAwOwotICBzdHJpbmcgbm90X2NvbXByZXNzZWQgPSBDb21wcmVzcyhnb2xk
ZW4sIG9wdGlvbnMpOwotCi0gIC8vIFRyeSB6bGliIGNvbXByZXNzaW9uIGZvciBmdW4uCi0gIG9w
dGlvbnMgPSBHemlwT3V0cHV0U3RyZWFtOjpPcHRpb25zKCk7Ci0gIG9wdGlvbnMuZm9ybWF0ID0g
R3ppcE91dHB1dFN0cmVhbTo6WkxJQjsKLSAgc3RyaW5nIHpsaWJfY29tcHJlc3NlZCA9IENvbXBy
ZXNzKGdvbGRlbiwgb3B0aW9ucyk7Ci0KLSAgLy8gVW5jb21wcmVzc2VkIHNob3VsZCBiZSBiaWdn
ZXIgdGhhbiB0aGUgb3JpZ2luYWwgc2luY2UgaXQgc2hvdWxkIGhhdmUgc29tZQotICAvLyBzb3J0
IG9mIGhlYWRlci4KLSAgRVhQRUNUX0dUKG5vdF9jb21wcmVzc2VkLnNpemUoKSwgZ29sZGVuLnNp
emUoKSk7Ci0KLSAgLy8gSGlnaGVyIGNvbXByZXNzaW9uIGxldmVscyBzaG91bGQgcmVzdWx0IGlu
IHNtYWxsZXIgc2l6ZXMuCi0gIEVYUEVDVF9MVCh6bGliX2NvbXByZXNzZWQuc2l6ZSgpLCBub3Rf
Y29tcHJlc3NlZC5zaXplKCkpOwotCi0gIC8vIFpMSUIgZm9ybWF0IHNob3VsZCBkaWZmZXIgZnJv
bSBHWklQIGZvcm1hdC4KLSAgRVhQRUNUX1RSVUUoemxpYl9jb21wcmVzc2VkICE9IGd6aXBfY29t
cHJlc3NlZCk7Ci0KLSAgLy8gRXZlcnl0aGluZyBzaG91bGQgZGVjb21wcmVzcyBjb3JyZWN0bHku
Ci0gIEVYUEVDVF9UUlVFKFVuY29tcHJlc3Mobm90X2NvbXByZXNzZWQpID09IGdvbGRlbik7Ci0g
IEVYUEVDVF9UUlVFKFVuY29tcHJlc3MoZ3ppcF9jb21wcmVzc2VkKSA9PSBnb2xkZW4pOwotICBF
WFBFQ1RfVFJVRShVbmNvbXByZXNzKHpsaWJfY29tcHJlc3NlZCkgPT0gZ29sZGVuKTsKLX0KLQot
VEVTVF9GKElvVGVzdCwgVHdvU2Vzc2lvbldyaXRlR3ppcCkgewotICAvLyBUZXN0IHRoYXQgdHdv
IGNvbmNhdGVuYXRlZCBnemlwIHN0cmVhbXMgY2FuIGJlIHJlYWQgY29ycmVjdGx5Ci0KLSAgc3Rh
dGljIGNvbnN0IGNoYXIqIHN0ckEgPSAiMDEyMzQ1Njc4OSI7Ci0gIHN0YXRpYyBjb25zdCBjaGFy
KiBzdHJCID0gIlF1aWNrQnJvd25Gb3giOwotICBjb25zdCBpbnQga0J1ZmZlclNpemUgPSAyKjEw
MjQ7Ci0gIHVpbnQ4KiBidWZmZXIgPSBuZXcgdWludDhba0J1ZmZlclNpemVdOwotICBjaGFyKiB0
ZW1wX2J1ZmZlciA9IG5ldyBjaGFyWzQwXTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGtCbG9j
a1NpemVDb3VudDsgaSsrKSB7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBrQmxvY2tTaXplQ291
bnQ7IGorKykgewotICAgICAgQXJyYXlPdXRwdXRTdHJlYW0qIG91dHB1dCA9Ci0gICAgICAgICAg
bmV3IEFycmF5T3V0cHV0U3RyZWFtKGJ1ZmZlciwga0J1ZmZlclNpemUsIGtCbG9ja1NpemVzW2ld
KTsKLSAgICAgIEd6aXBPdXRwdXRTdHJlYW0qIGd6b3V0ID0gbmV3IEd6aXBPdXRwdXRTdHJlYW0o
b3V0cHV0KTsKLSAgICAgIENvZGVkT3V0cHV0U3RyZWFtKiBjb2RlZF9vdXRwdXQgPSBuZXcgQ29k
ZWRPdXRwdXRTdHJlYW0oZ3pvdXQpOwotICAgICAgaW50MzIgb3V0bGVuID0gc3RybGVuKHN0ckEp
ICsgMTsKLSAgICAgIGNvZGVkX291dHB1dC0+V3JpdGVWYXJpbnQzMihvdXRsZW4pOwotICAgICAg
Y29kZWRfb3V0cHV0LT5Xcml0ZVJhdyhzdHJBLCBvdXRsZW4pOwotICAgICAgZGVsZXRlIGNvZGVk
X291dHB1dDsgIC8vIGZsdXNoCi0gICAgICBkZWxldGUgZ3pvdXQ7ICAvLyBmbHVzaAotICAgICAg
aW50NjQgcG9zID0gb3V0cHV0LT5CeXRlQ291bnQoKTsKLSAgICAgIGRlbGV0ZSBvdXRwdXQ7Ci0g
ICAgICBvdXRwdXQgPSBuZXcgQXJyYXlPdXRwdXRTdHJlYW0oCi0gICAgICAgICAgYnVmZmVyICsg
cG9zLCBrQnVmZmVyU2l6ZSAtIHBvcywga0Jsb2NrU2l6ZXNbaV0pOwotICAgICAgZ3pvdXQgPSBu
ZXcgR3ppcE91dHB1dFN0cmVhbShvdXRwdXQpOwotICAgICAgY29kZWRfb3V0cHV0ID0gbmV3IENv
ZGVkT3V0cHV0U3RyZWFtKGd6b3V0KTsKLSAgICAgIG91dGxlbiA9IHN0cmxlbihzdHJCKSArIDE7
Ci0gICAgICBjb2RlZF9vdXRwdXQtPldyaXRlVmFyaW50MzIob3V0bGVuKTsKLSAgICAgIGNvZGVk
X291dHB1dC0+V3JpdGVSYXcoc3RyQiwgb3V0bGVuKTsKLSAgICAgIGRlbGV0ZSBjb2RlZF9vdXRw
dXQ7ICAvLyBmbHVzaAotICAgICAgZGVsZXRlIGd6b3V0OyAgLy8gZmx1c2gKLSAgICAgIGludDY0
IHNpemUgPSBwb3MgKyBvdXRwdXQtPkJ5dGVDb3VudCgpOwotICAgICAgZGVsZXRlIG91dHB1dDsK
LQotICAgICAgQXJyYXlJbnB1dFN0cmVhbSogaW5wdXQgPQotICAgICAgICAgIG5ldyBBcnJheUlu
cHV0U3RyZWFtKGJ1ZmZlciwgc2l6ZSwga0Jsb2NrU2l6ZXNbal0pOwotICAgICAgR3ppcElucHV0
U3RyZWFtKiBnemluID0gbmV3IEd6aXBJbnB1dFN0cmVhbShpbnB1dCk7Ci0gICAgICBDb2RlZElu
cHV0U3RyZWFtKiBjb2RlZF9pbnB1dCA9IG5ldyBDb2RlZElucHV0U3RyZWFtKGd6aW4pOwotICAg
ICAgdWludDMyIGluc2l6ZTsKLSAgICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LT5SZWFkVmFy
aW50MzIoJmluc2l6ZSkpOwotICAgICAgRVhQRUNUX0VRKHN0cmxlbihzdHJBKSArIDEsIGluc2l6
ZSk7Ci0gICAgICBFWFBFQ1RfVFJVRShjb2RlZF9pbnB1dC0+UmVhZFJhdyh0ZW1wX2J1ZmZlciwg
aW5zaXplKSk7Ci0gICAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKHRlbXBfYnVmZmVyLCBzdHJBLCBp
bnNpemUpKQotICAgICAgICAgIDw8ICJzdHJBPSIgPDwgc3RyQSA8PCAiIGluPSIgPDwgdGVtcF9i
dWZmZXI7Ci0KLSAgICAgIEVYUEVDVF9UUlVFKGNvZGVkX2lucHV0LT5SZWFkVmFyaW50MzIoJmlu
c2l6ZSkpOwotICAgICAgRVhQRUNUX0VRKHN0cmxlbihzdHJCKSArIDEsIGluc2l6ZSk7Ci0gICAg
ICBFWFBFQ1RfVFJVRShjb2RlZF9pbnB1dC0+UmVhZFJhdyh0ZW1wX2J1ZmZlciwgaW5zaXplKSk7
Ci0gICAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKHRlbXBfYnVmZmVyLCBzdHJCLCBpbnNpemUpKQot
ICAgICAgICAgIDw8ICIgb3V0X2Jsb2NrX3NpemU9IiA8PCBrQmxvY2tTaXplc1tpXQotICAgICAg
ICAgIDw8ICIgaW5fYmxvY2tfc2l6ZT0iIDw8IGtCbG9ja1NpemVzW2pdCi0gICAgICAgICAgPDwg
IiBwb3M9IiA8PCBwb3MKLSAgICAgICAgICA8PCAiIHNpemU9IiA8PCBzaXplCi0gICAgICAgICAg
PDwgIiBzdHJCPSIgPDwgc3RyQiA8PCAiIGluPSIgPDwgdGVtcF9idWZmZXI7Ci0KLSAgICAgIGRl
bGV0ZSBjb2RlZF9pbnB1dDsKLSAgICAgIGRlbGV0ZSBnemluOwotICAgICAgZGVsZXRlIGlucHV0
OwotICAgIH0KLSAgfQotCi0gIGRlbGV0ZSBbXSB0ZW1wX2J1ZmZlcjsKLSAgZGVsZXRlIFtdIGJ1
ZmZlcjsKLX0KLQotVEVTVF9GKElvVGVzdCwgR3ppcElucHV0Qnl0ZUNvdW50QWZ0ZXJDbG9zZWQp
IHsKLSAgc3RyaW5nIGdvbGRlbiA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Ci0gIHN0
cmluZyBjb21wcmVzc2VkID0gQ29tcHJlc3MoZ29sZGVuLCBHemlwT3V0cHV0U3RyZWFtOjpPcHRp
b25zKCkpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwga0Jsb2NrU2l6ZUNvdW50OyBpKyspIHsK
LSAgICBBcnJheUlucHV0U3RyZWFtIGFycl9pbnB1dChjb21wcmVzc2VkLmRhdGEoKSwgY29tcHJl
c3NlZC5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0Jsb2NrU2l6ZXNb
aV0pOwotICAgIEd6aXBJbnB1dFN0cmVhbSBnel9pbnB1dCgmYXJyX2lucHV0KTsKLSAgICBjb25z
dCB2b2lkKiBidWZmZXI7Ci0gICAgaW50IHNpemU7Ci0gICAgd2hpbGUgKGd6X2lucHV0Lk5leHQo
JmJ1ZmZlciwgJnNpemUpKSB7Ci0gICAgICBFWFBFQ1RfTEUoZ3pfaW5wdXQuQnl0ZUNvdW50KCks
IGdvbGRlbi5zaXplKCkpOwotICAgIH0KLSAgICBFWFBFQ1RfRVEoZ29sZGVuLnNpemUoKSwgZ3pf
aW5wdXQuQnl0ZUNvdW50KCkpOwotICB9Ci19Ci0KLVRFU1RfRihJb1Rlc3QsIEd6aXBJbnB1dEJ5
dGVDb3VudEFmdGVyQ2xvc2VkQ29uY2F0ZW5hdGVkU3RyZWFtcykgewotICBzdHJpbmcgZ29sZGVu
MSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Ci0gIHN0cmluZyBnb2xkZW4yID0gInRo
ZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2ciOwotICBjb25zdCBzaXpl
X3QgdG90YWxfc2l6ZSA9IGdvbGRlbjEuc2l6ZSgpICsgZ29sZGVuMi5zaXplKCk7Ci0gIHN0cmlu
ZyBjb21wcmVzc2VkID0gQ29tcHJlc3MoZ29sZGVuMSwgR3ppcE91dHB1dFN0cmVhbTo6T3B0aW9u
cygpKSArCi0gICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3MoZ29sZGVuMiwgR3ppcE91dHB1
dFN0cmVhbTo6T3B0aW9ucygpKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGtCbG9ja1NpemVD
b3VudDsgaSsrKSB7Ci0gICAgQXJyYXlJbnB1dFN0cmVhbSBhcnJfaW5wdXQoY29tcHJlc3NlZC5k
YXRhKCksIGNvbXByZXNzZWQuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtCbG9ja1NpemVzW2ldKTsKLSAgICBHemlwSW5wdXRTdHJlYW0gZ3pfaW5wdXQoJmFycl9pbnB1
dCk7Ci0gICAgY29uc3Qgdm9pZCogYnVmZmVyOwotICAgIGludCBzaXplOwotICAgIHdoaWxlIChn
el9pbnB1dC5OZXh0KCZidWZmZXIsICZzaXplKSkgewotICAgICAgRVhQRUNUX0xFKGd6X2lucHV0
LkJ5dGVDb3VudCgpLCB0b3RhbF9zaXplKTsKLSAgICB9Ci0gICAgRVhQRUNUX0VRKHRvdGFsX3Np
emUsIGd6X2lucHV0LkJ5dGVDb3VudCgpKTsKLSAgfQotfQotI2VuZGlmCi0KLS8vIFRoZXJlIGlz
IG5vIHN0cmluZyBpbnB1dCwgb25seSBzdHJpbmcgb3V0cHV0LiAgQWxzbywgaXQgZG9lc24ndCBz
dXBwb3J0Ci0vLyBleHBsaWNpdCBibG9jayBzaXplcy4gIFNvLCB3ZSdsbCBvbmx5IHJ1biBvbmUg
dGVzdCBhbmQgd2UnbGwgdXNlCi0vLyBBcnJheUlucHV0IHRvIHJlYWQgYmFjayB0aGUgcmVzdWx0
cy4KLVRFU1RfRihJb1Rlc3QsIFN0cmluZ0lvKSB7Ci0gIHN0cmluZyBzdHI7Ci0gIHsKLSAgICBT
dHJpbmdPdXRwdXRTdHJlYW0gb3V0cHV0KCZzdHIpOwotICAgIFdyaXRlU3R1ZmYoJm91dHB1dCk7
Ci0gIH0KLSAgewotICAgIEFycmF5SW5wdXRTdHJlYW0gaW5wdXQoc3RyLmRhdGEoKSwgc3RyLnNp
emUoKSk7Ci0gICAgUmVhZFN0dWZmKCZpbnB1dCk7Ci0gIH0KLX0KLQotCi0vLyBUbyB0ZXN0IGZp
bGVzLCB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSwgd3JpdGUsIHJlYWQsIHRydW5jYXRlLCBy
ZXBlYXQuCi1URVNUX0YoSW9UZXN0LCBGaWxlSW8pIHsKLSAgc3RyaW5nIGZpbGVuYW1lID0gVGVz
dFRlbXBEaXIoKSArICIvemVyb19jb3B5X3N0cmVhbV90ZXN0X2ZpbGUiOwotCi0gIGZvciAoaW50
IGkgPSAwOyBpIDwga0Jsb2NrU2l6ZUNvdW50OyBpKyspIHsKLSAgICBmb3IgKGludCBqID0gMDsg
aiA8IGtCbG9ja1NpemVDb3VudDsgaisrKSB7Ci0gICAgICAvLyBNYWtlIGEgdGVtcG9yYXJ5IGZp
bGUuCi0gICAgICBpbnQgZmlsZSA9Ci0gICAgICAgIG9wZW4oZmlsZW5hbWUuY19zdHIoKSwgT19S
RFdSIHwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX0JJTkFSWSwgMDc3Nyk7Ci0gICAgICBBU1NFUlRf
R0UoZmlsZSwgMCk7Ci0KLSAgICAgIHsKLSAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBvdXRwdXQo
ZmlsZSwga0Jsb2NrU2l6ZXNbaV0pOwotICAgICAgICBXcml0ZVN0dWZmKCZvdXRwdXQpOwotICAg
ICAgICBFWFBFQ1RfRVEoMCwgb3V0cHV0LkdldEVycm5vKCkpOwotICAgICAgfQotCi0gICAgICAv
LyBSZXdpbmQuCi0gICAgICBBU1NFUlRfTkUobHNlZWsoZmlsZSwgMCwgU0VFS19TRVQpLCAob2Zm
X3QpLTEpOwotCi0gICAgICB7Ci0gICAgICAgIEZpbGVJbnB1dFN0cmVhbSBpbnB1dChmaWxlLCBr
QmxvY2tTaXplc1tqXSk7Ci0gICAgICAgIFJlYWRTdHVmZigmaW5wdXQpOwotICAgICAgICBFWFBF
Q1RfRVEoMCwgaW5wdXQuR2V0RXJybm8oKSk7Ci0gICAgICB9Ci0KLSAgICAgIGNsb3NlKGZpbGUp
OwotICAgIH0KLSAgfQotfQotCi0jaWYgSEFWRV9aTElCCi1URVNUX0YoSW9UZXN0LCBHemlwRmls
ZUlvKSB7Ci0gIHN0cmluZyBmaWxlbmFtZSA9IFRlc3RUZW1wRGlyKCkgKyAiL3plcm9fY29weV9z
dHJlYW1fdGVzdF9maWxlIjsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGtCbG9ja1NpemVDb3Vu
dDsgaSsrKSB7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBrQmxvY2tTaXplQ291bnQ7IGorKykg
ewotICAgICAgLy8gTWFrZSBhIHRlbXBvcmFyeSBmaWxlLgotICAgICAgaW50IGZpbGUgPQotICAg
ICAgICBvcGVuKGZpbGVuYW1lLmNfc3RyKCksIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DIHwg
T19CSU5BUlksIDA3NzcpOwotICAgICAgQVNTRVJUX0dFKGZpbGUsIDApOwotICAgICAgewotICAg
ICAgICBGaWxlT3V0cHV0U3RyZWFtIG91dHB1dChmaWxlLCBrQmxvY2tTaXplc1tpXSk7Ci0gICAg
ICAgIEd6aXBPdXRwdXRTdHJlYW0gZ3pvdXQoJm91dHB1dCk7Ci0gICAgICAgIFdyaXRlU3R1ZmZM
YXJnZSgmZ3pvdXQpOwotICAgICAgICBnem91dC5DbG9zZSgpOwotICAgICAgICBvdXRwdXQuRmx1
c2goKTsKLSAgICAgICAgRVhQRUNUX0VRKDAsIG91dHB1dC5HZXRFcnJubygpKTsKLSAgICAgIH0K
LQotICAgICAgLy8gUmV3aW5kLgotICAgICAgQVNTRVJUX05FKGxzZWVrKGZpbGUsIDAsIFNFRUtf
U0VUKSwgKG9mZl90KS0xKTsKLQotICAgICAgewotICAgICAgICBGaWxlSW5wdXRTdHJlYW0gaW5w
dXQoZmlsZSwga0Jsb2NrU2l6ZXNbal0pOwotICAgICAgICBHemlwSW5wdXRTdHJlYW0gZ3ppbigm
aW5wdXQpOwotICAgICAgICBSZWFkU3R1ZmZMYXJnZSgmZ3ppbik7Ci0gICAgICAgIEVYUEVDVF9F
USgwLCBpbnB1dC5HZXRFcnJubygpKTsKLSAgICAgIH0KLQotICAgICAgY2xvc2UoZmlsZSk7Ci0g
ICAgfQotICB9Ci19Ci0jZW5kaWYKLQotLy8gTVNWQyByYWlzZXMgdmFyaW91cyBkZWJ1Z2dpbmcg
ZXhjZXB0aW9ucyBpZiB3ZSB0cnkgdG8gdXNlIGEgZmlsZQotLy8gZGVzY3JpcHRvciBvZiAtMSwg
ZGVmZWF0aW5nIG91ciB0ZXN0cyBiZWxvdy4gIFRoaXMgY2xhc3Mgd2lsbCBkaXNhYmxlCi0vLyB0
aGVzZSBkZWJ1ZyBhc3NlcnRpb25zIHdoaWxlIGluIHNjb3BlLgotY2xhc3MgTXN2Y0RlYnVnRGlz
YWJsZXIgewotIHB1YmxpYzoKLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAx
NDAwCi0gIE1zdmNEZWJ1Z0Rpc2FibGVyKCkgewotICAgIG9sZF9oYW5kbGVyXyA9IF9zZXRfaW52
YWxpZF9wYXJhbWV0ZXJfaGFuZGxlcihNeUhhbmRsZXIpOwotICAgIG9sZF9tb2RlXyA9IF9DcnRT
ZXRSZXBvcnRNb2RlKF9DUlRfQVNTRVJULCAwKTsKLSAgfQotICB+TXN2Y0RlYnVnRGlzYWJsZXIo
KSB7Ci0gICAgb2xkX2hhbmRsZXJfID0gX3NldF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyKG9s
ZF9oYW5kbGVyXyk7Ci0gICAgb2xkX21vZGVfID0gX0NydFNldFJlcG9ydE1vZGUoX0NSVF9BU1NF
UlQsIG9sZF9tb2RlXyk7Ci0gIH0KLQotICBzdGF0aWMgdm9pZCBNeUhhbmRsZXIoY29uc3Qgd2No
YXJfdCAqZXhwciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKmZ1bmMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICpmaWxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICB1aW50cHRyX3QgcFJlc2VydmVkKSB7Ci0gICAgLy8gZG8gbm90aGluZwotICB9Ci0KLSAgX2lu
dmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIgb2xkX2hhbmRsZXJfOwotICBpbnQgb2xkX21vZGVfOwot
I2Vsc2UKLSAgLy8gRHVtbXkgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgdG8gZW5zdXJlIHRo
YXQgR0NDIGRvZXNuJ3QgY29tcGxhaW4KLSAgLy8gdGhhdCBkZWJ1Z19kaXNhYmxlciBpcyBhbiB1
bnVzZWQgdmFyaWFibGUuCi0gIE1zdmNEZWJ1Z0Rpc2FibGVyKCkge30KLSAgfk1zdmNEZWJ1Z0Rp
c2FibGVyKCkge30KLSNlbmRpZgotfTsKLQotLy8gVGVzdCB0aGF0IEZpbGVJbnB1dFN0cmVhbXMg
cmVwb3J0IGVycm9ycyBjb3JyZWN0bHkuCi1URVNUX0YoSW9UZXN0LCBGaWxlUmVhZEVycm9yKSB7
Ci0gIE1zdmNEZWJ1Z0Rpc2FibGVyIGRlYnVnX2Rpc2FibGVyOwotCi0gIC8vIC0xID0gaW52YWxp
ZCBmaWxlIGRlc2NyaXB0b3IuCi0gIEZpbGVJbnB1dFN0cmVhbSBpbnB1dCgtMSk7Ci0KLSAgY29u
c3Qgdm9pZCogYnVmZmVyOwotICBpbnQgc2l6ZTsKLSAgRVhQRUNUX0ZBTFNFKGlucHV0Lk5leHQo
JmJ1ZmZlciwgJnNpemUpKTsKLSAgRVhQRUNUX0VRKEVCQURGLCBpbnB1dC5HZXRFcnJubygpKTsK
LX0KLQotLy8gVGVzdCB0aGF0IEZpbGVPdXRwdXRTdHJlYW1zIHJlcG9ydCBlcnJvcnMgY29ycmVj
dGx5LgotVEVTVF9GKElvVGVzdCwgRmlsZVdyaXRlRXJyb3IpIHsKLSAgTXN2Y0RlYnVnRGlzYWJs
ZXIgZGVidWdfZGlzYWJsZXI7Ci0KLSAgLy8gLTEgPSBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvci4K
LSAgRmlsZU91dHB1dFN0cmVhbSBpbnB1dCgtMSk7Ci0KLSAgdm9pZCogYnVmZmVyOwotICBpbnQg
c2l6ZTsKLQotICAvLyBUaGUgZmlyc3QgY2FsbCB0byBOZXh0KCkgc3VjY2VlZHMgYmVjYXVzZSBp
dCBkb2Vzbid0IGhhdmUgYW55dGhpbmcgdG8KLSAgLy8gd3JpdGUgeWV0LgotICBFWFBFQ1RfVFJV
RShpbnB1dC5OZXh0KCZidWZmZXIsICZzaXplKSk7Ci0KLSAgLy8gU2Vjb25kIGNhbGwgZmFpbHMu
Ci0gIEVYUEVDVF9GQUxTRShpbnB1dC5OZXh0KCZidWZmZXIsICZzaXplKSk7Ci0KLSAgRVhQRUNU
X0VRKEVCQURGLCBpbnB1dC5HZXRFcnJubygpKTsKLX0KLQotLy8gUGlwZXMgYXJlIG5vdCBzZWVr
YWJsZSwgc28gRmlsZXtJbnB1dCxPdXRwdXR9U3RyZWFtIGVuZHMgdXAgZG9pbmcgc29tZQotLy8g
ZGlmZmVyZW50IHRoaW5ncyB0byBoYW5kbGUgdGhlbS4gIFdlJ2xsIHRlc3QgYnkgd3JpdGluZyB0
byBhIHBpcGUgYW5kCi0vLyByZWFkaW5nIGJhY2sgZnJvbSBpdC4KLVRFU1RfRihJb1Rlc3QsIFBp
cGVJbykgewotICBpbnQgZmlsZXNbMl07Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrQmxvY2tT
aXplQ291bnQ7IGkrKykgewotICAgIGZvciAoaW50IGogPSAwOyBqIDwga0Jsb2NrU2l6ZUNvdW50
OyBqKyspIHsKLSAgICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IHBpcGUgZWFjaCB0aW1lIGJl
Y2F1c2UgUmVhZFN0dWZmKCkgZXhwZWN0cwotICAgICAgLy8gdG8gc2VlIEVPRiBhdCB0aGUgZW5k
LgotICAgICAgQVNTRVJUX0VRKHBpcGUoZmlsZXMpLCAwKTsKLQotICAgICAgewotICAgICAgICBG
aWxlT3V0cHV0U3RyZWFtIG91dHB1dChmaWxlc1sxXSwga0Jsb2NrU2l6ZXNbaV0pOwotICAgICAg
ICBXcml0ZVN0dWZmKCZvdXRwdXQpOwotICAgICAgICBFWFBFQ1RfRVEoMCwgb3V0cHV0LkdldEVy
cm5vKCkpOwotICAgICAgfQotICAgICAgY2xvc2UoZmlsZXNbMV0pOyAgLy8gU2VuZCBFT0YuCi0K
LSAgICAgIHsKLSAgICAgICAgRmlsZUlucHV0U3RyZWFtIGlucHV0KGZpbGVzWzBdLCBrQmxvY2tT
aXplc1tqXSk7Ci0gICAgICAgIFJlYWRTdHVmZigmaW5wdXQpOwotICAgICAgICBFWFBFQ1RfRVEo
MCwgaW5wdXQuR2V0RXJybm8oKSk7Ci0gICAgICB9Ci0gICAgICBjbG9zZShmaWxlc1swXSk7Ci0g
ICAgfQotICB9Ci19Ci0KLS8vIFRlc3QgdXNpbmcgQysrIGlvc3RyZWFtcy4KLVRFU1RfRihJb1Rl
c3QsIElvc3RyZWFtSW8pIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrQmxvY2tTaXplQ291bnQ7
IGkrKykgewotICAgIGZvciAoaW50IGogPSAwOyBqIDwga0Jsb2NrU2l6ZUNvdW50OyBqKyspIHsK
LSAgICAgIHsKLSAgICAgICAgc3RyaW5nc3RyZWFtIHN0cmVhbTsKLQotICAgICAgICB7Ci0gICAg
ICAgICAgT3N0cmVhbU91dHB1dFN0cmVhbSBvdXRwdXQoJnN0cmVhbSwga0Jsb2NrU2l6ZXNbaV0p
OwotICAgICAgICAgIFdyaXRlU3R1ZmYoJm91dHB1dCk7Ci0gICAgICAgICAgRVhQRUNUX0ZBTFNF
KHN0cmVhbS5mYWlsKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgIElzdHJl
YW1JbnB1dFN0cmVhbSBpbnB1dCgmc3RyZWFtLCBrQmxvY2tTaXplc1tqXSk7Ci0gICAgICAgICAg
UmVhZFN0dWZmKCZpbnB1dCk7Ci0gICAgICAgICAgRVhQRUNUX1RSVUUoc3RyZWFtLmVvZigpKTsK
LSAgICAgICAgfQotICAgICAgfQotCi0gICAgICB7Ci0gICAgICAgIHN0cmluZ3N0cmVhbSBzdHJl
YW07Ci0KLSAgICAgICAgewotICAgICAgICAgIE9zdHJlYW1PdXRwdXRTdHJlYW0gb3V0cHV0KCZz
dHJlYW0sIGtCbG9ja1NpemVzW2ldKTsKLSAgICAgICAgICBXcml0ZVN0dWZmTGFyZ2UoJm91dHB1
dCk7Ci0gICAgICAgICAgRVhQRUNUX0ZBTFNFKHN0cmVhbS5mYWlsKCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgewotICAgICAgICAgIElzdHJlYW1JbnB1dFN0cmVhbSBpbnB1dCgmc3RyZWFtLCBr
QmxvY2tTaXplc1tqXSk7Ci0gICAgICAgICAgUmVhZFN0dWZmTGFyZ2UoJmlucHV0KTsKLSAgICAg
ICAgICBFWFBFQ1RfVFJVRShzdHJlYW0uZW9mKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotICB9Ci19Ci0KLS8vIFRvIHRlc3QgQ29uY2F0ZW5hdGluZ0lucHV0U3RyZWFtLCB3ZSBjcmVh
dGUgc2V2ZXJhbCBBcnJheUlucHV0U3RyZWFtcwotLy8gY292ZXJpbmcgYSBidWZmZXIgYW5kIHRo
ZW4gY29uY2F0ZW5hdGUgdGhlbS4KLVRFU1RfRihJb1Rlc3QsIENvbmNhdGVuYXRpbmdJbnB1dFN0
cmVhbSkgewotICBjb25zdCBpbnQga0J1ZmZlclNpemUgPSAyNTY7Ci0gIHVpbnQ4IGJ1ZmZlcltr
QnVmZmVyU2l6ZV07Ci0KLSAgLy8gRmlsbCB0aGUgYnVmZmVyLgotICBBcnJheU91dHB1dFN0cmVh
bSBvdXRwdXQoYnVmZmVyLCBrQnVmZmVyU2l6ZSk7Ci0gIFdyaXRlU3R1ZmYoJm91dHB1dCk7Ci0K
LSAgLy8gTm93IHNwbGl0IGl0IHVwIGludG8gbXVsdGlwbGUgc3RyZWFtcyBvZiB2YXJ5aW5nIHNp
emVzLgotICBBU1NFUlRfRVEoNjgsIG91dHB1dC5CeXRlQ291bnQoKSk7ICAvLyBUZXN0IGRlcGVu
ZHMgb24gdGhpcy4KLSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dDEoYnVmZmVyICAgICAsIDEyKTsK
LSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dDIoYnVmZmVyICsgMTIsICA3KTsKLSAgQXJyYXlJbnB1
dFN0cmVhbSBpbnB1dDMoYnVmZmVyICsgMTksICA2KTsKLSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1
dDQoYnVmZmVyICsgMjUsIDE1KTsKLSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dDUoYnVmZmVyICsg
NDAsICAwKTsKLSAgLy8gTm90ZTogIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBzdHJl
YW0gYm91bmRhcnkgc29tZXdoZXJlIGJldHdlZW4KLSAgLy8gYnl0ZXMgNDIgYW5kIDYyLCB3aGlj
aCBpcyB0aGUgcmFuZ2UgdGhhdCBpdCBTa2lwKCllZCBieSBSZWFkU3R1ZmYoKS4gIFRoaXMKLSAg
Ly8gdGVzdHMgdGhhdCBhIGJ1ZyB0aGF0IGV4aXN0ZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUgZm9y
IFNraXAoKSBpcyBmaXhlZC4KLSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dDYoYnVmZmVyICsgNDAs
IDEwKTsKLSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dDcoYnVmZmVyICsgNTAsIDE4KTsgIC8vIFRv
dGFsID0gNjggYnl0ZXMuCi0KLSAgWmVyb0NvcHlJbnB1dFN0cmVhbSogc3RyZWFtc1tdID0KLSAg
ICB7JmlucHV0MSwgJmlucHV0MiwgJmlucHV0MywgJmlucHV0NCwgJmlucHV0NSwgJmlucHV0Niwg
JmlucHV0N307Ci0KLSAgLy8gQ3JlYXRlIHRoZSBjb25jYXRlbmF0aW5nIHN0cmVhbSBhbmQgcmVh
ZC4KLSAgQ29uY2F0ZW5hdGluZ0lucHV0U3RyZWFtIGlucHV0KHN0cmVhbXMsIEdPT0dMRV9BUlJB
WVNJWkUoc3RyZWFtcykpOwotICBSZWFkU3R1ZmYoJmlucHV0KTsKLX0KLQotLy8gVG8gdGVzdCBM
aW1pdGluZ0lucHV0U3RyZWFtLCB3ZSB3cml0ZSBvdXIgZ29sZGVuIHRleHQgdG8gYSBidWZmZXIs
IHRoZW4KLS8vIGNyZWF0ZSBhbiBBcnJheUlucHV0U3RyZWFtIHRoYXQgY29udGFpbnMgdGhlIHdo
b2xlIGJ1ZmZlciAobm90IGp1c3QgdGhlCi0vLyBieXRlcyB3cml0dGVuKSwgdGhlbiB1c2UgYSBM
aW1pdGluZ0lucHV0U3RyZWFtIHRvIGxpbWl0IGl0IGp1c3QgdG8gdGhlCi0vLyBieXRlcyB3cml0
dGVuLgotVEVTVF9GKElvVGVzdCwgTGltaXRpbmdJbnB1dFN0cmVhbSkgewotICBjb25zdCBpbnQg
a0J1ZmZlclNpemUgPSAyNTY7Ci0gIHVpbnQ4IGJ1ZmZlcltrQnVmZmVyU2l6ZV07Ci0KLSAgLy8g
RmlsbCB0aGUgYnVmZmVyLgotICBBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQoYnVmZmVyLCBrQnVm
ZmVyU2l6ZSk7Ci0gIFdyaXRlU3R1ZmYoJm91dHB1dCk7Ci0KLSAgLy8gU2V0IHVwIGlucHV0Lgot
ICBBcnJheUlucHV0U3RyZWFtIGFycmF5X2lucHV0KGJ1ZmZlciwga0J1ZmZlclNpemUpOwotICBM
aW1pdGluZ0lucHV0U3RyZWFtIGlucHV0KCZhcnJheV9pbnB1dCwgb3V0cHV0LkJ5dGVDb3VudCgp
KTsKLQotICBSZWFkU3R1ZmYoJmlucHV0KTsKLX0KLQotLy8gQ2hlY2tzIHRoYXQgQnl0ZUNvdW50
IHdvcmtzIGNvcnJlY3RseSBmb3IgTGltaXRpbmdJbnB1dFN0cmVhbXMgd2hlcmUgdGhlCi0vLyB1
bmRlcmx5aW5nIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQuCi1URVNUX0YoSW9UZXN0LCBM
aW1pdGluZ0lucHV0U3RyZWFtQnl0ZUNvdW50KSB7Ci0gIGNvbnN0IGludCBrSGFsZkJ1ZmZlclNp
emUgPSAxMjg7Ci0gIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IGtIYWxmQnVmZmVyU2l6ZSAqIDI7
Ci0gIHVpbnQ4IGJ1ZmZlcltrQnVmZmVyU2l6ZV07Ci0KLSAgLy8gU2V0IHVwIGlucHV0LiBPbmx5
IGFsbG93IGhhbGYgdG8gYmUgcmVhZCBhdCBvbmNlLgotICBBcnJheUlucHV0U3RyZWFtIGFycmF5
X2lucHV0KGJ1ZmZlciwga0J1ZmZlclNpemUsIGtIYWxmQnVmZmVyU2l6ZSk7Ci0gIGNvbnN0IHZv
aWQqIGRhdGE7Ci0gIGludCBzaXplOwotICBFWFBFQ1RfVFJVRShhcnJheV9pbnB1dC5OZXh0KCZk
YXRhLCAmc2l6ZSkpOwotICBFWFBFQ1RfRVEoa0hhbGZCdWZmZXJTaXplLCBhcnJheV9pbnB1dC5C
eXRlQ291bnQoKSk7Ci0gIC8vIGtIYWxmQnVmZmVyU2l6ZSAtIDEgdG8gdGVzdCBsaW1pdGluZyBs
b2dpYyBhcyB3ZWxsLgotICBMaW1pdGluZ0lucHV0U3RyZWFtIGlucHV0KCZhcnJheV9pbnB1dCwg
a0hhbGZCdWZmZXJTaXplIC0gMSk7Ci0gIEVYUEVDVF9FUSgwLCBpbnB1dC5CeXRlQ291bnQoKSk7
Ci0gIEVYUEVDVF9UUlVFKGlucHV0Lk5leHQoJmRhdGEsICZzaXplKSk7Ci0gIEVYUEVDVF9FUShr
SGFsZkJ1ZmZlclNpemUgLSAxICwgaW5wdXQuQnl0ZUNvdW50KCkpOwotfQotCi0vLyBDaGVjayB0
aGF0IGEgemVyby1zaXplIGFycmF5IGRvZXNuJ3QgY29uZnVzZSB0aGUgY29kZS4KLVRFU1QoWmVy
b1NpemVBcnJheSwgSW5wdXQpIHsKLSAgQXJyYXlJbnB1dFN0cmVhbSBpbnB1dChOVUxMLCAwKTsK
LSAgY29uc3Qgdm9pZCogZGF0YTsKLSAgaW50IHNpemU7Ci0gIEVYUEVDVF9GQUxTRShpbnB1dC5O
ZXh0KCZkYXRhLCAmc2l6ZSkpOwotfQotCi1URVNUKFplcm9TaXplQXJyYXksIE91dHB1dCkgewot
ICBBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQoTlVMTCwgMCk7Ci0gIHZvaWQqIGRhdGE7Ci0gIGlu
dCBzaXplOwotICBFWFBFQ1RfRkFMU0Uob3V0cHV0Lk5leHQoJmRhdGEsICZzaXplKSk7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIGlvCi19ICAvLyBuYW1lc3BhY2UgcHJv
dG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9saXRlX2FyZW5hX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2xpdGVfYXJl
bmFfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYmVlODgwYWE2
NjlmMDA5NTFiNmQ2NGVkNjE4ZGYzNGQ3MjM3ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL2xpdGVfYXJlbmFfdW5pdHRl
c3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYV90ZXN0X3V0
aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFwX2xpdGVfdGVzdF91dGlsLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSB7Ci0KLVRFU1QoTGl0ZUFyZW5hVGVzdCwgTWFwTm9IZWFwQWxsb2NhdGlv
bikgewotICAvLyBBbGxvY2F0ZSBhIGxhcmdlIGluaXRpYWwgYmxvY2sgdG8gYXZvaWQgbWFsbG9j
cyBkdXJpbmcgaG9va2VkIHRlc3QuCi0gIHN0ZDo6dmVjdG9yPGNoYXI+IGFyZW5hX2Jsb2NrKDEy
OCAqIDEwMjQpOwotICBnb29nbGU6OnByb3RvYnVmOjpBcmVuYU9wdGlvbnMgb3B0aW9uczsKLSAg
b3B0aW9ucy5pbml0aWFsX2Jsb2NrID0gJmFyZW5hX2Jsb2NrWzBdOwotICBvcHRpb25zLmluaXRp
YWxfYmxvY2tfc2l6ZSA9IGFyZW5hX2Jsb2NrLnNpemUoKTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6
QXJlbmEgYXJlbmEob3B0aW9ucyk7Ci0gIHN0cmluZyBkYXRhOwotICBkYXRhLnJlc2VydmUoMTI4
ICogMTAyNCk7Ci0KLSAgewotICAgIC8vIFRPRE8odGVib3JpbmcpOiBFbmFibGUgbm8gaGVhcCBj
aGVjayB3aGVuIEFyZW5hU3RyaW5nUHRyIGlzIHVzZWQgaW4KLSAgICAvLyBNYXAuCi0gICAgLy8g
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok5vSGVhcENoZWNrZXIgbm9faGVhcDsKLQotICAg
IHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QXJlbmFNYXBMaXRlKiBmcm9tID0KLSAgICAgICAgZ29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmE6OkNyZWF0ZU1lc3NhZ2U8cHJvdG9idWZfdW5pdHRlc3Q6OlRl
c3RBcmVuYU1hcExpdGU+KCZhcmVuYSk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6TWFwTGl0ZVRl
c3RVdGlsOjpTZXRBcmVuYU1hcEZpZWxkcyhmcm9tKTsKLSAgICBmcm9tLT5TZXJpYWxpemVUb1N0
cmluZygmZGF0YSk7Ci0KLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFyZW5hTWFwTGl0ZSog
dG8gPQotICAgICAgICBnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6Q3JlYXRlTWVzc2FnZTxwcm90
b2J1Zl91bml0dGVzdDo6VGVzdEFyZW5hTWFwTGl0ZT4oJmFyZW5hKTsKLSAgICB0by0+UGFyc2VG
cm9tU3RyaW5nKGRhdGEpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6
RXhwZWN0QXJlbmFNYXBGaWVsZHNTZXQoKnRvKTsKLSAgfQotfQotCi1URVNUKExpdGVBcmVuYVRl
c3QsIFVua25vd25GaWVsZE1lbUxlYWspIHsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEgYXJl
bmE7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpGb3JlaWduTWVzc2FnZUFyZW5hTGl0ZSogbWVzc2Fn
ZSA9Ci0gICAgICBnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6Q3JlYXRlTWVzc2FnZTxwcm90b2J1
Zl91bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2VBcmVuYUxpdGU+KAotICAgICAgICAgICZhcmVuYSk7
Ci0gIHN0cmluZyBkYXRhID0gIlwwMTJcMDAwIjsKLSAgaW50IG9yaWdpbmFsX2NhcGFjaXR5ID0g
ZGF0YS5jYXBhY2l0eSgpOwotICB3aGlsZSAoZGF0YS5jYXBhY2l0eSgpIDw9IG9yaWdpbmFsX2Nh
cGFjaXR5KSB7Ci0gICAgZGF0YS5hcHBlbmQoImEiKTsKLSAgfQotICBkYXRhWzFdID0gZGF0YS5z
aXplKCkgLSAyOwotICBtZXNzYWdlLT5QYXJzZUZyb21TdHJpbmcoZGF0YSk7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbGl0ZV91bml0dGVzdC5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9saXRlX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzY2EzZmJhZjZlY2IzYTRiYTU0ZDM3MjM5NjcwMDBhNWI3N2U3NzBkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9saXRlX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNzE4ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUu
Y29tIChLZW50b24gVmFyZGEpCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8aW9zdHJl
YW0+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvYXJlbmFfdGVzdF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF9s
aXRlX3VuaXR0ZXN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF9saXRlX3Rl
c3RfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0X3V0aWxfbGl0ZS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9saXRlLnBiLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGxfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dp
cmVfZm9ybWF0X2xpdGVfaW5sLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0
cnV0aWwuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIHsKLS8vIEhlbHBl
ciBtZXRob2RzIHRvIHRlc3QgcGFyc2luZyBtZXJnZSBiZWhhdmlvci4KLXZvaWQgRXhwZWN0TWVz
c2FnZU1lcmdlZChjb25zdCBnb29nbGU6OnByb3RvYnVmOjp1bml0dGVzdDo6VGVzdEFsbFR5cGVz
TGl0ZSYgbWVzc2FnZSkgewotICBHT09HTEVfQ0hFQ0sobWVzc2FnZS5vcHRpb25hbF9pbnQzMigp
ID09IDMpOwotICBHT09HTEVfQ0hFQ0sobWVzc2FnZS5vcHRpb25hbF9pbnQ2NCgpID09IDIpOwot
ICBHT09HTEVfQ0hFQ0sobWVzc2FnZS5vcHRpb25hbF9zdHJpbmcoKSA9PSAiaGVsbG8iKTsKLX0K
LQotdm9pZCBBc3NpZ25QYXJzaW5nTWVyZ2VNZXNzYWdlcygKLSAgICBnb29nbGU6OnByb3RvYnVm
Ojp1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSogbXNnMSwKLSAgICBnb29nbGU6OnByb3RvYnVm
Ojp1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSogbXNnMiwKLSAgICBnb29nbGU6OnByb3RvYnVm
Ojp1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSogbXNnMykgewotICBtc2cxLT5zZXRfb3B0aW9u
YWxfaW50MzIoMSk7Ci0gIG1zZzItPnNldF9vcHRpb25hbF9pbnQ2NCgyKTsKLSAgbXNnMy0+c2V0
X29wdGlvbmFsX2ludDMyKDMpOwotICBtc2czLT5zZXRfb3B0aW9uYWxfc3RyaW5nKCJoZWxsbyIp
OwotfQotCi12b2lkIFNldEFsbFR5cGVzSW5FbXB0eU1lc3NhZ2VVbmtub3duRmllbGRzKAotICAg
IGdvb2dsZTo6cHJvdG9idWY6OnVuaXR0ZXN0OjpUZXN0RW1wdHlNZXNzYWdlTGl0ZSogZW1wdHlf
bWVzc2FnZSkgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSBtZXNzYWdl
OwotICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRpbExpdGU6OkV4cGVjdENsZWFyKG1lc3NhZ2Up
OwotICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRpbExpdGU6OlNldEFsbEZpZWxkcygmbWVzc2Fn
ZSk7Ci0gIHN0cmluZyBkYXRhID0gbWVzc2FnZS5TZXJpYWxpemVBc1N0cmluZygpOwotICBlbXB0
eV9tZXNzYWdlLT5QYXJzZUZyb21TdHJpbmcoZGF0YSk7Ci19Ci0KLXZvaWQgU2V0U29tZVR5cGVz
SW5FbXB0eU1lc3NhZ2VVbmtub3duRmllbGRzKAotICAgIGdvb2dsZTo6cHJvdG9idWY6OnVuaXR0
ZXN0OjpUZXN0RW1wdHlNZXNzYWdlTGl0ZSogZW1wdHlfbWVzc2FnZSkgewotICBwcm90b2J1Zl91
bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSBtZXNzYWdlOwotICBnb29nbGU6OnByb3RvYnVmOjpU
ZXN0VXRpbExpdGU6OkV4cGVjdENsZWFyKG1lc3NhZ2UpOwotICBtZXNzYWdlLnNldF9vcHRpb25h
bF9pbnQzMigxMDEpOwotICBtZXNzYWdlLnNldF9vcHRpb25hbF9pbnQ2NCgxMDIpOwotICBtZXNz
YWdlLnNldF9vcHRpb25hbF91aW50MzIoMTAzKTsKLSAgbWVzc2FnZS5zZXRfb3B0aW9uYWxfdWlu
dDY0KDEwNCk7Ci0gIHN0cmluZyBkYXRhID0gbWVzc2FnZS5TZXJpYWxpemVBc1N0cmluZygpOwot
ICBlbXB0eV9tZXNzYWdlLT5QYXJzZUZyb21TdHJpbmcoZGF0YSk7Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZQotCi0jZGVmaW5lIEVYUEVDVF9UUlVFIEdPT0dMRV9DSEVDSwotI2RlZmluZSBBU1NFUlRf
VFJVRSBHT09HTEVfQ0hFQ0sKLSNkZWZpbmUgRVhQRUNUX0ZBTFNFKENPTkQpIEdPT0dMRV9DSEVD
SyghKENPTkQpKQotI2RlZmluZSBFWFBFQ1RfRVEgR09PR0xFX0NIRUNLX0VRCi0jZGVmaW5lIEFT
U0VSVF9FUSBHT09HTEVfQ0hFQ0tfRVEKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3Zb
XSkgewotICBzdHJpbmcgZGF0YSwgZGF0YTIsIHBhY2tlZF9kYXRhOwotCi0gIHsKLSAgICBwcm90
b2J1Zl91bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSBtZXNzYWdlLCBtZXNzYWdlMiwgbWVzc2Fn
ZTM7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpFeHBlY3RDbGVhcihtZXNz
YWdlKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRpbExpdGU6OlNldEFsbEZpZWxkcygm
bWVzc2FnZSk7Ci0gICAgbWVzc2FnZTIuQ29weUZyb20obWVzc2FnZSk7Ci0gICAgZGF0YSA9IG1l
c3NhZ2UuU2VyaWFsaXplQXNTdHJpbmcoKTsKLSAgICBtZXNzYWdlMy5QYXJzZUZyb21TdHJpbmco
ZGF0YSk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpFeHBlY3RBbGxGaWVs
ZHNTZXQobWVzc2FnZSk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpFeHBl
Y3RBbGxGaWVsZHNTZXQobWVzc2FnZTIpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGls
TGl0ZTo6RXhwZWN0QWxsRmllbGRzU2V0KG1lc3NhZ2UzKTsKLSAgICBnb29nbGU6OnByb3RvYnVm
OjpUZXN0VXRpbExpdGU6Ok1vZGlmeVJlcGVhdGVkRmllbGRzKCZtZXNzYWdlKTsKLSAgICBnb29n
bGU6OnByb3RvYnVmOjpUZXN0VXRpbExpdGU6OkV4cGVjdFJlcGVhdGVkRmllbGRzTW9kaWZpZWQo
bWVzc2FnZSk7Ci0gICAgbWVzc2FnZS5DbGVhcigpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRl
c3RVdGlsTGl0ZTo6RXhwZWN0Q2xlYXIobWVzc2FnZSk7Ci0gIH0KLQotICB7Ci0gICAgcHJvdG9i
dWZfdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zTGl0ZSBtZXNzYWdlLCBtZXNzYWdlMiwgbWVz
c2FnZTM7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpFeHBlY3RFeHRlbnNp
b25zQ2xlYXIobWVzc2FnZSk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpT
ZXRBbGxFeHRlbnNpb25zKCZtZXNzYWdlKTsKLSAgICBtZXNzYWdlMi5Db3B5RnJvbShtZXNzYWdl
KTsKLSAgICBzdHJpbmcgZXh0ZW5zaW9uc19kYXRhID0gbWVzc2FnZS5TZXJpYWxpemVBc1N0cmlu
ZygpOwotICAgIG1lc3NhZ2UzLlBhcnNlRnJvbVN0cmluZyhleHRlbnNpb25zX2RhdGEpOwotICAg
IGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldCht
ZXNzYWdlKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRpbExpdGU6OkV4cGVjdEFsbEV4
dGVuc2lvbnNTZXQobWVzc2FnZTIpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0
ZTo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlMyk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1
Zjo6VGVzdFV0aWxMaXRlOjpNb2RpZnlSZXBlYXRlZEV4dGVuc2lvbnMoJm1lc3NhZ2UpOwotICAg
IGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0UmVwZWF0ZWRFeHRlbnNpb25z
TW9kaWZpZWQobWVzc2FnZSk7Ci0gICAgbWVzc2FnZS5DbGVhcigpOwotICAgIGdvb2dsZTo6cHJv
dG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0RXh0ZW5zaW9uc0NsZWFyKG1lc3NhZ2UpOwotICB9
Ci0KLSAgewotICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0UGFja2VkVHlwZXNMaXRlIG1lc3Nh
Z2UsIG1lc3NhZ2UyLCBtZXNzYWdlMzsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRpbExp
dGU6OkV4cGVjdFBhY2tlZENsZWFyKG1lc3NhZ2UpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRl
c3RVdGlsTGl0ZTo6U2V0UGFja2VkRmllbGRzKCZtZXNzYWdlKTsKLSAgICBtZXNzYWdlMi5Db3B5
RnJvbShtZXNzYWdlKTsKLSAgICBwYWNrZWRfZGF0YSA9IG1lc3NhZ2UuU2VyaWFsaXplQXNTdHJp
bmcoKTsKLSAgICBtZXNzYWdlMy5QYXJzZUZyb21TdHJpbmcocGFja2VkX2RhdGEpOwotICAgIGdv
b2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0UGFja2VkRmllbGRzU2V0KG1lc3Nh
Z2UpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0UGFja2VkRmll
bGRzU2V0KG1lc3NhZ2UyKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRpbExpdGU6OkV4
cGVjdFBhY2tlZEZpZWxkc1NldChtZXNzYWdlMyk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVz
dFV0aWxMaXRlOjpNb2RpZnlQYWNrZWRGaWVsZHMoJm1lc3NhZ2UpOwotICAgIGdvb2dsZTo6cHJv
dG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0UGFja2VkRmllbGRzTW9kaWZpZWQobWVzc2FnZSk7
Ci0gICAgbWVzc2FnZS5DbGVhcigpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0
ZTo6RXhwZWN0UGFja2VkQ2xlYXIobWVzc2FnZSk7Ci0gIH0KLQotICB7Ci0gICAgcHJvdG9idWZf
dW5pdHRlc3Q6OlRlc3RQYWNrZWRFeHRlbnNpb25zTGl0ZSBtZXNzYWdlLCBtZXNzYWdlMiwgbWVz
c2FnZTM7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpFeHBlY3RQYWNrZWRF
eHRlbnNpb25zQ2xlYXIobWVzc2FnZSk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxM
aXRlOjpTZXRQYWNrZWRFeHRlbnNpb25zKCZtZXNzYWdlKTsKLSAgICBtZXNzYWdlMi5Db3B5RnJv
bShtZXNzYWdlKTsKLSAgICBzdHJpbmcgcGFja2VkX2V4dGVuc2lvbnNfZGF0YSA9IG1lc3NhZ2Uu
U2VyaWFsaXplQXNTdHJpbmcoKTsKLSAgICBHT09HTEVfQ0hFQ0socGFja2VkX2V4dGVuc2lvbnNf
ZGF0YSA9PSBwYWNrZWRfZGF0YSk7Ci0gICAgbWVzc2FnZTMuUGFyc2VGcm9tU3RyaW5nKHBhY2tl
ZF9leHRlbnNpb25zX2RhdGEpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6
RXhwZWN0UGFja2VkRXh0ZW5zaW9uc1NldChtZXNzYWdlKTsKLSAgICBnb29nbGU6OnByb3RvYnVm
OjpUZXN0VXRpbExpdGU6OkV4cGVjdFBhY2tlZEV4dGVuc2lvbnNTZXQobWVzc2FnZTIpOwotICAg
IGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0UGFja2VkRXh0ZW5zaW9uc1Nl
dChtZXNzYWdlMyk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpNb2RpZnlQ
YWNrZWRFeHRlbnNpb25zKCZtZXNzYWdlKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRp
bExpdGU6OkV4cGVjdFBhY2tlZEV4dGVuc2lvbnNNb2RpZmllZChtZXNzYWdlKTsKLSAgICBtZXNz
YWdlLkNsZWFyKCk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpFeHBlY3RQ
YWNrZWRFeHRlbnNpb25zQ2xlYXIobWVzc2FnZSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gVGVzdCB0
aGF0IGlmIGFuIG9wdGlvbmFsIG9yIHJlcXVpcmVkIG1lc3NhZ2UvZ3JvdXAgZmllbGQgYXBwZWFy
cyBtdWx0aXBsZQotICAgIC8vIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhleSBuZWVkIHRvIGJlIG1l
cmdlZC4KLSAgICBnb29nbGU6OnByb3RvYnVmOjp1bml0dGVzdDo6VGVzdFBhcnNpbmdNZXJnZUxp
dGU6OlJlcGVhdGVkRmllbGRzR2VuZXJhdG9yIGdlbmVyYXRvcjsKLSAgICBnb29nbGU6OnByb3Rv
YnVmOjp1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSogbXNnMTsKLSAgICBnb29nbGU6OnByb3Rv
YnVmOjp1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSogbXNnMjsKLSAgICBnb29nbGU6OnByb3Rv
YnVmOjp1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSogbXNnMzsKLQotI2RlZmluZSBBU1NJR05f
UkVQRUFURURfRklFTEQoRklFTEQpICAgICAgICAgICAgICAgIFwKLSAgbXNnMSA9IGdlbmVyYXRv
ci5hZGRfIyNGSUVMRCgpOyAgICAgICAgICAgICAgICAgICBcCi0gIG1zZzIgPSBnZW5lcmF0b3Iu
YWRkXyMjRklFTEQoKTsgICAgICAgICAgICAgICAgICAgXAotICBtc2czID0gZ2VuZXJhdG9yLmFk
ZF8jI0ZJRUxEKCk7ICAgICAgICAgICAgICAgICAgIFwKLSAgQXNzaWduUGFyc2luZ01lcmdlTWVz
c2FnZXMobXNnMSwgbXNnMiwgbXNnMykKLQotICAgIEFTU0lHTl9SRVBFQVRFRF9GSUVMRChmaWVs
ZDEpOwotICAgIEFTU0lHTl9SRVBFQVRFRF9GSUVMRChmaWVsZDIpOwotICAgIEFTU0lHTl9SRVBF
QVRFRF9GSUVMRChmaWVsZDMpOwotICAgIEFTU0lHTl9SRVBFQVRFRF9GSUVMRChleHQxKTsKLSAg
ICBBU1NJR05fUkVQRUFURURfRklFTEQoZXh0Mik7Ci0KLSN1bmRlZiBBU1NJR05fUkVQRUFURURf
RklFTEQKLSNkZWZpbmUgQVNTSUdOX1JFUEVBVEVEX0dST1VQKEZJRUxEKSAgICAgICAgICAgICAg
ICBcCi0gIG1zZzEgPSBnZW5lcmF0b3IuYWRkXyMjRklFTEQoKS0+bXV0YWJsZV9maWVsZDEoKTsg
XAotICBtc2cyID0gZ2VuZXJhdG9yLmFkZF8jI0ZJRUxEKCktPm11dGFibGVfZmllbGQxKCk7IFwK
LSAgbXNnMyA9IGdlbmVyYXRvci5hZGRfIyNGSUVMRCgpLT5tdXRhYmxlX2ZpZWxkMSgpOyBcCi0g
IEFzc2lnblBhcnNpbmdNZXJnZU1lc3NhZ2VzKG1zZzEsIG1zZzIsIG1zZzMpCi0KLSAgICBBU1NJ
R05fUkVQRUFURURfR1JPVVAoZ3JvdXAxKTsKLSAgICBBU1NJR05fUkVQRUFURURfR1JPVVAoZ3Jv
dXAyKTsKLQotI3VuZGVmIEFTU0lHTl9SRVBFQVRFRF9HUk9VUAotCi0gICAgc3RyaW5nIGJ1ZmZl
cjsKLSAgICBnZW5lcmF0b3IuU2VyaWFsaXplVG9TdHJpbmcoJmJ1ZmZlcik7Ci0gICAgZ29vZ2xl
Ojpwcm90b2J1Zjo6dW5pdHRlc3Q6OlRlc3RQYXJzaW5nTWVyZ2VMaXRlIHBhcnNpbmdfbWVyZ2U7
Ci0gICAgcGFyc2luZ19tZXJnZS5QYXJzZUZyb21TdHJpbmcoYnVmZmVyKTsKLQotICAgIC8vIFJl
cXVpcmVkIGFuZCBvcHRpb25hbCBmaWVsZHMgc2hvdWxkIGJlIG1lcmdlZC4KLSAgICBFeHBlY3RN
ZXNzYWdlTWVyZ2VkKHBhcnNpbmdfbWVyZ2UucmVxdWlyZWRfYWxsX3R5cGVzKCkpOwotICAgIEV4
cGVjdE1lc3NhZ2VNZXJnZWQocGFyc2luZ19tZXJnZS5vcHRpb25hbF9hbGxfdHlwZXMoKSk7Ci0g
ICAgRXhwZWN0TWVzc2FnZU1lcmdlZCgKLSAgICAgICAgcGFyc2luZ19tZXJnZS5vcHRpb25hbGdy
b3VwKCkub3B0aW9uYWxfZ3JvdXBfYWxsX3R5cGVzKCkpOwotICAgIEV4cGVjdE1lc3NhZ2VNZXJn
ZWQocGFyc2luZ19tZXJnZS5HZXRFeHRlbnNpb24oCi0gICAgICAgIGdvb2dsZTo6cHJvdG9idWY6
OnVuaXR0ZXN0OjpUZXN0UGFyc2luZ01lcmdlTGl0ZTo6b3B0aW9uYWxfZXh0KSk7Ci0KLSAgICAv
LyBSZXBlYXRlZCBmaWVsZHMgc2hvdWxkIG5vdCBiZSBtZXJnZWQuCi0gICAgR09PR0xFX0NIRUNL
KHBhcnNpbmdfbWVyZ2UucmVwZWF0ZWRfYWxsX3R5cGVzX3NpemUoKSA9PSAzKTsKLSAgICBHT09H
TEVfQ0hFQ0socGFyc2luZ19tZXJnZS5yZXBlYXRlZGdyb3VwX3NpemUoKSA9PSAzKTsKLSAgICBH
T09HTEVfQ0hFQ0socGFyc2luZ19tZXJnZS5FeHRlbnNpb25TaXplKAotICAgICAgICBnb29nbGU6
OnByb3RvYnVmOjp1bml0dGVzdDo6VGVzdFBhcnNpbmdNZXJnZUxpdGU6OnJlcGVhdGVkX2V4dCkg
PT0gMyk7Ci0gIH0KLQotICAvLyBUZXN0IHVua25vd24gZmllbGRzIHN1cHBvcnQgZm9yIGxpdGUg
bWVzc2FnZXMuCi0gIHsKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSBt
ZXNzYWdlLCBtZXNzYWdlMjsKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEVtcHR5TWVzc2Fn
ZUxpdGUgZW1wdHlfbWVzc2FnZTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRpbExpdGU6
OkV4cGVjdENsZWFyKG1lc3NhZ2UpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0
ZTo6U2V0QWxsRmllbGRzKCZtZXNzYWdlKTsKLSAgICBkYXRhID0gbWVzc2FnZS5TZXJpYWxpemVB
c1N0cmluZygpOwotICAgIGVtcHR5X21lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKGRhdGEpOwotICAg
IGRhdGEuY2xlYXIoKTsKLSAgICBkYXRhID0gZW1wdHlfbWVzc2FnZS5TZXJpYWxpemVBc1N0cmlu
ZygpOwotICAgIG1lc3NhZ2UyLlBhcnNlRnJvbVN0cmluZyhkYXRhKTsKLSAgICBkYXRhID0gbWVz
c2FnZTIuU2VyaWFsaXplQXNTdHJpbmcoKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRp
bExpdGU6OkV4cGVjdEFsbEZpZWxkc1NldChtZXNzYWdlMik7Ci0gICAgbWVzc2FnZS5DbGVhcigp
OwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0Q2xlYXIobWVzc2Fn
ZSk7Ci0gIH0KLQotICB7Ci0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25z
TGl0ZSBtZXNzYWdlLCBtZXNzYWdlMjsKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEVtcHR5
TWVzc2FnZUxpdGUgZW1wdHlfbWVzc2FnZTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpUZXN0VXRp
bExpdGU6OkV4cGVjdEV4dGVuc2lvbnNDbGVhcihtZXNzYWdlKTsKLSAgICBnb29nbGU6OnByb3Rv
YnVmOjpUZXN0VXRpbExpdGU6OlNldEFsbEV4dGVuc2lvbnMoJm1lc3NhZ2UpOwotICAgIGRhdGEg
PSBtZXNzYWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci0gICAgZW1wdHlfbWVzc2FnZS5QYXJzZUZy
b21TdHJpbmcoZGF0YSk7Ci0gICAgZGF0YS5jbGVhcigpOwotICAgIGRhdGEgPSBlbXB0eV9tZXNz
YWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci0gICAgbWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRh
dGEpOwotICAgIGRhdGEgPSBtZXNzYWdlMi5TZXJpYWxpemVBc1N0cmluZygpOwotICAgIGdvb2ds
ZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdl
Mik7Ci0gICAgbWVzc2FnZS5DbGVhcigpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGls
TGl0ZTo6RXhwZWN0RXh0ZW5zaW9uc0NsZWFyKG1lc3NhZ2UpOwotICB9Ci0KLSAgewotICAgIHBy
b3RvYnVmX3VuaXR0ZXN0OjpUZXN0UGFja2VkVHlwZXNMaXRlIG1lc3NhZ2UsIG1lc3NhZ2UyOwot
ICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RW1wdHlNZXNzYWdlTGl0ZSBlbXB0eV9tZXNzYWdl
OwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhwZWN0UGFja2VkQ2xlYXIo
bWVzc2FnZSk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpTZXRQYWNrZWRG
aWVsZHMoJm1lc3NhZ2UpOwotICAgIGRhdGEgPSBtZXNzYWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCk7
Ci0gICAgZW1wdHlfbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoZGF0YSk7Ci0gICAgZGF0YS5jbGVh
cigpOwotICAgIGRhdGEgPSBlbXB0eV9tZXNzYWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci0gICAg
bWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRhdGEpOwotICAgIGRhdGEgPSBtZXNzYWdlMi5TZXJp
YWxpemVBc1N0cmluZygpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6RXhw
ZWN0UGFja2VkRmllbGRzU2V0KG1lc3NhZ2UyKTsKLSAgICBtZXNzYWdlLkNsZWFyKCk7Ci0gICAg
Z29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpFeHBlY3RQYWNrZWRDbGVhcihtZXNzYWdl
KTsKLSAgfQotCi0gIHsKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdFBhY2tlZEV4dGVuc2lv
bnNMaXRlIG1lc3NhZ2UsIG1lc3NhZ2UyOwotICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RW1w
dHlNZXNzYWdlTGl0ZSBlbXB0eV9tZXNzYWdlOwotICAgIGdvb2dsZTo6cHJvdG9idWY6OlRlc3RV
dGlsTGl0ZTo6RXhwZWN0UGFja2VkRXh0ZW5zaW9uc0NsZWFyKG1lc3NhZ2UpOwotICAgIGdvb2ds
ZTo6cHJvdG9idWY6OlRlc3RVdGlsTGl0ZTo6U2V0UGFja2VkRXh0ZW5zaW9ucygmbWVzc2FnZSk7
Ci0gICAgZGF0YSA9IG1lc3NhZ2UuU2VyaWFsaXplQXNTdHJpbmcoKTsKLSAgICBlbXB0eV9tZXNz
YWdlLlBhcnNlRnJvbVN0cmluZyhkYXRhKTsKLSAgICBkYXRhLmNsZWFyKCk7Ci0gICAgZGF0YSA9
IGVtcHR5X21lc3NhZ2UuU2VyaWFsaXplQXNTdHJpbmcoKTsKLSAgICBtZXNzYWdlMi5QYXJzZUZy
b21TdHJpbmcoZGF0YSk7Ci0gICAgZGF0YSA9IG1lc3NhZ2UyLlNlcmlhbGl6ZUFzU3RyaW5nKCk7
Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6VGVzdFV0aWxMaXRlOjpFeHBlY3RQYWNrZWRFeHRlbnNp
b25zU2V0KG1lc3NhZ2UyKTsKLSAgICBtZXNzYWdlLkNsZWFyKCk7Ci0gICAgZ29vZ2xlOjpwcm90
b2J1Zjo6VGVzdFV0aWxMaXRlOjpFeHBlY3RQYWNrZWRFeHRlbnNpb25zQ2xlYXIobWVzc2FnZSk7
Ci0gIH0KLQotICB7Ci0gICAgLy8gVGVzdCBVbmtub3duIGZpZWxkcyBzd2FwCi0gICAgcHJvdG9i
dWZfdW5pdHRlc3Q6OlRlc3RFbXB0eU1lc3NhZ2VMaXRlIGVtcHR5X21lc3NhZ2UsIGVtcHR5X21l
c3NhZ2UyOwotICAgIFNldEFsbFR5cGVzSW5FbXB0eU1lc3NhZ2VVbmtub3duRmllbGRzKCZlbXB0
eV9tZXNzYWdlKTsKLSAgICBTZXRTb21lVHlwZXNJbkVtcHR5TWVzc2FnZVVua25vd25GaWVsZHMo
JmVtcHR5X21lc3NhZ2UyKTsKLSAgICBkYXRhID0gZW1wdHlfbWVzc2FnZS5TZXJpYWxpemVBc1N0
cmluZygpOwotICAgIGRhdGEyID0gZW1wdHlfbWVzc2FnZTIuU2VyaWFsaXplQXNTdHJpbmcoKTsK
LSAgICBlbXB0eV9tZXNzYWdlLlN3YXAoJmVtcHR5X21lc3NhZ2UyKTsKLSAgICBHT09HTEVfQ0hF
Q0tfRVEoZGF0YSwgZW1wdHlfbWVzc2FnZTIuU2VyaWFsaXplQXNTdHJpbmcoKSk7Ci0gICAgR09P
R0xFX0NIRUNLX0VRKGRhdGEyLCBlbXB0eV9tZXNzYWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwot
ICB9Ci0KLSAgewotICAgIC8vIFRlc3QgdW5rbm93biBmaWVsZHMgc3dhcCB3aXRoIHNlbGYKLSAg
ICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEVtcHR5TWVzc2FnZUxpdGUgZW1wdHlfbWVzc2FnZTsK
LSAgICBTZXRBbGxUeXBlc0luRW1wdHlNZXNzYWdlVW5rbm93bkZpZWxkcygmZW1wdHlfbWVzc2Fn
ZSk7Ci0gICAgZGF0YSA9IGVtcHR5X21lc3NhZ2UuU2VyaWFsaXplQXNTdHJpbmcoKTsKLSAgICBl
bXB0eV9tZXNzYWdlLlN3YXAoJmVtcHR5X21lc3NhZ2UpOwotICAgIEdPT0dMRV9DSEVDS19FUShk
YXRhLCBlbXB0eV9tZXNzYWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotICB9Ci0KLSAgewotICAg
IC8vIFRlc3QgTWVyZ2VGcm9tIHdpdGggdW5rbm93biBmaWVsZHMKLSAgICBwcm90b2J1Zl91bml0
dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSBtZXNzYWdlLCBtZXNzYWdlMjsKLSAgICBwcm90b2J1Zl91
bml0dGVzdDo6VGVzdEVtcHR5TWVzc2FnZUxpdGUgZW1wdHlfbWVzc2FnZSwgZW1wdHlfbWVzc2Fn
ZTI7Ci0gICAgbWVzc2FnZS5zZXRfb3B0aW9uYWxfaW50MzIoMTAxKTsKLSAgICBtZXNzYWdlLmFk
ZF9yZXBlYXRlZF9pbnQzMigyMDEpOwotICAgIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX25lc3RlZF9l
bnVtKGdvb2dsZTo6cHJvdG9idWY6OnVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNMaXRlOjpCQVopOwot
ICAgIG1lc3NhZ2UyLnNldF9vcHRpb25hbF9pbnQ2NCgxMDIpOwotICAgIG1lc3NhZ2UyLmFkZF9y
ZXBlYXRlZF9pbnQ2NCgyMDIpOwotICAgIG1lc3NhZ2UyLnNldF9vcHRpb25hbF9mb3JlaWduX2Vu
dW0oZ29vZ2xlOjpwcm90b2J1Zjo6dW5pdHRlc3Q6OkZPUkVJR05fTElURV9CQVopOwotCi0gICAg
ZGF0YSA9IG1lc3NhZ2UuU2VyaWFsaXplQXNTdHJpbmcoKTsKLSAgICBlbXB0eV9tZXNzYWdlLlBh
cnNlRnJvbVN0cmluZyhkYXRhKTsKLSAgICBkYXRhID0gbWVzc2FnZTIuU2VyaWFsaXplQXNTdHJp
bmcoKTsKLSAgICBlbXB0eV9tZXNzYWdlMi5QYXJzZUZyb21TdHJpbmcoZGF0YSk7Ci0gICAgbWVz
c2FnZS5NZXJnZUZyb20obWVzc2FnZTIpOwotICAgIGVtcHR5X21lc3NhZ2UuTWVyZ2VGcm9tKGVt
cHR5X21lc3NhZ2UyKTsKLQotICAgIGRhdGEgPSBlbXB0eV9tZXNzYWdlLlNlcmlhbGl6ZUFzU3Ry
aW5nKCk7Ci0gICAgbWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRhdGEpOwotICAgIC8vIFdlIGRv
IG5vdCBjb21wYXJlIHRoZSBzZXJpYWxpemVkIG91dHB1dCBvZiBhIG5vcm1hbCBtZXNzYWdlIGFu
ZCBhIGxpdGUKLSAgICAvLyBtZXNzYWdlIGJlY2F1c2UgdGhlIG9yZGVyIG9mIGZpZWxkcyBkbyBu
b3QgbWF0Y2guIFdlIGNvbnZlcnQgbGl0ZSBtZXNzYWdlCi0gICAgLy8gYmFjayBpbnRvIG5vcm1h
bCBtZXNzYWdlLCB0aGVuIGNvbXBhcmUuCi0gICAgR09PR0xFX0NIRUNLX0VRKG1lc3NhZ2UuU2Vy
aWFsaXplQXNTdHJpbmcoKSwgbWVzc2FnZTIuU2VyaWFsaXplQXNTdHJpbmcoKSk7Ci0gIH0KLQot
ICB7Ci0gICAgLy8gVGVzdCB1bmtub3duIGVudW0gdmFsdWUKLSAgICBwcm90b2J1Zl91bml0dGVz
dDo6VGVzdEFsbFR5cGVzTGl0ZSBtZXNzYWdlOwotICAgIHN0cmluZyBidWZmZXI7Ci0gICAgewot
ICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OlN0cmluZ091dHB1dFN0cmVhbSBvdXRwdXRfc3Ry
ZWFtKCZidWZmZXIpOwotICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3Ry
ZWFtIGNvZGVkX291dHB1dCgmb3V0cHV0X3N0cmVhbSk7Ci0gICAgICBnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlVGFnKAotICAgICAgICAgIHByb3RvYnVm
X3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXNMaXRlOjprT3B0aW9uYWxOZXN0ZWRFbnVtRmllbGROdW1i
ZXIsCi0gICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpXSVJFVFlQRV9WQVJJTlQsICZjb2RlZF9vdXRwdXQpOwotICAgICAgY29kZWRfb3V0cHV0Lldy
aXRlVmFyaW50MzIoMTApOwotICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZVRhZygKLSAgICAgICAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFs
bFR5cGVzTGl0ZTo6a1JlcGVhdGVkTmVzdGVkRW51bUZpZWxkTnVtYmVyLAotICAgICAgICAgIGdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfVkFSSU5U
LCAmY29kZWRfb3V0cHV0KTsKLSAgICAgIGNvZGVkX291dHB1dC5Xcml0ZVZhcmludDMyKDIwKTsK
LSAgICB9Ci0gICAgbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoYnVmZmVyKTsKLSAgICBkYXRhID0g
bWVzc2FnZS5TZXJpYWxpemVBc1N0cmluZygpOwotICAgIEdPT0dMRV9DSEVDS19FUShkYXRhLCBi
dWZmZXIpOwotICB9Ci0KLSAgewotICAgIC8vIFRlc3QgQ2xlYXIgd2l0aCB1bmtub3duIGZpZWxk
cwotICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RW1wdHlNZXNzYWdlTGl0ZSBlbXB0eV9tZXNz
YWdlOwotICAgIFNldEFsbFR5cGVzSW5FbXB0eU1lc3NhZ2VVbmtub3duRmllbGRzKCZlbXB0eV9t
ZXNzYWdlKTsKLSAgICBlbXB0eV9tZXNzYWdlLkNsZWFyKCk7Ci0gICAgR09PR0xFX0NIRUNLX0VR
KDAsIGVtcHR5X21lc3NhZ2UudW5rbm93bl9maWVsZHMoKS5zaXplKCkpOwotICB9Ci0KLSAgLy8g
VGVzdHMgZm9yIG1hcCBsaXRlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi0gIHsKLSAgICAvLyBBY2Nlc3NvcnMKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6
VGVzdE1hcExpdGUgbWVzc2FnZTsKLQotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0
VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpNYXBM
aXRlVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlKTsKLQotICAgIGdvb2dsZTo6
cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6TW9kaWZ5TWFwRmllbGRzKCZtZXNzYWdlKTsKLSAg
ICBnb29nbGU6OnByb3RvYnVmOjpNYXBMaXRlVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc01vZGlm
aWVkKG1lc3NhZ2UpOwotICB9Ci0KLSAgewotICAgIC8vIFNldE1hcEZpZWxkc0luaXRpYWxpemVk
Ci0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNYXBMaXRlIG1lc3NhZ2U7Ci0KLSAgICBnb29n
bGU6OnByb3RvYnVmOjpNYXBMaXRlVGVzdFV0aWw6OlNldE1hcEZpZWxkc0luaXRpYWxpemVkKCZt
ZXNzYWdlKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpNYXBMaXRlVGVzdFV0aWw6OkV4cGVjdE1h
cEZpZWxkc1NldEluaXRpYWxpemVkKG1lc3NhZ2UpOwotICB9Ci0KLSAgewotICAgIC8vIENsZWFy
Ci0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNYXBMaXRlIG1lc3NhZ2U7Ci0KLSAgICBnb29n
bGU6OnByb3RvYnVmOjpNYXBMaXRlVGVzdFV0aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZSk7Ci0g
ICAgbWVzc2FnZS5DbGVhcigpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRp
bDo6RXhwZWN0Q2xlYXIobWVzc2FnZSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ2xlYXJNZXNzYWdl
TWFwCi0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNZXNzYWdlTWFwTGl0ZSBtZXNzYWdlOwot
Ci0gICAgLy8gQ3JlYXRlcyBhIFRlc3RBbGxUeXBlcyB3aXRoIGRlZmF1bHQgdmFsdWUKLSAgICBn
b29nbGU6OnByb3RvYnVmOjpUZXN0VXRpbExpdGU6OkV4cGVjdENsZWFyKAotICAgICAgICAoKm1l
c3NhZ2UubXV0YWJsZV9tYXBfaW50MzJfbWVzc2FnZSgpKVswXSk7Ci0gIH0KLQotICB7Ci0gICAg
Ly8gQ29weUZyb20KLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1hcExpdGUgbWVzc2FnZTEs
IG1lc3NhZ2UyOwotCi0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6TWFwTGl0ZVRlc3RVdGlsOjpTZXRN
YXBGaWVsZHMoJm1lc3NhZ2UxKTsKLSAgICBtZXNzYWdlMi5Db3B5RnJvbShtZXNzYWdlMSk7Ci0g
ICAgZ29vZ2xlOjpwcm90b2J1Zjo6TWFwTGl0ZVRlc3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXQo
bWVzc2FnZTIpOwotCi0gICAgLy8gQ29weWluZyBmcm9tIHNlbGYgc2hvdWxkIGJlIGEgbm8tb3Au
Ci0gICAgbWVzc2FnZTIuQ29weUZyb20obWVzc2FnZTIpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6
Ok1hcExpdGVUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2UyKTsKLSAgfQotCi0g
IHsKLSAgICAvLyBDb3B5RnJvbU1lc3NhZ2VNYXAKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVz
dE1lc3NhZ2VNYXBMaXRlIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLQotICAgICgqbWVzc2FnZTEubXV0
YWJsZV9tYXBfaW50MzJfbWVzc2FnZSgpKVswXS5hZGRfcmVwZWF0ZWRfaW50MzIoMTAwKTsKLSAg
ICAoKm1lc3NhZ2UyLm11dGFibGVfbWFwX2ludDMyX21lc3NhZ2UoKSlbMF0uYWRkX3JlcGVhdGVk
X2ludDMyKDEwMSk7Ci0KLSAgICBtZXNzYWdlMS5Db3B5RnJvbShtZXNzYWdlMik7Ci0KLSAgICAv
LyBDaGVja3MgcmVwZWF0ZWQgZmllbGQgaXMgb3ZlcndyaXR0ZW4uCi0gICAgRVhQRUNUX0VRKDEs
IG1lc3NhZ2UxLm1hcF9pbnQzMl9tZXNzYWdlKCkuYXQoMCkucmVwZWF0ZWRfaW50MzJfc2l6ZSgp
KTsKLSAgICBFWFBFQ1RfRVEoMTAxLCBtZXNzYWdlMS5tYXBfaW50MzJfbWVzc2FnZSgpLmF0KDAp
LnJlcGVhdGVkX2ludDMyKDApKTsKLSAgfQotCi0gIHsKLSAgICAvLyBTd2FwV2l0aEVtcHR5Ci0g
ICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNYXBMaXRlIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLQot
ICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNz
YWdlMSk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6TWFwTGl0ZVRlc3RVdGlsOjpFeHBlY3RNYXBG
aWVsZHNTZXQobWVzc2FnZTEpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRp
bDo6RXhwZWN0Q2xlYXIobWVzc2FnZTIpOwotCi0gICAgbWVzc2FnZTEuU3dhcCgmbWVzc2FnZTIp
OwotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRz
U2V0KG1lc3NhZ2UyKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpNYXBMaXRlVGVzdFV0aWw6OkV4
cGVjdENsZWFyKG1lc3NhZ2UxKTsKLSAgfQotCi0gIHsKLSAgICAvLyBTd2FwV2l0aFNlbGYKLSAg
ICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1hcExpdGUgbWVzc2FnZTsKLQotICAgIGdvb2dsZTo6
cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlKTsKLSAgICBn
b29nbGU6OnByb3RvYnVmOjpNYXBMaXRlVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNz
YWdlKTsKLQotICAgIG1lc3NhZ2UuU3dhcCgmbWVzc2FnZSk7Ci0gICAgZ29vZ2xlOjpwcm90b2J1
Zjo6TWFwTGl0ZVRlc3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXQobWVzc2FnZSk7Ci0gIH0KLQot
ICB7Ci0gICAgLy8gU3dhcFdpdGhPdGhlcgotICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWFw
TGl0ZSBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0KLSAgICBnb29nbGU6OnByb3RvYnVmOjpNYXBMaXRl
VGVzdFV0aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZTEpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6
Ok1hcExpdGVUZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlMik7Ci0gICAgZ29vZ2xlOjpw
cm90b2J1Zjo6TWFwTGl0ZVRlc3RVdGlsOjpNb2RpZnlNYXBGaWVsZHMoJm1lc3NhZ2UyKTsKLQot
ICAgIG1lc3NhZ2UxLlN3YXAoJm1lc3NhZ2UyKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpNYXBM
aXRlVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc01vZGlmaWVkKG1lc3NhZ2UxKTsKLSAgICBnb29n
bGU6OnByb3RvYnVmOjpNYXBMaXRlVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdl
Mik7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ29weUNvbnN0cnVjdG9yCi0gICAgcHJvdG9idWZfdW5p
dHRlc3Q6OlRlc3RNYXBMaXRlIG1lc3NhZ2UxOwotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExp
dGVUZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlMSk7Ci0KLSAgICBwcm90b2J1Zl91bml0
dGVzdDo6VGVzdE1hcExpdGUgbWVzc2FnZTIobWVzc2FnZTEpOwotICAgIGdvb2dsZTo6cHJvdG9i
dWY6Ok1hcExpdGVUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2UyKTsKLSAgfQot
Ci0gIHsKLSAgICAvLyBDb3B5QXNzaWdubWVudE9wZXJhdG9yCi0gICAgcHJvdG9idWZfdW5pdHRl
c3Q6OlRlc3RNYXBMaXRlIG1lc3NhZ2UxOwotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVU
ZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlMSk7Ci0KLSAgICBwcm90b2J1Zl91bml0dGVz
dDo6VGVzdE1hcExpdGUgbWVzc2FnZTI7Ci0gICAgbWVzc2FnZTIgPSBtZXNzYWdlMTsKLSAgICBn
b29nbGU6OnByb3RvYnVmOjpNYXBMaXRlVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNz
YWdlMik7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBzZWxmLWFzc2lnbm1lbnQgZG9lcyBzb21l
dGhpbmcgc2FuZS4KLSAgICBtZXNzYWdlMi5vcGVyYXRvcj0obWVzc2FnZTIpOwotICAgIGdvb2ds
ZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2Uy
KTsKLSAgfQotCi0gIHsKLSAgICAvLyBOb25FbXB0eU1lcmdlRnJvbQotICAgIHByb3RvYnVmX3Vu
aXR0ZXN0OjpUZXN0TWFwTGl0ZSBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0KLSAgICBnb29nbGU6OnBy
b3RvYnVmOjpNYXBMaXRlVGVzdFV0aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZTEpOwotCi0gICAg
Ly8gVGhpcyBmaWVsZCB3aWxsIHRlc3QgbWVyZ2luZyBpbnRvIGFuIGVtcHR5IHNwb3QuCi0gICAg
KCptZXNzYWdlMi5tdXRhYmxlX21hcF9pbnQzMl9pbnQzMigpKVsxXSA9IDE7Ci0gICAgbWVzc2Fn
ZTEubXV0YWJsZV9tYXBfaW50MzJfaW50MzIoKS0+ZXJhc2UoMSk7Ci0KLSAgICAvLyBUaGlzIHRl
c3RzIG92ZXJ3cml0aW5nLgotICAgICgqbWVzc2FnZTIubXV0YWJsZV9tYXBfaW50MzJfZG91Ymxl
KCkpWzFdID0gMTsKLSAgICAoKm1lc3NhZ2UxLm11dGFibGVfbWFwX2ludDMyX2RvdWJsZSgpKVsx
XSA9IDI7Ci0KLSAgICBtZXNzYWdlMS5NZXJnZUZyb20obWVzc2FnZTIpOwotICAgIGdvb2dsZTo6
cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2UxKTsK
LSAgfQotCi0gIHsKLSAgICAvLyBNZXJnZUZyb21NZXNzYWdlTWFwCi0gICAgcHJvdG9idWZfdW5p
dHRlc3Q6OlRlc3RNZXNzYWdlTWFwTGl0ZSBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0KLSAgICAoKm1l
c3NhZ2UxLm11dGFibGVfbWFwX2ludDMyX21lc3NhZ2UoKSlbMF0uYWRkX3JlcGVhdGVkX2ludDMy
KDEwMCk7Ci0gICAgKCptZXNzYWdlMi5tdXRhYmxlX21hcF9pbnQzMl9tZXNzYWdlKCkpWzBdLmFk
ZF9yZXBlYXRlZF9pbnQzMigxMDEpOwotCi0gICAgbWVzc2FnZTEuTWVyZ2VGcm9tKG1lc3NhZ2Uy
KTsKLQotICAgIC8vIENoZWNrcyByZXBlYXRlZCBmaWVsZCBpcyBvdmVyd3JpdHRlbi4KLSAgICBF
WFBFQ1RfRVEoMSwgbWVzc2FnZTEubWFwX2ludDMyX21lc3NhZ2UoKS5hdCgwKS5yZXBlYXRlZF9p
bnQzMl9zaXplKCkpOwotICAgIEVYUEVDVF9FUSgxMDEsIG1lc3NhZ2UxLm1hcF9pbnQzMl9tZXNz
YWdlKCkuYXQoMCkucmVwZWF0ZWRfaW50MzIoMCkpOwotICB9Ci0KLSAgewotICAgIC8vIFRlc3Qg
dGhlIGdlbmVyYXRlZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KCkKLSAgICBwcm90
b2J1Zl91bml0dGVzdDo6VGVzdE1hcExpdGUgbWVzc2FnZTEsIG1lc3NhZ2UyOwotICAgIHN0cmlu
ZyBkYXRhOwotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6U2V0TWFwRmll
bGRzKCZtZXNzYWdlMSk7Ci0gICAgaW50IHNpemUgPSBtZXNzYWdlMS5CeXRlU2l6ZSgpOwotICAg
IGRhdGEucmVzaXplKHNpemUpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHN0YXJ0
ID0gcmVpbnRlcnByZXRfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCo+KDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6c3RyaW5nX2FzX2FycmF5KCZkYXRhKSk7Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50OCogZW5kID0gbWVzc2FnZTEuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJh
eShzdGFydCk7Ci0gICAgRVhQRUNUX0VRKHNpemUsIGVuZCAtIHN0YXJ0KTsKLSAgICBFWFBFQ1Rf
VFJVRShtZXNzYWdlMi5QYXJzZUZyb21TdHJpbmcoZGF0YSkpOwotICAgIGdvb2dsZTo6cHJvdG9i
dWY6Ok1hcExpdGVUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2UyKTsKLSAgfQot
Ci0gIHsKLSAgICAvLyBUZXN0IHRoZSBnZW5lcmF0ZWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KCkKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1hcExpdGUgbWVzc2FnZTEsIG1lc3NhZ2Uy
OwotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZt
ZXNzYWdlMSk7Ci0gICAgaW50IHNpemUgPSBtZXNzYWdlMS5CeXRlU2l6ZSgpOwotICAgIHN0cmlu
ZyBkYXRhOwotICAgIGRhdGEucmVzaXplKHNpemUpOwotICAgIHsKLSAgICAgIC8vIEFsbG93IHRo
ZSBvdXRwdXQgc3RyZWFtIHRvIGJ1ZmZlciBvbmx5IG9uZSBieXRlIGF0IGEgdGltZS4KLSAgICAg
IGdvb2dsZTo6cHJvdG9idWY6OmlvOjpBcnJheU91dHB1dFN0cmVhbSBhcnJheV9zdHJlYW0oCi0g
ICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpzdHJpbmdfYXNfYXJyYXkoJmRhdGEpLCBzaXpl
LCAxKTsKLSAgICAgIGdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRw
dXRfc3RyZWFtKCZhcnJheV9zdHJlYW0pOwotICAgICAgbWVzc2FnZTEuU2VyaWFsaXplV2l0aENh
Y2hlZFNpemVzKCZvdXRwdXRfc3RyZWFtKTsKLSAgICAgIEVYUEVDVF9GQUxTRShvdXRwdXRfc3Ry
ZWFtLkhhZEVycm9yKCkpOwotICAgICAgRVhQRUNUX0VRKHNpemUsIG91dHB1dF9zdHJlYW0uQnl0
ZUNvdW50KCkpOwotICAgIH0KLSAgICBFWFBFQ1RfVFJVRShtZXNzYWdlMi5QYXJzZUZyb21TdHJp
bmcoZGF0YSkpOwotICAgIGdvb2dsZTo6cHJvdG9idWY6Ok1hcExpdGVUZXN0VXRpbDo6RXhwZWN0
TWFwRmllbGRzU2V0KG1lc3NhZ2UyKTsKLSAgfQotCi0KLSAgewotICAgIC8vIFByb3RvMlVua25v
d25FbnVtCi0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RFbnVtTWFwUGx1c0V4dHJhTGl0ZSBm
cm9tOwotICAgICgqZnJvbS5tdXRhYmxlX2tub3duX21hcF9maWVsZCgpKVswXSA9Ci0gICAgICAg
IHByb3RvYnVmX3VuaXR0ZXN0OjpFX1BST1RPMl9NQVBfRU5VTV9GT09fTElURTsKLSAgICAoKmZy
b20ubXV0YWJsZV91bmtub3duX21hcF9maWVsZCgpKVswXSA9Ci0gICAgICAgIHByb3RvYnVmX3Vu
aXR0ZXN0OjpFX1BST1RPMl9NQVBfRU5VTV9FWFRSQV9MSVRFOwotICAgIHN0cmluZyBkYXRhOwot
ICAgIGZyb20uU2VyaWFsaXplVG9TdHJpbmcoJmRhdGEpOwotCi0gICAgcHJvdG9idWZfdW5pdHRl
c3Q6OlRlc3RFbnVtTWFwTGl0ZSB0bzsKLSAgICBFWFBFQ1RfVFJVRSh0by5QYXJzZUZyb21TdHJp
bmcoZGF0YSkpOwotICAgIEVYUEVDVF9FUSgwLCB0by51bmtub3duX21hcF9maWVsZCgpLnNpemUo
KSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHRvLm11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+ZW1wdHko
KSk7Ci0gICAgRVhQRUNUX0VRKDEsIHRvLmtub3duX21hcF9maWVsZCgpLnNpemUoKSk7Ci0gICAg
RVhQRUNUX0VRKHByb3RvYnVmX3VuaXR0ZXN0OjpQUk9UTzJfTUFQX0VOVU1fRk9PX0xJVEUsCi0g
ICAgICAgICAgICAgIHRvLmtub3duX21hcF9maWVsZCgpLmF0KDApKTsKLQotICAgIGRhdGEuY2xl
YXIoKTsKLSAgICBmcm9tLkNsZWFyKCk7Ci0gICAgdG8uU2VyaWFsaXplVG9TdHJpbmcoJmRhdGEp
OwotICAgIEVYUEVDVF9UUlVFKGZyb20uUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgICBFWFBF
Q1RfRVEoMSwgZnJvbS5rbm93bl9tYXBfZmllbGQoKS5zaXplKCkpOwotICAgIEVYUEVDVF9FUShw
cm90b2J1Zl91bml0dGVzdDo6RV9QUk9UTzJfTUFQX0VOVU1fRk9PX0xJVEUsCi0gICAgICAgICAg
ICAgIGZyb20ua25vd25fbWFwX2ZpZWxkKCkuYXQoMCkpOwotICAgIEVYUEVDVF9FUSgxLCBmcm9t
LnVua25vd25fbWFwX2ZpZWxkKCkuc2l6ZSgpKTsKLSAgICBFWFBFQ1RfRVEocHJvdG9idWZfdW5p
dHRlc3Q6OkVfUFJPVE8yX01BUF9FTlVNX0VYVFJBX0xJVEUsCi0gICAgICAgICAgICAgIGZyb20u
dW5rbm93bl9tYXBfZmllbGQoKS5hdCgwKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gU3RhbmRhcmRX
aXJlRm9ybWF0Ci0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNYXBMaXRlIG1lc3NhZ2U7Ci0g
ICAgc3RyaW5nIGRhdGEgPSAiXHgwQVx4MDRceDA4XHgwMVx4MTBceDAxIjsKLQotICAgIEVYUEVD
VF9UUlVFKG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgICBFWFBFQ1RfRVEoMSwg
bWVzc2FnZS5tYXBfaW50MzJfaW50MzIoKS5zaXplKCkpOwotICAgIEVYUEVDVF9FUSgxLCBtZXNz
YWdlLm1hcF9pbnQzMl9pbnQzMigpLmF0KDEpKTsKLSAgfQotCi0gIHsKLSAgICAvLyBVbm9yZGVy
ZWRXaXJlRm9ybWF0Ci0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNYXBMaXRlIG1lc3NhZ2U7
Ci0KLSAgICAvLyBwdXQgdmFsdWUgYmVmb3JlIGtleSBpbiB3aXJlIGZvcm1hdAotICAgIHN0cmlu
ZyBkYXRhID0gIlx4MEFceDA0XHgxMFx4MDFceDA4XHgwMiI7Ci0KLSAgICBFWFBFQ1RfVFJVRSht
ZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gICAgRVhQRUNUX0VRKDEsIG1lc3NhZ2Uu
bWFwX2ludDMyX2ludDMyKCkuc2l6ZSgpKTsKLSAgICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5tYXBf
aW50MzJfaW50MzIoKS5hdCgyKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gRHVwbGljYXRlZEtleVdp
cmVGb3JtYXQKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1hcExpdGUgbWVzc2FnZTsKLQot
ICAgIC8vIFR3byBrZXkgZmllbGRzIGluIHdpcmUgZm9ybWF0Ci0gICAgc3RyaW5nIGRhdGEgPSAi
XHgwQVx4MDZceDA4XHgwMVx4MDhceDAyXHgxMFx4MDEiOwotCi0gICAgRVhQRUNUX1RSVUUobWVz
c2FnZS5QYXJzZUZyb21TdHJpbmcoZGF0YSkpOwotICAgIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1h
cF9pbnQzMl9pbnQzMigpLnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2lu
dDMyX2ludDMyKCkuYXQoMikpOwotICB9Ci0KLSAgewotICAgIC8vIER1cGxpY2F0ZWRWYWx1ZVdp
cmVGb3JtYXQKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1hcExpdGUgbWVzc2FnZTsKLQot
ICAgIC8vIFR3byB2YWx1ZSBmaWVsZHMgaW4gd2lyZSBmb3JtYXQKLSAgICBzdHJpbmcgZGF0YSA9
ICJceDBBXHgwNlx4MDhceDAxXHgxMFx4MDFceDEwXHgwMiI7Ci0KLSAgICBFWFBFQ1RfVFJVRSht
ZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gICAgRVhQRUNUX0VRKDEsIG1lc3NhZ2Uu
bWFwX2ludDMyX2ludDMyKCkuc2l6ZSgpKTsKLSAgICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBf
aW50MzJfaW50MzIoKS5hdCgxKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gTWlzc2VkS2V5V2lyZUZv
cm1hdAotICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWFwTGl0ZSBtZXNzYWdlOwotCi0gICAg
Ly8gTm8ga2V5IGZpZWxkIGluIHdpcmUgZm9ybWF0Ci0gICAgc3RyaW5nIGRhdGEgPSAiXHgwQVx4
MDJceDEwXHgwMSI7Ci0KLSAgICBFWFBFQ1RfVFJVRShtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhk
YXRhKSk7Ci0gICAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2ludDMyKCkuc2l6ZSgp
KTsKLSAgICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5tYXBfaW50MzJfaW50MzIoKS5hdCgwKSk7Ci0g
IH0KLQotICB7Ci0gICAgLy8gTWlzc2VkVmFsdWVXaXJlRm9ybWF0Ci0gICAgcHJvdG9idWZfdW5p
dHRlc3Q6OlRlc3RNYXBMaXRlIG1lc3NhZ2U7Ci0KLSAgICAvLyBObyB2YWx1ZSBmaWVsZCBpbiB3
aXJlIGZvcm1hdAotICAgIHN0cmluZyBkYXRhID0gIlx4MEFceDAyXHgwOFx4MDEiOwotCi0gICAg
RVhQRUNUX1RSVUUobWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoZGF0YSkpOwotICAgIEVYUEVDVF9F
USgxLCBtZXNzYWdlLm1hcF9pbnQzMl9pbnQzMigpLnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKDAs
IG1lc3NhZ2UubWFwX2ludDMyX2ludDMyKCkuYXQoMSkpOwotICB9Ci0KLSAgewotICAgIC8vIFVu
a25vd25GaWVsZFdpcmVGb3JtYXQKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1hcExpdGUg
bWVzc2FnZTsKLQotICAgIC8vIFVua25vd24gZmllbGQgaW4gd2lyZSBmb3JtYXQKLSAgICBzdHJp
bmcgZGF0YSA9ICJceDBBXHgwNlx4MDhceDAyXHgxMFx4MDNceDE4XHgwMSI7Ci0KLSAgICBFWFBF
Q1RfVFJVRShtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gICAgRVhQRUNUX0VRKDEs
IG1lc3NhZ2UubWFwX2ludDMyX2ludDMyKCkuc2l6ZSgpKTsKLSAgICBFWFBFQ1RfRVEoMywgbWVz
c2FnZS5tYXBfaW50MzJfaW50MzIoKS5hdCgyKSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gQ29ycnVw
dGVkV2lyZUZvcm1hdAotICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWFwTGl0ZSBtZXNzYWdl
OwotCi0gICAgLy8gY29ycnVwdGVkIGRhdGEgaW4gd2lyZSBmb3JtYXQKLSAgICBzdHJpbmcgZGF0
YSA9ICJceDBBXHgwNlx4MDhceDAyXHgxMVx4MDMiOwotCi0gICAgRVhQRUNUX0ZBTFNFKG1lc3Nh
Z2UuUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgfQotCi0gIHsKLSAgICAvLyBJc0luaXRpYWxp
emVkCi0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RSZXF1aXJlZE1lc3NhZ2VNYXBMaXRlIG1h
cF9tZXNzYWdlOwotCi0gICAgLy8gQWRkIGFuIHVuaW5pdGlhbGl6ZWQgbWVzc2FnZS4KLSAgICAo
Km1hcF9tZXNzYWdlLm11dGFibGVfbWFwX2ZpZWxkKCkpWzBdOwotICAgIEVYUEVDVF9GQUxTRSht
YXBfbWVzc2FnZS5Jc0luaXRpYWxpemVkKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB1bmluaXRp
YWxpemVkIG1lc3NhZ2UKLSAgICAoKm1hcF9tZXNzYWdlLm11dGFibGVfbWFwX2ZpZWxkKCkpWzBd
LnNldF9hKDApOwotICAgICgqbWFwX21lc3NhZ2UubXV0YWJsZV9tYXBfZmllbGQoKSlbMF0uc2V0
X2IoMCk7Ci0gICAgKCptYXBfbWVzc2FnZS5tdXRhYmxlX21hcF9maWVsZCgpKVswXS5zZXRfYygw
KTsKLSAgICBFWFBFQ1RfVFJVRShtYXBfbWVzc2FnZS5Jc0luaXRpYWxpemVkKCkpOwotICB9Ci0K
LSAgewotICAgICAgLy8gQ2hlY2sgdGhhdCBhZGRpbmcgbW9yZSB2YWx1ZXMgdG8gZW51bSBkb2Vz
IG5vdCBjb3JydXB0IG1lc3NhZ2UKLSAgICAgIC8vIHdoZW4gcGFzc2VkIHRocm91Z2ggYW4gb2xk
IGNsaWVudC4KLSAgICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpWMk1lc3NhZ2VMaXRlIHYyX21lc3Nh
Z2U7Ci0gICAgICB2Ml9tZXNzYWdlLnNldF9pbnRfZmllbGQoODAwKTsKLSAgICAgIC8vIFNldCBl
bnVtIGZpZWxkIHRvIHRoZSB2YWx1ZSBub3QgdW5kZXJzdG9vZCBieSB0aGUgb2xkIGNsaWVudC4K
LSAgICAgIHYyX21lc3NhZ2Uuc2V0X2VudW1fZmllbGQocHJvdG9idWZfdW5pdHRlc3Q6OlYyX1NF
Q09ORCk7Ci0gICAgICBzdHJpbmcgdjJfYnl0ZXMgPSB2Ml9tZXNzYWdlLlNlcmlhbGl6ZUFzU3Ry
aW5nKCk7Ci0KLSAgICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpWMU1lc3NhZ2VMaXRlIHYxX21lc3Nh
Z2U7Ci0gICAgICB2MV9tZXNzYWdlLlBhcnNlRnJvbVN0cmluZyh2Ml9ieXRlcyk7Ci0gICAgICBF
WFBFQ1RfVFJVRSh2MV9tZXNzYWdlLklzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgICBFWFBFQ1RfRVEo
djFfbWVzc2FnZS5pbnRfZmllbGQoKSwgdjJfbWVzc2FnZS5pbnRfZmllbGQoKSk7Ci0gICAgICAv
LyBWMSBjbGllbnQgZG9lcyBub3QgdW5kZXJzdGFuZCBWMl9TRUNPTkQgdmFsdWUsIHNvIGl0IGRp
c2NhcmRzIGl0IGFuZAotICAgICAgLy8gdXNlcyBkZWZhdWx0IHZhbHVlIGluc3RlYWQuCi0gICAg
ICBFWFBFQ1RfRVEodjFfbWVzc2FnZS5lbnVtX2ZpZWxkKCksIHByb3RvYnVmX3VuaXR0ZXN0OjpW
MV9GSVJTVCk7Ci0KLSAgICAgIC8vIEhvd2V2ZXIsIHdoZW4gcmUtc2VyaWFsaXplZCwgaXQgc2hv
dWxkIHByZXNlcnZlIGVudW0gdmFsdWUuCi0gICAgICBzdHJpbmcgdjFfYnl0ZXMgPSB2MV9tZXNz
YWdlLlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci0KLSAgICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpWMk1l
c3NhZ2VMaXRlIHNhbWVfdjJfbWVzc2FnZTsKLSAgICAgIHNhbWVfdjJfbWVzc2FnZS5QYXJzZUZy
b21TdHJpbmcodjFfYnl0ZXMpOwotCi0gICAgICBFWFBFQ1RfRVEodjJfbWVzc2FnZS5pbnRfZmll
bGQoKSwgc2FtZV92Ml9tZXNzYWdlLmludF9maWVsZCgpKTsKLSAgICAgIEVYUEVDVF9FUSh2Ml9t
ZXNzYWdlLmVudW1fZmllbGQoKSwgc2FtZV92Ml9tZXNzYWdlLmVudW1fZmllbGQoKSk7Ci0gIH0K
LQotICBzdGQ6OmNvdXQgPDwgIlBBU1MiIDw8IHN0ZDo6ZW5kbDsKLSAgcmV0dXJuIDA7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
bWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMWE3MWU0MzY0ZTRkYWUxYWFl
MDlmNmNlNjc4MmNhMTEwNTk4YmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21hcC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTcyMSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRl
ZiBHT09HTEVfUFJPVE9CVUZfTUFQX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfTUFQX0hf
XwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2hhc2guaD4KLSNpbmNsdWRlIDxp
dGVyYXRvcj4KLSNpbmNsdWRlIDxsaW1pdHM+ICAvLyBUbyBzdXBwb3J0IFZpc3VhbCBTdHVkaW8g
MjAwOAotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9h
cmVuYS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfZW51bV91dGlsLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF90eXBlX2hhbmRsZXIuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9k
ZXNjcmlwdG9yLmg+Ci0jaWYgX19jcHBfZXhjZXB0aW9ucyAmJiBMQU5HX0NYWDExCi0jaW5jbHVk
ZSA8cmFuZG9tPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLQotLy8gVGhlIE1hcCBhbmQgTWFwSXRlcmF0b3IgdHlwZXMgYXJlIHByb3ZpZGVkIGJ5
IHRoaXMgaGVhZGVyIGZpbGUuCi0vLyBQbGVhc2UgYXZvaWQgdXNpbmcgb3RoZXIgdHlwZXMgZGVm
aW5lZCBoZXJlLCB1bmxlc3MgdGhleSBhcmUgcHVibGljCi0vLyB0eXBlcyB3aXRoaW4gTWFwIG9y
IE1hcEl0ZXJhdG9yLCBzdWNoIGFzIE1hcDo6dmFsdWVfdHlwZS4KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFQ+Ci1jbGFzcyBNYXA7Ci0KLWNsYXNzIE1hcEl0ZXJhdG9yOwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgRW51bT4gc3RydWN0IGlzX3Byb3RvX2VudW07Ci0KLW5hbWVzcGFj
ZSBpbnRlcm5hbCB7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAg
ICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga2V5X3dpcmVfdHlwZSwKLSAgICAgICAgICBX
aXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIHZhbHVlX3dpcmVfdHlwZSwKLSAgICAgICAgICBpbnQg
ZGVmYXVsdF9lbnVtX3ZhbHVlPgotY2xhc3MgTWFwRmllbGRMaXRlOwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5
cGUga2V5X3dpcmVfdHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIHZh
bHVlX3dpcmVfdHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVlPgotY2xhc3Mg
TWFwRmllbGQ7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQ+Ci1jbGFzcyBU
eXBlRGVmaW5lZE1hcEZpZWxkQmFzZTsKLQotY2xhc3MgRHluYW1pY01hcEZpZWxkOwotCi1jbGFz
cyBHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjsKLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAot
Ci0jZGVmaW5lIFRZUEVfQ0hFQ0soRVhQRUNURURUWVBFLCBNRVRIT0QpICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBpZiAodHlwZSgpICE9IEVYUEVDVEVEVFlQRSkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBHT09HTEVfTE9HKEZBVEFMKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICA8PCAiUHJvdG9j
b2wgQnVmZmVyIG1hcCB1c2FnZSBlcnJvcjpcbiIgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
PDwgTUVUSE9EIDw8ICIgdHlwZSBkb2VzIG5vdCBtYXRjaFxuIiAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIDw8ICIgIEV4cGVjdGVkIDogIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICA8PCBGaWVsZERlc2NyaXB0b3I6OkNwcFR5cGVOYW1lKEVYUEVD
VEVEVFlQRSkgPDwgIlxuIiAgIFwKLSAgICAgICAgPDwgIiAgQWN0dWFsICAgOiAiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIDw8IEZpZWxkRGVzY3JpcHRv
cjo6Q3BwVHlwZU5hbWUodHlwZSgpKTsgICAgICAgICAgICAgICAgXAotICB9Ci0KLS8vIE1hcEtl
eSBpcyBhbiB1bmlvbiB0eXBlIGZvciByZXByZXNlbnRpbmcgYW55IHBvc3NpYmxlCi0vLyBtYXAg
a2V5LgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE1hcEtleSB7Ci0gcHVibGljOgotICBNYXBL
ZXkoKSA6IHR5cGVfKDApIHsKLSAgfQotICBNYXBLZXkoY29uc3QgTWFwS2V5JiBvdGhlcikgOiB0
eXBlXygwKSB7Ci0gICAgQ29weUZyb20ob3RoZXIpOwotICB9Ci0KLSAgfk1hcEtleSgpIHsKLSAg
ICBpZiAodHlwZV8gPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORykgewotICAgICAg
ZGVsZXRlIHZhbF8uc3RyaW5nX3ZhbHVlXzsKLSAgICB9Ci0gIH0KLQotICBGaWVsZERlc2NyaXB0
b3I6OkNwcFR5cGUgdHlwZSgpIGNvbnN0IHsKLSAgICBpZiAodHlwZV8gPT0gMCkgewotICAgICAg
R09PR0xFX0xPRyhGQVRBTCkKLSAgICAgICAgICA8PCAiUHJvdG9jb2wgQnVmZmVyIG1hcCB1c2Fn
ZSBlcnJvcjpcbiIKLSAgICAgICAgICA8PCAiTWFwS2V5Ojp0eXBlIE1hcEtleSBpcyBub3QgaW5p
dGlhbGl6ZWQuICIKLSAgICAgICAgICA8PCAiQ2FsbCBzZXQgbWV0aG9kcyB0byBpbml0aWFsaXpl
IE1hcEtleS4iOwotICAgIH0KLSAgICByZXR1cm4gKEZpZWxkRGVzY3JpcHRvcjo6Q3BwVHlwZSl0
eXBlXzsKLSAgfQotCi0gIHZvaWQgU2V0SW50NjRWYWx1ZShpbnQ2NCB2YWx1ZSkgewotICAgIFNl
dFR5cGUoRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0KTsKLSAgICB2YWxfLmludDY0X3Zh
bHVlXyA9IHZhbHVlOwotICB9Ci0gIHZvaWQgU2V0VUludDY0VmFsdWUodWludDY0IHZhbHVlKSB7
Ci0gICAgU2V0VHlwZShGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDY0KTsKLSAgICB2YWxf
LnVpbnQ2NF92YWx1ZV8gPSB2YWx1ZTsKLSAgfQotICB2b2lkIFNldEludDMyVmFsdWUoaW50MzIg
dmFsdWUpIHsKLSAgICBTZXRUeXBlKEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQzMik7Ci0g
ICAgdmFsXy5pbnQzMl92YWx1ZV8gPSB2YWx1ZTsKLSAgfQotICB2b2lkIFNldFVJbnQzMlZhbHVl
KHVpbnQzMiB2YWx1ZSkgewotICAgIFNldFR5cGUoRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJ
TlQzMik7Ci0gICAgdmFsXy51aW50MzJfdmFsdWVfID0gdmFsdWU7Ci0gIH0KLSAgdm9pZCBTZXRC
b29sVmFsdWUoYm9vbCB2YWx1ZSkgewotICAgIFNldFR5cGUoRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX0JPT0wpOwotICAgIHZhbF8uYm9vbF92YWx1ZV8gPSB2YWx1ZTsKLSAgfQotICB2b2lkIFNl
dFN0cmluZ1ZhbHVlKGNvbnN0IHN0cmluZyYgdmFsKSB7Ci0gICAgU2V0VHlwZShGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfU1RSSU5HKTsKLSAgICAqdmFsXy5zdHJpbmdfdmFsdWVfID0gdmFsOwot
ICB9Ci0KLSAgaW50NjQgR2V0SW50NjRWYWx1ZSgpIGNvbnN0IHsKLSAgICBUWVBFX0NIRUNLKEZp
ZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQ2NCwKLSAgICAgICAgICAgICAgICJNYXBLZXk6Okdl
dEludDY0VmFsdWUiKTsKLSAgICByZXR1cm4gdmFsXy5pbnQ2NF92YWx1ZV87Ci0gIH0KLSAgdWlu
dDY0IEdldFVJbnQ2NFZhbHVlKCkgY29uc3QgewotICAgIFRZUEVfQ0hFQ0soRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX1VJTlQ2NCwKLSAgICAgICAgICAgICAgICJNYXBLZXk6OkdldFVJbnQ2NFZh
bHVlIik7Ci0gICAgcmV0dXJuIHZhbF8udWludDY0X3ZhbHVlXzsKLSAgfQotICBpbnQzMiBHZXRJ
bnQzMlZhbHVlKCkgY29uc3QgewotICAgIFRZUEVfQ0hFQ0soRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX0lOVDMyLAotICAgICAgICAgICAgICAgIk1hcEtleTo6R2V0SW50MzJWYWx1ZSIpOwotICAg
IHJldHVybiB2YWxfLmludDMyX3ZhbHVlXzsKLSAgfQotICB1aW50MzIgR2V0VUludDMyVmFsdWUo
KSBjb25zdCB7Ci0gICAgVFlQRV9DSEVDSyhGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMy
LAotICAgICAgICAgICAgICAgIk1hcEtleTo6R2V0VUludDMyVmFsdWUiKTsKLSAgICByZXR1cm4g
dmFsXy51aW50MzJfdmFsdWVfOwotICB9Ci0gIGJvb2wgR2V0Qm9vbFZhbHVlKCkgY29uc3Qgewot
ICAgIFRZUEVfQ0hFQ0soRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0wsCi0gICAgICAgICAg
ICAgICAiTWFwS2V5OjpHZXRCb29sVmFsdWUiKTsKLSAgICByZXR1cm4gdmFsXy5ib29sX3ZhbHVl
XzsKLSAgfQotICBjb25zdCBzdHJpbmcmIEdldFN0cmluZ1ZhbHVlKCkgY29uc3QgewotICAgIFRZ
UEVfQ0hFQ0soRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORywKLSAgICAgICAgICAgICAg
ICJNYXBLZXk6OkdldFN0cmluZ1ZhbHVlIik7Ci0gICAgcmV0dXJuICp2YWxfLnN0cmluZ192YWx1
ZV87Ci0gIH0KLQotICBib29sIG9wZXJhdG9yPChjb25zdCBNYXBLZXkmIG90aGVyKSBjb25zdCB7
Ci0gICAgaWYgKHR5cGVfICE9IG90aGVyLnR5cGVfKSB7Ci0gICAgICAvLyBXZSBjb3VsZCBkZWZp
bmUgYSB0b3RhbCBvcmRlciB0aGF0IGhhbmRsZXMgdGhpcyBjYXNlLCBidXQKLSAgICAgIC8vIHRo
ZXJlIGN1cnJlbnRseSBubyBuZWVkLiAgU28sIGZvciBub3csIGZhaWwuCi0gICAgICBHT09HTEVf
TE9HKEZBVEFMKSA8PCAiVW5zdXBwb3J0ZWQ6IHR5cGUgbWlzbWF0Y2giOwotICAgIH0KLSAgICBz
d2l0Y2ggKHR5cGUoKSkgewotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRE9V
QkxFOgotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQ6Ci0gICAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNOgotICAgICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIlVu
c3VwcG9ydGVkIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfU1RSSU5HOgotICAgICAgICByZXR1cm4gKnZhbF8uc3RyaW5nX3ZhbHVl
XyA8ICpvdGhlci52YWxfLnN0cmluZ192YWx1ZV87Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9JTlQ2NDoKLSAgICAgICAgcmV0dXJuIHZhbF8uaW50NjRfdmFsdWVfIDwgb3Ro
ZXIudmFsXy5pbnQ2NF92YWx1ZV87Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9JTlQzMjoKLSAgICAgICAgcmV0dXJuIHZhbF8uaW50MzJfdmFsdWVfIDwgb3RoZXIudmFsXy5p
bnQzMl92YWx1ZV87Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UNjQ6
Ci0gICAgICAgIHJldHVybiB2YWxfLnVpbnQ2NF92YWx1ZV8gPCBvdGhlci52YWxfLnVpbnQ2NF92
YWx1ZV87Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UMzI6Ci0gICAg
ICAgIHJldHVybiB2YWxfLnVpbnQzMl92YWx1ZV8gPCBvdGhlci52YWxfLnVpbnQzMl92YWx1ZV87
Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9CT09MOgotICAgICAgICByZXR1
cm4gdmFsXy5ib29sX3ZhbHVlXyA8IG90aGVyLnZhbF8uYm9vbF92YWx1ZV87Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXBLZXkmIG90
aGVyKSBjb25zdCB7Ci0gICAgaWYgKHR5cGVfICE9IG90aGVyLnR5cGVfKSB7Ci0gICAgICAvLyBU
byBiZSBjb25zaXN0ZW50IHdpdGggb3BlcmF0b3I8LCB3ZSBkb24ndCBhbGxvdyB0aGlzIGVpdGhl
ci4KLSAgICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJVbnN1cHBvcnRlZDogdHlwZSBtaXNtYXRj
aCI7Ci0gICAgfQotICAgIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9ET1VCTEU6Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9GTE9BVDoKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAg
ICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgICBHT09HTEVf
TE9HKEZBVEFMKSA8PCAiVW5zdXBwb3J0ZWQiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzoKLSAgICAgICAgcmV0dXJuICp2YWxfLnN0
cmluZ192YWx1ZV8gPT0gKm90aGVyLnZhbF8uc3RyaW5nX3ZhbHVlXzsKLSAgICAgIGNhc2UgRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OgotICAgICAgICByZXR1cm4gdmFsXy5pbnQ2NF92
YWx1ZV8gPT0gb3RoZXIudmFsXy5pbnQ2NF92YWx1ZV87Ci0gICAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9JTlQzMjoKLSAgICAgICAgcmV0dXJuIHZhbF8uaW50MzJfdmFsdWVfID09
IG90aGVyLnZhbF8uaW50MzJfdmFsdWVfOwotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfVUlOVDY0OgotICAgICAgICByZXR1cm4gdmFsXy51aW50NjRfdmFsdWVfID09IG90aGVy
LnZhbF8udWludDY0X3ZhbHVlXzsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X1VJTlQzMjoKLSAgICAgICAgcmV0dXJuIHZhbF8udWludDMyX3ZhbHVlXyA9PSBvdGhlci52YWxf
LnVpbnQzMl92YWx1ZV87Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9CT09M
OgotICAgICAgICByZXR1cm4gdmFsXy5ib29sX3ZhbHVlXyA9PSBvdGhlci52YWxfLmJvb2xfdmFs
dWVfOwotICAgIH0KLSAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3QgZ2V0IGhlcmUuIjsK
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB2b2lkIENvcHlGcm9tKGNvbnN0IE1hcEtleSYg
b3RoZXIpIHsKLSAgICBTZXRUeXBlKG90aGVyLnR5cGUoKSk7Ci0gICAgc3dpdGNoICh0eXBlXykg
ewotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRE9VQkxFOgotICAgICAgY2Fz
ZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQ6Ci0gICAgICBjYXNlIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9FTlVNOgotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
TUVTU0FHRToKLSAgICAgICAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIlVuc3VwcG9ydGVkIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6
Ci0gICAgICAgICp2YWxfLnN0cmluZ192YWx1ZV8gPSAqb3RoZXIudmFsXy5zdHJpbmdfdmFsdWVf
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lO
VDY0OgotICAgICAgICB2YWxfLmludDY0X3ZhbHVlXyA9IG90aGVyLnZhbF8uaW50NjRfdmFsdWVf
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lO
VDMyOgotICAgICAgICB2YWxfLmludDMyX3ZhbHVlXyA9IG90aGVyLnZhbF8uaW50MzJfdmFsdWVf
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJ
TlQ2NDoKLSAgICAgICAgdmFsXy51aW50NjRfdmFsdWVfID0gb3RoZXIudmFsXy51aW50NjRfdmFs
dWVfOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X1VJTlQzMjoKLSAgICAgICAgdmFsXy51aW50MzJfdmFsdWVfID0gb3RoZXIudmFsXy51aW50MzJf
dmFsdWVfOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX0JPT0w6Ci0gICAgICAgIHZhbF8uYm9vbF92YWx1ZV8gPSBvdGhlci52YWxfLmJvb2xfdmFs
dWVfOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHRlbXBsYXRl
IDx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotICBmcmllbmQgY2xhc3MgaW50ZXJuYWw6OlR5cGVE
ZWZpbmVkTWFwRmllbGRCYXNlOwotICBmcmllbmQgY2xhc3MgTWFwSXRlcmF0b3I7Ci0gIGZyaWVu
ZCBjbGFzcyBpbnRlcm5hbDo6RHluYW1pY01hcEZpZWxkOwotCi0gIHVuaW9uIEtleVZhbHVlIHsK
LSAgICBLZXlWYWx1ZSgpIHt9Ci0gICAgc3RyaW5nKiBzdHJpbmdfdmFsdWVfOwotICAgIGludDY0
IGludDY0X3ZhbHVlXzsKLSAgICBpbnQzMiBpbnQzMl92YWx1ZV87Ci0gICAgdWludDY0IHVpbnQ2
NF92YWx1ZV87Ci0gICAgdWludDMyIHVpbnQzMl92YWx1ZV87Ci0gICAgYm9vbCBib29sX3ZhbHVl
XzsKLSAgfSB2YWxfOwotCi0gIHZvaWQgU2V0VHlwZShGaWVsZERlc2NyaXB0b3I6OkNwcFR5cGUg
dHlwZSkgewotICAgIGlmICh0eXBlXyA9PSB0eXBlKSByZXR1cm47Ci0gICAgaWYgKHR5cGVfID09
IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkcpIHsKLSAgICAgIGRlbGV0ZSB2YWxfLnN0
cmluZ192YWx1ZV87Ci0gICAgfQotICAgIHR5cGVfID0gdHlwZTsKLSAgICBpZiAodHlwZV8gPT0g
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORykgewotICAgICAgdmFsXy5zdHJpbmdfdmFs
dWVfID0gbmV3IHN0cmluZzsKLSAgICB9Ci0gIH0KLQotICAvLyB0eXBlXyBpcyAwIG9yIGEgdmFs
aWQgRmllbGREZXNjcmlwdG9yOjpDcHBUeXBlLgotICBpbnQgdHlwZV87Ci19OwotCi0vLyBNYXBW
YWx1ZVJlZiBwb2ludHMgdG8gYSBtYXAgdmFsdWUuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQg
TWFwVmFsdWVSZWYgewotIHB1YmxpYzoKLSAgTWFwVmFsdWVSZWYoKSA6IGRhdGFfKE5VTEwpLCB0
eXBlXygwKSB7fQotCi0gIHZvaWQgU2V0SW50NjRWYWx1ZShpbnQ2NCB2YWx1ZSkgewotICAgIFRZ
UEVfQ0hFQ0soRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0LAotICAgICAgICAgICAgICAg
Ik1hcFZhbHVlUmVmOjpTZXRJbnQ2NFZhbHVlIik7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50
NjQqPihkYXRhXykgPSB2YWx1ZTsKLSAgfQotICB2b2lkIFNldFVJbnQ2NFZhbHVlKHVpbnQ2NCB2
YWx1ZSkgewotICAgIFRZUEVfQ0hFQ0soRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NCwK
LSAgICAgICAgICAgICAgICJNYXBWYWx1ZVJlZjo6U2V0VUludDY0VmFsdWUiKTsKLSAgICAqcmVp
bnRlcnByZXRfY2FzdDx1aW50NjQqPihkYXRhXykgPSB2YWx1ZTsKLSAgfQotICB2b2lkIFNldElu
dDMyVmFsdWUoaW50MzIgdmFsdWUpIHsKLSAgICBUWVBFX0NIRUNLKEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9JTlQzMiwKLSAgICAgICAgICAgICAgICJNYXBWYWx1ZVJlZjo6U2V0SW50MzJWYWx1
ZSIpOwotICAgICpyZWludGVycHJldF9jYXN0PGludDMyKj4oZGF0YV8pID0gdmFsdWU7Ci0gIH0K
LSAgdm9pZCBTZXRVSW50MzJWYWx1ZSh1aW50MzIgdmFsdWUpIHsKLSAgICBUWVBFX0NIRUNLKEZp
ZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UMzIsCi0gICAgICAgICAgICAgICAiTWFwVmFsdWVS
ZWY6OlNldFVJbnQzMlZhbHVlIik7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyKj4oZGF0
YV8pID0gdmFsdWU7Ci0gIH0KLSAgdm9pZCBTZXRCb29sVmFsdWUoYm9vbCB2YWx1ZSkgewotICAg
IFRZUEVfQ0hFQ0soRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0wsCi0gICAgICAgICAgICAg
ICAiTWFwVmFsdWVSZWY6OlNldEJvb2xWYWx1ZSIpOwotICAgICpyZWludGVycHJldF9jYXN0PGJv
b2wqPihkYXRhXykgPSB2YWx1ZTsKLSAgfQotICAvLyBUT0RPKGppZWx1bykgLSBDaGVja3MgdGhh
dCBlbnVtIGlzIG1lbWJlci4KLSAgdm9pZCBTZXRFbnVtVmFsdWUoaW50IHZhbHVlKSB7Ci0gICAg
VFlQRV9DSEVDSyhGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTSwKLSAgICAgICAgICAgICAg
ICJNYXBWYWx1ZVJlZjo6U2V0RW51bVZhbHVlIik7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50
Kj4oZGF0YV8pID0gdmFsdWU7Ci0gIH0KLSAgdm9pZCBTZXRTdHJpbmdWYWx1ZShjb25zdCBzdHJp
bmcmIHZhbHVlKSB7Ci0gICAgVFlQRV9DSEVDSyhGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RS
SU5HLAotICAgICAgICAgICAgICAgIk1hcFZhbHVlUmVmOjpTZXRTdHJpbmdWYWx1ZSIpOwotICAg
ICpyZWludGVycHJldF9jYXN0PHN0cmluZyo+KGRhdGFfKSA9IHZhbHVlOwotICB9Ci0gIHZvaWQg
U2V0RmxvYXRWYWx1ZShmbG9hdCB2YWx1ZSkgewotICAgIFRZUEVfQ0hFQ0soRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX0ZMT0FULAotICAgICAgICAgICAgICAgIk1hcFZhbHVlUmVmOjpTZXRGbG9h
dFZhbHVlIik7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihkYXRhXykgPSB2YWx1ZTsK
LSAgfQotICB2b2lkIFNldERvdWJsZVZhbHVlKGRvdWJsZSB2YWx1ZSkgewotICAgIFRZUEVfQ0hF
Q0soRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRSwKLSAgICAgICAgICAgICAgICJNYXBW
YWx1ZVJlZjo6U2V0RG91YmxlVmFsdWUiKTsKLSAgICAqcmVpbnRlcnByZXRfY2FzdDxkb3VibGUq
PihkYXRhXykgPSB2YWx1ZTsKLSAgfQotCi0gIGludDY0IEdldEludDY0VmFsdWUoKSBjb25zdCB7
Ci0gICAgVFlQRV9DSEVDSyhGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UNjQsCi0gICAgICAg
ICAgICAgICAiTWFwVmFsdWVSZWY6OkdldEludDY0VmFsdWUiKTsKLSAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8aW50NjQqPihkYXRhXyk7Ci0gIH0KLSAgdWludDY0IEdldFVJbnQ2NFZhbHVl
KCkgY29uc3QgewotICAgIFRZUEVfQ0hFQ0soRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2
NCwKLSAgICAgICAgICAgICAgICJNYXBWYWx1ZVJlZjo6R2V0VUludDY0VmFsdWUiKTsKLSAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0Kj4oZGF0YV8pOwotICB9Ci0gIGludDMyIEdl
dEludDMyVmFsdWUoKSBjb25zdCB7Ci0gICAgVFlQRV9DSEVDSyhGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfSU5UMzIsCi0gICAgICAgICAgICAgICAiTWFwVmFsdWVSZWY6OkdldEludDMyVmFsdWUi
KTsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8aW50MzIqPihkYXRhXyk7Ci0gIH0KLSAg
dWludDMyIEdldFVJbnQzMlZhbHVlKCkgY29uc3QgewotICAgIFRZUEVfQ0hFQ0soRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFX1VJTlQzMiwKLSAgICAgICAgICAgICAgICJNYXBWYWx1ZVJlZjo6R2V0
VUludDMyVmFsdWUiKTsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyKj4oZGF0
YV8pOwotICB9Ci0gIGJvb2wgR2V0Qm9vbFZhbHVlKCkgY29uc3QgewotICAgIFRZUEVfQ0hFQ0so
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JPT0wsCi0gICAgICAgICAgICAgICAiTWFwVmFsdWVS
ZWY6OkdldEJvb2xWYWx1ZSIpOwotICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxib29sKj4o
ZGF0YV8pOwotICB9Ci0gIGludCBHZXRFbnVtVmFsdWUoKSBjb25zdCB7Ci0gICAgVFlQRV9DSEVD
SyhGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRU5VTSwKLSAgICAgICAgICAgICAgICJNYXBWYWx1
ZVJlZjo6R2V0RW51bVZhbHVlIik7Ci0gICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGludCo+
KGRhdGFfKTsKLSAgfQotICBjb25zdCBzdHJpbmcmIEdldFN0cmluZ1ZhbHVlKCkgY29uc3Qgewot
ICAgIFRZUEVfQ0hFQ0soRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORywKLSAgICAgICAg
ICAgICAgICJNYXBWYWx1ZVJlZjo6R2V0U3RyaW5nVmFsdWUiKTsKLSAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8c3RyaW5nKj4oZGF0YV8pOwotICB9Ci0gIGZsb2F0IEdldEZsb2F0VmFsdWUo
KSBjb25zdCB7Ci0gICAgVFlQRV9DSEVDSyhGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQs
Ci0gICAgICAgICAgICAgICAiTWFwVmFsdWVSZWY6OkdldEZsb2F0VmFsdWUiKTsKLSAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihkYXRhXyk7Ci0gIH0KLSAgZG91YmxlIEdldERv
dWJsZVZhbHVlKCkgY29uc3QgewotICAgIFRZUEVfQ0hFQ0soRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX0RPVUJMRSwKLSAgICAgICAgICAgICAgICJNYXBWYWx1ZVJlZjo6R2V0RG91YmxlVmFsdWUi
KTsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oZGF0YV8pOwotICB9Ci0K
LSAgY29uc3QgTWVzc2FnZSYgR2V0TWVzc2FnZVZhbHVlKCkgY29uc3QgewotICAgIFRZUEVfQ0hF
Q0soRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UsCi0gICAgICAgICAgICAgICAiTWFw
VmFsdWVSZWY6OkdldE1lc3NhZ2VWYWx1ZSIpOwotICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxNZXNzYWdlKj4oZGF0YV8pOwotICB9Ci0KLSAgTWVzc2FnZSogTXV0YWJsZU1lc3NhZ2VWYWx1
ZSgpIHsKLSAgICBUWVBFX0NIRUNLKEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFLAot
ICAgICAgICAgICAgICAgIk1hcFZhbHVlUmVmOjpNdXRhYmxlTWVzc2FnZVZhbHVlIik7Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWVzc2FnZSo+KGRhdGFfKTsKLSAgfQotCi0gcHJpdmF0
ZToKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEssIHR5cGVuYW1lIFYsCi0gICAgICAgICAgICBpbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrZXlfd2lyZV90eXBlLAotICAgICAgICAg
ICAgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUgdmFsdWVfd2lyZV90eXBlLAot
ICAgICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4KLSAgZnJpZW5kIGNsYXNzIGludGVy
bmFsOjpNYXBGaWVsZDsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci0gIGZy
aWVuZCBjbGFzcyBpbnRlcm5hbDo6VHlwZURlZmluZWRNYXBGaWVsZEJhc2U7Ci0gIGZyaWVuZCBj
bGFzcyBNYXBJdGVyYXRvcjsKLSAgZnJpZW5kIGNsYXNzIGludGVybmFsOjpHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvbjsKLSAgZnJpZW5kIGNsYXNzIGludGVybmFsOjpEeW5hbWljTWFwRmllbGQ7
Ci0KLSAgdm9pZCBTZXRUeXBlKEZpZWxkRGVzY3JpcHRvcjo6Q3BwVHlwZSB0eXBlKSB7Ci0gICAg
dHlwZV8gPSB0eXBlOwotICB9Ci0KLSAgRmllbGREZXNjcmlwdG9yOjpDcHBUeXBlIHR5cGUoKSBj
b25zdCB7Ci0gICAgaWYgKHR5cGVfID09IDAgfHwgZGF0YV8gPT0gTlVMTCkgewotICAgICAgR09P
R0xFX0xPRyhGQVRBTCkKLSAgICAgICAgICA8PCAiUHJvdG9jb2wgQnVmZmVyIG1hcCB1c2FnZSBl
cnJvcjpcbiIKLSAgICAgICAgICA8PCAiTWFwVmFsdWVSZWY6OnR5cGUgTWFwVmFsdWVSZWYgaXMg
bm90IGluaXRpYWxpemVkLiI7Ci0gICAgfQotICAgIHJldHVybiAoRmllbGREZXNjcmlwdG9yOjpD
cHBUeXBlKXR5cGVfOwotICB9Ci0gIHZvaWQgU2V0VmFsdWUoY29uc3Qgdm9pZCogdmFsKSB7Ci0g
ICAgZGF0YV8gPSBjb25zdF9jYXN0PHZvaWQqPih2YWwpOwotICB9Ci0gIHZvaWQgQ29weUZyb20o
Y29uc3QgTWFwVmFsdWVSZWYmIG90aGVyKSB7Ci0gICAgdHlwZV8gPSBvdGhlci50eXBlXzsKLSAg
ICBkYXRhXyA9IG90aGVyLmRhdGFfOwotICB9Ci0gIC8vIE9ubHkgdXNlZCBpbiBEeW5hbWljTWFw
RmllbGQKLSAgdm9pZCBEZWxldGVEYXRhKCkgewotICAgIHN3aXRjaCAodHlwZV8pIHsKLSNkZWZp
bmUgSEFORExFX1RZUEUoQ1BQVFlQRSwgVFlQRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV8jI0NQUFRZUEU6IHsgICAgICAgIFwKLSAgICAgICAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8
VFlQRSo+KGRhdGFfKTsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfQotICAg
ICAgSEFORExFX1RZUEUoSU5UMzIsIGludDMyKTsKLSAgICAgIEhBTkRMRV9UWVBFKElOVDY0LCBp
bnQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQRShVSU5UMzIsIHVpbnQzMik7Ci0gICAgICBIQU5ETEVf
VFlQRShVSU5UNjQsIHVpbnQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQRShET1VCTEUsIGRvdWJsZSk7
Ci0gICAgICBIQU5ETEVfVFlQRShGTE9BVCwgZmxvYXQpOwotICAgICAgSEFORExFX1RZUEUoQk9P
TCwgYm9vbCk7Ci0gICAgICBIQU5ETEVfVFlQRShTVFJJTkcsIHN0cmluZyk7Ci0gICAgICBIQU5E
TEVfVFlQRShFTlVNLCBpbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQRShNRVNTQUdFLCBNZXNzYWdl
KTsKLSN1bmRlZiBIQU5ETEVfVFlQRQotICAgIH0KLSAgfQotICAvLyBkYXRhXyBwb2ludCB0byBh
IG1hcCB2YWx1ZS4gTWFwVmFsdWVSZWYgZG9lcyBub3QKLSAgLy8gb3duIHRoaXMgdmFsdWUuCi0g
IHZvaWQqIGRhdGFfOwotICAvLyB0eXBlXyBpcyAwIG9yIGEgdmFsaWQgRmllbGREZXNjcmlwdG9y
OjpDcHBUeXBlLgotICBpbnQgdHlwZV87Ci19OwotCi0jdW5kZWYgVFlQRV9DSEVDSwotCi0vLyBU
aGlzIGlzIHRoZSBjbGFzcyBmb3IgZ29vZ2xlOjpwcm90b2J1Zjo6TWFwJ3MgaW50ZXJuYWwgdmFs
dWVfdHlwZS4gSW5zdGVhZCBvZiB1c2luZwotLy8gc3RkOjpwYWlyIGFzIHZhbHVlX3R5cGUsIHdl
IHVzZSB0aGlzIGNsYXNzIHdoaWNoIHByb3ZpZGVzIHVzIG1vcmUgY29udHJvbCBvZgotLy8gaXRz
IHByb2Nlc3Mgb2YgY29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlvbi4KLXRlbXBsYXRlIDx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFQ+Ci1jbGFzcyBNYXBQYWlyIHsKLSBwdWJsaWM6Ci0gIHR5cGVk
ZWYgY29uc3QgS2V5IGZpcnN0X3R5cGU7Ci0gIHR5cGVkZWYgVCBzZWNvbmRfdHlwZTsKLQotICBN
YXBQYWlyKGNvbnN0IEtleSYgb3RoZXJfZmlyc3QsIGNvbnN0IFQmIG90aGVyX3NlY29uZCkKLSAg
ICAgIDogZmlyc3Qob3RoZXJfZmlyc3QpLCBzZWNvbmQob3RoZXJfc2Vjb25kKSB7fQotICBleHBs
aWNpdCBNYXBQYWlyKGNvbnN0IEtleSYgb3RoZXJfZmlyc3QpIDogZmlyc3Qob3RoZXJfZmlyc3Qp
LCBzZWNvbmQoKSB7fQotICBNYXBQYWlyKGNvbnN0IE1hcFBhaXImIG90aGVyKQotICAgICAgOiBm
aXJzdChvdGhlci5maXJzdCksIHNlY29uZChvdGhlci5zZWNvbmQpIHt9Ci0KLSAgfk1hcFBhaXIo
KSB7fQotCi0gIC8vIEltcGxpY2l0bHkgY29udmVydGlibGUgdG8gc3RkOjpwYWlyIG9mIGNvbXBh
dGlibGUgdHlwZXMuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci0gIG9w
ZXJhdG9yIHN0ZDo6cGFpcjxUMSwgVDI+KCkgY29uc3QgewotICAgIHJldHVybiBzdGQ6OnBhaXI8
VDEsIFQyPihmaXJzdCwgc2Vjb25kKTsKLSAgfQotCi0gIGNvbnN0IEtleSBmaXJzdDsKLSAgVCBz
ZWNvbmQ7Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpB
cmVuYTsKLSAgZnJpZW5kIGNsYXNzIE1hcDxLZXksIFQ+OwotfTsKLQotLy8gZ29vZ2xlOjpwcm90
b2J1Zjo6TWFwIGlzIGFuIGFzc29jaWF0aXZlIGNvbnRhaW5lciB0eXBlIHVzZWQgdG8gc3RvcmUg
cHJvdG9idWYgbWFwCi0vLyBmaWVsZHMuICBFYWNoIE1hcCBpbnN0YW5jZSBtYXkgb3IgbWF5IG5v
dCB1c2UgYSBkaWZmZXJlbnQgaGFzaCBmdW5jdGlvbiwgYQotLy8gZGlmZmVyZW50IGl0ZXJhdGlv
biBvcmRlciwgYW5kIHNvIG9uLiAgRS5nLiwgcGxlYXNlIGRvbid0IGV4YW1pbmUKLS8vIGltcGxl
bWVudGF0aW9uIGRldGFpbHMgdG8gZGVjaWRlIGlmIHRoZSBmb2xsb3dpbmcgd291bGQgd29yazoK
LS8vICBNYXA8aW50LCBpbnQ+IG0wLCBtMTsKLS8vICBtMFswXSA9IG0xWzBdID0gbTBbMV0gPSBt
MVsxXSA9IDA7Ci0vLyAgYXNzZXJ0KG0wLmJlZ2luKCktPmZpcnN0ID09IG0xLmJlZ2luKCktPmZp
cnN0KTsgIC8vIEJ1ZyEKLS8vCi0vLyBNYXAncyBpbnRlcmZhY2UgaXMgc2ltaWxhciB0byBzdGQ6
OnVub3JkZXJlZF9tYXAsIGV4Y2VwdCB0aGF0IE1hcCBpcyBub3QKLS8vIGRlc2lnbmVkIHRvIHBs
YXkgd2VsbCB3aXRoIGV4Y2VwdGlvbnMuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBUPgotY2xhc3MgTWFwIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgS2V5IGtleV90eXBlOwotICB0
eXBlZGVmIFQgbWFwcGVkX3R5cGU7Ci0gIHR5cGVkZWYgTWFwUGFpcjxLZXksIFQ+IHZhbHVlX3R5
cGU7Ci0KLSAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwotICB0eXBlZGVmIGNvbnN0IHZh
bHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7Ci0gIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNl
OwotICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKLQotICB0eXBl
ZGVmIHNpemVfdCBzaXplX3R5cGU7Ci0gIHR5cGVkZWYgaGFzaDxLZXk+IGhhc2hlcjsKLQotICBN
YXAoYm9vbCBvbGRfc3R5bGUgPSB0cnVlKQotICAgICAgOiBhcmVuYV8oTlVMTCksCi0gICAgICAg
IGRlZmF1bHRfZW51bV92YWx1ZV8oMCksCi0gICAgICAgIG9sZF9zdHlsZV8ob2xkX3N0eWxlKSB7
Ci0gICAgSW5pdCgpOwotICB9Ci0gIGV4cGxpY2l0IE1hcChBcmVuYSogYXJlbmEsIGJvb2wgb2xk
X3N0eWxlID0gdHJ1ZSkKLSAgICAgIDogYXJlbmFfKGFyZW5hKSwKLSAgICAgICAgZGVmYXVsdF9l
bnVtX3ZhbHVlXygwKSwKLSAgICAgICAgb2xkX3N0eWxlXyhvbGRfc3R5bGUpIHsKLSAgICBJbml0
KCk7Ci0gIH0KLSAgTWFwKGNvbnN0IE1hcCYgb3RoZXIpCi0gICAgICA6IGFyZW5hXyhOVUxMKSwK
LSAgICAgICAgZGVmYXVsdF9lbnVtX3ZhbHVlXyhvdGhlci5kZWZhdWx0X2VudW1fdmFsdWVfKSwK
LSAgICAgICAgb2xkX3N0eWxlXyhvdGhlci5vbGRfc3R5bGVfKSB7Ci0gICAgSW5pdCgpOwotICAg
IGluc2VydChvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNs
YXNzIElucHV0SXQ+Ci0gIE1hcChjb25zdCBJbnB1dEl0JiBmaXJzdCwgY29uc3QgSW5wdXRJdCYg
bGFzdCwgYm9vbCBvbGRfc3R5bGUgPSB0cnVlKQotICAgICAgOiBhcmVuYV8oTlVMTCksCi0gICAg
ICAgIGRlZmF1bHRfZW51bV92YWx1ZV8oMCksCi0gICAgICAgIG9sZF9zdHlsZV8ob2xkX3N0eWxl
KSB7Ci0gICAgSW5pdCgpOwotICAgIGluc2VydChmaXJzdCwgbGFzdCk7Ci0gIH0KLQotICB+TWFw
KCkgewotICAgIGNsZWFyKCk7Ci0gICAgaWYgKGFyZW5hXyA9PSBOVUxMKSB7Ci0gICAgICBpZiAo
b2xkX3N0eWxlXykKLSAgICAgICAgZGVsZXRlIGRlcHJlY2F0ZWRfZWxlbWVudHNfOwotICAgICAg
ZWxzZQotICAgICAgICBkZWxldGUgZWxlbWVudHNfOwotICAgIH0KLSAgfQotCi0gcHJpdmF0ZToK
LSAgdm9pZCBJbml0KCkgewotICAgIGlmIChvbGRfc3R5bGVfKQotICAgICAgZGVwcmVjYXRlZF9l
bGVtZW50c18gPSBBcmVuYTo6Q3JlYXRlPERlcHJlY2F0ZWRJbm5lck1hcD4oCi0gICAgICAgICAg
YXJlbmFfLCAwLCBoYXNoZXIoKSwgZXF1YWxfdG88S2V5PigpLAotICAgICAgICAgIE1hcEFsbG9j
YXRvcjxzdGQ6OnBhaXI8Y29uc3QgS2V5LCBNYXBQYWlyPEtleSwgVD4qPiA+KGFyZW5hXykpOwot
ICAgIGVsc2UKLSAgICAgIGVsZW1lbnRzXyA9Ci0gICAgICAgICAgQXJlbmE6OkNyZWF0ZTxJbm5l
ck1hcD4oYXJlbmFfLCAwLCBoYXNoZXIoKSwgQWxsb2NhdG9yKGFyZW5hXykpOwotICB9Ci0KLSAg
Ly8gcmUtaW1wbGVtZW50IHN0ZDo6YWxsb2NhdG9yIHRvIHVzZSBhcmVuYSBhbGxvY2F0b3IgZm9y
IG1lbW9yeSBhbGxvY2F0aW9uLgotICAvLyBVc2VkIGZvciBnb29nbGU6OnByb3RvYnVmOjpNYXAg
aW1wbGVtZW50YXRpb24uIFVzZXJzIHNob3VsZCBub3QgdXNlIHRoaXMgY2xhc3MKLSAgLy8gZGly
ZWN0bHkuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICBjbGFzcyBNYXBBbGxvY2F0b3Igewot
ICAgcHVibGljOgotICAgIHR5cGVkZWYgVSB2YWx1ZV90eXBlOwotICAgIHR5cGVkZWYgdmFsdWVf
dHlwZSogcG9pbnRlcjsKLSAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50
ZXI7Ci0gICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7Ci0gICAgdHlwZWRlZiBjb25z
dCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7Ci0gICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90
eXBlOwotICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKLQotICAgIE1hcEFs
bG9jYXRvcigpIDogYXJlbmFfKE5VTEwpIHt9Ci0gICAgZXhwbGljaXQgTWFwQWxsb2NhdG9yKEFy
ZW5hKiBhcmVuYSkgOiBhcmVuYV8oYXJlbmEpIHt9Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+
Ci0gICAgTWFwQWxsb2NhdG9yKGNvbnN0IE1hcEFsbG9jYXRvcjxYPiYgYWxsb2NhdG9yKQotICAg
ICAgICA6IGFyZW5hXyhhbGxvY2F0b3IuYXJlbmFfKSB7fQotCi0gICAgcG9pbnRlciBhbGxvY2F0
ZShzaXplX3R5cGUgbiwgY29uc3RfcG9pbnRlciBoaW50ID0gMCkgewotICAgICAgLy8gSWYgYXJl
bmEgaXMgbm90IGdpdmVuLCBtYWxsb2MgbmVlZHMgdG8gYmUgY2FsbGVkIHdoaWNoIGRvZXNuJ3QK
LSAgICAgIC8vIGNvbnN0cnVjdCBlbGVtZW50IG9iamVjdC4KLSAgICAgIGlmIChhcmVuYV8gPT0g
TlVMTCkgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihtYWxsb2Mo
biAqIHNpemVvZih2YWx1ZV90eXBlKSkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oCi0gICAgICAgICAgICBBcmVuYTo6Q3JlYXRlQXJy
YXk8dWludDg+KGFyZW5hXywgbiAqIHNpemVvZih2YWx1ZV90eXBlKSkpOwotICAgICAgfQotICAg
IH0KLQotICAgIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIHAsIHNpemVfdHlwZSBuKSB7Ci0gICAg
ICBpZiAoYXJlbmFfID09IE5VTEwpIHsKLSAgICAgICAgZnJlZShwKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMICYmICFkZWZpbmVkKEdPT0dMRV9QUk9UT0JV
Rl9PU19BUFBMRSkgJiYgXAotICAgICFkZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9PU19OQUNMKSAm
JiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIWRlZmluZWQoR09PR0xFX1BST1RP
QlVGX09TX0FORFJPSUQpICYmICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAhZGVmaW5l
ZChHT09HTEVfUFJPVE9CVUZfT1NfRU1TQ1JJUFRFTikKLSAgICB0ZW1wbGF0ZTxjbGFzcyBOb2Rl
VHlwZSwgY2xhc3MuLi4gQXJncz4KLSAgICB2b2lkIGNvbnN0cnVjdChOb2RlVHlwZSogcCwgQXJn
cyYmLi4uIGFyZ3MpIHsKLSAgICAgIC8vIENsYW5nIDMuNiBkb2Vzbid0IGNvbXBpbGUgc3RhdGlj
IGNhc3RpbmcgdG8gdm9pZCogZGlyZWN0bHkuIChJc3N1ZQotICAgICAgLy8gIzEyNjYpIEFjY29y
ZGluZyBDKysgc3RhbmRhcmQgNS4yLjkvMTogIlRoZSBzdGF0aWNfY2FzdCBvcGVyYXRvciBzaGFs
bAotICAgICAgLy8gbm90IGNhc3QgYXdheSBjb25zdG5lc3MiLiBTbyBmaXJzdCB0aGUgbWF5YmUg
Y29uc3QgcG9pbnRlciBpcyBjYXN0ZWQgdG8KLSAgICAgIC8vIGNvbnN0IHZvaWQqIGFuZCBhZnRl
ciB0aGUgY29uc3Qgdm9pZCogaXMgY29uc3QgY2FzdGVkLgotICAgICAgbmV3IChjb25zdF9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4ocCkpKQotICAgICAgICAgIE5vZGVUeXBl
KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xh
c3MgTm9kZVR5cGU+Ci0gICAgdm9pZCBkZXN0cm95KE5vZGVUeXBlKiBwKSB7Ci0gICAgICBwLT5+
Tm9kZVR5cGUoKTsKLSAgICB9Ci0jZWxzZQotICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwg
Y29uc3RfcmVmZXJlbmNlIHQpIHsgbmV3IChwKSB2YWx1ZV90eXBlKHQpOyB9Ci0KLSAgICB2b2lk
IGRlc3Ryb3kocG9pbnRlciBwKSB7IHAtPn52YWx1ZV90eXBlKCk7IH0KLSNlbmRpZgotCi0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFg+Ci0gICAgc3RydWN0IHJlYmluZCB7Ci0gICAgICB0eXBlZGVm
IE1hcEFsbG9jYXRvcjxYPiBvdGhlcjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFg+Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hcEFsbG9jYXRvcjxYPiYgb3RoZXIpIGNv
bnN0IHsKLSAgICAgIHJldHVybiBhcmVuYV8gPT0gb3RoZXIuYXJlbmFfOwotICAgIH0KLQotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBYPgotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXBBbGxv
Y2F0b3I8WD4mIG90aGVyKSBjb25zdCB7Ci0gICAgICByZXR1cm4gYXJlbmFfICE9IG90aGVyLmFy
ZW5hXzsKLSAgICB9Ci0KLSAgICAvLyBUbyBzdXBwb3J0IFZpc3VhbCBTdHVkaW8gMjAwOAotICAg
IHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsKLSAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdHlwZT46Om1heCgpOwotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICB0eXBl
ZGVmIHZvaWQgRGVzdHJ1Y3RvclNraXBwYWJsZV87Ci0gICAgQXJlbmEqIGNvbnN0IGFyZW5hXzsK
LQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBYPgotICAgIGZyaWVuZCBjbGFzcyBNYXBBbGxvY2F0
b3I7Ci0gIH07Ci0KLSAgLy8gSW5uZXJNYXAncyBrZXkgdHlwZSBpcyBLZXkgYW5kIGl0cyB2YWx1
ZSB0eXBlIGlzIHZhbHVlX3R5cGUqLiAgV2UgdXNlIGEKLSAgLy8gY3VzdG9tIGNsYXNzIGhlcmUg
YW5kIGZvciBOb2RlLCBiZWxvdywgdG8gZW5zdXJlIHRoYXQga18gaXMgYXQgb2Zmc2V0IDAsCi0g
IC8vIGFsbG93aW5nIHNhZmUgY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gTm9kZSB0byBwb2lu
dGVyIHRvIEtleSwgYW5kIHZpY2UKLSAgLy8gdmVyc2Egd2hlbiBhcHByb3ByaWF0ZS4KLSAgY2xh
c3MgS2V5VmFsdWVQYWlyIHsKLSAgIHB1YmxpYzoKLSAgICBLZXlWYWx1ZVBhaXIoY29uc3QgS2V5
JiBrLCB2YWx1ZV90eXBlKiB2KSA6IGtfKGspLCB2Xyh2KSB7fQotCi0gICAgY29uc3QgS2V5JiBr
ZXkoKSBjb25zdCB7IHJldHVybiBrXzsgfQotICAgIEtleSYga2V5KCkgeyByZXR1cm4ga187IH0K
LSAgICB2YWx1ZV90eXBlKiBjb25zdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHZfOyB9Ci0gICAg
dmFsdWVfdHlwZSomIHZhbHVlKCkgeyByZXR1cm4gdl87IH0KLQotICAgcHJpdmF0ZToKLSAgICBL
ZXkga187Ci0gICAgdmFsdWVfdHlwZSogdl87Ci0gIH07Ci0KLSAgdHlwZWRlZiBNYXBBbGxvY2F0
b3I8S2V5VmFsdWVQYWlyPiBBbGxvY2F0b3I7Ci0KLSAgLy8gSW5uZXJNYXAgaXMgYSBnZW5lcmlj
IGhhc2gtYmFzZWQgbWFwLiAgSXQgZG9lc24ndCBjb250YWluIGFueQotICAvLyBwcm90b2NvbC1i
dWZmZXItc3BlY2lmaWMgbG9naWMuICBJdCBpcyBhIGNoYWluaW5nIGhhc2ggbWFwIHdpdGggdGhl
Ci0gIC8vIGFkZGl0aW9uYWwgZmVhdHVyZSB0aGF0IHNvbWUgYnVja2V0cyBjYW4gYmUgY29udmVy
dGVkIHRvIHVzZSBhbiBvcmRlcmVkCi0gIC8vIGNvbnRhaW5lci4gIFRoaXMgZW5zdXJlcyBPKGxn
IG4pIGJvdW5kcyBvbiBmaW5kLCBpbnNlcnQsIGFuZCBlcmFzZSwgd2hpbGUKLSAgLy8gYXZvaWRp
bmcgdGhlIG92ZXJoZWFkcyBvZiBvcmRlcmVkIGNvbnRhaW5lcnMgbW9zdCBvZiB0aGUgdGltZS4K
LSAgLy8KLSAgLy8gVGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgbmVlZCB0aGUgZnVsbCBnZW5l
cmFsaXR5IG9mIHVub3JkZXJlZF9tYXAsCi0gIC8vIGFuZCBpdCBkb2Vzbid0IGhhdmUgaXQuICBN
b3JlIGJlbGxzIGFuZCB3aGlzdGxlcyBjYW4gYmUgYWRkZWQgYXMgbmVlZGVkLgotICAvLyBTb21l
IGltcGxlbWVudGF0aW9uIGRldGFpbHM6Ci0gIC8vIDEuIFRoZSBoYXNoIGZ1bmN0aW9uIGhhcyB0
eXBlIGhhc2hlciBhbmQgdGhlIGVxdWFsaXR5IGZ1bmN0aW9uCi0gIC8vICAgIGVxdWFsX3RvPEtl
eT4uICBXZSBpbmhlcml0IGZyb20gaGFzaGVyIHRvIHNhdmUgc3BhY2UKLSAgLy8gICAgKGVtcHR5
LWJhc2UtY2xhc3Mgb3B0aW1pemF0aW9uKS4KLSAgLy8gMi4gVGhlIG51bWJlciBvZiBidWNrZXRz
IGlzIGEgcG93ZXIgb2YgdHdvLgotICAvLyAzLiBCdWNrZXRzIGFyZSBjb252ZXJ0ZWQgdG8gdHJl
ZXMgaW4gcGFpcnM6IGlmIHdlIGNvbnZlcnQgYnVja2V0IGIgdGhlbgotICAvLyAgICBidWNrZXRz
IGIgYW5kIGJeMSB3aWxsIHNoYXJlIGEgdHJlZS4gIEludmFyaWFudDogYnVja2V0cyBiIGFuZCBi
XjEgaGF2ZQotICAvLyAgICB0aGUgc2FtZSBub24tTlVMTCB2YWx1ZSBpZmYgdGhleSBhcmUgc2hh
cmluZyBhIHRyZWUuICAoQW4gYWx0ZXJuYXRpdmUKLSAgLy8gICAgaW1wbGVtZW50YXRpb24gc3Ry
YXRlZ3kgd291bGQgYmUgdG8gaGF2ZSBhIHRhZyBiaXQgcGVyIGJ1Y2tldC4pCi0gIC8vIDQuIEFz
IGlzIHR5cGljYWwgZm9yIGhhc2hfbWFwIGFuZCBzdWNoLCB0aGUgS2V5cyBhbmQgVmFsdWVzIGFy
ZSBhbHdheXMKLSAgLy8gICAgc3RvcmVkIGluIGxpbmtlZCBsaXN0IG5vZGVzLiAgUG9pbnRlcnMg
dG8gZWxlbWVudHMgYXJlIG5ldmVyIGludmFsaWRhdGVkCi0gIC8vICAgIHVudGlsIHRoZSBlbGVt
ZW50IGlzIGRlbGV0ZWQuCi0gIC8vIDUuIFRoZSB0cmVlcycgcGF5bG9hZCB0eXBlIGlzIHBvaW50
ZXIgdG8gbGlua2VkLWxpc3Qgbm9kZS4gIFRyZWUtY29udmVydGluZwotICAvLyAgICBhIGJ1Y2tl
dCBkb2Vzbid0IGNvcHkgS2V5LVZhbHVlIHBhaXJzLgotICAvLyA2LiBPbmNlIHdlJ3ZlIHRyZWUt
Y29udmVydGVkIGEgYnVja2V0LCBpdCBpcyBuZXZlciBjb252ZXJ0ZWQgYmFjay4gSG93ZXZlciwK
LSAgLy8gICAgdGhlIGl0ZW1zIGEgdHJlZSBjb250YWlucyBtYXkgd2luZCB1cCBhc3NpZ25lZCB0
byB0cmVlcyBvciBsaXN0cyB1cG9uIGEKLSAgLy8gICAgcmVoYXNoLgotICAvLyA3LiBUaGUgY29k
ZSByZXF1aXJlcyBubyBDKysgZmVhdHVyZXMgZnJvbSBDKysxMSBvciBsYXRlci4KLSAgLy8gOC4g
TXV0YXRpb25zIHRvIGEgbWFwIGRvIG5vdCBpbnZhbGlkYXRlIHRoZSBtYXAncyBpdGVyYXRvcnMs
IHBvaW50ZXJzIHRvCi0gIC8vICAgIGVsZW1lbnRzLCBvciByZWZlcmVuY2VzIHRvIGVsZW1lbnRz
LgotICAvLyA5LiBFeGNlcHQgZm9yIGVyYXNlKGl0ZXJhdG9yKSwgYW55IG5vbi1jb25zdCBtZXRo
b2QgY2FuIHJlb3JkZXIgaXRlcmF0b3JzLgotICBjbGFzcyBJbm5lck1hcCA6IHByaXZhdGUgaGFz
aGVyIHsKLSAgIHB1YmxpYzoKLSAgICB0eXBlZGVmIHZhbHVlX3R5cGUqIFZhbHVlOwotCi0gICAg
SW5uZXJNYXAoc2l6ZV90eXBlIG4sIGhhc2hlciBoLCBBbGxvY2F0b3IgYWxsb2MpCi0gICAgICAg
IDogaGFzaGVyKGgpLAotICAgICAgICAgIG51bV9lbGVtZW50c18oMCksCi0gICAgICAgICAgc2Vl
ZF8oU2VlZCgpKSwKLSAgICAgICAgICB0YWJsZV8oTlVMTCksCi0gICAgICAgICAgYWxsb2NfKGFs
bG9jKSB7Ci0gICAgICBuID0gVGFibGVTaXplKG4pOwotICAgICAgdGFibGVfID0gQ3JlYXRlRW1w
dHlUYWJsZShuKTsKLSAgICAgIG51bV9idWNrZXRzXyA9IGluZGV4X29mX2ZpcnN0X25vbl9udWxs
XyA9IG47Ci0gICAgfQotCi0gICAgfklubmVyTWFwKCkgewotICAgICAgaWYgKHRhYmxlXyAhPSBO
VUxMKSB7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIERlYWxsb2M8dm9pZCo+KHRhYmxlXywg
bnVtX2J1Y2tldHNfKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgZW51bSB7
IGtNaW5UYWJsZVNpemUgPSA4IH07Ci0KLSAgICAvLyBMaW5rZWQtbGlzdCBub2RlcywgYXMgb25l
IHdvdWxkIGV4cGVjdCBmb3IgYSBjaGFpbmluZyBoYXNoIHRhYmxlLgotICAgIHN0cnVjdCBOb2Rl
IHsKLSAgICAgIEtleVZhbHVlUGFpciBrdjsKLSAgICAgIE5vZGUqIG5leHQ7Ci0gICAgfTsKLQot
ICAgIC8vIFRoaXMgaXMgc2FmZSBvbmx5IGlmIHRoZSBnaXZlbiBwb2ludGVyIGlzIGtub3duIHRv
IHBvaW50IHRvIGEgS2V5IHRoYXQgaXMKLSAgICAvLyBwYXJ0IG9mIGEgTm9kZS4KLSAgICBzdGF0
aWMgTm9kZSogTm9kZVB0ckZyb21LZXlQdHIoS2V5KiBrKSB7Ci0gICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxOb2RlKj4oayk7Ci0gICAgfQotCi0gICAgc3RhdGljIEtleSogS2V5UHRyRnJv
bU5vZGVQdHIoTm9kZSogbm9kZSkgeyByZXR1cm4gJm5vZGUtPmt2LmtleSgpOyB9Ci0KLSAgICAv
LyBUcmVlcy4gIFRoZSBwYXlsb2FkIHR5cGUgaXMgcG9pbnRlciB0byBLZXksIHNvIHRoYXQgd2Ug
Y2FuIHF1ZXJ5IHRoZSB0cmVlCi0gICAgLy8gd2l0aCBLZXlzIHRoYXQgYXJlIG5vdCBpbiBhbnkg
cGFydGljdWxhciBkYXRhIHN0cnVjdHVyZS4gIFdoZW4gd2UgaW5zZXJ0LAotICAgIC8vIHRob3Vn
aCwgdGhlIHBvaW50ZXIgaXMgYWx3YXlzIHBvaW50aW5nIHRvIGEgS2V5IHRoYXQgaXMgaW5zaWRl
IGEgTm9kZS4KLSAgICBzdHJ1Y3QgS2V5Q29tcGFyZSB7Ci0gICAgICBib29sIG9wZXJhdG9yKCko
Y29uc3QgS2V5KiBuMCwgY29uc3QgS2V5KiBuMSkgY29uc3QgeyByZXR1cm4gKm4wIDwgKm4xOyB9
Ci0gICAgfTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5k
PEtleSo+OjpvdGhlciBLZXlQdHJBbGxvY2F0b3I7Ci0gICAgdHlwZWRlZiBzdGQ6OnNldDxLZXkq
LCBLZXlDb21wYXJlLCBLZXlQdHJBbGxvY2F0b3I+IFRyZWU7Ci0KLSAgICAvLyBpdGVyYXRvciBh
bmQgY29uc3RfaXRlcmF0b3IgYXJlIGluc3RhbnRpYXRpb25zIG9mIGl0ZXJhdG9yX2Jhc2UuCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEtleVZhbHVlVHlwZT4KLSAgICBjbGFzcyBpdGVyYXRvcl9i
YXNlIHsKLSAgICAgcHVibGljOgotICAgICAgdHlwZWRlZiBLZXlWYWx1ZVR5cGUmIHJlZmVyZW5j
ZTsKLSAgICAgIHR5cGVkZWYgS2V5VmFsdWVUeXBlKiBwb2ludGVyOwotICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBUcmVlOjppdGVyYXRvciBUcmVlSXRlcmF0b3I7Ci0KLSAgICAgIC8vIEludmFyaWFu
dHM6Ci0gICAgICAvLyBub2RlXyBpcyBhbHdheXMgY29ycmVjdC4gVGhpcyBpcyBoYW5keSBiZWNh
dXNlIHRoZSBtb3N0IGNvbW1vbgotICAgICAgLy8gb3BlcmF0aW9ucyBhcmUgb3BlcmF0b3IqIGFu
ZCBvcGVyYXRvci0+IGFuZCB0aGV5IG9ubHkgdXNlIG5vZGVfLgotICAgICAgLy8gV2hlbiBub2Rl
XyBpcyBzZXQgdG8gYSBub24tTlVMTCB2YWx1ZSwgYWxsIHRoZSBvdGhlciBub24tY29uc3QgZmll
bGRzCi0gICAgICAvLyBhcmUgdXBkYXRlZCB0byBiZSBjb3JyZWN0IGFsc28sIGJ1dCB0aG9zZSBm
aWVsZHMgY2FuIGJlY29tZSBzdGFsZQotICAgICAgLy8gaWYgdGhlIHVuZGVybHlpbmcgbWFwIGlz
IG1vZGlmaWVkLiAgV2hlbiB0aG9zZSBmaWVsZHMgYXJlIG5lZWRlZCB0aGV5Ci0gICAgICAvLyBh
cmUgcmVjaGVja2VkLCBhbmQgdXBkYXRlZCBpZiBuZWNlc3NhcnkuCi0gICAgICBpdGVyYXRvcl9i
YXNlKCkgOiBub2RlXyhOVUxMKSB7fQotCi0gICAgICBleHBsaWNpdCBpdGVyYXRvcl9iYXNlKGNv
bnN0IElubmVyTWFwKiBtKSA6IG1fKG0pIHsKLSAgICAgICAgU2VhcmNoRnJvbShtLT5pbmRleF9v
Zl9maXJzdF9ub25fbnVsbF8pOwotICAgICAgfQotCi0gICAgICAvLyBBbnkgaXRlcmF0b3JfYmFz
ZSBjYW4gY29udmVydCB0byBhbnkgb3RoZXIuICBUaGlzIGlzIG92ZXJraWxsLCBhbmQgd2UKLSAg
ICAgIC8vIHJlbHkgb24gdGhlIGVuY2xvc2luZyBjbGFzcyB0byB1c2UgaXQgd2lzZWx5LiAgVGhl
IHN0YW5kYXJkICJpdGVyYXRvcgotICAgICAgLy8gY2FuIGNvbnZlcnQgdG8gY29uc3RfaXRlcmF0
b3IiIGlzIE9LIGJ1dCB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24gaXMgbm90LgotICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gICAgICBleHBsaWNpdCBpdGVyYXRvcl9iYXNlKGNvbnN0IGl0ZXJh
dG9yX2Jhc2U8VT4mIGl0KQotICAgICAgICAgIDogbm9kZV8oaXQubm9kZV8pLAotICAgICAgICAg
ICAgbV8oaXQubV8pLAotICAgICAgICAgICAgYnVja2V0X2luZGV4XyhpdC5idWNrZXRfaW5kZXhf
KSwKLSAgICAgICAgICAgIHRyZWVfaXRfKGl0LnRyZWVfaXRfKSB7fQotCi0gICAgICBpdGVyYXRv
cl9iYXNlKE5vZGUqIG4sIGNvbnN0IElubmVyTWFwKiBtLCBzaXplX3R5cGUgaW5kZXgpCi0gICAg
ICAgICAgOiBub2RlXyhuKSwKLSAgICAgICAgICAgIG1fKG0pLAotICAgICAgICAgICAgYnVja2V0
X2luZGV4XyhpbmRleCkge30KLQotICAgICAgaXRlcmF0b3JfYmFzZShUcmVlSXRlcmF0b3IgdHJl
ZV9pdCwgY29uc3QgSW5uZXJNYXAqIG0sIHNpemVfdHlwZSBpbmRleCkKLSAgICAgICAgICA6IG5v
ZGVfKE5vZGVQdHJGcm9tS2V5UHRyKCp0cmVlX2l0KSksCi0gICAgICAgICAgICBtXyhtKSwKLSAg
ICAgICAgICAgIGJ1Y2tldF9pbmRleF8oaW5kZXgpLAotICAgICAgICAgICAgdHJlZV9pdF8odHJl
ZV9pdCkgewotICAgICAgICAvLyBJbnZhcmlhbnQ6IGl0ZXJhdG9ycyB0aGF0IHVzZSB0cmVlX2l0
XyBoYXZlIGFuIGV2ZW4gYnVja2V0X2luZGV4Xy4KLSAgICAgICAgR09PR0xFX0RDSEVDS19FUShi
dWNrZXRfaW5kZXhfICUgMiwgMCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFkdmFuY2UgdGhyb3Vn
aCBidWNrZXRzLCBsb29raW5nIGZvciB0aGUgZmlyc3QgdGhhdCBpc24ndCBlbXB0eS4KLSAgICAg
IC8vIElmIG5vdGhpbmcgbm9uLWVtcHR5IGlzIGZvdW5kIHRoZW4gbGVhdmUgbm9kZV8gPT0gTlVM
TC4KLSAgICAgIHZvaWQgU2VhcmNoRnJvbShzaXplX3R5cGUgc3RhcnRfYnVja2V0KSB7Ci0gICAg
ICAgIEdPT0dMRV9EQ0hFQ0sobV8tPmluZGV4X29mX2ZpcnN0X25vbl9udWxsXyA9PSBtXy0+bnVt
X2J1Y2tldHNfIHx8Ci0gICAgICAgICAgICAgICBtXy0+dGFibGVfW21fLT5pbmRleF9vZl9maXJz
dF9ub25fbnVsbF9dICE9IE5VTEwpOwotICAgICAgICBub2RlXyA9IE5VTEw7Ci0gICAgICAgIGZv
ciAoYnVja2V0X2luZGV4XyA9IHN0YXJ0X2J1Y2tldDsgYnVja2V0X2luZGV4XyA8IG1fLT5udW1f
YnVja2V0c187Ci0gICAgICAgICAgICAgYnVja2V0X2luZGV4XysrKSB7Ci0gICAgICAgICAgaWYg
KG1fLT5UYWJsZUVudHJ5SXNOb25FbXB0eUxpc3QoYnVja2V0X2luZGV4XykpIHsKLSAgICAgICAg
ICAgIG5vZGVfID0gc3RhdGljX2Nhc3Q8Tm9kZSo+KG1fLT50YWJsZV9bYnVja2V0X2luZGV4X10p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIGlmIChtXy0+VGFibGVFbnRy
eUlzVHJlZShidWNrZXRfaW5kZXhfKSkgewotICAgICAgICAgICAgVHJlZSogdHJlZSA9IHN0YXRp
Y19jYXN0PFRyZWUqPihtXy0+dGFibGVfW2J1Y2tldF9pbmRleF9dKTsKLSAgICAgICAgICAgIEdP
T0dMRV9EQ0hFQ0soIXRyZWUtPmVtcHR5KCkpOwotICAgICAgICAgICAgdHJlZV9pdF8gPSB0cmVl
LT5iZWdpbigpOwotICAgICAgICAgICAgbm9kZV8gPSBOb2RlUHRyRnJvbUtleVB0cigqdHJlZV9p
dF8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
Ci0KLSAgICAgIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBub2RlXy0+a3Y7
IH0KLSAgICAgIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3Iq
KCkpOyB9Ci0KLSAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3JfYmFz
ZSYgYSwgY29uc3QgaXRlcmF0b3JfYmFzZSYgYikgewotICAgICAgICByZXR1cm4gYS5ub2RlXyA9
PSBiLm5vZGVfOwotICAgICAgfQotICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
dGVyYXRvcl9iYXNlJiBhLCBjb25zdCBpdGVyYXRvcl9iYXNlJiBiKSB7Ci0gICAgICAgIHJldHVy
biBhLm5vZGVfICE9IGIubm9kZV87Ci0gICAgICB9Ci0KLSAgICAgIGl0ZXJhdG9yX2Jhc2UmIG9w
ZXJhdG9yKysoKSB7Ci0gICAgICAgIGlmIChub2RlXy0+bmV4dCA9PSBOVUxMKSB7Ci0gICAgICAg
ICAgY29uc3QgYm9vbCBpc19saXN0ID0gcmV2YWxpZGF0ZV9pZl9uZWNlc3NhcnkoKTsKLSAgICAg
ICAgICBpZiAoaXNfbGlzdCkgewotICAgICAgICAgICAgU2VhcmNoRnJvbShidWNrZXRfaW5kZXhf
ICsgMSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdPT0dMRV9EQ0hFQ0tfRVEo
YnVja2V0X2luZGV4XyAmIDEsIDApOwotICAgICAgICAgICAgVHJlZSogdHJlZSA9IHN0YXRpY19j
YXN0PFRyZWUqPihtXy0+dGFibGVfW2J1Y2tldF9pbmRleF9dKTsKLSAgICAgICAgICAgIGlmICgr
K3RyZWVfaXRfID09IHRyZWUtPmVuZCgpKSB7Ci0gICAgICAgICAgICAgIFNlYXJjaEZyb20oYnVj
a2V0X2luZGV4XyArIDIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgbm9k
ZV8gPSBOb2RlUHRyRnJvbUtleVB0cigqdHJlZV9pdF8pOwotICAgICAgICAgICAgfQotICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBub2RlXyA9IG5vZGVfLT5uZXh0Owot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgIH0KLQotICAgICAgaXRlcmF0
b3JfYmFzZSBvcGVyYXRvcisrKGludCAvKiB1bnVzZWQgKi8pIHsKLSAgICAgICAgaXRlcmF0b3Jf
YmFzZSB0bXAgPSAqdGhpczsKLSAgICAgICAgKysqdGhpczsKLSAgICAgICAgcmV0dXJuIHRtcDsK
LSAgICAgIH0KLQotICAgICAgLy8gQXNzdW1lcyBub2RlXyBhbmQgbV8gYXJlIGNvcnJlY3QgYW5k
IG5vbi1OVUxMLCBidXQgb3RoZXIgZmllbGRzIG1heSBiZQotICAgICAgLy8gc3RhbGUuICBGaXgg
dGhlbSBhcyBuZWVkZWQuICBUaGVuIHJldHVybiB0cnVlIGlmZiBub2RlXyBwb2ludHMgdG8gYQot
ICAgICAgLy8gTm9kZSBpbiBhIGxpc3QuCi0gICAgICBib29sIHJldmFsaWRhdGVfaWZfbmVjZXNz
YXJ5KCkgewotICAgICAgICBHT09HTEVfRENIRUNLKG5vZGVfICE9IE5VTEwgJiYgbV8gIT0gTlVM
TCk7Ci0gICAgICAgIC8vIEZvcmNlIGJ1Y2tldF9pbmRleF8gdG8gYmUgaW4gcmFuZ2UuCi0gICAg
ICAgIGJ1Y2tldF9pbmRleF8gJj0gKG1fLT5udW1fYnVja2V0c18gLSAxKTsKLSAgICAgICAgLy8g
Q29tbW9uIGNhc2U6IHRoZSBidWNrZXQgd2UgdGhpbmsgaXMgcmVsZXZhbnQgcG9pbnRzIHRvIG5v
ZGVfLgotICAgICAgICBpZiAobV8tPnRhYmxlX1tidWNrZXRfaW5kZXhfXSA9PSBzdGF0aWNfY2Fz
dDx2b2lkKj4obm9kZV8pKQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAvLyBMZXNz
IGNvbW1vbjogdGhlIGJ1Y2tldCBpcyBhIGxpbmtlZCBsaXN0IHdpdGggbm9kZV8gc29tZXdoZXJl
IGluIGl0LAotICAgICAgICAvLyBidXQgbm90IGF0IHRoZSBoZWFkLgotICAgICAgICBpZiAobV8t
PlRhYmxlRW50cnlJc05vbkVtcHR5TGlzdChidWNrZXRfaW5kZXhfKSkgewotICAgICAgICAgIE5v
ZGUqIGwgPSBzdGF0aWNfY2FzdDxOb2RlKj4obV8tPnRhYmxlX1tidWNrZXRfaW5kZXhfXSk7Ci0g
ICAgICAgICAgd2hpbGUgKChsID0gbC0+bmV4dCkgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYg
KGwgPT0gbm9kZV8pIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFdlbGwsIGJ1Y2tldF9pbmRleF8g
c3RpbGwgbWlnaHQgYmUgY29ycmVjdCwgYnV0IHByb2JhYmx5Ci0gICAgICAgIC8vIG5vdC4gIFJl
dmFsaWRhdGUganVzdCB0byBiZSBzdXJlLiAgVGhpcyBjYXNlIGlzIHJhcmUgZW5vdWdoIHRoYXQg
d2UKLSAgICAgICAgLy8gZG9uJ3Qgd29ycnkgYWJvdXQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMs
IHN1Y2ggYXMgaGF2aW5nIGEgY3VzdG9tCi0gICAgICAgIC8vIGZpbmQtbGlrZSBtZXRob2QgdGhh
dCBjb21wYXJlcyBOb2RlKiBpbnN0ZWFkIG9mIGNvbnN0IEtleSYuCi0gICAgICAgIGl0ZXJhdG9y
X2Jhc2UgaShtXy0+ZmluZCgqS2V5UHRyRnJvbU5vZGVQdHIobm9kZV8pKSk7Ci0gICAgICAgIGJ1
Y2tldF9pbmRleF8gPSBpLmJ1Y2tldF9pbmRleF87Ci0gICAgICAgIHRyZWVfaXRfID0gaS50cmVl
X2l0XzsKLSAgICAgICAgcmV0dXJuIG1fLT5UYWJsZUVudHJ5SXNMaXN0KGJ1Y2tldF9pbmRleF8p
OwotICAgICAgfQotCi0gICAgICBOb2RlKiBub2RlXzsKLSAgICAgIGNvbnN0IElubmVyTWFwKiBt
XzsKLSAgICAgIHNpemVfdHlwZSBidWNrZXRfaW5kZXhfOwotICAgICAgVHJlZUl0ZXJhdG9yIHRy
ZWVfaXRfOwotICAgIH07Ci0KLSAgIHB1YmxpYzoKLSAgICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8
S2V5VmFsdWVQYWlyPiBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8Y29uc3Qg
S2V5VmFsdWVQYWlyPiBjb25zdF9pdGVyYXRvcjsKLQotICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyBy
ZXR1cm4gaXRlcmF0b3IodGhpcyk7IH0KLSAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVy
YXRvcigpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25z
dF9pdGVyYXRvcih0aGlzKTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2l0ZXJhdG9yKCk7IH0KLQotICAgIHZvaWQgY2xlYXIoKSB7Ci0gICAgICBmb3Ig
KHNpemVfdHlwZSBiID0gMDsgYiA8IG51bV9idWNrZXRzXzsgYisrKSB7Ci0gICAgICAgIGlmIChU
YWJsZUVudHJ5SXNOb25FbXB0eUxpc3QoYikpIHsKLSAgICAgICAgICBOb2RlKiBub2RlID0gc3Rh
dGljX2Nhc3Q8Tm9kZSo+KHRhYmxlX1tiXSk7Ci0gICAgICAgICAgdGFibGVfW2JdID0gTlVMTDsK
LSAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICBOb2RlKiBuZXh0ID0gbm9kZS0+bmV4dDsKLSAg
ICAgICAgICAgIERlc3Ryb3lOb2RlKG5vZGUpOwotICAgICAgICAgICAgbm9kZSA9IG5leHQ7Ci0g
ICAgICAgICAgfSB3aGlsZSAobm9kZSAhPSBOVUxMKTsKLSAgICAgICAgfSBlbHNlIGlmIChUYWJs
ZUVudHJ5SXNUcmVlKGIpKSB7Ci0gICAgICAgICAgVHJlZSogdHJlZSA9IHN0YXRpY19jYXN0PFRy
ZWUqPih0YWJsZV9bYl0pOwotICAgICAgICAgIEdPT0dMRV9EQ0hFQ0sodGFibGVfW2JdID09IHRh
YmxlX1tiICsgMV0gJiYgKGIgJiAxKSA9PSAwKTsKLSAgICAgICAgICB0YWJsZV9bYl0gPSB0YWJs
ZV9bYiArIDFdID0gTlVMTDsKLSAgICAgICAgICB0eXBlbmFtZSBUcmVlOjppdGVyYXRvciB0cmVl
X2l0ID0gdHJlZS0+YmVnaW4oKTsKLSAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICBOb2RlKiBu
b2RlID0gTm9kZVB0ckZyb21LZXlQdHIoKnRyZWVfaXQpOwotICAgICAgICAgICAgdHlwZW5hbWUg
VHJlZTo6aXRlcmF0b3IgbmV4dCA9IHRyZWVfaXQ7Ci0gICAgICAgICAgICArK25leHQ7Ci0gICAg
ICAgICAgICB0cmVlLT5lcmFzZSh0cmVlX2l0KTsKLSAgICAgICAgICAgIERlc3Ryb3lOb2RlKG5v
ZGUpOwotICAgICAgICAgICAgdHJlZV9pdCA9IG5leHQ7Ci0gICAgICAgICAgfSB3aGlsZSAodHJl
ZV9pdCAhPSB0cmVlLT5lbmQoKSk7Ci0gICAgICAgICAgRGVzdHJveVRyZWUodHJlZSk7Ci0gICAg
ICAgICAgYisrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBudW1fZWxlbWVudHNfID0gMDsK
LSAgICAgIGluZGV4X29mX2ZpcnN0X25vbl9udWxsXyA9IG51bV9idWNrZXRzXzsKLSAgICB9Ci0K
LSAgICBjb25zdCBoYXNoZXImIGhhc2hfZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiAqdGhpczsg
fQotCi0gICAgc3RhdGljIHNpemVfdHlwZSBtYXhfc2l6ZSgpIHsKLSAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxzaXplX3R5cGU+KDEpIDw8IChzaXplb2Yodm9pZCoqKSA+PSA4ID8gNjAgOiAyOCk7
Ci0gICAgfQotICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtX2VsZW1lbnRz
XzsgfQotICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXplKCkgPT0gMDsgfQotCi0g
ICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXkmIGspIHsgcmV0dXJuIGl0ZXJhdG9yKEZpbmRIZWxw
ZXIoaykuZmlyc3QpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBLZXkmIGspIGNv
bnN0IHsgcmV0dXJuIEZpbmRIZWxwZXIoaykuZmlyc3Q7IH0KLQotICAgIC8vIEluIHRyYWRpdGlv
bmFsIEMrKyBzdHlsZSwgdGhpcyBwZXJmb3JtcyAiaW5zZXJ0IGlmIG5vdCBwcmVzZW50LiIKLSAg
ICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydChjb25zdCBLZXlWYWx1ZVBhaXImIGt2
KSB7Ci0gICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIHNpemVfdHlwZT4gcCA9IEZpbmRI
ZWxwZXIoa3Yua2V5KCkpOwotICAgICAgLy8gQ2FzZSAxOiBrZXkgd2FzIGFscmVhZHkgcHJlc2Vu
dC4KLSAgICAgIGlmIChwLmZpcnN0Lm5vZGVfICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihpdGVyYXRvcihwLmZpcnN0KSwgZmFsc2UpOwotICAgICAgLy8gQ2FzZSAyOiBp
bnNlcnQuCi0gICAgICBpZiAoUmVzaXplSWZMb2FkSXNPdXRPZlJhbmdlKG51bV9lbGVtZW50c18g
KyAxKSkgewotICAgICAgICBwID0gRmluZEhlbHBlcihrdi5rZXkoKSk7Ci0gICAgICB9Ci0gICAg
ICBjb25zdCBzaXplX3R5cGUgYiA9IHAuc2Vjb25kOyAgLy8gYnVja2V0IG51bWJlcgotICAgICAg
Tm9kZSogbm9kZSA9IEFsbG9jPE5vZGU+KDEpOwotICAgICAgYWxsb2NfLmNvbnN0cnVjdCgmbm9k
ZS0+a3YsIGt2KTsKLSAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9IEluc2VydFVuaXF1ZShiLCBub2Rl
KTsKLSAgICAgICsrbnVtX2VsZW1lbnRzXzsKLSAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihy
ZXN1bHQsIHRydWUpOwotICAgIH0KLQotICAgIC8vIFRoZSBzYW1lLCBidXQgaWYgYW4gaW5zZXJ0
aW9uIGlzIG5lY2Vzc2FyeSB0aGVuIHRoZSB2YWx1ZSBwb3J0aW9uIG9mIHRoZQotICAgIC8vIGlu
c2VydGVkIGtleS12YWx1ZSBwYWlyIGlzIGxlZnQgdW5pbml0aWFsaXplZC4KLSAgICBzdGQ6OnBh
aXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydChjb25zdCBLZXkmIGspIHsKLSAgICAgIHN0ZDo6cGFp
cjxjb25zdF9pdGVyYXRvciwgc2l6ZV90eXBlPiBwID0gRmluZEhlbHBlcihrKTsKLSAgICAgIC8v
IENhc2UgMToga2V5IHdhcyBhbHJlYWR5IHByZXNlbnQuCi0gICAgICBpZiAocC5maXJzdC5ub2Rl
XyAhPSBOVUxMKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IocC5maXJz
dCksIGZhbHNlKTsKLSAgICAgIC8vIENhc2UgMjogaW5zZXJ0LgotICAgICAgaWYgKFJlc2l6ZUlm
TG9hZElzT3V0T2ZSYW5nZShudW1fZWxlbWVudHNfICsgMSkpIHsKLSAgICAgICAgcCA9IEZpbmRI
ZWxwZXIoayk7Ci0gICAgICB9Ci0gICAgICBjb25zdCBzaXplX3R5cGUgYiA9IHAuc2Vjb25kOyAg
Ly8gYnVja2V0IG51bWJlcgotICAgICAgTm9kZSogbm9kZSA9IEFsbG9jPE5vZGU+KDEpOwotICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhl
ciBLZXlBbGxvY2F0b3I7Ci0gICAgICBLZXlBbGxvY2F0b3IoYWxsb2NfKS5jb25zdHJ1Y3QoJm5v
ZGUtPmt2LmtleSgpLCBrKTsKLSAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9IEluc2VydFVuaXF1ZShi
LCBub2RlKTsKLSAgICAgICsrbnVtX2VsZW1lbnRzXzsKLSAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihyZXN1bHQsIHRydWUpOwotICAgIH0KLQotICAgIFZhbHVlJiBvcGVyYXRvcltdKGNvbnN0
IEtleSYgaykgewotICAgICAgS2V5VmFsdWVQYWlyIGt2KGssIFZhbHVlKCkpOwotICAgICAgcmV0
dXJuIGluc2VydChrdikuZmlyc3QtPnZhbHVlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBlcmFzZShp
dGVyYXRvciBpdCkgewotICAgICAgR09PR0xFX0RDSEVDS19FUShpdC5tXywgdGhpcyk7Ci0gICAg
ICBjb25zdCBib29sIGlzX2xpc3QgPSBpdC5yZXZhbGlkYXRlX2lmX25lY2Vzc2FyeSgpOwotICAg
ICAgc2l6ZV90eXBlIGIgPSBpdC5idWNrZXRfaW5kZXhfOwotICAgICAgTm9kZSogY29uc3QgaXRl
bSA9IGl0Lm5vZGVfOwotICAgICAgaWYgKGlzX2xpc3QpIHsKLSAgICAgICAgR09PR0xFX0RDSEVD
SyhUYWJsZUVudHJ5SXNOb25FbXB0eUxpc3QoYikpOwotICAgICAgICBOb2RlKiBoZWFkID0gc3Rh
dGljX2Nhc3Q8Tm9kZSo+KHRhYmxlX1tiXSk7Ci0gICAgICAgIGhlYWQgPSBFcmFzZUZyb21MaW5r
ZWRMaXN0KGl0ZW0sIGhlYWQpOwotICAgICAgICB0YWJsZV9bYl0gPSBzdGF0aWNfY2FzdDx2b2lk
Kj4oaGVhZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHT09HTEVfRENIRUNLKFRhYmxlRW50
cnlJc1RyZWUoYikpOwotICAgICAgICBUcmVlKiB0cmVlID0gc3RhdGljX2Nhc3Q8VHJlZSo+KHRh
YmxlX1tiXSk7Ci0gICAgICAgIHRyZWUtPmVyYXNlKGl0LnRyZWVfaXRfKTsKLSAgICAgICAgaWYg
KHRyZWUtPmVtcHR5KCkpIHsKLSAgICAgICAgICAvLyBGb3JjZSBiIHRvIGJlIHRoZSBtaW5pbXVt
IG9mIGIgYW5kIGIgXiAxLiAgVGhpcyBpcyBpbXBvcnRhbnQKLSAgICAgICAgICAvLyBvbmx5IGJl
Y2F1c2Ugd2Ugd2FudCBpbmRleF9vZl9maXJzdF9ub25fbnVsbF8gdG8gYmUgY29ycmVjdC4KLSAg
ICAgICAgICBiICY9IH5zdGF0aWNfY2FzdDxzaXplX3R5cGU+KDEpOwotICAgICAgICAgIERlc3Ry
b3lUcmVlKHRyZWUpOwotICAgICAgICAgIHRhYmxlX1tiXSA9IHRhYmxlX1tiICsgMV0gPSBOVUxM
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBEZXN0cm95Tm9kZShpdGVtKTsKLSAgICAgIC0t
bnVtX2VsZW1lbnRzXzsKLSAgICAgIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRShiID09IGluZGV4
X29mX2ZpcnN0X25vbl9udWxsXykpIHsKLSAgICAgICAgd2hpbGUgKGluZGV4X29mX2ZpcnN0X25v
bl9udWxsXyA8IG51bV9idWNrZXRzXyAmJgotICAgICAgICAgICAgICAgdGFibGVfW2luZGV4X29m
X2ZpcnN0X25vbl9udWxsX10gPT0gTlVMTCkgewotICAgICAgICAgICsraW5kZXhfb2ZfZmlyc3Rf
bm9uX251bGxfOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICBwcml2YXRlOgotICAg
IHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgc2l6ZV90eXBlPiBGaW5kSGVscGVyKGNvbnN0IEtl
eSYgaykgY29uc3QgewotICAgICAgc2l6ZV90eXBlIGIgPSBCdWNrZXROdW1iZXIoayk7Ci0gICAg
ICBpZiAoVGFibGVFbnRyeUlzTm9uRW1wdHlMaXN0KGIpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUg
PSBzdGF0aWNfY2FzdDxOb2RlKj4odGFibGVfW2JdKTsKLSAgICAgICAgZG8gewotICAgICAgICAg
IGlmIChJc01hdGNoKCpLZXlQdHJGcm9tTm9kZVB0cihub2RlKSwgaykpIHsKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihub2RlLCB0aGlzLCBiKSwgYik7
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwotICAg
ICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobm9kZSAhPSBOVUxMKTsKLSAgICAgIH0gZWxzZSBp
ZiAoVGFibGVFbnRyeUlzVHJlZShiKSkgewotICAgICAgICBHT09HTEVfRENIRUNLX0VRKHRhYmxl
X1tiXSwgdGFibGVfW2IgXiAxXSk7Ci0gICAgICAgIGIgJj0gfnN0YXRpY19jYXN0PHNpemVfdD4o
MSk7Ci0gICAgICAgIFRyZWUqIHRyZWUgPSBzdGF0aWNfY2FzdDxUcmVlKj4odGFibGVfW2JdKTsK
LSAgICAgICAgS2V5KiBrZXkgPSBjb25zdF9jYXN0PEtleSo+KCZrKTsKLSAgICAgICAgdHlwZW5h
bWUgVHJlZTo6aXRlcmF0b3IgdHJlZV9pdCA9IHRyZWUtPmZpbmQoa2V5KTsKLSAgICAgICAgaWYg
KHRyZWVfaXQgIT0gdHJlZS0+ZW5kKCkpIHsKLSAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoY29uc3RfaXRlcmF0b3IodHJlZV9pdCwgdGhpcywgYiksIGIpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZW5kKCksIGIpOwotICAgIH0KLQotICAg
IC8vIEluc2VydCB0aGUgZ2l2ZW4gTm9kZSBpbiBidWNrZXQgYi4gIElmIHRoYXQgd291bGQgbWFr
ZSBidWNrZXQgYiB0b28gYmlnLAotICAgIC8vIGFuZCBidWNrZXQgYiBpcyBub3QgYSB0cmVlLCBj
cmVhdGUgYSB0cmVlIGZvciBidWNrZXRzIGIgYW5kIGJeMSB0byBzaGFyZS4KLSAgICAvLyBSZXF1
aXJlcyBjb3VudCgqS2V5UHRyRnJvbU5vZGVQdHIobm9kZSkpID09IDAgYW5kIHRoYXQgYiBpcyB0
aGUgY29ycmVjdAotICAgIC8vIGJ1Y2tldC4gIG51bV9lbGVtZW50c18gaXMgbm90IG1vZGlmaWVk
LgotICAgIGl0ZXJhdG9yIEluc2VydFVuaXF1ZShzaXplX3R5cGUgYiwgTm9kZSogbm9kZSkgewot
ICAgICAgR09PR0xFX0RDSEVDSyhpbmRleF9vZl9maXJzdF9ub25fbnVsbF8gPT0gbnVtX2J1Y2tl
dHNfIHx8Ci0gICAgICAgICAgICAgdGFibGVfW2luZGV4X29mX2ZpcnN0X25vbl9udWxsX10gIT0g
TlVMTCk7Ci0gICAgICAvLyBJbiBwcmFjdGljZSwgdGhlIGNvZGUgdGhhdCBsZWQgdG8gdGhpcyBw
b2ludCBtYXkgaGF2ZSBhbHJlYWR5Ci0gICAgICAvLyBkZXRlcm1pbmVkIHdoZXRoZXIgd2UgYXJl
IGluc2VydGluZyBpbnRvIGFuIGVtcHR5IGxpc3QsIGEgc2hvcnQgbGlzdCwKLSAgICAgIC8vIG9y
IHdoYXRldmVyLiAgQnV0IGl0J3MgcHJvYmFibHkgY2hlYXAgZW5vdWdoIHRvIHJlY29tcHV0ZSB0
aGF0IGhlcmU7Ci0gICAgICAvLyBpdCdzIGxpa2VseSB0aGF0IHdlJ3JlIGluc2VydGluZyBpbnRv
IGFuIGVtcHR5IG9yIHNob3J0IGxpc3QuCi0gICAgICBpdGVyYXRvciByZXN1bHQ7Ci0gICAgICBH
T09HTEVfRENIRUNLKGZpbmQoKktleVB0ckZyb21Ob2RlUHRyKG5vZGUpKSA9PSBlbmQoKSk7Ci0g
ICAgICBpZiAoVGFibGVFbnRyeUlzRW1wdHkoYikpIHsKLSAgICAgICAgcmVzdWx0ID0gSW5zZXJ0
VW5pcXVlSW5MaXN0KGIsIG5vZGUpOwotICAgICAgfSBlbHNlIGlmIChUYWJsZUVudHJ5SXNOb25F
bXB0eUxpc3QoYikpIHsKLSAgICAgICAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKFRhYmxlRW50
cnlJc1Rvb0xvbmcoYikpKSB7Ci0gICAgICAgICAgVHJlZUNvbnZlcnQoYik7Ci0gICAgICAgICAg
cmVzdWx0ID0gSW5zZXJ0VW5pcXVlSW5UcmVlKGIsIG5vZGUpOwotICAgICAgICAgIEdPT0dMRV9E
Q0hFQ0tfRVEocmVzdWx0LmJ1Y2tldF9pbmRleF8sIGIgJiB+c3RhdGljX2Nhc3Q8c2l6ZV90eXBl
PigxKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gSW5zZXJ0IGludG8gYSBwcmUt
ZXhpc3RpbmcgbGlzdC4gIFRoaXMgY2FzZSBjYW5ub3QgbW9kaWZ5Ci0gICAgICAgICAgLy8gaW5k
ZXhfb2ZfZmlyc3Rfbm9uX251bGxfLCBzbyB3ZSBza2lwIHRoZSBjb2RlIHRvIHVwZGF0ZSBpdC4K
LSAgICAgICAgICByZXR1cm4gSW5zZXJ0VW5pcXVlSW5MaXN0KGIsIG5vZGUpOwotICAgICAgICB9
Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBJbnNlcnQgaW50byBhIHByZS1leGlzdGluZyB0
cmVlLiAgVGhpcyBjYXNlIGNhbm5vdCBtb2RpZnkKLSAgICAgICAgLy8gaW5kZXhfb2ZfZmlyc3Rf
bm9uX251bGxfLCBzbyB3ZSBza2lwIHRoZSBjb2RlIHRvIHVwZGF0ZSBpdC4KLSAgICAgICAgcmV0
dXJuIEluc2VydFVuaXF1ZUluVHJlZShiLCBub2RlKTsKLSAgICAgIH0KLSAgICAgIGluZGV4X29m
X2ZpcnN0X25vbl9udWxsXyA9Ci0gICAgICAgICAgc3RkOjptaW4oaW5kZXhfb2ZfZmlyc3Rfbm9u
X251bGxfLCByZXN1bHQuYnVja2V0X2luZGV4Xyk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLQotICAgIC8vIEhlbHBlciBmb3IgSW5zZXJ0VW5pcXVlLiAgSGFuZGxlcyB0aGUgY2FzZSB3
aGVyZSBidWNrZXQgYiBpcyBhCi0gICAgLy8gbm90LXRvby1sb25nIGxpbmtlZCBsaXN0LgotICAg
IGl0ZXJhdG9yIEluc2VydFVuaXF1ZUluTGlzdChzaXplX3R5cGUgYiwgTm9kZSogbm9kZSkgewot
ICAgICAgbm9kZS0+bmV4dCA9IHN0YXRpY19jYXN0PE5vZGUqPih0YWJsZV9bYl0pOwotICAgICAg
dGFibGVfW2JdID0gc3RhdGljX2Nhc3Q8dm9pZCo+KG5vZGUpOwotICAgICAgcmV0dXJuIGl0ZXJh
dG9yKG5vZGUsIHRoaXMsIGIpOwotICAgIH0KLQotICAgIC8vIEhlbHBlciBmb3IgSW5zZXJ0VW5p
cXVlLiAgSGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBidWNrZXQgYiBwb2ludHMgdG8gYQotICAgIC8v
IFRyZWUuCi0gICAgaXRlcmF0b3IgSW5zZXJ0VW5pcXVlSW5UcmVlKHNpemVfdHlwZSBiLCBOb2Rl
KiBub2RlKSB7Ci0gICAgICBHT09HTEVfRENIRUNLX0VRKHRhYmxlX1tiXSwgdGFibGVfW2IgXiAx
XSk7Ci0gICAgICAvLyBNYWludGFpbiB0aGUgaW52YXJpYW50IHRoYXQgbm9kZS0+bmV4dCBpcyBO
VUxMIGZvciBhbGwgTm9kZXMgaW4gVHJlZXMuCi0gICAgICBub2RlLT5uZXh0ID0gTlVMTDsKLSAg
ICAgIHJldHVybiBpdGVyYXRvcihzdGF0aWNfY2FzdDxUcmVlKj4odGFibGVfW2JdKQotICAgICAg
ICAgICAgICAgICAgICAgIC0+aW5zZXJ0KEtleVB0ckZyb21Ob2RlUHRyKG5vZGUpKQotICAgICAg
ICAgICAgICAgICAgICAgIC5maXJzdCwKLSAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBiICYg
fnN0YXRpY19jYXN0PHNpemVfdD4oMSkpOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgd2hldGhl
ciBpdCBkaWQgcmVzaXplLiAgQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIHdoZW4KLSAgICAv
LyBudW1fZWxlbWVudHNfIGluY3JlYXNlcywgdGhvdWdoIGl0IGNvdWxkIGJlIHVzZWQgaW4gb3Ro
ZXIgc2l0dWF0aW9ucy4KLSAgICAvLyBJdCBjaGVja3MgZm9yIGxvYWQgdG9vIGxvdyBhcyB3ZWxs
IGFzIGxvYWQgdG9vIGhpZ2g6IGJlY2F1c2UgYW55IG51bWJlcgotICAgIC8vIG9mIGVyYXNlcyBj
YW4gb2NjdXIgYmV0d2VlbiBpbnNlcnRzLCB0aGUgbG9hZCBjb3VsZCBiZSBhcyBsb3cgYXMgMCBo
ZXJlLgotICAgIC8vIFJlc2l6aW5nIHRvIGEgbG93ZXIgc2l6ZSBpcyBub3QgYWx3YXlzIGhlbHBm
dWwsIGJ1dCBmYWlsaW5nIHRvIGRvIHNvIGNhbgotICAgIC8vIGRlc3Ryb3kgdGhlIGV4cGVjdGVk
IGJpZy1PIGJvdW5kcyBmb3Igc29tZSBvcGVyYXRpb25zLiBCeSBoYXZpbmcgdGhlCi0gICAgLy8g
cG9saWN5IHRoYXQgc29tZXRpbWVzIHdlIHJlc2l6ZSBkb3duIGFzIHdlbGwgYXMgdXAsIGNsaWVu
dHMgY2FuIGVhc2lseQotICAgIC8vIGtlZXAgTyhzaXplKCkpID0gTyhudW1iZXIgb2YgYnVja2V0
cykgaWYgdGhleSB3YW50IHRoYXQuCi0gICAgYm9vbCBSZXNpemVJZkxvYWRJc091dE9mUmFuZ2Uo
c2l6ZV90eXBlIG5ld19zaXplKSB7Ci0gICAgICBjb25zdCBzaXplX3R5cGUga01heE1hcExvYWRU
aW1lczE2ID0gMTI7ICAvLyBjb250cm9scyBSQU0gdnMgQ1BVIHRyYWRlb2ZmCi0gICAgICBjb25z
dCBzaXplX3R5cGUgaGlfY3V0b2ZmID0gbnVtX2J1Y2tldHNfICoga01heE1hcExvYWRUaW1lczE2
IC8gMTY7Ci0gICAgICBjb25zdCBzaXplX3R5cGUgbG9fY3V0b2ZmID0gaGlfY3V0b2ZmIC8gNDsK
LSAgICAgIC8vIFdlIGRvbid0IGNhcmUgaG93IG1hbnkgZWxlbWVudHMgYXJlIGluIHRyZWVzLiAg
SWYgYSBsb3QgYXJlLAotICAgICAgLy8gd2UgbWF5IHJlc2l6ZSBldmVuIHRob3VnaCB0aGVyZSBh
cmUgbWFueSBlbXB0eSBidWNrZXRzLiAgSW4KLSAgICAgIC8vIHByYWN0aWNlLCB0aGlzIHNlZW1z
IGZpbmUuCi0gICAgICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UobmV3X3NpemUgPj0gaGlfY3V0
b2ZmKSkgewotICAgICAgICBpZiAobnVtX2J1Y2tldHNfIDw9IG1heF9zaXplKCkgLyAyKSB7Ci0g
ICAgICAgICAgUmVzaXplKG51bV9idWNrZXRzXyAqIDIpOwotICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKG5ld19z
aXplIDw9IGxvX2N1dG9mZiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9i
dWNrZXRzXyA+IGtNaW5UYWJsZVNpemUpKSB7Ci0gICAgICAgIHNpemVfdHlwZSBsZzJfb2Zfc2l6
ZV9yZWR1Y3Rpb25fZmFjdG9yID0gMTsKLSAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB3ZSB3YW50
IHRvIHNocmluayBhIGxvdCBoZXJlLi4uIHNpemUoKSBjb3VsZCBldmVuIGJlIDAuCi0gICAgICAg
IC8vIFNvLCBlc3RpbWF0ZSBob3cgbXVjaCB0byBzaHJpbmsgYnkgbWFraW5nIHN1cmUgd2UgZG9u
J3Qgc2hyaW5rIHNvCi0gICAgICAgIC8vIG11Y2ggdGhhdCB3ZSB3b3VsZCBuZWVkIHRvIGdyb3cg
dGhlIHRhYmxlIGFmdGVyIGEgZmV3IGluc2VydHMuCi0gICAgICAgIGNvbnN0IHNpemVfdHlwZSBo
eXBvdGhldGljYWxfc2l6ZSA9IG5ld19zaXplICogNSAvIDQgKyAxOwotICAgICAgICB3aGlsZSAo
KGh5cG90aGV0aWNhbF9zaXplIDw8IGxnMl9vZl9zaXplX3JlZHVjdGlvbl9mYWN0b3IpIDwKLSAg
ICAgICAgICAgICAgIGhpX2N1dG9mZikgewotICAgICAgICAgICsrbGcyX29mX3NpemVfcmVkdWN0
aW9uX2ZhY3RvcjsKLSAgICAgICAgfQotICAgICAgICBzaXplX3R5cGUgbmV3X251bV9idWNrZXRz
ID0gc3RkOjptYXg8c2l6ZV90eXBlPigKLSAgICAgICAgICAgIGtNaW5UYWJsZVNpemUsIG51bV9i
dWNrZXRzXyA+PiBsZzJfb2Zfc2l6ZV9yZWR1Y3Rpb25fZmFjdG9yKTsKLSAgICAgICAgaWYgKG5l
d19udW1fYnVja2V0cyAhPSBudW1fYnVja2V0c18pIHsKLSAgICAgICAgICBSZXNpemUobmV3X251
bV9idWNrZXRzKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlc2l6ZSB0byB0aGUgZ2l2ZW4g
bnVtYmVyIG9mIGJ1Y2tldHMuCi0gICAgdm9pZCBSZXNpemUoc2l6ZV90IG5ld19udW1fYnVja2V0
cykgewotICAgICAgR09PR0xFX0RDSEVDS19HRShuZXdfbnVtX2J1Y2tldHMsIGtNaW5UYWJsZVNp
emUpOwotICAgICAgdm9pZCoqIGNvbnN0IG9sZF90YWJsZSA9IHRhYmxlXzsKLSAgICAgIGNvbnN0
IHNpemVfdHlwZSBvbGRfdGFibGVfc2l6ZSA9IG51bV9idWNrZXRzXzsKLSAgICAgIG51bV9idWNr
ZXRzXyA9IG5ld19udW1fYnVja2V0czsKLSAgICAgIHRhYmxlXyA9IENyZWF0ZUVtcHR5VGFibGUo
bnVtX2J1Y2tldHNfKTsKLSAgICAgIGNvbnN0IHNpemVfdHlwZSBzdGFydCA9IGluZGV4X29mX2Zp
cnN0X25vbl9udWxsXzsKLSAgICAgIGluZGV4X29mX2ZpcnN0X25vbl9udWxsXyA9IG51bV9idWNr
ZXRzXzsKLSAgICAgIGZvciAoc2l6ZV90eXBlIGkgPSBzdGFydDsgaSA8IG9sZF90YWJsZV9zaXpl
OyBpKyspIHsKLSAgICAgICAgaWYgKFRhYmxlRW50cnlJc05vbkVtcHR5TGlzdChvbGRfdGFibGUs
IGkpKSB7Ci0gICAgICAgICAgVHJhbnNmZXJMaXN0KG9sZF90YWJsZSwgaSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoVGFibGVFbnRyeUlzVHJlZShvbGRfdGFibGUsIGkpKSB7Ci0gICAgICAgICAgVHJh
bnNmZXJUcmVlKG9sZF90YWJsZSwgaSsrKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgRGVh
bGxvYzx2b2lkKj4ob2xkX3RhYmxlLCBvbGRfdGFibGVfc2l6ZSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBUcmFuc2Zlckxpc3Qodm9pZCogY29uc3QqIHRhYmxlLCBzaXplX3R5cGUgaW5kZXgpIHsKLSAg
ICAgIE5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxOb2RlKj4odGFibGVbaW5kZXhdKTsKLSAgICAg
IGRvIHsKLSAgICAgICAgTm9kZSogbmV4dCA9IG5vZGUtPm5leHQ7Ci0gICAgICAgIEluc2VydFVu
aXF1ZShCdWNrZXROdW1iZXIoKktleVB0ckZyb21Ob2RlUHRyKG5vZGUpKSwgbm9kZSk7Ci0gICAg
ICAgIG5vZGUgPSBuZXh0OwotICAgICAgfSB3aGlsZSAobm9kZSAhPSBOVUxMKTsKLSAgICB9Ci0K
LSAgICB2b2lkIFRyYW5zZmVyVHJlZSh2b2lkKiBjb25zdCogdGFibGUsIHNpemVfdHlwZSBpbmRl
eCkgewotICAgICAgVHJlZSogdHJlZSA9IHN0YXRpY19jYXN0PFRyZWUqPih0YWJsZVtpbmRleF0p
OwotICAgICAgdHlwZW5hbWUgVHJlZTo6aXRlcmF0b3IgdHJlZV9pdCA9IHRyZWUtPmJlZ2luKCk7
Ci0gICAgICBkbyB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBOb2RlUHRyRnJvbUtleVB0cigqdHJl
ZV9pdCk7Ci0gICAgICAgIEluc2VydFVuaXF1ZShCdWNrZXROdW1iZXIoKip0cmVlX2l0KSwgbm9k
ZSk7Ci0gICAgICB9IHdoaWxlICgrK3RyZWVfaXQgIT0gdHJlZS0+ZW5kKCkpOwotICAgICAgRGVz
dHJveVRyZWUodHJlZSk7Ci0gICAgfQotCi0gICAgTm9kZSogRXJhc2VGcm9tTGlua2VkTGlzdChO
b2RlKiBpdGVtLCBOb2RlKiBoZWFkKSB7Ci0gICAgICBpZiAoaGVhZCA9PSBpdGVtKSB7Ci0gICAg
ICAgIHJldHVybiBoZWFkLT5uZXh0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaGVhZC0+bmV4
dCA9IEVyYXNlRnJvbUxpbmtlZExpc3QoaXRlbSwgaGVhZC0+bmV4dCk7Ci0gICAgICAgIHJldHVy
biBoZWFkOwotICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgVGFibGVFbnRyeUlzRW1wdHkoc2l6
ZV90eXBlIGIpIGNvbnN0IHsKLSAgICAgIHJldHVybiBUYWJsZUVudHJ5SXNFbXB0eSh0YWJsZV8s
IGIpOwotICAgIH0KLSAgICBib29sIFRhYmxlRW50cnlJc05vbkVtcHR5TGlzdChzaXplX3R5cGUg
YikgY29uc3QgewotICAgICAgcmV0dXJuIFRhYmxlRW50cnlJc05vbkVtcHR5TGlzdCh0YWJsZV8s
IGIpOwotICAgIH0KLSAgICBib29sIFRhYmxlRW50cnlJc1RyZWUoc2l6ZV90eXBlIGIpIGNvbnN0
IHsKLSAgICAgIHJldHVybiBUYWJsZUVudHJ5SXNUcmVlKHRhYmxlXywgYik7Ci0gICAgfQotICAg
IGJvb2wgVGFibGVFbnRyeUlzTGlzdChzaXplX3R5cGUgYikgY29uc3QgewotICAgICAgcmV0dXJu
IFRhYmxlRW50cnlJc0xpc3QodGFibGVfLCBiKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgVGFi
bGVFbnRyeUlzRW1wdHkodm9pZCogY29uc3QqIHRhYmxlLCBzaXplX3R5cGUgYikgewotICAgICAg
cmV0dXJuIHRhYmxlW2JdID09IE5VTEw7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIFRhYmxlRW50
cnlJc05vbkVtcHR5TGlzdCh2b2lkKiBjb25zdCogdGFibGUsIHNpemVfdHlwZSBiKSB7Ci0gICAg
ICByZXR1cm4gdGFibGVbYl0gIT0gTlVMTCAmJiB0YWJsZVtiXSAhPSB0YWJsZVtiIF4gMV07Ci0g
ICAgfQotICAgIHN0YXRpYyBib29sIFRhYmxlRW50cnlJc1RyZWUodm9pZCogY29uc3QqIHRhYmxl
LCBzaXplX3R5cGUgYikgewotICAgICAgcmV0dXJuICFUYWJsZUVudHJ5SXNFbXB0eSh0YWJsZSwg
YikgJiYKLSAgICAgICAgICAhVGFibGVFbnRyeUlzTm9uRW1wdHlMaXN0KHRhYmxlLCBiKTsKLSAg
ICB9Ci0gICAgc3RhdGljIGJvb2wgVGFibGVFbnRyeUlzTGlzdCh2b2lkKiBjb25zdCogdGFibGUs
IHNpemVfdHlwZSBiKSB7Ci0gICAgICByZXR1cm4gIVRhYmxlRW50cnlJc1RyZWUodGFibGUsIGIp
OwotICAgIH0KLQotICAgIHZvaWQgVHJlZUNvbnZlcnQoc2l6ZV90eXBlIGIpIHsKLSAgICAgIEdP
T0dMRV9EQ0hFQ0soIVRhYmxlRW50cnlJc1RyZWUoYikgJiYgIVRhYmxlRW50cnlJc1RyZWUoYiBe
IDEpKTsKLSAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPFRyZWU+Ojpv
dGhlciB0cmVlX2FsbG9jYXRvcihhbGxvY18pOwotICAgICAgVHJlZSogdHJlZSA9IHRyZWVfYWxs
b2NhdG9yLmFsbG9jYXRlKDEpOwotICAgICAgLy8gV2Ugd2FudCB0byB1c2UgdGhlIHRocmVlLWFy
ZyBmb3JtIG9mIGNvbnN0cnVjdCwgaWYgaXQgZXhpc3RzLCBidXQgd2UKLSAgICAgIC8vIGNyZWF0
ZSBhIHRlbXBvcmFyeSBhbmQgdXNlIHRoZSB0d28tYXJnIGNvbnN0cnVjdCB0aGF0J3Mga25vd24g
dG8gZXhpc3QuCi0gICAgICAvLyBJdCdzIGNsdW5reSwgYnV0IHRoZSBjb21waWxlciBzaG91bGQg
YmUgYWJsZSB0byBnZW5lcmF0ZSBtb3JlLW9yLWxlc3MKLSAgICAgIC8vIHRoZSBzYW1lIGNvZGUu
Ci0gICAgICB0cmVlX2FsbG9jYXRvci5jb25zdHJ1Y3QodHJlZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUcmVlKEtleUNvbXBhcmUoKSwgS2V5UHRyQWxsb2NhdG9yKGFsbG9jXykp
KTsKLSAgICAgIC8vIE5vdyB0aGUgdHJlZSBpcyByZWFkeSB0byB1c2UuCi0gICAgICBzaXplX3R5
cGUgY291bnQgPSBDb3B5TGlzdFRvVHJlZShiLCB0cmVlKSArIENvcHlMaXN0VG9UcmVlKGIgXiAx
LCB0cmVlKTsKLSAgICAgIEdPT0dMRV9EQ0hFQ0tfRVEoY291bnQsIHRyZWUtPnNpemUoKSk7Ci0g
ICAgICB0YWJsZV9bYl0gPSB0YWJsZV9bYiBeIDFdID0gc3RhdGljX2Nhc3Q8dm9pZCo+KHRyZWUp
OwotICAgIH0KLQotICAgIC8vIENvcHkgYSBsaW5rZWQgbGlzdCBpbiB0aGUgZ2l2ZW4gYnVja2V0
IHRvIGEgdHJlZS4KLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhpbmdzIGl0IGNvcGll
ZC4KLSAgICBzaXplX3R5cGUgQ29weUxpc3RUb1RyZWUoc2l6ZV90eXBlIGIsIFRyZWUqIHRyZWUp
IHsKLSAgICAgIHNpemVfdHlwZSBjb3VudCA9IDA7Ci0gICAgICBOb2RlKiBub2RlID0gc3RhdGlj
X2Nhc3Q8Tm9kZSo+KHRhYmxlX1tiXSk7Ci0gICAgICB3aGlsZSAobm9kZSAhPSBOVUxMKSB7Ci0g
ICAgICAgIHRyZWUtPmluc2VydChLZXlQdHJGcm9tTm9kZVB0cihub2RlKSk7Ci0gICAgICAgICsr
Y291bnQ7Ci0gICAgICAgIE5vZGUqIG5leHQgPSBub2RlLT5uZXh0OwotICAgICAgICBub2RlLT5u
ZXh0ID0gTlVMTDsKLSAgICAgICAgbm9kZSA9IG5leHQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
Y291bnQ7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHdoZXRoZXIgdGFibGVfW2JdIGlzIGEgbGlu
a2VkIGxpc3QgdGhhdCBzZWVtcyBhd2Z1bGx5IGxvbmcuCi0gICAgLy8gUmVxdWlyZXMgdGFibGVf
W2JdIHRvIHBvaW50IHRvIGEgbm9uLWVtcHR5IGxpbmtlZCBsaXN0LgotICAgIGJvb2wgVGFibGVF
bnRyeUlzVG9vTG9uZyhzaXplX3R5cGUgYikgewotICAgICAgY29uc3QgaW50IGtNYXhMZW5ndGgg
PSA4OwotICAgICAgc2l6ZV90eXBlIGNvdW50ID0gMDsKLSAgICAgIE5vZGUqIG5vZGUgPSBzdGF0
aWNfY2FzdDxOb2RlKj4odGFibGVfW2JdKTsKLSAgICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsK
LSAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7Ci0gICAgICB9IHdoaWxlIChub2RlICE9IE5VTEwp
OwotICAgICAgLy8gSW52YXJpYW50OiBubyBsaW5rZWQgbGlzdCBldmVyIGlzIG1vcmUgdGhhbiBr
TWF4TGVuZ3RoIGluIGxlbmd0aC4KLSAgICAgIEdPT0dMRV9EQ0hFQ0tfTEUoY291bnQsIGtNYXhM
ZW5ndGgpOwotICAgICAgcmV0dXJuIGNvdW50ID49IGtNYXhMZW5ndGg7Ci0gICAgfQotCi0gICAg
c2l6ZV90eXBlIEJ1Y2tldE51bWJlcihjb25zdCBLZXkmIGspIGNvbnN0IHsKLSAgICAgIC8vIFdl
IGluaGVyaXQgZnJvbSBoYXNoZXIsIHNvIG9uZS1hcmcgb3BlcmF0b3IoKSBwcm92aWRlcyBhIGhh
c2ggZnVuY3Rpb24uCi0gICAgICBzaXplX3R5cGUgaCA9ICgqY29uc3RfY2FzdDxJbm5lck1hcCo+
KHRoaXMpKShrKTsKLSAgICAgIC8vIFRvIGhlbHAgcHJldmVudCBwZW9wbGUgZnJvbSBtYWtpbmcg
YXNzdW1wdGlvbnMgYWJvdXQgdGhlIGhhc2ggZnVuY3Rpb24sCi0gICAgICAvLyB3ZSB1c2UgdGhl
IHNlZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIE5ERUJVRy4gIFRoZSBkZWZhdWx0IGhhc2gK
LSAgICAgIC8vIGZ1bmN0aW9uLCB0aGUgc2VlZGluZywgZXRjLiwgYXJlIGFsbCBsaWtlbHkgdG8g
Y2hhbmdlIGluIHRoZSBmdXR1cmUuCi0jaWZuZGVmIE5ERUJVRwotICAgICAgcmV0dXJuIChoICog
KHNlZWRfIHwgMSkpICYgKG51bV9idWNrZXRzXyAtIDEpOwotI2Vsc2UKLSAgICAgIHJldHVybiAo
aCArIHNlZWRfKSAmIChudW1fYnVja2V0c18gLSAxKTsKLSNlbmRpZgotICAgIH0KLQotICAgIGJv
b2wgSXNNYXRjaChjb25zdCBLZXkmIGswLCBjb25zdCBLZXkmIGsxKSBjb25zdCB7Ci0gICAgICBy
ZXR1cm4gc3RkOjplcXVhbF90bzxLZXk+KCkoazAsIGsxKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1
cm4gYSBwb3dlciBvZiB0d28gbm8gbGVzcyB0aGFuIG1heChrTWluVGFibGVTaXplLCBuKS4KLSAg
ICAvLyBBc3N1bWVzIGVpdGhlciBuIDwga01pblRhYmxlU2l6ZSBvciBuIGlzIGEgcG93ZXIgb2Yg
dHdvLgotICAgIHNpemVfdHlwZSBUYWJsZVNpemUoc2l6ZV90eXBlIG4pIHsKLSAgICAgIHJldHVy
biBuIDwga01pblRhYmxlU2l6ZSA/IGtNaW5UYWJsZVNpemUgOiBuOwotICAgIH0KLQotICAgIC8v
IFVzZSBhbGxvY18gdG8gYWxsb2NhdGUgYW4gYXJyYXkgb2YgbiBvYmplY3RzIG9mIHR5cGUgVS4K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBVKiBBbGxvYyhzaXplX3R5cGUgbikgewot
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxVPjo6b3Ro
ZXIgYWxsb2NfdHlwZTsKLSAgICAgIHJldHVybiBhbGxvY190eXBlKGFsbG9jXykuYWxsb2NhdGUo
bik7Ci0gICAgfQotCi0gICAgLy8gVXNlIGFsbG9jXyB0byBkZWFsbG9jYXRlIGFuIGFycmF5IG9m
IG4gb2JqZWN0cyBvZiB0eXBlIFUuCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgdm9p
ZCBEZWFsbG9jKFUqIHQsIHNpemVfdHlwZSBuKSB7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIEFs
bG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPFU+OjpvdGhlciBhbGxvY190eXBlOwotICAgICAgYWxs
b2NfdHlwZShhbGxvY18pLmRlYWxsb2NhdGUodCwgbik7Ci0gICAgfQotCi0gICAgdm9pZCBEZXN0
cm95Tm9kZShOb2RlKiBub2RlKSB7Ci0gICAgICBhbGxvY18uZGVzdHJveSgmbm9kZS0+a3YpOwot
ICAgICAgRGVhbGxvYzxOb2RlPihub2RlLCAxKTsKLSAgICB9Ci0KLSAgICB2b2lkIERlc3Ryb3lU
cmVlKFRyZWUqIHRyZWUpIHsKLSAgICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6dGVtcGxhdGUgcmVi
aW5kPFRyZWU+OjpvdGhlciB0cmVlX2FsbG9jYXRvcihhbGxvY18pOwotICAgICAgdHJlZV9hbGxv
Y2F0b3IuZGVzdHJveSh0cmVlKTsKLSAgICAgIHRyZWVfYWxsb2NhdG9yLmRlYWxsb2NhdGUodHJl
ZSwgMSk7Ci0gICAgfQotCi0gICAgdm9pZCoqIENyZWF0ZUVtcHR5VGFibGUoc2l6ZV90eXBlIG4p
IHsKLSAgICAgIEdPT0dMRV9EQ0hFQ0sobiA+PSBrTWluVGFibGVTaXplKTsKLSAgICAgIEdPT0dM
RV9EQ0hFQ0tfRVEobiAmIChuIC0gMSksIDApOwotICAgICAgdm9pZCoqIHJlc3VsdCA9IEFsbG9j
PHZvaWQqPihuKTsKLSAgICAgIG1lbXNldChyZXN1bHQsIDAsIG4gKiBzaXplb2YocmVzdWx0WzBd
KSk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIFJldHVybiBhIHJhbmRv
bWlzaCB2YWx1ZS4KLSAgICBzaXplX3R5cGUgU2VlZCgpIGNvbnN0IHsKLSAgICAgIC8vIHJhbmRv
bV9kZXZpY2UgY2FuIHRocm93LCBzbyBhdm9pZCBpdCB1bmxlc3Mgd2UgYXJlIGNvbXBpbGluZyB3
aXRoCi0gICAgICAvLyBleGNlcHRpb25zIGVuYWJsZWQuCi0jaWYgX19jcHBfZXhjZXB0aW9ucyAm
JiBMQU5HX0NYWDExCi0gICAgICB0cnkgewotICAgICAgICBzdGQ6OnJhbmRvbV9kZXZpY2UgcmQ7
Ci0gICAgICAgIHN0ZDo6a251dGhfYiBrbnV0aChyZCgpKTsKLSAgICAgICAgc3RkOjp1bmlmb3Jt
X2ludF9kaXN0cmlidXRpb248c2l6ZV90eXBlPiB1OwotICAgICAgICByZXR1cm4gdShrbnV0aCk7
Ci0gICAgICB9IGNhdGNoICguLi4pIHsgfQotI2VuZGlmCi0gICAgICBzaXplX3R5cGUgcyA9IHN0
YXRpY19jYXN0PHNpemVfdHlwZT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpKTsK
LSNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19HTlVDX18pCi0gICAgICB1aW50
MzIgaGksIGxvOwotICAgICAgYXNtKCJyZHRzYyIgOiAiPWEiIChsbyksICI9ZCIgKGhpKSk7Ci0g
ICAgICBzICs9ICgoc3RhdGljX2Nhc3Q8dWludDY0PihoaSkgPDwgMzIpIHwgbG8pOwotI2VuZGlm
Ci0gICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICBzaXplX3R5cGUgbnVtX2VsZW1lbnRzXzsK
LSAgICBzaXplX3R5cGUgbnVtX2J1Y2tldHNfOwotICAgIHNpemVfdHlwZSBzZWVkXzsKLSAgICBz
aXplX3R5cGUgaW5kZXhfb2ZfZmlyc3Rfbm9uX251bGxfOwotICAgIHZvaWQqKiB0YWJsZV87ICAv
LyBhbiBhcnJheSB3aXRoIG51bV9idWNrZXRzXyBlbnRyaWVzCi0gICAgQWxsb2NhdG9yIGFsbG9j
XzsKLSAgICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoSW5uZXJNYXApOwotICB9
OyAgLy8gZW5kIG9mIGNsYXNzIElubmVyTWFwCi0KLSAgdHlwZWRlZiBoYXNoX21hcDxLZXksIHZh
bHVlX3R5cGUqLCBoYXNoPEtleT4sIGVxdWFsX3RvPEtleT4sCi0gICAgICAgICAgICAgICAgICAg
TWFwQWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBLZXksIE1hcFBhaXI8S2V5LCBUPio+ID4gPgot
ICAgICAgRGVwcmVjYXRlZElubmVyTWFwOwotCi0gcHVibGljOgotICAvLyBJdGVyYXRvcnMKLSAg
Y2xhc3MgaXRlcmF0b3JfYmFzZSB7Ci0gICBwdWJsaWM6Ci0gICAgLy8gV2Ugc3VwcG9ydCAib2xk
IHN0eWxlIiBhbmQgIm5ldyBzdHlsZSIgaXRlcmF0b3JzIGZvciBub3cuIFRoaXMgaXMKLSAgICAv
LyB0ZW1wb3JhcnkuICBBbHNvLCBmb3IgIml0ZXJhdG9yKCkiIHdlIGhhdmUgYW4gdW5rbm93biBj
YXRlZ29yeS4KLSAgICAvLyBUT0RPKGdwaWtlKTogZ2V0IHJpZCBvZiB0aGlzLgotICAgIGVudW0g
SXRlcmF0b3JTdHlsZSB7IGtVbmtub3duLCBrT2xkLCBrTmV3IH07Ci0gICAgZXhwbGljaXQgaXRl
cmF0b3JfYmFzZShJdGVyYXRvclN0eWxlIHN0eWxlKSA6IGl0ZXJhdG9yX3N0eWxlXyhzdHlsZSkg
e30KLQotICAgIGJvb2wgT2xkU3R5bGUoKSBjb25zdCB7Ci0gICAgICBHT09HTEVfRENIRUNLX05F
KGl0ZXJhdG9yX3N0eWxlXywga1Vua25vd24pOwotICAgICAgcmV0dXJuIGl0ZXJhdG9yX3N0eWxl
XyA9PSBrT2xkOwotICAgIH0KLSAgICBib29sIFVua25vd25TdHlsZSgpIGNvbnN0IHsKLSAgICAg
IHJldHVybiBpdGVyYXRvcl9zdHlsZV8gPT0ga1Vua25vd247Ci0gICAgfQotICAgIGJvb2wgU2Ft
ZVN0eWxlKGNvbnN0IGl0ZXJhdG9yX2Jhc2UmIG90aGVyKSBjb25zdCB7Ci0gICAgICByZXR1cm4g
aXRlcmF0b3Jfc3R5bGVfID09IG90aGVyLml0ZXJhdG9yX3N0eWxlXzsKLSAgICB9Ci0KLSAgIHBy
aXZhdGU6Ci0gICAgSXRlcmF0b3JTdHlsZSBpdGVyYXRvcl9zdHlsZV87Ci0gIH07Ci0KLSAgY2xh
c3MgY29uc3RfaXRlcmF0b3IKLSAgICAgIDogcHJpdmF0ZSBpdGVyYXRvcl9iYXNlLAotICAgICAg
ICBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCB2YWx1ZV90
eXBlLCBwdHJkaWZmX3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVl
X3R5cGUqLCBjb25zdCB2YWx1ZV90eXBlJj4gewotICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5uZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIElubmVySXQ7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBEZXByZWNh
dGVkSW5uZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIERlcHJlY2F0ZWRJbm5lckl0OwotCi0gICBwdWJs
aWM6Ci0gICAgY29uc3RfaXRlcmF0b3IoKSA6IGl0ZXJhdG9yX2Jhc2UoaXRlcmF0b3JfYmFzZTo6
a1Vua25vd24pIHt9Ci0gICAgZXhwbGljaXQgY29uc3RfaXRlcmF0b3IoY29uc3QgRGVwcmVjYXRl
ZElubmVySXQmIGRpdCkKLSAgICAgICAgOiBpdGVyYXRvcl9iYXNlKGl0ZXJhdG9yX2Jhc2U6OmtP
bGQpLCBkaXRfKGRpdCkge30KLSAgICBleHBsaWNpdCBjb25zdF9pdGVyYXRvcihjb25zdCBJbm5l
ckl0JiBpdCkKLSAgICAgICAgOiBpdGVyYXRvcl9iYXNlKGl0ZXJhdG9yX2Jhc2U6OmtOZXcpLCBp
dF8oaXQpIHt9Ci0KLSAgICBjb25zdF9pdGVyYXRvcihjb25zdCBjb25zdF9pdGVyYXRvciYgb3Ro
ZXIpCi0gICAgICAgIDogaXRlcmF0b3JfYmFzZShvdGhlciksIGl0XyhvdGhlci5pdF8pLCBkaXRf
KG90aGVyLmRpdF8pIHt9Ci0KLSAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qg
ewotICAgICAgcmV0dXJuIHRoaXMtPk9sZFN0eWxlKCkgPyAqZGl0Xy0+c2Vjb25kIDogKml0Xy0+
dmFsdWUoKTsKLSAgICB9Ci0gICAgY29uc3RfcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gJihvcGVyYXRvciooKSk7IH0KLQotICAgIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisr
KCkgewotICAgICAgaWYgKHRoaXMtPk9sZFN0eWxlKCkpCi0gICAgICAgICsrZGl0XzsKLSAgICAg
IGVsc2UKLSAgICAgICAgKytpdF87Ci0gICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNv
bnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7Ci0gICAgICByZXR1cm4gdGhpcy0+T2xkU3R5
bGUoKSA/IGNvbnN0X2l0ZXJhdG9yKGRpdF8rKykgOiBjb25zdF9pdGVyYXRvcihpdF8rKyk7Ci0g
ICAgfQotCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYg
YSwgY29uc3QgY29uc3RfaXRlcmF0b3ImIGIpIHsKLSAgICAgIGlmICghYS5TYW1lU3R5bGUoYikp
IHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChhLlVua25vd25TdHlsZSgpKSByZXR1cm4gdHJ1ZTsK
LSAgICAgIHJldHVybiBhLk9sZFN0eWxlKCkgPyAoYS5kaXRfID09IGIuZGl0XykgOiAoYS5pdF8g
PT0gYi5pdF8pOwotICAgIH0KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBhLCBjb25zdCBjb25zdF9pdGVyYXRvciYgYikgewotICAgICAgcmV0dXJuICEo
YSA9PSBiKTsKLSAgICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgSW5uZXJJdCBpdF87Ci0gICAgRGVw
cmVjYXRlZElubmVySXQgZGl0XzsKLSAgfTsKLQotICBjbGFzcyBpdGVyYXRvciA6IHByaXZhdGUg
aXRlcmF0b3JfYmFzZSwKLSAgICAgICAgICAgICAgICAgICBwdWJsaWMgc3RkOjppdGVyYXRvcjxz
dGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCB2YWx1ZV90eXBlPiB7Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBJbm5lck1hcDo6aXRlcmF0b3IgSW5uZXJJdDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIERl
cHJlY2F0ZWRJbm5lck1hcDo6aXRlcmF0b3IgRGVwcmVjYXRlZElubmVySXQ7Ci0KLSAgIHB1Ymxp
YzoKLSAgICBpdGVyYXRvcigpIDogaXRlcmF0b3JfYmFzZShpdGVyYXRvcl9iYXNlOjprVW5rbm93
bikge30KLSAgICBleHBsaWNpdCBpdGVyYXRvcihjb25zdCBEZXByZWNhdGVkSW5uZXJJdCYgZGl0
KQotICAgICAgICA6IGl0ZXJhdG9yX2Jhc2UoaXRlcmF0b3JfYmFzZTo6a09sZCksIGRpdF8oZGl0
KSB7fQotICAgIGV4cGxpY2l0IGl0ZXJhdG9yKGNvbnN0IElubmVySXQmIGl0KQotICAgICAgICA6
IGl0ZXJhdG9yX2Jhc2UoaXRlcmF0b3JfYmFzZTo6a05ldyksIGl0XyhpdCkge30KLQotICAgIHJl
ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7Ci0gICAgICByZXR1cm4gdGhpcy0+T2xkU3R5bGUo
KSA/ICpkaXRfLT5zZWNvbmQgOiAqaXRfLT52YWx1ZSgpOwotICAgIH0KLSAgICBwb2ludGVyIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQotCi0gICAgaXRlcmF0
b3ImIG9wZXJhdG9yKysoKSB7Ci0gICAgICBpZiAodGhpcy0+T2xkU3R5bGUoKSkKLSAgICAgICAg
KytkaXRfOwotICAgICAgZWxzZQotICAgICAgICArK2l0XzsKLSAgICAgIHJldHVybiAqdGhpczsK
LSAgICB9Ci0gICAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKLSAgICAgIHJldHVybiB0aGlz
LT5PbGRTdHlsZSgpID8gaXRlcmF0b3IoZGl0XysrKSA6IGl0ZXJhdG9yKGl0XysrKTsKLSAgICB9
Ci0KLSAgICAvLyBBbGxvdyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGNvbnN0X2l0ZXJhdG9yLgot
ICAgIG9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKCkgY29uc3QgewotICAgICAgcmV0dXJuIHRoaXMt
Pk9sZFN0eWxlKCkgPwotICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yKHR5cGVuYW1lIERlcHJlY2F0
ZWRJbm5lck1hcDo6Y29uc3RfaXRlcmF0b3IoZGl0XykpIDoKLSAgICAgICAgICBjb25zdF9pdGVy
YXRvcih0eXBlbmFtZSBJbm5lck1hcDo6Y29uc3RfaXRlcmF0b3IoaXRfKSk7Ci0gICAgfQotCi0g
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgYSwgY29uc3QgaXRlcmF0
b3ImIGIpIHsKLSAgICAgIGlmICghYS5TYW1lU3R5bGUoYikpIHJldHVybiBmYWxzZTsKLSAgICAg
IGlmIChhLlVua25vd25TdHlsZSgpKSByZXR1cm4gdHJ1ZTsKLSAgICAgIHJldHVybiBhLk9sZFN0
eWxlKCkgPyBhLmRpdF8gPT0gYi5kaXRfIDogYS5pdF8gPT0gYi5pdF87Ci0gICAgfQotICAgIGZy
aWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIGEsIGNvbnN0IGl0ZXJhdG9yJiBi
KSB7Ci0gICAgICByZXR1cm4gIShhID09IGIpOwotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBm
cmllbmQgY2xhc3MgTWFwOwotCi0gICAgSW5uZXJJdCBpdF87Ci0gICAgRGVwcmVjYXRlZElubmVy
SXQgZGl0XzsKLSAgfTsKLQotICBpdGVyYXRvciBiZWdpbigpIHsKLSAgICByZXR1cm4gb2xkX3N0
eWxlXyA/IGl0ZXJhdG9yKGRlcHJlY2F0ZWRfZWxlbWVudHNfLT5iZWdpbigpKQotICAgICAgICAg
ICAgICAgICAgICAgIDogaXRlcmF0b3IoZWxlbWVudHNfLT5iZWdpbigpKTsKLSAgfQotICBpdGVy
YXRvciBlbmQoKSB7Ci0gICAgcmV0dXJuIG9sZF9zdHlsZV8gPyBpdGVyYXRvcihkZXByZWNhdGVk
X2VsZW1lbnRzXy0+ZW5kKCkpCi0gICAgICAgICAgICAgICAgICAgICAgOiBpdGVyYXRvcihlbGVt
ZW50c18tPmVuZCgpKTsKLSAgfQotICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsKLSAg
ICByZXR1cm4gb2xkX3N0eWxlXyA/IGNvbnN0X2l0ZXJhdG9yKGRlcHJlY2F0ZWRfZWxlbWVudHNf
LT5iZWdpbigpKQotICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RfaXRlcmF0b3IoaXRlcmF0
b3IoZWxlbWVudHNfLT5iZWdpbigpKSk7Ci0gIH0KLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgewotICAgIHJldHVybiBvbGRfc3R5bGVfID8gY29uc3RfaXRlcmF0b3IoZGVwcmVjYXRlZF9l
bGVtZW50c18tPmVuZCgpKQotICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RfaXRlcmF0b3Io
aXRlcmF0b3IoZWxlbWVudHNfLT5lbmQoKSkpOwotICB9Ci0gIGNvbnN0X2l0ZXJhdG9yIGNiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCk7IH0KLSAgY29uc3RfaXRlcmF0b3IgY2VuZCgpIGNv
bnN0IHsgcmV0dXJuIGVuZCgpOyB9Ci0KLSAgLy8gQ2FwYWNpdHkKLSAgc2l6ZV90eXBlIHNpemUo
KSBjb25zdCB7Ci0gICAgcmV0dXJuIG9sZF9zdHlsZV8gPyBkZXByZWNhdGVkX2VsZW1lbnRzXy0+
c2l6ZSgpIDogZWxlbWVudHNfLT5zaXplKCk7Ci0gIH0KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIHNpemUoKSA9PSAwOyB9Ci0KLSAgLy8gRWxlbWVudCBhY2Nlc3MKLSAgVCYgb3BlcmF0
b3JbXShjb25zdCBrZXlfdHlwZSYga2V5KSB7Ci0gICAgdmFsdWVfdHlwZSoqIHZhbHVlID0KLSAg
ICAgICAgb2xkX3N0eWxlXyA/ICYoKmRlcHJlY2F0ZWRfZWxlbWVudHNfKVtrZXldIDogJigqZWxl
bWVudHNfKVtrZXldOwotICAgIGlmICgqdmFsdWUgPT0gTlVMTCkgewotICAgICAgKnZhbHVlID0g
Q3JlYXRlVmFsdWVUeXBlSW50ZXJuYWwoa2V5KTsKLSAgICAgIGludGVybmFsOjpNYXBWYWx1ZUlu
aXRpYWxpemVyPGdvb2dsZTo6cHJvdG9idWY6OmlzX3Byb3RvX2VudW08VD46OnZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVD46OkluaXRpYWxpemUoKCp2YWx1ZSkt
PnNlY29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHRfZW51bV92YWx1ZV8pOwotICAgIH0KLSAgICByZXR1cm4gKCp2YWx1ZSktPnNl
Y29uZDsKLSAgfQotICBjb25zdCBUJiBhdChjb25zdCBrZXlfdHlwZSYga2V5KSBjb25zdCB7Ci0g
ICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7Ci0gICAgR09PR0xFX0NIRUNLKGl0ICE9
IGVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKLSAgfQotICBUJiBhdChjb25zdCBrZXlf
dHlwZSYga2V5KSB7Ci0gICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7Ci0gICAgR09PR0xFX0NI
RUNLKGl0ICE9IGVuZCgpKTsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKLSAgfQotCi0gIC8vIExv
b2t1cAotICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIGtleSkgY29uc3QgewotICAg
IGlmIChmaW5kKGtleSkgIT0gZW5kKCkpIGFzc2VydChrZXkgPT0gZmluZChrZXkpLT5maXJzdCk7
Ci0gICAgcmV0dXJuIGZpbmQoa2V5KSA9PSBlbmQoKSA/IDAgOiAxOwotICB9Ci0gIGNvbnN0X2l0
ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIGtleSkgY29uc3QgewotICAgIHJldHVybiBvbGRf
c3R5bGVfID8gY29uc3RfaXRlcmF0b3IoZGVwcmVjYXRlZF9lbGVtZW50c18tPmZpbmQoa2V5KSkK
LSAgICAgICAgOiBjb25zdF9pdGVyYXRvcihpdGVyYXRvcihlbGVtZW50c18tPmZpbmQoa2V5KSkp
OwotICB9Ci0gIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIGtleSkgewotICAgIHJldHVy
biBvbGRfc3R5bGVfID8gaXRlcmF0b3IoZGVwcmVjYXRlZF9lbGVtZW50c18tPmZpbmQoa2V5KSkK
LSAgICAgICAgICAgICAgICAgICAgICA6IGl0ZXJhdG9yKGVsZW1lbnRzXy0+ZmluZChrZXkpKTsK
LSAgfQotICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9y
YW5nZSgKLSAgICAgIGNvbnN0IGtleV90eXBlJiBrZXkpIGNvbnN0IHsKLSAgICBjb25zdF9pdGVy
YXRvciBpdCA9IGZpbmQoa2V5KTsKLSAgICBpZiAoaXQgPT0gZW5kKCkpIHsKLSAgICAgIHJldHVy
biBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPihpdCwgaXQpOwotICAg
IH0gZWxzZSB7Ci0gICAgICBjb25zdF9pdGVyYXRvciBiZWdpbiA9IGl0Kys7Ci0gICAgICByZXR1
cm4gc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4oYmVnaW4sIGl0KTsK
LSAgICB9Ci0gIH0KLSAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gZXF1YWxfcmFuZ2Uo
Y29uc3Qga2V5X3R5cGUmIGtleSkgewotICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwotICAg
IGlmIChpdCA9PSBlbmQoKSkgewotICAgICAgcmV0dXJuIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRl
cmF0b3I+KGl0LCBpdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGl0ZXJhdG9yIGJlZ2luID0gaXQr
KzsKLSAgICAgIHJldHVybiBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPihiZWdpbiwgaXQp
OwotICAgIH0KLSAgfQotCi0gIC8vIGluc2VydAotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+
IGluc2VydChjb25zdCB2YWx1ZV90eXBlJiB2YWx1ZSkgewotICAgIGlmIChvbGRfc3R5bGVfKSB7
Ci0gICAgICBpdGVyYXRvciBpdCA9IGZpbmQodmFsdWUuZmlyc3QpOwotICAgICAgaWYgKGl0ICE9
IGVuZCgpKSB7Ci0gICAgICAgIHJldHVybiBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+KGl0LCBm
YWxzZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9y
LCBib29sPigKLSAgICAgICAgICAgIGl0ZXJhdG9yKGRlcHJlY2F0ZWRfZWxlbWVudHNfLT5pbnNl
cnQoc3RkOjpwYWlyPEtleSwgdmFsdWVfdHlwZSo+KAotICAgICAgICAgICAgICAgIHZhbHVlLmZp
cnN0LCBDcmVhdGVWYWx1ZVR5cGVJbnRlcm5hbCh2YWx1ZSkpKS5maXJzdCksIHRydWUpOwotICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBzdGQ6OnBhaXI8dHlwZW5hbWUgSW5uZXJNYXA6Oml0
ZXJhdG9yLCBib29sPiBwID0KLSAgICAgICAgICBlbGVtZW50c18tPmluc2VydCh2YWx1ZS5maXJz
dCk7Ci0gICAgICBpZiAocC5zZWNvbmQpIHsKLSAgICAgICAgcC5maXJzdC0+dmFsdWUoKSA9IENy
ZWF0ZVZhbHVlVHlwZUludGVybmFsKHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzdGQ6
OnBhaXI8aXRlcmF0b3IsIGJvb2w+KGl0ZXJhdG9yKHAuZmlyc3QpLCBwLnNlY29uZCk7Ci0gICAg
fQotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0PgotICB2b2lkIGluc2VydChJbnB1dEl0
IGZpcnN0LCBJbnB1dEl0IGxhc3QpIHsKLSAgICBmb3IgKElucHV0SXQgaXQgPSBmaXJzdDsgaXQg
IT0gbGFzdDsgKytpdCkgewotICAgICAgaXRlcmF0b3IgZXhpc3RfaXQgPSBmaW5kKGl0LT5maXJz
dCk7Ci0gICAgICBpZiAoZXhpc3RfaXQgPT0gZW5kKCkpIHsKLSAgICAgICAgb3BlcmF0b3JbXShp
dC0+Zmlyc3QpID0gaXQtPnNlY29uZDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBFcmFz
ZSBhbmQgY2xlYXIKLSAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBrZXkpIHsKLSAg
ICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKLSAgICBpZiAoaXQgPT0gZW5kKCkpIHsKLSAgICAg
IHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBlcmFzZShpdCk7Ci0gICAgICByZXR1cm4g
MTsKLSAgICB9Ci0gIH0KLSAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgcG9zKSB7Ci0gICAgaWYg
KGFyZW5hXyA9PSBOVUxMKSBkZWxldGUgcG9zLm9wZXJhdG9yLT4oKTsKLSAgICBpdGVyYXRvciBp
ID0gcG9zKys7Ci0gICAgaWYgKG9sZF9zdHlsZV8pCi0gICAgICBkZXByZWNhdGVkX2VsZW1lbnRz
Xy0+ZXJhc2UoaS5kaXRfKTsKLSAgICBlbHNlCi0gICAgICBlbGVtZW50c18tPmVyYXNlKGkuaXRf
KTsKLSAgICByZXR1cm4gcG9zOwotICB9Ci0gIHZvaWQgZXJhc2UoaXRlcmF0b3IgZmlyc3QsIGl0
ZXJhdG9yIGxhc3QpIHsKLSAgICB3aGlsZSAoZmlyc3QgIT0gbGFzdCkgewotICAgICAgZmlyc3Qg
PSBlcmFzZShmaXJzdCk7Ci0gICAgfQotICB9Ci0gIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2lu
KCksIGVuZCgpKTsgfQotCi0gIC8vIEFzc2lnbgotICBNYXAmIG9wZXJhdG9yPShjb25zdCBNYXAm
IG90aGVyKSB7Ci0gICAgaWYgKHRoaXMgIT0gJm90aGVyKSB7Ci0gICAgICBjbGVhcigpOwotICAg
ICAgaW5zZXJ0KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
ICp0aGlzOwotICB9Ci0KLSAgLy8gQWNjZXNzIHRvIGhhc2hlci4gIEN1cnJlbnRseSB0aGlzIHJl
dHVybnMgYSBjb3B5LCBidXQgaXQgbWF5Ci0gIC8vIGJlIG1vZGlmaWVkIHRvIHJldHVybiBhIGNv
bnN0IHJlZmVyZW5jZSBpbiB0aGUgZnV0dXJlLgotICBoYXNoZXIgaGFzaF9mdW5jdGlvbigpIGNv
bnN0IHsKLSAgICByZXR1cm4gb2xkX3N0eWxlXyA/IGRlcHJlY2F0ZWRfZWxlbWVudHNfLT5oYXNo
X2Z1bmN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICA6IGVsZW1lbnRzXy0+aGFzaF9mdW5j
dGlvbigpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBTZXQgZGVmYXVsdCBlbnVtIHZhbHVlIG9u
bHkgZm9yIHByb3RvMiBtYXAgZmllbGQgd2hvc2UgdmFsdWUgaXMgZW51bSB0eXBlLgotICB2b2lk
IFNldERlZmF1bHRFbnVtVmFsdWUoaW50IGRlZmF1bHRfZW51bV92YWx1ZSkgewotICAgIGRlZmF1
bHRfZW51bV92YWx1ZV8gPSBkZWZhdWx0X2VudW1fdmFsdWU7Ci0gIH0KLQotICB2YWx1ZV90eXBl
KiBDcmVhdGVWYWx1ZVR5cGVJbnRlcm5hbChjb25zdCBLZXkmIGtleSkgewotICAgIGlmIChhcmVu
YV8gPT0gTlVMTCkgewotICAgICAgcmV0dXJuIG5ldyB2YWx1ZV90eXBlKGtleSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHZhbHVlX3R5cGUqIHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx2YWx1ZV90
eXBlKj4oCi0gICAgICAgICAgQXJlbmE6OkNyZWF0ZUFycmF5PHVpbnQ4PihhcmVuYV8sIHNpemVv
Zih2YWx1ZV90eXBlKSkpOwotICAgICAgQXJlbmE6OkNyZWF0ZUluQXJlbmFTdG9yYWdlKGNvbnN0
X2Nhc3Q8S2V5Kj4oJnZhbHVlLT5maXJzdCksIGFyZW5hXyk7Ci0gICAgICBBcmVuYTo6Q3JlYXRl
SW5BcmVuYVN0b3JhZ2UoJnZhbHVlLT5zZWNvbmQsIGFyZW5hXyk7Ci0gICAgICBjb25zdF9jYXN0
PEtleSY+KHZhbHVlLT5maXJzdCkgPSBrZXk7Ci0gICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQot
ICB9Ci0KLSAgdmFsdWVfdHlwZSogQ3JlYXRlVmFsdWVUeXBlSW50ZXJuYWwoY29uc3QgdmFsdWVf
dHlwZSYgdmFsdWUpIHsKLSAgICBpZiAoYXJlbmFfID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBu
ZXcgdmFsdWVfdHlwZSh2YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhbHVlX3R5cGUqIHAg
PSByZWludGVycHJldF9jYXN0PHZhbHVlX3R5cGUqPigKLSAgICAgICAgICBBcmVuYTo6Q3JlYXRl
QXJyYXk8dWludDg+KGFyZW5hXywgc2l6ZW9mKHZhbHVlX3R5cGUpKSk7Ci0gICAgICBBcmVuYTo6
Q3JlYXRlSW5BcmVuYVN0b3JhZ2UoY29uc3RfY2FzdDxLZXkqPigmcC0+Zmlyc3QpLCBhcmVuYV8p
OwotICAgICAgQXJlbmE6OkNyZWF0ZUluQXJlbmFTdG9yYWdlKCZwLT5zZWNvbmQsIGFyZW5hXyk7
Ci0gICAgICBjb25zdF9jYXN0PEtleSY+KHAtPmZpcnN0KSA9IHZhbHVlLmZpcnN0OwotICAgICAg
cC0+c2Vjb25kID0gdmFsdWUuc2Vjb25kOwotICAgICAgcmV0dXJuIHA7Ci0gICAgfQotICB9Ci0K
LSAgQXJlbmEqIGFyZW5hXzsKLSAgaW50IGRlZmF1bHRfZW51bV92YWx1ZV87Ci0gIC8vIFRoZSBm
b2xsb3dpbmcgaXMgYSB0YWdnZWQgdW5pb24gYmVjYXVzZSB3ZSBzdXBwb3J0IHR3byBtYXAgc3R5
bGVzCi0gIC8vIGZvciBub3cuCi0gIC8vIFRPRE8oZ3Bpa2UpOiBnZXQgcmlkIG9mIHRoZSBvbGQg
c3R5bGUuCi0gIGNvbnN0IGJvb2wgb2xkX3N0eWxlXzsKLSAgdW5pb24gewotICAgIElubmVyTWFw
KiBlbGVtZW50c187Ci0gICAgRGVwcmVjYXRlZElubmVyTWFwKiBkZXByZWNhdGVkX2VsZW1lbnRz
XzsKLSAgfTsKLQotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTsKLSAg
dHlwZWRlZiB2b2lkIEludGVybmFsQXJlbmFDb25zdHJ1Y3RhYmxlXzsKLSAgdHlwZWRlZiB2b2lk
IERlc3RydWN0b3JTa2lwcGFibGVfOwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSywgdHlwZW5hbWUg
ViwKLSAgICAgICAgICAgIGludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtleV93
aXJlX3R5cGUsCi0gICAgICAgICAgICBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkZpZWxkVHlw
ZSB2YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVlPgot
ICBmcmllbmQgY2xhc3MgaW50ZXJuYWw6Ok1hcEZpZWxkTGl0ZTsKLX07Ci0KLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi1HT09HTEVfUFJPVE9CVUZf
SEFTSF9OQU1FU1BBQ0VfREVDTEFSQVRJT05fU1RBUlQKLXRlbXBsYXRlPD4KLXN0cnVjdCBoYXNo
PGdvb2dsZTo6cHJvdG9idWY6Ok1hcEtleT4gewotICBzaXplX3QKLSAgb3BlcmF0b3IoKShjb25z
dCBnb29nbGU6OnByb3RvYnVmOjpNYXBLZXkmIG1hcF9rZXkpIGNvbnN0IHsKLSAgICBzd2l0Y2gg
KG1hcF9rZXkudHlwZSgpKSB7Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV9ET1VCTEU6Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9GTE9BVDoKLSAgICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1
Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJv
dG9idWY6OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgICBHT09HTEVf
TE9HKEZBVEFMKSA8PCAiVW5zdXBwb3J0ZWQiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzoKLSAgICAg
ICAgcmV0dXJuIGhhc2g8c3RyaW5nPigpKG1hcF9rZXkuR2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAg
ICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQ2NDoK
LSAgICAgICAgcmV0dXJuIGhhc2g8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50NjQ+KCkobWFwX2tl
eS5HZXRJbnQ2NFZhbHVlKCkpOwotICAgICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfSU5UMzI6Ci0gICAgICAgIHJldHVybiBoYXNoPCA6Omdvb2dsZTo6
cHJvdG9idWY6OmludDMyPigpKG1hcF9rZXkuR2V0SW50MzJWYWx1ZSgpKTsKLSAgICAgIGNhc2Ug
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NDoKLSAgICAg
ICAgcmV0dXJuIGhhc2g8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDY0PigpKG1hcF9rZXkuR2V0
VUludDY0VmFsdWUoKSk7Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9VSU5UMzI6Ci0gICAgICAgIHJldHVybiBoYXNoPCA6Omdvb2dsZTo6cHJv
dG9idWY6OnVpbnQzMj4oKShtYXBfa2V5LkdldFVJbnQzMlZhbHVlKCkpOwotICAgICAgY2FzZSBn
b29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICAgICAg
cmV0dXJuIGhhc2g8Ym9vbD4oKShtYXBfa2V5LkdldEJvb2xWYWx1ZSgpKTsKLSAgICB9Ci0gICAg
R09PR0xFX0xPRyhGQVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gICAgcmV0dXJuIDA7Ci0g
IH0KLSAgYm9vbAotICBvcGVyYXRvcigpKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6Ok1hcEtleSYg
bWFwX2tleTEsCi0gICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6TWFwS2V5JiBt
YXBfa2V5MikgY29uc3QgewotICAgIHJldHVybiBtYXBfa2V5MSA8IG1hcF9rZXkyOwotICB9Ci19
OwotR09PR0xFX1BST1RPQlVGX0hBU0hfTkFNRVNQQUNFX0RFQ0xBUkFUSU9OX0VORAotCi0jZW5k
aWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9NQVBfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvbWFwX2VudHJ5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX2VudHJ5LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4N2M0ZTI5N2M4YWE0NjdjMmRkMTI1MzI3NzM0OTUx
YTc3Y2ZhYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9lbnRyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzA4ICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dM
RV9QUk9UT0JVRl9NQVBfRU5UUllfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9NQVBfRU5U
UllfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVm
bGVjdGlvbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfZW50cnlfbGl0ZS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfdHlwZV9oYW5kbGVyLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL21ldGFkYXRhLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Jl
ZmxlY3Rpb25fb3BzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRf
c2V0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGVfaW5sLmg+
Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLWNsYXNzIEFyZW5h
OwotbmFtZXNwYWNlIGludGVybmFsIHsKLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga0tleUZpZWxkVHlw
ZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtWYWx1ZUZpZWxkVHlwZSwK
LSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVlPgotY2xhc3MgTWFwRmllbGQ7Ci19Ci19
Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBSZWdp
c3RlciBhbGwgTWFwRW50cnkgZGVmYXVsdCBpbnN0YW5jZXMgc28gd2UgY2FuIGRlbGV0ZSB0aGVt
IGluCi0vLyBTaHV0ZG93blByb3RvYnVmTGlicmFyeSgpLgotdm9pZCBMSUJQUk9UT0JVRl9FWFBP
UlQgUmVnaXN0ZXJNYXBFbnRyeURlZmF1bHRJbnN0YW5jZSgKLSAgICBNZXNzYWdlTGl0ZSogZGVm
YXVsdF9pbnN0YW5jZSk7Ci0KLS8vIFRoaXMgaXMgdGhlIGNvbW1vbiBiYXNlIGNsYXNzIGZvciBN
YXBFbnRyeS4gSXQgaXMgdXNlZCBieSBNYXBGaWVsZEJhc2UgaW4KLS8vIHJlZmxlY3Rpb24gYXBp
LCBpbiB3aGljaCB0aGUgc3RhdGljIHR5cGUgb2Yga2V5IGFuZCB2YWx1ZSBpcyB1bmtub3duLgot
Y2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE1hcEVudHJ5QmFzZSA6IHB1YmxpYyBNZXNzYWdlIHsK
LSBwdWJsaWM6Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBj
b25zdCB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgICBt
ZXRhZGF0YS5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcl87Ci0gICAgbWV0YWRhdGEucmVmbGVjdGlv
biA9IHJlZmxlY3Rpb25fOwotICAgIHJldHVybiBtZXRhZGF0YTsKLSAgfQotCi0gcHJvdGVjdGVk
OgotICBNYXBFbnRyeUJhc2UoKSA6IGRlc2NyaXB0b3JfKE5VTEwpLCByZWZsZWN0aW9uXyhOVUxM
KSB7ICB9Ci0gIHZpcnR1YWwgfk1hcEVudHJ5QmFzZSgpIHt9Ci0KLSAgY29uc3QgRGVzY3JpcHRv
ciogZGVzY3JpcHRvcl87Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb25fOwotfTsKLQot
Ly8gTWFwRW50cnkgaXMgdGhlIHJldHVybmVkIGdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2Ugd2hl
biBjYWxsaW5nIEFkZE1lc3NhZ2Ugb2YKLS8vIGdvb2dsZTo6cHJvdG9idWY6OlJlZmxlY3Rpb24u
IEluIG9yZGVyIHRvIGxldCBpdCB3b3JrIHdpdGggZ2VuZXJhdGVkIG1lc3NhZ2UKLS8vIHJlZmxl
Y3Rpb24sIGl0cyBpbi1tZW1vcnkgdHlwZSBpcyB0aGUgc2FtZSBhcyBnZW5lcmF0ZWQgbWVzc2Fn
ZSB3aXRoIHRoZSBzYW1lCi0vLyBmaWVsZHMuIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGRlY2lkZSB0
aGUgaW4tbWVtb3J5IHR5cGUgb2Yga2V5L3ZhbHVlLCB3ZSBuZWVkCi0vLyB0byBrbm93IGJvdGgg
dGhlaXIgY3BwIHR5cGUgaW4gZ2VuZXJhdGVkIGFwaSBhbmQgcHJvdG8gdHlwZS4gSW4KLS8vIGlt
cGxtZW50YXRpb24sIGFsbCBpbi1tZW1vcnkgdHlwZXMgaGF2ZSByZWxhdGVkIHdpcmUgZm9ybWF0
IGZ1bmN0aW9ucyB0bwotLy8gc3VwcG9ydCBleGNlcHQgQXJlbmFTdHJpbmdQdHIuIFRoZXJlZm9y
ZSwgd2UgbmVlZCB0byBkZWZpbmUgYW5vdGhlciB0eXBlIHdpdGgKLS8vIHN1cHBvcnRpbmcgd2ly
ZSBmb3JtYXQgZnVuY3Rpb25zLiBTaW5jZSB0aGlzIHR5cGUgaXMgb25seSB1c2VkIGFzIHJldHVy
biB0eXBlCi0vLyBvZiBNYXBFbnRyeSBhY2Nlc3NvcnMsIGl0J3MgbmFtZWQgTWFwRW50cnkgYWNj
ZXNzb3IgdHlwZS4KLS8vCi0vLyBjcHAgdHlwZTogICAgICAgICAgICAgICB0aGUgdHlwZSB2aXNp
YmxlIHRvIHVzZXJzIGluIHB1YmxpYyBBUEkuCi0vLyBwcm90byB0eXBlOiAgICAgICAgICAgICBX
aXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIG9mIHRoZSBmaWVsZC4KLS8vIGluLW1lbW9yeSB0eXBl
OiAgICAgICAgIHR5cGUgb2YgdGhlIGRhdGEgbWVtYmVyIHVzZWQgdG8gc3RvcmVkIHRoaXMgZmll
bGQuCi0vLyBNYXBFbnRyeSBhY2Nlc3NvciB0eXBlOiB0eXBlIHVzZWQgaW4gTWFwRW50cnkgZ2V0
dGVycy9tdXRhdG9ycyB0byBhY2Nlc3MgdGhlCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICBm
aWVsZC4KLS8vCi0vLyBjcHAgdHlwZSB8IHByb3RvIHR5cGUgIHwgaW4tbWVtb3J5IHR5cGUgfCBN
YXBFbnRyeSBhY2Nlc3NvciB0eXBlCi0vLyBpbnQzMiAgICAgIFRZUEVfSU5UMzIgICAgaW50MzIg
ICAgICAgICAgICBpbnQzMgotLy8gaW50MzIgICAgICBUWVBFX0ZJWEVEMzIgIGludDMyICAgICAg
ICAgICAgaW50MzIKLS8vIHN0cmluZyAgICAgVFlQRV9TVFJJTkcgICBBcmVuYVN0cmluZ1B0ciAg
IHN0cmluZwotLy8gRm9vRW51bSAgICBUWVBFX0VOVU0gICAgIGludCAgICAgICAgICAgICAgaW50
Ci0vLyBGb29NZXNzYWdlIFRZUEVfTUVTU0FHRSAgRm9vTWVzc2FnZSogICAgICBGb29NZXNzYWdl
Ci0vLwotLy8gVGhlIGluLW1lbW9yeSB0eXBlcyBvZiBwcmltaXRpdmUgdHlwZXMgY2FuIGJlIGlu
ZmVycmVkIGZyb20gaXRzIHByb3RvIHR5cGUsCi0vLyB3aGlsZSB3ZSBuZWVkIHRvIGV4cGxpY2l0
bHkgc3BlY2lmeSB0aGUgY3BwIHR5cGUgaWYgcHJvdG8gdHlwZSBpcwotLy8gVFlQRV9NRVNTQUdF
IHRvIGluZmVyIHRoZSBpbi1tZW1vcnkgdHlwZS4gIE1vcmVvdmVyLCBkZWZhdWx0X2VudW1fdmFs
dWUgaXMKLS8vIHVzZWQgdG8gaW5pdGlhbGl6ZSBlbnVtIGZpZWxkIGluIHByb3RvMi4KLXRlbXBs
YXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLAotICAgICAgICAgIFdpcmVGb3JtYXRM
aXRlOjpGaWVsZFR5cGUga0tleUZpZWxkVHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6
RmllbGRUeXBlIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3Zh
bHVlPgotY2xhc3MgTWFwRW50cnkgOiBwdWJsaWMgTWFwRW50cnlCYXNlIHsKLSAgLy8gUHJvdmlk
ZSB1dGlsaXRpZXMgdG8gcGFyc2Uvc2VyaWFsaXplIGtleS92YWx1ZS4gIFByb3ZpZGUgdXRpbGl0
aWVzIHRvCi0gIC8vIG1hbmlwdWxhdGUgaW50ZXJuYWwgc3RvcmVkIHR5cGUuCi0gIHR5cGVkZWYg
TWFwVHlwZUhhbmRsZXI8a0tleUZpZWxkVHlwZSwgS2V5PiBLZXlUeXBlSGFuZGxlcjsKLSAgdHlw
ZWRlZiBNYXBUeXBlSGFuZGxlcjxrVmFsdWVGaWVsZFR5cGUsIFZhbHVlPiBWYWx1ZVR5cGVIYW5k
bGVyOwotCi0gIC8vIEVudW0gdHlwZSBjYW5ub3QgYmUgdXNlZCBmb3IgTWFwVHlwZUhhbmRsZXI6
OlJlYWQuIERlZmluZSBhIHR5cGUKLSAgLy8gd2hpY2ggd2lsbCByZXBsYWNlIEVudW0gd2l0aCBp
bnQuCi0gIHR5cGVkZWYgdHlwZW5hbWUgS2V5VHlwZUhhbmRsZXI6Ok1hcEVudHJ5QWNjZXNzb3JU
eXBlIEtleU1hcEVudHJ5QWNjZXNzb3JUeXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHlw
ZUhhbmRsZXI6Ok1hcEVudHJ5QWNjZXNzb3JUeXBlCi0gICAgICBWYWx1ZU1hcEVudHJ5QWNjZXNz
b3JUeXBlOwotCi0gIC8vIEFiYnJldmlhdGlvbiBmb3IgTWFwRW50cnkKLSAgdHlwZWRlZiB0eXBl
bmFtZSBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6TWFwRW50cnk8Ci0gICAgICBLZXksIFZh
bHVlLCBrS2V5RmllbGRUeXBlLCBrVmFsdWVGaWVsZFR5cGUsIGRlZmF1bHRfZW51bV92YWx1ZT4g
RW50cnlUeXBlOwotCi0gIC8vIEFiYnJldmlhdGlvbiBmb3IgTWFwRW50cnlMaXRlCi0gIHR5cGVk
ZWYgdHlwZW5hbWUgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok1hcEVudHJ5TGl0ZTwKLSAg
ICAgIEtleSwgVmFsdWUsIGtLZXlGaWVsZFR5cGUsIGtWYWx1ZUZpZWxkVHlwZSwgZGVmYXVsdF9l
bnVtX3ZhbHVlPgotICAgICAgRW50cnlMaXRlVHlwZTsKLQotIHB1YmxpYzoKLSAgfk1hcEVudHJ5
KCkgewotICAgIGlmICh0aGlzID09IGRlZmF1bHRfaW5zdGFuY2VfKSB7Ci0gICAgICBkZWxldGUg
cmVmbGVjdGlvbl87Ci0gICAgfQotICB9Ci0KLSAgLy8gYWNjZXNzb3JzID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gIHZpcnR1YWwgaW5s
aW5lIGNvbnN0IEtleU1hcEVudHJ5QWNjZXNzb3JUeXBlJiBrZXkoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIGVudHJ5X2xpdGVfLmtleSgpOwotICB9Ci0gIGlubGluZSBLZXlNYXBFbnRyeUFjY2Vzc29y
VHlwZSogbXV0YWJsZV9rZXkoKSB7Ci0gICAgcmV0dXJuIGVudHJ5X2xpdGVfLm11dGFibGVfa2V5
KCk7Ci0gIH0KLSAgdmlydHVhbCBpbmxpbmUgY29uc3QgVmFsdWVNYXBFbnRyeUFjY2Vzc29yVHlw
ZSYgdmFsdWUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGVudHJ5X2xpdGVfLnZhbHVlKCk7Ci0gIH0K
LSAgaW5saW5lIFZhbHVlTWFwRW50cnlBY2Nlc3NvclR5cGUqIG11dGFibGVfdmFsdWUoKSB7Ci0g
ICAgcmV0dXJuIGVudHJ5X2xpdGVfLm11dGFibGVfdmFsdWUoKTsKLSAgfQotCi0gIC8vIGltcGxl
bWVudHMgTWVzc2FnZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLQotICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSg6Omdvb2dsZTo6cHJvdG9i
dWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotICAgIHJldHVybiBlbnRyeV9saXRl
Xy5NZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oaW5wdXQpOwotICB9Ci0KLSAgaW50IEJ5dGVT
aXplKCkgY29uc3QgewotICAgIHJldHVybiBlbnRyeV9saXRlXy5CeXRlU2l6ZSgpOwotICB9Ci0K
LSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoOjpnb29nbGU6OnByb3RvYnVmOjppbzo6
Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAgIGVudHJ5X2xpdGVfLlNlcmlh
bGl6ZVdpdGhDYWNoZWRTaXplcyhvdXRwdXQpOwotICB9Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVm
Ojp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0IHsKLSAgICByZXR1cm4gZW50cnlfbGl0ZV8uU2VyaWFs
aXplV2l0aENhY2hlZFNpemVzVG9BcnJheShvdXRwdXQpOwotICB9Ci0KLSAgaW50IEdldENhY2hl
ZFNpemUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGVudHJ5X2xpdGVfLkdldENhY2hlZFNpemUoKTsK
LSAgfQotCi0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0IHsKLSAgICByZXR1cm4gZW50cnlf
bGl0ZV8uSXNJbml0aWFsaXplZCgpOwotICB9Ci0KLSAgTWVzc2FnZSogTmV3KCkgY29uc3Qgewot
ICAgIE1hcEVudHJ5KiBlbnRyeSA9IG5ldyBNYXBFbnRyeTsKLSAgICBlbnRyeS0+ZGVzY3JpcHRv
cl8gPSBkZXNjcmlwdG9yXzsKLSAgICBlbnRyeS0+cmVmbGVjdGlvbl8gPSByZWZsZWN0aW9uXzsK
LSAgICBlbnRyeS0+c2V0X2RlZmF1bHRfaW5zdGFuY2UoZGVmYXVsdF9pbnN0YW5jZV8pOwotICAg
IHJldHVybiBlbnRyeTsKLSAgfQotCi0gIE1lc3NhZ2UqIE5ldyhBcmVuYSogYXJlbmEpIGNvbnN0
IHsKLSAgICBNYXBFbnRyeSogZW50cnkgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxNYXBFbnRyeT4o
YXJlbmEpOwotICAgIGVudHJ5LT5kZXNjcmlwdG9yXyA9IGRlc2NyaXB0b3JfOwotICAgIGVudHJ5
LT5yZWZsZWN0aW9uXyA9IHJlZmxlY3Rpb25fOwotICAgIGVudHJ5LT5zZXRfZGVmYXVsdF9pbnN0
YW5jZShkZWZhdWx0X2luc3RhbmNlXyk7Ci0gICAgcmV0dXJuIGVudHJ5OwotICB9Ci0KLSAgaW50
IFNwYWNlVXNlZCgpIGNvbnN0IHsKLSAgICBpbnQgc2l6ZSA9IHNpemVvZihNYXBFbnRyeSk7Ci0g
ICAgc2l6ZSArPSBlbnRyeV9saXRlXy5TcGFjZVVzZWQoKTsKLSAgICByZXR1cm4gc2l6ZTsKLSAg
fQotCi0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBm
cm9tKSB7Ci0gICAgQ2xlYXIoKTsKLSAgICBNZXJnZUZyb20oZnJvbSk7Ci0gIH0KLQotICB2b2lk
IE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLSAg
ICBHT09HTEVfQ0hFQ0tfTkUoJmZyb20sIHRoaXMpOwotICAgIGNvbnN0IE1hcEVudHJ5KiBzb3Vy
Y2UgPSBkeW5hbWljX2Nhc3RfaWZfYXZhaWxhYmxlPGNvbnN0IE1hcEVudHJ5Kj4oJmZyb20pOwot
ICAgIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAgICAgUmVmbGVjdGlvbk9wczo6TWVyZ2UoZnJv
bSwgdGhpcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgICB9
Ci0gIH0KLQotICB2b2lkIENvcHlGcm9tKGNvbnN0IE1hcEVudHJ5JiBmcm9tKSB7Ci0gICAgQ2xl
YXIoKTsKLSAgICBNZXJnZUZyb20oZnJvbSk7Ci0gIH0KLQotICB2b2lkIE1lcmdlRnJvbShjb25z
dCBNYXBFbnRyeSYgZnJvbSkgewotICAgIGVudHJ5X2xpdGVfLk1lcmdlRnJvbShmcm9tLmVudHJ5
X2xpdGVfKTsKLSAgfQotCi0gIHZvaWQgQ2xlYXIoKSB7Ci0gICAgZW50cnlfbGl0ZV8uQ2xlYXIo
KTsKLSAgfQotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotICAgIGVudHJ5X2xp
dGVfLkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICB9Ci0KLSAgQXJlbmEqIEdldEFyZW5hKCkg
Y29uc3QgewotICAgIHJldHVybiBlbnRyeV9saXRlXy5HZXRBcmVuYSgpOwotICB9Ci0KLSAgLy8g
Q3JlYXRlIGRlZmF1bHQgTWFwRW50cnkgaW5zdGFuY2UgZm9yIGdpdmVuIGRlc2NyaXB0b3IuIERl
c2NyaXB0b3IgaGFzIHRvIGJlCi0gIC8vIGdpdmVuIHdoZW4gY3JlYXRpbmcgZGVmYXVsdCBNYXBF
bnRyeSBpbnN0YW5jZSBiZWNhdXNlIGRpZmZlcmVudCBtYXAgZmllbGQKLSAgLy8gbWF5IGhhdmUg
dGhlIHNhbWUgdHlwZSBhbmQgTWFwRW50cnkgY2xhc3MuIFRoZSBnaXZlbiBkZXNjcmlwdG9yIGlz
IG5lZWRlZAotICAvLyB0byBkaXN0aW5ndWlzaCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgTWFwRW50
cnkgY2xhc3MuCi0gIHN0YXRpYyBNYXBFbnRyeSogQ3JlYXRlRGVmYXVsdEluc3RhbmNlKGNvbnN0
IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgICBNYXBFbnRyeSogZW50cnkgPSBuZXcgTWFw
RW50cnk7Ci0gICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG5ldyBHZW5lcmF0ZWRN
ZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgICAgZGVzY3JpcHRvciwgZW50cnksIG9mZnNldHNfLAot
ICAgICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE1h
cEVudHJ5LCBlbnRyeV9saXRlXy5faGFzX2JpdHNfKSwKLSAgICAgICAgR09PR0xFX1BST1RPQlVG
X0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChNYXBFbnRyeSwgX3Vua25vd25fZmllbGRz
XyksIC0xLAotICAgICAgICBEZXNjcmlwdG9yUG9vbDo6Z2VuZXJhdGVkX3Bvb2woKSwKLSAgICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6Z2VuZXJhdGVkX2ZhY3Rvcnko
KSwKLSAgICAgICAgc2l6ZW9mKE1hcEVudHJ5KSwKLSAgICAgICAgR09PR0xFX1BST1RPQlVGX0dF
TkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChNYXBFbnRyeSwgX2ludGVybmFsX21ldGFkYXRh
XykpOwotICAgIGVudHJ5LT5kZXNjcmlwdG9yXyA9IGRlc2NyaXB0b3I7Ci0gICAgZW50cnktPnJl
ZmxlY3Rpb25fID0gcmVmbGVjdGlvbjsKLSAgICBlbnRyeS0+c2V0X2RlZmF1bHRfaW5zdGFuY2Uo
ZW50cnkpOwotICAgIGVudHJ5LT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgICBSZWdpc3Rl
ck1hcEVudHJ5RGVmYXVsdEluc3RhbmNlKGVudHJ5KTsKLSAgICByZXR1cm4gZW50cnk7Ci0gIH0K
LQotIHByaXZhdGU6Ci0gIE1hcEVudHJ5KCkKLSAgICAgIDogX2ludGVybmFsX21ldGFkYXRhXyhO
VUxMKSwgZGVmYXVsdF9pbnN0YW5jZV8oTlVMTCksIGVudHJ5X2xpdGVfKCkge30KLQotICBleHBs
aWNpdCBNYXBFbnRyeShBcmVuYSogYXJlbmEpCi0gICAgICA6IF9pbnRlcm5hbF9tZXRhZGF0YV8o
YXJlbmEpLAotICAgICAgICBkZWZhdWx0X2luc3RhbmNlXyhOVUxMKSwKLSAgICAgICAgZW50cnlf
bGl0ZV8oYXJlbmEpIHt9Ci0KLSAgaW5saW5lIEFyZW5hKiBHZXRBcmVuYU5vVmlydHVhbCgpIGNv
bnN0IHsKLSAgICByZXR1cm4gZW50cnlfbGl0ZV8uR2V0QXJlbmFOb1ZpcnR1YWwoKTsKLSAgfQot
Ci0gIHZvaWQgc2V0X2RlZmF1bHRfaW5zdGFuY2UoTWFwRW50cnkqIGRlZmF1bHRfaW5zdGFuY2Up
IHsKLSAgICBkZWZhdWx0X2luc3RhbmNlXyA9IGRlZmF1bHRfaW5zdGFuY2U7Ci0gICAgZW50cnlf
bGl0ZV8uc2V0X2RlZmF1bHRfaW5zdGFuY2UoJmRlZmF1bHRfaW5zdGFuY2UtPmVudHJ5X2xpdGVf
KTsKLSAgfQotCi0gIHN0YXRpYyBpbnQgb2Zmc2V0c19bMl07Ci0gIFVua25vd25GaWVsZFNldCBf
dW5rbm93bl9maWVsZHNfOwotICBJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9t
ZXRhZGF0YV87Ci0gIE1hcEVudHJ5KiBkZWZhdWx0X2luc3RhbmNlXzsKLSAgRW50cnlMaXRlVHlw
ZSBlbnRyeV9saXRlXzsKLQotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YTsKLSAgdHlwZWRlZiB2b2lkIEludGVybmFsQXJlbmFDb25zdHJ1Y3RhYmxlXzsKLSAgdHlwZWRl
ZiB2b2lkIERlc3RydWN0b3JTa2lwcGFibGVfOwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSywgdHlw
ZW5hbWUgViwgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrX3dpcmVfdHlwZSwKLSAgICAgICAg
ICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUsIGludCBkZWZhdWx0X2VudW0+Ci0gIGZyaWVu
ZCBjbGFzcyBpbnRlcm5hbDo6TWFwRmllbGQ7Ci0gIGZyaWVuZCBjbGFzcyBpbnRlcm5hbDo6R2Vu
ZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb247Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RS
VUNUT1JTKE1hcEVudHJ5KTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUsCi0gICAgICAg
ICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrVmFsdWVGaWVsZFR5cGUsIGludCBkZWZhdWx0
X2VudW1fdmFsdWU+Ci1pbnQgTWFwRW50cnk8S2V5LCBWYWx1ZSwga0tleUZpZWxkVHlwZSwga1Zh
bHVlRmllbGRUeXBlLAotICAgICAgICAgICAgIGRlZmF1bHRfZW51bV92YWx1ZT46Om9mZnNldHNf
WzJdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZT
RVQoTWFwRW50cnksIGVudHJ5X2xpdGVfLmtleV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5F
UkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTWFwRW50cnksIGVudHJ5X2xpdGVfLnZhbHVlXyks
Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9N
QVBfRU5UUllfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX2VudHJ5X2xp
dGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfZW50cnlfbGl0ZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3Y2RmMWI5Mzc5ZDFiY2JkZDAzNGVmYmZlNmQzYTZiNjY4MWE1YTY1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9tYXBfZW50cnlfbGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAxICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9Q
Uk9UT0JVRl9NQVBfRU5UUllfTElURV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX01BUF9F
TlRSWV9MSVRFX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF90eXBlX2hhbmRs
ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZV9pbmwuaD4K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotY2xhc3MgQXJlbmE7
Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrS2V5RmllbGRUeXBl
LAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga1ZhbHVlRmllbGRUeXBlLAot
ICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci1jbGFzcyBNYXBFbnRyeTsKLXRlbXBs
YXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLAotICAgICAgICAgIFdpcmVGb3JtYXRM
aXRlOjpGaWVsZFR5cGUga0tleUZpZWxkVHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6
RmllbGRUeXBlIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3Zh
bHVlPgotY2xhc3MgTWFwRmllbGRMaXRlOwotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAv
LyBuYW1lc3BhY2UgcHJvdG9idWYKLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBp
bnRlcm5hbCB7Ci0KLS8vIE1hcEVudHJ5TGl0ZSBpcyB1c2VkIHRvIGltcGxlbWVudCBwYXJzaW5n
IGFuZCBzZXJpYWxpemF0aW9uIG9mIG1hcCBmb3IgbGl0ZQotLy8gcnVudGltZS4KLXRlbXBsYXRl
IDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRl
OjpGaWVsZFR5cGUga0tleUZpZWxkVHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6Rmll
bGRUeXBlIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVl
PgotY2xhc3MgTWFwRW50cnlMaXRlIDogcHVibGljIE1lc3NhZ2VMaXRlIHsKLSAgLy8gUHJvdmlk
ZSB1dGlsaXRpZXMgdG8gcGFyc2Uvc2VyaWFsaXplIGtleS92YWx1ZS4gIFByb3ZpZGUgdXRpbGl0
aWVzIHRvCi0gIC8vIG1hbmlwdWxhdGUgaW50ZXJuYWwgc3RvcmVkIHR5cGUuCi0gIHR5cGVkZWYg
TWFwVHlwZUhhbmRsZXI8a0tleUZpZWxkVHlwZSwgS2V5PiBLZXlUeXBlSGFuZGxlcjsKLSAgdHlw
ZWRlZiBNYXBUeXBlSGFuZGxlcjxrVmFsdWVGaWVsZFR5cGUsIFZhbHVlPiBWYWx1ZVR5cGVIYW5k
bGVyOwotCi0gIC8vIERlZmluZSBpbnRlcm5hbCBtZW1vcnkgbGF5b3V0LiBTdHJpbmdzIGFuZCBt
ZXNzYWdlcyBhcmUgc3RvcmVkIGFzCi0gIC8vIHBvaW50ZXJzLCB3aGlsZSBvdGhlciB0eXBlcyBh
cmUgc3RvcmVkIGFzIHZhbHVlcy4KLSAgdHlwZWRlZiB0eXBlbmFtZSBLZXlUeXBlSGFuZGxlcjo6
VHlwZU9uTWVtb3J5IEtleU9uTWVtb3J5OwotICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHlwZUhh
bmRsZXI6OlR5cGVPbk1lbW9yeSBWYWx1ZU9uTWVtb3J5OwotCi0gIC8vIEVudW0gdHlwZSBjYW5u
b3QgYmUgdXNlZCBmb3IgTWFwVHlwZUhhbmRsZXI6OlJlYWQuIERlZmluZSBhIHR5cGUKLSAgLy8g
d2hpY2ggd2lsbCByZXBsYWNlIEVudW0gd2l0aCBpbnQuCi0gIHR5cGVkZWYgdHlwZW5hbWUgS2V5
VHlwZUhhbmRsZXI6Ok1hcEVudHJ5QWNjZXNzb3JUeXBlIEtleU1hcEVudHJ5QWNjZXNzb3JUeXBl
OwotICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHlwZUhhbmRsZXI6Ok1hcEVudHJ5QWNjZXNzb3JU
eXBlCi0gICAgICBWYWx1ZU1hcEVudHJ5QWNjZXNzb3JUeXBlOwotCi0gIC8vIENvbnN0YW50cyBm
b3IgZmllbGQgbnVtYmVyLgotICBzdGF0aWMgY29uc3QgaW50IGtLZXlGaWVsZE51bWJlciA9IDE7
Ci0gIHN0YXRpYyBjb25zdCBpbnQga1ZhbHVlRmllbGROdW1iZXIgPSAyOwotCi0gIC8vIENvbnN0
YW50cyBmb3IgZmllbGQgdGFnLgotICBzdGF0aWMgY29uc3QgdWludDgga0tleVRhZyA9IEdPT0dM
RV9QUk9UT0JVRl9XSVJFX0ZPUk1BVF9NQUtFX1RBRygKLSAgICAgIGtLZXlGaWVsZE51bWJlciwg
S2V5VHlwZUhhbmRsZXI6OmtXaXJlVHlwZSk7Ci0gIHN0YXRpYyBjb25zdCB1aW50OCBrVmFsdWVU
YWcgPSBHT09HTEVfUFJPVE9CVUZfV0lSRV9GT1JNQVRfTUFLRV9UQUcoCi0gICAgICBrVmFsdWVG
aWVsZE51bWJlciwgVmFsdWVUeXBlSGFuZGxlcjo6a1dpcmVUeXBlKTsKLSAgc3RhdGljIGNvbnN0
IGludCBrVGFnU2l6ZSA9IDE7Ci0KLSBwdWJsaWM6Ci0gIH5NYXBFbnRyeUxpdGUoKSB7Ci0gICAg
aWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgICAgIGlmIChHZXRBcmVuYU5vVmly
dHVhbCgpICE9IE5VTEwpIHJldHVybjsKLSAgICAgIEtleVR5cGVIYW5kbGVyOjpEZWxldGVOb0Fy
ZW5hKGtleV8pOwotICAgICAgVmFsdWVUeXBlSGFuZGxlcjo6RGVsZXRlTm9BcmVuYSh2YWx1ZV8p
OwotICAgIH0KLSAgfQotCi0gIC8vIGFjY2Vzc29ycyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICB2aXJ0dWFsIGlubGluZSBjb25zdCBL
ZXlNYXBFbnRyeUFjY2Vzc29yVHlwZSYga2V5KCkgY29uc3QgewotICAgIHJldHVybiBLZXlUeXBl
SGFuZGxlcjo6R2V0RXh0ZXJuYWxSZWZlcmVuY2Uoa2V5Xyk7Ci0gIH0KLSAgdmlydHVhbCBpbmxp
bmUgY29uc3QgVmFsdWVNYXBFbnRyeUFjY2Vzc29yVHlwZSYgdmFsdWUoKSBjb25zdCB7Ci0gICAg
R09PR0xFX0NIRUNLKGRlZmF1bHRfaW5zdGFuY2VfICE9IE5VTEwpOwotICAgIHJldHVybiBWYWx1
ZVR5cGVIYW5kbGVyOjpEZWZhdWx0SWZOb3RJbml0aWFsaXplZCh2YWx1ZV8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9pbnN0YW5j
ZV8tPnZhbHVlXyk7Ci0gIH0KLSAgaW5saW5lIEtleU1hcEVudHJ5QWNjZXNzb3JUeXBlKiBtdXRh
YmxlX2tleSgpIHsKLSAgICBzZXRfaGFzX2tleSgpOwotICAgIHJldHVybiBLZXlUeXBlSGFuZGxl
cjo6RW5zdXJlTXV0YWJsZSgma2V5XywgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gIH0KLSAgaW5s
aW5lIFZhbHVlTWFwRW50cnlBY2Nlc3NvclR5cGUqIG11dGFibGVfdmFsdWUoKSB7Ci0gICAgc2V0
X2hhc192YWx1ZSgpOwotICAgIHJldHVybiBWYWx1ZVR5cGVIYW5kbGVyOjpFbnN1cmVNdXRhYmxl
KCZ2YWx1ZV8sIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICB9Ci0KLSAgLy8gaW1wbGVtZW50cyBN
ZXNzYWdlTGl0ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0g
IC8vIE1hcEVudHJ5TGl0ZSBpcyBmb3IgaW1wbGVtZW50YXRpb24gb25seSBhbmQgdGhpcyBmdW5j
dGlvbiBpc24ndCBjYWxsZWQKLSAgLy8gYW55d2hlcmUuIEp1c3QgcHJvdmlkZSBhIGZha2UgaW1w
bGVtZW50YXRpb24gaGVyZSBmb3IgTWVzc2FnZUxpdGUuCi0gIHN0cmluZyBHZXRUeXBlTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICIiOyB9Ci0KLSAgdm9pZCBDaGVja1R5cGVBbmRNZXJnZUZyb20oY29u
c3QgTWVzc2FnZUxpdGUmIG90aGVyKSB7Ci0gICAgTWVyZ2VGcm9tKCo6Omdvb2dsZTo6cHJvdG9i
dWY6OmRvd25fY2FzdDxjb25zdCBNYXBFbnRyeUxpdGUqPigmb3RoZXIpKTsKLSAgfQotCi0gIGJv
b2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNv
ZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0gICAgdWludDMyIHRhZzsKLQotICAgIGZvciAoOzsp
IHsKLSAgICAgIC8vIDEpIGNvcnJ1cHRlZCBkYXRhOiByZXR1cm4gZmFsc2U7Ci0gICAgICAvLyAy
KSB1bmtub3duIGZpZWxkOiBza2lwIHdpdGhvdXQgcHV0dGluZyBpbnRvIHVua25vd24gZmllbGQg
c2V0OwotICAgICAgLy8gMykgdW5rbm93biBlbnVtIHZhbHVlOiBrZWVwIGl0IGluIHBhcnNpbmcu
IEluIHByb3RvMiwgY2FsbGVyIHNob3VsZAotICAgICAgLy8gY2hlY2sgdGhlIHZhbHVlIGFuZCBw
dXQgdGhpcyBlbnRyeSBpbnRvIGNvbnRhaW5pbmcgbWVzc2FnZSdzIHVua25vd24KLSAgICAgIC8v
IGZpZWxkIHNldCBpZiB0aGUgdmFsdWUgaXMgYW4gdW5rbm93biBlbnVtLiBJbiBwcm90bzMsIGNh
bGxlciBkb2Vzbid0Ci0gICAgICAvLyBuZWVkIHRvIGNhcmUgd2hldGhlciB0aGUgdmFsdWUgaXMg
dW5rbm93biBlbnVtOwotICAgICAgLy8gNCkgbWlzc2luZyBrZXkvdmFsdWU6IG1pc3NlZCBrZXkv
dmFsdWUgd2lsbCBoYXZlIGRlZmF1bHQgdmFsdWUuIGNhbGxlcgotICAgICAgLy8gc2hvdWxkIHRh
a2UgdGhpcyBlbnRyeSBhcyBpZiBrZXkvdmFsdWUgaXMgc2V0IHRvIGRlZmF1bHQgdmFsdWUuCi0g
ICAgICB0YWcgPSBpbnB1dC0+UmVhZFRhZygpOwotICAgICAgc3dpdGNoICh0YWcpIHsKLSAgICAg
ICAgY2FzZSBrS2V5VGFnOgotICAgICAgICAgIGlmICghS2V5VHlwZUhhbmRsZXI6OlJlYWQoaW5w
dXQsIG11dGFibGVfa2V5KCkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIHNldF9oYXNfa2V5KCk7Ci0gICAgICAgICAgaWYgKCFpbnB1dC0+RXhw
ZWN0VGFnKGtWYWx1ZVRhZykpIGJyZWFrOwotICAgICAgICAgIEdPT0dMRV9GQUxMVEhST1VHSF9J
TlRFTkRFRDsKLQotICAgICAgICBjYXNlIGtWYWx1ZVRhZzoKLSAgICAgICAgICBpZiAoIVZhbHVl
VHlwZUhhbmRsZXI6OlJlYWQoaW5wdXQsIG11dGFibGVfdmFsdWUoKSkpIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc2V0X2hhc192YWx1ZSgpOwot
ICAgICAgICAgIGlmIChpbnB1dC0+RXhwZWN0QXRFbmQoKSkgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBpZiAodGFnID09IDAgfHwK
LSAgICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAg
ICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICghV2lyZUZvcm1h
dExpdGU6OlNraXBGaWVsZChpbnB1dCwgdGFnKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0IHsKLSAg
ICBpbnQgc2l6ZSA9IDA7Ci0gICAgc2l6ZSArPSBoYXNfa2V5KCkgPyBrVGFnU2l6ZSArIEtleVR5
cGVIYW5kbGVyOjpCeXRlU2l6ZShrZXkoKSkgOiAwOwotICAgIHNpemUgKz0gaGFzX3ZhbHVlKCkg
PyBrVGFnU2l6ZSArIFZhbHVlVHlwZUhhbmRsZXI6OkJ5dGVTaXplKHZhbHVlKCkpIDogMDsKLSAg
ICByZXR1cm4gc2l6ZTsKLSAgfQotCi0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsK
LSAgICBLZXlUeXBlSGFuZGxlcjo6V3JpdGUoa0tleUZpZWxkTnVtYmVyLCBrZXkoKSwgb3V0cHV0
KTsKLSAgICBWYWx1ZVR5cGVIYW5kbGVyOjpXcml0ZShrVmFsdWVGaWVsZE51bWJlciwgdmFsdWUo
KSwgb3V0cHV0KTsKLSAgfQotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6
ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0
KSBjb25zdCB7Ci0gICAgb3V0cHV0ID0gS2V5VHlwZUhhbmRsZXI6OldyaXRlVG9BcnJheShrS2V5
RmllbGROdW1iZXIsIGtleSgpLCBvdXRwdXQpOwotICAgIG91dHB1dCA9IFZhbHVlVHlwZUhhbmRs
ZXI6OldyaXRlVG9BcnJheShrVmFsdWVGaWVsZE51bWJlciwgdmFsdWUoKSwgb3V0cHV0KTsKLSAg
ICByZXR1cm4gb3V0cHV0OwotICB9Ci0KLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7Ci0g
ICAgaW50IHNpemUgPSAwOwotICAgIHNpemUgKz0gaGFzX2tleSgpCi0gICAgICAgID8ga1RhZ1Np
emUgKyBLZXlUeXBlSGFuZGxlcjo6R2V0Q2FjaGVkU2l6ZShrZXkoKSkKLSAgICAgICAgOiAwOwot
ICAgIHNpemUgKz0gaGFzX3ZhbHVlKCkKLSAgICAgICAgPyBrVGFnU2l6ZSArIFZhbHVlVHlwZUhh
bmRsZXI6OkdldENhY2hlZFNpemUoCi0gICAgICAgICAgICB2YWx1ZSgpKQotICAgICAgICA6IDA7
Ci0gICAgcmV0dXJuIHNpemU7Ci0gIH0KLQotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdCB7
IHJldHVybiBWYWx1ZVR5cGVIYW5kbGVyOjpJc0luaXRpYWxpemVkKHZhbHVlXyk7IH0KLQotICBN
ZXNzYWdlTGl0ZSogTmV3KCkgY29uc3QgewotICAgIE1hcEVudHJ5TGl0ZSogZW50cnkgPSBuZXcg
TWFwRW50cnlMaXRlOwotICAgIGVudHJ5LT5kZWZhdWx0X2luc3RhbmNlXyA9IGRlZmF1bHRfaW5z
dGFuY2VfOwotICAgIHJldHVybiBlbnRyeTsKLSAgfQotCi0gIE1lc3NhZ2VMaXRlKiBOZXcoQXJl
bmEqIGFyZW5hKSBjb25zdCB7Ci0gICAgTWFwRW50cnlMaXRlKiBlbnRyeSA9IEFyZW5hOjpDcmVh
dGVNZXNzYWdlPE1hcEVudHJ5TGl0ZT4oYXJlbmEpOwotICAgIGVudHJ5LT5kZWZhdWx0X2luc3Rh
bmNlXyA9IGRlZmF1bHRfaW5zdGFuY2VfOwotICAgIHJldHVybiBlbnRyeTsKLSAgfQotCi0gIGlu
dCBTcGFjZVVzZWQoKSBjb25zdCB7Ci0gICAgaW50IHNpemUgPSBzaXplb2YoTWFwRW50cnlMaXRl
KTsKLSAgICBzaXplICs9IEtleVR5cGVIYW5kbGVyOjpTcGFjZVVzZWRJbk1hcEVudHJ5KGtleV8p
OwotICAgIHNpemUgKz0gVmFsdWVUeXBlSGFuZGxlcjo6U3BhY2VVc2VkSW5NYXBFbnRyeSh2YWx1
ZV8pOwotICAgIHJldHVybiBzaXplOwotICB9Ci0KLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgTWFw
RW50cnlMaXRlJiBmcm9tKSB7Ci0gICAgaWYgKGZyb20uX2hhc19iaXRzX1swXSkgewotICAgICAg
aWYgKGZyb20uaGFzX2tleSgpKSB7Ci0gICAgICAgIEtleVR5cGVIYW5kbGVyOjpFbnN1cmVNdXRh
YmxlKCZrZXlfLCBHZXRBcmVuYU5vVmlydHVhbCgpKTsKLSAgICAgICAgS2V5VHlwZUhhbmRsZXI6
Ok1lcmdlKGZyb20ua2V5KCksICZrZXlfLCBHZXRBcmVuYU5vVmlydHVhbCgpKTsKLSAgICAgICAg
c2V0X2hhc19rZXkoKTsKLSAgICAgIH0KLSAgICAgIGlmIChmcm9tLmhhc192YWx1ZSgpKSB7Ci0g
ICAgICAgIFZhbHVlVHlwZUhhbmRsZXI6OkVuc3VyZU11dGFibGUoJnZhbHVlXywgR2V0QXJlbmFO
b1ZpcnR1YWwoKSk7Ci0gICAgICAgIFZhbHVlVHlwZUhhbmRsZXI6Ok1lcmdlKGZyb20udmFsdWUo
KSwgJnZhbHVlXywgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gICAgICAgIHNldF9oYXNfdmFsdWUo
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICB2b2lkIENsZWFyKCkgewotICAgIEtleVR5cGVI
YW5kbGVyOjpDbGVhcigma2V5XywgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gICAgVmFsdWVUeXBl
SGFuZGxlcjo6Q2xlYXJNYXliZUJ5RGVmYXVsdEVudW0oCi0gICAgICAgICZ2YWx1ZV8sIEdldEFy
ZW5hTm9WaXJ0dWFsKCksIGRlZmF1bHRfZW51bV92YWx1ZSk7Ci0gICAgY2xlYXJfaGFzX2tleSgp
OwotICAgIGNsZWFyX2hhc192YWx1ZSgpOwotICB9Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5z
dGFuY2UoKSB7Ci0gICAgS2V5VHlwZUhhbmRsZXI6OkFzc2lnbkRlZmF1bHRWYWx1ZSgma2V5Xyk7
Ci0gICAgVmFsdWVUeXBlSGFuZGxlcjo6QXNzaWduRGVmYXVsdFZhbHVlKCZ2YWx1ZV8pOwotICB9
Ci0KLSAgQXJlbmEqIEdldEFyZW5hKCkgY29uc3QgewotICAgIHJldHVybiBHZXRBcmVuYU5vVmly
dHVhbCgpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgTWFwRW50cnlMaXRlIGZvciBnaXZlbiBrZXkg
YW5kIHZhbHVlIGZyb20gZ29vZ2xlOjpwcm90b2J1Zjo6TWFwIGluCi0gIC8vIHNlcmlhbGl6YXRp
b24uIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiB2YWx1ZSBpcyBlbnVtLiBFbnVt
IGlzCi0gIC8vIHRyZWF0ZWQgZGlmZmVyZW50bHkgYmVjYXVzZSBpdHMgdHlwZSBpbiBNYXBFbnRy
eSBpcyBpbnQgYW5kIGl0cyB0eXBlIGluCi0gIC8vIGdvb2dsZTo6cHJvdG9idWY6Ok1hcCBpcyBl
bnVtLiBXZSBjYW5ub3QgY3JlYXRlIGEgcmVmZXJlbmNlIHRvIGludCBmcm9tIGFuIGVudW0uCi0g
IHN0YXRpYyBNYXBFbnRyeUxpdGUqIEVudW1XcmFwKGNvbnN0IEtleSYga2V5LCBjb25zdCBWYWx1
ZSB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJlbmEqIGFyZW5hKSB7
Ci0gICAgcmV0dXJuIEFyZW5hOjpDcmVhdGVNZXNzYWdlPE1hcEVudW1FbnRyeVdyYXBwZXI8Ci0g
ICAgICAgIEtleSwgVmFsdWUsIGtLZXlGaWVsZFR5cGUsIGtWYWx1ZUZpZWxkVHlwZSwgZGVmYXVs
dF9lbnVtX3ZhbHVlPiA+KAotICAgICAgICBhcmVuYSwga2V5LCB2YWx1ZSk7Ci0gIH0KLQotICAv
LyBMaWtlIGFib3ZlLCBidXQgZm9yIGFsbCB0aGUgb3RoZXIgdHlwZXMuIFRoaXMgYXZvaWRzIHZh
bHVlIGNvcHkgdG8gY3JlYXRlCi0gIC8vIE1hcEVudHJ5TGl0ZSBmcm9tIGdvb2dsZTo6cHJvdG9i
dWY6Ok1hcCBpbiBzZXJpYWxpemF0aW9uLgotICBzdGF0aWMgTWFwRW50cnlMaXRlKiBXcmFwKGNv
bnN0IEtleSYga2V5LCBjb25zdCBWYWx1ZSYgdmFsdWUsIEFyZW5hKiBhcmVuYSkgewotICAgIHJl
dHVybiBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxNYXBFbnRyeVdyYXBwZXI8S2V5LCBWYWx1ZSwga0tl
eUZpZWxkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHRfZW51bV92YWx1ZT4gPigKLSAgICAgICAgYXJlbmEsIGtleSwg
dmFsdWUpOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZvaWQgc2V0X2hhc19rZXkoKSB7IF9oYXNf
Yml0c19bMF0gfD0gMHgwMDAwMDAwMXU7IH0KLSAgYm9vbCBoYXNfa2V5KCkgY29uc3QgeyByZXR1
cm4gKF9oYXNfYml0c19bMF0gJiAweDAwMDAwMDAxdSkgIT0gMDsgfQotICB2b2lkIGNsZWFyX2hh
c19rZXkoKSB7IF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAwMDF1OyB9Ci0gIHZvaWQgc2V0X2hh
c192YWx1ZSgpIHsgX2hhc19iaXRzX1swXSB8PSAweDAwMDAwMDAydTsgfQotICBib29sIGhhc192
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIChfaGFzX2JpdHNfWzBdICYgMHgwMDAwMDAwMnUpICE9IDA7
IH0KLSAgdm9pZCBjbGVhcl9oYXNfdmFsdWUoKSB7IF9oYXNfYml0c19bMF0gJj0gfjB4MDAwMDAw
MDJ1OyB9Ci0KLSBwcml2YXRlOgotICAvLyBTZXJpYWxpemluZyBhIGdlbmVyYXRlZCBtZXNzYWdl
IGNvbnRhaW5pbmcgbWFwIGZpZWxkIGludm9sdmVzIHNlcmlhbGl6aW5nCi0gIC8vIGtleS12YWx1
ZSBwYWlycyBmcm9tIGdvb2dsZTo6cHJvdG9idWY6Ok1hcC4gVGhlIHdpcmUgZm9ybWF0IG9mIGVh
Y2gga2V5LXZhbHVlIHBhaXIKLSAgLy8gYWZ0ZXIgc2VyaWFsaXphdGlvbiBzaG91bGQgYmUgdGhl
IHNhbWUgYXMgdGhhdCBvZiBhIE1hcEVudHJ5IG1lc3NhZ2UKLSAgLy8gY29udGFpbmluZyB0aGUg
c2FtZSBrZXkgYW5kIHZhbHVlIGluc2lkZSBpdC4gIEhvd2V2ZXIsIGdvb2dsZTo6cHJvdG9idWY6
Ok1hcCBkb2Vzbid0Ci0gIC8vIHN0b3JlIGtleSBhbmQgdmFsdWUgYXMgTWFwRW50cnkgbWVzc2Fn
ZSwgd2hpY2ggZGlzYWJsZXMgdXMgdG8gdXNlIGV4aXN0aW5nCi0gIC8vIGNvZGUgdG8gc2VyaWFs
aXplIG1lc3NhZ2UuIEluIG9yZGVyIHRvIHVzZSBleGlzdGluZyBjb2RlIHRvIHNlcmlhbGl6ZQot
ICAvLyBtZXNzYWdlLCB3ZSBuZWVkIHRvIGNvbnN0cnVjdCBhIE1hcEVudHJ5IGZyb20ga2V5LXZh
bHVlIHBhaXIuIEJ1dCBpdAotICAvLyBpbnZvbHZlcyBjb3B5IG9mIGtleSBhbmQgdmFsdWUgdG8g
Y29uc3RydWN0IGEgTWFwRW50cnkuIEluIG9yZGVyIHRvIGF2b2lkCi0gIC8vIHRoaXMgY29weSBp
biBjb25zdHJ1Y3RpbmcgYSBNYXBFbnRyeSwgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGNsYXNzIHdo
aWNoCi0gIC8vIG9ubHkgdGFrZXMgcmVmZXJlbmNlcyBvZiBnaXZlbiBrZXkgYW5kIHZhbHVlLgot
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSywgdHlwZW5hbWUgViwgV2lyZUZvcm1hdExpdGU6OkZpZWxk
VHlwZSBrX3dpcmVfdHlwZSwKLSAgICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUg
dl93aXJlX3R5cGUsIGludCBkZWZhdWx0X2VudW0+Ci0gIGNsYXNzIE1hcEVudHJ5V3JhcHBlcgot
ICAgICAgOiBwdWJsaWMgTWFwRW50cnlMaXRlPEssIFYsIGtfd2lyZV90eXBlLCB2X3dpcmVfdHlw
ZSwgZGVmYXVsdF9lbnVtPiB7Ci0gICAgdHlwZWRlZiBNYXBFbnRyeUxpdGU8SywgViwga193aXJl
X3R5cGUsIHZfd2lyZV90eXBlLCBkZWZhdWx0X2VudW0+IEJhc2U7Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBCYXNlOjpLZXlNYXBFbnRyeUFjY2Vzc29yVHlwZSBLZXlNYXBFbnRyeUFjY2Vzc29yVHlw
ZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEJhc2U6OlZhbHVlTWFwRW50cnlBY2Nlc3NvclR5cGUg
VmFsdWVNYXBFbnRyeUFjY2Vzc29yVHlwZTsKLQotICAgcHVibGljOgotICAgIE1hcEVudHJ5V3Jh
cHBlcihBcmVuYSogYXJlbmEsIGNvbnN0IEsmIGtleSwgY29uc3QgViYgdmFsdWUpCi0gICAgICAg
IDogTWFwRW50cnlMaXRlPEssIFYsIGtfd2lyZV90eXBlLCB2X3dpcmVfdHlwZSwgZGVmYXVsdF9l
bnVtPihhcmVuYSksCi0gICAgICAgICAga2V5XyhrZXkpLAotICAgICAgICAgIHZhbHVlXyh2YWx1
ZSkgewotICAgICAgQmFzZTo6c2V0X2hhc19rZXkoKTsKLSAgICAgIEJhc2U6OnNldF9oYXNfdmFs
dWUoKTsKLSAgICB9Ci0gICAgaW5saW5lIGNvbnN0IEtleU1hcEVudHJ5QWNjZXNzb3JUeXBlJiBr
ZXkoKSBjb25zdCB7IHJldHVybiBrZXlfOyB9Ci0gICAgaW5saW5lIGNvbnN0IFZhbHVlTWFwRW50
cnlBY2Nlc3NvclR5cGUmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfOyB9Ci0KLSAgIHBy
aXZhdGU6Ci0gICAgY29uc3QgS2V5JiBrZXlfOwotICAgIGNvbnN0IFZhbHVlJiB2YWx1ZV87Ci0K
LSAgICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTsKLSAgICB0eXBlZGVm
IHZvaWQgSW50ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfOwotICAgIHR5cGVkZWYgdm9pZCBEZXN0
cnVjdG9yU2tpcHBhYmxlXzsKLSAgfTsKLQotICAvLyBMaWtlIGFib3ZlLCBidXQgZm9yIGVudW0g
dmFsdWUgb25seSwgd2hpY2ggc3RvcmVzIHZhbHVlIGluc3RlYWQgb2YKLSAgLy8gcmVmZXJlbmNl
IG9mIHZhbHVlIGZpZWxkIGluc2lkZS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgdHlwZSBv
ZiB2YWx1ZQotICAvLyBmaWVsZCBpbiBjb25zdHJ1Y3RvciBpcyBhbiBlbnVtLCB3aGlsZSB3ZSBu
ZWVkIHRvIHN0b3JlIGl0IGFzIGFuIGludC4gSWYgd2UKLSAgLy8gaW5pdGlhbGl6ZSBhIHJlZmVy
ZW5jZSB0byBpbnQgd2l0aCBhIHJlZmVyZW5jZSB0byBlbnVtLCBjb21waWxlciB3aWxsCi0gIC8v
IGdlbmVyYXRlIGEgdGVtcG9yYXJ5IGludCBmcm9tIGVudW0gYW5kIGluaXRpYWxpemUgdGhlIHJl
ZmVyZW5jZSB0byBpbnQgd2l0aAotICAvLyB0aGUgdGVtcG9yYXJ5LgotICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSywgdHlwZW5hbWUgViwgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrX3dpcmVfdHlw
ZSwKLSAgICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUgdl93aXJlX3R5cGUsIGlu
dCBkZWZhdWx0X2VudW0+Ci0gIGNsYXNzIE1hcEVudW1FbnRyeVdyYXBwZXIKLSAgICAgIDogcHVi
bGljIE1hcEVudHJ5TGl0ZTxLLCBWLCBrX3dpcmVfdHlwZSwgdl93aXJlX3R5cGUsIGRlZmF1bHRf
ZW51bT4gewotICAgIHR5cGVkZWYgTWFwRW50cnlMaXRlPEssIFYsIGtfd2lyZV90eXBlLCB2X3dp
cmVfdHlwZSwgZGVmYXVsdF9lbnVtPiBCYXNlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFzZTo6
S2V5TWFwRW50cnlBY2Nlc3NvclR5cGUgS2V5TWFwRW50cnlBY2Nlc3NvclR5cGU7Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBCYXNlOjpWYWx1ZU1hcEVudHJ5QWNjZXNzb3JUeXBlIFZhbHVlTWFwRW50
cnlBY2Nlc3NvclR5cGU7Ci0KLSAgIHB1YmxpYzoKLSAgICBNYXBFbnVtRW50cnlXcmFwcGVyKEFy
ZW5hKiBhcmVuYSwgY29uc3QgSyYga2V5LCBjb25zdCBWJiB2YWx1ZSkKLSAgICAgICAgOiBNYXBF
bnRyeUxpdGU8SywgViwga193aXJlX3R5cGUsIHZfd2lyZV90eXBlLCBkZWZhdWx0X2VudW0+KGFy
ZW5hKSwKLSAgICAgICAgICBrZXlfKGtleSksCi0gICAgICAgICAgdmFsdWVfKHZhbHVlKSB7Ci0g
ICAgICBCYXNlOjpzZXRfaGFzX2tleSgpOwotICAgICAgQmFzZTo6c2V0X2hhc192YWx1ZSgpOwot
ICAgIH0KLSAgICBpbmxpbmUgY29uc3QgS2V5TWFwRW50cnlBY2Nlc3NvclR5cGUmIGtleSgpIGNv
bnN0IHsgcmV0dXJuIGtleV87IH0KLSAgICBpbmxpbmUgY29uc3QgVmFsdWVNYXBFbnRyeUFjY2Vz
c29yVHlwZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWx1ZV87IH0KLQotICAgcHJpdmF0ZToK
LSAgICBjb25zdCBLZXlNYXBFbnRyeUFjY2Vzc29yVHlwZSYga2V5XzsKLSAgICBjb25zdCBWYWx1
ZU1hcEVudHJ5QWNjZXNzb3JUeXBlIHZhbHVlXzsKLQotICAgIGZyaWVuZCBjbGFzcyBnb29nbGU6
OnByb3RvYnVmOjpBcmVuYTsKLSAgICB0eXBlZGVmIHZvaWQgRGVzdHJ1Y3RvclNraXBwYWJsZV87
Ci0gIH07Ci0KLSAgTWFwRW50cnlMaXRlKCkgOiBkZWZhdWx0X2luc3RhbmNlXyhOVUxMKSwgYXJl
bmFfKE5VTEwpIHsKLSAgICBLZXlUeXBlSGFuZGxlcjo6SW5pdGlhbGl6ZSgma2V5XywgTlVMTCk7
Ci0gICAgVmFsdWVUeXBlSGFuZGxlcjo6SW5pdGlhbGl6ZU1heWJlQnlEZWZhdWx0RW51bSgKLSAg
ICAgICAgJnZhbHVlXywgZGVmYXVsdF9lbnVtX3ZhbHVlLCBOVUxMKTsKLSAgICBfaGFzX2JpdHNf
WzBdID0gMDsKLSAgfQotCi0gIGV4cGxpY2l0IE1hcEVudHJ5TGl0ZShBcmVuYSogYXJlbmEpCi0g
ICAgICA6IGRlZmF1bHRfaW5zdGFuY2VfKE5VTEwpLCBhcmVuYV8oYXJlbmEpIHsKLSAgICBLZXlU
eXBlSGFuZGxlcjo6SW5pdGlhbGl6ZSgma2V5XywgYXJlbmEpOwotICAgIFZhbHVlVHlwZUhhbmRs
ZXI6OkluaXRpYWxpemVNYXliZUJ5RGVmYXVsdEVudW0oCi0gICAgICAgICZ2YWx1ZV8sIGRlZmF1
bHRfZW51bV92YWx1ZSwgYXJlbmEpOwotICAgIF9oYXNfYml0c19bMF0gPSAwOwotICB9Ci0KLSAg
aW5saW5lIEFyZW5hKiBHZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gYXJl
bmFfOwotICB9Ci0KLSAgdm9pZCBzZXRfZGVmYXVsdF9pbnN0YW5jZShNYXBFbnRyeUxpdGUqIGRl
ZmF1bHRfaW5zdGFuY2UpIHsKLSAgICBkZWZhdWx0X2luc3RhbmNlXyA9IGRlZmF1bHRfaW5zdGFu
Y2U7Ci0gIH0KLQotICBNYXBFbnRyeUxpdGUqIGRlZmF1bHRfaW5zdGFuY2VfOwotCi0gIEtleU9u
TWVtb3J5IGtleV87Ci0gIFZhbHVlT25NZW1vcnkgdmFsdWVfOwotICBBcmVuYSogYXJlbmFfOwot
ICB1aW50MzIgX2hhc19iaXRzX1sxXTsKLQotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYTsKLSAgdHlwZWRlZiB2b2lkIEludGVybmFsQXJlbmFDb25zdHJ1Y3RhYmxlXzsK
LSAgdHlwZWRlZiB2b2lkIERlc3RydWN0b3JTa2lwcGFibGVfOwotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgSywgdHlwZW5hbWUgViwgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSwKLSAgICAgICAgICAg
IFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUsIGludD4KLSAgZnJpZW5kIGNsYXNzIGludGVybmFs
OjpNYXBFbnRyeTsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEssIHR5cGVuYW1lIFYsIFdpcmVGb3Jt
YXRMaXRlOjpGaWVsZFR5cGUsCi0gICAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBl
LCBpbnQ+Ci0gIGZyaWVuZCBjbGFzcyBpbnRlcm5hbDo6TWFwRmllbGRMaXRlOwotCi0gIEdPT0dM
RV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhNYXBFbnRyeUxpdGUpOwotfTsKLQotfSAgLy8g
bmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFt
ZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfTUFQX0VOVFJZX0xJVEVf
SF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL21hcF9maWVsZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDlmOTE4MTgxZmNjOTY4ZTQ2MjY2ZWVjMzc5OWMwYmE0YWEwZWM1NS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX2Zp
ZWxkLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDcxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZC5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfaW5sLmg+Ci0KLSNpbmNsdWRl
IDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5h
bWVzcGFjZSBpbnRlcm5hbCB7Ci0KLVByb3RvYnVmT25jZVR5cGUgbWFwX2VudHJ5X2RlZmF1bHRf
aW5zdGFuY2VzX29uY2VfOwotTXV0ZXgqIG1hcF9lbnRyeV9kZWZhdWx0X2luc3RhbmNlc19tdXRl
eF87Ci12ZWN0b3I8TWVzc2FnZUxpdGUqPiogbWFwX2VudHJ5X2RlZmF1bHRfaW5zdGFuY2VzXzsK
LQotdm9pZCBEZWxldGVNYXBFbnRyeURlZmF1bHRJbnN0YW5jZXMoKSB7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgbWFwX2VudHJ5X2RlZmF1bHRfaW5zdGFuY2VzXy0+c2l6ZSgpOyArK2kpIHsKLSAg
ICBkZWxldGUgbWFwX2VudHJ5X2RlZmF1bHRfaW5zdGFuY2VzXy0+YXQoaSk7Ci0gIH0KLSAgZGVs
ZXRlIG1hcF9lbnRyeV9kZWZhdWx0X2luc3RhbmNlc19tdXRleF87Ci0gIGRlbGV0ZSBtYXBfZW50
cnlfZGVmYXVsdF9pbnN0YW5jZXNfOwotfQotCi12b2lkIEluaXRNYXBFbnRyeURlZmF1bHRJbnN0
YW5jZXMoKSB7Ci0gIG1hcF9lbnRyeV9kZWZhdWx0X2luc3RhbmNlc19tdXRleF8gPSBuZXcgTXV0
ZXgoKTsKLSAgbWFwX2VudHJ5X2RlZmF1bHRfaW5zdGFuY2VzXyA9IG5ldyB2ZWN0b3I8TWVzc2Fn
ZUxpdGUqPigpOwotICBPblNodXRkb3duKCZEZWxldGVNYXBFbnRyeURlZmF1bHRJbnN0YW5jZXMp
OwotfQotCi12b2lkIFJlZ2lzdGVyTWFwRW50cnlEZWZhdWx0SW5zdGFuY2UoTWVzc2FnZUxpdGUq
IGRlZmF1bHRfaW5zdGFuY2UpIHsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpHb29nbGVPbmNlSW5p
dCgmbWFwX2VudHJ5X2RlZmF1bHRfaW5zdGFuY2VzX29uY2VfLAotICAgICAgICAgICAgICAgICAm
SW5pdE1hcEVudHJ5RGVmYXVsdEluc3RhbmNlcyk7Ci0gIE11dGV4TG9jayBsb2NrKG1hcF9lbnRy
eV9kZWZhdWx0X2luc3RhbmNlc19tdXRleF8pOwotICBtYXBfZW50cnlfZGVmYXVsdF9pbnN0YW5j
ZXNfLT5wdXNoX2JhY2soZGVmYXVsdF9pbnN0YW5jZSk7Ci19Ci0KLU1hcEZpZWxkQmFzZTo6fk1h
cEZpZWxkQmFzZSgpIHsKLSAgaWYgKHJlcGVhdGVkX2ZpZWxkXyAhPSBOVUxMICYmIGFyZW5hXyA9
PSBOVUxMKSBkZWxldGUgcmVwZWF0ZWRfZmllbGRfOwotfQotCi1jb25zdCBSZXBlYXRlZFB0ckZp
ZWxkQmFzZSYgTWFwRmllbGRCYXNlOjpHZXRSZXBlYXRlZEZpZWxkKCkgY29uc3QgewotICBTeW5j
UmVwZWF0ZWRGaWVsZFdpdGhNYXAoKTsKLSAgcmV0dXJuICpyZXBlYXRlZF9maWVsZF87Ci19Ci0K
LVJlcGVhdGVkUHRyRmllbGRCYXNlKiBNYXBGaWVsZEJhc2U6Ok11dGFibGVSZXBlYXRlZEZpZWxk
KCkgewotICBTeW5jUmVwZWF0ZWRGaWVsZFdpdGhNYXAoKTsKLSAgU2V0UmVwZWF0ZWREaXJ0eSgp
OwotICByZXR1cm4gcmVwZWF0ZWRfZmllbGRfOwotfQotCi1pbnQgTWFwRmllbGRCYXNlOjpTcGFj
ZVVzZWRFeGNsdWRpbmdTZWxmKCkgY29uc3QgewotICBtdXRleF8uTG9jaygpOwotICBpbnQgc2l6
ZSA9IFNwYWNlVXNlZEV4Y2x1ZGluZ1NlbGZOb0xvY2soKTsKLSAgbXV0ZXhfLlVubG9jaygpOwot
ICByZXR1cm4gc2l6ZTsKLX0KLQotaW50IE1hcEZpZWxkQmFzZTo6U3BhY2VVc2VkRXhjbHVkaW5n
U2VsZk5vTG9jaygpIGNvbnN0IHsKLSAgaWYgKHJlcGVhdGVkX2ZpZWxkXyAhPSBOVUxMKSB7Ci0g
ICAgcmV0dXJuIHJlcGVhdGVkX2ZpZWxkXy0+U3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpOwotICB9
IGVsc2UgewotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLXZvaWQgTWFwRmllbGRCYXNlOjpJbml0
TWV0YWRhdGFPbmNlKCkgY29uc3QgewotICBHT09HTEVfQ0hFQ0soZW50cnlfZGVzY3JpcHRvcl8g
IT0gTlVMTCk7Ci0gIEdPT0dMRV9DSEVDSyhhc3NpZ25fZGVzY3JpcHRvcl9jYWxsYmFja18gIT0g
TlVMTCk7Ci0gICgqYXNzaWduX2Rlc2NyaXB0b3JfY2FsbGJhY2tfKSgpOwotfQotCi12b2lkIE1h
cEZpZWxkQmFzZTo6U2V0TWFwRGlydHkoKSB7IHN0YXRlXyA9IFNUQVRFX01PRElGSUVEX01BUDsg
fQotCi12b2lkIE1hcEZpZWxkQmFzZTo6U2V0UmVwZWF0ZWREaXJ0eSgpIHsgc3RhdGVfID0gU1RB
VEVfTU9ESUZJRURfUkVQRUFURUQ7IH0KLQotdm9pZCogTWFwRmllbGRCYXNlOjpNdXRhYmxlUmVw
ZWF0ZWRQdHJGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIHJlcGVhdGVkX2ZpZWxkXzsgfQotCi12b2lk
IE1hcEZpZWxkQmFzZTo6U3luY1JlcGVhdGVkRmllbGRXaXRoTWFwKCkgY29uc3QgewotICAvLyAi
QWNxdWlyZSIgaW5zdXJlcyB0aGUgb3BlcmF0aW9uIGFmdGVyIFN5bmNSZXBlYXRlZEZpZWxkV2l0
aE1hcCB3b24ndCBnZXQKLSAgLy8gZXhlY3V0ZWQgYmVmb3JlIHN0YXRlXyBpcyBjaGVja2VkLgot
ICBBdG9taWMzMiBzdGF0ZSA9IGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBY3F1aXJlX0xv
YWQoJnN0YXRlXyk7Ci0gIGlmIChzdGF0ZSA9PSBTVEFURV9NT0RJRklFRF9NQVApIHsKLSAgICBt
dXRleF8uTG9jaygpOwotICAgIC8vIERvdWJsZSBjaGVjayBzdGF0ZSwgYmVjYXVzZSBhbm90aGVy
IHRocmVhZCBtYXkgaGF2ZSBzZWVuIHRoZSBzYW1lIHN0YXRlCi0gICAgLy8gYW5kIGRvbmUgdGhl
IHN5bmNocm9uaXphdGlvbiBiZWZvcmUgdGhlIGN1cnJlbnQgdGhyZWFkLgotICAgIGlmIChzdGF0
ZV8gPT0gU1RBVEVfTU9ESUZJRURfTUFQKSB7Ci0gICAgICBTeW5jUmVwZWF0ZWRGaWVsZFdpdGhN
YXBOb0xvY2soKTsKLSAgICAgIC8vICJSZWxlYXNlIiBpbnN1cmVzIHN0YXRlXyBjYW4gb25seSBi
ZSBjaGFuZ2VkICJhZnRlciIKLSAgICAgIC8vIFN5bmNSZXBlYXRlZEZpZWxkV2l0aE1hcE5vTG9j
ayBpcyBmaW5pc2hlZC4KLSAgICAgIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWxlYXNl
X1N0b3JlKCZzdGF0ZV8sIENMRUFOKTsKLSAgICB9Ci0gICAgbXV0ZXhfLlVubG9jaygpOwotICB9
Ci19Ci0KLXZvaWQgTWFwRmllbGRCYXNlOjpTeW5jUmVwZWF0ZWRGaWVsZFdpdGhNYXBOb0xvY2so
KSBjb25zdCB7Ci0gIGlmIChyZXBlYXRlZF9maWVsZF8gPT0gTlVMTCkgewotICAgIHJlcGVhdGVk
X2ZpZWxkXyA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4g
PihhcmVuYV8pOwotICB9Ci19Ci0KLXZvaWQgTWFwRmllbGRCYXNlOjpTeW5jTWFwV2l0aFJlcGVh
dGVkRmllbGQoKSBjb25zdCB7Ci0gIC8vICJBY3F1aXJlIiBpbnN1cmVzIHRoZSBvcGVyYXRpb24g
YWZ0ZXIgU3luY01hcFdpdGhSZXBlYXRlZEZpZWxkIHdvbid0IGdldAotICAvLyBleGVjdXRlZCBi
ZWZvcmUgc3RhdGVfIGlzIGNoZWNrZWQuCi0gIEF0b21pYzMyIHN0YXRlID0gZ29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkFjcXVpcmVfTG9hZCgmc3RhdGVfKTsKLSAgaWYgKHN0YXRlID09IFNU
QVRFX01PRElGSUVEX1JFUEVBVEVEKSB7Ci0gICAgbXV0ZXhfLkxvY2soKTsKLSAgICAvLyBEb3Vi
bGUgY2hlY2sgc3RhdGUsIGJlY2F1c2UgYW5vdGhlciB0aHJlYWQgbWF5IGhhdmUgc2VlbiB0aGUg
c2FtZSBzdGF0ZQotICAgIC8vIGFuZCBkb25lIHRoZSBzeW5jaHJvbml6YXRpb24gYmVmb3JlIHRo
ZSBjdXJyZW50IHRocmVhZC4KLSAgICBpZiAoc3RhdGVfID09IFNUQVRFX01PRElGSUVEX1JFUEVB
VEVEKSB7Ci0gICAgICBTeW5jTWFwV2l0aFJlcGVhdGVkRmllbGROb0xvY2soKTsKLSAgICAgIC8v
ICJSZWxlYXNlIiBpbnN1cmVzIHN0YXRlXyBjYW4gb25seSBiZSBjaGFuZ2VkICJhZnRlciIKLSAg
ICAgIC8vIFN5bmNSZXBlYXRlZEZpZWxkV2l0aE1hcE5vTG9jayBpcyBmaW5pc2hlZC4KLSAgICAg
IGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWxlYXNlX1N0b3JlKCZzdGF0ZV8sIENMRUFO
KTsKLSAgICB9Ci0gICAgbXV0ZXhfLlVubG9jaygpOwotICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLUR5bmFtaWNNYXBGaWVsZC0tLS0tLS0tLS0tLS0tLS0tLQotRHluYW1pY01hcEZpZWxk
OjpEeW5hbWljTWFwRmllbGQoY29uc3QgTWVzc2FnZSogZGVmYXVsdF9lbnRyeSkKLSAgICA6IGRl
ZmF1bHRfZW50cnlfKGRlZmF1bHRfZW50cnkpIHsKLX0KLQotRHluYW1pY01hcEZpZWxkOjpEeW5h
bWljTWFwRmllbGQoY29uc3QgTWVzc2FnZSogZGVmYXVsdF9lbnRyeSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZW5hKiBhcmVuYSkKLSAgICA6IFR5cGVEZWZpbmVkTWFwRmll
bGRCYXNlPE1hcEtleSwgTWFwVmFsdWVSZWY+KGFyZW5hKSwKLSAgICAgIGRlZmF1bHRfZW50cnlf
KGRlZmF1bHRfZW50cnkpIHsKLX0KLQotRHluYW1pY01hcEZpZWxkOjp+RHluYW1pY01hcEZpZWxk
KCkgewotICAvLyBEeW5hbWljTWFwRmllbGQgb3ducyBtYXAgdmFsdWVzLiBOZWVkIHRvIGRlbGV0
ZSB0aGVtIGJlZm9yZSBjbGVhcmluZwotICAvLyB0aGUgbWFwLgotICBmb3IgKE1hcDxNYXBLZXks
IE1hcFZhbHVlUmVmPjo6aXRlcmF0b3IgaXRlciA9IG1hcF8uYmVnaW4oKTsKLSAgICAgICBpdGVy
ICE9IG1hcF8uZW5kKCk7ICsraXRlcikgewotICAgIGl0ZXItPnNlY29uZC5EZWxldGVEYXRhKCk7
Ci0gIH0KLSAgbWFwXy5jbGVhcigpOwotfQotCi1pbnQgRHluYW1pY01hcEZpZWxkOjpzaXplKCkg
Y29uc3QgewotICByZXR1cm4gR2V0TWFwKCkuc2l6ZSgpOwotfQotCi1ib29sIER5bmFtaWNNYXBG
aWVsZDo6Q29udGFpbnNNYXBLZXkoCi0gICAgY29uc3QgTWFwS2V5JiBtYXBfa2V5KSBjb25zdCB7
Ci0gIGNvbnN0IE1hcDxNYXBLZXksIE1hcFZhbHVlUmVmPiYgbWFwID0gR2V0TWFwKCk7Ci0gIE1h
cDxNYXBLZXksIE1hcFZhbHVlUmVmPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hcC5maW5kKG1h
cF9rZXkpOwotICByZXR1cm4gaXRlciAhPSBtYXAuZW5kKCk7Ci19Ci0KLWJvb2wgRHluYW1pY01h
cEZpZWxkOjpJbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAgIGNvbnN0IE1hcEtleSYgbWFwX2tl
eSwgTWFwVmFsdWVSZWYqIHZhbCkgewotICAvLyBBbHdheXMgdXNlIG11dGFibGUgbWFwIGJlY2F1
c2UgdXNlcnMgbWF5IGNoYW5nZSB0aGUgbWFwIHZhbHVlIGJ5Ci0gIC8vIE1hcFZhbHVlUmVmLgot
ICBNYXA8TWFwS2V5LCBNYXBWYWx1ZVJlZj4qIG1hcCA9IE11dGFibGVNYXAoKTsKLSAgTWFwPE1h
cEtleSwgTWFwVmFsdWVSZWY+OjppdGVyYXRvciBpdGVyID0gbWFwLT5maW5kKG1hcF9rZXkpOwot
ICBpZiAoaXRlciA9PSBtYXAtPmVuZCgpKSB7Ci0gICAgLy8gSW5zZXJ0Ci0gICAgTWFwVmFsdWVS
ZWYmIG1hcF92YWwgPSAoKm1hcClbbWFwX2tleV07Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiB2YWxfZGVzID0KLSAgICAgICAgZGVmYXVsdF9lbnRyeV8tPkdldERlc2NyaXB0b3IoKS0+Rmlu
ZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICAgIG1hcF92YWwuU2V0VHlwZSh2YWxfZGVzLT5jcHBf
dHlwZSgpKTsKLSAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnNlcnRlZCBNYXBWYWx1
ZVJlZiwgYW5kIGluaXRpYWxpemUgdG8KLSAgICAvLyBkZWZhdWx0IHZhbHVlLgotICAgIHN3aXRj
aCAodmFsX2Rlcy0+Y3BwX3R5cGUoKSkgewotI2RlZmluZSBIQU5ETEVfVFlQRShDUFBUWVBFLCBU
WVBFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGNhc2UgZ29vZ2xlOjpw
cm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFXyMjQ1BQVFlQRTogeyAgICAgICAgXAot
ICAgICAgICBUWVBFICogdmFsdWUgPSBuZXcgVFlQRSgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgbWFwX3ZhbC5TZXRWYWx1ZSh2YWx1ZSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfQotICAgICAgSEFORExFX1RZUEUo
SU5UMzIsIGludDMyKTsKLSAgICAgIEhBTkRMRV9UWVBFKElOVDY0LCBpbnQ2NCk7Ci0gICAgICBI
QU5ETEVfVFlQRShVSU5UMzIsIHVpbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQRShVSU5UNjQsIHVp
bnQ2NCk7Ci0gICAgICBIQU5ETEVfVFlQRShET1VCTEUsIGRvdWJsZSk7Ci0gICAgICBIQU5ETEVf
VFlQRShGTE9BVCwgZmxvYXQpOwotICAgICAgSEFORExFX1RZUEUoQk9PTCwgYm9vbCk7Ci0gICAg
ICBIQU5ETEVfVFlQRShTVFJJTkcsIHN0cmluZyk7Ci0gICAgICBIQU5ETEVfVFlQRShFTlVNLCBp
bnQzMik7Ci0jdW5kZWYgSEFORExFX1RZUEUKLSAgICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6IHsKLSAgICAgICAgY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZSA9IGRlZmF1bHRfZW50cnlfLT5HZXRSZWZsZWN0aW9uKCktPkdldE1lc3NhZ2Uo
Ci0gICAgICAgICAgICAqZGVmYXVsdF9lbnRyeV8sIHZhbF9kZXMpOwotICAgICAgICBNZXNzYWdl
KiB2YWx1ZSA9IG1lc3NhZ2UuTmV3KCk7Ci0gICAgICAgIG1hcF92YWwuU2V0VmFsdWUodmFsdWUp
OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgdmFsLT5Db3B5RnJvbShtYXBf
dmFsKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAvLyBtYXBfa2V5IGlzIGFscmVhZHkgaW4g
dGhlIG1hcC4gTWFrZSBzdXJlICgqbWFwKVttYXBfa2V5XSBpcyBub3QgY2FsbGVkLgotICAvLyBb
XSBtYXkgcmVvcmRlciB0aGUgbWFwIGFuZCBpdGVyYXRvcnMuCi0gIHZhbC0+Q29weUZyb20oaXRl
ci0+c2Vjb25kKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIER5bmFtaWNNYXBGaWVsZDo6
RGVsZXRlTWFwVmFsdWUoY29uc3QgTWFwS2V5JiBtYXBfa2V5KSB7Ci0gIE1hcEZpZWxkQmFzZTo6
U3luY01hcFdpdGhSZXBlYXRlZEZpZWxkKCk7Ci0gIE1hcDxNYXBLZXksIE1hcFZhbHVlUmVmPjo6
aXRlcmF0b3IgaXRlciA9IG1hcF8uZmluZChtYXBfa2V5KTsKLSAgaWYgKGl0ZXIgPT0gbWFwXy5l
bmQoKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAvLyBTZXQgbWFwIGRpcnR5IG9ubHkg
aWYgdGhlIGRlbGV0ZSBpcyBzdWNjZXNzZnVsLgotICBNYXBGaWVsZEJhc2U6OlNldE1hcERpcnR5
KCk7Ci0gIGl0ZXItPnNlY29uZC5EZWxldGVEYXRhKCk7Ci0gIG1hcF8uZXJhc2UoaXRlcik7Ci0g
IHJldHVybiB0cnVlOwotfQotCi1jb25zdCBNYXA8TWFwS2V5LCBNYXBWYWx1ZVJlZj4mIER5bmFt
aWNNYXBGaWVsZDo6R2V0TWFwKCkgY29uc3QgewotICBNYXBGaWVsZEJhc2U6OlN5bmNNYXBXaXRo
UmVwZWF0ZWRGaWVsZCgpOwotICByZXR1cm4gbWFwXzsKLX0KLQotTWFwPE1hcEtleSwgTWFwVmFs
dWVSZWY+KiBEeW5hbWljTWFwRmllbGQ6Ok11dGFibGVNYXAoKSB7Ci0gIE1hcEZpZWxkQmFzZTo6
U3luY01hcFdpdGhSZXBlYXRlZEZpZWxkKCk7Ci0gIE1hcEZpZWxkQmFzZTo6U2V0TWFwRGlydHko
KTsKLSAgcmV0dXJuICZtYXBfOwotfQotCi12b2lkIER5bmFtaWNNYXBGaWVsZDo6U2V0TWFwSXRl
cmF0b3JWYWx1ZShNYXBJdGVyYXRvciogbWFwX2l0ZXIpIGNvbnN0IHsKLSAgTWFwPE1hcEtleSwg
TWFwVmFsdWVSZWY+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0KLSAgICAgIFR5cGVEZWZpbmVkTWFw
RmllbGRCYXNlPE1hcEtleSwgTWFwVmFsdWVSZWY+OjpJbnRlcm5hbEdldEl0ZXJhdG9yKAotICAg
ICAgICAgIG1hcF9pdGVyKTsKLSAgaWYgKGl0ZXIgPT0gbWFwXy5lbmQoKSkgcmV0dXJuOwotICBt
YXBfaXRlci0+a2V5Xy5Db3B5RnJvbShpdGVyLT5maXJzdCk7Ci0gIG1hcF9pdGVyLT52YWx1ZV8u
Q29weUZyb20oaXRlci0+c2Vjb25kKTsKLX0KLQotdm9pZCBEeW5hbWljTWFwRmllbGQ6OlN5bmNS
ZXBlYXRlZEZpZWxkV2l0aE1hcE5vTG9jaygpIGNvbnN0IHsKLSAgY29uc3QgUmVmbGVjdGlvbiog
cmVmbGVjdGlvbiA9IGRlZmF1bHRfZW50cnlfLT5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvcioga2V5X2RlcyA9Ci0gICAgICBkZWZhdWx0X2VudHJ5Xy0+R2V0RGVzY3Jp
cHRvcigpLT5GaW5kRmllbGRCeU5hbWUoImtleSIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IHZhbF9kZXMgPQotICAgICAgZGVmYXVsdF9lbnRyeV8tPkdldERlc2NyaXB0b3IoKS0+RmluZEZp
ZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICBpZiAoTWFwRmllbGRCYXNlOjpyZXBlYXRlZF9maWVsZF8g
PT0gTlVMTCkgewotICAgIGlmIChNYXBGaWVsZEJhc2U6OmFyZW5hXyA9PSBOVUxMKSB7Ci0gICAg
ICBNYXBGaWVsZEJhc2U6OnJlcGVhdGVkX2ZpZWxkXyA9IG5ldyBSZXBlYXRlZFB0ckZpZWxkPE1l
c3NhZ2U+KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIE1hcEZpZWxkQmFzZTo6cmVwZWF0ZWRfZmll
bGRfID0KLSAgICAgICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxSZXBlYXRlZFB0ckZpZWxkPE1l
c3NhZ2U+ID4oCi0gICAgICAgICAgICAgIE1hcEZpZWxkQmFzZTo6YXJlbmFfKTsKLSAgICB9Ci0g
IH0KLQotICBNYXBGaWVsZEJhc2U6OnJlcGVhdGVkX2ZpZWxkXy0+Q2xlYXIoKTsKLQotICBmb3Ig
KE1hcDxNYXBLZXksIE1hcFZhbHVlUmVmPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXBfLmJlZ2lu
KCk7Ci0gICAgICAgaXQgIT0gbWFwXy5lbmQoKTsgKytpdCkgewotICAgIE1lc3NhZ2UqIG5ld19l
bnRyeSA9IGRlZmF1bHRfZW50cnlfLT5OZXcoKTsKLSAgICBNYXBGaWVsZEJhc2U6OnJlcGVhdGVk
X2ZpZWxkXy0+QWRkQWxsb2NhdGVkKG5ld19lbnRyeSk7Ci0gICAgY29uc3QgTWFwS2V5JiBtYXBf
a2V5ID0gaXQtPmZpcnN0OwotICAgIHN3aXRjaCAoa2V5X2Rlcy0+Y3BwX3R5cGUoKSkgewotICAg
ICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5H
OgotICAgICAgICByZWZsZWN0aW9uLT5TZXRTdHJpbmcobmV3X2VudHJ5LCBrZXlfZGVzLCBtYXBf
a2V5LkdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgZ29vZ2xl
Ojpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDY0OgotICAgICAgICByZWZs
ZWN0aW9uLT5TZXRJbnQ2NChuZXdfZW50cnksIGtleV9kZXMsIG1hcF9rZXkuR2V0SW50NjRWYWx1
ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
RGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQzMjoKLSAgICAgICAgcmVmbGVjdGlvbi0+U2V0SW50MzIo
bmV3X2VudHJ5LCBrZXlfZGVzLCBtYXBfa2V5LkdldEludDMyVmFsdWUoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfVUlOVDY0OgotICAgICAgICByZWZsZWN0aW9uLT5TZXRVSW50NjQobmV3X2VudHJ5LCBrZXlf
ZGVzLCBtYXBfa2V5LkdldFVJbnQ2NFZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQzMjoKLSAg
ICAgICAgcmVmbGVjdGlvbi0+U2V0VUludDMyKG5ld19lbnRyeSwga2V5X2RlcywgbWFwX2tleS5H
ZXRVSW50MzJWYWx1ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJv
dG9idWY6OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9CT09MOgotICAgICAgICByZWZsZWN0aW9u
LT5TZXRCb29sKG5ld19lbnRyeSwga2V5X2RlcywgbWFwX2tleS5HZXRCb29sVmFsdWUoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfRE9VQkxFOgotICAgICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQ6Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNOgotICAgICAgY2FzZSBnb29nbGU6OnByb3RvYnVm
OjpGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRToKLSAgICAgICAgR09PR0xFX0xPRyhG
QVRBTCkgPDwgIkNhbid0IGdldCBoZXJlLiI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
b25zdCBNYXBWYWx1ZVJlZiYgbWFwX3ZhbCA9IGl0LT5zZWNvbmQ7Ci0gICAgc3dpdGNoICh2YWxf
ZGVzLT5jcHBfdHlwZSgpKSB7Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6Ci0gICAgICAgIHJlZmxlY3Rpb24tPlNldFN0cmluZyhu
ZXdfZW50cnksIHZhbF9kZXMsIG1hcF92YWwuR2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfSU5UNjQ6Ci0gICAgICAgIHJlZmxlY3Rpb24tPlNldEludDY0KG5ld19lbnRyeSwgdmFsX2Rl
cywgbWFwX3ZhbC5HZXRJbnQ2NFZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyOgotICAgICAg
ICByZWZsZWN0aW9uLT5TZXRJbnQzMihuZXdfZW50cnksIHZhbF9kZXMsIG1hcF92YWwuR2V0SW50
MzJWYWx1ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UNjQ6Ci0gICAgICAgIHJlZmxlY3Rpb24tPlNl
dFVJbnQ2NChuZXdfZW50cnksIHZhbF9kZXMsIG1hcF92YWwuR2V0VUludDY0VmFsdWUoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfVUlOVDMyOgotICAgICAgICByZWZsZWN0aW9uLT5TZXRVSW50MzIobmV3X2Vu
dHJ5LCB2YWxfZGVzLCBtYXBfdmFsLkdldFVJbnQzMlZhbHVlKCkpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0JP
T0w6Ci0gICAgICAgIHJlZmxlY3Rpb24tPlNldEJvb2wobmV3X2VudHJ5LCB2YWxfZGVzLCBtYXBf
dmFsLkdldEJvb2xWYWx1ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGdvb2dsZTo6
cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9ET1VCTEU6Ci0gICAgICAgIHJlZmxl
Y3Rpb24tPlNldERvdWJsZShuZXdfZW50cnksIHZhbF9kZXMsIG1hcF92YWwuR2V0RG91YmxlVmFs
dWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQ6Ci0gICAgICAgIHJlZmxlY3Rpb24tPlNldEZsb2F0
KG5ld19lbnRyeSwgdmFsX2RlcywgbWFwX3ZhbC5HZXRGbG9hdFZhbHVlKCkpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX0VOVU06Ci0gICAgICAgIHJlZmxlY3Rpb24tPlNldEVudW1WYWx1ZShuZXdfZW50cnksIHZh
bF9kZXMsIG1hcF92YWwuR2V0RW51bVZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6IHsK
LSAgICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSA9IG1hcF92YWwuR2V0TWVzc2FnZVZhbHVl
KCk7Ci0gICAgICAgIHJlZmxlY3Rpb24tPk11dGFibGVNZXNzYWdlKG5ld19lbnRyeSwgdmFsX2Rl
cyktPkNvcHlGcm9tKG1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLX0KLQotdm9pZCBEeW5hbWljTWFwRmllbGQ6OlN5bmNNYXBXaXRoUmVwZWF0ZWRGaWVsZE5v
TG9jaygpIGNvbnN0IHsKLSAgTWFwPE1hcEtleSwgTWFwVmFsdWVSZWY+KiBtYXAgPSAmY29uc3Rf
Y2FzdDxEeW5hbWljTWFwRmllbGQqPih0aGlzKS0+bWFwXzsKLSAgY29uc3QgUmVmbGVjdGlvbiog
cmVmbGVjdGlvbiA9IGRlZmF1bHRfZW50cnlfLT5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvcioga2V5X2RlcyA9Ci0gICAgICBkZWZhdWx0X2VudHJ5Xy0+R2V0RGVzY3Jp
cHRvcigpLT5GaW5kRmllbGRCeU5hbWUoImtleSIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IHZhbF9kZXMgPQotICAgICAgZGVmYXVsdF9lbnRyeV8tPkdldERlc2NyaXB0b3IoKS0+RmluZEZp
ZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICAvLyBEeW5hbWljTWFwRmllbGQgb3ducyBtYXAgdmFsdWVz
LiBOZWVkIHRvIGRlbGV0ZSB0aGVtIGJlZm9yZSBjbGVhcmluZwotICAvLyB0aGUgbWFwLgotICBm
b3IgKE1hcDxNYXBLZXksIE1hcFZhbHVlUmVmPjo6aXRlcmF0b3IgaXRlciA9IG1hcC0+YmVnaW4o
KTsKLSAgICAgICBpdGVyICE9IG1hcC0+ZW5kKCk7ICsraXRlcikgewotICAgIGl0ZXItPnNlY29u
ZC5EZWxldGVEYXRhKCk7Ci0gIH0KLSAgbWFwLT5jbGVhcigpOwotICBmb3IgKFJlcGVhdGVkUHRy
RmllbGQ8TWVzc2FnZT46Oml0ZXJhdG9yIGl0ID0KLSAgICAgICAgICAgTWFwRmllbGRCYXNlOjpy
ZXBlYXRlZF9maWVsZF8tPmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gTWFwRmllbGRCYXNlOjpyZXBl
YXRlZF9maWVsZF8tPmVuZCgpOyArK2l0KSB7Ci0gICAgTWFwS2V5IG1hcF9rZXk7Ci0gICAgc3dp
dGNoIChrZXlfZGVzLT5jcHBfdHlwZSgpKSB7Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9TVFJJTkc6Ci0gICAgICAgIG1hcF9rZXkuU2V0U3Ry
aW5nVmFsdWUocmVmbGVjdGlvbi0+R2V0U3RyaW5nKCppdCwga2V5X2RlcykpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX0lOVDY0OgotICAgICAgICBtYXBfa2V5LlNldEludDY0VmFsdWUocmVmbGVjdGlvbi0+R2V0
SW50NjQoKml0LCBrZXlfZGVzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBnb29nbGU6
OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UMzI6Ci0gICAgICAgIG1hcF9r
ZXkuU2V0SW50MzJWYWx1ZShyZWZsZWN0aW9uLT5HZXRJbnQzMigqaXQsIGtleV9kZXMpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9VSU5UNjQ6Ci0gICAgICAgIG1hcF9rZXkuU2V0VUludDY0VmFsdWUocmVmbGVj
dGlvbi0+R2V0VUludDY0KCppdCwga2V5X2RlcykpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQzMjoKLSAg
ICAgICAgbWFwX2tleS5TZXRVSW50MzJWYWx1ZShyZWZsZWN0aW9uLT5HZXRVSW50MzIoKml0LCBr
ZXlfZGVzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpG
aWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICAgICAgbWFwX2tleS5TZXRCb29sVmFs
dWUocmVmbGVjdGlvbi0+R2V0Qm9vbCgqaXQsIGtleV9kZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9ET1VC
TEU6Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9GTE9BVDoKLSAgICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX0VOVU06Ci0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRv
cjo6Q1BQVFlQRV9NRVNTQUdFOgotICAgICAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuJ3Qg
Z2V0IGhlcmUuIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIE1hcFZhbHVlUmVmJiBtYXBf
dmFsID0gKCptYXApW21hcF9rZXldOwotICAgIG1hcF92YWwuU2V0VHlwZSh2YWxfZGVzLT5jcHBf
dHlwZSgpKTsKLSAgICBzd2l0Y2ggKHZhbF9kZXMtPmNwcF90eXBlKCkpIHsKLSNkZWZpbmUgSEFO
RExFX1RZUEUoQ1BQVFlQRSwgVFlQRSwgTUVUSE9EKSAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV8jI0NQ
UFRZUEU6IHsgICAgICAgIFwKLSAgICAgICAgVFlQRSAqIHZhbHVlID0gbmV3IFRZUEU7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICp2YWx1ZSA9IHJlZmxlY3Rpb24t
PkdldCMjTUVUSE9EKCppdCwgdmFsX2Rlcyk7ICAgICAgICAgXAotICAgICAgICAgICAgbWFwX3Zh
bC5TZXRWYWx1ZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICB9Ci0gICAgICBIQU5ETEVfVFlQRShJTlQzMiwgaW50MzIsIEludDMyKTsKLSAgICAg
IEhBTkRMRV9UWVBFKElOVDY0LCBpbnQ2NCwgSW50NjQpOwotICAgICAgSEFORExFX1RZUEUoVUlO
VDMyLCB1aW50MzIsIFVJbnQzMik7Ci0gICAgICBIQU5ETEVfVFlQRShVSU5UNjQsIHVpbnQ2NCwg
VUludDY0KTsKLSAgICAgIEhBTkRMRV9UWVBFKERPVUJMRSwgZG91YmxlLCBEb3VibGUpOwotICAg
ICAgSEFORExFX1RZUEUoRkxPQVQsIGZsb2F0LCBGbG9hdCk7Ci0gICAgICBIQU5ETEVfVFlQRShC
T09MLCBib29sLCBCb29sKTsKLSAgICAgIEhBTkRMRV9UWVBFKFNUUklORywgc3RyaW5nLCBTdHJp
bmcpOwotICAgICAgSEFORExFX1RZUEUoRU5VTSwgaW50MzIsIEVudW1WYWx1ZSk7Ci0jdW5kZWYg
SEFORExFX1RZUEUKLSAgICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9y
OjpDUFBUWVBFX01FU1NBR0U6IHsKLSAgICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSA9IHJl
ZmxlY3Rpb24tPkdldE1lc3NhZ2UoKml0LCB2YWxfZGVzKTsKLSAgICAgICAgTWVzc2FnZSogdmFs
dWUgPSBtZXNzYWdlLk5ldygpOwotICAgICAgICB2YWx1ZS0+Q29weUZyb20obWVzc2FnZSk7Ci0g
ICAgICAgIG1hcF92YWwuU2V0VmFsdWUodmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0K
LSAgICB9Ci0gIH0KLX0KLQotaW50IER5bmFtaWNNYXBGaWVsZDo6U3BhY2VVc2VkRXhjbHVkaW5n
U2VsZk5vTG9jaygpIGNvbnN0IHsKLSAgaW50IHNpemUgPSAwOwotICBpZiAoTWFwRmllbGRCYXNl
OjpyZXBlYXRlZF9maWVsZF8gIT0gTlVMTCkgewotICAgIHNpemUgKz0gTWFwRmllbGRCYXNlOjpy
ZXBlYXRlZF9maWVsZF8tPlNwYWNlVXNlZEV4Y2x1ZGluZ1NlbGYoKTsKLSAgfQotICBzaXplICs9
IHNpemVvZihtYXBfKTsKLSAgaW50IG1hcF9zaXplID0gbWFwXy5zaXplKCk7Ci0gIGlmIChtYXBf
c2l6ZSkgewotICAgIE1hcDxNYXBLZXksIE1hcFZhbHVlUmVmPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXBfLmJlZ2luKCk7Ci0gICAgc2l6ZSArPSBzaXplb2YoaXQtPmZpcnN0KSAqIG1hcF9zaXpl
OwotICAgIHNpemUgKz0gc2l6ZW9mKGl0LT5zZWNvbmQpICogbWFwX3NpemU7Ci0gICAgLy8gSWYg
a2V5IGlzIHN0cmluZywgYWRkIHRoZSBhbGxvY2F0ZWQgc3BhY2UuCi0gICAgaWYgKGl0LT5maXJz
dC50eXBlKCkgPT0gZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NU
UklORykgewotICAgICAgc2l6ZSArPSBzaXplb2Yoc3RyaW5nKSAqIG1hcF9zaXplOwotICAgIH0K
LSAgICAvLyBBZGQgdGhlIGFsbG9jYXRlZCBzcGFjZSBpbiBNYXBWYWx1ZVJlZi4KLSAgICBzd2l0
Y2ggKGl0LT5zZWNvbmQudHlwZSgpKSB7Ci0jZGVmaW5lIEhBTkRMRV9UWVBFKENQUFRZUEUsIFRZ
UEUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY2FzZSBnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfIyNDUFBUWVBFOiB7ICAgICAgICBcCi0g
ICAgICAgIHNpemUgKz0gc2l6ZW9mKFRZUEUpICogbWFwX3NpemU7ICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIH0KLSAgICAgIEhBTkRMRV9UWVBFKElOVDMyLCBpbnQz
Mik7Ci0gICAgICBIQU5ETEVfVFlQRShJTlQ2NCwgaW50NjQpOwotICAgICAgSEFORExFX1RZUEUo
VUlOVDMyLCB1aW50MzIpOwotICAgICAgSEFORExFX1RZUEUoVUlOVDY0LCB1aW50NjQpOwotICAg
ICAgSEFORExFX1RZUEUoRE9VQkxFLCBkb3VibGUpOwotICAgICAgSEFORExFX1RZUEUoRkxPQVQs
IGZsb2F0KTsKLSAgICAgIEhBTkRMRV9UWVBFKEJPT0wsIGJvb2wpOwotICAgICAgSEFORExFX1RZ
UEUoU1RSSU5HLCBzdHJpbmcpOwotICAgICAgSEFORExFX1RZUEUoRU5VTSwgaW50MzIpOwotI3Vu
ZGVmIEhBTkRMRV9UWVBFCi0gICAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9NRVNTQUdFOiB7Ci0gICAgICAgIHdoaWxlIChpdCAhPSBtYXBfLmVuZCgp
KSB7Ci0gICAgICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSA9IGl0LT5zZWNvbmQuR2V0TWVz
c2FnZVZhbHVlKCk7Ci0gICAgICAgICAgc2l6ZSArPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKS0+
U3BhY2VVc2VkKG1lc3NhZ2UpOwotICAgICAgICAgICsraXQ7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBzaXplOwotfQotCi19ICAvLyBu
YW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNw
YWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZC5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0YjQ2ZjNhYTAyN2YzNDg5ZTA2MzA2NmM5MDIzZDBlY2NlNTFlOGZkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9t
YXBfZmllbGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5NyArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfTUFQX0ZJRUxE
X0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfTUFQX0ZJRUxEX0hfXwotCi0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wcy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9tdXRleC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21t
b24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVj
dGlvbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9tYXBfZW50cnkuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFw
X2ZpZWxkX2xpdGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFwX3R5cGVfaGFuZGxl
ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3Vua25vd25fZmllbGRfc2V0Lmg+Ci0KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2Ug
cHJvdG9idWYgewotY2xhc3MgRHluYW1pY01lc3NhZ2U7Ci1jbGFzcyBNYXBLZXk7Ci1uYW1lc3Bh
Y2UgaW50ZXJuYWwgewotCi1jbGFzcyBDb250ZW5kZWRNYXBDbGVhblRlc3Q7Ci1jbGFzcyBHZW5l
cmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjsKLWNsYXNzIE1hcEZpZWxkQWNjZXNzb3I7Ci0KLS8vIFRo
aXMgY2xhc3MgcHJvdmlkZXMgYWNjZXNzcyB0byBtYXAgZmllbGQgdXNpbmcgcmVmbGVjdGlvbiwg
d2hpY2ggaXMgdGhlIHNhbWUKLS8vIGFzIHRob3NlIHByb3ZpZGVkIGZvciBSZXBlYXRlZFB0ckZp
ZWxkPE1lc3NhZ2U+LiBJdCBpcyB1c2VkIGZvciBpbnRlcm5hbAotLy8gcmVmbGVjdGlvbiBpbXBs
ZW50YXRpb24gb25seS4gVXNlcnMgc2hvdWxkIG5ldmVyIHVzZSB0aGlzIGRpcmVjdGx5LgotY2xh
c3MgTElCUFJPVE9CVUZfRVhQT1JUIE1hcEZpZWxkQmFzZSB7Ci0gcHVibGljOgotICBNYXBGaWVs
ZEJhc2UoKQotICAgICAgOiBhcmVuYV8oTlVMTCksCi0gICAgICAgIHJlcGVhdGVkX2ZpZWxkXyhO
VUxMKSwKLSAgICAgICAgZW50cnlfZGVzY3JpcHRvcl8oTlVMTCksCi0gICAgICAgIGFzc2lnbl9k
ZXNjcmlwdG9yX2NhbGxiYWNrXyhOVUxMKSwKLSAgICAgICAgc3RhdGVfKFNUQVRFX01PRElGSUVE
X01BUCkge30KLSAgZXhwbGljaXQgTWFwRmllbGRCYXNlKEFyZW5hKiBhcmVuYSkKLSAgICAgIDog
YXJlbmFfKGFyZW5hKSwKLSAgICAgICAgcmVwZWF0ZWRfZmllbGRfKE5VTEwpLAotICAgICAgICBl
bnRyeV9kZXNjcmlwdG9yXyhOVUxMKSwKLSAgICAgICAgYXNzaWduX2Rlc2NyaXB0b3JfY2FsbGJh
Y2tfKE5VTEwpLAotICAgICAgICBzdGF0ZV8oU1RBVEVfTU9ESUZJRURfTUFQKSB7Ci0gICAgLy8g
TXV0ZXgncyBkZXN0cnVjdG9yIG5lZWRzIHRvIGJlIGNhbGxlZCBleHBsaWNpdGx5IHRvIHJlbGVh
c2UgcmVzb3VyY2VzCi0gICAgLy8gYWNxdWlyZWQgaW4gaXRzIGNvbnN0cnVjdG9yLgotICAgIGFy
ZW5hLT5Pd25EZXN0cnVjdG9yKCZtdXRleF8pOwotICB9Ci0gIHZpcnR1YWwgfk1hcEZpZWxkQmFz
ZSgpOwotCi0gIC8vIFJldHVybnMgcmVmZXJlbmNlIHRvIGludGVybmFsIHJlcGVhdGVkIGZpZWxk
LiBEYXRhIHdyaXR0ZW4gdXNpbmcKLSAgLy8gZ29vZ2xlOjpwcm90b2J1Zjo6TWFwJ3MgYXBpIHBy
aW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpcyBndWFyYW50dGVkIHRvIGJlCi0gIC8vIGlu
Y2x1ZGVkIGluIHJlcGVhdGVkIGZpZWxkLgotICBjb25zdCBSZXBlYXRlZFB0ckZpZWxkQmFzZSYg
R2V0UmVwZWF0ZWRGaWVsZCgpIGNvbnN0OwotCi0gIC8vIExpa2UgYWJvdmUuIFJldHVybnMgbXV0
YWJsZSBwb2ludGVyIHRvIHRoZSBpbnRlcm5hbCByZXBlYXRlZCBmaWVsZC4KLSAgUmVwZWF0ZWRQ
dHJGaWVsZEJhc2UqIE11dGFibGVSZXBlYXRlZEZpZWxkKCk7Ci0KLSAgLy8gUHVyZSB2aXJ0dWFs
IG1hcCBBUElzIGZvciBNYXAgUmVmbGVjdGlvbi4KLSAgdmlydHVhbCBib29sIENvbnRhaW5zTWFw
S2V5KGNvbnN0IE1hcEtleSYgbWFwX2tleSkgY29uc3QgPSAwOwotICB2aXJ0dWFsIGJvb2wgSW5z
ZXJ0T3JMb29rdXBNYXBWYWx1ZSgKLSAgICAgIGNvbnN0IE1hcEtleSYgbWFwX2tleSwgTWFwVmFs
dWVSZWYqIHZhbCkgPSAwOwotICB2aXJ0dWFsIGJvb2wgRGVsZXRlTWFwVmFsdWUoY29uc3QgTWFw
S2V5JiBtYXBfa2V5KSA9IDA7Ci0gIHZpcnR1YWwgYm9vbCBFcXVhbEl0ZXJhdG9yKGNvbnN0IE1h
cEl0ZXJhdG9yJiBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYXBJdGVy
YXRvciYgYikgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgTWFwQmVnaW4oTWFwSXRlcmF0b3Iq
IG1hcF9pdGVyKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBNYXBFbmQoTWFwSXRlcmF0b3Iq
IG1hcF9pdGVyKSBjb25zdCA9IDA7Ci0gIC8vIFN5bmMgTWFwIHdpdGggcmVwZWF0ZWQgZmllbGQg
YW5kIHJldHVybnMgdGhlIHNpemUgb2YgbWFwLgotICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Qg
PSAwOwotCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIGJ5IHRoZSByZXBl
YXRlZCBmaWVsZCwgZXhjbHVkaW5nCi0gIC8vIHNpemVvZigqdGhpcykKLSAgaW50IFNwYWNlVXNl
ZEV4Y2x1ZGluZ1NlbGYoKSBjb25zdDsKLQotIHByb3RlY3RlZDoKLSAgLy8gR2V0cyB0aGUgc2l6
ZSBvZiBzcGFjZSB1c2VkIGJ5IG1hcCBmaWVsZC4KLSAgdmlydHVhbCBpbnQgU3BhY2VVc2VkRXhj
bHVkaW5nU2VsZk5vTG9jaygpIGNvbnN0OwotCi0gIC8vIFN5bmNocm9uaXplcyB0aGUgY29udGVu
dCBpbiBNYXAgdG8gUmVwZWF0ZWRQdHJGaWVsZCBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlCi0gIC8v
IHRvIE1hcCBhZnRlciBsYXN0IHN5bmNocm9uaXphdGlvbi4KLSAgdm9pZCBTeW5jUmVwZWF0ZWRG
aWVsZFdpdGhNYXAoKSBjb25zdDsKLSAgdmlydHVhbCB2b2lkIFN5bmNSZXBlYXRlZEZpZWxkV2l0
aE1hcE5vTG9jaygpIGNvbnN0OwotCi0gIC8vIFN5bmNocm9uaXplcyB0aGUgY29udGVudCBpbiBS
ZXBlYXRlZFB0ckZpZWxkIHRvIE1hcCBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlCi0gIC8vIHRvIFJl
cGVhdGVkUHRyRmllbGQgYWZ0ZXIgbGFzdCBzeW5jaHJvbml6YXRpb24uCi0gIHZvaWQgU3luY01h
cFdpdGhSZXBlYXRlZEZpZWxkKCkgY29uc3Q7Ci0gIHZpcnR1YWwgdm9pZCBTeW5jTWFwV2l0aFJl
cGVhdGVkRmllbGROb0xvY2soKSBjb25zdCB7fQotCi0gIC8vIFRlbGxzIE1hcEZpZWxkQmFzZSB0
aGF0IHRoZXJlIGlzIG5ldyBjaGFuZ2UgdG8gTWFwLgotICB2b2lkIFNldE1hcERpcnR5KCk7Ci0K
LSAgLy8gVGVsbHMgTWFwRmllbGRCYXNlIHRoYXQgdGhlcmUgaXMgbmV3IGNoYW5nZSB0byBSZXBl
YXRlZFBUckZpZWxkLgotICB2b2lkIFNldFJlcGVhdGVkRGlydHkoKTsKLQotICAvLyBQcm92aWRl
cyBkZXJpdmVkIGNsYXNzIHRoZSBhY2Nlc3MgdG8gcmVwZWF0ZWQgZmllbGQuCi0gIHZvaWQqIE11
dGFibGVSZXBlYXRlZFB0ckZpZWxkKCkgY29uc3Q7Ci0KLSAgLy8gQ3JlYXRlcyBkZXNjcmlwdG9y
IGZvciBvbmx5IG9uZSB0aW1lLgotICB2b2lkIEluaXRNZXRhZGF0YU9uY2UoKSBjb25zdDsKLQot
ICBlbnVtIFN0YXRlIHsKLSAgICBTVEFURV9NT0RJRklFRF9NQVAgPSAwLCAgICAgICAvLyBtYXAg
aGFzIG5ld2x5IGFkZGVkIGRhdGEgdGhhdCBoYXMgbm90IGJlZW4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzeW5jaHJvbml6ZWQgdG8gcmVwZWF0ZWQgZmllbGQKLSAgICBT
VEFURV9NT0RJRklFRF9SRVBFQVRFRCA9IDEsICAvLyByZXBlYXRlZCBmaWVsZCBoYXMgbmV3bHkg
YWRkZWQgZGF0YSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFz
IG5vdCBiZWVuIHN5bmNocm9uaXplZCB0byBtYXAKLSAgICBDTEVBTiA9IDIsICAvLyBkYXRhIGlu
IG1hcCBhbmQgcmVwZWF0ZWQgZmllbGQgYXJlIHNhbWUKLSAgfTsKLQotICBBcmVuYSogYXJlbmFf
OwotICBtdXRhYmxlIFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4qIHJlcGVhdGVkX2ZpZWxkXzsK
LSAgLy8gTWFwRW50cnkgY2FuIG9ubHkgYmUgY3JlYXRlZCBmcm9tIE1hcEZpZWxkLiBUbyBjcmVh
dGUgTWFwRW50cnksIE1hcEZpZWxkCi0gIC8vIG5lZWRzIHRvIGtub3cgaXRzIGRlc2NyaXB0b3Is
IGJlY2F1c2UgTWFwRW50cnkgaXMgbm90IGdlbmVyYXRlZCBjbGFzcyB3aGljaAotICAvLyBjYW5u
b3QgaW5pdGlhbGl6ZSBpdHMgb3duIGRlc2NyaXB0b3IgYnkgY2FsbGluZyBnZW5lcmF0ZWQKLSAg
Ly8gZGVzY3JpcHRvci1hc3NpZ24tZnVuY3Rpb24uIFRodXMsIHdlIG5lZWQgdG8gcmVnaXN0ZXIg
YSBjYWxsYmFjayB0bwotICAvLyBpbml0aWFsaXplIE1hcEVudHJ5J3MgZGVzY3JpcHRvci4KLSAg
Y29uc3QgRGVzY3JpcHRvcioqIGVudHJ5X2Rlc2NyaXB0b3JfOwotICB2b2lkICgqYXNzaWduX2Rl
c2NyaXB0b3JfY2FsbGJhY2tfKSgpOwotCi0gIG11dGFibGUgTXV0ZXggbXV0ZXhfOyAgLy8gVGhl
IHRocmVhZCB0byBzeW5jaHJvbml6ZSBtYXAgYW5kIHJlcGVhdGVkIGZpZWxkCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbmVlZHMgdG8gZ2V0IGxvY2sgZmlyc3Q7Ci0gIG11dGFibGUgdm9s
YXRpbGUgQXRvbWljMzIgc3RhdGVfOyAgLy8gMDogU1RBVEVfTU9ESUZJRURfTUFQCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTogU1RBVEVfTU9ESUZJRURfUkVQRUFU
RUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyOiBDTEVBTgotCi0g
cHJpdmF0ZToKLSAgZnJpZW5kIGNsYXNzIENvbnRlbmRlZE1hcENsZWFuVGVzdDsKLSAgZnJpZW5k
IGNsYXNzIEdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOwotICBmcmllbmQgY2xhc3MgTWFwRmll
bGRBY2Nlc3NvcjsKLSAgZnJpZW5kIGNsYXNzIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RHluYW1pY01l
c3NhZ2U7Ci0KLSAgLy8gVmlydHVhbCBoZWxwZXIgbWV0aG9kcyBmb3IgTWFwSXRlcmF0b3IuIE1h
cEl0ZXJhdG9yIGRvZXNuJ3QgaGF2ZSB0aGUKLSAgLy8gdHlwZSBoZWxwZXIgZm9yIGtleSBhbmQg
dmFsdWUuIENhbGwgdGhlc2UgaGVscCBtZXRob2RzIHRvIGRlYWwgd2l0aAotICAvLyBkaWZmZXJl
bnQgdHlwZXMuIFJlYWwgaGVscGVyIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGluCi0gIC8vIFR5
cGVEZWZpbmVkTWFwRmllbGRCYXNlLgotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVm
OjpNYXBJdGVyYXRvcjsKLSAgLy8gQWxsb2NhdGUgbWFwPC4uLj46Oml0ZXJhdG9yIGZvciBNYXBJ
dGVyYXRvci4KLSAgdmlydHVhbCB2b2lkIEluaXRpYWxpemVJdGVyYXRvcihNYXBJdGVyYXRvciog
bWFwX2l0ZXIpIGNvbnN0ID0gMDsKLQotICAvLyBEZWxldGVJdGVyYXRvcigpIGlzIGNhbGxlZCBi
eSB0aGUgZGVzdHJ1Y3RvciBvZiBNYXBJdGVyYXRvciBvbmx5LgotICAvLyBJdCBkZWxldGVzIG1h
cDwuLi4+OjppdGVyYXRvciBmb3IgTWFwSXRlcmF0b3IuCi0gIHZpcnR1YWwgdm9pZCBEZWxldGVJ
dGVyYXRvcihNYXBJdGVyYXRvciogbWFwX2l0ZXIpIGNvbnN0ID0gMDsKLQotICAvLyBDb3B5IHRo
ZSBtYXA8Li4uPjo6aXRlcmF0b3IgZnJvbSBvdGhlcl9pdGVyYXRvciB0bwotICAvLyB0aGlzX2l0
ZXJhdG9yLgotICB2aXJ0dWFsIHZvaWQgQ29weUl0ZXJhdG9yKE1hcEl0ZXJhdG9yKiB0aGlzX2l0
ZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hcEl0ZXJhdG9yJiBv
dGhlcl9pdGVyYXRvcikgY29uc3QgPSAwOwotCi0gIC8vIEluY3JlYXNlSXRlcmF0b3IoKSBpcyBj
YWxsZWQgYnkgb3BlcmF0b3IrKygpIG9mIE1hcEl0ZXJhdG9yIG9ubHkuCi0gIC8vIEl0IGltcGxl
bWVudHMgdGhlICsrIG9wZXJhdG9yIG9mIE1hcEl0ZXJhdG9yLgotICB2aXJ0dWFsIHZvaWQgSW5j
cmVhc2VJdGVyYXRvcihNYXBJdGVyYXRvciogbWFwX2l0ZXIpIGNvbnN0ID0gMDsKLX07Ci0KLS8v
IFRoaXMgY2xhc3MgcHJvdmlkZXMgY29tbW9uIE1hcCBSZWZsZWN0aW9uIGltcGxlbWVudGF0aW9u
cyBmb3IgZ2VuZXJhdGVkCi0vLyBtZXNzYWdlIGFuZCBkeW5hbWljIG1lc3NhZ2UuCi10ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQ+Ci1jbGFzcyBUeXBlRGVmaW5lZE1hcEZpZWxkQmFz
ZSA6IHB1YmxpYyBNYXBGaWVsZEJhc2UgewotIHB1YmxpYzoKLSAgVHlwZURlZmluZWRNYXBGaWVs
ZEJhc2UoKSB7fQotICBleHBsaWNpdCBUeXBlRGVmaW5lZE1hcEZpZWxkQmFzZShBcmVuYSogYXJl
bmEpIDogTWFwRmllbGRCYXNlKGFyZW5hKSB7fQotICB+VHlwZURlZmluZWRNYXBGaWVsZEJhc2Uo
KSB7fQotICB2b2lkIE1hcEJlZ2luKE1hcEl0ZXJhdG9yKiBtYXBfaXRlcikgY29uc3Q7Ci0gIHZv
aWQgTWFwRW5kKE1hcEl0ZXJhdG9yKiBtYXBfaXRlcikgY29uc3Q7Ci0gIGJvb2wgRXF1YWxJdGVy
YXRvcihjb25zdCBNYXBJdGVyYXRvciYgYSwgY29uc3QgTWFwSXRlcmF0b3ImIGIpIGNvbnN0Owot
Ci0gIHZpcnR1YWwgY29uc3QgTWFwPEtleSwgVD4mIEdldE1hcCgpIGNvbnN0ID0gMDsKLSAgdmly
dHVhbCBNYXA8S2V5LCBUPiogTXV0YWJsZU1hcCgpID0gMDsKLQotIHByb3RlY3RlZDoKLSAgdHlw
ZW5hbWUgTWFwPEtleSwgVD46OmNvbnN0X2l0ZXJhdG9yJiBJbnRlcm5hbEdldEl0ZXJhdG9yKAot
ICAgICAgY29uc3QgTWFwSXRlcmF0b3IqIG1hcF9pdGVyKSBjb25zdDsKLQotIHByaXZhdGU6Ci0g
IHZvaWQgSW5pdGlhbGl6ZUl0ZXJhdG9yKE1hcEl0ZXJhdG9yKiBtYXBfaXRlcikgY29uc3Q7Ci0g
IHZvaWQgRGVsZXRlSXRlcmF0b3IoTWFwSXRlcmF0b3IqIG1hcF9pdGVyKSBjb25zdDsKLSAgdm9p
ZCBDb3B5SXRlcmF0b3IoTWFwSXRlcmF0b3IqIHRoaXNfaXRlcmF0b3JtLAotICAgICAgICAgICAg
ICAgICAgICBjb25zdCBNYXBJdGVyYXRvciYgdGhhdF9pdGVyYXRvcikgY29uc3Q7Ci0gIHZvaWQg
SW5jcmVhc2VJdGVyYXRvcihNYXBJdGVyYXRvciogbWFwX2l0ZXIpIGNvbnN0OwotCi0gIHZpcnR1
YWwgdm9pZCBTZXRNYXBJdGVyYXRvclZhbHVlKE1hcEl0ZXJhdG9yKiBtYXBfaXRlcikgY29uc3Qg
PSAwOwotfTsKLQotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhY2Nlc3NzIHRvIG1hcCBmaWVsZCB1
c2luZyBnZW5lcmF0ZWQgYXBpLiBJdCBpcyB1c2VkIGZvcgotLy8gaW50ZXJuYWwgZ2VuZXJhdGVk
IG1lc3NhZ2UgaW1wbGVudGF0aW9uIG9ubHkuIFVzZXJzIHNob3VsZCBuZXZlciB1c2UgdGhpcwot
Ly8gZGlyZWN0bHkuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAg
ICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga0tleUZpZWxkVHlwZSwKLSAgICAgICAgICBX
aXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICBpbnQg
ZGVmYXVsdF9lbnVtX3ZhbHVlID0gMD4KLWNsYXNzIE1hcEZpZWxkIDogcHVibGljIFR5cGVEZWZp
bmVkTWFwRmllbGRCYXNlPEtleSwgVD4sCi0gICAgICAgICAgICAgICAgIHB1YmxpYyBNYXBGaWVs
ZExpdGU8S2V5LCBULCBrS2V5RmllbGRUeXBlLCBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9lbnVtX3ZhbHVlPiB7Ci0gIC8vIFBy
b3ZpZGUgdXRpbGl0aWVzIHRvIHBhcnNlL3NlcmlhbGl6ZSBrZXkvdmFsdWUuICBQcm92aWRlIHV0
aWxpdGllcyB0bwotICAvLyBtYW5pcHVsYXRlIGludGVybmFsIHN0b3JlZCB0eXBlLgotICB0eXBl
ZGVmIE1hcFR5cGVIYW5kbGVyPGtLZXlGaWVsZFR5cGUsIEtleT4gS2V5VHlwZUhhbmRsZXI7Ci0g
IHR5cGVkZWYgTWFwVHlwZUhhbmRsZXI8a1ZhbHVlRmllbGRUeXBlLCBUPiBWYWx1ZVR5cGVIYW5k
bGVyOwotCi0gIC8vIERlZmluZSBtZXNzYWdlIHR5cGUgZm9yIGludGVybmFsIHJlcGVhdGVkIGZp
ZWxkLgotICB0eXBlZGVmIE1hcEVudHJ5PEtleSwgVCwga0tleUZpZWxkVHlwZSwga1ZhbHVlRmll
bGRUeXBlLCBkZWZhdWx0X2VudW1fdmFsdWU+Ci0gICAgICBFbnRyeVR5cGU7Ci0gIHR5cGVkZWYg
TWFwRW50cnlMaXRlPEtleSwgVCwga0tleUZpZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2VudW1fdmFsdWU+IEVudHJ5TGl0ZVR5cGU7Ci0K
LSAgLy8gRGVmaW5lIGFiYnJldmlhdGlvbiBmb3IgcGFyZW50IE1hcEZpZWxkTGl0ZQotICB0eXBl
ZGVmIE1hcEZpZWxkTGl0ZTxLZXksIFQsIGtLZXlGaWVsZFR5cGUsIGtWYWx1ZUZpZWxkVHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9lbnVtX3ZhbHVlPiBNYXBGaWVsZExpdGVU
eXBlOwotCi0gIC8vIEVudW0gbmVlZHMgdG8gYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIG90
aGVyIHR5cGVzIGJlY2F1c2UgaXQgaGFzCi0gIC8vIGRpZmZlcmVudCBleHBvc2VkIHR5cGUgaW4g
Z29vZ2xlOjpwcm90b2J1Zjo6TWFwJ3MgYXBpIGFuZCByZXBlYXRlZCBmaWVsZCdzIGFwaS4gRm9y
Ci0gIC8vIGRldGFpbHMgc2VlIHRoZSBjb21tZW50IGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgot
ICAvLyBTeW5jTWFwV2l0aFJlcGVhdGVkRmllbGROb0xvY2suCi0gIHN0YXRpYyBjb25zdCBib29s
IGtJc1ZhbHVlRW51bSA9IFZhbHVlVHlwZUhhbmRsZXI6OmtJc0VudW07Ci0gIHR5cGVkZWYgdHlw
ZW5hbWUgTWFwSWY8a0lzVmFsdWVFbnVtLCBULCBjb25zdCBUJj46OnR5cGUgQ2FzdFZhbHVlVHlw
ZTsKLQotIHB1YmxpYzoKLSAgTWFwRmllbGQoKTsKLSAgZXhwbGljaXQgTWFwRmllbGQoQXJlbmEq
IGFyZW5hKTsKLSAgLy8gTWFwRmllbGQgZG9lc24ndCBvd24gdGhlIGRlZmF1bHRfZW50cnksIHdo
aWNoIG1lYW5zIGRlZmF1bHRfZW50cnkgbXVzdAotICAvLyBvdXRsaXZlIHRoZSBsaWZldGltZSBv
ZiBNYXBGaWVsZC4KLSAgTWFwRmllbGQoY29uc3QgTWVzc2FnZSogZGVmYXVsdF9lbnRyeSk7Ci0g
IC8vIEZvciB0ZXN0cyBvbmx5LgotICBNYXBGaWVsZChBcmVuYSogYXJlbmEsIGNvbnN0IE1lc3Nh
Z2UqIGRlZmF1bHRfZW50cnkpOwotICB+TWFwRmllbGQoKTsKLQotICAvLyBJbXBsZW1lbnQgTWFw
RmllbGRCYXNlCi0gIGJvb2wgQ29udGFpbnNNYXBLZXkoY29uc3QgTWFwS2V5JiBtYXBfa2V5KSBj
b25zdDsKLSAgYm9vbCBJbnNlcnRPckxvb2t1cE1hcFZhbHVlKGNvbnN0IE1hcEtleSYgbWFwX2tl
eSwgTWFwVmFsdWVSZWYqIHZhbCk7Ci0gIGJvb2wgRGVsZXRlTWFwVmFsdWUoY29uc3QgTWFwS2V5
JiBtYXBfa2V5KTsKLQotICAvLyBBY2Nlc3NvcnMKLSAgY29uc3QgTWFwPEtleSwgVD4mIEdldE1h
cCgpIGNvbnN0OwotICBNYXA8S2V5LCBUPiogTXV0YWJsZU1hcCgpOwotCi0gIC8vIENvbnZlbmll
bnQgbWV0aG9kcyBmb3IgZ2VuZXJhdGVkIG1lc3NhZ2UgaW1wbGVtZW50YXRpb24uCi0gIGludCBz
aXplKCkgY29uc3Q7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgTWFw
RmllbGRMaXRlVHlwZSYgb3RoZXIpOwotICB2b2lkIFN3YXAoTWFwRmllbGRMaXRlVHlwZSogb3Ro
ZXIpOwotCi0gIC8vIEFsbG9jYXRlcyBtZXRhZGF0YSBvbmx5IGlmIHRoaXMgTWFwRmllbGQgaXMg
cGFydCBvZiBhIGdlbmVyYXRlZCBtZXNzYWdlLgotICB2b2lkIFNldEVudHJ5RGVzY3JpcHRvcihj
b25zdCBEZXNjcmlwdG9yKiogZGVzY3JpcHRvcik7Ci0gIHZvaWQgU2V0QXNzaWduRGVzY3JpcHRv
ckNhbGxiYWNrKHZvaWQgKCpjYWxsYmFjaykoKSk7Ci0KLSBwcml2YXRlOgotICB0eXBlZGVmIHZv
aWQgSW50ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfOwotICB0eXBlZGVmIHZvaWQgRGVzdHJ1Y3Rv
clNraXBwYWJsZV87Ci0KLSAgLy8gTWFwRmllbGQgbmVlZHMgTWFwRW50cnkncyBkZWZhdWx0IGlu
c3RhbmNlIHRvIGNyZWF0ZSBuZXcgTWFwRW50cnkuCi0gIHZvaWQgSW5pdERlZmF1bHRFbnRyeU9u
Y2UoKSBjb25zdDsKLQotICAvLyBNYW51YWxseSBzZXQgZGVmYXVsdCBlbnRyeSBpbnN0YW5jZS4g
Rm9yIHRlc3Qgb25seS4KLSAgdm9pZCBTZXREZWZhdWx0RW50cnlPbmNlKGNvbnN0IEVudHJ5VHlw
ZSogZGVmYXVsdF9lbnRyeSkgY29uc3Q7Ci0KLSAgLy8gQ29udmVuaWVudCBtZXRob2RzIHRvIGdl
dCBpbnRlcm5hbCBnb29nbGU6OnByb3RvYnVmOjpNYXAKLSAgY29uc3QgTWFwPEtleSwgVD4mIEdl
dEludGVybmFsTWFwKCkgY29uc3Q7Ci0gIE1hcDxLZXksIFQ+KiBNdXRhYmxlSW50ZXJuYWxNYXAo
KTsKLQotICAvLyBJbXBsZW1lbnRzIE1hcEZpZWxkQmFzZQotICB2b2lkIFN5bmNSZXBlYXRlZEZp
ZWxkV2l0aE1hcE5vTG9jaygpIGNvbnN0OwotICB2b2lkIFN5bmNNYXBXaXRoUmVwZWF0ZWRGaWVs
ZE5vTG9jaygpIGNvbnN0OwotICBpbnQgU3BhY2VVc2VkRXhjbHVkaW5nU2VsZk5vTG9jaygpIGNv
bnN0OwotCi0gIHZvaWQgU2V0TWFwSXRlcmF0b3JWYWx1ZShNYXBJdGVyYXRvciogbWFwX2l0ZXIp
IGNvbnN0OwotCi0gIG11dGFibGUgY29uc3QgRW50cnlUeXBlKiBkZWZhdWx0X2VudHJ5XzsKLQot
ICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTsKLX07Ci0KLWNsYXNzIExJ
QlBST1RPQlVGX0VYUE9SVCBEeW5hbWljTWFwRmllbGQ6IHB1YmxpYyBUeXBlRGVmaW5lZE1hcEZp
ZWxkQmFzZTxNYXBLZXksIE1hcFZhbHVlUmVmPiB7Ci0gcHVibGljOgotICBleHBsaWNpdCBEeW5h
bWljTWFwRmllbGQoY29uc3QgTWVzc2FnZSogZGVmYXVsdF9lbnRyeSk7Ci0gIER5bmFtaWNNYXBG
aWVsZChjb25zdCBNZXNzYWdlKiBkZWZhdWx0X2VudHJ5LCBBcmVuYSogYXJlbmEpOwotICB+RHlu
YW1pY01hcEZpZWxkKCk7Ci0KLSAgLy8gSW1wbGVtZW50IE1hcEZpZWxkQmFzZQotICBib29sIENv
bnRhaW5zTWFwS2V5KGNvbnN0IE1hcEtleSYgbWFwX2tleSkgY29uc3Q7Ci0gIGJvb2wgSW5zZXJ0
T3JMb29rdXBNYXBWYWx1ZShjb25zdCBNYXBLZXkmIG1hcF9rZXksIE1hcFZhbHVlUmVmKiB2YWwp
OwotICBib29sIERlbGV0ZU1hcFZhbHVlKGNvbnN0IE1hcEtleSYgbWFwX2tleSk7Ci0KLSAgY29u
c3QgTWFwPE1hcEtleSwgTWFwVmFsdWVSZWY+JiBHZXRNYXAoKSBjb25zdDsKLSAgTWFwPE1hcEtl
eSwgTWFwVmFsdWVSZWY+KiBNdXRhYmxlTWFwKCk7Ci0KLSAgaW50IHNpemUoKSBjb25zdDsKLQot
IHByaXZhdGU6Ci0gIE1hcDxNYXBLZXksIE1hcFZhbHVlUmVmPiBtYXBfOwotICBjb25zdCBNZXNz
YWdlKiBkZWZhdWx0X2VudHJ5XzsKLQotICAvLyBJbXBsZW1lbnRzIE1hcEZpZWxkQmFzZQotICB2
b2lkIFN5bmNSZXBlYXRlZEZpZWxkV2l0aE1hcE5vTG9jaygpIGNvbnN0OwotICB2b2lkIFN5bmNN
YXBXaXRoUmVwZWF0ZWRGaWVsZE5vTG9jaygpIGNvbnN0OwotICBpbnQgU3BhY2VVc2VkRXhjbHVk
aW5nU2VsZk5vTG9jaygpIGNvbnN0OwotICB2b2lkIFNldE1hcEl0ZXJhdG9yVmFsdWUoTWFwSXRl
cmF0b3IqIG1hcF9pdGVyKSBjb25zdDsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAot
Ci1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgTWFwSXRlcmF0b3IgewotIHB1YmxpYzoKLSAgTWFw
SXRlcmF0b3IoTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkg
ewotICAgIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0
aW9uKCk7Ci0gICAgbWFwXyA9IHJlZmxlY3Rpb24tPk1hcERhdGEobWVzc2FnZSwgZmllbGQpOwot
ICAgIGtleV8uU2V0VHlwZShmaWVsZC0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgi
a2V5IiktPmNwcF90eXBlKCkpOwotICAgIHZhbHVlXy5TZXRUeXBlKGZpZWxkLT5tZXNzYWdlX3R5
cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpLT5jcHBfdHlwZSgpKTsKLSAgICBtYXBfLT5J
bml0aWFsaXplSXRlcmF0b3IodGhpcyk7Ci0gIH0KLSAgTWFwSXRlcmF0b3IoY29uc3QgTWFwSXRl
cmF0b3ImIG90aGVyKSB7Ci0gICAgbWFwXyA9IG90aGVyLm1hcF87Ci0gICAgbWFwXy0+SW5pdGlh
bGl6ZUl0ZXJhdG9yKHRoaXMpOwotICAgIG1hcF8tPkNvcHlJdGVyYXRvcih0aGlzLCBvdGhlcik7
Ci0gIH0KLSAgfk1hcEl0ZXJhdG9yKCkgewotICAgIG1hcF8tPkRlbGV0ZUl0ZXJhdG9yKHRoaXMp
OwotICB9Ci0gIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWFwSXRlcmF0b3ImIGEsIGNv
bnN0IE1hcEl0ZXJhdG9yJiBiKSB7Ci0gICAgcmV0dXJuIGEubWFwXy0+RXF1YWxJdGVyYXRvcihh
LCBiKTsKLSAgfQotICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hcEl0ZXJhdG9yJiBh
LCBjb25zdCBNYXBJdGVyYXRvciYgYikgewotICAgIHJldHVybiAhYS5tYXBfLT5FcXVhbEl0ZXJh
dG9yKGEsIGIpOwotICB9Ci0gIE1hcEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewotICAgIG1hcF8t
PkluY3JlYXNlSXRlcmF0b3IodGhpcyk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0gIE1hcEl0
ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7Ci0gICAgLy8gaXRlcl8gaXMgY29waWVkIGZyb20gTWFw
PC4uLj46Oml0ZXJhdG9yLCBubyBuZWVkIHRvCi0gICAgLy8gY29weSBmcm9tIGl0cyBzZWxmIGFn
YWluLiBVc2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24KLSAgICAvLyB3aXRoIG9wZXJhdG9yKyso
KQotICAgIG1hcF8tPkluY3JlYXNlSXRlcmF0b3IodGhpcyk7Ci0gICAgcmV0dXJuICp0aGlzOwot
ICB9Ci0gIGNvbnN0IE1hcEtleSYgR2V0S2V5KCkgewotICAgIHJldHVybiBrZXlfOwotICB9Ci0g
IGNvbnN0IE1hcFZhbHVlUmVmJiBHZXRWYWx1ZVJlZigpIHsKLSAgICByZXR1cm4gdmFsdWVfOwot
ICB9Ci0gIE1hcFZhbHVlUmVmKiBNdXRhYmxlVmFsdWVSZWYoKSB7Ci0gICAgbWFwXy0+U2V0TWFw
RGlydHkoKTsKLSAgICByZXR1cm4gJnZhbHVlXzsKLSAgfQotCi0gcHJpdmF0ZToKLSAgdGVtcGxh
dGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVD4KLSAgZnJpZW5kIGNsYXNzIGludGVybmFsOjpU
eXBlRGVmaW5lZE1hcEZpZWxkQmFzZTsKLSAgZnJpZW5kIGNsYXNzIGludGVybmFsOjpEeW5hbWlj
TWFwRmllbGQ7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQsCi0gICAgICAg
ICAgICBpbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrS2V5RmllbGRUeXBlLAot
ICAgICAgICAgICAgaW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga1ZhbHVlRmll
bGRUeXBlLAotICAgICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4KLSAgZnJpZW5kIGNs
YXNzIGludGVybmFsOjpNYXBGaWVsZDsKLQotICAvLyByZWludGVycHJldF9jYXN0IGZyb20gaGVh
cC1hbGxvY2F0ZWQgTWFwPC4uLj46Oml0ZXJhdG9yKi4gTWFwSXRlcmF0b3Igb3ducwotICAvLyB0
aGUgaXRlcmF0b3IuIEl0IGlzIGFsbG9jYXRlZCBieSBNYXBGaWVsZDwuLi4+OjpJbml0aWFsaXpl
SXRlcmF0b3IoKSBjYWxsZWQKLSAgLy8gaW4gY29uc3RydWN0b3IgYW5kIGRlbGV0ZWQgYnkgTWFw
RmllbGQ8Li4uPjo6RGVsZXRlSXRlcmF0b3IoKSBjYWxsZWQgaW4KLSAgLy8gZGVzdHJ1Y3Rvci4K
LSAgdm9pZCogaXRlcl87Ci0gIC8vIFBvaW50IHRvIGEgTWFwRmllbGQgdG8gY2FsbCBoZWxwZXIg
bWV0aG9kcyBpbXBsZW1lbnRlZCBpbiBNYXBGaWVsZC4KLSAgLy8gTWFwSXRlcmF0b3IgZG9lcyBu
b3Qgb3duIHRoaXMgb2JqZWN0LgotICBpbnRlcm5hbDo6TWFwRmllbGRCYXNlKiBtYXBfOwotICBN
YXBLZXkga2V5XzsKLSAgTWFwVmFsdWVSZWYgdmFsdWVfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BS
T1RPQlVGX01BUF9GSUVMRF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBf
ZmllbGRfaW5sLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkX2lubC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWM5Yjg5YWFiMGRhYjI4MGExMGU0NTk3ZDQwY2VkNjQz
YTFhZmRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfaW5sLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0ODkg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09P
R0xFX1BST1RPQlVGX01BUF9GSUVMRF9JTkxfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9N
QVBfRklFTERfSU5MX0hfXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hBUkVEX1BU
Ul9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4KLSNlbmRp
ZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcC5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9tYXBfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFwX3R5cGVf
aGFuZGxlci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1u
YW1lc3BhY2UgaW50ZXJuYWwgewotLy8gVW53cmFwTWFwS2V5IHRlbXBsYXRlCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotVCBVbndyYXBNYXBLZXkoY29uc3QgTWFwS2V5JiBtYXBfa2V5KTsKLXRlbXBs
YXRlPD4KLWlubGluZSBpbnQzMiBVbndyYXBNYXBLZXk8aW50MzI+KGNvbnN0IE1hcEtleSYgbWFw
X2tleSkgewotICByZXR1cm4gbWFwX2tleS5HZXRJbnQzMlZhbHVlKCk7Ci19Ci10ZW1wbGF0ZTw+
Ci1pbmxpbmUgdWludDMyIFVud3JhcE1hcEtleTx1aW50MzI+KGNvbnN0IE1hcEtleSYgbWFwX2tl
eSkgewotICByZXR1cm4gbWFwX2tleS5HZXRVSW50MzJWYWx1ZSgpOwotfQotdGVtcGxhdGU8Pgot
aW5saW5lIGludDY0IFVud3JhcE1hcEtleTxpbnQ2ND4oY29uc3QgTWFwS2V5JiBtYXBfa2V5KSB7
Ci0gIHJldHVybiBtYXBfa2V5LkdldEludDY0VmFsdWUoKTsKLX0KLXRlbXBsYXRlPD4KLWlubGlu
ZSB1aW50NjQgVW53cmFwTWFwS2V5PHVpbnQ2ND4oY29uc3QgTWFwS2V5JiBtYXBfa2V5KSB7Ci0g
IHJldHVybiBtYXBfa2V5LkdldFVJbnQ2NFZhbHVlKCk7Ci19Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUg
Ym9vbCBVbndyYXBNYXBLZXk8Ym9vbD4oY29uc3QgTWFwS2V5JiBtYXBfa2V5KSB7Ci0gIHJldHVy
biBtYXBfa2V5LkdldEJvb2xWYWx1ZSgpOwotfQotdGVtcGxhdGU8PgotaW5saW5lIHN0cmluZyBV
bndyYXBNYXBLZXk8c3RyaW5nPihjb25zdCBNYXBLZXkmIG1hcF9rZXkpIHsKLSAgcmV0dXJuIG1h
cF9rZXkuR2V0U3RyaW5nVmFsdWUoKTsKLX0KLQotLy8gU2V0TWFwS2V5IHRlbXBsYXRlCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgU2V0TWFwS2V5KE1hcEtleSogbWFwX2tleSwg
Y29uc3QgVCYgdmFsdWUpOwotdGVtcGxhdGU8PgotaW5saW5lIHZvaWQgU2V0TWFwS2V5PGludDMy
PihNYXBLZXkqIG1hcF9rZXksIGNvbnN0IGludDMyJiB2YWx1ZSkgewotICBtYXBfa2V5LT5TZXRJ
bnQzMlZhbHVlKHZhbHVlKTsKLX0KLXRlbXBsYXRlPD4KLWlubGluZSB2b2lkIFNldE1hcEtleTx1
aW50MzI+KE1hcEtleSogbWFwX2tleSwgY29uc3QgdWludDMyJiB2YWx1ZSkgewotICBtYXBfa2V5
LT5TZXRVSW50MzJWYWx1ZSh2YWx1ZSk7Ci19Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUgdm9pZCBTZXRN
YXBLZXk8aW50NjQ+KE1hcEtleSogbWFwX2tleSwgY29uc3QgaW50NjQmIHZhbHVlKSB7Ci0gIG1h
cF9rZXktPlNldEludDY0VmFsdWUodmFsdWUpOwotfQotdGVtcGxhdGU8PgotaW5saW5lIHZvaWQg
U2V0TWFwS2V5PHVpbnQ2ND4oTWFwS2V5KiBtYXBfa2V5LCBjb25zdCB1aW50NjQmIHZhbHVlKSB7
Ci0gIG1hcF9rZXktPlNldFVJbnQ2NFZhbHVlKHZhbHVlKTsKLX0KLXRlbXBsYXRlPD4KLWlubGlu
ZSB2b2lkIFNldE1hcEtleTxib29sPihNYXBLZXkqIG1hcF9rZXksIGNvbnN0IGJvb2wmIHZhbHVl
KSB7Ci0gIG1hcF9rZXktPlNldEJvb2xWYWx1ZSh2YWx1ZSk7Ci19Ci10ZW1wbGF0ZTw+Ci1pbmxp
bmUgdm9pZCBTZXRNYXBLZXk8c3RyaW5nPihNYXBLZXkqIG1hcF9rZXksIGNvbnN0IHN0cmluZyYg
dmFsdWUpIHsKLSAgbWFwX2tleS0+U2V0U3RyaW5nVmFsdWUodmFsdWUpOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1UeXBlRGVmaW5lZE1hcEZpZWxkQmFzZS0tLS0tLS0tLS0tLS0t
LQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVD4KLXR5cGVuYW1lIE1hcDxLZXks
IFQ+Ojpjb25zdF9pdGVyYXRvciYKLVR5cGVEZWZpbmVkTWFwRmllbGRCYXNlPEtleSwgVD46Oklu
dGVybmFsR2V0SXRlcmF0b3IoCi0gICAgY29uc3QgTWFwSXRlcmF0b3IqIG1hcF9pdGVyKSBjb25z
dCB7Ci0gIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBNYXA8S2V5LCBUPjo6Y29u
c3RfaXRlcmF0b3IgKj4oCi0gICAgICBtYXBfaXRlci0+aXRlcl8pOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBUPgotdm9pZCBUeXBlRGVmaW5lZE1hcEZpZWxkQmFzZTxL
ZXksIFQ+OjpNYXBCZWdpbihNYXBJdGVyYXRvciogbWFwX2l0ZXIpIGNvbnN0IHsKLSAgSW50ZXJu
YWxHZXRJdGVyYXRvcihtYXBfaXRlcikgPSBHZXRNYXAoKS5iZWdpbigpOwotICBTZXRNYXBJdGVy
YXRvclZhbHVlKG1hcF9pdGVyKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVD4KLXZvaWQgVHlwZURlZmluZWRNYXBGaWVsZEJhc2U8S2V5LCBUPjo6TWFwRW5kKE1hcEl0
ZXJhdG9yKiBtYXBfaXRlcikgY29uc3QgewotICBJbnRlcm5hbEdldEl0ZXJhdG9yKG1hcF9pdGVy
KSA9IEdldE1hcCgpLmVuZCgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBUPgotYm9vbCBUeXBlRGVmaW5lZE1hcEZpZWxkQmFzZTxLZXksIFQ+OjpFcXVhbEl0ZXJhdG9y
KGNvbnN0IE1hcEl0ZXJhdG9yJiBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hcEl0ZXJhdG9yJiBiKQotICAgIGNvbnN0IHsKLSAg
cmV0dXJuIEludGVybmFsR2V0SXRlcmF0b3IoJmEpID09IEludGVybmFsR2V0SXRlcmF0b3IoJmIp
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBUPgotdm9pZCBUeXBlRGVm
aW5lZE1hcEZpZWxkQmFzZTxLZXksIFQ+OjpJbmNyZWFzZUl0ZXJhdG9yKE1hcEl0ZXJhdG9yKiBt
YXBfaXRlcikKLSAgICBjb25zdCB7Ci0gICsrSW50ZXJuYWxHZXRJdGVyYXRvcihtYXBfaXRlcik7
Ci0gIFNldE1hcEl0ZXJhdG9yVmFsdWUobWFwX2l0ZXIpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBUPgotdm9pZCBUeXBlRGVmaW5lZE1hcEZpZWxkQmFzZTxLZXksIFQ+
OjpJbml0aWFsaXplSXRlcmF0b3IoCi0gICAgTWFwSXRlcmF0b3IqIG1hcF9pdGVyKSBjb25zdCB7
Ci0gIG1hcF9pdGVyLT5pdGVyXyA9IG5ldyB0eXBlbmFtZSBNYXA8S2V5LCBUPjo6Y29uc3RfaXRl
cmF0b3I7Ci0gIEdPT0dMRV9DSEVDSyhtYXBfaXRlci0+aXRlcl8gIT0gTlVMTCk7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQ+Ci12b2lkIFR5cGVEZWZpbmVkTWFwRmll
bGRCYXNlPEtleSwgVD46OkRlbGV0ZUl0ZXJhdG9yKE1hcEl0ZXJhdG9yKiBtYXBfaXRlcikKLSAg
ICBjb25zdCB7Ci0gIGRlbGV0ZSByZWludGVycHJldF9jYXN0PHR5cGVuYW1lIE1hcDxLZXksIFQ+
Ojpjb25zdF9pdGVyYXRvciAqPigKLSAgICAgIG1hcF9pdGVyLT5pdGVyXyk7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQ+Ci12b2lkIFR5cGVEZWZpbmVkTWFwRmllbGRC
YXNlPEtleSwgVD46OkNvcHlJdGVyYXRvcigKLSAgICBNYXBJdGVyYXRvciogdGhpc19pdGVyLAot
ICAgIGNvbnN0IE1hcEl0ZXJhdG9yJiB0aGF0X2l0ZXIpIGNvbnN0IHsKLSAgSW50ZXJuYWxHZXRJ
dGVyYXRvcih0aGlzX2l0ZXIpID0gSW50ZXJuYWxHZXRJdGVyYXRvcigmdGhhdF9pdGVyKTsKLSAg
dGhpc19pdGVyLT5rZXlfLlNldFR5cGUodGhhdF9pdGVyLmtleV8udHlwZSgpKTsKLSAgLy8gTWFw
VmFsdWVSZWY6OnR5cGUoKSBmYWlscyB3aGVuIGNvbnRhaW5pbmcgZGF0YSBpcyBudWxsLiBIb3dl
dmVyLCBpZgotICAvLyB0aGlzX2l0ZXIgcG9pbnRzIHRvIE1hcEVuZCwgZGF0YSBjYW4gYmUgbnVs
bC4KLSAgdGhpc19pdGVyLT52YWx1ZV8uU2V0VHlwZSgKLSAgICAgIHN0YXRpY19jYXN0PEZpZWxk
RGVzY3JpcHRvcjo6Q3BwVHlwZT4odGhhdF9pdGVyLnZhbHVlXy50eXBlXykpOwotICBTZXRNYXBJ
dGVyYXRvclZhbHVlKHRoaXNfaXRlcik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6
RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxk
VHlwZSBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4K
LU1hcEZpZWxkPEtleSwgVCwga0tleUZpZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBlLCBkZWZhdWx0
X2VudW1fdmFsdWU+OjpNYXBGaWVsZCgpCi0gICAgOiBkZWZhdWx0X2VudHJ5XyhOVUxMKSB7fQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAgICAgIFdpcmVGb3Jt
YXRMaXRlOjpGaWVsZFR5cGUga0tleUZpZWxkVHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0
ZTo6RmllbGRUeXBlIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVt
X3ZhbHVlPgotTWFwRmllbGQ8S2V5LCBULCBrS2V5RmllbGRUeXBlLCBrVmFsdWVGaWVsZFR5cGUs
IGRlZmF1bHRfZW51bV92YWx1ZT46Ok1hcEZpZWxkKAotICAgIEFyZW5hKiBhcmVuYSkKLSAgICA6
IFR5cGVEZWZpbmVkTWFwRmllbGRCYXNlPEtleSwgVD4oYXJlbmEpLAotICAgICAgTWFwRmllbGRM
aXRlPEtleSwgVCwga0tleUZpZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBlLCBkZWZhdWx0X2VudW1f
dmFsdWU+KAotICAgICAgICAgIGFyZW5hKSwKLSAgICAgIGRlZmF1bHRfZW50cnlfKE5VTEwpIHt9
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZv
cm1hdExpdGU6OkZpZWxkVHlwZSBrS2V5RmllbGRUeXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRM
aXRlOjpGaWVsZFR5cGUga1ZhbHVlRmllbGRUeXBlLAotICAgICAgICAgIGludCBkZWZhdWx0X2Vu
dW1fdmFsdWU+Ci1NYXBGaWVsZDxLZXksIFQsIGtLZXlGaWVsZFR5cGUsIGtWYWx1ZUZpZWxkVHlw
ZSwgZGVmYXVsdF9lbnVtX3ZhbHVlPjo6TWFwRmllbGQoCi0gICAgY29uc3QgTWVzc2FnZSogZGVm
YXVsdF9lbnRyeSkKLSAgICA6IGRlZmF1bHRfZW50cnlfKGRvd25fY2FzdDxjb25zdCBFbnRyeVR5
cGUqPihkZWZhdWx0X2VudHJ5KSkge30KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUs
Ci0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrVmFsdWVGaWVsZFR5cGUsCi0g
ICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4KLU1hcEZpZWxkPEtleSwgVCwga0tleUZp
ZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBlLCBkZWZhdWx0X2VudW1fdmFsdWU+OjpNYXBGaWVsZCgK
LSAgICBBcmVuYSogYXJlbmEsIGNvbnN0IE1lc3NhZ2UqIGRlZmF1bHRfZW50cnkpCi0gICAgOiBU
eXBlRGVmaW5lZE1hcEZpZWxkQmFzZTxLZXksIFQ+KGFyZW5hKSwKLSAgICAgIE1hcEZpZWxkTGl0
ZTxLZXksIFQsIGtLZXlGaWVsZFR5cGUsIGtWYWx1ZUZpZWxkVHlwZSwgZGVmYXVsdF9lbnVtX3Zh
bHVlPigKLSAgICAgICAgICBhcmVuYSksCi0gICAgICBkZWZhdWx0X2VudHJ5Xyhkb3duX2Nhc3Q8
Y29uc3QgRW50cnlUeXBlKj4oZGVmYXVsdF9lbnRyeSkpIHt9Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBr
S2V5RmllbGRUeXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga1ZhbHVl
RmllbGRUeXBlLAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci1NYXBGaWVsZDxL
ZXksIFQsIGtLZXlGaWVsZFR5cGUsIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgIGRlZmF1bHRf
ZW51bV92YWx1ZT46On5NYXBGaWVsZCgpIHt9Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrS2V5RmllbGRU
eXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga1ZhbHVlRmllbGRUeXBl
LAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci1pbnQKLU1hcEZpZWxkPEtleSwg
VCwga0tleUZpZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBlLAotICAgICAgICAgZGVmYXVsdF9lbnVt
X3ZhbHVlPjo6c2l6ZSgpIGNvbnN0IHsKLSAgTWFwRmllbGRCYXNlOjpTeW5jTWFwV2l0aFJlcGVh
dGVkRmllbGQoKTsKLSAgcmV0dXJuIE1hcEZpZWxkTGl0ZVR5cGU6OkdldEludGVybmFsTWFwKCku
c2l6ZSgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAg
ICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga0tleUZpZWxkVHlwZSwKLSAgICAgICAgICBX
aXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICBpbnQg
ZGVmYXVsdF9lbnVtX3ZhbHVlPgotdm9pZAotTWFwRmllbGQ8S2V5LCBULCBrS2V5RmllbGRUeXBl
LCBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICBkZWZhdWx0X2VudW1fdmFsdWU+OjpDbGVhcigp
IHsKLSAgTWFwRmllbGRCYXNlOjpTeW5jTWFwV2l0aFJlcGVhdGVkRmllbGQoKTsKLSAgTWFwRmll
bGRMaXRlVHlwZTo6TXV0YWJsZUludGVybmFsTWFwKCktPmNsZWFyKCk7Ci0gIE1hcEZpZWxkQmFz
ZTo6U2V0TWFwRGlydHkoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUsCi0g
ICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrVmFsdWVGaWVsZFR5cGUsCi0gICAg
ICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4KLXZvaWQgTWFwRmllbGQ8S2V5LCBULCBrS2V5
RmllbGRUeXBlLCBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICAgICAgIGRlZmF1bHRfZW51bV92
YWx1ZT46OlNldE1hcEl0ZXJhdG9yVmFsdWUoCi0gICAgICAgICAgICAgICAgICBNYXBJdGVyYXRv
ciogbWFwX2l0ZXIpIGNvbnN0IHsKLSAgY29uc3QgTWFwPEtleSwgVD4mIG1hcCA9IEdldE1hcCgp
OwotICB0eXBlbmFtZSBNYXA8S2V5LCBUPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9Ci0gICAgICBU
eXBlRGVmaW5lZE1hcEZpZWxkQmFzZTxLZXksIFQ+OjpJbnRlcm5hbEdldEl0ZXJhdG9yKG1hcF9p
dGVyKTsKLSAgaWYgKGl0ZXIgPT0gbWFwLmVuZCgpKSByZXR1cm47Ci0gIFNldE1hcEtleSgmbWFw
X2l0ZXItPmtleV8sIGl0ZXItPmZpcnN0KTsKLSAgbWFwX2l0ZXItPnZhbHVlXy5TZXRWYWx1ZSgm
aXRlci0+c2Vjb25kKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwK
LSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUsCi0gICAg
ICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAg
ICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4KLWJvb2wgTWFwRmllbGQ8S2V5LCBULCBrS2V5Rmll
bGRUeXBlLCBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICAgICAgIGRlZmF1bHRfZW51bV92YWx1
ZT46OkNvbnRhaW5zTWFwS2V5KAotICAgICAgICAgICAgICAgICAgY29uc3QgTWFwS2V5JiBtYXBf
a2V5KSBjb25zdCB7Ci0gIGNvbnN0IE1hcDxLZXksIFQ+JiBtYXAgPSBHZXRNYXAoKTsKLSAgY29u
c3QgS2V5JiBrZXkgPSBVbndyYXBNYXBLZXk8S2V5PihtYXBfa2V5KTsKLSAgdHlwZW5hbWUgTWFw
PEtleSwgVD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYXAuZmluZChrZXkpOwotICByZXR1cm4g
aXRlciAhPSBtYXAuZW5kKCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrS2V5RmllbGRUeXBlLAot
ICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga1ZhbHVlRmllbGRUeXBlLAotICAg
ICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci1ib29sIE1hcEZpZWxkPEtleSwgVCwga0tl
eUZpZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBlLAotICAgICAgICAgICAgICBkZWZhdWx0X2VudW1f
dmFsdWU+OjpJbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAgICAgICAgICAgICAgICAgY29uc3Qg
TWFwS2V5JiBtYXBfa2V5LAotICAgICAgICAgICAgICAgICAgTWFwVmFsdWVSZWYqIHZhbCkgewot
ICAvLyBBbHdheXMgdXNlIG11dGFibGUgbWFwIGJlY2F1c2UgdXNlcnMgbWF5IGNoYW5nZSB0aGUg
bWFwIHZhbHVlIGJ5Ci0gIC8vIE1hcFZhbHVlUmVmLgotICBNYXA8S2V5LCBUPiogbWFwID0gTXV0
YWJsZU1hcCgpOwotICBjb25zdCBLZXkmIGtleSA9IFVud3JhcE1hcEtleTxLZXk+KG1hcF9rZXkp
OwotICB0eXBlbmFtZSBNYXA8S2V5LCBUPjo6aXRlcmF0b3IgaXRlciA9IG1hcC0+ZmluZChrZXkp
OwotICBpZiAobWFwLT5lbmQoKSA9PSBpdGVyKSB7Ci0gICAgdmFsLT5TZXRWYWx1ZSgmKCgqbWFw
KVtrZXldKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgLy8gS2V5IGlzIGFscmVhZHkgaW4g
dGhlIG1hcC4gTWFrZSBzdXJlICgqbWFwKVtrZXldIGlzIG5vdCBjYWxsZWQuCi0gIC8vIFtdIG1h
eSByZW9yZGVyIHRoZSBtYXAgYW5kIGl0ZXJhdG9ycy4KLSAgdmFsLT5TZXRWYWx1ZSgmKGl0ZXIt
PnNlY29uZCkpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrS2V5Rmll
bGRUeXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga1ZhbHVlRmllbGRU
eXBlLAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci1ib29sIE1hcEZpZWxkPEtl
eSwgVCwga0tleUZpZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBlLAotICAgICAgICAgICAgICBkZWZh
dWx0X2VudW1fdmFsdWU+OjpEZWxldGVNYXBWYWx1ZSgKLSAgICAgICAgICAgICAgICAgIGNvbnN0
IE1hcEtleSYgbWFwX2tleSkgewotICBjb25zdCBLZXkmIGtleSA9IFVud3JhcE1hcEtleTxLZXk+
KG1hcF9rZXkpOwotICByZXR1cm4gTXV0YWJsZU1hcCgpLT5lcmFzZShrZXkpOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRl
OjpGaWVsZFR5cGUga0tleUZpZWxkVHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6Rmll
bGRUeXBlIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVl
PgotY29uc3QgTWFwPEtleSwgVD4mCi1NYXBGaWVsZDxLZXksIFQsIGtLZXlGaWVsZFR5cGUsIGtW
YWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgIGRlZmF1bHRfZW51bV92YWx1ZT46OkdldE1hcCgpIGNv
bnN0IHsKLSAgTWFwRmllbGRCYXNlOjpTeW5jTWFwV2l0aFJlcGVhdGVkRmllbGQoKTsKLSAgcmV0
dXJuIE1hcEZpZWxkTGl0ZVR5cGU6OkdldEludGVybmFsTWFwKCk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxk
VHlwZSBrS2V5RmllbGRUeXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUg
a1ZhbHVlRmllbGRUeXBlLAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci1NYXA8
S2V5LCBUPioKLU1hcEZpZWxkPEtleSwgVCwga0tleUZpZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBl
LAotICAgICAgICAgZGVmYXVsdF9lbnVtX3ZhbHVlPjo6TXV0YWJsZU1hcCgpIHsKLSAgTWFwRmll
bGRCYXNlOjpTeW5jTWFwV2l0aFJlcGVhdGVkRmllbGQoKTsKLSAgTWFwPEtleSwgVD4qIHJlc3Vs
dCA9IE1hcEZpZWxkTGl0ZVR5cGU6Ok11dGFibGVJbnRlcm5hbE1hcCgpOwotICBNYXBGaWVsZEJh
c2U6OlNldE1hcERpcnR5KCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlw
ZSBrS2V5RmllbGRUeXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga1Zh
bHVlRmllbGRUeXBlLAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci12b2lkCi1N
YXBGaWVsZDxLZXksIFQsIGtLZXlGaWVsZFR5cGUsIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAg
IGRlZmF1bHRfZW51bV92YWx1ZT46Ok1lcmdlRnJvbSgKLSAgICBjb25zdCBNYXBGaWVsZExpdGVU
eXBlJiBvdGhlcikgewotICBjb25zdCBNYXBGaWVsZCYgZG93bl9vdGhlciA9IGRvd25fY2FzdDxj
b25zdCBNYXBGaWVsZCY+KG90aGVyKTsKLSAgTWFwRmllbGRCYXNlOjpTeW5jTWFwV2l0aFJlcGVh
dGVkRmllbGQoKTsKLSAgZG93bl9vdGhlci5TeW5jTWFwV2l0aFJlcGVhdGVkRmllbGQoKTsKLSAg
TWFwRmllbGRMaXRlVHlwZTo6TWVyZ2VGcm9tKG90aGVyKTsKLSAgTWFwRmllbGRCYXNlOjpTZXRN
YXBEaXJ0eSgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAg
ICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga0tleUZpZWxkVHlwZSwKLSAgICAgICAg
ICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICBp
bnQgZGVmYXVsdF9lbnVtX3ZhbHVlPgotdm9pZAotTWFwRmllbGQ8S2V5LCBULCBrS2V5RmllbGRU
eXBlLCBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICBkZWZhdWx0X2VudW1fdmFsdWU+OjpTd2Fw
KAotICAgIE1hcEZpZWxkTGl0ZVR5cGUqIG90aGVyKSB7Ci0gIE1hcEZpZWxkKiBkb3duX290aGVy
ID0gZG93bl9jYXN0PE1hcEZpZWxkKj4ob3RoZXIpOwotICBzdGQ6OnN3YXAoTWFwRmllbGRCYXNl
OjpyZXBlYXRlZF9maWVsZF8sIGRvd25fb3RoZXItPnJlcGVhdGVkX2ZpZWxkXyk7Ci0gIE1hcEZp
ZWxkTGl0ZVR5cGU6OlN3YXAob3RoZXIpOwotICBzdGQ6OnN3YXAoTWFwRmllbGRCYXNlOjpzdGF0
ZV8sIGRvd25fb3RoZXItPnN0YXRlXyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrS2V5RmllbGRU
eXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga1ZhbHVlRmllbGRUeXBl
LAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci12b2lkCi1NYXBGaWVsZDxLZXks
IFQsIGtLZXlGaWVsZFR5cGUsIGtWYWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgIGRlZmF1bHRfZW51
bV92YWx1ZT46OlNldEVudHJ5RGVzY3JpcHRvcigKLSAgICBjb25zdCBEZXNjcmlwdG9yKiogZGVz
Y3JpcHRvcikgewotICBNYXBGaWVsZEJhc2U6OmVudHJ5X2Rlc2NyaXB0b3JfID0gZGVzY3JpcHRv
cjsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAgICBX
aXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUsCi0gICAgICAgICAgV2lyZUZv
cm1hdExpdGU6OkZpZWxkVHlwZSBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICAgaW50IGRlZmF1
bHRfZW51bV92YWx1ZT4KLXZvaWQKLU1hcEZpZWxkPEtleSwgVCwga0tleUZpZWxkVHlwZSwga1Zh
bHVlRmllbGRUeXBlLAotICAgICAgICAgZGVmYXVsdF9lbnVtX3ZhbHVlPjo6U2V0QXNzaWduRGVz
Y3JpcHRvckNhbGxiYWNrKHZvaWQgKCpjYWxsYmFjaykoKSkgewotICBNYXBGaWVsZEJhc2U6OmFz
c2lnbl9kZXNjcmlwdG9yX2NhbGxiYWNrXyA9IGNhbGxiYWNrOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5
cGUga0tleUZpZWxkVHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtW
YWx1ZUZpZWxkVHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVlPgotY29uc3Qg
TWFwPEtleSwgVD4mCi1NYXBGaWVsZDxLZXksIFQsIGtLZXlGaWVsZFR5cGUsIGtWYWx1ZUZpZWxk
VHlwZSwKLSAgICAgICAgIGRlZmF1bHRfZW51bV92YWx1ZT46OkdldEludGVybmFsTWFwKCkgY29u
c3QgewotICByZXR1cm4gTWFwRmllbGRMaXRlVHlwZTo6R2V0SW50ZXJuYWxNYXAoKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0
TGl0ZTo6RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6
OkZpZWxkVHlwZSBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92
YWx1ZT4KLU1hcDxLZXksIFQ+KgotTWFwRmllbGQ8S2V5LCBULCBrS2V5RmllbGRUeXBlLCBrVmFs
dWVGaWVsZFR5cGUsCi0gICAgICAgICBkZWZhdWx0X2VudW1fdmFsdWU+OjpNdXRhYmxlSW50ZXJu
YWxNYXAoKSB7Ci0gIHJldHVybiBNYXBGaWVsZExpdGVUeXBlOjpNdXRhYmxlSW50ZXJuYWxNYXAo
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAgICBX
aXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUsCi0gICAgICAgICAgV2lyZUZv
cm1hdExpdGU6OkZpZWxkVHlwZSBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICAgaW50IGRlZmF1
bHRfZW51bV92YWx1ZT4KLXZvaWQKLU1hcEZpZWxkPEtleSwgVCwga0tleUZpZWxkVHlwZSwga1Zh
bHVlRmllbGRUeXBlLAotICAgICAgICAgZGVmYXVsdF9lbnVtX3ZhbHVlPjo6U3luY1JlcGVhdGVk
RmllbGRXaXRoTWFwTm9Mb2NrKCkgY29uc3QgewotICBpZiAoTWFwRmllbGRCYXNlOjpyZXBlYXRl
ZF9maWVsZF8gPT0gTlVMTCkgewotICAgIGlmIChNYXBGaWVsZEJhc2U6OmFyZW5hXyA9PSBOVUxM
KSB7Ci0gICAgICBNYXBGaWVsZEJhc2U6OnJlcGVhdGVkX2ZpZWxkXyA9IG5ldyBSZXBlYXRlZFB0
ckZpZWxkPE1lc3NhZ2U+KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIE1hcEZpZWxkQmFzZTo6cmVw
ZWF0ZWRfZmllbGRfID0KLSAgICAgICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxSZXBlYXRlZFB0
ckZpZWxkPE1lc3NhZ2U+ID4oCi0gICAgICAgICAgICAgIE1hcEZpZWxkQmFzZTo6YXJlbmFfKTsK
LSAgICB9Ci0gIH0KLSAgY29uc3QgTWFwPEtleSwgVD4mIG1hcCA9IEdldEludGVybmFsTWFwKCk7
Ci0gIFJlcGVhdGVkUHRyRmllbGQ8RW50cnlUeXBlPiogcmVwZWF0ZWRfZmllbGQgPQotICAgICAg
cmVpbnRlcnByZXRfY2FzdDxSZXBlYXRlZFB0ckZpZWxkPEVudHJ5VHlwZT4qPigKLSAgICAgICAg
ICBNYXBGaWVsZEJhc2U6OnJlcGVhdGVkX2ZpZWxkXyk7Ci0KLSAgcmVwZWF0ZWRfZmllbGQtPkNs
ZWFyKCk7Ci0KLSAgZm9yICh0eXBlbmFtZSBNYXA8S2V5LCBUPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAuYmVnaW4oKTsKLSAgICAgICBpdCAhPSBtYXAuZW5kKCk7ICsraXQpIHsKLSAgICBJbml0
RGVmYXVsdEVudHJ5T25jZSgpOwotICAgIEdPT0dMRV9DSEVDSyhkZWZhdWx0X2VudHJ5XyAhPSBO
VUxMKTsKLSAgICBFbnRyeVR5cGUqIG5ld19lbnRyeSA9Ci0gICAgICAgIGRvd25fY2FzdDxFbnRy
eVR5cGUqPihkZWZhdWx0X2VudHJ5Xy0+TmV3KE1hcEZpZWxkQmFzZTo6YXJlbmFfKSk7Ci0gICAg
cmVwZWF0ZWRfZmllbGQtPkFkZEFsbG9jYXRlZChuZXdfZW50cnkpOwotICAgICgqbmV3X2VudHJ5
LT5tdXRhYmxlX2tleSgpKSA9IGl0LT5maXJzdDsKLSAgICAoKm5ld19lbnRyeS0+bXV0YWJsZV92
YWx1ZSgpKSA9IGl0LT5zZWNvbmQ7Ci0gIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtLZXlGaWVs
ZFR5cGUsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrVmFsdWVGaWVsZFR5
cGUsCi0gICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4KLXZvaWQKLU1hcEZpZWxkPEtl
eSwgVCwga0tleUZpZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBlLAotICAgICAgICAgZGVmYXVsdF9l
bnVtX3ZhbHVlPjo6U3luY01hcFdpdGhSZXBlYXRlZEZpZWxkTm9Mb2NrKCkgY29uc3QgewotICBN
YXA8S2V5LCBUPiogbWFwID0gY29uc3RfY2FzdDxNYXBGaWVsZCo+KHRoaXMpLT5NdXRhYmxlSW50
ZXJuYWxNYXAoKTsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxFbnRyeVR5cGU+KiByZXBlYXRlZF9maWVs
ZCA9Ci0gICAgICByZWludGVycHJldF9jYXN0PFJlcGVhdGVkUHRyRmllbGQ8RW50cnlUeXBlPio+
KAotICAgICAgICAgIE1hcEZpZWxkQmFzZTo6cmVwZWF0ZWRfZmllbGRfKTsKLSAgR09PR0xFX0NI
RUNLKE1hcEZpZWxkQmFzZTo6cmVwZWF0ZWRfZmllbGRfICE9IE5VTEwpOwotICBtYXAtPmNsZWFy
KCk7Ci0gIGZvciAodHlwZW5hbWUgUmVwZWF0ZWRQdHJGaWVsZDxFbnRyeVR5cGU+OjppdGVyYXRv
ciBpdCA9Ci0gICAgICAgICAgIHJlcGVhdGVkX2ZpZWxkLT5iZWdpbigpOyBpdCAhPSByZXBlYXRl
ZF9maWVsZC0+ZW5kKCk7ICsraXQpIHsKLSAgICAvLyBDYXN0IGlzIG5lZWRlZCBiZWNhdXNlIE1h
cCdzIGFwaSBhbmQgaW50ZXJuYWwgc3RvcmFnZSBpcyBkaWZmZXJlbnQgd2hlbgotICAgIC8vIHZh
bHVlIGlzIGVudW0uIEZvciBlbnVtLCB3ZSBjYW5ub3QgY2FzdCBhbiBpbnQgdG8gZW51bS4gVGh1
cywgd2UgaGF2ZSB0bwotICAgIC8vIGNvcHkgdmFsdWUuIEZvciBvdGhlciB0eXBlcywgdGhleSBo
YXZlIHNhbWUgZXhwb3NlZCBhcGkgdHlwZSBhbmQgaW50ZXJuYWwKLSAgICAvLyBzdG9yZWQgdHlw
ZS4gV2Ugc2hvdWxkIG5vdCBpbnRyb2R1Y2UgdmFsdWUgY29weSBmb3IgdGhlbS4gV2UgYWNoaWV2
ZSB0aGlzCi0gICAgLy8gYnkgY2FzdGluZyB0byB2YWx1ZSBmb3IgZW51bSB3aGlsZSBjYXN0aW5n
IHRvIHJlZmVyZW5jZSBmb3Igb3RoZXIgdHlwZXMuCi0gICAgKCptYXApW2l0LT5rZXkoKV0gPSBz
dGF0aWNfY2FzdDxDYXN0VmFsdWVUeXBlPihpdC0+dmFsdWUoKSk7Ci0gIH0KLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6
RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxk
VHlwZSBrVmFsdWVGaWVsZFR5cGUsCi0gICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4K
LWludAotTWFwRmllbGQ8S2V5LCBULCBrS2V5RmllbGRUeXBlLCBrVmFsdWVGaWVsZFR5cGUsCi0g
ICAgICAgICBkZWZhdWx0X2VudW1fdmFsdWU+OjpTcGFjZVVzZWRFeGNsdWRpbmdTZWxmTm9Mb2Nr
KCkgY29uc3QgewotICBpbnQgc2l6ZSA9IDA7Ci0gIGlmIChNYXBGaWVsZEJhc2U6OnJlcGVhdGVk
X2ZpZWxkXyAhPSBOVUxMKSB7Ci0gICAgc2l6ZSArPSBNYXBGaWVsZEJhc2U6OnJlcGVhdGVkX2Zp
ZWxkXy0+U3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpOwotICB9Ci0gIE1hcDxLZXksIFQ+KiBtYXAg
PSBjb25zdF9jYXN0PE1hcEZpZWxkKj4odGhpcyktPk11dGFibGVJbnRlcm5hbE1hcCgpOwotICBz
aXplICs9IHNpemVvZigqbWFwKTsKLSAgZm9yICh0eXBlbmFtZSBNYXA8S2V5LCBUPjo6aXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gbWFwLT5lbmQoKTsgKytpdCkgewot
ICAgIHNpemUgKz0gS2V5VHlwZUhhbmRsZXI6OlNwYWNlVXNlZEluTWFwKGl0LT5maXJzdCk7Ci0g
ICAgc2l6ZSArPSBWYWx1ZVR5cGVIYW5kbGVyOjpTcGFjZVVzZWRJbk1hcChpdC0+c2Vjb25kKTsK
LSAgfQotICByZXR1cm4gc2l6ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtLZXlGaWVsZFR5cGUs
Ci0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrVmFsdWVGaWVsZFR5cGUsCi0g
ICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4KLXZvaWQKLU1hcEZpZWxkPEtleSwgVCwg
a0tleUZpZWxkVHlwZSwga1ZhbHVlRmllbGRUeXBlLAotICAgICAgICAgZGVmYXVsdF9lbnVtX3Zh
bHVlPjo6SW5pdERlZmF1bHRFbnRyeU9uY2UoKQotICAgIGNvbnN0IHsKLSAgaWYgKGRlZmF1bHRf
ZW50cnlfID09IE5VTEwpIHsKLSAgICBNYXBGaWVsZEJhc2U6OkluaXRNZXRhZGF0YU9uY2UoKTsK
LSAgICBHT09HTEVfQ0hFQ0soKk1hcEZpZWxkQmFzZTo6ZW50cnlfZGVzY3JpcHRvcl8gIT0gTlVM
TCk7Ci0gICAgZGVmYXVsdF9lbnRyeV8gPSBkb3duX2Nhc3Q8Y29uc3QgRW50cnlUeXBlKj4oCi0g
ICAgICAgIE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFjdG9yeSgpLT5HZXRQcm90b3R5cGUo
Ci0gICAgICAgICAgICAqTWFwRmllbGRCYXNlOjplbnRyeV9kZXNjcmlwdG9yXykpOwotICB9Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0K
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX01BUF9G
SUVMRF9JTkxfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkX2xp
dGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfbGl0ZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4NjBkYWU1NWYyYzY5YTA2NTQ3YmY2MzJjNTg3YWYxNTViYTA1YTA4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9tYXBfZmllbGRfbGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9Q
Uk9UT0JVRl9NQVBfRklFTERfTElURV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX01BUF9G
SUVMRF9MSVRFX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcC5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfZW50cnlfbGl0ZS5oPgotCi1uYW1lc3BhY2UgZ29vZ2xl
IHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBUaGlz
IGNsYXNzIHByb3ZpZGVzIGFjY2Vzc3MgdG8gbWFwIGZpZWxkIHVzaW5nIGdlbmVyYXRlZCBhcGku
IEl0IGlzIHVzZWQgZm9yCi0vLyBpbnRlcm5hbCBnZW5lcmF0ZWQgbWVzc2FnZSBpbXBsZW50YXRp
b24gb25seS4gVXNlcnMgc2hvdWxkIG5ldmVyIHVzZSB0aGlzCi0vLyBkaXJlY3RseS4KLXRlbXBs
YXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6
OkZpZWxkVHlwZSBrZXlfd2lyZV90eXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVs
ZFR5cGUgdmFsdWVfd2lyZV90eXBlLAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWUg
PSAwPgotY2xhc3MgTWFwRmllbGRMaXRlIHsKLSAgLy8gRGVmaW5lIG1lc3NhZ2UgdHlwZSBmb3Ig
aW50ZXJuYWwgcmVwZWF0ZWQgZmllbGQuCi0gIHR5cGVkZWYgTWFwRW50cnlMaXRlPEtleSwgVCwg
a2V5X3dpcmVfdHlwZSwgdmFsdWVfd2lyZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0X2VudW1fdmFsdWU+IEVudHJ5VHlwZTsKLQotIHB1YmxpYzoKLSAgTWFwRmllbGRMaXRl
KCk7Ci0gIGV4cGxpY2l0IE1hcEZpZWxkTGl0ZShBcmVuYSogYXJlbmEpOwotICB2aXJ0dWFsIH5N
YXBGaWVsZExpdGUoKTsKLQotICAvLyBBY2Nlc3NvcnMKLSAgdmlydHVhbCBjb25zdCBNYXA8S2V5
LCBUPiYgR2V0TWFwKCkgY29uc3Q7Ci0gIHZpcnR1YWwgTWFwPEtleSwgVD4qIE11dGFibGVNYXAo
KTsKLQotICAvLyBDb252ZW5pZW50IG1ldGhvZHMgZm9yIGdlbmVyYXRlZCBtZXNzYWdlIGltcGxl
bWVudGF0aW9uLgotICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7Ci0gIHZpcnR1YWwgdm9pZCBD
bGVhcigpOwotICB2aXJ0dWFsIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IE1hcEZpZWxkTGl0ZSYgb3Ro
ZXIpOwotICB2aXJ0dWFsIHZvaWQgU3dhcChNYXBGaWVsZExpdGUqIG90aGVyKTsKLQotICAvLyBT
ZXQgZGVmYXVsdCBlbnVtIHZhbHVlIG9ubHkgZm9yIHByb3RvMiBtYXAgZmllbGQgd2hvc2UgdmFs
dWUgaXMgZW51bSB0eXBlLgotICB2b2lkIFNldERlZmF1bHRFbnVtVmFsdWUoKTsKLQotICAvLyBV
c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBwYXJzaW5nLiBDYWxsZXIgc2hvdWxkIHRha2Ug
dGhlIG93bmVyc2hpcC4KLSAgRW50cnlUeXBlKiBOZXdFbnRyeSgpIGNvbnN0OwotICAvLyBVc2Vk
IGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzZXJpYWxpemluZyBlbnVtIHZhbHVlIHR5cGUuIENh
bGxlciBzaG91bGQKLSAgLy8gdGFrZSB0aGUgb3duZXJzaGlwLgotICBFbnRyeVR5cGUqIE5ld0Vu
dW1FbnRyeVdyYXBwZXIoY29uc3QgS2V5JiBrZXksIGNvbnN0IFQgdCkgY29uc3Q7Ci0gIC8vIFVz
ZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHNlcmlhbGl6aW5nIG90aGVyIHZhbHVlIHR5cGVz
LiBDYWxsZXIgc2hvdWxkCi0gIC8vIHRha2UgdGhlIG93bmVyc2hpcC4KLSAgRW50cnlUeXBlKiBO
ZXdFbnRyeVdyYXBwZXIoY29uc3QgS2V5JiBrZXksIGNvbnN0IFQmIHQpIGNvbnN0OwotCi0gcHJv
dGVjdGVkOgotICAvLyBDb252ZW5pZW50IG1ldGhvZHMgdG8gZ2V0IGludGVybmFsIGdvb2dsZTo6
cHJvdG9idWY6Ok1hcAotICB2aXJ0dWFsIGNvbnN0IE1hcDxLZXksIFQ+JiBHZXRJbnRlcm5hbE1h
cCgpIGNvbnN0OwotICB2aXJ0dWFsIE1hcDxLZXksIFQ+KiBNdXRhYmxlSW50ZXJuYWxNYXAoKTsK
LQotIHByaXZhdGU6Ci0gIHR5cGVkZWYgdm9pZCBEZXN0cnVjdG9yU2tpcHBhYmxlXzsKLQotICBB
cmVuYSogYXJlbmFfOwotICBNYXA8S2V5LCBUPiogbWFwXzsKLQotICBmcmllbmQgY2xhc3MgOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrZXlfd2lyZV90
eXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUgdmFsdWVfd2lyZV90eXBl
LAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci1NYXBGaWVsZExpdGU8S2V5LCBU
LCBrZXlfd2lyZV90eXBlLCB2YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgICAgZGVmYXVsdF9l
bnVtX3ZhbHVlPjo6TWFwRmllbGRMaXRlKCkKLSAgICA6IGFyZW5hXyhOVUxMKSB7Ci0gIG1hcF8g
PSBuZXcgTWFwPEtleSwgVD47Ci0gIFNldERlZmF1bHRFbnVtVmFsdWUoKTsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6
RmllbGRUeXBlIGtleV93aXJlX3R5cGUsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxk
VHlwZSB2YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4K
LU1hcEZpZWxkTGl0ZTxLZXksIFQsIGtleV93aXJlX3R5cGUsIHZhbHVlX3dpcmVfdHlwZSwKLSAg
ICAgICAgICAgICBkZWZhdWx0X2VudW1fdmFsdWU+OjpNYXBGaWVsZExpdGUoQXJlbmEqIGFyZW5h
KQotICA6IGFyZW5hXyhhcmVuYSkgewotICBtYXBfID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8TWFw
PEtleSwgVD4gPihhcmVuYSk7Ci0gIFNldERlZmF1bHRFbnVtVmFsdWUoKTsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6
RmllbGRUeXBlIGtleV93aXJlX3R5cGUsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxk
VHlwZSB2YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4K
LU1hcEZpZWxkTGl0ZTxLZXksIFQsIGtleV93aXJlX3R5cGUsIHZhbHVlX3dpcmVfdHlwZSwKLSAg
ICAgICAgICAgICBkZWZhdWx0X2VudW1fdmFsdWU+Ojp+TWFwRmllbGRMaXRlKCkgewotICBkZWxl
dGUgbWFwXzsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAg
ICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtleV93aXJlX3R5cGUsCi0gICAgICAgICAg
V2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSB2YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgaW50
IGRlZmF1bHRfZW51bV92YWx1ZT4KLWNvbnN0IE1hcDxLZXksIFQ+JgotTWFwRmllbGRMaXRlPEtl
eSwgVCwga2V5X3dpcmVfdHlwZSwgdmFsdWVfd2lyZV90eXBlLAotICAgICAgICAgICAgIGRlZmF1
bHRfZW51bV92YWx1ZT46OkdldE1hcCgpIGNvbnN0IHsKLSAgcmV0dXJuICptYXBfOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAgICAgIFdpcmVGb3JtYXRM
aXRlOjpGaWVsZFR5cGUga2V5X3dpcmVfdHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6
RmllbGRUeXBlIHZhbHVlX3dpcmVfdHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3Zh
bHVlPgotTWFwPEtleSwgVD4qCi1NYXBGaWVsZExpdGU8S2V5LCBULCBrZXlfd2lyZV90eXBlLCB2
YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgICAgZGVmYXVsdF9lbnVtX3ZhbHVlPjo6TXV0YWJs
ZU1hcCgpIHsKLSAgcmV0dXJuIG1hcF87Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrZXlfd2lyZV90
eXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUgdmFsdWVfd2lyZV90eXBl
LAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci1pbnQKLU1hcEZpZWxkTGl0ZTxL
ZXksIFQsIGtleV93aXJlX3R5cGUsIHZhbHVlX3dpcmVfdHlwZSwKLSAgICAgICAgICAgICBkZWZh
dWx0X2VudW1fdmFsdWU+OjpzaXplKCkgY29uc3QgewotICByZXR1cm4gbWFwXy0+c2l6ZSgpOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAgICAgIFdpcmVG
b3JtYXRMaXRlOjpGaWVsZFR5cGUga2V5X3dpcmVfdHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0
TGl0ZTo6RmllbGRUeXBlIHZhbHVlX3dpcmVfdHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9l
bnVtX3ZhbHVlPgotdm9pZAotTWFwRmllbGRMaXRlPEtleSwgVCwga2V5X3dpcmVfdHlwZSwgdmFs
dWVfd2lyZV90eXBlLAotICAgICAgICAgICAgIGRlZmF1bHRfZW51bV92YWx1ZT46OkNsZWFyKCkg
ewotICBtYXBfLT5jbGVhcigpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBULAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga2V5X3dpcmVfdHlwZSwK
LSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIHZhbHVlX3dpcmVfdHlwZSwKLSAg
ICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVlPgotdm9pZAotTWFwRmllbGRMaXRlPEtleSwg
VCwga2V5X3dpcmVfdHlwZSwgdmFsdWVfd2lyZV90eXBlLAotICAgICAgICAgICAgIGRlZmF1bHRf
ZW51bV92YWx1ZT46Ok1lcmdlRnJvbSgKLSAgICBjb25zdCBNYXBGaWVsZExpdGUmIG90aGVyKSB7
Ci0gIGZvciAodHlwZW5hbWUgTWFwPEtleSwgVD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb3RoZXIu
bWFwXy0+YmVnaW4oKTsKLSAgICAgICBpdCAhPSBvdGhlci5tYXBfLT5lbmQoKTsgKytpdCkgewot
ICAgICgqbWFwXylbaXQtPmZpcnN0XSA9IGl0LT5zZWNvbmQ7Ci0gIH0KLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6Rmll
bGRUeXBlIGtleV93aXJlX3R5cGUsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlw
ZSB2YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4KLXZv
aWQKLU1hcEZpZWxkTGl0ZTxLZXksIFQsIGtleV93aXJlX3R5cGUsIHZhbHVlX3dpcmVfdHlwZSwK
LSAgICAgICAgICAgICBkZWZhdWx0X2VudW1fdmFsdWU+OjpTd2FwKAotICAgIE1hcEZpZWxkTGl0
ZSogb3RoZXIpIHsKLSAgc3RkOjpzd2FwKG1hcF8sIG90aGVyLT5tYXBfKTsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6
RmllbGRUeXBlIGtleV93aXJlX3R5cGUsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxk
VHlwZSB2YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZT4K
LXZvaWQKLU1hcEZpZWxkTGl0ZTxLZXksIFQsIGtleV93aXJlX3R5cGUsIHZhbHVlX3dpcmVfdHlw
ZSwKLSAgICAgICAgICAgICBkZWZhdWx0X2VudW1fdmFsdWU+OjpTZXREZWZhdWx0RW51bVZhbHVl
KCkgewotICBNdXRhYmxlSW50ZXJuYWxNYXAoKS0+U2V0RGVmYXVsdEVudW1WYWx1ZShkZWZhdWx0
X2VudW1fdmFsdWUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAot
ICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga2V5X3dpcmVfdHlwZSwKLSAgICAg
ICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIHZhbHVlX3dpcmVfdHlwZSwKLSAgICAgICAg
ICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVlPgotY29uc3QgTWFwPEtleSwgVD4mCi1NYXBGaWVsZExp
dGU8S2V5LCBULCBrZXlfd2lyZV90eXBlLCB2YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgICAg
ZGVmYXVsdF9lbnVtX3ZhbHVlPjo6R2V0SW50ZXJuYWxNYXAoKSBjb25zdCB7Ci0gIHJldHVybiAq
bWFwXzsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVCwKLSAgICAgICAg
ICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGtleV93aXJlX3R5cGUsCi0gICAgICAgICAgV2ly
ZUZvcm1hdExpdGU6OkZpZWxkVHlwZSB2YWx1ZV93aXJlX3R5cGUsCi0gICAgICAgICAgaW50IGRl
ZmF1bHRfZW51bV92YWx1ZT4KLU1hcDxLZXksIFQ+KgotTWFwRmllbGRMaXRlPEtleSwgVCwga2V5
X3dpcmVfdHlwZSwgdmFsdWVfd2lyZV90eXBlLAotICAgICAgICAgICAgIGRlZmF1bHRfZW51bV92
YWx1ZT46Ok11dGFibGVJbnRlcm5hbE1hcCgpIHsKLSAgcmV0dXJuIG1hcF87Ci19Ci0KLSNkZWZp
bmUgRW50cnlUeXBlIFwKLSAgTWFwRW50cnlMaXRlPEtleSwgVCwga2V5X3dpcmVfdHlwZSwgdmFs
dWVfd2lyZV90eXBlLCBkZWZhdWx0X2VudW1fdmFsdWU+Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFQsCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBrZXlf
d2lyZV90eXBlLAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUgdmFsdWVfd2ly
ZV90eXBlLAotICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWU+Ci1FbnRyeVR5cGUqCi1N
YXBGaWVsZExpdGU8S2V5LCBULCBrZXlfd2lyZV90eXBlLCB2YWx1ZV93aXJlX3R5cGUsCi0gICAg
ICAgICAgICAgZGVmYXVsdF9lbnVtX3ZhbHVlPjo6TmV3RW50cnkoKSBjb25zdCB7Ci0gIGlmIChh
cmVuYV8gPT0gTlVMTCkgewotICAgIHJldHVybiBuZXcgRW50cnlUeXBlKCk7Ci0gIH0gZWxzZSB7
Ci0gICAgcmV0dXJuIEFyZW5hOjpDcmVhdGVNZXNzYWdlPEVudHJ5VHlwZT4oYXJlbmFfKTsKLSAg
fQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAgICAgIFdp
cmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUga2V5X3dpcmVfdHlwZSwKLSAgICAgICAgICBXaXJlRm9y
bWF0TGl0ZTo6RmllbGRUeXBlIHZhbHVlX3dpcmVfdHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVs
dF9lbnVtX3ZhbHVlPgotRW50cnlUeXBlKgotTWFwRmllbGRMaXRlPEtleSwgVCwga2V5X3dpcmVf
dHlwZSwgdmFsdWVfd2lyZV90eXBlLAotICAgICAgICAgICAgIGRlZmF1bHRfZW51bV92YWx1ZT46
Ok5ld0VudW1FbnRyeVdyYXBwZXIoY29uc3QgS2V5JiBrZXksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUIHQpIGNvbnN0IHsKLSAg
cmV0dXJuIEVudHJ5VHlwZTo6RW51bVdyYXAoa2V5LCB0LCBhcmVuYV8pOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpG
aWVsZFR5cGUga2V5X3dpcmVfdHlwZSwKLSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6RmllbGRU
eXBlIHZhbHVlX3dpcmVfdHlwZSwKLSAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVlPgot
RW50cnlUeXBlKgotTWFwRmllbGRMaXRlPEtleSwgVCwga2V5X3dpcmVfdHlwZSwgdmFsdWVfd2ly
ZV90eXBlLAotICAgICAgICAgICAgIGRlZmF1bHRfZW51bV92YWx1ZT46Ok5ld0VudHJ5V3JhcHBl
cihjb25zdCBLZXkmIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVCYgdCkgY29uc3QgewotICByZXR1cm4gRW50cnlUeXBlOjpXcmFw
KGtleSwgdCwgYXJlbmFfKTsKLX0KLQotI3VuZGVmIEVudHJ5VHlwZQotCi0vLyBUcnVlIGlmIElz
SW5pdGlhbGl6ZWQoKSBpcyB0cnVlIGZvciB2YWx1ZSBmaWVsZCBpbiBhbGwgZWxlbWVudHMgb2Yg
dC4gVCBpcwotLy8gZXhwZWN0ZWQgdG8gYmUgbWVzc2FnZS4gIEl0J3MgdXNlZnVsIHRvIGhhdmUg
dGhpcyBoZWxwZXIgaGVyZSB0byBrZWVwIHRoZQotLy8gcHJvdG9idWYgY29tcGlsZXIgZnJvbSBl
dmVyIGhhdmluZyB0byBlbWl0IGxvb3BzIGluIElzSW5pdGlhbGl6ZWQoKSBtZXRob2RzLgotLy8g
V2Ugd2FudCB0aGUgQysrIGNvbXBpbGVyIHRvIGlubGluZSB0aGlzIG9yIG5vdCBhcyBpdCBzZWVz
IGZpdC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQ+Ci1ib29sIEFsbEFyZUlu
aXRpYWxpemVkKGNvbnN0IE1hcDxLZXksIFQ+JiB0KSB7Ci0gIGZvciAodHlwZW5hbWUgTWFwPEtl
eSwgVD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdC5iZWdpbigpOyBpdCAhPSB0LmVuZCgpOwotICAg
ICAgICsraXQpIHsKLSAgICBpZiAoIWl0LT5zZWNvbmQuSXNJbml0aWFsaXplZCgpKSByZXR1cm4g
ZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5h
bAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNl
bmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX01BUF9GSUVMRF9MSVRFX0hfXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZF90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L21hcF9maWVsZF90ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjNkNDJm
MzBlNGJiN2Y2YmQyYWNiYTIzZDVkZjY5NTBiOTY1YzU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfdGVz
dC5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ5NCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZu
ZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVk
X3B0ci5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2lu
Zy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvYXJlbmEuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFw
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hX3Rlc3RfdXRpbC5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfdW5pdHRlc3QucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvbWFwX3Rlc3RfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0
dGVzdC5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfaW5sLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9m
b3JtYXRfbGl0ZV9pbmwuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0K
LXVzaW5nIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM7Ci0KLWNsYXNzIE1hcEZpZWxkQmFzZVN0dWIg
OiBwdWJsaWMgTWFwRmllbGRCYXNlIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgdm9pZCBJbnRlcm5h
bEFyZW5hQ29uc3RydWN0YWJsZV87Ci0gIHR5cGVkZWYgdm9pZCBEZXN0cnVjdG9yU2tpcHBhYmxl
XzsKLSAgTWFwRmllbGRCYXNlU3R1YigpIHt9Ci0gIGV4cGxpY2l0IE1hcEZpZWxkQmFzZVN0dWIo
QXJlbmEqIGFyZW5hKSA6IE1hcEZpZWxkQmFzZShhcmVuYSkge30KLSAgdm9pZCBTeW5jUmVwZWF0
ZWRGaWVsZFdpdGhNYXAoKSBjb25zdCB7Ci0gICAgTWFwRmllbGRCYXNlOjpTeW5jUmVwZWF0ZWRG
aWVsZFdpdGhNYXAoKTsKLSAgfQotICB2b2lkIFN5bmNNYXBXaXRoUmVwZWF0ZWRGaWVsZCgpIGNv
bnN0IHsKLSAgICBNYXBGaWVsZEJhc2U6OlN5bmNNYXBXaXRoUmVwZWF0ZWRGaWVsZCgpOwotICB9
Ci0gIC8vIEdldCB1bmRlcmxpbmVkIHJlcGVhdGVkIGZpZWxkIHdpdGhvdXQgc3luY2hyb25pemlu
ZyBtYXAuCi0gIFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4qIEludGVybmFsUmVwZWF0ZWRGaWVs
ZCgpIHsKLSAgICByZXR1cm4gcmVwZWF0ZWRfZmllbGRfOwotICB9Ci0gIGJvb2wgSXNNYXBDbGVh
bigpIHsgcmV0dXJuIHN0YXRlXyAhPSAwOyB9Ci0gIGJvb2wgSXNSZXBlYXRlZENsZWFuKCkgeyBy
ZXR1cm4gc3RhdGVfICE9IDE7IH0KLSAgdm9pZCBTZXRNYXBEaXJ0eSgpIHsgc3RhdGVfID0gMDsg
fQotICB2b2lkIFNldFJlcGVhdGVkRGlydHkoKSB7IHN0YXRlXyA9IDE7IH0KLSAgYm9vbCBDb250
YWluc01hcEtleShjb25zdCBNYXBLZXkmIG1hcF9rZXkpIGNvbnN0IHsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLSAgYm9vbCBJbnNlcnRPckxvb2t1cE1hcFZhbHVlKGNvbnN0IE1hcEtleSYgbWFw
X2tleSwgTWFwVmFsdWVSZWYqIHZhbCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBib29s
IERlbGV0ZU1hcFZhbHVlKGNvbnN0IE1hcEtleSYgbWFwX2tleSkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICBib29sIEVxdWFsSXRlcmF0b3IoY29uc3QgTWFwSXRlcmF0b3ImIGEsIGNvbnN0
IE1hcEl0ZXJhdG9yJiBiKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGludCBz
aXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICB2b2lkIE1hcEJlZ2luKE1hcEl0ZXJhdG9yKiBt
YXBfaXRlcikgY29uc3Qge30KLSAgdm9pZCBNYXBFbmQoTWFwSXRlcmF0b3IqIG1hcF9pdGVyKSBj
b25zdCB7fQotICB2b2lkIEluaXRpYWxpemVJdGVyYXRvcihNYXBJdGVyYXRvciogbWFwX2l0ZXIp
IGNvbnN0IHt9Ci0gIHZvaWQgRGVsZXRlSXRlcmF0b3IoTWFwSXRlcmF0b3IqIG1hcF9pdGVyKSBj
b25zdCB7fQotICB2b2lkIENvcHlJdGVyYXRvcihNYXBJdGVyYXRvciogdGhpc19pdGVyYXRvciwK
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFwSXRlcmF0b3ImIG90aGVyX2l0ZXJhdG9yKSBj
b25zdCB7fQotICB2b2lkIEluY3JlYXNlSXRlcmF0b3IoTWFwSXRlcmF0b3IqIG1hcF9pdGVyKSBj
b25zdCB7fQotICB2b2lkIFNldERlZmF1bHRNZXNzYWdlRW50cnkoY29uc3QgTWVzc2FnZSogbWVz
c2FnZSkgY29uc3Qge30KLSAgY29uc3QgTWVzc2FnZSogR2V0RGVmYXVsdE1lc3NhZ2VFbnRyeSgp
IGNvbnN0IHsgcmV0dXJuIE5VTEw7IH0KLX07Ci0KLWNsYXNzIE1hcEZpZWxkQmFzZVByaW1pdGl2
ZVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIHR5cGVkZWYg
TWFwRmllbGQ8aW50MzIsIGludDMyLCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9JTlQzMiwKLSAgICAg
ICAgICAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9JTlQzMiwgZmFsc2U+IE1hcEZpZWxk
VHlwZTsKLQotICBNYXBGaWVsZEJhc2VQcmltaXRpdmVUZXN0KCkgewotICAgIC8vIEdldCBkZXNj
cmlwdG9ycwotICAgIG1hcF9kZXNjcmlwdG9yXyA9IHVuaXR0ZXN0OjpUZXN0TWFwOjpkZXNjcmlw
dG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9p
bnQzMl9pbnQzMiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC0+bWVzc2FnZV90eXBlKCk7
Ci0gICAga2V5X2Rlc2NyaXB0b3JfID0gbWFwX2Rlc2NyaXB0b3JfLT5GaW5kRmllbGRCeU5hbWUo
ImtleSIpOwotICAgIHZhbHVlX2Rlc2NyaXB0b3JfID0gbWFwX2Rlc2NyaXB0b3JfLT5GaW5kRmll
bGRCeU5hbWUoInZhbHVlIik7Ci0KLSAgICAvLyBCdWlsZCBtYXAgZmllbGQKLSAgICBkZWZhdWx0
X2VudHJ5XyA9Ci0gICAgICAgIE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFjdG9yeSgpLT5H
ZXRQcm90b3R5cGUobWFwX2Rlc2NyaXB0b3JfKTsKLSAgICBtYXBfZmllbGRfLnJlc2V0KG5ldyBN
YXBGaWVsZFR5cGUoZGVmYXVsdF9lbnRyeV8pKTsKLSAgICBtYXBfZmllbGRfYmFzZV8gPSBtYXBf
ZmllbGRfLmdldCgpOwotICAgIG1hcF8gPSBtYXBfZmllbGRfLT5NdXRhYmxlTWFwKCk7Ci0gICAg
aW5pdGlhbF92YWx1ZV9tYXBfWzBdID0gMTAwOwotICAgIGluaXRpYWxfdmFsdWVfbWFwX1sxXSA9
IDEwMTsKLSAgICBtYXBfLT5pbnNlcnQoaW5pdGlhbF92YWx1ZV9tYXBfLmJlZ2luKCksIGluaXRp
YWxfdmFsdWVfbWFwXy5lbmQoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIG1hcF8tPnNpemUoKSk7Ci0g
IH0KLQotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1hcEZpZWxkVHlwZT4gbWFwX2Zp
ZWxkXzsKLSAgTWFwRmllbGRCYXNlKiBtYXBfZmllbGRfYmFzZV87Ci0gIE1hcDxpbnQzMiwgaW50
MzI+KiBtYXBfOwotICBjb25zdCBEZXNjcmlwdG9yKiBtYXBfZGVzY3JpcHRvcl87Ci0gIGNvbnN0
IEZpZWxkRGVzY3JpcHRvcioga2V5X2Rlc2NyaXB0b3JfOwotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIHZhbHVlX2Rlc2NyaXB0b3JfOwotICBjb25zdCBNZXNzYWdlKiBkZWZhdWx0X2VudHJ5XzsK
LSAgc3RkOjptYXA8aW50MzIsIGludDMyPiBpbml0aWFsX3ZhbHVlX21hcF87ICAvLyBjb3B5IG9m
IGluaXRpYWwgdmFsdWVzIGluc2VydGVkCi19OwotCi1URVNUX0YoTWFwRmllbGRCYXNlUHJpbWl0
aXZlVGVzdCwgU3BhY2VVc2VkRXhjbHVkaW5nU2VsZikgewotICBFWFBFQ1RfTFQoMCwgbWFwX2Zp
ZWxkX2Jhc2VfLT5TcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCkpOwotfQotCi1URVNUX0YoTWFwRmll
bGRCYXNlUHJpbWl0aXZlVGVzdCwgR2V0UmVwZWF0ZWRGaWVsZCkgewotICBjb25zdCBSZXBlYXRl
ZFB0ckZpZWxkPE1lc3NhZ2U+JiByZXBlYXRlZCA9Ci0gICAgICByZWludGVycHJldF9jYXN0PGNv
bnN0IFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4mPigKLSAgICAgICAgICBtYXBfZmllbGRfYmFz
ZV8tPkdldFJlcGVhdGVkRmllbGQoKSk7Ci0gIEVYUEVDVF9FUSgyLCByZXBlYXRlZC5zaXplKCkp
OwotICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdGVkLnNpemUoKTsgaSsrKSB7Ci0gICAgY29u
c3QgTWVzc2FnZSYgbWVzc2FnZSA9IHJlcGVhdGVkLkdldChpKTsKLSAgICBpbnQga2V5ID0gbWVz
c2FnZS5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKG1lc3NhZ2UsIGtleV9kZXNjcmlwdG9yXyk7
Ci0gICAgaW50IHZhbHVlID0gbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKG1lc3Nh
Z2UsIHZhbHVlX2Rlc2NyaXB0b3JfKTsKLSAgICBFWFBFQ1RfRVEodmFsdWUsIGluaXRpYWxfdmFs
dWVfbWFwX1trZXldKTsKLSAgfQotfQotCi1URVNUX0YoTWFwRmllbGRCYXNlUHJpbWl0aXZlVGVz
dCwgTXV0YWJsZVJlcGVhdGVkRmllbGQpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPiog
cmVwZWF0ZWQgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxSZXBlYXRlZFB0ckZpZWxkPE1lc3Nh
Z2U+Kj4oCi0gICAgICAgICAgbWFwX2ZpZWxkX2Jhc2VfLT5NdXRhYmxlUmVwZWF0ZWRGaWVsZCgp
KTsKLSAgRVhQRUNUX0VRKDIsIHJlcGVhdGVkLT5zaXplKCkpOwotICBmb3IgKGludCBpID0gMDsg
aSA8IHJlcGVhdGVkLT5zaXplKCk7IGkrKykgewotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2Ug
PSByZXBlYXRlZC0+R2V0KGkpOwotICAgIGludCBrZXkgPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24o
KS0+R2V0SW50MzIobWVzc2FnZSwga2V5X2Rlc2NyaXB0b3JfKTsKLSAgICBpbnQgdmFsdWUgPSBt
ZXNzYWdlLkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIobWVzc2FnZSwgdmFsdWVfZGVzY3JpcHRv
cl8pOwotICAgIEVYUEVDVF9FUSh2YWx1ZSwgaW5pdGlhbF92YWx1ZV9tYXBfW2tleV0pOwotICB9
Ci19Ci0KLVRFU1RfRihNYXBGaWVsZEJhc2VQcmltaXRpdmVUZXN0LCBBcmVuYSkgewotICAvLyBB
bGxvY2F0ZSBhIGxhcmdlIGluaXRpYWwgYmxvY2sgdG8gYXZvaWQgbWFsbG9jcyBkdXJpbmcgaG9v
a2VkIHRlc3QuCi0gIHN0ZDo6dmVjdG9yPGNoYXI+IGFyZW5hX2Jsb2NrKDEyOCAqIDEwMjQpOwot
ICBBcmVuYU9wdGlvbnMgb3B0aW9uczsKLSAgb3B0aW9ucy5pbml0aWFsX2Jsb2NrID0gJmFyZW5h
X2Jsb2NrWzBdOwotICBvcHRpb25zLmluaXRpYWxfYmxvY2tfc2l6ZSA9IGFyZW5hX2Jsb2NrLnNp
emUoKTsKLSAgQXJlbmEgYXJlbmEob3B0aW9ucyk7Ci0KLSAgewotICAgIC8vIFRPRE8obGl1amlz
aSk6IFJlLXdyaXRlIHRoZSB0ZXN0IHRvIGVuc3VyZSB0aGUgbWVtb3J5IGZvciB0aGUgbWFwIGFu
ZAotICAgIC8vIHJlcGVhdGVkIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGZyb20gYXJlbmFzLgotICAg
IC8vIE5vSGVhcENoZWNrZXIgbm9faGVhcDsKLQotICAgIE1hcEZpZWxkVHlwZSogbWFwX2ZpZWxk
ID0KLSAgICAgICAgQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8TWFwRmllbGRUeXBlPigmYXJlbmEsIGRl
ZmF1bHRfZW50cnlfKTsKLQotICAgIC8vIFNldCBjb250ZW50IGluIG1hcAotICAgICgqbWFwX2Zp
ZWxkLT5NdXRhYmxlTWFwKCkpWzEwMF0gPSAxMDE7Ci0KLSAgICAvLyBUcmlnZ2VyIGNvbnZlcnNp
b24gdG8gcmVwZWF0ZWQgZmllbGQuCi0gICAgbWFwX2ZpZWxkLT5HZXRSZXBlYXRlZEZpZWxkKCk7
Ci0gIH0KLQotICB7Ci0gICAgLy8gVE9ETyhsaXVqaXNpKTogUmUtd3JpdGUgdGhlIHRlc3QgdG8g
ZW5zdXJlIHRoZSBtZW1vcnkgZm9yIHRoZSBtYXAgYW5kCi0gICAgLy8gcmVwZWF0ZWQgZmllbGRz
IGFyZSBhbGxvY2F0ZWQgZnJvbSBhcmVuYXMuCi0gICAgLy8gTm9IZWFwQ2hlY2tlciBub19oZWFw
OwotCi0gICAgTWFwRmllbGRCYXNlU3R1YiogbWFwX2ZpZWxkID0KLSAgICAgICAgQXJlbmE6OkNy
ZWF0ZU1lc3NhZ2U8TWFwRmllbGRCYXNlU3R1Yj4oJmFyZW5hKTsKLQotICAgIC8vIFRyaWdnZXIg
Y29udmVyc2lvbiB0byByZXBlYXRlZCBmaWVsZC4KLSAgICBFWFBFQ1RfVFJVRShtYXBfZmllbGQt
Pk11dGFibGVSZXBlYXRlZEZpZWxkKCkgIT0gTlVMTCk7Ci0gIH0KLX0KLQotbmFtZXNwYWNlIHsK
LWVudW0gU3RhdGUgeyBDTEVBTiwgTUFQX0RJUlRZLCBSRVBFQVRFRF9ESVJUWSB9OwotfSAgLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQotCi1jbGFzcyBNYXBGaWVsZFN0YXRlVGVzdAotICAgIDogcHVi
bGljIHRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08U3RhdGU+IHsKLSBwdWJsaWM6Ci0gcHJvdGVjdGVk
OgotICB0eXBlZGVmIE1hcEZpZWxkPGludDMyLCBpbnQzMiwgV2lyZUZvcm1hdExpdGU6OlRZUEVf
SU5UMzIsCi0gICAgICAgICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6OlRZUEVfSU5UMzIsIGZh
bHNlPiBNYXBGaWVsZFR5cGU7Ci0gIHR5cGVkZWYgTWFwRmllbGRMaXRlPGludDMyLCBpbnQzMiwg
V2lyZUZvcm1hdExpdGU6OlRZUEVfSU5UMzIsCi0gICAgICAgICAgICAgICAgICAgICAgIFdpcmVG
b3JtYXRMaXRlOjpUWVBFX0lOVDMyLCBmYWxzZT4gTWFwRmllbGRMaXRlVHlwZTsKLSAgTWFwRmll
bGRTdGF0ZVRlc3QoKSA6IHN0YXRlXyhHZXRQYXJhbSgpKSB7Ci0gICAgLy8gQnVpbGQgbWFwIGZp
ZWxkCi0gICAgY29uc3QgRGVzY3JpcHRvciogbWFwX2Rlc2NyaXB0b3IgPQotICAgICAgICB1bml0
dGVzdDo6VGVzdE1hcDo6ZGVzY3JpcHRvcigpCi0gICAgICAgICAgICAtPkZpbmRGaWVsZEJ5TmFt
ZSgibWFwX2ludDMyX2ludDMyIikKLSAgICAgICAgICAgIC0+bWVzc2FnZV90eXBlKCk7Ci0gICAg
ZGVmYXVsdF9lbnRyeV8gPQotICAgICAgICBNZXNzYWdlRmFjdG9yeTo6Z2VuZXJhdGVkX2ZhY3Rv
cnkoKS0+R2V0UHJvdG90eXBlKG1hcF9kZXNjcmlwdG9yKTsKLSAgICBtYXBfZmllbGRfLnJlc2V0
KG5ldyBNYXBGaWVsZFR5cGUoZGVmYXVsdF9lbnRyeV8pKTsKLSAgICBtYXBfZmllbGRfYmFzZV8g
PSBtYXBfZmllbGRfLmdldCgpOwotCi0gICAgRXhwZWN0KG1hcF9maWVsZF8uZ2V0KCksIE1BUF9E
SVJUWSwgMCwgMCwgdHJ1ZSk7Ci0gICAgc3dpdGNoIChzdGF0ZV8pIHsKLSAgICAgIGNhc2UgQ0xF
QU46Ci0gICAgICAgIEFkZE9uZVN0aWxsQ2xlYW4obWFwX2ZpZWxkXy5nZXQoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBNQVBfRElSVFk6Ci0gICAgICAgIE1ha2VNYXBEaXJ0eShtYXBf
ZmllbGRfLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFJFUEVBVEVEX0RJUlRZ
OgotICAgICAgICBNYWtlUmVwZWF0ZWREaXJ0eShtYXBfZmllbGRfLmdldCgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICB2
b2lkIEFkZE9uZVN0aWxsQ2xlYW4oTWFwRmllbGRUeXBlKiBtYXBfZmllbGQpIHsKLSAgICBNYXBG
aWVsZEJhc2UqIG1hcF9maWVsZF9iYXNlID0gbWFwX2ZpZWxkOwotICAgIE1hcDxpbnQzMiwgaW50
MzI+KiBtYXAgPSBtYXBfZmllbGQtPk11dGFibGVNYXAoKTsKLSAgICAoKm1hcClbMF0gPSAwOwot
ICAgIG1hcF9maWVsZF9iYXNlLT5HZXRSZXBlYXRlZEZpZWxkKCk7Ci0gICAgRXhwZWN0KG1hcF9m
aWVsZCwgQ0xFQU4sIDEsIDEsIGZhbHNlKTsKLSAgfQotCi0gIHZvaWQgTWFrZU1hcERpcnR5KE1h
cEZpZWxkVHlwZSogbWFwX2ZpZWxkKSB7Ci0gICAgTWFwPGludDMyLCBpbnQzMj4qIG1hcCA9IG1h
cF9maWVsZC0+TXV0YWJsZU1hcCgpOwotICAgICgqbWFwKVswXSA9IDA7Ci0gICAgRXhwZWN0KG1h
cF9maWVsZCwgTUFQX0RJUlRZLCAxLCAwLCB0cnVlKTsKLSAgfQotCi0gIHZvaWQgTWFrZVJlcGVh
dGVkRGlydHkoTWFwRmllbGRUeXBlKiBtYXBfZmllbGQpIHsKLSAgICBNYWtlTWFwRGlydHkobWFw
X2ZpZWxkKTsKLSAgICBNYXBGaWVsZEJhc2UqIG1hcF9maWVsZF9iYXNlID0gbWFwX2ZpZWxkOwot
ICAgIG1hcF9maWVsZF9iYXNlLT5NdXRhYmxlUmVwZWF0ZWRGaWVsZCgpOwotICAgIE1hcDxpbnQz
MiwgaW50MzI+KiBtYXAgPSBpbXBsaWNpdF9jYXN0PE1hcEZpZWxkTGl0ZVR5cGUqPihtYXBfZmll
bGQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPk1hcEZpZWxkTGl0ZVR5cGU6
Ok11dGFibGVNYXAoKTsKLSAgICBtYXAtPmNsZWFyKCk7Ci0KLSAgICBFeHBlY3QobWFwX2ZpZWxk
LCBSRVBFQVRFRF9ESVJUWSwgMCwgMSwgZmFsc2UpOwotICB9Ci0KLSAgdm9pZCBFeHBlY3QoTWFw
RmllbGRUeXBlKiBtYXBfZmllbGQsIFN0YXRlIHN0YXRlLCBpbnQgbWFwX3NpemUsCi0gICAgICAg
ICAgICAgIGludCByZXBlYXRlZF9zaXplLCBib29sIGlzX3JlcGVhdGVkX251bGwpIHsKLSAgICBN
YXBGaWVsZEJhc2UqIG1hcF9maWVsZF9iYXNlID0gbWFwX2ZpZWxkOwotICAgIE1hcEZpZWxkQmFz
ZVN0dWIqIHN0dWIgPQotICAgICAgICByZWludGVycHJldF9jYXN0PE1hcEZpZWxkQmFzZVN0dWIq
PihtYXBfZmllbGRfYmFzZSk7Ci0KLSAgICBNYXA8aW50MzIsIGludDMyPiogbWFwID0gaW1wbGlj
aXRfY2FzdDxNYXBGaWVsZExpdGVUeXBlKj4obWFwX2ZpZWxkKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLT5NYXBGaWVsZExpdGVUeXBlOjpNdXRhYmxlTWFwKCk7Ci0gICAgUmVw
ZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPiogcmVwZWF0ZWRfZmllbGQgPSBzdHViLT5JbnRlcm5hbFJl
cGVhdGVkRmllbGQoKTsKLQotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgIGNhc2UgTUFQX0RJ
UlRZOgotICAgICAgICBFWFBFQ1RfRkFMU0Uoc3R1Yi0+SXNNYXBDbGVhbigpKTsKLSAgICAgICAg
RVhQRUNUX1RSVUUoc3R1Yi0+SXNSZXBlYXRlZENsZWFuKCkpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgUkVQRUFURURfRElSVFk6Ci0gICAgICAgIEVYUEVDVF9UUlVFKHN0dWItPklzTWFw
Q2xlYW4oKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShzdHViLT5Jc1JlcGVhdGVkQ2xlYW4oKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDTEVBTjoKLSAgICAgICAgRVhQRUNUX1RSVUUo
c3R1Yi0+SXNNYXBDbGVhbigpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoc3R1Yi0+SXNSZXBlYXRl
ZENsZWFuKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEZBSUwo
KTsKLSAgICB9Ci0KLSAgICBFWFBFQ1RfRVEobWFwX3NpemUsIG1hcC0+c2l6ZSgpKTsKLSAgICBp
ZiAoaXNfcmVwZWF0ZWRfbnVsbCkgewotICAgICAgRVhQRUNUX1RSVUUocmVwZWF0ZWRfZmllbGQg
PT0gTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEVYUEVDVF9FUShyZXBlYXRlZF9zaXplLCBy
ZXBlYXRlZF9maWVsZC0+c2l6ZSgpKTsKLSAgICB9Ci0gIH0KLQotICBnb29nbGU6OnByb3RvYnVm
OjpzY29wZWRfcHRyPE1hcEZpZWxkVHlwZT4gbWFwX2ZpZWxkXzsKLSAgTWFwRmllbGRCYXNlKiBt
YXBfZmllbGRfYmFzZV87Ci0gIFN0YXRlIHN0YXRlXzsKLSAgY29uc3QgTWVzc2FnZSogZGVmYXVs
dF9lbnRyeV87Ci19OwotCi1JTlNUQU5USUFURV9URVNUX0NBU0VfUChNYXBGaWVsZFN0YXRlVGVz
dEluc3RhbmNlLCBNYXBGaWVsZFN0YXRlVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDo6
dGVzdGluZzo6VmFsdWVzKENMRUFOLCBNQVBfRElSVFksIFJFUEVBVEVEX0RJUlRZKSk7Ci0KLVRF
U1RfUChNYXBGaWVsZFN0YXRlVGVzdCwgR2V0TWFwKSB7Ci0gIG1hcF9maWVsZF8tPkdldE1hcCgp
OwotICBpZiAoc3RhdGVfICE9IE1BUF9ESVJUWSkgewotICAgIEV4cGVjdChtYXBfZmllbGRfLmdl
dCgpLCBDTEVBTiwgMSwgMSwgZmFsc2UpOwotICB9IGVsc2UgewotICAgIEV4cGVjdChtYXBfZmll
bGRfLmdldCgpLCBNQVBfRElSVFksIDEsIDAsIHRydWUpOwotICB9Ci19Ci0KLVRFU1RfUChNYXBG
aWVsZFN0YXRlVGVzdCwgTXV0YWJsZU1hcCkgewotICBtYXBfZmllbGRfLT5NdXRhYmxlTWFwKCk7
Ci0gIGlmIChzdGF0ZV8gIT0gTUFQX0RJUlRZKSB7Ci0gICAgRXhwZWN0KG1hcF9maWVsZF8uZ2V0
KCksIE1BUF9ESVJUWSwgMSwgMSwgZmFsc2UpOwotICB9IGVsc2UgewotICAgIEV4cGVjdChtYXBf
ZmllbGRfLmdldCgpLCBNQVBfRElSVFksIDEsIDAsIHRydWUpOwotICB9Ci19Ci0KLVRFU1RfUChN
YXBGaWVsZFN0YXRlVGVzdCwgTWVyZ2VGcm9tQ2xlYW4pIHsKLSAgTWFwRmllbGRUeXBlIG90aGVy
KGRlZmF1bHRfZW50cnlfKTsKLSAgQWRkT25lU3RpbGxDbGVhbigmb3RoZXIpOwotCi0gIG1hcF9m
aWVsZF8tPk1lcmdlRnJvbShvdGhlcik7Ci0KLSAgaWYgKHN0YXRlXyAhPSBNQVBfRElSVFkpIHsK
LSAgICBFeHBlY3QobWFwX2ZpZWxkXy5nZXQoKSwgTUFQX0RJUlRZLCAxLCAxLCBmYWxzZSk7Ci0g
IH0gZWxzZSB7Ci0gICAgRXhwZWN0KG1hcF9maWVsZF8uZ2V0KCksIE1BUF9ESVJUWSwgMSwgMCwg
dHJ1ZSk7Ci0gIH0KLQotICBFeHBlY3QoJm90aGVyLCBDTEVBTiwgMSwgMSwgZmFsc2UpOwotfQot
Ci1URVNUX1AoTWFwRmllbGRTdGF0ZVRlc3QsIE1lcmdlRnJvbU1hcERpcnR5KSB7Ci0gIE1hcEZp
ZWxkVHlwZSBvdGhlcihkZWZhdWx0X2VudHJ5Xyk7Ci0gIE1ha2VNYXBEaXJ0eSgmb3RoZXIpOwot
Ci0gIG1hcF9maWVsZF8tPk1lcmdlRnJvbShvdGhlcik7Ci0KLSAgaWYgKHN0YXRlXyAhPSBNQVBf
RElSVFkpIHsKLSAgICBFeHBlY3QobWFwX2ZpZWxkXy5nZXQoKSwgTUFQX0RJUlRZLCAxLCAxLCBm
YWxzZSk7Ci0gIH0gZWxzZSB7Ci0gICAgRXhwZWN0KG1hcF9maWVsZF8uZ2V0KCksIE1BUF9ESVJU
WSwgMSwgMCwgdHJ1ZSk7Ci0gIH0KLQotICBFeHBlY3QoJm90aGVyLCBNQVBfRElSVFksIDEsIDAs
IHRydWUpOwotfQotCi1URVNUX1AoTWFwRmllbGRTdGF0ZVRlc3QsIE1lcmdlRnJvbVJlcGVhdGVk
RGlydHkpIHsKLSAgTWFwRmllbGRUeXBlIG90aGVyKGRlZmF1bHRfZW50cnlfKTsKLSAgTWFrZVJl
cGVhdGVkRGlydHkoJm90aGVyKTsKLQotICBtYXBfZmllbGRfLT5NZXJnZUZyb20ob3RoZXIpOwot
Ci0gIGlmIChzdGF0ZV8gIT0gTUFQX0RJUlRZKSB7Ci0gICAgRXhwZWN0KG1hcF9maWVsZF8uZ2V0
KCksIE1BUF9ESVJUWSwgMSwgMSwgZmFsc2UpOwotICB9IGVsc2UgewotICAgIEV4cGVjdChtYXBf
ZmllbGRfLmdldCgpLCBNQVBfRElSVFksIDEsIDAsIHRydWUpOwotICB9Ci0KLSAgRXhwZWN0KCZv
dGhlciwgQ0xFQU4sIDEsIDEsIGZhbHNlKTsKLX0KLQotVEVTVF9QKE1hcEZpZWxkU3RhdGVUZXN0
LCBTd2FwQ2xlYW4pIHsKLSAgTWFwRmllbGRUeXBlIG90aGVyKGRlZmF1bHRfZW50cnlfKTsKLSAg
QWRkT25lU3RpbGxDbGVhbigmb3RoZXIpOwotCi0gIG1hcF9maWVsZF8tPlN3YXAoJm90aGVyKTsK
LQotICBFeHBlY3QobWFwX2ZpZWxkXy5nZXQoKSwgQ0xFQU4sIDEsIDEsIGZhbHNlKTsKLQotICBz
d2l0Y2ggKHN0YXRlXykgewotICAgIGNhc2UgQ0xFQU46Ci0gICAgICBFeHBlY3QoJm90aGVyLCBD
TEVBTiwgMSwgMSwgZmFsc2UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNQVBfRElSVFk6Ci0g
ICAgICBFeHBlY3QoJm90aGVyLCBNQVBfRElSVFksIDEsIDAsIHRydWUpOwotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSRVBFQVRFRF9ESVJUWToKLSAgICAgIEV4cGVjdCgmb3RoZXIsIFJFUEVBVEVE
X0RJUlRZLCAwLCAxLCBmYWxzZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
YnJlYWs7Ci0gIH0KLX0KLQotVEVTVF9QKE1hcEZpZWxkU3RhdGVUZXN0LCBTd2FwTWFwRGlydHkp
IHsKLSAgTWFwRmllbGRUeXBlIG90aGVyKGRlZmF1bHRfZW50cnlfKTsKLSAgTWFrZU1hcERpcnR5
KCZvdGhlcik7Ci0KLSAgbWFwX2ZpZWxkXy0+U3dhcCgmb3RoZXIpOwotCi0gIEV4cGVjdChtYXBf
ZmllbGRfLmdldCgpLCBNQVBfRElSVFksIDEsIDAsIHRydWUpOwotCi0gIHN3aXRjaCAoc3RhdGVf
KSB7Ci0gICAgY2FzZSBDTEVBTjoKLSAgICAgIEV4cGVjdCgmb3RoZXIsIENMRUFOLCAxLCAxLCBm
YWxzZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIE1BUF9ESVJUWToKLSAgICAgIEV4cGVjdCgm
b3RoZXIsIE1BUF9ESVJUWSwgMSwgMCwgdHJ1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFJF
UEVBVEVEX0RJUlRZOgotICAgICAgRXhwZWN0KCZvdGhlciwgUkVQRUFURURfRElSVFksIDAsIDEs
IGZhbHNlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQot
fQotCi1URVNUX1AoTWFwRmllbGRTdGF0ZVRlc3QsIFN3YXBSZXBlYXRlZERpcnR5KSB7Ci0gIE1h
cEZpZWxkVHlwZSBvdGhlcihkZWZhdWx0X2VudHJ5Xyk7Ci0gIE1ha2VSZXBlYXRlZERpcnR5KCZv
dGhlcik7Ci0KLSAgbWFwX2ZpZWxkXy0+U3dhcCgmb3RoZXIpOwotCi0gIEV4cGVjdChtYXBfZmll
bGRfLmdldCgpLCBSRVBFQVRFRF9ESVJUWSwgMCwgMSwgZmFsc2UpOwotCi0gIHN3aXRjaCAoc3Rh
dGVfKSB7Ci0gICAgY2FzZSBDTEVBTjoKLSAgICAgIEV4cGVjdCgmb3RoZXIsIENMRUFOLCAxLCAx
LCBmYWxzZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIE1BUF9ESVJUWToKLSAgICAgIEV4cGVj
dCgmb3RoZXIsIE1BUF9ESVJUWSwgMSwgMCwgdHJ1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNl
IFJFUEVBVEVEX0RJUlRZOgotICAgICAgRXhwZWN0KCZvdGhlciwgUkVQRUFURURfRElSVFksIDAs
IDEsIGZhbHNlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAg
fQotfQotCi1URVNUX1AoTWFwRmllbGRTdGF0ZVRlc3QsIENsZWFyKSB7Ci0gIG1hcF9maWVsZF8t
PkNsZWFyKCk7Ci0KLSAgaWYgKHN0YXRlXyAhPSBNQVBfRElSVFkpIHsKLSAgICBFeHBlY3QobWFw
X2ZpZWxkXy5nZXQoKSwgTUFQX0RJUlRZLCAwLCAxLCBmYWxzZSk7Ci0gIH0gZWxzZSB7Ci0gICAg
RXhwZWN0KG1hcF9maWVsZF8uZ2V0KCksIE1BUF9ESVJUWSwgMCwgMCwgdHJ1ZSk7Ci0gIH0KLX0K
LQotVEVTVF9QKE1hcEZpZWxkU3RhdGVUZXN0LCBTcGFjZVVzZWRFeGNsdWRpbmdTZWxmKSB7Ci0g
IG1hcF9maWVsZF9iYXNlXy0+U3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpOwotCi0gIHN3aXRjaCAo
c3RhdGVfKSB7Ci0gICAgY2FzZSBDTEVBTjoKLSAgICAgIEV4cGVjdChtYXBfZmllbGRfLmdldCgp
LCBDTEVBTiwgMSwgMSwgZmFsc2UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNQVBfRElSVFk6
Ci0gICAgICBFeHBlY3QobWFwX2ZpZWxkXy5nZXQoKSwgTUFQX0RJUlRZLCAxLCAwLCB0cnVlKTsK
LSAgICAgIGJyZWFrOwotICAgIGNhc2UgUkVQRUFURURfRElSVFk6Ci0gICAgICBFeHBlY3QobWFw
X2ZpZWxkXy5nZXQoKSwgUkVQRUFURURfRElSVFksIDAsIDEsIGZhbHNlKTsKLSAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1URVNUX1AoTWFwRmllbGRT
dGF0ZVRlc3QsIEdldE1hcEZpZWxkKSB7Ci0gIG1hcF9maWVsZF9iYXNlXy0+R2V0UmVwZWF0ZWRG
aWVsZCgpOwotCi0gIGlmIChzdGF0ZV8gIT0gUkVQRUFURURfRElSVFkpIHsKLSAgICBFeHBlY3Qo
bWFwX2ZpZWxkXy5nZXQoKSwgQ0xFQU4sIDEsIDEsIGZhbHNlKTsKLSAgfSBlbHNlIHsKLSAgICBF
eHBlY3QobWFwX2ZpZWxkXy5nZXQoKSwgUkVQRUFURURfRElSVFksIDAsIDEsIGZhbHNlKTsKLSAg
fQotfQotCi1URVNUX1AoTWFwRmllbGRTdGF0ZVRlc3QsIE11dGFibGVNYXBGaWVsZCkgewotICBt
YXBfZmllbGRfYmFzZV8tPk11dGFibGVSZXBlYXRlZEZpZWxkKCk7Ci0KLSAgaWYgKHN0YXRlXyAh
PSBSRVBFQVRFRF9ESVJUWSkgewotICAgIEV4cGVjdChtYXBfZmllbGRfLmdldCgpLCBSRVBFQVRF
RF9ESVJUWSwgMSwgMSwgZmFsc2UpOwotICB9IGVsc2UgewotICAgIEV4cGVjdChtYXBfZmllbGRf
LmdldCgpLCBSRVBFQVRFRF9ESVJUWSwgMCwgMSwgZmFsc2UpOwotICB9Ci19Ci0KLQotfSAgLy8g
bmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVz
cGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfbGl0ZV90ZXN0
X3V0aWwuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX2xpdGVfdGVzdF91dGlsLmNjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjViNGQ2MzAxNWY5YzlhNzExNjgwZTY1Y2JhMmU1
MmU5NTIzNWQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfbGl0ZV90ZXN0X3V0aWwuY2MKKysrIC9kZXYvbnVsbApA
QCAtMSw5MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfbGl0ZV90ZXN0X3V0aWwuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvbWFwX2xpdGVfdW5pdHRlc3QucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvbWFwX3Rlc3RfdXRpbF9pbXBsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFt
ZXNwYWNlIHByb3RvYnVmIHsKLQotdm9pZCBNYXBMaXRlVGVzdFV0aWw6OlNldE1hcEZpZWxkcyh1
bml0dGVzdDo6VGVzdE1hcExpdGUqIG1lc3NhZ2UpIHsKLSAgTWFwVGVzdFV0aWxJbXBsOjpTZXRN
YXBGaWVsZHM8dW5pdHRlc3Q6Ok1hcEVudW1MaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bml0dGVzdDo6TUFQX0VOVU1fQkFSX0xJVEUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuaXR0ZXN0OjpNQVBfRU5VTV9CQVpfTElURT4obWVzc2FnZSk7Ci19Ci0K
LXZvaWQgTWFwTGl0ZVRlc3RVdGlsOjpTZXRBcmVuYU1hcEZpZWxkcyh1bml0dGVzdDo6VGVzdEFy
ZW5hTWFwTGl0ZSogbWVzc2FnZSkgewotICBNYXBUZXN0VXRpbEltcGw6OlNldEFyZW5hTWFwRmll
bGRzPHVuaXR0ZXN0OjpNYXBFbnVtTGl0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bml0dGVzdDo6TUFQX0VOVU1fQkFSX0xJVEUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5pdHRlc3Q6Ok1BUF9FTlVNX0JBWl9MSVRFPihtZXNzYWdlKTsK
LX0KLQotdm9pZCBNYXBMaXRlVGVzdFV0aWw6OlNldE1hcEZpZWxkc0luaXRpYWxpemVkKHVuaXR0
ZXN0OjpUZXN0TWFwTGl0ZSogbWVzc2FnZSkgewotICBNYXBUZXN0VXRpbEltcGw6OlNldE1hcEZp
ZWxkc0luaXRpYWxpemVkKG1lc3NhZ2UpOwotfQotCi12b2lkIE1hcExpdGVUZXN0VXRpbDo6TW9k
aWZ5TWFwRmllbGRzKHVuaXR0ZXN0OjpUZXN0TWFwTGl0ZSogbWVzc2FnZSkgewotICBNYXBUZXN0
VXRpbEltcGw6Ok1vZGlmeU1hcEZpZWxkczx1bml0dGVzdDo6TWFwRW51bUxpdGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0OjpNQVBfRU5VTV9GT09fTElURT4o
bWVzc2FnZSk7Ci19Ci0KLXZvaWQgTWFwTGl0ZVRlc3RVdGlsOjpFeHBlY3RDbGVhcihjb25zdCB1
bml0dGVzdDo6VGVzdE1hcExpdGUmIG1lc3NhZ2UpIHsKLSAgTWFwVGVzdFV0aWxJbXBsOjpFeHBl
Y3RDbGVhcihtZXNzYWdlKTsKLX0KLQotdm9pZCBNYXBMaXRlVGVzdFV0aWw6OkV4cGVjdE1hcEZp
ZWxkc1NldChjb25zdCB1bml0dGVzdDo6VGVzdE1hcExpdGUmIG1lc3NhZ2UpIHsKLSAgTWFwVGVz
dFV0aWxJbXBsOjpFeHBlY3RNYXBGaWVsZHNTZXQ8dW5pdHRlc3Q6Ok1hcEVudW1MaXRlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdDo6TUFQX0VOVU1fQkFS
X0xJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0OjpN
QVBfRU5VTV9CQVpfTElURT4obWVzc2FnZSk7Ci19Ci0KLXZvaWQgTWFwTGl0ZVRlc3RVdGlsOjpF
eHBlY3RBcmVuYU1hcEZpZWxkc1NldCgKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdEFyZW5hTWFw
TGl0ZSYgbWVzc2FnZSkgewotICBNYXBUZXN0VXRpbEltcGw6OkV4cGVjdEFyZW5hTWFwRmllbGRz
U2V0PHVuaXR0ZXN0OjpNYXBFbnVtTGl0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bml0dGVzdDo6TUFQX0VOVU1fQkFSX0xJVEUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Q6Ok1BUF9FTlVNX0JBWl9MSVRF
PigKLSAgICAgIG1lc3NhZ2UpOwotfQotCi12b2lkIE1hcExpdGVUZXN0VXRpbDo6RXhwZWN0TWFw
RmllbGRzU2V0SW5pdGlhbGl6ZWQoCi0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RNYXBMaXRlJiBt
ZXNzYWdlKSB7Ci0gIE1hcFRlc3RVdGlsSW1wbDo6RXhwZWN0TWFwRmllbGRzU2V0SW5pdGlhbGl6
ZWQ8dW5pdHRlc3Q6Ok1hcEVudW1MaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0OjpNQVBfRU5VTV9GT09fTElURT4oCi0gICAgICBt
ZXNzYWdlKTsKLX0KLQotdm9pZCBNYXBMaXRlVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc01vZGlm
aWVkKAotICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0TWFwTGl0ZSYgbWVzc2FnZSkgewotICBNYXBU
ZXN0VXRpbEltcGw6OkV4cGVjdE1hcEZpZWxkc01vZGlmaWVkPHVuaXR0ZXN0OjpNYXBFbnVtTGl0
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdDo6
TUFQX0VOVU1fQkFSX0xJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5pdHRlc3Q6Ok1BUF9FTlVNX0ZPT19MSVRFPigKLSAgICAgIG1lc3NhZ2UpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfbGl0ZV90ZXN0X3V0aWwuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9tYXBfbGl0ZV90ZXN0X3V0aWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjZkZWRkZTVkYjM2YTg4NmNkZDdkMDQwM2I1MmM2ZWNmYWMxZDMxZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
bWFwX2xpdGVfdGVzdF91dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZf
TUFQX0xJVEVfVEVTVF9VVElMX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfTUFQX0xJVEVf
VEVTVF9VVElMX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF9saXRlX3VuaXR0
ZXN0LnBiLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQot
Y2xhc3MgTWFwTGl0ZVRlc3RVdGlsIHsKLSBwdWJsaWM6Ci0gIC8vIFNldCBldmVyeSBmaWVsZCBp
biB0aGUgVGVzdE1hcExpdGUgbWVzc2FnZSB0byBhIHVuaXF1ZSB2YWx1ZS4KLSAgc3RhdGljIHZv
aWQgU2V0TWFwRmllbGRzKHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWFwTGl0ZSogbWVzc2FnZSk7
Ci0KLSAgLy8gU2V0IGV2ZXJ5IGZpZWxkIGluIHRoZSBUZXN0QXJlbmFNYXBMaXRlIG1lc3NhZ2Ug
dG8gYSB1bmlxdWUgdmFsdWUuCi0gIHN0YXRpYyB2b2lkIFNldEFyZW5hTWFwRmllbGRzKHByb3Rv
YnVmX3VuaXR0ZXN0OjpUZXN0QXJlbmFNYXBMaXRlKiBtZXNzYWdlKTsKLQotICAvLyBTZXQgZXZl
cnkgZmllbGQgaW4gdGhlIG1lc3NhZ2UgdG8gYSBkZWZhdWx0IHZhbHVlLgotICBzdGF0aWMgdm9p
ZCBTZXRNYXBGaWVsZHNJbml0aWFsaXplZChwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1hcExpdGUq
IG1lc3NhZ2UpOwotCi0gIC8vIE1vZGlmeSBhbGwgdGhlIG1hcCBmaWVsZHMgb2YgdGhlIG1lc3Nh
Z2UgKHdoaWNoIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbgotICAvLyBpbml0aWFsaXplZCB3aXRo
IFNldE1hcEZpZWxkcygpKS4KLSAgc3RhdGljIHZvaWQgTW9kaWZ5TWFwRmllbGRzKHByb3RvYnVm
X3VuaXR0ZXN0OjpUZXN0TWFwTGl0ZSogbWVzc2FnZSk7Ci0KLSAgLy8gQ2hlY2sgdGhhdCBhbGwg
ZmllbGRzIGhhdmUgdGhlIHZhbHVlcyB0aGF0IHRoZXkgc2hvdWxkIGhhdmUgYWZ0ZXIKLSAgLy8g
U2V0TWFwRmllbGRzKCkgaXMgY2FsbGVkLgotICBzdGF0aWMgdm9pZCBFeHBlY3RNYXBGaWVsZHNT
ZXQoY29uc3QgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNYXBMaXRlJiBtZXNzYWdlKTsKLQotICAv
LyBDaGVjayB0aGF0IGFsbCBmaWVsZHMgaGF2ZSB0aGUgdmFsdWVzIHRoYXQgdGhleSBzaG91bGQg
aGF2ZSBhZnRlcgotICAvLyBTZXRNYXBGaWVsZHMoKSBpcyBjYWxsZWQgZm9yIFRlc3RBcmVuYU1h
cExpdGUuCi0gIHN0YXRpYyB2b2lkIEV4cGVjdEFyZW5hTWFwRmllbGRzU2V0KAotICAgICAgY29u
c3QgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBcmVuYU1hcExpdGUmIG1lc3NhZ2UpOwotCi0gIC8v
IENoZWNrIHRoYXQgYWxsIGZpZWxkcyBoYXZlIHRoZSB2YWx1ZXMgdGhhdCB0aGV5IHNob3VsZCBo
YXZlIGFmdGVyCi0gIC8vIFNldE1hcEZpZWxkc0luaXRpYWxpemVkKCkgaXMgY2FsbGVkLgotICBz
dGF0aWMgdm9pZCBFeHBlY3RNYXBGaWVsZHNTZXRJbml0aWFsaXplZCgKLSAgICAgIGNvbnN0IHBy
b3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWFwTGl0ZSYgbWVzc2FnZSk7Ci0KLSAgLy8gRXhwZWN0IHRo
YXQgdGhlIG1lc3NhZ2UgaXMgbW9kaWZpZWQgYXMgd291bGQgYmUgZXhwZWN0ZWQgZnJvbQotICAv
LyBNb2RpZnlNYXBGaWVsZHMoKS4KLSAgc3RhdGljIHZvaWQgRXhwZWN0TWFwRmllbGRzTW9kaWZp
ZWQoCi0gICAgICBjb25zdCBwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1hcExpdGUmIG1lc3NhZ2Up
OwotCi0gIC8vIENoZWNrIHRoYXQgYWxsIGZpZWxkcyBhcmUgZW1wdHkuCi0gIHN0YXRpYyB2b2lk
IEV4cGVjdENsZWFyKGNvbnN0IHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWFwTGl0ZSYgbWVzc2Fn
ZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdv
b2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfTUFQX0xJVEVfVEVTVF9VVElMX0hfXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9saXRlX3VuaXR0ZXN0LnByb3RvIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9saXRlX3VuaXR0ZXN0LnByb3RvCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwNTkyZGQ3YTYzNDhiZjQ1NWJiOTFlMzYyYTVhZDE4ODViMGI5Y2Fl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9tYXBfbGl0ZV91bml0dGVzdC5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDEz
MCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0g
InByb3RvMiI7Ci0KLW9wdGlvbiBjY19lbmFibGVfYXJlbmFzID0gdHJ1ZTsKLW9wdGlvbiBvcHRp
bWl6ZV9mb3IgPSBMSVRFX1JVTlRJTUU7Ci0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL3VuaXR0
ZXN0X2xpdGUucHJvdG8iOwotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fYXJl
bmFfbGl0ZS5wcm90byI7Ci0KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7Ci0KLW1lc3NhZ2Ug
VGVzdE1hcExpdGUgewotICBtYXA8aW50MzIgICAsIGludDMyICAgPiBtYXBfaW50MzJfaW50MzIg
ICAgICAgPSAxOwotICBtYXA8aW50NjQgICAsIGludDY0ICAgPiBtYXBfaW50NjRfaW50NjQgICAg
ICAgPSAyOwotICBtYXA8dWludDMyICAsIHVpbnQzMiAgPiBtYXBfdWludDMyX3VpbnQzMiAgICAg
PSAzOwotICBtYXA8dWludDY0ICAsIHVpbnQ2NCAgPiBtYXBfdWludDY0X3VpbnQ2NCAgICAgPSA0
OwotICBtYXA8c2ludDMyICAsIHNpbnQzMiAgPiBtYXBfc2ludDMyX3NpbnQzMiAgICAgPSA1Owot
ICBtYXA8c2ludDY0ICAsIHNpbnQ2NCAgPiBtYXBfc2ludDY0X3NpbnQ2NCAgICAgPSA2OwotICBt
YXA8Zml4ZWQzMiAsIGZpeGVkMzIgPiBtYXBfZml4ZWQzMl9maXhlZDMyICAgPSA3OwotICBtYXA8
Zml4ZWQ2NCAsIGZpeGVkNjQgPiBtYXBfZml4ZWQ2NF9maXhlZDY0ICAgPSA4OwotICBtYXA8c2Zp
eGVkMzIsIHNmaXhlZDMyPiBtYXBfc2ZpeGVkMzJfc2ZpeGVkMzIgPSA5OwotICBtYXA8c2ZpeGVk
NjQsIHNmaXhlZDY0PiBtYXBfc2ZpeGVkNjRfc2ZpeGVkNjQgPSAxMDsKLSAgbWFwPGludDMyICAg
LCBmbG9hdCAgID4gbWFwX2ludDMyX2Zsb2F0ICAgICAgID0gMTE7Ci0gIG1hcDxpbnQzMiAgICwg
ZG91YmxlICA+IG1hcF9pbnQzMl9kb3VibGUgICAgICA9IDEyOwotICBtYXA8Ym9vbCAgICAsIGJv
b2wgICAgPiBtYXBfYm9vbF9ib29sICAgICAgICAgPSAxMzsKLSAgbWFwPHN0cmluZyAgLCBzdHJp
bmcgID4gbWFwX3N0cmluZ19zdHJpbmcgICAgID0gMTQ7Ci0gIG1hcDxpbnQzMiAgICwgYnl0ZXMg
ICA+IG1hcF9pbnQzMl9ieXRlcyAgICAgICA9IDE1OwotICBtYXA8aW50MzIgICAsIE1hcEVudW1M
aXRlPiBtYXBfaW50MzJfZW51bSAgICAgPSAxNjsKLSAgbWFwPGludDMyICAgLCBGb3JlaWduTWVz
c2FnZUxpdGU+IG1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UgPSAxNzsKLSAgbWFwPGludDMyLCBp
bnQzMj4gdGVib3JpbmcgPSAxODsKLX0KLQotbWVzc2FnZSBUZXN0QXJlbmFNYXBMaXRlIHsKLSAg
bWFwPGludDMyICAgLCBpbnQzMiAgID4gbWFwX2ludDMyX2ludDMyICAgICAgID0gMTsKLSAgbWFw
PGludDY0ICAgLCBpbnQ2NCAgID4gbWFwX2ludDY0X2ludDY0ICAgICAgID0gMjsKLSAgbWFwPHVp
bnQzMiAgLCB1aW50MzIgID4gbWFwX3VpbnQzMl91aW50MzIgICAgID0gMzsKLSAgbWFwPHVpbnQ2
NCAgLCB1aW50NjQgID4gbWFwX3VpbnQ2NF91aW50NjQgICAgID0gNDsKLSAgbWFwPHNpbnQzMiAg
LCBzaW50MzIgID4gbWFwX3NpbnQzMl9zaW50MzIgICAgID0gNTsKLSAgbWFwPHNpbnQ2NCAgLCBz
aW50NjQgID4gbWFwX3NpbnQ2NF9zaW50NjQgICAgID0gNjsKLSAgbWFwPGZpeGVkMzIgLCBmaXhl
ZDMyID4gbWFwX2ZpeGVkMzJfZml4ZWQzMiAgID0gNzsKLSAgbWFwPGZpeGVkNjQgLCBmaXhlZDY0
ID4gbWFwX2ZpeGVkNjRfZml4ZWQ2NCAgID0gODsKLSAgbWFwPHNmaXhlZDMyLCBzZml4ZWQzMj4g
bWFwX3NmaXhlZDMyX3NmaXhlZDMyID0gOTsKLSAgbWFwPHNmaXhlZDY0LCBzZml4ZWQ2ND4gbWFw
X3NmaXhlZDY0X3NmaXhlZDY0ID0gMTA7Ci0gIG1hcDxpbnQzMiAgICwgZmxvYXQgICA+IG1hcF9p
bnQzMl9mbG9hdCAgICAgICA9IDExOwotICBtYXA8aW50MzIgICAsIGRvdWJsZSAgPiBtYXBfaW50
MzJfZG91YmxlICAgICAgPSAxMjsKLSAgbWFwPGJvb2wgICAgLCBib29sICAgID4gbWFwX2Jvb2xf
Ym9vbCAgICAgICAgID0gMTM7Ci0gIG1hcDxzdHJpbmcgICwgc3RyaW5nICA+IG1hcF9zdHJpbmdf
c3RyaW5nICAgICA9IDE0OwotICBtYXA8aW50MzIgICAsIGJ5dGVzICAgPiBtYXBfaW50MzJfYnl0
ZXMgICAgICAgPSAxNTsKLSAgbWFwPGludDMyICAgLCBNYXBFbnVtTGl0ZT4gbWFwX2ludDMyX2Vu
dW0gICAgID0gMTY7Ci0gIG1hcDxpbnQzMiAgICwgRm9yZWlnbk1lc3NhZ2VBcmVuYUxpdGU+IG1h
cF9pbnQzMl9mb3JlaWduX21lc3NhZ2UgPSAxNzsKLSAgbWFwPGludDMyLCAucHJvdG9idWZfdW5p
dHRlc3Rfbm9fYXJlbmEuRm9yZWlnbk1lc3NhZ2VMaXRlPgotICAgICAgbWFwX2ludDMyX2ZvcmVp
Z25fbWVzc2FnZV9ub19hcmVuYSA9IDE4OwotfQotCi0vLyBUZXN0IGVtYmVkZWQgbWVzc2FnZSB3
aXRoIHJlcXVpcmVkIGZpZWxkcwotbWVzc2FnZSBUZXN0UmVxdWlyZWRNZXNzYWdlTWFwTGl0ZSB7
Ci0gIG1hcDxpbnQzMiwgVGVzdFJlcXVpcmVkTGl0ZT4gbWFwX2ZpZWxkID0gMTsKLX0KLQotbWVz
c2FnZSBUZXN0RW51bU1hcExpdGUgewotICBtYXA8aW50MzIsIFByb3RvMk1hcEVudW1MaXRlPiBr
bm93bl9tYXBfZmllbGQgPSAxMDE7Ci0gIG1hcDxpbnQzMiwgUHJvdG8yTWFwRW51bUxpdGU+IHVu
a25vd25fbWFwX2ZpZWxkID0gMTAyOwotfQotCi1tZXNzYWdlIFRlc3RFbnVtTWFwUGx1c0V4dHJh
TGl0ZSB7Ci0gIG1hcDxpbnQzMiwgUHJvdG8yTWFwRW51bVBsdXNFeHRyYUxpdGU+IGtub3duX21h
cF9maWVsZCA9IDEwMTsKLSAgbWFwPGludDMyLCBQcm90bzJNYXBFbnVtUGx1c0V4dHJhTGl0ZT4g
dW5rbm93bl9tYXBfZmllbGQgPSAxMDI7Ci19Ci0KLW1lc3NhZ2UgVGVzdE1lc3NhZ2VNYXBMaXRl
IHsKLSAgbWFwPGludDMyLCBUZXN0QWxsVHlwZXNMaXRlPiBtYXBfaW50MzJfbWVzc2FnZSA9IDE7
Ci19Ci0KLWVudW0gUHJvdG8yTWFwRW51bUxpdGUgewotICBQUk9UTzJfTUFQX0VOVU1fRk9PX0xJ
VEUgPSAwOwotICBQUk9UTzJfTUFQX0VOVU1fQkFSX0xJVEUgPSAxOwotICBQUk9UTzJfTUFQX0VO
VU1fQkFaX0xJVEUgPSAyOwotfQotCi1lbnVtIFByb3RvMk1hcEVudW1QbHVzRXh0cmFMaXRlIHsK
LSAgRV9QUk9UTzJfTUFQX0VOVU1fRk9PX0xJVEUgICA9IDA7Ci0gIEVfUFJPVE8yX01BUF9FTlVN
X0JBUl9MSVRFICAgPSAxOwotICBFX1BST1RPMl9NQVBfRU5VTV9CQVpfTElURSAgID0gMjsKLSAg
RV9QUk9UTzJfTUFQX0VOVU1fRVhUUkFfTElURSA9IDM7Ci19Ci0KLWVudW0gTWFwRW51bUxpdGUg
ewotICBNQVBfRU5VTV9GT09fTElURSA9IDA7Ci0gIE1BUF9FTlVNX0JBUl9MSVRFID0gMTsKLSAg
TUFQX0VOVU1fQkFaX0xJVEUgPSAyOwotfQotCi1tZXNzYWdlIFRlc3RSZXF1aXJlZExpdGUgewot
ICByZXF1aXJlZCBpbnQzMiBhID0gMTsKLSAgcmVxdWlyZWQgaW50MzIgYiA9IDI7Ci0gIHJlcXVp
cmVkIGludDMyIGMgPSAzOwotfQotCi1tZXNzYWdlIEZvcmVpZ25NZXNzYWdlQXJlbmFMaXRlIHsK
LSAgb3B0aW9uYWwgaW50MzIgYyA9IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvbWFwX3Byb3RvMl91bml0dGVzdC5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfcHJv
dG8yX3VuaXR0ZXN0LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTZjYzU0
NjM3NTM4Y2I0ZTRhMjhiN2M2MTdkY2JlYmQ0Yjg0NmE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfcHJvdG8yX3Vu
aXR0ZXN0LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLy8gUHJvdG9jb2wg
QnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQg
MjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxv
cGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi0KLWltcG9ydCAi
Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydC5wcm90byI7Ci0KLS8vIFdlIGRvbid0IHB1
dCB0aGlzIGluIGEgcGFja2FnZSB3aXRoaW4gcHJvdG8yIGJlY2F1c2Ugd2UgbmVlZCB0byBtYWtl
IHN1cmUKLS8vIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGRvZXNuJ3QgZGVwZW5kIG9uIGJlaW5n
IGluIHRoZSBwcm90bzIgbmFtZXNwYWNlLgotLy8gSW4gbWFwX3Rlc3RfdXRpbC5oIHdlIGRvICJ1
c2luZyBuYW1lc3BhY2UgdW5pdHRlc3QgPSBwcm90b2J1Zl91bml0dGVzdCIuCi1wYWNrYWdlIHBy
b3RvYnVmX3VuaXR0ZXN0OwotCi1lbnVtIFByb3RvMk1hcEVudW0gewotICBQUk9UTzJfTUFQX0VO
VU1fRk9PICAgPSAwOwotICBQUk9UTzJfTUFQX0VOVU1fQkFSICAgPSAxOwotICBQUk9UTzJfTUFQ
X0VOVU1fQkFaICAgPSAyOwotfQotCi1lbnVtIFByb3RvMk1hcEVudW1QbHVzRXh0cmEgewotICBF
X1BST1RPMl9NQVBfRU5VTV9GT08gICA9IDA7Ci0gIEVfUFJPVE8yX01BUF9FTlVNX0JBUiAgID0g
MTsKLSAgRV9QUk9UTzJfTUFQX0VOVU1fQkFaICAgPSAyOwotICBFX1BST1RPMl9NQVBfRU5VTV9F
WFRSQSA9IDM7Ci19Ci0KLW1lc3NhZ2UgVGVzdEVudW1NYXAgewotICBtYXA8aW50MzIsIFByb3Rv
Mk1hcEVudW0+IGtub3duX21hcF9maWVsZCA9IDEwMTsKLSAgbWFwPGludDMyLCBQcm90bzJNYXBF
bnVtPiB1bmtub3duX21hcF9maWVsZCA9IDEwMjsKLX0KLQotbWVzc2FnZSBUZXN0RW51bU1hcFBs
dXNFeHRyYSB7Ci0gIG1hcDxpbnQzMiwgUHJvdG8yTWFwRW51bVBsdXNFeHRyYT4ga25vd25fbWFw
X2ZpZWxkID0gMTAxOwotICBtYXA8aW50MzIsIFByb3RvMk1hcEVudW1QbHVzRXh0cmE+IHVua25v
d25fbWFwX2ZpZWxkID0gMTAyOwotfQotCi1tZXNzYWdlIFRlc3RJbXBvcnRFbnVtTWFwIHsKLSAg
bWFwPGludDMyLCBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bUZvck1hcD4gaW1w
b3J0X2VudW1fYW1wID0gMTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBf
dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWQ0ZDZjMTNkMDU3YzAzMTQyODEyNDliNjU2M2E3MDIwZTlkNTBhZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvbWFwX3Rlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNzg4ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBIGhhY2sgdG8gaW5jbHVkZSB3
aW5kb3dzLmggZmlyc3QsIHdoaWNoIGVuc3VyZXMgdGhlIEdldE1lc3NhZ2UgbWFjcm8gY2FuCi0v
LyBiZSB1bmRlZmluZWQgd2hlbiB3ZSBpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29t
bW9uLmg+Ci0jaWYgZGVmaW5lZChfV0lOMzIpCi0jZGVmaW5lIF9XSU5TT0NLQVBJXyAgLy8gdG8g
YXZvaWQgcmUtZGVmaW5pdGlvbiBpbiBXaW5Tb2NrMi5oCi0jZGVmaW5lIE5PTUlOTUFYICAgICAg
Ly8gdG8gYXZvaWQgZGVmaW5pbmcgbWluL21heCBtYWNyb3MKLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0jZW5kaWYgIC8vIF9XSU4zMgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1l
bW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8c3N0
cmVhbT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvY2FzdHMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvc3R1YnMvc2NvcGVkX3B0ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9zdHJpbmdwcmludGYuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGlu
Zy9maWxlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hX3Rlc3RfdXRpbC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfcHJvdG8yX3VuaXR0ZXN0LnBiLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF91bml0dGVzdC5wYi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9tYXBfdGVzdF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rl
c3RfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wYi5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3Jp
cHRvcl9kYXRhYmFzZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9keW5hbWljX21lc3Nh
Z2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFwLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL21hcF9maWVsZF9pbmwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVz
c2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3RleHRfZm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9y
bWF0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGVfaW5sLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9pby90b2tlbml6ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3V0aWwvdGltZV91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0
aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3Vic3RpdHV0ZS5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLQotdXNpbmcgZ29vZ2xlOjpwcm90
b2J1Zjo6dW5pdHRlc3Q6OkZvcmVpZ25NZXNzYWdlOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6
dW5pdHRlc3Q6OlRlc3RBbGxUeXBlczsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OnVuaXR0ZXN0
OjpUZXN0TWFwOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dW5pdHRlc3Q6OlRlc3RSZWN1cnNp
dmVNYXBNZXNzYWdlOwotCi1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGludGVybmFs
IHsKLQotLy8gTWFwIEFQSSBUZXN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLS8vIFBhcmFtZXRlcml6ZWQgdGVzdHMgb24gd2hldGhlciB0
byB1c2Ugb2xkIHN0eWxlIG1hcHMuCi1jbGFzcyBNYXBJbXBsVGVzdCA6IHB1YmxpYyB0ZXN0aW5n
OjpUZXN0V2l0aFBhcmFtPGJvb2w+IHsKLSBwcm90ZWN0ZWQ6Ci0gIE1hcEltcGxUZXN0KCkKLSAg
ICAgIDogbWFwX3B0cl8obmV3IE1hcDxpbnQzMiwgaW50MzI+KEdldFBhcmFtKCkpKSwKLSAgICAg
ICAgbWFwXygqbWFwX3B0cl8pLAotICAgICAgICBjb25zdF9tYXBfKCptYXBfcHRyXykgewotICAg
IEVYUEVDVF9UUlVFKG1hcF8uZW1wdHkoKSk7Ci0gICAgRVhQRUNUX0VRKDAsIG1hcF8uc2l6ZSgp
KTsKLSAgfQotICB+TWFwSW1wbFRlc3QoKSB7fQotCi0gIHZvaWQgRXhwZWN0U2luZ2xlRWxlbWVu
dChpbnQzMiBrZXksIGludDMyIHZhbHVlKSB7Ci0gICAgRVhQRUNUX0ZBTFNFKG1hcF8uZW1wdHko
KSk7Ci0gICAgRVhQRUNUX0VRKDEsIG1hcF8uc2l6ZSgpKTsKLSAgICBFeHBlY3RFbGVtZW50KGtl
eSwgdmFsdWUpOwotICB9Ci0KLSAgdm9pZCBFeHBlY3RFbGVtZW50cyhjb25zdCBzdGQ6Om1hcDxp
bnQzMiwgaW50MzI+JiBtYXApIHsKLSAgICBFWFBFQ1RfRkFMU0UobWFwXy5lbXB0eSgpKTsKLSAg
ICBFWFBFQ1RfRVEobWFwLnNpemUoKSwgbWFwXy5zaXplKCkpOwotICAgIGZvciAoc3RkOjptYXA8
aW50MzIsIGludDMyPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsKLSAgICAgICAg
IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkgewotICAgICAgRXhwZWN0RWxlbWVudChpdC0+Zmlyc3Qs
IGl0LT5zZWNvbmQpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgRXhwZWN0RWxlbWVudChpbnQzMiBr
ZXksIGludDMyIHZhbHVlKSB7Ci0gICAgLy8gVGVzdCBtYXAgc2l6ZSBpcyBjb3JyZWN0LgotICAg
IEVYUEVDVF9FUSh2YWx1ZSwgbWFwX1trZXldKTsKLSAgICBFWFBFQ1RfRVEoMSwgbWFwXy5jb3Vu
dChrZXkpKTsKLQotICAgIC8vIENoZWNrIG11dGFibGUgYXQgYW5kIGZpbmQgd29yayBjb3JyZWN0
bHkuCi0gICAgRVhQRUNUX0VRKHZhbHVlLCBtYXBfLmF0KGtleSkpOwotICAgIE1hcDxpbnQzMiwg
aW50MzI+OjppdGVyYXRvciBpdCA9IG1hcF8uZmluZChrZXkpOwotCi0gICAgLy8gaW50ZXJhdG9y
IGRlcmVmZXJlbmNlYWJsZQotICAgIEVYUEVDVF9FUShrZXksICAgKCppdCkuZmlyc3QpOwotICAg
IEVYUEVDVF9FUSh2YWx1ZSwgKCppdCkuc2Vjb25kKTsKLSAgICBFWFBFQ1RfRVEoa2V5LCAgIGl0
LT5maXJzdCk7Ci0gICAgRVhQRUNUX0VRKHZhbHVlLCBpdC0+c2Vjb25kKTsKLQotICAgIC8vIGl0
ZXJhdG9yIG11dGFibGUKLSAgICAoKCppdCkuc2Vjb25kKSA9IHZhbHVlICsgMTsKLSAgICBFWFBF
Q1RfRVEodmFsdWUgKyAxLCBtYXBfW2tleV0pOwotICAgICgoKml0KS5zZWNvbmQpID0gdmFsdWU7
Ci0gICAgRVhQRUNUX0VRKHZhbHVlLCBtYXBfW2tleV0pOwotCi0gICAgaXQtPnNlY29uZCA9IHZh
bHVlICsgMTsKLSAgICBFWFBFQ1RfRVEodmFsdWUgKyAxLCBtYXBfW2tleV0pOwotICAgIGl0LT5z
ZWNvbmQgPSB2YWx1ZTsKLSAgICBFWFBFQ1RfRVEodmFsdWUsIG1hcF9ba2V5XSk7Ci0KLSAgICAv
LyBjb3B5IGNvbnN0cnVjdG9yCi0gICAgTWFwPGludDMyLCBpbnQzMj46Oml0ZXJhdG9yIGl0X2Nv
cHkgPSBpdDsKLSAgICBFWFBFQ1RfRVEoa2V5LCBpdF9jb3B5LT5maXJzdCk7Ci0gICAgRVhQRUNU
X0VRKHZhbHVlLCBpdF9jb3B5LT5zZWNvbmQpOwotCi0gICAgLy8gSW1tdXRhYmxlIEFQSSA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIC8vIENo
ZWNrIGltbXV0YWJsZSBhdCBhbmQgZmluZCB3b3JrIGNvcnJlY3RseS4KLSAgICBFWFBFQ1RfRVEo
dmFsdWUsIGNvbnN0X21hcF8uYXQoa2V5KSk7Ci0gICAgTWFwPGludDMyLCBpbnQzMj46OmNvbnN0
X2l0ZXJhdG9yIGNvbnN0X2l0ID0gY29uc3RfbWFwXy5maW5kKGtleSk7Ci0KLSAgICAvLyBpbnRl
cmF0b3IgZGVyZWZlcmVuY2VhYmxlCi0gICAgRVhQRUNUX0VRKGtleSwgKCpjb25zdF9pdCkuZmly
c3QpOwotICAgIEVYUEVDVF9FUSh2YWx1ZSwgKCpjb25zdF9pdCkuc2Vjb25kKTsKLSAgICBFWFBF
Q1RfRVEoa2V5LCBjb25zdF9pdC0+Zmlyc3QpOwotICAgIEVYUEVDVF9FUSh2YWx1ZSwgY29uc3Rf
aXQtPnNlY29uZCk7Ci0KLSAgICAvLyBjb3B5IGNvbnN0cnVjdG9yCi0gICAgTWFwPGludDMyLCBp
bnQzMj46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0X2NvcHkgPSBjb25zdF9pdDsKLSAgICBFWFBF
Q1RfRVEoa2V5LCBjb25zdF9pdF9jb3B5LT5maXJzdCk7Ci0gICAgRVhQRUNUX0VRKHZhbHVlLCBj
b25zdF9pdF9jb3B5LT5zZWNvbmQpOwotICB9Ci0KLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVk
X3B0cjxNYXA8aW50MzIsIGludDMyPiA+IG1hcF9wdHJfOwotICBNYXA8aW50MzIsIGludDMyPiYg
bWFwXzsKLSAgY29uc3QgTWFwPGludDMyLCBpbnQzMj4mIGNvbnN0X21hcF87Ci19OwotCi1URVNU
X1AoTWFwSW1wbFRlc3QsIE9wZXJhdG9yQnJhY2tldCkgewotICBpbnQzMiBrZXkgPSAwOwotICBp
bnQzMiB2YWx1ZTEgPSAxMDA7Ci0gIGludDMyIHZhbHVlMiA9IDEwMTsKLQotICBFWFBFQ1RfRVEo
MCwgbWFwX1trZXldKTsKLQotICBtYXBfW2tleV0gPSB2YWx1ZTE7Ci0gIEV4cGVjdFNpbmdsZUVs
ZW1lbnQoa2V5LCB2YWx1ZTEpOwotCi0gIG1hcF9ba2V5XSA9IHZhbHVlMjsKLSAgRXhwZWN0U2lu
Z2xlRWxlbWVudChrZXksIHZhbHVlMik7Ci19Ci0KLVRFU1RfUChNYXBJbXBsVGVzdCwgT3BlcmF0
b3JCcmFja2V0Tm9uRXhpc3QpIHsKLSAgaW50MzIga2V5ID0gMDsKLSAgaW50MzIgZGVmYXVsdF92
YWx1ZSA9IDA7Ci0KLSAgRVhQRUNUX0VRKGRlZmF1bHRfdmFsdWUsIG1hcF9ba2V5XSk7Ci0gIEV4
cGVjdFNpbmdsZUVsZW1lbnQoa2V5LCBkZWZhdWx0X3ZhbHVlKTsKLX0KLQotVEVTVF9QKE1hcElt
cGxUZXN0LCBNdXRhYmxlQXQpIHsKLSAgaW50MzIga2V5ID0gMDsKLSAgaW50MzIgdmFsdWUxID0g
MTAwOwotICBpbnQzMiB2YWx1ZTIgPSAxMDE7Ci0KLSAgbWFwX1trZXldID0gdmFsdWUxOwotICBF
eHBlY3RTaW5nbGVFbGVtZW50KGtleSwgdmFsdWUxKTsKLQotICBtYXBfLmF0KGtleSkgPSB2YWx1
ZTI7Ci0gIEV4cGVjdFNpbmdsZUVsZW1lbnQoa2V5LCB2YWx1ZTIpOwotfQotCi0jaWZkZWYgUFJP
VE9CVUZfSEFTX0RFQVRIX1RFU1QKLQotVEVTVF9QKE1hcEltcGxUZXN0LCBNdXRhYmxlQXROb25F
eGlzdERlYXRoVGVzdCkgewotICBFWFBFQ1RfREVBVEgobWFwXy5hdCgwKSwgIiIpOwotfQotCi1U
RVNUX1AoTWFwSW1wbFRlc3QsIEltbXV0YWJsZUF0Tm9uRXhpc3REZWF0aFRlc3QpIHsKLSAgRVhQ
RUNUX0RFQVRIKGNvbnN0X21hcF8uYXQoMCksICIiKTsKLX0KLQotVEVTVF9QKE1hcEltcGxUZXN0
LCBVc2FnZUVycm9ycykgewotICBNYXBLZXkga2V5OwotICBrZXkuU2V0SW50NjRWYWx1ZSgxKTsK
LSAgRVhQRUNUX0RFQVRIKGtleS5HZXRVSW50NjRWYWx1ZSgpLAotICAgICAgICAgICAgICAgIlBy
b3RvY29sIEJ1ZmZlciBtYXAgdXNhZ2UgZXJyb3I6XG4iCi0gICAgICAgICAgICAgICAiTWFwS2V5
OjpHZXRVSW50NjRWYWx1ZSB0eXBlIGRvZXMgbm90IG1hdGNoXG4iCi0gICAgICAgICAgICAgICAi
ICBFeHBlY3RlZCA6IHVpbnQ2NFxuIgotICAgICAgICAgICAgICAgIiAgQWN0dWFsICAgOiBpbnQ2
NCIpOwotCi0gIE1hcFZhbHVlUmVmIHZhbHVlOwotICBFWFBFQ1RfREVBVEgodmFsdWUuU2V0Rmxv
YXRWYWx1ZSgwLjEpLAotICAgICAgICAgICAgICAgIlByb3RvY29sIEJ1ZmZlciBtYXAgdXNhZ2Ug
ZXJyb3I6XG4iCi0gICAgICAgICAgICAgICAiTWFwVmFsdWVSZWY6OnR5cGUgTWFwVmFsdWVSZWYg
aXMgbm90IGluaXRpYWxpemVkLiIpOwotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0hBU19ERUFU
SF9URVNUCi0KLVRFU1RfUChNYXBJbXBsVGVzdCwgQ291bnROb25FeGlzdCkgewotICBFWFBFQ1Rf
RVEoMCwgbWFwXy5jb3VudCgwKSk7Ci19Ci0KLVRFU1RfUChNYXBJbXBsVGVzdCwgTXV0YWJsZUZp
bmROb25FeGlzdCkgewotICBFWFBFQ1RfVFJVRShtYXBfLmVuZCgpID09IG1hcF8uZmluZCgwKSk7
Ci19Ci0KLVRFU1RfUChNYXBJbXBsVGVzdCwgSW1tdXRhYmxlRmluZE5vbkV4aXN0KSB7Ci0gIEVY
UEVDVF9UUlVFKGNvbnN0X21hcF8uZW5kKCkgPT0gY29uc3RfbWFwXy5maW5kKDApKTsKLX0KLQot
VEVTVF9QKE1hcEltcGxUZXN0LCBDb25zdEVuZCkgewotICBFWFBFQ1RfVFJVRShjb25zdF9tYXBf
LmVuZCgpID09IGNvbnN0X21hcF8uY2VuZCgpKTsKLX0KLQotVEVTVF9QKE1hcEltcGxUZXN0LCBH
ZXRSZWZlcmVuY2VGcm9tSXRlcmF0b3IpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsr
KSB7Ci0gICAgbWFwX1tpXSA9IGk7Ci0gIH0KLQotICBmb3IgKE1hcDxpbnQzMiwgaW50MzI+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcF8uY2JlZ2luKCk7Ci0gICAgICAgaXQgIT0gbWFwXy5jZW5k
KCk7KSB7Ci0gICAgTWFwPGludDMyLCBpbnQzMj46OmNvbnN0X3JlZmVyZW5jZSBlbnRyeSA9ICpp
dCsrOwotICAgIEVYUEVDVF9FUShlbnRyeS5maXJzdCwgZW50cnkuc2Vjb25kKTsKLSAgfQotCi0g
IGZvciAoTWFwPGludDMyLCBpbnQzMj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29uc3RfbWFwXy5i
ZWdpbigpOwotICAgICAgIGl0ICE9IGNvbnN0X21hcF8uZW5kKCk7KSB7Ci0gICAgTWFwPGludDMy
LCBpbnQzMj46OmNvbnN0X3JlZmVyZW5jZSBlbnRyeSA9ICppdCsrOwotICAgIEVYUEVDVF9FUShl
bnRyeS5maXJzdCwgZW50cnkuc2Vjb25kKTsKLSAgfQotCi0gIGZvciAoTWFwPGludDMyLCBpbnQz
Mj46Oml0ZXJhdG9yIGl0ID0gbWFwXy5iZWdpbigpOyBpdCAhPSBtYXBfLmVuZCgpOykgewotICAg
IE1hcDxpbnQzMiwgaW50MzI+OjpyZWZlcmVuY2UgZW50cnkgPSAqaXQrKzsKLSAgICBFWFBFQ1Rf
RVEoZW50cnkuZmlyc3QgKyAxLCArK2VudHJ5LnNlY29uZCk7Ci0gIH0KLX0KLQotVEVTVF9QKE1h
cEltcGxUZXN0LCBJdGVyYXRvckJhc2ljKSB7Ci0gIG1hcF9bMF0gPSAwOwotCi0gIC8vIERlZmF1
bHQgY29uc3RydWN0aWJsZSAocGVyIGZvcndhcmQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzKS4KLSAg
TWFwPGludCwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgY2l0OwotICBNYXA8aW50LCBpbnQ+OjppdGVy
YXRvciBpdDsKLQotICBpdCA9IG1hcF8uYmVnaW4oKTsKLSAgY2l0ID0gaXQ7ICAvLyBDb252ZXJ0
cyB0byBjb25zdF9pdGVyYXRvcgotCi0gIC8vIENhbiBjb21wYXJlIGJldHdlZW4gdGhlbS4KLSAg
RVhQRUNUX1RSVUUoaXQgPT0gY2l0KTsKLSAgRVhQRUNUX0ZBTFNFKGNpdCAhPSBpdCk7Ci0KLSAg
Ly8gUHJlIGluY3JlbWVudC4KLSAgRVhQRUNUX0ZBTFNFKGl0ID09ICsrY2l0KTsKLQotICAvLyBQ
b3N0IGluY3JlbWVudC4KLSAgRVhQRUNUX0ZBTFNFKGl0KysgPT0gY2l0KTsKLSAgRVhQRUNUX1RS
VUUoaXQgPT0gY2l0KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yPgotc3RhdGlj
IGludDY0IG1lZGlhbihJdGVyYXRvciBpMCwgSXRlcmF0b3IgaTEpIHsKLSAgdmVjdG9yPGludDY0
PiB2KGkwLCBpMSk7Ci0gIHN0ZDo6bnRoX2VsZW1lbnQodi5iZWdpbigpLCB2LmJlZ2luKCkgKyB2
LnNpemUoKSAvIDIsIHYuZW5kKCkpOwotICByZXR1cm4gdlt2LnNpemUoKSAvIDJdOwotfQotCi1z
dGF0aWMgaW50NjQgTm93KCkgewotICByZXR1cm4gZ29vZ2xlOjpwcm90b2J1Zjo6dXRpbDo6VGlt
ZVV0aWw6OlRpbWVzdGFtcFRvTmFub3NlY29uZHMoCi0gICAgICBnb29nbGU6OnByb3RvYnVmOjp1
dGlsOjpUaW1lVXRpbDo6R2V0Q3VycmVudFRpbWUoKSk7Ci19Ci0KLS8vIEFyYml0cmFyeSBvZGQg
aW50ZWdlcnMgZm9yIGNyZWF0aW5nIHRlc3QgZGF0YS4KLXN0YXRpYyBpbnQgazAgPSA4MTIzOTg3
NzE7Ci1zdGF0aWMgaW50IGsxID0gMTMxMjkzODcxNzsKLXN0YXRpYyBpbnQgazIgPSAxMzIxNTU1
MzMzOwotCi0vLyBBIG5haXZlIGJlZ2luKCkgaW1wbGVtZW50YXRpb24gd2lsbCBjYXVzZSBiZWdp
bigpIHRvIGdldCBzbG93ZXIgYW5kIHNsb3dlcgotLy8gaWYgb25lIGVyYXNlcyBlbGVtZW50cyBh
dCB0aGUgImZyb250IiBvZiB0aGUgaGFzaCBtYXAsIGFuZCB3ZSdkIGxpa2UgdG8KLS8vIGF2b2lk
IHRoYXQsIGFzIHN0ZDo6dW5vcmRlcmVkX21hcCBkb2VzLgotVEVTVF9QKE1hcEltcGxUZXN0LCBC
ZWdpbklzRmFzdCkgewotICAvLyBEaXNhYmxlIHRoaXMgdGVzdCBmb3IgYm90aCBuZXcgYW5kIG9s
ZCBpbXBsZW1lbnRhdGlvbnMuCi0gIGlmICgvKkdldFBhcmFtKCkqL3RydWUpIHJldHVybjsKLSAg
TWFwPGludDMyLCBpbnQzMj4gbWFwKGZhbHNlKTsgIC8vIFRoaXMgdGVzdCB1c2VzIG5ldy1zdHls
ZSBtYXBzIG9ubHkuCi0gIGNvbnN0IGludCBrVGVzdFNpemUgPSAyNTAwMDA7Ci0gIC8vIENyZWF0
ZSBhIHJhbmRvbS1sb29raW5nIG1hcCBvZiBzaXplIG4uICBVc2Ugbm9uLW5lZ2F0aXZlIGludGVn
ZXIga2V5cy4KLSAgdWludDMyIGZyb2cgPSAxMjM5ODM7Ci0gIGludCBsYXN0X2tleSA9IDA7Ci0g
IGludCBjb3VudGVyID0gMDsKLSAgd2hpbGUgKG1hcC5zaXplKCkgPCBrVGVzdFNpemUpIHsKLSAg
ICBmcm9nICo9IHN0YXRpY19jYXN0PHVpbnQzMj4oazApOwotICAgIGZyb2cgXj0gZnJvZyA+PiAx
NzsKLSAgICBmcm9nICs9IGNvdW50ZXIrKzsKLSAgICBsYXN0X2tleSA9Ci0gICAgICAgIHN0YXRp
Y19jYXN0PGludD4oZnJvZykgPj0gMCA/IHN0YXRpY19jYXN0PGludD4oZnJvZykgOiBsYXN0X2tl
eSBeIDE7Ci0gICAgR09PR0xFX0RDSEVDS19HRShsYXN0X2tleSwgMCk7Ci0gICAgbWFwW2xhc3Rf
a2V5XSA9IGxhc3Rfa2V5IF4gMTsKLSAgfQotICB2ZWN0b3I8aW50NjQ+IHRpbWVzOwotICAvLyBX
ZSdyZSBnb2luZyB0byBkbyBtYXAuZXJhc2UobWFwLmJlZ2luKCkpIG92ZXIgYW5kIG92ZXIgYWdh
aW4uICBCdXQsCi0gIC8vIGp1c3QgaW4gY2FzZSBvbmUgaXRlcmF0aW9uIGlzIGZhc3QgY29tcGFy
ZWQgdG8gdGhlIGdyYW51bGFyaXR5IG9mCi0gIC8vIG91ciB0aW1lIGtlZXBpbmcsIHdlIG1lYXN1
cmUga0NodW5rU2l6ZSBpdGVyYXRpb25zIHBlciBvdXRlci1sb29wIGl0ZXIuCi0gIGNvbnN0IGlu
dCBrQ2h1bmtTaXplID0gMTAwMDsKLSAgR09PR0xFX0NIRUNLX0VRKGtUZXN0U2l6ZSAlIGtDaHVu
a1NpemUsIDApOwotICBkbyB7Ci0gICAgY29uc3QgaW50NjQgc3RhcnQgPSBOb3coKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGtDaHVua1NpemU7IGkrKykgewotICAgICAgbWFwLmVyYXNlKG1h
cC5iZWdpbigpKTsKLSAgICB9Ci0gICAgY29uc3QgaW50NjQgZW5kID0gTm93KCk7Ci0gICAgaWYg
KGVuZCA+IHN0YXJ0KSB7Ci0gICAgICB0aW1lcy5wdXNoX2JhY2soZW5kIC0gc3RhcnQpOwotICAg
IH0KLSAgfSB3aGlsZSAoIW1hcC5lbXB0eSgpKTsKLSAgaWYgKHRpbWVzLnNpemUoKSA8IC45OSAq
IGtUZXN0U2l6ZSAvIGtDaHVua1NpemUpIHsKLSAgICBHT09HTEVfTE9HKFdBUk5JTkcpIDw8ICJO
b3coKSBpc24ndCBoZWxwaW5nIHVzIG1lYXN1cmUgdGltZSI7Ci0gICAgcmV0dXJuOwotICB9Ci0g
IGludDY0IHgwID0gbWVkaWFuKHRpbWVzLmJlZ2luKCksIHRpbWVzLmJlZ2luKCkgKyA5KTsKLSAg
aW50NjQgeDEgPSBtZWRpYW4odGltZXMuYmVnaW4oKSArIHRpbWVzLnNpemUoKSAtIDksIHRpbWVz
LmVuZCgpKTsKLSAgR09PR0xFX0xPRyhJTkZPKSA8PCAieDA9IiA8PCB4MCA8PCAiLCB4MT0iIDw8
IHgxOwotICAvLyB4MSB3aWxsIGdyZWF0bHkgZXhjZWVkIHgwIGlmIHRoZSBjb2RlIHdlIGp1c3Qg
ZXhlY3V0ZWQgdG9vayBPKG5eMikgdGltZS4KLSAgLy8gQW5kIHdlJ2xsIHByb2JhYmx5IHRpbWUg
b3V0IGFuZCBuZXZlciBnZXQgaGVyZS4gIFNvLCB0aGlzIHRlc3QgaXMKLSAgLy8gaW50ZW50aW9u
YWxseSBsb29zZTogd2UgY2hlY2sgdGhhdCB4MCBhbmQgeDEgYXJlIHdpdGhpbiBhIGZhY3RvciBv
ZiA4LgotICBFWFBFQ1RfR0UoeDEsIHgwIC8gOCk7Ci0gIEVYUEVDVF9HRSh4MCwgeDEgLyA4KTsK
LX0KLQotLy8gVHJ5IHRvIGNyZWF0ZSBrVGVzdFNpemUga2V5cyB0aGF0IHdpbGwgbGFuZCBpbiBq
dXN0IGEgZmV3IGJ1Y2tldHMsIGFuZAotLy8gdGltZSB0aGUgaW5zZXJ0aW9ucywgdG8gZ2V0IGEg
cm91Z2ggZXN0aW1hdGUgb2Ygd2hldGhlciBhbiBPKG5eMikgd29yc3QgY2FzZQotLy8gd2FzIHRy
aWdnZXJlZC4gIFRoaXMgdGVzdCBpcyBhIGhhY2t5LCBidXQgcHJvYmFibHkgYmV0dGVyIHRoYW4g
bm90aGluZy4KLVRFU1RfUChNYXBJbXBsVGVzdCwgSGFzaEZsb29kKSB7Ci0gIGNvbnN0IGludCBr
VGVzdFNpemUgPSAxMDI0OyAgLy8gbXVzdCBiZSBhIHBvd2VyIG9mIDIKLSAgc3RkOjpzZXQ8aW50
PiBzOwotICBmb3IgKGludCBpID0gMDsgcy5zaXplKCkgPCBrVGVzdFNpemU7IGkrKykgewotICAg
IGlmICgobWFwXy5oYXNoX2Z1bmN0aW9uKCkoaSkgJiAoa1Rlc3RTaXplIC0gMSkpIDwgMykgewot
ICAgICAgcy5pbnNlcnQoaSk7Ci0gICAgfQotICB9Ci0gIC8vIENyZWF0ZSBoYXNoIHRhYmxlIHdp
dGgga1Rlc3RTaXplIGVudHJpZXMgdGhhdCBoYXNoIGZsb29kIGEgdGFibGUgd2l0aAotICAvLyAx
MDI0IChvciA1MTIgb3IgMjA0OCBvciAuLi4pIGVudHJpZXMuICBUaGlzIGFzc3VtZXMgdGhhdCBt
YXBfIHVzZXMgcG93ZXJzCi0gIC8vIG9mIDIgZm9yIHRhYmxlIHNpemVzLCBhbmQgdGhhdCBpdCdz
IHN1ZmZpY2llbnQgdG8gImZsb29kIiB3aXRoIHJlc3BlY3QgdG8KLSAgLy8gdGhlIGxvdyBiaXRz
IG9mIHRoZSBvdXRwdXQgb2YgbWFwXy5oYXNoX2Z1bmN0aW9uKCkuCi0gIHZlY3RvcjxpbnQ2ND4g
dGltZXM7Ci0gIHN0ZDo6c2V0PGludD46Oml0ZXJhdG9yIGl0ID0gcy5iZWdpbigpOwotICBpbnQg
Y291bnQgPSAwOwotICBkbyB7Ci0gICAgY29uc3QgaW50NjQgc3RhcnQgPSBOb3coKTsKLSAgICBt
YXBfWyppdF0gPSAwOwotICAgIGNvbnN0IGludDY0IGVuZCA9IE5vdygpOwotICAgIGlmIChlbmQg
PiBzdGFydCkgewotICAgICAgdGltZXMucHVzaF9iYWNrKGVuZCAtIHN0YXJ0KTsKLSAgICB9Ci0g
ICAgKytjb3VudDsKLSAgICArK2l0OwotICB9IHdoaWxlIChpdCAhPSBzLmVuZCgpKTsKLSAgaWYg
KHRpbWVzLnNpemUoKSA8IC45OSAqIGNvdW50KSByZXR1cm47Ci0gIGludDY0IHgwID0gbWVkaWFu
KHRpbWVzLmJlZ2luKCksIHRpbWVzLmJlZ2luKCkgKyA5KTsKLSAgaW50NjQgeDEgPSBtZWRpYW4o
dGltZXMuYmVnaW4oKSArIHRpbWVzLnNpemUoKSAtIDksIHRpbWVzLmVuZCgpKTsKLSAgLy8geDEg
d2lsbCBncmVhdGx5IGV4Y2VlZCB4MCBpZiB0aGUgY29kZSB3ZSBqdXN0IGV4ZWN1dGVkIHRvb2sg
TyhuXjIpIHRpbWUuCi0gIC8vIEJ1dCB3ZSB3YW50IHRvIGFsbG93IE8obiBsb2cgbikuICBBIGZh
Y3RvciBvZiAyMCBzaG91bGQgYmUgZ2VuZXJvdXMgZW5vdWdoLgotICBFWFBFQ1RfTEUoeDEsIHgw
ICogMjApOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXN0YXRpYyB2
b2lkIFRlc3RWYWxpZGl0eUZvckFsbEtleXNFeGNlcHQoaW50IGtleV90b19hdm9pZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgY2hlY2tfbWFwLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVJiBtYXApIHsK
LSAgdHlwZWRlZiB0eXBlbmFtZSBVOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7ICAvLyBhIGtleS12
YWx1ZSBwYWlyCi0gIGZvciAodHlwZW5hbWUgVTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVn
aW4oKTsgaXQgIT0gbWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgY29uc3QgaW50IGtleSA9IGl0LT5m
aXJzdDsKLSAgICBpZiAoa2V5ID09IGtleV90b19hdm9pZCkgY29udGludWU7Ci0gICAgLy8gQWxs
IGl0ZXJhdG9ycyByZWxldmFudCB0byB0aGlzIGtleSwgd2hldGhlciBvbGQgKGZyb20gY2hlY2tf
bWFwKSBvciBuZXcsCi0gICAgLy8gbXVzdCBwb2ludCB0byB0aGUgc2FtZSBtZW1vcnkuICBTbywg
dGVzdCBwb2ludGVyIGVxdWFsaXR5IGhlcmUuCi0gICAgY29uc3QgdmFsdWVfdHlwZSogY2hlY2tf
dmFsID0gJipjaGVja19tYXAuZmluZChrZXkpLT5zZWNvbmQ7Ci0gICAgRVhQRUNUX0VRKGNoZWNr
X3ZhbCwgJippdCk7Ci0gICAgRVhQRUNUX0VRKGNoZWNrX3ZhbCwgJiptYXAuZmluZChrZXkpKTsK
LSAgfQotfQotCi0vLyBFWFBFQ1QgaTAgYW5kIGkxIHRvIGJlIHRoZSBzYW1lLiAgQWR2YW5jaW5n
IHRoZW0gc2hvdWxkIGhhdmUgdGhlIHNhbWUgZWZmZWN0LAotLy8gdG9vLgotdGVtcGxhdGUgPHR5
cGVuYW1lIEl0ZXI+Ci1zdGF0aWMgdm9pZCBUZXN0RXF1YWxJdGVyYXRvcnMoSXRlciBpMCwgSXRl
ciBpMSwgSXRlciBlbmQpIHsKLSAgY29uc3QgaW50IGtNYXhBZHZhbmNlID0gMTA7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwga01heEFkdmFuY2U7IGkrKykgewotICAgIEVYUEVDVF9FUShpMCA9PSBl
bmQsIGkxID09IGVuZCk7Ci0gICAgaWYgKGkwID09IGVuZCkgcmV0dXJuOwotICAgIEVYUEVDVF9F
USgmKmkwLCAmKmkxKSA8PCAiaXRlciAiIDw8IGk7Ci0gICAgKytpMDsKLSAgICArK2kxOwotICB9
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1zdGF0aWMgdm9pZCBUZXN0
T2xkVmVyc3VzTmV3SXRlcmF0b3IoaW50IHNraXAsIE1hcDxpbnQsIGludD4qIG0pIHsKLSAgY29u
c3QgaW50IGluaXRpYWxfc2l6ZSA9IG0tPnNpemUoKTsKLSAgSXRlcmF0b3JUeXBlIGl0ID0gbS0+
YmVnaW4oKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBza2lwICYmIGl0ICE9IG0tPmVuZCgpOyBp
dCsrLCBpKyspIHt9Ci0gIGlmIChpdCA9PSBtLT5lbmQoKSkgcmV0dXJuOwotICBjb25zdCBJdGVy
YXRvclR5cGUgb2xkID0gaXQ7Ci0gIEdPT0dMRV9MT0coSU5GTykgPDwgInNraXA9IiA8PCBza2lw
IDw8ICIsIG9sZC0+Zmlyc3Q9IiA8PCBvbGQtPmZpcnN0OwotICBjb25zdCBpbnQgdGFyZ2V0X3Np
emUgPQotICAgICAgaW5pdGlhbF9zaXplIDwgMTAwID8gaW5pdGlhbF9zaXplICogNSA6IGluaXRp
YWxfc2l6ZSAqIDUgLyA0OwotICBmb3IgKGludCBpID0gMDsgbS0+c2l6ZSgpIDw9IHRhcmdldF9z
aXplOyBpKyspIHsKLSAgICAoKm0pW2ldID0gMDsKLSAgfQotICAvLyBJdGVyYXRvciAnb2xkJyBz
aG91bGQgc3RpbGwgd29yayBqdXN0IGZpbmUgZGVzcGl0ZSB0aGUgZ3Jvd3RoIG9mICptLgotICBj
b25zdCBJdGVyYXRvclR5cGUgYWZ0ZXJfZ3Jvd3RoID0gbS0+ZmluZChvbGQtPmZpcnN0KTsKLSAg
VGVzdEVxdWFsSXRlcmF0b3JzPEl0ZXJhdG9yVHlwZT4ob2xkLCBhZnRlcl9ncm93dGgsIG0tPmVu
ZCgpKTsKLQotICAvLyBOb3cgc2hyaW5rIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuICBEbyB0aGlz
IHdpdGggYSBtaXggb2YgZXJhc2VzIGFuZAotICAvLyBpbnNlcnRzIHRvIGluY3JlYXNlIHRoZSBj
aGFuY2UgdGhhdCB0aGUgaGFzaHRhYmxlIHdpbGwgcmVzaXplIHRvIGEgbG93ZXIKLSAgLy8gbnVt
YmVyIG9mIGJ1Y2tldHMuICAoQnV0LCBpbiBhbnkgY2FzZSwgdGhlIHRlc3QgaXMgc3RpbGwgdXNl
ZnVsLikKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAyICogKHRhcmdldF9zaXplIC0gaW5pdGlhbF9z
aXplKTsgaSsrKSB7Ci0gICAgaWYgKGkgIT0gb2xkLT5maXJzdCkgewotICAgICAgbS0+ZXJhc2Uo
aSk7Ci0gICAgfQotICAgIGlmICgoKGkgXiBtLT5iZWdpbigpLT5maXJzdCkgJiAxNSkgPT0gMCkg
ewotICAgICAgKCptKVtpICogMzQyXSA9IGk7Ci0gICAgfQotICB9Ci0gIC8vIE5vdywgdGhlIHRh
YmxlIGhhcyBncm93biBhbmQgc2hydW5rOyB0ZXN0IGFnYWluLgotICBUZXN0RXF1YWxJdGVyYXRv
cnM8SXRlcmF0b3JUeXBlPihvbGQsIG0tPmZpbmQob2xkLT5maXJzdCksIG0tPmVuZCgpKTsKLSAg
VGVzdEVxdWFsSXRlcmF0b3JzPEl0ZXJhdG9yVHlwZT4ob2xkLCBhZnRlcl9ncm93dGgsIG0tPmVu
ZCgpKTsKLX0KLQotLy8gQ3JlYXRlIGFuZCB0ZXN0IGFuIG4tZWxlbWVudCBNYXAsIHdpdGggZW1w
aGFzaXMgb24gaXRlcmF0b3IgY29ycmVjdG5lc3MuCi1zdGF0aWMgdm9pZCBTdHJlc3NUZXN0SXRl
cmF0b3JzKGludCBuLCBib29sIHRlc3Rfb2xkX3N0eWxlX3Byb3RvMl9tYXBzKSB7Ci0gIEdPT0dM
RV9MT0coSU5GTykgPDwgIlN0cmVzc1Rlc3RJdGVyYXRvcnMgIiA8PCBuOwotICBHT09HTEVfQ0hF
Q0tfR1QobiwgMCk7Ci0gIC8vIENyZWF0ZSBhIHJhbmRvbS1sb29raW5nIG1hcCBvZiBzaXplIG4u
ICBVc2Ugbm9uLW5lZ2F0aXZlIGludGVnZXIga2V5cy4KLSAgTWFwPGludCwgaW50PiBtKHRlc3Rf
b2xkX3N0eWxlX3Byb3RvMl9tYXBzKTsKLSAgdWludDMyIGZyb2cgPSAxMjM5ODcgKyBuOwotICBp
bnQgbGFzdF9rZXkgPSAwOwotICBpbnQgY291bnRlciA9IDA7Ci0gIHdoaWxlIChtLnNpemUoKSA8
IG4pIHsKLSAgICBmcm9nICo9IHN0YXRpY19jYXN0PHVpbnQzMj4oazApOwotICAgIGZyb2cgXj0g
ZnJvZyA+PiAxNzsKLSAgICBmcm9nICs9IGNvdW50ZXIrKzsKLSAgICBsYXN0X2tleSA9Ci0gICAg
ICAgIHN0YXRpY19jYXN0PGludD4oZnJvZykgPj0gMCA/IHN0YXRpY19jYXN0PGludD4oZnJvZykg
OiBsYXN0X2tleSBeIDE7Ci0gICAgR09PR0xFX0RDSEVDS19HRShsYXN0X2tleSwgMCk7Ci0gICAg
bVtsYXN0X2tleV0gPSBsYXN0X2tleSBeIDE7Ci0gIH0KLSAgLy8gVGVzdCBpdC4KLSAgQVNTRVJU
X0VRKG4sIG0uc2l6ZSgpKTsKLSAgLy8gQ3JlYXRlIG1hcHMgb2YgcG9pbnRlcnMgYW5kIGl0ZXJh
dG9ycy4KLSAgLy8gVGhlc2Ugc2hvdWxkIHJlbWFpbiB2YWxpZCBldmVuIGlmIHdlIG1vZGlmeSBt
LgotICBoYXNoX21hcDxpbnQsIE1hcDxpbnQsIGludD46OnZhbHVlX3R5cGUqPiBtcChuKTsKLSAg
aGFzaF9tYXA8aW50LCBNYXA8aW50LCBpbnQ+OjppdGVyYXRvcj4gbWkobik7Ci0gIGZvciAoTWFw
PGludCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtLmJlZ2luKCk7IGl0ICE9IG0uZW5kKCk7ICsraXQp
IHsKLSAgICBtcFtpdC0+Zmlyc3RdID0gJippdDsKLSAgICBtaVtpdC0+Zmlyc3RdID0gaXQ7Ci0g
IH0KLSAgQVNTRVJUX0VRKG0uc2l6ZSgpLCBtaS5zaXplKCkpOwotICBBU1NFUlRfRVEobS5zaXpl
KCksIG1wLnNpemUoKSk7Ci0gIG0uZXJhc2UobGFzdF9rZXkpOwotICBBU1NFUlRfRVEobiAtIDEs
IG0uc2l6ZSgpKTsKLSAgVGVzdFZhbGlkaXR5Rm9yQWxsS2V5c0V4Y2VwdChsYXN0X2tleSwgbXAs
IG0pOwotICBUZXN0VmFsaWRpdHlGb3JBbGxLZXlzRXhjZXB0KGxhc3Rfa2V5LCBtaSwgbSk7Ci0K
LSAgbVtsYXN0X2tleV0gPSAwOwotICBBU1NFUlRfRVEobiwgbS5zaXplKCkpOwotICAvLyBUZXN0
IG9sZCBpdGVyYXRvciB2cyBuZXcgaXRlcmF0b3IsIHdpdGggdGFibGUgbW9kaWZpY2F0aW9uIGlu
IGJldHdlZW4uCi0gIFRlc3RPbGRWZXJzdXNOZXdJdGVyYXRvcjxNYXA8aW50LCBpbnQ+Ojpjb25z
dF9pdGVyYXRvcj4obiAlIDMsICZtKTsKLSAgVGVzdE9sZFZlcnN1c05ld0l0ZXJhdG9yPE1hcDxp
bnQsIGludD46Oml0ZXJhdG9yPihuICUgKDEgKyAobiAvIDQwKSksICZtKTsKLSAgLy8gRmluYWxs
eSwgZW5zdXJlIGVyYXNlKGl0ZXJhdG9yKSBkb2Vzbid0IHJlb3JkZXIgYW55dGhpbmcsIGJlY3Vh
c2UgdGhhdCBpcwotICAvLyB3aGF0IGl0cyBkb2N1bWVudGF0aW9uIHNheXMuCi0gIG1bbGFzdF9r
ZXldID0gbVtsYXN0X2tleSBeIDk5OV0gPSAwOwotICB2ZWN0b3I8TWFwPGludCwgaW50Pjo6aXRl
cmF0b3I+IHY7Ci0gIHYucmVzZXJ2ZShtLnNpemUoKSk7Ci0gIGludCBwb3NpdGlvbl9vZl9sYXN0
X2tleSA9IDA7Ci0gIGZvciAoTWFwPGludCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtLmJlZ2luKCk7
IGl0ICE9IG0uZW5kKCk7ICsraXQpIHsKLSAgICBpZiAoaXQtPmZpcnN0ID09IGxhc3Rfa2V5KSB7
Ci0gICAgICBwb3NpdGlvbl9vZl9sYXN0X2tleSA9IHYuc2l6ZSgpOwotICAgIH0KLSAgICB2LnB1
c2hfYmFjayhpdCk7Ci0gIH0KLSAgQVNTRVJUX0VRKG0uc2l6ZSgpLCB2LnNpemUoKSk7Ci0gIGNv
bnN0IE1hcDxpbnQsIGludD46Oml0ZXJhdG9yIGVyYXNlX3Jlc3VsdCA9IG0uZXJhc2UobS5maW5k
KGxhc3Rfa2V5KSk7Ci0gIGludCBpbmRleCA9IDA7Ci0gIGZvciAoTWFwPGludCwgaW50Pjo6aXRl
cmF0b3IgaXQgPSBtLmJlZ2luKCk7IGl0ICE9IG0uZW5kKCk7ICsraXQsICsraW5kZXgpIHsKLSAg
ICBpZiAoaW5kZXggPT0gcG9zaXRpb25fb2ZfbGFzdF9rZXkpIHsKLSAgICAgIEVYUEVDVF9FUSgm
KmVyYXNlX3Jlc3VsdCwgJip2WysraW5kZXhdKTsKLSAgICB9Ci0gICAgQVNTRVJUX0VRKCYqaXQs
ICYqdltpbmRleF0pOwotICB9Ci19Ci0KLVRFU1RfUChNYXBJbXBsVGVzdCwgSXRlcmF0b3JJbnZh
bGlkYXRpb24pIHsKLSAgLy8gQXMgbXVsdGlwbGUgdW5kZXJseWluZyBoYXNoX21hcCBpbXBsZW1l
bnRhdGlvbnMgZG8gbm90IGZvbGxvdyB0aGUKLSAgLy8gdmFsaWRhdGlvbiByZXF1aXJlbWVudCwg
dGhlIHRlc3QgaXMgZGlzYWJsZWQgZm9yIG9sZC1zdHlsZSBtYXBzLgotICBpZiAoR2V0UGFyYW0o
KSkgcmV0dXJuOwotICAvLyBDcmVhdGUgYSBzZXQgb2YgcHNldWRvLXJhbmRvbSBzaXplcyB0byB0
ZXN0LgotI2lmbmRlZiBOREVCVUcKLSAgY29uc3QgaW50IGtNYXhTaXplVG9UZXN0ID0gMTAwICog
MTAwMDsKLSNlbHNlCi0gIGNvbnN0IGludCBrTWF4U2l6ZVRvVGVzdCA9IDEwMDAgKiAxMDAwOwot
I2VuZGlmCi0gIHN0ZDo6c2V0PGludD4gczsKLSAgaW50IG4gPSBrTWF4U2l6ZVRvVGVzdDsKLSAg
aW50IGZyb2cgPSBrMSArIG47Ci0gIHdoaWxlIChuID4gMSAmJiBzLnNpemUoKSA8IDI1KSB7Ci0g
ICAgcy5pbnNlcnQobik7Ci0gICAgbiA9IHN0YXRpY19jYXN0PGludD4obiAqIDEwMCAvICgxMDEu
MCArIChmcm9nICYgNjMpKSk7Ci0gICAgZnJvZyAqPSBrMjsKLSAgICBmcm9nIF49IGZyb2cgPj4g
MTc7Ci0gIH0KLSAgLy8gRW5zdXJlIHdlIHRlc3QgYSBmZXcgc21hbGwgc2l6ZXMuCi0gIHMuaW5z
ZXJ0KDEpOwotICBzLmluc2VydCgyKTsKLSAgcy5pbnNlcnQoMyk7Ci0gIC8vIE5vdywgdGhlIHJl
YWwgd29yay4KLSAgZm9yIChzdGQ6OnNldDxpbnQ+OjppdGVyYXRvciBpID0gcy5iZWdpbigpOyBp
ICE9IHMuZW5kKCk7ICsraSkgewotICAgIFN0cmVzc1Rlc3RJdGVyYXRvcnMoKmksIEdldFBhcmFt
KCkpOwotICB9Ci19Ci0KLS8vIFRlc3QgdGhhdCBlcmFzZSgpIHJldmFsaWRhdGVzIGl0ZXJhdG9y
cy4KLVRFU1RfUChNYXBJbXBsVGVzdCwgRXJhc2VSZXZhbGlkYXRlcykgewotICAvLyBBcyBtdWx0
aXBsZSB1bmRlcmx5aW5nIGhhc2hfbWFwIGltcGxlbWVudGF0aW9ucyBkbyBub3QgZm9sbG93IHRo
ZQotICAvLyB2YWxpZGF0aW9uIHJlcXVpcmVtZW50LCB0aGUgdGVzdCBpcyBkaXNhYmxlZCBmb3Ig
b2xkLXN0eWxlIG1hcHMuCi0gIGlmIChHZXRQYXJhbSgpKSByZXR1cm47Ci0gIG1hcF9bM10gPSBt
YXBfWzEzXSA9IG1hcF9bMjBdID0gMDsKLSAgY29uc3QgaW50IGluaXRpYWxfc2l6ZSA9IG1hcF8u
c2l6ZSgpOwotICBFWFBFQ1RfRVEoMywgaW5pdGlhbF9zaXplKTsKLSAgdmVjdG9yPE1hcDxpbnQs
IGludD46Oml0ZXJhdG9yPiB2OwotICBmb3IgKE1hcDxpbnQsIGludD46Oml0ZXJhdG9yIGl0ID0g
bWFwXy5iZWdpbigpOyBpdCAhPSBtYXBfLmVuZCgpOyArK2l0KSB7Ci0gICAgdi5wdXNoX2JhY2so
aXQpOwotICB9Ci0gIEVYUEVDVF9FUShpbml0aWFsX3NpemUsIHYuc2l6ZSgpKTsKLSAgZm9yIChp
bnQgaSA9IDA7IG1hcF8uc2l6ZSgpIDw9IGluaXRpYWxfc2l6ZSAqIDIwOyBpKyspIHsKLSAgICBt
YXBfW2ldID0gMDsKLSAgfQotICBjb25zdCBpbnQgbGFyZ2VyX3NpemUgPSBtYXBfLnNpemUoKTsK
LSAgLy8gV2UndmUgZ3JlYXRseSBpbmNyZWFzZWQgdGhlIHNpemUgb2YgdGhlIG1hcCwgc28gaXQg
aXMgaGlnaGx5IGxpa2VseSB0aGF0Ci0gIC8vIHRoZSBmb2xsb3dpbmcgd2lsbCBjb3JydXB0IG0g
aWYgZXJhc2UoKSBkb2Vzbid0IHByb3Blcmx5IHJldmFsaWRhdGUKLSAgLy8gaXRlcmF0b3JzIHBh
c3NlZCB0byBpdC4gIEZpbmlzaGluZyB0aGlzIHJvdXRpbmUgd2l0aG91dCBjcmFzaGluZyBpbmRp
Y2F0ZXMKLSAgLy8gc3VjY2Vzcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsr
KSB7Ci0gICAgbWFwXy5lcmFzZSh2W2ldKTsKLSAgfQotICBFWFBFQ1RfRVEobGFyZ2VyX3NpemUg
LSB2LnNpemUoKSwgbWFwXy5zaXplKCkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWJv
b2wgSXNDb25zdEhlbHBlcihUJiAvKnQqLykgeyAgLy8gTk9MSU5ULiBXZSB3YW50IHRvIGNhdGNo
IG5vbi1jb25zdCByZWZzIGhlcmUuCi0gIHJldHVybiBmYWxzZTsKLX0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotYm9vbCBJc0NvbnN0SGVscGVyKGNvbnN0IFQmIC8qdCovKSB7Ci0gIHJldHVybiB0
cnVlOwotfQotCi1URVNUX1AoTWFwSW1wbFRlc3QsIEl0ZXJhdG9yQ29uc3RuZXNzKSB7Ci0gIG1h
cF9bMF0gPSAwOwotICBFWFBFQ1RfVFJVRShJc0NvbnN0SGVscGVyKCptYXBfLmNiZWdpbigpKSk7
Ci0gIEVYUEVDVF9UUlVFKElzQ29uc3RIZWxwZXIoKmNvbnN0X21hcF8uYmVnaW4oKSkpOwotICBF
WFBFQ1RfRkFMU0UoSXNDb25zdEhlbHBlcigqbWFwXy5iZWdpbigpKSk7Ci19Ci0KLWJvb2wgSXNG
b3J3YXJkSXRlcmF0b3JIZWxwZXIoc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAvKnRhZyovKSB7
IHJldHVybiB0cnVlOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWJvb2wgSXNGb3J3YXJkSXRl
cmF0b3JIZWxwZXIoVCAvKnQqLykgewotICByZXR1cm4gZmFsc2U7Ci19Ci0KLVRFU1RfUChNYXBJ
bXBsVGVzdCwgSXRlcmF0b3JDYXRlZ29yeSkgewotICBFWFBFQ1RfVFJVRShJc0ZvcndhcmRJdGVy
YXRvckhlbHBlcigKLSAgICAgIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPE1hcDxpbnQsIGludD46Oml0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSkpOwotICBFWFBFQ1RfVFJVRShJc0ZvcndhcmRJ
dGVyYXRvckhlbHBlcihzdGQ6Oml0ZXJhdG9yX3RyYWl0czwKLSAgICAgIE1hcDxpbnQsIGludD46
OmNvbnN0X2l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSkpOwotfQotCi1URVNUX1AoTWFw
SW1wbFRlc3QsIEluc2VydFNpbmdsZSkgewotICBpbnQzMiBrZXkgPSAwOwotICBpbnQzMiB2YWx1
ZTEgPSAxMDA7Ci0gIGludDMyIHZhbHVlMiA9IDEwMTsKLQotICAvLyBJbnNlcnQgYSBub24tZXhp
c3RlZCBrZXkuCi0gIHN0ZDo6cGFpcjxNYXA8aW50MzIsIGludDMyPjo6aXRlcmF0b3IsIGJvb2w+
IHJlc3VsdDEgPQotICAgICAgbWFwXy5pbnNlcnQoTWFwPGludDMyLCBpbnQzMj46OnZhbHVlX3R5
cGUoa2V5LCB2YWx1ZTEpKTsKLSAgRXhwZWN0U2luZ2xlRWxlbWVudChrZXksIHZhbHVlMSk7Ci0K
LSAgTWFwPGludDMyLCBpbnQzMj46Oml0ZXJhdG9yIGl0MSA9IHJlc3VsdDEuZmlyc3Q7Ci0gIEVY
UEVDVF9FUShrZXksIGl0MS0+Zmlyc3QpOwotICBFWFBFQ1RfRVEodmFsdWUxLCBpdDEtPnNlY29u
ZCk7Ci0gIEVYUEVDVF9UUlVFKHJlc3VsdDEuc2Vjb25kKTsKLQotICAvLyBJbnNlcnQgYW4gZXhp
c3RlZCBrZXkuCi0gIHN0ZDo6cGFpcjxNYXA8aW50MzIsIGludDMyPjo6aXRlcmF0b3IsIGJvb2w+
IHJlc3VsdDIgPQotICAgICAgbWFwXy5pbnNlcnQoTWFwPGludDMyLCBpbnQzMj46OnZhbHVlX3R5
cGUoa2V5LCB2YWx1ZTIpKTsKLSAgRXhwZWN0U2luZ2xlRWxlbWVudChrZXksIHZhbHVlMSk7Ci0K
LSAgTWFwPGludDMyLCBpbnQzMj46Oml0ZXJhdG9yIGl0MiA9IHJlc3VsdDIuZmlyc3Q7Ci0gIEVY
UEVDVF9UUlVFKGl0MSA9PSBpdDIpOwotICBFWFBFQ1RfRkFMU0UocmVzdWx0Mi5zZWNvbmQpOwot
fQotCi1URVNUX1AoTWFwSW1wbFRlc3QsIEluc2VydEJ5SXRlcmF0b3IpIHsKLSAgaW50MzIga2V5
MSA9IDA7Ci0gIGludDMyIGtleTIgPSAxOwotICBpbnQzMiB2YWx1ZTFhID0gMTAwOwotICBpbnQz
MiB2YWx1ZTFiID0gMTAxOwotICBpbnQzMiB2YWx1ZTJhID0gMjAwOwotICBpbnQzMiB2YWx1ZTJi
ID0gMjAxOwotCi0gIHN0ZDo6bWFwPGludDMyLCBpbnQzMj4gbWFwMTsKLSAgbWFwMVtrZXkxXSA9
IHZhbHVlMWE7Ci0gIG1hcDFba2V5Ml0gPSB2YWx1ZTJhOwotCi0gIG1hcF8uaW5zZXJ0KG1hcDEu
YmVnaW4oKSwgbWFwMS5lbmQoKSk7Ci0gIEV4cGVjdEVsZW1lbnRzKG1hcDEpOwotCi0gIHN0ZDo6
bWFwPGludDMyLCBpbnQzMj4gbWFwMjsKLSAgbWFwMltrZXkxXSA9IHZhbHVlMWI7Ci0gIG1hcDJb
a2V5Ml0gPSB2YWx1ZTJiOwotCi0gIG1hcF8uaW5zZXJ0KG1hcDIuYmVnaW4oKSwgbWFwMi5lbmQo
KSk7Ci0gIEV4cGVjdEVsZW1lbnRzKG1hcDEpOwotfQotCi1URVNUX1AoTWFwSW1wbFRlc3QsIEVy
YXNlU2luZ2xlQnlLZXkpIHsKLSAgaW50MzIga2V5ID0gMDsKLSAgaW50MzIgdmFsdWUgPSAxMDA7
Ci0KLSAgbWFwX1trZXldID0gdmFsdWU7Ci0gIEV4cGVjdFNpbmdsZUVsZW1lbnQoa2V5LCB2YWx1
ZSk7Ci0KLSAgLy8gRXJhc2UgYW4gZXhpc3Rpbmcga2V5LgotICBFWFBFQ1RfRVEoMSwgbWFwXy5l
cmFzZShrZXkpKTsKLSAgRVhQRUNUX1RSVUUobWFwXy5lbXB0eSgpKTsKLSAgRVhQRUNUX0VRKDAs
IG1hcF8uc2l6ZSgpKTsKLSAgRVhQRUNUX1RSVUUobWFwXy5lbmQoKSA9PSBtYXBfLmZpbmQoa2V5
KSk7Ci0gIEVYUEVDVF9UUlVFKG1hcF8uYmVnaW4oKSA9PSBtYXBfLmVuZCgpKTsKLQotICAvLyBF
cmFzZSBhIG5vbi1leGlzdGluZyBrZXkuCi0gIEVYUEVDVF9FUSgwLCBtYXBfLmVyYXNlKGtleSkp
OwotfQotCi1URVNUX1AoTWFwSW1wbFRlc3QsIEVyYXNlTXV0aXBsZUJ5S2V5KSB7Ci0gIC8vIGVy
YXNlIGluIG9uZSBzcGVjaWZpYyBvcmRlciB0byB0cmlnZ2VyIGNvcm5lciBjYXNlcwotICBmb3Ig
KGludCBpID0gMDsgaSA8IDU7IGkrKykgewotICAgIG1hcF9baV0gPSBpOwotICB9Ci0KLSAgbWFw
Xy5lcmFzZSgwKTsKLSAgRVhQRUNUX0VRKDQsIG1hcF8uc2l6ZSgpKTsKLSAgRVhQRUNUX1RSVUUo
bWFwXy5lbmQoKSA9PSBtYXBfLmZpbmQoMCkpOwotCi0gIG1hcF8uZXJhc2UoMSk7Ci0gIEVYUEVD
VF9FUSgzLCBtYXBfLnNpemUoKSk7Ci0gIEVYUEVDVF9UUlVFKG1hcF8uZW5kKCkgPT0gbWFwXy5m
aW5kKDEpKTsKLQotICBtYXBfLmVyYXNlKDMpOwotICBFWFBFQ1RfRVEoMiwgbWFwXy5zaXplKCkp
OwotICBFWFBFQ1RfVFJVRShtYXBfLmVuZCgpID09IG1hcF8uZmluZCgzKSk7Ci0KLSAgbWFwXy5l
cmFzZSg0KTsKLSAgRVhQRUNUX0VRKDEsIG1hcF8uc2l6ZSgpKTsKLSAgRVhQRUNUX1RSVUUobWFw
Xy5lbmQoKSA9PSBtYXBfLmZpbmQoNCkpOwotCi0gIG1hcF8uZXJhc2UoMik7Ci0gIEVYUEVDVF9F
USgwLCBtYXBfLnNpemUoKSk7Ci0gIEVYUEVDVF9UUlVFKG1hcF8uZW5kKCkgPT0gbWFwXy5maW5k
KDIpKTsKLX0KLQotVEVTVF9QKE1hcEltcGxUZXN0LCBFcmFzZVNpbmdsZUJ5SXRlcmF0b3IpIHsK
LSAgaW50MzIga2V5ID0gMDsKLSAgaW50MzIgdmFsdWUgPSAxMDA7Ci0KLSAgbWFwX1trZXldID0g
dmFsdWU7Ci0gIEV4cGVjdFNpbmdsZUVsZW1lbnQoa2V5LCB2YWx1ZSk7Ci0KLSAgTWFwPGludDMy
LCBpbnQzMj46Oml0ZXJhdG9yIGl0ID0gbWFwXy5maW5kKGtleSk7Ci0gIG1hcF8uZXJhc2UoaXQp
OwotICBFWFBFQ1RfVFJVRShtYXBfLmVtcHR5KCkpOwotICBFWFBFQ1RfRVEoMCwgbWFwXy5zaXpl
KCkpOwotICBFWFBFQ1RfVFJVRShtYXBfLmVuZCgpID09IG1hcF8uZmluZChrZXkpKTsKLSAgRVhQ
RUNUX1RSVUUobWFwXy5iZWdpbigpID09IG1hcF8uZW5kKCkpOwotfQotCi1URVNUX1AoTWFwSW1w
bFRlc3QsIFZhbGlkSXRlcmF0b3JBZnRlckVyYXNlKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwg
MTA7IGkrKykgewotICAgIG1hcF9baV0gPSBpOwotICB9Ci0KLSAgaW50IGNvdW50ID0gMDsKLQot
ICBmb3IgKE1hcDxpbnQzMiwgaW50MzI+OjppdGVyYXRvciBpdCA9IG1hcF8uYmVnaW4oKTsgaXQg
IT0gbWFwXy5lbmQoKTspIHsKLSAgICBjb3VudCsrOwotICAgIGlmIChpdC0+Zmlyc3QgJSAyID09
IDEpIHsKLSAgICAgIG1hcF8uZXJhc2UoaXQrKyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICsraXQ7
Ci0gICAgfQotICB9Ci0KLSAgRVhQRUNUX0VRKDEwLCBjb3VudCk7Ci0gIEVYUEVDVF9FUSg1LCBt
YXBfLnNpemUoKSk7Ci19Ci0KLVRFU1RfUChNYXBJbXBsVGVzdCwgRXJhc2VCeUl0ZXJhdG9yKSB7
Ci0gIGludDMyIGtleTEgPSAwOwotICBpbnQzMiBrZXkyID0gMTsKLSAgaW50MzIgdmFsdWUxID0g
MTAwOwotICBpbnQzMiB2YWx1ZTIgPSAxMDE7Ci0KLSAgc3RkOjptYXA8aW50MzIsIGludDMyPiBt
YXA7Ci0gIG1hcFtrZXkxXSA9IHZhbHVlMTsKLSAgbWFwW2tleTJdID0gdmFsdWUyOwotCi0gIG1h
cF8uaW5zZXJ0KG1hcC5iZWdpbigpLCBtYXAuZW5kKCkpOwotICBFeHBlY3RFbGVtZW50cyhtYXAp
OwotCi0gIG1hcF8uZXJhc2UobWFwXy5iZWdpbigpLCBtYXBfLmVuZCgpKTsKLSAgRVhQRUNUX1RS
VUUobWFwXy5lbXB0eSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1hcF8uc2l6ZSgpKTsKLSAgRVhQRUNU
X1RSVUUobWFwXy5lbmQoKSA9PSBtYXBfLmZpbmQoa2V5MSkpOwotICBFWFBFQ1RfVFJVRShtYXBf
LmVuZCgpID09IG1hcF8uZmluZChrZXkyKSk7Ci0gIEVYUEVDVF9UUlVFKG1hcF8uYmVnaW4oKSA9
PSBtYXBfLmVuZCgpKTsKLX0KLQotVEVTVF9QKE1hcEltcGxUZXN0LCBDbGVhcikgewotICBpbnQz
MiBrZXkgPSAwOwotICBpbnQzMiB2YWx1ZSA9IDEwMDsKLQotICBtYXBfW2tleV0gPSB2YWx1ZTsK
LSAgRXhwZWN0U2luZ2xlRWxlbWVudChrZXksIHZhbHVlKTsKLQotICBtYXBfLmNsZWFyKCk7Ci0K
LSAgRVhQRUNUX1RSVUUobWFwXy5lbXB0eSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1hcF8uc2l6ZSgp
KTsKLSAgRVhQRUNUX1RSVUUobWFwXy5lbmQoKSA9PSBtYXBfLmZpbmQoa2V5KSk7Ci0gIEVYUEVD
VF9UUlVFKG1hcF8uYmVnaW4oKSA9PSBtYXBfLmVuZCgpKTsKLX0KLQotc3RhdGljIHZvaWQgQ29w
eUNvbnN0cnVjdG9ySGVscGVyKEFyZW5hKiBhcmVuYSwgTWFwPGludDMyLCBpbnQzMj4qIG0pIHsK
LSAgaW50MzIga2V5MSA9IDA7Ci0gIGludDMyIGtleTIgPSAxOwotICBpbnQzMiB2YWx1ZTEgPSAx
MDA7Ci0gIGludDMyIHZhbHVlMiA9IDEwMTsKLQotICBzdGQ6Om1hcDxpbnQzMiwgaW50MzI+IG1h
cDsKLSAgbWFwW2tleTFdID0gdmFsdWUxOwotICBtYXBba2V5Ml0gPSB2YWx1ZTI7Ci0KLSAgbS0+
aW5zZXJ0KG1hcC5iZWdpbigpLCBtYXAuZW5kKCkpOwotCi0gIE1hcDxpbnQzMiwgaW50MzI+IG90
aGVyKCptKTsKLQotICBFWFBFQ1RfRVEoMiwgb3RoZXIuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHZh
bHVlMSwgb3RoZXIuYXQoa2V5MSkpOwotICBFWFBFQ1RfRVEodmFsdWUyLCBvdGhlci5hdChrZXky
KSk7Ci19Ci0KLVRFU1RfUChNYXBJbXBsVGVzdCwgQ29weUNvbnN0cnVjdG9yV2l0aEFyZW5hKSB7
Ci0gIEFyZW5hIGE7Ci0gIENvcHlDb25zdHJ1Y3RvckhlbHBlcigmYSwgJm1hcF8pOwotfQotCi1U
RVNUX1AoTWFwSW1wbFRlc3QsIENvcHlDb25zdHJ1Y3RvcldpdGhvdXRBcmVuYSkgewotICBDb3B5
Q29uc3RydWN0b3JIZWxwZXIoTlVMTCwgJm1hcF8pOwotfQotCi1URVNUX1AoTWFwSW1wbFRlc3Qs
IEl0ZXJDb25zdHJ1Y3RvcikgewotICBpbnQzMiBrZXkxID0gMDsKLSAgaW50MzIga2V5MiA9IDE7
Ci0gIGludDMyIHZhbHVlMSA9IDEwMDsKLSAgaW50MzIgdmFsdWUyID0gMTAxOwotCi0gIHN0ZDo6
bWFwPGludDMyLCBpbnQzMj4gbWFwOwotICBtYXBba2V5MV0gPSB2YWx1ZTE7Ci0gIG1hcFtrZXky
XSA9IHZhbHVlMjsKLQotICBNYXA8aW50MzIsIGludDMyPiBuZXdfbWFwKG1hcC5iZWdpbigpLCBt
YXAuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0oKSk7Ci0KLSAg
RVhQRUNUX0VRKDIsIG5ld19tYXAuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHZhbHVlMSwgbmV3X21h
cC5hdChrZXkxKSk7Ci0gIEVYUEVDVF9FUSh2YWx1ZTIsIG5ld19tYXAuYXQoa2V5MikpOwotfQot
Ci1URVNUX1AoTWFwSW1wbFRlc3QsIEFzc2lnbmVyKSB7Ci0gIGludDMyIGtleTEgPSAwOwotICBp
bnQzMiBrZXkyID0gMTsKLSAgaW50MzIgdmFsdWUxID0gMTAwOwotICBpbnQzMiB2YWx1ZTIgPSAx
MDE7Ci0KLSAgc3RkOjptYXA8aW50MzIsIGludDMyPiBtYXA7Ci0gIG1hcFtrZXkxXSA9IHZhbHVl
MTsKLSAgbWFwW2tleTJdID0gdmFsdWUyOwotCi0gIG1hcF8uaW5zZXJ0KG1hcC5iZWdpbigpLCBt
YXAuZW5kKCkpOwotCi0gIE1hcDxpbnQzMiwgaW50MzI+IG90aGVyKEdldFBhcmFtKCkpOwotICBp
bnQzMiBrZXlfb3RoZXIgPSAxMjM7Ci0gIGludDMyIHZhbHVlX290aGVyID0gMzIxOwotICBvdGhl
cltrZXlfb3RoZXJdID0gdmFsdWVfb3RoZXI7Ci0gIEVYUEVDVF9FUSgxLCBvdGhlci5zaXplKCkp
OwotCi0gIG90aGVyID0gbWFwXzsKLQotICBFWFBFQ1RfRVEoMiwgb3RoZXIuc2l6ZSgpKTsKLSAg
RVhQRUNUX0VRKHZhbHVlMSwgb3RoZXIuYXQoa2V5MSkpOwotICBFWFBFQ1RfRVEodmFsdWUyLCBv
dGhlci5hdChrZXkyKSk7Ci0gIEVYUEVDVF9UUlVFKG90aGVyLmZpbmQoa2V5X290aGVyKSA9PSBv
dGhlci5lbmQoKSk7Ci0KLSAgLy8gU2VsZiBhc3NpZ24KLSAgb3RoZXIgPSBvdGhlcjsKLSAgRVhQ
RUNUX0VRKDIsIG90aGVyLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSh2YWx1ZTEsIG90aGVyLmF0KGtl
eTEpKTsKLSAgRVhQRUNUX0VRKHZhbHVlMiwgb3RoZXIuYXQoa2V5MikpOwotCi0gIC8vIFRyeSBh
c3NpZ25tZW50IHRvIGEgbWFwIHdpdGggYSBkaWZmZXJlbnQgY2hvaWNlIG9mICJzdHlsZS4iCi0g
IE1hcDxpbnQzMiwgaW50MzI+IG0oIUdldFBhcmFtKCkpOwotICBtID0gb3RoZXI7Ci0gIEVYUEVD
VF9FUSgyLCBtLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSh2YWx1ZTEsIG0uYXQoa2V5MSkpOwotICBF
WFBFQ1RfRVEodmFsdWUyLCBtLmF0KGtleTIpKTsKLX0KLQotVEVTVF9QKE1hcEltcGxUZXN0LCBS
ZWhhc2gpIHsKLSAgY29uc3QgaW50IHRlc3Rfc2l6ZSA9IDUwOwotICBzdGQ6Om1hcDxpbnQzMiwg
aW50MzI+IHJlZmVyZW5jZV9tYXA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdF9zaXplOyBp
KyspIHsKLSAgICByZWZlcmVuY2VfbWFwW2ldID0gaTsKLSAgfQotICBmb3IgKGludCBpID0gMDsg
aSA8IHRlc3Rfc2l6ZTsgaSsrKSB7Ci0gICAgbWFwX1tpXSA9IHJlZmVyZW5jZV9tYXBbaV07Ci0g
ICAgRVhQRUNUX0VRKHJlZmVyZW5jZV9tYXBbaV0sIG1hcF9baV0pOwotICB9Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgdGVzdF9zaXplOyBpKyspIHsKLSAgICBtYXBfLmVyYXNlKGkpOwotICAgIEVY
UEVDVF9UUlVFKG1hcF8uZW5kKCkgPT0gbWFwXy5maW5kKGkpKTsKLSAgfQotICBFWFBFQ1RfVFJV
RShtYXBfLmVtcHR5KCkpOwotfQotCi1URVNUX1AoTWFwSW1wbFRlc3QsIEVxdWFsUmFuZ2UpIHsK
LSAgaW50IGtleSA9IDEwMCwga2V5X21pc3NpbmcgPSAxMDE7Ci0gIG1hcF9ba2V5XSA9IDEwMDsK
LQotICBzdGQ6OnBhaXI8Z29vZ2xlOjpwcm90b2J1Zjo6TWFwPGludDMyLCBpbnQzMj46Oml0ZXJh
dG9yLAotICAgICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6TWFwPGludDMyLCBpbnQzMj46Oml0
ZXJhdG9yPiByYW5nZSA9IG1hcF8uZXF1YWxfcmFuZ2Uoa2V5KTsKLSAgRVhQRUNUX1RSVUUobWFw
Xy5maW5kKGtleSkgPT0gcmFuZ2UuZmlyc3QpOwotICBFWFBFQ1RfVFJVRSgrK21hcF8uZmluZChr
ZXkpID09IHJhbmdlLnNlY29uZCk7Ci0KLSAgcmFuZ2UgPSBtYXBfLmVxdWFsX3JhbmdlKGtleV9t
aXNzaW5nKTsKLSAgRVhQRUNUX1RSVUUobWFwXy5lbmQoKSA9PSByYW5nZS5maXJzdCk7Ci0gIEVY
UEVDVF9UUlVFKG1hcF8uZW5kKCkgPT0gcmFuZ2Uuc2Vjb25kKTsKLQotICBzdGQ6OnBhaXI8Z29v
Z2xlOjpwcm90b2J1Zjo6TWFwPGludDMyLCBpbnQzMj46OmNvbnN0X2l0ZXJhdG9yLAotICAgICAg
ICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6TWFwPGludDMyLCBpbnQzMj46OmNvbnN0X2l0ZXJhdG9y
PiBjb25zdF9yYW5nZSA9Ci0gICAgICBjb25zdF9tYXBfLmVxdWFsX3JhbmdlKGtleSk7Ci0gIEVY
UEVDVF9UUlVFKGNvbnN0X21hcF8uZmluZChrZXkpID09IGNvbnN0X3JhbmdlLmZpcnN0KTsKLSAg
RVhQRUNUX1RSVUUoKytjb25zdF9tYXBfLmZpbmQoa2V5KSA9PSBjb25zdF9yYW5nZS5zZWNvbmQp
OwotCi0gIGNvbnN0X3JhbmdlID0gY29uc3RfbWFwXy5lcXVhbF9yYW5nZShrZXlfbWlzc2luZyk7
Ci0gIEVYUEVDVF9UUlVFKGNvbnN0X21hcF8uZW5kKCkgPT0gY29uc3RfcmFuZ2UuZmlyc3QpOwot
ICBFWFBFQ1RfVFJVRShjb25zdF9tYXBfLmVuZCgpID09IGNvbnN0X3JhbmdlLnNlY29uZCk7Ci19
Ci0KLVRFU1RfUChNYXBJbXBsVGVzdCwgQ29udmVydFRvU3RkTWFwKSB7Ci0gIG1hcF9bMTAwXSA9
IDEwMTsKLSAgc3RkOjptYXA8aW50MzIsIGludDMyPiBzdGRfbWFwKG1hcF8uYmVnaW4oKSwgbWFw
Xy5lbmQoKSk7Ci0gIEVYUEVDVF9FUSgxLCBzdGRfbWFwLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgx
MDEsIHN0ZF9tYXBbMTAwXSk7Ci19Ci0KLVRFU1RfUChNYXBJbXBsVGVzdCwgQ29udmVydFRvU3Rk
VmVjdG9yT2ZQYWlycykgewotICBtYXBfWzEwMF0gPSAxMDE7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6
cGFpcjxpbnQzMiwgaW50MzI+ID4gc3RkX3ZlYyhtYXBfLmJlZ2luKCksIG1hcF8uZW5kKCkpOwot
ICBFWFBFQ1RfRVEoMSwgc3RkX3ZlYy5zaXplKCkpOwotICBFWFBFQ1RfRVEoMTAwLCBzdGRfdmVj
WzBdLmZpcnN0KTsKLSAgRVhQRUNUX0VRKDEwMSwgc3RkX3ZlY1swXS5zZWNvbmQpOwotfQotCi1J
TlNUQU5USUFURV9URVNUX0NBU0VfUChCb29sU2VxdWVuY2UsIE1hcEltcGxUZXN0LCB0ZXN0aW5n
OjpCb29sKCkpOwotCi0vLyBNYXAgRmllbGQgUmVmbGVjdGlvbiBUZXN0ID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdGljIGludCBGdW5jKGludCBpLCBpbnQg
aikgewotICByZXR1cm4gaSAqIGo7Ci19Ci0KLXN0YXRpYyBzdHJpbmcgU3RyRnVuYyhpbnQgaSwg
aW50IGopIHsKLSAgc3RyaW5nIHN0cjsKLSAgU1N0cmluZ1ByaW50Zigmc3RyLCAiJWQiLCBGdW5j
KGksIGopKTsKLSAgcmV0dXJuIHN0cjsKLX0KLQotc3RhdGljIGludCBJbnQoY29uc3Qgc3RyaW5n
JiB2YWx1ZSkgewotICBpbnQgcmVzdWx0ID0gMDsKLSAgc3RkOjppc3RyaW5nc3RyZWFtKHZhbHVl
KSA+PiByZXN1bHQ7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWNsYXNzIE1hcEZpZWxkUmVmbGVj
dGlvblRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICB0eXBlZGVm
IEZpZWxkRGVzY3JpcHRvciBGRDsKLX07Ci0KLVRFU1RfRihNYXBGaWVsZFJlZmxlY3Rpb25UZXN0
LCBSZWd1bGFyRmllbGRzKSB7Ci0gIFRlc3RNYXAgbWVzc2FnZTsKLSAgY29uc3QgUmVmbGVjdGlv
biogcmVmbCA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotICBjb25zdCBEZXNjcmlwdG9yKiBk
ZXNjID0gbWVzc2FnZS5HZXREZXNjcmlwdG9yKCk7Ci0KLSAgTWFwPGludDMyLCBpbnQzMj4qIG1h
cF9pbnQzMl9pbnQzMiA9IG1lc3NhZ2UubXV0YWJsZV9tYXBfaW50MzJfaW50MzIoKTsKLSAgTWFw
PGludDMyLCBkb3VibGU+KiBtYXBfaW50MzJfZG91YmxlID0gbWVzc2FnZS5tdXRhYmxlX21hcF9p
bnQzMl9kb3VibGUoKTsKLSAgTWFwPHN0cmluZywgc3RyaW5nPiogbWFwX3N0cmluZ19zdHJpbmcg
PSBtZXNzYWdlLm11dGFibGVfbWFwX3N0cmluZ19zdHJpbmcoKTsKLSAgTWFwPGludDMyLCBGb3Jl
aWduTWVzc2FnZT4qIG1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UgPQotICAgICAgbWVzc2FnZS5t
dXRhYmxlX21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UoKTsKLQotICBmb3IgKGludCBpID0gMDsg
aSA8IDEwOyArK2kpIHsKLSAgICAoKm1hcF9pbnQzMl9pbnQzMilbaV0gPSBGdW5jKGksIDEpOwot
ICAgICgqbWFwX2ludDMyX2RvdWJsZSlbaV0gPSBGdW5jKGksIDIpOwotICAgICgqbWFwX3N0cmlu
Z19zdHJpbmcpW1N0ckZ1bmMoaSwgMSldID0gU3RyRnVuYyhpLCA1KTsKLSAgICAoKm1hcF9pbnQz
Ml9mb3JlaWduX21lc3NhZ2UpW2ldLnNldF9jKEZ1bmMoaSwgNikpOwotICB9Ci0KLSAgLy8gR2V0
IEZpZWxkRGVzY3JpcHRvcnMgZm9yIGFsbCB0aGUgZmllbGRzIG9mIGludGVyZXN0LgotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZkX21hcF9pbnQzMl9pbnQzMiA9Ci0gICAgICBkZXNjLT5GaW5k
RmllbGRCeU5hbWUoIm1hcF9pbnQzMl9pbnQzMiIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZkX21hcF9pbnQzMl9kb3VibGUgPQotICAgICAgZGVzYy0+RmluZEZpZWxkQnlOYW1lKCJtYXBf
aW50MzJfZG91YmxlIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmRfbWFwX3N0cmluZ19z
dHJpbmcgPQotICAgICAgZGVzYy0+RmluZEZpZWxkQnlOYW1lKCJtYXBfc3RyaW5nX3N0cmluZyIp
OwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2Ug
PQotICAgICAgZGVzYy0+RmluZEZpZWxkQnlOYW1lKCJtYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdl
Iik7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmZF9tYXBfaW50MzJfaW4zMl9rZXkgPQot
ICAgICAgZmRfbWFwX2ludDMyX2ludDMyLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1l
KCJrZXkiKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmZF9tYXBfaW50MzJfaW4zMl92YWx1
ZSA9Ci0gICAgICBmZF9tYXBfaW50MzJfaW50MzItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRC
eU5hbWUoInZhbHVlIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmRfbWFwX2ludDMyX2Rv
dWJsZV9rZXkgPQotICAgICAgZmRfbWFwX2ludDMyX2RvdWJsZS0+bWVzc2FnZV90eXBlKCktPkZp
bmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmRfbWFwX2lu
dDMyX2RvdWJsZV92YWx1ZSA9Ci0gICAgICBmZF9tYXBfaW50MzJfZG91YmxlLT5tZXNzYWdlX3R5
cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZkX21hcF9zdHJpbmdfc3RyaW5nX2tleSA9Ci0gICAgICBmZF9tYXBfc3RyaW5nX3N0cmluZy0+
bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmRfbWFwX3N0cmluZ19zdHJpbmdfdmFsdWUgPQotICAgICAgZmRfbWFwX3N0cmlu
Z19zdHJpbmctPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmRfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZV9rZXkgPQot
ICAgICAgZmRfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS0+bWVzc2FnZV90eXBlKCktPkZpbmRG
aWVsZEJ5TmFtZSgia2V5Iik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmRfbWFwX2ludDMy
X2ZvcmVpZ25fbWVzc2FnZV92YWx1ZSA9Ci0gICAgICBmZF9tYXBfaW50MzJfZm9yZWlnbl9tZXNz
YWdlLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotCi0gIC8vIEdl
dCBSZXBlYXRlZFB0ckZpZWxkIG9iamVjdHMgZm9yIGFsbCBmaWVsZHMgb2YgaW50ZXJlc3QuCi0g
IGNvbnN0IFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4mIG1mX2ludDMyX2ludDMyID0KLSAgICAg
IHJlZmwtPkdldFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4obWVzc2FnZSwgZmRfbWFwX2ludDMy
X2ludDMyKTsKLSAgY29uc3QgUmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPiYgbWZfaW50MzJfZG91
YmxlID0KLSAgICAgIHJlZmwtPkdldFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4obWVzc2FnZSwg
ZmRfbWFwX2ludDMyX2RvdWJsZSk7Ci0gIGNvbnN0IFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4m
IG1mX3N0cmluZ19zdHJpbmcgPQotICAgICAgcmVmbC0+R2V0UmVwZWF0ZWRQdHJGaWVsZDxNZXNz
YWdlPihtZXNzYWdlLCBmZF9tYXBfc3RyaW5nX3N0cmluZyk7Ci0gIGNvbnN0IFJlcGVhdGVkUHRy
RmllbGQ8TWVzc2FnZT4mCi0gICAgICBtZl9pbnQzMl9mb3JlaWduX21lc3NhZ2UgPQotICAgICAg
ICAgIHJlZmwtPkdldFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4oCi0gICAgICAgICAgICAgIG1l
c3NhZ2UsIGZkX21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UpOwotCi0gIC8vIEdldCBtdXRhYmxl
IFJlcGVhdGVkUHRyRmllbGQgb2JqZWN0cyBmb3IgYWxsIGZpZWxkcyBvZiBpbnRlcmVzdC4KLSAg
UmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPiogbW1mX2ludDMyX2ludDMyID0KLSAgICAgIHJlZmwt
Pk11dGFibGVSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+KCZtZXNzYWdlLCBmZF9tYXBfaW50MzJf
aW50MzIpOwotICBSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+KiBtbWZfaW50MzJfZG91YmxlID0K
LSAgICAgIHJlZmwtPk11dGFibGVSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+KCZtZXNzYWdlLCBm
ZF9tYXBfaW50MzJfZG91YmxlKTsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPiogbW1mX3N0
cmluZ19zdHJpbmcgPQotICAgICAgcmVmbC0+TXV0YWJsZVJlcGVhdGVkUHRyRmllbGQ8TWVzc2Fn
ZT4oJm1lc3NhZ2UsIGZkX21hcF9zdHJpbmdfc3RyaW5nKTsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxN
ZXNzYWdlPiogbW1mX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSA9Ci0gICAgICByZWZsLT5NdXRhYmxl
UmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPigKLSAgICAgICAgICAmbWVzc2FnZSwgZmRfbWFwX2lu
dDMyX2ZvcmVpZ25fbWVzc2FnZSk7Ci0KLSAgLy8gTWFrZSBzdXJlIHdlIGNhbiBkbyBnZXRzIHRo
cm91Z2ggdGhlIFJlcGVhdGVkUHRyRmllbGQgb2JqZWN0cy4KLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCAxMDsgKytpKSB7Ci0gICAgewotICAgICAgLy8gQ2hlY2sgZ2V0cyB0aHJvdWdoIGNvbnN0IG9i
amVjdHMuCi0gICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlX2ludDMyX2ludDMyID0gbWZfaW50
MzJfaW50MzIuR2V0KGkpOwotICAgICAgaW50MzIga2V5X2ludDMyX2ludDMyID0gbWVzc2FnZV9p
bnQzMl9pbnQzMi5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAgIG1lc3NhZ2Vf
aW50MzJfaW50MzIsIGZkX21hcF9pbnQzMl9pbjMyX2tleSk7Ci0gICAgICBpbnQzMiB2YWx1ZV9p
bnQzMl9pbnQzMiA9IG1lc3NhZ2VfaW50MzJfaW50MzIuR2V0UmVmbGVjdGlvbigpLT5HZXRJbnQz
MigKLSAgICAgICAgICBtZXNzYWdlX2ludDMyX2ludDMyLCBmZF9tYXBfaW50MzJfaW4zMl92YWx1
ZSk7Ci0gICAgICBFWFBFQ1RfRVEodmFsdWVfaW50MzJfaW50MzIsIEZ1bmMoa2V5X2ludDMyX2lu
dDMyLCAxKSk7Ci0KLSAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2VfaW50MzJfZG91YmxlID0g
bWZfaW50MzJfZG91YmxlLkdldChpKTsKLSAgICAgIGludDMyIGtleV9pbnQzMl9kb3VibGUgPSBt
ZXNzYWdlX2ludDMyX2RvdWJsZS5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAg
IG1lc3NhZ2VfaW50MzJfZG91YmxlLCBmZF9tYXBfaW50MzJfZG91YmxlX2tleSk7Ci0gICAgICBk
b3VibGUgdmFsdWVfaW50MzJfZG91YmxlID0KLSAgICAgICAgICBtZXNzYWdlX2ludDMyX2RvdWJs
ZS5HZXRSZWZsZWN0aW9uKCktPkdldERvdWJsZSgKLSAgICAgICAgICAgICAgbWVzc2FnZV9pbnQz
Ml9kb3VibGUsIGZkX21hcF9pbnQzMl9kb3VibGVfdmFsdWUpOwotICAgICAgRVhQRUNUX0VRKHZh
bHVlX2ludDMyX2RvdWJsZSwgRnVuYyhrZXlfaW50MzJfZG91YmxlLCAyKSk7Ci0KLSAgICAgIGNv
bnN0IE1lc3NhZ2UmIG1lc3NhZ2Vfc3RyaW5nX3N0cmluZyA9IG1mX3N0cmluZ19zdHJpbmcuR2V0
KGkpOwotICAgICAgc3RyaW5nIGtleV9zdHJpbmdfc3RyaW5nID0KLSAgICAgICAgICBtZXNzYWdl
X3N0cmluZ19zdHJpbmcuR2V0UmVmbGVjdGlvbigpLT5HZXRTdHJpbmcoCi0gICAgICAgICAgICAg
IG1lc3NhZ2Vfc3RyaW5nX3N0cmluZywgZmRfbWFwX3N0cmluZ19zdHJpbmdfa2V5KTsKLSAgICAg
IHN0cmluZyB2YWx1ZV9zdHJpbmdfc3RyaW5nID0KLSAgICAgICAgICBtZXNzYWdlX3N0cmluZ19z
dHJpbmcuR2V0UmVmbGVjdGlvbigpLT5HZXRTdHJpbmcoCi0gICAgICAgICAgICAgIG1lc3NhZ2Vf
c3RyaW5nX3N0cmluZywgZmRfbWFwX3N0cmluZ19zdHJpbmdfdmFsdWUpOwotICAgICAgRVhQRUNU
X0VRKHZhbHVlX3N0cmluZ19zdHJpbmcsIFN0ckZ1bmMoSW50KGtleV9zdHJpbmdfc3RyaW5nKSwg
NSkpOwotCi0gICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlX2ludDMyX21lc3NhZ2UgPSBtZl9p
bnQzMl9mb3JlaWduX21lc3NhZ2UuR2V0KGkpOwotICAgICAgaW50MzIga2V5X2ludDMyX21lc3Nh
Z2UgPSBtZXNzYWdlX2ludDMyX21lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigKLSAg
ICAgICAgICBtZXNzYWdlX2ludDMyX21lc3NhZ2UsIGZkX21hcF9pbnQzMl9mb3JlaWduX21lc3Nh
Z2Vfa2V5KTsKLSAgICAgIGNvbnN0IEZvcmVpZ25NZXNzYWdlJiB2YWx1ZV9pbnQzMl9tZXNzYWdl
ID0KLSAgICAgICAgICBkb3duX2Nhc3Q8Y29uc3QgRm9yZWlnbk1lc3NhZ2UmPigKLSAgICAgICAg
ICAgICAgbWVzc2FnZV9pbnQzMl9tZXNzYWdlLkdldFJlZmxlY3Rpb24oKQotICAgICAgICAgICAg
ICAgICAgLT5HZXRNZXNzYWdlKG1lc3NhZ2VfaW50MzJfbWVzc2FnZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmZF9tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlX3ZhbHVlKSk7Ci0g
ICAgICBFWFBFQ1RfRVEodmFsdWVfaW50MzJfbWVzc2FnZS5jKCksIEZ1bmMoa2V5X2ludDMyX21l
c3NhZ2UsIDYpKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAvLyBDaGVjayBnZXRzIHRocm91Z2gg
bXV0YWJsZSBvYmplY3RzLgotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZV9pbnQzMl9pbnQz
MiA9IG1tZl9pbnQzMl9pbnQzMi0+R2V0KGkpOwotICAgICAgaW50MzIga2V5X2ludDMyX2ludDMy
ID0gbWVzc2FnZV9pbnQzMl9pbnQzMi5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAg
ICAgIG1lc3NhZ2VfaW50MzJfaW50MzIsIGZkX21hcF9pbnQzMl9pbjMyX2tleSk7Ci0gICAgICBp
bnQzMiB2YWx1ZV9pbnQzMl9pbnQzMiA9IG1lc3NhZ2VfaW50MzJfaW50MzIuR2V0UmVmbGVjdGlv
bigpLT5HZXRJbnQzMigKLSAgICAgICAgICBtZXNzYWdlX2ludDMyX2ludDMyLCBmZF9tYXBfaW50
MzJfaW4zMl92YWx1ZSk7Ci0gICAgICBFWFBFQ1RfRVEodmFsdWVfaW50MzJfaW50MzIsIEZ1bmMo
a2V5X2ludDMyX2ludDMyLCAxKSk7Ci0KLSAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2VfaW50
MzJfZG91YmxlID0gbW1mX2ludDMyX2RvdWJsZS0+R2V0KGkpOwotICAgICAgaW50MzIga2V5X2lu
dDMyX2RvdWJsZSA9IG1lc3NhZ2VfaW50MzJfZG91YmxlLkdldFJlZmxlY3Rpb24oKS0+R2V0SW50
MzIoCi0gICAgICAgICAgbWVzc2FnZV9pbnQzMl9kb3VibGUsIGZkX21hcF9pbnQzMl9kb3VibGVf
a2V5KTsKLSAgICAgIGRvdWJsZSB2YWx1ZV9pbnQzMl9kb3VibGUgPQotICAgICAgICAgIG1lc3Nh
Z2VfaW50MzJfZG91YmxlLkdldFJlZmxlY3Rpb24oKS0+R2V0RG91YmxlKAotICAgICAgICAgICAg
ICBtZXNzYWdlX2ludDMyX2RvdWJsZSwgZmRfbWFwX2ludDMyX2RvdWJsZV92YWx1ZSk7Ci0gICAg
ICBFWFBFQ1RfRVEodmFsdWVfaW50MzJfZG91YmxlLCBGdW5jKGtleV9pbnQzMl9kb3VibGUsIDIp
KTsKLQotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZV9zdHJpbmdfc3RyaW5nID0gbW1mX3N0
cmluZ19zdHJpbmctPkdldChpKTsKLSAgICAgIHN0cmluZyBrZXlfc3RyaW5nX3N0cmluZyA9Ci0g
ICAgICAgICAgbWVzc2FnZV9zdHJpbmdfc3RyaW5nLkdldFJlZmxlY3Rpb24oKS0+R2V0U3RyaW5n
KAotICAgICAgICAgICAgICBtZXNzYWdlX3N0cmluZ19zdHJpbmcsIGZkX21hcF9zdHJpbmdfc3Ry
aW5nX2tleSk7Ci0gICAgICBzdHJpbmcgdmFsdWVfc3RyaW5nX3N0cmluZyA9Ci0gICAgICAgICAg
bWVzc2FnZV9zdHJpbmdfc3RyaW5nLkdldFJlZmxlY3Rpb24oKS0+R2V0U3RyaW5nKAotICAgICAg
ICAgICAgICBtZXNzYWdlX3N0cmluZ19zdHJpbmcsIGZkX21hcF9zdHJpbmdfc3RyaW5nX3ZhbHVl
KTsKLSAgICAgIEVYUEVDVF9FUSh2YWx1ZV9zdHJpbmdfc3RyaW5nLCBTdHJGdW5jKEludChrZXlf
c3RyaW5nX3N0cmluZyksIDUpKTsKLQotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZV9pbnQz
Ml9tZXNzYWdlID0gbW1mX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS0+R2V0KGkpOwotICAgICAgaW50
MzIga2V5X2ludDMyX21lc3NhZ2UgPSBtZXNzYWdlX2ludDMyX21lc3NhZ2UuR2V0UmVmbGVjdGlv
bigpLT5HZXRJbnQzMigKLSAgICAgICAgICBtZXNzYWdlX2ludDMyX21lc3NhZ2UsIGZkX21hcF9p
bnQzMl9mb3JlaWduX21lc3NhZ2Vfa2V5KTsKLSAgICAgIGNvbnN0IEZvcmVpZ25NZXNzYWdlJiB2
YWx1ZV9pbnQzMl9tZXNzYWdlID0KLSAgICAgICAgICBkb3duX2Nhc3Q8Y29uc3QgRm9yZWlnbk1l
c3NhZ2UmPigKLSAgICAgICAgICAgICAgbWVzc2FnZV9pbnQzMl9tZXNzYWdlLkdldFJlZmxlY3Rp
b24oKQotICAgICAgICAgICAgICAgICAgLT5HZXRNZXNzYWdlKG1lc3NhZ2VfaW50MzJfbWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9tYXBfaW50MzJfZm9yZWlnbl9t
ZXNzYWdlX3ZhbHVlKSk7Ci0gICAgICBFWFBFQ1RfRVEodmFsdWVfaW50MzJfbWVzc2FnZS5jKCks
IEZ1bmMoa2V5X2ludDMyX21lc3NhZ2UsIDYpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBEbyBzZXRz
IHRocm91Z2ggdGhlIFJlcGVhdGVkUHRyRmllbGQgb2JqZWN0cy4KLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCAxMDsgaSsrKSB7Ci0gICAgewotICAgICAgTWVzc2FnZSogbWVzc2FnZV9pbnQzMl9pbnQz
MiA9IG1tZl9pbnQzMl9pbnQzMi0+TXV0YWJsZShpKTsKLSAgICAgIGludDMyIGtleV9pbnQzMl9p
bnQzMiA9IG1lc3NhZ2VfaW50MzJfaW50MzItPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoCi0g
ICAgICAgICAgKm1lc3NhZ2VfaW50MzJfaW50MzIsIGZkX21hcF9pbnQzMl9pbjMyX2tleSk7Ci0g
ICAgICBtZXNzYWdlX2ludDMyX2ludDMyLT5HZXRSZWZsZWN0aW9uKCktPlNldEludDMyKG1lc3Nh
Z2VfaW50MzJfaW50MzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZkX21hcF9pbnQzMl9pbjMyX3ZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jKGtleV9pbnQzMl9pbnQzMiwg
LTEpKTsKLQotICAgICAgTWVzc2FnZSogbWVzc2FnZV9pbnQzMl9kb3VibGUgPSBtbWZfaW50MzJf
ZG91YmxlLT5NdXRhYmxlKGkpOwotICAgICAgaW50MzIga2V5X2ludDMyX2RvdWJsZSA9IG1lc3Nh
Z2VfaW50MzJfZG91YmxlLT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAgICpt
ZXNzYWdlX2ludDMyX2RvdWJsZSwgZmRfbWFwX2ludDMyX2RvdWJsZV9rZXkpOwotICAgICAgbWVz
c2FnZV9pbnQzMl9kb3VibGUtPkdldFJlZmxlY3Rpb24oKS0+U2V0RG91YmxlKAotICAgICAgICAg
IG1lc3NhZ2VfaW50MzJfZG91YmxlLCBmZF9tYXBfaW50MzJfZG91YmxlX3ZhbHVlLAotICAgICAg
ICAgIEZ1bmMoa2V5X2ludDMyX2RvdWJsZSwgLTIpKTsKLQotICAgICAgTWVzc2FnZSogbWVzc2Fn
ZV9zdHJpbmdfc3RyaW5nID0gbW1mX3N0cmluZ19zdHJpbmctPk11dGFibGUoaSk7Ci0gICAgICBz
dHJpbmcga2V5X3N0cmluZ19zdHJpbmcgPQotICAgICAgICAgIG1lc3NhZ2Vfc3RyaW5nX3N0cmlu
Zy0+R2V0UmVmbGVjdGlvbigpLT5HZXRTdHJpbmcoCi0gICAgICAgICAgICAgICptZXNzYWdlX3N0
cmluZ19zdHJpbmcsIGZkX21hcF9zdHJpbmdfc3RyaW5nX2tleSk7Ci0gICAgICBtZXNzYWdlX3N0
cmluZ19zdHJpbmctPkdldFJlZmxlY3Rpb24oKS0+U2V0U3RyaW5nKAotICAgICAgICAgIG1lc3Nh
Z2Vfc3RyaW5nX3N0cmluZywgZmRfbWFwX3N0cmluZ19zdHJpbmdfdmFsdWUsCi0gICAgICAgICAg
U3RyRnVuYyhJbnQoa2V5X3N0cmluZ19zdHJpbmcpLCAtNSkpOwotCi0gICAgICBNZXNzYWdlKiBt
ZXNzYWdlX2ludDMyX21lc3NhZ2UgPSBtbWZfaW50MzJfZm9yZWlnbl9tZXNzYWdlLT5NdXRhYmxl
KGkpOwotICAgICAgaW50MzIga2V5X2ludDMyX21lc3NhZ2UgPQotICAgICAgICAgIG1lc3NhZ2Vf
aW50MzJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigKLSAgICAgICAgICAgICAg
Km1lc3NhZ2VfaW50MzJfbWVzc2FnZSwgZmRfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZV9rZXkp
OwotICAgICAgRm9yZWlnbk1lc3NhZ2UqIHZhbHVlX2ludDMyX21lc3NhZ2UgPSBkb3duX2Nhc3Q8
Rm9yZWlnbk1lc3NhZ2UqPigKLSAgICAgICAgICBtZXNzYWdlX2ludDMyX21lc3NhZ2UtPkdldFJl
ZmxlY3Rpb24oKQotICAgICAgICAgICAgICAtPk11dGFibGVNZXNzYWdlKG1lc3NhZ2VfaW50MzJf
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9tYXBfaW50MzJfZm9y
ZWlnbl9tZXNzYWdlX3ZhbHVlKSk7Ci0gICAgICB2YWx1ZV9pbnQzMl9tZXNzYWdlLT5zZXRfYyhG
dW5jKGtleV9pbnQzMl9tZXNzYWdlLCAtNikpOwotICAgIH0KLSAgfQotCi0gIC8vIENoZWNrIGdl
dHMgdGhyb3VnaCBtdXRhYmxlIG9iamVjdHMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkr
KykgewotICAgIEVYUEVDVF9FUShGdW5jKGksIC0xKSwgbWVzc2FnZS5tYXBfaW50MzJfaW50MzIo
KS5hdChpKSk7Ci0gICAgRVhQRUNUX0VRKEZ1bmMoaSwgLTIpLCBtZXNzYWdlLm1hcF9pbnQzMl9k
b3VibGUoKS5hdChpKSk7Ci0gICAgRVhQRUNUX0VRKFN0ckZ1bmMoaSwgLTUpLCBtZXNzYWdlLm1h
cF9zdHJpbmdfc3RyaW5nKCkuYXQoU3RyRnVuYyhpLCAxKSkpOwotICAgIEVYUEVDVF9FUShGdW5j
KGksIC02KSwgbWVzc2FnZS5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlKCkuYXQoaSkuYygpKTsK
LSAgfQotfQotCi1URVNUX0YoTWFwRmllbGRSZWZsZWN0aW9uVGVzdCwgUmVwZWF0ZWRGaWVsZFJl
ZkZvclJlZ3VsYXJGaWVsZHMpIHsKLSAgVGVzdE1hcCBtZXNzYWdlOwotICBjb25zdCBSZWZsZWN0
aW9uKiByZWZsID0gbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IERlc2NyaXB0b3Iq
IGRlc2MgPSBtZXNzYWdlLkdldERlc2NyaXB0b3IoKTsKLQotICBNYXA8aW50MzIsIGludDMyPiog
bWFwX2ludDMyX2ludDMyID0gbWVzc2FnZS5tdXRhYmxlX21hcF9pbnQzMl9pbnQzMigpOwotICBN
YXA8aW50MzIsIGRvdWJsZT4qIG1hcF9pbnQzMl9kb3VibGUgPSBtZXNzYWdlLm11dGFibGVfbWFw
X2ludDMyX2RvdWJsZSgpOwotICBNYXA8c3RyaW5nLCBzdHJpbmc+KiBtYXBfc3RyaW5nX3N0cmlu
ZyA9IG1lc3NhZ2UubXV0YWJsZV9tYXBfc3RyaW5nX3N0cmluZygpOwotICBNYXA8aW50MzIsIEZv
cmVpZ25NZXNzYWdlPiogbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSA9Ci0gICAgICBtZXNzYWdl
Lm11dGFibGVfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSgpOwotCi0gIGZvciAoaW50IGkgPSAw
OyBpIDwgMTA7ICsraSkgewotICAgICgqbWFwX2ludDMyX2ludDMyKVtpXSA9IEZ1bmMoaSwgMSk7
Ci0gICAgKCptYXBfaW50MzJfZG91YmxlKVtpXSA9IEZ1bmMoaSwgMik7Ci0gICAgKCptYXBfc3Ry
aW5nX3N0cmluZylbU3RyRnVuYyhpLCAxKV0gPSBTdHJGdW5jKGksIDUpOwotICAgICgqbWFwX2lu
dDMyX2ZvcmVpZ25fbWVzc2FnZSlbaV0uc2V0X2MoRnVuYyhpLCA2KSk7Ci0gIH0KLQotICAvLyBH
ZXQgRmllbGREZXNjcmlwdG9ycyBmb3IgYWxsIHRoZSBmaWVsZHMgb2YgaW50ZXJlc3QuCi0gIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmRfbWFwX2ludDMyX2ludDMyID0KLSAgICAgIGRlc2MtPkZp
bmRGaWVsZEJ5TmFtZSgibWFwX2ludDMyX2ludDMyIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmRfbWFwX2ludDMyX2RvdWJsZSA9Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoIm1h
cF9pbnQzMl9kb3VibGUiKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmZF9tYXBfc3RyaW5n
X3N0cmluZyA9Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9zdHJpbmdfc3RyaW5n
Iik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmRfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2Fn
ZSA9Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9pbnQzMl9mb3JlaWduX21lc3Nh
Z2UiKTsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX21hcF9pbnQzMl9pbjMyX2tleSA9
Ci0gICAgICBmZF9tYXBfaW50MzJfaW50MzItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5h
bWUoImtleSIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX21hcF9pbnQzMl9pbjMyX3Zh
bHVlID0KLSAgICAgIGZkX21hcF9pbnQzMl9pbnQzMi0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVs
ZEJ5TmFtZSgidmFsdWUiKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmZF9tYXBfaW50MzJf
ZG91YmxlX2tleSA9Ci0gICAgICBmZF9tYXBfaW50MzJfZG91YmxlLT5tZXNzYWdlX3R5cGUoKS0+
RmluZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmZF9tYXBf
aW50MzJfZG91YmxlX3ZhbHVlID0KLSAgICAgIGZkX21hcF9pbnQzMl9kb3VibGUtPm1lc3NhZ2Vf
dHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmRfbWFwX3N0cmluZ19zdHJpbmdfa2V5ID0KLSAgICAgIGZkX21hcF9zdHJpbmdfc3RyaW5n
LT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBmZF9tYXBfc3RyaW5nX3N0cmluZ192YWx1ZSA9Ci0gICAgICBmZF9tYXBfc3Ry
aW5nX3N0cmluZy0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgidmFsdWUiKTsKLSAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmZF9tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlX2tleSA9
Ci0gICAgICBmZF9tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlLT5tZXNzYWdlX3R5cGUoKS0+Rmlu
ZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmZF9tYXBfaW50
MzJfZm9yZWlnbl9tZXNzYWdlX3ZhbHVlID0KLSAgICAgIGZkX21hcF9pbnQzMl9mb3JlaWduX21l
c3NhZ2UtPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0KLSAgLy8g
R2V0IFJlcGVhdGVkRmllbGRSZWYgb2JqZWN0cyBmb3IgYWxsIGZpZWxkcyBvZiBpbnRlcmVzdC4K
LSAgY29uc3QgUmVwZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPiBtZl9pbnQzMl9pbnQzMiA9Ci0gICAg
ICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVmPE1lc3NhZ2U+KG1lc3NhZ2UsIGZkX21hcF9pbnQz
Ml9pbnQzMik7Ci0gIGNvbnN0IFJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4gbWZfaW50MzJfZG91
YmxlID0KLSAgICAgIHJlZmwtPkdldFJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4obWVzc2FnZSwg
ZmRfbWFwX2ludDMyX2RvdWJsZSk7Ci0gIGNvbnN0IFJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4g
bWZfc3RyaW5nX3N0cmluZyA9Ci0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVmPE1lc3Nh
Z2U+KG1lc3NhZ2UsIGZkX21hcF9zdHJpbmdfc3RyaW5nKTsKLSAgY29uc3QgUmVwZWF0ZWRGaWVs
ZFJlZjxNZXNzYWdlPiBtZl9pbnQzMl9mb3JlaWduX21lc3NhZ2UgPQotICAgICAgcmVmbC0+R2V0
UmVwZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPihtZXNzYWdlLCBmZF9tYXBfaW50MzJfZm9yZWlnbl9t
ZXNzYWdlKTsKLQotICAvLyBHZXQgbXV0YWJsZSBSZXBlYXRlZEZpZWxkUmVmIG9iamVjdHMgZm9y
IGFsbCBmaWVsZHMgb2YgaW50ZXJlc3QuCi0gIGNvbnN0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVm
PE1lc3NhZ2U+IG1tZl9pbnQzMl9pbnQzMiA9Ci0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0
ZWRGaWVsZFJlZjxNZXNzYWdlPigmbWVzc2FnZSwgZmRfbWFwX2ludDMyX2ludDMyKTsKLSAgY29u
c3QgTXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4gbW1mX2ludDMyX2RvdWJsZSA9Ci0g
ICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPigmbWVzc2FnZSwg
ZmRfbWFwX2ludDMyX2RvdWJsZSk7Ci0gIGNvbnN0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVmPE1l
c3NhZ2U+IG1tZl9zdHJpbmdfc3RyaW5nID0KLSAgICAgIHJlZmwtPkdldE11dGFibGVSZXBlYXRl
ZEZpZWxkUmVmPE1lc3NhZ2U+KCZtZXNzYWdlLCBmZF9tYXBfc3RyaW5nX3N0cmluZyk7Ci0gIGNv
bnN0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVmPE1lc3NhZ2U+Ci0gICAgICBtbWZfaW50MzJfZm9y
ZWlnbl9tZXNzYWdlID0KLSAgICAgICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJl
ZjxNZXNzYWdlPigKLSAgICAgICAgICAgICAgJm1lc3NhZ2UsIGZkX21hcF9pbnQzMl9mb3JlaWdu
X21lc3NhZ2UpOwotCi0gIC8vIEdldCBlbnRyeSBkZWZhdWx0IGluc3RhbmNlcwotICBnb29nbGU6
OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IGVudHJ5X2ludDMyX2ludDMyKAotICAgICAg
TWVzc2FnZUZhY3Rvcnk6OmdlbmVyYXRlZF9mYWN0b3J5KCkKLSAgICAgICAgICAtPkdldFByb3Rv
dHlwZShmZF9tYXBfaW50MzJfaW50MzItPm1lc3NhZ2VfdHlwZSgpKQotICAgICAgICAgIC0+TmV3
KCkpOwotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IGVudHJ5X2ludDMy
X2RvdWJsZSgKLSAgICAgIE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFjdG9yeSgpCi0gICAg
ICAgICAgLT5HZXRQcm90b3R5cGUoZmRfbWFwX2ludDMyX2RvdWJsZS0+bWVzc2FnZV90eXBlKCkp
Ci0gICAgICAgICAgLT5OZXcoKSk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8TWVz
c2FnZT4gZW50cnlfc3RyaW5nX3N0cmluZygKLSAgICAgIE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0
ZWRfZmFjdG9yeSgpCi0gICAgICAgICAgLT5HZXRQcm90b3R5cGUoZmRfbWFwX3N0cmluZ19zdHJp
bmctPm1lc3NhZ2VfdHlwZSgpKQotICAgICAgICAgIC0+TmV3KCkpOwotICBnb29nbGU6OnByb3Rv
YnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IGVudHJ5X2ludDMyX2ZvcmVpZ25fbWVzc2FnZSgKLSAg
ICAgIE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFjdG9yeSgpCi0gICAgICAgICAgLT5HZXRQ
cm90b3R5cGUoZmRfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS0+bWVzc2FnZV90eXBlKCkpCi0g
ICAgICAgICAgLT5OZXcoKSk7Ci0KLSAgRVhQRUNUX0VRKDEwLCBtZl9pbnQzMl9pbnQzMi5zaXpl
KCkpOwotICBFWFBFQ1RfRVEoMTAsIG1tZl9pbnQzMl9pbnQzMi5zaXplKCkpOwotICBFWFBFQ1Rf
RVEoMTAsIG1mX2ludDMyX2RvdWJsZS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMTAsIG1tZl9pbnQz
Ml9kb3VibGUuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEwLCBtZl9zdHJpbmdfc3RyaW5nLnNpemUo
KSk7Ci0gIEVYUEVDVF9FUSgxMCwgbW1mX3N0cmluZ19zdHJpbmcuc2l6ZSgpKTsKLSAgRVhQRUNU
X0VRKDEwLCBtZl9pbnQzMl9mb3JlaWduX21lc3NhZ2Uuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEw
LCBtbWZfaW50MzJfZm9yZWlnbl9tZXNzYWdlLnNpemUoKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKG1m
X2ludDMyX2ludDMyLmVtcHR5KCkpOwotICBFWFBFQ1RfRkFMU0UobW1mX2ludDMyX2ludDMyLmVt
cHR5KCkpOwotICBFWFBFQ1RfRkFMU0UobWZfaW50MzJfZG91YmxlLmVtcHR5KCkpOwotICBFWFBF
Q1RfRkFMU0UobW1mX2ludDMyX2RvdWJsZS5lbXB0eSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1mX3N0
cmluZ19zdHJpbmcuZW1wdHkoKSk7Ci0gIEVYUEVDVF9GQUxTRShtbWZfc3RyaW5nX3N0cmluZy5l
bXB0eSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1mX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS5lbXB0eSgp
KTsKLSAgRVhQRUNUX0ZBTFNFKG1tZl9pbnQzMl9mb3JlaWduX21lc3NhZ2UuZW1wdHkoKSk7Ci0K
LSAgLy8gTWFrZSBzdXJlIHdlIGNhbiBkbyBnZXRzIHRocm91Z2ggdGhlIFJlcGVhdGVkRmllbGRS
ZWYgb2JqZWN0cy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgewotICAg
ICAgLy8gQ2hlY2sgZ2V0cyB0aHJvdWdoIGNvbnN0IG9iamVjdHMuCi0gICAgICBjb25zdCBNZXNz
YWdlJiBtZXNzYWdlX2ludDMyX2ludDMyID0KLSAgICAgICAgICBtZl9pbnQzMl9pbnQzMi5HZXQo
aSwgZW50cnlfaW50MzJfaW50MzIuZ2V0KCkpOwotICAgICAgaW50MzIga2V5X2ludDMyX2ludDMy
ID0gbWVzc2FnZV9pbnQzMl9pbnQzMi5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAg
ICAgIG1lc3NhZ2VfaW50MzJfaW50MzIsIGZkX21hcF9pbnQzMl9pbjMyX2tleSk7Ci0gICAgICBp
bnQzMiB2YWx1ZV9pbnQzMl9pbnQzMiA9IG1lc3NhZ2VfaW50MzJfaW50MzIuR2V0UmVmbGVjdGlv
bigpLT5HZXRJbnQzMigKLSAgICAgICAgICBtZXNzYWdlX2ludDMyX2ludDMyLCBmZF9tYXBfaW50
MzJfaW4zMl92YWx1ZSk7Ci0gICAgICBFWFBFQ1RfRVEodmFsdWVfaW50MzJfaW50MzIsIEZ1bmMo
a2V5X2ludDMyX2ludDMyLCAxKSk7Ci0KLSAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2VfaW50
MzJfZG91YmxlID0KLSAgICAgICAgICBtZl9pbnQzMl9kb3VibGUuR2V0KGksIGVudHJ5X2ludDMy
X2RvdWJsZS5nZXQoKSk7Ci0gICAgICBpbnQzMiBrZXlfaW50MzJfZG91YmxlID0gbWVzc2FnZV9p
bnQzMl9kb3VibGUuR2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigKLSAgICAgICAgICBtZXNzYWdl
X2ludDMyX2RvdWJsZSwgZmRfbWFwX2ludDMyX2RvdWJsZV9rZXkpOwotICAgICAgZG91YmxlIHZh
bHVlX2ludDMyX2RvdWJsZSA9Ci0gICAgICAgICAgbWVzc2FnZV9pbnQzMl9kb3VibGUuR2V0UmVm
bGVjdGlvbigpLT5HZXREb3VibGUoCi0gICAgICAgICAgICAgIG1lc3NhZ2VfaW50MzJfZG91Ymxl
LCBmZF9tYXBfaW50MzJfZG91YmxlX3ZhbHVlKTsKLSAgICAgIEVYUEVDVF9FUSh2YWx1ZV9pbnQz
Ml9kb3VibGUsIEZ1bmMoa2V5X2ludDMyX2RvdWJsZSwgMikpOwotCi0gICAgICBjb25zdCBNZXNz
YWdlJiBtZXNzYWdlX3N0cmluZ19zdHJpbmcgPQotICAgICAgICAgIG1mX3N0cmluZ19zdHJpbmcu
R2V0KGksIGVudHJ5X3N0cmluZ19zdHJpbmcuZ2V0KCkpOwotICAgICAgc3RyaW5nIGtleV9zdHJp
bmdfc3RyaW5nID0KLSAgICAgICAgICBtZXNzYWdlX3N0cmluZ19zdHJpbmcuR2V0UmVmbGVjdGlv
bigpLT5HZXRTdHJpbmcoCi0gICAgICAgICAgICAgIG1lc3NhZ2Vfc3RyaW5nX3N0cmluZywgZmRf
bWFwX3N0cmluZ19zdHJpbmdfa2V5KTsKLSAgICAgIHN0cmluZyB2YWx1ZV9zdHJpbmdfc3RyaW5n
ID0KLSAgICAgICAgICBtZXNzYWdlX3N0cmluZ19zdHJpbmcuR2V0UmVmbGVjdGlvbigpLT5HZXRT
dHJpbmcoCi0gICAgICAgICAgICAgIG1lc3NhZ2Vfc3RyaW5nX3N0cmluZywgZmRfbWFwX3N0cmlu
Z19zdHJpbmdfdmFsdWUpOwotICAgICAgRVhQRUNUX0VRKHZhbHVlX3N0cmluZ19zdHJpbmcsIFN0
ckZ1bmMoSW50KGtleV9zdHJpbmdfc3RyaW5nKSwgNSkpOwotCi0gICAgICBjb25zdCBNZXNzYWdl
JiBtZXNzYWdlX2ludDMyX21lc3NhZ2UgPQotICAgICAgICAgIG1mX2ludDMyX2ZvcmVpZ25fbWVz
c2FnZS5HZXQoaSwgZW50cnlfaW50MzJfZm9yZWlnbl9tZXNzYWdlLmdldCgpKTsKLSAgICAgIGlu
dDMyIGtleV9pbnQzMl9tZXNzYWdlID0gbWVzc2FnZV9pbnQzMl9tZXNzYWdlLkdldFJlZmxlY3Rp
b24oKS0+R2V0SW50MzIoCi0gICAgICAgICAgbWVzc2FnZV9pbnQzMl9tZXNzYWdlLCBmZF9tYXBf
aW50MzJfZm9yZWlnbl9tZXNzYWdlX2tleSk7Ci0gICAgICBjb25zdCBGb3JlaWduTWVzc2FnZSYg
dmFsdWVfaW50MzJfbWVzc2FnZSA9Ci0gICAgICAgICAgZG93bl9jYXN0PGNvbnN0IEZvcmVpZ25N
ZXNzYWdlJj4oCi0gICAgICAgICAgICAgIG1lc3NhZ2VfaW50MzJfbWVzc2FnZS5HZXRSZWZsZWN0
aW9uKCkKLSAgICAgICAgICAgICAgICAgIC0+R2V0TWVzc2FnZShtZXNzYWdlX2ludDMyX21lc3Nh
Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfbWFwX2ludDMyX2ZvcmVpZ25f
bWVzc2FnZV92YWx1ZSkpOwotICAgICAgRVhQRUNUX0VRKHZhbHVlX2ludDMyX21lc3NhZ2UuYygp
LCBGdW5jKGtleV9pbnQzMl9tZXNzYWdlLCA2KSk7Ci0gICAgfQotCi0gICAgewotICAgICAgLy8g
Q2hlY2sgZ2V0cyB0aHJvdWdoIG11dGFibGUgb2JqZWN0cy4KLSAgICAgIGNvbnN0IE1lc3NhZ2Um
IG1lc3NhZ2VfaW50MzJfaW50MzIgPQotICAgICAgICAgIG1tZl9pbnQzMl9pbnQzMi5HZXQoaSwg
ZW50cnlfaW50MzJfaW50MzIuZ2V0KCkpOwotICAgICAgaW50MzIga2V5X2ludDMyX2ludDMyID0g
bWVzc2FnZV9pbnQzMl9pbnQzMi5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAg
IG1lc3NhZ2VfaW50MzJfaW50MzIsIGZkX21hcF9pbnQzMl9pbjMyX2tleSk7Ci0gICAgICBpbnQz
MiB2YWx1ZV9pbnQzMl9pbnQzMiA9IG1lc3NhZ2VfaW50MzJfaW50MzIuR2V0UmVmbGVjdGlvbigp
LT5HZXRJbnQzMigKLSAgICAgICAgICBtZXNzYWdlX2ludDMyX2ludDMyLCBmZF9tYXBfaW50MzJf
aW4zMl92YWx1ZSk7Ci0gICAgICBFWFBFQ1RfRVEodmFsdWVfaW50MzJfaW50MzIsIEZ1bmMoa2V5
X2ludDMyX2ludDMyLCAxKSk7Ci0KLSAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2VfaW50MzJf
ZG91YmxlID0KLSAgICAgICAgICBtbWZfaW50MzJfZG91YmxlLkdldChpLCBlbnRyeV9pbnQzMl9k
b3VibGUuZ2V0KCkpOwotICAgICAgaW50MzIga2V5X2ludDMyX2RvdWJsZSA9IG1lc3NhZ2VfaW50
MzJfZG91YmxlLkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoCi0gICAgICAgICAgbWVzc2FnZV9p
bnQzMl9kb3VibGUsIGZkX21hcF9pbnQzMl9kb3VibGVfa2V5KTsKLSAgICAgIGRvdWJsZSB2YWx1
ZV9pbnQzMl9kb3VibGUgPQotICAgICAgICAgIG1lc3NhZ2VfaW50MzJfZG91YmxlLkdldFJlZmxl
Y3Rpb24oKS0+R2V0RG91YmxlKAotICAgICAgICAgICAgICBtZXNzYWdlX2ludDMyX2RvdWJsZSwg
ZmRfbWFwX2ludDMyX2RvdWJsZV92YWx1ZSk7Ci0gICAgICBFWFBFQ1RfRVEodmFsdWVfaW50MzJf
ZG91YmxlLCBGdW5jKGtleV9pbnQzMl9kb3VibGUsIDIpKTsKLQotICAgICAgY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZV9zdHJpbmdfc3RyaW5nID0KLSAgICAgICAgICBtbWZfc3RyaW5nX3N0cmluZy5H
ZXQoaSwgZW50cnlfc3RyaW5nX3N0cmluZy5nZXQoKSk7Ci0gICAgICBzdHJpbmcga2V5X3N0cmlu
Z19zdHJpbmcgPQotICAgICAgICAgIG1lc3NhZ2Vfc3RyaW5nX3N0cmluZy5HZXRSZWZsZWN0aW9u
KCktPkdldFN0cmluZygKLSAgICAgICAgICAgICAgbWVzc2FnZV9zdHJpbmdfc3RyaW5nLCBmZF9t
YXBfc3RyaW5nX3N0cmluZ19rZXkpOwotICAgICAgc3RyaW5nIHZhbHVlX3N0cmluZ19zdHJpbmcg
PQotICAgICAgICAgIG1lc3NhZ2Vfc3RyaW5nX3N0cmluZy5HZXRSZWZsZWN0aW9uKCktPkdldFN0
cmluZygKLSAgICAgICAgICAgICAgbWVzc2FnZV9zdHJpbmdfc3RyaW5nLCBmZF9tYXBfc3RyaW5n
X3N0cmluZ192YWx1ZSk7Ci0gICAgICBFWFBFQ1RfRVEodmFsdWVfc3RyaW5nX3N0cmluZywgU3Ry
RnVuYyhJbnQoa2V5X3N0cmluZ19zdHJpbmcpLCA1KSk7Ci0KLSAgICAgIGNvbnN0IE1lc3NhZ2Um
IG1lc3NhZ2VfaW50MzJfbWVzc2FnZSA9Ci0gICAgICAgICAgbW1mX2ludDMyX2ZvcmVpZ25fbWVz
c2FnZS5HZXQoaSwgZW50cnlfaW50MzJfZm9yZWlnbl9tZXNzYWdlLmdldCgpKTsKLSAgICAgIGlu
dDMyIGtleV9pbnQzMl9tZXNzYWdlID0gbWVzc2FnZV9pbnQzMl9tZXNzYWdlLkdldFJlZmxlY3Rp
b24oKS0+R2V0SW50MzIoCi0gICAgICAgICAgbWVzc2FnZV9pbnQzMl9tZXNzYWdlLCBmZF9tYXBf
aW50MzJfZm9yZWlnbl9tZXNzYWdlX2tleSk7Ci0gICAgICBjb25zdCBGb3JlaWduTWVzc2FnZSYg
dmFsdWVfaW50MzJfbWVzc2FnZSA9Ci0gICAgICAgICAgZG93bl9jYXN0PGNvbnN0IEZvcmVpZ25N
ZXNzYWdlJj4oCi0gICAgICAgICAgICAgIG1lc3NhZ2VfaW50MzJfbWVzc2FnZS5HZXRSZWZsZWN0
aW9uKCkKLSAgICAgICAgICAgICAgICAgIC0+R2V0TWVzc2FnZShtZXNzYWdlX2ludDMyX21lc3Nh
Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfbWFwX2ludDMyX2ZvcmVpZ25f
bWVzc2FnZV92YWx1ZSkpOwotICAgICAgRVhQRUNUX0VRKHZhbHVlX2ludDMyX21lc3NhZ2UuYygp
LCBGdW5jKGtleV9pbnQzMl9tZXNzYWdlLCA2KSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gTWFrZSBz
dXJlIHdlIGNhbiBkbyBzZXRzIHRocm91Z2ggdGhlIFJlcGVhdGVkRmllbGRSZWYgb2JqZWN0cy4K
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgY29uc3QgTWVzc2FnZSYgbWVz
c2FnZV9pbnQzMl9pbnQzMiA9Ci0gICAgICAgIG1tZl9pbnQzMl9pbnQzMi5HZXQoaSwgZW50cnlf
aW50MzJfaW50MzIuZ2V0KCkpOwotICAgIGludCBrZXkgPSBtZXNzYWdlX2ludDMyX2ludDMyLkdl
dFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoCi0gICAgICAgIG1lc3NhZ2VfaW50MzJfaW50MzIsIGZk
X21hcF9pbnQzMl9pbjMyX2tleSk7Ci0KLSAgICBlbnRyeV9pbnQzMl9pbnQzMi0+R2V0UmVmbGVj
dGlvbigpLT5TZXRJbnQzMigKLSAgICAgICAgZW50cnlfaW50MzJfaW50MzIuZ2V0KCksIGZkX21h
cF9pbnQzMl9pbnQzMi0+bWVzc2FnZV90eXBlKCktPmZpZWxkKDApLAotICAgICAgICBrZXkpOwot
ICAgIGVudHJ5X2ludDMyX2ludDMyLT5HZXRSZWZsZWN0aW9uKCktPlNldEludDMyKAotICAgICAg
ICBlbnRyeV9pbnQzMl9pbnQzMi5nZXQoKSwgZmRfbWFwX2ludDMyX2ludDMyLT5tZXNzYWdlX3R5
cGUoKS0+ZmllbGQoMSksCi0gICAgICAgIEZ1bmMoa2V5LCAtMSkpOwotICAgIGVudHJ5X2ludDMy
X2RvdWJsZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMigKLSAgICAgICAgZW50cnlfaW50MzJf
ZG91YmxlLmdldCgpLCBmZF9tYXBfaW50MzJfZG91YmxlLT5tZXNzYWdlX3R5cGUoKS0+ZmllbGQo
MCksCi0gICAgICAgIGtleSk7Ci0gICAgZW50cnlfaW50MzJfZG91YmxlLT5HZXRSZWZsZWN0aW9u
KCktPlNldERvdWJsZSgKLSAgICAgICAgZW50cnlfaW50MzJfZG91YmxlLmdldCgpLCBmZF9tYXBf
aW50MzJfZG91YmxlLT5tZXNzYWdlX3R5cGUoKS0+ZmllbGQoMSksCi0gICAgICAgIEZ1bmMoa2V5
LCAtMikpOwotICAgIGVudHJ5X3N0cmluZ19zdHJpbmctPkdldFJlZmxlY3Rpb24oKS0+U2V0U3Ry
aW5nKAotICAgICAgICBlbnRyeV9zdHJpbmdfc3RyaW5nLmdldCgpLAotICAgICAgICBmZF9tYXBf
c3RyaW5nX3N0cmluZy0+bWVzc2FnZV90eXBlKCktPmZpZWxkKDApLCBTdHJGdW5jKGtleSwgMSkp
OwotICAgIGVudHJ5X3N0cmluZ19zdHJpbmctPkdldFJlZmxlY3Rpb24oKS0+U2V0U3RyaW5nKAot
ICAgICAgICBlbnRyeV9zdHJpbmdfc3RyaW5nLmdldCgpLAotICAgICAgICBmZF9tYXBfc3RyaW5n
X3N0cmluZy0+bWVzc2FnZV90eXBlKCktPmZpZWxkKDEpLCBTdHJGdW5jKGtleSwgLTUpKTsKLSAg
ICBlbnRyeV9pbnQzMl9mb3JlaWduX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+U2V0SW50MzIo
Ci0gICAgICAgIGVudHJ5X2ludDMyX2ZvcmVpZ25fbWVzc2FnZS5nZXQoKSwKLSAgICAgICAgZmRf
bWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS0+bWVzc2FnZV90eXBlKCktPmZpZWxkKDApLCBrZXkp
OwotICAgIE1lc3NhZ2UqIHZhbHVlX21lc3NhZ2UgPQotICAgICAgICBlbnRyeV9pbnQzMl9mb3Jl
aWduX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+TXV0YWJsZU1lc3NhZ2UoCi0gICAgICAgICAg
ICBlbnRyeV9pbnQzMl9mb3JlaWduX21lc3NhZ2UuZ2V0KCksCi0gICAgICAgICAgICBmZF9tYXBf
aW50MzJfZm9yZWlnbl9tZXNzYWdlLT5tZXNzYWdlX3R5cGUoKS0+ZmllbGQoMSkpOwotICAgIHZh
bHVlX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+U2V0SW50MzIoCi0gICAgICAgIHZhbHVlX21l
c3NhZ2UsIHZhbHVlX21lc3NhZ2UtPkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKCJj
IiksCi0gICAgICAgIEZ1bmMoa2V5LCAtNikpOwotCi0gICAgbW1mX2ludDMyX2ludDMyLlNldChp
LCAqZW50cnlfaW50MzJfaW50MzIpOwotICAgIG1tZl9pbnQzMl9kb3VibGUuU2V0KGksICplbnRy
eV9pbnQzMl9kb3VibGUpOwotICAgIG1tZl9zdHJpbmdfc3RyaW5nLlNldChpLCAqZW50cnlfc3Ry
aW5nX3N0cmluZyk7Ci0gICAgbW1mX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS5TZXQoaSwgKmVudHJ5
X2ludDMyX2ZvcmVpZ25fbWVzc2FnZSk7Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsgaSA8IDEw
OyBpKyspIHsKLSAgICBFWFBFQ1RfRVEoRnVuYyhpLCAtMSksIG1lc3NhZ2UubWFwX2ludDMyX2lu
dDMyKCkuYXQoaSkpOwotICAgIEVYUEVDVF9FUShGdW5jKGksIC0yKSwgbWVzc2FnZS5tYXBfaW50
MzJfZG91YmxlKCkuYXQoaSkpOwotICAgIEVYUEVDVF9FUShTdHJGdW5jKGksIC01KSwgbWVzc2Fn
ZS5tYXBfc3RyaW5nX3N0cmluZygpLmF0KFN0ckZ1bmMoaSwgMSkpKTsKLSAgICBFWFBFQ1RfRVEo
RnVuYyhpLCAtNiksIG1lc3NhZ2UubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSgpLmF0KGkpLmMo
KSk7Ci0gIH0KLQotICAvLyBUZXN0IGl0ZXJhdG9ycy4KLSAgewotICAgIGludCBpbmRleCA9IDA7
Ci0gICAgaGFzaF9tYXA8aW50MzIsIGludDMyPiByZXN1bHQ7Ci0gICAgZm9yIChSZXBlYXRlZEZp
ZWxkUmVmPE1lc3NhZ2U+OjppdGVyYXRvciBpdCA9IG1mX2ludDMyX2ludDMyLmJlZ2luKCk7Ci0g
ICAgICAgICBpdCAhPSBtZl9pbnQzMl9pbnQzMi5lbmQoKTsgKytpdCkgewotICAgICAgY29uc3Qg
TWVzc2FnZSYgbWVzc2FnZSA9ICppdDsKLSAgICAgIGludDMyIGtleSA9Ci0gICAgICAgICAgbWVz
c2FnZS5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKG1lc3NhZ2UsIGZkX21hcF9pbnQzMl9pbjMy
X2tleSk7Ci0gICAgICBpbnQzMiB2YWx1ZSA9Ci0gICAgICAgICAgbWVzc2FnZS5HZXRSZWZsZWN0
aW9uKCktPkdldEludDMyKG1lc3NhZ2UsIGZkX21hcF9pbnQzMl9pbjMyX3ZhbHVlKTsKLSAgICAg
IHJlc3VsdFtrZXldID0gdmFsdWU7Ci0gICAgICArK2luZGV4OwotICAgIH0KLSAgICBFWFBFQ1Rf
RVEoMTAsIGluZGV4KTsKLSAgICBmb3IgKGhhc2hfbWFwPGludDMyLCBpbnQzMj46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gcmVzdWx0LmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSByZXN1bHQuZW5kKCk7
ICsraXQpIHsKLSAgICAgIEVYUEVDVF9FUShtZXNzYWdlLm1hcF9pbnQzMl9pbnQzMigpLmF0KGl0
LT5maXJzdCksIGl0LT5zZWNvbmQpOwotICAgIH0KLSAgfQotCi0gIHsKLSAgICBpbnQgaW5kZXgg
PSAwOwotICAgIGhhc2hfbWFwPGludDMyLCBkb3VibGU+IHJlc3VsdDsKLSAgICBmb3IgKFJlcGVh
dGVkRmllbGRSZWY8TWVzc2FnZT46Oml0ZXJhdG9yIGl0ID0gbWZfaW50MzJfZG91YmxlLmJlZ2lu
KCk7Ci0gICAgICAgICBpdCAhPSBtZl9pbnQzMl9kb3VibGUuZW5kKCk7ICsraXQpIHsKLSAgICAg
IGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UgPSAqaXQ7Ci0gICAgICBpbnQzMiBrZXkgPQotICAgICAg
ICAgIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMihtZXNzYWdlLCBmZF9tYXBfaW50
MzJfZG91YmxlX2tleSk7Ci0gICAgICBkb3VibGUgdmFsdWUgPSBtZXNzYWdlLkdldFJlZmxlY3Rp
b24oKS0+R2V0RG91YmxlKAotICAgICAgICAgIG1lc3NhZ2UsIGZkX21hcF9pbnQzMl9kb3VibGVf
dmFsdWUpOwotICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTsKLSAgICAgICsraW5kZXg7Ci0gICAg
fQotICAgIEVYUEVDVF9FUSgxMCwgaW5kZXgpOwotICAgIGZvciAoaGFzaF9tYXA8aW50MzIsIGRv
dWJsZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzdWx0LmJlZ2luKCk7Ci0gICAgICAgICBpdCAh
PSByZXN1bHQuZW5kKCk7ICsraXQpIHsKLSAgICAgIEVYUEVDVF9FUShtZXNzYWdlLm1hcF9pbnQz
Ml9kb3VibGUoKS5hdChpdC0+Zmlyc3QpLCBpdC0+c2Vjb25kKTsKLSAgICB9Ci0gIH0KLQotICB7
Ci0gICAgaW50IGluZGV4ID0gMDsKLSAgICBoYXNoX21hcDxzdHJpbmcsIHN0cmluZz4gcmVzdWx0
OwotICAgIGZvciAoUmVwZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPjo6aXRlcmF0b3IgaXQgPSBtZl9z
dHJpbmdfc3RyaW5nLmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSBtZl9zdHJpbmdfc3RyaW5nLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlID0gKml0OwotICAgICAg
c3RyaW5nIGtleSA9Ci0gICAgICAgICAgbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCktPkdldFN0cmlu
ZyhtZXNzYWdlLCBmZF9tYXBfc3RyaW5nX3N0cmluZ19rZXkpOwotICAgICAgc3RyaW5nIHZhbHVl
ID0gbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCktPkdldFN0cmluZygKLSAgICAgICAgICBtZXNzYWdl
LCBmZF9tYXBfc3RyaW5nX3N0cmluZ192YWx1ZSk7Ci0gICAgICByZXN1bHRba2V5XSA9IHZhbHVl
OwotICAgICAgKytpbmRleDsKLSAgICB9Ci0gICAgRVhQRUNUX0VRKDEwLCBpbmRleCk7Ci0gICAg
Zm9yIChoYXNoX21hcDxzdHJpbmcsIHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzdWx0
LmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSByZXN1bHQuZW5kKCk7ICsraXQpIHsKLSAgICAgIEVY
UEVDVF9FUShtZXNzYWdlLm1hcF9zdHJpbmdfc3RyaW5nKCkuYXQoaXQtPmZpcnN0KSwgaXQtPnNl
Y29uZCk7Ci0gICAgfQotICB9Ci0KLSAgewotICAgIGludCBpbmRleCA9IDA7Ci0gICAgc3RkOjpt
YXA8aW50MzIsIEZvcmVpZ25NZXNzYWdlPiByZXN1bHQ7Ci0gICAgZm9yIChSZXBlYXRlZEZpZWxk
UmVmPE1lc3NhZ2U+OjppdGVyYXRvciBpdCA9Ci0gICAgICAgICAgICAgbWZfaW50MzJfZm9yZWln
bl9tZXNzYWdlLmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSBtZl9pbnQzMl9mb3JlaWduX21lc3Nh
Z2UuZW5kKCk7ICsraXQpIHsKLSAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UgPSAqaXQ7Ci0g
ICAgICBpbnQzMiBrZXkgPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoCi0gICAg
ICAgICAgbWVzc2FnZSwgZmRfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZV9rZXkpOwotICAgICAg
Y29uc3QgRm9yZWlnbk1lc3NhZ2UmIHN1Yl9tZXNzYWdlID0gZG93bl9jYXN0PGNvbnN0IEZvcmVp
Z25NZXNzYWdlJj4oCi0gICAgICAgICAgbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCkKLSAgICAgICAg
ICAgICAgLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIGZkX21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2Vf
dmFsdWUpKTsKLSAgICAgIHJlc3VsdFtrZXldLk1lcmdlRnJvbShzdWJfbWVzc2FnZSk7Ci0gICAg
ICArK2luZGV4OwotICAgIH0KLSAgICBFWFBFQ1RfRVEoMTAsIGluZGV4KTsKLSAgICBmb3IgKHN0
ZDo6bWFwPGludDMyLCBGb3JlaWduTWVzc2FnZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzdWx0
LmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSByZXN1bHQuZW5kKCk7ICsraXQpIHsKLSAgICAgIEVY
UEVDVF9FUShtZXNzYWdlLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UoKS5hdChpdC0+Zmlyc3Qp
LmMoKSwKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmMoKSk7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gVGVzdCBNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjo6QWRkKCkKLSAgZW50cnlfaW50MzJfaW50
MzItPkdldFJlZmxlY3Rpb24oKS0+U2V0SW50MzIoCi0gICAgICBlbnRyeV9pbnQzMl9pbnQzMi5n
ZXQoKSwgZmRfbWFwX2ludDMyX2ludDMyLT5tZXNzYWdlX3R5cGUoKS0+ZmllbGQoMCksCi0gICAg
ICA0MzIxKTsKLSAgZW50cnlfaW50MzJfaW50MzItPkdldFJlZmxlY3Rpb24oKS0+U2V0SW50MzIo
Ci0gICAgICBlbnRyeV9pbnQzMl9pbnQzMi5nZXQoKSwgZmRfbWFwX2ludDMyX2ludDMyLT5tZXNz
YWdlX3R5cGUoKS0+ZmllbGQoMSksCi0gICAgICAxMjM0KTsKLSAgbW1mX2ludDMyX2ludDMyLkFk
ZCgqZW50cnlfaW50MzJfaW50MzIpOwotICBFWFBFQ1RfRVEoMTIzNCwgbWVzc2FnZS5tYXBfaW50
MzJfaW50MzIoKS5hdCg0MzIxKSk7Ci0KLSAgZW50cnlfaW50MzJfZG91YmxlLT5HZXRSZWZsZWN0
aW9uKCktPlNldEludDMyKAotICAgICAgZW50cnlfaW50MzJfZG91YmxlLmdldCgpLCBmZF9tYXBf
aW50MzJfZG91YmxlLT5tZXNzYWdlX3R5cGUoKS0+ZmllbGQoMCksCi0gICAgICA0MzIxKTsKLSAg
ZW50cnlfaW50MzJfZG91YmxlLT5HZXRSZWZsZWN0aW9uKCktPlNldERvdWJsZSgKLSAgICAgIGVu
dHJ5X2ludDMyX2RvdWJsZS5nZXQoKSwgZmRfbWFwX2ludDMyX2RvdWJsZS0+bWVzc2FnZV90eXBl
KCktPmZpZWxkKDEpLAotICAgICAgMTIzNC4wKTsKLSAgbW1mX2ludDMyX2RvdWJsZS5BZGQoKmVu
dHJ5X2ludDMyX2RvdWJsZSk7Ci0gIEVYUEVDVF9FUSgxMjM0LjAsIG1lc3NhZ2UubWFwX2ludDMy
X2RvdWJsZSgpLmF0KDQzMjEpKTsKLQotICBlbnRyeV9zdHJpbmdfc3RyaW5nLT5HZXRSZWZsZWN0
aW9uKCktPlNldFN0cmluZygKLSAgICAgIGVudHJ5X3N0cmluZ19zdHJpbmcuZ2V0KCksCi0gICAg
ICBmZF9tYXBfc3RyaW5nX3N0cmluZy0+bWVzc2FnZV90eXBlKCktPmZpZWxkKDApLCAiNDMyMSIp
OwotICBlbnRyeV9zdHJpbmdfc3RyaW5nLT5HZXRSZWZsZWN0aW9uKCktPlNldFN0cmluZygKLSAg
ICAgIGVudHJ5X3N0cmluZ19zdHJpbmcuZ2V0KCksIGZkX21hcF9zdHJpbmdfc3RyaW5nLT5tZXNz
YWdlX3R5cGUoKS0+ZmllbGQoMSksCi0gICAgICAiMTIzNCIpOwotICBtbWZfc3RyaW5nX3N0cmlu
Zy5BZGQoKmVudHJ5X3N0cmluZ19zdHJpbmcpOwotICBFWFBFQ1RfRVEoIjEyMzQiLCBtZXNzYWdl
Lm1hcF9zdHJpbmdfc3RyaW5nKCkuYXQoIjQzMjEiKSk7Ci0KLSAgZW50cnlfaW50MzJfZm9yZWln
bl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlNldEludDMyKAotICAgICAgZW50cnlfaW50MzJf
Zm9yZWlnbl9tZXNzYWdlLmdldCgpLAotICAgICAgZmRfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2Fn
ZS0+bWVzc2FnZV90eXBlKCktPmZpZWxkKDApLCA0MzIxKTsKLSAgTWVzc2FnZSogdmFsdWVfbWVz
c2FnZSA9Ci0gICAgICBlbnRyeV9pbnQzMl9mb3JlaWduX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24o
KS0+TXV0YWJsZU1lc3NhZ2UoCi0gICAgICAgICAgZW50cnlfaW50MzJfZm9yZWlnbl9tZXNzYWdl
LmdldCgpLAotICAgICAgICAgIGZkX21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UtPm1lc3NhZ2Vf
dHlwZSgpLT5maWVsZCgxKSk7Ci0gIEZvcmVpZ25NZXNzYWdlIGZvcmVpZ25fbWVzc2FnZTsKLSAg
Zm9yZWlnbl9tZXNzYWdlLnNldF9jKDEyMzQpOwotICB2YWx1ZV9tZXNzYWdlLT5Db3B5RnJvbShm
b3JlaWduX21lc3NhZ2UpOwotCi0gIG1tZl9pbnQzMl9mb3JlaWduX21lc3NhZ2UuQWRkKCplbnRy
eV9pbnQzMl9mb3JlaWduX21lc3NhZ2UpOwotICBFWFBFQ1RfRVEoMTIzNCwgbWVzc2FnZS5tYXBf
aW50MzJfZm9yZWlnbl9tZXNzYWdlKCkuYXQoNDMyMSkuYygpKTsKLQotICAvLyBUZXN0IFJlZmxl
Y3Rpb246OkFkZEFsbG9jYXRlZE1lc3NhZ2UKLSAgTWVzc2FnZSogZnJlZV9lbnRyeV9zdHJpbmdf
c3RyaW5nID0gTWVzc2FnZUZhY3Rvcnk6OmdlbmVyYXRlZF9mYWN0b3J5KCkKLSAgICAgIC0+R2V0
UHJvdG90eXBlKGZkX21hcF9zdHJpbmdfc3RyaW5nLT5tZXNzYWdlX3R5cGUoKSkKLSAgICAgIC0+
TmV3KCk7Ci0gIGVudHJ5X3N0cmluZ19zdHJpbmctPkdldFJlZmxlY3Rpb24oKS0+U2V0U3RyaW5n
KAotICAgICAgZnJlZV9lbnRyeV9zdHJpbmdfc3RyaW5nLAotICAgICAgZmRfbWFwX3N0cmluZ19z
dHJpbmctPm1lc3NhZ2VfdHlwZSgpLT5maWVsZCgwKSwgIjQzMjEiKTsKLSAgZW50cnlfc3RyaW5n
X3N0cmluZy0+R2V0UmVmbGVjdGlvbigpLT5TZXRTdHJpbmcoCi0gICAgICBmcmVlX2VudHJ5X3N0
cmluZ19zdHJpbmcsIGZkX21hcF9zdHJpbmdfc3RyaW5nLT5tZXNzYWdlX3R5cGUoKS0+ZmllbGQo
MSksCi0gICAgICAiMTIzNCIpOwotICByZWZsLT5BZGRBbGxvY2F0ZWRNZXNzYWdlKCZtZXNzYWdl
LCBmZF9tYXBfc3RyaW5nX3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVl
X2VudHJ5X3N0cmluZ19zdHJpbmcpOwotCi0gIC8vIFRlc3QgTXV0YWJsZVJlcGVhdGVkRmllbGRS
ZWY6OlJlbW92ZUxhc3QoKQotICBtbWZfaW50MzJfaW50MzIuUmVtb3ZlTGFzdCgpOwotICBtbWZf
aW50MzJfZG91YmxlLlJlbW92ZUxhc3QoKTsKLSAgbW1mX3N0cmluZ19zdHJpbmcuUmVtb3ZlTGFz
dCgpOwotICBtbWZfaW50MzJfZm9yZWlnbl9tZXNzYWdlLlJlbW92ZUxhc3QoKTsKLSAgRVhQRUNU
X0VRKDEwLCBtZXNzYWdlLm1hcF9pbnQzMl9pbnQzMigpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgx
MCwgbWVzc2FnZS5tYXBfaW50MzJfZG91YmxlKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDExLCBt
ZXNzYWdlLm1hcF9zdHJpbmdfc3RyaW5nKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEwLCBtZXNz
YWdlLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UoKS5zaXplKCkpOwotCi0gIC8vIFRlc3QgTXV0
YWJsZVJlcGVhdGVkRmllbGRSZWY6OlN3YXBFbGVtZW50cygpCi0gIHsKLSAgICBjb25zdCBNZXNz
YWdlJiBtZXNzYWdlMGEgPSBtbWZfaW50MzJfaW50MzIuR2V0KDAsIGVudHJ5X2ludDMyX2ludDMy
LmdldCgpKTsKLSAgICBpbnQzMiBpbnQzMl92YWx1ZTBhID0KLSAgICAgICAgbWVzc2FnZTBhLkdl
dFJlZmxlY3Rpb24oKS0+R2V0SW50MzIobWVzc2FnZTBhLCBmZF9tYXBfaW50MzJfaW4zMl92YWx1
ZSk7Ci0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTlhID0gbW1mX2ludDMyX2ludDMyLkdldCg5
LCBlbnRyeV9pbnQzMl9pbnQzMi5nZXQoKSk7Ci0gICAgaW50MzIgaW50MzJfdmFsdWU5YSA9Ci0g
ICAgICAgIG1lc3NhZ2U5YS5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKG1lc3NhZ2U5YSwgZmRf
bWFwX2ludDMyX2luMzJfdmFsdWUpOwotCi0gICAgbW1mX2ludDMyX2ludDMyLlN3YXBFbGVtZW50
cygwLCA5KTsKLQotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UwYiA9IG1tZl9pbnQzMl9pbnQz
Mi5HZXQoMCwgZW50cnlfaW50MzJfaW50MzIuZ2V0KCkpOwotICAgIGludDMyIGludDMyX3ZhbHVl
MGIgPQotICAgICAgICBtZXNzYWdlMGIuR2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMihtZXNzYWdl
MGIsIGZkX21hcF9pbnQzMl9pbjMyX3ZhbHVlKTsKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdl
OWIgPSBtbWZfaW50MzJfaW50MzIuR2V0KDksIGVudHJ5X2ludDMyX2ludDMyLmdldCgpKTsKLSAg
ICBpbnQzMiBpbnQzMl92YWx1ZTliID0KLSAgICAgICAgbWVzc2FnZTliLkdldFJlZmxlY3Rpb24o
KS0+R2V0SW50MzIobWVzc2FnZTliLCBmZF9tYXBfaW50MzJfaW4zMl92YWx1ZSk7Ci0KLSAgICBF
WFBFQ1RfRVEoaW50MzJfdmFsdWU5YSwgaW50MzJfdmFsdWUwYik7Ci0gICAgRVhQRUNUX0VRKGlu
dDMyX3ZhbHVlMGEsIGludDMyX3ZhbHVlOWIpOwotICB9Ci0KLSAgewotICAgIGNvbnN0IE1lc3Nh
Z2UmIG1lc3NhZ2UwYSA9Ci0gICAgICAgIG1tZl9pbnQzMl9kb3VibGUuR2V0KDAsIGVudHJ5X2lu
dDMyX2RvdWJsZS5nZXQoKSk7Ci0gICAgZG91YmxlIGRvdWJsZV92YWx1ZTBhID0gbWVzc2FnZTBh
LkdldFJlZmxlY3Rpb24oKS0+R2V0RG91YmxlKAotICAgICAgICBtZXNzYWdlMGEsIGZkX21hcF9p
bnQzMl9kb3VibGVfdmFsdWUpOwotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2U5YSA9Ci0gICAg
ICAgIG1tZl9pbnQzMl9kb3VibGUuR2V0KDksIGVudHJ5X2ludDMyX2RvdWJsZS5nZXQoKSk7Ci0g
ICAgZG91YmxlIGRvdWJsZV92YWx1ZTlhID0gbWVzc2FnZTlhLkdldFJlZmxlY3Rpb24oKS0+R2V0
RG91YmxlKAotICAgICAgICBtZXNzYWdlOWEsIGZkX21hcF9pbnQzMl9kb3VibGVfdmFsdWUpOwot
Ci0gICAgbW1mX2ludDMyX2RvdWJsZS5Td2FwRWxlbWVudHMoMCwgOSk7Ci0KLSAgICBjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlMGIgPQotICAgICAgICBtbWZfaW50MzJfZG91YmxlLkdldCgwLCBlbnRy
eV9pbnQzMl9kb3VibGUuZ2V0KCkpOwotICAgIGRvdWJsZSBkb3VibGVfdmFsdWUwYiA9IG1lc3Nh
Z2UwYi5HZXRSZWZsZWN0aW9uKCktPkdldERvdWJsZSgKLSAgICAgICAgbWVzc2FnZTBiLCBmZF9t
YXBfaW50MzJfZG91YmxlX3ZhbHVlKTsKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlOWIgPQot
ICAgICAgICBtbWZfaW50MzJfZG91YmxlLkdldCg5LCBlbnRyeV9pbnQzMl9kb3VibGUuZ2V0KCkp
OwotICAgIGRvdWJsZSBkb3VibGVfdmFsdWU5YiA9IG1lc3NhZ2U5Yi5HZXRSZWZsZWN0aW9uKCkt
PkdldERvdWJsZSgKLSAgICAgICAgbWVzc2FnZTliLCBmZF9tYXBfaW50MzJfZG91YmxlX3ZhbHVl
KTsKLQotICAgIEVYUEVDVF9FUShkb3VibGVfdmFsdWU5YSwgZG91YmxlX3ZhbHVlMGIpOwotICAg
IEVYUEVDVF9FUShkb3VibGVfdmFsdWUwYSwgZG91YmxlX3ZhbHVlOWIpOwotICB9Ci0KLSAgewot
ICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UwYSA9Ci0gICAgICAgIG1tZl9zdHJpbmdfc3RyaW5n
LkdldCgwLCBlbnRyeV9zdHJpbmdfc3RyaW5nLmdldCgpKTsKLSAgICBzdHJpbmcgc3RyaW5nX3Zh
bHVlMGEgPSBtZXNzYWdlMGEuR2V0UmVmbGVjdGlvbigpLT5HZXRTdHJpbmcoCi0gICAgICAgIG1l
c3NhZ2UwYSwgZmRfbWFwX3N0cmluZ19zdHJpbmdfdmFsdWUpOwotICAgIGNvbnN0IE1lc3NhZ2Um
IG1lc3NhZ2U5YSA9Ci0gICAgICAgIG1tZl9zdHJpbmdfc3RyaW5nLkdldCg5LCBlbnRyeV9zdHJp
bmdfc3RyaW5nLmdldCgpKTsKLSAgICBzdHJpbmcgc3RyaW5nX3ZhbHVlOWEgPSBtZXNzYWdlOWEu
R2V0UmVmbGVjdGlvbigpLT5HZXRTdHJpbmcoCi0gICAgICAgIG1lc3NhZ2U5YSwgZmRfbWFwX3N0
cmluZ19zdHJpbmdfdmFsdWUpOwotCi0gICAgbW1mX3N0cmluZ19zdHJpbmcuU3dhcEVsZW1lbnRz
KDAsIDkpOwotCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTBiID0KLSAgICAgICAgbW1mX3N0
cmluZ19zdHJpbmcuR2V0KDAsIGVudHJ5X3N0cmluZ19zdHJpbmcuZ2V0KCkpOwotICAgIHN0cmlu
ZyBzdHJpbmdfdmFsdWUwYiA9IG1lc3NhZ2UwYi5HZXRSZWZsZWN0aW9uKCktPkdldFN0cmluZygK
LSAgICAgICAgbWVzc2FnZTBiLCBmZF9tYXBfc3RyaW5nX3N0cmluZ192YWx1ZSk7Ci0gICAgY29u
c3QgTWVzc2FnZSYgbWVzc2FnZTliID0KLSAgICAgICAgbW1mX3N0cmluZ19zdHJpbmcuR2V0KDks
IGVudHJ5X3N0cmluZ19zdHJpbmcuZ2V0KCkpOwotICAgIHN0cmluZyBzdHJpbmdfdmFsdWU5YiA9
IG1lc3NhZ2U5Yi5HZXRSZWZsZWN0aW9uKCktPkdldFN0cmluZygKLSAgICAgICAgbWVzc2FnZTli
LCBmZF9tYXBfc3RyaW5nX3N0cmluZ192YWx1ZSk7Ci0KLSAgICBFWFBFQ1RfRVEoc3RyaW5nX3Zh
bHVlOWEsIHN0cmluZ192YWx1ZTBiKTsKLSAgICBFWFBFQ1RfRVEoc3RyaW5nX3ZhbHVlMGEsIHN0
cmluZ192YWx1ZTliKTsKLSAgfQotCi0gIHsKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMGEg
PQotICAgICAgICBtbWZfaW50MzJfZm9yZWlnbl9tZXNzYWdlLkdldCgwLCBlbnRyeV9pbnQzMl9m
b3JlaWduX21lc3NhZ2UuZ2V0KCkpOwotICAgIGNvbnN0IEZvcmVpZ25NZXNzYWdlJiBzdWJfbWVz
c2FnZTBhID0gZG93bl9jYXN0PGNvbnN0IEZvcmVpZ25NZXNzYWdlJj4oCi0gICAgICAgIG1lc3Nh
Z2UwYS5HZXRSZWZsZWN0aW9uKCkKLSAgICAgICAgICAgIC0+R2V0TWVzc2FnZShtZXNzYWdlMGEs
IGZkX21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2VfdmFsdWUpKTsKLSAgICBpbnQzMiBpbnQzMl92
YWx1ZTBhID0gc3ViX21lc3NhZ2UwYS5jKCk7Ci0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTlh
ID0KLSAgICAgICAgbW1mX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS5HZXQoOSwgZW50cnlfaW50MzJf
Zm9yZWlnbl9tZXNzYWdlLmdldCgpKTsKLSAgICBjb25zdCBGb3JlaWduTWVzc2FnZSYgc3ViX21l
c3NhZ2U5YSA9IGRvd25fY2FzdDxjb25zdCBGb3JlaWduTWVzc2FnZSY+KAotICAgICAgICBtZXNz
YWdlOWEuR2V0UmVmbGVjdGlvbigpCi0gICAgICAgICAgICAtPkdldE1lc3NhZ2UobWVzc2FnZTlh
LCBmZF9tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlX3ZhbHVlKSk7Ci0gICAgaW50MzIgaW50MzJf
dmFsdWU5YSA9IHN1Yl9tZXNzYWdlOWEuYygpOwotCi0gICAgbW1mX2ludDMyX2ZvcmVpZ25fbWVz
c2FnZS5Td2FwRWxlbWVudHMoMCwgOSk7Ci0KLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMGIg
PQotICAgICAgICBtbWZfaW50MzJfZm9yZWlnbl9tZXNzYWdlLkdldCgwLCBlbnRyeV9pbnQzMl9m
b3JlaWduX21lc3NhZ2UuZ2V0KCkpOwotICAgIGNvbnN0IEZvcmVpZ25NZXNzYWdlJiBzdWJfbWVz
c2FnZTBiID0gZG93bl9jYXN0PGNvbnN0IEZvcmVpZ25NZXNzYWdlJj4oCi0gICAgICAgIG1lc3Nh
Z2UwYi5HZXRSZWZsZWN0aW9uKCkKLSAgICAgICAgICAgIC0+R2V0TWVzc2FnZShtZXNzYWdlMGIs
IGZkX21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2VfdmFsdWUpKTsKLSAgICBpbnQzMiBpbnQzMl92
YWx1ZTBiID0gc3ViX21lc3NhZ2UwYi5jKCk7Ci0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTli
ID0KLSAgICAgICAgbW1mX2ludDMyX2ZvcmVpZ25fbWVzc2FnZS5HZXQoOSwgZW50cnlfaW50MzJf
Zm9yZWlnbl9tZXNzYWdlLmdldCgpKTsKLSAgICBjb25zdCBGb3JlaWduTWVzc2FnZSYgc3ViX21l
c3NhZ2U5YiA9IGRvd25fY2FzdDxjb25zdCBGb3JlaWduTWVzc2FnZSY+KAotICAgICAgICBtZXNz
YWdlOWIuR2V0UmVmbGVjdGlvbigpCi0gICAgICAgICAgICAtPkdldE1lc3NhZ2UobWVzc2FnZTli
LCBmZF9tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlX3ZhbHVlKSk7Ci0gICAgaW50MzIgaW50MzJf
dmFsdWU5YiA9IHN1Yl9tZXNzYWdlOWIuYygpOwotCi0gICAgRVhQRUNUX0VRKGludDMyX3ZhbHVl
OWEsIGludDMyX3ZhbHVlMGIpOwotICAgIEVYUEVDVF9FUShpbnQzMl92YWx1ZTBhLCBpbnQzMl92
YWx1ZTliKTsKLSAgfQotfQotCi1URVNUX0YoTWFwRmllbGRSZWZsZWN0aW9uVGVzdCwgUmVwZWF0
ZWRGaWVsZFJlZk1lcmdlRnJvbUFuZFN3YXApIHsKLSAgLy8gU2V0LXVwIG1lc3NhZ2UgY29udGVu
dC4KLSAgVGVzdE1hcCBtMCwgbTEsIG0yOwotICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kp
IHsKLSAgICAoKm0wLm11dGFibGVfbWFwX2ludDMyX2ludDMyKCkpW2ldID0gRnVuYyhpLCAxKTsK
LSAgICAoKm0wLm11dGFibGVfbWFwX2ludDMyX2RvdWJsZSgpKVtpXSA9IEZ1bmMoaSwgMik7Ci0g
ICAgKCptMC5tdXRhYmxlX21hcF9zdHJpbmdfc3RyaW5nKCkpW1N0ckZ1bmMoaSwgMSldID0gU3Ry
RnVuYyhpLCA1KTsKLSAgICAoKm0wLm11dGFibGVfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSgp
KVtpXS5zZXRfYyhGdW5jKGksIDYpKTsKLSAgICAoKm0xLm11dGFibGVfbWFwX2ludDMyX2ludDMy
KCkpW2kgKyAxMF0gPSBGdW5jKGksIDExKTsKLSAgICAoKm0xLm11dGFibGVfbWFwX2ludDMyX2Rv
dWJsZSgpKVtpICsgMTBdID0gRnVuYyhpLCAxMik7Ci0gICAgKCptMS5tdXRhYmxlX21hcF9zdHJp
bmdfc3RyaW5nKCkpW1N0ckZ1bmMoaSArIDEwLCAxKV0gPSBTdHJGdW5jKGksIDE1KTsKLSAgICAo
Km0xLm11dGFibGVfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSgpKVtpICsgMTBdLnNldF9jKEZ1
bmMoaSwgMTYpKTsKLSAgICAoKm0yLm11dGFibGVfbWFwX2ludDMyX2ludDMyKCkpW2kgKyAyMF0g
PSBGdW5jKGksIDIxKTsKLSAgICAoKm0yLm11dGFibGVfbWFwX2ludDMyX2RvdWJsZSgpKVtpICsg
MjBdID0gRnVuYyhpLCAyMik7Ci0gICAgKCptMi5tdXRhYmxlX21hcF9zdHJpbmdfc3RyaW5nKCkp
W1N0ckZ1bmMoaSArIDIwLCAxKV0gPSBTdHJGdW5jKGksIDI1KTsKLSAgICAoKm0yLm11dGFibGVf
bWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSgpKVtpICsgMjBdLnNldF9jKEZ1bmMoaSwgMjYpKTsK
LSAgfQotCi0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmwgPSBtMC5HZXRSZWZsZWN0aW9uKCk7Ci0g
IGNvbnN0IERlc2NyaXB0b3IqIGRlc2MgPSBtMC5HZXREZXNjcmlwdG9yKCk7Ci0KLSAgLy8gR2V0
IEZpZWxkRGVzY3JpcHRvcnMgZm9yIGFsbCB0aGUgZmllbGRzIG9mIGludGVyZXN0LgotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZkX21hcF9pbnQzMl9pbnQzMiA9Ci0gICAgICBkZXNjLT5GaW5k
RmllbGRCeU5hbWUoIm1hcF9pbnQzMl9pbnQzMiIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZkX21hcF9pbnQzMl9kb3VibGUgPQotICAgICAgZGVzYy0+RmluZEZpZWxkQnlOYW1lKCJtYXBf
aW50MzJfZG91YmxlIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmRfbWFwX3N0cmluZ19z
dHJpbmcgPQotICAgICAgZGVzYy0+RmluZEZpZWxkQnlOYW1lKCJtYXBfc3RyaW5nX3N0cmluZyIp
OwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2Ug
PQotICAgICAgZGVzYy0+RmluZEZpZWxkQnlOYW1lKCJtYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdl
Iik7Ci0KLSAgICAvLyBHZXQgTXV0YWJsZVJlcGVhdGVkRmllbGRSZWYgb2JqZWN0cyBmb3IgYWxs
IGZpZWxkcyBvZiBpbnRlcmVzdC4KLSAgY29uc3QgTXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8TWVz
c2FnZT4gbW1mX2ludDMyX2ludDMyID0KLSAgICAgIHJlZmwtPkdldE11dGFibGVSZXBlYXRlZEZp
ZWxkUmVmPE1lc3NhZ2U+KAotICAgICAgICAgICZtMCwgZmRfbWFwX2ludDMyX2ludDMyKTsKLSAg
Y29uc3QgTXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4gbW1mX2ludDMyX2RvdWJsZSA9
Ci0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPigKLSAgICAg
ICAgICAmbTAsIGZkX21hcF9pbnQzMl9kb3VibGUpOwotICBjb25zdCBNdXRhYmxlUmVwZWF0ZWRG
aWVsZFJlZjxNZXNzYWdlPiBtbWZfc3RyaW5nX3N0cmluZyA9Ci0gICAgICByZWZsLT5HZXRNdXRh
YmxlUmVwZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPigKLSAgICAgICAgICAmbTAsIGZkX21hcF9zdHJp
bmdfc3RyaW5nKTsKLSAgY29uc3QgTXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4KLSAg
ICAgIG1tZl9pbnQzMl9mb3JlaWduX21lc3NhZ2UgPQotICAgICAgICAgIHJlZmwtPkdldE11dGFi
bGVSZXBlYXRlZEZpZWxkUmVmPE1lc3NhZ2U+KAotICAgICAgICAgICAgICAmbTAsIGZkX21hcF9p
bnQzMl9mb3JlaWduX21lc3NhZ2UpOwotCi0gIC8vIFRlc3QgTXV0YWJsZVJlcGVhdGVkUmVmOjpD
b3B5RnJvbQotICBtbWZfaW50MzJfaW50MzIuQ29weUZyb20oCi0gICAgICByZWZsLT5HZXRSZXBl
YXRlZEZpZWxkUmVmPE1lc3NhZ2U+KAotICAgICAgICAgIG0xLCBmZF9tYXBfaW50MzJfaW50MzIp
KTsKLSAgbW1mX2ludDMyX2RvdWJsZS5Db3B5RnJvbSgKLSAgICAgIHJlZmwtPkdldFJlcGVhdGVk
RmllbGRSZWY8TWVzc2FnZT4oCi0gICAgICAgICAgbTEsIGZkX21hcF9pbnQzMl9kb3VibGUpKTsK
LSAgbW1mX3N0cmluZ19zdHJpbmcuQ29weUZyb20oCi0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZp
ZWxkUmVmPE1lc3NhZ2U+KAotICAgICAgICAgIG0xLCBmZF9tYXBfc3RyaW5nX3N0cmluZykpOwot
ICBtbWZfaW50MzJfZm9yZWlnbl9tZXNzYWdlLkNvcHlGcm9tKAotICAgICAgcmVmbC0+R2V0UmVw
ZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPigKLSAgICAgICAgICBtMSwgZmRfbWFwX2ludDMyX2ZvcmVp
Z25fbWVzc2FnZSkpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgIEVY
UEVDVF9FUShGdW5jKGksIDExKSwgbTAubWFwX2ludDMyX2ludDMyKCkuYXQoaSArIDEwKSk7Ci0g
ICAgRVhQRUNUX0VRKEZ1bmMoaSwgMTIpLCBtMC5tYXBfaW50MzJfZG91YmxlKCkuYXQoaSArIDEw
KSk7Ci0gICAgRVhQRUNUX0VRKFN0ckZ1bmMoaSwgMTUpLCBtMC5tYXBfc3RyaW5nX3N0cmluZygp
LmF0KFN0ckZ1bmMoaSArIDEwLCAxKSkpOwotICAgIEVYUEVDVF9FUShGdW5jKGksIDE2KSwgbTAu
bWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSgpLmF0KGkgKyAxMCkuYygpKTsKLSAgfQotCi0gIC8v
IFRlc3QgTXV0YWJsZVJlcGVhdGVkUmVmOjpNZXJnZUZyb20KLSAgbW1mX2ludDMyX2ludDMyLk1l
cmdlRnJvbSgKLSAgICAgIHJlZmwtPkdldFJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4oCi0gICAg
ICAgICAgbTIsIGZkX21hcF9pbnQzMl9pbnQzMikpOwotICBtbWZfaW50MzJfZG91YmxlLk1lcmdl
RnJvbSgKLSAgICAgIHJlZmwtPkdldFJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4oCi0gICAgICAg
ICAgbTIsIGZkX21hcF9pbnQzMl9kb3VibGUpKTsKLSAgbW1mX3N0cmluZ19zdHJpbmcuTWVyZ2VG
cm9tKAotICAgICAgcmVmbC0+R2V0UmVwZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPigKLSAgICAgICAg
ICBtMiwgZmRfbWFwX3N0cmluZ19zdHJpbmcpKTsKLSAgbW1mX2ludDMyX2ZvcmVpZ25fbWVzc2Fn
ZS5NZXJnZUZyb20oCi0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVmPE1lc3NhZ2U+KAot
ICAgICAgICAgIG0yLCBmZF9tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlKSk7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgIEVYUEVDVF9FUShGdW5jKGksIDIxKSwgbTAubWFw
X2ludDMyX2ludDMyKCkuYXQoaSArIDIwKSk7Ci0gICAgRVhQRUNUX0VRKEZ1bmMoaSwgMjIpLCBt
MC5tYXBfaW50MzJfZG91YmxlKCkuYXQoaSArIDIwKSk7Ci0gICAgRVhQRUNUX0VRKFN0ckZ1bmMo
aSwgMjUpLCBtMC5tYXBfc3RyaW5nX3N0cmluZygpLmF0KFN0ckZ1bmMoaSArIDIwLCAxKSkpOwot
ICAgIEVYUEVDVF9FUShGdW5jKGksIDI2KSwgbTAubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSgp
LmF0KGkgKyAyMCkuYygpKTsKLSAgfQotCi0gIC8vIFRlc3QgTXV0YWJsZVJlcGVhdGVkUmVmOjpT
d2FwCi0gIC8vIFN3YXAgYmV0d2VlbiBtMCBhbmQgbTIuCi0gIG1tZl9pbnQzMl9pbnQzMi5Td2Fw
KAotICAgICAgcmVmbC0+R2V0TXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4oCi0gICAg
ICAgICAgJm0yLCBmZF9tYXBfaW50MzJfaW50MzIpKTsKLSAgbW1mX2ludDMyX2RvdWJsZS5Td2Fw
KAotICAgICAgcmVmbC0+R2V0TXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT4oCi0gICAg
ICAgICAgJm0yLCBmZF9tYXBfaW50MzJfZG91YmxlKSk7Ci0gIG1tZl9zdHJpbmdfc3RyaW5nLlN3
YXAoCi0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPigKLSAg
ICAgICAgICAmbTIsIGZkX21hcF9zdHJpbmdfc3RyaW5nKSk7Ci0gIG1tZl9pbnQzMl9mb3JlaWdu
X21lc3NhZ2UuU3dhcCgKLSAgICAgIHJlZmwtPkdldE11dGFibGVSZXBlYXRlZEZpZWxkUmVmPE1l
c3NhZ2U+KAotICAgICAgICAgICZtMiwgZmRfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSkpOwot
ICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAvLyBDaGVjayB0aGUgY29udGVu
dCBvZiBtMC4KLSAgICBFWFBFQ1RfRVEoRnVuYyhpLCAyMSksIG0wLm1hcF9pbnQzMl9pbnQzMigp
LmF0KGkgKyAyMCkpOwotICAgIEVYUEVDVF9FUShGdW5jKGksIDIyKSwgbTAubWFwX2ludDMyX2Rv
dWJsZSgpLmF0KGkgKyAyMCkpOwotICAgIEVYUEVDVF9FUShTdHJGdW5jKGksIDI1KSwgbTAubWFw
X3N0cmluZ19zdHJpbmcoKS5hdChTdHJGdW5jKGkgKyAyMCwgMSkpKTsKLSAgICBFWFBFQ1RfRVEo
RnVuYyhpLCAyNiksIG0wLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UoKS5hdChpICsgMjApLmMo
KSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgY29udGVudCBvZiBtMi4KLSAgICBFWFBFQ1RfRVEoRnVu
YyhpLCAxMSksIG0yLm1hcF9pbnQzMl9pbnQzMigpLmF0KGkgKyAxMCkpOwotICAgIEVYUEVDVF9F
UShGdW5jKGksIDEyKSwgbTIubWFwX2ludDMyX2RvdWJsZSgpLmF0KGkgKyAxMCkpOwotICAgIEVY
UEVDVF9FUShTdHJGdW5jKGksIDE1KSwgbTIubWFwX3N0cmluZ19zdHJpbmcoKS5hdChTdHJGdW5j
KGkgKyAxMCwgMSkpKTsKLSAgICBFWFBFQ1RfRVEoRnVuYyhpLCAxNiksIG0yLm1hcF9pbnQzMl9m
b3JlaWduX21lc3NhZ2UoKS5hdChpICsgMTApLmMoKSk7Ci0gICAgRVhQRUNUX0VRKEZ1bmMoaSwg
MjEpLCBtMi5tYXBfaW50MzJfaW50MzIoKS5hdChpICsgMjApKTsKLSAgICBFWFBFQ1RfRVEoRnVu
YyhpLCAyMiksIG0yLm1hcF9pbnQzMl9kb3VibGUoKS5hdChpICsgMjApKTsKLSAgICBFWFBFQ1Rf
RVEoU3RyRnVuYyhpLCAyNSksIG0yLm1hcF9zdHJpbmdfc3RyaW5nKCkuYXQoU3RyRnVuYyhpICsg
MjAsIDEpKSk7Ci0gICAgRVhQRUNUX0VRKEZ1bmMoaSwgMjYpLCBtMi5tYXBfaW50MzJfZm9yZWln
bl9tZXNzYWdlKCkuYXQoaSArIDIwKS5jKCkpOwotICB9Ci0KLSAgLy8gVE9ETyh0ZWJvcmluZyk6
IGFkZCB0ZXN0IGZvciBkdXBsaWNhdGVkIGtleQotfQotCi0vLyBHZW5lcmF0ZWQgTWVzc2FnZSBU
ZXN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVEVTVChH
ZW5lcmF0ZWRNYXBGaWVsZFRlc3QsIEFjY2Vzc29ycykgewotICB1bml0dGVzdDo6VGVzdE1hcCBt
ZXNzYWdlOwotCi0gIE1hcFRlc3RVdGlsOjpTZXRNYXBGaWVsZHMoJm1lc3NhZ2UpOwotICBNYXBU
ZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2UpOwotCi0gIE1hcFRlc3RVdGlsOjpN
b2RpZnlNYXBGaWVsZHMoJm1lc3NhZ2UpOwotICBNYXBUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRz
TW9kaWZpZWQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRUZXN0LCBTZXRN
YXBGaWVsZHNJbml0aWFsaXplZCkgewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlOwotCi0g
IE1hcFRlc3RVdGlsOjpTZXRNYXBGaWVsZHNJbml0aWFsaXplZCgmbWVzc2FnZSk7Ci0gIE1hcFRl
c3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXRJbml0aWFsaXplZChtZXNzYWdlKTsKLX0KLQotVEVT
VChHZW5lcmF0ZWRNYXBGaWVsZFRlc3QsIFByb3RvMlNldE1hcEZpZWxkc0luaXRpYWxpemVkKSB7
Ci0gIHVuaXR0ZXN0OjpUZXN0RW51bU1hcCBtZXNzYWdlOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6
OlBST1RPMl9NQVBfRU5VTV9GT08sCi0gICAgICAgICAgICAoKm1lc3NhZ2UubXV0YWJsZV9rbm93
bl9tYXBfZmllbGQoKSlbMF0pOwotfQotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxkVGVzdCwgQ2xl
YXIpIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTsKLQotICBNYXBUZXN0VXRpbDo6U2V0
TWFwRmllbGRzKCZtZXNzYWdlKTsKLSAgbWVzc2FnZS5DbGVhcigpOwotICBNYXBUZXN0VXRpbDo6
RXhwZWN0Q2xlYXIobWVzc2FnZSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRUZXN0LCBD
bGVhck1lc3NhZ2VNYXApIHsKLSAgdW5pdHRlc3Q6OlRlc3RNZXNzYWdlTWFwIG1lc3NhZ2U7Ci0K
LSAgLy8gQ3JlYXRlcyBhIFRlc3RBbGxUeXBlcyB3aXRoIGRlZmF1bHQgdmFsdWUKLSAgVGVzdFV0
aWw6OkV4cGVjdENsZWFyKCgqbWVzc2FnZS5tdXRhYmxlX21hcF9pbnQzMl9tZXNzYWdlKCkpWzBd
KTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFRlc3QsIENvcHlGcm9tKSB7Ci0gIHVuaXR0
ZXN0OjpUZXN0TWFwIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLQotICBNYXBUZXN0VXRpbDo6U2V0TWFw
RmllbGRzKCZtZXNzYWdlMSk7Ci0gIG1lc3NhZ2UyLkNvcHlGcm9tKG1lc3NhZ2UxKTsKLSAgTWFw
VGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlMik7Ci0KLSAgLy8gQ29weWluZyBm
cm9tIHNlbGYgc2hvdWxkIGJlIGEgbm8tb3AuCi0gIG1lc3NhZ2UyLkNvcHlGcm9tKG1lc3NhZ2Uy
KTsKLSAgTWFwVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlMik7Ci19Ci0KLVRF
U1QoR2VuZXJhdGVkTWFwRmllbGRUZXN0LCBDb3B5RnJvbU1lc3NhZ2VNYXApIHsKLSAgdW5pdHRl
c3Q6OlRlc3RNZXNzYWdlTWFwIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLQotICAoKm1lc3NhZ2UxLm11
dGFibGVfbWFwX2ludDMyX21lc3NhZ2UoKSlbMF0uYWRkX3JlcGVhdGVkX2ludDMyKDEwMCk7Ci0g
ICgqbWVzc2FnZTIubXV0YWJsZV9tYXBfaW50MzJfbWVzc2FnZSgpKVswXS5hZGRfcmVwZWF0ZWRf
aW50MzIoMTAxKTsKLQotICBtZXNzYWdlMS5Db3B5RnJvbShtZXNzYWdlMik7Ci0KLSAgLy8gQ2hl
Y2tzIHJlcGVhdGVkIGZpZWxkIGlzIG92ZXJ3cml0dGVuLgotICBFWFBFQ1RfRVEoMSwgbWVzc2Fn
ZTEubWFwX2ludDMyX21lc3NhZ2UoKS5hdCgwKS5yZXBlYXRlZF9pbnQzMl9zaXplKCkpOwotICBF
WFBFQ1RfRVEoMTAxLCBtZXNzYWdlMS5tYXBfaW50MzJfbWVzc2FnZSgpLmF0KDApLnJlcGVhdGVk
X2ludDMyKDApKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFRlc3QsIFN3YXBXaXRoRW1w
dHkpIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTEsIG1lc3NhZ2UyOwotCi0gIE1hcFRl
c3RVdGlsOjpTZXRNYXBGaWVsZHMoJm1lc3NhZ2UxKTsKLSAgTWFwVGVzdFV0aWw6OkV4cGVjdE1h
cEZpZWxkc1NldChtZXNzYWdlMSk7Ci0gIE1hcFRlc3RVdGlsOjpFeHBlY3RDbGVhcihtZXNzYWdl
Mik7Ci0KLSAgbWVzc2FnZTEuU3dhcCgmbWVzc2FnZTIpOwotICBNYXBUZXN0VXRpbDo6RXhwZWN0
TWFwRmllbGRzU2V0KG1lc3NhZ2UyKTsKLSAgTWFwVGVzdFV0aWw6OkV4cGVjdENsZWFyKG1lc3Nh
Z2UxKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFRlc3QsIFN3YXBXaXRoU2VsZikgewot
ICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlOwotCi0gIE1hcFRlc3RVdGlsOjpTZXRNYXBGaWVs
ZHMoJm1lc3NhZ2UpOwotICBNYXBUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2Up
OwotCi0gIG1lc3NhZ2UuU3dhcCgmbWVzc2FnZSk7Ci0gIE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBG
aWVsZHNTZXQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRUZXN0LCBTd2Fw
V2l0aE90aGVyKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLQot
ICBNYXBUZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlMSk7Ci0gIE1hcFRlc3RVdGlsOjpT
ZXRNYXBGaWVsZHMoJm1lc3NhZ2UyKTsKLSAgTWFwVGVzdFV0aWw6Ok1vZGlmeU1hcEZpZWxkcygm
bWVzc2FnZTIpOwotCi0gIG1lc3NhZ2UxLlN3YXAoJm1lc3NhZ2UyKTsKLSAgTWFwVGVzdFV0aWw6
OkV4cGVjdE1hcEZpZWxkc01vZGlmaWVkKG1lc3NhZ2UxKTsKLSAgTWFwVGVzdFV0aWw6OkV4cGVj
dE1hcEZpZWxkc1NldChtZXNzYWdlMik7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRUZXN0
LCBDb3B5Q29uc3RydWN0b3IpIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTE7Ci0gIE1h
cFRlc3RVdGlsOjpTZXRNYXBGaWVsZHMoJm1lc3NhZ2UxKTsKLQotICB1bml0dGVzdDo6VGVzdE1h
cCBtZXNzYWdlMihtZXNzYWdlMSk7Ci0gIE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXQo
bWVzc2FnZTIpOwotfQotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxkVGVzdCwgQ29weUFzc2lnbm1l
bnRPcGVyYXRvcikgewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlMTsKLSAgTWFwVGVzdFV0
aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZTEpOwotCi0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1lc3Nh
Z2UyOwotICBtZXNzYWdlMiA9IG1lc3NhZ2UxOwotICBNYXBUZXN0VXRpbDo6RXhwZWN0TWFwRmll
bGRzU2V0KG1lc3NhZ2UyKTsKLQotICAvLyBNYWtlIHN1cmUgdGhhdCBzZWxmLWFzc2lnbm1lbnQg
ZG9lcyBzb21ldGhpbmcgc2FuZS4KLSAgbWVzc2FnZTIub3BlcmF0b3I9KG1lc3NhZ2UyKTsKLSAg
TWFwVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlMik7Ci19Ci0KLSNpZiAhZGVm
aW5lZChQUk9UT0JVRl9URVNUX05PX0RFU0NSSVBUT1JTKSB8fCBcCi0gICAgICAgICFkZWZpbmVk
KEdPT0dMRV9QUk9UT0JVRl9OT19SVFRJKQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFRlc3QsIFVw
Y2FzdENvcHlGcm9tKSB7Ci0gIC8vIFRlc3QgdGhlIENvcHlGcm9tIG1ldGhvZCB0aGF0IHRha2Vz
IGluIHRoZSBnZW5lcmljIGNvbnN0IE1lc3NhZ2UmCi0gIC8vIHBhcmFtZXRlci4KLSAgdW5pdHRl
c3Q6OlRlc3RNYXAgbWVzc2FnZTEsIG1lc3NhZ2UyOwotCi0gIE1hcFRlc3RVdGlsOjpTZXRNYXBG
aWVsZHMoJm1lc3NhZ2UxKTsKLQotICBjb25zdCBNZXNzYWdlKiBzb3VyY2UgPSBpbXBsaWNpdF9j
YXN0PGNvbnN0IE1lc3NhZ2UqPigmbWVzc2FnZTEpOwotICBtZXNzYWdlMi5Db3B5RnJvbSgqc291
cmNlKTsKLQotICBNYXBUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2UyKTsKLX0K
LSNlbmRpZgotCi0jaWZuZGVmIFBST1RPQlVGX1RFU1RfTk9fREVTQ1JJUFRPUlMKLQotVEVTVChH
ZW5lcmF0ZWRNYXBGaWVsZFRlc3QsIENvcHlGcm9tRHluYW1pY01lc3NhZ2UpIHsKLSAgLy8gVGVz
dCBjb3B5aW5nIGZyb20gYSBEeW5hbWljTWVzc2FnZSwgd2hpY2ggbXVzdCBmYWxsIGJhY2sgdG8g
dXNpbmcKLSAgLy8gcmVmbGVjdGlvbi4KLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTI7Ci0K
LSAgLy8gQ29uc3RydWN0IGEgbmV3IHZlcnNpb24gb2YgdGhlIGR5bmFtaWMgbWVzc2FnZSB2aWEg
dGhlIGZhY3RvcnkuCi0gIER5bmFtaWNNZXNzYWdlRmFjdG9yeSBmYWN0b3J5OwotICBnb29nbGU6
OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IG1lc3NhZ2UxOwotICBtZXNzYWdlMS5yZXNl
dCgKLSAgICAgIGZhY3RvcnkuR2V0UHJvdG90eXBlKHVuaXR0ZXN0OjpUZXN0TWFwOjpkZXNjcmlw
dG9yKCkpLT5OZXcoKSk7Ci0gIE1hcFJlZmxlY3Rpb25UZXN0ZXIgcmVmbGVjdGlvbl90ZXN0ZXIo
Ci0gICAgICB1bml0dGVzdDo6VGVzdE1hcDo6ZGVzY3JpcHRvcigpKTsKLSAgcmVmbGVjdGlvbl90
ZXN0ZXIuU2V0TWFwRmllbGRzVmlhUmVmbGVjdGlvbihtZXNzYWdlMS5nZXQoKSk7Ci0gIHJlZmxl
Y3Rpb25fdGVzdGVyLkV4cGVjdE1hcEZpZWxkc1NldFZpYVJlZmxlY3Rpb24oKm1lc3NhZ2UxKTsK
LSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0TWFwRmllbGRzU2V0VmlhUmVmbGVjdGlvbkl0ZXJh
dG9yKG1lc3NhZ2UxLmdldCgpKTsKLSAgbWVzc2FnZTIuQ29weUZyb20oKm1lc3NhZ2UxKTsKLSAg
TWFwVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlMik7Ci19Ci0KLVRFU1QoR2Vu
ZXJhdGVkTWFwRmllbGRUZXN0LCBDb3B5RnJvbUR5bmFtaWNNZXNzYWdlTWFwUmVmbGVjdGlvbikg
ewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlMjsKLQotICAvLyBDb25zdHJ1Y3QgYSBuZXcg
dmVyc2lvbiBvZiB0aGUgZHluYW1pYyBtZXNzYWdlIHZpYSB0aGUgZmFjdG9yeS4KLSAgRHluYW1p
Y01lc3NhZ2VGYWN0b3J5IGZhY3Rvcnk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8
TWVzc2FnZT4gbWVzc2FnZTE7Ci0gIG1lc3NhZ2UxLnJlc2V0KAotICAgICAgZmFjdG9yeS5HZXRQ
cm90b3R5cGUodW5pdHRlc3Q6OlRlc3RNYXA6OmRlc2NyaXB0b3IoKSktPk5ldygpKTsKLSAgTWFw
UmVmbGVjdGlvblRlc3RlciByZWZsZWN0aW9uX3Rlc3RlcigKLSAgICAgIHVuaXR0ZXN0OjpUZXN0
TWFwOjpkZXNjcmlwdG9yKCkpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5TZXRNYXBGaWVsZHNWaWFN
YXBSZWZsZWN0aW9uKG1lc3NhZ2UxLmdldCgpKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0
TWFwRmllbGRzU2V0VmlhUmVmbGVjdGlvbigqbWVzc2FnZTEpOwotICByZWZsZWN0aW9uX3Rlc3Rl
ci5FeHBlY3RNYXBGaWVsZHNTZXRWaWFSZWZsZWN0aW9uSXRlcmF0b3IobWVzc2FnZTEuZ2V0KCkp
OwotICBtZXNzYWdlMi5Db3B5RnJvbSgqbWVzc2FnZTEpOwotICBNYXBUZXN0VXRpbDo6RXhwZWN0
TWFwRmllbGRzU2V0KG1lc3NhZ2UyKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFRlc3Qs
IER5bmFtaWNNZXNzYWdlQ29weUZyb20pIHsKLSAgLy8gVGVzdCBjb3B5aW5nIHRvIGEgRHluYW1p
Y01lc3NhZ2UsIHdoaWNoIG11c3QgZmFsbCBiYWNrIHRvIHVzaW5nIHJlZmxlY3Rpb24uCi0gIHVu
aXR0ZXN0OjpUZXN0TWFwIG1lc3NhZ2UyOwotICBNYXBUZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZt
ZXNzYWdlMik7Ci0KLSAgLy8gQ29uc3RydWN0IGEgbmV3IHZlcnNpb24gb2YgdGhlIGR5bmFtaWMg
bWVzc2FnZSB2aWEgdGhlIGZhY3RvcnkuCi0gIER5bmFtaWNNZXNzYWdlRmFjdG9yeSBmYWN0b3J5
OwotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IG1lc3NhZ2UxOwotICBt
ZXNzYWdlMS5yZXNldCgKLSAgICAgIGZhY3RvcnkuR2V0UHJvdG90eXBlKHVuaXR0ZXN0OjpUZXN0
TWFwOjpkZXNjcmlwdG9yKCkpLT5OZXcoKSk7Ci0KLSAgTWFwUmVmbGVjdGlvblRlc3RlciByZWZs
ZWN0aW9uX3Rlc3RlcigKLSAgICAgIHVuaXR0ZXN0OjpUZXN0TWFwOjpkZXNjcmlwdG9yKCkpOwot
ICBtZXNzYWdlMS0+TWVyZ2VGcm9tKG1lc3NhZ2UyKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhw
ZWN0TWFwRmllbGRzU2V0VmlhUmVmbGVjdGlvbigqbWVzc2FnZTEpOwotICByZWZsZWN0aW9uX3Rl
c3Rlci5FeHBlY3RNYXBGaWVsZHNTZXRWaWFSZWZsZWN0aW9uSXRlcmF0b3IobWVzc2FnZTEuZ2V0
KCkpOwotfQotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxkVGVzdCwgRHluYW1pY01lc3NhZ2VDb3B5
RnJvbU1hcFJlZmxlY3Rpb24pIHsKLSAgTWFwUmVmbGVjdGlvblRlc3RlciByZWZsZWN0aW9uX3Rl
c3RlcigKLSAgICAgIHVuaXR0ZXN0OjpUZXN0TWFwOjpkZXNjcmlwdG9yKCkpOwotICB1bml0dGVz
dDo6VGVzdE1hcCBtZXNzYWdlMjsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU2V0TWFwRmllbGRzVmlh
TWFwUmVmbGVjdGlvbigmbWVzc2FnZTIpOwotCi0gIC8vIENvbnN0cnVjdCBhIGR5bmFtaWMgbWVz
c2FnZSB2aWEgdGhlIGZhY3RvcnkuCi0gIER5bmFtaWNNZXNzYWdlRmFjdG9yeSBmYWN0b3J5Owot
ICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IG1lc3NhZ2UxOwotICBtZXNz
YWdlMS5yZXNldCgKLSAgICAgIGZhY3RvcnkuR2V0UHJvdG90eXBlKHVuaXR0ZXN0OjpUZXN0TWFw
OjpkZXNjcmlwdG9yKCkpLT5OZXcoKSk7Ci0KLSAgbWVzc2FnZTEtPk1lcmdlRnJvbShtZXNzYWdl
Mik7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4cGVjdE1hcEZpZWxkc1NldFZpYVJlZmxlY3Rpb25J
dGVyYXRvcihtZXNzYWdlMS5nZXQoKSk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4cGVjdE1hcEZp
ZWxkc1NldFZpYVJlZmxlY3Rpb24oKm1lc3NhZ2UxKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNYXBG
aWVsZFRlc3QsIFN5bmNEeW5hbWljTWFwV2l0aFJlcGVhdGVkRmllbGQpIHsKLSAgLy8gQ29uc3Ry
dWN0IGEgZHluYW1pYyBtZXNzYWdlIHZpYSB0aGUgZmFjdG9yeS4KLSAgTWFwUmVmbGVjdGlvblRl
c3RlciByZWZsZWN0aW9uX3Rlc3RlcigKLSAgICAgIHVuaXR0ZXN0OjpUZXN0TWFwOjpkZXNjcmlw
dG9yKCkpOwotICBEeW5hbWljTWVzc2FnZUZhY3RvcnkgZmFjdG9yeTsKLSAgZ29vZ2xlOjpwcm90
b2J1Zjo6c2NvcGVkX3B0cjxNZXNzYWdlPiBtZXNzYWdlOwotICBtZXNzYWdlLnJlc2V0KAotICAg
ICAgZmFjdG9yeS5HZXRQcm90b3R5cGUodW5pdHRlc3Q6OlRlc3RNYXA6OmRlc2NyaXB0b3IoKSkt
Pk5ldygpKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU2V0TWFwRmllbGRzVmlhUmVmbGVjdGlvbiht
ZXNzYWdlLmdldCgpKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0TWFwRmllbGRzU2V0Vmlh
UmVmbGVjdGlvbkl0ZXJhdG9yKG1lc3NhZ2UuZ2V0KCkpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5F
eHBlY3RNYXBGaWVsZHNTZXRWaWFSZWZsZWN0aW9uKCptZXNzYWdlKTsKLX0KLQotI2VuZGlmICAv
LyAhUFJPVE9CVUZfVEVTVF9OT19ERVNDUklQVE9SUwotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxk
VGVzdCwgTm9uRW1wdHlNZXJnZUZyb20pIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTEs
IG1lc3NhZ2UyOwotCi0gIE1hcFRlc3RVdGlsOjpTZXRNYXBGaWVsZHMoJm1lc3NhZ2UxKTsKLQot
ICAvLyBUaGlzIGZpZWxkIHdpbGwgdGVzdCBtZXJnaW5nIGludG8gYW4gZW1wdHkgc3BvdC4KLSAg
KCptZXNzYWdlMi5tdXRhYmxlX21hcF9pbnQzMl9pbnQzMigpKVsxXSA9IDE7Ci0gIG1lc3NhZ2Ux
Lm11dGFibGVfbWFwX2ludDMyX2ludDMyKCktPmVyYXNlKDEpOwotCi0gIC8vIFRoaXMgdGVzdHMg
b3ZlcndyaXRpbmcuCi0gICgqbWVzc2FnZTIubXV0YWJsZV9tYXBfaW50MzJfZG91YmxlKCkpWzFd
ID0gMTsKLSAgKCptZXNzYWdlMS5tdXRhYmxlX21hcF9pbnQzMl9kb3VibGUoKSlbMV0gPSAyOwot
Ci0gIG1lc3NhZ2UxLk1lcmdlRnJvbShtZXNzYWdlMik7Ci0gIE1hcFRlc3RVdGlsOjpFeHBlY3RN
YXBGaWVsZHNTZXQobWVzc2FnZTEpOwotfQotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxkVGVzdCwg
TWVyZ2VGcm9tTWVzc2FnZU1hcCkgewotICB1bml0dGVzdDo6VGVzdE1lc3NhZ2VNYXAgbWVzc2Fn
ZTEsIG1lc3NhZ2UyOwotCi0gICgqbWVzc2FnZTEubXV0YWJsZV9tYXBfaW50MzJfbWVzc2FnZSgp
KVswXS5hZGRfcmVwZWF0ZWRfaW50MzIoMTAwKTsKLSAgKCptZXNzYWdlMi5tdXRhYmxlX21hcF9p
bnQzMl9tZXNzYWdlKCkpWzBdLmFkZF9yZXBlYXRlZF9pbnQzMigxMDEpOwotCi0gIG1lc3NhZ2Ux
Lk1lcmdlRnJvbShtZXNzYWdlMik7Ci0KLSAgLy8gQ2hlY2tzIHJlcGVhdGVkIGZpZWxkIGlzIG92
ZXJ3cml0dGVuLgotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZTEubWFwX2ludDMyX21lc3NhZ2UoKS5h
dCgwKS5yZXBlYXRlZF9pbnQzMl9zaXplKCkpOwotICBFWFBFQ1RfRVEoMTAxLCBtZXNzYWdlMS5t
YXBfaW50MzJfbWVzc2FnZSgpLmF0KDApLnJlcGVhdGVkX2ludDMyKDApKTsKLX0KLQotLy8gVGVz
dCB0aGUgZ2VuZXJhdGVkIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoKQotVEVTVChH
ZW5lcmF0ZWRNYXBGaWVsZFRlc3QsIFNlcmlhbGl6YXRpb25Ub0FycmF5KSB7Ci0gIHVuaXR0ZXN0
OjpUZXN0TWFwIG1lc3NhZ2UxLCBtZXNzYWdlMjsKLSAgc3RyaW5nIGRhdGE7Ci0gIE1hcFRlc3RV
dGlsOjpTZXRNYXBGaWVsZHMoJm1lc3NhZ2UxKTsKLSAgaW50IHNpemUgPSBtZXNzYWdlMS5CeXRl
U2l6ZSgpOwotICBkYXRhLnJlc2l6ZShzaXplKTsKLSAgdWludDgqIHN0YXJ0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OCo+KHN0cmluZ19hc19hcnJheSgmZGF0YSkpOwotICB1aW50OCogZW5kID0g
bWVzc2FnZTEuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheShzdGFydCk7Ci0gIEVYUEVD
VF9FUShzaXplLCBlbmQgLSBzdGFydCk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UyLlBhcnNlRnJv
bVN0cmluZyhkYXRhKSk7Ci0gIE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXQobWVzc2Fn
ZTIpOwotfQotCi0vLyBUZXN0IHRoZSBnZW5lcmF0ZWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KCkKLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRUZXN0LCBTZXJpYWxpemF0aW9uVG9TdHJlYW0pIHsK
LSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTEsIG1lc3NhZ2UyOwotICBNYXBUZXN0VXRpbDo6
U2V0TWFwRmllbGRzKCZtZXNzYWdlMSk7Ci0gIGludCBzaXplID0gbWVzc2FnZTEuQnl0ZVNpemUo
KTsKLSAgc3RyaW5nIGRhdGE7Ci0gIGRhdGEucmVzaXplKHNpemUpOwotICB7Ci0gICAgLy8gQWxs
b3cgdGhlIG91dHB1dCBzdHJlYW0gdG8gYnVmZmVyIG9ubHkgb25lIGJ5dGUgYXQgYSB0aW1lLgot
ICAgIGlvOjpBcnJheU91dHB1dFN0cmVhbSBhcnJheV9zdHJlYW0oc3RyaW5nX2FzX2FycmF5KCZk
YXRhKSwgc2l6ZSwgMSk7Ci0gICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0o
JmFycmF5X3N0cmVhbSk7Ci0gICAgbWVzc2FnZTEuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKCZv
dXRwdXRfc3RyZWFtKTsKLSAgICBFWFBFQ1RfRkFMU0Uob3V0cHV0X3N0cmVhbS5IYWRFcnJvcigp
KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZSwgb3V0cHV0X3N0cmVhbS5CeXRlQ291bnQoKSk7Ci0gIH0K
LSAgRVhQRUNUX1RSVUUobWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgTWFwVGVz
dFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlMik7Ci19Ci0KLQotVEVTVChHZW5lcmF0
ZWRNYXBGaWVsZFRlc3QsIFNhbWVUeXBlTWFwcykgewotICBjb25zdCBEZXNjcmlwdG9yKiBtYXAx
ID0gdW5pdHRlc3Q6OlRlc3RTYW1lVHlwZU1hcDo6ZGVzY3JpcHRvcigpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLT5GaW5kRmllbGRCeU5hbWUoIm1hcDEiKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0+bWVzc2FnZV90eXBlKCk7Ci0gIGNvbnN0IERlc2NyaXB0b3Iq
IG1hcDIgPSB1bml0dGVzdDo6VGVzdFNhbWVUeXBlTWFwOjpkZXNjcmlwdG9yKCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtPkZpbmRGaWVsZEJ5TmFtZSgibWFwMiIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLT5tZXNzYWdlX3R5cGUoKTsKLQotICBjb25zdCBNZXNz
YWdlKiBtYXAxX2VudHJ5ID0KLSAgICAgIE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFjdG9y
eSgpLT5HZXRQcm90b3R5cGUobWFwMSk7Ci0gIGNvbnN0IE1lc3NhZ2UqIG1hcDJfZW50cnkgPQot
ICAgICAgTWVzc2FnZUZhY3Rvcnk6OmdlbmVyYXRlZF9mYWN0b3J5KCktPkdldFByb3RvdHlwZSht
YXAyKTsKLQotICBFWFBFQ1RfRVEobWFwMSwgbWFwMV9lbnRyeS0+R2V0RGVzY3JpcHRvcigpKTsK
LSAgRVhQRUNUX0VRKG1hcDIsIG1hcDJfZW50cnktPkdldERlc2NyaXB0b3IoKSk7Ci19Ci0KLVRF
U1QoR2VuZXJhdGVkTWFwRmllbGRUZXN0LCBQcm90bzJVbmtub3duRW51bSkgewotICB1bml0dGVz
dDo6VGVzdEVudW1NYXBQbHVzRXh0cmEgZnJvbTsKLSAgKCpmcm9tLm11dGFibGVfa25vd25fbWFw
X2ZpZWxkKCkpWzBdID0gdW5pdHRlc3Q6OkVfUFJPVE8yX01BUF9FTlVNX0ZPTzsKLSAgKCpmcm9t
Lm11dGFibGVfdW5rbm93bl9tYXBfZmllbGQoKSlbMF0gPSB1bml0dGVzdDo6RV9QUk9UTzJfTUFQ
X0VOVU1fRVhUUkE7Ci0gIHN0cmluZyBkYXRhOwotICBmcm9tLlNlcmlhbGl6ZVRvU3RyaW5nKCZk
YXRhKTsKLQotICB1bml0dGVzdDo6VGVzdEVudW1NYXAgdG87Ci0gIEVYUEVDVF9UUlVFKHRvLlBh
cnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gIEVYUEVDVF9FUSgwLCB0by51bmtub3duX21hcF9maWVs
ZCgpLnNpemUoKSk7Ci0gIGNvbnN0IFVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZF9zZXQg
PQotICAgICAgdG8uR2V0UmVmbGVjdGlvbigpLT5HZXRVbmtub3duRmllbGRzKHRvKTsKLSAgRVhQ
RUNUX0VRKDEsIHVua25vd25fZmllbGRfc2V0LmZpZWxkX2NvdW50KCkpOwotICBFWFBFQ1RfRVEo
MSwgdG8ua25vd25fbWFwX2ZpZWxkKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpQ
Uk9UTzJfTUFQX0VOVU1fRk9PLCB0by5rbm93bl9tYXBfZmllbGQoKS5hdCgwKSk7Ci0KLSAgZGF0
YS5jbGVhcigpOwotICBmcm9tLkNsZWFyKCk7Ci0gIHRvLlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRh
KTsKLSAgRVhQRUNUX1RSVUUoZnJvbS5QYXJzZUZyb21TdHJpbmcoZGF0YSkpOwotICBFWFBFQ1Rf
RVEoMCwgZnJvbS5HZXRSZWZsZWN0aW9uKCktPkdldFVua25vd25GaWVsZHMoZnJvbSkuZmllbGRf
Y291bnQoKSk7Ci0gIEVYUEVDVF9FUSgxLCBmcm9tLmtub3duX21hcF9maWVsZCgpLnNpemUoKSk7
Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6RV9QUk9UTzJfTUFQX0VOVU1fRk9PLCBmcm9tLmtub3du
X21hcF9maWVsZCgpLmF0KDApKTsKLSAgRVhQRUNUX0VRKDEsIGZyb20udW5rbm93bl9tYXBfZmll
bGQoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkVfUFJPVE8yX01BUF9FTlVNX0VY
VFJBLCBmcm9tLnVua25vd25fbWFwX2ZpZWxkKCkuYXQoMCkpOwotfQotCi1URVNUKEdlbmVyYXRl
ZE1hcEZpZWxkVGVzdCwgU3RhbmRhcmRXaXJlRm9ybWF0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFw
IG1lc3NhZ2U7Ci0gIHN0cmluZyBkYXRhID0gIlx4MEFceDA0XHgwOFx4MDFceDEwXHgwMSI7Ci0K
LSAgRVhQRUNUX1RSVUUobWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoZGF0YSkpOwotICBFWFBFQ1Rf
RVEoMSwgbWVzc2FnZS5tYXBfaW50MzJfaW50MzIoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMSwg
bWVzc2FnZS5tYXBfaW50MzJfaW50MzIoKS5hdCgxKSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWFw
RmllbGRUZXN0LCBVbm9yZGVyZWRXaXJlRm9ybWF0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1l
c3NhZ2U7Ci0KLSAgLy8gcHV0IHZhbHVlIGJlZm9yZSBrZXkgaW4gd2lyZSBmb3JtYXQKLSAgc3Ry
aW5nIGRhdGEgPSAiXHgwQVx4MDRceDEwXHgwMVx4MDhceDAyIjsKLQotICBFWFBFQ1RfVFJVRSht
ZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1h
cF9pbnQzMl9pbnQzMigpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF9pbnQz
Ml9pbnQzMigpLmF0KDIpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFRlc3QsIER1cGxp
Y2F0ZWRLZXlXaXJlRm9ybWF0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1lc3NhZ2U7Ci0KLSAg
Ly8gVHdvIGtleSBmaWVsZHMgaW4gd2lyZSBmb3JtYXQKLSAgc3RyaW5nIGRhdGEgPSAiXHgwQVx4
MDZceDA4XHgwMVx4MDhceDAyXHgxMFx4MDEiOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuUGFy
c2VGcm9tU3RyaW5nKGRhdGEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2lu
dDMyKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2ludDMyKCku
YXQoMikpOwotfQotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxkVGVzdCwgRHVwbGljYXRlZFZhbHVl
V2lyZUZvcm1hdCkgewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlOwotCi0gIC8vIFR3byB2
YWx1ZSBmaWVsZHMgaW4gd2lyZSBmb3JtYXQKLSAgc3RyaW5nIGRhdGEgPSAiXHgwQVx4MDZceDA4
XHgwMVx4MTBceDAxXHgxMFx4MDIiOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuUGFyc2VGcm9t
U3RyaW5nKGRhdGEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2ludDMyKCku
c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX2ludDMyX2ludDMyKCkuYXQoMSkp
OwotfQotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxkVGVzdCwgTWlzc2VkS2V5V2lyZUZvcm1hdCkg
ewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlOwotCi0gIC8vIE5vIGtleSBmaWVsZCBpbiB3
aXJlIGZvcm1hdAotICBzdHJpbmcgZGF0YSA9ICJceDBBXHgwMlx4MTBceDAxIjsKLQotICBFWFBF
Q1RfVFJVRShtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gIEVYUEVDVF9FUSgxLCBt
ZXNzYWdlLm1hcF9pbnQzMl9pbnQzMigpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdl
Lm1hcF9pbnQzMl9pbnQzMigpLmF0KDApKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFRl
c3QsIE1pc3NlZFZhbHVlV2lyZUZvcm1hdCkgewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdl
OwotCi0gIC8vIE5vIHZhbHVlIGZpZWxkIGluIHdpcmUgZm9ybWF0Ci0gIHN0cmluZyBkYXRhID0g
Ilx4MEFceDAyXHgwOFx4MDEiOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuUGFyc2VGcm9tU3Ry
aW5nKGRhdGEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2ludDMyKCkuc2l6
ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX2ludDMyX2ludDMyKCkuYXQoMSkpOwot
fQotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxkVGVzdCwgTWlzc2VkVmFsdWVUZXh0Rm9ybWF0KSB7
Ci0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1lc3NhZ2U7Ci0KLSAgLy8gTm8gdmFsdWUgZmllbGQgaW4g
dGV4dCBmb3JtYXQKLSAgc3RyaW5nIHRleHQgPQotICAgICAgIm1hcF9pbnQzMl9mb3JlaWduX21l
c3NhZ2Uge1xuIgotICAgICAgIiAga2V5OiAxMjM0NTY3ODkwXG4iCi0gICAgICAifSI7Ci0KLSAg
RVhQRUNUX1RSVUUoZ29vZ2xlOjpwcm90b2J1Zjo6VGV4dEZvcm1hdDo6UGFyc2VGcm9tU3RyaW5n
KHRleHQsICZtZXNzYWdlKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF9pbnQzMl9mb3Jl
aWduX21lc3NhZ2UoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMTEsIG1lc3NhZ2UuQnl0ZVNpemUo
KSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRUZXN0LCBVbmtub3duRmllbGRXaXJlRm9y
bWF0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1lc3NhZ2U7Ci0KLSAgLy8gVW5rbm93biBmaWVs
ZCBpbiB3aXJlIGZvcm1hdAotICBzdHJpbmcgZGF0YSA9ICJceDBBXHgwNlx4MDhceDAyXHgxMFx4
MDNceDE4XHgwMSI7Ci0KLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoZGF0
YSkpOwotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5tYXBfaW50MzJfaW50MzIoKS5zaXplKCkpOwot
ICBFWFBFQ1RfRVEoMywgbWVzc2FnZS5tYXBfaW50MzJfaW50MzIoKS5hdCgyKSk7Ci19Ci0KLVRF
U1QoR2VuZXJhdGVkTWFwRmllbGRUZXN0LCBDb3JydXB0ZWRXaXJlRm9ybWF0KSB7Ci0gIHVuaXR0
ZXN0OjpUZXN0TWFwIG1lc3NhZ2U7Ci0KLSAgLy8gY29ycnVwdGVkIGRhdGEgaW4gd2lyZSBmb3Jt
YXQKLSAgc3RyaW5nIGRhdGEgPSAiXHgwQVx4MDZceDA4XHgwMlx4MTFceDAzIjsKLQotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoZGF0YSkpOwotfQotCi1URVNUKEdlbmVy
YXRlZE1hcEZpZWxkVGVzdCwgSXNJbml0aWFsaXplZCkgewotICB1bml0dGVzdDo6VGVzdFJlcXVp
cmVkTWVzc2FnZU1hcCBtYXBfbWVzc2FnZTsKLQotICAvLyBBZGQgYW4gdW5pbml0aWFsaXplZCBt
ZXNzYWdlLgotICAoKm1hcF9tZXNzYWdlLm11dGFibGVfbWFwX2ZpZWxkKCkpWzBdOwotICBFWFBF
Q1RfRkFMU0UobWFwX21lc3NhZ2UuSXNJbml0aWFsaXplZCgpKTsKLQotICAvLyBJbml0aWFsaXpl
IHVuaW5pdGlhbGl6ZWQgbWVzc2FnZQotICAoKm1hcF9tZXNzYWdlLm11dGFibGVfbWFwX2ZpZWxk
KCkpWzBdLnNldF9hKDApOwotICAoKm1hcF9tZXNzYWdlLm11dGFibGVfbWFwX2ZpZWxkKCkpWzBd
LnNldF9iKDApOwotICAoKm1hcF9tZXNzYWdlLm11dGFibGVfbWFwX2ZpZWxkKCkpWzBdLnNldF9j
KDApOwotICBFWFBFQ1RfVFJVRShtYXBfbWVzc2FnZS5Jc0luaXRpYWxpemVkKCkpOwotfQotCi0v
LyBHZW5lcmF0ZWQgTWVzc2FnZSBSZWZsZWN0aW9uIFRlc3QgPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFJlZmxlY3Rpb25UZXN0LCBTcGFj
ZVVzZWQpIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTsKLSAgTWFwUmVmbGVjdGlvblRl
c3RlciByZWZsZWN0aW9uX3Rlc3RlcigKLSAgICB1bml0dGVzdDo6VGVzdE1hcDo6ZGVzY3JpcHRv
cigpKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuU2V0TWFwRmllbGRzVmlhUmVmbGVjdGlvbigmbWVz
c2FnZSk7Ci0KLSAgRVhQRUNUX0xUKDAsIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5TcGFjZVVz
ZWQobWVzc2FnZSkpOwotfQotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxkUmVmbGVjdGlvblRlc3Qs
IEFjY2Vzc29ycykgewotICAvLyBTZXQgZXZlcnkgZmllbGQgdG8gYSB1bmlxdWUgdmFsdWUgdGhl
biBnbyBiYWNrIGFuZCBjaGVjayBhbGwgdGhvc2UKLSAgLy8gdmFsdWVzLgotICB1bml0dGVzdDo6
VGVzdE1hcCBtZXNzYWdlOwotICBNYXBSZWZsZWN0aW9uVGVzdGVyIHJlZmxlY3Rpb25fdGVzdGVy
KAotICAgIHVuaXR0ZXN0OjpUZXN0TWFwOjpkZXNjcmlwdG9yKCkpOwotICByZWZsZWN0aW9uX3Rl
c3Rlci5TZXRNYXBGaWVsZHNWaWFSZWZsZWN0aW9uKCZtZXNzYWdlKTsKLSAgTWFwVGVzdFV0aWw6
OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIuRXhwZWN0
TWFwRmllbGRzU2V0VmlhUmVmbGVjdGlvbihtZXNzYWdlKTsKLSAgcmVmbGVjdGlvbl90ZXN0ZXIu
RXhwZWN0TWFwRmllbGRzU2V0VmlhUmVmbGVjdGlvbkl0ZXJhdG9yKCZtZXNzYWdlKTsKLQotICBy
ZWZsZWN0aW9uX3Rlc3Rlci5Nb2RpZnlNYXBGaWVsZHNWaWFSZWZsZWN0aW9uKCZtZXNzYWdlKTsK
LSAgTWFwVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc01vZGlmaWVkKG1lc3NhZ2UpOwotfQotCi1U
RVNUKEdlbmVyYXRlZE1hcEZpZWxkUmVmbGVjdGlvblRlc3QsIFN3YXApIHsKLSAgdW5pdHRlc3Q6
OlRlc3RNYXAgbWVzc2FnZTE7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1lc3NhZ2UyOwotCi0gIE1h
cFRlc3RVdGlsOjpTZXRNYXBGaWVsZHMoJm1lc3NhZ2UxKTsKLQotICBjb25zdCBSZWZsZWN0aW9u
KiByZWZsZWN0aW9uID0gbWVzc2FnZTEuR2V0UmVmbGVjdGlvbigpOwotICByZWZsZWN0aW9uLT5T
d2FwKCZtZXNzYWdlMSwgJm1lc3NhZ2UyKTsKLQotICBNYXBUZXN0VXRpbDo6RXhwZWN0Q2xlYXIo
bWVzc2FnZTEpOwotICBNYXBUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2UyKTsK
LX0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFJlZmxlY3Rpb25UZXN0LCBTd2FwV2l0aEJvdGhT
ZXQpIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTE7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFw
IG1lc3NhZ2UyOwotCi0gIE1hcFRlc3RVdGlsOjpTZXRNYXBGaWVsZHMoJm1lc3NhZ2UxKTsKLSAg
TWFwVGVzdFV0aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZTIpOwotICBNYXBUZXN0VXRpbDo6TW9k
aWZ5TWFwRmllbGRzKCZtZXNzYWdlMik7Ci0KLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlv
biA9IG1lc3NhZ2UxLkdldFJlZmxlY3Rpb24oKTsKLSAgcmVmbGVjdGlvbi0+U3dhcCgmbWVzc2Fn
ZTEsICZtZXNzYWdlMik7Ci0KLSAgTWFwVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc01vZGlmaWVk
KG1lc3NhZ2UxKTsKLSAgTWFwVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlMik7
Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRSZWZsZWN0aW9uVGVzdCwgU3dhcEZpZWxkcykg
ewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlMTsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVz
c2FnZTI7Ci0KLSAgTWFwVGVzdFV0aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZTIpOwotCi0gIHZl
Y3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIGNvbnN0IFJlZmxlY3Rpb24q
IHJlZmxlY3Rpb24gPSBtZXNzYWdlMS5HZXRSZWZsZWN0aW9uKCk7Ci0gIHJlZmxlY3Rpb24tPkxp
c3RGaWVsZHMobWVzc2FnZTIsICZmaWVsZHMpOwotICByZWZsZWN0aW9uLT5Td2FwRmllbGRzKCZt
ZXNzYWdlMSwgJm1lc3NhZ2UyLCBmaWVsZHMpOwotCi0gIE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBG
aWVsZHNTZXQobWVzc2FnZTEpOwotICBNYXBUZXN0VXRpbDo6RXhwZWN0Q2xlYXIobWVzc2FnZTIp
OwotfQotCi1URVNUKEdlbmVyYXRlZE1hcEZpZWxkUmVmbGVjdGlvblRlc3QsIENsZWFyRmllbGQp
IHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTsKLSAgTWFwVGVzdFV0aWw6OlNldE1hcEZp
ZWxkcygmbWVzc2FnZSk7Ci0gIE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXQobWVzc2Fn
ZSk7Ci0KLSAgTWFwUmVmbGVjdGlvblRlc3RlciByZWZsZWN0aW9uX3Rlc3RlcigKLSAgICAgIHVu
aXR0ZXN0OjpUZXN0TWFwOjpkZXNjcmlwdG9yKCkpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5DbGVh
ck1hcEZpZWxkc1ZpYVJlZmxlY3Rpb24oJm1lc3NhZ2UpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5F
eHBlY3RDbGVhclZpYVJlZmxlY3Rpb24obWVzc2FnZSk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLkV4
cGVjdENsZWFyVmlhUmVmbGVjdGlvbkl0ZXJhdG9yKCZtZXNzYWdlKTsKLX0KLQotVEVTVChHZW5l
cmF0ZWRNYXBGaWVsZFJlZmxlY3Rpb25UZXN0LCBSZW1vdmVMYXN0KSB7Ci0gIHVuaXR0ZXN0OjpU
ZXN0TWFwIG1lc3NhZ2U7Ci0gIE1hcFJlZmxlY3Rpb25UZXN0ZXIgcmVmbGVjdGlvbl90ZXN0ZXIo
Ci0gICAgICB1bml0dGVzdDo6VGVzdE1hcDo6ZGVzY3JpcHRvcigpKTsKLQotICBNYXBUZXN0VXRp
bDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlKTsKLSAgTWFwVGVzdFV0aWw6OkV4cGVjdE1hcHNTaXpl
KG1lc3NhZ2UsIDIpOwotICBzdGQ6OnZlY3Rvcjxjb25zdCBNZXNzYWdlKj4gZXhwZWN0ZWRfZW50
cmllcyA9Ci0gICAgICBNYXBUZXN0VXRpbDo6R2V0TWFwRW50cmllcyhtZXNzYWdlLCAwKTsKLQot
ICByZWZsZWN0aW9uX3Rlc3Rlci5SZW1vdmVMYXN0TWFwc1ZpYVJlZmxlY3Rpb24oJm1lc3NhZ2Up
OwotCi0gIE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBzU2l6ZShtZXNzYWdlLCAxKTsKLSAgc3RkOjp2
ZWN0b3I8Y29uc3QgTWVzc2FnZSo+IHJlbWFpbmVkX2VudHJpZXMgPQotICAgICAgTWFwVGVzdFV0
aWw6OkdldE1hcEVudHJpZXMobWVzc2FnZSwgMCk7Ci0gIEVYUEVDVF9UUlVFKGV4cGVjdGVkX2Vu
dHJpZXMgPT0gcmVtYWluZWRfZW50cmllcyk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRS
ZWZsZWN0aW9uVGVzdCwgUmVsZWFzZUxhc3QpIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2Fn
ZTsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IG1lc3NhZ2UuR2V0RGVzY3JpcHRv
cigpOwotICBNYXBSZWZsZWN0aW9uVGVzdGVyIHJlZmxlY3Rpb25fdGVzdGVyKGRlc2NyaXB0b3Ip
OwotCi0gIE1hcFRlc3RVdGlsOjpTZXRNYXBGaWVsZHMoJm1lc3NhZ2UpOwotCi0gIE1hcFRlc3RV
dGlsOjpFeHBlY3RNYXBzU2l6ZShtZXNzYWdlLCAyKTsKLQotICByZWZsZWN0aW9uX3Rlc3Rlci5S
ZWxlYXNlTGFzdE1hcHNWaWFSZWZsZWN0aW9uKCZtZXNzYWdlKTsKLQotICBNYXBUZXN0VXRpbDo6
RXhwZWN0TWFwc1NpemUobWVzc2FnZSwgMSk7Ci0KLSAgLy8gTm93IHRlc3QgdGhhdCB3ZSBhY3R1
YWxseSByZWxlYXNlIHRoZSByaWdodCBtZXNzYWdlLgotICBtZXNzYWdlLkNsZWFyKCk7Ci0gIE1h
cFRlc3RVdGlsOjpTZXRNYXBGaWVsZHMoJm1lc3NhZ2UpOwotCi0gIE1hcFRlc3RVdGlsOjpFeHBl
Y3RNYXBzU2l6ZShtZXNzYWdlLCAyKTsKLSAgc3RkOjp2ZWN0b3I8Y29uc3QgTWVzc2FnZSo+IGV4
cGVjdF9sYXN0ID0KLSAgICAgIE1hcFRlc3RVdGlsOjpHZXRNYXBFbnRyaWVzKG1lc3NhZ2UsIDEp
OwotICBzdGQ6OnZlY3Rvcjxjb25zdCBNZXNzYWdlKj4gcmVsZWFzZV9sYXN0ID0KLSAgICAgIE1h
cFRlc3RVdGlsOjpHZXRNYXBFbnRyaWVzRnJvbVJlbGVhc2UoJm1lc3NhZ2UpOwotICBNYXBUZXN0
VXRpbDo6RXhwZWN0TWFwc1NpemUobWVzc2FnZSwgMSk7Ci0gIEVYUEVDVF9UUlVFKGV4cGVjdF9s
YXN0ID09IHJlbGVhc2VfbGFzdCk7Ci0gIGZvciAoc3RkOjp2ZWN0b3I8Y29uc3QgTWVzc2FnZSo+
OjppdGVyYXRvciBpdCA9IHJlbGVhc2VfbGFzdC5iZWdpbigpOwotICAgICAgIGl0ICE9IHJlbGVh
c2VfbGFzdC5lbmQoKTsgKytpdCkgewotICAgIGRlbGV0ZSAqaXQ7Ci0gIH0KLX0KLQotVEVTVChH
ZW5lcmF0ZWRNYXBGaWVsZFJlZmxlY3Rpb25UZXN0LCBTd2FwRWxlbWVudHMpIHsKLSAgdW5pdHRl
c3Q6OlRlc3RNYXAgbWVzc2FnZTsKLSAgTWFwUmVmbGVjdGlvblRlc3RlciByZWZsZWN0aW9uX3Rl
c3RlcigKLSAgICB1bml0dGVzdDo6VGVzdE1hcDo6ZGVzY3JpcHRvcigpKTsKLQotICBNYXBUZXN0
VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlKTsKLQotICAvLyBHZXQgcG9pbnRlcnMgb2YgbWFw
IGVudHJpZXMgYXQgdGhlaXIgb3JpZ2luYWwgcG9zaXRpb24KLSAgc3RkOjp2ZWN0b3I8Y29uc3Qg
TWVzc2FnZSo+IGVudHJpZXMwID0gTWFwVGVzdFV0aWw6OkdldE1hcEVudHJpZXMobWVzc2FnZSwg
MCk7Ci0gIHN0ZDo6dmVjdG9yPGNvbnN0IE1lc3NhZ2UqPiBlbnRyaWVzMSA9IE1hcFRlc3RVdGls
OjpHZXRNYXBFbnRyaWVzKG1lc3NhZ2UsIDEpOwotCi0gIC8vIFN3YXAgdGhlIGZpcnN0IHRpbWUu
Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLlN3YXBNYXBzVmlhUmVmbGVjdGlvbigmbWVzc2FnZSk7Ci0K
LSAgLy8gR2V0IHBvaW50ZXIgb2YgbWFwIGVudHJ5IGFmdGVyIHN3YXAgb25jZS4KLSAgc3RkOjp2
ZWN0b3I8Y29uc3QgTWVzc2FnZSo+IGVudHJpZXMwX29uY2UgPQotICAgICAgTWFwVGVzdFV0aWw6
OkdldE1hcEVudHJpZXMobWVzc2FnZSwgMCk7Ci0gIHN0ZDo6dmVjdG9yPGNvbnN0IE1lc3NhZ2Uq
PiBlbnRyaWVzMV9vbmNlID0KLSAgICAgIE1hcFRlc3RVdGlsOjpHZXRNYXBFbnRyaWVzKG1lc3Nh
Z2UsIDEpOwotCi0gIC8vIFRlc3QgbWFwIGVudHJpZXMgYXJlIHN3YXBwZWQuCi0gIE1hcFRlc3RV
dGlsOjpFeHBlY3RNYXBzU2l6ZShtZXNzYWdlLCAyKTsKLSAgRVhQRUNUX1RSVUUoZW50cmllczAg
PT0gZW50cmllczFfb25jZSk7Ci0gIEVYUEVDVF9UUlVFKGVudHJpZXMxID09IGVudHJpZXMwX29u
Y2UpOwotCi0gIC8vIFN3YXAgdGhlIHNlY29uZCB0aW1lLgotICByZWZsZWN0aW9uX3Rlc3Rlci5T
d2FwTWFwc1ZpYVJlZmxlY3Rpb24oJm1lc3NhZ2UpOwotCi0gIC8vIEdldCBwb2ludGVyIG9mIG1h
cCBlbnRyeSBhZnRlciBzd2FwIG9uY2UuCi0gIHN0ZDo6dmVjdG9yPGNvbnN0IE1lc3NhZ2UqPiBl
bnRyaWVzMF90d2ljZSA9Ci0gICAgICBNYXBUZXN0VXRpbDo6R2V0TWFwRW50cmllcyhtZXNzYWdl
LCAwKTsKLSAgc3RkOjp2ZWN0b3I8Y29uc3QgTWVzc2FnZSo+IGVudHJpZXMxX3R3aWNlID0KLSAg
ICAgIE1hcFRlc3RVdGlsOjpHZXRNYXBFbnRyaWVzKG1lc3NhZ2UsIDEpOwotCi0gIC8vIFRlc3Qg
bWFwIGVudHJpZXMgYXJlIHN3YXBwZWQgYmFjay4KLSAgTWFwVGVzdFV0aWw6OkV4cGVjdE1hcHNT
aXplKG1lc3NhZ2UsIDIpOwotICBFWFBFQ1RfVFJVRShlbnRyaWVzMCA9PSBlbnRyaWVzMF90d2lj
ZSk7Ci0gIEVYUEVDVF9UUlVFKGVudHJpZXMxID09IGVudHJpZXMxX3R3aWNlKTsKLX0KLQotVEVT
VChHZW5lcmF0ZWRNYXBGaWVsZFJlZmxlY3Rpb25UZXN0LCBNdXRhYmxlVW5rbm93bkZpZWxkcykg
ewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlOwotICBNYXBSZWZsZWN0aW9uVGVzdGVyIHJl
ZmxlY3Rpb25fdGVzdGVyKAotICAgIHVuaXR0ZXN0OjpUZXN0TWFwOjpkZXNjcmlwdG9yKCkpOwot
ICByZWZsZWN0aW9uX3Rlc3Rlci5NdXRhYmxlVW5rbm93bkZpZWxkc09mTWFwRmllbGRzVmlhUmVm
bGVjdGlvbigmbWVzc2FnZSk7Ci19Ci0KLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRSZWZsZWN0aW9u
VGVzdCwgRW1iZWRQcm90bzJNZXNzYWdlKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0TWVzc2FnZU1hcCBt
ZXNzYWdlOwotCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX2ZpZWxkID0KLSAgICAgIHVu
aXR0ZXN0OjpUZXN0TWVzc2FnZU1hcDo6ZGVzY3JpcHRvcigpLT5GaW5kRmllbGRCeU5hbWUoCi0g
ICAgICAgICAgIm1hcF9pbnQzMl9tZXNzYWdlIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
dmFsdWUgPQotICAgICAgbWFwX2ZpZWxkLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1l
KCJ2YWx1ZSIpOwotCi0gIE1lc3NhZ2UqIGVudHJ5X21lc3NhZ2UgPQotICAgICAgbWVzc2FnZS5H
ZXRSZWZsZWN0aW9uKCktPkFkZE1lc3NhZ2UoJm1lc3NhZ2UsIG1hcF9maWVsZCk7Ci0gIEVYUEVD
VF9FUSgKLSAgICAgICZlbnRyeV9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldE1lc3NhZ2Uo
KmVudHJ5X21lc3NhZ2UsIHZhbHVlKSwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTWVz
c2FnZSo+KCZUZXN0QWxsVHlwZXM6OmRlZmF1bHRfaW5zdGFuY2UoKSkpOwotCi0gIE1lc3NhZ2Uq
IHByb3RvMl9tZXNzYWdlID0KLSAgICAgIGVudHJ5X21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+
TXV0YWJsZU1lc3NhZ2UoZW50cnlfbWVzc2FnZSwgdmFsdWUpOwotICBFWFBFQ1RfRVEodW5pdHRl
c3Q6OlRlc3RBbGxUeXBlczo6ZGVzY3JpcHRvcigpLAotICAgICAgICAgICAgcHJvdG8yX21lc3Nh
Z2UtPkdldERlc2NyaXB0b3IoKSk7Ci0gIEFTU0VSVF9FUSgxLCBtZXNzYWdlLm1hcF9pbnQzMl9t
ZXNzYWdlKCkuc2l6ZSgpKTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFJlZmxlY3Rpb25U
ZXN0LCBNZXJnZUZyb21DbGVhck1hcEVudHJ5KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1lc3Nh
Z2U7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX2ZpZWxkID0KLSAgICAgIHVuaXR0ZXN0
OjpUZXN0TWFwOjpkZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgibWFwX2ludDMyX2ludDMy
Iik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioga2V5ID0KLSAgICAgIG1hcF9maWVsZC0+bWVz
c2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogdmFsdWUgPQotICAgICAgbWFwX2ZpZWxkLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxk
QnlOYW1lKCJ2YWx1ZSIpOwotCi0gIE1lc3NhZ2UqIGVudHJ5X21lc3NhZ2UxID0KLSAgICAgIG1l
c3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5BZGRNZXNzYWdlKCZtZXNzYWdlLCBtYXBfZmllbGQpOwot
ICBFWFBFQ1RfRkFMU0UoZW50cnlfbWVzc2FnZTEtPkdldFJlZmxlY3Rpb24oKS0+SGFzRmllbGQo
KmVudHJ5X21lc3NhZ2UxLCBrZXkpKTsKLSAgRVhQRUNUX0ZBTFNFKAotICAgICAgZW50cnlfbWVz
c2FnZTEtPkdldFJlZmxlY3Rpb24oKS0+SGFzRmllbGQoKmVudHJ5X21lc3NhZ2UxLCB2YWx1ZSkp
OwotCi0gIE1lc3NhZ2UqIGVudHJ5X21lc3NhZ2UyID0KLSAgICAgIG1lc3NhZ2UuR2V0UmVmbGVj
dGlvbigpLT5BZGRNZXNzYWdlKCZtZXNzYWdlLCBtYXBfZmllbGQpOwotICBFWFBFQ1RfRkFMU0Uo
ZW50cnlfbWVzc2FnZTItPkdldFJlZmxlY3Rpb24oKS0+SGFzRmllbGQoKmVudHJ5X21lc3NhZ2Uy
LCBrZXkpKTsKLSAgRVhQRUNUX0ZBTFNFKAotICAgICAgZW50cnlfbWVzc2FnZTItPkdldFJlZmxl
Y3Rpb24oKS0+SGFzRmllbGQoKmVudHJ5X21lc3NhZ2UyLCB2YWx1ZSkpOwotCi0gIGVudHJ5X21l
c3NhZ2UxLT5NZXJnZUZyb20oKmVudHJ5X21lc3NhZ2UyKTsKLSAgRVhQRUNUX0ZBTFNFKGVudHJ5
X21lc3NhZ2UxLT5HZXRSZWZsZWN0aW9uKCktPkhhc0ZpZWxkKCplbnRyeV9tZXNzYWdlMSwga2V5
KSk7Ci0gIEVYUEVDVF9GQUxTRSgKLSAgICAgIGVudHJ5X21lc3NhZ2UxLT5HZXRSZWZsZWN0aW9u
KCktPkhhc0ZpZWxkKCplbnRyeV9tZXNzYWdlMSwgdmFsdWUpKTsKLX0KLQotVEVTVChHZW5lcmF0
ZWRNYXBGaWVsZFJlZmxlY3Rpb25UZXN0LCBNYXBFbnRyeUNsZWFyKSB7Ci0gIHVuaXR0ZXN0OjpU
ZXN0TWFwIG1lc3NhZ2U7Ci0gIE1hcFJlZmxlY3Rpb25UZXN0ZXIgcmVmbGVjdGlvbl90ZXN0ZXIo
Ci0gICAgdW5pdHRlc3Q6OlRlc3RNYXA6OmRlc2NyaXB0b3IoKSk7Ci0gIHJlZmxlY3Rpb25fdGVz
dGVyLk11dGFibGVVbmtub3duRmllbGRzT2ZNYXBGaWVsZHNWaWFSZWZsZWN0aW9uKCZtZXNzYWdl
KTsKLX0KLQotVEVTVChHZW5lcmF0ZWRNYXBGaWVsZFJlZmxlY3Rpb25UZXN0LCBQcm90bzJNYXBF
bnRyeUNsZWFyKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0RW51bU1hcCBtZXNzYWdlOwotICBjb25zdCBE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gbWVzc2FnZS5HZXREZXNjcmlwdG9yKCk7Ci0gIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZmllbGRfZGVzY3JpcHRvciA9Ci0gICAgICBkZXNjcmlwdG9yLT5G
aW5kRmllbGRCeU5hbWUoImtub3duX21hcF9maWVsZCIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIHZhbHVlX2Rlc2NyaXB0b3IgPQotICAgICAgZmllbGRfZGVzY3JpcHRvci0+bWVzc2FnZV90
eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgidmFsdWUiKTsKLSAgTWVzc2FnZSogc3ViX21lc3NhZ2Ug
PQotICAgICAgbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCktPkFkZE1lc3NhZ2UoJm1lc3NhZ2UsIGZp
ZWxkX2Rlc2NyaXB0b3IpOwotICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rp
b24oKS0+R2V0RW51bVZhbHVlKCpzdWJfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV9kZXNjcmlwdG9yKSk7Ci19
Ci0KLS8vIE1hcCBSZWZsZWN0aW9uIEFQSSBUZXN0ID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0KLVRFU1QoR2VuZXJhdGVkTWFwRmllbGRSZWZsZWN0aW9uVGVzdCwg
U2V0VmlhTWFwUmVmbGVjdGlvbikgewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlOwotICBN
YXBSZWZsZWN0aW9uVGVzdGVyIHJlZmxlY3Rpb25fdGVzdGVyKAotICAgICAgdW5pdHRlc3Q6OlRl
c3RNYXA6OmRlc2NyaXB0b3IoKSk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLlNldE1hcEZpZWxkc1Zp
YU1hcFJlZmxlY3Rpb24oJm1lc3NhZ2UpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5FeHBlY3RNYXBG
aWVsZHNTZXRWaWFSZWZsZWN0aW9uKG1lc3NhZ2UpOwotICByZWZsZWN0aW9uX3Rlc3Rlci5FeHBl
Y3RNYXBGaWVsZHNTZXRWaWFSZWZsZWN0aW9uSXRlcmF0b3IoJm1lc3NhZ2UpOwotfQotCi0vLyBE
eW5hbWljIE1lc3NhZ2UgVGVzdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLQotY2xhc3MgTWFwRmllbGRJbkR5bmFtaWNNZXNzYWdlVGVzdCA6IHB1YmxpYyB0
ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29s
XzsKLSAgRHluYW1pY01lc3NhZ2VGYWN0b3J5IGZhY3RvcnlfOwotICBjb25zdCBEZXNjcmlwdG9y
KiBtYXBfZGVzY3JpcHRvcl87Ci0gIGNvbnN0IERlc2NyaXB0b3IqIHJlY3Vyc2l2ZV9tYXBfZGVz
Y3JpcHRvcl87Ci0gIGNvbnN0IE1lc3NhZ2UqIG1hcF9wcm90b3R5cGVfOwotCi0gIE1hcEZpZWxk
SW5EeW5hbWljTWVzc2FnZVRlc3QoKQotICAgICAgOiBwb29sXyhEZXNjcmlwdG9yUG9vbDo6Z2Vu
ZXJhdGVkX3Bvb2woKSksIGZhY3RvcnlfKHBvb2xfKSB7fQotCi0gIHZpcnR1YWwgdm9pZCBTZXRV
cCgpIHsKLSAgICBtYXBfZGVzY3JpcHRvcl8gPQotICAgICAgcG9vbF8tPkZpbmRNZXNzYWdlVHlw
ZUJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcCIpOwotICAgIHJlY3Vyc2l2ZV9tYXBf
ZGVzY3JpcHRvcl8gPQotICAgICAgICBwb29sXy0+RmluZE1lc3NhZ2VUeXBlQnlOYW1lKCJwcm90
b2J1Zl91bml0dGVzdC5UZXN0UmVjdXJzaXZlTWFwTWVzc2FnZSIpOwotICAgIEFTU0VSVF9UUlVF
KG1hcF9kZXNjcmlwdG9yXyAhPSBOVUxMKTsKLSAgICBBU1NFUlRfVFJVRShyZWN1cnNpdmVfbWFw
X2Rlc2NyaXB0b3JfICE9IE5VTEwpOwotICAgIG1hcF9wcm90b3R5cGVfID0gZmFjdG9yeV8uR2V0
UHJvdG90eXBlKG1hcF9kZXNjcmlwdG9yXyk7Ci0gIH0KLX07Ci0KLVRFU1RfRihNYXBGaWVsZElu
RHluYW1pY01lc3NhZ2VUZXN0LCBNYXBJbmRlcGVuZGVudE9mZnNldHMpIHsKLSAgLy8gQ2hlY2sg
dGhhdCBhbGwgZmllbGRzIGhhdmUgaW5kZXBlbmRlbnQgb2Zmc2V0cyBieSBzZXR0aW5nIGVhY2gK
LSAgLy8gb25lIHRvIGEgdW5pcXVlIHZhbHVlIHRoZW4gY2hlY2tpbmcgdGhhdCB0aGV5IGFsbCBz
dGlsbCBoYXZlIHRob3NlCi0gIC8vIHVuaXF1ZSB2YWx1ZXMgKGkuZS4gdGhleSBkb24ndCBzdG9t
cCBlYWNoIG90aGVyKS4KLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxNZXNzYWdlPiBt
ZXNzYWdlKG1hcF9wcm90b3R5cGVfLT5OZXcoKSk7Ci0gIE1hcFJlZmxlY3Rpb25UZXN0ZXIgcmVm
bGVjdGlvbl90ZXN0ZXIobWFwX2Rlc2NyaXB0b3JfKTsKLQotICByZWZsZWN0aW9uX3Rlc3Rlci5T
ZXRNYXBGaWVsZHNWaWFSZWZsZWN0aW9uKG1lc3NhZ2UuZ2V0KCkpOwotICByZWZsZWN0aW9uX3Rl
c3Rlci5FeHBlY3RNYXBGaWVsZHNTZXRWaWFSZWZsZWN0aW9uKCptZXNzYWdlKTsKLX0KLQotVEVT
VF9GKE1hcEZpZWxkSW5EeW5hbWljTWVzc2FnZVRlc3QsIER5bmFtaWNNYXBSZWZsZWN0aW9uKSB7
Ci0gIC8vIENoZWNrIHRoYXQgbWFwIGZpZWxkcyB3b3JrIHByb3Blcmx5LgotICBnb29nbGU6OnBy
b3RvYnVmOjpzY29wZWRfcHRyPE1lc3NhZ2U+IG1lc3NhZ2UobWFwX3Byb3RvdHlwZV8tPk5ldygp
KTsKLQotICAvLyBDaGVjayBzZXQgZnVuY3Rpb25zLgotICBNYXBSZWZsZWN0aW9uVGVzdGVyIHJl
ZmxlY3Rpb25fdGVzdGVyKG1hcF9kZXNjcmlwdG9yXyk7Ci0gIHJlZmxlY3Rpb25fdGVzdGVyLlNl
dE1hcEZpZWxkc1ZpYU1hcFJlZmxlY3Rpb24obWVzc2FnZS5nZXQoKSk7Ci0gIHJlZmxlY3Rpb25f
dGVzdGVyLkV4cGVjdE1hcEZpZWxkc1NldFZpYVJlZmxlY3Rpb24oKm1lc3NhZ2UpOwotfQotCi1U
RVNUX0YoTWFwRmllbGRJbkR5bmFtaWNNZXNzYWdlVGVzdCwgTWFwU3BhY2VVc2VkKSB7Ci0gIC8v
IFRlc3QgdGhhdCBTcGFjZVVzZWQoKSB3b3JrcyBwcm9wZXJseQotCi0gIC8vIFNpbmNlIHdlIHNo
YXJlIHRoZSBpbXBsZW1lbnRhdGlvbiB3aXRoIGdlbmVyYXRlZCBtZXNzYWdlcywgd2UgZG9uJ3Qg
bmVlZAotICAvLyB0byB0ZXN0IHZlcnkgbXVjaCBoZXJlLiAgSnVzdCBtYWtlIHN1cmUgaXQgYXBw
ZWFycyB0byBiZSB3b3JraW5nLgotCi0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8TWVz
c2FnZT4gbWVzc2FnZShtYXBfcHJvdG90eXBlXy0+TmV3KCkpOwotICBNYXBSZWZsZWN0aW9uVGVz
dGVyIHJlZmxlY3Rpb25fdGVzdGVyKG1hcF9kZXNjcmlwdG9yXyk7Ci0KLSAgaW50IGluaXRpYWxf
c3BhY2VfdXNlZCA9IG1lc3NhZ2UtPlNwYWNlVXNlZCgpOwotCi0gIHJlZmxlY3Rpb25fdGVzdGVy
LlNldE1hcEZpZWxkc1ZpYVJlZmxlY3Rpb24obWVzc2FnZS5nZXQoKSk7Ci0gIEVYUEVDVF9MVChp
bml0aWFsX3NwYWNlX3VzZWQsIG1lc3NhZ2UtPlNwYWNlVXNlZCgpKTsKLX0KLQotVEVTVF9GKE1h
cEZpZWxkSW5EeW5hbWljTWVzc2FnZVRlc3QsIFJlY3Vyc2l2ZU1hcCkgewotICBUZXN0UmVjdXJz
aXZlTWFwTWVzc2FnZSBmcm9tOwotICAoKmZyb20ubXV0YWJsZV9hKCkpWyIiXTsKLSAgc3RyaW5n
IGRhdGEgPSBmcm9tLlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNj
b3BlZF9wdHI8TWVzc2FnZT4gdG8oCi0gICAgICBmYWN0b3J5Xy5HZXRQcm90b3R5cGUocmVjdXJz
aXZlX21hcF9kZXNjcmlwdG9yXyktPk5ldygpKTsKLSAgQVNTRVJUX1RSVUUodG8tPlBhcnNlRnJv
bVN0cmluZyhkYXRhKSk7Ci19Ci0KLS8vIFJlZmxlY3Rpb25PcHMgVGVzdCA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1URVNUKFJlZmxlY3Rpb25PcHNG
b3JNYXBGaWVsZFRlc3QsIE1hcFNhbml0eUNoZWNrKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1l
c3NhZ2U7Ci0KLSAgTWFwVGVzdFV0aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZSk7Ci0gIE1hcFRl
c3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoUmVmbGVjdGlv
bk9wc0Zvck1hcEZpZWxkVGVzdCwgTWFwQ29weSkgewotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNz
YWdlLCBtZXNzYWdlMjsKLQotICBNYXBUZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlKTsK
LQotICBSZWZsZWN0aW9uT3BzOjpDb3B5KG1lc3NhZ2UsICZtZXNzYWdlMik7Ci0KLSAgTWFwVGVz
dFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlMik7Ci0KLSAgLy8gQ29weWluZyBmcm9t
IHNlbGYgc2hvdWxkIGJlIGEgbm8tb3AuCi0gIFJlZmxlY3Rpb25PcHM6OkNvcHkobWVzc2FnZTIs
ICZtZXNzYWdlMik7Ci0gIE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXQobWVzc2FnZTIp
OwotfQotCi1URVNUKFJlZmxlY3Rpb25PcHNGb3JNYXBGaWVsZFRlc3QsIE1lcmdlTWFwKSB7Ci0g
IC8vIE5vdGU6ICBDb3B5IGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIE1lcmdlKCkgc28gdGVj
aG5pY2FsbHkgdGhlIENvcHkKLSAgLy8gICB0ZXN0IGFscmVhZHkgdGVzdGVkIG1vc3Qgb2YgdGhp
cy4KLQotICB1bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlLCBtZXNzYWdlMjsKLQotICBNYXBUZXN0
VXRpbDo6U2V0TWFwRmllbGRzKCZtZXNzYWdlKTsKLQotICBSZWZsZWN0aW9uT3BzOjpNZXJnZSht
ZXNzYWdlMiwgJm1lc3NhZ2UpOwotCi0gIE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXQo
bWVzc2FnZSk7Ci19Ci0KLVRFU1QoUmVmbGVjdGlvbk9wc0Zvck1hcEZpZWxkVGVzdCwgQ2xlYXJN
YXApIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTsKLQotICBNYXBUZXN0VXRpbDo6U2V0
TWFwRmllbGRzKCZtZXNzYWdlKTsKLQotICBSZWZsZWN0aW9uT3BzOjpDbGVhcigmbWVzc2FnZSk7
Ci0KLSAgTWFwVGVzdFV0aWw6OkV4cGVjdENsZWFyKG1lc3NhZ2UpOwotfQotCi1URVNUKFJlZmxl
Y3Rpb25PcHNGb3JNYXBGaWVsZFRlc3QsIE1hcERpc2NhcmRVbmtub3duRmllbGRzKSB7Ci0gIHVu
aXR0ZXN0OjpUZXN0TWFwIG1lc3NhZ2U7Ci0gIE1hcFRlc3RVdGlsOjpTZXRNYXBGaWVsZHMoJm1l
c3NhZ2UpOwotCi0gIC8vIFNldCBzb21lIHVua25vd24gZmllbGRzIGluIG1lc3NhZ2UuCi0gIG1l
c3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5NdXRhYmxlVW5rbm93bkZpZWxkcygmbWVzc2FnZSktPgot
ICAgICAgQWRkVmFyaW50KDEyMzQ1NiwgNjU0MzIxKTsKLQotICAvLyBEaXNjYXJkIHRoZW0uCi0g
IFJlZmxlY3Rpb25PcHM6OkRpc2NhcmRVbmtub3duRmllbGRzKCZtZXNzYWdlKTsKLSAgTWFwVGVz
dFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlKTsKLQotICBFWFBFQ1RfRVEoMCwgbWVz
c2FnZS5HZXRSZWZsZWN0aW9uKCktPgotICAgICAgR2V0VW5rbm93bkZpZWxkcyhtZXNzYWdlKS5m
aWVsZF9jb3VudCgpKTsKLX0KLQotLy8gV2lyZSBGb3JtYXQgVGVzdCA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRFU1QoV2lyZUZvcm1hdEZvck1h
cEZpZWxkVGVzdCwgUGFyc2VNYXApIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAgc291cmNlLCBkZXN0
OwotICBzdHJpbmcgZGF0YTsKLQotICAvLyBTZXJpYWxpemUgdXNpbmcgdGhlIGdlbmVyYXRlZCBj
b2RlLgotICBNYXBUZXN0VXRpbDo6U2V0TWFwRmllbGRzKCZzb3VyY2UpOwotICBzb3VyY2UuU2Vy
aWFsaXplVG9TdHJpbmcoJmRhdGEpOwotCi0gIC8vIFBhcnNlIHVzaW5nIFdpcmVGb3JtYXQuCi0g
IGlvOjpBcnJheUlucHV0U3RyZWFtIHJhd19pbnB1dChkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OwotICBpbzo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCgmcmF3X2lucHV0KTsKLSAgV2lyZUZvcm1h
dDo6UGFyc2VBbmRNZXJnZVBhcnRpYWwoJmlucHV0LCAmZGVzdCk7Ci0KLSAgLy8gQ2hlY2suCi0g
IE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBGaWVsZHNTZXQoZGVzdCk7Ci19Ci0KLVRFU1QoV2lyZUZv
cm1hdEZvck1hcEZpZWxkVGVzdCwgTWFwQnl0ZVNpemUpIHsKLSAgdW5pdHRlc3Q6OlRlc3RNYXAg
bWVzc2FnZTsKLSAgTWFwVGVzdFV0aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZSk7Ci0KLSAgRVhQ
RUNUX0VRKG1lc3NhZ2UuQnl0ZVNpemUoKSwgV2lyZUZvcm1hdDo6Qnl0ZVNpemUobWVzc2FnZSkp
OwotICBtZXNzYWdlLkNsZWFyKCk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkJ5dGVTaXplKCkp
OwotICBFWFBFQ1RfRVEoMCwgV2lyZUZvcm1hdDo6Qnl0ZVNpemUobWVzc2FnZSkpOwotfQotCi1U
RVNUKFdpcmVGb3JtYXRGb3JNYXBGaWVsZFRlc3QsIFNlcmlhbGl6ZU1hcCkgewotICB1bml0dGVz
dDo6VGVzdE1hcCBtZXNzYWdlOwotICBzdHJpbmcgZ2VuZXJhdGVkX2RhdGE7Ci0gIHN0cmluZyBk
eW5hbWljX2RhdGE7Ci0KLSAgTWFwVGVzdFV0aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZSk7Ci0K
LSAgLy8gU2VyaWFsaXplIHVzaW5nIHRoZSBnZW5lcmF0ZWQgY29kZS4KLSAgewotICAgIG1lc3Nh
Z2UuQnl0ZVNpemUoKTsKLSAgICBpbzo6U3RyaW5nT3V0cHV0U3RyZWFtIHJhd19vdXRwdXQoJmdl
bmVyYXRlZF9kYXRhKTsKLSAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KCZyYXdfb3V0
cHV0KTsKLSAgICBtZXNzYWdlLlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygmb3V0cHV0KTsKLSAg
ICBBU1NFUlRfRkFMU0Uob3V0cHV0LkhhZEVycm9yKCkpOwotICB9Ci0KLSAgLy8gU2VyaWFsaXpl
IHVzaW5nIFdpcmVGb3JtYXQuCi0gIHsKLSAgICBpbzo6U3RyaW5nT3V0cHV0U3RyZWFtIHJhd19v
dXRwdXQoJmR5bmFtaWNfZGF0YSk7Ci0gICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCgm
cmF3X291dHB1dCk7Ci0gICAgaW50IHNpemUgPSBXaXJlRm9ybWF0OjpCeXRlU2l6ZShtZXNzYWdl
KTsKLSAgICBXaXJlRm9ybWF0OjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMobWVzc2FnZSwgc2l6
ZSwgJm91dHB1dCk7Ci0gICAgQVNTRVJUX0ZBTFNFKG91dHB1dC5IYWRFcnJvcigpKTsKLSAgfQot
Ci0gIC8vIFNob3VsZCBiZSB0aGUgc2FtZS4KLSAgLy8gRG9uJ3QgdXNlIEVYUEVDVF9FUSBoZXJl
IGJlY2F1c2Ugd2UncmUgY29tcGFyaW5nIHJhdyBiaW5hcnkgZGF0YSBhbmQKLSAgLy8gd2UgcmVh
bGx5IGRvbid0IHdhbnQgaXQgZHVtcGVkIHRvIHN0ZG91dCBvbiBmYWlsdXJlLgotICBFWFBFQ1Rf
VFJVRShkeW5hbWljX2RhdGEgPT0gZ2VuZXJhdGVkX2RhdGEpOwotfQotCi1URVNUKFdpcmVGb3Jt
YXRGb3JNYXBGaWVsZFRlc3QsIE1hcFBhcnNlSGVscGVycykgewotICBzdHJpbmcgZGF0YTsKLQot
ICB7Ci0gICAgLy8gU2V0IHVwLgotICAgIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWFwIG1lc3Nh
Z2U7Ci0gICAgTWFwVGVzdFV0aWw6OlNldE1hcEZpZWxkcygmbWVzc2FnZSk7Ci0gICAgbWVzc2Fn
ZS5TZXJpYWxpemVUb1N0cmluZygmZGF0YSk7Ci0gIH0KLQotICB7Ci0gICAgLy8gVGVzdCBQYXJz
ZUZyb21TdHJpbmcuCi0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTsKLSAg
ICBFWFBFQ1RfVFJVRShtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gICAgTWFwVGVz
dFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlKTsKLSAgfQotCi0gIHsKLSAgICAvLyBU
ZXN0IFBhcnNlRnJvbUlzdHJlYW0uCi0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNYXAgbWVz
c2FnZTsKLSAgICBzdHJpbmdzdHJlYW0gc3RyZWFtKGRhdGEpOwotICAgIEVYUEVDVF9UUlVFKG1l
c3NhZ2UuUGFyc2VGcm9tSXN0cmVhbSgmc3RyZWFtKSk7Ci0gICAgRVhQRUNUX1RSVUUoc3RyZWFt
LmVvZigpKTsKLSAgICBNYXBUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KG1lc3NhZ2UpOwot
ICB9Ci0KLSAgewotICAgIC8vIFRlc3QgUGFyc2VGcm9tQm91bmRlZFplcm9Db3B5U3RyZWFtLgot
ICAgIHN0cmluZyBkYXRhX3dpdGhfanVuayhkYXRhKTsKLSAgICBkYXRhX3dpdGhfanVuay5hcHBl
bmQoInNvbWUganVuayBvbiB0aGUgZW5kIik7Ci0gICAgaW86OkFycmF5SW5wdXRTdHJlYW0gc3Ry
ZWFtKGRhdGFfd2l0aF9qdW5rLmRhdGEoKSwgZGF0YV93aXRoX2p1bmsuc2l6ZSgpKTsKLSAgICBw
cm90b2J1Zl91bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlOwotICAgIEVYUEVDVF9UUlVFKG1lc3Nh
Z2UuUGFyc2VGcm9tQm91bmRlZFplcm9Db3B5U3RyZWFtKCZzdHJlYW0sIGRhdGEuc2l6ZSgpKSk7
Ci0gICAgTWFwVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldChtZXNzYWdlKTsKLSAgfQotCi0g
IHsKLSAgICAvLyBUZXN0IHRoYXQgUGFyc2VGcm9tQm91bmRlZFplcm9Db3B5U3RyZWFtIGZhaWxz
IChidXQgZG9lc24ndCBjcmFzaCkgaWYKLSAgICAvLyBFT0YgaXMgcmVhY2hlZCBiZWZvcmUgdGhl
IGV4cGVjdGVkIG51bWJlciBvZiBieXRlcy4KLSAgICBpbzo6QXJyYXlJbnB1dFN0cmVhbSBzdHJl
YW0oZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVz
dEFsbFR5cGVzIG1lc3NhZ2U7Ci0gICAgRVhQRUNUX0ZBTFNFKAotICAgICAgbWVzc2FnZS5QYXJz
ZUZyb21Cb3VuZGVkWmVyb0NvcHlTdHJlYW0oJnN0cmVhbSwgZGF0YS5zaXplKCkgKyAxKSk7Ci0g
IH0KLX0KLQotLy8gVGV4dCBGb3JtYXQgVGVzdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0KLVRFU1QoVGV4dEZvcm1hdE1hcFRlc3QsIFNlcmlhbGl6
ZUFuZFBhcnNlKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0TWFwIHNvdXJjZTsKLSAgdW5pdHRlc3Q6OlRl
c3RNYXAgZGVzdDsKLSAgTWFwVGVzdFV0aWw6OlNldE1hcEZpZWxkcygmc291cmNlKTsKLSAgc3Ry
aW5nIG91dHB1dDsKLQotICAvLyBUZXN0IGNvbXBhY3QgQVNDSUkKLSAgVGV4dEZvcm1hdDo6UHJp
bnRlciBwcmludGVyOwotICBwcmludGVyLlByaW50VG9TdHJpbmcoc291cmNlLCAmb3V0cHV0KTsK
LSAgVGV4dEZvcm1hdDo6UGFyc2VyIHBhcnNlcjsKLSAgRVhQRUNUX1RSVUUocGFyc2VyLlBhcnNl
RnJvbVN0cmluZyhvdXRwdXQsICZkZXN0KSk7Ci0gIE1hcFRlc3RVdGlsOjpFeHBlY3RNYXBGaWVs
ZHNTZXQoZGVzdCk7Ci19Ci0KLVRFU1QoVGV4dEZvcm1hdE1hcFRlc3QsIFNvcnRlZCkgewotICB1
bml0dGVzdDo6VGVzdE1hcCBtZXNzYWdlOwotICBNYXBSZWZsZWN0aW9uVGVzdGVyIHRlc3Rlciht
ZXNzYWdlLkdldERlc2NyaXB0b3IoKSk7Ci0gIHRlc3Rlci5TZXRNYXBGaWVsZHNWaWFSZWZsZWN0
aW9uKCZtZXNzYWdlKTsKLQotICBzdHJpbmcgZXhwZWN0ZWRfdGV4dDsKLSAgR09PR0xFX0NIRUNL
X09LKEZpbGU6OkdldENvbnRlbnRzKAotICAgICAgVGVzdFNvdXJjZURpcigpICsKLSAgICAgICAg
ICAiL2dvb2dsZS9wcm90b2J1Zi8iCi0gICAgICAgICAgInRlc3RkYXRhL21hcF90ZXN0X2RhdGEu
dHh0IiwKLSAgICAgICZleHBlY3RlZF90ZXh0LCB0cnVlKSk7Ci0KLSAgRVhQRUNUX0VRKG1lc3Nh
Z2UuRGVidWdTdHJpbmcoKSwgZXhwZWN0ZWRfdGV4dCk7Ci0KLSAgLy8gVGVzdCBhZ2FpbiBvbiB0
aGUgcmV2ZXJzZSBvcmRlci4KLSAgdW5pdHRlc3Q6OlRlc3RNYXAgbWVzc2FnZTI7Ci0gIHRlc3Rl
ci5TZXRNYXBGaWVsZHNWaWFSZWZsZWN0aW9uKCZtZXNzYWdlMik7Ci0gIHRlc3Rlci5Td2FwTWFw
c1ZpYVJlZmxlY3Rpb24oJm1lc3NhZ2UyKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UyLkRlYnVnU3Ry
aW5nKCksIGV4cGVjdGVkX3RleHQpOwotfQotCi0KLS8vIGFyZW5hIHN1cHBvcnQgPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotVEVTVChBcmVuYVRlc3Qs
IFBhcnNpbmdBbmRTZXJpYWxpemluZ05vSGVhcEFsbG9jYXRpb24pIHsKLSAgLy8gQWxsb2NhdGUg
YSBsYXJnZSBpbml0aWFsIGJsb2NrIHRvIGF2b2lkIG1hbGxvY3MgZHVyaW5nIGhvb2tlZCB0ZXN0
LgotICBzdGQ6OnZlY3RvcjxjaGFyPiBhcmVuYV9ibG9jaygxMjggKiAxMDI0KTsKLSAgQXJlbmFP
cHRpb25zIG9wdGlvbnM7Ci0gIG9wdGlvbnMuaW5pdGlhbF9ibG9jayA9ICZhcmVuYV9ibG9ja1sw
XTsKLSAgb3B0aW9ucy5pbml0aWFsX2Jsb2NrX3NpemUgPSBhcmVuYV9ibG9jay5zaXplKCk7Ci0g
IEFyZW5hIGFyZW5hKG9wdGlvbnMpOwotICBzdHJpbmcgZGF0YTsKLSAgZGF0YS5yZXNlcnZlKDEy
OCAqIDEwMjQpOwotCi0gIHsKLSAgICAvLyBUT0RPKHRlYm9yaW5nKTogRW5hYmxlIG5vIGhlYXAg
Y2hlY2sgd2hlbiBBcmVuYVN0cmluZ1B0ciBpcyB1c2VkIGluIG1hcC4KLSAgICAvLyBOb0hlYXBD
aGVja2VyIG5vX2hlYXA7Ci0KLSAgICB1bml0dGVzdDo6VGVzdEFyZW5hTWFwKiBmcm9tID0KLSAg
ICAgICAgQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8dW5pdHRlc3Q6OlRlc3RBcmVuYU1hcD4oJmFyZW5h
KTsKLSAgICBNYXBUZXN0VXRpbDo6U2V0QXJlbmFNYXBGaWVsZHMoZnJvbSk7Ci0gICAgZnJvbS0+
U2VyaWFsaXplVG9TdHJpbmcoJmRhdGEpOwotCi0gICAgdW5pdHRlc3Q6OlRlc3RBcmVuYU1hcCog
dG8gPQotICAgICAgICBBcmVuYTo6Q3JlYXRlTWVzc2FnZTx1bml0dGVzdDo6VGVzdEFyZW5hTWFw
PigmYXJlbmEpOwotICAgIHRvLT5QYXJzZUZyb21TdHJpbmcoZGF0YSk7Ci0gICAgTWFwVGVzdFV0
aWw6OkV4cGVjdEFyZW5hTWFwRmllbGRzU2V0KCp0byk7Ci0gIH0KLX0KLQotLy8gVXNlIHRleHQg
Zm9ybWF0IHBhcnNpbmcgYW5kIHNlcmlhbGl6aW5nIHRvIHRlc3QgcmVmbGVjdGlvbiBhcGkuCi1U
RVNUKEFyZW5hVGVzdCwgUmVsZmVjdGlvbkluVGV4dEZvcm1hdCkgewotICBBcmVuYSBhcmVuYTsK
LSAgc3RyaW5nIGRhdGE7Ci0KLSAgVGV4dEZvcm1hdDo6UHJpbnRlciBwcmludGVyOwotICBUZXh0
Rm9ybWF0OjpQYXJzZXIgcGFyc2VyOwotCi0gIHVuaXR0ZXN0OjpUZXN0QXJlbmFNYXAqIGZyb20g
PQotICAgICAgQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8dW5pdHRlc3Q6OlRlc3RBcmVuYU1hcD4oJmFy
ZW5hKTsKLSAgdW5pdHRlc3Q6OlRlc3RBcmVuYU1hcCogdG8gPQotICAgICAgQXJlbmE6OkNyZWF0
ZU1lc3NhZ2U8dW5pdHRlc3Q6OlRlc3RBcmVuYU1hcD4oJmFyZW5hKTsKLQotICBNYXBUZXN0VXRp
bDo6U2V0QXJlbmFNYXBGaWVsZHMoZnJvbSk7Ci0gIHByaW50ZXIuUHJpbnRUb1N0cmluZygqZnJv
bSwgJmRhdGEpOwotCi0gIEVYUEVDVF9UUlVFKHBhcnNlci5QYXJzZUZyb21TdHJpbmcoZGF0YSwg
dG8pKTsKLSAgTWFwVGVzdFV0aWw6OkV4cGVjdEFyZW5hTWFwRmllbGRzU2V0KCp0byk7Ci19Ci0K
LS8vIE1ha2Ugc3VyZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3Igc3RyaW5nIGluIG1hcCBpcyBk
ZWFsbG9jYXRlZC4KLVRFU1QoQXJlbmFUZXN0LCBTdHJpbmdNYXBOb0xlYWspIHsKLSAgQXJlbmEg
YXJlbmE7Ci0gIHVuaXR0ZXN0OjpUZXN0QXJlbmFNYXAqIG1lc3NhZ2UgPQotICAgICAgQXJlbmE6
OkNyZWF0ZU1lc3NhZ2U8dW5pdHRlc3Q6OlRlc3RBcmVuYU1hcD4oJmFyZW5hKTsKLSAgc3RyaW5n
IGRhdGE7Ci0gIC8vIFN0cmluZyB3aXRoIGxlbmd0aCBsZXNzIHRoYW4gMTYgd2lsbCBub3QgYmUg
YWxsb2NhdGVkIGZyb20gaGVhcC4KLSAgaW50IG9yaWdpbmFsX2NhcGFjaXR5ID0gZGF0YS5jYXBh
Y2l0eSgpOwotICB3aGlsZSAoZGF0YS5jYXBhY2l0eSgpIDw9IG9yaWdpbmFsX2NhcGFjaXR5KSB7
Ci0gICAgZGF0YS5hcHBlbmQoImEiKTsKLSAgfQotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX3N0
cmluZ19zdHJpbmcoKSlbZGF0YV0gPSBkYXRhOwotICAvLyBXZSByZWx5IG9uIGhlYXAgY2hlY2tl
cnMgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrIGZvciB1cy4KLSAgQVNTRVJUX0ZBTFNFKG1lc3NhZ2Ug
PT0gTlVMTCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvbWFwX3Rlc3RfdXRpbC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfdGVzdF91
dGlsLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTA5NDY0N2JiYzNhODliYWY2
NmYwNjUxNThkMzgxNzZjMWMxZDM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfdGVzdF91dGlsLmNjCisrKyAvZGV2
L251bGwKQEAgLTEsMTgwMSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfdGVzdF91dGlsLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF90ZXN0X3V0aWxfaW1wbC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3Nh
Z2UuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi12b2lk
IE1hcFRlc3RVdGlsOjpTZXRNYXBGaWVsZHModW5pdHRlc3Q6OlRlc3RNYXAqIG1lc3NhZ2UpIHsK
LSAgTWFwVGVzdFV0aWxJbXBsOjpTZXRNYXBGaWVsZHM8dW5pdHRlc3Q6Ok1hcEVudW0sIHVuaXR0
ZXN0OjpNQVBfRU5VTV9CQVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0
ZXN0OjpNQVBfRU5VTV9CQVo+KG1lc3NhZ2UpOwotfQotCi12b2lkIE1hcFRlc3RVdGlsOjpTZXRB
cmVuYU1hcEZpZWxkcyh1bml0dGVzdDo6VGVzdEFyZW5hTWFwKiBtZXNzYWdlKSB7Ci0gIE1hcFRl
c3RVdGlsSW1wbDo6U2V0QXJlbmFNYXBGaWVsZHM8dW5pdHRlc3Q6Ok1hcEVudW0sIHVuaXR0ZXN0
OjpNQVBfRU5VTV9CQVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p
dHRlc3Q6Ok1BUF9FTlVNX0JBWj4obWVzc2FnZSk7Ci19Ci0KLXZvaWQgTWFwVGVzdFV0aWw6OlNl
dE1hcEZpZWxkc0luaXRpYWxpemVkKHVuaXR0ZXN0OjpUZXN0TWFwKiBtZXNzYWdlKSB7Ci0gIE1h
cFRlc3RVdGlsSW1wbDo6U2V0TWFwRmllbGRzSW5pdGlhbGl6ZWQobWVzc2FnZSk7Ci19Ci0KLXZv
aWQgTWFwVGVzdFV0aWw6Ok1vZGlmeU1hcEZpZWxkcyh1bml0dGVzdDo6VGVzdE1hcCogbWVzc2Fn
ZSkgewotICBNYXBUZXN0VXRpbEltcGw6Ok1vZGlmeU1hcEZpZWxkczx1bml0dGVzdDo6TWFwRW51
bSwgdW5pdHRlc3Q6Ok1BUF9FTlVNX0ZPTz4oCi0gICAgICBtZXNzYWdlKTsKLX0KLQotdm9pZCBN
YXBUZXN0VXRpbDo6RXhwZWN0Q2xlYXIoY29uc3QgdW5pdHRlc3Q6OlRlc3RNYXAmIG1lc3NhZ2Up
IHsKLSAgTWFwVGVzdFV0aWxJbXBsOjpFeHBlY3RDbGVhcihtZXNzYWdlKTsKLX0KLQotdm9pZCBN
YXBUZXN0VXRpbDo6RXhwZWN0TWFwRmllbGRzU2V0KGNvbnN0IHVuaXR0ZXN0OjpUZXN0TWFwJiBt
ZXNzYWdlKSB7Ci0gIE1hcFRlc3RVdGlsSW1wbDo6RXhwZWN0TWFwRmllbGRzU2V0PHVuaXR0ZXN0
OjpNYXBFbnVtLCB1bml0dGVzdDo6TUFQX0VOVU1fQkFSLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bml0dGVzdDo6TUFQX0VOVU1fQkFaPihtZXNzYWdlKTsKLX0KLQot
dm9pZCBNYXBUZXN0VXRpbDo6RXhwZWN0QXJlbmFNYXBGaWVsZHNTZXQoCi0gICAgY29uc3QgdW5p
dHRlc3Q6OlRlc3RBcmVuYU1hcCYgbWVzc2FnZSkgewotICBNYXBUZXN0VXRpbEltcGw6OkV4cGVj
dEFyZW5hTWFwRmllbGRzU2V0PAotICAgICAgdW5pdHRlc3Q6Ok1hcEVudW0sIHVuaXR0ZXN0OjpN
QVBfRU5VTV9CQVIsIHVuaXR0ZXN0OjpNQVBfRU5VTV9CQVo+KAotICAgICAgbWVzc2FnZSk7Ci19
Ci0KLXZvaWQgTWFwVGVzdFV0aWw6OkV4cGVjdE1hcEZpZWxkc1NldEluaXRpYWxpemVkKAotICAg
IGNvbnN0IHVuaXR0ZXN0OjpUZXN0TWFwJiBtZXNzYWdlKSB7Ci0gIE1hcFRlc3RVdGlsSW1wbDo6
RXhwZWN0TWFwRmllbGRzU2V0SW5pdGlhbGl6ZWQ8dW5pdHRlc3Q6Ok1hcEVudW0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Q6Ok1BUF9F
TlVNX0ZPTz4oCi0gICAgICBtZXNzYWdlKTsKLX0KLQotdm9pZCBNYXBUZXN0VXRpbDo6RXhwZWN0
TWFwRmllbGRzTW9kaWZpZWQoCi0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RNYXAmIG1lc3NhZ2Up
IHsKLSAgTWFwVGVzdFV0aWxJbXBsOjpFeHBlY3RNYXBGaWVsZHNNb2RpZmllZDwKLSAgICAgIHVu
aXR0ZXN0OjpNYXBFbnVtLCB1bml0dGVzdDo6TUFQX0VOVU1fQkFSLCB1bml0dGVzdDo6TUFQX0VO
VU1fRk9PPigKLSAgICAgIG1lc3NhZ2UpOwotfQotCi12b2lkIE1hcFRlc3RVdGlsOjpFeHBlY3RN
YXBzU2l6ZSgKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdE1hcCYgbWVzc2FnZSwgaW50IHNpemUp
IHsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IG1lc3NhZ2UuR2V0RGVzY3JpcHRv
cigpOwotCi0gIEVYUEVDVF9FUShzaXplLCBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKS0+RmllbGRT
aXplKAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgibWFwX2ludDMy
X2ludDMyIikpKTsKLSAgRVhQRUNUX0VRKHNpemUsIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5G
aWVsZFNpemUoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBf
aW50NjRfaW50NjQiKSkpOwotICBFWFBFQ1RfRVEoc2l6ZSwgbWVzc2FnZS5HZXRSZWZsZWN0aW9u
KCktPkZpZWxkU2l6ZSgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUo
Im1hcF91aW50MzJfdWludDMyIikpKTsKLSAgRVhQRUNUX0VRKHNpemUsIG1lc3NhZ2UuR2V0UmVm
bGVjdGlvbigpLT5GaWVsZFNpemUoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxk
QnlOYW1lKCJtYXBfdWludDY0X3VpbnQ2NCIpKSk7Ci0gIEVYUEVDVF9FUShzaXplLCBtZXNzYWdl
LkdldFJlZmxlY3Rpb24oKS0+RmllbGRTaXplKAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZp
bmRGaWVsZEJ5TmFtZSgibWFwX3NpbnQzMl9zaW50MzIiKSkpOwotICBFWFBFQ1RfRVEoc2l6ZSwg
bWVzc2FnZS5HZXRSZWZsZWN0aW9uKCktPkZpZWxkU2l6ZSgKLSAgICBtZXNzYWdlLCBkZXNjcmlw
dG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9zaW50NjRfc2ludDY0IikpKTsKLSAgRVhQRUNUX0VR
KHNpemUsIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5GaWVsZFNpemUoCi0gICAgbWVzc2FnZSwg
ZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfZml4ZWQzMl9maXhlZDMyIikpKTsKLSAg
RVhQRUNUX0VRKHNpemUsIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5GaWVsZFNpemUoCi0gICAg
bWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfZml4ZWQ2NF9maXhlZDY0
IikpKTsKLSAgRVhQRUNUX0VRKHNpemUsIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5GaWVsZFNp
emUoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfc2ZpeGVk
MzJfc2ZpeGVkMzIiKSkpOwotICBFWFBFQ1RfRVEoc2l6ZSwgbWVzc2FnZS5HZXRSZWZsZWN0aW9u
KCktPkZpZWxkU2l6ZSgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUo
Im1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCIpKSk7Ci0gIEVYUEVDVF9FUShzaXplLCBtZXNzYWdlLkdl
dFJlZmxlY3Rpb24oKS0+RmllbGRTaXplKAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRG
aWVsZEJ5TmFtZSgibWFwX2ludDMyX2Zsb2F0IikpKTsKLSAgRVhQRUNUX0VRKHNpemUsIG1lc3Nh
Z2UuR2V0UmVmbGVjdGlvbigpLT5GaWVsZFNpemUoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+
RmluZEZpZWxkQnlOYW1lKCJtYXBfaW50MzJfZG91YmxlIikpKTsKLSAgRVhQRUNUX0VRKHNpemUs
IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5GaWVsZFNpemUoCi0gICAgbWVzc2FnZSwgZGVzY3Jp
cHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfYm9vbF9ib29sIikpKTsKLSAgRVhQRUNUX0VRKHNp
emUsIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5GaWVsZFNpemUoCi0gICAgbWVzc2FnZSwgZGVz
Y3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfc3RyaW5nX3N0cmluZyIpKSk7Ci0gIEVYUEVD
VF9FUShzaXplLCBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKS0+RmllbGRTaXplKAotICAgIG1lc3Nh
Z2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgibWFwX2ludDMyX2J5dGVzIikpKTsKLSAg
RVhQRUNUX0VRKHNpemUsIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5GaWVsZFNpemUoCi0gICAg
bWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfaW50MzJfZm9yZWlnbl9t
ZXNzYWdlIikpKTsKLX0KLQotc3RkOjp2ZWN0b3I8Y29uc3QgTWVzc2FnZSo+IE1hcFRlc3RVdGls
OjpHZXRNYXBFbnRyaWVzKAotICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0TWFwJiBtZXNzYWdlLCBp
bnQgaW5kZXgpIHsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IG1lc3NhZ2UuR2V0
RGVzY3JpcHRvcigpOwotICBzdGQ6OnZlY3Rvcjxjb25zdCBNZXNzYWdlKj4gcmVzdWx0OwotCi0g
IHJlc3VsdC5wdXNoX2JhY2soJm1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5HZXRSZXBlYXRlZE1l
c3NhZ2UoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfaW50
MzJfaW50MzIiKSwgaW5kZXgpKTsKLSAgcmVzdWx0LnB1c2hfYmFjaygmbWVzc2FnZS5HZXRSZWZs
ZWN0aW9uKCktPkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5G
aW5kRmllbGRCeU5hbWUoIm1hcF9pbnQ2NF9pbnQ2NCIpLCBpbmRleCkpOwotICByZXN1bHQucHVz
aF9iYWNrKCZtZXNzYWdlLkdldFJlZmxlY3Rpb24oKS0+R2V0UmVwZWF0ZWRNZXNzYWdlKAotICAg
IG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgibWFwX3VpbnQzMl91aW50MzIi
KSwgaW5kZXgpKTsKLSAgcmVzdWx0LnB1c2hfYmFjaygmbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCkt
PkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRC
eU5hbWUoIm1hcF91aW50NjRfdWludDY0IiksIGluZGV4KSk7Ci0gIHJlc3VsdC5wdXNoX2JhY2so
Jm1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5HZXRSZXBlYXRlZE1lc3NhZ2UoCi0gICAgbWVzc2Fn
ZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfc2ludDMyX3NpbnQzMiIpLCBpbmRl
eCkpOwotICByZXN1bHQucHVzaF9iYWNrKCZtZXNzYWdlLkdldFJlZmxlY3Rpb24oKS0+R2V0UmVw
ZWF0ZWRNZXNzYWdlKAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgi
bWFwX3NpbnQ2NF9zaW50NjQiKSwgaW5kZXgpKTsKLSAgcmVzdWx0LnB1c2hfYmFjaygmbWVzc2Fn
ZS5HZXRSZWZsZWN0aW9uKCktPkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICBtZXNzYWdlLCBkZXNj
cmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9maXhlZDMyX2ZpeGVkMzIiKSwgaW5kZXgpKTsK
LSAgcmVzdWx0LnB1c2hfYmFjaygmbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCktPkdldFJlcGVhdGVk
TWVzc2FnZSgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9m
aXhlZDY0X2ZpeGVkNjQiKSwgaW5kZXgpKTsKLSAgcmVzdWx0LnB1c2hfYmFjaygmbWVzc2FnZS5H
ZXRSZWZsZWN0aW9uKCktPkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICBtZXNzYWdlLCBkZXNjcmlw
dG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9zZml4ZWQzMl9zZml4ZWQzMiIpLCBpbmRleCkpOwot
ICByZXN1bHQucHVzaF9iYWNrKCZtZXNzYWdlLkdldFJlZmxlY3Rpb24oKS0+R2V0UmVwZWF0ZWRN
ZXNzYWdlKAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgibWFwX3Nm
aXhlZDY0X3NmaXhlZDY0IiksIGluZGV4KSk7Ci0gIHJlc3VsdC5wdXNoX2JhY2soJm1lc3NhZ2Uu
R2V0UmVmbGVjdGlvbigpLT5HZXRSZXBlYXRlZE1lc3NhZ2UoCi0gICAgbWVzc2FnZSwgZGVzY3Jp
cHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfaW50MzJfZmxvYXQiKSwgaW5kZXgpKTsKLSAgcmVz
dWx0LnB1c2hfYmFjaygmbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCktPkdldFJlcGVhdGVkTWVzc2Fn
ZSgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9pbnQzMl9k
b3VibGUiKSwgaW5kZXgpKTsKLSAgcmVzdWx0LnB1c2hfYmFjaygmbWVzc2FnZS5HZXRSZWZsZWN0
aW9uKCktPkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5k
RmllbGRCeU5hbWUoIm1hcF9ib29sX2Jvb2wiKSwgaW5kZXgpKTsKLSAgcmVzdWx0LnB1c2hfYmFj
aygmbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCktPkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICBtZXNz
YWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9zdHJpbmdfc3RyaW5nIiksIGlu
ZGV4KSk7Ci0gIHJlc3VsdC5wdXNoX2JhY2soJm1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5HZXRS
ZXBlYXRlZE1lc3NhZ2UoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1l
KCJtYXBfaW50MzJfYnl0ZXMiKSwgaW5kZXgpKTsKLSAgcmVzdWx0LnB1c2hfYmFjaygmbWVzc2Fn
ZS5HZXRSZWZsZWN0aW9uKCktPkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICBtZXNzYWdlLCBkZXNj
cmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9pbnQzMl9lbnVtIiksIGluZGV4KSk7Ci0gIHJl
c3VsdC5wdXNoX2JhY2soJm1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLT5HZXRSZXBlYXRlZE1lc3Nh
Z2UoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfaW50MzJf
Zm9yZWlnbl9tZXNzYWdlIiksIGluZGV4KSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3Rk
Ojp2ZWN0b3I8Y29uc3QgTWVzc2FnZSo+IE1hcFRlc3RVdGlsOjpHZXRNYXBFbnRyaWVzRnJvbVJl
bGVhc2UoCi0gICAgdW5pdHRlc3Q6OlRlc3RNYXAqIG1lc3NhZ2UpIHsKLSAgY29uc3QgRGVzY3Jp
cHRvciogZGVzY3JpcHRvciA9IG1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKTsKLSAgc3RkOjp2ZWN0
b3I8Y29uc3QgTWVzc2FnZSo+IHJlc3VsdDsKLQotICByZXN1bHQucHVzaF9iYWNrKG1lc3NhZ2Ut
PkdldFJlZmxlY3Rpb24oKS0+UmVsZWFzZUxhc3QoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+
RmluZEZpZWxkQnlOYW1lKCJtYXBfaW50MzJfaW50MzIiKSkpOwotICByZXN1bHQucHVzaF9iYWNr
KG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+UmVsZWFzZUxhc3QoCi0gICAgbWVzc2FnZSwgZGVz
Y3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfaW50NjRfaW50NjQiKSkpOwotICByZXN1bHQu
cHVzaF9iYWNrKG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+UmVsZWFzZUxhc3QoCi0gICAgbWVz
c2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfdWludDMyX3VpbnQzMiIpKSk7
Ci0gIHJlc3VsdC5wdXNoX2JhY2sobWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5SZWxlYXNlTGFz
dCgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF91aW50NjRf
dWludDY0IikpKTsKLSAgcmVzdWx0LnB1c2hfYmFjayhtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkt
PlJlbGVhc2VMYXN0KAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgi
bWFwX3NpbnQzMl9zaW50MzIiKSkpOwotICByZXN1bHQucHVzaF9iYWNrKG1lc3NhZ2UtPkdldFJl
ZmxlY3Rpb24oKS0+UmVsZWFzZUxhc3QoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZp
ZWxkQnlOYW1lKCJtYXBfc2ludDY0X3NpbnQ2NCIpKSk7Ci0gIHJlc3VsdC5wdXNoX2JhY2sobWVz
c2FnZS0+R2V0UmVmbGVjdGlvbigpLT5SZWxlYXNlTGFzdCgKLSAgICBtZXNzYWdlLCBkZXNjcmlw
dG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9maXhlZDMyX2ZpeGVkMzIiKSkpOwotICByZXN1bHQu
cHVzaF9iYWNrKG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+UmVsZWFzZUxhc3QoCi0gICAgbWVz
c2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfZml4ZWQ2NF9maXhlZDY0Iikp
KTsKLSAgcmVzdWx0LnB1c2hfYmFjayhtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlJlbGVhc2VM
YXN0KAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgibWFwX3NmaXhl
ZDMyX3NmaXhlZDMyIikpKTsKLSAgcmVzdWx0LnB1c2hfYmFjayhtZXNzYWdlLT5HZXRSZWZsZWN0
aW9uKCktPlJlbGVhc2VMYXN0KAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5
TmFtZSgibWFwX3NmaXhlZDY0X3NmaXhlZDY0IikpKTsKLSAgcmVzdWx0LnB1c2hfYmFjayhtZXNz
YWdlLT5HZXRSZWZsZWN0aW9uKCktPlJlbGVhc2VMYXN0KAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0
b3ItPkZpbmRGaWVsZEJ5TmFtZSgibWFwX2ludDMyX2Zsb2F0IikpKTsKLSAgcmVzdWx0LnB1c2hf
YmFjayhtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlJlbGVhc2VMYXN0KAotICAgIG1lc3NhZ2Us
IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgibWFwX2ludDMyX2RvdWJsZSIpKSk7Ci0gIHJl
c3VsdC5wdXNoX2JhY2sobWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5SZWxlYXNlTGFzdCgKLSAg
ICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoIm1hcF9ib29sX2Jvb2wiKSkp
OwotICByZXN1bHQucHVzaF9iYWNrKG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+UmVsZWFzZUxh
c3QoCi0gICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJtYXBfc3RyaW5n
X3N0cmluZyIpKSk7Ci0gIHJlc3VsdC5wdXNoX2JhY2sobWVzc2FnZS0+R2V0UmVmbGVjdGlvbigp
LT5SZWxlYXNlTGFzdCgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUo
Im1hcF9pbnQzMl9ieXRlcyIpKSk7Ci0gIHJlc3VsdC5wdXNoX2JhY2sobWVzc2FnZS0+R2V0UmVm
bGVjdGlvbigpLT5SZWxlYXNlTGFzdCgKLSAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmll
bGRCeU5hbWUoIm1hcF9pbnQzMl9lbnVtIikpKTsKLSAgcmVzdWx0LnB1c2hfYmFjayhtZXNzYWdl
LT5HZXRSZWZsZWN0aW9uKCktPlJlbGVhc2VMYXN0KAotICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3It
PkZpbmRGaWVsZEJ5TmFtZSgibWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSIpKSk7Ci0KLSAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotTWFwUmVmbGVjdGlvblRlc3Rlcjo6TWFwUmVmbGVjdGlvblRlc3Rl
cigKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBiYXNlX2Rlc2NyaXB0b3IpCi0gIDogYmFzZV9kZXNj
cmlwdG9yXyhiYXNlX2Rlc2NyaXB0b3IpIHsKLSAgY29uc3QgRGVzY3JpcHRvclBvb2wqIHBvb2wg
PSBiYXNlX2Rlc2NyaXB0b3ItPmZpbGUoKS0+cG9vbCgpOwotCi0gIG1hcF9lbnVtX2Zvb18gPSBw
b29sLT5GaW5kRW51bVZhbHVlQnlOYW1lKCJwcm90b2J1Zl91bml0dGVzdC5NQVBfRU5VTV9GT08i
KTsKLSAgbWFwX2VudW1fYmFyXyA9IHBvb2wtPkZpbmRFbnVtVmFsdWVCeU5hbWUoInByb3RvYnVm
X3VuaXR0ZXN0Lk1BUF9FTlVNX0JBUiIpOwotICBtYXBfZW51bV9iYXpfID0gcG9vbC0+RmluZEVu
dW1WYWx1ZUJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3QuTUFQX0VOVU1fQkFaIik7Ci0KLSAgZm9y
ZWlnbl9jXyA9IHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgKLSAgICAgICJwcm90b2J1Zl91bml0dGVz
dC5Gb3JlaWduTWVzc2FnZS5jIik7Ci0gIG1hcF9pbnQzMl9pbnQzMl9rZXlfID0gcG9vbC0+Rmlu
ZEZpZWxkQnlOYW1lKAotICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwSW50MzJJ
bnQzMkVudHJ5LmtleSIpOwotICBtYXBfaW50MzJfaW50MzJfdmFsXyA9IHBvb2wtPkZpbmRGaWVs
ZEJ5TmFtZSgKLSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcEludDMySW50MzJF
bnRyeS52YWx1ZSIpOwotICBtYXBfaW50NjRfaW50NjRfa2V5XyA9IHBvb2wtPkZpbmRGaWVsZEJ5
TmFtZSgKLSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcEludDY0SW50NjRFbnRy
eS5rZXkiKTsKLSAgbWFwX2ludDY0X2ludDY0X3ZhbF8gPSBwb29sLT5GaW5kRmllbGRCeU5hbWUo
Ci0gICAgICAicHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBJbnQ2NEludDY0RW50cnkudmFs
dWUiKTsKLSAgbWFwX3VpbnQzMl91aW50MzJfa2V5XyA9IHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgK
LSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcFVpbnQzMlVpbnQzMkVudHJ5Lmtl
eSIpOwotICBtYXBfdWludDMyX3VpbnQzMl92YWxfID0gcG9vbC0+RmluZEZpZWxkQnlOYW1lKAot
ICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwVWludDMyVWludDMyRW50cnkudmFs
dWUiKTsKLSAgbWFwX3VpbnQ2NF91aW50NjRfa2V5XyA9IHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgK
LSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcFVpbnQ2NFVpbnQ2NEVudHJ5Lmtl
eSIpOwotICBtYXBfdWludDY0X3VpbnQ2NF92YWxfID0gcG9vbC0+RmluZEZpZWxkQnlOYW1lKAot
ICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwVWludDY0VWludDY0RW50cnkudmFs
dWUiKTsKLSAgbWFwX3NpbnQzMl9zaW50MzJfa2V5XyA9IHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgK
LSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcFNpbnQzMlNpbnQzMkVudHJ5Lmtl
eSIpOwotICBtYXBfc2ludDMyX3NpbnQzMl92YWxfID0gcG9vbC0+RmluZEZpZWxkQnlOYW1lKAot
ICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwU2ludDMyU2ludDMyRW50cnkudmFs
dWUiKTsKLSAgbWFwX3NpbnQ2NF9zaW50NjRfa2V5XyA9IHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgK
LSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcFNpbnQ2NFNpbnQ2NEVudHJ5Lmtl
eSIpOwotICBtYXBfc2ludDY0X3NpbnQ2NF92YWxfID0gcG9vbC0+RmluZEZpZWxkQnlOYW1lKAot
ICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwU2ludDY0U2ludDY0RW50cnkudmFs
dWUiKTsKLSAgbWFwX2ZpeGVkMzJfZml4ZWQzMl9rZXlfID0gcG9vbC0+RmluZEZpZWxkQnlOYW1l
KAotICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwRml4ZWQzMkZpeGVkMzJFbnRy
eS5rZXkiKTsKLSAgbWFwX2ZpeGVkMzJfZml4ZWQzMl92YWxfID0gcG9vbC0+RmluZEZpZWxkQnlO
YW1lKAotICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwRml4ZWQzMkZpeGVkMzJF
bnRyeS52YWx1ZSIpOwotICBtYXBfZml4ZWQ2NF9maXhlZDY0X2tleV8gPSBwb29sLT5GaW5kRmll
bGRCeU5hbWUoCi0gICAgICAicHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBGaXhlZDY0Rml4
ZWQ2NEVudHJ5LmtleSIpOwotICBtYXBfZml4ZWQ2NF9maXhlZDY0X3ZhbF8gPSBwb29sLT5GaW5k
RmllbGRCeU5hbWUoCi0gICAgICAicHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBGaXhlZDY0
Rml4ZWQ2NEVudHJ5LnZhbHVlIik7Ci0gIG1hcF9zZml4ZWQzMl9zZml4ZWQzMl9rZXlfID0gcG9v
bC0+RmluZEZpZWxkQnlOYW1lKAotICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFw
U2ZpeGVkMzJTZml4ZWQzMkVudHJ5LmtleSIpOwotICBtYXBfc2ZpeGVkMzJfc2ZpeGVkMzJfdmFs
XyA9IHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgKLSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0
TWFwLk1hcFNmaXhlZDMyU2ZpeGVkMzJFbnRyeS52YWx1ZSIpOwotICBtYXBfc2ZpeGVkNjRfc2Zp
eGVkNjRfa2V5XyA9IHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgKLSAgICAgICJwcm90b2J1Zl91bml0
dGVzdC5UZXN0TWFwLk1hcFNmaXhlZDY0U2ZpeGVkNjRFbnRyeS5rZXkiKTsKLSAgbWFwX3NmaXhl
ZDY0X3NmaXhlZDY0X3ZhbF8gPSBwb29sLT5GaW5kRmllbGRCeU5hbWUoCi0gICAgICAicHJvdG9i
dWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBTZml4ZWQ2NFNmaXhlZDY0RW50cnkudmFsdWUiKTsKLSAg
bWFwX2ludDMyX2Zsb2F0X2tleV8gPSBwb29sLT5GaW5kRmllbGRCeU5hbWUoCi0gICAgICAicHJv
dG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBJbnQzMkZsb2F0RW50cnkua2V5Iik7Ci0gIG1hcF9p
bnQzMl9mbG9hdF92YWxfID0gcG9vbC0+RmluZEZpZWxkQnlOYW1lKAotICAgICAgInByb3RvYnVm
X3VuaXR0ZXN0LlRlc3RNYXAuTWFwSW50MzJGbG9hdEVudHJ5LnZhbHVlIik7Ci0gIG1hcF9pbnQz
Ml9kb3VibGVfa2V5XyA9IHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgKLSAgICAgICJwcm90b2J1Zl91
bml0dGVzdC5UZXN0TWFwLk1hcEludDMyRG91YmxlRW50cnkua2V5Iik7Ci0gIG1hcF9pbnQzMl9k
b3VibGVfdmFsXyA9IHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgKLSAgICAgICJwcm90b2J1Zl91bml0
dGVzdC5UZXN0TWFwLk1hcEludDMyRG91YmxlRW50cnkudmFsdWUiKTsKLSAgbWFwX2Jvb2xfYm9v
bF9rZXlfID0gcG9vbC0+RmluZEZpZWxkQnlOYW1lKAotICAgICAgInByb3RvYnVmX3VuaXR0ZXN0
LlRlc3RNYXAuTWFwQm9vbEJvb2xFbnRyeS5rZXkiKTsKLSAgbWFwX2Jvb2xfYm9vbF92YWxfID0g
cG9vbC0+RmluZEZpZWxkQnlOYW1lKAotICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAu
TWFwQm9vbEJvb2xFbnRyeS52YWx1ZSIpOwotICBtYXBfc3RyaW5nX3N0cmluZ19rZXlfID0gcG9v
bC0+RmluZEZpZWxkQnlOYW1lKAotICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFw
U3RyaW5nU3RyaW5nRW50cnkua2V5Iik7Ci0gIG1hcF9zdHJpbmdfc3RyaW5nX3ZhbF8gPSBwb29s
LT5GaW5kRmllbGRCeU5hbWUoCi0gICAgICAicHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBT
dHJpbmdTdHJpbmdFbnRyeS52YWx1ZSIpOwotICBtYXBfaW50MzJfYnl0ZXNfa2V5XyA9IHBvb2wt
PkZpbmRGaWVsZEJ5TmFtZSgKLSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcElu
dDMyQnl0ZXNFbnRyeS5rZXkiKTsKLSAgbWFwX2ludDMyX2J5dGVzX3ZhbF8gPSBwb29sLT5GaW5k
RmllbGRCeU5hbWUoCi0gICAgICAicHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBJbnQzMkJ5
dGVzRW50cnkudmFsdWUiKTsKLSAgbWFwX2ludDMyX2VudW1fa2V5XyA9IHBvb2wtPkZpbmRGaWVs
ZEJ5TmFtZSgKLSAgICAgICJwcm90b2J1Zl91bml0dGVzdC5UZXN0TWFwLk1hcEludDMyRW51bUVu
dHJ5LmtleSIpOwotICBtYXBfaW50MzJfZW51bV92YWxfID0gcG9vbC0+RmluZEZpZWxkQnlOYW1l
KAotICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwSW50MzJFbnVtRW50cnkudmFs
dWUiKTsKLSAgbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZV9rZXlfID0gcG9vbC0+RmluZEZpZWxk
QnlOYW1lKAotICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNYXAuTWFwSW50MzJGb3JlaWdu
TWVzc2FnZUVudHJ5LmtleSIpOwotICBtYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlX3ZhbF8gPSBw
b29sLT5GaW5kRmllbGRCeU5hbWUoCi0gICAgICAicHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5N
YXBJbnQzMkZvcmVpZ25NZXNzYWdlRW50cnkudmFsdWUiKTsKLQotICBFWFBFQ1RfRkFMU0UobWFw
X2VudW1fZm9vXyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9lbnVtX2Jhcl8gPT0gTlVM
TCk7Ci0gIEVYUEVDVF9GQUxTRShtYXBfZW51bV9iYXpfID09IE5VTEwpOwotICBFWFBFQ1RfRkFM
U0UobWFwX2ludDMyX2ludDMyX2tleV8gPT0gTlVMTCk7Ci0gIEVYUEVDVF9GQUxTRShtYXBfaW50
MzJfaW50MzJfdmFsXyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9pbnQ2NF9pbnQ2NF9r
ZXlfID09IE5VTEwpOwotICBFWFBFQ1RfRkFMU0UobWFwX2ludDY0X2ludDY0X3ZhbF8gPT0gTlVM
TCk7Ci0gIEVYUEVDVF9GQUxTRShtYXBfdWludDMyX3VpbnQzMl9rZXlfID09IE5VTEwpOwotICBF
WFBFQ1RfRkFMU0UobWFwX3VpbnQzMl91aW50MzJfdmFsXyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZB
TFNFKG1hcF91aW50NjRfdWludDY0X2tleV8gPT0gTlVMTCk7Ci0gIEVYUEVDVF9GQUxTRShtYXBf
dWludDY0X3VpbnQ2NF92YWxfID09IE5VTEwpOwotICBFWFBFQ1RfRkFMU0UobWFwX3NpbnQzMl9z
aW50MzJfa2V5XyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9zaW50MzJfc2ludDMyX3Zh
bF8gPT0gTlVMTCk7Ci0gIEVYUEVDVF9GQUxTRShtYXBfc2ludDY0X3NpbnQ2NF9rZXlfID09IE5V
TEwpOwotICBFWFBFQ1RfRkFMU0UobWFwX3NpbnQ2NF9zaW50NjRfdmFsXyA9PSBOVUxMKTsKLSAg
RVhQRUNUX0ZBTFNFKG1hcF9maXhlZDMyX2ZpeGVkMzJfa2V5XyA9PSBOVUxMKTsKLSAgRVhQRUNU
X0ZBTFNFKG1hcF9maXhlZDMyX2ZpeGVkMzJfdmFsXyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNF
KG1hcF9maXhlZDY0X2ZpeGVkNjRfa2V5XyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9m
aXhlZDY0X2ZpeGVkNjRfdmFsXyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9zZml4ZWQz
Ml9zZml4ZWQzMl9rZXlfID09IE5VTEwpOwotICBFWFBFQ1RfRkFMU0UobWFwX3NmaXhlZDMyX3Nm
aXhlZDMyX3ZhbF8gPT0gTlVMTCk7Ci0gIEVYUEVDVF9GQUxTRShtYXBfc2ZpeGVkNjRfc2ZpeGVk
NjRfa2V5XyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9zZml4ZWQ2NF9zZml4ZWQ2NF92
YWxfID09IE5VTEwpOwotICBFWFBFQ1RfRkFMU0UobWFwX2ludDMyX2Zsb2F0X2tleV8gPT0gTlVM
TCk7Ci0gIEVYUEVDVF9GQUxTRShtYXBfaW50MzJfZmxvYXRfdmFsXyA9PSBOVUxMKTsKLSAgRVhQ
RUNUX0ZBTFNFKG1hcF9pbnQzMl9kb3VibGVfa2V5XyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNF
KG1hcF9pbnQzMl9kb3VibGVfdmFsXyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9ib29s
X2Jvb2xfa2V5XyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9ib29sX2Jvb2xfdmFsXyA9
PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9zdHJpbmdfc3RyaW5nX2tleV8gPT0gTlVMTCk7
Ci0gIEVYUEVDVF9GQUxTRShtYXBfc3RyaW5nX3N0cmluZ192YWxfID09IE5VTEwpOwotICBFWFBF
Q1RfRkFMU0UobWFwX2ludDMyX2J5dGVzX2tleV8gPT0gTlVMTCk7Ci0gIEVYUEVDVF9GQUxTRSht
YXBfaW50MzJfYnl0ZXNfdmFsXyA9PSBOVUxMKTsKLSAgRVhQRUNUX0ZBTFNFKG1hcF9pbnQzMl9l
bnVtX2tleV8gPT0gTlVMTCk7Ci0gIEVYUEVDVF9GQUxTRShtYXBfaW50MzJfZW51bV92YWxfID09
IE5VTEwpOwotICBFWFBFQ1RfRkFMU0UobWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZV9rZXlfID09
IE5VTEwpOwotICBFWFBFQ1RfRkFMU0UobWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZV92YWxfID09
IE5VTEwpOwotfQotCi0vLyBTaG9ydGhhbmQgdG8gZ2V0IGEgRmllbGREZXNjcmlwdG9yIGZvciBh
IGZpZWxkIG9mIHVuaXR0ZXN0OjpUZXN0TWFwLgotY29uc3QgRmllbGREZXNjcmlwdG9yKiBNYXBS
ZWZsZWN0aW9uVGVzdGVyOjpGKGNvbnN0IHN0cmluZyYgbmFtZSkgewotICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIHJlc3VsdCA9IE5VTEw7Ci0gIHJlc3VsdCA9IGJhc2VfZGVzY3JpcHRvcl8tPkZp
bmRGaWVsZEJ5TmFtZShuYW1lKTsKLSAgR09PR0xFX0NIRUNLKHJlc3VsdCAhPSBOVUxMKTsKLSAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBNYXBSZWZsZWN0aW9uVGVzdGVyOjpTZXRNYXBGaWVs
ZHNWaWFSZWZsZWN0aW9uKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UpIHsKLSAgY29uc3QgUmVmbGVj
dGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLSAgTWVzc2FnZSog
c3ViX21lc3NhZ2UgPSBOVUxMOwotICBNZXNzYWdlKiBzdWJfZm9yZWlnbl9tZXNzYWdlID0gTlVM
TDsKLQotICAvLyBBZGQgZmlyc3QgZWxlbWVudC4KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9u
LT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9pbnQzMiIpKTsKLSAgc3ViX21lc3Nh
Z2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgbWFwX2lu
dDMyX2ludDMyX2tleV8sIDApOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAg
ICAtPlNldEludDMyKHN1Yl9tZXNzYWdlLCBtYXBfaW50MzJfaW50MzJfdmFsXywgMCk7Ci0KLSAg
c3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9pbnQ2
NF9pbnQ2NCIpKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRJ
bnQ2NChzdWJfbWVzc2FnZSwgbWFwX2ludDY0X2ludDY0X2tleV8sIDApOwotICBzdWJfbWVzc2Fn
ZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldEludDY0KHN1Yl9tZXNzYWdlLCBtYXBfaW50
NjRfaW50NjRfdmFsXywgMCk7Ci0KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNz
YWdlKG1lc3NhZ2UsIEYoIm1hcF91aW50MzJfdWludDMyIikpOwotICBzdWJfbWVzc2FnZS0+R2V0
UmVmbGVjdGlvbigpCi0gICAgICAtPlNldFVJbnQzMihzdWJfbWVzc2FnZSwgbWFwX3VpbnQzMl91
aW50MzJfa2V5XywgMCk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+
U2V0VUludDMyKHN1Yl9tZXNzYWdlLCBtYXBfdWludDMyX3VpbnQzMl92YWxfLCAwKTsKLQotICBz
dWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX3VpbnQ2
NF91aW50NjQiKSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0
VUludDY0KHN1Yl9tZXNzYWdlLCBtYXBfdWludDY0X3VpbnQ2NF9rZXlfLCAwKTsKLSAgc3ViX21l
c3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRVSW50NjQoc3ViX21lc3NhZ2UsIG1h
cF91aW50NjRfdWludDY0X3ZhbF8sIDApOwotCi0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+
QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfc2ludDMyX3NpbnQzMiIpKTsKLSAgc3ViX21lc3Nh
Z2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgbWFwX3Np
bnQzMl9zaW50MzJfa2V5XywgMCk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAg
ICAgIC0+U2V0SW50MzIoc3ViX21lc3NhZ2UsIG1hcF9zaW50MzJfc2ludDMyX3ZhbF8sIDApOwot
Ci0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBf
c2ludDY0X3NpbnQ2NCIpKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAg
LT5TZXRJbnQ2NChzdWJfbWVzc2FnZSwgbWFwX3NpbnQ2NF9zaW50NjRfa2V5XywgMCk7Ci0gIHN1
Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0SW50NjQoc3ViX21lc3NhZ2Us
IG1hcF9zaW50NjRfc2ludDY0X3ZhbF8sIDApOwotCi0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlv
bi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfZml4ZWQzMl9maXhlZDMyIikpOwotICBzdWJf
bWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldFVJbnQzMihzdWJfbWVzc2FnZSwg
bWFwX2ZpeGVkMzJfZml4ZWQzMl9rZXlfLCAwKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rp
b24oKQotICAgICAgLT5TZXRVSW50MzIoc3ViX21lc3NhZ2UsIG1hcF9maXhlZDMyX2ZpeGVkMzJf
dmFsXywgMCk7Ci0KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3Nh
Z2UsIEYoIm1hcF9maXhlZDY0X2ZpeGVkNjQiKSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0
aW9uKCkKLSAgICAgIC0+U2V0VUludDY0KHN1Yl9tZXNzYWdlLCBtYXBfZml4ZWQ2NF9maXhlZDY0
X2tleV8sIDApOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldFVJ
bnQ2NChzdWJfbWVzc2FnZSwgbWFwX2ZpeGVkNjRfZml4ZWQ2NF92YWxfLCAwKTsKLQotICBzdWJf
bWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX3NmaXhlZDMy
X3NmaXhlZDMyIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNl
dEludDMyKHN1Yl9tZXNzYWdlLCBtYXBfc2ZpeGVkMzJfc2ZpeGVkMzJfa2V5XywgMCk7Ci0gIHN1
Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0SW50MzIoc3ViX21lc3NhZ2Us
IG1hcF9zZml4ZWQzMl9zZml4ZWQzMl92YWxfLCAwKTsKLQotICBzdWJfbWVzc2FnZSA9IHJlZmxl
Y3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX3NmaXhlZDY0X3NmaXhlZDY0IikpOwot
ICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldEludDY0KHN1Yl9tZXNz
YWdlLCBtYXBfc2ZpeGVkNjRfc2ZpeGVkNjRfa2V5XywgMCk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRS
ZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0SW50NjQoc3ViX21lc3NhZ2UsIG1hcF9zZml4ZWQ2NF9z
Zml4ZWQ2NF92YWxfLCAwKTsKLQotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3Nh
Z2UobWVzc2FnZSwgRigibWFwX2ludDMyX2Zsb2F0IikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVm
bGVjdGlvbigpCi0gICAgICAtPlNldEludDMyKHN1Yl9tZXNzYWdlLCBtYXBfaW50MzJfZmxvYXRf
a2V5XywgMCk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0Rmxv
YXQoc3ViX21lc3NhZ2UsIG1hcF9pbnQzMl9mbG9hdF92YWxfLCAwLjApOwotCi0gIHN1Yl9tZXNz
YWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfaW50MzJfZG91Ymxl
IikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldEludDMyKHN1
Yl9tZXNzYWdlLCBtYXBfaW50MzJfZG91YmxlX2tleV8sIDApOwotICBzdWJfbWVzc2FnZS0+R2V0
UmVmbGVjdGlvbigpCi0gICAgICAtPlNldERvdWJsZShzdWJfbWVzc2FnZSwgbWFwX2ludDMyX2Rv
dWJsZV92YWxfLCAwLjApOwotCi0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2Fn
ZShtZXNzYWdlLCBGKCJtYXBfYm9vbF9ib29sIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVj
dGlvbigpCi0gICAgICAtPlNldEJvb2woc3ViX21lc3NhZ2UsIG1hcF9ib29sX2Jvb2xfa2V5Xywg
ZmFsc2UpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldEJvb2wo
c3ViX21lc3NhZ2UsIG1hcF9ib29sX2Jvb2xfdmFsXywgZmFsc2UpOwotCi0gIHN1Yl9tZXNzYWdl
ID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfc3RyaW5nX3N0cmluZyIp
KTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRTdHJpbmcoc3Vi
X21lc3NhZ2UsIG1hcF9zdHJpbmdfc3RyaW5nX2tleV8sICIwIik7Ci0gIHN1Yl9tZXNzYWdlLT5H
ZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0U3RyaW5nKHN1Yl9tZXNzYWdlLCBtYXBfc3RyaW5n
X3N0cmluZ192YWxfLCAiMCIpOwotCi0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVz
c2FnZShtZXNzYWdlLCBGKCJtYXBfaW50MzJfYnl0ZXMiKSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRS
ZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0SW50MzIoc3ViX21lc3NhZ2UsIG1hcF9pbnQzMl9ieXRl
c19rZXlfLCAwKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRT
dHJpbmcoc3ViX21lc3NhZ2UsIG1hcF9pbnQzMl9ieXRlc192YWxfLCAiMCIpOwotCi0gIHN1Yl9t
ZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfaW50MzJfZW51
bSIpKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRJbnQzMihz
dWJfbWVzc2FnZSwgbWFwX2ludDMyX2VudW1fa2V5XywgMCk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRS
ZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0RW51bShzdWJfbWVzc2FnZSwgbWFwX2ludDMyX2VudW1f
dmFsXywgbWFwX2VudW1fYmFyXyk7Ci0KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uCi0gICAg
ICAtPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSIpKTsK
LSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRJbnQzMihzdWJfbWVz
c2FnZSwgbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZV9rZXlfLCAwKTsKLSAgc3ViX2ZvcmVpZ25f
bWVzc2FnZSA9IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPgotICAgICAgTXV0YWJsZU1l
c3NhZ2Uoc3ViX21lc3NhZ2UsIG1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2VfdmFsXywgTlVMTCk7
Ci0gIHN1Yl9mb3JlaWduX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+Ci0gICAgICBTZXRJbnQz
MihzdWJfZm9yZWlnbl9tZXNzYWdlLCBmb3JlaWduX2NfLCAwKTsKLQotICAvLyBBZGQgc2Vjb25k
IGVsZW1lbnQKLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2Us
IEYoIm1hcF9pbnQzMl9pbnQzMiIpKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQot
ICAgICAgLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgbWFwX2ludDMyX2ludDMyX2tleV8sIDEpOwot
ICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldEludDMyKHN1Yl9tZXNz
YWdlLCBtYXBfaW50MzJfaW50MzJfdmFsXywgMSk7Ci0KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0
aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9pbnQ2NF9pbnQ2NCIpKTsKLSAgc3ViX21l
c3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRJbnQ2NChzdWJfbWVzc2FnZSwgbWFw
X2ludDY0X2ludDY0X2tleV8sIDEpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0g
ICAgICAtPlNldEludDY0KHN1Yl9tZXNzYWdlLCBtYXBfaW50NjRfaW50NjRfdmFsXywgMSk7Ci0K
LSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF91
aW50MzJfdWludDMyIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAt
PlNldFVJbnQzMihzdWJfbWVzc2FnZSwgbWFwX3VpbnQzMl91aW50MzJfa2V5XywgMSk7Ci0gIHN1
Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0VUludDMyKHN1Yl9tZXNzYWdl
LCBtYXBfdWludDMyX3VpbnQzMl92YWxfLCAxKTsKLQotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rp
b24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX3VpbnQ2NF91aW50NjQiKSk7Ci0gIHN1Yl9t
ZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0VUludDY0KHN1Yl9tZXNzYWdlLCBt
YXBfdWludDY0X3VpbnQ2NF9rZXlfLCAxKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24o
KQotICAgICAgLT5TZXRVSW50NjQoc3ViX21lc3NhZ2UsIG1hcF91aW50NjRfdWludDY0X3ZhbF8s
IDEpOwotCi0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBG
KCJtYXBfc2ludDMyX3NpbnQzMiIpKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQot
ICAgICAgLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgbWFwX3NpbnQzMl9zaW50MzJfa2V5XywgMSk7
Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0SW50MzIoc3ViX21l
c3NhZ2UsIG1hcF9zaW50MzJfc2ludDMyX3ZhbF8sIDEpOwotCi0gIHN1Yl9tZXNzYWdlID0gcmVm
bGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfc2ludDY0X3NpbnQ2NCIpKTsKLSAg
c3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRJbnQ2NChzdWJfbWVzc2Fn
ZSwgbWFwX3NpbnQ2NF9zaW50NjRfa2V5XywgMSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0
aW9uKCkKLSAgICAgIC0+U2V0SW50NjQoc3ViX21lc3NhZ2UsIG1hcF9zaW50NjRfc2ludDY0X3Zh
bF8sIDEpOwotCi0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdl
LCBGKCJtYXBfZml4ZWQzMl9maXhlZDMyIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlv
bigpCi0gICAgICAtPlNldFVJbnQzMihzdWJfbWVzc2FnZSwgbWFwX2ZpeGVkMzJfZml4ZWQzMl9r
ZXlfLCAxKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKQotICAgICAgLT5TZXRVSW50
MzIoc3ViX21lc3NhZ2UsIG1hcF9maXhlZDMyX2ZpeGVkMzJfdmFsXywgMSk7Ci0KLSAgc3ViX21l
c3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9maXhlZDY0X2Zp
eGVkNjQiKSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0VUlu
dDY0KHN1Yl9tZXNzYWdlLCBtYXBfZml4ZWQ2NF9maXhlZDY0X2tleV8sIDEpOwotICBzdWJfbWVz
c2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldFVJbnQ2NChzdWJfbWVzc2FnZSwgbWFw
X2ZpeGVkNjRfZml4ZWQ2NF92YWxfLCAxKTsKLQotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24t
PkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX3NmaXhlZDMyX3NmaXhlZDMyIikpOwotICBzdWJf
bWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldEludDMyKHN1Yl9tZXNzYWdlLCBt
YXBfc2ZpeGVkMzJfc2ZpeGVkMzJfa2V5XywgMSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0
aW9uKCkKLSAgICAgIC0+U2V0SW50MzIoc3ViX21lc3NhZ2UsIG1hcF9zZml4ZWQzMl9zZml4ZWQz
Ml92YWxfLCAxKTsKLQotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVz
c2FnZSwgRigibWFwX3NmaXhlZDY0X3NmaXhlZDY0IikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVm
bGVjdGlvbigpCi0gICAgICAtPlNldEludDY0KHN1Yl9tZXNzYWdlLCBtYXBfc2ZpeGVkNjRfc2Zp
eGVkNjRfa2V5XywgMSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+
U2V0SW50NjQoc3ViX21lc3NhZ2UsIG1hcF9zZml4ZWQ2NF9zZml4ZWQ2NF92YWxfLCAxKTsKLQot
ICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2lu
dDMyX2Zsb2F0IikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNl
dEludDMyKHN1Yl9tZXNzYWdlLCBtYXBfaW50MzJfZmxvYXRfa2V5XywgMSk7Ci0gIHN1Yl9tZXNz
YWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0RmxvYXQoc3ViX21lc3NhZ2UsIG1hcF9p
bnQzMl9mbG9hdF92YWxfLCAxLjApOwotCi0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRk
TWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfaW50MzJfZG91YmxlIikpOwotICBzdWJfbWVzc2FnZS0+
R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldEludDMyKHN1Yl9tZXNzYWdlLCBtYXBfaW50MzJf
ZG91YmxlX2tleV8sIDEpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAt
PlNldERvdWJsZShzdWJfbWVzc2FnZSwgbWFwX2ludDMyX2RvdWJsZV92YWxfLCAxLjApOwotCi0g
IHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfYm9v
bF9ib29sIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNldEJv
b2woc3ViX21lc3NhZ2UsIG1hcF9ib29sX2Jvb2xfa2V5XywgdHJ1ZSk7Ci0gIHN1Yl9tZXNzYWdl
LT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0Qm9vbChzdWJfbWVzc2FnZSwgbWFwX2Jvb2xf
Ym9vbF92YWxfLCB0cnVlKTsKLQotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3Nh
Z2UobWVzc2FnZSwgRigibWFwX3N0cmluZ19zdHJpbmciKSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRS
ZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0U3RyaW5nKHN1Yl9tZXNzYWdlLCBtYXBfc3RyaW5nX3N0
cmluZ19rZXlfLCAiMSIpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAt
PlNldFN0cmluZyhzdWJfbWVzc2FnZSwgbWFwX3N0cmluZ19zdHJpbmdfdmFsXywgIjEiKTsKLQot
ICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2lu
dDMyX2J5dGVzIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNl
dEludDMyKHN1Yl9tZXNzYWdlLCBtYXBfaW50MzJfYnl0ZXNfa2V5XywgMSk7Ci0gIHN1Yl9tZXNz
YWdlLT5HZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0U3RyaW5nKHN1Yl9tZXNzYWdlLCBtYXBf
aW50MzJfYnl0ZXNfdmFsXywgIjEiKTsKLQotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFk
ZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2ludDMyX2VudW0iKSk7Ci0gIHN1Yl9tZXNzYWdlLT5H
ZXRSZWZsZWN0aW9uKCkKLSAgICAgIC0+U2V0SW50MzIoc3ViX21lc3NhZ2UsIG1hcF9pbnQzMl9l
bnVtX2tleV8sIDEpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAgICAtPlNl
dEVudW0oc3ViX21lc3NhZ2UsIG1hcF9pbnQzMl9lbnVtX3ZhbF8sIG1hcF9lbnVtX2Jhel8pOwot
Ci0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbgotICAgICAgLT5BZGRNZXNzYWdlKG1lc3NhZ2Us
IEYoIm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UiKSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZs
ZWN0aW9uKCkKLSAgICAgIC0+U2V0SW50MzIoc3ViX21lc3NhZ2UsIG1hcF9pbnQzMl9mb3JlaWdu
X21lc3NhZ2Vfa2V5XywgMSk7Ci0gIHN1Yl9mb3JlaWduX21lc3NhZ2UgPSBzdWJfbWVzc2FnZS0+
R2V0UmVmbGVjdGlvbigpLT4KLSAgICAgIE11dGFibGVNZXNzYWdlKHN1Yl9tZXNzYWdlLCBtYXBf
aW50MzJfZm9yZWlnbl9tZXNzYWdlX3ZhbF8sIE5VTEwpOwotICBzdWJfZm9yZWlnbl9tZXNzYWdl
LT5HZXRSZWZsZWN0aW9uKCktPgotICAgICAgU2V0SW50MzIoc3ViX2ZvcmVpZ25fbWVzc2FnZSwg
Zm9yZWlnbl9jXywgMSk7Ci19Ci0KLXZvaWQgTWFwUmVmbGVjdGlvblRlc3Rlcjo6U2V0TWFwRmll
bGRzVmlhTWFwUmVmbGVjdGlvbigKLSAgICBNZXNzYWdlKiBtZXNzYWdlKSB7Ci0gIGNvbnN0IFJl
ZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgTWVz
c2FnZSogc3ViX2ZvcmVpZ25fbWVzc2FnZSA9IE5VTEw7Ci0gIE1hcFZhbHVlUmVmIG1hcF92YWw7
Ci0KLSAgLy8gQWRkIGZpcnN0IGVsZW1lbnQuCi0gIE1hcEtleSBtYXBfa2V5OwotICBtYXBfa2V5
LlNldEludDMyVmFsdWUoMCk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkluc2VydE9yTG9v
a3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJfaW50MzIiKSwgbWFwX2tl
eSwgJm1hcF92YWwpKTsKLSAgbWFwX3ZhbC5TZXRJbnQzMlZhbHVlKDApOwotCi0gIG1hcF9rZXku
U2V0SW50NjRWYWx1ZSgwKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SW5zZXJ0T3JMb29r
dXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYoIm1hcF9pbnQ2NF9pbnQ2NCIpLCBtYXBfa2V5
LCAmbWFwX3ZhbCkpOwotICBtYXBfdmFsLlNldEludDY0VmFsdWUoMCk7Ci0KLSAgbWFwX2tleS5T
ZXRVSW50MzJWYWx1ZSgwKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SW5zZXJ0T3JMb29r
dXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYoIm1hcF91aW50MzJfdWludDMyIiksIG1hcF9r
ZXksICZtYXBfdmFsKSk7Ci0gIG1hcF92YWwuU2V0VUludDMyVmFsdWUoMCk7Ci0KLSAgbWFwX2tl
eS5TZXRVSW50NjRWYWx1ZSgwKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SW5zZXJ0T3JM
b29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYoIm1hcF91aW50NjRfdWludDY0IiksIG1h
cF9rZXksICZtYXBfdmFsKSk7Ci0gIG1hcF92YWwuU2V0VUludDY0VmFsdWUoMCk7Ci0KLSAgbWFw
X2tleS5TZXRJbnQzMlZhbHVlKDApOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5JbnNlcnRP
ckxvb2t1cE1hcFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX3NpbnQzMl9zaW50MzIiKSwg
bWFwX2tleSwgJm1hcF92YWwpKTsKLSAgbWFwX3ZhbC5TZXRJbnQzMlZhbHVlKDApOwotCi0gIG1h
cF9rZXkuU2V0SW50NjRWYWx1ZSgwKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SW5zZXJ0
T3JMb29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYoIm1hcF9zaW50NjRfc2ludDY0Iiks
IG1hcF9rZXksICZtYXBfdmFsKSk7Ci0gIG1hcF92YWwuU2V0SW50NjRWYWx1ZSgwKTsKLQotICBt
YXBfa2V5LlNldFVJbnQzMlZhbHVlKDApOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5JbnNl
cnRPckxvb2t1cE1hcFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX2ZpeGVkMzJfZml4ZWQz
MiIpLCBtYXBfa2V5LCAmbWFwX3ZhbCkpOwotICBtYXBfdmFsLlNldFVJbnQzMlZhbHVlKDApOwot
Ci0gIG1hcF9rZXkuU2V0VUludDY0VmFsdWUoMCk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24t
Pkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfZml4ZWQ2NF9m
aXhlZDY0IiksIG1hcF9rZXksICZtYXBfdmFsKSk7Ci0gIG1hcF92YWwuU2V0VUludDY0VmFsdWUo
MCk7Ci0KLSAgbWFwX2tleS5TZXRJbnQzMlZhbHVlKDApOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0
aW9uLT5JbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX3NmaXhl
ZDMyX3NmaXhlZDMyIiksIG1hcF9rZXksICZtYXBfdmFsKSk7Ci0gIG1hcF92YWwuU2V0SW50MzJW
YWx1ZSgwKTsKLQotICBtYXBfa2V5LlNldEludDY0VmFsdWUoMCk7Ci0gIEVYUEVDVF9UUlVFKHJl
ZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBf
c2ZpeGVkNjRfc2ZpeGVkNjQiKSwgbWFwX2tleSwgJm1hcF92YWwpKTsKLSAgbWFwX3ZhbC5TZXRJ
bnQ2NFZhbHVlKDApOwotCi0gIG1hcF9rZXkuU2V0SW50MzJWYWx1ZSgwKTsKLSAgRVhQRUNUX1RS
VUUocmVmbGVjdGlvbi0+SW5zZXJ0T3JMb29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYo
Im1hcF9pbnQzMl9mbG9hdCIpLCBtYXBfa2V5LCAmbWFwX3ZhbCkpOwotICBtYXBfdmFsLlNldEZs
b2F0VmFsdWUoMC4wKTsKLQotICBtYXBfa2V5LlNldEludDMyVmFsdWUoMCk7Ci0gIEVYUEVDVF9U
UlVFKHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBG
KCJtYXBfaW50MzJfZG91YmxlIiksIG1hcF9rZXksICZtYXBfdmFsKSk7Ci0gIG1hcF92YWwuU2V0
RG91YmxlVmFsdWUoMC4wKTsKLQotICBtYXBfa2V5LlNldEJvb2xWYWx1ZShmYWxzZSk7Ci0gIEVY
UEVDVF9UUlVFKHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNz
YWdlLCBGKCJtYXBfYm9vbF9ib29sIiksIG1hcF9rZXksICZtYXBfdmFsKSk7Ci0gIG1hcF92YWwu
U2V0Qm9vbFZhbHVlKGZhbHNlKTsKLQotICBtYXBfa2V5LlNldFN0cmluZ1ZhbHVlKCIwIik7Ci0g
IEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBt
ZXNzYWdlLCBGKCJtYXBfc3RyaW5nX3N0cmluZyIpLCBtYXBfa2V5LCAmbWFwX3ZhbCkpOwotICBt
YXBfdmFsLlNldFN0cmluZ1ZhbHVlKCIwIik7Ci0KLSAgbWFwX2tleS5TZXRJbnQzMlZhbHVlKDAp
OwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAg
ICAgbWVzc2FnZSwgRigibWFwX2ludDMyX2J5dGVzIiksIG1hcF9rZXksICZtYXBfdmFsKSk7Ci0g
IG1hcF92YWwuU2V0U3RyaW5nVmFsdWUoIjAiKTsKLQotICBtYXBfa2V5LlNldEludDMyVmFsdWUo
MCk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0g
ICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJfZW51bSIpLCBtYXBfa2V5LCAmbWFwX3ZhbCkpOwot
ICBtYXBfdmFsLlNldEVudW1WYWx1ZShtYXBfZW51bV9iYXJfLT5udW1iZXIoKSk7Ci0KLSAgbWFw
X2tleS5TZXRJbnQzMlZhbHVlKDApOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5JbnNlcnRP
ckxvb2t1cE1hcFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX2ludDMyX2ZvcmVpZ25fbWVz
c2FnZSIpLCBtYXBfa2V5LCAmbWFwX3ZhbCkpOwotICBzdWJfZm9yZWlnbl9tZXNzYWdlID0gbWFw
X3ZhbC5NdXRhYmxlTWVzc2FnZVZhbHVlKCk7Ci0gIHN1Yl9mb3JlaWduX21lc3NhZ2UtPkdldFJl
ZmxlY3Rpb24oKS0+U2V0SW50MzIoCi0gICAgICBzdWJfZm9yZWlnbl9tZXNzYWdlLCBmb3JlaWdu
X2NfLCAwKTsKLQotICAvLyBBZGQgc2Vjb25kIGVsZW1lbnQKLSAgbWFwX2tleS5TZXRJbnQzMlZh
bHVlKDEpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1hcFZhbHVl
KAotICAgICAgbWVzc2FnZSwgRigibWFwX2ludDMyX2ludDMyIiksIG1hcF9rZXksICZtYXBfdmFs
KSk7Ci0gIG1hcF92YWwuU2V0SW50MzJWYWx1ZSgxKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rp
b24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJf
aW50MzIiKSwgbWFwX2tleSwgJm1hcF92YWwpKTsKLQotICBtYXBfa2V5LlNldEludDY0VmFsdWUo
MSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0g
ICAgICBtZXNzYWdlLCBGKCJtYXBfaW50NjRfaW50NjQiKSwgbWFwX2tleSwgJm1hcF92YWwpKTsK
LSAgbWFwX3ZhbC5TZXRJbnQ2NFZhbHVlKDEpOwotICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+
SW5zZXJ0T3JMb29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYoIm1hcF9pbnQ2NF9pbnQ2
NCIpLCBtYXBfa2V5LCAmbWFwX3ZhbCkpOwotCi0gIG1hcF9rZXkuU2V0VUludDMyVmFsdWUoMSk7
Ci0gIHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBG
KCJtYXBfdWludDMyX3VpbnQzMiIpLCBtYXBfa2V5LCAmbWFwX3ZhbCk7Ci0gIG1hcF92YWwuU2V0
VUludDMyVmFsdWUoMSk7Ci0KLSAgbWFwX2tleS5TZXRVSW50NjRWYWx1ZSgxKTsKLSAgcmVmbGVj
dGlvbi0+SW5zZXJ0T3JMb29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYoIm1hcF91aW50
NjRfdWludDY0IiksIG1hcF9rZXksICZtYXBfdmFsKTsKLSAgbWFwX3ZhbC5TZXRVSW50NjRWYWx1
ZSgxKTsKLQotICBtYXBfa2V5LlNldEludDMyVmFsdWUoMSk7Ci0gIHJlZmxlY3Rpb24tPkluc2Vy
dE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfc2ludDMyX3NpbnQzMiIp
LCBtYXBfa2V5LCAmbWFwX3ZhbCk7Ci0gIG1hcF92YWwuU2V0SW50MzJWYWx1ZSgxKTsKLQotICBt
YXBfa2V5LlNldEludDY0VmFsdWUoMSk7Ci0gIHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFw
VmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfc2ludDY0X3NpbnQ2NCIpLCBtYXBfa2V5LCAm
bWFwX3ZhbCk7Ci0gIG1hcF92YWwuU2V0SW50NjRWYWx1ZSgxKTsKLQotICBtYXBfa2V5LlNldFVJ
bnQzMlZhbHVlKDEpOwotICByZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAg
ICAgbWVzc2FnZSwgRigibWFwX2ZpeGVkMzJfZml4ZWQzMiIpLCBtYXBfa2V5LCAmbWFwX3ZhbCk7
Ci0gIG1hcF92YWwuU2V0VUludDMyVmFsdWUoMSk7Ci0KLSAgbWFwX2tleS5TZXRVSW50NjRWYWx1
ZSgxKTsKLSAgcmVmbGVjdGlvbi0+SW5zZXJ0T3JMb29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3Nh
Z2UsIEYoIm1hcF9maXhlZDY0X2ZpeGVkNjQiKSwgbWFwX2tleSwgJm1hcF92YWwpOwotICBtYXBf
dmFsLlNldFVJbnQ2NFZhbHVlKDEpOwotCi0gIG1hcF9rZXkuU2V0SW50MzJWYWx1ZSgxKTsKLSAg
cmVmbGVjdGlvbi0+SW5zZXJ0T3JMb29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYoIm1h
cF9zZml4ZWQzMl9zZml4ZWQzMiIpLCBtYXBfa2V5LCAmbWFwX3ZhbCk7Ci0gIG1hcF92YWwuU2V0
SW50MzJWYWx1ZSgxKTsKLQotICBtYXBfa2V5LlNldEludDY0VmFsdWUoMSk7Ci0gIHJlZmxlY3Rp
b24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfc2ZpeGVk
NjRfc2ZpeGVkNjQiKSwgbWFwX2tleSwgJm1hcF92YWwpOwotICBtYXBfdmFsLlNldEludDY0VmFs
dWUoMSk7Ci0KLSAgbWFwX2tleS5TZXRJbnQzMlZhbHVlKDEpOwotICByZWZsZWN0aW9uLT5JbnNl
cnRPckxvb2t1cE1hcFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX2ludDMyX2Zsb2F0Iiks
IG1hcF9rZXksICZtYXBfdmFsKTsKLSAgbWFwX3ZhbC5TZXRGbG9hdFZhbHVlKDEuMCk7Ci0KLSAg
bWFwX2tleS5TZXRJbnQzMlZhbHVlKDEpOwotICByZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1h
cFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX2ludDMyX2RvdWJsZSIpLCBtYXBfa2V5LCAm
bWFwX3ZhbCk7Ci0gIG1hcF92YWwuU2V0RG91YmxlVmFsdWUoMS4wKTsKLQotICBtYXBfa2V5LlNl
dEJvb2xWYWx1ZSh0cnVlKTsKLSAgcmVmbGVjdGlvbi0+SW5zZXJ0T3JMb29rdXBNYXBWYWx1ZSgK
LSAgICAgIG1lc3NhZ2UsIEYoIm1hcF9ib29sX2Jvb2wiKSwgbWFwX2tleSwgJm1hcF92YWwpOwot
ICBtYXBfdmFsLlNldEJvb2xWYWx1ZSh0cnVlKTsKLQotICBtYXBfa2V5LlNldFN0cmluZ1ZhbHVl
KCIxIik7Ci0gIHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNz
YWdlLCBGKCJtYXBfc3RyaW5nX3N0cmluZyIpLCBtYXBfa2V5LCAmbWFwX3ZhbCk7Ci0gIG1hcF92
YWwuU2V0U3RyaW5nVmFsdWUoIjEiKTsKLQotICBtYXBfa2V5LlNldEludDMyVmFsdWUoMSk7Ci0g
IHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJt
YXBfaW50MzJfYnl0ZXMiKSwgbWFwX2tleSwgJm1hcF92YWwpOwotICBtYXBfdmFsLlNldFN0cmlu
Z1ZhbHVlKCIxIik7Ci0KLSAgbWFwX2tleS5TZXRJbnQzMlZhbHVlKDEpOwotICByZWZsZWN0aW9u
LT5JbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX2ludDMyX2Vu
dW0iKSwgbWFwX2tleSwgJm1hcF92YWwpOwotICBtYXBfdmFsLlNldEVudW1WYWx1ZShtYXBfZW51
bV9iYXpfLT5udW1iZXIoKSk7Ci0KLSAgbWFwX2tleS5TZXRJbnQzMlZhbHVlKDEpOwotICBFWFBF
Q1RfVFJVRShyZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAgICAgbWVzc2Fn
ZSwgRigibWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSIpLCBtYXBfa2V5LCAmbWFwX3ZhbCkpOwot
ICBzdWJfZm9yZWlnbl9tZXNzYWdlID0gbWFwX3ZhbC5NdXRhYmxlTWVzc2FnZVZhbHVlKCk7Ci0g
IHN1Yl9mb3JlaWduX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+U2V0SW50MzIoCi0gICAgICBz
dWJfZm9yZWlnbl9tZXNzYWdlLCBmb3JlaWduX2NfLCAxKTsKLX0KLQotdm9pZCBNYXBSZWZsZWN0
aW9uVGVzdGVyOjpDbGVhck1hcEZpZWxkc1ZpYVJlZmxlY3Rpb24oCi0gICAgTWVzc2FnZSogbWVz
c2FnZSkgewotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVm
bGVjdGlvbigpOwotCi0gIHJlZmxlY3Rpb24tPkNsZWFyRmllbGQobWVzc2FnZSwgRigibWFwX2lu
dDMyX2ludDMyIikpOwotICByZWZsZWN0aW9uLT5DbGVhckZpZWxkKG1lc3NhZ2UsIEYoIm1hcF9p
bnQ2NF9pbnQ2NCIpKTsKLSAgcmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNzYWdlLCBGKCJtYXBf
dWludDMyX3VpbnQzMiIpKTsKLSAgcmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNzYWdlLCBGKCJt
YXBfdWludDY0X3VpbnQ2NCIpKTsKLSAgcmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNzYWdlLCBG
KCJtYXBfc2ludDMyX3NpbnQzMiIpKTsKLSAgcmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNzYWdl
LCBGKCJtYXBfc2ludDY0X3NpbnQ2NCIpKTsKLSAgcmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNz
YWdlLCBGKCJtYXBfZml4ZWQzMl9maXhlZDMyIikpOwotICByZWZsZWN0aW9uLT5DbGVhckZpZWxk
KG1lc3NhZ2UsIEYoIm1hcF9maXhlZDY0X2ZpeGVkNjQiKSk7Ci0gIHJlZmxlY3Rpb24tPkNsZWFy
RmllbGQobWVzc2FnZSwgRigibWFwX3NmaXhlZDMyX3NmaXhlZDMyIikpOwotICByZWZsZWN0aW9u
LT5DbGVhckZpZWxkKG1lc3NhZ2UsIEYoIm1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCIpKTsKLSAgcmVm
bGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNzYWdlLCBGKCJtYXBfaW50MzJfZmxvYXQiKSk7Ci0gIHJl
ZmxlY3Rpb24tPkNsZWFyRmllbGQobWVzc2FnZSwgRigibWFwX2ludDMyX2RvdWJsZSIpKTsKLSAg
cmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNzYWdlLCBGKCJtYXBfYm9vbF9ib29sIikpOwotICBy
ZWZsZWN0aW9uLT5DbGVhckZpZWxkKG1lc3NhZ2UsIEYoIm1hcF9zdHJpbmdfc3RyaW5nIikpOwot
ICByZWZsZWN0aW9uLT5DbGVhckZpZWxkKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9ieXRlcyIpKTsK
LSAgcmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNzYWdlLCBGKCJtYXBfaW50MzJfZW51bSIpKTsK
LSAgcmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNzYWdlLCBGKCJtYXBfaW50MzJfZm9yZWlnbl9t
ZXNzYWdlIikpOwotfQotCi12b2lkIE1hcFJlZmxlY3Rpb25UZXN0ZXI6Ok1vZGlmeU1hcEZpZWxk
c1ZpYVJlZmxlY3Rpb24oCi0gICAgTWVzc2FnZSogbWVzc2FnZSkgewotICBjb25zdCBSZWZsZWN0
aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotICBNYXBWYWx1ZVJl
ZiBtYXBfdmFsOwotICBNZXNzYWdlKiBzdWJfZm9yZWlnbl9tZXNzYWdlOwotCi0gIC8vIE1vZGlm
eSB0aGUgc2Vjb25kIGVsZW1lbnQKLSAgTWFwS2V5IG1hcF9rZXk7Ci0gIG1hcF9rZXkuU2V0SW50
MzJWYWx1ZSgxKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFw
VmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJfaW50MzIiKSwgbWFwX2tleSwgJm1h
cF92YWwpKTsKLSAgbWFwX3ZhbC5TZXRJbnQzMlZhbHVlKDIpOwotCi0gIG1hcF9rZXkuU2V0SW50
NjRWYWx1ZSgxKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFw
VmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfaW50NjRfaW50NjQiKSwgbWFwX2tleSwgJm1h
cF92YWwpKTsKLSAgbWFwX3ZhbC5TZXRJbnQ2NFZhbHVlKDIpOwotCi0gIG1hcF9rZXkuU2V0VUlu
dDMyVmFsdWUoMSk7Ci0gIEVYUEVDVF9GQUxTRShyZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1h
cFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX3VpbnQzMl91aW50MzIiKSwgbWFwX2tleSwg
Jm1hcF92YWwpKTsKLSAgbWFwX3ZhbC5TZXRVSW50MzJWYWx1ZSgyKTsKLQotICBtYXBfa2V5LlNl
dFVJbnQ2NFZhbHVlKDEpOwotICByZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1hcFZhbHVlKAot
ICAgICAgbWVzc2FnZSwgRigibWFwX3VpbnQ2NF91aW50NjQiKSwgbWFwX2tleSwgJm1hcF92YWwp
OwotICBtYXBfdmFsLlNldFVJbnQ2NFZhbHVlKDIpOwotCi0gIG1hcF9rZXkuU2V0SW50MzJWYWx1
ZSgxKTsKLSAgcmVmbGVjdGlvbi0+SW5zZXJ0T3JMb29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3Nh
Z2UsIEYoIm1hcF9zaW50MzJfc2ludDMyIiksIG1hcF9rZXksICZtYXBfdmFsKTsKLSAgbWFwX3Zh
bC5TZXRJbnQzMlZhbHVlKDIpOwotCi0gIG1hcF9rZXkuU2V0SW50NjRWYWx1ZSgxKTsKLSAgcmVm
bGVjdGlvbi0+SW5zZXJ0T3JMb29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYoIm1hcF9z
aW50NjRfc2ludDY0IiksIG1hcF9rZXksICZtYXBfdmFsKTsKLSAgbWFwX3ZhbC5TZXRJbnQ2NFZh
bHVlKDIpOwotCi0gIG1hcF9rZXkuU2V0VUludDMyVmFsdWUoMSk7Ci0gIHJlZmxlY3Rpb24tPklu
c2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfZml4ZWQzMl9maXhl
ZDMyIiksIG1hcF9rZXksICZtYXBfdmFsKTsKLSAgbWFwX3ZhbC5TZXRVSW50MzJWYWx1ZSgyKTsK
LQotICBtYXBfa2V5LlNldFVJbnQ2NFZhbHVlKDEpOwotICByZWZsZWN0aW9uLT5JbnNlcnRPckxv
b2t1cE1hcFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX2ZpeGVkNjRfZml4ZWQ2NCIpLCBt
YXBfa2V5LCAmbWFwX3ZhbCk7Ci0gIG1hcF92YWwuU2V0VUludDY0VmFsdWUoMik7Ci0KLSAgbWFw
X2tleS5TZXRJbnQzMlZhbHVlKDEpOwotICByZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1hcFZh
bHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX3NmaXhlZDMyX3NmaXhlZDMyIiksIG1hcF9rZXks
ICZtYXBfdmFsKTsKLSAgbWFwX3ZhbC5TZXRJbnQzMlZhbHVlKDIpOwotCi0gIG1hcF9rZXkuU2V0
SW50NjRWYWx1ZSgxKTsKLSAgcmVmbGVjdGlvbi0+SW5zZXJ0T3JMb29rdXBNYXBWYWx1ZSgKLSAg
ICAgIG1lc3NhZ2UsIEYoIm1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCIpLCBtYXBfa2V5LCAmbWFwX3Zh
bCk7Ci0gIG1hcF92YWwuU2V0SW50NjRWYWx1ZSgyKTsKLQotICBtYXBfa2V5LlNldEludDMyVmFs
dWUoMSk7Ci0gIHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNz
YWdlLCBGKCJtYXBfaW50MzJfZmxvYXQiKSwgbWFwX2tleSwgJm1hcF92YWwpOwotICBtYXBfdmFs
LlNldEZsb2F0VmFsdWUoMi4wKTsKLQotICBtYXBfa2V5LlNldEludDMyVmFsdWUoMSk7Ci0gIHJl
ZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBf
aW50MzJfZG91YmxlIiksIG1hcF9rZXksICZtYXBfdmFsKTsKLSAgbWFwX3ZhbC5TZXREb3VibGVW
YWx1ZSgyLjApOwotCi0gIG1hcF9rZXkuU2V0Qm9vbFZhbHVlKHRydWUpOwotICByZWZsZWN0aW9u
LT5JbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAgICAgbWVzc2FnZSwgRigibWFwX2Jvb2xfYm9v
bCIpLCBtYXBfa2V5LCAmbWFwX3ZhbCk7Ci0gIG1hcF92YWwuU2V0Qm9vbFZhbHVlKGZhbHNlKTsK
LQotICBtYXBfa2V5LlNldFN0cmluZ1ZhbHVlKCIxIik7Ci0gIHJlZmxlY3Rpb24tPkluc2VydE9y
TG9va3VwTWFwVmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfc3RyaW5nX3N0cmluZyIpLCBt
YXBfa2V5LCAmbWFwX3ZhbCk7Ci0gIG1hcF92YWwuU2V0U3RyaW5nVmFsdWUoIjIiKTsKLQotICBt
YXBfa2V5LlNldEludDMyVmFsdWUoMSk7Ci0gIHJlZmxlY3Rpb24tPkluc2VydE9yTG9va3VwTWFw
VmFsdWUoCi0gICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJfYnl0ZXMiKSwgbWFwX2tleSwgJm1h
cF92YWwpOwotICBtYXBfdmFsLlNldFN0cmluZ1ZhbHVlKCIyIik7Ci0KLSAgbWFwX2tleS5TZXRJ
bnQzMlZhbHVlKDEpOwotICByZWZsZWN0aW9uLT5JbnNlcnRPckxvb2t1cE1hcFZhbHVlKAotICAg
ICAgbWVzc2FnZSwgRigibWFwX2ludDMyX2VudW0iKSwgbWFwX2tleSwgJm1hcF92YWwpOwotICBt
YXBfdmFsLlNldEVudW1WYWx1ZShtYXBfZW51bV9mb29fLT5udW1iZXIoKSk7Ci0KLSAgbWFwX2tl
eS5TZXRJbnQzMlZhbHVlKDEpOwotICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SW5zZXJ0T3JM
b29rdXBNYXBWYWx1ZSgKLSAgICAgIG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9mb3JlaWduX21lc3Nh
Z2UiKSwgbWFwX2tleSwgJm1hcF92YWwpKTsKLSAgc3ViX2ZvcmVpZ25fbWVzc2FnZSA9IG1hcF92
YWwuTXV0YWJsZU1lc3NhZ2VWYWx1ZSgpOwotICBzdWJfZm9yZWlnbl9tZXNzYWdlLT5HZXRSZWZs
ZWN0aW9uKCktPlNldEludDMyKAotICAgICAgc3ViX2ZvcmVpZ25fbWVzc2FnZSwgZm9yZWlnbl9j
XywgMik7Ci19Ci0KLXZvaWQgTWFwUmVmbGVjdGlvblRlc3Rlcjo6UmVtb3ZlTGFzdE1hcHNWaWFS
ZWZsZWN0aW9uKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UpIHsKLSAgY29uc3QgUmVmbGVjdGlvbiog
cmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLQotICB2ZWN0b3I8Y29uc3Qg
RmllbGREZXNjcmlwdG9yKj4gb3V0cHV0OwotICByZWZsZWN0aW9uLT5MaXN0RmllbGRzKCptZXNz
YWdlLCAmb3V0cHV0KTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRwdXQuc2l6ZSgpOyArK2kp
IHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gb3V0cHV0W2ldOwotICAgIGlm
ICghZmllbGQtPmlzX3JlcGVhdGVkKCkpIGNvbnRpbnVlOwotICAgIHJlZmxlY3Rpb24tPlJlbW92
ZUxhc3QobWVzc2FnZSwgZmllbGQpOwotICB9Ci19Ci0KLXZvaWQgTWFwUmVmbGVjdGlvblRlc3Rl
cjo6UmVsZWFzZUxhc3RNYXBzVmlhUmVmbGVjdGlvbigKLSAgICBNZXNzYWdlKiBtZXNzYWdlKSB7
Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9u
KCk7Ci0KLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IG91dHB1dDsKLSAgcmVmbGVj
dGlvbi0+TGlzdEZpZWxkcygqbWVzc2FnZSwgJm91dHB1dCk7Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDwgb3V0cHV0LnNpemUoKTsgKytpKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCA9IG91dHB1dFtpXTsKLSAgICBpZiAoIWZpZWxkLT5pc19yZXBlYXRlZCgpKSBjb250aW51ZTsK
LSAgICBpZiAoZmllbGQtPmNwcF90eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01F
U1NBR0UpIGNvbnRpbnVlOwotCi0gICAgTWVzc2FnZSogcmVsZWFzZWQgPSByZWZsZWN0aW9uLT5S
ZWxlYXNlTGFzdChtZXNzYWdlLCBmaWVsZCk7Ci0gICAgQVNTRVJUX1RSVUUocmVsZWFzZWQgIT0g
TlVMTCkgPDwgIlJlbGVhc2VMYXN0IHJldHVybmVkIE5VTEwgZm9yOiAiCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPDwgZmllbGQtPm5hbWUoKTsKLSAgICBkZWxldGUgcmVsZWFz
ZWQ7Ci0gIH0KLX0KLQotdm9pZCBNYXBSZWZsZWN0aW9uVGVzdGVyOjpTd2FwTWFwc1ZpYVJlZmxl
Y3Rpb24oTWVzc2FnZSogbWVzc2FnZSkgewotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9u
ID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlw
dG9yKj4gb3V0cHV0OwotICByZWZsZWN0aW9uLT5MaXN0RmllbGRzKCptZXNzYWdlLCAmb3V0cHV0
KTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRwdXQuc2l6ZSgpOyArK2kpIHsKLSAgICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gb3V0cHV0W2ldOwotICAgIGlmICghZmllbGQtPmlz
X3JlcGVhdGVkKCkpIGNvbnRpbnVlOwotICAgIHJlZmxlY3Rpb24tPlN3YXBFbGVtZW50cyhtZXNz
YWdlLCBmaWVsZCwgMCwgMSk7Ci0gIH0KLX0KLQotdm9pZCBNYXBSZWZsZWN0aW9uVGVzdGVyOjoK
LSAgICBNdXRhYmxlVW5rbm93bkZpZWxkc09mTWFwRmllbGRzVmlhUmVmbGVjdGlvbihNZXNzYWdl
KiBtZXNzYWdlKSB7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5H
ZXRSZWZsZWN0aW9uKCk7Ci0gIE1lc3NhZ2UqIHN1Yl9tZXNzYWdlID0gTlVMTDsKLQotICBzdWJf
bWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2ludDMyX2lu
dDMyIikpOwotICBFWFBFQ1RfVFJVRShzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5NdXRh
YmxlVW5rbm93bkZpZWxkcyhzdWJfbWVzc2FnZSkgIT0KLSAgICAgICAgICAgICAgTlVMTCk7Ci0g
IHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfaW50
NjRfaW50NjQiKSk7Ci0gIEVYUEVDVF9UUlVFKHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkt
Pk11dGFibGVVbmtub3duRmllbGRzKHN1Yl9tZXNzYWdlKSAhPQotICAgICAgICAgICAgICBOVUxM
KTsKLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1h
cF91aW50MzJfdWludDMyIikpOwotICBFWFBFQ1RfVFJVRShzdWJfbWVzc2FnZS0+R2V0UmVmbGVj
dGlvbigpLT5NdXRhYmxlVW5rbm93bkZpZWxkcyhzdWJfbWVzc2FnZSkgIT0KLSAgICAgICAgICAg
ICAgTlVMTCk7Ci0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdl
LCBGKCJtYXBfdWludDY0X3VpbnQ2NCIpKTsKLSAgRVhQRUNUX1RSVUUoc3ViX21lc3NhZ2UtPkdl
dFJlZmxlY3Rpb24oKS0+TXV0YWJsZVVua25vd25GaWVsZHMoc3ViX21lc3NhZ2UpICE9Ci0gICAg
ICAgICAgICAgIE5VTEwpOwotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2Uo
bWVzc2FnZSwgRigibWFwX3NpbnQzMl9zaW50MzIiKSk7Ci0gIEVYUEVDVF9UUlVFKHN1Yl9tZXNz
YWdlLT5HZXRSZWZsZWN0aW9uKCktPk11dGFibGVVbmtub3duRmllbGRzKHN1Yl9tZXNzYWdlKSAh
PQotICAgICAgICAgICAgICBOVUxMKTsKLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRN
ZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9zaW50NjRfc2ludDY0IikpOwotICBFWFBFQ1RfVFJVRShz
dWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5NdXRhYmxlVW5rbm93bkZpZWxkcyhzdWJfbWVz
c2FnZSkgIT0KLSAgICAgICAgICAgICAgTlVMTCk7Ci0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlv
bi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfZml4ZWQzMl9maXhlZDMyIikpOwotICBFWFBF
Q1RfVFJVRShzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5NdXRhYmxlVW5rbm93bkZpZWxk
cyhzdWJfbWVzc2FnZSkgIT0KLSAgICAgICAgICAgICAgTlVMTCk7Ci0gIHN1Yl9tZXNzYWdlID0g
cmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfZml4ZWQ2NF9maXhlZDY0Iikp
OwotICBFWFBFQ1RfVFJVRShzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5NdXRhYmxlVW5r
bm93bkZpZWxkcyhzdWJfbWVzc2FnZSkgIT0KLSAgICAgICAgICAgICAgTlVMTCk7Ci0gIHN1Yl9t
ZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfc2ZpeGVkMzJf
c2ZpeGVkMzIiKSk7Ci0gIEVYUEVDVF9UUlVFKHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkt
Pk11dGFibGVVbmtub3duRmllbGRzKHN1Yl9tZXNzYWdlKSAhPQotICAgICAgICAgICAgICBOVUxM
KTsKLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1h
cF9zZml4ZWQ2NF9zZml4ZWQ2NCIpKTsKLSAgRVhQRUNUX1RSVUUoc3ViX21lc3NhZ2UtPkdldFJl
ZmxlY3Rpb24oKS0+TXV0YWJsZVVua25vd25GaWVsZHMoc3ViX21lc3NhZ2UpICE9Ci0gICAgICAg
ICAgICAgIE5VTEwpOwotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVz
c2FnZSwgRigibWFwX2ludDMyX2Zsb2F0IikpOwotICBFWFBFQ1RfVFJVRShzdWJfbWVzc2FnZS0+
R2V0UmVmbGVjdGlvbigpLT5NdXRhYmxlVW5rbm93bkZpZWxkcyhzdWJfbWVzc2FnZSkgIT0KLSAg
ICAgICAgICAgICAgTlVMTCk7Ci0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2Fn
ZShtZXNzYWdlLCBGKCJtYXBfaW50MzJfZG91YmxlIikpOwotICBFWFBFQ1RfVFJVRShzdWJfbWVz
c2FnZS0+R2V0UmVmbGVjdGlvbigpLT5NdXRhYmxlVW5rbm93bkZpZWxkcyhzdWJfbWVzc2FnZSkg
IT0KLSAgICAgICAgICAgICAgTlVMTCk7Ci0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRk
TWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfYm9vbF9ib29sIikpOwotICBFWFBFQ1RfVFJVRShzdWJf
bWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5NdXRhYmxlVW5rbm93bkZpZWxkcyhzdWJfbWVzc2Fn
ZSkgIT0KLSAgICAgICAgICAgICAgTlVMTCk7Ci0gIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+
QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfc3RyaW5nX3N0cmluZyIpKTsKLSAgRVhQRUNUX1RS
VUUoc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+TXV0YWJsZVVua25vd25GaWVsZHMoc3Vi
X21lc3NhZ2UpICE9Ci0gICAgICAgICAgICAgIE5VTEwpOwotICBzdWJfbWVzc2FnZSA9IHJlZmxl
Y3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2ludDMyX2J5dGVzIikpOwotICBFWFBF
Q1RfVFJVRShzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5NdXRhYmxlVW5rbm93bkZpZWxk
cyhzdWJfbWVzc2FnZSkgIT0KLSAgICAgICAgICAgICAgTlVMTCk7Ci0gIHN1Yl9tZXNzYWdlID0g
cmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfaW50MzJfZW51bSIpKTsKLSAg
RVhQRUNUX1RSVUUoc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+TXV0YWJsZVVua25vd25G
aWVsZHMoc3ViX21lc3NhZ2UpICE9Ci0gICAgICAgICAgICAgIE5VTEwpOwotICBzdWJfbWVzc2Fn
ZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2ludDMyX2ZvcmVpZ25f
bWVzc2FnZSIpKTsKLSAgRVhQRUNUX1RSVUUoc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+
TXV0YWJsZVVua25vd25GaWVsZHMoc3ViX21lc3NhZ2UpICE9Ci0gICAgICAgICAgICAgIE5VTEwp
OwotfQotCi12b2lkIE1hcFJlZmxlY3Rpb25UZXN0ZXI6OkV4cGVjdE1hcEZpZWxkc1NldFZpYVJl
ZmxlY3Rpb24oCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSkgewotICBzdHJpbmcgc2NyYXRj
aDsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlv
bigpOwotICBjb25zdCBNZXNzYWdlKiBzdWJfbWVzc2FnZTsKLSAgTWFwS2V5IG1hcF9rZXk7Ci0K
LSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1l
c3NhZ2UsIEYoIm1hcF9pbnQzMl9pbnQzMiIpKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9u
LT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFwX2ludDY0X2ludDY0IikpKTsKLSAgQVNTRVJUX0VR
KDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJtYXBfdWludDMyX3VpbnQzMiIp
KSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFw
X3VpbnQ2NF91aW50NjQiKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXpl
KG1lc3NhZ2UsIEYoIm1hcF9zaW50MzJfc2ludDMyIikpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxl
Y3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJtYXBfc2ludDY0X3NpbnQ2NCIpKSk7Ci0gIEFT
U0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFwX2ZpeGVkMzJf
Zml4ZWQzMiIpKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2Fn
ZSwgRigibWFwX2ZpeGVkNjRfZml4ZWQ2NCIpKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9u
LT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFwX3NmaXhlZDMyX3NmaXhlZDMyIikpKTsKLSAgQVNT
RVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJtYXBfc2ZpeGVkNjRf
c2ZpeGVkNjQiKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3Nh
Z2UsIEYoIm1hcF9pbnQzMl9mbG9hdCIpKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5G
aWVsZFNpemUobWVzc2FnZSwgRigibWFwX2ludDMyX2RvdWJsZSIpKSk7Ci0gIEFTU0VSVF9FUSgy
LCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFwX2Jvb2xfYm9vbCIpKSk7Ci0g
IEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFwX3N0cmlu
Z19zdHJpbmciKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3Nh
Z2UsIEYoIm1hcF9pbnQzMl9ieXRlcyIpKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5G
aWVsZFNpemUobWVzc2FnZSwgRigibWFwX2ludDMyX2VudW0iKSkpOwotICBBU1NFUlRfRVEoMiwg
cmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9mb3JlaWduX21lc3Nh
Z2UiKSkpOwotCi0gIHsKLSAgICBzdGQ6Om1hcDxpbnQzMiwgaW50MzI+IG1hcDsKLSAgICBtYXBb
MF0gPSAwOwotICAgIG1hcFsxXSA9IDE7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKysp
IHsKLSAgICAgIC8vIENoZWNrIHdpdGggUmVwZWF0ZWRGaWVsZCBSZWZsZWN0aW9uCi0gICAgICBz
dWJfbWVzc2FnZSA9Ci0gICAgICAgICAgJnJlZmxlY3Rpb24tPkdldFJlcGVhdGVkTWVzc2FnZSht
ZXNzYWdlLCBGKCJtYXBfaW50MzJfaW50MzIiKSwgaSk7Ci0gICAgICBpbnQzMiBrZXkgPSBzdWJf
bWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigKLSAgICAgICAgICAqc3ViX21lc3Nh
Z2UsIG1hcF9pbnQzMl9pbnQzMl9rZXlfKTsKLSAgICAgIGludDMyIHZhbCA9IHN1Yl9tZXNzYWdl
LT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAgICpzdWJfbWVzc2FnZSwgbWFw
X2ludDMyX2ludDMyX3ZhbF8pOwotICAgICAgRVhQRUNUX0VRKG1hcFtrZXldLCB2YWwpOwotICAg
ICAgLy8gQ2hlY2sgd2l0aCBNYXAgUmVmbGVjdGlvbgotICAgICAgbWFwX2tleS5TZXRJbnQzMlZh
bHVlKGtleSk7Ci0gICAgICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5Db250YWluc01hcEtleSgK
LSAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJfaW50MzIiKSwgbWFwX2tleSkpOwotICAg
IH0KLSAgfQotICB7Ci0gICAgc3RkOjptYXA8aW50NjQsIGludDY0PiBtYXA7Ci0gICAgbWFwWzBd
ID0gMDsKLSAgICBtYXBbMV0gPSAxOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7
Ci0gICAgICAvLyBDaGVjayB3aXRoIFJlcGVhdGVkRmllbGQgUmVmbGVjdGlvbgotICAgICAgc3Vi
X21lc3NhZ2UgPQotICAgICAgICAgICZyZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2UobWVz
c2FnZSwgRigibWFwX2ludDY0X2ludDY0IiksIGkpOwotICAgICAgaW50NjQga2V5ID0gc3ViX21l
c3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50NjQoCi0gICAgICAgICAgKnN1Yl9tZXNzYWdl
LCBtYXBfaW50NjRfaW50NjRfa2V5Xyk7Ci0gICAgICBpbnQ2NCB2YWwgPSBzdWJfbWVzc2FnZS0+
R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQ2NCgKLSAgICAgICAgICAqc3ViX21lc3NhZ2UsIG1hcF9p
bnQ2NF9pbnQ2NF92YWxfKTsKLSAgICAgIEVYUEVDVF9FUShtYXBba2V5XSwgdmFsKTsKLSAgICAg
IC8vIENoZWNrIHdpdGggTWFwIFJlZmxlY3Rpb24KLSAgICAgIG1hcF9rZXkuU2V0SW50NjRWYWx1
ZShrZXkpOwotICAgICAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+Q29udGFpbnNNYXBLZXkoCi0g
ICAgICAgICAgbWVzc2FnZSwgRigibWFwX2ludDY0X2ludDY0IiksIG1hcF9rZXkpKTsKLSAgICB9
Ci0gIH0KLSAgewotICAgIHN0ZDo6bWFwPHVpbnQzMiwgdWludDMyPiBtYXA7Ci0gICAgbWFwWzBd
ID0gMDsKLSAgICBtYXBbMV0gPSAxOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7
Ci0gICAgICAvLyBDaGVjayB3aXRoIFJlcGVhdGVkRmllbGQgUmVmbGVjdGlvbgotICAgICAgc3Vi
X21lc3NhZ2UgPQotICAgICAgICAgICZyZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2UobWVz
c2FnZSwgRigibWFwX3VpbnQzMl91aW50MzIiKSwgaSk7Ci0gICAgICB1aW50MzIga2V5ID0gc3Vi
X21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0VUludDMyKAotICAgICAgICAgICpzdWJfbWVz
c2FnZSwgbWFwX3VpbnQzMl91aW50MzJfa2V5Xyk7Ci0gICAgICB1aW50MzIgdmFsID0gc3ViX21l
c3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0VUludDMyKAotICAgICAgICAgICpzdWJfbWVzc2Fn
ZSwgbWFwX3VpbnQzMl91aW50MzJfdmFsXyk7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2tleV0sIHZh
bCk7Ci0gICAgICAvLyBDaGVjayB3aXRoIE1hcCBSZWZsZWN0aW9uCi0gICAgICBtYXBfa2V5LlNl
dFVJbnQzMlZhbHVlKGtleSk7Ci0gICAgICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5Db250YWlu
c01hcEtleSgKLSAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfdWludDMyX3VpbnQzMiIpLCBtYXBf
a2V5KSk7Ci0gICAgfQotICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDx1aW50NjQsIHVpbnQ2ND4gbWFw
OwotICAgIG1hcFswXSA9IDA7Ci0gICAgbWFwWzFdID0gMTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IDI7IGkrKykgewotICAgICAgc3ViX21lc3NhZ2UgPQotICAgICAgICAgICZyZWZsZWN0aW9u
LT5HZXRSZXBlYXRlZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX3VpbnQ2NF91aW50NjQiKSwgaSk7
Ci0gICAgICB1aW50NjQga2V5ID0gc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0VUlu
dDY0KAotICAgICAgICAgICpzdWJfbWVzc2FnZSwgbWFwX3VpbnQ2NF91aW50NjRfa2V5Xyk7Ci0g
ICAgICB1aW50NjQgdmFsID0gc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0VUludDY0
KAotICAgICAgICAgICpzdWJfbWVzc2FnZSwgbWFwX3VpbnQ2NF91aW50NjRfdmFsXyk7Ci0gICAg
ICBFWFBFQ1RfRVEobWFwW2tleV0sIHZhbCk7Ci0gICAgICAvLyBDaGVjayB3aXRoIE1hcCBSZWZs
ZWN0aW9uCi0gICAgICBtYXBfa2V5LlNldFVJbnQ2NFZhbHVlKGtleSk7Ci0gICAgICBFWFBFQ1Rf
VFJVRShyZWZsZWN0aW9uLT5Db250YWluc01hcEtleSgKLSAgICAgICAgICBtZXNzYWdlLCBGKCJt
YXBfdWludDY0X3VpbnQ2NCIpLCBtYXBfa2V5KSk7Ci0gICAgfQotICB9Ci0gIHsKLSAgICBzdGQ6
Om1hcDxpbnQzMiwgaW50MzI+IG1hcDsKLSAgICBtYXBbMF0gPSAwOwotICAgIG1hcFsxXSA9IDE7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgIHN1Yl9tZXNzYWdlID0K
LSAgICAgICAgICAmcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1h
cF9zaW50MzJfc2ludDMyIiksIGkpOwotICAgICAgaW50MzIga2V5ID0gc3ViX21lc3NhZ2UtPkdl
dFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoCi0gICAgICAgICAgKnN1Yl9tZXNzYWdlLCBtYXBfc2lu
dDMyX3NpbnQzMl9rZXlfKTsKLSAgICAgIGludDMyIHZhbCA9IHN1Yl9tZXNzYWdlLT5HZXRSZWZs
ZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAgICpzdWJfbWVzc2FnZSwgbWFwX3NpbnQzMl9z
aW50MzJfdmFsXyk7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2tleV0sIHZhbCk7Ci0gICAgICAvLyBD
aGVjayB3aXRoIE1hcCBSZWZsZWN0aW9uCi0gICAgICBtYXBfa2V5LlNldEludDMyVmFsdWUoa2V5
KTsKLSAgICAgIEVYUEVDVF9FUSh0cnVlLCByZWZsZWN0aW9uLT5Db250YWluc01hcEtleSgKLSAg
ICAgICAgICBtZXNzYWdlLCBGKCJtYXBfc2ludDMyX3NpbnQzMiIpLCBtYXBfa2V5KSk7Ci0gICAg
fQotICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDxpbnQ2NCwgaW50NjQ+IG1hcDsKLSAgICBtYXBbMF0g
PSAwOwotICAgIG1hcFsxXSA9IDE7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsK
LSAgICAgIHN1Yl9tZXNzYWdlID0KLSAgICAgICAgICAmcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRN
ZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9zaW50NjRfc2ludDY0IiksIGkpOwotICAgICAgaW50NjQg
a2V5ID0gc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50NjQoCi0gICAgICAgICAg
KnN1Yl9tZXNzYWdlLCBtYXBfc2ludDY0X3NpbnQ2NF9rZXlfKTsKLSAgICAgIGludDY0IHZhbCA9
IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldEludDY0KAotICAgICAgICAgICpzdWJf
bWVzc2FnZSwgbWFwX3NpbnQ2NF9zaW50NjRfdmFsXyk7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2tl
eV0sIHZhbCk7Ci0gICAgICAvLyBDaGVjayB3aXRoIE1hcCBSZWZsZWN0aW9uCi0gICAgICBtYXBf
a2V5LlNldEludDY0VmFsdWUoa2V5KTsKLSAgICAgIEVYUEVDVF9FUSh0cnVlLCByZWZsZWN0aW9u
LT5Db250YWluc01hcEtleSgKLSAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfc2ludDY0X3NpbnQ2
NCIpLCBtYXBfa2V5KSk7Ci0gICAgfQotICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDx1aW50MzIsIHVp
bnQzMj4gbWFwOwotICAgIG1hcFswXSA9IDA7Ci0gICAgbWFwWzFdID0gMTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDI7IGkrKykgewotICAgICAgc3ViX21lc3NhZ2UgPQotICAgICAgICAgICZy
ZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2ZpeGVkMzJfZml4
ZWQzMiIpLCBpKTsKLSAgICAgIHVpbnQzMiBrZXkgPSBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlv
bigpLT5HZXRVSW50MzIoCi0gICAgICAgICAgKnN1Yl9tZXNzYWdlLCBtYXBfZml4ZWQzMl9maXhl
ZDMyX2tleV8pOwotICAgICAgdWludDMyIHZhbCA9IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9u
KCktPkdldFVJbnQzMigKLSAgICAgICAgICAqc3ViX21lc3NhZ2UsIG1hcF9maXhlZDMyX2ZpeGVk
MzJfdmFsXyk7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2tleV0sIHZhbCk7Ci0gICAgICAvLyBDaGVj
ayB3aXRoIE1hcCBSZWZsZWN0aW9uCi0gICAgICBtYXBfa2V5LlNldFVJbnQzMlZhbHVlKGtleSk7
Ci0gICAgICBFWFBFQ1RfRVEodHJ1ZSwgcmVmbGVjdGlvbi0+Q29udGFpbnNNYXBLZXkoCi0gICAg
ICAgICAgbWVzc2FnZSwgRigibWFwX2ZpeGVkMzJfZml4ZWQzMiIpLCBtYXBfa2V5KSk7Ci0gICAg
fQotICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDx1aW50NjQsIHVpbnQ2ND4gbWFwOwotICAgIG1hcFsw
XSA9IDA7Ci0gICAgbWFwWzFdID0gMTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykg
ewotICAgICAgc3ViX21lc3NhZ2UgPQotICAgICAgICAgICZyZWZsZWN0aW9uLT5HZXRSZXBlYXRl
ZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2ZpeGVkNjRfZml4ZWQ2NCIpLCBpKTsKLSAgICAgIHVp
bnQ2NCBrZXkgPSBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRVSW50NjQoCi0gICAg
ICAgICAgKnN1Yl9tZXNzYWdlLCBtYXBfZml4ZWQ2NF9maXhlZDY0X2tleV8pOwotICAgICAgdWlu
dDY0IHZhbCA9IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldFVJbnQ2NCgKLSAgICAg
ICAgICAqc3ViX21lc3NhZ2UsIG1hcF9maXhlZDY0X2ZpeGVkNjRfdmFsXyk7Ci0gICAgICBFWFBF
Q1RfRVEobWFwW2tleV0sIHZhbCk7Ci0gICAgICAvLyBDaGVjayB3aXRoIE1hcCBSZWZsZWN0aW9u
Ci0gICAgICBtYXBfa2V5LlNldFVJbnQ2NFZhbHVlKGtleSk7Ci0gICAgICBFWFBFQ1RfRVEodHJ1
ZSwgcmVmbGVjdGlvbi0+Q29udGFpbnNNYXBLZXkoCi0gICAgICAgICAgbWVzc2FnZSwgRigibWFw
X2ZpeGVkNjRfZml4ZWQ2NCIpLCBtYXBfa2V5KSk7Ci0gICAgfQotICB9Ci0gIHsKLSAgICBzdGQ6
Om1hcDxpbnQzMiwgaW50MzI+IG1hcDsKLSAgICBtYXBbMF0gPSAwOwotICAgIG1hcFsxXSA9IDE7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgIHN1Yl9tZXNzYWdlID0g
JnJlZmxlY3Rpb24tPkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICAgICAgICBtZXNzYWdlLCBGKCJt
YXBfc2ZpeGVkMzJfc2ZpeGVkMzIiKSwgaSk7Ci0gICAgICBpbnQzMiBrZXkgPSBzdWJfbWVzc2Fn
ZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigKLSAgICAgICAgICAqc3ViX21lc3NhZ2UsIG1h
cF9zZml4ZWQzMl9zZml4ZWQzMl9rZXlfKTsKLSAgICAgIGludDMyIHZhbCA9IHN1Yl9tZXNzYWdl
LT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAgICpzdWJfbWVzc2FnZSwgbWFw
X3NmaXhlZDMyX3NmaXhlZDMyX3ZhbF8pOwotICAgICAgRVhQRUNUX0VRKG1hcFtrZXldLCB2YWwp
OwotICAgICAgLy8gQ2hlY2sgd2l0aCBNYXAgUmVmbGVjdGlvbgotICAgICAgbWFwX2tleS5TZXRJ
bnQzMlZhbHVlKGtleSk7Ci0gICAgICBFWFBFQ1RfRVEodHJ1ZSwgcmVmbGVjdGlvbi0+Q29udGFp
bnNNYXBLZXkoCi0gICAgICAgICAgbWVzc2FnZSwgRigibWFwX3NmaXhlZDMyX3NmaXhlZDMyIiks
IG1hcF9rZXkpKTsKLSAgICB9Ci0gIH0KLSAgewotICAgIHN0ZDo6bWFwPGludDY0LCBpbnQ2ND4g
bWFwOwotICAgIG1hcFswXSA9IDA7Ci0gICAgbWFwWzFdID0gMTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDI7IGkrKykgewotICAgICAgc3ViX21lc3NhZ2UgPSAmcmVmbGVjdGlvbi0+R2V0UmVw
ZWF0ZWRNZXNzYWdlKAotICAgICAgICAgIG1lc3NhZ2UsIEYoIm1hcF9zZml4ZWQ2NF9zZml4ZWQ2
NCIpLCBpKTsKLSAgICAgIGludDY0IGtleSA9IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkt
PkdldEludDY0KAotICAgICAgICAgICpzdWJfbWVzc2FnZSwgbWFwX3NmaXhlZDY0X3NmaXhlZDY0
X2tleV8pOwotICAgICAgaW50NjQgdmFsID0gc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+
R2V0SW50NjQoCi0gICAgICAgICAgKnN1Yl9tZXNzYWdlLCBtYXBfc2ZpeGVkNjRfc2ZpeGVkNjRf
dmFsXyk7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2tleV0sIHZhbCk7Ci0gICAgICAvLyBDaGVjayB3
aXRoIE1hcCBSZWZsZWN0aW9uCi0gICAgICBtYXBfa2V5LlNldEludDY0VmFsdWUoa2V5KTsKLSAg
ICAgIEVYUEVDVF9FUSh0cnVlLCByZWZsZWN0aW9uLT5Db250YWluc01hcEtleSgKLSAgICAgICAg
ICBtZXNzYWdlLCBGKCJtYXBfc2ZpeGVkNjRfc2ZpeGVkNjQiKSwgbWFwX2tleSkpOwotICAgIH0K
LSAgfQotICB7Ci0gICAgc3RkOjptYXA8aW50MzIsIGZsb2F0PiBtYXA7Ci0gICAgbWFwWzBdID0g
MC4wOwotICAgIG1hcFsxXSA9IDEuMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykg
ewotICAgICAgc3ViX21lc3NhZ2UgPQotICAgICAgICAgICZyZWZsZWN0aW9uLT5HZXRSZXBlYXRl
ZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX2ludDMyX2Zsb2F0IiksIGkpOwotICAgICAgaW50MzIg
IGtleSA9IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAg
ICpzdWJfbWVzc2FnZSwgbWFwX2ludDMyX2Zsb2F0X2tleV8pOwotICAgICAgZmxvYXQgdmFsID0g
c3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0RmxvYXQoCi0gICAgICAgICAgKnN1Yl9t
ZXNzYWdlLCBtYXBfaW50MzJfZmxvYXRfdmFsXyk7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2tleV0s
IHZhbCk7Ci0gICAgICAvLyBDaGVjayB3aXRoIE1hcCBSZWZsZWN0aW9uCi0gICAgICBtYXBfa2V5
LlNldEludDMyVmFsdWUoa2V5KTsKLSAgICAgIEVYUEVDVF9FUSh0cnVlLCByZWZsZWN0aW9uLT5D
b250YWluc01hcEtleSgKLSAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJfZmxvYXQiKSwg
bWFwX2tleSkpOwotICAgIH0KLSAgfQotICB7Ci0gICAgc3RkOjptYXA8aW50MzIsIGRvdWJsZT4g
bWFwOwotICAgIG1hcFswXSA9IDAuMDsKLSAgICBtYXBbMV0gPSAxLjA7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgIHN1Yl9tZXNzYWdlID0KLSAgICAgICAgICAmcmVm
bGVjdGlvbi0+R2V0UmVwZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9kb3VibGUi
KSwgaSk7Ci0gICAgICBpbnQzMiAga2V5ID0gc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+
R2V0SW50MzIoCi0gICAgICAgICAgKnN1Yl9tZXNzYWdlLCBtYXBfaW50MzJfZG91YmxlX2tleV8p
OwotICAgICAgZG91YmxlIHZhbCA9IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldERv
dWJsZSgKLSAgICAgICAgICAqc3ViX21lc3NhZ2UsIG1hcF9pbnQzMl9kb3VibGVfdmFsXyk7Ci0g
ICAgICBFWFBFQ1RfRVEobWFwW2tleV0sIHZhbCk7Ci0gICAgICAvLyBDaGVjayB3aXRoIE1hcCBS
ZWZsZWN0aW9uCi0gICAgICBtYXBfa2V5LlNldEludDMyVmFsdWUoa2V5KTsKLSAgICAgIEVYUEVD
VF9FUSh0cnVlLCByZWZsZWN0aW9uLT5Db250YWluc01hcEtleSgKLSAgICAgICAgICBtZXNzYWdl
LCBGKCJtYXBfaW50MzJfZG91YmxlIiksIG1hcF9rZXkpKTsKLSAgICB9Ci0gIH0KLSAgewotICAg
IHN0ZDo6bWFwPGJvb2wsIGJvb2w+IG1hcDsKLSAgICBtYXBbZmFsc2VdID0gZmFsc2U7Ci0gICAg
bWFwW3RydWVdID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotICAg
ICAgc3ViX21lc3NhZ2UgPQotICAgICAgICAgICZyZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3Nh
Z2UobWVzc2FnZSwgRigibWFwX2Jvb2xfYm9vbCIpLCBpKTsKLSAgICAgIGJvb2wga2V5ID0gc3Vi
X21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0Qm9vbCgKLSAgICAgICAgICAqc3ViX21lc3Nh
Z2UsIG1hcF9ib29sX2Jvb2xfa2V5Xyk7Ci0gICAgICBib29sIHZhbCA9IHN1Yl9tZXNzYWdlLT5H
ZXRSZWZsZWN0aW9uKCktPkdldEJvb2woCi0gICAgICAgICAgKnN1Yl9tZXNzYWdlLCBtYXBfYm9v
bF9ib29sX3ZhbF8pOwotICAgICAgRVhQRUNUX0VRKG1hcFtrZXldLCB2YWwpOwotICAgICAgLy8g
Q2hlY2sgd2l0aCBNYXAgUmVmbGVjdGlvbgotICAgICAgbWFwX2tleS5TZXRCb29sVmFsdWUoa2V5
KTsKLSAgICAgIEVYUEVDVF9FUSh0cnVlLCByZWZsZWN0aW9uLT5Db250YWluc01hcEtleSgKLSAg
ICAgICAgICBtZXNzYWdlLCBGKCJtYXBfYm9vbF9ib29sIiksIG1hcF9rZXkpKTsKLSAgICB9Ci0g
IH0KLSAgewotICAgIHN0ZDo6bWFwPHN0cmluZywgc3RyaW5nPiBtYXA7Ci0gICAgbWFwWyIwIl0g
PSAiMCI7Ci0gICAgbWFwWyIxIl0gPSAiMSI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBp
KyspIHsKLSAgICAgIHN1Yl9tZXNzYWdlID0KLSAgICAgICAgICAmcmVmbGVjdGlvbi0+R2V0UmVw
ZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9zdHJpbmdfc3RyaW5nIiksIGkpOwotICAgICAg
c3RyaW5nICBrZXkgPSBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRTdHJpbmcoCi0g
ICAgICAgICAgKnN1Yl9tZXNzYWdlLCBtYXBfc3RyaW5nX3N0cmluZ19rZXlfKTsKLSAgICAgIHN0
cmluZyB2YWwgPSBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRTdHJpbmcoCi0gICAg
ICAgICAgKnN1Yl9tZXNzYWdlLCBtYXBfc3RyaW5nX3N0cmluZ192YWxfKTsKLSAgICAgIEVYUEVD
VF9FUShtYXBba2V5XSwgdmFsKTsKLSAgICAgIC8vIENoZWNrIHdpdGggTWFwIFJlZmxlY3Rpb24K
LSAgICAgIG1hcF9rZXkuU2V0U3RyaW5nVmFsdWUoa2V5KTsKLSAgICAgIEVYUEVDVF9FUSh0cnVl
LCByZWZsZWN0aW9uLT5Db250YWluc01hcEtleSgKLSAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBf
c3RyaW5nX3N0cmluZyIpLCBtYXBfa2V5KSk7Ci0gICAgfQotICB9Ci0gIHsKLSAgICBzdGQ6Om1h
cDxpbnQzMiwgc3RyaW5nPiBtYXA7Ci0gICAgbWFwWzBdID0gIjAiOwotICAgIG1hcFsxXSA9ICIx
IjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotICAgICAgc3ViX21lc3NhZ2Ug
PQotICAgICAgICAgICZyZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2UobWVzc2FnZSwgRigi
bWFwX2ludDMyX2J5dGVzIiksIGkpOwotICAgICAgaW50MzIgIGtleSA9IHN1Yl9tZXNzYWdlLT5H
ZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAgICpzdWJfbWVzc2FnZSwgbWFwX2lu
dDMyX2J5dGVzX2tleV8pOwotICAgICAgc3RyaW5nIHZhbCA9IHN1Yl9tZXNzYWdlLT5HZXRSZWZs
ZWN0aW9uKCktPkdldFN0cmluZygKLSAgICAgICAgICAqc3ViX21lc3NhZ2UsIG1hcF9pbnQzMl9i
eXRlc192YWxfKTsKLSAgICAgIEVYUEVDVF9FUShtYXBba2V5XSwgdmFsKTsKLSAgICAgIC8vIENo
ZWNrIHdpdGggTWFwIFJlZmxlY3Rpb24KLSAgICAgIG1hcF9rZXkuU2V0SW50MzJWYWx1ZShrZXkp
OwotICAgICAgRVhQRUNUX0VRKHRydWUsIHJlZmxlY3Rpb24tPkNvbnRhaW5zTWFwS2V5KAotICAg
ICAgICAgIG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9ieXRlcyIpLCBtYXBfa2V5KSk7Ci0gICAgfQot
ICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDxpbnQzMiwgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvcio+
IG1hcDsKLSAgICBtYXBbMF0gPSBtYXBfZW51bV9iYXJfOwotICAgIG1hcFsxXSA9IG1hcF9lbnVt
X2Jhel87Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgIHN1Yl9tZXNz
YWdlID0gJnJlZmxlY3Rpb24tPkdldFJlcGVhdGVkTWVzc2FnZSgKLSAgICAgICAgICBtZXNzYWdl
LCBGKCJtYXBfaW50MzJfZW51bSIpLCBpKTsKLSAgICAgIGludDMyIGtleSA9IHN1Yl9tZXNzYWdl
LT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKAotICAgICAgICAgICpzdWJfbWVzc2FnZSwgbWFw
X2ludDMyX2VudW1fa2V5Xyk7Ci0gICAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiB2YWwg
PSBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRFbnVtKAotICAgICAgICAgICpzdWJf
bWVzc2FnZSwgbWFwX2ludDMyX2VudW1fdmFsXyk7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2tleV0s
IHZhbCk7Ci0gICAgICAvLyBDaGVjayB3aXRoIE1hcCBSZWZsZWN0aW9uCi0gICAgICBtYXBfa2V5
LlNldEludDMyVmFsdWUoa2V5KTsKLSAgICAgIEVYUEVDVF9FUSh0cnVlLCByZWZsZWN0aW9uLT5D
b250YWluc01hcEtleSgKLSAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJfZW51bSIpLCBt
YXBfa2V5KSk7Ci0gICAgfQotICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDxpbnQzMiwgaW50MzI+IG1h
cDsKLSAgICBtYXBbMF0gPSAwOwotICAgIG1hcFsxXSA9IDE7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAyOyBpKyspIHsKLSAgICAgIHN1Yl9tZXNzYWdlID0gJnJlZmxlY3Rpb24tPkdldFJlcGVh
dGVkTWVzc2FnZSgKLSAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJfZm9yZWlnbl9tZXNz
YWdlIiksIGkpOwotICAgICAgaW50MzIgIGtleSA9IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9u
KCktPkdldEludDMyKAotICAgICAgICAgICpzdWJfbWVzc2FnZSwgbWFwX2ludDMyX2ZvcmVpZ25f
bWVzc2FnZV9rZXlfKTsKLSAgICAgIGNvbnN0IE1lc3NhZ2UmIGZvcmVpZ25fbWVzc2FnZSA9IHN1
Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldE1lc3NhZ2UoCi0gICAgICAgICAgKnN1Yl9t
ZXNzYWdlLCBtYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlX3ZhbF8pOwotICAgICAgaW50MzIgdmFs
ID0gZm9yZWlnbl9tZXNzYWdlLkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoCi0gICAgICAgICAg
Zm9yZWlnbl9tZXNzYWdlLCBmb3JlaWduX2NfKTsKLSAgICAgIEVYUEVDVF9FUShtYXBba2V5XSwg
dmFsKTsKLSAgICAgIC8vIENoZWNrIHdpdGggTWFwIFJlZmxlY3Rpb24KLSAgICAgIG1hcF9rZXku
U2V0SW50MzJWYWx1ZShrZXkpOwotICAgICAgRVhQRUNUX0VRKHRydWUsIHJlZmxlY3Rpb24tPkNv
bnRhaW5zTWFwS2V5KAotICAgICAgICAgIG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9mb3JlaWduX21l
c3NhZ2UiKSwgbWFwX2tleSkpOwotICAgIH0KLSAgfQotfQotCi12b2lkIE1hcFJlZmxlY3Rpb25U
ZXN0ZXI6OkV4cGVjdE1hcEZpZWxkc1NldFZpYVJlZmxlY3Rpb25JdGVyYXRvcigKLSAgICBNZXNz
YWdlKiBtZXNzYWdlKSB7Ci0gIHN0cmluZyBzY3JhdGNoOwotICBzdHJpbmcgc2VyaWFsaXplZDsK
LSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24o
KTsKLQotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKCptZXNzYWdlLCBGKCJt
YXBfaW50MzJfaW50MzIiKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXpl
KCptZXNzYWdlLCBGKCJtYXBfaW50NjRfaW50NjQiKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVj
dGlvbi0+RmllbGRTaXplKCptZXNzYWdlLCBGKCJtYXBfdWludDMyX3VpbnQzMiIpKSk7Ci0gIEFT
U0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUoKm1lc3NhZ2UsIEYoIm1hcF91aW50NjRf
dWludDY0IikpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZSgqbWVzc2Fn
ZSwgRigibWFwX3NpbnQzMl9zaW50MzIiKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+
RmllbGRTaXplKCptZXNzYWdlLCBGKCJtYXBfc2ludDY0X3NpbnQ2NCIpKSk7Ci0gIEFTU0VSVF9F
USgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUoKm1lc3NhZ2UsIEYoIm1hcF9maXhlZDMyX2ZpeGVk
MzIiKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKCptZXNzYWdlLCBG
KCJtYXBfZml4ZWQ2NF9maXhlZDY0IikpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZp
ZWxkU2l6ZSgqbWVzc2FnZSwgRigibWFwX3NmaXhlZDMyX3NmaXhlZDMyIikpKTsKLSAgQVNTRVJU
X0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZSgqbWVzc2FnZSwgRigibWFwX3NmaXhlZDY0X3Nm
aXhlZDY0IikpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZSgqbWVzc2Fn
ZSwgRigibWFwX2ludDMyX2Zsb2F0IikpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZp
ZWxkU2l6ZSgqbWVzc2FnZSwgRigibWFwX2ludDMyX2RvdWJsZSIpKSk7Ci0gIEFTU0VSVF9FUSgy
LCByZWZsZWN0aW9uLT5GaWVsZFNpemUoKm1lc3NhZ2UsIEYoIm1hcF9ib29sX2Jvb2wiKSkpOwot
ICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKCptZXNzYWdlLCBGKCJtYXBfc3Ry
aW5nX3N0cmluZyIpKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUoKm1l
c3NhZ2UsIEYoIm1hcF9pbnQzMl9ieXRlcyIpKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9u
LT5GaWVsZFNpemUoKm1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9lbnVtIikpKTsKLSAgQVNTRVJUX0VR
KDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZSgqbWVzc2FnZSwgRigibWFwX2ludDMyX2ZvcmVpZ25f
bWVzc2FnZSIpKSk7Ci0KLSAgewotICAgIHN0ZDo6bWFwPGludDMyLCBpbnQzMj4gbWFwOwotICAg
IG1hcFswXSA9IDA7Ci0gICAgbWFwWzFdID0gMTsKLSAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgZm9y
IChNYXBJdGVyYXRvciBpdGVyID0gcmVmbGVjdGlvbi0+TWFwQmVnaW4obWVzc2FnZSwgRigibWFw
X2ludDMyX2ludDMyIikpOwotICAgICAgICAgaXRlciAhPSByZWZsZWN0aW9uLT5NYXBFbmQobWVz
c2FnZSwgRigibWFwX2ludDMyX2ludDMyIikpOwotICAgICAgICAgKytpdGVyLCArK3NpemUpIHsK
LSAgICAgIC8vIENoZWNrIGNvbnN0IG1ldGhvZHMgZG8gbm90IGludmFsaWRhdGUgbWFwLgotICAg
ICAgbWVzc2FnZS0+RGVidWdTdHJpbmcoKTsKLSAgICAgIG1lc3NhZ2UtPlNob3J0RGVidWdTdHJp
bmcoKTsKLSAgICAgIG1lc3NhZ2UtPlNlcmlhbGl6ZVRvU3RyaW5nKCZzZXJpYWxpemVkKTsKLSAg
ICAgIG1lc3NhZ2UtPlNwYWNlVXNlZCgpOwotICAgICAgbWVzc2FnZS0+Qnl0ZVNpemUoKTsKLSAg
ICAgIEVYUEVDVF9FUShtYXBbaXRlci5HZXRLZXkoKS5HZXRJbnQzMlZhbHVlKCldLAotICAgICAg
ICAgICAgICAgIGl0ZXIuR2V0VmFsdWVSZWYoKS5HZXRJbnQzMlZhbHVlKCkpOwotICAgIH0KLSAg
ICBFWFBFQ1RfRVEoc2l6ZSwgMik7Ci0gIH0KLSAgewotICAgIHN0ZDo6bWFwPGludDY0LCBpbnQ2
ND4gbWFwOwotICAgIG1hcFswXSA9IDA7Ci0gICAgbWFwWzFdID0gMTsKLSAgICBmb3IgKE1hcEl0
ZXJhdG9yIGl0ZXIgPSByZWZsZWN0aW9uLT5NYXBCZWdpbihtZXNzYWdlLCBGKCJtYXBfaW50NjRf
aW50NjQiKSk7Ci0gICAgICAgICBpdGVyICE9IHJlZmxlY3Rpb24tPk1hcEVuZChtZXNzYWdlLCBG
KCJtYXBfaW50NjRfaW50NjQiKSk7ICsraXRlcikgewotICAgICAgRVhQRUNUX0VRKG1hcFtpdGVy
LkdldEtleSgpLkdldEludDY0VmFsdWUoKV0sCi0gICAgICAgICAgICAgICAgaXRlci5HZXRWYWx1
ZVJlZigpLkdldEludDY0VmFsdWUoKSk7Ci0gICAgfQotICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDx1
aW50MzIsIHVpbnQzMj4gbWFwOwotICAgIG1hcFswXSA9IDA7Ci0gICAgbWFwWzFdID0gMTsKLSAg
ICBmb3IgKE1hcEl0ZXJhdG9yIGl0ZXIgPSByZWZsZWN0aW9uLT5NYXBCZWdpbigKLSAgICAgICAg
ICAgICBtZXNzYWdlLCBGKCJtYXBfdWludDMyX3VpbnQzMiIpKTsKLSAgICAgICAgIGl0ZXIgIT0g
cmVmbGVjdGlvbi0+TWFwRW5kKG1lc3NhZ2UsIEYoIm1hcF91aW50MzJfdWludDMyIikpOwotICAg
ICAgICAgKytpdGVyKSB7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2l0ZXIuR2V0S2V5KCkuR2V0VUlu
dDMyVmFsdWUoKV0sCi0gICAgICAgICAgICAgICAgaXRlci5HZXRWYWx1ZVJlZigpLkdldFVJbnQz
MlZhbHVlKCkpOwotICAgIH0KLSAgfQotICB7Ci0gICAgc3RkOjptYXA8dWludDY0LCB1aW50NjQ+
IG1hcDsKLSAgICBtYXBbMF0gPSAwOwotICAgIG1hcFsxXSA9IDE7Ci0gICAgZm9yIChNYXBJdGVy
YXRvciBpdGVyID0gcmVmbGVjdGlvbi0+TWFwQmVnaW4oCi0gICAgICAgICAgICAgbWVzc2FnZSwg
RigibWFwX3VpbnQ2NF91aW50NjQiKSk7Ci0gICAgICAgICBpdGVyICE9IHJlZmxlY3Rpb24tPk1h
cEVuZChtZXNzYWdlLCBGKCJtYXBfdWludDY0X3VpbnQ2NCIpKTsKLSAgICAgICAgICsraXRlcikg
ewotICAgICAgRVhQRUNUX0VRKG1hcFtpdGVyLkdldEtleSgpLkdldFVJbnQ2NFZhbHVlKCldLAot
ICAgICAgICAgICAgICAgIGl0ZXIuR2V0VmFsdWVSZWYoKS5HZXRVSW50NjRWYWx1ZSgpKTsKLSAg
ICB9Ci0gIH0KLSAgewotICAgIHN0ZDo6bWFwPGludDMyLCBpbnQzMj4gbWFwOwotICAgIG1hcFsw
XSA9IDA7Ci0gICAgbWFwWzFdID0gMTsKLSAgICBmb3IgKE1hcEl0ZXJhdG9yIGl0ZXIgPSByZWZs
ZWN0aW9uLT5NYXBCZWdpbigKLSAgICAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfc2ludDMyX3Np
bnQzMiIpKTsKLSAgICAgICAgIGl0ZXIgIT0gcmVmbGVjdGlvbi0+TWFwRW5kKG1lc3NhZ2UsIEYo
Im1hcF9zaW50MzJfc2ludDMyIikpOwotICAgICAgICAgKytpdGVyKSB7Ci0gICAgICBFWFBFQ1Rf
RVEobWFwW2l0ZXIuR2V0S2V5KCkuR2V0SW50MzJWYWx1ZSgpXSwKLSAgICAgICAgICAgICAgICBp
dGVyLkdldFZhbHVlUmVmKCkuR2V0SW50MzJWYWx1ZSgpKTsKLSAgICB9Ci0gIH0KLSAgewotICAg
IHN0ZDo6bWFwPGludDY0LCBpbnQ2ND4gbWFwOwotICAgIG1hcFswXSA9IDA7Ci0gICAgbWFwWzFd
ID0gMTsKLSAgICBmb3IgKE1hcEl0ZXJhdG9yIGl0ZXIgPSByZWZsZWN0aW9uLT5NYXBCZWdpbigK
LSAgICAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfc2ludDY0X3NpbnQ2NCIpKTsKLSAgICAgICAg
IGl0ZXIgIT0gcmVmbGVjdGlvbi0+TWFwRW5kKG1lc3NhZ2UsIEYoIm1hcF9zaW50NjRfc2ludDY0
IikpOyArK2l0ZXIpIHsKLSAgICAgIEVYUEVDVF9FUShtYXBbaXRlci5HZXRLZXkoKS5HZXRJbnQ2
NFZhbHVlKCldLAotICAgICAgICAgICAgICAgIGl0ZXIuR2V0VmFsdWVSZWYoKS5HZXRJbnQ2NFZh
bHVlKCkpOwotICAgIH0KLSAgfQotICB7Ci0gICAgc3RkOjptYXA8dWludDMyLCB1aW50MzI+IG1h
cDsKLSAgICBtYXBbMF0gPSAwOwotICAgIG1hcFsxXSA9IDE7Ci0gICAgZm9yIChNYXBJdGVyYXRv
ciBpdGVyID0gcmVmbGVjdGlvbi0+TWFwQmVnaW4oCi0gICAgICAgICAgICAgbWVzc2FnZSwgRigi
bWFwX2ZpeGVkMzJfZml4ZWQzMiIpKTsKLSAgICAgICAgIGl0ZXIgIT0gcmVmbGVjdGlvbi0+TWFw
RW5kKG1lc3NhZ2UsIEYoIm1hcF9maXhlZDMyX2ZpeGVkMzIiKSk7Ci0gICAgICAgICArK2l0ZXIp
IHsKLSAgICAgIEVYUEVDVF9FUShtYXBbaXRlci5HZXRLZXkoKS5HZXRVSW50MzJWYWx1ZSgpXSwK
LSAgICAgICAgICAgICAgICBpdGVyLkdldFZhbHVlUmVmKCkuR2V0VUludDMyVmFsdWUoKSk7Ci0g
ICAgfQotICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDx1aW50NjQsIHVpbnQ2ND4gbWFwOwotICAgIG1h
cFswXSA9IDA7Ci0gICAgbWFwWzFdID0gMTsKLSAgICBmb3IgKE1hcEl0ZXJhdG9yIGl0ZXIgPSBy
ZWZsZWN0aW9uLT5NYXBCZWdpbigKLSAgICAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfZml4ZWQ2
NF9maXhlZDY0IikpOwotICAgICAgICAgaXRlciAhPSByZWZsZWN0aW9uLT5NYXBFbmQobWVzc2Fn
ZSwgRigibWFwX2ZpeGVkNjRfZml4ZWQ2NCIpKTsKLSAgICAgICAgICsraXRlcikgewotICAgICAg
RVhQRUNUX0VRKG1hcFtpdGVyLkdldEtleSgpLkdldFVJbnQ2NFZhbHVlKCldLAotICAgICAgICAg
ICAgICAgIGl0ZXIuR2V0VmFsdWVSZWYoKS5HZXRVSW50NjRWYWx1ZSgpKTsKLSAgICB9Ci0gIH0K
LSAgewotICAgIHN0ZDo6bWFwPGludDMyLCBpbnQzMj4gbWFwOwotICAgIG1hcFswXSA9IDA7Ci0g
ICAgbWFwWzFdID0gMTsKLSAgICBmb3IgKE1hcEl0ZXJhdG9yIGl0ZXIgPSByZWZsZWN0aW9uLT5N
YXBCZWdpbigKLSAgICAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfc2ZpeGVkMzJfc2ZpeGVkMzIi
KSk7Ci0gICAgICAgICBpdGVyICE9IHJlZmxlY3Rpb24tPk1hcEVuZChtZXNzYWdlLCBGKCJtYXBf
c2ZpeGVkMzJfc2ZpeGVkMzIiKSk7Ci0gICAgICAgICArK2l0ZXIpIHsKLSAgICAgIEVYUEVDVF9F
UShtYXBbaXRlci5HZXRLZXkoKS5HZXRJbnQzMlZhbHVlKCldLAotICAgICAgICAgICAgICAgIGl0
ZXIuR2V0VmFsdWVSZWYoKS5HZXRJbnQzMlZhbHVlKCkpOwotICAgIH0KLSAgfQotICB7Ci0gICAg
c3RkOjptYXA8aW50MzIsIGZsb2F0PiBtYXA7Ci0gICAgbWFwWzBdID0gMC4wOwotICAgIG1hcFsx
XSA9IDEuMDsKLSAgICBmb3IgKE1hcEl0ZXJhdG9yIGl0ZXIgPSByZWZsZWN0aW9uLT5NYXBCZWdp
bihtZXNzYWdlLCBGKCJtYXBfaW50MzJfZmxvYXQiKSk7Ci0gICAgICAgICBpdGVyICE9IHJlZmxl
Y3Rpb24tPk1hcEVuZChtZXNzYWdlLCBGKCJtYXBfaW50MzJfZmxvYXQiKSk7ICsraXRlcikgewot
ICAgICAgRVhQRUNUX0VRKG1hcFtpdGVyLkdldEtleSgpLkdldEludDMyVmFsdWUoKV0sCi0gICAg
ICAgICAgICAgICAgaXRlci5HZXRWYWx1ZVJlZigpLkdldEZsb2F0VmFsdWUoKSk7Ci0gICAgfQot
ICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDxpbnQzMiwgZG91YmxlPiBtYXA7Ci0gICAgbWFwWzBdID0g
MC4wOwotICAgIG1hcFsxXSA9IDEuMDsKLSAgICBmb3IgKE1hcEl0ZXJhdG9yIGl0ZXIgPSByZWZs
ZWN0aW9uLT5NYXBCZWdpbigKLSAgICAgICAgICAgICBtZXNzYWdlLCBGKCJtYXBfaW50MzJfZG91
YmxlIikpOwotICAgICAgICAgaXRlciAhPSByZWZsZWN0aW9uLT5NYXBFbmQobWVzc2FnZSwgRigi
bWFwX2ludDMyX2RvdWJsZSIpKTsgKytpdGVyKSB7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2l0ZXIu
R2V0S2V5KCkuR2V0SW50MzJWYWx1ZSgpXSwKLSAgICAgICAgICAgICAgICBpdGVyLkdldFZhbHVl
UmVmKCkuR2V0RG91YmxlVmFsdWUoKSk7Ci0gICAgfQotICB9Ci0gIHsKLSAgICBzdGQ6Om1hcDxi
b29sLCBib29sPiBtYXA7Ci0gICAgbWFwW2ZhbHNlXSA9IGZhbHNlOwotICAgIG1hcFt0cnVlXSA9
IHRydWU7Ci0gICAgZm9yIChNYXBJdGVyYXRvciBpdGVyID0gcmVmbGVjdGlvbi0+TWFwQmVnaW4o
bWVzc2FnZSwgRigibWFwX2Jvb2xfYm9vbCIpKTsKLSAgICAgICAgIGl0ZXIgIT0gcmVmbGVjdGlv
bi0+TWFwRW5kKG1lc3NhZ2UsIEYoIm1hcF9ib29sX2Jvb2wiKSk7ICsraXRlcikgewotICAgICAg
RVhQRUNUX0VRKG1hcFtpdGVyLkdldEtleSgpLkdldEJvb2xWYWx1ZSgpXSwKLSAgICAgICAgICAg
ICAgICBpdGVyLkdldFZhbHVlUmVmKCkuR2V0Qm9vbFZhbHVlKCkpOwotICAgIH0KLSAgfQotICB7
Ci0gICAgc3RkOjptYXA8c3RyaW5nLCBzdHJpbmc+IG1hcDsKLSAgICBtYXBbIjAiXSA9ICIwIjsK
LSAgICBtYXBbIjEiXSA9ICIxIjsKLSAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgZm9yIChNYXBJdGVy
YXRvciBpdGVyID0gcmVmbGVjdGlvbi0+TWFwQmVnaW4oCi0gICAgICAgICAgICAgbWVzc2FnZSwg
RigibWFwX3N0cmluZ19zdHJpbmciKSk7Ci0gICAgICAgICBpdGVyICE9IHJlZmxlY3Rpb24tPk1h
cEVuZChtZXNzYWdlLCBGKCJtYXBfc3RyaW5nX3N0cmluZyIpKTsKLSAgICAgICAgICsraXRlciwg
KytzaXplKSB7Ci0gICAgICAvLyBDaGVjayBjb25zdCBtZXRob2RzIGRvIG5vdCBpbnZhbGlkYXRl
IG1hcC4KLSAgICAgIG1lc3NhZ2UtPkRlYnVnU3RyaW5nKCk7Ci0gICAgICBtZXNzYWdlLT5TaG9y
dERlYnVnU3RyaW5nKCk7Ci0gICAgICBtZXNzYWdlLT5TZXJpYWxpemVUb1N0cmluZygmc2VyaWFs
aXplZCk7Ci0gICAgICBtZXNzYWdlLT5TcGFjZVVzZWQoKTsKLSAgICAgIG1lc3NhZ2UtPkJ5dGVT
aXplKCk7Ci0gICAgICBFWFBFQ1RfRVEobWFwW2l0ZXIuR2V0S2V5KCkuR2V0U3RyaW5nVmFsdWUo
KV0sCi0gICAgICAgICAgICAgICAgaXRlci5HZXRWYWx1ZVJlZigpLkdldFN0cmluZ1ZhbHVlKCkp
OwotICAgIH0KLSAgICBFWFBFQ1RfRVEoc2l6ZSwgMik7Ci0gIH0KLSAgewotICAgIHN0ZDo6bWFw
PGludDMyLCBzdHJpbmc+IG1hcDsKLSAgICBtYXBbMF0gPSAiMCI7Ci0gICAgbWFwWzFdID0gIjEi
OwotICAgIGZvciAoTWFwSXRlcmF0b3IgaXRlciA9IHJlZmxlY3Rpb24tPk1hcEJlZ2luKG1lc3Nh
Z2UsIEYoIm1hcF9pbnQzMl9ieXRlcyIpKTsKLSAgICAgICAgIGl0ZXIgIT0gcmVmbGVjdGlvbi0+
TWFwRW5kKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9ieXRlcyIpKTsgKytpdGVyKSB7Ci0gICAgICBF
WFBFQ1RfRVEobWFwW2l0ZXIuR2V0S2V5KCkuR2V0SW50MzJWYWx1ZSgpXSwKLSAgICAgICAgICAg
ICAgICBpdGVyLkdldFZhbHVlUmVmKCkuR2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgfQotICB9Ci0g
IHsKLSAgICBzdGQ6Om1hcDxpbnQzMiwgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvcio+IG1hcDsK
LSAgICBtYXBbMF0gPSBtYXBfZW51bV9iYXJfOwotICAgIG1hcFsxXSA9IG1hcF9lbnVtX2Jhel87
Ci0gICAgZm9yIChNYXBJdGVyYXRvciBpdGVyID0gcmVmbGVjdGlvbi0+TWFwQmVnaW4obWVzc2Fn
ZSwgRigibWFwX2ludDMyX2VudW0iKSk7Ci0gICAgICAgICBpdGVyICE9IHJlZmxlY3Rpb24tPk1h
cEVuZChtZXNzYWdlLCBGKCJtYXBfaW50MzJfZW51bSIpKTsgKytpdGVyKSB7Ci0gICAgICBFWFBF
Q1RfRVEobWFwW2l0ZXIuR2V0S2V5KCkuR2V0SW50MzJWYWx1ZSgpXS0+bnVtYmVyKCksCi0gICAg
ICAgICAgICAgICAgaXRlci5HZXRWYWx1ZVJlZigpLkdldEVudW1WYWx1ZSgpKTsKLSAgICB9Ci0g
IH0KLSAgewotICAgIHN0ZDo6bWFwPGludDMyLCBpbnQzMj4gbWFwOwotICAgIG1hcFswXSA9IDA7
Ci0gICAgbWFwWzFdID0gMTsKLSAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgZm9yIChNYXBJdGVyYXRv
ciBpdGVyID0gcmVmbGVjdGlvbi0+TWFwQmVnaW4oCi0gICAgICAgICAgICAgbWVzc2FnZSwgRigi
bWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSIpKTsKLSAgICAgICAgIGl0ZXIgIT0gcmVmbGVjdGlv
bi0+TWFwRW5kKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UiKSk7Ci0gICAg
ICAgICArK2l0ZXIsICsrc2l6ZSkgewotICAgICAgLy8gQ2hlY2sgY29uc3QgbWV0aG9kcyBkbyBu
b3QgaW52YWxpZGF0ZSBtYXAuCi0gICAgICBtZXNzYWdlLT5EZWJ1Z1N0cmluZygpOwotICAgICAg
bWVzc2FnZS0+U2hvcnREZWJ1Z1N0cmluZygpOwotICAgICAgbWVzc2FnZS0+U2VyaWFsaXplVG9T
dHJpbmcoJnNlcmlhbGl6ZWQpOwotICAgICAgbWVzc2FnZS0+U3BhY2VVc2VkKCk7Ci0gICAgICBt
ZXNzYWdlLT5CeXRlU2l6ZSgpOwotICAgICAgY29uc3QgTWVzc2FnZSYgc3ViX21lc3NhZ2UgPSBp
dGVyLkdldFZhbHVlUmVmKCkuR2V0TWVzc2FnZVZhbHVlKCk7Ci0gICAgICBFWFBFQ1RfRVEobWFw
W2l0ZXIuR2V0S2V5KCkuR2V0SW50MzJWYWx1ZSgpXSwKLSAgICAgICAgICAgICAgICBzdWJfbWVz
c2FnZS5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKHN1Yl9tZXNzYWdlLCBmb3JlaWduX2NfKSk7
Ci0gICAgfQotICAgIEVYUEVDVF9FUShzaXplLCAyKTsKLSAgfQotfQotCi12b2lkIE1hcFJlZmxl
Y3Rpb25UZXN0ZXI6OkV4cGVjdENsZWFyVmlhUmVmbGVjdGlvbigKLSAgICBjb25zdCBNZXNzYWdl
JiBtZXNzYWdlKSB7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLkdl
dFJlZmxlY3Rpb24oKTsKLSAgLy8gTWFwIGZpZWxkcyBhcmUgZW1wdHkuCi0gIEVYUEVDVF9FUSgw
LCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFwX2ludDMyX2ludDMyIikpKTsK
LSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJtYXBfaW50
NjRfaW50NjQiKSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3Nh
Z2UsIEYoIm1hcF91aW50MzJfdWludDMyIikpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24t
PkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJtYXBfdWludDY0X3VpbnQ2NCIpKSk7Ci0gIEVYUEVDVF9F
USgwLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFwX3NpbnQzMl9zaW50MzIi
KSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoIm1h
cF9zaW50NjRfc2ludDY0IikpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6
ZShtZXNzYWdlLCBGKCJtYXBfZml4ZWQzMl9maXhlZDMyIikpKTsKLSAgRVhQRUNUX0VRKDAsIHJl
ZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJtYXBfZml4ZWQ2NF9maXhlZDY0IikpKTsK
LSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJtYXBfc2Zp
eGVkMzJfc2ZpeGVkMzIiKSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+RmllbGRTaXpl
KG1lc3NhZ2UsIEYoIm1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCIpKSk7Ci0gIEVYUEVDVF9FUSgwLCBy
ZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFwX2ludDMyX2Zsb2F0IikpKTsKLSAg
RVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJtYXBfaW50MzJf
ZG91YmxlIikpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdl
LCBGKCJtYXBfYm9vbF9ib29sIikpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxk
U2l6ZShtZXNzYWdlLCBGKCJtYXBfc3RyaW5nX3N0cmluZyIpKSk7Ci0gIEVYUEVDVF9FUSgwLCBy
ZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigibWFwX2ludDMyX2J5dGVzIikpKTsKLSAg
RVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJtYXBfaW50MzJf
ZW51bSIpKSk7Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwg
RigibWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSIpKSk7Ci19Ci0KLXZvaWQgTWFwUmVmbGVjdGlv
blRlc3Rlcjo6RXhwZWN0Q2xlYXJWaWFSZWZsZWN0aW9uSXRlcmF0b3IoCi0gICAgTWVzc2FnZSog
bWVzc2FnZSkgewotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0
UmVmbGVjdGlvbigpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5NYXBCZWdpbihtZXNzYWdl
LCBGKCJtYXBfaW50MzJfaW50MzIiKSkgPT0KLSAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+TWFw
RW5kKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9pbnQzMiIpKSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxl
Y3Rpb24tPk1hcEJlZ2luKG1lc3NhZ2UsIEYoIm1hcF9pbnQ2NF9pbnQ2NCIpKSA9PQotICAgICAg
ICAgICAgICByZWZsZWN0aW9uLT5NYXBFbmQobWVzc2FnZSwgRigibWFwX2ludDY0X2ludDY0Iikp
KTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+TWFwQmVnaW4obWVzc2FnZSwgRigibWFwX3Vp
bnQzMl91aW50MzIiKSkgPT0KLSAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+TWFwRW5kKG1lc3Nh
Z2UsIEYoIm1hcF91aW50MzJfdWludDMyIikpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+
TWFwQmVnaW4obWVzc2FnZSwgRigibWFwX3VpbnQ2NF91aW50NjQiKSkgPT0KLSAgICAgICAgICAg
ICAgcmVmbGVjdGlvbi0+TWFwRW5kKG1lc3NhZ2UsIEYoIm1hcF91aW50NjRfdWludDY0IikpKTsK
LSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+TWFwQmVnaW4obWVzc2FnZSwgRigibWFwX3NpbnQz
Ml9zaW50MzIiKSkgPT0KLSAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+TWFwRW5kKG1lc3NhZ2Us
IEYoIm1hcF9zaW50MzJfc2ludDMyIikpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+TWFw
QmVnaW4obWVzc2FnZSwgRigibWFwX3NpbnQ2NF9zaW50NjQiKSkgPT0KLSAgICAgICAgICAgICAg
cmVmbGVjdGlvbi0+TWFwRW5kKG1lc3NhZ2UsIEYoIm1hcF9zaW50NjRfc2ludDY0IikpKTsKLSAg
RVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+TWFwQmVnaW4obWVzc2FnZSwgRigibWFwX2ZpeGVkMzJf
Zml4ZWQzMiIpKSA9PQotICAgICAgICAgICAgICByZWZsZWN0aW9uLT5NYXBFbmQobWVzc2FnZSwg
RigibWFwX2ZpeGVkMzJfZml4ZWQzMiIpKSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPk1h
cEJlZ2luKG1lc3NhZ2UsIEYoIm1hcF9maXhlZDY0X2ZpeGVkNjQiKSkgPT0KLSAgICAgICAgICAg
ICAgcmVmbGVjdGlvbi0+TWFwRW5kKG1lc3NhZ2UsIEYoIm1hcF9maXhlZDY0X2ZpeGVkNjQiKSkp
OwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5NYXBCZWdpbihtZXNzYWdlLCBGKCJtYXBfc2Zp
eGVkMzJfc2ZpeGVkMzIiKSkgPT0KLSAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+TWFwRW5kKG1l
c3NhZ2UsIEYoIm1hcF9zZml4ZWQzMl9zZml4ZWQzMiIpKSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxl
Y3Rpb24tPk1hcEJlZ2luKG1lc3NhZ2UsIEYoIm1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCIpKSA9PQot
ICAgICAgICAgICAgICByZWZsZWN0aW9uLT5NYXBFbmQobWVzc2FnZSwgRigibWFwX3NmaXhlZDY0
X3NmaXhlZDY0IikpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+TWFwQmVnaW4obWVzc2Fn
ZSwgRigibWFwX2ludDMyX2Zsb2F0IikpID09Ci0gICAgICAgICAgICAgIHJlZmxlY3Rpb24tPk1h
cEVuZChtZXNzYWdlLCBGKCJtYXBfaW50MzJfZmxvYXQiKSkpOwotICBFWFBFQ1RfVFJVRShyZWZs
ZWN0aW9uLT5NYXBCZWdpbihtZXNzYWdlLCBGKCJtYXBfaW50MzJfZG91YmxlIikpID09Ci0gICAg
ICAgICAgICAgIHJlZmxlY3Rpb24tPk1hcEVuZChtZXNzYWdlLCBGKCJtYXBfaW50MzJfZG91Ymxl
IikpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+TWFwQmVnaW4obWVzc2FnZSwgRigibWFw
X2Jvb2xfYm9vbCIpKSA9PQotICAgICAgICAgICAgICByZWZsZWN0aW9uLT5NYXBFbmQobWVzc2Fn
ZSwgRigibWFwX2Jvb2xfYm9vbCIpKSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPk1hcEJl
Z2luKG1lc3NhZ2UsIEYoIm1hcF9zdHJpbmdfc3RyaW5nIikpID09Ci0gICAgICAgICAgICAgIHJl
ZmxlY3Rpb24tPk1hcEVuZChtZXNzYWdlLCBGKCJtYXBfc3RyaW5nX3N0cmluZyIpKSk7Ci0gIEVY
UEVDVF9UUlVFKHJlZmxlY3Rpb24tPk1hcEJlZ2luKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9ieXRl
cyIpKSA9PQotICAgICAgICAgICAgICByZWZsZWN0aW9uLT5NYXBFbmQobWVzc2FnZSwgRigibWFw
X2ludDMyX2J5dGVzIikpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+TWFwQmVnaW4obWVz
c2FnZSwgRigibWFwX2ludDMyX2VudW0iKSkgPT0KLSAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+
TWFwRW5kKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9lbnVtIikpKTsKLSAgRVhQRUNUX1RSVUUocmVm
bGVjdGlvbi0+TWFwQmVnaW4obWVzc2FnZSwgRigibWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSIp
KSA9PQotICAgICAgICAgICAgICByZWZsZWN0aW9uLT5NYXBFbmQobWVzc2FnZSwgRigibWFwX2lu
dDMyX2ZvcmVpZ25fbWVzc2FnZSIpKSk7Ci19Ci0KLXZvaWQgTWFwUmVmbGVjdGlvblRlc3Rlcjo6
RXhwZWN0TWFwRW50cnlDbGVhclZpYVJlZmxlY3Rpb24oCi0gICAgTWVzc2FnZSogbWVzc2FnZSkg
ewotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlv
bigpOwotICBjb25zdCBNZXNzYWdlKiBzdWJfbWVzc2FnZTsKLQotICB7Ci0gICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gRigibWFwX2ludDMyX2ludDMyIik7Ci0gICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBrZXlfZGVzY3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0b3It
Pm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoImtleSIpOwotICAgIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogdmFsdWVfZGVzY3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0b3ItPm1lc3Nh
Z2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gICAgc3ViX21lc3NhZ2UgPSBy
ZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9pbnQzMiIpKTsKLSAg
ICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoKnN1
Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrZXlfZGVzY3JpcHRvcikpOwotICAgIEVYUEVDVF9FUSgwLCBzdWJfbWVzc2Fn
ZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX2Rlc2NyaXB0
b3IpKTsKLSAgfQotICB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0g
RigibWFwX2ludDY0X2ludDY0Iik7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXlfZGVz
Y3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRC
eU5hbWUoImtleSIpOwotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdmFsdWVfZGVzY3JpcHRv
ciA9Ci0gICAgICAgIGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUo
InZhbHVlIik7Ci0gICAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3Nh
Z2UsIEYoIm1hcF9pbnQ2NF9pbnQ2NCIpKTsKLSAgICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2Ut
PkdldFJlZmxlY3Rpb24oKS0+R2V0SW50NjQoKnN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZGVzY3JpcHRvcikp
OwotICAgIEVYUEVDVF9FUSgwLCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQ2
NCgqc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlX2Rlc2NyaXB0b3IpKTsKLSAgfQotICB7Ci0gICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gRigibWFwX3VpbnQzMl91aW50MzIiKTsKLSAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGtleV9kZXNjcmlwdG9yID0KLSAgICAgICAgZGVzY3Jp
cHRvci0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgia2V5Iik7Ci0gICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiB2YWx1ZV9kZXNjcmlwdG9yID0KLSAgICAgICAgZGVzY3JpcHRvci0+
bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgidmFsdWUiKTsKLSAgICBzdWJfbWVzc2Fn
ZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFwX3VpbnQzMl91aW50MzIi
KSk7Ci0gICAgRVhQRUNUX0VRKDAsIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldFVJ
bnQzMigqc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrZXlfZGVzY3JpcHRvcikpOwotICAgIEVYUEVDVF9FUSgwLCBz
dWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRVSW50MzIoKnN1Yl9tZXNzYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWVfZGVzY3JpcHRvcikpOwotICB9Ci0gIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IgPSBGKCJtYXBfdWludDY0X3VpbnQ2NCIpOwotICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvcioga2V5X2Rlc2NyaXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUo
KS0+RmluZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZh
bHVlX2Rlc2NyaXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+Rmlu
ZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICAgIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRk
TWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfdWludDY0X3VpbnQ2NCIpKTsKLSAgICBFWFBFQ1RfRVEo
MCwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0VUludDY0KCpzdWJfbWVzc2FnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtleV9kZXNjcmlwdG9yKSk7Ci0gICAgRVhQRUNUX0VRKDAsIHN1Yl9tZXNzYWdlLT5HZXRSZWZs
ZWN0aW9uKCktPkdldFVJbnQ2NCgqc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV9kZXNjcmlwdG9yKSk7Ci0g
IH0KLSAgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IEYoIm1hcF9z
aW50MzJfc2ludDMyIik7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXlfZGVzY3JpcHRv
ciA9Ci0gICAgICAgIGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUo
ImtleSIpOwotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdmFsdWVfZGVzY3JpcHRvciA9Ci0g
ICAgICAgIGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVl
Iik7Ci0gICAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYo
Im1hcF9zaW50MzJfc2ludDMyIikpOwotICAgIEVYUEVDVF9FUSgwLCBzdWJfbWVzc2FnZS0+R2V0
UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9kZXNjcmlwdG9yKSk7Ci0g
ICAgRVhQRUNUX0VRKDAsIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKCpz
dWJfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVfZGVzY3JpcHRvcikpOwotICB9Ci0gIHsKLSAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBGKCJtYXBfc2ludDY0X3NpbnQ2NCIpOwotICAgIGNv
bnN0IEZpZWxkRGVzY3JpcHRvcioga2V5X2Rlc2NyaXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9y
LT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIHZhbHVlX2Rlc2NyaXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9yLT5tZXNz
YWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICAgIHN1Yl9tZXNzYWdlID0g
cmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfc2ludDY0X3NpbnQ2NCIpKTsK
LSAgICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50NjQo
KnN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXlfZGVzY3JpcHRvcikpOwotICAgIEVYUEVDVF9FUSgwLCBzdWJfbWVz
c2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQ2NCgqc3ViX21lc3NhZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX2Rlc2Ny
aXB0b3IpKTsKLSAgfQotICB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9y
ID0gRigibWFwX2ZpeGVkMzJfZml4ZWQzMiIpOwotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
a2V5X2Rlc2NyaXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+Rmlu
ZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbHVlX2Rl
c2NyaXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxk
QnlOYW1lKCJ2YWx1ZSIpOwotICAgIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2Fn
ZShtZXNzYWdlLCBGKCJtYXBfZml4ZWQzMl9maXhlZDMyIikpOwotICAgIEVYUEVDVF9FUSgwLCBz
dWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRVSW50MzIoKnN1Yl9tZXNzYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5
X2Rlc2NyaXB0b3IpKTsKLSAgICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rp
b24oKS0+R2V0VUludDMyKCpzdWJfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX2Rlc2NyaXB0b3IpKTsKLSAgfQot
ICB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gRigibWFwX2ZpeGVk
NjRfZml4ZWQ2NCIpOwotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioga2V5X2Rlc2NyaXB0b3Ig
PQotICAgICAgICBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJr
ZXkiKTsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbHVlX2Rlc2NyaXB0b3IgPQotICAg
ICAgICBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIp
OwotICAgIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJt
YXBfZml4ZWQ2NF9maXhlZDY0IikpOwotICAgIEVYUEVDVF9FUSgwLCBzdWJfbWVzc2FnZS0+R2V0
UmVmbGVjdGlvbigpLT5HZXRVSW50NjQoKnN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2Rlc2NyaXB0b3IpKTsK
LSAgICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0VUludDY0
KCpzdWJfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlX2Rlc2NyaXB0b3IpKTsKLSAgfQotICB7Ci0gICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gRigibWFwX3NmaXhlZDMyX3NmaXhlZDMyIik7
Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXlfZGVzY3JpcHRvciA9Ci0gICAgICAgIGRl
c2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoImtleSIpOwotICAgIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogdmFsdWVfZGVzY3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0
b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gICAgc3ViX21l
c3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9zZml4ZWQzMl9z
Zml4ZWQzMiIpKTsKLSAgICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24o
KS0+R2V0SW50MzIoKnN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZGVzY3JpcHRvcikpOwotICAgIEVYUEVDVF9F
USgwLCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3ViX21lc3NhZ2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlX2Rlc2NyaXB0b3IpKTsKLSAgfQotICB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gRigibWFwX3NmaXhlZDY0X3NmaXhlZDY0Iik7Ci0gICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBrZXlfZGVzY3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0b3ItPm1lc3Nh
Z2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoImtleSIpOwotICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogdmFsdWVfZGVzY3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlw
ZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gICAgc3ViX21lc3NhZ2UgPSByZWZsZWN0
aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCIpKTsKLSAg
ICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50NjQoKnN1
Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrZXlfZGVzY3JpcHRvcikpOwotICAgIEVYUEVDVF9FUSgwLCBzdWJfbWVzc2Fn
ZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQ2NCgqc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX2Rlc2NyaXB0
b3IpKTsKLSAgfQotICB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0g
RigibWFwX2ludDMyX2Zsb2F0Iik7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXlfZGVz
Y3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRC
eU5hbWUoImtleSIpOwotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdmFsdWVfZGVzY3JpcHRv
ciA9Ci0gICAgICAgIGRlc2NyaXB0b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUo
InZhbHVlIik7Ci0gICAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3Nh
Z2UsIEYoIm1hcF9pbnQzMl9mbG9hdCIpKTsKLSAgICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2Ut
PkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoKnN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZGVzY3JpcHRvcikp
OwotICAgIEVYUEVDVF9FUSgwLCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRGbG9h
dCgqc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlX2Rlc2NyaXB0b3IpKTsKLSAgfQotICB7Ci0gICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gRigibWFwX2ludDMyX2RvdWJsZSIpOwotICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvcioga2V5X2Rlc2NyaXB0b3IgPQotICAgICAgICBkZXNjcmlw
dG9yLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJrZXkiKTsKLSAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIHZhbHVlX2Rlc2NyaXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9yLT5t
ZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJ2YWx1ZSIpOwotICAgIHN1Yl9tZXNzYWdl
ID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZShtZXNzYWdlLCBGKCJtYXBfaW50MzJfZG91YmxlIikp
OwotICAgIEVYUEVDVF9FUSgwLCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQz
Migqc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtleV9kZXNjcmlwdG9yKSk7Ci0gICAgRVhQRUNUX0VRKDAsIHN1Yl9t
ZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldERvdWJsZSgqc3ViX21lc3NhZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV9k
ZXNjcmlwdG9yKSk7Ci0gIH0KLSAgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZGVzY3Jp
cHRvciA9IEYoIm1hcF9ib29sX2Jvb2wiKTsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGtl
eV9kZXNjcmlwdG9yID0KLSAgICAgICAgZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCktPkZpbmRG
aWVsZEJ5TmFtZSgia2V5Iik7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiB2YWx1ZV9kZXNj
cmlwdG9yID0KLSAgICAgICAgZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5
TmFtZSgidmFsdWUiKTsKLSAgICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2Uo
bWVzc2FnZSwgRigibWFwX2Jvb2xfYm9vbCIpKTsKLSAgICBFWFBFQ1RfRVEoZmFsc2UsIHN1Yl9t
ZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldEJvb2woKnN1Yl9tZXNzYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZGVz
Y3JpcHRvcikpOwotICAgIEVYUEVDVF9FUShmYWxzZSwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rp
b24oKS0+R2V0Qm9vbCgqc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX2Rlc2NyaXB0b3IpKTsKLSAgfQot
ICB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gRigibWFwX3N0cmlu
Z19zdHJpbmciKTsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGtleV9kZXNjcmlwdG9yID0K
LSAgICAgICAgZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgia2V5
Iik7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiB2YWx1ZV9kZXNjcmlwdG9yID0KLSAgICAg
ICAgZGVzY3JpcHRvci0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgidmFsdWUiKTsK
LSAgICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigibWFw
X3N0cmluZ19zdHJpbmciKSk7Ci0gICAgRVhQRUNUX0VRKCIiLCBzdWJfbWVzc2FnZS0+R2V0UmVm
bGVjdGlvbigpLT5HZXRTdHJpbmcoKnN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9kZXNjcmlwdG9yKSk7Ci0g
ICAgRVhQRUNUX0VRKCIiLCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRTdHJpbmco
KnN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlX2Rlc2NyaXB0b3IpKTsKLSAgfQotICB7Ci0gICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gRigibWFwX2ludDMyX2J5dGVzIik7Ci0gICAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXlfZGVzY3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0
b3ItPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoImtleSIpOwotICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogdmFsdWVfZGVzY3JpcHRvciA9Ci0gICAgICAgIGRlc2NyaXB0b3ItPm1l
c3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInZhbHVlIik7Ci0gICAgc3ViX21lc3NhZ2Ug
PSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoIm1hcF9pbnQzMl9ieXRlcyIpKTsK
LSAgICBFWFBFQ1RfRVEoMCwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIo
KnN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXlfZGVzY3JpcHRvcikpOwotICAgIEVYUEVDVF9FUSgiIiwgc3ViX21l
c3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0U3RyaW5nKCpzdWJfbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfZGVz
Y3JpcHRvcikpOwotICB9Ci0gIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2NyaXB0
b3IgPSBGKCJtYXBfaW50MzJfZW51bSIpOwotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioga2V5
X2Rlc2NyaXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZp
ZWxkQnlOYW1lKCJrZXkiKTsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbHVlX2Rlc2Ny
aXB0b3IgPQotICAgICAgICBkZXNjcmlwdG9yLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlO
YW1lKCJ2YWx1ZSIpOwotICAgIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+QWRkTWVzc2FnZSht
ZXNzYWdlLCBGKCJtYXBfaW50MzJfZW51bSIpKTsKLSAgICBFWFBFQ1RfRVEoMCwgc3ViX21lc3Nh
Z2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoKnN1Yl9tZXNzYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZGVzY3JpcHRv
cikpOwotICAgIEVYUEVDVF9FUSgwLCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpCi0gICAg
ICAgICAgICAgICAgICAgICAtPkdldEVudW0oKnN1Yl9tZXNzYWdlLCB2YWx1ZV9kZXNjcmlwdG9y
KQotICAgICAgICAgICAgICAgICAgICAgLT5udW1iZXIoKSk7Ci0gIH0KLSAgLy8gTWFwIHVzaW5n
IG1lc3NhZ2UgYXMgdmFsdWUgaGFzIGJlZW4gdGVzdGVkIGluIG90aGVyIHBsYWNlLiBUaHVzLCB3
ZSBkb24ndAotICAvLyB0ZXN0IGl0IGhlcmUuCi19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L21hcF90ZXN0X3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfdGVzdF91dGlsLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYWYwZjRmNGI0ZmU0N2QyZmUwZDdmZjkyNzRl
YjJiYzgyMDI4NDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF90ZXN0X3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0x
LDE1OSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRl
ZiBHT09HTEVfUFJPVE9CVUZfTUFQX1RFU1RfVVRJTF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RP
QlVGX01BUF9URVNUX1VUSUxfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFwX3Vu
aXR0ZXN0LnBiLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LQotbmFtZXNwYWNlIHVuaXR0ZXN0ID0gOjpwcm90b2J1Zl91bml0dGVzdDsKLQotY2xhc3MgTWFw
VGVzdFV0aWwgewotIHB1YmxpYzoKLSAgLy8gU2V0IGV2ZXJ5IGZpZWxkIGluIHRoZSBUZXN0TWFw
IG1lc3NhZ2UgdG8gYSB1bmlxdWUgdmFsdWUuCi0gIHN0YXRpYyB2b2lkIFNldE1hcEZpZWxkcyh1
bml0dGVzdDo6VGVzdE1hcCogbWVzc2FnZSk7Ci0KLSAgLy8gU2V0IGV2ZXJ5IGZpZWxkIGluIHRo
ZSBUZXN0QXJlbmFNYXAgbWVzc2FnZSB0byBhIHVuaXF1ZSB2YWx1ZS4KLSAgc3RhdGljIHZvaWQg
U2V0QXJlbmFNYXBGaWVsZHModW5pdHRlc3Q6OlRlc3RBcmVuYU1hcCogbWVzc2FnZSk7Ci0KLSAg
Ly8gU2V0IGV2ZXJ5IGZpZWxkIGluIHRoZSBtZXNzYWdlIHRvIGEgZGVmYXVsdCB2YWx1ZS4KLSAg
c3RhdGljIHZvaWQgU2V0TWFwRmllbGRzSW5pdGlhbGl6ZWQodW5pdHRlc3Q6OlRlc3RNYXAqIG1l
c3NhZ2UpOwotCi0gIC8vIE1vZGlmeSBhbGwgdGhlIG1hcCBmaWVsZHMgb2YgdGhlIG1lc3NhZ2Ug
KHdoaWNoIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbgotICAvLyBpbml0aWFsaXplZCB3aXRoIFNl
dE1hcEZpZWxkcygpKS4KLSAgc3RhdGljIHZvaWQgTW9kaWZ5TWFwRmllbGRzKHVuaXR0ZXN0OjpU
ZXN0TWFwKiBtZXNzYWdlKTsKLQotICAvLyBDaGVjayB0aGF0IGFsbCBmaWVsZHMgaGF2ZSB0aGUg
dmFsdWVzIHRoYXQgdGhleSBzaG91bGQgaGF2ZSBhZnRlcgotICAvLyBTZXRNYXBGaWVsZHMoKSBp
cyBjYWxsZWQuCi0gIHN0YXRpYyB2b2lkIEV4cGVjdE1hcEZpZWxkc1NldChjb25zdCB1bml0dGVz
dDo6VGVzdE1hcCYgbWVzc2FnZSk7Ci0KLSAgLy8gQ2hlY2sgdGhhdCBhbGwgZmllbGRzIGhhdmUg
dGhlIHZhbHVlcyB0aGF0IHRoZXkgc2hvdWxkIGhhdmUgYWZ0ZXIKLSAgLy8gU2V0TWFwRmllbGRz
KCkgaXMgY2FsbGVkIGZvciBUZXN0QXJlbmFNYXAuCi0gIHN0YXRpYyB2b2lkIEV4cGVjdEFyZW5h
TWFwRmllbGRzU2V0KGNvbnN0IHVuaXR0ZXN0OjpUZXN0QXJlbmFNYXAmIG1lc3NhZ2UpOwotCi0g
IC8vIENoZWNrIHRoYXQgYWxsIGZpZWxkcyBoYXZlIHRoZSB2YWx1ZXMgdGhhdCB0aGV5IHNob3Vs
ZCBoYXZlIGFmdGVyCi0gIC8vIFNldE1hcEZpZWxkc0luaXRpYWxpemVkKCkgaXMgY2FsbGVkLgot
ICBzdGF0aWMgdm9pZCBFeHBlY3RNYXBGaWVsZHNTZXRJbml0aWFsaXplZCgKLSAgICAgIGNvbnN0
IHVuaXR0ZXN0OjpUZXN0TWFwJiBtZXNzYWdlKTsKLQotICAvLyBFeHBlY3QgdGhhdCB0aGUgbWVz
c2FnZSBpcyBtb2RpZmllZCBhcyB3b3VsZCBiZSBleHBlY3RlZCBmcm9tCi0gIC8vIE1vZGlmeU1h
cEZpZWxkcygpLgotICBzdGF0aWMgdm9pZCBFeHBlY3RNYXBGaWVsZHNNb2RpZmllZChjb25zdCB1
bml0dGVzdDo6VGVzdE1hcCYgbWVzc2FnZSk7Ci0KLSAgLy8gQ2hlY2sgdGhhdCBhbGwgZmllbGRz
IGFyZSBlbXB0eS4KLSAgc3RhdGljIHZvaWQgRXhwZWN0Q2xlYXIoY29uc3QgdW5pdHRlc3Q6OlRl
c3RNYXAmIG1lc3NhZ2UpOwotCi0gIC8vIENoZWNrIHRoYXQgYWxsIG1hcCBmaWVsZHMgaGF2ZSB0
aGUgZ2l2ZW4gc2l6ZS4KLSAgc3RhdGljIHZvaWQgRXhwZWN0TWFwc1NpemUoY29uc3QgdW5pdHRl
c3Q6OlRlc3RNYXAmIG1lc3NhZ2UsIGludCBzaXplKTsKLQotICAvLyBHZXQgcG9pbnRlcnMgb2Yg
bWFwIGVudHJpZXMgYXQgZ2l2ZW4gaW5kZXguCi0gIHN0YXRpYyBzdGQ6OnZlY3Rvcjxjb25zdCBN
ZXNzYWdlKj4gR2V0TWFwRW50cmllcygKLSAgICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0TWFwJiBt
ZXNzYWdlLCBpbnQgaW5kZXgpOwotCi0gIC8vIEdldCBwb2ludGVycyBvZiBtYXAgZW50cmllcyBm
cm9tIHJlbGVhc2UuCi0gIHN0YXRpYyBzdGQ6OnZlY3Rvcjxjb25zdCBNZXNzYWdlKj4gR2V0TWFw
RW50cmllc0Zyb21SZWxlYXNlKAotICAgICAgdW5pdHRlc3Q6OlRlc3RNYXAqIG1lc3NhZ2UpOwot
fTsKLQotLy8gTGlrZSBhYm92ZSwgYnV0IHVzZSB0aGUgcmVmbGVjdGlvbiBpbnRlcmZhY2UuCi1j
bGFzcyBNYXBSZWZsZWN0aW9uVGVzdGVyIHsKLSBwdWJsaWM6Ci0gIC8vIGJhc2VfZGVzY3JpcHRv
ciBtdXN0IGJlIGEgZGVzY3JpcHRvciBmb3IgVGVzdE1hcCwgd2hpY2ggaXMgdXNlZCBmb3IKLSAg
Ly8gTWFwUmVmbGVjdGlvblRlc3RlciB0byBmZXRjaCB0aGUgRmllbGREZXNjcmlwdG9ycyBuZWVk
ZWQgdG8gdXNlIHRoZQotICAvLyByZWZsZWN0aW9uIGludGVyZmFjZS4KLSAgZXhwbGljaXQgTWFw
UmVmbGVjdGlvblRlc3Rlcihjb25zdCBEZXNjcmlwdG9yKiBiYXNlX2Rlc2NyaXB0b3IpOwotCi0g
IHZvaWQgU2V0TWFwRmllbGRzVmlhUmVmbGVjdGlvbihNZXNzYWdlKiBtZXNzYWdlKTsKLSAgdm9p
ZCBTZXRNYXBGaWVsZHNWaWFNYXBSZWZsZWN0aW9uKE1lc3NhZ2UqIG1lc3NhZ2UpOwotICB2b2lk
IENsZWFyTWFwRmllbGRzVmlhUmVmbGVjdGlvbihNZXNzYWdlKiBtZXNzYWdlKTsKLSAgdm9pZCBN
b2RpZnlNYXBGaWVsZHNWaWFSZWZsZWN0aW9uKE1lc3NhZ2UqIG1lc3NhZ2UpOwotICB2b2lkIFJl
bW92ZUxhc3RNYXBzVmlhUmVmbGVjdGlvbihNZXNzYWdlKiBtZXNzYWdlKTsKLSAgdm9pZCBSZWxl
YXNlTGFzdE1hcHNWaWFSZWZsZWN0aW9uKE1lc3NhZ2UqIG1lc3NhZ2UpOwotICB2b2lkIFN3YXBN
YXBzVmlhUmVmbGVjdGlvbihNZXNzYWdlKiBtZXNzYWdlKTsKLSAgdm9pZCBNdXRhYmxlVW5rbm93
bkZpZWxkc09mTWFwRmllbGRzVmlhUmVmbGVjdGlvbihNZXNzYWdlKiBtZXNzYWdlKTsKLSAgdm9p
ZCBFeHBlY3RNYXBGaWVsZHNTZXRWaWFSZWZsZWN0aW9uKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2Up
OwotICB2b2lkIEV4cGVjdE1hcEZpZWxkc1NldFZpYVJlZmxlY3Rpb25JdGVyYXRvcihNZXNzYWdl
KiBtZXNzYWdlKTsKLSAgdm9pZCBFeHBlY3RDbGVhclZpYVJlZmxlY3Rpb24oY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZSk7Ci0gIHZvaWQgRXhwZWN0Q2xlYXJWaWFSZWZsZWN0aW9uSXRlcmF0b3IoTWVz
c2FnZSogbWVzc2FnZSk7Ci0gIHZvaWQgRXhwZWN0TWFwRW50cnlDbGVhclZpYVJlZmxlY3Rpb24o
TWVzc2FnZSogbWVzc2FnZSk7Ci0KLSBwcml2YXRlOgotICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IEYoY29uc3Qgc3RyaW5nJiBuYW1lKTsKLQotICBjb25zdCBEZXNjcmlwdG9yKiBiYXNlX2Rlc2Ny
aXB0b3JfOwotCi0gIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIG1hcF9lbnVtX2Jhcl87Ci0g
IGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIG1hcF9lbnVtX2Jhel87Ci0gIGNvbnN0IEVudW1W
YWx1ZURlc2NyaXB0b3IqIG1hcF9lbnVtX2Zvb187Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmb3JlaWduX2NfOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG1hcF9pbnQzMl9pbnQzMl9r
ZXlfOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG1hcF9pbnQzMl9pbnQzMl92YWxfOwotICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIG1hcF9pbnQ2NF9pbnQ2NF9rZXlfOwotICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIG1hcF9pbnQ2NF9pbnQ2NF92YWxfOwotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIG1hcF91aW50MzJfdWludDMyX2tleV87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFw
X3VpbnQzMl91aW50MzJfdmFsXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBtYXBfdWludDY0
X3VpbnQ2NF9rZXlfOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG1hcF91aW50NjRfdWludDY0
X3ZhbF87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX3NpbnQzMl9zaW50MzJfa2V5XzsK
LSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBtYXBfc2ludDMyX3NpbnQzMl92YWxfOwotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIG1hcF9zaW50NjRfc2ludDY0X2tleV87Ci0gIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogbWFwX3NpbnQ2NF9zaW50NjRfdmFsXzsKLSAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBtYXBfZml4ZWQzMl9maXhlZDMyX2tleV87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
bWFwX2ZpeGVkMzJfZml4ZWQzMl92YWxfOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG1hcF9m
aXhlZDY0X2ZpeGVkNjRfa2V5XzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBtYXBfZml4ZWQ2
NF9maXhlZDY0X3ZhbF87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX3NmaXhlZDMyX3Nm
aXhlZDMyX2tleV87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX3NmaXhlZDMyX3NmaXhl
ZDMyX3ZhbF87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX3NmaXhlZDY0X3NmaXhlZDY0
X2tleV87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX3NmaXhlZDY0X3NmaXhlZDY0X3Zh
bF87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX2ludDMyX2Zsb2F0X2tleV87Ci0gIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX2ludDMyX2Zsb2F0X3ZhbF87Ci0gIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogbWFwX2ludDMyX2RvdWJsZV9rZXlfOwotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIG1hcF9pbnQzMl9kb3VibGVfdmFsXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBtYXBf
Ym9vbF9ib29sX2tleV87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX2Jvb2xfYm9vbF92
YWxfOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG1hcF9zdHJpbmdfc3RyaW5nX2tleV87Ci0g
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX3N0cmluZ19zdHJpbmdfdmFsXzsKLSAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBtYXBfaW50MzJfYnl0ZXNfa2V5XzsKLSAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBtYXBfaW50MzJfYnl0ZXNfdmFsXzsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBt
YXBfaW50MzJfZW51bV9rZXlfOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG1hcF9pbnQzMl9l
bnVtX3ZhbF87Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbWFwX2ludDMyX2ZvcmVpZ25fbWVz
c2FnZV9rZXlfOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG1hcF9pbnQzMl9mb3JlaWduX21l
c3NhZ2VfdmFsXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9NQVBfVEVTVF9VVElMX0hf
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF90ZXN0X3V0aWxfaW1wbC5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL21hcF90ZXN0X3V0aWxfaW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiM2JhNGUwNjk5NTI4NmMzMzQ4M2UwYWI2NWNiZDQ2MDAwZGNhNzk2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9tYXBfdGVzdF91dGlsX2ltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MCArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVf
UFJPVE9CVUZfTUFQX1RFU1RfVVRJTF9JTVBMX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZf
TUFQX1RFU1RfVVRJTF9JTVBMX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0K
LQotI2RlZmluZSBFWFBFQ1RfVFJVRSBHT09HTEVfQ0hFQ0sKLSNkZWZpbmUgQVNTRVJUX1RSVUUg
R09PR0xFX0NIRUNLCi0jZGVmaW5lIEVYUEVDVF9GQUxTRShDT05EKSBHT09HTEVfQ0hFQ0soIShD
T05EKSkKLSNkZWZpbmUgRVhQRUNUX0VRIEdPT0dMRV9DSEVDS19FUQotI2RlZmluZSBBU1NFUlRf
RVEgR09PR0xFX0NIRUNLX0VRCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmX3VuaXR0ZXN0IHt9ICAvLyBmb3J3YXJkIGRlY2xhcmF0aW9uCi0KLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci0KLW5hbWVzcGFjZSB1bml0dGVzdCA9IDo6cHJvdG9idWZfdW5pdHRlc3Q7Ci0KLWNs
YXNzIE1hcFRlc3RVdGlsSW1wbCB7Ci0gcHVibGljOgotICAvLyBTZXQgZXZlcnkgZmllbGQgaW4g
dGhlIFRlc3RNYXAgbWVzc2FnZSB0byBhIHVuaXF1ZSB2YWx1ZS4KLSAgdGVtcGxhdGUgPHR5cGVu
YW1lIEVudW1UeXBlLCBFbnVtVHlwZSBlbnVtX3ZhbHVlMCwKLSAgICAgICAgICAgIEVudW1UeXBl
IGVudW1fdmFsdWUxLCB0eXBlbmFtZSBNYXBNZXNzYWdlPgotICBzdGF0aWMgdm9pZCBTZXRNYXBG
aWVsZHMoTWFwTWVzc2FnZSogbWVzc2FnZSk7Ci0KLSAgLy8gU2V0IGV2ZXJ5IGZpZWxkIGluIHRo
ZSBUZXN0QXJlbmFNYXAgbWVzc2FnZSB0byBhIHVuaXF1ZSB2YWx1ZS4KLSAgdGVtcGxhdGUgPHR5
cGVuYW1lIEVudW1UeXBlLCBFbnVtVHlwZSBlbnVtX3ZhbHVlMCwKLSAgICAgICAgICAgIEVudW1U
eXBlIGVudW1fdmFsdWUxLCB0eXBlbmFtZSBNYXBNZXNzYWdlPgotICBzdGF0aWMgdm9pZCBTZXRB
cmVuYU1hcEZpZWxkcyhNYXBNZXNzYWdlKiBtZXNzYWdlKTsKLQotICAvLyBTZXQgZXZlcnkgZmll
bGQgaW4gdGhlIG1lc3NhZ2UgdG8gYSBkZWZhdWx0IHZhbHVlLgotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgTWFwTWVzc2FnZT4KLSAgc3RhdGljIHZvaWQgU2V0TWFwRmllbGRzSW5pdGlhbGl6ZWQoTWFw
TWVzc2FnZSogbWVzc2FnZSk7Ci0KLSAgLy8gTW9kaWZ5IGFsbCB0aGUgbWFwIGZpZWxkcyBvZiB0
aGUgbWVzc2FnZSAod2hpY2ggc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuCi0gIC8vIGluaXRpYWxp
emVkIHdpdGggU2V0TWFwRmllbGRzKCkpLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRW51bVR5cGUs
IEVudW1UeXBlIGVudW1fdmFsdWUsIHR5cGVuYW1lIE1hcE1lc3NhZ2U+Ci0gIHN0YXRpYyB2b2lk
IE1vZGlmeU1hcEZpZWxkcyhNYXBNZXNzYWdlKiBtZXNzYWdlKTsKLQotICAvLyBDaGVjayB0aGF0
IGFsbCBmaWVsZHMgaGF2ZSB0aGUgdmFsdWVzIHRoYXQgdGhleSBzaG91bGQgaGF2ZSBhZnRlcgot
ICAvLyBTZXRNYXBGaWVsZHMoKSBpcyBjYWxsZWQuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBFbnVt
VHlwZSwgRW51bVR5cGUgZW51bV92YWx1ZTAsCi0gICAgICAgICAgICBFbnVtVHlwZSBlbnVtX3Zh
bHVlMSwgdHlwZW5hbWUgTWFwTWVzc2FnZT4KLSAgc3RhdGljIHZvaWQgRXhwZWN0TWFwRmllbGRz
U2V0KGNvbnN0IE1hcE1lc3NhZ2UmIG1lc3NhZ2UpOwotCi0gIC8vIENoZWNrIHRoYXQgYWxsIGZp
ZWxkcyBoYXZlIHRoZSB2YWx1ZXMgdGhhdCB0aGV5IHNob3VsZCBoYXZlIGFmdGVyCi0gIC8vIFNl
dE1hcEZpZWxkcygpIGlzIGNhbGxlZCBmb3IgVGVzdEFyZW5hTWFwLgotICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRW51bVR5cGUsIEVudW1UeXBlIGVudW1fdmFsdWUwLAotICAgICAgICAgICAgRW51bVR5
cGUgZW51bV92YWx1ZTEsIHR5cGVuYW1lIE1hcE1lc3NhZ2U+Ci0gIHN0YXRpYyB2b2lkIEV4cGVj
dEFyZW5hTWFwRmllbGRzU2V0KGNvbnN0IE1hcE1lc3NhZ2UmIG1lc3NhZ2UpOwotCi0gIC8vIENo
ZWNrIHRoYXQgYWxsIGZpZWxkcyBoYXZlIHRoZSB2YWx1ZXMgdGhhdCB0aGV5IHNob3VsZCBoYXZl
IGFmdGVyCi0gIC8vIFNldE1hcEZpZWxkc0luaXRpYWxpemVkKCkgaXMgY2FsbGVkLgotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRW51bVR5cGUsIEVudW1UeXBlIGVudW1fdmFsdWUsIHR5cGVuYW1lIE1h
cE1lc3NhZ2U+Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdE1hcEZpZWxkc1NldEluaXRpYWxpemVkKGNv
bnN0IE1hcE1lc3NhZ2UmIG1lc3NhZ2UpOwotCi0gIC8vIEV4cGVjdCB0aGF0IHRoZSBtZXNzYWdl
IGlzIG1vZGlmaWVkIGFzIHdvdWxkIGJlIGV4cGVjdGVkIGZyb20KLSAgLy8gTW9kaWZ5TWFwRmll
bGRzKCkuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBFbnVtVHlwZSwgRW51bVR5cGUgZW51bV92YWx1
ZTAsCi0gICAgICAgICAgICBFbnVtVHlwZSBlbnVtX3ZhbHVlMSwgdHlwZW5hbWUgTWFwTWVzc2Fn
ZT4KLSAgc3RhdGljIHZvaWQgRXhwZWN0TWFwRmllbGRzTW9kaWZpZWQoY29uc3QgTWFwTWVzc2Fn
ZSYgbWVzc2FnZSk7Ci0KLSAgLy8gQ2hlY2sgdGhhdCBhbGwgZmllbGRzIGFyZSBlbXB0eS4KLSAg
dGVtcGxhdGUgPHR5cGVuYW1lIE1hcE1lc3NhZ2U+Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdENsZWFy
KGNvbnN0IE1hcE1lc3NhZ2UmIG1lc3NhZ2UpOwotCi0gIC8vIC8vIENoZWNrIHRoYXQgYWxsIG1h
cCBmaWVsZHMgaGF2ZSB0aGUgZ2l2ZW4gc2l6ZS4KLSAgLy8gdGVtcGxhdGUgPHR5cGVuYW1lIE1h
cE1lc3NhZ2U+Ci0gIC8vIHN0YXRpYyB2b2lkIEV4cGVjdE1hcHNTaXplKGNvbnN0IE1hcE1lc3Nh
Z2UmIG1lc3NhZ2UsIGludCBzaXplKTsKLQotICAvLyAvLyBHZXQgcG9pbnRlcnMgb2YgbWFwIGVu
dHJpZXMgYXQgZ2l2ZW4gaW5kZXguCi0gIC8vIHN0YXRpYyBzdGQ6OnZlY3Rvcjxjb25zdCBNZXNz
YWdlKj4gR2V0TWFwRW50cmllcygKLSAgLy8gICAgIGNvbnN0IE1hcE1lc3NhZ2UmIG1lc3NhZ2Us
IGludCBpbmRleCk7Ci0KLSAgLy8gLy8gR2V0IHBvaW50ZXJzIG9mIG1hcCBlbnRyaWVzIGZyb20g
cmVsZWFzZS4KLSAgLy8gc3RhdGljIHN0ZDo6dmVjdG9yPGNvbnN0IE1lc3NhZ2UqPiBHZXRNYXBF
bnRyaWVzRnJvbVJlbGVhc2UoCi0gIC8vICAgICBNYXBNZXNzYWdlKiBtZXNzYWdlKTsKLX07Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBFbnVtVHlwZSwgRW51bVR5cGUgZW51bV92YWx1ZTAsCi0gICAg
ICAgICAgRW51bVR5cGUgZW51bV92YWx1ZTEsIHR5cGVuYW1lIE1hcE1lc3NhZ2U+Ci12b2lkIE1h
cFRlc3RVdGlsSW1wbDo6U2V0TWFwRmllbGRzKE1hcE1lc3NhZ2UqIG1lc3NhZ2UpIHsKLSAgLy8g
QWRkIGZpcnN0IGVsZW1lbnQuCi0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfaW50MzJfaW50MzIo
KSlbMF0gPSAwOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2ludDY0X2ludDY0KCkpWzBdID0g
MDsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF91aW50MzJfdWludDMyKCkpWzBdID0gMDsKLSAg
KCptZXNzYWdlLT5tdXRhYmxlX21hcF91aW50NjRfdWludDY0KCkpWzBdID0gMDsKLSAgKCptZXNz
YWdlLT5tdXRhYmxlX21hcF9zaW50MzJfc2ludDMyKCkpWzBdID0gMDsKLSAgKCptZXNzYWdlLT5t
dXRhYmxlX21hcF9zaW50NjRfc2ludDY0KCkpWzBdID0gMDsKLSAgKCptZXNzYWdlLT5tdXRhYmxl
X21hcF9maXhlZDMyX2ZpeGVkMzIoKSlbMF0gPSAwOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFw
X2ZpeGVkNjRfZml4ZWQ2NCgpKVswXSA9IDA7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfc2Zp
eGVkMzJfc2ZpeGVkMzIoKSlbMF0gPSAwOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX3NmaXhl
ZDY0X3NmaXhlZDY0KCkpWzBdID0gMDsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9m
bG9hdCgpKVswXSA9IDAuMDsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9kb3VibGUo
KSlbMF0gPSAwLjA7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfYm9vbF9ib29sKCkpWzBdID0g
ZmFsc2U7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfc3RyaW5nX3N0cmluZygpKVsiMCJdID0g
IjAiOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2ludDMyX2J5dGVzKCkpWzBdID0gIjAiOwot
ICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2ludDMyX2VudW0oKSlbMF0gPSBlbnVtX3ZhbHVlMDsK
LSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UoKSlbMF0uc2V0
X2MoMCk7Ci0KLSAgLy8gQWRkIHNlY29uZCBlbGVtZW50Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9t
YXBfaW50MzJfaW50MzIoKSlbMV0gPSAxOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2ludDY0
X2ludDY0KCkpWzFdID0gMTsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF91aW50MzJfdWludDMy
KCkpWzFdID0gMTsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF91aW50NjRfdWludDY0KCkpWzFd
ID0gMTsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9zaW50MzJfc2ludDMyKCkpWzFdID0gMTsK
LSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9zaW50NjRfc2ludDY0KCkpWzFdID0gMTsKLSAgKCpt
ZXNzYWdlLT5tdXRhYmxlX21hcF9maXhlZDMyX2ZpeGVkMzIoKSlbMV0gPSAxOwotICAoKm1lc3Nh
Z2UtPm11dGFibGVfbWFwX2ZpeGVkNjRfZml4ZWQ2NCgpKVsxXSA9IDE7Ci0gICgqbWVzc2FnZS0+
bXV0YWJsZV9tYXBfc2ZpeGVkMzJfc2ZpeGVkMzIoKSlbMV0gPSAxOwotICAoKm1lc3NhZ2UtPm11
dGFibGVfbWFwX3NmaXhlZDY0X3NmaXhlZDY0KCkpWzFdID0gMTsKLSAgKCptZXNzYWdlLT5tdXRh
YmxlX21hcF9pbnQzMl9mbG9hdCgpKVsxXSA9IDEuMDsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21h
cF9pbnQzMl9kb3VibGUoKSlbMV0gPSAxLjA7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfYm9v
bF9ib29sKCkpWzFdID0gdHJ1ZTsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9zdHJpbmdfc3Ry
aW5nKCkpWyIxIl0gPSAiMSI7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfaW50MzJfYnl0ZXMo
KSlbMV0gPSAiMSI7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfaW50MzJfZW51bSgpKVsxXSA9
IGVudW1fdmFsdWUxOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2ludDMyX2ZvcmVpZ25fbWVz
c2FnZSgpKVsxXS5zZXRfYygxKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVudW1UeXBlLCBF
bnVtVHlwZSBlbnVtX3ZhbHVlMCwKLSAgICAgICAgICBFbnVtVHlwZSBlbnVtX3ZhbHVlMSwgdHlw
ZW5hbWUgTWFwTWVzc2FnZT4KLXZvaWQgTWFwVGVzdFV0aWxJbXBsOjpTZXRBcmVuYU1hcEZpZWxk
cyhNYXBNZXNzYWdlKiBtZXNzYWdlKSB7Ci0gIC8vIEFkZCBmaXJzdCBlbGVtZW50LgotICAoKm1l
c3NhZ2UtPm11dGFibGVfbWFwX2ludDMyX2ludDMyKCkpWzBdID0gMDsKLSAgKCptZXNzYWdlLT5t
dXRhYmxlX21hcF9pbnQ2NF9pbnQ2NCgpKVswXSA9IDA7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9t
YXBfdWludDMyX3VpbnQzMigpKVswXSA9IDA7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfdWlu
dDY0X3VpbnQ2NCgpKVswXSA9IDA7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfc2ludDMyX3Np
bnQzMigpKVswXSA9IDA7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfc2ludDY0X3NpbnQ2NCgp
KVswXSA9IDA7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfZml4ZWQzMl9maXhlZDMyKCkpWzBd
ID0gMDsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9maXhlZDY0X2ZpeGVkNjQoKSlbMF0gPSAw
OwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX3NmaXhlZDMyX3NmaXhlZDMyKCkpWzBdID0gMDsK
LSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9zZml4ZWQ2NF9zZml4ZWQ2NCgpKVswXSA9IDA7Ci0g
ICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfaW50MzJfZmxvYXQoKSlbMF0gPSAwLjA7Ci0gICgqbWVz
c2FnZS0+bXV0YWJsZV9tYXBfaW50MzJfZG91YmxlKCkpWzBdID0gMC4wOwotICAoKm1lc3NhZ2Ut
Pm11dGFibGVfbWFwX2Jvb2xfYm9vbCgpKVswXSA9IGZhbHNlOwotICAoKm1lc3NhZ2UtPm11dGFi
bGVfbWFwX3N0cmluZ19zdHJpbmcoKSlbIjAiXSA9ICIwIjsKLSAgKCptZXNzYWdlLT5tdXRhYmxl
X21hcF9pbnQzMl9ieXRlcygpKVswXSA9ICIwIjsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9p
bnQzMl9lbnVtKCkpWzBdID0gZW51bV92YWx1ZTA7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBf
aW50MzJfZm9yZWlnbl9tZXNzYWdlKCkpWzBdLnNldF9jKDApOwotICAoKm1lc3NhZ2UtPm11dGFi
bGVfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZV9ub19hcmVuYSgpKVswXS5zZXRfYygwKTsKLQot
ICAvLyBBZGQgc2Vjb25kIGVsZW1lbnQKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9p
bnQzMigpKVsxXSA9IDE7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfaW50NjRfaW50NjQoKSlb
MV0gPSAxOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX3VpbnQzMl91aW50MzIoKSlbMV0gPSAx
OwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX3VpbnQ2NF91aW50NjQoKSlbMV0gPSAxOwotICAo
Km1lc3NhZ2UtPm11dGFibGVfbWFwX3NpbnQzMl9zaW50MzIoKSlbMV0gPSAxOwotICAoKm1lc3Nh
Z2UtPm11dGFibGVfbWFwX3NpbnQ2NF9zaW50NjQoKSlbMV0gPSAxOwotICAoKm1lc3NhZ2UtPm11
dGFibGVfbWFwX2ZpeGVkMzJfZml4ZWQzMigpKVsxXSA9IDE7Ci0gICgqbWVzc2FnZS0+bXV0YWJs
ZV9tYXBfZml4ZWQ2NF9maXhlZDY0KCkpWzFdID0gMTsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21h
cF9zZml4ZWQzMl9zZml4ZWQzMigpKVsxXSA9IDE7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBf
c2ZpeGVkNjRfc2ZpeGVkNjQoKSlbMV0gPSAxOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2lu
dDMyX2Zsb2F0KCkpWzFdID0gMS4wOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2ludDMyX2Rv
dWJsZSgpKVsxXSA9IDEuMDsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9ib29sX2Jvb2woKSlb
MV0gPSB0cnVlOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX3N0cmluZ19zdHJpbmcoKSlbIjEi
XSA9ICIxIjsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9ieXRlcygpKVsxXSA9ICIx
IjsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9lbnVtKCkpWzFdID0gZW51bV92YWx1
ZTE7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlKCkpWzFd
LnNldF9jKDEpOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2Fn
ZV9ub19hcmVuYSgpKVsxXS5zZXRfYygxKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE1hcE1l
c3NhZ2U+Ci12b2lkIE1hcFRlc3RVdGlsSW1wbDo6U2V0TWFwRmllbGRzSW5pdGlhbGl6ZWQoTWFw
TWVzc2FnZSogbWVzc2FnZSkgewotICAvLyBBZGQgZmlyc3QgZWxlbWVudCB1c2luZyBicmFja2V0
IG9wZXJhdG9yLCB3aGljaCBzaG91bGQgYXNzaWduIGRlZmF1bHQKLSAgLy8gdmFsdWUgYXV0b21h
dGljYWxseS4KLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9pbnQzMigpKVswXTsKLSAg
KCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQ2NF9pbnQ2NCgpKVswXTsKLSAgKCptZXNzYWdlLT5t
dXRhYmxlX21hcF91aW50MzJfdWludDMyKCkpWzBdOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFw
X3VpbnQ2NF91aW50NjQoKSlbMF07Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfc2ludDMyX3Np
bnQzMigpKVswXTsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9zaW50NjRfc2ludDY0KCkpWzBd
OwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2ZpeGVkMzJfZml4ZWQzMigpKVswXTsKLSAgKCpt
ZXNzYWdlLT5tdXRhYmxlX21hcF9maXhlZDY0X2ZpeGVkNjQoKSlbMF07Ci0gICgqbWVzc2FnZS0+
bXV0YWJsZV9tYXBfc2ZpeGVkMzJfc2ZpeGVkMzIoKSlbMF07Ci0gICgqbWVzc2FnZS0+bXV0YWJs
ZV9tYXBfc2ZpeGVkNjRfc2ZpeGVkNjQoKSlbMF07Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBf
aW50MzJfZmxvYXQoKSlbMF07Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfaW50MzJfZG91Ymxl
KCkpWzBdOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX2Jvb2xfYm9vbCgpKVswXTsKLSAgKCpt
ZXNzYWdlLT5tdXRhYmxlX21hcF9zdHJpbmdfc3RyaW5nKCkpWyIwIl07Ci0gICgqbWVzc2FnZS0+
bXV0YWJsZV9tYXBfaW50MzJfYnl0ZXMoKSlbMF07Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBf
aW50MzJfZW51bSgpKVswXTsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9mb3JlaWdu
X21lc3NhZ2UoKSlbMF07Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbnVtVHlwZSwgRW51bVR5
cGUgZW51bV92YWx1ZSwgdHlwZW5hbWUgTWFwTWVzc2FnZT4KLXZvaWQgTWFwVGVzdFV0aWxJbXBs
OjpNb2RpZnlNYXBGaWVsZHMoTWFwTWVzc2FnZSogbWVzc2FnZSkgewotICAoKm1lc3NhZ2UtPm11
dGFibGVfbWFwX2ludDMyX2ludDMyKCkpWzFdID0gMjsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21h
cF9pbnQ2NF9pbnQ2NCgpKVsxXSA9IDI7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfdWludDMy
X3VpbnQzMigpKVsxXSA9IDI7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfdWludDY0X3VpbnQ2
NCgpKVsxXSA9IDI7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfc2ludDMyX3NpbnQzMigpKVsx
XSA9IDI7Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfc2ludDY0X3NpbnQ2NCgpKVsxXSA9IDI7
Ci0gICgqbWVzc2FnZS0+bXV0YWJsZV9tYXBfZml4ZWQzMl9maXhlZDMyKCkpWzFdID0gMjsKLSAg
KCptZXNzYWdlLT5tdXRhYmxlX21hcF9maXhlZDY0X2ZpeGVkNjQoKSlbMV0gPSAyOwotICAoKm1l
c3NhZ2UtPm11dGFibGVfbWFwX3NmaXhlZDMyX3NmaXhlZDMyKCkpWzFdID0gMjsKLSAgKCptZXNz
YWdlLT5tdXRhYmxlX21hcF9zZml4ZWQ2NF9zZml4ZWQ2NCgpKVsxXSA9IDI7Ci0gICgqbWVzc2Fn
ZS0+bXV0YWJsZV9tYXBfaW50MzJfZmxvYXQoKSlbMV0gPSAyLjA7Ci0gICgqbWVzc2FnZS0+bXV0
YWJsZV9tYXBfaW50MzJfZG91YmxlKCkpWzFdID0gMi4wOwotICAoKm1lc3NhZ2UtPm11dGFibGVf
bWFwX2Jvb2xfYm9vbCgpKVsxXSA9IGZhbHNlOwotICAoKm1lc3NhZ2UtPm11dGFibGVfbWFwX3N0
cmluZ19zdHJpbmcoKSlbIjEiXSA9ICIyIjsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQz
Ml9ieXRlcygpKVsxXSA9ICIyIjsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9lbnVt
KCkpWzFdID0gZW51bV92YWx1ZTsKLSAgKCptZXNzYWdlLT5tdXRhYmxlX21hcF9pbnQzMl9mb3Jl
aWduX21lc3NhZ2UoKSlbMV0uc2V0X2MoMik7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBNYXBN
ZXNzYWdlPgotdm9pZCBNYXBUZXN0VXRpbEltcGw6OkV4cGVjdENsZWFyKGNvbnN0IE1hcE1lc3Nh
Z2UmIG1lc3NhZ2UpIHsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX2ludDMyX2ludDMyKCku
c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX2ludDY0X2ludDY0KCkuc2l6ZSgp
KTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX3VpbnQzMl91aW50MzIoKS5zaXplKCkpOwot
ICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfdWludDY0X3VpbnQ2NCgpLnNpemUoKSk7Ci0gIEVY
UEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9zaW50MzJfc2ludDMyKCkuc2l6ZSgpKTsKLSAgRVhQRUNU
X0VRKDAsIG1lc3NhZ2UubWFwX3NpbnQ2NF9zaW50NjQoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEo
MCwgbWVzc2FnZS5tYXBfZml4ZWQzMl9maXhlZDMyKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAs
IG1lc3NhZ2UubWFwX2ZpeGVkNjRfZml4ZWQ2NCgpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBt
ZXNzYWdlLm1hcF9zZml4ZWQzMl9zZml4ZWQzMigpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBt
ZXNzYWdlLm1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCgpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBt
ZXNzYWdlLm1hcF9pbnQzMl9mbG9hdCgpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdl
Lm1hcF9pbnQzMl9kb3VibGUoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBf
Ym9vbF9ib29sKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX3N0cmluZ19z
dHJpbmcoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfaW50MzJfYnl0ZXMo
KS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfaW50MzJfZW51bSgpLnNpemUo
KSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UoKS5z
aXplKCkpOwotfQotCi0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVudW1UeXBlLCBFbnVtVHlwZSBl
bnVtX3ZhbHVlMCwKLSAgICAgICAgICBFbnVtVHlwZSBlbnVtX3ZhbHVlMSwgdHlwZW5hbWUgTWFw
TWVzc2FnZT4KLXZvaWQgTWFwVGVzdFV0aWxJbXBsOjpFeHBlY3RNYXBGaWVsZHNTZXQoY29uc3Qg
TWFwTWVzc2FnZSYgbWVzc2FnZSkgewotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfaW50MzJf
aW50MzIoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfaW50NjRfaW50NjQo
KS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfdWludDMyX3VpbnQzMigpLnNp
emUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF91aW50NjRfdWludDY0KCkuc2l6ZSgp
KTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX3NpbnQzMl9zaW50MzIoKS5zaXplKCkpOwot
ICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfc2ludDY0X3NpbnQ2NCgpLnNpemUoKSk7Ci0gIEVY
UEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9maXhlZDMyX2ZpeGVkMzIoKS5zaXplKCkpOwotICBFWFBF
Q1RfRVEoMiwgbWVzc2FnZS5tYXBfZml4ZWQ2NF9maXhlZDY0KCkuc2l6ZSgpKTsKLSAgRVhQRUNU
X0VRKDIsIG1lc3NhZ2UubWFwX3NmaXhlZDMyX3NmaXhlZDMyKCkuc2l6ZSgpKTsKLSAgRVhQRUNU
X0VRKDIsIG1lc3NhZ2UubWFwX3NmaXhlZDY0X3NmaXhlZDY0KCkuc2l6ZSgpKTsKLSAgRVhQRUNU
X0VRKDIsIG1lc3NhZ2UubWFwX2ludDMyX2Zsb2F0KCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDIs
IG1lc3NhZ2UubWFwX2ludDMyX2RvdWJsZSgpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNz
YWdlLm1hcF9ib29sX2Jvb2woKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBf
c3RyaW5nX3N0cmluZygpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9pbnQz
Ml9ieXRlcygpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9pbnQzMl9lbnVt
KCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX2ludDMyX2ZvcmVpZ25fbWVz
c2FnZSgpLnNpemUoKSk7Ci0KLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX2ludDMyX2ludDMy
KCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfaW50NjRfaW50NjQoKS5hdCgw
KSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF91aW50MzJfdWludDMyKCkuYXQoMCkpOwot
ICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfdWludDY0X3VpbnQ2NCgpLmF0KDApKTsKLSAgRVhQ
RUNUX0VRKDAsIG1lc3NhZ2UubWFwX3NpbnQzMl9zaW50MzIoKS5hdCgwKSk7Ci0gIEVYUEVDVF9F
USgwLCBtZXNzYWdlLm1hcF9zaW50NjRfc2ludDY0KCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwg
bWVzc2FnZS5tYXBfZml4ZWQzMl9maXhlZDMyKCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwgbWVz
c2FnZS5tYXBfZml4ZWQ2NF9maXhlZDY0KCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2Fn
ZS5tYXBfc2ZpeGVkMzJfc2ZpeGVkMzIoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdl
Lm1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCgpLmF0KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2Uu
bWFwX2ludDMyX2Zsb2F0KCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfaW50
MzJfZG91YmxlKCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoZmFsc2UsIG1lc3NhZ2UubWFwX2Jvb2xf
Ym9vbCgpLmF0KDApKTsKLSAgRVhQRUNUX0VRKCIwIiwgbWVzc2FnZS5tYXBfc3RyaW5nX3N0cmlu
ZygpLmF0KCIwIikpOwotICBFWFBFQ1RfRVEoIjAiLCBtZXNzYWdlLm1hcF9pbnQzMl9ieXRlcygp
LmF0KDApKTsKLSAgRVhQRUNUX0VRKGVudW1fdmFsdWUwLCBtZXNzYWdlLm1hcF9pbnQzMl9lbnVt
KCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfaW50MzJfZm9yZWlnbl9tZXNz
YWdlKCkuYXQoMCkuYygpKTsKLQotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5tYXBfaW50MzJfaW50
MzIoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF9pbnQ2NF9pbnQ2NCgpLmF0
KDEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX3VpbnQzMl91aW50MzIoKS5hdCgxKSk7
Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF91aW50NjRfdWludDY0KCkuYXQoMSkpOwotICBF
WFBFQ1RfRVEoMSwgbWVzc2FnZS5tYXBfc2ludDMyX3NpbnQzMigpLmF0KDEpKTsKLSAgRVhQRUNU
X0VRKDEsIG1lc3NhZ2UubWFwX3NpbnQ2NF9zaW50NjQoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgx
LCBtZXNzYWdlLm1hcF9maXhlZDMyX2ZpeGVkMzIoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgxLCBt
ZXNzYWdlLm1hcF9maXhlZDY0X2ZpeGVkNjQoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNz
YWdlLm1hcF9zZml4ZWQzMl9zZml4ZWQzMigpLmF0KDEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3Nh
Z2UubWFwX3NmaXhlZDY0X3NmaXhlZDY0KCkuYXQoMSkpOwotICBFWFBFQ1RfRVEoMSwgbWVzc2Fn
ZS5tYXBfaW50MzJfZmxvYXQoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF9p
bnQzMl9kb3VibGUoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSh0cnVlLCBtZXNzYWdlLm1hcF9ib29s
X2Jvb2woKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgiMSIsIG1lc3NhZ2UubWFwX3N0cmluZ19zdHJp
bmcoKS5hdCgiMSIpKTsKLSAgRVhQRUNUX0VRKCIxIiwgbWVzc2FnZS5tYXBfaW50MzJfYnl0ZXMo
KS5hdCgxKSk7Ci0gIEVYUEVDVF9FUShlbnVtX3ZhbHVlMSwgbWVzc2FnZS5tYXBfaW50MzJfZW51
bSgpLmF0KDEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2ZvcmVpZ25fbWVz
c2FnZSgpLmF0KDEpLmMoKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbnVtVHlwZSwgRW51
bVR5cGUgZW51bV92YWx1ZTAsCi0gICAgICAgICAgRW51bVR5cGUgZW51bV92YWx1ZTEsIHR5cGVu
YW1lIE1hcE1lc3NhZ2U+Ci12b2lkIE1hcFRlc3RVdGlsSW1wbDo6RXhwZWN0QXJlbmFNYXBGaWVs
ZHNTZXQoY29uc3QgTWFwTWVzc2FnZSYgbWVzc2FnZSkgewotICBFWFBFQ1RfRVEoMiwgbWVzc2Fn
ZS5tYXBfaW50MzJfaW50MzIoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBf
aW50NjRfaW50NjQoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfdWludDMy
X3VpbnQzMigpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF91aW50NjRfdWlu
dDY0KCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX3NpbnQzMl9zaW50MzIo
KS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfc2ludDY0X3NpbnQ2NCgpLnNp
emUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9maXhlZDMyX2ZpeGVkMzIoKS5zaXpl
KCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfZml4ZWQ2NF9maXhlZDY0KCkuc2l6ZSgp
KTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX3NmaXhlZDMyX3NmaXhlZDMyKCkuc2l6ZSgp
KTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX3NmaXhlZDY0X3NmaXhlZDY0KCkuc2l6ZSgp
KTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX2ludDMyX2Zsb2F0KCkuc2l6ZSgpKTsKLSAg
RVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX2ludDMyX2RvdWJsZSgpLnNpemUoKSk7Ci0gIEVYUEVD
VF9FUSgyLCBtZXNzYWdlLm1hcF9ib29sX2Jvb2woKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwg
bWVzc2FnZS5tYXBfc3RyaW5nX3N0cmluZygpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNz
YWdlLm1hcF9pbnQzMl9ieXRlcygpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1h
cF9pbnQzMl9lbnVtKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX2ludDMy
X2ZvcmVpZ25fbWVzc2FnZSgpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9p
bnQzMl9mb3JlaWduX21lc3NhZ2Vfbm9fYXJlbmEoKS5zaXplKCkpOwotCi0gIEVYUEVDVF9FUSgw
LCBtZXNzYWdlLm1hcF9pbnQzMl9pbnQzMigpLmF0KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UubWFwX2ludDY0X2ludDY0KCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBf
dWludDMyX3VpbnQzMigpLmF0KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX3VpbnQ2
NF91aW50NjQoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9zaW50MzJfc2lu
dDMyKCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfc2ludDY0X3NpbnQ2NCgp
LmF0KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX2ZpeGVkMzJfZml4ZWQzMigpLmF0
KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX2ZpeGVkNjRfZml4ZWQ2NCgpLmF0KDAp
KTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX3NmaXhlZDMyX3NmaXhlZDMyKCkuYXQoMCkp
OwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfc2ZpeGVkNjRfc2ZpeGVkNjQoKS5hdCgwKSk7
Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9pbnQzMl9mbG9hdCgpLmF0KDApKTsKLSAgRVhQ
RUNUX0VRKDAsIG1lc3NhZ2UubWFwX2ludDMyX2RvdWJsZSgpLmF0KDApKTsKLSAgRVhQRUNUX0VR
KGZhbHNlLCBtZXNzYWdlLm1hcF9ib29sX2Jvb2woKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgiMCIs
IG1lc3NhZ2UubWFwX3N0cmluZ19zdHJpbmcoKS5hdCgiMCIpKTsKLSAgRVhQRUNUX0VRKCIwIiwg
bWVzc2FnZS5tYXBfaW50MzJfYnl0ZXMoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUShlbnVtX3ZhbHVl
MCwgbWVzc2FnZS5tYXBfaW50MzJfZW51bSgpLmF0KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZSgpLmF0KDApLmMoKSk7Ci0gIEVYUEVDVF9FUSgw
LCBtZXNzYWdlLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2Vfbm9fYXJlbmEoKS5hdCgwKS5jKCkp
OwotCi0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF9pbnQzMl9pbnQzMigpLmF0KDEpKTsKLSAg
RVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDY0X2ludDY0KCkuYXQoMSkpOwotICBFWFBFQ1Rf
RVEoMSwgbWVzc2FnZS5tYXBfdWludDMyX3VpbnQzMigpLmF0KDEpKTsKLSAgRVhQRUNUX0VRKDEs
IG1lc3NhZ2UubWFwX3VpbnQ2NF91aW50NjQoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNz
YWdlLm1hcF9zaW50MzJfc2ludDMyKCkuYXQoMSkpOwotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5t
YXBfc2ludDY0X3NpbnQ2NCgpLmF0KDEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2Zp
eGVkMzJfZml4ZWQzMigpLmF0KDEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ZpeGVk
NjRfZml4ZWQ2NCgpLmF0KDEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX3NmaXhlZDMy
X3NmaXhlZDMyKCkuYXQoMSkpOwotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5tYXBfc2ZpeGVkNjRf
c2ZpeGVkNjQoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF9pbnQzMl9mbG9h
dCgpLmF0KDEpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2RvdWJsZSgpLmF0
KDEpKTsKLSAgRVhQRUNUX0VRKHRydWUsIG1lc3NhZ2UubWFwX2Jvb2xfYm9vbCgpLmF0KDEpKTsK
LSAgRVhQRUNUX0VRKCIxIiwgbWVzc2FnZS5tYXBfc3RyaW5nX3N0cmluZygpLmF0KCIxIikpOwot
ICBFWFBFQ1RfRVEoIjEiLCBtZXNzYWdlLm1hcF9pbnQzMl9ieXRlcygpLmF0KDEpKTsKLSAgRVhQ
RUNUX0VRKGVudW1fdmFsdWUxLCBtZXNzYWdlLm1hcF9pbnQzMl9lbnVtKCkuYXQoMSkpOwotICBF
WFBFQ1RfRVEoMSwgbWVzc2FnZS5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlKCkuYXQoMSkuYygp
KTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZV9ub19h
cmVuYSgpLmF0KDEpLmMoKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbnVtVHlwZSwgRW51
bVR5cGUgZW51bV92YWx1ZSwgdHlwZW5hbWUgTWFwTWVzc2FnZT4KLXZvaWQgTWFwVGVzdFV0aWxJ
bXBsOjpFeHBlY3RNYXBGaWVsZHNTZXRJbml0aWFsaXplZCgKLSAgICBjb25zdCBNYXBNZXNzYWdl
JiBtZXNzYWdlKSB7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF9pbnQzMl9pbnQzMigpLnNp
emUoKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF9pbnQ2NF9pbnQ2NCgpLnNpemUoKSk7
Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF91aW50MzJfdWludDMyKCkuc2l6ZSgpKTsKLSAg
RVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX3VpbnQ2NF91aW50NjQoKS5zaXplKCkpOwotICBFWFBF
Q1RfRVEoMSwgbWVzc2FnZS5tYXBfc2ludDMyX3NpbnQzMigpLnNpemUoKSk7Ci0gIEVYUEVDVF9F
USgxLCBtZXNzYWdlLm1hcF9zaW50NjRfc2ludDY0KCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEs
IG1lc3NhZ2UubWFwX2ZpeGVkMzJfZml4ZWQzMigpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgxLCBt
ZXNzYWdlLm1hcF9maXhlZDY0X2ZpeGVkNjQoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMSwgbWVz
c2FnZS5tYXBfc2ZpeGVkMzJfc2ZpeGVkMzIoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMSwgbWVz
c2FnZS5tYXBfc2ZpeGVkNjRfc2ZpeGVkNjQoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMSwgbWVz
c2FnZS5tYXBfaW50MzJfZmxvYXQoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5t
YXBfaW50MzJfZG91YmxlKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2Jv
b2xfYm9vbCgpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLm1hcF9zdHJpbmdfc3Ry
aW5nKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2J5dGVzKCku
c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UubWFwX2ludDMyX2VudW0oKS5zaXplKCkp
OwotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5tYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlKCkuc2l6
ZSgpKTsKLQotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfaW50MzJfaW50MzIoKS5hdCgwKSk7
Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9pbnQ2NF9pbnQ2NCgpLmF0KDApKTsKLSAgRVhQ
RUNUX0VRKDAsIG1lc3NhZ2UubWFwX3VpbnQzMl91aW50MzIoKS5hdCgwKSk7Ci0gIEVYUEVDVF9F
USgwLCBtZXNzYWdlLm1hcF91aW50NjRfdWludDY0KCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwg
bWVzc2FnZS5tYXBfc2ludDMyX3NpbnQzMigpLmF0KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UubWFwX3NpbnQ2NF9zaW50NjQoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1h
cF9maXhlZDMyX2ZpeGVkMzIoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9m
aXhlZDY0X2ZpeGVkNjQoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9zZml4
ZWQzMl9zZml4ZWQzMigpLmF0KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX3NmaXhl
ZDY0X3NmaXhlZDY0KCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfaW50MzJf
ZmxvYXQoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9pbnQzMl9kb3VibGUo
KS5hdCgwKSk7Ci0gIEVYUEVDVF9FUShmYWxzZSwgbWVzc2FnZS5tYXBfYm9vbF9ib29sKCkuYXQo
MCkpOwotICBFWFBFQ1RfRVEoIiIsIG1lc3NhZ2UubWFwX3N0cmluZ19zdHJpbmcoKS5hdCgiMCIp
KTsKLSAgRVhQRUNUX0VRKCIiLCBtZXNzYWdlLm1hcF9pbnQzMl9ieXRlcygpLmF0KDApKTsKLSAg
RVhQRUNUX0VRKGVudW1fdmFsdWUsIG1lc3NhZ2UubWFwX2ludDMyX2VudW0oKS5hdCgwKSk7Ci0g
IEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UoKS5hdCgwKS5C
eXRlU2l6ZSgpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVudW1UeXBlLCBFbnVtVHlwZSBl
bnVtX3ZhbHVlMCwKLSAgICAgICAgICAgIEVudW1UeXBlIGVudW1fdmFsdWUxLCB0eXBlbmFtZSBN
YXBNZXNzYWdlPgotdm9pZCBNYXBUZXN0VXRpbEltcGw6OkV4cGVjdE1hcEZpZWxkc01vZGlmaWVk
KAotICAgIGNvbnN0IE1hcE1lc3NhZ2UmIG1lc3NhZ2UpIHsKLSAgLy8gTW9kaWZ5TWFwRmllbGRz
IG9ubHkgc2V0cyB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgZWFjaCBmaWVsZC4gIEluIGFkZGl0aW9u
IHRvCi0gIC8vIHZlcmlmeWluZyB0aGlzLCB3ZSBhbHNvIHZlcmlmeSB0aGF0IHRoZSBmaXJzdCBl
bGVtZW50IGFuZCBzaXplIHdlcmUgKm5vdCoKLSAgLy8gbW9kaWZpZWQuCi0gIEVYUEVDVF9FUSgy
LCBtZXNzYWdlLm1hcF9pbnQzMl9pbnQzMigpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNz
YWdlLm1hcF9pbnQ2NF9pbnQ2NCgpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1h
cF91aW50MzJfdWludDMyKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX3Vp
bnQ2NF91aW50NjQoKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfc2ludDMy
X3NpbnQzMigpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9zaW50NjRfc2lu
dDY0KCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX2ZpeGVkMzJfZml4ZWQz
MigpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9maXhlZDY0X2ZpeGVkNjQo
KS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfc2ZpeGVkMzJfc2ZpeGVkMzIo
KS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfc2ZpeGVkNjRfc2ZpeGVkNjQo
KS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfaW50MzJfZmxvYXQoKS5zaXpl
KCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfaW50MzJfZG91YmxlKCkuc2l6ZSgpKTsK
LSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX2Jvb2xfYm9vbCgpLnNpemUoKSk7Ci0gIEVYUEVD
VF9FUSgyLCBtZXNzYWdlLm1hcF9zdHJpbmdfc3RyaW5nKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VR
KDIsIG1lc3NhZ2UubWFwX2ludDMyX2J5dGVzKCkuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDIsIG1l
c3NhZ2UubWFwX2ludDMyX2VudW0oKS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5t
YXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlKCkuc2l6ZSgpKTsKLQotICBFWFBFQ1RfRVEoMCwgbWVz
c2FnZS5tYXBfaW50MzJfaW50MzIoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1h
cF9pbnQ2NF9pbnQ2NCgpLmF0KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX3VpbnQz
Ml91aW50MzIoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF91aW50NjRfdWlu
dDY0KCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfc2ludDMyX3NpbnQzMigp
LmF0KDApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX3NpbnQ2NF9zaW50NjQoKS5hdCgw
KSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9maXhlZDMyX2ZpeGVkMzIoKS5hdCgwKSk7
Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9maXhlZDY0X2ZpeGVkNjQoKS5hdCgwKSk7Ci0g
IEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1hcF9zZml4ZWQzMl9zZml4ZWQzMigpLmF0KDApKTsKLSAg
RVhQRUNUX0VRKDAsIG1lc3NhZ2UubWFwX3NmaXhlZDY0X3NmaXhlZDY0KCkuYXQoMCkpOwotICBF
WFBFQ1RfRVEoMCwgbWVzc2FnZS5tYXBfaW50MzJfZmxvYXQoKS5hdCgwKSk7Ci0gIEVYUEVDVF9F
USgwLCBtZXNzYWdlLm1hcF9pbnQzMl9kb3VibGUoKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUShmYWxz
ZSwgbWVzc2FnZS5tYXBfYm9vbF9ib29sKCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoIjAiLCBtZXNz
YWdlLm1hcF9zdHJpbmdfc3RyaW5nKCkuYXQoIjAiKSk7Ci0gIEVYUEVDVF9FUSgiMCIsIG1lc3Nh
Z2UubWFwX2ludDMyX2J5dGVzKCkuYXQoMCkpOwotICBFWFBFQ1RfRVEoZW51bV92YWx1ZTAsIG1l
c3NhZ2UubWFwX2ludDMyX2VudW0oKS5hdCgwKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm1h
cF9pbnQzMl9mb3JlaWduX21lc3NhZ2UoKS5hdCgwKS5jKCkpOwotCi0gIC8vIEFjdHVhbGx5IHZl
cmlmeSB0aGUgc2Vjb25kIChtb2RpZmllZCkgZWxlbWVudHMgbm93LgotICBFWFBFQ1RfRVEoMiwg
bWVzc2FnZS5tYXBfaW50MzJfaW50MzIoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdl
Lm1hcF9pbnQ2NF9pbnQ2NCgpLmF0KDEpKTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX3Vp
bnQzMl91aW50MzIoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF91aW50NjRf
dWludDY0KCkuYXQoMSkpOwotICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfc2ludDMyX3NpbnQz
MigpLmF0KDEpKTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX3NpbnQ2NF9zaW50NjQoKS5h
dCgxKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9maXhlZDMyX2ZpeGVkMzIoKS5hdCgx
KSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9maXhlZDY0X2ZpeGVkNjQoKS5hdCgxKSk7
Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm1hcF9zZml4ZWQzMl9zZml4ZWQzMigpLmF0KDEpKTsK
LSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UubWFwX3NmaXhlZDY0X3NmaXhlZDY0KCkuYXQoMSkpOwot
ICBFWFBFQ1RfRVEoMiwgbWVzc2FnZS5tYXBfaW50MzJfZmxvYXQoKS5hdCgxKSk7Ci0gIEVYUEVD
VF9FUSgyLCBtZXNzYWdlLm1hcF9pbnQzMl9kb3VibGUoKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUShm
YWxzZSwgbWVzc2FnZS5tYXBfYm9vbF9ib29sKCkuYXQoMSkpOwotICBFWFBFQ1RfRVEoIjIiLCBt
ZXNzYWdlLm1hcF9zdHJpbmdfc3RyaW5nKCkuYXQoIjEiKSk7Ci0gIEVYUEVDVF9FUSgiMiIsIG1l
c3NhZ2UubWFwX2ludDMyX2J5dGVzKCkuYXQoMSkpOwotICBFWFBFQ1RfRVEoZW51bV92YWx1ZTEs
IG1lc3NhZ2UubWFwX2ludDMyX2VudW0oKS5hdCgxKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdl
Lm1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UoKS5hdCgxKS5jKCkpOwotfQotCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09H
TEVfUFJPVE9CVUZfTUFQX1RFU1RfVVRJTF9JTVBMX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL21hcF90eXBlX2hhbmRsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfdHlw
ZV9oYW5kbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4YWQ3NTg0YTRlYjJh
NTQwNmY2ZDE5ZGRlZTBkNWRmZTVjMWY2MzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF90eXBlX2hhbmRsZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDcyNyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfVFlQRV9IQU5ETEVSX0hfXwotI2Rl
ZmluZSBHT09HTEVfUFJPVE9CVUZfVFlQRV9IQU5ETEVSX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2FyZW5hLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9t
ZXNzYWdlX3V0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0
ZV9pbmwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFt
ZXNwYWNlIGludGVybmFsIHsKLQotLy8gVXNlZCBmb3IgY29tcGlsZSB0aW1lIHR5cGUgc2VsZWN0
aW9uLiBNYXBJZjo6dHlwZSB3aWxsIGJlIFRydWVUeXBlIGlmIEZsYWcgaXMKLS8vIHRydWUgYW5k
IEZhbHNlVHlwZSBvdGhlcndpc2UuCi10ZW1wbGF0ZTxib29sIEZsYWcsIHR5cGVuYW1lIFRydWVU
eXBlLCB0eXBlbmFtZSBGYWxzZVR5cGU+Ci1zdHJ1Y3QgTWFwSWY7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFRydWVUeXBlLCB0eXBlbmFtZSBGYWxzZVR5cGU+Ci1zdHJ1Y3QgTWFwSWY8dHJ1ZSwgVHJ1
ZVR5cGUsIEZhbHNlVHlwZT4gewotICB0eXBlZGVmIFRydWVUeXBlIHR5cGU7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUcnVlVHlwZSwgdHlwZW5hbWUgRmFsc2VUeXBlPgotc3RydWN0IE1hcElm
PGZhbHNlLCBUcnVlVHlwZSwgRmFsc2VUeXBlPiB7Ci0gIHR5cGVkZWYgRmFsc2VUeXBlIHR5cGU7
Ci19OwotCi0vLyBJbiBwcm90bzIgTWFwLCBlbnVtIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIHRv
IGdpdmVuIGRlZmF1bHQgdmFsdWUsIHdoaWxlCi0vLyBvdGhlciB0eXBlcycgZGVmYXVsdCB2YWx1
ZSBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgdHlwZS4KLXRlbXBsYXRlIDxib29sIElzRW51bSwg
dHlwZW5hbWUgVHlwZT4KLWNsYXNzIE1hcFZhbHVlSW5pdGlhbGl6ZXIgewotIHB1YmxpYzoKLSAg
c3RhdGljIGlubGluZSB2b2lkIEluaXRpYWxpemUoVHlwZSYgdHlwZSwgaW50IGRlZmF1bHRfZW51
bV92YWx1ZSk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KLWNsYXNzIE1hcFZhbHVl
SW5pdGlhbGl6ZXI8dHJ1ZSwgVHlwZT4gewotIHB1YmxpYzoKLSAgc3RhdGljIGlubGluZSB2b2lk
IEluaXRpYWxpemUoVHlwZSYgdmFsdWUsIGludCBkZWZhdWx0X2VudW1fdmFsdWUpIHsKLSAgICB2
YWx1ZSA9IHN0YXRpY19jYXN0PFR5cGU+KGRlZmF1bHRfZW51bV92YWx1ZSk7Ci0gIH0KLX07Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotY2xhc3MgTWFwVmFsdWVJbml0aWFsaXplcjxmYWxz
ZSwgVHlwZT4gewotIHB1YmxpYzoKLSAgc3RhdGljIGlubGluZSB2b2lkIEluaXRpYWxpemUoVHlw
ZSYgdmFsdWUsIGludCBkZWZhdWx0X2VudW1fdmFsdWUpIHt9Ci19OwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVHlwZSwgYm9vbCBpc19hcmVuYV9jb25zdHJ1Y3RhYmxlPgotY2xhc3MgTWFwQXJlbmFN
ZXNzYWdlQ3JlYXRvciB7Ci0gcHVibGljOgotICAvLyBVc2UgYXJlbmEgdG8gY3JlYXRlIG1lc3Nh
Z2UgaWYgVHlwZSBpcyBhcmVuYSBjb25zdHJ1Y3RhYmxlLiBPdGhlcndpc2UsCi0gIC8vIGNyZWF0
ZSB0aGUgbWVzc2FnZSBvbiBoZWFwLgotICBzdGF0aWMgaW5saW5lIFR5cGUqIENyZWF0ZU1lc3Nh
Z2UoQXJlbmEqIGFyZW5hKTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KLWNsYXNzIE1h
cEFyZW5hTWVzc2FnZUNyZWF0b3I8VHlwZSwgdHJ1ZT4gewotIHB1YmxpYzoKLSAgc3RhdGljIGlu
bGluZSBUeXBlKiBDcmVhdGVNZXNzYWdlKEFyZW5hKiBhcmVuYSkgewotICAgIHJldHVybiBBcmVu
YTo6Q3JlYXRlTWVzc2FnZTxUeXBlPihhcmVuYSk7Ci0gIH0KLX07Ci10ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZT4KLWNsYXNzIE1hcEFyZW5hTWVzc2FnZUNyZWF0b3I8VHlwZSwgZmFsc2U+IHsKLSBw
dWJsaWM6Ci0gIHN0YXRpYyBpbmxpbmUgVHlwZSogQ3JlYXRlTWVzc2FnZShBcmVuYSogYXJlbmEp
IHsKLSAgICByZXR1cm4gQXJlbmE6OkNyZWF0ZTxUeXBlPihhcmVuYSk7Ci0gIH0KLX07Ci0KLS8v
IERlZmluZSBjb25zdGFudHMgZm9yIGdpdmVuIHdpcmUgZmllbGQgdHlwZQotdGVtcGxhdGUgPFdp
cmVGb3JtYXRMaXRlOjpGaWVsZFR5cGUgZmllbGRfdHlwZSwgdHlwZW5hbWUgVHlwZT4KLWNsYXNz
IE1hcFdpcmVGaWVsZFR5cGVUcmFpdHMge307Ci0KLSNkZWZpbmUgVFlQRV9UUkFJVFMoRmllbGRU
eXBlLCBDVHlwZSwgV2lyZUZvcm1hdFR5cGUsIElzTWVzc2FnZSwgSXNFbnVtKSAgIFwKLSAgdGVt
cGxhdGUgPHR5cGVuYW1lIFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgY2xhc3MgTWFwV2lyZUZpZWxkVHlwZVRyYWl0czxXaXJlRm9ybWF0
TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgVHlwZT4geyAgIFwKLSAgIHB1YmxpYzogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSXNNZXNzYWdlID0gSXNNZXNzYWdlOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSXNFbnVtID0gSXNF
bnVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIE1hcElmPGtJc01lc3NhZ2UsIFR5cGUqLCBDVHlwZT46OnR5cGUgVHlwZU9uTWVtb3J5
OyAgIFwKLSAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcElmPGtJc0VudW0sIGludCwgVHlwZT46OnR5
cGUgTWFwRW50cnlBY2Nlc3NvclR5cGU7IFwKLSAgICBzdGF0aWMgY29uc3QgV2lyZUZvcm1hdExp
dGU6OldpcmVUeXBlIGtXaXJlVHlwZSA9ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFXyMjV2lyZUZvcm1hdFR5cGU7ICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgfTsKLQotVFlQRV9UUkFJVFMoTUVTU0FHRSAsIFR5cGUsIExFTkdUSF9E
RUxJTUlURUQsIHRydWUsIGZhbHNlKQotVFlQRV9UUkFJVFMoU1RSSU5HICAsIEFyZW5hU3RyaW5n
UHRyLCBMRU5HVEhfREVMSU1JVEVELCBmYWxzZSwgZmFsc2UpCi1UWVBFX1RSQUlUUyhCWVRFUyAg
ICwgQXJlbmFTdHJpbmdQdHIgLCAgTEVOR1RIX0RFTElNSVRFRCwgZmFsc2UsIGZhbHNlKQotVFlQ
RV9UUkFJVFMoSU5UNjQgICAsIGludDY0ICAsICBWQVJJTlQgLCBmYWxzZSwgZmFsc2UpCi1UWVBF
X1RSQUlUUyhVSU5UNjQgICwgdWludDY0ICwgIFZBUklOVCAsIGZhbHNlLCBmYWxzZSkKLVRZUEVf
VFJBSVRTKElOVDMyICAgLCBpbnQzMiAgLCAgVkFSSU5UICwgZmFsc2UsIGZhbHNlKQotVFlQRV9U
UkFJVFMoVUlOVDMyICAsIHVpbnQzMiAsICBWQVJJTlQgLCBmYWxzZSwgZmFsc2UpCi1UWVBFX1RS
QUlUUyhTSU5UNjQgICwgaW50NjQgICwgIFZBUklOVCAsIGZhbHNlLCBmYWxzZSkKLVRZUEVfVFJB
SVRTKFNJTlQzMiAgLCBpbnQzMiAgLCAgVkFSSU5UICwgZmFsc2UsIGZhbHNlKQotVFlQRV9UUkFJ
VFMoRU5VTSAgICAsIGludCAgICAsICBWQVJJTlQgLCBmYWxzZSwgdHJ1ZSApCi1UWVBFX1RSQUlU
UyhET1VCTEUgICwgZG91YmxlICwgIEZJWEVENjQsIGZhbHNlLCBmYWxzZSkKLVRZUEVfVFJBSVRT
KEZMT0FUICAgLCBmbG9hdCAgLCAgRklYRUQzMiwgZmFsc2UsIGZhbHNlKQotVFlQRV9UUkFJVFMo
RklYRUQ2NCAsIHVpbnQ2NCAsICBGSVhFRDY0LCBmYWxzZSwgZmFsc2UpCi1UWVBFX1RSQUlUUyhG
SVhFRDMyICwgdWludDMyICwgIEZJWEVEMzIsIGZhbHNlLCBmYWxzZSkKLVRZUEVfVFJBSVRTKFNG
SVhFRDY0LCBpbnQ2NCAgLCAgRklYRUQ2NCwgZmFsc2UsIGZhbHNlKQotVFlQRV9UUkFJVFMoU0ZJ
WEVEMzIsIGludDMyICAsICBGSVhFRDMyLCBmYWxzZSwgZmFsc2UpCi1UWVBFX1RSQUlUUyhCT09M
ICAgICwgYm9vbCAgICwgIFZBUklOVCAsIGZhbHNlLCBmYWxzZSkKLQotI3VuZGVmIFRZUEVfVFJB
SVRTCi0KLXRlbXBsYXRlIDxXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIGZpZWxkX3R5cGUsIHR5
cGVuYW1lIFR5cGU+Ci1jbGFzcyBNYXBUeXBlSGFuZGxlciB7fTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFR5cGU+Ci1jbGFzcyBNYXBUeXBlSGFuZGxlcjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV9NRVNT
QUdFLCBUeXBlPiB7Ci0gcHVibGljOgotICAvLyBFbnVtIHR5cGUgY2Fubm90IGJlIHVzZWQgZm9y
IE1hcFR5cGVIYW5kbGVyOjpSZWFkLiBEZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwKLSAgLy8gcmVw
bGFjZSBFbnVtIHdpdGggaW50LgotICB0eXBlZGVmIHR5cGVuYW1lIE1hcFdpcmVGaWVsZFR5cGVU
cmFpdHM8V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwKLSAgICAgIFR5cGU+OjpNYXBFbnRy
eUFjY2Vzc29yVHlwZSBNYXBFbnRyeUFjY2Vzc29yVHlwZTsKLSAgLy8gSW50ZXJuYWwgc3RvcmVk
IHR5cGUgaW4gTWFwRW50cnlMaXRlIGZvciBnaXZlbiB3aXJlIGZpZWxkIHR5cGUuCi0gIHR5cGVk
ZWYgdHlwZW5hbWUgTWFwV2lyZUZpZWxkVHlwZVRyYWl0czxXaXJlRm9ybWF0TGl0ZTo6VFlQRV9N
RVNTQUdFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZT46
OlR5cGVPbk1lbW9yeSBUeXBlT25NZW1vcnk7Ci0gIC8vIENvcnJlc3BvbmRpbmcgd2lyZSB0eXBl
IGZvciBmaWVsZCB0eXBlLgotICBzdGF0aWMgY29uc3QgV2lyZUZvcm1hdExpdGU6OldpcmVUeXBl
IGtXaXJlVHlwZSA9Ci0gICAgICBNYXBXaXJlRmllbGRUeXBlVHJhaXRzPFdpcmVGb3JtYXRMaXRl
OjpUWVBFX01FU1NBR0UsIFR5cGU+OjprV2lyZVR5cGU7Ci0gIC8vIFdoZXRoZXIgd2lyZSB0eXBl
IGlzIGZvciBtZXNzYWdlLgotICBzdGF0aWMgY29uc3QgYm9vbCBrSXNNZXNzYWdlID0KLSAgICAg
IE1hcFdpcmVGaWVsZFR5cGVUcmFpdHM8V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwgVHlw
ZT46OmtJc01lc3NhZ2U7Ci0gIC8vIFdoZXRoZXIgd2lyZSB0eXBlIGlzIGZvciBlbnVtLgotICBz
dGF0aWMgY29uc3QgYm9vbCBrSXNFbnVtID0KLSAgICAgIE1hcFdpcmVGaWVsZFR5cGVUcmFpdHM8
V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwgVHlwZT46OmtJc0VudW07Ci0KLSAgLy8gRnVu
Y3Rpb25zIHVzZWQgaW4gcGFyc2luZyBhbmQgc2VyaWFsaXphdGlvbi4gPT09PT09PT09PT09PT09
PT09PQotICBzdGF0aWMgaW5saW5lIGludCBCeXRlU2l6ZShjb25zdCBNYXBFbnRyeUFjY2Vzc29y
VHlwZSYgdmFsdWUpOwotICBzdGF0aWMgaW5saW5lIGludCBHZXRDYWNoZWRTaXplKGNvbnN0IE1h
cEVudHJ5QWNjZXNzb3JUeXBlJiB2YWx1ZSk7Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBSZWFkKGlv
OjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWFw
RW50cnlBY2Nlc3NvclR5cGUqIHZhbHVlKTsKLSAgc3RhdGljIGlubGluZSB2b2lkIFdyaXRlKGlu
dCBmaWVsZCwgY29uc3QgTWFwRW50cnlBY2Nlc3NvclR5cGUmIHZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpOwotICBzdGF0aWMg
aW5saW5lIHVpbnQ4KiBXcml0ZVRvQXJyYXkoaW50IGZpZWxkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTWFwRW50cnlBY2Nlc3NvclR5cGUmIHZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDgqIG91dHB1dCk7Ci0KLSAgLy8g
RnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgZGF0YSBvbiBtZW1vcnkuID09PT09PT09PT09PT09PT09
PT09PT09PQotICBzdGF0aWMgaW5saW5lIGNvbnN0IFR5cGUmIEdldEV4dGVybmFsUmVmZXJlbmNl
KGNvbnN0IFR5cGUqIHZhbHVlKTsKLSAgc3RhdGljIGlubGluZSB2b2lkIERlbGV0ZU5vQXJlbmEo
Y29uc3QgVHlwZSogeCk7Ci0gIHN0YXRpYyBpbmxpbmUgdm9pZCBNZXJnZShjb25zdCBUeXBlJiBm
cm9tLCBUeXBlKiogdG8sIEFyZW5hKiBhcmVuYSk7Ci0gIHN0YXRpYyBpbmxpbmUgdm9pZCBDbGVh
cihUeXBlKiogdmFsdWUsIEFyZW5hKiBhcmVuYSk7Ci0gIHN0YXRpYyBpbmxpbmUgdm9pZCBDbGVh
ck1heWJlQnlEZWZhdWx0RW51bShUeXBlKiogdmFsdWUsIEFyZW5hKiBhcmVuYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFs
dWUpOwotICBzdGF0aWMgaW5saW5lIHZvaWQgSW5pdGlhbGl6ZShUeXBlKiogeCwgQXJlbmEqIGFy
ZW5hKTsKLQotICBzdGF0aWMgaW5saW5lIHZvaWQgSW5pdGlhbGl6ZU1heWJlQnlEZWZhdWx0RW51
bShUeXBlKiogeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJlbmEqIGFyZW5hKTsKLSAgc3RhdGljIGlubGluZSBU
eXBlKiBFbnN1cmVNdXRhYmxlKFR5cGUqKiB2YWx1ZSwgQXJlbmEqIGFyZW5hKTsKLSAgLy8gU3Bh
Y2VVc2VkSW5NYXBFbnRyeTogUmV0dXJuIGJ5dGVzIHVzZWQgYnkgdmFsdWUgaW4gTWFwRW50cnks
IGV4Y2x1ZGluZwotICAvLyB0aG9zZSBhbHJlYWR5IGNhbGN1bGF0ZSBpbiBzaXplb2YoTWFwRmll
bGQpLgotICBzdGF0aWMgaW5saW5lIGludCBTcGFjZVVzZWRJbk1hcEVudHJ5KGNvbnN0IFR5cGUq
IHZhbHVlKTsKLSAgLy8gUmV0dXJuIGJ5dGVzIHVzZWQgYnkgdmFsdWUgaW4gTWFwLgotICBzdGF0
aWMgaW5saW5lIGludCBTcGFjZVVzZWRJbk1hcChjb25zdCBUeXBlJiB2YWx1ZSk7Ci0gIC8vIEFz
c2lnbiBkZWZhdWx0IHZhbHVlIHRvIGdpdmVuIGluc3RhbmNlLgotICBzdGF0aWMgaW5saW5lIHZv
aWQgQXNzaWduRGVmYXVsdFZhbHVlKFR5cGUqKiB2YWx1ZSk7Ci0gIC8vIFJldHVybiBkZWZhdWx0
IGluc3RhbmNlIGlmIHZhbHVlIGlzIG5vdCBpbml0aWFsaXplZCB3aGVuIGNhbGxpbmcgY29uc3QK
LSAgLy8gcmVmZXJlbmNlIGFjY2Vzc29yLgotICBzdGF0aWMgaW5saW5lIGNvbnN0IFR5cGUmIERl
ZmF1bHRJZk5vdEluaXRpYWxpemVkKAotICAgICAgY29uc3QgVHlwZSogdmFsdWUsIGNvbnN0IFR5
cGUqIGRlZmF1bHRfdmFsdWUpOwotICAvLyBDaGVjayBpZiBhbGwgcmVxdWlyZWQgZmllbGRzIGhh
dmUgdmFsdWVzIHNldC4KLSAgc3RhdGljIGlubGluZSBib29sIElzSW5pdGlhbGl6ZWQoVHlwZSog
dmFsdWUpOwotfTsKLQotI2RlZmluZSBNQVBfSEFORExFUihGaWVsZFR5cGUpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBjbGFzcyBNYXBUeXBlSGFuZGxlcjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV8jI0ZpZWxk
VHlwZSwgVHlwZT4geyAgICAgICAgICAgICAgXAotICAgcHVibGljOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHR5cGVkZWYgdHlwZW5hbWUgTWFwV2lyZUZpZWxkVHlwZVRyYWl0czxXaXJlRm9ybWF0TGl0ZTo6
VFlQRV8jI0ZpZWxkVHlwZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUeXBlPjo6TWFwRW50cnlBY2Nlc3NvclR5cGUgICAgICAgXAotICAgICAgICBNYXBF
bnRyeUFjY2Vzc29yVHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFwV2lyZUZpZWxkVHlwZVRyYWl0czxX
aXJlRm9ybWF0TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUeXBlPjo6VHlwZU9uTWVtb3J5IFR5cGVPbk1lbW9yeTsg
XAotICAgIHN0YXRpYyBjb25zdCBXaXJlRm9ybWF0TGl0ZTo6V2lyZVR5cGUga1dpcmVUeXBlID0g
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBNYXBXaXJlRmllbGRUeXBlVHJhaXRz
PFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjprV2lyZVR5cGU7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBjb25zdCBib29sIGtJc01lc3NhZ2UgPSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBNYXBXaXJl
RmllbGRUeXBlVHJhaXRzPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjprSXNNZXNzYWdl
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBjb25zdCBib29sIGtJ
c0VudW0gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBNYXBXaXJlRmllbGRUeXBlVHJhaXRzPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmll
bGRUeXBlLCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5
cGU+OjprSXNFbnVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRp
YyBpbmxpbmUgaW50IEJ5dGVTaXplKGNvbnN0IE1hcEVudHJ5QWNjZXNzb3JUeXBlJiB2YWx1ZSk7
ICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgaW50IEdldENhY2hlZFNpemUoY29uc3Qg
TWFwRW50cnlBY2Nlc3NvclR5cGUmIHZhbHVlKTsgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUg
Ym9vbCBSZWFkKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcEVudHJ5QWNjZXNzb3JUeXBlKiB2
YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBXcml0
ZShpbnQgZmllbGQsIGNvbnN0IE1hcEVudHJ5QWNjZXNzb3JUeXBlJiB2YWx1ZSwgICAgXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCk7
ICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgdWludDgqIFdyaXRlVG9BcnJh
eShpbnQgZmllbGQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYXBFbnRyeUFjY2Vzc29yVHlwZSYgdmFs
dWUsICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OCog
b3V0cHV0KTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgY29u
c3QgTWFwRW50cnlBY2Nlc3NvclR5cGUmIEdldEV4dGVybmFsUmVmZXJlbmNlKCAgICAgICAgICAg
XAotICAgICAgICBjb25zdCBUeXBlT25NZW1vcnkmIHZhbHVlKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBEZWxldGVO
b0FyZW5hKGNvbnN0IFR5cGVPbk1lbW9yeSYgeCk7ICAgICAgICAgICAgICAgICAgXAotICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBNZXJnZShjb25zdCBNYXBFbnRyeUFjY2Vzc29yVHlwZSYgZnJvbSwg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlT25NZW1v
cnkqIHRvLCBBcmVuYSogYXJlbmEpOyAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBDbGVhcihUeXBlT25NZW1vcnkqIHZhbHVlLCBBcmVuYSogYXJlbmEpOyAgICAgICAg
ICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBDbGVhck1heWJlQnlEZWZhdWx0RW51bShU
eXBlT25NZW1vcnkqIHZhbHVlLCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmVuYSogYXJlbmEsICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVs
dF9lbnVtKTsgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgaW50IFNwYWNlVXNlZElu
TWFwRW50cnkoY29uc3QgVHlwZU9uTWVtb3J5JiB2YWx1ZSk7ICAgICAgICAgXAotICAgIHN0YXRp
YyBpbmxpbmUgaW50IFNwYWNlVXNlZEluTWFwKGNvbnN0IFR5cGVPbk1lbW9yeSYgdmFsdWUpOyAg
ICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgaW50IFNwYWNlVXNlZEluTWFwKGNvbnN0
IHN0cmluZyYgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUg
dm9pZCBBc3NpZ25EZWZhdWx0VmFsdWUoVHlwZU9uTWVtb3J5KiB2YWx1ZSk7ICAgICAgICAgICAg
ICAgXAotICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgTWFwRW50cnlBY2Nlc3NvclR5cGUmIERlZmF1
bHRJZk5vdEluaXRpYWxpemVkKCAgICAgICAgXAotICAgICAgICBjb25zdCBUeXBlT25NZW1vcnkm
IHZhbHVlLCBjb25zdCBUeXBlT25NZW1vcnkmIGRlZmF1bHRfdmFsdWUpOyAgICAgICAgXAotICAg
IHN0YXRpYyBpbmxpbmUgYm9vbCBJc0luaXRpYWxpemVkKGNvbnN0IFR5cGVPbk1lbW9yeSYgdmFs
dWUpOyAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyB2b2lkIERlbGV0ZU5vQXJlbmEoVHlwZU9u
TWVtb3J5JiB2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBJbml0aWFsaXplKFR5cGVPbk1lbW9yeSogdmFsdWUsIEFyZW5hKiBhcmVuYSk7
ICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBJbml0aWFsaXplTWF5YmVCeURlZmF1
bHRFbnVtKFR5cGVPbk1lbW9yeSogdmFsdWUsICAgICAgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZhdWx0X2VudW1fdmFsdWUsICAg
XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy
ZW5hKiBhcmVuYSk7ICAgICAgICAgICAgXAotICAgIHN0YXRpYyBpbmxpbmUgTWFwRW50cnlBY2Nl
c3NvclR5cGUqIEVuc3VyZU11dGFibGUoVHlwZU9uTWVtb3J5KiB2YWx1ZSwgICAgXAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJlbmEqIGFy
ZW5hKTsgICAgICAgICAgXAotICB9OwotTUFQX0hBTkRMRVIoU1RSSU5HKQotTUFQX0hBTkRMRVIo
QllURVMpCi1NQVBfSEFORExFUihJTlQ2NCkKLU1BUF9IQU5ETEVSKFVJTlQ2NCkKLU1BUF9IQU5E
TEVSKElOVDMyKQotTUFQX0hBTkRMRVIoVUlOVDMyKQotTUFQX0hBTkRMRVIoU0lOVDY0KQotTUFQ
X0hBTkRMRVIoU0lOVDMyKQotTUFQX0hBTkRMRVIoRU5VTSkKLU1BUF9IQU5ETEVSKERPVUJMRSkK
LU1BUF9IQU5ETEVSKEZMT0FUKQotTUFQX0hBTkRMRVIoRklYRUQ2NCkKLU1BUF9IQU5ETEVSKEZJ
WEVEMzIpCi1NQVBfSEFORExFUihTRklYRUQ2NCkKLU1BUF9IQU5ETEVSKFNGSVhFRDMyKQotTUFQ
X0hBTkRMRVIoQk9PTCkKLSN1bmRlZiBNQVBfSEFORExFUgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VHlwZT4KLWlubGluZSBpbnQKLU1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFX01F
U1NBR0UsIFR5cGU+OjpCeXRlU2l6ZSgKLSAgICBjb25zdCBNYXBFbnRyeUFjY2Vzc29yVHlwZSYg
dmFsdWUpIHsKLSAgcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCh2
YWx1ZSk7Ci19Ci0KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0JZVEVfU0laRShGaWVsZFR5cGUs
IERlY2xhcmVkVHlwZSkgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBpbmxpbmUgaW50IE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMj
RmllbGRUeXBlLCBUeXBlPjo6Qnl0ZVNpemUoIFwKLSAgICAgIGNvbnN0IE1hcEVudHJ5QWNjZXNz
b3JUeXBlJiB2YWx1ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjpEZWNsYXJlZFR5cGUjI1NpemUodmFsdWUpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLUdPT0dMRV9QUk9UT0JVRl9CWVRFX1NJWkUo
U1RSSU5HLCBTdHJpbmcpCi1HT09HTEVfUFJPVE9CVUZfQllURV9TSVpFKEJZVEVTICwgQnl0ZXMp
Ci1HT09HTEVfUFJPVE9CVUZfQllURV9TSVpFKElOVDY0ICwgSW50NjQpCi1HT09HTEVfUFJPVE9C
VUZfQllURV9TSVpFKFVJTlQ2NCwgVUludDY0KQotR09PR0xFX1BST1RPQlVGX0JZVEVfU0laRShJ
TlQzMiAsIEludDMyKQotR09PR0xFX1BST1RPQlVGX0JZVEVfU0laRShVSU5UMzIsIFVJbnQzMikK
LUdPT0dMRV9QUk9UT0JVRl9CWVRFX1NJWkUoU0lOVDY0LCBTSW50NjQpCi1HT09HTEVfUFJPVE9C
VUZfQllURV9TSVpFKFNJTlQzMiwgU0ludDMyKQotR09PR0xFX1BST1RPQlVGX0JZVEVfU0laRShF
TlVNICAsIEVudW0pCi0KLSN1bmRlZiBHT09HTEVfUFJPVE9CVUZfQllURV9TSVpFCi0KLSNkZWZp
bmUgRklYRURfQllURV9TSVpFKEZpZWxkVHlwZSwgRGVjbGFyZWRUeXBlKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgaW50
IE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCBUeXBlPjo6
Qnl0ZVNpemUoIFwKLSAgICAgIGNvbnN0IE1hcEVudHJ5QWNjZXNzb3JUeXBlJiB2YWx1ZSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIFdpcmVGb3Jt
YXRMaXRlOjprIyNEZWNsYXJlZFR5cGUjI1NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICB9Ci0KLUZJWEVEX0JZVEVfU0laRShET1VCTEUgICwgRG91YmxlKQotRklYRURfQllU
RV9TSVpFKEZMT0FUICAgLCBGbG9hdCkKLUZJWEVEX0JZVEVfU0laRShGSVhFRDY0ICwgRml4ZWQ2
NCkKLUZJWEVEX0JZVEVfU0laRShGSVhFRDMyICwgRml4ZWQzMikKLUZJWEVEX0JZVEVfU0laRShT
RklYRUQ2NCwgU0ZpeGVkNjQpCi1GSVhFRF9CWVRFX1NJWkUoU0ZJWEVEMzIsIFNGaXhlZDMyKQot
RklYRURfQllURV9TSVpFKEJPT0wgICAgLCBCb29sKQotCi0jdW5kZWYgRklYRURfQllURV9TSVpF
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5saW5lIGludAotTWFwVHlwZUhhbmRsZXI8
V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwgVHlwZT46OkdldENhY2hlZFNpemUoCi0gICAg
Y29uc3QgTWFwRW50cnlBY2Nlc3NvclR5cGUmIHZhbHVlKSB7Ci0gIHJldHVybiBXaXJlRm9ybWF0
TGl0ZTo6TGVuZ3RoRGVsaW1pdGVkU2l6ZSh2YWx1ZS5HZXRDYWNoZWRTaXplKCkpOwotfQotCi0j
ZGVmaW5lIEdFVF9DQUNIRURfU0laRShGaWVsZFR5cGUsIERlY2xhcmVkVHlwZSkgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGludCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCBUeXBlPjo6
R2V0Q2FjaGVkU2l6ZSggXAotICAgICAgY29uc3QgTWFwRW50cnlBY2Nlc3NvclR5cGUmIHZhbHVl
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gV2lyZUZvcm1h
dExpdGU6OkRlY2xhcmVkVHlwZSMjU2l6ZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICBcCi0g
IH0KLQotR0VUX0NBQ0hFRF9TSVpFKFNUUklORywgU3RyaW5nKQotR0VUX0NBQ0hFRF9TSVpFKEJZ
VEVTICwgQnl0ZXMpCi1HRVRfQ0FDSEVEX1NJWkUoSU5UNjQgLCBJbnQ2NCkKLUdFVF9DQUNIRURf
U0laRShVSU5UNjQsIFVJbnQ2NCkKLUdFVF9DQUNIRURfU0laRShJTlQzMiAsIEludDMyKQotR0VU
X0NBQ0hFRF9TSVpFKFVJTlQzMiwgVUludDMyKQotR0VUX0NBQ0hFRF9TSVpFKFNJTlQ2NCwgU0lu
dDY0KQotR0VUX0NBQ0hFRF9TSVpFKFNJTlQzMiwgU0ludDMyKQotR0VUX0NBQ0hFRF9TSVpFKEVO
VU0gICwgRW51bSkKLQotI3VuZGVmIEdFVF9DQUNIRURfU0laRQotCi0jZGVmaW5lIEdFVF9GSVhF
RF9DQUNIRURfU0laRShGaWVsZFR5cGUsIERlY2xhcmVkVHlwZSkgICAgICAgICAgICAgICAgICAg
XAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGludCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIE1hcFR5cGVIYW5kbGVy
PFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCBUeXBlPjo6R2V0Q2FjaGVkU2l6ZSgg
XAotICAgICAgY29uc3QgTWFwRW50cnlBY2Nlc3NvclR5cGUmIHZhbHVlKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gV2lyZUZvcm1hdExpdGU6OmsjI0RlY2xh
cmVkVHlwZSMjU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotR0VUX0ZJWEVE
X0NBQ0hFRF9TSVpFKERPVUJMRSAgLCBEb3VibGUpCi1HRVRfRklYRURfQ0FDSEVEX1NJWkUoRkxP
QVQgICAsIEZsb2F0KQotR0VUX0ZJWEVEX0NBQ0hFRF9TSVpFKEZJWEVENjQgLCBGaXhlZDY0KQot
R0VUX0ZJWEVEX0NBQ0hFRF9TSVpFKEZJWEVEMzIgLCBGaXhlZDMyKQotR0VUX0ZJWEVEX0NBQ0hF
RF9TSVpFKFNGSVhFRDY0LCBTRml4ZWQ2NCkKLUdFVF9GSVhFRF9DQUNIRURfU0laRShTRklYRUQz
MiwgU0ZpeGVkMzIpCi1HRVRfRklYRURfQ0FDSEVEX1NJWkUoQk9PTCAgICAsIEJvb2wpCi0KLSN1
bmRlZiBHRVRfRklYRURfQ0FDSEVEX1NJWkUKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci1p
bmxpbmUgdm9pZCBNYXBUeXBlSGFuZGxlcjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV9NRVNTQUdFLCBU
eXBlPjo6V3JpdGUoCi0gICAgaW50IGZpZWxkLCBjb25zdCBNYXBFbnRyeUFjY2Vzc29yVHlwZSYg
dmFsdWUsCi0gICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgV2lyZUZvcm1h
dExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheShmaWVsZCwgdmFsdWUsIG91dHB1dCk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5saW5lIHVpbnQ4KgotTWFwVHlwZUhhbmRs
ZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwgVHlwZT46OldyaXRlVG9BcnJheSgKLSAg
ICBpbnQgZmllbGQsIGNvbnN0IE1hcEVudHJ5QWNjZXNzb3JUeXBlJiB2YWx1ZSwgdWludDgqIG91
dHB1dCkgewotICByZXR1cm4gV2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZVRvQXJyYXkoZmll
bGQsIHZhbHVlLCBvdXRwdXQpOwotfQotCi0jZGVmaW5lIFdSSVRFX01FVEhPRChGaWVsZFR5cGUs
IERlY2xhcmVkVHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIHZvaWQgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1h
dExpdGU6OlRZUEVfIyNGaWVsZFR5cGUsIFR5cGU+OjpXcml0ZSggICBcCi0gICAgICBpbnQgZmll
bGQsIGNvbnN0IE1hcEVudHJ5QWNjZXNzb3JUeXBlJiB2YWx1ZSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gV2lyZUZvcm1h
dExpdGU6OldyaXRlIyNEZWNsYXJlZFR5cGUoZmllbGQsIHZhbHVlLCBvdXRwdXQpOyAgICAgICAg
ICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
aW5saW5lIHVpbnQ4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpU
WVBFXyMjRmllbGRUeXBlLCBUeXBlPjo6V3JpdGVUb0FycmF5KCAgICAgICAgXAotICAgICAgaW50
IGZpZWxkLCBjb25zdCBNYXBFbnRyeUFjY2Vzc29yVHlwZSYgdmFsdWUsIHVpbnQ4KiBvdXRwdXQp
IHsgICAgICAgICAgIFwKLSAgICByZXR1cm4gV2lyZUZvcm1hdExpdGU6OldyaXRlIyNEZWNsYXJl
ZFR5cGUjI1RvQXJyYXkoZmllbGQsIHZhbHVlLCBvdXRwdXQpOyBcCi0gIH0KLQotV1JJVEVfTUVU
SE9EKFNUUklORyAgLCBTdHJpbmcpCi1XUklURV9NRVRIT0QoQllURVMgICAsIEJ5dGVzKQotV1JJ
VEVfTUVUSE9EKElOVDY0ICAgLCBJbnQ2NCkKLVdSSVRFX01FVEhPRChVSU5UNjQgICwgVUludDY0
KQotV1JJVEVfTUVUSE9EKElOVDMyICAgLCBJbnQzMikKLVdSSVRFX01FVEhPRChVSU5UMzIgICwg
VUludDMyKQotV1JJVEVfTUVUSE9EKFNJTlQ2NCAgLCBTSW50NjQpCi1XUklURV9NRVRIT0QoU0lO
VDMyICAsIFNJbnQzMikKLVdSSVRFX01FVEhPRChFTlVNICAgICwgRW51bSkKLVdSSVRFX01FVEhP
RChET1VCTEUgICwgRG91YmxlKQotV1JJVEVfTUVUSE9EKEZMT0FUICAgLCBGbG9hdCkKLVdSSVRF
X01FVEhPRChGSVhFRDY0ICwgRml4ZWQ2NCkKLVdSSVRFX01FVEhPRChGSVhFRDMyICwgRml4ZWQz
MikKLVdSSVRFX01FVEhPRChTRklYRUQ2NCwgU0ZpeGVkNjQpCi1XUklURV9NRVRIT0QoU0ZJWEVE
MzIsIFNGaXhlZDMyKQotV1JJVEVfTUVUSE9EKEJPT0wgICAgLCBCb29sKQotCi0jdW5kZWYgV1JJ
VEVfTUVUSE9ECi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5saW5lIGJvb2wgTWFwVHlw
ZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwgVHlwZT46OlJlYWQoCi0gICAg
aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCBNYXBFbnRyeUFjY2Vzc29yVHlwZSogdmFsdWUp
IHsKLSAgcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbChpbnB1dCwg
dmFsdWUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KLWlubGluZSBib29sIE1hcFR5
cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFX1NUUklORywgVHlwZT46OlJlYWQoCi0gICAg
aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCBNYXBFbnRyeUFjY2Vzc29yVHlwZSogdmFsdWUp
IHsKLSAgcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKGlucHV0LCB2YWx1ZSk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5saW5lIGJvb2wgTWFwVHlwZUhhbmRsZXI8
V2lyZUZvcm1hdExpdGU6OlRZUEVfQllURVMsIFR5cGU+OjpSZWFkKAotICAgIGlvOjpDb2RlZElu
cHV0U3RyZWFtKiBpbnB1dCwgTWFwRW50cnlBY2Nlc3NvclR5cGUqIHZhbHVlKSB7Ci0gIHJldHVy
biBXaXJlRm9ybWF0TGl0ZTo6UmVhZEJ5dGVzKGlucHV0LCB2YWx1ZSk7Ci19Ci0KLSNkZWZpbmUg
UkVBRF9NRVRIT0QoRmllbGRUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgYm9vbCBNYXBUeXBl
SGFuZGxlcjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgVHlwZT46OlJlYWQoIFwK
LSAgICAgIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwgTWFwRW50cnlBY2Nlc3NvclR5cGUq
IHZhbHVlKSB7ICAgICAgICAgICBcCi0gICAgcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjpSZWFkUHJp
bWl0aXZlPFR5cGVPbk1lbW9yeSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6VFlQRV8jI0ZpZWxk
VHlwZT4oIFwKLSAgICAgICAgaW5wdXQsIHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotUkVBRF9NRVRIT0QoSU5UNjQp
Ci1SRUFEX01FVEhPRChVSU5UNjQpCi1SRUFEX01FVEhPRChJTlQzMikKLVJFQURfTUVUSE9EKFVJ
TlQzMikKLVJFQURfTUVUSE9EKFNJTlQ2NCkKLVJFQURfTUVUSE9EKFNJTlQzMikKLVJFQURfTUVU
SE9EKEVOVU0pCi1SRUFEX01FVEhPRChET1VCTEUpCi1SRUFEX01FVEhPRChGTE9BVCkKLVJFQURf
TUVUSE9EKEZJWEVENjQpCi1SRUFEX01FVEhPRChGSVhFRDMyKQotUkVBRF9NRVRIT0QoU0ZJWEVE
NjQpCi1SRUFEX01FVEhPRChTRklYRUQzMikKLVJFQURfTUVUSE9EKEJPT0wpCi0KLSN1bmRlZiBS
RUFEX01FVEhPRAotCi0vLyBEZWZpbml0aW9uIGZvciBtZXNzYWdlIGhhbmRsZXIKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFR5cGU+Ci1pbmxpbmUgY29uc3QgVHlwZSYKLU1hcFR5cGVIYW5kbGVyPFdp
cmVGb3JtYXRMaXRlOjpUWVBFX01FU1NBR0UsCi0gICAgICAgICAgICAgICAgICAgICAgICBUeXBl
Pjo6R2V0RXh0ZXJuYWxSZWZlcmVuY2UoY29uc3QgVHlwZSogdmFsdWUpIHsKLSAgcmV0dXJuICp2
YWx1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci1pbmxpbmUgaW50Ci1NYXBUeXBl
SGFuZGxlcjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV9NRVNTQUdFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgVHlwZT46OlNwYWNlVXNlZEluTWFwRW50cnkoY29uc3QgVHlwZSogdmFsdWUpIHsKLSAg
cmV0dXJuIHZhbHVlLT5TcGFjZVVzZWQoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+
Ci1pbnQgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwgVHlwZT46
OlNwYWNlVXNlZEluTWFwKAotICAgIGNvbnN0IFR5cGUmIHZhbHVlKSB7Ci0gIHJldHVybiB2YWx1
ZS5TcGFjZVVzZWQoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci1pbmxpbmUgdm9p
ZCBNYXBUeXBlSGFuZGxlcjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV9NRVNTQUdFLCBUeXBlPjo6Q2xl
YXIoCi0gICAgVHlwZSoqIHZhbHVlLCBBcmVuYSogYXJlbmEpIHsKLSAgaWYgKCp2YWx1ZSAhPSBO
VUxMKSAoKnZhbHVlKS0+Q2xlYXIoKTsKLX0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5s
aW5lIHZvaWQKLU1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFX01FU1NBR0UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBUeXBlPjo6Q2xlYXJNYXliZUJ5RGVmYXVsdEVudW0oVHlw
ZSoqIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZW5hKiBhcmVuYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdF9lbnVtX3ZhbHVlKSB7Ci0gIGlmICgq
dmFsdWUgIT0gTlVMTCkgKCp2YWx1ZSktPkNsZWFyKCk7Ci19Ci10ZW1wbGF0ZSA8dHlwZW5hbWUg
VHlwZT4KLWlubGluZSB2b2lkIE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFX01F
U1NBR0UsIFR5cGU+OjpNZXJnZSgKLSAgICBjb25zdCBUeXBlJiBmcm9tLCBUeXBlKiogdG8sIEFy
ZW5hKiBhcmVuYSkgewotICAoKnRvKS0+TWVyZ2VGcm9tKGZyb20pOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVHlwZT4KLXZvaWQgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVf
TUVTU0FHRSwgVHlwZT46OkRlbGV0ZU5vQXJlbmEoCi0gICAgY29uc3QgVHlwZSogcHRyKSB7Ci0g
IGRlbGV0ZSBwdHI7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5saW5lIHZvaWQg
TWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjpBc3NpZ25EZWZhdWx0VmFsdWUoVHlwZSoq
IHZhbHVlKSB7Ci0gICp2YWx1ZSA9IGNvbnN0X2Nhc3Q8VHlwZSo+KCZUeXBlOjpkZWZhdWx0X2lu
c3RhbmNlKCkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KLWlubGluZSB2b2lkIE1h
cFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFX01FU1NBR0UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUeXBlPjo6SW5pdGlhbGl6ZShUeXBlKiogeCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZW5hKiBh
cmVuYSkgewotICAqeCA9IE5VTEw7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotaW5s
aW5lIHZvaWQgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwgVHlw
ZT46OgotICAgIEluaXRpYWxpemVNYXliZUJ5RGVmYXVsdEVudW0oVHlwZSoqIHgsIGludCBkZWZh
dWx0X2VudW1fdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmVuYSog
YXJlbmEpIHsKLSAgKnggPSBOVUxMOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KLWlu
bGluZSBUeXBlKiBNYXBUeXBlSGFuZGxlcjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV9NRVNTQUdFLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjpFbnN1cmVNdXRhYmxl
KFR5cGUqKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBcmVuYSogYXJlbmEpIHsKLSAgaWYgKCp2YWx1ZSA9PSBOVUxMKSB7
Ci0gICAgKnZhbHVlID0KLSAgICAgICAgTWFwQXJlbmFNZXNzYWdlQ3JlYXRvcjxUeXBlLCBBcmVu
YTo6aXNfYXJlbmFfY29uc3RydWN0YWJsZTxUeXBlPjo6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6OnZhbHVlPjo6Q3JlYXRlTWVzc2FnZShhcmVuYSk7Ci0g
IH0KLSAgcmV0dXJuICp2YWx1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci1pbmxp
bmUgY29uc3QgVHlwZSYgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FH
RSwgVHlwZT46OgotICAgIERlZmF1bHRJZk5vdEluaXRpYWxpemVkKGNvbnN0IFR5cGUqIHZhbHVl
LCBjb25zdCBUeXBlKiBkZWZhdWx0X3ZhbHVlKSB7Ci0gIHJldHVybiB2YWx1ZSAhPSBOVUxMID8g
KnZhbHVlIDogKmRlZmF1bHRfdmFsdWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgot
aW5saW5lIGJvb2wgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjpJc0luaXRpYWxpemVk
KFR5cGUqIHZhbHVlKSB7Ci0gIHJldHVybiB2YWx1ZS0+SXNJbml0aWFsaXplZCgpOwotfQotCi0v
LyBEZWZpbml0aW9uIGZvciBzdHJpbmcvYnl0ZXMgaGFuZGxlcgotCi0jZGVmaW5lIFNUUklOR19P
Ul9CWVRFU19IQU5ETEVSX0ZVTkNUSU9OUyhGaWVsZFR5cGUpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGNvbnN0IHR5cGVuYW1l
IE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlPjo6TWFwRW50cnlB
Y2Nlc3NvclR5cGUmICAgICAgICAgICAgXAotICBNYXBUeXBlSGFuZGxlcjxXaXJlRm9ybWF0TGl0
ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgVHlwZT46OkdldEV4dGVybmFsUmVmZXJlbmNlKGNvbnN0IFR5cGVPbk1lbW9y
eSYgdmFsdWUpIHsgICAgICBcCi0gICAgcmV0dXJuIHZhbHVlLkdldCgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmcoKSk7ICAgICAgICAgICAgICAgICAgIFwKLSAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUg
aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNG
aWVsZFR5cGUsIFR5cGU+OjpTcGFjZVVzZWRJbk1hcEVudHJ5KCBcCi0gICAgICBjb25zdCBUeXBl
T25NZW1vcnkmIHZhbHVlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHJldHVybiBzaXplb2YodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgaW50IE1hcFR5cGVIYW5kbGVyPFdp
cmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUeXBlPjo6U3BhY2VVc2VkSW5NYXAoY29uc3QgVHlwZU9u
TWVtb3J5JiB2YWx1ZSkgeyBcCi0gICAgcmV0dXJuIHNpemVvZih2YWx1ZSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSBpbnQgTWFwVHlw
ZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNGaWVsZFR5cGUsICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjpTcGFjZVVzZWRJbk1hcChj
b25zdCBzdHJpbmcmIHZhbHVlKSB7ICAgICAgIFwKLSAgICByZXR1cm4gc2l6ZW9mKHZhbHVlKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5l
IHZvaWQgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNGaWVsZFR5cGUsIFR5
cGU+OjpDbGVhciggICBcCi0gICAgICBUeXBlT25NZW1vcnkqIHZhbHVlLCBBcmVuYSogYXJlbmEp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHZhbHVlLT5DbGVh
clRvRW1wdHkoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCks
IGFyZW5hKTsgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgaW5saW5lIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIE1hcFR5cGVIYW5kbGVyPFdp
cmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICBUeXBlPjo6Q2xlYXJNYXliZUJ5RGVmYXVsdEVudW0oVHlw
ZU9uTWVtb3J5KiB2YWx1ZSwgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZW5hKiBhcmVuYSwgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVs
dF9lbnVtKSB7ICAgICAgICAgICAgXAotICAgIENsZWFyKHZhbHVlLCBhcmVuYSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgdm9pZCBN
YXBUeXBlSGFuZGxlcjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgVHlwZT46Ok1l
cmdlKCAgIFwKLSAgICAgIGNvbnN0IE1hcEVudHJ5QWNjZXNzb3JUeXBlJiBmcm9tLCBUeXBlT25N
ZW1vcnkqIHRvLCBBcmVuYSogYXJlbmEpIHsgICAgICBcCi0gICAgdG8tPlNldCgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmcoKSwgZnJvbSwgYXJlbmEpOyAgICAg
ICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICB2b2lkIE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRU
eXBlLCBUeXBlPjo6RGVsZXRlTm9BcmVuYSggIFwKLSAgICAgIFR5cGVPbk1lbW9yeSYgdmFsdWUp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgdmFsdWUuRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nKCkpOyAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgdm9pZCBNYXBUeXBlSGFuZGxlcjxX
aXJlRm9ybWF0TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHlwZT46OkFzc2lnbkRlZmF1bHRWYWx1ZShUeXBlT25N
ZW1vcnkqIHZhbHVlKSB7fSBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgdm9p
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNGaWVs
ZFR5cGUsIFR5cGU+OjpJbml0aWFsaXplKCAgICAgICAgICBcCi0gICAgICBUeXBlT25NZW1vcnkq
IHZhbHVlLCBBcmVuYSogYXJlbmEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHZhbHVlLT5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZygpKTsgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIHZvaWQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBUeXBlPjo6SW5pdGlh
bGl6ZU1heWJlQnlEZWZhdWx0RW51bShUeXBlT25NZW1vcnkqIHZhbHVlLCAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlZmF1
bHRfZW51bV92YWx1ZSwgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZW5hKiBhcmVuYSkgeyAgICAgICAgICAgXAotICAgIEluaXRpYWxp
emUodmFsdWUsIGFyZW5hKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBpbmxpbmUgdHlwZW5hbWUgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZ
UEVfIyNGaWVsZFR5cGUsICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFR5cGU+OjpNYXBFbnRyeUFjY2Vzc29yVHlwZSogICAgICAgICAgICAgICAgICBcCi0g
IE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCBUeXBlPjo6
RW5zdXJlTXV0YWJsZSggICAgICAgXAotICAgICAgVHlwZU9uTWVtb3J5KiB2YWx1ZSwgQXJlbmEq
IGFyZW5hKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1
cm4gdmFsdWUtPk11dGFibGUoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nKCksIGFyZW5hKTsgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVt
cGxhdGUgPHR5cGVuYW1lIFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSBjb25zdCB0eXBlbmFtZSBNYXBUeXBlSGFuZGxl
cjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgICAgICAgXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZT46Ok1hcEVudHJ5QWNjZXNzb3JUeXBlJiAg
ICAgICAgICAgIFwKLSAgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNGaWVs
ZFR5cGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIFR5
cGU+OjpEZWZhdWx0SWZOb3RJbml0aWFsaXplZChjb25zdCBUeXBlT25NZW1vcnkmIHZhbHVlLCAg
ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVHlwZU9uTWVtb3J5JiAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3ZhbHVlKSB7ICAgICAgICAgICBcCi0g
ICAgcmV0dXJuIHZhbHVlLkdldCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmcoKSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgYm9vbCBNYXBUeXBlSGFuZGxlcjxX
aXJlRm9ybWF0TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHlwZT46OklzSW5pdGlhbGl6ZWQoY29uc3QgVHlwZU9u
TWVtb3J5JiB2YWx1ZSkgeyBcCi0gICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci1TVFJJTkdf
T1JfQllURVNfSEFORExFUl9GVU5DVElPTlMoU1RSSU5HKQotU1RSSU5HX09SX0JZVEVTX0hBTkRM
RVJfRlVOQ1RJT05TKEJZVEVTKQotI3VuZGVmIFNUUklOR19PUl9CWVRFU19IQU5ETEVSX0ZVTkNU
SU9OUwotCi0jZGVmaW5lIFBSSU1JVElWRV9IQU5ETEVSX0ZVTkNUSU9OUyhGaWVsZFR5cGUpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlw
ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgaW5saW5lIGNvbnN0IHR5cGVuYW1lIE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpU
WVBFXyMjRmllbGRUeXBlLCAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUeXBlPjo6TWFwRW50cnlBY2Nlc3NvclR5cGUmICAgICAgICAgICAgXAotICBNYXBU
eXBlSGFuZGxlcjxXaXJlRm9ybWF0TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgVHlwZT46OkdldEV4dGVybmFsUmVm
ZXJlbmNlKGNvbnN0IFR5cGVPbk1lbW9yeSYgdmFsdWUpIHsgICAgICBcCi0gICAgcmV0dXJuIHZh
bHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1l
IFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGlubGluZSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBNYXBUeXBlSGFuZGxlcjxXaXJlRm9ybWF0
TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgVHlwZT46OlNwYWNlVXNlZEluTWFwRW50cnkoIFwKLSAg
ICAgIGNvbnN0IFR5cGVPbk1lbW9yeSYgdmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSBpbnQgTWFw
VHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNGaWVsZFR5cGUsICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjpTcGFjZVVzZWRJbk1h
cChjb25zdCBUeXBlT25NZW1vcnkmIHZhbHVlKSB7IFwKLSAgICByZXR1cm4gc2l6ZW9mKFR5cGUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5s
aW5lIHZvaWQgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNGaWVsZFR5cGUs
IFR5cGU+OjpDbGVhciggICBcCi0gICAgICBUeXBlT25NZW1vcnkqIHZhbHVlLCBBcmVuYSogYXJl
bmEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICp2YWx1ZSA9
IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBpbmxpbmUgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1h
dExpdGU6OlRZUEVfIyNGaWVsZFR5cGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgIFR5cGU+OjpDbGVhck1heWJlQnlEZWZhdWx0RW51bShUeXBlT25NZW1v
cnkqIHZhbHVlLCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJlbmEqIGFyZW5hLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZhdWx0X2VudW1f
dmFsdWUpIHsgICAgICBcCi0gICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8VHlwZU9uTWVtb3J5Pihk
ZWZhdWx0X2VudW1fdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlubGluZSB2b2lkIE1hcFR5cGVI
YW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCBUeXBlPjo6TWVyZ2UoICAg
XAotICAgICAgY29uc3QgTWFwRW50cnlBY2Nlc3NvclR5cGUmIGZyb20sIFR5cGVPbk1lbW9yeSog
dG8sIEFyZW5hKiBhcmVuYSkgeyAgICAgIFwKLSAgICAqdG8gPSBmcm9tOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIHZv
aWQgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNGaWVsZFR5cGUsICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjpEZWxldGVO
b0FyZW5hKFR5cGVPbk1lbW9yeSYgeCkge30gICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgaW5saW5lIHZvaWQgTWFwVHlwZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVf
IyNGaWVsZFR5cGUsICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFR5cGU+OjpBc3NpZ25EZWZhdWx0VmFsdWUoVHlwZU9uTWVtb3J5KiB2YWx1ZSkge30gXAot
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIHZvaWQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIE1hcFR5
cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCBUeXBlPjo6SW5pdGlh
bGl6ZSggICAgICAgICAgXAotICAgICAgVHlwZU9uTWVtb3J5KiB2YWx1ZSwgQXJlbmEqIGFyZW5h
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqdmFsdWUgPSAw
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgaW5saW5lIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRM
aXRlOjpUWVBFXyMjRmllbGRUeXBlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICBUeXBlPjo6SW5pdGlhbGl6ZU1heWJlQnlEZWZhdWx0RW51bShUeXBlT25N
ZW1vcnkqIHZhbHVlLCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRlZmF1bHRfZW51bV92YWx1ZSwgICBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZW5hKiBhcmVuYSkg
eyAgICAgICAgICAgXAotICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PFR5cGVPbk1lbW9yeT4oZGVm
YXVsdF9lbnVtX3ZhbHVlKTsgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbmxpbmUgdHlwZW5hbWUgTWFwVHlw
ZUhhbmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNGaWVsZFR5cGUsICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjpNYXBFbnRyeUFjY2Vzc29y
VHlwZSogICAgICAgICAgICAgICAgICBcCi0gIE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRl
OjpUWVBFXyMjRmllbGRUeXBlLCBUeXBlPjo6RW5zdXJlTXV0YWJsZSggICAgICAgXAotICAgICAg
VHlwZU9uTWVtb3J5KiB2YWx1ZSwgQXJlbmEqIGFyZW5hKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGNvbnN0IHR5cGVu
YW1lIE1hcFR5cGVIYW5kbGVyPFdpcmVGb3JtYXRMaXRlOjpUWVBFXyMjRmllbGRUeXBlLCAgICAg
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlPjo6TWFwRW50
cnlBY2Nlc3NvclR5cGUmICAgICAgICAgICAgXAotICBNYXBUeXBlSGFuZGxlcjxXaXJlRm9ybWF0
TGl0ZTo6VFlQRV8jI0ZpZWxkVHlwZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgICAgICAgVHlwZT46OkRlZmF1bHRJZk5vdEluaXRpYWxpemVkKGNvbnN0IFR5cGVP
bk1lbW9yeSYgdmFsdWUsICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUeXBlT25NZW1vcnkmICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmFsdWUp
IHsgICAgICAgICAgIFwKLSAgICByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW5saW5lIGJvb2wgTWFwVHlwZUhh
bmRsZXI8V2lyZUZvcm1hdExpdGU6OlRZUEVfIyNGaWVsZFR5cGUsICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU+OjpJc0luaXRpYWxpemVkKGNvbnN0
IFR5cGVPbk1lbW9yeSYgdmFsdWUpIHsgXAotICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQot
UFJJTUlUSVZFX0hBTkRMRVJfRlVOQ1RJT05TKElOVDY0KQotUFJJTUlUSVZFX0hBTkRMRVJfRlVO
Q1RJT05TKFVJTlQ2NCkKLVBSSU1JVElWRV9IQU5ETEVSX0ZVTkNUSU9OUyhJTlQzMikKLVBSSU1J
VElWRV9IQU5ETEVSX0ZVTkNUSU9OUyhVSU5UMzIpCi1QUklNSVRJVkVfSEFORExFUl9GVU5DVElP
TlMoU0lOVDY0KQotUFJJTUlUSVZFX0hBTkRMRVJfRlVOQ1RJT05TKFNJTlQzMikKLVBSSU1JVElW
RV9IQU5ETEVSX0ZVTkNUSU9OUyhFTlVNKQotUFJJTUlUSVZFX0hBTkRMRVJfRlVOQ1RJT05TKERP
VUJMRSkKLVBSSU1JVElWRV9IQU5ETEVSX0ZVTkNUSU9OUyhGTE9BVCkKLVBSSU1JVElWRV9IQU5E
TEVSX0ZVTkNUSU9OUyhGSVhFRDY0KQotUFJJTUlUSVZFX0hBTkRMRVJfRlVOQ1RJT05TKEZJWEVE
MzIpCi1QUklNSVRJVkVfSEFORExFUl9GVU5DVElPTlMoU0ZJWEVENjQpCi1QUklNSVRJVkVfSEFO
RExFUl9GVU5DVElPTlMoU0ZJWEVEMzIpCi1QUklNSVRJVkVfSEFORExFUl9GVU5DVElPTlMoQk9P
TCkKLSN1bmRlZiBQUklNSVRJVkVfSEFORExFUl9GVU5DVElPTlMKLQotfSAgLy8gbmFtZXNwYWNl
IGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdv
b2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfVFlQRV9IQU5ETEVSX0hfXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF91bml0dGVzdC5wcm90byBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9tYXBfdW5pdHRlc3QucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFlYTFlOGNlM2Q0NDljN2JmYTZlOWJhNTI5YTVlZTQzNGFlNTk2MWYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF91
bml0dGVzdC5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMyI7Ci0KLW9wdGlvbiBj
Y19lbmFibGVfYXJlbmFzID0gdHJ1ZTsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdW5pdHRl
c3QucHJvdG8iOwotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fYXJlbmEucHJv
dG8iOwotCi0vLyBXZSBkb24ndCBwdXQgdGhpcyBpbiBhIHBhY2thZ2Ugd2l0aGluIHByb3RvMiBi
ZWNhdXNlIHdlIG5lZWQgdG8gbWFrZSBzdXJlCi0vLyB0aGF0IHRoZSBnZW5lcmF0ZWQgY29kZSBk
b2Vzbid0IGRlcGVuZCBvbiBiZWluZyBpbiB0aGUgcHJvdG8yIG5hbWVzcGFjZS4KLS8vIEluIG1h
cF90ZXN0X3V0aWwuaCB3ZSBkbyAidXNpbmcgbmFtZXNwYWNlIHVuaXR0ZXN0ID0gcHJvdG9idWZf
dW5pdHRlc3QiLgotcGFja2FnZSBwcm90b2J1Zl91bml0dGVzdDsKLQotLy8gVGVzdHMgbWFwcy4K
LW1lc3NhZ2UgVGVzdE1hcCB7Ci0gIG1hcDxpbnQzMiAgICwgaW50MzIgICA+IG1hcF9pbnQzMl9p
bnQzMiAgICAgICA9IDE7Ci0gIG1hcDxpbnQ2NCAgICwgaW50NjQgICA+IG1hcF9pbnQ2NF9pbnQ2
NCAgICAgICA9IDI7Ci0gIG1hcDx1aW50MzIgICwgdWludDMyICA+IG1hcF91aW50MzJfdWludDMy
ICAgICA9IDM7Ci0gIG1hcDx1aW50NjQgICwgdWludDY0ICA+IG1hcF91aW50NjRfdWludDY0ICAg
ICA9IDQ7Ci0gIG1hcDxzaW50MzIgICwgc2ludDMyICA+IG1hcF9zaW50MzJfc2ludDMyICAgICA9
IDU7Ci0gIG1hcDxzaW50NjQgICwgc2ludDY0ICA+IG1hcF9zaW50NjRfc2ludDY0ICAgICA9IDY7
Ci0gIG1hcDxmaXhlZDMyICwgZml4ZWQzMiA+IG1hcF9maXhlZDMyX2ZpeGVkMzIgICA9IDc7Ci0g
IG1hcDxmaXhlZDY0ICwgZml4ZWQ2NCA+IG1hcF9maXhlZDY0X2ZpeGVkNjQgICA9IDg7Ci0gIG1h
cDxzZml4ZWQzMiwgc2ZpeGVkMzI+IG1hcF9zZml4ZWQzMl9zZml4ZWQzMiA9IDk7Ci0gIG1hcDxz
Zml4ZWQ2NCwgc2ZpeGVkNjQ+IG1hcF9zZml4ZWQ2NF9zZml4ZWQ2NCA9IDEwOwotICBtYXA8aW50
MzIgICAsIGZsb2F0ICAgPiBtYXBfaW50MzJfZmxvYXQgICAgICAgPSAxMTsKLSAgbWFwPGludDMy
ICAgLCBkb3VibGUgID4gbWFwX2ludDMyX2RvdWJsZSAgICAgID0gMTI7Ci0gIG1hcDxib29sICAg
ICwgYm9vbCAgICA+IG1hcF9ib29sX2Jvb2wgICAgICAgICA9IDEzOwotICBtYXA8c3RyaW5nICAs
IHN0cmluZyAgPiBtYXBfc3RyaW5nX3N0cmluZyAgICAgPSAxNDsKLSAgbWFwPGludDMyICAgLCBi
eXRlcyAgID4gbWFwX2ludDMyX2J5dGVzICAgICAgID0gMTU7Ci0gIG1hcDxpbnQzMiAgICwgTWFw
RW51bSA+IG1hcF9pbnQzMl9lbnVtICAgICAgICA9IDE2OwotICBtYXA8aW50MzIgICAsIEZvcmVp
Z25NZXNzYWdlPiBtYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlID0gMTc7Ci0gIG1hcDxzdHJpbmcg
ICwgRm9yZWlnbk1lc3NhZ2U+IG1hcF9zdHJpbmdfZm9yZWlnbl9tZXNzYWdlID0gMTg7Ci19Ci0K
LW1lc3NhZ2UgVGVzdE1hcFN1Ym1lc3NhZ2UgewotICBUZXN0TWFwIHRlc3RfbWFwID0gMTsKLX0K
LQotbWVzc2FnZSBUZXN0TWVzc2FnZU1hcCB7Ci0gIG1hcDxpbnQzMiwgVGVzdEFsbFR5cGVzPiBt
YXBfaW50MzJfbWVzc2FnZSA9IDE7Ci19Ci0KLS8vIFR3byBtYXAgZmllbGRzIHNoYXJlIHRoZSBz
YW1lIGVudHJ5IGRlZmF1bHQgaW5zdGFuY2UuCi1tZXNzYWdlIFRlc3RTYW1lVHlwZU1hcCB7Ci0g
IG1hcDxpbnQzMiwgaW50MzI+IG1hcDEgPSAxOwotICBtYXA8aW50MzIsIGludDMyPiBtYXAyID0g
MjsKLX0KLQotCi1lbnVtIE1hcEVudW0gewotICBNQVBfRU5VTV9GT08gPSAwOwotICBNQVBfRU5V
TV9CQVIgPSAxOwotICBNQVBfRU5VTV9CQVogPSAyOwotfQotCi0vLyBUZXN0IGVtYmVkZWQgbWVz
c2FnZSB3aXRoIHJlcXVpcmVkIGZpZWxkcwotbWVzc2FnZSBUZXN0UmVxdWlyZWRNZXNzYWdlTWFw
IHsKLSAgbWFwPGludDMyLCBUZXN0UmVxdWlyZWQ+IG1hcF9maWVsZCA9IDE7Ci19Ci0KLW1lc3Nh
Z2UgVGVzdEFyZW5hTWFwIHsKLSAgbWFwPGludDMyICAgLCBpbnQzMiAgID4gbWFwX2ludDMyX2lu
dDMyICAgICAgID0gMTsKLSAgbWFwPGludDY0ICAgLCBpbnQ2NCAgID4gbWFwX2ludDY0X2ludDY0
ICAgICAgID0gMjsKLSAgbWFwPHVpbnQzMiAgLCB1aW50MzIgID4gbWFwX3VpbnQzMl91aW50MzIg
ICAgID0gMzsKLSAgbWFwPHVpbnQ2NCAgLCB1aW50NjQgID4gbWFwX3VpbnQ2NF91aW50NjQgICAg
ID0gNDsKLSAgbWFwPHNpbnQzMiAgLCBzaW50MzIgID4gbWFwX3NpbnQzMl9zaW50MzIgICAgID0g
NTsKLSAgbWFwPHNpbnQ2NCAgLCBzaW50NjQgID4gbWFwX3NpbnQ2NF9zaW50NjQgICAgID0gNjsK
LSAgbWFwPGZpeGVkMzIgLCBmaXhlZDMyID4gbWFwX2ZpeGVkMzJfZml4ZWQzMiAgID0gNzsKLSAg
bWFwPGZpeGVkNjQgLCBmaXhlZDY0ID4gbWFwX2ZpeGVkNjRfZml4ZWQ2NCAgID0gODsKLSAgbWFw
PHNmaXhlZDMyLCBzZml4ZWQzMj4gbWFwX3NmaXhlZDMyX3NmaXhlZDMyID0gOTsKLSAgbWFwPHNm
aXhlZDY0LCBzZml4ZWQ2ND4gbWFwX3NmaXhlZDY0X3NmaXhlZDY0ID0gMTA7Ci0gIG1hcDxpbnQz
MiAgICwgZmxvYXQgICA+IG1hcF9pbnQzMl9mbG9hdCAgICAgICA9IDExOwotICBtYXA8aW50MzIg
ICAsIGRvdWJsZSAgPiBtYXBfaW50MzJfZG91YmxlICAgICAgPSAxMjsKLSAgbWFwPGJvb2wgICAg
LCBib29sICAgID4gbWFwX2Jvb2xfYm9vbCAgICAgICAgID0gMTM7Ci0gIG1hcDxzdHJpbmcgICwg
c3RyaW5nICA+IG1hcF9zdHJpbmdfc3RyaW5nICAgICA9IDE0OwotICBtYXA8aW50MzIgICAsIGJ5
dGVzICAgPiBtYXBfaW50MzJfYnl0ZXMgICAgICAgPSAxNTsKLSAgbWFwPGludDMyICAgLCBNYXBF
bnVtID4gbWFwX2ludDMyX2VudW0gICAgICAgID0gMTY7Ci0gIG1hcDxpbnQzMiAgICwgRm9yZWln
bk1lc3NhZ2U+IG1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2UgPSAxNzsKLSAgbWFwPGludDMyLCAu
cHJvdG9idWZfdW5pdHRlc3Rfbm9fYXJlbmEuRm9yZWlnbk1lc3NhZ2U+Ci0gICAgICBtYXBfaW50
MzJfZm9yZWlnbl9tZXNzYWdlX25vX2FyZW5hID0gMTg7Ci19Ci0KLS8vIFByZXZpb3VzbHksIG1l
c3NhZ2UgY29udGFpbmluZyBlbnVtIGNhbGxlZCBUeXBlIGNhbm5vdCBiZSB1c2VkIGFzIHZhbHVl
IG9mCi0vLyBtYXAgZmllbGQuCi1tZXNzYWdlIE1lc3NhZ2VDb250YWluaW5nRW51bUNhbGxlZFR5
cGUgewotICBlbnVtIFR5cGUgewotICAgIFRZUEVfRk9PID0gMDsKLSAgfQotICBtYXA8c3RyaW5n
LCBNZXNzYWdlQ29udGFpbmluZ0VudW1DYWxsZWRUeXBlPiB0eXBlID0gMTsKLX0KLQotLy8gUHJl
dmlvdXNseSwgbWVzc2FnZSBjYW5ub3QgY29udGFpbiBtYXAgZmllbGQgY2FsbGVkICJlbnRyeSIu
Ci1tZXNzYWdlIE1lc3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkgewotICBtYXA8aW50MzIs
IGludDMyPiBlbnRyeSA9IDE7Ci19Ci0KLW1lc3NhZ2UgVGVzdFJlY3Vyc2l2ZU1hcE1lc3NhZ2Ug
ewotICBtYXA8c3RyaW5nLCBUZXN0UmVjdXJzaXZlTWFwTWVzc2FnZT4gYSA9IDE7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWFwX3VuaXR0ZXN0X3Byb3RvMy5wcm90byBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9tYXBfdW5pdHRlc3RfcHJvdG8zLnByb3RvCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNmJlMjc3MzA0YmM3YjQ0NDA1OGZiNzcyZDllODVjY2IyODZmZGI2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9tYXBfdW5pdHRlc3RfcHJvdG8zLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEs
MTIwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlz
IGZpbGUgaXMgbW9zdGx5IGVxdWl2YWxlbnQgdG8gbWFwX3VuaXR0ZXN0LnByb3RvLCBidXQgaW1w
b3J0cwotLy8gdW5pdHRlc3RfcHJvdG8zLnByb3RvIGluc3RlYWQgb2YgdW5pdHRlc3QucHJvdG8s
IHNvIHRoYXQgaXQgb25seQotLy8gdXNlcyBwcm90bzMgbWVzc2FnZXMuIFRoaXMgbWFrZXMgaXQg
c3VpdGFibGUgZm9yIHRlc3RpbmcKLS8vIGltcGxlbWVudGF0aW9ucyB3aGljaCBvbmx5IHN1cHBv
cnQgcHJvdG8zLgotLy8gVGhlIFRlc3RSZXF1aXJlZE1lc3NhZ2VNYXAgbWVzc2FnZSBoYXMgYmVl
biByZW1vdmVkIGFzIHRoZXJlIGFyZSBubwotLy8gcmVxdWlyZWQgZmllbGRzIGluIHByb3RvMy4K
LXN5bnRheCA9ICJwcm90bzMiOwotCi1vcHRpb24gY2NfZW5hYmxlX2FyZW5hcyA9IHRydWU7Ci1v
cHRpb24gY3NoYXJwX25hbWVzcGFjZSA9ICJHb29nbGUuUHJvdG9idWYuVGVzdFByb3RvcyI7Ci0K
LWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3Byb3RvMy5wcm90byI7Ci0KLS8vIFdl
IGRvbid0IHB1dCB0aGlzIGluIGEgcGFja2FnZSB3aXRoaW4gcHJvdG8yIGJlY2F1c2Ugd2UgbmVl
ZCB0byBtYWtlIHN1cmUKLS8vIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGRvZXNuJ3QgZGVwZW5k
IG9uIGJlaW5nIGluIHRoZSBwcm90bzIgbmFtZXNwYWNlLgotLy8gSW4gbWFwX3Rlc3RfdXRpbC5o
IHdlIGRvICJ1c2luZyBuYW1lc3BhY2UgdW5pdHRlc3QgPSBwcm90b2J1Zl91bml0dGVzdCIuCi1w
YWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi0vLyBUZXN0cyBtYXBzLgotbWVzc2FnZSBUZXN0
TWFwIHsKLSAgbWFwPGludDMyICAgLCBpbnQzMiAgID4gbWFwX2ludDMyX2ludDMyICAgICAgID0g
MTsKLSAgbWFwPGludDY0ICAgLCBpbnQ2NCAgID4gbWFwX2ludDY0X2ludDY0ICAgICAgID0gMjsK
LSAgbWFwPHVpbnQzMiAgLCB1aW50MzIgID4gbWFwX3VpbnQzMl91aW50MzIgICAgID0gMzsKLSAg
bWFwPHVpbnQ2NCAgLCB1aW50NjQgID4gbWFwX3VpbnQ2NF91aW50NjQgICAgID0gNDsKLSAgbWFw
PHNpbnQzMiAgLCBzaW50MzIgID4gbWFwX3NpbnQzMl9zaW50MzIgICAgID0gNTsKLSAgbWFwPHNp
bnQ2NCAgLCBzaW50NjQgID4gbWFwX3NpbnQ2NF9zaW50NjQgICAgID0gNjsKLSAgbWFwPGZpeGVk
MzIgLCBmaXhlZDMyID4gbWFwX2ZpeGVkMzJfZml4ZWQzMiAgID0gNzsKLSAgbWFwPGZpeGVkNjQg
LCBmaXhlZDY0ID4gbWFwX2ZpeGVkNjRfZml4ZWQ2NCAgID0gODsKLSAgbWFwPHNmaXhlZDMyLCBz
Zml4ZWQzMj4gbWFwX3NmaXhlZDMyX3NmaXhlZDMyID0gOTsKLSAgbWFwPHNmaXhlZDY0LCBzZml4
ZWQ2ND4gbWFwX3NmaXhlZDY0X3NmaXhlZDY0ID0gMTA7Ci0gIG1hcDxpbnQzMiAgICwgZmxvYXQg
ICA+IG1hcF9pbnQzMl9mbG9hdCAgICAgICA9IDExOwotICBtYXA8aW50MzIgICAsIGRvdWJsZSAg
PiBtYXBfaW50MzJfZG91YmxlICAgICAgPSAxMjsKLSAgbWFwPGJvb2wgICAgLCBib29sICAgID4g
bWFwX2Jvb2xfYm9vbCAgICAgICAgID0gMTM7Ci0gIG1hcDxzdHJpbmcgICwgc3RyaW5nICA+IG1h
cF9zdHJpbmdfc3RyaW5nICAgICA9IDE0OwotICBtYXA8aW50MzIgICAsIGJ5dGVzICAgPiBtYXBf
aW50MzJfYnl0ZXMgICAgICAgPSAxNTsKLSAgbWFwPGludDMyICAgLCBNYXBFbnVtID4gbWFwX2lu
dDMyX2VudW0gICAgICAgID0gMTY7Ci0gIG1hcDxpbnQzMiAgICwgRm9yZWlnbk1lc3NhZ2U+IG1h
cF9pbnQzMl9mb3JlaWduX21lc3NhZ2UgPSAxNzsKLX0KLQotbWVzc2FnZSBUZXN0TWFwU3VibWVz
c2FnZSB7Ci0gIFRlc3RNYXAgdGVzdF9tYXAgPSAxOwotfQotCi1tZXNzYWdlIFRlc3RNZXNzYWdl
TWFwIHsKLSAgbWFwPGludDMyLCBUZXN0QWxsVHlwZXM+IG1hcF9pbnQzMl9tZXNzYWdlID0gMTsK
LX0KLQotLy8gVHdvIG1hcCBmaWVsZHMgc2hhcmUgdGhlIHNhbWUgZW50cnkgZGVmYXVsdCBpbnN0
YW5jZS4KLW1lc3NhZ2UgVGVzdFNhbWVUeXBlTWFwIHsKLSAgbWFwPGludDMyLCBpbnQzMj4gbWFw
MSA9IDE7Ci0gIG1hcDxpbnQzMiwgaW50MzI+IG1hcDIgPSAyOwotfQotCi1lbnVtIE1hcEVudW0g
ewotICBNQVBfRU5VTV9GT08gPSAwOwotICBNQVBfRU5VTV9CQVIgPSAxOwotICBNQVBfRU5VTV9C
QVogPSAyOwotfQotCi1tZXNzYWdlIFRlc3RBcmVuYU1hcCB7Ci0gIG1hcDxpbnQzMiAgICwgaW50
MzIgICA+IG1hcF9pbnQzMl9pbnQzMiAgICAgICA9IDE7Ci0gIG1hcDxpbnQ2NCAgICwgaW50NjQg
ICA+IG1hcF9pbnQ2NF9pbnQ2NCAgICAgICA9IDI7Ci0gIG1hcDx1aW50MzIgICwgdWludDMyICA+
IG1hcF91aW50MzJfdWludDMyICAgICA9IDM7Ci0gIG1hcDx1aW50NjQgICwgdWludDY0ICA+IG1h
cF91aW50NjRfdWludDY0ICAgICA9IDQ7Ci0gIG1hcDxzaW50MzIgICwgc2ludDMyICA+IG1hcF9z
aW50MzJfc2ludDMyICAgICA9IDU7Ci0gIG1hcDxzaW50NjQgICwgc2ludDY0ICA+IG1hcF9zaW50
NjRfc2ludDY0ICAgICA9IDY7Ci0gIG1hcDxmaXhlZDMyICwgZml4ZWQzMiA+IG1hcF9maXhlZDMy
X2ZpeGVkMzIgICA9IDc7Ci0gIG1hcDxmaXhlZDY0ICwgZml4ZWQ2NCA+IG1hcF9maXhlZDY0X2Zp
eGVkNjQgICA9IDg7Ci0gIG1hcDxzZml4ZWQzMiwgc2ZpeGVkMzI+IG1hcF9zZml4ZWQzMl9zZml4
ZWQzMiA9IDk7Ci0gIG1hcDxzZml4ZWQ2NCwgc2ZpeGVkNjQ+IG1hcF9zZml4ZWQ2NF9zZml4ZWQ2
NCA9IDEwOwotICBtYXA8aW50MzIgICAsIGZsb2F0ICAgPiBtYXBfaW50MzJfZmxvYXQgICAgICAg
PSAxMTsKLSAgbWFwPGludDMyICAgLCBkb3VibGUgID4gbWFwX2ludDMyX2RvdWJsZSAgICAgID0g
MTI7Ci0gIG1hcDxib29sICAgICwgYm9vbCAgICA+IG1hcF9ib29sX2Jvb2wgICAgICAgICA9IDEz
OwotICBtYXA8aW50MzIgICAsIE1hcEVudW0gPiBtYXBfaW50MzJfZW51bSAgICAgICAgPSAxNDsK
LSAgbWFwPGludDMyICAgLCBGb3JlaWduTWVzc2FnZT4gbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2Fn
ZSA9IDE1OwotfQotCi0vLyBQcmV2aW91c2x5LCBtZXNzYWdlIGNvbnRhaW5pbmcgZW51bSBjYWxs
ZWQgVHlwZSBjYW5ub3QgYmUgdXNlZCBhcyB2YWx1ZSBvZgotLy8gbWFwIGZpZWxkLgotbWVzc2Fn
ZSBNZXNzYWdlQ29udGFpbmluZ0VudW1DYWxsZWRUeXBlIHsKLSAgZW51bSBUeXBlIHsKLSAgICBU
WVBFX0ZPTyA9IDA7Ci0gIH0KLSAgbWFwPGludDMyLCBNZXNzYWdlQ29udGFpbmluZ0VudW1DYWxs
ZWRUeXBlPiB0eXBlID0gMTsKLX0KLQotLy8gUHJldmlvdXNseSwgbWVzc2FnZSBjYW5ub3QgY29u
dGFpbiBtYXAgZmllbGQgY2FsbGVkICJlbnRyeSIuCi1tZXNzYWdlIE1lc3NhZ2VDb250YWluaW5n
TWFwQ2FsbGVkRW50cnkgewotICBtYXA8aW50MzIsIGludDMyPiBlbnRyeSA9IDE7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWVzc2FnZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9tZXNzYWdlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjJjYTc5YzgwY2I3
ZDQ5Y2RmNGEyZGM4MTRkYjI5MzU2MGY1ZjgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmNjCisrKyAvZGV2
L251bGwKQEAgLTEsNTE3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFz
ZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hl
bWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2lu
Y2x1ZGUgPHN0YWNrPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+Ci0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL211dGV4Lmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL29uY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvcmVmbGVjdGlvbl9pbnRlcm5hbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9pby9jb2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19j
b3B5X3N0cmVhbV9pbXBsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3Iu
cGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
Z2VuZXJhdGVkX21lc3NhZ2VfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZWZs
ZWN0aW9uX29wcy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL21hcF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL3NpbmdsZXRvbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGxf
dXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLXVz
aW5nIGludGVybmFsOjpXaXJlRm9ybWF0OwotdXNpbmcgaW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM7
Ci0KLU1lc3NhZ2U6On5NZXNzYWdlKCkge30KLQotdm9pZCBNZXNzYWdlOjpNZXJnZUZyb20oY29u
c3QgTWVzc2FnZSYgZnJvbSkgewotICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gR2V0
RGVzY3JpcHRvcigpOwotICBHT09HTEVfQ0hFQ0tfRVEoZnJvbS5HZXREZXNjcmlwdG9yKCksIGRl
c2NyaXB0b3IpCi0gICAgPDwgIjogVHJpZWQgdG8gbWVyZ2UgZnJvbSBhIG1lc3NhZ2Ugd2l0aCBh
IGRpZmZlcmVudCB0eXBlLiAgIgotICAgICAgICJ0bzogIiA8PCBkZXNjcmlwdG9yLT5mdWxsX25h
bWUoKSA8PCAiLCAiCi0gICAgICAgImZyb206ICIgPDwgZnJvbS5HZXREZXNjcmlwdG9yKCktPmZ1
bGxfbmFtZSgpOwotICBSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLX0KLQotdm9p
ZCBNZXNzYWdlOjpDaGVja1R5cGVBbmRNZXJnZUZyb20oY29uc3QgTWVzc2FnZUxpdGUmIG90aGVy
KSB7Ci0gIE1lcmdlRnJvbSgqZG93bl9jYXN0PGNvbnN0IE1lc3NhZ2UqPigmb3RoZXIpKTsKLX0K
LQotdm9pZCBNZXNzYWdlOjpDb3B5RnJvbShjb25zdCBNZXNzYWdlJiBmcm9tKSB7Ci0gIGNvbnN0
IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBHZXREZXNjcmlwdG9yKCk7Ci0gIEdPT0dMRV9DSEVD
S19FUShmcm9tLkdldERlc2NyaXB0b3IoKSwgZGVzY3JpcHRvcikKLSAgICA8PCAiOiBUcmllZCB0
byBjb3B5IGZyb20gYSBtZXNzYWdlIHdpdGggYSBkaWZmZXJlbnQgdHlwZS4gIgotICAgICAgICJ0
bzogIiA8PCBkZXNjcmlwdG9yLT5mdWxsX25hbWUoKSA8PCAiLCAiCi0gICAgICAgImZyb206ICIg
PDwgZnJvbS5HZXREZXNjcmlwdG9yKCktPmZ1bGxfbmFtZSgpOwotICBSZWZsZWN0aW9uT3BzOjpD
b3B5KGZyb20sIHRoaXMpOwotfQotCi1zdHJpbmcgTWVzc2FnZTo6R2V0VHlwZU5hbWUoKSBjb25z
dCB7Ci0gIHJldHVybiBHZXREZXNjcmlwdG9yKCktPmZ1bGxfbmFtZSgpOwotfQotCi12b2lkIE1l
c3NhZ2U6OkNsZWFyKCkgewotICBSZWZsZWN0aW9uT3BzOjpDbGVhcih0aGlzKTsKLX0KLQotYm9v
bCBNZXNzYWdlOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotICByZXR1cm4gUmVmbGVjdGlvbk9w
czo6SXNJbml0aWFsaXplZCgqdGhpcyk7Ci19Ci0KLXZvaWQgTWVzc2FnZTo6RmluZEluaXRpYWxp
emF0aW9uRXJyb3JzKHZlY3RvcjxzdHJpbmc+KiBlcnJvcnMpIGNvbnN0IHsKLSAgcmV0dXJuIFJl
ZmxlY3Rpb25PcHM6OkZpbmRJbml0aWFsaXphdGlvbkVycm9ycygqdGhpcywgIiIsIGVycm9ycyk7
Ci19Ci0KLXN0cmluZyBNZXNzYWdlOjpJbml0aWFsaXphdGlvbkVycm9yU3RyaW5nKCkgY29uc3Qg
ewotICB2ZWN0b3I8c3RyaW5nPiBlcnJvcnM7Ci0gIEZpbmRJbml0aWFsaXphdGlvbkVycm9ycygm
ZXJyb3JzKTsKLSAgcmV0dXJuIEpvaW4oZXJyb3JzLCAiLCAiKTsKLX0KLQotdm9pZCBNZXNzYWdl
OjpDaGVja0luaXRpYWxpemVkKCkgY29uc3QgewotICBHT09HTEVfQ0hFQ0soSXNJbml0aWFsaXpl
ZCgpKQotICAgIDw8ICJNZXNzYWdlIG9mIHR5cGUgXCIiIDw8IEdldERlc2NyaXB0b3IoKS0+ZnVs
bF9uYW1lKCkKLSAgICA8PCAiXCIgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHM6ICIgPDwgSW5p
dGlhbGl6YXRpb25FcnJvclN0cmluZygpOwotfQotCi12b2lkIE1lc3NhZ2U6OkRpc2NhcmRVbmtu
b3duRmllbGRzKCkgewotICByZXR1cm4gUmVmbGVjdGlvbk9wczo6RGlzY2FyZFVua25vd25GaWVs
ZHModGhpcyk7Ci19Ci0KLWJvb2wgTWVzc2FnZTo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFt
KGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotICByZXR1cm4gV2lyZUZvcm1hdDo6UGFy
c2VBbmRNZXJnZVBhcnRpYWwoaW5wdXQsIHRoaXMpOwotfQotCi1ib29sIE1lc3NhZ2U6OlBhcnNl
RnJvbUZpbGVEZXNjcmlwdG9yKGludCBmaWxlX2Rlc2NyaXB0b3IpIHsKLSAgaW86OkZpbGVJbnB1
dFN0cmVhbSBpbnB1dChmaWxlX2Rlc2NyaXB0b3IpOwotICByZXR1cm4gUGFyc2VGcm9tWmVyb0Nv
cHlTdHJlYW0oJmlucHV0KSAmJiBpbnB1dC5HZXRFcnJubygpID09IDA7Ci19Ci0KLWJvb2wgTWVz
c2FnZTo6UGFyc2VQYXJ0aWFsRnJvbUZpbGVEZXNjcmlwdG9yKGludCBmaWxlX2Rlc2NyaXB0b3Ip
IHsKLSAgaW86OkZpbGVJbnB1dFN0cmVhbSBpbnB1dChmaWxlX2Rlc2NyaXB0b3IpOwotICByZXR1
cm4gUGFyc2VQYXJ0aWFsRnJvbVplcm9Db3B5U3RyZWFtKCZpbnB1dCkgJiYgaW5wdXQuR2V0RXJy
bm8oKSA9PSAwOwotfQotCi1ib29sIE1lc3NhZ2U6OlBhcnNlRnJvbUlzdHJlYW0oaXN0cmVhbSog
aW5wdXQpIHsKLSAgaW86OklzdHJlYW1JbnB1dFN0cmVhbSB6ZXJvX2NvcHlfaW5wdXQoaW5wdXQp
OwotICByZXR1cm4gUGFyc2VGcm9tWmVyb0NvcHlTdHJlYW0oJnplcm9fY29weV9pbnB1dCkgJiYg
aW5wdXQtPmVvZigpOwotfQotCi1ib29sIE1lc3NhZ2U6OlBhcnNlUGFydGlhbEZyb21Jc3RyZWFt
KGlzdHJlYW0qIGlucHV0KSB7Ci0gIGlvOjpJc3RyZWFtSW5wdXRTdHJlYW0gemVyb19jb3B5X2lu
cHV0KGlucHV0KTsKLSAgcmV0dXJuIFBhcnNlUGFydGlhbEZyb21aZXJvQ29weVN0cmVhbSgmemVy
b19jb3B5X2lucHV0KSAmJiBpbnB1dC0+ZW9mKCk7Ci19Ci0KLQotdm9pZCBNZXNzYWdlOjpTZXJp
YWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQp
IGNvbnN0IHsKLSAgV2lyZUZvcm1hdDo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKCp0aGlzLCBH
ZXRDYWNoZWRTaXplKCksIG91dHB1dCk7Ci19Ci0KLWludCBNZXNzYWdlOjpCeXRlU2l6ZSgpIGNv
bnN0IHsKLSAgaW50IHNpemUgPSBXaXJlRm9ybWF0OjpCeXRlU2l6ZSgqdGhpcyk7Ci0gIFNldENh
Y2hlZFNpemUoc2l6ZSk7Ci0gIHJldHVybiBzaXplOwotfQotCi12b2lkIE1lc3NhZ2U6OlNldENh
Y2hlZFNpemUoaW50IC8qIHNpemUgKi8pIGNvbnN0IHsKLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwg
Ik1lc3NhZ2UgY2xhc3MgXCIiIDw8IEdldERlc2NyaXB0b3IoKS0+ZnVsbF9uYW1lKCkKLSAgICAg
ICAgICAgICA8PCAiXCIgaW1wbGVtZW50cyBuZWl0aGVyIFNldENhY2hlZFNpemUoKSBub3IgQnl0
ZVNpemUoKS4gICIKLSAgICAgICAgICAgICAgICAiTXVzdCBpbXBsZW1lbnQgb25lIG9yIHRoZSBv
dGhlci4iOwotfQotCi1pbnQgTWVzc2FnZTo6U3BhY2VVc2VkKCkgY29uc3QgewotICByZXR1cm4g
R2V0UmVmbGVjdGlvbigpLT5TcGFjZVVzZWQoKnRoaXMpOwotfQotCi1ib29sIE1lc3NhZ2U6OlNl
cmlhbGl6ZVRvRmlsZURlc2NyaXB0b3IoaW50IGZpbGVfZGVzY3JpcHRvcikgY29uc3QgewotICBp
bzo6RmlsZU91dHB1dFN0cmVhbSBvdXRwdXQoZmlsZV9kZXNjcmlwdG9yKTsKLSAgcmV0dXJuIFNl
cmlhbGl6ZVRvWmVyb0NvcHlTdHJlYW0oJm91dHB1dCk7Ci19Ci0KLWJvb2wgTWVzc2FnZTo6U2Vy
aWFsaXplUGFydGlhbFRvRmlsZURlc2NyaXB0b3IoaW50IGZpbGVfZGVzY3JpcHRvcikgY29uc3Qg
ewotICBpbzo6RmlsZU91dHB1dFN0cmVhbSBvdXRwdXQoZmlsZV9kZXNjcmlwdG9yKTsKLSAgcmV0
dXJuIFNlcmlhbGl6ZVBhcnRpYWxUb1plcm9Db3B5U3RyZWFtKCZvdXRwdXQpOwotfQotCi1ib29s
IE1lc3NhZ2U6OlNlcmlhbGl6ZVRvT3N0cmVhbShvc3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAg
ewotICAgIGlvOjpPc3RyZWFtT3V0cHV0U3RyZWFtIHplcm9fY29weV9vdXRwdXQob3V0cHV0KTsK
LSAgICBpZiAoIVNlcmlhbGl6ZVRvWmVyb0NvcHlTdHJlYW0oJnplcm9fY29weV9vdXRwdXQpKSBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIG91dHB1dC0+Z29vZCgpOwotfQotCi1ib29sIE1l
c3NhZ2U6OlNlcmlhbGl6ZVBhcnRpYWxUb09zdHJlYW0ob3N0cmVhbSogb3V0cHV0KSBjb25zdCB7
Ci0gIGlvOjpPc3RyZWFtT3V0cHV0U3RyZWFtIHplcm9fY29weV9vdXRwdXQob3V0cHV0KTsKLSAg
cmV0dXJuIFNlcmlhbGl6ZVBhcnRpYWxUb1plcm9Db3B5U3RyZWFtKCZ6ZXJvX2NvcHlfb3V0cHV0
KTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gUmVmbGVjdGlvbiBhbmQgYXNz
b2NpYXRlZCBUZW1wbGF0ZSBTcGVjaWFsaXphdGlvbnMKLQotUmVmbGVjdGlvbjo6flJlZmxlY3Rp
b24oKSB7fQotCi0jZGVmaW5lIEhBTkRMRV9UWVBFKFRZUEUsIENQUFRZUEUsIENUWVBFKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotdGVtcGxhdGU8PiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWNvbnN0IFJlcGVhdGVk
RmllbGQ8VFlQRT4mIFJlZmxlY3Rpb246OkdldFJlcGVhdGVkRmllbGQ8VFlQRT4oICAgICAgICBc
Ci0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCkgY29uc3QgeyAgICAgXAotICByZXR1cm4gKnN0YXRpY19jYXN0PFJlcGVhdGVkRmllbGQ8VFlQ
RT4qID4oICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIE11dGFibGVSYXdSZXBlYXRl
ZEZpZWxkKGNvbnN0X2Nhc3Q8TWVzc2FnZSo+KCZtZXNzYWdlKSwgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpZWxkLCBDUFBUWVBFLCBDVFlQRSwgTlVMTCkpOyAgICAgICAg
ICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi10ZW1wbGF0ZTw+ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
UmVwZWF0ZWRGaWVsZDxUWVBFPiogUmVmbGVjdGlvbjo6TXV0YWJsZVJlcGVhdGVkRmllbGQ8VFlQ
RT4oICAgICAgICAgIFwKLSAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkKSBjb25zdCB7ICAgICAgICAgICBcCi0gIHJldHVybiBzdGF0aWNfY2FzdDxSZXBl
YXRlZEZpZWxkPFRZUEU+KiA+KCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgTXV0
YWJsZVJhd1JlcGVhdGVkRmllbGQobWVzc2FnZSwgZmllbGQsIENQUFRZUEUsIENUWVBFLCBOVUxM
KSk7IFwKLX0KLQotSEFORExFX1RZUEUoaW50MzIsICBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVf
SU5UMzIsICAtMSk7Ci1IQU5ETEVfVFlQRShpbnQ2NCwgIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9JTlQ2NCwgIC0xKTsKLUhBTkRMRV9UWVBFKHVpbnQzMiwgRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX1VJTlQzMiwgLTEpOwotSEFORExFX1RZUEUodWludDY0LCBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfVUlOVDY0LCAtMSk7Ci1IQU5ETEVfVFlQRShmbG9hdCwgIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV9GTE9BVCwgIC0xKTsKLUhBTkRMRV9UWVBFKGRvdWJsZSwgRmllbGREZXNjcmlwdG9y
OjpDUFBUWVBFX0RPVUJMRSwgLTEpOwotSEFORExFX1RZUEUoYm9vbCwgICBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfQk9PTCwgICAtMSk7Ci0KLQotI3VuZGVmIEhBTkRMRV9UWVBFCi0KLXZvaWQq
IFJlZmxlY3Rpb246Ok11dGFibGVSYXdSZXBlYXRlZFN0cmluZygKLSAgICBNZXNzYWdlKiBtZXNz
YWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBib29sIGlzX3N0cmluZykgY29uc3Qg
ewotICByZXR1cm4gTXV0YWJsZVJhd1JlcGVhdGVkRmllbGQobWVzc2FnZSwgZmllbGQsCi0gICAg
ICBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HLCBGaWVsZE9wdGlvbnM6OlNUUklORywg
TlVMTCk7Ci19Ci0KLQotLy8gRGVmYXVsdCBFbnVtVmFsdWUgQVBJIGltcGxlbWVudGF0aW9ucy4g
UmVhbCByZWZsZWN0aW9uIGltcGxlbWVudGF0aW9ucyBzaG91bGQKLS8vIG92ZXJyaWRlIHRoZXNl
LiBIb3dldmVyLCB0aGVyZSBhcmUgc2V2ZXJhbCBsZWdhY3kgaW1wbGVtZW50YXRpb25zIHRoYXQg
ZG8KLS8vIG5vdCwgYW5kIGNhbm5vdCBlYXNpbHkgYmUgY2hhbmdlZCBhdCB0aGUgc2FtZSB0aW1l
IGFzIHRoZSBSZWZsZWN0aW9uIEFQSSwgc28KLS8vIHdlIHByb3ZpZGUgdGhlc2UgZm9yIG5vdy4K
LS8vIFRPRE86IFJlbW92ZSB0aGVzZSBvbmNlIGFsbCBSZWZsZWN0aW9uIGltcGxlbWVudGF0aW9u
cyBhcmUgdXBkYXRlZC4KLWludCBSZWZsZWN0aW9uOjpHZXRFbnVtVmFsdWUoY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCkgY29uc3QgewotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiVW5pbXBsZW1l
bnRlZCBFbnVtVmFsdWUgQVBJLiI7Ci0gIHJldHVybiAwOwotfQotdm9pZCBSZWZsZWN0aW9uOjpT
ZXRFbnVtVmFsdWUoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpIGNvbnN0
IHsKLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIlVuaW1wbGVtZW50ZWQgRW51bVZhbHVlIEFQSS4i
OwotfQotaW50IFJlZmxlY3Rpb246OkdldFJlcGVhdGVkRW51bVZhbHVlKAotICAgIGNvbnN0IE1l
c3NhZ2UmIG1lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGlu
ZGV4KSBjb25zdCB7Ci0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJVbmltcGxlbWVudGVkIEVudW1W
YWx1ZSBBUEkuIjsKLSAgcmV0dXJuIDA7Ci19Ci12b2lkIFJlZmxlY3Rpb246OlNldFJlcGVhdGVk
RW51bVZhbHVlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkgY29uc3QgewotICBHT09HTEVfTE9H
KEZBVEFMKSA8PCAiVW5pbXBsZW1lbnRlZCBFbnVtVmFsdWUgQVBJLiI7Ci19Ci12b2lkIFJlZmxl
Y3Rpb246OkFkZEVudW1WYWx1ZShNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgIGludCB2YWx1
ZSkgY29uc3QgewotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiVW5pbXBsZW1lbnRlZCBFbnVtVmFs
dWUgQVBJLiI7Ci19Ci0KLU1hcEl0ZXJhdG9yIFJlZmxlY3Rpb246Ok1hcEJlZ2luKAotICAgIE1l
c3NhZ2UqIG1lc3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Qg
ewotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiVW5pbXBsZW1lbnRlZCBNYXAgUmVmbGVjdGlvbiBB
UEkuIjsKLSAgTWFwSXRlcmF0b3IgaXRlcihtZXNzYWdlLCBmaWVsZCk7Ci0gIHJldHVybiBpdGVy
OwotfQotCi1NYXBJdGVyYXRvciBSZWZsZWN0aW9uOjpNYXBFbmQoCi0gICAgTWVzc2FnZSogbWVz
c2FnZSwKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0gIEdPT0dM
RV9MT0coRkFUQUwpIDw8ICJVbmltcGxlbWVudGVkIE1hcCBSZWZsZWN0aW9uIEFQSS4iOwotICBN
YXBJdGVyYXRvciBpdGVyKG1lc3NhZ2UsIGZpZWxkKTsKLSAgcmV0dXJuIGl0ZXI7Ci19Ci0KLS8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0vLyBNZXNzYWdlRmFjdG9yeQotCi1NZXNzYWdlRmFjdG9y
eTo6fk1lc3NhZ2VGYWN0b3J5KCkge30KLQotbmFtZXNwYWNlIHsKLQotY2xhc3MgR2VuZXJhdGVk
TWVzc2FnZUZhY3RvcnkgOiBwdWJsaWMgTWVzc2FnZUZhY3RvcnkgewotIHB1YmxpYzoKLSAgR2Vu
ZXJhdGVkTWVzc2FnZUZhY3RvcnkoKTsKLSAgfkdlbmVyYXRlZE1lc3NhZ2VGYWN0b3J5KCk7Ci0K
LSAgc3RhdGljIEdlbmVyYXRlZE1lc3NhZ2VGYWN0b3J5KiBzaW5nbGV0b24oKTsKLQotICB0eXBl
ZGVmIHZvaWQgUmVnaXN0cmF0aW9uRnVuYyhjb25zdCBzdHJpbmcmKTsKLSAgdm9pZCBSZWdpc3Rl
ckZpbGUoY29uc3QgY2hhciogZmlsZSwgUmVnaXN0cmF0aW9uRnVuYyogcmVnaXN0cmF0aW9uX2Z1
bmMpOwotICB2b2lkIFJlZ2lzdGVyVHlwZShjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBj
b25zdCBNZXNzYWdlKiBwcm90b3R5cGUpOwotCi0gIC8vIGltcGxlbWVudHMgTWVzc2FnZUZhY3Rv
cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGNvbnN0IE1lc3Nh
Z2UqIEdldFByb3RvdHlwZShjb25zdCBEZXNjcmlwdG9yKiB0eXBlKTsKLQotIHByaXZhdGU6Ci0g
IC8vIE9ubHkgd3JpdHRlbiBhdCBzdGF0aWMgaW5pdCB0aW1lLCBzbyBkb2VzIG5vdCByZXF1aXJl
IGxvY2tpbmcuCi0gIGhhc2hfbWFwPGNvbnN0IGNoYXIqLCBSZWdpc3RyYXRpb25GdW5jKiwKLSAg
ICAgICAgICAgaGFzaDxjb25zdCBjaGFyKj4sIHN0cmVxPiBmaWxlX21hcF87Ci0KLSAgLy8gSW5p
dGlhbGl6ZWQgbGF6aWx5LCBzbyByZXF1aXJlcyBsb2NraW5nLgotICBNdXRleCBtdXRleF87Ci0g
IGhhc2hfbWFwPGNvbnN0IERlc2NyaXB0b3IqLCBjb25zdCBNZXNzYWdlKj4gdHlwZV9tYXBfOwot
fTsKLQotR2VuZXJhdGVkTWVzc2FnZUZhY3RvcnkqIGdlbmVyYXRlZF9tZXNzYWdlX2ZhY3Rvcnlf
ID0gTlVMTDsKLUdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0UoZ2VuZXJhdGVkX21lc3NhZ2Vf
ZmFjdG9yeV9vbmNlX2luaXRfKTsKLQotdm9pZCBTaHV0ZG93bkdlbmVyYXRlZE1lc3NhZ2VGYWN0
b3J5KCkgewotICBkZWxldGUgZ2VuZXJhdGVkX21lc3NhZ2VfZmFjdG9yeV87Ci19Ci0KLXZvaWQg
SW5pdEdlbmVyYXRlZE1lc3NhZ2VGYWN0b3J5KCkgewotICBnZW5lcmF0ZWRfbWVzc2FnZV9mYWN0
b3J5XyA9IG5ldyBHZW5lcmF0ZWRNZXNzYWdlRmFjdG9yeTsKLSAgaW50ZXJuYWw6Ok9uU2h1dGRv
d24oJlNodXRkb3duR2VuZXJhdGVkTWVzc2FnZUZhY3RvcnkpOwotfQotCi1HZW5lcmF0ZWRNZXNz
YWdlRmFjdG9yeTo6R2VuZXJhdGVkTWVzc2FnZUZhY3RvcnkoKSB7fQotR2VuZXJhdGVkTWVzc2Fn
ZUZhY3Rvcnk6On5HZW5lcmF0ZWRNZXNzYWdlRmFjdG9yeSgpIHt9Ci0KLUdlbmVyYXRlZE1lc3Nh
Z2VGYWN0b3J5KiBHZW5lcmF0ZWRNZXNzYWdlRmFjdG9yeTo6c2luZ2xldG9uKCkgewotICA6Omdv
b2dsZTo6cHJvdG9idWY6Okdvb2dsZU9uY2VJbml0KCZnZW5lcmF0ZWRfbWVzc2FnZV9mYWN0b3J5
X29uY2VfaW5pdF8sCi0gICAgICAgICAgICAgICAgICZJbml0R2VuZXJhdGVkTWVzc2FnZUZhY3Rv
cnkpOwotICByZXR1cm4gZ2VuZXJhdGVkX21lc3NhZ2VfZmFjdG9yeV87Ci19Ci0KLXZvaWQgR2Vu
ZXJhdGVkTWVzc2FnZUZhY3Rvcnk6OlJlZ2lzdGVyRmlsZSgKLSAgICBjb25zdCBjaGFyKiBmaWxl
LCBSZWdpc3RyYXRpb25GdW5jKiByZWdpc3RyYXRpb25fZnVuYykgewotICBpZiAoIUluc2VydElm
Tm90UHJlc2VudCgmZmlsZV9tYXBfLCBmaWxlLCByZWdpc3RyYXRpb25fZnVuYykpIHsKLSAgICBH
T09HTEVfTE9HKEZBVEFMKSA8PCAiRmlsZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICIgPDwgZmls
ZTsKLSAgfQotfQotCi12b2lkIEdlbmVyYXRlZE1lc3NhZ2VGYWN0b3J5OjpSZWdpc3RlclR5cGUo
Y29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlKiBwcm90b3R5cGUpIHsKLSAgR09PR0xFX0RD
SEVDS19FUShkZXNjcmlwdG9yLT5maWxlKCktPnBvb2woKSwgRGVzY3JpcHRvclBvb2w6OmdlbmVy
YXRlZF9wb29sKCkpCi0gICAgPDwgIlRyaWVkIHRvIHJlZ2lzdGVyIGEgbm9uLWdlbmVyYXRlZCB0
eXBlIHdpdGggdGhlIGdlbmVyYXRlZCAiCi0gICAgICAgInR5cGUgcmVnaXN0cnkuIjsKLQotICAv
LyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhcyBhIHJlc3VsdCBvZiBjYWxsaW5nIGEgZmls
ZSByZWdpc3RyYXRpb24KLSAgLy8gZnVuY3Rpb24gZHVyaW5nIEdldFByb3RvdHlwZSgpLCBpbiB3
aGljaCBjYXNlIHdlIGFscmVhZHkgaGF2ZSBsb2NrZWQKLSAgLy8gdGhlIG11dGV4LgotICBtdXRl
eF8uQXNzZXJ0SGVsZCgpOwotICBpZiAoIUluc2VydElmTm90UHJlc2VudCgmdHlwZV9tYXBfLCBk
ZXNjcmlwdG9yLCBwcm90b3R5cGUpKSB7Ci0gICAgR09PR0xFX0xPRyhERkFUQUwpIDw8ICJUeXBl
IGlzIGFscmVhZHkgcmVnaXN0ZXJlZDogIiA8PCBkZXNjcmlwdG9yLT5mdWxsX25hbWUoKTsKLSAg
fQotfQotCi0KLWNvbnN0IE1lc3NhZ2UqIEdlbmVyYXRlZE1lc3NhZ2VGYWN0b3J5OjpHZXRQcm90
b3R5cGUoY29uc3QgRGVzY3JpcHRvciogdHlwZSkgewotICB7Ci0gICAgUmVhZGVyTXV0ZXhMb2Nr
IGxvY2soJm11dGV4Xyk7Ci0gICAgY29uc3QgTWVzc2FnZSogcmVzdWx0ID0gRmluZFB0ck9yTnVs
bCh0eXBlX21hcF8sIHR5cGUpOwotICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgcmV0dXJuIHJlc3Vs
dDsKLSAgfQotCi0gIC8vIElmIHRoZSB0eXBlIGlzIG5vdCBpbiB0aGUgZ2VuZXJhdGVkIHBvb2ws
IHRoZW4gd2UgY2FuJ3QgcG9zc2libHkgaGFuZGxlCi0gIC8vIGl0LgotICBpZiAodHlwZS0+Zmls
ZSgpLT5wb29sKCkgIT0gRGVzY3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCkpIHJldHVybiBO
VUxMOwotCi0gIC8vIEFwcGFyZW50bHkgdGhlIGZpbGUgaGFzbid0IGJlZW4gcmVnaXN0ZXJlZCB5
ZXQuICBMZXQncyBkbyB0aGF0IG5vdy4KLSAgUmVnaXN0cmF0aW9uRnVuYyogcmVnaXN0cmF0aW9u
X2Z1bmMgPQotICAgICAgRmluZFB0ck9yTnVsbChmaWxlX21hcF8sIHR5cGUtPmZpbGUoKS0+bmFt
ZSgpLmNfc3RyKCkpOwotICBpZiAocmVnaXN0cmF0aW9uX2Z1bmMgPT0gTlVMTCkgewotICAgIEdP
T0dMRV9MT0coREZBVEFMKSA8PCAiRmlsZSBhcHBlYXJzIHRvIGJlIGluIGdlbmVyYXRlZCBwb29s
IGJ1dCB3YXNuJ3QgIgotICAgICAgICAgICAgICAgICAgICJyZWdpc3RlcmVkOiAiIDw8IHR5cGUt
PmZpbGUoKS0+bmFtZSgpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgV3JpdGVyTXV0ZXhM
b2NrIGxvY2soJm11dGV4Xyk7Ci0KLSAgLy8gQ2hlY2sgaWYgYW5vdGhlciB0aHJlYWQgcHJlZW1w
dGVkIHVzLgotICBjb25zdCBNZXNzYWdlKiByZXN1bHQgPSBGaW5kUHRyT3JOdWxsKHR5cGVfbWFw
XywgdHlwZSk7Ci0gIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgIC8vIE5vcGUuICBPSywgcmVn
aXN0ZXIgZXZlcnl0aGluZy4KLSAgICByZWdpc3RyYXRpb25fZnVuYyh0eXBlLT5maWxlKCktPm5h
bWUoKSk7Ci0gICAgLy8gU2hvdWxkIGJlIGhlcmUgbm93LgotICAgIHJlc3VsdCA9IEZpbmRQdHJP
ck51bGwodHlwZV9tYXBfLCB0eXBlKTsKLSAgfQotCi0gIGlmIChyZXN1bHQgPT0gTlVMTCkgewot
ICAgIEdPT0dMRV9MT0coREZBVEFMKSA8PCAiVHlwZSBhcHBlYXJzIHRvIGJlIGluIGdlbmVyYXRl
ZCBwb29sIGJ1dCB3YXNuJ3QgIgotICAgICAgICAgICAgICAgIDw8ICJyZWdpc3RlcmVkOiAiIDw8
IHR5cGUtPmZ1bGxfbmFtZSgpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlCi0KLU1lc3NhZ2VGYWN0b3J5KiBNZXNzYWdlRmFjdG9yeTo6Z2VuZXJhdGVkX2Zh
Y3RvcnkoKSB7Ci0gIHJldHVybiBHZW5lcmF0ZWRNZXNzYWdlRmFjdG9yeTo6c2luZ2xldG9uKCk7
Ci19Ci0KLXZvaWQgTWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRGaWxl
KAotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCB2b2lkICgqcmVnaXN0ZXJfbWVzc2FnZXMpKGNv
bnN0IHN0cmluZyYpKSB7Ci0gIEdlbmVyYXRlZE1lc3NhZ2VGYWN0b3J5OjpzaW5nbGV0b24oKS0+
UmVnaXN0ZXJGaWxlKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9tZXNzYWdlcyk7Ci19Ci0KLXZvaWQgTWVzc2Fn
ZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgIGNvbnN0IERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IsIGNvbnN0IE1lc3NhZ2UqIHByb3RvdHlwZSkgewotICBHZW5l
cmF0ZWRNZXNzYWdlRmFjdG9yeTo6c2luZ2xldG9uKCktPlJlZ2lzdGVyVHlwZShkZXNjcmlwdG9y
LCBwcm90b3R5cGUpOwotfQotCi0KLU1lc3NhZ2VGYWN0b3J5KiBSZWZsZWN0aW9uOjpHZXRNZXNz
YWdlRmFjdG9yeSgpIGNvbnN0IHsKLSAgR09PR0xFX0xPRyhGQVRBTCkgPDwgIk5vdCBpbXBsZW1l
bnRlZC4iOwotICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCogUmVmbGVjdGlvbjo6UmVwZWF0ZWRG
aWVsZERhdGEoCi0gICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCwKLSAgICBGaWVsZERlc2NyaXB0b3I6OkNwcFR5cGUgY3BwX3R5cGUsCi0gICAgY29uc3Qg
RGVzY3JpcHRvciogbWVzc2FnZV90eXBlKSBjb25zdCB7Ci0gIEdPT0dMRV9MT0coRkFUQUwpIDw8
ICJOb3QgaW1wbGVtZW50ZWQuIjsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLW5hbWVzcGFjZSBpbnRl
cm5hbCB7Ci1SZXBlYXRlZEZpZWxkQWNjZXNzb3I6On5SZXBlYXRlZEZpZWxkQWNjZXNzb3IoKSB7
Ci19Ci19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotY29uc3QgaW50ZXJuYWw6OlJlcGVhdGVk
RmllbGRBY2Nlc3NvciogUmVmbGVjdGlvbjo6UmVwZWF0ZWRGaWVsZEFjY2Vzc29yKAotICAgIGNv
bnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsKLSAgR09PR0xFX0NIRUNLKGZpZWxk
LT5pc19yZXBlYXRlZCgpKTsKLSAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotI2RlZmlu
ZSBIQU5ETEVfUFJJTUlUSVZFX1RZUEUoVFlQRSwgdHlwZSkgXAotICAgIGNhc2UgRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFXyAjIyBUWVBFOiBcCi0gICAgICByZXR1cm4gaW50ZXJuYWw6OlNpbmds
ZXRvbjxpbnRlcm5hbDo6UmVwZWF0ZWRGaWVsZFByaW1pdGl2ZUFjY2Vzc29yPHR5cGU+ID46Omdl
dCgpOwotICAgIEhBTkRMRV9QUklNSVRJVkVfVFlQRShJTlQzMiwgaW50MzIpCi0gICAgSEFORExF
X1BSSU1JVElWRV9UWVBFKFVJTlQzMiwgdWludDMyKQotICAgIEhBTkRMRV9QUklNSVRJVkVfVFlQ
RShJTlQ2NCwgaW50NjQpCi0gICAgSEFORExFX1BSSU1JVElWRV9UWVBFKFVJTlQ2NCwgdWludDY0
KQotICAgIEhBTkRMRV9QUklNSVRJVkVfVFlQRShGTE9BVCwgZmxvYXQpCi0gICAgSEFORExFX1BS
SU1JVElWRV9UWVBFKERPVUJMRSwgZG91YmxlKQotICAgIEhBTkRMRV9QUklNSVRJVkVfVFlQRShC
T09MLCBib29sKQotICAgIEhBTkRMRV9QUklNSVRJVkVfVFlQRShFTlVNLCBpbnQzMikKLSN1bmRl
ZiBIQU5ETEVfUFJJTUlUSVZFX1RZUEUKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9TVFJJTkc6Ci0gICAgICBzd2l0Y2ggKGZpZWxkLT5vcHRpb25zKCkuY3R5cGUoKSkgewotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICBjYXNlIEZpZWxkT3B0aW9uczo6U1RSSU5HOgotICAgICAg
ICAgIHJldHVybiBpbnRlcm5hbDo6U2luZ2xldG9uPGludGVybmFsOjpSZXBlYXRlZFB0ckZpZWxk
U3RyaW5nQWNjZXNzb3I+OjpnZXQoKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICBpZiAoZmllbGQtPmlzX21h
cCgpKSB7Ci0gICAgICAgIHJldHVybiBpbnRlcm5hbDo6U2luZ2xldG9uPGludGVybmFsOjpNYXBG
aWVsZEFjY2Vzc29yPjo6Z2V0KCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gaW50
ZXJuYWw6OlNpbmdsZXRvbjxpbnRlcm5hbDo6UmVwZWF0ZWRQdHJGaWVsZE1lc3NhZ2VBY2Nlc3Nv
cj46OmdldCgpOwotICAgICAgfQotICB9Ci0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJTaG91bGQg
bm90IHJlYWNoIGhlcmUuIjsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLW5hbWVzcGFjZSBpbnRlcm5h
bCB7Ci1uYW1lc3BhY2Ugewotdm9pZCBTaHV0ZG93blJlcGVhdGVkRmllbGRBY2Nlc3NvcigpIHsK
LSAgaW50ZXJuYWw6OlNpbmdsZXRvbjxpbnRlcm5hbDo6UmVwZWF0ZWRGaWVsZFByaW1pdGl2ZUFj
Y2Vzc29yPGludDMyPiA+OjpTaHV0RG93bigpOwotICBpbnRlcm5hbDo6U2luZ2xldG9uPGludGVy
bmFsOjpSZXBlYXRlZEZpZWxkUHJpbWl0aXZlQWNjZXNzb3I8dWludDMyPiA+OjpTaHV0RG93bigp
OwotICBpbnRlcm5hbDo6U2luZ2xldG9uPGludGVybmFsOjpSZXBlYXRlZEZpZWxkUHJpbWl0aXZl
QWNjZXNzb3I8aW50NjQ+ID46OlNodXREb3duKCk7Ci0gIGludGVybmFsOjpTaW5nbGV0b248aW50
ZXJuYWw6OlJlcGVhdGVkRmllbGRQcmltaXRpdmVBY2Nlc3Nvcjx1aW50NjQ+ID46OlNodXREb3du
KCk7Ci0gIGludGVybmFsOjpTaW5nbGV0b248aW50ZXJuYWw6OlJlcGVhdGVkRmllbGRQcmltaXRp
dmVBY2Nlc3NvcjxmbG9hdD4gPjo6U2h1dERvd24oKTsKLSAgaW50ZXJuYWw6OlNpbmdsZXRvbjxp
bnRlcm5hbDo6UmVwZWF0ZWRGaWVsZFByaW1pdGl2ZUFjY2Vzc29yPGRvdWJsZT4gPjo6U2h1dERv
d24oKTsKLSAgaW50ZXJuYWw6OlNpbmdsZXRvbjxpbnRlcm5hbDo6UmVwZWF0ZWRGaWVsZFByaW1p
dGl2ZUFjY2Vzc29yPGJvb2w+ID46OlNodXREb3duKCk7Ci0gIGludGVybmFsOjpTaW5nbGV0b248
aW50ZXJuYWw6OlJlcGVhdGVkUHRyRmllbGRTdHJpbmdBY2Nlc3Nvcj46OlNodXREb3duKCk7Ci0g
IGludGVybmFsOjpTaW5nbGV0b248aW50ZXJuYWw6OlJlcGVhdGVkUHRyRmllbGRNZXNzYWdlQWNj
ZXNzb3I+OjpTaHV0RG93bigpOwotICBpbnRlcm5hbDo6U2luZ2xldG9uPGludGVybmFsOjpNYXBG
aWVsZEFjY2Vzc29yPjo6U2h1dERvd24oKTsKLX0KLQotc3RydWN0IFNodXRkb3duUmVwZWF0ZWRG
aWVsZFJlZ2lzdGVyIHsKLSAgU2h1dGRvd25SZXBlYXRlZEZpZWxkUmVnaXN0ZXIoKSB7Ci0gICAg
T25TaHV0ZG93bigmU2h1dGRvd25SZXBlYXRlZEZpZWxkQWNjZXNzb3IpOwotICB9Ci19IHNodXRk
b3duXzsKLQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotbmFt
ZXNwYWNlIGludGVybmFsIHsKLXRlbXBsYXRlPD4KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAo
X01TQ19WRVIgPj0gMTkwMCkKLS8vIE5vdGU6IGZvcmNlIG5vaW5saW5lIHRvIHdvcmthcm91bmQg
TVNWQyAyMDE1IGNvbXBpbGVyIGJ1ZywgaXNzdWUgIzI0MAotR09PR0xFX0FUVFJJQlVURV9OT0lO
TElORQotI2VuZGlmCi1NZXNzYWdlKiBHZW5lcmljVHlwZUhhbmRsZXI8TWVzc2FnZT46Ok5ld0Zy
b21Qcm90b3R5cGUoCi0gICAgY29uc3QgTWVzc2FnZSogcHJvdG90eXBlLCBnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYSogYXJlbmEpIHsKLSAgcmV0dXJuIHByb3RvdHlwZS0+TmV3KGFyZW5hKTsKLX0K
LXRlbXBsYXRlPD4KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTkwMCkK
LS8vIE5vdGU6IGZvcmNlIG5vaW5saW5lIHRvIHdvcmthcm91bmQgTVNWQyAyMDE1IGNvbXBpbGVy
IGJ1ZywgaXNzdWUgIzI0MAotR09PR0xFX0FUVFJJQlVURV9OT0lOTElORQotI2VuZGlmCi1nb29n
bGU6OnByb3RvYnVmOjpBcmVuYSogR2VuZXJpY1R5cGVIYW5kbGVyPE1lc3NhZ2U+OjpHZXRBcmVu
YSgKLSAgICBNZXNzYWdlKiB2YWx1ZSkgewotICByZXR1cm4gdmFsdWUtPkdldEFyZW5hKCk7Ci19
Ci10ZW1wbGF0ZTw+Ci0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE5MDAp
Ci0vLyBOb3RlOiBmb3JjZSBub2lubGluZSB0byB3b3JrYXJvdW5kIE1TVkMgMjAxNSBjb21waWxl
ciBidWcsIGlzc3VlICMyNDAKLUdPT0dMRV9BVFRSSUJVVEVfTk9JTkxJTkUKLSNlbmRpZgotdm9p
ZCogR2VuZXJpY1R5cGVIYW5kbGVyPE1lc3NhZ2U+OjpHZXRNYXliZUFyZW5hUG9pbnRlcigKLSAg
ICBNZXNzYWdlKiB2YWx1ZSkgewotICByZXR1cm4gdmFsdWUtPkdldE1heWJlQXJlbmFQb2ludGVy
KCk7Ci19Ci19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotfSAgLy8gbmFtZXNwYWNlIHByb3Rv
YnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvbWVzc2FnZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYTRkOTI3N2U2OTY5OTE2YzFkMDhiZDNkZDMxZDg3YTBjYjJmZDhj
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvbWVzc2FnZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1MCArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29v
Z2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1
ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhl
cnMuCi0vLwotLy8gRGVmaW5lcyBNZXNzYWdlLCB0aGUgYWJzdHJhY3QgaW50ZXJmYWNlIGltcGxl
bWVudGVkIGJ5IG5vbi1saXRlCi0vLyBwcm90b2NvbCBtZXNzYWdlIG9iamVjdHMuICBBbHRob3Vn
aCBpdCdzIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzCi0vLyBpbnRlcmZhY2UgbWFudWFsbHks
IG1vc3QgdXNlcnMgd2lsbCB1c2UgdGhlIHByb3RvY29sIGNvbXBpbGVyIHRvCi0vLyBnZW5lcmF0
ZSBpbXBsZW1lbnRhdGlvbnMuCi0vLwotLy8gRXhhbXBsZSB1c2FnZToKLS8vCi0vLyBTYXkgeW91
IGhhdmUgYSBtZXNzYWdlIGRlZmluZWQgYXM6Ci0vLwotLy8gICBtZXNzYWdlIEZvbyB7Ci0vLyAg
ICAgb3B0aW9uYWwgc3RyaW5nIHRleHQgPSAxOwotLy8gICAgIHJlcGVhdGVkIGludDMyIG51bWJl
cnMgPSAyOwotLy8gICB9Ci0vLwotLy8gVGhlbiwgaWYgeW91IHVzZWQgdGhlIHByb3RvY29sIGNv
bXBpbGVyIHRvIGdlbmVyYXRlIGEgY2xhc3MgZnJvbSB0aGUgYWJvdmUKLS8vIGRlZmluaXRpb24s
IHlvdSBjb3VsZCB1c2UgaXQgbGlrZSBzbzoKLS8vCi0vLyAgIHN0cmluZyBkYXRhOyAgLy8gV2ls
bCBzdG9yZSBhIHNlcmlhbGl6ZWQgdmVyc2lvbiBvZiB0aGUgbWVzc2FnZS4KLS8vCi0vLyAgIHsK
LS8vICAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIGFuZCBzZXJpYWxpemUgaXQuCi0vLyAgICAgRm9v
IGZvbzsKLS8vICAgICBmb28uc2V0X3RleHQoIkhlbGxvIFdvcmxkISIpOwotLy8gICAgIGZvby5h
ZGRfbnVtYmVycygxKTsKLS8vICAgICBmb28uYWRkX251bWJlcnMoNSk7Ci0vLyAgICAgZm9vLmFk
ZF9udW1iZXJzKDQyKTsKLS8vCi0vLyAgICAgZm9vLlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRhKTsK
LS8vICAgfQotLy8KLS8vICAgewotLy8gICAgIC8vIFBhcnNlIHRoZSBzZXJpYWxpemVkIG1lc3Nh
Z2UgYW5kIGNoZWNrIHRoYXQgaXQgY29udGFpbnMgdGhlCi0vLyAgICAgLy8gY29ycmVjdCBkYXRh
LgotLy8gICAgIEZvbyBmb287Ci0vLyAgICAgZm9vLlBhcnNlRnJvbVN0cmluZyhkYXRhKTsKLS8v
Ci0vLyAgICAgYXNzZXJ0KGZvby50ZXh0KCkgPT0gIkhlbGxvIFdvcmxkISIpOwotLy8gICAgIGFz
c2VydChmb28ubnVtYmVyc19zaXplKCkgPT0gMyk7Ci0vLyAgICAgYXNzZXJ0KGZvby5udW1iZXJz
KDApID09IDEpOwotLy8gICAgIGFzc2VydChmb28ubnVtYmVycygxKSA9PSA1KTsKLS8vICAgICBh
c3NlcnQoZm9vLm51bWJlcnMoMikgPT0gNDIpOwotLy8gICB9Ci0vLwotLy8gICB7Ci0vLyAgICAg
Ly8gU2FtZSBhcyB0aGUgbGFzdCBibG9jaywgYnV0IGRvIGl0IGR5bmFtaWNhbGx5IHZpYSB0aGUg
TWVzc2FnZQotLy8gICAgIC8vIHJlZmxlY3Rpb24gaW50ZXJmYWNlLgotLy8gICAgIE1lc3NhZ2Uq
IGZvbyA9IG5ldyBGb287Ci0vLyAgICAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGZv
by0+R2V0RGVzY3JpcHRvcigpOwotLy8KLS8vICAgICAvLyBHZXQgdGhlIGRlc2NyaXB0b3JzIGZv
ciB0aGUgZmllbGRzIHdlJ3JlIGludGVyZXN0ZWQgaW4gYW5kIHZlcmlmeQotLy8gICAgIC8vIHRo
ZWlyIHR5cGVzLgotLy8gICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdGV4dF9maWVsZCA9IGRl
c2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgidGV4dCIpOwotLy8gICAgIGFzc2VydCh0ZXh0X2Zp
ZWxkICE9IE5VTEwpOwotLy8gICAgIGFzc2VydCh0ZXh0X2ZpZWxkLT50eXBlKCkgPT0gRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX1NUUklORyk7Ci0vLyAgICAgYXNzZXJ0KHRleHRfZmllbGQtPmxhYmVs
KCkgPT0gRmllbGREZXNjcmlwdG9yOjpMQUJFTF9PUFRJT05BTCk7Ci0vLyAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBudW1iZXJzX2ZpZWxkID0gZGVzY3JpcHRvci0+Ci0vLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluZEZpZWxkQnlOYW1lKCJudW1iZXJz
Iik7Ci0vLyAgICAgYXNzZXJ0KG51bWJlcnNfZmllbGQgIT0gTlVMTCk7Ci0vLyAgICAgYXNzZXJ0
KG51bWJlcnNfZmllbGQtPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfSU5UMzIpOwot
Ly8gICAgIGFzc2VydChudW1iZXJzX2ZpZWxkLT5sYWJlbCgpID09IEZpZWxkRGVzY3JpcHRvcjo6
TEFCRUxfUkVQRUFURUQpOwotLy8KLS8vICAgICAvLyBQYXJzZSB0aGUgbWVzc2FnZS4KLS8vICAg
ICBmb28tPlBhcnNlRnJvbVN0cmluZyhkYXRhKTsKLS8vCi0vLyAgICAgLy8gVXNlIHRoZSByZWZs
ZWN0aW9uIGludGVyZmFjZSB0byBleGFtaW5lIHRoZSBjb250ZW50cy4KLS8vICAgICBjb25zdCBS
ZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gZm9vLT5HZXRSZWZsZWN0aW9uKCk7Ci0vLyAgICAgYXNz
ZXJ0KHJlZmxlY3Rpb24tPkdldFN0cmluZygqZm9vLCB0ZXh0X2ZpZWxkKSA9PSAiSGVsbG8gV29y
bGQhIik7Ci0vLyAgICAgYXNzZXJ0KHJlZmxlY3Rpb24tPkZpZWxkU2l6ZSgqZm9vLCBudW1iZXJz
X2ZpZWxkKSA9PSAzKTsKLS8vICAgICBhc3NlcnQocmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRJbnQz
MigqZm9vLCBudW1iZXJzX2ZpZWxkLCAwKSA9PSAxKTsKLS8vICAgICBhc3NlcnQocmVmbGVjdGlv
bi0+R2V0UmVwZWF0ZWRJbnQzMigqZm9vLCBudW1iZXJzX2ZpZWxkLCAxKSA9PSA1KTsKLS8vICAg
ICBhc3NlcnQocmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRJbnQzMigqZm9vLCBudW1iZXJzX2ZpZWxk
LCAyKSA9PSA0Mik7Ci0vLwotLy8gICAgIGRlbGV0ZSBmb287Ci0vLyAgIH0KLQotI2lmbmRlZiBH
T09HTEVfUFJPVE9CVUZfTUVTU0FHRV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX01FU1NB
R0VfSF9fCi0KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy90eXBlX3RyYWl0cy5oPgotI2luY2x1ZGUgPHZlY3Rvcj4K
LQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9tZXNzYWdlX2xpdGUuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotCi0K
LSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0hBU19PTkVPRgotI2RlZmluZSBHT09HTEVfUFJPVE9C
VUZfSEFTX0FSRU5BUwotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci0KLS8vIERlZmluZWQgaW4gdGhpcyBmaWxlLgotY2xhc3MgTWVzc2FnZTsKLWNsYXNzIFJlZmxl
Y3Rpb247Ci1jbGFzcyBNZXNzYWdlRmFjdG9yeTsKLQotLy8gRGVmaW5lZCBpbiBvdGhlciBmaWxl
cy4KLWNsYXNzIE1hcEtleTsKLWNsYXNzIE1hcFZhbHVlUmVmOwotY2xhc3MgTWFwSXRlcmF0b3I7
Ci1jbGFzcyBNYXBSZWZsZWN0aW9uVGVzdGVyOwotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotY2xh
c3MgTWFwRmllbGRCYXNlOwotfQotY2xhc3MgVW5rbm93bkZpZWxkU2V0OyAgICAgICAgIC8vIHVu
a25vd25fZmllbGRfc2V0LmgKLW5hbWVzcGFjZSBpbyB7Ci1jbGFzcyBaZXJvQ29weUlucHV0U3Ry
ZWFtOyAgICAgLy8gemVyb19jb3B5X3N0cmVhbS5oCi1jbGFzcyBaZXJvQ29weU91dHB1dFN0cmVh
bTsgICAgLy8gemVyb19jb3B5X3N0cmVhbS5oCi1jbGFzcyBDb2RlZElucHV0U3RyZWFtOyAgICAg
ICAgLy8gY29kZWRfc3RyZWFtLmgKLWNsYXNzIENvZGVkT3V0cHV0U3RyZWFtOyAgICAgICAvLyBj
b2RlZF9zdHJlYW0uaAotfQotbmFtZXNwYWNlIHB5dGhvbiB7Ci1jbGFzcyBNYXBSZWZsZWN0aW9u
RnJpZW5kOyAgICAgLy8gc2NhbGFyX21hcF9jb250YWluZXIuaAotfQotCi0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1jbGFzcyBSZXBlYXRlZEZpZWxkOyAgICAgLy8gcmVwZWF0ZWRfZmllbGQuaAot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgUmVwZWF0ZWRQdHJGaWVsZDsgIC8vIHJlcGVh
dGVkX2ZpZWxkLmgKLQotLy8gQSBjb250YWluZXIgdG8gaG9sZCBtZXNzYWdlIG1ldGFkYXRhLgot
c3RydWN0IE1ldGFkYXRhIHsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcjsKLSAgY29u
c3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbjsKLX07Ci0KLS8vIEFic3RyYWN0IGludGVyZmFjZSBm
b3IgcHJvdG9jb2wgbWVzc2FnZXMuCi0vLwotLy8gU2VlIGFsc28gTWVzc2FnZUxpdGUsIHdoaWNo
IGNvbnRhaW5zIG1vc3QgZXZlcnktZGF5IG9wZXJhdGlvbnMuICBNZXNzYWdlCi0vLyBhZGRzIGRl
c2NyaXB0b3JzIGFuZCByZWZsZWN0aW9uIG9uIHRvcCBvZiB0aGF0LgotLy8KLS8vIFRoZSBtZXRo
b2RzIG9mIHRoaXMgY2xhc3MgdGhhdCBhcmUgdmlydHVhbCBidXQgbm90IHB1cmUtdmlydHVhbCBo
YXZlCi0vLyBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBiYXNlZCBvbiByZWZsZWN0aW9uLiAgTWVz
c2FnZSBjbGFzc2VzIHdoaWNoIGFyZQotLy8gb3B0aW1pemVkIGZvciBzcGVlZCB3aWxsIHdhbnQg
dG8gb3ZlcnJpZGUgdGhlc2Ugd2l0aCBmYXN0ZXIgaW1wbGVtZW50YXRpb25zLAotLy8gYnV0IGNs
YXNzZXMgb3B0aW1pemVkIGZvciBjb2RlIHNpemUgbWF5IGJlIGhhcHB5IHdpdGgga2VlcGluZyB0
aGVtLiAgU2VlCi0vLyB0aGUgb3B0aW1pemVfZm9yIG9wdGlvbiBpbiBkZXNjcmlwdG9yLnByb3Rv
LgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE1lc3NhZ2UgOiBwdWJsaWMgTWVzc2FnZUxpdGUg
ewotIHB1YmxpYzoKLSAgaW5saW5lIE1lc3NhZ2UoKSB7fQotICB2aXJ0dWFsIH5NZXNzYWdlKCk7
Ci0KLSAgLy8gQmFzaWMgT3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBDb25zdHJ1Y3QgYSBuZXcgaW5zdGFuY2Ugb2YgdGhl
IHNhbWUgdHlwZS4gIE93bmVyc2hpcCBpcyBwYXNzZWQgdG8gdGhlCi0gIC8vIGNhbGxlci4gIChU
aGlzIGlzIGFsc28gZGVmaW5lZCBpbiBNZXNzYWdlTGl0ZSwgYnV0IGlzIGRlZmluZWQgYWdhaW4g
aGVyZQotICAvLyBmb3IgcmV0dXJuLXR5cGUgY292YXJpYW5jZS4pCi0gIHZpcnR1YWwgTWVzc2Fn
ZSogTmV3KCkgY29uc3QgPSAwOwotCi0gIC8vIENvbnN0cnVjdCBhIG5ldyBpbnN0YW5jZSBvbiB0
aGUgYXJlbmEuIE93bmVyc2hpcCBpcyBwYXNzZWQgdG8gdGhlIGNhbGxlcgotICAvLyBpZiBhcmVu
YSBpcyBhIE5VTEwuIERlZmF1bHQgaW1wbGVtZW50YXRpb24gYWxsb3dzIGZvciBBUEkgY29tcGF0
aWJpbGl0eQotICAvLyBkdXJpbmcgdGhlIEFyZW5hIHRyYW5zaXRpb24uCi0gIHZpcnR1YWwgTWVz
c2FnZSogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gICAg
TWVzc2FnZSogbWVzc2FnZSA9IE5ldygpOwotICAgIGlmIChhcmVuYSAhPSBOVUxMKSB7Ci0gICAg
ICBhcmVuYS0+T3duKG1lc3NhZ2UpOwotICAgIH0KLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQot
Ci0gIC8vIE1ha2UgdGhpcyBtZXNzYWdlIGludG8gYSBjb3B5IG9mIHRoZSBnaXZlbiBtZXNzYWdl
LiAgVGhlIGdpdmVuIG1lc3NhZ2UKLSAgLy8gbXVzdCBoYXZlIHRoZSBzYW1lIGRlc2NyaXB0b3Is
IGJ1dCBuZWVkIG5vdCBuZWNlc3NhcmlseSBiZSB0aGUgc2FtZSBjbGFzcy4KLSAgLy8gQnkgZGVm
YXVsdCB0aGlzIGlzIGp1c3QgaW1wbGVtZW50ZWQgYXMgIkNsZWFyKCk7IE1lcmdlRnJvbShmcm9t
KTsiLgotICB2aXJ0dWFsIHZvaWQgQ29weUZyb20oY29uc3QgTWVzc2FnZSYgZnJvbSk7Ci0KLSAg
Ly8gTWVyZ2UgdGhlIGZpZWxkcyBmcm9tIHRoZSBnaXZlbiBtZXNzYWdlIGludG8gdGhpcyBtZXNz
YWdlLiAgU2luZ3VsYXIKLSAgLy8gZmllbGRzIHdpbGwgYmUgb3ZlcndyaXR0ZW4sIGlmIHNwZWNp
ZmllZCBpbiBmcm9tLCBleGNlcHQgZm9yIGVtYmVkZGVkCi0gIC8vIG1lc3NhZ2VzIHdoaWNoIHdp
bGwgYmUgbWVyZ2VkLiAgUmVwZWF0ZWQgZmllbGRzIHdpbGwgYmUgY29uY2F0ZW5hdGVkLgotICAv
LyBUaGUgZ2l2ZW4gbWVzc2FnZSBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBtZXNz
YWdlIChpLmUuIHRoZQotICAvLyBleGFjdCBzYW1lIGNsYXNzKS4KLSAgdmlydHVhbCB2b2lkIE1l
cmdlRnJvbShjb25zdCBNZXNzYWdlJiBmcm9tKTsKLQotICAvLyBWZXJpZmllcyB0aGF0IElzSW5p
dGlhbGl6ZWQoKSByZXR1cm5zIHRydWUuICBHT09HTEVfQ0hFQ0stZmFpbHMgb3RoZXJ3aXNlLCB3
aXRoCi0gIC8vIGEgbmljZSBlcnJvciBtZXNzYWdlLgotICB2b2lkIENoZWNrSW5pdGlhbGl6ZWQo
KSBjb25zdDsKLQotICAvLyBTbG93bHkgYnVpbGQgYSBsaXN0IG9mIGFsbCByZXF1aXJlZCBmaWVs
ZHMgdGhhdCBhcmUgbm90IHNldC4KLSAgLy8gVGhpcyBpcyBtdWNoLCBtdWNoIHNsb3dlciB0aGFu
IElzSW5pdGlhbGl6ZWQoKSBhcyBpdCBpcyBpbXBsZW1lbnRlZAotICAvLyBwdXJlbHkgdmlhIHJl
ZmxlY3Rpb24uICBHZW5lcmFsbHksIHlvdSBzaG91bGQgbm90IGNhbGwgdGhpcyB1bmxlc3MgeW91
Ci0gIC8vIGhhdmUgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQgYW4gZXJyb3IgZXhpc3RzIGJ5IGNh
bGxpbmcgSXNJbml0aWFsaXplZCgpLgotICB2b2lkIEZpbmRJbml0aWFsaXphdGlvbkVycm9ycyhz
dGQ6OnZlY3RvcjxzdHJpbmc+KiBlcnJvcnMpIGNvbnN0OwotCi0gIC8vIExpa2UgRmluZEluaXRp
YWxpemF0aW9uRXJyb3JzLCBidXQgam9pbnMgYWxsIHRoZSBzdHJpbmdzLCBkZWxpbWl0ZWQgYnkK
LSAgLy8gY29tbWFzLCBhbmQgcmV0dXJucyB0aGVtLgotICBzdHJpbmcgSW5pdGlhbGl6YXRpb25F
cnJvclN0cmluZygpIGNvbnN0OwotCi0gIC8vIENsZWFycyBhbGwgdW5rbm93biBmaWVsZHMgZnJv
bSB0aGlzIG1lc3NhZ2UgYW5kIGFsbCBlbWJlZGRlZCBtZXNzYWdlcy4KLSAgLy8gTm9ybWFsbHks
IGlmIHVua25vd24gdGFnIG51bWJlcnMgYXJlIGVuY291bnRlcmVkIHdoZW4gcGFyc2luZyBhIG1l
c3NhZ2UsCi0gIC8vIHRoZSB0YWcgYW5kIHZhbHVlIGFyZSBzdG9yZWQgaW4gdGhlIG1lc3NhZ2Un
cyBVbmtub3duRmllbGRTZXQgYW5kCi0gIC8vIHRoZW4gd3JpdHRlbiBiYWNrIG91dCB3aGVuIHRo
ZSBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQuICBUaGlzIGFsbG93cyBzZXJ2ZXJzCi0gIC8vIHdoaWNo
IHNpbXBseSByb3V0ZSBtZXNzYWdlcyB0byBvdGhlciBzZXJ2ZXJzIHRvIHBhc3MgdGhyb3VnaCBt
ZXNzYWdlcwotICAvLyB0aGF0IGhhdmUgbmV3IGZpZWxkIGRlZmluaXRpb25zIHdoaWNoIHRoZXkg
ZG9uJ3QgeWV0IGtub3cgYWJvdXQuICBIb3dldmVyLAotICAvLyB0aGlzIGJlaGF2aW9yIGNhbiBo
YXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gIFRvIGF2b2lkIGl0LCBjYWxsIHRoaXMKLSAgLy8g
bWV0aG9kIGFmdGVyIHBhcnNpbmcuCi0gIC8vCi0gIC8vIFNlZSBSZWZsZWN0aW9uOjpHZXRVbmtu
b3duRmllbGRzKCkgZm9yIG1vcmUgb24gdW5rbm93biBmaWVsZHMuCi0gIHZpcnR1YWwgdm9pZCBE
aXNjYXJkVW5rbm93bkZpZWxkcygpOwotCi0gIC8vIENvbXB1dGVzIChhbiBlc3RpbWF0ZSBvZikg
dGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgdXNlZCBmb3IKLSAgLy8gc3Rvcmlu
ZyB0aGUgbWVzc2FnZSBpbiBtZW1vcnkuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjYWxs
cyB0aGUKLSAgLy8gUmVmbGVjdGlvbiBvYmplY3QncyBTcGFjZVVzZWQoKSBtZXRob2QuCi0gIC8v
Ci0gIC8vIFNwYWNlVXNlZCgpIGlzIG5vdGljZWFibHkgc2xvd2VyIHRoYW4gQnl0ZVNpemUoKSwg
YXMgaXQgaXMgaW1wbGVtZW50ZWQKLSAgLy8gdXNpbmcgcmVmbGVjdGlvbiAocmF0aGVyIHRoYW4g
dGhlIGdlbmVyYXRlZCBjb2RlIGltcGxlbWVudGF0aW9uIGZvcgotICAvLyBCeXRlU2l6ZSgpKS4g
TGlrZSBCeXRlU2l6ZSgpLCBpdHMgQ1BVIHRpbWUgaXMgbGluZWFyIGluIHRoZSBudW1iZXIgb2YK
LSAgLy8gZmllbGRzIGRlZmluZWQgZm9yIHRoZSBwcm90by4KLSAgdmlydHVhbCBpbnQgU3BhY2VV
c2VkKCkgY29uc3Q7Ci0KLSAgLy8gRGVidWdnaW5nICYgVGVzdGluZy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBHZW5lcmF0ZXMgYSBodW1hbiBy
ZWFkYWJsZSBmb3JtIG9mIHRoaXMgbWVzc2FnZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKLSAgLy8g
YW5kIG90aGVyIHB1cnBvc2VzLgotICBzdHJpbmcgRGVidWdTdHJpbmcoKSBjb25zdDsKLSAgLy8g
TGlrZSBEZWJ1Z1N0cmluZygpLCBidXQgd2l0aCBsZXNzIHdoaXRlc3BhY2UuCi0gIHN0cmluZyBT
aG9ydERlYnVnU3RyaW5nKCkgY29uc3Q7Ci0gIC8vIExpa2UgRGVidWdTdHJpbmcoKSwgYnV0IGRv
IG5vdCBlc2NhcGUgVVRGLTggYnl0ZSBzZXF1ZW5jZXMuCi0gIHN0cmluZyBVdGY4RGVidWdTdHJp
bmcoKSBjb25zdDsKLSAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gdXNlZnVsIGluIEdEQi4gIFBy
aW50cyBEZWJ1Z1N0cmluZygpIHRvIHN0ZG91dC4KLSAgdm9pZCBQcmludERlYnVnU3RyaW5nKCkg
Y29uc3Q7Ci0KLSAgLy8gSGVhdnkgSS9PIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gQWRkaXRpb25hbCBwYXJzaW5nIGFuZCBzZXJp
YWxpemF0aW9uIG1ldGhvZHMgbm90IGltcGxlbWVudGVkIGJ5Ci0gIC8vIE1lc3NhZ2VMaXRlIGJl
Y2F1c2UgdGhleSBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgbGl0ZSBsaWJyYXJ5LgotCi0gIC8v
IFBhcnNlIGEgcHJvdG9jb2wgYnVmZmVyIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IuICBJZiBzdWNj
ZXNzZnVsLCB0aGUgZW50aXJlCi0gIC8vIGlucHV0IHdpbGwgYmUgY29uc3VtZWQuCi0gIGJvb2wg
UGFyc2VGcm9tRmlsZURlc2NyaXB0b3IoaW50IGZpbGVfZGVzY3JpcHRvcik7Ci0gIC8vIExpa2Ug
UGFyc2VGcm9tRmlsZURlc2NyaXB0b3IoKSwgYnV0IGFjY2VwdHMgbWVzc2FnZXMgdGhhdCBhcmUg
bWlzc2luZwotICAvLyByZXF1aXJlZCBmaWVsZHMuCi0gIGJvb2wgUGFyc2VQYXJ0aWFsRnJvbUZp
bGVEZXNjcmlwdG9yKGludCBmaWxlX2Rlc2NyaXB0b3IpOwotICAvLyBQYXJzZSBhIHByb3RvY29s
IGJ1ZmZlciBmcm9tIGEgQysrIGlzdHJlYW0uICBJZiBzdWNjZXNzZnVsLCB0aGUgZW50aXJlCi0g
IC8vIGlucHV0IHdpbGwgYmUgY29uc3VtZWQuCi0gIGJvb2wgUGFyc2VGcm9tSXN0cmVhbShpc3Ry
ZWFtKiBpbnB1dCk7Ci0gIC8vIExpa2UgUGFyc2VGcm9tSXN0cmVhbSgpLCBidXQgYWNjZXB0cyBt
ZXNzYWdlcyB0aGF0IGFyZSBtaXNzaW5nCi0gIC8vIHJlcXVpcmVkIGZpZWxkcy4KLSAgYm9vbCBQ
YXJzZVBhcnRpYWxGcm9tSXN0cmVhbShpc3RyZWFtKiBpbnB1dCk7Ci0KLSAgLy8gU2VyaWFsaXpl
IHRoZSBtZXNzYWdlIGFuZCB3cml0ZSBpdCB0byB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLiAg
QWxsCi0gIC8vIHJlcXVpcmVkIGZpZWxkcyBtdXN0IGJlIHNldC4KLSAgYm9vbCBTZXJpYWxpemVU
b0ZpbGVEZXNjcmlwdG9yKGludCBmaWxlX2Rlc2NyaXB0b3IpIGNvbnN0OwotICAvLyBMaWtlIFNl
cmlhbGl6ZVRvRmlsZURlc2NyaXB0b3IoKSwgYnV0IGFsbG93cyBtaXNzaW5nIHJlcXVpcmVkIGZp
ZWxkcy4KLSAgYm9vbCBTZXJpYWxpemVQYXJ0aWFsVG9GaWxlRGVzY3JpcHRvcihpbnQgZmlsZV9k
ZXNjcmlwdG9yKSBjb25zdDsKLSAgLy8gU2VyaWFsaXplIHRoZSBtZXNzYWdlIGFuZCB3cml0ZSBp
dCB0byB0aGUgZ2l2ZW4gQysrIG9zdHJlYW0uICBBbGwKLSAgLy8gcmVxdWlyZWQgZmllbGRzIG11
c3QgYmUgc2V0LgotICBib29sIFNlcmlhbGl6ZVRvT3N0cmVhbShvc3RyZWFtKiBvdXRwdXQpIGNv
bnN0OwotICAvLyBMaWtlIFNlcmlhbGl6ZVRvT3N0cmVhbSgpLCBidXQgYWxsb3dzIG1pc3Npbmcg
cmVxdWlyZWQgZmllbGRzLgotICBib29sIFNlcmlhbGl6ZVBhcnRpYWxUb09zdHJlYW0ob3N0cmVh
bSogb3V0cHV0KSBjb25zdDsKLQotCi0gIC8vIFJlZmxlY3Rpb24tYmFzZWQgbWV0aG9kcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIHB1cmUtdmlydHVhbCBpbiBNZXNzYWdlTGl0ZSwgYnV0IE1lc3NhZ2UgcHJvdmlkZXMKLSAg
Ly8gcmVmbGVjdGlvbi1iYXNlZCBkZWZhdWx0IGltcGxlbWVudGF0aW9ucy4KLQotICB2aXJ0dWFs
IHN0cmluZyBHZXRUeXBlTmFtZSgpIGNvbnN0OwotICB2aXJ0dWFsIHZvaWQgQ2xlYXIoKTsKLSAg
dmlydHVhbCBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLSAgdmlydHVhbCB2b2lkIENoZWNr
VHlwZUFuZE1lcmdlRnJvbShjb25zdCBNZXNzYWdlTGl0ZSYgb3RoZXIpOwotICB2aXJ0dWFsIGJv
b2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1
dCk7Ci0gIHZpcnR1YWwgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIHZpcnR1YWwgdm9pZCBTZXJp
YWxpemVXaXRoQ2FjaGVkU2l6ZXMoaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0
OwotCi0gcHJpdmF0ZToKLSAgLy8gVGhpcyBpcyBjYWxsZWQgb25seSBieSB0aGUgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBvZiBCeXRlU2l6ZSgpLCB0bwotICAvLyB1cGRhdGUgdGhlIGNhY2hlZCBz
aXplLiAgSWYgeW91IG92ZXJyaWRlIEJ5dGVTaXplKCksIHlvdSBkbyBub3QgbmVlZAotICAvLyB0
byBvdmVycmlkZSB0aGlzLiAgSWYgeW91IGRvIG5vdCBvdmVycmlkZSBCeXRlU2l6ZSgpLCB5b3Ug
TVVTVCBvdmVycmlkZQotICAvLyB0aGlzOyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxs
IGNyYXNoLgotICAvLwotICAvLyBUaGUgbWV0aG9kIGlzIHByaXZhdGUgYmVjYXVzZSBzdWJjbGFz
c2VzIHNob3VsZCBuZXZlciBjYWxsIGl0OyBvbmx5Ci0gIC8vIG92ZXJyaWRlIGl0LiAgWWVzLCBD
KysgbGV0cyB5b3UgZG8gdGhhdC4gIENyYXp5LCBodWg/Ci0gIHZpcnR1YWwgdm9pZCBTZXRDYWNo
ZWRTaXplKGludCBzaXplKSBjb25zdDsKLQotIHB1YmxpYzoKLQotICAvLyBJbnRyb3NwZWN0aW9u
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IC8vIFR5cGVkZWYgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LgotICB0eXBlZGVmIGdvb2ds
ZTo6cHJvdG9idWY6OlJlZmxlY3Rpb24gUmVmbGVjdGlvbjsKLQotICAvLyBHZXQgYSBEZXNjcmlw
dG9yIGZvciB0aGlzIG1lc3NhZ2UncyB0eXBlLiAgVGhpcyBkZXNjcmliZXMgd2hhdAotICAvLyBm
aWVsZHMgdGhlIG1lc3NhZ2UgY29udGFpbnMsIHRoZSB0eXBlcyBvZiB0aG9zZSBmaWVsZHMsIGV0
Yy4KLSAgY29uc3QgRGVzY3JpcHRvciogR2V0RGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIEdl
dE1ldGFkYXRhKCkuZGVzY3JpcHRvcjsgfQotCi0gIC8vIEdldCB0aGUgUmVmbGVjdGlvbiBpbnRl
cmZhY2UgZm9yIHRoaXMgTWVzc2FnZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KLSAgLy8gcmVhZCBh
bmQgbW9kaWZ5IHRoZSBmaWVsZHMgb2YgdGhlIE1lc3NhZ2UgZHluYW1pY2FsbHkgKGluIG90aGVy
IHdvcmRzLAotICAvLyB3aXRob3V0IGtub3dpbmcgdGhlIG1lc3NhZ2UgdHlwZSBhdCBjb21waWxl
IHRpbWUpLiAgVGhpcyBvYmplY3QgcmVtYWlucwotICAvLyBwcm9wZXJ0eSBvZiB0aGUgTWVzc2Fn
ZS4KLSAgLy8KLSAgLy8gVGhpcyBtZXRob2QgcmVtYWlucyB2aXJ0dWFsIGluIGNhc2UgYSBzdWJj
bGFzcyBkb2VzIG5vdCBpbXBsZW1lbnQKLSAgLy8gcmVmbGVjdGlvbiBhbmQgd2FudHMgdG8gb3Zl
cnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCi0gIHZpcnR1YWwgY29uc3QgUmVmbGVjdGlvbiog
R2V0UmVmbGVjdGlvbigpIGNvbnN0IHsKLSAgICByZXR1cm4gR2V0TWV0YWRhdGEoKS5yZWZsZWN0
aW9uOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIC8vIEdldCBhIHN0cnVjdCBjb250YWluaW5nIHRo
ZSBtZXRhZGF0YSBmb3IgdGhlIE1lc3NhZ2UuIE1vc3Qgc3ViY2xhc3NlcyBvbmx5Ci0gIC8vIG5l
ZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kLCByYXRoZXIgdGhhbiB0aGUgR2V0RGVzY3JpcHRv
cigpIGFuZAotICAvLyBHZXRSZWZsZWN0aW9uKCkgd3JhcHBlcnMuCi0gIHZpcnR1YWwgTWV0YWRh
dGEgR2V0TWV0YWRhdGEoKSBjb25zdCAgPSAwOwotCi0KLSBwcml2YXRlOgotICBHT09HTEVfRElT
QUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTWVzc2FnZSk7Ci19OwotCi1uYW1lc3BhY2UgaW50ZXJu
YWwgewotLy8gRm9yd2FyZC1kZWNsYXJlIGludGVyZmFjZXMgdXNlZCB0byBpbXBsZW1lbnQgUmVw
ZWF0ZWRGaWVsZFJlZi4KLS8vIFRoZXNlIGFyZSBwcm90b2J1ZiBpbnRlcm5hbHMgdGhhdCB1c2Vy
cyBzaG91bGRuJ3QgY2FyZSBhYm91dC4KLWNsYXNzIFJlcGVhdGVkRmllbGRBY2Nlc3NvcjsKLX0g
IC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi0vLyBGb3J3YXJkLWRlY2xhcmUgUmVwZWF0ZWRGaWVs
ZFJlZiB0ZW1wbGF0ZXMuIFRoZSBzZWNvbmQgdHlwZSBwYXJhbWV0ZXIgaXMKLS8vIHVzZWQgZm9y
IFNGSU5BRSB0cmlja3MuIFVzZXJzIHNob3VsZCBpZ25vcmUgaXQuCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgotY2xhc3MgUmVwZWF0ZWRGaWVsZFJlZjsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KLWNsYXNzIE11dGFi
bGVSZXBlYXRlZEZpZWxkUmVmOwotCi0vLyBUaGlzIGludGVyZmFjZSBjb250YWlucyBtZXRob2Rz
IHRoYXQgY2FuIGJlIHVzZWQgdG8gZHluYW1pY2FsbHkgYWNjZXNzCi0vLyBhbmQgbW9kaWZ5IHRo
ZSBmaWVsZHMgb2YgYSBwcm90b2NvbCBtZXNzYWdlLiAgVGhlaXIgc2VtYW50aWNzIGFyZQotLy8g
c2ltaWxhciB0byB0aGUgYWNjZXNzb3JzIHRoZSBwcm90b2NvbCBjb21waWxlciBnZW5lcmF0ZXMu
Ci0vLwotLy8gVG8gZ2V0IHRoZSBSZWZsZWN0aW9uIGZvciBhIGdpdmVuIE1lc3NhZ2UsIGNhbGwg
TWVzc2FnZTo6R2V0UmVmbGVjdGlvbigpLgotLy8KLS8vIFRoaXMgaW50ZXJmYWNlIGlzIHNlcGFy
YXRlIGZyb20gTWVzc2FnZSBvbmx5IGZvciBlZmZpY2llbmN5IHJlYXNvbnM7Ci0vLyB0aGUgdmFz
dCBtYWpvcml0eSBvZiBpbXBsZW1lbnRhdGlvbnMgb2YgTWVzc2FnZSB3aWxsIHNoYXJlIHRoZSBz
YW1lCi0vLyBpbXBsZW1lbnRhdGlvbiBvZiBSZWZsZWN0aW9uIChHZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbiwKLS8vIGRlZmluZWQgaW4gZ2VuZXJhdGVkX21lc3NhZ2UuaCksIGFuZCBhbGwgTWVz
c2FnZXMgb2YgYSBwYXJ0aWN1bGFyIGNsYXNzCi0vLyBzaG91bGQgc2hhcmUgdGhlIHNhbWUgUmVm
bGVjdGlvbiBvYmplY3QgKHRob3VnaCB5b3Ugc2hvdWxkIG5vdCByZWx5IG9uCi0vLyB0aGUgbGF0
dGVyIGZhY3QpLgotLy8KLS8vIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdGhhdCB0aGVzZSBtZXRo
b2RzIGNhbiBiZSB1c2VkIGluY29ycmVjdGx5LiAgRm9yCi0vLyBleGFtcGxlLCBhbnkgb2YgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIHdpbGwgbGVhZCB0byB1bmRlZmluZWQKLS8vIHJlc3VsdHMg
KHByb2JhYmx5IGFzc2VydGlvbiBmYWlsdXJlcyk6Ci0vLyAtIFRoZSBGaWVsZERlc2NyaXB0b3Ig
aXMgbm90IGEgZmllbGQgb2YgdGhpcyBtZXNzYWdlIHR5cGUuCi0vLyAtIFRoZSBtZXRob2QgY2Fs
bGVkIGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlIGZpZWxkJ3MgdHlwZS4gIEZvcgotLy8gICBl
YWNoIGZpZWxkIHR5cGUgaW4gRmllbGREZXNjcmlwdG9yOjpUWVBFXyosIHRoZXJlIGlzIG9ubHkg
b25lCi0vLyAgIEdldCooKSBtZXRob2QsIG9uZSBTZXQqKCkgbWV0aG9kLCBhbmQgb25lIEFkZCoo
KSBtZXRob2QgdGhhdCBpcwotLy8gICB2YWxpZCBmb3IgdGhhdCB0eXBlLiAgSXQgc2hvdWxkIGJl
IG9idmlvdXMgd2hpY2ggKGV4Y2VwdCBtYXliZQotLy8gICBmb3IgVFlQRV9CWVRFUywgd2hpY2gg
YXJlIHJlcHJlc2VudGVkIHVzaW5nIHN0cmluZ3MgaW4gQysrKS4KLS8vIC0gQSBHZXQqKCkgb3Ig
U2V0KigpIG1ldGhvZCBmb3Igc2luZ3VsYXIgZmllbGRzIGlzIGNhbGxlZCBvbiBhIHJlcGVhdGVk
Ci0vLyAgIGZpZWxkLgotLy8gLSBHZXRSZXBlYXRlZCooKSwgU2V0UmVwZWF0ZWQqKCksIG9yIEFk
ZCooKSBpcyBjYWxsZWQgb24gYSBub24tcmVwZWF0ZWQKLS8vICAgZmllbGQuCi0vLyAtIFRoZSBN
ZXNzYWdlIG9iamVjdCBwYXNzZWQgdG8gYW55IG1ldGhvZCBpcyBub3Qgb2YgdGhlIHJpZ2h0IHR5
cGUgZm9yCi0vLyAgIHRoaXMgUmVmbGVjdGlvbiBvYmplY3QgKGkuZS4gbWVzc2FnZS5HZXRSZWZs
ZWN0aW9uKCkgIT0gcmVmbGVjdGlvbikuCi0vLwotLy8gWW91IG1pZ2h0IHdvbmRlciB3aHkgdGhl
cmUgaXMgbm90IGFueSBhYnN0cmFjdCByZXByZXNlbnRhdGlvbiBmb3IgYSBmaWVsZAotLy8gb2Yg
YXJiaXRyYXJ5IHR5cGUuICBFLmcuLCB3aHkgaXNuJ3QgdGhlcmUganVzdCBhICJHZXRGaWVsZCgp
IiBtZXRob2QgdGhhdAotLy8gcmV0dXJucyAiY29uc3QgRmllbGQmIiwgd2hlcmUgIkZpZWxkIiBp
cyBzb21lIGNsYXNzIHdpdGggYWNjZXNzb3JzIGxpa2UKLS8vICJHZXRJbnQzMlZhbHVlKCkiLiAg
VGhlIHByb2JsZW0gaXMgdGhhdCBzb21lb25lIHdvdWxkIGhhdmUgdG8gZGVhbCB3aXRoCi0vLyBh
bGxvY2F0aW5nIHRoZXNlIEZpZWxkIG9iamVjdHMuICBGb3IgZ2VuZXJhdGVkIG1lc3NhZ2UgY2xh
c3NlcywgaGF2aW5nIHRvCi0vLyBhbGxvY2F0ZSBzcGFjZSBmb3IgYW4gYWRkaXRpb25hbCBvYmpl
Y3QgdG8gd3JhcCBldmVyeSBmaWVsZCB3b3VsZCBhdCBsZWFzdAotLy8gZG91YmxlIHRoZSBtZXNz
YWdlJ3MgbWVtb3J5IGZvb3RwcmludCwgcHJvYmFibHkgd29yc2UuICBBbGxvY2F0aW5nIHRoZQot
Ly8gb2JqZWN0cyBvbi1kZW1hbmQsIG9uIHRoZSBvdGhlciBoYW5kLCB3b3VsZCBiZSBleHBlbnNp
dmUgYW5kIHByb25lIHRvCi0vLyBtZW1vcnkgbGVha3MuICBTbywgaW5zdGVhZCB3ZSBlbmRlZCB1
cCB3aXRoIHRoaXMgZmxhdCBpbnRlcmZhY2UuCi0vLwotLy8gVE9ETyhrZW50b24pOiAgQ3JlYXRl
IGEgdXRpbGl0eSBjbGFzcyB3aGljaCBjYWxsZXJzIGNhbiB1c2UgdG8gcmVhZCBhbmQKLS8vICAg
d3JpdGUgZmllbGRzIGZyb20gYSBSZWZsZWN0aW9uIHdpdGhvdXQgcGF5aW5nIGF0dGVudGlvbiB0
byB0aGUgdHlwZS4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBSZWZsZWN0aW9uIHsKLSBwdWJs
aWM6Ci0gIGlubGluZSBSZWZsZWN0aW9uKCkge30KLSAgdmlydHVhbCB+UmVmbGVjdGlvbigpOwot
Ci0gIC8vIEdldCB0aGUgVW5rbm93bkZpZWxkU2V0IGZvciB0aGUgbWVzc2FnZS4gIFRoaXMgY29u
dGFpbnMgZmllbGRzIHdoaWNoCi0gIC8vIHdlcmUgc2VlbiB3aGVuIHRoZSBNZXNzYWdlIHdhcyBw
YXJzZWQgYnV0IHdlcmUgbm90IHJlY29nbml6ZWQgYWNjb3JkaW5nCi0gIC8vIHRvIHRoZSBNZXNz
YWdlJ3MgZGVmaW5pdGlvbi4gRm9yIHByb3RvMyBwcm90b3MsIHRoaXMgbWV0aG9kIHdpbGwgYWx3
YXlzCi0gIC8vIHJldHVybiBhbiBlbXB0eSBVbmtub3duRmllbGRTZXQuCi0gIHZpcnR1YWwgY29u
c3QgVW5rbm93bkZpZWxkU2V0JiBHZXRVbmtub3duRmllbGRzKAotICAgICAgY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZSkgY29uc3QgPSAwOwotICAvLyBHZXQgYSBtdXRhYmxlIHBvaW50ZXIgdG8gdGhl
IFVua25vd25GaWVsZFNldCBmb3IgdGhlIG1lc3NhZ2UuICBUaGlzCi0gIC8vIGNvbnRhaW5zIGZp
ZWxkcyB3aGljaCB3ZXJlIHNlZW4gd2hlbiB0aGUgTWVzc2FnZSB3YXMgcGFyc2VkIGJ1dCB3ZXJl
IG5vdAotICAvLyByZWNvZ25pemVkIGFjY29yZGluZyB0byB0aGUgTWVzc2FnZSdzIGRlZmluaXRp
b24uIEZvciBwcm90bzMgcHJvdG9zLCB0aGlzCi0gIC8vIG1ldGhvZCB3aWxsIHJldHVybiBhIHZh
bGlkIG11dGFibGUgVW5rbm93bkZpZWxkU2V0IHBvaW50ZXIgYnV0IG1vZGlmeWluZwotICAvLyBp
dCB3b24ndCBhZmZlY3QgdGhlIHNlcmlhbGl6ZWQgYnl0ZXMgb2YgdGhlIG1lc3NhZ2UuCi0gIHZp
cnR1YWwgVW5rbm93bkZpZWxkU2V0KiBNdXRhYmxlVW5rbm93bkZpZWxkcyhNZXNzYWdlKiBtZXNz
YWdlKSBjb25zdCA9IDA7Ci0KLSAgLy8gRXN0aW1hdGUgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNl
ZCBieSB0aGUgbWVzc2FnZSBvYmplY3QuCi0gIHZpcnR1YWwgaW50IFNwYWNlVXNlZChjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlKSBjb25zdCA9IDA7Ci0KLSAgLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIG5v
bi1yZXBlYXRlZCBmaWVsZCBpcyBzZXQuCi0gIHZpcnR1YWwgYm9vbCBIYXNGaWVsZChjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCkgY29uc3QgPSAwOwotCi0gIC8vIEdldCB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzIG9mIGEgcmVwZWF0ZWQgZmllbGQuCi0gIHZpcnR1YWwgaW50IEZpZWxkU2l6ZShjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCkgY29uc3QgPSAwOwotCi0gIC8vIENsZWFyIHRoZSB2YWx1ZSBvZiBhIGZp
ZWxkLCBzbyB0aGF0IEhhc0ZpZWxkKCkgcmV0dXJucyBmYWxzZSBvcgotICAvLyBGaWVsZFNpemUo
KSByZXR1cm5zIHplcm8uCi0gIHZpcnR1YWwgdm9pZCBDbGVhckZpZWxkKE1lc3NhZ2UqIG1lc3Nh
Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmll
bGQpIGNvbnN0ID0gMDsKLQotICAvLyBDaGVjayBpZiB0aGUgb25lb2YgaXMgc2V0LiBSZXR1cm5z
IHRydWUgaWYgYW55IGZpZWxkIGluIG9uZW9mCi0gIC8vIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNl
LgotICAvLyBUT0RPKGppZWx1bykgLSBtYWtlIGl0IHB1cmUgdmlydHVhbCBhZnRlciB1cGRhdGlu
ZyBhbGwKLSAgLy8gdGhlIHN1YmNsYXNzZXMuCi0gIHZpcnR1YWwgYm9vbCBIYXNPbmVvZihjb25z
dCBNZXNzYWdlJiAvKm1lc3NhZ2UqLywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9u
ZW9mRGVzY3JpcHRvciogLypvbmVvZl9kZXNjcmlwdG9yKi8pIGNvbnN0IHsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgQ2xlYXJPbmVvZihNZXNzYWdlKiAvKm1lc3Nh
Z2UqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT25lb2ZEZXNjcmlwdG9yKiAv
Km9uZW9mX2Rlc2NyaXB0b3IqLykgY29uc3Qge30KLQotICAvLyBSZXR1cm5zIHRoZSBmaWVsZCBk
ZXNjcmlwdG9yIGlmIHRoZSBvbmVvZiBpcyBzZXQuIE5VTEwgb3RoZXJ3aXNlLgotICAvLyBUT0RP
KGppZWx1bykgLSBtYWtlIGl0IHB1cmUgdmlydHVhbC4KLSAgdmlydHVhbCBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIEdldE9uZW9mRmllbGREZXNjcmlwdG9yKAotICAgICAgY29uc3QgTWVzc2FnZSYg
LyptZXNzYWdlKi8sCi0gICAgICBjb25zdCBPbmVvZkRlc2NyaXB0b3IqIC8qb25lb2ZfZGVzY3Jp
cHRvciovKSBjb25zdCB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAvLyBSZW1vdmVzIHRo
ZSBsYXN0IGVsZW1lbnQgb2YgYSByZXBlYXRlZCBmaWVsZC4KLSAgLy8gV2UgZG9uJ3QgcHJvdmlk
ZSBhIHdheSB0byByZW1vdmUgYW55IGVsZW1lbnQgb3RoZXIgdGhhbiB0aGUgbGFzdAotICAvLyBi
ZWNhdXNlIGl0IGludml0ZXMgaW5lZmZpY2llbnQgdXNlLCBzdWNoIGFzIE8obl4yKSBmaWx0ZXJp
bmcgbG9vcHMKLSAgLy8gdGhhdCBzaG91bGQgaGF2ZSBiZWVuIE8obikuICBJZiB5b3Ugd2FudCB0
byByZW1vdmUgYW4gZWxlbWVudCBvdGhlcgotICAvLyB0aGFuIHRoZSBsYXN0LCB0aGUgYmVzdCB3
YXkgdG8gZG8gaXQgaXMgdG8gcmUtYXJyYW5nZSB0aGUgZWxlbWVudHMKLSAgLy8gKHVzaW5nIFN3
YXAoKSkgc28gdGhhdCB0aGUgb25lIHlvdSB3YW50IHJlbW92ZWQgaXMgYXQgdGhlIGVuZCwgdGhl
bgotICAvLyBjYWxsIFJlbW92ZUxhc3QoKS4KLSAgdmlydHVhbCB2b2lkIFJlbW92ZUxhc3QoTWVz
c2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCkgY29uc3QgPSAwOwotICAvLyBSZW1vdmVzIHRoZSBsYXN0IGVsZW1lbnQg
b2YgYSByZXBlYXRlZCBtZXNzYWdlIGZpZWxkLCBhbmQgcmV0dXJucyB0aGUKLSAgLy8gcG9pbnRl
ciB0byB0aGUgY2FsbGVyLiAgQ2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcmV0dXJuZWQg
cG9pbnRlci4KLSAgdmlydHVhbCBNZXNzYWdlKiBSZWxlYXNlTGFzdChNZXNzYWdlKiBtZXNzYWdl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQpIGNvbnN0ID0gMDsKLQotICAvLyBTd2FwIHRoZSBjb21wbGV0ZSBjb250ZW50cyBvZiB0
d28gbWVzc2FnZXMuCi0gIHZpcnR1YWwgdm9pZCBTd2FwKE1lc3NhZ2UqIG1lc3NhZ2UxLCBNZXNz
YWdlKiBtZXNzYWdlMikgY29uc3QgPSAwOwotCi0gIC8vIFN3YXAgZmllbGRzIGxpc3RlZCBpbiBm
aWVsZHMgdmVjdG9yIG9mIHR3byBtZXNzYWdlcy4KLSAgdmlydHVhbCB2b2lkIFN3YXBGaWVsZHMo
TWVzc2FnZSogbWVzc2FnZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UqIG1l
c3NhZ2UyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjb25z
dCBGaWVsZERlc2NyaXB0b3IqPiYgZmllbGRzKQotICAgICAgY29uc3QgPSAwOwotCi0gIC8vIFN3
YXAgdHdvIGVsZW1lbnRzIG9mIGEgcmVwZWF0ZWQgZmllbGQuCi0gIHZpcnR1YWwgdm9pZCBTd2Fw
RWxlbWVudHMoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbmRleDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4MikgY29u
c3QgPSAwOwotCi0gIC8vIExpc3QgYWxsIGZpZWxkcyBvZiB0aGUgbWVzc2FnZSB3aGljaCBhcmUg
Y3VycmVudGx5IHNldC4gIFRoaXMgaW5jbHVkZXMKLSAgLy8gZXh0ZW5zaW9ucy4gIFNpbmd1bGFy
IGZpZWxkcyB3aWxsIG9ubHkgYmUgbGlzdGVkIGlmIEhhc0ZpZWxkKGZpZWxkKSB3b3VsZAotICAv
LyByZXR1cm4gdHJ1ZSBhbmQgcmVwZWF0ZWQgZmllbGRzIHdpbGwgb25seSBiZSBsaXN0ZWQgaWYg
RmllbGRTaXplKGZpZWxkKQotICAvLyB3b3VsZCByZXR1cm4gbm9uLXplcm8uICBGaWVsZHMgKGJv
dGggbm9ybWFsIGZpZWxkcyBhbmQgZXh0ZW5zaW9uIGZpZWxkcykKLSAgLy8gd2lsbCBiZSBsaXN0
ZWQgb3JkZXJlZCBieSBmaWVsZCBudW1iZXIuCi0gIHZpcnR1YWwgdm9pZCBMaXN0RmllbGRzKAot
ICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IEZp
ZWxkRGVzY3JpcHRvcio+KiBvdXRwdXQpIGNvbnN0ID0gMDsKLQotICAvLyBTaW5ndWxhciBmaWVs
ZCBnZXR0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAv
LyBUaGVzZSBnZXQgdGhlIHZhbHVlIG9mIGEgbm9uLXJlcGVhdGVkIGZpZWxkLiAgVGhleSByZXR1
cm4gdGhlIGRlZmF1bHQKLSAgLy8gdmFsdWUgZm9yIGZpZWxkcyB0aGF0IGFyZW4ndCBzZXQuCi0K
LSAgdmlydHVhbCBpbnQzMiAgR2V0SW50MzIgKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25z
dCA9IDA7Ci0gIHZpcnR1YWwgaW50NjQgIEdldEludDY0IChjb25zdCBNZXNzYWdlJiBtZXNzYWdl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCkgY29uc3QgPSAwOwotICB2aXJ0dWFsIHVpbnQzMiBHZXRVSW50MzIoY29uc3QgTWVzc2FnZSYg
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB1aW50NjQgR2V0VUludDY0KGNvbnN0IE1l
c3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgZmxvYXQgIEdldEZsb2F0IChj
b25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgPSAwOwotICB2aXJ0dWFsIGRvdWJsZSBHZXRE
b3VibGUoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCBib29s
ICAgR2V0Qm9vbCAgKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCA9IDA7Ci0gIHZpcnR1
YWwgc3RyaW5nIEdldFN0cmluZyhjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgPSAwOwot
ICB2aXJ0dWFsIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIEdldEVudW0oCi0gICAgICBjb25z
dCBNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCA9
IDA7Ci0KLSAgLy8gR2V0RW51bVZhbHVlKCkgcmV0dXJucyBhbiBlbnVtIGZpZWxkJ3MgdmFsdWUg
YXMgYW4gaW50ZWdlciByYXRoZXIgdGhhbgotICAvLyBhbiBFbnVtVmFsdWVEZXNjcmlwdG9yKi4g
SWYgdGhlIGludGVnZXIgdmFsdWUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhCi0gIC8vIGtub3du
IHZhbHVlIGRlc2NyaXB0b3IsIGEgbmV3IHZhbHVlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZC4gKFN1
Y2ggYSB2YWx1ZQotICAvLyB3aWxsIG9ubHkgYmUgcHJlc2VudCB3aGVuIHRoZSBuZXcgdW5rbm93
bi1lbnVtLXZhbHVlIHNlbWFudGljcyBhcmUgZW5hYmxlZAotICAvLyBmb3IgYSBtZXNzYWdlLikK
LSAgdmlydHVhbCBpbnQgR2V0RW51bVZhbHVlKAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2Fn
ZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0KLSAgLy8gU2VlIE11dGFi
bGVNZXNzYWdlKCkgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZSAiZmFjdG9yeSIgcGFyYW1ldGVyLgot
ICB2aXJ0dWFsIGNvbnN0IE1lc3NhZ2UmIEdldE1lc3NhZ2UoY29uc3QgTWVzc2FnZSYgbWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdl
RmFjdG9yeSogZmFjdG9yeSA9IE5VTEwpIGNvbnN0ID0gMDsKLQotICAvLyBHZXQgYSBzdHJpbmcg
dmFsdWUgd2l0aG91dCBjb3B5aW5nLCBpZiBwb3NzaWJsZS4KLSAgLy8KLSAgLy8gR2V0U3RyaW5n
KCkgbmVjZXNzYXJpbHkgcmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZy4gIFRoaXMgY2FuIGJl
Ci0gIC8vIGluZWZmaWNpZW50IHdoZW4gdGhlIHN0cmluZyBpcyBhbHJlYWR5IHN0b3JlZCBpbiBh
IHN0cmluZyBvYmplY3QgaW4gdGhlCi0gIC8vIHVuZGVybHlpbmcgbWVzc2FnZS4gIEdldFN0cmlu
Z1JlZmVyZW5jZSgpIHdpbGwgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZQotICAvLyB1bmRlcmx5
aW5nIHN0cmluZyBpbiB0aGlzIGNhc2UuICBPdGhlcndpc2UsIGl0IHdpbGwgY29weSB0aGUgc3Ry
aW5nIGludG8KLSAgLy8gKnNjcmF0Y2ggYW5kIHJldHVybiB0aGF0LgotICAvLwotICAvLyBOb3Rl
OiAgSXQgaXMgcGVyZmVjdGx5IHJlYXNvbmFibGUgYW5kIHVzZWZ1bCB0byB3cml0ZSBjb2RlIGxp
a2U6Ci0gIC8vICAgICBzdHIgPSByZWZsZWN0aW9uLT5HZXRTdHJpbmdSZWZlcmVuY2UoZmllbGQs
ICZzdHIpOwotICAvLyAgIFRoaXMgbGluZSB3b3VsZCBlbnN1cmUgdGhhdCBvbmx5IG9uZSBjb3B5
IG9mIHRoZSBzdHJpbmcgaXMgbWFkZQotICAvLyAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGZpZWxkJ3Mg
dW5kZXJseWluZyByZXByZXNlbnRhdGlvbi4gIFdoZW4gaW5pdGlhbGl6aW5nCi0gIC8vICAgYSBu
ZXdseS1jb25zdHJ1Y3RlZCBzdHJpbmcsIHRob3VnaCwgaXQncyBqdXN0IGFzIGZhc3QgYW5kIG1v
cmUgcmVhZGFibGUKLSAgLy8gICB0byB1c2UgY29kZSBsaWtlOgotICAvLyAgICAgc3RyaW5nIHN0
ciA9IHJlZmxlY3Rpb24tPkdldFN0cmluZyhtZXNzYWdlLCBmaWVsZCk7Ci0gIHZpcnR1YWwgY29u
c3Qgc3RyaW5nJiBHZXRTdHJpbmdSZWZlcmVuY2UoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmluZyogc2NyYXRjaCkgY29uc3QgPSAwOwotCi0KLSAgLy8gU2luZ3VsYXIgZmllbGQgbXV0
YXRvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gVGhl
c2UgbXV0YXRlIHRoZSB2YWx1ZSBvZiBhIG5vbi1yZXBlYXRlZCBmaWVsZC4KLQotICB2aXJ0dWFs
IHZvaWQgU2V0SW50MzIgKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50MzIgIHZhbHVlKSBjb25zdCA9IDA7
Ci0gIHZpcnR1YWwgdm9pZCBTZXRJbnQ2NCAoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQ2NCAgdmFsdWUp
IGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIFNldFVJbnQzMihNZXNzYWdlKiBtZXNzYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIHVp
bnQzMiB2YWx1ZSkgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgU2V0VUludDY0KE1lc3NhZ2Uq
IG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCwgdWludDY0IHZhbHVlKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBTZXRGbG9h
dCAoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkLCBmbG9hdCAgdmFsdWUpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2
b2lkIFNldERvdWJsZShNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGRvdWJsZSB2YWx1ZSkgY29uc3QgPSAwOwot
ICB2aXJ0dWFsIHZvaWQgU2V0Qm9vbCAgKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgYm9vbCAgIHZhbHVlKSBj
b25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBTZXRTdHJpbmcoTWVzc2FnZSogbWVzc2FnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgdmFsdWUpIGNvbnN0ID0gMDsKLSAg
dmlydHVhbCB2b2lkIFNldEVudW0gIChNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWUpIGNvbnN0ID0gMDsKLSAg
Ly8gU2V0IGFuIGVudW0gZmllbGQncyB2YWx1ZSB3aXRoIGFuIGludGVnZXIgcmF0aGVyIHRoYW4g
RW51bVZhbHVlRGVzY3JpcHRvci4KLSAgLy8gSWYgdGhlIHZhbHVlIGRvZXMgbm90IGNvcnJlc3Bv
bmQgdG8gYSBrbm93biBlbnVtIHZhbHVlLCBlaXRoZXIgYmVoYXZpb3IgaXMKLSAgLy8gdW5kZWZp
bmVkIChmb3IgcHJvdG8yIG1lc3NhZ2VzKSwgb3IgdGhlIHZhbHVlIGlzIGFjY2VwdGVkIHNpbGVu
dGx5IGZvcgotICAvLyBtZXNzYWdlcyB3aXRoIG5ldyB1bmtub3duLWVudW0tdmFsdWUgc2VtYW50
aWNzLgotICB2aXJ0dWFsIHZvaWQgU2V0RW51bVZhbHVlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpIGNvbnN0OwotCi0gIC8vIEdldCBh
IG11dGFibGUgcG9pbnRlciB0byBhIGZpZWxkIHdpdGggYSBtZXNzYWdlIHR5cGUuICBJZiBhIE1l
c3NhZ2VGYWN0b3J5Ci0gIC8vIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gY29uc3Ry
dWN0IGluc3RhbmNlcyBvZiB0aGUgc3ViLW1lc3NhZ2U7Ci0gIC8vIG90aGVyd2lzZSwgdGhlIGRl
ZmF1bHQgZmFjdG9yeSBpcyB1c2VkLiAgSWYgdGhlIGZpZWxkIGlzIGFuIGV4dGVuc2lvbiB0aGF0
Ci0gIC8vIGRvZXMgbm90IGxpdmUgaW4gdGhlIHNhbWUgcG9vbCBhcyB0aGUgY29udGFpbmluZyBt
ZXNzYWdlJ3MgZGVzY3JpcHRvciAoZS5nLgotICAvLyBpdCBsaXZlcyBpbiBhbiBvdmVybGF5IHBv
b2wpLCB0aGVuIGEgTWVzc2FnZUZhY3RvcnkgbXVzdCBiZSBwcm92aWRlZC4KLSAgLy8gSWYgeW91
IGhhdmUgbm8gaWRlYSB3aGF0IHRoYXQgbWVhbnQsIHRoZW4geW91IHByb2JhYmx5IGRvbid0IG5l
ZWQgdG8gd29ycnkKLSAgLy8gYWJvdXQgaXQgKGRvbid0IHByb3ZpZGUgYSBNZXNzYWdlRmFjdG9y
eSkuICBXQVJOSU5HOiAgSWYgdGhlCi0gIC8vIEZpZWxkRGVzY3JpcHRvciBpcyBmb3IgYSBjb21w
aWxlZC1pbiBleHRlbnNpb24sIHRoZW4KLSAgLy8gZmFjdG9yeS0+R2V0UHJvdG90eXBlKGZpZWxk
LT5tZXNzYWdlX3R5cGUoKSBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSBvZiB0aGUKLSAgLy8gY29t
cGlsZWQtaW4gY2xhc3MgZm9yIHRoaXMgdHlwZSwgTk9UIER5bmFtaWNNZXNzYWdlLgotICB2aXJ0
dWFsIE1lc3NhZ2UqIE11dGFibGVNZXNzYWdlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRmFjdG9yeSogZmFjdG9yeSA9
IE5VTEwpIGNvbnN0ID0gMDsKLSAgLy8gUmVwbGFjZXMgdGhlIG1lc3NhZ2Ugc3BlY2lmaWVkIGJ5
ICdmaWVsZCcgd2l0aCB0aGUgYWxyZWFkeS1hbGxvY2F0ZWQgb2JqZWN0Ci0gIC8vIHN1Yl9tZXNz
YWdlLCBwYXNzaW5nIG93bmVyc2hpcCB0byB0aGUgbWVzc2FnZS4gIElmIHRoZSBmaWVsZCBjb250
YWluZWQgYQotICAvLyBtZXNzYWdlLCB0aGF0IG1lc3NhZ2UgaXMgZGVsZXRlZC4gIElmIHN1Yl9t
ZXNzYWdlIGlzIE5VTEwsIHRoZSBmaWVsZCBpcwotICAvLyBjbGVhcmVkLgotICB2aXJ0dWFsIHZv
aWQgU2V0QWxsb2NhdGVkTWVzc2FnZShNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNZXNzYWdlKiBzdWJfbWVzc2FnZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Qg
PSAwOwotICAvLyBSZWxlYXNlcyB0aGUgbWVzc2FnZSBzcGVjaWZpZWQgYnkgJ2ZpZWxkJyBhbmQg
cmV0dXJucyB0aGUgcG9pbnRlciwKLSAgLy8gUmVsZWFzZU1lc3NhZ2UoKSB3aWxsIHJldHVybiB0
aGUgbWVzc2FnZSB0aGUgbWVzc2FnZSBvYmplY3QgaWYgaXQgZXhpc3RzLgotICAvLyBPdGhlcndp
c2UsIGl0IG1heSBvciBtYXkgbm90IHJldHVybiBOVUxMLiAgSW4gYW55IGNhc2UsIGlmIHRoZSBy
ZXR1cm4gdmFsdWUKLSAgLy8gaXMgbm9uLU5VTEwsIHRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlw
IG9mIHRoZSBwb2ludGVyLgotICAvLyBJZiB0aGUgZmllbGQgZXhpc3RlZCAoSGFzRmllbGQoKSBp
cyB0cnVlKSwgdGhlbiB0aGUgcmV0dXJuZWQgcG9pbnRlciB3aWxsCi0gIC8vIGJlIHRoZSBzYW1l
IGFzIHRoZSBwb2ludGVyIHJldHVybmVkIGJ5IE11dGFibGVNZXNzYWdlKCkuCi0gIC8vIFRoaXMg
ZnVuY3Rpb24gaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBDbGVhckZpZWxkKCkuCi0gIHZpcnR1YWwg
TWVzc2FnZSogUmVsZWFzZU1lc3NhZ2UoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VGYWN0b3J5KiBmYWN0b3J5ID0gTlVM
TCkgY29uc3QgPSAwOwotCi0KLSAgLy8gUmVwZWF0ZWQgZmllbGQgZ2V0dGVycyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gVGhlc2UgZ2V0IHRoZSB2YWx1
ZSBvZiBvbmUgZWxlbWVudCBvZiBhIHJlcGVhdGVkIGZpZWxkLgotCi0gIHZpcnR1YWwgaW50MzIg
IEdldFJlcGVhdGVkSW50MzIgKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCkgY29uc3QgPSAwOwotICB2
aXJ0dWFsIGludDY0ICBHZXRSZXBlYXRlZEludDY0IChjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgpIGNv
bnN0ID0gMDsKLSAgdmlydHVhbCB1aW50MzIgR2V0UmVwZWF0ZWRVSW50MzIoY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGluZGV4KSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdWludDY0IEdldFJlcGVhdGVkVUludDY0
KGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbmRleCkgY29uc3QgPSAwOwotICB2aXJ0dWFsIGZsb2F0ICBHZXRS
ZXBlYXRlZEZsb2F0IChjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgpIGNvbnN0ID0gMDsKLSAgdmlydHVh
bCBkb3VibGUgR2V0UmVwZWF0ZWREb3VibGUoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4KSBjb25zdCA9
IDA7Ci0gIHZpcnR1YWwgYm9vbCAgIEdldFJlcGVhdGVkQm9vbCAgKGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bmRleCkgY29uc3QgPSAwOwotICB2aXJ0dWFsIHN0cmluZyBHZXRSZXBlYXRlZFN0cmluZyhjb25z
dCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5kZXgpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCBjb25zdCBFbnVtVmFsdWVE
ZXNjcmlwdG9yKiBHZXRSZXBlYXRlZEVudW0oCi0gICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdl
LAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50IGluZGV4KSBjb25zdCA9
IDA7Ci0gIC8vIEdldFJlcGVhdGVkRW51bVZhbHVlKCkgcmV0dXJucyBhbiBlbnVtIGZpZWxkJ3Mg
dmFsdWUgYXMgYW4gaW50ZWdlciByYXRoZXIKLSAgLy8gdGhhbiBhbiBFbnVtVmFsdWVEZXNjcmlw
dG9yKi4gSWYgdGhlIGludGVnZXIgdmFsdWUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhCi0gIC8v
IGtub3duIHZhbHVlIGRlc2NyaXB0b3IsIGEgbmV3IHZhbHVlIGRlc2NyaXB0b3IgaXMgY3JlYXRl
ZC4gKFN1Y2ggYSB2YWx1ZQotICAvLyB3aWxsIG9ubHkgYmUgcHJlc2VudCB3aGVuIHRoZSBuZXcg
dW5rbm93bi1lbnVtLXZhbHVlIHNlbWFudGljcyBhcmUgZW5hYmxlZAotICAvLyBmb3IgYSBtZXNz
YWdlLikKLSAgdmlydHVhbCBpbnQgR2V0UmVwZWF0ZWRFbnVtVmFsdWUoCi0gICAgICBjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlLAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgaW50
IGluZGV4KSBjb25zdDsKLSAgdmlydHVhbCBjb25zdCBNZXNzYWdlJiBHZXRSZXBlYXRlZE1lc3Nh
Z2UoCi0gICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCwgaW50IGluZGV4KSBjb25zdCA9IDA7Ci0KLSAgLy8gU2VlIEdldFN0cmlu
Z1JlZmVyZW5jZSgpLCBhYm92ZS4KLSAgdmlydHVhbCBjb25zdCBzdHJpbmcmIEdldFJlcGVhdGVk
U3RyaW5nUmVmZXJlbmNlKAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgIGludCBpbmRleCwgc3RyaW5nKiBzY3JhdGNoKSBj
b25zdCA9IDA7Ci0KLQotICAvLyBSZXBlYXRlZCBmaWVsZCBtdXRhdG9ycyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBUaGVzZSBtdXRhdGUgdGhlIHZhbHVl
IG9mIG9uZSBlbGVtZW50IG9mIGEgcmVwZWF0ZWQgZmllbGQuCi0KLSAgdmlydHVhbCB2b2lkIFNl
dFJlcGVhdGVkSW50MzIgKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGluZGV4LCBpbnQzMiAgdmFsdWUpIGNvbnN0ID0gMDsKLSAg
dmlydHVhbCB2b2lkIFNldFJlcGVhdGVkSW50NjQgKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LCBpbnQ2NCAgdmFsdWUp
IGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIFNldFJlcGVhdGVkVUludDMyKE1lc3NhZ2UqIG1l
c3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
LCB1aW50MzIgdmFsdWUpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIFNldFJlcGVhdGVkVUlu
dDY0KE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGluZGV4LCB1aW50NjQgdmFsdWUpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lk
IFNldFJlcGVhdGVkRmxvYXQgKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LCBmbG9hdCAgdmFsdWUpIGNvbnN0ID0gMDsK
LSAgdmlydHVhbCB2b2lkIFNldFJlcGVhdGVkRG91YmxlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LCBkb3VibGUgdmFs
dWUpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIFNldFJlcGVhdGVkQm9vbCAgKE1lc3NhZ2Uq
IG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
ZGV4LCBib29sICAgdmFsdWUpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIFNldFJlcGVhdGVk
U3RyaW5nKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGluZGV4LCBjb25zdCBzdHJpbmcmIHZhbHVlKSBjb25zdCA9IDA7Ci0gIHZp
cnR1YWwgdm9pZCBTZXRSZXBlYXRlZEVudW0oTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQgaW5k
ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW51bVZhbHVlRGVzY3Jp
cHRvciogdmFsdWUpIGNvbnN0ID0gMDsKLSAgLy8gU2V0IGFuIGVudW0gZmllbGQncyB2YWx1ZSB3
aXRoIGFuIGludGVnZXIgcmF0aGVyIHRoYW4gRW51bVZhbHVlRGVzY3JpcHRvci4KLSAgLy8gSWYg
dGhlIHZhbHVlIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBrbm93biBlbnVtIHZhbHVlLCBlaXRo
ZXIgYmVoYXZpb3IgaXMKLSAgLy8gdW5kZWZpbmVkIChmb3IgcHJvdG8yIG1lc3NhZ2VzKSwgb3Ig
dGhlIHZhbHVlIGlzIGFjY2VwdGVkIHNpbGVudGx5IGZvcgotICAvLyBtZXNzYWdlcyB3aXRoIG5l
dyB1bmtub3duLWVudW0tdmFsdWUgc2VtYW50aWNzLgotICB2aXJ0dWFsIHZvaWQgU2V0UmVwZWF0
ZWRFbnVtVmFsdWUoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGludCBpbmRleCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkgY29uc3Q7Ci0gIC8vIEdl
dCBhIG11dGFibGUgcG9pbnRlciB0byBhbiBlbGVtZW50IG9mIGEgcmVwZWF0ZWQgZmllbGQgd2l0
aCBhIG1lc3NhZ2UKLSAgLy8gdHlwZS4KLSAgdmlydHVhbCBNZXNzYWdlKiBNdXRhYmxlUmVwZWF0
ZWRNZXNzYWdlKAotICAgICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCwgaW50IGluZGV4KSBjb25zdCA9IDA7Ci0KLQotICAvLyBSZXBlYXRlZCBmaWVsZCBh
ZGRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBU
aGVzZSBhZGQgYW4gZWxlbWVudCB0byBhIHJlcGVhdGVkIGZpZWxkLgotCi0gIHZpcnR1YWwgdm9p
ZCBBZGRJbnQzMiAoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQzMiAgdmFsdWUpIGNvbnN0ID0gMDsKLSAg
dmlydHVhbCB2b2lkIEFkZEludDY0IChNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGludDY0ICB2YWx1ZSkgY29u
c3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgQWRkVUludDMyKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgdWludDMy
IHZhbHVlKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBBZGRVSW50NjQoTWVzc2FnZSogbWVz
c2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZp
ZWxkLCB1aW50NjQgdmFsdWUpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIEFkZEZsb2F0IChN
ZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGQsIGZsb2F0ICB2YWx1ZSkgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQg
QWRkRG91YmxlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwgZG91YmxlIHZhbHVlKSBjb25zdCA9IDA7Ci0gIHZp
cnR1YWwgdm9pZCBBZGRCb29sICAoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBib29sICAgdmFsdWUpIGNvbnN0
ID0gMDsKLSAgdmlydHVhbCB2b2lkIEFkZFN0cmluZyhNZXNzYWdlKiBtZXNzYWdlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB2YWx1ZSkgY29uc3QgPSAwOwotICB2aXJ0
dWFsIHZvaWQgQWRkRW51bSAgKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiB2YWx1ZSkgY29uc3QgPSAwOwotICAvLyBT
ZXQgYW4gZW51bSBmaWVsZCdzIHZhbHVlIHdpdGggYW4gaW50ZWdlciByYXRoZXIgdGhhbiBFbnVt
VmFsdWVEZXNjcmlwdG9yLgotICAvLyBJZiB0aGUgdmFsdWUgZG9lcyBub3QgY29ycmVzcG9uZCB0
byBhIGtub3duIGVudW0gdmFsdWUsIGVpdGhlciBiZWhhdmlvciBpcwotICAvLyB1bmRlZmluZWQg
KGZvciBwcm90bzIgbWVzc2FnZXMpLCBvciB0aGUgdmFsdWUgaXMgYWNjZXB0ZWQgc2lsZW50bHkg
Zm9yCi0gIC8vIG1lc3NhZ2VzIHdpdGggbmV3IHVua25vd24tZW51bS12YWx1ZSBzZW1hbnRpY3Mu
Ci0gIHZpcnR1YWwgdm9pZCBBZGRFbnVtVmFsdWUoTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkgY29uc3Q7Ci0gIC8vIFNlZSBNdXRhYmxl
TWVzc2FnZSgpIGZvciBjb21tZW50cyBvbiB0aGUgImZhY3RvcnkiIHBhcmFtZXRlci4KLSAgdmly
dHVhbCBNZXNzYWdlKiBBZGRNZXNzYWdlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkqIGZhY3RvcnkgPSBOVUxMKSBjb25z
dCA9IDA7Ci0KLSAgLy8gQXBwZW5kcyBhbiBhbHJlYWR5LWFsbG9jYXRlZCBvYmplY3QgJ25ld19l
bnRyeScgdG8gdGhlIHJlcGVhdGVkIGZpZWxkCi0gIC8vIHNwZWNpZnllZCBieSAnZmllbGQnIHBh
c3Npbmcgb3duZXJzaGlwIHRvIHRoZSBtZXNzYWdlLgotICAvLyBUT0RPKHRtYXJlayk6IE1ha2Ug
dmlydHVhbCBhZnRlciBhbGwgc3ViY2xhc3NlcyBoYXZlIGJlZW4KLSAgLy8gdXBkYXRlZC4KLSAg
dmlydHVhbCB2b2lkIEFkZEFsbG9jYXRlZE1lc3NhZ2UoTWVzc2FnZSogLyogbWVzc2FnZSAqLywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiAvKmZpZWxkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdl
KiAvKiBuZXdfZW50cnkgKi8pIGNvbnN0IHt9Ci0KLQotICAvLyBHZXQgYSBSZXBlYXRlZEZpZWxk
UmVmIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIHVuZGVybHlpbmcKLSAgLy8g
cmVwZWF0ZWQgZmllbGQuIFRoZSB0eXBlIHBhcmFtZXRlciBUIG11c3QgYmUgc2V0IGFjY29yZGlu
ZyB0byB0aGUKLSAgLy8gZmllbGQncyBjcHAgdHlwZS4gVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93
cyB0aGUgbWFwcGluZyBmcm9tIGNwcCB0eXBlCi0gIC8vIHRvIGFjY2VwdGFibGUgVC4KLSAgLy8K
LSAgLy8gICBmaWVsZC0+Y3BwX3R5cGUoKSAgICAgIFQKLSAgLy8gICBDUFBUWVBFX0lOVDMyICAg
ICAgICBpbnQzMgotICAvLyAgIENQUFRZUEVfVUlOVDMyICAgICAgIHVpbnQzMgotICAvLyAgIENQ
UFRZUEVfSU5UNjQgICAgICAgIGludDY0Ci0gIC8vICAgQ1BQVFlQRV9VSU5UNjQgICAgICAgdWlu
dDY0Ci0gIC8vICAgQ1BQVFlQRV9ET1VCTEUgICAgICAgZG91YmxlCi0gIC8vICAgQ1BQVFlQRV9G
TE9BVCAgICAgICAgZmxvYXQKLSAgLy8gICBDUFBUWVBFX0JPT0wgICAgICAgICBib29sCi0gIC8v
ICAgQ1BQVFlQRV9FTlVNICAgICAgICAgZ2VuZXJhdGVkIGVudW0gdHlwZSBvciBpbnQzMgotICAv
LyAgIENQUFRZUEVfU1RSSU5HICAgICAgIHN0cmluZwotICAvLyAgIENQUFRZUEVfTUVTU0FHRSAg
ICAgIGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgb3IgZ29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZQot
ICAvLwotICAvLyBBIFJlcGVhdGVkRmllbGRSZWYgb2JqZWN0IGNhbiBiZSBjb3BpZWQgYW5kIHRo
ZSByZXN1bHRlZCBvYmplY3Qgd2lsbCBwb2ludAotICAvLyB0byB0aGUgc2FtZSByZXBlYXRlZCBm
aWVsZCBpbiB0aGUgc2FtZSBtZXNzYWdlLiBUaGUgb2JqZWN0IGNhbiBiZSB1c2VkIGFzCi0gIC8v
IGxvbmcgYXMgdGhlIG1lc3NhZ2UgaXMgbm90IGRlc3Ryb3llZC4KLSAgLy8KLSAgLy8gTm90ZSB0
aGF0IHRvIHVzZSB0aGlzIG1ldGhvZCB1c2VycyBuZWVkIHRvIGluY2x1ZGUgdGhlIGhlYWRlciBm
aWxlCi0gIC8vICJnb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbi5oIiAod2hpY2ggZGVmaW5lcyB0
aGUgUmVwZWF0ZWRGaWVsZFJlZgotICAvLyBjbGFzcyB0ZW1wbGF0ZXMpLgotICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICBSZXBlYXRlZEZpZWxkUmVmPFQ+IEdldFJlcGVhdGVkRmllbGRSZWYoCi0g
ICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
KSBjb25zdDsKLQotICAvLyBMaWtlIEdldFJlcGVhdGVkRmllbGRSZWYoKSBidXQgcmV0dXJuIGFu
IG9iamVjdCB0aGF0IGNhbiBhbHNvIGJlIHVzZWQKLSAgLy8gbWFuaXB1bGF0ZSB0aGUgdW5kZXJs
eWluZyByZXBlYXRlZCBmaWVsZC4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgTXV0YWJsZVJl
cGVhdGVkRmllbGRSZWY8VD4gR2V0TXV0YWJsZVJlcGVhdGVkRmllbGRSZWYoCi0gICAgICBNZXNz
YWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsKLQotICAv
LyBERVBSRUNBVEVELiBQbGVhc2UgdXNlIEdldChNdXRhYmxlKVJlcGVhdGVkRmllbGRSZWYoKSBm
b3IgcmVwZWF0ZWQgZmllbGQKLSAgLy8gYWNjZXNzLiBUaGUgZm9sbG93aW5nIHJlcGVhdGVkIGZp
ZWxkIGFjY2Vzb3JzIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUKLSAgLy8gZnV0dXJlLgotICAvLwot
ICAvLyBSZXBlYXRlZCBmaWVsZCBhY2Nlc3NvcnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gVGhlIG1ldGhvZHMgYWJvdmUsIGUuZy4gR2V0
UmVwZWF0ZWRJbnQzMihtc2csIGZkLCBpbmRleCksIHByb3ZpZGUgc2luZ3VsYXIKLSAgLy8gYWNj
ZXNzIHRvIHRoZSBkYXRhIGluIGEgUmVwZWF0ZWRGaWVsZC4gIFRoZSBtZXRob2RzIGJlbG93IHBy
b3ZpZGUgYWdncmVnYXRlCi0gIC8vIGFjY2VzcyBieSBleHBvc2luZyB0aGUgUmVwZWF0ZWRGaWVs
ZCBvYmplY3QgaXRzZWxmIHdpdGggdGhlIE1lc3NhZ2UuCi0gIC8vIEFwcGx5aW5nIHRoZXNlIHRl
bXBsYXRlcyB0byBpbmFwcHJvcHJpYXRlIHR5cGVzIHdpbGwgbGVhZCB0byBhbiB1bmRlZmluZWQK
LSAgLy8gcmVmZXJlbmNlIGF0IGxpbmsgdGltZSAoZS5nLiBHZXRSZXBlYXRlZEZpZWxkPCoqKmRv
dWJsZT4pLCBvciBwb3NzaWJseSBhCi0gIC8vIHRlbXBsYXRlIG1hdGNoaW5nIGVycm9yIGF0IGNv
bXBpbGUgdGltZSAoZS5nLiBHZXRSZXBlYXRlZFB0ckZpZWxkPEZpbGU+KS4KLSAgLy8KLSAgLy8g
VXNhZ2UgZXhhbXBsZTogbXlfZG91YnMgPSByZWZsLT5HZXRSZXBlYXRlZEZpZWxkPGRvdWJsZT4o
bXNnLCBmZCk7Ci0KLSAgLy8gREVQUkVDQVRFRC4gUGxlYXNlIHVzZSBHZXRSZXBlYXRlZEZpZWxk
UmVmKCkuCi0gIC8vCi0gIC8vIGZvciBUID0gQ29yZCBhbmQgYWxsIHByb3RvYnVmIHNjYWxhciB0
eXBlcyBleGNlcHQgZW51bXMuCi0gIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gIGNvbnN0IFJlcGVh
dGVkRmllbGQ8VD4mIEdldFJlcGVhdGVkRmllbGQoCi0gICAgICBjb25zdCBNZXNzYWdlJiwgY29u
c3QgRmllbGREZXNjcmlwdG9yKikgY29uc3Q7Ci0KLSAgLy8gREVQUkVDQVRFRC4gUGxlYXNlIHVz
ZSBHZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZigpLgotICAvLwotICAvLyBmb3IgVCA9IENvcmQg
YW5kIGFsbCBwcm90b2J1ZiBzY2FsYXIgdHlwZXMgZXhjZXB0IGVudW1zLgotICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICBSZXBlYXRlZEZpZWxkPFQ+KiBNdXRhYmxlUmVwZWF0ZWRGaWVsZCgKLSAg
ICAgIE1lc3NhZ2UqLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqKSBjb25zdDsKLQotICAvLyBERVBS
RUNBVEVELiBQbGVhc2UgdXNlIEdldFJlcGVhdGVkRmllbGRSZWYoKS4KLSAgLy8KLSAgLy8gZm9y
IFQgPSBzdHJpbmcsIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpTdHJpbmdQaWVjZUZpZWxk
Ci0gIC8vICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSAmIGRlc2NlbmRhbnRzLgot
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICBjb25zdCBSZXBlYXRlZFB0ckZpZWxkPFQ+JiBHZXRS
ZXBlYXRlZFB0ckZpZWxkKAotICAgICAgY29uc3QgTWVzc2FnZSYsIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciopIGNvbnN0OwotCi0gIC8vIERFUFJFQ0FURUQuIFBsZWFzZSB1c2UgR2V0TXV0YWJsZVJl
cGVhdGVkRmllbGRSZWYoKS4KLSAgLy8KLSAgLy8gZm9yIFQgPSBzdHJpbmcsIGdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpTdHJpbmdQaWVjZUZpZWxkCi0gIC8vICAgICAgICAgZ29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZSAmIGRlc2NlbmRhbnRzLgotICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICBSZXBlYXRlZFB0ckZpZWxkPFQ+KiBNdXRhYmxlUmVwZWF0ZWRQdHJGaWVsZCgKLSAgICAgIE1l
c3NhZ2UqLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqKSBjb25zdDsKLQotICAvLyBFeHRlbnNpb25z
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAvLyBUcnkgdG8gZmluZCBhbiBleHRlbnNpb24gb2YgdGhpcyBtZXNzYWdl
IHR5cGUgYnkgZnVsbHktcXVhbGlmaWVkIGZpZWxkCi0gIC8vIG5hbWUuICBSZXR1cm5zIE5VTEwg
aWYgbm8gZXh0ZW5zaW9uIGlzIGtub3duIGZvciB0aGlzIG5hbWUgb3IgbnVtYmVyLgotICB2aXJ0
dWFsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogRmluZEtub3duRXh0ZW5zaW9uQnlOYW1lKAotICAg
ICAgY29uc3Qgc3RyaW5nJiBuYW1lKSBjb25zdCA9IDA7Ci0KLSAgLy8gVHJ5IHRvIGZpbmQgYW4g
ZXh0ZW5zaW9uIG9mIHRoaXMgbWVzc2FnZSB0eXBlIGJ5IGZpZWxkIG51bWJlci4KLSAgLy8gUmV0
dXJucyBOVUxMIGlmIG5vIGV4dGVuc2lvbiBpcyBrbm93biBmb3IgdGhpcyBuYW1lIG9yIG51bWJl
ci4KLSAgdmlydHVhbCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIEZpbmRLbm93bkV4dGVuc2lvbkJ5
TnVtYmVyKAotICAgICAgaW50IG51bWJlcikgY29uc3QgPSAwOwotCi0gIC8vIEZlYXR1cmUgRmxh
Z3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIC8vIERvZXMgdGhpcyBtZXNzYWdlIHN1cHBvcnQgc3RvcmluZyBhcmJpdHJh
cnkgaW50ZWdlciB2YWx1ZXMgaW4gZW51bSBmaWVsZHM/Ci0gIC8vIElmIHx0cnVlfCwgR2V0RW51
bVZhbHVlL1NldEVudW1WYWx1ZSBhbmQgYXNzb2NpYXRlZCByZXBlYXRlZC1maWVsZCB2ZXJzaW9u
cwotICAvLyB0YWtlIGFyYml0cmFyeSBpbnRlZ2VyIHZhbHVlcywgYW5kIHRoZSBsZWdhY3kgR2V0
RW51bSgpIGdldHRlciB3aWxsCi0gIC8vIGR5bmFtaWNhbGx5IGNyZWF0ZSBhbiBFbnVtVmFsdWVE
ZXNjcmlwdG9yIGZvciBhbnkgaW50ZWdlciB2YWx1ZSB3aXRob3V0Ci0gIC8vIG9uZS4gSWYgfGZh
bHNlfCwgc2V0dGluZyBhbiB1bmtub3duIGVudW0gdmFsdWUgdmlhIHRoZSBpbnRlZ2VyLWJhc2Vk
Ci0gIC8vIHNldHRlcnMgcmVzdWx0cyBpbiB1bmRlZmluZWQgYmVoYXZpb3IgKGluIHByYWN0aWNl
LCBHT09HTEVfRENIRUNLLWZhaWxzKS4KLSAgLy8KLSAgLy8gR2VuZXJpYyBjb2RlIHRoYXQgdXNl
cyByZWZsZWN0aW9uIHRvIGhhbmRsZSBtZXNzYWdlcyB3aXRoIGVudW0gZmllbGRzCi0gIC8vIHNo
b3VsZCBjaGVjayB0aGlzIGZsYWcgYmVmb3JlIHVzaW5nIHRoZSBpbnRlZ2VyLWJhc2VkIHNldHRl
ciwgYW5kIGVpdGhlcgotICAvLyBkb3duZ3JhZGUgdG8gYSBjb21wYXRpYmxlIHZhbHVlIG9yIHVz
ZSB0aGUgVW5rbm93bkZpZWxkU2V0IGlmIG5vdC4gRm9yCi0gIC8vIGV4YW1wbGU6Ci0gIC8vCi0g
IC8vIGludCBuZXdfdmFsdWUgPSBHZXRWYWx1ZUZyb21BcHBsaWNhdGlvbkxvZ2ljKCk7Ci0gIC8v
IGlmIChyZWZsZWN0aW9uLT5TdXBwb3J0c1Vua25vd25FbnVtVmFsdWVzKCkpIHsKLSAgLy8gICAg
IHJlZmxlY3Rpb24tPlNldEVudW1WYWx1ZShtZXNzYWdlLCBmaWVsZCwgbmV3X3ZhbHVlKTsKLSAg
Ly8gfSBlbHNlIHsKLSAgLy8gICAgIGlmIChmaWVsZF9kZXNjcmlwdG9yLT5lbnVtX3R5cGUoKS0+
Ci0gIC8vICAgICAgICAgICAgIEZpbmRWYWx1ZUJ5TnVtdmVyKG5ld192YWx1ZSkgIT0gTlVMTCkg
ewotICAvLyAgICAgICAgIHJlZmxlY3Rpb24tPlNldEVudW1WYWx1ZShtZXNzYWdlLCBmaWVsZCwg
bmV3X3ZhbHVlKTsKLSAgLy8gICAgIH0gZWxzZSBpZiAoZW1pdF91bmtub3duX2VudW1fdmFsdWVz
KSB7Ci0gIC8vICAgICAgICAgcmVmbGVjdGlvbi0+TXV0YWJsZVVua25vd25GaWVsZHMobWVzc2Fn
ZSktPkFkZFZhcmludCgKLSAgLy8gICAgICAgICAgICAgZmllbGQtPm51bWJlcigpLAotICAvLyAg
ICAgICAgICAgICBuZXdfdmFsdWUpOwotICAvLyAgICAgfSBlbHNlIHsKLSAgLy8gICAgICAgICAv
LyBjb252ZXJ0IHZhbHVlIHRvIGEgY29tcGF0aWJsZS9kZWZhdWx0IHZhbHVlLgotICAvLyAgICAg
ICAgIG5ld192YWx1ZSA9IENvbXBhdGlibGVEb3duZ3JhZGUobmV3X3ZhbHVlKTsKLSAgLy8gICAg
ICAgICByZWZsZWN0aW9uLT5TZXRFbnVtVmFsdWUobWVzc2FnZSwgZmllbGQsIG5ld192YWx1ZSk7
Ci0gIC8vICAgICB9Ci0gIC8vIH0KLSAgdmlydHVhbCBib29sIFN1cHBvcnRzVW5rbm93bkVudW1W
YWx1ZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gIC8vIFJldHVybnMgdGhlIE1lc3Nh
Z2VGYWN0b3J5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1lc3NhZ2UuICBUaGlzIGNhbiBiZQotICAv
LyB1c2VmdWwgZm9yIGRldGVybWluaW5nIGlmIGEgbWVzc2FnZSBpcyBhIGdlbmVyYXRlZCBtZXNz
YWdlIG9yIG5vdCwgZm9yCi0gIC8vIGV4YW1wbGU6Ci0gIC8vCi0gIC8vIGlmIChtZXNzYWdlLT5H
ZXRSZWZsZWN0aW9uKCktPkdldE1lc3NhZ2VGYWN0b3J5KCkgPT0KLSAgLy8gICAgIGdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFjdG9yeSgpKSB7Ci0gIC8vICAg
Ly8gVGhpcyBpcyBhIGdlbmVyYXRlZCBtZXNzYWdlLgotICAvLyB9Ci0gIC8vCi0gIC8vIEl0IGNh
biBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIG1vcmUgbWVzc2FnZXMgb2YgdGhpcyB0eXBlLCB0aG91
Z2gKLSAgLy8gTWVzc2FnZTo6TmV3KCkgaXMgYW4gZWFzaWVyIHdheSB0byBhY2NvbXBsaXNoIHRo
aXMuCi0gIHZpcnR1YWwgTWVzc2FnZUZhY3RvcnkqIEdldE1lc3NhZ2VGYWN0b3J5KCkgY29uc3Q7
Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSBwcm90ZWN0ZWQ6Ci0gIC8vIE9idGFpbiBh
IHBvaW50ZXIgdG8gYSBSZXBlYXRlZCBGaWVsZCBTdHJ1Y3R1cmUgYW5kIGRvIHNvbWUgdHlwZSBj
aGVja2luZzoKLSAgLy8gICBvbiBmaWVsZC0+Y3BwX3R5cGUoKSwKLSAgLy8gICBvbiBmaWVsZC0+
ZmllbGRfb3B0aW9uKCkuY3R5cGUoKSAoaWYgY3R5cGUgPj0gMCkKLSAgLy8gICBvZiBmaWVsZC0+
bWVzc2FnZV90eXBlKCkgKGlmIG1lc3NhZ2VfdHlwZSAhPSBOVUxMKS4KLSAgLy8gV2UgdXNlIDIg
cm91dGluZSByYXRoZXIgdGhhbiA0IChjb25zdCB2cyBtdXRhYmxlKSB4IChzY2FsYXIgdnMgcG9p
bnRlcikuCi0gIHZpcnR1YWwgdm9pZCogTXV0YWJsZVJhd1JlcGVhdGVkRmllbGQoCi0gICAgICBN
ZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBGaWVsZERlc2Ny
aXB0b3I6OkNwcFR5cGUsCi0gICAgICBpbnQgY3R5cGUsIGNvbnN0IERlc2NyaXB0b3IqIG1lc3Nh
Z2VfdHlwZSkgY29uc3QgPSAwOwotCi0gIC8vIFRPRE8oamllbHVvKSAtIG1ha2UgaXQgcHVyZSB2
aXJ0dWFsIGFmdGVyIHVwZGF0aW5nIGFsbCB0aGUgc3ViY2xhc3Nlcy4KLSAgdmlydHVhbCBjb25z
dCB2b2lkKiBHZXRSYXdSZXBlYXRlZEZpZWxkKAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2Fn
ZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgIEZpZWxkRGVzY3JpcHRvcjo6
Q3BwVHlwZSBjcHB0eXBlLCBpbnQgY3R5cGUsCi0gICAgICBjb25zdCBEZXNjcmlwdG9yKiBtZXNz
YWdlX3R5cGUpIGNvbnN0IHsKLSAgICByZXR1cm4gTXV0YWJsZVJhd1JlcGVhdGVkRmllbGQoCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8TWVzc2FnZSo+KCZtZXNzYWdlKSwgZmllbGQsIGNwcHR5cGUsIGN0
eXBlLCBtZXNzYWdlX3R5cGUpOwotICB9Ci0KLSAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIGFy
ZSB1c2VkIHRvIGltcGxlbWVudCAoTXV0YWJsZSlSZXBlYXRlZEZpZWxkUmVmLgotICAvLyBBIFJl
ZiBvYmplY3Qgd2lsbCBzdG9yZSBhIHJhdyBwb2ludGVyIHRvIHRoZSByZXBlYXRlZCBmaWVsZCBk
YXRhIChvYnRhaW5lZAotICAvLyBmcm9tIFJlcGVhdGVkRmllbGREYXRhKCkpIGFuZCBhIHBvaW50
ZXIgdG8gYSBBY2Nlc3NvciAob2J0YWluZWQgZnJvbQotICAvLyBSZXBlYXRlZEZpZWxkQWNjZXNz
b3IpIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHJhdyBkYXRhLgotICAvLwotICAv
LyBUT0RPKHhpYW9mZW5nKTogTWFrZSB0aGVzZSBtZXRob2RzIHB1cmUtdmlydHVhbC4KLQotICAv
LyBSZXR1cm5zIGEgcmF3IHBvaW50ZXIgdG8gdGhlIHJlcGVhdGVkIGZpZWxkCi0gIC8vCi0gIC8v
ICJjcHBfdHlwZSIgYW5kICJtZXNzYWdlX3R5cGUiIGFyZSBkZWN1ZGVkIGZyb20gdGhlIHR5cGUg
cGFyYW1ldGVyIFQgcGFzc2VkCi0gIC8vIHRvIEdldChNdXRhYmxlKVJlcGVhdGVkRmllbGRSZWYu
IElmIFQgaXMgYSBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlLAotICAvLyAibWVzc2FnZV90eXBlIiBz
aG91bGQgYmUgc2V0IHRvIGl0cyBkZXNjcmlwdG9yLiBPdGhlcndpc2UgIm1lc3NhZ2VfdHlwZSIK
LSAgLy8gc2hvdWxkIGJlIHNldCB0byBOVUxMLiBJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRo
b2Qgc2hvdWxkIGNoZWNrIHdoZXRoZXIKLSAgLy8gImNwcF90eXBlIi8ibWVzc2FnZV90eXBlIiBp
cyBjb25zaXN0ZW50IHdpdGggdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSBmaWVsZC4KLSAgLy8gV2Ug
dXNlIDEgcm91dGluZSByYXRoZXIgdGhhbiAyIChjb25zdCB2cyBtdXRhYmxlKSBiZWNhdXNlIGl0
IGlzIHByb3RlY3RlZAotICAvLyBhbmQgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuCi0g
IHZpcnR1YWwgdm9pZCogUmVwZWF0ZWRGaWVsZERhdGEoCi0gICAgICBNZXNzYWdlKiBtZXNzYWdl
LCBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgRmllbGREZXNjcmlwdG9yOjpD
cHBUeXBlIGNwcF90eXBlLAotICAgICAgY29uc3QgRGVzY3JpcHRvciogbWVzc2FnZV90eXBlKSBj
b25zdDsKLQotICAvLyBUaGUgcmV0dXJuZWQgcG9pbnRlciBzaG91bGQgcG9pbnQgdG8gYSBzaW5n
bGV0b24gaW5zdGFuY2Ugd2hpY2ggaW1wbGVtZW50cwotICAvLyB0aGUgUmVwZWF0ZWRGaWVsZEFj
Y2Vzc29yIGludGVyZmFjZS4KLSAgdmlydHVhbCBjb25zdCBpbnRlcm5hbDo6UmVwZWF0ZWRGaWVs
ZEFjY2Vzc29yKiBSZXBlYXRlZEZpZWxkQWNjZXNzb3IoCi0gICAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEVuYWJsZT4KLSAgZnJpZW5kIGNsYXNzIFJlcGVhdGVkRmllbGRSZWY7Ci0gIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZT4KLSAgZnJpZW5kIGNsYXNzIE11dGFi
bGVSZXBlYXRlZEZpZWxkUmVmOwotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpw
eXRob246Ok1hcFJlZmxlY3Rpb25GcmllbmQ7Ci0KLSAgLy8gU3BlY2lhbCB2ZXJzaW9uIGZvciBz
cGVjaWFsaXplZCBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RyaW5nLiAgV2UgY2FuJ3QgY2FsbAotICAv
LyBNdXRhYmxlUmF3UmVwZWF0ZWRGaWVsZCBkaXJlY3RseSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qg
aGF2ZSBhY2Nlc3MgdG8KLSAgLy8gRmllbGRPcHRpb25zOjoqIHdoaWNoIGFyZSBkZWZpbmVkIGlu
IGRlc2NyaXB0b3IucGIuaC4gIEluY2x1ZGluZyB0aGF0Ci0gIC8vIGZpbGUgaGVyZSBpcyBub3Qg
cG9zc2libGUgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGNpcmN1bGFyIGluY2x1ZGUgY3ljbGUu
Ci0gIC8vIFdlIHVzZSAxIHJvdXRpbmUgcmF0aGVyIHRoYW4gMiAoY29uc3QgdnMgbXV0YWJsZSkg
YmVjYXVzZSBpdCBpcyBwcml2YXRlCi0gIC8vIGFuZCBtdXRhYmxlIGEgcmVwZWF0ZWQgc3RyaW5n
IGZpZWxkIGRvZXNuJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLgotICB2b2lkKiBNdXRhYmxlUmF3UmVw
ZWF0ZWRTdHJpbmcoCi0gICAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkLCBib29sIGlzX3N0cmluZykgY29uc3Q7Ci0KLSAgZnJpZW5kIGNsYXNzIE1hcFJl
ZmxlY3Rpb25UZXN0ZXI7Ci0gIC8vIFRPRE8oamllbHVvKSAtIG1ha2UgdGhlIG1hcCBBUElzIHB1
cmUgdmlydHVhbCBhZnRlciB1cGRhdGluZwotICAvLyBhbGwgdGhlIHN1YmNsYXNzZXMuCi0gIC8v
IFJldHVybnMgdHJ1ZSBpZiBrZXkgaXMgaW4gbWFwLiBSZXR1cm5zIGZhbHNlIGlmIGtleSBpcyBu
b3QgaW4gbWFwIGZpZWxkLgotICB2aXJ0dWFsIGJvb2wgQ29udGFpbnNNYXBLZXkoY29uc3QgTWVz
c2FnZSYgLyogbWVzc2FnZSovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiAvKiBmaWVsZCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IE1hcEtleSYgLyoga2V5ICovKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0KLSAgLy8gSWYga2V5IGlzIGluIG1hcCBmaWVsZDogU2F2ZXMgdGhlIHZhbHVlIHBvaW50
ZXIgdG8gdmFsIGFuZCByZXR1cm5zCi0gIC8vIGZhbHNlLiBJZiBrZXkgaW4gbm90IGluIG1hcCBm
aWVsZDogSW5zZXJ0IHRoZSBrZXkgaW50byBtYXAsIHNhdmVzCi0gIC8vIHZhbHVlIHBvaW50ZXIg
dG8gdmFsIGFuZCByZXR1bnMgdHJ1ZS4KLSAgdmlydHVhbCBib29sIEluc2VydE9yTG9va3VwTWFw
VmFsdWUoTWVzc2FnZSogLyogbWVzc2FnZSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiAvKiBmaWVsZCAqLywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFwS2V5JiAvKiBrZXkgKi8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcFZhbHVlUmVmKiAvKiB2YWwg
Ki8pIGNvbnN0IHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBEZWxldGUgYW5kIHJl
dHVybnMgdHJ1ZSBpZiBrZXkgaXMgaW4gdGhlIG1hcCBmaWVsZC4gUmV0dXJucyBmYWxzZQotICAv
LyBvdGhlcndpc2UuCi0gIHZpcnR1YWwgYm9vbCBEZWxldGVNYXBWYWx1ZShNZXNzYWdlKiAvKiBt
ZXNhZ2UgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIC8qIGZpZWxkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TWFwS2V5JiAvKiBrZXkgKi8pIGNvbnN0IHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAv
LyBSZXR1cm5zIGEgTWFwSXRlcmF0b3IgcmVmZXJyaW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IGlu
IHRoZSBtYXAgZmllbGQuCi0gIC8vIElmIHRoZSBtYXAgZmllbGQgaXMgZW1wdHksIHRoaXMgZnVu
Y3Rpb24gcmV0dXJucyB0aGUgc2FtZSBhcwotICAvLyByZWZsZWN0aW9uOjpNYXBFbmQuIE11dGF0
aW9uIHRvIHRoZSBmaWVsZCBtYXkgaW52YWxpZGF0ZSB0aGUgaXRlcmF0b3IuCi0gIHZpcnR1YWwg
TWFwSXRlcmF0b3IgTWFwQmVnaW4oCi0gICAgICBNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyBhIE1hcEl0
ZXJhdG9yIHJlZmVycmluZyB0byB0aGUgdGhlb3JldGljYWwgZWxlbWVudCB0aGF0IHdvdWxkCi0g
IC8vIGZvbGxvdyB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBtYXAgZmllbGQuIEl0IGRvZXMgbm90
IHBvaW50IHRvIGFueQotICAvLyByZWFsIGVsZW1lbnQuIE11dGF0aW9uIHRvIHRoZSBmaWVsZCBt
YXkgaW52YWxpZGF0ZSB0aGUgaXRlcmF0b3IuCi0gIHZpcnR1YWwgTWFwSXRlcmF0b3IgTWFwRW5k
KAotICAgICAgTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQpIGNvbnN0OwotCi0gIC8vIEdldCB0aGUgbnVtYmVyIG9mIDxrZXksIHZhbHVlPiBwYWly
IG9mIGEgbWFwIGZpZWxkLiBUaGUgcmVzdWx0IG1heSBiZQotICAvLyBkaWZmZXJlbnQgZnJvbSBG
aWVsZFNpemUgd2hpY2ggY2FuIGhhdmUgZHVwbGljYXRlIGtleXMuCi0gIHZpcnR1YWwgaW50IE1h
cFNpemUoY29uc3QgTWVzc2FnZSYgLyogbWVzc2FnZSAqLywKLSAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIC8qIGZpZWxkICovKSBjb25zdCB7Ci0gICAgcmV0dXJu
IDA7Ci0gIH0KLQotICAvLyBIZWxwIG1ldGhvZCBmb3IgTWFwSXRlcmF0b3IuCi0gIGZyaWVuZCBj
bGFzcyBNYXBJdGVyYXRvcjsKLSAgdmlydHVhbCBpbnRlcm5hbDo6TWFwRmllbGRCYXNlKiBNYXBE
YXRhKAotICAgICAgTWVzc2FnZSogLyogbWVzc2FnZSAqLywgY29uc3QgRmllbGREZXNjcmlwdG9y
KiAvKiBmaWVsZCAqLykgY29uc3QgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgR09PR0xF
X0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlZmxlY3Rpb24pOwotfTsKLQotLy8gQWJzdHJh
Y3QgaW50ZXJmYWNlIGZvciBhIGZhY3RvcnkgZm9yIG1lc3NhZ2Ugb2JqZWN0cy4KLWNsYXNzIExJ
QlBST1RPQlVGX0VYUE9SVCBNZXNzYWdlRmFjdG9yeSB7Ci0gcHVibGljOgotICBpbmxpbmUgTWVz
c2FnZUZhY3RvcnkoKSB7fQotICB2aXJ0dWFsIH5NZXNzYWdlRmFjdG9yeSgpOwotCi0gIC8vIEdp
dmVuIGEgRGVzY3JpcHRvciwgZ2V0cyBvciBjb25zdHJ1Y3RzIHRoZSBkZWZhdWx0IChwcm90b3R5
cGUpIE1lc3NhZ2UKLSAgLy8gb2YgdGhhdCB0eXBlLiAgWW91IGNhbiB0aGVuIGNhbGwgdGhhdCBt
ZXNzYWdlJ3MgTmV3KCkgbWV0aG9kIHRvIGNvbnN0cnVjdAotICAvLyBhIG11dGFibGUgbWVzc2Fn
ZSBvZiB0aGF0IHR5cGUuCi0gIC8vCi0gIC8vIENhbGxpbmcgdGhpcyBtZXRob2QgdHdpY2Ugd2l0
aCB0aGUgc2FtZSBEZXNjcmlwdG9yIHJldHVybnMgdGhlIHNhbWUKLSAgLy8gb2JqZWN0LiAgVGhl
IHJldHVybmVkIG9iamVjdCByZW1haW5zIHByb3BlcnR5IG9mIHRoZSBmYWN0b3J5LiAgQWxzbywg
YW55Ci0gIC8vIG9iamVjdHMgY3JlYXRlZCBieSBjYWxsaW5nIHRoZSBwcm90b3R5cGUncyBOZXco
KSBtZXRob2Qgc2hhcmUgc29tZSBkYXRhCi0gIC8vIHdpdGggdGhlIHByb3RvdHlwZSwgc28gdGhl
c2UgbXVzdCBiZSBkZXN0cm95ZWQgYmVmb3JlIHRoZSBNZXNzYWdlRmFjdG9yeQotICAvLyBpcyBk
ZXN0cm95ZWQuCi0gIC8vCi0gIC8vIFRoZSBnaXZlbiBkZXNjcmlwdG9yIG11c3Qgb3V0bGl2ZSB0
aGUgcmV0dXJuZWQgbWVzc2FnZSwgYW5kIGhlbmNlIG11c3QKLSAgLy8gb3V0bGl2ZSB0aGUgTWVz
c2FnZUZhY3RvcnkuCi0gIC8vCi0gIC8vIFNvbWUgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBzdXBw
b3J0IGFsbCB0eXBlcy4gIEdldFByb3RvdHlwZSgpIHdpbGwKLSAgLy8gcmV0dXJuIE5VTEwgaWYg
dGhlIGRlc2NyaXB0b3IgcGFzc2VkIGluIGlzIG5vdCBzdXBwb3J0ZWQuCi0gIC8vCi0gIC8vIFRo
aXMgbWV0aG9kIG1heSBvciBtYXkgbm90IGJlIHRocmVhZC1zYWZlIGRlcGVuZGluZyBvbiB0aGUg
aW1wbGVtZW50YXRpb24uCi0gIC8vIEVhY2ggaW1wbGVtZW50YXRpb24gc2hvdWxkIGRvY3VtZW50
IGl0cyBvd24gZGVncmVlIHRocmVhZC1zYWZldHkuCi0gIHZpcnR1YWwgY29uc3QgTWVzc2FnZSog
R2V0UHJvdG90eXBlKGNvbnN0IERlc2NyaXB0b3IqIHR5cGUpID0gMDsKLQotICAvLyBHZXRzIGEg
TWVzc2FnZUZhY3Rvcnkgd2hpY2ggc3VwcG9ydHMgYWxsIGdlbmVyYXRlZCwgY29tcGlsZWQtaW4g
bWVzc2FnZXMuCi0gIC8vIEluIG90aGVyIHdvcmRzLCBmb3IgYW55IGNvbXBpbGVkLWluIHR5cGUg
Rm9vTWVzc2FnZSwgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgotICAvLyAgIE1lc3NhZ2VGYWN0b3J5
OjpnZW5lcmF0ZWRfZmFjdG9yeSgpLT5HZXRQcm90b3R5cGUoCi0gIC8vICAgICBGb29NZXNzYWdl
OjpkZXNjcmlwdG9yKCkpID09IEZvb01lc3NhZ2U6OmRlZmF1bHRfaW5zdGFuY2UoKQotICAvLyBU
aGlzIGZhY3Rvcnkgc3VwcG9ydHMgYWxsIHR5cGVzIHdoaWNoIGFyZSBmb3VuZCBpbgotICAvLyBE
ZXNjcmlwdG9yUG9vbDo6Z2VuZXJhdGVkX3Bvb2woKS4gIElmIGdpdmVuIGEgZGVzY3JpcHRvciBm
cm9tIGFueSBvdGhlcgotICAvLyBwb29sLCBHZXRQcm90b3R5cGUoKSB3aWxsIHJldHVybiBOVUxM
LiAgKFlvdSBjYW4gYWxzbyBjaGVjayBpZiBhCi0gIC8vIGRlc2NyaXB0b3IgaXMgZm9yIGEgZ2Vu
ZXJhdGVkIG1lc3NhZ2UgYnkgY2hlY2tpbmcgaWYKLSAgLy8gZGVzY3JpcHRvci0+ZmlsZSgpLT5w
b29sKCkgPT0gRGVzY3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCkuKQotICAvLwotICAvLyBU
aGlzIGZhY3RvcnkgaXMgMTAwJSB0aHJlYWQtc2FmZTsgY2FsbGluZyBHZXRQcm90b3R5cGUoKSBk
b2VzIG5vdCBtb2RpZnkKLSAgLy8gYW55IHNoYXJlZCBkYXRhLgotICAvLwotICAvLyBUaGlzIGZh
Y3RvcnkgaXMgYSBzaW5nbGV0b24uICBUaGUgY2FsbGVyIG11c3Qgbm90IGRlbGV0ZSB0aGUgb2Jq
ZWN0LgotICBzdGF0aWMgTWVzc2FnZUZhY3RvcnkqIGdlbmVyYXRlZF9mYWN0b3J5KCk7Ci0KLSAg
Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5OiAgUmVnaXN0ZXJzIGEgLnByb3RvIGZpbGUgYXQgc3Rh
dGljIGluaXRpYWxpemF0aW9uCi0gIC8vIHRpbWUsIHRvIGJlIHBsYWNlZCBpbiBnZW5lcmF0ZWRf
ZmFjdG9yeS4gIFRoZSBmaXJzdCB0aW1lIEdldFByb3RvdHlwZSgpCi0gIC8vIGlzIGNhbGxlZCB3
aXRoIGEgZGVzY3JpcHRvciBmcm9tIHRoaXMgZmlsZSwgfHJlZ2lzdGVyX21lc3NhZ2VzfCB3aWxs
IGJlCi0gIC8vIGNhbGxlZCwgd2l0aCB0aGUgZmlsZSBuYW1lIGFzIHRoZSBwYXJhbWV0ZXIuICBJ
dCBtdXN0IGNhbGwKLSAgLy8gSW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoKSAoYmVs
b3cpIHRvIHJlZ2lzdGVyIGVhY2ggbWVzc2FnZSB0eXBlCi0gIC8vIGluIHRoZSBmaWxlLiAgVGhp
cyBzdHJhbmdlIG1lY2hhbmlzbSBpcyBuZWNlc3NhcnkgYmVjYXVzZSBkZXNjcmlwdG9ycyBhcmUK
LSAgLy8gYnVpbHQgbGF6aWx5LCBzbyB3ZSBjYW4ndCByZWdpc3RlciB0eXBlcyBieSB0aGVpciBk
ZXNjcmlwdG9yIHVudGlsIHdlCi0gIC8vIGtub3cgdGhhdCB0aGUgZGVzY3JpcHRvciBleGlzdHMu
ICB8ZmlsZW5hbWV8IG11c3QgYmUgYSBwZXJtYW5lbnQgc3RyaW5nLgotICBzdGF0aWMgdm9pZCBJ
bnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkRmlsZSgKLSAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1l
LCB2b2lkICgqcmVnaXN0ZXJfbWVzc2FnZXMpKGNvbnN0IHN0cmluZyYpKTsKLQotICAvLyBGb3Ig
aW50ZXJuYWwgdXNlIG9ubHk6ICBSZWdpc3RlcnMgYSBtZXNzYWdlIHR5cGUuICBDYWxsZWQgb25s
eSBieSB0aGUKLSAgLy8gZnVuY3Rpb25zIHdoaWNoIGFyZSByZWdpc3RlcmVkIHdpdGggSW50ZXJu
YWxSZWdpc3RlckdlbmVyYXRlZEZpbGUoKSwKLSAgLy8gYWJvdmUuCi0gIHN0YXRpYyB2b2lkIElu
dGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0
b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE1lc3NhZ2UqIHByb3RvdHlwZSk7Ci0KLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19F
VklMX0NPTlNUUlVDVE9SUyhNZXNzYWdlRmFjdG9yeSk7Ci19OwotCi0jZGVmaW5lIERFQ0xBUkVf
R0VUX1JFUEVBVEVEX0ZJRUxEKFRZUEUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBs
YXRlPD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotTElCUFJPVE9CVUZfRVhQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi1jb25zdCBSZXBlYXRlZEZpZWxkPFRZUEU+JiBSZWZsZWN0aW9uOjpH
ZXRSZXBlYXRlZEZpZWxkPFRZUEU+KCAgIFwKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLCBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdDsgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi10ZW1wbGF0
ZTw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLUxJQlBST1RPQlVGX0VYUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotUmVwZWF0ZWRGaWVsZDxUWVBFPiogUmVmbGVjdGlvbjo6TXV0YWJsZVJl
cGVhdGVkRmllbGQ8VFlQRT4oICAgICBcCi0gICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3Q7Ci0KLURFQ0xBUkVfR0VUX1JFUEVBVEVEX0ZJRUxE
KGludDMyKQotREVDTEFSRV9HRVRfUkVQRUFURURfRklFTEQoaW50NjQpCi1ERUNMQVJFX0dFVF9S
RVBFQVRFRF9GSUVMRCh1aW50MzIpCi1ERUNMQVJFX0dFVF9SRVBFQVRFRF9GSUVMRCh1aW50NjQp
Ci1ERUNMQVJFX0dFVF9SRVBFQVRFRF9GSUVMRChmbG9hdCkKLURFQ0xBUkVfR0VUX1JFUEVBVEVE
X0ZJRUxEKGRvdWJsZSkKLURFQ0xBUkVfR0VUX1JFUEVBVEVEX0ZJRUxEKGJvb2wpCi0KLSN1bmRl
ZiBERUNMQVJFX0dFVF9SRVBFQVRFRF9GSUVMRAotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ly8gSW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3Ige0dldCxNdXRhYmxlfVJhd1JlcGVhdGVkUHRy
RmllbGQuICBXZSBwcm92aWRlCi0vLyBzcGVjaWFsaXphdGlvbnMgZm9yIDxzdHJpbmc+LCA8U3Ry
aW5nUGllY2VGaWVsZD4gYW5kIDxNZXNzYWdlPiBhbmQgaGFuZGxlCi0vLyBldmVyeXRoaW5nIGVs
c2Ugd2l0aCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSB3aGljaCB3aWxsIG1hdGNoIGFueSB0eXBlIGhh
dmluZwotLy8gYSBtZXRob2Qgd2l0aCBzaWduYXR1cmUgInN0YXRpYyBjb25zdCBnb29nbGU6OnBy
b3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCkiLgotLy8gU3VjaCBhIHR5cGUgcHJlc3Vt
YWJseSBpcyBhIGRlc2NlbmRhbnQgb2YgZ29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZS4KLQotdGVt
cGxhdGU8PgotaW5saW5lIGNvbnN0IFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPiYgUmVmbGVjdGlv
bjo6R2V0UmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+KAotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3Nh
Z2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsKLSAgcmV0dXJuICpzdGF0
aWNfY2FzdDxSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4qID4oCi0gICAgICBNdXRhYmxlUmF3UmVw
ZWF0ZWRTdHJpbmcoY29uc3RfY2FzdDxNZXNzYWdlKj4oJm1lc3NhZ2UpLCBmaWVsZCwgdHJ1ZSkp
OwotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+KiBSZWZs
ZWN0aW9uOjpNdXRhYmxlUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+KAotICAgIE1lc3NhZ2UqIG1l
c3NhZ2UsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsKLSAgcmV0dXJuIHN0
YXRpY19jYXN0PFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPiogPigKLSAgICAgIE11dGFibGVSYXdS
ZXBlYXRlZFN0cmluZyhtZXNzYWdlLCBmaWVsZCwgdHJ1ZSkpOwotfQotCi0KLS8vIC0tLS0tCi0K
LXRlbXBsYXRlPD4KLWlubGluZSBjb25zdCBSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+JiBSZWZs
ZWN0aW9uOjpHZXRSZXBlYXRlZFB0ckZpZWxkKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2Us
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIGNvbnN0IHsKLSAgcmV0dXJuICpzdGF0aWNf
Y2FzdDxjb25zdCBSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+KiA+KAotICAgICAgR2V0UmF3UmVw
ZWF0ZWRGaWVsZChtZXNzYWdlLCBmaWVsZCwgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NB
R0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBOVUxMKSk7Ci19Ci0KLXRlbXBsYXRl
PD4KLWlubGluZSBSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+KiBSZWZsZWN0aW9uOjpNdXRhYmxl
UmVwZWF0ZWRQdHJGaWVsZCgKLSAgICBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxSZXBlYXRlZFB0ckZp
ZWxkPE1lc3NhZ2U+KiA+KAotICAgICAgTXV0YWJsZVJhd1JlcGVhdGVkRmllbGQobWVzc2FnZSwg
ZmllbGQsCi0gICAgICAgICAgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UsIC0xLAot
ICAgICAgICAgIE5VTEwpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUEI+Ci1pbmxpbmUgY29u
c3QgUmVwZWF0ZWRQdHJGaWVsZDxQQj4mIFJlZmxlY3Rpb246OkdldFJlcGVhdGVkUHRyRmllbGQo
Ci0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCkgY29uc3QgewotICByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IFJlcGVhdGVkUHRyRmllbGQ8
UEI+KiA+KAotICAgICAgR2V0UmF3UmVwZWF0ZWRGaWVsZChtZXNzYWdlLCBmaWVsZCwgRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC0x
LCBQQjo6ZGVmYXVsdF9pbnN0YW5jZSgpLkdldERlc2NyaXB0b3IoKSkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBQQj4KLWlubGluZSBSZXBlYXRlZFB0ckZpZWxkPFBCPiogUmVmbGVjdGlvbjo6
TXV0YWJsZVJlcGVhdGVkUHRyRmllbGQoCi0gICAgTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCkgY29uc3QgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVwZWF0
ZWRQdHJGaWVsZDxQQj4qID4oCi0gICAgICBNdXRhYmxlUmF3UmVwZWF0ZWRGaWVsZChtZXNzYWdl
LCBmaWVsZCwKLSAgICAgICAgICBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSwgLTEs
Ci0gICAgICAgICAgUEI6OmRlZmF1bHRfaW5zdGFuY2UoKS5HZXREZXNjcmlwdG9yKCkpKTsKLX0K
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5k
aWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9NRVNTQUdFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL21lc3NhZ2VfbGl0ZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlX2xp
dGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkN2I2NGY3NDcyY2IyNGE5MTVk
ODFkZjczNjg4NjkwMjZjODcyYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2VfbGl0ZS5jYworKysgL2Rldi9u
dWxsCkBAIC0xLDM3MiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotLy8gQXV0aG9yczogd2lua0Bnb29nbGUuY29tIChXaW5rIFNhdmlsbGUpLAotLy8gICAgICAg
ICAga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5h
bCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBE
ZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2VfbGl0
ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZC5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRf
c3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1f
aW1wbF9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0bF91dGlsLmg+
Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotTWVzc2FnZUxp
dGU6On5NZXNzYWdlTGl0ZSgpIHt9Ci0KLXN0cmluZyBNZXNzYWdlTGl0ZTo6SW5pdGlhbGl6YXRp
b25FcnJvclN0cmluZygpIGNvbnN0IHsKLSAgcmV0dXJuICIoY2Fubm90IGRldGVybWluZSBtaXNz
aW5nIGZpZWxkcyBmb3IgbGl0ZSBtZXNzYWdlKSI7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFdo
ZW4gc2VyaWFsaXppbmcsIHdlIGZpcnN0IGNvbXB1dGUgdGhlIGJ5dGUgc2l6ZSwgdGhlbiBzZXJp
YWxpemUgdGhlIG1lc3NhZ2UuCi0vLyBJZiBzZXJpYWxpemF0aW9uIHByb2R1Y2VzIGEgZGlmZmVy
ZW50IG51bWJlciBvZiBieXRlcyB0aGFuIGV4cGVjdGVkLCB3ZQotLy8gY2FsbCB0aGlzIGZ1bmN0
aW9uLCB3aGljaCBjcmFzaGVzLiAgVGhlIHByb2JsZW0gY291bGQgYmUgZHVlIHRvIGEgYnVnIGlu
IHRoZQotLy8gcHJvdG9idWYgaW1wbGVtZW50YXRpb24gYnV0IGlzIG1vcmUgbGlrZWx5IGNhdXNl
ZCBieSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbgotLy8gb2YgdGhlIG1lc3NhZ2UuICBUaGlzIGZ1
bmN0aW9uIGF0dGVtcHRzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHR3byBhbmQKLS8vIHBy
b3ZpZGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZS4KLXZvaWQgQnl0ZVNpemVDb25zaXN0ZW5jeUVy
cm9yKGludCBieXRlX3NpemVfYmVmb3JlX3NlcmlhbGl6YXRpb24sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgYnl0ZV9zaXplX2FmdGVyX3NlcmlhbGl6YXRpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZXNfcHJvZHVjZWRfYnlfc2VyaWFsaXphdGlv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2VMaXRlJiBtZXNz
YWdlKSB7Ci0gIEdPT0dMRV9DSEVDS19FUShieXRlX3NpemVfYmVmb3JlX3NlcmlhbGl6YXRpb24s
IGJ5dGVfc2l6ZV9hZnRlcl9zZXJpYWxpemF0aW9uKQotICAgICAgPDwgbWVzc2FnZS5HZXRUeXBl
TmFtZSgpCi0gICAgICA8PCAiIHdhcyBtb2RpZmllZCBjb25jdXJyZW50bHkgZHVyaW5nIHNlcmlh
bGl6YXRpb24uIjsKLSAgR09PR0xFX0NIRUNLX0VRKGJ5dGVzX3Byb2R1Y2VkX2J5X3NlcmlhbGl6
YXRpb24sIGJ5dGVfc2l6ZV9iZWZvcmVfc2VyaWFsaXphdGlvbikKLSAgICAgIDw8ICJCeXRlIHNp
emUgY2FsY3VsYXRpb24gYW5kIHNlcmlhbGl6YXRpb24gd2VyZSBpbmNvbnNpc3RlbnQuICBUaGlz
ICIKLSAgICAgICAgICJtYXkgaW5kaWNhdGUgYSBidWcgaW4gcHJvdG9jb2wgYnVmZmVycyBvciBp
dCBtYXkgYmUgY2F1c2VkIGJ5ICIKLSAgICAgICAgICJjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBv
ZiAiIDw8IG1lc3NhZ2UuR2V0VHlwZU5hbWUoKSA8PCAiLiI7Ci0gIEdPT0dMRV9MT0coRkFUQUwp
IDw8ICJUaGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgaWYgYWxsIHRoZSBzaXplcyBhcmUgZXF1YWwu
IjsKLX0KLQotc3RyaW5nIEluaXRpYWxpemF0aW9uRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGFj
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlTGl0
ZSYgbWVzc2FnZSkgewotICAvLyBOb3RlOiAgV2Ugd2FudCB0byBhdm9pZCBkZXBlbmRpbmcgb24g
c3RydXRpbCBpbiB0aGUgbGl0ZSBsaWJyYXJ5LCBvdGhlcndpc2UKLSAgLy8gICB3ZSdkIHVzZToK
LSAgLy8KLSAgLy8gcmV0dXJuIHN0cmluZ3M6OlN1YnN0aXR1dGUoCi0gIC8vICAgIkNhbid0ICQw
IG1lc3NhZ2Ugb2YgdHlwZSBcIiQxXCIgYmVjYXVzZSBpdCBpcyBtaXNzaW5nIHJlcXVpcmVkICIK
LSAgLy8gICAiZmllbGRzOiAkMiIsCi0gIC8vICAgYWN0aW9uLCBtZXNzYWdlLkdldFR5cGVOYW1l
KCksCi0gIC8vICAgbWVzc2FnZS5Jbml0aWFsaXphdGlvbkVycm9yU3RyaW5nKCkpOwotCi0gIHN0
cmluZyByZXN1bHQ7Ci0gIHJlc3VsdCArPSAiQ2FuJ3QgIjsKLSAgcmVzdWx0ICs9IGFjdGlvbjsK
LSAgcmVzdWx0ICs9ICIgbWVzc2FnZSBvZiB0eXBlIFwiIjsKLSAgcmVzdWx0ICs9IG1lc3NhZ2Uu
R2V0VHlwZU5hbWUoKTsKLSAgcmVzdWx0ICs9ICJcIiBiZWNhdXNlIGl0IGlzIG1pc3NpbmcgcmVx
dWlyZWQgZmllbGRzOiAiOwotICByZXN1bHQgKz0gbWVzc2FnZS5Jbml0aWFsaXphdGlvbkVycm9y
U3RyaW5nKCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIFNldmVyYWwgb2YgdGhlIFBhcnNl
IG1ldGhvZHMgYmVsb3cganVzdCBkbyBvbmUgdGhpbmcgYW5kIHRoZW4gY2FsbCBhbm90aGVyCi0v
LyBtZXRob2QuICBJbiBhIG5haXZlIGltcGxlbWVudGF0aW9uLCB3ZSBtaWdodCBoYXZlIFBhcnNl
RnJvbVN0cmluZygpIGNhbGwKLS8vIFBhcnNlRnJvbUFycmF5KCkgd2hpY2ggd291bGQgY2FsbCBQ
YXJzZUZyb21aZXJvQ29weVN0cmVhbSgpIHdoaWNoIHdvdWxkIGNhbGwKLS8vIFBhcnNlRnJvbUNv
ZGVkU3RyZWFtKCkgd2hpY2ggd291bGQgY2FsbCBNZXJnZUZyb21Db2RlZFN0cmVhbSgpIHdoaWNo
IHdvdWxkCi0vLyBjYWxsIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgpLiAgSG93ZXZlciwg
d2hlbiBwYXJzaW5nIHZlcnkgc21hbGwKLS8vIG1lc3NhZ2VzLCBldmVyeSBmdW5jdGlvbiBjYWxs
IGludHJvZHVjZXMgc2lnbmlmaWNhbnQgb3ZlcmhlYWQuICBUbyBhdm9pZAotLy8gdGhpcyB3aXRo
b3V0IHJlcHJvZHVjaW5nIGNvZGUsIHdlIHVzZSB0aGVzZSBmb3JjZWQtaW5saW5lIGhlbHBlcnMu
Ci1HT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUgYm9vbCBJbmxpbmVNZXJnZUZyb21Db2Rl
ZFN0cmVhbSgKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsIE1lc3NhZ2VMaXRlKiBt
ZXNzYWdlKTsKLUdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSBib29sIElubGluZVBhcnNl
RnJvbUNvZGVkU3RyZWFtKAotICAgIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwgTWVzc2Fn
ZUxpdGUqIG1lc3NhZ2UpOwotR09PR0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FIGJvb2wgSW5s
aW5lUGFyc2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgIGlvOjpDb2RlZElucHV0U3RyZWFt
KiBpbnB1dCwgTWVzc2FnZUxpdGUqIG1lc3NhZ2UpOwotR09PR0xFX0FUVFJJQlVURV9BTFdBWVNf
SU5MSU5FIGJvb2wgSW5saW5lUGFyc2VGcm9tQXJyYXkoCi0gICAgY29uc3Qgdm9pZCogZGF0YSwg
aW50IHNpemUsIE1lc3NhZ2VMaXRlKiBtZXNzYWdlKTsKLUdPT0dMRV9BVFRSSUJVVEVfQUxXQVlT
X0lOTElORSBib29sIElubGluZVBhcnNlUGFydGlhbEZyb21BcnJheSgKLSAgICBjb25zdCB2b2lk
KiBkYXRhLCBpbnQgc2l6ZSwgTWVzc2FnZUxpdGUqIG1lc3NhZ2UpOwotCi1pbmxpbmUgYm9vbCBJ
bmxpbmVNZXJnZUZyb21Db2RlZFN0cmVhbShpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlTGl0ZSogbWVzc2Fn
ZSkgewotICBpZiAoIW1lc3NhZ2UtPk1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbShpbnB1dCkp
IHJldHVybiBmYWxzZTsKLSAgaWYgKCFtZXNzYWdlLT5Jc0luaXRpYWxpemVkKCkpIHsKLSAgICBH
T09HTEVfTE9HKEVSUk9SKSA8PCBJbml0aWFsaXphdGlvbkVycm9yTWVzc2FnZSgicGFyc2UiLCAq
bWVzc2FnZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1p
bmxpbmUgYm9vbCBJbmxpbmVQYXJzZUZyb21Db2RlZFN0cmVhbShpbzo6Q29kZWRJbnB1dFN0cmVh
bSogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdl
TGl0ZSogbWVzc2FnZSkgewotICBtZXNzYWdlLT5DbGVhcigpOwotICByZXR1cm4gSW5saW5lTWVy
Z2VGcm9tQ29kZWRTdHJlYW0oaW5wdXQsIG1lc3NhZ2UpOwotfQotCi1pbmxpbmUgYm9vbCBJbmxp
bmVQYXJzZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VM
aXRlKiBtZXNzYWdlKSB7Ci0gIG1lc3NhZ2UtPkNsZWFyKCk7Ci0gIHJldHVybiBtZXNzYWdlLT5N
ZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oaW5wdXQpOwotfQotCi1pbmxpbmUgYm9vbCBJbmxp
bmVQYXJzZUZyb21BcnJheSgKLSAgICBjb25zdCB2b2lkKiBkYXRhLCBpbnQgc2l6ZSwgTWVzc2Fn
ZUxpdGUqIG1lc3NhZ2UpIHsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OCo+KGRhdGEpLCBzaXplKTsKLSAgcmV0dXJuIElubGluZVBhcnNl
RnJvbUNvZGVkU3RyZWFtKCZpbnB1dCwgbWVzc2FnZSkgJiYKLSAgICAgICAgIGlucHV0LkNvbnN1
bWVkRW50aXJlTWVzc2FnZSgpOwotfQotCi1pbmxpbmUgYm9vbCBJbmxpbmVQYXJzZVBhcnRpYWxG
cm9tQXJyYXkoCi0gICAgY29uc3Qgdm9pZCogZGF0YSwgaW50IHNpemUsIE1lc3NhZ2VMaXRlKiBt
ZXNzYWdlKSB7Ci0gIGlvOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDgqPihkYXRhKSwgc2l6ZSk7Ci0gIHJldHVybiBJbmxpbmVQYXJzZVBhcnRpYWxG
cm9tQ29kZWRTdHJlYW0oJmlucHV0LCBtZXNzYWdlKSAmJgotICAgICAgICAgaW5wdXQuQ29uc3Vt
ZWRFbnRpcmVNZXNzYWdlKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0KLU1lc3NhZ2VMaXRl
KiBNZXNzYWdlTGl0ZTo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25z
dCB7Ci0gIE1lc3NhZ2VMaXRlKiBtZXNzYWdlID0gTmV3KCk7Ci0gIGlmIChhcmVuYSAhPSBOVUxM
KSB7Ci0gICAgYXJlbmEtPk93bihtZXNzYWdlKTsKLSAgfQotICByZXR1cm4gbWVzc2FnZTsKLX0K
LQotYm9vbCBNZXNzYWdlTGl0ZTo6TWVyZ2VGcm9tQ29kZWRTdHJlYW0oaW86OkNvZGVkSW5wdXRT
dHJlYW0qIGlucHV0KSB7Ci0gIHJldHVybiBJbmxpbmVNZXJnZUZyb21Db2RlZFN0cmVhbShpbnB1
dCwgdGhpcyk7Ci19Ci0KLWJvb2wgTWVzc2FnZUxpdGU6OlBhcnNlRnJvbUNvZGVkU3RyZWFtKGlv
OjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotICByZXR1cm4gSW5saW5lUGFyc2VGcm9tQ29k
ZWRTdHJlYW0oaW5wdXQsIHRoaXMpOwotfQotCi1ib29sIE1lc3NhZ2VMaXRlOjpQYXJzZVBhcnRp
YWxGcm9tQ29kZWRTdHJlYW0oaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0gIHJldHVy
biBJbmxpbmVQYXJzZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oaW5wdXQsIHRoaXMpOwotfQotCi1i
b29sIE1lc3NhZ2VMaXRlOjpQYXJzZUZyb21aZXJvQ29weVN0cmVhbShpbzo6WmVyb0NvcHlJbnB1
dFN0cmVhbSogaW5wdXQpIHsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0gZGVjb2RlcihpbnB1dCk7
Ci0gIHJldHVybiBQYXJzZUZyb21Db2RlZFN0cmVhbSgmZGVjb2RlcikgJiYgZGVjb2Rlci5Db25z
dW1lZEVudGlyZU1lc3NhZ2UoKTsKLX0KLQotYm9vbCBNZXNzYWdlTGl0ZTo6UGFyc2VQYXJ0aWFs
RnJvbVplcm9Db3B5U3RyZWFtKAotICAgIGlvOjpaZXJvQ29weUlucHV0U3RyZWFtKiBpbnB1dCkg
ewotICBpbzo6Q29kZWRJbnB1dFN0cmVhbSBkZWNvZGVyKGlucHV0KTsKLSAgcmV0dXJuIFBhcnNl
UGFydGlhbEZyb21Db2RlZFN0cmVhbSgmZGVjb2RlcikgJiYKLSAgICAgICAgIGRlY29kZXIuQ29u
c3VtZWRFbnRpcmVNZXNzYWdlKCk7Ci19Ci0KLWJvb2wgTWVzc2FnZUxpdGU6OlBhcnNlRnJvbUJv
dW5kZWRaZXJvQ29weVN0cmVhbSgKLSAgICBpbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogaW5wdXQs
IGludCBzaXplKSB7Ci0gIGlvOjpDb2RlZElucHV0U3RyZWFtIGRlY29kZXIoaW5wdXQpOwotICBk
ZWNvZGVyLlB1c2hMaW1pdChzaXplKTsKLSAgcmV0dXJuIFBhcnNlRnJvbUNvZGVkU3RyZWFtKCZk
ZWNvZGVyKSAmJgotICAgICAgICAgZGVjb2Rlci5Db25zdW1lZEVudGlyZU1lc3NhZ2UoKSAmJgot
ICAgICAgICAgZGVjb2Rlci5CeXRlc1VudGlsTGltaXQoKSA9PSAwOwotfQotCi1ib29sIE1lc3Nh
Z2VMaXRlOjpQYXJzZVBhcnRpYWxGcm9tQm91bmRlZFplcm9Db3B5U3RyZWFtKAotICAgIGlvOjpa
ZXJvQ29weUlucHV0U3RyZWFtKiBpbnB1dCwgaW50IHNpemUpIHsKLSAgaW86OkNvZGVkSW5wdXRT
dHJlYW0gZGVjb2RlcihpbnB1dCk7Ci0gIGRlY29kZXIuUHVzaExpbWl0KHNpemUpOwotICByZXR1
cm4gUGFyc2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKCZkZWNvZGVyKSAmJgotICAgICAgICAgZGVj
b2Rlci5Db25zdW1lZEVudGlyZU1lc3NhZ2UoKSAmJgotICAgICAgICAgZGVjb2Rlci5CeXRlc1Vu
dGlsTGltaXQoKSA9PSAwOwotfQotCi1ib29sIE1lc3NhZ2VMaXRlOjpQYXJzZUZyb21TdHJpbmco
Y29uc3Qgc3RyaW5nJiBkYXRhKSB7Ci0gIHJldHVybiBJbmxpbmVQYXJzZUZyb21BcnJheShkYXRh
LmRhdGEoKSwgZGF0YS5zaXplKCksIHRoaXMpOwotfQotCi1ib29sIE1lc3NhZ2VMaXRlOjpQYXJz
ZVBhcnRpYWxGcm9tU3RyaW5nKGNvbnN0IHN0cmluZyYgZGF0YSkgewotICByZXR1cm4gSW5saW5l
UGFyc2VQYXJ0aWFsRnJvbUFycmF5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgdGhpcyk7Ci19
Ci0KLWJvb2wgTWVzc2FnZUxpdGU6OlBhcnNlRnJvbUFycmF5KGNvbnN0IHZvaWQqIGRhdGEsIGlu
dCBzaXplKSB7Ci0gIHJldHVybiBJbmxpbmVQYXJzZUZyb21BcnJheShkYXRhLCBzaXplLCB0aGlz
KTsKLX0KLQotYm9vbCBNZXNzYWdlTGl0ZTo6UGFyc2VQYXJ0aWFsRnJvbUFycmF5KGNvbnN0IHZv
aWQqIGRhdGEsIGludCBzaXplKSB7Ci0gIHJldHVybiBJbmxpbmVQYXJzZVBhcnRpYWxGcm9tQXJy
YXkoZGF0YSwgc2l6ZSwgdGhpcyk7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi11aW50OCogTWVz
c2FnZUxpdGU6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkodWludDgqIHRhcmdldCkg
Y29uc3QgewotICAvLyBXZSBvbmx5IG9wdGltaXplIHRoaXMgd2hlbiB1c2luZyBvcHRpbWl6ZV9m
b3IgPSBTUEVFRC4gIEluIG90aGVyIGNhc2VzCi0gIC8vIHdlIGp1c3QgdXNlIHRoZSBDb2RlZE91
dHB1dFN0cmVhbSBwYXRoLgotICBpbnQgc2l6ZSA9IEdldENhY2hlZFNpemUoKTsKLSAgaW86OkFy
cmF5T3V0cHV0U3RyZWFtIG91dCh0YXJnZXQsIHNpemUpOwotICBpbzo6Q29kZWRPdXRwdXRTdHJl
YW0gY29kZWRfb3V0KCZvdXQpOwotICBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoJmNvZGVkX291
dCk7Ci0gIEdPT0dMRV9DSEVDSyghY29kZWRfb3V0LkhhZEVycm9yKCkpOwotICByZXR1cm4gdGFy
Z2V0ICsgc2l6ZTsKLX0KLQotYm9vbCBNZXNzYWdlTGl0ZTo6U2VyaWFsaXplVG9Db2RlZFN0cmVh
bShpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICBHT09HTEVfRENIRUNL
KElzSW5pdGlhbGl6ZWQoKSkgPDwgSW5pdGlhbGl6YXRpb25FcnJvck1lc3NhZ2UoInNlcmlhbGl6
ZSIsICp0aGlzKTsKLSAgcmV0dXJuIFNlcmlhbGl6ZVBhcnRpYWxUb0NvZGVkU3RyZWFtKG91dHB1
dCk7Ci19Ci0KLWJvb2wgTWVzc2FnZUxpdGU6OlNlcmlhbGl6ZVBhcnRpYWxUb0NvZGVkU3RyZWFt
KAotICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIGNvbnN0IGlu
dCBzaXplID0gQnl0ZVNpemUoKTsgIC8vIEZvcmNlIHNpemUgdG8gYmUgY2FjaGVkLgotICBpZiAo
c2l6ZSA8IDApIHsKLSAgICAvLyBNZXNzYWdlcyA+MkcgY2Fubm90IGJlIHNlcmlhbGl6ZWQgZHVl
IHRvIG92ZXJmbG93IGNvbXB1dGluZyBCeXRlU2l6ZS4KLSAgICBHT09HTEVfTE9HKEVSUk9SKSA8
PCAiRXJyb3IgY29tcHV0aW5nIEJ5dGVTaXplIChwb3NzaWJsZSBvdmVyZmxvdz8pLiI7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgdWludDgqIGJ1ZmZlciA9IG91dHB1dC0+R2V0RGlyZWN0
QnVmZmVyRm9yTkJ5dGVzQW5kQWR2YW5jZShzaXplKTsKLSAgaWYgKGJ1ZmZlciAhPSBOVUxMKSB7
Ci0gICAgdWludDgqIGVuZCA9IFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoYnVmZmVy
KTsKLSAgICBpZiAoZW5kIC0gYnVmZmVyICE9IHNpemUpIHsKLSAgICAgIEJ5dGVTaXplQ29uc2lz
dGVuY3lFcnJvcihzaXplLCBCeXRlU2l6ZSgpLCBlbmQgLSBidWZmZXIsICp0aGlzKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgaW50IG9yaWdpbmFsX2J5dGVfY291
bnQgPSBvdXRwdXQtPkJ5dGVDb3VudCgpOwotICAgIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhv
dXRwdXQpOwotICAgIGlmIChvdXRwdXQtPkhhZEVycm9yKCkpIHsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgaW50IGZpbmFsX2J5dGVfY291bnQgPSBvdXRwdXQtPkJ5dGVDb3VudCgp
OwotCi0gICAgaWYgKGZpbmFsX2J5dGVfY291bnQgLSBvcmlnaW5hbF9ieXRlX2NvdW50ICE9IHNp
emUpIHsKLSAgICAgIEJ5dGVTaXplQ29uc2lzdGVuY3lFcnJvcihzaXplLCBCeXRlU2l6ZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsX2J5dGVfY291bnQgLSBvcmlnaW5h
bF9ieXRlX2NvdW50LCAqdGhpcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0K
LQotYm9vbCBNZXNzYWdlTGl0ZTo6U2VyaWFsaXplVG9aZXJvQ29weVN0cmVhbSgKLSAgICBpbzo6
WmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICBpbzo6Q29kZWRPdXRwdXRT
dHJlYW0gZW5jb2RlcihvdXRwdXQpOwotICByZXR1cm4gU2VyaWFsaXplVG9Db2RlZFN0cmVhbSgm
ZW5jb2Rlcik7Ci19Ci0KLWJvb2wgTWVzc2FnZUxpdGU6OlNlcmlhbGl6ZVBhcnRpYWxUb1plcm9D
b3B5U3RyZWFtKAotICAgIGlvOjpaZXJvQ29weU91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7
Ci0gIGlvOjpDb2RlZE91dHB1dFN0cmVhbSBlbmNvZGVyKG91dHB1dCk7Ci0gIHJldHVybiBTZXJp
YWxpemVQYXJ0aWFsVG9Db2RlZFN0cmVhbSgmZW5jb2Rlcik7Ci19Ci0KLWJvb2wgTWVzc2FnZUxp
dGU6OkFwcGVuZFRvU3RyaW5nKHN0cmluZyogb3V0cHV0KSBjb25zdCB7Ci0gIEdPT0dMRV9EQ0hF
Q0soSXNJbml0aWFsaXplZCgpKSA8PCBJbml0aWFsaXphdGlvbkVycm9yTWVzc2FnZSgic2VyaWFs
aXplIiwgKnRoaXMpOwotICByZXR1cm4gQXBwZW5kUGFydGlhbFRvU3RyaW5nKG91dHB1dCk7Ci19
Ci0KLWJvb2wgTWVzc2FnZUxpdGU6OkFwcGVuZFBhcnRpYWxUb1N0cmluZyhzdHJpbmcqIG91dHB1
dCkgY29uc3QgewotICBpbnQgb2xkX3NpemUgPSBvdXRwdXQtPnNpemUoKTsKLSAgaW50IGJ5dGVf
c2l6ZSA9IEJ5dGVTaXplKCk7Ci0gIGlmIChieXRlX3NpemUgPCAwKSB7Ci0gICAgLy8gTWVzc2Fn
ZXMgPjJHIGNhbm5vdCBiZSBzZXJpYWxpemVkIGR1ZSB0byBvdmVyZmxvdyBjb21wdXRpbmcgQnl0
ZVNpemUuCi0gICAgR09PR0xFX0xPRyhFUlJPUikgPDwgIkVycm9yIGNvbXB1dGluZyBCeXRlU2l6
ZSAocG9zc2libGUgb3ZlcmZsb3c/KS4iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIFNU
TFN0cmluZ1Jlc2l6ZVVuaW5pdGlhbGl6ZWQob3V0cHV0LCBvbGRfc2l6ZSArIGJ5dGVfc2l6ZSk7
Ci0gIHVpbnQ4KiBzdGFydCA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oaW86Om11
dGFibGVfc3RyaW5nX2RhdGEob3V0cHV0KSArIG9sZF9zaXplKTsKLSAgdWludDgqIGVuZCA9IFNl
cmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoc3RhcnQpOwotICBpZiAoZW5kIC0gc3RhcnQg
IT0gYnl0ZV9zaXplKSB7Ci0gICAgQnl0ZVNpemVDb25zaXN0ZW5jeUVycm9yKGJ5dGVfc2l6ZSwg
Qnl0ZVNpemUoKSwgZW5kIC0gc3RhcnQsICp0aGlzKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBNZXNzYWdlTGl0ZTo6U2VyaWFsaXplVG9TdHJpbmcoc3RyaW5nKiBvdXRwdXQpIGNv
bnN0IHsKLSAgb3V0cHV0LT5jbGVhcigpOwotICByZXR1cm4gQXBwZW5kVG9TdHJpbmcob3V0cHV0
KTsKLX0KLQotYm9vbCBNZXNzYWdlTGl0ZTo6U2VyaWFsaXplUGFydGlhbFRvU3RyaW5nKHN0cmlu
Zyogb3V0cHV0KSBjb25zdCB7Ci0gIG91dHB1dC0+Y2xlYXIoKTsKLSAgcmV0dXJuIEFwcGVuZFBh
cnRpYWxUb1N0cmluZyhvdXRwdXQpOwotfQotCi1ib29sIE1lc3NhZ2VMaXRlOjpTZXJpYWxpemVU
b0FycmF5KHZvaWQqIGRhdGEsIGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9EQ0hFQ0soSXNJ
bml0aWFsaXplZCgpKSA8PCBJbml0aWFsaXphdGlvbkVycm9yTWVzc2FnZSgic2VyaWFsaXplIiwg
KnRoaXMpOwotICByZXR1cm4gU2VyaWFsaXplUGFydGlhbFRvQXJyYXkoZGF0YSwgc2l6ZSk7Ci19
Ci0KLWJvb2wgTWVzc2FnZUxpdGU6OlNlcmlhbGl6ZVBhcnRpYWxUb0FycmF5KHZvaWQqIGRhdGEs
IGludCBzaXplKSBjb25zdCB7Ci0gIGludCBieXRlX3NpemUgPSBCeXRlU2l6ZSgpOwotICBpZiAo
c2l6ZSA8IGJ5dGVfc2l6ZSkgcmV0dXJuIGZhbHNlOwotICB1aW50OCogc3RhcnQgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4Kj4oZGF0YSk7Ci0gIHVpbnQ4KiBlbmQgPSBTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXNUb0FycmF5KHN0YXJ0KTsKLSAgaWYgKGVuZCAtIHN0YXJ0ICE9IGJ5dGVfc2l6ZSkg
ewotICAgIEJ5dGVTaXplQ29uc2lzdGVuY3lFcnJvcihieXRlX3NpemUsIEJ5dGVTaXplKCksIGVu
ZCAtIHN0YXJ0LCAqdGhpcyk7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0cmluZyBNZXNz
YWdlTGl0ZTo6U2VyaWFsaXplQXNTdHJpbmcoKSBjb25zdCB7Ci0gIC8vIElmIHRoZSBjb21waWxl
ciBpbXBsZW1lbnRzIHRoZSAoTmFtZWQpIFJldHVybiBWYWx1ZSBPcHRpbWl6YXRpb24sCi0gIC8v
IHRoZSBsb2NhbCB2YXJpYWJsZSAnb3V0cHV0JyB3aWxsIG5vdCBhY3R1YWxseSByZXNpZGUgb24g
dGhlIHN0YWNrCi0gIC8vIG9mIHRoaXMgZnVuY3Rpb24sIGJ1dCB3aWxsIGJlIG92ZXJsYWlkIHdp
dGggdGhlIG9iamVjdCB0aGF0IHRoZQotICAvLyBjYWxsZXIgc3VwcGxpZWQgZm9yIHRoZSByZXR1
cm4gdmFsdWUgdG8gYmUgY29uc3RydWN0ZWQgaW4uCi0gIHN0cmluZyBvdXRwdXQ7Ci0gIGlmICgh
QXBwZW5kVG9TdHJpbmcoJm91dHB1dCkpCi0gICAgb3V0cHV0LmNsZWFyKCk7Ci0gIHJldHVybiBv
dXRwdXQ7Ci19Ci0KLXN0cmluZyBNZXNzYWdlTGl0ZTo6U2VyaWFsaXplUGFydGlhbEFzU3RyaW5n
KCkgY29uc3QgewotICBzdHJpbmcgb3V0cHV0OwotICBpZiAoIUFwcGVuZFBhcnRpYWxUb1N0cmlu
Zygmb3V0cHV0KSkKLSAgICBvdXRwdXQuY2xlYXIoKTsKLSAgcmV0dXJuIG91dHB1dDsKLX0KLQot
bmFtZXNwYWNlIGludGVybmFsIHsKLXRlbXBsYXRlPD4KLU1lc3NhZ2VMaXRlKiBHZW5lcmljVHlw
ZUhhbmRsZXI8TWVzc2FnZUxpdGU+OjpOZXdGcm9tUHJvdG90eXBlKAotICAgIGNvbnN0IE1lc3Nh
Z2VMaXRlKiBwcm90b3R5cGUsIGdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgewotICBy
ZXR1cm4gcHJvdG90eXBlLT5OZXcoYXJlbmEpOwotfQotdGVtcGxhdGUgPD4KLXZvaWQgR2VuZXJp
Y1R5cGVIYW5kbGVyPE1lc3NhZ2VMaXRlPjo6TWVyZ2UoY29uc3QgTWVzc2FnZUxpdGUmIGZyb20s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VMaXRl
KiB0bykgewotICB0by0+Q2hlY2tUeXBlQW5kTWVyZ2VGcm9tKGZyb20pOwotfQotdGVtcGxhdGU8
Pgotdm9pZCBHZW5lcmljVHlwZUhhbmRsZXI8c3RyaW5nPjo6TWVyZ2UoY29uc3Qgc3RyaW5nJiBm
cm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlu
ZyogdG8pIHsKLSAgKnRvID0gZnJvbTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlX2xpdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9tZXNzYWdlX2xpdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmY0YzA1
NzJiZTg4ZGYwYTcwMmU4YTU0NTVkMGVjNzhmYzM4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWVzc2FnZV9saXRlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIEF1dGhvcnM6IHdpbmtAZ29vZ2xlLmNvbSAoV2luayBTYXZpbGxlKSwK
LS8vICAgICAgICAgIGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQg
b24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3
YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBEZWZpbmVzIE1lc3NhZ2VMaXRlLCB0
aGUgYWJzdHJhY3QgaW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IGFsbCAobGl0ZQotLy8gYW5kIG5v
bi1saXRlKSBwcm90b2NvbCBtZXNzYWdlIG9iamVjdHMuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RP
QlVGX01FU1NBR0VfTElURV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX01FU1NBR0VfTElU
RV9IX18KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotCi1u
YW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0gIGNsYXNzIEFyZW5hOwot
bmFtZXNwYWNlIGlvIHsKLSAgY2xhc3MgQ29kZWRJbnB1dFN0cmVhbTsKLSAgY2xhc3MgQ29kZWRP
dXRwdXRTdHJlYW07Ci0gIGNsYXNzIFplcm9Db3B5SW5wdXRTdHJlYW07Ci0gIGNsYXNzIFplcm9D
b3B5T3V0cHV0U3RyZWFtOwotfQotCi0vLyBJbnRlcmZhY2UgdG8gbGlnaHQgd2VpZ2h0IHByb3Rv
Y29sIG1lc3NhZ2VzLgotLy8KLS8vIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGFs
bCBwcm90b2NvbCBtZXNzYWdlIG9iamVjdHMuICBOb24tbGl0ZQotLy8gbWVzc2FnZXMgYWRkaXRp
b25hbGx5IGltcGxlbWVudCB0aGUgTWVzc2FnZSBpbnRlcmZhY2UsIHdoaWNoIGlzIGEKLS8vIHN1
YmNsYXNzIG9mIE1lc3NhZ2VMaXRlLiAgVXNlIE1lc3NhZ2VMaXRlIGluc3RlYWQgd2hlbiB5b3Ug
b25seSBuZWVkCi0vLyB0aGUgc3Vic2V0IG9mIGZlYXR1cmVzIHdoaWNoIGl0IHN1cHBvcnRzIC0t
IG5hbWVseSwgbm90aGluZyB0aGF0IHVzZXMKLS8vIGRlc2NyaXB0b3JzIG9yIHJlZmxlY3Rpb24u
ICBZb3UgY2FuIGluc3RydWN0IHRoZSBwcm90b2NvbCBjb21waWxlcgotLy8gdG8gZ2VuZXJhdGUg
Y2xhc3NlcyB3aGljaCBpbXBsZW1lbnQgb25seSBNZXNzYWdlTGl0ZSwgbm90IHRoZSBmdWxsCi0v
LyBNZXNzYWdlIGludGVyZmFjZSwgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgbGluZSB0byB0aGUg
LnByb3RvIGZpbGU6Ci0vLwotLy8gICBvcHRpb24gb3B0aW1pemVfZm9yID0gTElURV9SVU5USU1F
OwotLy8KLS8vIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBvbiByZXNvdXJjZS1jb25zdHJh
aW5lZCBzeXN0ZW1zIHdoZXJlCi0vLyB0aGUgZnVsbCBwcm90b2NvbCBidWZmZXJzIHJ1bnRpbWUg
bGlicmFyeSBpcyB0b28gYmlnLgotLy8KLS8vIE5vdGUgdGhhdCBvbiBub24tY29uc3RyYWluZWQg
c3lzdGVtcyAoZS5nLiBzZXJ2ZXJzKSB3aGVuIHlvdSBuZWVkCi0vLyB0byBsaW5rIGluIGxvdHMg
b2YgcHJvdG9jb2wgZGVmaW5pdGlvbnMsIGEgYmV0dGVyIHdheSB0byByZWR1Y2UKLS8vIHRvdGFs
IGNvZGUgZm9vdHByaW50IGlzIHRvIHVzZSBvcHRpbWl6ZV9mb3IgPSBDT0RFX1NJWkUuICBUaGlz
Ci0vLyB3aWxsIG1ha2UgdGhlIGdlbmVyYXRlZCBjb2RlIHNtYWxsZXIgd2hpbGUgc3RpbGwgc3Vw
cG9ydGluZyBhbGwgdGhlCi0vLyBzYW1lIGZlYXR1cmVzIChhdCB0aGUgZXhwZW5zZSBvZiBzcGVl
ZCkuICBvcHRpbWl6ZV9mb3IgPSBMSVRFX1JVTlRJTUUKLS8vIGlzIGJlc3Qgd2hlbiB5b3Ugb25s
eSBoYXZlIGEgc21hbGwgbnVtYmVyIG9mIG1lc3NhZ2UgdHlwZXMgbGlua2VkCi0vLyBpbnRvIHlv
dXIgYmluYXJ5LCBpbiB3aGljaCBjYXNlIHRoZSBzaXplIG9mIHRoZSBwcm90b2NvbCBidWZmZXJz
Ci0vLyBydW50aW1lIGl0c2VsZiBpcyB0aGUgYmlnZ2VzdCBwcm9ibGVtLgotY2xhc3MgTElCUFJP
VE9CVUZfRVhQT1JUIE1lc3NhZ2VMaXRlIHsKLSBwdWJsaWM6Ci0gIGlubGluZSBNZXNzYWdlTGl0
ZSgpIHt9Ci0gIHZpcnR1YWwgfk1lc3NhZ2VMaXRlKCk7Ci0KLSAgLy8gQmFzaWMgT3BlcmF0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAv
LyBHZXQgdGhlIG5hbWUgb2YgdGhpcyBtZXNzYWdlIHR5cGUsIGUuZy4gImZvby5iYXIuQmF6UHJv
dG8iLgotICB2aXJ0dWFsIHN0cmluZyBHZXRUeXBlTmFtZSgpIGNvbnN0ID0gMDsKLQotICAvLyBD
b25zdHJ1Y3QgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHNhbWUgdHlwZS4gIE93bmVyc2hpcCBpcyBw
YXNzZWQgdG8gdGhlCi0gIC8vIGNhbGxlci4KLSAgdmlydHVhbCBNZXNzYWdlTGl0ZSogTmV3KCkg
Y29uc3QgPSAwOwotCi0gIC8vIENvbnN0cnVjdCBhIG5ldyBpbnN0YW5jZSBvbiB0aGUgYXJlbmEu
IE93bmVyc2hpcCBpcyBwYXNzZWQgdG8gdGhlIGNhbGxlcgotICAvLyBpZiBhcmVuYSBpcyBhIE5V
TEwuIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Lgot
ICB2aXJ0dWFsIE1lc3NhZ2VMaXRlKiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJl
bmEpIGNvbnN0OwotCi0gIC8vIEdldCB0aGUgYXJlbmEsIGlmIGFueSwgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgbWVzc2FnZS4gVmlydHVhbCBtZXRob2QKLSAgLy8gcmVxdWlyZWQgZm9yIGdlbmVyaWMg
b3BlcmF0aW9ucyBidXQgbW9zdCBhcmVuYS1yZWxhdGVkIG9wZXJhdGlvbnMgc2hvdWxkCi0gIC8v
IHVzZSB0aGUgR2V0QXJlbmFOb1ZpcnR1YWwoKSBnZW5lcmF0ZWQtY29kZSBtZXRob2QuIERlZmF1
bHQgaW1wbGVtZW50YXRpb24KLSAgLy8gdG8gcmVkdWNlIGNvZGUgc2l6ZSBieSBhdm9pZGluZyB0
aGUgbmVlZCBmb3IgcGVyLXR5cGUgaW1wbGVtZW50YXRpb25zIHdoZW4KLSAgLy8gdHlwZXMgZG8g
bm90IGltcGxlbWVudCBhcmVuYSBzdXBwb3J0LgotICB2aXJ0dWFsIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmEqIEdldEFyZW5hKCkgY29uc3QgeyByZXR1cm4gTlVMTDsgfQotCi0gIC8vIEdldCBh
IHBvaW50ZXIgdGhhdCBtYXkgYmUgZXF1YWwgdG8gdGhpcyBtZXNzYWdlJ3MgYXJlbmEsIG9yIG1h
eSBub3QgYmUuIElmCi0gIC8vIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBpcyBl
cXVhbCB0byBzb21lIGFyZW5hIHBvaW50ZXIsIHRoZW4gdGhpcwotICAvLyBtZXNzYWdlIGlzIG9u
IHRoYXQgYXJlbmE7IGhvd2V2ZXIsIGlmIHRoaXMgbWVzc2FnZSBpcyBvbiBzb21lIGFyZW5hLCB0
aGlzCi0gIC8vIG1ldGhvZCBtYXkgb3IgbWF5IG5vdCByZXR1cm4gdGhhdCBhcmVuYSdzIHBvaW50
ZXIuIEFzIGEgdHJhZGVvZmYsIHRoaXMKLSAgLy8gbWV0aG9kIG1heSBiZSBtb3JlIGVmZmljaWVu
dCB0aGFuIEdldEFyZW5hKCkuIFRoZSBpbnRlbnQgaXMgdG8gYWxsb3cKLSAgLy8gdW5kZXJseWlu
ZyByZXByZXNlbnRhdGlvbnMgdGhhdCB1c2UgZS5nLiB0YWdnZWQgcG9pbnRlcnMgdG8gc29tZXRp
bWVzIHN0b3JlCi0gIC8vIHRoZSBhcmVuYSBwb2ludGVyIGRpcmVjdGx5LCBhbmQgc29tZXRpbWVz
IGluIGEgbW9yZSBpbmRpcmVjdCB3YXksIGFuZCBhbGxvdwotICAvLyBhIGZhc3RwYXRoIGNvbXBh
cmlzb24gYWdhaW5zdCB0aGUgYXJlbmEgcG9pbnRlciB3aGVuIGl0J3MgZWFzeSB0byBvYnRhaW4u
Ci0gIHZpcnR1YWwgdm9pZCogR2V0TWF5YmVBcmVuYVBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBH
ZXRBcmVuYSgpOyB9Ci0KLSAgLy8gQ2xlYXIgYWxsIGZpZWxkcyBvZiB0aGUgbWVzc2FnZSBhbmQg
c2V0IHRoZW0gdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gIC8vIENsZWFyKCkgYXZvaWRzIGZy
ZWVpbmcgbWVtb3J5LCBhc3N1bWluZyB0aGF0IGFueSBtZW1vcnkgYWxsb2NhdGVkCi0gIC8vIHRv
IGhvbGQgcGFydHMgb2YgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBuZWVkZWQgYWdhaW4gdG8gaG9sZCB0
aGUgbmV4dAotICAvLyBtZXNzYWdlLiAgSWYgeW91IGFjdHVhbGx5IHdhbnQgdG8gZnJlZSB0aGUg
bWVtb3J5IHVzZWQgYnkgYSBNZXNzYWdlLAotICAvLyB5b3UgbXVzdCBkZWxldGUgaXQuCi0gIHZp
cnR1YWwgdm9pZCBDbGVhcigpID0gMDsKLQotICAvLyBRdWlja2x5IGNoZWNrIGlmIGFsbCByZXF1
aXJlZCBmaWVsZHMgaGF2ZSB2YWx1ZXMgc2V0LgotICB2aXJ0dWFsIGJvb2wgSXNJbml0aWFsaXpl
ZCgpIGNvbnN0ID0gMDsKLQotICAvLyBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgTGl0ZSBt
ZXNzYWdlcyAtLSBpdCBqdXN0IHJldHVybnMgIihjYW5ub3QKLSAgLy8gZGV0ZXJtaW5lIG1pc3Np
bmcgZmllbGRzIGZvciBsaXRlIG1lc3NhZ2UpIi4gIEhvd2V2ZXIsIGl0IGlzIGltcGxlbWVudGVk
Ci0gIC8vIGZvciBmdWxsIG1lc3NhZ2VzLiAgU2VlIG1lc3NhZ2UuaC4KLSAgdmlydHVhbCBzdHJp
bmcgSW5pdGlhbGl6YXRpb25FcnJvclN0cmluZygpIGNvbnN0OwotCi0gIC8vIElmIHxvdGhlcnwg
aXMgdGhlIGV4YWN0IHNhbWUgY2xhc3MgYXMgdGhpcywgY2FsbHMgTWVyZ2VGcm9tKCkuICBPdGhl
cndpc2UsCi0gIC8vIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCAocHJvYmFibHkgY3Jhc2gpLgotICB2
aXJ0dWFsIHZvaWQgQ2hlY2tUeXBlQW5kTWVyZ2VGcm9tKGNvbnN0IE1lc3NhZ2VMaXRlJiBvdGhl
cikgPSAwOwotCi0gIC8vIFBhcnNpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIE1ldGhvZHMgZm9yIHBhcnNpbmcgaW4gcHJv
dG9jb2wgYnVmZmVyIGZvcm1hdC4gIE1vc3Qgb2YgdGhlc2UgYXJlCi0gIC8vIGp1c3Qgc2ltcGxl
IHdyYXBwZXJzIGFyb3VuZCBNZXJnZUZyb21Db2RlZFN0cmVhbSgpLiAgQ2xlYXIoKSB3aWxsIGJl
IGNhbGxlZAotICAvLyBiZWZvcmUgbWVyZ2luZyB0aGUgaW5wdXQuCi0KLSAgLy8gRmlsbCB0aGUg
bWVzc2FnZSB3aXRoIGEgcHJvdG9jb2wgYnVmZmVyIHBhcnNlZCBmcm9tIHRoZSBnaXZlbiBpbnB1
dCBzdHJlYW0uCi0gIC8vIFJldHVybnMgZmFsc2Ugb24gYSByZWFkIGVycm9yIG9yIGlmIHRoZSBp
bnB1dCBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiAgQQotICAvLyBzdWNjZXNzZnVsIHJldHVybiBk
b2VzIG5vdCBpbmRpY2F0ZSB0aGUgZW50aXJlIGlucHV0IGlzIGNvbnN1bWVkLCBlbnN1cmUKLSAg
Ly8geW91IGNhbGwgQ29uc3VtZWRFbnRpcmVNZXNzYWdlKCkgdG8gY2hlY2sgdGhhdCBpZiBhcHBs
aWNhYmxlLgotICBib29sIFBhcnNlRnJvbUNvZGVkU3RyZWFtKGlvOjpDb2RlZElucHV0U3RyZWFt
KiBpbnB1dCk7Ci0gIC8vIExpa2UgUGFyc2VGcm9tQ29kZWRTdHJlYW0oKSwgYnV0IGFjY2VwdHMg
bWVzc2FnZXMgdGhhdCBhcmUgbWlzc2luZwotICAvLyByZXF1aXJlZCBmaWVsZHMuCi0gIGJvb2wg
UGFyc2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7
Ci0gIC8vIFJlYWQgYSBwcm90b2NvbCBidWZmZXIgZnJvbSB0aGUgZ2l2ZW4gemVyby1jb3B5IGlu
cHV0IHN0cmVhbS4gIElmCi0gIC8vIHN1Y2Nlc3NmdWwsIHRoZSBlbnRpcmUgaW5wdXQgd2lsbCBi
ZSBjb25zdW1lZC4KLSAgYm9vbCBQYXJzZUZyb21aZXJvQ29weVN0cmVhbShpbzo6WmVyb0NvcHlJ
bnB1dFN0cmVhbSogaW5wdXQpOwotICAvLyBMaWtlIFBhcnNlRnJvbVplcm9Db3B5U3RyZWFtKCks
IGJ1dCBhY2NlcHRzIG1lc3NhZ2VzIHRoYXQgYXJlIG1pc3NpbmcKLSAgLy8gcmVxdWlyZWQgZmll
bGRzLgotICBib29sIFBhcnNlUGFydGlhbEZyb21aZXJvQ29weVN0cmVhbShpbzo6WmVyb0NvcHlJ
bnB1dFN0cmVhbSogaW5wdXQpOwotICAvLyBSZWFkIGEgcHJvdG9jb2wgYnVmZmVyIGZyb20gdGhl
IGdpdmVuIHplcm8tY29weSBpbnB1dCBzdHJlYW0sIGV4cGVjdGluZwotICAvLyB0aGUgbWVzc2Fn
ZSB0byBiZSBleGFjdGx5ICJzaXplIiBieXRlcyBsb25nLiAgSWYgc3VjY2Vzc2Z1bCwgZXhhY3Rs
eQotICAvLyB0aGlzIG1hbnkgYnl0ZXMgd2lsbCBoYXZlIGJlZW4gY29uc3VtZWQgZnJvbSB0aGUg
aW5wdXQuCi0gIGJvb2wgUGFyc2VGcm9tQm91bmRlZFplcm9Db3B5U3RyZWFtKGlvOjpaZXJvQ29w
eUlucHV0U3RyZWFtKiBpbnB1dCwgaW50IHNpemUpOwotICAvLyBMaWtlIFBhcnNlRnJvbUJvdW5k
ZWRaZXJvQ29weVN0cmVhbSgpLCBidXQgYWNjZXB0cyBtZXNzYWdlcyB0aGF0IGFyZQotICAvLyBt
aXNzaW5nIHJlcXVpcmVkIGZpZWxkcy4KLSAgYm9vbCBQYXJzZVBhcnRpYWxGcm9tQm91bmRlZFpl
cm9Db3B5U3RyZWFtKGlvOjpaZXJvQ29weUlucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplKTsKLSAgLy8gUGFyc2Vz
IGEgcHJvdG9jb2wgYnVmZmVyIGNvbnRhaW5lZCBpbiBhIHN0cmluZy4gUmV0dXJucyB0cnVlIG9u
IHN1Y2Nlc3MuCi0gIC8vIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgaW4gdGhlIChub24t
aHVtYW4tcmVhZGFibGUpIGJpbmFyeSB3aXJlCi0gIC8vIGZvcm1hdCwgbWF0Y2hpbmcgdGhlIGVu
Y29kaW5nIG91dHB1dCBieSBNZXNzYWdlTGl0ZTo6U2VyaWFsaXplVG9TdHJpbmcoKS4KLSAgLy8g
SWYgeW91J2QgbGlrZSB0byBjb252ZXJ0IGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGludG8gYSBw
cm90b2NvbCBidWZmZXIKLSAgLy8gb2JqZWN0LCBzZWUgZ29vZ2xlOjpwcm90b2J1Zjo6VGV4dEZv
cm1hdDo6UGFyc2VGcm9tU3RyaW5nKCkuCi0gIGJvb2wgUGFyc2VGcm9tU3RyaW5nKGNvbnN0IHN0
cmluZyYgZGF0YSk7Ci0gIC8vIExpa2UgUGFyc2VGcm9tU3RyaW5nKCksIGJ1dCBhY2NlcHRzIG1l
c3NhZ2VzIHRoYXQgYXJlIG1pc3NpbmcKLSAgLy8gcmVxdWlyZWQgZmllbGRzLgotICBib29sIFBh
cnNlUGFydGlhbEZyb21TdHJpbmcoY29uc3Qgc3RyaW5nJiBkYXRhKTsKLSAgLy8gUGFyc2UgYSBw
cm90b2NvbCBidWZmZXIgY29udGFpbmVkIGluIGFuIGFycmF5IG9mIGJ5dGVzLgotICBib29sIFBh
cnNlRnJvbUFycmF5KGNvbnN0IHZvaWQqIGRhdGEsIGludCBzaXplKTsKLSAgLy8gTGlrZSBQYXJz
ZUZyb21BcnJheSgpLCBidXQgYWNjZXB0cyBtZXNzYWdlcyB0aGF0IGFyZSBtaXNzaW5nCi0gIC8v
IHJlcXVpcmVkIGZpZWxkcy4KLSAgYm9vbCBQYXJzZVBhcnRpYWxGcm9tQXJyYXkoY29uc3Qgdm9p
ZCogZGF0YSwgaW50IHNpemUpOwotCi0KLSAgLy8gUmVhZHMgYSBwcm90b2NvbCBidWZmZXIgZnJv
bSB0aGUgc3RyZWFtIGFuZCBtZXJnZXMgaXQgaW50byB0aGlzCi0gIC8vIE1lc3NhZ2UuICBTaW5n
dWxhciBmaWVsZHMgcmVhZCBmcm9tIHRoZSBpbnB1dCBvdmVyd3JpdGUgd2hhdCBpcwotICAvLyBh
bHJlYWR5IGluIHRoZSBNZXNzYWdlIGFuZCByZXBlYXRlZCBmaWVsZHMgYXJlIGFwcGVuZGVkIHRv
IHRob3NlCi0gIC8vIGFscmVhZHkgcHJlc2VudC4KLSAgLy8KLSAgLy8gSXQgaXMgdGhlIHJlc3Bv
bnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gY2FsbCBpbnB1dC0+TGFzdFRhZ1dhcygpCi0gIC8v
IChmb3IgZ3JvdXBzKSBvciBpbnB1dC0+Q29uc3VtZWRFbnRpcmVNZXNzYWdlKCkgKGZvciBub24t
Z3JvdXBzKSBhZnRlcgotICAvLyB0aGlzIHJldHVybnMgdG8gdmVyaWZ5IHRoYXQgdGhlIG1lc3Nh
Z2UncyBlbmQgd2FzIGRlbGltaXRlZCBjb3JyZWN0bHkuCi0gIC8vCi0gIC8vIFBhcnNlZnJvbUNv
ZGVkU3RyZWFtKCkgaXMgaW1wbGVtZW50ZWQgYXMgQ2xlYXIoKSBmb2xsb3dlZCBieQotICAvLyBN
ZXJnZUZyb21Db2RlZFN0cmVhbSgpLgotICBib29sIE1lcmdlRnJvbUNvZGVkU3RyZWFtKGlvOjpD
b2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0KLSAgLy8gTGlrZSBNZXJnZUZyb21Db2RlZFN0cmVh
bSgpLCBidXQgc3VjY2VlZHMgZXZlbiBpZiByZXF1aXJlZCBmaWVsZHMgYXJlCi0gIC8vIG1pc3Np
bmcgaW4gdGhlIGlucHV0LgotICAvLwotICAvLyBNZXJnZUZyb21Db2RlZFN0cmVhbSgpIGlzIGp1
c3QgaW1wbGVtZW50ZWQgYXMgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKCkKLSAgLy8gZm9s
bG93ZWQgYnkgSXNJbml0aWFsaXplZCgpLgotICB2aXJ0dWFsIGJvb2wgTWVyZ2VQYXJ0aWFsRnJv
bUNvZGVkU3RyZWFtKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgPSAwOwotCi0KLSAgLy8g
U2VyaWFsaXphdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgLy8gTWV0aG9kcyBmb3Igc2VyaWFsaXppbmcgaW4gcHJvdG9jb2wgYnVmZmVy
IGZvcm1hdC4gIE1vc3Qgb2YgdGhlc2UKLSAgLy8gYXJlIGp1c3Qgc2ltcGxlIHdyYXBwZXJzIGFy
b3VuZCBCeXRlU2l6ZSgpIGFuZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoKS4KLQotICAvLyBX
cml0ZSBhIHByb3RvY29sIGJ1ZmZlciBvZiB0aGlzIG1lc3NhZ2UgdG8gdGhlIGdpdmVuIG91dHB1
dC4gIFJldHVybnMKLSAgLy8gZmFsc2Ugb24gYSB3cml0ZSBlcnJvci4gIElmIHRoZSBtZXNzYWdl
IGlzIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLAotICAvLyB0aGlzIG1heSBHT09HTEVfQ0hFQ0st
ZmFpbC4KLSAgYm9vbCBTZXJpYWxpemVUb0NvZGVkU3RyZWFtKGlvOjpDb2RlZE91dHB1dFN0cmVh
bSogb3V0cHV0KSBjb25zdDsKLSAgLy8gTGlrZSBTZXJpYWxpemVUb0NvZGVkU3RyZWFtKCksIGJ1
dCBhbGxvd3MgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuCi0gIGJvb2wgU2VyaWFsaXplUGFydGlh
bFRvQ29kZWRTdHJlYW0oaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICAv
LyBXcml0ZSB0aGUgbWVzc2FnZSB0byB0aGUgZ2l2ZW4gemVyby1jb3B5IG91dHB1dCBzdHJlYW0u
ICBBbGwgcmVxdWlyZWQKLSAgLy8gZmllbGRzIG11c3QgYmUgc2V0LgotICBib29sIFNlcmlhbGl6
ZVRvWmVyb0NvcHlTdHJlYW0oaW86Olplcm9Db3B5T3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0
OwotICAvLyBMaWtlIFNlcmlhbGl6ZVRvWmVyb0NvcHlTdHJlYW0oKSwgYnV0IGFsbG93cyBtaXNz
aW5nIHJlcXVpcmVkIGZpZWxkcy4KLSAgYm9vbCBTZXJpYWxpemVQYXJ0aWFsVG9aZXJvQ29weVN0
cmVhbShpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIC8vIFNlcmlh
bGl6ZSB0aGUgbWVzc2FnZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGdpdmVuIHN0cmluZy4gIEFsbCBy
ZXF1aXJlZAotICAvLyBmaWVsZHMgbXVzdCBiZSBzZXQuCi0gIGJvb2wgU2VyaWFsaXplVG9TdHJp
bmcoc3RyaW5nKiBvdXRwdXQpIGNvbnN0OwotICAvLyBMaWtlIFNlcmlhbGl6ZVRvU3RyaW5nKCks
IGJ1dCBhbGxvd3MgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuCi0gIGJvb2wgU2VyaWFsaXplUGFy
dGlhbFRvU3RyaW5nKHN0cmluZyogb3V0cHV0KSBjb25zdDsKLSAgLy8gU2VyaWFsaXplIHRoZSBt
ZXNzYWdlIGFuZCBzdG9yZSBpdCBpbiB0aGUgZ2l2ZW4gYnl0ZSBhcnJheS4gIEFsbCByZXF1aXJl
ZAotICAvLyBmaWVsZHMgbXVzdCBiZSBzZXQuCi0gIGJvb2wgU2VyaWFsaXplVG9BcnJheSh2b2lk
KiBkYXRhLCBpbnQgc2l6ZSkgY29uc3Q7Ci0gIC8vIExpa2UgU2VyaWFsaXplVG9BcnJheSgpLCBi
dXQgYWxsb3dzIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLgotICBib29sIFNlcmlhbGl6ZVBhcnRp
YWxUb0FycmF5KHZvaWQqIGRhdGEsIGludCBzaXplKSBjb25zdDsKLQotICAvLyBNYWtlIGEgc3Ry
aW5nIGVuY29kaW5nIHRoZSBtZXNzYWdlLiBJcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgLy8g
U2VyaWFsaXplVG9TdHJpbmcoKSBvbiBhIHN0cmluZyBhbmQgdXNpbmcgdGhhdC4gIFJldHVybnMg
dGhlIGVtcHR5Ci0gIC8vIHN0cmluZyBpZiBTZXJpYWxpemVUb1N0cmluZygpIHdvdWxkIGhhdmUg
cmV0dXJuZWQgYW4gZXJyb3IuCi0gIC8vIE5vdGU6IElmIHlvdSBpbnRlbmQgdG8gZ2VuZXJhdGUg
bWFueSBzdWNoIHN0cmluZ3MsIHlvdSBtYXkKLSAgLy8gcmVkdWNlIGhlYXAgZnJhZ21lbnRhdGlv
biBieSBpbnN0ZWFkIHJlLXVzaW5nIHRoZSBzYW1lIHN0cmluZwotICAvLyBvYmplY3Qgd2l0aCBj
YWxscyB0byBTZXJpYWxpemVUb1N0cmluZygpLgotICBzdHJpbmcgU2VyaWFsaXplQXNTdHJpbmco
KSBjb25zdDsKLSAgLy8gTGlrZSBTZXJpYWxpemVBc1N0cmluZygpLCBidXQgYWxsb3dzIG1pc3Np
bmcgcmVxdWlyZWQgZmllbGRzLgotICBzdHJpbmcgU2VyaWFsaXplUGFydGlhbEFzU3RyaW5nKCkg
Y29uc3Q7Ci0KLSAgLy8gTGlrZSBTZXJpYWxpemVUb1N0cmluZygpLCBidXQgYXBwZW5kcyB0byB0
aGUgZGF0YSB0byB0aGUgc3RyaW5nJ3MgZXhpc3RpbmcKLSAgLy8gY29udGVudHMuICBBbGwgcmVx
dWlyZWQgZmllbGRzIG11c3QgYmUgc2V0LgotICBib29sIEFwcGVuZFRvU3RyaW5nKHN0cmluZyog
b3V0cHV0KSBjb25zdDsKLSAgLy8gTGlrZSBBcHBlbmRUb1N0cmluZygpLCBidXQgYWxsb3dzIG1p
c3NpbmcgcmVxdWlyZWQgZmllbGRzLgotICBib29sIEFwcGVuZFBhcnRpYWxUb1N0cmluZyhzdHJp
bmcqIG91dHB1dCkgY29uc3Q7Ci0KLSAgLy8gQ29tcHV0ZXMgdGhlIHNlcmlhbGl6ZWQgc2l6ZSBv
ZiB0aGUgbWVzc2FnZS4gIFRoaXMgcmVjdXJzaXZlbHkgY2FsbHMKLSAgLy8gQnl0ZVNpemUoKSBv
biBhbGwgZW1iZWRkZWQgbWVzc2FnZXMuICBJZiBhIHN1YmNsYXNzIGRvZXMgbm90IG92ZXJyaWRl
Ci0gIC8vIHRoaXMsIGl0IE1VU1Qgb3ZlcnJpZGUgU2V0Q2FjaGVkU2l6ZSgpLgotICAvLwotICAv
LyBCeXRlU2l6ZSgpIGlzIGdlbmVyYWxseSBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiBmaWVsZHMg
ZGVmaW5lZCBmb3IgdGhlCi0gIC8vIHByb3RvLgotICB2aXJ0dWFsIGludCBCeXRlU2l6ZSgpIGNv
bnN0ID0gMDsKLQotICAvLyBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIHdpdGhvdXQgcmVjb21wdXRp
bmcgdGhlIHNpemUuICBUaGUgbWVzc2FnZSBtdXN0Ci0gIC8vIG5vdCBoYXZlIGNoYW5nZWQgc2lu
Y2UgdGhlIGxhc3QgY2FsbCB0byBCeXRlU2l6ZSgpOyBpZiBpdCBoYXMsIHRoZSByZXN1bHRzCi0g
IC8vIGFyZSB1bmRlZmluZWQuCi0gIHZpcnR1YWwgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6
ZXMoCi0gICAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgPSAwOwotCi0g
IC8vIExpa2UgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzLCBidXQgd3JpdGVzIGRpcmVjdGx5IHRv
ICp0YXJnZXQsIHJldHVybmluZwotICAvLyBhIHBvaW50ZXIgdG8gdGhlIGJ5dGUgaW1tZWRpYXRl
bHkgYWZ0ZXIgdGhlIGxhc3QgYnl0ZSB3cml0dGVuLiAgInRhcmdldCIKLSAgLy8gbXVzdCBwb2lu
dCBhdCBhIGJ5dGUgYXJyYXkgb2YgYXQgbGVhc3QgQnl0ZVNpemUoKSBieXRlcy4KLSAgdmlydHVh
bCB1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSh1aW50OCogdGFyZ2V0KSBj
b25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgY2FsbCB0byBCeXRl
U2l6ZSgpLiAgQW4gZW1iZWRkZWQgbWVzc2FnZSdzCi0gIC8vIHNpemUgaXMgbmVlZGVkIGJvdGgg
dG8gc2VyaWFsaXplIGl0IChiZWNhdXNlIGVtYmVkZGVkIG1lc3NhZ2VzIGFyZQotICAvLyBsZW5n
dGgtZGVsaW1pdGVkKSBhbmQgdG8gY29tcHV0ZSB0aGUgb3V0ZXIgbWVzc2FnZSdzIHNpemUuICBD
YWNoaW5nCi0gIC8vIHRoZSBzaXplIGF2b2lkcyBjb21wdXRpbmcgaXQgbXVsdGlwbGUgdGltZXMu
Ci0gIC8vCi0gIC8vIEJ5dGVTaXplKCkgZG9lcyBub3QgYXV0b21hdGljYWxseSB1c2UgdGhlIGNh
Y2hlZCBzaXplIHdoZW4gYXZhaWxhYmxlCi0gIC8vIGJlY2F1c2UgdGhpcyB3b3VsZCByZXF1aXJl
IGludmFsaWRhdGluZyBpdCBldmVyeSB0aW1lIHRoZSBtZXNzYWdlIHdhcwotICAvLyBtb2RpZmll
ZCwgd2hpY2ggd291bGQgYmUgdG9vIGhhcmQgYW5kIGV4cGVuc2l2ZS4gIChFLmcuIGlmIGEgZGVl
cGx5LW5lc3RlZAotICAvLyBzdWItbWVzc2FnZSBpcyBjaGFuZ2VkLCBhbGwgb2YgaXRzIHBhcmVu
dHMnIGNhY2hlZCBzaXplcyB3b3VsZCBuZWVkIHRvIGJlCi0gIC8vIGludmFsaWRhdGVkLCB3aGlj
aCBpcyB0b28gbXVjaCB3b3JrIGZvciBhbiBvdGhlcndpc2UgaW5saW5lZCBzZXR0ZXIKLSAgLy8g
bWV0aG9kLikKLSAgdmlydHVhbCBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0ID0gMDsKLQotIHBy
aXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhNZXNzYWdlTGl0ZSk7
Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2ds
ZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfTUVTU0FHRV9MSVRFX0hfXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2VfdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvbWVzc2FnZV91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDY2OGExYTZiYjYyZTc2ZDM3MjUwMmM4YzY5M2ZjYWI0OGViZGJjNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvbWVzc2Fn
ZV91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ3MSArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAo
S2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVz
aWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2lmZGVmIF9N
U0NfVkVSCi0jaW5jbHVkZSA8aW8uaD4KLSNlbHNlCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5k
aWYKLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPGZzdHJlYW0+Ci0KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvdGVzdF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Vu
aXR0ZXN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGwuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dl
bmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1v
bi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQot
I2lmbmRlZiBPX0JJTkFSWQotI2lmZGVmIF9PX0JJTkFSWQotI2RlZmluZSBPX0JJTkFSWSBfT19C
SU5BUlkKLSNlbHNlCi0jZGVmaW5lIE9fQklOQVJZIDAgICAgIC8vIElmIHRoaXMgaXNuJ3QgZGVm
aW5lZCwgdGhlIHBsYXRmb3JtIGRvZXNuJ3QgbmVlZCBpdC4KLSNlbmRpZgotI2VuZGlmCi0KLVRF
U1QoTWVzc2FnZVRlc3QsIFNlcmlhbGl6ZUhlbHBlcnMpIHsKLSAgLy8gVE9ETyhrZW50b24pOiAg
VGVzdCBtb3JlIGhlbHBlcnM/ICBUaGV5J3JlIGFsbCB0d28tbGluZXJzIHNvIGl0IHNlZW1zCi0g
IC8vICAgbGlrZSBhIHdhc3RlIG9mIHRpbWUuCi0KLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RB
bGxUeXBlcyBtZXNzYWdlOwotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtZXNzYWdlKTsKLSAg
c3RyaW5nc3RyZWFtIHN0cmVhbTsKLQotICBzdHJpbmcgc3RyMSgiZm9vIik7Ci0gIHN0cmluZyBz
dHIyKCJiYXIiKTsKLQotICBFWFBFQ1RfVFJVRShtZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCZz
dHIxKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuQXBwZW5kVG9TdHJpbmcoJnN0cjIpKTsKLSAg
RVhQRUNUX1RSVUUobWVzc2FnZS5TZXJpYWxpemVUb09zdHJlYW0oJnN0cmVhbSkpOwotCi0gIEVY
UEVDVF9FUShzdHIxLnNpemUoKSArIDMsIHN0cjIuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKCJiYXIi
LCBzdHIyLnN1YnN0cigwLCAzKSk7Ci0gIC8vIERvbid0IHVzZSBFWFBFQ1RfRVEgYmVjYXVzZSB3
ZSBkb24ndCB3YW50IHRvIGR1bXAgcmF3IGJpbmFyeSBkYXRhIHRvCi0gIC8vIHN0ZG91dC4KLSAg
RVhQRUNUX1RSVUUoc3RyMi5zdWJzdHIoMykgPT0gc3RyMSk7Ci0KLSAgLy8gR0NDIGdpdmVzIHNv
bWUgc29ydCBvZiBlcnJvciBpZiB3ZSB0cnkgdG8ganVzdCBkbyBzdHJlYW0uc3RyKCkgPT0gc3Ry
MS4KLSAgc3RyaW5nIHRlbXAgPSBzdHJlYW0uc3RyKCk7Ci0gIEVYUEVDVF9UUlVFKHRlbXAgPT0g
c3RyMSk7Ci0KLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5TZXJpYWxpemVBc1N0cmluZygpID09IHN0
cjEpOwotCi19Ci0KLVRFU1QoTWVzc2FnZVRlc3QsIFNlcmlhbGl6ZVRvQnJva2VuT3N0cmVhbSkg
ewotICBvZnN0cmVhbSBvdXQ7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVz
c2FnZTsKLSAgbWVzc2FnZS5zZXRfb3B0aW9uYWxfaW50MzIoMTIzKTsKLQotICBFWFBFQ1RfRkFM
U0UobWVzc2FnZS5TZXJpYWxpemVUb09zdHJlYW0oJm91dCkpOwotfQotCi1URVNUKE1lc3NhZ2VU
ZXN0LCBQYXJzZUZyb21GaWxlRGVzY3JpcHRvcikgewotICBzdHJpbmcgZmlsZW5hbWUgPSBUZXN0
U291cmNlRGlyKCkgKwotICAgICAgICAgICAgICAgICAgICAiL2dvb2dsZS9wcm90b2J1Zi90ZXN0
ZGF0YS9nb2xkZW5fbWVzc2FnZSI7Ci0gIGludCBmaWxlID0gb3BlbihmaWxlbmFtZS5jX3N0cigp
LCBPX1JET05MWSB8IE9fQklOQVJZKTsKLQotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3Nh
Z2U7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuUGFyc2VGcm9tRmlsZURlc2NyaXB0b3IoZmlsZSkp
OwotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KG1lc3NhZ2UpOwotCi0gIEVYUEVDVF9H
RShjbG9zZShmaWxlKSwgMCk7Ci19Ci0KLVRFU1QoTWVzc2FnZVRlc3QsIFBhcnNlUGFja2VkRnJv
bUZpbGVEZXNjcmlwdG9yKSB7Ci0gIHN0cmluZyBmaWxlbmFtZSA9Ci0gICAgICBUZXN0U291cmNl
RGlyKCkgKwotICAgICAgIi9nb29nbGUvcHJvdG9idWYvdGVzdGRhdGEvZ29sZGVuX3BhY2tlZF9m
aWVsZHNfbWVzc2FnZSI7Ci0gIGludCBmaWxlID0gb3BlbihmaWxlbmFtZS5jX3N0cigpLCBPX1JE
T05MWSB8IE9fQklOQVJZKTsKLQotICB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzIG1lc3NhZ2U7
Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuUGFyc2VGcm9tRmlsZURlc2NyaXB0b3IoZmlsZSkpOwot
ICBUZXN0VXRpbDo6RXhwZWN0UGFja2VkRmllbGRzU2V0KG1lc3NhZ2UpOwotCi0gIEVYUEVDVF9H
RShjbG9zZShmaWxlKSwgMCk7Ci19Ci0KLVRFU1QoTWVzc2FnZVRlc3QsIFBhcnNlSGVscGVycykg
ewotICAvLyBUT0RPKGtlbnRvbik6ICBUZXN0IG1vcmUgaGVscGVycz8gIFRoZXkncmUgYWxsIHR3
by1saW5lcnMgc28gaXQgc2VlbXMKLSAgLy8gICBsaWtlIGEgd2FzdGUgb2YgdGltZS4KLSAgc3Ry
aW5nIGRhdGE7Ci0KLSAgewotICAgIC8vIFNldCB1cC4KLSAgICBwcm90b2J1Zl91bml0dGVzdDo6
VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gICAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbWVzc2Fn
ZSk7Ci0gICAgbWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygmZGF0YSk7Ci0gIH0KLQotICB7Ci0g
ICAgLy8gVGVzdCBQYXJzZUZyb21TdHJpbmcuCi0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RB
bGxUeXBlcyBtZXNzYWdlOwotICAgIEVYUEVDVF9UUlVFKG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5n
KGRhdGEpKTsKLSAgICBUZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KG1lc3NhZ2UpOwotICB9
Ci0KLSAgewotICAgIC8vIFRlc3QgUGFyc2VGcm9tSXN0cmVhbS4KLSAgICBwcm90b2J1Zl91bml0
dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gICAgc3RyaW5nc3RyZWFtIHN0cmVhbShkYXRh
KTsKLSAgICBFWFBFQ1RfVFJVRShtZXNzYWdlLlBhcnNlRnJvbUlzdHJlYW0oJnN0cmVhbSkpOwot
ICAgIEVYUEVDVF9UUlVFKHN0cmVhbS5lb2YoKSk7Ci0gICAgVGVzdFV0aWw6OkV4cGVjdEFsbEZp
ZWxkc1NldChtZXNzYWdlKTsKLSAgfQotCi0gIHsKLSAgICAvLyBUZXN0IFBhcnNlRnJvbUJvdW5k
ZWRaZXJvQ29weVN0cmVhbS4KLSAgICBzdHJpbmcgZGF0YV93aXRoX2p1bmsoZGF0YSk7Ci0gICAg
ZGF0YV93aXRoX2p1bmsuYXBwZW5kKCJzb21lIGp1bmsgb24gdGhlIGVuZCIpOwotICAgIGlvOjpB
cnJheUlucHV0U3RyZWFtIHN0cmVhbShkYXRhX3dpdGhfanVuay5kYXRhKCksIGRhdGFfd2l0aF9q
dW5rLnNpemUoKSk7Ci0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdl
OwotICAgIEVYUEVDVF9UUlVFKG1lc3NhZ2UuUGFyc2VGcm9tQm91bmRlZFplcm9Db3B5U3RyZWFt
KCZzdHJlYW0sIGRhdGEuc2l6ZSgpKSk7Ci0gICAgVGVzdFV0aWw6OkV4cGVjdEFsbEZpZWxkc1Nl
dChtZXNzYWdlKTsKLSAgfQotCi0gIHsKLSAgICAvLyBUZXN0IHRoYXQgUGFyc2VGcm9tQm91bmRl
ZFplcm9Db3B5U3RyZWFtIGZhaWxzIChidXQgZG9lc24ndCBjcmFzaCkgaWYKLSAgICAvLyBFT0Yg
aXMgcmVhY2hlZCBiZWZvcmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBieXRlcy4KLSAgICBpbzo6
QXJyYXlJbnB1dFN0cmVhbSBzdHJlYW0oZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgICBw
cm90b2J1Zl91bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gICAgRVhQRUNUX0ZBTFNF
KAotICAgICAgbWVzc2FnZS5QYXJzZUZyb21Cb3VuZGVkWmVyb0NvcHlTdHJlYW0oJnN0cmVhbSwg
ZGF0YS5zaXplKCkgKyAxKSk7Ci0gIH0KLX0KLQotVEVTVChNZXNzYWdlVGVzdCwgUGFyc2VGYWls
c0lmTm90SW5pdGlhbGl6ZWQpIHsKLSAgdW5pdHRlc3Q6OlRlc3RSZXF1aXJlZCBtZXNzYWdlOwot
ICB2ZWN0b3I8c3RyaW5nPiBlcnJvcnM7Ci0KLSAgewotICAgIFNjb3BlZE1lbW9yeUxvZyBsb2c7
Ci0gICAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKCIiKSk7Ci0gICAgZXJy
b3JzID0gbG9nLkdldE1lc3NhZ2VzKEVSUk9SKTsKLSAgfQotCi0gIEFTU0VSVF9FUSgxLCBlcnJv
cnMuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKCJDYW4ndCBwYXJzZSBtZXNzYWdlIG9mIHR5cGUgXCJw
cm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWRcIiAiCi0gICAgICAgICAgICAiYmVjYXVzZSBp
dCBpcyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogYSwgYiwgYyIsCi0gICAgICAgICAgICBlcnJv
cnNbMF0pOwotfQotCi1URVNUKE1lc3NhZ2VUZXN0LCBCeXBhc3NJbml0aWFsaXphdGlvbkNoZWNr
T25QYXJzZSkgewotICB1bml0dGVzdDo6VGVzdFJlcXVpcmVkIG1lc3NhZ2U7Ci0gIGlvOjpBcnJh
eUlucHV0U3RyZWFtIHJhd19pbnB1dChOVUxMLCAwKTsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0g
aW5wdXQoJnJhd19pbnB1dCk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuTWVyZ2VQYXJ0aWFsRnJv
bUNvZGVkU3RyZWFtKCZpbnB1dCkpOwotfQotCi1URVNUKE1lc3NhZ2VUZXN0LCBJbml0aWFsaXph
dGlvbkVycm9yU3RyaW5nKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQgbWVzc2FnZTsKLSAg
RVhQRUNUX0VRKCJhLCBiLCBjIiwgbWVzc2FnZS5Jbml0aWFsaXphdGlvbkVycm9yU3RyaW5nKCkp
OwotfQotCi1URVNUKE1lc3NhZ2VUZXN0LCBEeW5hbWljQ2FzdFRvR2VuZXJhdGVkKSB7Ci0gIHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXMgdGVzdF9hbGxfdHlwZXM7Ci0KLSAgZ29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZSogdGVzdF9hbGxfdHlwZXNfcG9pbnRlciA9ICZ0ZXN0X2FsbF90eXBlczsKLSAg
RVhQRUNUX0VRKCZ0ZXN0X2FsbF90eXBlcywKLSAgICAgICAgICAgIGdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM+
KAotICAgICAgICAgICAgICAgIHRlc3RfYWxsX3R5cGVzX3BvaW50ZXIpKTsKLSAgRVhQRUNUX0VR
KE5VTEwsCi0gICAgICAgICAgICBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nh
c3RUb0dlbmVyYXRlZDx1bml0dGVzdDo6VGVzdFJlcXVpcmVkPigKLSAgICAgICAgICAgICAgICB0
ZXN0X2FsbF90eXBlc19wb2ludGVyKSk7Ci0KLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSogdGVzdF9hbGxfdHlwZXNfcG9pbnRlcl9jb25zdCA9ICZ0ZXN0X2FsbF90eXBlczsKLSAg
RVhQRUNUX0VRKAotICAgICAgJnRlc3RfYWxsX3R5cGVzLAotICAgICAgZ29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgdW5pdHRlc3Q6OlRlc3RB
bGxUeXBlcz4oCi0gICAgICAgICAgdGVzdF9hbGxfdHlwZXNfcG9pbnRlcl9jb25zdCkpOwotICBF
WFBFQ1RfRVEoCi0gICAgICBOVUxMLAotICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgdW5pdHRlc3Q6OlRlc3RSZXF1aXJlZD4oCi0g
ICAgICAgICAgdGVzdF9hbGxfdHlwZXNfcG9pbnRlcl9jb25zdCkpOwotfQotCi0jaWZkZWYgUFJP
VE9CVUZfSEFTX0RFQVRIX1RFU1QgIC8vIGRlYXRoIHRlc3RzIGRvIG5vdCB3b3JrIG9uIFdpbmRv
d3MgeWV0LgotCi1URVNUKE1lc3NhZ2VUZXN0LCBTZXJpYWxpemVGYWlsc0lmTm90SW5pdGlhbGl6
ZWQpIHsKLSAgdW5pdHRlc3Q6OlRlc3RSZXF1aXJlZCBtZXNzYWdlOwotICBzdHJpbmcgZGF0YTsK
LSAgRVhQRUNUX0RFQlVHX0RFQVRIKEVYUEVDVF9UUlVFKG1lc3NhZ2UuU2VyaWFsaXplVG9TdHJp
bmcoJmRhdGEpKSwKLSAgICAiQ2FuJ3Qgc2VyaWFsaXplIG1lc3NhZ2Ugb2YgdHlwZSBcInByb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RSZXF1aXJlZFwiIGJlY2F1c2UgIgotICAgICJpdCBpcyBtaXNzaW5n
IHJlcXVpcmVkIGZpZWxkczogYSwgYiwgYyIpOwotfQotCi1URVNUKE1lc3NhZ2VUZXN0LCBDaGVj
a0luaXRpYWxpemVkKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQgbWVzc2FnZTsKLSAgRVhQ
RUNUX0RFQVRIKG1lc3NhZ2UuQ2hlY2tJbml0aWFsaXplZCgpLAotICAgICJNZXNzYWdlIG9mIHR5
cGUgXCJwcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWRcIiBpcyBtaXNzaW5nIHJlcXVpcmVk
ICIKLSAgICAiZmllbGRzOiBhLCBiLCBjIik7Ci19Ci0KLVRFU1QoTWVzc2FnZVRlc3QsIENoZWNr
T3ZlcmZsb3cpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotICAvLyBDcmVh
dGUgYSBtZXNzYWdlIHdpdGggc2l6ZSBqdXN0IG92ZXIgMkdCLiBUaGlzIHRyaWdnZXJzIGludGVn
ZXIgb3ZlcmZsb3cKLSAgLy8gd2hlbiBjb21wdXRpbmcgbWVzc2FnZSBzaXplLgotICBjb25zdCBz
dHJpbmcgZGF0YSgxMDI0LCAneCcpOwotICBDb3JkIG9uZV9tZWdhYnl0ZTsKLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCAxMDI0OyBpKyspIHsKLSAgICBvbmVfbWVnYWJ5dGUuQXBwZW5kKGRhdGEpOwot
ICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAyICogMTAyNCArIDE7ICsraSkgewotICAgIG1l
c3NhZ2UuYWRkX3JlcGVhdGVkX2NvcmQoKS0+Q29weUZyb20ob25lX21lZ2FieXRlKTsKLSAgfQot
Ci0gIENvcmQgc2VyaWFsaXplZDsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuQXBwZW5kVG9Db3Jk
KCZzZXJpYWxpemVkKSk7Ci19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QK
LQotbmFtZXNwYWNlIHsKLQotY2xhc3MgTmVnYXRpdmVCeXRlU2l6ZSA6IHB1YmxpYyB1bml0dGVz
dDo6VGVzdFJlcXVpcmVkIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgaW50IEJ5dGVTaXplKCkgY29u
c3QgeyByZXR1cm4gLTE7IH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1URVNUKE1lc3NhZ2VU
ZXN0LCBTZXJpYWxpemF0aW9uRmFpbHNPbk5lZ2F0aXZlQnl0ZVNpemUpIHsKLSAgTmVnYXRpdmVC
eXRlU2l6ZSBtZXNzYWdlOwotICBzdHJpbmcgc3RyaW5nX291dHB1dDsKLSAgRVhQRUNUX0ZBTFNF
KG1lc3NhZ2UuQXBwZW5kUGFydGlhbFRvU3RyaW5nKCZzdHJpbmdfb3V0cHV0KSk7Ci0KLSAgaW86
OkFycmF5T3V0cHV0U3RyZWFtIGNvZGVkX3Jhd19vdXRwdXQoTlVMTCwgMTAwKTsKLSAgaW86OkNv
ZGVkT3V0cHV0U3RyZWFtIGNvZGVkX291dHB1dCgmY29kZWRfcmF3X291dHB1dCk7Ci0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLlNlcmlhbGl6ZVBhcnRpYWxUb0NvZGVkU3RyZWFtKCZjb2RlZF9vdXRw
dXQpKTsKLX0KLQotVEVTVChNZXNzYWdlVGVzdCwgQnlwYXNzSW5pdGlhbGl6YXRpb25DaGVja09u
U2VyaWFsaXplKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQgbWVzc2FnZTsKLSAgaW86OkFy
cmF5T3V0cHV0U3RyZWFtIHJhd19vdXRwdXQoTlVMTCwgMCk7Ci0gIGlvOjpDb2RlZE91dHB1dFN0
cmVhbSBvdXRwdXQoJnJhd19vdXRwdXQpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLlNlcmlhbGl6
ZVBhcnRpYWxUb0NvZGVkU3RyZWFtKCZvdXRwdXQpKTsKLX0KLQotVEVTVChNZXNzYWdlVGVzdCwg
RmluZEluaXRpYWxpemF0aW9uRXJyb3JzKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQgbWVz
c2FnZTsKLSAgdmVjdG9yPHN0cmluZz4gZXJyb3JzOwotICBtZXNzYWdlLkZpbmRJbml0aWFsaXph
dGlvbkVycm9ycygmZXJyb3JzKTsKLSAgQVNTRVJUX0VRKDMsIGVycm9ycy5zaXplKCkpOwotICBF
WFBFQ1RfRVEoImEiLCBlcnJvcnNbMF0pOwotICBFWFBFQ1RfRVEoImIiLCBlcnJvcnNbMV0pOwot
ICBFWFBFQ1RfRVEoImMiLCBlcnJvcnNbMl0pOwotfQotCi1URVNUKE1lc3NhZ2VUZXN0LCBQYXJz
ZUZhaWxzT25JbnZhbGlkTWVzc2FnZUVuZCkgewotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1l
c3NhZ2U7Ci0KLSAgLy8gQ29udHJvbCBjYXNlLgotICBFWFBFQ1RfVFJVRShtZXNzYWdlLlBhcnNl
RnJvbUFycmF5KCIiLCAwKSk7Ci0KLSAgLy8gVGhlIGJ5dGUgaXMgYSB2YWxpZCB2YXJpbnQsIGJ1
dCBub3QgYSB2YWxpZCB0YWcgKHplcm8pLgotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5QYXJzZUZy
b21BcnJheSgiXDAiLCAxKSk7Ci0KLSAgLy8gVGhlIGJ5dGUgaXMgYSBtYWxmb3JtZWQgdmFyaW50
LgotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5QYXJzZUZyb21BcnJheSgiXDIwMCIsIDEpKTsKLQot
ICAvLyBUaGUgYnl0ZSBpcyBhbiBlbmRncm91cCB0YWcsIGJ1dCB3ZSBhcmVuJ3QgcGFyc2luZyBh
IGdyb3VwLgotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5QYXJzZUZyb21BcnJheSgiXDAxNCIsIDEp
KTsKLX0KLQotbmFtZXNwYWNlIHsKLQotdm9pZCBFeHBlY3RNZXNzYWdlTWVyZ2VkKGNvbnN0IHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXMmIG1lc3NhZ2UpIHsKLSAgRVhQRUNUX0VRKDMsIG1lc3NhZ2Uu
b3B0aW9uYWxfaW50MzIoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlLm9wdGlvbmFsX2ludDY0
KCkpOwotICBFWFBFQ1RfRVEoImhlbGxvIiwgbWVzc2FnZS5vcHRpb25hbF9zdHJpbmcoKSk7Ci19
Ci0KLXZvaWQgQXNzaWduUGFyc2luZ01lcmdlTWVzc2FnZXMoCi0gICAgdW5pdHRlc3Q6OlRlc3RB
bGxUeXBlcyogbXNnMSwKLSAgICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzKiBtc2cyLAotICAgIHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXMqIG1zZzMpIHsKLSAgbXNnMS0+c2V0X29wdGlvbmFsX2ludDMy
KDEpOwotICBtc2cyLT5zZXRfb3B0aW9uYWxfaW50NjQoMik7Ci0gIG1zZzMtPnNldF9vcHRpb25h
bF9pbnQzMigzKTsKLSAgbXNnMy0+c2V0X29wdGlvbmFsX3N0cmluZygiaGVsbG8iKTsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlCi0KLS8vIFRlc3QgdGhhdCBpZiBhbiBvcHRpb25hbCBvciByZXF1aXJl
ZCBtZXNzYWdlL2dyb3VwIGZpZWxkIGFwcGVhcnMgbXVsdGlwbGUKLS8vIHRpbWVzIGluIHRoZSBp
bnB1dCwgdGhleSBuZWVkIHRvIGJlIG1lcmdlZC4KLVRFU1QoTWVzc2FnZVRlc3QsIFBhcnNpbmdN
ZXJnZSkgewotICB1bml0dGVzdDo6VGVzdFBhcnNpbmdNZXJnZTo6UmVwZWF0ZWRGaWVsZHNHZW5l
cmF0b3IgZ2VuZXJhdG9yOwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzKiBtc2cxOwotICB1bml0
dGVzdDo6VGVzdEFsbFR5cGVzKiBtc2cyOwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzKiBtc2cz
OwotCi0jZGVmaW5lIEFTU0lHTl9SRVBFQVRFRF9GSUVMRChGSUVMRCkgICAgICAgICAgICAgICAg
XAotICBtc2cxID0gZ2VuZXJhdG9yLmFkZF8jI0ZJRUxEKCk7ICAgICAgICAgICAgICAgICAgIFwK
LSAgbXNnMiA9IGdlbmVyYXRvci5hZGRfIyNGSUVMRCgpOyAgICAgICAgICAgICAgICAgICBcCi0g
IG1zZzMgPSBnZW5lcmF0b3IuYWRkXyMjRklFTEQoKTsgICAgICAgICAgICAgICAgICAgXAotICBB
c3NpZ25QYXJzaW5nTWVyZ2VNZXNzYWdlcyhtc2cxLCBtc2cyLCBtc2czKQotCi0gIEFTU0lHTl9S
RVBFQVRFRF9GSUVMRChmaWVsZDEpOwotICBBU1NJR05fUkVQRUFURURfRklFTEQoZmllbGQyKTsK
LSAgQVNTSUdOX1JFUEVBVEVEX0ZJRUxEKGZpZWxkMyk7Ci0gIEFTU0lHTl9SRVBFQVRFRF9GSUVM
RChleHQxKTsKLSAgQVNTSUdOX1JFUEVBVEVEX0ZJRUxEKGV4dDIpOwotCi0jdW5kZWYgQVNTSUdO
X1JFUEVBVEVEX0ZJRUxECi0jZGVmaW5lIEFTU0lHTl9SRVBFQVRFRF9HUk9VUChGSUVMRCkgICAg
ICAgICAgICAgICAgXAotICBtc2cxID0gZ2VuZXJhdG9yLmFkZF8jI0ZJRUxEKCktPm11dGFibGVf
ZmllbGQxKCk7IFwKLSAgbXNnMiA9IGdlbmVyYXRvci5hZGRfIyNGSUVMRCgpLT5tdXRhYmxlX2Zp
ZWxkMSgpOyBcCi0gIG1zZzMgPSBnZW5lcmF0b3IuYWRkXyMjRklFTEQoKS0+bXV0YWJsZV9maWVs
ZDEoKTsgXAotICBBc3NpZ25QYXJzaW5nTWVyZ2VNZXNzYWdlcyhtc2cxLCBtc2cyLCBtc2czKQot
Ci0gIEFTU0lHTl9SRVBFQVRFRF9HUk9VUChncm91cDEpOwotICBBU1NJR05fUkVQRUFURURfR1JP
VVAoZ3JvdXAyKTsKLQotI3VuZGVmIEFTU0lHTl9SRVBFQVRFRF9HUk9VUAotCi0gIHN0cmluZyBi
dWZmZXI7Ci0gIGdlbmVyYXRvci5TZXJpYWxpemVUb1N0cmluZygmYnVmZmVyKTsKLSAgdW5pdHRl
c3Q6OlRlc3RQYXJzaW5nTWVyZ2UgcGFyc2luZ19tZXJnZTsKLSAgcGFyc2luZ19tZXJnZS5QYXJz
ZUZyb21TdHJpbmcoYnVmZmVyKTsKLQotICAvLyBSZXF1aXJlZCBhbmQgb3B0aW9uYWwgZmllbGRz
IHNob3VsZCBiZSBtZXJnZWQuCi0gIEV4cGVjdE1lc3NhZ2VNZXJnZWQocGFyc2luZ19tZXJnZS5y
ZXF1aXJlZF9hbGxfdHlwZXMoKSk7Ci0gIEV4cGVjdE1lc3NhZ2VNZXJnZWQocGFyc2luZ19tZXJn
ZS5vcHRpb25hbF9hbGxfdHlwZXMoKSk7Ci0gIEV4cGVjdE1lc3NhZ2VNZXJnZWQoCi0gICAgICBw
YXJzaW5nX21lcmdlLm9wdGlvbmFsZ3JvdXAoKS5vcHRpb25hbF9ncm91cF9hbGxfdHlwZXMoKSk7
Ci0gIEV4cGVjdE1lc3NhZ2VNZXJnZWQoCi0gICAgICBwYXJzaW5nX21lcmdlLkdldEV4dGVuc2lv
bih1bml0dGVzdDo6VGVzdFBhcnNpbmdNZXJnZTo6b3B0aW9uYWxfZXh0KSk7Ci0KLSAgLy8gUmVw
ZWF0ZWQgZmllbGRzIHNob3VsZCBub3QgYmUgbWVyZ2VkLgotICBFWFBFQ1RfRVEoMywgcGFyc2lu
Z19tZXJnZS5yZXBlYXRlZF9hbGxfdHlwZXNfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDMsIHBhcnNp
bmdfbWVyZ2UucmVwZWF0ZWRncm91cF9zaXplKCkpOwotICBFWFBFQ1RfRVEoMywgcGFyc2luZ19t
ZXJnZS5FeHRlbnNpb25TaXplKAotICAgICAgdW5pdHRlc3Q6OlRlc3RQYXJzaW5nTWVyZ2U6OnJl
cGVhdGVkX2V4dCkpOwotfQotCi1URVNUKE1lc3NhZ2VUZXN0LCBNZXJnZUZyb20pIHsKLSAgdW5p
dHRlc3Q6OlRlc3RBbGxUeXBlcyBzb3VyY2U7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgZGVz
dDsKLQotICAvLyBPcHRpb25hbCBmaWVsZHMKLSAgc291cmNlLnNldF9vcHRpb25hbF9pbnQzMigx
KTsgIC8vIG9ubHkgc291cmNlCi0gIHNvdXJjZS5zZXRfb3B0aW9uYWxfaW50NjQoMik7ICAvLyBi
b3RoIHNvdXJjZSBhbmQgZGVzdAotICBkZXN0LnNldF9vcHRpb25hbF9pbnQ2NCgzKTsKLSAgZGVz
dC5zZXRfb3B0aW9uYWxfdWludDMyKDQpOyAgIC8vIG9ubHkgZGVzdAotCi0gIC8vIE9wdGlvbmFs
IGZpZWxkcyB3aXRoIGRlZmF1bHRzCi0gIHNvdXJjZS5zZXRfZGVmYXVsdF9pbnQzMigxMyk7ICAv
LyBvbmx5IHNvdXJjZQotICBzb3VyY2Uuc2V0X2RlZmF1bHRfaW50NjQoMTQpOyAgLy8gYm90aCBz
b3VyY2UgYW5kIGRlc3QKLSAgZGVzdC5zZXRfZGVmYXVsdF9pbnQ2NCgxNSk7Ci0gIGRlc3Quc2V0
X2RlZmF1bHRfdWludDMyKDE2KTsgICAvLyBvbmx5IGRlc3QKLQotICAvLyBSZXBlYXRlZCBmaWVs
ZHMKLSAgc291cmNlLmFkZF9yZXBlYXRlZF9pbnQzMig1KTsgIC8vIG9ubHkgc291cmNlCi0gIHNv
dXJjZS5hZGRfcmVwZWF0ZWRfaW50MzIoNik7Ci0gIHNvdXJjZS5hZGRfcmVwZWF0ZWRfaW50NjQo
Nyk7ICAvLyBib3RoIHNvdXJjZSBhbmQgZGVzdAotICBzb3VyY2UuYWRkX3JlcGVhdGVkX2ludDY0
KDgpOwotICBkZXN0LmFkZF9yZXBlYXRlZF9pbnQ2NCg5KTsKLSAgZGVzdC5hZGRfcmVwZWF0ZWRf
aW50NjQoMTApOwotICBkZXN0LmFkZF9yZXBlYXRlZF91aW50MzIoMTEpOyAgLy8gb25seSBkZXN0
Ci0gIGRlc3QuYWRkX3JlcGVhdGVkX3VpbnQzMigxMik7Ci0KLSAgZGVzdC5NZXJnZUZyb20oc291
cmNlKTsKLQotICAvLyBPcHRpb25hbCBmaWVsZHM6IHNvdXJjZSBvdmVyd3JpdGVzIGRlc3QgaWYg
c291cmNlIGlzIHNwZWNpZmllZAotICBFWFBFQ1RfRVEoMSwgZGVzdC5vcHRpb25hbF9pbnQzMigp
KTsgIC8vIG9ubHkgc291cmNlOiB1c2Ugc291cmNlCi0gIEVYUEVDVF9FUSgyLCBkZXN0Lm9wdGlv
bmFsX2ludDY0KCkpOyAgLy8gc291cmNlIGFuZCBkZXN0OiB1c2Ugc291cmNlCi0gIEVYUEVDVF9F
USg0LCBkZXN0Lm9wdGlvbmFsX3VpbnQzMigpKTsgIC8vIG9ubHkgZGVzdDogdXNlIGRlc3QKLSAg
RVhQRUNUX0VRKDAsIGRlc3Qub3B0aW9uYWxfdWludDY0KCkpOyAgLy8gbmVpdGhlcjogdXNlIGRl
ZmF1bHQKLQotICAvLyBPcHRpb25hbCBmaWVsZHMgd2l0aCBkZWZhdWx0cwotICBFWFBFQ1RfRVEo
MTMsIGRlc3QuZGVmYXVsdF9pbnQzMigpKTsgIC8vIG9ubHkgc291cmNlOiB1c2Ugc291cmNlCi0g
IEVYUEVDVF9FUSgxNCwgZGVzdC5kZWZhdWx0X2ludDY0KCkpOyAgLy8gc291cmNlIGFuZCBkZXN0
OiB1c2Ugc291cmNlCi0gIEVYUEVDVF9FUSgxNiwgZGVzdC5kZWZhdWx0X3VpbnQzMigpKTsgIC8v
IG9ubHkgZGVzdDogdXNlIGRlc3QKLSAgRVhQRUNUX0VRKDQ0LCBkZXN0LmRlZmF1bHRfdWludDY0
KCkpOyAgLy8gbmVpdGhlcjogdXNlIGRlZmF1bHQKLQotICAvLyBSZXBlYXRlZCBmaWVsZHM6IGNv
bmNhdGVuYXRlIHNvdXJjZSBvbnRvIHRoZSBlbmQgb2YgZGVzdAotICBBU1NFUlRfRVEoMiwgZGVz
dC5yZXBlYXRlZF9pbnQzMl9zaXplKCkpOwotICBFWFBFQ1RfRVEoNSwgZGVzdC5yZXBlYXRlZF9p
bnQzMigwKSk7Ci0gIEVYUEVDVF9FUSg2LCBkZXN0LnJlcGVhdGVkX2ludDMyKDEpKTsKLSAgQVNT
RVJUX0VRKDQsIGRlc3QucmVwZWF0ZWRfaW50NjRfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDksICBk
ZXN0LnJlcGVhdGVkX2ludDY0KDApKTsKLSAgRVhQRUNUX0VRKDEwLCBkZXN0LnJlcGVhdGVkX2lu
dDY0KDEpKTsKLSAgRVhQRUNUX0VRKDcsICBkZXN0LnJlcGVhdGVkX2ludDY0KDIpKTsKLSAgRVhQ
RUNUX0VRKDgsICBkZXN0LnJlcGVhdGVkX2ludDY0KDMpKTsKLSAgQVNTRVJUX0VRKDIsIGRlc3Qu
cmVwZWF0ZWRfdWludDMyX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgxMSwgZGVzdC5yZXBlYXRlZF91
aW50MzIoMCkpOwotICBFWFBFQ1RfRVEoMTIsIGRlc3QucmVwZWF0ZWRfdWludDMyKDEpKTsKLSAg
QVNTRVJUX0VRKDAsIGRlc3QucmVwZWF0ZWRfdWludDY0X3NpemUoKSk7Ci19Ci0KLVRFU1QoTWVz
c2FnZUZhY3RvcnlUZXN0LCBHZW5lcmF0ZWRGYWN0b3J5TG9va3VwKSB7Ci0gIEVYUEVDVF9FUSgK
LSAgICBNZXNzYWdlRmFjdG9yeTo6Z2VuZXJhdGVkX2ZhY3RvcnkoKS0+R2V0UHJvdG90eXBlKAot
ICAgICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6ZGVzY3JpcHRvcigpKSwKLSAg
ICAmcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsK
LX0KLQotVEVTVChNZXNzYWdlRmFjdG9yeVRlc3QsIEdlbmVyYXRlZEZhY3RvcnlVbmtub3duVHlw
ZSkgewotICAvLyBDb25zdHJ1Y3QgYSBuZXcgZGVzY3JpcHRvci4KLSAgRGVzY3JpcHRvclBvb2wg
cG9vbDsKLSAgRmlsZURlc2NyaXB0b3JQcm90byBmaWxlOwotICBmaWxlLnNldF9uYW1lKCJmb28u
cHJvdG8iKTsKLSAgZmlsZS5hZGRfbWVzc2FnZV90eXBlKCktPnNldF9uYW1lKCJGb28iKTsKLSAg
Y29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHBvb2wuQnVpbGRGaWxlKGZpbGUpLT5tZXNz
YWdlX3R5cGUoMCk7Ci0KLSAgLy8gVHJ5aW5nIHRvIGNvbnN0cnVjdCBpdCBzaG91bGQgcmV0dXJu
IE5VTEwuCi0gIEVYUEVDVF9UUlVFKAotICAgIE1lc3NhZ2VGYWN0b3J5OjpnZW5lcmF0ZWRfZmFj
dG9yeSgpLT5HZXRQcm90b3R5cGUoZGVzY3JpcHRvcikgPT0gTlVMTCk7Ci19Ci0KLQotfSAgLy8g
bmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvbWV0YWRhdGEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXRhZGF0
YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGVlMTUwYjQ0ZjVjN2Q5MmJhMWNj
ZjBmYzA2MmM0ODg3ZTY1YjhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXRhZGF0YS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTYzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBU
aGlzIGhlYWRlciBmaWxlIGRlZmluZXMgYW4gaW50ZXJuYWwgY2xhc3MgdGhhdCBlbmNhcHN1bGF0
ZXMgaW50ZXJuYWwgbWVzc2FnZQotLy8gbWV0YWRhdGEgKFVua25vd24tZmllbGQgc2V0LCBBcmVu
YSBwb2ludGVyLCAuLi4pIGFuZCBhbGxvd3MgaXRzCi0vLyByZXByZXNlbnRhdGlvbiB0byBiZSBt
YWRlIG1vcmUgc3BhY2UtZWZmaWNpZW50IHZpYSB2YXJpb3VzIG9wdGltaXphdGlvbnMuCi0vLwot
Ly8gTm90ZSB0aGF0IHRoaXMgaXMgZGlzdGluY3QgZnJvbSBnb29nbGU6OnByb3RvYnVmOjpNZXRh
ZGF0YSwgd2hpY2ggZW5jYXBzdWxhdGVzCi0vLyBEZXNjcmlwdG9yIGFuZCBSZWZsZWN0aW9uIHBv
aW50ZXJzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9NRVRBREFUQV9IX18KLSNkZWZpbmUg
R09PR0xFX1BST1RPQlVGX01FVEFEQVRBX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldC5oPgotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0v
LyBUaGlzIGlzIHRoZSByZXByZXNlbnRhdGlvbiBmb3IgbWVzc2FnZXMgdGhhdCBzdXBwb3J0IGFy
ZW5hIGFsbG9jYXRpb24uIEl0Ci0vLyB1c2VzIGEgdGFnZ2VkIHBvaW50ZXIgdG8gZWl0aGVyIHN0
b3JlIHRoZSBBcmVuYSBwb2ludGVyLCBpZiB0aGVyZSBhcmUgbm8KLS8vIHVua25vd24gZmllbGRz
LCBvciBhIHBvaW50ZXIgdG8gYSBibG9jayBvZiBtZW1vcnkgd2l0aCBib3RoIHRoZSBBcmVuYSBw
b2ludGVyCi0vLyBhbmQgdGhlIFVua25vd25GaWVsZFNldCwgaWYgdGhlcmUgYXJlIHVua25vd24g
ZmllbGRzLiBUaGlzIG9wdGltaXphdGlvbgotLy8gYWxsb3dzIGZvciAiemVyby1vdmVyaGVhZCIg
c3RvcmFnZSBvZiB0aGUgQXJlbmEgcG9pbnRlciwgcmVsYXRpdmUgdG8gdGhlCi0vLyBhYm92ZSBi
YXNlbGluZSBpbXBsZW1lbnRhdGlvbi4KLS8vCi0vLyBUaGUgdGFnZ2VkIHBvaW50ZXIgdXNlcyB0
aGUgTFNCIHRvIGRpc2FtYmlndWF0ZSBjYXNlcywgYW5kIHVzZXMgYml0IDAgPT0gMCB0bwotLy8g
aW5kaWNhdGUgYW4gYXJlbmEgcG9pbnRlciBhbmQgYml0IDAgPT0gMSB0byBpbmRpY2F0ZSBhIFVG
UytBcmVuYS1jb250YWluZXIKLS8vIHBvaW50ZXIuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQg
SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSB7Ci0gcHVibGljOgotICBJbnRlcm5hbE1ldGFkYXRh
V2l0aEFyZW5hKCkgOiBwdHJfKE5VTEwpIHt9Ci0gIGV4cGxpY2l0IEludGVybmFsTWV0YWRhdGFX
aXRoQXJlbmEoQXJlbmEqIGFyZW5hKQotICAgICAgOiBwdHJfIChhcmVuYSkge30KLQotICB+SW50
ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSgpIHsKLSAgICBpZiAoaGF2ZV91bmtub3duX2ZpZWxkcygp
ICYmIGFyZW5hKCkgPT0gTlVMTCkgewotICAgICAgZGVsZXRlIFB0clZhbHVlPENvbnRhaW5lcj4o
KTsKLSAgICB9Ci0gICAgcHRyXyA9IE5VTEw7Ci0gIH0KLQotICBHT09HTEVfQVRUUklCVVRFX0FM
V0FZU19JTkxJTkUgY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcygpIGNvbnN0
IHsKLSAgICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoaGF2ZV91bmtub3duX2ZpZWxkcygpKSkg
ewotICAgICAgcmV0dXJuIFB0clZhbHVlPENvbnRhaW5lcj4oKS0+dW5rbm93bl9maWVsZHNfOwot
ICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gKlVua25vd25GaWVsZFNldDo6ZGVmYXVsdF9pbnN0
YW5jZSgpOwotICAgIH0KLSAgfQotCi0gIEdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSBV
bmtub3duRmllbGRTZXQqIG11dGFibGVfdW5rbm93bl9maWVsZHMoKSB7Ci0gICAgaWYgKEdPT0dM
RV9QUkVESUNUX1RSVUUoaGF2ZV91bmtub3duX2ZpZWxkcygpKSkgewotICAgICAgcmV0dXJuICZQ
dHJWYWx1ZTxDb250YWluZXI+KCktPnVua25vd25fZmllbGRzXzsKLSAgICB9IGVsc2UgewotICAg
ICAgcmV0dXJuIG11dGFibGVfdW5rbm93bl9maWVsZHNfc2xvdygpOwotICAgIH0KLSAgfQotCi0g
IEdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSBBcmVuYSogYXJlbmEoKSBjb25zdCB7Ci0g
ICAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKGhhdmVfdW5rbm93bl9maWVsZHMoKSkpIHsKLSAg
ICAgIHJldHVybiBQdHJWYWx1ZTxDb250YWluZXI+KCktPmFyZW5hXzsKLSAgICB9IGVsc2Ugewot
ICAgICAgcmV0dXJuIFB0clZhbHVlPEFyZW5hPigpOwotICAgIH0KLSAgfQotCi0gIEdPT0dMRV9B
VFRSSUJVVEVfQUxXQVlTX0lOTElORSBib29sIGhhdmVfdW5rbm93bl9maWVsZHMoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIFB0clRhZygpID09IGtUYWdDb250YWluZXI7Ci0gIH0KLQotICBHT09HTEVf
QVRUUklCVVRFX0FMV0FZU19JTkxJTkUgdm9pZCBTd2FwKEludGVybmFsTWV0YWRhdGFXaXRoQXJl
bmEqIG90aGVyKSB7Ci0gICAgLy8gU2VtYW50aWNzIGhlcmUgYXJlIHRoYXQgd2Ugc3dhcCBvbmx5
IHRoZSB1bmtub3duIGZpZWxkcywgbm90IHRoZSBhcmVuYQotICAgIC8vIHBvaW50ZXIuIFdlIGNh
bm5vdCBzaW1wbHkgc3dhcCBwdHJfIHdpdGggb3RoZXItPnB0cl8gYmVjYXVzZSB3ZSBuZWVkIHRv
Ci0gICAgLy8gbWFpbnRhaW4gb3VyIG93biBhcmVuYSBwdHIuIEFsc28sIG91ciBwdHJfIGFuZCBv
dGhlcidzIHB0cl8gbWF5IGJlIGluCi0gICAgLy8gZGlmZmVyZW50IHN0YXRlcyAoZGlyZWN0IGFy
ZW5hIHBvaW50ZXIgdnMuIGNvbnRhaW5lciB3aXRoIFVGUykgc28gd2UKLSAgICAvLyBjYW5ub3Qg
c2ltcGx5IHN3YXAgcHRyXyBhbmQgdGhlbiByZXN0b3JlIHRoZSBhcmVuYSBwb2ludGVycy4gV2Ug
cmV1c2UKLSAgICAvLyBVRlMncyBzd2FwIGltcGxlbWVudGF0aW9uIGluc3RlYWQuCi0gICAgaWYg
KGhhdmVfdW5rbm93bl9maWVsZHMoKSB8fCBvdGhlci0+aGF2ZV91bmtub3duX2ZpZWxkcygpKSB7
Ci0gICAgICBtdXRhYmxlX3Vua25vd25fZmllbGRzKCktPlN3YXAob3RoZXItPm11dGFibGVfdW5r
bm93bl9maWVsZHMoKSk7Ci0gICAgfQotICB9Ci0KLSAgR09PR0xFX0FUVFJJQlVURV9BTFdBWVNf
SU5MSU5FIHZvaWQqIHJhd19hcmVuYV9wdHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHB0cl87Ci0g
IH0KLQotIHByaXZhdGU6Ci0gIHZvaWQqIHB0cl87Ci0KLSAgLy8gVGFnZ2VkIHBvaW50ZXIgaW1w
bGVtZW50YXRpb24uCi0gIGVudW0gewotICAgIC8vIHB0cl8gaXMgYW4gQXJlbmEqLgotICAgIGtU
YWdBcmVuYSA9IDAsCi0gICAgLy8gcHRyXyBpcyBhIENvbnRhaW5lciouCi0gICAga1RhZ0NvbnRh
aW5lciA9IDEsCi0gIH07Ci0gIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBrUHRyVGFnTWFzayA9IDE7
Ci0gIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBrUHRyVmFsdWVNYXNrID0gfmtQdHJUYWdNYXNrOwot
Ci0gIC8vIEFjY2Vzc29ycyBmb3IgcG9pbnRlciB0YWcgYW5kIHBvaW50ZXIgdmFsdWUuCi0gIEdP
T0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSBpbnQgUHRyVGFnKCkgY29uc3QgewotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHJfKSAmIGtQdHJUYWdNYXNrOwotICB9
Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogUHRyVmFsdWUoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KAotICAgICAgICByZWludGVycHJldF9jYXN0PGludHB0
cl90PihwdHJfKSAmIGtQdHJWYWx1ZU1hc2spOwotICB9Ci0KLSAgLy8gSWYgcHRyXydzIHRhZyBp
cyBrVGFnQ29udGFpbmVyLCBpdCBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3Qu
Ci0gIHN0cnVjdCBDb250YWluZXIgewotICAgIFVua25vd25GaWVsZFNldCB1bmtub3duX2ZpZWxk
c187Ci0gICAgQXJlbmEqIGFyZW5hXzsKLSAgfTsKLQotICBHT09HTEVfQVRUUklCVVRFX05PSU5M
SU5FIFVua25vd25GaWVsZFNldCogbXV0YWJsZV91bmtub3duX2ZpZWxkc19zbG93KCkgewotICAg
IEFyZW5hKiBteV9hcmVuYSA9IGFyZW5hKCk7Ci0gICAgQ29udGFpbmVyKiBjb250YWluZXIgPSBB
cmVuYTo6Q3JlYXRlPENvbnRhaW5lcj4obXlfYXJlbmEpOwotICAgIHB0cl8gPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPigKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29udGFp
bmVyKSB8IGtUYWdDb250YWluZXIpOwotICAgIGNvbnRhaW5lci0+YXJlbmFfID0gbXlfYXJlbmE7
Ci0gICAgcmV0dXJuICYoY29udGFpbmVyLT51bmtub3duX2ZpZWxkc18pOwotICB9Ci19OwotCi0v
LyBUZW1wb3JhcnkgY29tcGF0aWJpbGl0eSB0eXBlZGVmLiBSZW1vdmUgb25jZSB0aGlzIGlzIHJl
bGVhc2VkIGluIGNvbXBvbmVudHMKLS8vIGFuZCB1cGIgQ0wgaXMgc3VibWl0dGVkLgotdHlwZWRl
ZiBJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIEludGVybmFsTWV0YWRhdGE7Ci0KLX0gIC8vIG5h
bWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVz
cGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX01FVEFEQVRBX0hfXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL25vX2ZpZWxkX3ByZXNlbmNlX3Rlc3QuY2MgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvbm9fZmllbGRfcHJlc2VuY2VfdGVzdC5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYmM0MWJlZWM4MTMxYWNjODUyZDk3YjdmMzhjMzk1YTY5YjBmNGFh
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvbm9fZmllbGRfcHJlc2VuY2VfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0x
LDU3NyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNo
YW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVy
cy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1
ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19maWVs
ZF9wcmVzZW5jZS5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wYi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ugewot
Ci0vLyBIZWxwZXI6IGNoZWNrcyB0aGF0IGFsbCBmaWVsZHMgaGF2ZSBkZWZhdWx0ICh6ZXJvL2Vt
cHR5KSB2YWx1ZXMuCi12b2lkIENoZWNrRGVmYXVsdFZhbHVlcygKLSAgICBjb25zdCBwcm90bzJf
bm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXMmIG0pIHsKLSAgRVhQRUNUX0VR
KDAsIG0ub3B0aW9uYWxfaW50MzIoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLm9wdGlvbmFsX2ludDY0
KCkpOwotICBFWFBFQ1RfRVEoMCwgbS5vcHRpb25hbF91aW50MzIoKSk7Ci0gIEVYUEVDVF9FUSgw
LCBtLm9wdGlvbmFsX3VpbnQ2NCgpKTsKLSAgRVhQRUNUX0VRKDAsIG0ub3B0aW9uYWxfc2ludDMy
KCkpOwotICBFWFBFQ1RfRVEoMCwgbS5vcHRpb25hbF9zaW50NjQoKSk7Ci0gIEVYUEVDVF9FUSgw
LCBtLm9wdGlvbmFsX2ZpeGVkMzIoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLm9wdGlvbmFsX2ZpeGVk
NjQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLm9wdGlvbmFsX3NmaXhlZDMyKCkpOwotICBFWFBFQ1Rf
RVEoMCwgbS5vcHRpb25hbF9zZml4ZWQ2NCgpKTsKLSAgRVhQRUNUX0VRKDAsIG0ub3B0aW9uYWxf
ZmxvYXQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLm9wdGlvbmFsX2RvdWJsZSgpKTsKLSAgRVhQRUNU
X0VRKGZhbHNlLCBtLm9wdGlvbmFsX2Jvb2woKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLm9wdGlvbmFs
X3N0cmluZygpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLm9wdGlvbmFsX2J5dGVzKCkuc2l6
ZSgpKTsKLQotICBFWFBFQ1RfRVEoZmFsc2UsIG0uaGFzX29wdGlvbmFsX25lc3RlZF9tZXNzYWdl
KCkpOwotICAvLyBhY2Nlc3NvciBmb3IgbWVzc2FnZSBmaWVsZHMgcmV0dXJucyBkZWZhdWx0IGlu
c3RhbmNlIHdoZW4gbm90IHByZXNlbnQKLSAgRVhQRUNUX0VRKDAsIG0ub3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UoKS5iYigpKTsKLSAgRVhQRUNUX0VRKGZhbHNlLCBtLmhhc19vcHRpb25hbF9wcm90
bzJfbWVzc2FnZSgpKTsKLSAgLy8gRW1iZWRkZWQgcHJvdG8yIG1lc3NhZ2VzIHN0aWxsIGhhdmUg
cHJvdG8yIHNlbWFudGljcywgZS5nLiBub24temVybyBkZWZhdWx0Ci0gIC8vIHZhbHVlcy4gSGVy
ZSB0aGUgc3VibWVzc2FnZSBpcyBub3QgcHJlc2VudCBidXQgaXRzIGFjY2Vzc29yIHJldHVybnMg
dGhlCi0gIC8vIGRlZmF1bHQgaW5zdGFuY2UuCi0gIEVYUEVDVF9FUSg0MSwgbS5vcHRpb25hbF9w
cm90bzJfbWVzc2FnZSgpLmRlZmF1bHRfaW50MzIoKSk7Ci0gIEVYUEVDVF9FUShmYWxzZSwgbS5o
YXNfb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRVEocHJvdG8yX25vZmll
bGRwcmVzZW5jZV91bml0dGVzdDo6VGVzdEFsbFR5cGVzX05lc3RlZEVudW1fRk9PLAotICAgICAg
ICAgICAgbS5vcHRpb25hbF9uZXN0ZWRfZW51bSgpKTsKLSAgRVhQRUNUX0VRKHByb3RvMl9ub2Zp
ZWxkcHJlc2VuY2VfdW5pdHRlc3Q6OkZPUkVJR05fRk9PLAotICAgICAgICAgICAgbS5vcHRpb25h
bF9mb3JlaWduX2VudW0oKSk7Ci0KLQotICBFWFBFQ1RfRVEoMCwgbS5yZXBlYXRlZF9pbnQzMl9z
aXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbS5yZXBlYXRlZF9pbnQ2NF9zaXplKCkpOwotICBFWFBF
Q1RfRVEoMCwgbS5yZXBlYXRlZF91aW50MzJfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG0ucmVw
ZWF0ZWRfdWludDY0X3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLnJlcGVhdGVkX3NpbnQzMl9z
aXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbS5yZXBlYXRlZF9zaW50NjRfc2l6ZSgpKTsKLSAgRVhQ
RUNUX0VRKDAsIG0ucmVwZWF0ZWRfZml4ZWQzMl9zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbS5y
ZXBlYXRlZF9maXhlZDY0X3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLnJlcGVhdGVkX3NmaXhl
ZDMyX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLnJlcGVhdGVkX3NmaXhlZDY0X3NpemUoKSk7
Ci0gIEVYUEVDVF9FUSgwLCBtLnJlcGVhdGVkX2Zsb2F0X3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgw
LCBtLnJlcGVhdGVkX2RvdWJsZV9zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbS5yZXBlYXRlZF9i
b29sX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLnJlcGVhdGVkX3N0cmluZ19zaXplKCkpOwot
ICBFWFBFQ1RfRVEoMCwgbS5yZXBlYXRlZF9ieXRlc19zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwg
bS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbS5yZXBl
YXRlZF9mb3JlaWduX21lc3NhZ2Vfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG0ucmVwZWF0ZWRf
cHJvdG8yX21lc3NhZ2Vfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG0ucmVwZWF0ZWRfbmVzdGVk
X2VudW1fc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG0ucmVwZWF0ZWRfZm9yZWlnbl9lbnVtX3Np
emUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtLnJlcGVhdGVkX2xhenlfbWVzc2FnZV9zaXplKCkpOwot
ICBFWFBFQ1RfRVEocHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0dGVzdDo6VGVzdEFsbFR5cGVz
OjpPTkVPRl9GSUVMRF9OT1RfU0VULAotICAgICAgICAgICAgbS5vbmVvZl9maWVsZF9jYXNlKCkp
OwotfQotCi12b2lkIEZpbGxWYWx1ZXMocHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0dGVzdDo6
VGVzdEFsbFR5cGVzKiBtKSB7Ci0gIG0tPnNldF9vcHRpb25hbF9pbnQzMigxMDApOwotICBtLT5z
ZXRfb3B0aW9uYWxfaW50NjQoMTAxKTsKLSAgbS0+c2V0X29wdGlvbmFsX3VpbnQzMigxMDIpOwot
ICBtLT5zZXRfb3B0aW9uYWxfdWludDY0KDEwMyk7Ci0gIG0tPnNldF9vcHRpb25hbF9zaW50MzIo
MTA0KTsKLSAgbS0+c2V0X29wdGlvbmFsX3NpbnQ2NCgxMDUpOwotICBtLT5zZXRfb3B0aW9uYWxf
Zml4ZWQzMigxMDYpOwotICBtLT5zZXRfb3B0aW9uYWxfZml4ZWQ2NCgxMDcpOwotICBtLT5zZXRf
b3B0aW9uYWxfc2ZpeGVkMzIoMTA4KTsKLSAgbS0+c2V0X29wdGlvbmFsX3NmaXhlZDY0KDEwOSk7
Ci0gIG0tPnNldF9vcHRpb25hbF9mbG9hdCgxMTAuMCk7Ci0gIG0tPnNldF9vcHRpb25hbF9kb3Vi
bGUoMTExLjApOwotICBtLT5zZXRfb3B0aW9uYWxfYm9vbCh0cnVlKTsKLSAgbS0+c2V0X29wdGlv
bmFsX3N0cmluZygiYXNkZiIpOwotICBtLT5zZXRfb3B0aW9uYWxfYnl0ZXMoImprbDsiKTsKLSAg
bS0+bXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpLT5zZXRfYmIoNDIpOwotICBtLT5t
dXRhYmxlX29wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSgpLT5zZXRfYyg0Myk7Ci0gIG0tPm11dGFi
bGVfb3B0aW9uYWxfcHJvdG8yX21lc3NhZ2UoKS0+c2V0X29wdGlvbmFsX2ludDMyKDQ0KTsKLSAg
bS0+c2V0X29wdGlvbmFsX25lc3RlZF9lbnVtKAotICAgICAgcHJvdG8yX25vZmllbGRwcmVzZW5j
ZV91bml0dGVzdDo6VGVzdEFsbFR5cGVzX05lc3RlZEVudW1fQkFaKTsKLSAgbS0+c2V0X29wdGlv
bmFsX2ZvcmVpZ25fZW51bSgKLSAgICAgIHByb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRlc3Q6
OkZPUkVJR05fQkFaKTsKLSAgbS0+bXV0YWJsZV9vcHRpb25hbF9sYXp5X21lc3NhZ2UoKS0+c2V0
X2JiKDQ1KTsKLSAgbS0+YWRkX3JlcGVhdGVkX2ludDMyKDEwMCk7Ci0gIG0tPmFkZF9yZXBlYXRl
ZF9pbnQ2NCgxMDEpOwotICBtLT5hZGRfcmVwZWF0ZWRfdWludDMyKDEwMik7Ci0gIG0tPmFkZF9y
ZXBlYXRlZF91aW50NjQoMTAzKTsKLSAgbS0+YWRkX3JlcGVhdGVkX3NpbnQzMigxMDQpOwotICBt
LT5hZGRfcmVwZWF0ZWRfc2ludDY0KDEwNSk7Ci0gIG0tPmFkZF9yZXBlYXRlZF9maXhlZDMyKDEw
Nik7Ci0gIG0tPmFkZF9yZXBlYXRlZF9maXhlZDY0KDEwNyk7Ci0gIG0tPmFkZF9yZXBlYXRlZF9z
Zml4ZWQzMigxMDgpOwotICBtLT5hZGRfcmVwZWF0ZWRfc2ZpeGVkNjQoMTA5KTsKLSAgbS0+YWRk
X3JlcGVhdGVkX2Zsb2F0KDExMC4wKTsKLSAgbS0+YWRkX3JlcGVhdGVkX2RvdWJsZSgxMTEuMCk7
Ci0gIG0tPmFkZF9yZXBlYXRlZF9ib29sKHRydWUpOwotICBtLT5hZGRfcmVwZWF0ZWRfc3RyaW5n
KCJhc2RmIik7Ci0gIG0tPmFkZF9yZXBlYXRlZF9ieXRlcygiamtsOyIpOwotICBtLT5hZGRfcmVw
ZWF0ZWRfbmVzdGVkX21lc3NhZ2UoKS0+c2V0X2JiKDQ2KTsKLSAgbS0+YWRkX3JlcGVhdGVkX2Zv
cmVpZ25fbWVzc2FnZSgpLT5zZXRfYyg0Nyk7Ci0gIG0tPmFkZF9yZXBlYXRlZF9wcm90bzJfbWVz
c2FnZSgpLT5zZXRfb3B0aW9uYWxfaW50MzIoNDgpOwotICBtLT5hZGRfcmVwZWF0ZWRfbmVzdGVk
X2VudW0oCi0gICAgICBwcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0OjpUZXN0QWxsVHlw
ZXNfTmVzdGVkRW51bV9CQVopOwotICBtLT5hZGRfcmVwZWF0ZWRfZm9yZWlnbl9lbnVtKAotICAg
ICAgcHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0dGVzdDo6Rk9SRUlHTl9CQVopOwotICBtLT5h
ZGRfcmVwZWF0ZWRfbGF6eV9tZXNzYWdlKCktPnNldF9iYig0OSk7Ci0KLSAgbS0+c2V0X29uZW9m
X3VpbnQzMigxKTsKLSAgbS0+bXV0YWJsZV9vbmVvZl9uZXN0ZWRfbWVzc2FnZSgpLT5zZXRfYmIo
NTApOwotICBtLT5zZXRfb25lb2Zfc3RyaW5nKCJ0ZXN0Iik7ICAvLyBvbmx5IHRoaXMgb25lIHJl
bWFpbnMgc2V0Ci19Ci0KLXZvaWQgQ2hlY2tOb25EZWZhdWx0VmFsdWVzKAotY29uc3QgcHJvdG8y
X25vZmllbGRwcmVzZW5jZV91bml0dGVzdDo6VGVzdEFsbFR5cGVzJiBtKSB7Ci0gIEVYUEVDVF9F
USgxMDAsIG0ub3B0aW9uYWxfaW50MzIoKSk7Ci0gIEVYUEVDVF9FUSgxMDEsIG0ub3B0aW9uYWxf
aW50NjQoKSk7Ci0gIEVYUEVDVF9FUSgxMDIsIG0ub3B0aW9uYWxfdWludDMyKCkpOwotICBFWFBF
Q1RfRVEoMTAzLCBtLm9wdGlvbmFsX3VpbnQ2NCgpKTsKLSAgRVhQRUNUX0VRKDEwNCwgbS5vcHRp
b25hbF9zaW50MzIoKSk7Ci0gIEVYUEVDVF9FUSgxMDUsIG0ub3B0aW9uYWxfc2ludDY0KCkpOwot
ICBFWFBFQ1RfRVEoMTA2LCBtLm9wdGlvbmFsX2ZpeGVkMzIoKSk7Ci0gIEVYUEVDVF9FUSgxMDcs
IG0ub3B0aW9uYWxfZml4ZWQ2NCgpKTsKLSAgRVhQRUNUX0VRKDEwOCwgbS5vcHRpb25hbF9zZml4
ZWQzMigpKTsKLSAgRVhQRUNUX0VRKDEwOSwgbS5vcHRpb25hbF9zZml4ZWQ2NCgpKTsKLSAgRVhQ
RUNUX0VRKDExMC4wLCBtLm9wdGlvbmFsX2Zsb2F0KCkpOwotICBFWFBFQ1RfRVEoMTExLjAsIG0u
b3B0aW9uYWxfZG91YmxlKCkpOwotICBFWFBFQ1RfRVEodHJ1ZSwgbS5vcHRpb25hbF9ib29sKCkp
OwotICBFWFBFQ1RfRVEoImFzZGYiLCBtLm9wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNUX0VR
KCJqa2w7IiwgbS5vcHRpb25hbF9ieXRlcygpKTsKLSAgRVhQRUNUX0VRKHRydWUsIG0uaGFzX29w
dGlvbmFsX25lc3RlZF9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRVEoNDIsIG0ub3B0aW9uYWxfbmVz
dGVkX21lc3NhZ2UoKS5iYigpKTsKLSAgRVhQRUNUX0VRKHRydWUsIG0uaGFzX29wdGlvbmFsX2Zv
cmVpZ25fbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0VRKDQzLCBtLm9wdGlvbmFsX2ZvcmVpZ25fbWVz
c2FnZSgpLmMoKSk7Ci0gIEVYUEVDVF9FUSh0cnVlLCBtLmhhc19vcHRpb25hbF9wcm90bzJfbWVz
c2FnZSgpKTsKLSAgRVhQRUNUX0VRKDQ0LCBtLm9wdGlvbmFsX3Byb3RvMl9tZXNzYWdlKCkub3B0
aW9uYWxfaW50MzIoKSk7Ci0gIEVYUEVDVF9FUShwcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0
ZXN0OjpUZXN0QWxsVHlwZXNfTmVzdGVkRW51bV9CQVosCi0gICAgICAgICAgICBtLm9wdGlvbmFs
X25lc3RlZF9lbnVtKCkpOwotICBFWFBFQ1RfRVEocHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0
dGVzdDo6Rk9SRUlHTl9CQVosCi0gICAgICAgICAgICBtLm9wdGlvbmFsX2ZvcmVpZ25fZW51bSgp
KTsKLSAgRVhQRUNUX0VRKHRydWUsIG0uaGFzX29wdGlvbmFsX2xhenlfbWVzc2FnZSgpKTsKLSAg
RVhQRUNUX0VRKDQ1LCBtLm9wdGlvbmFsX2xhenlfbWVzc2FnZSgpLmJiKCkpOwotCi0gIEVYUEVD
VF9FUSgxLCBtLnJlcGVhdGVkX2ludDMyX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgxMDAsIG0ucmVw
ZWF0ZWRfaW50MzIoMCkpOwotICBFWFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9pbnQ2NF9zaXplKCkp
OwotICBFWFBFQ1RfRVEoMTAxLCBtLnJlcGVhdGVkX2ludDY0KDApKTsKLSAgRVhQRUNUX0VRKDEs
IG0ucmVwZWF0ZWRfdWludDMyX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgxMDIsIG0ucmVwZWF0ZWRf
dWludDMyKDApKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfdWludDY0X3NpemUoKSk7Ci0g
IEVYUEVDVF9FUSgxMDMsIG0ucmVwZWF0ZWRfdWludDY0KDApKTsKLSAgRVhQRUNUX0VRKDEsIG0u
cmVwZWF0ZWRfc2ludDMyX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgxMDQsIG0ucmVwZWF0ZWRfc2lu
dDMyKDApKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfc2ludDY0X3NpemUoKSk7Ci0gIEVY
UEVDVF9FUSgxMDUsIG0ucmVwZWF0ZWRfc2ludDY0KDApKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVw
ZWF0ZWRfZml4ZWQzMl9zaXplKCkpOwotICBFWFBFQ1RfRVEoMTA2LCBtLnJlcGVhdGVkX2ZpeGVk
MzIoMCkpOwotICBFWFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9maXhlZDY0X3NpemUoKSk7Ci0gIEVY
UEVDVF9FUSgxMDcsIG0ucmVwZWF0ZWRfZml4ZWQ2NCgwKSk7Ci0gIEVYUEVDVF9FUSgxLCBtLnJl
cGVhdGVkX3NmaXhlZDMyX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgxMDgsIG0ucmVwZWF0ZWRfc2Zp
eGVkMzIoMCkpOwotICBFWFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9zZml4ZWQ2NF9zaXplKCkpOwot
ICBFWFBFQ1RfRVEoMTA5LCBtLnJlcGVhdGVkX3NmaXhlZDY0KDApKTsKLSAgRVhQRUNUX0VRKDEs
IG0ucmVwZWF0ZWRfZmxvYXRfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDExMC4wLCBtLnJlcGVhdGVk
X2Zsb2F0KDApKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfZG91YmxlX3NpemUoKSk7Ci0g
IEVYUEVDVF9FUSgxMTEuMCwgbS5yZXBlYXRlZF9kb3VibGUoMCkpOwotICBFWFBFQ1RfRVEoMSwg
bS5yZXBlYXRlZF9ib29sX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSh0cnVlLCBtLnJlcGVhdGVkX2Jv
b2woMCkpOwotICBFWFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9zdHJpbmdfc2l6ZSgpKTsKLSAgRVhQ
RUNUX0VRKCJhc2RmIiwgbS5yZXBlYXRlZF9zdHJpbmcoMCkpOwotICBFWFBFQ1RfRVEoMSwgbS5y
ZXBlYXRlZF9ieXRlc19zaXplKCkpOwotICBFWFBFQ1RfRVEoImprbDsiLCBtLnJlcGVhdGVkX2J5
dGVzKDApKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Vfc2l6ZSgp
KTsKLSAgRVhQRUNUX0VRKDQ2LCBtLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKDApLmJiKCkpOwot
ICBFWFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2Vfc2l6ZSgpKTsKLSAgRVhQ
RUNUX0VRKDQ3LCBtLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgwKS5jKCkpOwotICBFWFBFQ1Rf
RVEoMSwgbS5yZXBlYXRlZF9wcm90bzJfbWVzc2FnZV9zaXplKCkpOwotICBFWFBFQ1RfRVEoNDgs
IG0ucmVwZWF0ZWRfcHJvdG8yX21lc3NhZ2UoMCkub3B0aW9uYWxfaW50MzIoKSk7Ci0gIEVYUEVD
VF9FUSgxLCBtLnJlcGVhdGVkX25lc3RlZF9lbnVtX3NpemUoKSk7Ci0gIEVYUEVDVF9FUShwcm90
bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXNfTmVzdGVkRW51bV9CQVos
Ci0gICAgICAgICAgICBtLnJlcGVhdGVkX25lc3RlZF9lbnVtKDApKTsKLSAgRVhQRUNUX0VRKDEs
IG0ucmVwZWF0ZWRfZm9yZWlnbl9lbnVtX3NpemUoKSk7Ci0gIEVYUEVDVF9FUShwcm90bzJfbm9m
aWVsZHByZXNlbmNlX3VuaXR0ZXN0OjpGT1JFSUdOX0JBWiwKLSAgICAgICAgICAgIG0ucmVwZWF0
ZWRfZm9yZWlnbl9lbnVtKDApKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfbGF6eV9tZXNz
YWdlX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSg0OSwgbS5yZXBlYXRlZF9sYXp5X21lc3NhZ2UoMCku
YmIoKSk7Ci0KLSAgRVhQRUNUX0VRKHByb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRlc3Q6OlRl
c3RBbGxUeXBlczo6a09uZW9mU3RyaW5nLAotICAgICAgICAgICAgbS5vbmVvZl9maWVsZF9jYXNl
KCkpOwotICBFWFBFQ1RfRVEoInRlc3QiLCBtLm9uZW9mX3N0cmluZygpKTsKLX0KLQotVEVTVChO
b0ZpZWxkUHJlc2VuY2VUZXN0LCBCYXNpY01lc3NhZ2VUZXN0KSB7Ci0gIHByb3RvMl9ub2ZpZWxk
cHJlc2VuY2VfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotICAvLyBDaGVjayBkZWZh
dWx0IHZhbHVlcywgZmlsbCBhbGwgZmllbGRzLCBjaGVjayB2YWx1ZXMuIFdlIGp1c3Qgd2FudCB0
bwotICAvLyBleGVyY2lzZSB0aGUgYmFzaWMgZ2V0dGVycy9zZXR0ZXIgcGF0aHMgaGVyZSB0byBt
YWtlIHN1cmUgbm8KLSAgLy8gZmllbGQtcHJlc2VuY2UtcmVsYXRlZCBjaGFuZ2VzIGJyb2tlIHRo
ZXNlLgotICBDaGVja0RlZmF1bHRWYWx1ZXMobWVzc2FnZSk7Ci0gIEZpbGxWYWx1ZXMoJm1lc3Nh
Z2UpOwotICBDaGVja05vbkRlZmF1bHRWYWx1ZXMobWVzc2FnZSk7Ci0KLSAgLy8gQ2xlYXIoKSBz
aG91bGQgYmUgZXF1aXZhbGVudCB0byBnZXR0aW5nIGEgZnJlc2hseS1jb25zdHJ1Y3RlZCBtZXNz
YWdlLgotICBtZXNzYWdlLkNsZWFyKCk7Ci0gIENoZWNrRGVmYXVsdFZhbHVlcyhtZXNzYWdlKTsK
LX0KLQotVEVTVChOb0ZpZWxkUHJlc2VuY2VUZXN0LCBNZXNzYWdlRmllbGRQcmVzZW5jZVRlc3Qp
IHsKLSAgLy8gY2hlY2sgdGhhdCBwcmVzZW5jZSBzdGlsbCB3b3JrcyBwcm9wZXJseSBmb3IgbWVz
c2FnZSBmaWVsZHMuCi0gIHByb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRlc3Q6OlRlc3RBbGxU
eXBlcyBtZXNzYWdlOwotICBFWFBFQ1RfRVEoZmFsc2UsIG1lc3NhZ2UuaGFzX29wdGlvbmFsX25l
c3RlZF9tZXNzYWdlKCkpOwotICAvLyBHZXR0ZXIgc2hvdWxkIGZldGNoIGRlZmF1bHQgaW5zdGFu
Y2UsIGFuZCBub3QgY2F1c2UgdGhlIGZpZWxkIHRvIGJlY29tZQotICAvLyBwcmVzZW50LgotICBF
WFBFQ1RfRVEoMCwgbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpLmJiKCkpOwotICBF
WFBFQ1RfRVEoZmFsc2UsIG1lc3NhZ2UuaGFzX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCkpOwot
ICBtZXNzYWdlLm11dGFibGVfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKS0+c2V0X2JiKDQyKTsK
LSAgRVhQRUNUX0VRKHRydWUsIG1lc3NhZ2UuaGFzX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCkp
OwotICBtZXNzYWdlLmNsZWFyX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCk7Ci0gIEVYUEVDVF9F
UShmYWxzZSwgbWVzc2FnZS5oYXNfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKSk7Ci0KLSAgLy8g
TGlrZXdpc2UgZm9yIGEgbGF6eSBtZXNzYWdlIGZpZWxkLgotICBFWFBFQ1RfRVEoZmFsc2UsIG1l
c3NhZ2UuaGFzX29wdGlvbmFsX2xhenlfbWVzc2FnZSgpKTsKLSAgLy8gR2V0dGVyIHNob3VsZCBm
ZXRjaCBkZWZhdWx0IGluc3RhbmNlLCBhbmQgbm90IGNhdXNlIHRoZSBmaWVsZCB0byBiZWNvbWUK
LSAgLy8gcHJlc2VudC4KLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2Uub3B0aW9uYWxfbGF6eV9tZXNz
YWdlKCkuYmIoKSk7Ci0gIEVYUEVDVF9FUShmYWxzZSwgbWVzc2FnZS5oYXNfb3B0aW9uYWxfbGF6
eV9tZXNzYWdlKCkpOwotICBtZXNzYWdlLm11dGFibGVfb3B0aW9uYWxfbGF6eV9tZXNzYWdlKCkt
PnNldF9iYig0Mik7Ci0gIEVYUEVDVF9FUSh0cnVlLCBtZXNzYWdlLmhhc19vcHRpb25hbF9sYXp5
X21lc3NhZ2UoKSk7Ci0gIG1lc3NhZ2UuY2xlYXJfb3B0aW9uYWxfbGF6eV9tZXNzYWdlKCk7Ci0g
IEVYUEVDVF9FUShmYWxzZSwgbWVzc2FnZS5oYXNfb3B0aW9uYWxfbGF6eV9tZXNzYWdlKCkpOwot
Ci0gIC8vIFRlc3QgZmllbGQgcHJlc2VuY2Ugb2YgYSBtZXNzYWdlIGZpZWxkIG9uIHRoZSBkZWZh
dWx0IGluc3RhbmNlLgotICBFWFBFQ1RfRVEoZmFsc2UsIHByb3RvMl9ub2ZpZWxkcHJlc2VuY2Vf
dW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6Ci0gICAgICAgICAgICBkZWZhdWx0X2luc3RhbmNlKCku
aGFzX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCkpOwotfQotCi1URVNUKE5vRmllbGRQcmVzZW5j
ZVRlc3QsIFJlZmxlY3Rpb25IYXNGaWVsZFRlc3QpIHsKLSAgLy8gY2hlY2sgdGhhdCBIYXNGaWVs
ZCByZXBvcnRzIHRydWUgb24gYWxsIHNjYWxhciBmaWVsZHMuIENoZWNrIHRoYXQgaXQKLSAgLy8g
YmVoYXZlcyBwcm9wZXJseSBmb3IgbWVzc2FnZSBmaWVsZHMuCi0KLSAgcHJvdG8yX25vZmllbGRw
cmVzZW5jZV91bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIGNvbnN0IGdvb2dsZTo6
cHJvdG9idWY6OlJlZmxlY3Rpb24qIHIgPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAgY29u
c3QgZ29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVzYyA9IG1lc3NhZ2UuR2V0RGVzY3Jp
cHRvcigpOwotCi0gIC8vIENoZWNrIGluaXRpYWwgc3RhdGU6IHNjYWxhcnMgbm90IHByZXNlbnQg
KGR1ZSB0byBuZWVkIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAotICAvLyBNZXJnZUZyb20oKSksIG1l
c3NhZ2UgZmllbGRzIG5vdCBwcmVzZW50LCBvbmVvZnMgbm90IHByZXNlbnQuCi0gIGZvciAoaW50
IGkgPSAwOyBpIDwgZGVzYy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgZ29vZ2xl
Ojpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2MtPmZpZWxkKGkpOwotICAg
IGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgY29udGludWU7Ci0gICAgRVhQRUNUX0VRKGZhbHNl
LCByLT5IYXNGaWVsZChtZXNzYWdlLCBmaWVsZCkpOwotICB9Ci0KLSAgLy8gVGVzdCBmaWVsZCBw
cmVzZW5jZSBvZiBhIG1lc3NhZ2UgZmllbGQgb24gdGhlIGRlZmF1bHQgaW5zdGFuY2UuCi0gIGNv
bnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvciogbXNnX2ZpZWxkID0KLSAgICAg
IGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiKTsKLSAgRVhQ
RUNUX0VRKGZhbHNlLCByLT5IYXNGaWVsZCgKLSAgICAgIHByb3RvMl9ub2ZpZWxkcHJlc2VuY2Vf
dW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6Ci0gICAgICBkZWZhdWx0X2luc3RhbmNlKCksIG1zZ19m
aWVsZCkpOwotCi0gIC8vIEZpbGwgYWxsIGZpZWxkcywgZXhwZWN0IGV2ZXJ5dGhpbmcgdG8gcmVw
b3J0IHRydWUgKGNoZWNrIG9uZW9mcyBiZWxvdykuCi0gIEZpbGxWYWx1ZXMoJm1lc3NhZ2UpOwot
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPmZpZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNv
bnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjLT5maWVs
ZChpKTsKLSAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkgfHwgZmllbGQtPmNvbnRhaW5pbmdf
b25lb2YoKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGlmIChmaWVsZC0+b3B0aW9u
cygpLmN0eXBlKCkgIT0gZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRPcHRpb25zOjpTVFJJTkcpIHsK
LSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBFWFBFQ1RfRVEodHJ1ZSwgci0+SGFzRmllbGQo
bWVzc2FnZSwgZmllbGQpKTsKLSAgfQotCi0gIG1lc3NhZ2UuQ2xlYXIoKTsKLQotICAvLyBDaGVj
ayB6ZXJvL2VtcHR5LW1lYW5zLW5vdC1wcmVzZW50IHNlbWFudGljcy4KLSAgY29uc3QgZ29vZ2xl
Ojpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBmaWVsZF9pbnQzMiA9IGRlc2MtPkZpbmRGaWVs
ZEJ5TmFtZSgKLSAgICAgICJvcHRpb25hbF9pbnQzMiIpOwotICBjb25zdCBnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2RvdWJsZSA9IGRlc2MtPkZpbmRGaWVsZEJ5TmFt
ZSgKLSAgICAgICJvcHRpb25hbF9kb3VibGUiKTsKLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6
RmllbGREZXNjcmlwdG9yKiBmaWVsZF9zdHJpbmcgPSBkZXNjLT5GaW5kRmllbGRCeU5hbWUoCi0g
ICAgICAib3B0aW9uYWxfc3RyaW5nIik7Ci0KLSAgRVhQRUNUX0VRKGZhbHNlLCByLT5IYXNGaWVs
ZChtZXNzYWdlLCBmaWVsZF9pbnQzMikpOwotICBFWFBFQ1RfRVEoZmFsc2UsIHItPkhhc0ZpZWxk
KG1lc3NhZ2UsIGZpZWxkX2RvdWJsZSkpOwotICBFWFBFQ1RfRVEoZmFsc2UsIHItPkhhc0ZpZWxk
KG1lc3NhZ2UsIGZpZWxkX3N0cmluZykpOwotCi0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX2ludDMy
KDQyKTsKLSAgRVhQRUNUX0VRKHRydWUsIHItPkhhc0ZpZWxkKG1lc3NhZ2UsIGZpZWxkX2ludDMy
KSk7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX2ludDMyKDApOwotICBFWFBFQ1RfRVEoZmFsc2Us
IHItPkhhc0ZpZWxkKG1lc3NhZ2UsIGZpZWxkX2ludDMyKSk7Ci0KLSAgbWVzc2FnZS5zZXRfb3B0
aW9uYWxfZG91YmxlKDQyLjApOwotICBFWFBFQ1RfRVEodHJ1ZSwgci0+SGFzRmllbGQobWVzc2Fn
ZSwgZmllbGRfZG91YmxlKSk7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX2RvdWJsZSgwLjApOwot
ICBFWFBFQ1RfRVEoZmFsc2UsIHItPkhhc0ZpZWxkKG1lc3NhZ2UsIGZpZWxkX2RvdWJsZSkpOwot
Ci0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX3N0cmluZygidGVzdCIpOwotICBFWFBFQ1RfRVEodHJ1
ZSwgci0+SGFzRmllbGQobWVzc2FnZSwgZmllbGRfc3RyaW5nKSk7Ci0gIG1lc3NhZ2Uuc2V0X29w
dGlvbmFsX3N0cmluZygiIik7Ci0gIEVYUEVDVF9FUShmYWxzZSwgci0+SGFzRmllbGQobWVzc2Fn
ZSwgZmllbGRfc3RyaW5nKSk7Ci19Ci0KLVRFU1QoTm9GaWVsZFByZXNlbmNlVGVzdCwgUmVmbGVj
dGlvbkNsZWFyRmllbGRUZXN0KSB7Ci0gIHByb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRlc3Q6
OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotCi0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlJlZmxl
Y3Rpb24qIHIgPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgZ29vZ2xlOjpwcm90
b2J1Zjo6RGVzY3JpcHRvciogZGVzYyA9IG1lc3NhZ2UuR2V0RGVzY3JpcHRvcigpOwotCi0gIGNv
bnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvciogZmllbGRfaW50MzIgPSBkZXNj
LT5GaW5kRmllbGRCeU5hbWUoCi0gICAgICAib3B0aW9uYWxfaW50MzIiKTsKLSAgY29uc3QgZ29v
Z2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBmaWVsZF9kb3VibGUgPSBkZXNjLT5GaW5k
RmllbGRCeU5hbWUoCi0gICAgICAib3B0aW9uYWxfZG91YmxlIik7Ci0gIGNvbnN0IGdvb2dsZTo6
cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvciogZmllbGRfc3RyaW5nID0gZGVzYy0+RmluZEZpZWxk
QnlOYW1lKAotICAgICAgIm9wdGlvbmFsX3N0cmluZyIpOwotICBjb25zdCBnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZERlc2NyaXB0b3IqIGZpZWxkX21lc3NhZ2UgPSBkZXNjLT5GaW5kRmllbGRCeU5h
bWUoCi0gICAgICAib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiKTsKLSAgY29uc3QgZ29vZ2xlOjpw
cm90b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBmaWVsZF9sYXp5ID0gZGVzYy0+RmluZEZpZWxkQnlO
YW1lKAotICAgICAgIm9wdGlvbmFsX2xhenlfbWVzc2FnZSIpOwotCi0gIG1lc3NhZ2Uuc2V0X29w
dGlvbmFsX2ludDMyKDQyKTsKLSAgci0+Q2xlYXJGaWVsZCgmbWVzc2FnZSwgZmllbGRfaW50MzIp
OwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5vcHRpb25hbF9pbnQzMigpKTsKLQotICBtZXNzYWdl
LnNldF9vcHRpb25hbF9kb3VibGUoNDIuMCk7Ci0gIHItPkNsZWFyRmllbGQoJm1lc3NhZ2UsIGZp
ZWxkX2RvdWJsZSk7Ci0gIEVYUEVDVF9FUSgwLjAsIG1lc3NhZ2Uub3B0aW9uYWxfZG91YmxlKCkp
OwotCi0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX3N0cmluZygidGVzdCIpOwotICByLT5DbGVhckZp
ZWxkKCZtZXNzYWdlLCBmaWVsZF9zdHJpbmcpOwotICBFWFBFQ1RfRVEoIiIsIG1lc3NhZ2Uub3B0
aW9uYWxfc3RyaW5nKCkpOwotCi0gIG1lc3NhZ2UubXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSgpLT5zZXRfYmIoMTIzNCk7Ci0gIHItPkNsZWFyRmllbGQoJm1lc3NhZ2UsIGZpZWxkX21l
c3NhZ2UpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCku
YmIoKSk7Ci0KLSAgbWVzc2FnZS5tdXRhYmxlX29wdGlvbmFsX2xhenlfbWVzc2FnZSgpLT5zZXRf
YmIoNDIpOwotICByLT5DbGVhckZpZWxkKCZtZXNzYWdlLCBmaWVsZF9sYXp5KTsKLSAgRVhQRUNU
X0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX2xhenlfbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0VR
KDAsIG1lc3NhZ2Uub3B0aW9uYWxfbGF6eV9tZXNzYWdlKCkuYmIoKSk7Ci19Ci0KLVRFU1QoTm9G
aWVsZFByZXNlbmNlVGVzdCwgSGFzRmllbGRPbmVvZnNUZXN0KSB7Ci0gIC8vIGNoZWNrIHRoYXQg
SGFzRmllbGQgYmVoYXZlcyBwcm9wZXJseSBmb3Igb25lb2ZzLgotICBwcm90bzJfbm9maWVsZHBy
ZXNlbmNlX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsKLQotICBjb25zdCBnb29nbGU6
OnByb3RvYnVmOjpSZWZsZWN0aW9uKiByID0gbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNv
bnN0IGdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2MgPSBtZXNzYWdlLkdldERlc2Ny
aXB0b3IoKTsKLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBkZXNj
X29uZW9mX3VpbnQzMiA9Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoIm9uZW9mX3VpbnQz
MiIpOwotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3IqIGRlc2Nfb25l
b2ZfbmVzdGVkX21lc3NhZ2UgPQotICAgICAgZGVzYy0+RmluZEZpZWxkQnlOYW1lKCJvbmVvZl9u
ZXN0ZWRfbWVzc2FnZSIpOwotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0
b3IqIGRlc2Nfb25lb2Zfc3RyaW5nID0KLSAgICAgIGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgib25l
b2Zfc3RyaW5nIik7Ci0gIEdPT0dMRV9DSEVDS19OT1ROVUxMKGRlc2Nfb25lb2ZfdWludDMyKTsK
LSAgR09PR0xFX0NIRUNLX05PVE5VTEwoZGVzY19vbmVvZl9uZXN0ZWRfbWVzc2FnZSk7Ci0gIEdP
T0dMRV9DSEVDS19OT1ROVUxMKGRlc2Nfb25lb2Zfc3RyaW5nKTsKLQotICBFWFBFQ1RfRVEoZmFs
c2UsIHItPkhhc0ZpZWxkKG1lc3NhZ2UsIGRlc2Nfb25lb2ZfdWludDMyKSk7Ci0gIEVYUEVDVF9F
UShmYWxzZSwgci0+SGFzRmllbGQobWVzc2FnZSwgZGVzY19vbmVvZl9uZXN0ZWRfbWVzc2FnZSkp
OwotICBFWFBFQ1RfRVEoZmFsc2UsIHItPkhhc0ZpZWxkKG1lc3NhZ2UsIGRlc2Nfb25lb2Zfc3Ry
aW5nKSk7Ci0KLSAgbWVzc2FnZS5zZXRfb25lb2Zfc3RyaW5nKCJ0ZXN0Iik7Ci0gIEVYUEVDVF9F
UShmYWxzZSwgci0+SGFzRmllbGQobWVzc2FnZSwgZGVzY19vbmVvZl91aW50MzIpKTsKLSAgRVhQ
RUNUX0VRKGZhbHNlLCByLT5IYXNGaWVsZChtZXNzYWdlLCBkZXNjX29uZW9mX25lc3RlZF9tZXNz
YWdlKSk7Ci0gIEVYUEVDVF9FUSh0cnVlLCByLT5IYXNGaWVsZChtZXNzYWdlLCBkZXNjX29uZW9m
X3N0cmluZykpOwotICBtZXNzYWdlLm11dGFibGVfb25lb2ZfbmVzdGVkX21lc3NhZ2UoKS0+c2V0
X2JiKDQyKTsKLSAgRVhQRUNUX0VRKGZhbHNlLCByLT5IYXNGaWVsZChtZXNzYWdlLCBkZXNjX29u
ZW9mX3VpbnQzMikpOwotICBFWFBFQ1RfRVEodHJ1ZSwgci0+SGFzRmllbGQobWVzc2FnZSwgZGVz
Y19vbmVvZl9uZXN0ZWRfbWVzc2FnZSkpOwotICBFWFBFQ1RfRVEoZmFsc2UsIHItPkhhc0ZpZWxk
KG1lc3NhZ2UsIGRlc2Nfb25lb2Zfc3RyaW5nKSk7Ci0KLSAgbWVzc2FnZS5DbGVhcigpOwotICBF
WFBFQ1RfRVEoZmFsc2UsIHItPkhhc0ZpZWxkKG1lc3NhZ2UsIGRlc2Nfb25lb2ZfdWludDMyKSk7
Ci0gIEVYUEVDVF9FUShmYWxzZSwgci0+SGFzRmllbGQobWVzc2FnZSwgZGVzY19vbmVvZl9uZXN0
ZWRfbWVzc2FnZSkpOwotICBFWFBFQ1RfRVEoZmFsc2UsIHItPkhhc0ZpZWxkKG1lc3NhZ2UsIGRl
c2Nfb25lb2Zfc3RyaW5nKSk7Ci19Ci0KLVRFU1QoTm9GaWVsZFByZXNlbmNlVGVzdCwgRG9udFNl
cmlhbGl6ZURlZmF1bHRWYWx1ZXNUZXN0KSB7Ci0gIC8vIGNoZWNrIHRoYXQgc2VyaWFsaXplZCBk
YXRhIGNvbnRhaW5zIG9ubHkgbm9uLXplcm8gbnVtZXJpYyBmaWVsZHMvbm9uLWVtcHR5Ci0gIC8v
IHN0cmluZy9ieXRlIGZpZWxkcy4KLSAgcHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0dGVzdDo6
VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIHN0cmluZyBvdXRwdXQ7Ci0KLSAgLy8gQWxsIGRlZmF1
bHQgdmFsdWVzIC0+IG5vIG91dHB1dC4KLSAgbWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygmb3V0
cHV0KTsKLSAgRVhQRUNUX0VRKDAsIG91dHB1dC5zaXplKCkpOwotCi0gIC8vIFplcm8gdmFsdWVz
IC0+IHN0aWxsIG5vIG91dHB1dC4KLSAgbWVzc2FnZS5zZXRfb3B0aW9uYWxfaW50MzIoMCk7Ci0g
IG1lc3NhZ2Uuc2V0X29wdGlvbmFsX2ludDY0KDApOwotICBtZXNzYWdlLnNldF9vcHRpb25hbF91
aW50MzIoMCk7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX3VpbnQ2NCgwKTsKLSAgbWVzc2FnZS5z
ZXRfb3B0aW9uYWxfc2ludDMyKDApOwotICBtZXNzYWdlLnNldF9vcHRpb25hbF9zaW50NjQoMCk7
Ci0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX2ZpeGVkMzIoMCk7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlv
bmFsX2ZpeGVkNjQoMCk7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX3NmaXhlZDMyKDApOwotICBt
ZXNzYWdlLnNldF9vcHRpb25hbF9zZml4ZWQ2NCgwKTsKLSAgbWVzc2FnZS5zZXRfb3B0aW9uYWxf
ZmxvYXQoMCk7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlvbmFsX2RvdWJsZSgwKTsKLSAgbWVzc2FnZS5z
ZXRfb3B0aW9uYWxfYm9vbCgwKTsKLSAgbWVzc2FnZS5zZXRfb3B0aW9uYWxfc3RyaW5nKCIiKTsK
LSAgbWVzc2FnZS5zZXRfb3B0aW9uYWxfYnl0ZXMoIiIpOwotICBtZXNzYWdlLnNldF9vcHRpb25h
bF9uZXN0ZWRfZW51bSgKLSAgICAgIHByb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRlc3Q6OlRl
c3RBbGxUeXBlc19OZXN0ZWRFbnVtX0ZPTyk7ICAvLyBmaXJzdCBlbnVtIGVudHJ5Ci0gIG1lc3Nh
Z2Uuc2V0X29wdGlvbmFsX2ZvcmVpZ25fZW51bSgKLSAgICAgIHByb3RvMl9ub2ZpZWxkcHJlc2Vu
Y2VfdW5pdHRlc3Q6OkZPUkVJR05fRk9PKTsgIC8vIGZpcnN0IGVudW0gZW50cnkKLQotICBtZXNz
YWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCZvdXRwdXQpOwotICBFWFBFQ1RfRVEoMCwgb3V0cHV0LnNp
emUoKSk7Ci0KLSAgbWVzc2FnZS5zZXRfb3B0aW9uYWxfaW50MzIoMSk7Ci0gIG1lc3NhZ2UuU2Vy
aWFsaXplVG9TdHJpbmcoJm91dHB1dCk7Ci0gIEVYUEVDVF9FUSgyLCBvdXRwdXQuc2l6ZSgpKTsK
LSAgRVhQRUNUX0VRKCJceDA4XHgwMSIsIG91dHB1dCk7Ci0KLSAgbWVzc2FnZS5zZXRfb3B0aW9u
YWxfaW50MzIoMCk7Ci0gIG1lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoJm91dHB1dCk7Ci0gIEVY
UEVDVF9FUSgwLCBvdXRwdXQuc2l6ZSgpKTsKLX0KLQotVEVTVChOb0ZpZWxkUHJlc2VuY2VUZXN0
LCBNZXJnZUZyb21JZk5vbnplcm9UZXN0KSB7Ci0gIC8vIGNoZWNrIHRoYXQgTWVyZ2VGcm9tIGNv
cGllcyBpZiBub256ZXJvL25vbmRlZmF1bHQgb25seS4KLSAgcHJvdG8yX25vZmllbGRwcmVzZW5j
ZV91bml0dGVzdDo6VGVzdEFsbFR5cGVzIHNvdXJjZTsKLSAgcHJvdG8yX25vZmllbGRwcmVzZW5j
ZV91bml0dGVzdDo6VGVzdEFsbFR5cGVzIGRlc3Q7Ci0KLSAgZGVzdC5zZXRfb3B0aW9uYWxfaW50
MzIoNDIpOwotICBkZXN0LnNldF9vcHRpb25hbF9zdHJpbmcoInRlc3QiKTsKLSAgc291cmNlLnNl
dF9vcHRpb25hbF9pbnQzMigwKTsKLSAgc291cmNlLnNldF9vcHRpb25hbF9zdHJpbmcoIiIpOwot
ICAvLyBNZXJnZUZyb20oKSBjb3BpZXMgb25seSBpZiBwcmVzZW50IGluIHNlcmlhbGl6YXRpb24s
IGkuZS4sIG5vbi16ZXJvLgotICBkZXN0Lk1lcmdlRnJvbShzb3VyY2UpOwotICBFWFBFQ1RfRVEo
NDIsIGRlc3Qub3B0aW9uYWxfaW50MzIoKSk7Ci0gIEVYUEVDVF9FUSgidGVzdCIsIGRlc3Qub3B0
aW9uYWxfc3RyaW5nKCkpOwotCi0gIHNvdXJjZS5zZXRfb3B0aW9uYWxfaW50MzIoODQpOwotICBz
b3VyY2Uuc2V0X29wdGlvbmFsX3N0cmluZygidGVzdDIiKTsKLSAgZGVzdC5NZXJnZUZyb20oc291
cmNlKTsKLSAgRVhQRUNUX0VRKDg0LCBkZXN0Lm9wdGlvbmFsX2ludDMyKCkpOwotICBFWFBFQ1Rf
RVEoInRlc3QyIiwgZGVzdC5vcHRpb25hbF9zdHJpbmcoKSk7Ci19Ci0KLVRFU1QoTm9GaWVsZFBy
ZXNlbmNlVGVzdCwgSXNJbml0aWFsaXplZFRlc3QpIHsKLSAgLy8gQ2hlY2sgdGhhdCBJc0luaXRp
YWxpemVkIHdvcmtzIHByb3Blcmx5LgotICBwcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0
OjpUZXN0UHJvdG8yUmVxdWlyZWQgbWVzc2FnZTsKLQotICBFWFBFQ1RfRVEodHJ1ZSwgbWVzc2Fn
ZS5Jc0luaXRpYWxpemVkKCkpOwotICBtZXNzYWdlLm11dGFibGVfcHJvdG8yKCktPnNldF9hKDEp
OwotICBFWFBFQ1RfRVEoZmFsc2UsIG1lc3NhZ2UuSXNJbml0aWFsaXplZCgpKTsKLSAgbWVzc2Fn
ZS5tdXRhYmxlX3Byb3RvMigpLT5zZXRfYigxKTsKLSAgRVhQRUNUX0VRKGZhbHNlLCBtZXNzYWdl
LklzSW5pdGlhbGl6ZWQoKSk7Ci0gIG1lc3NhZ2UubXV0YWJsZV9wcm90bzIoKS0+c2V0X2MoMSk7
Ci0gIEVYUEVDVF9FUSh0cnVlLCBtZXNzYWdlLklzSW5pdGlhbGl6ZWQoKSk7Ci19Ci0KLVRFU1Qo
Tm9GaWVsZFByZXNlbmNlVGVzdCwgTGF6eU1lc3NhZ2VGaWVsZEhhc0JpdCkgewotICAvLyBDaGVj
ayB0aGF0IGhhcy1iaXQgaW50ZXJhY3Rpb24gd2l0aCBsYXp5IG1lc3NhZ2Ugd29ya3MgKGhhcy1i
aXQgYmVmb3JlIGFuZAotICAvLyBhZnRlciBsYXp5IGRlY29kZSkuCi0gIHByb3RvMl9ub2ZpZWxk
cHJlc2VuY2VfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotICBjb25zdCBnb29nbGU6
OnByb3RvYnVmOjpSZWZsZWN0aW9uKiByID0gbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNv
bnN0IGdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2MgPSBtZXNzYWdlLkdldERlc2Ny
aXB0b3IoKTsKLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBmaWVs
ZCA9IGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgKLSAgICAgICJvcHRpb25hbF9sYXp5X21lc3NhZ2Ui
KTsKLSAgR09PR0xFX0NIRUNLX05PVE5VTEwoZmllbGQpOwotCi0gIEVYUEVDVF9FUShmYWxzZSwg
bWVzc2FnZS5oYXNfb3B0aW9uYWxfbGF6eV9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRVEoZmFsc2Us
IHItPkhhc0ZpZWxkKG1lc3NhZ2UsIGZpZWxkKSk7Ci0KLSAgbWVzc2FnZS5tdXRhYmxlX29wdGlv
bmFsX2xhenlfbWVzc2FnZSgpLT5zZXRfYmIoNDIpOwotICBFWFBFQ1RfRVEodHJ1ZSwgbWVzc2Fn
ZS5oYXNfb3B0aW9uYWxfbGF6eV9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRVEodHJ1ZSwgci0+SGFz
RmllbGQobWVzc2FnZSwgZmllbGQpKTsKLQotICAvLyBTZXJpYWxpemUgYW5kIHBhcnNlIHdpdGgg
YSBuZXcgbWVzc2FnZSBvYmplY3Qgc28gdGhhdCBsYXp5IGZpZWxkIG9uIG5ldwotICAvLyBvYmpl
Y3QgaXMgaW4gdW5wYXJzZWQgc3RhdGUuCi0gIHN0cmluZyBvdXRwdXQ7Ci0gIG1lc3NhZ2UuU2Vy
aWFsaXplVG9TdHJpbmcoJm91dHB1dCk7Ci0gIHByb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRl
c3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlMjsKLSAgbWVzc2FnZTIuUGFyc2VGcm9tU3RyaW5nKG91
dHB1dCk7Ci0KLSAgRVhQRUNUX0VRKHRydWUsIG1lc3NhZ2UyLmhhc19vcHRpb25hbF9sYXp5X21l
c3NhZ2UoKSk7Ci0gIEVYUEVDVF9FUSh0cnVlLCByLT5IYXNGaWVsZChtZXNzYWdlMiwgZmllbGQp
KTsKLQotICAvLyBBY2Nlc3MgZmllbGQgdG8gZm9yY2UgbGF6eSBwYXJzZS4KLSAgRVhQRUNUX0VR
KDQyLCBtZXNzYWdlLm9wdGlvbmFsX2xhenlfbWVzc2FnZSgpLmJiKCkpOwotICBFWFBFQ1RfRVEo
dHJ1ZSwgbWVzc2FnZTIuaGFzX29wdGlvbmFsX2xhenlfbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0VR
KHRydWUsIHItPkhhc0ZpZWxkKG1lc3NhZ2UyLCBmaWVsZCkpOwotfQotCi1URVNUKE5vRmllbGRQ
cmVzZW5jZVRlc3QsIE9uZW9mUHJlc2VuY2UpIHsKLSAgcHJvdG8yX25vZmllbGRwcmVzZW5jZV91
bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIC8vIG9uZW9mIGZpZWxkcyBzdGlsbCBo
YXZlIGZpZWxkIHByZXNlbmNlIC0tIGVuc3VyZSB0aGF0IHRoaXMgZ29lcyBvbiB0aGUgd2lyZQot
ICAvLyBldmVuIHRob3VnaCBpdHMgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZy4KLSAgbWVzc2Fn
ZS5zZXRfb25lb2Zfc3RyaW5nKCIiKTsKLSAgc3RyaW5nIHNlcmlhbGl6ZWQ7Ci0gIG1lc3NhZ2Uu
U2VyaWFsaXplVG9TdHJpbmcoJnNlcmlhbGl6ZWQpOwotICAvLyBUYWc6IDExMyAtLT4gdGFnIGlz
ICgxMTMgPDwgMykgfCAyIChsZW5ndGggZGVsaW1pdGVkKSA9IDkwNgotICAvLyB2YXJpbnQ6IDB4
OGEgMHgwNwotICAvLyBMZW5ndGg6IDB4MDAKLSAgRVhQRUNUX0VRKDMsIHNlcmlhbGl6ZWQuc2l6
ZSgpKTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGNoYXI+KDB4OGEpLCBzZXJpYWxpemVkLmF0
KDApKTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGNoYXI+KDB4MDcpLCBzZXJpYWxpemVkLmF0
KDEpKTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGNoYXI+KDB4MDApLCBzZXJpYWxpemVkLmF0
KDIpKTsKLQotICBtZXNzYWdlLkNsZWFyKCk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuUGFyc2VG
cm9tU3RyaW5nKHNlcmlhbGl6ZWQpKTsKLSAgRVhQRUNUX0VRKHByb3RvMl9ub2ZpZWxkcHJlc2Vu
Y2VfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6a09uZW9mU3RyaW5nLAotICAgICAgICAgICAgbWVz
c2FnZS5vbmVvZl9maWVsZF9jYXNlKCkpOwotCi0gIC8vIEFsc28gdGVzdCBpbnQzMiBhbmQgZW51
bSBmaWVsZHMuCi0gIG1lc3NhZ2UuQ2xlYXIoKTsKLSAgbWVzc2FnZS5zZXRfb25lb2ZfdWludDMy
KDApOyAgLy8gd291bGQgbm90IGdvIG9uIHdpcmUgaWYgb3JkaW5hcnkgZmllbGQuCi0gIG1lc3Nh
Z2UuU2VyaWFsaXplVG9TdHJpbmcoJnNlcmlhbGl6ZWQpOwotICBFWFBFQ1RfRVEoMywgc2VyaWFs
aXplZC5zaXplKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhzZXJp
YWxpemVkKSk7Ci0gIEVYUEVDVF9FUShwcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXM6OmtPbmVvZlVpbnQzMiwKLSAgICAgICAgICAgIG1lc3NhZ2Uub25lb2ZfZmll
bGRfY2FzZSgpKTsKLQotICBtZXNzYWdlLkNsZWFyKCk7Ci0gIG1lc3NhZ2Uuc2V0X29uZW9mX2Vu
dW0ocHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0dGVzdDo6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgVGVzdEFsbFR5cGVzX05lc3RlZEVudW1fRk9PKTsgIC8vIGRlZmF1bHQgdmFsdWUuCi0g
IG1lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoJnNlcmlhbGl6ZWQpOwotICBFWFBFQ1RfRVEoMywg
c2VyaWFsaXplZC5zaXplKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLlBhcnNlRnJvbVN0cmlu
ZyhzZXJpYWxpemVkKSk7Ci0gIEVYUEVDVF9FUShwcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0
ZXN0OjpUZXN0QWxsVHlwZXM6OmtPbmVvZkVudW0sCi0gICAgICAgICAgICBtZXNzYWdlLm9uZW9m
X2ZpZWxkX2Nhc2UoKSk7Ci0KLSAgbWVzc2FnZS5DbGVhcigpOwotICBtZXNzYWdlLnNldF9vbmVv
Zl9zdHJpbmcoInRlc3QiKTsKLSAgbWVzc2FnZS5jbGVhcl9vbmVvZl9zdHJpbmcoKTsKLSAgRVhQ
RUNUX0VRKDAsIG1lc3NhZ2UuQnl0ZVNpemUoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotfSAg
Ly8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9wYWNrYWdlX2luZm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9wYWNrYWdlX2luZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM1ZTk2Mzk2
ZGMzZjIyYWEwMjY0NTZhNjMzMTk4ODAwYTZmMjhjMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcGFja2FnZV9pbmZvLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQot
Ly8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2Fu
amF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gVGhpcyBmaWxlIGV4
aXN0cyBzb2xlbHkgdG8gZG9jdW1lbnQgdGhlIGdvb2dsZTo6cHJvdG9idWYgbmFtZXNwYWNlLgot
Ly8gSXQgaXMgbm90IGNvbXBpbGVkIGludG8gYW55dGhpbmcsIGJ1dCBpdCBtYXkgYmUgcmVhZCBi
eSBhbiBhdXRvbWF0ZWQKLS8vIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLgotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLQotLy8gQ29yZSBjb21wb25lbnRzIG9mIHRoZSBQcm90b2NvbCBCdWZmZXJzIHJ1
bnRpbWUgbGlicmFyeS4KLS8vCi0vLyBUaGUgZmlsZXMgaW4gdGhpcyBwYWNrYWdlIHJlcHJlc2Vu
dCB0aGUgY29yZSBvZiB0aGUgUHJvdG9jb2wgQnVmZmVyCi0vLyBzeXN0ZW0uICBBbGwgb2YgdGhl
bSBhcmUgcGFydCBvZiB0aGUgbGlicHJvdG9idWYgbGlicmFyeS4KLS8vCi0vLyBBIG5vdGUgb24g
dGhyZWFkLXNhZmV0eToKLS8vCi0vLyBUaHJlYWQtc2FmZXR5IGluIHRoZSBQcm90b2NvbCBCdWZm
ZXIgbGlicmFyeSBmb2xsb3dzIGEgc2ltcGxlIHJ1bGU6Ci0vLyB1bmxlc3MgZXhwbGljaXRseSBu
b3RlZCBvdGhlcndpc2UsIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHVzZSBhbiBvYmplY3QKLS8vIGZy
b20gbXVsdGlwbGUgdGhyZWFkcyBzaW11bHRhbmVvdXNseSBhcyBsb25nIGFzIHRoZSBvYmplY3Qg
aXMgZGVjbGFyZWQKLS8vIGNvbnN0IGluIGFsbCB0aHJlYWRzIChvciwgaXQgaXMgb25seSB1c2Vk
IGluIHdheXMgdGhhdCB3b3VsZCBiZSBhbGxvd2VkCi0vLyBpZiBpdCB3ZXJlIGRlY2xhcmVkIGNv
bnN0KS4gIEhvd2V2ZXIsIGlmIGFuIG9iamVjdCBpcyBhY2Nlc3NlZCBpbiBvbmUKLS8vIHRocmVh
ZCBpbiBhIHdheSB0aGF0IHdvdWxkIG5vdCBiZSBhbGxvd2VkIGlmIGl0IHdlcmUgY29uc3QsIHRo
ZW4gaXQgaXMKLS8vIG5vdCBzYWZlIHRvIGFjY2VzcyB0aGF0IG9iamVjdCBpbiBhbnkgb3RoZXIg
dGhyZWFkIHNpbXVsdGFuZW91c2x5LgotLy8KLS8vIFB1dCBzaW1wbHksIHJlYWQtb25seSBhY2Nl
c3MgdG8gYW4gb2JqZWN0IGNhbiBoYXBwZW4gaW4gbXVsdGlwbGUgdGhyZWFkcwotLy8gc2ltdWx0
YW5lb3VzbHksIGJ1dCB3cml0ZSBhY2Nlc3MgY2FuIG9ubHkgaGFwcGVuIGluIGEgc2luZ2xlIHRo
cmVhZCBhdAotLy8gYSB0aW1lLgotLy8KLS8vIFRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIGNvbnRh
aW4gc29tZSAiY29uc3QiIG1ldGhvZHMgd2hpY2ggYWN0dWFsbHkgbW9kaWZ5Ci0vLyB0aGUgb2Jq
ZWN0IGJlaGluZCB0aGUgc2NlbmVzIC0tIGUuZy4sIHRvIGNhY2hlIHJlc3VsdHMgLS0gYnV0IGlu
IHRoZXNlIGNhc2VzCi0vLyBtdXRleCBsb2NraW5nIGlzIHVzZWQgdG8gbWFrZSB0aGUgYWNjZXNz
IHRocmVhZC1zYWZlLgotbmFtZXNwYWNlIHByb3RvYnVmIHt9Ci19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcHJlc2VydmVfdW5rbm93bl9lbnVt
X3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcHJlc2VydmVfdW5rbm93bl9lbnVtX3Rlc3Qu
Y2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NzNlOGFmYWVkMDJhNWI2ZDBjMzc4
MmQwYjBmYjZkMzM0MmVlNTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3ByZXNlcnZlX3Vua25vd25fZW51bV90ZXN0LmNj
CisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnBiLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3ByZXNlcnZlX3Vua25vd25fZW51bS5w
Yi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcmVzZXJ2ZV91bmtub3du
X2VudW0yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewot
bmFtZXNwYWNlIHsKLQotdm9pZCBGaWxsTWVzc2FnZSgKLSAgICBwcm90bzNfcHJlc2VydmVfdW5r
bm93bl9lbnVtX3VuaXR0ZXN0OjpNeU1lc3NhZ2VQbHVzRXh0cmEqIG1lc3NhZ2UpIHsKLSAgbWVz
c2FnZS0+c2V0X2UoCi0gICAgICBwcm90bzNfcHJlc2VydmVfdW5rbm93bl9lbnVtX3VuaXR0ZXN0
OjpFX0VYVFJBKTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2UoCi0gICAgICBwcm90bzNfcHJl
c2VydmVfdW5rbm93bl9lbnVtX3VuaXR0ZXN0OjpFX0VYVFJBKTsKLSAgbWVzc2FnZS0+YWRkX3Jl
cGVhdGVkX3BhY2tlZF9lKAotICAgICAgcHJvdG8zX3ByZXNlcnZlX3Vua25vd25fZW51bV91bml0
dGVzdDo6RV9FWFRSQSk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9wYWNrZWRfdW5leHBlY3Rl
ZF9lKAotICAgICAgcHJvdG8zX3ByZXNlcnZlX3Vua25vd25fZW51bV91bml0dGVzdDo6RV9FWFRS
QSk7Ci0gIG1lc3NhZ2UtPnNldF9vbmVvZl9lXzEoCi0gICAgICBwcm90bzNfcHJlc2VydmVfdW5r
bm93bl9lbnVtX3VuaXR0ZXN0OjpFX0VYVFJBKTsKLX0KLQotdm9pZCBDaGVja01lc3NhZ2UoCi0g
ICAgY29uc3QgcHJvdG8zX3ByZXNlcnZlX3Vua25vd25fZW51bV91bml0dGVzdDo6TXlNZXNzYWdl
UGx1c0V4dHJhJiBtZXNzYWdlKSB7Ci0gIEVYUEVDVF9FUShwcm90bzNfcHJlc2VydmVfdW5rbm93
bl9lbnVtX3VuaXR0ZXN0OjpFX0VYVFJBLAotICAgICAgICAgICAgbWVzc2FnZS5lKCkpOwotICBF
WFBFQ1RfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9lX3NpemUoKSk7Ci0gIEVYUEVDVF9FUShwcm90
bzNfcHJlc2VydmVfdW5rbm93bl9lbnVtX3VuaXR0ZXN0OjpFX0VYVFJBLAotICAgICAgICAgICAg
bWVzc2FnZS5yZXBlYXRlZF9lKDApKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UucmVwZWF0ZWRf
cGFja2VkX2Vfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHByb3RvM19wcmVzZXJ2ZV91bmtub3duX2Vu
dW1fdW5pdHRlc3Q6OkVfRVhUUkEsCi0gICAgICAgICAgICBtZXNzYWdlLnJlcGVhdGVkX3BhY2tl
ZF9lKDApKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UucmVwZWF0ZWRfcGFja2VkX3VuZXhwZWN0
ZWRfZV9zaXplKCkpOwotICBFWFBFQ1RfRVEocHJvdG8zX3ByZXNlcnZlX3Vua25vd25fZW51bV91
bml0dGVzdDo6RV9FWFRSQSwKLSAgICAgICAgICAgIG1lc3NhZ2UucmVwZWF0ZWRfcGFja2VkX3Vu
ZXhwZWN0ZWRfZSgwKSk7Ci0gIEVYUEVDVF9FUShwcm90bzNfcHJlc2VydmVfdW5rbm93bl9lbnVt
X3VuaXR0ZXN0OjpFX0VYVFJBLAotICAgICAgICAgICAgbWVzc2FnZS5vbmVvZl9lXzEoKSk7Ci19
Ci0KLXZvaWQgQ2hlY2tNZXNzYWdlKAotICAgIGNvbnN0IHByb3RvM19wcmVzZXJ2ZV91bmtub3du
X2VudW1fdW5pdHRlc3Q6Ok15TWVzc2FnZSYgbWVzc2FnZSkgewotICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8aW50PigKLSAgICAgICAgICAgICAgcHJvdG8zX3ByZXNlcnZlX3Vua25vd25fZW51bV91
bml0dGVzdDo6RV9FWFRSQSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1lc3NhZ2Uu
ZSgpKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLnJlcGVhdGVkX2Vfc2l6ZSgpKTsKLSAgRVhQ
RUNUX0VRKHN0YXRpY19jYXN0PGludD4oCi0gICAgICAgICAgICAgIHByb3RvM19wcmVzZXJ2ZV91
bmtub3duX2VudW1fdW5pdHRlc3Q6OkVfRVhUUkEpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtZXNzYWdlLnJlcGVhdGVkX2UoMCkpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UucmVw
ZWF0ZWRfcGFja2VkX2Vfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oCi0g
ICAgICAgICAgICAgIHByb3RvM19wcmVzZXJ2ZV91bmtub3duX2VudW1fdW5pdHRlc3Q6OkVfRVhU
UkEpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtZXNzYWdlLnJlcGVhdGVkX3BhY2tl
ZF9lKDApKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlLnJlcGVhdGVkX3BhY2tlZF91bmV4cGVj
dGVkX2Vfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oCi0gICAgICAgICAg
ICAgIHByb3RvM19wcmVzZXJ2ZV91bmtub3duX2VudW1fdW5pdHRlc3Q6OkVfRVhUUkEpLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtZXNzYWdlLnJlcGVhdGVkX3BhY2tlZF91bmV4cGVj
dGVkX2UoMCkpKTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oCi0gICAgICAgICAgICAg
IHByb3RvM19wcmVzZXJ2ZV91bmtub3duX2VudW1fdW5pdHRlc3Q6OkVfRVhUUkEpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50PihtZXNzYWdlLm9uZW9mX2VfMSgpKSk7Ci19Ci0KLX0gIC8v
IGFub255bW91cyBuYW1lc3BhY2UKLQotLy8gVGVzdCB0aGF0IHBhcnNpbmcgcHJlc2VydmVzIGFu
IHVua25vd24gdmFsdWUgaW4gdGhlIGVudW0gZmllbGQgYW5kIGRvZXMgbm90Ci0vLyBwdW50IGl0
IHRvIHRoZSBVbmtub3duRmllbGRTZXQuCi1URVNUKFByZXNlcnZlVW5rbm93bkVudW1UZXN0LCBQ
cmVzZXJ2ZVBhcnNlQW5kU2VyaWFsaXplKSB7Ci0gIHByb3RvM19wcmVzZXJ2ZV91bmtub3duX2Vu
dW1fdW5pdHRlc3Q6Ok15TWVzc2FnZVBsdXNFeHRyYSBvcmlnX21lc3NhZ2U7Ci0gIEZpbGxNZXNz
YWdlKCZvcmlnX21lc3NhZ2UpOwotICBzdHJpbmcgc2VyaWFsaXplZDsKLSAgb3JpZ19tZXNzYWdl
LlNlcmlhbGl6ZVRvU3RyaW5nKCZzZXJpYWxpemVkKTsKLQotICBwcm90bzNfcHJlc2VydmVfdW5r
bm93bl9lbnVtX3VuaXR0ZXN0OjpNeU1lc3NhZ2UgbWVzc2FnZTsKLSAgRVhQRUNUX0VRKHRydWUs
IG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQpKTsKLSAgQ2hlY2tNZXNzYWdlKG1l
c3NhZ2UpOwotCi0gIHNlcmlhbGl6ZWQuY2xlYXIoKTsKLSAgbWVzc2FnZS5TZXJpYWxpemVUb1N0
cmluZygmc2VyaWFsaXplZCk7Ci0gIEVYUEVDVF9FUSh0cnVlLCBvcmlnX21lc3NhZ2UuUGFyc2VG
cm9tU3RyaW5nKHNlcmlhbGl6ZWQpKTsKLSAgQ2hlY2tNZXNzYWdlKG9yaWdfbWVzc2FnZSk7Ci19
Ci0KLS8vIFRlc3QgdGhhdCByZWZsZWN0aW9uIGJhc2VkIGltcGxlbWVudGF0aW9uIGFsc28ga2Vl
cHMgdW5rbm93biBlbnVtIHZhbHVlcyBhbmQKLS8vIGRvZXNuJ3QgcHV0IHRoZW0gaW50byBVbmtu
b3duRmllbGRTZXQuCi1URVNUKFByZXNlcnZlVW5rbm93bkVudW1UZXN0LCBQcmVzZXJ2ZVBhcnNl
QW5kU2VyaWFsaXplRHluYW1pY01lc3NhZ2UpIHsKLSAgcHJvdG8zX3ByZXNlcnZlX3Vua25vd25f
ZW51bV91bml0dGVzdDo6TXlNZXNzYWdlUGx1c0V4dHJhIG9yaWdfbWVzc2FnZTsKLSAgRmlsbE1l
c3NhZ2UoJm9yaWdfbWVzc2FnZSk7Ci0gIHN0cmluZyBzZXJpYWxpemVkID0gb3JpZ19tZXNzYWdl
LlNlcmlhbGl6ZUFzU3RyaW5nKCk7Ci0KLSAgZ29vZ2xlOjpwcm90b2J1Zjo6RHluYW1pY01lc3Nh
Z2VGYWN0b3J5IGZhY3Rvcnk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8Z29vZ2xl
Ojpwcm90b2J1Zjo6TWVzc2FnZT4gbWVzc2FnZShmYWN0b3J5LkdldFByb3RvdHlwZSgKLSAgICAg
IHByb3RvM19wcmVzZXJ2ZV91bmtub3duX2VudW1fdW5pdHRlc3Q6Ok15TWVzc2FnZTo6ZGVzY3Jp
cHRvcigpKS0+TmV3KCkpOwotICBFWFBFQ1RfRVEodHJ1ZSwgbWVzc2FnZS0+UGFyc2VGcm9tU3Ry
aW5nKHNlcmlhbGl6ZWQpKTsKLSAgbWVzc2FnZS0+RGlzY2FyZFVua25vd25GaWVsZHMoKTsKLQot
ICBzZXJpYWxpemVkID0gbWVzc2FnZS0+U2VyaWFsaXplQXNTdHJpbmcoKTsKLSAgRVhQRUNUX0VR
KHRydWUsIG9yaWdfbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoc2VyaWFsaXplZCkpOwotICBDaGVj
a01lc3NhZ2Uob3JpZ19tZXNzYWdlKTsKLX0KLQotLy8gVGVzdCB0aGF0IGZvciBwcm90bzIgbWVz
c2FnZXMsIHVua25vd24gdmFsdWVzIGFyZSBpbiB1bmtub3duIGZpZWxkcy4KLVRFU1QoUHJlc2Vy
dmVVbmtub3duRW51bVRlc3QsIFByb3RvMkhpZGVzVW5rbm93blZhbHVlcykgewotICBwcm90bzNf
cHJlc2VydmVfdW5rbm93bl9lbnVtX3VuaXR0ZXN0OjpNeU1lc3NhZ2VQbHVzRXh0cmEgb3JpZ19t
ZXNzYWdlOwotICBGaWxsTWVzc2FnZSgmb3JpZ19tZXNzYWdlKTsKLQotICBzdHJpbmcgc2VyaWFs
aXplZDsKLSAgb3JpZ19tZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCZzZXJpYWxpemVkKTsKLQot
ICBwcm90bzJfcHJlc2VydmVfdW5rbm93bl9lbnVtX3VuaXR0ZXN0OjpNeU1lc3NhZ2UgbWVzc2Fn
ZTsKLSAgRVhQRUNUX0VRKHRydWUsIG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQp
KTsKLSAgLy8gVGhlIGludGVybWVkaWF0ZSBtZXNzYWdlIGhhcyBldmVyeXRoaW5nIGluIGl0cyAi
dW5rbm93biBmaWVsZHMiLgotICBwcm90bzJfcHJlc2VydmVfdW5rbm93bl9lbnVtX3VuaXR0ZXN0
OjpNeU1lc3NhZ2UgbWVzc2FnZTIgPSBtZXNzYWdlOwotICBtZXNzYWdlMi5EaXNjYXJkVW5rbm93
bkZpZWxkcygpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZTIuQnl0ZVNpemUoKSk7Ci0KLSAgLy8g
QnV0IHdoZW4gd2UgcGFzcyBpdCB0byB0aGUgY29ycmVjdCBzdHJ1Y3R1cmUsIGFsbCB2YWx1ZXMg
YXJlIHRoZXJlLgotICBzZXJpYWxpemVkLmNsZWFyKCk7Ci0gIG1lc3NhZ2UuU2VyaWFsaXplVG9T
dHJpbmcoJnNlcmlhbGl6ZWQpOwotICBFWFBFQ1RfRVEodHJ1ZSwgb3JpZ19tZXNzYWdlLlBhcnNl
RnJvbVN0cmluZyhzZXJpYWxpemVkKSk7Ci0gIENoZWNrTWVzc2FnZShvcmlnX21lc3NhZ2UpOwot
fQotCi0vLyBTYW1lIGFzIGJlZm9yZSwgZm9yIGEgZHluYW1pYyBtZXNzYWdlLgotVEVTVChQcmVz
ZXJ2ZVVua25vd25FbnVtVGVzdCwgRHluYW1pY1Byb3RvMkhpZGVzVW5rbm93blZhbHVlcykgewot
ICBwcm90bzNfcHJlc2VydmVfdW5rbm93bl9lbnVtX3VuaXR0ZXN0OjpNeU1lc3NhZ2VQbHVzRXh0
cmEgb3JpZ19tZXNzYWdlOwotICBGaWxsTWVzc2FnZSgmb3JpZ19tZXNzYWdlKTsKLQotICBzdHJp
bmcgc2VyaWFsaXplZDsKLSAgb3JpZ19tZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCZzZXJpYWxp
emVkKTsKLQotICBnb29nbGU6OnByb3RvYnVmOjpEeW5hbWljTWVzc2FnZUZhY3RvcnkgZmFjdG9y
eTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlPiBtZXNzYWdlKGZhY3RvcnkuR2V0UHJvdG90eXBlKAotICAgICAgcHJvdG8yX3ByZXNlcnZl
X3Vua25vd25fZW51bV91bml0dGVzdDo6TXlNZXNzYWdlOjpkZXNjcmlwdG9yKCkpLT5OZXcoKSk7
Ci0gIEVYUEVDVF9FUSh0cnVlLCBtZXNzYWdlLT5QYXJzZUZyb21TdHJpbmcoc2VyaWFsaXplZCkp
OwotICAvLyBUaGUgaW50ZXJtZWRpYXRlIG1lc3NhZ2UgaGFzIGV2ZXJ5dGhpbmcgaW4gaXRzICJ1
bmtub3duIGZpZWxkcyIuCi0gIHByb3RvMl9wcmVzZXJ2ZV91bmtub3duX2VudW1fdW5pdHRlc3Q6
Ok15TWVzc2FnZSBtZXNzYWdlMjsKLSAgbWVzc2FnZTIuQ29weUZyb20oKm1lc3NhZ2UpOwotICBt
ZXNzYWdlMi5EaXNjYXJkVW5rbm93bkZpZWxkcygpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZTIu
Qnl0ZVNpemUoKSk7Ci0KLSAgLy8gQnV0IHdoZW4gd2UgcGFzcyBpdCB0byB0aGUgY29ycmVjdCBz
dHJ1Y3R1cmUsIGFsbCB2YWx1ZXMgYXJlIHRoZXJlLgotICBzZXJpYWxpemVkLmNsZWFyKCk7Ci0g
IG1lc3NhZ2UtPlNlcmlhbGl6ZVRvU3RyaW5nKCZzZXJpYWxpemVkKTsKLSAgRVhQRUNUX0VRKHRy
dWUsIG9yaWdfbWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoc2VyaWFsaXplZCkpOwotICBDaGVja01l
c3NhZ2Uob3JpZ19tZXNzYWdlKTsKLX0KLQotLy8gVGVzdCB0aGF0IHJlZmxlY3Rpb24gcHJvdmlk
ZXMgRW51bVZhbHVlRGVzY3JpcHRvcnMgZm9yIHVua25vd24gdmFsdWVzLgotVEVTVChQcmVzZXJ2
ZVVua25vd25FbnVtVGVzdCwgRHluYW1pY0VudW1WYWx1ZURlc2NyaXB0b3JzKSB7Ci0gIHByb3Rv
M19wcmVzZXJ2ZV91bmtub3duX2VudW1fdW5pdHRlc3Q6Ok15TWVzc2FnZVBsdXNFeHRyYSBvcmln
X21lc3NhZ2U7Ci0gIEZpbGxNZXNzYWdlKCZvcmlnX21lc3NhZ2UpOwotICBzdHJpbmcgc2VyaWFs
aXplZDsKLSAgb3JpZ19tZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKCZzZXJpYWxpemVkKTsKLQot
ICBwcm90bzNfcHJlc2VydmVfdW5rbm93bl9lbnVtX3VuaXR0ZXN0OjpNeU1lc3NhZ2UgbWVzc2Fn
ZTsKLSAgRVhQRUNUX0VRKHRydWUsIG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWQp
KTsKLSAgQ2hlY2tNZXNzYWdlKG1lc3NhZ2UpOwotCi0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6
OlJlZmxlY3Rpb24qIHIgPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgZ29vZ2xl
Ojpwcm90b2J1Zjo6RGVzY3JpcHRvciogZCA9IG1lc3NhZ2UuR2V0RGVzY3JpcHRvcigpOwotICBj
b25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZC0+RmluZEZp
ZWxkQnlOYW1lKCJlIik7Ci0KLSAgLy8gVGhpcyBzaG91bGQgZHluYW1pY2FsbHkgY3JlYXRlIGFu
IEVudW1WYWx1ZURlc2NyaXB0b3IuCi0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1
ZURlc2NyaXB0b3IqIGVudW1fdmFsdWUgPSByLT5HZXRFbnVtKG1lc3NhZ2UsIGZpZWxkKTsKLSAg
RVhQRUNUX0VRKGVudW1fdmFsdWUtPm51bWJlcigpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50Pihwcm90bzNfcHJlc2VydmVfdW5rbm93bl9lbnVtX3VuaXR0ZXN0OjpFX0VYVFJBKSk7Ci0K
LSAgLy8gRmV0Y2hpbmcgdmFsdWUgZm9yIGEgc2Vjb25kIHRpbWUgc2hvdWxkIHJldHVybiB0aGUg
c2FtZSBwb2ludGVyLgotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWVEZXNjcmlw
dG9yKiBlbnVtX3ZhbHVlX3NlY29uZCA9Ci0gICAgICByLT5HZXRFbnVtKG1lc3NhZ2UsIGZpZWxk
KTsKLSAgRVhQRUNUX0VRKGVudW1fdmFsdWUsIGVudW1fdmFsdWVfc2Vjb25kKTsKLQotICAvLyBD
aGVjayB0aGUgcmVwZWF0ZWQgY2FzZSB0b28uCi0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkRGVzY3JpcHRvciogcmVwZWF0ZWRfZmllbGQgPQotICAgICAgZC0+RmluZEZpZWxkQnlOYW1l
KCJyZXBlYXRlZF9lIik7Ci0gIGVudW1fdmFsdWUgPSByLT5HZXRSZXBlYXRlZEVudW0obWVzc2Fn
ZSwgcmVwZWF0ZWRfZmllbGQsIDApOwotICBFWFBFQ1RfRVEoZW51bV92YWx1ZS0+bnVtYmVyKCks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHByb3RvM19wcmVzZXJ2ZV91bmtub3duX2Vu
dW1fdW5pdHRlc3Q6OkVfRVhUUkEpKTsKLSAgLy8gU2hvdWxkIHJldXNlIHRoZSBzYW1lIEVudW1W
YWx1ZURlc2NyaXB0b3IsIGV2ZW4gZm9yIGEgZGlmZmVyZW50IGZpZWxkLgotICBFWFBFQ1RfRVEo
ZW51bV92YWx1ZSwgZW51bV92YWx1ZV9zZWNvbmQpOwotCi0gIC8vIFdlIHNob3VsZCBiZSBhYmxl
IHRvIHVzZSB0aGUgcmV0dXJuZWQgdmFsdWUgZGVzY3JpcHRvciB0byBzZXQgYSB2YWx1ZSBvbgot
ICAvLyBhbm90aGVyIG1lc3NhZ2UuCi0gIGdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UqIG0gPSBt
ZXNzYWdlLk5ldygpOwotICByLT5TZXRFbnVtKG0sIGZpZWxkLCBlbnVtX3ZhbHVlKTsKLSAgRVhQ
RUNUX0VRKGVudW1fdmFsdWUsIHItPkdldEVudW0oKm0sIGZpZWxkKSk7Ci0gIGRlbGV0ZSBtOwot
fQotCi0vLyBUZXN0IHRoYXQgdGhlIG5ldyBpbnRlZ2VyLWJhc2VkIGVudW0gcmVmbGVjdGlvbiBB
UEkgd29ya3MuCi1URVNUKFByZXNlcnZlVW5rbm93bkVudW1UZXN0LCBJbnRlZ2VyRW51bVJlZmxl
Y3Rpb25BUEkpIHsKLSAgcHJvdG8zX3ByZXNlcnZlX3Vua25vd25fZW51bV91bml0dGVzdDo6TXlN
ZXNzYWdlIG1lc3NhZ2U7Ci0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlJlZmxlY3Rpb24qIHIg
PSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogZCA9IG1lc3NhZ2UuR2V0RGVzY3JpcHRvcigpOwotCi0gIGNvbnN0IGdvb2dsZTo6
cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvciogc2luZ3VsYXJfZmllbGQgPSBkLT5GaW5kRmllbGRC
eU5hbWUoImUiKTsKLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBy
ZXBlYXRlZF9maWVsZCA9Ci0gICAgICBkLT5GaW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2UiKTsK
LQotICByLT5TZXRFbnVtVmFsdWUoJm1lc3NhZ2UsIHNpbmd1bGFyX2ZpZWxkLCA0Mik7Ci0gIEVY
UEVDVF9FUSg0Miwgci0+R2V0RW51bVZhbHVlKG1lc3NhZ2UsIHNpbmd1bGFyX2ZpZWxkKSk7Ci0g
IHItPkFkZEVudW1WYWx1ZSgmbWVzc2FnZSwgcmVwZWF0ZWRfZmllbGQsIDQyKTsKLSAgci0+QWRk
RW51bVZhbHVlKCZtZXNzYWdlLCByZXBlYXRlZF9maWVsZCwgNDIpOwotICBFWFBFQ1RfRVEoNDIs
IHItPkdldFJlcGVhdGVkRW51bVZhbHVlKG1lc3NhZ2UsIHJlcGVhdGVkX2ZpZWxkLCAwKSk7Ci0g
IHItPlNldFJlcGVhdGVkRW51bVZhbHVlKCZtZXNzYWdlLCByZXBlYXRlZF9maWVsZCwgMSwgODQp
OwotICBFWFBFQ1RfRVEoODQsIHItPkdldFJlcGVhdGVkRW51bVZhbHVlKG1lc3NhZ2UsIHJlcGVh
dGVkX2ZpZWxkLCAxKSk7Ci0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZURlc2Ny
aXB0b3IqIGVudW1fdmFsdWUgPSByLT5HZXRFbnVtKG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ3VsYXJfZmll
bGQpOwotICBFWFBFQ1RfRVEoNDIsIGVudW1fdmFsdWUtPm51bWJlcigpKTsKLX0KLQotLy8gVGVz
dCB0aGF0IHRoZSBFbnVtVmFsdWUgQVBJIHdvcmtzIHByb3Blcmx5IGZvciBwcm90bzIgbWVzc2Fn
ZXMgYXMgd2VsbC4KLVRFU1QoUHJlc2VydmVVbmtub3duRW51bVRlc3QsIFByb3RvMkNhdGNoZXNV
bmtub3duVmFsdWVzKSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2Fn
ZTsgIC8vIHByb3RvMiBtZXNzYWdlCi0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlJlZmxlY3Rp
b24qIHIgPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1
Zjo6RGVzY3JpcHRvciogZCA9IG1lc3NhZ2UuR2V0RGVzY3JpcHRvcigpOwotICBjb25zdCBnb29n
bGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3IqIHJlcGVhdGVkX2ZpZWxkID0KLSAgICAgIGQt
PkZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfbmVzdGVkX2VudW0iKTsKLSAgLy8gQWRkIG9uZSBl
bGVtZW50IHRvIHRoZSByZXBlYXRlZCBmaWVsZCBzbyB0aGF0IHdlIGNhbiB0ZXN0Ci0gIC8vIFNl
dFJlcGVhdGVkRW51bVZhbHVlLgotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWVE
ZXNjcmlwdG9yKiBlbnVtX3ZhbHVlID0KLSAgICAgIHJlcGVhdGVkX2ZpZWxkLT5lbnVtX3R5cGUo
KS0+RmluZFZhbHVlQnlOYW1lKCJCQVIiKTsKLSAgRVhQRUNUX1RSVUUoZW51bV92YWx1ZSAhPSBO
VUxMKTsKLSAgci0+QWRkRW51bSgmbWVzc2FnZSwgcmVwZWF0ZWRfZmllbGQsIGVudW1fdmFsdWUp
OwotCi0jaWZkZWYgUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLSAgY29uc3QgZ29vZ2xlOjpwcm90
b2J1Zjo6RmllbGREZXNjcmlwdG9yKiBzaW5ndWxhcl9maWVsZCA9Ci0gICAgICBkLT5GaW5kRmll
bGRCeU5hbWUoIm9wdGlvbmFsX25lc3RlZF9lbnVtIik7Ci0gIC8vIEVudW0tZmllbGQgaW50ZWdl
ci1iYXNlZCBzZXR0ZXJzIEdPT0dMRV9EQ0hFQ0stZmFpbCBvbiBpbnZhbGlkIHZhbHVlcywgaW4g
b3JkZXIgdG8KLSAgLy8gcmVtYWluIGNvbnNpc3RlbnQgd2l0aCBwcm90bzIgZ2VuZXJhdGVkIGNv
ZGUuCi0gIEVYUEVDVF9ERUJVR19ERUFUSCh7Ci0gICAgci0+U2V0RW51bVZhbHVlKCZtZXNzYWdl
LCBzaW5ndWxhcl9maWVsZCwgNDI0Mik7Ci0gICAgci0+R2V0RW51bShtZXNzYWdlLCBzaW5ndWxh
cl9maWVsZCktPm51bWJlcigpOwotICB9LCAiU2V0RW51bVZhbHVlIGFjY2VwdHMgb25seSB2YWxp
ZCBpbnRlZ2VyIHZhbHVlcyIpOwotICBFWFBFQ1RfREVCVUdfREVBVEgoewotICAgIHItPlNldFJl
cGVhdGVkRW51bVZhbHVlKCZtZXNzYWdlLCByZXBlYXRlZF9maWVsZCwgMCwgNDI0Mik7Ci0gICAg
ci0+R2V0UmVwZWF0ZWRFbnVtKG1lc3NhZ2UsIHJlcGVhdGVkX2ZpZWxkLCAwKTsKLSAgfSwgIlNl
dFJlcGVhdGVkRW51bVZhbHVlIGFjY2VwdHMgb25seSB2YWxpZCBpbnRlZ2VyIHZhbHVlcyIpOwot
ICBFWFBFQ1RfREVCVUdfREVBVEgoewotICAgIHItPkFkZEVudW1WYWx1ZSgmbWVzc2FnZSwgcmVw
ZWF0ZWRfZmllbGQsIDQyNDIpOwotICAgIHItPkdldFJlcGVhdGVkRW51bShtZXNzYWdlLCByZXBl
YXRlZF9maWVsZCwgMSk7Ci0gIH0sICJBZGRFbnVtVmFsdWUgYWNjZXB0cyBvbmx5IHZhbGlkIGlu
dGVnZXIgdmFsdWVzIik7Ci0jZW5kaWYgIC8vIFBST1RPQlVGX0hBU19ERUFUSF9URVNUCi19Ci0K
LVRFU1QoUHJlc2VydmVVbmtub3duRW51bVRlc3QsIFN1cHBvcnRzVW5rbm93bkVudW1WYWx1ZXNB
UEkpIHsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBwcm90bzJfbWVzc2FnZTsK
LSAgcHJvdG8zX3ByZXNlcnZlX3Vua25vd25fZW51bV91bml0dGVzdDo6TXlNZXNzYWdlIG5ld19t
ZXNzYWdlOwotCi0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlJlZmxlY3Rpb24qIHByb3RvMl9y
ZWZsZWN0aW9uID0gcHJvdG8yX21lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotICBjb25zdCBnb29n
bGU6OnByb3RvYnVmOjpSZWZsZWN0aW9uKiBuZXdfcmVmbGVjdGlvbiA9IG5ld19tZXNzYWdlLkdl
dFJlZmxlY3Rpb24oKTsKLQotICBFWFBFQ1RfRkFMU0UocHJvdG8yX3JlZmxlY3Rpb24tPlN1cHBv
cnRzVW5rbm93bkVudW1WYWx1ZXMoKSk7Ci0gIEVYUEVDVF9UUlVFKG5ld19yZWZsZWN0aW9uLT5T
dXBwb3J0c1Vua25vd25FbnVtVmFsdWVzKCkpOwotfQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVm
Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
cHJvdG8zX2FyZW5hX2xpdGVfdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcHJvdG8z
X2FyZW5hX2xpdGVfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBm
MThjMDI3ZTg2ZjE1MGFjZDhjMmNhMTU4NTI0ZGFkODAzNTg3ZTAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Byb3RvM19h
cmVuYV9saXRlX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2lu
Y2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0
ZXN0X3Byb3RvM19hcmVuYV9saXRlLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Fy
ZW5hLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgot
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotdXNpbmcgcHJv
dG8zX2FyZW5hX2xpdGVfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczsKLQotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLW5hbWVzcGFjZSB7Ci0vLyBXZSBzZWxlY3RpdmVseSBzZXQvY2hlY2sgYSBmZXcgcmVw
cmVzZW50YXRpdmUgZmllbGRzIHJhdGhlciB0aGFuIGFsbCBmaWVsZHMKLS8vIGFzIHRoaXMgdGVz
dCBpcyBvbmx5IGV4cGVjdGVkIHRvIGNvdmVyIHRoZSBiYXNpY3Mgb2YgYXJlbmEgc3VwcG9ydC4K
LXZvaWQgU2V0QWxsRmllbGRzKFRlc3RBbGxUeXBlcyogbSkgewotICBtLT5zZXRfb3B0aW9uYWxf
aW50MzIoMTAwKTsKLSAgbS0+c2V0X29wdGlvbmFsX3N0cmluZygiYXNkZiIpOwotICBtLT5zZXRf
b3B0aW9uYWxfYnl0ZXMoImprbDsiKTsKLSAgbS0+bXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSgpLT5zZXRfYmIoNDIpOwotICBtLT5tdXRhYmxlX29wdGlvbmFsX2ZvcmVpZ25fbWVzc2Fn
ZSgpLT5zZXRfYyg0Myk7Ci0gIG0tPnNldF9vcHRpb25hbF9uZXN0ZWRfZW51bSgKLSAgICAgIHBy
b3RvM19hcmVuYV9saXRlX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXNfTmVzdGVkRW51bV9CQVopOwot
ICBtLT5zZXRfb3B0aW9uYWxfZm9yZWlnbl9lbnVtKAotICAgICAgcHJvdG8zX2FyZW5hX2xpdGVf
dW5pdHRlc3Q6OkZPUkVJR05fQkFaKTsKLSAgbS0+bXV0YWJsZV9vcHRpb25hbF9sYXp5X21lc3Nh
Z2UoKS0+c2V0X2JiKDQ1KTsKLSAgbS0+YWRkX3JlcGVhdGVkX2ludDMyKDEwMCk7Ci0gIG0tPmFk
ZF9yZXBlYXRlZF9zdHJpbmcoImFzZGYiKTsKLSAgbS0+YWRkX3JlcGVhdGVkX2J5dGVzKCJqa2w7
Iik7Ci0gIG0tPmFkZF9yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSgpLT5zZXRfYmIoNDYpOwotICBt
LT5hZGRfcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlKCktPnNldF9jKDQ3KTsKLSAgbS0+YWRkX3Jl
cGVhdGVkX25lc3RlZF9lbnVtKAotICAgICAgcHJvdG8zX2FyZW5hX2xpdGVfdW5pdHRlc3Q6OlRl
c3RBbGxUeXBlc19OZXN0ZWRFbnVtX0JBWik7Ci0gIG0tPmFkZF9yZXBlYXRlZF9mb3JlaWduX2Vu
dW0oCi0gICAgICBwcm90bzNfYXJlbmFfbGl0ZV91bml0dGVzdDo6Rk9SRUlHTl9CQVopOwotICBt
LT5hZGRfcmVwZWF0ZWRfbGF6eV9tZXNzYWdlKCktPnNldF9iYig0OSk7Ci0KLSAgbS0+c2V0X29u
ZW9mX3VpbnQzMigxKTsKLSAgbS0+bXV0YWJsZV9vbmVvZl9uZXN0ZWRfbWVzc2FnZSgpLT5zZXRf
YmIoNTApOwotICBtLT5zZXRfb25lb2Zfc3RyaW5nKCJ0ZXN0Iik7ICAvLyBvbmx5IHRoaXMgb25l
IHJlbWFpbnMgc2V0Ci19Ci0KLXZvaWQgRXhwZWN0QWxsRmllbGRzU2V0KGNvbnN0IFRlc3RBbGxU
eXBlcyYgbSkgewotICBFWFBFQ1RfRVEoMTAwLCBtLm9wdGlvbmFsX2ludDMyKCkpOwotICBFWFBF
Q1RfRVEoImFzZGYiLCBtLm9wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKCJqa2w7Iiwg
bS5vcHRpb25hbF9ieXRlcygpKTsKLSAgRVhQRUNUX0VRKHRydWUsIG0uaGFzX29wdGlvbmFsX25l
c3RlZF9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRVEoNDIsIG0ub3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UoKS5iYigpKTsKLSAgRVhQRUNUX0VRKHRydWUsIG0uaGFzX29wdGlvbmFsX2ZvcmVpZ25fbWVz
c2FnZSgpKTsKLSAgRVhQRUNUX0VRKDQzLCBtLm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSgpLmMo
KSk7Ci0gIEVYUEVDVF9FUShwcm90bzNfYXJlbmFfbGl0ZV91bml0dGVzdDo6VGVzdEFsbFR5cGVz
X05lc3RlZEVudW1fQkFaLAotICAgICAgICAgICAgbS5vcHRpb25hbF9uZXN0ZWRfZW51bSgpKTsK
LSAgRVhQRUNUX0VRKHByb3RvM19hcmVuYV9saXRlX3VuaXR0ZXN0OjpGT1JFSUdOX0JBWiwKLSAg
ICAgICAgICAgIG0ub3B0aW9uYWxfZm9yZWlnbl9lbnVtKCkpOwotICBFWFBFQ1RfRVEodHJ1ZSwg
bS5oYXNfb3B0aW9uYWxfbGF6eV9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRVEoNDUsIG0ub3B0aW9u
YWxfbGF6eV9tZXNzYWdlKCkuYmIoKSk7Ci0KLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfaW50
MzJfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEwMCwgbS5yZXBlYXRlZF9pbnQzMigwKSk7Ci0gIEVY
UEVDVF9FUSgxLCBtLnJlcGVhdGVkX3N0cmluZ19zaXplKCkpOwotICBFWFBFQ1RfRVEoImFzZGYi
LCBtLnJlcGVhdGVkX3N0cmluZygwKSk7Ci0gIEVYUEVDVF9FUSgxLCBtLnJlcGVhdGVkX2J5dGVz
X3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgiamtsOyIsIG0ucmVwZWF0ZWRfYnl0ZXMoMCkpOwotICBF
WFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9zaXplKCkpOwotICBFWFBFQ1Rf
RVEoNDYsIG0ucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UoMCkuYmIoKSk7Ci0gIEVYUEVDVF9FUSgx
LCBtLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9zaXplKCkpOwotICBFWFBFQ1RfRVEoNDcsIG0u
cmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlKDApLmMoKSk7Ci0gIEVYUEVDVF9FUSgxLCBtLnJlcGVh
dGVkX25lc3RlZF9lbnVtX3NpemUoKSk7Ci0gIEVYUEVDVF9FUShwcm90bzNfYXJlbmFfbGl0ZV91
bml0dGVzdDo6VGVzdEFsbFR5cGVzX05lc3RlZEVudW1fQkFaLAotICAgICAgICAgICAgbS5yZXBl
YXRlZF9uZXN0ZWRfZW51bSgwKSk7Ci0gIEVYUEVDVF9FUSgxLCBtLnJlcGVhdGVkX2ZvcmVpZ25f
ZW51bV9zaXplKCkpOwotICBFWFBFQ1RfRVEocHJvdG8zX2FyZW5hX2xpdGVfdW5pdHRlc3Q6OkZP
UkVJR05fQkFaLAotICAgICAgICAgICAgbS5yZXBlYXRlZF9mb3JlaWduX2VudW0oMCkpOwotICBF
WFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9sYXp5X21lc3NhZ2Vfc2l6ZSgpKTsKLSAgRVhQRUNUX0VR
KDQ5LCBtLnJlcGVhdGVkX2xhenlfbWVzc2FnZSgwKS5iYigpKTsKLQotICBFWFBFQ1RfRVEocHJv
dG8zX2FyZW5hX2xpdGVfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6a09uZW9mU3RyaW5nLAotICAg
ICAgICAgICAgbS5vbmVvZl9maWVsZF9jYXNlKCkpOwotICBFWFBFQ1RfRVEoInRlc3QiLCBtLm9u
ZW9mX3N0cmluZygpKTsKLX0KLQotLy8gSW4gdGhpcyBmaWxlIHdlIG9ubHkgdGVzdCBzb21lIGJh
c2ljIGZ1bmN0aW9uYWxpdGllcyBvZiBhcmVuYSBzdXBwb3J0IGluCi0vLyBwcm90bzMgYW5kIGV4
cGVjdCB0aGUgYXJlbmEgc3VwcG9ydCB0byBiZSBmdWxseSB0ZXN0ZWQgaW4gcHJvdG8yIHVuaXR0
ZXN0cwotLy8gYmVjYXVzZSBwcm90bzMgc2hhcmVzIG1vc3QgY29kZSB3aXRoIHByb3RvMi4KLQot
VEVTVChQcm90bzNBcmVuYUxpdGVUZXN0LCBQYXJzaW5nKSB7Ci0gIFRlc3RBbGxUeXBlcyBvcmln
aW5hbDsKLSAgU2V0QWxsRmllbGRzKCZvcmlnaW5hbCk7Ci0KLSAgQXJlbmEgYXJlbmE7Ci0gIFRl
c3RBbGxUeXBlcyogYXJlbmFfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxU
eXBlcz4oJmFyZW5hKTsKLSAgYXJlbmFfbWVzc2FnZS0+UGFyc2VGcm9tU3RyaW5nKG9yaWdpbmFs
LlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotICBFeHBlY3RBbGxGaWVsZHNTZXQoKmFyZW5hX21lc3Nh
Z2UpOwotfQotCi1URVNUKFByb3RvM0FyZW5hTGl0ZVRlc3QsIFN3YXApIHsKLSAgQXJlbmEgYXJl
bmExOwotICBBcmVuYSBhcmVuYTI7Ci0KLSAgLy8gVGVzdCBTd2FwKCkuCi0gIFRlc3RBbGxUeXBl
cyogYXJlbmExX21lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZh
cmVuYTEpOwotICBUZXN0QWxsVHlwZXMqIGFyZW5hMl9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1l
c3NhZ2U8VGVzdEFsbFR5cGVzPigmYXJlbmEyKTsKLSAgYXJlbmExX21lc3NhZ2UtPlN3YXAoYXJl
bmEyX21lc3NhZ2UpOwotICBFWFBFQ1RfRVEoJmFyZW5hMSwgYXJlbmExX21lc3NhZ2UtPkdldEFy
ZW5hKCkpOwotICBFWFBFQ1RfRVEoJmFyZW5hMiwgYXJlbmEyX21lc3NhZ2UtPkdldEFyZW5hKCkp
OwotfQotCi1URVNUKFByb3RvM0FyZW5hTGl0ZVRlc3QsIFNldEFsbG9jYXRlZE1lc3NhZ2UpIHsK
LSAgQXJlbmEgYXJlbmE7Ci0gIFRlc3RBbGxUeXBlcyAqYXJlbmFfbWVzc2FnZSA9IEFyZW5hOjpD
cmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4oJmFyZW5hKTsKLSAgVGVzdEFsbFR5cGVzOjpOZXN0
ZWRNZXNzYWdlKiBuZXN0ZWQgPSBuZXcgVGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlOwotICBu
ZXN0ZWQtPnNldF9iYigxMTgpOwotICBhcmVuYV9tZXNzYWdlLT5zZXRfYWxsb2NhdGVkX29wdGlv
bmFsX25lc3RlZF9tZXNzYWdlKG5lc3RlZCk7Ci0gIEVYUEVDVF9FUSgxMTgsIGFyZW5hX21lc3Nh
Z2UtPm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCkuYmIoKSk7Ci19Ci0KLVRFU1QoUHJvdG8zQXJl
bmFMaXRlVGVzdCwgUmVsZWFzZU1lc3NhZ2UpIHsKLSAgQXJlbmEgYXJlbmE7Ci0gIFRlc3RBbGxU
eXBlcyogYXJlbmFfbWVzc2FnZSA9IEFyZW5hOjpDcmVhdGVNZXNzYWdlPFRlc3RBbGxUeXBlcz4o
JmFyZW5hKTsKLSAgYXJlbmFfbWVzc2FnZS0+bXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2Fn
ZSgpLT5zZXRfYmIoMTE4KTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxUZXN0QWxs
VHlwZXM6Ok5lc3RlZE1lc3NhZ2U+IG5lc3RlZCgKLSAgICAgIGFyZW5hX21lc3NhZ2UtPnJlbGVh
c2Vfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9FUSgxMTgsIG5lc3RlZC0+
YmIoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19
ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcHJv
dG8zX2FyZW5hX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Byb3RvM19hcmVuYV91
bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgzOGUwZmM2NDQwNzhj
NjgwMDMyMzc1Y2FiNDI0MjQ4ZjY4OGU0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcHJvdG8zX2FyZW5hX3VuaXR0ZXN0
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNp
Zm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFy
ZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvdGVzdF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0
LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3Byb3RvM19hcmVuYS5w
Yi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLXVzaW5nIHByb3RvM19hcmVuYV91bml0dGVzdDo6VGVz
dEFsbFR5cGVzOwotCi1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHsKLS8vIFdlIHNl
bGVjdGl2ZWx5IHNldC9jaGVjayBhIGZldyByZXByZXNlbnRhdGl2ZSBmaWVsZHMgcmF0aGVyIHRo
YW4gYWxsIGZpZWxkcwotLy8gYXMgdGhpcyB0ZXN0IGlzIG9ubHkgZXhwZWN0ZWQgdG8gY292ZXIg
dGhlIGJhc2ljcyBvZiBhcmVuYSBzdXBwb3J0Lgotdm9pZCBTZXRBbGxGaWVsZHMoVGVzdEFsbFR5
cGVzKiBtKSB7Ci0gIG0tPnNldF9vcHRpb25hbF9pbnQzMigxMDApOwotICBtLT5zZXRfb3B0aW9u
YWxfc3RyaW5nKCJhc2RmIik7Ci0gIG0tPnNldF9vcHRpb25hbF9ieXRlcygiamtsOyIpOwotICBt
LT5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCktPnNldF9iYig0Mik7Ci0gIG0tPm11
dGFibGVfb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlKCktPnNldF9jKDQzKTsKLSAgbS0+c2V0X29w
dGlvbmFsX25lc3RlZF9lbnVtKAotICAgICAgcHJvdG8zX2FyZW5hX3VuaXR0ZXN0OjpUZXN0QWxs
VHlwZXNfTmVzdGVkRW51bV9CQVopOwotICBtLT5zZXRfb3B0aW9uYWxfZm9yZWlnbl9lbnVtKAot
ICAgICAgcHJvdG8zX2FyZW5hX3VuaXR0ZXN0OjpGT1JFSUdOX0JBWik7Ci0gIG0tPm11dGFibGVf
b3B0aW9uYWxfbGF6eV9tZXNzYWdlKCktPnNldF9iYig0NSk7Ci0gIG0tPmFkZF9yZXBlYXRlZF9p
bnQzMigxMDApOwotICBtLT5hZGRfcmVwZWF0ZWRfc3RyaW5nKCJhc2RmIik7Ci0gIG0tPmFkZF9y
ZXBlYXRlZF9ieXRlcygiamtsOyIpOwotICBtLT5hZGRfcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Uo
KS0+c2V0X2JiKDQ2KTsKLSAgbS0+YWRkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgpLT5zZXRf
Yyg0Nyk7Ci0gIG0tPmFkZF9yZXBlYXRlZF9uZXN0ZWRfZW51bSgKLSAgICAgIHByb3RvM19hcmVu
YV91bml0dGVzdDo6VGVzdEFsbFR5cGVzX05lc3RlZEVudW1fQkFaKTsKLSAgbS0+YWRkX3JlcGVh
dGVkX2ZvcmVpZ25fZW51bSgKLSAgICAgIHByb3RvM19hcmVuYV91bml0dGVzdDo6Rk9SRUlHTl9C
QVopOwotICBtLT5hZGRfcmVwZWF0ZWRfbGF6eV9tZXNzYWdlKCktPnNldF9iYig0OSk7Ci0KLSAg
bS0+c2V0X29uZW9mX3VpbnQzMigxKTsKLSAgbS0+bXV0YWJsZV9vbmVvZl9uZXN0ZWRfbWVzc2Fn
ZSgpLT5zZXRfYmIoNTApOwotICBtLT5zZXRfb25lb2Zfc3RyaW5nKCJ0ZXN0Iik7ICAvLyBvbmx5
IHRoaXMgb25lIHJlbWFpbnMgc2V0Ci19Ci0KLXZvaWQgRXhwZWN0QWxsRmllbGRzU2V0KGNvbnN0
IFRlc3RBbGxUeXBlcyYgbSkgewotICBFWFBFQ1RfRVEoMTAwLCBtLm9wdGlvbmFsX2ludDMyKCkp
OwotICBFWFBFQ1RfRVEoImFzZGYiLCBtLm9wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNUX0VR
KCJqa2w7IiwgbS5vcHRpb25hbF9ieXRlcygpKTsKLSAgRVhQRUNUX0VRKHRydWUsIG0uaGFzX29w
dGlvbmFsX25lc3RlZF9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRVEoNDIsIG0ub3B0aW9uYWxfbmVz
dGVkX21lc3NhZ2UoKS5iYigpKTsKLSAgRVhQRUNUX0VRKHRydWUsIG0uaGFzX29wdGlvbmFsX2Zv
cmVpZ25fbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0VRKDQzLCBtLm9wdGlvbmFsX2ZvcmVpZ25fbWVz
c2FnZSgpLmMoKSk7Ci0gIEVYUEVDVF9FUShwcm90bzNfYXJlbmFfdW5pdHRlc3Q6OlRlc3RBbGxU
eXBlc19OZXN0ZWRFbnVtX0JBWiwKLSAgICAgICAgICAgIG0ub3B0aW9uYWxfbmVzdGVkX2VudW0o
KSk7Ci0gIEVYUEVDVF9FUShwcm90bzNfYXJlbmFfdW5pdHRlc3Q6OkZPUkVJR05fQkFaLAotICAg
ICAgICAgICAgbS5vcHRpb25hbF9mb3JlaWduX2VudW0oKSk7Ci0gIEVYUEVDVF9FUSh0cnVlLCBt
Lmhhc19vcHRpb25hbF9sYXp5X21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9FUSg0NSwgbS5vcHRpb25h
bF9sYXp5X21lc3NhZ2UoKS5iYigpKTsKLQotICBFWFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9pbnQz
Ml9zaXplKCkpOwotICBFWFBFQ1RfRVEoMTAwLCBtLnJlcGVhdGVkX2ludDMyKDApKTsKLSAgRVhQ
RUNUX0VRKDEsIG0ucmVwZWF0ZWRfc3RyaW5nX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgiYXNkZiIs
IG0ucmVwZWF0ZWRfc3RyaW5nKDApKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfYnl0ZXNf
c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKCJqa2w7IiwgbS5yZXBlYXRlZF9ieXRlcygwKSk7Ci0gIEVY
UEVDVF9FUSgxLCBtLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX3NpemUoKSk7Ci0gIEVYUEVDVF9F
USg0NiwgbS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSgwKS5iYigpKTsKLSAgRVhQRUNUX0VRKDEs
IG0ucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSg0NywgbS5y
ZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoMCkuYygpKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0
ZWRfbmVzdGVkX2VudW1fc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHByb3RvM19hcmVuYV91bml0dGVz
dDo6VGVzdEFsbFR5cGVzX05lc3RlZEVudW1fQkFaLAotICAgICAgICAgICAgbS5yZXBlYXRlZF9u
ZXN0ZWRfZW51bSgwKSk7Ci0gIEVYUEVDVF9FUSgxLCBtLnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9z
aXplKCkpOwotICBFWFBFQ1RfRVEocHJvdG8zX2FyZW5hX3VuaXR0ZXN0OjpGT1JFSUdOX0JBWiwK
LSAgICAgICAgICAgIG0ucmVwZWF0ZWRfZm9yZWlnbl9lbnVtKDApKTsKLSAgRVhQRUNUX0VRKDEs
IG0ucmVwZWF0ZWRfbGF6eV9tZXNzYWdlX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSg0OSwgbS5yZXBl
YXRlZF9sYXp5X21lc3NhZ2UoMCkuYmIoKSk7Ci0KLSAgRVhQRUNUX0VRKHByb3RvM19hcmVuYV91
bml0dGVzdDo6VGVzdEFsbFR5cGVzOjprT25lb2ZTdHJpbmcsCi0gICAgICAgICAgICBtLm9uZW9m
X2ZpZWxkX2Nhc2UoKSk7Ci0gIEVYUEVDVF9FUSgidGVzdCIsIG0ub25lb2Zfc3RyaW5nKCkpOwot
fQotCi0vLyBJbiB0aGlzIGZpbGUgd2Ugb25seSB0ZXN0IHNvbWUgYmFzaWMgZnVuY3Rpb25hbGl0
aWVzIG9mIGFyZW5hIHN1cHBvcnQgaW4KLS8vIHByb3RvMyBhbmQgZXhwZWN0IHRoZSBhcmVuYSBz
dXBwb3J0IHRvIGJlIGZ1bGx5IHRlc3RlZCBpbiBwcm90bzIgdW5pdHRlc3RzCi0vLyBiZWNhdXNl
IHByb3RvMyBzaGFyZXMgbW9zdCBjb2RlIHdpdGggcHJvdG8yLgotCi1URVNUKFByb3RvM0FyZW5h
VGVzdCwgUGFyc2luZykgewotICBUZXN0QWxsVHlwZXMgb3JpZ2luYWw7Ci0gIFNldEFsbEZpZWxk
cygmb3JpZ2luYWwpOwotCi0gIEFyZW5hIGFyZW5hOwotICBUZXN0QWxsVHlwZXMqIGFyZW5hX21l
c3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYSk7Ci0gIGFy
ZW5hX21lc3NhZ2UtPlBhcnNlRnJvbVN0cmluZyhvcmlnaW5hbC5TZXJpYWxpemVBc1N0cmluZygp
KTsKLSAgRXhwZWN0QWxsRmllbGRzU2V0KCphcmVuYV9tZXNzYWdlKTsKLX0KLQotVEVTVChQcm90
bzNBcmVuYVRlc3QsIFVua25vd25GaWVsZHMpIHsKLSAgVGVzdEFsbFR5cGVzIG9yaWdpbmFsOwot
ICBTZXRBbGxGaWVsZHMoJm9yaWdpbmFsKTsKLQotICBBcmVuYSBhcmVuYTsKLSAgVGVzdEFsbFR5
cGVzKiBhcmVuYV9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigm
YXJlbmEpOwotICBhcmVuYV9tZXNzYWdlLT5QYXJzZUZyb21TdHJpbmcob3JpZ2luYWwuU2VyaWFs
aXplQXNTdHJpbmcoKSk7Ci0gIEV4cGVjdEFsbEZpZWxkc1NldCgqYXJlbmFfbWVzc2FnZSk7Ci0K
LSAgLy8gSW4gcHJvdG8zIHdlIGNhbiBzdGlsbCBnZXQgYSBwb2ludGVyIHRvIHRoZSBVbmtub3du
RmllbGRTZXQgdGhyb3VnaAotICAvLyByZWZsZWN0aW9uIEFQSS4KLSAgVW5rbm93bkZpZWxkU2V0
KiB1bmtub3duX2ZpZWxkcyA9Ci0gICAgICBhcmVuYV9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCkt
Pk11dGFibGVVbmtub3duRmllbGRzKGFyZW5hX21lc3NhZ2UpOwotICAvLyBXZSBjYW4gbW9kaWZ5
IHRoaXMgVW5rbm93bkZpZWxkU2V0LgotICB1bmtub3duX2ZpZWxkcy0+QWRkVmFyaW50KDEsIDIp
OwotICAvLyBCdXQgdGhlIGNoYW5nZSB3aWxsIG5ldmVyIHdpbGwgc2VyaWFsaXplZCBiYWNrLgot
ICBBU1NFUlRfRVEob3JpZ2luYWwuQnl0ZVNpemUoKSwgYXJlbmFfbWVzc2FnZS0+Qnl0ZVNpemUo
KSk7Ci0gIEFTU0VSVF9UUlVFKAotICAgICAgYXJlbmFfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigp
LT5HZXRVbmtub3duRmllbGRzKCphcmVuYV9tZXNzYWdlKS5lbXB0eSgpKTsKLX0KLQotVEVTVChQ
cm90bzNBcmVuYVRlc3QsIFN3YXApIHsKLSAgQXJlbmEgYXJlbmExOwotICBBcmVuYSBhcmVuYTI7
Ci0KLSAgLy8gVGVzdCBTd2FwKCkuCi0gIFRlc3RBbGxUeXBlcyogYXJlbmExX21lc3NhZ2UgPSBB
cmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYTEpOwotICBUZXN0QWxsVHlw
ZXMqIGFyZW5hMl9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVzPigm
YXJlbmEyKTsKLSAgYXJlbmExX21lc3NhZ2UtPlN3YXAoYXJlbmEyX21lc3NhZ2UpOwotICBFWFBF
Q1RfRVEoJmFyZW5hMSwgYXJlbmExX21lc3NhZ2UtPkdldEFyZW5hKCkpOwotICBFWFBFQ1RfRVEo
JmFyZW5hMiwgYXJlbmEyX21lc3NhZ2UtPkdldEFyZW5hKCkpOwotfQotCi1URVNUKFByb3RvM0Fy
ZW5hVGVzdCwgU2V0QWxsb2NhdGVkTWVzc2FnZSkgewotICBBcmVuYSBhcmVuYTsKLSAgVGVzdEFs
bFR5cGVzICphcmVuYV9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVzdEFsbFR5cGVz
PigmYXJlbmEpOwotICBUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UqIG5lc3RlZCA9IG5ldyBU
ZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2U7Ci0gIG5lc3RlZC0+c2V0X2JiKDExOCk7Ci0gIGFy
ZW5hX21lc3NhZ2UtPnNldF9hbGxvY2F0ZWRfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UobmVzdGVk
KTsKLSAgRVhQRUNUX0VRKDExOCwgYXJlbmFfbWVzc2FnZS0+b3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UoKS5iYigpKTsKLX0KLQotVEVTVChQcm90bzNBcmVuYVRlc3QsIFJlbGVhc2VNZXNzYWdlKSB7
Ci0gIEFyZW5hIGFyZW5hOwotICBUZXN0QWxsVHlwZXMqIGFyZW5hX21lc3NhZ2UgPSBBcmVuYTo6
Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYSk7Ci0gIGFyZW5hX21lc3NhZ2UtPm11
dGFibGVfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKS0+c2V0X2JiKDExOCk7Ci0gIGdvb2dsZTo6
cHJvdG9idWY6OnNjb3BlZF9wdHI8VGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdlPiBuZXN0ZWQo
Ci0gICAgICBhcmVuYV9tZXNzYWdlLT5yZWxlYXNlX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCkp
OwotICBFWFBFQ1RfRVEoMTE4LCBuZXN0ZWQtPmJiKCkpOwotfQotCi1URVNUKFByb3RvM0FyZW5h
VGVzdCwgTWVzc2FnZUZpZWxkQ2xlYXIpIHsKLSAgLy8gR2l0SHViIGlzc3VlICMzMTA6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWYvaXNzdWVzLzMxMAotICBBcmVuYSBhcmVuYTsK
LSAgVGVzdEFsbFR5cGVzKiBhcmVuYV9tZXNzYWdlID0gQXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGVz
dEFsbFR5cGVzPigmYXJlbmEpOwotICBhcmVuYV9tZXNzYWdlLT5tdXRhYmxlX29wdGlvbmFsX25l
c3RlZF9tZXNzYWdlKCktPnNldF9iYigxMTgpOwotICAvLyBUaGlzIHNob3VsZCBub3QgY3Jhc2gs
IGJ1dCBwcmlvciB0byB0aGUgYnVnZml4LCBpdCB0cmllZCB0byB1c2UgYG9wZXJhdG9yCi0gIC8v
IGRlbGV0ZWAgdGhlIG5lc3RlZCBtZXNzYWdlICh3aGljaCBpcyBvbiB0aGUgYXJlbmEpOgotICBh
cmVuYV9tZXNzYWdlLT5DbGVhcigpOwotfQotCi1URVNUKFByb3RvM0FyZW5hVGVzdCwgTWVzc2Fn
ZUZpZWxkQ2xlYXJWaWFSZWZsZWN0aW9uKSB7Ci0gIEFyZW5hIGFyZW5hOwotICBUZXN0QWxsVHlw
ZXMqIG1lc3NhZ2UgPSBBcmVuYTo6Q3JlYXRlTWVzc2FnZTxUZXN0QWxsVHlwZXM+KCZhcmVuYSk7
Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHIgPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNv
bnN0IERlc2NyaXB0b3IqIGQgPSBtZXNzYWdlLT5HZXREZXNjcmlwdG9yKCk7Ci0gIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogbXNnX2ZpZWxkID0gZC0+RmluZEZpZWxkQnlOYW1lKAotICAgICAgIm9w
dGlvbmFsX25lc3RlZF9tZXNzYWdlIik7Ci0KLSAgbWVzc2FnZS0+bXV0YWJsZV9vcHRpb25hbF9u
ZXN0ZWRfbWVzc2FnZSgpLT5zZXRfYmIoMSk7Ci0gIHItPkNsZWFyRmllbGQobWVzc2FnZSwgbXNn
X2ZpZWxkKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UtPmhhc19vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UtPm9wdGlvbmFsX25lc3RlZF9tZXNzYWdl
KCkuYmIoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVm
Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
cHJvdG8zX2xpdGVfdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcHJvdG8zX2xpdGVf
dW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMmJlZWE5MDk4ODNk
YmVkZTMyNjUzOTk4Y2VlYTE3YTJjZjZlZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Byb3RvM19saXRlX3VuaXR0ZXN0
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNp
Zm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFy
ZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvdGVzdF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0
LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3Byb3RvM19saXRlLnBi
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotdXNpbmcgcHJvdG8zX2xpdGVfdW5pdHRlc3Q6OlRlc3RB
bGxUeXBlczsKLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB7Ci0vLyBXZSBzZWxl
Y3RpdmVseSBzZXQvY2hlY2sgYSBmZXcgcmVwcmVzZW50YXRpdmUgZmllbGRzIHJhdGhlciB0aGFu
IGFsbCBmaWVsZHMKLS8vIGFzIHRoaXMgdGVzdCBpcyBvbmx5IGV4cGVjdGVkIHRvIGNvdmVyIHRo
ZSBiYXNpY3Mgb2YgbGl0ZSBzdXBwb3J0Lgotdm9pZCBTZXRBbGxGaWVsZHMoVGVzdEFsbFR5cGVz
KiBtKSB7Ci0gIG0tPnNldF9vcHRpb25hbF9pbnQzMigxMDApOwotICBtLT5zZXRfb3B0aW9uYWxf
c3RyaW5nKCJhc2RmIik7Ci0gIG0tPnNldF9vcHRpb25hbF9ieXRlcygiamtsOyIpOwotICBtLT5t
dXRhYmxlX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCktPnNldF9iYig0Mik7Ci0gIG0tPm11dGFi
bGVfb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlKCktPnNldF9jKDQzKTsKLSAgbS0+c2V0X29wdGlv
bmFsX25lc3RlZF9lbnVtKAotICAgICAgcHJvdG8zX2xpdGVfdW5pdHRlc3Q6OlRlc3RBbGxUeXBl
c19OZXN0ZWRFbnVtX0JBWik7Ci0gIG0tPnNldF9vcHRpb25hbF9mb3JlaWduX2VudW0oCi0gICAg
ICBwcm90bzNfbGl0ZV91bml0dGVzdDo6Rk9SRUlHTl9CQVopOwotICBtLT5tdXRhYmxlX29wdGlv
bmFsX2xhenlfbWVzc2FnZSgpLT5zZXRfYmIoNDUpOwotICBtLT5hZGRfcmVwZWF0ZWRfaW50MzIo
MTAwKTsKLSAgbS0+YWRkX3JlcGVhdGVkX3N0cmluZygiYXNkZiIpOwotICBtLT5hZGRfcmVwZWF0
ZWRfYnl0ZXMoImprbDsiKTsKLSAgbS0+YWRkX3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlKCktPnNl
dF9iYig0Nik7Ci0gIG0tPmFkZF9yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoKS0+c2V0X2MoNDcp
OwotICBtLT5hZGRfcmVwZWF0ZWRfbmVzdGVkX2VudW0oCi0gICAgICBwcm90bzNfbGl0ZV91bml0
dGVzdDo6VGVzdEFsbFR5cGVzX05lc3RlZEVudW1fQkFaKTsKLSAgbS0+YWRkX3JlcGVhdGVkX2Zv
cmVpZ25fZW51bSgKLSAgICAgIHByb3RvM19saXRlX3VuaXR0ZXN0OjpGT1JFSUdOX0JBWik7Ci0g
IG0tPmFkZF9yZXBlYXRlZF9sYXp5X21lc3NhZ2UoKS0+c2V0X2JiKDQ5KTsKLQotICBtLT5zZXRf
b25lb2ZfdWludDMyKDEpOwotICBtLT5tdXRhYmxlX29uZW9mX25lc3RlZF9tZXNzYWdlKCktPnNl
dF9iYig1MCk7Ci0gIG0tPnNldF9vbmVvZl9zdHJpbmcoInRlc3QiKTsgIC8vIG9ubHkgdGhpcyBv
bmUgcmVtYWlucyBzZXQKLX0KLQotdm9pZCBFeHBlY3RBbGxGaWVsZHNTZXQoY29uc3QgVGVzdEFs
bFR5cGVzJiBtKSB7Ci0gIEVYUEVDVF9FUSgxMDAsIG0ub3B0aW9uYWxfaW50MzIoKSk7Ci0gIEVY
UEVDVF9FUSgiYXNkZiIsIG0ub3B0aW9uYWxfc3RyaW5nKCkpOwotICBFWFBFQ1RfRVEoImprbDsi
LCBtLm9wdGlvbmFsX2J5dGVzKCkpOwotICBFWFBFQ1RfRVEodHJ1ZSwgbS5oYXNfb3B0aW9uYWxf
bmVzdGVkX21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9FUSg0MiwgbS5vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSgpLmJiKCkpOwotICBFWFBFQ1RfRVEodHJ1ZSwgbS5oYXNfb3B0aW9uYWxfZm9yZWlnbl9t
ZXNzYWdlKCkpOwotICBFWFBFQ1RfRVEoNDMsIG0ub3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlKCku
YygpKTsKLSAgRVhQRUNUX0VRKHByb3RvM19saXRlX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXNfTmVz
dGVkRW51bV9CQVosCi0gICAgICAgICAgICBtLm9wdGlvbmFsX25lc3RlZF9lbnVtKCkpOwotICBF
WFBFQ1RfRVEocHJvdG8zX2xpdGVfdW5pdHRlc3Q6OkZPUkVJR05fQkFaLAotICAgICAgICAgICAg
bS5vcHRpb25hbF9mb3JlaWduX2VudW0oKSk7Ci0gIEVYUEVDVF9FUSh0cnVlLCBtLmhhc19vcHRp
b25hbF9sYXp5X21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9FUSg0NSwgbS5vcHRpb25hbF9sYXp5X21l
c3NhZ2UoKS5iYigpKTsKLQotICBFWFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9pbnQzMl9zaXplKCkp
OwotICBFWFBFQ1RfRVEoMTAwLCBtLnJlcGVhdGVkX2ludDMyKDApKTsKLSAgRVhQRUNUX0VRKDEs
IG0ucmVwZWF0ZWRfc3RyaW5nX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgiYXNkZiIsIG0ucmVwZWF0
ZWRfc3RyaW5nKDApKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfYnl0ZXNfc2l6ZSgpKTsK
LSAgRVhQRUNUX0VRKCJqa2w7IiwgbS5yZXBlYXRlZF9ieXRlcygwKSk7Ci0gIEVYUEVDVF9FUSgx
LCBtLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSg0NiwgbS5y
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSgwKS5iYigpKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0
ZWRfZm9yZWlnbl9tZXNzYWdlX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSg0NywgbS5yZXBlYXRlZF9m
b3JlaWduX21lc3NhZ2UoMCkuYygpKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfbmVzdGVk
X2VudW1fc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHByb3RvM19saXRlX3VuaXR0ZXN0OjpUZXN0QWxs
VHlwZXNfTmVzdGVkRW51bV9CQVosCi0gICAgICAgICAgICBtLnJlcGVhdGVkX25lc3RlZF9lbnVt
KDApKTsKLSAgRVhQRUNUX0VRKDEsIG0ucmVwZWF0ZWRfZm9yZWlnbl9lbnVtX3NpemUoKSk7Ci0g
IEVYUEVDVF9FUShwcm90bzNfbGl0ZV91bml0dGVzdDo6Rk9SRUlHTl9CQVosCi0gICAgICAgICAg
ICBtLnJlcGVhdGVkX2ZvcmVpZ25fZW51bSgwKSk7Ci0gIEVYUEVDVF9FUSgxLCBtLnJlcGVhdGVk
X2xhenlfbWVzc2FnZV9zaXplKCkpOwotICBFWFBFQ1RfRVEoNDksIG0ucmVwZWF0ZWRfbGF6eV9t
ZXNzYWdlKDApLmJiKCkpOwotCi0gIEVYUEVDVF9FUShwcm90bzNfbGl0ZV91bml0dGVzdDo6VGVz
dEFsbFR5cGVzOjprT25lb2ZTdHJpbmcsCi0gICAgICAgICAgICBtLm9uZW9mX2ZpZWxkX2Nhc2Uo
KSk7Ci0gIEVYUEVDVF9FUSgidGVzdCIsIG0ub25lb2Zfc3RyaW5nKCkpOwotfQotCi0vLyBJbiB0
aGlzIGZpbGUgd2Ugb25seSB0ZXN0IHNvbWUgYmFzaWMgZnVuY3Rpb25hbGl0aWVzIG9mIGluIHBy
b3RvMyBhbmQgZXhwZWN0Ci0vLyB0aGUgcmVzdCBpcyBmdWxseSB0ZXN0ZWQgaW4gcHJvdG8yIHVu
aXR0ZXN0cyBiZWNhdXNlIHByb3RvMyBzaGFyZXMgbW9zdCBjb2RlCi0vLyB3aXRoIHByb3RvMi4K
LQotVEVTVChQcm90bzNMaXRlVGVzdCwgUGFyc2luZykgewotICBUZXN0QWxsVHlwZXMgb3JpZ2lu
YWw7Ci0gIFNldEFsbEZpZWxkcygmb3JpZ2luYWwpOwotCi0gIFRlc3RBbGxUeXBlcyBtc2c7Ci0g
IG1zZy5QYXJzZUZyb21TdHJpbmcob3JpZ2luYWwuU2VyaWFsaXplQXNTdHJpbmcoKSk7Ci0gIEV4
cGVjdEFsbEZpZWxkc1NldChtc2cpOwotfQotCi1URVNUKFByb3RvM0xpdGVUZXN0LCBTd2FwKSB7
Ci0gIC8vIFRlc3QgU3dhcCgpLgotICBUZXN0QWxsVHlwZXMgbXNnMTsKLSAgVGVzdEFsbFR5cGVz
IG1zZzI7Ci0gIG1zZzEuc2V0X29wdGlvbmFsX3N0cmluZygiMTIzIik7Ci0gIG1zZzIuc2V0X29w
dGlvbmFsX3N0cmluZygiMzQ1NiIpOwotICBtc2cxLlN3YXAoJm1zZzIpOwotICBFWFBFQ1RfRVEo
IjM0NTYiLCBtc2cxLm9wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKCIxMjMiLCBtc2cy
Lm9wdGlvbmFsX3N0cmluZygpKTsKLSAgRVhQRUNUX0VRKG1zZzEuQnl0ZVNpemUoKSwgbXNnMi5C
eXRlU2l6ZSgpICsgMSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIHBy
b3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvcmVmbGVjdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb24uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjcxYWFmZGM0ZTI3NmU2ZTMwNzUyZmRhM2M2ZGRl
ZDZlNmYwYmJmZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAw
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlzIGhl
YWRlciBkZWZpbmVzIHRoZSBSZXBlYXRlZEZpZWxkUmVmIGNsYXNzIHRlbXBsYXRlIHVzZWQgdG8g
YWNjZXNzCi0vLyByZXBlYXRlZCBmaWVsZHMgd2l0aCBwcm90b2J1ZiByZWZsZWN0aW9uIEFQSS4K
LSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1JFRkxFQ1RJT05fSF9fCi0jZGVmaW5lIEdPT0dMRV9Q
Uk9UT0JVRl9SRUZMRUNUSU9OX0hfXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBfU0hB
UkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaD4K
LSNlbmRpZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX2VudW1fdXRpbC5oPgotCi1uYW1lc3BhY2UgZ29v
Z2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KLXN0cnVjdCBSZWZUeXBlVHJh
aXRzOwotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1S
ZXBlYXRlZEZpZWxkUmVmPFQ+IFJlZmxlY3Rpb246OkdldFJlcGVhdGVkRmllbGRSZWYoCi0gICAg
Y29uc3QgTWVzc2FnZSYgbWVzc2FnZSwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgY29u
c3QgewotICByZXR1cm4gUmVwZWF0ZWRGaWVsZFJlZjxUPihtZXNzYWdlLCBmaWVsZCk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1NdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxUPiBSZWZsZWN0
aW9uOjpHZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZigKLSAgICBNZXNzYWdlKiBtZXNzYWdlLCBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBjb25zdCB7Ci0gIHJldHVybiBNdXRhYmxlUmVw
ZWF0ZWRGaWVsZFJlZjxUPihtZXNzYWdlLCBmaWVsZCk7Ci19Ci0KLS8vIFJlcGVhdGVkRmllbGRS
ZWYgZGVmaW5pdGlvbiBmb3Igbm9uLW1lc3NhZ2UgdHlwZXMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotY2xhc3MgUmVwZWF0ZWRGaWVsZFJlZjwKLSAgICBULCB0eXBlbmFtZSBpbnRlcm5hbDo6ZW5h
YmxlX2lmPCFpbnRlcm5hbDo6aXNfYmFzZV9vZjxNZXNzYWdlLCBUPjo6dmFsdWU+Ojp0eXBlPiB7
Ci0gIHR5cGVkZWYgdHlwZW5hbWUgaW50ZXJuYWw6OlJlZlR5cGVUcmFpdHM8VD46Oml0ZXJhdG9y
IEl0ZXJhdG9yVHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBpbnRlcm5hbDo6UmVmVHlwZVRyYWl0
czxUPjo6QWNjZXNzb3JUeXBlIEFjY2Vzc29yVHlwZTsKLQotIHB1YmxpYzoKLSAgYm9vbCBlbXB0
eSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNzb3JfLT5Jc0VtcHR5KGRhdGFfKTsKLSAgfQot
ICBpbnQgc2l6ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNzb3JfLT5TaXplKGRhdGFfKTsK
LSAgfQotICBUIEdldChpbnQgaW5kZXgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNzb3JfLT50
ZW1wbGF0ZSBHZXQ8VD4oZGF0YV8sIGluZGV4KTsKLSAgfQotCi0gIHR5cGVkZWYgSXRlcmF0b3JU
eXBlIGl0ZXJhdG9yOwotICB0eXBlZGVmIEl0ZXJhdG9yVHlwZSBjb25zdF9pdGVyYXRvcjsKLSAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIGl0ZXJhdG9yKGRhdGFfLCBhY2Nl
c3Nvcl8sIHRydWUpOwotICB9Ci0gIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsKLSAgICByZXR1cm4g
aXRlcmF0b3IoZGF0YV8sIGFjY2Vzc29yXywgZmFsc2UpOwotICB9Ci0KLSBwcml2YXRlOgotICBm
cmllbmQgY2xhc3MgUmVmbGVjdGlvbjsKLSAgUmVwZWF0ZWRGaWVsZFJlZigKLSAgICAgIGNvbnN0
IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7
Ci0gICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlv
bigpOwotICAgIGRhdGFfID0gcmVmbGVjdGlvbi0+UmVwZWF0ZWRGaWVsZERhdGEoCi0gICAgICAg
IGNvbnN0X2Nhc3Q8TWVzc2FnZSo+KCZtZXNzYWdlKSwgZmllbGQsCi0gICAgICAgIGludGVybmFs
OjpSZWZUeXBlVHJhaXRzPFQ+OjpjcHBfdHlwZSwgTlVMTCk7Ci0gICAgYWNjZXNzb3JfID0gcmVm
bGVjdGlvbi0+UmVwZWF0ZWRGaWVsZEFjY2Vzc29yKGZpZWxkKTsKLSAgfQotCi0gIGNvbnN0IHZv
aWQqIGRhdGFfOwotICBjb25zdCBBY2Nlc3NvclR5cGUqIGFjY2Vzc29yXzsKLX07Ci0KLS8vIE11
dGFibGVSZXBlYXRlZEZpZWxkUmVmIGRlZmluaXRpb24gZm9yIG5vbi1tZXNzYWdlIHR5cGVzLgot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIE11dGFibGVSZXBlYXRlZEZpZWxkUmVmPAotICAg
IFQsIHR5cGVuYW1lIGludGVybmFsOjplbmFibGVfaWY8IWludGVybmFsOjppc19iYXNlX29mPE1l
c3NhZ2UsIFQ+Ojp2YWx1ZT46OnR5cGU+IHsKLSAgdHlwZWRlZiB0eXBlbmFtZSBpbnRlcm5hbDo6
UmVmVHlwZVRyYWl0czxUPjo6QWNjZXNzb3JUeXBlIEFjY2Vzc29yVHlwZTsKLQotIHB1YmxpYzoK
LSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNzb3JfLT5Jc0VtcHR5KGRh
dGFfKTsKLSAgfQotICBpbnQgc2l6ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNzb3JfLT5T
aXplKGRhdGFfKTsKLSAgfQotICBUIEdldChpbnQgaW5kZXgpIGNvbnN0IHsKLSAgICByZXR1cm4g
YWNjZXNzb3JfLT50ZW1wbGF0ZSBHZXQ8VD4oZGF0YV8sIGluZGV4KTsKLSAgfQotCi0gIHZvaWQg
U2V0KGludCBpbmRleCwgY29uc3QgVCYgdmFsdWUpIGNvbnN0IHsKLSAgICBhY2Nlc3Nvcl8tPnRl
bXBsYXRlIFNldDxUPihkYXRhXywgaW5kZXgsIHZhbHVlKTsKLSAgfQotICB2b2lkIEFkZChjb25z
dCBUJiB2YWx1ZSkgY29uc3QgewotICAgIGFjY2Vzc29yXy0+dGVtcGxhdGUgQWRkPFQ+KGRhdGFf
LCB2YWx1ZSk7Ci0gIH0KLSAgdm9pZCBSZW1vdmVMYXN0KCkgY29uc3QgewotICAgIGFjY2Vzc29y
Xy0+UmVtb3ZlTGFzdChkYXRhXyk7Ci0gIH0KLSAgdm9pZCBTd2FwRWxlbWVudHMoaW50IGluZGV4
MSwgaW50IGluZGV4MikgY29uc3QgewotICAgIGFjY2Vzc29yXy0+U3dhcEVsZW1lbnRzKGRhdGFf
LCBpbmRleDEsIGluZGV4Mik7Ci0gIH0KLSAgdm9pZCBDbGVhcigpIGNvbnN0IHsKLSAgICBhY2Nl
c3Nvcl8tPkNsZWFyKGRhdGFfKTsKLSAgfQotCi0gIHZvaWQgU3dhcChjb25zdCBNdXRhYmxlUmVw
ZWF0ZWRGaWVsZFJlZiYgb3RoZXIpIGNvbnN0IHsKLSAgICBhY2Nlc3Nvcl8tPlN3YXAoZGF0YV8s
IG90aGVyLmFjY2Vzc29yXywgb3RoZXIuZGF0YV8pOwotICB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29udGFpbmVyPgotICB2b2lkIE1lcmdlRnJvbShjb25zdCBDb250YWluZXImIGNvbnRhaW5l
cikgY29uc3QgewotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpjb25zdF9pdGVyYXRv
ciBJdGVyYXRvcjsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gY29udGFpbmVyLmJlZ2luKCk7IGl0
ICE9IGNvbnRhaW5lci5lbmQoKTsgKytpdCkgewotICAgICAgQWRkKCppdCk7Ci0gICAgfQotICB9
Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lcj4KLSAgdm9pZCBDb3B5RnJvbShjb25zdCBD
b250YWluZXImIGNvbnRhaW5lcikgY29uc3QgewotICAgIENsZWFyKCk7Ci0gICAgTWVyZ2VGcm9t
KGNvbnRhaW5lcik7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyBSZWZsZWN0aW9u
OwotICBNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZigKLSAgICAgIE1lc3NhZ2UqIG1lc3NhZ2UsCi0g
ICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gICAgY29uc3QgUmVmbGVjdGlv
biogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLSAgICBkYXRhXyA9IHJl
ZmxlY3Rpb24tPlJlcGVhdGVkRmllbGREYXRhKAotICAgICAgICBtZXNzYWdlLCBmaWVsZCwgaW50
ZXJuYWw6OlJlZlR5cGVUcmFpdHM8VD46OmNwcF90eXBlLCBOVUxMKTsKLSAgICBhY2Nlc3Nvcl8g
PSByZWZsZWN0aW9uLT5SZXBlYXRlZEZpZWxkQWNjZXNzb3IoZmllbGQpOwotICB9Ci0KLSAgdm9p
ZCogZGF0YV87Ci0gIGNvbnN0IEFjY2Vzc29yVHlwZSogYWNjZXNzb3JfOwotfTsKLQotLy8gUmVw
ZWF0ZWRGaWVsZFJlZiBkZWZpbml0aW9uIGZvciBtZXNzYWdlIHR5cGVzLgotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWNsYXNzIFJlcGVhdGVkRmllbGRSZWY8Ci0gICAgVCwgdHlwZW5hbWUgaW50ZXJu
YWw6OmVuYWJsZV9pZjxpbnRlcm5hbDo6aXNfYmFzZV9vZjxNZXNzYWdlLCBUPjo6dmFsdWU+Ojp0
eXBlPiB7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgaW50ZXJuYWw6OlJlZlR5cGVUcmFpdHM8VD46Oml0
ZXJhdG9yIEl0ZXJhdG9yVHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBpbnRlcm5hbDo6UmVmVHlw
ZVRyYWl0czxUPjo6QWNjZXNzb3JUeXBlIEFjY2Vzc29yVHlwZTsKLQotIHB1YmxpYzoKLSAgYm9v
bCBlbXB0eSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNzb3JfLT5Jc0VtcHR5KGRhdGFfKTsK
LSAgfQotICBpbnQgc2l6ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNzb3JfLT5TaXplKGRh
dGFfKTsKLSAgfQotICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSB1
bmRlcmx5aW5nIG1lc3NhZ2Ugb2JqZWN0IGlmIGl0Ci0gIC8vIGV4aXN0cy4gSWYgYSBtZXNzYWdl
IG9iamVjdCBkb2Vzbid0IGV4aXN0IChlLmcuLCBkYXRhIHN0b3JlZCBpbiBzZXJpYWxpemVkCi0g
IC8vIGZvcm0pLCBzY3JhdGNoX3NwYWNlIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIGRhdGEgYW5k
IGEgcmVmZXJlbmNlIHRvIGl0Ci0gIC8vIHdpbGwgYmUgcmV0dXJuZWQuCi0gIC8vCi0gIC8vIEV4
YW1wbGU6Ci0gIC8vICAgUmVwZWF0ZWRGaWVsZFJlZjxNZXNzYWdlPiBoID0gLi4uCi0gIC8vICAg
dW5pcXVlX3B0cjxNZXNzYWdlPiBzY3JhdGNoX3NwYWNlKGguTmV3TWVzc2FnZSgpKTsKLSAgLy8g
ICBjb25zdCBNZXNzYWdlJiBpdGVtID0gaC5HZXQoaW5kZXgsIHNjcmF0Y2hfc3BhY2UuZ2V0KCkp
OwotICBjb25zdCBUJiBHZXQoaW50IGluZGV4LCBUKiBzY3JhdGNoX3NwYWNlKSBjb25zdCB7Ci0g
ICAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBUKj4oYWNjZXNzb3JfLT5HZXQoZGF0YV8sIGlu
ZGV4LCBzY3JhdGNoX3NwYWNlKSk7Ci0gIH0KLSAgLy8gQ3JlYXRlIGEgbmV3IG1lc3NhZ2Ugb2Yg
dGhlIHNhbWUgdHlwZSBhcyB0aGUgbWVzc2FnZXMgc3RvcmVkIGluIHRoaXMKLSAgLy8gcmVwZWF0
ZWQgZmllbGQuIENhbGxlciB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHJldHVybmVkIG9iamVjdC4K
LSAgVCogTmV3TWVzc2FnZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KGRl
ZmF1bHRfaW5zdGFuY2VfLT5OZXcoKSk7Ci0gIH0KLQotICB0eXBlZGVmIEl0ZXJhdG9yVHlwZSBp
dGVyYXRvcjsKLSAgdHlwZWRlZiBJdGVyYXRvclR5cGUgY29uc3RfaXRlcmF0b3I7Ci0gIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgewotICAgIHJldHVybiBpdGVyYXRvcihkYXRhXywgYWNjZXNzb3Jf
LCB0cnVlLCBOZXdNZXNzYWdlKCkpOwotICB9Ci0gIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsKLSAg
ICByZXR1cm4gaXRlcmF0b3IoZGF0YV8sIGFjY2Vzc29yXywgZmFsc2UsIE5ld01lc3NhZ2UoKSk7
Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyBSZWZsZWN0aW9uOwotICBSZXBlYXRl
ZEZpZWxkUmVmKAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9u
ID0gbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0gICAgZGF0YV8gPSByZWZsZWN0aW9uLT5SZXBl
YXRlZEZpZWxkRGF0YSgKLSAgICAgICAgY29uc3RfY2FzdDxNZXNzYWdlKj4oJm1lc3NhZ2UpLCBm
aWVsZCwKLSAgICAgICAgaW50ZXJuYWw6OlJlZlR5cGVUcmFpdHM8VD46OmNwcF90eXBlLAotICAg
ICAgICBpbnRlcm5hbDo6UmVmVHlwZVRyYWl0czxUPjo6R2V0TWVzc2FnZUZpZWxkRGVzY3JpcHRv
cigpKTsKLSAgICBhY2Nlc3Nvcl8gPSByZWZsZWN0aW9uLT5SZXBlYXRlZEZpZWxkQWNjZXNzb3Io
ZmllbGQpOwotICAgIGRlZmF1bHRfaW5zdGFuY2VfID0KLSAgICAgICAgcmVmbGVjdGlvbi0+R2V0
TWVzc2FnZUZhY3RvcnkoKS0+R2V0UHJvdG90eXBlKGZpZWxkLT5tZXNzYWdlX3R5cGUoKSk7Ci0g
IH0KLQotICBjb25zdCB2b2lkKiBkYXRhXzsKLSAgY29uc3QgQWNjZXNzb3JUeXBlKiBhY2Nlc3Nv
cl87Ci0gIGNvbnN0IE1lc3NhZ2UqIGRlZmF1bHRfaW5zdGFuY2VfOwotfTsKLQotLy8gTXV0YWJs
ZVJlcGVhdGVkRmllbGRSZWYgZGVmaW5pdGlvbiBmb3IgbWVzc2FnZSB0eXBlcy4KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1jbGFzcyBNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjwKLSAgICBULCB0eXBl
bmFtZSBpbnRlcm5hbDo6ZW5hYmxlX2lmPGludGVybmFsOjppc19iYXNlX29mPE1lc3NhZ2UsIFQ+
Ojp2YWx1ZT46OnR5cGU+IHsKLSAgdHlwZWRlZiB0eXBlbmFtZSBpbnRlcm5hbDo6UmVmVHlwZVRy
YWl0czxUPjo6QWNjZXNzb3JUeXBlIEFjY2Vzc29yVHlwZTsKLQotIHB1YmxpYzoKLSAgYm9vbCBl
bXB0eSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNzb3JfLT5Jc0VtcHR5KGRhdGFfKTsKLSAg
fQotICBpbnQgc2l6ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNzb3JfLT5TaXplKGRhdGFf
KTsKLSAgfQotICAvLyBTZWUgY29tbWVudHMgZm9yIFJlcGVhdGVkRmllbGRSZWY8TWVzc2FnZT46
OkdldCgpCi0gIGNvbnN0IFQmIEdldChpbnQgaW5kZXgsIFQqIHNjcmF0Y2hfc3BhY2UpIGNvbnN0
IHsKLSAgICByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IFQqPihhY2Nlc3Nvcl8tPkdldChkYXRh
XywgaW5kZXgsIHNjcmF0Y2hfc3BhY2UpKTsKLSAgfQotICAvLyBDcmVhdGUgYSBuZXcgbWVzc2Fn
ZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBtZXNzYWdlcyBzdG9yZWQgaW4gdGhpcwotICAvLyBy
ZXBlYXRlZCBmaWVsZC4gQ2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcmV0dXJuZWQgb2Jq
ZWN0LgotICBUKiBOZXdNZXNzYWdlKCkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
Kj4oZGVmYXVsdF9pbnN0YW5jZV8tPk5ldygpKTsKLSAgfQotCi0gIHZvaWQgU2V0KGludCBpbmRl
eCwgY29uc3QgVCYgdmFsdWUpIGNvbnN0IHsKLSAgICBhY2Nlc3Nvcl8tPlNldChkYXRhXywgaW5k
ZXgsICZ2YWx1ZSk7Ci0gIH0KLSAgdm9pZCBBZGQoY29uc3QgVCYgdmFsdWUpIGNvbnN0IHsKLSAg
ICBhY2Nlc3Nvcl8tPkFkZChkYXRhXywgJnZhbHVlKTsKLSAgfQotICB2b2lkIFJlbW92ZUxhc3Qo
KSBjb25zdCB7Ci0gICAgYWNjZXNzb3JfLT5SZW1vdmVMYXN0KGRhdGFfKTsKLSAgfQotICB2b2lk
IFN3YXBFbGVtZW50cyhpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKSBjb25zdCB7Ci0gICAgYWNjZXNz
b3JfLT5Td2FwRWxlbWVudHMoZGF0YV8sIGluZGV4MSwgaW5kZXgyKTsKLSAgfQotICB2b2lkIENs
ZWFyKCkgY29uc3QgewotICAgIGFjY2Vzc29yXy0+Q2xlYXIoZGF0YV8pOwotICB9Ci0KLSAgdm9p
ZCBTd2FwKGNvbnN0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVmJiBvdGhlcikgY29uc3QgewotICAg
IGFjY2Vzc29yXy0+U3dhcChkYXRhXywgb3RoZXIuYWNjZXNzb3JfLCBvdGhlci5kYXRhXyk7Ci0g
IH0KLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXI+Ci0gIHZvaWQgTWVyZ2VGcm9tKGNv
bnN0IENvbnRhaW5lciYgY29udGFpbmVyKSBjb25zdCB7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBD
b250YWluZXI6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwotICAgIGZvciAoSXRlcmF0b3IgaXQg
PSBjb250YWluZXIuYmVnaW4oKTsgaXQgIT0gY29udGFpbmVyLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICBBZGQoKml0KTsKLSAgICB9Ci0gIH0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyPgot
ICB2b2lkIENvcHlGcm9tKGNvbnN0IENvbnRhaW5lciYgY29udGFpbmVyKSBjb25zdCB7Ci0gICAg
Q2xlYXIoKTsKLSAgICBNZXJnZUZyb20oY29udGFpbmVyKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAg
ZnJpZW5kIGNsYXNzIFJlZmxlY3Rpb247Ci0gIE11dGFibGVSZXBlYXRlZEZpZWxkUmVmKAotICAg
ICAgTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQp
IHsKLSAgICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVj
dGlvbigpOwotICAgIGRhdGFfID0gcmVmbGVjdGlvbi0+UmVwZWF0ZWRGaWVsZERhdGEoCi0gICAg
ICAgIG1lc3NhZ2UsIGZpZWxkLCBpbnRlcm5hbDo6UmVmVHlwZVRyYWl0czxUPjo6Y3BwX3R5cGUs
Ci0gICAgICAgIGludGVybmFsOjpSZWZUeXBlVHJhaXRzPFQ+OjpHZXRNZXNzYWdlRmllbGREZXNj
cmlwdG9yKCkpOwotICAgIGFjY2Vzc29yXyA9IHJlZmxlY3Rpb24tPlJlcGVhdGVkRmllbGRBY2Nl
c3NvcihmaWVsZCk7Ci0gICAgZGVmYXVsdF9pbnN0YW5jZV8gPQotICAgICAgICByZWZsZWN0aW9u
LT5HZXRNZXNzYWdlRmFjdG9yeSgpLT5HZXRQcm90b3R5cGUoZmllbGQtPm1lc3NhZ2VfdHlwZSgp
KTsKLSAgfQotCi0gIHZvaWQqIGRhdGFfOwotICBjb25zdCBBY2Nlc3NvclR5cGUqIGFjY2Vzc29y
XzsKLSAgY29uc3QgTWVzc2FnZSogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotCi1uYW1lc3BhY2Ug
aW50ZXJuYWwgewotLy8gSW50ZXJmYWNlcyB1c2VkIHRvIGltcGxlbWVudCByZWZsZWN0aW9uIFJl
cGVhdGVkRmllbGRSZWYgQVBJLgotLy8gUmVmbGVjdGlvbjo6R2V0UmVwZWF0ZWRBY2Nlc3Nvcigp
IHNob3VsZCByZXR1cm4gYSBwb2ludGVyIHRvIGFuIHNpbmdsZXRvbgotLy8gb2JqZWN0IHRoYXQg
aW1wbGVtZW50cyB0aGUgYmVsb3cgaW50ZXJmYWNlLgotLy8KLS8vIFRoaXMgaW50ZXJmYWNlIHBh
c3Nlcy9yZXR1cm5zIHZhbHVlcyB1c2luZyB2b2lkIHBvaW50ZXJzLiBUaGUgYWN0dWFsIHR5cGUK
LS8vIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBmaWVsZCdzIGNwcF90eXBlLiBGb2xsb3dp
bmcgaXMgYSBtYXBwaW5nIGZyb20KLS8vIGNwcF90eXBlIHRvIHRoZSB0eXBlIHRoYXQgc2hvdWxk
IGJlIHVzZWQgaW4gdGhpcyBpbnRlcmZhY2U6Ci0vLwotLy8gICBmaWVsZC0+Y3BwX3R5cGUoKSAg
ICAgIFQgICAgICAgICAgICAgICAgQWN0dWFsIHR5cGUgb2Ygdm9pZCoKLS8vICAgQ1BQVFlQRV9J
TlQzMiAgICAgICAgaW50MzIgICAgICAgICAgICAgICAgICAgaW50MzIKLS8vICAgQ1BQVFlQRV9V
SU5UMzIgICAgICAgdWludDMyICAgICAgICAgICAgICAgICAgdWludDMyCi0vLyAgIENQUFRZUEVf
SU5UNjQgICAgICAgIGludDY0ICAgICAgICAgICAgICAgICAgIGludDY0Ci0vLyAgIENQUFRZUEVf
VUlOVDY0ICAgICAgIHVpbnQ2NCAgICAgICAgICAgICAgICAgIHVpbnQ2NAotLy8gICBDUFBUWVBF
X0RPVUJMRSAgICAgICBkb3VibGUgICAgICAgICAgICAgICAgICBkb3VibGUKLS8vICAgQ1BQVFlQ
RV9GTE9BVCAgICAgICAgZmxvYXQgICAgICAgICAgICAgICAgICAgZmxvYXQKLS8vICAgQ1BQVFlQ
RV9CT09MICAgICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgYm9vbAotLy8gICBDUFBUWVBF
X0VOVU0gICAgICAgICBnZW5lcmF0ZWQgZW51bSB0eXBlICAgICBpbnQzMgotLy8gICBDUFBUWVBF
X1NUUklORyAgICAgICBzdHJpbmcgICAgICAgICAgICAgICAgICBzdHJpbmcKLS8vICAgQ1BQVFlQ
RV9NRVNTQUdFICAgICAgZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSAgZ29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZQotLy8gICAgICAgICAgICAgICAgICAgICAgICBvciBnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlCi0vLwotLy8gTm90ZSB0aGF0IGZvciBlbnVtcyB3ZSB1c2UgaW50MzIgaW4gdGhlIGlu
dGVyZmFjZS4KLS8vCi0vLyBZb3UgY2FuIG1hcCBmcm9tIFQgdG8gdGhlIGFjdHVhbCB0eXBlIHVz
aW5nIFJlZlR5cGVUcmFpdHM6Ci0vLyAgIHR5cGVkZWYgUmVmVHlwZVRyYWl0czxUPjo6QWNjZXNz
b3JWYWx1ZVR5cGUgQWN0dWFsVHlwZTsKLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBSZXBlYXRl
ZEZpZWxkQWNjZXNzb3IgewotIHB1YmxpYzoKLSAgLy8gVHlwZWRlZnMgZm9yIGNsYXJpdHkuCi0g
IHR5cGVkZWYgdm9pZCBGaWVsZDsKLSAgdHlwZWRlZiB2b2lkIFZhbHVlOwotICB0eXBlZGVmIHZv
aWQgSXRlcmF0b3I7Ci0KLSAgdmlydHVhbCB+UmVwZWF0ZWRGaWVsZEFjY2Vzc29yKCk7Ci0gIHZp
cnR1YWwgYm9vbCBJc0VtcHR5KGNvbnN0IEZpZWxkKiBkYXRhKSBjb25zdCA9IDA7Ci0gIHZpcnR1
YWwgaW50IFNpemUoY29uc3QgRmllbGQqIGRhdGEpIGNvbnN0ID0gMDsKLSAgLy8gRGVwZW5kcyBv
biB0aGUgdW5kZXJseWluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVwZWF0ZWQgZmllbGQsIHRo
aXMKLSAgLy8gbWV0aG9kIGNhbiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIG9i
amVjdCBpZiBzdWNoIGFuIG9iamVjdAotICAvLyBleGlzdHMsIG9yIGZpbGwgdGhlIGRhdGEgaW50
byBzY3JhdGNoX3NwYWNlIGFuZCByZXR1cm4gc2NyYXRjaF9zcGFjZS4KLSAgLy8gQ2FsbGVycyBv
ZiB0aGlzIG1ldGhvZCBtdXN0IGVuc3VyZSBzY3JhdGNoX3NwYWNlIGlzIGEgdmFsaWQgcG9pbnRl
cgotICAvLyB0byBhIG11dGFibGUgb2JqZWN0IG9mIHRoZSBjb3JyZWN0IHR5cGUuCi0gIHZpcnR1
YWwgY29uc3QgVmFsdWUqIEdldCgKLSAgICAgIGNvbnN0IEZpZWxkKiBkYXRhLCBpbnQgaW5kZXgs
IFZhbHVlKiBzY3JhdGNoX3NwYWNlKSBjb25zdCA9IDA7Ci0KLSAgdmlydHVhbCB2b2lkIENsZWFy
KEZpZWxkKiBkYXRhKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBTZXQoRmllbGQqIGRhdGEs
IGludCBpbmRleCwgY29uc3QgVmFsdWUqIHZhbHVlKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9p
ZCBBZGQoRmllbGQqIGRhdGEsIGNvbnN0IFZhbHVlKiB2YWx1ZSkgY29uc3QgPSAwOwotICB2aXJ0
dWFsIHZvaWQgUmVtb3ZlTGFzdChGaWVsZCogZGF0YSkgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZv
aWQgU3dhcEVsZW1lbnRzKEZpZWxkKiBkYXRhLCBpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKSBjb25z
dCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBTd2FwKEZpZWxkKiBkYXRhLCBjb25zdCBSZXBlYXRlZEZp
ZWxkQWNjZXNzb3IqIG90aGVyX211dGF0b3IsCi0gICAgICAgICAgICAgICAgICAgIEZpZWxkKiBv
dGhlcl9kYXRhKSBjb25zdCA9IDA7Ci0KLSAgLy8gQ3JlYXRlIGFuIGl0ZXJhdG9yIHRoYXQgcG9p
bnRzIGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgcmVwZWF0ZWQgZmllbGQuCi0gIHZpcnR1YWwgSXRl
cmF0b3IqIEJlZ2luSXRlcmF0b3IoY29uc3QgRmllbGQqIGRhdGEpIGNvbnN0ID0gMDsKLSAgLy8g
Q3JlYXRlIGFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIGF0IHRoZSBlbmQgb2YgdGhlIHJlcGVhdGVk
IGZpZWxkLgotICB2aXJ0dWFsIEl0ZXJhdG9yKiBFbmRJdGVyYXRvcihjb25zdCBGaWVsZCogZGF0
YSkgY29uc3QgPSAwOwotICAvLyBNYWtlIGEgY29weSBvZiBhbiBpdGVyYXRvciBhbmQgcmV0dXJu
IHRoZSBuZXcgY29weS4KLSAgdmlydHVhbCBJdGVyYXRvciogQ29weUl0ZXJhdG9yKGNvbnN0IEZp
ZWxkKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXRlcmF0
b3IqIGl0ZXJhdG9yKSBjb25zdCA9IDA7Ci0gIC8vIE1vdmUgYW4gaXRlcmF0b3IgdG8gcG9pbnQg
dG8gdGhlIG5leHQgZWxlbWVudC4KLSAgdmlydHVhbCBJdGVyYXRvciogQWR2YW5jZUl0ZXJhdG9y
KGNvbnN0IEZpZWxkKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SXRlcmF0b3IqIGl0ZXJhdG9yKSBjb25zdCA9IDA7Ci0gIC8vIENvbXBhcmUgd2hldGhlciB0d28g
aXRlcmF0b3JzIHBvaW50IHRvIHRoZSBzYW1lIGVsZW1lbnQuCi0gIHZpcnR1YWwgYm9vbCBFcXVh
bHNJdGVyYXRvcihjb25zdCBGaWVsZCogZGF0YSwgY29uc3QgSXRlcmF0b3IqIGEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJdGVyYXRvciogYikgY29uc3QgPSAwOwotICAv
LyBEZWxldGUgYW4gaXRlcmF0b3IgY3JlYXRlZCBieSBCZWdpbkl0ZXJhdG9yKCksIEVuZEl0ZXJh
dG9yKCkgYW5kCi0gIC8vIENvcHlJdGVyYXRvcigpLgotICB2aXJ0dWFsIHZvaWQgRGVsZXRlSXRl
cmF0b3IoY29uc3QgRmllbGQqIGRhdGEsIEl0ZXJhdG9yKiBpdGVyYXRvcikgY29uc3QgPSAwOwot
ICAvLyBMaWtlIEdldCgpIGJ1dCBmb3IgaXRlcmF0b3JzLgotICB2aXJ0dWFsIGNvbnN0IFZhbHVl
KiBHZXRJdGVyYXRvclZhbHVlKGNvbnN0IEZpZWxkKiBkYXRhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEl0ZXJhdG9yKiBpdGVyYXRvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogc2NyYXRjaF9zcGFjZSkgY29u
c3QgPSAwOwotCi0gIC8vIFRlbXBsYXRlZCBtZXRob2RzIHRoYXQgbWFrZSB1c2luZyB0aGlzIGlu
dGVyZmFjZSBlYXNpZXIgZm9yIG5vbi1tZXNzYWdlCi0gIC8vIHR5cGVzLgotICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICBUIEdldChjb25zdCBGaWVsZCogZGF0YSwgaW50IGluZGV4KSBjb25zdCB7
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBSZWZUeXBlVHJhaXRzPFQ+OjpBY2Nlc3NvclZhbHVlVHlw
ZSBBY3R1YWxUeXBlOwotICAgIEFjdHVhbFR5cGUgc2NyYXRjaF9zcGFjZTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4oCi0gICAgICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IEFjdHVhbFR5
cGUqPigKLSAgICAgICAgICAgIEdldChkYXRhLCBpbmRleCwgc3RhdGljX2Nhc3Q8VmFsdWUqPigm
c2NyYXRjaF9zcGFjZSkpKSk7Ci0gIH0KLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBWYWx1ZVR5cGU+Ci0gIHZvaWQgU2V0KEZpZWxkKiBkYXRhLCBpbnQgaW5kZXgsIGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpIGNvbnN0IHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFJlZlR5cGVUcmFp
dHM8VD46OkFjY2Vzc29yVmFsdWVUeXBlIEFjdHVhbFR5cGU7Ci0gICAgLy8gSW4gdGhpcyBSZXBl
YXRlZEZpZWxkQWNjZXNzb3IgaW50ZXJmYWNlIHdlIHBhc3MvcmV0dXJuIGRhdGEgdXNpbmcKLSAg
ICAvLyByYXcgcG9pbnRlcnMuIFR5cGUgb2YgdGhlIGRhdGEgdGhlc2UgcmF3IHBvaW50ZXJzIHBv
aW50IHRvIHNob3VsZAotICAgIC8vIGJlIEFjdHVhbFR5cGUuIEhlcmUgd2UgaGF2ZSBhIFZhbHVl
VHlwZSBvYmplY3QgYW5kIHdhbnQgYSBBY3R1YWxUeXBlCi0gICAgLy8gcG9pbnRlci4gV2UgY2Fu
J3QgY2FzdCBhIFZhbHVlVHlwZSBwb2ludGVyIHRvIGFuIEFjdHVhbFR5cGUgcG9pbnRlcgotICAg
IC8vIGRpcmVjdGx5IGJlY2F1c2UgdGhlaXIgdHlwZSBtaWdodCBiZSBkaWZmZXJlbnQgKGZvciBl
bnVtcyBWYWx1ZVR5cGUKLSAgICAvLyBtYXkgYmUgYSBnZW5lcmF0ZWQgZW51bSB0eXBlIHdoaWxl
IEFjdHVhbFR5cGUgaXMgaW50MzIpLiBUbyBiZSBzYWZlCi0gICAgLy8gd2UgbWFrZSBhIGNvcHkg
dG8gZ2V0IGEgdGVtcG9yYXJ5IEFjdHVhbFR5cGUgb2JqZWN0IGFuZCB1c2UgaXQuCi0gICAgQWN0
dWFsVHlwZSB0bXAgPSBzdGF0aWNfY2FzdDxBY3R1YWxUeXBlPih2YWx1ZSk7Ci0gICAgU2V0KGRh
dGEsIGluZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBWYWx1ZSo+KCZ0bXApKTsKLSAgfQotCi0gIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFZhbHVlVHlwZT4KLSAgdm9pZCBBZGQoRmllbGQq
IGRhdGEsIGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0IHsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIFJlZlR5cGVUcmFpdHM8VD46OkFjY2Vzc29yVmFsdWVUeXBlIEFjdHVhbFR5cGU7Ci0gICAg
Ly8gSW4gdGhpcyBSZXBlYXRlZEZpZWxkQWNjZXNzb3IgaW50ZXJmYWNlIHdlIHBhc3MvcmV0dXJu
IGRhdGEgdXNpbmcKLSAgICAvLyByYXcgcG9pbnRlcnMuIFR5cGUgb2YgdGhlIGRhdGEgdGhlc2Ug
cmF3IHBvaW50ZXJzIHBvaW50IHRvIHNob3VsZAotICAgIC8vIGJlIEFjdHVhbFR5cGUuIEhlcmUg
d2UgaGF2ZSBhIFZhbHVlVHlwZSBvYmplY3QgYW5kIHdhbnQgYSBBY3R1YWxUeXBlCi0gICAgLy8g
cG9pbnRlci4gV2UgY2FuJ3QgY2FzdCBhIFZhbHVlVHlwZSBwb2ludGVyIHRvIGFuIEFjdHVhbFR5
cGUgcG9pbnRlcgotICAgIC8vIGRpcmVjdGx5IGJlY2F1c2UgdGhlaXIgdHlwZSBtaWdodCBiZSBk
aWZmZXJlbnQgKGZvciBlbnVtcyBWYWx1ZVR5cGUKLSAgICAvLyBtYXkgYmUgYSBnZW5lcmF0ZWQg
ZW51bSB0eXBlIHdoaWxlIEFjdHVhbFR5cGUgaXMgaW50MzIpLiBUbyBiZSBzYWZlCi0gICAgLy8g
d2UgbWFrZSBhIGNvcHkgdG8gZ2V0IGEgdGVtcG9yYXJ5IEFjdHVhbFR5cGUgb2JqZWN0IGFuZCB1
c2UgaXQuCi0gICAgQWN0dWFsVHlwZSB0bXAgPSBzdGF0aWNfY2FzdDxBY3R1YWxUeXBlPih2YWx1
ZSk7Ci0gICAgQWRkKGRhdGEsIHN0YXRpY19jYXN0PGNvbnN0IFZhbHVlKj4oJnRtcCkpOwotICB9
Ci19OwotCi0vLyBJbXBsZW1lbnQgKE11dGFibGUpUmVwZWF0ZWRGaWVsZFJlZjo6aXRlcmF0b3IK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBSZXBlYXRlZEZpZWxkUmVmSXRlcmF0b3IKLSAg
ICA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFQ+IHsK
LSAgdHlwZWRlZiB0eXBlbmFtZSBSZWZUeXBlVHJhaXRzPFQ+OjpBY2Nlc3NvclZhbHVlVHlwZSBB
Y2Nlc3NvclZhbHVlVHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBSZWZUeXBlVHJhaXRzPFQ+OjpJ
dGVyYXRvclZhbHVlVHlwZSBJdGVyYXRvclZhbHVlVHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBS
ZWZUeXBlVHJhaXRzPFQ+OjpJdGVyYXRvclBvaW50ZXJUeXBlIEl0ZXJhdG9yUG9pbnRlclR5cGU7
Ci0KLSBwdWJsaWM6Ci0gIC8vIENvbnN0cnVjdG9yIGZvciBub24tbWVzc2FnZSBmaWVsZHMuCi0g
IFJlcGVhdGVkRmllbGRSZWZJdGVyYXRvcihjb25zdCB2b2lkKiBkYXRhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yKiBhY2Nlc3NvciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmVnaW4pCi0gICAgICA6IGRhdGFfKGRhdGEp
LCBhY2Nlc3Nvcl8oYWNjZXNzb3IpLAotICAgICAgICBpdGVyYXRvcl8oYmVnaW4gPyBhY2Nlc3Nv
ci0+QmVnaW5JdGVyYXRvcihkYXRhKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vz
c29yLT5FbmRJdGVyYXRvcihkYXRhKSksCi0gICAgICAgIHNjcmF0Y2hfc3BhY2VfKG5ldyBBY2Nl
c3NvclZhbHVlVHlwZSkgewotICB9Ci0gIC8vIENvbnN0cnVjdG9yIGZvciBtZXNzYWdlIGZpZWxk
cy4KLSAgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yKGNvbnN0IHZvaWQqIGRhdGEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBlYXRlZEZpZWxkQWNjZXNzb3IqIGFjY2Vzc29y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiZWdpbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFjY2Vzc29yVmFsdWVUeXBlKiBzY3JhdGNoX3NwYWNlKQotICAgICAgOiBk
YXRhXyhkYXRhKSwgYWNjZXNzb3JfKGFjY2Vzc29yKSwKLSAgICAgICAgaXRlcmF0b3JfKGJlZ2lu
ID8gYWNjZXNzb3ItPkJlZ2luSXRlcmF0b3IoZGF0YSkgOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICBhY2Nlc3Nvci0+RW5kSXRlcmF0b3IoZGF0YSkpLAotICAgICAgICBzY3JhdGNoX3NwYWNl
XyhzY3JhdGNoX3NwYWNlKSB7Ci0gIH0KLSAgflJlcGVhdGVkRmllbGRSZWZJdGVyYXRvcigpIHsK
LSAgICBhY2Nlc3Nvcl8tPkRlbGV0ZUl0ZXJhdG9yKGRhdGFfLCBpdGVyYXRvcl8pOwotICB9Ci0g
IFJlcGVhdGVkRmllbGRSZWZJdGVyYXRvciBvcGVyYXRvcisrKGludCkgewotICAgIFJlcGVhdGVk
RmllbGRSZWZJdGVyYXRvciB0bXAoKnRoaXMpOwotICAgIGl0ZXJhdG9yXyA9IGFjY2Vzc29yXy0+
QWR2YW5jZUl0ZXJhdG9yKGRhdGFfLCBpdGVyYXRvcl8pOwotICAgIHJldHVybiB0bXA7Ci0gIH0K
LSAgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewotICAgIGl0ZXJhdG9y
XyA9IGFjY2Vzc29yXy0+QWR2YW5jZUl0ZXJhdG9yKGRhdGFfLCBpdGVyYXRvcl8pOwotICAgIHJl
dHVybiAqdGhpczsKLSAgfQotICBJdGVyYXRvclZhbHVlVHlwZSBvcGVyYXRvciooKSBjb25zdCB7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEl0ZXJhdG9yVmFsdWVUeXBlPigKLSAgICAgICAgKnN0
YXRpY19jYXN0PGNvbnN0IEFjY2Vzc29yVmFsdWVUeXBlKj4oCi0gICAgICAgICAgICBhY2Nlc3Nv
cl8tPkdldEl0ZXJhdG9yVmFsdWUoCi0gICAgICAgICAgICAgICAgZGF0YV8sIGl0ZXJhdG9yXywg
c2NyYXRjaF9zcGFjZV8uZ2V0KCkpKSk7Ci0gIH0KLSAgSXRlcmF0b3JQb2ludGVyVHlwZSBvcGVy
YXRvci0+KCkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJdGVyYXRvclBvaW50ZXJU
eXBlPigKLSAgICAgICAgYWNjZXNzb3JfLT5HZXRJdGVyYXRvclZhbHVlKAotICAgICAgICAgICAg
ZGF0YV8sIGl0ZXJhdG9yXywgc2NyYXRjaF9zcGFjZV8uZ2V0KCkpKTsKLSAgfQotICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yJiBvdGhlcikgY29uc3Qgewot
ICAgIGFzc2VydChkYXRhXyA9PSBvdGhlci5kYXRhXyk7Ci0gICAgYXNzZXJ0KGFjY2Vzc29yXyA9
PSBvdGhlci5hY2Nlc3Nvcl8pOwotICAgIHJldHVybiAhYWNjZXNzb3JfLT5FcXVhbHNJdGVyYXRv
cihkYXRhXywgaXRlcmF0b3JfLCBvdGhlci5pdGVyYXRvcl8pOwotICB9Ci0gIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZXBlYXRlZEZpZWxkUmVmSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7Ci0gICAg
cmV0dXJuICF0aGlzLT5vcGVyYXRvciE9KG90aGVyKTsKLSAgfQotCi0gIFJlcGVhdGVkRmllbGRS
ZWZJdGVyYXRvcihjb25zdCBSZXBlYXRlZEZpZWxkUmVmSXRlcmF0b3ImIG90aGVyKQotICAgICAg
OiBkYXRhXyhvdGhlci5kYXRhXyksIGFjY2Vzc29yXyhvdGhlci5hY2Nlc3Nvcl8pLAotICAgICAg
ICBpdGVyYXRvcl8oYWNjZXNzb3JfLT5Db3B5SXRlcmF0b3IoZGF0YV8sIG90aGVyLml0ZXJhdG9y
XykpIHsKLSAgfQotICBSZXBlYXRlZEZpZWxkUmVmSXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBS
ZXBlYXRlZEZpZWxkUmVmSXRlcmF0b3ImIG90aGVyKSB7Ci0gICAgaWYgKHRoaXMgIT0gJm90aGVy
KSB7Ci0gICAgICBhY2Nlc3Nvcl8tPkRlbGV0ZUl0ZXJhdG9yKGRhdGFfLCBpdGVyYXRvcl8pOwot
ICAgICAgZGF0YV8gPSBvdGhlci5kYXRhXzsKLSAgICAgIGFjY2Vzc29yXyA9IG90aGVyLmFjY2Vz
c29yXzsKLSAgICAgIGl0ZXJhdG9yXyA9IGFjY2Vzc29yXy0+Q29weUl0ZXJhdG9yKGRhdGFfLCBv
dGhlci5pdGVyYXRvcl8pOwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotIHByb3Rl
Y3RlZDoKLSAgY29uc3Qgdm9pZCogZGF0YV87Ci0gIGNvbnN0IFJlcGVhdGVkRmllbGRBY2Nlc3Nv
ciogYWNjZXNzb3JfOwotICB2b2lkKiBpdGVyYXRvcl87Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNj
b3BlZF9wdHI8QWNjZXNzb3JWYWx1ZVR5cGU+IHNjcmF0Y2hfc3BhY2VfOwotfTsKLQotLy8gVHlw
ZVRyYWl0cyB0aGF0IG1hcHMgdGhlIHR5cGUgcGFyYW1ldGVyIFQgb2YgUmVwZWF0ZWRGaWVsZFJl
ZiBvcgotLy8gTXV0YWJsZVJlcGVhdGVkRmllbGRSZWYgdG8gY29ycmVzcG9uZGluZyBpdGVyYXRv
ciB0eXBlLAotLy8gUmVwZWF0ZWRGaWVsZEFjY2Vzc29yIHR5cGUsIGV0Yy4KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1zdHJ1Y3QgUHJpbWl0aXZlVHJhaXRzIHsKLSAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfcHJpbWl0aXZlID0gZmFsc2U7Ci19OwotI2RlZmluZSBERUZJTkVfUFJJTUlUSVZFKFRZUEUs
IHR5cGUpIFwKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBQcmltaXRpdmVUcmFpdHM8dHlwZT4geyBc
Ci0gICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19wcmltaXRpdmUgPSB0cnVlOyBcCi0gICAgICBz
dGF0aWMgY29uc3QgRmllbGREZXNjcmlwdG9yOjpDcHBUeXBlIGNwcF90eXBlID0gXAotICAgICAg
ICAgIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV8gIyMgVFlQRTsgXAotICAgIH07Ci1ERUZJTkVf
UFJJTUlUSVZFKElOVDMyLCBpbnQzMikKLURFRklORV9QUklNSVRJVkUoVUlOVDMyLCB1aW50MzIp
Ci1ERUZJTkVfUFJJTUlUSVZFKElOVDY0LCBpbnQ2NCkKLURFRklORV9QUklNSVRJVkUoVUlOVDY0
LCB1aW50NjQpCi1ERUZJTkVfUFJJTUlUSVZFKEZMT0FULCBmbG9hdCkKLURFRklORV9QUklNSVRJ
VkUoRE9VQkxFLCBkb3VibGUpCi1ERUZJTkVfUFJJTUlUSVZFKEJPT0wsIGJvb2wpCi0jdW5kZWYg
REVGSU5FX1BSSU1JVElWRQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IFJlZlR5cGVU
cmFpdHM8Ci0gICAgVCwgdHlwZW5hbWUgaW50ZXJuYWw6OmVuYWJsZV9pZjxQcmltaXRpdmVUcmFp
dHM8VD46OmlzX3ByaW1pdGl2ZT46OnR5cGU+IHsKLSAgdHlwZWRlZiBSZXBlYXRlZEZpZWxkUmVm
SXRlcmF0b3I8VD4gaXRlcmF0b3I7Ci0gIHR5cGVkZWYgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yIEFj
Y2Vzc29yVHlwZTsKLSAgdHlwZWRlZiBUIEFjY2Vzc29yVmFsdWVUeXBlOwotICB0eXBlZGVmIFQg
SXRlcmF0b3JWYWx1ZVR5cGU7Ci0gIHR5cGVkZWYgVCogSXRlcmF0b3JQb2ludGVyVHlwZTsKLSAg
c3RhdGljIGNvbnN0IEZpZWxkRGVzY3JpcHRvcjo6Q3BwVHlwZSBjcHBfdHlwZSA9Ci0gICAgICBQ
cmltaXRpdmVUcmFpdHM8VD46OmNwcF90eXBlOwotICBzdGF0aWMgY29uc3QgRGVzY3JpcHRvciog
R2V0TWVzc2FnZUZpZWxkRGVzY3JpcHRvcigpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBSZWZUeXBlVHJhaXRzPAotICAgIFQsIHR5
cGVuYW1lIGludGVybmFsOjplbmFibGVfaWY8aXNfcHJvdG9fZW51bTxUPjo6dmFsdWU+Ojp0eXBl
PiB7Ci0gIHR5cGVkZWYgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yPFQ+IGl0ZXJhdG9yOwotICB0
eXBlZGVmIFJlcGVhdGVkRmllbGRBY2Nlc3NvciBBY2Nlc3NvclR5cGU7Ci0gIC8vIFdlIHVzZSBp
bnQzMiBmb3IgcmVwZWF0ZWQgZW51bXMgaW4gUmVwZWF0ZWRGaWVsZEFjY2Vzc29yLgotICB0eXBl
ZGVmIGludDMyIEFjY2Vzc29yVmFsdWVUeXBlOwotICB0eXBlZGVmIFQgSXRlcmF0b3JWYWx1ZVR5
cGU7Ci0gIHR5cGVkZWYgaW50MzIqIEl0ZXJhdG9yUG9pbnRlclR5cGU7Ci0gIHN0YXRpYyBjb25z
dCBGaWVsZERlc2NyaXB0b3I6OkNwcFR5cGUgY3BwX3R5cGUgPQotICAgICAgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX0VOVU07Ci0gIHN0YXRpYyBjb25zdCBEZXNjcmlwdG9yKiBHZXRNZXNzYWdl
RmllbGREZXNjcmlwdG9yKCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotc3RydWN0IFJlZlR5cGVUcmFpdHM8Ci0gICAgVCwgdHlwZW5hbWUgaW50
ZXJuYWw6OmVuYWJsZV9pZjwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6aXNfc2FtZTxz
dHJpbmcsIFQ+Ojp2YWx1ZT46OnR5cGU+IHsKLSAgdHlwZWRlZiBSZXBlYXRlZEZpZWxkUmVmSXRl
cmF0b3I8VD4gaXRlcmF0b3I7Ci0gIHR5cGVkZWYgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yIEFjY2Vz
c29yVHlwZTsKLSAgdHlwZWRlZiBzdHJpbmcgQWNjZXNzb3JWYWx1ZVR5cGU7Ci0gIHR5cGVkZWYg
c3RyaW5nIEl0ZXJhdG9yVmFsdWVUeXBlOwotICB0eXBlZGVmIHN0cmluZyogSXRlcmF0b3JQb2lu
dGVyVHlwZTsKLSAgc3RhdGljIGNvbnN0IEZpZWxkRGVzY3JpcHRvcjo6Q3BwVHlwZSBjcHBfdHlw
ZSA9Ci0gICAgICBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOwotICBzdGF0aWMgY29u
c3QgRGVzY3JpcHRvciogR2V0TWVzc2FnZUZpZWxkRGVzY3JpcHRvcigpIHsKLSAgICByZXR1cm4g
TlVMTDsKLSAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBNZXNzYWdlRGVz
Y3JpcHRvckdldHRlciB7Ci0gIHN0YXRpYyBjb25zdCBEZXNjcmlwdG9yKiBnZXQoKSB7Ci0gICAg
cmV0dXJuIFQ6OmRlZmF1bHRfaW5zdGFuY2UoKS5HZXREZXNjcmlwdG9yKCk7Ci0gIH0KLX07Ci10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgTWVzc2FnZURlc2NyaXB0b3JHZXR0ZXI8TWVzc2FnZT4gewotICBz
dGF0aWMgY29uc3QgRGVzY3JpcHRvciogZ2V0KCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IFJlZlR5cGVUcmFpdHM8Ci0gICAgVCwg
dHlwZW5hbWUgaW50ZXJuYWw6OmVuYWJsZV9pZjxpbnRlcm5hbDo6aXNfYmFzZV9vZjxNZXNzYWdl
LCBUPjo6dmFsdWU+Ojp0eXBlPiB7Ci0gIHR5cGVkZWYgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9y
PFQ+IGl0ZXJhdG9yOwotICB0eXBlZGVmIFJlcGVhdGVkRmllbGRBY2Nlc3NvciBBY2Nlc3NvclR5
cGU7Ci0gIHR5cGVkZWYgTWVzc2FnZSBBY2Nlc3NvclZhbHVlVHlwZTsKLSAgdHlwZWRlZiBjb25z
dCBUJiBJdGVyYXRvclZhbHVlVHlwZTsKLSAgdHlwZWRlZiBjb25zdCBUKiBJdGVyYXRvclBvaW50
ZXJUeXBlOwotICBzdGF0aWMgY29uc3QgRmllbGREZXNjcmlwdG9yOjpDcHBUeXBlIGNwcF90eXBl
ID0KLSAgICAgIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOwotICBzdGF0aWMgY29u
c3QgRGVzY3JpcHRvciogR2V0TWVzc2FnZUZpZWxkRGVzY3JpcHRvcigpIHsKLSAgICByZXR1cm4g
TWVzc2FnZURlc2NyaXB0b3JHZXR0ZXI8VD46OmdldCgpOwotICB9Ci19OwotfSAgLy8gbmFtZXNw
YWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfUkVGTEVDVElPTl9IX18KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX2ludGVybmFsLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvcmVmbGVjdGlvbl9pbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmY2I0MjQ3MTVjMzllMTIzZjJjZTMyMDBjYmU1OTI3OTcxMzQ4NzVkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9yZWZsZWN0aW9uX2ludGVybmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RP
QlVGX1JFRkxFQ1RJT05fSU5URVJOQUxfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9SRUZM
RUNUSU9OX0lOVEVSTkFMX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21hcF9maWVs
ZC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewot
bmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0vLyBBIGJhc2UgY2xh
c3MgZm9yIFJlcGVhdGVkRmllbGRBY2Nlc3NvciBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjYW4gc3Vw
cG9ydAotLy8gcmFuZG9tLWFjY2VzcyBlZmZpY2llbnRseS4gQWxsIGl0ZXJhdG9yIG1ldGhvZHMg
ZGVsZWdhdGVzIHRoZSB3b3JrIHRvCi0vLyBjb3JyZXNwb25kaW5nIHJhbmRvbS1hY2Nlc3MgbWV0
aG9kcy4KLWNsYXNzIFJhbmRvbUFjY2Vzc1JlcGVhdGVkRmllbGRBY2Nlc3NvciA6IHB1YmxpYyBS
ZXBlYXRlZEZpZWxkQWNjZXNzb3IgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+UmFuZG9tQWNjZXNz
UmVwZWF0ZWRGaWVsZEFjY2Vzc29yKCkge30KLQotICB2aXJ0dWFsIEl0ZXJhdG9yKiBCZWdpbkl0
ZXJhdG9yKGNvbnN0IEZpZWxkKiBkYXRhKSBjb25zdCB7Ci0gICAgcmV0dXJuIFBvc2l0aW9uVG9J
dGVyYXRvcigwKTsKLSAgfQotICB2aXJ0dWFsIEl0ZXJhdG9yKiBFbmRJdGVyYXRvcihjb25zdCBG
aWVsZCogZGF0YSkgY29uc3QgewotICAgIHJldHVybiBQb3NpdGlvblRvSXRlcmF0b3IodGhpcy0+
U2l6ZShkYXRhKSk7Ci0gIH0KLSAgdmlydHVhbCBJdGVyYXRvciogQ29weUl0ZXJhdG9yKGNvbnN0
IEZpZWxkKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXRl
cmF0b3IqIGl0ZXJhdG9yKSBjb25zdCB7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SXRlcmF0b3Iq
PihpdGVyYXRvcik7Ci0gIH0KLSAgdmlydHVhbCBJdGVyYXRvciogQWR2YW5jZUl0ZXJhdG9yKGNv
bnN0IEZpZWxkKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRl
cmF0b3IqIGl0ZXJhdG9yKSBjb25zdCB7Ci0gICAgcmV0dXJuIFBvc2l0aW9uVG9JdGVyYXRvcihJ
dGVyYXRvclRvUG9zaXRpb24oaXRlcmF0b3IpICsgMSk7Ci0gIH0KLSAgdmlydHVhbCBib29sIEVx
dWFsc0l0ZXJhdG9yKGNvbnN0IEZpZWxkKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSXRlcmF0b3IqIGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBJdGVyYXRvciogYikgY29uc3QgewotICAgIHJldHVybiBhID09IGI7Ci0gIH0KLSAgdmly
dHVhbCB2b2lkIERlbGV0ZUl0ZXJhdG9yKGNvbnN0IEZpZWxkKiBkYXRhLCBJdGVyYXRvciogaXRl
cmF0b3IpIGNvbnN0IHsKLSAgfQotICB2aXJ0dWFsIGNvbnN0IFZhbHVlKiBHZXRJdGVyYXRvclZh
bHVlKGNvbnN0IEZpZWxkKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEl0ZXJhdG9yKiBpdGVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogc2NyYXRjaF9zcGFjZSkgY29uc3QgewotICAgIHJldHVy
biBHZXQoZGF0YSwgc3RhdGljX2Nhc3Q8aW50PihJdGVyYXRvclRvUG9zaXRpb24oaXRlcmF0b3Ip
KSwKLSAgICAgICAgICAgICAgIHNjcmF0Y2hfc3BhY2UpOwotICB9Ci0KLSBwcml2YXRlOgotICBz
dGF0aWMgaW50cHRyX3QgSXRlcmF0b3JUb1Bvc2l0aW9uKGNvbnN0IEl0ZXJhdG9yKiBpdGVyYXRv
cikgewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90PihpdGVyYXRvcik7Ci0g
IH0KLSAgc3RhdGljIEl0ZXJhdG9yKiBQb3NpdGlvblRvSXRlcmF0b3IoaW50cHRyX3QgcG9zaXRp
b24pIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJdGVyYXRvcio+KHBvc2l0aW9uKTsK
LSAgfQotfTsKLQotLy8gQmFzZSBjbGFzcyBmb3IgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yIGltcGxl
bWVudGF0aW9ucyB0aGF0IG1hbmlwdWxhdGVzCi0vLyBSZXBlYXRlZEZpZWxkPFQ+LgotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWNsYXNzIFJlcGVhdGVkRmllbGRXcmFwcGVyIDogcHVibGljIFJhbmRv
bUFjY2Vzc1JlcGVhdGVkRmllbGRBY2Nlc3NvciB7Ci0gcHVibGljOgotICBSZXBlYXRlZEZpZWxk
V3JhcHBlcigpIHt9Ci0gIHZpcnR1YWwgflJlcGVhdGVkRmllbGRXcmFwcGVyKCkge30KLSAgdmly
dHVhbCBib29sIElzRW1wdHkoY29uc3QgRmllbGQqIGRhdGEpIGNvbnN0IHsKLSAgICByZXR1cm4g
R2V0UmVwZWF0ZWRGaWVsZChkYXRhKS0+ZW1wdHkoKTsKLSAgfQotICB2aXJ0dWFsIGludCBTaXpl
KGNvbnN0IEZpZWxkKiBkYXRhKSBjb25zdCB7Ci0gICAgcmV0dXJuIEdldFJlcGVhdGVkRmllbGQo
ZGF0YSktPnNpemUoKTsKLSAgfQotICB2aXJ0dWFsIGNvbnN0IFZhbHVlKiBHZXQoY29uc3QgRmll
bGQqIGRhdGEsIGludCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNj
cmF0Y2hfc3BhY2UpIGNvbnN0IHsKLSAgICByZXR1cm4gQ29udmVydEZyb21UKEdldFJlcGVhdGVk
RmllbGQoZGF0YSktPkdldChpbmRleCksIHNjcmF0Y2hfc3BhY2UpOwotICB9Ci0gIHZpcnR1YWwg
dm9pZCBDbGVhcihGaWVsZCogZGF0YSkgY29uc3QgewotICAgIE11dGFibGVSZXBlYXRlZEZpZWxk
KGRhdGEpLT5DbGVhcigpOwotICB9Ci0gIHZpcnR1YWwgdm9pZCBTZXQoRmllbGQqIGRhdGEsIGlu
dCBpbmRleCwgY29uc3QgVmFsdWUqIHZhbHVlKSBjb25zdCB7Ci0gICAgTXV0YWJsZVJlcGVhdGVk
RmllbGQoZGF0YSktPlNldChpbmRleCwgQ29udmVydFRvVCh2YWx1ZSkpOwotICB9Ci0gIHZpcnR1
YWwgdm9pZCBBZGQoRmllbGQqIGRhdGEsIGNvbnN0IFZhbHVlKiB2YWx1ZSkgY29uc3QgewotICAg
IE11dGFibGVSZXBlYXRlZEZpZWxkKGRhdGEpLT5BZGQoQ29udmVydFRvVCh2YWx1ZSkpOwotICB9
Ci0gIHZpcnR1YWwgdm9pZCBSZW1vdmVMYXN0KEZpZWxkKiBkYXRhKSBjb25zdCB7Ci0gICAgTXV0
YWJsZVJlcGVhdGVkRmllbGQoZGF0YSktPlJlbW92ZUxhc3QoKTsKLSAgfQotICB2aXJ0dWFsIHZv
aWQgU3dhcEVsZW1lbnRzKEZpZWxkKiBkYXRhLCBpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKSBjb25z
dCB7Ci0gICAgTXV0YWJsZVJlcGVhdGVkRmllbGQoZGF0YSktPlN3YXBFbGVtZW50cyhpbmRleDEs
IGluZGV4Mik7Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgdHlwZWRlZiBSZXBlYXRlZEZpZWxkPFQ+
IFJlcGVhdGVkRmllbGRUeXBlOwotICBzdGF0aWMgY29uc3QgUmVwZWF0ZWRGaWVsZFR5cGUqIEdl
dFJlcGVhdGVkRmllbGQoY29uc3QgRmllbGQqIGRhdGEpIHsKLSAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBSZXBlYXRlZEZpZWxkVHlwZSo+KGRhdGEpOwotICB9Ci0gIHN0YXRpYyBS
ZXBlYXRlZEZpZWxkVHlwZSogTXV0YWJsZVJlcGVhdGVkRmllbGQoRmllbGQqIGRhdGEpIHsKLSAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXBlYXRlZEZpZWxkVHlwZSo+KGRhdGEpOwotICB9
Ci0KLSAgLy8gQ29udmVydCBhbiBvYmplY3QgcmVjZXZpZWQgYnkgdGhpcyBhY2Nlc3NvciB0byBh
biBvYmplY3QgdG8gYmUgc3RvcmVkIGluCi0gIC8vIHRoZSB1bmRlcmx5aW5nIFJlcGVhdGVkRmll
bGQuCi0gIHZpcnR1YWwgVCBDb252ZXJ0VG9UKGNvbnN0IFZhbHVlKiB2YWx1ZSkgY29uc3QgPSAw
OwotCi0gIC8vIENvbnZlcnQgYW4gb2JqZWN0IHN0b3JlZCBpbiBSZXBlYXRlZFB0ckZpZWxkIHRv
IGFuIG9iamVjdCB0aGF0IHdpbGwgYmUKLSAgLy8gcmV0dXJuZWQgYnkgdGhpcyBhY2Nlc3Nvci4g
SWYgdGhlIHR3byBvYmplY3RzIGhhdmUgdGhlIHNhbWUgdHlwZSAodHJ1ZQotICAvLyBmb3Igc3Ry
aW5nIGZpZWxkcyB3aXRoIGN0eXBlPVNUUklORyksIGEgcG9pbnRlciB0byB0aGUgc291cmNlIG9i
amVjdCBjYW4KLSAgLy8gYmUgcmV0dXJuZWQgZGlyZWN0bHkuIE90aGVyd2lzZSwgZGF0YSBzaG91
bGQgYmUgY29waWVkIGZyb20gdmFsdWUgdG8KLSAgLy8gc2NyYXRjaF9zcGFjZSBhbmQgc2NyYXRj
aF9zcGFjZSBzaG91bGQgYmUgcmV0dXJuZWQuCi0gIHZpcnR1YWwgY29uc3QgVmFsdWUqIENvbnZl
cnRGcm9tVChjb25zdCBUJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZhbHVlKiBzY3JhdGNoX3NwYWNlKSBjb25zdCA9IDA7Ci19OwotCi0vLyBCYXNlIGNsYXNz
IGZvciBSZXBlYXRlZEZpZWxkQWNjZXNzb3IgaW1wbGVtZW50YXRpb25zIHRoYXQgbWFuaXB1bGF0
ZXMKLS8vIFJlcGVhdGVkUHRyRmllbGQ8VD4uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3Mg
UmVwZWF0ZWRQdHJGaWVsZFdyYXBwZXIgOiBwdWJsaWMgUmFuZG9tQWNjZXNzUmVwZWF0ZWRGaWVs
ZEFjY2Vzc29yIHsKLSBwdWJsaWM6Ci0gIFJlcGVhdGVkUHRyRmllbGRXcmFwcGVyKCkge30KLSAg
dmlydHVhbCB+UmVwZWF0ZWRQdHJGaWVsZFdyYXBwZXIoKSB7fQotICB2aXJ0dWFsIGJvb2wgSXNF
bXB0eShjb25zdCBGaWVsZCogZGF0YSkgY29uc3QgewotICAgIHJldHVybiBHZXRSZXBlYXRlZEZp
ZWxkKGRhdGEpLT5lbXB0eSgpOwotICB9Ci0gIHZpcnR1YWwgaW50IFNpemUoY29uc3QgRmllbGQq
IGRhdGEpIGNvbnN0IHsKLSAgICByZXR1cm4gR2V0UmVwZWF0ZWRGaWVsZChkYXRhKS0+c2l6ZSgp
OwotICB9Ci0gIHZpcnR1YWwgY29uc3QgVmFsdWUqIEdldChjb25zdCBGaWVsZCogZGF0YSwgaW50
IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNjcmF0Y2hfc3BhY2Up
IGNvbnN0IHsKLSAgICByZXR1cm4gQ29udmVydEZyb21UKEdldFJlcGVhdGVkRmllbGQoZGF0YSkt
PkdldChpbmRleCksIHNjcmF0Y2hfc3BhY2UpOwotICB9Ci0gIHZpcnR1YWwgdm9pZCBDbGVhcihG
aWVsZCogZGF0YSkgY29uc3QgewotICAgIE11dGFibGVSZXBlYXRlZEZpZWxkKGRhdGEpLT5DbGVh
cigpOwotICB9Ci0gIHZpcnR1YWwgdm9pZCBTZXQoRmllbGQqIGRhdGEsIGludCBpbmRleCwgY29u
c3QgVmFsdWUqIHZhbHVlKSBjb25zdCB7Ci0gICAgQ29udmVydFRvVCh2YWx1ZSwgTXV0YWJsZVJl
cGVhdGVkRmllbGQoZGF0YSktPk11dGFibGUoaW5kZXgpKTsKLSAgfQotICB2aXJ0dWFsIHZvaWQg
QWRkKEZpZWxkKiBkYXRhLCBjb25zdCBWYWx1ZSogdmFsdWUpIGNvbnN0IHsKLSAgICBUKiBhbGxv
Y2F0ZWQgPSBOZXcodmFsdWUpOwotICAgIENvbnZlcnRUb1QodmFsdWUsIGFsbG9jYXRlZCk7Ci0g
ICAgTXV0YWJsZVJlcGVhdGVkRmllbGQoZGF0YSktPkFkZEFsbG9jYXRlZChhbGxvY2F0ZWQpOwot
ICB9Ci0gIHZpcnR1YWwgdm9pZCBSZW1vdmVMYXN0KEZpZWxkKiBkYXRhKSBjb25zdCB7Ci0gICAg
TXV0YWJsZVJlcGVhdGVkRmllbGQoZGF0YSktPlJlbW92ZUxhc3QoKTsKLSAgfQotICB2aXJ0dWFs
IHZvaWQgU3dhcEVsZW1lbnRzKEZpZWxkKiBkYXRhLCBpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKSBj
b25zdCB7Ci0gICAgTXV0YWJsZVJlcGVhdGVkRmllbGQoZGF0YSktPlN3YXBFbGVtZW50cyhpbmRl
eDEsIGluZGV4Mik7Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgdHlwZWRlZiBSZXBlYXRlZFB0ckZp
ZWxkPFQ+IFJlcGVhdGVkRmllbGRUeXBlOwotICBzdGF0aWMgY29uc3QgUmVwZWF0ZWRGaWVsZFR5
cGUqIEdldFJlcGVhdGVkRmllbGQoY29uc3QgRmllbGQqIGRhdGEpIHsKLSAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBSZXBlYXRlZEZpZWxkVHlwZSo+KGRhdGEpOwotICB9Ci0gIHN0
YXRpYyBSZXBlYXRlZEZpZWxkVHlwZSogTXV0YWJsZVJlcGVhdGVkRmllbGQoRmllbGQqIGRhdGEp
IHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXBlYXRlZEZpZWxkVHlwZSo+KGRhdGEp
OwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgbmV3IFQgaW5zdGFuY2UuIEZvciByZXBlYXRlZCBtZXNz
YWdlIGZpZWxkcywgVCBjYW4gYmUgc3BlY2lmaWVkCi0gIC8vIGFzIGdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2Ugc28gd2UgY2FuJ3QgdXNlICJuZXcgVCgpIiBkaXJlY3RseS4gSW4gdGhhdCBjYXNl
LCB2YWx1ZQotICAvLyBzaG91bGQgYmUgYSBtZXNzYWdlIG9mIHRoZSBzYW1lIHR5cGUgKGl0J3Mg
ZW5zdXJlZCBieSB0aGUgY2FsbGVyKSBhbmQgYQotICAvLyBuZXcgbWVzc2FnZSBvYmplY3Qgd2ls
bCBiZSBjcmVhdGVkIHVzaW5nIGl0LgotICB2aXJ0dWFsIFQqIE5ldyhjb25zdCBWYWx1ZSogdmFs
dWUpIGNvbnN0ID0gMDsKLQotICAvLyBDb252ZXJ0IGFuIG9iamVjdCByZWNlaXZlZCBieSB0aGlz
IGFjY2Vzc29yIHRvIGFuIG9iamVjdCB0aGF0IHdpbGwgYmUKLSAgLy8gc3RvcmVkIGluIHRoZSB1
bmRlcmx5aW5nIFJlcGVhdGVkUHRyRmllbGQuCi0gIHZpcnR1YWwgdm9pZCBDb252ZXJ0VG9UKGNv
bnN0IFZhbHVlKiB2YWx1ZSwgVCogcmVzdWx0KSBjb25zdCA9IDA7Ci0KLSAgLy8gQ29udmVydCBh
biBvYmplY3Qgc3RvcmVkIGluIFJlcGVhdGVkUHRyRmllbGQgdG8gYW4gb2JqZWN0IHRoYXQgd2ls
bCBiZQotICAvLyByZXR1cm5lZCBieSB0aGlzIGFjY2Vzc29yLiBJZiB0aGUgdHdvIG9iamVjdHMg
aGF2ZSB0aGUgc2FtZSB0eXBlICh0cnVlCi0gIC8vIGZvciBzdHJpbmcgZmllbGRzIHdpdGggY3R5
cGU9U1RSSU5HKSwgYSBwb2ludGVyIHRvIHRoZSBzb3VyY2Ugb2JqZWN0IGNhbgotICAvLyBiZSBy
ZXR1cm5lZCBkaXJlY3RseS4gT3RoZXJ3aXNlLCBkYXRhIHNob3VsZCBiZSBjb3BpZWQgZnJvbSB2
YWx1ZSB0bwotICAvLyBzY3JhdGNoX3NwYWNlIGFuZCBzY3JhdGNoX3NwYWNlIHNob3VsZCBiZSBy
ZXR1cm5lZC4KLSAgdmlydHVhbCBjb25zdCBWYWx1ZSogQ29udmVydEZyb21UKGNvbnN0IFQmIHZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNjcmF0Y2hf
c3BhY2UpIGNvbnN0ID0gMDsKLX07Ci0KLS8vIEFuIGltcGxlbWVudGF0aW9uIG9mIFJhbmRvbUFj
Y2Vzc1JlcGVhdGVkRmllbGRBY2Nlc3NvciB0aGF0IG1hbmlwdWxhdGVzCi0vLyBNYXBGaWVsZEJh
c2UuCi1jbGFzcyBNYXBGaWVsZEFjY2Vzc29yIDogcHVibGljIFJhbmRvbUFjY2Vzc1JlcGVhdGVk
RmllbGRBY2Nlc3NvciB7Ci0gcHVibGljOgotICBNYXBGaWVsZEFjY2Vzc29yKCkge30KLSAgdmly
dHVhbCB+TWFwRmllbGRBY2Nlc3NvcigpIHt9Ci0gIHZpcnR1YWwgYm9vbCBJc0VtcHR5KGNvbnN0
IEZpZWxkKiBkYXRhKSBjb25zdCB7Ci0gICAgcmV0dXJuIEdldFJlcGVhdGVkRmllbGQoZGF0YSkt
PmVtcHR5KCk7Ci0gIH0KLSAgdmlydHVhbCBpbnQgU2l6ZShjb25zdCBGaWVsZCogZGF0YSkgY29u
c3QgewotICAgIHJldHVybiBHZXRSZXBlYXRlZEZpZWxkKGRhdGEpLT5zaXplKCk7Ci0gIH0KLSAg
dmlydHVhbCBjb25zdCBWYWx1ZSogR2V0KGNvbnN0IEZpZWxkKiBkYXRhLCBpbnQgaW5kZXgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogc2NyYXRjaF9zcGFjZSkgY29uc3Qgewot
ICAgIHJldHVybiBDb252ZXJ0RnJvbUVudHJ5KEdldFJlcGVhdGVkRmllbGQoZGF0YSktPkdldChp
bmRleCksIHNjcmF0Y2hfc3BhY2UpOwotICB9Ci0gIHZpcnR1YWwgdm9pZCBDbGVhcihGaWVsZCog
ZGF0YSkgY29uc3QgewotICAgIE11dGFibGVSZXBlYXRlZEZpZWxkKGRhdGEpLT5DbGVhcigpOwot
ICB9Ci0gIHZpcnR1YWwgdm9pZCBTZXQoRmllbGQqIGRhdGEsIGludCBpbmRleCwgY29uc3QgVmFs
dWUqIHZhbHVlKSBjb25zdCB7Ci0gICAgQ29udmVydFRvRW50cnkodmFsdWUsIE11dGFibGVSZXBl
YXRlZEZpZWxkKGRhdGEpLT5NdXRhYmxlKGluZGV4KSk7Ci0gIH0KLSAgdmlydHVhbCB2b2lkIEFk
ZChGaWVsZCogZGF0YSwgY29uc3QgVmFsdWUqIHZhbHVlKSBjb25zdCB7Ci0gICAgTWVzc2FnZSog
YWxsb2NhdGVkID0gTmV3KHZhbHVlKTsKLSAgICBDb252ZXJ0VG9FbnRyeSh2YWx1ZSwgYWxsb2Nh
dGVkKTsKLSAgICBNdXRhYmxlUmVwZWF0ZWRGaWVsZChkYXRhKS0+QWRkQWxsb2NhdGVkKGFsbG9j
YXRlZCk7Ci0gIH0KLSAgdmlydHVhbCB2b2lkIFJlbW92ZUxhc3QoRmllbGQqIGRhdGEpIGNvbnN0
IHsKLSAgICBNdXRhYmxlUmVwZWF0ZWRGaWVsZChkYXRhKS0+UmVtb3ZlTGFzdCgpOwotICB9Ci0g
IHZpcnR1YWwgdm9pZCBTd2FwRWxlbWVudHMoRmllbGQqIGRhdGEsIGludCBpbmRleDEsIGludCBp
bmRleDIpIGNvbnN0IHsKLSAgICBNdXRhYmxlUmVwZWF0ZWRGaWVsZChkYXRhKS0+U3dhcEVsZW1l
bnRzKGluZGV4MSwgaW5kZXgyKTsKLSAgfQotICB2aXJ0dWFsIHZvaWQgU3dhcCgKLSAgICAgIEZp
ZWxkKiBkYXRhLAotICAgICAgY29uc3QgaW50ZXJuYWw6OlJlcGVhdGVkRmllbGRBY2Nlc3Nvciog
b3RoZXJfbXV0YXRvciwKLSAgICAgIEZpZWxkKiBvdGhlcl9kYXRhKSBjb25zdCB7Ci0gICAgR09P
R0xFX0NIRUNLKHRoaXMgPT0gb3RoZXJfbXV0YXRvcik7Ci0gICAgTXV0YWJsZVJlcGVhdGVkRmll
bGQoZGF0YSktPlN3YXAoTXV0YWJsZVJlcGVhdGVkRmllbGQob3RoZXJfZGF0YSkpOwotICB9Ci0K
LSBwcm90ZWN0ZWQ6Ci0gIHR5cGVkZWYgUmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPiBSZXBlYXRl
ZEZpZWxkVHlwZTsKLSAgc3RhdGljIGNvbnN0IFJlcGVhdGVkRmllbGRUeXBlKiBHZXRSZXBlYXRl
ZEZpZWxkKGNvbnN0IEZpZWxkKiBkYXRhKSB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgUmVwZWF0ZWRGaWVsZFR5cGUqPigKLSAgICAgICAgKCZyZWludGVycHJldF9jYXN0PGNv
bnN0IE1hcEZpZWxkQmFzZSo+KGRhdGEpLT5HZXRSZXBlYXRlZEZpZWxkKCkpKTsKLSAgfQotICBz
dGF0aWMgUmVwZWF0ZWRGaWVsZFR5cGUqIE11dGFibGVSZXBlYXRlZEZpZWxkKEZpZWxkKiBkYXRh
KSB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmVwZWF0ZWRGaWVsZFR5cGUqPigKLSAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxNYXBGaWVsZEJhc2UqPihkYXRhKS0+TXV0YWJsZVJlcGVh
dGVkRmllbGQoKSk7Ci0gIH0KLSAgdmlydHVhbCBNZXNzYWdlKiBOZXcoY29uc3QgVmFsdWUqIHZh
bHVlKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IE1lc3NhZ2UqPih2YWx1
ZSktPk5ldygpOwotICB9Ci0gIC8vIENvbnZlcnQgYW4gb2JqZWN0IHJlY2VpdmVkIGJ5IHRoaXMg
YWNjZXNzb3IgdG8gYW4gTWFwRW50cnkgbWVzc2FnZSB0byBiZQotICAvLyBzdG9yZWQgaW4gdGhl
IHVuZGVybHlpbmcgTWFwRmllbGRCYXNlLgotICB2aXJ0dWFsIHZvaWQgQ29udmVydFRvRW50cnko
Y29uc3QgVmFsdWUqIHZhbHVlLCBNZXNzYWdlKiByZXN1bHQpIGNvbnN0IHsKLSAgICByZXN1bHQt
PkNvcHlGcm9tKCpzdGF0aWNfY2FzdDxjb25zdCBNZXNzYWdlKj4odmFsdWUpKTsKLSAgfQotICAv
LyBDb252ZXJ0IGEgTWFwRW50cnkgbWVzc2FnZSBzdG9yZWQgaW4gdGhlIHVuZGVybHlpbmcgTWFw
RmllbGRCYXNlIHRvIGFuCi0gIC8vIG9iamVjdCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhp
cyBhY2Nlc3Nvci4KLSAgdmlydHVhbCBjb25zdCBWYWx1ZSogQ29udmVydEZyb21FbnRyeShjb25z
dCBNZXNzYWdlJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSogc2NyYXRjaF9zcGFjZSkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBWYWx1ZSo+KCZ2YWx1ZSk7Ci0gIH0KLX07Ci0KLS8vIERlZmF1bHQgaW1wbGVtZW50YXRp
b25zIG9mIFJlcGVhdGVkRmllbGRBY2Nlc3NvciBmb3IgcHJpbWl0aXZlIHR5cGVzLgotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWNsYXNzIFJlcGVhdGVkRmllbGRQcmltaXRpdmVBY2Nlc3NvciA6IHB1
YmxpYyBSZXBlYXRlZEZpZWxkV3JhcHBlcjxUPiB7Ci0gIHR5cGVkZWYgdm9pZCBGaWVsZDsKLSAg
dHlwZWRlZiB2b2lkIFZhbHVlOwotICB1c2luZyBSZXBlYXRlZEZpZWxkV3JhcHBlcjxUPjo6TXV0
YWJsZVJlcGVhdGVkRmllbGQ7Ci0KLSBwdWJsaWM6Ci0gIFJlcGVhdGVkRmllbGRQcmltaXRpdmVB
Y2Nlc3NvcigpIHt9Ci0gIHZpcnR1YWwgflJlcGVhdGVkRmllbGRQcmltaXRpdmVBY2Nlc3Nvcigp
IHt9Ci0gIHZpcnR1YWwgdm9pZCBTd2FwKAotICAgICAgRmllbGQqIGRhdGEsCi0gICAgICBjb25z
dCBpbnRlcm5hbDo6UmVwZWF0ZWRGaWVsZEFjY2Vzc29yKiBvdGhlcl9tdXRhdG9yLAotICAgICAg
RmllbGQqIG90aGVyX2RhdGEpIGNvbnN0IHsKLSAgICAvLyBDdXJyZW50bHkgUmVwZWF0ZWRGaWVs
ZFByaW1pdGl2ZUFjY2Vzc29yIGlzIHRoZSBvbmx5IGltcGxlbWVudGF0aW9uIG9mCi0gICAgLy8g
UmVwZWF0ZWRGaWVsZEFjY2Vzc29yIGZvciBwcmltaXRpdmUgdHlwZXMuIEFzIHdlIGFyZSB1c2lu
ZyBzaW5nbGV0b25zCi0gICAgLy8gZm9yIHRoZXNlIGFjY2Vzc29ycywgaGVyZSAib3RoZXJfbXV0
YXRvciIgbXVzdCBiZSAidGhpcyIuCi0gICAgR09PR0xFX0NIRUNLKHRoaXMgPT0gb3RoZXJfbXV0
YXRvcik7Ci0gICAgTXV0YWJsZVJlcGVhdGVkRmllbGQoZGF0YSktPlN3YXAoTXV0YWJsZVJlcGVh
dGVkRmllbGQob3RoZXJfZGF0YSkpOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZpcnR1YWwgVCBD
b252ZXJ0VG9UKGNvbnN0IFZhbHVlKiB2YWx1ZSkgY29uc3QgewotICAgIHJldHVybiAqc3RhdGlj
X2Nhc3Q8Y29uc3QgVCo+KHZhbHVlKTsKLSAgfQotICB2aXJ0dWFsIGNvbnN0IFZhbHVlKiBDb252
ZXJ0RnJvbVQoY29uc3QgVCYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSogc2NyYXRjaF9zcGFjZSkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBWYWx1ZSo+KCZ2YWx1ZSk7Ci0gIH0KLX07Ci0KLS8vIERlZmF1bHQgaW1wbGVtZW50
YXRpb24gb2YgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yIGZvciBzdHJpbmcgZmllbGRzIHdpdGgKLS8v
IGN0eXBlPVNUUklORy4KLWNsYXNzIFJlcGVhdGVkUHRyRmllbGRTdHJpbmdBY2Nlc3NvciA6IHB1
YmxpYyBSZXBlYXRlZFB0ckZpZWxkV3JhcHBlcjxzdHJpbmc+IHsKLSAgdHlwZWRlZiB2b2lkIEZp
ZWxkOwotICB0eXBlZGVmIHZvaWQgVmFsdWU7Ci0gIHVzaW5nIFJlcGVhdGVkRmllbGRBY2Nlc3Nv
cjo6QWRkOwotCi0gcHVibGljOgotICBSZXBlYXRlZFB0ckZpZWxkU3RyaW5nQWNjZXNzb3IoKSB7
fQotICB2aXJ0dWFsIH5SZXBlYXRlZFB0ckZpZWxkU3RyaW5nQWNjZXNzb3IoKSB7fQotICB2aXJ0
dWFsIHZvaWQgU3dhcCgKLSAgICAgIEZpZWxkKiBkYXRhLAotICAgICAgY29uc3QgaW50ZXJuYWw6
OlJlcGVhdGVkRmllbGRBY2Nlc3Nvciogb3RoZXJfbXV0YXRvciwKLSAgICAgIEZpZWxkKiBvdGhl
cl9kYXRhKSBjb25zdCB7Ci0gICAgaWYgKHRoaXMgPT0gb3RoZXJfbXV0YXRvcikgewotICAgICAg
TXV0YWJsZVJlcGVhdGVkRmllbGQoZGF0YSktPlN3YXAoTXV0YWJsZVJlcGVhdGVkRmllbGQob3Ro
ZXJfZGF0YSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4g
dG1wOwotICAgICAgdG1wLlN3YXAoTXV0YWJsZVJlcGVhdGVkRmllbGQoZGF0YSkpOwotICAgICAg
aW50IG90aGVyX3NpemUgPSBvdGhlcl9tdXRhdG9yLT5TaXplKG90aGVyX2RhdGEpOwotICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlcl9zaXplOyArK2kpIHsKLSAgICAgICAgQWRkPHN0cmlu
Zz4oZGF0YSwgb3RoZXJfbXV0YXRvci0+R2V0PHN0cmluZz4ob3RoZXJfZGF0YSwgaSkpOwotICAg
ICAgfQotICAgICAgaW50IHNpemUgPSBTaXplKGRhdGEpOwotICAgICAgb3RoZXJfbXV0YXRvci0+
Q2xlYXIob3RoZXJfZGF0YSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBvdGhlcl9tdXRhdG9yLT5BZGQ8c3RyaW5nPihvdGhlcl9kYXRhLCB0bXAuR2V0
KGkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgdmlydHVhbCBzdHJp
bmcqIE5ldyhjb25zdCBWYWx1ZSopIGNvbnN0IHsKLSAgICByZXR1cm4gbmV3IHN0cmluZygpOwot
ICB9Ci0gIHZpcnR1YWwgdm9pZCBDb252ZXJ0VG9UKGNvbnN0IFZhbHVlKiB2YWx1ZSwgc3RyaW5n
KiByZXN1bHQpIGNvbnN0IHsKLSAgICAqcmVzdWx0ID0gKnN0YXRpY19jYXN0PGNvbnN0IHN0cmlu
Zyo+KHZhbHVlKTsKLSAgfQotICB2aXJ0dWFsIGNvbnN0IFZhbHVlKiBDb252ZXJ0RnJvbVQoY29u
c3Qgc3RyaW5nJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBzY3JhdGNoX3NwYWNlKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFZhbHVlKj4oJnZhbHVlKTsKLSAgfQotfTsKLQotCi1jbGFzcyBSZXBlYXRlZFB0ckZpZWxkTWVz
c2FnZUFjY2Vzc29yCi0gICAgOiBwdWJsaWMgUmVwZWF0ZWRQdHJGaWVsZFdyYXBwZXI8TWVzc2Fn
ZT4gewotICB0eXBlZGVmIHZvaWQgRmllbGQ7Ci0gIHR5cGVkZWYgdm9pZCBWYWx1ZTsKLQotIHB1
YmxpYzoKLSAgUmVwZWF0ZWRQdHJGaWVsZE1lc3NhZ2VBY2Nlc3NvcigpIHt9Ci0gIHZpcnR1YWwg
flJlcGVhdGVkUHRyRmllbGRNZXNzYWdlQWNjZXNzb3IoKSB7fQotICB2aXJ0dWFsIHZvaWQgU3dh
cCgKLSAgICAgIEZpZWxkKiBkYXRhLAotICAgICAgY29uc3QgaW50ZXJuYWw6OlJlcGVhdGVkRmll
bGRBY2Nlc3Nvciogb3RoZXJfbXV0YXRvciwKLSAgICAgIEZpZWxkKiBvdGhlcl9kYXRhKSBjb25z
dCB7Ci0gICAgR09PR0xFX0NIRUNLKHRoaXMgPT0gb3RoZXJfbXV0YXRvcik7Ci0gICAgTXV0YWJs
ZVJlcGVhdGVkRmllbGQoZGF0YSktPlN3YXAoTXV0YWJsZVJlcGVhdGVkRmllbGQob3RoZXJfZGF0
YSkpOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZpcnR1YWwgTWVzc2FnZSogTmV3KGNvbnN0IFZh
bHVlKiB2YWx1ZSkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBNZXNzYWdl
Kj4odmFsdWUpLT5OZXcoKTsKLSAgfQotICB2aXJ0dWFsIHZvaWQgQ29udmVydFRvVChjb25zdCBW
YWx1ZSogdmFsdWUsIE1lc3NhZ2UqIHJlc3VsdCkgY29uc3QgewotICAgIHJlc3VsdC0+Q29weUZy
b20oKnN0YXRpY19jYXN0PGNvbnN0IE1lc3NhZ2UqPih2YWx1ZSkpOwotICB9Ci0gIHZpcnR1YWwg
Y29uc3QgVmFsdWUqIENvbnZlcnRGcm9tVChjb25zdCBNZXNzYWdlJiB2YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBzY3JhdGNoX3NwYWNlKSBjb25zdCB7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFZhbHVlKj4oJnZhbHVlKTsKLSAgfQotfTsK
LX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1JFRkxFQ1RJ
T05fSU5URVJOQUxfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcmVmbGVjdGlv
bl9vcHMuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbl9vcHMuY2MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MjlkZWMyNTEwYjFjZjgwZGM1N2Y5OWMzOWE2NTMxOTNl
NTBhMTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjY5
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6
IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwg
UHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVh
biwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbl9vcHMuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9k
ZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRf
c2V0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGludGVybmFs
IHsKLQotdm9pZCBSZWZsZWN0aW9uT3BzOjpDb3B5KGNvbnN0IE1lc3NhZ2UmIGZyb20sIE1lc3Nh
Z2UqIHRvKSB7Ci0gIGlmICgmZnJvbSA9PSB0bykgcmV0dXJuOwotICBDbGVhcih0byk7Ci0gIE1l
cmdlKGZyb20sIHRvKTsKLX0KLQotdm9pZCBSZWZsZWN0aW9uT3BzOjpNZXJnZShjb25zdCBNZXNz
YWdlJiBmcm9tLCBNZXNzYWdlKiB0bykgewotICBHT09HTEVfQ0hFQ0tfTkUoJmZyb20sIHRvKTsK
LQotICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gZnJvbS5HZXREZXNjcmlwdG9yKCk7
Ci0gIEdPT0dMRV9DSEVDS19FUSh0by0+R2V0RGVzY3JpcHRvcigpLCBkZXNjcmlwdG9yKQotICAg
IDw8ICJUcmllZCB0byBtZXJnZSBtZXNzYWdlcyBvZiBkaWZmZXJlbnQgdHlwZXMgIgotICAgIDw8
ICIobWVyZ2UgIiA8PCBkZXNjcmlwdG9yLT5mdWxsX25hbWUoKQotICAgIDw8ICIgdG8gIiA8PCB0
by0+R2V0RGVzY3JpcHRvcigpLT5mdWxsX25hbWUoKSA8PCAiKSI7Ci0KLSAgY29uc3QgUmVmbGVj
dGlvbiogZnJvbV9yZWZsZWN0aW9uID0gZnJvbS5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IFJl
ZmxlY3Rpb24qIHRvX3JlZmxlY3Rpb24gPSB0by0+R2V0UmVmbGVjdGlvbigpOwotCi0gIHZlY3Rv
cjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIGZyb21fcmVmbGVjdGlvbi0+TGlz
dEZpZWxkcyhmcm9tLCAmZmllbGRzKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6
ZSgpOyBpKyspIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZmllbGRzW2ld
OwotCi0gICAgaWYgKGZpZWxkLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgICBpbnQgY291bnQgPSBm
cm9tX3JlZmxlY3Rpb24tPkZpZWxkU2l6ZShmcm9tLCBmaWVsZCk7Ci0gICAgICBmb3IgKGludCBq
ID0gMDsgaiA8IGNvdW50OyBqKyspIHsKLSAgICAgICAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUo
KSkgewotI2RlZmluZSBIQU5ETEVfVFlQRShDUFBUWVBFLCBNRVRIT0QpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
Q1BQVFlQRV8jI0NQUFRZUEU6ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0
b19yZWZsZWN0aW9uLT5BZGQjI01FVEhPRCh0bywgZmllbGQsICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICBmcm9tX3JlZmxlY3Rpb24tPkdldFJlcGVhdGVkIyNNRVRIT0Qo
ZnJvbSwgZmllbGQsIGopKTsgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
SEFORExFX1RZUEUoSU5UMzIgLCBJbnQzMiApOwotICAgICAgICAgIEhBTkRMRV9UWVBFKElOVDY0
ICwgSW50NjQgKTsKLSAgICAgICAgICBIQU5ETEVfVFlQRShVSU5UMzIsIFVJbnQzMik7Ci0gICAg
ICAgICAgSEFORExFX1RZUEUoVUlOVDY0LCBVSW50NjQpOwotICAgICAgICAgIEhBTkRMRV9UWVBF
KEZMT0FUICwgRmxvYXQgKTsKLSAgICAgICAgICBIQU5ETEVfVFlQRShET1VCTEUsIERvdWJsZSk7
Ci0gICAgICAgICAgSEFORExFX1RZUEUoQk9PTCAgLCBCb29sICApOwotICAgICAgICAgIEhBTkRM
RV9UWVBFKFNUUklORywgU3RyaW5nKTsKLSAgICAgICAgICBIQU5ETEVfVFlQRShFTlVNICAsIEVu
dW0gICk7Ci0jdW5kZWYgSEFORExFX1RZUEUKLQotICAgICAgICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgICAgICB0b19yZWZsZWN0aW9uLT5BZGRNZXNz
YWdlKHRvLCBmaWVsZCktPk1lcmdlRnJvbSgKLSAgICAgICAgICAgICAgZnJvbV9yZWZsZWN0aW9u
LT5HZXRSZXBlYXRlZE1lc3NhZ2UoZnJvbSwgZmllbGQsIGopKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN3aXRjaCAoZmllbGQt
PmNwcF90eXBlKCkpIHsKLSNkZWZpbmUgSEFORExFX1RZUEUoQ1BQVFlQRSwgTUVUSE9EKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFXyMjQ1BQVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgIHRvX3JlZmxlY3Rpb24tPlNldCMjTUVUSE9EKHRvLCBmaWVsZCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZyb21fcmVmbGVjdGlvbi0+R2V0
IyNNRVRIT0QoZnJvbSwgZmllbGQpKTsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgSEFORExFX1RZUEUoSU5UMzIgLCBJbnQzMiApOwotICAgICAgICBI
QU5ETEVfVFlQRShJTlQ2NCAsIEludDY0ICk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKFVJTlQzMiwg
VUludDMyKTsKLSAgICAgICAgSEFORExFX1RZUEUoVUlOVDY0LCBVSW50NjQpOwotICAgICAgICBI
QU5ETEVfVFlQRShGTE9BVCAsIEZsb2F0ICk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKERPVUJMRSwg
RG91YmxlKTsKLSAgICAgICAgSEFORExFX1RZUEUoQk9PTCAgLCBCb29sICApOwotICAgICAgICBI
QU5ETEVfVFlQRShTVFJJTkcsIFN0cmluZyk7Ci0gICAgICAgIEhBTkRMRV9UWVBFKEVOVU0gICwg
RW51bSAgKTsKLSN1bmRlZiBIQU5ETEVfVFlQRQotCi0gICAgICAgIGNhc2UgRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgICAgdG9fcmVmbGVjdGlvbi0+TXV0YWJsZU1l
c3NhZ2UodG8sIGZpZWxkKS0+TWVyZ2VGcm9tKAotICAgICAgICAgICAgZnJvbV9yZWZsZWN0aW9u
LT5HZXRNZXNzYWdlKGZyb20sIGZpZWxkKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgdG9fcmVmbGVjdGlvbi0+TXV0YWJsZVVua25vd25GaWVsZHModG8pLT5N
ZXJnZUZyb20oCi0gICAgZnJvbV9yZWZsZWN0aW9uLT5HZXRVbmtub3duRmllbGRzKGZyb20pKTsK
LX0KLQotdm9pZCBSZWZsZWN0aW9uT3BzOjpDbGVhcihNZXNzYWdlKiBtZXNzYWdlKSB7Ci0gIGNv
bnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0K
LSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGZpZWxkczsKLSAgcmVmbGVjdGlvbi0+
TGlzdEZpZWxkcygqbWVzc2FnZSwgJmZpZWxkcyk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmll
bGRzLnNpemUoKTsgaSsrKSB7Ci0gICAgcmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChtZXNzYWdlLCBm
aWVsZHNbaV0pOwotICB9Ci0KLSAgcmVmbGVjdGlvbi0+TXV0YWJsZVVua25vd25GaWVsZHMobWVz
c2FnZSktPkNsZWFyKCk7Ci19Ci0KLWJvb2wgUmVmbGVjdGlvbk9wczo6SXNJbml0aWFsaXplZChj
b25zdCBNZXNzYWdlJiBtZXNzYWdlKSB7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3Ig
PSBtZXNzYWdlLkdldERlc2NyaXB0b3IoKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlv
biA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotCi0gIC8vIENoZWNrIHJlcXVpcmVkIGZpZWxk
cyBvZiB0aGlzIG1lc3NhZ2UuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+Zmll
bGRfY291bnQoKTsgaSsrKSB7Ci0gICAgaWYgKGRlc2NyaXB0b3ItPmZpZWxkKGkpLT5pc19yZXF1
aXJlZCgpKSB7Ci0gICAgICBpZiAoIXJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIGRlc2Ny
aXB0b3ItPmZpZWxkKGkpKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0KLSAgLy8gQ2hlY2sgdGhhdCBzdWItbWVzc2FnZXMgYXJlIGluaXRpYWxpemVkLgot
ICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmllbGRzOwotICByZWZsZWN0aW9uLT5M
aXN0RmllbGRzKG1lc3NhZ2UsICZmaWVsZHMpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxk
cy5zaXplKCk7IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBmaWVs
ZHNbaV07Ci0gICAgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQ
VFlQRV9NRVNTQUdFKSB7Ci0KLSAgICAgIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAg
ICAgICBpbnQgc2l6ZSA9IHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBmaWVsZCk7Ci0K
LSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICBpZiAo
IXJlZmxlY3Rpb24tPkdldFJlcGVhdGVkTWVzc2FnZShtZXNzYWdlLCBmaWVsZCwgaikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgLklzSW5pdGlhbGl6ZWQoKSkgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCFyZWZsZWN0aW9uLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIGZpZWxkKS5Jc0luaXRpYWxp
emVkKCkpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWZsZWN0aW9uT3BzOjpEaXNj
YXJkVW5rbm93bkZpZWxkcyhNZXNzYWdlKiBtZXNzYWdlKSB7Ci0gIGNvbnN0IFJlZmxlY3Rpb24q
IHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgcmVmbGVjdGlvbi0+
TXV0YWJsZVVua25vd25GaWVsZHMobWVzc2FnZSktPkNsZWFyKCk7Ci0KLSAgdmVjdG9yPGNvbnN0
IEZpZWxkRGVzY3JpcHRvcio+IGZpZWxkczsKLSAgcmVmbGVjdGlvbi0+TGlzdEZpZWxkcygqbWVz
c2FnZSwgJmZpZWxkcyk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsr
KSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGZpZWxkc1tpXTsKLSAgICBp
ZiAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0Up
IHsKLSAgICAgIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgICAgICBpbnQgc2l6ZSA9
IHJlZmxlY3Rpb24tPkZpZWxkU2l6ZSgqbWVzc2FnZSwgZmllbGQpOwotICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IHNpemU7IGorKykgewotICAgICAgICAgIHJlZmxlY3Rpb24tPk11dGFibGVS
ZXBlYXRlZE1lc3NhZ2UobWVzc2FnZSwgZmllbGQsIGopCi0gICAgICAgICAgICAgICAgICAgIC0+
RGlzY2FyZFVua25vd25GaWVsZHMoKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgcmVmbGVjdGlvbi0+TXV0YWJsZU1lc3NhZ2UobWVzc2FnZSwgZmllbGQpLT5EaXNjYXJkVW5r
bm93bkZpZWxkcygpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgc3RyaW5nIFN1
Yk1lc3NhZ2VQcmVmaXgoY29uc3Qgc3RyaW5nJiBwcmVmaXgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5kZXgpIHsKLSAgc3RyaW5nIHJlc3VsdChwcmVmaXgpOwot
ICBpZiAoZmllbGQtPmlzX2V4dGVuc2lvbigpKSB7Ci0gICAgcmVzdWx0LmFwcGVuZCgiKCIpOwot
ICAgIHJlc3VsdC5hcHBlbmQoZmllbGQtPmZ1bGxfbmFtZSgpKTsKLSAgICByZXN1bHQuYXBwZW5k
KCIpIik7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0LmFwcGVuZChmaWVsZC0+bmFtZSgpKTsKLSAg
fQotICBpZiAoaW5kZXggIT0gLTEpIHsKLSAgICByZXN1bHQuYXBwZW5kKCJbIik7Ci0gICAgcmVz
dWx0LmFwcGVuZChTaW1wbGVJdG9hKGluZGV4KSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgiXSIpOwot
ICB9Ci0gIHJlc3VsdC5hcHBlbmQoIi4iKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBS
ZWZsZWN0aW9uT3BzOjpGaW5kSW5pdGlhbGl6YXRpb25FcnJvcnMoCi0gICAgY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZSwKLSAgICBjb25zdCBzdHJpbmcmIHByZWZpeCwKLSAgICB2ZWN0b3I8c3RyaW5n
PiogZXJyb3JzKSB7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBtZXNzYWdlLkdl
dERlc2NyaXB0b3IoKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2Uu
R2V0UmVmbGVjdGlvbigpOwotCi0gIC8vIENoZWNrIHJlcXVpcmVkIGZpZWxkcyBvZiB0aGlzIG1l
c3NhZ2UuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvci0+ZmllbGRfY291bnQoKTsg
aSsrKSB7Ci0gICAgaWYgKGRlc2NyaXB0b3ItPmZpZWxkKGkpLT5pc19yZXF1aXJlZCgpKSB7Ci0g
ICAgICBpZiAoIXJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIGRlc2NyaXB0b3ItPmZpZWxk
KGkpKSkgewotICAgICAgICBlcnJvcnMtPnB1c2hfYmFjayhwcmVmaXggKyBkZXNjcmlwdG9yLT5m
aWVsZChpKS0+bmFtZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBDaGVjayBzdWIt
bWVzc2FnZXMuCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIHJl
ZmxlY3Rpb24tPkxpc3RGaWVsZHMobWVzc2FnZSwgJmZpZWxkcyk7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCA9IGZpZWxkc1tpXTsKLSAgICBpZiAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNj
cmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLQotICAgICAgaWYgKGZpZWxkLT5pc19yZXBlYXRl
ZCgpKSB7Ci0gICAgICAgIGludCBzaXplID0gcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2Us
IGZpZWxkKTsKLQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgewotICAg
ICAgICAgIGNvbnN0IE1lc3NhZ2UmIHN1Yl9tZXNzYWdlID0KLSAgICAgICAgICAgIHJlZmxlY3Rp
b24tPkdldFJlcGVhdGVkTWVzc2FnZShtZXNzYWdlLCBmaWVsZCwgaik7Ci0gICAgICAgICAgRmlu
ZEluaXRpYWxpemF0aW9uRXJyb3JzKHN1Yl9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdWJNZXNzYWdlUHJlZml4KHByZWZpeCwgZmllbGQsIGopLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMpOwotICAgICAgICB9Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBjb25zdCBNZXNzYWdlJiBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24t
PkdldE1lc3NhZ2UobWVzc2FnZSwgZmllbGQpOwotICAgICAgICBGaW5kSW5pdGlhbGl6YXRpb25F
cnJvcnMoc3ViX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJN
ZXNzYWdlUHJlZml4KHByZWZpeCwgZmllbGQsIC0xKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9ycyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2Ug
Z29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbl9vcHMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX29wcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0Nzc1OTExZTg0YTI3OGM3Y2M0MTZkMzc0OTY0MGUyMzIxYjgwMzE5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9yZWZsZWN0aW9uX29wcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2ds
ZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZm
ZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJz
LgotLy8KLS8vIFRoaXMgaGVhZGVyIGlzIGxvZ2ljYWxseSBpbnRlcm5hbCwgYnV0IGlzIG1hZGUg
cHVibGljIGJlY2F1c2UgaXQgaXMgdXNlZAotLy8gZnJvbSBwcm90b2NvbC1jb21waWxlci1nZW5l
cmF0ZWQgY29kZSwgd2hpY2ggbWF5IHJlc2lkZSBpbiBvdGhlciBjb21wb25lbnRzLgotCi0jaWZu
ZGVmIEdPT0dMRV9QUk9UT0JVRl9SRUZMRUNUSU9OX09QU19IX18KLSNkZWZpbmUgR09PR0xFX1BS
T1RPQlVGX1JFRkxFQ1RJT05fT1BTX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmg+Ci0KLW5h
bWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5h
bCB7Ci0KLS8vIEJhc2ljIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIHVzaW5nIHJl
ZmxlY3Rpb24uCi0vLyBUaGVzZSBjYW4gYmUgdXNlZCBhcyBhIGNoZWFwIHdheSB0byBpbXBsZW1l
bnQgdGhlIGNvcnJlc3BvbmRpbmcKLS8vIG1ldGhvZHMgb2YgdGhlIE1lc3NhZ2UgaW50ZXJmYWNl
LCB0aG91Z2ggdGhleSBhcmUgbGlrZWx5IHRvIGJlCi0vLyBzbG93ZXIgdGhhbiBpbXBsZW1lbnRh
dGlvbnMgdGFpbG9yZWQgZm9yIHRoZSBzcGVjaWZpYyBtZXNzYWdlIHR5cGUuCi0vLwotLy8gVGhp
cyBjbGFzcyBzaG91bGQgc3RheSBsaW1pdGVkIHRvIG9wZXJhdGlvbnMgbmVlZGVkIHRvIGltcGxl
bWVudAotLy8gdGhlIE1lc3NhZ2UgaW50ZXJmYWNlLgotLy8KLS8vIFRoaXMgY2xhc3MgaXMgcmVh
bGx5IGEgbmFtZXNwYWNlIHRoYXQgY29udGFpbnMgb25seSBzdGF0aWMgbWV0aG9kcy4KLWNsYXNz
IExJQlBST1RPQlVGX0VYUE9SVCBSZWZsZWN0aW9uT3BzIHsKLSBwdWJsaWM6Ci0gIHN0YXRpYyB2
b2lkIENvcHkoY29uc3QgTWVzc2FnZSYgZnJvbSwgTWVzc2FnZSogdG8pOwotICBzdGF0aWMgdm9p
ZCBNZXJnZShjb25zdCBNZXNzYWdlJiBmcm9tLCBNZXNzYWdlKiB0byk7Ci0gIHN0YXRpYyB2b2lk
IENsZWFyKE1lc3NhZ2UqIG1lc3NhZ2UpOwotICBzdGF0aWMgYm9vbCBJc0luaXRpYWxpemVkKGNv
bnN0IE1lc3NhZ2UmIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBEaXNjYXJkVW5rbm93bkZpZWxk
cyhNZXNzYWdlKiBtZXNzYWdlKTsKLQotICAvLyBGaW5kcyBhbGwgdW5zZXQgcmVxdWlyZWQgZmll
bGRzIGluIHRoZSBtZXNzYWdlIGFuZCBhZGRzIHRoZWlyIGZ1bGwKLSAgLy8gcGF0aHMgKGUuZy4g
ImZvby5iYXJbNV0uYmF6IikgdG8gKm5hbWVzLiAgInByZWZpeCIgd2lsbCBiZSBhdHRhY2hlZCB0
bwotICAvLyB0aGUgZnJvbnQgb2YgZWFjaCBuYW1lLgotICBzdGF0aWMgdm9pZCBGaW5kSW5pdGlh
bGl6YXRpb25FcnJvcnMoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcHJlZml4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4qIGVycm9ycyk7Ci0KLSBw
cml2YXRlOgotICAvLyBBbGwgbWV0aG9kcyBhcmUgc3RhdGljLiAgTm8gbmVlZCB0byBjb25zdHJ1
Y3QuCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhSZWZsZWN0aW9uT3BzKTsK
LX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVm
Ci0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1JF
RkxFQ1RJT05fT1BTX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rp
b25fb3BzX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzX3Vu
aXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGQ2YmZiNjEwNmQwNzVh
ODIwNDkzZGJmYzY1OTM2YjNmNmIwNDFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uX29wc191bml0dGVz
dC5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ3NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZh
cmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0v
LyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbl9vcHMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wYi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0X3V0aWwuaD4KLQotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2ds
ZXRlc3QuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci1uYW1lc3BhY2UgewotCi1URVNUKFJlZmxl
Y3Rpb25PcHNUZXN0LCBTYW5pdHlDaGVjaykgewotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1l
c3NhZ2U7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbWVzc2FnZSk7Ci0gIFRlc3RVdGls
OjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZSk7Ci19Ci0KLVRFU1QoUmVmbGVjdGlvbk9wc1Rl
c3QsIENvcHkpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlLCBtZXNzYWdlMjsK
LQotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtZXNzYWdlKTsKLQotICBSZWZsZWN0aW9uT3Bz
OjpDb3B5KG1lc3NhZ2UsICZtZXNzYWdlMik7Ci0KLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEZpZWxk
c1NldChtZXNzYWdlMik7Ci0KLSAgLy8gQ29weWluZyBmcm9tIHNlbGYgc2hvdWxkIGJlIGEgbm8t
b3AuCi0gIFJlZmxlY3Rpb25PcHM6OkNvcHkobWVzc2FnZTIsICZtZXNzYWdlMik7Ci0gIFRlc3RV
dGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQobWVzc2FnZTIpOwotfQotCi1URVNUKFJlZmxlY3Rpb25P
cHNUZXN0LCBDb3B5RXh0ZW5zaW9ucykgewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMg
bWVzc2FnZSwgbWVzc2FnZTI7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEV4dGVuc2lvbnMoJm1lc3Nh
Z2UpOwotCi0gIFJlZmxlY3Rpb25PcHM6OkNvcHkobWVzc2FnZSwgJm1lc3NhZ2UyKTsKLQotICBU
ZXN0VXRpbDo6RXhwZWN0QWxsRXh0ZW5zaW9uc1NldChtZXNzYWdlMik7Ci19Ci0KLVRFU1QoUmVm
bGVjdGlvbk9wc1Rlc3QsIENvcHlPbmVvZikgewotICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtZXNz
YWdlLCBtZXNzYWdlMjsKLSAgVGVzdFV0aWw6OlNldE9uZW9mMSgmbWVzc2FnZSk7Ci0gIFJlZmxl
Y3Rpb25PcHM6OkNvcHkobWVzc2FnZSwgJm1lc3NhZ2UyKTsKLSAgVGVzdFV0aWw6OkV4cGVjdE9u
ZW9mU2V0MShtZXNzYWdlMik7Ci0KLSAgVGVzdFV0aWw6OlNldE9uZW9mMigmbWVzc2FnZSk7Ci0g
IFRlc3RVdGlsOjpFeHBlY3RPbmVvZlNldDIobWVzc2FnZSk7Ci0gIFJlZmxlY3Rpb25PcHM6OkNv
cHkobWVzc2FnZSwgJm1lc3NhZ2UyKTsKLSAgVGVzdFV0aWw6OkV4cGVjdE9uZW9mU2V0MihtZXNz
YWdlMik7Ci19Ci0KLVRFU1QoUmVmbGVjdGlvbk9wc1Rlc3QsIE1lcmdlKSB7Ci0gIC8vIE5vdGU6
ICBDb3B5IGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIE1lcmdlKCkgc28gdGVjaG5pY2FsbHkg
dGhlIENvcHkKLSAgLy8gICB0ZXN0IGFscmVhZHkgdGVzdGVkIG1vc3Qgb2YgdGhpcy4KLQotICB1
bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2UsIG1lc3NhZ2UyOwotCi0gIFRlc3RVdGlsOjpT
ZXRBbGxGaWVsZHMoJm1lc3NhZ2UpOwotCi0gIC8vIFRoaXMgZmllbGQgd2lsbCB0ZXN0IG1lcmdp
bmcgaW50byBhbiBlbXB0eSBzcG90LgotICBtZXNzYWdlMi5zZXRfb3B0aW9uYWxfaW50MzIobWVz
c2FnZS5vcHRpb25hbF9pbnQzMigpKTsKLSAgbWVzc2FnZS5jbGVhcl9vcHRpb25hbF9pbnQzMigp
OwotCi0gIC8vIFRoaXMgdGVzdHMgb3ZlcndyaXRpbmcuCi0gIG1lc3NhZ2UyLnNldF9vcHRpb25h
bF9zdHJpbmcobWVzc2FnZS5vcHRpb25hbF9zdHJpbmcoKSk7Ci0gIG1lc3NhZ2Uuc2V0X29wdGlv
bmFsX3N0cmluZygic29tZXRoaW5nIGVsc2UiKTsKLQotICAvLyBUaGlzIHRlc3RzIGNvbmNhdGVu
YXRpbmcuCi0gIG1lc3NhZ2UyLmFkZF9yZXBlYXRlZF9pbnQzMihtZXNzYWdlLnJlcGVhdGVkX2lu
dDMyKDEpKTsKLSAgaW50MzIgaSA9IG1lc3NhZ2UucmVwZWF0ZWRfaW50MzIoMCk7Ci0gIG1lc3Nh
Z2UuY2xlYXJfcmVwZWF0ZWRfaW50MzIoKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfaW50MzIo
aSk7Ci0KLSAgUmVmbGVjdGlvbk9wczo6TWVyZ2UobWVzc2FnZTIsICZtZXNzYWdlKTsKLQotICBU
ZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzU2V0KG1lc3NhZ2UpOwotfQotCi1URVNUKFJlZmxlY3Rp
b25PcHNUZXN0LCBNZXJnZUV4dGVuc2lvbnMpIHsKLSAgLy8gTm90ZTogIENvcHkgaXMgaW1wbGVt
ZW50ZWQgaW4gdGVybXMgb2YgTWVyZ2UoKSBzbyB0ZWNobmljYWxseSB0aGUgQ29weQotICAvLyAg
IHRlc3QgYWxyZWFkeSB0ZXN0ZWQgbW9zdCBvZiB0aGlzLgotCi0gIHVuaXR0ZXN0OjpUZXN0QWxs
RXh0ZW5zaW9ucyBtZXNzYWdlLCBtZXNzYWdlMjsKLQotICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5z
aW9ucygmbWVzc2FnZSk7Ci0KLSAgLy8gVGhpcyBmaWVsZCB3aWxsIHRlc3QgbWVyZ2luZyBpbnRv
IGFuIGVtcHR5IHNwb3QuCi0gIG1lc3NhZ2UyLlNldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9u
YWxfaW50MzJfZXh0ZW5zaW9uLAotICAgIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpv
cHRpb25hbF9pbnQzMl9leHRlbnNpb24pKTsKLSAgbWVzc2FnZS5DbGVhckV4dGVuc2lvbih1bml0
dGVzdDo6b3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uKTsKLQotICAvLyBUaGlzIHRlc3RzIG92ZXJ3
cml0aW5nLgotICBtZXNzYWdlMi5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3N0cmlu
Z19leHRlbnNpb24sCi0gICAgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X3N0cmluZ19leHRlbnNpb24pKTsKLSAgbWVzc2FnZS5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9w
dGlvbmFsX3N0cmluZ19leHRlbnNpb24sICJzb21ldGhpbmcgZWxzZSIpOwotCi0gIC8vIFRoaXMg
dGVzdHMgY29uY2F0ZW5hdGluZy4KLSAgbWVzc2FnZTIuQWRkRXh0ZW5zaW9uKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9pbnQzMl9leHRlbnNpb24sCi0gICAgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbiwgMSkpOwotICBpbnQzMiBpID0gbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbiwgMCk7Ci0gIG1l
c3NhZ2UuQ2xlYXJFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbik7
Ci0gIG1lc3NhZ2UuQWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNp
b24sIGkpOwotCi0gIFJlZmxlY3Rpb25PcHM6Ok1lcmdlKG1lc3NhZ2UyLCAmbWVzc2FnZSk7Ci0K
LSAgVGVzdFV0aWw6OkV4cGVjdEFsbEV4dGVuc2lvbnNTZXQobWVzc2FnZSk7Ci19Ci0KLVRFU1Qo
UmVmbGVjdGlvbk9wc1Rlc3QsIE1lcmdlVW5rbm93bikgewotICAvLyBUZXN0IHRoYXQgdGhlIG1l
c3NhZ2VzJyBVbmtub3duRmllbGRTZXRzIGFyZSBjb3JyZWN0bHkgbWVyZ2VkLgotICB1bml0dGVz
dDo6VGVzdEVtcHR5TWVzc2FnZSBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0gIG1lc3NhZ2UxLm11dGFi
bGVfdW5rbm93bl9maWVsZHMoKS0+QWRkVmFyaW50KDEyMzQsIDEpOwotICBtZXNzYWdlMi5tdXRh
YmxlX3Vua25vd25fZmllbGRzKCktPkFkZFZhcmludCgxMjM0LCAyKTsKLQotICBSZWZsZWN0aW9u
T3BzOjpNZXJnZShtZXNzYWdlMiwgJm1lc3NhZ2UxKTsKLQotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZTEudW5rbm93bl9maWVsZHMoKS5maWVsZF9jb3VudCgpKTsKLSAgQVNTRVJUX0VRKFVua25vd25G
aWVsZDo6VFlQRV9WQVJJTlQsCi0gICAgICAgICAgICBtZXNzYWdlMS51bmtub3duX2ZpZWxkcygp
LmZpZWxkKDApLnR5cGUoKSk7Ci0gIEVYUEVDVF9FUSgxLCBtZXNzYWdlMS51bmtub3duX2ZpZWxk
cygpLmZpZWxkKDApLnZhcmludCgpKTsKLSAgQVNTRVJUX0VRKFVua25vd25GaWVsZDo6VFlQRV9W
QVJJTlQsCi0gICAgICAgICAgICBtZXNzYWdlMS51bmtub3duX2ZpZWxkcygpLmZpZWxkKDEpLnR5
cGUoKSk7Ci0gIEVYUEVDVF9FUSgyLCBtZXNzYWdlMS51bmtub3duX2ZpZWxkcygpLmZpZWxkKDEp
LnZhcmludCgpKTsKLX0KLQotVEVTVChSZWZsZWN0aW9uT3BzVGVzdCwgTWVyZ2VPbmVvZikgewot
ICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0gIFRlc3RVdGlsOjpT
ZXRPbmVvZjEoJm1lc3NhZ2UxKTsKLQotICAvLyBNZXJnZSB0byBlbXB0eSBtZXNzYWdlCi0gIFJl
ZmxlY3Rpb25PcHM6Ok1lcmdlKG1lc3NhZ2UxLCAmbWVzc2FnZTIpOwotICBUZXN0VXRpbDo6RXhw
ZWN0T25lb2ZTZXQxKG1lc3NhZ2UyKTsKLQotICAvLyBNZXJnZSB3aXRoIHRoZSBzYW1lIG9uZW9m
IGZpZWxkcwotICBSZWZsZWN0aW9uT3BzOjpNZXJnZShtZXNzYWdlMSwgJm1lc3NhZ2UyKTsKLSAg
VGVzdFV0aWw6OkV4cGVjdE9uZW9mU2V0MShtZXNzYWdlMik7Ci0KLSAgLy8gTWVyZ2Ugd2l0aCBk
aWZmZXJlbnQgb25lb2YgZmllbGRzCi0gIFRlc3RVdGlsOjpTZXRPbmVvZjIoJm1lc3NhZ2UxKTsK
LSAgUmVmbGVjdGlvbk9wczo6TWVyZ2UobWVzc2FnZTEsICZtZXNzYWdlMik7Ci0gIFRlc3RVdGls
OjpFeHBlY3RPbmVvZlNldDIobWVzc2FnZTIpOwotfQotCi0jaWZkZWYgUFJPVE9CVUZfSEFTX0RF
QVRIX1RFU1QKLQotVEVTVChSZWZsZWN0aW9uT3BzVGVzdCwgTWVyZ2VGcm9tU2VsZikgewotICAv
LyBOb3RlOiAgQ29weSBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBNZXJnZSgpIHNvIHRlY2hu
aWNhbGx5IHRoZSBDb3B5Ci0gIC8vICAgdGVzdCBhbHJlYWR5IHRlc3RlZCBtb3N0IG9mIHRoaXMu
Ci0KLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotCi0gIEVYUEVDVF9ERUFUSCgK
LSAgICBSZWZsZWN0aW9uT3BzOjpNZXJnZShtZXNzYWdlLCAmbWVzc2FnZSksCi0gICAgIiZmcm9t
Iik7Ci19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLQotVEVTVChSZWZs
ZWN0aW9uT3BzVGVzdCwgQ2xlYXIpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdl
OwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1lc3NhZ2UpOwotCi0gIFJlZmxlY3Rpb25P
cHM6OkNsZWFyKCZtZXNzYWdlKTsKLQotICBUZXN0VXRpbDo6RXhwZWN0Q2xlYXIobWVzc2FnZSk7
Ci0KLSAgLy8gQ2hlY2sgdGhhdCBnZXR0aW5nIGVtYmVkZGVkIG1lc3NhZ2VzIHJldHVybnMgdGhl
IG9iamVjdHMgY3JlYXRlZCBkdXJpbmcKLSAgLy8gU2V0QWxsRmllbGRzKCkgcmF0aGVyIHRoYW4g
ZGVmYXVsdCBpbnN0YW5jZXMuCi0gIEVYUEVDVF9ORSgmdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6
T3B0aW9uYWxHcm91cDo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAgICAgICAgJm1lc3NhZ2Uu
b3B0aW9uYWxncm91cCgpKTsKLSAgRVhQRUNUX05FKCZ1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpO
ZXN0ZWRNZXNzYWdlOjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmbWVzc2FnZS5v
cHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpKTsKLSAgRVhQRUNUX05FKCZ1bml0dGVzdDo6Rm9yZWln
bk1lc3NhZ2U6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZtZXNzYWdlLm9wdGlv
bmFsX2ZvcmVpZ25fbWVzc2FnZSgpKTsKLSAgRVhQRUNUX05FKCZ1bml0dGVzdF9pbXBvcnQ6Oklt
cG9ydE1lc3NhZ2U6OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICZtZXNzYWdlLm9w
dGlvbmFsX2ltcG9ydF9tZXNzYWdlKCkpOwotfQotCi1URVNUKFJlZmxlY3Rpb25PcHNUZXN0LCBD
bGVhckV4dGVuc2lvbnMpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2U7
Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEV4dGVuc2lvbnMoJm1lc3NhZ2UpOwotCi0gIFJlZmxlY3Rp
b25PcHM6OkNsZWFyKCZtZXNzYWdlKTsKLQotICBUZXN0VXRpbDo6RXhwZWN0RXh0ZW5zaW9uc0Ns
ZWFyKG1lc3NhZ2UpOwotCi0gIC8vIENoZWNrIHRoYXQgZ2V0dGluZyBlbWJlZGRlZCBtZXNzYWdl
cyByZXR1cm5zIHRoZSBvYmplY3RzIGNyZWF0ZWQgZHVyaW5nCi0gIC8vIFNldEFsbEV4dGVuc2lv
bnMoKSByYXRoZXIgdGhhbiBkZWZhdWx0IGluc3RhbmNlcy4KLSAgRVhQRUNUX05FKCZ1bml0dGVz
dDo6T3B0aW9uYWxHcm91cF9leHRlbnNpb246OmRlZmF1bHRfaW5zdGFuY2UoKSwKLSAgICAgICAg
ICAgICZtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxncm91cF9leHRlbnNp
b24pKTsKLSAgRVhQRUNUX05FKCZ1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpOZXN0ZWRNZXNzYWdl
OjpkZWZhdWx0X2luc3RhbmNlKCksCi0gICAgICAgICAgICAmbWVzc2FnZS5HZXRFeHRlbnNpb24o
dW5pdHRlc3Q6Om9wdGlvbmFsX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbikpOwotICBFWFBFQ1Rf
TkUoJnVuaXR0ZXN0OjpGb3JlaWduTWVzc2FnZTo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAg
ICAgICAgJm1lc3NhZ2UuR2V0RXh0ZW5zaW9uKAotICAgICAgICAgICAgICB1bml0dGVzdDo6b3B0
aW9uYWxfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lvbikpOwotICBFWFBFQ1RfTkUoJnVuaXR0ZXN0
X2ltcG9ydDo6SW1wb3J0TWVzc2FnZTo6ZGVmYXVsdF9pbnN0YW5jZSgpLAotICAgICAgICAgICAg
Jm1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbXBvcnRfbWVzc2FnZV9l
eHRlbnNpb24pKTsKLX0KLQotVEVTVChSZWZsZWN0aW9uT3BzVGVzdCwgQ2xlYXJVbmtub3duKSB7
Ci0gIC8vIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSdzIFVua25vd25GaWVsZFNldCBpcyBjb3JyZWN0
bHkgY2xlYXJlZC4KLSAgdW5pdHRlc3Q6OlRlc3RFbXB0eU1lc3NhZ2UgbWVzc2FnZTsKLSAgbWVz
c2FnZS5tdXRhYmxlX3Vua25vd25fZmllbGRzKCktPkFkZFZhcmludCgxMjM0LCAxKTsKLQotICBS
ZWZsZWN0aW9uT3BzOjpDbGVhcigmbWVzc2FnZSk7Ci0KLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2Uu
dW5rbm93bl9maWVsZHMoKS5maWVsZF9jb3VudCgpKTsKLX0KLQotVEVTVChSZWZsZWN0aW9uT3Bz
VGVzdCwgQ2xlYXJPbmVvZikgewotICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtZXNzYWdlOwotCi0g
IFRlc3RVdGlsOjpFeHBlY3RPbmVvZkNsZWFyKG1lc3NhZ2UpOwotICBUZXN0VXRpbDo6U2V0T25l
b2YxKCZtZXNzYWdlKTsKLSAgVGVzdFV0aWw6OkV4cGVjdE9uZW9mU2V0MShtZXNzYWdlKTsKLSAg
UmVmbGVjdGlvbk9wczo6Q2xlYXIoJm1lc3NhZ2UpOwotICBUZXN0VXRpbDo6RXhwZWN0T25lb2ZD
bGVhcihtZXNzYWdlKTsKLQotICBUZXN0VXRpbDo6U2V0T25lb2YxKCZtZXNzYWdlKTsKLSAgVGVz
dFV0aWw6OkV4cGVjdE9uZW9mU2V0MShtZXNzYWdlKTsKLSAgVGVzdFV0aWw6OlNldE9uZW9mMigm
bWVzc2FnZSk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RPbmVvZlNldDIobWVzc2FnZSk7Ci0gIFJlZmxl
Y3Rpb25PcHM6OkNsZWFyKCZtZXNzYWdlKTsKLSAgVGVzdFV0aWw6OkV4cGVjdE9uZW9mQ2xlYXIo
bWVzc2FnZSk7Ci19Ci0KLVRFU1QoUmVmbGVjdGlvbk9wc1Rlc3QsIERpc2NhcmRVbmtub3duRmll
bGRzKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsKLSAgVGVzdFV0aWw6OlNl
dEFsbEZpZWxkcygmbWVzc2FnZSk7Ci0KLSAgLy8gU2V0IHNvbWUgdW5rbm93biBmaWVsZHMgaW4g
bWVzc2FnZS4KLSAgbWVzc2FnZS5tdXRhYmxlX3Vua25vd25fZmllbGRzKCkKLSAgICAgICAgLT5B
ZGRWYXJpbnQoMTIzNDU2LCA2NTQzMjEpOwotICBtZXNzYWdlLm11dGFibGVfb3B0aW9uYWxfbmVz
dGVkX21lc3NhZ2UoKQotICAgICAgICAtPm11dGFibGVfdW5rbm93bl9maWVsZHMoKQotICAgICAg
ICAtPkFkZFZhcmludCgxMjM0NTYsIDY1NDMyMSk7Ci0gIG1lc3NhZ2UubXV0YWJsZV9yZXBlYXRl
ZF9uZXN0ZWRfbWVzc2FnZSgwKQotICAgICAgICAtPm11dGFibGVfdW5rbm93bl9maWVsZHMoKQot
ICAgICAgICAtPkFkZFZhcmludCgxMjM0NTYsIDY1NDMyMSk7Ci0KLSAgRVhQRUNUX0VRKDEsIG1l
c3NhZ2UudW5rbm93bl9maWVsZHMoKS5maWVsZF9jb3VudCgpKTsKLSAgRVhQRUNUX0VRKDEsIG1l
c3NhZ2Uub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKQotICAgICAgICAgICAgICAgICAgICAgIC51
bmtub3duX2ZpZWxkcygpLmZpZWxkX2NvdW50KCkpOwotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5y
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSgwKQotICAgICAgICAgICAgICAgICAgICAgIC51bmtub3du
X2ZpZWxkcygpLmZpZWxkX2NvdW50KCkpOwotCi0gIC8vIERpc2NhcmQgdGhlbS4KLSAgUmVmbGVj
dGlvbk9wczo6RGlzY2FyZFVua25vd25GaWVsZHMoJm1lc3NhZ2UpOwotICBUZXN0VXRpbDo6RXhw
ZWN0QWxsRmllbGRzU2V0KG1lc3NhZ2UpOwotCi0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnVua25v
d25fZmllbGRzKCkuZmllbGRfY291bnQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm9wdGlv
bmFsX25lc3RlZF9tZXNzYWdlKCkKLSAgICAgICAgICAgICAgICAgICAgICAudW5rbm93bl9maWVs
ZHMoKS5maWVsZF9jb3VudCgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UucmVwZWF0ZWRfbmVz
dGVkX21lc3NhZ2UoMCkKLSAgICAgICAgICAgICAgICAgICAgICAudW5rbm93bl9maWVsZHMoKS5m
aWVsZF9jb3VudCgpKTsKLX0KLQotVEVTVChSZWZsZWN0aW9uT3BzVGVzdCwgRGlzY2FyZFVua25v
d25FeHRlbnNpb25zKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBtZXNzYWdlOwot
ICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucygmbWVzc2FnZSk7Ci0KLSAgLy8gU2V0IHNvbWUg
dW5rbm93biBmaWVsZHMuCi0gIG1lc3NhZ2UubXV0YWJsZV91bmtub3duX2ZpZWxkcygpCi0gICAg
ICAgIC0+QWRkVmFyaW50KDEyMzQ1NiwgNjU0MzIxKTsKLSAgbWVzc2FnZS5NdXRhYmxlRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pCi0gICAgICAg
IC0+bXV0YWJsZV91bmtub3duX2ZpZWxkcygpCi0gICAgICAgIC0+QWRkVmFyaW50KDEyMzQ1Niwg
NjU0MzIxKTsKLSAgbWVzc2FnZS5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9u
ZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24sIDApCi0gICAgICAgIC0+bXV0YWJsZV91bmtub3duX2Zp
ZWxkcygpCi0gICAgICAgIC0+QWRkVmFyaW50KDEyMzQ1NiwgNjU0MzIxKTsKLQotICBFWFBFQ1Rf
RVEoMSwgbWVzc2FnZS51bmtub3duX2ZpZWxkcygpLmZpZWxkX2NvdW50KCkpOwotICBFWFBFQ1Rf
RVEoMSwKLSAgICBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2VfZXh0ZW5zaW9uKQotICAgICAgICAgICAudW5rbm93bl9maWVsZHMoKS5maWVsZF9j
b3VudCgpKTsKLSAgRVhQRUNUX0VRKDEsCi0gICAgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbiwgMCkKLSAgICAgICAgICAgLnVu
a25vd25fZmllbGRzKCkuZmllbGRfY291bnQoKSk7Ci0KLSAgLy8gRGlzY2FyZCB0aGVtLgotICBS
ZWZsZWN0aW9uT3BzOjpEaXNjYXJkVW5rbm93bkZpZWxkcygmbWVzc2FnZSk7Ci0gIFRlc3RVdGls
OjpFeHBlY3RBbGxFeHRlbnNpb25zU2V0KG1lc3NhZ2UpOwotCi0gIEVYUEVDVF9FUSgwLCBtZXNz
YWdlLnVua25vd25fZmllbGRzKCkuZmllbGRfY291bnQoKSk7Ci0gIEVYUEVDVF9FUSgwLAotICAg
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZV9l
eHRlbnNpb24pCi0gICAgICAgICAgIC51bmtub3duX2ZpZWxkcygpLmZpZWxkX2NvdW50KCkpOwot
ICBFWFBFQ1RfRVEoMCwKLSAgICBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0
ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uLCAwKQotICAgICAgICAgICAudW5rbm93bl9maWVs
ZHMoKS5maWVsZF9jb3VudCgpKTsKLX0KLQotVEVTVChSZWZsZWN0aW9uT3BzVGVzdCwgSXNJbml0
aWFsaXplZCkgewotICB1bml0dGVzdDo6VGVzdFJlcXVpcmVkIG1lc3NhZ2U7Ci0KLSAgRVhQRUNU
X0ZBTFNFKFJlZmxlY3Rpb25PcHM6OklzSW5pdGlhbGl6ZWQobWVzc2FnZSkpOwotICBtZXNzYWdl
LnNldF9hKDEpOwotICBFWFBFQ1RfRkFMU0UoUmVmbGVjdGlvbk9wczo6SXNJbml0aWFsaXplZCht
ZXNzYWdlKSk7Ci0gIG1lc3NhZ2Uuc2V0X2IoMik7Ci0gIEVYUEVDVF9GQUxTRShSZWZsZWN0aW9u
T3BzOjpJc0luaXRpYWxpemVkKG1lc3NhZ2UpKTsKLSAgbWVzc2FnZS5zZXRfYygzKTsKLSAgRVhQ
RUNUX1RSVUUoUmVmbGVjdGlvbk9wczo6SXNJbml0aWFsaXplZChtZXNzYWdlKSk7Ci19Ci0KLVRF
U1QoUmVmbGVjdGlvbk9wc1Rlc3QsIEZvcmVpZ25Jc0luaXRpYWxpemVkKSB7Ci0gIHVuaXR0ZXN0
OjpUZXN0UmVxdWlyZWRGb3JlaWduIG1lc3NhZ2U7Ci0KLSAgLy8gU3RhcnRzIG91dCBpbml0aWFs
aXplZCBiZWNhdXNlIHRoZSBmb3JlaWduIG1lc3NhZ2UgaXMgaXRzZWxmIGFuIG9wdGlvbmFsCi0g
IC8vIGZpZWxkLgotICBFWFBFQ1RfVFJVRShSZWZsZWN0aW9uT3BzOjpJc0luaXRpYWxpemVkKG1l
c3NhZ2UpKTsKLQotICAvLyBPbmNlIHdlIGNyZWF0ZSB0aGF0IGZpZWxkLCB0aGUgbWVzc2FnZSBp
cyBubyBsb25nZXIgaW5pdGlhbGl6ZWQuCi0gIG1lc3NhZ2UubXV0YWJsZV9vcHRpb25hbF9tZXNz
YWdlKCk7Ci0gIEVYUEVDVF9GQUxTRShSZWZsZWN0aW9uT3BzOjpJc0luaXRpYWxpemVkKG1lc3Nh
Z2UpKTsKLQotICAvLyBJbml0aWFsaXplIGl0LiAgTm93IHdlJ3JlIGluaXRpYWxpemVkLgotICBt
ZXNzYWdlLm11dGFibGVfb3B0aW9uYWxfbWVzc2FnZSgpLT5zZXRfYSgxKTsKLSAgbWVzc2FnZS5t
dXRhYmxlX29wdGlvbmFsX21lc3NhZ2UoKS0+c2V0X2IoMik7Ci0gIG1lc3NhZ2UubXV0YWJsZV9v
cHRpb25hbF9tZXNzYWdlKCktPnNldF9jKDMpOwotICBFWFBFQ1RfVFJVRShSZWZsZWN0aW9uT3Bz
OjpJc0luaXRpYWxpemVkKG1lc3NhZ2UpKTsKLQotICAvLyBBZGQgYSByZXBlYXRlZCB2ZXJzaW9u
IG9mIHRoZSBtZXNzYWdlLiAgTm8gbG9uZ2VyIGluaXRpYWxpemVkLgotICB1bml0dGVzdDo6VGVz
dFJlcXVpcmVkKiBzdWJfbWVzc2FnZSA9IG1lc3NhZ2UuYWRkX3JlcGVhdGVkX21lc3NhZ2UoKTsK
LSAgRVhQRUNUX0ZBTFNFKFJlZmxlY3Rpb25PcHM6OklzSW5pdGlhbGl6ZWQobWVzc2FnZSkpOwot
Ci0gIC8vIEluaXRpYWxpemUgdGhhdCByZXBlYXRlZCB2ZXJzaW9uLgotICBzdWJfbWVzc2FnZS0+
c2V0X2EoMSk7Ci0gIHN1Yl9tZXNzYWdlLT5zZXRfYigyKTsKLSAgc3ViX21lc3NhZ2UtPnNldF9j
KDMpOwotICBFWFBFQ1RfVFJVRShSZWZsZWN0aW9uT3BzOjpJc0luaXRpYWxpemVkKG1lc3NhZ2Up
KTsKLX0KLQotVEVTVChSZWZsZWN0aW9uT3BzVGVzdCwgRXh0ZW5zaW9uSXNJbml0aWFsaXplZCkg
ewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTsKLQotICAvLyBTdGFydHMg
b3V0IGluaXRpYWxpemVkIGJlY2F1c2UgdGhlIGZvcmVpZ24gbWVzc2FnZSBpcyBpdHNlbGYgYW4g
b3B0aW9uYWwKLSAgLy8gZmllbGQuCi0gIEVYUEVDVF9UUlVFKFJlZmxlY3Rpb25PcHM6OklzSW5p
dGlhbGl6ZWQobWVzc2FnZSkpOwotCi0gIC8vIE9uY2Ugd2UgY3JlYXRlIHRoYXQgZmllbGQsIHRo
ZSBtZXNzYWdlIGlzIG5vIGxvbmdlciBpbml0aWFsaXplZC4KLSAgbWVzc2FnZS5NdXRhYmxlRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQ6OnNpbmdsZSk7Ci0gIEVYUEVDVF9GQUxTRShS
ZWZsZWN0aW9uT3BzOjpJc0luaXRpYWxpemVkKG1lc3NhZ2UpKTsKLQotICAvLyBJbml0aWFsaXpl
IGl0LiAgTm93IHdlJ3JlIGluaXRpYWxpemVkLgotICBtZXNzYWdlLk11dGFibGVFeHRlbnNpb24o
dW5pdHRlc3Q6OlRlc3RSZXF1aXJlZDo6c2luZ2xlKS0+c2V0X2EoMSk7Ci0gIG1lc3NhZ2UuTXV0
YWJsZUV4dGVuc2lvbih1bml0dGVzdDo6VGVzdFJlcXVpcmVkOjpzaW5nbGUpLT5zZXRfYigyKTsK
LSAgbWVzc2FnZS5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQ6OnNpbmds
ZSktPnNldF9jKDMpOwotICBFWFBFQ1RfVFJVRShSZWZsZWN0aW9uT3BzOjpJc0luaXRpYWxpemVk
KG1lc3NhZ2UpKTsKLQotICAvLyBBZGQgYSByZXBlYXRlZCB2ZXJzaW9uIG9mIHRoZSBtZXNzYWdl
LiAgTm8gbG9uZ2VyIGluaXRpYWxpemVkLgotICBtZXNzYWdlLkFkZEV4dGVuc2lvbih1bml0dGVz
dDo6VGVzdFJlcXVpcmVkOjptdWx0aSk7Ci0gIEVYUEVDVF9GQUxTRShSZWZsZWN0aW9uT3BzOjpJ
c0luaXRpYWxpemVkKG1lc3NhZ2UpKTsKLQotICAvLyBJbml0aWFsaXplIHRoYXQgcmVwZWF0ZWQg
dmVyc2lvbi4KLSAgbWVzc2FnZS5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpUZXN0UmVxdWly
ZWQ6Om11bHRpLCAwKS0+c2V0X2EoMSk7Ci0gIG1lc3NhZ2UuTXV0YWJsZUV4dGVuc2lvbih1bml0
dGVzdDo6VGVzdFJlcXVpcmVkOjptdWx0aSwgMCktPnNldF9iKDIpOwotICBtZXNzYWdlLk11dGFi
bGVFeHRlbnNpb24odW5pdHRlc3Q6OlRlc3RSZXF1aXJlZDo6bXVsdGksIDApLT5zZXRfYygzKTsK
LSAgRVhQRUNUX1RSVUUoUmVmbGVjdGlvbk9wczo6SXNJbml0aWFsaXplZChtZXNzYWdlKSk7Ci19
Ci0KLVRFU1QoUmVmbGVjdGlvbk9wc1Rlc3QsIE9uZW9mSXNJbml0aWFsaXplZCkgewotICB1bml0
dGVzdDo6VGVzdFJlcXVpcmVkT25lb2YgbWVzc2FnZTsKLSAgRVhQRUNUX1RSVUUoUmVmbGVjdGlv
bk9wczo6SXNJbml0aWFsaXplZChtZXNzYWdlKSk7Ci0KLSAgbWVzc2FnZS5tdXRhYmxlX2Zvb19t
ZXNzYWdlKCk7Ci0gIEVYUEVDVF9GQUxTRShSZWZsZWN0aW9uT3BzOjpJc0luaXRpYWxpemVkKG1l
c3NhZ2UpKTsKLQotICBtZXNzYWdlLnNldF9mb29faW50KDEpOwotICBFWFBFQ1RfVFJVRShSZWZs
ZWN0aW9uT3BzOjpJc0luaXRpYWxpemVkKG1lc3NhZ2UpKTsKLQotICBtZXNzYWdlLm11dGFibGVf
Zm9vX21lc3NhZ2UoKTsKLSAgRVhQRUNUX0ZBTFNFKFJlZmxlY3Rpb25PcHM6OklzSW5pdGlhbGl6
ZWQobWVzc2FnZSkpOwotICBtZXNzYWdlLm11dGFibGVfZm9vX21lc3NhZ2UoKS0+c2V0X3JlcXVp
cmVkX2RvdWJsZSgwLjEpOwotICBFWFBFQ1RfVFJVRShSZWZsZWN0aW9uT3BzOjpJc0luaXRpYWxp
emVkKG1lc3NhZ2UpKTsKLX0KLQotc3RhdGljIHN0cmluZyBGaW5kSW5pdGlhbGl6YXRpb25FcnJv
cnMoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSkgewotICB2ZWN0b3I8c3RyaW5nPiBlcnJvcnM7Ci0g
IFJlZmxlY3Rpb25PcHM6OkZpbmRJbml0aWFsaXphdGlvbkVycm9ycyhtZXNzYWdlLCAiIiwgJmVy
cm9ycyk7Ci0gIHJldHVybiBKb2luKGVycm9ycywgIiwiKTsKLX0KLQotVEVTVChSZWZsZWN0aW9u
T3BzVGVzdCwgRmluZEluaXRpYWxpemF0aW9uRXJyb3JzKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UmVx
dWlyZWQgbWVzc2FnZTsKLSAgRVhQRUNUX0VRKCJhLGIsYyIsIEZpbmRJbml0aWFsaXphdGlvbkVy
cm9ycyhtZXNzYWdlKSk7Ci19Ci0KLVRFU1QoUmVmbGVjdGlvbk9wc1Rlc3QsIEZpbmRGb3JlaWdu
SW5pdGlhbGl6YXRpb25FcnJvcnMpIHsKLSAgdW5pdHRlc3Q6OlRlc3RSZXF1aXJlZEZvcmVpZ24g
bWVzc2FnZTsKLSAgbWVzc2FnZS5tdXRhYmxlX29wdGlvbmFsX21lc3NhZ2UoKTsKLSAgbWVzc2Fn
ZS5hZGRfcmVwZWF0ZWRfbWVzc2FnZSgpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9tZXNzYWdl
KCk7Ci0gIEVYUEVDVF9FUSgib3B0aW9uYWxfbWVzc2FnZS5hLCIKLSAgICAgICAgICAgICJvcHRp
b25hbF9tZXNzYWdlLmIsIgotICAgICAgICAgICAgIm9wdGlvbmFsX21lc3NhZ2UuYywiCi0gICAg
ICAgICAgICAicmVwZWF0ZWRfbWVzc2FnZVswXS5hLCIKLSAgICAgICAgICAgICJyZXBlYXRlZF9t
ZXNzYWdlWzBdLmIsIgotICAgICAgICAgICAgInJlcGVhdGVkX21lc3NhZ2VbMF0uYywiCi0gICAg
ICAgICAgICAicmVwZWF0ZWRfbWVzc2FnZVsxXS5hLCIKLSAgICAgICAgICAgICJyZXBlYXRlZF9t
ZXNzYWdlWzFdLmIsIgotICAgICAgICAgICAgInJlcGVhdGVkX21lc3NhZ2VbMV0uYyIsCi0gICAg
ICAgICAgICBGaW5kSW5pdGlhbGl6YXRpb25FcnJvcnMobWVzc2FnZSkpOwotfQotCi1URVNUKFJl
ZmxlY3Rpb25PcHNUZXN0LCBGaW5kRXh0ZW5zaW9uSW5pdGlhbGl6YXRpb25FcnJvcnMpIHsKLSAg
dW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1lc3NhZ2U7Ci0gIG1lc3NhZ2UuTXV0YWJsZUV4
dGVuc2lvbih1bml0dGVzdDo6VGVzdFJlcXVpcmVkOjpzaW5nbGUpOwotICBtZXNzYWdlLkFkZEV4
dGVuc2lvbih1bml0dGVzdDo6VGVzdFJlcXVpcmVkOjptdWx0aSk7Ci0gIG1lc3NhZ2UuQWRkRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQ6Om11bHRpKTsKLSAgRVhQRUNUX0VRKCIocHJv
dG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVkLnNpbmdsZSkuYSwiCi0gICAgICAgICAgICAiKHBy
b3RvYnVmX3VuaXR0ZXN0LlRlc3RSZXF1aXJlZC5zaW5nbGUpLmIsIgotICAgICAgICAgICAgIihw
cm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWQuc2luZ2xlKS5jLCIKLSAgICAgICAgICAgICIo
cHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVkLm11bHRpKVswXS5hLCIKLSAgICAgICAgICAg
ICIocHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVkLm11bHRpKVswXS5iLCIKLSAgICAgICAg
ICAgICIocHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVkLm11bHRpKVswXS5jLCIKLSAgICAg
ICAgICAgICIocHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVkLm11bHRpKVsxXS5hLCIKLSAg
ICAgICAgICAgICIocHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVkLm11bHRpKVsxXS5iLCIK
LSAgICAgICAgICAgICIocHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVkLm11bHRpKVsxXS5j
IiwKLSAgICAgICAgICAgIEZpbmRJbml0aWFsaXphdGlvbkVycm9ycyhtZXNzYWdlKSk7Ci19Ci0K
LVRFU1QoUmVmbGVjdGlvbk9wc1Rlc3QsIEZpbmRPbmVvZkluaXRpYWxpemF0aW9uRXJyb3JzKSB7
Ci0gIHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWRPbmVvZiBtZXNzYWdlOwotICBtZXNzYWdlLm11dGFi
bGVfZm9vX21lc3NhZ2UoKTsKLSAgRVhQRUNUX0VRKCJmb29fbWVzc2FnZS5yZXF1aXJlZF9kb3Vi
bGUiLAotICAgICAgICAgICAgRmluZEluaXRpYWxpemF0aW9uRXJyb3JzKG1lc3NhZ2UpKTsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3JlcGVh
dGVkX2ZpZWxkLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzAwNGY1OWFmOWNl
NTNmNzcyN2ZjNTZiYzhhYmE0ZDU5NjlmMjY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZC5jYwor
KysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQot
Ly8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2Fu
amF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxhbGdvcml0
aG0+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2Ug
cHJvdG9idWYgewotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi12b2lkKiogUmVwZWF0ZWRQdHJG
aWVsZEJhc2U6OkludGVybmFsRXh0ZW5kKGludCBleHRlbmRfYW1vdW50KSB7Ci0gIGludCBuZXdf
c2l6ZSA9IGN1cnJlbnRfc2l6ZV8gKyBleHRlbmRfYW1vdW50OwotICBpZiAodG90YWxfc2l6ZV8g
Pj0gbmV3X3NpemUpIHsKLSAgICAvLyBOLkIuOiByZXBfIGlzIG5vbi1OVUxMIGJlY2F1c2UgZXh0
ZW5kX2Ftb3VudCBpcyBhbHdheXMgPiAwLCBoZW5jZQotICAgIC8vIHRvdGFsX3NpemUgbXVzdCBi
ZSBub24temVybyBzaW5jZSBpdCBpcyBsb3dlci1ib3VuZGVkIGJ5IG5ld19zaXplLgotICAgIHJl
dHVybiAmcmVwXy0+ZWxlbWVudHNbY3VycmVudF9zaXplX107Ci0gIH0KLSAgUmVwKiBvbGRfcmVw
ID0gcmVwXzsKLSAgQXJlbmEqIGFyZW5hID0gR2V0QXJlbmFOb1ZpcnR1YWwoKTsKLSAgbmV3X3Np
emUgPSBzdGQ6Om1heChrTWluUmVwZWF0ZWRGaWVsZEFsbG9jYXRpb25TaXplLAotICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KHRvdGFsX3NpemVfICogMiwgbmV3X3NpemUpKTsKLSAgR09P
R0xFX0NIRUNLX0xFKG5ld19zaXplLAotICAgICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxz
aXplX3Q+OjptYXgoKSAtIGtSZXBIZWFkZXJTaXplKSAvCi0gICAgICAgICAgIHNpemVvZihvbGRf
cmVwLT5lbGVtZW50c1swXSkpCi0gICAgICA8PCAiUmVxdWVzdGVkIHNpemUgaXMgdG9vIGxhcmdl
IHRvIGZpdCBpbnRvIHNpemVfdC4iOwotICBpZiAoYXJlbmEgPT0gTlVMTCkgewotICAgIHJlcF8g
PSByZWludGVycHJldF9jYXN0PFJlcCo+KAotICAgICAgICBuZXcgY2hhcltrUmVwSGVhZGVyU2l6
ZSArIHNpemVvZihvbGRfcmVwLT5lbGVtZW50c1swXSkgKiBuZXdfc2l6ZV0pOwotICB9IGVsc2Ug
ewotICAgIHJlcF8gPSByZWludGVycHJldF9jYXN0PFJlcCo+KAotICAgICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OkFyZW5hOjpDcmVhdGVBcnJheTxjaGFyPihhcmVuYSwKLSAgICAgICAgICAgIGtS
ZXBIZWFkZXJTaXplICsgc2l6ZW9mKG9sZF9yZXAtPmVsZW1lbnRzWzBdKSAqIG5ld19zaXplKSk7
Ci0gIH0KLSAgdG90YWxfc2l6ZV8gPSBuZXdfc2l6ZTsKLSAgaWYgKG9sZF9yZXAgJiYgb2xkX3Jl
cC0+YWxsb2NhdGVkX3NpemUgPiAwKSB7Ci0gICAgbWVtY3B5KHJlcF8tPmVsZW1lbnRzLCBvbGRf
cmVwLT5lbGVtZW50cywKLSAgICAgICAgICAgb2xkX3JlcC0+YWxsb2NhdGVkX3NpemUgKiBzaXpl
b2YocmVwXy0+ZWxlbWVudHNbMF0pKTsKLSAgICByZXBfLT5hbGxvY2F0ZWRfc2l6ZSA9IG9sZF9y
ZXAtPmFsbG9jYXRlZF9zaXplOwotICB9IGVsc2UgewotICAgIHJlcF8tPmFsbG9jYXRlZF9zaXpl
ID0gMDsKLSAgfQotICBpZiAoYXJlbmEgPT0gTlVMTCkgewotICAgIGRlbGV0ZSBbXSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihvbGRfcmVwKTsKLSAgfQotICByZXR1cm4gJnJlcF8tPmVsZW1lbnRz
W2N1cnJlbnRfc2l6ZV9dOwotfQotCi12b2lkIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpSZXNlcnZl
KGludCBuZXdfc2l6ZSkgewotICBpZiAobmV3X3NpemUgPiBjdXJyZW50X3NpemVfKSB7Ci0gICAg
SW50ZXJuYWxFeHRlbmQobmV3X3NpemUgLSBjdXJyZW50X3NpemVfKTsKLSAgfQotfQotCi12b2lk
IFJlcGVhdGVkUHRyRmllbGRCYXNlOjpDbG9zZUdhcChpbnQgc3RhcnQsIGludCBudW0pIHsKLSAg
aWYgKHJlcF8gPT0gTlVMTCkgcmV0dXJuOwotICAvLyBDbG9zZSB1cCBhIGdhcCBvZiAibnVtIiBl
bGVtZW50cyBzdGFydGluZyBhdCBvZmZzZXQgInN0YXJ0Ii4KLSAgZm9yIChpbnQgaSA9IHN0YXJ0
ICsgbnVtOyBpIDwgcmVwXy0+YWxsb2NhdGVkX3NpemU7ICsraSkKLSAgICByZXBfLT5lbGVtZW50
c1tpIC0gbnVtXSA9IHJlcF8tPmVsZW1lbnRzW2ldOwotICBjdXJyZW50X3NpemVfIC09IG51bTsK
LSAgcmVwXy0+YWxsb2NhdGVkX3NpemUgLT0gbnVtOwotfQotCi19ICAvLyBuYW1lc3BhY2UgaW50
ZXJuYWwKLQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29n
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZC5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDE5NjFiYzQ4MTBiMGM5ZWU3NGYwMWJmZDJjNWY0OTQyMmMxYTYyYTguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L3JlcGVhdGVkX2ZpZWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDgzICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUu
Y29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVy
cyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4K
LS8vCi0vLyBSZXBlYXRlZEZpZWxkIGFuZCBSZXBlYXRlZFB0ckZpZWxkIGFyZSB1c2VkIGJ5IGdl
bmVyYXRlZCBwcm90b2NvbCBtZXNzYWdlCi0vLyBjbGFzc2VzIHRvIG1hbmlwdWxhdGUgcmVwZWF0
ZWQgZmllbGRzLiAgVGhlc2UgY2xhc3NlcyBhcmUgdmVyeSBzaW1pbGFyIHRvCi0vLyBTVEwncyB2
ZWN0b3IsIGJ1dCBpbmNsdWRlIGEgbnVtYmVyIG9mIG9wdGltaXphdGlvbnMgZm91bmQgdG8gYmUg
dXNlZnVsCi0vLyBzcGVjaWZpY2FsbHkgaW4gdGhlIGNhc2Ugb2YgUHJvdG9jb2wgQnVmZmVycy4g
IFJlcGVhdGVkUHRyRmllbGQgaXMKLS8vIHBhcnRpY3VsYXJseSBkaWZmZXJlbnQgZnJvbSBTVEwg
dmVjdG9yIGFzIGl0IG1hbmFnZXMgb3duZXJzaGlwIG9mIHRoZQotLy8gcG9pbnRlcnMgdGhhdCBp
dCBjb250YWlucy4KLS8vCi0vLyBUeXBpY2FsbHksIGNsaWVudHMgc2hvdWxkIG5vdCBuZWVkIHRv
IGFjY2VzcyBSZXBlYXRlZEZpZWxkIG9iamVjdHMgZGlyZWN0bHksCi0vLyBidXQgc2hvdWxkIGlu
c3RlYWQgdXNlIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkg
YnkgdGhlCi0vLyBwcm90b2NvbCBjb21waWxlci4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZf
UkVQRUFURURfRklFTERfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9SRVBFQVRFRF9GSUVM
RF9IX18KLQotI2lmZGVmIF9NU0NfVkVSCi0vLyBUaGlzIGlzIHJlcXVpcmVkIGZvciBtaW4vbWF4
IG9uIFZTMjAxMyBvbmx5LgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNlbmRpZgotCi0jaW5jbHVk
ZSA8c3RyaW5nPgotI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9jYXN0cy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5n
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy90eXBlX3RyYWl0cy5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVz
c2FnZV91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2VfbGl0ZS5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLQotbmFtZXNwYWNlIHVwYiB7Ci1uYW1lc3BhY2UgZ29vZ2xl
X29wZW5zb3VyY2UgewotY2xhc3MgR01SX0hhbmRsZXJzOwotfSAgLy8gbmFtZXNwYWNlIGdvb2ds
ZV9vcGVuc291cmNlCi19ICAvLyBuYW1lc3BhY2UgdXBiCi0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci0KLWNsYXNzIE1lc3NhZ2U7Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLXN0YXRpYyBjb25z
dCBpbnQga01pblJlcGVhdGVkRmllbGRBbGxvY2F0aW9uU2l6ZSA9IDQ7Ci0KLS8vIEEgdXRpbGl0
eSBmdW5jdGlvbiBmb3IgbG9nZ2luZyB0aGF0IGRvZXNuJ3QgbmVlZCBhbnkgdGVtcGxhdGUgdHlw
ZXMuCi12b2lkIExvZ0luZGV4T3V0T2ZCb3VuZHMoaW50IGluZGV4LCBpbnQgc2l6ZSk7Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBJdGVyPgotaW5saW5lIGludCBDYWxjdWxhdGVSZXNlcnZlKEl0ZXIg
YmVnaW4sIEl0ZXIgZW5kLCBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKSB7Ci0gIHJldHVybiBz
dGQ6OmRpc3RhbmNlKGJlZ2luLCBlbmQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4K
LWlubGluZSBpbnQgQ2FsY3VsYXRlUmVzZXJ2ZShJdGVyIC8qYmVnaW4qLywgSXRlciAvKmVuZCov
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnIC8q
dW51c2VkKi8pIHsKLSAgcmV0dXJuIC0xOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4K
LWlubGluZSBpbnQgQ2FsY3VsYXRlUmVzZXJ2ZShJdGVyIGJlZ2luLCBJdGVyIGVuZCkgewotICB0
eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXI+OjppdGVyYXRvcl9jYXRl
Z29yeSBDYXRlZ29yeTsKLSAgcmV0dXJuIENhbGN1bGF0ZVJlc2VydmUoYmVnaW4sIGVuZCwgQ2F0
ZWdvcnkoKSk7Ci19Ci19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotCi0vLyBSZXBlYXRlZEZp
ZWxkIGlzIHVzZWQgdG8gcmVwcmVzZW50IHJlcGVhdGVkIGZpZWxkcyBvZiBhIHByaW1pdGl2ZSB0
eXBlIChpbgotLy8gb3RoZXIgd29yZHMsIGV2ZXJ5dGhpbmcgZXhjZXB0IHN0cmluZ3MgYW5kIG5l
c3RlZCBNZXNzYWdlcykuICBNb3N0IHVzZXJzIHdpbGwKLS8vIG5vdCBldmVyIHVzZSBhIFJlcGVh
dGVkRmllbGQgZGlyZWN0bHk7IHRoZXkgd2lsbCB1c2UgdGhlIGdldC1ieS1pbmRleCwKLS8vIHNl
dC1ieS1pbmRleCwgYW5kIGFkZCBhY2Nlc3NvcnMgdGhhdCBhcmUgZ2VuZXJhdGVkIGZvciBhbGwg
cmVwZWF0ZWQgZmllbGRzLgotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1jbGFzcyBSZXBl
YXRlZEZpZWxkIHsKLSBwdWJsaWM6Ci0gIFJlcGVhdGVkRmllbGQoKTsKLSAgZXhwbGljaXQgUmVw
ZWF0ZWRGaWVsZChBcmVuYSogYXJlbmEpOwotICBSZXBlYXRlZEZpZWxkKGNvbnN0IFJlcGVhdGVk
RmllbGQmIG90aGVyKTsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXI+Ci0gIFJlcGVhdGVkRmll
bGQoSXRlciBiZWdpbiwgY29uc3QgSXRlciYgZW5kKTsKLSAgflJlcGVhdGVkRmllbGQoKTsKLQot
ICBSZXBlYXRlZEZpZWxkJiBvcGVyYXRvcj0oY29uc3QgUmVwZWF0ZWRGaWVsZCYgb3RoZXIpOwot
Ci0gIGJvb2wgZW1wdHkoKSBjb25zdDsKLSAgaW50IHNpemUoKSBjb25zdDsKLQotICBjb25zdCBF
bGVtZW50JiBHZXQoaW50IGluZGV4KSBjb25zdDsKLSAgRWxlbWVudCogTXV0YWJsZShpbnQgaW5k
ZXgpOwotICB2b2lkIFNldChpbnQgaW5kZXgsIGNvbnN0IEVsZW1lbnQmIHZhbHVlKTsKLSAgdm9p
ZCBBZGQoY29uc3QgRWxlbWVudCYgdmFsdWUpOwotICBFbGVtZW50KiBBZGQoKTsKLSAgLy8gUmVt
b3ZlIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGFycmF5LgotICB2b2lkIFJlbW92ZUxhc3QoKTsK
LQotICAvLyBFeHRyYWN0IGVsZW1lbnRzIHdpdGggaW5kaWNlcyBpbiAiW3N0YXJ0IC4uIHN0YXJ0
K251bS0xXSIuCi0gIC8vIENvcHkgdGhlbSBpbnRvICJlbGVtZW50c1swIC4uIG51bS0xXSIgaWYg
ImVsZW1lbnRzIiBpcyBub3QgTlVMTC4KLSAgLy8gQ2F1dGlvbjogaW1wbGVtZW50YXRpb24gYWxz
byBtb3ZlcyBlbGVtZW50cyB3aXRoIGluZGljZXMgW3N0YXJ0K251bSAuLl0uCi0gIC8vIENhbGxp
bmcgdGhpcyByb3V0aW5lIGluc2lkZSBhIGxvb3AgY2FuIGNhdXNlIHF1YWRyYXRpYyBiZWhhdmlv
ci4KLSAgdm9pZCBFeHRyYWN0U3VicmFuZ2UoaW50IHN0YXJ0LCBpbnQgbnVtLCBFbGVtZW50KiBl
bGVtZW50cyk7Ci0KLSAgdm9pZCBDbGVhcigpOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBSZXBl
YXRlZEZpZWxkJiBvdGhlcik7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgUmVwZWF0ZWRGaWVsZCYg
b3RoZXIpOwotCi0gIC8vIFJlc2VydmUgc3BhY2UgdG8gZXhwYW5kIHRoZSBmaWVsZCB0byBhdCBs
ZWFzdCB0aGUgZ2l2ZW4gc2l6ZS4gIElmIHRoZQotICAvLyBhcnJheSBpcyBncm93biwgaXQgd2ls
bCBhbHdheXMgYmUgYXQgbGVhc3QgZG91YmxlZCBpbiBzaXplLgotICB2b2lkIFJlc2VydmUoaW50
IG5ld19zaXplKTsKLQotICAvLyBSZXNpemUgdGhlIFJlcGVhdGVkRmllbGQgdG8gYSBuZXcsIHNt
YWxsZXIgc2l6ZS4gIFRoaXMgaXMgTygxKS4KLSAgdm9pZCBUcnVuY2F0ZShpbnQgbmV3X3NpemUp
OwotCi0gIHZvaWQgQWRkQWxyZWFkeVJlc2VydmVkKGNvbnN0IEVsZW1lbnQmIHZhbHVlKTsKLSAg
RWxlbWVudCogQWRkQWxyZWFkeVJlc2VydmVkKCk7Ci0gIGludCBDYXBhY2l0eSgpIGNvbnN0Owot
Ci0gIC8vIExpa2UgU1RMIHJlc2l6ZS4gIFVzZXMgdmFsdWUgdG8gZmlsbCBhcHBlbmRlZCBlbGVt
ZW50cy4KLSAgLy8gTGlrZSBUcnVuY2F0ZSgpIGlmIG5ld19zaXplIDw9IHNpemUoKSwgb3RoZXJ3
aXNlIHRoaXMgaXMKLSAgLy8gTyhuZXdfc2l6ZSAtIHNpemUoKSkuCi0gIHZvaWQgUmVzaXplKGlu
dCBuZXdfc2l6ZSwgY29uc3QgRWxlbWVudCYgdmFsdWUpOwotCi0gIC8vIEdldHMgdGhlIHVuZGVy
bHlpbmcgYXJyYXkuICBUaGlzIHBvaW50ZXIgaXMgcG9zc2libHkgaW52YWxpZGF0ZWQgYnkKLSAg
Ly8gYW55IGFkZCBvciByZW1vdmUgb3BlcmF0aW9uLgotICBFbGVtZW50KiBtdXRhYmxlX2RhdGEo
KTsKLSAgY29uc3QgRWxlbWVudCogZGF0YSgpIGNvbnN0OwotCi0gIC8vIFN3YXAgZW50aXJlIGNv
bnRlbnRzIHdpdGggIm90aGVyIi4gSWYgdGhleSBhcmUgc2VwYXJhdGUgYXJlbmFzIHRoZW4sIGNv
cGllcwotICAvLyBkYXRhIGJldHdlZW4gZWFjaCBvdGhlci4KLSAgdm9pZCBTd2FwKFJlcGVhdGVk
RmllbGQqIG90aGVyKTsKLQotICAvLyBTd2FwIGVudGlyZSBjb250ZW50cyB3aXRoICJvdGhlciIu
IFNob3VsZCBiZSBjYWxsZWQgb25seSBpZiB0aGUgY2FsbGVyIGNhbgotICAvLyBndWFyYW50ZWUg
dGhhdCBib3RoIHJlcGVhdGVkIGZpZWxkcyBhcmUgb24gdGhlIHNhbWUgYXJlbmEgb3IgYXJlIG9u
IHRoZQotICAvLyBoZWFwLiBTd2FwcGluZyBiZXR3ZWVuIGRpZmZlcmVudCBhcmVuYXMgaXMgZGlz
YWxsb3dlZCBhbmQgY2F1Z2h0IGJ5IGEKLSAgLy8gR09PR0xFX0RDSEVDSyAoc2VlIEFQSSBkb2Nz
IGZvciBkZXRhaWxzKS4KLSAgdm9pZCBVbnNhZmVBcmVuYVN3YXAoUmVwZWF0ZWRGaWVsZCogb3Ro
ZXIpOwotCi0gIC8vIFN3YXAgdHdvIGVsZW1lbnRzLgotICB2b2lkIFN3YXBFbGVtZW50cyhpbnQg
aW5kZXgxLCBpbnQgaW5kZXgyKTsKLQotICAvLyBTVEwtbGlrZSBpdGVyYXRvciBzdXBwb3J0Ci0g
IHR5cGVkZWYgRWxlbWVudCogaXRlcmF0b3I7Ci0gIHR5cGVkZWYgY29uc3QgRWxlbWVudCogY29u
c3RfaXRlcmF0b3I7Ci0gIHR5cGVkZWYgRWxlbWVudCB2YWx1ZV90eXBlOwotICB0eXBlZGVmIHZh
bHVlX3R5cGUmIHJlZmVyZW5jZTsKLSAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9y
ZWZlcmVuY2U7Ci0gIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKLSAgdHlwZWRlZiBjb25z
dCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwotICB0eXBlZGVmIGludCBzaXplX3R5cGU7Ci0g
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKLQotICBpdGVyYXRvciBiZWdpbigp
OwotICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0OwotICBjb25zdF9pdGVyYXRvciBjYmVn
aW4oKSBjb25zdDsKLSAgaXRlcmF0b3IgZW5kKCk7Ci0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0OwotICBjb25zdF9pdGVyYXRvciBjZW5kKCkgY29uc3Q7Ci0KLSAgLy8gUmV2ZXJzZSBpdGVy
YXRvciBzdXBwb3J0Ci0gIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh
dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwotICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVy
YXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKLSAgcmV2ZXJzZV9pdGVyYXRvciByYmVn
aW4oKSB7Ci0gICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwotICB9Ci0gIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewotICAgIHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsKLSAgfQotICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7Ci0g
ICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7Ci0gIH0KLSAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewotICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yKGJlZ2luKCkpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVz
ZWQgYnkgdGhlIHJlcGVhdGVkIGZpZWxkLCBleGNsdWRpbmcKLSAgLy8gc2l6ZW9mKCp0aGlzKQot
ICBpbnQgU3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpIGNvbnN0OwotCi0gIC8vIFJlbW92ZXMgdGhl
IGVsZW1lbnQgcmVmZXJlbmNlZCBieSBwb3NpdGlvbi4KLSAgLy8KLSAgLy8gUmV0dXJucyBhbiBp
dGVyYXRvciB0byB0aGUgZWxlbWVudCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIHJlbW92ZWQK
LSAgLy8gZWxlbWVudC4KLSAgLy8KLSAgLy8gSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBhdCBv
ciBhZnRlciB0aGUgcmVtb3ZlZCBlbGVtZW50LCBpbmNsdWRpbmcgZW5kKCkuCi0gIGl0ZXJhdG9y
IGVyYXNlKGNvbnN0X2l0ZXJhdG9yIHBvc2l0aW9uKTsKLQotICAvLyBSZW1vdmVzIHRoZSBlbGVt
ZW50cyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KS4KLSAgLy8KLSAgLy8gUmV0dXJucyBhbiBp
dGVyYXRvciB0byB0aGUgZWxlbWVudCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIHJlbW92ZWQg
cmFuZ2UuCi0gIC8vCi0gIC8vIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgYXQgb3IgYWZ0ZXIg
dGhlIHJlbW92ZWQgcmFuZ2UsIGluY2x1ZGluZyBlbmQoKS4KLSAgaXRlcmF0b3IgZXJhc2UoY29u
c3RfaXRlcmF0b3IgZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIGxhc3QpOwotCi0gIC8vIEdldCB0aGUg
QXJlbmEgb24gd2hpY2ggdGhpcyBSZXBlYXRlZEZpZWxkIHN0b3JlcyBpdHMgZWxlbWVudHMuCi0g
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hKCkgY29uc3QgewotICAgIHJldHVy
biBHZXRBcmVuYU5vVmlydHVhbCgpOwotICB9Ci0KLSBwcml2YXRlOgotICBzdGF0aWMgY29uc3Qg
aW50IGtJbml0aWFsU2l6ZSA9IDA7Ci0gIC8vIEEgbm90ZSBvbiB0aGUgcmVwcmVzZW50YXRpb24g
aGVyZSAoc2VlIGFsc28gY29tbWVudCBiZWxvdyBmb3IKLSAgLy8gUmVwZWF0ZWRQdHJGaWVsZEJh
c2UncyBzdHJ1Y3QgUmVwKToKLSAgLy8KLSAgLy8gV2UgbWFpbnRhaW4gdGhlIHNhbWUgc2l6ZW9m
KFJlcGVhdGVkRmllbGQpIGFzIGJlZm9yZSB3ZSBhZGRlZCBhcmVuYSBzdXBwb3J0Ci0gIC8vIHNv
IHRoYXQgd2UgZG8gbm90IGRlZ3JhZGUgcGVyZm9ybWFuY2UgYnkgYmxvYXRpbmcgbWVtb3J5IHVz
YWdlLiBEaXJlY3RseQotICAvLyBhZGRpbmcgYW4gYXJlbmFfIGVsZW1lbnQgdG8gUmVwZWF0ZWRG
aWVsZCBpcyBxdWl0ZSBjb3N0bHkuIEJ5IHVzaW5nCi0gIC8vIGluZGlyZWN0aW9uIGluIHRoaXMg
d2F5LCB3ZSBrZWVwIHRoZSBzYW1lIHNpemUgd2hlbiB0aGUgUmVwZWF0ZWRGaWVsZCBpcwotICAv
LyBlbXB0eSAoY29tbW9uIGNhc2UpLCBhbmQgYWRkIG9ubHkgYW4gOC1ieXRlIGhlYWRlciB0byB0
aGUgZWxlbWVudHMgYXJyYXkKLSAgLy8gd2hlbiBub24tZW1wdHkuIFdlIG1ha2Ugc3VyZSB0byBw
bGFjZSB0aGUgc2l6ZSBmaWVsZHMgZGlyZWN0bHkgaW4gdGhlCi0gIC8vIFJlcGVhdGVkRmllbGQg
Y2xhc3MgdG8gYXZvaWQgY29zdGx5IGNhY2hlIG1pc3NlcyBkdWUgdG8gdGhlIGluZGlyZWN0aW9u
LgotICBpbnQgY3VycmVudF9zaXplXzsKLSAgaW50IHRvdGFsX3NpemVfOwotICBzdHJ1Y3QgUmVw
IHsKLSAgICBBcmVuYSogYXJlbmE7Ci0gICAgRWxlbWVudCBlbGVtZW50c1sxXTsKLSAgfTsKLSAg
Ly8gV2UgY2FuIG5vdCB1c2Ugc2l6ZW9mKFJlcCkgLSBzaXplb2YoRWxlbWVudCkgZHVlIHRvIHRo
ZSB0cmFpbGluZyBwYWRkaW5nIG9uCi0gIC8vIHRoZSBzdHJ1Y3QuIFdlIGNhbiBub3QgdXNlIHNp
emVvZihBcmVuYSopIGFzIHdlbGwgYmVjYXVzZSB0aGVyZSBtaWdodCBiZQotICAvLyBhICJnYXAi
IGFmdGVyIHRoZSBmaWVsZCBhcmVuYSBhbmQgYmVmb3JlIHRoZSBmaWVsZCBlbGVtZW50cyAoZS5n
Liwgd2hlbgotICAvLyBFbGVtZW50IGlzIGRvdWJsZSBhbmQgcG9pbnRlciBpcyAzMmJpdCkuCi0g
IHN0YXRpYyBjb25zdCBzaXplX3Qga1JlcEhlYWRlclNpemU7Ci0gIC8vIENvbnRhaW5zIGFyZW5h
IHB0ciBhbmQgdGhlIGVsZW1lbnRzIGFycmF5LiBXZSBhbHNvIGtlZXAgdGhlIGludmFyaWFudCB0
aGF0Ci0gIC8vIGlmIHJlcF8gaXMgTlVMTCwgdGhlbiBhcmVuYSBpcyBOVUxMLgotICBSZXAqIHJl
cF87Ci0KLSAgZnJpZW5kIGNsYXNzIEFyZW5hOwotICB0eXBlZGVmIHZvaWQgSW50ZXJuYWxBcmVu
YUNvbnN0cnVjdGFibGVfOwotCi0gIC8vIE1vdmUgdGhlIGNvbnRlbnRzIG9mIHxmcm9tfCBpbnRv
IHx0b3wsIHBvc3NpYmx5IGNsb2JiZXJpbmcgfGZyb218IGluIHRoZQotICAvLyBwcm9jZXNzLiAg
Rm9yIHByaW1pdGl2ZSB0eXBlcyB0aGlzIGlzIGp1c3QgYSBtZW1jcHkoKSwgYnV0IGl0IGNvdWxk
IGJlCi0gIC8vIHNwZWNpYWxpemVkIGZvciBub24tcHJpbWl0aXZlIHR5cGVzIHRvLCBzYXksIHN3
YXAgZWFjaCBlbGVtZW50IGluc3RlYWQuCi0gIHZvaWQgTW92ZUFycmF5KEVsZW1lbnQqIHRvLCBF
bGVtZW50KiBmcm9tLCBpbnQgc2l6ZSk7Ci0KLSAgLy8gQ29weSB0aGUgZWxlbWVudHMgb2YgfGZy
b218IGludG8gfHRvfC4KLSAgdm9pZCBDb3B5QXJyYXkoRWxlbWVudCogdG8sIGNvbnN0IEVsZW1l
bnQqIGZyb20sIGludCBzaXplKTsKLQotICBpbmxpbmUgdm9pZCBJbnRlcm5hbFN3YXAoUmVwZWF0
ZWRGaWVsZCogb3RoZXIpOwotCi0gIC8vIEludGVybmFsIGhlbHBlciBleHBlY3RlZCBieSBBcmVu
YSBtZXRob2RzLgotICBpbmxpbmUgQXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3Qgewot
ICAgIHJldHVybiAocmVwXyA9PSBOVUxMKSA/IE5VTEwgOiByZXBfLT5hcmVuYTsKLSAgfQotCi0g
IC8vIEludGVybmFsIGhlbHBlciB0byBkZWxldGUgYWxsIGVsZW1lbnRzIGFuZCBkZWFsbG9jYXRl
IHRoZSBzdG9yYWdlLgotICAvLyBJZiBFbGVtZW50IGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3RvciAo
Zm9yIGV4YW1wbGUsIGlmIGl0J3MgYSBmdW5kYW1lbnRhbAotICAvLyB0eXBlLCBsaWtlIGludDMy
KSwgdGhlIGxvb3Agd2lsbCBiZSByZW1vdmVkIGJ5IHRoZSBvcHRpbWl6ZXIuCi0gIHZvaWQgSW50
ZXJuYWxEZWFsbG9jYXRlKFJlcCogcmVwLCBpbnQgc2l6ZSkgewotICAgIGlmIChyZXAgIT0gTlVM
TCkgewotICAgICAgRWxlbWVudCogZSA9ICZyZXAtPmVsZW1lbnRzWzBdOwotICAgICAgRWxlbWVu
dCogbGltaXQgPSAmcmVwLT5lbGVtZW50c1tzaXplXTsKLSAgICAgIGZvciAoOyBlIDwgbGltaXQ7
IGUrKykgewotICAgICAgICBlLT5FbGVtZW50Ojp+RWxlbWVudCgpOwotICAgICAgfQotICAgICAg
aWYgKHJlcC0+YXJlbmEgPT0gTlVMTCkgewotICAgICAgICBkZWxldGVbXSByZWludGVycHJldF9j
YXN0PGNoYXIqPihyZXApOwotICAgICAgfQotICAgIH0KLSAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgRWxlbWVudD4KLWNvbnN0IHNpemVfdCBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+OjprUmVw
SGVhZGVyU2l6ZSA9Ci0gICAgcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KCZyZWludGVycHJldF9j
YXN0PFJlcCo+KDE2KS0+ZWxlbWVudHNbMF0pIC0gMTY7Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgSXQ+IGNsYXNzIFJlcGVhdGVkUHRySXRlcmF0b3I7Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgSXQsIHR5cGVuYW1lIFZvaWRQdHI+IGNsYXNzIFJlcGVhdGVkUHRyT3Zl
clB0cnNJdGVyYXRvcjsKLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi1uYW1lc3BhY2UgaW50
ZXJuYWwgewotCi0vLyBUaGlzIGlzIGEgaGVscGVyIHRlbXBsYXRlIHRvIGNvcHkgYW4gYXJyYXkg
b2YgZWxlbWVudHMgZWZmZWNpZW50bHkgd2hlbiB0aGV5Ci0vLyBoYXZlIGEgdHJpdmlhbCBjb3B5
IGNvbnN0cnVjdG9yLCBhbmQgY29ycmVjdGx5IG90aGVyd2lzZS4gVGhpcyByZWFsbHkKLS8vIHNo
b3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCBvdXIgY29tcGlsZXIgZG9lc24ndCBvcHRpbWl6ZSBz
dGQ6OmNvcHkgdmVyeQotLy8gZWZmZWN0aXZlbHkuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dCwKLSAgICAgICAgICBib29sIEhhc1RyaXZpYWxDb3B5ID0gaGFzX3RyaXZpYWxfY29weTxFbGVt
ZW50Pjo6dmFsdWU+Ci1zdHJ1Y3QgRWxlbWVudENvcGllciB7Ci0gIHZvaWQgb3BlcmF0b3IoKShF
bGVtZW50KiB0bywgY29uc3QgRWxlbWVudCogZnJvbSwgaW50IGFycmF5X3NpemUpOwotfTsKLQot
fSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIHR5
cGUtdHJhaXRzIGhlbHBlciBmb3IgUmVwZWF0ZWRQdHJGaWVsZEJhc2U6IHdlIG9ubHkgd2FudCB0
byBpbnZva2UKLS8vIGFyZW5hLXJlbGF0ZWQgImNvcHkgaWYgb24gZGlmZmVyZW50IGFyZW5hIiBi
ZWhhdmlvciBpZiB0aGUgbmVjZXNzYXJ5IG1ldGhvZHMKLS8vIGV4aXN0IG9uIHRoZSBjb250YWlu
ZWQgdHlwZS4gSW4gcGFydGljdWxhciwgd2UgcmVseSBvbiBNZXJnZUZyb20oKSBleGlzdGluZwot
Ly8gYXMgYSBnZW5lcmFsIHByb3h5IGZvciB0aGUgZmFjdCB0aGF0IGEgY29weSB3aWxsIHdvcmss
IGFuZCB3ZSBhbHNvIHByb3ZpZGUgYQotLy8gc3BlY2lmaWMgb3ZlcnJpZGUgZm9yIHN0cmluZyou
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IFR5cGVJbXBsZW1lbnRzTWVyZ2VCZWhhdmlv
ciB7Ci0gIHR5cGVkZWYgY2hhciBIYXNNZXJnZTsKLSAgdHlwZWRlZiBsb25nIEhhc05vTWVyZ2U7
Ci0KLSAgLy8gV2UgYWNjZXB0IGVpdGhlciBvZjoKLSAgLy8gLSB2b2lkIE1lcmdlRnJvbShjb25z
dCBUJiBvdGhlcikKLSAgLy8gLSBib29sIE1lcmdlRnJvbShjb25zdCBUJiBvdGhlcikKLSAgLy8K
LSAgLy8gV2UgbWFuZ2xlIHRoZXNlIG5hbWVzIGEgYml0IHRvIGF2b2lkIGNvbXBhdGliaWxpdHkg
aXNzdWVzIGluICd1bmNsZWFuJwotICAvLyBpbmNsdWRlIGVudmlyb25tZW50cyB0aGF0IG1heSBo
YXZlLCBlLmcuLCAiI2RlZmluZSB0ZXN0IC4uLiIgKHllcywgdGhpcwotICAvLyBleGlzdHMpLgot
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBSZXRUeXBlLCBSZXRUeXBlIChVOjoqKShj
b25zdCBVJiBhcmcpPgotICAgICAgc3RydWN0IENoZWNrVHlwZTsKLSAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gc3RhdGljIEhhc01lcmdlIENoZWNrKAotICAgICAgQ2hlY2tUeXBlPFUsIHZvaWQsICZV
OjpNZXJnZUZyb20+Kik7Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBIYXNNZXJnZSBD
aGVjaygKLSAgICAgIENoZWNrVHlwZTxVLCBib29sLCAmVTo6TWVyZ2VGcm9tPiopOwotICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSGFzTm9NZXJnZSBDaGVjayguLi4pOwotCi0gIC8vIFJl
c292bGVzIHRvIGVpdGhlciBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6dHJ1ZV90eXBlIG9y
IGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpmYWxzZV90eXBlLgotICB0eXBlZGVmIGdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjppbnRlZ3JhbF9jb25zdGFudDxib29sLAotICAgICAgICAg
ICAgICAgKHNpemVvZihDaGVjazxUPigwKSkgPT0gc2l6ZW9mKEhhc01lcmdlKSk+IHR5cGU7Ci19
OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgVHlwZUltcGxlbWVudHNNZXJnZUJlaGF2aW9yPCA6OnN0
ZDo6c3RyaW5nID4gewotICB0eXBlZGVmIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjp0cnVl
X3R5cGUgdHlwZTsKLX07Ci0KLS8vIFRoaXMgaXMgdGhlIGNvbW1vbiBiYXNlIGNsYXNzIGZvciBS
ZXBlYXRlZFB0ckZpZWxkcy4gIEl0IGRlYWxzIG9ubHkgaW4gdm9pZCoKLS8vIHBvaW50ZXJzLiAg
VXNlcnMgc2hvdWxkIG5vdCB1c2UgdGhpcyBpbnRlcmZhY2UgZGlyZWN0bHkuCi0vLwotLy8gVGhl
IG1ldGhvZHMgb2YgdGhpcyBpbnRlcmZhY2UgY29ycmVzcG9uZCB0byB0aGUgbWV0aG9kcyBvZiBS
ZXBlYXRlZFB0ckZpZWxkLAotLy8gYnV0IG1heSBoYXZlIGEgdGVtcGxhdGUgYXJndW1lbnQgY2Fs
bGVkIFR5cGVIYW5kbGVyLiAgSXRzIHNpZ25hdHVyZSBpczoKLS8vICAgY2xhc3MgVHlwZUhhbmRs
ZXIgewotLy8gICAgcHVibGljOgotLy8gICAgIHR5cGVkZWYgTXlUeXBlIFR5cGU7Ci0vLyAgICAg
c3RhdGljIFR5cGUqIE5ldygpOwotLy8gICAgIHN0YXRpYyB2b2lkIERlbGV0ZShUeXBlKik7Ci0v
LyAgICAgc3RhdGljIHZvaWQgQ2xlYXIoVHlwZSopOwotLy8gICAgIHN0YXRpYyB2b2lkIE1lcmdl
KGNvbnN0IFR5cGUmIGZyb20sIFR5cGUqIHRvKTsKLS8vCi0vLyAgICAgLy8gT25seSBuZWVkcyB0
byBiZSBpbXBsZW1lbnRlZCBpZiBTcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCkgaXMgY2FsbGVkLgot
Ly8gICAgIHN0YXRpYyBpbnQgU3BhY2VVc2VkKGNvbnN0IFR5cGUmKTsKLS8vICAgfTsKLWNsYXNz
IExJQlBST1RPQlVGX0VYUE9SVCBSZXBlYXRlZFB0ckZpZWxkQmFzZSB7Ci0gcHJvdGVjdGVkOgot
ICAvLyBUaGUgcmVmbGVjdGlvbiBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBjYWxsIHByb3RlY3Rl
ZCBtZXRob2RzIGRpcmVjdGx5LAotICAvLyByZWludGVycHJldGluZyBwb2ludGVycyBhcyBiZWlu
ZyB0byBNZXNzYWdlIGluc3RlYWQgb2YgYSBzcGVjaWZpYyBNZXNzYWdlCi0gIC8vIHN1YmNsYXNz
LgotICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb247Ci0KLSAgLy8gRXh0
ZW5zaW9uU2V0IHN0b3JlcyByZXBlYXRlZCBtZXNzYWdlIGV4dGVuc2lvbnMgYXMKLSAgLy8gUmVw
ZWF0ZWRQdHJGaWVsZDxNZXNzYWdlTGl0ZT4sIGJ1dCBub24tbGl0ZSBFeHRlbnNpb25TZXRzIG5l
ZWQgdG8KLSAgLy8gaW1wbGVtZW50IFNwYWNlVXNlZCgpLCBhbmQgdGh1cyBuZWVkIHRvIGNhbGwg
U3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpCi0gIC8vIHJlaW50ZXJwcmV0aW5nIE1lc3NhZ2VMaXRl
IGFzIE1lc3NhZ2UuICBFeHRlbnNpb25TZXQgYWxzbyBuZWVkcyB0byBtYWtlCi0gIC8vIHVzZSBv
ZiBBZGRGcm9tQ2xlYXJlZCgpLCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVy
ZmFjZS4KLSAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvblNldDsKLQotICAvLyBUaGUgTWFwRmllbGRC
YXNlIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIGNhbGwgcHJvdGVjdGVkIG1ldGhvZHMgZGlyZWN0
bHksCi0gIC8vIHJlaW50ZXJwcmV0aW5nIHBvaW50ZXJzIGFzIGJlaW5nIHRvIE1lc3NhZ2UgaW5z
dGVhZCBvZiBhIHNwZWNpZmljIE1lc3NhZ2UKLSAgLy8gc3ViY2xhc3MuCi0gIGZyaWVuZCBjbGFz
cyBNYXBGaWVsZEJhc2U7Ci0KLSAgLy8gVG8gcGFyc2UgZGlyZWN0bHkgaW50byBhIHByb3RvMiBn
ZW5lcmF0ZWQgY2xhc3MsIHRoZSB1cGIgY2xhc3MgR01SX0hhbmRsZXJzCi0gIC8vIG5lZWRzIHRv
IGJlIGFibGUgdG8gbW9kaWZ5IGEgUmVwZWF0ZWRQdHJGaWVsZEJhc2UgZGlyZWN0bHkuCi0gIGZy
aWVuZCBjbGFzcyB1cGI6Omdvb2dsZV9vcGVuc291cmNlOjpHTVJfSGFuZGxlcnM7Ci0KLSAgUmVw
ZWF0ZWRQdHJGaWVsZEJhc2UoKTsKLSAgZXhwbGljaXQgUmVwZWF0ZWRQdHJGaWVsZEJhc2UoOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwotICB+UmVwZWF0ZWRQdHJGaWVsZEJhc2Uo
KSB7fQotCi0gIC8vIE11c3QgYmUgY2FsbGVkIGZyb20gZGVzdHJ1Y3Rvci4KLSAgdGVtcGxhdGUg
PHR5cGVuYW1lIFR5cGVIYW5kbGVyPgotICB2b2lkIERlc3Ryb3koKTsKLQotICBib29sIGVtcHR5
KCkgY29uc3Q7Ci0gIGludCBzaXplKCkgY29uc3Q7Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5
cGVIYW5kbGVyPgotICBjb25zdCB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSYgR2V0KGludCBp
bmRleCkgY29uc3Q7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLSAgdHlwZW5h
bWUgVHlwZUhhbmRsZXI6OlR5cGUqIE11dGFibGUoaW50IGluZGV4KTsKLSAgdGVtcGxhdGUgPHR5
cGVuYW1lIFR5cGVIYW5kbGVyPgotICB2b2lkIERlbGV0ZShpbnQgaW5kZXgpOwotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVHlwZUhhbmRsZXI+Ci0gIHR5cGVuYW1lIFR5cGVIYW5kbGVyOjpUeXBlKiBB
ZGQodHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqIHByb3RvdHlwZSA9IE5VTEwpOwotCi0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLSAgdm9pZCBSZW1vdmVMYXN0KCk7Ci0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLSAgdm9pZCBDbGVhcigpOwotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVHlwZUhhbmRsZXI+Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IFJlcGVhdGVk
UHRyRmllbGRCYXNlJiBvdGhlcik7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4K
LSAgdm9pZCBDb3B5RnJvbShjb25zdCBSZXBlYXRlZFB0ckZpZWxkQmFzZSYgb3RoZXIpOwotCi0g
IHZvaWQgQ2xvc2VHYXAoaW50IHN0YXJ0LCBpbnQgbnVtKTsKLQotICB2b2lkIFJlc2VydmUoaW50
IG5ld19zaXplKTsKLQotICBpbnQgQ2FwYWNpdHkoKSBjb25zdDsKLQotICAvLyBVc2VkIGZvciBj
b25zdHJ1Y3RpbmcgaXRlcmF0b3JzLgotICB2b2lkKiBjb25zdCogcmF3X2RhdGEoKSBjb25zdDsK
LSAgdm9pZCoqIHJhd19tdXRhYmxlX2RhdGEoKSBjb25zdDsKLQotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZUhhbmRsZXI+Ci0gIHR5cGVuYW1lIFR5cGVIYW5kbGVyOjpUeXBlKiogbXV0YWJsZV9k
YXRhKCk7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLSAgY29uc3QgdHlwZW5h
bWUgVHlwZUhhbmRsZXI6OlR5cGUqIGNvbnN0KiBkYXRhKCkgY29uc3Q7Ci0KLSAgdGVtcGxhdGUg
PHR5cGVuYW1lIFR5cGVIYW5kbGVyPgotICBHT09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUg
dm9pZCBTd2FwKFJlcGVhdGVkUHRyRmllbGRCYXNlKiBvdGhlcik7Ci0KLSAgdm9pZCBTd2FwRWxl
bWVudHMoaW50IGluZGV4MSwgaW50IGluZGV4Mik7Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5
cGVIYW5kbGVyPgotICBpbnQgU3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpIGNvbnN0OwotCi0KLSAg
Ly8gQWR2YW5jZWQgbWVtb3J5IG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAvLyBMaWtlIEFkZCgpLCBidXQgaWYgdGhlcmUgYXJlIG5vIGNsZWFy
ZWQgb2JqZWN0cyB0byB1c2UsIHJldHVybnMgTlVMTC4KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5
cGVIYW5kbGVyPgotICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogQWRkRnJvbUNsZWFyZWQo
KTsKLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLSAgdm9pZCBBZGRBbGxvY2F0
ZWQodHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqIHZhbHVlKSB7Ci0gICAgdHlwZW5hbWUgVHlw
ZUltcGxlbWVudHNNZXJnZUJlaGF2aW9yPHR5cGVuYW1lIFR5cGVIYW5kbGVyOjpUeXBlPjo6dHlw
ZSB0OwotICAgIEFkZEFsbG9jYXRlZEludGVybmFsPFR5cGVIYW5kbGVyPih2YWx1ZSwgdCk7Ci0g
IH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZUhhbmRsZXI+Ci0gIHZvaWQgVW5zYWZlQXJl
bmFBZGRBbGxvY2F0ZWQodHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqIHZhbHVlKTsKLQotICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZUhhbmRsZXI+Ci0gIHR5cGVuYW1lIFR5cGVIYW5kbGVyOjpU
eXBlKiBSZWxlYXNlTGFzdCgpIHsKLSAgICB0eXBlbmFtZSBUeXBlSW1wbGVtZW50c01lcmdlQmVo
YXZpb3I8dHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGU+Ojp0eXBlIHQ7Ci0gICAgcmV0dXJuIFJl
bGVhc2VMYXN0SW50ZXJuYWw8VHlwZUhhbmRsZXI+KHQpOwotICB9Ci0KLSAgLy8gUmVsZWFzZXMg
bGFzdCBlbGVtZW50IGFuZCByZXR1cm5zIGl0LCBidXQgZG9lcyBub3QgZG8gb3V0LW9mLWFyZW5h
IGNvcHkuCi0gIC8vIEFuZCBqdXN0IHJldHVybnMgdGhlIHJhdyBwb2ludGVyIHRvIHRoZSBjb250
YWluZWQgZWxlbWVudCBpbiB0aGUgYXJlbmEuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFu
ZGxlcj4KLSAgdHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqIFVuc2FmZUFyZW5hUmVsZWFzZUxh
c3QoKTsKLQotICBpbnQgQ2xlYXJlZENvdW50KCkgY29uc3Q7Ci0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUeXBlSGFuZGxlcj4KLSAgdm9pZCBBZGRDbGVhcmVkKHR5cGVuYW1lIFR5cGVIYW5kbGVyOjpU
eXBlKiB2YWx1ZSk7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLSAgdHlwZW5h
bWUgVHlwZUhhbmRsZXI6OlR5cGUqIFJlbGVhc2VDbGVhcmVkKCk7Ci0KLSBwcm90ZWN0ZWQ6Ci0g
IGlubGluZSB2b2lkIEludGVybmFsU3dhcChSZXBlYXRlZFB0ckZpZWxkQmFzZSogb3RoZXIpOwot
Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLSAgdm9pZCBBZGRBbGxvY2F0ZWRJ
bnRlcm5hbCh0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogdmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OnRydWVfdHlwZSk7Ci0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLSAgdm9pZCBBZGRBbGxvY2F0ZWRJbnRl
cm5hbCh0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogdmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OmZhbHNlX3R5cGUpOwotCi0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4gR09PR0xFX0FUVFJJQlVURV9OT0lOTElO
RQotICB2b2lkIEFkZEFsbG9jYXRlZFNsb3dXaXRoQ29weSh0eXBlbmFtZSBUeXBlSGFuZGxlcjo6
VHlwZSogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZW5hKiB2YWx1
ZV9hcmVuYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJlbmEqIG15X2FyZW5h
KTsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVyPiBHT09HTEVfQVRUUklCVVRFX05P
SU5MSU5FCi0gIHZvaWQgQWRkQWxsb2NhdGVkU2xvd1dpdGhvdXRDb3B5KHR5cGVuYW1lIFR5cGVI
YW5kbGVyOjpUeXBlKiB2YWx1ZSk7Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVy
PgotICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogUmVsZWFzZUxhc3RJbnRlcm5hbChnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6dHJ1ZV90eXBlKTsKLSAgdGVtcGxhdGUgPHR5cGVuYW1l
IFR5cGVIYW5kbGVyPgotICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogUmVsZWFzZUxhc3RJ
bnRlcm5hbChnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6ZmFsc2VfdHlwZSk7Ci0KLSAgdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZUhhbmRsZXI+IEdPT0dMRV9BVFRSSUJVVEVfTk9JTkxJTkUKLSAg
dm9pZCBTd2FwRmFsbGJhY2soUmVwZWF0ZWRQdHJGaWVsZEJhc2UqIG90aGVyKTsKLQotICBpbmxp
bmUgQXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBhcmVuYV87
Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHN0YXRpYyBjb25zdCBpbnQga0luaXRpYWxTaXplID0gMDsK
LSAgLy8gQSBmZXcgbm90ZXMgb24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb246Ci0gIC8vCi0gIC8v
IFdlIHVzZSBhbiBpbmRpcmVjdGVkIGFwcHJvYWNoLCB3aXRoIHN0cnVjdCBSZXAsIHRvIGtlZXAK
LSAgLy8gc2l6ZW9mKFJlcGVhdGVkUHRyRmllbGRCYXNlKSBlcXVpdmFsZW50IHRvIHdoYXQgaXQg
d2FzIGJlZm9yZSBhcmVuYSBzdXBwb3J0Ci0gIC8vIHdhcyBhZGRlZCwgbmFtZWx5LCAzIDgtYnl0
ZSBtYWNoaW5lIHdvcmRzIG9uIHg4Ni02NC4gQW4gaW5zdGFuY2Ugb2YgUmVwIGlzCi0gIC8vIGFs
bG9jYXRlZCBvbmx5IHdoZW4gdGhlIHJlcGVhdGVkIGZpZWxkIGlzIG5vbi1lbXB0eSwgYW5kIGl0
IGlzIGEKLSAgLy8gZHluYW1pY2FsbHktc2l6ZWQgc3RydWN0ICh0aGUgaGVhZGVyIGlzIGRpcmVj
dGx5IGZvbGxvd2VkIGJ5IGVsZW1lbnRzW10pLgotICAvLyBXZSBwbGFjZSBhcmVuYV8gYW5kIGN1
cnJlbnRfc2l6ZV8gZGlyZWN0bHkgaW4gdGhlIG9iamVjdCB0byBhdm9pZCBjYWNoZQotICAvLyBt
aXNzZXMgZHVlIHRvIHRoZSBpbmRpcmVjdGlvbiwgYmVjYXVzZSB0aGVzZSBmaWVsZHMgYXJlIGNo
ZWNrZWQgZnJlcXVlbnRseS4KLSAgLy8gUGxhY2luZyBhbGwgZmllbGRzIGRpcmVjdGx5IGluIHRo
ZSBSZXBlYXRlZFB0ckZpZWxkQmFzZSBpbnN0YW5jZSBjb3N0cwotICAvLyBzaWduaWZpY2FudCBw
ZXJmb3JtYW5jZSBmb3IgbWVtb3J5LXNlbnNpdGl2ZSB3b3JrbG9hZHMuCi0gIEFyZW5hKiBhcmVu
YV87Ci0gIGludCAgICBjdXJyZW50X3NpemVfOwotICBpbnQgICAgdG90YWxfc2l6ZV87Ci0gIHN0
cnVjdCBSZXAgewotICAgIGludCAgICBhbGxvY2F0ZWRfc2l6ZTsKLSAgICB2b2lkKiAgZWxlbWVu
dHNbMV07Ci0gIH07Ci0gIHN0YXRpYyBjb25zdCBzaXplX3Qga1JlcEhlYWRlclNpemUgPSBzaXpl
b2YoUmVwKSAtIHNpemVvZih2b2lkKik7Ci0gIC8vIENvbnRhaW5zIGFyZW5hIHB0ciBhbmQgdGhl
IGVsZW1lbnRzIGFycmF5LiBXZSBhbHNvIGtlZXAgdGhlIGludmFyaWFudCB0aGF0Ci0gIC8vIGlm
IHJlcF8gaXMgTlVMTCwgdGhlbiBhcmVuYSBpcyBOVUxMLgotICBSZXAqIHJlcF87Ci0KLSAgdGVt
cGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVyPgotICBzdGF0aWMgaW5saW5lIHR5cGVuYW1lIFR5
cGVIYW5kbGVyOjpUeXBlKiBjYXN0KHZvaWQqIGVsZW1lbnQpIHsKLSAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSo+KGVsZW1lbnQpOwotICB9Ci0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLSAgc3RhdGljIGlubGluZSBjb25zdCB0
eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogY2FzdChjb25zdCB2b2lkKiBlbGVtZW50KSB7Ci0g
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5
cGUqPihlbGVtZW50KTsKLSAgfQotCi0gIC8vIE5vbi10ZW1wbGF0ZWQgaW5uZXIgZnVuY3Rpb24g
dG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi4gVGFrZXMgYSBmdW5jdGlvbgotICAvLyBwb2ludGVy
IHRvIHRoZSB0eXBlLXNwZWNpZmljICh0ZW1wbGF0ZWQpIGlubmVyIGFsbG9jYXRlL21lcmdlIGxv
b3AuCi0gIHZvaWQgTWVyZ2VGcm9tSW50ZXJuYWwoCi0gICAgICBjb25zdCBSZXBlYXRlZFB0ckZp
ZWxkQmFzZSYgb3RoZXIsCi0gICAgICB2b2lkIChSZXBlYXRlZFB0ckZpZWxkQmFzZTo6KmlubmVy
X2xvb3ApKHZvaWQqKiwgdm9pZCoqLCBpbnQsIGludCkpOwotCi0gIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGVIYW5kbGVyPgotICB2b2lkIE1lcmdlRnJvbUlubmVyTG9vcCgKLSAgICAgIHZvaWQqKiBv
dXJfZWxlbXMsIHZvaWQqKiBvdGhlcl9lbGVtcywgaW50IGxlbmd0aCwgaW50IGFscmVhZHlfYWxs
b2NhdGVkKTsKLQotICAvLyBJbnRlcm5hbCBoZWxwZXI6IGV4dGVuZCBhcnJheSBzcGFjZSBpZiBu
ZWNlc3NhcnkgdG8gY29udGFpbiB8ZXh0ZW5kX2Ftb3VudHwKLSAgLy8gbW9yZSBlbGVtZW50cywg
YW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5n
Ci0gIC8vIHRoZSBvbGQgbGlzdCBvZiBlbGVtZW50cy4gIFRoaXMgaW50ZXJmYWNlIGZhY3RvcnMg
b3V0IGNvbW1vbiBiZWhhdmlvciBmcm9tCi0gIC8vIFJlc2VydmUoKSBhbmQgTWVyZ2VGcm9tKCkg
dG8gcmVkdWNlIGNvZGUgc2l6ZS4gfGV4dGVuZF9hbW91bnR8IG11c3QgYmUgPiAwLgotICB2b2lk
KiogSW50ZXJuYWxFeHRlbmQoaW50IGV4dGVuZF9hbW91bnQpOwotCi0gIEdPT0dMRV9ESVNBTExP
V19FVklMX0NPTlNUUlVDVE9SUyhSZXBlYXRlZFB0ckZpZWxkQmFzZSk7Ci19OwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJpY1R5cGU+Ci1jbGFzcyBHZW5lcmljVHlwZUhhbmRsZXIgewotIHB1
YmxpYzoKLSAgdHlwZWRlZiBHZW5lcmljVHlwZSBUeXBlOwotICBzdGF0aWMgaW5saW5lIEdlbmVy
aWNUeXBlKiBOZXcoQXJlbmEqIGFyZW5hKSB7Ci0gICAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmE6OkNyZWF0ZU1heWJlTWVzc2FnZTxUeXBlPigKLSAgICAgICAgYXJlbmEsIHN0YXRp
Y19jYXN0PEdlbmVyaWNUeXBlKj4oMCkpOwotICB9Ci0gIC8vIFdlIGZvcmNlIE5ld0Zyb21Qcm90
b3R5cGUoKSBhbmQgRGVsZXRlKCkgdG8gYmUgbm9uLWlubGluZSB0byByZWR1Y2UgY29kZQotICAv
LyBzaXplOiBlbHNlLCBzZXZlcmFsIG90aGVyIG1ldGhvZHMgZ2V0IGlubGluZWQgY29waWVzIG9m
IG1lc3NhZ2UgdHlwZXMnCi0gIC8vIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMuCi0gIEdP
T0dMRV9BVFRSSUJVVEVfTk9JTkxJTkUgc3RhdGljIEdlbmVyaWNUeXBlKiBOZXdGcm9tUHJvdG90
eXBlKAotICAgICAgY29uc3QgR2VuZXJpY1R5cGUqIHByb3RvdHlwZSwgOjpnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYSogYXJlbmEgPSBOVUxMKTsKLSAgR09PR0xFX0FUVFJJQlVURV9OT0lOTElORSBz
dGF0aWMgdm9pZCBEZWxldGUoR2VuZXJpY1R5cGUqIHZhbHVlLCBBcmVuYSogYXJlbmEpOwotICBz
dGF0aWMgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hKEdlbmVyaWNU
eXBlKiB2YWx1ZSkgewotICAgIHJldHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOjpHZXRB
cmVuYTxUeXBlPih2YWx1ZSk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSB2b2lkKiBHZXRNYXliZUFy
ZW5hUG9pbnRlcihHZW5lcmljVHlwZSogdmFsdWUpIHsKLSAgICByZXR1cm4gOjpnb29nbGU6OnBy
b3RvYnVmOjpBcmVuYTo6R2V0QXJlbmE8VHlwZT4odmFsdWUpOwotICB9Ci0KLSAgc3RhdGljIGlu
bGluZSB2b2lkIENsZWFyKEdlbmVyaWNUeXBlKiB2YWx1ZSkgeyB2YWx1ZS0+Q2xlYXIoKTsgfQot
ICBHT09HTEVfQVRUUklCVVRFX05PSU5MSU5FIHN0YXRpYyB2b2lkIE1lcmdlKGNvbnN0IEdlbmVy
aWNUeXBlJiBmcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2Vu
ZXJpY1R5cGUqIHRvKTsKLSAgc3RhdGljIGlubGluZSBpbnQgU3BhY2VVc2VkKGNvbnN0IEdlbmVy
aWNUeXBlJiB2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZS5TcGFjZVVzZWQoKTsKLSAgfQotICBz
dGF0aWMgaW5saW5lIGNvbnN0IFR5cGUmIGRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJu
IFR5cGU6OmRlZmF1bHRfaW5zdGFuY2UoKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyaWNUeXBlPgotR2VuZXJpY1R5cGUqIEdlbmVyaWNUeXBlSGFuZGxlcjxHZW5lcmljVHlw
ZT46Ok5ld0Zyb21Qcm90b3R5cGUoCi0gICAgY29uc3QgR2VuZXJpY1R5cGUqIC8qIHByb3RvdHlw
ZSAqLywgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIHsKLSAgcmV0dXJuIE5ldyhh
cmVuYSk7Ci19Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJpY1R5cGU+Ci12b2lkIEdlbmVyaWNU
eXBlSGFuZGxlcjxHZW5lcmljVHlwZT46OkRlbGV0ZShHZW5lcmljVHlwZSogdmFsdWUsIEFyZW5h
KiBhcmVuYSkgewotICBpZiAoYXJlbmEgPT0gTlVMTCkgewotICAgIGRlbGV0ZSB2YWx1ZTsKLSAg
fQotfQotdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyaWNUeXBlPgotdm9pZCBHZW5lcmljVHlwZUhh
bmRsZXI8R2VuZXJpY1R5cGU+OjpNZXJnZShjb25zdCBHZW5lcmljVHlwZSYgZnJvbSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJpY1R5cGUqIHRvKSB7
Ci0gIHRvLT5NZXJnZUZyb20oZnJvbSk7Ci19Ci0KLS8vIE5ld0Zyb21Qcm90b3R5cGUoKSBhbmQg
TWVyZ2UoKSBjYW5ub3QgYmUgZGVmaW5lZCBoZXJlOyBpZiB0aGV5J3JlIGRlY2xhcmVkCi0vLyBp
bmxpbmUgdGhlIGNvbXBpbGVyIHdpbGwgY29tcGxhaW4gYWJvdXQgbm90IG1hdGNoaW5nIEdPT0dM
RV9BVFRSSUJVVEVfTk9JTkxJTkUKLS8vIGFib3ZlLCBhbmQgaWYgbm90LCBjb21waWxhdGlvbiB3
aWxsIHJlc3VsdCBpbiBtdWx0aXBsZSBkZWZpbml0aW9ucy4gIFRoZXNlCi0vLyBhcmUgdGhlcmVm
b3JlIGRlY2xhcmVkIGFzIHNwZWNpYWxpemF0aW9ucyBoZXJlIGFuZCBkZWZpbmVkIGluCi0vLyBt
ZXNzYWdlX2xpdGUuY2MuCi10ZW1wbGF0ZTw+Ci1NZXNzYWdlTGl0ZSogR2VuZXJpY1R5cGVIYW5k
bGVyPE1lc3NhZ2VMaXRlPjo6TmV3RnJvbVByb3RvdHlwZSgKLSAgICBjb25zdCBNZXNzYWdlTGl0
ZSogcHJvdG90eXBlLCBnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwotdGVtcGxhdGU8
PgotaW5saW5lIGdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZW5lcmljVHlwZUhhbmRsZXI8TWVz
c2FnZUxpdGU+OjpHZXRBcmVuYSgKLSAgICBNZXNzYWdlTGl0ZSogdmFsdWUpIHsKLSAgcmV0dXJu
IHZhbHVlLT5HZXRBcmVuYSgpOwotfQotdGVtcGxhdGU8PgotaW5saW5lIHZvaWQqIEdlbmVyaWNU
eXBlSGFuZGxlcjxNZXNzYWdlTGl0ZT46OkdldE1heWJlQXJlbmFQb2ludGVyKAotICAgIE1lc3Nh
Z2VMaXRlKiB2YWx1ZSkgewotICByZXR1cm4gdmFsdWUtPkdldE1heWJlQXJlbmFQb2ludGVyKCk7
Ci19Ci10ZW1wbGF0ZSA8Pgotdm9pZCBHZW5lcmljVHlwZUhhbmRsZXI8TWVzc2FnZUxpdGU+OjpN
ZXJnZShjb25zdCBNZXNzYWdlTGl0ZSYgZnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWVzc2FnZUxpdGUqIHRvKTsKLXRlbXBsYXRlPD4KLWlubGluZSB2
b2lkIEdlbmVyaWNUeXBlSGFuZGxlcjxzdHJpbmc+OjpDbGVhcihzdHJpbmcqIHZhbHVlKSB7Ci0g
IHZhbHVlLT5jbGVhcigpOwotfQotdGVtcGxhdGU8Pgotdm9pZCBHZW5lcmljVHlwZUhhbmRsZXI8
c3RyaW5nPjo6TWVyZ2UoY29uc3Qgc3RyaW5nJiBmcm9tLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyaW5nKiB0byk7Ci0KLS8vIERlY2xhcmF0aW9ucyBvZiB0aGUg
c3BlY2lhbGl6YXRpb24gYXMgd2UgY2Fubm90IGRlZmluZSB0aGVtIGhlcmUsIGFzIHRoZQotLy8g
aGVhZGVyIHRoYXQgZGVmaW5lcyBQcm90b2NvbE1lc3NhZ2UgZGVwZW5kcyBvbiB0eXBlcyBkZWZp
bmVkIGluIHRoaXMgaGVhZGVyLgotI2RlZmluZSBERUNMQVJFX1NQRUNJQUxJWkFUSU9OU19GT1Jf
QkFTRV9QUk9UT19UWVBFUyhUeXBlTmFtZSkgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1wbGF0
ZTw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgVHlwZU5hbWUqIEdlbmVyaWNUeXBlSGFuZGxlcjxUeXBlTmFtZT46
Ok5ld0Zyb21Qcm90b3R5cGUoICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBUeXBl
TmFtZSogcHJvdG90eXBlLCBnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOyAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgdGVtcGxhdGU8PiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdvb2dsZTo6cHJv
dG9idWY6OkFyZW5hKiBHZW5lcmljVHlwZUhhbmRsZXI8VHlwZU5hbWU+OjpHZXRBcmVuYSggICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFR5cGVOYW1lKiB2YWx1ZSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXBsYXRl
PD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB2b2lkKiBHZW5lcmljVHlwZUhhbmRsZXI8VHlwZU5hbWU+OjpHZXRN
YXliZUFyZW5hUG9pbnRlciggICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFR5cGVOYW1lKiB2
YWx1ZSk7Ci0KLS8vIE1lc3NhZ2Ugc3BlY2lhbGl6YXRpb24gYm9kaWVzIGRlZmluZWQgaW4gbWVz
c2FnZS5jYy4gVGhpcyBzcGxpdCBpcyBuZWNlc3NhcnkKLS8vIHRvIGFsbG93IHByb3RvMi1saXRl
ICh3aGljaCBpbmNsdWRlcyB0aGlzIGhlYWRlcikgdG8gYmUgaW5kZXBlbmRlbnQgb2YKLS8vIE1l
c3NhZ2UuCi1ERUNMQVJFX1NQRUNJQUxJWkFUSU9OU19GT1JfQkFTRV9QUk9UT19UWVBFUyhNZXNz
YWdlKQotCi0KLSN1bmRlZiBERUNMQVJFX1NQRUNJQUxJWkFUSU9OU19GT1JfQkFTRV9QUk9UT19U
WVBFUwotCi10ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0IE1lc3NhZ2VMaXRlJiBHZW5lcmljVHlw
ZUhhbmRsZXI8TWVzc2FnZUxpdGU+OjpkZWZhdWx0X2luc3RhbmNlKCkgewotICAvLyBZZXMsIHRo
ZSBiZWhhdmlvciBvZiB0aGUgY29kZSBpcyB1bmRlZmluZWQsIGJ1dCB0aGlzIGZ1bmN0aW9uIGlz
IG9ubHkKLSAgLy8gY2FsbGVkIHdoZW4gd2UncmUgYWxyZWFkeSBkZWVwIGludG8gdGhlIHdvcmxk
IG9mIHVuZGVmaW5lZCwgYmVjYXVzZSB0aGUKLSAgLy8gY2FsbGVyIGNhbGxlZCBHZXQoaW5kZXgp
IG91dCBvZiBib3VuZHMuCi0gIE1lc3NhZ2VMaXRlKiBudWxsID0gTlVMTDsKLSAgcmV0dXJuICpu
dWxsOwotfQotCi10ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0IE1lc3NhZ2UmIEdlbmVyaWNUeXBl
SGFuZGxlcjxNZXNzYWdlPjo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgLy8gWWVzLCB0aGUgYmVo
YXZpb3Igb2YgdGhlIGNvZGUgaXMgdW5kZWZpbmVkLCBidXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5
Ci0gIC8vIGNhbGxlZCB3aGVuIHdlJ3JlIGFscmVhZHkgZGVlcCBpbnRvIHRoZSB3b3JsZCBvZiB1
bmRlZmluZWQsIGJlY2F1c2UgdGhlCi0gIC8vIGNhbGxlciBjYWxsZWQgR2V0KGluZGV4KSBvdXQg
b2YgYm91bmRzLgotICBNZXNzYWdlKiBudWxsID0gTlVMTDsKLSAgcmV0dXJuICpudWxsOwotfQot
Ci0KLS8vIEhBQ0s6ICBJZiBhIGNsYXNzIGlzIGRlY2xhcmVkIGFzIERMTC1leHBvcnRlZCBpbiBN
U1ZDLCBpdCBpbnNpc3RzIG9uCi0vLyAgIGdlbmVyYXRpbmcgY29waWVzIG9mIGFsbCBpdHMgbWV0
aG9kcyAtLSBldmVuIGlubGluZSBvbmVzIC0tIHRvIGluY2x1ZGUKLS8vICAgaW4gdGhlIERMTC4g
IEJ1dCBTcGFjZVVzZWQoKSBjYWxscyBTdHJpbmdTcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCkgd2hp
Y2gKLS8vICAgaXNuJ3QgaW4gdGhlIGxpdGUgbGlicmFyeSwgdGhlcmVmb3JlIHRoZSBsaXRlIGxp
YnJhcnkgY2Fubm90IGxpbmsgaWYKLS8vICAgU3RyaW5nVHlwZUhhbmRsZXIgaXMgZXhwb3J0ZWQu
ICBTbywgd2UgZmFjdG9yIG91dCBTdHJpbmdUeXBlSGFuZGxlckJhc2UsCi0vLyAgIGV4cG9ydCB0
aGF0LCB0aGVuIG1ha2UgU3RyaW5nVHlwZUhhbmRsZXIgYmUgYSBzdWJjbGFzcyB3aGljaCBpcyBO
T1QKLS8vICAgZXhwb3J0ZWQuCi0vLyBUT0RPKGtlbnRvbik6ICBOb3cgdGhhdCBTdHJpbmdTcGFj
ZVVzZWRFeGNsdWRpbmdTZWxmKCkgaXMgaW4gdGhlIGxpdGUKLS8vICAgbGlicmFyeSwgdGhpcyBj
YW4gYmUgY2xlYW5lZCB1cC4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBTdHJpbmdUeXBlSGFu
ZGxlckJhc2UgewotIHB1YmxpYzoKLSAgdHlwZWRlZiBzdHJpbmcgVHlwZTsKLQotICBzdGF0aWMg
aW5saW5lIHN0cmluZyogTmV3KEFyZW5hKiBhcmVuYSkgewotICAgIHJldHVybiBBcmVuYTo6Q3Jl
YXRlPHN0cmluZz4oYXJlbmEpOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgc3RyaW5nKiBOZXdGcm9t
UHJvdG90eXBlKGNvbnN0IHN0cmluZyosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSB7Ci0gICAgcmV0dXJu
IE5ldyhhcmVuYSk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFy
ZW5hKiBHZXRBcmVuYShzdHJpbmcqKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgc3RhdGlj
IGlubGluZSB2b2lkKiBHZXRNYXliZUFyZW5hUG9pbnRlcihzdHJpbmcqIC8qIHZhbHVlICovKSB7
Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgc3RhdGljIGlubGluZSB2b2lkIERlbGV0ZShzdHJp
bmcqIHZhbHVlLCBBcmVuYSogYXJlbmEpIHsKLSAgICBpZiAoYXJlbmEgPT0gTlVMTCkgewotICAg
ICAgZGVsZXRlIHZhbHVlOwotICAgIH0KLSAgfQotICBzdGF0aWMgaW5saW5lIHZvaWQgQ2xlYXIo
c3RyaW5nKiB2YWx1ZSkgeyB2YWx1ZS0+Y2xlYXIoKTsgfQotICBzdGF0aWMgaW5saW5lIHZvaWQg
TWVyZ2UoY29uc3Qgc3RyaW5nJiBmcm9tLCBzdHJpbmcqIHRvKSB7ICp0byA9IGZyb207IH0KLSAg
c3RhdGljIGlubGluZSBjb25zdCBUeXBlJiBkZWZhdWx0X2luc3RhbmNlKCkgewotICAgIHJldHVy
biA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZygpOwotICB9Ci19
OwotCi1jbGFzcyBTdHJpbmdUeXBlSGFuZGxlciA6IHB1YmxpYyBTdHJpbmdUeXBlSGFuZGxlckJh
c2UgewotIHB1YmxpYzoKLSAgc3RhdGljIGludCBTcGFjZVVzZWQoY29uc3Qgc3RyaW5nJiB2YWx1
ZSkgIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YodmFsdWUpKSArIFN0cmlu
Z1NwYWNlVXNlZEV4Y2x1ZGluZ1NlbGYodmFsdWUpOwotICB9Ci19OwotCi0KLX0gIC8vIG5hbWVz
cGFjZSBpbnRlcm5hbAotCi0vLyBSZXBlYXRlZFB0ckZpZWxkIGlzIGxpa2UgUmVwZWF0ZWRGaWVs
ZCwgYnV0IHVzZWQgZm9yIHJlcGVhdGVkIHN0cmluZ3Mgb3IKLS8vIE1lc3NhZ2VzLgotdGVtcGxh
dGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1jbGFzcyBSZXBlYXRlZFB0ckZpZWxkIDogcHVibGljIGlu
dGVybmFsOjpSZXBlYXRlZFB0ckZpZWxkQmFzZSB7Ci0gcHVibGljOgotICBSZXBlYXRlZFB0ckZp
ZWxkKCk7Ci0gIGV4cGxpY2l0IFJlcGVhdGVkUHRyRmllbGQoOjpnb29nbGU6OnByb3RvYnVmOjpB
cmVuYSogYXJlbmEpOwotCi0gIFJlcGVhdGVkUHRyRmllbGQoY29uc3QgUmVwZWF0ZWRQdHJGaWVs
ZCYgb3RoZXIpOwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4KLSAgUmVwZWF0ZWRQdHJGaWVs
ZChJdGVyIGJlZ2luLCBjb25zdCBJdGVyJiBlbmQpOwotICB+UmVwZWF0ZWRQdHJGaWVsZCgpOwot
Ci0gIFJlcGVhdGVkUHRyRmllbGQmIG9wZXJhdG9yPShjb25zdCBSZXBlYXRlZFB0ckZpZWxkJiBv
dGhlcik7Ci0KLSAgYm9vbCBlbXB0eSgpIGNvbnN0OwotICBpbnQgc2l6ZSgpIGNvbnN0OwotCi0g
IGNvbnN0IEVsZW1lbnQmIEdldChpbnQgaW5kZXgpIGNvbnN0OwotICBFbGVtZW50KiBNdXRhYmxl
KGludCBpbmRleCk7Ci0gIEVsZW1lbnQqIEFkZCgpOwotCi0gIC8vIFJlbW92ZSB0aGUgbGFzdCBl
bGVtZW50IGluIHRoZSBhcnJheS4KLSAgLy8gT3duZXJzaGlwIG9mIHRoZSBlbGVtZW50IGlzIHJl
dGFpbmVkIGJ5IHRoZSBhcnJheS4KLSAgdm9pZCBSZW1vdmVMYXN0KCk7Ci0KLSAgLy8gRGVsZXRl
IGVsZW1lbnRzIHdpdGggaW5kaWNlcyBpbiB0aGUgcmFuZ2UgW3N0YXJ0IC4uIHN0YXJ0K251bS0x
XS4KLSAgLy8gQ2F1dGlvbjogaW1wbGVtZW50YXRpb24gbW92ZXMgYWxsIGVsZW1lbnRzIHdpdGgg
aW5kaWNlcyBbc3RhcnQrbnVtIC4uIF0uCi0gIC8vIENhbGxpbmcgdGhpcyByb3V0aW5lIGluc2lk
ZSBhIGxvb3AgY2FuIGNhdXNlIHF1YWRyYXRpYyBiZWhhdmlvci4KLSAgdm9pZCBEZWxldGVTdWJy
YW5nZShpbnQgc3RhcnQsIGludCBudW0pOwotCi0gIHZvaWQgQ2xlYXIoKTsKLSAgdm9pZCBNZXJn
ZUZyb20oY29uc3QgUmVwZWF0ZWRQdHJGaWVsZCYgb3RoZXIpOwotICB2b2lkIENvcHlGcm9tKGNv
bnN0IFJlcGVhdGVkUHRyRmllbGQmIG90aGVyKTsKLQotICAvLyBSZXNlcnZlIHNwYWNlIHRvIGV4
cGFuZCB0aGUgZmllbGQgdG8gYXQgbGVhc3QgdGhlIGdpdmVuIHNpemUuICBUaGlzIG9ubHkKLSAg
Ly8gcmVzaXplcyB0aGUgcG9pbnRlciBhcnJheTsgaXQgZG9lc24ndCBhbGxvY2F0ZSBhbnkgb2Jq
ZWN0cy4gIElmIHRoZQotICAvLyBhcnJheSBpcyBncm93biwgaXQgd2lsbCBhbHdheXMgYmUgYXQg
bGVhc3QgZG91YmxlZCBpbiBzaXplLgotICB2b2lkIFJlc2VydmUoaW50IG5ld19zaXplKTsKLQot
ICBpbnQgQ2FwYWNpdHkoKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSB1bmRlcmx5aW5nIGFycmF5
LiAgVGhpcyBwb2ludGVyIGlzIHBvc3NpYmx5IGludmFsaWRhdGVkIGJ5Ci0gIC8vIGFueSBhZGQg
b3IgcmVtb3ZlIG9wZXJhdGlvbi4KLSAgRWxlbWVudCoqIG11dGFibGVfZGF0YSgpOwotICBjb25z
dCBFbGVtZW50KiBjb25zdCogZGF0YSgpIGNvbnN0OwotCi0gIC8vIFN3YXAgZW50aXJlIGNvbnRl
bnRzIHdpdGggIm90aGVyIi4gSWYgdGhleSBhcmUgb24gc2VwYXJhdGUgYXJlbmFzLCB0aGVuCi0g
IC8vIGNvcGllcyBkYXRhLgotICB2b2lkIFN3YXAoUmVwZWF0ZWRQdHJGaWVsZCogb3RoZXIpOwot
Ci0gIC8vIFN3YXAgZW50aXJlIGNvbnRlbnRzIHdpdGggIm90aGVyIi4gQ2FsbGVyIHNob3VsZCBn
dWFyYW50ZWUgdGhhdCBlaXRoZXIgYm90aAotICAvLyBmaWVsZHMgYXJlIG9uIHRoZSBzYW1lIGFy
ZW5hIG9yIGJvdGggYXJlIG9uIHRoZSBoZWFwLiBTd2FwcGluZyBiZXR3ZWVuCi0gIC8vIGRpZmZl
cmVudCBhcmVuYXMgd2l0aCB0aGlzIGZ1bmN0aW9uIGlzIGRpc2FsbG93ZWQgYW5kIGlzIGNhdWdo
dCB2aWEKLSAgLy8gR09PR0xFX0RDSEVDSy4KLSAgdm9pZCBVbnNhZmVBcmVuYVN3YXAoUmVwZWF0
ZWRQdHJGaWVsZCogb3RoZXIpOwotCi0gIC8vIFN3YXAgdHdvIGVsZW1lbnRzLgotICB2b2lkIFN3
YXBFbGVtZW50cyhpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKTsKLQotICAvLyBTVEwtbGlrZSBpdGVy
YXRvciBzdXBwb3J0Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlJlcGVhdGVkUHRySXRlcmF0b3I8RWxl
bWVudD4gaXRlcmF0b3I7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlJlcGVhdGVkUHRySXRlcmF0b3I8
Y29uc3QgRWxlbWVudD4gY29uc3RfaXRlcmF0b3I7Ci0gIHR5cGVkZWYgRWxlbWVudCB2YWx1ZV90
eXBlOwotICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKLSAgdHlwZWRlZiBjb25zdCB2
YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7Ci0gIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRl
cjsKLSAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwotICB0eXBlZGVm
IGludCBzaXplX3R5cGU7Ci0gIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKLQot
ICBpdGVyYXRvciBiZWdpbigpOwotICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0OwotICBj
b25zdF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdDsKLSAgaXRlcmF0b3IgZW5kKCk7Ci0gIGNvbnN0
X2l0ZXJhdG9yIGVuZCgpIGNvbnN0OwotICBjb25zdF9pdGVyYXRvciBjZW5kKCkgY29uc3Q7Ci0K
LSAgLy8gUmV2ZXJzZSBpdGVyYXRvciBzdXBwb3J0Ci0gIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0
ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwotICB0eXBlZGVm
IHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKLSAgcmV2
ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7Ci0gICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5k
KCkpOwotICB9Ci0gIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewotICAg
IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKLSAgfQotICByZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSB7Ci0gICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7Ci0g
IH0KLSAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewotICAgIHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwotICB9Ci0KLSAgLy8gQ3VzdG9tIFNUTC1s
aWtlIGl0ZXJhdG9yIHRoYXQgaXRlcmF0ZXMgb3ZlciBhbmQgcmV0dXJucyB0aGUgdW5kZXJseWlu
ZwotICAvLyBwb2ludGVycyB0byBFbGVtZW50IHJhdGhlciB0aGFuIEVsZW1lbnQgaXRzZWxmLgot
ICB0eXBlZGVmIGludGVybmFsOjpSZXBlYXRlZFB0ck92ZXJQdHJzSXRlcmF0b3I8RWxlbWVudCwg
dm9pZCo+Ci0gIHBvaW50ZXJfaXRlcmF0b3I7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlJlcGVhdGVk
UHRyT3ZlclB0cnNJdGVyYXRvcjxjb25zdCBFbGVtZW50LCBjb25zdCB2b2lkKj4KLSAgY29uc3Rf
cG9pbnRlcl9pdGVyYXRvcjsKLSAgcG9pbnRlcl9pdGVyYXRvciBwb2ludGVyX2JlZ2luKCk7Ci0g
IGNvbnN0X3BvaW50ZXJfaXRlcmF0b3IgcG9pbnRlcl9iZWdpbigpIGNvbnN0OwotICBwb2ludGVy
X2l0ZXJhdG9yIHBvaW50ZXJfZW5kKCk7Ci0gIGNvbnN0X3BvaW50ZXJfaXRlcmF0b3IgcG9pbnRl
cl9lbmQoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIChhbiBlc3RpbWF0ZSBvZikgdGhlIG51bWJl
ciBvZiBieXRlcyB1c2VkIGJ5IHRoZSByZXBlYXRlZCBmaWVsZCwKLSAgLy8gZXhjbHVkaW5nIHNp
emVvZigqdGhpcykuCi0gIGludCBTcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCkgY29uc3Q7Ci0KLSAg
Ly8gQWR2YW5jZWQgbWVtb3J5IG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgLy8gV2hlbiBoYXJkY29yZSBtZW1vcnkgbWFuYWdlbWVudCBiZWNvbWVz
IG5lY2Vzc2FyeSAtLSBhcyBpdCBzb21ldGltZXMKLSAgLy8gZG9lcyBoZXJlIGF0IEdvb2dsZSAt
LSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgbWF5IGJlIHVzZWZ1bC4KLQotICAvLyBBZGQgYW4gYWxy
ZWFkeS1hbGxvY2F0ZWQgb2JqZWN0LCBwYXNzaW5nIG93bmVyc2hpcCB0byB0aGUKLSAgLy8gUmVw
ZWF0ZWRQdHJGaWVsZC4KLSAgLy8KLSAgLy8gTm90ZSB0aGF0IHNvbWUgc3BlY2lhbCBiZWhhdmlv
ciBvY2N1cnMgd2l0aCByZXNwZWN0IHRvIGFyZW5hczoKLSAgLy8KLSAgLy8gICAoaSkgaWYgdGhp
cyBmaWVsZCBob2xkcyBzdWJtZXNzYWdlcywgdGhlIG5ldyBzdWJtZXNzYWdlIHdpbGwgYmUgY29w
aWVkIGlmCi0gIC8vICAgdGhlIG9yaWdpbmFsIGlzIGluIGFuIGFyZW5hIGFuZCB0aGlzIFJlcGVh
dGVkUHRyRmllbGQgaXMgZWl0aGVyIGluIGEKLSAgLy8gICBkaWZmZXJlbnQgYXJlbmEsIG9yIG9u
IHRoZSBoZWFwLgotICAvLyAgIChpaSkgaWYgdGhpcyBmaWVsZCBob2xkcyBzdHJpbmdzLCB0aGUg
cGFzc2VkLWluIHN0cmluZyAqbXVzdCogYmUKLSAgLy8gICBoZWFwLWFsbG9jYXRlZCwgbm90IGFy
ZW5hLWFsbG9jYXRlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGR5bmFtaWNhbGx5IGNoZWNrCi0gIC8v
ICAgdGhpcyBhdCBydW50aW1lLCBzbyBVc2VyIEJld2FyZS4KLSAgdm9pZCBBZGRBbGxvY2F0ZWQo
RWxlbWVudCogdmFsdWUpOwotCi0gIC8vIFJlbW92ZSB0aGUgbGFzdCBlbGVtZW50IGFuZCByZXR1
cm4gaXQsIHBhc3Npbmcgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCi0gIC8vIFJlcXVpcmVzOiAg
c2l6ZSgpID4gMAotICAvLwotICAvLyBJZiB0aGlzIFJlcGVhdGVkUHRyRmllbGQgaXMgb24gYW4g
YXJlbmEsIGFuIG9iamVjdCBjb3B5IGlzIHJlcXVpcmVkIHRvIHBhc3MKLSAgLy8gb3duZXJzaGlw
IGJhY2sgdG8gdGhlIHVzZXIgKGZvciBjb21wYXRpYmxlIHNlbWFudGljcykuIFVzZQotICAvLyBV
bnNhZmVBcmVuYVJlbGVhc2VMYXN0KCkgaWYgdGhpcyBiZWhhdmlvciBpcyB1bmRlc2lyZWQuCi0g
IEVsZW1lbnQqIFJlbGVhc2VMYXN0KCk7Ci0KLSAgLy8gQWRkIGFuIGFscmVhZHktYWxsb2NhdGVk
IG9iamVjdCwgc2tpcHBpbmcgYXJlbmEtb3duZXJzaGlwIGNoZWNrcy4gVGhlIHVzZXIKLSAgLy8g
bXVzdCBndWFyYW50ZWUgdGhhdCB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGluIHRoZSBzYW1lIGFyZW5h
IGFzIHRoaXMKLSAgLy8gUmVwZWF0ZWRQdHJGaWVsZC4KLSAgLy8gSXQgaXMgYWxzbyB1c2VmdWwg
aW4gbGVnYWN5IGNvZGUgdGhhdCB1c2VzIHRlbXBvcmFyeSBvd25lcnNoaXAgdG8gYXZvaWQKLSAg
Ly8gY29waWVzLiBFeGFtcGxlOgotICAvLyBSZXBlYXRlZFB0ckZpZWxkPFQ+IHRlbXBfZmllbGQ7
Ci0gIC8vIHRlbXBfZmllbGQuQWRkQWxsb2NhdGVkKG5ldyBUKTsKLSAgLy8gLi4uIC8vIERvIHNv
bWV0aGluZyB3aXRoIHRlbXBfZmllbGQKLSAgLy8gdGVtcF9maWVsZC5FeHRyYWN0U3VicmFuZ2Uo
MCwgdGVtcF9maWVsZC5zaXplKCksIE5VTEwpOwotICAvLyBJZiB5b3UgcHV0IHRlbXBfZmllbGQg
b24gdGhlIGFyZW5hIHRoaXMgZmFpbHMsIGJlY2F1c2UgdGhlIG93bmVyc2hpcAotICAvLyB0cmFu
c2ZlcnMgdG8gdGhlIGFyZW5hIGF0IHRoZSAiQWRkQWxsb2NhdGVkIiBjYWxsIGFuZCBpcyBub3Qg
cmVsZWFzZWQKLSAgLy8gYW55bW9yZSBjYXVzaW5nIGEgZG91YmxlIGRlbGV0ZS4gVW5zYWZlQXJl
bmFBZGRBbGxvY2F0ZWQgcHJldmVudHMgdGhpcy4KLSAgdm9pZCBVbnNhZmVBcmVuYUFkZEFsbG9j
YXRlZChFbGVtZW50KiB2YWx1ZSk7Ci0KLSAgLy8gUmVtb3ZlIHRoZSBsYXN0IGVsZW1lbnQgYW5k
IHJldHVybiBpdC4gIFdvcmtzIG9ubHkgd2hlbiBvcGVyYXRpbmcgb24gYW4KLSAgLy8gYXJlbmEu
IFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIHRvIHRoZSBvcmlnaW5hbCBvYmplY3QgaW4gdGhlIGFy
ZW5hLCBoZW5jZQotICAvLyBoYXMgdGhlIGFyZW5hJ3MgbGlmZXRpbWUuCi0gIC8vIFJlcXVpcmVz
OiAgY3VycmVudF9zaXplXyA+IDAKLSAgRWxlbWVudCogVW5zYWZlQXJlbmFSZWxlYXNlTGFzdCgp
OwotCi0gIC8vIEV4dHJhY3QgZWxlbWVudHMgd2l0aCBpbmRpY2VzIGluIHRoZSByYW5nZSAiW3N0
YXJ0IC4uIHN0YXJ0K251bS0xXSIuCi0gIC8vIFRoZSBjYWxsZXIgYXNzdW1lcyBvd25lcnNoaXAg
b2YgdGhlIGV4dHJhY3RlZCBlbGVtZW50cyBhbmQgaXMgcmVzcG9uc2libGUKLSAgLy8gZm9yIGRl
bGV0aW5nIHRoZW0gd2hlbiB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkLgotICAvLyBJZiAiZWxl
bWVudHMiIGlzIG5vbi1OVUxMLCB0aGVuIHBvaW50ZXJzIHRvIHRoZSBleHRyYWN0ZWQgZWxlbWVu
dHMKLSAgLy8gYXJlIHN0b3JlZCBpbiAiZWxlbWVudHNbMCAuLiBudW0tMV0iIGZvciB0aGUgY29u
dmVuaWVuY2Ugb2YgdGhlIGNhbGxlci4KLSAgLy8gSWYgImVsZW1lbnRzIiBpcyBOVUxMLCB0aGVu
IHRoZSBjYWxsZXIgbXVzdCB1c2Ugc29tZSBvdGhlciBtZWNoYW5pc20KLSAgLy8gdG8gcGVyZm9y
bSBhbnkgZnVydGhlciBvcGVyYXRpb25zIChsaWtlIGRlbGV0aW9uKSBvbiB0aGVzZSBlbGVtZW50
cy4KLSAgLy8gQ2F1dGlvbjogaW1wbGVtZW50YXRpb24gYWxzbyBtb3ZlcyBlbGVtZW50cyB3aXRo
IGluZGljZXMgW3N0YXJ0K251bSAuLl0uCi0gIC8vIENhbGxpbmcgdGhpcyByb3V0aW5lIGluc2lk
ZSBhIGxvb3AgY2FuIGNhdXNlIHF1YWRyYXRpYyBiZWhhdmlvci4KLSAgLy8KLSAgLy8gTWVtb3J5
IGNvcHlpbmcgYmVoYXZpb3IgaXMgaWRlbnRpY2FsIHRvIFJlbGVhc2VMYXN0KCksIGRlc2NyaWJl
ZCBhYm92ZTogaWYKLSAgLy8gdGhpcyBSZXBlYXRlZFB0ckZpZWxkIGlzIG9uIGFuIGFyZW5hLCBh
biBvYmplY3QgY29weSBpcyBwZXJmb3JtZWQgZm9yIGVhY2gKLSAgLy8gcmV0dXJuZWQgZWxlbWVu
dCwgc28gdGhhdCBhbGwgcmV0dXJuZWQgZWxlbWVudCBwb2ludGVycyBhcmUgdG8KLSAgLy8gaGVh
cC1hbGxvY2F0ZWQgY29waWVzLiBJZiB0aGlzIGNvcHkgaXMgbm90IGRlc2lyZWQsIHRoZSB1c2Vy
IHNob3VsZCBjYWxsCi0gIC8vIFVuc2FmZUFyZW5hRXh0cmFjdFN1YnJhbmdlKCkuCi0gIHZvaWQg
RXh0cmFjdFN1YnJhbmdlKGludCBzdGFydCwgaW50IG51bSwgRWxlbWVudCoqIGVsZW1lbnRzKTsK
LQotICAvLyBJZGVudGljYWwgdG8gRXh0cmFjdFN1YnJhbmdlKCkgZGVzY3JpYmVkIGFib3ZlLCBl
eGNlcHQgdGhhdCB3aGVuIHRoaXMKLSAgLy8gcmVwZWF0ZWQgZmllbGQgaXMgb24gYW4gYXJlbmEs
IG5vIG9iamVjdCBjb3BpZXMgYXJlIHBlcmZvcm1lZC4gSW5zdGVhZCwgdGhlCi0gIC8vIHJhdyBv
YmplY3QgcG9pbnRlcnMgYXJlIHJldHVybmVkLiBUaHVzLCBpZiBvbiBhbiBhcmVuYSwgdGhlIHJl
dHVybmVkCi0gIC8vIG9iamVjdHMgbXVzdCBub3QgYmUgZnJlZWQsIGJlY2F1c2UgdGhleSB3aWxs
IG5vdCBiZSBoZWFwLWFsbG9jYXRlZCBvYmplY3RzLgotICB2b2lkIFVuc2FmZUFyZW5hRXh0cmFj
dFN1YnJhbmdlKGludCBzdGFydCwgaW50IG51bSwgRWxlbWVudCoqIGVsZW1lbnRzKTsKLQotICAv
LyBXaGVuIGVsZW1lbnRzIGFyZSByZW1vdmVkIGJ5IGNhbGxzIHRvIFJlbW92ZUxhc3QoKSBvciBD
bGVhcigpLCB0aGV5Ci0gIC8vIGFyZSBub3QgYWN0dWFsbHkgZnJlZWQuICBJbnN0ZWFkLCB0aGV5
IGFyZSBjbGVhcmVkIGFuZCBrZXB0IHNvIHRoYXQKLSAgLy8gdGhleSBjYW4gYmUgcmV1c2VkIGxh
dGVyLiAgVGhpcyBjYW4gc2F2ZSBsb3RzIG9mIENQVSB0aW1lIHdoZW4KLSAgLy8gcmVwZWF0ZWRs
eSByZXVzaW5nIGEgcHJvdG9jb2wgbWVzc2FnZSBmb3Igc2ltaWxhciBwdXJwb3Nlcy4KLSAgLy8K
LSAgLy8gSGFyZGNvcmUgcHJvZ3JhbXMgbWF5IGNob29zZSB0byBtYW5pcHVsYXRlIHRoZXNlIGNs
ZWFyZWQgb2JqZWN0cwotICAvLyB0byBiZXR0ZXIgb3B0aW1pemUgbWVtb3J5IG1hbmFnZW1lbnQg
dXNpbmcgdGhlIGZvbGxvd2luZyByb3V0aW5lcy4KLQotICAvLyBHZXQgdGhlIG51bWJlciBvZiBj
bGVhcmVkIG9iamVjdHMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIGtlcHQKLSAgLy8gYXJvdW5k
IGZvciByZXVzZS4KLSAgaW50IENsZWFyZWRDb3VudCgpIGNvbnN0OwotICAvLyBBZGQgYW4gZWxl
bWVudCB0byB0aGUgcG9vbCBvZiBjbGVhcmVkIG9iamVjdHMsIHBhc3Npbmcgb3duZXJzaGlwIHRv
Ci0gIC8vIHRoZSBSZXBlYXRlZFB0ckZpZWxkLiAgVGhlIGVsZW1lbnQgbXVzdCBiZSBjbGVhcmVk
IHByaW9yIHRvIGNhbGxpbmcKLSAgLy8gdGhpcyBtZXRob2QuCi0gIC8vCi0gIC8vIFRoaXMgbWV0
aG9kIGNhbm5vdCBiZSBjYWxsZWQgd2hlbiB0aGUgcmVwZWF0ZWQgZmllbGQgaXMgb24gYW4gYXJl
bmEgb3Igd2hlbgotICAvLyB8dmFsdWV8IGlzOyBib3RoIGNhc2VzIHdpbGwgdHJpZ2dlciBhIEdP
T0dMRV9EQ0hFQ0stZmFpbHVyZS4KLSAgdm9pZCBBZGRDbGVhcmVkKEVsZW1lbnQqIHZhbHVlKTsK
LSAgLy8gUmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgY2xlYXJlZCBwb29sIGFuZCBy
ZXR1cm4gaXQsIHBhc3NpbmcKLSAgLy8gb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuICBUaGUgZWxl
bWVudCBpcyBndWFyYW50ZWVkIHRvIGJlIGNsZWFyZWQuCi0gIC8vIFJlcXVpcmVzOiAgQ2xlYXJl
ZENvdW50KCkgPiAwCi0gIC8vCi0gIC8vCi0gIC8vIFRoaXMgbWV0aG9kIGNhbm5vdCBiZSBjYWxs
ZWQgd2hlbiB0aGUgcmVwZWF0ZWQgZmllbGQgaXMgb24gYW4gYXJlbmE7IGRvaW5nCi0gIC8vIHNv
IHdpbGwgdHJpZ2dlciBhIEdPT0dMRV9EQ0hFQ0stZmFpbHVyZS4KLSAgRWxlbWVudCogUmVsZWFz
ZUNsZWFyZWQoKTsKLQotICAvLyBSZW1vdmVzIHRoZSBlbGVtZW50IHJlZmVyZW5jZWQgYnkgcG9z
aXRpb24uCi0gIC8vCi0gIC8vIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGVsZW1lbnQgaW1t
ZWRpYXRlbHkgZm9sbG93aW5nIHRoZSByZW1vdmVkCi0gIC8vIGVsZW1lbnQuCi0gIC8vCi0gIC8v
IEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgYXQgb3IgYWZ0ZXIgdGhlIHJlbW92ZWQgZWxlbWVu
dCwgaW5jbHVkaW5nIGVuZCgpLgotICBpdGVyYXRvciBlcmFzZShjb25zdF9pdGVyYXRvciBwb3Np
dGlvbik7Ci0KLSAgLy8gUmVtb3ZlcyB0aGUgZWxlbWVudHMgaW4gdGhlIHJhbmdlIFtmaXJzdCwg
bGFzdCkuCi0gIC8vCi0gIC8vIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGVsZW1lbnQgaW1t
ZWRpYXRlbHkgZm9sbG93aW5nIHRoZSByZW1vdmVkIHJhbmdlLgotICAvLwotICAvLyBJbnZhbGlk
YXRlcyBhbGwgaXRlcmF0b3JzIGF0IG9yIGFmdGVyIHRoZSByZW1vdmVkIHJhbmdlLCBpbmNsdWRp
bmcgZW5kKCkuCi0gIGl0ZXJhdG9yIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIGZpcnN0LCBjb25zdF9p
dGVyYXRvciBsYXN0KTsKLQotICAvLyBHZXRzIHRoZSBhcmVuYSBvbiB3aGljaCB0aGlzIFJlcGVh
dGVkUHRyRmllbGQgc3RvcmVzIGl0cyBlbGVtZW50cy4KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpB
cmVuYSogR2V0QXJlbmEoKSBjb25zdCB7Ci0gICAgcmV0dXJuIEdldEFyZW5hTm9WaXJ0dWFsKCk7
Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgLy8gTm90ZTogIFJlcGVhdGVkUHRyRmllbGQgU0hPVUxE
IE5PVCBiZSBzdWJjbGFzc2VkIGJ5IHVzZXJzLiAgV2Ugb25seQotICAvLyAgIHN1YmNsYXNzIGl0
IGluIG9uZSBwbGFjZSBhcyBhIGhhY2sgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcm90bzEuICBU
aGUKLSAgLy8gICBzdWJjbGFzcyBuZWVkcyB0byBrbm93IGFib3V0IFR5cGVIYW5kbGVyIGluIG9y
ZGVyIHRvIGNhbGwgcHJvdGVjdGVkCi0gIC8vICAgbWV0aG9kcyBvbiBSZXBlYXRlZFB0ckZpZWxk
QmFzZS4KLSAgY2xhc3MgVHlwZUhhbmRsZXI7Ci0KLSAgLy8gSW50ZXJuYWwgYXJlbmEgYWNjZXNz
b3IgZXhwZWN0ZWQgYnkgaGVscGVycyBpbiBBcmVuYS4KLSAgaW5saW5lIEFyZW5hKiBHZXRBcmVu
YU5vVmlydHVhbCgpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgLy8gSW1wbGVtZW50YXRpb25zIGZv
ciBFeHRyYWN0U3VicmFuZ2UoKS4gVGhlIGNvcHlpbmcgYmVoYXZpb3IgbXVzdCBiZQotICAvLyBp
bmNsdWRlZCBvbmx5IGlmIHRoZSB0eXBlIHN1cHBvcnRzIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9u
cyAoZS5nLiwKLSAgLy8gTWVyZ2VGcm9tKCkpLCBzbyB3ZSBtdXN0IHJlc29sdmUgdGhpcyBhdCBj
b21waWxlIHRpbWUuIEV4dHJhY3RTdWJyYW5nZSgpCi0gIC8vIHVzZXMgU0ZJTkFFIHRvIGNob29z
ZSBvbmUgb2YgdGhlIGJlbG93IGltcGxlbWVudGF0aW9ucy4KLSAgdm9pZCBFeHRyYWN0U3VicmFu
Z2VJbnRlcm5hbChpbnQgc3RhcnQsIGludCBudW0sIEVsZW1lbnQqKiBlbGVtZW50cywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6dHJ1
ZV90eXBlKTsKLSAgdm9pZCBFeHRyYWN0U3VicmFuZ2VJbnRlcm5hbChpbnQgc3RhcnQsIGludCBu
dW0sIEVsZW1lbnQqKiBlbGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6ZmFsc2VfdHlwZSk7Ci0KLSAgZnJpZW5kIGNsYXNz
IEFyZW5hOwotICB0eXBlZGVmIHZvaWQgSW50ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfOwotCi19
OwotCi0vLyBpbXBsZW1lbnRhdGlvbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5l
IFJlcGVhdGVkRmllbGQ8RWxlbWVudD46OlJlcGVhdGVkRmllbGQoKQotICA6IGN1cnJlbnRfc2l6
ZV8oMCksCi0gICAgdG90YWxfc2l6ZV8oMCksCi0gICAgcmVwXyhOVUxMKSB7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIFJlcGVhdGVkRmllbGQ8RWxlbWVudD46OlJl
cGVhdGVkRmllbGQoQXJlbmEqIGFyZW5hKQotICA6IGN1cnJlbnRfc2l6ZV8oMCksCi0gICAgdG90
YWxfc2l6ZV8oMCksCi0gICAgcmVwXyhOVUxMKSB7Ci0gLy8gSW4gY2FzZSBhcmVuYSBpcyBOVUxM
LCB0aGVuIHdlIGRvIG5vdCBjcmVhdGUgcmVwXywgYXMgY29kZSBoYXMgYW4gaW52YXJpYW50Ci0g
Ly8gYHJlcF8gPT0gTlVMTCB0aGVuIGFyZW5hID09IE5VTExgLgotIGlmIChhcmVuYSAhPSBOVUxM
KSB7Ci0gIHJlcF8gPSByZWludGVycHJldF9jYXN0PFJlcCo+KAotICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjpBcmVuYTo6Q3JlYXRlQXJyYXk8Y2hhcj4oYXJlbmEsIGtSZXBIZWFkZXJTaXplKSk7
Ci0gIHJlcF8tPmFyZW5hID0gYXJlbmE7Ci0gfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxl
bWVudD4KLWlubGluZSBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+OjpSZXBlYXRlZEZpZWxkKGNvbnN0
IFJlcGVhdGVkRmllbGQmIG90aGVyKQotICA6IGN1cnJlbnRfc2l6ZV8oMCksCi0gICAgdG90YWxf
c2l6ZV8oMCksCi0gICAgcmVwXyhOVUxMKSB7Ci0gIENvcHlGcm9tKG90aGVyKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4KLVJlcGVh
dGVkRmllbGQ8RWxlbWVudD46OlJlcGVhdGVkRmllbGQoSXRlciBiZWdpbiwgY29uc3QgSXRlciYg
ZW5kKQotICA6IGN1cnJlbnRfc2l6ZV8oMCksCi0gICAgdG90YWxfc2l6ZV8oMCksCi0gICAgcmVw
XyhOVUxMKSB7Ci0gIGludCByZXNlcnZlID0gaW50ZXJuYWw6OkNhbGN1bGF0ZVJlc2VydmUoYmVn
aW4sIGVuZCk7Ci0gIGlmIChyZXNlcnZlICE9IC0xKSB7Ci0gICAgUmVzZXJ2ZShyZXNlcnZlKTsK
LSAgICBmb3IgKDsgYmVnaW4gIT0gZW5kOyArK2JlZ2luKSB7Ci0gICAgICBBZGRBbHJlYWR5UmVz
ZXJ2ZWQoKmJlZ2luKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yICg7IGJlZ2luICE9IGVu
ZDsgKytiZWdpbikgewotICAgICAgQWRkKCpiZWdpbik7Ci0gICAgfQotICB9Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBFbGVtZW50PgotUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6flJlcGVhdGVk
RmllbGQoKSB7Ci0gIC8vIFNlZSBleHBsYW5hdGlvbiBpbiBSZXNlcnZlKCk6IHdlIG5lZWQgdG8g
aW52b2tlIGRlc3RydWN0b3JzIGhlcmUgZm9yIHRoZQotICAvLyBjYXNlIHRoYXQgRWxlbWVudCBo
YXMgYSBub24tdHJpdmlhbCBkZXN0cnVjdG9yLgotICBJbnRlcm5hbERlYWxsb2NhdGUocmVwXywg
dG90YWxfc2l6ZV8pOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSBS
ZXBlYXRlZEZpZWxkPEVsZW1lbnQ+JgotUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6b3BlcmF0b3I9
KGNvbnN0IFJlcGVhdGVkRmllbGQmIG90aGVyKSB7Ci0gIGlmICh0aGlzICE9ICZvdGhlcikKLSAg
ICBDb3B5RnJvbShvdGhlcik7Ci0gIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIEVsZW1lbnQ+Ci1pbmxpbmUgYm9vbCBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+OjplbXB0eSgp
IGNvbnN0IHsKLSAgcmV0dXJuIGN1cnJlbnRfc2l6ZV8gPT0gMDsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgaW50IFJlcGVhdGVkRmllbGQ8RWxlbWVudD46OnNpemUo
KSBjb25zdCB7Ci0gIHJldHVybiBjdXJyZW50X3NpemVfOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudD4KLWlubGluZSBpbnQgUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6Q2FwYWNpdHko
KSBjb25zdCB7Ci0gIHJldHVybiB0b3RhbF9zaXplXzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
RWxlbWVudD4KLWlubGluZSB2b2lkIFJlcGVhdGVkRmllbGQ8RWxlbWVudD46OkFkZEFscmVhZHlS
ZXNlcnZlZChjb25zdCBFbGVtZW50JiB2YWx1ZSkgewotICBHT09HTEVfRENIRUNLX0xUKGN1cnJl
bnRfc2l6ZV8sIHRvdGFsX3NpemVfKTsKLSAgcmVwXy0+ZWxlbWVudHNbY3VycmVudF9zaXplXysr
XSA9IHZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIEVsZW1l
bnQqIFJlcGVhdGVkRmllbGQ8RWxlbWVudD46OkFkZEFscmVhZHlSZXNlcnZlZCgpIHsKLSAgR09P
R0xFX0RDSEVDS19MVChjdXJyZW50X3NpemVfLCB0b3RhbF9zaXplXyk7Ci0gIHJldHVybiAmcmVw
Xy0+ZWxlbWVudHNbY3VycmVudF9zaXplXysrXTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRWxl
bWVudD4KLWlubGluZSB2b2lkIFJlcGVhdGVkRmllbGQ8RWxlbWVudD46OlJlc2l6ZShpbnQgbmV3
X3NpemUsIGNvbnN0IEVsZW1lbnQmIHZhbHVlKSB7Ci0gIEdPT0dMRV9EQ0hFQ0tfR0UobmV3X3Np
emUsIDApOwotICBpZiAobmV3X3NpemUgPiBjdXJyZW50X3NpemVfKSB7Ci0gICAgUmVzZXJ2ZShu
ZXdfc2l6ZSk7Ci0gICAgc3RkOjpmaWxsKCZyZXBfLT5lbGVtZW50c1tjdXJyZW50X3NpemVfXSwK
LSAgICAgICAgICAgICAgJnJlcF8tPmVsZW1lbnRzW25ld19zaXplXSwgdmFsdWUpOwotICB9Ci0g
IGN1cnJlbnRfc2l6ZV8gPSBuZXdfc2l6ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1l
bnQ+Ci1pbmxpbmUgY29uc3QgRWxlbWVudCYgUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6R2V0KGlu
dCBpbmRleCkgY29uc3QgewotICBHT09HTEVfRENIRUNLX0dFKGluZGV4LCAwKTsKLSAgR09PR0xF
X0RDSEVDS19MVChpbmRleCwgY3VycmVudF9zaXplXyk7Ci0gIHJldHVybiByZXBfLT5lbGVtZW50
c1tpbmRleF07Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIEVsZW1l
bnQqIFJlcGVhdGVkRmllbGQ8RWxlbWVudD46Ok11dGFibGUoaW50IGluZGV4KSB7Ci0gIEdPT0dM
RV9EQ0hFQ0tfR0UoaW5kZXgsIDApOwotICBHT09HTEVfRENIRUNLX0xUKGluZGV4LCBjdXJyZW50
X3NpemVfKTsKLSAgcmV0dXJuICZyZXBfLT5lbGVtZW50c1tpbmRleF07Ci19Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIHZvaWQgUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6
U2V0KGludCBpbmRleCwgY29uc3QgRWxlbWVudCYgdmFsdWUpIHsKLSAgR09PR0xFX0RDSEVDS19H
RShpbmRleCwgMCk7Ci0gIEdPT0dMRV9EQ0hFQ0tfTFQoaW5kZXgsIGN1cnJlbnRfc2l6ZV8pOwot
ICByZXBfLT5lbGVtZW50c1tpbmRleF0gPSB2YWx1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IEVsZW1lbnQ+Ci1pbmxpbmUgdm9pZCBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+OjpBZGQoY29uc3Qg
RWxlbWVudCYgdmFsdWUpIHsKLSAgaWYgKGN1cnJlbnRfc2l6ZV8gPT0gdG90YWxfc2l6ZV8pIFJl
c2VydmUodG90YWxfc2l6ZV8gKyAxKTsKLSAgcmVwXy0+ZWxlbWVudHNbY3VycmVudF9zaXplXysr
XSA9IHZhbHVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSBFbGVt
ZW50KiBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+OjpBZGQoKSB7Ci0gIGlmIChjdXJyZW50X3NpemVf
ID09IHRvdGFsX3NpemVfKSBSZXNlcnZlKHRvdGFsX3NpemVfICsgMSk7Ci0gIHJldHVybiAmcmVw
Xy0+ZWxlbWVudHNbY3VycmVudF9zaXplXysrXTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnQ+Ci1pbmxpbmUgdm9pZCBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+OjpSZW1vdmVMYXN0KCkg
ewotICBHT09HTEVfRENIRUNLX0dUKGN1cnJlbnRfc2l6ZV8sIDApOwotICBjdXJyZW50X3NpemVf
LS07Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50Pgotdm9pZCBSZXBlYXRlZEZpZWxk
PEVsZW1lbnQ+OjpFeHRyYWN0U3VicmFuZ2UoCi0gICAgaW50IHN0YXJ0LCBpbnQgbnVtLCBFbGVt
ZW50KiBlbGVtZW50cykgewotICBHT09HTEVfRENIRUNLX0dFKHN0YXJ0LCAwKTsKLSAgR09PR0xF
X0RDSEVDS19HRShudW0sIDApOwotICBHT09HTEVfRENIRUNLX0xFKHN0YXJ0ICsgbnVtLCB0aGlz
LT5jdXJyZW50X3NpemVfKTsKLQotICAvLyBTYXZlIHRoZSB2YWx1ZXMgb2YgdGhlIHJlbW92ZWQg
ZWxlbWVudHMgaWYgcmVxdWVzdGVkLgotICBpZiAoZWxlbWVudHMgIT0gTlVMTCkgewotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtOyArK2kpCi0gICAgICBlbGVtZW50c1tpXSA9IHRoaXMtPkdl
dChpICsgc3RhcnQpOwotICB9Ci0KLSAgLy8gU2xpZGUgcmVtYWluaW5nIGVsZW1lbnRzIGRvd24g
dG8gZmlsbCB0aGUgZ2FwLgotICBpZiAobnVtID4gMCkgewotICAgIGZvciAoaW50IGkgPSBzdGFy
dCArIG51bTsgaSA8IHRoaXMtPmN1cnJlbnRfc2l6ZV87ICsraSkKLSAgICAgIHRoaXMtPlNldChp
IC0gbnVtLCB0aGlzLT5HZXQoaSkpOwotICAgIHRoaXMtPlRydW5jYXRlKHRoaXMtPmN1cnJlbnRf
c2l6ZV8gLSBudW0pOwotICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5s
aW5lIHZvaWQgUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6Q2xlYXIoKSB7Ci0gIGN1cnJlbnRfc2l6
ZV8gPSAwOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB2b2lkIFJl
cGVhdGVkRmllbGQ8RWxlbWVudD46Ok1lcmdlRnJvbShjb25zdCBSZXBlYXRlZEZpZWxkJiBvdGhl
cikgewotICBHT09HTEVfQ0hFQ0tfTkUoJm90aGVyLCB0aGlzKTsKLSAgaWYgKG90aGVyLmN1cnJl
bnRfc2l6ZV8gIT0gMCkgewotICAgIFJlc2VydmUoY3VycmVudF9zaXplXyArIG90aGVyLmN1cnJl
bnRfc2l6ZV8pOwotICAgIENvcHlBcnJheShyZXBfLT5lbGVtZW50cyArIGN1cnJlbnRfc2l6ZV8s
Ci0gICAgICAgICAgICAgIG90aGVyLnJlcF8tPmVsZW1lbnRzLCBvdGhlci5jdXJyZW50X3NpemVf
KTsKLSAgICBjdXJyZW50X3NpemVfICs9IG90aGVyLmN1cnJlbnRfc2l6ZV87Ci0gIH0KLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgdm9pZCBSZXBlYXRlZEZpZWxkPEVs
ZW1lbnQ+OjpDb3B5RnJvbShjb25zdCBSZXBlYXRlZEZpZWxkJiBvdGhlcikgewotICBpZiAoJm90
aGVyID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKG90aGVyKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgdHlwZW5hbWUgUmVwZWF0ZWRG
aWVsZDxFbGVtZW50Pjo6aXRlcmF0b3IgUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6ZXJhc2UoCi0g
ICAgY29uc3RfaXRlcmF0b3IgcG9zaXRpb24pIHsKLSAgcmV0dXJuIGVyYXNlKHBvc2l0aW9uLCBw
b3NpdGlvbiArIDEpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB0
eXBlbmFtZSBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+OjppdGVyYXRvciBSZXBlYXRlZEZpZWxkPEVs
ZW1lbnQ+OjplcmFzZSgKLSAgICBjb25zdF9pdGVyYXRvciBmaXJzdCwgY29uc3RfaXRlcmF0b3Ig
bGFzdCkgewotICBzaXplX3R5cGUgZmlyc3Rfb2Zmc2V0ID0gZmlyc3QgLSBjYmVnaW4oKTsKLSAg
aWYgKGZpcnN0ICE9IGxhc3QpIHsKLSAgICBUcnVuY2F0ZShzdGQ6OmNvcHkobGFzdCwgY2VuZCgp
LCBiZWdpbigpICsgZmlyc3Rfb2Zmc2V0KSAtIGNiZWdpbigpKTsKLSAgfQotICByZXR1cm4gYmVn
aW4oKSArIGZpcnN0X29mZnNldDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1p
bmxpbmUgRWxlbWVudCogUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6bXV0YWJsZV9kYXRhKCkgewot
ICByZXR1cm4gcmVwXyA/IHJlcF8tPmVsZW1lbnRzIDogTlVMTDsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgY29uc3QgRWxlbWVudCogUmVwZWF0ZWRGaWVsZDxFbGVt
ZW50Pjo6ZGF0YSgpIGNvbnN0IHsKLSAgcmV0dXJuIHJlcF8gPyByZXBfLT5lbGVtZW50cyA6IE5V
TEw7Ci19Ci0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgdm9pZCBSZXBl
YXRlZEZpZWxkPEVsZW1lbnQ+OjpJbnRlcm5hbFN3YXAoUmVwZWF0ZWRGaWVsZCogb3RoZXIpIHsK
LSAgc3RkOjpzd2FwKHJlcF8sIG90aGVyLT5yZXBfKTsKLSAgc3RkOjpzd2FwKGN1cnJlbnRfc2l6
ZV8sIG90aGVyLT5jdXJyZW50X3NpemVfKTsKLSAgc3RkOjpzd2FwKHRvdGFsX3NpemVfLCBvdGhl
ci0+dG90YWxfc2l6ZV8pOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLXZvaWQg
UmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6U3dhcChSZXBlYXRlZEZpZWxkKiBvdGhlcikgewotICBp
ZiAodGhpcyA9PSBvdGhlcikgcmV0dXJuOwotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSAg
b3RoZXItPkdldEFyZW5hTm9WaXJ0dWFsKCkpIHsKLSAgICBJbnRlcm5hbFN3YXAob3RoZXIpOwot
ICB9IGVsc2UgewotICAgIFJlcGVhdGVkRmllbGQ8RWxlbWVudD4gdGVtcChvdGhlci0+R2V0QXJl
bmFOb1ZpcnR1YWwoKSk7Ci0gICAgdGVtcC5NZXJnZUZyb20oKnRoaXMpOwotICAgIENvcHlGcm9t
KCpvdGhlcik7Ci0gICAgb3RoZXItPlVuc2FmZUFyZW5hU3dhcCgmdGVtcCk7Ci0gIH0KLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci12b2lkIFJlcGVhdGVkRmllbGQ8RWxlbWVudD46
OlVuc2FmZUFyZW5hU3dhcChSZXBlYXRlZEZpZWxkKiBvdGhlcikgewotICBpZiAodGhpcyA9PSBv
dGhlcikgcmV0dXJuOwotICBHT09HTEVfRENIRUNLKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gb3Ro
ZXItPkdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLXZvaWQgUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6
U3dhcEVsZW1lbnRzKGludCBpbmRleDEsIGludCBpbmRleDIpIHsKLSAgdXNpbmcgc3RkOjpzd2Fw
OyAgLy8gZW5hYmxlIEFETCB3aXRoIGZhbGxiYWNrCi0gIHN3YXAocmVwXy0+ZWxlbWVudHNbaW5k
ZXgxXSwgcmVwXy0+ZWxlbWVudHNbaW5kZXgyXSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBF
bGVtZW50PgotaW5saW5lIHR5cGVuYW1lIFJlcGVhdGVkRmllbGQ8RWxlbWVudD46Oml0ZXJhdG9y
Ci1SZXBlYXRlZEZpZWxkPEVsZW1lbnQ+OjpiZWdpbigpIHsKLSAgcmV0dXJuIHJlcF8gPyByZXBf
LT5lbGVtZW50cyA6IE5VTEw7Ci19Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGlu
ZSB0eXBlbmFtZSBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+Ojpjb25zdF9pdGVyYXRvcgotUmVwZWF0
ZWRGaWVsZDxFbGVtZW50Pjo6YmVnaW4oKSBjb25zdCB7Ci0gIHJldHVybiByZXBfID8gcmVwXy0+
ZWxlbWVudHMgOiBOVUxMOwotfQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUg
dHlwZW5hbWUgUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6Y29uc3RfaXRlcmF0b3IKLVJlcGVhdGVk
RmllbGQ8RWxlbWVudD46OmNiZWdpbigpIGNvbnN0IHsKLSAgcmV0dXJuIHJlcF8gPyByZXBfLT5l
bGVtZW50cyA6IE5VTEw7Ci19Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB0
eXBlbmFtZSBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+OjppdGVyYXRvcgotUmVwZWF0ZWRGaWVsZDxF
bGVtZW50Pjo6ZW5kKCkgewotICByZXR1cm4gcmVwXyA/IHJlcF8tPmVsZW1lbnRzICsgY3VycmVu
dF9zaXplXyA6IE5VTEw7Ci19Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB0
eXBlbmFtZSBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+Ojpjb25zdF9pdGVyYXRvcgotUmVwZWF0ZWRG
aWVsZDxFbGVtZW50Pjo6ZW5kKCkgY29uc3QgewotICByZXR1cm4gcmVwXyA/IHJlcF8tPmVsZW1l
bnRzICsgY3VycmVudF9zaXplXyA6IE5VTEw7Ci19Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dD4KLWlubGluZSB0eXBlbmFtZSBSZXBlYXRlZEZpZWxkPEVsZW1lbnQ+Ojpjb25zdF9pdGVyYXRv
cgotUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6Y2VuZCgpIGNvbnN0IHsKLSAgcmV0dXJuIHJlcF8g
PyByZXBfLT5lbGVtZW50cyArIGN1cnJlbnRfc2l6ZV8gOiBOVUxMOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSBpbnQgUmVwZWF0ZWRGaWVsZDxFbGVtZW50Pjo6U3Bh
Y2VVc2VkRXhjbHVkaW5nU2VsZigpIGNvbnN0IHsKLSAgcmV0dXJuIHJlcF8gPwotICAgICAgKHRv
dGFsX3NpemVfICogc2l6ZW9mKEVsZW1lbnQpICsga1JlcEhlYWRlclNpemUpIDogMDsKLX0KLQot
Ly8gQXZvaWQgaW5saW5pbmcgb2YgUmVzZXJ2ZSgpOiBuZXcsIGNvcHksIGFuZCBkZWxldGVbXSBs
ZWFkIHRvIGEgc2lnbmlmaWNhbnQKLS8vIGFtb3VudCBvZiBjb2RlIGJsb2F0LgotdGVtcGxhdGUg
PHR5cGVuYW1lIEVsZW1lbnQ+Ci12b2lkIFJlcGVhdGVkRmllbGQ8RWxlbWVudD46OlJlc2VydmUo
aW50IG5ld19zaXplKSB7Ci0gIGlmICh0b3RhbF9zaXplXyA+PSBuZXdfc2l6ZSkgcmV0dXJuOwot
ICBSZXAqIG9sZF9yZXAgPSByZXBfOwotICBBcmVuYSogYXJlbmEgPSBHZXRBcmVuYU5vVmlydHVh
bCgpOwotICBuZXdfc2l6ZSA9IHN0ZDo6bWF4KGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpr
TWluUmVwZWF0ZWRGaWVsZEFsbG9jYXRpb25TaXplLAotICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KHRvdGFsX3NpemVfICogMiwgbmV3X3NpemUpKTsKLSAgR09PR0xFX0NIRUNLX0xFKHN0
YXRpY19jYXN0PHNpemVfdD4obmV3X3NpemUpLAotICAgICAgICAgICAoc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSAtIGtSZXBIZWFkZXJTaXplKSAvCi0gICAgICAgICAgIHNpemVv
ZihFbGVtZW50KSkKLSAgICAgIDw8ICJSZXF1ZXN0ZWQgc2l6ZSBpcyB0b28gbGFyZ2UgdG8gZml0
IGludG8gc2l6ZV90LiI7Ci0gIGlmIChhcmVuYSA9PSBOVUxMKSB7Ci0gICAgcmVwXyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UmVwKj4oCi0gICAgICAgIG5ldyBjaGFyW2tSZXBIZWFkZXJTaXplICsgc2l6
ZW9mKEVsZW1lbnQpICogbmV3X3NpemVdKTsKLSAgfSBlbHNlIHsKLSAgICByZXBfID0gcmVpbnRl
cnByZXRfY2FzdDxSZXAqPigKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmE6
OkNyZWF0ZUFycmF5PGNoYXI+KGFyZW5hLAotICAgICAgICAgICAgICAgIGtSZXBIZWFkZXJTaXpl
ICsgc2l6ZW9mKEVsZW1lbnQpICogbmV3X3NpemUpKTsKLSAgfQotICByZXBfLT5hcmVuYSA9IGFy
ZW5hOwotICBpbnQgb2xkX3RvdGFsX3NpemUgPSB0b3RhbF9zaXplXzsKLSAgdG90YWxfc2l6ZV8g
PSBuZXdfc2l6ZTsKLSAgLy8gSW52b2tlIHBsYWNlbWVudC1uZXcgb24gbmV3bHkgYWxsb2NhdGVk
IGVsZW1lbnRzLiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbwotICAvLyB0aGlzLCBzaW5jZSBFbGVt
ZW50IGlzIHN1cHBvc2VkIHRvIGJlIFBPRCwgYnV0IGEgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlz
Ci0gIC8vIGNvZGUgYWxsb2NhdGVkIHN0b3JhZ2Ugd2l0aCAibmV3IEVsZW1lbnRbc2l6ZV0iIGFu
ZCBzb21lIGNvZGUgdXNlcwotICAvLyBSZXBlYXRlZEZpZWxkIHdpdGggbm9uLVBPRCB0eXBlcywg
cmVseWluZyBvbiBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLiBJZgotICAvLyBFbGVtZW50IGhhcyBh
IHRyaXZpYWwgY29uc3RydWN0b3IgKGUuZy4sIGludDMyKSwgZ2NjICh0ZXN0ZWQgd2l0aCAtTzIp
Ci0gIC8vIGNvbXBsZXRlbHkgcmVtb3ZlcyB0aGlzIGxvb3AgYmVjYXVzZSB0aGUgbG9vcCBib2R5
IGlzIGVtcHR5LCBzbyB0aGlzIGhhcyBubwotICAvLyBlZmZlY3QgdW5sZXNzIGl0cyBzaWRlLWVm
ZmVjdHMgYXJlIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcy4KLSAgLy8gTm90ZSB0aGF0IHdlIGRv
IHRoaXMgYmVmb3JlIE1vdmVBcnJheSgpIGJlbG93IGJlY2F1c2UgRWxlbWVudCdzIGNvcHkKLSAg
Ly8gYXNzaWdubWVudCBpbXBsZW1lbnRhdGlvbiB3aWxsIHdhbnQgYW4gaW5pdGlhbGl6ZWQgaW5z
dGFuY2UgZmlyc3QuCi0gIEVsZW1lbnQqIGUgPSAmcmVwXy0+ZWxlbWVudHNbMF07Ci0gIEVsZW1l
bnQqIGxpbWl0ID0gJnJlcF8tPmVsZW1lbnRzW3RvdGFsX3NpemVfXTsKLSAgZm9yICg7IGUgPCBs
aW1pdDsgZSsrKSB7Ci0gICAgbmV3IChlKSBFbGVtZW50KCk7Ci0gIH0KLSAgaWYgKGN1cnJlbnRf
c2l6ZV8gPiAwKSB7Ci0gICAgTW92ZUFycmF5KHJlcF8tPmVsZW1lbnRzLCBvbGRfcmVwLT5lbGVt
ZW50cywgY3VycmVudF9zaXplXyk7Ci0gIH0KLQotICAvLyBMaWtld2lzZSwgd2UgbmVlZCB0byBp
bnZva2UgZGVzdHJ1Y3RvcnMgb24gdGhlIG9sZCBhcnJheS4KLSAgSW50ZXJuYWxEZWFsbG9jYXRl
KG9sZF9yZXAsIG9sZF90b3RhbF9zaXplKTsKLQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxl
bWVudD4KLWlubGluZSB2b2lkIFJlcGVhdGVkRmllbGQ8RWxlbWVudD46OlRydW5jYXRlKGludCBu
ZXdfc2l6ZSkgewotICBHT09HTEVfRENIRUNLX0xFKG5ld19zaXplLCBjdXJyZW50X3NpemVfKTsK
LSAgaWYgKGN1cnJlbnRfc2l6ZV8gPiAwKSB7Ci0gICAgY3VycmVudF9zaXplXyA9IG5ld19zaXpl
OwotICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIHZvaWQgUmVw
ZWF0ZWRGaWVsZDxFbGVtZW50Pjo6TW92ZUFycmF5KAotICBFbGVtZW50KiB0bywgRWxlbWVudCog
ZnJvbSwgaW50IGFycmF5X3NpemUpIHsKLSAgQ29weUFycmF5KHRvLCBmcm9tLCBhcnJheV9zaXpl
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgdm9pZCBSZXBlYXRl
ZEZpZWxkPEVsZW1lbnQ+OjpDb3B5QXJyYXkoCi0gIEVsZW1lbnQqIHRvLCBjb25zdCBFbGVtZW50
KiBmcm9tLCBpbnQgYXJyYXlfc2l6ZSkgewotICBpbnRlcm5hbDo6RWxlbWVudENvcGllcjxFbGVt
ZW50PigpKHRvLCBmcm9tLCBhcnJheV9zaXplKTsKLX0KLQotbmFtZXNwYWNlIGludGVybmFsIHsK
LQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQsIGJvb2wgSGFzVHJpdmlhbENvcHk+Ci12b2lk
IEVsZW1lbnRDb3BpZXI8RWxlbWVudCwgSGFzVHJpdmlhbENvcHk+OjpvcGVyYXRvcigpKAotICBF
bGVtZW50KiB0bywgY29uc3QgRWxlbWVudCogZnJvbSwgaW50IGFycmF5X3NpemUpIHsKLSAgc3Rk
Ojpjb3B5KGZyb20sIGZyb20gKyBhcnJheV9zaXplLCB0byk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBFbGVtZW50Pgotc3RydWN0IEVsZW1lbnRDb3BpZXI8RWxlbWVudCwgdHJ1ZT4gewotICB2
b2lkIG9wZXJhdG9yKCkoRWxlbWVudCogdG8sIGNvbnN0IEVsZW1lbnQqIGZyb20sIGludCBhcnJh
eV9zaXplKSB7Ci0gICAgbWVtY3B5KHRvLCBmcm9tLCBhcnJheV9zaXplICogc2l6ZW9mKEVsZW1l
bnQpKTsKLSAgfQotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi1pbmxpbmUgUmVwZWF0ZWRQdHJGaWVsZEJh
c2U6OlJlcGVhdGVkUHRyRmllbGRCYXNlKCkKLSAgOiBhcmVuYV8oTlVMTCksCi0gICAgY3VycmVu
dF9zaXplXygwKSwKLSAgICB0b3RhbF9zaXplXygwKSwKLSAgICByZXBfKE5VTEwpIHsKLX0KLQot
aW5saW5lIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpSZXBlYXRlZFB0ckZpZWxkQmFzZSg6Omdvb2ds
ZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkKLSAgOiBhcmVuYV8oYXJlbmEpLAotICAgIGN1cnJl
bnRfc2l6ZV8oMCksCi0gICAgdG90YWxfc2l6ZV8oMCksCi0gICAgcmVwXyhOVUxMKSB7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLXZvaWQgUmVwZWF0ZWRQdHJGaWVsZEJh
c2U6OkRlc3Ryb3koKSB7Ci0gIGlmIChyZXBfICE9IE5VTEwpIHsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJlcF8tPmFsbG9jYXRlZF9zaXplOyBpKyspIHsKLSAgICAgIFR5cGVIYW5kbGVyOjpE
ZWxldGUoY2FzdDxUeXBlSGFuZGxlcj4ocmVwXy0+ZWxlbWVudHNbaV0pLCBhcmVuYV8pOwotICAg
IH0KLSAgICBpZiAoYXJlbmFfID09IE5VTEwpIHsKLSAgICAgIGRlbGV0ZSBbXSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihyZXBfKTsKLSAgICB9Ci0gIH0KLSAgcmVwXyA9IE5VTEw7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLWlubGluZSB2b2lkIFJlcGVhdGVkUHRyRmll
bGRCYXNlOjpTd2FwKFJlcGVhdGVkUHRyRmllbGRCYXNlKiBvdGhlcikgewotICBpZiAob3RoZXIt
PkdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gR2V0QXJlbmFOb1ZpcnR1YWwoKSkgewotICAgIEludGVy
bmFsU3dhcChvdGhlcik7Ci0gIH0gZWxzZSB7Ci0gICAgU3dhcEZhbGxiYWNrPFR5cGVIYW5kbGVy
PihvdGhlcik7Ci0gIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVyPgotdm9p
ZCBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6U3dhcEZhbGxiYWNrKFJlcGVhdGVkUHRyRmllbGRCYXNl
KiBvdGhlcikgewotICBHT09HTEVfRENIRUNLKG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpICE9
IEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotCi0gIC8vIENvcHkgc2VtYW50aWNzIGluIHRoaXMgY2Fz
ZS4gV2UgdHJ5IHRvIGltcHJvdmUgZWZmaWNpZW5jeSBieSBwbGFjaW5nIHRoZQotICAvLyB0ZW1w
b3Jhcnkgb24gfG90aGVyfCdzIGFyZW5hIHNvIHRoYXQgbWVzc2FnZXMgYXJlIGNvcGllZCBjcm9z
cy1hcmVuYSBvbmx5Ci0gIC8vIG9uY2UsIG5vdCB0d2ljZS4KLSAgUmVwZWF0ZWRQdHJGaWVsZEJh
c2UgdGVtcChvdGhlci0+R2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gIHRlbXAuTWVyZ2VGcm9tPFR5
cGVIYW5kbGVyPigqdGhpcyk7Ci0gIHRoaXMtPkNsZWFyPFR5cGVIYW5kbGVyPigpOwotICB0aGlz
LT5NZXJnZUZyb208VHlwZUhhbmRsZXI+KCpvdGhlcik7Ci0gIG90aGVyLT5DbGVhcjxUeXBlSGFu
ZGxlcj4oKTsKLSAgb3RoZXItPkludGVybmFsU3dhcCgmdGVtcCk7Ci0gIHRlbXAuRGVzdHJveTxU
eXBlSGFuZGxlcj4oKTsgIC8vIEZyZWVzIHJlcF8gaWYgYG90aGVyYCBoYWQgbm8gYXJlbmEuCi19
Ci0KLWlubGluZSBib29sIFJlcGVhdGVkUHRyRmllbGRCYXNlOjplbXB0eSgpIGNvbnN0IHsKLSAg
cmV0dXJuIGN1cnJlbnRfc2l6ZV8gPT0gMDsKLX0KLQotaW5saW5lIGludCBSZXBlYXRlZFB0ckZp
ZWxkQmFzZTo6c2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGN1cnJlbnRfc2l6ZV87Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLWlubGluZSBjb25zdCB0eXBlbmFtZSBUeXBl
SGFuZGxlcjo6VHlwZSYKLVJlcGVhdGVkUHRyRmllbGRCYXNlOjpHZXQoaW50IGluZGV4KSBjb25z
dCB7Ci0gIEdPT0dMRV9EQ0hFQ0tfR0UoaW5kZXgsIDApOwotICBHT09HTEVfRENIRUNLX0xUKGlu
ZGV4LCBjdXJyZW50X3NpemVfKTsKLSAgcmV0dXJuICpjYXN0PFR5cGVIYW5kbGVyPihyZXBfLT5l
bGVtZW50c1tpbmRleF0pOwotfQotCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxlcj4K
LWlubGluZSB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSoKLVJlcGVhdGVkUHRyRmllbGRCYXNl
OjpNdXRhYmxlKGludCBpbmRleCkgewotICBHT09HTEVfRENIRUNLX0dFKGluZGV4LCAwKTsKLSAg
R09PR0xFX0RDSEVDS19MVChpbmRleCwgY3VycmVudF9zaXplXyk7Ci0gIHJldHVybiBjYXN0PFR5
cGVIYW5kbGVyPihyZXBfLT5lbGVtZW50c1tpbmRleF0pOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZUhhbmRsZXI+Ci1pbmxpbmUgdm9pZCBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6RGVsZXRl
KGludCBpbmRleCkgewotICBHT09HTEVfRENIRUNLX0dFKGluZGV4LCAwKTsKLSAgR09PR0xFX0RD
SEVDS19MVChpbmRleCwgY3VycmVudF9zaXplXyk7Ci0gIFR5cGVIYW5kbGVyOjpEZWxldGUoY2Fz
dDxUeXBlSGFuZGxlcj4ocmVwXy0+ZWxlbWVudHNbaW5kZXhdKSwgYXJlbmFfKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVyPgotaW5saW5lIHR5cGVuYW1lIFR5cGVIYW5kbGVy
OjpUeXBlKiBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6QWRkKAotICAgIHR5cGVuYW1lIFR5cGVIYW5k
bGVyOjpUeXBlKiBwcm90b3R5cGUpIHsKLSAgaWYgKHJlcF8gIT0gTlVMTCAmJiBjdXJyZW50X3Np
emVfIDwgcmVwXy0+YWxsb2NhdGVkX3NpemUpIHsKLSAgICByZXR1cm4gY2FzdDxUeXBlSGFuZGxl
cj4ocmVwXy0+ZWxlbWVudHNbY3VycmVudF9zaXplXysrXSk7Ci0gIH0KLSAgaWYgKCFyZXBfIHx8
IHJlcF8tPmFsbG9jYXRlZF9zaXplID09IHRvdGFsX3NpemVfKSB7Ci0gICAgUmVzZXJ2ZSh0b3Rh
bF9zaXplXyArIDEpOwotICB9Ci0gICsrcmVwXy0+YWxsb2NhdGVkX3NpemU7Ci0gIHR5cGVuYW1l
IFR5cGVIYW5kbGVyOjpUeXBlKiByZXN1bHQgPQotICAgICAgVHlwZUhhbmRsZXI6Ok5ld0Zyb21Q
cm90b3R5cGUocHJvdG90eXBlLCBhcmVuYV8pOwotICByZXBfLT5lbGVtZW50c1tjdXJyZW50X3Np
emVfKytdID0gcmVzdWx0OwotICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZUhhbmRsZXI+Ci1pbmxpbmUgdm9pZCBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6UmVtb3Zl
TGFzdCgpIHsKLSAgR09PR0xFX0RDSEVDS19HVChjdXJyZW50X3NpemVfLCAwKTsKLSAgVHlwZUhh
bmRsZXI6OkNsZWFyKGNhc3Q8VHlwZUhhbmRsZXI+KHJlcF8tPmVsZW1lbnRzWy0tY3VycmVudF9z
aXplX10pKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVyPgotdm9pZCBSZXBl
YXRlZFB0ckZpZWxkQmFzZTo6Q2xlYXIoKSB7Ci0gIGNvbnN0IGludCBuID0gY3VycmVudF9zaXpl
XzsKLSAgR09PR0xFX0RDSEVDS19HRShuLCAwKTsKLSAgaWYgKG4gPiAwKSB7Ci0gICAgdm9pZCog
Y29uc3QqIGVsZW1lbnRzID0gcmVwXy0+ZWxlbWVudHM7Ci0gICAgaW50IGkgPSAwOwotICAgIGRv
IHsKLSAgICAgIFR5cGVIYW5kbGVyOjpDbGVhcihjYXN0PFR5cGVIYW5kbGVyPihlbGVtZW50c1tp
KytdKSk7Ci0gICAgfSB3aGlsZSAoaSA8IG4pOwotICAgIGN1cnJlbnRfc2l6ZV8gPSAwOwotICB9
Ci19Ci0KLS8vIFRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvZGUgZHVwbGljYXRpb24gYW5kIHJlZHVj
ZSBiaW5hcnkgc2l6ZSwgd2UgdXNlIGEKLS8vIGxheWVyZWQgYXBwcm9hY2ggdG8gaW1wbGVtZW50
aW5nIE1lcmdlRnJvbSgpLiBUaGUgdG9wbGV2ZWwgbWV0aG9kIGlzCi0vLyB0ZW1wbGF0ZWQsIHNv
IHdlIGdldCBhIHNtYWxsIHRodW5rIHBlciBjb25jcmV0ZSBtZXNzYWdlIHR5cGUgaW4gdGhlIGJp
bmFyeS4KLS8vIFRoaXMgY2FsbHMgYSBzaGFyZWQgaW1wbGVtZW50YXRpb24gd2l0aCBtb3N0IG9m
IHRoZSBsb2dpYywgcGFzc2luZyBhIGZ1bmN0aW9uCi0vLyBwb2ludGVyIHRvIGFub3RoZXIgdHlw
ZS1zcGVjaWZpYyBwaWVjZSBvZiBjb2RlIHRoYXQgY2FsbHMgdGhlIG9iamVjdC1hbGxvY2F0ZQot
Ly8gYW5kIG1lcmdlIGhhbmRsZXJzLgotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVyPgot
aW5saW5lIHZvaWQgUmVwZWF0ZWRQdHJGaWVsZEJhc2U6Ok1lcmdlRnJvbShjb25zdCBSZXBlYXRl
ZFB0ckZpZWxkQmFzZSYgb3RoZXIpIHsKLSAgR09PR0xFX0RDSEVDS19ORSgmb3RoZXIsIHRoaXMp
OwotICBpZiAob3RoZXIuY3VycmVudF9zaXplXyA9PSAwKSByZXR1cm47Ci0gIE1lcmdlRnJvbUlu
dGVybmFsKAotICAgICAgb3RoZXIsICZSZXBlYXRlZFB0ckZpZWxkQmFzZTo6TWVyZ2VGcm9tSW5u
ZXJMb29wPFR5cGVIYW5kbGVyPik7Ci19Ci0KLWlubGluZSB2b2lkIFJlcGVhdGVkUHRyRmllbGRC
YXNlOjpNZXJnZUZyb21JbnRlcm5hbCgKLSAgICBjb25zdCBSZXBlYXRlZFB0ckZpZWxkQmFzZSYg
b3RoZXIsCi0gICAgdm9pZCAoUmVwZWF0ZWRQdHJGaWVsZEJhc2U6Oippbm5lcl9sb29wKSh2b2lk
KiosIHZvaWQqKiwgaW50LCBpbnQpKSB7Ci0gIC8vIE5vdGU6IHdyYXBwZXIgaGFzIGFscmVhZHkg
Z3VhcmFudGVlZCB0aGF0IG90aGVyLnJlcF8gIT0gTlVMTCBoZXJlLgotICBpbnQgb3RoZXJfc2l6
ZSA9IG90aGVyLmN1cnJlbnRfc2l6ZV87Ci0gIHZvaWQqKiBvdGhlcl9lbGVtZW50cyA9IG90aGVy
LnJlcF8tPmVsZW1lbnRzOwotICB2b2lkKiogbmV3X2VsZW1lbnRzID0gSW50ZXJuYWxFeHRlbmQo
b3RoZXJfc2l6ZSk7Ci0gIGludCBhbGxvY2F0ZWRfZWxlbXMgPSByZXBfLT5hbGxvY2F0ZWRfc2l6
ZSAtIGN1cnJlbnRfc2l6ZV87Ci0gICh0aGlzLT4qaW5uZXJfbG9vcCkobmV3X2VsZW1lbnRzLCBv
dGhlcl9lbGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICBvdGhlcl9zaXplLCBhbGxvY2F0
ZWRfZWxlbXMpOwotICBjdXJyZW50X3NpemVfICs9IG90aGVyX3NpemU7Ci0gIGlmIChyZXBfLT5h
bGxvY2F0ZWRfc2l6ZSA8IGN1cnJlbnRfc2l6ZV8pIHsKLSAgICByZXBfLT5hbGxvY2F0ZWRfc2l6
ZSA9IGN1cnJlbnRfc2l6ZV87Ci0gIH0KLX0KLQotLy8gTWVyZ2VzIG90aGVyX2VsZW1zIHRvIG91
cl9lbGVtcy4KLXRlbXBsYXRlPHR5cGVuYW1lIFR5cGVIYW5kbGVyPgotdm9pZCBSZXBlYXRlZFB0
ckZpZWxkQmFzZTo6TWVyZ2VGcm9tSW5uZXJMb29wKAotICAgIHZvaWQqKiBvdXJfZWxlbXMsIHZv
aWQqKiBvdGhlcl9lbGVtcywgaW50IGxlbmd0aCwgaW50IGFscmVhZHlfYWxsb2NhdGVkKSB7Ci0g
IC8vIFNwbGl0IGludG8gdHdvIGxvb3BzLCBvdmVyIHJhbmdlcyBbMCwgYWxsb2NhdGVkKSBhbmQg
W2FsbG9jYXRlZCwgbGVuZ3RoKSwKLSAgLy8gdG8gYXZvaWQgYSBicmFuY2ggd2l0aGluIHRoZSBs
b29wLgotICBmb3IgKGludCBpID0gMDsgaSA8IGFscmVhZHlfYWxsb2NhdGVkICYmIGkgPCBsZW5n
dGg7IGkrKykgewotICAgIC8vIEFscmVhZHkgYWxsb2NhdGVkOiB1c2UgZXhpc3RpbmcgZWxlbWVu
dC4KLSAgICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogb3RoZXJfZWxlbSA9Ci0gICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqPihvdGhlcl9lbGVt
c1tpXSk7Ci0gICAgdHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqIG5ld19lbGVtID0KLSAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSo+KG91cl9lbGVt
c1tpXSk7Ci0gICAgVHlwZUhhbmRsZXI6Ok1lcmdlKCpvdGhlcl9lbGVtLCBuZXdfZWxlbSk7Ci0g
IH0KLSAgQXJlbmEqIGFyZW5hID0gR2V0QXJlbmFOb1ZpcnR1YWwoKTsKLSAgZm9yIChpbnQgaSA9
IGFscmVhZHlfYWxsb2NhdGVkOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAvLyBOb3QgYWxsb2Nh
dGVkOiBhbGxvYyBhIG5ldyBlbGVtZW50IGZpcnN0LCB0aGVuIG1lcmdlIGl0LgotICAgIHR5cGVu
YW1lIFR5cGVIYW5kbGVyOjpUeXBlKiBvdGhlcl9lbGVtID0KLSAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSo+KG90aGVyX2VsZW1zW2ldKTsKLSAgICB0
eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogbmV3X2VsZW0gPQotICAgICAgICBUeXBlSGFuZGxl
cjo6TmV3RnJvbVByb3RvdHlwZShvdGhlcl9lbGVtLCBhcmVuYSk7Ci0gICAgVHlwZUhhbmRsZXI6
Ok1lcmdlKCpvdGhlcl9lbGVtLCBuZXdfZWxlbSk7Ci0gICAgb3VyX2VsZW1zW2ldID0gbmV3X2Vs
ZW07Ci0gIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVyPgotaW5saW5lIHZv
aWQgUmVwZWF0ZWRQdHJGaWVsZEJhc2U6OkNvcHlGcm9tKGNvbnN0IFJlcGVhdGVkUHRyRmllbGRC
YXNlJiBvdGhlcikgewotICBpZiAoJm90aGVyID09IHRoaXMpIHJldHVybjsKLSAgUmVwZWF0ZWRQ
dHJGaWVsZEJhc2U6OkNsZWFyPFR5cGVIYW5kbGVyPigpOwotICBSZXBlYXRlZFB0ckZpZWxkQmFz
ZTo6TWVyZ2VGcm9tPFR5cGVIYW5kbGVyPihvdGhlcik7Ci19Ci0KLWlubGluZSBpbnQgUmVwZWF0
ZWRQdHJGaWVsZEJhc2U6OkNhcGFjaXR5KCkgY29uc3QgewotICByZXR1cm4gdG90YWxfc2l6ZV87
Ci19Ci0KLWlubGluZSB2b2lkKiBjb25zdCogUmVwZWF0ZWRQdHJGaWVsZEJhc2U6OnJhd19kYXRh
KCkgY29uc3QgewotICByZXR1cm4gcmVwXyA/IHJlcF8tPmVsZW1lbnRzIDogTlVMTDsKLX0KLQot
aW5saW5lIHZvaWQqKiBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6cmF3X211dGFibGVfZGF0YSgpIGNv
bnN0IHsKLSAgcmV0dXJuIHJlcF8gPyBjb25zdF9jYXN0PHZvaWQqKj4ocmVwXy0+ZWxlbWVudHMp
IDogTlVMTDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVyPgotaW5saW5lIHR5
cGVuYW1lIFR5cGVIYW5kbGVyOjpUeXBlKiogUmVwZWF0ZWRQdHJGaWVsZEJhc2U6Om11dGFibGVf
ZGF0YSgpIHsKLSAgLy8gVE9ETyhrZW50b24pOiAgQnJlYWtzIEMrKyBhbGlhc2luZyBydWxlcy4g
IFdlIHNob3VsZCBwcm9iYWJseSByZW1vdmUgdGhpcwotICAvLyAgIG1ldGhvZCBlbnRpcmVseS4K
LSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqKj4o
cmF3X211dGFibGVfZGF0YSgpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVIYW5kbGVy
PgotaW5saW5lIGNvbnN0IHR5cGVuYW1lIFR5cGVIYW5kbGVyOjpUeXBlKiBjb25zdCoKLVJlcGVh
dGVkUHRyRmllbGRCYXNlOjpkYXRhKCkgY29uc3QgewotICAvLyBUT0RPKGtlbnRvbik6ICBCcmVh
a3MgQysrIGFsaWFzaW5nIHJ1bGVzLiAgV2Ugc2hvdWxkIHByb2JhYmx5IHJlbW92ZSB0aGlzCi0g
IC8vICAgbWV0aG9kIGVudGlyZWx5LgotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB0
eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogY29uc3QqPihyYXdfZGF0YSgpKTsKLX0KLQotaW5s
aW5lIHZvaWQgUmVwZWF0ZWRQdHJGaWVsZEJhc2U6OlN3YXBFbGVtZW50cyhpbnQgaW5kZXgxLCBp
bnQgaW5kZXgyKSB7Ci0gIHVzaW5nIHN0ZDo6c3dhcDsgIC8vIGVuYWJsZSBBREwgd2l0aCBmYWxs
YmFjawotICBzd2FwKHJlcF8tPmVsZW1lbnRzW2luZGV4MV0sIHJlcF8tPmVsZW1lbnRzW2luZGV4
Ml0pOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZUhhbmRsZXI+Ci1pbmxpbmUgaW50IFJl
cGVhdGVkUHRyRmllbGRCYXNlOjpTcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCkgY29uc3QgewotICBp
bnQgYWxsb2NhdGVkX2J5dGVzID0gdG90YWxfc2l6ZV8gKiBzaXplb2Yodm9pZCopOwotICBpZiAo
cmVwXyAhPSBOVUxMKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBfLT5hbGxvY2F0ZWRf
c2l6ZTsgKytpKSB7Ci0gICAgICBhbGxvY2F0ZWRfYnl0ZXMgKz0gVHlwZUhhbmRsZXI6OlNwYWNl
VXNlZCgKLSAgICAgICAgICAqY2FzdDxUeXBlSGFuZGxlcj4ocmVwXy0+ZWxlbWVudHNbaV0pKTsK
LSAgICB9Ci0gICAgYWxsb2NhdGVkX2J5dGVzICs9IGtSZXBIZWFkZXJTaXplOwotICB9Ci0gIHJl
dHVybiBhbGxvY2F0ZWRfYnl0ZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlSGFuZGxl
cj4KLWlubGluZSB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogUmVwZWF0ZWRQdHJGaWVsZEJh
c2U6OkFkZEZyb21DbGVhcmVkKCkgewotICBpZiAocmVwXyAhPSBOVUxMICYmIGN1cnJlbnRfc2l6
ZV8gPCByZXBfLT5hbGxvY2F0ZWRfc2l6ZSkgewotICAgIHJldHVybiBjYXN0PFR5cGVIYW5kbGVy
PihyZXBfLT5lbGVtZW50c1tjdXJyZW50X3NpemVfKytdKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotfQotCi0vLyBBZGRBbGxvY2F0ZWQgdmVyc2lvbiB0aGF0IGltcGxlbWVu
dHMgYXJlbmEtc2FmZSBjb3B5aW5nIGJlaGF2aW9yLgotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVI
YW5kbGVyPgotdm9pZCBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6QWRkQWxsb2NhdGVkSW50ZXJuYWwo
Ci0gICAgdHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqIHZhbHVlLAotICAgIGdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjp0cnVlX3R5cGUpIHsKLSAgQXJlbmEqIGVsZW1lbnRfYXJlbmEgPSBy
ZWludGVycHJldF9jYXN0PEFyZW5hKj4oCi0gICAgICBUeXBlSGFuZGxlcjo6R2V0TWF5YmVBcmVu
YVBvaW50ZXIodmFsdWUpKTsKLSAgQXJlbmEqIGFyZW5hID0gR2V0QXJlbmFOb1ZpcnR1YWwoKTsK
LSAgaWYgKGFyZW5hID09IGVsZW1lbnRfYXJlbmEgJiYgcmVwXyAmJgotICAgICAgcmVwXy0+YWxs
b2NhdGVkX3NpemUgPCB0b3RhbF9zaXplXykgewotICAgIC8vIEZhc3QgcGF0aDogdW5kZXJseWlu
ZyBhcmVuYSByZXByZXNlbnRhdGlvbiAodGFnZ2VkIHBvaW50ZXIpIGlzIGVxdWFsIHRvCi0gICAg
Ly8gb3VyIGFyZW5hIHBvaW50ZXIsIGFuZCB3ZSBjYW4gYWRkIHRvIGFycmF5IHdpdGhvdXQgcmVz
aXppbmcgaXQgKGF0IGxlYXN0Ci0gICAgLy8gb25lIHNsb3QgdGhhdCBpcyBub3QgYWxsb2NhdGVk
KS4KLSAgICB2b2lkKiogZWxlbXMgPSByZXBfLT5lbGVtZW50czsKLSAgICBpZiAoY3VycmVudF9z
aXplXyA8IHJlcF8tPmFsbG9jYXRlZF9zaXplKSB7Ci0gICAgICAvLyBNYWtlIHNwYWNlIGF0IFtj
dXJyZW50XSBieSBtb3ZpbmcgZmlyc3QgYWxsb2NhdGVkIGVsZW1lbnQgdG8gZW5kIG9mCi0gICAg
ICAvLyBhbGxvY2F0ZWQgbGlzdC4KLSAgICAgIGVsZW1zW3JlcF8tPmFsbG9jYXRlZF9zaXplXSA9
IGVsZW1zW2N1cnJlbnRfc2l6ZV9dOwotICAgIH0KLSAgICBlbGVtc1tjdXJyZW50X3NpemVfXSA9
IHZhbHVlOwotICAgIGN1cnJlbnRfc2l6ZV8gPSBjdXJyZW50X3NpemVfICsgMTsKLSAgICByZXBf
LT5hbGxvY2F0ZWRfc2l6ZSA9IHJlcF8tPmFsbG9jYXRlZF9zaXplICsgMTsKLSAgICByZXR1cm47
Ci0gIH0gZWxzZSB7Ci0gICAgQWRkQWxsb2NhdGVkU2xvd1dpdGhDb3B5PFR5cGVIYW5kbGVyPigK
LSAgICAgICAgdmFsdWUsIFR5cGVIYW5kbGVyOjpHZXRBcmVuYSh2YWx1ZSksIGFyZW5hKTsKLSAg
fQotfQotCi0vLyBTbG93cGF0aCBoYW5kbGVzIGFsbCBjYXNlcywgY29weWluZyBpZiBuZWNlc3Nh
cnkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlSGFuZGxlcj4KLXZvaWQgUmVwZWF0ZWRQdHJGaWVs
ZEJhc2U6OkFkZEFsbG9jYXRlZFNsb3dXaXRoQ29weSgKLSAgICAvLyBQYXNzIHZhbHVlX2FyZW5h
IGFuZCBteV9hcmVuYSB0byBhdm9pZCBkdXBsaWNhdGUgdmlydHVhbCBjYWxsICh2YWx1ZSkgb3IK
LSAgICAvLyBsb2FkIChtaW5lKS4KLSAgICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogdmFs
dWUsIEFyZW5hKiB2YWx1ZV9hcmVuYSwgQXJlbmEqIG15X2FyZW5hKSB7Ci0gIC8vIEVuc3VyZSB0
aGF0IGVpdGhlciB0aGUgdmFsdWUgaXMgaW4gdGhlIHNhbWUgYXJlbmEsIG9yIGlmIG5vdCwgd2Ug
ZG8gdGhlCi0gIC8vIGFwcHJvcHJpYXRlIHRoaW5nOiBPd24oKSBpdCAoaWYgaXQncyBvbiBoZWFw
IGFuZCB3ZSdyZSBpbiBhbiBhcmVuYSkgb3IgY29weQotICAvLyBpdCB0byBvdXIgYXJlbmEvaGVh
cCAob3RoZXJ3aXNlKS4KLSAgaWYgKG15X2FyZW5hICE9IE5VTEwgJiYgdmFsdWVfYXJlbmEgPT0g
TlVMTCkgewotICAgIG15X2FyZW5hLT5Pd24odmFsdWUpOwotICB9IGVsc2UgaWYgKG15X2FyZW5h
ICE9IHZhbHVlX2FyZW5hKSB7Ci0gICAgdHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqIG5ld192
YWx1ZSA9Ci0gICAgICAgIFR5cGVIYW5kbGVyOjpOZXdGcm9tUHJvdG90eXBlKHZhbHVlLCBteV9h
cmVuYSk7Ci0gICAgVHlwZUhhbmRsZXI6Ok1lcmdlKCp2YWx1ZSwgbmV3X3ZhbHVlKTsKLSAgICBU
eXBlSGFuZGxlcjo6RGVsZXRlKHZhbHVlLCB2YWx1ZV9hcmVuYSk7Ci0gICAgdmFsdWUgPSBuZXdf
dmFsdWU7Ci0gIH0KLQotICBVbnNhZmVBcmVuYUFkZEFsbG9jYXRlZDxUeXBlSGFuZGxlcj4odmFs
dWUpOwotfQotCi0vLyBBZGRBbGxvY2F0ZWQgdmVyc2lvbiB0aGF0IGRvZXMgbm90IGltcGxlbWVu
dCBhcmVuYS1zYWZlIGNvcHlpbmcgYmVoYXZpb3IuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZUhh
bmRsZXI+Ci12b2lkIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpBZGRBbGxvY2F0ZWRJbnRlcm5hbCgK
LSAgICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogdmFsdWUsCi0gICAgZ29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OmZhbHNlX3R5cGUpIHsKLSAgaWYgKHJlcF8gJiYgIHJlcF8tPmFsbG9j
YXRlZF9zaXplIDwgdG90YWxfc2l6ZV8pIHsKLSAgICAvLyBGYXN0IHBhdGg6IHVuZGVybHlpbmcg
YXJlbmEgcmVwcmVzZW50YXRpb24gKHRhZ2dlZCBwb2ludGVyKSBpcyBlcXVhbCB0bwotICAgIC8v
IG91ciBhcmVuYSBwb2ludGVyLCBhbmQgd2UgY2FuIGFkZCB0byBhcnJheSB3aXRob3V0IHJlc2l6
aW5nIGl0IChhdCBsZWFzdAotICAgIC8vIG9uZSBzbG90IHRoYXQgaXMgbm90IGFsbG9jYXRlZCku
Ci0gICAgdm9pZCoqIGVsZW1zID0gcmVwXy0+ZWxlbWVudHM7Ci0gICAgaWYgKGN1cnJlbnRfc2l6
ZV8gPCByZXBfLT5hbGxvY2F0ZWRfc2l6ZSkgewotICAgICAgLy8gTWFrZSBzcGFjZSBhdCBbY3Vy
cmVudF0gYnkgbW92aW5nIGZpcnN0IGFsbG9jYXRlZCBlbGVtZW50IHRvIGVuZCBvZgotICAgICAg
Ly8gYWxsb2NhdGVkIGxpc3QuCi0gICAgICBlbGVtc1tyZXBfLT5hbGxvY2F0ZWRfc2l6ZV0gPSBl
bGVtc1tjdXJyZW50X3NpemVfXTsKLSAgICB9Ci0gICAgZWxlbXNbY3VycmVudF9zaXplX10gPSB2
YWx1ZTsKLSAgICBjdXJyZW50X3NpemVfID0gY3VycmVudF9zaXplXyArIDE7Ci0gICAgKytyZXBf
LT5hbGxvY2F0ZWRfc2l6ZTsKLSAgICByZXR1cm47Ci0gIH0gZWxzZSB7Ci0gICAgVW5zYWZlQXJl
bmFBZGRBbGxvY2F0ZWQ8VHlwZUhhbmRsZXI+KHZhbHVlKTsKLSAgfQotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVHlwZUhhbmRsZXI+Ci12b2lkIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpVbnNhZmVB
cmVuYUFkZEFsbG9jYXRlZCgKLSAgICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogdmFsdWUp
IHsKLSAgLy8gTWFrZSByb29tIGZvciB0aGUgbmV3IHBvaW50ZXIuCi0gIGlmICghcmVwXyB8fCBj
dXJyZW50X3NpemVfID09IHRvdGFsX3NpemVfKSB7Ci0gICAgLy8gVGhlIGFycmF5IGlzIGNvbXBs
ZXRlbHkgZnVsbCB3aXRoIG5vIGNsZWFyZWQgb2JqZWN0cywgc28gZ3JvdyBpdC4KLSAgICBSZXNl
cnZlKHRvdGFsX3NpemVfICsgMSk7Ci0gICAgKytyZXBfLT5hbGxvY2F0ZWRfc2l6ZTsKLSAgfSBl
bHNlIGlmIChyZXBfLT5hbGxvY2F0ZWRfc2l6ZSA9PSB0b3RhbF9zaXplXykgewotICAgIC8vIFRo
ZXJlIGlzIG5vIG1vcmUgc3BhY2UgaW4gdGhlIHBvaW50ZXIgYXJyYXkgYmVjYXVzZSBpdCBjb250
YWlucyBzb21lCi0gICAgLy8gY2xlYXJlZCBvYmplY3RzIGF3YWl0aW5nIHJldXNlLiAgV2UgZG9u
J3Qgd2FudCB0byBncm93IHRoZSBhcnJheSBpbiB0aGlzCi0gICAgLy8gY2FzZSBiZWNhdXNlIG90
aGVyd2lzZSBhIGxvb3AgY2FsbGluZyBBZGRBbGxvY2F0ZWQoKSBmb2xsb3dlZCBieSBDbGVhcigp
Ci0gICAgLy8gd291bGQgbGVhayBtZW1vcnkuCi0gICAgVHlwZUhhbmRsZXI6OkRlbGV0ZSgKLSAg
ICAgICAgY2FzdDxUeXBlSGFuZGxlcj4ocmVwXy0+ZWxlbWVudHNbY3VycmVudF9zaXplX10pLCBh
cmVuYV8pOwotICB9IGVsc2UgaWYgKGN1cnJlbnRfc2l6ZV8gPCByZXBfLT5hbGxvY2F0ZWRfc2l6
ZSkgewotICAgIC8vIFdlIGhhdmUgc29tZSBjbGVhcmVkIG9iamVjdHMuICBXZSBkb24ndCBjYXJl
IGFib3V0IHRoZWlyIG9yZGVyLCBzbyB3ZQotICAgIC8vIGNhbiBqdXN0IG1vdmUgdGhlIGZpcnN0
IG9uZSB0byB0aGUgZW5kIHRvIG1ha2Ugc3BhY2UuCi0gICAgcmVwXy0+ZWxlbWVudHNbcmVwXy0+
YWxsb2NhdGVkX3NpemVdID0gcmVwXy0+ZWxlbWVudHNbY3VycmVudF9zaXplX107Ci0gICAgKyty
ZXBfLT5hbGxvY2F0ZWRfc2l6ZTsKLSAgfSBlbHNlIHsKLSAgICAvLyBUaGVyZSBhcmUgbm8gY2xl
YXJlZCBvYmplY3RzLgotICAgICsrcmVwXy0+YWxsb2NhdGVkX3NpemU7Ci0gIH0KLQotICByZXBf
LT5lbGVtZW50c1tjdXJyZW50X3NpemVfKytdID0gdmFsdWU7Ci19Ci0KLS8vIFJlbGVhc2VMYXN0
KCkgZm9yIHR5cGVzIHRoYXQgaW1wbGVtZW50IG1lcmdlL2NvcHkgYmVoYXZpb3IuCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVHlwZUhhbmRsZXI+Ci1pbmxpbmUgdHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5
cGUqCi1SZXBlYXRlZFB0ckZpZWxkQmFzZTo6UmVsZWFzZUxhc3RJbnRlcm5hbChnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6dHJ1ZV90eXBlKSB7Ci0gIC8vIEZpcnN0LCByZWxlYXNlIGFuIGVs
ZW1lbnQuCi0gIHR5cGVuYW1lIFR5cGVIYW5kbGVyOjpUeXBlKiByZXN1bHQgPSBVbnNhZmVBcmVu
YVJlbGVhc2VMYXN0PFR5cGVIYW5kbGVyPigpOwotICAvLyBOb3cgcGVyZm9ybSBhIGNvcHkgaWYg
d2UncmUgb24gYW4gYXJlbmEuCi0gIEFyZW5hKiBhcmVuYSA9IEdldEFyZW5hTm9WaXJ0dWFsKCk7
Ci0gIGlmIChhcmVuYSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSBlbHNlIHsK
LSAgICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogbmV3X3Jlc3VsdCA9Ci0gICAgICAgIFR5
cGVIYW5kbGVyOjpOZXdGcm9tUHJvdG90eXBlKHJlc3VsdCwgTlVMTCk7Ci0gICAgVHlwZUhhbmRs
ZXI6Ok1lcmdlKCpyZXN1bHQsIG5ld19yZXN1bHQpOwotICAgIHJldHVybiBuZXdfcmVzdWx0Owot
ICB9Ci19Ci0KLS8vIFJlbGVhc2VMYXN0KCkgZm9yIHR5cGVzIHRoYXQgKmRvIG5vdCogaW1wbGVt
ZW50IG1lcmdlL2NvcHkgYmVoYXZpb3IgLS0gdGhpcwotLy8gaXMgdGhlIHNhbWUgYXMgVW5zYWZl
QXJlbmFSZWxlYXNlTGFzdCgpLiBOb3RlIHRoYXQgd2UgR09PR0xFX0RDSEVDSy1mYWlsIGlmIHdl
J3JlIG9uCi0vLyBhbiBhcmVuYSwgc2luY2UgdGhlIHVzZXIgcmVhbGx5IHNob3VsZCBpbXBsZW1l
bnQgdGhlIGNvcHkgb3BlcmF0aW9uIGluIHRoaXMKLS8vIGNhc2UuCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZUhhbmRsZXI+Ci1pbmxpbmUgdHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUqCi1SZXBl
YXRlZFB0ckZpZWxkQmFzZTo6UmVsZWFzZUxhc3RJbnRlcm5hbChnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6ZmFsc2VfdHlwZSkgewotICBHT09HTEVfRENIRUNLKEdldEFyZW5hTm9WaXJ0dWFs
KCkgPT0gTlVMTCkKLSAgICAgIDw8ICJSZWxlYXNlTGFzdCgpIGNhbGxlZCBvbiBhIFJlcGVhdGVk
UHRyRmllbGQgdGhhdCBpcyBvbiBhbiBhcmVuYSwgIgotICAgICAgPDwgIndpdGggYSB0eXBlIHRo
YXQgZG9lcyBub3QgaW1wbGVtZW50IE1lcmdlRnJvbS4gVGhpcyBpcyB1bnNhZmU7ICIKLSAgICAg
IDw8ICJwbGVhc2UgaW1wbGVtZW50IE1lcmdlRnJvbSBmb3IgeW91ciB0eXBlLiI7Ci0gIHJldHVy
biBVbnNhZmVBcmVuYVJlbGVhc2VMYXN0PFR5cGVIYW5kbGVyPigpOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVHlwZUhhbmRsZXI+Ci1pbmxpbmUgdHlwZW5hbWUgVHlwZUhhbmRsZXI6OlR5cGUq
Ci0gIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpVbnNhZmVBcmVuYVJlbGVhc2VMYXN0KCkgewotICBH
T09HTEVfRENIRUNLX0dUKGN1cnJlbnRfc2l6ZV8sIDApOwotICB0eXBlbmFtZSBUeXBlSGFuZGxl
cjo6VHlwZSogcmVzdWx0ID0KLSAgICAgIGNhc3Q8VHlwZUhhbmRsZXI+KHJlcF8tPmVsZW1lbnRz
Wy0tY3VycmVudF9zaXplX10pOwotICAtLXJlcF8tPmFsbG9jYXRlZF9zaXplOwotICBpZiAoY3Vy
cmVudF9zaXplXyA8IHJlcF8tPmFsbG9jYXRlZF9zaXplKSB7Ci0gICAgLy8gVGhlcmUgYXJlIGNs
ZWFyZWQgZWxlbWVudHMgb24gdGhlIGVuZDsgcmVwbGFjZSB0aGUgcmVtb3ZlZCBlbGVtZW50Ci0g
ICAgLy8gd2l0aCB0aGUgbGFzdCBhbGxvY2F0ZWQgZWxlbWVudC4KLSAgICByZXBfLT5lbGVtZW50
c1tjdXJyZW50X3NpemVfXSA9IHJlcF8tPmVsZW1lbnRzW3JlcF8tPmFsbG9jYXRlZF9zaXplXTsK
LSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgaW50IFJlcGVhdGVkUHRyRmllbGRC
YXNlOjpDbGVhcmVkQ291bnQoKSBjb25zdCB7Ci0gIHJldHVybiByZXBfID8gKHJlcF8tPmFsbG9j
YXRlZF9zaXplIC0gY3VycmVudF9zaXplXykgOiAwOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VHlwZUhhbmRsZXI+Ci1pbmxpbmUgdm9pZCBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6QWRkQ2xlYXJl
ZCgKLSAgICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogdmFsdWUpIHsKLSAgR09PR0xFX0RD
SEVDSyhHZXRBcmVuYU5vVmlydHVhbCgpID09IE5VTEwpCi0gICAgICA8PCAiQWRkQ2xlYXJlZCgp
IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZXBlYXRlZFB0ckZpZWxkIG5vdCBvbiBhbiBhcmVuYS4i
OwotICBHT09HTEVfRENIRUNLKFR5cGVIYW5kbGVyOjpHZXRBcmVuYSh2YWx1ZSkgPT0gTlVMTCkK
LSAgICAgIDw8ICJBZGRDbGVhcmVkKCkgY2FuIG9ubHkgYWNjZXB0IHZhbHVlcyBub3Qgb24gYW4g
YXJlbmEuIjsKLSAgaWYgKCFyZXBfIHx8IHJlcF8tPmFsbG9jYXRlZF9zaXplID09IHRvdGFsX3Np
emVfKSB7Ci0gICAgUmVzZXJ2ZSh0b3RhbF9zaXplXyArIDEpOwotICB9Ci0gIHJlcF8tPmVsZW1l
bnRzW3JlcF8tPmFsbG9jYXRlZF9zaXplKytdID0gdmFsdWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUeXBlSGFuZGxlcj4KLWlubGluZSB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogUmVw
ZWF0ZWRQdHJGaWVsZEJhc2U6OlJlbGVhc2VDbGVhcmVkKCkgewotICBHT09HTEVfRENIRUNLKEdl
dEFyZW5hTm9WaXJ0dWFsKCkgPT0gTlVMTCkKLSAgICAgIDw8ICJSZWxlYXNlQ2xlYXJlZCgpIGNh
biBvbmx5IGJlIHVzZWQgb24gYSBSZXBlYXRlZFB0ckZpZWxkIG5vdCBvbiAiCi0gICAgICA8PCAi
YW4gYXJlbmEuIjsKLSAgR09PR0xFX0RDSEVDSyhHZXRBcmVuYU5vVmlydHVhbCgpID09IE5VTEwp
OwotICBHT09HTEVfRENIRUNLKHJlcF8gIT0gTlVMTCk7Ci0gIEdPT0dMRV9EQ0hFQ0tfR1QocmVw
Xy0+YWxsb2NhdGVkX3NpemUsIGN1cnJlbnRfc2l6ZV8pOwotICByZXR1cm4gY2FzdDxUeXBlSGFu
ZGxlcj4ocmVwXy0+ZWxlbWVudHNbLS1yZXBfLT5hbGxvY2F0ZWRfc2l6ZV0pOwotfQotCi19ICAv
LyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudD4KLWNsYXNzIFJlcGVhdGVkUHRyRmllbGQ8RWxlbWVudD46OlR5cGVIYW5kbGVy
Ci0gICAgOiBwdWJsaWMgaW50ZXJuYWw6OkdlbmVyaWNUeXBlSGFuZGxlcjxFbGVtZW50PiB7Ci19
OwotCi10ZW1wbGF0ZSA8PgotY2xhc3MgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+OjpUeXBlSGFu
ZGxlcgotICAgIDogcHVibGljIGludGVybmFsOjpTdHJpbmdUeXBlSGFuZGxlciB7Ci19OwotCi0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIFJlcGVhdGVkUHRyRmllbGQ8RWxl
bWVudD46OlJlcGVhdGVkUHRyRmllbGQoKQotICA6IFJlcGVhdGVkUHRyRmllbGRCYXNlKCkge30K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgUmVwZWF0ZWRQdHJGaWVsZDxF
bGVtZW50Pjo6UmVwZWF0ZWRQdHJGaWVsZCg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVu
YSkgOgotICBSZXBlYXRlZFB0ckZpZWxkQmFzZShhcmVuYSkge30KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIEVsZW1lbnQ+Ci1pbmxpbmUgUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6UmVwZWF0ZWRQ
dHJGaWVsZCgKLSAgICBjb25zdCBSZXBlYXRlZFB0ckZpZWxkJiBvdGhlcikKLSAgOiBSZXBlYXRl
ZFB0ckZpZWxkQmFzZSgpIHsKLSAgQ29weUZyb20ob3RoZXIpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRWxlbWVudD4KLXRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgotaW5saW5lIFJlcGVhdGVk
UHRyRmllbGQ8RWxlbWVudD46OlJlcGVhdGVkUHRyRmllbGQoCi0gICAgSXRlciBiZWdpbiwgY29u
c3QgSXRlciYgZW5kKSB7Ci0gIGludCByZXNlcnZlID0gaW50ZXJuYWw6OkNhbGN1bGF0ZVJlc2Vy
dmUoYmVnaW4sIGVuZCk7Ci0gIGlmIChyZXNlcnZlICE9IC0xKSB7Ci0gICAgUmVzZXJ2ZShyZXNl
cnZlKTsKLSAgfQotICBmb3IgKDsgYmVnaW4gIT0gZW5kOyArK2JlZ2luKSB7Ci0gICAgKkFkZCgp
ID0gKmJlZ2luOwotICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotUmVwZWF0
ZWRQdHJGaWVsZDxFbGVtZW50Pjo6flJlcGVhdGVkUHRyRmllbGQoKSB7Ci0gIERlc3Ryb3k8VHlw
ZUhhbmRsZXI+KCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIFJl
cGVhdGVkUHRyRmllbGQ8RWxlbWVudD4mIFJlcGVhdGVkUHRyRmllbGQ8RWxlbWVudD46Om9wZXJh
dG9yPSgKLSAgICBjb25zdCBSZXBlYXRlZFB0ckZpZWxkJiBvdGhlcikgewotICBpZiAodGhpcyAh
PSAmb3RoZXIpCi0gICAgQ29weUZyb20ob3RoZXIpOwotICByZXR1cm4gKnRoaXM7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIGJvb2wgUmVwZWF0ZWRQdHJGaWVsZDxF
bGVtZW50Pjo6ZW1wdHkoKSBjb25zdCB7Ci0gIHJldHVybiBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6
ZW1wdHkoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgaW50IFJl
cGVhdGVkUHRyRmllbGQ8RWxlbWVudD46OnNpemUoKSBjb25zdCB7Ci0gIHJldHVybiBSZXBlYXRl
ZFB0ckZpZWxkQmFzZTo6c2l6ZSgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4K
LWlubGluZSBjb25zdCBFbGVtZW50JiBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+OjpHZXQoaW50
IGluZGV4KSBjb25zdCB7Ci0gIHJldHVybiBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6R2V0PFR5cGVI
YW5kbGVyPihpbmRleCk7Ci19Ci0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxp
bmUgRWxlbWVudCogUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6TXV0YWJsZShpbnQgaW5kZXgp
IHsKLSAgcmV0dXJuIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpNdXRhYmxlPFR5cGVIYW5kbGVyPihp
bmRleCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIEVsZW1lbnQq
IFJlcGVhdGVkUHRyRmllbGQ8RWxlbWVudD46OkFkZCgpIHsKLSAgcmV0dXJuIFJlcGVhdGVkUHRy
RmllbGRCYXNlOjpBZGQ8VHlwZUhhbmRsZXI+KCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBF
bGVtZW50PgotaW5saW5lIHZvaWQgUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6UmVtb3ZlTGFz
dCgpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZEJhc2U6OlJlbW92ZUxhc3Q8VHlwZUhhbmRsZXI+KCk7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIHZvaWQgUmVwZWF0ZWRQ
dHJGaWVsZDxFbGVtZW50Pjo6RGVsZXRlU3VicmFuZ2UoaW50IHN0YXJ0LCBpbnQgbnVtKSB7Ci0g
IEdPT0dMRV9EQ0hFQ0tfR0Uoc3RhcnQsIDApOwotICBHT09HTEVfRENIRUNLX0dFKG51bSwgMCk7
Ci0gIEdPT0dMRV9EQ0hFQ0tfTEUoc3RhcnQgKyBudW0sIHNpemUoKSk7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6RGVsZXRlPFR5
cGVIYW5kbGVyPihzdGFydCArIGkpOwotICB9Ci0gIEV4dHJhY3RTdWJyYW5nZShzdGFydCwgbnVt
LCBOVUxMKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgdm9pZCBS
ZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+OjpFeHRyYWN0U3VicmFuZ2UoCi0gICAgaW50IHN0YXJ0
LCBpbnQgbnVtLCBFbGVtZW50KiogZWxlbWVudHMpIHsKLSAgdHlwZW5hbWUgaW50ZXJuYWw6OlR5
cGVJbXBsZW1lbnRzTWVyZ2VCZWhhdmlvcjwKLSAgICAgIHR5cGVuYW1lIFR5cGVIYW5kbGVyOjpU
eXBlPjo6dHlwZSB0OwotICBFeHRyYWN0U3VicmFuZ2VJbnRlcm5hbChzdGFydCwgbnVtLCBlbGVt
ZW50cywgdCk7Ci19Ci0KLS8vIEV4dHJhY3RTdWJyYW5nZSgpIGltcGxlbWVudGF0aW9uIGZvciB0
eXBlcyB0aGF0IGltcGxlbWVudCBtZXJnZS9jb3B5Ci0vLyBiZWhhdmlvci4KLXRlbXBsYXRlIDx0
eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIHZvaWQgUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6
RXh0cmFjdFN1YnJhbmdlSW50ZXJuYWwoCi0gICAgaW50IHN0YXJ0LCBpbnQgbnVtLCBFbGVtZW50
KiogZWxlbWVudHMsIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjp0cnVlX3R5cGUpIHsKLSAg
R09PR0xFX0RDSEVDS19HRShzdGFydCwgMCk7Ci0gIEdPT0dMRV9EQ0hFQ0tfR0UobnVtLCAwKTsK
LSAgR09PR0xFX0RDSEVDS19MRShzdGFydCArIG51bSwgc2l6ZSgpKTsKLQotICBpZiAobnVtID4g
MCkgewotICAgIC8vIFNhdmUgdGhlIHZhbHVlcyBvZiB0aGUgcmVtb3ZlZCBlbGVtZW50cyBpZiBy
ZXF1ZXN0ZWQuCi0gICAgaWYgKGVsZW1lbnRzICE9IE5VTEwpIHsKLSAgICAgIGlmIChHZXRBcmVu
YU5vVmlydHVhbCgpICE9IE5VTEwpIHsKLSAgICAgICAgLy8gSWYgd2UncmUgb24gYW4gYXJlbmEs
IHdlIHBlcmZvcm0gYSBjb3B5IGZvciBlYWNoIGVsZW1lbnQgc28gdGhhdCB0aGUKLSAgICAgICAg
Ly8gcmV0dXJuZWQgZWxlbWVudHMgYXJlIGhlYXAtYWxsb2NhdGVkLgotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IFJl
cGVhdGVkUHRyRmllbGRCYXNlOjoKLSAgICAgICAgICAgICAgTXV0YWJsZTxUeXBlSGFuZGxlcj4o
aSArIHN0YXJ0KTsKLSAgICAgICAgICB0eXBlbmFtZSBUeXBlSGFuZGxlcjo6VHlwZSogbmV3X3Zh
bHVlID0KLSAgICAgICAgICAgICAgVHlwZUhhbmRsZXI6Ok5ld0Zyb21Qcm90b3R5cGUoZWxlbWVu
dCwgTlVMTCk7Ci0gICAgICAgICAgVHlwZUhhbmRsZXI6Ok1lcmdlKCplbGVtZW50LCBuZXdfdmFs
dWUpOwotICAgICAgICAgIGVsZW1lbnRzW2ldID0gbmV3X3ZhbHVlOwotICAgICAgICB9Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAg
ICAgICAgZWxlbWVudHNbaV0gPSBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6TXV0YWJsZTxUeXBlSGFu
ZGxlcj4oaSArIHN0YXJ0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBDbG9zZUdh
cChzdGFydCwgbnVtKTsKLSAgfQotfQotCi0vLyBFeHRyYWN0U3VicmFuZ2UoKSBpbXBsZW1lbnRh
dGlvbiBmb3IgdHlwZXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IG1lcmdlL2NvcHkKLS8vIGJlaGF2
aW9yLgotdGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB2b2lkIFJlcGVhdGVkUHRy
RmllbGQ8RWxlbWVudD46OkV4dHJhY3RTdWJyYW5nZUludGVybmFsKAotICAgIGludCBzdGFydCwg
aW50IG51bSwgRWxlbWVudCoqIGVsZW1lbnRzLCBnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
ZmFsc2VfdHlwZSkgewotICAvLyBUaGlzIGNhc2UgaXMgaWRlbnRpY2FsIHRvIFVuc2FmZUFyZW5h
RXh0cmFjdFN1YnJhbmdlKCkuIEhvd2V2ZXIsIHNpbmNlCi0gIC8vIEV4dHJhY3RTdWJyYW5nZSgp
IG11c3QgcmV0dXJuIGhlYXAtYWxsb2NhdGVkIG9iamVjdHMgYnkgY29udHJhY3QsIGFuZCB3ZQot
ICAvLyBjYW5ub3QgZnVsZmlsbCB0aGlzIGNvbnRyYWN0IGlmIHdlIGFyZSBhbiBvbiBhcmVuYSwg
d2UgbXVzdCBHT09HTEVfRENIRUNLKCkgdGhhdAotICAvLyB3ZSBhcmUgbm90IG9uIGFuIGFyZW5h
LgotICBHT09HTEVfRENIRUNLKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gTlVMTCkKLSAgICAgIDw8
ICJFeHRyYWN0U3VicmFuZ2UoKSB3aGVuIGFyZW5hIGlzIG5vbi1OVUxMIGlzIG9ubHkgc3VwcG9y
dGVkIHdoZW4gIgotICAgICAgPDwgInRoZSBFbGVtZW50IHR5cGUgc3VwcGxpZXMgYSBNZXJnZUZy
b20oKSBvcGVyYXRpb24gdG8gbWFrZSBjb3BpZXMuIjsKLSAgVW5zYWZlQXJlbmFFeHRyYWN0U3Vi
cmFuZ2Uoc3RhcnQsIG51bSwgZWxlbWVudHMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxl
bWVudD4KLWlubGluZSB2b2lkIFJlcGVhdGVkUHRyRmllbGQ8RWxlbWVudD46OlVuc2FmZUFyZW5h
RXh0cmFjdFN1YnJhbmdlKAotICAgIGludCBzdGFydCwgaW50IG51bSwgRWxlbWVudCoqIGVsZW1l
bnRzKSB7Ci0gIEdPT0dMRV9EQ0hFQ0tfR0Uoc3RhcnQsIDApOwotICBHT09HTEVfRENIRUNLX0dF
KG51bSwgMCk7Ci0gIEdPT0dMRV9EQ0hFQ0tfTEUoc3RhcnQgKyBudW0sIHNpemUoKSk7Ci0KLSAg
aWYgKG51bSA+IDApIHsKLSAgICAvLyBTYXZlIHRoZSB2YWx1ZXMgb2YgdGhlIHJlbW92ZWQgZWxl
bWVudHMgaWYgcmVxdWVzdGVkLgotICAgIGlmIChlbGVtZW50cyAhPSBOVUxMKSB7Ci0gICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgICAgIGVsZW1lbnRzW2ldID0gUmVw
ZWF0ZWRQdHJGaWVsZEJhc2U6Ok11dGFibGU8VHlwZUhhbmRsZXI+KGkgKyBzdGFydCk7Ci0gICAg
ICB9Ci0gICAgfQotICAgIENsb3NlR2FwKHN0YXJ0LCBudW0pOwotICB9Ci19Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIHZvaWQgUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50
Pjo6Q2xlYXIoKSB7Ci0gIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpDbGVhcjxUeXBlSGFuZGxlcj4o
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgdm9pZCBSZXBlYXRl
ZFB0ckZpZWxkPEVsZW1lbnQ+OjpNZXJnZUZyb20oCi0gICAgY29uc3QgUmVwZWF0ZWRQdHJGaWVs
ZCYgb3RoZXIpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZEJhc2U6Ok1lcmdlRnJvbTxUeXBlSGFuZGxl
cj4ob3RoZXIpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB2b2lk
IFJlcGVhdGVkUHRyRmllbGQ8RWxlbWVudD46OkNvcHlGcm9tKAotICAgIGNvbnN0IFJlcGVhdGVk
UHRyRmllbGQmIG90aGVyKSB7Ci0gIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpDb3B5RnJvbTxUeXBl
SGFuZGxlcj4ob3RoZXIpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGlu
ZSB0eXBlbmFtZSBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+OjppdGVyYXRvcgotUmVwZWF0ZWRQ
dHJGaWVsZDxFbGVtZW50Pjo6ZXJhc2UoY29uc3RfaXRlcmF0b3IgcG9zaXRpb24pIHsKLSAgcmV0
dXJuIGVyYXNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDEpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudD4KLWlubGluZSB0eXBlbmFtZSBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+Ojpp
dGVyYXRvcgotUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6ZXJhc2UoY29uc3RfaXRlcmF0b3Ig
Zmlyc3QsIGNvbnN0X2l0ZXJhdG9yIGxhc3QpIHsKLSAgc2l6ZV90eXBlIHBvc19vZmZzZXQgPSBz
dGQ6OmRpc3RhbmNlKGNiZWdpbigpLCBmaXJzdCk7Ci0gIHNpemVfdHlwZSBsYXN0X29mZnNldCA9
IHN0ZDo6ZGlzdGFuY2UoY2JlZ2luKCksIGxhc3QpOwotICBEZWxldGVTdWJyYW5nZShwb3Nfb2Zm
c2V0LCBsYXN0X29mZnNldCAtIHBvc19vZmZzZXQpOwotICByZXR1cm4gYmVnaW4oKSArIHBvc19v
ZmZzZXQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIEVsZW1lbnQq
KiBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+OjptdXRhYmxlX2RhdGEoKSB7Ci0gIHJldHVybiBS
ZXBlYXRlZFB0ckZpZWxkQmFzZTo6bXV0YWJsZV9kYXRhPFR5cGVIYW5kbGVyPigpOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSBjb25zdCBFbGVtZW50KiBjb25zdCog
UmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6ZGF0YSgpIGNvbnN0IHsKLSAgcmV0dXJuIFJlcGVh
dGVkUHRyRmllbGRCYXNlOjpkYXRhPFR5cGVIYW5kbGVyPigpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRWxlbWVudD4KLWlubGluZSB2b2lkIFJlcGVhdGVkUHRyRmllbGQ8RWxlbWVudD46OlN3
YXAoUmVwZWF0ZWRQdHJGaWVsZCogb3RoZXIpIHsKLSAgaWYgKHRoaXMgPT0gb3RoZXIpCi0gICAg
cmV0dXJuOwotICBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6U3dhcDxUeXBlSGFuZGxlcj4ob3RoZXIp
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB2b2lkIFJlcGVhdGVk
UHRyRmllbGQ8RWxlbWVudD46OlVuc2FmZUFyZW5hU3dhcCgKLSAgICBSZXBlYXRlZFB0ckZpZWxk
KiBvdGhlcikgewotICBHT09HTEVfRENIRUNLKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gb3RoZXIt
PkdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICBpZiAodGhpcyA9PSBvdGhlcikKLSAgICAgIHJldHVy
bjsKLSAgUmVwZWF0ZWRQdHJGaWVsZEJhc2U6OkludGVybmFsU3dhcChvdGhlcik7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIHZvaWQgUmVwZWF0ZWRQdHJGaWVsZDxF
bGVtZW50Pjo6U3dhcEVsZW1lbnRzKGludCBpbmRleDEsIGludCBpbmRleDIpIHsKLSAgUmVwZWF0
ZWRQdHJGaWVsZEJhc2U6OlN3YXBFbGVtZW50cyhpbmRleDEsIGluZGV4Mik7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIEFyZW5hKiBSZXBlYXRlZFB0ckZpZWxkPEVs
ZW1lbnQ+OjpHZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgcmV0dXJuIFJlcGVhdGVkUHRy
RmllbGRCYXNlOjpHZXRBcmVuYU5vVmlydHVhbCgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
RWxlbWVudD4KLWlubGluZSBpbnQgUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6U3BhY2VVc2Vk
RXhjbHVkaW5nU2VsZigpIGNvbnN0IHsKLSAgcmV0dXJuIFJlcGVhdGVkUHRyRmllbGRCYXNlOjpT
cGFjZVVzZWRFeGNsdWRpbmdTZWxmPFR5cGVIYW5kbGVyPigpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRWxlbWVudD4KLWlubGluZSB2b2lkIFJlcGVhdGVkUHRyRmllbGQ8RWxlbWVudD46OkFk
ZEFsbG9jYXRlZChFbGVtZW50KiB2YWx1ZSkgewotICBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6QWRk
QWxsb2NhdGVkPFR5cGVIYW5kbGVyPih2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBF
bGVtZW50PgotaW5saW5lIHZvaWQgUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6VW5zYWZlQXJl
bmFBZGRBbGxvY2F0ZWQoRWxlbWVudCogdmFsdWUpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZEJhc2U6
OlVuc2FmZUFyZW5hQWRkQWxsb2NhdGVkPFR5cGVIYW5kbGVyPih2YWx1ZSk7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIEVsZW1lbnQqIFJlcGVhdGVkUHRyRmllbGQ8
RWxlbWVudD46OlJlbGVhc2VMYXN0KCkgewotICByZXR1cm4gUmVwZWF0ZWRQdHJGaWVsZEJhc2U6
OlJlbGVhc2VMYXN0PFR5cGVIYW5kbGVyPigpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxl
bWVudD4KLWlubGluZSBFbGVtZW50KiBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+OjpVbnNhZmVB
cmVuYVJlbGVhc2VMYXN0KCkgewotICByZXR1cm4gUmVwZWF0ZWRQdHJGaWVsZEJhc2U6OlVuc2Fm
ZUFyZW5hUmVsZWFzZUxhc3Q8VHlwZUhhbmRsZXI+KCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBFbGVtZW50PgotaW5saW5lIGludCBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+OjpDbGVhcmVk
Q291bnQoKSBjb25zdCB7Ci0gIHJldHVybiBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6Q2xlYXJlZENv
dW50KCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIHZvaWQgUmVw
ZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6QWRkQ2xlYXJlZChFbGVtZW50KiB2YWx1ZSkgewotICBy
ZXR1cm4gUmVwZWF0ZWRQdHJGaWVsZEJhc2U6OkFkZENsZWFyZWQ8VHlwZUhhbmRsZXI+KHZhbHVl
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgRWxlbWVudCogUmVw
ZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6UmVsZWFzZUNsZWFyZWQoKSB7Ci0gIHJldHVybiBSZXBl
YXRlZFB0ckZpZWxkQmFzZTo6UmVsZWFzZUNsZWFyZWQ8VHlwZUhhbmRsZXI+KCk7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIHZvaWQgUmVwZWF0ZWRQdHJGaWVsZDxF
bGVtZW50Pjo6UmVzZXJ2ZShpbnQgbmV3X3NpemUpIHsKLSAgcmV0dXJuIFJlcGVhdGVkUHRyRmll
bGRCYXNlOjpSZXNlcnZlKG5ld19zaXplKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1l
bnQ+Ci1pbmxpbmUgaW50IFJlcGVhdGVkUHRyRmllbGQ8RWxlbWVudD46OkNhcGFjaXR5KCkgY29u
c3QgewotICByZXR1cm4gUmVwZWF0ZWRQdHJGaWVsZEJhc2U6OkNhcGFjaXR5KCk7Ci19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gU1RMLWxpa2UgaXRlcmF0
b3IgaW1wbGVtZW50YXRpb24gZm9yIFJlcGVhdGVkUHRyRmllbGQuICBZb3Ugc2hvdWxkIG5vdAot
Ly8gcmVmZXIgdG8gdGhpcyBjbGFzcyBkaXJlY3RseTsgdXNlIFJlcGVhdGVkUHRyRmllbGQ8VD46
Oml0ZXJhdG9yIGluc3RlYWQuCi0vLwotLy8gVGhlIGl0ZXJhdG9yIGZvciBSZXBlYXRlZFB0ckZp
ZWxkPFQ+LCBSZXBlYXRlZFB0ckl0ZXJhdG9yPFQ+LCBpcwotLy8gdmVyeSBzaW1pbGFyIHRvIGl0
ZXJhdG9yX3B0cjxUKio+IGluIHV0aWwvZ3RsL2l0ZXJhdG9yX2FkYXB0b3JzLmgsCi0vLyBidXQg
YWRkcyByYW5kb20tYWNjZXNzIG9wZXJhdG9ycyBhbmQgaXMgbW9kaWZpZWQgdG8gd3JhcCBhIHZv
aWQqKiBiYXNlCi0vLyBpdGVyYXRvciAoc2luY2UgUmVwZWF0ZWRQdHJGaWVsZCBzdG9yZXMgaXRz
IGFycmF5IGFzIGEgdm9pZCogYXJyYXkgYW5kCi0vLyBjYXN0aW5nIHZvaWQqKiB0byBUKiogd291
bGQgdmlvbGF0ZSBDKysgYWxpYXNpbmcgcnVsZXMpLgotLy8KLS8vIFRoaXMgY29kZSBiYXNlZCBv
biBuZXQvcHJvdG8vcHJvdG8tYXJyYXktaW50ZXJuYWwuaCBieSBKZWZmcmV5IFlhc3NraW4KLS8v
IChqeWFzc2tpbkBnb29nbGUuY29tKS4KLXRlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnQ+Ci1jbGFz
cyBSZXBlYXRlZFB0ckl0ZXJhdG9yCi0gICAgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjwKLSAgICAg
ICAgICBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBFbGVtZW50PiB7Ci0gcHVibGlj
OgotICB0eXBlZGVmIFJlcGVhdGVkUHRySXRlcmF0b3I8RWxlbWVudD4gaXRlcmF0b3I7Ci0gIHR5
cGVkZWYgc3RkOjppdGVyYXRvcjwKLSAgICAgICAgICBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnLCBFbGVtZW50PiBzdXBlcmNsYXNzOwotCi0gIC8vIFNoYWRvdyB0aGUgdmFsdWVfdHlw
ZSBpbiBzdGQ6Oml0ZXJhdG9yPD4gYmVjYXVzZSBjb25zdF9pdGVyYXRvcjo6dmFsdWVfdHlwZQot
ICAvLyBuZWVkcyB0byBiZSBULCBub3QgY29uc3QgVC4KLSAgdHlwZWRlZiB0eXBlbmFtZSByZW1v
dmVfY29uc3Q8RWxlbWVudD46OnR5cGUgdmFsdWVfdHlwZTsKLQotICAvLyBMZXQgdGhlIGNvbXBp
bGVyIGtub3cgdGhhdCB0aGVzZSBhcmUgdHlwZSBuYW1lcywgc28gd2UgZG9uJ3QgaGF2ZSB0bwot
ICAvLyB3cml0ZSAidHlwZW5hbWUiIGluIGZyb250IG9mIHRoZW0gZXZlcnl3aGVyZS4KLSAgdHlw
ZWRlZiB0eXBlbmFtZSBzdXBlcmNsYXNzOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwotICB0eXBlZGVm
IHR5cGVuYW1lIHN1cGVyY2xhc3M6OnBvaW50ZXIgcG9pbnRlcjsKLSAgdHlwZWRlZiB0eXBlbmFt
ZSBzdXBlcmNsYXNzOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwotCi0gIFJlcGVh
dGVkUHRySXRlcmF0b3IoKSA6IGl0XyhOVUxMKSB7fQotICBleHBsaWNpdCBSZXBlYXRlZFB0ckl0
ZXJhdG9yKHZvaWQqIGNvbnN0KiBpdCkgOiBpdF8oaXQpIHt9Ci0KLSAgLy8gQWxsb3cgInVwY2Fz
dGluZyIgZnJvbSBSZXBlYXRlZFB0ckl0ZXJhdG9yPFQqKj4gdG8KLSAgLy8gUmVwZWF0ZWRQdHJJ
dGVyYXRvcjxjb25zdCBUKmNvbnN0Kj4uCi0gIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyRWxlbWVu
dD4KLSAgUmVwZWF0ZWRQdHJJdGVyYXRvcihjb25zdCBSZXBlYXRlZFB0ckl0ZXJhdG9yPE90aGVy
RWxlbWVudD4mIG90aGVyKQotICAgICAgOiBpdF8ob3RoZXIuaXRfKSB7Ci0gICAgLy8gRm9yY2Ug
YSBjb21waWxlciBlcnJvciBpZiB0aGUgb3RoZXIgdHlwZSBpcyBub3QgY29udmVydGlibGUgdG8g
b3Vycy4KLSAgICBpZiAoZmFsc2UpIHsKLSAgICAgIGltcGxpY2l0X2Nhc3Q8RWxlbWVudCosIE90
aGVyRWxlbWVudCo+KDApOwotICAgIH0KLSAgfQotCi0gIC8vIGRlcmVmZXJlbmNlYWJsZQotICBy
ZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8RWxl
bWVudCo+KCppdF8pOyB9Ci0gIHBvaW50ZXIgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
JihvcGVyYXRvciooKSk7IH0KLQotICAvLyB7aW5jLGRlY31yZW1lbnRhYmxlCi0gIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkgeyArK2l0XzsgcmV0dXJuICp0aGlzOyB9Ci0gIGl0ZXJhdG9yICBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gaXRlcmF0b3IoaXRfKyspOyB9Ci0gIGl0ZXJhdG9yJiBvcGVy
YXRvci0tKCkgeyAtLWl0XzsgcmV0dXJuICp0aGlzOyB9Ci0gIGl0ZXJhdG9yICBvcGVyYXRvci0t
KGludCkgeyByZXR1cm4gaXRlcmF0b3IoaXRfLS0pOyB9Ci0KLSAgLy8gZXF1YWxpdHlfY29tcGFy
YWJsZQotICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIHgpIGNvbnN0IHsgcmV0dXJu
IGl0XyA9PSB4Lml0XzsgfQotICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIHgpIGNv
bnN0IHsgcmV0dXJuIGl0XyAhPSB4Lml0XzsgfQotCi0gIC8vIGxlc3NfdGhhbl9jb21wYXJhYmxl
Ci0gIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGl0ZXJhdG9yJiB4KSBjb25zdCB7IHJldHVybiBpdF8g
PCB4Lml0XzsgfQotICBib29sIG9wZXJhdG9yPD0oY29uc3QgaXRlcmF0b3ImIHgpIGNvbnN0IHsg
cmV0dXJuIGl0XyA8PSB4Lml0XzsgfQotICBib29sIG9wZXJhdG9yPihjb25zdCBpdGVyYXRvciYg
eCkgY29uc3QgeyByZXR1cm4gaXRfID4geC5pdF87IH0KLSAgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IGl0ZXJhdG9yJiB4KSBjb25zdCB7IHJldHVybiBpdF8gPj0geC5pdF87IH0KLQotICAvLyBhZGRh
YmxlLCBzdWJ0cmFjdGFibGUKLSAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBl
IGQpIHsKLSAgICBpdF8gKz0gZDsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSAgZnJpZW5kIGl0
ZXJhdG9yIG9wZXJhdG9yKyhpdGVyYXRvciBpdCwgY29uc3QgZGlmZmVyZW5jZV90eXBlIGQpIHsK
LSAgICBpdCArPSBkOwotICAgIHJldHVybiBpdDsKLSAgfQotICBmcmllbmQgaXRlcmF0b3Igb3Bl
cmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBkLCBpdGVyYXRvciBpdCkgewotICAgIGl0ICs9
IGQ7Ci0gICAgcmV0dXJuIGl0OwotICB9Ci0gIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVu
Y2VfdHlwZSBkKSB7Ci0gICAgaXRfIC09IGQ7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0gIGZy
aWVuZCBpdGVyYXRvciBvcGVyYXRvci0oaXRlcmF0b3IgaXQsIGRpZmZlcmVuY2VfdHlwZSBkKSB7
Ci0gICAgaXQgLT0gZDsKLSAgICByZXR1cm4gaXQ7Ci0gIH0KLQotICAvLyBpbmRleGFibGUKLSAg
cmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIGQpIGNvbnN0IHsgcmV0dXJuICoo
KnRoaXMgKyBkKTsgfQotCi0gIC8vIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IKLSAgZGlmZmVyZW5j
ZV90eXBlIG9wZXJhdG9yLShjb25zdCBpdGVyYXRvciYgeCkgY29uc3QgeyByZXR1cm4gaXRfIC0g
eC5pdF87IH0KLQotIHByaXZhdGU6Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyRWxlbWVudD4K
LSAgZnJpZW5kIGNsYXNzIFJlcGVhdGVkUHRySXRlcmF0b3I7Ci0KLSAgLy8gVGhlIGludGVybmFs
IGl0ZXJhdG9yLgotICB2b2lkKiBjb25zdCogaXRfOwotfTsKLQotLy8gUHJvdmlkZSBhbiBpdGVy
YXRvciB0aGF0IG9wZXJhdGVzIG9uIHBvaW50ZXJzIHRvIHRoZSB1bmRlcmx5aW5nIG9iamVjdHMK
LS8vIHJhdGhlciB0aGFuIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMgYXMgUmVwZWF0ZWRQdHJJdGVy
YXRvciBkb2VzLgotLy8gQ29uc2lkZXIgdXNpbmcgdGhpcyB3aGVuIHdvcmtpbmcgd2l0aCBzdGwg
YWxnb3JpdGhtcyB0aGF0IGNoYW5nZQotLy8gdGhlIGFycmF5LgotLy8gVGhlIFZvaWRQdHIgdGVt
cGxhdGUgcGFyYW1ldGVyIGhvbGRzIHRoZSB0eXBlLWFnbm9zdGljIHBvaW50ZXIgdmFsdWUKLS8v
IHJlZmVyZW5jZWQgYnkgdGhlIGl0ZXJhdG9yLiAgSXQgc2hvdWxkIGVpdGhlciBiZSAidm9pZCAq
IiBmb3IgYSBtdXRhYmxlCi0vLyBpdGVyYXRvciwgb3IgImNvbnN0IHZvaWQgKiIgZm9yIGEgY29u
c3RhbnQgaXRlcmF0b3IuCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50LCB0eXBlbmFtZSBWb2lk
UHRyPgotY2xhc3MgUmVwZWF0ZWRQdHJPdmVyUHRyc0l0ZXJhdG9yCi0gICAgOiBwdWJsaWMgc3Rk
OjppdGVyYXRvcjxzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBFbGVtZW50Kj4gewot
IHB1YmxpYzoKLSAgdHlwZWRlZiBSZXBlYXRlZFB0ck92ZXJQdHJzSXRlcmF0b3I8RWxlbWVudCwg
Vm9pZFB0cj4gaXRlcmF0b3I7Ci0gIHR5cGVkZWYgc3RkOjppdGVyYXRvcjwKLSAgICAgICAgICBz
dGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBFbGVtZW50Kj4gc3VwZXJjbGFzczsKLQot
ICAvLyBTaGFkb3cgdGhlIHZhbHVlX3R5cGUgaW4gc3RkOjppdGVyYXRvcjw+IGJlY2F1c2UgY29u
c3RfaXRlcmF0b3I6OnZhbHVlX3R5cGUKLSAgLy8gbmVlZHMgdG8gYmUgVCwgbm90IGNvbnN0IFQu
Ci0gIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PEVsZW1lbnQqPjo6dHlwZSB2YWx1ZV90
eXBlOwotCi0gIC8vIExldCB0aGUgY29tcGlsZXIga25vdyB0aGF0IHRoZXNlIGFyZSB0eXBlIG5h
bWVzLCBzbyB3ZSBkb24ndCBoYXZlIHRvCi0gIC8vIHdyaXRlICJ0eXBlbmFtZSIgaW4gZnJvbnQg
b2YgdGhlbSBldmVyeXdoZXJlLgotICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyY2xhc3M6OnJlZmVy
ZW5jZSByZWZlcmVuY2U7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJjbGFzczo6cG9pbnRlciBw
b2ludGVyOwotICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyY2xhc3M6OmRpZmZlcmVuY2VfdHlwZSBk
aWZmZXJlbmNlX3R5cGU7Ci0KLSAgUmVwZWF0ZWRQdHJPdmVyUHRyc0l0ZXJhdG9yKCkgOiBpdF8o
TlVMTCkge30KLSAgZXhwbGljaXQgUmVwZWF0ZWRQdHJPdmVyUHRyc0l0ZXJhdG9yKFZvaWRQdHIq
IGl0KSA6IGl0XyhpdCkge30KLQotICAvLyBkZXJlZmVyZW5jZWFibGUKLSAgcmVmZXJlbmNlIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEVsZW1lbnQqKj4oaXRf
KTsgfQotICBwb2ludGVyICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3Iq
KCkpOyB9Ci0KLSAgLy8ge2luYyxkZWN9cmVtZW50YWJsZQotICBpdGVyYXRvciYgb3BlcmF0b3Ir
KygpIHsgKytpdF87IHJldHVybiAqdGhpczsgfQotICBpdGVyYXRvciAgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuIGl0ZXJhdG9yKGl0XysrKTsgfQotICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsg
LS1pdF87IHJldHVybiAqdGhpczsgfQotICBpdGVyYXRvciAgb3BlcmF0b3ItLShpbnQpIHsgcmV0
dXJuIGl0ZXJhdG9yKGl0Xy0tKTsgfQotCi0gIC8vIGVxdWFsaXR5X2NvbXBhcmFibGUKLSAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiB4KSBjb25zdCB7IHJldHVybiBpdF8gPT0geC5p
dF87IH0KLSAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiB4KSBjb25zdCB7IHJldHVy
biBpdF8gIT0geC5pdF87IH0KLQotICAvLyBsZXNzX3RoYW5fY29tcGFyYWJsZQotICBib29sIG9w
ZXJhdG9yPChjb25zdCBpdGVyYXRvciYgeCkgY29uc3QgeyByZXR1cm4gaXRfIDwgeC5pdF87IH0K
LSAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGl0ZXJhdG9yJiB4KSBjb25zdCB7IHJldHVybiBpdF8g
PD0geC5pdF87IH0KLSAgYm9vbCBvcGVyYXRvcj4oY29uc3QgaXRlcmF0b3ImIHgpIGNvbnN0IHsg
cmV0dXJuIGl0XyA+IHguaXRfOyB9Ci0gIGJvb2wgb3BlcmF0b3I+PShjb25zdCBpdGVyYXRvciYg
eCkgY29uc3QgeyByZXR1cm4gaXRfID49IHguaXRfOyB9Ci0KLSAgLy8gYWRkYWJsZSwgc3VidHJh
Y3RhYmxlCi0gIGl0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBkKSB7Ci0gICAg
aXRfICs9IGQ7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0gIGZyaWVuZCBpdGVyYXRvciBvcGVy
YXRvcisoaXRlcmF0b3IgaXQsIGRpZmZlcmVuY2VfdHlwZSBkKSB7Ci0gICAgaXQgKz0gZDsKLSAg
ICByZXR1cm4gaXQ7Ci0gIH0KLSAgZnJpZW5kIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNl
X3R5cGUgZCwgaXRlcmF0b3IgaXQpIHsKLSAgICBpdCArPSBkOwotICAgIHJldHVybiBpdDsKLSAg
fQotICBpdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgZCkgewotICAgIGl0XyAt
PSBkOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotICBmcmllbmQgaXRlcmF0b3Igb3BlcmF0b3It
KGl0ZXJhdG9yIGl0LCBkaWZmZXJlbmNlX3R5cGUgZCkgewotICAgIGl0IC09IGQ7Ci0gICAgcmV0
dXJuIGl0OwotICB9Ci0KLSAgLy8gaW5kZXhhYmxlCi0gIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRp
ZmZlcmVuY2VfdHlwZSBkKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgZCk7IH0KLQotICAvLyBy
YW5kb20gYWNjZXNzIGl0ZXJhdG9yCi0gIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3Qg
aXRlcmF0b3ImIHgpIGNvbnN0IHsgcmV0dXJuIGl0XyAtIHguaXRfOyB9Ci0KLSBwcml2YXRlOgot
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckVsZW1lbnQ+Ci0gIGZyaWVuZCBjbGFzcyBSZXBlYXRl
ZFB0ckl0ZXJhdG9yOwotCi0gIC8vIFRoZSBpbnRlcm5hbCBpdGVyYXRvci4KLSAgVm9pZFB0ciog
aXRfOwotfTsKLQotdm9pZCBSZXBlYXRlZFB0ckZpZWxkQmFzZTo6SW50ZXJuYWxTd2FwKFJlcGVh
dGVkUHRyRmllbGRCYXNlKiBvdGhlcikgewotICBzdGQ6OnN3YXAocmVwXywgb3RoZXItPnJlcF8p
OwotICBzdGQ6OnN3YXAoY3VycmVudF9zaXplXywgb3RoZXItPmN1cnJlbnRfc2l6ZV8pOwotICBz
dGQ6OnN3YXAodG90YWxfc2l6ZV8sIG90aGVyLT50b3RhbF9zaXplXyk7Ci19Ci0KLX0gIC8vIG5h
bWVzcGFjZSBpbnRlcm5hbAotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB0
eXBlbmFtZSBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+OjppdGVyYXRvcgotUmVwZWF0ZWRQdHJG
aWVsZDxFbGVtZW50Pjo6YmVnaW4oKSB7Ci0gIHJldHVybiBpdGVyYXRvcihyYXdfZGF0YSgpKTsK
LX0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50PgotaW5saW5lIHR5cGVuYW1lIFJlcGVhdGVk
UHRyRmllbGQ8RWxlbWVudD46OmNvbnN0X2l0ZXJhdG9yCi1SZXBlYXRlZFB0ckZpZWxkPEVsZW1l
bnQ+OjpiZWdpbigpIGNvbnN0IHsKLSAgcmV0dXJuIGl0ZXJhdG9yKHJhd19kYXRhKCkpOwotfQot
dGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnQ+Ci1pbmxpbmUgdHlwZW5hbWUgUmVwZWF0ZWRQdHJG
aWVsZDxFbGVtZW50Pjo6Y29uc3RfaXRlcmF0b3IKLVJlcGVhdGVkUHRyRmllbGQ8RWxlbWVudD46
OmNiZWdpbigpIGNvbnN0IHsKLSAgcmV0dXJuIGJlZ2luKCk7Ci19Ci10ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudD4KLWlubGluZSB0eXBlbmFtZSBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+Ojpp
dGVyYXRvcgotUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6ZW5kKCkgewotICByZXR1cm4gaXRl
cmF0b3IocmF3X2RhdGEoKSArIHNpemUoKSk7Ci19Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dD4KLWlubGluZSB0eXBlbmFtZSBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+Ojpjb25zdF9pdGVy
YXRvcgotUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6ZW5kKCkgY29uc3QgewotICByZXR1cm4g
aXRlcmF0b3IocmF3X2RhdGEoKSArIHNpemUoKSk7Ci19Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxl
bWVudD4KLWlubGluZSB0eXBlbmFtZSBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+Ojpjb25zdF9p
dGVyYXRvcgotUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6Y2VuZCgpIGNvbnN0IHsKLSAgcmV0
dXJuIGVuZCgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB0eXBl
bmFtZSBSZXBlYXRlZFB0ckZpZWxkPEVsZW1lbnQ+Ojpwb2ludGVyX2l0ZXJhdG9yCi1SZXBlYXRl
ZFB0ckZpZWxkPEVsZW1lbnQ+Ojpwb2ludGVyX2JlZ2luKCkgewotICByZXR1cm4gcG9pbnRlcl9p
dGVyYXRvcihyYXdfbXV0YWJsZV9kYXRhKCkpOwotfQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1l
bnQ+Ci1pbmxpbmUgdHlwZW5hbWUgUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6Y29uc3RfcG9p
bnRlcl9pdGVyYXRvcgotUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6cG9pbnRlcl9iZWdpbigp
IGNvbnN0IHsKLSAgcmV0dXJuIGNvbnN0X3BvaW50ZXJfaXRlcmF0b3IoY29uc3RfY2FzdDxjb25z
dCB2b2lkKio+KHJhd19tdXRhYmxlX2RhdGEoKSkpOwotfQotdGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnQ+Ci1pbmxpbmUgdHlwZW5hbWUgUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6cG9pbnRl
cl9pdGVyYXRvcgotUmVwZWF0ZWRQdHJGaWVsZDxFbGVtZW50Pjo6cG9pbnRlcl9lbmQoKSB7Ci0g
IHJldHVybiBwb2ludGVyX2l0ZXJhdG9yKHJhd19tdXRhYmxlX2RhdGEoKSArIHNpemUoKSk7Ci19
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudD4KLWlubGluZSB0eXBlbmFtZSBSZXBlYXRlZFB0
ckZpZWxkPEVsZW1lbnQ+Ojpjb25zdF9wb2ludGVyX2l0ZXJhdG9yCi1SZXBlYXRlZFB0ckZpZWxk
PEVsZW1lbnQ+Ojpwb2ludGVyX2VuZCgpIGNvbnN0IHsKLSAgcmV0dXJuIGNvbnN0X3BvaW50ZXJf
aXRlcmF0b3IoCi0gICAgICBjb25zdF9jYXN0PGNvbnN0IHZvaWQqKj4ocmF3X211dGFibGVfZGF0
YSgpICsgc2l6ZSgpKSk7Ci19Ci0KLQotLy8gSXRlcmF0b3JzIGFuZCBoZWxwZXIgZnVuY3Rpb25z
IHRoYXQgZm9sbG93IHRoZSBzcGlyaXQgb2YgdGhlIFNUTAotLy8gc3RkOjpiYWNrX2luc2VydF9p
dGVyYXRvciBhbmQgc3RkOjpiYWNrX2luc2VydGVyIGJ1dCBhcmUgdGFpbG9yLW1hZGUKLS8vIGZv
ciBSZXBlYXRlZEZpZWxkIGFuZCBSZXBlYXRlZFB0ckZpZWxkLiBUeXBpY2FsIHVzYWdlIHdvdWxk
IGJlOgotLy8KLS8vICAgc3RkOjpjb3B5KHNvbWVfc2VxdWVuY2UuYmVnaW4oKSwgc29tZV9zZXF1
ZW5jZS5lbmQoKSwKLS8vICAgICAgICAgICAgIGdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkRmll
bGRCYWNrSW5zZXJ0ZXIocHJvdG8ubXV0YWJsZV9zZXF1ZW5jZSgpKSk7Ci0vLwotLy8gUG9ydGVk
IGJ5IGpvaGFubmVzIGZyb20gdXRpbC9ndGwvcHJvdG8tYXJyYXktaXRlcmF0b3JzLmgKLQotbmFt
ZXNwYWNlIGludGVybmFsIHsKLS8vIEEgYmFjayBpbnNlcnRlciBmb3IgUmVwZWF0ZWRGaWVsZCBv
YmplY3RzLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVwZWF0ZWRGaWVsZEJhY2tJbnNl
cnRJdGVyYXRvcgotICAgIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpvdXRwdXRfaXRlcmF0
b3JfdGFnLCBUPiB7Ci0gcHVibGljOgotICBleHBsaWNpdCBSZXBlYXRlZEZpZWxkQmFja0luc2Vy
dEl0ZXJhdG9yKAotICAgICAgUmVwZWF0ZWRGaWVsZDxUPiogY29uc3QgbXV0YWJsZV9maWVsZCkK
LSAgICAgIDogZmllbGRfKG11dGFibGVfZmllbGQpIHsKLSAgfQotICBSZXBlYXRlZEZpZWxkQmFj
a0luc2VydEl0ZXJhdG9yPFQ+JiBvcGVyYXRvcj0oY29uc3QgVCYgdmFsdWUpIHsKLSAgICBmaWVs
ZF8tPkFkZCh2YWx1ZSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0gIFJlcGVhdGVkRmllbGRC
YWNrSW5zZXJ0SXRlcmF0b3I8VD4mIG9wZXJhdG9yKigpIHsKLSAgICByZXR1cm4gKnRoaXM7Ci0g
IH0KLSAgUmVwZWF0ZWRGaWVsZEJhY2tJbnNlcnRJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsK
LSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSAgUmVwZWF0ZWRGaWVsZEJhY2tJbnNlcnRJdGVyYXRv
cjxUPiYgb3BlcmF0b3IrKyhpbnQgLyogdW51c2VkICovKSB7Ci0gICAgcmV0dXJuICp0aGlzOwot
ICB9Ci0KLSBwcml2YXRlOgotICBSZXBlYXRlZEZpZWxkPFQ+KiBmaWVsZF87Ci19OwotCi0vLyBB
IGJhY2sgaW5zZXJ0ZXIgZm9yIFJlcGVhdGVkUHRyRmllbGQgb2JqZWN0cy4KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIFJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0SXRlcmF0b3IKLSAgICA6
IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6b3V0cHV0X2l0ZXJhdG9yX3RhZywgVD4gewotIHB1
YmxpYzoKLSAgUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRJdGVyYXRvcigKLSAgICAgIFJlcGVh
dGVkUHRyRmllbGQ8VD4qIGNvbnN0IG11dGFibGVfZmllbGQpCi0gICAgICA6IGZpZWxkXyhtdXRh
YmxlX2ZpZWxkKSB7Ci0gIH0KLSAgUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRJdGVyYXRvcjxU
PiYgb3BlcmF0b3I9KGNvbnN0IFQmIHZhbHVlKSB7Ci0gICAgKmZpZWxkXy0+QWRkKCkgPSB2YWx1
ZTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSAgUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRJ
dGVyYXRvcjxUPiYgb3BlcmF0b3I9KAotICAgICAgY29uc3QgVCogY29uc3QgcHRyX3RvX3ZhbHVl
KSB7Ci0gICAgKmZpZWxkXy0+QWRkKCkgPSAqcHRyX3RvX3ZhbHVlOwotICAgIHJldHVybiAqdGhp
czsKLSAgfQotICBSZXBlYXRlZFB0ckZpZWxkQmFja0luc2VydEl0ZXJhdG9yPFQ+JiBvcGVyYXRv
ciooKSB7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0gIFJlcGVhdGVkUHRyRmllbGRCYWNrSW5z
ZXJ0SXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoKSB7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0g
IFJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0SXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoaW50IC8q
IHVudXNlZCAqLykgewotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gcHJpdmF0ZToKLSAgUmVw
ZWF0ZWRQdHJGaWVsZDxUPiogZmllbGRfOwotfTsKLQotLy8gQSBiYWNrIGluc2VydGVyIGZvciBS
ZXBlYXRlZFB0ckZpZWxkcyB0aGF0IGluc2VydHMgYnkgdHJhbnNmZXJpbmcgb3duZXJzaGlwCi0v
LyBvZiBhIHBvaW50ZXIuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBBbGxvY2F0ZWRSZXBl
YXRlZFB0ckZpZWxkQmFja0luc2VydEl0ZXJhdG9yCi0gICAgOiBwdWJsaWMgc3RkOjppdGVyYXRv
cjxzdGQ6Om91dHB1dF9pdGVyYXRvcl90YWcsIFQ+IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEFs
bG9jYXRlZFJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0SXRlcmF0b3IoCi0gICAgICBSZXBlYXRl
ZFB0ckZpZWxkPFQ+KiBjb25zdCBtdXRhYmxlX2ZpZWxkKQotICAgICAgOiBmaWVsZF8obXV0YWJs
ZV9maWVsZCkgewotICB9Ci0gIEFsbG9jYXRlZFJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0SXRl
cmF0b3I8VD4mIG9wZXJhdG9yPSgKLSAgICAgIFQqIGNvbnN0IHB0cl90b192YWx1ZSkgewotICAg
IGZpZWxkXy0+QWRkQWxsb2NhdGVkKHB0cl90b192YWx1ZSk7Ci0gICAgcmV0dXJuICp0aGlzOwot
ICB9Ci0gIEFsbG9jYXRlZFJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0SXRlcmF0b3I8VD4mIG9w
ZXJhdG9yKigpIHsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSAgQWxsb2NhdGVkUmVwZWF0ZWRQ
dHJGaWVsZEJhY2tJbnNlcnRJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKLSAgICByZXR1cm4g
KnRoaXM7Ci0gIH0KLSAgQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRJdGVyYXRv
cjxUPiYgb3BlcmF0b3IrKygKLSAgICAgIGludCAvKiB1bnVzZWQgKi8pIHsKLSAgICByZXR1cm4g
KnRoaXM7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIFJlcGVhdGVkUHRyRmllbGQ8VD4qIGZpZWxkXzsK
LX07Ci0KLS8vIEFsbW9zdCBpZGVudGljYWwgdG8gQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVsZEJh
Y2tJbnNlcnRJdGVyYXRvci4gVGhpcyBvbmUKLS8vIHVzZXMgdGhlIFVuc2FmZUFyZW5hQWRkQWxs
b2NhdGVkIGluc3RlYWQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgVW5zYWZlQXJlbmFB
bGxvY2F0ZWRSZXBlYXRlZFB0ckZpZWxkQmFja0luc2VydEl0ZXJhdG9yCi0gICAgOiBwdWJsaWMg
c3RkOjppdGVyYXRvcjxzdGQ6Om91dHB1dF9pdGVyYXRvcl90YWcsIFQ+IHsKLSBwdWJsaWM6Ci0g
IGV4cGxpY2l0IFVuc2FmZUFyZW5hQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRJ
dGVyYXRvcigKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8VD4qIGNv
bnN0IG11dGFibGVfZmllbGQpCi0gIDogZmllbGRfKG11dGFibGVfZmllbGQpIHsKLSAgfQotICBV
bnNhZmVBcmVuYUFsbG9jYXRlZFJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0SXRlcmF0b3I8VD4m
IG9wZXJhdG9yPSgKLSAgICBUIGNvbnN0KiBjb25zdCBwdHJfdG9fdmFsdWUpIHsKLSAgICBmaWVs
ZF8tPlVuc2FmZUFyZW5hQWRkQWxsb2NhdGVkKGNvbnN0X2Nhc3Q8VCo+KHB0cl90b192YWx1ZSkp
OwotICAgIHJldHVybiAqdGhpczsKLSAgfQotICBVbnNhZmVBcmVuYUFsbG9jYXRlZFJlcGVhdGVk
UHRyRmllbGRCYWNrSW5zZXJ0SXRlcmF0b3I8VD4mIG9wZXJhdG9yKigpIHsKLSAgICByZXR1cm4g
KnRoaXM7Ci0gIH0KLSAgVW5zYWZlQXJlbmFBbGxvY2F0ZWRSZXBlYXRlZFB0ckZpZWxkQmFja0lu
c2VydEl0ZXJhdG9yPFQ+JiBvcGVyYXRvcisrKCkgewotICAgIHJldHVybiAqdGhpczsKLSAgfQot
ICBVbnNhZmVBcmVuYUFsbG9jYXRlZFJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0SXRlcmF0b3I8
VD4mIG9wZXJhdG9yKysoCi0gICAgICBpbnQgLyogdW51c2VkICovKSB7Ci0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSBwcml2YXRlOgotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRy
RmllbGQ8VD4qIGZpZWxkXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi0vLyBQ
cm92aWRlcyBhIGJhY2sgaW5zZXJ0IGl0ZXJhdG9yIGZvciBSZXBlYXRlZEZpZWxkIGluc3RhbmNl
cywKLS8vIHNpbWlsYXIgdG8gc3RkOjpiYWNrX2luc2VydGVyKCkuCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbnRlcm5hbDo6UmVwZWF0ZWRGaWVsZEJhY2tJbnNlcnRJdGVyYXRvcjxUPgotUmVwZWF0
ZWRGaWVsZEJhY2tJbnNlcnRlcihSZXBlYXRlZEZpZWxkPFQ+KiBjb25zdCBtdXRhYmxlX2ZpZWxk
KSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6UmVwZWF0ZWRGaWVsZEJhY2tJbnNlcnRJdGVyYXRvcjxU
PihtdXRhYmxlX2ZpZWxkKTsKLX0KLQotLy8gUHJvdmlkZXMgYSBiYWNrIGluc2VydCBpdGVyYXRv
ciBmb3IgUmVwZWF0ZWRQdHJGaWVsZCBpbnN0YW5jZXMsCi0vLyBzaW1pbGFyIHRvIHN0ZDo6YmFj
a19pbnNlcnRlcigpLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW50ZXJuYWw6OlJlcGVhdGVkUHRy
RmllbGRCYWNrSW5zZXJ0SXRlcmF0b3I8VD4KLVJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0ZXIo
UmVwZWF0ZWRQdHJGaWVsZDxUPiogY29uc3QgbXV0YWJsZV9maWVsZCkgewotICByZXR1cm4gaW50
ZXJuYWw6OlJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0SXRlcmF0b3I8VD4obXV0YWJsZV9maWVs
ZCk7Ci19Ci0KLS8vIFNwZWNpYWwgYmFjayBpbnNlcnQgaXRlcmF0b3IgZm9yIFJlcGVhdGVkUHRy
RmllbGQgaW5zdGFuY2VzLCBqdXN0IGluCi0vLyBjYXNlIHNvbWVvbmUgd2FudHMgdG8gd3JpdGUg
Z2VuZXJpYyB0ZW1wbGF0ZSBjb2RlIHRoYXQgY2FuIGFjY2VzcyBib3RoCi0vLyBSZXBlYXRlZEZp
ZWxkcyBhbmQgUmVwZWF0ZWRQdHJGaWVsZHMgdXNpbmcgYSBjb21tb24gbmFtZS4KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGludGVybmFsOjpSZXBlYXRlZFB0ckZpZWxkQmFja0luc2VydEl0ZXJhdG9y
PFQ+Ci1SZXBlYXRlZEZpZWxkQmFja0luc2VydGVyKFJlcGVhdGVkUHRyRmllbGQ8VD4qIGNvbnN0
IG11dGFibGVfZmllbGQpIHsKLSAgcmV0dXJuIGludGVybmFsOjpSZXBlYXRlZFB0ckZpZWxkQmFj
a0luc2VydEl0ZXJhdG9yPFQ+KG11dGFibGVfZmllbGQpOwotfQotCi0vLyBQcm92aWRlcyBhIGJh
Y2sgaW5zZXJ0IGl0ZXJhdG9yIGZvciBSZXBlYXRlZFB0ckZpZWxkIGluc3RhbmNlcwotLy8gc2lt
aWxhciB0byBzdGQ6OmJhY2tfaW5zZXJ0ZXIoKSB3aGljaCB0cmFuc2ZlcnMgdGhlIG93bmVyc2hp
cCB3aGlsZQotLy8gY29weWluZyBlbGVtZW50cy4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGludGVy
bmFsOjpBbGxvY2F0ZWRSZXBlYXRlZFB0ckZpZWxkQmFja0luc2VydEl0ZXJhdG9yPFQ+Ci1BbGxv
Y2F0ZWRSZXBlYXRlZFB0ckZpZWxkQmFja0luc2VydGVyKAotICAgIFJlcGVhdGVkUHRyRmllbGQ8
VD4qIGNvbnN0IG11dGFibGVfZmllbGQpIHsKLSAgcmV0dXJuIGludGVybmFsOjpBbGxvY2F0ZWRS
ZXBlYXRlZFB0ckZpZWxkQmFja0luc2VydEl0ZXJhdG9yPFQ+KAotICAgICAgbXV0YWJsZV9maWVs
ZCk7Ci19Ci0KLS8vIFNpbWlsYXIgdG8gQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNl
cnRlciwgdXNpbmcKLS8vIFVuc2FmZUFyZW5hQWRkQWxsb2NhdGVkIGluc3RlYWQgb2YgQWRkQWxs
b2NhdGVkLgotLy8gVGhpcyBpcyBzbGlnaHRseSBmYXN0ZXIgaWYgdGhhdCBtYXR0ZXJzLiBJdCBp
cyBhbHNvIHVzZWZ1bCBpbiBsZWdhY3kgY29kZQotLy8gdGhhdCB1c2VzIHRlbXBvcmFyeSBvd25l
cnNoaXAgdG8gYXZvaWQgY29waWVzLiBFeGFtcGxlOgotLy8gUmVwZWF0ZWRQdHJGaWVsZDxUPiB0
ZW1wX2ZpZWxkOwotLy8gdGVtcF9maWVsZC5BZGRBbGxvY2F0ZWQobmV3IFQpOwotLy8gLi4uIC8v
IERvIHNvbWV0aGluZyB3aXRoIHRlbXBfZmllbGQKLS8vIHRlbXBfZmllbGQuRXh0cmFjdFN1YnJh
bmdlKDAsIHRlbXBfZmllbGQuc2l6ZSgpLCBOVUxMKTsKLS8vIElmIHlvdSBwdXQgdGVtcF9maWVs
ZCBvbiB0aGUgYXJlbmEgdGhpcyBmYWlscywgYmVjYXVzZSB0aGUgb3duZXJzaGlwCi0vLyB0cmFu
c2ZlcnMgdG8gdGhlIGFyZW5hIGF0IHRoZSAiQWRkQWxsb2NhdGVkIiBjYWxsIGFuZCBpcyBub3Qg
cmVsZWFzZWQgYW55bW9yZQotLy8gY2F1c2luZyBhIGRvdWJsZSBkZWxldGUuIFVzaW5nIFVuc2Fm
ZUFyZW5hQWRkQWxsb2NhdGVkIHByZXZlbnRzIHRoaXMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
aW50ZXJuYWw6OlVuc2FmZUFyZW5hQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRJ
dGVyYXRvcjxUPgotVW5zYWZlQXJlbmFBbGxvY2F0ZWRSZXBlYXRlZFB0ckZpZWxkQmFja0luc2Vy
dGVyKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDxUPiogY29uc3Qg
bXV0YWJsZV9maWVsZCkgewotICByZXR1cm4gaW50ZXJuYWw6OlVuc2FmZUFyZW5hQWxsb2NhdGVk
UmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRJdGVyYXRvcjxUPigKLSAgICAgIG11dGFibGVfZmll
bGQpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdv
b2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfUkVQRUFURURfRklFTERfSF9fCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGRfcmVmbGVjdGlvbi5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkX3JlZmxlY3Rpb24uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDRkMTRkNWIzY2EyZWZlMmQ3ZjRkODUxYjkxODE3NmJiMTky
YWRhOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGRfcmVmbGVjdGlvbi5oCisrKyAvZGV2L251bGwK
QEAgLTEsMzM3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyBUaGlzIGhlYWRlciBmaWxlIGlzIHByb3RvYnVmIGludGVybmFsLiBVc2VycyBzaG91bGQgbm90
IGluY2x1ZGUgdGhpcwotLy8gZmlsZSBkaXJlY3RseS4KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVG
X1JFUEVBVEVEX0ZJRUxEX1JFRkxFQ1RJT05fSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9S
RVBFQVRFRF9GSUVMRF9SRUZMRUNUSU9OX0hfXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRl
ZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9w
dHIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9lbnVt
X3JlZmxlY3Rpb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIGludGVybmFsIHsKLS8vIEludGVyZmFjZXMgdXNlZCB0byBpbXBsZW1lbnQg
cmVmbGVjdGlvbiBSZXBlYXRlZEZpZWxkUmVmIEFQSS4KLS8vIFJlZmxlY3Rpb246OkdldFJlcGVh
dGVkQWNjZXNzb3IoKSBzaG91bGQgcmV0dXJuIGEgcG9pbnRlciB0byBhbiBzaW5nbGV0b24KLS8v
IG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGJlbG93IGludGVyZmFjZS4KLS8vCi0vLyBUaGlz
IGludGVyZmFjZSBwYXNzZXMvcmV0dXJucyB2YWx1ZXMgdXNpbmcgdm9pZCBwb2ludGVycy4gVGhl
IGFjdHVhbCB0eXBlCi0vLyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgZmllbGQncyBjcHBf
dHlwZS4gRm9sbG93aW5nIGlzIGEgbWFwcGluZyBmcm9tCi0vLyBjcHBfdHlwZSB0byB0aGUgdHlw
ZSB0aGF0IHNob3VsZCBiZSB1c2VkIGluIHRoaXMgaW50ZXJmYWNlOgotLy8KLS8vICAgZmllbGQt
PmNwcF90eXBlKCkgICAgICBUICAgICAgICAgICAgICAgIEFjdHVhbCB0eXBlIG9mIHZvaWQqCi0v
LyAgIENQUFRZUEVfSU5UMzIgICAgICAgIGludDMyICAgICAgICAgICAgICAgICAgIGludDMyCi0v
LyAgIENQUFRZUEVfVUlOVDMyICAgICAgIHVpbnQzMiAgICAgICAgICAgICAgICAgIHVpbnQzMgot
Ly8gICBDUFBUWVBFX0lOVDY0ICAgICAgICBpbnQ2NCAgICAgICAgICAgICAgICAgICBpbnQ2NAot
Ly8gICBDUFBUWVBFX1VJTlQ2NCAgICAgICB1aW50NjQgICAgICAgICAgICAgICAgICB1aW50NjQK
LS8vICAgQ1BQVFlQRV9ET1VCTEUgICAgICAgZG91YmxlICAgICAgICAgICAgICAgICAgZG91Ymxl
Ci0vLyAgIENQUFRZUEVfRkxPQVQgICAgICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgIGZsb2F0
Ci0vLyAgIENQUFRZUEVfQk9PTCAgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIGJvb2wK
LS8vICAgQ1BQVFlQRV9FTlVNICAgICAgICAgZ2VuZXJhdGVkIGVudW0gdHlwZSAgICAgaW50MzIK
LS8vICAgQ1BQVFlQRV9TVFJJTkcgICAgICAgc3RyaW5nICAgICAgICAgICAgICAgICAgc3RyaW5n
Ci0vLyAgIENQUFRZUEVfTUVTU0FHRSAgICAgIGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgIGdvb2ds
ZTo6cHJvdG9idWY6Ok1lc3NhZ2UKLS8vICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ29vZ2xl
Ojpwcm90b2J1Zjo6TWVzc2FnZQotLy8KLS8vIE5vdGUgdGhhdCBmb3IgZW51bXMgd2UgdXNlIGlu
dDMyIGluIHRoZSBpbnRlcmZhY2UuCi0vLwotLy8gWW91IGNhbiBtYXAgZnJvbSBUIHRvIHRoZSBh
Y3R1YWwgdHlwZSB1c2luZyBSZWZUeXBlVHJhaXRzOgotLy8gICB0eXBlZGVmIFJlZlR5cGVUcmFp
dHM8VD46OkFjY2Vzc29yVmFsdWVUeXBlIEFjdHVhbFR5cGU7Ci1jbGFzcyBMSUJQUk9UT0JVRl9F
WFBPUlQgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yIHsKLSBwdWJsaWM6Ci0gIC8vIFR5cGVkZWZzIGZv
ciBjbGFyaXR5LgotICB0eXBlZGVmIHZvaWQgRmllbGQ7Ci0gIHR5cGVkZWYgdm9pZCBWYWx1ZTsK
LSAgdHlwZWRlZiB2b2lkIEl0ZXJhdG9yOwotCi0gIHZpcnR1YWwgflJlcGVhdGVkRmllbGRBY2Nl
c3NvcigpOwotICB2aXJ0dWFsIGJvb2wgSXNFbXB0eShjb25zdCBGaWVsZCogZGF0YSkgY29uc3Qg
PSAwOwotICB2aXJ0dWFsIGludCBTaXplKGNvbnN0IEZpZWxkKiBkYXRhKSBjb25zdCA9IDA7Ci0g
IC8vIERlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlcGVh
dGVkIGZpZWxkLCB0aGlzCi0gIC8vIG1ldGhvZCBjYW4gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUg
dW5kZXJseWluZyBvYmplY3QgaWYgc3VjaCBhbiBvYmplY3QKLSAgLy8gZXhpc3RzLCBvciBmaWxs
IHRoZSBkYXRhIGludG8gc2NyYXRjaF9zcGFjZSBhbmQgcmV0dXJuIHNjcmF0Y2hfc3BhY2UuCi0g
IC8vIENhbGxlcnMgb2YgdGhpcyBtZXRob2QgbXVzdCBlbnN1cmUgc2NyYXRjaF9zcGFjZSBpcyBh
IHZhbGlkIHBvaW50ZXIKLSAgLy8gdG8gYSBtdXRhYmxlIG9iamVjdCBvZiB0aGUgY29ycmVjdCB0
eXBlLgotICB2aXJ0dWFsIGNvbnN0IFZhbHVlKiBHZXQoCi0gICAgICBjb25zdCBGaWVsZCogZGF0
YSwgaW50IGluZGV4LCBWYWx1ZSogc2NyYXRjaF9zcGFjZSkgY29uc3QgPSAwOwotCi0gIHZpcnR1
YWwgdm9pZCBDbGVhcihGaWVsZCogZGF0YSkgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgU2V0
KEZpZWxkKiBkYXRhLCBpbnQgaW5kZXgsIGNvbnN0IFZhbHVlKiB2YWx1ZSkgY29uc3QgPSAwOwot
ICB2aXJ0dWFsIHZvaWQgQWRkKEZpZWxkKiBkYXRhLCBjb25zdCBWYWx1ZSogdmFsdWUpIGNvbnN0
ID0gMDsKLSAgdmlydHVhbCB2b2lkIFJlbW92ZUxhc3QoRmllbGQqIGRhdGEpIGNvbnN0ID0gMDsK
LSAgdmlydHVhbCB2b2lkIFN3YXBFbGVtZW50cyhGaWVsZCogZGF0YSwgaW50IGluZGV4MSwgaW50
IGluZGV4MikgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgU3dhcChGaWVsZCogZGF0YSwgY29u
c3QgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yKiBvdGhlcl9tdXRhdG9yLAotICAgICAgICAgICAgICAg
ICAgICBGaWVsZCogb3RoZXJfZGF0YSkgY29uc3QgPSAwOwotCi0gIC8vIENyZWF0ZSBhbiBpdGVy
YXRvciB0aGF0IHBvaW50cyBhdCB0aGUgYmVnaW5pbmcgb2YgdGhlIHJlcGVhdGVkIGZpZWxkLgot
ICB2aXJ0dWFsIEl0ZXJhdG9yKiBCZWdpbkl0ZXJhdG9yKGNvbnN0IEZpZWxkKiBkYXRhKSBjb25z
dCA9IDA7Ci0gIC8vIENyZWF0ZSBhbiBpdGVyYXRvciB0aGF0IHBvaW50cyBhdCB0aGUgZW5kIG9m
IHRoZSByZXBlYXRlZCBmaWVsZC4KLSAgdmlydHVhbCBJdGVyYXRvciogRW5kSXRlcmF0b3IoY29u
c3QgRmllbGQqIGRhdGEpIGNvbnN0ID0gMDsKLSAgLy8gTWFrZSBhIGNvcHkgb2YgYW4gaXRlcmF0
b3IgYW5kIHJldHVybiB0aGUgbmV3IGNvcHkuCi0gIHZpcnR1YWwgSXRlcmF0b3IqIENvcHlJdGVy
YXRvcihjb25zdCBGaWVsZCogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEl0ZXJhdG9yKiBpdGVyYXRvcikgY29uc3QgPSAwOwotICAvLyBNb3ZlIGFuIGl0ZXJh
dG9yIHRvIHBvaW50IHRvIHRoZSBuZXh0IGVsZW1lbnQuCi0gIHZpcnR1YWwgSXRlcmF0b3IqIEFk
dmFuY2VJdGVyYXRvcihjb25zdCBGaWVsZCogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEl0ZXJhdG9yKiBpdGVyYXRvcikgY29uc3QgPSAwOwotICAvLyBDb21wYXJl
IHdoZXRoZXIgdHdvIGl0ZXJhdG9ycyBwb2ludCB0byB0aGUgc2FtZSBlbGVtZW50LgotICB2aXJ0
dWFsIGJvb2wgRXF1YWxzSXRlcmF0b3IoY29uc3QgRmllbGQqIGRhdGEsIGNvbnN0IEl0ZXJhdG9y
KiBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXRlcmF0b3IqIGIpIGNv
bnN0ID0gMDsKLSAgLy8gRGVsZXRlIGFuIGl0ZXJhdG9yIGNyZWF0ZWQgYnkgQmVnaW5JdGVyYXRv
cigpLCBFbmRJdGVyYXRvcigpIGFuZAotICAvLyBDb3B5SXRlcmF0b3IoKS4KLSAgdmlydHVhbCB2
b2lkIERlbGV0ZUl0ZXJhdG9yKGNvbnN0IEZpZWxkKiBkYXRhLCBJdGVyYXRvciogaXRlcmF0b3Ip
IGNvbnN0ID0gMDsKLSAgLy8gTGlrZSBHZXQoKSBidXQgZm9yIGl0ZXJhdG9ycy4KLSAgdmlydHVh
bCBjb25zdCBWYWx1ZSogR2V0SXRlcmF0b3JWYWx1ZShjb25zdCBGaWVsZCogZGF0YSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJdGVyYXRvciogaXRlcmF0
b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNjcmF0
Y2hfc3BhY2UpIGNvbnN0ID0gMDsKLQotICAvLyBUZW1wbGF0ZWQgbWV0aG9kcyB0aGF0IG1ha2Ug
dXNpbmcgdGhpcyBpbnRlcmZhY2UgZWFzaWVyIGZvciBub24tbWVzc2FnZQotICAvLyB0eXBlcy4K
LSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgVCBHZXQoY29uc3QgRmllbGQqIGRhdGEsIGludCBp
bmRleCkgY29uc3QgewotICAgIHR5cGVkZWYgdHlwZW5hbWUgUmVmVHlwZVRyYWl0czxUPjo6QWNj
ZXNzb3JWYWx1ZVR5cGUgQWN0dWFsVHlwZTsKLSAgICBBY3R1YWxUeXBlIHNjcmF0Y2hfc3BhY2U7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KAotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBBY3R1YWxUeXBlKj4oCi0gICAgICAgICAgICBHZXQoZGF0YSwgaW5kZXgsIHN0YXRpY19j
YXN0PFZhbHVlKj4oJnNjcmF0Y2hfc3BhY2UpKSkpOwotICB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVmFsdWVUeXBlPgotICB2b2lkIFNldChGaWVsZCogZGF0YSwgaW50IGlu
ZGV4LCBjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdCB7Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBSZWZUeXBlVHJhaXRzPFQ+OjpBY2Nlc3NvclZhbHVlVHlwZSBBY3R1YWxUeXBlOwotICAgIC8v
IEluIHRoaXMgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yIGludGVyZmFjZSB3ZSBwYXNzL3JldHVybiBk
YXRhIHVzaW5nCi0gICAgLy8gcmF3IHBvaW50ZXJzLiBUeXBlIG9mIHRoZSBkYXRhIHRoZXNlIHJh
dyBwb2ludGVycyBwb2ludCB0byBzaG91bGQKLSAgICAvLyBiZSBBY3R1YWxUeXBlLiBIZXJlIHdl
IGhhdmUgYSBWYWx1ZVR5cGUgb2JqZWN0IGFuZCB3YW50IGEgQWN0dWFsVHlwZQotICAgIC8vIHBv
aW50ZXIuIFdlIGNhbid0IGNhc3QgYSBWYWx1ZVR5cGUgcG9pbnRlciB0byBhbiBBY3R1YWxUeXBl
IHBvaW50ZXIKLSAgICAvLyBkaXJlY3RseSBiZWNhdXNlIHRoZWlyIHR5cGUgbWlnaHQgYmUgZGlm
ZmVyZW50IChmb3IgZW51bXMgVmFsdWVUeXBlCi0gICAgLy8gbWF5IGJlIGEgZ2VuZXJhdGVkIGVu
dW0gdHlwZSB3aGlsZSBBY3R1YWxUeXBlIGlzIGludDMyKS4gVG8gYmUgc2FmZQotICAgIC8vIHdl
IG1ha2UgYSBjb3B5IHRvIGdldCBhIHRlbXBvcmFyeSBBY3R1YWxUeXBlIG9iamVjdCBhbmQgdXNl
IGl0LgotICAgIEFjdHVhbFR5cGUgdG1wID0gc3RhdGljX2Nhc3Q8QWN0dWFsVHlwZT4odmFsdWUp
OwotICAgIFNldChkYXRhLCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3QgVmFsdWUqPigmdG1wKSk7
Ci0gIH0KLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBWYWx1ZVR5cGU+Ci0gIHZv
aWQgQWRkKEZpZWxkKiBkYXRhLCBjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdCB7Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBSZWZUeXBlVHJhaXRzPFQ+OjpBY2Nlc3NvclZhbHVlVHlwZSBBY3R1
YWxUeXBlOwotICAgIC8vIEluIHRoaXMgUmVwZWF0ZWRGaWVsZEFjY2Vzc29yIGludGVyZmFjZSB3
ZSBwYXNzL3JldHVybiBkYXRhIHVzaW5nCi0gICAgLy8gcmF3IHBvaW50ZXJzLiBUeXBlIG9mIHRo
ZSBkYXRhIHRoZXNlIHJhdyBwb2ludGVycyBwb2ludCB0byBzaG91bGQKLSAgICAvLyBiZSBBY3R1
YWxUeXBlLiBIZXJlIHdlIGhhdmUgYSBWYWx1ZVR5cGUgb2JqZWN0IGFuZCB3YW50IGEgQWN0dWFs
VHlwZQotICAgIC8vIHBvaW50ZXIuIFdlIGNhbid0IGNhc3QgYSBWYWx1ZVR5cGUgcG9pbnRlciB0
byBhbiBBY3R1YWxUeXBlIHBvaW50ZXIKLSAgICAvLyBkaXJlY3RseSBiZWNhdXNlIHRoZWlyIHR5
cGUgbWlnaHQgYmUgZGlmZmVyZW50IChmb3IgZW51bXMgVmFsdWVUeXBlCi0gICAgLy8gbWF5IGJl
IGEgZ2VuZXJhdGVkIGVudW0gdHlwZSB3aGlsZSBBY3R1YWxUeXBlIGlzIGludDMyKS4gVG8gYmUg
c2FmZQotICAgIC8vIHdlIG1ha2UgYSBjb3B5IHRvIGdldCBhIHRlbXBvcmFyeSBBY3R1YWxUeXBl
IG9iamVjdCBhbmQgdXNlIGl0LgotICAgIEFjdHVhbFR5cGUgdG1wID0gc3RhdGljX2Nhc3Q8QWN0
dWFsVHlwZT4odmFsdWUpOwotICAgIEFkZChkYXRhLCBzdGF0aWNfY2FzdDxjb25zdCBWYWx1ZSo+
KCZ0bXApKTsKLSAgfQotfTsKLQotLy8gSW1wbGVtZW50IChNdXRhYmxlKVJlcGVhdGVkRmllbGRS
ZWY6Oml0ZXJhdG9yCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgUmVwZWF0ZWRGaWVsZFJl
Zkl0ZXJhdG9yCi0gICAgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0
b3JfdGFnLCBUPiB7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgUmVmVHlwZVRyYWl0czxUPjo6QWNjZXNz
b3JWYWx1ZVR5cGUgQWNjZXNzb3JWYWx1ZVR5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgUmVmVHlw
ZVRyYWl0czxUPjo6SXRlcmF0b3JWYWx1ZVR5cGUgSXRlcmF0b3JWYWx1ZVR5cGU7Ci0gIHR5cGVk
ZWYgdHlwZW5hbWUgUmVmVHlwZVRyYWl0czxUPjo6SXRlcmF0b3JQb2ludGVyVHlwZSBJdGVyYXRv
clBvaW50ZXJUeXBlOwotCi0gcHVibGljOgotICAvLyBDb25zdHJ1Y3RvciBmb3Igbm9uLW1lc3Nh
Z2UgZmllbGRzLgotICBSZXBlYXRlZEZpZWxkUmVmSXRlcmF0b3IoY29uc3Qgdm9pZCogZGF0YSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGVhdGVkRmllbGRBY2Nlc3Nvciog
YWNjZXNzb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJlZ2luKQotICAgICAg
OiBkYXRhXyhkYXRhKSwgYWNjZXNzb3JfKGFjY2Vzc29yKSwKLSAgICAgICAgaXRlcmF0b3JfKGJl
Z2luID8gYWNjZXNzb3ItPkJlZ2luSXRlcmF0b3IoZGF0YSkgOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICBhY2Nlc3Nvci0+RW5kSXRlcmF0b3IoZGF0YSkpLAotICAgICAgICBzY3JhdGNoX3Nw
YWNlXyhuZXcgQWNjZXNzb3JWYWx1ZVR5cGUpIHsKLSAgfQotICAvLyBDb25zdHJ1Y3RvciBmb3Ig
bWVzc2FnZSBmaWVsZHMuCi0gIFJlcGVhdGVkRmllbGRSZWZJdGVyYXRvcihjb25zdCB2b2lkKiBk
YXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwZWF0ZWRGaWVsZEFjY2Vz
c29yKiBhY2Nlc3NvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmVnaW4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvclZhbHVlVHlwZSogc2NyYXRjaF9zcGFj
ZSkKLSAgICAgIDogZGF0YV8oZGF0YSksIGFjY2Vzc29yXyhhY2Nlc3NvciksCi0gICAgICAgIGl0
ZXJhdG9yXyhiZWdpbiA/IGFjY2Vzc29yLT5CZWdpbkl0ZXJhdG9yKGRhdGEpIDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPkVuZEl0ZXJhdG9yKGRhdGEpKSwKLSAgICAgICAg
c2NyYXRjaF9zcGFjZV8oc2NyYXRjaF9zcGFjZSkgewotICB9Ci0gIH5SZXBlYXRlZEZpZWxkUmVm
SXRlcmF0b3IoKSB7Ci0gICAgYWNjZXNzb3JfLT5EZWxldGVJdGVyYXRvcihkYXRhXywgaXRlcmF0
b3JfKTsKLSAgfQotICBSZXBlYXRlZEZpZWxkUmVmSXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsK
LSAgICBSZXBlYXRlZEZpZWxkUmVmSXRlcmF0b3IgdG1wKCp0aGlzKTsKLSAgICBpdGVyYXRvcl8g
PSBhY2Nlc3Nvcl8tPkFkdmFuY2VJdGVyYXRvcihkYXRhXywgaXRlcmF0b3JfKTsKLSAgICByZXR1
cm4gdG1wOwotICB9Ci0gIFJlcGVhdGVkRmllbGRSZWZJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsK
LSAgICBpdGVyYXRvcl8gPSBhY2Nlc3Nvcl8tPkFkdmFuY2VJdGVyYXRvcihkYXRhXywgaXRlcmF0
b3JfKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSAgSXRlcmF0b3JWYWx1ZVR5cGUgb3BlcmF0
b3IqKCkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJdGVyYXRvclZhbHVlVHlwZT4o
Ci0gICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBBY2Nlc3NvclZhbHVlVHlwZSo+KAotICAgICAg
ICAgICAgYWNjZXNzb3JfLT5HZXRJdGVyYXRvclZhbHVlKAotICAgICAgICAgICAgICAgIGRhdGFf
LCBpdGVyYXRvcl8sIHNjcmF0Y2hfc3BhY2VfLmdldCgpKSkpOwotICB9Ci0gIEl0ZXJhdG9yUG9p
bnRlclR5cGUgb3BlcmF0b3ItPigpIGNvbnN0IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SXRl
cmF0b3JQb2ludGVyVHlwZT4oCi0gICAgICAgIGFjY2Vzc29yXy0+R2V0SXRlcmF0b3JWYWx1ZSgK
LSAgICAgICAgICAgIGRhdGFfLCBpdGVyYXRvcl8sIHNjcmF0Y2hfc3BhY2VfLmdldCgpKSk7Ci0g
IH0KLSAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlcGVhdGVkRmllbGRSZWZJdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0IHsKLSAgICBhc3NlcnQoZGF0YV8gPT0gb3RoZXIuZGF0YV8pOwotICAgIGFzc2Vy
dChhY2Nlc3Nvcl8gPT0gb3RoZXIuYWNjZXNzb3JfKTsKLSAgICByZXR1cm4gIWFjY2Vzc29yXy0+
RXF1YWxzSXRlcmF0b3IoZGF0YV8sIGl0ZXJhdG9yXywgb3RoZXIuaXRlcmF0b3JfKTsKLSAgfQot
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgewotICAgIHJldHVybiAhdGhpcy0+b3BlcmF0b3IhPShvdGhlcik7Ci0gIH0KLQotICBS
ZXBlYXRlZEZpZWxkUmVmSXRlcmF0b3IoY29uc3QgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yJiBv
dGhlcikKLSAgICAgIDogZGF0YV8ob3RoZXIuZGF0YV8pLCBhY2Nlc3Nvcl8ob3RoZXIuYWNjZXNz
b3JfKSwKLSAgICAgICAgaXRlcmF0b3JfKGFjY2Vzc29yXy0+Q29weUl0ZXJhdG9yKGRhdGFfLCBv
dGhlci5pdGVyYXRvcl8pKSB7Ci0gIH0KLSAgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yJiBvcGVy
YXRvcj0oY29uc3QgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yJiBvdGhlcikgewotICAgIGlmICh0
aGlzICE9ICZvdGhlcikgewotICAgICAgYWNjZXNzb3JfLT5EZWxldGVJdGVyYXRvcihkYXRhXywg
aXRlcmF0b3JfKTsKLSAgICAgIGRhdGFfID0gb3RoZXIuZGF0YV87Ci0gICAgICBhY2Nlc3Nvcl8g
PSBvdGhlci5hY2Nlc3Nvcl87Ci0gICAgICBpdGVyYXRvcl8gPSBhY2Nlc3Nvcl8tPkNvcHlJdGVy
YXRvcihkYXRhXywgb3RoZXIuaXRlcmF0b3JfKTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwot
ICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGNvbnN0IHZvaWQqIGRhdGFfOwotICBjb25zdCBSZXBlYXRl
ZEZpZWxkQWNjZXNzb3IqIGFjY2Vzc29yXzsKLSAgdm9pZCogaXRlcmF0b3JfOwotICBnb29nbGU6
OnByb3RvYnVmOjpzY29wZWRfcHRyPEFjY2Vzc29yVmFsdWVUeXBlPiBzY3JhdGNoX3NwYWNlXzsK
LX07Ci0KLS8vIFR5cGVUcmFpdHMgdGhhdCBtYXBzIHRoZSB0eXBlIHBhcmFtZXRlciBUIG9mIFJl
cGVhdGVkRmllbGRSZWYgb3IKLS8vIE11dGFibGVSZXBlYXRlZEZpZWxkUmVmIHRvIGNvcnJlc3Bv
bmRpbmcgaXRlcmF0b3IgdHlwZSwKLS8vIFJlcGVhdGVkRmllbGRBY2Nlc3NvciB0eXBlLCBldGMu
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IFByaW1pdGl2ZVRyYWl0cyB7Ci0gIHN0YXRp
YyBjb25zdCBib29sIGlzX3ByaW1pdGl2ZSA9IGZhbHNlOwotfTsKLSNkZWZpbmUgREVGSU5FX1BS
SU1JVElWRShUWVBFLCB0eXBlKSBcCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgUHJpbWl0aXZlVHJh
aXRzPHR5cGU+IHsgXAotICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfcHJpbWl0aXZlID0gdHJ1
ZTsgXAotICAgICAgc3RhdGljIGNvbnN0IEZpZWxkRGVzY3JpcHRvcjo6Q3BwVHlwZSBjcHBfdHlw
ZSA9IFwKLSAgICAgICAgICBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfICMjIFRZUEU7IFwKLSAg
ICB9OwotREVGSU5FX1BSSU1JVElWRShJTlQzMiwgaW50MzIpCi1ERUZJTkVfUFJJTUlUSVZFKFVJ
TlQzMiwgdWludDMyKQotREVGSU5FX1BSSU1JVElWRShJTlQ2NCwgaW50NjQpCi1ERUZJTkVfUFJJ
TUlUSVZFKFVJTlQ2NCwgdWludDY0KQotREVGSU5FX1BSSU1JVElWRShGTE9BVCwgZmxvYXQpCi1E
RUZJTkVfUFJJTUlUSVZFKERPVUJMRSwgZG91YmxlKQotREVGSU5FX1BSSU1JVElWRShCT09MLCBi
b29sKQotI3VuZGVmIERFRklORV9QUklNSVRJVkUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBSZWZUeXBlVHJhaXRzPAotICAgIFQsIHR5cGVuYW1lIGludGVybmFsOjplbmFibGVfaWY8
UHJpbWl0aXZlVHJhaXRzPFQ+Ojppc19wcmltaXRpdmU+Ojp0eXBlPiB7Ci0gIHR5cGVkZWYgUmVw
ZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yPFQ+IGl0ZXJhdG9yOwotICB0eXBlZGVmIFJlcGVhdGVkRmll
bGRBY2Nlc3NvciBBY2Nlc3NvclR5cGU7Ci0gIHR5cGVkZWYgVCBBY2Nlc3NvclZhbHVlVHlwZTsK
LSAgdHlwZWRlZiBUIEl0ZXJhdG9yVmFsdWVUeXBlOwotICB0eXBlZGVmIFQqIEl0ZXJhdG9yUG9p
bnRlclR5cGU7Ci0gIHN0YXRpYyBjb25zdCBGaWVsZERlc2NyaXB0b3I6OkNwcFR5cGUgY3BwX3R5
cGUgPQotICAgICAgUHJpbWl0aXZlVHJhaXRzPFQ+OjpjcHBfdHlwZTsKLSAgc3RhdGljIGNvbnN0
IERlc2NyaXB0b3IqIEdldE1lc3NhZ2VGaWVsZERlc2NyaXB0b3IoKSB7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgUmVmVHlwZVRyYWl0
czwKLSAgICBULCB0eXBlbmFtZSBpbnRlcm5hbDo6ZW5hYmxlX2lmPGlzX3Byb3RvX2VudW08VD46
OnZhbHVlPjo6dHlwZT4gewotICB0eXBlZGVmIFJlcGVhdGVkRmllbGRSZWZJdGVyYXRvcjxUPiBp
dGVyYXRvcjsKLSAgdHlwZWRlZiBSZXBlYXRlZEZpZWxkQWNjZXNzb3IgQWNjZXNzb3JUeXBlOwot
ICAvLyBXZSB1c2UgaW50MzIgZm9yIHJlcGVhdGVkIGVudW1zIGluIFJlcGVhdGVkRmllbGRBY2Nl
c3Nvci4KLSAgdHlwZWRlZiBpbnQzMiBBY2Nlc3NvclZhbHVlVHlwZTsKLSAgdHlwZWRlZiBUIEl0
ZXJhdG9yVmFsdWVUeXBlOwotICB0eXBlZGVmIGludDMyKiBJdGVyYXRvclBvaW50ZXJUeXBlOwot
ICBzdGF0aWMgY29uc3QgRmllbGREZXNjcmlwdG9yOjpDcHBUeXBlIGNwcF90eXBlID0KLSAgICAg
IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9FTlVNOwotICBzdGF0aWMgY29uc3QgRGVzY3JpcHRv
ciogR2V0TWVzc2FnZUZpZWxkRGVzY3JpcHRvcigpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBSZWZUeXBlVHJhaXRzPAotICAgIFQs
IHR5cGVuYW1lIGludGVybmFsOjplbmFibGVfaWY8aW50ZXJuYWw6OmlzX3NhbWU8c3RyaW5nLCBU
Pjo6dmFsdWU+Ojp0eXBlPiB7Ci0gIHR5cGVkZWYgUmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yPFQ+
IGl0ZXJhdG9yOwotICB0eXBlZGVmIFJlcGVhdGVkRmllbGRBY2Nlc3NvciBBY2Nlc3NvclR5cGU7
Ci0gIHR5cGVkZWYgc3RyaW5nIEFjY2Vzc29yVmFsdWVUeXBlOwotICB0eXBlZGVmIHN0cmluZyBJ
dGVyYXRvclZhbHVlVHlwZTsKLSAgdHlwZWRlZiBzdHJpbmcqIEl0ZXJhdG9yUG9pbnRlclR5cGU7
Ci0gIHN0YXRpYyBjb25zdCBGaWVsZERlc2NyaXB0b3I6OkNwcFR5cGUgY3BwX3R5cGUgPQotICAg
ICAgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzsKLSAgc3RhdGljIGNvbnN0IERlc2Ny
aXB0b3IqIEdldE1lc3NhZ2VGaWVsZERlc2NyaXB0b3IoKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgTWVzc2FnZURlc2NyaXB0b3JH
ZXR0ZXIgewotICBzdGF0aWMgY29uc3QgRGVzY3JpcHRvciogZ2V0KCkgewotICAgIHJldHVybiBU
OjpkZWZhdWx0X2luc3RhbmNlKCkuR2V0RGVzY3JpcHRvcigpOwotICB9Ci19OwotdGVtcGxhdGU8
Pgotc3RydWN0IE1lc3NhZ2VEZXNjcmlwdG9yR2V0dGVyPE1lc3NhZ2U+IHsKLSAgc3RhdGljIGNv
bnN0IERlc2NyaXB0b3IqIGdldCgpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBSZWZUeXBlVHJhaXRzPAotICAgIFQsIHR5cGVuYW1l
IGludGVybmFsOjplbmFibGVfaWY8aW50ZXJuYWw6OmlzX2Jhc2Vfb2Y8TWVzc2FnZSwgVD46OnZh
bHVlPjo6dHlwZT4gewotICB0eXBlZGVmIFJlcGVhdGVkRmllbGRSZWZJdGVyYXRvcjxUPiBpdGVy
YXRvcjsKLSAgdHlwZWRlZiBSZXBlYXRlZEZpZWxkQWNjZXNzb3IgQWNjZXNzb3JUeXBlOwotICB0
eXBlZGVmIE1lc3NhZ2UgQWNjZXNzb3JWYWx1ZVR5cGU7Ci0gIHR5cGVkZWYgY29uc3QgVCYgSXRl
cmF0b3JWYWx1ZVR5cGU7Ci0gIHR5cGVkZWYgY29uc3QgVCogSXRlcmF0b3JQb2ludGVyVHlwZTsK
LSAgc3RhdGljIGNvbnN0IEZpZWxkRGVzY3JpcHRvcjo6Q3BwVHlwZSBjcHBfdHlwZSA9Ci0gICAg
ICBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRTsKLSAgc3RhdGljIGNvbnN0IERlc2Ny
aXB0b3IqIEdldE1lc3NhZ2VGaWVsZERlc2NyaXB0b3IoKSB7Ci0gICAgcmV0dXJuIE1lc3NhZ2VE
ZXNjcmlwdG9yR2V0dGVyPFQ+OjpnZXQoKTsKLSAgfQotfTsKLX0gIC8vIG5hbWVzcGFjZSBpbnRl
cm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0j
ZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9SRVBFQVRFRF9GSUVMRF9SRUZMRUNUSU9OX0hfXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkX3JlZmxlY3Rpb25f
dW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGRfcmVmbGVjdGlv
bl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNlYmU1Y2UzMzgz
YzBjN2Y5NGJhZjFkM2Q4N2Q3YjRmMGRmNjA2OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGRfcmVm
bGVjdGlvbl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDcwNiArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiB0Z3NAZ29vZ2xlLmNv
bSAoVG9tIFN6eW1hbnNraSkKLS8vCi0vLyBUZXN0IHJlZmxlY3Rpb24gbWV0aG9kcyBmb3IgYWdn
cmVnYXRlIGFjY2VzcyB0byBSZXBlYXRlZFtQdHJdRmllbGRzLgotLy8gVGhpcyB0ZXN0IHByb3Rv
MiBtZXRob2RzIG9uIGEgcHJvdG8yIGxheW91dC4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9jYXN0cy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdw
cmludGYuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZHluYW1pY19tZXNzYWdlLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3Rlc3RfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZWZsZWN0
aW9uLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1u
YW1lc3BhY2UgcHJvdG9idWYgewotCi11c2luZyB1bml0dGVzdDo6Rm9yZWlnbk1lc3NhZ2U7Ci11
c2luZyB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOwotdXNpbmcgdW5pdHRlc3Q6OlRlc3RBbGxFeHRl
bnNpb25zOwotCi1uYW1lc3BhY2UgewotCi1zdGF0aWMgaW50IEZ1bmMoaW50IGksIGludCBqKSB7
Ci0gIHJldHVybiBpICogajsKLX0KLQotc3RhdGljIHN0cmluZyBTdHJGdW5jKGludCBpLCBpbnQg
aikgewotICBzdHJpbmcgc3RyOwotICBTU3RyaW5nUHJpbnRmKCZzdHIsICIlZCIsIEZ1bmMoaSwg
NCkpOwotICByZXR1cm4gc3RyOwotfQotCi1URVNUKFJlcGVhdGVkRmllbGRSZWZsZWN0aW9uVGVz
dCwgUmVndWxhckZpZWxkcykgewotICBUZXN0QWxsVHlwZXMgbWVzc2FnZTsKLSAgY29uc3QgUmVm
bGVjdGlvbiogcmVmbCA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotICBjb25zdCBEZXNjcmlw
dG9yKiBkZXNjID0gbWVzc2FnZS5HZXREZXNjcmlwdG9yKCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCAxMDsgKytpKSB7Ci0gICAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfaW50MzIoRnVuYyhpLCAx
KSk7Ci0gICAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfZG91YmxlKEZ1bmMoaSwgMikpOwotICAgIG1l
c3NhZ2UuYWRkX3JlcGVhdGVkX3N0cmluZyhTdHJGdW5jKGksIDUpKTsKLSAgICBtZXNzYWdlLmFk
ZF9yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoKS0+c2V0X2MoRnVuYyhpLCA2KSk7Ci0gIH0KLQot
ICAvLyBHZXQgRmllbGREZXNjcmlwdG9ycyBmb3IgYWxsIHRoZSBmaWVsZHMgb2YgaW50ZXJlc3Qu
Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmRfcmVwZWF0ZWRfaW50MzIgPQotICAgICAgZGVz
Yy0+RmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9pbnQzMiIpOwotICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZkX3JlcGVhdGVkX2RvdWJsZSA9Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUo
InJlcGVhdGVkX2RvdWJsZSIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVk
X3N0cmluZyA9Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX3N0cmluZyIp
OwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSA9
Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSIp
OwotCi0gIC8vIEdldCBSZXBlYXRlZEZpZWxkIG9iamVjdHMgZm9yIGFsbCBmaWVsZHMgb2YgaW50
ZXJlc3QuCi0gIGNvbnN0IFJlcGVhdGVkRmllbGQ8aW50MzI+JiByZl9pbnQzMiA9Ci0gICAgICBy
ZWZsLT5HZXRSZXBlYXRlZEZpZWxkPGludDMyPihtZXNzYWdlLCBmZF9yZXBlYXRlZF9pbnQzMik7
Ci0gIGNvbnN0IFJlcGVhdGVkRmllbGQ8ZG91YmxlPiYgcmZfZG91YmxlID0KLSAgICAgIHJlZmwt
PkdldFJlcGVhdGVkRmllbGQ8ZG91YmxlPihtZXNzYWdlLCBmZF9yZXBlYXRlZF9kb3VibGUpOwot
Ci0gIC8vIEdldCBtdXRhYmxlIFJlcGVhdGVkRmllbGQgb2JqZWN0cyBmb3IgYWxsIGZpZWxkcyBv
ZiBpbnRlcmVzdC4KLSAgUmVwZWF0ZWRGaWVsZDxpbnQzMj4qIG1yZl9pbnQzMiA9Ci0gICAgICBy
ZWZsLT5NdXRhYmxlUmVwZWF0ZWRGaWVsZDxpbnQzMj4oJm1lc3NhZ2UsIGZkX3JlcGVhdGVkX2lu
dDMyKTsKLSAgUmVwZWF0ZWRGaWVsZDxkb3VibGU+KiBtcmZfZG91YmxlID0KLSAgICAgIHJlZmwt
Pk11dGFibGVSZXBlYXRlZEZpZWxkPGRvdWJsZT4oJm1lc3NhZ2UsIGZkX3JlcGVhdGVkX2RvdWJs
ZSk7Ci0KLSAgLy8gR2V0IFJlcGVhdGVkUHRyRmllbGQgb2JqZWN0cyBmb3IgYWxsIGZpZWxkcyBv
ZiBpbnRlcmVzdC4KLSAgY29uc3QgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+JiBycGZfc3RyaW5n
ID0KLSAgICAgIHJlZmwtPkdldFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPihtZXNzYWdlLCBmZF9y
ZXBlYXRlZF9zdHJpbmcpOwotICBjb25zdCBSZXBlYXRlZFB0ckZpZWxkPEZvcmVpZ25NZXNzYWdl
PiYgcnBmX2ZvcmVpZ25fbWVzc2FnZSA9Ci0gICAgICByZWZsLT5HZXRSZXBlYXRlZFB0ckZpZWxk
PEZvcmVpZ25NZXNzYWdlPigKLSAgICAgICAgICBtZXNzYWdlLCBmZF9yZXBlYXRlZF9mb3JlaWdu
X21lc3NhZ2UpOwotICBjb25zdCBSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+JiBycGZfbWVzc2Fn
ZSA9Ci0gICAgICByZWZsLT5HZXRSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+KAotICAgICAgICAg
IG1lc3NhZ2UsIGZkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSk7Ci0KLSAgLy8gR2V0IG11dGFi
bGUgUmVwZWF0ZWRQdHJGaWVsZCBvYmplY3RzIGZvciBhbGwgZmllbGRzIG9mIGludGVyZXN0Lgot
ICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4qIG1ycGZfc3RyaW5nID0KLSAgICAgIHJlZmwtPk11
dGFibGVSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4oJm1lc3NhZ2UsIGZkX3JlcGVhdGVkX3N0cmlu
Zyk7Ci0gIFJlcGVhdGVkUHRyRmllbGQ8Rm9yZWlnbk1lc3NhZ2U+KiBtcnBmX2ZvcmVpZ25fbWVz
c2FnZSA9Ci0gICAgICByZWZsLT5NdXRhYmxlUmVwZWF0ZWRQdHJGaWVsZDxGb3JlaWduTWVzc2Fn
ZT4oCi0gICAgICAgICAgJm1lc3NhZ2UsIGZkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSk7Ci0g
IFJlcGVhdGVkUHRyRmllbGQ8TWVzc2FnZT4qIG1ycGZfbWVzc2FnZSA9Ci0gICAgICByZWZsLT5N
dXRhYmxlUmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPigKLSAgICAgICAgICAmbWVzc2FnZSwgZmRf
cmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlKTsKLQotICAvLyBNYWtlIHN1cmUgd2UgY2FuIGRvIGdl
dHMgYW5kIHNldHMgdGhyb3VnaCB0aGUgUmVwZWF0ZWRbUHRyXUZpZWxkIG9iamVjdHMuCi0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgIC8vIENoZWNrIGdldHMgdGhyb3VnaCBj
b25zdCBvYmplY3RzLgotICAgIEVYUEVDVF9FUShyZl9pbnQzMi5HZXQoaSksIEZ1bmMoaSwgMSkp
OwotICAgIEVYUEVDVF9FUShyZl9kb3VibGUuR2V0KGkpLCBGdW5jKGksIDIpKTsKLSAgICBFWFBF
Q1RfRVEocnBmX3N0cmluZy5HZXQoaSksIFN0ckZ1bmMoaSwgNSkpOwotICAgIEVYUEVDVF9FUShy
cGZfZm9yZWlnbl9tZXNzYWdlLkdldChpKS5jKCksIEZ1bmMoaSwgNikpOwotICAgIEVYUEVDVF9F
UShkb3duX2Nhc3Q8Y29uc3QgRm9yZWlnbk1lc3NhZ2UqPigmcnBmX21lc3NhZ2UuR2V0KGkpKS0+
YygpLAotICAgICAgICAgICAgICBGdW5jKGksIDYpKTsKLQotICAgIC8vIENoZWNrIGdldHMgdGhy
b3VnaCBtdXRhYmxlIG9iamVjdHMuCi0gICAgRVhQRUNUX0VRKG1yZl9pbnQzMi0+R2V0KGkpLCBG
dW5jKGksIDEpKTsKLSAgICBFWFBFQ1RfRVEobXJmX2RvdWJsZS0+R2V0KGkpLCBGdW5jKGksIDIp
KTsKLSAgICBFWFBFQ1RfRVEobXJwZl9zdHJpbmctPkdldChpKSwgU3RyRnVuYyhpLCA1KSk7Ci0g
ICAgRVhQRUNUX0VRKG1ycGZfZm9yZWlnbl9tZXNzYWdlLT5HZXQoaSkuYygpLCBGdW5jKGksIDYp
KTsKLSAgICBFWFBFQ1RfRVEoZG93bl9jYXN0PGNvbnN0IEZvcmVpZ25NZXNzYWdlKj4oJm1ycGZf
bWVzc2FnZS0+R2V0KGkpKS0+YygpLAotICAgICAgICAgICAgICBGdW5jKGksIDYpKTsKLQotICAg
IC8vIENoZWNrIHNldHMgdGhyb3VnaCBtdXRhYmxlIG9iamVjdHMuCi0gICAgbXJmX2ludDMyLT5T
ZXQoaSwgRnVuYyhpLCAtMSkpOwotICAgIG1yZl9kb3VibGUtPlNldChpLCBGdW5jKGksIC0yKSk7
Ci0gICAgbXJwZl9zdHJpbmctPk11dGFibGUoaSktPmFzc2lnbihTdHJGdW5jKGksIC01KSk7Ci0g
ICAgbXJwZl9mb3JlaWduX21lc3NhZ2UtPk11dGFibGUoaSktPnNldF9jKEZ1bmMoaSwgLTYpKTsK
LSAgICBFWFBFQ1RfRVEobWVzc2FnZS5yZXBlYXRlZF9pbnQzMihpKSwgRnVuYyhpLCAtMSkpOwot
ICAgIEVYUEVDVF9FUShtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZShpKSwgRnVuYyhpLCAtMikpOwot
ICAgIEVYUEVDVF9FUShtZXNzYWdlLnJlcGVhdGVkX3N0cmluZyhpKSwgU3RyRnVuYyhpLCAtNSkp
OwotICAgIEVYUEVDVF9FUShtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZShpKS5jKCks
IEZ1bmMoaSwgLTYpKTsKLSAgICBkb3duX2Nhc3Q8Rm9yZWlnbk1lc3NhZ2UqPihtcnBmX21lc3Nh
Z2UtPk11dGFibGUoaSkpLT5zZXRfYyhGdW5jKGksIDcpKTsKLSAgICBFWFBFQ1RfRVEobWVzc2Fn
ZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoaSkuYygpLCBGdW5jKGksIDcpKTsKLSAgfQotCi0j
aWZkZWYgUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLSAgLy8gTWFrZSBzdXJlIHR5cGVzIGFyZSBj
aGVja2VkIGNvcnJlY3RseSBhdCBydW50aW1lLgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZk
X29wdGlvbmFsX2ludDMyID0KLSAgICAgIGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxf
aW50MzIiKTsKLSAgRVhQRUNUX0RFQVRIKHJlZmwtPkdldFJlcGVhdGVkRmllbGQ8aW50MzI+KAot
ICAgICAgbWVzc2FnZSwgZmRfb3B0aW9uYWxfaW50MzIpLCAicmVxdWlyZXMgYSByZXBlYXRlZCBm
aWVsZCIpOwotICBFWFBFQ1RfREVBVEgocmVmbC0+R2V0UmVwZWF0ZWRGaWVsZDxkb3VibGU+KAot
ICAgICAgbWVzc2FnZSwgZmRfcmVwZWF0ZWRfaW50MzIpLCAibm90IHRoZSByaWdodCB0eXBlIik7
Ci0gIEVYUEVDVF9ERUFUSChyZWZsLT5HZXRSZXBlYXRlZFB0ckZpZWxkPFRlc3RBbGxUeXBlcz4o
Ci0gICAgICBtZXNzYWdlLCBmZF9yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UpLCAid3Jvbmcgc3Vi
bWVzc2FnZSB0eXBlIik7Ci0jZW5kaWYgIC8vIFBST1RPQlVGX0hBU19ERUFUSF9URVNUCi19Ci0K
LQotVEVTVChSZXBlYXRlZEZpZWxkUmVmbGVjdGlvblRlc3QsIEV4dGVuc2lvbkZpZWxkcykgewot
ICBUZXN0QWxsRXh0ZW5zaW9ucyBleHRlbmRlZF9tZXNzYWdlOwotICBjb25zdCBSZWZsZWN0aW9u
KiByZWZsID0gZXh0ZW5kZWRfbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IERlc2Ny
aXB0b3IqIGRlc2MgPSBleHRlbmRlZF9tZXNzYWdlLkdldERlc2NyaXB0b3IoKTsKLQotICBmb3Ig
KGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICBleHRlbmRlZF9tZXNzYWdlLkFkZEV4dGVu
c2lvbigKLSAgICAgICAgdW5pdHRlc3Q6OnJlcGVhdGVkX2ludDY0X2V4dGVuc2lvbiwgRnVuYyhp
LCAxKSk7Ci0gIH0KLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVkX2ludDY0
X2V4dGVuc2lvbiA9Ci0gICAgICBkZXNjLT5maWxlKCktPkZpbmRFeHRlbnNpb25CeU5hbWUoInJl
cGVhdGVkX2ludDY0X2V4dGVuc2lvbiIpOwotICBHT09HTEVfQ0hFQ0soZmRfcmVwZWF0ZWRfaW50
NjRfZXh0ZW5zaW9uICE9IE5VTEwpOwotCi0gIGNvbnN0IFJlcGVhdGVkRmllbGQ8aW50NjQ+JiBy
Zl9pbnQ2NF9leHRlbnNpb24gPQotICAgICAgcmVmbC0+R2V0UmVwZWF0ZWRGaWVsZDxpbnQ2ND4o
ZXh0ZW5kZWRfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZk
X3JlcGVhdGVkX2ludDY0X2V4dGVuc2lvbik7Ci0KLSAgUmVwZWF0ZWRGaWVsZDxpbnQ2ND4qIG1y
Zl9pbnQ2NF9leHRlbnNpb24gPQotICAgICAgcmVmbC0+TXV0YWJsZVJlcGVhdGVkRmllbGQ8aW50
NjQ+KCZleHRlbmRlZF9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZkX3JlcGVhdGVkX2ludDY0X2V4dGVuc2lvbik7Ci0KLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCAxMDsgKytpKSB7Ci0gICAgRVhQRUNUX0VRKEZ1bmMoaSwgMSksIHJmX2ludDY0X2V4dGVu
c2lvbi5HZXQoaSkpOwotICAgIG1yZl9pbnQ2NF9leHRlbnNpb24tPlNldChpLCBGdW5jKGksIC0x
KSk7Ci0gICAgRVhQRUNUX0VRKEZ1bmMoaSwgLTEpLAotICAgICAgICBleHRlbmRlZF9tZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW50NjRfZXh0ZW5zaW9uLCBpKSk7Ci0g
IH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUmVmLCB0eXBlbmFtZSBNZXNzYWdlVHlwZSwgdHlw
ZW5hbWUgVmFsdWVUeXBlPgotdm9pZCBUZXN0UmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yKAotICAg
IGNvbnN0IFJlZiYgaGFuZGxlLCBjb25zdCBNZXNzYWdlVHlwZSYgbWVzc2FnZSwKLSAgICBWYWx1
ZVR5cGUgKE1lc3NhZ2VUeXBlOjoqR2V0RnVuYykoaW50KSBjb25zdCkgewotICBpbnQgaW5kZXgg
PSAwOwotICBmb3IgKHR5cGVuYW1lIFJlZjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYW5kbGUuYmVn
aW4oKTsKLSAgICAgICBpdCAhPSBoYW5kbGUuZW5kKCk7ICsraXQpIHsKLSAgICBFWFBFQ1RfRVEo
KG1lc3NhZ2UuKkdldEZ1bmMpKGluZGV4KSwgKml0KTsKLSAgICArK2luZGV4OwotICB9Ci0gIEVY
UEVDVF9FUShoYW5kbGUuc2l6ZSgpLCBpbmRleCk7Ci19Ci0KLVRFU1QoUmVwZWF0ZWRGaWVsZFJl
ZmxlY3Rpb25UZXN0LCBSZXBlYXRlZEZpZWxkUmVmRm9yUmVndWxhckZpZWxkcykgewotICBUZXN0
QWxsVHlwZXMgbWVzc2FnZTsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbCA9IG1lc3NhZ2UuR2V0
UmVmbGVjdGlvbigpOwotICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjID0gbWVzc2FnZS5HZXREZXNj
cmlwdG9yKCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgbWVzc2Fn
ZS5hZGRfcmVwZWF0ZWRfaW50MzIoRnVuYyhpLCAxKSk7Ci0gICAgbWVzc2FnZS5hZGRfcmVwZWF0
ZWRfZG91YmxlKEZ1bmMoaSwgMikpOwotICAgIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX3N0cmluZyhT
dHJGdW5jKGksIDUpKTsKLSAgICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2Uo
KS0+c2V0X2MoRnVuYyhpLCA2KSk7Ci0gIH0KLQotICAvLyBHZXQgRmllbGREZXNjcmlwdG9ycyBm
b3IgYWxsIHRoZSBmaWVsZHMgb2YgaW50ZXJlc3QuCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmRfcmVwZWF0ZWRfaW50MzIgPQotICAgICAgZGVzYy0+RmluZEZpZWxkQnlOYW1lKCJyZXBlYXRl
ZF9pbnQzMiIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVkX2RvdWJsZSA9
Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2RvdWJsZSIpOwotICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVkX3N0cmluZyA9Ci0gICAgICBkZXNjLT5GaW5k
RmllbGRCeU5hbWUoInJlcGVhdGVkX3N0cmluZyIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSA9Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5h
bWUoInJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSIpOwotCi0gIC8vIEdldCBSZXBlYXRlZEZpZWxk
UmVmIG9iamVjdHMgZm9yIGFsbCBmaWVsZHMgb2YgaW50ZXJlc3QuCi0gIGNvbnN0IFJlcGVhdGVk
RmllbGRSZWY8aW50MzI+IHJmX2ludDMyID0KLSAgICAgIHJlZmwtPkdldFJlcGVhdGVkRmllbGRS
ZWY8aW50MzI+KG1lc3NhZ2UsIGZkX3JlcGVhdGVkX2ludDMyKTsKLSAgY29uc3QgUmVwZWF0ZWRG
aWVsZFJlZjxkb3VibGU+IHJmX2RvdWJsZSA9Ci0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxk
UmVmPGRvdWJsZT4obWVzc2FnZSwgZmRfcmVwZWF0ZWRfZG91YmxlKTsKLSAgY29uc3QgUmVwZWF0
ZWRGaWVsZFJlZjxzdHJpbmc+IHJmX3N0cmluZyA9Ci0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZp
ZWxkUmVmPHN0cmluZz4obWVzc2FnZSwgZmRfcmVwZWF0ZWRfc3RyaW5nKTsKLSAgY29uc3QgUmVw
ZWF0ZWRGaWVsZFJlZjxGb3JlaWduTWVzc2FnZT4gcmZfZm9yZWlnbl9tZXNzYWdlID0KLSAgICAg
IHJlZmwtPkdldFJlcGVhdGVkRmllbGRSZWY8Rm9yZWlnbk1lc3NhZ2U+KAotICAgICAgICAgIG1l
c3NhZ2UsIGZkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSk7Ci0gIGNvbnN0IFJlcGVhdGVkRmll
bGRSZWY8TWVzc2FnZT4gcmZfbWVzc2FnZSA9Ci0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxk
UmVmPE1lc3NhZ2U+KAotICAgICAgICAgIG1lc3NhZ2UsIGZkX3JlcGVhdGVkX2ZvcmVpZ25fbWVz
c2FnZSk7Ci0KLSAgLy8gR2V0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVmIG9iamVjdHMgZm9yIGFs
bCBmaWVsZHMgb2YgaW50ZXJlc3QuCi0gIGNvbnN0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVmPGlu
dDMyPiBtcmZfaW50MzIgPQotICAgICAgcmVmbC0+R2V0TXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8
aW50MzI+KCZtZXNzYWdlLCBmZF9yZXBlYXRlZF9pbnQzMik7Ci0gIGNvbnN0IE11dGFibGVSZXBl
YXRlZEZpZWxkUmVmPGRvdWJsZT4gbXJmX2RvdWJsZSA9Ci0gICAgICByZWZsLT5HZXRNdXRhYmxl
UmVwZWF0ZWRGaWVsZFJlZjxkb3VibGU+KCZtZXNzYWdlLCBmZF9yZXBlYXRlZF9kb3VibGUpOwot
ICBjb25zdCBNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxzdHJpbmc+IG1yZl9zdHJpbmcgPQotICAg
ICAgcmVmbC0+R2V0TXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8c3RyaW5nPigmbWVzc2FnZSwgZmRf
cmVwZWF0ZWRfc3RyaW5nKTsKLSAgY29uc3QgTXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8Rm9yZWln
bk1lc3NhZ2U+IG1yZl9mb3JlaWduX21lc3NhZ2UgPQotICAgICAgcmVmbC0+R2V0TXV0YWJsZVJl
cGVhdGVkRmllbGRSZWY8Rm9yZWlnbk1lc3NhZ2U+KAotICAgICAgICAgICZtZXNzYWdlLCBmZF9y
ZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UpOwotICBjb25zdCBNdXRhYmxlUmVwZWF0ZWRGaWVsZFJl
ZjxNZXNzYWdlPiBtcmZfbWVzc2FnZSA9Ci0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRG
aWVsZFJlZjxNZXNzYWdlPigKLSAgICAgICAgICAmbWVzc2FnZSwgZmRfcmVwZWF0ZWRfZm9yZWln
bl9tZXNzYWdlKTsKLQotICBFWFBFQ1RfRVEobWVzc2FnZS5yZXBlYXRlZF9pbnQzMl9zaXplKCks
IHJmX2ludDMyLnNpemUoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLnJlcGVhdGVkX2ludDMyX3Np
emUoKSwgbXJmX2ludDMyLnNpemUoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLnJlcGVhdGVkX2Rv
dWJsZV9zaXplKCksIHJmX2RvdWJsZS5zaXplKCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZS5yZXBl
YXRlZF9kb3VibGVfc2l6ZSgpLCBtcmZfZG91YmxlLnNpemUoKSk7Ci0gIEVYUEVDVF9FUShtZXNz
YWdlLnJlcGVhdGVkX3N0cmluZ19zaXplKCksIHJmX3N0cmluZy5zaXplKCkpOwotICBFWFBFQ1Rf
RVEobWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdfc2l6ZSgpLCBtcmZfc3RyaW5nLnNpemUoKSk7Ci0g
IEVYUEVDVF9FUShtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9zaXplKCksCi0gICAg
ICAgICAgICByZl9mb3JlaWduX21lc3NhZ2Uuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2Uu
cmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX3NpemUoKSwKLSAgICAgICAgICAgIG1yZl9mb3JlaWdu
X21lc3NhZ2Uuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9t
ZXNzYWdlX3NpemUoKSwgcmZfbWVzc2FnZS5zaXplKCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZS5y
ZXBlYXRlZF9mb3JlaWduX21lc3NhZ2Vfc2l6ZSgpLCBtcmZfbWVzc2FnZS5zaXplKCkpOwotCi0g
IEVYUEVDVF9GQUxTRShyZl9pbnQzMi5lbXB0eSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1yZl9pbnQz
Mi5lbXB0eSgpKTsKLSAgRVhQRUNUX0ZBTFNFKHJmX2RvdWJsZS5lbXB0eSgpKTsKLSAgRVhQRUNU
X0ZBTFNFKG1yZl9kb3VibGUuZW1wdHkoKSk7Ci0gIEVYUEVDVF9GQUxTRShyZl9zdHJpbmcuZW1w
dHkoKSk7Ci0gIEVYUEVDVF9GQUxTRShtcmZfc3RyaW5nLmVtcHR5KCkpOwotICBFWFBFQ1RfRkFM
U0UocmZfZm9yZWlnbl9tZXNzYWdlLmVtcHR5KCkpOwotICBFWFBFQ1RfRkFMU0UobXJmX2ZvcmVp
Z25fbWVzc2FnZS5lbXB0eSgpKTsKLSAgRVhQRUNUX0ZBTFNFKHJmX21lc3NhZ2UuZW1wdHkoKSk7
Ci0gIEVYUEVDVF9GQUxTRShtcmZfbWVzc2FnZS5lbXB0eSgpKTsKLQotICAvLyBNYWtlIHN1cmUg
d2UgY2FuIGRvIGdldHMgYW5kIHNldHMgdGhyb3VnaCB0aGUgUmVwZWF0ZWRGaWVsZFJlZiBvYmpl
Y3RzLgotICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAvLyBDaGVjayBnZXRz
IHRocm91Z2ggY29uc3Qgb2JqZWN0cy4KLSAgICBFWFBFQ1RfRVEocmZfaW50MzIuR2V0KGkpLCBG
dW5jKGksIDEpKTsKLSAgICBFWFBFQ1RfRVEocmZfZG91YmxlLkdldChpKSwgRnVuYyhpLCAyKSk7
Ci0gICAgRVhQRUNUX0VRKHJmX3N0cmluZy5HZXQoaSksIFN0ckZ1bmMoaSwgNSkpOwotICAgIEZv
cmVpZ25NZXNzYWdlIHNjcmF0Y2hfc3BhY2U7Ci0gICAgRVhQRUNUX0VRKHJmX2ZvcmVpZ25fbWVz
c2FnZS5HZXQoaSwgJnNjcmF0Y2hfc3BhY2UpLmMoKSwgRnVuYyhpLCA2KSk7Ci0gICAgRVhQRUNU
X0VRKGRvd25fY2FzdDxjb25zdCBGb3JlaWduTWVzc2FnZSY+KAotICAgICAgICByZl9tZXNzYWdl
LkdldChpLCAmc2NyYXRjaF9zcGFjZSkpLmMoKSwgRnVuYyhpLCA2KSk7Ci0KLSAgICAvLyBDaGVj
ayBnZXRzIHRocm91Z2ggbXV0YWJsZSBvYmplY3RzLgotICAgIEVYUEVDVF9FUShtcmZfaW50MzIu
R2V0KGkpLCBGdW5jKGksIDEpKTsKLSAgICBFWFBFQ1RfRVEobXJmX2RvdWJsZS5HZXQoaSksIEZ1
bmMoaSwgMikpOwotICAgIEVYUEVDVF9FUShtcmZfc3RyaW5nLkdldChpKSwgU3RyRnVuYyhpLCA1
KSk7Ci0gICAgRVhQRUNUX0VRKG1yZl9mb3JlaWduX21lc3NhZ2UuR2V0KGksICZzY3JhdGNoX3Nw
YWNlKS5jKCksIEZ1bmMoaSwgNikpOwotICAgIEVYUEVDVF9FUShkb3duX2Nhc3Q8Y29uc3QgRm9y
ZWlnbk1lc3NhZ2UmPigKLSAgICAgICAgbXJmX21lc3NhZ2UuR2V0KGksICZzY3JhdGNoX3NwYWNl
KSkuYygpLCBGdW5jKGksIDYpKTsKLQotICAgIC8vIENoZWNrIHNldHMgdGhyb3VnaCBtdXRhYmxl
IG9iamVjdHMuCi0gICAgbXJmX2ludDMyLlNldChpLCBGdW5jKGksIC0xKSk7Ci0gICAgbXJmX2Rv
dWJsZS5TZXQoaSwgRnVuYyhpLCAtMikpOwotICAgIG1yZl9zdHJpbmcuU2V0KGksIFN0ckZ1bmMo
aSwgLTUpKTsKLSAgICBGb3JlaWduTWVzc2FnZSBmb3JlaWduX21lc3NhZ2U7Ci0gICAgZm9yZWln
bl9tZXNzYWdlLnNldF9jKEZ1bmMoaSwgLTYpKTsKLSAgICBtcmZfZm9yZWlnbl9tZXNzYWdlLlNl
dChpLCBmb3JlaWduX21lc3NhZ2UpOwotICAgIEVYUEVDVF9FUShtZXNzYWdlLnJlcGVhdGVkX2lu
dDMyKGkpLCBGdW5jKGksIC0xKSk7Ci0gICAgRVhQRUNUX0VRKG1lc3NhZ2UucmVwZWF0ZWRfZG91
YmxlKGkpLCBGdW5jKGksIC0yKSk7Ci0gICAgRVhQRUNUX0VRKG1lc3NhZ2UucmVwZWF0ZWRfc3Ry
aW5nKGkpLCBTdHJGdW5jKGksIC01KSk7Ci0gICAgRVhQRUNUX0VRKG1lc3NhZ2UucmVwZWF0ZWRf
Zm9yZWlnbl9tZXNzYWdlKGkpLmMoKSwgRnVuYyhpLCAtNikpOwotICAgIGZvcmVpZ25fbWVzc2Fn
ZS5zZXRfYyhGdW5jKGksIDcpKTsKLSAgICBtcmZfbWVzc2FnZS5TZXQoaSwgZm9yZWlnbl9tZXNz
YWdlKTsKLSAgICBFWFBFQ1RfRVEobWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoaSku
YygpLCBGdW5jKGksIDcpKTsKLSAgfQotCi0gIC8vIFRlc3QgaXRlcmF0b3JzLgotICBUZXN0UmVw
ZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yKHJmX2ludDMyLCBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZUZXN0QWxsVHlwZXM6OnJlcGVhdGVkX2ludDMyKTsKLSAgVGVzdFJl
cGVhdGVkRmllbGRSZWZJdGVyYXRvcihyZl9kb3VibGUsIG1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJlRlc3RBbGxUeXBlczo6cmVwZWF0ZWRfZG91YmxlKTsKLSAgVGVz
dFJlcGVhdGVkRmllbGRSZWZJdGVyYXRvcihyZl9zdHJpbmcsIG1lc3NhZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJlRlc3RBbGxUeXBlczo6cmVwZWF0ZWRfc3RyaW5nKTsKLQot
ICAvLyBUZXN0IGl0ZXJhdG9ycyBmb3IgbWVzc2FnZSBmaWVsZHMuCi0gIHR5cGVkZWYgUmVwZWF0
ZWRGaWVsZFJlZjxGb3JlaWduTWVzc2FnZT46Oml0ZXJhdG9yIE1lc3NhZ2VJdGVyYXRvcjsKLSAg
aW50IGluZGV4ID0gMDsKLSAgZm9yIChNZXNzYWdlSXRlcmF0b3IgaXQgPSByZl9mb3JlaWduX21l
c3NhZ2UuYmVnaW4oKTsKLSAgICAgICBpdCAhPSByZl9mb3JlaWduX21lc3NhZ2UuZW5kKCk7ICsr
aXQpIHsKLSAgICBFWFBFQ1RfRVEobWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoaW5k
ZXgpLmMoKSwgaXQtPmMoKSk7Ci0gICAgKytpbmRleDsKLSAgfQotICBFWFBFQ1RfRVEoMTAsIGlu
ZGV4KTsKLQotICAvLyBUZXN0IGl0ZXJhdG9yIG9wZXJhdG9ycyB0aGF0IGFyZSBub3QgdXN1c2Fs
bHkgdXNlZCBpbiByZWd1bGFyIGZvci1sb29wcy4KLSAgLy8gSW5jbHVkaW5nOiBwb3N0IGluY3Jl
bWVudCwgYXNzaWduLCA9PS4KLSAgTWVzc2FnZUl0ZXJhdG9yIG9sZF9pdCA9IHJmX2ZvcmVpZ25f
bWVzc2FnZS5iZWdpbigpOwotICBNZXNzYWdlSXRlcmF0b3IgbmV3X2l0ID0gb2xkX2l0Kys7Ci0g
IEVYUEVDVF9GQUxTRShvbGRfaXQgPT0gbmV3X2l0KTsKLSAgLy8gQ2hlY2sgdGhhdCBvbGRfaXQr
KyBpbmNyZW1lbnRzIG9sZF9pdCBvbmNlLgotICBmb3IgKGluZGV4ID0gMTsgb2xkX2l0ICE9IHJm
X2ZvcmVpZ25fbWVzc2FnZS5lbmQoKTsgKytvbGRfaXQsICsraW5kZXgpIHsKLSAgICBFWFBFQ1Rf
RVEobWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoaW5kZXgpLmMoKSwgb2xkX2l0LT5j
KCkpOwotICB9Ci0gIEVYUEVDVF9FUSgxMCwgaW5kZXgpOwotICAvLyBUZXN0IGFzc2lnbiBvcGVy
YXRvci4KLSAgb2xkX2l0ID0gbmV3X2l0OwotICBmb3IgKGluZGV4ID0gMDsgb2xkX2l0ICE9IHJm
X2ZvcmVpZ25fbWVzc2FnZS5lbmQoKTsgKytvbGRfaXQsICsraW5kZXgpIHsKLSAgICBFWFBFQ1Rf
RVEobWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoaW5kZXgpLmMoKSwgb2xkX2l0LT5j
KCkpOwotICB9Ci0gIEVYUEVDVF9FUSgxMCwgaW5kZXgpOwotICAvLyBDaGVjayB0aGF0IHRoZSBy
ZXR1cm5lZCB2YWx1ZSBvZiBvbGRfaXQrKyBpcyB0aGUgb25lIGJlZm9yZSBpbmNyZW1lbnQuCi0g
IGZvciAoaW5kZXggPSAwOyBuZXdfaXQgIT0gcmZfZm9yZWlnbl9tZXNzYWdlLmVuZCgpOyArK25l
d19pdCwgKytpbmRleCkgewotICAgIEVYUEVDVF9FUShtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25f
bWVzc2FnZShpbmRleCkuYygpLCBuZXdfaXQtPmMoKSk7Ci0gIH0KLSAgRVhQRUNUX0VRKDEwLCBp
bmRleCk7Ci0KLSAgLy8gVGVzdCBNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjo6QWRkKCkKLSAgbXJm
X2ludDMyLkFkZCgxMjM0KTsKLSAgbXJmX2RvdWJsZS5BZGQoMTIzNC4wKTsKLSAgbXJmX3N0cmlu
Zy5BZGQoIjEyMzQiKTsKLSAgRm9yZWlnbk1lc3NhZ2UgZm9yZWlnbl9tZXNzYWdlOwotICBmb3Jl
aWduX21lc3NhZ2Uuc2V0X2MoMTIzNCk7Ci0gIG1yZl9mb3JlaWduX21lc3NhZ2UuQWRkKGZvcmVp
Z25fbWVzc2FnZSk7Ci0gIEVYUEVDVF9FUSgxMjM0LCBtZXNzYWdlLnJlcGVhdGVkX2ludDMyKDEw
KSk7Ci0gIEVYUEVDVF9FUSgxMjM0LjAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlKDEwKSk7Ci0g
IEVYUEVDVF9FUSgiMTIzNCIsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nKDEwKSk7Ci0gIEVYUEVD
VF9FUSgxMjM0LCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgxMCkuYygpKTsKLQot
ICAvLyBUZXN0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVmOjpSZW1vdmVMYXN0KCkKLSAgbXJmX2lu
dDMyLlJlbW92ZUxhc3QoKTsKLSAgbXJmX2RvdWJsZS5SZW1vdmVMYXN0KCk7Ci0gIG1yZl9zdHJp
bmcuUmVtb3ZlTGFzdCgpOwotICBtcmZfZm9yZWlnbl9tZXNzYWdlLlJlbW92ZUxhc3QoKTsKLSAg
RVhQRUNUX0VRKDEwLCBtZXNzYWdlLnJlcGVhdGVkX2ludDMyX3NpemUoKSk7Ci0gIEVYUEVDVF9F
USgxMCwgbWVzc2FnZS5yZXBlYXRlZF9kb3VibGVfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEwLCBt
ZXNzYWdlLnJlcGVhdGVkX3N0cmluZ19zaXplKCkpOwotICBFWFBFQ1RfRVEoMTAsIG1lc3NhZ2Uu
cmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX3NpemUoKSk7Ci0KLSAgLy8gVGVzdCBNdXRhYmxlUmVw
ZWF0ZWRGaWVsZFJlZjo6U3dhcEVsZW1lbnRzKCkKLSAgbXJmX2ludDMyLlN3YXBFbGVtZW50cygw
LCA5KTsKLSAgbXJmX2RvdWJsZS5Td2FwRWxlbWVudHMoMCwgOSk7Ci0gIG1yZl9zdHJpbmcuU3dh
cEVsZW1lbnRzKDAsIDkpOwotICBtcmZfZm9yZWlnbl9tZXNzYWdlLlN3YXBFbGVtZW50cygwLCA5
KTsKLSAgRVhQRUNUX0VRKEZ1bmMoOSwgLTEpLCBtZXNzYWdlLnJlcGVhdGVkX2ludDMyKDApKTsK
LSAgRVhQRUNUX0VRKEZ1bmMoMCwgLTEpLCBtZXNzYWdlLnJlcGVhdGVkX2ludDMyKDkpKTsKLSAg
RVhQRUNUX0VRKEZ1bmMoOSwgLTIpLCBtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZSgwKSk7Ci0gIEVY
UEVDVF9FUShGdW5jKDAsIC0yKSwgbWVzc2FnZS5yZXBlYXRlZF9kb3VibGUoOSkpOwotICBFWFBF
Q1RfRVEoU3RyRnVuYyg5LCAtNSksIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nKDApKTsKLSAgRVhQ
RUNUX0VRKFN0ckZ1bmMoMCwgLTUpLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZyg5KSk7Ci0gIEVY
UEVDVF9FUShGdW5jKDksIDcpLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgwKS5j
KCkpOwotICBFWFBFQ1RfRVEoRnVuYygwLCA3KSwgbWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21l
c3NhZ2UoOSkuYygpKTsKLQotICAvLyBUZXN0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVmOjpDbGVh
cigpCi0gIG1yZl9pbnQzMi5DbGVhcigpOwotICBtcmZfZG91YmxlLkNsZWFyKCk7Ci0gIG1yZl9z
dHJpbmcuQ2xlYXIoKTsKLSAgbXJmX2ZvcmVpZ25fbWVzc2FnZS5DbGVhcigpOwotICBFWFBFQ1Rf
RVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMl9zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVz
c2FnZS5yZXBlYXRlZF9kb3VibGVfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UucmVw
ZWF0ZWRfc3RyaW5nX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX2Zv
cmVpZ25fbWVzc2FnZV9zaXplKCkpOwotCi0gIC8vIFRlc3QgKE11dGFibGUpUmVwZWF0ZWRGaWVs
ZFJlZjo6ZW1wdHkoKQotICBFWFBFQ1RfVFJVRShyZl9pbnQzMi5lbXB0eSgpKTsKLSAgRVhQRUNU
X1RSVUUobXJmX2ludDMyLmVtcHR5KCkpOwotICBFWFBFQ1RfVFJVRShyZl9kb3VibGUuZW1wdHko
KSk7Ci0gIEVYUEVDVF9UUlVFKG1yZl9kb3VibGUuZW1wdHkoKSk7Ci0gIEVYUEVDVF9UUlVFKHJm
X3N0cmluZy5lbXB0eSgpKTsKLSAgRVhQRUNUX1RSVUUobXJmX3N0cmluZy5lbXB0eSgpKTsKLSAg
RVhQRUNUX1RSVUUocmZfZm9yZWlnbl9tZXNzYWdlLmVtcHR5KCkpOwotICBFWFBFQ1RfVFJVRSht
cmZfZm9yZWlnbl9tZXNzYWdlLmVtcHR5KCkpOwotICBFWFBFQ1RfVFJVRShyZl9tZXNzYWdlLmVt
cHR5KCkpOwotICBFWFBFQ1RfVFJVRShtcmZfbWVzc2FnZS5lbXB0eSgpKTsKLQotI2lmZGVmIFBS
T1RPQlVGX0hBU19ERUFUSF9URVNUCi0KLSAgLy8gTWFrZSBzdXJlIHR5cGVzIGFyZSBjaGVja2Vk
IGNvcnJlY3RseSBhdCBydW50aW1lLgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX29wdGlv
bmFsX2ludDMyID0KLSAgICAgIGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfaW50MzIi
KTsKLSAgRVhQRUNUX0RFQVRIKHJlZmwtPkdldFJlcGVhdGVkRmllbGRSZWY8aW50MzI+KAotICAg
ICAgbWVzc2FnZSwgZmRfb3B0aW9uYWxfaW50MzIpLCAiIik7Ci0gIEVYUEVDVF9ERUFUSChyZWZs
LT5HZXRSZXBlYXRlZEZpZWxkUmVmPGRvdWJsZT4oCi0gICAgICBtZXNzYWdlLCBmZF9yZXBlYXRl
ZF9pbnQzMiksICIiKTsKLSAgRVhQRUNUX0RFQVRIKHJlZmwtPkdldFJlcGVhdGVkRmllbGRSZWY8
VGVzdEFsbFR5cGVzPigKLSAgICAgIG1lc3NhZ2UsIGZkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2Fn
ZSksICIiKTsKLQotI2VuZGlmICAvLyBQUk9UT0JVRl9IQVNfREVBVEhfVEVTVAotfQotCi1URVNU
KFJlcGVhdGVkRmllbGRSZWZsZWN0aW9uVGVzdCwgUmVwZWF0ZWRGaWVsZFJlZkZvckVudW1zKSB7
Ci0gIFRlc3RBbGxUeXBlcyBtZXNzYWdlOwotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsID0gbWVz
c2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MgPSBtZXNzYWdl
LkdldERlc2NyaXB0b3IoKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAg
ICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9uZXN0ZWRfZW51bShUZXN0QWxsVHlwZXM6OkJBUik7Ci0g
IH0KLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVkX25lc3RlZF9lbnVtID0K
LSAgICAgIGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfbmVzdGVkX2VudW0iKTsKLSAg
Y29uc3QgUmVwZWF0ZWRGaWVsZFJlZjxUZXN0QWxsVHlwZXM6Ok5lc3RlZEVudW0+IGVudW1fcmVm
ID0KLSAgICAgIHJlZmwtPkdldFJlcGVhdGVkRmllbGRSZWY8VGVzdEFsbFR5cGVzOjpOZXN0ZWRF
bnVtPigKLSAgICAgICAgICBtZXNzYWdlLCBmZF9yZXBlYXRlZF9uZXN0ZWRfZW51bSk7Ci0gIGNv
bnN0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVmPFRlc3RBbGxUeXBlczo6TmVzdGVkRW51bT4KLSAg
bXV0YWJsZV9lbnVtX3JlZiA9Ci0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJl
ZjxUZXN0QWxsVHlwZXM6Ok5lc3RlZEVudW0+KAotICAgICAgICAgICZtZXNzYWdlLCBmZF9yZXBl
YXRlZF9uZXN0ZWRfZW51bSk7Ci0gIGNvbnN0IFJlcGVhdGVkRmllbGRSZWY8aW50MzI+IGludDMy
X3JlZiA9Ci0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVmPGludDMyPigKLSAgICAgICAg
ICBtZXNzYWdlLCBmZF9yZXBlYXRlZF9uZXN0ZWRfZW51bSk7Ci0gIGNvbnN0IE11dGFibGVSZXBl
YXRlZEZpZWxkUmVmPGludDMyPiBtdXRhYmxlX2ludDMyX3JlZiA9Ci0gICAgICByZWZsLT5HZXRN
dXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxpbnQzMj4oCi0gICAgICAgICAgJm1lc3NhZ2UsIGZkX3Jl
cGVhdGVkX25lc3RlZF9lbnVtKTsKLQotICBFWFBFQ1RfRVEobWVzc2FnZS5yZXBlYXRlZF9uZXN0
ZWRfZW51bV9zaXplKCksIGVudW1fcmVmLnNpemUoKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLnJl
cGVhdGVkX25lc3RlZF9lbnVtX3NpemUoKSwgbXV0YWJsZV9lbnVtX3JlZi5zaXplKCkpOwotICBF
WFBFQ1RfRVEobWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bV9zaXplKCksIGludDMyX3JlZi5z
aXplKCkpOwotICBFWFBFQ1RfRVEobWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bV9zaXplKCks
IG11dGFibGVfaW50MzJfcmVmLnNpemUoKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKGVudW1fcmVmLmVt
cHR5KCkpOwotICBFWFBFQ1RfRkFMU0UobXV0YWJsZV9lbnVtX3JlZi5lbXB0eSgpKTsKLSAgRVhQ
RUNUX0ZBTFNFKGludDMyX3JlZi5lbXB0eSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG11dGFibGVfaW50
MzJfcmVmLmVtcHR5KCkpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAg
IEVYUEVDVF9FUShUZXN0QWxsVHlwZXM6OkJBUiwgZW51bV9yZWYuR2V0KGkpKTsKLSAgICBFWFBF
Q1RfRVEoVGVzdEFsbFR5cGVzOjpCQVIsIG11dGFibGVfZW51bV9yZWYuR2V0KGkpKTsKLSAgICBt
dXRhYmxlX2VudW1fcmVmLlNldChpLCBUZXN0QWxsVHlwZXM6OkJBWik7Ci0gICAgRVhQRUNUX0VR
KFRlc3RBbGxUeXBlczo6QkFaLCBlbnVtX3JlZi5HZXQoaSkpOwotICAgIEVYUEVDVF9FUShUZXN0
QWxsVHlwZXM6OkJBWiwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bShpKSk7Ci0KLSAgICBt
ZXNzYWdlLnNldF9yZXBlYXRlZF9uZXN0ZWRfZW51bShpLCBUZXN0QWxsVHlwZXM6OkJBUik7Ci0g
ICAgRVhQRUNUX0VRKFRlc3RBbGxUeXBlczo6QkFSLCBpbnQzMl9yZWYuR2V0KGkpKTsKLSAgICBF
WFBFQ1RfRVEoVGVzdEFsbFR5cGVzOjpCQVIsIG11dGFibGVfaW50MzJfcmVmLkdldChpKSk7Ci0g
ICAgbXV0YWJsZV9pbnQzMl9yZWYuU2V0KGksIFRlc3RBbGxUeXBlczo6QkFaKTsKLSAgICBFWFBF
Q1RfRVEoVGVzdEFsbFR5cGVzOjpCQVosIGludDMyX3JlZi5HZXQoaSkpOwotICAgIEVYUEVDVF9F
UShUZXN0QWxsVHlwZXM6OkJBWiwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bShpKSk7Ci0g
IH0KLQotICBUZXN0UmVwZWF0ZWRGaWVsZFJlZkl0ZXJhdG9yKGVudW1fcmVmLCBtZXNzYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUZXN0QWxsVHlwZXM6OnJlcGVhdGVkX25l
c3RlZF9lbnVtKTsKLSAgVGVzdFJlcGVhdGVkRmllbGRSZWZJdGVyYXRvcihpbnQzMl9yZWYsIG1l
c3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRlc3RBbGxUeXBlczo6cmVw
ZWF0ZWRfbmVzdGVkX2VudW0pOwotCi0gIC8vIFRlc3QgQWRkKCkKLSAgbXV0YWJsZV9lbnVtX3Jl
Zi5BZGQoVGVzdEFsbFR5cGVzOjpGT08pOwotICBFWFBFQ1RfRVEoVGVzdEFsbFR5cGVzOjpGT08s
IG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW0oMTApKTsKLSAgbXV0YWJsZV9pbnQzMl9yZWYu
QWRkKFRlc3RBbGxUeXBlczo6QkFSKTsKLSAgRVhQRUNUX0VRKFRlc3RBbGxUeXBlczo6QkFSLCBt
ZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9lbnVtKDExKSk7Ci0KLSAgLy8gVGVzdCBSZW1vdmVMYXN0
KCkKLSAgbXV0YWJsZV9lbnVtX3JlZi5SZW1vdmVMYXN0KCk7Ci0gIEVYUEVDVF9FUSgxMSwgbWVz
c2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bV9zaXplKCkpOwotICBtdXRhYmxlX2ludDMyX3JlZi5S
ZW1vdmVMYXN0KCk7Ci0gIEVYUEVDVF9FUSgxMCwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51
bV9zaXplKCkpOwotCi0gIC8vIFRlc3QgU3dhcEVsZW1lbnRzKCkKLSAgbXV0YWJsZV9lbnVtX3Jl
Zi5TZXQoMCwgVGVzdEFsbFR5cGVzOjpCQVIpOwotICBtdXRhYmxlX2VudW1fcmVmLlNldCg5LCBU
ZXN0QWxsVHlwZXM6OkJBWik7Ci0gIG11dGFibGVfZW51bV9yZWYuU3dhcEVsZW1lbnRzKDAsIDkp
OwotICBFWFBFQ1RfRVEoVGVzdEFsbFR5cGVzOjpCQVosIGVudW1fcmVmLkdldCgwKSk7Ci0gIEVY
UEVDVF9FUShUZXN0QWxsVHlwZXM6OkJBUiwgZW51bV9yZWYuR2V0KDkpKTsKLSAgbXV0YWJsZV9p
bnQzMl9yZWYuU3dhcEVsZW1lbnRzKDAsIDkpOwotICBFWFBFQ1RfRVEoVGVzdEFsbFR5cGVzOjpC
QVIsIGVudW1fcmVmLkdldCgwKSk7Ci0gIEVYUEVDVF9FUShUZXN0QWxsVHlwZXM6OkJBWiwgZW51
bV9yZWYuR2V0KDkpKTsKLQotICAvLyBUZXN0IENsZWFyKCkKLSAgbXV0YWJsZV9lbnVtX3JlZi5D
bGVhcigpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bV9zaXpl
KCkpOwotICBtdXRhYmxlX2VudW1fcmVmLkFkZChUZXN0QWxsVHlwZXM6OkZPTyk7Ci0gIEVYUEVD
VF9FUSgxLCBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9lbnVtX3NpemUoKSk7Ci0gIG11dGFibGVf
aW50MzJfcmVmLkNsZWFyKCk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX25lc3Rl
ZF9lbnVtX3NpemUoKSk7Ci0KLSAgLy8gVGVzdCBlbXB0eSgpCi0gIEVYUEVDVF9UUlVFKGVudW1f
cmVmLmVtcHR5KCkpOwotICBFWFBFQ1RfVFJVRShtdXRhYmxlX2VudW1fcmVmLmVtcHR5KCkpOwot
ICBFWFBFQ1RfVFJVRShpbnQzMl9yZWYuZW1wdHkoKSk7Ci0gIEVYUEVDVF9UUlVFKG11dGFibGVf
aW50MzJfcmVmLmVtcHR5KCkpOwotfQotCi1URVNUKFJlcGVhdGVkRmllbGRSZWZsZWN0aW9uVGVz
dCwgUmVwZWF0ZWRGaWVsZFJlZkZvckV4dGVuc2lvbkZpZWxkcykgewotICBUZXN0QWxsRXh0ZW5z
aW9ucyBleHRlbmRlZF9tZXNzYWdlOwotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsID0gZXh0ZW5k
ZWRfbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2MgPSBl
eHRlbmRlZF9tZXNzYWdlLkdldERlc2NyaXB0b3IoKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8
IDEwOyArK2kpIHsKLSAgICBleHRlbmRlZF9tZXNzYWdlLkFkZEV4dGVuc2lvbigKLSAgICAgICAg
dW5pdHRlc3Q6OnJlcGVhdGVkX2ludDY0X2V4dGVuc2lvbiwgRnVuYyhpLCAxKSk7Ci0gIH0KLQot
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVkX2ludDY0X2V4dGVuc2lvbiA9Ci0g
ICAgICBkZXNjLT5maWxlKCktPkZpbmRFeHRlbnNpb25CeU5hbWUoInJlcGVhdGVkX2ludDY0X2V4
dGVuc2lvbiIpOwotICBHT09HTEVfQ0hFQ0soZmRfcmVwZWF0ZWRfaW50NjRfZXh0ZW5zaW9uICE9
IE5VTEwpOwotCi0gIGNvbnN0IFJlcGVhdGVkRmllbGRSZWY8aW50NjQ+IHJmX2ludDY0X2V4dGVu
c2lvbiA9Ci0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVmPGludDY0PihleHRlbmRlZF9t
ZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfcmVw
ZWF0ZWRfaW50NjRfZXh0ZW5zaW9uKTsKLQotICBjb25zdCBNdXRhYmxlUmVwZWF0ZWRGaWVsZFJl
ZjxpbnQ2ND4gbXJmX2ludDY0X2V4dGVuc2lvbiA9Ci0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVw
ZWF0ZWRGaWVsZFJlZjxpbnQ2ND4oJmV4dGVuZGVkX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfcmVwZWF0ZWRfaW50NjRfZXh0ZW5z
aW9uKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICBFWFBFQ1RfRVEo
RnVuYyhpLCAxKSwgcmZfaW50NjRfZXh0ZW5zaW9uLkdldChpKSk7Ci0gICAgbXJmX2ludDY0X2V4
dGVuc2lvbi5TZXQoaSwgRnVuYyhpLCAtMSkpOwotICAgIEVYUEVDVF9FUShGdW5jKGksIC0xKSwK
LSAgICAgICAgZXh0ZW5kZWRfbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVk
X2ludDY0X2V4dGVuc2lvbiwgaSkpOwotICB9Ci19Ci0KLQotVEVTVChSZXBlYXRlZEZpZWxkUmVm
bGVjdGlvblRlc3QsIFJlcGVhdGVkRmllbGRSZWZNZXJnZUZyb21BbmRTd2FwKSB7Ci0gIC8vIFNl
dC11cCBtZXNzYWdlIGNvbnRlbnQuCi0gIFRlc3RBbGxUeXBlcyBtMCwgbTEsIG0yOwotICBmb3Ig
KGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICBtMC5hZGRfcmVwZWF0ZWRfaW50MzIoRnVu
YyhpLCAxKSk7Ci0gICAgbTAuYWRkX3JlcGVhdGVkX2RvdWJsZShGdW5jKGksIDIpKTsKLSAgICBt
MC5hZGRfcmVwZWF0ZWRfc3RyaW5nKFN0ckZ1bmMoaSwgNSkpOwotICAgIG0wLmFkZF9yZXBlYXRl
ZF9mb3JlaWduX21lc3NhZ2UoKS0+c2V0X2MoRnVuYyhpLCA2KSk7Ci0gICAgbTAuYWRkX3JlcGVh
dGVkX25lc3RlZF9lbnVtKFRlc3RBbGxUeXBlczo6Rk9PKTsKLSAgICBtMS5hZGRfcmVwZWF0ZWRf
aW50MzIoRnVuYyhpLCAxMSkpOwotICAgIG0xLmFkZF9yZXBlYXRlZF9kb3VibGUoRnVuYyhpLCAx
MikpOwotICAgIG0xLmFkZF9yZXBlYXRlZF9zdHJpbmcoU3RyRnVuYyhpLCAxNSkpOwotICAgIG0x
LmFkZF9yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoKS0+c2V0X2MoRnVuYyhpLCAxNikpOwotICAg
IG0xLmFkZF9yZXBlYXRlZF9uZXN0ZWRfZW51bShUZXN0QWxsVHlwZXM6OkJBUik7Ci0gICAgbTIu
YWRkX3JlcGVhdGVkX2ludDMyKEZ1bmMoaSwgMjEpKTsKLSAgICBtMi5hZGRfcmVwZWF0ZWRfZG91
YmxlKEZ1bmMoaSwgMjIpKTsKLSAgICBtMi5hZGRfcmVwZWF0ZWRfc3RyaW5nKFN0ckZ1bmMoaSwg
MjUpKTsKLSAgICBtMi5hZGRfcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlKCktPnNldF9jKEZ1bmMo
aSwgMjYpKTsKLSAgICBtMi5hZGRfcmVwZWF0ZWRfbmVzdGVkX2VudW0oVGVzdEFsbFR5cGVzOjpC
QVopOwotICB9Ci0KLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbCA9IG0wLkdldFJlZmxlY3Rpb24o
KTsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzYyA9IG0wLkdldERlc2NyaXB0b3IoKTsKLQotICAv
LyBHZXQgRmllbGREZXNjcmlwdG9ycyBmb3IgYWxsIHRoZSBmaWVsZHMgb2YgaW50ZXJlc3QuCi0g
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmRfcmVwZWF0ZWRfaW50MzIgPQotICAgICAgZGVzYy0+
RmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9pbnQzMiIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZkX3JlcGVhdGVkX2RvdWJsZSA9Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoInJl
cGVhdGVkX2RvdWJsZSIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVkX3N0
cmluZyA9Ci0gICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX3N0cmluZyIpOwot
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSA9Ci0g
ICAgICBkZXNjLT5GaW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSIpOwot
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZkX3JlcGVhdGVkX25lc3RlZF9lbnVtID0KLSAgICAg
IGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfbmVzdGVkX2VudW0iKTsKLQotICAvLyBH
ZXQgTXV0YWJsZVJlcGVhdGVkRmllbGRSZWYgb2JqZWN0cyBmb3IgYWxsIGZpZWxkcyBvZiBpbnRl
cmVzdC4KLSAgY29uc3QgTXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8aW50MzI+IG1yZl9pbnQzMiA9
Ci0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxpbnQzMj4oJm0wLCBmZF9y
ZXBlYXRlZF9pbnQzMik7Ci0gIGNvbnN0IE11dGFibGVSZXBlYXRlZEZpZWxkUmVmPGRvdWJsZT4g
bXJmX2RvdWJsZSA9Ci0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxkb3Vi
bGU+KCZtMCwgZmRfcmVwZWF0ZWRfZG91YmxlKTsKLSAgY29uc3QgTXV0YWJsZVJlcGVhdGVkRmll
bGRSZWY8c3RyaW5nPiBtcmZfc3RyaW5nID0KLSAgICAgIHJlZmwtPkdldE11dGFibGVSZXBlYXRl
ZEZpZWxkUmVmPHN0cmluZz4oJm0wLCBmZF9yZXBlYXRlZF9zdHJpbmcpOwotICBjb25zdCBNdXRh
YmxlUmVwZWF0ZWRGaWVsZFJlZjxGb3JlaWduTWVzc2FnZT4gbXJmX2ZvcmVpZ25fbWVzc2FnZSA9
Ci0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxGb3JlaWduTWVzc2FnZT4o
Ci0gICAgICAgICAgJm0wLCBmZF9yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UpOwotICBjb25zdCBN
dXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxUZXN0QWxsVHlwZXM6Ok5lc3RlZEVudW0+Ci0gIG1yZl9u
ZXN0ZWRfZW51bSA9Ci0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxUZXN0
QWxsVHlwZXM6Ok5lc3RlZEVudW0+KAotICAgICAgICAgICZtMCwgZmRfcmVwZWF0ZWRfbmVzdGVk
X2VudW0pOwotCi0gIC8vIFRlc3QgTXV0YWJsZVJlcGVhdGVkUmVmOjpDb3B5RnJvbQotICBtcmZf
aW50MzIuQ29weUZyb20oCi0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVmPGludDMyPiht
MSwgZmRfcmVwZWF0ZWRfaW50MzIpKTsKLSAgbXJmX2RvdWJsZS5Db3B5RnJvbSgKLSAgICAgIHJl
ZmwtPkdldFJlcGVhdGVkRmllbGRSZWY8ZG91YmxlPihtMSwgZmRfcmVwZWF0ZWRfZG91YmxlKSk7
Ci0gIG1yZl9zdHJpbmcuQ29weUZyb20oCi0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVm
PHN0cmluZz4obTEsIGZkX3JlcGVhdGVkX3N0cmluZykpOwotICBtcmZfZm9yZWlnbl9tZXNzYWdl
LkNvcHlGcm9tKAotICAgICAgcmVmbC0+R2V0UmVwZWF0ZWRGaWVsZFJlZjxGb3JlaWduTWVzc2Fn
ZT4oCi0gICAgICAgICAgbTEsIGZkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSkpOwotICBtcmZf
bmVzdGVkX2VudW0uQ29weUZyb20oCi0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVmPFRl
c3RBbGxUeXBlczo6TmVzdGVkRW51bT4oCi0gICAgICAgICAgbTEsIGZkX3JlcGVhdGVkX25lc3Rl
ZF9lbnVtKSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgIEVYUEVDVF9F
UShGdW5jKGksIDExKSwgbTAucmVwZWF0ZWRfaW50MzIoaSkpOwotICAgIEVYUEVDVF9FUShGdW5j
KGksIDEyKSwgbTAucmVwZWF0ZWRfZG91YmxlKGkpKTsKLSAgICBFWFBFQ1RfRVEoU3RyRnVuYyhp
LCAxNSksIG0wLnJlcGVhdGVkX3N0cmluZyhpKSk7Ci0gICAgRVhQRUNUX0VRKEZ1bmMoaSwgMTYp
LCBtMC5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoaSkuYygpKTsKLSAgICBFWFBFQ1RfRVEoVGVz
dEFsbFR5cGVzOjpCQVIsIG0wLnJlcGVhdGVkX25lc3RlZF9lbnVtKGkpKTsKLSAgfQotCi0gIC8v
IFRlc3QgTXV0YWJsZVJlcGVhdGVkUmVmOjpNZXJnZUZyb20KLSAgbXJmX2ludDMyLk1lcmdlRnJv
bSgKLSAgICAgIHJlZmwtPkdldFJlcGVhdGVkRmllbGRSZWY8aW50MzI+KG0yLCBmZF9yZXBlYXRl
ZF9pbnQzMikpOwotICBtcmZfZG91YmxlLk1lcmdlRnJvbSgKLSAgICAgIHJlZmwtPkdldFJlcGVh
dGVkRmllbGRSZWY8ZG91YmxlPihtMiwgZmRfcmVwZWF0ZWRfZG91YmxlKSk7Ci0gIG1yZl9zdHJp
bmcuTWVyZ2VGcm9tKAotICAgICAgcmVmbC0+R2V0UmVwZWF0ZWRGaWVsZFJlZjxzdHJpbmc+KG0y
LCBmZF9yZXBlYXRlZF9zdHJpbmcpKTsKLSAgbXJmX2ZvcmVpZ25fbWVzc2FnZS5NZXJnZUZyb20o
Ci0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVmPEZvcmVpZ25NZXNzYWdlPigKLSAgICAg
ICAgICBtMiwgZmRfcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlKSk7Ci0gIG1yZl9uZXN0ZWRfZW51
bS5NZXJnZUZyb20oCi0gICAgICByZWZsLT5HZXRSZXBlYXRlZEZpZWxkUmVmPFRlc3RBbGxUeXBl
czo6TmVzdGVkRW51bT4oCi0gICAgICAgICAgbTIsIGZkX3JlcGVhdGVkX25lc3RlZF9lbnVtKSk7
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgIEVYUEVDVF9FUShGdW5jKGks
IDIxKSwgbTAucmVwZWF0ZWRfaW50MzIoaSArIDEwKSk7Ci0gICAgRVhQRUNUX0VRKEZ1bmMoaSwg
MjIpLCBtMC5yZXBlYXRlZF9kb3VibGUoaSArIDEwKSk7Ci0gICAgRVhQRUNUX0VRKFN0ckZ1bmMo
aSwgMjUpLCBtMC5yZXBlYXRlZF9zdHJpbmcoaSArIDEwKSk7Ci0gICAgRVhQRUNUX0VRKEZ1bmMo
aSwgMjYpLCBtMC5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoaSArIDEwKS5jKCkpOwotICAgIEVY
UEVDVF9FUShUZXN0QWxsVHlwZXM6OkJBWiwgbTAucmVwZWF0ZWRfbmVzdGVkX2VudW0oaSArIDEw
KSk7Ci0gIH0KLQotICAvLyBUZXN0IE11dGFibGVSZXBlYXRlZFJlZjo6U3dhcAotICAvLyBTd2Fw
IGJldHdlZW4gbTAgYW5kIG0yLgotICBtcmZfaW50MzIuU3dhcCgKLSAgICAgIHJlZmwtPkdldE11
dGFibGVSZXBlYXRlZEZpZWxkUmVmPGludDMyPigmbTIsIGZkX3JlcGVhdGVkX2ludDMyKSk7Ci0g
IG1yZl9kb3VibGUuU3dhcCgKLSAgICAgIHJlZmwtPkdldE11dGFibGVSZXBlYXRlZEZpZWxkUmVm
PGRvdWJsZT4oJm0yLCBmZF9yZXBlYXRlZF9kb3VibGUpKTsKLSAgbXJmX3N0cmluZy5Td2FwKAot
ICAgICAgcmVmbC0+R2V0TXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8c3RyaW5nPigmbTIsIGZkX3Jl
cGVhdGVkX3N0cmluZykpOwotICBtcmZfZm9yZWlnbl9tZXNzYWdlLlN3YXAoCi0gICAgICByZWZs
LT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxGb3JlaWduTWVzc2FnZT4oCi0gICAgICAgICAg
Jm0yLCBmZF9yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UpKTsKLSAgbXJmX25lc3RlZF9lbnVtLlN3
YXAoCi0gICAgICByZWZsLT5HZXRNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxUZXN0QWxsVHlwZXM6
Ok5lc3RlZEVudW0+KAotICAgICAgICAgICZtMiwgZmRfcmVwZWF0ZWRfbmVzdGVkX2VudW0pKTsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgLy8gQ2hlY2sgdGhlIGNvbnRl
bnQgb2YgbTAuCi0gICAgRVhQRUNUX0VRKEZ1bmMoaSwgMjEpLCBtMC5yZXBlYXRlZF9pbnQzMihp
KSk7Ci0gICAgRVhQRUNUX0VRKEZ1bmMoaSwgMjIpLCBtMC5yZXBlYXRlZF9kb3VibGUoaSkpOwot
ICAgIEVYUEVDVF9FUShTdHJGdW5jKGksIDI1KSwgbTAucmVwZWF0ZWRfc3RyaW5nKGkpKTsKLSAg
ICBFWFBFQ1RfRVEoRnVuYyhpLCAyNiksIG0wLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZShpKS5j
KCkpOwotICAgIEVYUEVDVF9FUShUZXN0QWxsVHlwZXM6OkJBWiwgbTAucmVwZWF0ZWRfbmVzdGVk
X2VudW0oaSkpOwotCi0gICAgLy8gQ2hlY2sgdGhlIGNvbnRlbnQgb2YgbTIuCi0gICAgRVhQRUNU
X0VRKEZ1bmMoaSwgMTEpLCBtMi5yZXBlYXRlZF9pbnQzMihpKSk7Ci0gICAgRVhQRUNUX0VRKEZ1
bmMoaSwgMTIpLCBtMi5yZXBlYXRlZF9kb3VibGUoaSkpOwotICAgIEVYUEVDVF9FUShTdHJGdW5j
KGksIDE1KSwgbTIucmVwZWF0ZWRfc3RyaW5nKGkpKTsKLSAgICBFWFBFQ1RfRVEoRnVuYyhpLCAx
NiksIG0yLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZShpKS5jKCkpOwotICAgIEVYUEVDVF9FUShU
ZXN0QWxsVHlwZXM6OkJBUiwgbTIucmVwZWF0ZWRfbmVzdGVkX2VudW0oaSkpOwotICAgIEVYUEVD
VF9FUShGdW5jKGksIDIxKSwgbTIucmVwZWF0ZWRfaW50MzIoaSArIDEwKSk7Ci0gICAgRVhQRUNU
X0VRKEZ1bmMoaSwgMjIpLCBtMi5yZXBlYXRlZF9kb3VibGUoaSArIDEwKSk7Ci0gICAgRVhQRUNU
X0VRKFN0ckZ1bmMoaSwgMjUpLCBtMi5yZXBlYXRlZF9zdHJpbmcoaSArIDEwKSk7Ci0gICAgRVhQ
RUNUX0VRKEZ1bmMoaSwgMjYpLCBtMi5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoaSArIDEwKS5j
KCkpOwotICAgIEVYUEVDVF9FUShUZXN0QWxsVHlwZXM6OkJBWiwgbTIucmVwZWF0ZWRfbmVzdGVk
X2VudW0oaSArIDEwKSk7Ci0gIH0KLX0KLQotLy8gVGVzdCB0aGF0IEdldFJlcGVhdGVkRmllbGRS
ZWYvTXV0YWJsZVJlcGVhdGVkRmllbGRSZWYgd29ya3Mgd2l0aAotLy8gRHluYW1pY01lc3NhZ2Uu
Ci1URVNUKFJlcGVhdGVkRmllbGRSZWZsZWN0aW9uVGVzdCwgUmVwZWF0ZWRGaWVsZFJlZkR5bmFt
aWNNZXNzYWdlKSB7Ci0gIC8vIER5bmFtaWNNZXNzYWdlIHNoYXJlcyB0aGUgc2FtZSBtZW1vcnkg
bGF5b3V0IGFzIGdlbmVyYXRlZCBtZXNzYWdlCi0gIC8vIGFuZCB1c2UgdGhlIHNhbWUgR2VuZXJh
dGVkTWVzc2FnZVJlZmxlY3Rpb24gY29kZSBmb3IgcmVmbGVjdGlvbi4KLSAgLy8gQWxsIGNvZGUg
cGF0aHMgc2hvdWxkIGFscmVhZHkgYmUgY292ZXJlZCBieSB0aGUgb3RoZXIgdGVzdHMgZm9yCi0g
IC8vIGdlbmVyYXRlZCBtZXNzYWdlcy4gSGVyZSB3ZSBqdXN0IHRlc3Qgb25lIGZpZWxkLgotCi0g
IGNvbnN0IERlc2NyaXB0b3IqIGRlc2MgPSBUZXN0QWxsVHlwZXM6OmRlc2NyaXB0b3IoKTsKLSAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBmZF9yZXBlYXRlZF9pbnQzMiA9Ci0gICAgICBkZXNjLT5G
aW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2ludDMyIik7Ci0KLSAgRHluYW1pY01lc3NhZ2VGYWN0
b3J5IGZhY3Rvcnk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8TWVzc2FnZT4gZHlu
YW1pY19tZXNzYWdlKGZhY3RvcnkuR2V0UHJvdG90eXBlKGRlc2MpLT5OZXcoKSk7Ci0gIGNvbnN0
IFJlZmxlY3Rpb24qIHJlZmwgPSBkeW5hbWljX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLQot
ICBNdXRhYmxlUmVwZWF0ZWRGaWVsZFJlZjxpbnQzMj4gcmZfaW50MzIgPQotICAgICAgcmVmbC0+
R2V0TXV0YWJsZVJlcGVhdGVkRmllbGRSZWY8aW50MzI+KAotICAgICAgICAgIGR5bmFtaWNfbWVz
c2FnZS5nZXQoKSwgZmRfcmVwZWF0ZWRfaW50MzIpOwotICByZl9pbnQzMi5BZGQoMTIzNCk7Ci0g
IEVYUEVDVF9FUSgxLCByZWZsLT5GaWVsZFNpemUoKmR5bmFtaWNfbWVzc2FnZSwgZmRfcmVwZWF0
ZWRfaW50MzIpKTsKLSAgRVhQRUNUX0VRKDEyMzQsIHJlZmwtPkdldFJlcGVhdGVkSW50MzIoKmR5
bmFtaWNfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmRfcmVwZWF0ZWRfaW50MzIsIDApKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZF91bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9yZXBlYXRlZF9maWVsZF91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzliMjRiMzM3NWVlMzVlZjBlZTVlODIzMzIyZjJhZTBhOGE0OThiNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
cmVwZWF0ZWRfZmllbGRfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNTY2ICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRv
bkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9j
b2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5k
IG90aGVycy4KLS8vCi0vLyBUT0RPKGtlbnRvbik6ICBJbXByb3ZlIHRoaXMgdW5pdHRlc3QgdG8g
YnJpbmcgaXQgdXAgdG8gdGhlIHN0YW5kYXJkcyBvZgotLy8gICBvdGhlciBwcm90bzIgdW5pdHRl
c3RzLgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRl
IDxsaXN0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9y
ZXBlYXRlZF9maWVsZC5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dp
bmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9n
b29nbGV0ZXN0Lmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RsX3V0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci11c2luZyBw
cm90b2J1Zl91bml0dGVzdDo6VGVzdEFsbFR5cGVzOwotCi1uYW1lc3BhY2UgcHJvdG9idWYgewot
bmFtZXNwYWNlIHsKLQotLy8gVGVzdCBvcGVyYXRpb25zIG9uIGEgc21hbGwgUmVwZWF0ZWRGaWVs
ZC4KLVRFU1QoUmVwZWF0ZWRGaWVsZCwgU21hbGwpIHsKLSAgUmVwZWF0ZWRGaWVsZDxpbnQ+IGZp
ZWxkOwotCi0gIEVYUEVDVF9UUlVFKGZpZWxkLmVtcHR5KCkpOwotICBFWFBFQ1RfRVEoZmllbGQu
c2l6ZSgpLCAwKTsKLQotICBmaWVsZC5BZGQoNSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKGZpZWxkLmVt
cHR5KCkpOwotICBFWFBFQ1RfRVEoZmllbGQuc2l6ZSgpLCAxKTsKLSAgRVhQRUNUX0VRKGZpZWxk
LkdldCgwKSwgNSk7Ci0KLSAgZmllbGQuQWRkKDQyKTsKLQotICBFWFBFQ1RfRkFMU0UoZmllbGQu
ZW1wdHkoKSk7Ci0gIEVYUEVDVF9FUShmaWVsZC5zaXplKCksIDIpOwotICBFWFBFQ1RfRVEoZmll
bGQuR2V0KDApLCA1KTsKLSAgRVhQRUNUX0VRKGZpZWxkLkdldCgxKSwgNDIpOwotCi0gIGZpZWxk
LlNldCgxLCAyMyk7Ci0KLSAgRVhQRUNUX0ZBTFNFKGZpZWxkLmVtcHR5KCkpOwotICBFWFBFQ1Rf
RVEoZmllbGQuc2l6ZSgpLCAyKTsKLSAgRVhQRUNUX0VRKGZpZWxkLkdldCgwKSwgNSk7Ci0gIEVY
UEVDVF9FUShmaWVsZC5HZXQoMSksIDIzKTsKLQotICBmaWVsZC5SZW1vdmVMYXN0KCk7Ci0KLSAg
RVhQRUNUX0ZBTFNFKGZpZWxkLmVtcHR5KCkpOwotICBFWFBFQ1RfRVEoZmllbGQuc2l6ZSgpLCAx
KTsKLSAgRVhQRUNUX0VRKGZpZWxkLkdldCgwKSwgNSk7Ci0KLSAgZmllbGQuQ2xlYXIoKTsKLQot
ICBFWFBFQ1RfVFJVRShmaWVsZC5lbXB0eSgpKTsKLSAgRVhQRUNUX0VRKGZpZWxkLnNpemUoKSwg
MCk7Ci0gIC8vIEFkZGl0aW9uYWwgYnl0ZXMgYXJlIGZvciAnc3RydWN0IFJlcCcgaGVhZGVyLgot
ICBpbnQgZXhwZWN0ZWRfdXNhZ2UgPSA0ICogc2l6ZW9mKGludCkgKyBzaXplb2YoQXJlbmEqKTsK
LSAgRVhQRUNUX0VRKGZpZWxkLlNwYWNlVXNlZEV4Y2x1ZGluZ1NlbGYoKSwgZXhwZWN0ZWRfdXNh
Z2UpOwotfQotCi0KLS8vIFRlc3Qgb3BlcmF0aW9ucyBvbiBhIFJlcGVhdGVkRmllbGQgd2hpY2gg
aXMgbGFyZ2UgZW5vdWdoIHRvIGFsbG9jYXRlIGEKLS8vIHNlcGFyYXRlIGFycmF5LgotVEVTVChS
ZXBlYXRlZEZpZWxkLCBMYXJnZSkgewotICBSZXBlYXRlZEZpZWxkPGludD4gZmllbGQ7Ci0KLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgZmllbGQuQWRkKGkgKiBpKTsKLSAg
fQotCi0gIEVYUEVDVF9GQUxTRShmaWVsZC5lbXB0eSgpKTsKLSAgRVhQRUNUX0VRKGZpZWxkLnNp
emUoKSwgMTYpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgIEVYUEVD
VF9FUShmaWVsZC5HZXQoaSksIGkgKiBpKTsKLSAgfQotCi0gIGludCBleHBlY3RlZF91c2FnZSA9
IDE2ICogc2l6ZW9mKGludCk7Ci0gIEVYUEVDVF9HRShmaWVsZC5TcGFjZVVzZWRFeGNsdWRpbmdT
ZWxmKCksIGV4cGVjdGVkX3VzYWdlKTsKLX0KLQotLy8gVGVzdCBzd2FwcGluZyBiZXR3ZWVuIHZh
cmlvdXMgdHlwZXMgb2YgUmVwZWF0ZWRGaWVsZHMuCi1URVNUKFJlcGVhdGVkRmllbGQsIFN3YXBT
bWFsbFNtYWxsKSB7Ci0gIFJlcGVhdGVkRmllbGQ8aW50PiBmaWVsZDE7Ci0gIFJlcGVhdGVkRmll
bGQ8aW50PiBmaWVsZDI7Ci0KLSAgZmllbGQxLkFkZCg1KTsKLSAgZmllbGQxLkFkZCg0Mik7Ci0K
LSAgRVhQRUNUX0ZBTFNFKGZpZWxkMS5lbXB0eSgpKTsKLSAgRVhQRUNUX0VRKGZpZWxkMS5zaXpl
KCksIDIpOwotICBFWFBFQ1RfRVEoZmllbGQxLkdldCgwKSwgNSk7Ci0gIEVYUEVDVF9FUShmaWVs
ZDEuR2V0KDEpLCA0Mik7Ci0KLSAgRVhQRUNUX1RSVUUoZmllbGQyLmVtcHR5KCkpOwotICBFWFBF
Q1RfRVEoZmllbGQyLnNpemUoKSwgMCk7Ci0KLSAgZmllbGQxLlN3YXAoJmZpZWxkMik7Ci0KLSAg
RVhQRUNUX1RSVUUoZmllbGQxLmVtcHR5KCkpOwotICBFWFBFQ1RfRVEoZmllbGQxLnNpemUoKSwg
MCk7Ci0KLSAgRVhQRUNUX0ZBTFNFKGZpZWxkMi5lbXB0eSgpKTsKLSAgRVhQRUNUX0VRKGZpZWxk
Mi5zaXplKCksIDIpOwotICBFWFBFQ1RfRVEoZmllbGQyLkdldCgwKSwgNSk7Ci0gIEVYUEVDVF9F
UShmaWVsZDIuR2V0KDEpLCA0Mik7Ci19Ci0KLVRFU1QoUmVwZWF0ZWRGaWVsZCwgU3dhcExhcmdl
U21hbGwpIHsKLSAgUmVwZWF0ZWRGaWVsZDxpbnQ+IGZpZWxkMTsKLSAgUmVwZWF0ZWRGaWVsZDxp
bnQ+IGZpZWxkMjsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICBmaWVs
ZDEuQWRkKGkgKiBpKTsKLSAgfQotICBmaWVsZDIuQWRkKDUpOwotICBmaWVsZDIuQWRkKDQyKTsK
LSAgZmllbGQxLlN3YXAoJmZpZWxkMik7Ci0KLSAgRVhQRUNUX0VRKGZpZWxkMS5zaXplKCksIDIp
OwotICBFWFBFQ1RfRVEoZmllbGQxLkdldCgwKSwgNSk7Ci0gIEVYUEVDVF9FUShmaWVsZDEuR2V0
KDEpLCA0Mik7Ci0gIEVYUEVDVF9FUShmaWVsZDIuc2l6ZSgpLCAxNik7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgMTY7IGkrKykgewotICAgIEVYUEVDVF9FUShmaWVsZDIuR2V0KGkpLCBpICogaSk7
Ci0gIH0KLX0KLQotVEVTVChSZXBlYXRlZEZpZWxkLCBTd2FwTGFyZ2VMYXJnZSkgewotICBSZXBl
YXRlZEZpZWxkPGludD4gZmllbGQxOwotICBSZXBlYXRlZEZpZWxkPGludD4gZmllbGQyOwotCi0g
IGZpZWxkMS5BZGQoNSk7Ci0gIGZpZWxkMS5BZGQoNDIpOwotICBmb3IgKGludCBpID0gMDsgaSA8
IDE2OyBpKyspIHsKLSAgICBmaWVsZDEuQWRkKGkpOwotICAgIGZpZWxkMi5BZGQoaSAqIGkpOwot
ICB9Ci0gIGZpZWxkMi5Td2FwKCZmaWVsZDEpOwotCi0gIEVYUEVDVF9FUShmaWVsZDEuc2l6ZSgp
LCAxNik7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgIEVYUEVDVF9FUShm
aWVsZDEuR2V0KGkpLCBpICogaSk7Ci0gIH0KLSAgRVhQRUNUX0VRKGZpZWxkMi5zaXplKCksIDE4
KTsKLSAgRVhQRUNUX0VRKGZpZWxkMi5HZXQoMCksIDUpOwotICBFWFBFQ1RfRVEoZmllbGQyLkdl
dCgxKSwgNDIpOwotICBmb3IgKGludCBpID0gMjsgaSA8IDE4OyBpKyspIHsKLSAgICBFWFBFQ1Rf
RVEoZmllbGQyLkdldChpKSwgaSAtIDIpOwotICB9Ci19Ci0KLS8vIERldGVybWluZXMgaG93IG11
Y2ggc3BhY2Ugd2FzIHJlc2VydmVkIGJ5IHRoZSBnaXZlbiBmaWVsZCBieSBhZGRpbmcgZWxlbWVu
dHMKLS8vIHRvIGl0IHVudGlsIGl0IHJlLWFsbG9jYXRlcyBpdHMgc3BhY2UuCi1zdGF0aWMgaW50
IFJlc2VydmVkU3BhY2UoUmVwZWF0ZWRGaWVsZDxpbnQ+KiBmaWVsZCkgewotICBjb25zdCBpbnQq
IHB0ciA9IGZpZWxkLT5kYXRhKCk7Ci0gIGRvIHsKLSAgICBmaWVsZC0+QWRkKDApOwotICB9IHdo
aWxlIChmaWVsZC0+ZGF0YSgpID09IHB0cik7Ci0KLSAgcmV0dXJuIGZpZWxkLT5zaXplKCkgLSAx
OwotfQotCi1URVNUKFJlcGVhdGVkRmllbGQsIFJlc2VydmVNb3JlVGhhbkRvdWJsZSkgewotICAv
LyBSZXNlcnZlIG1vcmUgdGhhbiBkb3VibGUgdGhlIHByZXZpb3VzIHNwYWNlIGluIHRoZSBmaWVs
ZCBhbmQgZXhwZWN0IHRoZQotICAvLyBmaWVsZCB0byByZXNlcnZlIGV4YWN0bHkgdGhlIGFtb3Vu
dCBzcGVjaWZpZWQuCi0gIFJlcGVhdGVkRmllbGQ8aW50PiBmaWVsZDsKLSAgZmllbGQuUmVzZXJ2
ZSgyMCk7Ci0KLSAgRVhQRUNUX0VRKDIwLCBSZXNlcnZlZFNwYWNlKCZmaWVsZCkpOwotfQotCi1U
RVNUKFJlcGVhdGVkRmllbGQsIFJlc2VydmVMZXNzVGhhbkRvdWJsZSkgewotICAvLyBSZXNlcnZl
IGxlc3MgdGhhbiBkb3VibGUgdGhlIHByZXZpb3VzIHNwYWNlIGluIHRoZSBmaWVsZCBhbmQgZXhw
ZWN0IHRoZQotICAvLyBmaWVsZCB0byBncm93IGJ5IGRvdWJsZSBpbnN0ZWFkLgotICBSZXBlYXRl
ZEZpZWxkPGludD4gZmllbGQ7Ci0gIGZpZWxkLlJlc2VydmUoMjApOwotICBmaWVsZC5SZXNlcnZl
KDMwKTsKLQotICBFWFBFQ1RfRVEoNDAsIFJlc2VydmVkU3BhY2UoJmZpZWxkKSk7Ci19Ci0KLVRF
U1QoUmVwZWF0ZWRGaWVsZCwgUmVzZXJ2ZUxlc3NUaGFuRXhpc3RpbmcpIHsKLSAgLy8gUmVzZXJ2
ZSBsZXNzIHRoYW4gdGhlIHByZXZpb3VzIHNwYWNlIGluIHRoZSBmaWVsZCBhbmQgZXhwZWN0IHRo
ZQotICAvLyBmaWVsZCB0byBub3QgcmUtYWxsb2NhdGUgYXQgYWxsLgotICBSZXBlYXRlZEZpZWxk
PGludD4gZmllbGQ7Ci0gIGZpZWxkLlJlc2VydmUoMjApOwotICBjb25zdCBpbnQqIHByZXZpb3Vz
X3B0ciA9IGZpZWxkLmRhdGEoKTsKLSAgZmllbGQuUmVzZXJ2ZSgxMCk7Ci0KLSAgRVhQRUNUX0VR
KHByZXZpb3VzX3B0ciwgZmllbGQuZGF0YSgpKTsKLSAgRVhQRUNUX0VRKDIwLCBSZXNlcnZlZFNw
YWNlKCZmaWVsZCkpOwotfQotCi1URVNUKFJlcGVhdGVkRmllbGQsIFJlc2l6ZSkgewotICBSZXBl
YXRlZEZpZWxkPGludD4gZmllbGQ7Ci0gIGZpZWxkLlJlc2l6ZSgyLCAxKTsKLSAgRVhQRUNUX0VR
KDIsIGZpZWxkLnNpemUoKSk7Ci0gIGZpZWxkLlJlc2l6ZSg1LCAyKTsKLSAgRVhQRUNUX0VRKDUs
IGZpZWxkLnNpemUoKSk7Ci0gIGZpZWxkLlJlc2l6ZSg0LCAzKTsKLSAgQVNTRVJUX0VRKDQsIGZp
ZWxkLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgxLCBmaWVsZC5HZXQoMCkpOwotICBFWFBFQ1RfRVEo
MSwgZmllbGQuR2V0KDEpKTsKLSAgRVhQRUNUX0VRKDIsIGZpZWxkLkdldCgyKSk7Ci0gIEVYUEVD
VF9FUSgyLCBmaWVsZC5HZXQoMykpOwotICBmaWVsZC5SZXNpemUoMCwgNCk7Ci0gIEVYUEVDVF9U
UlVFKGZpZWxkLmVtcHR5KCkpOwotfQotCi1URVNUKFJlcGVhdGVkRmllbGQsIE1lcmdlRnJvbSkg
ewotICBSZXBlYXRlZEZpZWxkPGludD4gc291cmNlLCBkZXN0aW5hdGlvbjsKLSAgc291cmNlLkFk
ZCg0KTsKLSAgc291cmNlLkFkZCg1KTsKLSAgZGVzdGluYXRpb24uQWRkKDEpOwotICBkZXN0aW5h
dGlvbi5BZGQoMik7Ci0gIGRlc3RpbmF0aW9uLkFkZCgzKTsKLQotICBkZXN0aW5hdGlvbi5NZXJn
ZUZyb20oc291cmNlKTsKLQotICBBU1NFUlRfRVEoNSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKLSAg
RVhQRUNUX0VRKDEsIGRlc3RpbmF0aW9uLkdldCgwKSk7Ci0gIEVYUEVDVF9FUSgyLCBkZXN0aW5h
dGlvbi5HZXQoMSkpOwotICBFWFBFQ1RfRVEoMywgZGVzdGluYXRpb24uR2V0KDIpKTsKLSAgRVhQ
RUNUX0VRKDQsIGRlc3RpbmF0aW9uLkdldCgzKSk7Ci0gIEVYUEVDVF9FUSg1LCBkZXN0aW5hdGlv
bi5HZXQoNCkpOwotfQotCi0jaWZkZWYgUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLVRFU1QoUmVw
ZWF0ZWRGaWVsZCwgTWVyZ2VGcm9tU2VsZikgewotICBSZXBlYXRlZEZpZWxkPGludD4gbWU7Ci0g
IG1lLkFkZCgzKTsKLSAgRVhQRUNUX0RFQVRIKG1lLk1lcmdlRnJvbShtZSksICIiKTsKLX0KLSNl
bmRpZiAgLy8gUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLQotVEVTVChSZXBlYXRlZEZpZWxkLCBD
b3B5RnJvbSkgewotICBSZXBlYXRlZEZpZWxkPGludD4gc291cmNlLCBkZXN0aW5hdGlvbjsKLSAg
c291cmNlLkFkZCg0KTsKLSAgc291cmNlLkFkZCg1KTsKLSAgZGVzdGluYXRpb24uQWRkKDEpOwot
ICBkZXN0aW5hdGlvbi5BZGQoMik7Ci0gIGRlc3RpbmF0aW9uLkFkZCgzKTsKLQotICBkZXN0aW5h
dGlvbi5Db3B5RnJvbShzb3VyY2UpOwotCi0gIEFTU0VSVF9FUSgyLCBkZXN0aW5hdGlvbi5zaXpl
KCkpOwotICBFWFBFQ1RfRVEoNCwgZGVzdGluYXRpb24uR2V0KDApKTsKLSAgRVhQRUNUX0VRKDUs
IGRlc3RpbmF0aW9uLkdldCgxKSk7Ci19Ci0KLVRFU1QoUmVwZWF0ZWRGaWVsZCwgQ29weUZyb21T
ZWxmKSB7Ci0gIFJlcGVhdGVkRmllbGQ8aW50PiBtZTsKLSAgbWUuQWRkKDMpOwotICBtZS5Db3B5
RnJvbShtZSk7Ci0gIEFTU0VSVF9FUSgxLCBtZS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMywgbWUu
R2V0KDApKTsKLX0KLQotVEVTVChSZXBlYXRlZEZpZWxkLCBFcmFzZSkgewotICBSZXBlYXRlZEZp
ZWxkPGludD4gbWU7Ci0gIFJlcGVhdGVkRmllbGQ8aW50Pjo6aXRlcmF0b3IgaXQgPSBtZS5lcmFz
ZShtZS5iZWdpbigpLCBtZS5lbmQoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lLmJlZ2luKCkgPT0gaXQp
OwotICBFWFBFQ1RfRVEoMCwgbWUuc2l6ZSgpKTsKLQotICBtZS5BZGQoMSk7Ci0gIG1lLkFkZCgy
KTsKLSAgbWUuQWRkKDMpOwotICBpdCA9IG1lLmVyYXNlKG1lLmJlZ2luKCksIG1lLmVuZCgpKTsK
LSAgRVhQRUNUX1RSVUUobWUuYmVnaW4oKSA9PSBpdCk7Ci0gIEVYUEVDVF9FUSgwLCBtZS5zaXpl
KCkpOwotCi0gIG1lLkFkZCg0KTsKLSAgbWUuQWRkKDUpOwotICBtZS5BZGQoNik7Ci0gIGl0ID0g
bWUuZXJhc2UobWUuYmVnaW4oKSArIDIsIG1lLmVuZCgpKTsKLSAgRVhQRUNUX1RSVUUobWUuYmVn
aW4oKSArIDIgPT0gaXQpOwotICBFWFBFQ1RfRVEoMiwgbWUuc2l6ZSgpKTsKLSAgRVhQRUNUX0VR
KDQsIG1lLkdldCgwKSk7Ci0gIEVYUEVDVF9FUSg1LCBtZS5HZXQoMSkpOwotCi0gIG1lLkFkZCg2
KTsKLSAgbWUuQWRkKDcpOwotICBtZS5BZGQoOCk7Ci0gIGl0ID0gbWUuZXJhc2UobWUuYmVnaW4o
KSArIDEsIG1lLmJlZ2luKCkgKyAzKTsKLSAgRVhQRUNUX1RSVUUobWUuYmVnaW4oKSArIDEgPT0g
aXQpOwotICBFWFBFQ1RfRVEoMywgbWUuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDQsIG1lLkdldCgw
KSk7Ci0gIEVYUEVDVF9FUSg3LCBtZS5HZXQoMSkpOwotICBFWFBFQ1RfRVEoOCwgbWUuR2V0KDIp
KTsKLX0KLQotVEVTVChSZXBlYXRlZEZpZWxkLCBDb3B5Q29uc3RydWN0KSB7Ci0gIFJlcGVhdGVk
RmllbGQ8aW50PiBzb3VyY2U7Ci0gIHNvdXJjZS5BZGQoMSk7Ci0gIHNvdXJjZS5BZGQoMik7Ci0K
LSAgUmVwZWF0ZWRGaWVsZDxpbnQ+IGRlc3RpbmF0aW9uKHNvdXJjZSk7Ci0KLSAgQVNTRVJUX0VR
KDIsIGRlc3RpbmF0aW9uLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgxLCBkZXN0aW5hdGlvbi5HZXQo
MCkpOwotICBFWFBFQ1RfRVEoMiwgZGVzdGluYXRpb24uR2V0KDEpKTsKLX0KLQotVEVTVChSZXBl
YXRlZEZpZWxkLCBJdGVyYXRvckNvbnN0cnVjdCkgewotICB2ZWN0b3I8aW50PiB2YWx1ZXM7Ci0g
IHZhbHVlcy5wdXNoX2JhY2soMSk7Ci0gIHZhbHVlcy5wdXNoX2JhY2soMik7Ci0KLSAgUmVwZWF0
ZWRGaWVsZDxpbnQ+IGZpZWxkKHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCkpOwotICBBU1NF
UlRfRVEodmFsdWVzLnNpemUoKSwgZmllbGQuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKHZhbHVlc1sw
XSwgZmllbGQuR2V0KDApKTsKLSAgRVhQRUNUX0VRKHZhbHVlc1sxXSwgZmllbGQuR2V0KDEpKTsK
LQotICBSZXBlYXRlZEZpZWxkPGludD4gb3RoZXIoZmllbGQuYmVnaW4oKSwgZmllbGQuZW5kKCkp
OwotICBBU1NFUlRfRVEodmFsdWVzLnNpemUoKSwgb3RoZXIuc2l6ZSgpKTsKLSAgRVhQRUNUX0VR
KHZhbHVlc1swXSwgb3RoZXIuR2V0KDApKTsKLSAgRVhQRUNUX0VRKHZhbHVlc1sxXSwgb3RoZXIu
R2V0KDEpKTsKLX0KLQotVEVTVChSZXBlYXRlZEZpZWxkLCBDb3B5QXNzaWduKSB7Ci0gIFJlcGVh
dGVkRmllbGQ8aW50PiBzb3VyY2UsIGRlc3RpbmF0aW9uOwotICBzb3VyY2UuQWRkKDQpOwotICBz
b3VyY2UuQWRkKDUpOwotICBkZXN0aW5hdGlvbi5BZGQoMSk7Ci0gIGRlc3RpbmF0aW9uLkFkZCgy
KTsKLSAgZGVzdGluYXRpb24uQWRkKDMpOwotCi0gIGRlc3RpbmF0aW9uID0gc291cmNlOwotCi0g
IEFTU0VSVF9FUSgyLCBkZXN0aW5hdGlvbi5zaXplKCkpOwotICBFWFBFQ1RfRVEoNCwgZGVzdGlu
YXRpb24uR2V0KDApKTsKLSAgRVhQRUNUX0VRKDUsIGRlc3RpbmF0aW9uLkdldCgxKSk7Ci19Ci0K
LVRFU1QoUmVwZWF0ZWRGaWVsZCwgU2VsZkFzc2lnbikgewotICAvLyBWZXJpZnkgdGhhdCBhc3Np
Z25tZW50IHRvIHNlbGYgZG9lcyBub3QgZGVzdHJveSBkYXRhLgotICBSZXBlYXRlZEZpZWxkPGlu
dD4gc291cmNlLCAqcDsKLSAgcCA9ICZzb3VyY2U7Ci0gIHNvdXJjZS5BZGQoNyk7Ci0gIHNvdXJj
ZS5BZGQoOCk7Ci0KLSAgKnAgPSBzb3VyY2U7Ci0KLSAgQVNTRVJUX0VRKDIsIHNvdXJjZS5zaXpl
KCkpOwotICBFWFBFQ1RfRVEoNywgc291cmNlLkdldCgwKSk7Ci0gIEVYUEVDVF9FUSg4LCBzb3Vy
Y2UuR2V0KDEpKTsKLX0KLQotVEVTVChSZXBlYXRlZEZpZWxkLCBNdXRhYmxlRGF0YUlzTXV0YWJs
ZSkgewotICBSZXBlYXRlZEZpZWxkPGludD4gZmllbGQ7Ci0gIGZpZWxkLkFkZCgxKTsKLSAgRVhQ
RUNUX0VRKDEsIGZpZWxkLkdldCgwKSk7Ci0gIC8vIFRoZSBmYWN0IHRoYXQgdGhpcyBsaW5lIGNv
bXBpbGVzIHdvdWxkIGJlIGVub3VnaCwgYnV0IHdlJ2xsIGNoZWNrIHRoZQotICAvLyB2YWx1ZSBh
bnl3YXkuCi0gICpmaWVsZC5tdXRhYmxlX2RhdGEoKSA9IDI7Ci0gIEVYUEVDVF9FUSgyLCBmaWVs
ZC5HZXQoMCkpOwotfQotCi1URVNUKFJlcGVhdGVkRmllbGQsIFRydW5jYXRlKSB7Ci0gIFJlcGVh
dGVkRmllbGQ8aW50PiBmaWVsZDsKLQotICBmaWVsZC5BZGQoMTIpOwotICBmaWVsZC5BZGQoMzQp
OwotICBmaWVsZC5BZGQoNTYpOwotICBmaWVsZC5BZGQoNzgpOwotICBFWFBFQ1RfRVEoNCwgZmll
bGQuc2l6ZSgpKTsKLQotICBmaWVsZC5UcnVuY2F0ZSgzKTsKLSAgRVhQRUNUX0VRKDMsIGZpZWxk
LnNpemUoKSk7Ci0KLSAgZmllbGQuQWRkKDkwKTsKLSAgRVhQRUNUX0VRKDQsIGZpZWxkLnNpemUo
KSk7Ci0gIEVYUEVDVF9FUSg5MCwgZmllbGQuR2V0KDMpKTsKLQotICAvLyBUcnVuY2F0aW9ucyB0
aGF0IGRvbid0IGNoYW5nZSB0aGUgc2l6ZSBhcmUgYWxsb3dlZCwgYnV0IGdyb3dpbmcgaXMgbm90
Ci0gIC8vIGFsbG93ZWQuCi0gIGZpZWxkLlRydW5jYXRlKGZpZWxkLnNpemUoKSk7Ci0jaWZkZWYg
UFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLSAgRVhQRUNUX0RFQlVHX0RFQVRIKGZpZWxkLlRydW5j
YXRlKGZpZWxkLnNpemUoKSArIDEpLCAibmV3X3NpemUiKTsKLSNlbmRpZgotfQotCi0KLVRFU1Qo
UmVwZWF0ZWRGaWVsZCwgRXh0cmFjdFN1YnJhbmdlKSB7Ci0gIC8vIEV4aGF1c3RpdmVseSB0ZXN0
IGV2ZXJ5IHN1YnJhbmdlIGluIGFycmF5cyBvZiBhbGwgc2l6ZXMgZnJvbSAwIHRocm91Z2ggOS4K
LSAgZm9yIChpbnQgc3ogPSAwOyBzeiA8IDEwOyArK3N6KSB7Ci0gICAgZm9yIChpbnQgbnVtID0g
MDsgbnVtIDw9IHN6OyArK251bSkgewotICAgICAgZm9yIChpbnQgc3RhcnQgPSAwOyBzdGFydCA8
IHN6IC0gbnVtOyArK3N0YXJ0KSB7Ci0gICAgICAgIC8vIENyZWF0ZSBSZXBlYXRlZEZpZWxkIHdp
dGggc3ogZWxlbWVudHMgaGF2aW5nIHZhbHVlcyAwIHRocm91Z2ggc3otMS4KLSAgICAgICAgUmVw
ZWF0ZWRGaWVsZDxpbnQzMj4gZmllbGQ7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3o7
ICsraSkKLSAgICAgICAgICBmaWVsZC5BZGQoaSk7Ci0gICAgICAgIEVYUEVDVF9FUShmaWVsZC5z
aXplKCksIHN6KTsKLQotICAgICAgICAvLyBDcmVhdGUgYSBjYXRjaGVyIGFycmF5IGFuZCBjYWxs
IEV4dHJhY3RTdWJyYW5nZS4KLSAgICAgICAgaW50MzIgY2F0Y2hlclsxMF07Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKLSAgICAgICAgICBjYXRjaGVyW2ldID0gLTE7Ci0g
ICAgICAgIGZpZWxkLkV4dHJhY3RTdWJyYW5nZShzdGFydCwgbnVtLCBjYXRjaGVyKTsKLQotICAg
ICAgICAvLyBEb2VzIHRoZSByZXN1bHRpbmcgYXJyYXkgaGF2ZSB0aGUgcmlnaHQgc2l6ZT8KLSAg
ICAgICAgRVhQRUNUX0VRKGZpZWxkLnNpemUoKSwgc3ogLSBudW0pOwotCi0gICAgICAgIC8vIFdl
cmUgdGhlIHJlbW92ZWQgZWxlbWVudHMgZXh0cmFjdGVkIGludG8gdGhlIGNhdGNoZXIgYXJyYXk/
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyArK2kpCi0gICAgICAgICAgRVhQRUNU
X0VRKGNhdGNoZXJbaV0sIHN0YXJ0ICsgaSk7Ci0gICAgICAgIEVYUEVDVF9FUShjYXRjaGVyW251
bV0sIC0xKTsKLQotICAgICAgICAvLyBEb2VzIHRoZSByZXN1bHRpbmcgYXJyYXkgY29udGFpbiB0
aGUgcmlnaHQgdmFsdWVzPwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXJ0OyArK2kp
Ci0gICAgICAgICAgRVhQRUNUX0VRKGZpZWxkLkdldChpKSwgaSk7Ci0gICAgICAgIGZvciAoaW50
IGkgPSBzdGFydDsgaSA8IGZpZWxkLnNpemUoKTsgKytpKQotICAgICAgICAgIEVYUEVDVF9FUShm
aWVsZC5HZXQoaSksIGkgKyBudW0pOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1URVNUKFJl
cGVhdGVkRmllbGQsIENsZWFyVGhlblJlc2VydmVNb3JlKSB7Ci0gIC8vIFRlc3QgdGhhdCBSZXNl
cnZlIHByb3Blcmx5IGRlc3Ryb3lzIHRoZSBvbGQgaW50ZXJuYWwgYXJyYXkgd2hlbiBpdCdzIGZv
cmNlZAotICAvLyB0byBhbGxvY2F0ZSBhIG5ldyBvbmUsIGV2ZW4gd2hlbiBjbGVhcmVkLWJ1dC1u
b3QtZGVsZXRlZCBvYmplY3RzIGFyZQotICAvLyBwcmVzZW50LiBVc2UgYSAnc3RyaW5nJyBhbmQg
PiAxNiBieXRlcyBsZW5ndGggc28gdGhhdCB0aGUgZWxlbWVudHMgYXJlCi0gIC8vIG5vbi1QT0Qg
YW5kIGFsbG9jYXRlIC0tIHRoZSBsZWFrIGNoZWNrZXIgd2lsbCBjYXRjaCBhbnkgc2tpcHBlZCBk
ZXN0cnVjdG9yCi0gIC8vIGNhbGxzIGhlcmUuCi0gIFJlcGVhdGVkRmllbGQ8c3RyaW5nPiBmaWVs
ZDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0gICAgZmllbGQuQWRkKHN0cmlu
ZygiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IikpOwotICB9Ci0gIEVYUEVD
VF9FUSgzMiwgZmllbGQuc2l6ZSgpKTsKLSAgZmllbGQuQ2xlYXIoKTsKLSAgRVhQRUNUX0VRKDAs
IGZpZWxkLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgzMiwgZmllbGQuQ2FwYWNpdHkoKSk7Ci0KLSAg
ZmllbGQuUmVzZXJ2ZSgxMDI0KTsKLSAgRVhQRUNUX0VRKDAsIGZpZWxkLnNpemUoKSk7Ci0gIEVY
UEVDVF9FUSgxMDI0LCBmaWVsZC5DYXBhY2l0eSgpKTsKLSAgLy8gRmluaXNoIHRlc3QgLS0gfGZp
ZWxkfCBzaG91bGQgZGVzdHJveSB0aGUgY2xlYXJlZC1idXQtbm90LXlldC1kZXN0cm95ZWQKLSAg
Ly8gc3RyaW5ncy4KLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gUmVwZWF0ZWRQdHJGaWVsZCB0ZXN0
cy4gIFRoZXNlIHByZXR0eSBtdWNoIGp1c3QgbWlycm9yIHRoZSBSZXBlYXRlZEZpZWxkCi0vLyB0
ZXN0cyBhYm92ZS4KLQotVEVTVChSZXBlYXRlZFB0ckZpZWxkLCBTbWFsbCkgewotICBSZXBlYXRl
ZFB0ckZpZWxkPHN0cmluZz4gZmllbGQ7Ci0KLSAgRVhQRUNUX1RSVUUoZmllbGQuZW1wdHkoKSk7
Ci0gIEVYUEVDVF9FUShmaWVsZC5zaXplKCksIDApOwotCi0gIGZpZWxkLkFkZCgpLT5hc3NpZ24o
ImZvbyIpOwotCi0gIEVYUEVDVF9GQUxTRShmaWVsZC5lbXB0eSgpKTsKLSAgRVhQRUNUX0VRKGZp
ZWxkLnNpemUoKSwgMSk7Ci0gIEVYUEVDVF9FUShmaWVsZC5HZXQoMCksICJmb28iKTsKLQotICBm
aWVsZC5BZGQoKS0+YXNzaWduKCJiYXIiKTsKLQotICBFWFBFQ1RfRkFMU0UoZmllbGQuZW1wdHko
KSk7Ci0gIEVYUEVDVF9FUShmaWVsZC5zaXplKCksIDIpOwotICBFWFBFQ1RfRVEoZmllbGQuR2V0
KDApLCAiZm9vIik7Ci0gIEVYUEVDVF9FUShmaWVsZC5HZXQoMSksICJiYXIiKTsKLQotICBmaWVs
ZC5NdXRhYmxlKDEpLT5hc3NpZ24oImJheiIpOwotCi0gIEVYUEVDVF9GQUxTRShmaWVsZC5lbXB0
eSgpKTsKLSAgRVhQRUNUX0VRKGZpZWxkLnNpemUoKSwgMik7Ci0gIEVYUEVDVF9FUShmaWVsZC5H
ZXQoMCksICJmb28iKTsKLSAgRVhQRUNUX0VRKGZpZWxkLkdldCgxKSwgImJheiIpOwotCi0gIGZp
ZWxkLlJlbW92ZUxhc3QoKTsKLQotICBFWFBFQ1RfRkFMU0UoZmllbGQuZW1wdHkoKSk7Ci0gIEVY
UEVDVF9FUShmaWVsZC5zaXplKCksIDEpOwotICBFWFBFQ1RfRVEoZmllbGQuR2V0KDApLCAiZm9v
Iik7Ci0KLSAgZmllbGQuQ2xlYXIoKTsKLQotICBFWFBFQ1RfVFJVRShmaWVsZC5lbXB0eSgpKTsK
LSAgRVhQRUNUX0VRKGZpZWxkLnNpemUoKSwgMCk7Ci19Ci0KLVRFU1QoUmVwZWF0ZWRQdHJGaWVs
ZCwgTGFyZ2UpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+IGZpZWxkOwotCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgICpmaWVsZC5BZGQoKSArPSAnYScgKyBpOwot
ICB9Ci0KLSAgRVhQRUNUX0VRKGZpZWxkLnNpemUoKSwgMTYpOwotCi0gIGZvciAoaW50IGkgPSAw
OyBpIDwgMTY7IGkrKykgewotICAgIEVYUEVDVF9FUShmaWVsZC5HZXQoaSkuc2l6ZSgpLCAxKTsK
LSAgICBFWFBFQ1RfRVEoZmllbGQuR2V0KGkpWzBdLCAnYScgKyBpKTsKLSAgfQotCi0gIGludCBt
aW5fZXhwZWN0ZWRfdXNhZ2UgPSAxNiAqIHNpemVvZihzdHJpbmcpOwotICBFWFBFQ1RfR0UoZmll
bGQuU3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpLCBtaW5fZXhwZWN0ZWRfdXNhZ2UpOwotfQotCi1U
RVNUKFJlcGVhdGVkUHRyRmllbGQsIFN3YXBTbWFsbFNtYWxsKSB7Ci0gIFJlcGVhdGVkUHRyRmll
bGQ8c3RyaW5nPiBmaWVsZDE7Ci0gIFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPiBmaWVsZDI7Ci0K
LSAgRVhQRUNUX1RSVUUoZmllbGQxLmVtcHR5KCkpOwotICBFWFBFQ1RfRVEoZmllbGQxLnNpemUo
KSwgMCk7Ci0gIEVYUEVDVF9UUlVFKGZpZWxkMi5lbXB0eSgpKTsKLSAgRVhQRUNUX0VRKGZpZWxk
Mi5zaXplKCksIDApOwotCi0gIGZpZWxkMS5BZGQoKS0+YXNzaWduKCJmb28iKTsKLSAgZmllbGQx
LkFkZCgpLT5hc3NpZ24oImJhciIpOwotCi0gIEVYUEVDVF9GQUxTRShmaWVsZDEuZW1wdHkoKSk7
Ci0gIEVYUEVDVF9FUShmaWVsZDEuc2l6ZSgpLCAyKTsKLSAgRVhQRUNUX0VRKGZpZWxkMS5HZXQo
MCksICJmb28iKTsKLSAgRVhQRUNUX0VRKGZpZWxkMS5HZXQoMSksICJiYXIiKTsKLQotICBFWFBF
Q1RfVFJVRShmaWVsZDIuZW1wdHkoKSk7Ci0gIEVYUEVDVF9FUShmaWVsZDIuc2l6ZSgpLCAwKTsK
LQotICBmaWVsZDEuU3dhcCgmZmllbGQyKTsKLQotICBFWFBFQ1RfVFJVRShmaWVsZDEuZW1wdHko
KSk7Ci0gIEVYUEVDVF9FUShmaWVsZDEuc2l6ZSgpLCAwKTsKLQotICBFWFBFQ1RfRVEoZmllbGQy
LnNpemUoKSwgMik7Ci0gIEVYUEVDVF9FUShmaWVsZDIuR2V0KDApLCAiZm9vIik7Ci0gIEVYUEVD
VF9FUShmaWVsZDIuR2V0KDEpLCAiYmFyIik7Ci19Ci0KLVRFU1QoUmVwZWF0ZWRQdHJGaWVsZCwg
U3dhcExhcmdlU21hbGwpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+IGZpZWxkMTsKLSAg
UmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+IGZpZWxkMjsKLQotICBmaWVsZDIuQWRkKCktPmFzc2ln
bigiZm9vIik7Ci0gIGZpZWxkMi5BZGQoKS0+YXNzaWduKCJiYXIiKTsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgKmZpZWxkMS5BZGQoKSArPSAnYScgKyBpOwotICB9Ci0g
IGZpZWxkMS5Td2FwKCZmaWVsZDIpOwotCi0gIEVYUEVDVF9FUShmaWVsZDEuc2l6ZSgpLCAyKTsK
LSAgRVhQRUNUX0VRKGZpZWxkMS5HZXQoMCksICJmb28iKTsKLSAgRVhQRUNUX0VRKGZpZWxkMS5H
ZXQoMSksICJiYXIiKTsKLSAgRVhQRUNUX0VRKGZpZWxkMi5zaXplKCksIDE2KTsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgRVhQRUNUX0VRKGZpZWxkMi5HZXQoaSkuc2l6
ZSgpLCAxKTsKLSAgICBFWFBFQ1RfRVEoZmllbGQyLkdldChpKVswXSwgJ2EnICsgaSk7Ci0gIH0K
LX0KLQotVEVTVChSZXBlYXRlZFB0ckZpZWxkLCBTd2FwTGFyZ2VMYXJnZSkgewotICBSZXBlYXRl
ZFB0ckZpZWxkPHN0cmluZz4gZmllbGQxOwotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4gZmll
bGQyOwotCi0gIGZpZWxkMS5BZGQoKS0+YXNzaWduKCJmb28iKTsKLSAgZmllbGQxLkFkZCgpLT5h
c3NpZ24oImJhciIpOwotICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAqZmll
bGQxLkFkZCgpICs9ICdBJyArIGk7Ci0gICAgKmZpZWxkMi5BZGQoKSArPSAnYScgKyBpOwotICB9
Ci0gIGZpZWxkMi5Td2FwKCZmaWVsZDEpOwotCi0gIEVYUEVDVF9FUShmaWVsZDEuc2l6ZSgpLCAx
Nik7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgIEVYUEVDVF9FUShmaWVs
ZDEuR2V0KGkpLnNpemUoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKGZpZWxkMS5HZXQoaSlbMF0sICdh
JyArIGkpOwotICB9Ci0gIEVYUEVDVF9FUShmaWVsZDIuc2l6ZSgpLCAxOCk7Ci0gIEVYUEVDVF9F
UShmaWVsZDIuR2V0KDApLCAiZm9vIik7Ci0gIEVYUEVDVF9FUShmaWVsZDIuR2V0KDEpLCAiYmFy
Iik7Ci0gIGZvciAoaW50IGkgPSAyOyBpIDwgMTg7IGkrKykgewotICAgIEVYUEVDVF9FUShmaWVs
ZDIuR2V0KGkpLnNpemUoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKGZpZWxkMi5HZXQoaSlbMF0sICdB
JyArIGkgLSAyKTsKLSAgfQotfQotCi1zdGF0aWMgaW50IFJlc2VydmVkU3BhY2UoUmVwZWF0ZWRQ
dHJGaWVsZDxzdHJpbmc+KiBmaWVsZCkgewotICBjb25zdCBzdHJpbmcqIGNvbnN0KiBwdHIgPSBm
aWVsZC0+ZGF0YSgpOwotICBkbyB7Ci0gICAgZmllbGQtPkFkZCgpOwotICB9IHdoaWxlIChmaWVs
ZC0+ZGF0YSgpID09IHB0cik7Ci0KLSAgcmV0dXJuIGZpZWxkLT5zaXplKCkgLSAxOwotfQotCi1U
RVNUKFJlcGVhdGVkUHRyRmllbGQsIFJlc2VydmVNb3JlVGhhbkRvdWJsZSkgewotICBSZXBlYXRl
ZFB0ckZpZWxkPHN0cmluZz4gZmllbGQ7Ci0gIGZpZWxkLlJlc2VydmUoMjApOwotCi0gIEVYUEVD
VF9FUSgyMCwgUmVzZXJ2ZWRTcGFjZSgmZmllbGQpKTsKLX0KLQotVEVTVChSZXBlYXRlZFB0ckZp
ZWxkLCBSZXNlcnZlTGVzc1RoYW5Eb3VibGUpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+
IGZpZWxkOwotICBmaWVsZC5SZXNlcnZlKDIwKTsKLSAgZmllbGQuUmVzZXJ2ZSgzMCk7Ci0KLSAg
RVhQRUNUX0VRKDQwLCBSZXNlcnZlZFNwYWNlKCZmaWVsZCkpOwotfQotCi1URVNUKFJlcGVhdGVk
UHRyRmllbGQsIFJlc2VydmVMZXNzVGhhbkV4aXN0aW5nKSB7Ci0gIFJlcGVhdGVkUHRyRmllbGQ8
c3RyaW5nPiBmaWVsZDsKLSAgZmllbGQuUmVzZXJ2ZSgyMCk7Ci0gIGNvbnN0IHN0cmluZyogY29u
c3QqIHByZXZpb3VzX3B0ciA9IGZpZWxkLmRhdGEoKTsKLSAgZmllbGQuUmVzZXJ2ZSgxMCk7Ci0K
LSAgRVhQRUNUX0VRKHByZXZpb3VzX3B0ciwgZmllbGQuZGF0YSgpKTsKLSAgRVhQRUNUX0VRKDIw
LCBSZXNlcnZlZFNwYWNlKCZmaWVsZCkpOwotfQotCi1URVNUKFJlcGVhdGVkUHRyRmllbGQsIFJl
c2VydmVEb2VzbnRMb3NlQWxsb2NhdGVkKSB7Ci0gIC8vIENoZWNrIHRoYXQgYSBidWcgaXMgZml4
ZWQ6ICBBbiBlYXJsaWVyIGltcGxlbWVudGF0aW9uIG9mIFJlc2VydmUoKQotICAvLyBmYWlsZWQg
dG8gY29weSBwb2ludGVycyB0byBhbGxvY2F0ZWQtYnV0LWNsZWFyZWQgb2JqZWN0cywgcG9zc2li
bHkKLSAgLy8gbGVhZGluZyB0byBzZWdmYXVsdHMuCi0gIFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5n
PiBmaWVsZDsKLSAgc3RyaW5nKiBmaXJzdCA9IGZpZWxkLkFkZCgpOwotICBmaWVsZC5SZW1vdmVM
YXN0KCk7Ci0KLSAgZmllbGQuUmVzZXJ2ZSgyMCk7Ci0gIEVYUEVDVF9FUShmaXJzdCwgZmllbGQu
QWRkKCkpOwotfQotCi0vLyBDbGVhcmluZyBlbGVtZW50cyBpcyB0cmlja3kgd2l0aCBSZXBlYXRl
ZFB0ckZpZWxkcyBzaW5jZSB0aGUgbWVtb3J5IGZvcgotLy8gdGhlIGVsZW1lbnRzIGlzIHJldGFp
bmVkIGFuZCByZXVzZWQuCi1URVNUKFJlcGVhdGVkUHRyRmllbGQsIENsZWFyZWRFbGVtZW50cykg
ewotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4gZmllbGQ7Ci0KLSAgc3RyaW5nKiBvcmlnaW5h
bCA9IGZpZWxkLkFkZCgpOwotICAqb3JpZ2luYWwgPSAiZm9vIjsKLQotICBFWFBFQ1RfRVEoZmll
bGQuQ2xlYXJlZENvdW50KCksIDApOwotCi0gIGZpZWxkLlJlbW92ZUxhc3QoKTsKLSAgRVhQRUNU
X1RSVUUob3JpZ2luYWwtPmVtcHR5KCkpOwotICBFWFBFQ1RfRVEoZmllbGQuQ2xlYXJlZENvdW50
KCksIDEpOwotCi0gIEVYUEVDVF9FUShmaWVsZC5BZGQoKSwgb3JpZ2luYWwpOyAgLy8gU2hvdWxk
IHJldHVybiBzYW1lIHN0cmluZyBmb3IgcmV1c2UuCi0KLSAgRVhQRUNUX0VRKGZpZWxkLlJlbGVh
c2VMYXN0KCksIG9yaWdpbmFsKTsgIC8vIFdlIHRha2Ugb3duZXJzaGlwLgotICBFWFBFQ1RfRVEo
ZmllbGQuQ2xlYXJlZENvdW50KCksIDApOwotCi0gIEVYUEVDVF9ORShmaWVsZC5BZGQoKSwgb3Jp
Z2luYWwpOyAgLy8gU2hvdWxkIE5PVCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nLgotICBFWFBFQ1Rf
RVEoZmllbGQuQ2xlYXJlZENvdW50KCksIDApOwotCi0gIGZpZWxkLkFkZEFsbG9jYXRlZChvcmln
aW5hbCk7ICAvLyBHaXZlIG93bmVyc2hpcCBiYWNrLgotICBFWFBFQ1RfRVEoZmllbGQuQ2xlYXJl
ZENvdW50KCksIDApOwotICBFWFBFQ1RfRVEoZmllbGQuTXV0YWJsZSgxKSwgb3JpZ2luYWwpOwot
Ci0gIGZpZWxkLkNsZWFyKCk7Ci0gIEVYUEVDVF9FUShmaWVsZC5DbGVhcmVkQ291bnQoKSwgMik7
Ci0gIEVYUEVDVF9FUShmaWVsZC5SZWxlYXNlQ2xlYXJlZCgpLCBvcmlnaW5hbCk7ICAvLyBUYWtl
IG93bmVyc2hpcCBhZ2Fpbi4KLSAgRVhQRUNUX0VRKGZpZWxkLkNsZWFyZWRDb3VudCgpLCAxKTsK
LSAgRVhQRUNUX05FKGZpZWxkLkFkZCgpLCBvcmlnaW5hbCk7Ci0gIEVYUEVDVF9FUShmaWVsZC5D
bGVhcmVkQ291bnQoKSwgMCk7Ci0gIEVYUEVDVF9ORShmaWVsZC5BZGQoKSwgb3JpZ2luYWwpOwot
ICBFWFBFQ1RfRVEoZmllbGQuQ2xlYXJlZENvdW50KCksIDApOwotCi0gIGZpZWxkLkFkZENsZWFy
ZWQob3JpZ2luYWwpOyAgLy8gR2l2ZSBvd25lcnNoaXAgYmFjaywgYnV0IGFzIGEgY2xlYXJlZCBv
YmplY3QuCi0gIEVYUEVDVF9FUShmaWVsZC5DbGVhcmVkQ291bnQoKSwgMSk7Ci0gIEVYUEVDVF9F
UShmaWVsZC5BZGQoKSwgb3JpZ2luYWwpOwotICBFWFBFQ1RfRVEoZmllbGQuQ2xlYXJlZENvdW50
KCksIDApOwotfQotCi0vLyBUZXN0IGFsbCBjb2RlIHBhdGhzIGluIEFkZEFsbG9jYXRlZCgpLgot
VEVTVChSZXBlYXRlZFB0ckZpZWxkLCBBZGRBbG9jYXRlZCkgewotICBSZXBlYXRlZFB0ckZpZWxk
PHN0cmluZz4gZmllbGQ7Ci0gIHdoaWxlIChmaWVsZC5zaXplKCkgPCBmaWVsZC5DYXBhY2l0eSgp
KSB7Ci0gICAgZmllbGQuQWRkKCktPmFzc2lnbigiZmlsbGVyIik7Ci0gIH0KLQotICBpbnQgaW5k
ZXggPSBmaWVsZC5zaXplKCk7Ci0KLSAgLy8gRmlyc3QgYnJhbmNoOiAgRmllbGQgaXMgYXQgY2Fw
YWNpdHkgd2l0aCBubyBjbGVhcmVkIG9iamVjdHMuCi0gIHN0cmluZyogZm9vID0gbmV3IHN0cmlu
ZygiZm9vIik7Ci0gIGZpZWxkLkFkZEFsbG9jYXRlZChmb28pOwotICBFWFBFQ1RfRVEoaW5kZXgg
KyAxLCBmaWVsZC5zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgZmllbGQuQ2xlYXJlZENvdW50KCkp
OwotICBFWFBFQ1RfRVEoZm9vLCAmZmllbGQuR2V0KGluZGV4KSk7Ci0KLSAgLy8gTGFzdCBicmFu
Y2g6ICBGaWVsZCBpcyBub3QgYXQgY2FwYWNpdHkgYW5kIHRoZXJlIGFyZSBubyBjbGVhcmVkIG9i
amVjdHMuCi0gIHN0cmluZyogYmFyID0gbmV3IHN0cmluZygiYmFyIik7Ci0gIGZpZWxkLkFkZEFs
bG9jYXRlZChiYXIpOwotICArK2luZGV4OwotICBFWFBFQ1RfRVEoaW5kZXggKyAxLCBmaWVsZC5z
aXplKCkpOwotICBFWFBFQ1RfRVEoMCwgZmllbGQuQ2xlYXJlZENvdW50KCkpOwotICBFWFBFQ1Rf
RVEoYmFyLCAmZmllbGQuR2V0KGluZGV4KSk7Ci0KLSAgLy8gVGhpcmQgYnJhbmNoOiAgRmllbGQg
aXMgbm90IGF0IGNhcGFjaXR5IGFuZCB0aGVyZSBhcmUgbm8gY2xlYXJlZCBvYmplY3RzLgotICBm
aWVsZC5SZW1vdmVMYXN0KCk7Ci0gIHN0cmluZyogYmF6ID0gbmV3IHN0cmluZygiYmF6Iik7Ci0g
IGZpZWxkLkFkZEFsbG9jYXRlZChiYXopOwotICBFWFBFQ1RfRVEoaW5kZXggKyAxLCBmaWVsZC5z
aXplKCkpOwotICBFWFBFQ1RfRVEoMSwgZmllbGQuQ2xlYXJlZENvdW50KCkpOwotICBFWFBFQ1Rf
RVEoYmF6LCAmZmllbGQuR2V0KGluZGV4KSk7Ci0KLSAgLy8gU2Vjb25kIGJyYW5jaDogIEZpZWxk
IGlzIGF0IGNhcGFjaXR5IGJ1dCBoYXMgc29tZSBjbGVhcmVkIG9iamVjdHMuCi0gIHdoaWxlIChm
aWVsZC5zaXplKCkgPCBmaWVsZC5DYXBhY2l0eSgpKSB7Ci0gICAgZmllbGQuQWRkKCktPmFzc2ln
bigiZmlsbGVyMiIpOwotICB9Ci0gIGZpZWxkLlJlbW92ZUxhc3QoKTsKLSAgaW5kZXggPSBmaWVs
ZC5zaXplKCk7Ci0gIHN0cmluZyogcXV4ID0gbmV3IHN0cmluZygicXV4Iik7Ci0gIGZpZWxkLkFk
ZEFsbG9jYXRlZChxdXgpOwotICBFWFBFQ1RfRVEoaW5kZXggKyAxLCBmaWVsZC5zaXplKCkpOwot
ICAvLyBXZSBzaG91bGQgaGF2ZSBkaXNjYXJkZWQgdGhlIGNsZWFyZWQgb2JqZWN0LgotICBFWFBF
Q1RfRVEoMCwgZmllbGQuQ2xlYXJlZENvdW50KCkpOwotICBFWFBFQ1RfRVEocXV4LCAmZmllbGQu
R2V0KGluZGV4KSk7Ci19Ci0KLVRFU1QoUmVwZWF0ZWRQdHJGaWVsZCwgTWVyZ2VGcm9tKSB7Ci0g
IFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPiBzb3VyY2UsIGRlc3RpbmF0aW9uOwotICBzb3VyY2Uu
QWRkKCktPmFzc2lnbigiNCIpOwotICBzb3VyY2UuQWRkKCktPmFzc2lnbigiNSIpOwotICBkZXN0
aW5hdGlvbi5BZGQoKS0+YXNzaWduKCIxIik7Ci0gIGRlc3RpbmF0aW9uLkFkZCgpLT5hc3NpZ24o
IjIiKTsKLSAgZGVzdGluYXRpb24uQWRkKCktPmFzc2lnbigiMyIpOwotCi0gIGRlc3RpbmF0aW9u
Lk1lcmdlRnJvbShzb3VyY2UpOwotCi0gIEFTU0VSVF9FUSg1LCBkZXN0aW5hdGlvbi5zaXplKCkp
OwotICBFWFBFQ1RfRVEoIjEiLCBkZXN0aW5hdGlvbi5HZXQoMCkpOwotICBFWFBFQ1RfRVEoIjIi
LCBkZXN0aW5hdGlvbi5HZXQoMSkpOwotICBFWFBFQ1RfRVEoIjMiLCBkZXN0aW5hdGlvbi5HZXQo
MikpOwotICBFWFBFQ1RfRVEoIjQiLCBkZXN0aW5hdGlvbi5HZXQoMykpOwotICBFWFBFQ1RfRVEo
IjUiLCBkZXN0aW5hdGlvbi5HZXQoNCkpOwotfQotCi0jaWZkZWYgUFJPVE9CVUZfSEFTX0RFQVRI
X1RFU1QKLVRFU1QoUmVwZWF0ZWRQdHJGaWVsZCwgTWVyZ2VGcm9tU2VsZikgewotICBSZXBlYXRl
ZFB0ckZpZWxkPHN0cmluZz4gbWU7Ci0gIG1lLkFkZCgpLT5hc3NpZ24oIjEiKTsKLSAgRVhQRUNU
X0RFQVRIKG1lLk1lcmdlRnJvbShtZSksICIiKTsKLX0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSEFT
X0RFQVRIX1RFU1QKLQotVEVTVChSZXBlYXRlZFB0ckZpZWxkLCBDb3B5RnJvbSkgewotICBSZXBl
YXRlZFB0ckZpZWxkPHN0cmluZz4gc291cmNlLCBkZXN0aW5hdGlvbjsKLSAgc291cmNlLkFkZCgp
LT5hc3NpZ24oIjQiKTsKLSAgc291cmNlLkFkZCgpLT5hc3NpZ24oIjUiKTsKLSAgZGVzdGluYXRp
b24uQWRkKCktPmFzc2lnbigiMSIpOwotICBkZXN0aW5hdGlvbi5BZGQoKS0+YXNzaWduKCIyIik7
Ci0gIGRlc3RpbmF0aW9uLkFkZCgpLT5hc3NpZ24oIjMiKTsKLQotICBkZXN0aW5hdGlvbi5Db3B5
RnJvbShzb3VyY2UpOwotCi0gIEFTU0VSVF9FUSgyLCBkZXN0aW5hdGlvbi5zaXplKCkpOwotICBF
WFBFQ1RfRVEoIjQiLCBkZXN0aW5hdGlvbi5HZXQoMCkpOwotICBFWFBFQ1RfRVEoIjUiLCBkZXN0
aW5hdGlvbi5HZXQoMSkpOwotfQotCi1URVNUKFJlcGVhdGVkUHRyRmllbGQsIENvcHlGcm9tU2Vs
ZikgewotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4gbWU7Ci0gIG1lLkFkZCgpLT5hc3NpZ24o
IjEiKTsKLSAgbWUuQ29weUZyb20obWUpOwotICBBU1NFUlRfRVEoMSwgbWUuc2l6ZSgpKTsKLSAg
RVhQRUNUX0VRKCIxIiwgbWUuR2V0KDApKTsKLX0KLQotVEVTVChSZXBlYXRlZFB0ckZpZWxkLCBF
cmFzZSkgewotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz4gbWU7Ci0gIFJlcGVhdGVkUHRyRmll
bGQ8c3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtZS5lcmFzZShtZS5iZWdpbigpLCBtZS5lbmQoKSk7
Ci0gIEVYUEVDVF9UUlVFKG1lLmJlZ2luKCkgPT0gaXQpOwotICBFWFBFQ1RfRVEoMCwgbWUuc2l6
ZSgpKTsKLQotICAqbWUuQWRkKCkgPSAiMSI7Ci0gICptZS5BZGQoKSA9ICIyIjsKLSAgKm1lLkFk
ZCgpID0gIjMiOwotICBpdCA9IG1lLmVyYXNlKG1lLmJlZ2luKCksIG1lLmVuZCgpKTsKLSAgRVhQ
RUNUX1RSVUUobWUuYmVnaW4oKSA9PSBpdCk7Ci0gIEVYUEVDVF9FUSgwLCBtZS5zaXplKCkpOwot
Ci0gICptZS5BZGQoKSA9ICI0IjsKLSAgKm1lLkFkZCgpID0gIjUiOwotICAqbWUuQWRkKCkgPSAi
NiI7Ci0gIGl0ID0gbWUuZXJhc2UobWUuYmVnaW4oKSArIDIsIG1lLmVuZCgpKTsKLSAgRVhQRUNU
X1RSVUUobWUuYmVnaW4oKSArIDIgPT0gaXQpOwotICBFWFBFQ1RfRVEoMiwgbWUuc2l6ZSgpKTsK
LSAgRVhQRUNUX0VRKCI0IiwgbWUuR2V0KDApKTsKLSAgRVhQRUNUX0VRKCI1IiwgbWUuR2V0KDEp
KTsKLQotICAqbWUuQWRkKCkgPSAiNiI7Ci0gICptZS5BZGQoKSA9ICI3IjsKLSAgKm1lLkFkZCgp
ID0gIjgiOwotICBpdCA9IG1lLmVyYXNlKG1lLmJlZ2luKCkgKyAxLCBtZS5iZWdpbigpICsgMyk7
Ci0gIEVYUEVDVF9UUlVFKG1lLmJlZ2luKCkgKyAxID09IGl0KTsKLSAgRVhQRUNUX0VRKDMsIG1l
LnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgiNCIsIG1lLkdldCgwKSk7Ci0gIEVYUEVDVF9FUSgiNyIs
IG1lLkdldCgxKSk7Ci0gIEVYUEVDVF9FUSgiOCIsIG1lLkdldCgyKSk7Ci19Ci0KLVRFU1QoUmVw
ZWF0ZWRQdHJGaWVsZCwgQ29weUNvbnN0cnVjdCkgewotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmlu
Zz4gc291cmNlOwotICBzb3VyY2UuQWRkKCktPmFzc2lnbigiMSIpOwotICBzb3VyY2UuQWRkKCkt
PmFzc2lnbigiMiIpOwotCi0gIFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPiBkZXN0aW5hdGlvbihz
b3VyY2UpOwotCi0gIEFTU0VSVF9FUSgyLCBkZXN0aW5hdGlvbi5zaXplKCkpOwotICBFWFBFQ1Rf
RVEoIjEiLCBkZXN0aW5hdGlvbi5HZXQoMCkpOwotICBFWFBFQ1RfRVEoIjIiLCBkZXN0aW5hdGlv
bi5HZXQoMSkpOwotfQotCi1URVNUKFJlcGVhdGVkUHRyRmllbGQsIEl0ZXJhdG9yQ29uc3RydWN0
X1N0cmluZykgewotICB2ZWN0b3I8c3RyaW5nPiB2YWx1ZXM7Ci0gIHZhbHVlcy5wdXNoX2JhY2so
IjEiKTsKLSAgdmFsdWVzLnB1c2hfYmFjaygiMiIpOwotCi0gIFJlcGVhdGVkUHRyRmllbGQ8c3Ry
aW5nPiBmaWVsZCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLmVuZCgpKTsKLSAgQVNTRVJUX0VRKHZh
bHVlcy5zaXplKCksIGZpZWxkLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSh2YWx1ZXNbMF0sIGZpZWxk
LkdldCgwKSk7Ci0gIEVYUEVDVF9FUSh2YWx1ZXNbMV0sIGZpZWxkLkdldCgxKSk7Ci0KLSAgUmVw
ZWF0ZWRQdHJGaWVsZDxzdHJpbmc+IG90aGVyKGZpZWxkLmJlZ2luKCksIGZpZWxkLmVuZCgpKTsK
LSAgQVNTRVJUX0VRKHZhbHVlcy5zaXplKCksIG90aGVyLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSh2
YWx1ZXNbMF0sIG90aGVyLkdldCgwKSk7Ci0gIEVYUEVDVF9FUSh2YWx1ZXNbMV0sIG90aGVyLkdl
dCgxKSk7Ci19Ci0KLVRFU1QoUmVwZWF0ZWRQdHJGaWVsZCwgSXRlcmF0b3JDb25zdHJ1Y3RfUHJv
dG8pIHsKLSAgdHlwZWRlZiBUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UgTmVzdGVkOwotICB2
ZWN0b3I8TmVzdGVkPiB2YWx1ZXM7Ci0gIHZhbHVlcy5wdXNoX2JhY2soTmVzdGVkKCkpOwotICB2
YWx1ZXMuYmFjaygpLnNldF9iYigxKTsKLSAgdmFsdWVzLnB1c2hfYmFjayhOZXN0ZWQoKSk7Ci0g
IHZhbHVlcy5iYWNrKCkuc2V0X2JiKDIpOwotCi0gIFJlcGVhdGVkUHRyRmllbGQ8TmVzdGVkPiBm
aWVsZCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLmVuZCgpKTsKLSAgQVNTRVJUX0VRKHZhbHVlcy5z
aXplKCksIGZpZWxkLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSh2YWx1ZXNbMF0uYmIoKSwgZmllbGQu
R2V0KDApLmJiKCkpOwotICBFWFBFQ1RfRVEodmFsdWVzWzFdLmJiKCksIGZpZWxkLkdldCgxKS5i
YigpKTsKLQotICBSZXBlYXRlZFB0ckZpZWxkPE5lc3RlZD4gb3RoZXIoZmllbGQuYmVnaW4oKSwg
ZmllbGQuZW5kKCkpOwotICBBU1NFUlRfRVEodmFsdWVzLnNpemUoKSwgb3RoZXIuc2l6ZSgpKTsK
LSAgRVhQRUNUX0VRKHZhbHVlc1swXS5iYigpLCBvdGhlci5HZXQoMCkuYmIoKSk7Ci0gIEVYUEVD
VF9FUSh2YWx1ZXNbMV0uYmIoKSwgb3RoZXIuR2V0KDEpLmJiKCkpOwotfQotCi1URVNUKFJlcGVh
dGVkUHRyRmllbGQsIENvcHlBc3NpZ24pIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+IHNv
dXJjZSwgZGVzdGluYXRpb247Ci0gIHNvdXJjZS5BZGQoKS0+YXNzaWduKCI0Iik7Ci0gIHNvdXJj
ZS5BZGQoKS0+YXNzaWduKCI1Iik7Ci0gIGRlc3RpbmF0aW9uLkFkZCgpLT5hc3NpZ24oIjEiKTsK
LSAgZGVzdGluYXRpb24uQWRkKCktPmFzc2lnbigiMiIpOwotICBkZXN0aW5hdGlvbi5BZGQoKS0+
YXNzaWduKCIzIik7Ci0KLSAgZGVzdGluYXRpb24gPSBzb3VyY2U7Ci0KLSAgQVNTRVJUX0VRKDIs
IGRlc3RpbmF0aW9uLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgiNCIsIGRlc3RpbmF0aW9uLkdldCgw
KSk7Ci0gIEVYUEVDVF9FUSgiNSIsIGRlc3RpbmF0aW9uLkdldCgxKSk7Ci19Ci0KLVRFU1QoUmVw
ZWF0ZWRQdHJGaWVsZCwgU2VsZkFzc2lnbikgewotICAvLyBWZXJpZnkgdGhhdCBhc3NpZ25tZW50
IHRvIHNlbGYgZG9lcyBub3QgZGVzdHJveSBkYXRhLgotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmlu
Zz4gc291cmNlLCAqcDsKLSAgcCA9ICZzb3VyY2U7Ci0gIHNvdXJjZS5BZGQoKS0+YXNzaWduKCI3
Iik7Ci0gIHNvdXJjZS5BZGQoKS0+YXNzaWduKCI4Iik7Ci0KLSAgKnAgPSBzb3VyY2U7Ci0KLSAg
QVNTRVJUX0VRKDIsIHNvdXJjZS5zaXplKCkpOwotICBFWFBFQ1RfRVEoIjciLCBzb3VyY2UuR2V0
KDApKTsKLSAgRVhQRUNUX0VRKCI4Iiwgc291cmNlLkdldCgxKSk7Ci19Ci0KLVRFU1QoUmVwZWF0
ZWRQdHJGaWVsZCwgTXV0YWJsZURhdGFJc011dGFibGUpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxz
dHJpbmc+IGZpZWxkOwotICAqZmllbGQuQWRkKCkgPSAiMSI7Ci0gIEVYUEVDVF9FUSgiMSIsIGZp
ZWxkLkdldCgwKSk7Ci0gIC8vIFRoZSBmYWN0IHRoYXQgdGhpcyBsaW5lIGNvbXBpbGVzIHdvdWxk
IGJlIGVub3VnaCwgYnV0IHdlJ2xsIGNoZWNrIHRoZQotICAvLyB2YWx1ZSBhbnl3YXkuCi0gIHN0
cmluZyoqIGRhdGEgPSBmaWVsZC5tdXRhYmxlX2RhdGEoKTsKLSAgKipkYXRhID0gIjIiOwotICBF
WFBFQ1RfRVEoIjIiLCBmaWVsZC5HZXQoMCkpOwotfQotCi1URVNUKFJlcGVhdGVkUHRyRmllbGQs
IEV4dHJhY3RTdWJyYW5nZSkgewotICAvLyBFeGhhdXN0aXZlbHkgdGVzdCBldmVyeSBzdWJyYW5n
ZSBpbiBhcnJheXMgb2YgYWxsIHNpemVzIGZyb20gMCB0aHJvdWdoIDkKLSAgLy8gd2l0aCAwIHRo
cm91Z2ggMyBjbGVhcmVkIGVsZW1lbnRzIGF0IHRoZSBlbmQuCi0gIGZvciAoaW50IHN6ID0gMDsg
c3ogPCAxMDsgKytzeikgewotICAgIGZvciAoaW50IG51bSA9IDA7IG51bSA8PSBzejsgKytudW0p
IHsKLSAgICAgIGZvciAoaW50IHN0YXJ0ID0gMDsgc3RhcnQgPCBzeiAtIG51bTsgKytzdGFydCkg
ewotICAgICAgICBmb3IgKGludCBleHRyYSA9IDA7IGV4dHJhIDwgNDsgKytleHRyYSkgewotICAg
ICAgICAgIHZlY3RvcjxzdHJpbmcqPiBzdWJqZWN0OwotCi0gICAgICAgICAgLy8gQ3JlYXRlIGFu
IGFycmF5IHdpdGggInN6IiBlbGVtZW50cyBhbmQgImV4dHJhIiBjbGVhcmVkIGVsZW1lbnRzLgot
ICAgICAgICAgIFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPiBmaWVsZDsKLSAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHN6ICsgZXh0cmE7ICsraSkgewotICAgICAgICAgICAgc3ViamVjdC5w
dXNoX2JhY2sobmV3IHN0cmluZygpKTsKLSAgICAgICAgICAgIGZpZWxkLkFkZEFsbG9jYXRlZChz
dWJqZWN0W2ldKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgRVhQRUNUX0VRKGZpZWxkLnNpemUo
KSwgc3ogKyBleHRyYSk7Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRyYTsgKytp
KQotICAgICAgICAgICAgZmllbGQuUmVtb3ZlTGFzdCgpOwotICAgICAgICAgIEVYUEVDVF9FUShm
aWVsZC5zaXplKCksIHN6KTsKLSAgICAgICAgICBFWFBFQ1RfRVEoZmllbGQuQ2xlYXJlZENvdW50
KCksIGV4dHJhKTsKLQotICAgICAgICAgIC8vIENyZWF0ZSBhIGNhdGNoZXIgYXJyYXkgYW5kIGNh
bGwgRXh0cmFjdFN1YnJhbmdlLgotICAgICAgICAgIHN0cmluZyogY2F0Y2hlclsxMF07Ci0gICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKQotICAgICAgICAgICAgY2F0Y2hlcltp
XSA9IE5VTEw7Ci0gICAgICAgICAgZmllbGQuRXh0cmFjdFN1YnJhbmdlKHN0YXJ0LCBudW0sIGNh
dGNoZXIpOwotCi0gICAgICAgICAgLy8gRG9lcyB0aGUgcmVzdWx0aW5nIGFycmF5IGhhdmUgdGhl
IHJpZ2h0IHNpemU/Ci0gICAgICAgICAgRVhQRUNUX0VRKGZpZWxkLnNpemUoKSwgc3ogLSBudW0p
OwotCi0gICAgICAgICAgLy8gV2VyZSB0aGUgcmVtb3ZlZCBlbGVtZW50cyBleHRyYWN0ZWQgaW50
byB0aGUgY2F0Y2hlciBhcnJheT8KLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsg
KytpKQotICAgICAgICAgICAgRVhQRUNUX0VRKGNhdGNoZXJbaV0sIHN1YmplY3Rbc3RhcnQgKyBp
XSk7Ci0gICAgICAgICAgRVhQRUNUX0VRKE5VTEwsIGNhdGNoZXJbbnVtXSk7Ci0KLSAgICAgICAg
ICAvLyBEb2VzIHRoZSByZXN1bHRpbmcgYXJyYXkgY29udGFpbiB0aGUgcmlnaHQgdmFsdWVzPwot
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhcnQ7ICsraSkKLSAgICAgICAgICAgIEVY
UEVDVF9FUShmaWVsZC5NdXRhYmxlKGkpLCBzdWJqZWN0W2ldKTsKLSAgICAgICAgICBmb3IgKGlu
dCBpID0gc3RhcnQ7IGkgPCBmaWVsZC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIEVYUEVDVF9F
UShmaWVsZC5NdXRhYmxlKGkpLCBzdWJqZWN0W2kgKyBudW1dKTsKLQotICAgICAgICAgIC8vIFJl
aW5zdGF0ZSB0aGUgY2xlYXJlZCBlbGVtZW50cy4KLSAgICAgICAgICBFWFBFQ1RfRVEoZmllbGQu
Q2xlYXJlZENvdW50KCksIGV4dHJhKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4
dHJhOyArK2kpCi0gICAgICAgICAgICBmaWVsZC5BZGQoKTsKLSAgICAgICAgICBFWFBFQ1RfRVEo
ZmllbGQuQ2xlYXJlZENvdW50KCksIDApOwotICAgICAgICAgIEVYUEVDVF9FUShmaWVsZC5zaXpl
KCksIHN6IC0gbnVtICsgZXh0cmEpOwotCi0gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBleHRy
YSBlbGVtZW50cyBhcmUgYWxsIHRoZXJlIChpbiBzb21lIG9yZGVyKS4KLSAgICAgICAgICBmb3Ig
KGludCBpID0gc3o7IGkgPCBzeiArIGV4dHJhOyArK2kpIHsKLSAgICAgICAgICAgIGludCBjb3Vu
dCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gc3o7IGogPCBzeiArIGV4dHJhOyArK2op
IHsKLSAgICAgICAgICAgICAgaWYgKGZpZWxkLk11dGFibGUoaiAtIG51bSkgPT0gc3ViamVjdFtp
XSkKLSAgICAgICAgICAgICAgICBjb3VudCArPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgRVhQRUNUX0VRKGNvdW50LCAxKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBSZWxl
YXNlIHRoZSBjYXVnaHQgZWxlbWVudHMuCi0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW07ICsraSkKLSAgICAgICAgICAgIGRlbGV0ZSBjYXRjaGVyW2ldOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci19Ci0KLVRFU1QoUmVwZWF0ZWRQdHJGaWVsZCwgRGVsZXRlU3VicmFu
Z2UpIHsKLSAgLy8gRGVsZXRlU3VicmFuZ2UgaXMgYSB0cml2aWFsIGV4dGVuc2lvbiBvZiBFeHRl
bmRTdWJyYW5nZS4KLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vLyBJdGVyYXRvciB0ZXN0cyBzdG9s
ZW4gZnJvbSBuZXQvcHJvdG8vcHJvdG8tYXJyYXlfdW5pdHRlc3QuCi1jbGFzcyBSZXBlYXRlZEZp
ZWxkSXRlcmF0b3JUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAg
dmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7
Ci0gICAgICBwcm90b19hcnJheV8uQWRkKGkpOwotICAgIH0KLSAgfQotCi0gIFJlcGVhdGVkRmll
bGQ8aW50PiBwcm90b19hcnJheV87Ci19OwotCi1URVNUX0YoUmVwZWF0ZWRGaWVsZEl0ZXJhdG9y
VGVzdCwgQ29udmVydGlibGUpIHsKLSAgUmVwZWF0ZWRGaWVsZDxpbnQ+OjppdGVyYXRvciBpdGVy
ID0gcHJvdG9fYXJyYXlfLmJlZ2luKCk7Ci0gIFJlcGVhdGVkRmllbGQ8aW50Pjo6Y29uc3RfaXRl
cmF0b3IgY19pdGVyID0gaXRlcjsKLSAgUmVwZWF0ZWRGaWVsZDxpbnQ+Ojp2YWx1ZV90eXBlIHZh
bHVlID0gKmNfaXRlcjsKLSAgRVhQRUNUX0VRKDAsIHZhbHVlKTsKLX0KLQotVEVTVF9GKFJlcGVh
dGVkRmllbGRJdGVyYXRvclRlc3QsIE11dGFibGVJdGVyYXRpb24pIHsKLSAgUmVwZWF0ZWRGaWVs
ZDxpbnQ+OjppdGVyYXRvciBpdGVyID0gcHJvdG9fYXJyYXlfLmJlZ2luKCk7Ci0gIEVYUEVDVF9F
USgwLCAqaXRlcik7Ci0gICsraXRlcjsKLSAgRVhQRUNUX0VRKDEsICppdGVyKyspOwotICBFWFBF
Q1RfRVEoMiwgKml0ZXIpOwotICArK2l0ZXI7Ci0gIEVYUEVDVF9UUlVFKHByb3RvX2FycmF5Xy5l
bmQoKSA9PSBpdGVyKTsKLQotICBFWFBFQ1RfRVEoMiwgKihwcm90b19hcnJheV8uZW5kKCkgLSAx
KSk7Ci19Ci0KLVRFU1RfRihSZXBlYXRlZEZpZWxkSXRlcmF0b3JUZXN0LCBDb25zdEl0ZXJhdGlv
bikgewotICBjb25zdCBSZXBlYXRlZEZpZWxkPGludD4mIGNvbnN0X3Byb3RvX2FycmF5ID0gcHJv
dG9fYXJyYXlfOwotICBSZXBlYXRlZEZpZWxkPGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBj
b25zdF9wcm90b19hcnJheS5iZWdpbigpOwotICBFWFBFQ1RfRVEoMCwgKml0ZXIpOwotICArK2l0
ZXI7Ci0gIEVYUEVDVF9FUSgxLCAqaXRlcisrKTsKLSAgRVhQRUNUX0VRKDIsICppdGVyKTsKLSAg
KytpdGVyOwotICBFWFBFQ1RfVFJVRShwcm90b19hcnJheV8uZW5kKCkgPT0gaXRlcik7Ci0gIEVY
UEVDVF9FUSgyLCAqKHByb3RvX2FycmF5Xy5lbmQoKSAtIDEpKTsKLX0KLQotVEVTVF9GKFJlcGVh
dGVkRmllbGRJdGVyYXRvclRlc3QsIE11dGF0aW9uKSB7Ci0gIFJlcGVhdGVkRmllbGQ8aW50Pjo6
aXRlcmF0b3IgaXRlciA9IHByb3RvX2FycmF5Xy5iZWdpbigpOwotICAqaXRlciA9IDc7Ci0gIEVY
UEVDVF9FUSg3LCBwcm90b19hcnJheV8uR2V0KDApKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1j
bGFzcyBSZXBlYXRlZFB0ckZpZWxkSXRlcmF0b3JUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qg
ewotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIHByb3RvX2FycmF5
Xy5BZGQoKS0+YXNzaWduKCJmb28iKTsKLSAgICBwcm90b19hcnJheV8uQWRkKCktPmFzc2lnbigi
YmFyIik7Ci0gICAgcHJvdG9fYXJyYXlfLkFkZCgpLT5hc3NpZ24oImJheiIpOwotICB9Ci0KLSAg
UmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+IHByb3RvX2FycmF5XzsKLX07Ci0KLVRFU1RfRihSZXBl
YXRlZFB0ckZpZWxkSXRlcmF0b3JUZXN0LCBDb252ZXJ0aWJsZSkgewotICBSZXBlYXRlZFB0ckZp
ZWxkPHN0cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSBwcm90b19hcnJheV8uYmVnaW4oKTsKLSAgUmVw
ZWF0ZWRQdHJGaWVsZDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjX2l0ZXIgPSBpdGVyOwotICBS
ZXBlYXRlZFB0ckZpZWxkPHN0cmluZz46OnZhbHVlX3R5cGUgdmFsdWUgPSAqY19pdGVyOwotICBF
WFBFQ1RfRVEoImZvbyIsIHZhbHVlKTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRJdGVy
YXRvclRlc3QsIE11dGFibGVJdGVyYXRpb24pIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+
OjppdGVyYXRvciBpdGVyID0gcHJvdG9fYXJyYXlfLmJlZ2luKCk7Ci0gIEVYUEVDVF9FUSgiZm9v
IiwgKml0ZXIpOwotICArK2l0ZXI7Ci0gIEVYUEVDVF9FUSgiYmFyIiwgKihpdGVyKyspKTsKLSAg
RVhQRUNUX0VRKCJiYXoiLCAqaXRlcik7Ci0gICsraXRlcjsKLSAgRVhQRUNUX1RSVUUocHJvdG9f
YXJyYXlfLmVuZCgpID09IGl0ZXIpOwotICBFWFBFQ1RfRVEoImJheiIsICooLS1wcm90b19hcnJh
eV8uZW5kKCkpKTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRJdGVyYXRvclRlc3QsIENv
bnN0SXRlcmF0aW9uKSB7Ci0gIGNvbnN0IFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPiYgY29uc3Rf
cHJvdG9fYXJyYXkgPSBwcm90b19hcnJheV87Ci0gIFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGNvbnN0X3Byb3RvX2FycmF5LmJlZ2luKCk7Ci0gIEVYUEVD
VF9FUSgiZm9vIiwgKml0ZXIpOwotICArK2l0ZXI7Ci0gIEVYUEVDVF9FUSgiYmFyIiwgKihpdGVy
KyspKTsKLSAgRVhQRUNUX0VRKCJiYXoiLCAqaXRlcik7Ci0gICsraXRlcjsKLSAgRVhQRUNUX1RS
VUUoY29uc3RfcHJvdG9fYXJyYXkuZW5kKCkgPT0gaXRlcik7Ci0gIEVYUEVDVF9FUSgiYmF6Iiwg
KigtLWNvbnN0X3Byb3RvX2FycmF5LmVuZCgpKSk7Ci19Ci0KLVRFU1RfRihSZXBlYXRlZFB0ckZp
ZWxkSXRlcmF0b3JUZXN0LCBNdXRhYmxlUmV2ZXJzZUl0ZXJhdGlvbikgewotICBSZXBlYXRlZFB0
ckZpZWxkPHN0cmluZz46OnJldmVyc2VfaXRlcmF0b3IgaXRlciA9IHByb3RvX2FycmF5Xy5yYmVn
aW4oKTsKLSAgRVhQRUNUX0VRKCJiYXoiLCAqaXRlcik7Ci0gICsraXRlcjsKLSAgRVhQRUNUX0VR
KCJiYXIiLCAqKGl0ZXIrKykpOwotICBFWFBFQ1RfRVEoImZvbyIsICppdGVyKTsKLSAgKytpdGVy
OwotICBFWFBFQ1RfVFJVRShwcm90b19hcnJheV8ucmVuZCgpID09IGl0ZXIpOwotICBFWFBFQ1Rf
RVEoImZvbyIsICooLS1wcm90b19hcnJheV8ucmVuZCgpKSk7Ci19Ci0KLVRFU1RfRihSZXBlYXRl
ZFB0ckZpZWxkSXRlcmF0b3JUZXN0LCBDb25zdFJldmVyc2VJdGVyYXRpb24pIHsKLSAgY29uc3Qg
UmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+JiBjb25zdF9wcm90b19hcnJheSA9IHByb3RvX2FycmF5
XzsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGl0
ZXIKLSAgICAgID0gY29uc3RfcHJvdG9fYXJyYXkucmJlZ2luKCk7Ci0gIEVYUEVDVF9FUSgiYmF6
IiwgKml0ZXIpOwotICArK2l0ZXI7Ci0gIEVYUEVDVF9FUSgiYmFyIiwgKihpdGVyKyspKTsKLSAg
RVhQRUNUX0VRKCJmb28iLCAqaXRlcik7Ci0gICsraXRlcjsKLSAgRVhQRUNUX1RSVUUoY29uc3Rf
cHJvdG9fYXJyYXkucmVuZCgpID09IGl0ZXIpOwotICBFWFBFQ1RfRVEoImZvbyIsICooLS1jb25z
dF9wcm90b19hcnJheS5yZW5kKCkpKTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRJdGVy
YXRvclRlc3QsIFJhbmRvbUFjY2VzcykgewotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz46Oml0
ZXJhdG9yIGl0ZXIgPSBwcm90b19hcnJheV8uYmVnaW4oKTsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxz
dHJpbmc+OjppdGVyYXRvciBpdGVyMiA9IGl0ZXI7Ci0gICsraXRlcjI7Ci0gICsraXRlcjI7Ci0g
IEVYUEVDVF9UUlVFKGl0ZXIgKyAyID09IGl0ZXIyKTsKLSAgRVhQRUNUX1RSVUUoaXRlciA9PSBp
dGVyMiAtIDIpOwotICBFWFBFQ1RfRVEoImJheiIsIGl0ZXJbMl0pOwotICBFWFBFQ1RfRVEoImJh
eiIsICooaXRlciArIDIpKTsKLSAgRVhQRUNUX0VRKDMsIHByb3RvX2FycmF5Xy5lbmQoKSAtIHBy
b3RvX2FycmF5Xy5iZWdpbigpKTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRJdGVyYXRv
clRlc3QsIENvbXBhcmFibGUpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gcHJvdG9fYXJyYXlfLmJlZ2luKCk7Ci0gIFJlcGVhdGVkUHRyRmllbGQ8
c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlcjIgPSBpdGVyICsgMTsKLSAgRVhQRUNUX1RSVUUo
aXRlciA9PSBpdGVyKTsKLSAgRVhQRUNUX1RSVUUoaXRlciAhPSBpdGVyMik7Ci0gIEVYUEVDVF9U
UlVFKGl0ZXIgPCBpdGVyMik7Ci0gIEVYUEVDVF9UUlVFKGl0ZXIgPD0gaXRlcjIpOwotICBFWFBF
Q1RfVFJVRShpdGVyIDw9IGl0ZXIpOwotICBFWFBFQ1RfVFJVRShpdGVyMiA+IGl0ZXIpOwotICBF
WFBFQ1RfVFJVRShpdGVyMiA+PSBpdGVyKTsKLSAgRVhQRUNUX1RSVUUoaXRlciA+PSBpdGVyKTsK
LX0KLQotLy8gVW5pbml0aWFsaXplZCBpdGVyYXRvciBkb2VzIG5vdCBwb2ludCB0byBhbnkgb2Yg
dGhlIFJlcGVhdGVkUHRyRmllbGQuCi1URVNUX0YoUmVwZWF0ZWRQdHJGaWVsZEl0ZXJhdG9yVGVz
dCwgVW5pbml0aWFsaXplZEl0ZXJhdG9yKSB7Ci0gIFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPjo6
aXRlcmF0b3IgaXRlcjsKLSAgRVhQRUNUX1RSVUUoaXRlciAhPSBwcm90b19hcnJheV8uYmVnaW4o
KSk7Ci0gIEVYUEVDVF9UUlVFKGl0ZXIgIT0gcHJvdG9fYXJyYXlfLmJlZ2luKCkgKyAxKTsKLSAg
RVhQRUNUX1RSVUUoaXRlciAhPSBwcm90b19hcnJheV8uYmVnaW4oKSArIDIpOwotICBFWFBFQ1Rf
VFJVRShpdGVyICE9IHByb3RvX2FycmF5Xy5iZWdpbigpICsgMyk7Ci0gIEVYUEVDVF9UUlVFKGl0
ZXIgIT0gcHJvdG9fYXJyYXlfLmVuZCgpKTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRJ
dGVyYXRvclRlc3QsIFNUTEFsZ29yaXRobXNfbG93ZXJfYm91bmQpIHsKLSAgcHJvdG9fYXJyYXlf
LkNsZWFyKCk7Ci0gIHByb3RvX2FycmF5Xy5BZGQoKS0+YXNzaWduKCJhIik7Ci0gIHByb3RvX2Fy
cmF5Xy5BZGQoKS0+YXNzaWduKCJjIik7Ci0gIHByb3RvX2FycmF5Xy5BZGQoKS0+YXNzaWduKCJk
Iik7Ci0gIHByb3RvX2FycmF5Xy5BZGQoKS0+YXNzaWduKCJuIik7Ci0gIHByb3RvX2FycmF5Xy5B
ZGQoKS0+YXNzaWduKCJwIik7Ci0gIHByb3RvX2FycmF5Xy5BZGQoKS0+YXNzaWduKCJ4Iik7Ci0g
IHByb3RvX2FycmF5Xy5BZGQoKS0+YXNzaWduKCJ5Iik7Ci0KLSAgc3RyaW5nIHYgPSAiZiI7Ci0g
IFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPQotICAgICAgc3Rk
Ojpsb3dlcl9ib3VuZChwcm90b19hcnJheV8uYmVnaW4oKSwgcHJvdG9fYXJyYXlfLmVuZCgpLCB2
KTsKLQotICBFWFBFQ1RfRVEoKml0LCAibiIpOwotICBFWFBFQ1RfVFJVRShpdCA9PSBwcm90b19h
cnJheV8uYmVnaW4oKSArIDMpOwotfQotCi1URVNUX0YoUmVwZWF0ZWRQdHJGaWVsZEl0ZXJhdG9y
VGVzdCwgTXV0YXRpb24pIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+OjppdGVyYXRvciBp
dGVyID0gcHJvdG9fYXJyYXlfLmJlZ2luKCk7Ci0gICppdGVyID0gInF1eCI7Ci0gIEVYUEVDVF9F
USgicXV4IiwgcHJvdG9fYXJyYXlfLkdldCgwKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xh
c3MgUmVwZWF0ZWRQdHJGaWVsZFB0cnNJdGVyYXRvclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVz
dCB7Ci0gcHJvdGVjdGVkOgotICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSB7Ci0gICAgcHJvdG9fYXJy
YXlfLkFkZCgpLT5hc3NpZ24oImZvbyIpOwotICAgIHByb3RvX2FycmF5Xy5BZGQoKS0+YXNzaWdu
KCJiYXIiKTsKLSAgICBwcm90b19hcnJheV8uQWRkKCktPmFzc2lnbigiYmF6Iik7Ci0gICAgY29u
c3RfcHJvdG9fYXJyYXlfID0gJnByb3RvX2FycmF5XzsKLSAgfQotCi0gIFJlcGVhdGVkUHRyRmll
bGQ8c3RyaW5nPiBwcm90b19hcnJheV87Ci0gIGNvbnN0IFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5n
PiogY29uc3RfcHJvdG9fYXJyYXlfOwotfTsKLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRQdHJz
SXRlcmF0b3JUZXN0LCBDb252ZXJ0aWJsZVB0cikgewotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmlu
Zz46OnBvaW50ZXJfaXRlcmF0b3IgaXRlciA9Ci0gICAgICBwcm90b19hcnJheV8ucG9pbnRlcl9i
ZWdpbigpOwotICBzdGF0aWNfY2FzdDx2b2lkPihpdGVyKTsKLX0KLQotVEVTVF9GKFJlcGVhdGVk
UHRyRmllbGRQdHJzSXRlcmF0b3JUZXN0LCBDb252ZXJ0aWJsZUNvbnN0UHRyKSB7Ci0gIFJlcGVh
dGVkUHRyRmllbGQ8c3RyaW5nPjo6Y29uc3RfcG9pbnRlcl9pdGVyYXRvciBpdGVyID0KLSAgICAg
IGNvbnN0X3Byb3RvX2FycmF5Xy0+cG9pbnRlcl9iZWdpbigpOwotICBzdGF0aWNfY2FzdDx2b2lk
PihpdGVyKTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRQdHJzSXRlcmF0b3JUZXN0LCBN
dXRhYmxlUHRySXRlcmF0aW9uKSB7Ci0gIFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPjo6cG9pbnRl
cl9pdGVyYXRvciBpdGVyID0KLSAgICAgIHByb3RvX2FycmF5Xy5wb2ludGVyX2JlZ2luKCk7Ci0g
IEVYUEVDVF9FUSgiZm9vIiwgKippdGVyKTsKLSAgKytpdGVyOwotICBFWFBFQ1RfRVEoImJhciIs
ICoqKGl0ZXIrKykpOwotICBFWFBFQ1RfRVEoImJheiIsICoqaXRlcik7Ci0gICsraXRlcjsKLSAg
RVhQRUNUX1RSVUUocHJvdG9fYXJyYXlfLnBvaW50ZXJfZW5kKCkgPT0gaXRlcik7Ci0gIEVYUEVD
VF9FUSgiYmF6IiwgKiooLS1wcm90b19hcnJheV8ucG9pbnRlcl9lbmQoKSkpOwotfQotCi1URVNU
X0YoUmVwZWF0ZWRQdHJGaWVsZFB0cnNJdGVyYXRvclRlc3QsIE11dGFibGVDb25zdFB0ckl0ZXJh
dGlvbikgewotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz46OmNvbnN0X3BvaW50ZXJfaXRlcmF0
b3IgaXRlciA9Ci0gICAgICBjb25zdF9wcm90b19hcnJheV8tPnBvaW50ZXJfYmVnaW4oKTsKLSAg
RVhQRUNUX0VRKCJmb28iLCAqKml0ZXIpOwotICArK2l0ZXI7Ci0gIEVYUEVDVF9FUSgiYmFyIiwg
KiooaXRlcisrKSk7Ci0gIEVYUEVDVF9FUSgiYmF6IiwgKippdGVyKTsKLSAgKytpdGVyOwotICBF
WFBFQ1RfVFJVRShjb25zdF9wcm90b19hcnJheV8tPnBvaW50ZXJfZW5kKCkgPT0gaXRlcik7Ci0g
IEVYUEVDVF9FUSgiYmF6IiwgKiooLS1jb25zdF9wcm90b19hcnJheV8tPnBvaW50ZXJfZW5kKCkp
KTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRQdHJzSXRlcmF0b3JUZXN0LCBSYW5kb21Q
dHJBY2Nlc3MpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+Ojpwb2ludGVyX2l0ZXJhdG9y
IGl0ZXIgPQotICAgICAgcHJvdG9fYXJyYXlfLnBvaW50ZXJfYmVnaW4oKTsKLSAgUmVwZWF0ZWRQ
dHJGaWVsZDxzdHJpbmc+Ojpwb2ludGVyX2l0ZXJhdG9yIGl0ZXIyID0gaXRlcjsKLSAgKytpdGVy
MjsKLSAgKytpdGVyMjsKLSAgRVhQRUNUX1RSVUUoaXRlciArIDIgPT0gaXRlcjIpOwotICBFWFBF
Q1RfVFJVRShpdGVyID09IGl0ZXIyIC0gMik7Ci0gIEVYUEVDVF9FUSgiYmF6IiwgKml0ZXJbMl0p
OwotICBFWFBFQ1RfRVEoImJheiIsICoqKGl0ZXIgKyAyKSk7Ci0gIEVYUEVDVF9FUSgzLCBwcm90
b19hcnJheV8uZW5kKCkgLSBwcm90b19hcnJheV8uYmVnaW4oKSk7Ci19Ci0KLVRFU1RfRihSZXBl
YXRlZFB0ckZpZWxkUHRyc0l0ZXJhdG9yVGVzdCwgUmFuZG9tQ29uc3RQdHJBY2Nlc3MpIHsKLSAg
UmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+Ojpjb25zdF9wb2ludGVyX2l0ZXJhdG9yIGl0ZXIgPQot
ICAgICAgY29uc3RfcHJvdG9fYXJyYXlfLT5wb2ludGVyX2JlZ2luKCk7Ci0gIFJlcGVhdGVkUHRy
RmllbGQ8c3RyaW5nPjo6Y29uc3RfcG9pbnRlcl9pdGVyYXRvciBpdGVyMiA9IGl0ZXI7Ci0gICsr
aXRlcjI7Ci0gICsraXRlcjI7Ci0gIEVYUEVDVF9UUlVFKGl0ZXIgKyAyID09IGl0ZXIyKTsKLSAg
RVhQRUNUX1RSVUUoaXRlciA9PSBpdGVyMiAtIDIpOwotICBFWFBFQ1RfRVEoImJheiIsICppdGVy
WzJdKTsKLSAgRVhQRUNUX0VRKCJiYXoiLCAqKihpdGVyICsgMikpOwotICBFWFBFQ1RfRVEoMywg
Y29uc3RfcHJvdG9fYXJyYXlfLT5lbmQoKSAtIGNvbnN0X3Byb3RvX2FycmF5Xy0+YmVnaW4oKSk7
Ci19Ci0KLVRFU1RfRihSZXBlYXRlZFB0ckZpZWxkUHRyc0l0ZXJhdG9yVGVzdCwgQ29tcGFyYWJs
ZVB0cikgewotICBSZXBlYXRlZFB0ckZpZWxkPHN0cmluZz46OnBvaW50ZXJfaXRlcmF0b3IgaXRl
ciA9Ci0gICAgICBwcm90b19hcnJheV8ucG9pbnRlcl9iZWdpbigpOwotICBSZXBlYXRlZFB0ckZp
ZWxkPHN0cmluZz46OnBvaW50ZXJfaXRlcmF0b3IgaXRlcjIgPSBpdGVyICsgMTsKLSAgRVhQRUNU
X1RSVUUoaXRlciA9PSBpdGVyKTsKLSAgRVhQRUNUX1RSVUUoaXRlciAhPSBpdGVyMik7Ci0gIEVY
UEVDVF9UUlVFKGl0ZXIgPCBpdGVyMik7Ci0gIEVYUEVDVF9UUlVFKGl0ZXIgPD0gaXRlcjIpOwot
ICBFWFBFQ1RfVFJVRShpdGVyIDw9IGl0ZXIpOwotICBFWFBFQ1RfVFJVRShpdGVyMiA+IGl0ZXIp
OwotICBFWFBFQ1RfVFJVRShpdGVyMiA+PSBpdGVyKTsKLSAgRVhQRUNUX1RSVUUoaXRlciA+PSBp
dGVyKTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRQdHJzSXRlcmF0b3JUZXN0LCBDb21w
YXJhYmxlQ29uc3RQdHIpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+Ojpjb25zdF9wb2lu
dGVyX2l0ZXJhdG9yIGl0ZXIgPQotICAgICAgY29uc3RfcHJvdG9fYXJyYXlfLT5wb2ludGVyX2Jl
Z2luKCk7Ci0gIFJlcGVhdGVkUHRyRmllbGQ8c3RyaW5nPjo6Y29uc3RfcG9pbnRlcl9pdGVyYXRv
ciBpdGVyMiA9IGl0ZXIgKyAxOwotICBFWFBFQ1RfVFJVRShpdGVyID09IGl0ZXIpOwotICBFWFBF
Q1RfVFJVRShpdGVyICE9IGl0ZXIyKTsKLSAgRVhQRUNUX1RSVUUoaXRlciA8IGl0ZXIyKTsKLSAg
RVhQRUNUX1RSVUUoaXRlciA8PSBpdGVyMik7Ci0gIEVYUEVDVF9UUlVFKGl0ZXIgPD0gaXRlcik7
Ci0gIEVYUEVDVF9UUlVFKGl0ZXIyID4gaXRlcik7Ci0gIEVYUEVDVF9UUlVFKGl0ZXIyID49IGl0
ZXIpOwotICBFWFBFQ1RfVFJVRShpdGVyID49IGl0ZXIpOwotfQotCi0vLyBVbmluaXRpYWxpemVk
IGl0ZXJhdG9yIGRvZXMgbm90IHBvaW50IHRvIGFueSBvZiB0aGUgUmVwZWF0ZWRQdHJPdmVyUHRy
cy4KLS8vIERlcmVmZXJlbmNpbmcgYW4gdW5pbml0aWFsaXplZCBpdGVyYXRvciBjcmFzaGVzIHRo
ZSBwcm9jZXNzLgotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRQdHJzSXRlcmF0b3JUZXN0LCBVbmlu
aXRpYWxpemVkUHRySXRlcmF0b3IpIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+Ojpwb2lu
dGVyX2l0ZXJhdG9yIGl0ZXI7Ci0gIEVYUEVDVF9UUlVFKGl0ZXIgIT0gcHJvdG9fYXJyYXlfLnBv
aW50ZXJfYmVnaW4oKSk7Ci0gIEVYUEVDVF9UUlVFKGl0ZXIgIT0gcHJvdG9fYXJyYXlfLnBvaW50
ZXJfYmVnaW4oKSArIDEpOwotICBFWFBFQ1RfVFJVRShpdGVyICE9IHByb3RvX2FycmF5Xy5wb2lu
dGVyX2JlZ2luKCkgKyAyKTsKLSAgRVhQRUNUX1RSVUUoaXRlciAhPSBwcm90b19hcnJheV8ucG9p
bnRlcl9iZWdpbigpICsgMyk7Ci0gIEVYUEVDVF9UUlVFKGl0ZXIgIT0gcHJvdG9fYXJyYXlfLnBv
aW50ZXJfZW5kKCkpOwotfQotCi1URVNUX0YoUmVwZWF0ZWRQdHJGaWVsZFB0cnNJdGVyYXRvclRl
c3QsIFVuaW5pdGlhbGl6ZWRDb25zdFB0ckl0ZXJhdG9yKSB7Ci0gIFJlcGVhdGVkUHRyRmllbGQ8
c3RyaW5nPjo6Y29uc3RfcG9pbnRlcl9pdGVyYXRvciBpdGVyOwotICBFWFBFQ1RfVFJVRShpdGVy
ICE9IGNvbnN0X3Byb3RvX2FycmF5Xy0+cG9pbnRlcl9iZWdpbigpKTsKLSAgRVhQRUNUX1RSVUUo
aXRlciAhPSBjb25zdF9wcm90b19hcnJheV8tPnBvaW50ZXJfYmVnaW4oKSArIDEpOwotICBFWFBF
Q1RfVFJVRShpdGVyICE9IGNvbnN0X3Byb3RvX2FycmF5Xy0+cG9pbnRlcl9iZWdpbigpICsgMik7
Ci0gIEVYUEVDVF9UUlVFKGl0ZXIgIT0gY29uc3RfcHJvdG9fYXJyYXlfLT5wb2ludGVyX2JlZ2lu
KCkgKyAzKTsKLSAgRVhQRUNUX1RSVUUoaXRlciAhPSBjb25zdF9wcm90b19hcnJheV8tPnBvaW50
ZXJfZW5kKCkpOwotfQotCi0vLyBUaGlzIGNvbXBhcmlzb24gZnVuY3RvciBpcyByZXF1aXJlZCBi
eSB0aGUgdGVzdHMgZm9yIFJlcGVhdGVkUHRyT3ZlclB0cnMuCi0vLyBUaGV5IG9wZXJhdGUgb24g
c3RyaW5ncyBhbmQgbmVlZCB0byBjb21wYXJlIHN0cmluZ3MgYXMgc3RyaW5ncyBpbgotLy8gYW55
IHN0bCBhbGdvcml0aG0sIGV2ZW4gdGhvdWdoIHRoZSBpdGVyYXRvciByZXR1cm5zIGEgcG9pbnRl
ciB0byBhIHN0cmluZwotLy8gLSBpLmUuICppdGVyIGhhcyB0eXBlIHN0cmluZyouCi1zdHJ1Y3Qg
U3RyaW5nTGVzc1RoYW4gewotICBib29sIG9wZXJhdG9yKCkoY29uc3Qgc3RyaW5nKiB6LCBjb25z
dCBzdHJpbmcmIHkpIHsKLSAgICByZXR1cm4gKnogPCB5OwotICB9Ci0gIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBzdHJpbmcqIHosIGNvbnN0IHN0cmluZyogeSkgY29uc3QgeyByZXR1cm4gKnogPCAq
eTsgfQotfTsKLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRQdHJzSXRlcmF0b3JUZXN0LCBQdHJT
VExBbGdvcml0aG1zX2xvd2VyX2JvdW5kKSB7Ci0gIHByb3RvX2FycmF5Xy5DbGVhcigpOwotICBw
cm90b19hcnJheV8uQWRkKCktPmFzc2lnbigiYSIpOwotICBwcm90b19hcnJheV8uQWRkKCktPmFz
c2lnbigiYyIpOwotICBwcm90b19hcnJheV8uQWRkKCktPmFzc2lnbigiZCIpOwotICBwcm90b19h
cnJheV8uQWRkKCktPmFzc2lnbigibiIpOwotICBwcm90b19hcnJheV8uQWRkKCktPmFzc2lnbigi
cCIpOwotICBwcm90b19hcnJheV8uQWRkKCktPmFzc2lnbigieCIpOwotICBwcm90b19hcnJheV8u
QWRkKCktPmFzc2lnbigieSIpOwotCi0gIHsKLSAgICBzdHJpbmcgdiA9ICJmIjsKLSAgICBSZXBl
YXRlZFB0ckZpZWxkPHN0cmluZz46OnBvaW50ZXJfaXRlcmF0b3IgaXQgPQotICAgICAgICBzdGQ6
Omxvd2VyX2JvdW5kKHByb3RvX2FycmF5Xy5wb2ludGVyX2JlZ2luKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvdG9fYXJyYXlfLnBvaW50ZXJfZW5kKCksICZ2LCBTdHJpbmdMZXNzVGhh
bigpKTsKLQotICAgIEdPT0dMRV9DSEVDSygqaXQgIT0gTlVMTCk7Ci0KLSAgICBFWFBFQ1RfRVEo
KippdCwgIm4iKTsKLSAgICBFWFBFQ1RfVFJVRShpdCA9PSBwcm90b19hcnJheV8ucG9pbnRlcl9i
ZWdpbigpICsgMyk7Ci0gIH0KLSAgewotICAgIHN0cmluZyB2ID0gImYiOwotICAgIFJlcGVhdGVk
UHRyRmllbGQ8c3RyaW5nPjo6Y29uc3RfcG9pbnRlcl9pdGVyYXRvciBpdCA9IHN0ZDo6bG93ZXJf
Ym91bmQoCi0gICAgICAgIGNvbnN0X3Byb3RvX2FycmF5Xy0+cG9pbnRlcl9iZWdpbigpLCBjb25z
dF9wcm90b19hcnJheV8tPnBvaW50ZXJfZW5kKCksCi0gICAgICAgICZ2LCBTdHJpbmdMZXNzVGhh
bigpKTsKLQotICAgIEdPT0dMRV9DSEVDSygqaXQgIT0gTlVMTCk7Ci0KLSAgICBFWFBFQ1RfRVEo
KippdCwgIm4iKTsKLSAgICBFWFBFQ1RfVFJVRShpdCA9PSBjb25zdF9wcm90b19hcnJheV8tPnBv
aW50ZXJfYmVnaW4oKSArIDMpOwotICB9Ci19Ci0KLVRFU1RfRihSZXBlYXRlZFB0ckZpZWxkUHRy
c0l0ZXJhdG9yVGVzdCwgUHRyTXV0YXRpb24pIHsKLSAgUmVwZWF0ZWRQdHJGaWVsZDxzdHJpbmc+
Ojpwb2ludGVyX2l0ZXJhdG9yIGl0ZXIgPQotICAgICAgcHJvdG9fYXJyYXlfLnBvaW50ZXJfYmVn
aW4oKTsKLSAgKippdGVyID0gInF1eCI7Ci0gIEVYUEVDVF9FUSgicXV4IiwgcHJvdG9fYXJyYXlf
LkdldCgwKSk7Ci0KLSAgRVhQRUNUX0VRKCJiYXIiLCBwcm90b19hcnJheV8uR2V0KDEpKTsKLSAg
RVhQRUNUX0VRKCJiYXoiLCBwcm90b19hcnJheV8uR2V0KDIpKTsKLSAgKytpdGVyOwotICBkZWxl
dGUgKml0ZXI7Ci0gICppdGVyID0gbmV3IHN0cmluZygiYSIpOwotICArK2l0ZXI7Ci0gIGRlbGV0
ZSAqaXRlcjsKLSAgKml0ZXIgPSBuZXcgc3RyaW5nKCJiIik7Ci0gIEVYUEVDVF9FUSgiYSIsIHBy
b3RvX2FycmF5Xy5HZXQoMSkpOwotICBFWFBFQ1RfRVEoImIiLCBwcm90b19hcnJheV8uR2V0KDIp
KTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkUHRyRmllbGRQdHJzSXRlcmF0b3JUZXN0LCBTb3J0KSB7
Ci0gIHByb3RvX2FycmF5Xy5BZGQoKS0+YXNzaWduKCJjIik7Ci0gIHByb3RvX2FycmF5Xy5BZGQo
KS0+YXNzaWduKCJkIik7Ci0gIHByb3RvX2FycmF5Xy5BZGQoKS0+YXNzaWduKCJuIik7Ci0gIHBy
b3RvX2FycmF5Xy5BZGQoKS0+YXNzaWduKCJwIik7Ci0gIHByb3RvX2FycmF5Xy5BZGQoKS0+YXNz
aWduKCJhIik7Ci0gIHByb3RvX2FycmF5Xy5BZGQoKS0+YXNzaWduKCJ5Iik7Ci0gIHByb3RvX2Fy
cmF5Xy5BZGQoKS0+YXNzaWduKCJ4Iik7Ci0gIEVYUEVDVF9FUSgiZm9vIiwgcHJvdG9fYXJyYXlf
LkdldCgwKSk7Ci0gIEVYUEVDVF9FUSgibiIsIHByb3RvX2FycmF5Xy5HZXQoNSkpOwotICBFWFBF
Q1RfRVEoIngiLCBwcm90b19hcnJheV8uR2V0KDkpKTsKLSAgc3RkOjpzb3J0KHByb3RvX2FycmF5
Xy5wb2ludGVyX2JlZ2luKCksIHByb3RvX2FycmF5Xy5wb2ludGVyX2VuZCgpLAotICAgICAgICAg
ICAgU3RyaW5nTGVzc1RoYW4oKSk7Ci0gIEVYUEVDVF9FUSgiYSIsIHByb3RvX2FycmF5Xy5HZXQo
MCkpOwotICBFWFBFQ1RfRVEoImJheiIsIHByb3RvX2FycmF5Xy5HZXQoMikpOwotICBFWFBFQ1Rf
RVEoInkiLCBwcm90b19hcnJheV8uR2V0KDkpKTsKLX0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gVW5pdC10ZXN0cyBmb3IgdGhlIGluc2VydCBpdGVyYXRvcnMKLS8vIGdvb2dsZTo6
cHJvdG9idWY6OlJlcGVhdGVkRmllbGRCYWNrSW5zZXJ0ZXIsCi0vLyBnb29nbGU6OnByb3RvYnVm
OjpBbGxvY2F0ZWRSZXBlYXRlZFB0ckZpZWxkQmFja0luc2VydGVyCi0vLyBQb3J0ZWQgZnJvbSB1
dGlsL2d0bC9wcm90by1hcnJheS1pdGVyYXRvcnNfdW5pdHRlc3QuCi0KLWNsYXNzIFJlcGVhdGVk
RmllbGRJbnNlcnRpb25JdGVyYXRvcnNUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHBy
b3RlY3RlZDoKLSAgc3RkOjpsaXN0PGRvdWJsZT4gaGFsdmVzOwotICBzdGQ6Omxpc3Q8aW50PiBm
aWJvbmFjY2k7Ci0gIHN0ZDo6dmVjdG9yPHN0cmluZz4gd29yZHM7Ci0gIHR5cGVkZWYgVGVzdEFs
bFR5cGVzOjpOZXN0ZWRNZXNzYWdlIE5lc3RlZDsKLSAgTmVzdGVkIG5lc3RlZHNbMl07Ci0gIHN0
ZDo6dmVjdG9yPE5lc3RlZCo+IG5lc3RlZF9wdHJzOwotICBUZXN0QWxsVHlwZXMgcHJvdG9idWZm
ZXI7Ci0KLSAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIGZpYm9uYWNjaS5wdXNoX2JhY2so
MSk7Ci0gICAgZmlib25hY2NpLnB1c2hfYmFjaygxKTsKLSAgICBmaWJvbmFjY2kucHVzaF9iYWNr
KDIpOwotICAgIGZpYm9uYWNjaS5wdXNoX2JhY2soMyk7Ci0gICAgZmlib25hY2NpLnB1c2hfYmFj
ayg1KTsKLSAgICBmaWJvbmFjY2kucHVzaF9iYWNrKDgpOwotICAgIHN0ZDo6Y29weShmaWJvbmFj
Y2kuYmVnaW4oKSwgZmlib25hY2NpLmVuZCgpLAotICAgICAgICAgICAgICBSZXBlYXRlZEZpZWxk
QmFja0luc2VydGVyKHByb3RvYnVmZmVyLm11dGFibGVfcmVwZWF0ZWRfaW50MzIoKSkpOwotCi0g
ICAgaGFsdmVzLnB1c2hfYmFjaygxLjApOwotICAgIGhhbHZlcy5wdXNoX2JhY2soMC41KTsKLSAg
ICBoYWx2ZXMucHVzaF9iYWNrKDAuMjUpOwotICAgIGhhbHZlcy5wdXNoX2JhY2soMC4xMjUpOwot
ICAgIGhhbHZlcy5wdXNoX2JhY2soMC4wNjI1KTsKLSAgICBzdGQ6OmNvcHkoaGFsdmVzLmJlZ2lu
KCksIGhhbHZlcy5lbmQoKSwKLSAgICAgICAgICAgICAgUmVwZWF0ZWRGaWVsZEJhY2tJbnNlcnRl
cihwcm90b2J1ZmZlci5tdXRhYmxlX3JlcGVhdGVkX2RvdWJsZSgpKSk7Ci0KLSAgICB3b3Jkcy5w
dXNoX2JhY2soIkFibGUiKTsKLSAgICB3b3Jkcy5wdXNoX2JhY2soIndhcyIpOwotICAgIHdvcmRz
LnB1c2hfYmFjaygiSSIpOwotICAgIHdvcmRzLnB1c2hfYmFjaygiZXJlIik7Ci0gICAgd29yZHMu
cHVzaF9iYWNrKCJJIik7Ci0gICAgd29yZHMucHVzaF9iYWNrKCJzYXciKTsKLSAgICB3b3Jkcy5w
dXNoX2JhY2soIkVsYmEiKTsKLSAgICBzdGQ6OmNvcHkod29yZHMuYmVnaW4oKSwgd29yZHMuZW5k
KCksCi0gICAgICAgICAgICAgIFJlcGVhdGVkRmllbGRCYWNrSW5zZXJ0ZXIocHJvdG9idWZmZXIu
bXV0YWJsZV9yZXBlYXRlZF9zdHJpbmcoKSkpOwotCi0gICAgbmVzdGVkc1swXS5zZXRfYmIoMTcp
OwotICAgIG5lc3RlZHNbMV0uc2V0X2JiKDQ3MTEpOwotICAgIHN0ZDo6Y29weSgmbmVzdGVkc1sw
XSwgJm5lc3RlZHNbMl0sCi0gICAgICAgICAgICAgIFJlcGVhdGVkRmllbGRCYWNrSW5zZXJ0ZXIo
Ci0gICAgICAgICAgICAgICAgICBwcm90b2J1ZmZlci5tdXRhYmxlX3JlcGVhdGVkX25lc3RlZF9t
ZXNzYWdlKCkpKTsKLQotICAgIG5lc3RlZF9wdHJzLnB1c2hfYmFjayhuZXcgTmVzdGVkKTsKLSAg
ICBuZXN0ZWRfcHRycy5iYWNrKCktPnNldF9iYigxNzApOwotICAgIG5lc3RlZF9wdHJzLnB1c2hf
YmFjayhuZXcgTmVzdGVkKTsKLSAgICBuZXN0ZWRfcHRycy5iYWNrKCktPnNldF9iYig0NzExMCk7
Ci0gICAgc3RkOjpjb3B5KG5lc3RlZF9wdHJzLmJlZ2luKCksIG5lc3RlZF9wdHJzLmVuZCgpLAot
ICAgICAgICAgICAgICBSZXBlYXRlZEZpZWxkQmFja0luc2VydGVyKAotICAgICAgICAgICAgICAg
ICAgcHJvdG9idWZmZXIubXV0YWJsZV9yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSgpKSk7Ci0gIH0K
LQotICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSB7Ci0gICAgU1RMRGVsZXRlQ29udGFpbmVyUG9p
bnRlcnMobmVzdGVkX3B0cnMuYmVnaW4oKSwgbmVzdGVkX3B0cnMuZW5kKCkpOwotICB9Ci19Owot
Ci1URVNUX0YoUmVwZWF0ZWRGaWVsZEluc2VydGlvbkl0ZXJhdG9yc1Rlc3QsIEZpYm9uYWNjaSkg
ewotICBFWFBFQ1RfVFJVRShzdGQ6OmVxdWFsKGZpYm9uYWNjaS5iZWdpbigpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpYm9uYWNjaS5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm90b2J1ZmZlci5yZXBlYXRlZF9pbnQzMigpLmJlZ2luKCkpKTsKLSAgRVhQRUNUX1RSVUUo
c3RkOjplcXVhbChwcm90b2J1ZmZlci5yZXBlYXRlZF9pbnQzMigpLmJlZ2luKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdG9idWZmZXIucmVwZWF0ZWRfaW50MzIoKS5lbmQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWJvbmFjY2kuYmVnaW4oKSkpOwotfQotCi1URVNUX0Yo
UmVwZWF0ZWRGaWVsZEluc2VydGlvbkl0ZXJhdG9yc1Rlc3QsIEhhbHZlcykgewotICBFWFBFQ1Rf
VFJVRShzdGQ6OmVxdWFsKGhhbHZlcy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGhhbHZlcy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2J1ZmZlci5yZXBl
YXRlZF9kb3VibGUoKS5iZWdpbigpKSk7Ci0gIEVYUEVDVF9UUlVFKHN0ZDo6ZXF1YWwocHJvdG9i
dWZmZXIucmVwZWF0ZWRfZG91YmxlKCkuYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm90b2J1ZmZlci5yZXBlYXRlZF9kb3VibGUoKS5lbmQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBoYWx2ZXMuYmVnaW4oKSkpOwotfQotCi1URVNUX0YoUmVwZWF0ZWRGaWVsZEluc2Vy
dGlvbkl0ZXJhdG9yc1Rlc3QsIFdvcmRzKSB7Ci0gIEFTU0VSVF9FUSh3b3Jkcy5zaXplKCksIHBy
b3RvYnVmZmVyLnJlcGVhdGVkX3N0cmluZ19zaXplKCkpOwotICBmb3IgKGludCBpID0gMDsgaSA8
IHdvcmRzLnNpemUoKTsgKytpKQotICAgIEVYUEVDVF9FUSh3b3Jkcy5hdChpKSwgcHJvdG9idWZm
ZXIucmVwZWF0ZWRfc3RyaW5nKGkpKTsKLX0KLQotVEVTVF9GKFJlcGVhdGVkRmllbGRJbnNlcnRp
b25JdGVyYXRvcnNUZXN0LCBXb3JkczIpIHsKLSAgd29yZHMuY2xlYXIoKTsKLSAgd29yZHMucHVz
aF9iYWNrKCJzaW5nIik7Ci0gIHdvcmRzLnB1c2hfYmFjaygiYSIpOwotICB3b3Jkcy5wdXNoX2Jh
Y2soInNvbmciKTsKLSAgd29yZHMucHVzaF9iYWNrKCJvZiIpOwotICB3b3Jkcy5wdXNoX2JhY2so
InNpeCIpOwotICB3b3Jkcy5wdXNoX2JhY2soInBlbmNlIik7Ci0gIHByb3RvYnVmZmVyLm11dGFi
bGVfcmVwZWF0ZWRfc3RyaW5nKCktPkNsZWFyKCk7Ci0gIHN0ZDo6Y29weSh3b3Jkcy5iZWdpbigp
LCB3b3Jkcy5lbmQoKSwgUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRlcigKLSAgICAgIHByb3Rv
YnVmZmVyLm11dGFibGVfcmVwZWF0ZWRfc3RyaW5nKCkpKTsKLSAgQVNTRVJUX0VRKHdvcmRzLnNp
emUoKSwgcHJvdG9idWZmZXIucmVwZWF0ZWRfc3RyaW5nX3NpemUoKSk7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgd29yZHMuc2l6ZSgpOyArK2kpCi0gICAgRVhQRUNUX0VRKHdvcmRzLmF0KGkpLCBw
cm90b2J1ZmZlci5yZXBlYXRlZF9zdHJpbmcoaSkpOwotfQotCi1URVNUX0YoUmVwZWF0ZWRGaWVs
ZEluc2VydGlvbkl0ZXJhdG9yc1Rlc3QsIE5lc3RlZHMpIHsKLSAgQVNTRVJUX0VRKHByb3RvYnVm
ZmVyLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX3NpemUoKSwgNCk7Ci0gIEVYUEVDVF9FUShwcm90
b2J1ZmZlci5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSgwKS5iYigpLCAxNyk7Ci0gIEVYUEVDVF9F
UShwcm90b2J1ZmZlci5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSgxKS5iYigpLCA0NzExKTsKLSAg
RVhQRUNUX0VRKHByb3RvYnVmZmVyLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKDIpLmJiKCksIDE3
MCk7Ci0gIEVYUEVDVF9FUShwcm90b2J1ZmZlci5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSgzKS5i
YigpLCA0NzExMCk7Ci19Ci0KLVRFU1RfRihSZXBlYXRlZEZpZWxkSW5zZXJ0aW9uSXRlcmF0b3Jz
VGVzdCwKLSAgICAgICBBbGxvY2F0ZWRSZXBlYXRlZFB0ckZpZWxkV2l0aFN0cmluZ0ludERhdGEp
IHsKLSAgdmVjdG9yPE5lc3RlZCo+IGRhdGE7Ci0gIFRlc3RBbGxUeXBlcyBnb2xkZW5wcm90bzsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgTmVzdGVkKiBuZXdfZGF0YSA9
IG5ldyBOZXN0ZWQ7Ci0gICAgbmV3X2RhdGEtPnNldF9iYihpKTsKLSAgICBkYXRhLnB1c2hfYmFj
ayhuZXdfZGF0YSk7Ci0KLSAgICBuZXdfZGF0YSA9IGdvbGRlbnByb3RvLmFkZF9yZXBlYXRlZF9u
ZXN0ZWRfbWVzc2FnZSgpOwotICAgIG5ld19kYXRhLT5zZXRfYmIoaSk7Ci0gIH0KLSAgVGVzdEFs
bFR5cGVzIHRlc3Rwcm90bzsKLSAgc3RkOjpjb3B5KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwK
LSAgICAgICAgICAgIEFsbG9jYXRlZFJlcGVhdGVkUHRyRmllbGRCYWNrSW5zZXJ0ZXIoCi0gICAg
ICAgICAgICAgICAgdGVzdHByb3RvLm11dGFibGVfcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UoKSkp
OwotICBFWFBFQ1RfRVEodGVzdHByb3RvLkRlYnVnU3RyaW5nKCksIGdvbGRlbnByb3RvLkRlYnVn
U3RyaW5nKCkpOwotfQotCi1URVNUX0YoUmVwZWF0ZWRGaWVsZEluc2VydGlvbkl0ZXJhdG9yc1Rl
c3QsCi0gICAgICAgQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVsZFdpdGhTdHJpbmcpIHsKLSAgdmVj
dG9yPHN0cmluZyo+IGRhdGE7Ci0gIFRlc3RBbGxUeXBlcyBnb2xkZW5wcm90bzsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgc3RyaW5nKiBuZXdfZGF0YSA9IG5ldyBzdHJp
bmc7Ci0gICAgKm5ld19kYXRhID0gIm5hbWUtIiArIFNpbXBsZUl0b2EoaSk7Ci0gICAgZGF0YS5w
dXNoX2JhY2sobmV3X2RhdGEpOwotCi0gICAgbmV3X2RhdGEgPSBnb2xkZW5wcm90by5hZGRfcmVw
ZWF0ZWRfc3RyaW5nKCk7Ci0gICAgKm5ld19kYXRhID0gIm5hbWUtIiArIFNpbXBsZUl0b2EoaSk7
Ci0gIH0KLSAgVGVzdEFsbFR5cGVzIHRlc3Rwcm90bzsKLSAgc3RkOjpjb3B5KGRhdGEuYmVnaW4o
KSwgZGF0YS5lbmQoKSwgQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVsZEJhY2tJbnNlcnRlcigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rwcm90by5tdXRhYmxl
X3JlcGVhdGVkX3N0cmluZygpKSk7Ci0gIEVYUEVDVF9FUSh0ZXN0cHJvdG8uRGVidWdTdHJpbmco
KSwgZ29sZGVucHJvdG8uRGVidWdTdHJpbmcoKSk7Ci19Ci0KLVRFU1RfRihSZXBlYXRlZEZpZWxk
SW5zZXJ0aW9uSXRlcmF0b3JzVGVzdCwKLSAgICAgICBVbnNhZmVBcmVuYUFsbG9jYXRlZFJlcGVh
dGVkUHRyRmllbGRXaXRoU3RyaW5nSW50RGF0YSkgewotICB2ZWN0b3I8TmVzdGVkKj4gZGF0YTsK
LSAgVGVzdEFsbFR5cGVzIGdvbGRlbnByb3RvOwotICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyAr
K2kpIHsKLSAgICBOZXN0ZWQqIG5ld19kYXRhID0gbmV3IE5lc3RlZDsKLSAgICBuZXdfZGF0YS0+
c2V0X2JiKGkpOwotICAgIGRhdGEucHVzaF9iYWNrKG5ld19kYXRhKTsKLQotICAgIG5ld19kYXRh
ID0gZ29sZGVucHJvdG8uYWRkX3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlKCk7Ci0gICAgbmV3X2Rh
dGEtPnNldF9iYihpKTsKLSAgfQotICBUZXN0QWxsVHlwZXMgdGVzdHByb3RvOwotICBzdGQ6OmNv
cHkoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLAotICAgICAgICAgICAgVW5zYWZlQXJlbmFBbGxv
Y2F0ZWRSZXBlYXRlZFB0ckZpZWxkQmFja0luc2VydGVyKAotICAgICAgICAgICAgICAgIHRlc3Rw
cm90by5tdXRhYmxlX3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlKCkpKTsKLSAgRVhQRUNUX0VRKHRl
c3Rwcm90by5EZWJ1Z1N0cmluZygpLCBnb2xkZW5wcm90by5EZWJ1Z1N0cmluZygpKTsKLX0KLQot
VEVTVF9GKFJlcGVhdGVkRmllbGRJbnNlcnRpb25JdGVyYXRvcnNUZXN0LAotICAgICAgIFVuc2Fm
ZUFyZW5hQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVsZFdpdGhTdHJpbmcpIHsKLSAgdmVjdG9yPHN0
cmluZyo+IGRhdGE7Ci0gIFRlc3RBbGxUeXBlcyBnb2xkZW5wcm90bzsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgc3RyaW5nKiBuZXdfZGF0YSA9IG5ldyBzdHJpbmc7Ci0g
ICAgKm5ld19kYXRhID0gIm5hbWUtIiArIFNpbXBsZUl0b2EoaSk7Ci0gICAgZGF0YS5wdXNoX2Jh
Y2sobmV3X2RhdGEpOwotCi0gICAgbmV3X2RhdGEgPSBnb2xkZW5wcm90by5hZGRfcmVwZWF0ZWRf
c3RyaW5nKCk7Ci0gICAgKm5ld19kYXRhID0gIm5hbWUtIiArIFNpbXBsZUl0b2EoaSk7Ci0gIH0K
LSAgVGVzdEFsbFR5cGVzIHRlc3Rwcm90bzsKLSAgc3RkOjpjb3B5KGRhdGEuYmVnaW4oKSwgZGF0
YS5lbmQoKSwKLSAgICAgICAgICAgIFVuc2FmZUFyZW5hQWxsb2NhdGVkUmVwZWF0ZWRQdHJGaWVs
ZEJhY2tJbnNlcnRlcigKLSAgICAgICAgICAgICAgICB0ZXN0cHJvdG8ubXV0YWJsZV9yZXBlYXRl
ZF9zdHJpbmcoKSkpOwotICBFWFBFQ1RfRVEodGVzdHByb3RvLkRlYnVnU3RyaW5nKCksIGdvbGRl
bnByb3RvLkRlYnVnU3RyaW5nKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvc2VydmljZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zZXJ2aWNlLmNj
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmE5MTlkYWE3ZTZlYTMyNDQxYzg2OGMy
Mzc5MDk4YTI4ZmNmYWI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zZXJ2aWNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEs
NDYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhv
cjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5h
bCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBE
ZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3NlcnZpY2UuaD4K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1TZXJ2aWNlOjp+
U2VydmljZSgpIHt9Ci1ScGNDaGFubmVsOjp+UnBjQ2hhbm5lbCgpIHt9Ci1ScGNDb250cm9sbGVy
Ojp+UnBjQ29udHJvbGxlcigpIHt9Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAv
LyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc2Vydmlj
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3NlcnZpY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWQ2Zjk2ODU0OGZlNjlkYzRmZmFjMGUzZTU2ZmIwMzQxNjgxZWU2Mi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvc2VydmljZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChL
ZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNp
Z24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0v
LyBERVBSRUNBVEVEOiAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGFic3RyYWN0IGludGVyZmFj
ZXMgdW5kZXJseWluZyBwcm90bzIKLS8vIFJQQyBzZXJ2aWNlcy4gIFRoZXNlIGFyZSBpbnRlbnRl
ZCB0byBiZSBpbmRlcGVuZGVudCBvZiBhbnkgcGFydGljdWxhciBSUEMKLS8vIGltcGxlbWVudGF0
aW9uLCBzbyB0aGF0IHByb3RvMiBzZXJ2aWNlcyBjYW4gYmUgdXNlZCBvbiB0b3Agb2YgYSB2YXJp
ZXR5Ci0vLyBvZiBpbXBsZW1lbnRhdGlvbnMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMi4zLjAs
IFJQQyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkCi0vLyBub3QgdHJ5IHRvIGJ1aWxkIG9uIHRoZXNl
LCBidXQgc2hvdWxkIGluc3RlYWQgcHJvdmlkZSBjb2RlIGdlbmVyYXRvciBwbHVnaW5zCi0vLyB3
aGljaCBnZW5lcmF0ZSBjb2RlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIFJQQyBpbXBsZW1l
bnRhdGlvbi4gIFRoaXMgd2F5Ci0vLyB0aGUgZ2VuZXJhdGVkIGNvZGUgY2FuIGJlIG1vcmUgYXBw
cm9wcmlhdGUgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiB1c2UKLS8vIGFuZCBjYW4gYXZvaWQg
dW5uZWNlc3NhcnkgbGF5ZXJzIG9mIGluZGlyZWN0aW9uLgotLy8KLS8vCi0vLyBXaGVuIHlvdSB1
c2UgdGhlIHByb3RvY29sIGNvbXBpbGVyIHRvIGNvbXBpbGUgYSBzZXJ2aWNlIGRlZmluaXRpb24s
IGl0Ci0vLyBnZW5lcmF0ZXMgdHdvIGNsYXNzZXM6ICBBbiBhYnN0cmFjdCBpbnRlcmZhY2UgZm9y
IHRoZSBzZXJ2aWNlICh3aXRoCi0vLyBtZXRob2RzIG1hdGNoaW5nIHRoZSBzZXJ2aWNlIGRlZmlu
aXRpb24pIGFuZCBhICJzdHViIiBpbXBsZW1lbnRhdGlvbi4KLS8vIEEgc3R1YiBpcyBqdXN0IGEg
dHlwZS1zYWZlIHdyYXBwZXIgYXJvdW5kIGFuIFJwY0NoYW5uZWwgd2hpY2ggZW11bGF0ZXMgYQot
Ly8gbG9jYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlcnZpY2UuCi0vLwotLy8gRm9yIGV4YW1w
bGUsIHRoZSBzZXJ2aWNlIGRlZmluaXRpb246Ci0vLyAgIHNlcnZpY2UgTXlTZXJ2aWNlIHsKLS8v
ICAgICBycGMgRm9vKE15UmVxdWVzdCkgcmV0dXJucyhNeVJlc3BvbnNlKTsKLS8vICAgfQotLy8g
d2lsbCBnZW5lcmF0ZSBhYnN0cmFjdCBpbnRlcmZhY2UgIk15U2VydmljZSIgYW5kIGNsYXNzICJN
eVNlcnZpY2U6OlN0dWIiLgotLy8gWW91IGNvdWxkIGltcGxlbWVudCBhIE15U2VydmljZSBhcyBm
b2xsb3dzOgotLy8gICBjbGFzcyBNeVNlcnZpY2VJbXBsIDogcHVibGljIE15U2VydmljZSB7Ci0v
LyAgICBwdWJsaWM6Ci0vLyAgICAgTXlTZXJ2aWNlSW1wbCgpIHt9Ci0vLyAgICAgfk15U2Vydmlj
ZUltcGwoKSB7fQotLy8KLS8vICAgICAvLyBpbXBsZW1lbnRzIE15U2VydmljZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyAgICAgdm9pZCBGb28oZ29vZ2xl
Ojpwcm90b2J1Zjo6UnBjQ29udHJvbGxlciogY29udHJvbGxlciwKLS8vICAgICAgICAgICAgICBj
b25zdCBNeVJlcXVlc3QqIHJlcXVlc3QsCi0vLyAgICAgICAgICAgICAgTXlSZXNwb25zZSogcmVz
cG9uc2UsCi0vLyAgICAgICAgICAgICAgQ2xvc3VyZSogZG9uZSkgewotLy8gICAgICAgLy8gLi4u
IHJlYWQgcmVxdWVzdCBhbmQgZmlsbCBpbiByZXNwb25zZSAuLi4KLS8vICAgICAgIGRvbmUtPlJ1
bigpOwotLy8gICAgIH0KLS8vICAgfTsKLS8vIFlvdSB3b3VsZCB0aGVuIHJlZ2lzdGVyIGFuIGlu
c3RhbmNlIG9mIE15U2VydmljZUltcGwgd2l0aCB5b3VyIFJQQyBzZXJ2ZXIKLS8vIGltcGxlbWVu
dGF0aW9uLiAgKEhvdyB0byBkbyB0aGF0IGRlcGVuZHMgb24gdGhlIGltcGxlbWVudGF0aW9uLikK
LS8vCi0vLyBUbyBjYWxsIGEgcmVtb3RlIE15U2VydmljZUltcGwsIGZpcnN0IHlvdSBuZWVkIGFu
IFJwY0NoYW5uZWwgY29ubmVjdGVkIHRvIGl0LgotLy8gSG93IHRvIGNvbnN0cnVjdCBhIGNoYW5u
ZWwgZGVwZW5kcywgYWdhaW4sIG9uIHlvdXIgUlBDIGltcGxlbWVudGF0aW9uLgotLy8gSGVyZSB3
ZSB1c2UgYSBoeXBvdGhldGljYWwgIk15UnBjQ2hhbm5lbCIgYXMgYW4gZXhhbXBsZToKLS8vICAg
TXlScGNDaGFubmVsIGNoYW5uZWwoInJwYzpob3N0bmFtZToxMjM0L215c2VydmljZSIpOwotLy8g
ICBNeVJwY0NvbnRyb2xsZXIgY29udHJvbGxlcjsKLS8vICAgTXlTZXJ2aWNlSW1wbDo6U3R1YiBz
dHViKCZjaGFubmVsKTsKLS8vICAgRm9vUmVxdWVzdCByZXF1ZXN0OwotLy8gICBGb29SZXNwb25z
ZSByZXNwb25zZTsKLS8vCi0vLyAgIC8vIC4uLiBmaWxsIGluIHJlcXVlc3QgLi4uCi0vLwotLy8g
ICBzdHViLkZvbygmY29udHJvbGxlciwgcmVxdWVzdCwgJnJlc3BvbnNlLCBOZXdDYWxsYmFjayhI
YW5kbGVSZXNwb25zZSkpOwotLy8KLS8vIE9uIFRocmVhZC1TYWZldHk6Ci0vLwotLy8gRGlmZmVy
ZW50IFJQQyBpbXBsZW1lbnRhdGlvbnMgbWF5IG1ha2UgZGlmZmVyZW50IGd1YXJhbnRlZXMgYWJv
dXQgd2hhdAotLy8gdGhyZWFkcyB0aGV5IG1heSBydW4gY2FsbGJhY2tzIG9uLCBhbmQgd2hhdCB0
aHJlYWRzIHRoZSBhcHBsaWNhdGlvbiBpcwotLy8gYWxsb3dlZCB0byB1c2UgdG8gY2FsbCB0aGUg
UlBDIHN5c3RlbS4gIFBvcnRhYmxlIHNvZnR3YXJlIHNob3VsZCBiZSByZWFkeQotLy8gZm9yIGNh
bGxiYWNrcyB0byBiZSBjYWxsZWQgb24gYW55IHRocmVhZCwgYnV0IHNob3VsZCBub3QgdHJ5IHRv
IGNhbGwgdGhlCi0vLyBSUEMgc3lzdGVtIGZyb20gYW55IHRocmVhZCBleGNlcHQgZm9yIHRoZSBv
bmVzIG9uIHdoaWNoIGl0IHJlY2VpdmVkIHRoZQotLy8gY2FsbGJhY2tzLiAgUmVhbGlzdGljYWxs
eSwgdGhvdWdoLCBzaW1wbGUgc29mdHdhcmUgd2lsbCBwcm9iYWJseSB3YW50IHRvCi0vLyB1c2Ug
YSBzaW5nbGUtdGhyZWFkZWQgUlBDIHN5c3RlbSB3aGlsZSBoaWdoLWVuZCBzb2Z0d2FyZSB3aWxs
IHdhbnQgdG8KLS8vIHVzZSBtdWx0aXBsZSB0aHJlYWRzLiAgUlBDIGltcGxlbWVudGF0aW9ucyBz
aG91bGQgcHJvdmlkZSBtdWx0aXBsZQotLy8gY2hvaWNlcy4KLQotI2lmbmRlZiBHT09HTEVfUFJP
VE9CVUZfU0VSVklDRV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1NFUlZJQ0VfSF9fCi0K
LSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1v
bi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jYWxsYmFjay5oPgotCi1uYW1l
c3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLS8vIERlZmluZWQgaW4gdGhp
cyBmaWxlLgotY2xhc3MgU2VydmljZTsKLWNsYXNzIFJwY0NvbnRyb2xsZXI7Ci1jbGFzcyBScGND
aGFubmVsOwotCi0vLyBEZWZpbmVkIGluIG90aGVyIGZpbGVzLgotY2xhc3MgRGVzY3JpcHRvcjsg
ICAgICAgICAgICAvLyBkZXNjcmlwdG9yLmgKLWNsYXNzIFNlcnZpY2VEZXNjcmlwdG9yOyAgICAg
Ly8gZGVzY3JpcHRvci5oCi1jbGFzcyBNZXRob2REZXNjcmlwdG9yOyAgICAgIC8vIGRlc2NyaXB0
b3IuaAotY2xhc3MgTWVzc2FnZTsgICAgICAgICAgICAgICAvLyBtZXNzYWdlLmgKLQotLy8gQWJz
dHJhY3QgYmFzZSBpbnRlcmZhY2UgZm9yIHByb3RvY29sLWJ1ZmZlci1iYXNlZCBSUEMgc2Vydmlj
ZXMuICBTZXJ2aWNlcwotLy8gdGhlbXNlbHZlcyBhcmUgYWJzdHJhY3QgaW50ZXJmYWNlcyAoaW1w
bGVtZW50ZWQgZWl0aGVyIGJ5IHNlcnZlcnMgb3IgYXMKLS8vIHN0dWJzKSwgYnV0IHRoZXkgc3Vi
Y2xhc3MgdGhpcyBiYXNlIGludGVyZmFjZS4gIFRoZSBtZXRob2RzIG9mIHRoaXMKLS8vIGludGVy
ZmFjZSBjYW4gYmUgdXNlZCB0byBjYWxsIHRoZSBtZXRob2RzIG9mIHRoZSBTZXJ2aWNlIHdpdGhv
dXQga25vd2luZwotLy8gaXRzIGV4YWN0IHR5cGUgYXQgY29tcGlsZSB0aW1lIChhbmFsb2dvdXMg
dG8gUmVmbGVjdGlvbikuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgU2VydmljZSB7Ci0gcHVi
bGljOgotICBpbmxpbmUgU2VydmljZSgpIHt9Ci0gIHZpcnR1YWwgflNlcnZpY2UoKTsKLQotICAv
LyBXaGVuIGNvbnN0cnVjdGluZyBhIHN0dWIsIHlvdSBtYXkgcGFzcyBTVFVCX09XTlNfQ0hBTk5F
TCBhcyB0aGUgc2Vjb25kCi0gIC8vIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgdG8gdGVs
bCBpdCB0byBkZWxldGUgaXRzIFJwY0NoYW5uZWwgd2hlbgotICAvLyBkZXN0cm95ZWQuCi0gIGVu
dW0gQ2hhbm5lbE93bmVyc2hpcCB7Ci0gICAgU1RVQl9PV05TX0NIQU5ORUwsCi0gICAgU1RVQl9E
T0VTTlRfT1dOX0NIQU5ORUwKLSAgfTsKLQotICAvLyBHZXQgdGhlIFNlcnZpY2VEZXNjcmlwdG9y
IGRlc2NyaWJpbmcgdGhpcyBzZXJ2aWNlIGFuZCBpdHMgbWV0aG9kcy4KLSAgdmlydHVhbCBjb25z
dCBTZXJ2aWNlRGVzY3JpcHRvciogR2V0RGVzY3JpcHRvcigpID0gMDsKLQotICAvLyBDYWxsIGEg
bWV0aG9kIG9mIHRoZSBzZXJ2aWNlIHNwZWNpZmllZCBieSBNZXRob2REZXNjcmlwdG9yLiAgVGhp
cyBpcwotICAvLyBub3JtYWxseSBpbXBsZW1lbnRlZCBhcyBhIHNpbXBsZSBzd2l0Y2goKSB0aGF0
IGNhbGxzIHRoZSBzdGFuZGFyZAotICAvLyBkZWZpbml0aW9ucyBvZiB0aGUgc2VydmljZSdzIG1l
dGhvZHMuCi0gIC8vCi0gIC8vIFByZWNvbmRpdGlvbnM6Ci0gIC8vICogbWV0aG9kLT5zZXJ2aWNl
KCkgPT0gR2V0RGVzY3JpcHRvcigpCi0gIC8vICogcmVxdWVzdCBhbmQgcmVzcG9uc2UgYXJlIG9m
IHRoZSBleGFjdCBzYW1lIGNsYXNzZXMgYXMgdGhlIG9iamVjdHMKLSAgLy8gICByZXR1cm5lZCBi
eSBHZXRSZXF1ZXN0UHJvdG90eXBlKG1ldGhvZCkgYW5kCi0gIC8vICAgR2V0UmVzcG9uc2VQcm90
b3R5cGUobWV0aG9kKS4KLSAgLy8gKiBBZnRlciB0aGUgY2FsbCBoYXMgc3RhcnRlZCwgdGhlIHJl
cXVlc3QgbXVzdCBub3QgYmUgbW9kaWZpZWQgYW5kIHRoZQotICAvLyAgIHJlc3BvbnNlIG11c3Qg
bm90IGJlIGFjY2Vzc2VkIGF0IGFsbCB1bnRpbCAiZG9uZSIgaXMgY2FsbGVkLgotICAvLyAqICJj
b250cm9sbGVyIiBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGZvciB0aGUgUlBDIGltcGxlbWVudGF0
aW9uIGJlaW5nCi0gIC8vICAgdXNlZCBieSB0aGlzIFNlcnZpY2UuICBGb3Igc3R1YnMsIHRoZSAi
Y29ycmVjdCB0eXBlIiBkZXBlbmRzIG9uIHRoZQotICAvLyAgIFJwY0NoYW5uZWwgd2hpY2ggdGhl
IHN0dWIgaXMgdXNpbmcuICBTZXJ2ZXItc2lkZSBTZXJ2aWNlCi0gIC8vICAgaW1wbGVtZW50YXRp
b25zIGFyZSBleHBlY3RlZCB0byBhY2NlcHQgd2hhdGV2ZXIgdHlwZSBvZiBScGNDb250cm9sbGVy
Ci0gIC8vICAgdGhlIHNlcnZlci1zaWRlIFJQQyBpbXBsZW1lbnRhdGlvbiB1c2VzLgotICAvLwot
ICAvLyBQb3N0Y29uZGl0aW9uczoKLSAgLy8gKiAiZG9uZSIgd2lsbCBiZSBjYWxsZWQgd2hlbiB0
aGUgbWV0aG9kIGlzIGNvbXBsZXRlLiAgVGhpcyBtYXkgYmUKLSAgLy8gICBiZWZvcmUgQ2FsbE1l
dGhvZCgpIHJldHVybnMgb3IgaXQgbWF5IGJlIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4K
LSAgLy8gKiBJZiB0aGUgUlBDIHN1Y2NlZWRlZCwgInJlc3BvbnNlIiBjb250YWlucyB0aGUgcmVz
cG9uc2UgcmV0dXJuZWQgYnkKLSAgLy8gICB0aGUgc2VydmVyLgotICAvLyAqIElmIHRoZSBSUEMg
ZmFpbGVkLCAicmVzcG9uc2UiJ3MgY29udGVudHMgYXJlIHVuZGVmaW5lZC4gIFRoZQotICAvLyAg
IFJwY0NvbnRyb2xsZXIgY2FuIGJlIHF1ZXJpZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIGVycm9yIG9j
Y3VycmVkIGFuZAotICAvLyAgIHBvc3NpYmx5IHRvIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0
IHRoZSBlcnJvci4KLSAgdmlydHVhbCB2b2lkIENhbGxNZXRob2QoY29uc3QgTWV0aG9kRGVzY3Jp
cHRvciogbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICBScGNDb250cm9sbGVyKiBj
b250cm9sbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlKiByZXF1
ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlKiByZXNwb25zZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZSogZG9uZSkgPSAwOwotCi0gIC8vIENhbGxNZXRo
b2QoKSByZXF1aXJlcyB0aGF0IHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZSBwYXNzZWQgaW4gYXJl
IG9mIGEKLSAgLy8gcGFydGljdWxhciBzdWJjbGFzcyBvZiBNZXNzYWdlLiAgR2V0UmVxdWVzdFBy
b3RvdHlwZSgpIGFuZAotICAvLyBHZXRSZXNwb25zZVByb3RvdHlwZSgpIGdldCB0aGUgZGVmYXVs
dCBpbnN0YW5jZXMgb2YgdGhlc2UgcmVxdWlyZWQgdHlwZXMuCi0gIC8vIFlvdSBjYW4gdGhlbiBj
YWxsIE1lc3NhZ2U6Ok5ldygpIG9uIHRoZXNlIGluc3RhbmNlcyB0byBjb25zdHJ1Y3QgbXV0YWJs
ZQotICAvLyBvYmplY3RzIHdoaWNoIHlvdSBjYW4gdGhlbiBwYXNzIHRvIENhbGxNZXRob2QoKS4K
LSAgLy8KLSAgLy8gRXhhbXBsZToKLSAgLy8gICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRo
b2QgPQotICAvLyAgICAgc2VydmljZS0+R2V0RGVzY3JpcHRvcigpLT5GaW5kTWV0aG9kQnlOYW1l
KCJGb28iKTsKLSAgLy8gICBNZXNzYWdlKiByZXF1ZXN0ICA9IHN0dWItPkdldFJlcXVlc3RQcm90
b3R5cGUgKG1ldGhvZCktPk5ldygpOwotICAvLyAgIE1lc3NhZ2UqIHJlc3BvbnNlID0gc3R1Yi0+
R2V0UmVzcG9uc2VQcm90b3R5cGUobWV0aG9kKS0+TmV3KCk7Ci0gIC8vICAgcmVxdWVzdC0+UGFy
c2VGcm9tU3RyaW5nKGlucHV0KTsKLSAgLy8gICBzZXJ2aWNlLT5DYWxsTWV0aG9kKG1ldGhvZCwg
KnJlcXVlc3QsIHJlc3BvbnNlLCBjYWxsYmFjayk7Ci0gIHZpcnR1YWwgY29uc3QgTWVzc2FnZSYg
R2V0UmVxdWVzdFByb3RvdHlwZSgKLSAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2Qp
IGNvbnN0ID0gMDsKLSAgdmlydHVhbCBjb25zdCBNZXNzYWdlJiBHZXRSZXNwb25zZVByb3RvdHlw
ZSgKLSAgICBjb25zdCBNZXRob2REZXNjcmlwdG9yKiBtZXRob2QpIGNvbnN0ID0gMDsKLQotIHBy
aXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTZXJ2aWNlKTsKLX07
Ci0KLS8vIEFuIFJwY0NvbnRyb2xsZXIgbWVkaWF0ZXMgYSBzaW5nbGUgbWV0aG9kIGNhbGwuICBU
aGUgcHJpbWFyeSBwdXJwb3NlIG9mCi0vLyB0aGUgY29udHJvbGxlciBpcyB0byBwcm92aWRlIGEg
d2F5IHRvIG1hbmlwdWxhdGUgc2V0dGluZ3Mgc3BlY2lmaWMgdG8gdGhlCi0vLyBSUEMgaW1wbGVt
ZW50YXRpb24gYW5kIHRvIGZpbmQgb3V0IGFib3V0IFJQQy1sZXZlbCBlcnJvcnMuCi0vLwotLy8g
VGhlIG1ldGhvZHMgcHJvdmlkZWQgYnkgdGhlIFJwY0NvbnRyb2xsZXIgaW50ZXJmYWNlIGFyZSBp
bnRlbmRlZCB0byBiZSBhCi0vLyAibGVhc3QgY29tbW9uIGRlbm9taW5hdG9yIiBzZXQgb2YgZmVh
dHVyZXMgd2hpY2ggd2UgZXhwZWN0IGFsbAotLy8gaW1wbGVtZW50YXRpb25zIHRvIHN1cHBvcnQu
ICBTcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgbWF5IHByb3ZpZGUgbW9yZQotLy8gYWR2YW5jZWQg
ZmVhdHVyZXMgKGUuZy4gZGVhZGxpbmUgcHJvcGFnYXRpb24pLgotY2xhc3MgTElCUFJPVE9CVUZf
RVhQT1JUIFJwY0NvbnRyb2xsZXIgewotIHB1YmxpYzoKLSAgaW5saW5lIFJwY0NvbnRyb2xsZXIo
KSB7fQotICB2aXJ0dWFsIH5ScGNDb250cm9sbGVyKCk7Ci0KLSAgLy8gQ2xpZW50LXNpZGUgbWV0
aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8g
VGhlc2UgY2FsbHMgbWF5IGJlIG1hZGUgZnJvbSB0aGUgY2xpZW50IHNpZGUgb25seS4gIFRoZWly
IHJlc3VsdHMKLSAgLy8gYXJlIHVuZGVmaW5lZCBvbiB0aGUgc2VydmVyIHNpZGUgKG1heSBjcmFz
aCkuCi0KLSAgLy8gUmVzZXRzIHRoZSBScGNDb250cm9sbGVyIHRvIGl0cyBpbml0aWFsIHN0YXRl
IHNvIHRoYXQgaXQgbWF5IGJlIHJldXNlZCBpbgotICAvLyBhIG5ldyBjYWxsLiAgTXVzdCBub3Qg
YmUgY2FsbGVkIHdoaWxlIGFuIFJQQyBpcyBpbiBwcm9ncmVzcy4KLSAgdmlydHVhbCB2b2lkIFJl
c2V0KCkgPSAwOwotCi0gIC8vIEFmdGVyIGEgY2FsbCBoYXMgZmluaXNoZWQsIHJldHVybnMgdHJ1
ZSBpZiB0aGUgY2FsbCBmYWlsZWQuICBUaGUgcG9zc2libGUKLSAgLy8gcmVhc29ucyBmb3IgZmFp
bHVyZSBkZXBlbmQgb24gdGhlIFJQQyBpbXBsZW1lbnRhdGlvbi4gIEZhaWxlZCgpIG11c3Qgbm90
Ci0gIC8vIGJlIGNhbGxlZCBiZWZvcmUgYSBjYWxsIGhhcyBmaW5pc2hlZC4gIElmIEZhaWxlZCgp
IHJldHVybnMgdHJ1ZSwgdGhlCi0gIC8vIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSBtZXNzYWdl
IGFyZSB1bmRlZmluZWQuCi0gIHZpcnR1YWwgYm9vbCBGYWlsZWQoKSBjb25zdCA9IDA7Ci0KLSAg
Ly8gSWYgRmFpbGVkKCkgaXMgdHJ1ZSwgcmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0
aW9uIG9mIHRoZSBlcnJvci4KLSAgdmlydHVhbCBzdHJpbmcgRXJyb3JUZXh0KCkgY29uc3QgPSAw
OwotCi0gIC8vIEFkdmlzZXMgdGhlIFJQQyBzeXN0ZW0gdGhhdCB0aGUgY2FsbGVyIGRlc2lyZXMg
dGhhdCB0aGUgUlBDIGNhbGwgYmUKLSAgLy8gY2FuY2VsZWQuICBUaGUgUlBDIHN5c3RlbSBtYXkg
Y2FuY2VsIGl0IGltbWVkaWF0ZWx5LCBtYXkgd2FpdCBhd2hpbGUgYW5kCi0gIC8vIHRoZW4gY2Fu
Y2VsIGl0LCBvciBtYXkgbm90IGV2ZW4gY2FuY2VsIHRoZSBjYWxsIGF0IGFsbC4gIElmIHRoZSBj
YWxsIGlzCi0gIC8vIGNhbmNlbGVkLCB0aGUgImRvbmUiIGNhbGxiYWNrIHdpbGwgc3RpbGwgYmUg
Y2FsbGVkIGFuZCB0aGUgUnBjQ29udHJvbGxlcgotICAvLyB3aWxsIGluZGljYXRlIHRoYXQgdGhl
IGNhbGwgZmFpbGVkIGF0IHRoYXQgdGltZS4KLSAgdmlydHVhbCB2b2lkIFN0YXJ0Q2FuY2VsKCkg
PSAwOwotCi0gIC8vIFNlcnZlci1zaWRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIFRoZXNlIGNhbGxzIG1heSBiZSBtYWRlIGZyb20g
dGhlIHNlcnZlciBzaWRlIG9ubHkuICBUaGVpciByZXN1bHRzCi0gIC8vIGFyZSB1bmRlZmluZWQg
b24gdGhlIGNsaWVudCBzaWRlIChtYXkgY3Jhc2gpLgotCi0gIC8vIENhdXNlcyBGYWlsZWQoKSB0
byByZXR1cm4gdHJ1ZSBvbiB0aGUgY2xpZW50IHNpZGUuICAicmVhc29uIiB3aWxsIGJlCi0gIC8v
IGluY29ycG9yYXRlZCBpbnRvIHRoZSBtZXNzYWdlIHJldHVybmVkIGJ5IEVycm9yVGV4dCgpLiAg
SWYgeW91IGZpbmQKLSAgLy8geW91IG5lZWQgdG8gcmV0dXJuIG1hY2hpbmUtcmVhZGFibGUgaW5m
b3JtYXRpb24gYWJvdXQgZmFpbHVyZXMsIHlvdQotICAvLyBzaG91bGQgaW5jb3Jwb3JhdGUgaXQg
aW50byB5b3VyIHJlc3BvbnNlIHByb3RvY29sIGJ1ZmZlciBhbmQgc2hvdWxkCi0gIC8vIE5PVCBj
YWxsIFNldEZhaWxlZCgpLgotICB2aXJ0dWFsIHZvaWQgU2V0RmFpbGVkKGNvbnN0IHN0cmluZyYg
cmVhc29uKSA9IDA7Ci0KLSAgLy8gSWYgdHJ1ZSwgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBj
YW5jZWxlZCB0aGUgUlBDLCBzbyB0aGUgc2VydmVyIG1heQotICAvLyBhcyB3ZWxsIGdpdmUgdXAg
b24gcmVwbHlpbmcgdG8gaXQuICBUaGUgc2VydmVyIHNob3VsZCBzdGlsbCBjYWxsIHRoZQotICAv
LyBmaW5hbCAiZG9uZSIgY2FsbGJhY2suCi0gIHZpcnR1YWwgYm9vbCBJc0NhbmNlbGVkKCkgY29u
c3QgPSAwOwotCi0gIC8vIEFza3MgdGhhdCB0aGUgZ2l2ZW4gY2FsbGJhY2sgYmUgY2FsbGVkIHdo
ZW4gdGhlIFJQQyBpcyBjYW5jZWxlZC4gIFRoZQotICAvLyBjYWxsYmFjayB3aWxsIGFsd2F5cyBi
ZSBjYWxsZWQgZXhhY3RseSBvbmNlLiAgSWYgdGhlIFJQQyBjb21wbGV0ZXMgd2l0aG91dAotICAv
LyBiZWluZyBjYW5jZWxlZCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNvbXBs
ZXRpb24uICBJZiB0aGUgUlBDCi0gIC8vIGhhcyBhbHJlYWR5IGJlZW4gY2FuY2VsZWQgd2hlbiBO
b3RpZnlPbkNhbmNlbCgpIGlzIGNhbGxlZCwgdGhlIGNhbGxiYWNrCi0gIC8vIHdpbGwgYmUgY2Fs
bGVkIGltbWVkaWF0ZWx5LgotICAvLwotICAvLyBOb3RpZnlPbkNhbmNlbCgpIG11c3QgYmUgY2Fs
bGVkIG5vIG1vcmUgdGhhbiBvbmNlIHBlciByZXF1ZXN0LgotICB2aXJ0dWFsIHZvaWQgTm90aWZ5
T25DYW5jZWwoQ2xvc3VyZSogY2FsbGJhY2spID0gMDsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9E
SVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhScGNDb250cm9sbGVyKTsKLX07Ci0KLS8vIEFic3Ry
YWN0IGludGVyZmFjZSBmb3IgYW4gUlBDIGNoYW5uZWwuICBBbiBScGNDaGFubmVsIHJlcHJlc2Vu
dHMgYQotLy8gY29tbXVuaWNhdGlvbiBsaW5lIHRvIGEgU2VydmljZSB3aGljaCBjYW4gYmUgdXNl
ZCB0byBjYWxsIHRoYXQgU2VydmljZSdzCi0vLyBtZXRob2RzLiAgVGhlIFNlcnZpY2UgbWF5IGJl
IHJ1bm5pbmcgb24gYW5vdGhlciBtYWNoaW5lLiAgTm9ybWFsbHksIHlvdQotLy8gc2hvdWxkIG5v
dCBjYWxsIGFuIFJwY0NoYW5uZWwgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkIGNvbnN0cnVjdCBhIHN0
dWIgU2VydmljZQotLy8gd3JhcHBpbmcgaXQuICBFeGFtcGxlOgotLy8gICBScGNDaGFubmVsKiBj
aGFubmVsID0gbmV3IE15UnBjQ2hhbm5lbCgicmVtb3RlaG9zdC5leGFtcGxlLmNvbToxMjM0Iik7
Ci0vLyAgIE15U2VydmljZSogc2VydmljZSA9IG5ldyBNeVNlcnZpY2U6OlN0dWIoY2hhbm5lbCk7
Ci0vLyAgIHNlcnZpY2UtPk15TWV0aG9kKHJlcXVlc3QsICZyZXNwb25zZSwgY2FsbGJhY2spOwot
Y2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFJwY0NoYW5uZWwgewotIHB1YmxpYzoKLSAgaW5saW5l
IFJwY0NoYW5uZWwoKSB7fQotICB2aXJ0dWFsIH5ScGNDaGFubmVsKCk7Ci0KLSAgLy8gQ2FsbCB0
aGUgZ2l2ZW4gbWV0aG9kIG9mIHRoZSByZW1vdGUgc2VydmljZS4gIFRoZSBzaWduYXR1cmUgb2Yg
dGhpcwotICAvLyBwcm9jZWR1cmUgbG9va3MgdGhlIHNhbWUgYXMgU2VydmljZTo6Q2FsbE1ldGhv
ZCgpLCBidXQgdGhlIHJlcXVpcmVtZW50cwotICAvLyBhcmUgbGVzcyBzdHJpY3QgaW4gb25lIGlt
cG9ydGFudCB3YXk6ICB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0cwotICAvLyBuZWVk
IG5vdCBiZSBvZiBhbnkgc3BlY2lmaWMgY2xhc3MgYXMgbG9uZyBhcyB0aGVpciBkZXNjcmlwdG9y
cyBhcmUKLSAgLy8gbWV0aG9kLT5pbnB1dF90eXBlKCkgYW5kIG1ldGhvZC0+b3V0cHV0X3R5cGUo
KS4KLSAgdmlydHVhbCB2b2lkIENhbGxNZXRob2QoY29uc3QgTWV0aG9kRGVzY3JpcHRvciogbWV0
aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICBScGNDb250cm9sbGVyKiBjb250cm9sbGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlKiByZXF1ZXN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlKiByZXNwb25zZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ2xvc3VyZSogZG9uZSkgPSAwOwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJ
U0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJwY0NoYW5uZWwpOwotfTsKLQotfSAgLy8gbmFtZXNw
YWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xF
X1BST1RPQlVGX1NFUlZJQ0VfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc291
cmNlX2NvbnRleHQucGIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucGIu
Y2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2N2NkMTAyZmJjM2UwM2ZkMDFjMmU3
MmUxMmUxNGUyOGQwYmI5ZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnBiLmNjCisrKyAvZGV2
L251bGwKQEAgLTEsMzk3ICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVm
ZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi9z
b3VyY2VfY29udGV4dC5wcm90bwotCi0jZGVmaW5lIElOVEVSTkFMX1NVUFBSRVNTX1BST1RPQlVG
X0ZJRUxEX0RFUFJFQ0FUSU9OCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3NvdXJjZV9jb250
ZXh0LnBiLmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3Bv
cnQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvd2lyZV9mb3JtYXRfbGl0ZV9pbmwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
ZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2Fn
ZV9yZWZsZWN0aW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3Bz
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoaW5jbHVkZXMpCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNw
YWNlIHByb3RvYnVmIHsKLQotbmFtZXNwYWNlIHsKLQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpEZXNjcmlwdG9yKiBTb3VyY2VDb250ZXh0X2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgot
ICBTb3VyY2VDb250ZXh0X3JlZmxlY3Rpb25fID0gTlVMTDsKLQotfSAgLy8gbmFtZXNwYWNlCi0K
LQotdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmc291cmNlXzVm
Y29udGV4dF8yZXByb3RvKCkgewotICBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVm
XzJmc291cmNlXzVmY29udGV4dF8yZXByb3RvKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RmlsZURlc2NyaXB0b3IqIGZpbGUgPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3Jp
cHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCktPkZpbmRGaWxlQnlOYW1lKAotICAgICAgImdvb2ds
ZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wcm90byIpOwotICBHT09HTEVfQ0hFQ0soZmlsZSAh
PSBOVUxMKTsKLSAgU291cmNlQ29udGV4dF9kZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlw
ZSgwKTsKLSAgc3RhdGljIGNvbnN0IGludCBTb3VyY2VDb250ZXh0X29mZnNldHNfWzFdID0gewot
ICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoU291cmNl
Q29udGV4dCwgZmlsZV9uYW1lXyksCi0gIH07Ci0gIFNvdXJjZUNvbnRleHRfcmVmbGVjdGlvbl8g
PQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZs
ZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIFNvdXJjZUNvbnRl
eHRfZGVzY3JpcHRvcl8sCi0gICAgICBTb3VyY2VDb250ZXh0OjpkZWZhdWx0X2luc3RhbmNlXywK
LSAgICAgIFNvdXJjZUNvbnRleHRfb2Zmc2V0c18sCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAg
ICAgLTEsCi0gICAgICBzaXplb2YoU291cmNlQ29udGV4dCksCi0gICAgICBHT09HTEVfUFJPVE9C
VUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKFNvdXJjZUNvbnRleHQsIF9pbnRlcm5h
bF9tZXRhZGF0YV8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJ
RUxEX09GRlNFVChTb3VyY2VDb250ZXh0LCBfaXNfZGVmYXVsdF9pbnN0YW5jZV8pKTsKLX0KLQot
bmFtZXNwYWNlIHsKLQotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShwcm90b2J1Zl9Bc3Np
Z25EZXNjcmlwdG9yc19vbmNlXyk7Ci1pbmxpbmUgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlw
dG9yc09uY2UoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xlT25jZUluaXQoJnByb3Rv
YnVmX0Fzc2lnbkRlc2NyaXB0b3JzX29uY2VfLAotICAgICAgICAgICAgICAgICAmcHJvdG9idWZf
QXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnNvdXJjZV81ZmNvbnRleHRfMmVwcm90byk7
Ci19Ci0KLXZvaWQgcHJvdG9idWZfUmVnaXN0ZXJUeXBlcyhjb25zdCA6OnN0ZDo6c3RyaW5nJikg
ewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0g
ICAgICBTb3VyY2VDb250ZXh0X2Rlc2NyaXB0b3JfLCAmU291cmNlQ29udGV4dDo6ZGVmYXVsdF9p
bnN0YW5jZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLXZvaWQgcHJvdG9idWZfU2h1dGRv
d25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmc291cmNlXzVmY29udGV4dF8yZXByb3RvKCkgewot
ICBkZWxldGUgU291cmNlQ29udGV4dDo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRlbGV0ZSBTb3Vy
Y2VDb250ZXh0X3JlZmxlY3Rpb25fOwotfQotCi12b2lkIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZzb3VyY2VfNWZjb250ZXh0XzJlcHJvdG8oKSB7Ci0gIHN0YXRpYyBib29s
IGFscmVhZHlfaGVyZSA9IGZhbHNlOwotICBpZiAoYWxyZWFkeV9oZXJlKSByZXR1cm47Ci0gIGFs
cmVhZHlfaGVyZSA9IHRydWU7Ci0gIEdPT0dMRV9QUk9UT0JVRl9WRVJJRllfVkVSU0lPTjsKLQot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQb29sOjpJbnRlcm5hbEFkZEdlbmVyYXRl
ZEZpbGUoCi0gICAgIlxuJGdvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wcm90b1wwMjJc
MDE3IgotICAgICJnb29nbGUucHJvdG9idWZcIlwiXG5cclNvdXJjZUNvbnRleHRcMDIyXDAyMVxu
XHRmaWxlIgotICAgICJfbmFtZVwwMzBcMDAxIFwwMDEoXHRCVVxuXDAyM2NvbS5nb29nbGUucHJv
dG9idWZCXDAyMlNvdXIiCi0gICAgImNlQ29udGV4dFByb3RvUFwwMDFcMjQwXDAwMVwwMDFcMjQy
XDAwMlwwMDNHUEJcMjUyXDAwMlwwMzZHb29nbGUuUHJvdG8iCi0gICAgImJ1Zi5XZWxsS25vd25U
eXBlc2JcMDA2cHJvdG8zIiwgMTg2KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFj
dG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZEZpbGUoCi0gICAgImdvb2dsZS9wcm90b2J1
Zi9zb3VyY2VfY29udGV4dC5wcm90byIsICZwcm90b2J1Zl9SZWdpc3RlclR5cGVzKTsKLSAgU291
cmNlQ29udGV4dDo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgU291cmNlQ29udGV4dCgpOwotICBT
b3VyY2VDb250ZXh0OjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok9uU2h1dGRvd24oJnByb3RvYnVmX1No
dXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZnNvdXJjZV81ZmNvbnRleHRfMmVwcm90byk7
Ci19Ci0KLS8vIEZvcmNlIEFkZERlc2NyaXB0b3JzKCkgdG8gYmUgY2FsbGVkIGF0IHN0YXRpYyBp
bml0aWFsaXphdGlvbiB0aW1lLgotc3RydWN0IFN0YXRpY0Rlc2NyaXB0b3JJbml0aWFsaXplcl9n
b29nbGVfMmZwcm90b2J1Zl8yZnNvdXJjZV81ZmNvbnRleHRfMmVwcm90byB7Ci0gIFN0YXRpY0Rl
c2NyaXB0b3JJbml0aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8yZnNvdXJjZV81ZmNvbnRleHRf
MmVwcm90bygpIHsKLSAgICBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmc291
cmNlXzVmY29udGV4dF8yZXByb3RvKCk7Ci0gIH0KLX0gc3RhdGljX2Rlc2NyaXB0b3JfaW5pdGlh
bGl6ZXJfZ29vZ2xlXzJmcHJvdG9idWZfMmZzb3VyY2VfNWZjb250ZXh0XzJlcHJvdG9fOwotCi1u
YW1lc3BhY2UgewotCi1zdGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGludCBsaW5lKSBHT09HTEVf
QVRUUklCVVRFX0NPTEQ7Ci1zdGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGludCBsaW5lKSB7Ci0g
IEdPT0dMRV9DSEVDSyhmYWxzZSkgPDwgX19GSUxFX18gPDwgIjoiIDw8IGxpbmU7Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVS
KSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgU291cmNlQ29udGV4dDo6a0ZpbGVOYW1l
RmllbGROdW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+
PSAxOTAwCi0KLVNvdXJjZUNvbnRleHQ6OlNvdXJjZUNvbnRleHQoKQotICA6IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVk
Q3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xl
LnByb3RvYnVmLlNvdXJjZUNvbnRleHQpCi19Ci0KLXZvaWQgU291cmNlQ29udGV4dDo6SW5pdEFz
RGVmYXVsdEluc3RhbmNlKCkgewotICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSB0cnVlOwotfQot
Ci1Tb3VyY2VDb250ZXh0OjpTb3VyY2VDb250ZXh0KGNvbnN0IFNvdXJjZUNvbnRleHQmIGZyb20p
Ci0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFk
YXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYu
U291cmNlQ29udGV4dCkKLX0KLQotdm9pZCBTb3VyY2VDb250ZXh0OjpTaGFyZWRDdG9yKCkgewot
ICAgIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IGZhbHNlOwotICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZygpOwotICBfY2FjaGVkX3NpemVfID0gMDsKLSAgZmls
ZV9uYW1lXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0KLVNvdXJjZUNvbnRleHQ6On5Tb3Vy
Y2VDb250ZXh0KCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpn
b29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dCkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lk
IFNvdXJjZUNvbnRleHQ6OlNoYXJlZER0b3IoKSB7Ci0gIGZpbGVfbmFtZV8uRGVzdHJveU5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpKTsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12
b2lkIFNvdXJjZUNvbnRleHQ6OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09P
R0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNp
emU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBTb3VyY2VDb250ZXh0OjpkZXNjcmlwdG9yKCkg
ewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIFNvdXJjZUNv
bnRleHRfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IFNvdXJjZUNvbnRleHQmIFNvdXJjZUNvbnRl
eHQ6OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxM
KSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmc291cmNlXzVmY29udGV4dF8y
ZXByb3RvKCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLVNvdXJjZUNvbnRl
eHQqIFNvdXJjZUNvbnRleHQ6OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotU291cmNlQ29u
dGV4dCogU291cmNlQ29udGV4dDo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5h
KSBjb25zdCB7Ci0gIFNvdXJjZUNvbnRleHQqIG4gPSBuZXcgU291cmNlQ29udGV4dDsKLSAgaWYg
KGFyZW5hICE9IE5VTEwpIHsKLSAgICBhcmVuYS0+T3duKG4pOwotICB9Ci0gIHJldHVybiBuOwot
fQotCi12b2lkIFNvdXJjZUNvbnRleHQ6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQp
Ci0gIGZpbGVfbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotCi1ib29sIFNvdXJj
ZUNvbnRleHQ6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQUkVT
U0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1cmUK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQpCi0gIGZv
ciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJv
b2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0
OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGRO
dW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIGZpbGVfbmFtZSA9IDE7Ci0g
ICAgICBjYXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxMCkgewotICAgICAgICAgIERPXyg6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFN0cmluZygK
LSAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy0+bXV0YWJsZV9maWxlX25hbWUoKSkpOwotICAg
ICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgICAgICAgIHRoaXMtPmZpbGVfbmFtZSgpLmRhdGEoKSwg
dGhpcy0+ZmlsZV9uYW1lKCkubGVuZ3RoKCksCi0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UEFSU0UsCi0gICAgICAgICAgICAiZ29vZ2xl
LnByb3RvYnVmLlNvdXJjZUNvbnRleHQuZmlsZV9uYW1lIikpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlu
cHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYg
KHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9V
UCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNraXBGaWVsZChpbnB1
dCwgdGFnKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotc3VjY2VzczoK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3Rv
YnVmLlNvdXJjZUNvbnRleHQpCi0gIHJldHVybiB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX2ZhaWx1cmU6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNv
bnRleHQpCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9pZCBTb3VyY2VDb250
ZXh0OjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0
KQotICAvLyBvcHRpb25hbCBzdHJpbmcgZmlsZV9uYW1lID0gMTsKLSAgaWYgKHRoaXMtPmZpbGVf
bmFtZSgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMtPmZpbGVfbmFtZSgp
LmRhdGEoKSwgdGhpcy0+ZmlsZV9uYW1lKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U0VSSUFMSVpFLAotICAgICAgImdvb2ds
ZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0LmZpbGVfbmFtZSIpOwotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgK
LSAgICAgIDEsIHRoaXMtPmZpbGVfbmFtZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNv
bnRleHQpCi19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNvdXJjZUNvbnRleHQ6OlNl
cmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjp1
aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJp
YWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQpCi0gIC8v
IG9wdGlvbmFsIHN0cmluZyBmaWxlX25hbWUgPSAxOwotICBpZiAodGhpcy0+ZmlsZV9uYW1lKCku
c2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+ZmlsZV9uYW1lKCkuZGF0YSgp
LCB0aGlzLT5maWxlX25hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3Rv
YnVmLlNvdXJjZUNvbnRleHQuZmlsZV9uYW1lIik7Ci0gICAgdGFyZ2V0ID0KLSAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ1RvQXJy
YXkoCi0gICAgICAgIDEsIHRoaXMtPmZpbGVfbmFtZSgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnBy
b3RvYnVmLlNvdXJjZUNvbnRleHQpCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBTb3VyY2VD
b250ZXh0OjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludCht
ZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dCkKLSAg
aW50IHRvdGFsX3NpemUgPSAwOwotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBmaWxlX25hbWUgPSAx
OwotICBpZiAodGhpcy0+ZmlsZV9uYW1lKCkuc2l6ZSgpID4gMCkgewotICAgIHRvdGFsX3NpemUg
Kz0gMSArCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgdGhpcy0+ZmlsZV9uYW1lKCkpOwotICB9Ci0KLSAgR09P
R0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRv
dGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1
cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBTb3VyY2VDb250ZXh0OjpNZXJnZUZyb20oY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuU291
cmNlQ29udGV4dCkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBN
ZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgU291cmNlQ29udGV4dCogc291cmNlID0g
Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJh
dGVkPGNvbnN0IFNvdXJjZUNvbnRleHQ+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJj
ZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9t
ZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dCkKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0
aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxp
emVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0
KQotICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIFNvdXJjZUNvbnRleHQ6
Ok1lcmdlRnJvbShjb25zdCBTb3VyY2VDb250ZXh0JiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuU291cmNlQ29udGV4dCkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRo
aXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgaWYgKGZyb20uZmlsZV9uYW1lKCkuc2l6
ZSgpID4gMCkgewotCi0gICAgZmlsZV9uYW1lXy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGZyb20u
ZmlsZV9uYW1lXyk7Ci0gIH0KLX0KLQotdm9pZCBTb3VyY2VDb250ZXh0OjpDb3B5RnJvbShjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlNv
dXJjZUNvbnRleHQpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0g
IE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBTb3VyY2VDb250ZXh0OjpDb3B5RnJvbShjb25z
dCBTb3VyY2VDb250ZXh0JiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xh
c3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0
KQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20o
ZnJvbSk7Ci19Ci0KLWJvb2wgU291cmNlQ29udGV4dDo6SXNJbml0aWFsaXplZCgpIGNvbnN0IHsK
LQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTb3VyY2VDb250ZXh0OjpTd2FwKFNvdXJjZUNv
bnRleHQqIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIEludGVybmFs
U3dhcChvdGhlcik7Ci19Ci12b2lkIFNvdXJjZUNvbnRleHQ6OkludGVybmFsU3dhcChTb3VyY2VD
b250ZXh0KiBvdGhlcikgewotICBmaWxlX25hbWVfLlN3YXAoJm90aGVyLT5maWxlX25hbWVfKTsK
LSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRhXyk7
Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19Ci0K
LTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgU291cmNlQ29udGV4dDo6R2V0TWV0YWRhdGEo
KSBjb25zdCB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok1ldGFkYXRhIG1ldGFkYXRhOwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0g
U291cmNlQ29udGV4dF9kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IFNvdXJj
ZUNvbnRleHRfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBST1RP
QlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gU291cmNlQ29udGV4dAotCi0vLyBvcHRpb25h
bCBzdHJpbmcgZmlsZV9uYW1lID0gMTsKLXZvaWQgU291cmNlQ29udGV4dDo6Y2xlYXJfZmlsZV9u
YW1lKCkgewotICBmaWxlX25hbWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSBjb25z
dCA6OnN0ZDo6c3RyaW5nJiBTb3VyY2VDb250ZXh0OjpmaWxlX25hbWUoKSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlNvdXJj
ZUNvbnRleHQuZmlsZV9uYW1lKQotICByZXR1cm4gZmlsZV9uYW1lXy5HZXROb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci0gdm9pZCBTb3VyY2VDb250ZXh0OjpzZXRfZmlsZV9uYW1lKGNvbnN0IDo6c3RkOjpzdHJp
bmcmIHZhbHVlKSB7Ci0gIAotICBmaWxlX25hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLlNv
dXJjZUNvbnRleHQuZmlsZV9uYW1lKQotfQotIHZvaWQgU291cmNlQ29udGV4dDo6c2V0X2ZpbGVf
bmFtZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICAKLSAgZmlsZV9uYW1lXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQuZmlsZV9uYW1lKQot
fQotIHZvaWQgU291cmNlQ29udGV4dDo6c2V0X2ZpbGVfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwg
c2l6ZV90IHNpemUpIHsKLSAgCi0gIGZpbGVfbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6
OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkp
OwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xl
LnByb3RvYnVmLlNvdXJjZUNvbnRleHQuZmlsZV9uYW1lKQotfQotIDo6c3RkOjpzdHJpbmcqIFNv
dXJjZUNvbnRleHQ6Om11dGFibGVfZmlsZV9uYW1lKCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQu
ZmlsZV9uYW1lKQotICByZXR1cm4gZmlsZV9uYW1lXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQot
IDo6c3RkOjpzdHJpbmcqIFNvdXJjZUNvbnRleHQ6OnJlbGVhc2VfZmlsZV9uYW1lKCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYu
U291cmNlQ29udGV4dC5maWxlX25hbWUpCi0gIAotICByZXR1cm4gZmlsZV9uYW1lXy5SZWxlYXNl
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotfQotIHZvaWQgU291cmNlQ29udGV4dDo6c2V0X2FsbG9jYXRlZF9maWxl
X25hbWUoOjpzdGQ6OnN0cmluZyogZmlsZV9uYW1lKSB7Ci0gIGlmIChmaWxlX25hbWUgIT0gTlVM
TCkgewotICAgIAotICB9IGVsc2UgewotICAgIAotICB9Ci0gIGZpbGVfbmFtZV8uU2V0QWxsb2Nh
dGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCksIGZpbGVfbmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0LmZpbGVf
bmFtZSkKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQot
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvc291cmNlX2NvbnRleHQucGIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4
dC5wYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2ZkMzY1YmVhYjliNmJkMzE0
YjVkZWEzYjBjNzAxNjhlZDYyYmZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wYi5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wg
YnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1
Zi9zb3VyY2VfY29udGV4dC5wcm90bwotCi0jaWZuZGVmIFBST1RPQlVGX2dvb2dsZV8yZnByb3Rv
YnVmXzJmc291cmNlXzVmY29udGV4dF8yZXByb3RvX19JTkNMVURFRAotI2RlZmluZSBQUk9UT0JV
Rl9nb29nbGVfMmZwcm90b2J1Zl8yZnNvdXJjZV81ZmNvbnRleHRfMmVwcm90b19fSU5DTFVERUQK
LQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9j
b21tb24uaD4KLQotI2lmIEdPT0dMRV9QUk9UT0JVRl9WRVJTSU9OIDwgMzAwMDAwMAotI2Vycm9y
IFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGEgbmV3ZXIgdmVyc2lvbiBvZiBwcm90b2Mgd2hp
Y2ggaXMKLSNlcnJvciBpbmNvbXBhdGlibGUgd2l0aCB5b3VyIFByb3RvY29sIEJ1ZmZlciBoZWFk
ZXJzLiAgUGxlYXNlIHVwZGF0ZQotI2Vycm9yIHlvdXIgaGVhZGVycy4KLSNlbmRpZgotI2lmIDMw
MDAwMDAgPCBHT09HTEVfUFJPVE9CVUZfTUlOX1BST1RPQ19WRVJTSU9OCi0jZXJyb3IgVGhpcyBm
aWxlIHdhcyBnZW5lcmF0ZWQgYnkgYW4gb2xkZXIgdmVyc2lvbiBvZiBwcm90b2Mgd2hpY2ggaXMK
LSNlcnJvciBpbmNvbXBhdGlibGUgd2l0aCB5b3VyIFByb3RvY29sIEJ1ZmZlciBoZWFkZXJzLiAg
UGxlYXNlCi0jZXJyb3IgcmVnZW5lcmF0ZSB0aGlzIGZpbGUgd2l0aCBhIG5ld2VyIHZlcnNpb24g
b2YgcHJvdG9jLgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYXJlbmEuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYXJlbmFzdHJpbmcuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9tZXRhZGF0YS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2V4dGVuc2lvbl9zZXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvdW5rbm93bl9maWVsZF9zZXQuaD4KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbmNs
dWRlcykKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi0vLyBJ
bnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgLS0gZG8gbm90IGNhbGwgdGhlc2UuCi12b2lk
IExJQlBST1RPQlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJm
c291cmNlXzVmY29udGV4dF8yZXByb3RvKCk7Ci12b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29v
Z2xlXzJmcHJvdG9idWZfMmZzb3VyY2VfNWZjb250ZXh0XzJlcHJvdG8oKTsKLXZvaWQgcHJvdG9i
dWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmc291cmNlXzVmY29udGV4dF8yZXBy
b3RvKCk7Ci0KLWNsYXNzIFNvdXJjZUNvbnRleHQ7Ci0KLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotY2xhc3Mg
TElCUFJPVE9CVUZfRVhQT1JUIFNvdXJjZUNvbnRleHQgOiBwdWJsaWMgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIFNvdXJjZUNvbnRleHQoKTsKLSAgdmlydHVhbCB+
U291cmNlQ29udGV4dCgpOwotCi0gIFNvdXJjZUNvbnRleHQoY29uc3QgU291cmNlQ29udGV4dCYg
ZnJvbSk7Ci0KLSAgaW5saW5lIFNvdXJjZUNvbnRleHQmIG9wZXJhdG9yPShjb25zdCBTb3VyY2VD
b250ZXh0JiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwot
ICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVz
Y3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgU291cmNlQ29udGV4dCYgZGVmYXVsdF9pbnN0YW5j
ZSgpOwotCi0gIHZvaWQgU3dhcChTb3VyY2VDb250ZXh0KiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVt
ZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotICBpbmxpbmUgU291cmNlQ29udGV4dCogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5V
TEwpOyB9Ci0KLSAgU291cmNlQ29udGV4dCogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEq
IGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IFNvdXJjZUNvbnRleHQm
IGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBTb3VyY2VDb250ZXh0JiBmcm9tKTsKLSAg
dm9pZCBDbGVhcigpOwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0
ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZv
aWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7
IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3Rvcigp
OwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBj
b25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoU291cmNlQ29udGV4dCogb3RoZXIpOwotICBwcml2
YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1
YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAg
fQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2lu
dGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBu
ZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGZpbGVfbmFt
ZSA9IDE7Ci0gIHZvaWQgY2xlYXJfZmlsZV9uYW1lKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0Zp
bGVOYW1lRmllbGROdW1iZXIgPSAxOwotICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBmaWxlX25hbWUo
KSBjb25zdDsKLSAgdm9pZCBzZXRfZmlsZV9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVl
KTsKLSAgdm9pZCBzZXRfZmlsZV9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRf
ZmlsZV9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJp
bmcqIG11dGFibGVfZmlsZV9uYW1lKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfZmlsZV9u
YW1lKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9maWxlX25hbWUoOjpzdGQ6OnN0cmluZyogZmls
ZV9uYW1lKTsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29v
Z2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQpCi0gcHJpdmF0ZToKLQotICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRh
ZGF0YV87Ci0gIGJvb2wgX2lzX2RlZmF1bHRfaW5zdGFuY2VfOwotICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciBmaWxlX25hbWVfOwotICBtdXRhYmxlIGludCBf
Y2FjaGVkX3NpemVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZf
QWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnNvdXJjZV81ZmNvbnRleHRfMmVwcm90bygpOwot
ICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmc291
cmNlXzVmY29udGV4dF8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3du
RmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZnNvdXJjZV81ZmNvbnRleHRfMmVwcm90bygpOwotCi0g
IHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBTb3VyY2VDb250ZXh0KiBk
ZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ci0jaWYgIVBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gU291cmNlQ29udGV4dAot
Ci0vLyBvcHRpb25hbCBzdHJpbmcgZmlsZV9uYW1lID0gMTsKLWlubGluZSB2b2lkIFNvdXJjZUNv
bnRleHQ6OmNsZWFyX2ZpbGVfbmFtZSgpIHsKLSAgZmlsZV9uYW1lXy5DbGVhclRvRW1wdHlOb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgU291cmNlQ29udGV4dDo6
ZmlsZV9uYW1lKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
Z2V0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0LmZpbGVfbmFtZSkKLSAgcmV0dXJuIGZp
bGVfbmFtZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgU291cmNlQ29udGV4dDo6
c2V0X2ZpbGVfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAKLSAgZmlsZV9u
YW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0LmZpbGVfbmFtZSkKLX0K
LWlubGluZSB2b2lkIFNvdXJjZUNvbnRleHQ6OnNldF9maWxlX25hbWUoY29uc3QgY2hhciogdmFs
dWUpIHsKLSAgCi0gIGZpbGVfbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFs
dWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2ds
ZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0LmZpbGVfbmFtZSkKLX0KLWlubGluZSB2b2lkIFNvdXJj
ZUNvbnRleHQ6OnNldF9maWxlX25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7
Ci0gIAotICBmaWxlX25hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5Tb3Vy
Y2VDb250ZXh0LmZpbGVfbmFtZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBTb3VyY2VDb250
ZXh0OjptdXRhYmxlX2ZpbGVfbmFtZSgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0LmZpbGVfbmFt
ZSkKLSAgcmV0dXJuIGZpbGVfbmFtZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6
OnN0ZDo6c3RyaW5nKiBTb3VyY2VDb250ZXh0OjpyZWxlYXNlX2ZpbGVfbmFtZSgpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLlNv
dXJjZUNvbnRleHQuZmlsZV9uYW1lKQotICAKLSAgcmV0dXJuIGZpbGVfbmFtZV8uUmVsZWFzZU5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIFNvdXJjZUNvbnRleHQ6OnNldF9hbGxvY2F0ZWRf
ZmlsZV9uYW1lKDo6c3RkOjpzdHJpbmcqIGZpbGVfbmFtZSkgewotICBpZiAoZmlsZV9uYW1lICE9
IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAKLSAgfQotICBmaWxlX25hbWVfLlNldEFs
bG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLCBmaWxlX25hbWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dC5m
aWxlX25hbWUpCi19Ci0KLSNlbmRpZiAgLy8gIVBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVS
UwotCi0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobmFtZXNwYWNlX3Njb3BlKQotCi19ICAv
LyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2JhbF9zY29wZSkKLQotI2VuZGlmICAvLyBQUk9UT0JVRl9n
b29nbGVfMmZwcm90b2J1Zl8yZnNvdXJjZV81ZmNvbnRleHRfMmVwcm90b19fSU5DTFVERUQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wcm90byBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDc2MjUyY2E4NDFlZGJhMjU5ODYzNmVmMTIyZjI2NDQzMmVkY2U3My4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvc291cmNlX2NvbnRleHQucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMyI7Ci0K
LXBhY2thZ2UgZ29vZ2xlLnByb3RvYnVmOwotCi1vcHRpb24gY3NoYXJwX25hbWVzcGFjZSA9ICJH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMiOwotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJj
b20uZ29vZ2xlLnByb3RvYnVmIjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJTb3Vy
Y2VDb250ZXh0UHJvdG8iOwotb3B0aW9uIGphdmFfbXVsdGlwbGVfZmlsZXMgPSB0cnVlOwotb3B0
aW9uIGphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoID0gdHJ1ZTsKLW9wdGlvbiBvYmpjX2Ns
YXNzX3ByZWZpeCA9ICJHUEIiOwotCi0vLyBgU291cmNlQ29udGV4dGAgcmVwcmVzZW50cyBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgc291cmNlIG9mIGEKLS8vIHByb3RvYnVmIGVsZW1lbnQsIGxpa2Ug
dGhlIGZpbGUgaW4gd2hpY2ggaXQgaXMgZGVmaW5lZC4KLW1lc3NhZ2UgU291cmNlQ29udGV4dCB7
Ci0gIC8vIFRoZSBwYXRoLXF1YWxpZmllZCBuYW1lIG9mIHRoZSAucHJvdG8gZmlsZSB0aGF0IGNv
bnRhaW5lZCB0aGUgYXNzb2NpYXRlZAotICAvLyBwcm90b2J1ZiBlbGVtZW50LiAgRm9yIGV4YW1w
bGU6IGAiZ29vZ2xlL3Byb3RvYnVmL3NvdXJjZS5wcm90byJgLgotICBzdHJpbmcgZmlsZV9uYW1l
ID0gMTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucGIuY2MgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvc3RydWN0LnBiLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxMWNjYWJiZjNiOTc3YzdiNWRjMjcwNDJiZDcwYzMzZDdlNWFjNGU2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9z
dHJ1Y3QucGIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAwICswLDAgQEAKLS8vIEdlbmVyYXRl
ZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3Vy
Y2U6IGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8KLQotI2RlZmluZSBJTlRFUk5BTF9TVVBQ
UkVTU19QUk9UT0JVRl9GSUVMRF9ERVBSRUNBVElPTgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHJ1Y3QucGIuaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvcG9ydC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9t
ZXNzYWdlX3JlZmxlY3Rpb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVmbGVjdGlv
bl9vcHMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLS8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChpbmNsdWRlcykKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1u
YW1lc3BhY2UgcHJvdG9idWYgewotCi1uYW1lc3BhY2UgewotCi1jb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OkRlc2NyaXB0b3IqIFN0cnVjdF9kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAg
U3RydWN0X3JlZmxlY3Rpb25fID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogU3RydWN0X0ZpZWxkc0VudHJ5X2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogVmFsdWVfZGVzY3JpcHRvcl8gPSBOVUxMOwot
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxl
Y3Rpb24qCi0gIFZhbHVlX3JlZmxlY3Rpb25fID0gTlVMTDsKLXN0cnVjdCBWYWx1ZU9uZW9mSW5z
dGFuY2UgewotICBpbnQgbnVsbF92YWx1ZV87Ci0gIGRvdWJsZSBudW1iZXJfdmFsdWVfOwotICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciBzdHJpbmdfdmFsdWVf
OwotICBib29sIGJvb2xfdmFsdWVfOwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlN0cnVj
dCogc3RydWN0X3ZhbHVlXzsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpMaXN0VmFsdWUq
IGxpc3RfdmFsdWVfOwotfSogVmFsdWVfZGVmYXVsdF9vbmVvZl9pbnN0YW5jZV8gPSBOVUxMOwot
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBMaXN0VmFsdWVfZGVzY3JpcHRv
cl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVk
TWVzc2FnZVJlZmxlY3Rpb24qCi0gIExpc3RWYWx1ZV9yZWZsZWN0aW9uXyA9IE5VTEw7Ci1jb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yKiBOdWxsVmFsdWVfZGVzY3JpcHRv
cl8gPSBOVUxMOwotCi19ICAvLyBuYW1lc3BhY2UKLQotCi12b2lkIHByb3RvYnVmX0Fzc2lnbkRl
c2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZzdHJ1Y3RfMmVwcm90bygpIHsKLSAgcHJvdG9idWZfQWRk
RGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnN0cnVjdF8yZXByb3RvKCk7Ci0gIGNvbnN0IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3IqIGZpbGUgPQotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RGVzY3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCktPkZpbmRGaWxlQnlOYW1lKAot
ICAgICAgImdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8iKTsKLSAgR09PR0xFX0NIRUNLKGZp
bGUgIT0gTlVMTCk7Ci0gIFN0cnVjdF9kZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlwZSgw
KTsKLSAgc3RhdGljIGNvbnN0IGludCBTdHJ1Y3Rfb2Zmc2V0c19bMV0gPSB7Ci0gICAgR09PR0xF
X1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChTdHJ1Y3QsIGZpZWxkc18p
LAotICB9OwotICBTdHJ1Y3RfcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvbigKLSAgICAgIFN0cnVjdF9kZXNjcmlwdG9yXywKLSAgICAgIFN0cnVjdDo6ZGVm
YXVsdF9pbnN0YW5jZV8sCi0gICAgICBTdHJ1Y3Rfb2Zmc2V0c18sCi0gICAgICAtMSwKLSAgICAg
IC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoU3RydWN0KSwKLSAgICAgIEdPT0dMRV9QUk9U
T0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoU3RydWN0LCBfaW50ZXJuYWxfbWV0
YWRhdGFfKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9P
RkZTRVQoU3RydWN0LCBfaXNfZGVmYXVsdF9pbnN0YW5jZV8pKTsKLSAgU3RydWN0X0ZpZWxkc0Vu
dHJ5X2Rlc2NyaXB0b3JfID0gU3RydWN0X2Rlc2NyaXB0b3JfLT5uZXN0ZWRfdHlwZSgwKTsKLSAg
VmFsdWVfZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUoMSk7Ci0gIHN0YXRpYyBjb25z
dCBpbnQgVmFsdWVfb2Zmc2V0c19bN10gPSB7Ci0gICAgUFJPVE8yX0dFTkVSQVRFRF9ERUZBVUxU
X09ORU9GX0ZJRUxEX09GRlNFVChWYWx1ZV9kZWZhdWx0X29uZW9mX2luc3RhbmNlXywgbnVsbF92
YWx1ZV8pLAotICAgIFBST1RPMl9HRU5FUkFURURfREVGQVVMVF9PTkVPRl9GSUVMRF9PRkZTRVQo
VmFsdWVfZGVmYXVsdF9vbmVvZl9pbnN0YW5jZV8sIG51bWJlcl92YWx1ZV8pLAotICAgIFBST1RP
Ml9HRU5FUkFURURfREVGQVVMVF9PTkVPRl9GSUVMRF9PRkZTRVQoVmFsdWVfZGVmYXVsdF9vbmVv
Zl9pbnN0YW5jZV8sIHN0cmluZ192YWx1ZV8pLAotICAgIFBST1RPMl9HRU5FUkFURURfREVGQVVM
VF9PTkVPRl9GSUVMRF9PRkZTRVQoVmFsdWVfZGVmYXVsdF9vbmVvZl9pbnN0YW5jZV8sIGJvb2xf
dmFsdWVfKSwKLSAgICBQUk9UTzJfR0VORVJBVEVEX0RFRkFVTFRfT05FT0ZfRklFTERfT0ZGU0VU
KFZhbHVlX2RlZmF1bHRfb25lb2ZfaW5zdGFuY2VfLCBzdHJ1Y3RfdmFsdWVfKSwKLSAgICBQUk9U
TzJfR0VORVJBVEVEX0RFRkFVTFRfT05FT0ZfRklFTERfT0ZGU0VUKFZhbHVlX2RlZmF1bHRfb25l
b2ZfaW5zdGFuY2VfLCBsaXN0X3ZhbHVlXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRF
RF9NRVNTQUdFX0ZJRUxEX09GRlNFVChWYWx1ZSwga2luZF8pLAotICB9OwotICBWYWx1ZV9yZWZs
ZWN0aW9uXyA9Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVz
c2FnZVJlZmxlY3Rpb246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKAotICAgICAgVmFs
dWVfZGVzY3JpcHRvcl8sCi0gICAgICBWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAgICBW
YWx1ZV9vZmZzZXRzXywKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIFZh
bHVlX2RlZmF1bHRfb25lb2ZfaW5zdGFuY2VfLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVS
QVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChWYWx1ZSwgX29uZW9mX2Nhc2VfWzBdKSwKLSAgICAg
IHNpemVvZihWYWx1ZSksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VUKFZhbHVlLCBfaW50ZXJuYWxfbWV0YWRhdGFfKSwKLSAgICAgIEdPT0dMRV9Q
Uk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVmFsdWUsIF9pc19kZWZhdWx0
X2luc3RhbmNlXykpOwotICBMaXN0VmFsdWVfZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5
cGUoMik7Ci0gIHN0YXRpYyBjb25zdCBpbnQgTGlzdFZhbHVlX29mZnNldHNfWzFdID0gewotICAg
IEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoTGlzdFZhbHVl
LCB2YWx1ZXNfKSwKLSAgfTsKLSAgTGlzdFZhbHVlX3JlZmxlY3Rpb25fID0KLSAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2Vu
ZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBMaXN0VmFsdWVfZGVzY3JpcHRvcl8sCi0g
ICAgICBMaXN0VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgTGlzdFZhbHVlX29mZnNl
dHNfLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKExpc3RW
YWx1ZSksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZG
U0VUKExpc3RWYWx1ZSwgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICBHT09HTEVfUFJPVE9C
VUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKExpc3RWYWx1ZSwgX2lzX2RlZmF1bHRf
aW5zdGFuY2VfKSk7Ci0gIE51bGxWYWx1ZV9kZXNjcmlwdG9yXyA9IGZpbGUtPmVudW1fdHlwZSgw
KTsKLX0KLQotbmFtZXNwYWNlIHsKLQotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShwcm90
b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc19vbmNlXyk7Ci1pbmxpbmUgdm9pZCBwcm90b2J1Zl9Bc3Np
Z25EZXNjcmlwdG9yc09uY2UoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xlT25jZUlu
aXQoJnByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzX29uY2VfLAotICAgICAgICAgICAgICAgICAm
cHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnN0cnVjdF8yZXByb3RvKTsK
LX0KLQotdm9pZCBwcm90b2J1Zl9SZWdpc3RlclR5cGVzKGNvbnN0IDo6c3RkOjpzdHJpbmcmKSB7
Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgKLSAg
ICAgIFN0cnVjdF9kZXNjcmlwdG9yXywgJlN0cnVjdDo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVy
YXRlZE1lc3NhZ2UoCi0gICAgICAgIFN0cnVjdF9GaWVsZHNFbnRyeV9kZXNjcmlwdG9yXywKLSAg
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6TWFwRW50cnk8Ci0gICAgICAgICAg
ICA6OnN0ZDo6c3RyaW5nLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpWYWx1ZSwK
LSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpUWVBFX1NUUklORywKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpUWVBFX01FU1NBR0UsCi0gICAgICAgICAgICAwPjo6Q3JlYXRlRGVm
YXVsdEluc3RhbmNlKAotICAgICAgICAgICAgICAgIFN0cnVjdF9GaWVsZHNFbnRyeV9kZXNjcmlw
dG9yXykpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJl
Z2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgKLSAgICAgIFZhbHVlX2Rlc2NyaXB0b3JfLCAmVmFsdWU6
OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rv
cnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgTGlzdFZhbHVlX2Rl
c2NyaXB0b3JfLCAmTGlzdFZhbHVlOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotfQotCi19ICAvLyBu
YW1lc3BhY2UKLQotdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZf
MmZzdHJ1Y3RfMmVwcm90bygpIHsKLSAgZGVsZXRlIFN0cnVjdDo6ZGVmYXVsdF9pbnN0YW5jZV87
Ci0gIGRlbGV0ZSBTdHJ1Y3RfcmVmbGVjdGlvbl87Ci0gIGRlbGV0ZSBWYWx1ZTo6ZGVmYXVsdF9p
bnN0YW5jZV87Ci0gIGRlbGV0ZSBWYWx1ZV9kZWZhdWx0X29uZW9mX2luc3RhbmNlXzsKLSAgZGVs
ZXRlIFZhbHVlX3JlZmxlY3Rpb25fOwotICBkZWxldGUgTGlzdFZhbHVlOjpkZWZhdWx0X2luc3Rh
bmNlXzsKLSAgZGVsZXRlIExpc3RWYWx1ZV9yZWZsZWN0aW9uXzsKLX0KLQotdm9pZCBwcm90b2J1
Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmc3RydWN0XzJlcHJvdG8oKSB7Ci0gIHN0YXRp
YyBib29sIGFscmVhZHlfaGVyZSA9IGZhbHNlOwotICBpZiAoYWxyZWFkeV9oZXJlKSByZXR1cm47
Ci0gIGFscmVhZHlfaGVyZSA9IHRydWU7Ci0gIEdPT0dMRV9QUk9UT0JVRl9WRVJJRllfVkVSU0lP
TjsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQb29sOjpJbnRlcm5hbEFkZEdl
bmVyYXRlZEZpbGUoCi0gICAgIlxuXDAzNGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG9cMDIy
XDAxN2dvb2dsZS5wIgotICAgICJyb3RvYnVmXCJcMjA0XDAwMVxuXDAwNlN0cnVjdFwwMjIzXG5c
MDA2ZmllbGRzXDAzMFwwMDEgXDAwMyhcMDEzMiMuZ29vIgotICAgICJnbGUucHJvdG9idWYuU3Ry
dWN0LkZpZWxkc0VudHJ5XDAzMkVcblwwMTNGaWVsZCIKLSAgICAic0VudHJ5XDAyMlwwMTNcblww
MDNrZXlcMDMwXDAwMSBcMDAxKFx0XDAyMiVcblwwMDV2YWx1ZVwwMzBcMDAyIFwwMDEoXDAxMzJc
MDI2LmdvbyIKLSAgICAiZ2xlLnByb3RvYnVmLlZhbHVlOlwwMDI4XDAwMVwiXDM1MlwwMDFcblww
MDVWYWx1ZVwwMjIwXG5cbm51bGwiCi0gICAgIl92YWx1ZVwwMzBcMDAxIFwwMDEoXDAxNjJcMDMy
Lmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUiCi0gICAgIkhcMDAwXDAyMlwwMjZcblwwMTRudW1i
ZXJfdmFsdWVcMDMwXDAwMiBcMDAxKFwwMDFIXDAwMFwwMjJcMDI2XG5cMDE0c3RyaW5nX3ZhbCIK
LSAgICAidWVcMDMwXDAwMyBcMDAxKFx0SFwwMDBcMDIyXDAyNFxuXG5ib29sX3ZhbHVlXDAzMFww
MDQgXDAwMShcMDEwSFwwMDBcMDIyL1xuXDAxNHN0cnUiCi0gICAgImN0X3ZhbHVlXDAzMFwwMDUg
XDAwMShcMDEzMlwwMjcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgiCi0gICAgIlwwMDBcMDIyMFxu
XG5saXN0X3ZhbHVlXDAzMFwwMDYgXDAwMShcMDEzMlwwMzIuZ29vZ2xlLnByb3RvYnVmLiIKLSAg
ICAiTGlzdFZhbHVlSFwwMDBCXDAwNlxuXDAwNGtpbmRcIjNcblx0TGlzdFZhbHVlXDAyMiZcblww
MDZ2YWx1IgotICAgICJlc1wwMzBcMDAxIFwwMDMoXDAxMzJcMDI2Lmdvb2dsZS5wcm90b2J1Zi5W
YWx1ZSpcMDMzXG5cdE51bGwiCi0gICAgIlZhbHVlXDAyMlwwMTZcblxuTlVMTF9WQUxVRVwwMjBc
MDAwQlwyMDFcMDAxXG5cMDIzY29tLmdvb2dsZS5wcm8iCi0gICAgInRvYnVmQlwwMTNTdHJ1Y3RQ
cm90b1BcMDAxWjFnaXRodWIuY29tL2dvbGFuZy8iCi0gICAgInByb3RvYnVmL3B0eXBlcy9zdHJ1
Y3Q7c3RydWN0cGJcMjQwXDAwMVwwMDFcMjQyXDAwMlwwMDNHUEIiCi0gICAgIlwyNTJcMDAyXDAz
Nkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2JcMDA2cHJvdG8iCi0gICAgIjMiLCA2NDEp
OwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVy
R2VuZXJhdGVkRmlsZSgKLSAgICAiZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90byIsICZwcm90
b2J1Zl9SZWdpc3RlclR5cGVzKTsKLSAgU3RydWN0OjpkZWZhdWx0X2luc3RhbmNlXyA9IG5ldyBT
dHJ1Y3QoKTsKLSAgVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IFZhbHVlKCk7Ci0gIFZh
bHVlX2RlZmF1bHRfb25lb2ZfaW5zdGFuY2VfID0gbmV3IFZhbHVlT25lb2ZJbnN0YW5jZSgpOwot
ICBMaXN0VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IExpc3RWYWx1ZSgpOwotICBTdHJ1
Y3Q6OmRlZmF1bHRfaW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgVmFsdWU6
OmRlZmF1bHRfaW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgTGlzdFZhbHVl
OjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6Ok9uU2h1dGRvd24oJnByb3RvYnVmX1NodXRkb3duRmlsZV9n
b29nbGVfMmZwcm90b2J1Zl8yZnN0cnVjdF8yZXByb3RvKTsKLX0KLQotLy8gRm9yY2UgQWRkRGVz
Y3JpcHRvcnMoKSB0byBiZSBjYWxsZWQgYXQgc3RhdGljIGluaXRpYWxpemF0aW9uIHRpbWUuCi1z
dHJ1Y3QgU3RhdGljRGVzY3JpcHRvckluaXRpYWxpemVyX2dvb2dsZV8yZnByb3RvYnVmXzJmc3Ry
dWN0XzJlcHJvdG8gewotICBTdGF0aWNEZXNjcmlwdG9ySW5pdGlhbGl6ZXJfZ29vZ2xlXzJmcHJv
dG9idWZfMmZzdHJ1Y3RfMmVwcm90bygpIHsKLSAgICBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8y
ZnByb3RvYnVmXzJmc3RydWN0XzJlcHJvdG8oKTsKLSAgfQotfSBzdGF0aWNfZGVzY3JpcHRvcl9p
bml0aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8yZnN0cnVjdF8yZXByb3RvXzsKLWNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3IqIE51bGxWYWx1ZV9kZXNjcmlwdG9yKCkg
ewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIE51bGxWYWx1
ZV9kZXNjcmlwdG9yXzsKLX0KLWJvb2wgTnVsbFZhbHVlX0lzVmFsaWQoaW50IHZhbHVlKSB7Ci0g
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KLQotCi1uYW1lc3BhY2UgewotCi1z
dGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGludCBsaW5lKSBHT09HTEVfQVRUUklCVVRFX0NPTEQ7
Ci1zdGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGludCBsaW5lKSB7Ci0gIEdPT0dMRV9DSEVDSyhm
YWxzZSkgPDwgX19GSUxFX18gPDwgIjoiIDw8IGxpbmU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQot
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+
PSAxOTAwCi1jb25zdCBpbnQgU3RydWN0OjprRmllbGRzRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8v
ICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLVN0cnVjdDo6U3RydWN0
KCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRh
XyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QpCi19Ci0KLXZvaWQgU3RydWN0OjpJ
bml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IHRydWU7
Ci19Ci0KLVN0cnVjdDo6U3RydWN0KGNvbnN0IFN0cnVjdCYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAg
U2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QpCi19Ci0KLXZv
aWQgU3RydWN0OjpTaGFyZWRDdG9yKCkgewotICAgIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IGZh
bHNlOwotICBfY2FjaGVkX3NpemVfID0gMDsKLSAgZmllbGRzXy5TZXRBc3NpZ25EZXNjcmlwdG9y
Q2FsbGJhY2soCi0gICAgICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UpOwotICBmaWVs
ZHNfLlNldEVudHJ5RGVzY3JpcHRvcigKLSAgICAgICY6Omdvb2dsZTo6cHJvdG9idWY6OlN0cnVj
dF9GaWVsZHNFbnRyeV9kZXNjcmlwdG9yXyk7Ci19Ci0KLVN0cnVjdDo6flN0cnVjdCgpIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLlN0
cnVjdCkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lkIFN0cnVjdDo6U2hhcmVkRHRvcigpIHsK
LSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIFN0cnVj
dDo6U2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3QgewotICBHT09HTEVfU0FGRV9DT05DVVJS
RU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gc2l6ZTsKLSAgR09PR0xFX1NB
RkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OkRlc2NyaXB0b3IqIFN0cnVjdDo6ZGVzY3JpcHRvcigpIHsKLSAgcHJvdG9idWZfQXNzaWduRGVz
Y3JpcHRvcnNPbmNlKCk7Ci0gIHJldHVybiBTdHJ1Y3RfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0
IFN0cnVjdCYgU3RydWN0OjpkZWZhdWx0X2luc3RhbmNlKCkgewotICBpZiAoZGVmYXVsdF9pbnN0
YW5jZV8gPT0gTlVMTCkgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnN0cnVj
dF8yZXByb3RvKCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLVN0cnVjdCog
U3RydWN0OjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLVN0cnVjdCogU3RydWN0OjpOZXco
Ojpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgU3RydWN0KiBuID0g
bmV3IFN0cnVjdDsKLSAgaWYgKGFyZW5hICE9IE5VTEwpIHsKLSAgICBhcmVuYS0+T3duKG4pOwot
ICB9Ci0gIHJldHVybiBuOwotfQotCi12b2lkIFN0cnVjdDo6Q2xlYXIoKSB7Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUucHJvdG9idWYuU3Ry
dWN0KQotICBmaWVsZHNfLkNsZWFyKCk7Ci19Ci0KLWJvb2wgU3RydWN0OjpNZXJnZVBhcnRpYWxG
cm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0
cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJ
Q1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5TdHJ1Y3QpCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpn
b29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRv
ZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFu
ZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gbWFwPHN0
cmluZywgLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZT4gZmllbGRzID0gMTsKLSAgICAgIGNhc2UgMTog
ewotICAgICAgICBpZiAodGFnID09IDEwKSB7Ci0gICAgICAgICAgRE9fKGlucHV0LT5JbmNyZW1l
bnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBhcnNlX2xvb3BfZmllbGRzOgotICAgICAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxTdHJ1Y3RfRmllbGRzRW50cnk+IGVu
dHJ5KGZpZWxkc18uTmV3RW50cnkoKSk7Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbCgKLSAgICAg
ICAgICAgICAgaW5wdXQsIGVudHJ5LmdldCgpKSk7Ci0gICAgICAgICAgKCptdXRhYmxlX2ZpZWxk
cygpKVtlbnRyeS0+a2V5KCldLlN3YXAoZW50cnktPm11dGFibGVfdmFsdWUoKSk7Ci0gICAgICAg
ICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJp
ZnlVdGY4U3RyaW5nKAotICAgICAgICAgICAgZW50cnktPmtleSgpLmRhdGEoKSwgZW50cnktPmtl
eSgpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5TdHJ1
Y3QuRmllbGRzRW50cnkua2V5IikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8g
aGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWco
MTApKSBnb3RvIHBhcnNlX2xvb3BfZmllbGRzOwotICAgICAgICBpbnB1dC0+VW5zYWZlRGVjcmVt
ZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBn
b3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7
Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAg
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFn
V2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8g
c3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OlNraXBGaWVsZChpbnB1dCwgdGFnKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLlN0cnVjdCkKLSAgcmV0dXJu
IHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFp
bHVyZTpnb29nbGUucHJvdG9idWYuU3RydWN0KQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9f
Ci19Ci0KLXZvaWQgU3RydWN0OjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5TdHJ1Y3QpCi0gIC8vIG1hcDxzdHJpbmcsIC5nb29nbGUucHJvdG9idWYuVmFsdWU+IGZpZWxk
cyA9IDE7Ci0gIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8U3RydWN0X0Zp
ZWxkc0VudHJ5PiBlbnRyeTsKLSAgICBmb3IgKDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWFwPCA6OnN0
ZDo6c3RyaW5nLCA6Omdvb2dsZTo6cHJvdG9idWY6OlZhbHVlID46OmNvbnN0X2l0ZXJhdG9yCi0g
ICAgICAgIGl0ID0gdGhpcy0+ZmllbGRzKCkuYmVnaW4oKTsKLSAgICAgICAgaXQgIT0gdGhpcy0+
ZmllbGRzKCkuZW5kKCk7ICsraXQpIHsKLSAgICAgIGVudHJ5LnJlc2V0KGZpZWxkc18uTmV3RW50
cnlXcmFwcGVyKGl0LT5maXJzdCwgaXQtPnNlY29uZCkpOwotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgK
LSAgICAgICAgICAxLCAqZW50cnksIG91dHB1dCk7Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgICAgaXQt
PmZpcnN0LmRhdGEoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpLAotICAgICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U0VSSUFMSVpFLAotICAgICAgICAiZ29v
Z2xlLnByb3RvYnVmLlN0cnVjdC5GaWVsZHNFbnRyeS5rZXkiKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYu
U3RydWN0KQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTdHJ1Y3Q6OlNlcmlhbGl6
ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCog
dGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVf
dG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlN0cnVjdCkKLSAgLy8gbWFwPHN0cmluZywg
Lmdvb2dsZS5wcm90b2J1Zi5WYWx1ZT4gZmllbGRzID0gMTsKLSAgewotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6c2NvcGVkX3B0cjxTdHJ1Y3RfRmllbGRzRW50cnk+IGVudHJ5OwotICAgIGZvciAo
Ojpnb29nbGU6OnByb3RvYnVmOjpNYXA8IDo6c3RkOjpzdHJpbmcsIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6VmFsdWUgPjo6Y29uc3RfaXRlcmF0b3IKLSAgICAgICAgaXQgPSB0aGlzLT5maWVsZHMoKS5i
ZWdpbigpOwotICAgICAgICBpdCAhPSB0aGlzLT5maWVsZHMoKS5lbmQoKTsgKytpdCkgewotICAg
ICAgZW50cnkucmVzZXQoZmllbGRzXy5OZXdFbnRyeVdyYXBwZXIoaXQtPmZpcnN0LCBpdC0+c2Vj
b25kKSk7Ci0gICAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6Ci0gICAgICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAg
ICAgICAgICAgICAgMSwgKmVudHJ5LCB0YXJnZXQpOwotICAgICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlZlcmlmeVV0ZjhTdHJpbmcoCi0gICAgICAgIGl0
LT5maXJzdC5kYXRhKCksIGl0LT5maXJzdC5sZW5ndGgoKSwKLSAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICAgImdv
b2dsZS5wcm90b2J1Zi5TdHJ1Y3QuRmllbGRzRW50cnkua2V5Iik7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xl
LnByb3RvYnVmLlN0cnVjdCkKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IFN0cnVjdDo6Qnl0
ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRl
X3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlN0cnVjdCkKLSAgaW50IHRvdGFsX3NpemUgPSAw
OwotCi0gIC8vIG1hcDxzdHJpbmcsIC5nb29nbGUucHJvdG9idWYuVmFsdWU+IGZpZWxkcyA9IDE7
Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMtPmZpZWxkc19zaXplKCk7Ci0gIHsKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8U3RydWN0X0ZpZWxkc0VudHJ5PiBlbnRyeTsKLSAg
ICBmb3IgKDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWFwPCA6OnN0ZDo6c3RyaW5nLCA6Omdvb2dsZTo6
cHJvdG9idWY6OlZhbHVlID46OmNvbnN0X2l0ZXJhdG9yCi0gICAgICAgIGl0ID0gdGhpcy0+Zmll
bGRzKCkuYmVnaW4oKTsKLSAgICAgICAgaXQgIT0gdGhpcy0+ZmllbGRzKCkuZW5kKCk7ICsraXQp
IHsKLSAgICAgIGVudHJ5LnJlc2V0KGZpZWxkc18uTmV3RW50cnlXcmFwcGVyKGl0LT5maXJzdCwg
aXQtPnNlY29uZCkpOwotICAgICAgdG90YWxfc2l6ZSArPSA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICAgICAgTWVzc2FnZVNpemVOb1ZpcnR1YWwo
KmVudHJ5KTsKLSAgICB9Ci0gIH0KLQotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19C
RUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09O
Q1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3RhbF9zaXplOwotfQotCi12b2lkIFN0
cnVjdDo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkg
ewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLlN0cnVjdCkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZm
cm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgU3RydWN0KiBz
b3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0
VG9HZW5lcmF0ZWQ8Y29uc3QgU3RydWN0PigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3Vy
Y2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRf
bWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLlN0cnVjdCkKLSAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsK
LSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21l
cmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QpCi0gICAgTWVyZ2VG
cm9tKCpzb3VyY2UpOwotICB9Ci19Ci0KLXZvaWQgU3RydWN0OjpNZXJnZUZyb20oY29uc3QgU3Ry
dWN0JiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNf
bWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuU3RydWN0KQotICBpZiAoR09PR0xFX1BS
RURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBm
aWVsZHNfLk1lcmdlRnJvbShmcm9tLmZpZWxkc18pOwotfQotCi12b2lkIFN0cnVjdDo6Q29weUZy
b20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90
b2J1Zi5TdHJ1Y3QpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0g
IE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBTdHJ1Y3Q6OkNvcHlGcm9tKGNvbnN0IFN0cnVj
dCYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2Nv
cHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuU3RydWN0KQotICBpZiAoJmZyb20gPT0gdGhp
cykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLWJvb2wgU3Ry
dWN0OjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFN0cnVjdDo6U3dhcChTdHJ1Y3QqIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1
cm47Ci0gIEludGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lkIFN0cnVjdDo6SW50ZXJuYWxTd2Fw
KFN0cnVjdCogb3RoZXIpIHsKLSAgZmllbGRzXy5Td2FwKCZvdGhlci0+ZmllbGRzXyk7Ci0gIF9p
bnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBz
dGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdv
b2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIFN0cnVjdDo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0g
IHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1ldGFkYXRhIG1ldGFkYXRhOwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gU3RydWN0X2Rlc2Ny
aXB0b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gU3RydWN0X3JlZmxlY3Rpb25fOwotICBy
ZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMK
LS8vIFN0cnVjdAotCi0vLyBtYXA8c3RyaW5nLCAuZ29vZ2xlLnByb3RvYnVmLlZhbHVlPiBmaWVs
ZHMgPSAxOwotaW50IFN0cnVjdDo6ZmllbGRzX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBmaWVs
ZHNfLnNpemUoKTsKLX0KLXZvaWQgU3RydWN0OjpjbGVhcl9maWVsZHMoKSB7Ci0gIGZpZWxkc18u
Q2xlYXIoKTsKLX0KLSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1hcDwgOjpzdGQ6OnN0cmlu
ZywgOjpnb29nbGU6OnByb3RvYnVmOjpWYWx1ZSA+JgotU3RydWN0OjpmaWVsZHMoKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tYXA6Z29vZ2xlLnByb3RvYnVm
LlN0cnVjdC5maWVsZHMpCi0gIHJldHVybiBmaWVsZHNfLkdldE1hcCgpOwotfQotIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWFwPCA6OnN0ZDo6c3RyaW5nLCA6Omdvb2dsZTo6cHJvdG9idWY6OlZhbHVl
ID4qCi1TdHJ1Y3Q6Om11dGFibGVfZmllbGRzKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfbXV0YWJsZV9tYXA6Z29vZ2xlLnByb3RvYnVmLlN0cnVjdC5maWVsZHMpCi0g
IHJldHVybiBmaWVsZHNfLk11dGFibGVNYXAoKTsKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JVRl9J
TkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWYgIWRlZmluZWQoX01T
Q19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBWYWx1ZTo6a051bGxWYWx1ZUZp
ZWxkTnVtYmVyOwotY29uc3QgaW50IFZhbHVlOjprTnVtYmVyVmFsdWVGaWVsZE51bWJlcjsKLWNv
bnN0IGludCBWYWx1ZTo6a1N0cmluZ1ZhbHVlRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgVmFsdWU6
OmtCb29sVmFsdWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBWYWx1ZTo6a1N0cnVjdFZhbHVlRmll
bGROdW1iZXI7Ci1jb25zdCBpbnQgVmFsdWU6OmtMaXN0VmFsdWVGaWVsZE51bWJlcjsKLSNlbmRp
ZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotVmFsdWU6OlZh
bHVlKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFk
YXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSkKLX0KLQotdm9pZCBWYWx1ZTo6
SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSB0cnVl
OwotICBWYWx1ZV9kZWZhdWx0X29uZW9mX2luc3RhbmNlXy0+bnVsbF92YWx1ZV8gPSAwOwotICBW
YWx1ZV9kZWZhdWx0X29uZW9mX2luc3RhbmNlXy0+bnVtYmVyX3ZhbHVlXyA9IDA7Ci0gIFZhbHVl
X2RlZmF1bHRfb25lb2ZfaW5zdGFuY2VfLT5zdHJpbmdfdmFsdWVfLlVuc2FmZVNldERlZmF1bHQo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLSAgVmFsdWVfZGVmYXVsdF9vbmVvZl9pbnN0YW5jZV8tPmJvb2xfdmFsdWVfID0gZmFs
c2U7Ci0gIFZhbHVlX2RlZmF1bHRfb25lb2ZfaW5zdGFuY2VfLT5zdHJ1Y3RfdmFsdWVfID0gY29u
c3RfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpTdHJ1Y3QqPigmOjpnb29nbGU6OnByb3RvYnVm
OjpTdHJ1Y3Q6OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci0gIFZhbHVlX2RlZmF1bHRfb25lb2ZfaW5z
dGFuY2VfLT5saXN0X3ZhbHVlXyA9IGNvbnN0X2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TGlz
dFZhbHVlKj4oJjo6Z29vZ2xlOjpwcm90b2J1Zjo6TGlzdFZhbHVlOjpkZWZhdWx0X2luc3RhbmNl
KCkpOwotfQotCi1WYWx1ZTo6VmFsdWUoY29uc3QgVmFsdWUmIGZyb20pCi0gIDogOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0g
IFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuVmFsdWUpCi19Ci0KLXZv
aWQgVmFsdWU6OlNoYXJlZEN0b3IoKSB7Ci0gICAgX2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gZmFs
c2U7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCk7Ci0g
IF9jYWNoZWRfc2l6ZV8gPSAwOwotICBjbGVhcl9oYXNfa2luZCgpOwotfQotCi1WYWx1ZTo6flZh
bHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUu
cHJvdG9idWYuVmFsdWUpCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBWYWx1ZTo6U2hhcmVk
RHRvcigpIHsKLSAgaWYgKGhhc19raW5kKCkpIHsKLSAgICBjbGVhcl9raW5kKCk7Ci0gIH0KLSAg
aWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIFZhbHVlOjpT
ZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9D
T05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogVmFsdWU6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0
b3JzT25jZSgpOwotICByZXR1cm4gVmFsdWVfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IFZhbHVl
JiBWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09
IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZzdHJ1Y3RfMmVwcm90
bygpOwotICByZXR1cm4gKmRlZmF1bHRfaW5zdGFuY2VfOwotfQotCi1WYWx1ZSogVmFsdWU6OmRl
ZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotVmFsdWUqIFZhbHVlOjpOZXcoOjpnb29nbGU6OnBy
b3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgVmFsdWUqIG4gPSBuZXcgVmFsdWU7Ci0g
IGlmIChhcmVuYSAhPSBOVUxMKSB7Ci0gICAgYXJlbmEtPk93bihuKTsKLSAgfQotICByZXR1cm4g
bjsKLX0KLQotdm9pZCBWYWx1ZTo6Y2xlYXJfa2luZCgpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChvbmVfb2ZfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlZhbHVlKQotICBzd2l0
Y2goa2luZF9jYXNlKCkpIHsKLSAgICBjYXNlIGtOdWxsVmFsdWU6IHsKLSAgICAgIC8vIE5vIG5l
ZWQgdG8gY2xlYXIKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGtOdW1iZXJWYWx1ZTog
ewotICAgICAgLy8gTm8gbmVlZCB0byBjbGVhcgotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2Uga1N0cmluZ1ZhbHVlOiB7Ci0gICAgICBraW5kXy5zdHJpbmdfdmFsdWVfLkRlc3Ryb3lOb0Fy
ZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJ
bml0ZWQoKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBrQm9vbFZhbHVlOiB7Ci0g
ICAgICAvLyBObyBuZWVkIHRvIGNsZWFyCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBr
U3RydWN0VmFsdWU6IHsKLSAgICAgIGRlbGV0ZSBraW5kXy5zdHJ1Y3RfdmFsdWVfOwotICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2Uga0xpc3RWYWx1ZTogewotICAgICAgZGVsZXRlIGtpbmRf
Lmxpc3RfdmFsdWVfOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgS0lORF9OT1RfU0VU
OiB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgX29uZW9mX2Nhc2VfWzBdID0gS0lORF9O
T1RfU0VUOwotfQotCi0KLXZvaWQgVmFsdWU6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlZhbHVlKQotICBj
bGVhcl9raW5kKCk7Ci19Ci0KLWJvb2wgVmFsdWU6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVh
bSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkg
ewotI2RlZmluZSBET18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJF
U1NJT04pKSBnb3RvIGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LlZhbHVlKQotICBmb3IgKDs7KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6dWludDMyLCBib29sPiBwID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0b2ZmKDEyNyk7Ci0gICAg
dGFnID0gcC5maXJzdDsKLSAgICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFsOwot
ICAgIHN3aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykpIHsKLSAgICAgIC8vIG9wdGlvbmFsIC5nb29nbGUucHJv
dG9idWYuTnVsbFZhbHVlIG51bGxfdmFsdWUgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAg
IGlmICh0YWcgPT0gOCkgewotICAgICAgICAgIGludCB2YWx1ZTsKLSAgICAgICAgICBET18oKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZl
PAotICAgICAgICAgICAgICAgICAgIGludCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OlRZUEVfRU5VTT4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmdmFs
dWUpKSk7Ci0gICAgICAgICAgc2V0X251bGxfdmFsdWUoc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TnVsbFZhbHVlID4odmFsdWUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhw
ZWN0VGFnKDE3KSkgZ290byBwYXJzZV9udW1iZXJfdmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBkb3VibGUgbnVtYmVyX3ZhbHVlID0gMjsKLSAgICAg
IGNhc2UgMjogewotICAgICAgICBpZiAodGFnID09IDE3KSB7Ci0gICAgICAgICBwYXJzZV9udW1i
ZXJfdmFsdWU6Ci0gICAgICAgICAgY2xlYXJfa2luZCgpOwotICAgICAgICAgIERPXygoOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0g
ICAgICAgICAgICAgICAgICAgZG91YmxlLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6VFlQRV9ET1VCTEU+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJmtp
bmRfLm51bWJlcl92YWx1ZV8pKSk7Ci0gICAgICAgICAgc2V0X2hhc19udW1iZXJfdmFsdWUoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDI2KSkgZ290byBwYXJzZV9zdHJpbmdf
dmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBzdHJp
bmcgc3RyaW5nX3ZhbHVlID0gMzsKLSAgICAgIGNhc2UgMzogewotICAgICAgICBpZiAodGFnID09
IDI2KSB7Ci0gICAgICAgICBwYXJzZV9zdHJpbmdfdmFsdWU6Ci0gICAgICAgICAgRE9fKDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAg
ICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5tdXRhYmxlX3N0cmluZ192YWx1ZSgpKSk7Ci0gICAg
ICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpW
ZXJpZnlVdGY4U3RyaW5nKAotICAgICAgICAgICAgdGhpcy0+c3RyaW5nX3ZhbHVlKCkuZGF0YSgp
LCB0aGlzLT5zdHJpbmdfdmFsdWUoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpQQVJTRSwKLSAgICAgICAgICAgICJn
b29nbGUucHJvdG9idWYuVmFsdWUuc3RyaW5nX3ZhbHVlIikpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlu
cHV0LT5FeHBlY3RUYWcoMzIpKSBnb3RvIHBhcnNlX2Jvb2xfdmFsdWU7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBib29sIGJvb2xfdmFsdWUgPSA0OwotICAg
ICAgY2FzZSA0OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMzIpIHsKLSAgICAgICAgIHBhcnNlX2Jv
b2xfdmFsdWU6Ci0gICAgICAgICAgY2xlYXJfa2luZCgpOwotICAgICAgICAgIERPXygoOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0g
ICAgICAgICAgICAgICAgICAgYm9vbCwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OlRZUEVfQk9PTD4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAma2luZF8u
Ym9vbF92YWx1ZV8pKSk7Ci0gICAgICAgICAgc2V0X2hhc19ib29sX3ZhbHVlKCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg0MikpIGdvdG8gcGFyc2Vfc3RydWN0X3ZhbHVlOwot
ICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90
b2J1Zi5TdHJ1Y3Qgc3RydWN0X3ZhbHVlID0gNTsKLSAgICAgIGNhc2UgNTogewotICAgICAgICBp
ZiAodGFnID09IDQyKSB7Ci0gICAgICAgICBwYXJzZV9zdHJ1Y3RfdmFsdWU6Ci0gICAgICAgICAg
RE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVz
c2FnZU5vVmlydHVhbCgKLSAgICAgICAgICAgICAgIGlucHV0LCBtdXRhYmxlX3N0cnVjdF92YWx1
ZSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsK
LSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg1MCkpIGdvdG8gcGFyc2Vf
bGlzdF92YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFs
IC5nb29nbGUucHJvdG9idWYuTGlzdFZhbHVlIGxpc3RfdmFsdWUgPSA2OwotICAgICAgY2FzZSA2
OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNTApIHsKLSAgICAgICAgIHBhcnNlX2xpc3RfdmFsdWU6
Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbCgKLSAgICAgICAgICAgICAgIGlucHV0LCBtdXRhYmxl
X2xpc3RfdmFsdWUoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxl
X3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBn
b3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7
Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAg
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFn
V2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8g
c3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OlNraXBGaWVsZChpbnB1dCwgdGFnKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLlZhbHVlKQotICByZXR1cm4g
dHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9mYWls
dXJlOmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSkKLSAgcmV0dXJuIGZhbHNlOwotI3VuZGVmIERPXwot
fQotCi12b2lkIFZhbHVlOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5W
YWx1ZSkKLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUgbnVsbF92YWx1
ZSA9IDE7Ci0gIGlmIChoYXNfbnVsbF92YWx1ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlRW51bSgKLSAgICAgIDEsIHRoaXMtPm51
bGxfdmFsdWUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGRvdWJsZSBudW1iZXJf
dmFsdWUgPSAyOwotICBpZiAoaGFzX251bWJlcl92YWx1ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlRG91YmxlKDIsIHRoaXMtPm51
bWJlcl92YWx1ZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIHN0cmlu
Z192YWx1ZSA9IDM7Ci0gIGlmIChoYXNfc3RyaW5nX3ZhbHVlKCkpIHsKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAg
ICAgIHRoaXMtPnN0cmluZ192YWx1ZSgpLmRhdGEoKSwgdGhpcy0+c3RyaW5nX3ZhbHVlKCkubGVu
Z3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5zdHJpbmdfdmFsdWUi
KTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3Jp
dGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAzLCB0aGlzLT5zdHJpbmdfdmFsdWUoKSwgb3V0
cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJvb2wgYm9vbF92YWx1ZSA9IDQ7Ci0gIGlmICho
YXNfYm9vbF92YWx1ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OldyaXRlQm9vbCg0LCB0aGlzLT5ib29sX3ZhbHVlKCksIG91dHB1dCk7Ci0g
IH0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCBzdHJ1Y3RfdmFsdWUg
PSA1OwotICBpZiAoaGFzX3N0cnVjdF92YWx1ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAg
ICAgIDUsICpraW5kXy5zdHJ1Y3RfdmFsdWVfLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9u
YWwgLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUgbGlzdF92YWx1ZSA9IDY7Ci0gIGlmIChoYXNf
bGlzdF92YWx1ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDYsICpraW5kXy5saXN0
X3ZhbHVlXywgb3V0cHV0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChz
ZXJpYWxpemVfZW5kOmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSkKLX0KLQotOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50OCogVmFsdWU6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LlZhbHVlKQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZSBudWxsX3Zh
bHVlID0gMTsKLSAgaWYgKGhhc19udWxsX3ZhbHVlKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVtVG9BcnJheSgK
LSAgICAgIDEsIHRoaXMtPm51bGxfdmFsdWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlv
bmFsIGRvdWJsZSBudW1iZXJfdmFsdWUgPSAyOwotICBpZiAoaGFzX251bWJlcl92YWx1ZSgpKSB7
Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OldyaXRlRG91YmxlVG9BcnJheSgyLCB0aGlzLT5udW1iZXJfdmFsdWUoKSwgdGFyZ2V0KTsK
LSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBzdHJpbmdfdmFsdWUgPSAzOwotICBpZiAoaGFz
X3N0cmluZ192YWx1ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OlZlcmlmeVV0ZjhTdHJpbmcoCi0gICAgICB0aGlzLT5zdHJpbmdfdmFsdWUo
KS5kYXRhKCksIHRoaXMtPnN0cmluZ192YWx1ZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJn
b29nbGUucHJvdG9idWYuVmFsdWUuc3RyaW5nX3ZhbHVlIik7Ci0gICAgdGFyZ2V0ID0KLSAgICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmlu
Z1RvQXJyYXkoCi0gICAgICAgIDMsIHRoaXMtPnN0cmluZ192YWx1ZSgpLCB0YXJnZXQpOwotICB9
Ci0KLSAgLy8gb3B0aW9uYWwgYm9vbCBib29sX3ZhbHVlID0gNDsKLSAgaWYgKGhhc19ib29sX3Zh
bHVlKCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6V3JpdGVCb29sVG9BcnJheSg0LCB0aGlzLT5ib29sX3ZhbHVlKCksIHRhcmdl
dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCBzdHJ1Y3Rf
dmFsdWUgPSA1OwotICBpZiAoaGFzX3N0cnVjdF92YWx1ZSgpKSB7Ci0gICAgdGFyZ2V0ID0gOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAgV3JpdGVN
ZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgNSwgKmtpbmRfLnN0cnVjdF92YWx1ZV8s
IHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1
ZSBsaXN0X3ZhbHVlID0gNjsKLSAgaWYgKGhhc19saXN0X3ZhbHVlKCkpIHsKLSAgICB0YXJnZXQg
PSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBX
cml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAotICAgICAgICA2LCAqa2luZF8ubGlzdF92YWx1
ZV8sIHRhcmdldCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFs
aXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuVmFsdWUpCi0gIHJldHVybiB0YXJnZXQ7
Ci19Ci0KLWludCBWYWx1ZTo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlZhbHVlKQot
ICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgc3dpdGNoIChraW5kX2Nhc2UoKSkgewotICAgIC8v
IG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlIG51bGxfdmFsdWUgPSAxOwotICAg
IGNhc2Uga051bGxWYWx1ZTogewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkVudW1TaXplKHRoaXMt
Pm51bGxfdmFsdWUoKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gb3B0aW9uYWwgZG91
YmxlIG51bWJlcl92YWx1ZSA9IDI7Ci0gICAgY2FzZSBrTnVtYmVyVmFsdWU6IHsKLSAgICAgIHRv
dGFsX3NpemUgKz0gMSArIDg7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gb3B0aW9uYWwg
c3RyaW5nIHN0cmluZ192YWx1ZSA9IDM7Ci0gICAgY2FzZSBrU3RyaW5nVmFsdWU6IHsKLSAgICAg
IHRvdGFsX3NpemUgKz0gMSArCi0gICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICAgIHRoaXMtPnN0cmluZ192YWx1
ZSgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBvcHRpb25hbCBib29sIGJvb2xfdmFs
dWUgPSA0OwotICAgIGNhc2Uga0Jvb2xWYWx1ZTogewotICAgICAgdG90YWxfc2l6ZSArPSAxICsg
MTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVm
LlN0cnVjdCBzdHJ1Y3RfdmFsdWUgPSA1OwotICAgIGNhc2Uga1N0cnVjdFZhbHVlOiB7Ci0gICAg
ICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAgICAgKmtpbmRf
LnN0cnVjdF92YWx1ZV8pOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIG9wdGlvbmFsIC5n
b29nbGUucHJvdG9idWYuTGlzdFZhbHVlIGxpc3RfdmFsdWUgPSA2OwotICAgIGNhc2Uga0xpc3RW
YWx1ZTogewotICAgICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAg
ICAgICAgICpraW5kXy5saXN0X3ZhbHVlXyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBLSU5EX05PVF9TRVQ6IHsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBHT09HTEVfU0FG
RV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6
ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3Rh
bF9zaXplOwotfQotCi12b2lkIFZhbHVlOjpNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJh
bGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuVmFsdWUpCi0gIGlmIChHT09H
TEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7
Ci0gIGNvbnN0IFZhbHVlKiBzb3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgVmFsdWU+KAotICAgICAgICAgICZm
cm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYuVmFs
dWUpCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6UmVmbGVjdGlvbk9wczo6TWVy
Z2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuVmFs
dWUpCi0gICAgTWVyZ2VGcm9tKCpzb3VyY2UpOwotICB9Ci19Ci0KLXZvaWQgVmFsdWU6Ok1lcmdl
RnJvbShjb25zdCBWYWx1ZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNs
YXNzX3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlZhbHVlKQotICBp
ZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19M
SU5FX18pOwotICBzd2l0Y2ggKGZyb20ua2luZF9jYXNlKCkpIHsKLSAgICBjYXNlIGtOdWxsVmFs
dWU6IHsKLSAgICAgIHNldF9udWxsX3ZhbHVlKGZyb20ubnVsbF92YWx1ZSgpKTsKLSAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIGtOdW1iZXJWYWx1ZTogewotICAgICAgc2V0X251bWJlcl92
YWx1ZShmcm9tLm51bWJlcl92YWx1ZSgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IGtTdHJpbmdWYWx1ZTogewotICAgICAgc2V0X3N0cmluZ192YWx1ZShmcm9tLnN0cmluZ192YWx1
ZSgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGtCb29sVmFsdWU6IHsKLSAgICAg
IHNldF9ib29sX3ZhbHVlKGZyb20uYm9vbF92YWx1ZSgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIGtTdHJ1Y3RWYWx1ZTogewotICAgICAgbXV0YWJsZV9zdHJ1Y3RfdmFsdWUoKS0+
Ojpnb29nbGU6OnByb3RvYnVmOjpTdHJ1Y3Q6Ok1lcmdlRnJvbShmcm9tLnN0cnVjdF92YWx1ZSgp
KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGtMaXN0VmFsdWU6IHsKLSAgICAgIG11
dGFibGVfbGlzdF92YWx1ZSgpLT46Omdvb2dsZTo6cHJvdG9idWY6Okxpc3RWYWx1ZTo6TWVyZ2VG
cm9tKGZyb20ubGlzdF92YWx1ZSgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEtJ
TkRfTk9UX1NFVDogewotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgVmFsdWU6
OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpnb29n
bGUucHJvdG9idWYuVmFsdWUpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFy
KCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBWYWx1ZTo6Q29weUZyb20oY29uc3Qg
VmFsdWUmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZp
Y19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlZhbHVlKQotICBpZiAoJmZyb20gPT0g
dGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLWJvb2wg
VmFsdWU6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgVmFsdWU6OlN3YXAoVmFsdWUqIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1
cm47Ci0gIEludGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lkIFZhbHVlOjpJbnRlcm5hbFN3YXAo
VmFsdWUqIG90aGVyKSB7Ci0gIHN0ZDo6c3dhcChraW5kXywgb3RoZXItPmtpbmRfKTsKLSAgc3Rk
Ojpzd2FwKF9vbmVvZl9jYXNlX1swXSwgb3RoZXItPl9vbmVvZl9jYXNlX1swXSk7Ci0gIF9pbnRl
cm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6
OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2ds
ZTo6cHJvdG9idWY6Ok1ldGFkYXRhIFZhbHVlOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJv
dG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0
YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBWYWx1ZV9kZXNjcmlwdG9y
XzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IFZhbHVlX3JlZmxlY3Rpb25fOwotICByZXR1cm4g
bWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIFZh
bHVlCi0KLS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlIG51bGxfdmFsdWUg
PSAxOwotYm9vbCBWYWx1ZTo6aGFzX251bGxfdmFsdWUoKSBjb25zdCB7Ci0gIHJldHVybiBraW5k
X2Nhc2UoKSA9PSBrTnVsbFZhbHVlOwotfQotdm9pZCBWYWx1ZTo6c2V0X2hhc19udWxsX3ZhbHVl
KCkgewotICBfb25lb2ZfY2FzZV9bMF0gPSBrTnVsbFZhbHVlOwotfQotdm9pZCBWYWx1ZTo6Y2xl
YXJfbnVsbF92YWx1ZSgpIHsKLSAgaWYgKGhhc19udWxsX3ZhbHVlKCkpIHsKLSAgICBraW5kXy5u
dWxsX3ZhbHVlXyA9IDA7Ci0gICAgY2xlYXJfaGFzX2tpbmQoKTsKLSAgfQotfQotIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TnVsbFZhbHVlIFZhbHVlOjpudWxsX3ZhbHVlKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5u
dWxsX3ZhbHVlKQotICBpZiAoaGFzX251bGxfdmFsdWUoKSkgewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpOdWxsVmFsdWUgPihraW5kXy5udWxsX3ZhbHVlXyk7
Ci0gIH0KLSAgcmV0dXJuIHN0YXRpY19jYXN0PCA6Omdvb2dsZTo6cHJvdG9idWY6Ok51bGxWYWx1
ZSA+KDApOwotfQotIHZvaWQgVmFsdWU6OnNldF9udWxsX3ZhbHVlKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TnVsbFZhbHVlIHZhbHVlKSB7Ci0gIGlmICghaGFzX251bGxfdmFsdWUoKSkgewotICAgIGNs
ZWFyX2tpbmQoKTsKLSAgICBzZXRfaGFzX251bGxfdmFsdWUoKTsKLSAgfQotICBraW5kXy5udWxs
X3ZhbHVlXyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
Omdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5udWxsX3ZhbHVlKQotfQotCi0vLyBvcHRpb25hbCBkb3Vi
bGUgbnVtYmVyX3ZhbHVlID0gMjsKLWJvb2wgVmFsdWU6Omhhc19udW1iZXJfdmFsdWUoKSBjb25z
dCB7Ci0gIHJldHVybiBraW5kX2Nhc2UoKSA9PSBrTnVtYmVyVmFsdWU7Ci19Ci12b2lkIFZhbHVl
OjpzZXRfaGFzX251bWJlcl92YWx1ZSgpIHsKLSAgX29uZW9mX2Nhc2VfWzBdID0ga051bWJlclZh
bHVlOwotfQotdm9pZCBWYWx1ZTo6Y2xlYXJfbnVtYmVyX3ZhbHVlKCkgewotICBpZiAoaGFzX251
bWJlcl92YWx1ZSgpKSB7Ci0gICAga2luZF8ubnVtYmVyX3ZhbHVlXyA9IDA7Ci0gICAgY2xlYXJf
aGFzX2tpbmQoKTsKLSAgfQotfQotIGRvdWJsZSBWYWx1ZTo6bnVtYmVyX3ZhbHVlKCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1
Zi5WYWx1ZS5udW1iZXJfdmFsdWUpCi0gIGlmIChoYXNfbnVtYmVyX3ZhbHVlKCkpIHsKLSAgICBy
ZXR1cm4ga2luZF8ubnVtYmVyX3ZhbHVlXzsKLSAgfQotICByZXR1cm4gMDsKLX0KLSB2b2lkIFZh
bHVlOjpzZXRfbnVtYmVyX3ZhbHVlKGRvdWJsZSB2YWx1ZSkgewotICBpZiAoIWhhc19udW1iZXJf
dmFsdWUoKSkgewotICAgIGNsZWFyX2tpbmQoKTsKLSAgICBzZXRfaGFzX251bWJlcl92YWx1ZSgp
OwotICB9Ci0gIGtpbmRfLm51bWJlcl92YWx1ZV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVmFsdWUubnVtYmVyX3ZhbHVl
KQotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgc3RyaW5nX3ZhbHVlID0gMzsKLWJvb2wgVmFsdWU6
Omhhc19zdHJpbmdfdmFsdWUoKSBjb25zdCB7Ci0gIHJldHVybiBraW5kX2Nhc2UoKSA9PSBrU3Ry
aW5nVmFsdWU7Ci19Ci12b2lkIFZhbHVlOjpzZXRfaGFzX3N0cmluZ192YWx1ZSgpIHsKLSAgX29u
ZW9mX2Nhc2VfWzBdID0ga1N0cmluZ1ZhbHVlOwotfQotdm9pZCBWYWx1ZTo6Y2xlYXJfc3RyaW5n
X3ZhbHVlKCkgewotICBpZiAoaGFzX3N0cmluZ192YWx1ZSgpKSB7Ci0gICAga2luZF8uc3RyaW5n
X3ZhbHVlXy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICAgIGNsZWFyX2hhc19raW5kKCk7Ci0gIH0K
LX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBWYWx1ZTo6c3RyaW5nX3ZhbHVlKCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5W
YWx1ZS5zdHJpbmdfdmFsdWUpCi0gIGlmIChoYXNfc3RyaW5nX3ZhbHVlKCkpIHsKLSAgICByZXR1
cm4ga2luZF8uc3RyaW5nX3ZhbHVlXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIH0KLSAgcmV0dXJuICom
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCk7Ci19Ci0gdm9pZCBWYWx1ZTo6c2V0X3N0cmluZ192YWx1ZShjb25zdCA6OnN0ZDo6c3RyaW5n
JiB2YWx1ZSkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5WYWx1ZS5zdHJpbmdfdmFsdWUpCi0gIGlmICghaGFzX3N0cmluZ192YWx1ZSgp
KSB7Ci0gICAgY2xlYXJfa2luZCgpOwotICAgIHNldF9oYXNfc3RyaW5nX3ZhbHVlKCk7Ci0gICAg
a2luZF8uc3RyaW5nX3ZhbHVlXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIH0KLSAga2luZF8u
c3RyaW5nX3ZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5zdHJpbmdfdmFsdWUp
Ci19Ci0gdm9pZCBWYWx1ZTo6c2V0X3N0cmluZ192YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkgewot
ICBpZiAoIWhhc19zdHJpbmdfdmFsdWUoKSkgewotICAgIGNsZWFyX2tpbmQoKTsKLSAgICBzZXRf
aGFzX3N0cmluZ192YWx1ZSgpOwotICAgIGtpbmRfLnN0cmluZ192YWx1ZV8uVW5zYWZlU2V0RGVm
YXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkpOwotICB9Ci0gIGtpbmRfLnN0cmluZ192YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0g
ICAgICA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuVmFsdWUuc3RyaW5nX3ZhbHVlKQotfQot
IHZvaWQgVmFsdWU6OnNldF9zdHJpbmdfdmFsdWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBz
aXplKSB7Ci0gIGlmICghaGFzX3N0cmluZ192YWx1ZSgpKSB7Ci0gICAgY2xlYXJfa2luZCgpOwot
ICAgIHNldF9oYXNfc3RyaW5nX3ZhbHVlKCk7Ci0gICAga2luZF8uc3RyaW5nX3ZhbHVlXy5VbnNh
ZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci0gIH0KLSAga2luZF8uc3RyaW5nX3ZhbHVlXy5TZXROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSwgOjpzdGQ6OnN0cmluZygKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLlZhbHVlLnN0cmluZ192YWx1ZSkKLX0KLSA6OnN0ZDo6
c3RyaW5nKiBWYWx1ZTo6bXV0YWJsZV9zdHJpbmdfdmFsdWUoKSB7Ci0gIGlmICghaGFzX3N0cmlu
Z192YWx1ZSgpKSB7Ci0gICAgY2xlYXJfa2luZCgpOwotICAgIHNldF9oYXNfc3RyaW5nX3ZhbHVl
KCk7Ci0gICAga2luZF8uc3RyaW5nX3ZhbHVlXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIH0K
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3Rv
YnVmLlZhbHVlLnN0cmluZ192YWx1ZSkKLSAgcmV0dXJuIGtpbmRfLnN0cmluZ192YWx1ZV8uTXV0
YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBWYWx1ZTo6cmVsZWFzZV9zdHJp
bmdfdmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNl
Omdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5zdHJpbmdfdmFsdWUpCi0gIGlmIChoYXNfc3RyaW5nX3Zh
bHVlKCkpIHsKLSAgICBjbGVhcl9oYXNfa2luZCgpOwotICAgIHJldHVybiBraW5kXy5zdHJpbmdf
dmFsdWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLX0KLSB2b2lkIFZhbHVlOjpzZXRfYWxsb2NhdGVkX3N0cmluZ192YWx1ZSg6OnN0ZDo6
c3RyaW5nKiBzdHJpbmdfdmFsdWUpIHsKLSAgaWYgKCFoYXNfc3RyaW5nX3ZhbHVlKCkpIHsKLSAg
ICBraW5kXy5zdHJpbmdfdmFsdWVfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgfQotICBjbGVh
cl9raW5kKCk7Ci0gIGlmIChzdHJpbmdfdmFsdWUgIT0gTlVMTCkgewotICAgIHNldF9oYXNfc3Ry
aW5nX3ZhbHVlKCk7Ci0gICAga2luZF8uc3RyaW5nX3ZhbHVlXy5TZXRBbGxvY2F0ZWROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSwKLSAgICAgICAgc3RyaW5nX3ZhbHVlKTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuVmFsdWUuc3RyaW5n
X3ZhbHVlKQotfQotCi0vLyBvcHRpb25hbCBib29sIGJvb2xfdmFsdWUgPSA0OwotYm9vbCBWYWx1
ZTo6aGFzX2Jvb2xfdmFsdWUoKSBjb25zdCB7Ci0gIHJldHVybiBraW5kX2Nhc2UoKSA9PSBrQm9v
bFZhbHVlOwotfQotdm9pZCBWYWx1ZTo6c2V0X2hhc19ib29sX3ZhbHVlKCkgewotICBfb25lb2Zf
Y2FzZV9bMF0gPSBrQm9vbFZhbHVlOwotfQotdm9pZCBWYWx1ZTo6Y2xlYXJfYm9vbF92YWx1ZSgp
IHsKLSAgaWYgKGhhc19ib29sX3ZhbHVlKCkpIHsKLSAgICBraW5kXy5ib29sX3ZhbHVlXyA9IGZh
bHNlOwotICAgIGNsZWFyX2hhc19raW5kKCk7Ci0gIH0KLX0KLSBib29sIFZhbHVlOjpib29sX3Zh
bHVlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5WYWx1ZS5ib29sX3ZhbHVlKQotICBpZiAoaGFzX2Jvb2xfdmFsdWUoKSkg
ewotICAgIHJldHVybiBraW5kXy5ib29sX3ZhbHVlXzsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19
Ci0gdm9pZCBWYWx1ZTo6c2V0X2Jvb2xfdmFsdWUoYm9vbCB2YWx1ZSkgewotICBpZiAoIWhhc19i
b29sX3ZhbHVlKCkpIHsKLSAgICBjbGVhcl9raW5kKCk7Ci0gICAgc2V0X2hhc19ib29sX3ZhbHVl
KCk7Ci0gIH0KLSAga2luZF8uYm9vbF92YWx1ZV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVmFsdWUuYm9vbF92YWx1ZSkK
LX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qgc3RydWN0X3ZhbHVlID0g
NTsKLWJvb2wgVmFsdWU6Omhhc19zdHJ1Y3RfdmFsdWUoKSBjb25zdCB7Ci0gIHJldHVybiBraW5k
X2Nhc2UoKSA9PSBrU3RydWN0VmFsdWU7Ci19Ci12b2lkIFZhbHVlOjpzZXRfaGFzX3N0cnVjdF92
YWx1ZSgpIHsKLSAgX29uZW9mX2Nhc2VfWzBdID0ga1N0cnVjdFZhbHVlOwotfQotdm9pZCBWYWx1
ZTo6Y2xlYXJfc3RydWN0X3ZhbHVlKCkgewotICBpZiAoaGFzX3N0cnVjdF92YWx1ZSgpKSB7Ci0g
ICAgZGVsZXRlIGtpbmRfLnN0cnVjdF92YWx1ZV87Ci0gICAgY2xlYXJfaGFzX2tpbmQoKTsKLSAg
fQotfQotIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U3RydWN0JiBWYWx1ZTo6c3RydWN0X3Zh
bHVlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5WYWx1ZS5zdHJ1Y3RfdmFsdWUpCi0gIHJldHVybiBoYXNfc3RydWN0X3Zh
bHVlKCkKLSAgICAgID8gKmtpbmRfLnN0cnVjdF92YWx1ZV8KLSAgICAgIDogOjpnb29nbGU6OnBy
b3RvYnVmOjpTdHJ1Y3Q6OmRlZmF1bHRfaW5zdGFuY2UoKTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1
Zjo6U3RydWN0KiBWYWx1ZTo6bXV0YWJsZV9zdHJ1Y3RfdmFsdWUoKSB7Ci0gIGlmICghaGFzX3N0
cnVjdF92YWx1ZSgpKSB7Ci0gICAgY2xlYXJfa2luZCgpOwotICAgIHNldF9oYXNfc3RydWN0X3Zh
bHVlKCk7Ci0gICAga2luZF8uc3RydWN0X3ZhbHVlXyA9IG5ldyA6Omdvb2dsZTo6cHJvdG9idWY6
OlN0cnVjdDsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJs
ZTpnb29nbGUucHJvdG9idWYuVmFsdWUuc3RydWN0X3ZhbHVlKQotICByZXR1cm4ga2luZF8uc3Ry
dWN0X3ZhbHVlXzsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6U3RydWN0KiBWYWx1ZTo6cmVsZWFz
ZV9zdHJ1Y3RfdmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9y
ZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5zdHJ1Y3RfdmFsdWUpCi0gIGlmIChoYXNfc3Ry
dWN0X3ZhbHVlKCkpIHsKLSAgICBjbGVhcl9oYXNfa2luZCgpOwotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6U3RydWN0KiB0ZW1wID0ga2luZF8uc3RydWN0X3ZhbHVlXzsKLSAgICBraW5kXy5zdHJ1
Y3RfdmFsdWVfID0gTlVMTDsKLSAgICByZXR1cm4gdGVtcDsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotfQotdm9pZCBWYWx1ZTo6c2V0X2FsbG9jYXRlZF9zdHJ1Y3RfdmFsdWUo
Ojpnb29nbGU6OnByb3RvYnVmOjpTdHJ1Y3QqIHN0cnVjdF92YWx1ZSkgewotICBjbGVhcl9raW5k
KCk7Ci0gIGlmIChzdHJ1Y3RfdmFsdWUpIHsKLSAgICBzZXRfaGFzX3N0cnVjdF92YWx1ZSgpOwot
ICAgIGtpbmRfLnN0cnVjdF92YWx1ZV8gPSBzdHJ1Y3RfdmFsdWU7Ci0gIH0KLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlZh
bHVlLnN0cnVjdF92YWx1ZSkKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5MaXN0
VmFsdWUgbGlzdF92YWx1ZSA9IDY7Ci1ib29sIFZhbHVlOjpoYXNfbGlzdF92YWx1ZSgpIGNvbnN0
IHsKLSAgcmV0dXJuIGtpbmRfY2FzZSgpID09IGtMaXN0VmFsdWU7Ci19Ci12b2lkIFZhbHVlOjpz
ZXRfaGFzX2xpc3RfdmFsdWUoKSB7Ci0gIF9vbmVvZl9jYXNlX1swXSA9IGtMaXN0VmFsdWU7Ci19
Ci12b2lkIFZhbHVlOjpjbGVhcl9saXN0X3ZhbHVlKCkgewotICBpZiAoaGFzX2xpc3RfdmFsdWUo
KSkgewotICAgIGRlbGV0ZSBraW5kXy5saXN0X3ZhbHVlXzsKLSAgICBjbGVhcl9oYXNfa2luZCgp
OwotICB9Ci19Ci0gY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpMaXN0VmFsdWUmIFZhbHVlOjps
aXN0X3ZhbHVlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
Z2V0Omdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5saXN0X3ZhbHVlKQotICByZXR1cm4gaGFzX2xpc3Rf
dmFsdWUoKQotICAgICAgPyAqa2luZF8ubGlzdF92YWx1ZV8KLSAgICAgIDogOjpnb29nbGU6OnBy
b3RvYnVmOjpMaXN0VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2UoKTsKLX0KLTo6Z29vZ2xlOjpwcm90
b2J1Zjo6TGlzdFZhbHVlKiBWYWx1ZTo6bXV0YWJsZV9saXN0X3ZhbHVlKCkgewotICBpZiAoIWhh
c19saXN0X3ZhbHVlKCkpIHsKLSAgICBjbGVhcl9raW5kKCk7Ci0gICAgc2V0X2hhc19saXN0X3Zh
bHVlKCk7Ci0gICAga2luZF8ubGlzdF92YWx1ZV8gPSBuZXcgOjpnb29nbGU6OnByb3RvYnVmOjpM
aXN0VmFsdWU7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFi
bGU6Z29vZ2xlLnByb3RvYnVmLlZhbHVlLmxpc3RfdmFsdWUpCi0gIHJldHVybiBraW5kXy5saXN0
X3ZhbHVlXzsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TGlzdFZhbHVlKiBWYWx1ZTo6cmVsZWFz
ZV9saXN0X3ZhbHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVs
ZWFzZTpnb29nbGUucHJvdG9idWYuVmFsdWUubGlzdF92YWx1ZSkKLSAgaWYgKGhhc19saXN0X3Zh
bHVlKCkpIHsKLSAgICBjbGVhcl9oYXNfa2luZCgpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TGlzdFZhbHVlKiB0ZW1wID0ga2luZF8ubGlzdF92YWx1ZV87Ci0gICAga2luZF8ubGlzdF92YWx1
ZV8gPSBOVUxMOwotICAgIHJldHVybiB0ZW1wOwotICB9IGVsc2UgewotICAgIHJldHVybiBOVUxM
OwotICB9Ci19Ci12b2lkIFZhbHVlOjpzZXRfYWxsb2NhdGVkX2xpc3RfdmFsdWUoOjpnb29nbGU6
OnByb3RvYnVmOjpMaXN0VmFsdWUqIGxpc3RfdmFsdWUpIHsKLSAgY2xlYXJfa2luZCgpOwotICBp
ZiAobGlzdF92YWx1ZSkgewotICAgIHNldF9oYXNfbGlzdF92YWx1ZSgpOwotICAgIGtpbmRfLmxp
c3RfdmFsdWVfID0gbGlzdF92YWx1ZTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuVmFsdWUubGlzdF92YWx1ZSkK
LX0KLQotYm9vbCBWYWx1ZTo6aGFzX2tpbmQoKSBjb25zdCB7Ci0gIHJldHVybiBraW5kX2Nhc2Uo
KSAhPSBLSU5EX05PVF9TRVQ7Ci19Ci12b2lkIFZhbHVlOjpjbGVhcl9oYXNfa2luZCgpIHsKLSAg
X29uZW9mX2Nhc2VfWzBdID0gS0lORF9OT1RfU0VUOwotfQotVmFsdWU6OktpbmRDYXNlIFZhbHVl
OjpraW5kX2Nhc2UoKSBjb25zdCB7Ci0gIHJldHVybiBWYWx1ZTo6S2luZENhc2UoX29uZW9mX2Nh
c2VfWzBdKTsKLX0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0K
LS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAx
OTAwCi1jb25zdCBpbnQgTGlzdFZhbHVlOjprVmFsdWVzRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8v
ICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUxpc3RWYWx1ZTo6TGlz
dFZhbHVlKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21l
dGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUpCi19Ci0KLXZvaWQg
TGlzdFZhbHVlOjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3Rh
bmNlXyA9IHRydWU7Ci19Ci0KLUxpc3RWYWx1ZTo6TGlzdFZhbHVlKGNvbnN0IExpc3RWYWx1ZSYg
ZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxf
bWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90
b2J1Zi5MaXN0VmFsdWUpCi19Ci0KLXZvaWQgTGlzdFZhbHVlOjpTaGFyZWRDdG9yKCkgewotICAg
IF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IGZhbHNlOwotICBfY2FjaGVkX3NpemVfID0gMDsKLX0K
LQotTGlzdFZhbHVlOjp+TGlzdFZhbHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuTGlzdFZhbHVlKQotICBTaGFyZWREdG9yKCk7
Ci19Ci0KLXZvaWQgTGlzdFZhbHVlOjpTaGFyZWREdG9yKCkgewotICBpZiAodGhpcyAhPSBkZWZh
dWx0X2luc3RhbmNlXykgewotICB9Ci19Ci0KLXZvaWQgTGlzdFZhbHVlOjpTZXRDYWNoZWRTaXpl
KGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lO
KCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dS
SVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogTGlz
dFZhbHVlOjpkZXNjcmlwdG9yKCkgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2Uo
KTsKLSAgcmV0dXJuIExpc3RWYWx1ZV9kZXNjcmlwdG9yXzsKLX0KLQotY29uc3QgTGlzdFZhbHVl
JiBMaXN0VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlmIChkZWZhdWx0X2luc3RhbmNl
XyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmc3RydWN0XzJl
cHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotTGlzdFZhbHVlKiBM
aXN0VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotTGlzdFZhbHVlKiBMaXN0VmFs
dWU6Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3QgewotICBMaXN0
VmFsdWUqIG4gPSBuZXcgTGlzdFZhbHVlOwotICBpZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFy
ZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0KLXZvaWQgTGlzdFZhbHVlOjpDbGVh
cigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2NsZWFyX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUpCi0gIHZhbHVlc18uQ2xlYXIoKTsKLX0KLQotYm9vbCBM
aXN0VmFsdWU6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQUkVT
U0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1cmUK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSkKLSAgZm9yICg7
OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4g
cCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0g
ICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJl
cih0YWcpKSB7Ci0gICAgICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLlZhbHVlIHZhbHVl
cyA9IDE7Ci0gICAgICBjYXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxMCkgewotICAgICAg
ICAgIERPXyhpbnB1dC0+SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7Ci0gICAgICAgICBwYXJz
ZV9sb29wX3ZhbHVlczoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0aCgK
LSAgICAgICAgICAgICAgICBpbnB1dCwgYWRkX3ZhbHVlcygpKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aW5wdXQtPkV4cGVjdFRhZygxMCkpIGdvdG8gcGFyc2VfbG9vcF92YWx1ZXM7Ci0gICAgICAgIGlu
cHV0LT5VbnNhZmVEZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBpZiAoaW5wdXQt
PkV4cGVjdEF0RW5kKCkpIGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0K
LSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAgICBpZiAodGFn
ID09IDAgfHwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7
Ci0gICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U2tpcEZpZWxkKGlucHV0LCB0
YWcpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYu
TGlzdFZhbHVlKQotICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChwYXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUpCi0gIHJl
dHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9pZCBMaXN0VmFsdWU6OlNlcmlhbGl6ZVdp
dGhDYWNoZWRTaXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0
cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJp
YWxpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSkKLSAgLy8gcmVwZWF0ZWQgLmdv
b2dsZS5wcm90b2J1Zi5WYWx1ZSB2YWx1ZXMgPSAxOwotICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MCwgbiA9IHRoaXMtPnZhbHVlc19zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVUb0Fy
cmF5KAotICAgICAgMSwgdGhpcy0+dmFsdWVzKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkxpc3RW
YWx1ZSkKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogTGlzdFZhbHVlOjpTZXJpYWxp
emVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgq
IHRhcmdldCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXpl
X3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUpCi0gIC8vIHJlcGVhdGVk
IC5nb29nbGUucHJvdG9idWYuVmFsdWUgdmFsdWVzID0gMTsKLSAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDAsIG4gPSB0aGlzLT52YWx1ZXNfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgdGFyZ2V0
ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAg
V3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgMSwgdGhpcy0+dmFsdWVzKGkp
LCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6
ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSkKLSAgcmV0dXJuIHRhcmdl
dDsKLX0KLQotaW50IExpc3RWYWx1ZTo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkxp
c3RWYWx1ZSkKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUu
cHJvdG9idWYuVmFsdWUgdmFsdWVzID0gMTsKLSAgdG90YWxfc2l6ZSArPSAxICogdGhpcy0+dmFs
dWVzX3NpemUoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT52YWx1ZXNfc2l6ZSgpOyBp
KyspIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAgIHRoaXMt
PnZhbHVlcyhpKSk7Ci0gIH0KLQotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJ
TigpOwotICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VS
UkVOVF9XUklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3RhbF9zaXplOwotfQotCi12b2lkIExpc3RW
YWx1ZTo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkg
ewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNF
KCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgTGlzdFZh
bHVlKiBzb3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFt
aWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgTGlzdFZhbHVlPigKLSAgICAgICAgICAmZnJvbSk7Ci0g
IGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2Vu
ZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZSkK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShm
cm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdl
bmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFs
dWUpCi0gICAgTWVyZ2VGcm9tKCpzb3VyY2UpOwotICB9Ci19Ci0KLXZvaWQgTGlzdFZhbHVlOjpN
ZXJnZUZyb20oY29uc3QgTGlzdFZhbHVlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuTGlz
dFZhbHVlKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdl
RnJvbUZhaWwoX19MSU5FX18pOwotICB2YWx1ZXNfLk1lcmdlRnJvbShmcm9tLnZhbHVlc18pOwot
fQotCi12b2lkIExpc3RWYWx1ZTo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRf
Y29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUpCi0gIGlmICgmZnJvbSA9
PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9p
ZCBMaXN0VmFsdWU6OkNvcHlGcm9tKGNvbnN0IExpc3RWYWx1ZSYgZnJvbSkgewotLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFydDpnb29nbGUu
cHJvdG9idWYuTGlzdFZhbHVlKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVh
cigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLWJvb2wgTGlzdFZhbHVlOjpJc0luaXRpYWxp
emVkKCkgY29uc3QgewotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIExpc3RWYWx1ZTo6U3dh
cChMaXN0VmFsdWUqIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIElu
dGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lkIExpc3RWYWx1ZTo6SW50ZXJuYWxTd2FwKExpc3RW
YWx1ZSogb3RoZXIpIHsKLSAgdmFsdWVzXy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT52YWx1ZXNf
KTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRh
Xyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19
Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgTGlzdFZhbHVlOjpHZXRNZXRhZGF0YSgp
IGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBM
aXN0VmFsdWVfZGVzY3JpcHRvcl87Ci0gIG1ldGFkYXRhLnJlZmxlY3Rpb24gPSBMaXN0VmFsdWVf
cmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElO
RV9OT1RfSU5fSEVBREVSUwotLy8gTGlzdFZhbHVlCi0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJv
dG9idWYuVmFsdWUgdmFsdWVzID0gMTsKLWludCBMaXN0VmFsdWU6OnZhbHVlc19zaXplKCkgY29u
c3QgewotICByZXR1cm4gdmFsdWVzXy5zaXplKCk7Ci19Ci12b2lkIExpc3RWYWx1ZTo6Y2xlYXJf
dmFsdWVzKCkgewotICB2YWx1ZXNfLkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OlZhbHVlJiBMaXN0VmFsdWU6OnZhbHVlcyhpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuTGlzdFZhbHVl
LnZhbHVlcykKLSAgcmV0dXJuIHZhbHVlc18uR2V0KGluZGV4KTsKLX0KLTo6Z29vZ2xlOjpwcm90
b2J1Zjo6VmFsdWUqIExpc3RWYWx1ZTo6bXV0YWJsZV92YWx1ZXMoaW50IGluZGV4KSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5M
aXN0VmFsdWUudmFsdWVzKQotICByZXR1cm4gdmFsdWVzXy5NdXRhYmxlKGluZGV4KTsKLX0KLTo6
Z29vZ2xlOjpwcm90b2J1Zjo6VmFsdWUqIExpc3RWYWx1ZTo6YWRkX3ZhbHVlcygpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuTGlzdFZh
bHVlLnZhbHVlcykKLSAgcmV0dXJuIHZhbHVlc18uQWRkKCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9i
dWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VmFsdWUgPioKLUxpc3RW
YWx1ZTo6bXV0YWJsZV92YWx1ZXMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZS52YWx1ZXMpCi0gIHJl
dHVybiAmdmFsdWVzXzsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJG
aWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpWYWx1ZSA+JgotTGlzdFZhbHVlOjp2YWx1ZXMoKSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5w
cm90b2J1Zi5MaXN0VmFsdWUudmFsdWVzKQotICByZXR1cm4gdmFsdWVzXzsKLX0KLQotI2VuZGlm
ICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19
ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9i
YWxfc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3RydWN0LnBiLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvc3RydWN0LnBiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDZhNDc2NGE3ZjM0MmM4OGYxYWYyMTI3MDQ4Njk5NGY3MThlNzdmNmEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
cnVjdC5wYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzY5ICswLDAgQEAKLS8vIEdlbmVyYXRlZCBi
eSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBzb3VyY2U6
IGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8KLQotI2lmbmRlZiBQUk9UT0JVRl9nb29nbGVf
MmZwcm90b2J1Zl8yZnN0cnVjdF8yZXByb3RvX19JTkNMVURFRAotI2RlZmluZSBQUk9UT0JVRl9n
b29nbGVfMmZwcm90b2J1Zl8yZnN0cnVjdF8yZXByb3RvX19JTkNMVURFRAotCi0jaW5jbHVkZSA8
c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotCi0j
aWYgR09PR0xFX1BST1RPQlVGX1ZFUlNJT04gPCAzMDAwMDAwCi0jZXJyb3IgVGhpcyBmaWxlIHdh
cyBnZW5lcmF0ZWQgYnkgYSBuZXdlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcwotI2Vycm9y
IGluY29tcGF0aWJsZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQbGVhc2Ug
dXBkYXRlCi0jZXJyb3IgeW91ciBoZWFkZXJzLgotI2VuZGlmCi0jaWYgMzAwMDAwMCA8IEdPT0dM
RV9QUk9UT0JVRl9NSU5fUFJPVE9DX1ZFUlNJT04KLSNlcnJvciBUaGlzIGZpbGUgd2FzIGdlbmVy
YXRlZCBieSBhbiBvbGRlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcwotI2Vycm9yIGluY29t
cGF0aWJsZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQbGVhc2UKLSNlcnJv
ciByZWdlbmVyYXRlIHRoaXMgZmlsZSB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBwcm90b2MuCi0j
ZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9n
ZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21ldGFk
YXRhLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvZXh0ZW5zaW9uX3NldC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXAuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWFwX2ZpZWxkX2lubC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9nZW5lcmF0ZWRfZW51bV9yZWZsZWN0aW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0Lmg+Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoaW5jbHVkZXMpCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LQotLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIC0tIGRvIG5vdCBjYWxsIHRoZXNl
Lgotdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90
b2J1Zl8yZnN0cnVjdF8yZXByb3RvKCk7Ci12b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZzdHJ1Y3RfMmVwcm90bygpOwotdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZp
bGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZzdHJ1Y3RfMmVwcm90bygpOwotCi1jbGFzcyBMaXN0VmFs
dWU7Ci1jbGFzcyBTdHJ1Y3Q7Ci1jbGFzcyBWYWx1ZTsKLQotZW51bSBOdWxsVmFsdWUgewotICBO
VUxMX1ZBTFVFID0gMCwKLSAgTnVsbFZhbHVlX0lOVF9NSU5fU0VOVElORUxfRE9fTk9UX1VTRV8g
PSA6Omdvb2dsZTo6cHJvdG9idWY6OmtpbnQzMm1pbiwKLSAgTnVsbFZhbHVlX0lOVF9NQVhfU0VO
VElORUxfRE9fTk9UX1VTRV8gPSA6Omdvb2dsZTo6cHJvdG9idWY6OmtpbnQzMm1heAotfTsKLUxJ
QlBST1RPQlVGX0VYUE9SVCBib29sIE51bGxWYWx1ZV9Jc1ZhbGlkKGludCB2YWx1ZSk7Ci1jb25z
dCBOdWxsVmFsdWUgTnVsbFZhbHVlX01JTiA9IE5VTExfVkFMVUU7Ci1jb25zdCBOdWxsVmFsdWUg
TnVsbFZhbHVlX01BWCA9IE5VTExfVkFMVUU7Ci1jb25zdCBpbnQgTnVsbFZhbHVlX0FSUkFZU0la
RSA9IE51bGxWYWx1ZV9NQVggKyAxOwotCi1MSUJQUk9UT0JVRl9FWFBPUlQgY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvciogTnVsbFZhbHVlX2Rlc2NyaXB0b3IoKTsKLWlu
bGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBOdWxsVmFsdWVfTmFtZShOdWxsVmFsdWUgdmFsdWUp
IHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok5hbWVPZkVudW0oCi0g
ICAgTnVsbFZhbHVlX2Rlc2NyaXB0b3IoKSwgdmFsdWUpOwotfQotaW5saW5lIGJvb2wgTnVsbFZh
bHVlX1BhcnNlKAotICAgIGNvbnN0IDo6c3RkOjpzdHJpbmcmIG5hbWUsIE51bGxWYWx1ZSogdmFs
dWUpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlBhcnNlTmFtZWRF
bnVtPE51bGxWYWx1ZT4oCi0gICAgTnVsbFZhbHVlX2Rlc2NyaXB0b3IoKSwgbmFtZSwgdmFsdWUp
OwotfQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgU3RydWN0IDog
cHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgotICBTdHJ1Y3Qo
KTsKLSAgdmlydHVhbCB+U3RydWN0KCk7Ci0KLSAgU3RydWN0KGNvbnN0IFN0cnVjdCYgZnJvbSk7
Ci0KLSAgaW5saW5lIFN0cnVjdCYgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdCYgZnJvbSkgewotICAg
IENvcHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIHN0YXRpYyBjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3RhdGlj
IGNvbnN0IFN0cnVjdCYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgU3dhcChTdHJ1Y3Qq
IG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBTdHJ1Y3QqIE5ldygpIGNvbnN0
IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIFN0cnVjdCogTmV3KDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IFN0cnVj
dCYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IFN0cnVjdCYgZnJvbSk7Ci0gIHZvaWQg
Q2xlYXIoKTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXpl
KCkgY29uc3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNl
cmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNv
ZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVp
bnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6
dWludDgqIG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1
cm4gX2NhY2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAg
dm9pZCBTaGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7
Ci0gIHZvaWQgSW50ZXJuYWxTd2FwKFN0cnVjdCogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxp
bmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUg
dm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFk
YXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0K
LSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICAvLyBtYXA8c3RyaW5nLCAuZ29vZ2xlLnByb3RvYnVmLlZhbHVl
PiBmaWVsZHMgPSAxOwotICBpbnQgZmllbGRzX3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9m
aWVsZHMoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrRmllbGRzRmllbGROdW1iZXIgPSAxOwotICBj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1hcDwgOjpzdGQ6OnN0cmluZywgOjpnb29nbGU6OnBy
b3RvYnVmOjpWYWx1ZSA+JgotICAgICAgZmllbGRzKCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWFwPCA6OnN0ZDo6c3RyaW5nLCA6Omdvb2dsZTo6cHJvdG9idWY6OlZhbHVlID4qCi0g
ICAgICBtdXRhYmxlX2ZpZWxkcygpOwotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChj
bGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuU3RydWN0KQotIHByaXZhdGU6Ci0KLSAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJu
YWxfbWV0YWRhdGFfOwotICBib29sIF9pc19kZWZhdWx0X2luc3RhbmNlXzsKLSAgdHlwZWRlZiA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpNYXBFbnRyeUxpdGU8Ci0gICAgICA6OnN0ZDo6
c3RyaW5nLCA6Omdvb2dsZTo6cHJvdG9idWY6OlZhbHVlLAotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfU1RSSU5HLAotICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVTU0FHRSwKLSAg
ICAgIDAgPgotICAgICAgU3RydWN0X0ZpZWxkc0VudHJ5OwotICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpNYXBGaWVsZDwKLSAgICAgIDo6c3RkOjpzdHJpbmcsIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6VmFsdWUsCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6VFlQRV9TVFJJTkcsCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9NRVNTQUdFLAotICAgICAgMCA+IGZpZWxkc187Ci0gIG11
dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIGZyaWVuZCB2b2lkIExJQlBST1RPQlVGX0VYUE9S
VCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmc3RydWN0XzJlcHJvdG8oKTsK
LSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnN0
cnVjdF8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29n
bGVfMmZwcm90b2J1Zl8yZnN0cnVjdF8yZXByb3RvKCk7Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0
SW5zdGFuY2UoKTsKLSAgc3RhdGljIFN0cnVjdCogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgVmFsdWUgOiBwdWJsaWMgOjpn
b29nbGU6OnByb3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIFZhbHVlKCk7Ci0gIHZpcnR1
YWwgflZhbHVlKCk7Ci0KLSAgVmFsdWUoY29uc3QgVmFsdWUmIGZyb20pOwotCi0gIGlubGluZSBW
YWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFZhbHVlJiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJvbSk7
Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgVmFsdWUmIGRl
ZmF1bHRfaW5zdGFuY2UoKTsKLQotICBlbnVtIEtpbmRDYXNlIHsKLSAgICBrTnVsbFZhbHVlID0g
MSwKLSAgICBrTnVtYmVyVmFsdWUgPSAyLAotICAgIGtTdHJpbmdWYWx1ZSA9IDMsCi0gICAga0Jv
b2xWYWx1ZSA9IDQsCi0gICAga1N0cnVjdFZhbHVlID0gNSwKLSAgICBrTGlzdFZhbHVlID0gNiwK
LSAgICBLSU5EX05PVF9TRVQgPSAwLAotICB9OwotCi0gIHZvaWQgU3dhcChWYWx1ZSogb3RoZXIp
OwotCi0gIC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgaW5saW5lIFZhbHVlKiBOZXcoKSBjb25zdCB7IHJldHVy
biBOZXcoTlVMTCk7IH0KLQotICBWYWx1ZSogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEq
IGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IFZhbHVlJiBmcm9tKTsK
LSAgdm9pZCBNZXJnZUZyb20oY29uc3QgVmFsdWUmIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0g
IGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0Owot
ICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0
cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFs
aXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRw
dXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRf
c2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVk
RHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIElu
dGVybmFsU3dhcChWYWx1ZSogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6
OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJu
IF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVB
cmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJl
bmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRh
dGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29y
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUgbnVsbF92YWx1ZSA9
IDE7Ci0gIHByaXZhdGU6Ci0gIGJvb2wgaGFzX251bGxfdmFsdWUoKSBjb25zdDsKLSAgcHVibGlj
OgotICB2b2lkIGNsZWFyX251bGxfdmFsdWUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrTnVsbFZh
bHVlRmllbGROdW1iZXIgPSAxOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok51bGxWYWx1ZSBudWxs
X3ZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X251bGxfdmFsdWUoOjpnb29nbGU6OnByb3RvYnVm
OjpOdWxsVmFsdWUgdmFsdWUpOwotCi0gIC8vIG9wdGlvbmFsIGRvdWJsZSBudW1iZXJfdmFsdWUg
PSAyOwotICBwcml2YXRlOgotICBib29sIGhhc19udW1iZXJfdmFsdWUoKSBjb25zdDsKLSAgcHVi
bGljOgotICB2b2lkIGNsZWFyX251bWJlcl92YWx1ZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtO
dW1iZXJWYWx1ZUZpZWxkTnVtYmVyID0gMjsKLSAgZG91YmxlIG51bWJlcl92YWx1ZSgpIGNvbnN0
OwotICB2b2lkIHNldF9udW1iZXJfdmFsdWUoZG91YmxlIHZhbHVlKTsKLQotICAvLyBvcHRpb25h
bCBzdHJpbmcgc3RyaW5nX3ZhbHVlID0gMzsKLSAgcHJpdmF0ZToKLSAgYm9vbCBoYXNfc3RyaW5n
X3ZhbHVlKCkgY29uc3Q7Ci0gIHB1YmxpYzoKLSAgdm9pZCBjbGVhcl9zdHJpbmdfdmFsdWUoKTsK
LSAgc3RhdGljIGNvbnN0IGludCBrU3RyaW5nVmFsdWVGaWVsZE51bWJlciA9IDM7Ci0gIGNvbnN0
IDo6c3RkOjpzdHJpbmcmIHN0cmluZ192YWx1ZSgpIGNvbnN0OwotICB2b2lkIHNldF9zdHJpbmdf
dmFsdWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIHNldF9zdHJpbmdfdmFs
dWUoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNldF9zdHJpbmdfdmFsdWUoY29uc3QgY2hh
ciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0YWJsZV9zdHJpbmdf
dmFsdWUoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV9zdHJpbmdfdmFsdWUoKTsKLSAgdm9p
ZCBzZXRfYWxsb2NhdGVkX3N0cmluZ192YWx1ZSg6OnN0ZDo6c3RyaW5nKiBzdHJpbmdfdmFsdWUp
OwotCi0gIC8vIG9wdGlvbmFsIGJvb2wgYm9vbF92YWx1ZSA9IDQ7Ci0gIHByaXZhdGU6Ci0gIGJv
b2wgaGFzX2Jvb2xfdmFsdWUoKSBjb25zdDsKLSAgcHVibGljOgotICB2b2lkIGNsZWFyX2Jvb2xf
dmFsdWUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrQm9vbFZhbHVlRmllbGROdW1iZXIgPSA0Owot
ICBib29sIGJvb2xfdmFsdWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfYm9vbF92YWx1ZShib29sIHZh
bHVlKTsKLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCBzdHJ1Y3RfdmFs
dWUgPSA1OwotICBib29sIGhhc19zdHJ1Y3RfdmFsdWUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9z
dHJ1Y3RfdmFsdWUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrU3RydWN0VmFsdWVGaWVsZE51bWJl
ciA9IDU7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U3RydWN0JiBzdHJ1Y3RfdmFsdWUo
KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpTdHJ1Y3QqIG11dGFibGVfc3RydWN0X3Zh
bHVlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U3RydWN0KiByZWxlYXNlX3N0cnVjdF92YWx1
ZSgpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfc3RydWN0X3ZhbHVlKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6U3RydWN0KiBzdHJ1Y3RfdmFsdWUpOwotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9i
dWYuTGlzdFZhbHVlIGxpc3RfdmFsdWUgPSA2OwotICBib29sIGhhc19saXN0X3ZhbHVlKCkgY29u
c3Q7Ci0gIHZvaWQgY2xlYXJfbGlzdF92YWx1ZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtMaXN0
VmFsdWVGaWVsZE51bWJlciA9IDY7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TGlzdFZh
bHVlJiBsaXN0X3ZhbHVlKCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TGlzdFZhbHVl
KiBtdXRhYmxlX2xpc3RfdmFsdWUoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpMaXN0VmFsdWUq
IHJlbGVhc2VfbGlzdF92YWx1ZSgpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfbGlzdF92YWx1ZSg6
Omdvb2dsZTo6cHJvdG9idWY6Okxpc3RWYWx1ZSogbGlzdF92YWx1ZSk7Ci0KLSAgS2luZENhc2Ug
a2luZF9jYXNlKCkgY29uc3Q7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19z
Y29wZTpnb29nbGUucHJvdG9idWYuVmFsdWUpCi0gcHJpdmF0ZToKLSAgaW5saW5lIHZvaWQgc2V0
X2hhc19udWxsX3ZhbHVlKCk7Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfbnVtYmVyX3ZhbHVlKCk7
Ci0gIGlubGluZSB2b2lkIHNldF9oYXNfc3RyaW5nX3ZhbHVlKCk7Ci0gIGlubGluZSB2b2lkIHNl
dF9oYXNfYm9vbF92YWx1ZSgpOwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX3N0cnVjdF92YWx1ZSgp
OwotICBpbmxpbmUgdm9pZCBzZXRfaGFzX2xpc3RfdmFsdWUoKTsKLQotICBpbmxpbmUgYm9vbCBo
YXNfa2luZCgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2tpbmQoKTsKLSAgaW5saW5lIHZvaWQgY2xl
YXJfaGFzX2tpbmQoKTsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJbnRlcm5h
bE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0gIGJvb2wgX2lzX2RlZmF1
bHRfaW5zdGFuY2VfOwotICB1bmlvbiBLaW5kVW5pb24gewotICAgIEtpbmRVbmlvbigpIHt9Ci0g
ICAgaW50IG51bGxfdmFsdWVfOwotICAgIGRvdWJsZSBudW1iZXJfdmFsdWVfOwotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIHN0cmluZ192YWx1ZV87Ci0g
ICAgYm9vbCBib29sX3ZhbHVlXzsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OlN0cnVjdCogc3Ry
dWN0X3ZhbHVlXzsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6Okxpc3RWYWx1ZSogbGlzdF92YWx1
ZV87Ci0gIH0ga2luZF87Ci0gIG11dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDMyIF9vbmVvZl9jYXNlX1sxXTsKLQotICBmcmllbmQgdm9pZCBMSUJQ
Uk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnN0cnVj
dF8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJm
cHJvdG9idWZfMmZzdHJ1Y3RfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0
ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZzdHJ1Y3RfMmVwcm90bygpOwotCi0gIHZvaWQg
SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBWYWx1ZSogZGVmYXVsdF9pbnN0YW5j
ZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgTGlzdFZh
bHVlIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgotICBM
aXN0VmFsdWUoKTsKLSAgdmlydHVhbCB+TGlzdFZhbHVlKCk7Ci0KLSAgTGlzdFZhbHVlKGNvbnN0
IExpc3RWYWx1ZSYgZnJvbSk7Ci0KLSAgaW5saW5lIExpc3RWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0
IExpc3RWYWx1ZSYgZnJvbSkgewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhp
czsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IExpc3RWYWx1ZSYgZGVmYXVsdF9pbnN0YW5j
ZSgpOwotCi0gIHZvaWQgU3dhcChMaXN0VmFsdWUqIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRz
IE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIGlubGluZSBMaXN0VmFsdWUqIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQot
Ci0gIExpc3RWYWx1ZSogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25z
dDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZy
b20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2Um
IGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IExpc3RWYWx1ZSYgZnJvbSk7Ci0gIHZvaWQg
TWVyZ2VGcm9tKGNvbnN0IExpc3RWYWx1ZSYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9v
bCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJv
b2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVm
Ojppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNo
ZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFt
KiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVX
aXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkg
Y29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXpl
XzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9y
KCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJu
YWxTd2FwKExpc3RWYWx1ZSogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6
OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJu
IF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVB
cmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJl
bmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRh
dGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29y
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSB2YWx1ZXMgPSAxOwotICBp
bnQgdmFsdWVzX3NpemUoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl92YWx1ZXMoKTsKLSAgc3RhdGlj
IGNvbnN0IGludCBrVmFsdWVzRmllbGROdW1iZXIgPSAxOwotICBjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OlZhbHVlJiB2YWx1ZXMoaW50IGluZGV4KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpWYWx1ZSogbXV0YWJsZV92YWx1ZXMoaW50IGluZGV4KTsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpWYWx1ZSogYWRkX3ZhbHVlcygpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VmFsdWUgPioKLSAgICAgIG11dGFibGVfdmFs
dWVzKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpn
b29nbGU6OnByb3RvYnVmOjpWYWx1ZSA+JgotICAgICAgdmFsdWVzKCkgY29uc3Q7Ci0KLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5MaXN0
VmFsdWUpCi0gcHJpdmF0ZToKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJbnRl
cm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0gIGJvb2wgX2lzX2Rl
ZmF1bHRfaW5zdGFuY2VfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VmFsdWUgPiB2YWx1ZXNfOwotICBtdXRhYmxlIGludCBfY2Fj
aGVkX3NpemVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRk
RGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnN0cnVjdF8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lk
IHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZzdHJ1Y3RfMmVwcm90bygp
OwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZf
MmZzdHJ1Y3RfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0g
IHN0YXRpYyBMaXN0VmFsdWUqIGRlZmF1bHRfaW5zdGFuY2VfOwotfTsKLS8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJT
Ci0vLyBTdHJ1Y3QKLQotLy8gbWFwPHN0cmluZywgLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZT4gZmll
bGRzID0gMTsKLWlubGluZSBpbnQgU3RydWN0OjpmaWVsZHNfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0
dXJuIGZpZWxkc18uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgU3RydWN0OjpjbGVhcl9maWVsZHMo
KSB7Ci0gIGZpZWxkc18uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1hcDwgOjpzdGQ6OnN0cmluZywgOjpnb29nbGU6OnByb3RvYnVmOjpWYWx1ZSA+JgotU3Ry
dWN0OjpmaWVsZHMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9tYXA6Z29vZ2xlLnByb3RvYnVmLlN0cnVjdC5maWVsZHMpCi0gIHJldHVybiBmaWVsZHNfLkdl
dE1hcCgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWFwPCA6OnN0ZDo6c3RyaW5n
LCA6Omdvb2dsZTo6cHJvdG9idWY6OlZhbHVlID4qCi1TdHJ1Y3Q6Om11dGFibGVfZmllbGRzKCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9tYXA6Z29vZ2xl
LnByb3RvYnVmLlN0cnVjdC5maWVsZHMpCi0gIHJldHVybiBmaWVsZHNfLk11dGFibGVNYXAoKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBWYWx1ZQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnBy
b3RvYnVmLk51bGxWYWx1ZSBudWxsX3ZhbHVlID0gMTsKLWlubGluZSBib29sIFZhbHVlOjpoYXNf
bnVsbF92YWx1ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGtpbmRfY2FzZSgpID09IGtOdWxsVmFsdWU7
Ci19Ci1pbmxpbmUgdm9pZCBWYWx1ZTo6c2V0X2hhc19udWxsX3ZhbHVlKCkgewotICBfb25lb2Zf
Y2FzZV9bMF0gPSBrTnVsbFZhbHVlOwotfQotaW5saW5lIHZvaWQgVmFsdWU6OmNsZWFyX251bGxf
dmFsdWUoKSB7Ci0gIGlmIChoYXNfbnVsbF92YWx1ZSgpKSB7Ci0gICAga2luZF8ubnVsbF92YWx1
ZV8gPSAwOwotICAgIGNsZWFyX2hhc19raW5kKCk7Ci0gIH0KLX0KLWlubGluZSA6Omdvb2dsZTo6
cHJvdG9idWY6Ok51bGxWYWx1ZSBWYWx1ZTo6bnVsbF92YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVmFsdWUubnVs
bF92YWx1ZSkKLSAgaWYgKGhhc19udWxsX3ZhbHVlKCkpIHsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TnVsbFZhbHVlID4oa2luZF8ubnVsbF92YWx1ZV8pOwot
ICB9Ci0gIHJldHVybiBzdGF0aWNfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpOdWxsVmFsdWUg
PigwKTsKLX0KLWlubGluZSB2b2lkIFZhbHVlOjpzZXRfbnVsbF92YWx1ZSg6Omdvb2dsZTo6cHJv
dG9idWY6Ok51bGxWYWx1ZSB2YWx1ZSkgewotICBpZiAoIWhhc19udWxsX3ZhbHVlKCkpIHsKLSAg
ICBjbGVhcl9raW5kKCk7Ci0gICAgc2V0X2hhc19udWxsX3ZhbHVlKCk7Ci0gIH0KLSAga2luZF8u
bnVsbF92YWx1ZV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldDpnb29nbGUucHJvdG9idWYuVmFsdWUubnVsbF92YWx1ZSkKLX0KLQotLy8gb3B0aW9uYWwg
ZG91YmxlIG51bWJlcl92YWx1ZSA9IDI7Ci1pbmxpbmUgYm9vbCBWYWx1ZTo6aGFzX251bWJlcl92
YWx1ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGtpbmRfY2FzZSgpID09IGtOdW1iZXJWYWx1ZTsKLX0K
LWlubGluZSB2b2lkIFZhbHVlOjpzZXRfaGFzX251bWJlcl92YWx1ZSgpIHsKLSAgX29uZW9mX2Nh
c2VfWzBdID0ga051bWJlclZhbHVlOwotfQotaW5saW5lIHZvaWQgVmFsdWU6OmNsZWFyX251bWJl
cl92YWx1ZSgpIHsKLSAgaWYgKGhhc19udW1iZXJfdmFsdWUoKSkgewotICAgIGtpbmRfLm51bWJl
cl92YWx1ZV8gPSAwOwotICAgIGNsZWFyX2hhc19raW5kKCk7Ci0gIH0KLX0KLWlubGluZSBkb3Vi
bGUgVmFsdWU6Om51bWJlcl92YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVmFsdWUubnVtYmVyX3ZhbHVlKQotICBp
ZiAoaGFzX251bWJlcl92YWx1ZSgpKSB7Ci0gICAgcmV0dXJuIGtpbmRfLm51bWJlcl92YWx1ZV87
Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci1pbmxpbmUgdm9pZCBWYWx1ZTo6c2V0X251bWJlcl92YWx1
ZShkb3VibGUgdmFsdWUpIHsKLSAgaWYgKCFoYXNfbnVtYmVyX3ZhbHVlKCkpIHsKLSAgICBjbGVh
cl9raW5kKCk7Ci0gICAgc2V0X2hhc19udW1iZXJfdmFsdWUoKTsKLSAgfQotICBraW5kXy5udW1i
ZXJfdmFsdWVfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9z
ZXQ6Z29vZ2xlLnByb3RvYnVmLlZhbHVlLm51bWJlcl92YWx1ZSkKLX0KLQotLy8gb3B0aW9uYWwg
c3RyaW5nIHN0cmluZ192YWx1ZSA9IDM7Ci1pbmxpbmUgYm9vbCBWYWx1ZTo6aGFzX3N0cmluZ192
YWx1ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGtpbmRfY2FzZSgpID09IGtTdHJpbmdWYWx1ZTsKLX0K
LWlubGluZSB2b2lkIFZhbHVlOjpzZXRfaGFzX3N0cmluZ192YWx1ZSgpIHsKLSAgX29uZW9mX2Nh
c2VfWzBdID0ga1N0cmluZ1ZhbHVlOwotfQotaW5saW5lIHZvaWQgVmFsdWU6OmNsZWFyX3N0cmlu
Z192YWx1ZSgpIHsKLSAgaWYgKGhhc19zdHJpbmdfdmFsdWUoKSkgewotICAgIGtpbmRfLnN0cmlu
Z192YWx1ZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgICBjbGVhcl9oYXNfa2luZCgpOwotICB9
Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgVmFsdWU6OnN0cmluZ192YWx1ZSgpIGNv
bnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJv
dG9idWYuVmFsdWUuc3RyaW5nX3ZhbHVlKQotICBpZiAoaGFzX3N0cmluZ192YWx1ZSgpKSB7Ci0g
ICAgcmV0dXJuIGtpbmRfLnN0cmluZ192YWx1ZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICB9Ci0gIHJl
dHVybiAqJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpOwotfQotaW5saW5lIHZvaWQgVmFsdWU6OnNldF9zdHJpbmdfdmFsdWUoY29uc3Qg
OjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX3NldDpnb29nbGUucHJvdG9idWYuVmFsdWUuc3RyaW5nX3ZhbHVlKQotICBpZiAoIWhhc19z
dHJpbmdfdmFsdWUoKSkgewotICAgIGNsZWFyX2tpbmQoKTsKLSAgICBzZXRfaGFzX3N0cmluZ192
YWx1ZSgpOwotICAgIGtpbmRfLnN0cmluZ192YWx1ZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwot
ICB9Ci0gIGtpbmRfLnN0cmluZ192YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVmFsdWUu
c3RyaW5nX3ZhbHVlKQotfQotaW5saW5lIHZvaWQgVmFsdWU6OnNldF9zdHJpbmdfdmFsdWUoY29u
c3QgY2hhciogdmFsdWUpIHsKLSAgaWYgKCFoYXNfc3RyaW5nX3ZhbHVlKCkpIHsKLSAgICBjbGVh
cl9raW5kKCk7Ci0gICAgc2V0X2hhc19zdHJpbmdfdmFsdWUoKTsKLSAgICBraW5kXy5zdHJpbmdf
dmFsdWVfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgfQotICBraW5kXy5zdHJpbmdfdmFsdWVf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLlZhbHVl
LnN0cmluZ192YWx1ZSkKLX0KLWlubGluZSB2b2lkIFZhbHVlOjpzZXRfc3RyaW5nX3ZhbHVlKGNv
bnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICBpZiAoIWhhc19zdHJpbmdfdmFsdWUo
KSkgewotICAgIGNsZWFyX2tpbmQoKTsKLSAgICBzZXRfaGFzX3N0cmluZ192YWx1ZSgpOwotICAg
IGtpbmRfLnN0cmluZ192YWx1ZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICB9Ci0gIGtpbmRf
LnN0cmluZ192YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcoCi0gICAgICByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5z
dHJpbmdfdmFsdWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogVmFsdWU6Om11dGFibGVfc3Ry
aW5nX3ZhbHVlKCkgewotICBpZiAoIWhhc19zdHJpbmdfdmFsdWUoKSkgewotICAgIGNsZWFyX2tp
bmQoKTsKLSAgICBzZXRfaGFzX3N0cmluZ192YWx1ZSgpOwotICAgIGtpbmRfLnN0cmluZ192YWx1
ZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5zdHJpbmdfdmFsdWUpCi0g
IHJldHVybiBraW5kXy5zdHJpbmdfdmFsdWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxp
bmUgOjpzdGQ6OnN0cmluZyogVmFsdWU6OnJlbGVhc2Vfc3RyaW5nX3ZhbHVlKCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuVmFs
dWUuc3RyaW5nX3ZhbHVlKQotICBpZiAoaGFzX3N0cmluZ192YWx1ZSgpKSB7Ci0gICAgY2xlYXJf
aGFzX2tpbmQoKTsKLSAgICByZXR1cm4ga2luZF8uc3RyaW5nX3ZhbHVlXy5SZWxlYXNlTm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotICB9IGVsc2UgewotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci1pbmxpbmUgdm9p
ZCBWYWx1ZTo6c2V0X2FsbG9jYXRlZF9zdHJpbmdfdmFsdWUoOjpzdGQ6OnN0cmluZyogc3RyaW5n
X3ZhbHVlKSB7Ci0gIGlmICghaGFzX3N0cmluZ192YWx1ZSgpKSB7Ci0gICAga2luZF8uc3RyaW5n
X3ZhbHVlXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIH0KLSAgY2xlYXJfa2luZCgpOwotICBp
ZiAoc3RyaW5nX3ZhbHVlICE9IE5VTEwpIHsKLSAgICBzZXRfaGFzX3N0cmluZ192YWx1ZSgpOwot
ICAgIGtpbmRfLnN0cmluZ192YWx1ZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICAg
IHN0cmluZ192YWx1ZSk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlZhbHVlLnN0cmluZ192YWx1ZSkKLX0KLQot
Ly8gb3B0aW9uYWwgYm9vbCBib29sX3ZhbHVlID0gNDsKLWlubGluZSBib29sIFZhbHVlOjpoYXNf
Ym9vbF92YWx1ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGtpbmRfY2FzZSgpID09IGtCb29sVmFsdWU7
Ci19Ci1pbmxpbmUgdm9pZCBWYWx1ZTo6c2V0X2hhc19ib29sX3ZhbHVlKCkgewotICBfb25lb2Zf
Y2FzZV9bMF0gPSBrQm9vbFZhbHVlOwotfQotaW5saW5lIHZvaWQgVmFsdWU6OmNsZWFyX2Jvb2xf
dmFsdWUoKSB7Ci0gIGlmIChoYXNfYm9vbF92YWx1ZSgpKSB7Ci0gICAga2luZF8uYm9vbF92YWx1
ZV8gPSBmYWxzZTsKLSAgICBjbGVhcl9oYXNfa2luZCgpOwotICB9Ci19Ci1pbmxpbmUgYm9vbCBW
YWx1ZTo6Ym9vbF92YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVmFsdWUuYm9vbF92YWx1ZSkKLSAgaWYgKGhhc19i
b29sX3ZhbHVlKCkpIHsKLSAgICByZXR1cm4ga2luZF8uYm9vbF92YWx1ZV87Ci0gIH0KLSAgcmV0
dXJuIGZhbHNlOwotfQotaW5saW5lIHZvaWQgVmFsdWU6OnNldF9ib29sX3ZhbHVlKGJvb2wgdmFs
dWUpIHsKLSAgaWYgKCFoYXNfYm9vbF92YWx1ZSgpKSB7Ci0gICAgY2xlYXJfa2luZCgpOwotICAg
IHNldF9oYXNfYm9vbF92YWx1ZSgpOwotICB9Ci0gIGtpbmRfLmJvb2xfdmFsdWVfID0gdmFsdWU7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVm
LlZhbHVlLmJvb2xfdmFsdWUpCi19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU3Ry
dWN0IHN0cnVjdF92YWx1ZSA9IDU7Ci1pbmxpbmUgYm9vbCBWYWx1ZTo6aGFzX3N0cnVjdF92YWx1
ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGtpbmRfY2FzZSgpID09IGtTdHJ1Y3RWYWx1ZTsKLX0KLWlu
bGluZSB2b2lkIFZhbHVlOjpzZXRfaGFzX3N0cnVjdF92YWx1ZSgpIHsKLSAgX29uZW9mX2Nhc2Vf
WzBdID0ga1N0cnVjdFZhbHVlOwotfQotaW5saW5lIHZvaWQgVmFsdWU6OmNsZWFyX3N0cnVjdF92
YWx1ZSgpIHsKLSAgaWYgKGhhc19zdHJ1Y3RfdmFsdWUoKSkgewotICAgIGRlbGV0ZSBraW5kXy5z
dHJ1Y3RfdmFsdWVfOwotICAgIGNsZWFyX2hhc19raW5kKCk7Ci0gIH0KLX0KLWlubGluZSAgY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjpTdHJ1Y3QmIFZhbHVlOjpzdHJ1Y3RfdmFsdWUoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLlZhbHVlLnN0cnVjdF92YWx1ZSkKLSAgcmV0dXJuIGhhc19zdHJ1Y3RfdmFsdWUoKQotICAg
ICAgPyAqa2luZF8uc3RydWN0X3ZhbHVlXwotICAgICAgOiA6Omdvb2dsZTo6cHJvdG9idWY6OlN0
cnVjdDo6ZGVmYXVsdF9pbnN0YW5jZSgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
U3RydWN0KiBWYWx1ZTo6bXV0YWJsZV9zdHJ1Y3RfdmFsdWUoKSB7Ci0gIGlmICghaGFzX3N0cnVj
dF92YWx1ZSgpKSB7Ci0gICAgY2xlYXJfa2luZCgpOwotICAgIHNldF9oYXNfc3RydWN0X3ZhbHVl
KCk7Ci0gICAga2luZF8uc3RydWN0X3ZhbHVlXyA9IG5ldyA6Omdvb2dsZTo6cHJvdG9idWY6OlN0
cnVjdDsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpn
b29nbGUucHJvdG9idWYuVmFsdWUuc3RydWN0X3ZhbHVlKQotICByZXR1cm4ga2luZF8uc3RydWN0
X3ZhbHVlXzsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlN0cnVjdCogVmFsdWU6OnJl
bGVhc2Vfc3RydWN0X3ZhbHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuVmFsdWUuc3RydWN0X3ZhbHVlKQotICBpZiAoaGFz
X3N0cnVjdF92YWx1ZSgpKSB7Ci0gICAgY2xlYXJfaGFzX2tpbmQoKTsKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OlN0cnVjdCogdGVtcCA9IGtpbmRfLnN0cnVjdF92YWx1ZV87Ci0gICAga2luZF8u
c3RydWN0X3ZhbHVlXyA9IE5VTEw7Ci0gICAgcmV0dXJuIHRlbXA7Ci0gIH0gZWxzZSB7Ci0gICAg
cmV0dXJuIE5VTEw7Ci0gIH0KLX0KLWlubGluZSB2b2lkIFZhbHVlOjpzZXRfYWxsb2NhdGVkX3N0
cnVjdF92YWx1ZSg6Omdvb2dsZTo6cHJvdG9idWY6OlN0cnVjdCogc3RydWN0X3ZhbHVlKSB7Ci0g
IGNsZWFyX2tpbmQoKTsKLSAgaWYgKHN0cnVjdF92YWx1ZSkgewotICAgIHNldF9oYXNfc3RydWN0
X3ZhbHVlKCk7Ci0gICAga2luZF8uc3RydWN0X3ZhbHVlXyA9IHN0cnVjdF92YWx1ZTsKLSAgfQot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUu
cHJvdG9idWYuVmFsdWUuc3RydWN0X3ZhbHVlKQotfQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnBy
b3RvYnVmLkxpc3RWYWx1ZSBsaXN0X3ZhbHVlID0gNjsKLWlubGluZSBib29sIFZhbHVlOjpoYXNf
bGlzdF92YWx1ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGtpbmRfY2FzZSgpID09IGtMaXN0VmFsdWU7
Ci19Ci1pbmxpbmUgdm9pZCBWYWx1ZTo6c2V0X2hhc19saXN0X3ZhbHVlKCkgewotICBfb25lb2Zf
Y2FzZV9bMF0gPSBrTGlzdFZhbHVlOwotfQotaW5saW5lIHZvaWQgVmFsdWU6OmNsZWFyX2xpc3Rf
dmFsdWUoKSB7Ci0gIGlmIChoYXNfbGlzdF92YWx1ZSgpKSB7Ci0gICAgZGVsZXRlIGtpbmRfLmxp
c3RfdmFsdWVfOwotICAgIGNsZWFyX2hhc19raW5kKCk7Ci0gIH0KLX0KLWlubGluZSAgY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpMaXN0VmFsdWUmIFZhbHVlOjpsaXN0X3ZhbHVlKCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1
Zi5WYWx1ZS5saXN0X3ZhbHVlKQotICByZXR1cm4gaGFzX2xpc3RfdmFsdWUoKQotICAgICAgPyAq
a2luZF8ubGlzdF92YWx1ZV8KLSAgICAgIDogOjpnb29nbGU6OnByb3RvYnVmOjpMaXN0VmFsdWU6
OmRlZmF1bHRfaW5zdGFuY2UoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6Okxpc3RW
YWx1ZSogVmFsdWU6Om11dGFibGVfbGlzdF92YWx1ZSgpIHsKLSAgaWYgKCFoYXNfbGlzdF92YWx1
ZSgpKSB7Ci0gICAgY2xlYXJfa2luZCgpOwotICAgIHNldF9oYXNfbGlzdF92YWx1ZSgpOwotICAg
IGtpbmRfLmxpc3RfdmFsdWVfID0gbmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TGlzdFZhbHVlOwot
ICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5w
cm90b2J1Zi5WYWx1ZS5saXN0X3ZhbHVlKQotICByZXR1cm4ga2luZF8ubGlzdF92YWx1ZV87Ci19
Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpMaXN0VmFsdWUqIFZhbHVlOjpyZWxlYXNlX2xp
c3RfdmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNl
Omdvb2dsZS5wcm90b2J1Zi5WYWx1ZS5saXN0X3ZhbHVlKQotICBpZiAoaGFzX2xpc3RfdmFsdWUo
KSkgewotICAgIGNsZWFyX2hhc19raW5kKCk7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpMaXN0
VmFsdWUqIHRlbXAgPSBraW5kXy5saXN0X3ZhbHVlXzsKLSAgICBraW5kXy5saXN0X3ZhbHVlXyA9
IE5VTEw7Ci0gICAgcmV0dXJuIHRlbXA7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLX0KLWlubGluZSB2b2lkIFZhbHVlOjpzZXRfYWxsb2NhdGVkX2xpc3RfdmFsdWUoOjpnb29n
bGU6OnByb3RvYnVmOjpMaXN0VmFsdWUqIGxpc3RfdmFsdWUpIHsKLSAgY2xlYXJfa2luZCgpOwot
ICBpZiAobGlzdF92YWx1ZSkgewotICAgIHNldF9oYXNfbGlzdF92YWx1ZSgpOwotICAgIGtpbmRf
Lmxpc3RfdmFsdWVfID0gbGlzdF92YWx1ZTsKLSAgfQotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuVmFsdWUubGlzdF92YWx1
ZSkKLX0KLQotaW5saW5lIGJvb2wgVmFsdWU6Omhhc19raW5kKCkgY29uc3QgewotICByZXR1cm4g
a2luZF9jYXNlKCkgIT0gS0lORF9OT1RfU0VUOwotfQotaW5saW5lIHZvaWQgVmFsdWU6OmNsZWFy
X2hhc19raW5kKCkgewotICBfb25lb2ZfY2FzZV9bMF0gPSBLSU5EX05PVF9TRVQ7Ci19Ci1pbmxp
bmUgVmFsdWU6OktpbmRDYXNlIFZhbHVlOjpraW5kX2Nhc2UoKSBjb25zdCB7Ci0gIHJldHVybiBW
YWx1ZTo6S2luZENhc2UoX29uZW9mX2Nhc2VfWzBdKTsKLX0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8g
TGlzdFZhbHVlCi0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuVmFsdWUgdmFsdWVzID0g
MTsKLWlubGluZSBpbnQgTGlzdFZhbHVlOjp2YWx1ZXNfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJu
IHZhbHVlc18uc2l6ZSgpOwotfQotaW5saW5lIHZvaWQgTGlzdFZhbHVlOjpjbGVhcl92YWx1ZXMo
KSB7Ci0gIHZhbHVlc18uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OlZhbHVlJiBMaXN0VmFsdWU6OnZhbHVlcyhpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuTGlzdFZhbHVl
LnZhbHVlcykKLSAgcmV0dXJuIHZhbHVlc18uR2V0KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2ds
ZTo6cHJvdG9idWY6OlZhbHVlKiBMaXN0VmFsdWU6Om11dGFibGVfdmFsdWVzKGludCBpbmRleCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJv
dG9idWYuTGlzdFZhbHVlLnZhbHVlcykKLSAgcmV0dXJuIHZhbHVlc18uTXV0YWJsZShpbmRleCk7
Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpWYWx1ZSogTGlzdFZhbHVlOjphZGRfdmFs
dWVzKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5w
cm90b2J1Zi5MaXN0VmFsdWUudmFsdWVzKQotICByZXR1cm4gdmFsdWVzXy5BZGQoKTsKLX0KLWlu
bGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6VmFsdWUgPioKLUxpc3RWYWx1ZTo6bXV0YWJsZV92YWx1ZXMoKSB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkxp
c3RWYWx1ZS52YWx1ZXMpCi0gIHJldHVybiAmdmFsdWVzXzsKLX0KLWlubGluZSBjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6VmFs
dWUgPiYKLUxpc3RWYWx1ZTo6dmFsdWVzKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLnZhbHVlcykKLSAg
cmV0dXJuIHZhbHVlc187Ci19Ci0KLSNlbmRpZiAgLy8gIVBST1RPQlVGX0lOTElORV9OT1RfSU5f
SEVBREVSUwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8gbmFtZXNwYWNlIHByb3Rv
YnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNpZm5kZWYgU1dJRwotbmFtZXNwYWNlIGdv
b2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfcHJv
dG9fZW51bTwgOjpnb29nbGU6OnByb3RvYnVmOjpOdWxsVmFsdWU+IDogOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6dHJ1ZV90eXBlIHt9OwotdGVtcGxhdGUgPD4KLWlubGluZSBjb25zdCBF
bnVtRGVzY3JpcHRvciogR2V0RW51bURlc2NyaXB0b3I8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TnVs
bFZhbHVlPigpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TnVsbFZhbHVlX2Rlc2Ny
aXB0b3IoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2Ug
Z29vZ2xlCi0jZW5kaWYgIC8vIFNXSUcKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGds
b2JhbF9zY29wZSkKLQotI2VuZGlmICAvLyBQUk9UT0JVRl9nb29nbGVfMmZwcm90b2J1Zl8yZnN0
cnVjdF8yZXByb3RvX19JTkNMVURFRApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
cnVjdC5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJlZWJhODExODg4ODgzNjA1YTQyYTU4ZGUwYTlkMGY4Yzc5NWRj
NTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsK
LQotcGFja2FnZSBnb29nbGUucHJvdG9idWY7Ci0KLW9wdGlvbiBjc2hhcnBfbmFtZXNwYWNlID0g
Ikdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlcyI7Ci1vcHRpb24gZ29fcGFja2FnZSA9ICJn
aXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wdHlwZXMvc3RydWN0O3N0cnVjdHBiIjsKLW9wdGlv
biBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5wcm90b2J1ZiI7Ci1vcHRpb24gamF2YV9vdXRl
cl9jbGFzc25hbWUgPSAiU3RydWN0UHJvdG8iOwotb3B0aW9uIGphdmFfbXVsdGlwbGVfZmlsZXMg
PSB0cnVlOwotb3B0aW9uIGphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoID0gdHJ1ZTsKLW9w
dGlvbiBvYmpjX2NsYXNzX3ByZWZpeCA9ICJHUEIiOwotCi0KLS8vIGBTdHJ1Y3RgIHJlcHJlc2Vu
dHMgYSBzdHJ1Y3R1cmVkIGRhdGEgdmFsdWUsIGNvbnNpc3Rpbmcgb2YgZmllbGRzCi0vLyB3aGlj
aCBtYXAgdG8gZHluYW1pY2FsbHkgdHlwZWQgdmFsdWVzLiBJbiBzb21lIGxhbmd1YWdlcywgYFN0
cnVjdGAKLS8vIG1pZ2h0IGJlIHN1cHBvcnRlZCBieSBhIG5hdGl2ZSByZXByZXNlbnRhdGlvbi4g
Rm9yIGV4YW1wbGUsIGluCi0vLyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGxpa2UgSlMgYSBzdHJ1Y3Qg
aXMgcmVwcmVzZW50ZWQgYXMgYW4KLS8vIG9iamVjdC4gVGhlIGRldGFpbHMgb2YgdGhhdCByZXBy
ZXNlbnRhdGlvbiBhcmUgZGVzY3JpYmVkIHRvZ2V0aGVyCi0vLyB3aXRoIHRoZSBwcm90byBzdXBw
b3J0IGZvciB0aGUgbGFuZ3VhZ2UuCi0vLwotLy8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9y
IGBTdHJ1Y3RgIGlzIEpTT04gb2JqZWN0LgotbWVzc2FnZSBTdHJ1Y3QgewotICAvLyBVbm9yZGVy
ZWQgbWFwIG9mIGR5bmFtaWNhbGx5IHR5cGVkIHZhbHVlcy4KLSAgbWFwPHN0cmluZywgVmFsdWU+
IGZpZWxkcyA9IDE7Ci19Ci0KLS8vIGBWYWx1ZWAgcmVwcmVzZW50cyBhIGR5bmFtaWNhbGx5IHR5
cGVkIHZhbHVlIHdoaWNoIGNhbiBiZSBlaXRoZXIKLS8vIG51bGwsIGEgbnVtYmVyLCBhIHN0cmlu
ZywgYSBib29sZWFuLCBhIHJlY3Vyc2l2ZSBzdHJ1Y3QgdmFsdWUsIG9yIGEKLS8vIGxpc3Qgb2Yg
dmFsdWVzLiBBIHByb2R1Y2VyIG9mIHZhbHVlIGlzIGV4cGVjdGVkIHRvIHNldCBvbmUgb2YgdGhh
dAotLy8gdmFyaWFudHMsIGFic2VuY2Ugb2YgYW55IHZhcmlhbnQgaW5kaWNhdGVzIGFuIGVycm9y
LgotLy8KLS8vIFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgVmFsdWVgIGlzIEpTT04gdmFs
dWUuCi1tZXNzYWdlIFZhbHVlIHsKLSAgLy8gVGhlIGtpbmQgb2YgdmFsdWUuCi0gIG9uZW9mIGtp
bmQgewotICAgIC8vIFJlcHJlc2VudHMgYSBudWxsIHZhbHVlLgotICAgIE51bGxWYWx1ZSBudWxs
X3ZhbHVlID0gMTsKLSAgICAvLyBSZXByZXNlbnRzIGEgZG91YmxlIHZhbHVlLgotICAgIGRvdWJs
ZSBudW1iZXJfdmFsdWUgPSAyOwotICAgIC8vIFJlcHJlc2VudHMgYSBzdHJpbmcgdmFsdWUuCi0g
ICAgc3RyaW5nIHN0cmluZ192YWx1ZSA9IDM7Ci0gICAgLy8gUmVwcmVzZW50cyBhIGJvb2xlYW4g
dmFsdWUuCi0gICAgYm9vbCBib29sX3ZhbHVlID0gNDsKLSAgICAvLyBSZXByZXNlbnRzIGEgc3Ry
dWN0dXJlZCB2YWx1ZS4KLSAgICBTdHJ1Y3Qgc3RydWN0X3ZhbHVlID0gNTsKLSAgICAvLyBSZXBy
ZXNlbnRzIGEgcmVwZWF0ZWQgYFZhbHVlYC4KLSAgICBMaXN0VmFsdWUgbGlzdF92YWx1ZSA9IDY7
Ci0gIH0KLX0KLQotLy8gYE51bGxWYWx1ZWAgaXMgYSBzaW5nbGV0b24gZW51bWVyYXRpb24gdG8g
cmVwcmVzZW50IHRoZSBudWxsIHZhbHVlIGZvciB0aGUKLS8vIGBWYWx1ZWAgdHlwZSB1bmlvbi4K
LS8vCi0vLyAgVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBOdWxsVmFsdWVgIGlzIEpTT04g
YG51bGxgLgotZW51bSBOdWxsVmFsdWUgewotICAvLyBOdWxsIHZhbHVlLgotICBOVUxMX1ZBTFVF
ID0gMDsKLX0KLQotLy8gYExpc3RWYWx1ZWAgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIHJlcGVhdGVk
IGZpZWxkIG9mIHZhbHVlcy4KLS8vCi0vLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgYExp
c3RWYWx1ZWAgaXMgSlNPTiBhcnJheS4KLW1lc3NhZ2UgTGlzdFZhbHVlIHsKLSAgLy8gUmVwZWF0
ZWQgZmllbGQgb2YgZHluYW1pY2FsbHkgdHlwZWQgdmFsdWVzLgotICByZXBlYXRlZCBWYWx1ZSB2
YWx1ZXMgPSAxOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21p
Y19zZXF1ZW5jZV9udW0uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNfc2VxdWVu
Y2VfbnVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMjA5NDJmMmY3NzA0MWRm
NjAyNTQ0YThlODg4MzQxZTQ2ZmViNGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY19zZXF1ZW5jZV9u
dW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTQgR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQVRPTUlDX1NFUVVFTkNFX05V
TV9IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQVRPTUlDX1NFUVVFTkNFX05VTV9IXwotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wcy5oPgotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi1j
bGFzcyBTZXF1ZW5jZU51bWJlciB7Ci0gcHVibGljOgotICBTZXF1ZW5jZU51bWJlcigpIDogd29y
ZF8oMCkge30KLQotICBBdG9taWNXb3JkIEdldE5leHQoKSB7Ci0gICAgcmV0dXJuIE5vQmFycmll
cl9BdG9taWNJbmNyZW1lbnQoJndvcmRfLCAxKSAtIDE7Ci0gIH0KLSBwcml2YXRlOgotICBBdG9t
aWNXb3JkIHdvcmRfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09H
TEVfUFJPVE9CVUZfQVRPTUlDX1NFUVVFTkNFX05VTV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2F0b21pY29wcy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0
b21pY29wcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjNkMWU2YjU3ZDI1ZWM4
MmNlYjI1YWQ4YTFiYWVmNjZlYmQ1MzQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotLy8gVGhlIHJvdXRpbmVzIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlIGFyZSBzdWJ0
bGUuICBJZiB5b3UgdXNlIHRoZW0sIGV2ZW4gaWYKLS8vIHlvdSBnZXQgdGhlIGNvZGUgcmlnaHQs
IGl0IHdpbGwgZGVwZW5kIG9uIGNhcmVmdWwgcmVhc29uaW5nIGFib3V0IGF0b21pY2l0eQotLy8g
YW5kIG1lbW9yeSBvcmRlcmluZzsgaXQgd2lsbCBiZSBsZXNzIHJlYWRhYmxlLCBhbmQgaGFyZGVy
IHRvIG1haW50YWluLiAgSWYKLS8vIHlvdSBwbGFuIHRvIHVzZSB0aGVzZSByb3V0aW5lcywgeW91
IHNob3VsZCBoYXZlIGEgZ29vZCByZWFzb24sIHN1Y2ggYXMgc29saWQKLS8vIGV2aWRlbmNlIHRo
YXQgcGVyZm9ybWFuY2Ugd291bGQgb3RoZXJ3aXNlIHN1ZmZlciwgb3IgdGhlcmUgYmVpbmcgbm8K
LS8vIGFsdGVybmF0aXZlLiAgWW91IHNob3VsZCBhc3N1bWUgb25seSBwcm9wZXJ0aWVzIGV4cGxp
Y2l0bHkgZ3VhcmFudGVlZCBieSB0aGUKLS8vIHNwZWNpZmljYXRpb25zIGluIHRoaXMgZmlsZS4g
IFlvdSBhcmUgYWxtb3N0IGNlcnRhaW5seSBfbm90XyB3cml0aW5nIGNvZGUKLS8vIGp1c3QgZm9y
IHRoZSB4ODY7IGlmIHlvdSBhc3N1bWUgeDg2IHNlbWFudGljcywgeDg2IGhhcmR3YXJlIGJ1Z3Mg
YW5kCi0vLyBpbXBsZW1lbnRhdGlvbnMgb24gb3RoZXIgYXJjaHRlY3R1cmVzIHdpbGwgY2F1c2Ug
eW91ciBjb2RlIHRvIGJyZWFrLiAgSWYgeW91Ci0vLyBkbyBub3Qga25vdyB3aGF0IHlvdSBhcmUg
ZG9pbmcsIGF2b2lkIHRoZXNlIHJvdXRpbmVzLCBhbmQgdXNlIGEgTXV0ZXguCi0vLwotLy8gSXQg
aXMgaW5jb3JyZWN0IHRvIG1ha2UgZGlyZWN0IGFzc2lnbm1lbnRzIHRvL2Zyb20gYW4gYXRvbWlj
IHZhcmlhYmxlLgotLy8gWW91IHNob3VsZCB1c2Ugb25lIG9mIHRoZSBMb2FkIG9yIFN0b3JlIHJv
dXRpbmVzLiAgVGhlIE5vQmFycmllcgotLy8gdmVyc2lvbnMgYXJlIHByb3ZpZGVkIHdoZW4gbm8g
YmFycmllcnMgYXJlIG5lZWRlZDoKLS8vICAgTm9CYXJyaWVyX1N0b3JlKCkKLS8vICAgTm9CYXJy
aWVyX0xvYWQoKQotLy8gQWx0aG91Z2ggdGhlcmUgYXJlIGN1cnJlbnRseSBubyBjb21waWxlciBl
bmZvcmNlbWVudCwgeW91IGFyZSBlbmNvdXJhZ2VkCi0vLyB0byB1c2UgdGhlc2UuCi0KLS8vIFRo
aXMgaGVhZGVyIGFuZCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBlYWNoIHBsYXRmb3JtIChsb2Nh
dGVkIGluCi0vLyBhdG9taWNvcHNfaW50ZXJuYWxzXyopIG11c3QgYmUga2VwdCBpbiBzeW5jIHdp
dGggdGhlIHVwc3RyZWFtIGNvZGUgKFY4KS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQVRP
TUlDT1BTX0hfCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSF8KLQotLy8gRG9u
J3QgaW5jbHVkZSB0aGlzIGZpbGUgZm9yIHBlb3BsZSBub3QgY29uY2VybmVkIGFib3V0IHRocmVh
ZCBzYWZldHkuCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9OT19USFJFQURfU0FGRVRZCi0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL3BsYXRmb3JtX21hY3Jvcy5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0jaWYgZGVmaW5l
ZChHT09HTEVfUFJPVE9CVUZfQVJDSF9QT1dFUikKLSNpZiBkZWZpbmVkKF9MUDY0KSB8fCBkZWZp
bmVkKF9fTFA2NF9fKQotdHlwZWRlZiBpbnQzMiBBdG9taWMzMjsKLXR5cGVkZWYgaW50cHRyX3Qg
QXRvbWljNjQ7Ci0jZWxzZQotdHlwZWRlZiBpbnRwdHJfdCBBdG9taWMzMjsKLXR5cGVkZWYgaW50
NjQgQXRvbWljNjQ7Ci0jZW5kaWYKLSNlbHNlCi10eXBlZGVmIGludDMyIEF0b21pYzMyOwotI2lm
ZGVmIEdPT0dMRV9QUk9UT0JVRl9BUkNIXzY0X0JJVAotLy8gV2UgbmVlZCB0byBiZSBhYmxlIHRv
IGdvIGJldHdlZW4gQXRvbWljNjQgYW5kIEF0b21pY1dvcmQgaW1wbGljaXRseS4gIFRoaXMKLS8v
IG1lYW5zIEF0b21pYzY0IGFuZCBBdG9taWNXb3JkIHNob3VsZCBiZSB0aGUgc2FtZSB0eXBlIG9u
IDY0LWJpdC4KLSNpZiBkZWZpbmVkKF9fSUxQMzJfXykgfHwgZGVmaW5lZChHT09HTEVfUFJPVE9C
VUZfT1NfTkFDTCkKLS8vIE5hQ2wncyBpbnRwdHJfdCBpcyBub3QgYWN0dWFsbHkgNjQtYml0cyBv
biA2NC1iaXQhCi0vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbmF0aXZlY2xpZW50L2lzc3Vl
cy9kZXRhaWw/aWQ9MTE2MgotLy8gc3BhcmN2OSdzIHBvaW50ZXIgdHlwZSBpcyAzMmJpdHMKLXR5
cGVkZWYgaW50NjQgQXRvbWljNjQ7Ci0jZWxzZQotdHlwZWRlZiBpbnRwdHJfdCBBdG9taWM2NDsK
LSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotLy8gVXNlIEF0b21pY1dvcmQgZm9yIGEgbWFjaGlu
ZS1zaXplZCBwb2ludGVyLiAgSXQgd2lsbCB1c2UgdGhlIEF0b21pYzMyIG9yCi0vLyBBdG9taWM2
NCByb3V0aW5lcyBiZWxvdywgZGVwZW5kaW5nIG9uIHlvdXIgYXJjaGl0ZWN0dXJlLgotdHlwZWRl
ZiBpbnRwdHJfdCBBdG9taWNXb3JkOwotCi0vLyBBdG9taWNhbGx5IGV4ZWN1dGU6Ci0vLyAgICAg
IHJlc3VsdCA9ICpwdHI7Ci0vLyAgICAgIGlmICgqcHRyID09IG9sZF92YWx1ZSkKLS8vICAgICAg
ICAqcHRyID0gbmV3X3ZhbHVlOwotLy8gICAgICByZXR1cm4gcmVzdWx0OwotLy8KLS8vIEkuZS4s
IHJlcGxhY2UgIipwdHIiIHdpdGggIm5ld192YWx1ZSIgaWYgIipwdHIiIHVzZWQgdG8gYmUgIm9s
ZF92YWx1ZSIuCi0vLyBBbHdheXMgcmV0dXJuIHRoZSBvbGQgdmFsdWUgb2YgIipwdHIiCi0vLwot
Ly8gVGhpcyByb3V0aW5lIGltcGxpZXMgbm8gbWVtb3J5IGJhcnJpZXJzLgotQXRvbWljMzIgTm9C
YXJyaWVyX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1ZSk7Ci0KLS8vIEF0b21pY2Fs
bHkgc3RvcmUgbmV3X3ZhbHVlIGludG8gKnB0ciwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1
ZSBoZWxkIGluCi0vLyAqcHRyLiAgVGhpcyByb3V0aW5lIGltcGxpZXMgbm8gbWVtb3J5IGJhcnJp
ZXJzLgotQXRvbWljMzIgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21pYzMy
KiBwdHIsIEF0b21pYzMyIG5ld192YWx1ZSk7Ci0KLS8vIEF0b21pY2FsbHkgaW5jcmVtZW50ICpw
dHIgYnkgImluY3JlbWVudCIuICBSZXR1cm5zIHRoZSBuZXcgdmFsdWUgb2YKLS8vICpwdHIgd2l0
aCB0aGUgaW5jcmVtZW50IGFwcGxpZWQuICBUaGlzIHJvdXRpbmUgaW1wbGllcyBubyBtZW1vcnkg
YmFycmllcnMuCi1BdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0
b21pYzMyKiBwdHIsIEF0b21pYzMyIGluY3JlbWVudCk7Ci0KLUF0b21pYzMyIEJhcnJpZXJfQXRv
bWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpOwotCi0vLyBUaGVzZSBmb2xsb3dpbmcg
bG93ZXItbGV2ZWwgb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IHVzZWZ1bCBvbmx5IHRvIHBlb3Bs
ZQotLy8gaW1wbGVtZW50aW5nIGhpZ2hlci1sZXZlbCBzeW5jaHJvbml6YXRpb24gb3BlcmF0aW9u
cyBsaWtlIHNwaW5sb2NrcywKLS8vIG11dGV4ZXMsIGFuZCBjb25kaXRpb24tdmFyaWFibGVzLiAg
VGhleSBjb21iaW5lIENvbXBhcmVBbmRTd2FwKCksIGEgbG9hZCwgb3IKLS8vIGEgc3RvcmUgd2l0
aCBhcHByb3ByaWF0ZSBtZW1vcnktb3JkZXJpbmcgaW5zdHJ1Y3Rpb25zLiAgIkFjcXVpcmUiIG9w
ZXJhdGlvbnMKLS8vIGVuc3VyZSB0aGF0IG5vIGxhdGVyIG1lbW9yeSBhY2Nlc3MgY2FuIGJlIHJl
b3JkZXJlZCBhaGVhZCBvZiB0aGUgb3BlcmF0aW9uLgotLy8gIlJlbGVhc2UiIG9wZXJhdGlvbnMg
ZW5zdXJlIHRoYXQgbm8gcHJldmlvdXMgbWVtb3J5IGFjY2VzcyBjYW4gYmUgcmVvcmRlcmVkCi0v
LyBhZnRlciB0aGUgb3BlcmF0aW9uLiAgIkJhcnJpZXIiIG9wZXJhdGlvbnMgaGF2ZSBib3RoICJB
Y3F1aXJlIiBhbmQgIlJlbGVhc2UiCi0vLyBzZW1hbnRpY3MuICAgQSBNZW1vcnlCYXJyaWVyKCkg
aGFzICJCYXJyaWVyIiBzZW1hbnRpY3MsIGJ1dCBkb2VzIG5vIG1lbW9yeQotLy8gYWNjZXNzLgot
QXRvbWljMzIgQWNxdWlyZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1ZSk7Ci1BdG9taWMz
MiBSZWxlYXNlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG9sZF92YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKTsKLQotI2lmIGRlZmluZWQo
X19NSU5HVzMyX18pICYmIGRlZmluZWQoTWVtb3J5QmFycmllcikKLSN1bmRlZiBNZW1vcnlCYXJy
aWVyCi0jZW5kaWYKLXZvaWQgTWVtb3J5QmFycmllcigpOwotdm9pZCBOb0JhcnJpZXJfU3RvcmUo
dm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpOwotdm9pZCBBY3F1aXJlX1N0
b3JlKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsIEF0b21pYzMyIHZhbHVlKTsKLXZvaWQgUmVsZWFz
ZV9TdG9yZSh2b2xhdGlsZSBBdG9taWMzMiogcHRyLCBBdG9taWMzMiB2YWx1ZSk7Ci0KLUF0b21p
YzMyIE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpOwotQXRvbWlj
MzIgQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpOwotQXRvbWljMzIg
UmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpOwotCi0vLyA2NC1iaXQg
YXRvbWljIG9wZXJhdGlvbnMgKG9ubHkgYXZhaWxhYmxlIG9uIDY0LWJpdCBwcm9jZXNzb3JzKS4K
LSNpZmRlZiBHT09HTEVfUFJPVE9CVUZfQVJDSF82NF9CSVQKLUF0b21pYzY0IE5vQmFycmllcl9D
b21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWM2NCBuZXdfdmFsdWUpOwotQXRvbWljNjQgTm9CYXJyaWVyX0F0
b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IG5ld192YWx1ZSk7
Ci1BdG9taWM2NCBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzY0KiBw
dHIsIEF0b21pYzY0IGluY3JlbWVudCk7Ci1BdG9taWM2NCBCYXJyaWVyX0F0b21pY0luY3JlbWVu
dCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLCBBdG9taWM2NCBpbmNyZW1lbnQpOwotCi1BdG9taWM2
NCBBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKTsKLUF0b21pYzY0IFJlbGVh
c2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWM2NCBuZXdfdmFsdWUpOwotdm9pZCBOb0JhcnJpZXJfU3RvcmUo
dm9sYXRpbGUgQXRvbWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpOwotdm9pZCBBY3F1aXJlX1N0
b3JlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IHZhbHVlKTsKLXZvaWQgUmVsZWFz
ZV9TdG9yZSh2b2xhdGlsZSBBdG9taWM2NCogcHRyLCBBdG9taWM2NCB2YWx1ZSk7Ci1BdG9taWM2
NCBOb0JhcnJpZXJfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2NCogcHRyKTsKLUF0b21pYzY0
IEFjcXVpcmVfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2NCogcHRyKTsKLUF0b21pYzY0IFJl
bGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2NCogcHRyKTsKLSNlbmRpZiAgLy8gR09P
R0xFX1BST1RPQlVGX0FSQ0hfNjRfQklUCi0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAg
Ly8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEluY2x1
ZGUgb3VyIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgotI2RlZmluZSBHT09HTEVf
UFJPVE9CVUZfQVRPTUlDT1BTX0VSUk9SIFwKLSJBdG9taWMgb3BlcmF0aW9ucyBhcmUgbm90IHN1
cHBvcnRlZCBvbiB5b3VyIHBsYXRmb3JtIgotCi0vLyBUaHJlYWRTYW5pdGl6ZXIsIGh0dHA6Ly9j
bGFuZy5sbHZtLm9yZy9kb2NzL1RocmVhZFNhbml0aXplci5odG1sLgotI2lmIGRlZmluZWQoVEhS
RUFEX1NBTklUSVpFUikKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3Bz
X2ludGVybmFsc190c2FuLmg+Ci0vLyBNU1ZDLgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNp
ZiBkZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9BUkNIX0lBMzIpIHx8IGRlZmluZWQoR09PR0xFX1BS
T1RPQlVGX0FSQ0hfWDY0KQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNv
cHNfaW50ZXJuYWxzX3g4Nl9tc3ZjLmg+Ci0jZWxzZQotI2Vycm9yIEdPT0dMRV9QUk9UT0JVRl9B
VE9NSUNPUFNfRVJST1IKLSNlbmRpZgotCi0vLyBTb2xhcmlzCi0jZWxpZiBkZWZpbmVkKEdPT0dM
RV9QUk9UT0JVRl9PU19TT0xBUklTKQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9h
dG9taWNvcHNfaW50ZXJuYWxzX3NvbGFyaXMuaD4KLQotLy8gQUlYCi0jZWxpZiBkZWZpbmVkKEdP
T0dMRV9QUk9UT0JVRl9PU19BSVgpCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0
b21pY29wc19pbnRlcm5hbHNfcG93ZXIuaD4KLQotLy8gQXBwbGUuCi0jZWxpZiBkZWZpbmVkKEdP
T0dMRV9QUk9UT0JVRl9PU19BUFBMRSkKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
YXRvbWljb3BzX2ludGVybmFsc19tYWNvc3guaD4KLQotLy8gR0NDLgotI2VsaWYgZGVmaW5lZChf
X0dOVUNfXykKLSNpZiBkZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9BUkNIX0lBMzIpIHx8IGRlZmlu
ZWQoR09PR0xFX1BST1RPQlVGX0FSQ0hfWDY0KQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3g4Nl9nY2MuaD4KLSNlbGlmIGRlZmluZWQoR09PR0xF
X1BST1RPQlVGX0FSQ0hfQVJNKSAmJiBkZWZpbmVkKF9fbGludXhfXykKLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19hcm1fZ2NjLmg+Ci0jZWxpZiBk
ZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9BUkNIX0FBUkNINjQpCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfYXJtNjRfZ2NjLmg+Ci0jZWxpZiBkZWZp
bmVkKEdPT0dMRV9QUk9UT0JVRl9BUkNIX0FSTV9RTlgpCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfYXJtX3FueC5oPgotI2VsaWYgZGVmaW5lZChH
T09HTEVfUFJPVE9CVUZfQVJDSF9NSVBTKSB8fCBkZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9BUkNI
X01JUFM2NCkKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVy
bmFsc19taXBzX2djYy5oPgotI2VsaWYgZGVmaW5lZChHT09HTEVfUFJPVE9CVUZfQVJDSF9QT1dF
UikKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19w
b3dlci5oPgotI2VsaWYgZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykKLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19wbmFjbC5oPgotI2VsaWYgZGVm
aW5lZChHT09HTEVfUFJPVE9CVUZfQVJDSF9QUEMpCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfcHBjX2djYy5oPgotI2VsaWYgKCgoX19HTlVDX18g
PT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDcpKSB8fCAoX19HTlVDX18gPiA0KSkKLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19nZW5lcmljX2dj
Yy5oPgotI2VsaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jaWYgX19oYXNfZXh0ZW5zaW9uKGNfYXRv
bWljKQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxz
X2dlbmVyaWNfZ2NjLmg+Ci0jZWxzZQotI2Vycm9yIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNf
RVJST1IKLSNlbmRpZgotI2Vsc2UKLSNlcnJvciBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BTX0VS
Uk9SCi0jZW5kaWYKLQotLy8gVW5rbm93bi4KLSNlbHNlCi0jZXJyb3IgR09PR0xFX1BST1RPQlVG
X0FUT01JQ09QU19FUlJPUgotI2VuZGlmCi0KLS8vIE9uIHNvbWUgcGxhdGZvcm1zIHdlIG5lZWQg
YWRkaXRpb25hbCBkZWNsYXJhdGlvbnMgdG8gbWFrZSBBdG9taWNXb3JkCi0vLyBjb21wYXRpYmxl
IHdpdGggb3VyIG90aGVyIEF0b21pYyogdHlwZXMuCi0jaWYgZGVmaW5lZChHT09HTEVfUFJPVE9C
VUZfT1NfQVBQTEUpCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19p
bnRlcm5hbHNfYXRvbWljd29yZF9jb21wYXQuaD4KLSNlbmRpZgotCi0jdW5kZWYgR09PR0xFX1BS
T1RPQlVGX0FUT01JQ09QU19FUlJPUgotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9OT19U
SFJFQURfU0FGRVRZCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNf
YXJtNjRfZ2NjLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFs
c19hcm02NF9nY2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEyZDJiODk0Yjg0
MmVhNzkyMzlhYTA1ZWNhMjdjNjYwOTc5NTRkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2lu
dGVybmFsc19hcm02NF9nY2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyNSArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVGhpcyBmaWxlIGlzIGFuIGludGVy
bmFsIGF0b21pYyBpbXBsZW1lbnRhdGlvbiwgdXNlIGF0b21pY29wcy5oIGluc3RlYWQuCi0KLSNp
Zm5kZWYgR09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRFUk5BTFNfQVJNNjRfR0NDX0hfCi0j
ZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX0FSTTY0X0dDQ19IXwot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50
ZXJuYWwgewotCi1pbmxpbmUgdm9pZCBNZW1vcnlCYXJyaWVyKCkgewotICBfX2FzbV9fIF9fdm9s
YXRpbGVfXyAoImRtYiBpc2giIDo6OiAibWVtb3J5Iik7ICAvLyBOT0xJTlQKLX0KLQotLy8gTm9C
YXJyaWVyIHZlcnNpb25zIG9mIHRoZSBvcGVyYXRpb24gaW5jbHVkZSAibWVtb3J5IiBpbiB0aGUg
Y2xvYmJlciBsaXN0LgotLy8gVGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIGRpcmVjdCB1c2FnZSBv
ZiB0aGUgTm9CYXJyaWVyIHZlcnNpb25zIG9mIHRoZQotLy8gb3BlcmF0aW9ucy4gSG93ZXZlciB0
aGlzIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcyB3aGVuIHRoZXkgYXJlIHVzZWQgYXMKLS8v
IHBhcnQgb2YgdGhlIEFjcXVpcmUgb3IgUmVsZWFzZSB2ZXJzaW9ucywgdG8gZW5zdXJlIHRoYXQg
bm90aGluZyBmcm9tIG91dHNpZGUKLS8vIHRoZSBjYWxsIGlzIHJlb3JkZXJlZCBiZXR3ZWVuIHRo
ZSBvcGVyYXRpb24gYW5kIHRoZSBtZW1vcnkgYmFycmllci4gVGhpcyBkb2VzCi0vLyBub3QgY2hh
bmdlIHRoZSBjb2RlIGdlbmVyYXRlZCwgc28gaGFzIG5vIG9yIG1pbmltYWwgaW1wYWN0IG9uIHRo
ZQotLy8gTm9CYXJyaWVyIG9wZXJhdGlvbnMuCi0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJf
Q29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRv
bWljMzIgcHJldjsKLSAgaW50MzJfdCB0ZW1wOwotCi0gIF9fYXNtX18gX192b2xhdGlsZV9fICgg
IC8vIE5PTElOVAotICAgICIwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
XHQiCi0gICAgImxkeHIgJXdbcHJldl0sICVbcHRyXSAgICAgICAgICAgICAgICAgXG5cdCIgIC8v
IExvYWQgdGhlIHByZXZpb3VzIHZhbHVlLgotICAgICJjbXAgJXdbcHJldl0sICV3W29sZF92YWx1
ZV0gICAgICAgICAgIFxuXHQiCi0gICAgImJuZSAxZiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG5cdCIKLSAgICAic3R4ciAld1t0ZW1wXSwgJXdbbmV3X3ZhbHVlXSwgJVtwdHJdICBc
blx0IiAgLy8gVHJ5IHRvIHN0b3JlIHRoZSBuZXcgdmFsdWUuCi0gICAgImNibnogJXdbdGVtcF0s
IDBiICAgICAgICAgICAgICAgICAgICAgXG5cdCIgIC8vIFJldHJ5IGlmIGl0IGRpZCBub3Qgd29y
ay4KLSAgICAiMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAg
IDogW3ByZXZdIj0mciIgKHByZXYpLAotICAgICAgW3RlbXBdIj0mciIgKHRlbXApLAotICAgICAg
W3B0cl0iK1EiICgqcHRyKQotICAgIDogW29sZF92YWx1ZV0iSUpyIiAob2xkX3ZhbHVlKSwKLSAg
ICAgIFtuZXdfdmFsdWVdInIiIChuZXdfdmFsdWUpCi0gICAgOiAiY2MiLCAibWVtb3J5IgotICAp
OyAgLy8gTk9MSU5UCi0KLSAgcmV0dXJuIHByZXY7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0Jh
cnJpZXJfQXRvbWljRXhjaGFuZ2Uodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIEF0
b21pYzMyIHJlc3VsdDsKLSAgaW50MzJfdCB0ZW1wOwotCi0gIF9fYXNtX18gX192b2xhdGlsZV9f
ICggIC8vIE5PTElOVAotICAgICIwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuXHQiCi0gICAgImxkeHIgJXdbcmVzdWx0XSwgJVtwdHJdICAgICAgICAgICAgICAgXG5cdCIg
IC8vIExvYWQgdGhlIHByZXZpb3VzIHZhbHVlLgotICAgICJzdHhyICV3W3RlbXBdLCAld1tuZXdf
dmFsdWVdLCAlW3B0cl0gIFxuXHQiICAvLyBUcnkgdG8gc3RvcmUgdGhlIG5ldyB2YWx1ZS4KLSAg
ICAiY2JueiAld1t0ZW1wXSwgMGIgICAgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gUmV0cnkg
aWYgaXQgZGlkIG5vdCB3b3JrLgotICAgIDogW3Jlc3VsdF0iPSZyIiAocmVzdWx0KSwKLSAgICAg
IFt0ZW1wXSI9JnIiICh0ZW1wKSwKLSAgICAgIFtwdHJdIitRIiAoKnB0cikKLSAgICA6IFtuZXdf
dmFsdWVdInIiIChuZXdfdmFsdWUpCi0gICAgOiAibWVtb3J5IgotICApOyAgLy8gTk9MSU5UCi0K
LSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIEF0b21pYzMyIE5vQmFycmllcl9BdG9taWNJ
bmNyZW1lbnQodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIGluY3JlbWVudCkgewotICBBdG9taWMzMiByZXN1
bHQ7Ci0gIGludDMyX3QgdGVtcDsKLQotICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAvLyBOT0xJ
TlQKLSAgICAiMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0Igot
ICAgICJsZHhyICV3W3Jlc3VsdF0sICVbcHRyXSAgICAgICAgICAgICAgICAgIFxuXHQiICAvLyBM
b2FkIHRoZSBwcmV2aW91cyB2YWx1ZS4KLSAgICAiYWRkICV3W3Jlc3VsdF0sICV3W3Jlc3VsdF0s
ICV3W2luY3JlbWVudF1cblx0IgotICAgICJzdHhyICV3W3RlbXBdLCAld1tyZXN1bHRdLCAlW3B0
cl0gICAgICAgIFxuXHQiICAvLyBUcnkgdG8gc3RvcmUgdGhlIHJlc3VsdC4KLSAgICAiY2JueiAl
d1t0ZW1wXSwgMGIgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gUmV0cnkgb24gZmFp
bHVyZS4KLSAgICA6IFtyZXN1bHRdIj0mciIgKHJlc3VsdCksCi0gICAgICBbdGVtcF0iPSZyIiAo
dGVtcCksCi0gICAgICBbcHRyXSIrUSIgKCpwdHIpCi0gICAgOiBbaW5jcmVtZW50XSJJSnIiIChp
bmNyZW1lbnQpCi0gICAgOiAibWVtb3J5IgotICApOyAgLy8gTk9MSU5UCi0KLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotaW5saW5lIEF0b21pYzMyIEJhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0
aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljMzIgaW5jcmVtZW50KSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgQXRvbWljMzIg
cmVzdWx0ID0gTm9CYXJyaWVyX0F0b21pY0luY3JlbWVudChwdHIsIGluY3JlbWVudCk7Ci0gIE1l
bW9yeUJhcnJpZXIoKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgQXRvbWljMzIg
QWNxdWlyZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0g
IEF0b21pYzMyIHByZXYgPSBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAocHRyLCBvbGRfdmFsdWUs
IG5ld192YWx1ZSk7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLQotICByZXR1cm4gcHJldjsKLX0KLQot
aW5saW5lIEF0b21pYzMyIFJlbGVhc2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIq
IHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG9s
ZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMy
IG5ld192YWx1ZSkgewotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIEF0b21pYzMyIHByZXYgPSBOb0Jh
cnJpZXJfQ29tcGFyZUFuZFN3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk7Ci0KLSAgcmV0
dXJuIHByZXY7Ci19Ci0KLWlubGluZSB2b2lkIE5vQmFycmllcl9TdG9yZSh2b2xhdGlsZSBBdG9t
aWMzMiogcHRyLCBBdG9taWMzMiB2YWx1ZSkgewotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlubGlu
ZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFs
dWUpIHsKLSAgKnB0ciA9IHZhbHVlOwotICBNZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2
b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUp
IHsKLSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgLy8gTk9MSU5UCi0gICAgInN0bHIgJXdbdmFs
dWVdLCAlW3B0cl0gIFxuXHQiCi0gICAgOiBbcHRyXSI9USIgKCpwdHIpCi0gICAgOiBbdmFsdWVd
InIiICh2YWx1ZSkKLSAgICA6ICJtZW1vcnkiCi0gICk7ICAvLyBOT0xJTlQKLX0KLQotaW5saW5l
IEF0b21pYzMyIE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpIHsK
LSAgcmV0dXJuICpwdHI7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBBY3F1aXJlX0xvYWQodm9sYXRp
bGUgY29uc3QgQXRvbWljMzIqIHB0cikgewotICBBdG9taWMzMiB2YWx1ZTsKLQotICBfX2FzbV9f
IF9fdm9sYXRpbGVfXyAoICAvLyBOT0xJTlQKLSAgICAibGRhciAld1t2YWx1ZV0sICVbcHRyXSAg
XG5cdCIKLSAgICA6IFt2YWx1ZV0iPXIiICh2YWx1ZSkKLSAgICA6IFtwdHJdIlEiICgqcHRyKQot
ICAgIDogIm1lbW9yeSIKLSAgKTsgIC8vIE5PTElOVAotCi0gIHJldHVybiB2YWx1ZTsKLX0KLQot
aW5saW5lIEF0b21pYzMyIFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRy
KSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgcmV0dXJuICpwdHI7Ci19Ci0KLS8vIDY0LWJpdCB2
ZXJzaW9ucyBvZiB0aGUgb3BlcmF0aW9ucy4KLS8vIFNlZSB0aGUgMzItYml0IHZlcnNpb25zIGZv
ciBjb21tZW50cy4KLQotaW5saW5lIEF0b21pYzY0IE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2
b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBdG9taWM2NCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewotICBBdG9taWM2NCBwcmV2OwotICBp
bnQzMl90IHRlbXA7Ci0KLSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgLy8gTk9MSU5UCi0gICAg
IjA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAibGR4ciAl
W3ByZXZdLCAlW3B0cl0gICAgICAgICAgICAgICAgICBcblx0IgotICAgICJjbXAgJVtwcmV2XSwg
JVtvbGRfdmFsdWVdICAgICAgICAgICAgIFxuXHQiCi0gICAgImJuZSAxZiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAic3R4ciAld1t0ZW1wXSwgJVtuZXdfdmFsdWVd
LCAlW3B0cl0gICBcblx0IgotICAgICJjYm56ICV3W3RlbXBdLCAwYiAgICAgICAgICAgICAgICAg
ICAgIFxuXHQiCi0gICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5c
dCIKLSAgICA6IFtwcmV2XSI9JnIiIChwcmV2KSwKLSAgICAgIFt0ZW1wXSI9JnIiICh0ZW1wKSwK
LSAgICAgIFtwdHJdIitRIiAoKnB0cikKLSAgICA6IFtvbGRfdmFsdWVdIklKciIgKG9sZF92YWx1
ZSksCi0gICAgICBbbmV3X3ZhbHVlXSJyIiAobmV3X3ZhbHVlKQotICAgIDogImNjIiwgIm1lbW9y
eSIKLSAgKTsgIC8vIE5PTElOVAotCi0gIHJldHVybiBwcmV2OwotfQotCi1pbmxpbmUgQXRvbWlj
NjQgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkg
ewotICBBdG9taWM2NCByZXN1bHQ7Ci0gIGludDMyX3QgdGVtcDsKLQotICBfX2FzbV9fIF9fdm9s
YXRpbGVfXyAoICAvLyBOT0xJTlQKLSAgICAiMDogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcblx0IgotICAgICJsZHhyICVbcmVzdWx0XSwgJVtwdHJdICAgICAgICAgICAgICAg
IFxuXHQiCi0gICAgInN0eHIgJXdbdGVtcF0sICVbbmV3X3ZhbHVlXSwgJVtwdHJdICAgXG5cdCIK
LSAgICAiY2JueiAld1t0ZW1wXSwgMGIgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgIDog
W3Jlc3VsdF0iPSZyIiAocmVzdWx0KSwKLSAgICAgIFt0ZW1wXSI9JnIiICh0ZW1wKSwKLSAgICAg
IFtwdHJdIitRIiAoKnB0cikKLSAgICA6IFtuZXdfdmFsdWVdInIiIChuZXdfdmFsdWUpCi0gICAg
OiAibWVtb3J5IgotICApOyAgLy8gTk9MSU5UCi0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5s
aW5lIEF0b21pYzY0IE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljNjQq
IHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0
IGluY3JlbWVudCkgewotICBBdG9taWM2NCByZXN1bHQ7Ci0gIGludDMyX3QgdGVtcDsKLQotICBf
X2FzbV9fIF9fdm9sYXRpbGVfXyAoICAvLyBOT0xJTlQKLSAgICAiMDogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAibGR4ciAlW3Jlc3VsdF0sICVbcHRyXSAg
ICAgICAgICAgICAgICAgXG5cdCIKLSAgICAiYWRkICVbcmVzdWx0XSwgJVtyZXN1bHRdLCAlW2lu
Y3JlbWVudF0gXG5cdCIKLSAgICAic3R4ciAld1t0ZW1wXSwgJVtyZXN1bHRdLCAlW3B0cl0gICAg
ICAgXG5cdCIKLSAgICAiY2JueiAld1t0ZW1wXSwgMGIgICAgICAgICAgICAgICAgICAgICAgXG5c
dCIKLSAgICA6IFtyZXN1bHRdIj0mciIgKHJlc3VsdCksCi0gICAgICBbdGVtcF0iPSZyIiAodGVt
cCksCi0gICAgICBbcHRyXSIrUSIgKCpwdHIpCi0gICAgOiBbaW5jcmVtZW50XSJJSnIiIChpbmNy
ZW1lbnQpCi0gICAgOiAibWVtb3J5IgotICApOyAgLy8gTk9MSU5UCi0KLSAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotaW5saW5lIEF0b21pYzY0IEJhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxl
IEF0b21pYzY0KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXRvbWljNjQgaW5jcmVtZW50KSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgQXRvbWljNjQgcmVz
dWx0ID0gTm9CYXJyaWVyX0F0b21pY0luY3JlbWVudChwdHIsIGluY3JlbWVudCk7Ci0gIE1lbW9y
eUJhcnJpZXIoKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgQXRvbWljNjQgQWNx
dWlyZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIEF0
b21pYzY0IHByZXYgPSBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAocHRyLCBvbGRfdmFsdWUsIG5l
d192YWx1ZSk7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLQotICByZXR1cm4gcHJldjsKLX0KLQotaW5s
aW5lIEF0b21pYzY0IFJlbGVhc2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5l
d192YWx1ZSkgewotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIEF0b21pYzY0IHByZXYgPSBOb0JhcnJp
ZXJfQ29tcGFyZUFuZFN3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk7Ci0KLSAgcmV0dXJu
IHByZXY7Ci19Ci0KLWlubGluZSB2b2lkIE5vQmFycmllcl9TdG9yZSh2b2xhdGlsZSBBdG9taWM2
NCogcHRyLCBBdG9taWM2NCB2YWx1ZSkgewotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSB2
b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUp
IHsKLSAgKnB0ciA9IHZhbHVlOwotICBNZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lk
IFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpIHsK
LSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgLy8gTk9MSU5UCi0gICAgInN0bHIgJXhbdmFsdWVd
LCAlW3B0cl0gIFxuXHQiCi0gICAgOiBbcHRyXSI9USIgKCpwdHIpCi0gICAgOiBbdmFsdWVdInIi
ICh2YWx1ZSkKLSAgICA6ICJtZW1vcnkiCi0gICk7ICAvLyBOT0xJTlQKLX0KLQotaW5saW5lIEF0
b21pYzY0IE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIpIHsKLSAg
cmV0dXJuICpwdHI7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBBY3F1aXJlX0xvYWQodm9sYXRpbGUg
Y29uc3QgQXRvbWljNjQqIHB0cikgewotICBBdG9taWM2NCB2YWx1ZTsKLQotICBfX2FzbV9fIF9f
dm9sYXRpbGVfXyAoICAvLyBOT0xJTlQKLSAgICAibGRhciAleFt2YWx1ZV0sICVbcHRyXSAgXG5c
dCIKLSAgICA6IFt2YWx1ZV0iPXIiICh2YWx1ZSkKLSAgICA6IFtwdHJdIlEiICgqcHRyKQotICAg
IDogIm1lbW9yeSIKLSAgKTsgIC8vIE5PTElOVAotCi0gIHJldHVybiB2YWx1ZTsKLX0KLQotaW5s
aW5lIEF0b21pYzY0IFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2NCogcHRyKSB7
Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgcmV0dXJuICpwdHI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRFUk5BTFNfQVJN
NjRfR0NDX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3Bz
X2ludGVybmFsc19hcm1fZ2NjLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3Bz
X2ludGVybmFsc19hcm1fZ2NjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZTcy
N2IwYmM1NmJiNTcyYWNmMDcwYmMxNGZlZTBlYTUzZWY0ZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21p
Y29wc19pbnRlcm5hbHNfYXJtX2djYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlzIGZpbGUgaXMgYW4g
aW50ZXJuYWwgYXRvbWljIGltcGxlbWVudGF0aW9uLCB1c2UgYXRvbWljb3BzLmggaW5zdGVhZC4K
LS8vCi0vLyBMaW51eEtlcm5lbENtcHhjaGcgYW5kIEJhcnJpZXJfQXRvbWljSW5jcmVtZW50IGFy
ZSBmcm9tIEdvb2dsZSBHZWFycy4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BT
X0lOVEVSTkFMU19BUk1fR0NDX0hfCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNf
SU5URVJOQUxTX0FSTV9HQ0NfSF8KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJv
dG9idWYgewotbmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gMHhmZmZmMGZjMCBpcyB0aGUgaGFy
ZCBjb2RlZCBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gcHJvdmlkZWQgYnkKLS8vIHRoZSBrZXJuZWwg
d2hpY2ggaW1wbGVtZW50cyBhbiBhdG9taWMgY29tcGFyZS1leGNoYW5nZS4gT24gb2xkZXIKLS8v
IEFSTSBhcmNoaXRlY3R1cmUgcmV2aXNpb25zIChwcmUtdjYpIHRoaXMgbWF5IGJlIGltcGxlbWVu
dGVkIHVzaW5nCi0vLyBhIHN5c2NhbGwuIFRoaXMgYWRkcmVzcyBpcyBzdGFibGUsIGFuZCBpbiBh
Y3RpdmUgdXNlIChoYXJkIGNvZGVkKQotLy8gYnkgYXQgbGVhc3QgZ2xpYmMtMi43IGFuZCB0aGUg
QW5kcm9pZCBDIGxpYnJhcnkuCi10eXBlZGVmIEF0b21pYzMyICgqTGludXhLZXJuZWxDbXB4Y2hn
RnVuYykoQXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBBdG9taWMzMiogcHRyKTsKLUxpbnV4S2VybmVs
Q21weGNoZ0Z1bmMgcExpbnV4S2VybmVsQ21weGNoZyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgPQot
ICAgIChMaW51eEtlcm5lbENtcHhjaGdGdW5jKSAweGZmZmYwZmMwOwotCi10eXBlZGVmIHZvaWQg
KCpMaW51eEtlcm5lbE1lbW9yeUJhcnJpZXJGdW5jKSh2b2lkKTsKLUxpbnV4S2VybmVsTWVtb3J5
QmFycmllckZ1bmMgcExpbnV4S2VybmVsTWVtb3J5QmFycmllciBfX2F0dHJpYnV0ZV9fKCh3ZWFr
KSkgPQotICAgIChMaW51eEtlcm5lbE1lbW9yeUJhcnJpZXJGdW5jKSAweGZmZmYwZmEwOwotCi0K
LWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWlj
MzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWlj
MzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRvbWljMzIgcHJldl92YWx1ZSA9ICpwdHI7Ci0gIGRv
IHsKLSAgICBpZiAoIXBMaW51eEtlcm5lbENtcHhjaGcob2xkX3ZhbHVlLCBuZXdfdmFsdWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8QXRvbWljMzIqPihwdHIpKSkg
ewotICAgICAgcmV0dXJuIG9sZF92YWx1ZTsKLSAgICB9Ci0gICAgcHJldl92YWx1ZSA9ICpwdHI7
Ci0gIH0gd2hpbGUgKHByZXZfdmFsdWUgPT0gb2xkX3ZhbHVlKTsKLSAgcmV0dXJuIHByZXZfdmFs
dWU7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljRXhjaGFuZ2Uodm9sYXRp
bGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIEF0b21pYzMyIG9sZF92YWx1ZTsKLSAgZG8gewot
ICAgIG9sZF92YWx1ZSA9ICpwdHI7Ci0gIH0gd2hpbGUgKHBMaW51eEtlcm5lbENtcHhjaGcob2xk
X3ZhbHVlLCBuZXdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rf
Y2FzdDxBdG9taWMzMio+KHB0cikpKTsKLSAgcmV0dXJuIG9sZF92YWx1ZTsKLX0KLQotaW5saW5l
IEF0b21pYzMyIE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljMzIqIHB0
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIGlu
Y3JlbWVudCkgewotICByZXR1cm4gQmFycmllcl9BdG9taWNJbmNyZW1lbnQocHRyLCBpbmNyZW1l
bnQpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRp
bGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWMzMiBpbmNyZW1lbnQpIHsKLSAgZm9yICg7OykgewotICAgIC8vIEF0b21pYyBleGNo
YW5nZSB0aGUgb2xkIHZhbHVlIHdpdGggYW4gaW5jcmVtZW50ZWQgb25lLgotICAgIEF0b21pYzMy
IG9sZF92YWx1ZSA9ICpwdHI7Ci0gICAgQXRvbWljMzIgbmV3X3ZhbHVlID0gb2xkX3ZhbHVlICsg
aW5jcmVtZW50OwotICAgIGlmIChwTGludXhLZXJuZWxDbXB4Y2hnKG9sZF92YWx1ZSwgbmV3X3Zh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8QXRvbWljMzIqPihw
dHIpKSA9PSAwKSB7Ci0gICAgICAvLyBUaGUgZXhjaGFuZ2UgdG9vayBwbGFjZSBhcyBleHBlY3Rl
ZC4KLSAgICAgIHJldHVybiBuZXdfdmFsdWU7Ci0gICAgfQotICAgIC8vIE90aGVyd2lzZSwgKnB0
ciBjaGFuZ2VkIG1pZC1sb29wIGFuZCB3ZSBuZWVkIHRvIHJldHJ5LgotICB9Ci19Ci0KLWlubGlu
ZSBBdG9taWMzMiBBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBuZXdf
dmFsdWUpIHsKLSAgcmV0dXJuIE5vQmFycmllcl9Db21wYXJlQW5kU3dhcChwdHIsIG9sZF92YWx1
ZSwgbmV3X3ZhbHVlKTsKLX0KLQotaW5saW5lIEF0b21pYzMyIFJlbGVhc2VfQ29tcGFyZUFuZFN3
YXAodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEF0b21pYzMyIG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1ZSkgewotICByZXR1cm4gTm9CYXJyaWVyX0Nv
bXBhcmVBbmRTd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpOwotfQotCi1pbmxpbmUgdm9p
ZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUp
IHsKLSAgKnB0ciA9IHZhbHVlOwotfQotCi1pbmxpbmUgdm9pZCBNZW1vcnlCYXJyaWVyKCkgewot
ICBwTGludXhLZXJuZWxNZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVf
U3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgKnB0ciA9
IHZhbHVlOwotICBNZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3Rv
cmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgTWVtb3J5QmFy
cmllcigpOwotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJf
TG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRyKSB7Ci0gIHJldHVybiAqcHRyOwotfQot
Ci1pbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBw
dHIpIHsKLSAgQXRvbWljMzIgdmFsdWUgPSAqcHRyOwotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIHJl
dHVybiB2YWx1ZTsKLX0KLQotaW5saW5lIEF0b21pYzMyIFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBj
b25zdCBBdG9taWMzMiogcHRyKSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgcmV0dXJuICpwdHI7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVm
Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0FU
T01JQ09QU19JTlRFUk5BTFNfQVJNX0dDQ19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfYXJtX3FueC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfYXJtX3FueC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxN2RmYWE1MTgyMzllNDI1M2NmZTY5NTM4YzFlNzBmOGZlYzE4ZmFkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX2FybV9xbnguaAorKysgL2Rldi9udWxs
CkBAIC0xLDE0NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wt
YnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ly8gVGhpcyBmaWxlIGlzIGFuIGludGVybmFsIGF0b21pYyBpbXBsZW1lbnRhdGlvbiwgdXNlIGF0
b21pY29wcy5oIGluc3RlYWQuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19J
TlRFUk5BTFNfQVJNX1FOWF9IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BTX0lO
VEVSTkFMU19BUk1fUU5YX0hfCi0KLS8vIEZvciBfc21wX2NtcHhjaGcoKQotI2luY2x1ZGUgPHB0
aHJlYWQuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFt
ZXNwYWNlIGludGVybmFsIHsKLQotaW5saW5lIEF0b21pYzMyIFFOWENtcHhjaGcoQXRvbWljMzIg
b2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgQXRvbWljMzIqIHB0cikgewot
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljMzI+KAotICAgICAgX3NtcF9jbXB4Y2hnKCh2b2xh
dGlsZSB1bnNpZ25lZCAqKXB0ciwKLSAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpb2xkX3Zh
bHVlLAotICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCluZXdfdmFsdWUpKTsKLX0KLQotCi1p
bmxpbmUgQXRvbWljMzIgTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzMy
KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMy
IG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRv
bWljMzIgbmV3X3ZhbHVlKSB7Ci0gIEF0b21pYzMyIHByZXZfdmFsdWUgPSAqcHRyOwotICBkbyB7
Ci0gICAgaWYgKCFRTlhDbXB4Y2hnKG9sZF92YWx1ZSwgbmV3X3ZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICBjb25zdF9jYXN0PEF0b21pYzMyKj4ocHRyKSkpIHsKLSAgICAgIHJldHVybiBvbGRf
dmFsdWU7Ci0gICAgfQotICAgIHByZXZfdmFsdWUgPSAqcHRyOwotICB9IHdoaWxlIChwcmV2X3Zh
bHVlID09IG9sZF92YWx1ZSk7Ci0gIHJldHVybiBwcmV2X3ZhbHVlOwotfQotCi1pbmxpbmUgQXRv
bWljMzIgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1
ZSkgewotICBBdG9taWMzMiBvbGRfdmFsdWU7Ci0gIGRvIHsKLSAgICBvbGRfdmFsdWUgPSAqcHRy
OwotICB9IHdoaWxlIChRTlhDbXB4Y2hnKG9sZF92YWx1ZSwgbmV3X3ZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8QXRvbWljMzIqPihwdHIpKSk7Ci0gIHJldHVybiBvbGRf
dmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZv
bGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpIHsKLSAgcmV0dXJuIEJhcnJpZXJfQXRvbWljSW5j
cmVtZW50KHB0ciwgaW5jcmVtZW50KTsKLX0KLQotaW5saW5lIEF0b21pYzMyIEJhcnJpZXJfQXRv
bWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgaW5jcmVtZW50KSB7Ci0gIGZvciAoOzspIHsK
LSAgICAvLyBBdG9taWMgZXhjaGFuZ2UgdGhlIG9sZCB2YWx1ZSB3aXRoIGFuIGluY3JlbWVudGVk
IG9uZS4KLSAgICBBdG9taWMzMiBvbGRfdmFsdWUgPSAqcHRyOwotICAgIEF0b21pYzMyIG5ld192
YWx1ZSA9IG9sZF92YWx1ZSArIGluY3JlbWVudDsKLSAgICBpZiAoUU5YQ21weGNoZyhvbGRfdmFs
dWUsIG5ld192YWx1ZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PEF0b21pYzMyKj4o
cHRyKSkgPT0gMCkgewotICAgICAgLy8gVGhlIGV4Y2hhbmdlIHRvb2sgcGxhY2UgYXMgZXhwZWN0
ZWQuCi0gICAgICByZXR1cm4gbmV3X3ZhbHVlOwotICAgIH0KLSAgICAvLyBPdGhlcndpc2UsICpw
dHIgY2hhbmdlZCBtaWQtbG9vcCBhbmQgd2UgbmVlZCB0byByZXRyeS4KLSAgfQotfQotCi1pbmxp
bmUgQXRvbWljMzIgQWNxdWlyZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiogcHRy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3Zh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3
X3ZhbHVlKSB7Ci0gIHJldHVybiBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAocHRyLCBvbGRfdmFs
dWUsIG5ld192YWx1ZSk7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBSZWxlYXNlX0NvbXBhcmVBbmRT
d2FwKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgcmV0dXJuIE5vQmFycmllcl9D
b21wYXJlQW5kU3dhcChwdHIsIG9sZF92YWx1ZSwgbmV3X3ZhbHVlKTsKLX0KLQotaW5saW5lIHZv
aWQgTm9CYXJyaWVyX1N0b3JlKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsIEF0b21pYzMyIHZhbHVl
KSB7Ci0gICpwdHIgPSB2YWx1ZTsKLX0KLQotaW5saW5lIHZvaWQgTWVtb3J5QmFycmllcigpIHsK
LSAgX19zeW5jX3N5bmNocm9uaXplKCk7Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUo
dm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgKnB0ciA9IHZhbHVl
OwotICBNZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9s
YXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgTWVtb3J5QmFycmllcigp
OwotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfTG9hZCh2
b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRyKSB7Ci0gIHJldHVybiAqcHRyOwotfQotCi1pbmxp
bmUgQXRvbWljMzIgQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpIHsK
LSAgQXRvbWljMzIgdmFsdWUgPSAqcHRyOwotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIHJldHVybiB2
YWx1ZTsKLX0KLQotaW5saW5lIEF0b21pYzMyIFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBB
dG9taWMzMiogcHRyKSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgcmV0dXJuICpwdHI7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAv
LyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0FUT01JQ09Q
U19JTlRFUk5BTFNfQVJNX1FOWF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2F0b21pY29wc19pbnRlcm5hbHNfYXRvbWljd29yZF9jb21wYXQuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX2F0b21pY3dvcmRfY29tcGF0LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMTk4ZmY1Y2MyMzY2MWJhNDkyMTQwYmUzZjdk
MjJhYTBiMDlmMmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfYXRvbWljd29y
ZF9jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVGhpcyBmaWxlIGlzIGFuIGludGVybmFsIGF0b21p
YyBpbXBsZW1lbnRhdGlvbiwgdXNlIGF0b21pY29wcy5oIGluc3RlYWQuCi0KLSNpZm5kZWYgR09P
R0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRFUk5BTFNfQVRPTUlDV09SRF9DT01QQVRfSF8KLSNk
ZWZpbmUgR09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRFUk5BTFNfQVRPTUlDV09SRF9DT01Q
QVRfSF8KLQotLy8gQXRvbWljV29yZCBpcyBhIHN5bm9ueW0gZm9yIGludHB0cl90LCBhbmQgQXRv
bWljMzIgaXMgYSBzeW5vbnltIGZvciBpbnQzMiwKLS8vIHdoaWNoIGluIHR1cm4gbWVhbnMgaW50
LiBPbiBzb21lIExQMzIgcGxhdGZvcm1zLCBpbnRwdHJfdCBpcyBhbiBpbnQsIGJ1dAotLy8gb24g
b3RoZXJzLCBpdCdzIGEgbG9uZy4gV2hlbiBBdG9taWNXb3JkIGFuZCBBdG9taWMzMiBhcmUgYmFz
ZWQgb24gZGlmZmVyZW50Ci0vLyBmdW5kYW1lbnRhbCB0eXBlcywgdGhlaXIgcG9pbnRlcnMgYXJl
IGluY29tcGF0aWJsZS4KLS8vCi0vLyBUaGlzIGZpbGUgZGVmaW5lcyBmdW5jdGlvbiBvdmVybG9h
ZHMgdG8gYWxsb3cgYm90aCBBdG9taWNXb3JkIGFuZCBBdG9taWMzMgotLy8gZGF0YSB0byBiZSB1
c2VkIHdpdGggdGhpcyBpbnRlcmZhY2UuCi0vLwotLy8gT24gTFA2NCBwbGF0Zm9ybXMsIEF0b21p
Y1dvcmQgYW5kIEF0b21pYzY0IGFyZSBib3RoIGFsd2F5cyBsb25nLAotLy8gc28gdGhpcyBwcm9i
bGVtIGRvZXNuJ3Qgb2NjdXIuCi0KLSNpZiAhZGVmaW5lZChHT09HTEVfUFJPVE9CVUZfQVJDSF82
NF9CSVQpCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSBpbnRlcm5hbCB7Ci0KLWlubGluZSBBdG9taWNXb3JkIE5vQmFycmllcl9Db21wYXJlQW5k
U3dhcCh2b2xhdGlsZSBBdG9taWNXb3JkKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXRvbWljV29yZCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljV29yZCBuZXdfdmFsdWUpIHsKLSAgcmV0
dXJuIE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCgKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9s
YXRpbGUgQXRvbWljMzIqPihwdHIpLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk7Ci19Ci0KLWlubGlu
ZSBBdG9taWNXb3JkIE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSh2b2xhdGlsZSBBdG9taWNXb3Jk
KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWlj
V29yZCBuZXdfdmFsdWUpIHsKLSAgcmV0dXJuIE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSgKLSAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgQXRvbWljMzIqPihwdHIpLCBuZXdfdmFsdWUp
OwotfQotCi1pbmxpbmUgQXRvbWljV29yZCBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0
aWxlIEF0b21pY1dvcmQqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXRvbWljV29yZCBpbmNyZW1lbnQpIHsKLSAgcmV0dXJuIE5vQmFycmllcl9BdG9t
aWNJbmNyZW1lbnQoCi0gICAgICByZWludGVycHJldF9jYXN0PHZvbGF0aWxlIEF0b21pYzMyKj4o
cHRyKSwgaW5jcmVtZW50KTsKLX0KLQotaW5saW5lIEF0b21pY1dvcmQgQmFycmllcl9BdG9taWNJ
bmNyZW1lbnQodm9sYXRpbGUgQXRvbWljV29yZCogcHRyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXRvbWljV29yZCBpbmNyZW1lbnQpIHsKLSAgcmV0dXJuIEJh
cnJpZXJfQXRvbWljSW5jcmVtZW50KAotICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBB
dG9taWMzMio+KHB0ciksIGluY3JlbWVudCk7Ci19Ci0KLWlubGluZSBBdG9taWNXb3JkIEFjcXVp
cmVfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljV29yZCogcHRyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNXb3JkIG9sZF92YWx1ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljV29yZCBuZXdfdmFsdWUp
IHsKLSAgcmV0dXJuIEFjcXVpcmVfQ29tcGFyZUFuZFN3YXAoCi0gICAgICByZWludGVycHJldF9j
YXN0PHZvbGF0aWxlIEF0b21pYzMyKj4ocHRyKSwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpOwotfQot
Ci1pbmxpbmUgQXRvbWljV29yZCBSZWxlYXNlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21p
Y1dvcmQqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRv
bWljV29yZCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEF0b21pY1dvcmQgbmV3X3ZhbHVlKSB7Ci0gIHJldHVybiBSZWxlYXNlX0NvbXBhcmVBbmRT
d2FwKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBBdG9taWMzMio+KHB0ciksIG9s
ZF92YWx1ZSwgbmV3X3ZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgTm9CYXJyaWVyX1N0b3JlKHZv
bGF0aWxlIEF0b21pY1dvcmQgKnB0ciwgQXRvbWljV29yZCB2YWx1ZSkgewotICBOb0JhcnJpZXJf
U3RvcmUocmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBBdG9taWMzMio+KHB0ciksIHZhbHVlKTsK
LX0KLQotaW5saW5lIHZvaWQgQWNxdWlyZV9TdG9yZSh2b2xhdGlsZSBBdG9taWNXb3JkKiBwdHIs
IEF0b21pY1dvcmQgdmFsdWUpIHsKLSAgcmV0dXJuIEFjcXVpcmVfU3RvcmUocmVpbnRlcnByZXRf
Y2FzdDx2b2xhdGlsZSBBdG9taWMzMio+KHB0ciksIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQg
UmVsZWFzZV9TdG9yZSh2b2xhdGlsZSBBdG9taWNXb3JkKiBwdHIsIEF0b21pY1dvcmQgdmFsdWUp
IHsKLSAgcmV0dXJuIFJlbGVhc2VfU3RvcmUocmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBBdG9t
aWMzMio+KHB0ciksIHZhbHVlKTsKLX0KLQotaW5saW5lIEF0b21pY1dvcmQgTm9CYXJyaWVyX0xv
YWQodm9sYXRpbGUgY29uc3QgQXRvbWljV29yZCAqcHRyKSB7Ci0gIHJldHVybiBOb0JhcnJpZXJf
TG9hZChyZWludGVycHJldF9jYXN0PHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKj4ocHRyKSk7Ci19
Ci0KLWlubGluZSBBdG9taWNXb3JkIEFjcXVpcmVfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWNX
b3JkKiBwdHIpIHsKLSAgcmV0dXJuIEFjcXVpcmVfTG9hZChyZWludGVycHJldF9jYXN0PHZvbGF0
aWxlIGNvbnN0IEF0b21pYzMyKj4ocHRyKSk7Ci19Ci0KLWlubGluZSBBdG9taWNXb3JkIFJlbGVh
c2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWNXb3JkKiBwdHIpIHsKLSAgcmV0dXJuIFJlbGVh
c2VfTG9hZChyZWludGVycHJldF9jYXN0PHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKj4ocHRyKSk7
Ci19Ci0KLX0gICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gICAvLyBuYW1lc3BhY2UgcHJvdG9i
dWYKLX0gICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gIWRlZmluZWQoR09PR0xF
X1BST1RPQlVGX0FSQ0hfNjRfQklUKQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9BVE9N
SUNPUFNfSU5URVJOQUxTX0FUT01JQ1dPUkRfQ09NUEFUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19nZW5lcmljX2djYy5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfZ2VuZXJpY19nY2MuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxMTZhNjBlZTc5NmIzMzAwYmI0MTJlY2Jl
NjEzYWI5YjMwNzc3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19nZW5lcmlj
X2djYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEz
IFJlZCBIYXQgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBSZWQgSGF0IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFRoaXMgZmlsZSBpcyBhbiBpbnRlcm5hbCBh
dG9taWMgaW1wbGVtZW50YXRpb24sIHVzZSBhdG9taWNvcHMuaCBpbnN0ZWFkLgotCi0jaWZuZGVm
IEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX0dFTkVSSUNfR0NDX0hfCi0jZGVm
aW5lIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX0dFTkVSSUNfR0NDX0hfCi0K
LW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRl
cm5hbCB7Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAodm9sYXRp
bGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgX19hdG9taWNfY29tcGFyZV9leGNoYW5n
ZV9uKHB0ciwgJm9sZF92YWx1ZSwgbmV3X3ZhbHVlLCB0cnVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19BVE9NSUNfUkVMQVhFRCwgX19BVE9NSUNfUkVMQVhFRCk7Ci0gIHJldHVy
biBvbGRfdmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljRXhjaGFu
Z2Uodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIHJldHVybiBfX2F0b21pY19leGNo
YW5nZV9uKHB0ciwgbmV3X3ZhbHVlLCBfX0FUT01JQ19SRUxBWEVEKTsKLX0KLQotaW5saW5lIEF0
b21pYzMyIE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIGluY3Jl
bWVudCkgewotICByZXR1cm4gX19hdG9taWNfYWRkX2ZldGNoKHB0ciwgaW5jcmVtZW50LCBfX0FU
T01JQ19SRUxBWEVEKTsKLX0KLQotaW5saW5lIEF0b21pYzMyIEJhcnJpZXJfQXRvbWljSW5jcmVt
ZW50KHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXRvbWljMzIgaW5jcmVtZW50KSB7Ci0gIHJldHVybiBfX2F0b21pY19hZGRf
ZmV0Y2gocHRyLCBpbmNyZW1lbnQsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotCi1pbmxpbmUgQXRv
bWljMzIgQWNxdWlyZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3ZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVl
KSB7Ci0gIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbihwdHIsICZvbGRfdmFsdWUsIG5ld192
YWx1ZSwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVRPTUlDX0FDUVVJ
UkUsIF9fQVRPTUlDX0FDUVVJUkUpOwotICByZXR1cm4gb2xkX3ZhbHVlOwotfQotCi1pbmxpbmUg
QXRvbWljMzIgUmVsZWFzZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3ZhbHVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3Zh
bHVlKSB7Ci0gIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbihwdHIsICZvbGRfdmFsdWUsIG5l
d192YWx1ZSwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVRPTUlDX1JF
TEVBU0UsIF9fQVRPTUlDX0FDUVVJUkUpOwotICByZXR1cm4gb2xkX3ZhbHVlOwotfQotCi1pbmxp
bmUgdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIg
dmFsdWUpIHsKLSAgX19hdG9taWNfc3RvcmVfbihwdHIsIHZhbHVlLCBfX0FUT01JQ19SRUxBWEVE
KTsKLX0KLQotaW5saW5lIHZvaWQgTWVtb3J5QmFycmllcigpIHsKLSAgX19zeW5jX3N5bmNocm9u
aXplKCk7Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIq
IHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgX19hdG9taWNfc3RvcmVfbihwdHIsIHZhbHVlLCBf
X0FUT01JQ19TRVFfQ1NUKTsKLX0KLQotaW5saW5lIHZvaWQgUmVsZWFzZV9TdG9yZSh2b2xhdGls
ZSBBdG9taWMzMiogcHRyLCBBdG9taWMzMiB2YWx1ZSkgewotICBfX2F0b21pY19zdG9yZV9uKHB0
ciwgdmFsdWUsIF9fQVRPTUlDX1JFTEVBU0UpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgTm9CYXJy
aWVyX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIqIHB0cikgewotICByZXR1cm4gX19hdG9t
aWNfbG9hZF9uKHB0ciwgX19BVE9NSUNfUkVMQVhFRCk7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBB
Y3F1aXJlX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIqIHB0cikgewotICByZXR1cm4gX19h
dG9taWNfbG9hZF9uKHB0ciwgX19BVE9NSUNfQUNRVUlSRSk7Ci19Ci0KLWlubGluZSBBdG9taWMz
MiBSZWxlYXNlX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIqIHB0cikgewotICByZXR1cm4g
X19hdG9taWNfbG9hZF9uKHB0ciwgX19BVE9NSUNfU0VRX0NTVCk7Ci19Ci0KLSNpZmRlZiBfX0xQ
NjRfXwotCi1pbmxpbmUgdm9pZCBSZWxlYXNlX1N0b3JlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIs
IEF0b21pYzY0IHZhbHVlKSB7Ci0gIF9fYXRvbWljX3N0b3JlX24ocHRyLCB2YWx1ZSwgX19BVE9N
SUNfUkVMRUFTRSk7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBBY3F1aXJlX0xvYWQodm9sYXRpbGUg
Y29uc3QgQXRvbWljNjQqIHB0cikgewotICByZXR1cm4gX19hdG9taWNfbG9hZF9uKHB0ciwgX19B
VE9NSUNfQUNRVUlSRSk7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBBY3F1aXJlX0NvbXBhcmVBbmRT
d2FwKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBdG9taWM2NCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWM2NCBuZXdfdmFsdWUpIHsKLSAgX19hdG9taWNfY29tcGFyZV9l
eGNoYW5nZV9uKHB0ciwgJm9sZF92YWx1ZSwgbmV3X3ZhbHVlLCB0cnVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19BVE9NSUNfQUNRVUlSRSwgX19BVE9NSUNfQUNRVUlSRSk7Ci0g
IHJldHVybiBvbGRfdmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJfQ29tcGFy
ZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBuZXdfdmFsdWUpIHsKLSAgX19hdG9taWNf
Y29tcGFyZV9leGNoYW5nZV9uKHB0ciwgJm9sZF92YWx1ZSwgbmV3X3ZhbHVlLCB0cnVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BVE9NSUNfUkVMQVhFRCwgX19BVE9NSUNfUkVM
QVhFRCk7Ci0gIHJldHVybiBvbGRfdmFsdWU7Ci19Ci0KLSNlbmRpZiAvLyBkZWZpbmVkKF9fTFA2
NF9fKQotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9B
VE9NSUNPUFNfSU5URVJOQUxTX0dFTkVSSUNfR0NDX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19tYWNvc3guaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX21hY29zeC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3OTYzMzI0MTdmZWIwNmJjYmNiOTkwMTljMGZmOTU1ZjQxMmY1MWRi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX21hY29zeC5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0vLyBUaGlzIGZpbGUgaXMgYW4gaW50ZXJuYWwgYXRvbWljIGltcGxlbWVudGF0aW9uLCB1c2Ug
YXRvbWljb3BzLmggaW5zdGVhZC4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BT
X0lOVEVSTkFMU19NQUNPU1hfSF8KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19J
TlRFUk5BTFNfTUFDT1NYX0hfCi0KLSNpbmNsdWRlIDxsaWJrZXJuL09TQXRvbWljLmg+Ci0KLW5h
bWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5h
bCB7Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUg
QXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRvbWljMzIgcHJldl92YWx1ZTsKLSAgZG8g
ewotICAgIGlmIChPU0F0b21pY0NvbXBhcmVBbmRTd2FwMzIob2xkX3ZhbHVlLCBuZXdfdmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PEF0b21pYzMyKj4o
cHRyKSkpIHsKLSAgICAgIHJldHVybiBvbGRfdmFsdWU7Ci0gICAgfQotICAgIHByZXZfdmFsdWUg
PSAqcHRyOwotICB9IHdoaWxlIChwcmV2X3ZhbHVlID09IG9sZF92YWx1ZSk7Ci0gIHJldHVybiBw
cmV2X3ZhbHVlOwotfQotCi1pbmxpbmUgQXRvbWljMzIgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdl
KHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1ZSkgewotICBBdG9taWMzMiBvbGRfdmFsdWU7Ci0g
IGRvIHsKLSAgICBvbGRfdmFsdWUgPSAqcHRyOwotICB9IHdoaWxlICghT1NBdG9taWNDb21wYXJl
QW5kU3dhcDMyKG9sZF92YWx1ZSwgbmV3X3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8QXRvbWljMzIqPihwdHIpKSk7Ci0gIHJldHVybiBvbGRf
dmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZv
bGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpIHsKLSAgcmV0dXJuIE9TQXRvbWljQWRkMzIoaW5j
cmVtZW50LCBjb25zdF9jYXN0PEF0b21pYzMyKj4ocHRyKSk7Ci19Ci0KLWlubGluZSBBdG9taWMz
MiBCYXJyaWVyX0F0b21pY0luY3JlbWVudCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgaW5jcmVtZW50KSB7
Ci0gIHJldHVybiBPU0F0b21pY0FkZDMyQmFycmllcihpbmNyZW1lbnQsIGNvbnN0X2Nhc3Q8QXRv
bWljMzIqPihwdHIpKTsKLX0KLQotaW5saW5lIHZvaWQgTWVtb3J5QmFycmllcigpIHsKLSAgT1NN
ZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBBY3F1aXJlX0NvbXBhcmVBbmRT
d2FwKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRvbWljMzIgcHJldl92YWx1
ZTsKLSAgZG8gewotICAgIGlmIChPU0F0b21pY0NvbXBhcmVBbmRTd2FwMzJCYXJyaWVyKG9sZF92
YWx1ZSwgbmV3X3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0X2Nhc3Q8QXRvbWljMzIqPihwdHIpKSkgewotICAgICAgcmV0dXJuIG9sZF92YWx1ZTsK
LSAgICB9Ci0gICAgcHJldl92YWx1ZSA9ICpwdHI7Ci0gIH0gd2hpbGUgKHByZXZfdmFsdWUgPT0g
b2xkX3ZhbHVlKTsKLSAgcmV0dXJuIHByZXZfdmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBS
ZWxlYXNlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAg
cmV0dXJuIEFjcXVpcmVfQ29tcGFyZUFuZFN3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk7
Ci19Ci0KLWlubGluZSB2b2lkIE5vQmFycmllcl9TdG9yZSh2b2xhdGlsZSBBdG9taWMzMiogcHRy
LCBBdG9taWMzMiB2YWx1ZSkgewotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSB2b2lkIEFj
cXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAg
KnB0ciA9IHZhbHVlOwotICBNZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbGVh
c2VfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgTWVt
b3J5QmFycmllcigpOwotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0Jh
cnJpZXJfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRyKSB7Ci0gIHJldHVybiAqcHRy
OwotfQotCi1pbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21p
YzMyKiBwdHIpIHsKLSAgQXRvbWljMzIgdmFsdWUgPSAqcHRyOwotICBNZW1vcnlCYXJyaWVyKCk7
Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotaW5saW5lIEF0b21pYzMyIFJlbGVhc2VfTG9hZCh2b2xh
dGlsZSBjb25zdCBBdG9taWMzMiogcHRyKSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgcmV0dXJu
ICpwdHI7Ci19Ci0KLSNpZmRlZiBfX0xQNjRfXwotCi0vLyA2NC1iaXQgaW1wbGVtZW50YXRpb24g
b24gNjQtYml0IHBsYXRmb3JtCi0KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJfQ29tcGFyZUFu
ZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBuZXdfdmFsdWUpIHsKLSAgQXRvbWljNjQgcHJl
dl92YWx1ZTsKLSAgZG8gewotICAgIGlmIChPU0F0b21pY0NvbXBhcmVBbmRTd2FwNjQob2xkX3Zh
bHVlLCBuZXdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHZvbGF0aWxlIGludDY0X3QqPihwdHIpKSkgewotICAgICAgcmV0dXJuIG9sZF92
YWx1ZTsKLSAgICB9Ci0gICAgcHJldl92YWx1ZSA9ICpwdHI7Ci0gIH0gd2hpbGUgKHByZXZfdmFs
dWUgPT0gb2xkX3ZhbHVlKTsKLSAgcmV0dXJuIHByZXZfdmFsdWU7Ci19Ci0KLWlubGluZSBBdG9t
aWM2NCBOb0JhcnJpZXJfQXRvbWljRXhjaGFuZ2Uodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVl
KSB7Ci0gIEF0b21pYzY0IG9sZF92YWx1ZTsKLSAgZG8gewotICAgIG9sZF92YWx1ZSA9ICpwdHI7
Ci0gIH0gd2hpbGUgKCFPU0F0b21pY0NvbXBhcmVBbmRTd2FwNjQob2xkX3ZhbHVlLCBuZXdfdmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2xhdGlsZSBpbnQ2NF90Kj4ocHRyKSkpOwotICByZXR1cm4gb2xkX3ZhbHVlOwotfQotCi1p
bmxpbmUgQXRvbWljNjQgTm9CYXJyaWVyX0F0b21pY0luY3JlbWVudCh2b2xhdGlsZSBBdG9taWM2
NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWlj
NjQgaW5jcmVtZW50KSB7Ci0gIHJldHVybiBPU0F0b21pY0FkZDY0KGluY3JlbWVudCwgcmVpbnRl
cnByZXRfY2FzdDx2b2xhdGlsZSBpbnQ2NF90Kj4ocHRyKSk7Ci19Ci0KLWlubGluZSBBdG9taWM2
NCBCYXJyaWVyX0F0b21pY0luY3JlbWVudCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IGluY3JlbWVudCkgewot
ICByZXR1cm4gT1NBdG9taWNBZGQ2NEJhcnJpZXIoaW5jcmVtZW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBpbnQ2NF90Kj4ocHRyKSk7
Ci19Ci0KLWlubGluZSBBdG9taWM2NCBBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0
b21pYzY0KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9t
aWM2NCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dG9taWM2NCBuZXdfdmFsdWUpIHsKLSAgQXRvbWljNjQgcHJldl92YWx1ZTsKLSAgZG8gewotICAg
IGlmIChPU0F0b21pY0NvbXBhcmVBbmRTd2FwNjRCYXJyaWVyKAotICAgICAgICBvbGRfdmFsdWUs
IG5ld192YWx1ZSwgcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBpbnQ2NF90Kj4ocHRyKSkpIHsK
LSAgICAgIHJldHVybiBvbGRfdmFsdWU7Ci0gICAgfQotICAgIHByZXZfdmFsdWUgPSAqcHRyOwot
ICB9IHdoaWxlIChwcmV2X3ZhbHVlID09IG9sZF92YWx1ZSk7Ci0gIHJldHVybiBwcmV2X3ZhbHVl
OwotfQotCi1pbmxpbmUgQXRvbWljNjQgUmVsZWFzZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBB
dG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRv
bWljNjQgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIC8vIFRoZSBsaWIga2VybiBpbnRlcmZhY2UgZG9lcyBu
b3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgotICAvLyBBY3F1aXJlIGFuZCBSZWxlYXNlIG1lbW9yeSBi
YXJyaWVyczsgdGhleSBhcmUgZXF1aXZhbGVudC4KLSAgcmV0dXJuIEFjcXVpcmVfQ29tcGFyZUFu
ZFN3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIE5vQmFy
cmllcl9TdG9yZSh2b2xhdGlsZSBBdG9taWM2NCogcHRyLCBBdG9taWM2NCB2YWx1ZSkgewotICAq
cHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRv
bWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpIHsKLSAgKnB0ciA9IHZhbHVlOwotICBNZW1vcnlC
YXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRvbWlj
NjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpIHsKLSAgTWVtb3J5QmFycmllcigpOwotICAqcHRyID0g
dmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJfTG9hZCh2b2xhdGlsZSBjb25z
dCBBdG9taWM2NCogcHRyKSB7Ci0gIHJldHVybiAqcHRyOwotfQotCi1pbmxpbmUgQXRvbWljNjQg
QWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIpIHsKLSAgQXRvbWljNjQg
dmFsdWUgPSAqcHRyOwotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQot
aW5saW5lIEF0b21pYzY0IFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2NCogcHRy
KSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgcmV0dXJuICpwdHI7Ci19Ci0KLSNlbmRpZiAgLy8g
ZGVmaW5lZChfX0xQNjRfXykKLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09H
TEVfUFJPVE9CVUZfQVRPTUlDT1BTX0lOVEVSTkFMU19NQUNPU1hfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX21pcHNfZ2NjLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19taXBzX2djYy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTgzN2M5ZWMyZWVhNzM4ZWU2OGQzZDc4MGVh
NGQyYjJkNTkwZDhkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX21pcHNfZ2Nj
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxMiBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIFRoaXMgZmlsZSBpcyBhbiBpbnRlcm5hbCBhdG9taWMgaW1wbGVt
ZW50YXRpb24sIHVzZSBhdG9taWNvcHMuaCBpbnN0ZWFkLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9U
T0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX01JUFNfR0NDX0hfCi0jZGVmaW5lIEdPT0dMRV9QUk9U
T0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX01JUFNfR0NDX0hfCi0KLSNkZWZpbmUgQVRPTUlDT1BT
X0NPTVBJTEVSX0JBUlJJRVIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6IDogOiAibWVtb3J5
IikKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNl
IGludGVybmFsIHsKLQotLy8gQXRvbWljYWxseSBleGVjdXRlOgotLy8gICAgICByZXN1bHQgPSAq
cHRyOwotLy8gICAgICBpZiAoKnB0ciA9PSBvbGRfdmFsdWUpCi0vLyAgICAgICAgKnB0ciA9IG5l
d192YWx1ZTsKLS8vICAgICAgcmV0dXJuIHJlc3VsdDsKLS8vCi0vLyBJLmUuLCByZXBsYWNlICIq
cHRyIiB3aXRoICJuZXdfdmFsdWUiIGlmICIqcHRyIiB1c2VkIHRvIGJlICJvbGRfdmFsdWUiLgot
Ly8gQWx3YXlzIHJldHVybiB0aGUgb2xkIHZhbHVlIG9mICIqcHRyIgotLy8KLS8vIFRoaXMgcm91
dGluZSBpbXBsaWVzIG5vIG1lbW9yeSBiYXJyaWVycy4KLWlubGluZSBBdG9taWMzMiBOb0JhcnJp
ZXJfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAg
QXRvbWljMzIgcHJldiwgdG1wOwotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLnNldCBwdXNoXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIuc2V0IG5vcmVvcmRlclxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiMTpcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImxsICUwLCAlNVxuIiAg
Ly8gcHJldiA9ICpwdHIKLSAgICAgICAgICAgICAgICAgICAgICAgImJuZSAlMCwgJTMsIDJmXG4i
ICAvLyBpZiAocHJldiAhPSBvbGRfdmFsdWUpIGdvdG8gMgotICAgICAgICAgICAgICAgICAgICAg
ICAibW92ZSAlMiwgJTRcbiIgIC8vIHRtcCA9IG5ld192YWx1ZQotICAgICAgICAgICAgICAgICAg
ICAgICAic2MgJTIsICUxXG4iICAvLyAqcHRyID0gdG1wICh3aXRoIGF0b21pYyBjaGVjaykKLSAg
ICAgICAgICAgICAgICAgICAgICAgImJlcXogJTIsIDFiXG4iICAvLyBzdGFydCBhZ2FpbiBvbiBh
dG9taWMgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIm5vcFxuIiAgLy8gZGVsYXkgc2xv
dCBub3AKLSAgICAgICAgICAgICAgICAgICAgICAgIjI6XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICIuc2V0IHBvcFxuIgotICAgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiIChwcmV2KSwg
Ij1tIiAoKnB0ciksICI9JnIiICh0bXApCi0gICAgICAgICAgICAgICAgICAgICAgIDogInIiIChv
bGRfdmFsdWUpLCAiciIgKG5ld192YWx1ZSksICJtIiAoKnB0cikKLSAgICAgICAgICAgICAgICAg
ICAgICAgOiAibWVtb3J5Iik7Ci0gIHJldHVybiBwcmV2OwotfQotCi0vLyBBdG9taWNhbGx5IHN0
b3JlIG5ld192YWx1ZSBpbnRvICpwdHIsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaGVs
ZCBpbgotLy8gKnB0ci4gIFRoaXMgcm91dGluZSBpbXBsaWVzIG5vIG1lbW9yeSBiYXJyaWVycy4K
LWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljRXhjaGFuZ2Uodm9sYXRpbGUgQXRvbWlj
MzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWlj
MzIgbmV3X3ZhbHVlKSB7Ci0gIEF0b21pYzMyIHRlbXAsIG9sZDsKLSAgX19hc21fXyBfX3ZvbGF0
aWxlX18oIi5zZXQgcHVzaFxuIgotICAgICAgICAgICAgICAgICAgICAgICAiLnNldCBub3Jlb3Jk
ZXJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIjE6XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJsbCAlMSwgJTRcbiIgIC8vIG9sZCA9ICpwdHIKLSAgICAgICAgICAgICAgICAgICAgICAg
Im1vdmUgJTAsICUzXG4iICAvLyB0ZW1wID0gbmV3X3ZhbHVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICJzYyAlMCwgJTJcbiIgIC8vICpwdHIgPSB0ZW1wICh3aXRoIGF0b21pYyBjaGVjaykKLSAg
ICAgICAgICAgICAgICAgICAgICAgImJlcXogJTAsIDFiXG4iICAvLyBzdGFydCBhZ2FpbiBvbiBh
dG9taWMgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIm5vcFxuIiAgLy8gZGVsYXkgc2xv
dCBub3AKLSAgICAgICAgICAgICAgICAgICAgICAgIi5zZXQgcG9wXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgIDogIj0mciIgKHRlbXApLCAiPSZyIiAob2xkKSwgIj1tIiAoKnB0cikKLSAgICAg
ICAgICAgICAgICAgICAgICAgOiAiciIgKG5ld192YWx1ZSksICJtIiAoKnB0cikKLSAgICAgICAg
ICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7Ci0KLSAgcmV0dXJuIG9sZDsKLX0KLQotLy8gQXRv
bWljYWxseSBpbmNyZW1lbnQgKnB0ciBieSAiaW5jcmVtZW50Ii4gIFJldHVybnMgdGhlIG5ldyB2
YWx1ZSBvZgotLy8gKnB0ciB3aXRoIHRoZSBpbmNyZW1lbnQgYXBwbGllZC4gIFRoaXMgcm91dGlu
ZSBpbXBsaWVzIG5vIG1lbW9yeSBiYXJyaWVycy4KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJf
QXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpIHsKLSAgQXRvbWlj
MzIgdGVtcCwgdGVtcDI7Ci0KLSAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5zZXQgcHVzaFxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiLnNldCBub3Jlb3JkZXJcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIjE6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJsbCAlMCwgJTRcbiIgIC8v
IHRlbXAgPSAqcHRyCi0gICAgICAgICAgICAgICAgICAgICAgICJhZGR1ICUxLCAlMCwgJTNcbiIg
IC8vIHRlbXAyID0gdGVtcCArIGluY3JlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAic2Mg
JTEsICUyXG4iICAvLyAqcHRyID0gdGVtcDIgKHdpdGggYXRvbWljIGNoZWNrKQotICAgICAgICAg
ICAgICAgICAgICAgICAiYmVxeiAlMSwgMWJcbiIgIC8vIHN0YXJ0IGFnYWluIG9uIGF0b21pYyBl
cnJvcgotICAgICAgICAgICAgICAgICAgICAgICAiYWRkdSAlMSwgJTAsICUzXG4iICAvLyB0ZW1w
MiA9IHRlbXAgKyBpbmNyZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIi5zZXQgcG9wXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgIDogIj0mciIgKHRlbXApLCAiPSZyIiAodGVtcDIpLCAi
PW0iICgqcHRyKQotICAgICAgICAgICAgICAgICAgICAgICA6ICJJciIgKGluY3JlbWVudCksICJt
IiAoKnB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7Ci0gIC8vIHRlbXAy
IG5vdyBob2xkcyB0aGUgZmluYWwgdmFsdWUuCi0gIHJldHVybiB0ZW1wMjsKLX0KLQotaW5saW5l
IEF0b21pYzMyIEJhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzMyKiBwdHIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgaW5jcmVt
ZW50KSB7Ci0gIEFUT01JQ09QU19DT01QSUxFUl9CQVJSSUVSKCk7Ci0gIEF0b21pYzMyIHJlcyA9
IE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQocHRyLCBpbmNyZW1lbnQpOwotICBBVE9NSUNPUFNf
Q09NUElMRVJfQkFSUklFUigpOwotICByZXR1cm4gcmVzOwotfQotCi0vLyAiQWNxdWlyZSIgb3Bl
cmF0aW9ucwotLy8gZW5zdXJlIHRoYXQgbm8gbGF0ZXIgbWVtb3J5IGFjY2VzcyBjYW4gYmUgcmVv
cmRlcmVkIGFoZWFkIG9mIHRoZSBvcGVyYXRpb24uCi0vLyAiUmVsZWFzZSIgb3BlcmF0aW9ucyBl
bnN1cmUgdGhhdCBubyBwcmV2aW91cyBtZW1vcnkgYWNjZXNzIGNhbiBiZSByZW9yZGVyZWQKLS8v
IGFmdGVyIHRoZSBvcGVyYXRpb24uICAiQmFycmllciIgb3BlcmF0aW9ucyBoYXZlIGJvdGggIkFj
cXVpcmUiIGFuZCAiUmVsZWFzZSIKLS8vIHNlbWFudGljcy4gICBBIE1lbW9yeUJhcnJpZXIoKSBo
YXMgIkJhcnJpZXIiIHNlbWFudGljcywgYnV0IGRvZXMgbm8gbWVtb3J5Ci0vLyBhY2Nlc3MuCi1p
bmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiog
cHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xk
X3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIg
bmV3X3ZhbHVlKSB7Ci0gIEFUT01JQ09QU19DT01QSUxFUl9CQVJSSUVSKCk7Ci0gIEF0b21pYzMy
IHJlcyA9IE5vQmFycmllcl9Db21wYXJlQW5kU3dhcChwdHIsIG9sZF92YWx1ZSwgbmV3X3ZhbHVl
KTsKLSAgQVRPTUlDT1BTX0NPTVBJTEVSX0JBUlJJRVIoKTsKLSAgcmV0dXJuIHJlczsKLX0KLQot
aW5saW5lIEF0b21pYzMyIFJlbGVhc2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIq
IHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG9s
ZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMy
IG5ld192YWx1ZSkgewotICBBVE9NSUNPUFNfQ09NUElMRVJfQkFSUklFUigpOwotICBBdG9taWMz
MiByZXMgPSBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1
ZSk7Ci0gIEFUT01JQ09QU19DT01QSUxFUl9CQVJSSUVSKCk7Ci0gIHJldHVybiByZXM7Ci19Ci0K
LWlubGluZSB2b2lkIE5vQmFycmllcl9TdG9yZSh2b2xhdGlsZSBBdG9taWMzMiogcHRyLCBBdG9t
aWMzMiB2YWx1ZSkgewotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSB2b2lkIE1lbW9yeUJh
cnJpZXIoKSB7Ci0gIF9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIiA6IDogOiAibWVtb3J5Iik7
Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwg
QXRvbWljMzIgdmFsdWUpIHsKLSAgKnB0ciA9IHZhbHVlOwotICBNZW1vcnlCYXJyaWVyKCk7Ci19
Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRv
bWljMzIgdmFsdWUpIHsKLSAgTWVtb3J5QmFycmllcigpOwotICAqcHRyID0gdmFsdWU7Ci19Ci0K
LWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiog
cHRyKSB7Ci0gIHJldHVybiAqcHRyOwotfQotCi1pbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Mb2Fk
KHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpIHsKLSAgQXRvbWljMzIgdmFsdWUgPSAqcHRy
OwotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotaW5saW5lIEF0b21p
YzMyIFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRyKSB7Ci0gIE1lbW9y
eUJhcnJpZXIoKTsKLSAgcmV0dXJuICpwdHI7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fTFA2NF9fKQot
Ly8gNjQtYml0IHZlcnNpb25zIG9mIHRoZSBhdG9taWMgb3BzLgotCi1pbmxpbmUgQXRvbWljNjQg
Tm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVl
KSB7Ci0gIEF0b21pYzY0IHByZXYsIHRtcDsKLSAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5zZXQg
cHVzaFxuIgotICAgICAgICAgICAgICAgICAgICAgICAiLnNldCBub3Jlb3JkZXJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIjE6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJsbGQgJTAs
ICU1XG4iICAvLyBwcmV2ID0gKnB0cgotICAgICAgICAgICAgICAgICAgICAgICAiYm5lICUwLCAl
MywgMmZcbiIgIC8vIGlmIChwcmV2ICE9IG9sZF92YWx1ZSkgZ290byAyCi0gICAgICAgICAgICAg
ICAgICAgICAgICJtb3ZlICUyLCAlNFxuIiAgLy8gdG1wID0gbmV3X3ZhbHVlCi0gICAgICAgICAg
ICAgICAgICAgICAgICJzY2QgJTIsICUxXG4iICAvLyAqcHRyID0gdG1wICh3aXRoIGF0b21pYyBj
aGVjaykKLSAgICAgICAgICAgICAgICAgICAgICAgImJlcXogJTIsIDFiXG4iICAvLyBzdGFydCBh
Z2FpbiBvbiBhdG9taWMgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIm5vcFxuIiAgLy8g
ZGVsYXkgc2xvdCBub3AKLSAgICAgICAgICAgICAgICAgICAgICAgIjI6XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIuc2V0IHBvcFxuIgotICAgICAgICAgICAgICAgICAgICAgICA6ICI9JnIi
IChwcmV2KSwgIj1tIiAoKnB0ciksICI9JnIiICh0bXApCi0gICAgICAgICAgICAgICAgICAgICAg
IDogInIiIChvbGRfdmFsdWUpLCAiciIgKG5ld192YWx1ZSksICJtIiAoKnB0cikKLSAgICAgICAg
ICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7Ci0gIHJldHVybiBwcmV2OwotfQotCi0vLyBBdG9t
aWNhbGx5IHN0b3JlIG5ld192YWx1ZSBpbnRvICpwdHIsIHJldHVybmluZyB0aGUgcHJldmlvdXMg
dmFsdWUgaGVsZCBpbgotLy8gKnB0ci4gIFRoaXMgcm91dGluZSBpbXBsaWVzIG5vIG1lbW9yeSBi
YXJyaWVycy4KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJfQXRvbWljRXhjaGFuZ2Uodm9sYXRp
bGUgQXRvbWljNjQqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIEF0b21pYzY0IHRlbXAsIG9sZDsKLSAgX19hc21f
XyBfX3ZvbGF0aWxlX18oIi5zZXQgcHVzaFxuIgotICAgICAgICAgICAgICAgICAgICAgICAiLnNl
dCBub3Jlb3JkZXJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIjE6XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJsbGQgJTEsICU0XG4iICAvLyBvbGQgPSAqcHRyCi0gICAgICAgICAgICAg
ICAgICAgICAgICJtb3ZlICUwLCAlM1xuIiAgLy8gdGVtcCA9IG5ld192YWx1ZQotICAgICAgICAg
ICAgICAgICAgICAgICAic2NkICUwLCAlMlxuIiAgLy8gKnB0ciA9IHRlbXAgKHdpdGggYXRvbWlj
IGNoZWNrKQotICAgICAgICAgICAgICAgICAgICAgICAiYmVxeiAlMCwgMWJcbiIgIC8vIHN0YXJ0
IGFnYWluIG9uIGF0b21pYyBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAibm9wXG4iICAv
LyBkZWxheSBzbG90IG5vcAotICAgICAgICAgICAgICAgICAgICAgICAiLnNldCBwb3BcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAodGVtcCksICI9JnIiIChvbGQpLCAiPW0iICgq
cHRyKQotICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAobmV3X3ZhbHVlKSwgIm0iICgqcHRy
KQotICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKLQotICByZXR1cm4gb2xkOwot
fQotCi0vLyBBdG9taWNhbGx5IGluY3JlbWVudCAqcHRyIGJ5ICJpbmNyZW1lbnQiLiAgUmV0dXJu
cyB0aGUgbmV3IHZhbHVlIG9mCi0vLyAqcHRyIHdpdGggdGhlIGluY3JlbWVudCBhcHBsaWVkLiAg
VGhpcyByb3V0aW5lIGltcGxpZXMgbm8gbWVtb3J5IGJhcnJpZXJzLgotaW5saW5lIEF0b21pYzY0
IE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IGluY3JlbWVudCkg
ewotICBBdG9taWM2NCB0ZW1wLCB0ZW1wMjsKLQotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLnNl
dCBwdXNoXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIuc2V0IG5vcmVvcmRlclxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiMTpcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImxsZCAl
MCwgJTRcbiIgIC8vIHRlbXAgPSAqcHRyCi0gICAgICAgICAgICAgICAgICAgICAgICJkYWRkdSAl
MSwgJTAsICUzXG4iICAvLyB0ZW1wMiA9IHRlbXAgKyBpbmNyZW1lbnQKLSAgICAgICAgICAgICAg
ICAgICAgICAgInNjZCAlMSwgJTJcbiIgIC8vICpwdHIgPSB0ZW1wMiAod2l0aCBhdG9taWMgY2hl
Y2spCi0gICAgICAgICAgICAgICAgICAgICAgICJiZXF6ICUxLCAxYlxuIiAgLy8gc3RhcnQgYWdh
aW4gb24gYXRvbWljIGVycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICJkYWRkdSAlMSwgJTAs
ICUzXG4iICAvLyB0ZW1wMiA9IHRlbXAgKyBpbmNyZW1lbnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgIi5zZXQgcG9wXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIDogIj0mciIgKHRlbXApLCAi
PSZyIiAodGVtcDIpLCAiPW0iICgqcHRyKQotICAgICAgICAgICAgICAgICAgICAgICA6ICJJciIg
KGluY3JlbWVudCksICJtIiAoKnB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5
Iik7Ci0gIC8vIHRlbXAyIG5vdyBob2xkcyB0aGUgZmluYWwgdmFsdWUuCi0gIHJldHVybiB0ZW1w
MjsKLX0KLQotaW5saW5lIEF0b21pYzY0IEJhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxl
IEF0b21pYzY0KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXRvbWljNjQgaW5jcmVtZW50KSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgQXRvbWljNjQgcmVz
ID0gTm9CYXJyaWVyX0F0b21pY0luY3JlbWVudChwdHIsIGluY3JlbWVudCk7Ci0gIE1lbW9yeUJh
cnJpZXIoKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotLy8gIkFjcXVpcmUiIG9wZXJhdGlvbnMKLS8v
IGVuc3VyZSB0aGF0IG5vIGxhdGVyIG1lbW9yeSBhY2Nlc3MgY2FuIGJlIHJlb3JkZXJlZCBhaGVh
ZCBvZiB0aGUgb3BlcmF0aW9uLgotLy8gIlJlbGVhc2UiIG9wZXJhdGlvbnMgZW5zdXJlIHRoYXQg
bm8gcHJldmlvdXMgbWVtb3J5IGFjY2VzcyBjYW4gYmUgcmVvcmRlcmVkCi0vLyBhZnRlciB0aGUg
b3BlcmF0aW9uLiAgIkJhcnJpZXIiIG9wZXJhdGlvbnMgaGF2ZSBib3RoICJBY3F1aXJlIiBhbmQg
IlJlbGVhc2UiCi0vLyBzZW1hbnRpY3MuICAgQSBNZW1vcnlCYXJyaWVyKCkgaGFzICJCYXJyaWVy
IiBzZW1hbnRpY3MsIGJ1dCBkb2VzIG5vIG1lbW9yeQotLy8gYWNjZXNzLgotaW5saW5lIEF0b21p
YzY0IEFjcXVpcmVfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkg
ewotICBBdG9taWM2NCByZXMgPSBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAocHRyLCBvbGRfdmFs
dWUsIG5ld192YWx1ZSk7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgcmV0dXJuIHJlczsKLX0KLQot
aW5saW5lIEF0b21pYzY0IFJlbGVhc2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQq
IHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9s
ZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0
IG5ld192YWx1ZSkgewotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIHJldHVybiBOb0JhcnJpZXJfQ29t
cGFyZUFuZFN3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IE5vQmFycmllcl9TdG9yZSh2b2xhdGlsZSBBdG9taWM2NCogcHRyLCBBdG9taWM2NCB2YWx1ZSkg
ewotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRp
bGUgQXRvbWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpIHsKLSAgKnB0ciA9IHZhbHVlOwotICBN
ZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUg
QXRvbWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpIHsKLSAgTWVtb3J5QmFycmllcigpOwotICAq
cHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJfTG9hZCh2b2xhdGls
ZSBjb25zdCBBdG9taWM2NCogcHRyKSB7Ci0gIHJldHVybiAqcHRyOwotfQotCi1pbmxpbmUgQXRv
bWljNjQgQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIpIHsKLSAgQXRv
bWljNjQgdmFsdWUgPSAqcHRyOwotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIHJldHVybiB2YWx1ZTsK
LX0KLQotaW5saW5lIEF0b21pYzY0IFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2
NCogcHRyKSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgcmV0dXJuICpwdHI7Ci19Ci0jZW5kaWYK
LQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI3VuZGVmIEFUT01JQ09QU19DT01QSUxFUl9CQVJSSUVS
Ci0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRFUk5BTFNfTUlQU19H
Q0NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50
ZXJuYWxzX3BuYWNsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVy
bmFsc19wbmFjbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjMxNGZkMGM5YWY1
YzZjNGI1ODJkMzA0Y2QwOThhMmYzODBhM2ZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50
ZXJuYWxzX3BuYWNsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFRoaXMgZmlsZSBpcyBhbiBpbnRlcm5hbCBh
dG9taWMgaW1wbGVtZW50YXRpb24sIHVzZSBhdG9taWNvcHMuaCBpbnN0ZWFkLgotCi0jaWZuZGVm
IEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX1BOQUNMX0hfCi0jZGVmaW5lIEdP
T0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX1BOQUNMX0hfCi0KLSNpbmNsdWRlIDxh
dG9taWM+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSBpbnRlcm5hbCB7Ci0KLS8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgdHJhbnNpdGlvbmFs
IGFuZCBtYWludGFpbnMgdGhlIG9yaWdpbmFsIEFQSSBmb3IKLS8vIGF0b21pY29wcy5oLiBUaGlz
IHJlcXVpcmVzIGNhc3RpbmcgbWVtb3J5IGxvY2F0aW9ucyB0byB0aGUgYXRvbWljIHR5cGVzLCBh
bmQKLS8vIGFzc3VtZXMgdGhhdCB0aGUgQVBJIGFuZCB0aGUgQysrMTEgaW1wbGVtZW50YXRpb24g
YXJlIGxheW91dC1jb21wYXRpYmxlLAotLy8gd2hpY2ggaXNuJ3QgdHJ1ZSBmb3IgYWxsIGltcGxl
bWVudGF0aW9ucyBvciBoYXJkd2FyZSBwbGF0Zm9ybXMuIFRoZSBzdGF0aWMKLS8vIGFzc2VydGlv
biBzaG91bGQgZGV0ZWN0IHRoaXMgaXNzdWUsIHdlcmUgaXQgdG8gZmlyZSB0aGVuIHRoaXMgaGVh
ZGVyCi0vLyBzaG91bGRuJ3QgYmUgdXNlZC4KLS8vCi0vLyBUT0RPKGpmYikgSWYgdGhpcyBoZWFk
ZXIgbWFuYWdlcyB0byBzdGF5IGNvbW1pdHRlZCB0aGVuIHRoZSBBUEkgc2hvdWxkIGJlCi0vLyAg
ICAgICAgICAgbW9kaWZpZWQsIGFuZCBhbGwgY2FsbCBzaXRlcyB1cGRhdGVkLgotdHlwZWRlZiB2
b2xhdGlsZSBzdGQ6OmF0b21pYzxBdG9taWMzMj4qIEF0b21pY0xvY2F0aW9uMzI7Ci1zdGF0aWNf
YXNzZXJ0KHNpemVvZigqKEF0b21pY0xvY2F0aW9uMzIpIG51bGxwdHIpID09IHNpemVvZihBdG9t
aWMzMiksCi0gICAgICAgICAgICAgICJpbmNvbXBhdGlibGUgMzItYml0IGF0b21pYyBsYXlvdXQi
KTsKLQotaW5saW5lIHZvaWQgTWVtb3J5QmFycmllcigpIHsKLSNpZiBkZWZpbmVkKF9fR0xJQkNY
WF9fKQotICAvLyBXb3JrIGFyb3VuZCBsaWJzdGRjKysgYnVnIDUxMDM4IHdoZXJlIGF0b21pY190
aHJlYWRfZmVuY2Ugd2FzIGRlY2xhcmVkIGJ1dAotICAvLyBub3QgZGVmaW5lZCwgbGVhZGluZyB0
byB0aGUgbGlua2VyIGNvbXBsYWluaW5nIGFib3V0IHVuZGVmaW5lZCByZWZlcmVuY2VzLgotICBf
X2F0b21pY190aHJlYWRfZmVuY2Uoc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7Ci0jZWxzZQot
ICBzdGQ6OmF0b21pY190aHJlYWRfZmVuY2Uoc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7Ci0j
ZW5kaWYKLX0KLQotaW5saW5lIEF0b21pYzMyIE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2b2xh
dGlsZSBBdG9taWMzMiogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBdG9taWMzMiBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1ZSkgewotICAoKEF0b21pY0xvY2F0aW9uMzIpcHRy
KQotICAgICAgLT5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhvbGRfdmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gIHJldHVybiBvbGRfdmFs
dWU7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljRXhjaGFuZ2Uodm9sYXRp
bGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIHJldHVybiAoKEF0b21pY0xvY2F0aW9uMzIpcHRy
KQotICAgICAgLT5leGNoYW5nZShuZXdfdmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQp
OwotfQotCi1pbmxpbmUgQXRvbWljMzIgTm9CYXJyaWVyX0F0b21pY0luY3JlbWVudCh2b2xhdGls
ZSBBdG9taWMzMiogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljMzIgaW5jcmVtZW50KSB7Ci0gIHJldHVybiBpbmNyZW1lbnQgKwotICAgICAgICAg
KChBdG9taWNMb2NhdGlvbjMyKXB0cikKLSAgICAgICAgICAgICAtPmZldGNoX2FkZChpbmNyZW1l
bnQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgQmFy
cmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpIHsKLSAgcmV0
dXJuIGluY3JlbWVudCArICgoQXRvbWljTG9jYXRpb24zMilwdHIpLT5mZXRjaF9hZGQoaW5jcmVt
ZW50KTsKLX0KLQotaW5saW5lIEF0b21pYzMyIEFjcXVpcmVfQ29tcGFyZUFuZFN3YXAodm9sYXRp
bGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEF0b21pYzMyIG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEF0b21pYzMyIG5ld192YWx1ZSkgewotICAoKEF0b21pY0xvY2F0aW9uMzIpcHRyKQotICAg
ICAgLT5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld192YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0gIHJldHVybiBvbGRfdmFsdWU7Ci19
Ci0KLWlubGluZSBBdG9taWMzMiBSZWxlYXNlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21p
YzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMz
MiBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9t
aWMzMiBuZXdfdmFsdWUpIHsKLSAgKChBdG9taWNMb2NhdGlvbjMyKXB0cikKLSAgICAgIC0+Y29t
cGFyZV9leGNoYW5nZV9zdHJvbmcob2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGVhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICByZXR1cm4gb2xkX3ZhbHVlOwotfQotCi1pbmxp
bmUgdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIg
dmFsdWUpIHsKLSAgKChBdG9taWNMb2NhdGlvbjMyKXB0ciktPnN0b3JlKHZhbHVlLCBzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxheGVkKTsKLX0KLQotaW5saW5lIHZvaWQgQWNxdWlyZV9TdG9yZSh2b2xh
dGlsZSBBdG9taWMzMiogcHRyLCBBdG9taWMzMiB2YWx1ZSkgewotICAoKEF0b21pY0xvY2F0aW9u
MzIpcHRyKS0+c3RvcmUodmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICBNZW1v
cnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRv
bWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgKChBdG9taWNMb2NhdGlvbjMyKXB0cikt
PnN0b3JlKHZhbHVlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLX0KLQotaW5saW5lIEF0
b21pYzMyIE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpIHsKLSAg
cmV0dXJuICgoQXRvbWljTG9jYXRpb24zMilwdHIpLT5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0
IEF0b21pYzMyKiBwdHIpIHsKLSAgcmV0dXJuICgoQXRvbWljTG9jYXRpb24zMilwdHIpLT5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgUmVsZWFz
ZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpIHsKLSAgTWVtb3J5QmFycmllcigp
OwotICByZXR1cm4gKChBdG9taWNMb2NhdGlvbjMyKXB0ciktPmxvYWQoc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7Ci19Ci0KLSNpZiBkZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9BUkNIXzY0X0JJ
VCkKLQotdHlwZWRlZiB2b2xhdGlsZSBzdGQ6OmF0b21pYzxBdG9taWM2ND4qIEF0b21pY0xvY2F0
aW9uNjQ7Ci1zdGF0aWNfYXNzZXJ0KHNpemVvZigqKEF0b21pY0xvY2F0aW9uNjQpIG51bGxwdHIp
ID09IHNpemVvZihBdG9taWM2NCksCi0gICAgICAgICAgICAgICJpbmNvbXBhdGlibGUgNjQtYml0
IGF0b21pYyBsYXlvdXQiKTsKLQotaW5saW5lIEF0b21pYzY0IE5vQmFycmllcl9Db21wYXJlQW5k
U3dhcCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWM2NCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewotICAoKEF0b21pY0xvY2F0
aW9uNjQpcHRyKQotICAgICAgLT5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhvbGRfdmFsdWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gIHJldHVy
biBvbGRfdmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJfQXRvbWljRXhjaGFu
Z2Uodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIHJldHVybiAoKEF0b21pY0xvY2F0
aW9uNjQpcHRyKQotICAgICAgLT5leGNoYW5nZShuZXdfdmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOwotfQotCi1pbmxpbmUgQXRvbWljNjQgTm9CYXJyaWVyX0F0b21pY0luY3JlbWVu
dCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXRvbWljNjQgaW5jcmVtZW50KSB7Ci0gIHJldHVybiBpbmNyZW1lbnQgKwot
ICAgICAgICAgKChBdG9taWNMb2NhdGlvbjY0KXB0cikKLSAgICAgICAgICAgICAtPmZldGNoX2Fk
ZChpbmNyZW1lbnQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotfQotCi1pbmxpbmUgQXRv
bWljNjQgQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBpbmNyZW1lbnQp
IHsKLSAgcmV0dXJuIGluY3JlbWVudCArICgoQXRvbWljTG9jYXRpb242NClwdHIpLT5mZXRjaF9h
ZGQoaW5jcmVtZW50KTsKLX0KLQotaW5saW5lIEF0b21pYzY0IEFjcXVpcmVfQ29tcGFyZUFuZFN3
YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewotICAoKEF0b21pY0xvY2F0aW9uNjQp
cHRyKQotICAgICAgLT5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhvbGRfdmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0gIHJldHVybiBvbGRf
dmFsdWU7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBSZWxlYXNlX0NvbXBhcmVBbmRTd2FwKHZvbGF0
aWxlIEF0b21pYzY0KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWM2NCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBdG9taWM2NCBuZXdfdmFsdWUpIHsKLSAgKChBdG9taWNMb2NhdGlvbjY0KXB0cikKLSAg
ICAgIC0+Y29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2xkX3ZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICByZXR1cm4gb2xkX3ZhbHVlOwot
fQotCi1pbmxpbmUgdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwg
QXRvbWljNjQgdmFsdWUpIHsKLSAgKChBdG9taWNMb2NhdGlvbjY0KXB0ciktPnN0b3JlKHZhbHVl
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLX0KLQotaW5saW5lIHZvaWQgQWNxdWlyZV9T
dG9yZSh2b2xhdGlsZSBBdG9taWM2NCogcHRyLCBBdG9taWM2NCB2YWx1ZSkgewotICAoKEF0b21p
Y0xvY2F0aW9uNjQpcHRyKS0+c3RvcmUodmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQp
OwotICBNZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9s
YXRpbGUgQXRvbWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpIHsKLSAgKChBdG9taWNMb2NhdGlv
bjY0KXB0ciktPnN0b3JlKHZhbHVlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLX0KLQot
aW5saW5lIEF0b21pYzY0IE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0KiBw
dHIpIHsKLSAgcmV0dXJuICgoQXRvbWljTG9jYXRpb242NClwdHIpLT5sb2FkKHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpOwotfQotCi1pbmxpbmUgQXRvbWljNjQgQWNxdWlyZV9Mb2FkKHZvbGF0
aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIpIHsKLSAgcmV0dXJuICgoQXRvbWljTG9jYXRpb242NClw
dHIpLT5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotfQotCi1pbmxpbmUgQXRvbWlj
NjQgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIpIHsKLSAgTWVtb3J5
QmFycmllcigpOwotICByZXR1cm4gKChBdG9taWNMb2NhdGlvbjY0KXB0ciktPmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci19Ci0KLSNlbmRpZiAgLy8gZGVmaW5lZChHT09HTEVfUFJP
VE9CVUZfQVJDSF82NF9CSVQpCi0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFt
ZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09P
R0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRFUk5BTFNfUE5BQ0xfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3Bvd2VyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19wb3dlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGE0MmYyMWYwNGM0Yjc5MjI5ZDcxNTAyZTkxOTE5YzEz
NDY4ZGZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3Bvd2VyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NDAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgQmxvb21iZXJnIEZp
bmFuY2UgTFAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQmxvb21iZXJnIEZpbmFuY2UgTFAuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlzIGZpbGUgaXMgYW4gaW50ZXJu
YWwgYXRvbWljIGltcGxlbWVudGF0aW9uLCB1c2UgYXRvbWljb3BzLmggaW5zdGVhZC4KLQotI2lm
bmRlZiBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BTX0lOVEVSTkFMU19BSVhfSF8KLSNkZWZpbmUg
R09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRFUk5BTFNfQUlYX0hfCi0KLW5hbWVzcGFjZSBn
b29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLWlu
bGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIq
IHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIg
b2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9t
aWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRvbWljMzIgcmVzdWx0OwotCi0gIGFzbSB2b2xhdGlsZSAo
Ci0gICAgICAiMTogICAgIGx3YXJ4ICVbcmVzXSwgJVt6ZXJvXSwgJVtvYmpdICAgXG5cdCIgIC8v
IGxvYWQgYW5kIHJlc2VydmUKLSAgICAgICIgICAgICAgY21wdyAlW2NtcF0sICVbcmVzXSAgICAg
ICAgICAgICBcblx0IiAgLy8gY29tcGFyZSB2YWx1ZXMKLSAgICAgICIgICAgICAgYm5lLSAyZiAg
ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIiAgICAgICBzdHdjeC4gJVt2YWxd
LCAlW3plcm9dLCAlW29ial0gIFxuXHQiICAvLyBzdG9yZSBuZXcgdmFsdWUKLSAgICAgICIgICAg
ICAgYm5lLSAxYiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIjI6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgIDogW3Jl
c10gICI9JmIiIChyZXN1bHQpCi0gICAgICAgICAgICAgIDogW29ial0gICJiIiAgIChwdHIpLAot
ICAgICAgICAgICAgICAgIFtjbXBdICAiYiIgICAob2xkX3ZhbHVlKSwKLSAgICAgICAgICAgICAg
ICBbdmFsXSAgImIiICAgKG5ld192YWx1ZSksCi0gICAgICAgICAgICAgICAgW3plcm9dICJpIiAg
ICgwKQotICAgICAgICAgICAgICA6ICJjcjAiLCAiY3RyIik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotaW5saW5lIEF0b21pYzMyIE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSh2b2xhdGlsZSBB
dG9taWMzMiogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRvbWljMzIgcmVzdWx0OwotCi0gIGFzbSB2b2xhdGls
ZSAoCi0gICAgICAiMTogICAgIGx3YXJ4ICVbcmVzXSwgJVt6ZXJvXSwgJVtvYmpdICAgICAgIFxu
XHQiCi0gICAgICAiICAgICAgIHN0d2N4LiAlW3ZhbF0sICVbemVyb10sICVbb2JqXSAgICAgIFxu
XHQiCi0gICAgICAiICAgICAgIGJuZS0gMWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
XHQiCi0gICAgICAgICAgICAgIDogW3Jlc10gICI9JmIiIChyZXN1bHQpCi0gICAgICAgICAgICAg
IDogW29ial0gICJiIiAgIChwdHIpLAotICAgICAgICAgICAgICAgIFt2YWxdICAiYiIgICAobmV3
X3ZhbHVlKSwKLSAgICAgICAgICAgICAgICBbemVyb10gImkiICAgKDApCi0gICAgICAgICAgICAg
IDogImNyMCIsICJjdHIiKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgQXRvbWlj
MzIgTm9CYXJyaWVyX0F0b21pY0luY3JlbWVudCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgaW5jcmVtZW50
KSB7Ci0gIEF0b21pYzMyIHJlc3VsdDsKLQotICBhc20gdm9sYXRpbGUgKAotICAgICAgIjE6ICAg
ICBsd2FyeCAlW3Jlc10sICVbemVyb10sICVbb2JqXSAgIFxuXHQiICAvLyBsb2FkIGFuZCByZXNl
cnZlCi0gICAgICAiICAgICAgIGFkZCAlW3Jlc10sICVbdmFsXSwgJVtyZXNdICAgICAgXG5cdCIg
IC8vIGFkZCB0aGUgb3BlcmFuZAotICAgICAgIiAgICAgICBzdHdjeC4gJVtyZXNdLCAlW3plcm9d
LCAlW29ial0gIFxuXHQiICAvLyBzdG9yZSBvbGQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc3RpbGwgcmVzZXJ2ZWQKLSAg
ICAgICIgICAgICAgYm5lLSAxYiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAg
ICAgICAgICA6IFtyZXNdICAiPSZiIiAocmVzdWx0KQotICAgICAgICAgICAgICA6IFtvYmpdICAi
YiIgICAocHRyKSwKLSAgICAgICAgICAgICAgICBbdmFsXSAgImIiICAgKGluY3JlbWVudCksCi0g
ICAgICAgICAgICAgICAgW3plcm9dICJpIiAgICgwKQotICAgICAgICAgICAgICA6ICJjcjAiLCAi
Y3RyIik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgTWVtb3J5QmFycmll
cih2b2lkKSB7Ci0gIGFzbSB2b2xhdGlsZSAoCi0gICAgICAiICAgICAgIGx3c3luYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICIgICAgICAgaXN5bmMgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAgIDoKLSAg
ICAgICAgICAgICAgOiAibWVtb3J5Iik7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBCYXJyaWVyX0F0
b21pY0luY3JlbWVudCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIGluY3JlbWVudCkgewotICBBdG9taWMzMiBy
ZXN1bHQ7Ci0KLSAgYXNtIHZvbGF0aWxlICgKLSAgICAgICIgICAgICAgbHdzeW5jICAgICAgICAg
ICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAiMTogICAgIGx3YXJ4ICVbcmVzXSwgJVt6
ZXJvXSwgJVtvYmpdICAgXG5cdCIgIC8vIGxvYWQgYW5kIHJlc2VydmUKLSAgICAgICIgICAgICAg
YWRkICVbcmVzXSwgJVt2YWxdLCAlW3Jlc10gICAgICBcblx0IiAgLy8gYWRkIHRoZSBvcGVyYW5k
Ci0gICAgICAiICAgICAgIHN0d2N4LiAlW3Jlc10sICVbemVyb10sICVbb2JqXSAgXG5cdCIgIC8v
IHN0b3JlIG9sZCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpZiBzdGlsbCByZXNlcnZlZAotICAgICAgIiAgICAgICBibmUtIDFi
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiICAgICAgIGlzeW5jICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgOiBbcmVzXSAgIj0mYiIg
KHJlc3VsdCkKLSAgICAgICAgICAgICAgOiBbb2JqXSAgImIiICAgKHB0ciksCi0gICAgICAgICAg
ICAgICAgW3ZhbF0gICJiIiAgIChpbmNyZW1lbnQpLAotICAgICAgICAgICAgICAgIFt6ZXJvXSAi
aSIgICAoMCkKLSAgICAgICAgICAgICAgOiAiY3IwIiwgImN0ciIpOwotCi0gIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxl
IEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dG9taWMzMiBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRvbWljMzIgcmVzdWx0OwotCi0gIGFzbSB2b2xh
dGlsZSAoCi0gICAgICAiMTogICAgIGx3YXJ4ICVbcmVzXSwgJVt6ZXJvXSwgJVtvYmpdICAgXG5c
dCIgIC8vIGxvYWQgYW5kIHJlc2VydmUKLSAgICAgICIgICAgICAgY21wdyAlW2NtcF0sICVbcmVz
XSAgICAgICAgICAgICBcblx0IiAgLy8gY29tcGFyZSB2YWx1ZXMKLSAgICAgICIgICAgICAgYm5l
LSAyZiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIiAgICAgICBzdHdjeC4g
JVt2YWxdLCAlW3plcm9dLCAlW29ial0gIFxuXHQiICAvLyBzdG9yZSBuZXcgdmFsdWUKLSAgICAg
ICIgICAgICAgYm5lLSAxYiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAi
ICAgICAgIGlzeW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICIyOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICA6
IFtyZXNdICAiPSZiIiAocmVzdWx0KQotICAgICAgICAgICAgICA6IFtvYmpdICAiYiIgICAocHRy
KSwKLSAgICAgICAgICAgICAgICBbY21wXSAgImIiICAgKG9sZF92YWx1ZSksCi0gICAgICAgICAg
ICAgICAgW3ZhbF0gICJiIiAgIChuZXdfdmFsdWUpLAotICAgICAgICAgICAgICAgIFt6ZXJvXSAi
aSIgICAoMCkKLSAgICAgICAgICAgICAgOiAiY3IwIiwgImN0ciIpOwotCi0gIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBSZWxlYXNlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxl
IEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dG9taWMzMiBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRvbWljMzIgcmVzdWx0OwotCi0gIGFzbSB2b2xh
dGlsZSAoCi0gICAgICAiICAgICAgIGx3c3luYyAgICAgICAgICAgICAgICAgICAgICAgICAgXG5c
dCIKLQotICAgICAgIjE6ICAgICBsd2FyeCAlW3Jlc10sICVbemVyb10sICVbb2JqXSAgIFxuXHQi
ICAvLyBsb2FkIGFuZCByZXNlcnZlCi0gICAgICAiICAgICAgIGNtcHcgJVtjbXBdLCAlW3Jlc10g
ICAgICAgICAgICAgXG5cdCIgIC8vIGNvbXBhcmUgdmFsdWVzCi0gICAgICAiICAgICAgIGJuZS0g
MmYgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICIgICAgICAgc3R3Y3guICVb
dmFsXSwgJVt6ZXJvXSwgJVtvYmpdICBcblx0IiAgLy8gc3RvcmUgbmV3IHZhbHVlCi0gICAgICAi
ICAgICAgIGJuZS0gMWIgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgIjI6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAg
IDogW3Jlc10gICI9JmIiIChyZXN1bHQpCi0gICAgICAgICAgICAgIDogW29ial0gICJiIiAgIChw
dHIpLAotICAgICAgICAgICAgICAgIFtjbXBdICAiYiIgICAob2xkX3ZhbHVlKSwKLSAgICAgICAg
ICAgICAgICBbdmFsXSAgImIiICAgKG5ld192YWx1ZSksCi0gICAgICAgICAgICAgICAgW3plcm9d
ICJpIiAgICgwKQotICAgICAgICAgICAgICA6ICJjcjAiLCAiY3RyIik7Ci0KLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotaW5saW5lIHZvaWQgTm9CYXJyaWVyX1N0b3JlKHZvbGF0aWxlIEF0b21pYzMy
KiBwdHIsIEF0b21pYzMyIHZhbHVlKSB7Ci0gICpwdHIgPSB2YWx1ZTsKLX0KLQotaW5saW5lIHZv
aWQgQWNxdWlyZV9TdG9yZSh2b2xhdGlsZSBBdG9taWMzMiogcHRyLCBBdG9taWMzMiB2YWx1ZSkg
ewotICBhc20gdm9sYXRpbGUgKAotICAgICAgIiAgICAgICBzdHcgJVt2YWxdLCAlW29ial0gICAg
ICBcblx0IgotICAgICAgIiAgICAgICBpc3luYyAgICAgICAgICAgICAgICAgICBcblx0IgotICAg
ICAgICAgICAgICA6IFtvYmpdICI9bSIgKCpwdHIpCi0gICAgICAgICAgICAgIDogW3ZhbF0gICJi
IiAgKHZhbHVlKSk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRv
bWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgYXNtIHZvbGF0aWxlICgKLSAgICAgICIg
ICAgICAgbHdzeW5jICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICIgICAgICAgc3R3ICVb
dmFsXSwgJVtvYmpdICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgOiBbb2JqXSAiPW0iICgqcHRy
KQotICAgICAgICAgICAgICA6IFt2YWxdICAiYiIgICh2YWx1ZSkpOwotfQotCi1pbmxpbmUgQXRv
bWljMzIgTm9CYXJyaWVyX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIqIHB0cikgewotICBy
ZXR1cm4gKnB0cjsKLX0KLQotaW5saW5lIEF0b21pYzMyIEFjcXVpcmVfTG9hZCh2b2xhdGlsZSBj
b25zdCBBdG9taWMzMiogcHRyKSB7Ci0gIEF0b21pYzMyIHJlc3VsdDsKLQotICBhc20gdm9sYXRp
bGUgKAotICAgICAgIjE6ICAgICBsd3ogJVtyZXNdLCAlW29ial0gICAgICAgICAgICAgIFxuXHQi
Ci0gICAgICAiICAgICAgIGNtcHcgJVtyZXNdLCAlW3Jlc10gICAgICAgICAgICAgXG5cdCIgLy8g
Y3JlYXRlIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBkZXBlbmRlbmN5IGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWQvbG9hZCBvcmRlcmluZwotICAgICAgIiAgICAg
ICBibmUtIDFiICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIG5ldmVyIHRha2VuCi0K
LSAgICAgICIgICAgICAgaXN5bmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAg
ICAgICAgICAgICA6IFtyZXNdICAiPWIiIChyZXN1bHQpCi0gICAgICAgICAgICAgIDogW29ial0g
ICJtIiAgKCpwdHIpLAotICAgICAgICAgICAgICAgIFt6ZXJvXSAiaSIgICgwKQotICAgICAgICAg
ICAgICA6ICJjcjAiLCAiY3RyIik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIEF0
b21pYzMyIFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRyKSB7Ci0gIEF0
b21pYzMyIHJlc3VsdDsKLQotICBhc20gdm9sYXRpbGUgKAotICAgICAgIiAgICAgICBsd3N5bmMg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICIxOiAgICAgbHd6ICVbcmVz
XSwgJVtvYmpdICAgICAgICAgICAgICBcblx0IgotICAgICAgIiAgICAgICBjbXB3ICVbcmVzXSwg
JVtyZXNdICAgICAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBkYXRhCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jeSBmb3IKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2Fk
L2xvYWQgb3JkZXJpbmcKLSAgICAgICIgICAgICAgYm5lLSAxYiAgICAgICAgICAgICAgICAgICAg
ICAgICBcblx0IiAvLyBuZXZlciB0YWtlbgotICAgICAgICAgICAgICA6IFtyZXNdICAiPWIiIChy
ZXN1bHQpCi0gICAgICAgICAgICAgIDogW29ial0gICJtIiAgKCpwdHIpLAotICAgICAgICAgICAg
ICAgIFt6ZXJvXSAiaSIgICgwKQotICAgICAgICAgICAgICA6ICJjcjAiLCAiY3RyIik7Ci0KLSAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotI2lmZGVmIEdPT0dMRV9QUk9UT0JVRl9BUkNIXzY0X0JJVAot
aW5saW5lIEF0b21pYzY0IE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWM2
NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2
NCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0
b21pYzY0IG5ld192YWx1ZSkgewotICBBdG9taWM2NCByZXN1bHQ7Ci0KLSAgYXNtIHZvbGF0aWxl
ICgKLSAgICAgICIxOiAgICAgbGRhcnggJVtyZXNdLCAlW3plcm9dLCAlW29ial0gICBcblx0IiAg
Ly8gbG9hZCBhbmQgcmVzZXJ2ZQotICAgICAgIiAgICAgICBjbXBkICVbY21wXSwgJVtyZXNdICAg
ICAgICAgICAgIFxuXHQiICAvLyBjb21wYXJlIHZhbHVlcwotICAgICAgIiAgICAgICBibmUtIDJm
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICIgICAgICAgc3RkY3guICVb
dmFsXSwgJVt6ZXJvXSwgJVtvYmpdICBcblx0IiAgLy8gc3RvcmUgdGhlIG5ldyB2YWx1ZQotICAg
ICAgIiAgICAgICBibmUtIDFiICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAi
MjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAg
ICAgOiBbcmVzXSAgIj0mYiIgKHJlc3VsdCkKLSAgICAgICAgICAgICAgOiBbb2JqXSAgImIiICAg
KHB0ciksCi0gICAgICAgICAgICAgICAgW2NtcF0gICJiIiAgIChvbGRfdmFsdWUpLAotICAgICAg
ICAgICAgICAgIFt2YWxdICAiYiIgICAobmV3X3ZhbHVlKSwKLSAgICAgICAgICAgICAgICBbemVy
b10gImkiICAgKDApCi0gICAgICAgICAgICAgIDogImNyMCIsICJjdHIiKTsKLQotICByZXR1cm4g
cmVzdWx0OwotfQotCi1pbmxpbmUgQXRvbWljNjQgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZv
bGF0aWxlIEF0b21pYzY0KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewotICBBdG9taWM2NCByZXN1bHQ7Ci0KLSAgYXNt
IHZvbGF0aWxlICgKLSAgICAgICIxOiAgICAgbGRhcnggJVtyZXNdLCAlW3plcm9dLCAlW29ial0g
ICAgICAgXG5cdCIKLSAgICAgICIgICAgICAgc3RkY3guICVbdmFsXSwgJVt6ZXJvXSwgJVtvYmpd
ICAgICAgXG5cdCIKLSAgICAgICIgICAgICAgYm5lLSAxYiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgOiBbcmVzXSAgIj0mYiIgKHJlc3VsdCkKLSAgICAg
ICAgICAgICAgOiBbb2JqXSAgImIiICAgKHB0ciksCi0gICAgICAgICAgICAgICAgW3ZhbF0gICJi
IiAgIChuZXdfdmFsdWUpLAotICAgICAgICAgICAgICAgIFt6ZXJvXSAiaSIgICAoMCkKLSAgICAg
ICAgICAgICAgOiAiY3IwIiwgImN0ciIpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGlu
ZSBBdG9taWM2NCBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzY0KiBw
dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBp
bmNyZW1lbnQpIHsKLSAgQXRvbWljNjQgcmVzdWx0OwotCi0gIGFzbSB2b2xhdGlsZSAoCi0gICAg
ICAiMTogICAgIGxkYXJ4ICVbcmVzXSwgJVt6ZXJvXSwgJVtvYmpdICAgXG5cdCIgLy8gbG9hZCBh
bmQgcmVzZXJ2ZQotICAgICAgIiAgICAgICBhZGQgJVtyZXNdLCAlW3Jlc10sICVbdmFsXSAgICAg
IFxuXHQiIC8vIGFkZCB0aGUgb3BlcmFuZAotICAgICAgIiAgICAgICBzdGRjeC4gJVtyZXNdLCAl
W3plcm9dLCAlW29ial0gIFxuXHQiIC8vIHN0b3JlIG9sZCB2YWx1ZSBpZgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHJlc2VydmVk
Ci0KLSAgICAgICIgICAgICAgYm5lLSAxYiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0Igot
ICAgICAgICAgICAgICA6IFtyZXNdICAiPSZiIiAocmVzdWx0KQotICAgICAgICAgICAgICA6IFtv
YmpdICAiYiIgICAocHRyKSwKLSAgICAgICAgICAgICAgICBbdmFsXSAgImIiICAgKGluY3JlbWVu
dCksCi0gICAgICAgICAgICAgICAgW3plcm9dICJpIiAgICgwKQotICAgICAgICAgICAgICA6ICJj
cjAiLCAiY3RyIik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIEF0b21pYzY0IEJh
cnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgaW5jcmVtZW50KSB7Ci0KLSAg
QXRvbWljNjQgcmVzdWx0OwotCi0gIGFzbSB2b2xhdGlsZSAoCi0gICAgICAiICAgICAgIGx3c3lu
YyAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgIjE6ICAgICBsZGFyeCAl
W3Jlc10sICVbemVyb10sICVbb2JqXSAgIFxuXHQiIC8vIGxvYWQgYW5kIHJlc2VydmUKLSAgICAg
ICIgICAgICAgYWRkICVbcmVzXSwgJVtyZXNdLCAlW3ZhbF0gICAgICBcblx0IiAvLyBhZGQgdGhl
IG9wZXJhbmQKLSAgICAgICIgICAgICAgc3RkY3guICVbcmVzXSwgJVt6ZXJvXSwgJVtvYmpdICBc
blx0IiAvLyBzdG9yZSBvbGQgdmFsdWUgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCByZXNlcnZlZAotCi0gICAgICAiICAgICAg
IGJuZS0gMWIgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgIiAgICAgICBp
c3luYyAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgIDogW3Jl
c10gICI9JmIiIChyZXN1bHQpCi0gICAgICAgICAgICAgIDogW29ial0gICJiIiAgIChwdHIpLAot
ICAgICAgICAgICAgICAgIFt2YWxdICAiYiIgICAoaW5jcmVtZW50KSwKLSAgICAgICAgICAgICAg
ICBbemVyb10gImkiICAgKDApCi0gICAgICAgICAgICAgIDogImNyMCIsICJjdHIiKTsKLQotICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgQXRvbWljNjQgQWNxdWlyZV9Db21wYXJlQW5kU3dh
cCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIEF0b21pYzY0IHJlc3VsdDsKLQot
ICBhc20gdm9sYXRpbGUgKAotICAgICAgIjE6ICAgICBsZGFyeCAlW3Jlc10sICVbemVyb10sICVb
b2JqXSAgIFxuXHQiICAvLyBsb2FkIGFuZCByZXNlcnZlCi0gICAgICAiICAgICAgIGNtcGQgJVtj
bXBdLCAlW3Jlc10gICAgICAgICAgICAgXG5cdCIgIC8vIGNvbXBhcmUgdmFsdWVzCi0gICAgICAi
ICAgICAgIGJuZS0gMmYgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgIiAg
ICAgICBzdGRjeC4gJVt2YWxdLCAlW3plcm9dLCAlW29ial0gIFxuXHQiICAvLyBzdG9yZSB0aGUg
bmV3IHZhbHVlCi0gICAgICAiICAgICAgIGJuZS0gMWIgICAgICAgICAgICAgICAgICAgICAgICAg
XG5cdCIKLSAgICAgICIgICAgICAgaXN5bmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0
IgotICAgICAgIjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0g
ICAgICAgICAgICAgIDogW3Jlc10gICI9JmIiIChyZXN1bHQpCi0gICAgICAgICAgICAgIDogW29i
al0gICJiIiAgIChwdHIpLAotICAgICAgICAgICAgICAgIFtjbXBdICAiYiIgICAob2xkX3ZhbHVl
KSwKLSAgICAgICAgICAgICAgICBbdmFsXSAgImIiICAgKG5ld192YWx1ZSksCi0gICAgICAgICAg
ICAgICAgW3plcm9dICJpIiAgICgwKQotICAgICAgICAgICAgICA6ICJjcjAiLCAiY3RyIik7Ci0K
LSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIEF0b21pYzY0IFJlbGVhc2VfQ29tcGFyZUFu
ZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewotICBBdG9taWM2NCByZXN1bHQ7
Ci0KLSAgYXNtIHZvbGF0aWxlICgKLSAgICAgICIgICAgICAgbHdzeW5jICAgICAgICAgICAgICAg
ICAgICAgICAgICBcblx0IgotCi0gICAgICAiMTogICAgIGxkYXJ4ICVbcmVzXSwgJVt6ZXJvXSwg
JVtvYmpdICAgXG5cdCIgIC8vIGxvYWQgYW5kIHJlc2VydmUKLSAgICAgICIgICAgICAgY21wZCAl
W2NtcF0sICVbcmVzXSAgICAgICAgICAgICBcblx0IiAgLy8gY29tcGFyZSB2YWx1ZXMKLSAgICAg
ICIgICAgICAgYm5lLSAyZiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAi
ICAgICAgIHN0ZGN4LiAlW3ZhbF0sICVbemVyb10sICVbb2JqXSAgXG5cdCIgIC8vIHN0b3JlIHRo
ZSBuZXcgdmFsdWUKLSAgICAgICIgICAgICAgYm5lLSAxYiAgICAgICAgICAgICAgICAgICAgICAg
ICBcblx0IgotICAgICAgIjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
XHQiCi0gICAgICAgICAgICAgIDogW3Jlc10gICI9JmIiIChyZXN1bHQpCi0gICAgICAgICAgICAg
IDogW29ial0gICJiIiAgIChwdHIpLAotICAgICAgICAgICAgICAgIFtjbXBdICAiYiIgICAob2xk
X3ZhbHVlKSwKLSAgICAgICAgICAgICAgICBbdmFsXSAgImIiICAgKG5ld192YWx1ZSksCi0gICAg
ICAgICAgICAgICAgW3plcm9dICJpIiAgICgwKQotICAgICAgICAgICAgICA6ICJjcjAiLCAiY3Ry
Iik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgTm9CYXJyaWVyX1N0b3Jl
KHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IHZhbHVlKSB7Ci0gICpwdHIgPSB2YWx1
ZTsKLX0KLQotaW5saW5lIHZvaWQgQWNxdWlyZV9TdG9yZSh2b2xhdGlsZSBBdG9taWM2NCogcHRy
LCBBdG9taWM2NCB2YWx1ZSkgewotICBhc20gdm9sYXRpbGUgKAotICAgICAgIiAgICAgICBzdGQg
JVt2YWxdLCAlW29ial0gICAgICAgICAgXG5cdCIKLSAgICAgICIgICAgICAgaXN5bmMgICAgICAg
ICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgIDogW29ial0gIj1tIiAoKnB0cikK
LSAgICAgICAgICAgICAgOiBbdmFsXSAiYiIgICh2YWx1ZSkpOwotfQotCi1pbmxpbmUgdm9pZCBS
ZWxlYXNlX1N0b3JlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IHZhbHVlKSB7Ci0g
IGFzbSB2b2xhdGlsZSAoCi0gICAgICAiICAgICAgIGx3c3luYyAgICAgICAgICAgICAgICAgICAg
ICBcblx0IgotICAgICAgIiAgICAgICBzdGQgJVt2YWxdLCAlW29ial0gICAgICAgICAgXG5cdCIK
LSAgICAgICAgICAgICAgOiBbb2JqXSAiPW0iICgqcHRyKQotICAgICAgICAgICAgICA6IFt2YWxd
ICJiIiAgKHZhbHVlKSk7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJfTG9hZCh2b2xh
dGlsZSBjb25zdCBBdG9taWM2NCogcHRyKSB7Ci0gIHJldHVybiAqcHRyOwotfQotCi1pbmxpbmUg
QXRvbWljNjQgQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIpIHsKLSAg
QXRvbWljNjQgcmVzdWx0OwotCi0gIGFzbSB2b2xhdGlsZSAoCi0gICAgICAiMTogICAgIGxkICVb
cmVzXSwgJVtvYmpdICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiICAgICAgIGNtcGQg
JVtyZXNdLCAlW3Jlc10gICAgICAgICAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBkYXRhCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRl
cGVuZGVuY3kgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGxvYWQvbG9hZCBvcmRlcmluZwotICAgICAgIiAgICAgICBibmUtIDFi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBuZXZlciB0YWtlbgotCi0gICAg
ICAiICAgICAgIGlzeW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAg
ICAgICAgICAgIDogW3Jlc10gICI9YiIgKHJlc3VsdCkKLSAgICAgICAgICAgICAgOiBbb2JqXSAg
Im0iICAoKnB0ciksCi0gICAgICAgICAgICAgICAgW3plcm9dICJpIiAgKDApCi0gICAgICAgICAg
ICAgIDogImNyMCIsICJjdHIiKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgQXRv
bWljNjQgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIpIHsKLSAgQXRv
bWljNjQgcmVzdWx0OwotCi0gIGFzbSB2b2xhdGlsZSAoCi0gICAgICAiICAgICAgIGx3c3luYyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICIxOiAgICAgbGQgJVty
ZXNdLCAlW29ial0gICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICIgICAgICAgY21wZCAl
W3Jlc10sICVbcmVzXSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gY3JlYXRlIGRhdGEKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVw
ZW5kZW5jeSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbG9hZC9sb2FkIG9yZGVyaW5nCi0gICAgICAiICAgICAgIGJuZS0gMWIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIG5ldmVyIHRha2VuCi0gICAgICAg
ICAgICAgIDogW3Jlc10gICI9YiIgKHJlc3VsdCkKLSAgICAgICAgICAgICAgOiBbb2JqXSAgIm0i
ICAoKnB0ciksCi0gICAgICAgICAgICAgICAgW3plcm9dICJpIiAgKDApCi0gICAgICAgICAgICAg
IDogImNyMCIsICJjdHIiKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLX0gIC8v
IG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRF
Uk5BTFNfU1BBUkNfR0NDX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMv
YXRvbWljb3BzX2ludGVybmFsc19wcGNfZ2NjLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMv
YXRvbWljb3BzX2ludGVybmFsc19wcGNfZ2NjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDgyMzFhNTc4ZjMwMmQzYmU4ZmU5MDYzNGIyNTZkN2M3YjBhOTEzYzcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2F0b21pY29wc19pbnRlcm5hbHNfcHBjX2djYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU1
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6
IG9nYWJiYXlAYWR2YW9wdGljYWwuY29tIChPZGVkIEdhYmJheSkKLS8vIENsZWFuZWQgdXAgYnk6
IGJzaWx2ZXIxNjM4NEBnbWFpbC5jb20gKEJyaWFuIFNpbHZlcm1hbikKLS8vCi0vLyBUaGlzIGZp
bGUgaXMgYW4gaW50ZXJuYWwgYXRvbWljIGltcGxlbWVudGF0aW9uLCB1c2UgYXRvbWljb3BzLmgg
aW5zdGVhZC4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BTX0lOVEVSTkFMU19Q
UENfR0NDX0hfCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX1BQ
Q19HQ0NfSF8KLQotI2RlZmluZSBBVE9NSUNPUFNfQ09NUElMRVJfQkFSUklFUigpIF9fYXNtX18g
X192b2xhdGlsZV9fKCIiIDogOiA6ICJtZW1vcnkiKQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi1pbmxpbmUgQXRvbWlj
MzIgTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzMyICpwdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG9sZF92YWx1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3Zh
bHVlKSB7Ci0gIEF0b21pYzMyIHByZXY7Ci0KLSAgX19hc21fXyBfX3ZvbGF0aWxlX18oCi0gICAg
ICAiMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJsd2Fy
eCAlW3ByZXZdLDAsJVtwdHJdICAgICAgICAgICAgICBcblx0IgotICAgICAgImNtcHcgMCwlW3By
ZXZdLCVbb2xkX3ZhbHVlXSAgICAgICAgIFxuXHQiCi0gICAgICAiYm5lLSAxZiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJzdHdjeC4gJVtuZXdfdmFsdWVdLDAsJVtw
dHJdICAgICAgICBcblx0IgotICAgICAgImJuZS0gMGIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuXHQiCi0gICAgICAiMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5c
dCIKLSAgICAgIDogW3ByZXZdICI9JnIiKHByZXYpLCAiK20iKCpwdHIpCi0gICAgICA6IFtwdHJd
ICJyIihwdHIpLCBbb2xkX3ZhbHVlXSAiciIob2xkX3ZhbHVlKSwgW25ld192YWx1ZV0gInIiKG5l
d192YWx1ZSkKLSAgICAgIDogImNjIiwgIm1lbW9yeSIpOwotCi0gIHJldHVybiBwcmV2OwotfQot
Ci1pbmxpbmUgQXRvbWljMzIgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21p
YzMyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21p
YzMyIG5ld192YWx1ZSkgewotICBBdG9taWMzMiBvbGQ7Ci0KLSAgX19hc21fXyBfX3ZvbGF0aWxl
X18oCi0gICAgICAiMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAg
ICAgICJsd2FyeCAlW29sZF0sMCwlW3B0cl0gICAgICAgICAgICAgICBcblx0IgotICAgICAgInN0
d2N4LiAlW25ld192YWx1ZV0sMCwlW3B0cl0gICAgICAgIFxuXHQiCi0gICAgICAiYm5lLSAwYiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgIDogW29sZF0gIj0mciIob2xk
KSwgIittIigqcHRyKQotICAgICAgOiBbcHRyXSAiciIocHRyKSwgW25ld192YWx1ZV0gInIiKG5l
d192YWx1ZSkKLSAgICAgIDogImNjIiwgIm1lbW9yeSIpOwotCi0gIHJldHVybiBvbGQ7Ci19Ci0K
LWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21p
YzMyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9t
aWMzMiBpbmNyZW1lbnQpIHsKLSAgQXRvbWljMzIgdGVtcDsKLQotICBfX2FzbV9fIF9fdm9sYXRp
bGVfXygKLSAgICAgICIwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0Igot
ICAgICAgImx3YXJ4ICVbdGVtcF0sMCwlW3B0cl0gICAgICAgICAgICAgIFxuXHQiCi0gICAgICAi
YWRkICVbdGVtcF0sJVtpbmNyZW1lbnRdLCVbdGVtcF0gICAgXG5cdCIKLSAgICAgICJzdHdjeC4g
JVt0ZW1wXSwwLCVbcHRyXSAgICAgICAgICAgICBcblx0IgotICAgICAgImJuZS0gMGIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICA6IFt0ZW1wXSAiPSZyIih0ZW1wKQot
ICAgICAgOiBbaW5jcmVtZW50XSAiciIoaW5jcmVtZW50KSwgW3B0cl0gInIiKHB0cikKLSAgICAg
IDogImNjIiwgIm1lbW9yeSIpOwotCi0gIHJldHVybiB0ZW1wOwotfQotCi1pbmxpbmUgQXRvbWlj
MzIgQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljMzIgKnB0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpIHsK
LSAgTWVtb3J5QmFycmllcigpOwotICBBdG9taWMzMiByZXMgPSBOb0JhcnJpZXJfQXRvbWljSW5j
cmVtZW50KHB0ciwgaW5jcmVtZW50KTsKLSAgTWVtb3J5QmFycmllcigpOwotICByZXR1cm4gcmVz
OwotfQotCi1pbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBB
dG9taWMzMiAqcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRv
bWljMzIgb2xkX3ZhbHVlLCBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRvbWljMzIgcmVzID0g
Tm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpOwotICBN
ZW1vcnlCYXJyaWVyKCk7Ci0gIHJldHVybiByZXM7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBSZWxl
YXNlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzMyICpwdHIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUsIEF0b21pYzMyIG5l
d192YWx1ZSkgewotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIEF0b21pYzMyIHJlcyA9IE5vQmFycmll
cl9Db21wYXJlQW5kU3dhcChwdHIsIG9sZF92YWx1ZSwgbmV3X3ZhbHVlKTsKLSAgcmV0dXJuIHJl
czsKLX0KLQotaW5saW5lIHZvaWQgTm9CYXJyaWVyX1N0b3JlKHZvbGF0aWxlIEF0b21pYzMyICpw
dHIsIEF0b21pYzMyIHZhbHVlKSB7Ci0gICpwdHIgPSB2YWx1ZTsKLX0KLQotaW5saW5lIHZvaWQg
TWVtb3J5QmFycmllcigpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiIDogOiA6ICJtZW1v
cnkiKTsgfQotCi1pbmxpbmUgdm9pZCBBY3F1aXJlX1N0b3JlKHZvbGF0aWxlIEF0b21pYzMyICpw
dHIsIEF0b21pYzMyIHZhbHVlKSB7Ci0gICpwdHIgPSB2YWx1ZTsKLSAgTWVtb3J5QmFycmllcigp
OwotfQotCi1pbmxpbmUgdm9pZCBSZWxlYXNlX1N0b3JlKHZvbGF0aWxlIEF0b21pYzMyICpwdHIs
IEF0b21pYzMyIHZhbHVlKSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgKnB0ciA9IHZhbHVlOwot
fQotCi1pbmxpbmUgQXRvbWljMzIgTm9CYXJyaWVyX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWlj
MzIgKnB0cikgeyByZXR1cm4gKnB0cjsgfQotCi1pbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Mb2Fk
KHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyICpwdHIpIHsKLSAgQXRvbWljMzIgdmFsdWUgPSAqcHRy
OwotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotaW5saW5lIEF0b21p
YzMyIFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiAqcHRyKSB7Ci0gIE1lbW9y
eUJhcnJpZXIoKTsKLSAgcmV0dXJuICpwdHI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5h
bAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSN1
bmRlZiBBVE9NSUNPUFNfQ09NUElMRVJfQkFSUklFUgotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9U
T0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX1BQQ19HQ0NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3NvbGFyaXMuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3NvbGFyaXMuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwNTdlY2RlYWJmNzdlMmU2MzQ0OWRkNTJkOTljZWQ5YzQ2
M2RjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19zb2xhcmlzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLS8vIFRoaXMgZmlsZSBpcyBhbiBpbnRlcm5hbCBhdG9taWMgaW1wbGVtZW50YXRpb24s
IHVzZSBhdG9taWNvcHMuaCBpbnN0ZWFkLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9BVE9N
SUNPUFNfSU5URVJOQUxTX1NQQVJDX0dDQ19IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQVRP
TUlDT1BTX0lOVEVSTkFMU19TUEFSQ19HQ0NfSF8KLQotI2luY2x1ZGUgPGF0b21pYy5oPgotCi1u
YW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJu
YWwgewotCi1pbmxpbmUgQXRvbWljMzIgTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxl
IEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEF0b21pYzMyIG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIHJldHVybiAoQXRvbWljMzIpYXRvbWljX2Nh
c18zMigodm9sYXRpbGUgdWludDMyX3QqKXB0ciwgKHVpbnQzMl90KW9sZF92YWx1ZSwgKHVpbnQz
Ml90KW5ld192YWx1ZSk7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljRXhj
aGFuZ2Uodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIHJldHVybiAoQXRvbWljMzIp
YXRvbWljX3N3YXBfMzIoKHZvbGF0aWxlIHVpbnQzMl90KilwdHIsICh1aW50MzJfdCluZXdfdmFs
dWUpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgTm9CYXJyaWVyX0F0b21pY0luY3JlbWVudCh2b2xh
dGlsZSBBdG9taWMzMiogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXRvbWljMzIgaW5jcmVtZW50KSB7Ci0gIHJldHVybiAoQXRvbWljMzIpYXRvbWljX2Fk
ZF8zMl9udigodm9sYXRpbGUgdWludDMyX3QqKXB0ciwgKHVpbnQzMl90KWluY3JlbWVudCk7Ci19
Ci0KLWlubGluZSB2b2lkIE1lbW9yeUJhcnJpZXIodm9pZCkgewotCW1lbWJhcl9wcm9kdWNlcigp
OwotCW1lbWJhcl9jb25zdW1lcigpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgQmFycmllcl9BdG9t
aWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpIHsKLSAgTWVtb3J5QmFycmll
cigpOwotICBBdG9taWMzMiByZXQgPSBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHB0ciwgaW5j
cmVtZW50KTsKLSAgTWVtb3J5QmFycmllcigpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWlubGlu
ZSBBdG9taWMzMiBBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBuZXdf
dmFsdWUpIHsKLSAgQXRvbWljMzIgcmV0ID0gTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHB0ciwg
b2xkX3ZhbHVlLCBuZXdfdmFsdWUpOwotICBNZW1vcnlCYXJyaWVyKCk7Ci0KLSAgcmV0dXJuIHJl
dDsKLX0KLQotaW5saW5lIEF0b21pYzMyIFJlbGVhc2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUg
QXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0
b21pYzMyIG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEF0b21pYzMyIG5ld192YWx1ZSkgewotICBNZW1vcnlCYXJyaWVyKCk7Ci0gIHJldHVybiBOb0Jh
cnJpZXJfQ29tcGFyZUFuZFN3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk7Ci19Ci0KLWlu
bGluZSB2b2lkIE5vQmFycmllcl9TdG9yZSh2b2xhdGlsZSBBdG9taWMzMiogcHRyLCBBdG9taWMz
MiB2YWx1ZSkgewotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3Rv
cmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgKnB0ciA9IHZh
bHVlOwotICBtZW1iYXJfcHJvZHVjZXIoKTsKLX0KLQotaW5saW5lIHZvaWQgUmVsZWFzZV9TdG9y
ZSh2b2xhdGlsZSBBdG9taWMzMiogcHRyLCBBdG9taWMzMiB2YWx1ZSkgewotICBtZW1iYXJfY29u
c3VtZXIoKTsKLSAgKnB0ciA9IHZhbHVlOwotfQotCi1pbmxpbmUgQXRvbWljMzIgTm9CYXJyaWVy
X0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIqIHB0cikgewotICByZXR1cm4gKnB0cjsKLX0K
LQotaW5saW5lIEF0b21pYzMyIEFjcXVpcmVfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiog
cHRyKSB7Ci0gIEF0b21pYzMyIHZhbCA9ICpwdHI7Ci0gIG1lbWJhcl9jb25zdW1lcigpOwotICBy
ZXR1cm4gdmFsOwotfQotCi1pbmxpbmUgQXRvbWljMzIgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNv
bnN0IEF0b21pYzMyKiBwdHIpIHsKLSAgbWVtYmFyX3Byb2R1Y2VyKCk7Ci0gIHJldHVybiAqcHRy
OwotfQotCi0jaWZkZWYgR09PR0xFX1BST1RPQlVGX0FSQ0hfNjRfQklUCi1pbmxpbmUgQXRvbWlj
NjQgTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3Zh
bHVlKSB7Ci0gIHJldHVybiBhdG9taWNfY2FzXzY0KCh2b2xhdGlsZSB1aW50NjRfdCopcHRyLCAo
dWludDY0X3Qpb2xkX3ZhbHVlLCAodWludDY0X3QpbmV3X3ZhbHVlKTsKLX0KLQotaW5saW5lIEF0
b21pYzY0IE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSh2b2xhdGlsZSBBdG9taWM2NCogcHRyLCBB
dG9taWM2NCBuZXdfdmFsdWUpIHsKLSAgcmV0dXJuIGF0b21pY19zd2FwXzY0KCh2b2xhdGlsZSB1
aW50NjRfdCopcHRyLCAodWludDY0X3QpbmV3X3ZhbHVlKTsKLX0KLQotaW5saW5lIEF0b21pYzY0
IE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwgQXRvbWlj
NjQgaW5jcmVtZW50KSB7Ci0gIHJldHVybiBhdG9taWNfYWRkXzY0X252KCh2b2xhdGlsZSB1aW50
NjRfdCopcHRyLCBpbmNyZW1lbnQpOwotfQotCi1pbmxpbmUgQXRvbWljNjQgQmFycmllcl9BdG9t
aWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwgQXRvbWljNjQgaW5jcmVtZW50KSB7
Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgQXRvbWljNjQgcmV0ID0gYXRvbWljX2FkZF82NF9udigo
dm9sYXRpbGUgdWludDY0X3QqKXB0ciwgaW5jcmVtZW50KTsKLSAgTWVtb3J5QmFycmllcigpOwot
ICByZXR1cm4gcmV0OwotfQotCi1pbmxpbmUgQXRvbWljNjQgQWNxdWlyZV9Db21wYXJlQW5kU3dh
cCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIEF0b21pYzY0IHJldCA9IE5vQmFy
cmllcl9Db21wYXJlQW5kU3dhcChwdHIsIG9sZF92YWx1ZSwgbmV3X3ZhbHVlKTsKLSAgTWVtb3J5
QmFycmllcigpOwotICByZXR1cm4gcmV0OwotfQotCi1pbmxpbmUgQXRvbWljNjQgUmVsZWFzZV9D
b21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIE1lbW9yeUJh
cnJpZXIoKTsKLSAgcmV0dXJuIE5vQmFycmllcl9Db21wYXJlQW5kU3dhcChwdHIsIG9sZF92YWx1
ZSwgbmV3X3ZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgTm9CYXJyaWVyX1N0b3JlKHZvbGF0aWxl
IEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IHZhbHVlKSB7Ci0gICpwdHIgPSB2YWx1ZTsKLX0KLQot
aW5saW5lIHZvaWQgQWNxdWlyZV9TdG9yZSh2b2xhdGlsZSBBdG9taWM2NCogcHRyLCBBdG9taWM2
NCB2YWx1ZSkgewotICAqcHRyID0gdmFsdWU7Ci0gIG1lbWJhcl9wcm9kdWNlcigpOwotfQotCi1p
bmxpbmUgdm9pZCBSZWxlYXNlX1N0b3JlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0
IHZhbHVlKSB7Ci0gIG1lbWJhcl9jb25zdW1lcigpOwotICAqcHRyID0gdmFsdWU7Ci19Ci0KLWlu
bGluZSBBdG9taWM2NCBOb0JhcnJpZXJfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2NCogcHRy
KSB7Ci0gIHJldHVybiAqcHRyOwotfQotCi1pbmxpbmUgQXRvbWljNjQgQWNxdWlyZV9Mb2FkKHZv
bGF0aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIpIHsKLSAgQXRvbWljNjQgcmV0ID0gKnB0cjsKLSAg
bWVtYmFyX2NvbnN1bWVyKCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBS
ZWxlYXNlX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljNjQqIHB0cikgewotICBtZW1iYXJfcHJv
ZHVjZXIoKTsKLSAgcmV0dXJuICpwdHI7Ci19Ci0jZW5kaWYKLQotfSAgLy8gbmFtZXNwYWNlIGlu
dGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUK
LQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BTX0lOVEVSTkFMU19TUEFSQ19H
Q0NfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19p
bnRlcm5hbHNfdHNhbi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRl
cm5hbHNfdHNhbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzkwMzU0NWNkMzQy
ZWM4MzA2OTYxNDZlYzQ4MGMzNjI1MjllOGRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50
ZXJuYWxzX3RzYW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDEzIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVGhpcyBmaWxlIGlzIGFuIGludGVybmFsIGF0
b21pYyBpbXBsZW1lbnRhdGlvbiBmb3IgY29tcGlsZXItYmFzZWQKLS8vIFRocmVhZFNhbml0aXpl
ciAoaHR0cDovL2NsYW5nLmxsdm0ub3JnL2RvY3MvVGhyZWFkU2FuaXRpemVyLmh0bWwpLgotLy8g
VXNlIGF0b21pY29wcy5oIGluc3RlYWQuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0FUT01J
Q09QU19JTlRFUk5BTFNfVFNBTl9IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BT
X0lOVEVSTkFMU19UU0FOX0hfCi0KLSNkZWZpbmUgQVRPTUlDT1BTX0NPTVBJTEVSX0JBUlJJRVIo
KSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6IDogOiAibWVtb3J5IikKLQotI2luY2x1ZGUgPHNh
bml0aXplci90c2FuX2ludGVyZmFjZV9hdG9taWMuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1u
YW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGludGVybmFsIHsKLQotaW5saW5lIEF0b21p
YzMyIE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiAqcHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG5ld192
YWx1ZSkgewotICBBdG9taWMzMiBjbXAgPSBvbGRfdmFsdWU7Ci0gIF9fdHNhbl9hdG9taWMzMl9j
b21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhwdHIsICZjbXAsIG5ld192YWx1ZSwKLSAgICAgIF9fdHNh
bl9tZW1vcnlfb3JkZXJfcmVsYXhlZCwgX190c2FuX21lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAg
cmV0dXJuIGNtcDsKLX0KLQotaW5saW5lIEF0b21pYzMyIE5vQmFycmllcl9BdG9taWNFeGNoYW5n
ZSh2b2xhdGlsZSBBdG9taWMzMiAqcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgcmV0dXJuIF9fdHNhbl9hdG9taWMz
Ml9leGNoYW5nZShwdHIsIG5ld192YWx1ZSwKLSAgICAgIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVs
YXhlZCk7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBBY3F1aXJlX0F0b21pY0V4Y2hhbmdlKHZvbGF0
aWxlIEF0b21pYzMyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgcmV0dXJuIF9fdHNhbl9hdG9taWMzMl9leGNoYW5n
ZShwdHIsIG5ld192YWx1ZSwKLSAgICAgIF9fdHNhbl9tZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci19
Ci0KLWlubGluZSBBdG9taWMzMiBSZWxlYXNlX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21p
YzMyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMz
MiBuZXdfdmFsdWUpIHsKLSAgcmV0dXJuIF9fdHNhbl9hdG9taWMzMl9leGNoYW5nZShwdHIsIG5l
d192YWx1ZSwKLSAgICAgIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci19Ci0KLWlubGlu
ZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzMyICpw
dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBp
bmNyZW1lbnQpIHsKLSAgcmV0dXJuIGluY3JlbWVudCArIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9h
ZGQocHRyLCBpbmNyZW1lbnQsCi0gICAgICBfX3RzYW5fbWVtb3J5X29yZGVyX3JlbGF4ZWQpOwot
fQotCi1pbmxpbmUgQXRvbWljMzIgQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRv
bWljMzIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9t
aWMzMiBpbmNyZW1lbnQpIHsKLSAgcmV0dXJuIGluY3JlbWVudCArIF9fdHNhbl9hdG9taWMzMl9m
ZXRjaF9hZGQocHRyLCBpbmNyZW1lbnQsCi0gICAgICBfX3RzYW5fbWVtb3J5X29yZGVyX2FjcV9y
ZWwpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Db21wYXJlQW5kU3dhcCh2b2xhdGls
ZSBBdG9taWMzMiAqcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIEF0b21pYzMyIGNtcCA9IG9sZF92YWx1ZTsKLSAg
X190c2FuX2F0b21pYzMyX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHB0ciwgJmNtcCwgbmV3X3Zh
bHVlLAotICAgICAgX190c2FuX21lbW9yeV9vcmRlcl9hY3F1aXJlLCBfX3RzYW5fbWVtb3J5X29y
ZGVyX2FjcXVpcmUpOwotICByZXR1cm4gY21wOwotfQotCi1pbmxpbmUgQXRvbWljMzIgUmVsZWFz
ZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiAqcHRyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIEF0b21p
YzMyIGNtcCA9IG9sZF92YWx1ZTsKLSAgX190c2FuX2F0b21pYzMyX2NvbXBhcmVfZXhjaGFuZ2Vf
c3Ryb25nKHB0ciwgJmNtcCwgbmV3X3ZhbHVlLAotICAgICAgX190c2FuX21lbW9yeV9vcmRlcl9y
ZWxlYXNlLCBfX3RzYW5fbWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICByZXR1cm4gY21wOwotfQot
Ci1pbmxpbmUgdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIgKnB0ciwgQXRv
bWljMzIgdmFsdWUpIHsKLSAgX190c2FuX2F0b21pYzMyX3N0b3JlKHB0ciwgdmFsdWUsIF9fdHNh
bl9tZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUo
dm9sYXRpbGUgQXRvbWljMzIgKnB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgX190c2FuX2F0b21p
YzMyX3N0b3JlKHB0ciwgdmFsdWUsIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gIF9f
dHNhbl9hdG9taWNfdGhyZWFkX2ZlbmNlKF9fdHNhbl9tZW1vcnlfb3JkZXJfc2VxX2NzdCk7Ci19
Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIgKnB0ciwgQXRv
bWljMzIgdmFsdWUpIHsKLSAgX190c2FuX2F0b21pYzMyX3N0b3JlKHB0ciwgdmFsdWUsIF9fdHNh
bl9tZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJf
TG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiAqcHRyKSB7Ci0gIHJldHVybiBfX3RzYW5fYXRv
bWljMzJfbG9hZChwdHIsIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci19Ci0KLWlubGlu
ZSBBdG9taWMzMiBBY3F1aXJlX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIgKnB0cikgewot
ICByZXR1cm4gX190c2FuX2F0b21pYzMyX2xvYWQocHRyLCBfX3RzYW5fbWVtb3J5X29yZGVyX2Fj
cXVpcmUpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0
IEF0b21pYzMyICpwdHIpIHsKLSAgX190c2FuX2F0b21pY190aHJlYWRfZmVuY2UoX190c2FuX21l
bW9yeV9vcmRlcl9zZXFfY3N0KTsKLSAgcmV0dXJuIF9fdHNhbl9hdG9taWMzMl9sb2FkKHB0ciwg
X190c2FuX21lbW9yeV9vcmRlcl9yZWxheGVkKTsKLX0KLQotaW5saW5lIEF0b21pYzY0IE5vQmFy
cmllcl9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWM2NCAqcHRyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBvbGRfdmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewot
ICBBdG9taWM2NCBjbXAgPSBvbGRfdmFsdWU7Ci0gIF9fdHNhbl9hdG9taWM2NF9jb21wYXJlX2V4
Y2hhbmdlX3N0cm9uZyhwdHIsICZjbXAsIG5ld192YWx1ZSwKLSAgICAgIF9fdHNhbl9tZW1vcnlf
b3JkZXJfcmVsYXhlZCwgX190c2FuX21lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgcmV0dXJuIGNt
cDsKLX0KLQotaW5saW5lIEF0b21pYzY0IE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSh2b2xhdGls
ZSBBdG9taWM2NCAqcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWM2NCBuZXdfdmFsdWUpIHsKLSAgcmV0dXJuIF9fdHNhbl9hdG9taWM2NF9leGNoYW5n
ZShwdHIsIG5ld192YWx1ZSwgX190c2FuX21lbW9yeV9vcmRlcl9yZWxheGVkKTsKLX0KLQotaW5s
aW5lIEF0b21pYzY0IEFjcXVpcmVfQXRvbWljRXhjaGFuZ2Uodm9sYXRpbGUgQXRvbWljNjQgKnB0
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192
YWx1ZSkgewotICByZXR1cm4gX190c2FuX2F0b21pYzY0X2V4Y2hhbmdlKHB0ciwgbmV3X3ZhbHVl
LCBfX3RzYW5fbWVtb3J5X29yZGVyX2FjcXVpcmUpOwotfQotCi1pbmxpbmUgQXRvbWljNjQgUmVs
ZWFzZV9BdG9taWNFeGNoYW5nZSh2b2xhdGlsZSBBdG9taWM2NCAqcHRyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIHJldHVy
biBfX3RzYW5fYXRvbWljNjRfZXhjaGFuZ2UocHRyLCBuZXdfdmFsdWUsIF9fdHNhbl9tZW1vcnlf
b3JkZXJfcmVsZWFzZSk7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJfQXRvbWljSW5j
cmVtZW50KHZvbGF0aWxlIEF0b21pYzY0ICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBdG9taWM2NCBpbmNyZW1lbnQpIHsKLSAgcmV0dXJuIGluY3JlbWVu
dCArIF9fdHNhbl9hdG9taWM2NF9mZXRjaF9hZGQocHRyLCBpbmNyZW1lbnQsCi0gICAgICBfX3Rz
YW5fbWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotfQotCi1pbmxpbmUgQXRvbWljNjQgQmFycmllcl9B
dG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljNjQgKnB0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBpbmNyZW1lbnQpIHsKLSAgcmV0dXJuIGlu
Y3JlbWVudCArIF9fdHNhbl9hdG9taWM2NF9mZXRjaF9hZGQocHRyLCBpbmNyZW1lbnQsCi0gICAg
ICBfX3RzYW5fbWVtb3J5X29yZGVyX2FjcV9yZWwpOwotfQotCi1pbmxpbmUgdm9pZCBOb0JhcnJp
ZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljNjQgKnB0ciwgQXRvbWljNjQgdmFsdWUpIHsKLSAgX190
c2FuX2F0b21pYzY0X3N0b3JlKHB0ciwgdmFsdWUsIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWljNjQgKnB0
ciwgQXRvbWljNjQgdmFsdWUpIHsKLSAgX190c2FuX2F0b21pYzY0X3N0b3JlKHB0ciwgdmFsdWUs
IF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gIF9fdHNhbl9hdG9taWNfdGhyZWFkX2Zl
bmNlKF9fdHNhbl9tZW1vcnlfb3JkZXJfc2VxX2NzdCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbGVh
c2VfU3RvcmUodm9sYXRpbGUgQXRvbWljNjQgKnB0ciwgQXRvbWljNjQgdmFsdWUpIHsKLSAgX190
c2FuX2F0b21pYzY0X3N0b3JlKHB0ciwgdmFsdWUsIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsZWFz
ZSk7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJfTG9hZCh2b2xhdGlsZSBjb25zdCBB
dG9taWM2NCAqcHRyKSB7Ci0gIHJldHVybiBfX3RzYW5fYXRvbWljNjRfbG9hZChwdHIsIF9fdHNh
bl9tZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBBY3F1aXJlX0xv
YWQodm9sYXRpbGUgY29uc3QgQXRvbWljNjQgKnB0cikgewotICByZXR1cm4gX190c2FuX2F0b21p
YzY0X2xvYWQocHRyLCBfX3RzYW5fbWVtb3J5X29yZGVyX2FjcXVpcmUpOwotfQotCi1pbmxpbmUg
QXRvbWljNjQgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0ICpwdHIpIHsKLSAg
X190c2FuX2F0b21pY190aHJlYWRfZmVuY2UoX190c2FuX21lbW9yeV9vcmRlcl9zZXFfY3N0KTsK
LSAgcmV0dXJuIF9fdHNhbl9hdG9taWM2NF9sb2FkKHB0ciwgX190c2FuX21lbW9yeV9vcmRlcl9y
ZWxheGVkKTsKLX0KLQotaW5saW5lIEF0b21pYzY0IEFjcXVpcmVfQ29tcGFyZUFuZFN3YXAodm9s
YXRpbGUgQXRvbWljNjQgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewotICBBdG9taWM2NCBjbXAgPSBvbGRfdmFsdWU7
Ci0gIF9fdHNhbl9hdG9taWM2NF9jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhwdHIsICZjbXAsIG5l
d192YWx1ZSwKLSAgICAgIF9fdHNhbl9tZW1vcnlfb3JkZXJfYWNxdWlyZSwgX190c2FuX21lbW9y
eV9vcmRlcl9hY3F1aXJlKTsKLSAgcmV0dXJuIGNtcDsKLX0KLQotaW5saW5lIEF0b21pYzY0IFJl
bGVhc2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQgKnB0ciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewotICBB
dG9taWM2NCBjbXAgPSBvbGRfdmFsdWU7Ci0gIF9fdHNhbl9hdG9taWM2NF9jb21wYXJlX2V4Y2hh
bmdlX3N0cm9uZyhwdHIsICZjbXAsIG5ld192YWx1ZSwKLSAgICAgIF9fdHNhbl9tZW1vcnlfb3Jk
ZXJfcmVsZWFzZSwgX190c2FuX21lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgcmV0dXJuIGNtcDsK
LX0KLQotaW5saW5lIHZvaWQgTWVtb3J5QmFycmllcigpIHsKLSAgX190c2FuX2F0b21pY190aHJl
YWRfZmVuY2UoX190c2FuX21lbW9yeV9vcmRlcl9zZXFfY3N0KTsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKLQotI3VuZGVmIEFUT01JQ09QU19DT01QSUxFUl9CQVJSSUVSCi0KLSNlbmRpZiAgLy8g
R09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRFUk5BTFNfVFNBTl9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfeDg2X2djYy5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3g4Nl9nY2MuY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYzllYWUwZmE3M2ZjYWJhYzNmNmFjYjQ5
MzEzMGU3NTRkMjE2OWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfeDg2X2dj
Yy5jYworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDEyIEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotLy8gVGhpcyBtb2R1bGUgZ2V0cyBlbm91Z2ggQ1BVIGluZm9ybWF0
aW9uIHRvIG9wdGltaXplIHRoZQotLy8gYXRvbWljb3BzIG1vZHVsZSBvbiB4ODYuCi0KLSNpbmNs
dWRlIDxjc3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29w
cy5oPgotCi0vLyBUaGlzIGZpbGUgb25seSBtYWtlcyBzZW5zZSB3aXRoIGF0b21pY29wc19pbnRl
cm5hbHNfeDg2X2djYy5oIC0tIGl0Ci0vLyBkZXBlbmRzIG9uIHN0cnVjdHMgdGhhdCBhcmUgZGVm
aW5lZCBpbiB0aGF0IGZpbGUuICBJZiBhdG9taWNvcHMuaAotLy8gZG9lc24ndCBzdWItaW5jbHVk
ZSB0aGF0IGZpbGUsIHRoZW4gd2UgYXJlbid0IG5lZWRlZCwgYW5kIHNob3VsZG4ndAotLy8gdHJ5
IHRvIGRvIGFueXRoaW5nLgotI2lmZGVmIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJO
QUxTX1g4Nl9HQ0NfSF8KLQotLy8gSW5saW5lIGNwdWlkIGluc3RydWN0aW9uLiAgSW4gUElDIGNv
bXBpbGF0aW9ucywgJWVieCBjb250YWlucyB0aGUgYWRkcmVzcwotLy8gb2YgdGhlIGdsb2JhbCBv
ZmZzZXQgdGFibGUuICBUbyBhdm9pZCBicmVha2luZyBzdWNoIGV4ZWN1dGFibGVzLCB0aGlzIGNv
ZGUKLS8vIG11c3QgcHJlc2VydmUgdGhhdCByZWdpc3RlcidzIHZhbHVlIGFjcm9zcyBjcHVpZCBp
bnN0cnVjdGlvbnMuCi0jaWYgZGVmaW5lZChfX2kzODZfXykKLSNkZWZpbmUgY3B1aWQoYSwgYiwg
YywgZCwgaW5wKSBcCi0gIGFzbSgibW92ICUlZWJ4LCAlJWVkaVxuIiAgICAgXAotICAgICAgImNw
dWlkXG4iICAgICAgICAgICAgICAgIFwKLSAgICAgICJ4Y2hnICUlZWRpLCAlJWVieFxuIiAgICBc
Ci0gICAgICA6ICI9YSIgKGEpLCAiPUQiIChiKSwgIj1jIiAoYyksICI9ZCIgKGQpIDogImEiIChp
bnApKQotI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotI2RlZmluZSBjcHVpZChhLCBiLCBjLCBk
LCBpbnApIFwKLSAgYXNtKCJtb3YgJSVyYngsICUlcmRpXG4iICAgICBcCi0gICAgICAiY3B1aWRc
biIgICAgICAgICAgICAgICAgXAotICAgICAgInhjaGcgJSVyZGksICUlcmJ4XG4iICAgIFwKLSAg
ICAgIDogIj1hIiAoYSksICI9RCIgKGIpLCAiPWMiIChjKSwgIj1kIiAoZCkgOiAiYSIgKGlucCkp
Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoY3B1aWQpICAgICAgICAvLyBpbml0aWFsaXplIHRoZSBz
dHJ1Y3Qgb25seSBvbiB4ODYKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9i
dWYgewotbmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gU2V0IHRoZSBmbGFncyBzbyB0aGF0IGNv
ZGUgd2lsbCBydW4gY29ycmVjdGx5IGFuZCBjb25zZXJ2YXRpdmVseSwgc28gZXZlbgotLy8gaWYg
d2UgaGF2ZW4ndCBiZWVuIGluaXRpYWxpemVkIHlldCwgd2UncmUgcHJvYmFibHkgc2luZ2xlIHRo
cmVhZGVkLCBhbmQgb3VyCi0vLyBkZWZhdWx0IHZhbHVlcyBzaG91bGQgaG9wZWZ1bGx5IGJlIHBy
ZXR0eSBzYWZlLgotc3RydWN0IEF0b21pY09wc194ODZDUFVGZWF0dXJlU3RydWN0IEF0b21pY09w
c19JbnRlcm5hbHg4NkNQVUZlYXR1cmVzID0gewotICBmYWxzZSwgICAgICAgICAgLy8gYnVnIGNh
bid0IGV4aXN0IGJlZm9yZSBwcm9jZXNzIHNwYXducyBtdWx0aXBsZSB0aHJlYWRzCi0gIGZhbHNl
LCAgICAgICAgICAvLyBubyBTU0UyCi19OwotCi1uYW1lc3BhY2UgewotCi0vLyBJbml0aWFsaXpl
IHRoZSBBdG9taWNPcHNfSW50ZXJuYWx4ODZDUFVGZWF0dXJlcyBzdHJ1Y3QuCi12b2lkIEF0b21p
Y09wc19JbnRlcm5hbHg4NkNQVUZlYXR1cmVzSW5pdCgpIHsKLSAgdWludDMyX3QgZWF4OwotICB1
aW50MzJfdCBlYng7Ci0gIHVpbnQzMl90IGVjeDsKLSAgdWludDMyX3QgZWR4OwotCi0gIC8vIEdl
dCB2ZW5kb3Igc3RyaW5nIChpc3N1ZSBDUFVJRCB3aXRoIGVheCA9IDApCi0gIGNwdWlkKGVheCwg
ZWJ4LCBlY3gsIGVkeCwgMCk7Ci0gIGNoYXIgdmVuZG9yWzEzXTsKLSAgbWVtY3B5KHZlbmRvciwg
JmVieCwgNCk7Ci0gIG1lbWNweSh2ZW5kb3IgKyA0LCAmZWR4LCA0KTsKLSAgbWVtY3B5KHZlbmRv
ciArIDgsICZlY3gsIDQpOwotICB2ZW5kb3JbMTJdID0gMDsKLQotICAvLyBnZXQgZmVhdHVyZSBm
bGFncyBpbiBlY3gvZWR4LCBhbmQgZmFtaWx5L21vZGVsIGluIGVheAotICBjcHVpZChlYXgsIGVi
eCwgZWN4LCBlZHgsIDEpOwotCi0gIGludCBmYW1pbHkgPSAoZWF4ID4+IDgpICYgMHhmOyAgICAg
ICAgLy8gZmFtaWx5IGFuZCBtb2RlbCBmaWVsZHMKLSAgaW50IG1vZGVsID0gKGVheCA+PiA0KSAm
IDB4ZjsKLSAgaWYgKGZhbWlseSA9PSAweGYpIHsgICAgICAgICAgICAgICAgICAvLyB1c2UgZXh0
ZW5kZWQgZmFtaWx5IGFuZCBtb2RlbCBmaWVsZHMKLSAgICBmYW1pbHkgKz0gKGVheCA+PiAyMCkg
JiAweGZmOwotICAgIG1vZGVsICs9ICgoZWF4ID4+IDE2KSAmIDB4ZikgPDwgNDsKLSAgfQotCi0g
IC8vIE9wdGVyb24gUmV2IEUgaGFzIGEgYnVnIGluIHdoaWNoIG9uIHZlcnkgcmFyZSBvY2Nhc2lv
bnMgYSBsb2NrZWQKLSAgLy8gaW5zdHJ1Y3Rpb24gZG9lc24ndCBhY3QgYXMgYSByZWFkLWFjcXVp
cmUgYmFycmllciBpZiBmb2xsb3dlZCBieSBhCi0gIC8vIG5vbi1sb2NrZWQgcmVhZC1tb2RpZnkt
d3JpdGUgaW5zdHJ1Y3Rpb24uICBSZXYgRiBoYXMgdGhpcyBidWcgaW4KLSAgLy8gcHJlLXJlbGVh
c2UgdmVyc2lvbnMsIGJ1dCBub3QgaW4gdmVyc2lvbnMgcmVsZWFzZWQgdG8gY3VzdG9tZXJzLAot
ICAvLyBzbyB3ZSB0ZXN0IG9ubHkgZm9yIFJldiBFLCB3aGljaCBpcyBmYW1pbHkgMTUsIG1vZGVs
IDMyLi42MyBpbmNsdXNpdmUuCi0gIGlmIChzdHJjbXAodmVuZG9yLCAiQXV0aGVudGljQU1EIikg
PT0gMCAmJiAgICAgICAvLyBBTUQKLSAgICAgIGZhbWlseSA9PSAxNSAmJgotICAgICAgMzIgPD0g
bW9kZWwgJiYgbW9kZWwgPD0gNjMpIHsKLSAgICBBdG9taWNPcHNfSW50ZXJuYWx4ODZDUFVGZWF0
dXJlcy5oYXNfYW1kX2xvY2tfbWJfYnVnID0gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBBdG9taWNP
cHNfSW50ZXJuYWx4ODZDUFVGZWF0dXJlcy5oYXNfYW1kX2xvY2tfbWJfYnVnID0gZmFsc2U7Ci0g
IH0KLQotICAvLyBlZHggYml0IDI2IGlzIFNTRTIgd2hpY2ggd2UgdXNlIHRvIHRlbGwgdXNlIHdo
ZXRoZXIgd2UgY2FuIHVzZSBtZmVuY2UKLSAgQXRvbWljT3BzX0ludGVybmFseDg2Q1BVRmVhdHVy
ZXMuaGFzX3NzZTIgPSAoKGVkeCA+PiAyNikgJiAxKTsKLX0KLQotY2xhc3MgQXRvbWljT3BzeDg2
SW5pdGlhbGl6ZXIgewotIHB1YmxpYzoKLSAgQXRvbWljT3BzeDg2SW5pdGlhbGl6ZXIoKSB7Ci0g
ICAgQXRvbWljT3BzX0ludGVybmFseDg2Q1BVRmVhdHVyZXNJbml0KCk7Ci0gIH0KLX07Ci0KLS8v
IEEgZ2xvYmFsIHRvIGdldCB1c2UgaW5pdGlhbGl6ZWQgb24gc3RhcnR1cCB2aWEgc3RhdGljIGlu
aXRpYWxpemF0aW9uIDovCi1BdG9taWNPcHN4ODZJbml0aWFsaXplciBnX2luaXRlcjsKLQotfSAg
Ly8gbmFtZXNwYWNlCi0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gX19pMzg2X18K
LQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BTX0lOVEVSTkFMU19YODZfR0ND
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVy
bmFsc194ODZfZ2NjLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVy
bmFsc194ODZfZ2NjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkY2NjNTlkZWU2
MTU0NjViMmY4OTgyZGY2MTc3MWIyMmRiNWFhZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19p
bnRlcm5hbHNfeDg2X2djYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlzIGZpbGUgaXMgYW4gaW50ZXJu
YWwgYXRvbWljIGltcGxlbWVudGF0aW9uLCB1c2UgYXRvbWljb3BzLmggaW5zdGVhZC4KLQotI2lm
bmRlZiBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BTX0lOVEVSTkFMU19YODZfR0NDX0hfCi0jZGVm
aW5lIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX1g4Nl9HQ0NfSF8KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGludGVybmFs
IHsKLQotLy8gVGhpcyBzdHJ1Y3QgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb2YgdGhp
cyBtb2R1bGU7IGNsaWVudHMgbWF5IG5vdAotLy8gdXNlIGl0LgotLy8gRmVhdHVyZXMgb2YgdGhp
cyB4ODYuICBWYWx1ZXMgbWF5IG5vdCBiZSBjb3JyZWN0IGJlZm9yZSBtYWluKCkgaXMgcnVuLAot
Ly8gYnV0IGFyZSBzZXQgY29uc2VydmF0aXZlbHkuCi1zdHJ1Y3QgQXRvbWljT3BzX3g4NkNQVUZl
YXR1cmVTdHJ1Y3QgewotICBib29sIGhhc19hbWRfbG9ja19tYl9idWc7ICAvLyBQcm9jZXNzb3Ig
aGFzIEFNRCBtZW1vcnktYmFycmllciBidWc7IGRvIGxmZW5jZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhZnRlciBhY3F1aXJlIGNvbXBhcmUtYW5kLXN3YXAuCi0gIGJvb2wgaGFz
X3NzZTI7ICAgICAgICAgICAgIC8vIFByb2Nlc3NvciBoYXMgU1NFMi4KLX07Ci1leHRlcm4gc3Ry
dWN0IEF0b21pY09wc194ODZDUFVGZWF0dXJlU3RydWN0IEF0b21pY09wc19JbnRlcm5hbHg4NkNQ
VUZlYXR1cmVzOwotCi0jZGVmaW5lIEFUT01JQ09QU19DT01QSUxFUl9CQVJSSUVSKCkgX19hc21f
XyBfX3ZvbGF0aWxlX18oIiIgOiA6IDogIm1lbW9yeSIpCi0KLS8vIDMyLWJpdCBsb3ctbGV2ZWwg
b3BlcmF0aW9ucyBvbiBhbnkgcGxhdGZvcm0uCi0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJf
Q29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgQXRv
bWljMzIgcHJldjsKLSAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdsICUxLCUy
IgotICAgICAgICAgICAgICAgICAgICAgICA6ICI9YSIgKHByZXYpCi0gICAgICAgICAgICAgICAg
ICAgICAgIDogInEiIChuZXdfdmFsdWUpLCAibSIgKCpwdHIpLCAiMCIgKG9sZF92YWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7Ci0gIHJldHVybiBwcmV2OwotfQotCi1p
bmxpbmUgQXRvbWljMzIgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21pYzMy
KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMy
IG5ld192YWx1ZSkgewotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2wgJTEsJTAiICAvLyBU
aGUgbG9jayBwcmVmaXggaXMgaW1wbGljaXQgZm9yIHhjaGcuCi0gICAgICAgICAgICAgICAgICAg
ICAgIDogIj1yIiAobmV3X3ZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICA6ICJtIiAoKnB0
ciksICIwIiAobmV3X3ZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsK
LSAgcmV0dXJuIG5ld192YWx1ZTsgIC8vIE5vdyBpdCdzIHRoZSBwcmV2aW91cyB2YWx1ZS4KLX0K
LQotaW5saW5lIEF0b21pYzMyIE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRv
bWljMzIqIHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0
b21pYzMyIGluY3JlbWVudCkgewotICBBdG9taWMzMiB0ZW1wID0gaW5jcmVtZW50OwotICBfX2Fz
bV9fIF9fdm9sYXRpbGVfXygibG9jazsgeGFkZGwgJTAsJTEiCi0gICAgICAgICAgICAgICAgICAg
ICAgIDogIityIiAodGVtcCksICIrbSIgKCpwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgIDog
OiAibWVtb3J5Iik7Ci0gIC8vIHRlbXAgbm93IGhvbGRzIHRoZSBvbGQgdmFsdWUgb2YgKnB0cgot
ICByZXR1cm4gdGVtcCArIGluY3JlbWVudDsKLX0KLQotaW5saW5lIEF0b21pYzMyIEJhcnJpZXJf
QXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgaW5jcmVtZW50KSB7Ci0gIEF0b21pYzMy
IHRlbXAgPSBpbmNyZW1lbnQ7Ci0gIF9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyB4YWRkbCAl
MCwlMSIKLSAgICAgICAgICAgICAgICAgICAgICAgOiAiK3IiICh0ZW1wKSwgIittIiAoKnB0cikK
LSAgICAgICAgICAgICAgICAgICAgICAgOiA6ICJtZW1vcnkiKTsKLSAgLy8gdGVtcCBub3cgaG9s
ZHMgdGhlIG9sZCB2YWx1ZSBvZiAqcHRyCi0gIGlmIChBdG9taWNPcHNfSW50ZXJuYWx4ODZDUFVG
ZWF0dXJlcy5oYXNfYW1kX2xvY2tfbWJfYnVnKSB7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18o
ImxmZW5jZSIgOiA6IDogIm1lbW9yeSIpOwotICB9Ci0gIHJldHVybiB0ZW1wICsgaW5jcmVtZW50
OwotfQotCi1pbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBB
dG9taWMzMiogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRv
bWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIEF0b21pYzMyIHggPSBOb0JhcnJpZXJfQ29tcGFyZUFu
ZFN3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk7Ci0gIGlmIChBdG9taWNPcHNfSW50ZXJu
YWx4ODZDUFVGZWF0dXJlcy5oYXNfYW1kX2xvY2tfbWJfYnVnKSB7Ci0gICAgX19hc21fXyBfX3Zv
bGF0aWxlX18oImxmZW5jZSIgOiA6IDogIm1lbW9yeSIpOwotICB9Ci0gIHJldHVybiB4OwotfQot
Ci1pbmxpbmUgQXRvbWljMzIgUmVsZWFzZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMz
MiogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIg
b2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWlj
MzIgbmV3X3ZhbHVlKSB7Ci0gIHJldHVybiBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAocHRyLCBv
bGRfdmFsdWUsIG5ld192YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIE5vQmFycmllcl9TdG9yZSh2
b2xhdGlsZSBBdG9taWMzMiogcHRyLCBBdG9taWMzMiB2YWx1ZSkgewotICAqcHRyID0gdmFsdWU7
Ci19Ci0KLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0KLS8vIDY0LWJpdCBpbXBsZW1lbnRhdGlv
bnMgb2YgbWVtb3J5IGJhcnJpZXIgY2FuIGJlIHNpbXBsZXIsIGJlY2F1c2UgaXQKLS8vICJtZmVu
Y2UiIGlzIGd1YXJhbnRlZWQgdG8gZXhpc3QuCi1pbmxpbmUgdm9pZCBNZW1vcnlCYXJyaWVyKCkg
ewotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibWZlbmNlIiA6IDogOiAibWVtb3J5Iik7Ci19Ci0K
LWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWlj
MzIgdmFsdWUpIHsKLSAgKnB0ciA9IHZhbHVlOwotICBNZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLSNl
bHNlCi0KLWlubGluZSB2b2lkIE1lbW9yeUJhcnJpZXIoKSB7Ci0gIGlmIChBdG9taWNPcHNfSW50
ZXJuYWx4ODZDUFVGZWF0dXJlcy5oYXNfc3NlMikgewotICAgIF9fYXNtX18gX192b2xhdGlsZV9f
KCJtZmVuY2UiIDogOiA6ICJtZW1vcnkiKTsKLSAgfSBlbHNlIHsgIC8vIG1mZW5jZSBpcyBmYXN0
ZXIgYnV0IG5vdCBwcmVzZW50IG9uIFBJSUkKLSAgICBBdG9taWMzMiB4ID0gMDsKLSAgICBOb0Jh
cnJpZXJfQXRvbWljRXhjaGFuZ2UoJngsIDApOyAgLy8gYWN0cyBhcyBhIGJhcnJpZXIgb24gUElJ
SQotICB9Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIq
IHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgaWYgKEF0b21pY09wc19JbnRlcm5hbHg4NkNQVUZl
YXR1cmVzLmhhc19zc2UyKSB7Ci0gICAgKnB0ciA9IHZhbHVlOwotICAgIF9fYXNtX18gX192b2xh
dGlsZV9fKCJtZmVuY2UiIDogOiA6ICJtZW1vcnkiKTsKLSAgfSBlbHNlIHsKLSAgICBOb0JhcnJp
ZXJfQXRvbWljRXhjaGFuZ2UocHRyLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFjdHMgYXMgYSBiYXJyaWVyIG9uIFBJSUkKLSAgfQotfQotI2VuZGlmCi0KLWlubGluZSB2
b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUp
IHsKLSAgQVRPTUlDT1BTX0NPTVBJTEVSX0JBUlJJRVIoKTsKLSAgKnB0ciA9IHZhbHVlOyAgLy8g
QW4geDg2IHN0b3JlIGFjdHMgYXMgYSByZWxlYXNlIGJhcnJpZXIuCi0gIC8vIFNlZSBjb21tZW50
cyBpbiBBdG9taWM2NCB2ZXJzaW9uIG9mIFJlbGVhc2VfU3RvcmUoKSwgYmVsb3cuCi19Ci0KLWlu
bGluZSBBdG9taWMzMiBOb0JhcnJpZXJfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRy
KSB7Ci0gIHJldHVybiAqcHRyOwotfQotCi1pbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9Mb2FkKHZv
bGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpIHsKLSAgQXRvbWljMzIgdmFsdWUgPSAqcHRyOyAg
Ly8gQW4geDg2IGxvYWQgYWN0cyBhcyBhIGFjcXVpcmUgYmFycmllci4KLSAgLy8gU2VlIGNvbW1l
bnRzIGluIEF0b21pYzY0IHZlcnNpb24gb2YgUmVsZWFzZV9TdG9yZSgpLCBiZWxvdy4KLSAgQVRP
TUlDT1BTX0NPTVBJTEVSX0JBUlJJRVIoKTsKLSAgcmV0dXJuIHZhbHVlOwotfQotCi1pbmxpbmUg
QXRvbWljMzIgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpIHsKLSAg
TWVtb3J5QmFycmllcigpOwotICByZXR1cm4gKnB0cjsKLX0KLQotI2lmIGRlZmluZWQoX194ODZf
NjRfXykKLQotLy8gNjQtYml0IGxvdy1sZXZlbCBvcGVyYXRpb25zIG9uIDY0LWJpdCBwbGF0Zm9y
bS4KLQotaW5saW5lIEF0b21pYzY0IE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBB
dG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dG9taWM2NCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewotICBBdG9taWM2NCBwcmV2OwotICBfX2FzbV9fIF9f
dm9sYXRpbGVfXygibG9jazsgY21weGNoZ3EgJTEsJTIiCi0gICAgICAgICAgICAgICAgICAgICAg
IDogIj1hIiAocHJldikKLSAgICAgICAgICAgICAgICAgICAgICAgOiAicSIgKG5ld192YWx1ZSks
ICJtIiAoKnB0ciksICIwIiAob2xkX3ZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICA6ICJt
ZW1vcnkiKTsKLSAgcmV0dXJuIHByZXY7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJf
QXRvbWljRXhjaGFuZ2Uodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIF9fYXNtX18g
X192b2xhdGlsZV9fKCJ4Y2hncSAlMSwlMCIgIC8vIFRoZSBsb2NrIHByZWZpeCBpcyBpbXBsaWNp
dCBmb3IgeGNoZy4KLSAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChuZXdfdmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgIDogIm0iICgqcHRyKSwgIjAiIChuZXdfdmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwotICByZXR1cm4gbmV3X3ZhbHVlOyAgLy8g
Tm93IGl0J3MgdGhlIHByZXZpb3VzIHZhbHVlLgotfQotCi1pbmxpbmUgQXRvbWljNjQgTm9CYXJy
aWVyX0F0b21pY0luY3JlbWVudCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgaW5jcmVtZW50KSB7Ci0gIEF0
b21pYzY0IHRlbXAgPSBpbmNyZW1lbnQ7Ci0gIF9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyB4
YWRkcSAlMCwlMSIKLSAgICAgICAgICAgICAgICAgICAgICAgOiAiK3IiICh0ZW1wKSwgIittIiAo
KnB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgOiA6ICJtZW1vcnkiKTsKLSAgLy8gdGVtcCBu
b3cgY29udGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlIG9mICpwdHIKLSAgcmV0dXJuIHRlbXAgKyBp
bmNyZW1lbnQ7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBCYXJyaWVyX0F0b21pY0luY3JlbWVudCh2
b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEF0b21pYzY0IGluY3JlbWVudCkgewotICBBdG9taWM2NCB0ZW1wID0gaW5jcmVtZW50
OwotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibG9jazsgeGFkZHEgJTAsJTEiCi0gICAgICAgICAg
ICAgICAgICAgICAgIDogIityIiAodGVtcCksICIrbSIgKCpwdHIpCi0gICAgICAgICAgICAgICAg
ICAgICAgIDogOiAibWVtb3J5Iik7Ci0gIC8vIHRlbXAgbm93IGNvbnRhaW5zIHRoZSBwcmV2aW91
cyB2YWx1ZSBvZiAqcHRyCi0gIGlmIChBdG9taWNPcHNfSW50ZXJuYWx4ODZDUFVGZWF0dXJlcy5o
YXNfYW1kX2xvY2tfbWJfYnVnKSB7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxmZW5jZSIg
OiA6IDogIm1lbW9yeSIpOwotICB9Ci0gIHJldHVybiB0ZW1wICsgaW5jcmVtZW50OwotfQotCi1p
bmxpbmUgdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwgQXRvbWlj
NjQgdmFsdWUpIHsKLSAgKnB0ciA9IHZhbHVlOwotfQotCi1pbmxpbmUgdm9pZCBBY3F1aXJlX1N0
b3JlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IHZhbHVlKSB7Ci0gICpwdHIgPSB2
YWx1ZTsKLSAgTWVtb3J5QmFycmllcigpOwotfQotCi1pbmxpbmUgdm9pZCBSZWxlYXNlX1N0b3Jl
KHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IHZhbHVlKSB7Ci0gIEFUT01JQ09QU19D
T01QSUxFUl9CQVJSSUVSKCk7Ci0KLSAgKnB0ciA9IHZhbHVlOyAgLy8gQW4geDg2IHN0b3JlIGFj
dHMgYXMgYSByZWxlYXNlIGJhcnJpZXIKLSAgICAgICAgICAgICAgICAgLy8gZm9yIGN1cnJlbnQg
QU1EL0ludGVsIGNoaXBzIGFzIG9mIEphbiAyMDA4LgotICAgICAgICAgICAgICAgICAvLyBTZWUg
YWxzbyBBY3F1aXJlX0xvYWQoKSwgYmVsb3cuCi0KLSAgLy8gV2hlbiBuZXcgY2hpcHMgY29tZSBv
dXQsIGNoZWNrOgotICAvLyAgSUEtMzIgSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIERldmVs
b3BlcidzIE1hbnVhbCwgVm9sdW1lIDM6Ci0gIC8vICBTeXN0ZW0gUHJvZ3JhbW1pbmcgR3VpZGUs
IENoYXRwZXIgNzogTXVsdGlwbGUtcHJvY2Vzc29yIG1hbmFnZW1lbnQsCi0gIC8vICBTZWN0aW9u
IDcuMiwgTWVtb3J5IE9yZGVyaW5nLgotICAvLyBMYXN0IHNlZW4gYXQ6Ci0gIC8vICAgaHR0cDov
L2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL3BlbnRpdW00L21hbnVhbHMvaW5kZXhfbmV3Lmh0
bQotICAvLwotICAvLyB4ODYgc3RvcmVzL2xvYWRzIGZhaWwgdG8gYWN0IGFzIGJhcnJpZXJzIGZv
ciBhIGZldyBpbnN0cnVjdGlvbnMgKGNsZmx1c2gKLSAgLy8gbWFza21vdmRxdSBtYXNrbW92cSBt
b3ZudGRxIG1vdm50aSBtb3ZudHBkIG1vdm50cHMgbW92bnRxKSBidXQgdGhlc2UgYXJlCi0gIC8v
IG5vdCBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBhbmQgYXJlIHJhcmUuICBVc2VycyBvZiB0
aGVzZSBpbnN0cnVjdGlvbnMKLSAgLy8gbmVlZCB0byBrbm93IGFib3V0IGNhY2hlIGJlaGF2aW91
ciBpbiBhbnkgY2FzZSBzaW5jZSBhbGwgb2YgdGhlc2UgaW52b2x2ZQotICAvLyBlaXRoZXIgZmx1
c2hpbmcgY2FjaGUgbGluZXMgb3Igbm9uLXRlbXBvcmFsIGNhY2hlIGhpbnRzLgotfQotCi1pbmxp
bmUgQXRvbWljNjQgTm9CYXJyaWVyX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljNjQqIHB0cikg
ewotICByZXR1cm4gKnB0cjsKLX0KLQotaW5saW5lIEF0b21pYzY0IEFjcXVpcmVfTG9hZCh2b2xh
dGlsZSBjb25zdCBBdG9taWM2NCogcHRyKSB7Ci0gIEF0b21pYzY0IHZhbHVlID0gKnB0cjsgIC8v
IEFuIHg4NiBsb2FkIGFjdHMgYXMgYSBhY3F1aXJlIGJhcnJpZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGZvciBjdXJyZW50IEFNRC9JbnRlbCBjaGlwcyBhcyBvZiBKYW4gMjAwOC4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGFsc28gUmVsZWFzZV9TdG9yZSgpLCBh
Ym92ZS4KLSAgQVRPTUlDT1BTX0NPTVBJTEVSX0JBUlJJRVIoKTsKLSAgcmV0dXJuIHZhbHVlOwot
fQotCi1pbmxpbmUgQXRvbWljNjQgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0
KiBwdHIpIHsKLSAgTWVtb3J5QmFycmllcigpOwotICByZXR1cm4gKnB0cjsKLX0KLQotaW5saW5l
IEF0b21pYzY0IEFjcXVpcmVfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192
YWx1ZSkgewotICBBdG9taWM2NCB4ID0gTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHB0ciwgb2xk
X3ZhbHVlLCBuZXdfdmFsdWUpOwotICBpZiAoQXRvbWljT3BzX0ludGVybmFseDg2Q1BVRmVhdHVy
ZXMuaGFzX2FtZF9sb2NrX21iX2J1ZykgewotICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsZmVu
Y2UiIDogOiA6ICJtZW1vcnkiKTsKLSAgfQotICByZXR1cm4geDsKLX0KLQotaW5saW5lIEF0b21p
YzY0IFJlbGVhc2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkg
ewotICByZXR1cm4gTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdf
dmFsdWUpOwotfQotCi0jZW5kaWYgIC8vIGRlZmluZWQoX194ODZfNjRfXykKLQotfSAgLy8gbmFt
ZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFj
ZSBnb29nbGUKLQotI3VuZGVmIEFUT01JQ09QU19DT01QSUxFUl9CQVJSSUVSCi0KLSNlbmRpZiAg
Ly8gR09PR0xFX1BST1RPQlVGX0FUT01JQ09QU19JTlRFUk5BTFNfWDg2X0dDQ19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfeDg2X21z
dmMuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc194ODZf
bXN2Yy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxYjE2NGYwZmYzYWE0NjY5
ODI0MjZlZDc5OTJlNjFkZTNhNWQ0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFs
c194ODZfbXN2Yy5jYworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVGhlIGNvbXBpbGF0aW9uIG9mIGV4dGVuc2lv
bl9zZXQuY2MgZmFpbHMgd2hlbiB3aW5kb3dzLmggaXMgaW5jbHVkZWQuCi0vLyBUaGVyZWZvcmUg
d2UgbW92ZSB0aGUgY29kZSBkZXBlbmRpbmcgb24gd2luZG93cy5oIHRvIHRoaXMgc2VwYXJhdGUg
Y2MgZmlsZS4KLQotLy8gRG9uJ3QgY29tcGlsZSB0aGlzIGZpbGUgZm9yIHBlb3BsZSBub3QgY29u
Y2VybmVkIGFib3V0IHRocmVhZCBzYWZldHkuCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9OT19U
SFJFQURfU0FGRVRZCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3Bz
Lmg+Ci0KLSNpZmRlZiBHT09HTEVfUFJPVE9CVUZfQVRPTUlDT1BTX0lOVEVSTkFMU19YODZfTVNW
Q19IXwotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVz
cGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi1pbmxpbmUgdm9pZCBNZW1v
cnlCYXJyaWVyKCkgewotICAvLyBXZSB1c2UgTWVtb3J5QmFycmllciBmcm9tIFdpbk5ULmgKLSAg
OjpNZW1vcnlCYXJyaWVyKCk7Ci19Ci0KLUF0b21pYzMyIE5vQmFycmllcl9Db21wYXJlQW5kU3dh
cCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEF0b21pYzMyIG9sZF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWMzMiBuZXdfdmFsdWUpIHsKLSAgTE9ORyByZXN1bHQgPSBJbnRlcmxvY2tlZENvbXBh
cmVFeGNoYW5nZSgKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgTE9ORyo+KHB0ciks
Ci0gICAgICBzdGF0aWNfY2FzdDxMT05HPihuZXdfdmFsdWUpLAotICAgICAgc3RhdGljX2Nhc3Q8
TE9ORz4ob2xkX3ZhbHVlKSk7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxBdG9taWMzMj4ocmVzdWx0
KTsKLX0KLQotQXRvbWljMzIgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21p
YzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3
X3ZhbHVlKSB7Ci0gIExPTkcgcmVzdWx0ID0gSW50ZXJsb2NrZWRFeGNoYW5nZSgKLSAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgTE9ORyo+KHB0ciksCi0gICAgICBzdGF0aWNfY2FzdDxM
T05HPihuZXdfdmFsdWUpKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pYzMyPihyZXN1bHQp
OwotfQotCi1BdG9taWMzMiBCYXJyaWVyX0F0b21pY0luY3JlbWVudCh2b2xhdGlsZSBBdG9taWMz
MiogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgaW5jcmVt
ZW50KSB7Ci0gIHJldHVybiBJbnRlcmxvY2tlZEV4Y2hhbmdlQWRkKAotICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2xhdGlsZSBMT05HKj4ocHRyKSwKLSAgICAgIHN0YXRpY19jYXN0PExPTkc+KGlu
Y3JlbWVudCkpICsgaW5jcmVtZW50OwotfQotCi0jaWYgZGVmaW5lZChfV0lONjQpCi0KLS8vIDY0
LWJpdCBsb3ctbGV2ZWwgb3BlcmF0aW9ucyBvbiA2NC1iaXQgcGxhdGZvcm0uCi0KLUF0b21pYzY0
IE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBuZXdfdmFsdWUpIHsKLSAgUFZPSUQg
cmVzdWx0ID0gSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyKAotICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9sYXRpbGUgUFZPSUQqPihwdHIpLAotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UFZP
SUQ+KG5ld192YWx1ZSksIHJlaW50ZXJwcmV0X2Nhc3Q8UFZPSUQ+KG9sZF92YWx1ZSkpOwotICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBdG9taWM2ND4ocmVzdWx0KTsKLX0KLQotQXRvbWljNjQg
Tm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7Ci0gIFBWT0lE
IHJlc3VsdCA9IEludGVybG9ja2VkRXhjaGFuZ2VQb2ludGVyKAotICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9sYXRpbGUgUFZPSUQqPihwdHIpLAotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UFZPSUQ+KG5l
d192YWx1ZSkpOwotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBdG9taWM2ND4ocmVzdWx0KTsK
LX0KLQotQXRvbWljNjQgQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljNjQq
IHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IGluY3JlbWVu
dCkgewotICByZXR1cm4gSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0KAotICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2xhdGlsZSBMT05HTE9ORyo+KHB0ciksCi0gICAgICBzdGF0aWNfY2FzdDxMT05H
TE9ORz4oaW5jcmVtZW50KSkgKyBpbmNyZW1lbnQ7Ci19Ci0KLSNlbmRpZiAgLy8gZGVmaW5lZChf
V0lONjQpCi0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3Rv
YnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVG
X0FUT01JQ09QU19JTlRFUk5BTFNfWDg2X01TVkNfSF8KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RP
QlVGX05PX1RIUkVBRF9TQUZFVFkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVi
cy9hdG9taWNvcHNfaW50ZXJuYWxzX3g4Nl9tc3ZjLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvYXRvbWljb3BzX2ludGVybmFsc194ODZfbXN2Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlNTNhNjQxZjA5ZjgwOGQxZjE2NTU0NDllNmQ2NzM3NjUwZjE4ZjQ2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3g4Nl9tc3ZjLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNTAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFRo
aXMgZmlsZSBpcyBhbiBpbnRlcm5hbCBhdG9taWMgaW1wbGVtZW50YXRpb24sIHVzZSBhdG9taWNv
cHMuaCBpbnN0ZWFkLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJO
QUxTX1g4Nl9NU1ZDX0hfCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJO
QUxTX1g4Nl9NU1ZDX0hfCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLWlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQXRv
bWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpIHsKLSAgcmV0dXJuIEJh
cnJpZXJfQXRvbWljSW5jcmVtZW50KHB0ciwgaW5jcmVtZW50KTsKLX0KLQotI2lmICEoZGVmaW5l
ZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTQwMCkKLSNlcnJvciAiV2UgcmVxdWlyZSBhdCBs
ZWFzdCB2czIwMDUgZm9yIE1lbW9yeUJhcnJpZXIiCi0jZW5kaWYKLQotaW5saW5lIEF0b21pYzMy
IEFjcXVpcmVfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG9sZF92YWx1ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1ZSkgewot
ICByZXR1cm4gTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdfdmFs
dWUpOwotfQotCi1pbmxpbmUgQXRvbWljMzIgUmVsZWFzZV9Db21wYXJlQW5kU3dhcCh2b2xhdGls
ZSBBdG9taWMzMiogcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXRvbWljMzIgb2xkX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7Ci0gIHJldHVybiBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3
YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIE5vQmFycmll
cl9TdG9yZSh2b2xhdGlsZSBBdG9taWMzMiogcHRyLCBBdG9taWMzMiB2YWx1ZSkgewotICAqcHRy
ID0gdmFsdWU7Ci19Ci0KLWlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWlj
MzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHB0
ciwgdmFsdWUpOwotICAgICAgICAgICAgICAvLyBhY3RzIGFzIGEgYmFycmllciBpbiB0aGlzIGlt
cGxlbWVudGF0aW9uCi19Ci0KLWlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRv
bWljMzIqIHB0ciwgQXRvbWljMzIgdmFsdWUpIHsKLSAgKnB0ciA9IHZhbHVlOyAgLy8gd29ya3Mg
dy9vIGJhcnJpZXIgZm9yIGN1cnJlbnQgSW50ZWwgY2hpcHMgYXMgb2YgSnVuZSAyMDA1Ci0gIC8v
IFNlZSBjb21tZW50cyBpbiBBdG9taWM2NCB2ZXJzaW9uIG9mIFJlbGVhc2VfU3RvcmUoKSBiZWxv
dy4KLX0KLQotaW5saW5lIEF0b21pYzMyIE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0
b21pYzMyKiBwdHIpIHsKLSAgcmV0dXJuICpwdHI7Ci19Ci0KLWlubGluZSBBdG9taWMzMiBBY3F1
aXJlX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIqIHB0cikgewotICBBdG9taWMzMiB2YWx1
ZSA9ICpwdHI7Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotaW5saW5lIEF0b21pYzMyIFJlbGVhc2Vf
TG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRyKSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsK
LSAgcmV0dXJuICpwdHI7Ci19Ci0KLSNpZiBkZWZpbmVkKF9XSU42NCkKLQotLy8gNjQtYml0IGxv
dy1sZXZlbCBvcGVyYXRpb25zIG9uIDY0LWJpdCBwbGF0Zm9ybS4KLQotaW5saW5lIEF0b21pYzY0
IE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IGluY3JlbWVudCkg
ewotICByZXR1cm4gQmFycmllcl9BdG9taWNJbmNyZW1lbnQocHRyLCBpbmNyZW1lbnQpOwotfQot
Ci1pbmxpbmUgdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwgQXRv
bWljNjQgdmFsdWUpIHsKLSAgKnB0ciA9IHZhbHVlOwotfQotCi1pbmxpbmUgdm9pZCBBY3F1aXJl
X1N0b3JlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IHZhbHVlKSB7Ci0gIE5vQmFy
cmllcl9BdG9taWNFeGNoYW5nZShwdHIsIHZhbHVlKTsKLSAgICAgICAgICAgICAgLy8gYWN0cyBh
cyBhIGJhcnJpZXIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotfQotCi1pbmxpbmUgdm9pZCBSZWxl
YXNlX1N0b3JlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IHZhbHVlKSB7Ci0gICpw
dHIgPSB2YWx1ZTsgIC8vIHdvcmtzIHcvbyBiYXJyaWVyIGZvciBjdXJyZW50IEludGVsIGNoaXBz
IGFzIG9mIEp1bmUgMjAwNQotCi0gIC8vIFdoZW4gbmV3IGNoaXBzIGNvbWUgb3V0LCBjaGVjazoK
LSAgLy8gIElBLTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51
YWwsIFZvbHVtZSAzOgotICAvLyAgU3lzdGVtIFByb2dyYW1taW5nIEd1aWRlLCBDaGF0cGVyIDc6
IE11bHRpcGxlLXByb2Nlc3NvciBtYW5hZ2VtZW50LAotICAvLyAgU2VjdGlvbiA3LjIsIE1lbW9y
eSBPcmRlcmluZy4KLSAgLy8gTGFzdCBzZWVuIGF0OgotICAvLyAgIGh0dHA6Ly9kZXZlbG9wZXIu
aW50ZWwuY29tL2Rlc2lnbi9wZW50aXVtNC9tYW51YWxzL2luZGV4X25ldy5odG0KLX0KLQotaW5s
aW5lIEF0b21pYzY0IE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIp
IHsKLSAgcmV0dXJuICpwdHI7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBBY3F1aXJlX0xvYWQodm9s
YXRpbGUgY29uc3QgQXRvbWljNjQqIHB0cikgewotICBBdG9taWM2NCB2YWx1ZSA9ICpwdHI7Ci0g
IHJldHVybiB2YWx1ZTsKLX0KLQotaW5saW5lIEF0b21pYzY0IFJlbGVhc2VfTG9hZCh2b2xhdGls
ZSBjb25zdCBBdG9taWM2NCogcHRyKSB7Ci0gIE1lbW9yeUJhcnJpZXIoKTsKLSAgcmV0dXJuICpw
dHI7Ci19Ci0KLWlubGluZSBBdG9taWM2NCBBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxl
IEF0b21pYzY0KiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dG9taWM2NCBvbGRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWM2NCBuZXdfdmFsdWUpIHsKLSAgcmV0dXJuIE5vQmFycmllcl9Db21wYXJlQW5kU3dh
cChwdHIsIG9sZF92YWx1ZSwgbmV3X3ZhbHVlKTsKLX0KLQotaW5saW5lIEF0b21pYzY0IFJlbGVh
c2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewotICByZXR1
cm4gTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpOwot
fQotCi0jZW5kaWYgIC8vIGRlZmluZWQoX1dJTjY0KQotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJu
YWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0j
ZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9BVE9NSUNPUFNfSU5URVJOQUxTX1g4Nl9NU1ZDX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9zdHVicy9ieXRlc3RyZWFtLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmNGFmNmE1MGFiZWYwYTUxM2U1YWQ0MWEzYzcyOTkwZDk0YjU0MWFjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9ieXRlc3RyZWFtLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3N0dWJzL2J5dGVzdHJlYW0uaD4KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIHN0cmluZ3MgewotCi12b2lkIEJ5dGVTb3VyY2U6OkNvcHlUbyhCeXRlU2lu
ayogc2luaywgc2l6ZV90IG4pIHsKLSAgd2hpbGUgKG4gPiAwKSB7Ci0gICAgU3RyaW5nUGllY2Ug
ZnJhZ21lbnQgPSBQZWVrKCk7Ci0gICAgaWYgKGZyYWdtZW50LmVtcHR5KCkpIHsKLSAgICAgIEdP
T0dMRV9MT0coREZBVEFMKSA8PCAiQnl0ZVNvdXJjZTo6Q29weVRvKCkgb3ZlcnJhbiBpbnB1dC4i
OwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHN0ZDo6c2l6ZV90IGZyYWdtZW50X3NpemUgPSBz
dGQ6Om1pbjxzdGQ6OnNpemVfdD4obiwgZnJhZ21lbnQuc2l6ZSgpKTsKLSAgICBzaW5rLT5BcHBl
bmQoZnJhZ21lbnQuZGF0YSgpLCBmcmFnbWVudF9zaXplKTsKLSAgICBTa2lwKGZyYWdtZW50X3Np
emUpOwotICAgIG4gLT0gZnJhZ21lbnRfc2l6ZTsKLSAgfQotfQotCi12b2lkIEJ5dGVTaW5rOjpG
bHVzaCgpIHt9Ci0KLXZvaWQgVW5jaGVja2VkQXJyYXlCeXRlU2luazo6QXBwZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBuKSB7Ci0gIGlmIChkYXRhICE9IGRlc3RfKSB7Ci0gICAgLy8gQ2F0
Y2ggY2FzZXMgd2hlcmUgdGhlIHBvaW50ZXIgcmV0dXJuZWQgYnkgR2V0QXBwZW5kQnVmZmVyKCkg
d2FzIG1vZGlmaWVkLgotICAgIEdPT0dMRV9EQ0hFQ0soIShkZXN0XyA8PSBkYXRhICYmIGRhdGEg
PCAoZGVzdF8gKyBuKSkpCi0gICAgICAgIDw8ICJBcHBlbmQoKSBkYXRhW10gb3ZlcmxhcHMgd2l0
aCBkZXN0X1tdIjsKLSAgICBtZW1jcHkoZGVzdF8sIGRhdGEsIG4pOwotICB9Ci0gIGRlc3RfICs9
IG47Ci19Ci0KLUNoZWNrZWRBcnJheUJ5dGVTaW5rOjpDaGVja2VkQXJyYXlCeXRlU2luayhjaGFy
KiBvdXRidWYsIHNpemVfdCBjYXBhY2l0eSkKLSAgICA6IG91dGJ1Zl8ob3V0YnVmKSwgY2FwYWNp
dHlfKGNhcGFjaXR5KSwgc2l6ZV8oMCksIG92ZXJmbG93ZWRfKGZhbHNlKSB7Ci19Ci0KLXZvaWQg
Q2hlY2tlZEFycmF5Qnl0ZVNpbms6OkFwcGVuZChjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IG4p
IHsKLSAgc2l6ZV90IGF2YWlsYWJsZSA9IGNhcGFjaXR5XyAtIHNpemVfOwotICBpZiAobiA+IGF2
YWlsYWJsZSkgewotICAgIG4gPSBhdmFpbGFibGU7Ci0gICAgb3ZlcmZsb3dlZF8gPSB0cnVlOwot
ICB9Ci0gIGlmIChuID4gMCAmJiBieXRlcyAhPSAob3V0YnVmXyArIHNpemVfKSkgewotICAgIC8v
IENhdGNoIGNhc2VzIHdoZXJlIHRoZSBwb2ludGVyIHJldHVybmVkIGJ5IEdldEFwcGVuZEJ1ZmZl
cigpIHdhcyBtb2RpZmllZC4KLSAgICBHT09HTEVfRENIRUNLKCEob3V0YnVmXyA8PSBieXRlcyAm
JiBieXRlcyA8IChvdXRidWZfICsgY2FwYWNpdHlfKSkpCi0gICAgICAgIDw8ICJBcHBlbmQoKSBi
eXRlc1tdIG92ZXJsYXBzIHdpdGggb3V0YnVmX1tdIjsKLSAgICBtZW1jcHkob3V0YnVmXyArIHNp
emVfLCBieXRlcywgbik7Ci0gIH0KLSAgc2l6ZV8gKz0gbjsKLX0KLQotR3Jvd2luZ0FycmF5Qnl0
ZVNpbms6Okdyb3dpbmdBcnJheUJ5dGVTaW5rKHNpemVfdCBlc3RpbWF0ZWRfc2l6ZSkKLSAgICA6
IGNhcGFjaXR5Xyhlc3RpbWF0ZWRfc2l6ZSksCi0gICAgICBidWZfKG5ldyBjaGFyW2VzdGltYXRl
ZF9zaXplXSksCi0gICAgICBzaXplXygwKSB7Ci19Ci0KLUdyb3dpbmdBcnJheUJ5dGVTaW5rOjp+
R3Jvd2luZ0FycmF5Qnl0ZVNpbmsoKSB7Ci0gIGRlbGV0ZVtdIGJ1Zl87ICAvLyBKdXN0IGluIGNh
c2UgdGhlIHVzZXIgZGlkbid0IGNhbGwgR2V0QnVmZmVyLgotfQotCi12b2lkIEdyb3dpbmdBcnJh
eUJ5dGVTaW5rOjpBcHBlbmQoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBuKSB7Ci0gIHNpemVf
dCBhdmFpbGFibGUgPSBjYXBhY2l0eV8gLSBzaXplXzsKLSAgaWYgKGJ5dGVzICE9IChidWZfICsg
c2l6ZV8pKSB7Ci0gICAgLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgdGhlIHBvaW50ZXIgcmV0dXJuZWQg
YnkgR2V0QXBwZW5kQnVmZmVyKCkgd2FzIG1vZGlmaWVkLgotICAgIC8vIFdlIG5lZWQgdG8gdGVz
dCBmb3IgdGhpcyBiZWZvcmUgY2FsbGluZyBFeHBhbmQoKSB3aGljaCBtYXkgcmVhbGxvY2F0ZS4K
LSAgICBHT09HTEVfRENIRUNLKCEoYnVmXyA8PSBieXRlcyAmJiBieXRlcyA8IChidWZfICsgY2Fw
YWNpdHlfKSkpCi0gICAgICAgIDw8ICJBcHBlbmQoKSBieXRlc1tdIG92ZXJsYXBzIHdpdGggYnVm
X1tdIjsKLSAgfQotICBpZiAobiA+IGF2YWlsYWJsZSkgewotICAgIEV4cGFuZChuIC0gYXZhaWxh
YmxlKTsKLSAgfQotICBpZiAobiA+IDAgJiYgYnl0ZXMgIT0gKGJ1Zl8gKyBzaXplXykpIHsKLSAg
ICBtZW1jcHkoYnVmXyArIHNpemVfLCBieXRlcywgbik7Ci0gIH0KLSAgc2l6ZV8gKz0gbjsKLX0K
LQotY2hhciogR3Jvd2luZ0FycmF5Qnl0ZVNpbms6OkdldEJ1ZmZlcihzaXplX3QqIG5ieXRlcykg
ewotICBTaHJpbmtUb0ZpdCgpOwotICBjaGFyKiBiID0gYnVmXzsKLSAgKm5ieXRlcyA9IHNpemVf
OwotICBidWZfID0gTlVMTDsKLSAgc2l6ZV8gPSBjYXBhY2l0eV8gPSAwOwotICByZXR1cm4gYjsK
LX0KLQotdm9pZCBHcm93aW5nQXJyYXlCeXRlU2luazo6RXhwYW5kKHNpemVfdCBhbW91bnQpIHsg
IC8vIEV4cGFuZCBieSBhdCBsZWFzdCA1MCUuCi0gIHNpemVfdCBuZXdfY2FwYWNpdHkgPSBzdGQ6
Om1heChjYXBhY2l0eV8gKyBhbW91bnQsICgzICogY2FwYWNpdHlfKSAvIDIpOwotICBjaGFyKiBi
aWdnZXIgPSBuZXcgY2hhcltuZXdfY2FwYWNpdHldOwotICBtZW1jcHkoYmlnZ2VyLCBidWZfLCBz
aXplXyk7Ci0gIGRlbGV0ZVtdIGJ1Zl87Ci0gIGJ1Zl8gPSBiaWdnZXI7Ci0gIGNhcGFjaXR5XyA9
IG5ld19jYXBhY2l0eTsKLX0KLQotdm9pZCBHcm93aW5nQXJyYXlCeXRlU2luazo6U2hyaW5rVG9G
aXQoKSB7Ci0gIC8vIFNocmluayBvbmx5IGlmIHRoZSBidWZmZXIgaXMgbGFyZ2UgYW5kIHNpemVf
IGlzIGxlc3MgdGhhbiAzLzQKLSAgLy8gb2YgY2FwYWNpdHlfLgotICBpZiAoY2FwYWNpdHlfID4g
MjU2ICYmIHNpemVfIDwgKDMgKiBjYXBhY2l0eV8pIC8gNCkgewotICAgIGNoYXIqIGp1c3RfZW5v
dWdoID0gbmV3IGNoYXJbc2l6ZV9dOwotICAgIG1lbWNweShqdXN0X2Vub3VnaCwgYnVmXywgc2l6
ZV8pOwotICAgIGRlbGV0ZVtdIGJ1Zl87Ci0gICAgYnVmXyA9IGp1c3RfZW5vdWdoOwotICAgIGNh
cGFjaXR5XyA9IHNpemVfOwotICB9Ci19Ci0KLXZvaWQgU3RyaW5nQnl0ZVNpbms6OkFwcGVuZChj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbikgewotICBkZXN0Xy0+YXBwZW5kKGRhdGEsIG4pOwot
fQotCi1zaXplX3QgQXJyYXlCeXRlU291cmNlOjpBdmFpbGFibGUoKSBjb25zdCB7Ci0gIHJldHVy
biBpbnB1dF8uc2l6ZSgpOwotfQotCi1TdHJpbmdQaWVjZSBBcnJheUJ5dGVTb3VyY2U6OlBlZWso
KSB7Ci0gIHJldHVybiBpbnB1dF87Ci19Ci0KLXZvaWQgQXJyYXlCeXRlU291cmNlOjpTa2lwKHNp
emVfdCBuKSB7Ci0gIEdPT0dMRV9EQ0hFQ0tfTEUobiwgaW5wdXRfLnNpemUoKSk7Ci0gIGlucHV0
Xy5yZW1vdmVfcHJlZml4KG4pOwotfQotCi1MaW1pdEJ5dGVTb3VyY2U6OkxpbWl0Qnl0ZVNvdXJj
ZShCeXRlU291cmNlICpzb3VyY2UsIHNpemVfdCBsaW1pdCkKLSAgOiBzb3VyY2VfKHNvdXJjZSks
Ci0gICAgbGltaXRfKGxpbWl0KSB7Ci19Ci0KLXNpemVfdCBMaW1pdEJ5dGVTb3VyY2U6OkF2YWls
YWJsZSgpIGNvbnN0IHsKLSAgc2l6ZV90IGF2YWlsYWJsZSA9IHNvdXJjZV8tPkF2YWlsYWJsZSgp
OwotICBpZiAoYXZhaWxhYmxlID4gbGltaXRfKSB7Ci0gICAgYXZhaWxhYmxlID0gbGltaXRfOwot
ICB9Ci0KLSAgcmV0dXJuIGF2YWlsYWJsZTsKLX0KLQotU3RyaW5nUGllY2UgTGltaXRCeXRlU291
cmNlOjpQZWVrKCkgewotICBTdHJpbmdQaWVjZSBwaWVjZShzb3VyY2VfLT5QZWVrKCkpOwotICBp
ZiAocGllY2Uuc2l6ZSgpID4gbGltaXRfKSB7Ci0gICAgcGllY2Uuc2V0KHBpZWNlLmRhdGEoKSwg
bGltaXRfKTsKLSAgfQotCi0gIHJldHVybiBwaWVjZTsKLX0KLQotdm9pZCBMaW1pdEJ5dGVTb3Vy
Y2U6OlNraXAoc2l6ZV90IG4pIHsKLSAgR09PR0xFX0RDSEVDS19MRShuLCBsaW1pdF8pOwotICBz
b3VyY2VfLT5Ta2lwKG4pOwotICBsaW1pdF8gLT0gbjsKLX0KLQotdm9pZCBMaW1pdEJ5dGVTb3Vy
Y2U6OkNvcHlUbyhCeXRlU2luayAqc2luaywgc2l6ZV90IG4pIHsKLSAgR09PR0xFX0RDSEVDS19M
RShuLCBsaW1pdF8pOwotICBzb3VyY2VfLT5Db3B5VG8oc2luaywgbik7Ci0gIGxpbWl0XyAtPSBu
OwotfQotCi19ICAvLyBuYW1lc3BhY2Ugc3RyaW5ncwotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVm
Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
c3R1YnMvYnl0ZXN0cmVhbS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2J5dGVzdHJlYW0u
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU4ZTAyMDQ1ODBhZTgwYWY2ZDFiMjIy
NmY4OTliM2JiOTU5NWE1Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0vLyBUaGlzIGZpbGUgZGVjbGFyZXMgdGhlIEJ5dGVTaW5rIGFuZCBCeXRlU291cmNlIGFic3Ry
YWN0IGludGVyZmFjZXMuIFRoZXNlCi0vLyBpbnRlcmZhY2VzIHJlcHJlc2VudCBvYmplY3RzIHRo
YXQgY29uc3VtZSAoQnl0ZVNpbmspIG9yIHByb2R1Y2UgKEJ5dGVTb3VyY2UpCi0vLyBhIHNlcXVl
bmNlIG9mIGJ5dGVzLiBVc2luZyB0aGVzZSBhYnN0cmFjdCBpbnRlcmZhY2VzIGluIHlvdXIgQVBJ
cyBjYW4gaGVscAotLy8gbWFrZSB5b3VyIGNvZGUgd29yayB3aXRoIGEgdmFyaWV0eSBvZiBpbnB1
dCBhbmQgb3V0cHV0IHR5cGVzLgotLy8KLS8vIFRoaXMgZmlsZSBhbHNvIGRlY2xhcmVzIHRoZSBm
b2xsb3dpbmcgY29tbW9ubHkgdXNlZCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UKLS8vIGludGVy
ZmFjZXMuCi0vLwotLy8gICBCeXRlU2luazoKLS8vICAgICAgVW5jaGVja2VkQXJyYXlCeXRlU2lu
ayAgV3JpdGVzIHRvIGFuIGFycmF5LCB3aXRob3V0IGJvdW5kcyBjaGVja2luZwotLy8gICAgICBD
aGVja2VkQXJyYXlCeXRlU2luayAgICBXcml0ZXMgdG8gYW4gYXJyYXksIHdpdGggYm91bmRzIGNo
ZWNraW5nCi0vLyAgICAgIEdyb3dpbmdBcnJheUJ5dGVTaW5rICAgIEFsbG9jYXRlcyBhbmQgd3Jp
dGVzIHRvIGEgZ3Jvd2FibGUgYnVmZmVyCi0vLyAgICAgIFN0cmluZ0J5dGVTaW5rICAgICAgICAg
IFdyaXRlcyB0byBhbiBTVEwgc3RyaW5nCi0vLyAgICAgIE51bGxCeXRlU2luayAgICAgICAgICAg
IENvbnN1bWVzIGEgbmV2ZXItZW5kaW5nIHN0cmVhbSBvZiBieXRlcwotLy8KLS8vICAgQnl0ZVNv
dXJjZToKLS8vICAgICAgQXJyYXlCeXRlU291cmNlICAgICAgICAgUmVhZHMgZnJvbSBhbiBhcnJh
eSBvciBzdHJpbmcvU3RyaW5nUGllY2UKLS8vICAgICAgTGltaXRlZEJ5dGVTb3VyY2UgICAgICAg
TGltaXRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIGFuCi0KLSNpZm5kZWYgR09PR0xF
X1BST1RPQlVGX1NUVUJTX0JZVEVTVFJFQU1fSF8KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1NU
VUJTX0JZVEVTVFJFQU1fSF8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmlu
Zz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuaD4KLQotY2xhc3MgQ29yZEJ5dGVT
aW5rOwotY2xhc3MgTWVtQmxvY2s7Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSBzdHJpbmdzIHsKLQotLy8gQW4gYWJzdHJhY3QgaW50ZXJmYWNl
IGZvciBhbiBvYmplY3QgdGhhdCBjb25zdW1lcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLiBUaGlzCi0v
LyBpbnRlcmZhY2Ugb2ZmZXJzIDMgZGlmZmVyZW50IHdheXMgdG8gYXBwZW5kIGRhdGEsIGFuZCBh
IEZsdXNoKCkgZnVuY3Rpb24uCi0vLwotLy8gRXhhbXBsZToKLS8vCi0vLyAgIHN0cmluZyBteV9k
YXRhOwotLy8gICAuLi4KLS8vICAgQnl0ZVNpbmsqIHNpbmsgPSAuLi4KLS8vICAgc2luay0+QXBw
ZW5kKG15X2RhdGEuZGF0YSgpLCBteV9kYXRhLnNpemUoKSk7Ci0vLyAgIHNpbmstPkZsdXNoKCk7
Ci0vLwotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIEJ5dGVTaW5rIHsKLSBwdWJsaWM6Ci0gIEJ5
dGVTaW5rKCkge30KLSAgdmlydHVhbCB+Qnl0ZVNpbmsoKSB7fQotCi0gIC8vIEFwcGVuZHMgdGhl
ICJuIiBieXRlcyBzdGFydGluZyBhdCAiYnl0ZXMiLgotICB2aXJ0dWFsIHZvaWQgQXBwZW5kKGNv
bnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbikgPSAwOwotCi0gIC8vIEZsdXNoZXMgaW50ZXJuYWwg
YnVmZmVycy4gVGhlIGRlZmF1bHQgaW1wbGVtZW5hdGlvbiBkb2VzIG5vdGhpbmcuIEJ5dGVTaW5r
Ci0gIC8vIHN1YmNsYXNzZXMgbWF5IHVzZSBpbnRlcm5hbCBidWZmZXJzIHRoYXQgcmVxdWlyZSBj
YWxsaW5nIEZsdXNoKCkgYXQgdGhlIGVuZAotICAvLyBvZiB0aGUgc3RyZWFtLgotICB2aXJ0dWFs
IHZvaWQgRmx1c2goKTsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNU
UlVDVE9SUyhCeXRlU2luayk7Ci19OwotCi0vLyBBbiBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGFu
IG9iamVjdCB0aGF0IHByb2R1Y2VzIGEgZml4ZWQtc2l6ZSBzZXF1ZW5jZSBvZgotLy8gYnl0ZXMu
Ci0vLwotLy8gRXhhbXBsZToKLS8vCi0vLyAgIEJ5dGVTb3VyY2UqIHNvdXJjZSA9IC4uLgotLy8g
ICB3aGlsZSAoc291cmNlLT5BdmFpbGFibGUoKSA+IDApIHsKLS8vICAgICBTdHJpbmdQaWVjZSBk
YXRhID0gc291cmNlLT5QZWVrKCk7Ci0vLyAgICAgLi4uIGRvIHNvbWV0aGluZyB3aXRoICJkYXRh
IiAuLi4KLS8vICAgICBzb3VyY2UtPlNraXAoZGF0YS5sZW5ndGgoKSk7Ci0vLyAgIH0KLS8vCi1j
bGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgQnl0ZVNvdXJjZSB7Ci0gcHVibGljOgotICBCeXRlU291
cmNlKCkge30KLSAgdmlydHVhbCB+Qnl0ZVNvdXJjZSgpIHt9Ci0KLSAgLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gcmVhZCBmcm9tIHRoZSBzb3VyY2UuIEF2YWlsYWJsZSgp
Ci0gIC8vIHNob3VsZCBkZWNyZWFzZSBieSBOIGVhY2ggdGltZSBTa2lwKE4pIGlzIGNhbGxlZC4g
QXZhaWxhYmxlKCkgbWF5IG5vdAotICAvLyBpbmNyZWFzZS4gQXZhaWxhYmxlKCkgcmV0dXJuaW5n
IDAgaW5kaWNhdGVzIHRoYXQgdGhlIEJ5dGVTb3VyY2UgaXMKLSAgLy8gZXhoYXVzdGVkLgotICAv
LwotICAvLyBOb3RlOiBTaXplKCkgbWF5IGhhdmUgYmVlbiBhIG1vcmUgYXBwcm9wcmlhdGUgbmFt
ZSBhcyBpdCdzIG1vcmUKLSAgLy8gICAgICAgaW5kaWNhdGl2ZSBvZiB0aGUgZml4ZWQtc2l6ZSBu
YXR1cmUgb2YgYSBCeXRlU291cmNlLgotICB2aXJ0dWFsIHNpemVfdCBBdmFpbGFibGUoKSBjb25z
dCA9IDA7Ci0KLSAgLy8gUmV0dXJucyBhIFN0cmluZ1BpZWNlIG9mIHRoZSBuZXh0IGNvbnRpZ3Vv
dXMgcmVnaW9uIG9mIHRoZSBzb3VyY2UuIERvZXMgbm90Ci0gIC8vIHJlcG9zaXRpb24gdGhlIHNv
dXJjZS4gVGhlIHJldHVybmVkIHJlZ2lvbiBpcyBlbXB0eSBpZmYgQXZhaWxhYmxlKCkgPT0gMC4K
LSAgLy8KLSAgLy8gVGhlIHJldHVybmVkIHJlZ2lvbiBpcyB2YWxpZCB1bnRpbCB0aGUgbmV4dCBj
YWxsIHRvIFNraXAoKSBvciB1bnRpbCB0aGlzCi0gIC8vIG9iamVjdCBpcyBkZXN0cm95ZWQsIHdo
aWNoZXZlciBvY2N1cnMgZmlyc3QuCi0gIC8vCi0gIC8vIFRoZSBsZW5ndGggb2YgdGhlIHJldHVy
bmVkIFN0cmluZ1BpZWNlIHdpbGwgYmUgPD0gQXZhaWxhYmxlKCkuCi0gIHZpcnR1YWwgU3RyaW5n
UGllY2UgUGVlaygpID0gMDsKLQotICAvLyBTa2lwcyB0aGUgbmV4dCBuIGJ5dGVzLiBJbnZhbGlk
YXRlcyBhbnkgU3RyaW5nUGllY2UgcmV0dXJuZWQgYnkgYSBwcmV2aW91cwotICAvLyBjYWxsIHRv
IFBlZWsoKS4KLSAgLy8KLSAgLy8gUkVRVUlSRVM6IEF2YWlsYWJsZSgpID49IG4KLSAgdmlydHVh
bCB2b2lkIFNraXAoc2l6ZV90IG4pID0gMDsKLQotICAvLyBXcml0ZXMgdGhlIG5leHQgbiBieXRl
cyBpbiB0aGlzIEJ5dGVTb3VyY2UgdG8gdGhlIGdpdmVuIEJ5dGVTaW5rLCBhbmQKLSAgLy8gYWR2
YW5jZXMgdGhpcyBCeXRlU291cmNlIHBhc3QgdGhlIGNvcGllZCBieXRlcy4gVGhlIGRlZmF1bHQg
aW1wbGVtZW50YXRpb24KLSAgLy8gb2YgdGhpcyBtZXRob2QganVzdCBjb3BpZXMgdGhlIGJ5dGVz
IG5vcm1hbGx5LCBidXQgc3ViY2xhc3NlcyBtaWdodAotICAvLyBvdmVycmlkZSBDb3B5VG8gdG8g
b3B0aW1pemUgY2VydGFpbiBjYXNlcy4KLSAgLy8KLSAgLy8gUkVRVUlSRVM6IEF2YWlsYWJsZSgp
ID49IG4KLSAgdmlydHVhbCB2b2lkIENvcHlUbyhCeXRlU2luayogc2luaywgc2l6ZV90IG4pOwot
Ci0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEJ5dGVTb3Vy
Y2UpOwotfTsKLQotLy8KLS8vIFNvbWUgY29tbW9ubHkgdXNlZCBpbXBsZW1lbnRhdGlvbnMgb2Yg
Qnl0ZVNpbmsKLS8vCi0KLS8vIEltcGxlbWVudGF0aW9uIG9mIEJ5dGVTaW5rIHRoYXQgd3JpdGVz
IHRvIGFuIHVuc2l6ZWQgYnl0ZSBhcnJheS4gTm8KLS8vIGJvdW5kcy1jaGVja2luZyBpcyBwZXJm
b3JtZWQtLWl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKLS8vIHRo
YXQgdGhlIGRlc3RpbmF0aW9uIGFycmF5IGlzIGxhcmdlIGVub3VnaC4KLS8vCi0vLyBFeGFtcGxl
OgotLy8KLS8vICAgY2hhciBidWZbMTBdOwotLy8gICBVbmNoZWNrZWRBcnJheUJ5dGVTaW5rIHNp
bmsoYnVmKTsKLS8vICAgc2luay5BcHBlbmQoImhpIiwgMik7ICAgIC8vIE9LCi0vLyAgIHNpbmsu
QXBwZW5kKGRhdGEsIDEwMCk7ICAvLyBXT09QUyEgT3ZlcmZsb3dzIGJ1ZlsxMF0uCi0vLwotY2xh
c3MgTElCUFJPVE9CVUZfRVhQT1JUIFVuY2hlY2tlZEFycmF5Qnl0ZVNpbmsgOiBwdWJsaWMgQnl0
ZVNpbmsgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgVW5jaGVja2VkQXJyYXlCeXRlU2luayhjaGFy
KiBkZXN0KSA6IGRlc3RfKGRlc3QpIHt9Ci0gIHZpcnR1YWwgdm9pZCBBcHBlbmQoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IG4pOwotCi0gIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgb3V0cHV0IHBv
aW50ZXIgc28gdGhhdCBhIGNhbGxlciBjYW4gc2VlIGhvdyBtYW55IGJ5dGVzCi0gIC8vIHdlcmUg
cHJvZHVjZWQuCi0gIC8vCi0gIC8vIE5vdGU6IHRoaXMgbWV0aG9kIGlzIG5vdCBwYXJ0IG9mIHRo
ZSBCeXRlU2luayBpbnRlcmZhY2UuCi0gIGNoYXIqIEN1cnJlbnREZXN0aW5hdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGRlc3RfOyB9Ci0KLSBwcml2YXRlOgotICBjaGFyKiBkZXN0XzsKLSAgR09PR0xF
X0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFVuY2hlY2tlZEFycmF5Qnl0ZVNpbmspOwotfTsK
LQotLy8gSW1wbGVtZW50YXRpb24gb2YgQnl0ZVNpbmsgdGhhdCB3cml0ZXMgdG8gYSBzaXplZCBi
eXRlIGFycmF5LiBUaGlzIHNpbmsgd2lsbAotLy8gbm90IHdyaXRlIG1vcmUgdGhhbiAiY2FwYWNp
dHkiIGJ5dGVzIHRvIG91dGJ1Zi4gT25jZSAiY2FwYWNpdHkiIGJ5dGVzIGFyZQotLy8gYXBwZW5k
ZWQsIHN1YnNlcXVlbnQgYnl0ZXMgd2lsbCBiZSBpZ25vcmVkIGFuZCBPdmVyZmxvd2VkKCkgd2ls
bCByZXR1cm4gdHJ1ZS4KLS8vIE92ZXJmbG93ZWQoKSBkb2VzIG5vdCBjYXVzZSBhIHJ1bnRpbWUg
ZXJyb3IgKGkuZS4sIGl0IGRvZXMgbm90IENIRUNLIGZhaWwpLgotLy8KLS8vIEV4YW1wbGU6Ci0v
LwotLy8gICBjaGFyIGJ1ZlsxMF07Ci0vLyAgIENoZWNrZWRBcnJheUJ5dGVTaW5rIHNpbmsoYnVm
LCAxMCk7Ci0vLyAgIHNpbmsuQXBwZW5kKCJoaSIsIDIpOyAgICAvLyBPSwotLy8gICBzaW5rLkFw
cGVuZChkYXRhLCAxMDApOyAgLy8gV2lsbCBvbmx5IHdyaXRlIDggbW9yZSBieXRlcwotLy8KLWNs
YXNzIExJQlBST1RPQlVGX0VYUE9SVCBDaGVja2VkQXJyYXlCeXRlU2luayA6IHB1YmxpYyBCeXRl
U2luayB7Ci0gcHVibGljOgotICBDaGVja2VkQXJyYXlCeXRlU2luayhjaGFyKiBvdXRidWYsIHNp
emVfdCBjYXBhY2l0eSk7Ci0gIHZpcnR1YWwgdm9pZCBBcHBlbmQoY29uc3QgY2hhciogYnl0ZXMs
IHNpemVfdCBuKTsKLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkg
d3JpdHRlbiB0byB0aGUgc2luay4KLSAgc2l6ZV90IE51bWJlck9mQnl0ZXNXcml0dGVuKCkgY29u
c3QgeyByZXR1cm4gc2l6ZV87IH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGJ5dGVzIHdl
cmUgZGlzY2FyZGVkLCBpLmUuLCBpZiB0aGVyZSB3YXMgYW4KLSAgLy8gYXR0ZW1wdCB0byB3cml0
ZSBtb3JlIHRoYW4gJ2NhcGFjaXR5JyBieXRlcy4KLSAgYm9vbCBPdmVyZmxvd2VkKCkgY29uc3Qg
eyByZXR1cm4gb3ZlcmZsb3dlZF87IH0KLQotIHByaXZhdGU6Ci0gIGNoYXIqIG91dGJ1Zl87Ci0g
IGNvbnN0IHNpemVfdCBjYXBhY2l0eV87Ci0gIHNpemVfdCBzaXplXzsKLSAgYm9vbCBvdmVyZmxv
d2VkXzsKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKENoZWNrZWRBcnJheUJ5
dGVTaW5rKTsKLX07Ci0KLS8vIEltcGxlbWVudGF0aW9uIG9mIEJ5dGVTaW5rIHRoYXQgYWxsb2Nh
dGVzIGFuIGludGVybmFsIGJ1ZmZlciAoYSBjaGFyIGFycmF5KQotLy8gYW5kIGV4cGFuZHMgaXQg
YXMgbmVlZGVkIHRvIGFjY29tb2RhdGUgYXBwZW5kZWQgZGF0YSAoc2ltaWxhciB0byBhIHN0cmlu
ZyksCi0vLyBhbmQgYWxsb3dzIHRoZSBjYWxsZXIgdG8gdGFrZSBvd25lcnNoaXAgb2YgdGhlIGlu
dGVybmFsIGJ1ZmZlciB2aWEgdGhlCi0vLyBHZXRCdWZmZXIoKSBtZXRob2QuIFRoZSBidWZmZXIg
cmV0dXJuZWQgZnJvbSBHZXRCdWZmZXIoKSBtdXN0IGJlIGRlbGV0ZWQgYnkKLS8vIHRoZSBjYWxs
ZXIgd2l0aCBkZWxldGVbXS4gR2V0QnVmZmVyKCkgYWxzbyBzZXRzIHRoZSBpbnRlcm5hbCBidWZm
ZXIgdG8gYmUKLS8vIGVtcHR5LCBhbmQgc3Vic2VxdWVudCBhcHBlbmRzIHRvIHRoZSBzaW5rIHdp
bGwgY3JlYXRlIGEgbmV3IGJ1ZmZlci4gVGhlCi0vLyBkZXN0cnVjdG9yIHdpbGwgZnJlZSB0aGUg
aW50ZXJuYWwgYnVmZmVyIGlmIEdldEJ1ZmZlcigpIHdhcyBub3QgY2FsbGVkLgotLy8KLS8vIEV4
YW1wbGU6Ci0vLwotLy8gICBHcm93aW5nQXJyYXlCeXRlU2luayBzaW5rKDEwKTsKLS8vICAgc2lu
ay5BcHBlbmQoImhpIiwgMik7Ci0vLyAgIHNpbmsuQXBwZW5kKGRhdGEsIG4pOwotLy8gICBjb25z
dCBjaGFyKiBidWYgPSBzaW5rLkdldEJ1ZmZlcigpOyAgLy8gT3duZXJzaGlwIHRyYW5zZmVycmVk
Ci0vLyAgIGRlbGV0ZVtdIGJ1ZjsKLS8vCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgR3Jvd2lu
Z0FycmF5Qnl0ZVNpbmsgOiBwdWJsaWMgc3RyaW5nczo6Qnl0ZVNpbmsgewotIHB1YmxpYzoKLSAg
ZXhwbGljaXQgR3Jvd2luZ0FycmF5Qnl0ZVNpbmsoc2l6ZV90IGVzdGltYXRlZF9zaXplKTsKLSAg
dmlydHVhbCB+R3Jvd2luZ0FycmF5Qnl0ZVNpbmsoKTsKLSAgdmlydHVhbCB2b2lkIEFwcGVuZChj
b25zdCBjaGFyKiBieXRlcywgc2l6ZV90IG4pOwotCi0gIC8vIFJldHVybnMgdGhlIGFsbG9jYXRl
ZCBidWZmZXIsIGFuZCBzZXRzIG5ieXRlcyB0byBpdHMgc2l6ZS4gVGhlIGNhbGxlciB0YWtlcwot
ICAvLyBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciBhbmQgbXVzdCBkZWxldGUgaXQgd2l0aCBkZWxl
dGVbXS4KLSAgY2hhciogR2V0QnVmZmVyKHNpemVfdCogbmJ5dGVzKTsKLQotIHByaXZhdGU6Ci0g
IHZvaWQgRXhwYW5kKHNpemVfdCBhbW91bnQpOwotICB2b2lkIFNocmlua1RvRml0KCk7Ci0KLSAg
c2l6ZV90IGNhcGFjaXR5XzsKLSAgY2hhciogYnVmXzsKLSAgc2l6ZV90IHNpemVfOwotICBHT09H
TEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoR3Jvd2luZ0FycmF5Qnl0ZVNpbmspOwotfTsK
LQotLy8gSW1wbGVtZW50YXRpb24gb2YgQnl0ZVNpbmsgdGhhdCBhcHBlbmRzIHRvIHRoZSBnaXZl
biBzdHJpbmcuCi0vLyBFeGlzdGluZyBjb250ZW50cyBvZiAiZGVzdCIgYXJlIG5vdCBtb2RpZmll
ZDsgbmV3IGRhdGEgaXMgYXBwZW5kZWQuCi0vLwotLy8gRXhhbXBsZToKLS8vCi0vLyAgIHN0cmlu
ZyBkZXN0ID0gIkhlbGxvICI7Ci0vLyAgIFN0cmluZ0J5dGVTaW5rIHNpbmsoJmRlc3QpOwotLy8g
ICBzaW5rLkFwcGVuZCgiV29ybGQiLCA1KTsKLS8vICAgYXNzZXJ0KGRlc3QgPT0gIkhlbGxvIFdv
cmxkIik7Ci0vLwotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFN0cmluZ0J5dGVTaW5rIDogcHVi
bGljIEJ5dGVTaW5rIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFN0cmluZ0J5dGVTaW5rKHN0cmlu
ZyogZGVzdCkgOiBkZXN0XyhkZXN0KSB7fQotICB2aXJ0dWFsIHZvaWQgQXBwZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBuKTsKLQotIHByaXZhdGU6Ci0gIHN0cmluZyogZGVzdF87Ci0gIEdP
T0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTdHJpbmdCeXRlU2luayk7Ci19OwotCi0v
LyBJbXBsZW1lbnRhdGlvbiBvZiBCeXRlU2luayB0aGF0IGRpc2NhcmRzIGFsbCBkYXRhLgotLy8K
LS8vIEV4YW1wbGU6Ci0vLwotLy8gICBOdWxsQnl0ZVNpbmsgc2luazsKLS8vICAgc2luay5BcHBl
bmQoZGF0YSwgZGF0YS5zaXplKCkpOyAgLy8gQWxsIGRhdGEgaWdub3JlZC4KLS8vCi1jbGFzcyBM
SUJQUk9UT0JVRl9FWFBPUlQgTnVsbEJ5dGVTaW5rIDogcHVibGljIEJ5dGVTaW5rIHsKLSBwdWJs
aWM6Ci0gIE51bGxCeXRlU2luaygpIHt9Ci0gIHZpcnR1YWwgdm9pZCBBcHBlbmQoY29uc3QgY2hh
ciAqZGF0YSwgc2l6ZV90IG4pIHt9Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoTnVsbEJ5dGVTaW5rKTsKLX07Ci0KLS8vCi0vLyBTb21lIGNvbW1vbmx5
IHVzZWQgaW1wbGVtZW50YXRpb25zIG9mIEJ5dGVTb3VyY2UKLS8vCi0KLS8vIEltcGxlbWVudGF0
aW9uIG9mIEJ5dGVTb3VyY2UgdGhhdCByZWFkcyBmcm9tIGEgU3RyaW5nUGllY2UuCi0vLwotLy8g
RXhhbXBsZToKLS8vCi0vLyAgIHN0cmluZyBkYXRhID0gIkhlbGxvIjsKLS8vICAgQXJyYXlCeXRl
U291cmNlIHNvdXJjZShkYXRhKTsKLS8vICAgYXNzZXJ0KHNvdXJjZS5BdmFpbGFibGUoKSA9PSA1
KTsKLS8vICAgYXNzZXJ0KHNvdXJjZS5QZWVrKCkgPT0gIkhlbGxvIik7Ci0vLwotY2xhc3MgTElC
UFJPVE9CVUZfRVhQT1JUIEFycmF5Qnl0ZVNvdXJjZSA6IHB1YmxpYyBCeXRlU291cmNlIHsKLSBw
dWJsaWM6Ci0gIGV4cGxpY2l0IEFycmF5Qnl0ZVNvdXJjZShTdHJpbmdQaWVjZSBzKSA6IGlucHV0
XyhzKSB7fQotCi0gIHZpcnR1YWwgc2l6ZV90IEF2YWlsYWJsZSgpIGNvbnN0OwotICB2aXJ0dWFs
IFN0cmluZ1BpZWNlIFBlZWsoKTsKLSAgdmlydHVhbCB2b2lkIFNraXAoc2l6ZV90IG4pOwotCi0g
cHJpdmF0ZToKLSAgU3RyaW5nUGllY2UgICBpbnB1dF87Ci0gIEdPT0dMRV9ESVNBTExPV19FVklM
X0NPTlNUUlVDVE9SUyhBcnJheUJ5dGVTb3VyY2UpOwotfTsKLQotLy8gSW1wbGVtZW50YXRpb24g
b2YgQnl0ZVNvdXJjZSB0aGF0IHdyYXBzIGFub3RoZXIgQnl0ZVNvdXJjZSwgbGltaXRpbmcgdGhl
Ci0vLyBudW1iZXIgb2YgYnl0ZXMgcmV0dXJuZWQuCi0vLwotLy8gVGhlIGNhbGxlciBtYWludGFp
bnMgb3duZXJzaGlwIG9mIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSwgYW5kIG1heSBub3QgdXNlIHRo
ZQotLy8gdW5kZXJseWluZyBzb3VyY2Ugd2hpbGUgdXNpbmcgdGhlIExpbWl0Qnl0ZVNvdXJjZSBv
YmplY3QuICBUaGUgdW5kZXJseWluZwotLy8gc291cmNlJ3MgcG9pbnRlciBpcyBhZHZhbmNlZCBi
eSBuIGJ5dGVzIGV2ZXJ5IHRpbWUgdGhpcyBMaW1pdEJ5dGVTb3VyY2UKLS8vIG9iamVjdCBpcyBh
ZHZhbmNlZCBieSBuLgotLy8KLS8vIEV4YW1wbGU6Ci0vLwotLy8gICBzdHJpbmcgZGF0YSA9ICJI
ZWxsbyBXb3JsZCI7Ci0vLyAgIEFycmF5Qnl0ZVNvdXJjZSBhYnMoZGF0YSk7Ci0vLyAgIGFzc2Vy
dChhYnMuQXZhaWxhYmxlKCkgPT0gZGF0YS5zaXplKCkpOwotLy8KLS8vICAgTGltaXRCeXRlU291
cmNlIGxpbWl0KGFicywgNSk7Ci0vLyAgIGFzc2VydChsaW1pdC5BdmFpbGFibGUoKSA9PSA1KTsK
LS8vICAgYXNzZXJ0KGxpbWl0LlBlZWsoKSA9PSAiSGVsbG8iKTsKLS8vCi1jbGFzcyBMSUJQUk9U
T0JVRl9FWFBPUlQgTGltaXRCeXRlU291cmNlIDogcHVibGljIEJ5dGVTb3VyY2UgewotIHB1Ymxp
YzoKLSAgLy8gUmV0dXJucyBhdCBtb3N0ICJsaW1pdCIgYnl0ZXMgZnJvbSAic291cmNlIi4KLSAg
TGltaXRCeXRlU291cmNlKEJ5dGVTb3VyY2UqIHNvdXJjZSwgc2l6ZV90IGxpbWl0KTsKLQotICB2
aXJ0dWFsIHNpemVfdCBBdmFpbGFibGUoKSBjb25zdDsKLSAgdmlydHVhbCBTdHJpbmdQaWVjZSBQ
ZWVrKCk7Ci0gIHZpcnR1YWwgdm9pZCBTa2lwKHNpemVfdCBuKTsKLQotICAvLyBXZSBvdmVycmlk
ZSBDb3B5VG8gc28gdGhhdCB3ZSBjYW4gZm9yd2FyZCB0byB0aGUgdW5kZXJseWluZyBzb3VyY2Us
IGluCi0gIC8vIGNhc2UgaXQgaGFzIGFuIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZiBDb3B5
VG8uCi0gIHZpcnR1YWwgdm9pZCBDb3B5VG8oQnl0ZVNpbmsqIHNpbmssIHNpemVfdCBuKTsKLQot
IHByaXZhdGU6Ci0gIEJ5dGVTb3VyY2UqIHNvdXJjZV87Ci0gIHNpemVfdCBsaW1pdF87Ci19Owot
Ci19ICAvLyBuYW1lc3BhY2Ugc3RyaW5ncwotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAv
LyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1NUVUJTX0JZ
VEVTVFJFQU1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9ieXRlc3Ry
ZWFtX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2J5dGVzdHJlYW1fdW5p
dHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZjExNGFiYzcwMjhiZjEy
MDRmM2Q3YTI1MmQ2ODdhMjVmZTgxNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2J5dGVzdHJlYW1fdW5pdHRl
c3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0
cmVhbS5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9nb29n
bGV0ZXN0Lmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHN0cmluZ3MgewotbmFtZXNwYWNlIHsK
LQotLy8gV2UgdXNlIHRoaXMgY2xhc3MgaW5zdGVhZCBvZiBBcnJheUJ5dGVTb3VyY2UgdG8gc2lt
dWxhdGUgYSBCeXRlU291cmNlIHRoYXQKLS8vIGNvbnRhaW5zIG11bHRpcGxlIGZyYWdtZW50cy4g
IEFycmF5Qnl0ZVNvdXJjZSByZXR1cm5zIHRoZSBlbnRpcmUgYXJyYXkgaW4KLS8vIG9uZSBmcmFn
bWVudC4KLWNsYXNzIE1vY2tCeXRlU291cmNlIDogcHVibGljIEJ5dGVTb3VyY2UgewotIHB1Ymxp
YzoKLSAgTW9ja0J5dGVTb3VyY2UoU3RyaW5nUGllY2UgZGF0YSwgaW50IGJsb2NrX3NpemUpCi0g
ICAgOiBkYXRhXyhkYXRhKSwgYmxvY2tfc2l6ZV8oYmxvY2tfc2l6ZSkge30KLQotICBzaXplX3Qg
QXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gZGF0YV8uc2l6ZSgpOyB9Ci0gIFN0cmluZ1BpZWNl
IFBlZWsoKSB7Ci0gICAgcmV0dXJuIGRhdGFfLnN1YnN0cigwLCBibG9ja19zaXplXyk7Ci0gIH0K
LSAgdm9pZCBTa2lwKHNpemVfdCBuKSB7IGRhdGFfLnJlbW92ZV9wcmVmaXgobik7IH0KLQotIHBy
aXZhdGU6Ci0gIFN0cmluZ1BpZWNlIGRhdGFfOwotICBpbnQgYmxvY2tfc2l6ZV87Ci19OwotCi1U
RVNUKEJ5dGVTb3VyY2VUZXN0LCBDb3B5VG8pIHsKLSAgU3RyaW5nUGllY2UgZGF0YSgiSGVsbG8g
d29ybGQhIik7Ci0gIE1vY2tCeXRlU291cmNlIHNvdXJjZShkYXRhLCAzKTsKLSAgc3RyaW5nIHN0
cjsKLSAgU3RyaW5nQnl0ZVNpbmsgc2luaygmc3RyKTsKLQotICBzb3VyY2UuQ29weVRvKCZzaW5r
LCBkYXRhLnNpemUoKSk7Ci0gIEVYUEVDVF9FUShkYXRhLCBzdHIpOwotfQotCi1URVNUKEJ5dGVT
b3VyY2VUZXN0LCBDb3B5U3Vic3RyaW5nVG8pIHsKLSAgU3RyaW5nUGllY2UgZGF0YSgiSGVsbG8g
d29ybGQhIik7Ci0gIE1vY2tCeXRlU291cmNlIHNvdXJjZShkYXRhLCAzKTsKLSAgc291cmNlLlNr
aXAoMSk7Ci0gIHN0cmluZyBzdHI7Ci0gIFN0cmluZ0J5dGVTaW5rIHNpbmsoJnN0cik7Ci0KLSAg
c291cmNlLkNvcHlUbygmc2luaywgZGF0YS5zaXplKCkgLSAyKTsKLSAgRVhQRUNUX0VRKGRhdGEu
c3Vic3RyKDEsIGRhdGEuc2l6ZSgpIC0gMiksIHN0cik7Ci0gIEVYUEVDVF9FUSgiISIsIHNvdXJj
ZS5QZWVrKCkpOwotfQotCi1URVNUKEJ5dGVTb3VyY2VUZXN0LCBMaW1pdEJ5dGVTb3VyY2UpIHsK
LSAgU3RyaW5nUGllY2UgZGF0YSgiSGVsbG8gd29ybGQhIik7Ci0gIE1vY2tCeXRlU291cmNlIHNv
dXJjZShkYXRhLCAzKTsKLSAgTGltaXRCeXRlU291cmNlIGxpbWl0X3NvdXJjZSgmc291cmNlLCA2
KTsKLSAgRVhQRUNUX0VRKDYsIGxpbWl0X3NvdXJjZS5BdmFpbGFibGUoKSk7Ci0gIGxpbWl0X3Nv
dXJjZS5Ta2lwKDEpOwotICBFWFBFQ1RfRVEoNSwgbGltaXRfc291cmNlLkF2YWlsYWJsZSgpKTsK
LQotICB7Ci0gICAgc3RyaW5nIHN0cjsKLSAgICBTdHJpbmdCeXRlU2luayBzaW5rKCZzdHIpOwot
ICAgIGxpbWl0X3NvdXJjZS5Db3B5VG8oJnNpbmssIGxpbWl0X3NvdXJjZS5BdmFpbGFibGUoKSk7
Ci0gICAgRVhQRUNUX0VRKCJlbGxvICIsIHN0cik7Ci0gICAgRVhQRUNUX0VRKDAsIGxpbWl0X3Nv
dXJjZS5BdmFpbGFibGUoKSk7Ci0gICAgRVhQRUNUX0VRKDYsIHNvdXJjZS5BdmFpbGFibGUoKSk7
Ci0gIH0KLQotICB7Ci0gICAgc3RyaW5nIHN0cjsKLSAgICBTdHJpbmdCeXRlU2luayBzaW5rKCZz
dHIpOwotICAgIHNvdXJjZS5Db3B5VG8oJnNpbmssIHNvdXJjZS5BdmFpbGFibGUoKSk7Ci0gICAg
RVhQRUNUX0VRKCJ3b3JsZCEiLCBzdHIpOwotICAgIEVYUEVDVF9FUSgwLCBzb3VyY2UuQXZhaWxh
YmxlKCkpOwotICB9Ci19Ci0KLVRFU1QoQnl0ZVNvdXJjZVRlc3QsIENvcHlUb1N0cmluZ0J5dGVT
aW5rKSB7Ci0gIFN0cmluZ1BpZWNlIGRhdGEoIkhlbGxvIHdvcmxkISIpOwotICBNb2NrQnl0ZVNv
dXJjZSBzb3VyY2UoZGF0YSwgMyk7Ci0gIHN0cmluZyBzdHI7Ci0gIFN0cmluZ0J5dGVTaW5rIHNp
bmsoJnN0cik7Ci0gIHNvdXJjZS5Db3B5VG8oJnNpbmssIGRhdGEuc2l6ZSgpKTsKLSAgRVhQRUNU
X0VRKGRhdGEsIHN0cik7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IEJ5dGVTaW5rIGlzIHN1YmNsYXNz
YWJsZSBhbmQgRmx1c2goKSBvdmVycmlkYWJsZS4KLWNsYXNzIEZsdXNoaW5nQnl0ZVNpbmsgOiBw
dWJsaWMgU3RyaW5nQnl0ZVNpbmsgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgRmx1c2hpbmdCeXRl
U2luayhzdHJpbmcqIGRlc3QpIDogU3RyaW5nQnl0ZVNpbmsoZGVzdCkge30KLSAgdmlydHVhbCB2
b2lkIEZsdXNoKCkgeyBBcHBlbmQoInoiLCAxKTsgfQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNB
TExPV19FVklMX0NPTlNUUlVDVE9SUyhGbHVzaGluZ0J5dGVTaW5rKTsKLX07Ci0KLS8vIFdyaXRl
IGFuZCBGbHVzaCB2aWEgdGhlIEJ5dGVTaW5rIHN1cGVyY2xhc3MgaW50ZXJmYWNlLgotdm9pZCBX
cml0ZUFuZEZsdXNoKEJ5dGVTaW5rKiBzKSB7Ci0gIHMtPkFwcGVuZCgiYWJjIiwgMyk7Ci0gIHMt
PkZsdXNoKCk7Ci19Ci0KLVRFU1QoQnl0ZVNpbmtUZXN0LCBGbHVzaCkgewotICBzdHJpbmcgc3Ry
OwotICBGbHVzaGluZ0J5dGVTaW5rIGZfc2luaygmc3RyKTsKLSAgV3JpdGVBbmRGbHVzaCgmZl9z
aW5rKTsKLSAgRVhQRUNUX1NUUkVRKCJhYmN6Iiwgc3RyLmNfc3RyKCkpOwotfQotCi19ICAvLyBu
YW1lc3BhY2UKLX0gIC8vIG5hbWVzcGFjZSBzdHJpbmdzCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9i
dWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9jYWxsYmFjay5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NhbGxiYWNrLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MjcxYzVlYjhmNTg2OTJjYzk2N2M5ZGJk
YzNjOTgxNDgxMGM2YzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NhbGxiYWNrLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw1NDYgKzAsMCBAQAotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfU1RVQlNfQ0FMTEJBQ0tf
SF8KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1NUVUJTX0NBTExCQUNLX0hfCi0KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWFjcm9zLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3R5cGVfdHJhaXRzLmg+Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGVtdWxhdGVzIGdv
b2dsZTMvYmFzZS9jYWxsYmFjay5oCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLQotLy8gQWJzdHJhY3QgaW50ZXJmYWNlIGZvciBhIGNhbGxiYWNrLiAgV2hlbiBj
YWxsaW5nIGFuIFJQQywgeW91IG11c3QgcHJvdmlkZQotLy8gYSBDbG9zdXJlIHRvIGNhbGwgd2hl
biB0aGUgcHJvY2VkdXJlIGNvbXBsZXRlcy4gIFNlZSB0aGUgU2VydmljZSBpbnRlcmZhY2UKLS8v
IGluIHNlcnZpY2UuaC4KLS8vCi0vLyBUbyBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdCBhIENsb3N1
cmUgd2hpY2ggY2FsbHMgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yCi0vLyBtZXRob2Qgd2l0aCBh
IHBhcnRpY3VsYXIgc2V0IG9mIHBhcmFtZXRlcnMsIHVzZSB0aGUgTmV3Q2FsbGJhY2soKSBmdW5j
dGlvbi4KLS8vIEV4YW1wbGU6Ci0vLyAgIHZvaWQgRm9vRG9uZShjb25zdCBGb29SZXNwb25zZSog
cmVzcG9uc2UpIHsKLS8vICAgICAuLi4KLS8vICAgfQotLy8KLS8vICAgdm9pZCBDYWxsRm9vKCkg
ewotLy8gICAgIC4uLgotLy8gICAgIC8vIFdoZW4gZG9uZSwgY2FsbCBGb29Eb25lKCkgYW5kIHBh
c3MgaXQgYSBwb2ludGVyIHRvIHRoZSByZXNwb25zZS4KLS8vICAgICBDbG9zdXJlKiBjYWxsYmFj
ayA9IE5ld0NhbGxiYWNrKCZGb29Eb25lLCByZXNwb25zZSk7Ci0vLyAgICAgLy8gTWFrZSB0aGUg
Y2FsbC4KLS8vICAgICBzZXJ2aWNlLT5Gb28oY29udHJvbGxlciwgcmVxdWVzdCwgcmVzcG9uc2Us
IGNhbGxiYWNrKTsKLS8vICAgfQotLy8KLS8vIEV4YW1wbGUgdGhhdCBjYWxscyBhIG1ldGhvZDoK
LS8vICAgY2xhc3MgSGFuZGxlciB7Ci0vLyAgICBwdWJsaWM6Ci0vLyAgICAgLi4uCi0vLwotLy8g
ICAgIHZvaWQgRm9vRG9uZShjb25zdCBGb29SZXNwb25zZSogcmVzcG9uc2UpIHsKLS8vICAgICAg
IC4uLgotLy8gICAgIH0KLS8vCi0vLyAgICAgdm9pZCBDYWxsRm9vKCkgewotLy8gICAgICAgLi4u
Ci0vLyAgICAgICAvLyBXaGVuIGRvbmUsIGNhbGwgRm9vRG9uZSgpIGFuZCBwYXNzIGl0IGEgcG9p
bnRlciB0byB0aGUgcmVzcG9uc2UuCi0vLyAgICAgICBDbG9zdXJlKiBjYWxsYmFjayA9IE5ld0Nh
bGxiYWNrKHRoaXMsICZIYW5kbGVyOjpGb29Eb25lLCByZXNwb25zZSk7Ci0vLyAgICAgICAvLyBN
YWtlIHRoZSBjYWxsLgotLy8gICAgICAgc2VydmljZS0+Rm9vKGNvbnRyb2xsZXIsIHJlcXVlc3Qs
IHJlc3BvbnNlLCBjYWxsYmFjayk7Ci0vLyAgICAgfQotLy8gICB9OwotLy8KLS8vIEN1cnJlbnRs
eSBOZXdDYWxsYmFjaygpIHN1cHBvcnRzIGJpbmRpbmcgemVybywgb25lLCBvciB0d28gYXJndW1l
bnRzLgotLy8KLS8vIENhbGxiYWNrcyBjcmVhdGVkIHdpdGggTmV3Q2FsbGJhY2soKSBhdXRvbWF0
aWNhbGx5IGRlbGV0ZSB0aGVtc2VsdmVzIHdoZW4KLS8vIGV4ZWN1dGVkLiAgVGhleSBzaG91bGQg
YmUgdXNlZCB3aGVuIGEgY2FsbGJhY2sgaXMgdG8gYmUgY2FsbGVkIGV4YWN0bHkKLS8vIG9uY2Ug
KHVzdWFsbHkgdGhlIGNhc2Ugd2l0aCBSUEMgY2FsbGJhY2tzKS4gIElmIGEgY2FsbGJhY2sgbWF5
IGJlIGNhbGxlZAotLy8gYSBkaWZmZXJlbnQgbnVtYmVyIG9mIHRpbWVzIChpbmNsdWRpbmcgemVy
byksIGNyZWF0ZSBpdCB3aXRoCi0vLyBOZXdQZXJtYW5lbnRDYWxsYmFjaygpIGluc3RlYWQuICBZ
b3UgYXJlIHRoZW4gcmVzcG9uc2libGUgZm9yIGRlbGV0aW5nIHRoZQotLy8gY2FsbGJhY2sgKHVz
aW5nIHRoZSAiZGVsZXRlIiBrZXl3b3JkIGFzIG5vcm1hbCkuCi0vLwotLy8gTm90ZSB0aGF0IE5l
d0NhbGxiYWNrKCkgaXMgYSBiaXQgdG91Y2h5IHJlZ2FyZGluZyBhcmd1bWVudCB0eXBlcy4gIEdl
bmVyYWxseSwKLS8vIHRoZSB2YWx1ZXMgeW91IHByb3ZpZGUgZm9yIHRoZSBwYXJhbWV0ZXIgYmlu
ZGluZ3MgbXVzdCBleGFjdGx5IG1hdGNoIHRoZQotLy8gdHlwZXMgYWNjZXB0ZWQgYnkgdGhlIGNh
bGxiYWNrIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGU6Ci0vLyAgIHZvaWQgRm9vKHN0cmluZyBzKTsK
LS8vICAgTmV3Q2FsbGJhY2soJkZvbywgImZvbyIpOyAgICAgICAgICAvLyBXT04nVCBXT1JLOiAg
Y29uc3QgY2hhciogIT0gc3RyaW5nCi0vLyAgIE5ld0NhbGxiYWNrKCZGb28sIHN0cmluZygiZm9v
IikpOyAgLy8gV09SS1MKLS8vIEFsc28gbm90ZSB0aGF0IHRoZSBhcmd1bWVudHMgY2Fubm90IGJl
IHJlZmVyZW5jZXM6Ci0vLyAgIHZvaWQgRm9vKGNvbnN0IHN0cmluZyYgcyk7Ci0vLyAgIHN0cmlu
ZyBteV9zdHI7Ci0vLyAgIE5ld0NhbGxiYWNrKCZGb28sIG15X3N0cik7ICAvLyBXT04nVCBXT1JL
OiAgQ2FuJ3QgdXNlIHJlZmVyZWNuZXMuCi0vLyBIb3dldmVyLCBjb3JyZWN0bHktdHlwZWQgcG9p
bnRlcnMgd2lsbCB3b3JrIGp1c3QgZmluZS4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBDbG9z
dXJlIHsKLSBwdWJsaWM6Ci0gIENsb3N1cmUoKSB7fQotICB2aXJ0dWFsIH5DbG9zdXJlKCk7Ci0K
LSAgdmlydHVhbCB2b2lkIFJ1bigpID0gMDsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExP
V19FVklMX0NPTlNUUlVDVE9SUyhDbG9zdXJlKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFI+
Ci1jbGFzcyBSZXN1bHRDYWxsYmFjayB7Ci0gcHVibGljOgotICBSZXN1bHRDYWxsYmFjaygpIHt9
Ci0gIHZpcnR1YWwgflJlc3VsdENhbGxiYWNrKCkge30KLQotICB2aXJ0dWFsIFIgUnVuKCkgPSAw
OwotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlc3Vs
dENhbGxiYWNrKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEExPgotY2xh
c3MgTElCUFJPVE9CVUZfRVhQT1JUIFJlc3VsdENhbGxiYWNrMSB7Ci0gcHVibGljOgotICBSZXN1
bHRDYWxsYmFjazEoKSB7fQotICB2aXJ0dWFsIH5SZXN1bHRDYWxsYmFjazEoKSB7fQotCi0gIHZp
cnR1YWwgUiBSdW4oQTEpID0gMDsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklM
X0NPTlNUUlVDVE9SUyhSZXN1bHRDYWxsYmFjazEpOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
UiwgdHlwZW5hbWUgQTEsIHR5cGVuYW1lIEEyPgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFJl
c3VsdENhbGxiYWNrMiB7Ci0gcHVibGljOgotICBSZXN1bHRDYWxsYmFjazIoKSB7fQotICB2aXJ0
dWFsIH5SZXN1bHRDYWxsYmFjazIoKSB7fQotCi0gIHZpcnR1YWwgUiBSdW4oQTEsQTIpID0gMDsK
LQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhSZXN1bHRD
YWxsYmFjazIpOwotfTsKLQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotY2xhc3MgTElCUFJPVE9C
VUZfRVhQT1JUIEZ1bmN0aW9uQ2xvc3VyZTAgOiBwdWJsaWMgQ2xvc3VyZSB7Ci0gcHVibGljOgot
ICB0eXBlZGVmIHZvaWQgKCpGdW5jdGlvblR5cGUpKCk7Ci0KLSAgRnVuY3Rpb25DbG9zdXJlMChG
dW5jdGlvblR5cGUgZnVuY3Rpb24sIGJvb2wgc2VsZl9kZWxldGluZykKLSAgICA6IGZ1bmN0aW9u
XyhmdW5jdGlvbiksIHNlbGZfZGVsZXRpbmdfKHNlbGZfZGVsZXRpbmcpIHt9Ci0gIH5GdW5jdGlv
bkNsb3N1cmUwKCk7Ci0KLSAgdm9pZCBSdW4oKSB7Ci0gICAgYm9vbCBuZWVkc19kZWxldGUgPSBz
ZWxmX2RlbGV0aW5nXzsgIC8vIHJlYWQgaW4gY2FzZSBjYWxsYmFjayBkZWxldGVzCi0gICAgZnVu
Y3Rpb25fKCk7Ci0gICAgaWYgKG5lZWRzX2RlbGV0ZSkgZGVsZXRlIHRoaXM7Ci0gIH0KLQotIHBy
aXZhdGU6Ci0gIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbl87Ci0gIGJvb2wgc2VsZl9kZWxldGluZ187
Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3M+Ci1jbGFzcyBNZXRob2RDbG9zdXJlMCA6
IHB1YmxpYyBDbG9zdXJlIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgdm9pZCAoQ2xhc3M6OipNZXRo
b2RUeXBlKSgpOwotCi0gIE1ldGhvZENsb3N1cmUwKENsYXNzKiBvYmplY3QsIE1ldGhvZFR5cGUg
bWV0aG9kLCBib29sIHNlbGZfZGVsZXRpbmcpCi0gICAgOiBvYmplY3RfKG9iamVjdCksIG1ldGhv
ZF8obWV0aG9kKSwgc2VsZl9kZWxldGluZ18oc2VsZl9kZWxldGluZykge30KLSAgfk1ldGhvZENs
b3N1cmUwKCkge30KLQotICB2b2lkIFJ1bigpIHsKLSAgICBib29sIG5lZWRzX2RlbGV0ZSA9IHNl
bGZfZGVsZXRpbmdfOyAgLy8gcmVhZCBpbiBjYXNlIGNhbGxiYWNrIGRlbGV0ZXMKLSAgICAob2Jq
ZWN0Xy0+Km1ldGhvZF8pKCk7Ci0gICAgaWYgKG5lZWRzX2RlbGV0ZSkgZGVsZXRlIHRoaXM7Ci0g
IH0KLQotIHByaXZhdGU6Ci0gIENsYXNzKiBvYmplY3RfOwotICBNZXRob2RUeXBlIG1ldGhvZF87
Ci0gIGJvb2wgc2VsZl9kZWxldGluZ187Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMT4K
LWNsYXNzIEZ1bmN0aW9uQ2xvc3VyZTEgOiBwdWJsaWMgQ2xvc3VyZSB7Ci0gcHVibGljOgotICB0
eXBlZGVmIHZvaWQgKCpGdW5jdGlvblR5cGUpKEFyZzEgYXJnMSk7Ci0KLSAgRnVuY3Rpb25DbG9z
dXJlMShGdW5jdGlvblR5cGUgZnVuY3Rpb24sIGJvb2wgc2VsZl9kZWxldGluZywKLSAgICAgICAg
ICAgICAgICAgICBBcmcxIGFyZzEpCi0gICAgOiBmdW5jdGlvbl8oZnVuY3Rpb24pLCBzZWxmX2Rl
bGV0aW5nXyhzZWxmX2RlbGV0aW5nKSwKLSAgICAgIGFyZzFfKGFyZzEpIHt9Ci0gIH5GdW5jdGlv
bkNsb3N1cmUxKCkge30KLQotICB2b2lkIFJ1bigpIHsKLSAgICBib29sIG5lZWRzX2RlbGV0ZSA9
IHNlbGZfZGVsZXRpbmdfOyAgLy8gcmVhZCBpbiBjYXNlIGNhbGxiYWNrIGRlbGV0ZXMKLSAgICBm
dW5jdGlvbl8oYXJnMV8pOwotICAgIGlmIChuZWVkc19kZWxldGUpIGRlbGV0ZSB0aGlzOwotICB9
Ci0KLSBwcml2YXRlOgotICBGdW5jdGlvblR5cGUgZnVuY3Rpb25fOwotICBib29sIHNlbGZfZGVs
ZXRpbmdfOwotICBBcmcxIGFyZzFfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzLCB0
eXBlbmFtZSBBcmcxPgotY2xhc3MgTWV0aG9kQ2xvc3VyZTEgOiBwdWJsaWMgQ2xvc3VyZSB7Ci0g
cHVibGljOgotICB0eXBlZGVmIHZvaWQgKENsYXNzOjoqTWV0aG9kVHlwZSkoQXJnMSBhcmcxKTsK
LQotICBNZXRob2RDbG9zdXJlMShDbGFzcyogb2JqZWN0LCBNZXRob2RUeXBlIG1ldGhvZCwgYm9v
bCBzZWxmX2RlbGV0aW5nLAotICAgICAgICAgICAgICAgICBBcmcxIGFyZzEpCi0gICAgOiBvYmpl
Y3RfKG9iamVjdCksIG1ldGhvZF8obWV0aG9kKSwgc2VsZl9kZWxldGluZ18oc2VsZl9kZWxldGlu
ZyksCi0gICAgICBhcmcxXyhhcmcxKSB7fQotICB+TWV0aG9kQ2xvc3VyZTEoKSB7fQotCi0gIHZv
aWQgUnVuKCkgewotICAgIGJvb2wgbmVlZHNfZGVsZXRlID0gc2VsZl9kZWxldGluZ187ICAvLyBy
ZWFkIGluIGNhc2UgY2FsbGJhY2sgZGVsZXRlcwotICAgIChvYmplY3RfLT4qbWV0aG9kXykoYXJn
MV8pOwotICAgIGlmIChuZWVkc19kZWxldGUpIGRlbGV0ZSB0aGlzOwotICB9Ci0KLSBwcml2YXRl
OgotICBDbGFzcyogb2JqZWN0XzsKLSAgTWV0aG9kVHlwZSBtZXRob2RfOwotICBib29sIHNlbGZf
ZGVsZXRpbmdfOwotICBBcmcxIGFyZzFfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEs
IHR5cGVuYW1lIEFyZzI+Ci1jbGFzcyBGdW5jdGlvbkNsb3N1cmUyIDogcHVibGljIENsb3N1cmUg
ewotIHB1YmxpYzoKLSAgdHlwZWRlZiB2b2lkICgqRnVuY3Rpb25UeXBlKShBcmcxIGFyZzEsIEFy
ZzIgYXJnMik7Ci0KLSAgRnVuY3Rpb25DbG9zdXJlMihGdW5jdGlvblR5cGUgZnVuY3Rpb24sIGJv
b2wgc2VsZl9kZWxldGluZywKLSAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsIEFyZzIgYXJn
MikKLSAgICA6IGZ1bmN0aW9uXyhmdW5jdGlvbiksIHNlbGZfZGVsZXRpbmdfKHNlbGZfZGVsZXRp
bmcpLAotICAgICAgYXJnMV8oYXJnMSksIGFyZzJfKGFyZzIpIHt9Ci0gIH5GdW5jdGlvbkNsb3N1
cmUyKCkge30KLQotICB2b2lkIFJ1bigpIHsKLSAgICBib29sIG5lZWRzX2RlbGV0ZSA9IHNlbGZf
ZGVsZXRpbmdfOyAgLy8gcmVhZCBpbiBjYXNlIGNhbGxiYWNrIGRlbGV0ZXMKLSAgICBmdW5jdGlv
bl8oYXJnMV8sIGFyZzJfKTsKLSAgICBpZiAobmVlZHNfZGVsZXRlKSBkZWxldGUgdGhpczsKLSAg
fQotCi0gcHJpdmF0ZToKLSAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uXzsKLSAgYm9vbCBzZWxmX2Rl
bGV0aW5nXzsKLSAgQXJnMSBhcmcxXzsKLSAgQXJnMiBhcmcyXzsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMj4KLWNsYXNzIE1ldGhv
ZENsb3N1cmUyIDogcHVibGljIENsb3N1cmUgewotIHB1YmxpYzoKLSAgdHlwZWRlZiB2b2lkIChD
bGFzczo6Kk1ldGhvZFR5cGUpKEFyZzEgYXJnMSwgQXJnMiBhcmcyKTsKLQotICBNZXRob2RDbG9z
dXJlMihDbGFzcyogb2JqZWN0LCBNZXRob2RUeXBlIG1ldGhvZCwgYm9vbCBzZWxmX2RlbGV0aW5n
LAotICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsIEFyZzIgYXJnMikKLSAgICA6IG9iamVjdF8o
b2JqZWN0KSwgbWV0aG9kXyhtZXRob2QpLCBzZWxmX2RlbGV0aW5nXyhzZWxmX2RlbGV0aW5nKSwK
LSAgICAgIGFyZzFfKGFyZzEpLCBhcmcyXyhhcmcyKSB7fQotICB+TWV0aG9kQ2xvc3VyZTIoKSB7
fQotCi0gIHZvaWQgUnVuKCkgewotICAgIGJvb2wgbmVlZHNfZGVsZXRlID0gc2VsZl9kZWxldGlu
Z187ICAvLyByZWFkIGluIGNhc2UgY2FsbGJhY2sgZGVsZXRlcwotICAgIChvYmplY3RfLT4qbWV0
aG9kXykoYXJnMV8sIGFyZzJfKTsKLSAgICBpZiAobmVlZHNfZGVsZXRlKSBkZWxldGUgdGhpczsK
LSAgfQotCi0gcHJpdmF0ZToKLSAgQ2xhc3MqIG9iamVjdF87Ci0gIE1ldGhvZFR5cGUgbWV0aG9k
XzsKLSAgYm9vbCBzZWxmX2RlbGV0aW5nXzsKLSAgQXJnMSBhcmcxXzsKLSAgQXJnMiBhcmcyXzsK
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFI+Ci1jbGFzcyBGdW5jdGlvblJlc3VsdENhbGxiYWNr
XzBfMCA6IHB1YmxpYyBSZXN1bHRDYWxsYmFjazxSPiB7Ci0gcHVibGljOgotICB0eXBlZGVmIFIg
KCpGdW5jdGlvblR5cGUpKCk7Ci0KLSAgRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzAoRnVuY3Rp
b25UeXBlIGZ1bmN0aW9uLCBib29sIHNlbGZfZGVsZXRpbmcpCi0gICAgICA6IGZ1bmN0aW9uXyhm
dW5jdGlvbiksIHNlbGZfZGVsZXRpbmdfKHNlbGZfZGVsZXRpbmcpIHt9Ci0gIH5GdW5jdGlvblJl
c3VsdENhbGxiYWNrXzBfMCgpIHt9Ci0KLSAgUiBSdW4oKSB7Ci0gICAgYm9vbCBuZWVkc19kZWxl
dGUgPSBzZWxmX2RlbGV0aW5nXzsgIC8vIHJlYWQgaW4gY2FzZSBjYWxsYmFjayBkZWxldGVzCi0g
ICAgUiByZXN1bHQgPSBmdW5jdGlvbl8oKTsKLSAgICBpZiAobmVlZHNfZGVsZXRlKSBkZWxldGUg
dGhpczsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSBwcml2YXRlOgotICBGdW5jdGlvblR5
cGUgZnVuY3Rpb25fOwotICBib29sIHNlbGZfZGVsZXRpbmdfOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgUiwgdHlwZW5hbWUgUDE+Ci1jbGFzcyBGdW5jdGlvblJlc3VsdENhbGxiYWNrXzFfMCA6
IHB1YmxpYyBSZXN1bHRDYWxsYmFjazxSPiB7Ci0gcHVibGljOgotICB0eXBlZGVmIFIgKCpGdW5j
dGlvblR5cGUpKFAxKTsKLQotICBGdW5jdGlvblJlc3VsdENhbGxiYWNrXzFfMChGdW5jdGlvblR5
cGUgZnVuY3Rpb24sIGJvb2wgc2VsZl9kZWxldGluZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUDEgcDEpCi0gICAgICA6IGZ1bmN0aW9uXyhmdW5jdGlvbiksIHNlbGZfZGVsZXRpbmdf
KHNlbGZfZGVsZXRpbmcpLCBwMV8ocDEpIHt9Ci0gIH5GdW5jdGlvblJlc3VsdENhbGxiYWNrXzFf
MCgpIHt9Ci0KLSAgUiBSdW4oKSB7Ci0gICAgYm9vbCBuZWVkc19kZWxldGUgPSBzZWxmX2RlbGV0
aW5nXzsgIC8vIHJlYWQgaW4gY2FzZSBjYWxsYmFjayBkZWxldGVzCi0gICAgUiByZXN1bHQgPSBm
dW5jdGlvbl8ocDFfKTsKLSAgICBpZiAobmVlZHNfZGVsZXRlKSBkZWxldGUgdGhpczsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotICB9Ci0KLSBwcml2YXRlOgotICBGdW5jdGlvblR5cGUgZnVuY3Rpb25f
OwotICBib29sIHNlbGZfZGVsZXRpbmdfOwotICBQMSBwMV87Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBSLCB0eXBlbmFtZSBBcmcxPgotY2xhc3MgRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzEg
OiBwdWJsaWMgUmVzdWx0Q2FsbGJhY2sxPFIsIEFyZzE+IHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYg
UiAoKkZ1bmN0aW9uVHlwZSkoQXJnMSBhcmcxKTsKLQotICBGdW5jdGlvblJlc3VsdENhbGxiYWNr
XzBfMShGdW5jdGlvblR5cGUgZnVuY3Rpb24sIGJvb2wgc2VsZl9kZWxldGluZykKLSAgICAgIDog
ZnVuY3Rpb25fKGZ1bmN0aW9uKSwgc2VsZl9kZWxldGluZ18oc2VsZl9kZWxldGluZykge30KLSAg
fkZ1bmN0aW9uUmVzdWx0Q2FsbGJhY2tfMF8xKCkge30KLQotICBSIFJ1bihBcmcxIGExKSB7Ci0g
ICAgYm9vbCBuZWVkc19kZWxldGUgPSBzZWxmX2RlbGV0aW5nXzsgIC8vIHJlYWQgaW4gY2FzZSBj
YWxsYmFjayBkZWxldGVzCi0gICAgUiByZXN1bHQgPSBmdW5jdGlvbl8oYTEpOwotICAgIGlmIChu
ZWVkc19kZWxldGUpIGRlbGV0ZSB0aGlzOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotIHBy
aXZhdGU6Ci0gIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbl87Ci0gIGJvb2wgc2VsZl9kZWxldGluZ187
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgQTE+Ci1j
bGFzcyBGdW5jdGlvblJlc3VsdENhbGxiYWNrXzFfMSA6IHB1YmxpYyBSZXN1bHRDYWxsYmFjazE8
UiwgQTE+IHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgUiAoKkZ1bmN0aW9uVHlwZSkoUDEsIEExKTsK
LQotICBGdW5jdGlvblJlc3VsdENhbGxiYWNrXzFfMShGdW5jdGlvblR5cGUgZnVuY3Rpb24sIGJv
b2wgc2VsZl9kZWxldGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDEgcDEpCi0g
ICAgICA6IGZ1bmN0aW9uXyhmdW5jdGlvbiksIHNlbGZfZGVsZXRpbmdfKHNlbGZfZGVsZXRpbmcp
LCBwMV8ocDEpIHt9Ci0gIH5GdW5jdGlvblJlc3VsdENhbGxiYWNrXzFfMSgpIHt9Ci0KLSAgUiBS
dW4oQTEgYTEpIHsKLSAgICBib29sIG5lZWRzX2RlbGV0ZSA9IHNlbGZfZGVsZXRpbmdfOyAgLy8g
cmVhZCBpbiBjYXNlIGNhbGxiYWNrIGRlbGV0ZXMKLSAgICBSIHJlc3VsdCA9IGZ1bmN0aW9uXyhw
MV8sIGExKTsKLSAgICBpZiAobmVlZHNfZGVsZXRlKSBkZWxldGUgdGhpczsKLSAgICByZXR1cm4g
cmVzdWx0OwotICB9Ci0KLSBwcml2YXRlOgotICBGdW5jdGlvblR5cGUgZnVuY3Rpb25fOwotICBi
b29sIHNlbGZfZGVsZXRpbmdfOwotICBQMSBwMV87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLXN0cnVjdCBJbnRlcm5hbENvbnN0UmVmIHsKLSAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVf
cmVmZXJlbmNlPFQ+Ojp0eXBlIGJhc2VfdHlwZTsKLSAgdHlwZWRlZiBjb25zdCBiYXNlX3R5cGUm
IHR5cGU7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
UDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywKLSAgICAgICAgICB0eXBlbmFtZSBQNCwgdHlw
ZW5hbWUgUDUsIHR5cGVuYW1lIEExLCB0eXBlbmFtZSBBMj4KLWNsYXNzIE1ldGhvZFJlc3VsdENh
bGxiYWNrXzVfMiA6IHB1YmxpYyBSZXN1bHRDYWxsYmFjazI8UiwgQTEsIEEyPiB7Ci0gcHVibGlj
OgotICB0eXBlZGVmIFIgKFQ6OipNZXRob2RUeXBlKShQMSwgUDIsIFAzLCBQNCwgUDUsIEExLCBB
Mik7Ci0gIE1ldGhvZFJlc3VsdENhbGxiYWNrXzVfMihUKiBvYmplY3QsIE1ldGhvZFR5cGUgbWV0
aG9kLCBib29sIHNlbGZfZGVsZXRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQMSBw
MSwgUDIgcDIsIFAzIHAzLCBQNCBwNCwgUDUgcDUpCi0gICAgICA6IG9iamVjdF8ob2JqZWN0KSwK
LSAgICAgICAgbWV0aG9kXyhtZXRob2QpLAotICAgICAgICBzZWxmX2RlbGV0aW5nXyhzZWxmX2Rl
bGV0aW5nKSwKLSAgICAgICAgcDFfKHAxKSwKLSAgICAgICAgcDJfKHAyKSwKLSAgICAgICAgcDNf
KHAzKSwKLSAgICAgICAgcDRfKHA0KSwKLSAgICAgICAgcDVfKHA1KSB7fQotICB+TWV0aG9kUmVz
dWx0Q2FsbGJhY2tfNV8yKCkge30KLQotICBSIFJ1bihBMSBhMSwgQTIgYTIpIHsKLSAgICBib29s
IG5lZWRzX2RlbGV0ZSA9IHNlbGZfZGVsZXRpbmdfOwotICAgIFIgcmVzdWx0ID0gKG9iamVjdF8t
PiptZXRob2RfKShwMV8sIHAyXywgcDNfLCBwNF8sIHA1XywgYTEsIGEyKTsKLSAgICBpZiAobmVl
ZHNfZGVsZXRlKSBkZWxldGUgdGhpczsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSBwcml2
YXRlOgotICBUKiBvYmplY3RfOwotICBNZXRob2RUeXBlIG1ldGhvZF87Ci0gIGJvb2wgc2VsZl9k
ZWxldGluZ187Ci0gIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8UDE+Ojp0eXBlIHAxXzsKLSAg
dHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxQMj46OnR5cGUgcDJfOwotICB0eXBlbmFtZSByZW1v
dmVfcmVmZXJlbmNlPFAzPjo6dHlwZSBwM187Ci0gIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8
UDQ+Ojp0eXBlIHA0XzsKLSAgdHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxQNT46OnR5cGUgcDVf
OwotfTsKLQotLy8gU2VlIENsb3N1cmUuCi1pbmxpbmUgQ2xvc3VyZSogTmV3Q2FsbGJhY2sodm9p
ZCAoKmZ1bmN0aW9uKSgpKSB7Ci0gIHJldHVybiBuZXcgaW50ZXJuYWw6OkZ1bmN0aW9uQ2xvc3Vy
ZTAoZnVuY3Rpb24sIHRydWUpOwotfQotCi0vLyBTZWUgQ2xvc3VyZS4KLWlubGluZSBDbG9zdXJl
KiBOZXdQZXJtYW5lbnRDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKCkpIHsKLSAgcmV0dXJuIG5l
dyBpbnRlcm5hbDo6RnVuY3Rpb25DbG9zdXJlMChmdW5jdGlvbiwgZmFsc2UpOwotfQotCi0vLyBT
ZWUgQ2xvc3VyZS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzcz4KLWlubGluZSBDbG9zdXJlKiBO
ZXdDYWxsYmFjayhDbGFzcyogb2JqZWN0LCB2b2lkIChDbGFzczo6Km1ldGhvZCkoKSkgewotICBy
ZXR1cm4gbmV3IGludGVybmFsOjpNZXRob2RDbG9zdXJlMDxDbGFzcz4ob2JqZWN0LCBtZXRob2Qs
IHRydWUpOwotfQotCi0vLyBTZWUgQ2xvc3VyZS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzcz4K
LWlubGluZSBDbG9zdXJlKiBOZXdQZXJtYW5lbnRDYWxsYmFjayhDbGFzcyogb2JqZWN0LCB2b2lk
IChDbGFzczo6Km1ldGhvZCkoKSkgewotICByZXR1cm4gbmV3IGludGVybmFsOjpNZXRob2RDbG9z
dXJlMDxDbGFzcz4ob2JqZWN0LCBtZXRob2QsIGZhbHNlKTsKLX0KLQotLy8gU2VlIENsb3N1cmUu
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMT4KLWlubGluZSBDbG9zdXJlKiBOZXdDYWxsYmFjayh2
b2lkICgqZnVuY3Rpb24pKEFyZzEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEg
YXJnMSkgewotICByZXR1cm4gbmV3IGludGVybmFsOjpGdW5jdGlvbkNsb3N1cmUxPEFyZzE+KGZ1
bmN0aW9uLCB0cnVlLCBhcmcxKTsKLX0KLQotLy8gU2VlIENsb3N1cmUuCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQXJnMT4KLWlubGluZSBDbG9zdXJlKiBOZXdQZXJtYW5lbnRDYWxsYmFjayh2b2lkICgq
ZnVuY3Rpb24pKEFyZzEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy
ZzEgYXJnMSkgewotICByZXR1cm4gbmV3IGludGVybmFsOjpGdW5jdGlvbkNsb3N1cmUxPEFyZzE+
KGZ1bmN0aW9uLCBmYWxzZSwgYXJnMSk7Ci19Ci0KLS8vIFNlZSBDbG9zdXJlLgotdGVtcGxhdGUg
PHR5cGVuYW1lIENsYXNzLCB0eXBlbmFtZSBBcmcxPgotaW5saW5lIENsb3N1cmUqIE5ld0NhbGxi
YWNrKENsYXNzKiBvYmplY3QsIHZvaWQgKENsYXNzOjoqbWV0aG9kKShBcmcxKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEpIHsKLSAgcmV0dXJuIG5ldyBpbnRlcm5hbDo6
TWV0aG9kQ2xvc3VyZTE8Q2xhc3MsIEFyZzE+KG9iamVjdCwgbWV0aG9kLCB0cnVlLCBhcmcxKTsK
LX0KLQotLy8gU2VlIENsb3N1cmUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1l
IEFyZzE+Ci1pbmxpbmUgQ2xvc3VyZSogTmV3UGVybWFuZW50Q2FsbGJhY2soQ2xhc3MqIG9iamVj
dCwgdm9pZCAoQ2xhc3M6OiptZXRob2QpKEFyZzEpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZzEgYXJnMSkgewotICByZXR1cm4gbmV3IGludGVybmFsOjpNZXRob2RD
bG9zdXJlMTxDbGFzcywgQXJnMT4ob2JqZWN0LCBtZXRob2QsIGZhbHNlLCBhcmcxKTsKLX0KLQot
Ly8gU2VlIENsb3N1cmUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMj4K
LWlubGluZSBDbG9zdXJlKiBOZXdDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKEFyZzEsIEFyZzIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwgQXJnMiBhcmcyKSB7Ci0g
IHJldHVybiBuZXcgaW50ZXJuYWw6OkZ1bmN0aW9uQ2xvc3VyZTI8QXJnMSwgQXJnMj4oCi0gICAg
ZnVuY3Rpb24sIHRydWUsIGFyZzEsIGFyZzIpOwotfQotCi0vLyBTZWUgQ2xvc3VyZS4KLXRlbXBs
YXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyPgotaW5saW5lIENsb3N1cmUqIE5ld1Bl
cm1hbmVudENhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikoQXJnMSwgQXJnMiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLCBBcmcyIGFyZzIpIHsKLSAgcmV0
dXJuIG5ldyBpbnRlcm5hbDo6RnVuY3Rpb25DbG9zdXJlMjxBcmcxLCBBcmcyPigKLSAgICBmdW5j
dGlvbiwgZmFsc2UsIGFyZzEsIGFyZzIpOwotfQotCi0vLyBTZWUgQ2xvc3VyZS4KLXRlbXBsYXRl
IDx0eXBlbmFtZSBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMj4KLWlubGluZSBD
bG9zdXJlKiBOZXdDYWxsYmFjayhDbGFzcyogb2JqZWN0LCB2b2lkIChDbGFzczo6Km1ldGhvZCko
QXJnMSwgQXJnMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLCBBcmcy
IGFyZzIpIHsKLSAgcmV0dXJuIG5ldyBpbnRlcm5hbDo6TWV0aG9kQ2xvc3VyZTI8Q2xhc3MsIEFy
ZzEsIEFyZzI+KAotICAgIG9iamVjdCwgbWV0aG9kLCB0cnVlLCBhcmcxLCBhcmcyKTsKLX0KLQot
Ly8gU2VlIENsb3N1cmUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIEFyZzEs
IHR5cGVuYW1lIEFyZzI+Ci1pbmxpbmUgQ2xvc3VyZSogTmV3UGVybWFuZW50Q2FsbGJhY2soCi0g
ICAgQ2xhc3MqIG9iamVjdCwgdm9pZCAoQ2xhc3M6OiptZXRob2QpKEFyZzEsIEFyZzIpLAotICAg
IEFyZzEgYXJnMSwgQXJnMiBhcmcyKSB7Ci0gIHJldHVybiBuZXcgaW50ZXJuYWw6Ok1ldGhvZENs
b3N1cmUyPENsYXNzLCBBcmcxLCBBcmcyPigKLSAgICBvYmplY3QsIG1ldGhvZCwgZmFsc2UsIGFy
ZzEsIGFyZzIpOwotfQotCi0vLyBTZWUgUmVzdWx0Q2FsbGJhY2sKLXRlbXBsYXRlPHR5cGVuYW1l
IFI+Ci1pbmxpbmUgUmVzdWx0Q2FsbGJhY2s8Uj4qIE5ld0NhbGxiYWNrKFIgKCpmdW5jdGlvbiko
KSkgewotICByZXR1cm4gbmV3IGludGVybmFsOjpGdW5jdGlvblJlc3VsdENhbGxiYWNrXzBfMDxS
PihmdW5jdGlvbiwgdHJ1ZSk7Ci19Ci0KLS8vIFNlZSBSZXN1bHRDYWxsYmFjawotdGVtcGxhdGU8
dHlwZW5hbWUgUj4KLWlubGluZSBSZXN1bHRDYWxsYmFjazxSPiogTmV3UGVybWFuZW50Q2FsbGJh
Y2soUiAoKmZ1bmN0aW9uKSgpKSB7Ci0gIHJldHVybiBuZXcgaW50ZXJuYWw6OkZ1bmN0aW9uUmVz
dWx0Q2FsbGJhY2tfMF8wPFI+KGZ1bmN0aW9uLCBmYWxzZSk7Ci19Ci0KLS8vIFNlZSBSZXN1bHRD
YWxsYmFjawotdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgUDE+Ci1pbmxpbmUgUmVzdWx0
Q2FsbGJhY2s8Uj4qIE5ld0NhbGxiYWNrKFIgKCpmdW5jdGlvbikoUDEpLCBQMSBwMSkgewotICBy
ZXR1cm4gbmV3IGludGVybmFsOjpGdW5jdGlvblJlc3VsdENhbGxiYWNrXzFfMDxSLCBQMT4oCi0g
ICAgICBmdW5jdGlvbiwgdHJ1ZSwgcDEpOwotfQotCi0vLyBTZWUgUmVzdWx0Q2FsbGJhY2sKLXRl
bXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFAxPgotaW5saW5lIFJlc3VsdENhbGxiYWNrPFI+
KiBOZXdQZXJtYW5lbnRDYWxsYmFjaygKLSAgICBSICgqZnVuY3Rpb24pKFAxKSwgUDEgcDEpIHsK
LSAgcmV0dXJuIG5ldyBpbnRlcm5hbDo6RnVuY3Rpb25SZXN1bHRDYWxsYmFja18xXzA8UiwgUDE+
KAotICAgICAgZnVuY3Rpb24sIGZhbHNlLCBwMSk7Ci19Ci0KLS8vIFNlZSBSZXN1bHRDYWxsYmFj
azEKLXRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEExPgotaW5saW5lIFJlc3VsdENhbGxi
YWNrMTxSLCBBMT4qIE5ld0NhbGxiYWNrKFIgKCpmdW5jdGlvbikoQTEpKSB7Ci0gIHJldHVybiBu
ZXcgaW50ZXJuYWw6OkZ1bmN0aW9uUmVzdWx0Q2FsbGJhY2tfMF8xPFIsIEExPihmdW5jdGlvbiwg
dHJ1ZSk7Ci19Ci0KLS8vIFNlZSBSZXN1bHRDYWxsYmFjazEKLXRlbXBsYXRlPHR5cGVuYW1lIFIs
IHR5cGVuYW1lIEExPgotaW5saW5lIFJlc3VsdENhbGxiYWNrMTxSLCBBMT4qIE5ld1Blcm1hbmVu
dENhbGxiYWNrKFIgKCpmdW5jdGlvbikoQTEpKSB7Ci0gIHJldHVybiBuZXcgaW50ZXJuYWw6OkZ1
bmN0aW9uUmVzdWx0Q2FsbGJhY2tfMF8xPFIsIEExPihmdW5jdGlvbiwgZmFsc2UpOwotfQotCi0v
LyBTZWUgUmVzdWx0Q2FsbGJhY2sxCi10ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBQMSwg
dHlwZW5hbWUgQTE+Ci1pbmxpbmUgUmVzdWx0Q2FsbGJhY2sxPFIsIEExPiogTmV3Q2FsbGJhY2so
UiAoKmZ1bmN0aW9uKShQMSwgQTEpLCBQMSBwMSkgewotICByZXR1cm4gbmV3IGludGVybmFsOjpG
dW5jdGlvblJlc3VsdENhbGxiYWNrXzFfMTxSLCBQMSwgQTE+KAotICAgICAgZnVuY3Rpb24sIHRy
dWUsIHAxKTsKLX0KLQotLy8gU2VlIFJlc3VsdENhbGxiYWNrMQotdGVtcGxhdGU8dHlwZW5hbWUg
UiwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIEExPgotaW5saW5lIFJlc3VsdENhbGxiYWNrMTxSLCBB
MT4qIE5ld1Blcm1hbmVudENhbGxiYWNrKAotICAgIFIgKCpmdW5jdGlvbikoUDEsIEExKSwgUDEg
cDEpIHsKLSAgcmV0dXJuIG5ldyBpbnRlcm5hbDo6RnVuY3Rpb25SZXN1bHRDYWxsYmFja18xXzE8
UiwgUDEsIEExPigKLSAgICAgIGZ1bmN0aW9uLCBmYWxzZSwgcDEpOwotfQotCi0vLyBTZWUgTWV0
aG9kUmVzdWx0Q2FsbGJhY2tfNV8yCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVCwg
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywKLSAgICAgICAgICB0eXBlbmFt
ZSBQNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIEExLCB0eXBlbmFtZSBBMj4KLWlubGluZSBSZXN1
bHRDYWxsYmFjazI8UiwgQTEsIEEyPiogTmV3UGVybWFuZW50Q2FsbGJhY2soCi0gICAgVCogb2Jq
ZWN0LCBSIChUOjoqZnVuY3Rpb24pKFAxLCBQMiwgUDMsIFA0LCBQNSwgQTEsIEEyKSwKLSAgICB0
eXBlbmFtZSBpbnRlcm5hbDo6SW50ZXJuYWxDb25zdFJlZjxQMT46OnR5cGUgcDEsCi0gICAgdHlw
ZW5hbWUgaW50ZXJuYWw6OkludGVybmFsQ29uc3RSZWY8UDI+Ojp0eXBlIHAyLAotICAgIHR5cGVu
YW1lIGludGVybmFsOjpJbnRlcm5hbENvbnN0UmVmPFAzPjo6dHlwZSBwMywKLSAgICB0eXBlbmFt
ZSBpbnRlcm5hbDo6SW50ZXJuYWxDb25zdFJlZjxQND46OnR5cGUgcDQsCi0gICAgdHlwZW5hbWUg
aW50ZXJuYWw6OkludGVybmFsQ29uc3RSZWY8UDU+Ojp0eXBlIHA1KSB7Ci0gIHJldHVybiBuZXcg
aW50ZXJuYWw6Ok1ldGhvZFJlc3VsdENhbGxiYWNrXzVfMjxSLCBULCBQMSwgUDIsIFAzLCBQNCwg
UDUsIEExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QTI+KG9iamVjdCwgZnVuY3Rpb24sIGZhbHNlLCBwMSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMiwgcDMsIHA0LCBwNSk7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBpbnRlcm5hbAotCi0vLyBBIGZ1bmN0aW9uIHdoaWNoIGRvZXMgbm90aGluZy4g
IFVzZWZ1bCBmb3IgY3JlYXRpbmcgbm8tb3AgY2FsbGJhY2tzLCBlLmcuOgotLy8gICBDbG9zdXJl
KiBub3RoaW5nID0gTmV3Q2FsbGJhY2soJkRvTm90aGluZyk7Ci12b2lkIExJQlBST1RPQlVGX0VY
UE9SVCBEb05vdGhpbmcoKTsKLQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfU1RVQlNfQ0FMTEJB
Q0tfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jYXN0cy5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Nhc3RzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGJlNjUyODQ5ZWYxNGU5NjFkNWVjNGVhY2UxOGJmNzQxZWRkN2NjYjYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2Nhc3RzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLy8gUHJvdG9jb2wg
QnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQg
MjAxNCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxv
cGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0NBU1RTX0hf
XwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ0FTVFNfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L3R5cGVfdHJhaXRzLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0vLyBVc2UgaW1wbGljaXRfY2FzdCBhcyBhIHNhZmUg
dmVyc2lvbiBvZiBzdGF0aWNfY2FzdCBvciBjb25zdF9jYXN0Ci0vLyBmb3IgdXBjYXN0aW5nIGlu
IHRoZSB0eXBlIGhpZXJhcmNoeSAoaS5lLiBjYXN0aW5nIGEgcG9pbnRlciB0byBGb28KLS8vIHRv
IGEgcG9pbnRlciB0byBTdXBlcmNsYXNzT2ZGb28gb3IgY2FzdGluZyBhIHBvaW50ZXIgdG8gRm9v
IHRvCi0vLyBhIGNvbnN0IHBvaW50ZXIgdG8gRm9vKS4KLS8vIFdoZW4geW91IHVzZSBpbXBsaWNp
dF9jYXN0LCB0aGUgY29tcGlsZXIgY2hlY2tzIHRoYXQgdGhlIGNhc3QgaXMgc2FmZS4KLS8vIFN1
Y2ggZXhwbGljaXQgaW1wbGljaXRfY2FzdHMgYXJlIG5lY2Vzc2FyeSBpbiBzdXJwcmlzaW5nbHkg
bWFueQotLy8gc2l0dWF0aW9ucyB3aGVyZSBDKysgZGVtYW5kcyBhbiBleGFjdCB0eXBlIG1hdGNo
IGluc3RlYWQgb2YgYW4KLS8vIGFyZ3VtZW50IHR5cGUgY29udmVydGFibGUgdG8gYSB0YXJnZXQg
dHlwZS4KLS8vCi0vLyBUaGUgRnJvbSB0eXBlIGNhbiBiZSBpbmZlcnJlZCwgc28gdGhlIHByZWZl
cnJlZCBzeW50YXggZm9yIHVzaW5nCi0vLyBpbXBsaWNpdF9jYXN0IGlzIHRoZSBzYW1lIGFzIGZv
ciBzdGF0aWNfY2FzdCBldGMuOgotLy8KLS8vICAgaW1wbGljaXRfY2FzdDxUb1R5cGU+KGV4cHIp
Ci0vLwotLy8gaW1wbGljaXRfY2FzdCB3b3VsZCBoYXZlIGJlZW4gcGFydCBvZiB0aGUgQysrIHN0
YW5kYXJkIGxpYnJhcnksCi0vLyBidXQgdGhlIHByb3Bvc2FsIHdhcyBzdWJtaXR0ZWQgdG9vIGxh
dGUuICBJdCB3aWxsIHByb2JhYmx5IG1ha2UKLS8vIGl0cyB3YXkgaW50byB0aGUgbGFuZ3VhZ2Ug
aW4gdGhlIGZ1dHVyZS4KLXRlbXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgotaW5s
aW5lIFRvIGltcGxpY2l0X2Nhc3QoRnJvbSBjb25zdCAmZikgewotICByZXR1cm4gZjsKLX0KLQot
Ly8gV2hlbiB5b3UgdXBjYXN0ICh0aGF0IGlzLCBjYXN0IGEgcG9pbnRlciBmcm9tIHR5cGUgRm9v
IHRvIHR5cGUKLS8vIFN1cGVyY2xhc3NPZkZvbyksIGl0J3MgZmluZSB0byB1c2UgaW1wbGljaXRf
Y2FzdDw+LCBzaW5jZSB1cGNhc3RzCi0vLyBhbHdheXMgc3VjY2VlZC4gIFdoZW4geW91IGRvd25j
YXN0ICh0aGF0IGlzLCBjYXN0IGEgcG9pbnRlciBmcm9tCi0vLyB0eXBlIEZvbyB0byB0eXBlIFN1
YmNsYXNzT2ZGb28pLCBzdGF0aWNfY2FzdDw+IGlzbid0IHNhZmUsIGJlY2F1c2UKLS8vIGhvdyBk
byB5b3Uga25vdyB0aGUgcG9pbnRlciBpcyByZWFsbHkgb2YgdHlwZSBTdWJjbGFzc09mRm9vPyAg
SXQKLS8vIGNvdWxkIGJlIGEgYmFyZSBGb28sIG9yIG9mIHR5cGUgRGlmZmVyZW50U3ViY2xhc3NP
ZkZvby4gIFRodXMsCi0vLyB3aGVuIHlvdSBkb3duY2FzdCwgeW91IHNob3VsZCB1c2UgdGhpcyBt
YWNyby4gIEluIGRlYnVnIG1vZGUsIHdlCi0vLyB1c2UgZHluYW1pY19jYXN0PD4gdG8gZG91Ymxl
LWNoZWNrIHRoZSBkb3duY2FzdCBpcyBsZWdhbCAod2UgZGllCi0vLyBpZiBpdCdzIG5vdCkuICBJ
biBub3JtYWwgbW9kZSwgd2UgZG8gdGhlIGVmZmljaWVudCBzdGF0aWNfY2FzdDw+Ci0vLyBpbnN0
ZWFkLiAgVGh1cywgaXQncyBpbXBvcnRhbnQgdG8gdGVzdCBpbiBkZWJ1ZyBtb2RlIHRvIG1ha2Ug
c3VyZQotLy8gdGhlIGNhc3QgaXMgbGVnYWwhCi0vLyAgICBUaGlzIGlzIHRoZSBvbmx5IHBsYWNl
IGluIHRoZSBjb2RlIHdlIHNob3VsZCB1c2UgZHluYW1pY19jYXN0PD4uCi0vLyBJbiBwYXJ0aWN1
bGFyLCB5b3UgU0hPVUxETidUIGJlIHVzaW5nIGR5bmFtaWNfY2FzdDw+IGluIG9yZGVyIHRvCi0v
LyBkbyBSVFRJIChlZyBjb2RlIGxpa2UgdGhpczoKLS8vICAgIGlmIChkeW5hbWljX2Nhc3Q8U3Vi
Y2xhc3MxPihmb28pKSBIYW5kbGVBU3ViY2xhc3MxT2JqZWN0KGZvbyk7Ci0vLyAgICBpZiAoZHlu
YW1pY19jYXN0PFN1YmNsYXNzMj4oZm9vKSkgSGFuZGxlQVN1YmNsYXNzMk9iamVjdChmb28pOwot
Ly8gWW91IHNob3VsZCBkZXNpZ24gdGhlIGNvZGUgc29tZSBvdGhlciB3YXkgbm90IHRvIG5lZWQg
dGhpcy4KLQotdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+ICAgICAvLyB1c2Ug
bGlrZSB0aGlzOiBkb3duX2Nhc3Q8VCo+KGZvbyk7Ci1pbmxpbmUgVG8gZG93bl9jYXN0KEZyb20q
IGYpIHsgICAgICAgICAgICAgICAgICAgLy8gc28gd2Ugb25seSBhY2NlcHQgcG9pbnRlcnMKLSAg
Ly8gRW5zdXJlcyB0aGF0IFRvIGlzIGEgc3ViLXR5cGUgb2YgRnJvbSAqLiAgVGhpcyB0ZXN0IGlz
IGhlcmUgb25seQotICAvLyBmb3IgY29tcGlsZS10aW1lIHR5cGUgY2hlY2tpbmcsIGFuZCBoYXMg
bm8gb3ZlcmhlYWQgaW4gYW4KLSAgLy8gb3B0aW1pemVkIGJ1aWxkIGF0IHJ1bi10aW1lLCBhcyBp
dCB3aWxsIGJlIG9wdGltaXplZCBhd2F5Ci0gIC8vIGNvbXBsZXRlbHkuCi0gIGlmIChmYWxzZSkg
ewotICAgIGltcGxpY2l0X2Nhc3Q8RnJvbSosIFRvPigwKTsKLSAgfQotCi0jaWYgIWRlZmluZWQo
TkRFQlVHKSAmJiAhZGVmaW5lZChHT09HTEVfUFJPVE9CVUZfTk9fUlRUSSkKLSAgYXNzZXJ0KGYg
PT0gTlVMTCB8fCBkeW5hbWljX2Nhc3Q8VG8+KGYpICE9IE5VTEwpOyAgLy8gUlRUSTogZGVidWcg
bW9kZSBvbmx5IQotI2VuZGlmCi0gIHJldHVybiBzdGF0aWNfY2FzdDxUbz4oZik7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPiAgICAvLyB1c2UgbGlrZSB0aGlzOiBk
b3duX2Nhc3Q8VCY+KGZvbyk7Ci1pbmxpbmUgVG8gZG93bl9jYXN0KEZyb20mIGYpIHsKLSAgdHlw
ZWRlZiB0eXBlbmFtZSByZW1vdmVfcmVmZXJlbmNlPFRvPjo6dHlwZSogVG9Bc1BvaW50ZXI7Ci0g
IC8vIEVuc3VyZXMgdGhhdCBUbyBpcyBhIHN1Yi10eXBlIG9mIEZyb20gKi4gIFRoaXMgdGVzdCBp
cyBoZXJlIG9ubHkKLSAgLy8gZm9yIGNvbXBpbGUtdGltZSB0eXBlIGNoZWNraW5nLCBhbmQgaGFz
IG5vIG92ZXJoZWFkIGluIGFuCi0gIC8vIG9wdGltaXplZCBidWlsZCBhdCBydW4tdGltZSwgYXMg
aXQgd2lsbCBiZSBvcHRpbWl6ZWQgYXdheQotICAvLyBjb21wbGV0ZWx5LgotICBpZiAoZmFsc2Up
IHsKLSAgICBpbXBsaWNpdF9jYXN0PEZyb20qLCBUb0FzUG9pbnRlcj4oMCk7Ci0gIH0KLQotI2lm
ICFkZWZpbmVkKE5ERUJVRykgJiYgIWRlZmluZWQoR09PR0xFX1BST1RPQlVGX05PX1JUVEkpCi0g
IC8vIFJUVEk6IGRlYnVnIG1vZGUgb25seSEKLSAgYXNzZXJ0KGR5bmFtaWNfY2FzdDxUb0FzUG9p
bnRlcj4oJmYpICE9IE5VTEwpOwotI2VuZGlmCi0gIHJldHVybiAqc3RhdGljX2Nhc3Q8VG9Bc1Bv
aW50ZXI+KCZmKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+Ci1p
bmxpbmUgVG8gYml0X2Nhc3QoY29uc3QgRnJvbSYgZnJvbSkgewotICBHT09HTEVfQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEZyb20pID09IHNpemVvZihUbyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBiaXRfY2FzdF93aXRoX2RpZmZlcmVudF9zaXplcyk7Ci0gIFRvIGRlc3Q7Ci0gIG1lbWNweSgm
ZGVzdCwgJmZyb20sIHNpemVvZihkZXN0KSk7Ci0gIHJldHVybiBkZXN0OwotfQotCi19ICAvLyBu
YW1lc3BhY2UgaW50ZXJuYWwKLQotLy8gV2UgbWFkZSB0aGVzZSBpbnRlcm5hbCBzbyB0aGF0IHRo
ZXkgd291bGQgc2hvdyB1cCBhcyBzdWNoIGluIHRoZSBkb2NzLAotLy8gYnV0IHdlIGRvbid0IHdh
bnQgdG8gc3RpY2sgImludGVybmFsOjoiIGluIGZyb250IG9mIHRoZW0gZXZlcnl3aGVyZS4KLXVz
aW5nIGludGVybmFsOjppbXBsaWNpdF9jYXN0OwotdXNpbmcgaW50ZXJuYWw6OmRvd25fY2FzdDsK
LXVzaW5nIGludGVybmFsOjpiaXRfY2FzdDsKLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19
ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DQVNUU19I
X18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1NGRiYWZhYjVkY2FjYTIyY2MyNjU4YTE2ODJiNWVmNTUzZGZmNTk1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9z
dHVicy9jb21tb24uY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0NTkgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20g
KEtlbnRvbiBWYXJkYSkKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24u
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvc3RyaW5ncGllY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3Ry
dXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9pbnQxMjguaD4KLSNpbmNs
dWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp
bmNsdWRlIDx2ZWN0b3I+Ci0KLSNpZmRlZiBfV0lOMzIKLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRf
TUVBTiAgLy8gV2Ugb25seSBuZWVkIG1pbmltYWwgaW5jbHVkZXMKLSNpbmNsdWRlIDx3aW5kb3dz
Lmg+Ci0jZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZiAgICAvLyBzZWUgY29tbWVudCBpbiBzdHJ1
dGlsLmNjCi0jZWxpZiBkZWZpbmVkKEhBVkVfUFRIUkVBRCkKLSNpbmNsdWRlIDxwdGhyZWFkLmg+
Ci0jZWxzZQotI2Vycm9yICJObyBzdWl0YWJsZSB0aHJlYWRpbmcgbGlicmFyeSBhdmFpbGFibGUu
IgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FORFJPSURfXykKLSNpbmNsdWRlIDxhbmRyb2lkL2xv
Zy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotdm9pZCBWZXJpZnlWZXJzaW9uKGludCBoZWFkZXJW
ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgIGludCBtaW5MaWJyYXJ5VmVyc2lvbiwKLSAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSkgewotICBpZiAoR09PR0xFX1BST1RP
QlVGX1ZFUlNJT04gPCBtaW5MaWJyYXJ5VmVyc2lvbikgewotICAgIC8vIExpYnJhcnkgaXMgdG9v
IG9sZCBmb3IgaGVhZGVycy4KLSAgICBHT09HTEVfTE9HKEZBVEFMKQotICAgICAgPDwgIlRoaXMg
cHJvZ3JhbSByZXF1aXJlcyB2ZXJzaW9uICIgPDwgVmVyc2lvblN0cmluZyhtaW5MaWJyYXJ5VmVy
c2lvbikKLSAgICAgIDw8ICIgb2YgdGhlIFByb3RvY29sIEJ1ZmZlciBydW50aW1lIGxpYnJhcnks
IGJ1dCB0aGUgaW5zdGFsbGVkIHZlcnNpb24gIgotICAgICAgICAgImlzICIgPDwgVmVyc2lvblN0
cmluZyhHT09HTEVfUFJPVE9CVUZfVkVSU0lPTikgPDwgIi4gIFBsZWFzZSB1cGRhdGUgIgotICAg
ICAgICAgInlvdXIgbGlicmFyeS4gIElmIHlvdSBjb21waWxlZCB0aGUgcHJvZ3JhbSB5b3Vyc2Vs
ZiwgbWFrZSBzdXJlIHRoYXQgIgotICAgICAgICAgInlvdXIgaGVhZGVycyBhcmUgZnJvbSB0aGUg
c2FtZSB2ZXJzaW9uIG9mIFByb3RvY29sIEJ1ZmZlcnMgYXMgeW91ciAiCi0gICAgICAgICAibGlu
ay10aW1lIGxpYnJhcnkuICAoVmVyc2lvbiB2ZXJpZmljYXRpb24gZmFpbGVkIGluIFwiIgotICAg
ICAgPDwgZmlsZW5hbWUgPDwgIlwiLikiOwotICB9Ci0gIGlmIChoZWFkZXJWZXJzaW9uIDwga01p
bkhlYWRlclZlcnNpb25Gb3JMaWJyYXJ5KSB7Ci0gICAgLy8gSGVhZGVycyBhcmUgdG9vIG9sZCBm
b3IgbGlicmFyeS4KLSAgICBHT09HTEVfTE9HKEZBVEFMKQotICAgICAgPDwgIlRoaXMgcHJvZ3Jh
bSB3YXMgY29tcGlsZWQgYWdhaW5zdCB2ZXJzaW9uICIKLSAgICAgIDw8IFZlcnNpb25TdHJpbmco
aGVhZGVyVmVyc2lvbikgPDwgIiBvZiB0aGUgUHJvdG9jb2wgQnVmZmVyIHJ1bnRpbWUgIgotICAg
ICAgICAgImxpYnJhcnksIHdoaWNoIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGluc3RhbGxl
ZCB2ZXJzaW9uICgiCi0gICAgICA8PCBWZXJzaW9uU3RyaW5nKEdPT0dMRV9QUk9UT0JVRl9WRVJT
SU9OKSA8PCAgIikuICBDb250YWN0IHRoZSBwcm9ncmFtICIKLSAgICAgICAgICJhdXRob3IgZm9y
IGFuIHVwZGF0ZS4gIElmIHlvdSBjb21waWxlZCB0aGUgcHJvZ3JhbSB5b3Vyc2VsZiwgbWFrZSAi
Ci0gICAgICAgICAic3VyZSB0aGF0IHlvdXIgaGVhZGVycyBhcmUgZnJvbSB0aGUgc2FtZSB2ZXJz
aW9uIG9mIFByb3RvY29sIEJ1ZmZlcnMgIgotICAgICAgICAgImFzIHlvdXIgbGluay10aW1lIGxp
YnJhcnkuICAoVmVyc2lvbiB2ZXJpZmljYXRpb24gZmFpbGVkIGluIFwiIgotICAgICAgPDwgZmls
ZW5hbWUgPDwgIlwiLikiOwotICB9Ci19Ci0KLXN0cmluZyBWZXJzaW9uU3RyaW5nKGludCB2ZXJz
aW9uKSB7Ci0gIGludCBtYWpvciA9IHZlcnNpb24gLyAxMDAwMDAwOwotICBpbnQgbWlub3IgPSAo
dmVyc2lvbiAvIDEwMDApICUgMTAwMDsKLSAgaW50IG1pY3JvID0gdmVyc2lvbiAlIDEwMDA7Ci0K
LSAgLy8gMTI4IGJ5dGVzIHNob3VsZCBhbHdheXMgYmUgZW5vdWdoLCBidXQgd2UgdXNlIHNucHJp
bnRmKCkgYW55d2F5IHRvIGJlCi0gIC8vIHNhZmUuCi0gIGNoYXIgYnVmZmVyWzEyOF07Ci0gIHNu
cHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZC4lZC4lZCIsIG1ham9yLCBtaW5vciwg
bWljcm8pOwotCi0gIC8vIEd1YXJkIGFnYWluc3QgYnJva2VuIE1TVkMgc25wcmludGYoKS4KLSAg
YnVmZmVyW3NpemVvZihidWZmZXIpLTFdID0gJ1wwJzsKLQotICByZXR1cm4gYnVmZmVyOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gZW11bGF0ZXMg
Z29vZ2xlMy9iYXNlL2xvZ2dpbmcuY2MKLQotbmFtZXNwYWNlIGludGVybmFsIHsKLSNpZiBkZWZp
bmVkKF9fQU5EUk9JRF9fKQotaW5saW5lIHZvaWQgRGVmYXVsdExvZ0hhbmRsZXIoTG9nTGV2ZWwg
bGV2ZWwsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbWVzc2FnZSkgewotI2lmZGVmIEdPT0dMRV9QUk9U
T0JVRl9NSU5fTE9HX0xFVkVMCi0gIGlmIChsZXZlbCA8IEdPT0dMRV9QUk9UT0JVRl9NSU5fTE9H
X0xFVkVMKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBsZXZlbF9u
YW1lc1tdID0geyJJTkZPIiwgIldBUk5JTkciLCAiRVJST1IiLCAiRkFUQUwifTsKLQotICBzdGF0
aWMgY29uc3QgaW50IGFuZHJvaWRfbG9nX2xldmVsc1tdID0gewotICAgICAgQU5EUk9JRF9MT0df
SU5GTywgICAvLyBMT0coSU5GTyksCi0gICAgICBBTkRST0lEX0xPR19XQVJOLCAgIC8vIExPRyhX
QVJOSU5HKQotICAgICAgQU5EUk9JRF9MT0dfRVJST1IsICAvLyBMT0coRVJST1IpCi0gICAgICBB
TkRST0lEX0xPR19GQVRBTCwgIC8vIExPRyhGQVRBTCkKLSAgfTsKLQotICAvLyBCb3VuZCB0aGUg
bG9nZ2luZyBsZXZlbC4KLSAgY29uc3QgaW50IGFuZHJvaWRfbG9nX2xldmVsID0gYW5kcm9pZF9s
b2dfbGV2ZWxzW2xldmVsXTsKLSAgOjpzdGQ6Om9zdHJpbmdzdHJlYW0gb3N0cjsKLSAgb3N0ciA8
PCAiW2xpYnByb3RvYnVmICIgPDwgbGV2ZWxfbmFtZXNbbGV2ZWxdIDw8ICIgIiA8PCBmaWxlbmFt
ZSA8PCAiOiIKLSAgICAgICA8PCBsaW5lIDw8ICJdICIgPDwgbWVzc2FnZS5jX3N0cigpOwotCi0g
IC8vIE91dHB1dCB0aGUgbG9nIHN0cmluZyB0aGUgQW5kcm9pZCBsb2cgYXQgdGhlIGFwcHJvcHJp
YXRlIGxldmVsLgotICBfX2FuZHJvaWRfbG9nX3dyaXRlKGFuZHJvaWRfbG9nX2xldmVsLCAibGli
cHJvdG9idWYtbmF0aXZlIiwKLSAgICAgICAgICAgICAgICAgICAgICBvc3RyLnN0cigpLmNfc3Ry
KCkpOwotICAvLyBBbHNvIG91dHB1dCB0byBzdGQ6OmNlcnIuCi0gIGZwcmludGYoc3RkZXJyLCAi
JXMiLCBvc3RyLnN0cigpLmNfc3RyKCkpOwotICBmZmx1c2goc3RkZXJyKTsKLQotICAvLyBJbmRp
Y2F0ZSB0ZXJtaW5hdGlvbiBpZiBuZWVkZWQuCi0gIGlmIChhbmRyb2lkX2xvZ19sZXZlbCA9PSBB
TkRST0lEX0xPR19GQVRBTCkgewotICAgIF9fYW5kcm9pZF9sb2dfd3JpdGUoQU5EUk9JRF9MT0df
RkFUQUwsICJsaWJwcm90b2J1Zi1uYXRpdmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgInRl
cm1pbmF0aW5nLlxuIik7Ci0gIH0KLSNlbmRpZgotfQotI2Vsc2UKLXZvaWQgRGVmYXVsdExvZ0hh
bmRsZXIoTG9nTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBtZXNzYWdlKSB7Ci0gIHN0YXRpYyBj
b25zdCBjaGFyKiBsZXZlbF9uYW1lc1tdID0geyAiSU5GTyIsICJXQVJOSU5HIiwgIkVSUk9SIiwg
IkZBVEFMIiB9OwotCi0gIC8vIFdlIHVzZSBmcHJpbnRmKCkgaW5zdGVhZCBvZiBjZXJyIGJlY2F1
c2Ugd2Ugd2FudCB0aGlzIHRvIHdvcmsgYXQgc3RhdGljCi0gIC8vIGluaXRpYWxpemF0aW9uIHRp
bWUuCi0gIGZwcmludGYoc3RkZXJyLCAiW2xpYnByb3RvYnVmICVzICVzOiVkXSAlc1xuIiwKLSAg
ICAgICAgICBsZXZlbF9uYW1lc1tsZXZlbF0sIGZpbGVuYW1lLCBsaW5lLCBtZXNzYWdlLmNfc3Ry
KCkpOwotICBmZmx1c2goc3RkZXJyKTsgIC8vIE5lZWRlZCBvbiBNU1ZDLgotfQotI2VuZGlmCi0K
LXZvaWQgTnVsbExvZ0hhbmRsZXIoTG9nTGV2ZWwgLyogbGV2ZWwgKi8sIGNvbnN0IGNoYXIqIC8q
IGZpbGVuYW1lICovLAotICAgICAgICAgICAgICAgICAgICBpbnQgLyogbGluZSAqLywgY29uc3Qg
c3RyaW5nJiAvKiBtZXNzYWdlICovKSB7Ci0gIC8vIE5vdGhpbmcuCi19Ci0KLXN0YXRpYyBMb2dI
YW5kbGVyKiBsb2dfaGFuZGxlcl8gPSAmRGVmYXVsdExvZ0hhbmRsZXI7Ci1zdGF0aWMgaW50IGxv
Z19zaWxlbmNlcl9jb3VudF8gPSAwOwotCi1zdGF0aWMgTXV0ZXgqIGxvZ19zaWxlbmNlcl9jb3Vu
dF9tdXRleF8gPSBOVUxMOwotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShsb2dfc2lsZW5j
ZXJfY291bnRfaW5pdF8pOwotCi12b2lkIERlbGV0ZUxvZ1NpbGVuY2VyQ291bnQoKSB7Ci0gIGRl
bGV0ZSBsb2dfc2lsZW5jZXJfY291bnRfbXV0ZXhfOwotICBsb2dfc2lsZW5jZXJfY291bnRfbXV0
ZXhfID0gTlVMTDsKLX0KLXZvaWQgSW5pdExvZ1NpbGVuY2VyQ291bnQoKSB7Ci0gIGxvZ19zaWxl
bmNlcl9jb3VudF9tdXRleF8gPSBuZXcgTXV0ZXg7Ci0gIE9uU2h1dGRvd24oJkRlbGV0ZUxvZ1Np
bGVuY2VyQ291bnQpOwotfQotdm9pZCBJbml0TG9nU2lsZW5jZXJDb3VudE9uY2UoKSB7Ci0gIEdv
b2dsZU9uY2VJbml0KCZsb2dfc2lsZW5jZXJfY291bnRfaW5pdF8sICZJbml0TG9nU2lsZW5jZXJD
b3VudCk7Ci19Ci0KLUxvZ01lc3NhZ2UmIExvZ01lc3NhZ2U6Om9wZXJhdG9yPDwoY29uc3Qgc3Ry
aW5nJiB2YWx1ZSkgewotICBtZXNzYWdlXyArPSB2YWx1ZTsKLSAgcmV0dXJuICp0aGlzOwotfQot
Ci1Mb2dNZXNzYWdlJiBMb2dNZXNzYWdlOjpvcGVyYXRvcjw8KGNvbnN0IGNoYXIqIHZhbHVlKSB7
Ci0gIG1lc3NhZ2VfICs9IHZhbHVlOwotICByZXR1cm4gKnRoaXM7Ci19Ci0KLUxvZ01lc3NhZ2Um
IExvZ01lc3NhZ2U6Om9wZXJhdG9yPDwoY29uc3QgU3RyaW5nUGllY2UmIHZhbHVlKSB7Ci0gIG1l
c3NhZ2VfICs9IHZhbHVlLlRvU3RyaW5nKCk7Ci0gIHJldHVybiAqdGhpczsKLX0KLQotTG9nTWVz
c2FnZSYgTG9nTWVzc2FnZTo6b3BlcmF0b3I8PCgKLSAgICBjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6OnV0aWw6OlN0YXR1cyYgc3RhdHVzKSB7Ci0gIG1lc3NhZ2VfICs9IHN0YXR1cy5Ub1N0cmlu
ZygpOwotICByZXR1cm4gKnRoaXM7Ci19Ci0KLUxvZ01lc3NhZ2UmIExvZ01lc3NhZ2U6Om9wZXJh
dG9yPDwoY29uc3QgdWludDEyOCYgdmFsdWUpIHsKLSAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cjsK
LSAgc3RyIDw8IHZhbHVlOwotICBtZXNzYWdlXyArPSBzdHIuc3RyKCk7Ci0gIHJldHVybiAqdGhp
czsKLX0KLQotLy8gU2luY2UgdGhpcyBpcyBqdXN0IGZvciBsb2dnaW5nLCB3ZSBkb24ndCBjYXJl
IGlmIHRoZSBjdXJyZW50IGxvY2FsZSBjaGFuZ2VzCi0vLyB0aGUgcmVzdWx0cyAtLSBpbiBmYWN0
LCB3ZSBwcm9iYWJseSBwcmVmZXIgdGhhdC4gIFNvIHdlIHVzZSBzbnByaW50ZigpCi0vLyBpbnN0
ZWFkIG9mIFNpbXBsZSp0b2EoKS4KLSN1bmRlZiBERUNMQVJFX1NUUkVBTV9PUEVSQVRPUgotI2Rl
ZmluZSBERUNMQVJFX1NUUkVBTV9PUEVSQVRPUihUWVBFLCBGT1JNQVQpICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIExvZ01lc3NhZ2UmIExvZ01lc3NhZ2U6Om9wZXJhdG9yPDwoVFlQRSB2YWx1
ZSkgeyAgICAgICAgICAgICAgICAgIFwKLSAgICAvKiAxMjggYnl0ZXMgc2hvdWxkIGJlIGJpZyBl
bm91Z2ggZm9yIGFueSBvZiB0aGUgcHJpbWl0aXZlICovICAgXAotICAgIC8qIHZhbHVlcyB3aGlj
aCB3ZSBwcmludCB3aXRoIHRoaXMsIGJ1dCB3ZWxsIHVzZSBzbnByaW50ZigpICovICBcCi0gICAg
LyogYW55d2F5IHRvIGJlIGV4dHJhIHNhZmUuICovICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBjaGFyIGJ1ZmZlclsxMjhdOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksIEZPUk1BVCwgdmFsdWUpOyAgICAgICAgICAgICAgICBcCi0gICAgLyogR3VhcmQgYWdhaW5z
dCBicm9rZW4gTVNWQyBzbnByaW50ZigpLiAqLyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBi
dWZmZXJbc2l6ZW9mKGJ1ZmZlciktMV0gPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1lc3NhZ2VfICs9IGJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuICp0aGlzOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi1ERUNMQVJFX1NUUkVB
TV9PUEVSQVRPUihjaGFyICAgICAgICAgLCAiJWMiICkKLURFQ0xBUkVfU1RSRUFNX09QRVJBVE9S
KGludCAgICAgICAgICAsICIlZCIgKQotREVDTEFSRV9TVFJFQU1fT1BFUkFUT1IodW5zaWduZWQg
aW50ICwgIiV1IiApCi1ERUNMQVJFX1NUUkVBTV9PUEVSQVRPUihsb25nICAgICAgICAgLCAiJWxk
IikKLURFQ0xBUkVfU1RSRUFNX09QRVJBVE9SKHVuc2lnbmVkIGxvbmcsICIlbHUiKQotREVDTEFS
RV9TVFJFQU1fT1BFUkFUT1IoZG91YmxlICAgICAgICwgIiVnIiApCi1ERUNMQVJFX1NUUkVBTV9P
UEVSQVRPUih2b2lkKiAgICAgICAgLCAiJXAiICkKLURFQ0xBUkVfU1RSRUFNX09QRVJBVE9SKGxv
bmcgbG9uZyAgICAgICAgICwgIiUiIEdPT0dMRV9MTF9GT1JNQVQgImQiKQotREVDTEFSRV9TVFJF
QU1fT1BFUkFUT1IodW5zaWduZWQgbG9uZyBsb25nLCAiJSIgR09PR0xFX0xMX0ZPUk1BVCAidSIp
Ci0jdW5kZWYgREVDTEFSRV9TVFJFQU1fT1BFUkFUT1IKLQotTG9nTWVzc2FnZTo6TG9nTWVzc2Fn
ZShMb2dMZXZlbCBsZXZlbCwgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lKQotICA6IGxl
dmVsXyhsZXZlbCksIGZpbGVuYW1lXyhmaWxlbmFtZSksIGxpbmVfKGxpbmUpIHt9Ci1Mb2dNZXNz
YWdlOjp+TG9nTWVzc2FnZSgpIHt9Ci0KLXZvaWQgTG9nTWVzc2FnZTo6RmluaXNoKCkgewotICBi
b29sIHN1cHByZXNzID0gZmFsc2U7Ci0KLSAgaWYgKGxldmVsXyAhPSBMT0dMRVZFTF9GQVRBTCkg
ewotICAgIEluaXRMb2dTaWxlbmNlckNvdW50T25jZSgpOwotICAgIE11dGV4TG9jayBsb2NrKGxv
Z19zaWxlbmNlcl9jb3VudF9tdXRleF8pOwotICAgIHN1cHByZXNzID0gbG9nX3NpbGVuY2VyX2Nv
dW50XyA+IDA7Ci0gIH0KLQotICBpZiAoIXN1cHByZXNzKSB7Ci0gICAgbG9nX2hhbmRsZXJfKGxl
dmVsXywgZmlsZW5hbWVfLCBsaW5lXywgbWVzc2FnZV8pOwotICB9Ci0KLSAgaWYgKGxldmVsXyA9
PSBMT0dMRVZFTF9GQVRBTCkgewotI2lmIFBST1RPQlVGX1VTRV9FWENFUFRJT05TCi0gICAgdGhy
b3cgRmF0YWxFeGNlcHRpb24oZmlsZW5hbWVfLCBsaW5lXywgbWVzc2FnZV8pOwotI2Vsc2UKLSAg
ICBhYm9ydCgpOwotI2VuZGlmCi0gIH0KLX0KLQotdm9pZCBMb2dGaW5pc2hlcjo6b3BlcmF0b3I9
KExvZ01lc3NhZ2UmIG90aGVyKSB7Ci0gIG90aGVyLkZpbmlzaCgpOwotfQotCi19ICAvLyBuYW1l
c3BhY2UgaW50ZXJuYWwKLQotTG9nSGFuZGxlciogU2V0TG9nSGFuZGxlcihMb2dIYW5kbGVyKiBu
ZXdfZnVuYykgewotICBMb2dIYW5kbGVyKiBvbGQgPSBpbnRlcm5hbDo6bG9nX2hhbmRsZXJfOwot
ICBpZiAob2xkID09ICZpbnRlcm5hbDo6TnVsbExvZ0hhbmRsZXIpIHsKLSAgICBvbGQgPSBOVUxM
OwotICB9Ci0gIGlmIChuZXdfZnVuYyA9PSBOVUxMKSB7Ci0gICAgaW50ZXJuYWw6OmxvZ19oYW5k
bGVyXyA9ICZpbnRlcm5hbDo6TnVsbExvZ0hhbmRsZXI7Ci0gIH0gZWxzZSB7Ci0gICAgaW50ZXJu
YWw6OmxvZ19oYW5kbGVyXyA9IG5ld19mdW5jOwotICB9Ci0gIHJldHVybiBvbGQ7Ci19Ci0KLUxv
Z1NpbGVuY2VyOjpMb2dTaWxlbmNlcigpIHsKLSAgaW50ZXJuYWw6OkluaXRMb2dTaWxlbmNlckNv
dW50T25jZSgpOwotICBNdXRleExvY2sgbG9jayhpbnRlcm5hbDo6bG9nX3NpbGVuY2VyX2NvdW50
X211dGV4Xyk7Ci0gICsraW50ZXJuYWw6OmxvZ19zaWxlbmNlcl9jb3VudF87Ci19OwotCi1Mb2dT
aWxlbmNlcjo6fkxvZ1NpbGVuY2VyKCkgewotICBpbnRlcm5hbDo6SW5pdExvZ1NpbGVuY2VyQ291
bnRPbmNlKCk7Ci0gIE11dGV4TG9jayBsb2NrKGludGVybmFsOjpsb2dfc2lsZW5jZXJfY291bnRf
bXV0ZXhfKTsKLSAgLS1pbnRlcm5hbDo6bG9nX3NpbGVuY2VyX2NvdW50XzsKLX07Ci0KLS8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS8vIGVtdWxhdGVzIGdvb2dsZTMvYmFzZS9jYWxsYmFjay5jYwotCi1DbG9zdXJl
Ojp+Q2xvc3VyZSgpIHt9Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7IEZ1bmN0aW9uQ2xvc3VyZTA6
On5GdW5jdGlvbkNsb3N1cmUwKCkge30gfQotCi12b2lkIERvTm90aGluZygpIHt9Ci0KLS8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS8vIGVtdWxhdGVzIGdvb2dsZTMvYmFzZS9tdXRleC5jYwotCi0jaWZkZWYgX1dJ
TjMyCi0KLXN0cnVjdCBNdXRleDo6SW50ZXJuYWwgewotICBDUklUSUNBTF9TRUNUSU9OIG11dGV4
OwotI2lmbmRlZiBOREVCVUcKLSAgLy8gVXNlZCBvbmx5IHRvIGltcGxlbWVudCBBc3NlcnRIZWxk
KCkuCi0gIERXT1JEIHRocmVhZF9pZDsKLSNlbmRpZgotfTsKLQotTXV0ZXg6Ok11dGV4KCkKLSAg
OiBtSW50ZXJuYWwobmV3IEludGVybmFsKSB7Ci0gIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24o
Jm1JbnRlcm5hbC0+bXV0ZXgpOwotfQotCi1NdXRleDo6fk11dGV4KCkgewotICBEZWxldGVDcml0
aWNhbFNlY3Rpb24oJm1JbnRlcm5hbC0+bXV0ZXgpOwotICBkZWxldGUgbUludGVybmFsOwotfQot
Ci12b2lkIE11dGV4OjpMb2NrKCkgewotICBFbnRlckNyaXRpY2FsU2VjdGlvbigmbUludGVybmFs
LT5tdXRleCk7Ci0jaWZuZGVmIE5ERUJVRwotICBtSW50ZXJuYWwtPnRocmVhZF9pZCA9IEdldEN1
cnJlbnRUaHJlYWRJZCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgTXV0ZXg6OlVubG9jaygpIHsKLSNp
Zm5kZWYgTkRFQlVHCi0gIG1JbnRlcm5hbC0+dGhyZWFkX2lkID0gMDsKLSNlbmRpZgotICBMZWF2
ZUNyaXRpY2FsU2VjdGlvbigmbUludGVybmFsLT5tdXRleCk7Ci19Ci0KLXZvaWQgTXV0ZXg6OkFz
c2VydEhlbGQoKSB7Ci0jaWZuZGVmIE5ERUJVRwotICBHT09HTEVfRENIRUNLX0VRKG1JbnRlcm5h
bC0+dGhyZWFkX2lkLCBHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci0jZW5kaWYKLX0KLQotI2VsaWYg
ZGVmaW5lZChIQVZFX1BUSFJFQUQpCi0KLXN0cnVjdCBNdXRleDo6SW50ZXJuYWwgewotICBwdGhy
ZWFkX211dGV4X3QgbXV0ZXg7Ci19OwotCi1NdXRleDo6TXV0ZXgoKQotICA6IG1JbnRlcm5hbChu
ZXcgSW50ZXJuYWwpIHsKLSAgcHRocmVhZF9tdXRleF9pbml0KCZtSW50ZXJuYWwtPm11dGV4LCBO
VUxMKTsKLX0KLQotTXV0ZXg6On5NdXRleCgpIHsKLSAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZt
SW50ZXJuYWwtPm11dGV4KTsKLSAgZGVsZXRlIG1JbnRlcm5hbDsKLX0KLQotdm9pZCBNdXRleDo6
TG9jaygpIHsKLSAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmbUludGVybmFsLT5t
dXRleCk7Ci0gIGlmIChyZXN1bHQgIT0gMCkgewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJw
dGhyZWFkX211dGV4X2xvY2s6ICIgPDwgc3RyZXJyb3IocmVzdWx0KTsKLSAgfQotfQotCi12b2lk
IE11dGV4OjpVbmxvY2soKSB7Ci0gIGludCByZXN1bHQgPSBwdGhyZWFkX211dGV4X3VubG9jaygm
bUludGVybmFsLT5tdXRleCk7Ci0gIGlmIChyZXN1bHQgIT0gMCkgewotICAgIEdPT0dMRV9MT0co
RkFUQUwpIDw8ICJwdGhyZWFkX211dGV4X3VubG9jazogIiA8PCBzdHJlcnJvcihyZXN1bHQpOwot
ICB9Ci19Ci0KLXZvaWQgTXV0ZXg6OkFzc2VydEhlbGQoKSB7Ci0gIC8vIHB0aHJlYWRzIGRvc24n
dCBwcm92aWRlIGEgd2F5IHRvIGNoZWNrIHdoaWNoIHRocmVhZCBob2xkcyB0aGUgbXV0ZXguCi0g
IC8vIFRPRE8oa2VudG9uKTogIE1heWJlIGtlZXAgdHJhY2sgb2YgbG9ja2luZyB0aHJlYWQgSUQg
bGlrZSB3aXRoIFdJTjMyPwotfQotCi0jZW5kaWYKLQotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gZW11bGF0
ZXMgZ29vZ2xlMy91dGlsL2VuZGlhbi9lbmRpYW4uaAotLy8KLS8vIFRPRE8oeGlhb2ZlbmcpOiBQ
Uk9UT0JVRl9MSVRUTEVfRU5ESUFOIGlzIHVuZm9ydHVuYXRlbHkgZGVmaW5lZCBpbgotLy8gZ29v
Z2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oIGFuZCB0aGVyZWZvcmUgY2FuIG5vdCBiZSB1
c2VkIGhlcmUuCi0vLyBNYXliZSBtb3ZlIHRoYXQgbWFjcm8gZGVmaW5pdGlvbiBoZXJlIGluIHRo
ZSBmdXJ0dXJlLgotdWludDMyIGdodG9ubCh1aW50MzIgeCkgewotICB1bmlvbiB7Ci0gICAgdWlu
dDMyIHJlc3VsdDsKLSAgICB1aW50OCByZXN1bHRfYXJyYXlbNF07Ci0gIH07Ci0gIHJlc3VsdF9h
cnJheVswXSA9IHN0YXRpY19jYXN0PHVpbnQ4Pih4ID4+IDI0KTsKLSAgcmVzdWx0X2FycmF5WzFd
ID0gc3RhdGljX2Nhc3Q8dWludDg+KCh4ID4+IDE2KSAmIDB4RkYpOwotICByZXN1bHRfYXJyYXlb
Ml0gPSBzdGF0aWNfY2FzdDx1aW50OD4oKHggPj4gOCkgJiAweEZGKTsKLSAgcmVzdWx0X2FycmF5
WzNdID0gc3RhdGljX2Nhc3Q8dWludDg+KHggJiAweEZGKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLy8gU2h1dGRvd24gc3VwcG9ydC4KLQotbmFtZXNwYWNlIGludGVy
bmFsIHsKLQotdHlwZWRlZiB2b2lkIE9uU2h1dGRvd25GdW5jKCk7Ci12ZWN0b3I8dm9pZCAoKiko
KT4qIHNodXRkb3duX2Z1bmN0aW9ucyA9IE5VTEw7Ci1NdXRleCogc2h1dGRvd25fZnVuY3Rpb25z
X211dGV4ID0gTlVMTDsKLUdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0Uoc2h1dGRvd25fZnVu
Y3Rpb25zX2luaXQpOwotCi12b2lkIEluaXRTaHV0ZG93bkZ1bmN0aW9ucygpIHsKLSAgc2h1dGRv
d25fZnVuY3Rpb25zID0gbmV3IHZlY3Rvcjx2b2lkICgqKSgpPjsKLSAgc2h1dGRvd25fZnVuY3Rp
b25zX211dGV4ID0gbmV3IE11dGV4OwotfQotCi1pbmxpbmUgdm9pZCBJbml0U2h1dGRvd25GdW5j
dGlvbnNPbmNlKCkgewotICBHb29nbGVPbmNlSW5pdCgmc2h1dGRvd25fZnVuY3Rpb25zX2luaXQs
ICZJbml0U2h1dGRvd25GdW5jdGlvbnMpOwotfQotCi12b2lkIE9uU2h1dGRvd24odm9pZCAoKmZ1
bmMpKCkpIHsKLSAgSW5pdFNodXRkb3duRnVuY3Rpb25zT25jZSgpOwotICBNdXRleExvY2sgbG9j
ayhzaHV0ZG93bl9mdW5jdGlvbnNfbXV0ZXgpOwotICBzaHV0ZG93bl9mdW5jdGlvbnMtPnB1c2hf
YmFjayhmdW5jKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLXZvaWQgU2h1dGRv
d25Qcm90b2J1ZkxpYnJhcnkoKSB7Ci0gIGludGVybmFsOjpJbml0U2h1dGRvd25GdW5jdGlvbnNP
bmNlKCk7Ci0KLSAgLy8gV2UgZG9uJ3QgbmVlZCB0byBsb2NrIHNodXRkb3duX2Z1bmN0aW9uc19t
dXRleCBiZWNhdXNlIGl0J3MgdXAgdG8gdGhlCi0gIC8vIGNhbGxlciB0byBtYWtlIHN1cmUgdGhh
dCBubyBvbmUgaXMgdXNpbmcgdGhlIGxpYnJhcnkgYmVmb3JlIHRoaXMgaXMKLSAgLy8gY2FsbGVk
LgotCi0gIC8vIE1ha2UgaXQgc2FmZSB0byBjYWxsIHRoaXMgbXVsdGlwbGUgdGltZXMuCi0gIGlm
IChpbnRlcm5hbDo6c2h1dGRvd25fZnVuY3Rpb25zID09IE5VTEwpIHJldHVybjsKLQotICBmb3Ig
KGludCBpID0gMDsgaSA8IGludGVybmFsOjpzaHV0ZG93bl9mdW5jdGlvbnMtPnNpemUoKTsgaSsr
KSB7Ci0gICAgaW50ZXJuYWw6OnNodXRkb3duX2Z1bmN0aW9ucy0+YXQoaSkoKTsKLSAgfQotICBk
ZWxldGUgaW50ZXJuYWw6OnNodXRkb3duX2Z1bmN0aW9uczsKLSAgaW50ZXJuYWw6OnNodXRkb3du
X2Z1bmN0aW9ucyA9IE5VTEw7Ci0gIGRlbGV0ZSBpbnRlcm5hbDo6c2h1dGRvd25fZnVuY3Rpb25z
X211dGV4OwotICBpbnRlcm5hbDo6c2h1dGRvd25fZnVuY3Rpb25zX211dGV4ID0gTlVMTDsKLX0K
LQotI2lmIFBST1RPQlVGX1VTRV9FWENFUFRJT05TCi1GYXRhbEV4Y2VwdGlvbjo6fkZhdGFsRXhj
ZXB0aW9uKCkgdGhyb3coKSB7fQotCi1jb25zdCBjaGFyKiBGYXRhbEV4Y2VwdGlvbjo6d2hhdCgp
IGNvbnN0IHRocm93KCkgewotICByZXR1cm4gbWVzc2FnZV8uY19zdHIoKTsKLX0KLSNlbmRpZgot
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMwNWNh
YzM2MGNkMmRiMzE2N2ZjNDQ0NjM0MmIwM2RmMTA4YzcyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9u
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJk
YSkgYW5kIG90aGVycwotLy8KLS8vIENvbnRhaW5zIGJhc2ljIHR5cGVzIGFuZCB1dGlsaXRpZXMg
dXNlZCBieSB0aGUgcmVzdCBvZiB0aGUgbGlicmFyeS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9C
VUZfQ09NTU9OX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQ09NTU9OX0hfXwotCi0jaW5j
bHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3BvcnQuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWFjcm9zLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3BsYXRmb3JtX21hY3Jvcy5oPgotCi0vLyBUT0RPKGxpdWppc2kp
OiBSZW1vdmUgdGhlIGZvbGxvd2luZyBpbmNsdWRlcyBhZnRlciB0aGUgaW5jbHVkZSBjbGVhbi11
cC4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zY29wZWRfcHRyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3N0dWJzL211dGV4Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Nh
bGxiYWNrLmg+Ci0KLSNpZm5kZWYgUFJPVE9CVUZfVVNFX0VYQ0VQVElPTlMKLSNpZiBkZWZpbmVk
KF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9DUFBVTldJTkQpCi0gICNkZWZpbmUgUFJPVE9CVUZfVVNF
X0VYQ0VQVElPTlMgMQotI2VsaWYgZGVmaW5lZChfX0VYQ0VQVElPTlMpCi0gICNkZWZpbmUgUFJP
VE9CVUZfVVNFX0VYQ0VQVElPTlMgMQotI2Vsc2UKLSAgI2RlZmluZSBQUk9UT0JVRl9VU0VfRVhD
RVBUSU9OUyAwCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgUFJPVE9CVUZfVVNFX0VYQ0VQVElPTlMK
LSNpbmNsdWRlIDxleGNlcHRpb24+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNp
bmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4gIC8vIGZvciBUQVJHRVRfT1NfSVBIT05FCi0j
ZW5kaWYKLQotI2lmIGRlZmluZWQoX19BTkRST0lEX18pIHx8IGRlZmluZWQoR09PR0xFX1BST1RP
QlVGX09TX0FORFJPSUQpIHx8IChkZWZpbmVkKFRBUkdFVF9PU19JUEhPTkUpICYmIFRBUkdFVF9P
U19JUEhPTkUpIHx8IGRlZmluZWQoR09PR0xFX1BST1RPQlVGX09TX0lQSE9ORSkKLSNpbmNsdWRl
IDxwdGhyZWFkLmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKEdl
dE1lc3NhZ2UpCi0vLyBBbGxvdyBHZXRNZXNzYWdlIHRvIGJlIHVzZWQgYXMgYSB2YWxpZCBtZXRo
b2QgbmFtZSBpbiBwcm90b2J1ZiBjbGFzc2VzLgotLy8gd2luZG93cy5oIGRlZmluZXMgR2V0TWVz
c2FnZSgpIGFzIGEgbWFjcm8uICBMZXQncyByZS1kZWZpbmUgaXQgYXMgYW4gaW5saW5lCi0vLyBm
dW5jdGlvbi4gIFRoZSBpbmxpbmUgZnVuY3Rpb24gc2hvdWxkIGJlIGVxdWl2YWxlbnQgZm9yIEMr
KyB1c2Vycy4KLWlubGluZSBCT09MIEdldE1lc3NhZ2VfV2luMzIoCi0gICAgTFBNU0cgbHBNc2cs
IEhXTkQgaFduZCwKLSAgICBVSU5UIHdNc2dGaWx0ZXJNaW4sIFVJTlQgd01zZ0ZpbHRlck1heCkg
ewotICByZXR1cm4gR2V0TWVzc2FnZShscE1zZywgaFduZCwgd01zZ0ZpbHRlck1pbiwgd01zZ0Zp
bHRlck1heCk7Ci19Ci0jdW5kZWYgR2V0TWVzc2FnZQotaW5saW5lIEJPT0wgR2V0TWVzc2FnZSgK
LSAgICBMUE1TRyBscE1zZywgSFdORCBoV25kLAotICAgIFVJTlQgd01zZ0ZpbHRlck1pbiwgVUlO
VCB3TXNnRmlsdGVyTWF4KSB7Ci0gIHJldHVybiBHZXRNZXNzYWdlX1dpbjMyKGxwTXNnLCBoV25k
LCB3TXNnRmlsdGVyTWluLCB3TXNnRmlsdGVyTWF4KTsKLX0KLSNlbmRpZgotCi1uYW1lc3BhY2Ug
c3RkIHt9Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSBpbnRlcm5hbCB7Ci0KLS8vIFNvbWUgb2YgdGhlc2UgY29uc3RhbnRzIGFyZSBtYWNyb3Mg
cmF0aGVyIHRoYW4gY29uc3QgaW50cyBzbyB0aGF0IHRoZXkgY2FuCi0vLyBiZSB1c2VkIGluICNp
ZiBkaXJlY3RpdmVzLgotCi0vLyBUaGUgY3VycmVudCB2ZXJzaW9uLCByZXByZXNlbnRlZCBhcyBh
IHNpbmdsZSBpbnRlZ2VyIHRvIG1ha2UgY29tcGFyaXNvbgotLy8gZWFzaWVyOiAgbWFqb3IgKiAx
MF42ICsgbWlub3IgKiAxMF4zICsgbWljcm8KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1ZFUlNJ
T04gMzAwMDAwMAotCi0vLyBUaGUgbWluaW11bSBsaWJyYXJ5IHZlcnNpb24gd2hpY2ggd29ya3Mg
d2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZQotLy8gaGVhZGVycy4KLSNkZWZpbmUgR09P
R0xFX1BST1RPQlVGX01JTl9MSUJSQVJZX1ZFUlNJT04gMzAwMDAwMAotCi0vLyBUaGUgbWluaW11
bSBoZWFkZXIgdmVyc2lvbiB3aGljaCB3b3JrcyB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YK
LS8vIHRoZSBsaWJyYXJ5LiAgVGhpcyBjb25zdGFudCBzaG91bGQgb25seSBiZSB1c2VkIGJ5IHBy
b3RvYydzIEMrKyBjb2RlCi0vLyBnZW5lcmF0b3IuCi1zdGF0aWMgY29uc3QgaW50IGtNaW5IZWFk
ZXJWZXJzaW9uRm9yTGlicmFyeSA9IDMwMDAwMDA7Ci0KLS8vIFRoZSBtaW5pbXVtIHByb3RvYyB2
ZXJzaW9uIHdoaWNoIHdvcmtzIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUKLS8vIGhl
YWRlcnMuCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9NSU5fUFJPVE9DX1ZFUlNJT04gMzAwMDAw
MAotCi0vLyBUaGUgbWluaW11bSBoZWFkZXIgdmVyc2lvbiB3aGljaCB3b3JrcyB3aXRoIHRoZSBj
dXJyZW50IHZlcnNpb24gb2YKLS8vIHByb3RvYy4gIFRoaXMgY29uc3RhbnQgc2hvdWxkIG9ubHkg
YmUgdXNlZCBpbiBWZXJpZnlWZXJzaW9uKCkuCi1zdGF0aWMgY29uc3QgaW50IGtNaW5IZWFkZXJW
ZXJzaW9uRm9yUHJvdG9jID0gMzAwMDAwMDsKLQotLy8gVmVyaWZpZXMgdGhhdCB0aGUgaGVhZGVy
cyBhbmQgbGlicmFyaWVzIGFyZSBjb21wYXRpYmxlLiAgVXNlIHRoZSBtYWNybwotLy8gYmVsb3cg
dG8gY2FsbCB0aGlzLgotdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgVmVyaWZ5VmVyc2lvbihpbnQg
aGVhZGVyVmVyc2lvbiwgaW50IG1pbkxpYnJhcnlWZXJzaW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSk7Ci0KLS8vIENvbnZlcnRz
IGEgbnVtZXJpYyB2ZXJzaW9uIG51bWJlciB0byBhIHN0cmluZy4KLXN0ZDo6c3RyaW5nIExJQlBS
T1RPQlVGX0VYUE9SVCBWZXJzaW9uU3RyaW5nKGludCB2ZXJzaW9uKTsKLQotfSAgLy8gbmFtZXNw
YWNlIGludGVybmFsCi0KLS8vIFBsYWNlIHRoaXMgbWFjcm8gaW4geW91ciBtYWluKCkgZnVuY3Rp
b24gKG9yIHNvbWV3aGVyZSBiZWZvcmUgeW91IGF0dGVtcHQKLS8vIHRvIHVzZSB0aGUgcHJvdG9i
dWYgbGlicmFyeSkgdG8gdmVyaWZ5IHRoYXQgdGhlIHZlcnNpb24geW91IGxpbmsgYWdhaW5zdAot
Ly8gbWF0Y2hlcyB0aGUgaGVhZGVycyB5b3UgY29tcGlsZWQgYWdhaW5zdC4gIElmIGEgdmVyc2lv
biBtaXNtYXRjaCBpcwotLy8gZGV0ZWN0ZWQsIHRoZSBwcm9jZXNzIHdpbGwgYWJvcnQuCi0jZGVm
aW5lIEdPT0dMRV9QUk9UT0JVRl9WRVJJRllfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6VmVyaWZ5VmVy
c2lvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdPT0dMRV9QUk9UT0JVRl9W
RVJTSU9OLCBHT09HTEVfUFJPVE9CVUZfTUlOX0xJQlJBUllfVkVSU0lPTiwgICAgICAgICBcCi0g
ICAgX19GSUxFX18pCi0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gZnJvbSBnb29nbGUzL3V0aWwvdXRm
OC9wdWJsaWMvdW5pbGliLmgKLQotY2xhc3MgU3RyaW5nUGllY2U7Ci1uYW1lc3BhY2UgaW50ZXJu
YWwgewotCi0vLyBDaGVja3MgaWYgdGhlIGJ1ZmZlciBjb250YWlucyBzdHJ1Y3R1cmFsbHktdmFs
aWQgVVRGLTguICBJbXBsZW1lbnRlZCBpbgotLy8gc3RydWN0dXJhbGx5X3ZhbGlkLmNjLgotTElC
UFJPVE9CVUZfRVhQT1JUIGJvb2wgSXNTdHJ1Y3R1cmFsbHlWYWxpZFVURjgoY29uc3QgY2hhciog
YnVmLCBpbnQgbGVuKTsKLQotaW5saW5lIGJvb2wgSXNTdHJ1Y3R1cmFsbHlWYWxpZFVURjgoY29u
c3Qgc3RkOjpzdHJpbmcmIHN0cikgewotICByZXR1cm4gSXNTdHJ1Y3R1cmFsbHlWYWxpZFVURjgo
c3RyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihzdHIubGVuZ3RoKCkpKTsKLX0KLQotLy8gUmV0
dXJucyBpbml0aWFsIG51bWJlciBvZiBieXRlcyBvZiBzdHJ1Y3R1YWxseSB2YWxpZCBVVEYtOC4K
LUxJQlBST1RPQlVGX0VYUE9SVCBpbnQgVVRGOFNwblN0cnVjdHVyYWxseVZhbGlkKGNvbnN0IFN0
cmluZ1BpZWNlJiBzdHIpOwotCi0vLyBDb2VyY2UgVVRGLTggYnl0ZSBzdHJpbmcgaW4gc3JjX3N0
ciB0byBiZQotLy8gYSBzdHJ1Y3R1cmFsbHktdmFsaWQgZXF1YWwtbGVuZ3RoIHN0cmluZyBieSBz
ZWxlY3RpdmVseQotLy8gb3ZlcndyaXRpbmcgaWxsZWdhbCBieXRlcyB3aXRoIHJlcGxhY2VfY2hh
ciAodHlwaWNhbGx5ICcgJyBvciAnPycpLgotLy8gcmVwbGFjZV9jaGFyIG11c3QgYmUgbGVnYWwg
cHJpbnRhYmxlIDctYml0IEFzY2lpIDB4MjAuLjB4N2UuCi0vLyBzcmNfc3RyIGlzIHJlYWQtb25s
eS4KLS8vCi0vLyBSZXR1cm5zIHBvaW50ZXIgdG8gb3V0cHV0IGJ1ZmZlciwgc3JjX3N0ci5kYXRh
KCkgaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUsCi0vLyAgb3IgaWRzdCBpZiBzb21lIGJ5dGVzIHdl
cmUgY2hhbmdlZC4gaWRzdCBpcyBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlcgotLy8gIGFuZCBtdXN0
IGJlIGF0IGxlYXN0IGFzIGJpZyBhcyBzcmNfc3RyCi0vLwotLy8gT3B0aW1pemVkIGZvcjogYWxs
IHN0cnVjdHVyYWxseSB2YWxpZCBhbmQgbm8gYnl0ZSBjb3B5aW5nIGlzIGRvbmUuCi0vLwotTElC
UFJPVE9CVUZfRVhQT1JUIGNoYXIqIFVURjhDb2VyY2VUb1N0cnVjdHVyYWxseVZhbGlkKAotICAg
IGNvbnN0IFN0cmluZ1BpZWNlJiBzdHIsIGNoYXIqIGRzdCwgY2hhciByZXBsYWNlX2NoYXIpOwot
Ci19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBTaHV0ZG93
biBzdXBwb3J0LgotCi0vLyBTaHV0IGRvd24gdGhlIGVudGlyZSBwcm90b2NvbCBidWZmZXJzIGxp
YnJhcnksIGRlbGV0aW5nIGFsbCBzdGF0aWMtZHVyYXRpb24KLS8vIG9iamVjdHMgYWxsb2NhdGVk
IGJ5IHRoZSBsaWJyYXJ5IG9yIGJ5IGdlbmVyYXRlZCAucGIuY2MgZmlsZXMuCi0vLwotLy8gVGhl
cmUgYXJlIHR3byByZWFzb25zIHlvdSBtaWdodCB3YW50IHRvIGNhbGwgdGhpczoKLS8vICogWW91
IHVzZSBhIGRyYWNvbmlhbiBkZWZpbml0aW9uIG9mICJtZW1vcnkgbGVhayIgaW4gd2hpY2ggeW91
IGV4cGVjdAotLy8gICBldmVyeSBzaW5nbGUgbWFsbG9jKCkgdG8gaGF2ZSBhIGNvcnJlc3BvbmRp
bmcgZnJlZSgpLCBldmVuIGZvciBvYmplY3RzCi0vLyAgIHdoaWNoIGxpdmUgdW50aWwgcHJvZ3Jh
bSBleGl0LgotLy8gKiBZb3UgYXJlIHdyaXRpbmcgYSBkeW5hbWljYWxseS1sb2FkZWQgbGlicmFy
eSB3aGljaCBuZWVkcyB0byBjbGVhbiB1cAotLy8gICBhZnRlciBpdHNlbGYgd2hlbiB0aGUgbGli
cmFyeSBpcyB1bmxvYWRlZC4KLS8vCi0vLyBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBtdWx0aXBs
ZSB0aW1lcy4gIEhvd2V2ZXIsIGl0IGlzIG5vdCBzYWZlIHRvIHVzZQotLy8gYW55IG90aGVyIHBh
cnQgb2YgdGhlIHByb3RvY29sIGJ1ZmZlcnMgbGlicmFyeSBhZnRlcgotLy8gU2h1dGRvd25Qcm90
b2J1ZkxpYnJhcnkoKSBoYXMgYmVlbiBjYWxsZWQuCi1MSUJQUk9UT0JVRl9FWFBPUlQgdm9pZCBT
aHV0ZG93blByb3RvYnVmTGlicmFyeSgpOwotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBS
ZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIFNodXRkb3duUHJvdG9jb2xCdWZm
ZXJzKCkgaXMgY2FsbGVkLgotTElCUFJPVE9CVUZfRVhQT1JUIHZvaWQgT25TaHV0ZG93bih2b2lk
ICgqZnVuYykoKSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi0jaWYgUFJPVE9CVUZf
VVNFX0VYQ0VQVElPTlMKLWNsYXNzIEZhdGFsRXhjZXB0aW9uIDogcHVibGljIHN0ZDo6ZXhjZXB0
aW9uIHsKLSBwdWJsaWM6Ci0gIEZhdGFsRXhjZXB0aW9uKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBp
bnQgbGluZSwgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpCi0gICAgICA6IGZpbGVuYW1lXyhm
aWxlbmFtZSksIGxpbmVfKGxpbmUpLCBtZXNzYWdlXyhtZXNzYWdlKSB7fQotICB2aXJ0dWFsIH5G
YXRhbEV4Y2VwdGlvbigpIHRocm93KCk7Ci0KLSAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkg
Y29uc3QgdGhyb3coKTsKLQotICBjb25zdCBjaGFyKiBmaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IGZpbGVuYW1lXzsgfQotICBpbnQgbGluZSgpIGNvbnN0IHsgcmV0dXJuIGxpbmVfOyB9Ci0gIGNv
bnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbWVzc2FnZV87IH0KLQot
IHByaXZhdGU6Ci0gIGNvbnN0IGNoYXIqIGZpbGVuYW1lXzsKLSAgY29uc3QgaW50IGxpbmVfOwot
ICBjb25zdCBzdGQ6OnN0cmluZyBtZXNzYWdlXzsKLX07Ci0jZW5kaWYKLQotLy8gVGhpcyBpcyBh
dCB0aGUgZW5kIG9mIHRoZSBmaWxlIGluc3RlYWQgb2YgdGhlIGJlZ2lubmluZyB0byB3b3JrIGFy
b3VuZCBhIGJ1ZwotLy8gaW4gc29tZSB2ZXJzaW9ucyBvZiBNU1ZDLgotdXNpbmcgbmFtZXNwYWNl
IHN0ZDsgIC8vIERvbid0IGRvIHRoaXMgYXQgaG9tZSwga2lkcy4KLQotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BS
T1RPQlVGX0NPTU1PTl9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9j
b21tb25fdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uX3VuaXR0
ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWJhZTliMDc0MTU3Y2ZkOTEx
YmNmMThkNTQ2ZDQyNDU4OTIxMjJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb25fdW5pdHRlc3QuY2MK
KysrIC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkK
LQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY2Fz
dHMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvc3Vic3RpdHV0ZS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rl
c3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFj
ZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLXVzaW5nIGludGVybmFsOjpOZXdDYWxs
YmFjazsKLXVzaW5nIGludGVybmFsOjpOZXdQZXJtYW5lbnRDYWxsYmFjazsKLW5hbWVzcGFjZSB7
Ci0KLS8vIFRPRE8oa2VudG9uKTogIE1vcmUgdGVzdHMuCi0KLSNpZmRlZiBQQUNLQUdFX1ZFUlNJ
T04gIC8vIG9ubHkgZGVmaW5lZCB3aGVuIHVzaW5nIGF1dG9tYWtlLCBub3QgTVNWQwotCi1URVNU
KFZlcnNpb25UZXN0LCBWZXJzaW9uTWF0Y2hlc0NvbmZpZykgewotICAvLyBWZXJpZnkgdGhhdCB0
aGUgdmVyc2lvbiBzdHJpbmcgc3BlY2lmaWVkIGluIGNvbmZpZy5oIG1hdGNoZXMgdGhlIG9uZQot
ICAvLyBpbiBjb21tb24uaC4gIFRoZSBjb25maWcuaCB2ZXJzaW9uIGlzIGEgc3RyaW5nIHdoaWNo
IG1heSBoYXZlIGEgc3VmZml4Ci0gIC8vIGxpa2UgImJldGEiIG9yICJyYzEiLCBzbyB3ZSByZW1v
dmUgdGhhdC4KLSAgc3RyaW5nIHZlcnNpb24gPSBQQUNLQUdFX1ZFUlNJT047Ci0gIGludCBwb3Mg
PSAwOwotICB3aGlsZSAocG9zIDwgdmVyc2lvbi5zaXplKCkgJiYKLSAgICAgICAgIChhc2NpaV9p
c2RpZ2l0KHZlcnNpb25bcG9zXSkgfHwgdmVyc2lvbltwb3NdID09ICcuJykpIHsKLSAgICArK3Bv
czsKLSAgfQotICB2ZXJzaW9uLmVyYXNlKHBvcyk7Ci0KLSAgRVhQRUNUX0VRKHZlcnNpb24sIGlu
dGVybmFsOjpWZXJzaW9uU3RyaW5nKEdPT0dMRV9QUk9UT0JVRl9WRVJTSU9OKSk7Ci19Ci0KLSNl
bmRpZiAgLy8gUEFDS0FHRV9WRVJTSU9OCi0KLVRFU1QoQ29tbW9uVGVzdCwgSW50TWluTWF4Q29u
c3RhbnRzKSB7Ci0gIC8vIGtpbnQzMm1pbiB3YXMgZGVjbGFyZWQgaW5jb3JyZWN0bHkgaW4gdGhl
IGZpcnN0IHJlbGVhc2Ugb2YgcHJvdG9idWZzLgotICAvLyBVZ2guCi0gIEVYUEVDVF9MVChraW50
MzJtaW4sIGtpbnQzMm1heCk7Ci0gIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1aW50MzI+KGtpbnQz
Mm1pbiksIHN0YXRpY19jYXN0PHVpbnQzMj4oa2ludDMybWF4KSArIDEpOwotICBFWFBFQ1RfTFQo
a2ludDY0bWluLCBraW50NjRtYXgpOwotICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8dWludDY0Pihr
aW50NjRtaW4pLCBzdGF0aWNfY2FzdDx1aW50NjQ+KGtpbnQ2NG1heCkgKyAxKTsKLSAgRVhQRUNU
X0VRKDAsIGt1aW50MzJtYXggKyAxKTsKLSAgRVhQRUNUX0VRKDAsIGt1aW50NjRtYXggKyAxKTsK
LX0KLQotdmVjdG9yPHN0cmluZz4gY2FwdHVyZWRfbWVzc2FnZXNfOwotCi12b2lkIENhcHR1cmVM
b2coTG9nTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZSwKLSAgICAg
ICAgICAgICAgICBjb25zdCBzdHJpbmcmIG1lc3NhZ2UpIHsKLSAgY2FwdHVyZWRfbWVzc2FnZXNf
LnB1c2hfYmFjaygKLSAgICBzdHJpbmdzOjpTdWJzdGl0dXRlKCIkMCAkMTokMjogJDMiLAotICAg
ICAgaW1wbGljaXRfY2FzdDxpbnQ+KGxldmVsKSwgZmlsZW5hbWUsIGxpbmUsIG1lc3NhZ2UpKTsK
LX0KLQotVEVTVChMb2dnaW5nVGVzdCwgRGVmYXVsdExvZ2dpbmcpIHsKLSAgQ2FwdHVyZVRlc3RT
dGRlcnIoKTsKLSAgaW50IGxpbmUgPSBfX0xJTkVfXzsKLSAgR09PR0xFX0xPRyhJTkZPICAgKSA8
PCAiQSBtZXNzYWdlLiI7Ci0gIEdPT0dMRV9MT0coV0FSTklORykgPDwgIkEgd2FybmluZy4iOwot
ICBHT09HTEVfTE9HKEVSUk9SICApIDw8ICJBbiBlcnJvci4iOwotCi0gIHN0cmluZyB0ZXh0ID0g
R2V0Q2FwdHVyZWRUZXN0U3RkZXJyKCk7Ci0gIEVYUEVDVF9FUSgKLSAgICAiW2xpYnByb3RvYnVm
IElORk8gIiBfX0ZJTEVfXyAiOiIgKyBTaW1wbGVJdG9hKGxpbmUgKyAxKSArICJdIEEgbWVzc2Fn
ZS5cbiIKLSAgICAiW2xpYnByb3RvYnVmIFdBUk5JTkcgIiBfX0ZJTEVfXyAiOiIgKyBTaW1wbGVJ
dG9hKGxpbmUgKyAyKSArICJdIEEgd2FybmluZy5cbiIKLSAgICAiW2xpYnByb3RvYnVmIEVSUk9S
ICIgX19GSUxFX18gIjoiICsgU2ltcGxlSXRvYShsaW5lICsgMykgKyAiXSBBbiBlcnJvci5cbiIs
Ci0gICAgdGV4dCk7Ci19Ci0KLVRFU1QoTG9nZ2luZ1Rlc3QsIE51bGxMb2dnaW5nKSB7Ci0gIExv
Z0hhbmRsZXIqIG9sZF9oYW5kbGVyID0gU2V0TG9nSGFuZGxlcihOVUxMKTsKLQotICBDYXB0dXJl
VGVzdFN0ZGVycigpOwotICBHT09HTEVfTE9HKElORk8gICApIDw8ICJBIG1lc3NhZ2UuIjsKLSAg
R09PR0xFX0xPRyhXQVJOSU5HKSA8PCAiQSB3YXJuaW5nLiI7Ci0gIEdPT0dMRV9MT0coRVJST1Ig
ICkgPDwgIkFuIGVycm9yLiI7Ci0KLSAgRVhQRUNUX1RSVUUoU2V0TG9nSGFuZGxlcihvbGRfaGFu
ZGxlcikgPT0gTlVMTCk7Ci0KLSAgc3RyaW5nIHRleHQgPSBHZXRDYXB0dXJlZFRlc3RTdGRlcnIo
KTsKLSAgRVhQRUNUX0VRKCIiLCB0ZXh0KTsKLX0KLQotVEVTVChMb2dnaW5nVGVzdCwgQ2FwdHVy
ZUxvZ2dpbmcpIHsKLSAgY2FwdHVyZWRfbWVzc2FnZXNfLmNsZWFyKCk7Ci0KLSAgTG9nSGFuZGxl
ciogb2xkX2hhbmRsZXIgPSBTZXRMb2dIYW5kbGVyKCZDYXB0dXJlTG9nKTsKLQotICBpbnQgc3Rh
cnRfbGluZSA9IF9fTElORV9fOwotICBHT09HTEVfTE9HKEVSUk9SKSA8PCAiQW4gZXJyb3IuIjsK
LSAgR09PR0xFX0xPRyhXQVJOSU5HKSA8PCAiQSB3YXJuaW5nLiI7Ci0KLSAgRVhQRUNUX1RSVUUo
U2V0TG9nSGFuZGxlcihvbGRfaGFuZGxlcikgPT0gJkNhcHR1cmVMb2cpOwotCi0gIEFTU0VSVF9F
USgyLCBjYXB0dXJlZF9tZXNzYWdlc18uc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKAotICAgICIyICIg
X19GSUxFX18gIjoiICsgU2ltcGxlSXRvYShzdGFydF9saW5lICsgMSkgKyAiOiBBbiBlcnJvci4i
LAotICAgIGNhcHR1cmVkX21lc3NhZ2VzX1swXSk7Ci0gIEVYUEVDVF9FUSgKLSAgICAiMSAiIF9f
RklMRV9fICI6IiArIFNpbXBsZUl0b2Eoc3RhcnRfbGluZSArIDIpICsgIjogQSB3YXJuaW5nLiIs
Ci0gICAgY2FwdHVyZWRfbWVzc2FnZXNfWzFdKTsKLX0KLQotVEVTVChMb2dnaW5nVGVzdCwgU2ls
ZW5jZUxvZ2dpbmcpIHsKLSAgY2FwdHVyZWRfbWVzc2FnZXNfLmNsZWFyKCk7Ci0KLSAgTG9nSGFu
ZGxlciogb2xkX2hhbmRsZXIgPSBTZXRMb2dIYW5kbGVyKCZDYXB0dXJlTG9nKTsKLQotICBpbnQg
bGluZTEgPSBfX0xJTkVfXzsgR09PR0xFX0xPRyhJTkZPKSA8PCAiVmlzaWJsZTEiOwotICBMb2dT
aWxlbmNlciogc2lsZW5jZXIxID0gbmV3IExvZ1NpbGVuY2VyOwotICBHT09HTEVfTE9HKElORk8p
IDw8ICJOb3QgdmlzaWJsZS4iOwotICBMb2dTaWxlbmNlciogc2lsZW5jZXIyID0gbmV3IExvZ1Np
bGVuY2VyOwotICBHT09HTEVfTE9HKElORk8pIDw8ICJOb3QgdmlzaWJsZS4iOwotICBkZWxldGUg
c2lsZW5jZXIxOwotICBHT09HTEVfTE9HKElORk8pIDw8ICJOb3QgdmlzaWJsZS4iOwotICBkZWxl
dGUgc2lsZW5jZXIyOwotICBpbnQgbGluZTIgPSBfX0xJTkVfXzsgR09PR0xFX0xPRyhJTkZPKSA8
PCAiVmlzaWJsZTIiOwotCi0gIEVYUEVDVF9UUlVFKFNldExvZ0hhbmRsZXIob2xkX2hhbmRsZXIp
ID09ICZDYXB0dXJlTG9nKTsKLQotICBBU1NFUlRfRVEoMiwgY2FwdHVyZWRfbWVzc2FnZXNfLnNp
emUoKSk7Ci0gIEVYUEVDVF9FUSgKLSAgICAiMCAiIF9fRklMRV9fICI6IiArIFNpbXBsZUl0b2Eo
bGluZTEpICsgIjogVmlzaWJsZTEiLAotICAgIGNhcHR1cmVkX21lc3NhZ2VzX1swXSk7Ci0gIEVY
UEVDVF9FUSgKLSAgICAiMCAiIF9fRklMRV9fICI6IiArIFNpbXBsZUl0b2EobGluZTIpICsgIjog
VmlzaWJsZTIiLAotICAgIGNhcHR1cmVkX21lc3NhZ2VzX1sxXSk7Ci19Ci0KLWNsYXNzIENsb3N1
cmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgdm9pZCBTZXRBMTIz
TWV0aG9kKCkgICB7IGFfID0gMTIzOyB9Ci0gIHN0YXRpYyB2b2lkIFNldEExMjNGdW5jdGlvbigp
IHsgY3VycmVudF9pbnN0YW5jZV8tPmFfID0gMTIzOyB9Ci0KLSAgdm9pZCBTZXRBTWV0aG9kKGlu
dCBhKSAgICAgICAgIHsgYV8gPSBhOyB9Ci0gIHZvaWQgU2V0Q01ldGhvZChzdHJpbmcgYykgICAg
ICB7IGNfID0gYzsgfQotCi0gIHN0YXRpYyB2b2lkIFNldEFGdW5jdGlvbihpbnQgYSkgICAgICAg
ICB7IGN1cnJlbnRfaW5zdGFuY2VfLT5hXyA9IGE7IH0KLSAgc3RhdGljIHZvaWQgU2V0Q0Z1bmN0
aW9uKHN0cmluZyBjKSAgICAgIHsgY3VycmVudF9pbnN0YW5jZV8tPmNfID0gYzsgfQotCi0gIHZv
aWQgU2V0QUJNZXRob2QoaW50IGEsIGNvbnN0IGNoYXIqIGIpICB7IGFfID0gYTsgYl8gPSBiOyB9
Ci0gIHN0YXRpYyB2b2lkIFNldEFCRnVuY3Rpb24oaW50IGEsIGNvbnN0IGNoYXIqIGIpIHsKLSAg
ICBjdXJyZW50X2luc3RhbmNlXy0+YV8gPSBhOwotICAgIGN1cnJlbnRfaW5zdGFuY2VfLT5iXyA9
IGI7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSB7Ci0gICAgY3VycmVudF9pbnN0YW5j
ZV8gPSB0aGlzOwotICAgIGFfID0gMDsKLSAgICBiXyA9IE5VTEw7Ci0gICAgY18uY2xlYXIoKTsK
LSAgICBwZXJtYW5lbnRfY2xvc3VyZV8gPSBOVUxMOwotICB9Ci0KLSAgdm9pZCBEZWxldGVDbG9z
dXJlSW5DYWxsYmFjaygpIHsKLSAgICBkZWxldGUgcGVybWFuZW50X2Nsb3N1cmVfOwotICB9Ci0K
LSAgaW50IGFfOwotICBjb25zdCBjaGFyKiBiXzsKLSAgc3RyaW5nIGNfOwotICBDbG9zdXJlKiBw
ZXJtYW5lbnRfY2xvc3VyZV87Ci0KLSAgc3RhdGljIENsb3N1cmVUZXN0KiBjdXJyZW50X2luc3Rh
bmNlXzsKLX07Ci0KLUNsb3N1cmVUZXN0KiBDbG9zdXJlVGVzdDo6Y3VycmVudF9pbnN0YW5jZV8g
PSBOVUxMOwotCi1URVNUX0YoQ2xvc3VyZVRlc3QsIFRlc3RDbG9zdXJlRnVuY3Rpb24wKSB7Ci0g
IENsb3N1cmUqIGNsb3N1cmUgPSBOZXdDYWxsYmFjaygmU2V0QTEyM0Z1bmN0aW9uKTsKLSAgRVhQ
RUNUX05FKDEyMywgYV8pOwotICBjbG9zdXJlLT5SdW4oKTsKLSAgRVhQRUNUX0VRKDEyMywgYV8p
OwotfQotCi1URVNUX0YoQ2xvc3VyZVRlc3QsIFRlc3RDbG9zdXJlTWV0aG9kMCkgewotICBDbG9z
dXJlKiBjbG9zdXJlID0gTmV3Q2FsbGJhY2soY3VycmVudF9pbnN0YW5jZV8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmQ2xvc3VyZVRlc3Q6OlNldEExMjNNZXRob2QpOwotICBF
WFBFQ1RfTkUoMTIzLCBhXyk7Ci0gIGNsb3N1cmUtPlJ1bigpOwotICBFWFBFQ1RfRVEoMTIzLCBh
Xyk7Ci19Ci0KLVRFU1RfRihDbG9zdXJlVGVzdCwgVGVzdENsb3N1cmVGdW5jdGlvbjEpIHsKLSAg
Q2xvc3VyZSogY2xvc3VyZSA9IE5ld0NhbGxiYWNrKCZTZXRBRnVuY3Rpb24sIDQ1Nik7Ci0gIEVY
UEVDVF9ORSg0NTYsIGFfKTsKLSAgY2xvc3VyZS0+UnVuKCk7Ci0gIEVYUEVDVF9FUSg0NTYsIGFf
KTsKLX0KLQotVEVTVF9GKENsb3N1cmVUZXN0LCBUZXN0Q2xvc3VyZU1ldGhvZDEpIHsKLSAgQ2xv
c3VyZSogY2xvc3VyZSA9IE5ld0NhbGxiYWNrKGN1cnJlbnRfaW5zdGFuY2VfLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJkNsb3N1cmVUZXN0OjpTZXRBTWV0aG9kLCA0NTYpOwot
ICBFWFBFQ1RfTkUoNDU2LCBhXyk7Ci0gIGNsb3N1cmUtPlJ1bigpOwotICBFWFBFQ1RfRVEoNDU2
LCBhXyk7Ci19Ci0KLVRFU1RfRihDbG9zdXJlVGVzdCwgVGVzdENsb3N1cmVGdW5jdGlvbjFTdHJp
bmcpIHsKLSAgQ2xvc3VyZSogY2xvc3VyZSA9IE5ld0NhbGxiYWNrKCZTZXRDRnVuY3Rpb24sIHN0
cmluZygidGVzdCIpKTsKLSAgRVhQRUNUX05FKCJ0ZXN0IiwgY18pOwotICBjbG9zdXJlLT5SdW4o
KTsKLSAgRVhQRUNUX0VRKCJ0ZXN0IiwgY18pOwotfQotCi1URVNUX0YoQ2xvc3VyZVRlc3QsIFRl
c3RDbG9zdXJlTWV0aG9kMVN0cmluZykgewotICBDbG9zdXJlKiBjbG9zdXJlID0gTmV3Q2FsbGJh
Y2soY3VycmVudF9pbnN0YW5jZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
Q2xvc3VyZVRlc3Q6OlNldENNZXRob2QsIHN0cmluZygidGVzdCIpKTsKLSAgRVhQRUNUX05FKCJ0
ZXN0IiwgY18pOwotICBjbG9zdXJlLT5SdW4oKTsKLSAgRVhQRUNUX0VRKCJ0ZXN0IiwgY18pOwot
fQotCi1URVNUX0YoQ2xvc3VyZVRlc3QsIFRlc3RDbG9zdXJlRnVuY3Rpb24yKSB7Ci0gIGNvbnN0
IGNoYXIqIGNzdHIgPSAiaGVsbG8iOwotICBDbG9zdXJlKiBjbG9zdXJlID0gTmV3Q2FsbGJhY2so
JlNldEFCRnVuY3Rpb24sIDc4OSwgY3N0cik7Ci0gIEVYUEVDVF9ORSg3ODksIGFfKTsKLSAgRVhQ
RUNUX05FKGNzdHIsIGJfKTsKLSAgY2xvc3VyZS0+UnVuKCk7Ci0gIEVYUEVDVF9FUSg3ODksIGFf
KTsKLSAgRVhQRUNUX0VRKGNzdHIsIGJfKTsKLX0KLQotVEVTVF9GKENsb3N1cmVUZXN0LCBUZXN0
Q2xvc3VyZU1ldGhvZDIpIHsKLSAgY29uc3QgY2hhciogY3N0ciA9ICJoZWxsbyI7Ci0gIENsb3N1
cmUqIGNsb3N1cmUgPSBOZXdDYWxsYmFjayhjdXJyZW50X2luc3RhbmNlXywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZDbG9zdXJlVGVzdDo6U2V0QUJNZXRob2QsIDc4OSwgY3N0
cik7Ci0gIEVYUEVDVF9ORSg3ODksIGFfKTsKLSAgRVhQRUNUX05FKGNzdHIsIGJfKTsKLSAgY2xv
c3VyZS0+UnVuKCk7Ci0gIEVYUEVDVF9FUSg3ODksIGFfKTsKLSAgRVhQRUNUX0VRKGNzdHIsIGJf
KTsKLX0KLQotLy8gUmVwZWF0IGFsbCBvZiB0aGUgYWJvdmUgd2l0aCBOZXdQZXJtYW5lbnRDYWxs
YmFjaygpCi0KLVRFU1RfRihDbG9zdXJlVGVzdCwgVGVzdFBlcm1hbmVudENsb3N1cmVGdW5jdGlv
bjApIHsKLSAgQ2xvc3VyZSogY2xvc3VyZSA9IE5ld1Blcm1hbmVudENhbGxiYWNrKCZTZXRBMTIz
RnVuY3Rpb24pOwotICBFWFBFQ1RfTkUoMTIzLCBhXyk7Ci0gIGNsb3N1cmUtPlJ1bigpOwotICBF
WFBFQ1RfRVEoMTIzLCBhXyk7Ci0gIGFfID0gMDsKLSAgY2xvc3VyZS0+UnVuKCk7Ci0gIEVYUEVD
VF9FUSgxMjMsIGFfKTsKLSAgZGVsZXRlIGNsb3N1cmU7Ci19Ci0KLVRFU1RfRihDbG9zdXJlVGVz
dCwgVGVzdFBlcm1hbmVudENsb3N1cmVNZXRob2QwKSB7Ci0gIENsb3N1cmUqIGNsb3N1cmUgPSBO
ZXdQZXJtYW5lbnRDYWxsYmFjayhjdXJyZW50X2luc3RhbmNlXywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZDbG9zdXJlVGVzdDo6U2V0QTEyM01ldGhvZCk7Ci0g
IEVYUEVDVF9ORSgxMjMsIGFfKTsKLSAgY2xvc3VyZS0+UnVuKCk7Ci0gIEVYUEVDVF9FUSgxMjMs
IGFfKTsKLSAgYV8gPSAwOwotICBjbG9zdXJlLT5SdW4oKTsKLSAgRVhQRUNUX0VRKDEyMywgYV8p
OwotICBkZWxldGUgY2xvc3VyZTsKLX0KLQotVEVTVF9GKENsb3N1cmVUZXN0LCBUZXN0UGVybWFu
ZW50Q2xvc3VyZUZ1bmN0aW9uMSkgewotICBDbG9zdXJlKiBjbG9zdXJlID0gTmV3UGVybWFuZW50
Q2FsbGJhY2soJlNldEFGdW5jdGlvbiwgNDU2KTsKLSAgRVhQRUNUX05FKDQ1NiwgYV8pOwotICBj
bG9zdXJlLT5SdW4oKTsKLSAgRVhQRUNUX0VRKDQ1NiwgYV8pOwotICBhXyA9IDA7Ci0gIGNsb3N1
cmUtPlJ1bigpOwotICBFWFBFQ1RfRVEoNDU2LCBhXyk7Ci0gIGRlbGV0ZSBjbG9zdXJlOwotfQot
Ci1URVNUX0YoQ2xvc3VyZVRlc3QsIFRlc3RQZXJtYW5lbnRDbG9zdXJlTWV0aG9kMSkgewotICBD
bG9zdXJlKiBjbG9zdXJlID0gTmV3UGVybWFuZW50Q2FsbGJhY2soY3VycmVudF9pbnN0YW5jZV8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ2xvc3VyZVRlc3Q6
OlNldEFNZXRob2QsIDQ1Nik7Ci0gIEVYUEVDVF9ORSg0NTYsIGFfKTsKLSAgY2xvc3VyZS0+UnVu
KCk7Ci0gIEVYUEVDVF9FUSg0NTYsIGFfKTsKLSAgYV8gPSAwOwotICBjbG9zdXJlLT5SdW4oKTsK
LSAgRVhQRUNUX0VRKDQ1NiwgYV8pOwotICBkZWxldGUgY2xvc3VyZTsKLX0KLQotVEVTVF9GKENs
b3N1cmVUZXN0LCBUZXN0UGVybWFuZW50Q2xvc3VyZUZ1bmN0aW9uMikgewotICBjb25zdCBjaGFy
KiBjc3RyID0gImhlbGxvIjsKLSAgQ2xvc3VyZSogY2xvc3VyZSA9IE5ld1Blcm1hbmVudENhbGxi
YWNrKCZTZXRBQkZ1bmN0aW9uLCA3ODksIGNzdHIpOwotICBFWFBFQ1RfTkUoNzg5LCBhXyk7Ci0g
IEVYUEVDVF9ORShjc3RyLCBiXyk7Ci0gIGNsb3N1cmUtPlJ1bigpOwotICBFWFBFQ1RfRVEoNzg5
LCBhXyk7Ci0gIEVYUEVDVF9FUShjc3RyLCBiXyk7Ci0gIGFfID0gMDsKLSAgYl8gPSBOVUxMOwot
ICBjbG9zdXJlLT5SdW4oKTsKLSAgRVhQRUNUX0VRKDc4OSwgYV8pOwotICBFWFBFQ1RfRVEoY3N0
ciwgYl8pOwotICBkZWxldGUgY2xvc3VyZTsKLX0KLQotVEVTVF9GKENsb3N1cmVUZXN0LCBUZXN0
UGVybWFuZW50Q2xvc3VyZU1ldGhvZDIpIHsKLSAgY29uc3QgY2hhciogY3N0ciA9ICJoZWxsbyI7
Ci0gIENsb3N1cmUqIGNsb3N1cmUgPSBOZXdQZXJtYW5lbnRDYWxsYmFjayhjdXJyZW50X2luc3Rh
bmNlXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDbG9zdXJl
VGVzdDo6U2V0QUJNZXRob2QsIDc4OSwgY3N0cik7Ci0gIEVYUEVDVF9ORSg3ODksIGFfKTsKLSAg
RVhQRUNUX05FKGNzdHIsIGJfKTsKLSAgY2xvc3VyZS0+UnVuKCk7Ci0gIEVYUEVDVF9FUSg3ODks
IGFfKTsKLSAgRVhQRUNUX0VRKGNzdHIsIGJfKTsKLSAgYV8gPSAwOwotICBiXyA9IE5VTEw7Ci0g
IGNsb3N1cmUtPlJ1bigpOwotICBFWFBFQ1RfRVEoNzg5LCBhXyk7Ci0gIEVYUEVDVF9FUShjc3Ry
LCBiXyk7Ci0gIGRlbGV0ZSBjbG9zdXJlOwotfQotCi1URVNUX0YoQ2xvc3VyZVRlc3QsIFRlc3RQ
ZXJtYW5lbnRDbG9zdXJlRGVsZXRlSW5DYWxsYmFjaykgewotICBwZXJtYW5lbnRfY2xvc3VyZV8g
PSBOZXdQZXJtYW5lbnRDYWxsYmFjaygoQ2xvc3VyZVRlc3QqKSB0aGlzLAotICAgICAgJkNsb3N1
cmVUZXN0OjpEZWxldGVDbG9zdXJlSW5DYWxsYmFjayk7Ci0gIHBlcm1hbmVudF9jbG9zdXJlXy0+
UnVuKCk7Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLX0gIC8vIG5hbWVzcGFjZSBw
cm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL2Zhc3RtZW0uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9mYXN0bWVt
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2M2E2ZTYwMjRiYzRiMjBmZDU2NjQy
MWEzYjRkMzQwYTc5ZjAzZDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Zhc3RtZW0uaAorKysgL2Rldi9udWxs
CkBAIC0xLDE1MiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wt
YnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ly8gRmFzdCBtZW1vcnkgY29weWluZyBhbmQgY29tcGFyaXNvbiByb3V0aW5lcy4KLS8vICAgc3Ry
aW5nczo6ZmFzdG1lbWNtcF9pbmxpbmVkKCkgcmVwbGFjZXMgbWVtY21wKCkKLS8vICAgc3RyaW5n
czo6bWVtY3B5X2lubGluZWQoKSByZXBsYWNlcyBtZW1jcHkoKQotLy8gICBzdHJpbmdzOjptZW1l
cShhLCBiLCBuKSByZXBsYWNlcyBtZW1jbXAoYSwgYiwgbikgPT0gMAotLy8KLS8vIHN0cmluZ3M6
OipfaW5saW5lZCgpIHJvdXRpbmVzIGFyZSBpbmxpbmUgdmVyc2lvbnMgb2YgdGhlCi0vLyByb3V0
aW5lcyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZS4gIFNvbWV0aW1lcyB1c2luZyB0aGUgaW5saW5l
ZAotLy8gdmVyc2lvbnMgaXMgZmFzdGVyLiAgTWVhc3VyZSBiZWZvcmUgdXNpbmcgdGhlIGlubGlu
ZWQgdmVyc2lvbnMuCi0vLwotLy8gUGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQ6Ci0vLyAgIHN0cmlu
Z3M6OmZhc3RtZW1jbXBfaW5saW5lZAotLy8gICAgIEFuYWx5c2lzOiBtZW1jbXAsIGZhc3RtZW1j
bXBfaW5saW5lZCwgZmFzdG1lbWNtcAotLy8gICAgIDIwMTItMDEtMzAKLQotI2lmbmRlZiBHT09H
TEVfUFJPVE9CVUZfU1RVQlNfRkFTVE1FTV9IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfU1RV
QlNfRkFTVE1FTV9IXwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4K
LSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9j
b21tb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFt
ZXNwYWNlIGludGVybmFsIHsKLQotLy8gUmV0dXJuIHRydWUgaWYgdGhlIG4gYnl0ZXMgYXQgYSBl
cXVhbCB0aGUgbiBieXRlcyBhdCBiLgotLy8gVGhlIHJlZ2lvbnMgYXJlIGFsbG93ZWQgdG8gb3Zl
cmxhcC4KLS8vCi0vLyBUaGUgcGVyZm9ybWFuY2UgaXMgc2ltaWxhciB0byB0aGUgcGVyZm9ybWFu
Y2UgbWVtY21wKCksIGJ1dCBmYXN0ZXIgZm9yCi0vLyBtb2RlcmF0ZWx5LXNpemVkIGlucHV0cywg
b3IgaW5wdXRzIHRoYXQgc2hhcmUgYSBjb21tb24gcHJlZml4IGFuZCBkaWZmZXIKLS8vIHNvbWV3
aGVyZSBpbiB0aGVpciBsYXN0IDggYnl0ZXMuIEZ1cnRoZXIgb3B0aW1pemF0aW9ucyBjYW4gYmUg
YWRkZWQgbGF0ZXIKLS8vIGlmIGl0IG1ha2VzIHNlbnNlIHRvIGRvIHNvLjp3Ci1pbmxpbmUgYm9v
bCBtZW1lcShjb25zdCBjaGFyKiBhLCBjb25zdCBjaGFyKiBiLCBzaXplX3QgbikgewotICBzaXpl
X3Qgbl9yb3VuZGVkX2Rvd24gPSBuICYgfnN0YXRpY19jYXN0PHNpemVfdD4oNyk7Ci0gIGlmIChH
T09HTEVfUFJFRElDVF9GQUxTRShuX3JvdW5kZWRfZG93biA9PSAwKSkgeyAgLy8gbiA8PSA3Ci0g
ICAgcmV0dXJuIG1lbWNtcChhLCBiLCBuKSA9PSAwOwotICB9Ci0gIC8vIG4gPj0gOAotICB1aW50
NjQgdSA9IEdPT0dMRV9VTkFMSUdORURfTE9BRDY0KGEpIF4gR09PR0xFX1VOQUxJR05FRF9MT0FE
NjQoYik7Ci0gIHVpbnQ2NCB2ID0gR09PR0xFX1VOQUxJR05FRF9MT0FENjQoYSArIG4gLSA4KSBe
IEdPT0dMRV9VTkFMSUdORURfTE9BRDY0KGIgKyBuIC0gOCk7Ci0gIGlmICgodSB8IHYpICE9IDAp
IHsgIC8vIFRoZSBmaXJzdCBvciBsYXN0IDggYnl0ZXMgZGlmZmVyLgotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICBhICs9IDg7Ci0gIGIgKz0gODsKLSAgbiA9IG5fcm91bmRlZF9kb3duIC0gODsK
LSAgaWYgKG4gPiAxMjgpIHsKLSAgICAvLyBBcyBvZiAyMDEyLCBtZW1jbXAgb24geDg2LTY0IHVz
ZXMgYSBiaWcgdW5yb2xsZWQgbG9vcCB3aXRoIFNTRTIKLSAgICAvLyBpbnN0cnVjdGlvbnMsIGFu
ZCB3aGlsZSB3ZSBjb3VsZCB0cnkgdG8gZG8gc29tZXRoaW5nIGZhc3RlciwgaXQKLSAgICAvLyBk
b2Vzbid0IHNlZW0gd29ydGggcHVyc3VpbmcuCi0gICAgcmV0dXJuIG1lbWNtcChhLCBiLCBuKSA9
PSAwOwotICB9Ci0gIGZvciAoOyBuID49IDE2OyBuIC09IDE2KSB7Ci0gICAgdWludDY0IHggPSBH
T09HTEVfVU5BTElHTkVEX0xPQUQ2NChhKSBeIEdPT0dMRV9VTkFMSUdORURfTE9BRDY0KGIpOwot
ICAgIHVpbnQ2NCB5ID0gR09PR0xFX1VOQUxJR05FRF9MT0FENjQoYSArIDgpIF4gR09PR0xFX1VO
QUxJR05FRF9MT0FENjQoYiArIDgpOwotICAgIGlmICgoeCB8IHkpICE9IDApIHsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYSArPSAxNjsKLSAgICBiICs9IDE2OwotICB9Ci0gIC8v
IG4gbXVzdCBiZSAwIG9yIDggbm93IGJlY2F1c2UgaXQgd2FzIGEgbXVsdGlwbGUgb2YgOCBhdCB0
aGUgdG9wIG9mIHRoZSBsb29wLgotICByZXR1cm4gbiA9PSAwIHx8IEdPT0dMRV9VTkFMSUdORURf
TE9BRDY0KGEpID09IEdPT0dMRV9VTkFMSUdORURfTE9BRDY0KGIpOwotfQotCi1pbmxpbmUgaW50
IGZhc3RtZW1jbXBfaW5saW5lZChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBzaXplX3Qg
bikgewotICBpZiAobiA+PSA2NCkgewotICAgIHJldHVybiBtZW1jbXAoYSwgYiwgbik7Ci0gIH0K
LSAgY29uc3QgY2hhciogYV9saW1pdCA9IGEgKyBuOwotICB3aGlsZSAoYSArIHNpemVvZih1aW50
NjQpIDw9IGFfbGltaXQgJiYKLSAgICAgICAgIEdPT0dMRV9VTkFMSUdORURfTE9BRDY0KGEpID09
IEdPT0dMRV9VTkFMSUdORURfTE9BRDY0KGIpKSB7Ci0gICAgYSArPSBzaXplb2YodWludDY0KTsK
LSAgICBiICs9IHNpemVvZih1aW50NjQpOwotICB9Ci0gIGlmIChhICsgc2l6ZW9mKHVpbnQzMikg
PD0gYV9saW1pdCAmJgotICAgICAgR09PR0xFX1VOQUxJR05FRF9MT0FEMzIoYSkgPT0gR09PR0xF
X1VOQUxJR05FRF9MT0FEMzIoYikpIHsKLSAgICBhICs9IHNpemVvZih1aW50MzIpOwotICAgIGIg
Kz0gc2l6ZW9mKHVpbnQzMik7Ci0gIH0KLSAgd2hpbGUgKGEgPCBhX2xpbWl0KSB7Ci0gICAgaW50
IGQgPSBzdGF0aWNfY2FzdDx1aW50MzI+KCphKyspIC0gc3RhdGljX2Nhc3Q8dWludDMyPigqYisr
KTsKLSAgICBpZiAoZCkgcmV0dXJuIGQ7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRoZSBz
dGFuZGFyZCBtZW1jcHkgb3BlcmF0aW9uIGlzIHNsb3cgZm9yIHZhcmlhYmxlIHNtYWxsIHNpemVz
LgotLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpbmxpbmVzIHRoZSBvcHRpbWFsIHJlYWxpemF0aW9u
IGZvciBzaXplcyAxIHRvIDE2LgotLy8gVG8gYXZvaWQgY29kZSBibG9hdCBkb24ndCB1c2UgaXQg
aW4gY2FzZSBvZiBub3QgcGVyZm9ybWFuY2UtY3JpdGljYWwgc3BvdHMsCi0vLyBub3Igd2hlbiB5
b3UgZG9uJ3QgZXhwZWN0IHZlcnkgZnJlcXVlbnQgdmFsdWVzIG9mIHNpemUgPD0gMTYuCi1pbmxp
bmUgdm9pZCBtZW1jcHlfaW5saW5lZChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90
IHNpemUpIHsKLSAgLy8gQ29tcGlsZXIgaW5saW5lcyBjb2RlIHdpdGggbWluaW1hbCBhbW91bnQg
b2YgZGF0YSBtb3ZlbWVudCB3aGVuIHRoaXJkCi0gIC8vIHBhcmFtZXRlciBvZiBtZW1jcHkgaXMg
YSBjb25zdGFudC4KLSAgc3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSAgMTogbWVtY3B5KGRzdCwg
c3JjLCAxKTsgYnJlYWs7Ci0gICAgY2FzZSAgMjogbWVtY3B5KGRzdCwgc3JjLCAyKTsgYnJlYWs7
Ci0gICAgY2FzZSAgMzogbWVtY3B5KGRzdCwgc3JjLCAzKTsgYnJlYWs7Ci0gICAgY2FzZSAgNDog
bWVtY3B5KGRzdCwgc3JjLCA0KTsgYnJlYWs7Ci0gICAgY2FzZSAgNTogbWVtY3B5KGRzdCwgc3Jj
LCA1KTsgYnJlYWs7Ci0gICAgY2FzZSAgNjogbWVtY3B5KGRzdCwgc3JjLCA2KTsgYnJlYWs7Ci0g
ICAgY2FzZSAgNzogbWVtY3B5KGRzdCwgc3JjLCA3KTsgYnJlYWs7Ci0gICAgY2FzZSAgODogbWVt
Y3B5KGRzdCwgc3JjLCA4KTsgYnJlYWs7Ci0gICAgY2FzZSAgOTogbWVtY3B5KGRzdCwgc3JjLCA5
KTsgYnJlYWs7Ci0gICAgY2FzZSAxMDogbWVtY3B5KGRzdCwgc3JjLCAxMCk7IGJyZWFrOwotICAg
IGNhc2UgMTE6IG1lbWNweShkc3QsIHNyYywgMTEpOyBicmVhazsKLSAgICBjYXNlIDEyOiBtZW1j
cHkoZHN0LCBzcmMsIDEyKTsgYnJlYWs7Ci0gICAgY2FzZSAxMzogbWVtY3B5KGRzdCwgc3JjLCAx
Myk7IGJyZWFrOwotICAgIGNhc2UgMTQ6IG1lbWNweShkc3QsIHNyYywgMTQpOyBicmVhazsKLSAg
ICBjYXNlIDE1OiBtZW1jcHkoZHN0LCBzcmMsIDE1KTsgYnJlYWs7Ci0gICAgY2FzZSAxNjogbWVt
Y3B5KGRzdCwgc3JjLCAxNik7IGJyZWFrOwotICAgIGRlZmF1bHQ6IG1lbWNweShkc3QsIHNyYywg
c2l6ZSk7IGJyZWFrOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8g
bmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8g
R09PR0xFX1BST1RPQlVGX1NUVUJTX0ZBU1RNRU1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9zdHVicy9oYXNoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWFjN2Q1ZDI1ODRjZDc1ZGQyNDJhZDA5N2Rm
MmQzYWYwZThjOTQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
MzggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhv
cjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vCi0vLyBEZWFscyB3aXRoIHRo
ZSBmYWN0IHRoYXQgaGFzaF9tYXAgaXMgbm90IGRlZmluZWQgZXZlcnl3aGVyZS4KLQotI2lmbmRl
ZiBHT09HTEVfUFJPVE9CVUZfU1RVQlNfSEFTSF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVG
X1NUVUJTX0hBU0hfSF9fCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0hBVkVf
SEFTSF9NQVAgMQotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFWRV9IQVNIX1NFVCAxCi0KLS8v
IEFuZHJvaWQKLSNpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQotIyB1bmRlZiBHT09HTEVfUFJPVE9C
VUZfSEFWRV9IQVNIX01BUAotIyB1bmRlZiBHT09HTEVfUFJPVE9CVUZfSEFWRV9IQVNIX01BUAot
Ci0vLyBVc2UgQysrMTEgdW5vcmRlcmVkX3ttYXB8c2V0fSBpZiBhdmFpbGFibGUuCi0jZWxpZiAo
KF9MSUJDUFBfU1REX1ZFUiA+PSAxMSkgfHwgXAotICAgICAgKCgoX19jcGx1c3BsdXMgPj0gMjAx
MTAzTCkgfHwgZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFgpKSAmJiBcCi0gICAgICAo
X19HTElCQ1hYX18gPiAyMDA5MDQyMSkpKQotIyBkZWZpbmUgR09PR0xFX1BST1RPQlVGX0hBU19D
WFgxMV9IQVNICi0KLS8vIEZvciBYQ29kZSA+PSA0LjY6ICB0aGUgY29tcGlsZXIgaXMgY2xhbmcg
d2l0aCBsaWJjKysuCi0vLyBGb3IgZWFybGllciBYQ29kZSB2ZXJzaW9uOiB0aGUgY29tcGlsZXIg
aXMgZ2NjLTQuMi4xIHdpdGggbGlic3RkYysrLgotLy8gbGliYysrIHByb3ZpZGVzIDx1bm9yZGVy
ZWRfbWFwPiBhbmQgZnJpZW5kcyBldmVuIGluIG5vbiBDKysxMSBtb2RlLAotLy8gYW5kIGl0IGRv
ZXMgbm90IHByb3ZpZGUgdGhlIHRyMSBsaWJyYXJ5LiBUaGVyZWZvcmUgdGhlIGZvbGxvd2luZyBt
YWNybwotLy8gY2hlY2tzIGFnYWluc3QgdGhpcyBzcGVjaWFsIGNhc2UuCi0vLyBOb3RlIHRoYXQg
d2Ugc2hvdWxkIG5vdCB0ZXN0IHRoZSBfX0FQUExFX0NDX18gdmVyc2lvbiBudW1iZXIgb3IgdGhl
Ci0vLyBfX2NsYW5nX18gbWFjcm8sIHNpbmNlIHRoZSBuZXcgY29tcGlsZXIgY2FuIHN0aWxsIHVz
ZSAtc3RkbGliPWxpYnN0ZGMrKywgaW4KLS8vIHdoaWNoIGNhc2UgPHVub3JkZXJlZF9tYXA+IGlz
IG5vdCBjb21waWxhYmxlIHdpdGhvdXQgLXN0ZD1jKysxMQotI2VsaWYgZGVmaW5lZChfX0FQUExF
X0NDX18pCi0jIGlmIF9fR05VQ19fID49IDQKLSMgIGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFT
X1RSMQotIyBlbHNlCi0vLyBOb3QgdGVzdGVkIGZvciBnY2MgPCA0Li4uIFRoZXNlIHNldHRpbmcg
Y2FuIGNvbXBpbGUgdW5kZXIgNC4yLjEgdGhvdWdoLgotIyAgZGVmaW5lIEdPT0dMRV9QUk9UT0JV
Rl9IQVNIX05BTUVTUEFDRSBfX2dudV9jeHgKLSMgIGluY2x1ZGUgPGV4dC9oYXNoX21hcD4KLSMg
IGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFTSF9NQVBfQ0xBU1MgaGFzaF9tYXAKLSMgIGluY2x1
ZGUgPGV4dC9oYXNoX3NldD4KLSMgIGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFTSF9TRVRfQ0xB
U1MgaGFzaF9zZXQKLSMgZW5kaWYKLQotLy8gVmVyc2lvbiBjaGVja3MgZm9yIGdjYy4KLSNlbGlm
IGRlZmluZWQoX19HTlVDX18pCi0vLyBGb3IgR0NDIDQueCssIHVzZSB0cjE6OnVub3JkZXJlZF9t
YXAvc2V0OyBvdGhlcndpc2UsIGZvbGxvdyB0aGUKLS8vIGluc3RydWN0aW9ucyBmcm9tOgotLy8g
aHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmFja3dhcmRz
Lmh0bWwKLSMgaWYgX19HTlVDX18gPj0gNAotIyAgZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9IQVNf
VFIxCi0jIGVsaWYgX19HTlVDX18gPj0gMwotIyAgaW5jbHVkZSA8YmFja3dhcmQvaGFzaF9tYXA+
Ci0jICBkZWZpbmUgR09PR0xFX1BST1RPQlVGX0hBU0hfTUFQX0NMQVNTIGhhc2hfbWFwCi0jICBp
bmNsdWRlIDxiYWNrd2FyZC9oYXNoX3NldD4KLSMgIGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFT
SF9TRVRfQ0xBU1MgaGFzaF9zZXQKLSMgIGlmIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9S
X18gPT0gMAotIyAgIGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFTSF9OQU1FU1BBQ0Ugc3RkICAg
ICAgIC8vIEdDQyAzLjAKLSMgIGVsc2UKLSMgICBkZWZpbmUgR09PR0xFX1BST1RPQlVGX0hBU0hf
TkFNRVNQQUNFIF9fZ251X2N4eCAvLyBHQ0MgMy4xIGFuZCBsYXRlcgotIyAgZW5kaWYKLSMgZWxz
ZQotIyAgZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9IQVNIX05BTUVTUEFDRQotIyAgaW5jbHVkZSA8
aGFzaF9tYXA+Ci0jICBkZWZpbmUgR09PR0xFX1BST1RPQlVGX0hBU0hfTUFQX0NMQVNTIGhhc2hf
bWFwCi0jICBpbmNsdWRlIDxoYXNoX3NldD4KLSMgIGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFT
SF9TRVRfQ0xBU1MgaGFzaF9zZXQKLSMgZW5kaWYKLQotLy8gVmVyc2lvbiBjaGVja3MgZm9yIE1T
Qy4KLS8vIEFwcGFyZW50bHkgTWljcm9zb2Z0IGRlY2lkZWQgdG8gbW92ZSBoYXNoX21hcCAqYmFj
ayogdG8gdGhlIHN0ZCBuYW1lc3BhY2UgaW4KLS8vIE1TVkMgMjAxMDoKLS8vIGh0dHA6Ly9ibG9n
cy5tc2RuLmNvbS92Y2Jsb2cvYXJjaGl2ZS8yMDA5LzA1LzI1L3N0bC1icmVha2luZy1jaGFuZ2Vz
LWluLXZpc3VhbC1zdHVkaW8tMjAxMC1iZXRhLTEuYXNweAotLy8gQW5kLi4gdGhleSBhcmUgbW92
ZWQgYmFjayB0byBzdGRleHQgaW4gTVNWQyAyMDEzIChoYXZlbid0IGNoZWNrZWQgMjAxMikuIFRo
YXQKLS8vIHNhaWQsIHVzZSB1bm9yZGVyZWRfbWFwIGZvciBNU1ZDIDIwMTAgYW5kIGJleW9uZCBp
cyBvdXIgc2FmZXN0IGJldC4KLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jIGlmIF9NU0NfVkVS
ID49IDE2MDAgIC8vIFNpbmNlIFZpc3VhbCBTdHVkaW8gMjAxMAotIyAgZGVmaW5lIEdPT0dMRV9Q
Uk9UT0JVRl9IQVNfQ1hYMTFfSEFTSAotIyAgZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9IQVNIX0NP
TVBBUkUgc3RkOjpoYXNoX2NvbXBhcmUKLSMgZWxpZiBfTVNDX1ZFUiA+PSAxNTAwICAvLyBTaW5j
ZSBWaXN1YWwgU3R1ZGlvIDIwMDgKLSMgIGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFTSF9OQU1F
U1BBQ0Ugc3RkZXh0Ci0jICBpbmNsdWRlIDxoYXNoX21hcD4KLSMgIGRlZmluZSBHT09HTEVfUFJP
VE9CVUZfSEFTSF9NQVBfQ0xBU1MgaGFzaF9tYXAKLSMgIGluY2x1ZGUgPGhhc2hfc2V0PgotIyAg
ZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9IQVNIX1NFVF9DTEFTUyBoYXNoX3NldAotIyAgZGVmaW5l
IEdPT0dMRV9QUk9UT0JVRl9IQVNIX0NPTVBBUkUgc3RkZXh0OjpoYXNoX2NvbXBhcmUKLSMgIGRl
ZmluZSBHT09HTEVfUFJPVE9CVUZfQ09OVEFJTkVSU19ORUVEX0hBU0hfQ09NUEFSRQotIyBlbGlm
IF9NU0NfVkVSID49IDEzMTAKLSMgIGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFTSF9OQU1FU1BB
Q0Ugc3RkZXh0Ci0jICBpbmNsdWRlIDxoYXNoX21hcD4KLSMgIGRlZmluZSBHT09HTEVfUFJPVE9C
VUZfSEFTSF9NQVBfQ0xBU1MgaGFzaF9tYXAKLSMgIGluY2x1ZGUgPGhhc2hfc2V0PgotIyAgZGVm
aW5lIEdPT0dMRV9QUk9UT0JVRl9IQVNIX1NFVF9DTEFTUyBoYXNoX3NldAotIyAgZGVmaW5lIEdP
T0dMRV9QUk9UT0JVRl9IQVNIX0NPTVBBUkUgc3RkZXh0OjpoYXNoX2NvbXBhcmUKLSMgZWxzZQot
IyAgZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9IQVNIX05BTUVTUEFDRSBzdGQKLSMgIGluY2x1ZGUg
PGhhc2hfbWFwPgotIyAgZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9IQVNIX01BUF9DTEFTUyBoYXNo
X21hcAotIyAgaW5jbHVkZSA8aGFzaF9zZXQ+Ci0jICBkZWZpbmUgR09PR0xFX1BST1RPQlVGX0hB
U0hfU0VUX0NMQVNTIGhhc2hfc2V0Ci0jICBkZWZpbmUgR09PR0xFX1BST1RPQlVGX0hBU0hfQ09N
UEFSRSBzdGRleHQ6Omhhc2hfY29tcGFyZQotIyBlbmRpZgotCi0vLyAqKkFERCBORVcgQ09NUElM
RVJTIFNVUFBPUlQgSEVSRS4qKgotLy8gRm9yIG90aGVyIGNvbXBpbGVycywgdW5kZWZpbmUgdGhl
IG1hY3JvIGFuZCBmYWxsYmFjayB0byB1c2Ugc3RkOjptYXAsIGluCi0vLyBnb29nbGUvcHJvdG9i
dWYvc3R1YnMvaGFzaC5oCi0jZWxzZQotIyB1bmRlZiBHT09HTEVfUFJPVE9CVUZfSEFWRV9IQVNI
X01BUAotIyB1bmRlZiBHT09HTEVfUFJPVE9CVUZfSEFWRV9IQVNIX1NFVAotI2VuZGlmCi0KLSNp
ZiBkZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9IQVNfQ1hYMTFfSEFTSCkKLSMgZGVmaW5lIEdPT0dM
RV9QUk9UT0JVRl9IQVNIX05BTUVTUEFDRSBzdGQKLSMgaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4K
LSMgZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9IQVNIX01BUF9DTEFTUyB1bm9yZGVyZWRfbWFwCi0j
IGluY2x1ZGUgPHVub3JkZXJlZF9zZXQ+Ci0jIGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFTSF9T
RVRfQ0xBU1MgdW5vcmRlcmVkX3NldAotI2VsaWYgZGVmaW5lZChHT09HTEVfUFJPVE9CVUZfSEFT
X1RSMSkKLSMgZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9IQVNIX05BTUVTUEFDRSBzdGQ6OnRyMQot
IyBpbmNsdWRlIDx0cjEvdW5vcmRlcmVkX21hcD4KLSMgZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9I
QVNIX01BUF9DTEFTUyB1bm9yZGVyZWRfbWFwCi0jIGluY2x1ZGUgPHRyMS91bm9yZGVyZWRfc2V0
PgotIyBkZWZpbmUgR09PR0xFX1BST1RPQlVGX0hBU0hfU0VUX0NMQVNTIHVub3JkZXJlZF9zZXQK
LSNlbmRpZgotCi0jIGRlZmluZSBHT09HTEVfUFJPVE9CVUZfSEFTSF9OQU1FU1BBQ0VfREVDTEFS
QVRJT05fU1RBUlQgXAotICBuYW1lc3BhY2UgZ29vZ2xlIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgbmFtZXNwYWNlIHByb3RvYnVmIHsKLSMgZGVmaW5lIEdPT0dM
RV9QUk9UT0JVRl9IQVNIX05BTUVTUEFDRV9ERUNMQVJBVElPTl9FTkQgfX0KLQotI3VuZGVmIEdP
T0dMRV9QUk9UT0JVRl9IQVNfQ1hYMTFfSEFTSAotI3VuZGVmIEdPT0dMRV9QUk9UT0JVRl9IQVNf
VFIxCi0KLSNpZiBkZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9IQVZFX0hBU0hfTUFQKSAmJiBcCi0g
ICAgZGVmaW5lZChHT09HTEVfUFJPVE9CVUZfSEFWRV9IQVNIX1NFVCkKLSNlbHNlCi0jZGVmaW5l
IEdPT0dMRV9QUk9UT0JVRl9NSVNTSU5HX0hBU0gKLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8
c2V0PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LQotI2lmZGVmIEdPT0dMRV9QUk9UT0JVRl9NSVNTSU5HX0hBU0gKLSN1bmRlZiBHT09HTEVfUFJP
VE9CVUZfTUlTU0lOR19IQVNICi0KLS8vIFRoaXMgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBoYXNoX21h
cCBvciBoYXNoX3NldC4gIEVtdWxhdGUgdGhlbSB1c2luZyBtYXAgYW5kCi0vLyBzZXQuCi0KLS8v
IE1ha2UgaGFzaDxUPiBiZSB0aGUgc2FtZSBhcyBsZXNzPFQ+LiAgTm90ZSB0aGF0IGV2ZXJ5d2hl
cmUgd2hlcmUgY3VzdG9tCi0vLyBoYXNoIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgcHJv
dG9idWYgY29kZSwgdGhleSBhcmUgYWxzbyBkZWZpbmVkIHN1Y2gKLS8vIHRoYXQgdGhleSBjYW4g
YmUgdXNlZCBhcyAibGVzcyIgZnVuY3Rpb25zLCB3aGljaCBpcyByZXF1aXJlZCBieSBNU1ZDIGFu
eXdheS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXk+Ci1zdHJ1Y3QgaGFzaCB7Ci0gIC8vIER1bW15
LCBqdXN0IHRvIG1ha2UgZGVyaXZhdGl2ZSBoYXNoIGZ1bmN0aW9ucyBjb21waWxlLgotICBpbnQg
b3BlcmF0b3IoKShjb25zdCBLZXkmIGtleSkgewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJT
aG91bGQgbmV2ZXIgYmUgY2FsbGVkLiI7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbmxpbmUg
Ym9vbCBvcGVyYXRvcigpKGNvbnN0IEtleSYgYSwgY29uc3QgS2V5JiBiKSBjb25zdCB7Ci0gICAg
cmV0dXJuIGEgPCBiOwotICB9Ci19OwotCi0vLyBNYWtlIHN1cmUgY2hhciogaXMgY29tcGFyZWQg
YnkgdmFsdWUuCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8Y29uc3QgY2hhcio+IHsKLSAgLy8g
RHVtbXksIGp1c3QgdG8gbWFrZSBkZXJpdmF0aXZlIGhhc2ggZnVuY3Rpb25zIGNvbXBpbGUuCi0g
IGludCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIGtleSkgewotICAgIEdPT0dMRV9MT0coRkFUQUwp
IDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiI7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBp
bmxpbmUgYm9vbCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpIGNvbnN0
IHsKLSAgICByZXR1cm4gc3RyY21wKGEsIGIpIDwgMDsKLSAgfQotfTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgRGF0YSwKLSAgICAgICAgICB0eXBlbmFtZSBIYXNoRmNuID0g
aGFzaDxLZXk+LAotICAgICAgICAgIHR5cGVuYW1lIEVxdWFsS2V5ID0gc3RkOjplcXVhbF90bzxL
ZXk+LAotICAgICAgICAgIHR5cGVuYW1lIEFsbG9jID0gc3RkOjphbGxvY2F0b3I8IHN0ZDo6cGFp
cjxjb25zdCBLZXksIERhdGE+ID4gPgotY2xhc3MgaGFzaF9tYXAgOiBwdWJsaWMgc3RkOjptYXA8
S2V5LCBEYXRhLCBIYXNoRmNuLCBBbGxvYz4gewotICB0eXBlZGVmIHN0ZDo6bWFwPEtleSwgRGF0
YSwgSGFzaEZjbiwgQWxsb2M+IEJhc2VDbGFzczsKLQotIHB1YmxpYzoKLSAgaGFzaF9tYXAoaW50
IGEgPSAwLCBjb25zdCBIYXNoRmNuJiBiID0gSGFzaEZjbigpLAotICAgICAgICAgICBjb25zdCBF
cXVhbEtleSYgYyA9IEVxdWFsS2V5KCksCi0gICAgICAgICAgIGNvbnN0IEFsbG9jJiBkID0gQWxs
b2MoKSkgOiBCYXNlQ2xhc3MoYiwgZCkge30KLQotICBIYXNoRmNuIGhhc2hfZnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBIYXNoRmNuKCk7IH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXks
Ci0gICAgICAgICAgdHlwZW5hbWUgSGFzaEZjbiA9IGhhc2g8S2V5PiwKLSAgICAgICAgICB0eXBl
bmFtZSBFcXVhbEtleSA9IHN0ZDo6ZXF1YWxfdG88S2V5PiA+Ci1jbGFzcyBoYXNoX3NldCA6IHB1
YmxpYyBzdGQ6OnNldDxLZXksIEhhc2hGY24+IHsKLSBwdWJsaWM6Ci0gIGhhc2hfc2V0KGludCA9
IDApIHt9Ci0KLSAgSGFzaEZjbiBoYXNoX2Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gSGFzaEZj
bigpOyB9Ci19OwotCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfU1RMUE9S
VF9WRVJTSU9OKQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5Pgotc3RydWN0IGhhc2ggOiBwdWJs
aWMgR09PR0xFX1BST1RPQlVGX0hBU0hfQ09NUEFSRTxLZXk+IHsKLX07Ci0KLS8vIE1TVkMncyBo
YXNoX2NvbXBhcmU8Y29uc3QgY2hhcio+IGhhc2hlcyBiYXNlZCBvbiB0aGUgc3RyaW5nIGNvbnRl
bnRzIGJ1dAotLy8gY29tcGFyZXMgYmFzZWQgb24gdGhlIHN0cmluZyBwb2ludGVyLiAgV1RGPwot
Y2xhc3MgQ3N0cmluZ0xlc3MgewotIHB1YmxpYzoKLSAgaW5saW5lIGJvb2wgb3BlcmF0b3IoKShj
b25zdCBjaGFyKiBhLCBjb25zdCBjaGFyKiBiKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0cmNtcChh
LCBiKSA8IDA7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDxjb25zdCBjaGFy
Kj4KLSAgICA6IHB1YmxpYyBHT09HTEVfUFJPVE9CVUZfSEFTSF9DT01QQVJFPGNvbnN0IGNoYXIq
LCBDc3RyaW5nTGVzcz4ge307Ci0KLSNpZmRlZiBHT09HTEVfUFJPVE9CVUZfQ09OVEFJTkVSU19O
RUVEX0hBU0hfQ09NUEFSRQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBIYXNo
RmNuLCB0eXBlbmFtZSBFcXVhbEtleT4KLXN0cnVjdCBJbnRlcm5hbEhhc2hDb21wYXJlIDogcHVi
bGljIEdPT0dMRV9QUk9UT0JVRl9IQVNIX0NPTVBBUkU8S2V5PiB7Ci0gIEludGVybmFsSGFzaENv
bXBhcmUoKSB7fQotICBJbnRlcm5hbEhhc2hDb21wYXJlKEhhc2hGY24gaGFzaGZjbiwgRXF1YWxL
ZXkgZXF1YWxrZXkpCi0gICAgICA6IGhhc2hmY25fKGhhc2hmY24pLCBlcXVhbGtleV8oZXF1YWxr
ZXkpIHt9Ci0gIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IEtleSYga2V5KSBjb25zdCB7IHJldHVy
biBoYXNoZmNuXyhrZXkpOyB9Ci0gIGJvb2wgb3BlcmF0b3IoKShjb25zdCBLZXkmIGtleTEsIGNv
bnN0IEtleSYga2V5MikgY29uc3QgewotICAgIHJldHVybiAhZXF1YWxrZXlfKGtleTEsIGtleTIp
OwotICB9Ci0gIEhhc2hGY24gaGFzaGZjbl87Ci0gIEVxdWFsS2V5IGVxdWFsa2V5XzsKLX07Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIERhdGEsCi0gICAgICAgICAgdHlwZW5h
bWUgSGFzaEZjbiA9IGhhc2g8S2V5PiwKLSAgICAgICAgICB0eXBlbmFtZSBFcXVhbEtleSA9IHN0
ZDo6ZXF1YWxfdG88S2V5PiwKLSAgICAgICAgICB0eXBlbmFtZSBBbGxvYyA9IHN0ZDo6YWxsb2Nh
dG9yPCBzdGQ6OnBhaXI8Y29uc3QgS2V5LCBEYXRhPiA+ID4KLWNsYXNzIGhhc2hfbWFwCi0gICAg
OiBwdWJsaWMgR09PR0xFX1BST1RPQlVGX0hBU0hfTkFNRVNQQUNFOjpHT09HTEVfUFJPVE9CVUZf
SEFTSF9NQVBfQ0xBU1M8Ci0gICAgICAgICAgS2V5LCBEYXRhLCBJbnRlcm5hbEhhc2hDb21wYXJl
PEtleSwgSGFzaEZjbiwgRXF1YWxLZXk+LCBBbGxvYz4gewotICB0eXBlZGVmIEdPT0dMRV9QUk9U
T0JVRl9IQVNIX05BTUVTUEFDRTo6R09PR0xFX1BST1RPQlVGX0hBU0hfTUFQX0NMQVNTPAotICAg
ICAgS2V5LCBEYXRhLCBJbnRlcm5hbEhhc2hDb21wYXJlPEtleSwgSGFzaEZjbiwgRXF1YWxLZXk+
LCBBbGxvYz4gQmFzZUNsYXNzOwotCi0gcHVibGljOgotICBoYXNoX21hcChpbnQgYSA9IDAsIGNv
bnN0IEhhc2hGY24mIGIgPSBIYXNoRmNuKCksCi0gICAgICAgICAgIGNvbnN0IEVxdWFsS2V5JiBj
ID0gRXF1YWxLZXkoKSwgY29uc3QgQWxsb2MmIGQgPSBBbGxvYygpKQotICAgICAgOiBCYXNlQ2xh
c3MoSW50ZXJuYWxIYXNoQ29tcGFyZTxLZXksIEhhc2hGY24sIEVxdWFsS2V5PihiLCBjKSwgZCkg
e30KLQotICBIYXNoRmNuIGhhc2hfZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBIYXNoRmNuKCk7
IH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEhhc2hGY24gPSBoYXNo
PEtleT4sCi0gICAgICAgICAgdHlwZW5hbWUgRXF1YWxLZXkgPSBzdGQ6OmVxdWFsX3RvPEtleT4g
PgotY2xhc3MgaGFzaF9zZXQKLSAgICA6IHB1YmxpYyBHT09HTEVfUFJPVE9CVUZfSEFTSF9OQU1F
U1BBQ0U6OkdPT0dMRV9QUk9UT0JVRl9IQVNIX1NFVF9DTEFTUzwKLSAgICAgICAgICBLZXksIElu
dGVybmFsSGFzaENvbXBhcmU8S2V5LCBIYXNoRmNuLCBFcXVhbEtleT4gPiB7Ci0gcHVibGljOgot
ICBoYXNoX3NldChpbnQgPSAwKSB7fQotCi0gIEhhc2hGY24gaGFzaF9mdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIEhhc2hGY24oKTsgfQotfTsKLQotI2Vsc2UgIC8vIEdPT0dMRV9QUk9UT0JVRl9D
T05UQUlORVJTX05FRURfSEFTSF9DT01QQVJFCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIERhdGEsCi0gICAgICAgICAgdHlwZW5hbWUgSGFzaEZjbiA9IGhhc2g8S2V5PiwKLSAg
ICAgICAgICB0eXBlbmFtZSBFcXVhbEtleSA9IHN0ZDo6ZXF1YWxfdG88S2V5PiwKLSAgICAgICAg
ICB0eXBlbmFtZSBBbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPCBzdGQ6OnBhaXI8Y29uc3QgS2V5LCBE
YXRhPiA+ID4KLWNsYXNzIGhhc2hfbWFwCi0gICAgOiBwdWJsaWMgR09PR0xFX1BST1RPQlVGX0hB
U0hfTkFNRVNQQUNFOjpHT09HTEVfUFJPVE9CVUZfSEFTSF9NQVBfQ0xBU1M8Ci0gICAgICAgICAg
S2V5LCBEYXRhLCBIYXNoRmNuLCBFcXVhbEtleSwgQWxsb2M+IHsKLSAgdHlwZWRlZiBHT09HTEVf
UFJPVE9CVUZfSEFTSF9OQU1FU1BBQ0U6OkdPT0dMRV9QUk9UT0JVRl9IQVNIX01BUF9DTEFTUzwK
LSAgICAgIEtleSwgRGF0YSwgSGFzaEZjbiwgRXF1YWxLZXksIEFsbG9jPiBCYXNlQ2xhc3M7Ci0K
LSBwdWJsaWM6Ci0gIGhhc2hfbWFwKGludCBhID0gMCwgY29uc3QgSGFzaEZjbiYgYiA9IEhhc2hG
Y24oKSwKLSAgICAgICAgICAgY29uc3QgRXF1YWxLZXkmIGMgPSBFcXVhbEtleSgpLAotICAgICAg
ICAgICBjb25zdCBBbGxvYyYgZCA9IEFsbG9jKCkpIDogQmFzZUNsYXNzKGEsIGIsIGMsIGQpIHt9
Ci0KLSAgSGFzaEZjbiBoYXNoX2Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gSGFzaEZjbigpOyB9
Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBIYXNoRmNuID0gaGFzaDxL
ZXk+LAotICAgICAgICAgIHR5cGVuYW1lIEVxdWFsS2V5ID0gc3RkOjplcXVhbF90bzxLZXk+ID4K
LWNsYXNzIGhhc2hfc2V0Ci0gICAgOiBwdWJsaWMgR09PR0xFX1BST1RPQlVGX0hBU0hfTkFNRVNQ
QUNFOjpHT09HTEVfUFJPVE9CVUZfSEFTSF9TRVRfQ0xBU1M8Ci0gICAgICAgICAgS2V5LCBIYXNo
RmNuLCBFcXVhbEtleT4gewotIHB1YmxpYzoKLSAgaGFzaF9zZXQoaW50ID0gMCkge30KLQotICBI
YXNoRmNuIGhhc2hfZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBIYXNoRmNuKCk7IH0KLX07Ci0j
ZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9DT05UQUlORVJTX05FRURfSEFTSF9DT01QQVJFCi0K
LSNlbHNlICAvLyBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfU1RMUE9SVF9WRVJTSU9O
KQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5Pgotc3RydWN0IGhhc2ggOiBwdWJsaWMgR09PR0xF
X1BST1RPQlVGX0hBU0hfTkFNRVNQQUNFOjpoYXNoPEtleT4gewotfTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEtleT4KLXN0cnVjdCBoYXNoPGNvbnN0IEtleSo+IHsKLSAgaW5saW5lIHNpemVfdCBv
cGVyYXRvcigpKGNvbnN0IEtleSoga2V5KSBjb25zdCB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8c2l6ZV90PihrZXkpOwotICB9Ci19OwotCi0vLyBVbmxpa2UgdGhlIG9sZCBTR0kgdmVy
c2lvbiwgdGhlIFRSMSAiaGFzaCIgZG9lcyBub3Qgc3BlY2lhbC1jYXNlIGNoYXIqLiAgU28sCi0v
LyB3ZSBnbyBhaGVhZCBhbmQgcHJvdmlkZSBvdXIgb3duIGltcGxlbWVudGF0aW9uLgotdGVtcGxh
dGUgPD4KLXN0cnVjdCBoYXNoPGNvbnN0IGNoYXIqPiB7Ci0gIGlubGluZSBzaXplX3Qgb3BlcmF0
b3IoKShjb25zdCBjaGFyKiBzdHIpIGNvbnN0IHsKLSAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAg
ICBmb3IgKDsgKnN0ciAhPSAnXDAnOyBzdHIrKykgewotICAgICAgcmVzdWx0ID0gNSAqIHJlc3Vs
dCArICpzdHI7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX07Ci0KLXRlbXBsYXRl
PD4KLXN0cnVjdCBoYXNoPGJvb2w+IHsKLSAgc2l6ZV90IG9wZXJhdG9yKCkoYm9vbCB4KSBjb25z
dCB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oeCk7Ci0gIH0KLX07Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIERhdGEsCi0gICAgICAgICAgdHlwZW5hbWUgSGFz
aEZjbiA9IGhhc2g8S2V5PiwKLSAgICAgICAgICB0eXBlbmFtZSBFcXVhbEtleSA9IHN0ZDo6ZXF1
YWxfdG88S2V5PiwKLSAgICAgICAgICB0eXBlbmFtZSBBbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPCBz
dGQ6OnBhaXI8Y29uc3QgS2V5LCBEYXRhPiA+ID4KLWNsYXNzIGhhc2hfbWFwCi0gICAgOiBwdWJs
aWMgR09PR0xFX1BST1RPQlVGX0hBU0hfTkFNRVNQQUNFOjpHT09HTEVfUFJPVE9CVUZfSEFTSF9N
QVBfQ0xBU1M8Ci0gICAgICAgICAgS2V5LCBEYXRhLCBIYXNoRmNuLCBFcXVhbEtleSwgQWxsb2M+
IHsKLSAgdHlwZWRlZiBHT09HTEVfUFJPVE9CVUZfSEFTSF9OQU1FU1BBQ0U6OkdPT0dMRV9QUk9U
T0JVRl9IQVNIX01BUF9DTEFTUzwKLSAgICAgIEtleSwgRGF0YSwgSGFzaEZjbiwgRXF1YWxLZXks
IEFsbG9jPiBCYXNlQ2xhc3M7Ci0KLSBwdWJsaWM6Ci0gIGhhc2hfbWFwKGludCBhID0gMCwgY29u
c3QgSGFzaEZjbiYgYiA9IEhhc2hGY24oKSwKLSAgICAgICAgICAgY29uc3QgRXF1YWxLZXkmIGMg
PSBFcXVhbEtleSgpLAotICAgICAgICAgICBjb25zdCBBbGxvYyYgZCA9IEFsbG9jKCkpIDogQmFz
ZUNsYXNzKGEsIGIsIGMsIGQpIHt9Ci0KLSAgSGFzaEZjbiBoYXNoX2Z1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gSGFzaEZjbigpOyB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBIYXNoRmNuID0gaGFzaDxLZXk+LAotICAgICAgICAgIHR5cGVuYW1lIEVxdWFsS2V5ID0g
c3RkOjplcXVhbF90bzxLZXk+ID4KLWNsYXNzIGhhc2hfc2V0Ci0gICAgOiBwdWJsaWMgR09PR0xF
X1BST1RPQlVGX0hBU0hfTkFNRVNQQUNFOjpHT09HTEVfUFJPVE9CVUZfSEFTSF9TRVRfQ0xBU1M8
Ci0gICAgICAgICAgS2V5LCBIYXNoRmNuLCBFcXVhbEtleT4gewotIHB1YmxpYzoKLSAgaGFzaF9z
ZXQoaW50ID0gMCkge30KLQotICBIYXNoRmNuIGhhc2hfZnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBIYXNoRmNuKCk7IH0KLX07Ci0KLSNlbmRpZiAgLy8gIUdPT0dMRV9QUk9UT0JVRl9NSVNTSU5H
X0hBU0gKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPHN0cmluZz4gewotICBpbmxpbmUgc2l6
ZV90IG9wZXJhdG9yKCkoY29uc3Qgc3RyaW5nJiBrZXkpIGNvbnN0IHsKLSAgICByZXR1cm4gaGFz
aDxjb25zdCBjaGFyKj4oKShrZXkuY19zdHIoKSk7Ci0gIH0KLQotICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGJ1Y2tldF9zaXplID0gNDsKLSAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5fYnVja2V0cyA9
IDg7Ci0gIGlubGluZSBib29sIG9wZXJhdG9yKCkoY29uc3Qgc3RyaW5nJiBhLCBjb25zdCBzdHJp
bmcmIGIpIGNvbnN0IHsKLSAgICByZXR1cm4gYSA8IGI7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBGaXJzdCwgdHlwZW5hbWUgU2Vjb25kPgotc3RydWN0IGhhc2g8cGFpcjxGaXJzdCwg
U2Vjb25kPiA+IHsKLSAgaW5saW5lIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IHBhaXI8Rmlyc3Qs
IFNlY29uZD4mIGtleSkgY29uc3QgewotICAgIHNpemVfdCBmaXJzdF9oYXNoID0gaGFzaDxGaXJz
dD4oKShrZXkuZmlyc3QpOwotICAgIHNpemVfdCBzZWNvbmRfaGFzaCA9IGhhc2g8U2Vjb25kPigp
KGtleS5zZWNvbmQpOwotCi0gICAgLy8gRklYTUUoa2VudG9uKTogIFdoYXQgaXMgdGhlIGJlc3Qg
d2F5IHRvIGNvbXB1dGUgdGhpcyBoYXNoPyAgSSBoYXZlCi0gICAgLy8gbm8gaWRlYSEgIFRoaXMg
c2VlbXMgYSBiaXQgYmV0dGVyIHRoYW4gYW4gWE9SLgotICAgIHJldHVybiBmaXJzdF9oYXNoICog
KCgxIDw8IDE2KSAtIDEpICsgc2Vjb25kX2hhc2g7Ci0gIH0KLQotICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGJ1Y2tldF9zaXplID0gNDsKLSAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5fYnVja2V0cyA9
IDg7Ci0gIGlubGluZSBib29sIG9wZXJhdG9yKCkoY29uc3QgcGFpcjxGaXJzdCwgU2Vjb25kPiYg
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhaXI8Rmlyc3QsIFNlY29uZD4m
IGIpIGNvbnN0IHsKLSAgICByZXR1cm4gYSA8IGI7Ci0gIH0KLX07Ci0KLS8vIFVzZWQgYnkgR0ND
L1NHSSBTVEwgb25seS4gIChXaHkgaXNuJ3QgdGhpcyBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQK
LS8vIGxpYnJhcnk/ICA6KCApCi1zdHJ1Y3Qgc3RyZXEgewotICBpbmxpbmUgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpIGNvbnN0IHsKLSAgICByZXR1cm4gc3Ry
Y21wKGEsIGIpID09IDA7Ci0gIH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAg
Ly8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19I
QVNIX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2ludDEyOC5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9pbnQxMjguY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDNhMzZiNGIxMDFjMTAwOGFmZTRlZGEzNjg3ZmFhYzkzYjZmYTc5Y2EuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2ludDEyOC5jYworKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9pbnQxMjguaD4KLQotI2luY2x1ZGUgPGlvbWFuaXA+Ci0jaW5jbHVkZSA8b3N0cmVh
bT4gIC8vIE5PTElOVChyZWFkYWJpbGl0eS9zdHJlYW1zKQotI2luY2x1ZGUgPHNzdHJlYW0+Ci0K
LW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotY29uc3QgdWludDEy
OF9wb2Qga3VpbnQxMjhtYXggPSB7Ci0gICAgc3RhdGljX2Nhc3Q8dWludDY0PihHT09HTEVfTE9O
R0xPTkcoMHhGRkZGRkZGRkZGRkZGRkZGKSksCi0gICAgc3RhdGljX2Nhc3Q8dWludDY0PihHT09H
TEVfTE9OR0xPTkcoMHhGRkZGRkZGRkZGRkZGRkZGKSkKLX07Ci0KLS8vIFJldHVybnMgdGhlIDAt
YmFzZWQgcG9zaXRpb24gb2YgdGhlIGxhc3Qgc2V0IGJpdCAoaS5lLiwgbW9zdCBzaWduaWZpY2Fu
dCBiaXQpCi0vLyBpbiB0aGUgZ2l2ZW4gdWludDY0LiBUaGUgYXJndW1lbnQgbWF5IG5vdCBiZSAw
LgotLy8KLS8vIEZvciBleGFtcGxlOgotLy8gICBHaXZlbjogNSAoZGVjaW1hbCkgPT0gMTAxIChi
aW5hcnkpCi0vLyAgIFJldHVybnM6IDIKLSNkZWZpbmUgU1RFUChULCBuLCBwb3MsIHNoKSAgICAg
ICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIGlmICgobikgPj0gKHN0YXRpY19jYXN0PFQ+KDEpIDw8IChzaCkpKSB7IFwK
LSAgICAgIChuKSA9IChuKSA+PiAoc2gpOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAo
cG9zKSB8PSAoc2gpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLXN0YXRpYyBp
bmxpbmUgaW50IEZsczY0KHVpbnQ2NCBuKSB7Ci0gIEdPT0dMRV9EQ0hFQ0tfTkUoMCwgbik7Ci0g
IGludCBwb3MgPSAwOwotICBTVEVQKHVpbnQ2NCwgbiwgcG9zLCAweDIwKTsKLSAgdWludDMyIG4z
MiA9IG47Ci0gIFNURVAodWludDMyLCBuMzIsIHBvcywgMHgxMCk7Ci0gIFNURVAodWludDMyLCBu
MzIsIHBvcywgMHgwOCk7Ci0gIFNURVAodWludDMyLCBuMzIsIHBvcywgMHgwNCk7Ci0gIHJldHVy
biBwb3MgKyAoKEdPT0dMRV9VTE9OR0xPTkcoMHgzMzMzMzMzMzIyMjIxMTAwKSA+PiAobjMyIDw8
IDIpKSAmIDB4Myk7Ci19Ci0jdW5kZWYgU1RFUAotCi0vLyBMaWtlIEZsczY0KCkgYWJvdmUsIGJ1
dCByZXR1cm5zIHRoZSAwLWJhc2VkIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHNldCBiaXQKLS8vIChp
LmUuLCBtb3N0IHNpZ25pZmljYW50IGJpdCkgaW4gdGhlIGdpdmVuIHVpbnQxMjguIFRoZSBhcmd1
bWVudCBtYXkgbm90IGJlIDAuCi1zdGF0aWMgaW5saW5lIGludCBGbHMxMjgodWludDEyOCBuKSB7
Ci0gIGlmICh1aW50NjQgaGkgPSBVaW50MTI4SGlnaDY0KG4pKSB7Ci0gICAgcmV0dXJuIEZsczY0
KGhpKSArIDY0OwotICB9Ci0gIHJldHVybiBGbHM2NChVaW50MTI4TG93NjQobikpOwotfQotCi0v
LyBMb25nIGRpdmlzaW9uL21vZHVsbyBmb3IgdWludDEyOCBpbXBsZW1lbnRlZCB1c2luZyB0aGUg
c2hpZnQtc3VidHJhY3QKLS8vIGRpdmlzaW9uIGFsZ29yaXRobSBhZGFwdGVkIGZyb206Ci0vLyBo
dHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUzODYzNzcvZGl2aXNpb24td2l0aG91
dC11c2luZwotdm9pZCB1aW50MTI4OjpEaXZNb2RJbXBsKHVpbnQxMjggZGl2aWRlbmQsIHVpbnQx
MjggZGl2aXNvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTI4KiBxdW90aWVudF9y
ZXQsIHVpbnQxMjgqIHJlbWFpbmRlcl9yZXQpIHsKLSAgaWYgKGRpdmlzb3IgPT0gMCkgewotICAg
IEdPT0dMRV9MT0coRkFUQUwpIDw8ICJEaXZpc2lvbiBvciBtb2QgYnkgemVybzogZGl2aWRlbmQu
aGk9IiA8PCBkaXZpZGVuZC5oaV8KLSAgICAgICAgICAgICAgICAgICAgICA8PCAiLCBsbz0iIDw8
IGRpdmlkZW5kLmxvXzsKLSAgfQotCi0gIGlmIChkaXZpc29yID4gZGl2aWRlbmQpIHsKLSAgICAq
cXVvdGllbnRfcmV0ID0gMDsKLSAgICAqcmVtYWluZGVyX3JldCA9IGRpdmlkZW5kOwotICAgIHJl
dHVybjsKLSAgfQotCi0gIGlmIChkaXZpc29yID09IGRpdmlkZW5kKSB7Ci0gICAgKnF1b3RpZW50
X3JldCA9IDE7Ci0gICAgKnJlbWFpbmRlcl9yZXQgPSAwOwotICAgIHJldHVybjsKLSAgfQotCi0g
IHVpbnQxMjggZGVub21pbmF0b3IgPSBkaXZpc29yOwotICB1aW50MTI4IHBvc2l0aW9uID0gMTsK
LSAgdWludDEyOCBxdW90aWVudCA9IDA7Ci0KLSAgLy8gTGVmdCBhbGlnbnMgdGhlIE1TQiBvZiB0
aGUgZGVub21pbmF0b3IgYW5kIHRoZSBkaXZpZGVuZC4KLSAgaW50IHNoaWZ0ID0gRmxzMTI4KGRp
dmlkZW5kKSAtIEZsczEyOChkZW5vbWluYXRvcik7Ci0gIGRlbm9taW5hdG9yIDw8PSBzaGlmdDsK
LSAgcG9zaXRpb24gPDw9IHNoaWZ0OwotCi0gIC8vIFVzZXMgc2hpZnQtc3VidHJhY3QgYWxnb3Jp
dGhtIHRvIGRpdmlkZSBkaXZpZGVuZCBieSBkZW5vbWluYXRvci4gVGhlCi0gIC8vIHJlbWFpbmRl
ciB3aWxsIGJlIGxlZnQgaW4gZGl2aWRlbmQuCi0gIHdoaWxlIChwb3NpdGlvbiA+IDApIHsKLSAg
ICBpZiAoZGl2aWRlbmQgPj0gZGVub21pbmF0b3IpIHsKLSAgICAgIGRpdmlkZW5kIC09IGRlbm9t
aW5hdG9yOwotICAgICAgcXVvdGllbnQgfD0gcG9zaXRpb247Ci0gICAgfQotICAgIHBvc2l0aW9u
ID4+PSAxOwotICAgIGRlbm9taW5hdG9yID4+PSAxOwotICB9Ci0KLSAgKnF1b3RpZW50X3JldCA9
IHF1b3RpZW50OwotICAqcmVtYWluZGVyX3JldCA9IGRpdmlkZW5kOwotfQotCi11aW50MTI4JiB1
aW50MTI4OjpvcGVyYXRvci89KGNvbnN0IHVpbnQxMjgmIGRpdmlzb3IpIHsKLSAgdWludDEyOCBx
dW90aWVudCA9IDA7Ci0gIHVpbnQxMjggcmVtYWluZGVyID0gMDsKLSAgRGl2TW9kSW1wbCgqdGhp
cywgZGl2aXNvciwgJnF1b3RpZW50LCAmcmVtYWluZGVyKTsKLSAgKnRoaXMgPSBxdW90aWVudDsK
LSAgcmV0dXJuICp0aGlzOwotfQotdWludDEyOCYgdWludDEyODo6b3BlcmF0b3IlPShjb25zdCB1
aW50MTI4JiBkaXZpc29yKSB7Ci0gIHVpbnQxMjggcXVvdGllbnQgPSAwOwotICB1aW50MTI4IHJl
bWFpbmRlciA9IDA7Ci0gIERpdk1vZEltcGwoKnRoaXMsIGRpdmlzb3IsICZxdW90aWVudCwgJnJl
bWFpbmRlcik7Ci0gICp0aGlzID0gcmVtYWluZGVyOwotICByZXR1cm4gKnRoaXM7Ci19Ci0KLXN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG8sIGNvbnN0IHVpbnQxMjgmIGIp
IHsKLSAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgZmxhZ3MgPSBvLmZsYWdzKCk7Ci0KLSAgLy8g
U2VsZWN0IGEgZGl2aXNvciB3aGljaCBpcyB0aGUgbGFyZ2VzdCBwb3dlciBvZiB0aGUgYmFzZSA8
IDJeNjQuCi0gIHVpbnQxMjggZGl2OwotICBzdGQ6OnN0cmVhbXNpemUgZGl2X2Jhc2VfbG9nOwot
ICBzd2l0Y2ggKGZsYWdzICYgc3RkOjppb3M6OmJhc2VmaWVsZCkgewotICAgIGNhc2Ugc3RkOjpp
b3M6OmhleDoKLSAgICAgIGRpdiA9IEdPT0dMRV9VTE9OR0xPTkcoMHgxMDAwMDAwMDAwMDAwMDAw
KTsgIC8vIDE2XjE1Ci0gICAgICBkaXZfYmFzZV9sb2cgPSAxNTsKLSAgICAgIGJyZWFrOwotICAg
IGNhc2Ugc3RkOjppb3M6Om9jdDoKLSAgICAgIGRpdiA9IEdPT0dMRV9VTE9OR0xPTkcoMDEwMDAw
MDAwMDAwMDAwMDAwMDAwMDApOyAgLy8gOF4yMQotICAgICAgZGl2X2Jhc2VfbG9nID0gMjE7Ci0g
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgLy8gc3RkOjppb3M6OmRlYwotICAgICAgZGl2ID0g
R09PR0xFX1VMT05HTE9ORygxMDAwMDAwMDAwMDAwMDAwMDAwMCk7ICAvLyAxMF4xOQotICAgICAg
ZGl2X2Jhc2VfbG9nID0gMTk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8vIE5vdyBwaWVjZSB0
b2dldGhlciB0aGUgdWludDEyOCByZXByZXNlbnRhdGlvbiBmcm9tIHRocmVlIGNodW5rcyBvZgot
ICAvLyB0aGUgb3JpZ2luYWwgdmFsdWUsIGVhY2ggbGVzcyB0aGFuICJkaXYiIGFuZCB0aGVyZWZv
cmUgcmVwcmVzZW50YWJsZQotICAvLyBhcyBhIHVpbnQ2NC4KLSAgc3RkOjpvc3RyaW5nc3RyZWFt
IG9zOwotICBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBjb3B5X21hc2sgPQotICAgICAgc3RkOjpp
b3M6OmJhc2VmaWVsZCB8IHN0ZDo6aW9zOjpzaG93YmFzZSB8IHN0ZDo6aW9zOjp1cHBlcmNhc2U7
Ci0gIG9zLnNldGYoZmxhZ3MgJiBjb3B5X21hc2ssIGNvcHlfbWFzayk7Ci0gIHVpbnQxMjggaGln
aCA9IGI7Ci0gIHVpbnQxMjggbG93OwotICB1aW50MTI4OjpEaXZNb2RJbXBsKGhpZ2gsIGRpdiwg
JmhpZ2gsICZsb3cpOwotICB1aW50MTI4IG1pZDsKLSAgdWludDEyODo6RGl2TW9kSW1wbChoaWdo
LCBkaXYsICZoaWdoLCAmbWlkKTsKLSAgaWYgKGhpZ2gubG9fICE9IDApIHsKLSAgICBvcyA8PCBo
aWdoLmxvXzsKLSAgICBvcyA8PCBzdGQ6Om5vc2hvd2Jhc2UgPDwgc3RkOjpzZXRmaWxsKCcwJykg
PDwgc3RkOjpzZXR3KGRpdl9iYXNlX2xvZyk7Ci0gICAgb3MgPDwgbWlkLmxvXzsKLSAgICBvcyA8
PCBzdGQ6OnNldHcoZGl2X2Jhc2VfbG9nKTsKLSAgfSBlbHNlIGlmIChtaWQubG9fICE9IDApIHsK
LSAgICBvcyA8PCBtaWQubG9fOwotICAgIG9zIDw8IHN0ZDo6bm9zaG93YmFzZSA8PCBzdGQ6OnNl
dGZpbGwoJzAnKSA8PCBzdGQ6OnNldHcoZGl2X2Jhc2VfbG9nKTsKLSAgfQotICBvcyA8PCBsb3cu
bG9fOwotICBzdGQ6OnN0cmluZyByZXAgPSBvcy5zdHIoKTsKLQotICAvLyBBZGQgdGhlIHJlcXVp
c2l0ZSBwYWRkaW5nLgotICBzdGQ6OnN0cmVhbXNpemUgd2lkdGggPSBvLndpZHRoKDApOwotICBp
ZiAod2lkdGggPiByZXAuc2l6ZSgpKSB7Ci0gICAgaWYgKChmbGFncyAmIHN0ZDo6aW9zOjphZGp1
c3RmaWVsZCkgPT0gc3RkOjppb3M6OmxlZnQpIHsKLSAgICAgIHJlcC5hcHBlbmQod2lkdGggLSBy
ZXAuc2l6ZSgpLCBvLmZpbGwoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlcC5pbnNlcnQoc3Rh
dGljX2Nhc3Q8c3RkOjpzdHJpbmc6OnNpemVfdHlwZT4oMCksCi0gICAgICAgICAgICAgICAgIHdp
ZHRoIC0gcmVwLnNpemUoKSwgby5maWxsKCkpOwotICAgIH0KLSAgfQotCi0gIC8vIFN0cmVhbSB0
aGUgZmluYWwgcmVwcmVzZW50YXRpb24gaW4gYSBzaW5nbGUgIjw8IiBjYWxsLgotICByZXR1cm4g
byA8PCByZXA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNl
IGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2ludDEyOC5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2ludDEyOC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxNDk5YmI3NmQ1ZTBiYTc5NTkyNDNlZjQ2MjA1OWY1MGY5ODgzMWRiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9pbnQxMjguaAorKysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1NUVUJT
X0lOVDEyOF9IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfU1RVQlNfSU5UMTI4X0hfCi0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLSNpbmNsdWRlIDxpb3Nm
d2Q+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotc3RydWN0
IHVpbnQxMjhfcG9kOwotCi0vLyBUT0RPKHhpYW9mZW5nKTogRGVmaW5lIEdPT0dMRV9QUk9UT0JV
Rl9IQVNfQ09OU1RFWFBSIHdoZW4gY29uc3RleHByIGlzCi0vLyBhdmFpbGFibGUuCi0jaWZkZWYg
R09PR0xFX1BST1RPQlVGX0hBU19DT05TVEVYUFIKLSMgZGVmaW5lIFVJTlQxMjhfQ09OU1RFWFBS
IGNvbnN0ZXhwcgotI2Vsc2UKLSMgZGVmaW5lIFVJTlQxMjhfQ09OU1RFWFBSCi0jZW5kaWYKLQot
Ly8gQW4gdW5zaWduZWQgMTI4LWJpdCBpbnRlZ2VyIHR5cGUuIFRocmVhZC1jb21wYXRpYmxlLgot
Y2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIHVpbnQxMjggewotIHB1YmxpYzoKLSAgVUlOVDEyOF9D
T05TVEVYUFIgdWludDEyOCgpOyAgLy8gU2V0cyB0byAwLCBidXQgZG9uJ3QgdHJ1c3Qgb24gdGhp
cyBiZWhhdmlvci4KLSAgVUlOVDEyOF9DT05TVEVYUFIgdWludDEyOCh1aW50NjQgdG9wLCB1aW50
NjQgYm90dG9tKTsKLSNpZm5kZWYgU1dJRwotICBVSU5UMTI4X0NPTlNURVhQUiB1aW50MTI4KGlu
dCBib3R0b20pOwotICBVSU5UMTI4X0NPTlNURVhQUiB1aW50MTI4KHVpbnQzMiBib3R0b20pOyAg
IC8vIFRvcCA5NiBiaXRzID0gMAotI2VuZGlmCi0gIFVJTlQxMjhfQ09OU1RFWFBSIHVpbnQxMjgo
dWludDY0IGJvdHRvbSk7ICAgLy8gaGlfID0gMAotICBVSU5UMTI4X0NPTlNURVhQUiB1aW50MTI4
KGNvbnN0IHVpbnQxMjhfcG9kICZ2YWwpOwotCi0gIC8vIFRyaXZpYWwgY29weSBjb25zdHJ1Y3Rv
ciwgYXNzaWdubWVudCBvcGVyYXRvciBhbmQgZGVzdHJ1Y3Rvci4KLQotICB2b2lkIEluaXRpYWxp
emUodWludDY0IHRvcCwgdWludDY0IGJvdHRvbSk7Ci0KLSAgLy8gQXJpdGhtZXRpYyBvcGVyYXRv
cnMuCi0gIHVpbnQxMjgmIG9wZXJhdG9yKz0oY29uc3QgdWludDEyOCYgYik7Ci0gIHVpbnQxMjgm
IG9wZXJhdG9yLT0oY29uc3QgdWludDEyOCYgYik7Ci0gIHVpbnQxMjgmIG9wZXJhdG9yKj0oY29u
c3QgdWludDEyOCYgYik7Ci0gIC8vIExvbmcgZGl2aXNpb24vbW9kdWxvIGZvciB1aW50MTI4Lgot
ICB1aW50MTI4JiBvcGVyYXRvci89KGNvbnN0IHVpbnQxMjgmIGIpOwotICB1aW50MTI4JiBvcGVy
YXRvciU9KGNvbnN0IHVpbnQxMjgmIGIpOwotICB1aW50MTI4IG9wZXJhdG9yKysoaW50KTsKLSAg
dWludDEyOCBvcGVyYXRvci0tKGludCk7Ci0gIHVpbnQxMjgmIG9wZXJhdG9yPDw9KGludCk7Ci0g
IHVpbnQxMjgmIG9wZXJhdG9yPj49KGludCk7Ci0gIHVpbnQxMjgmIG9wZXJhdG9yJj0oY29uc3Qg
dWludDEyOCYgYik7Ci0gIHVpbnQxMjgmIG9wZXJhdG9yfD0oY29uc3QgdWludDEyOCYgYik7Ci0g
IHVpbnQxMjgmIG9wZXJhdG9yXj0oY29uc3QgdWludDEyOCYgYik7Ci0gIHVpbnQxMjgmIG9wZXJh
dG9yKysoKTsKLSAgdWludDEyOCYgb3BlcmF0b3ItLSgpOwotCi0gIGZyaWVuZCB1aW50NjQgVWlu
dDEyOExvdzY0KGNvbnN0IHVpbnQxMjgmIHYpOwotICBmcmllbmQgdWludDY0IFVpbnQxMjhIaWdo
NjQoY29uc3QgdWludDEyOCYgdik7Ci0KLSAgLy8gV2UgYWRkICJzdGQ6OiIgdG8gYXZvaWQgaW5j
bHVkaW5nIGFsbCBvZiBwb3J0LmguCi0gIExJQlBST1RPQlVGX0VYUE9SVCBmcmllbmQgc3RkOjpv
c3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgbywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDEyOCYgYik7Ci0KLSBw
cml2YXRlOgotICBzdGF0aWMgdm9pZCBEaXZNb2RJbXBsKHVpbnQxMjggZGl2aWRlbmQsIHVpbnQx
MjggZGl2aXNvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTI4KiBxdW90aWVudF9y
ZXQsIHVpbnQxMjgqIHJlbWFpbmRlcl9yZXQpOwotCi0gIC8vIExpdHRsZS1lbmRpYW4gbWVtb3J5
IG9yZGVyIG9wdGltaXphdGlvbnMgY2FuIGJlbmVmaXQgZnJvbQotICAvLyBoYXZpbmcgbG9fIGZp
cnN0LCBoaV8gbGFzdC4KLSAgLy8gU2VlIHV0aWwvZW5kaWFuL2VuZGlhbi5oIGFuZCBMb2FkMTI4
L1N0b3JlMTI4IGZvciBzdG9yaW5nIGEgdWludDEyOC4KLSAgdWludDY0ICAgICAgICBsb187Ci0g
IHVpbnQ2NCAgICAgICAgaGlfOwotCi0gIC8vIE5vdCBpbXBsZW1lbnRlZCwganVzdCBkZWNsYXJl
ZCBmb3IgY2F0Y2hpbmcgYXV0b21hdGljIHR5cGUgY29udmVyc2lvbnMuCi0gIHVpbnQxMjgodWlu
dDgpOwotICB1aW50MTI4KHVpbnQxNik7Ci0gIHVpbnQxMjgoZmxvYXQgdik7Ci0gIHVpbnQxMjgo
ZG91YmxlIHYpOwotfTsKLQotLy8gVGhpcyBpcyBhIFBPRCBmb3JtIG9mIHVpbnQxMjggd2hpY2gg
Y2FuIGJlIHVzZWQgZm9yIHN0YXRpYyB2YXJpYWJsZXMgd2hpY2gKLS8vIG5lZWQgdG8gYmUgb3Bl
cmF0ZWQgb24gYXMgdWludDEyOC4KLXN0cnVjdCB1aW50MTI4X3BvZCB7Ci0gIC8vIE5vdGU6IFRo
ZSBvcmRlcmluZyBvZiBmaWVsZHMgaXMgZGlmZmVyZW50IHRoYW4gJ2NsYXNzIHVpbnQxMjgnIGJ1
dCB0aGUKLSAgLy8gc2FtZSBhcyBpdHMgMi1hcmcgY29uc3RydWN0b3IuICBUaGlzIGVuYWJsZXMg
bW9yZSBvYnZpb3VzIGluaXRpYWxpemF0aW9uCi0gIC8vIG9mIHN0YXRpYyBpbnN0YW5jZXMsIHdo
aWNoIGlzIHRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhpcyBzdHJ1Y3QgaW4gdGhlCi0gIC8vIGZp
cnN0IHBsYWNlLiAgVGhpcyBkb2VzIG5vdCBzZWVtIHRvIGRlZmVhdCBhbnkgb3B0aW1pemF0aW9u
cyB3cnQKLSAgLy8gb3BlcmF0aW9ucyBpbnZvbHZpbmcgdGhpcyBzdHJ1Y3QuCi0gIHVpbnQ2NCBo
aTsKLSAgdWludDY0IGxvOwotfTsKLQotTElCUFJPVE9CVUZfRVhQT1JUIGV4dGVybiBjb25zdCB1
aW50MTI4X3BvZCBrdWludDEyOG1heDsKLQotLy8gYWxsb3cgdWludDEyOCB0byBiZSBsb2dnZWQK
LUxJQlBST1RPQlVGX0VYUE9SVCBleHRlcm4gc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6
b3N0cmVhbSYgbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQxMjgmIGIpOwotCi0vLyBNZXRob2RzIHRvIGFjY2VzcyBsb3cgYW5k
IGhpZ2ggcGllY2VzIG9mIDEyOC1iaXQgdmFsdWUuCi0vLyBEZWZpbmVkIGV4dGVybmFsbHkgZnJv
bSB1aW50MTI4IHRvIGZhY2lsaXRhdGUgY29udmVyc2lvbgotLy8gdG8gbmF0aXZlIDEyOC1iaXQg
dHlwZXMgd2hlbiBjb21waWxlcnMgc3VwcG9ydCB0aGVtLgotaW5saW5lIHVpbnQ2NCBVaW50MTI4
TG93NjQoY29uc3QgdWludDEyOCYgdikgeyByZXR1cm4gdi5sb187IH0KLWlubGluZSB1aW50NjQg
VWludDEyOEhpZ2g2NChjb25zdCB1aW50MTI4JiB2KSB7IHJldHVybiB2LmhpXzsgfQotCi0vLyBU
T0RPOiBwZXJoYXBzIGl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBpbnQxMjgsIGEgc2lnbmVkIDEy
OC1iaXQgdHlwZT8KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICAgICAgICAgICAgICAgICAg
ICAgIEltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9sbG93Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCB1aW50MTI4JiBsaHMsIGNvbnN0IHVpbnQxMjgm
IHJocykgewotICByZXR1cm4gKFVpbnQxMjhMb3c2NChsaHMpID09IFVpbnQxMjhMb3c2NChyaHMp
ICYmCi0gICAgICAgICAgVWludDEyOEhpZ2g2NChsaHMpID09IFVpbnQxMjhIaWdoNjQocmhzKSk7
Ci19Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHVpbnQxMjgmIGxocywgY29uc3QgdWlu
dDEyOCYgcmhzKSB7Ci0gIHJldHVybiAhKGxocyA9PSByaHMpOwotfQotCi1pbmxpbmUgVUlOVDEy
OF9DT05TVEVYUFIgdWludDEyODo6dWludDEyOCgpIDogbG9fKDApLCBoaV8oMCkge30KLWlubGlu
ZSBVSU5UMTI4X0NPTlNURVhQUiB1aW50MTI4Ojp1aW50MTI4KHVpbnQ2NCB0b3AsIHVpbnQ2NCBi
b3R0b20pCi0gICAgOiBsb18oYm90dG9tKSwgaGlfKHRvcCkge30KLWlubGluZSBVSU5UMTI4X0NP
TlNURVhQUiB1aW50MTI4Ojp1aW50MTI4KGNvbnN0IHVpbnQxMjhfcG9kJiB2KQotICAgIDogbG9f
KHYubG8pLCBoaV8odi5oaSkge30KLWlubGluZSBVSU5UMTI4X0NPTlNURVhQUiB1aW50MTI4Ojp1
aW50MTI4KHVpbnQ2NCBib3R0b20pCi0gICAgOiBsb18oYm90dG9tKSwgaGlfKDApIHt9Ci0jaWZu
ZGVmIFNXSUcKLWlubGluZSBVSU5UMTI4X0NPTlNURVhQUiB1aW50MTI4Ojp1aW50MTI4KHVpbnQz
MiBib3R0b20pCi0gICAgOiBsb18oYm90dG9tKSwgaGlfKDApIHt9Ci1pbmxpbmUgVUlOVDEyOF9D
T05TVEVYUFIgdWludDEyODo6dWludDEyOChpbnQgYm90dG9tKQotICAgIDogbG9fKGJvdHRvbSks
IGhpXyhzdGF0aWNfY2FzdDxpbnQ2ND4oKGJvdHRvbSA8IDApID8gLTEgOiAwKSkge30KLSNlbmRp
ZgotCi0jdW5kZWYgVUlOVDEyOF9DT05TVEVYUFIKLQotaW5saW5lIHZvaWQgdWludDEyODo6SW5p
dGlhbGl6ZSh1aW50NjQgdG9wLCB1aW50NjQgYm90dG9tKSB7Ci0gIGhpXyA9IHRvcDsKLSAgbG9f
ID0gYm90dG9tOwotfQotCi0vLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLQotI2RlZmluZSBDTVAx
Mjgob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
aW5saW5lIGJvb2wgb3BlcmF0b3Igb3AoY29uc3QgdWludDEyOCYgbGhzLCBjb25zdCB1aW50MTI4
JiByaHMpIHsgXAotICByZXR1cm4gKFVpbnQxMjhIaWdoNjQobGhzKSA9PSBVaW50MTI4SGlnaDY0
KHJocykpID8gICAgICAgICAgICAgXAotICAgICAgKFVpbnQxMjhMb3c2NChsaHMpIG9wIFVpbnQx
MjhMb3c2NChyaHMpKSA6ICAgICAgICAgICAgICAgICAgXAotICAgICAgKFVpbnQxMjhIaWdoNjQo
bGhzKSBvcCBVaW50MTI4SGlnaDY0KHJocykpOyAgICAgICAgICAgICAgICAgXAotfQotCi1DTVAx
MjgoPCkKLUNNUDEyOCg+KQotQ01QMTI4KD49KQotQ01QMTI4KDw9KQotCi0jdW5kZWYgQ01QMTI4
Ci0KLS8vIFVuYXJ5IG9wZXJhdG9ycwotCi1pbmxpbmUgdWludDEyOCBvcGVyYXRvci0oY29uc3Qg
dWludDEyOCYgdmFsKSB7Ci0gIGNvbnN0IHVpbnQ2NCBoaV9mbGlwID0gflVpbnQxMjhIaWdoNjQo
dmFsKTsKLSAgY29uc3QgdWludDY0IGxvX2ZsaXAgPSB+VWludDEyOExvdzY0KHZhbCk7Ci0gIGNv
bnN0IHVpbnQ2NCBsb19hZGQgPSBsb19mbGlwICsgMTsKLSAgaWYgKGxvX2FkZCA8IGxvX2ZsaXAp
IHsKLSAgICByZXR1cm4gdWludDEyOChoaV9mbGlwICsgMSwgbG9fYWRkKTsKLSAgfQotICByZXR1
cm4gdWludDEyOChoaV9mbGlwLCBsb19hZGQpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciEo
Y29uc3QgdWludDEyOCYgdmFsKSB7Ci0gIHJldHVybiAhVWludDEyOEhpZ2g2NCh2YWwpICYmICFV
aW50MTI4TG93NjQodmFsKTsKLX0KLQotLy8gTG9naWNhbCBvcGVyYXRvcnMuCi0KLWlubGluZSB1
aW50MTI4IG9wZXJhdG9yfihjb25zdCB1aW50MTI4JiB2YWwpIHsKLSAgcmV0dXJuIHVpbnQxMjgo
flVpbnQxMjhIaWdoNjQodmFsKSwgflVpbnQxMjhMb3c2NCh2YWwpKTsKLX0KLQotI2RlZmluZSBM
T0dJQzEyOChvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotaW5saW5lIHVpbnQxMjggb3BlcmF0b3Igb3AoY29uc3QgdWludDEyOCYgbGhzLCBjb25z
dCB1aW50MTI4JiByaHMpIHsgXAotICByZXR1cm4gdWludDEyOChVaW50MTI4SGlnaDY0KGxocykg
b3AgVWludDEyOEhpZ2g2NChyaHMpLCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICBVaW50
MTI4TG93NjQobGhzKSBvcCBVaW50MTI4TG93NjQocmhzKSk7ICAgICAgICAgICAgXAotfQotCi1M
T0dJQzEyOCh8KQotTE9HSUMxMjgoJikKLUxPR0lDMTI4KF4pCi0KLSN1bmRlZiBMT0dJQzEyOAot
Ci0jZGVmaW5lIExPR0lDQVNTSUdOMTI4KG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotaW5saW5lIHVpbnQxMjgmIHVpbnQxMjg6Om9wZXJhdG9yIG9wKGNvbnN0IHVpbnQx
MjgmIG90aGVyKSB7IFwKLSAgaGlfIG9wIG90aGVyLmhpXzsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGxvXyBvcCBvdGhlci5sb187ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gKnRoaXM7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotTE9HSUNBU1NJR04xMjgo
fD0pCi1MT0dJQ0FTU0lHTjEyOCgmPSkKLUxPR0lDQVNTSUdOMTI4KF49KQotCi0jdW5kZWYgTE9H
SUNBU1NJR04xMjgKLQotLy8gU2hpZnQgb3BlcmF0b3JzLgotCi1pbmxpbmUgdWludDEyOCBvcGVy
YXRvcjw8KGNvbnN0IHVpbnQxMjgmIHZhbCwgaW50IGFtb3VudCkgewotICAvLyB1aW50NjQgc2hp
ZnRzIG9mID49IDY0IGFyZSB1bmRlZmluZWQsIHNvIHdlIHdpbGwgbmVlZCBzb21lIHNwZWNpYWwt
Y2FzaW5nLgotICBpZiAoYW1vdW50IDwgNjQpIHsKLSAgICBpZiAoYW1vdW50ID09IDApIHsKLSAg
ICAgIHJldHVybiB2YWw7Ci0gICAgfQotICAgIHVpbnQ2NCBuZXdfaGkgPSAoVWludDEyOEhpZ2g2
NCh2YWwpIDw8IGFtb3VudCkgfAotICAgICAgICAgICAgICAgICAgICAoVWludDEyOExvdzY0KHZh
bCkgPj4gKDY0IC0gYW1vdW50KSk7Ci0gICAgdWludDY0IG5ld19sbyA9IFVpbnQxMjhMb3c2NCh2
YWwpIDw8IGFtb3VudDsKLSAgICByZXR1cm4gdWludDEyOChuZXdfaGksIG5ld19sbyk7Ci0gIH0g
ZWxzZSBpZiAoYW1vdW50IDwgMTI4KSB7Ci0gICAgcmV0dXJuIHVpbnQxMjgoVWludDEyOExvdzY0
KHZhbCkgPDwgKGFtb3VudCAtIDY0KSwgMCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHVpbnQx
MjgoMCwgMCk7Ci0gIH0KLX0KLQotaW5saW5lIHVpbnQxMjggb3BlcmF0b3I+Pihjb25zdCB1aW50
MTI4JiB2YWwsIGludCBhbW91bnQpIHsKLSAgLy8gdWludDY0IHNoaWZ0cyBvZiA+PSA2NCBhcmUg
dW5kZWZpbmVkLCBzbyB3ZSB3aWxsIG5lZWQgc29tZSBzcGVjaWFsLWNhc2luZy4KLSAgaWYgKGFt
b3VudCA8IDY0KSB7Ci0gICAgaWYgKGFtb3VudCA9PSAwKSB7Ci0gICAgICByZXR1cm4gdmFsOwot
ICAgIH0KLSAgICB1aW50NjQgbmV3X2hpID0gVWludDEyOEhpZ2g2NCh2YWwpID4+IGFtb3VudDsK
LSAgICB1aW50NjQgbmV3X2xvID0gKFVpbnQxMjhMb3c2NCh2YWwpID4+IGFtb3VudCkgfAotICAg
ICAgICAgICAgICAgICAgICAoVWludDEyOEhpZ2g2NCh2YWwpIDw8ICg2NCAtIGFtb3VudCkpOwot
ICAgIHJldHVybiB1aW50MTI4KG5ld19oaSwgbmV3X2xvKTsKLSAgfSBlbHNlIGlmIChhbW91bnQg
PCAxMjgpIHsKLSAgICByZXR1cm4gdWludDEyOCgwLCBVaW50MTI4SGlnaDY0KHZhbCkgPj4gKGFt
b3VudCAtIDY0KSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHVpbnQxMjgoMCwgMCk7Ci0gIH0K
LX0KLQotaW5saW5lIHVpbnQxMjgmIHVpbnQxMjg6Om9wZXJhdG9yPDw9KGludCBhbW91bnQpIHsK
LSAgLy8gdWludDY0IHNoaWZ0cyBvZiA+PSA2NCBhcmUgdW5kZWZpbmVkLCBzbyB3ZSB3aWxsIG5l
ZWQgc29tZSBzcGVjaWFsLWNhc2luZy4KLSAgaWYgKGFtb3VudCA8IDY0KSB7Ci0gICAgaWYgKGFt
b3VudCAhPSAwKSB7Ci0gICAgICBoaV8gPSAoaGlfIDw8IGFtb3VudCkgfCAobG9fID4+ICg2NCAt
IGFtb3VudCkpOwotICAgICAgbG9fID0gbG9fIDw8IGFtb3VudDsKLSAgICB9Ci0gIH0gZWxzZSBp
ZiAoYW1vdW50IDwgMTI4KSB7Ci0gICAgaGlfID0gbG9fIDw8IChhbW91bnQgLSA2NCk7Ci0gICAg
bG9fID0gMDsKLSAgfSBlbHNlIHsKLSAgICBoaV8gPSAwOwotICAgIGxvXyA9IDA7Ci0gIH0KLSAg
cmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgdWludDEyOCYgdWludDEyODo6b3BlcmF0b3I+Pj0o
aW50IGFtb3VudCkgewotICAvLyB1aW50NjQgc2hpZnRzIG9mID49IDY0IGFyZSB1bmRlZmluZWQs
IHNvIHdlIHdpbGwgbmVlZCBzb21lIHNwZWNpYWwtY2FzaW5nLgotICBpZiAoYW1vdW50IDwgNjQp
IHsKLSAgICBpZiAoYW1vdW50ICE9IDApIHsKLSAgICAgIGxvXyA9IChsb18gPj4gYW1vdW50KSB8
IChoaV8gPDwgKDY0IC0gYW1vdW50KSk7Ci0gICAgICBoaV8gPSBoaV8gPj4gYW1vdW50OwotICAg
IH0KLSAgfSBlbHNlIGlmIChhbW91bnQgPCAxMjgpIHsKLSAgICBsb18gPSBoaV8gPj4gKGFtb3Vu
dCAtIDY0KTsKLSAgICBoaV8gPSAwOwotICB9IGVsc2UgewotICAgIGxvXyA9IDA7Ci0gICAgaGlf
ID0gMDsKLSAgfQotICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSB1aW50MTI4IG9wZXJhdG9y
Kyhjb25zdCB1aW50MTI4JiBsaHMsIGNvbnN0IHVpbnQxMjgmIHJocykgewotICByZXR1cm4gdWlu
dDEyOChsaHMpICs9IHJoczsKLX0KLQotaW5saW5lIHVpbnQxMjggb3BlcmF0b3ItKGNvbnN0IHVp
bnQxMjgmIGxocywgY29uc3QgdWludDEyOCYgcmhzKSB7Ci0gIHJldHVybiB1aW50MTI4KGxocykg
LT0gcmhzOwotfQotCi1pbmxpbmUgdWludDEyOCBvcGVyYXRvciooY29uc3QgdWludDEyOCYgbGhz
LCBjb25zdCB1aW50MTI4JiByaHMpIHsKLSAgcmV0dXJuIHVpbnQxMjgobGhzKSAqPSByaHM7Ci19
Ci0KLWlubGluZSB1aW50MTI4IG9wZXJhdG9yLyhjb25zdCB1aW50MTI4JiBsaHMsIGNvbnN0IHVp
bnQxMjgmIHJocykgewotICByZXR1cm4gdWludDEyOChsaHMpIC89IHJoczsKLX0KLQotaW5saW5l
IHVpbnQxMjggb3BlcmF0b3IlKGNvbnN0IHVpbnQxMjgmIGxocywgY29uc3QgdWludDEyOCYgcmhz
KSB7Ci0gIHJldHVybiB1aW50MTI4KGxocykgJT0gcmhzOwotfQotCi1pbmxpbmUgdWludDEyOCYg
dWludDEyODo6b3BlcmF0b3IrPShjb25zdCB1aW50MTI4JiBiKSB7Ci0gIGhpXyArPSBiLmhpXzsK
LSAgdWludDY0IGxvbG8gPSBsb18gKyBiLmxvXzsKLSAgaWYgKGxvbG8gPCBsb18pCi0gICAgKyto
aV87Ci0gIGxvXyA9IGxvbG87Ci0gIHJldHVybiAqdGhpczsKLX0KLQotaW5saW5lIHVpbnQxMjgm
IHVpbnQxMjg6Om9wZXJhdG9yLT0oY29uc3QgdWludDEyOCYgYikgewotICBoaV8gLT0gYi5oaV87
Ci0gIGlmIChiLmxvXyA+IGxvXykKLSAgICAtLWhpXzsKLSAgbG9fIC09IGIubG9fOwotICByZXR1
cm4gKnRoaXM7Ci19Ci0KLWlubGluZSB1aW50MTI4JiB1aW50MTI4OjpvcGVyYXRvcio9KGNvbnN0
IHVpbnQxMjgmIGIpIHsKLSAgdWludDY0IGE5NiA9IGhpXyA+PiAzMjsKLSAgdWludDY0IGE2NCA9
IGhpXyAmIDB4ZmZmZmZmZmZ1OwotICB1aW50NjQgYTMyID0gbG9fID4+IDMyOwotICB1aW50NjQg
YTAwID0gbG9fICYgMHhmZmZmZmZmZnU7Ci0gIHVpbnQ2NCBiOTYgPSBiLmhpXyA+PiAzMjsKLSAg
dWludDY0IGI2NCA9IGIuaGlfICYgMHhmZmZmZmZmZnU7Ci0gIHVpbnQ2NCBiMzIgPSBiLmxvXyA+
PiAzMjsKLSAgdWludDY0IGIwMCA9IGIubG9fICYgMHhmZmZmZmZmZnU7Ci0gIC8vIG11bHRpcGx5
IFthOTYgLi4gYTAwXSB4IFtiOTYgLi4gYjAwXQotICAvLyB0ZXJtcyBoaWdoZXIgdGhhbiBjOTYg
ZGlzYXBwZWFyIG9mZiB0aGUgaGlnaCBzaWRlCi0gIC8vIHRlcm1zIGM5NiBhbmQgYzY0IGFyZSBz
YWZlIHRvIGlnbm9yZSBjYXJyeSBiaXQKLSAgdWludDY0IGM5NiA9IGE5NiAqIGIwMCArIGE2NCAq
IGIzMiArIGEzMiAqIGI2NCArIGEwMCAqIGI5NjsKLSAgdWludDY0IGM2NCA9IGE2NCAqIGIwMCAr
IGEzMiAqIGIzMiArIGEwMCAqIGI2NDsKLSAgdGhpcy0+aGlfID0gKGM5NiA8PCAzMikgKyBjNjQ7
Ci0gIHRoaXMtPmxvXyA9IDA7Ci0gIC8vIGFkZCB0ZXJtcyBhZnRlciB0aGlzIG9uZSBhdCBhIHRp
bWUgdG8gY2FwdHVyZSBjYXJyeQotICAqdGhpcyArPSB1aW50MTI4KGEzMiAqIGIwMCkgPDwgMzI7
Ci0gICp0aGlzICs9IHVpbnQxMjgoYTAwICogYjMyKSA8PCAzMjsKLSAgKnRoaXMgKz0gYTAwICog
YjAwOwotICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSB1aW50MTI4IHVpbnQxMjg6Om9wZXJh
dG9yKysoaW50KSB7Ci0gIHVpbnQxMjggdG1wKCp0aGlzKTsKLSAgKnRoaXMgKz0gMTsKLSAgcmV0
dXJuIHRtcDsKLX0KLQotaW5saW5lIHVpbnQxMjggdWludDEyODo6b3BlcmF0b3ItLShpbnQpIHsK
LSAgdWludDEyOCB0bXAoKnRoaXMpOwotICAqdGhpcyAtPSAxOwotICByZXR1cm4gdG1wOwotfQot
Ci1pbmxpbmUgdWludDEyOCYgdWludDEyODo6b3BlcmF0b3IrKygpIHsKLSAgKnRoaXMgKz0gMTsK
LSAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgdWludDEyOCYgdWludDEyODo6b3BlcmF0b3It
LSgpIHsKLSAgKnRoaXMgLT0gMTsKLSAgcmV0dXJuICp0aGlzOwotfQotCi19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVf
UFJPVE9CVUZfU1RVQlNfSU5UMTI4X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
c3R1YnMvaW50MTI4X3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2ludDEy
OF91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzMzI5MmNjYzg5
ZTk3NjMzY2YwNTIzODU1NzE2MWRjNDk1N2RjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvaW50MTI4X3VuaXR0
ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTEzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2ludDEy
OC5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVk
ZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRl
c3QuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci0KLVRFU1QoSW50MTI4LCBBbGxUZXN0cykgewotICB1aW50MTI4
IHplcm8oMCk7Ci0gIHVpbnQxMjggb25lKDEpOwotICB1aW50MTI4IG9uZV8yYXJnKDAsIDEpOwot
ICB1aW50MTI4IHR3bygwLCAyKTsKLSAgdWludDEyOCB0aHJlZSgwLCAzKTsKLSAgdWludDEyOCBi
aWcoMjAwMCwgMik7Ci0gIHVpbnQxMjggYmlnX21pbnVzX29uZSgyMDAwLCAxKTsKLSAgdWludDEy
OCBiaWdnZXIoMjAwMSwgMSk7Ci0gIHVpbnQxMjggYmlnZ2VzdChrdWludDEyOG1heCk7Ci0gIHVp
bnQxMjggaGlnaF9sb3coMSwgMCk7Ci0gIHVpbnQxMjggbG93X2hpZ2goMCwga3VpbnQ2NG1heCk7
Ci0gIEVYUEVDVF9MVChvbmUsIHR3byk7Ci0gIEVYUEVDVF9HVCh0d28sIG9uZSk7Ci0gIEVYUEVD
VF9MVChvbmUsIGJpZyk7Ci0gIEVYUEVDVF9MVChvbmUsIGJpZyk7Ci0gIEVYUEVDVF9FUShvbmUs
IG9uZV8yYXJnKTsKLSAgRVhQRUNUX05FKG9uZSwgdHdvKTsKLSAgRVhQRUNUX0dUKGJpZywgb25l
KTsKLSAgRVhQRUNUX0dFKGJpZywgdHdvKTsKLSAgRVhQRUNUX0dFKGJpZywgYmlnX21pbnVzX29u
ZSk7Ci0gIEVYUEVDVF9HVChiaWcsIGJpZ19taW51c19vbmUpOwotICBFWFBFQ1RfTFQoYmlnX21p
bnVzX29uZSwgYmlnKTsKLSAgRVhQRUNUX0xFKGJpZ19taW51c19vbmUsIGJpZyk7Ci0gIEVYUEVD
VF9ORShiaWdfbWludXNfb25lLCBiaWcpOwotICBFWFBFQ1RfTFQoYmlnLCBiaWdnZXN0KTsKLSAg
RVhQRUNUX0xFKGJpZywgYmlnZ2VzdCk7Ci0gIEVYUEVDVF9HVChiaWdnZXN0LCBiaWcpOwotICBF
WFBFQ1RfR0UoYmlnZ2VzdCwgYmlnKTsKLSAgRVhQRUNUX0VRKGJpZywgfn5iaWcpOwotICBFWFBF
Q1RfRVEob25lLCBvbmUgfCBvbmUpOwotICBFWFBFQ1RfRVEoYmlnLCBiaWcgfCBiaWcpOwotICBF
WFBFQ1RfRVEob25lLCBvbmUgfCB6ZXJvKTsKLSAgRVhQRUNUX0VRKG9uZSwgb25lICYgb25lKTsK
LSAgRVhQRUNUX0VRKGJpZywgYmlnICYgYmlnKTsKLSAgRVhQRUNUX0VRKHplcm8sIG9uZSAmIHpl
cm8pOwotICBFWFBFQ1RfRVEoemVybywgYmlnICYgfmJpZyk7Ci0gIEVYUEVDVF9FUSh6ZXJvLCBv
bmUgXiBvbmUpOwotICBFWFBFQ1RfRVEoemVybywgYmlnIF4gYmlnKTsKLSAgRVhQRUNUX0VRKG9u
ZSwgb25lIF4gemVybyk7Ci0KLSAgLy8gU2hpZnQgb3BlcmF0b3JzLgotICBFWFBFQ1RfRVEoYmln
LCBiaWcgPDwgMCk7Ci0gIEVYUEVDVF9FUShiaWcsIGJpZyA+PiAwKTsKLSAgRVhQRUNUX0dUKGJp
ZyA8PCAxLCBiaWcpOwotICBFWFBFQ1RfTFQoYmlnID4+IDEsIGJpZyk7Ci0gIEVYUEVDVF9FUShi
aWcsIChiaWcgPDwgMTApID4+IDEwKTsKLSAgRVhQRUNUX0VRKGJpZywgKGJpZyA+PiAxKSA8PCAx
KTsKLSAgRVhQRUNUX0VRKG9uZSwgKG9uZSA8PCA4MCkgPj4gODApOwotICBFWFBFQ1RfRVEoemVy
bywgKG9uZSA+PiA4MCkgPDwgODApOwotICBFWFBFQ1RfRVEoemVybywgYmlnID4+IDEyOCk7Ci0g
IEVYUEVDVF9FUSh6ZXJvLCBiaWcgPDwgMTI4KTsKLQotICAvLyBTaGlmdCBhc3NpZ25tZW50cy4K
LSAgdWludDEyOCBiaWdfY29weSA9IGJpZzsKLSAgRVhQRUNUX0VRKGJpZyA8PCAwLCBiaWdfY29w
eSA8PD0gMCk7Ci0gIGJpZ19jb3B5ID0gYmlnOwotICBFWFBFQ1RfRVEoYmlnID4+IDAsIGJpZ19j
b3B5ID4+PSAwKTsKLSAgYmlnX2NvcHkgPSBiaWc7Ci0gIEVYUEVDVF9FUShiaWcgPDwgMSwgYmln
X2NvcHkgPDw9IDEpOwotICBiaWdfY29weSA9IGJpZzsKLSAgRVhQRUNUX0VRKGJpZyA+PiAxLCBi
aWdfY29weSA+Pj0gMSk7Ci0gIGJpZ19jb3B5ID0gYmlnOwotICBFWFBFQ1RfRVEoYmlnIDw8IDEw
LCBiaWdfY29weSA8PD0gMTApOwotICBiaWdfY29weSA9IGJpZzsKLSAgRVhQRUNUX0VRKGJpZyA+
PiAxMCwgYmlnX2NvcHkgPj49IDEwKTsKLSAgYmlnX2NvcHkgPSBiaWc7Ci0gIEVYUEVDVF9FUShi
aWcgPDwgNjQsIGJpZ19jb3B5IDw8PSA2NCk7Ci0gIGJpZ19jb3B5ID0gYmlnOwotICBFWFBFQ1Rf
RVEoYmlnID4+IDY0LCBiaWdfY29weSA+Pj0gNjQpOwotICBiaWdfY29weSA9IGJpZzsKLSAgRVhQ
RUNUX0VRKGJpZyA8PCA3MywgYmlnX2NvcHkgPDw9IDczKTsKLSAgYmlnX2NvcHkgPSBiaWc7Ci0g
IEVYUEVDVF9FUShiaWcgPj4gNzMsIGJpZ19jb3B5ID4+PSA3Myk7Ci0gIGJpZ19jb3B5ID0gYmln
OwotICBFWFBFQ1RfRVEoYmlnIDw8IDEyOCwgYmlnX2NvcHkgPDw9IDEyOCk7Ci0gIGJpZ19jb3B5
ID0gYmlnOwotICBFWFBFQ1RfRVEoYmlnID4+IDEyOCwgYmlnX2NvcHkgPj49IDEyOCk7Ci0KLSAg
RVhQRUNUX0VRKFVpbnQxMjhIaWdoNjQoYmlnZ2VzdCksIGt1aW50NjRtYXgpOwotICBFWFBFQ1Rf
RVEoVWludDEyOExvdzY0KGJpZ2dlc3QpLCBrdWludDY0bWF4KTsKLSAgRVhQRUNUX0VRKHplcm8g
KyBvbmUsIG9uZSk7Ci0gIEVYUEVDVF9FUShvbmUgKyBvbmUsIHR3byk7Ci0gIEVYUEVDVF9FUShi
aWdfbWludXNfb25lICsgb25lLCBiaWcpOwotICBFWFBFQ1RfRVEob25lIC0gb25lLCB6ZXJvKTsK
LSAgRVhQRUNUX0VRKG9uZSAtIHplcm8sIG9uZSk7Ci0gIEVYUEVDVF9FUSh6ZXJvIC0gb25lLCBi
aWdnZXN0KTsKLSAgRVhQRUNUX0VRKGJpZyAtIGJpZywgemVybyk7Ci0gIEVYUEVDVF9FUShiaWcg
LSBvbmUsIGJpZ19taW51c19vbmUpOwotICBFWFBFQ1RfRVEoYmlnICsga3VpbnQ2NG1heCwgYmln
Z2VyKTsKLSAgRVhQRUNUX0VRKGJpZ2dlc3QgKyAxLCB6ZXJvKTsKLSAgRVhQRUNUX0VRKHplcm8g
LSAxLCBiaWdnZXN0KTsKLSAgRVhQRUNUX0VRKGhpZ2hfbG93IC0gb25lLCBsb3dfaGlnaCk7Ci0g
IEVYUEVDVF9FUShsb3dfaGlnaCArIG9uZSwgaGlnaF9sb3cpOwotICBFWFBFQ1RfRVEoVWludDEy
OEhpZ2g2NCgodWludDEyOCgxKSA8PCA2NCkgLSAxKSwgMCk7Ci0gIEVYUEVDVF9FUShVaW50MTI4
TG93NjQoKHVpbnQxMjgoMSkgPDwgNjQpIC0gMSksIGt1aW50NjRtYXgpOwotICBFWFBFQ1RfVFJV
RSghIW9uZSk7Ci0gIEVYUEVDVF9UUlVFKCEhaGlnaF9sb3cpOwotICBFWFBFQ1RfRkFMU0UoISF6
ZXJvKTsKLSAgRVhQRUNUX0ZBTFNFKCFvbmUpOwotICBFWFBFQ1RfRkFMU0UoIWhpZ2hfbG93KTsK
LSAgRVhQRUNUX1RSVUUoIXplcm8pOwotICBFWFBFQ1RfVFJVRSh6ZXJvID09IDApOwotICBFWFBF
Q1RfRkFMU0UoemVybyAhPSAwKTsKLSAgRVhQRUNUX0ZBTFNFKG9uZSA9PSAwKTsKLSAgRVhQRUNU
X1RSVUUob25lICE9IDApOwotCi0gIHVpbnQxMjggdGVzdCA9IHplcm87Ci0gIEVYUEVDVF9FUSgr
K3Rlc3QsIG9uZSk7Ci0gIEVYUEVDVF9FUSh0ZXN0LCBvbmUpOwotICBFWFBFQ1RfRVEodGVzdCsr
LCBvbmUpOwotICBFWFBFQ1RfRVEodGVzdCwgdHdvKTsKLSAgRVhQRUNUX0VRKHRlc3QgLT0gMiwg
emVybyk7Ci0gIEVYUEVDVF9FUSh0ZXN0LCB6ZXJvKTsKLSAgRVhQRUNUX0VRKHRlc3QgKz0gMiwg
dHdvKTsKLSAgRVhQRUNUX0VRKHRlc3QsIHR3byk7Ci0gIEVYUEVDVF9FUSgtLXRlc3QsIG9uZSk7
Ci0gIEVYUEVDVF9FUSh0ZXN0LCBvbmUpOwotICBFWFBFQ1RfRVEodGVzdC0tLCBvbmUpOwotICBF
WFBFQ1RfRVEodGVzdCwgemVybyk7Ci0gIEVYUEVDVF9FUSh0ZXN0IHw9IHRocmVlLCB0aHJlZSk7
Ci0gIEVYUEVDVF9FUSh0ZXN0ICY9IG9uZSwgb25lKTsKLSAgRVhQRUNUX0VRKHRlc3QgXj0gdGhy
ZWUsIHR3byk7Ci0gIEVYUEVDVF9FUSh0ZXN0ID4+PSAxLCBvbmUpOwotICBFWFBFQ1RfRVEodGVz
dCA8PD0gMSwgdHdvKTsKLQotICBFWFBFQ1RfRVEoYmlnLCAtKC1iaWcpKTsKLSAgRVhQRUNUX0VR
KHR3bywgLSgoLW9uZSkgLSAxKSk7Ci0gIEVYUEVDVF9FUShrdWludDEyOG1heCwgLW9uZSk7Ci0g
IEVYUEVDVF9FUSh6ZXJvLCAtemVybyk7Ci0KLSAgR09PR0xFX0xPRyhJTkZPKSA8PCBvbmU7Ci0g
IEdPT0dMRV9MT0coSU5GTykgPDwgYmlnX21pbnVzX29uZTsKLX0KLQotVEVTVChJbnQxMjgsIFBv
ZFRlc3RzKSB7Ci0gIHVpbnQxMjhfcG9kIHBvZCA9IHsgMTIzNDUsIDY3ODkwIH07Ci0gIHVpbnQx
MjggZnJvbV9wb2QocG9kKTsKLSAgRVhQRUNUX0VRKDEyMzQ1LCBVaW50MTI4SGlnaDY0KGZyb21f
cG9kKSk7Ci0gIEVYUEVDVF9FUSg2Nzg5MCwgVWludDEyOExvdzY0KGZyb21fcG9kKSk7Ci0KLSAg
dWludDEyOCB6ZXJvKDApOwotICB1aW50MTI4X3BvZCB6ZXJvX3BvZCA9IHswLCAwfTsKLSAgdWlu
dDEyOCBvbmUoMSk7Ci0gIHVpbnQxMjhfcG9kIG9uZV9wb2QgPSB7MCwgMX07Ci0gIHVpbnQxMjgg
dHdvKDIpOwotICB1aW50MTI4X3BvZCB0d29fcG9kID0gezAsIDJ9OwotICB1aW50MTI4IHRocmVl
KDMpOwotICB1aW50MTI4X3BvZCB0aHJlZV9wb2QgPSB7MCwgM307Ci0gIHVpbnQxMjggYmlnKDEs
IDApOwotICB1aW50MTI4X3BvZCBiaWdfcG9kID0gezEsIDB9OwotCi0gIEVYUEVDVF9FUSh6ZXJv
LCB6ZXJvX3BvZCk7Ci0gIEVYUEVDVF9FUSh6ZXJvX3BvZCwgemVybyk7Ci0gIEVYUEVDVF9FUSh6
ZXJvX3BvZCwgemVyb19wb2QpOwotICBFWFBFQ1RfRVEob25lLCBvbmVfcG9kKTsKLSAgRVhQRUNU
X0VRKG9uZV9wb2QsIG9uZSk7Ci0gIEVYUEVDVF9FUShvbmVfcG9kLCBvbmVfcG9kKTsKLSAgRVhQ
RUNUX0VRKHR3bywgdHdvX3BvZCk7Ci0gIEVYUEVDVF9FUSh0d29fcG9kLCB0d28pOwotICBFWFBF
Q1RfRVEodHdvX3BvZCwgdHdvX3BvZCk7Ci0KLSAgRVhQRUNUX05FKG9uZSwgdHdvX3BvZCk7Ci0g
IEVYUEVDVF9ORShvbmVfcG9kLCB0d28pOwotICBFWFBFQ1RfTkUob25lX3BvZCwgdHdvX3BvZCk7
Ci0KLSAgRVhQRUNUX0xUKG9uZSwgdHdvX3BvZCk7Ci0gIEVYUEVDVF9MVChvbmVfcG9kLCB0d28p
OwotICBFWFBFQ1RfTFQob25lX3BvZCwgdHdvX3BvZCk7Ci0gIEVYUEVDVF9MRShvbmUsIG9uZV9w
b2QpOwotICBFWFBFQ1RfTEUob25lX3BvZCwgb25lKTsKLSAgRVhQRUNUX0xFKG9uZV9wb2QsIG9u
ZV9wb2QpOwotICBFWFBFQ1RfTEUob25lLCB0d29fcG9kKTsKLSAgRVhQRUNUX0xFKG9uZV9wb2Qs
IHR3byk7Ci0gIEVYUEVDVF9MRShvbmVfcG9kLCB0d29fcG9kKTsKLQotICBFWFBFQ1RfR1QodHdv
LCBvbmVfcG9kKTsKLSAgRVhQRUNUX0dUKHR3b19wb2QsIG9uZSk7Ci0gIEVYUEVDVF9HVCh0d29f
cG9kLCBvbmVfcG9kKTsKLSAgRVhQRUNUX0dFKHR3bywgdHdvX3BvZCk7Ci0gIEVYUEVDVF9HRSh0
d29fcG9kLCB0d28pOwotICBFWFBFQ1RfR0UodHdvX3BvZCwgdHdvX3BvZCk7Ci0gIEVYUEVDVF9H
RSh0d28sIG9uZV9wb2QpOwotICBFWFBFQ1RfR0UodHdvX3BvZCwgb25lKTsKLSAgRVhQRUNUX0dF
KHR3b19wb2QsIG9uZV9wb2QpOwotCi0gIEVYUEVDVF9FUSh0aHJlZSwgb25lIHwgdHdvX3BvZCk7
Ci0gIEVYUEVDVF9FUSh0aHJlZSwgb25lX3BvZCB8IHR3byk7Ci0gIEVYUEVDVF9FUSh0aHJlZSwg
b25lX3BvZCB8IHR3b19wb2QpOwotICBFWFBFQ1RfRVEob25lLCB0aHJlZSAmIG9uZV9wb2QpOwot
ICBFWFBFQ1RfRVEob25lLCB0aHJlZV9wb2QgJiBvbmUpOwotICBFWFBFQ1RfRVEob25lLCB0aHJl
ZV9wb2QgJiBvbmVfcG9kKTsKLSAgRVhQRUNUX0VRKHR3bywgdGhyZWUgXiBvbmVfcG9kKTsKLSAg
RVhQRUNUX0VRKHR3bywgdGhyZWVfcG9kIF4gb25lKTsKLSAgRVhQRUNUX0VRKHR3bywgdGhyZWVf
cG9kIF4gb25lX3BvZCk7Ci0gIEVYUEVDVF9FUSh0d28sIHRocmVlICYgKH5vbmUpKTsKLSAgRVhQ
RUNUX0VRKHRocmVlLCB+fnRocmVlKTsKLQotICBFWFBFQ1RfRVEodHdvLCB0d29fcG9kIDw8IDAp
OwotICBFWFBFQ1RfRVEodHdvLCBvbmVfcG9kIDw8IDEpOwotICBFWFBFQ1RfRVEoYmlnLCBvbmVf
cG9kIDw8IDY0KTsKLSAgRVhQRUNUX0VRKHplcm8sIG9uZV9wb2QgPDwgMTI4KTsKLSAgRVhQRUNU
X0VRKHR3bywgdHdvX3BvZCA+PiAwKTsKLSAgRVhQRUNUX0VRKG9uZSwgdHdvX3BvZCA+PiAxKTsK
LSAgRVhQRUNUX0VRKG9uZSwgYmlnX3BvZCA+PiA2NCk7Ci0KLSAgRVhQRUNUX0VRKG9uZSwgemVy
byArIG9uZV9wb2QpOwotICBFWFBFQ1RfRVEob25lLCB6ZXJvX3BvZCArIG9uZSk7Ci0gIEVYUEVD
VF9FUShvbmUsIHplcm9fcG9kICsgb25lX3BvZCk7Ci0gIEVYUEVDVF9FUShvbmUsIHR3byAtIG9u
ZV9wb2QpOwotICBFWFBFQ1RfRVEob25lLCB0d29fcG9kIC0gb25lKTsKLSAgRVhQRUNUX0VRKG9u
ZSwgdHdvX3BvZCAtIG9uZV9wb2QpOwotfQotCi1URVNUKEludDEyOCwgT3BlcmF0b3JBc3NpZ25S
ZXR1cm5SZWYpIHsKLSAgdWludDEyOCB2KDEpOwotICAodiArPSA0KSAtPSAzOwotICBFWFBFQ1Rf
RVEoMiwgdik7Ci19Ci0KLVRFU1QoSW50MTI4LCBNdWx0aXBseSkgewotICB1aW50MTI4IGEsIGIs
IGM7Ci0KLSAgLy8gWmVybyB0ZXN0LgotICBhID0gMDsKLSAgYiA9IDA7Ci0gIGMgPSBhICogYjsK
LSAgRVhQRUNUX0VRKDAsIGMpOwotCi0gIC8vIE1heCBjYXJyaWVzLgotICBhID0gdWludDEyOCgw
KSAtIDE7Ci0gIGIgPSB1aW50MTI4KDApIC0gMTsKLSAgYyA9IGEgKiBiOwotICBFWFBFQ1RfRVEo
MSwgYyk7Ci0KLSAgLy8gU2VsZi1vcGVyYXRpb24gd2l0aCBtYXggY2Fycmllcy4KLSAgYyA9IHVp
bnQxMjgoMCkgLSAxOwotICBjICo9IGM7Ci0gIEVYUEVDVF9FUSgxLCBjKTsKLQotICAvLyAxLWJp
dCB4IDEtYml0LgotICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kpIHsKLSAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDY0OyArK2opIHsKLSAgICAgIGEgPSB1aW50MTI4KDEpIDw8IGk7Ci0gICAg
ICBiID0gdWludDEyOCgxKSA8PCBqOwotICAgICAgYyA9IGEgKiBiOwotICAgICAgRVhQRUNUX0VR
KHVpbnQxMjgoMSkgPDwgKGkraiksIGMpOwotICAgIH0KLSAgfQotCi0gIC8vIFZlcmlmaWVkIHdp
dGggZGMuCi0gIGEgPSB1aW50MTI4KEdPT0dMRV9VTE9OR0xPTkcoMHhmZmZmZWVlZWRkZGRjY2Nj
KSwKLSAgICAgICAgICAgICAgR09PR0xFX1VMT05HTE9ORygweGJiYmJhYWFhOTk5OTg4ODgpKTsK
LSAgYiA9IHVpbnQxMjgoR09PR0xFX1VMT05HTE9ORygweDc3Nzc2NjY2NTU1NTQ0NDQpLAotICAg
ICAgICAgICAgICBHT09HTEVfVUxPTkdMT05HKDB4MzMzMzIyMjIxMTExMDAwMCkpOwotICBjID0g
YSAqIGI7Ci0gIEVYUEVDVF9FUSh1aW50MTI4KEdPT0dMRV9VTE9OR0xPTkcoMHg1MzBFREE3NDFD
NzFENEMzKSwKLSAgICAgICAgICAgICAgICAgICAgR09PR0xFX1VMT05HTE9ORygweEJGMjU5NzUz
MTkwODAwMDApKSwgYyk7Ci0gIEVYUEVDVF9FUSgwLCBjIC0gYiAqIGEpOwotICBFWFBFQ1RfRVEo
YSphIC0gYipiLCAoYStiKSAqIChhLWIpKTsKLQotICAvLyBWZXJpZmllZCB3aXRoIGRjLgotICBh
ID0gdWludDEyOChHT09HTEVfVUxPTkdMT05HKDB4MDEyMzQ1Njc4OWFiY2RlZiksCi0gICAgICAg
ICAgICAgIEdPT0dMRV9VTE9OR0xPTkcoMHhmZWRjYmE5ODc2NTQzMjEwKSk7Ci0gIGIgPSB1aW50
MTI4KEdPT0dMRV9VTE9OR0xPTkcoMHgwMjQ2OGFjZTEzNTc5YmRmKSwKLSAgICAgICAgICAgICAg
R09PR0xFX1VMT05HTE9ORygweGZkYjk3NTMxZWNhODY0MjApKTsKLSAgYyA9IGEgKiBiOwotICBF
WFBFQ1RfRVEodWludDEyOChHT09HTEVfVUxPTkdMT05HKDB4OTdhODdmNGYyNjFiYTNmMiksCi0g
ICAgICAgICAgICAgICAgICAgIEdPT0dMRV9VTE9OR0xPTkcoMHgzNDJkMGJiZjQ4OTQ4MjAwKSks
IGMpOwotICBFWFBFQ1RfRVEoMCwgYyAtIGIgKiBhKTsKLSAgRVhQRUNUX0VRKGEqYSAtIGIqYiwg
KGErYikgKiAoYS1iKSk7Ci19Ci0KLVRFU1QoSW50MTI4LCBBbGlhc1Rlc3RzKSB7Ci0gIHVpbnQx
MjggeDEoMSwgMik7Ci0gIHVpbnQxMjggeDIoMiwgNCk7Ci0gIHgxICs9IHgxOwotICBFWFBFQ1Rf
RVEoeDIsIHgxKTsKLQotICB1aW50MTI4IHgzKDEsIHN0YXRpY19jYXN0PHVpbnQ2ND4oMSkgPDwg
NjMpOwotICB1aW50MTI4IHg0KDMsIDApOwotICB4MyArPSB4MzsKLSAgRVhQRUNUX0VRKHg0LCB4
Myk7Ci19Ci0KLSNpZmRlZiBQUk9UT0JVRl9IQVNfREVBVEhfVEVTVAotVEVTVChJbnQxMjgsIERp
dmlkZUJ5WmVyb0NoZWNrRmFpbHMpIHsKLSAgdWludDEyOCBhID0gMDsKLSAgdWludDEyOCBiID0g
MDsKLSAgRVhQRUNUX0RFQVRIKGEgLyBiLCAiRGl2aXNpb24gb3IgbW9kIGJ5IHplcm86Iik7Ci0g
IGEgPSAxMjM7Ci0gIEVYUEVDVF9ERUFUSChhIC8gYiwgIkRpdmlzaW9uIG9yIG1vZCBieSB6ZXJv
OiIpOwotfQotCi1URVNUKEludDEyOCwgTW9kQnlaZXJvQ2hlY2tGYWlscykgewotICB1aW50MTI4
IGEgPSAwOwotICB1aW50MTI4IGIgPSAwOwotICBFWFBFQ1RfREVBVEgoYSAlIGIsICJEaXZpc2lv
biBvciBtb2QgYnkgemVybzoiKTsKLSAgYSA9IDEyMzsKLSAgRVhQRUNUX0RFQVRIKGEgJSBiLCAi
RGl2aXNpb24gb3IgbW9kIGJ5IHplcm86Iik7Ci19Ci0jZW5kaWYgIC8vIFBST1RPQlVGX0hBU19E
RUFUSF9URVNUCi0KLVRFU1QoSW50MTI4LCBEaXZpZGVBbmRNb2QpIHsKLSAgLy8gYSA6PSBxICog
YiArIHIKLSAgdWludDEyOCBhLCBiLCBxLCByOwotCi0gIC8vIFplcm8gdGVzdC4KLSAgYSA9IDA7
Ci0gIGIgPSAxMjM7Ci0gIHEgPSBhIC8gYjsKLSAgciA9IGEgJSBiOwotICBFWFBFQ1RfRVEoMCwg
cSk7Ci0gIEVYUEVDVF9FUSgwLCByKTsKLQotICBhID0gdWludDEyOChHT09HTEVfVUxPTkdMT05H
KDB4NTMwZWRhNzQxYzcxZDRjMyksCi0gICAgICAgICAgICAgIEdPT0dMRV9VTE9OR0xPTkcoMHhi
ZjI1OTc1MzE5MDgwMDAwKSk7Ci0gIHEgPSB1aW50MTI4KEdPT0dMRV9VTE9OR0xPTkcoMHg0ZGUy
Y2FiMDgxKSwKLSAgICAgICAgICAgICAgR09PR0xFX1VMT05HTE9ORygweDE0YzM0YWI0Njc2ZTRi
YWIpKTsKLSAgYiA9IHVpbnQxMjgoMHgxMTEwMDAxKTsKLSAgciA9IHVpbnQxMjgoMHgzZWI0NTUp
OwotICBBU1NFUlRfRVEoYSwgcSAqIGIgKyByKTsgIC8vIFNhbml0eS1jaGVjay4KLQotICB1aW50
MTI4IHJlc3VsdF9xLCByZXN1bHRfcjsKLSAgcmVzdWx0X3EgPSBhIC8gYjsKLSAgcmVzdWx0X3Ig
PSBhICUgYjsKLSAgRVhQRUNUX0VRKHEsIHJlc3VsdF9xKTsKLSAgRVhQRUNUX0VRKHIsIHJlc3Vs
dF9yKTsKLQotICAvLyBUcnkgdGhlIG90aGVyIHdheSBhcm91bmQuCi0gIHN3YXAocSwgYik7Ci0g
IHJlc3VsdF9xID0gYSAvIGI7Ci0gIHJlc3VsdF9yID0gYSAlIGI7Ci0gIEVYUEVDVF9FUShxLCBy
ZXN1bHRfcSk7Ci0gIEVYUEVDVF9FUShyLCByZXN1bHRfcik7Ci0gIC8vIFJlc3RvcmUuCi0gIHN3
YXAoYiwgcSk7Ci0KLSAgLy8gRGl2aWRlbmQgPCBkaXZpc29yOyByZXN1bHQgc2hvdWxkIGJlIHE6
MCByOjxkaXZpZGVuZD4uCi0gIHN3YXAoYSwgYik7Ci0gIHJlc3VsdF9xID0gYSAvIGI7Ci0gIHJl
c3VsdF9yID0gYSAlIGI7Ci0gIEVYUEVDVF9FUSgwLCByZXN1bHRfcSk7Ci0gIEVYUEVDVF9FUShh
LCByZXN1bHRfcik7Ci0gIC8vIFRyeSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KLSAgc3dhcChhLCBx
KTsKLSAgcmVzdWx0X3EgPSBhIC8gYjsKLSAgcmVzdWx0X3IgPSBhICUgYjsKLSAgRVhQRUNUX0VR
KDAsIHJlc3VsdF9xKTsKLSAgRVhQRUNUX0VRKGEsIHJlc3VsdF9yKTsKLSAgLy8gUmVzdG9yZS4K
LSAgc3dhcChxLCBhKTsKLSAgc3dhcChiLCBhKTsKLQotICAvLyBUcnkgYSBsYXJnZSByZW1haW5k
ZXIuCi0gIGIgPSBhIC8gMiArIDE7Ci0gIHVpbnQxMjggZXhwZWN0ZWRfcihHT09HTEVfVUxPTkdM
T05HKDB4Mjk4NzZkM2EwZTM4ZWE2MSksCi0gICAgICAgICAgICAgICAgICAgICBHT09HTEVfVUxP
TkdMT05HKDB4ZGY5MmNiYTk4YzgzZmZmZikpOwotICAvLyBTYW5pdHkgY2hlY2tzLgotICBBU1NF
UlRfRVEoYSAvIDIgLSAxLCBleHBlY3RlZF9yKTsKLSAgQVNTRVJUX0VRKGEsIGIgKyBleHBlY3Rl
ZF9yKTsKLSAgcmVzdWx0X3EgPSBhIC8gYjsKLSAgcmVzdWx0X3IgPSBhICUgYjsKLSAgRVhQRUNU
X0VRKDEsIHJlc3VsdF9xKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkX3IsIHJlc3VsdF9yKTsKLX0K
LQotc3RhdGljIHVpbnQ2NCBSYW5kb21VaW50NjQoKSB7Ci0gIHVpbnQ2NCB2MSA9IHJhbmQoKTsK
LSAgdWludDY0IHYyID0gcmFuZCgpOwotICB1aW50NjQgdjMgPSByYW5kKCk7Ci0gIHJldHVybiB2
MSAqIHYyICsgdjM7Ci19Ci0KLVRFU1QoSW50MTI4LCBEaXZpZGVBbmRNb2RSYW5kb21JbnB1dHMp
IHsKLSAgY29uc3QgaW50IGtOdW1JdGVycyA9IDEgPDwgMTg7Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDwga051bUl0ZXJzOyArK2kpIHsKLSAgICBjb25zdCB1aW50MTI4IGEoUmFuZG9tVWludDY0KCks
IFJhbmRvbVVpbnQ2NCgpKTsKLSAgICBjb25zdCB1aW50MTI4IGIoUmFuZG9tVWludDY0KCksIFJh
bmRvbVVpbnQ2NCgpKTsKLSAgICBpZiAoYiA9PSAwKSB7Ci0gICAgICBjb250aW51ZTsgIC8vIEF2
b2lkIGEgZGl2LWJ5LXplcm8uCi0gICAgfQotICAgIGNvbnN0IHVpbnQxMjggcSA9IGEgLyBiOwot
ICAgIGNvbnN0IHVpbnQxMjggciA9IGEgJSBiOwotICAgIEFTU0VSVF9FUShhLCBiICogcSArIHIp
OwotICB9Ci19Ci0KLSNpZmRlZiBHT09HTEVfUFJPVE9CVUZfSEFTX0NPTlNURVhQUgotVEVTVChJ
bnQxMjgsIENvbnN0ZXhwclRlc3QpIHsKLSAgY29uc3RleHByIHVpbnQxMjggemVybzsKLSAgY29u
c3RleHByIHVpbnQxMjggb25lID0gMTsKLSAgY29uc3RleHByIHVpbnQxMjhfcG9kIHBvZCA9IHsy
LCAzfTsKLSAgY29uc3RleHByIHVpbnQxMjggZnJvbV9wb2QgPSBwb2Q7Ci0gIGNvbnN0ZXhwciB1
aW50MTI4IG1pbnVzX3R3byA9IC0yOwotICBFWFBFQ1RfRVEob25lLCB1aW50MTI4KDEpKTsKLSAg
RVhQRUNUX0VRKGZyb21fcG9kLCB1aW50MTI4KDIsIDMpKTsKLSAgRVhQRUNUX0VRKG1pbnVzX3R3
bywgdWludDEyOCgtMVVMTCwgLTJVTEwpKTsKLX0KLQotVEVTVChJbnQxMjgsIFRyYWl0cykgewot
ICBFWFBFQ1RfVFJVRShzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGU8dWludDEy
OD46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoc3RkOjppc190cml2aWFsbHlfY29weV9hc3NpZ25h
YmxlPHVpbnQxMjg+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTx1aW50MTI4Pjo6dmFsdWUpOwotfQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9C
VUZfSEFTX0NPTlNURVhQUgotCi1URVNUKEludDEyOCwgT1N0cmVhbSkgewotICBzdHJ1Y3Qgewot
ICAgIHVpbnQxMjggdmFsOwotICAgIHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzIGZsYWdzOwotICAg
IHN0ZDo6c3RyZWFtc2l6ZSB3aWR0aDsKLSAgICBjaGFyIGZpbGw7Ci0gICAgY29uc3QgY2hhciog
cmVwOwotICB9IGNhc2VzW10gPSB7Ci0gICAgICAgIC8vIHplcm8gd2l0aCBkaWZmZXJlbnQgYmFz
ZXMKLSAgICAgICAge3VpbnQxMjgoMCksIHN0ZDo6aW9zOjpkZWMsIDAsICdfJywgIjAifSwKLSAg
ICAgICAge3VpbnQxMjgoMCksIHN0ZDo6aW9zOjpvY3QsIDAsICdfJywgIjAifSwKLSAgICAgICAg
e3VpbnQxMjgoMCksIHN0ZDo6aW9zOjpoZXgsIDAsICdfJywgIjAifSwKLSAgICAgICAgLy8gY3Jv
c3NvdmVyIGJldHdlZW4gbG9fIGFuZCBoaV8KLSAgICAgICAge3VpbnQxMjgoMCwgLTEpLCBzdGQ6
Omlvczo6ZGVjLCAwLCAnXycsICIxODQ0Njc0NDA3MzcwOTU1MTYxNSJ9LAotICAgICAgICB7dWlu
dDEyOCgwLCAtMSksIHN0ZDo6aW9zOjpvY3QsIDAsICdfJywgIjE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3
NzcifSwKLSAgICAgICAge3VpbnQxMjgoMCwgLTEpLCBzdGQ6Omlvczo6aGV4LCAwLCAnXycsICJm
ZmZmZmZmZmZmZmZmZmZmIn0sCi0gICAgICAgIHt1aW50MTI4KDEsIDApLCBzdGQ6Omlvczo6ZGVj
LCAwLCAnXycsICIxODQ0Njc0NDA3MzcwOTU1MTYxNiJ9LAotICAgICAgICB7dWludDEyOCgxLCAw
KSwgc3RkOjppb3M6Om9jdCwgMCwgJ18nLCAiMjAwMDAwMDAwMDAwMDAwMDAwMDAwMCJ9LAotICAg
ICAgICB7dWludDEyOCgxLCAwKSwgc3RkOjppb3M6OmhleCwgMCwgJ18nLCAiMTAwMDAwMDAwMDAw
MDAwMDAifSwKLSAgICAgICAgLy8ganVzdCB0aGUgdG9wIGJpdAotICAgICAgICB7dWludDEyOChH
T09HTEVfVUxPTkdMT05HKDB4ODAwMDAwMDAwMDAwMDAwMCksIDApLCBzdGQ6Omlvczo6ZGVjLCAw
LCAnXycsCi0gICAgICAgICAiMTcwMTQxMTgzNDYwNDY5MjMxNzMxNjg3MzAzNzE1ODg0MTA1NzI4
In0sCi0gICAgICAgIHt1aW50MTI4KEdPT0dMRV9VTE9OR0xPTkcoMHg4MDAwMDAwMDAwMDAwMDAw
KSwgMCksIHN0ZDo6aW9zOjpvY3QsIDAsICdfJywKLSAgICAgICAgICIyMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn0sCi0gICAgICAgIHt1aW50MTI4KEdPT0dMRV9V
TE9OR0xPTkcoMHg4MDAwMDAwMDAwMDAwMDAwKSwgMCksIHN0ZDo6aW9zOjpoZXgsIDAsICdfJywK
LSAgICAgICAgICI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJ9LAotICAgICAgICAv
LyBtYXhpbXVtIHVpbnQxMjggdmFsdWUKLSAgICAgICAge3VpbnQxMjgoLTEsIC0xKSwgc3RkOjpp
b3M6OmRlYywgMCwgJ18nLAotICAgICAgICAgIjM0MDI4MjM2NjkyMDkzODQ2MzQ2MzM3NDYwNzQz
MTc2ODIxMTQ1NSJ9LAotICAgICAgICB7dWludDEyOCgtMSwgLTEpLCBzdGQ6Omlvczo6b2N0LCAw
LCAnXycsCi0gICAgICAgICAiMzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3
Nzc3NyJ9LAotICAgICAgICB7dWludDEyOCgtMSwgLTEpLCBzdGQ6Omlvczo6aGV4LCAwLCAnXycs
Ci0gICAgICAgICAiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYifSwKLSAgICAgICAg
Ly8gdXBwZXJjYXNlCi0gICAgICAgIHt1aW50MTI4KC0xLCAtMSksIHN0ZDo6aW9zOjpoZXggfCBz
dGQ6Omlvczo6dXBwZXJjYXNlLCAwLCAnXycsCi0gICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZG
RkZGRkZGRkZGRkZGRkYifSwKLSAgICAgICAgLy8gc2hvd2Jhc2UKLSAgICAgICAge3VpbnQxMjgo
MSksIHN0ZDo6aW9zOjpkZWMgfCBzdGQ6Omlvczo6c2hvd2Jhc2UsIDAsICdfJywgIjEifSwKLSAg
ICAgICAge3VpbnQxMjgoMSksIHN0ZDo6aW9zOjpvY3QgfCBzdGQ6Omlvczo6c2hvd2Jhc2UsIDAs
ICdfJywgIjAxIn0sCi0gICAgICAgIHt1aW50MTI4KDEpLCBzdGQ6Omlvczo6aGV4IHwgc3RkOjpp
b3M6OnNob3diYXNlLCAwLCAnXycsICIweDEifSwKLSAgICAgICAgLy8gc2hvd2Jhc2UgZG9lcyBu
b3RoaW5nIG9uIHplcm8KLSAgICAgICAge3VpbnQxMjgoMCksIHN0ZDo6aW9zOjpkZWMgfCBzdGQ6
Omlvczo6c2hvd2Jhc2UsIDAsICdfJywgIjAifSwKLSAgICAgICAge3VpbnQxMjgoMCksIHN0ZDo6
aW9zOjpvY3QgfCBzdGQ6Omlvczo6c2hvd2Jhc2UsIDAsICdfJywgIjAifSwKLSAgICAgICAge3Vp
bnQxMjgoMCksIHN0ZDo6aW9zOjpoZXggfCBzdGQ6Omlvczo6c2hvd2Jhc2UsIDAsICdfJywgIjAi
fSwKLSAgICAgICAgLy8gc2hvd3BvcyBkb2VzIG5vdGhpbmcgb24gdW5zaWduZWQgdHlwZXMKLSAg
ICAgICAge3VpbnQxMjgoMSksIHN0ZDo6aW9zOjpkZWMgfCBzdGQ6Omlvczo6c2hvd3BvcywgMCwg
J18nLCAiMSJ9LAotICAgICAgICAvLyBwYWRkaW5nCi0gICAgICAgIHt1aW50MTI4KDkpLCBzdGQ6
Omlvczo6ZGVjLCA2LCAnXycsICJfX19fXzkifSwKLSAgICAgICAge3VpbnQxMjgoMTIzNDUpLCBz
dGQ6Omlvczo6ZGVjLCA2LCAnXycsICJfMTIzNDUifSwKLSAgICAgICAgLy8gbGVmdCBhZGp1c3Rt
ZW50Ci0gICAgICAgIHt1aW50MTI4KDkpLCBzdGQ6Omlvczo6ZGVjIHwgc3RkOjppb3M6OmxlZnQs
IDYsICdfJywgIjlfX19fXyJ9LAotICAgICAgICB7dWludDEyOCgxMjM0NSksIHN0ZDo6aW9zOjpk
ZWMgfCBzdGQ6Omlvczo6bGVmdCwgNiwgJ18nLCAiMTIzNDVfIn0sCi0gIH07Ci0gIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgR09PR0xFX0FSUkFZU0laRShjYXNlcyk7ICsraSkgewotICAgIG9zdHJp
bmdzdHJlYW0gb3M7Ci0gICAgb3MuZmxhZ3MoY2FzZXNbaV0uZmxhZ3MpOwotICAgIG9zLndpZHRo
KGNhc2VzW2ldLndpZHRoKTsKLSAgICBvcy5maWxsKGNhc2VzW2ldLmZpbGwpOwotICAgIG9zIDw8
IGNhc2VzW2ldLnZhbDsKLSAgICBFWFBFQ1RfRVEoY2FzZXNbaV0ucmVwLCBvcy5zdHIoKSk7Ci0g
IH0KLX0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGY2OTYwNWQ5ZjYzOTM3MzUxMDJlNjk4NzMzOTVmMzAxODhhMWIyZmQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2xvZ2dpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfU1RVQlNfTE9H
R0lOR19IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfU1RVQlNfTE9HR0lOR19IXwotCi0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hY3Jvcy5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9wb3J0Lmg+Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGVtdWxhdGVzIGdvb2ds
ZTMvYmFzZS9sb2dnaW5nLmgKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9i
dWYgewotCi1lbnVtIExvZ0xldmVsIHsKLSAgTE9HTEVWRUxfSU5GTywgICAgIC8vIEluZm9ybWF0
aW9uYWwuICBUaGlzIGlzIG5ldmVyIGFjdHVhbGx5IHVzZWQgYnkKLSAgICAgICAgICAgICAgICAg
ICAgIC8vIGxpYnByb3RvYnVmLgotICBMT0dMRVZFTF9XQVJOSU5HLCAgLy8gV2FybnMgYWJvdXQg
aXNzdWVzIHRoYXQsIGFsdGhvdWdoIG5vdCB0ZWNobmljYWxseSBhCi0gICAgICAgICAgICAgICAg
ICAgICAvLyBwcm9ibGVtIG5vdywgY291bGQgY2F1c2UgcHJvYmxlbXMgaW4gdGhlIGZ1dHVyZS4g
IEZvcgotICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZSwgYSAvLyB3YXJuaW5nIHdpbGwg
YmUgcHJpbnRlZCB3aGVuIHBhcnNpbmcgYQotICAgICAgICAgICAgICAgICAgICAgLy8gbWVzc2Fn
ZSB0aGF0IGlzIG5lYXIgdGhlIG1lc3NhZ2Ugc2l6ZSBsaW1pdC4KLSAgTE9HTEVWRUxfRVJST1Is
ICAgIC8vIEFuIGVycm9yIG9jY3VycmVkIHdoaWNoIHNob3VsZCBuZXZlciBoYXBwZW4gZHVyaW5n
Ci0gICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWwgdXNlLgotICBMT0dMRVZFTF9GQVRBTCwg
ICAgLy8gQW4gZXJyb3Igb2NjdXJyZWQgZnJvbSB3aGljaCB0aGUgbGlicmFyeSBjYW5ub3QKLSAg
ICAgICAgICAgICAgICAgICAgIC8vIHJlY292ZXIuICBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEg
cHJvZ3JhbW1pbmcgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjb2RlIHdo
aWNoIGNhbGxzIHRoZSBsaWJyYXJ5LCBlc3BlY2lhbGx5IHdoZW4KLSAgICAgICAgICAgICAgICAg
ICAgIC8vIGNvbXBpbGVkIGluIGRlYnVnIG1vZGUuCi0KLSNpZmRlZiBOREVCVUcKLSAgTE9HTEVW
RUxfREZBVEFMID0gTE9HTEVWRUxfRVJST1IKLSNlbHNlCi0gIExPR0xFVkVMX0RGQVRBTCA9IExP
R0xFVkVMX0ZBVEFMCi0jZW5kaWYKLX07Ci0KLWNsYXNzIFN0cmluZ1BpZWNlOwotbmFtZXNwYWNl
IHV0aWwgewotY2xhc3MgU3RhdHVzOwotfQotY2xhc3MgdWludDEyODsKLW5hbWVzcGFjZSBpbnRl
cm5hbCB7Ci0KLWNsYXNzIExvZ0ZpbmlzaGVyOwotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQg
TG9nTWVzc2FnZSB7Ci0gcHVibGljOgotICBMb2dNZXNzYWdlKExvZ0xldmVsIGxldmVsLCBjb25z
dCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmUpOwotICB+TG9nTWVzc2FnZSgpOwotCi0gIExvZ01l
c3NhZ2UmIG9wZXJhdG9yPDwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgTG9nTWVzc2Fn
ZSYgb3BlcmF0b3I8PChjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIExvZ01lc3NhZ2UmIG9wZXJhdG9y
PDwoY2hhciB2YWx1ZSk7Ci0gIExvZ01lc3NhZ2UmIG9wZXJhdG9yPDwoaW50IHZhbHVlKTsKLSAg
TG9nTWVzc2FnZSYgb3BlcmF0b3I8PCh1aW50IHZhbHVlKTsKLSAgTG9nTWVzc2FnZSYgb3BlcmF0
b3I8PChsb25nIHZhbHVlKTsKLSAgTG9nTWVzc2FnZSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25n
IHZhbHVlKTsKLSAgTG9nTWVzc2FnZSYgb3BlcmF0b3I8PChsb25nIGxvbmcgdmFsdWUpOwotICBM
b2dNZXNzYWdlJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSk7Ci0gIExvZ01l
c3NhZ2UmIG9wZXJhdG9yPDwoZG91YmxlIHZhbHVlKTsKLSAgTG9nTWVzc2FnZSYgb3BlcmF0b3I8
PCh2b2lkKiB2YWx1ZSk7Ci0gIExvZ01lc3NhZ2UmIG9wZXJhdG9yPDwoY29uc3QgU3RyaW5nUGll
Y2UmIHZhbHVlKTsKLSAgTG9nTWVzc2FnZSYgb3BlcmF0b3I8PChjb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OnV0aWw6OlN0YXR1cyYgc3RhdHVzKTsKLSAgTG9nTWVzc2FnZSYgb3BlcmF0b3I8PChj
b25zdCB1aW50MTI4JiB2YWx1ZSk7Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgTG9nRmlu
aXNoZXI7Ci0gIHZvaWQgRmluaXNoKCk7Ci0KLSAgTG9nTGV2ZWwgbGV2ZWxfOwotICBjb25zdCBj
aGFyKiBmaWxlbmFtZV87Ci0gIGludCBsaW5lXzsKLSAgc3RkOjpzdHJpbmcgbWVzc2FnZV87Ci19
OwotCi0vLyBVc2VkIHRvIG1ha2UgdGhlIGVudGlyZSAiTE9HKEJMQUgpIDw8IGV0Yy4iIGV4cHJl
c3Npb24gaGF2ZSBhIHZvaWQgcmV0dXJuCi0vLyB0eXBlIGFuZCBwcmludCBhIG5ld2xpbmUgYWZ0
ZXIgZWFjaCBtZXNzYWdlLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIExvZ0ZpbmlzaGVyIHsK
LSBwdWJsaWM6Ci0gIHZvaWQgb3BlcmF0b3I9KExvZ01lc3NhZ2UmIG90aGVyKTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1ib29sIElzT2soVCBzdGF0dXMpIHsgcmV0dXJuIHN0YXR1cy5v
aygpOyB9Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUgYm9vbCBJc09rKGJvb2wgc3RhdHVzKSB7IHJldHVy
biBzdGF0dXM7IH0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLS8vIFVuZGVmIGV2ZXJ5
dGhpbmcgaW4gY2FzZSB3ZSdyZSBiZWluZyBtaXhlZCB3aXRoIHNvbWUgb3RoZXIgR29vZ2xlIGxp
YnJhcnkKLS8vIHdoaWNoIGFscmVhZHkgZGVmaW5lZCB0aGVtIGl0c2VsZi4gIFByZXN1bWFibHkg
YWxsIEdvb2dsZSBsaWJyYXJpZXMgd2lsbAotLy8gc3VwcG9ydCB0aGUgc2FtZSBzeW50YXggZm9y
IHRoZXNlIHNvIGl0IHNob3VsZCBub3QgYmUgYSBiaWcgZGVhbCBpZiB0aGV5Ci0vLyBlbmQgdXAg
dXNpbmcgb3VyIGRlZmluaXRpb25zIGluc3RlYWQuCi0jdW5kZWYgR09PR0xFX0xPRwotI3VuZGVm
IEdPT0dMRV9MT0dfSUYKLQotI3VuZGVmIEdPT0dMRV9DSEVDSwotI3VuZGVmIEdPT0dMRV9DSEVD
S19PSwotI3VuZGVmIEdPT0dMRV9DSEVDS19FUQotI3VuZGVmIEdPT0dMRV9DSEVDS19ORQotI3Vu
ZGVmIEdPT0dMRV9DSEVDS19MVAotI3VuZGVmIEdPT0dMRV9DSEVDS19MRQotI3VuZGVmIEdPT0dM
RV9DSEVDS19HVAotI3VuZGVmIEdPT0dMRV9DSEVDS19HRQotI3VuZGVmIEdPT0dMRV9DSEVDS19O
T1ROVUxMCi0KLSN1bmRlZiBHT09HTEVfRExPRwotI3VuZGVmIEdPT0dMRV9EQ0hFQ0sKLSN1bmRl
ZiBHT09HTEVfRENIRUNLX09LCi0jdW5kZWYgR09PR0xFX0RDSEVDS19FUQotI3VuZGVmIEdPT0dM
RV9EQ0hFQ0tfTkUKLSN1bmRlZiBHT09HTEVfRENIRUNLX0xUCi0jdW5kZWYgR09PR0xFX0RDSEVD
S19MRQotI3VuZGVmIEdPT0dMRV9EQ0hFQ0tfR1QKLSN1bmRlZiBHT09HTEVfRENIRUNLX0dFCi0K
LSNkZWZpbmUgR09PR0xFX0xPRyhMRVZFTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpMb2dG
aW5pc2hlcigpID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6TG9nTWVzc2FnZSggICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TE9HTEVWRUxfIyNMRVZFTCwgX19GSUxFX18s
IF9fTElORV9fKQotI2RlZmluZSBHT09HTEVfTE9HX0lGKExFVkVMLCBDT05ESVRJT04pIFwKLSAg
IShDT05ESVRJT04pID8gKHZvaWQpMCA6IEdPT0dMRV9MT0coTEVWRUwpCi0KLSNkZWZpbmUgR09P
R0xFX0NIRUNLKEVYUFJFU1NJT04pIFwKLSAgR09PR0xFX0xPR19JRihGQVRBTCwgIShFWFBSRVNT
SU9OKSkgPDwgIkNIRUNLIGZhaWxlZDogIiAjRVhQUkVTU0lPTiAiOiAiCi0jZGVmaW5lIEdPT0dM
RV9DSEVDS19PSyhBKSBHT09HTEVfQ0hFQ0soOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
SXNPayhBKSkKLSNkZWZpbmUgR09PR0xFX0NIRUNLX0VRKEEsIEIpIEdPT0dMRV9DSEVDSygoQSkg
PT0gKEIpKQotI2RlZmluZSBHT09HTEVfQ0hFQ0tfTkUoQSwgQikgR09PR0xFX0NIRUNLKChBKSAh
PSAoQikpCi0jZGVmaW5lIEdPT0dMRV9DSEVDS19MVChBLCBCKSBHT09HTEVfQ0hFQ0soKEEpIDwg
IChCKSkKLSNkZWZpbmUgR09PR0xFX0NIRUNLX0xFKEEsIEIpIEdPT0dMRV9DSEVDSygoQSkgPD0g
KEIpKQotI2RlZmluZSBHT09HTEVfQ0hFQ0tfR1QoQSwgQikgR09PR0xFX0NIRUNLKChBKSA+ICAo
QikpCi0jZGVmaW5lIEdPT0dMRV9DSEVDS19HRShBLCBCKSBHT09HTEVfQ0hFQ0soKEEpID49IChC
KSkKLQotbmFtZXNwYWNlIGludGVybmFsIHsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UKiBDaGVj
a05vdE51bGwoY29uc3QgY2hhciogLyogZmlsZSAqLywgaW50IC8qIGxpbmUgKi8sCi0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogbmFtZSwgVCogdmFsKSB7Ci0gIGlmICh2YWwgPT0gTlVMTCkg
ewotICAgIEdPT0dMRV9MT0coRkFUQUwpIDw8IG5hbWU7Ci0gIH0KLSAgcmV0dXJuIHZhbDsKLX0K
LX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotI2RlZmluZSBHT09HTEVfQ0hFQ0tfTk9UTlVMTChB
KSBcCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkNoZWNrTm90TnVsbChcCi0gICAg
ICBfX0ZJTEVfXywgX19MSU5FX18sICInIiAjQSAiJyBtdXN0IG5vdCBiZSBOVUxMIiwgKEEpKQot
Ci0jaWZkZWYgTkRFQlVHCi0KLSNkZWZpbmUgR09PR0xFX0RMT0coTEVWRUwpIEdPT0dMRV9MT0df
SUYoTEVWRUwsIGZhbHNlKQotCi0jZGVmaW5lIEdPT0dMRV9EQ0hFQ0soRVhQUkVTU0lPTikgd2hp
bGUoZmFsc2UpIEdPT0dMRV9DSEVDSyhFWFBSRVNTSU9OKQotI2RlZmluZSBHT09HTEVfRENIRUNL
X09LKEUpIEdPT0dMRV9EQ0hFQ0soOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SXNPayhF
KSkKLSNkZWZpbmUgR09PR0xFX0RDSEVDS19FUShBLCBCKSBHT09HTEVfRENIRUNLKChBKSA9PSAo
QikpCi0jZGVmaW5lIEdPT0dMRV9EQ0hFQ0tfTkUoQSwgQikgR09PR0xFX0RDSEVDSygoQSkgIT0g
KEIpKQotI2RlZmluZSBHT09HTEVfRENIRUNLX0xUKEEsIEIpIEdPT0dMRV9EQ0hFQ0soKEEpIDwg
IChCKSkKLSNkZWZpbmUgR09PR0xFX0RDSEVDS19MRShBLCBCKSBHT09HTEVfRENIRUNLKChBKSA8
PSAoQikpCi0jZGVmaW5lIEdPT0dMRV9EQ0hFQ0tfR1QoQSwgQikgR09PR0xFX0RDSEVDSygoQSkg
PiAgKEIpKQotI2RlZmluZSBHT09HTEVfRENIRUNLX0dFKEEsIEIpIEdPT0dMRV9EQ0hFQ0soKEEp
ID49IChCKSkKLQotI2Vsc2UgIC8vIE5ERUJVRwotCi0jZGVmaW5lIEdPT0dMRV9ETE9HIEdPT0dM
RV9MT0cKLQotI2RlZmluZSBHT09HTEVfRENIRUNLICAgIEdPT0dMRV9DSEVDSwotI2RlZmluZSBH
T09HTEVfRENIRUNLX09LIEdPT0dMRV9DSEVDS19PSwotI2RlZmluZSBHT09HTEVfRENIRUNLX0VR
IEdPT0dMRV9DSEVDS19FUQotI2RlZmluZSBHT09HTEVfRENIRUNLX05FIEdPT0dMRV9DSEVDS19O
RQotI2RlZmluZSBHT09HTEVfRENIRUNLX0xUIEdPT0dMRV9DSEVDS19MVAotI2RlZmluZSBHT09H
TEVfRENIRUNLX0xFIEdPT0dMRV9DSEVDS19MRQotI2RlZmluZSBHT09HTEVfRENIRUNLX0dUIEdP
T0dMRV9DSEVDS19HVAotI2RlZmluZSBHT09HTEVfRENIRUNLX0dFIEdPT0dMRV9DSEVDS19HRQot
Ci0jZW5kaWYgIC8vICFOREVCVUcKLQotdHlwZWRlZiB2b2lkIExvZ0hhbmRsZXIoTG9nTGV2ZWwg
bGV2ZWwsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKTsKLQotLy8gVGhlIHByb3RvYnVmIGxp
YnJhcnkgc29tZXRpbWVzIHdyaXRlcyB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcyB0bwotLy8g
c3RkZXJyLiAgVGhlc2UgbWVzc2FnZXMgYXJlIHByaW1hcmlseSB1c2VmdWwgZm9yIGRldmVsb3Bl
cnMsIGJ1dCBtYXkKLS8vIGFsc28gaGVscCBlbmQgdXNlcnMgZmlndXJlIG91dCBhIHByb2JsZW0u
ICBJZiB5b3Ugd291bGQgcHJlZmVyIHRoYXQKLS8vIHRoZXNlIG1lc3NhZ2VzIGJlIHNlbnQgc29t
ZXdoZXJlIG90aGVyIHRoYW4gc3RkZXJyLCBjYWxsIFNldExvZ0hhbmRsZXIoKQotLy8gdG8gc2V0
IHlvdXIgb3duIGhhbmRsZXIuICBUaGlzIHJldHVybnMgdGhlIG9sZCBoYW5kbGVyLiAgU2V0IHRo
ZSBoYW5kbGVyCi0vLyB0byBOVUxMIHRvIGlnbm9yZSBsb2cgbWVzc2FnZXMgKGJ1dCBzZWUgYWxz
byBMb2dTaWxlbmNlciwgYmVsb3cpLgotLy8KLS8vIE9idmlvdXNseSwgU2V0TG9nSGFuZGxlciBp
cyBub3QgdGhyZWFkLXNhZmUuICBZb3Ugc2hvdWxkIG9ubHkgY2FsbCBpdAotLy8gYXQgaW5pdGlh
bGl6YXRpb24gdGltZSwgYW5kIHByb2JhYmx5IG5vdCBmcm9tIGxpYnJhcnkgY29kZS4gIElmIHlv
dQotLy8gc2ltcGx5IHdhbnQgdG8gc3VwcHJlc3MgbG9nIG1lc3NhZ2VzIHRlbXBvcmFyaWx5IChl
LmcuIGJlY2F1c2UgeW91Ci0vLyBoYXZlIHNvbWUgY29kZSB0aGF0IHRlbmRzIHRvIHRyaWdnZXIg
dGhlbSBmcmVxdWVudGx5IGFuZCB5b3Uga25vdwotLy8gdGhlIHdhcm5pbmdzIGFyZSBub3QgaW1w
b3J0YW50IHRvIHlvdSksIHVzZSB0aGUgTG9nU2lsZW5jZXIgY2xhc3MKLS8vIGJlbG93LgotTElC
UFJPVE9CVUZfRVhQT1JUIExvZ0hhbmRsZXIqIFNldExvZ0hhbmRsZXIoTG9nSGFuZGxlciogbmV3
X2Z1bmMpOwotCi0vLyBDcmVhdGUgYSBMb2dTaWxlbmNlciBpZiB5b3Ugd2FudCB0byB0ZW1wb3Jh
cmlseSBzdXBwcmVzcyBhbGwgbG9nCi0vLyBtZXNzYWdlcy4gIEFzIGxvbmcgYXMgYW55IExvZ1Np
bGVuY2VyIG9iamVjdHMgZXhpc3QsIG5vbi1mYXRhbAotLy8gbG9nIG1lc3NhZ2VzIHdpbGwgYmUg
ZGlzY2FyZGVkICh0aGUgY3VycmVudCBMb2dIYW5kbGVyIHdpbGwgKm5vdCoKLS8vIGJlIGNhbGxl
ZCkuICBDb25zdHJ1Y3RpbmcgYSBMb2dTaWxlbmNlciBpcyB0aHJlYWQtc2FmZS4gIFlvdSBtYXkK
LS8vIGFjY2lkZW50YWxseSBzdXBwcmVzcyBsb2cgbWVzc2FnZXMgb2NjdXJyaW5nIGluIGFub3Ro
ZXIgdGhyZWFkLCBidXQKLS8vIHNpbmNlIG1lc3NhZ2VzIGFyZSBnZW5lcmFsbHkgZm9yIGRlYnVn
Z2luZyBwdXJwb3NlcyBvbmx5LCB0aGlzIGlzbid0Ci0vLyBhIGJpZyBkZWFsLiAgSWYgeW91IHdh
bnQgdG8gaW50ZXJjZXB0IGxvZyBtZXNzYWdlcywgdXNlIFNldExvZ0hhbmRsZXIoKS4KLWNsYXNz
IExJQlBST1RPQlVGX0VYUE9SVCBMb2dTaWxlbmNlciB7Ci0gcHVibGljOgotICBMb2dTaWxlbmNl
cigpOwotICB+TG9nU2lsZW5jZXIoKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1Zgot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9TVFVC
U19MT0dHSU5HX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbWFjcm9z
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbWFjcm9zLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDBlOWE5ZWMxOTgyMDhmZDI1M2E0OGNmMDFkZDg3ZTNmYjVmOWZlMDYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL21hY3Jvcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JV
Rl9NQUNST1NfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9NQUNST1NfSF9fCi0KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvcG9ydC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLSN1bmRlZiBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05T
VFJVQ1RPUlMKLSNkZWZpbmUgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFR5cGVO
YW1lKSAgICBcCi0gIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCi0KLSN1bmRlZiBH
T09HTEVfRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTCi0jZGVmaW5lIEdPT0dMRV9ESVNB
TExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoVHlwZU5hbWUpIFwKLSAgVHlwZU5hbWUoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBUeXBlTmFtZShjb25z
dCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IFR5cGVOYW1lJikKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gZnJvbSBnb29nbGUzL2Jh
c2UvYmFzaWN0eXBlcy5oCi0KLS8vIFRoZSBHT09HTEVfQVJSQVlTSVpFKGFycikgbWFjcm8gcmV0
dXJucyB0aGUgIyBvZiBlbGVtZW50cyBpbiBhbiBhcnJheSBhcnIuCi0vLyBUaGUgZXhwcmVzc2lv
biBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCwgYW5kIHRoZXJlZm9yZSBjYW4gYmUKLS8vIHVz
ZWQgaW4gZGVmaW5pbmcgbmV3IGFycmF5cywgZm9yIGV4YW1wbGUuCi0vLwotLy8gR09PR0xFX0FS
UkFZU0laRSBjYXRjaGVzIGEgZmV3IHR5cGUgZXJyb3JzLiAgSWYgeW91IHNlZSBhIGNvbXBpbGVy
IGVycm9yCi0vLwotLy8gICAid2FybmluZzogZGl2aXNpb24gYnkgemVybyBpbiAuLi4iCi0vLwot
Ly8gd2hlbiB1c2luZyBHT09HTEVfQVJSQVlTSVpFLCB5b3UgYXJlICh3cm9uZ2Z1bGx5KSBnaXZp
bmcgaXQgYSBwb2ludGVyLgotLy8gWW91IHNob3VsZCBvbmx5IHVzZSBHT09HTEVfQVJSQVlTSVpF
IG9uIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5cy4KLS8vCi0vLyBUaGUgZm9sbG93aW5nIGNv
bW1lbnRzIGFyZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIGNhbgotLy8gYmUg
aWdub3JlZCBieSB0aGUgdXNlcnMuCi0vLwotLy8gQVJSQVlTSVpFKGFycikgd29ya3MgYnkgaW5z
cGVjdGluZyBzaXplb2YoYXJyKSAodGhlICMgb2YgYnl0ZXMgaW4KLS8vIHRoZSBhcnJheSkgYW5k
IHNpemVvZigqKGFycikpICh0aGUgIyBvZiBieXRlcyBpbiBvbmUgYXJyYXkKLS8vIGVsZW1lbnQp
LiAgSWYgdGhlIGZvcm1lciBpcyBkaXZpc2libGUgYnkgdGhlIGxhdHRlciwgcGVyaGFwcyBhcnIg
aXMKLS8vIGluZGVlZCBhbiBhcnJheSwgaW4gd2hpY2ggY2FzZSB0aGUgZGl2aXNpb24gcmVzdWx0
IGlzIHRoZSAjIG9mCi0vLyBlbGVtZW50cyBpbiB0aGUgYXJyYXkuICBPdGhlcndpc2UsIGFyciBj
YW5ub3QgcG9zc2libHkgYmUgYW4gYXJyYXksCi0vLyBhbmQgd2UgZ2VuZXJhdGUgYSBjb21waWxl
ciBlcnJvciB0byBwcmV2ZW50IHRoZSBjb2RlIGZyb20KLS8vIGNvbXBpbGluZy4KLS8vCi0vLyBT
aW5jZSB0aGUgc2l6ZSBvZiBib29sIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQsIHdlIG5lZWQg
dG8gY2FzdAotLy8gIShzaXplb2YoYSkgJiBzaXplb2YoKihhKSkpIHRvIHNpemVfdCBpbiBvcmRl
ciB0byBlbnN1cmUgdGhlIGZpbmFsCi0vLyByZXN1bHQgaGFzIHR5cGUgc2l6ZV90LgotLy8KLS8v
IFRoaXMgbWFjcm8gaXMgbm90IHBlcmZlY3QgYXMgaXQgd3JvbmdmdWxseSBhY2NlcHRzIGNlcnRh
aW4KLS8vIHBvaW50ZXJzLCBuYW1lbHkgd2hlcmUgdGhlIHBvaW50ZXIgc2l6ZSBpcyBkaXZpc2li
bGUgYnkgdGhlIHBvaW50ZWUKLS8vIHNpemUuICBTaW5jZSBhbGwgb3VyIGNvZGUgaGFzIHRvIGdv
IHRocm91Z2ggYSAzMi1iaXQgY29tcGlsZXIsCi0vLyB3aGVyZSBhIHBvaW50ZXIgaXMgNCBieXRl
cywgdGhpcyBtZWFucyBhbGwgcG9pbnRlcnMgdG8gYSB0eXBlIHdob3NlCi0vLyBzaXplIGlzIDMg
b3IgZ3JlYXRlciB0aGFuIDQgd2lsbCBiZSAocmlnaHRlb3VzbHkpIHJlamVjdGVkLgotLy8KLS8v
IEt1ZG9zIHRvIEpvcmcgQnJvd24gZm9yIHRoaXMgc2ltcGxlIGFuZCBlbGVnYW50IGltcGxlbWVu
dGF0aW9uLgotCi0jdW5kZWYgR09PR0xFX0FSUkFZU0laRQotI2RlZmluZSBHT09HTEVfQVJSQVlT
SVpFKGEpIFwKLSAgKChzaXplb2YoYSkgLyBzaXplb2YoKihhKSkpIC8gXAotICAgc3RhdGljX2Nh
c3Q8c2l6ZV90PighKHNpemVvZihhKSAlIHNpemVvZigqKGEpKSkpKQotCi0vLyBUaGUgQ09NUElM
RV9BU1NFUlQgbWFjcm8gY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHRoYXQgYSBjb21waWxlIHRpbWUK
LS8vIGV4cHJlc3Npb24gaXMgdHJ1ZS4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB1c2UgaXQgdG8g
dmVyaWZ5IHRoZQotLy8gc2l6ZSBvZiBhIHN0YXRpYyBhcnJheToKLS8vCi0vLyAgIENPTVBJTEVf
QVNTRVJUKEFSUkFZU0laRShjb250ZW50X3R5cGVfbmFtZXMpID09IENPTlRFTlRfTlVNX1RZUEVT
LAotLy8gICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGVfbmFtZXNfaW5jb3JyZWN0X3NpemUp
OwotLy8KLS8vIG9yIHRvIG1ha2Ugc3VyZSBhIHN0cnVjdCBpcyBzbWFsbGVyIHRoYW4gYSBjZXJ0
YWluIHNpemU6Ci0vLwotLy8gICBDT01QSUxFX0FTU0VSVChzaXplb2YoZm9vKSA8IDEyOCwgZm9v
X3Rvb19sYXJnZSk7Ci0vLwotLy8gVGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgbWFjcm8gaXMg
dGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLiBJZgotLy8gdGhlIGV4cHJlc3Npb24gaXMgZmFsc2Us
IG1vc3QgY29tcGlsZXJzIHdpbGwgaXNzdWUgYSB3YXJuaW5nL2Vycm9yCi0vLyBjb250YWluaW5n
IHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS4KLQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotdGVt
cGxhdGUgPGJvb2w+Ci1zdHJ1Y3QgQ29tcGlsZUFzc2VydCB7Ci19OwotCi19ICAvLyBuYW1lc3Bh
Y2UgaW50ZXJuYWwKLQotI3VuZGVmIEdPT0dMRV9DT01QSUxFX0FTU0VSVAotI2lmIF9fY3BsdXNw
bHVzID49IDIwMTEwM0wKLSNkZWZpbmUgR09PR0xFX0NPTVBJTEVfQVNTRVJUKGV4cHIsIG1zZykg
c3RhdGljX2Fzc2VydChleHByLCAjbXNnKQotI2Vsc2UKLSNkZWZpbmUgR09PR0xFX0NPTVBJTEVf
QVNTRVJUKGV4cHIsIG1zZykgXAotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpDb21w
aWxlQXNzZXJ0PChib29sKGV4cHIpKT4gXAotICAgICAgICAgIG1zZ1tib29sKGV4cHIpID8gMSA6
IC0xXTsgXAotICAodm9pZCltc2cKLS8vIEltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgQ09NUElM
RV9BU1NFUlQ6Ci0vLwotLy8gLSBDT01QSUxFX0FTU0VSVCB3b3JrcyBieSBkZWZpbmluZyBhbiBh
cnJheSB0eXBlIHRoYXQgaGFzIC0xCi0vLyAgIGVsZW1lbnRzIChhbmQgdGh1cyBpcyBpbnZhbGlk
KSB3aGVuIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlLgotLy8KLS8vIC0gVGhlIHNpbXBsZXIgZGVm
aW5pdGlvbgotLy8KLS8vICAgICAjZGVmaW5lIENPTVBJTEVfQVNTRVJUKGV4cHIsIG1zZykgdHlw
ZWRlZiBjaGFyIG1zZ1soZXhwcikgPyAxIDogLTFdCi0vLwotLy8gICBkb2VzIG5vdCB3b3JrLCBh
cyBnY2Mgc3VwcG9ydHMgdmFyaWFibGUtbGVuZ3RoIGFycmF5cyB3aG9zZSBzaXplcwotLy8gICBh
cmUgZGV0ZXJtaW5lZCBhdCBydW4tdGltZSAodGhpcyBpcyBnY2MncyBleHRlbnNpb24gYW5kIG5v
dCBwYXJ0Ci0vLyAgIG9mIHRoZSBDKysgc3RhbmRhcmQpLiAgQXMgYSByZXN1bHQsIGdjYyBmYWls
cyB0byByZWplY3QgdGhlCi0vLyAgIGZvbGxvd2luZyBjb2RlIHdpdGggdGhlIHNpbXBsZSBkZWZp
bml0aW9uOgotLy8KLS8vICAgICBpbnQgZm9vOwotLy8gICAgIENPTVBJTEVfQVNTRVJUKGZvbywg
bXNnKTsgLy8gbm90IHN1cHBvc2VkIHRvIGNvbXBpbGUgYXMgZm9vIGlzCi0vLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBub3QgYSBjb21waWxlLXRpbWUgY29uc3RhbnQuCi0vLwot
Ly8gLSBCeSB1c2luZyB0aGUgdHlwZSBDb21waWxlQXNzZXJ0PChib29sKGV4cHIpKT4sIHdlIGVu
c3VyZXMgdGhhdAotLy8gICBleHByIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiAgKFRlbXBs
YXRlIGFyZ3VtZW50cyBtdXN0IGJlCi0vLyAgIGRldGVybWluZWQgYXQgY29tcGlsZS10aW1lLikK
LS8vCi0vLyAtIFRoZSBvdXR0ZXIgcGFyZW50aGVzZXMgaW4gQ29tcGlsZUFzc2VydDwoYm9vbChl
eHByKSk+IGFyZSBuZWNlc3NhcnkKLS8vICAgdG8gd29yayBhcm91bmQgYSBidWcgaW4gZ2NjIDMu
NC40IGFuZCA0LjAuMS4gIElmIHdlIGhhZCB3cml0dGVuCi0vLwotLy8gICAgIENvbXBpbGVBc3Nl
cnQ8Ym9vbChleHByKT4KLS8vCi0vLyAgIGluc3RlYWQsIHRoZXNlIGNvbXBpbGVycyB3aWxsIHJl
ZnVzZSB0byBjb21waWxlCi0vLwotLy8gICAgIENPTVBJTEVfQVNTRVJUKDUgPiAwLCBzb21lX21l
c3NhZ2UpOwotLy8KLS8vICAgKFRoZXkgc2VlbSB0byB0aGluayB0aGUgIj4iIGluICI1ID4gMCIg
bWFya3MgdGhlIGVuZCBvZiB0aGUKLS8vICAgdGVtcGxhdGUgYXJndW1lbnQgbGlzdC4pCi0vLwot
Ly8gLSBUaGUgYXJyYXkgc2l6ZSBpcyAoYm9vbChleHByKSA/IDEgOiAtMSksIGluc3RlYWQgb2Yg
c2ltcGx5Ci0vLwotLy8gICAgICgoZXhwcikgPyAxIDogLTEpLgotLy8KLS8vICAgVGhpcyBpcyB0
byBhdm9pZCBydW5uaW5nIGludG8gYSBidWcgaW4gTVMgVkMgNy4xLCB3aGljaAotLy8gICBjYXVz
ZXMgKCgwLjApID8gMSA6IC0xKSB0byBpbmNvcnJlY3RseSBldmFsdWF0ZSB0byAxLgotI2VuZGlm
ICAvLyBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCi0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1Zgot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9NQUNS
T1NfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXBfdXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0Y2NjYmJlZGNiYmZlN2JkMDc4YjgxYjZjZGRiMjU1YzFjZDc1NjhiLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9tYXBfdXRpbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzY5ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBmcm9tIGdvb2dsZTMvdXRpbC9n
dGwvbWFwX3V0aWwuaAotLy8gQXV0aG9yOiBBbnRvbiBDYXJ2ZXIKLQotI2lmbmRlZiBHT09HTEVf
UFJPVE9CVUZfU1RVQlNfTUFQX1VUSUxfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9TVFVC
U19NQVBfVVRJTF9IX18KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPGl0ZXJhdG9y
PgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHZlY3Rv
cj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGludGVybmFsIHsK
LS8vIExvY2FsIGltcGxlbWVudGF0aW9uIG9mIFJlbW92ZUNvbnN0IHRvIGF2b2lkIGluY2x1ZGlu
ZyBiYXNlL3R5cGVfdHJhaXRzLmguCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFJlbW92ZUNv
bnN0IHsgdHlwZWRlZiBUIHR5cGU7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFJlbW92
ZUNvbnN0PGNvbnN0IFQ+IDogUmVtb3ZlQ29uc3Q8VD4ge307Ci19ICAvLyBuYW1lc3BhY2UgaW50
ZXJuYWwKLQotLy8KLS8vIEZpbmQqKCkKLS8vCi0KLS8vIFJldHVybnMgYSBjb25zdCByZWZlcmVu
Y2UgdG8gdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IGlmIGl0Ci0vLyBl
eGlzdHMuIENyYXNoZXMgb3RoZXJ3aXNlLgotLy8KLS8vIFRoaXMgaXMgaW50ZW5kZWQgYXMgYSBy
ZXBsYWNlbWVudCBmb3Igb3BlcmF0b3JbXSBhcyBhbiBydmFsdWUgKGZvciByZWFkaW5nKQotLy8g
d2hlbiB0aGUga2V5IGlzIGd1YXJhbnRlZWQgdG8gZXhpc3QuCi0vLwotLy8gb3BlcmF0b3JbXSBm
b3IgbG9va3VwIGlzIGRpc2NvdXJhZ2VkIGZvciBzZXZlcmFsIHJlYXNvbnM6Ci0vLyAgKiBJdCBo
YXMgYSBzaWRlLWVmZmVjdCBvZiBpbnNlcnRpbmcgbWlzc2luZyBrZXlzCi0vLyAgKiBJdCBpcyBu
b3QgdGhyZWFkLXNhZmUgKGV2ZW4gd2hlbiBpdCBpcyBub3QgaW5zZXJ0aW5nLCBpdCBjYW4gc3Rp
bGwKLS8vICAgICAgY2hvb3NlIHRvIHJlc2l6ZSB0aGUgdW5kZXJseWluZyBzdG9yYWdlKQotLy8g
ICogSXQgaW52YWxpZGF0ZXMgaXRlcmF0b3JzICh3aGVuIGl0IGNob29zZXMgdG8gcmVzaXplKQot
Ly8gICogSXQgZGVmYXVsdCBjb25zdHJ1Y3RzIGEgdmFsdWUgb2JqZWN0IGV2ZW4gaWYgaXQgZG9l
c24ndCBuZWVkIHRvCi0vLwotLy8gVGhpcyB2ZXJzaW9uIGFzc3VtZXMgdGhlIGtleSBpcyBwcmlu
dGFibGUsIGFuZCBpbmNsdWRlcyBpdCBpbiB0aGUgZmF0YWwgbG9nCi0vLyBtZXNzYWdlLgotdGVt
cGxhdGUgPGNsYXNzIENvbGxlY3Rpb24+Ci1jb25zdCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1
ZV90eXBlOjpzZWNvbmRfdHlwZSYKLUZpbmRPckRpZShjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0
aW9uLAotICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OmZp
cnN0X3R5cGUmIGtleSkgewotICB0eXBlbmFtZSBDb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBp
dCA9IGNvbGxlY3Rpb24uZmluZChrZXkpOwotICBHT09HTEVfQ0hFQ0soaXQgIT0gY29sbGVjdGlv
bi5lbmQoKSkgPDwgIk1hcCBrZXkgbm90IGZvdW5kOiAiIDw8IGtleTsKLSAgcmV0dXJuIGl0LT5z
ZWNvbmQ7Ci19Ci0KLS8vIFNhbWUgYXMgYWJvdmUsIGJ1dCByZXR1cm5zIGEgbm9uLWNvbnN0IHJl
ZmVyZW5jZS4KLXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uPgotdHlwZW5hbWUgQ29sbGVjdGlv
bjo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGUmCi1GaW5kT3JEaWUoQ29sbGVjdGlvbiYgY29sbGVj
dGlvbiwgIC8vIE5PTElOVAotICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZh
bHVlX3R5cGU6OmZpcnN0X3R5cGUmIGtleSkgewotICB0eXBlbmFtZSBDb2xsZWN0aW9uOjppdGVy
YXRvciBpdCA9IGNvbGxlY3Rpb24uZmluZChrZXkpOwotICBHT09HTEVfQ0hFQ0soaXQgIT0gY29s
bGVjdGlvbi5lbmQoKSkgPDwgIk1hcCBrZXkgbm90IGZvdW5kOiAiIDw8IGtleTsKLSAgcmV0dXJu
IGl0LT5zZWNvbmQ7Ci19Ci0KLS8vIFNhbWUgYXMgRmluZE9yRGllIGFib3ZlLCBidXQgZG9lc24n
dCBsb2cgdGhlIGtleSBvbiBmYWlsdXJlLgotdGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24+Ci1j
b25zdCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlwZSYKLUZpbmRP
ckRpZU5vUHJpbnQoY29uc3QgQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwKLSAgICAgICAgICAgICAg
ICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZSYga2V5
KSB7Ci0gIHR5cGVuYW1lIENvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29sbGVjdGlv
bi5maW5kKGtleSk7Ci0gIEdPT0dMRV9DSEVDSyhpdCAhPSBjb2xsZWN0aW9uLmVuZCgpKSA8PCAi
TWFwIGtleSBub3QgZm91bmQiOwotICByZXR1cm4gaXQtPnNlY29uZDsKLX0KLQotLy8gU2FtZSBh
cyBhYm92ZSwgYnV0IHJldHVybnMgYSBub24tY29uc3QgcmVmZXJlbmNlLgotdGVtcGxhdGUgPGNs
YXNzIENvbGxlY3Rpb24+Ci10eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRf
dHlwZSYKLUZpbmRPckRpZU5vUHJpbnQoQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgIC8vIE5PTElO
VAotICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBl
OjpmaXJzdF90eXBlJiBrZXkpIHsKLSAgdHlwZW5hbWUgQ29sbGVjdGlvbjo6aXRlcmF0b3IgaXQg
PSBjb2xsZWN0aW9uLmZpbmQoa2V5KTsKLSAgR09PR0xFX0NIRUNLKGl0ICE9IGNvbGxlY3Rpb24u
ZW5kKCkpIDw8ICJNYXAga2V5IG5vdCBmb3VuZCI7Ci0gIHJldHVybiBpdC0+c2Vjb25kOwotfQot
Ci0vLyBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdp
dGggdGhlIGdpdmVuIGtleSBpZiBpdAotLy8gZXhpc3RzLCBvdGhlcndpc2UgcmV0dXJucyBhIGNv
bnN0IHJlZmVyZW5jZSB0byB0aGUgcHJvdmlkZWQgZGVmYXVsdCB2YWx1ZS4KLS8vCi0vLyBXQVJO
SU5HOiBJZiBhIHRlbXBvcmFyeSBvYmplY3QgaXMgcGFzc2VkIGFzIHRoZSBkZWZhdWx0ICJ2YWx1
ZSwiCi0vLyB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoYXQgdGVt
cG9yYXJ5IG9iamVjdCwKLS8vIHdoaWNoIHdpbGwgYmUgZGVzdHJveWVkIGF0IHRoZSBlbmQgb2Yg
dGhlIHN0YXRlbWVudC4gQSBjb21tb24KLS8vIGV4YW1wbGU6IGlmIHlvdSBoYXZlIGEgbWFwIHdp
dGggc3RyaW5nIHZhbHVlcywgYW5kIHlvdSBwYXNzIGEgY2hhcioKLS8vIGFzIHRoZSBkZWZhdWx0
ICJ2YWx1ZSwiIGVpdGhlciB1c2UgdGhlIHJldHVybmVkIHZhbHVlIGltbWVkaWF0ZWx5Ci0vLyBv
ciBzdG9yZSBpdCBpbiBhIHN0cmluZyAobm90IHN0cmluZyYpLgotLy8gRGV0YWlsczogaHR0cDov
L2dvL2ZpbmR3aXRoZGVmYXVsdAotdGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24+Ci1jb25zdCB0
eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlwZSYKLUZpbmRXaXRoRGVm
YXVsdChjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLAotICAgICAgICAgICAgICAgIGNvbnN0
IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGUmIGtleSwKLSAgICAg
ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRf
dHlwZSYgdmFsdWUpIHsKLSAgdHlwZW5hbWUgQ29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBjb2xsZWN0aW9uLmZpbmQoa2V5KTsKLSAgaWYgKGl0ID09IGNvbGxlY3Rpb24uZW5kKCkpIHsK
LSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLSAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLS8vIFJl
dHVybnMgYSBwb2ludGVyIHRvIHRoZSBjb25zdCB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdp
dmVuIGtleSBpZiBpdAotLy8gZXhpc3RzLCBvciBOVUxMIG90aGVyd2lzZS4KLXRlbXBsYXRlIDxj
bGFzcyBDb2xsZWN0aW9uPgotY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6
c2Vjb25kX3R5cGUqCi1GaW5kT3JOdWxsKGNvbnN0IENvbGxlY3Rpb24mIGNvbGxlY3Rpb24sCi0g
ICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OmZpcnN0X3R5
cGUmIGtleSkgewotICB0eXBlbmFtZSBDb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IGNv
bGxlY3Rpb24uZmluZChrZXkpOwotICBpZiAoaXQgPT0gY29sbGVjdGlvbi5lbmQoKSkgewotICAg
IHJldHVybiAwOwotICB9Ci0gIHJldHVybiAmaXQtPnNlY29uZDsKLX0KLQotLy8gU2FtZSBhcyBh
Ym92ZSBidXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5vbi1jb25zdCB2YWx1ZS4KLXRlbXBs
YXRlIDxjbGFzcyBDb2xsZWN0aW9uPgotdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6
c2Vjb25kX3R5cGUqCi1GaW5kT3JOdWxsKENvbGxlY3Rpb24mIGNvbGxlY3Rpb24sICAvLyBOT0xJ
TlQKLSAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6Zmly
c3RfdHlwZSYga2V5KSB7Ci0gIHR5cGVuYW1lIENvbGxlY3Rpb246Oml0ZXJhdG9yIGl0ID0gY29s
bGVjdGlvbi5maW5kKGtleSk7Ci0gIGlmIChpdCA9PSBjb2xsZWN0aW9uLmVuZCgpKSB7Ci0gICAg
cmV0dXJuIDA7Ci0gIH0KLSAgcmV0dXJuICZpdC0+c2Vjb25kOwotfQotCi0vLyBSZXR1cm5zIHRo
ZSBwb2ludGVyIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LiBJZiBub25lIGlz
IGZvdW5kLAotLy8gTlVMTCBpcyByZXR1cm5lZC4gVGhlIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRv
IGJlIHVzZWQgd2l0aCBhIG1hcCBvZiBrZXlzIHRvCi0vLyBwb2ludGVycy4KLS8vCi0vLyBUaGlz
IGZ1bmN0aW9uIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIGtleSBhbmQg
YSBrZXkgbWFwcGVkCi0vLyB0byBhIE5VTEwgdmFsdWUuCi10ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVj
dGlvbj4KLXR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlCi1GaW5k
UHRyT3JOdWxsKGNvbnN0IENvbGxlY3Rpb24mIGNvbGxlY3Rpb24sCi0gICAgICAgICAgICAgIGNv
bnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGUmIGtleSkgewot
ICB0eXBlbmFtZSBDb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uZmlu
ZChrZXkpOwotICBpZiAoaXQgPT0gY29sbGVjdGlvbi5lbmQoKSkgewotICAgIHJldHVybiB0eXBl
bmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlwZSgpOwotICB9Ci0gIHJldHVy
biBpdC0+c2Vjb25kOwotfQotCi0vLyBTYW1lIGFzIGFib3ZlLCBleGNlcHQgdGFrZXMgbm9uLWNv
bnN0IHJlZmVyZW5jZSB0byBjb2xsZWN0aW9uLgotLy8KLS8vIFRoaXMgZnVuY3Rpb24gaXMgbmVl
ZGVkIGZvciBjb250YWluZXJzIHRoYXQgcHJvcGFnYXRlIGNvbnN0bmVzcyB0byB0aGUKLS8vIHBv
aW50ZWUsIHN1Y2ggYXMgYm9vc3Q6OnB0cl9tYXAuCi10ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlv
bj4KLXR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlCi1GaW5kUHRy
T3JOdWxsKENvbGxlY3Rpb24mIGNvbGxlY3Rpb24sICAvLyBOT0xJTlQKLSAgICAgICAgICAgICAg
Y29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZSYga2V5KSB7
Ci0gIHR5cGVuYW1lIENvbGxlY3Rpb246Oml0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5maW5kKGtl
eSk7Ci0gIGlmIChpdCA9PSBjb2xsZWN0aW9uLmVuZCgpKSB7Ci0gICAgcmV0dXJuIHR5cGVuYW1l
IENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlKCk7Ci0gIH0KLSAgcmV0dXJuIGl0
LT5zZWNvbmQ7Ci19Ci0KLS8vIEZpbmRzIHRoZSBwb2ludGVyIHZhbHVlIGFzc29jaWF0ZWQgd2l0
aCB0aGUgZ2l2ZW4ga2V5IGluIGEgbWFwIHdob3NlIHZhbHVlcwotLy8gYXJlIGxpbmtlZF9wdHJz
LiBSZXR1cm5zIE5VTEwgaWYga2V5IGlzIG5vdCBmb3VuZC4KLXRlbXBsYXRlIDxjbGFzcyBDb2xs
ZWN0aW9uPgotdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGU6OmVs
ZW1lbnRfdHlwZSoKLUZpbmRMaW5rZWRQdHJPck51bGwoY29uc3QgQ29sbGVjdGlvbiYgY29sbGVj
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFs
dWVfdHlwZTo6Zmlyc3RfdHlwZSYga2V5KSB7Ci0gIHR5cGVuYW1lIENvbGxlY3Rpb246OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5maW5kKGtleSk7Ci0gIGlmIChpdCA9PSBjb2xsZWN0
aW9uLmVuZCgpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgLy8gU2luY2UgbGlua2VkX3B0cjo6
Z2V0KCkgaXMgYSBjb25zdCBtZW1iZXIgcmV0dXJuaW5nIGEgbm9uIGNvbnN0LAotICAvLyB3ZSBk
byBub3QgbmVlZCBhIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiB0YWtpbmcgYSBub24gY29uc3Qg
Y29sbGVjdGlvbi4KLSAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7Ci19Ci0KLS8vIFNhbWUgYXMg
YWJvdmUsIGJ1dCBkaWVzIGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kLgotdGVtcGxhdGUgPGNsYXNz
IENvbGxlY3Rpb24+Ci10eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlw
ZTo6ZWxlbWVudF90eXBlJgotRmluZExpbmtlZFB0ck9yRGllKGNvbnN0IENvbGxlY3Rpb24mIGNv
bGxlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6
dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZSYga2V5KSB7Ci0gIHR5cGVuYW1lIENvbGxlY3Rpb246OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5maW5kKGtleSk7Ci0gIENIRUNLKGl0ICE9IGNv
bGxlY3Rpb24uZW5kKCkpIDw8ICAia2V5IG5vdCBmb3VuZDogIiA8PCBrZXk7Ci0gIC8vIFNpbmNl
IGxpbmtlZF9wdHI6Om9wZXJhdG9yKigpIGlzIGEgY29uc3QgbWVtYmVyIHJldHVybmluZyBhIG5v
biBjb25zdCwKLSAgLy8gd2UgZG8gbm90IG5lZWQgYSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24g
dGFraW5nIGEgbm9uIGNvbnN0IGNvbGxlY3Rpb24uCi0gIHJldHVybiAqaXQtPnNlY29uZDsKLX0K
LQotLy8gRmluZHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IGFuZCBj
b3BpZXMgaXQgdG8gKnZhbHVlIChpZiBub3QKLS8vIE5VTEwpLiBSZXR1cm5zIGZhbHNlIGlmIHRo
ZSBrZXkgd2FzIG5vdCBmb3VuZCwgdHJ1ZSBvdGhlcndpc2UuCi10ZW1wbGF0ZSA8Y2xhc3MgQ29s
bGVjdGlvbiwgY2xhc3MgS2V5LCBjbGFzcyBWYWx1ZT4KLWJvb2wgRmluZENvcHkoY29uc3QgQ29s
bGVjdGlvbiYgY29sbGVjdGlvbiwKLSAgICAgICAgICAgICAgY29uc3QgS2V5JiBrZXksCi0gICAg
ICAgICAgICAgIFZhbHVlKiBjb25zdCB2YWx1ZSkgewotICB0eXBlbmFtZSBDb2xsZWN0aW9uOjpj
b25zdF9pdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uZmluZChrZXkpOwotICBpZiAoaXQgPT0gY29s
bGVjdGlvbi5lbmQoKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAodmFsdWUpIHsK
LSAgICAqdmFsdWUgPSBpdC0+c2Vjb25kOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLwot
Ly8gQ29udGFpbnMqKCkKLS8vCi0KLS8vIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUg
Z2l2ZW4gY29sbGVjdGlvbiBjb250YWlucyB0aGUgZ2l2ZW4ga2V5LgotdGVtcGxhdGUgPGNsYXNz
IENvbGxlY3Rpb24sIGNsYXNzIEtleT4KLWJvb2wgQ29udGFpbnNLZXkoY29uc3QgQ29sbGVjdGlv
biYgY29sbGVjdGlvbiwgY29uc3QgS2V5JiBrZXkpIHsKLSAgcmV0dXJuIGNvbGxlY3Rpb24uZmlu
ZChrZXkpICE9IGNvbGxlY3Rpb24uZW5kKCk7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiBhbmQg
b25seSBpZiB0aGUgZ2l2ZW4gY29sbGVjdGlvbiBjb250YWlucyB0aGUgZ2l2ZW4ga2V5LXZhbHVl
Ci0vLyBwYWlyLgotdGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEtleSwgY2xhc3Mg
VmFsdWU+Ci1ib29sIENvbnRhaW5zS2V5VmFsdWVQYWlyKGNvbnN0IENvbGxlY3Rpb24mIGNvbGxl
Y3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtleSYga2V5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZSYgdmFsdWUpIHsKLSAgdHlwZWRlZiB0eXBl
bmFtZSBDb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAgc3RkOjpw
YWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gcmFuZ2UgPSBjb2xsZWN0aW9uLmVx
dWFsX3JhbmdlKGtleSk7Ci0gIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSByYW5nZS5maXJzdDsg
aXQgIT0gcmFuZ2Uuc2Vjb25kOyArK2l0KSB7Ci0gICAgaWYgKGl0LT5zZWNvbmQgPT0gdmFsdWUp
IHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0K
LS8vCi0vLyBJbnNlcnQqKCkKLS8vCi0KLS8vIEluc2VydHMgdGhlIGdpdmVuIGtleS12YWx1ZSBw
YWlyIGludG8gdGhlIGNvbGxlY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiBhbmQKLS8vIG9ubHkgaWYg
dGhlIGtleSBmcm9tIHRoZSBnaXZlbiBwYWlyIGRpZG4ndCBwcmV2aW91c2x5IGV4aXN0LiBPdGhl
cndpc2UsIHRoZQotLy8gdmFsdWUgaW4gdGhlIG1hcCBpcyByZXBsYWNlZCB3aXRoIHRoZSB2YWx1
ZSBmcm9tIHRoZSBnaXZlbiBwYWlyLgotdGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24+Ci1ib29s
IEluc2VydE9yVXBkYXRlKENvbGxlY3Rpb24qIGNvbnN0IGNvbGxlY3Rpb24sCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGUmIHZ0KSB7Ci0g
IHN0ZDo6cGFpcjx0eXBlbmFtZSBDb2xsZWN0aW9uOjppdGVyYXRvciwgYm9vbD4gcmV0ID0gY29s
bGVjdGlvbi0+aW5zZXJ0KHZ0KTsKLSAgaWYgKCFyZXQuc2Vjb25kKSB7Ci0gICAgLy8gdXBkYXRl
Ci0gICAgcmV0LmZpcnN0LT5zZWNvbmQgPSB2dC5zZWNvbmQ7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyBTYW1lIGFzIGFib3ZlLCBleGNlcHQgdGhhdCB0
aGUga2V5IGFuZCB2YWx1ZSBhcmUgcGFzc2VkIHNlcGFyYXRlbHkuCi10ZW1wbGF0ZSA8Y2xhc3Mg
Q29sbGVjdGlvbj4KLWJvb2wgSW5zZXJ0T3JVcGRhdGUoQ29sbGVjdGlvbiogY29uc3QgY29sbGVj
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFs
dWVfdHlwZTo6Zmlyc3RfdHlwZSYga2V5LAotICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBl
bmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlwZSYgdmFsdWUpIHsKLSAgcmV0
dXJuIEluc2VydE9yVXBkYXRlKAotICAgICAgY29sbGVjdGlvbiwgdHlwZW5hbWUgQ29sbGVjdGlv
bjo6dmFsdWVfdHlwZShrZXksIHZhbHVlKSk7Ci19Ci0KLS8vIEluc2VydHMvdXBkYXRlcyBhbGwg
dGhlIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSByYW5nZSBkZWZpbmVkIGJ5IHRoZQotLy8gaXRl
cmF0b3JzICJmaXJzdCIgYW5kICJsYXN0IiBpbnRvIHRoZSBnaXZlbiBjb2xsZWN0aW9uLgotdGVt
cGxhdGUgPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIElucHV0SXRlcmF0b3I+Ci12b2lkIEluc2Vy
dE9yVXBkYXRlTWFueShDb2xsZWN0aW9uKiBjb25zdCBjb2xsZWN0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KSB7Ci0g
IGZvciAoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KSB7Ci0gICAgSW5zZXJ0T3JVcGRhdGUoY29s
bGVjdGlvbiwgKmZpcnN0KTsKLSAgfQotfQotCi0vLyBDaGFuZ2UgdGhlIHZhbHVlIGFzc29jaWF0
ZWQgd2l0aCBhIHBhcnRpY3VsYXIga2V5IGluIGEgbWFwIG9yIGhhc2hfbWFwCi0vLyBvZiB0aGUg
Zm9ybSBtYXA8S2V5LCBWYWx1ZSo+IHdoaWNoIG93bnMgdGhlIG9iamVjdHMgcG9pbnRlZCB0byBi
eSB0aGUKLS8vIHZhbHVlIHBvaW50ZXJzLiAgSWYgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIHZhbHVl
IGZvciB0aGUga2V5LCBpdCBpcyBkZWxldGVkLgotLy8gVHJ1ZSBpbmRpY2F0ZXMgYW4gaW5zZXJ0
IHRvb2sgcGxhY2UsIGZhbHNlIGluZGljYXRlcyBhbiB1cGRhdGUgKyBkZWxldGUuCi10ZW1wbGF0
ZSA8Y2xhc3MgQ29sbGVjdGlvbj4KLWJvb2wgSW5zZXJ0QW5kRGVsZXRlRXhpc3RpbmcoCi0gICAg
Q29sbGVjdGlvbiogY29uc3QgY29sbGVjdGlvbiwKLSAgICBjb25zdCB0eXBlbmFtZSBDb2xsZWN0
aW9uOjp2YWx1ZV90eXBlOjpmaXJzdF90eXBlJiBrZXksCi0gICAgY29uc3QgdHlwZW5hbWUgQ29s
bGVjdGlvbjo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGUmIHZhbHVlKSB7Ci0gIHN0ZDo6cGFpcjx0
eXBlbmFtZSBDb2xsZWN0aW9uOjppdGVyYXRvciwgYm9vbD4gcmV0ID0KLSAgICAgIGNvbGxlY3Rp
b24tPmluc2VydCh0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlKGtleSwgdmFsdWUpKTsK
LSAgaWYgKCFyZXQuc2Vjb25kKSB7Ci0gICAgZGVsZXRlIHJldC5maXJzdC0+c2Vjb25kOwotICAg
IHJldC5maXJzdC0+c2Vjb25kID0gdmFsdWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJl
dHVybiB0cnVlOwotfQotCi0vLyBJbnNlcnRzIHRoZSBnaXZlbiBrZXkgYW5kIHZhbHVlIGludG8g
dGhlIGdpdmVuIGNvbGxlY3Rpb24gaWYgYW5kIG9ubHkgaWYgdGhlCi0vLyBnaXZlbiBrZXkgZGlk
IE5PVCBhbHJlYWR5IGV4aXN0IGluIHRoZSBjb2xsZWN0aW9uLiBJZiB0aGUga2V5IHByZXZpb3Vz
bHkKLS8vIGV4aXN0ZWQgaW4gdGhlIGNvbGxlY3Rpb24sIHRoZSB2YWx1ZSBpcyBub3QgY2hhbmdl
ZC4gUmV0dXJucyB0cnVlIGlmIHRoZQotLy8ga2V5LXZhbHVlIHBhaXIgd2FzIGluc2VydGVkOyBy
ZXR1cm5zIGZhbHNlIGlmIHRoZSBrZXkgd2FzIGFscmVhZHkgcHJlc2VudC4KLXRlbXBsYXRlIDxj
bGFzcyBDb2xsZWN0aW9uPgotYm9vbCBJbnNlcnRJZk5vdFByZXNlbnQoQ29sbGVjdGlvbiogY29u
c3QgY29sbGVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIENv
bGxlY3Rpb246OnZhbHVlX3R5cGUmIHZ0KSB7Ci0gIHJldHVybiBjb2xsZWN0aW9uLT5pbnNlcnQo
dnQpLnNlY29uZDsKLX0KLQotLy8gU2FtZSBhcyBhYm92ZSBleGNlcHQgdGhlIGtleSBhbmQgdmFs
dWUgYXJlIHBhc3NlZCBzZXBhcmF0ZWx5LgotdGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24+Ci1i
b29sIEluc2VydElmTm90UHJlc2VudCgKLSAgICBDb2xsZWN0aW9uKiBjb25zdCBjb2xsZWN0aW9u
LAotICAgIGNvbnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGUm
IGtleSwKLSAgICBjb25zdCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRf
dHlwZSYgdmFsdWUpIHsKLSAgcmV0dXJuIEluc2VydElmTm90UHJlc2VudCgKLSAgICAgIGNvbGxl
Y3Rpb24sIHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGUoa2V5LCB2YWx1ZSkpOwotfQot
Ci0vLyBTYW1lIGFzIGFib3ZlIGV4Y2VwdCBkaWVzIGlmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMg
aW4gdGhlIGNvbGxlY3Rpb24uCi10ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbj4KLXZvaWQgSW5z
ZXJ0T3JEaWUoQ29sbGVjdGlvbiogY29uc3QgY29sbGVjdGlvbiwKLSAgICAgICAgICAgICAgICAg
Y29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZSYgdmFsdWUpIHsKLSAgQ0hFQ0so
SW5zZXJ0SWZOb3RQcmVzZW50KGNvbGxlY3Rpb24sIHZhbHVlKSkgPDwgImR1cGxpY2F0ZSB2YWx1
ZTogIiA8PCB2YWx1ZTsKLX0KLQotLy8gU2FtZSBhcyBhYm92ZSBleGNlcHQgZG9lc24ndCBsb2cg
dGhlIHZhbHVlIG9uIGVycm9yLgotdGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24+Ci12b2lkIElu
c2VydE9yRGllTm9QcmludChDb2xsZWN0aW9uKiBjb25zdCBjb2xsZWN0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZSYgdmFs
dWUpIHsKLSAgQ0hFQ0soSW5zZXJ0SWZOb3RQcmVzZW50KGNvbGxlY3Rpb24sIHZhbHVlKSkgPDwg
ImR1cGxpY2F0ZSB2YWx1ZS4iOwotfQotCi0vLyBJbnNlcnRzIHRoZSBrZXktdmFsdWUgcGFpciBp
bnRvIHRoZSBjb2xsZWN0aW9uLiBEaWVzIGlmIGtleSB3YXMgYWxyZWFkeQotLy8gcHJlc2VudC4K
LXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uPgotdm9pZCBJbnNlcnRPckRpZShDb2xsZWN0aW9u
KiBjb25zdCBjb2xsZWN0aW9uLAotICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBDb2xs
ZWN0aW9uOjp2YWx1ZV90eXBlOjpmaXJzdF90eXBlJiBrZXksCi0gICAgICAgICAgICAgICAgIGNv
bnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlJiBkYXRhKSB7
Ci0gIEdPT0dMRV9DSEVDSyhJbnNlcnRJZk5vdFByZXNlbnQoY29sbGVjdGlvbiwga2V5LCBkYXRh
KSkKLSAgICAgIDw8ICJkdXBsaWNhdGUga2V5OiAiIDw8IGtleTsKLX0KLQotLy8gU2FtZSBhcyBh
Ym92ZSBleGNlcHQgZG9lc24ndCBsb2cgdGhlIGtleSBvbiBlcnJvci4KLXRlbXBsYXRlIDxjbGFz
cyBDb2xsZWN0aW9uPgotdm9pZCBJbnNlcnRPckRpZU5vUHJpbnQoCi0gICAgQ29sbGVjdGlvbiog
Y29uc3QgY29sbGVjdGlvbiwKLSAgICBjb25zdCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90
eXBlOjpmaXJzdF90eXBlJiBrZXksCi0gICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFs
dWVfdHlwZTo6c2Vjb25kX3R5cGUmIGRhdGEpIHsKLSAgR09PR0xFX0NIRUNLKEluc2VydElmTm90
UHJlc2VudChjb2xsZWN0aW9uLCBrZXksIGRhdGEpKSA8PCAiZHVwbGljYXRlIGtleS4iOwotfQot
Ci0vLyBJbnNlcnRzIGEgbmV3IGtleSBhbmQgZGVmYXVsdC1pbml0aWFsaXplZCB2YWx1ZS4gRGll
cyBpZiB0aGUga2V5IHdhcyBhbHJlYWR5Ci0vLyBwcmVzZW50LiBSZXR1cm5zIGEgcmVmZXJlbmNl
IHRvIHRoZSB2YWx1ZS4gRXhhbXBsZSB1c2FnZToKLS8vCi0vLyBtYXA8aW50LCBTb21lUHJvdG8+
IG07Ci0vLyBTb21lUHJvdG8mIHByb3RvID0gSW5zZXJ0S2V5T3JEaWUoJm0sIDMpOwotLy8gcHJv
dG8uc2V0X2ZpZWxkKCJmb28iKTsKLXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uPgotdHlwZW5h
bWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGUmIEluc2VydEtleU9yRGllKAot
ICAgIENvbGxlY3Rpb24qIGNvbnN0IGNvbGxlY3Rpb24sCi0gICAgY29uc3QgdHlwZW5hbWUgQ29s
bGVjdGlvbjo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZSYga2V5KSB7Ci0gIHR5cGVkZWYgdHlwZW5h
bWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwotICBzdGQ6OnBhaXI8dHlwZW5h
bWUgQ29sbGVjdGlvbjo6aXRlcmF0b3IsIGJvb2w+IHJlcyA9Ci0gICAgICBjb2xsZWN0aW9uLT5p
bnNlcnQodmFsdWVfdHlwZShrZXksIHR5cGVuYW1lIHZhbHVlX3R5cGU6OnNlY29uZF90eXBlKCkp
KTsKLSAgR09PR0xFX0NIRUNLKHJlcy5zZWNvbmQpIDw8ICJkdXBsaWNhdGUga2V5OiAiIDw8IGtl
eTsKLSAgcmV0dXJuIHJlcy5maXJzdC0+c2Vjb25kOwotfQotCi0vLwotLy8gTG9va3VwKigpCi0v
LwotCi0vLyBMb29rcyB1cCBhIGdpdmVuIGtleSBhbmQgdmFsdWUgcGFpciBpbiBhIGNvbGxlY3Rp
b24gYW5kIGluc2VydHMgdGhlIGtleS12YWx1ZQotLy8gcGFpciBpZiBpdCdzIG5vdCBhbHJlYWR5
IHByZXNlbnQuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhbHVlIGFzc29jaWF0ZWQKLS8v
IHdpdGggdGhlIGtleS4KLXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uPgotdHlwZW5hbWUgQ29s
bGVjdGlvbjo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGUmCi1Mb29rdXBPckluc2VydChDb2xsZWN0
aW9uKiBjb25zdCBjb2xsZWN0aW9uLAotICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgQ29s
bGVjdGlvbjo6dmFsdWVfdHlwZSYgdnQpIHsKLSAgcmV0dXJuIGNvbGxlY3Rpb24tPmluc2VydCh2
dCkuZmlyc3QtPnNlY29uZDsKLX0KLQotLy8gU2FtZSBhcyBhYm92ZSBleGNlcHQgdGhlIGtleS12
YWx1ZSBhcmUgcGFzc2VkIHNlcGFyYXRlbHkuCi10ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbj4K
LXR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlJgotTG9va3VwT3JJ
bnNlcnQoQ29sbGVjdGlvbiogY29uc3QgY29sbGVjdGlvbiwKLSAgICAgICAgICAgICAgIGNvbnN0
IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGUmIGtleSwKLSAgICAg
ICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90
eXBlJiB2YWx1ZSkgewotICByZXR1cm4gTG9va3VwT3JJbnNlcnQoCi0gICAgICBjb2xsZWN0aW9u
LCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlKGtleSwgdmFsdWUpKTsKLX0KLQotLy8g
Q291bnRzIHRoZSBudW1iZXIgb2YgZXF1aXZhbGVudCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gInNl
cXVlbmNlIiwgYW5kIHN0b3JlcwotLy8gdGhlIHJlc3VsdHMgaW4gImNvdW50X21hcCIgd2l0aCBl
bGVtZW50IGFzIHRoZSBrZXkgYW5kIGNvdW50IGFzIHRoZSB2YWx1ZS4KLS8vCi0vLyBFeGFtcGxl
OgotLy8gICB2ZWN0b3I8c3RyaW5nPiB2ID0geyJhIiwgImIiLCAiYyIsICJhIiwgImIifTsKLS8v
ICAgbWFwPHN0cmluZywgaW50PiBtOwotLy8gICBBZGRUb2tlbkNvdW50cyh2LCAxLCAmbSk7Ci0v
LyAgIGFzc2VydChtWyJhIl0gPT0gMik7Ci0vLyAgIGFzc2VydChtWyJiIl0gPT0gMik7Ci0vLyAg
IGFzc2VydChtWyJjIl0gPT0gMSk7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgU2VxdWVuY2UsIHR5cGVu
YW1lIENvbGxlY3Rpb24+Ci12b2lkIEFkZFRva2VuQ291bnRzKAotICAgIGNvbnN0IFNlcXVlbmNl
JiBzZXF1ZW5jZSwKLSAgICBjb25zdCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpz
ZWNvbmRfdHlwZSYgaW5jcmVtZW50LAotICAgIENvbGxlY3Rpb24qIGNvbnN0IGNvdW50X21hcCkg
ewotICBmb3IgKHR5cGVuYW1lIFNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdCA9IHNlcXVlbmNl
LmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXQpIHsKLSAgICB0eXBl
bmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlwZSYgdmFsdWUgPQotICAgICAg
ICBMb29rdXBPckluc2VydChjb3VudF9tYXAsICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGUoKSk7Ci0gICAgdmFs
dWUgKz0gaW5jcmVtZW50OwotICB9Ci19Ci0KLS8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhl
IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBrZXkuIElmIG5vdCBmb3VuZCwgYSB2YWx1ZQotLy8gaXMg
ZGVmYXVsdCBjb25zdHJ1Y3RlZCBvbiB0aGUgaGVhcCBhbmQgYWRkZWQgdG8gdGhlIG1hcC4KLS8v
Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3IgY29udGFpbmVycyBvZiB0aGUgZm9ybSBt
YXA8S2V5LCBWYWx1ZSo+LCB3aGVyZQotLy8gaW5zZXJ0aW5nIGEgbmV3IGtleSwgdmFsdWUgcGFp
ciBpbnZvbHZlcyBjb25zdHJ1Y3RpbmcgYSBuZXcgaGVhcC1hbGxvY2F0ZWQKLS8vIFZhbHVlLCBh
bmQgc3RvcmluZyBhIHBvaW50ZXIgdG8gdGhhdCBpbiB0aGUgY29sbGVjdGlvbi4KLXRlbXBsYXRl
IDxjbGFzcyBDb2xsZWN0aW9uPgotdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6c2Vj
b25kX3R5cGUmCi1Mb29rdXBPckluc2VydE5ldyhDb2xsZWN0aW9uKiBjb25zdCBjb2xsZWN0aW9u
LAotICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlw
ZTo6Zmlyc3RfdHlwZSYga2V5KSB7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90
cmFpdHM8Ci0gICAgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGU+
Ojp2YWx1ZV90eXBlIEVsZW1lbnQ7Ci0gIHN0ZDo6cGFpcjx0eXBlbmFtZSBDb2xsZWN0aW9uOjpp
dGVyYXRvciwgYm9vbD4gcmV0ID0KLSAgICAgIGNvbGxlY3Rpb24tPmluc2VydCh0eXBlbmFtZSBD
b2xsZWN0aW9uOjp2YWx1ZV90eXBlKAotICAgICAgICAgIGtleSwKLSAgICAgICAgICBzdGF0aWNf
Y2FzdDx0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlwZT4oTlVMTCkp
KTsKLSAgaWYgKHJldC5zZWNvbmQpIHsKLSAgICByZXQuZmlyc3QtPnNlY29uZCA9IG5ldyBFbGVt
ZW50KCk7Ci0gIH0KLSAgcmV0dXJuIHJldC5maXJzdC0+c2Vjb25kOwotfQotCi0vLyBTYW1lIGFz
IGFib3ZlIGJ1dCBjb25zdHJ1Y3RzIHRoZSB2YWx1ZSB1c2luZyB0aGUgc2luZ2xlLWFyZ3VtZW50
IGNvbnN0cnVjdG9yCi0vLyBhbmQgdGhlIGdpdmVuICJhcmciLgotdGVtcGxhdGUgPGNsYXNzIENv
bGxlY3Rpb24sIGNsYXNzIEFyZz4KLXR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNl
Y29uZF90eXBlJgotTG9va3VwT3JJbnNlcnROZXcoQ29sbGVjdGlvbiogY29uc3QgY29sbGVjdGlv
biwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5
cGU6OmZpcnN0X3R5cGUmIGtleSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IEFyZyYgYXJnKSB7
Ci0gIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8Ci0gICAgdHlwZW5hbWUg
Q29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGU+Ojp2YWx1ZV90eXBlIEVsZW1lbnQ7
Ci0gIHN0ZDo6cGFpcjx0eXBlbmFtZSBDb2xsZWN0aW9uOjppdGVyYXRvciwgYm9vbD4gcmV0ID0K
LSAgICAgIGNvbGxlY3Rpb24tPmluc2VydCh0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBl
KAotICAgICAgICAgIGtleSwKLSAgICAgICAgICBzdGF0aWNfY2FzdDx0eXBlbmFtZSBDb2xsZWN0
aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlwZT4oTlVMTCkpKTsKLSAgaWYgKHJldC5zZWNvbmQp
IHsKLSAgICByZXQuZmlyc3QtPnNlY29uZCA9IG5ldyBFbGVtZW50KGFyZyk7Ci0gIH0KLSAgcmV0
dXJuIHJldC5maXJzdC0+c2Vjb25kOwotfQotCi0vLyBMb29rdXAgb2YgbGlua2VkL3NoYXJlZCBw
b2ludGVycyBpcyB1c2VkIGluIHR3byBzY2VuYXJpb3M6Ci0vLwotLy8gVXNlIExvb2t1cE9ySW5z
ZXJ0TmV3TGlua2VkUHRyIGlmIHRoZSBjb250YWluZXIgb3ducyB0aGUgZWxlbWVudHMuCi0vLyBJ
biB0aGlzIGNhc2UgaXQgaXMgZmluZSB3b3JraW5nIHdpdGggdGhlIHJhdyBwb2ludGVyIGFzIGxv
bmcgYXMgaXQgaXMKLS8vIGd1YXJhbnRlZWQgdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIGRlbGV0
ZS91cGRhdGUgYW4gYWNjZXNzZWQgZWxlbWVudC4KLS8vIEEgbXV0ZXggd2lsbCBuZWVkIHRvIGxv
Y2sgdGhlIGNvbnRhaW5lciBvcGVyYXRpb24gYXMgd2VsbCBhcyB0aGUgdXNlCi0vLyBvZiB0aGUg
cmV0dXJuZWQgZWxlbWVudHMuIEZpbmRpbmcgYW4gZWxlbWVudCBtYXkgYmUgcGVyZm9ybWVkIHVz
aW5nCi0vLyBGaW5kTGlua2VkUHRyKigpLgotLy8KLS8vIFVzZSBMb29rdXBPckluc2VydE5ld1No
YXJlZFB0ciBpZiB0aGUgY29udGFpbmVyIGRvZXMgbm90IG93biB0aGUgZWxlbWVudHMKLS8vIGZv
ciB0aGVpciB3aG9sZSBsaWZldGltZS4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGNhc2Ugd2hlbiBh
IHJlYWRlciBhbGxvd3MKLS8vIHBhcmFsbGVsIHVwZGF0ZXMgdG8gdGhlIGNvbnRhaW5lci4gSW4g
dGhpcyBjYXNlIGEgTXV0ZXggb25seSBuZWVkcyB0byBsb2NrCi0vLyBjb250YWluZXIgb3BlcmF0
aW9ucywgYnV0IGFsbCBlbGVtZW50IG9wZXJhdGlvbnMgbXVzdCBiZSBwZXJmb3JtZWQgb24gdGhl
Ci0vLyBzaGFyZWQgcG9pbnRlci4gRmluZGluZyBhbiBlbGVtZW50IG11c3QgYmUgcGVyZm9ybWVk
IHVzaW5nIEZpbmRQdHIqKCkgYW5kCi0vLyBjYW5ub3QgYmUgZG9uZSB3aXRoIEZpbmRMaW5rZWRQ
dHIqKCkgZXZlbiB0aG91Z2ggaXQgY29tcGlsZXMuCi0KLS8vIExvb2t1cCBhIGtleSBpbiBhIG1h
cCBvciBoYXNoX21hcCB3aG9zZSB2YWx1ZXMgYXJlIGxpbmtlZF9wdHJzLiAgSWYgaXQgaXMKLS8v
IG1pc3NpbmcsIHNldCBjb2xsZWN0aW9uW2tleV0ucmVzZXQobmV3IFZhbHVlOjplbGVtZW50X3R5
cGUpIGFuZCByZXR1cm4gdGhhdC4KLS8vIFZhbHVlOjplbGVtZW50X3R5cGUgbXVzdCBiZSBkZWZh
dWx0IGNvbnN0cnVjdGFibGUuCi10ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbj4KLXR5cGVuYW1l
IENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlOjplbGVtZW50X3R5cGUqCi1Mb29r
dXBPckluc2VydE5ld0xpbmtlZFB0cigKLSAgICBDb2xsZWN0aW9uKiBjb25zdCBjb2xsZWN0aW9u
LAotICAgIGNvbnN0IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGUm
IGtleSkgewotICB0eXBlZGVmIHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29u
ZF90eXBlIFZhbHVlOwotICBzdGQ6OnBhaXI8dHlwZW5hbWUgQ29sbGVjdGlvbjo6aXRlcmF0b3Is
IGJvb2w+IHJldCA9Ci0gICAgICBjb2xsZWN0aW9uLT5pbnNlcnQodHlwZW5hbWUgQ29sbGVjdGlv
bjo6dmFsdWVfdHlwZShrZXksIFZhbHVlKCkpKTsKLSAgaWYgKHJldC5zZWNvbmQpIHsKLSAgICBy
ZXQuZmlyc3QtPnNlY29uZC5yZXNldChuZXcgdHlwZW5hbWUgVmFsdWU6OmVsZW1lbnRfdHlwZSk7
Ci0gIH0KLSAgcmV0dXJuIHJldC5maXJzdC0+c2Vjb25kLmdldCgpOwotfQotCi0vLyBBIHZhcmlh
bnQgb2YgTG9va3VwT3JJbnNlcnROZXdMaW5rZWRQdHIgd2hlcmUgdGhlIHZhbHVlIGlzIGNvbnN0
cnVjdGVkIHVzaW5nCi0vLyBhIHNpbmdsZS1wYXJhbWV0ZXIgY29uc3RydWN0b3IuICBOb3RlOiB0
aGUgY29uc3RydWN0b3IgYXJndW1lbnQgaXMgY29tcHV0ZWQKLS8vIGV2ZW4gaWYgaXQgd2lsbCBu
b3QgYmUgdXNlZCwgc28gb25seSB2YWx1ZXMgY2hlYXAgdG8gY29tcHV0ZSBzaG91bGQgYmUgcGFz
c2VkCi0vLyBoZXJlLiAgT24gdGhlIG90aGVyIGhhbmQgaXQgZG9lcyBub3QgbWF0dGVyIGhvdyBl
eHBlbnNpdmUgdGhlIGNvbnN0cnVjdGlvbiBvZgotLy8gdGhlIGFjdHVhbCBzdG9yZWQgdmFsdWUg
aXMsIGFzIHRoYXQgb25seSBvY2N1cnMgaWYgbmVjZXNzYXJ5LgotdGVtcGxhdGUgPGNsYXNzIENv
bGxlY3Rpb24sIGNsYXNzIEFyZz4KLXR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNl
Y29uZF90eXBlOjplbGVtZW50X3R5cGUqCi1Mb29rdXBPckluc2VydE5ld0xpbmtlZFB0cigKLSAg
ICBDb2xsZWN0aW9uKiBjb25zdCBjb2xsZWN0aW9uLAotICAgIGNvbnN0IHR5cGVuYW1lIENvbGxl
Y3Rpb246OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGUmIGtleSwKLSAgICBjb25zdCBBcmcmIGFyZykg
ewotICB0eXBlZGVmIHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBl
IFZhbHVlOwotICBzdGQ6OnBhaXI8dHlwZW5hbWUgQ29sbGVjdGlvbjo6aXRlcmF0b3IsIGJvb2w+
IHJldCA9Ci0gICAgICBjb2xsZWN0aW9uLT5pbnNlcnQodHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFs
dWVfdHlwZShrZXksIFZhbHVlKCkpKTsKLSAgaWYgKHJldC5zZWNvbmQpIHsKLSAgICByZXQuZmly
c3QtPnNlY29uZC5yZXNldChuZXcgdHlwZW5hbWUgVmFsdWU6OmVsZW1lbnRfdHlwZShhcmcpKTsK
LSAgfQotICByZXR1cm4gcmV0LmZpcnN0LT5zZWNvbmQuZ2V0KCk7Ci19Ci0KLS8vIExvb2t1cCBh
IGtleSBpbiBhIG1hcCBvciBoYXNoX21hcCB3aG9zZSB2YWx1ZXMgYXJlIHNoYXJlZF9wdHJzLiAg
SWYgaXQgaXMKLS8vIG1pc3NpbmcsIHNldCBjb2xsZWN0aW9uW2tleV0ucmVzZXQobmV3IFZhbHVl
OjplbGVtZW50X3R5cGUpLiBVbmxpa2UKLS8vIExvb2t1cE9ySW5zZXJ0TmV3TGlua2VkUHRyLCB0
aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNoYXJlZF9wdHIgaW5zdGVhZCBvZgotLy8gdGhlIHJh
dyBwb2ludGVyLiBWYWx1ZTo6ZWxlbWVudF90eXBlIG11c3QgYmUgZGVmYXVsdCBjb25zdHJ1Y3Rh
YmxlLgotdGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24+Ci10eXBlbmFtZSBDb2xsZWN0aW9uOjp2
YWx1ZV90eXBlOjpzZWNvbmRfdHlwZSYKLUxvb2t1cE9ySW5zZXJ0TmV3U2hhcmVkUHRyKAotICAg
IENvbGxlY3Rpb24qIGNvbnN0IGNvbGxlY3Rpb24sCi0gICAgY29uc3QgdHlwZW5hbWUgQ29sbGVj
dGlvbjo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZSYga2V5KSB7Ci0gIHR5cGVkZWYgdHlwZW5hbWUg
Q29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGUgU2hhcmVkUHRyOwotICB0eXBlZGVm
IHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlOjplbGVtZW50X3R5
cGUgRWxlbWVudDsKLSAgc3RkOjpwYWlyPHR5cGVuYW1lIENvbGxlY3Rpb246Oml0ZXJhdG9yLCBi
b29sPiByZXQgPQotICAgICAgY29sbGVjdGlvbi0+aW5zZXJ0KHR5cGVuYW1lIENvbGxlY3Rpb246
OnZhbHVlX3R5cGUoa2V5LCBTaGFyZWRQdHIoKSkpOwotICBpZiAocmV0LnNlY29uZCkgewotICAg
IHJldC5maXJzdC0+c2Vjb25kLnJlc2V0KG5ldyBFbGVtZW50KCkpOwotICB9Ci0gIHJldHVybiBy
ZXQuZmlyc3QtPnNlY29uZDsKLX0KLQotLy8gQSB2YXJpYW50IG9mIExvb2t1cE9ySW5zZXJ0TmV3
U2hhcmVkUHRyIHdoZXJlIHRoZSB2YWx1ZSBpcyBjb25zdHJ1Y3RlZCB1c2luZwotLy8gYSBzaW5n
bGUtcGFyYW1ldGVyIGNvbnN0cnVjdG9yLiAgTm90ZTogdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50
IGlzIGNvbXB1dGVkCi0vLyBldmVuIGlmIGl0IHdpbGwgbm90IGJlIHVzZWQsIHNvIG9ubHkgdmFs
dWVzIGNoZWFwIHRvIGNvbXB1dGUgc2hvdWxkIGJlIHBhc3NlZAotLy8gaGVyZS4gIE9uIHRoZSBv
dGhlciBoYW5kIGl0IGRvZXMgbm90IG1hdHRlciBob3cgZXhwZW5zaXZlIHRoZSBjb25zdHJ1Y3Rp
b24gb2YKLS8vIHRoZSBhY3R1YWwgc3RvcmVkIHZhbHVlIGlzLCBhcyB0aGF0IG9ubHkgb2NjdXJz
IGlmIG5lY2Vzc2FyeS4KLXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBBcmc+Ci10
eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlwZSYKLUxvb2t1cE9ySW5z
ZXJ0TmV3U2hhcmVkUHRyKAotICAgIENvbGxlY3Rpb24qIGNvbnN0IGNvbGxlY3Rpb24sCi0gICAg
Y29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZSYga2V5LAot
ICAgIGNvbnN0IEFyZyYgYXJnKSB7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFs
dWVfdHlwZTo6c2Vjb25kX3R5cGUgU2hhcmVkUHRyOwotICB0eXBlZGVmIHR5cGVuYW1lIENvbGxl
Y3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlOjplbGVtZW50X3R5cGUgRWxlbWVudDsKLSAg
c3RkOjpwYWlyPHR5cGVuYW1lIENvbGxlY3Rpb246Oml0ZXJhdG9yLCBib29sPiByZXQgPQotICAg
ICAgY29sbGVjdGlvbi0+aW5zZXJ0KHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGUoa2V5
LCBTaGFyZWRQdHIoKSkpOwotICBpZiAocmV0LnNlY29uZCkgewotICAgIHJldC5maXJzdC0+c2Vj
b25kLnJlc2V0KG5ldyBFbGVtZW50KGFyZykpOwotICB9Ci0gIHJldHVybiByZXQuZmlyc3QtPnNl
Y29uZDsKLX0KLQotLy8KLS8vIE1pc2MgVXRpbGl0eSBGdW5jdGlvbnMKLS8vCi0KLS8vIFVwZGF0
ZXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LiBJZiB0aGUga2V5IHdh
cyBub3QgYWxyZWFkeQotLy8gcHJlc2VudCwgdGhlbiB0aGUga2V5LXZhbHVlIHBhaXIgYXJlIGlu
c2VydGVkIGFuZCAicHJldmlvdXMiIGlzIHVuY2hhbmdlZC4gSWYKLS8vIHRoZSBrZXkgd2FzIGFs
cmVhZHkgcHJlc2VudCwgdGhlIHZhbHVlIGlzIHVwZGF0ZWQgYW5kICIqcHJldmlvdXMiIHdpbGwK
LS8vIGNvbnRhaW4gYSBjb3B5IG9mIHRoZSBvbGQgdmFsdWUuCi0vLwotLy8gSW5zZXJ0T3JSZXR1
cm5FeGlzdGluZyBoYXMgY29tcGxlbWVudGFyeSBiZWhhdmlvciB0aGF0IHJldHVybnMgdGhlCi0v
LyBhZGRyZXNzIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcgdmFsdWUsIHJhdGhlciB0aGFuIHVwZGF0
aW5nIGl0LgotdGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24+Ci1ib29sIFVwZGF0ZVJldHVybkNv
cHkoQ29sbGVjdGlvbiogY29uc3QgY29sbGVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpmaXJzdF90eXBlJiBrZXksCi0g
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlw
ZTo6c2Vjb25kX3R5cGUmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIENv
bGxlY3Rpb246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlKiBwcmV2aW91cykgewotICBzdGQ6OnBh
aXI8dHlwZW5hbWUgQ29sbGVjdGlvbjo6aXRlcmF0b3IsIGJvb2w+IHJldCA9Ci0gICAgICBjb2xs
ZWN0aW9uLT5pbnNlcnQodHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZShrZXksIHZhbHVl
KSk7Ci0gIGlmICghcmV0LnNlY29uZCkgewotICAgIC8vIHVwZGF0ZQotICAgIGlmIChwcmV2aW91
cykgewotICAgICAgKnByZXZpb3VzID0gcmV0LmZpcnN0LT5zZWNvbmQ7Ci0gICAgfQotICAgIHJl
dC5maXJzdC0+c2Vjb25kID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJu
IGZhbHNlOwotfQotCi0vLyBTYW1lIGFzIGFib3ZlIGV4Y2VwdCB0aGF0IHRoZSBrZXkgYW5kIHZh
bHVlIGFyZSBwYXNzZWQgYXMgYSBwYWlyLgotdGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24+Ci1i
b29sIFVwZGF0ZVJldHVybkNvcHkoQ29sbGVjdGlvbiogY29uc3QgY29sbGVjdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlJiB2
dCwKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBl
OjpzZWNvbmRfdHlwZSogcHJldmlvdXMpIHsKLSAgc3RkOjpwYWlyPHR5cGVuYW1lIENvbGxlY3Rp
b246Oml0ZXJhdG9yLCBib29sPiByZXQgPSBjb2xsZWN0aW9uLT5pbnNlcnQodnQpOwotICBpZiAo
IXJldC5zZWNvbmQpIHsKLSAgICAvLyB1cGRhdGUKLSAgICBpZiAocHJldmlvdXMpIHsKLSAgICAg
ICpwcmV2aW91cyA9IHJldC5maXJzdC0+c2Vjb25kOwotICAgIH0KLSAgICByZXQuZmlyc3QtPnNl
Y29uZCA9IHZ0LnNlY29uZDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gZmFsc2U7
Ci19Ci0KLS8vIFRyaWVzIHRvIGluc2VydCB0aGUgZ2l2ZW4ga2V5LXZhbHVlIHBhaXIgaW50byB0
aGUgY29sbGVjdGlvbi4gUmV0dXJucyBOVUxMIGlmCi0vLyB0aGUgaW5zZXJ0IHN1Y2NlZWRzLiBP
dGhlcndpc2UsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBleGlzdGluZyB2YWx1ZS4KLS8vCi0v
LyBUaGlzIGNvbXBsZW1lbnRzIFVwZGF0ZVJldHVybkNvcHkgaW4gdGhhdCBpdCBhbGxvd3MgdG8g
dXBkYXRlIG9ubHkgYWZ0ZXIKLS8vIHZlcmlmeWluZyB0aGUgb2xkIHZhbHVlIGFuZCBzdGlsbCBp
bnNlcnQgcXVpY2tseSB3aXRob3V0IGhhdmluZyB0byBsb29rIHVwCi0vLyB0d2ljZS4gVW5saWtl
IFVwZGF0ZVJldHVybkNvcHkgdGhpcyBhbHNvIGRvZXMgbm90IGNvbWUgd2l0aCB0aGUgaXNzdWUg
b2YgYW4KLS8vIHVuZGVmaW5lZCBwcmV2aW91cyogaW4gY2FzZSBuZXcgZGF0YSB3YXMgaW5zZXJ0
ZWQuCi10ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbj4KLXR5cGVuYW1lIENvbGxlY3Rpb246OnZh
bHVlX3R5cGU6OnNlY29uZF90eXBlKiBjb25zdAotSW5zZXJ0T3JSZXR1cm5FeGlzdGluZyhDb2xs
ZWN0aW9uKiBjb25zdCBjb2xsZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0
eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlJiB2dCkgewotICBzdGQ6OnBhaXI8dHlwZW5h
bWUgQ29sbGVjdGlvbjo6aXRlcmF0b3IsIGJvb2w+IHJldCA9IGNvbGxlY3Rpb24tPmluc2VydCh2
dCk7Ci0gIGlmIChyZXQuc2Vjb25kKSB7Ci0gICAgcmV0dXJuIE5VTEw7ICAvLyBJbnNlcnRlZCwg
bm8gZXhpc3RpbmcgcHJldmlvdXMgdmFsdWUuCi0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuICZyZXQu
Zmlyc3QtPnNlY29uZDsgIC8vIFJldHVybiBhZGRyZXNzIG9mIGFscmVhZHkgZXhpc3RpbmcgdmFs
dWUuCi0gIH0KLX0KLQotLy8gU2FtZSBhcyBhYm92ZSwgZXhjZXB0IGZvciBleHBsaWNpdCBrZXkg
YW5kIGRhdGEuCi10ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbj4KLXR5cGVuYW1lIENvbGxlY3Rp
b246OnZhbHVlX3R5cGU6OnNlY29uZF90eXBlKiBjb25zdAotSW5zZXJ0T3JSZXR1cm5FeGlzdGlu
ZygKLSAgICBDb2xsZWN0aW9uKiBjb25zdCBjb2xsZWN0aW9uLAotICAgIGNvbnN0IHR5cGVuYW1l
IENvbGxlY3Rpb246OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGUmIGtleSwKLSAgICBjb25zdCB0eXBl
bmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNvbmRfdHlwZSYgZGF0YSkgewotICByZXR1
cm4gSW5zZXJ0T3JSZXR1cm5FeGlzdGluZyhjb2xsZWN0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlKGtleSwgZGF0YSkp
OwotfQotCi0vLyBFcmFzZXMgdGhlIGNvbGxlY3Rpb24gaXRlbSBpZGVudGlmaWVkIGJ5IHRoZSBn
aXZlbiBrZXksIGFuZCByZXR1cm5zIHRoZSB2YWx1ZQotLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQg
a2V5LiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHZhbHVlIChpLmUuLCB0aGUKLS8vIG1hcHBlZF90
eXBlKSBpcyBhIHBvaW50ZXIuIFJldHVybnMgTlVMTCBpZiB0aGUga2V5IHdhcyBub3QgZm91bmQg
aW4gdGhlCi0vLyBjb2xsZWN0aW9uLgotLy8KLS8vIEV4YW1wbGVzOgotLy8gICBtYXA8c3RyaW5n
LCBNeVR5cGUqPiBteV9tYXA7Ci0vLwotLy8gT25lIGxpbmUgY2xlYW51cDoKLS8vICAgICBkZWxl
dGUgRXJhc2VLZXlSZXR1cm5WYWx1ZVB0cigmbXlfbWFwLCAiYWJjIik7Ci0vLwotLy8gVXNlIHJl
dHVybmVkIHZhbHVlOgotLy8gICAgIHNjb3BlZF9wdHI8TXlUeXBlPiB2YWx1ZV9wdHIoRXJhc2VL
ZXlSZXR1cm5WYWx1ZVB0cigmbXlfbWFwLCAiYWJjIikpOwotLy8gICAgIGlmICh2YWx1ZV9wdHIu
Z2V0KCkpCi0vLyAgICAgICB2YWx1ZV9wdHItPkRvU29tZXRoaW5nKCk7Ci0vLwotdGVtcGxhdGUg
PGNsYXNzIENvbGxlY3Rpb24+Ci10eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpzZWNv
bmRfdHlwZSBFcmFzZUtleVJldHVyblZhbHVlUHRyKAotICAgIENvbGxlY3Rpb24qIGNvbnN0IGNv
bGxlY3Rpb24sCi0gICAgY29uc3QgdHlwZW5hbWUgQ29sbGVjdGlvbjo6dmFsdWVfdHlwZTo6Zmly
c3RfdHlwZSYga2V5KSB7Ci0gIHR5cGVuYW1lIENvbGxlY3Rpb246Oml0ZXJhdG9yIGl0ID0gY29s
bGVjdGlvbi0+ZmluZChrZXkpOwotICBpZiAoaXQgPT0gY29sbGVjdGlvbi0+ZW5kKCkpIHsKLSAg
ICByZXR1cm4gTlVMTDsKLSAgfQotICB0eXBlbmFtZSBDb2xsZWN0aW9uOjp2YWx1ZV90eXBlOjpz
ZWNvbmRfdHlwZSB2ID0gaXQtPnNlY29uZDsKLSAgY29sbGVjdGlvbi0+ZXJhc2UoaXQpOwotICBy
ZXR1cm4gdjsKLX0KLQotLy8gSW5zZXJ0cyBhbGwgdGhlIGtleXMgZnJvbSBtYXBfY29udGFpbmVy
IGludG8ga2V5X2NvbnRhaW5lciwgd2hpY2ggbXVzdAotLy8gc3VwcG9ydCBpbnNlcnQoTWFwQ29u
dGFpbmVyOjprZXlfdHlwZSkuCi0vLwotLy8gTm90ZTogYW55IGluaXRpYWwgY29udGVudHMgb2Yg
dGhlIGtleV9jb250YWluZXIgYXJlIG5vdCBjbGVhcmVkLgotdGVtcGxhdGUgPGNsYXNzIE1hcENv
bnRhaW5lciwgY2xhc3MgS2V5Q29udGFpbmVyPgotdm9pZCBJbnNlcnRLZXlzRnJvbU1hcChjb25z
dCBNYXBDb250YWluZXImIG1hcF9jb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIEtl
eUNvbnRhaW5lcioga2V5X2NvbnRhaW5lcikgewotICBHT09HTEVfQ0hFQ0soa2V5X2NvbnRhaW5l
ciAhPSBOVUxMKTsKLSAgZm9yICh0eXBlbmFtZSBNYXBDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwX2NvbnRhaW5lci5iZWdpbigpOwotICAgICAgIGl0ICE9IG1hcF9jb250YWluZXIu
ZW5kKCk7ICsraXQpIHsKLSAgICBrZXlfY29udGFpbmVyLT5pbnNlcnQoaXQtPmZpcnN0KTsKLSAg
fQotfQotCi0vLyBBcHBlbmRzIGFsbCB0aGUga2V5cyBmcm9tIG1hcF9jb250YWluZXIgaW50byBr
ZXlfY29udGFpbmVyLCB3aGljaCBtdXN0Ci0vLyBzdXBwb3J0IHB1c2hfYmFjayhNYXBDb250YWlu
ZXI6OmtleV90eXBlKS4KLS8vCi0vLyBOb3RlOiBhbnkgaW5pdGlhbCBjb250ZW50cyBvZiB0aGUg
a2V5X2NvbnRhaW5lciBhcmUgbm90IGNsZWFyZWQuCi10ZW1wbGF0ZSA8Y2xhc3MgTWFwQ29udGFp
bmVyLCBjbGFzcyBLZXlDb250YWluZXI+Ci12b2lkIEFwcGVuZEtleXNGcm9tTWFwKGNvbnN0IE1h
cENvbnRhaW5lciYgbWFwX2NvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgS2V5Q29u
dGFpbmVyKiBrZXlfY29udGFpbmVyKSB7Ci0gIEdPT0dMRV9DSEVDSyhrZXlfY29udGFpbmVyICE9
IE5VTEwpOwotICBmb3IgKHR5cGVuYW1lIE1hcENvbnRhaW5lcjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXBfY29udGFpbmVyLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gbWFwX2NvbnRhaW5lci5lbmQo
KTsgKytpdCkgewotICAgIGtleV9jb250YWluZXItPnB1c2hfYmFjayhpdC0+Zmlyc3QpOwotICB9
Ci19Ci0KLS8vIEEgbW9yZSBzcGVjaWFsaXplZCBvdmVybG9hZCBvZiBBcHBlbmRLZXlzRnJvbU1h
cCB0byBvcHRpbWl6ZSByZWFsbG9jYXRpb25zCi0vLyBmb3IgdGhlIGNvbW1vbiBjYXNlIGluIHdo
aWNoIHdlJ3JlIGFwcGVuZGluZyBrZXlzIHRvIGEgdmVjdG9yIGFuZCBoZW5jZSBjYW4KLS8vIChh
bmQgc29tZXRpbWVzIHNob3VsZCkgY2FsbCByZXNlcnZlKCkgZmlyc3QuCi0vLwotLy8gKEl0IHdv
dWxkIGJlIHBvc3NpYmxlIHRvIHBsYXkgU0ZJTkFFIGdhbWVzIHRvIGNhbGwgcmVzZXJ2ZSgpIGZv
ciBhbnkKLS8vIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzIGl0LCBidXQgdGhpcyBzZWVtcyB0byBn
ZXQgdXMgOTklIG9mIHdoYXQgd2UgbmVlZAotLy8gd2l0aG91dCB0aGUgY29tcGxleGl0eSBvZiBh
IFNGSU5BRS1iYXNlZCBzb2x1dGlvbi4pCi10ZW1wbGF0ZSA8Y2xhc3MgTWFwQ29udGFpbmVyLCBj
bGFzcyBLZXlUeXBlPgotdm9pZCBBcHBlbmRLZXlzRnJvbU1hcChjb25zdCBNYXBDb250YWluZXIm
IG1hcF9jb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIHZlY3RvcjxLZXlUeXBlPiog
a2V5X2NvbnRhaW5lcikgewotICBHT09HTEVfQ0hFQ0soa2V5X2NvbnRhaW5lciAhPSBOVUxMKTsK
LSAgLy8gV2Ugbm93IGhhdmUgdGhlIG9wcG9ydHVuaXR5IHRvIGNhbGwgcmVzZXJ2ZSgpLiBDYWxs
aW5nIHJlc2VydmUoKSBldmVyeQotICAvLyB0aW1lIGlzIGEgYmFkIGlkZWEgZm9yIHNvbWUgdXNl
IGNhc2VzOiBsaWJzdGRjKysncyBpbXBsZW1lbnRhdGlvbiBvZgotICAvLyB2ZWN0b3I8Pjo6cmVz
ZXJ2ZSgpIHJlc2l6ZXMgdGhlIHZlY3RvcidzIGJhY2tpbmcgc3RvcmUgdG8gZXhhY3RseSB0aGUK
LSAgLy8gZ2l2ZW4gc2l6ZSAodW5sZXNzIGl0J3MgYWxyZWFkeSBhdCBsZWFzdCB0aGF0IGJpZyku
IEJlY2F1c2Ugb2YgdGhpcywKLSAgLy8gdGhlIHVzZSBjYXNlIHRoYXQgaW52b2x2ZXMgYXBwZW5k
aW5nIGEgbG90IG9mIHNtYWxsIG1hcHMgKHRvdGFsIHNpemUKLSAgLy8gTikgb25lIGJ5IG9uZSB0
byBhIHZlY3RvciB3b3VsZCBiZSBPKE5eMikuIEJ1dCBuZXZlciBjYWxsaW5nIHJlc2VydmUoKQot
ICAvLyBsb3NlcyB0aGUgb3Bwb3J0dW5pdHkgdG8gaW1wcm92ZSB0aGUgdXNlIGNhc2Ugb2YgYWRk
aW5nIGZyb20gYSBsYXJnZQotICAvLyBtYXAgdG8gYW4gZW1wdHkgdmVjdG9yICh0aGlzIGltcHJv
dmVzIHBlcmZvcm1hbmNlIGJ5IHVwIHRvIDMzJSkuIEEKLSAgLy8gbnVtYmVyIG9mIGhldXJpc3Rp
Y3MgYXJlIHBvc3NpYmxlOyBzZWUgdGhlIGRpc2N1c3Npb24gaW4KLSAgLy8gY2wvMzQwODE2OTYu
IEhlcmUgd2UgdXNlIHRoZSBzaW1wbGVzdCBvbmUuCi0gIGlmIChrZXlfY29udGFpbmVyLT5lbXB0
eSgpKSB7Ci0gICAga2V5X2NvbnRhaW5lci0+cmVzZXJ2ZShtYXBfY29udGFpbmVyLnNpemUoKSk7
Ci0gIH0KLSAgZm9yICh0eXBlbmFtZSBNYXBDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwX2NvbnRhaW5lci5iZWdpbigpOwotICAgICAgIGl0ICE9IG1hcF9jb250YWluZXIuZW5kKCk7
ICsraXQpIHsKLSAgICBrZXlfY29udGFpbmVyLT5wdXNoX2JhY2soaXQtPmZpcnN0KTsKLSAgfQot
fQotCi0vLyBJbnNlcnRzIGFsbCB0aGUgdmFsdWVzIGZyb20gbWFwX2NvbnRhaW5lciBpbnRvIHZh
bHVlX2NvbnRhaW5lciwgd2hpY2ggbXVzdAotLy8gc3VwcG9ydCBwdXNoX2JhY2soTWFwQ29udGFp
bmVyOjptYXBwZWRfdHlwZSkuCi0vLwotLy8gTm90ZTogYW55IGluaXRpYWwgY29udGVudHMgb2Yg
dGhlIHZhbHVlX2NvbnRhaW5lciBhcmUgbm90IGNsZWFyZWQuCi10ZW1wbGF0ZSA8Y2xhc3MgTWFw
Q29udGFpbmVyLCBjbGFzcyBWYWx1ZUNvbnRhaW5lcj4KLXZvaWQgQXBwZW5kVmFsdWVzRnJvbU1h
cChjb25zdCBNYXBDb250YWluZXImIG1hcF9jb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgVmFsdWVDb250YWluZXIqIHZhbHVlX2NvbnRhaW5lcikgewotICBHT09HTEVfQ0hFQ0so
dmFsdWVfY29udGFpbmVyICE9IE5VTEwpOwotICBmb3IgKHR5cGVuYW1lIE1hcENvbnRhaW5lcjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXBfY29udGFpbmVyLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0g
bWFwX2NvbnRhaW5lci5lbmQoKTsgKytpdCkgewotICAgIHZhbHVlX2NvbnRhaW5lci0+cHVzaF9i
YWNrKGl0LT5zZWNvbmQpOwotICB9Ci19Ci0KLS8vIEEgbW9yZSBzcGVjaWFsaXplZCBvdmVybG9h
ZCBvZiBBcHBlbmRWYWx1ZXNGcm9tTWFwIHRvIG9wdGltaXplIHJlYWxsb2NhdGlvbnMKLS8vIGZv
ciB0aGUgY29tbW9uIGNhc2UgaW4gd2hpY2ggd2UncmUgYXBwZW5kaW5nIHZhbHVlcyB0byBhIHZl
Y3RvciBhbmQgaGVuY2UKLS8vIGNhbiAoYW5kIHNvbWV0aW1lcyBzaG91bGQpIGNhbGwgcmVzZXJ2
ZSgpIGZpcnN0LgotLy8KLS8vIChJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBwbGF5IFNGSU5BRSBn
YW1lcyB0byBjYWxsIHJlc2VydmUoKSBmb3IgYW55Ci0vLyBjb250YWluZXIgdGhhdCBzdXBwb3J0
cyBpdCwgYnV0IHRoaXMgc2VlbXMgdG8gZ2V0IHVzIDk5JSBvZiB3aGF0IHdlIG5lZWQKLS8vIHdp
dGhvdXQgdGhlIGNvbXBsZXhpdHkgb2YgYSBTRklOQUUtYmFzZWQgc29sdXRpb24uKQotdGVtcGxh
dGUgPGNsYXNzIE1hcENvbnRhaW5lciwgY2xhc3MgVmFsdWVUeXBlPgotdm9pZCBBcHBlbmRWYWx1
ZXNGcm9tTWFwKGNvbnN0IE1hcENvbnRhaW5lciYgbWFwX2NvbnRhaW5lciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICB2ZWN0b3I8VmFsdWVUeXBlPiogdmFsdWVfY29udGFpbmVyKSB7Ci0gIEdP
T0dMRV9DSEVDSyh2YWx1ZV9jb250YWluZXIgIT0gTlVMTCk7Ci0gIC8vIFNlZSBBcHBlbmRLZXlz
RnJvbU1hcCBmb3Igd2h5IHRoaXMgaXMgZG9uZS4KLSAgaWYgKHZhbHVlX2NvbnRhaW5lci0+ZW1w
dHkoKSkgewotICAgIHZhbHVlX2NvbnRhaW5lci0+cmVzZXJ2ZShtYXBfY29udGFpbmVyLnNpemUo
KSk7Ci0gIH0KLSAgZm9yICh0eXBlbmFtZSBNYXBDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwX2NvbnRhaW5lci5iZWdpbigpOwotICAgICAgIGl0ICE9IG1hcF9jb250YWluZXIuZW5k
KCk7ICsraXQpIHsKLSAgICB2YWx1ZV9jb250YWluZXItPnB1c2hfYmFjayhpdC0+c2Vjb25kKTsK
LSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29n
bGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfU1RVQlNfTUFQX1VUSUxfSF9fCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbWF0aGxpbWl0cy5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMzczYjJiYjk3MTM3YjQzOGY0NjM1NTU2OTg0Yjk5ZjIzYzBiMGY4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9z
dHVicy9tYXRobGltaXRzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBbGwgUmlnaHRzIFJlc2VydmVkLgot
Ly8KLS8vIEF1dGhvcjogTWF4aW0gTGlmYW50c2V2Ci0vLwotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3N0dWJzL21hdGhsaW1pdHMuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9jb21tb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotCi0vLyBNU1ZDKysgMjAwNSBhbmQgb2xkZXIgY29tcGlsZXJzIHRoaW5rIHRoZSBoZWFkZXIg
ZGVjbGFyYXRpb24gd2FzIGEKLS8vIGRlZmluaXRpb24sIGFuZCBlcnJvbmVvdXNseSBmbGFnIHRo
ZXNlIGFzIGEgZHVwbGljYXRlIGRlZmluaXRpb24uCi0jaWYgZGVmaW5lZChDT01QSUxFUl9NU1ZD
KSB8fCBfX2NwbHVzY3BsdXMgPCAyMDExMDNMCi0KLSNkZWZpbmUgREVGX0NPTU1PTl9MSU1JVFMo
VHlwZSkKLSNkZWZpbmUgREVGX1VOU0lHTkVEX0lOVF9MSU1JVFMoVHlwZSkKLSNkZWZpbmUgREVG
X1NJR05FRF9JTlRfTElNSVRTKFR5cGUpCi0jZGVmaW5lIERFRl9QUkVDSVNJT05fTElNSVRTKFR5
cGUpCi0KLSNlbHNlCi0KLSNkZWZpbmUgREVGX0NPTU1PTl9MSU1JVFMoVHlwZSkgXAotY29uc3Qg
Ym9vbCBNYXRoTGltaXRzPFR5cGU+OjprSXNTaWduZWQ7IFwKLWNvbnN0IGJvb2wgTWF0aExpbWl0
czxUeXBlPjo6a0lzSW50ZWdlcjsgXAotY29uc3QgaW50IE1hdGhMaW1pdHM8VHlwZT46OmtNaW4x
MEV4cDsgXAotY29uc3QgaW50IE1hdGhMaW1pdHM8VHlwZT46OmtNYXgxMEV4cDsKLQotI2RlZmlu
ZSBERUZfVU5TSUdORURfSU5UX0xJTUlUUyhUeXBlKSBcCi1ERUZfQ09NTU9OX0xJTUlUUyhUeXBl
KSBcCi1jb25zdCBUeXBlIE1hdGhMaW1pdHM8VHlwZT46OmtQb3NNaW47IFwKLWNvbnN0IFR5cGUg
TWF0aExpbWl0czxUeXBlPjo6a1Bvc01heDsgXAotY29uc3QgVHlwZSBNYXRoTGltaXRzPFR5cGU+
OjprTWluOyBcCi1jb25zdCBUeXBlIE1hdGhMaW1pdHM8VHlwZT46OmtNYXg7IFwKLWNvbnN0IFR5
cGUgTWF0aExpbWl0czxUeXBlPjo6a0Vwc2lsb247IFwKLWNvbnN0IFR5cGUgTWF0aExpbWl0czxU
eXBlPjo6a1N0ZEVycm9yOwotCi0jZGVmaW5lIERFRl9TSUdORURfSU5UX0xJTUlUUyhUeXBlKSBc
Ci1ERUZfVU5TSUdORURfSU5UX0xJTUlUUyhUeXBlKSBcCi1jb25zdCBUeXBlIE1hdGhMaW1pdHM8
VHlwZT46OmtOZWdNaW47IFwKLWNvbnN0IFR5cGUgTWF0aExpbWl0czxUeXBlPjo6a05lZ01heDsK
LQotI2RlZmluZSBERUZfUFJFQ0lTSU9OX0xJTUlUUyhUeXBlKSBcCi1jb25zdCBpbnQgTWF0aExp
bWl0czxUeXBlPjo6a1ByZWNpc2lvbkRpZ2l0czsKLQotI2VuZGlmICAvLyBub3QgQ09NUElMRVJf
TVNWQwotCi0vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1YWRydXBsZV9wcmVjaXNp
b25fZmxvYXRpbmctcG9pbnRfZm9ybWF0I0RvdWJsZS1kb3VibGVfYXJpdGhtZXRpYwotLy8gV2l0
aCBzb21lIGNvbXBpbGVycyAoZ2NjIDQuNi54KSBvbiBzb21lIHBsYXRmb3JtcyAocG93ZXJwYzY0
KSwKLS8vICJsb25nIGRvdWJsZSIgaXMgaW1wbGVtZW50ZWQgYXMgYSBwYWlyIG9mIGRvdWJsZTog
ImRvdWJsZSBkb3VibGUiIGZvcm1hdC4KLS8vIFRoaXMgY2F1c2VzIGEgcHJvYmxlbSB3aXRoIGVw
c2lsb24gKGVwcykuCi0vLyBlcHMgaXMgdGhlIHNtYWxsZXN0IHBvc2l0aXZlIG51bWJlciBzdWNo
IHRoYXQgMS4wICsgZXBzID4gMS4wCi0vLwotLy8gTm9ybWFsIGZvcm1hdDogIDEuMCArIGUgPSAx
LjAuLi4wMSAgICAgIC8vIE4tMSB6ZXJvcyBmb3IgTiBmcmFjdGlvbiBiaXRzCi0vLyBELUQgZm9y
bWF0OiAgICAgMS4wICsgZSA9IDEuMDAwLi4uMDAwMSAgLy8gZXBzaWxvbiBjYW4gYmUgdmVyeSBz
bWFsbAotLy8KLS8vIEluIHRoZSBub3JtYWwgZm9ybWF0LCAxLjAgKyBlIGhhcyB0byBmaXQgaW4g
b25lIHN0cmV0Y2ggb2YgYml0cy4KLS8vIFRoZSBtYXhpbXVtIHJvdW5kaW5nIGVycm9yIGlzIGhh
bGYgb2YgZXBzLgotLy8KLS8vIEluIHRoZSBkb3VibGUtZG91YmxlIGZvcm1hdCwgMS4wICsgZSBz
cGxpdHMgYWNyb3NzIHR3byBkb3VibGVzOgotLy8gMS4wIGluIHRoZSBoaWdoIGRvdWJsZSwgZSBp
biB0aGUgbG93IGRvdWJsZSwgYW5kIHRoZXkgZG8gbm90IGhhdmUgdG8KLS8vIGJlIGNvbnRpZ3Vv
dXMuICBUaGUgbWF4aW11bSByb3VuZGluZyBlcnJvciBvbiBhIHZhbHVlIGNsb3NlIHRvIDEuMCBp
cwotLy8gbXVjaCBsYXJnZXIgdGhhbiBlcHMuCi0vLwotLy8gU29tZSBjb2RlIGNoZWNrcyBmb3Ig
ZXJyb3JzIGJ5IGNvbXBhcmluZyBhIGNvbXB1dGVkIHZhbHVlIHRvIGEgZ29sZGVuCi0vLyB2YWx1
ZSArLy0gc29tZSBtdWx0aXBsZSBvZiB0aGUgbWF4aW11bSByb3VuZGluZyBlcnJvci4gIFRoZSBt
YXhpbXVtCi0vLyByb3VuZGluZyBlcnJvciBpcyBub3QgYXZhaWxhYmxlIHNvIHdlIHVzZSBlcHMg
YXMgYW4gYXBwcm94aW1hdGlvbgotLy8gaW5zdGVhZC4gIFRoYXQgZmFpbHMgd2hlbiBsb25nIGRv
dWJsZSBpcyBpbiB0aGUgZG91YmxlLWRvdWJsZSBmb3JtYXQuCi0vLyBUaGVyZWZvcmUsIHdlIGRl
ZmluZSBrU3RkRXJyb3IgYXMgYSBtdWx0aXBsZSBvZgotLy8gbWF4KERCTF9FUFNJTE9OICogREJM
X0VQU0lMT04sIGtFcHNpbG9uKSByYXRoZXIgdGhhbiBhIG11bHRpcGxlIG9mIGtFcHNpbG9uLgot
Ci0jZGVmaW5lIERFRl9GUF9MSU1JVFMoVHlwZSwgUFJFRklYKSBcCi1ERUZfQ09NTU9OX0xJTUlU
UyhUeXBlKSBcCi1jb25zdCBUeXBlIE1hdGhMaW1pdHM8VHlwZT46OmtQb3NNaW4gPSBQUkVGSVgj
I19NSU47IFwKLWNvbnN0IFR5cGUgTWF0aExpbWl0czxUeXBlPjo6a1Bvc01heCA9IFBSRUZJWCMj
X01BWDsgXAotY29uc3QgVHlwZSBNYXRoTGltaXRzPFR5cGU+OjprTWluID0gLU1hdGhMaW1pdHM8
VHlwZT46OmtQb3NNYXg7IFwKLWNvbnN0IFR5cGUgTWF0aExpbWl0czxUeXBlPjo6a01heCA9IE1h
dGhMaW1pdHM8VHlwZT46OmtQb3NNYXg7IFwKLWNvbnN0IFR5cGUgTWF0aExpbWl0czxUeXBlPjo6
a05lZ01pbiA9IC1NYXRoTGltaXRzPFR5cGU+OjprUG9zTWluOyBcCi1jb25zdCBUeXBlIE1hdGhM
aW1pdHM8VHlwZT46OmtOZWdNYXggPSAtTWF0aExpbWl0czxUeXBlPjo6a1Bvc01heDsgXAotY29u
c3QgVHlwZSBNYXRoTGltaXRzPFR5cGU+OjprRXBzaWxvbiA9IFBSRUZJWCMjX0VQU0lMT047IFwK
LS8qIDMyIGlzIDUgYml0cyBvZiBtYW50aXNzYSBlcnJvcjsgc2hvdWxkIGJlIGFkZXF1YXRlIGZv
ciBjb21tb24gZXJyb3JzICovIFwKLWNvbnN0IFR5cGUgTWF0aExpbWl0czxUeXBlPjo6a1N0ZEVy
cm9yID0gXAotICAzMiAqIChEQkxfRVBTSUxPTiAqIERCTF9FUFNJTE9OID4gTWF0aExpbWl0czxU
eXBlPjo6a0Vwc2lsb24gXAotICAgICAgPyBEQkxfRVBTSUxPTiAqIERCTF9FUFNJTE9OIDogTWF0
aExpbWl0czxUeXBlPjo6a0Vwc2lsb24pOyBcCi1ERUZfUFJFQ0lTSU9OX0xJTUlUUyhUeXBlKSBc
Ci1jb25zdCBUeXBlIE1hdGhMaW1pdHM8VHlwZT46OmtOYU4gPSBIVUdFX1ZBTCAtIEhVR0VfVkFM
OyBcCi1jb25zdCBUeXBlIE1hdGhMaW1pdHM8VHlwZT46OmtQb3NJbmYgPSBIVUdFX1ZBTDsgXAot
Y29uc3QgVHlwZSBNYXRoTGltaXRzPFR5cGU+OjprTmVnSW5mID0gLUhVR0VfVkFMOwotCi0vLyBU
aGUgZm9sbG93aW5nIGFyZSAqbm90KiBjYXN0cyEKLURFRl9TSUdORURfSU5UX0xJTUlUUyhpbnQ4
KQotREVGX1NJR05FRF9JTlRfTElNSVRTKGludDE2KSAgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2Nh
c3RpbmcpCi1ERUZfU0lHTkVEX0lOVF9MSU1JVFMoaW50MzIpICAvLyBOT0xJTlQocmVhZGFiaWxp
dHkvY2FzdGluZykKLURFRl9TSUdORURfSU5UX0xJTUlUUyhpbnQ2NCkgIC8vIE5PTElOVChyZWFk
YWJpbGl0eS9jYXN0aW5nKQotREVGX1VOU0lHTkVEX0lOVF9MSU1JVFModWludDgpCi1ERUZfVU5T
SUdORURfSU5UX0xJTUlUUyh1aW50MTYpICAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2FzdGluZykK
LURFRl9VTlNJR05FRF9JTlRfTElNSVRTKHVpbnQzMikgIC8vIE5PTElOVChyZWFkYWJpbGl0eS9j
YXN0aW5nKQotREVGX1VOU0lHTkVEX0lOVF9MSU1JVFModWludDY0KSAgLy8gTk9MSU5UKHJlYWRh
YmlsaXR5L2Nhc3RpbmcpCi0KLURFRl9TSUdORURfSU5UX0xJTUlUUyhsb25nIGludCkKLURFRl9V
TlNJR05FRF9JTlRfTElNSVRTKHVuc2lnbmVkIGxvbmcgaW50KQotCi1ERUZfRlBfTElNSVRTKGZs
b2F0LCBGTFQpCi1ERUZfRlBfTElNSVRTKGRvdWJsZSwgREJMKQotREVGX0ZQX0xJTUlUUyhsb25n
IGRvdWJsZSwgTERCTCk7Ci0KLSN1bmRlZiBERUZfQ09NTU9OX0xJTUlUUwotI3VuZGVmIERFRl9T
SUdORURfSU5UX0xJTUlUUwotI3VuZGVmIERFRl9VTlNJR05FRF9JTlRfTElNSVRTCi0jdW5kZWYg
REVGX0ZQX0xJTUlUUwotI3VuZGVmIERFRl9QUkVDSVNJT05fTElNSVRTCi19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMv
bWF0aGxpbWl0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTg0Njk0MDRiOGY3
OGFmMTk2NGM0ODU4YzlmMzMxMDNlZTFkNTE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gQXV0aG9yOiBNYXhp
bSBMaWZhbnRzZXYKLS8vCi0vLyBVc2VmdWwgaW50ZWdlciBhbmQgZmxvYXRpbmcgcG9pbnQgbGlt
aXRzIGFuZCB0eXBlIHRyYWl0cy4KLS8vCi0vLyBUaGlzIHBhcnRpYWxseSByZXBsYWNlcy9kdXBs
aWN0ZXMgbnVtZXJpY19saW1pdHM8PiBmcm9tIDxsaW1pdHM+LgotLy8gV2UgZ2V0IGEgR29vZ2xl
LXN0eWxlIGNsYXNzIHRoYXQgd2UgaGF2ZSBhIGdyZWF0ZXIgY29udHJvbCBvdmVyCi0vLyBhbmQg
dGh1cyBjYW4gYWRkIG5ldyBmZWF0dXJlcyB0byBpdCBvciBmaXggd2hhdGV2ZXIgaGFwcGVucyB0
byBiZSBicm9rZW4gaW4KLS8vIG51bWVyaWNfbGltaXRzIGZvciB0aGUgY29tcGlsZXJzIHdlIHVz
ZS4KLS8vCi0KLSNpZm5kZWYgVVRJTF9NQVRIX01BVEhMSU1JVFNfSF9fCi0jZGVmaW5lIFVUSUxf
TUFUSF9NQVRITElNSVRTX0hfXwotCi0vLyA8bWF0aC5oPiBsYWNrcyBhIGxvdCBvZiBwcm90b3R5
cGVzLiBIb3dldmVyLCB0aGlzIGZpbGUgbmVlZHMgPG1hdGguaD4gdG8KLS8vIGFjY2VzcyBvbGQt
ZmFzaGlvbmVkIGlzaW5mIGV0IGFsLiBFdmVuIHdvcnNlIG1vcmU6IHRoaXMgZmlsZSBtdXN0IG5v
dAotLy8gaW5jbHVkZSA8Y21hdGg+IGJlY2F1c2UgdGhhdCBicmVha3MgdGhlIGRlZmluaXRpb24g
b2YgaXNpbmYgd2l0aCBnY2MgNC45LgotLy8KLS8vIFRPRE8obWVjKTogYWZ0ZXIgQysrMTEgZXZl
cnl3aGVyZSwgdXNlIDxjbWF0aD4gYW5kIHN0ZDo6aXNpbmYgaW4gdGhpcyBmaWxlLgotI2luY2x1
ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGNmbG9hdD4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PSAvLwotCi0vLyBVc2VmdWwgaW50ZWdlciBhbmQgZmxvYXRpbmcgcG9pbnQgbGltaXRz
IGFuZCB0eXBlIHRyYWl0cy4KLS8vIFRoaXMgaXMganVzdCBmb3IgdGhlIGRvY3VtZW50YXRpb247
Ci0vLyByZWFsIG1lbWJlcnMgYXJlIGRlZmluZWQgaW4gb3VyIHNwZWNpYWxpemF0aW9ucyBiZWxv
dy4KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBNYXRoTGltaXRzIHsKLSAgLy8gVHlwZSBuYW1lLgotICB0eXBlZGVm
IFQgVHlwZTsKLSAgLy8gVW5zaWduZWQgdmVyc2lvbiBvZiB0aGUgVHlwZSB3aXRoIHRoZSBzYW1l
IGJ5dGUgc2l6ZS4KLSAgLy8gU2FtZSBhcyBUeXBlIGZvciBmbG9hdGluZyBwb2ludCBhbmQgdW5z
aWduZWQgdHlwZXMuCi0gIHR5cGVkZWYgVCBVbnNpZ25lZFR5cGU7Ci0gIC8vIElmIHRoZSB0eXBl
IHN1cHBvcnRzIG5lZ2F0aXZlIHZhbHVlcy4KLSAgc3RhdGljIGNvbnN0IGJvb2wga0lzU2lnbmVk
OwotICAvLyBJZiB0aGUgdHlwZSBzdXBwb3J0cyBvbmx5IGludGVnZXIgdmFsdWVzLgotICBzdGF0
aWMgY29uc3QgYm9vbCBrSXNJbnRlZ2VyOwotICAvLyBNYWduaXR1ZGUtd2lzZSBzbWFsbGVzdCBy
ZXByZXNlbnRhYmxlIHBvc2l0aXZlIHZhbHVlLgotICBzdGF0aWMgY29uc3QgVHlwZSBrUG9zTWlu
OwotICAvLyBNYWduaXR1ZGUtd2lzZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgcG9zaXRpdmUgdmFs
dWUuCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtQb3NNYXg7Ci0gIC8vIFNtYWxsZXN0IHJlcHJlc2Vu
dGFibGUgdmFsdWUuCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtNaW47Ci0gIC8vIExhcmdlc3QgcmVw
cmVzZW50YWJsZSB2YWx1ZS4KLSAgc3RhdGljIGNvbnN0IFR5cGUga01heDsKLSAgLy8gTWFnbml0
dWRlLXdpc2Ugc21hbGxlc3QgcmVwcmVzZW50YWJsZSBuZWdhdGl2ZSB2YWx1ZS4KLSAgLy8gUHJl
c2VudCBvbmx5IGlmIGtJc1NpZ25lZC4KLSAgc3RhdGljIGNvbnN0IFR5cGUga05lZ01pbjsKLSAg
Ly8gTWFnbml0dWRlLXdpc2UgbGFyZ2VzdCByZXByZXNlbnRhYmxlIG5lZ2F0aXZlIHZhbHVlLgot
ICAvLyBQcmVzZW50IG9ubHkgaWYga0lzU2lnbmVkLgotICBzdGF0aWMgY29uc3QgVHlwZSBrTmVn
TWF4OwotICAvLyBTbWFsbGVzdCBpbnRlZ2VyIHggc3VjaCB0aGF0IDEwXnggaXMgcmVwcmVzZW50
YWJsZS4KLSAgc3RhdGljIGNvbnN0IGludCBrTWluMTBFeHA7Ci0gIC8vIExhcmdlc3QgaW50ZWdl
ciB4IHN1Y2ggdGhhdCAxMF54IGlzIHJlcHJlc2VudGFibGUuCi0gIHN0YXRpYyBjb25zdCBpbnQg
a01heDEwRXhwOwotICAvLyBTbWFsbGVzdCBwb3NpdGl2ZSB2YWx1ZSBzdWNoIHRoYXQgVHlwZSgx
KSArIGtFcHNpbG9uICE9IFR5cGUoMSkKLSAgc3RhdGljIGNvbnN0IFR5cGUga0Vwc2lsb247Ci0g
IC8vIFR5cGljYWwgcm91bmRpbmcgZXJyb3IgdGhhdCBpcyBlbm91Z2ggdG8gY292ZXIKLSAgLy8g
YSBmZXcgc2ltcGxlIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuCi0gIC8vIFNsaWdodGx5IGxh
cmdlciB0aGFuIGtFcHNpbG9uIHRvIGFjY291bnQgZm9yIGEgZmV3IHJvdW5kaW5nIGVycm9ycy4K
LSAgLy8gSXMgemVybyBpZiBrSXNJbnRlZ2VyLgotICBzdGF0aWMgY29uc3QgVHlwZSBrU3RkRXJy
b3I7Ci0gIC8vIE51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cyBvZiBtYW50aXNzYSBwcmVjaXNpb24u
Ci0gIC8vIFByZXNlbnQgb25seSBpZiAha0lzSW50ZWdlci4KLSAgc3RhdGljIGNvbnN0IGludCBr
UHJlY2lzaW9uRGlnaXRzOwotICAvLyBOb3QgYSBudW1iZXIsIGkuZS4gcmVzdWx0IG9mIDAvMC4K
LSAgLy8gUHJlc2VudCBvbmx5IGlmICFrSXNJbnRlZ2VyLgotICBzdGF0aWMgY29uc3QgVHlwZSBr
TmFOOwotICAvLyBQb3NpdGl2ZSBpbmZpbml0eSwgaS5lLiByZXN1bHQgb2YgMS8wLgotICAvLyBQ
cmVzZW50IG9ubHkgaWYgIWtJc0ludGVnZXIuCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtQb3NJbmY7
Ci0gIC8vIE5lZ2F0aXZlIGluZmluaXR5LCBpLmUuIHJlc3VsdCBvZiAtMS8wLgotICAvLyBQcmVz
ZW50IG9ubHkgaWYgIWtJc0ludGVnZXIuCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtOZWdJbmY7Ci0K
LSAgLy8gTk9URTogU3BlY2lhbCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgYmVoYXZlCi0gIC8vIGlu
IGEgc3BlY2lhbCAoYnV0IG1hdGhlbWF0aWNhbGx5LWxvZ2ljYWwpIHdheQotICAvLyBpbiB0ZXJt
cyBvZiAoaW4pZXF1YWx0eSBjb21wYXJpc29uIGFuZCBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucwot
ICAvLyAtLSBzZWUgb3V0IHVuaXR0ZXN0IGZvciBleGFtcGxlcy4KLQotICAvLyBTcGVjaWFsIGZs
b2F0aW5nIHBvaW50IHZhbHVlIHRlc3RlcnMuCi0gIC8vIFByZXNlbnQgaW4gaW50ZWdlciB0eXBl
cyBmb3IgY29udmVuaWVuY2UuCi0gIHN0YXRpYyBib29sIElzRmluaXRlKGNvbnN0IFR5cGUgeCk7
Ci0gIHN0YXRpYyBib29sIElzTmFOKGNvbnN0IFR5cGUgeCk7Ci0gIHN0YXRpYyBib29sIElzSW5m
KGNvbnN0IFR5cGUgeCk7Ci0gIHN0YXRpYyBib29sIElzUG9zSW5mKGNvbnN0IFR5cGUgeCk7Ci0g
IHN0YXRpYyBib29sIElzTmVnSW5mKGNvbnN0IFR5cGUgeCk7Ci19OwotCi0vLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09IC8vCi0KLS8vIEFsbCAjZGVmaW5lLXMgYmVsb3cgYXJlIHNpbXBseSB0byByZWZhY3Rv
ciB0aGUgZGVjbGFyYXRpb25zIG9mCi0vLyBNYXRoTGltaXRzIHRlbXBsYXRlIHNwZWNpYWxpemF0
aW9ucy4KLS8vIFRoZXkgYXJlIGFsbCAjdW5kZWYtaW5lZCBiZWxvdy4KLQotLy8gVGhlIGhvb3At
anVtcGluZyBpbiAqX0lOVF8oTUFYfE1JTikgYmVsb3cgaXMgc28gdGhhdCB0aGUgY29tcGlsZXIg
ZG9lcyBub3QKLS8vIGdldCBhbiBvdmVyZmxvdyB3aGlsZSBjb21wdXRpbmcgdGhlIGNvbnN0YW50
cy4KLQotI2RlZmluZSBTSUdORURfSU5UX01BWChUeXBlKSBcCi0gICgoKFR5cGUoMSkgPDwgKHNp
emVvZihUeXBlKSo4IC0gMikpIC0gMSkgKyAoVHlwZSgxKSA8PCAoc2l6ZW9mKFR5cGUpKjggLSAy
KSkpCi0KLSNkZWZpbmUgU0lHTkVEX0lOVF9NSU4oVHlwZSkgXAotICAoLShUeXBlKDEpIDw8IChz
aXplb2YoVHlwZSkqOCAtIDIpKSAtIChUeXBlKDEpIDw8IChzaXplb2YoVHlwZSkqOCAtIDIpKSkK
LQotI2RlZmluZSBVTlNJR05FRF9JTlRfTUFYKFR5cGUpIFwKLSAgKCgoVHlwZSgxKSA8PCAoc2l6
ZW9mKFR5cGUpKjggLSAxKSkgLSAxKSArIChUeXBlKDEpIDw8IChzaXplb2YoVHlwZSkqOCAtIDEp
KSkKLQotLy8gQ29tcGlsZS10aW1lIHNlbGVjdGVkIGxvZzEwLXJlbGF0ZWQgY29uc3RhbnRzIGZv
ciBpbnRlZ2VyIHR5cGVzLgotI2RlZmluZSBTSUdORURfTUFYXzEwX0VYUChUeXBlKSBcCi0gIChz
aXplb2YoVHlwZSkgPT0gMSA/IDIgOiAoIFwKLSAgICBzaXplb2YoVHlwZSkgPT0gMiA/IDQgOiAo
IFwKLSAgICAgIHNpemVvZihUeXBlKSA9PSA0ID8gOSA6ICggXAotICAgICAgICBzaXplb2YoVHlw
ZSkgPT0gOCA/IDE4IDogLTEpKSkpCi0KLSNkZWZpbmUgVU5TSUdORURfTUFYXzEwX0VYUChUeXBl
KSBcCi0gIChzaXplb2YoVHlwZSkgPT0gMSA/IDIgOiAoIFwKLSAgICBzaXplb2YoVHlwZSkgPT0g
MiA/IDQgOiAoIFwKLSAgICAgIHNpemVvZihUeXBlKSA9PSA0ID8gOSA6ICggXAotICAgICAgICBz
aXplb2YoVHlwZSkgPT0gOCA/IDE5IDogLTEpKSkpCi0KLSNkZWZpbmUgREVDTF9JTlRfTElNSVRf
RlVOQ1MgXAotICBzdGF0aWMgYm9vbCBJc0Zpbml0ZShjb25zdCBUeXBlIC8qeCovKSB7IHJldHVy
biB0cnVlOyB9IFwKLSAgc3RhdGljIGJvb2wgSXNOYU4oY29uc3QgVHlwZSAvKngqLykgeyByZXR1
cm4gZmFsc2U7IH0gXAotICBzdGF0aWMgYm9vbCBJc0luZihjb25zdCBUeXBlIC8qeCovKSB7IHJl
dHVybiBmYWxzZTsgfSBcCi0gIHN0YXRpYyBib29sIElzUG9zSW5mKGNvbnN0IFR5cGUgLyp4Ki8p
IHsgcmV0dXJuIGZhbHNlOyB9IFwKLSAgc3RhdGljIGJvb2wgSXNOZWdJbmYoY29uc3QgVHlwZSAv
KngqLykgeyByZXR1cm4gZmFsc2U7IH0KLQotI2RlZmluZSBERUNMX1NJR05FRF9JTlRfTElNSVRT
KEludFR5cGUsIFVuc2lnbmVkSW50VHlwZSkgXAotdGVtcGxhdGU8PiBcCi1zdHJ1Y3QgTElCUFJP
VE9CVUZfRVhQT1JUIE1hdGhMaW1pdHM8SW50VHlwZT4geyBcCi0gIHR5cGVkZWYgSW50VHlwZSBU
eXBlOyBcCi0gIHR5cGVkZWYgVW5zaWduZWRJbnRUeXBlIFVuc2lnbmVkVHlwZTsgXAotICBzdGF0
aWMgY29uc3QgYm9vbCBrSXNTaWduZWQgPSB0cnVlOyBcCi0gIHN0YXRpYyBjb25zdCBib29sIGtJ
c0ludGVnZXIgPSB0cnVlOyBcCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtQb3NNaW4gPSAxOyBcCi0g
IHN0YXRpYyBjb25zdCBUeXBlIGtQb3NNYXggPSBTSUdORURfSU5UX01BWChUeXBlKTsgXAotICBz
dGF0aWMgY29uc3QgVHlwZSBrTWluID0gU0lHTkVEX0lOVF9NSU4oVHlwZSk7IFwKLSAgc3RhdGlj
IGNvbnN0IFR5cGUga01heCA9IGtQb3NNYXg7IFwKLSAgc3RhdGljIGNvbnN0IFR5cGUga05lZ01p
biA9IC0xOyBcCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtOZWdNYXggPSBrTWluOyBcCi0gIHN0YXRp
YyBjb25zdCBpbnQga01pbjEwRXhwID0gMDsgXAotICBzdGF0aWMgY29uc3QgaW50IGtNYXgxMEV4
cCA9IFNJR05FRF9NQVhfMTBfRVhQKFR5cGUpOyBcCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtFcHNp
bG9uID0gMTsgXAotICBzdGF0aWMgY29uc3QgVHlwZSBrU3RkRXJyb3IgPSAwOyBcCi0gIERFQ0xf
SU5UX0xJTUlUX0ZVTkNTIFwKLX07Ci0KLSNkZWZpbmUgREVDTF9VTlNJR05FRF9JTlRfTElNSVRT
KEludFR5cGUpIFwKLXRlbXBsYXRlPD4gXAotc3RydWN0IExJQlBST1RPQlVGX0VYUE9SVCBNYXRo
TGltaXRzPEludFR5cGU+IHsgXAotICB0eXBlZGVmIEludFR5cGUgVHlwZTsgXAotICB0eXBlZGVm
IEludFR5cGUgVW5zaWduZWRUeXBlOyBcCi0gIHN0YXRpYyBjb25zdCBib29sIGtJc1NpZ25lZCA9
IGZhbHNlOyBcCi0gIHN0YXRpYyBjb25zdCBib29sIGtJc0ludGVnZXIgPSB0cnVlOyBcCi0gIHN0
YXRpYyBjb25zdCBUeXBlIGtQb3NNaW4gPSAxOyBcCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtQb3NN
YXggPSBVTlNJR05FRF9JTlRfTUFYKFR5cGUpOyBcCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtNaW4g
PSAwOyBcCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtNYXggPSBrUG9zTWF4OyBcCi0gIHN0YXRpYyBj
b25zdCBpbnQga01pbjEwRXhwID0gMDsgXAotICBzdGF0aWMgY29uc3QgaW50IGtNYXgxMEV4cCA9
IFVOU0lHTkVEX01BWF8xMF9FWFAoVHlwZSk7IFwKLSAgc3RhdGljIGNvbnN0IFR5cGUga0Vwc2ls
b24gPSAxOyBcCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtTdGRFcnJvciA9IDA7IFwKLSAgREVDTF9J
TlRfTElNSVRfRlVOQ1MgXAotfTsKLQotREVDTF9TSUdORURfSU5UX0xJTUlUUyhzaWduZWQgY2hh
ciwgdW5zaWduZWQgY2hhcikKLURFQ0xfU0lHTkVEX0lOVF9MSU1JVFMoc2lnbmVkIHNob3J0IGlu
dCwgdW5zaWduZWQgc2hvcnQgaW50KQotREVDTF9TSUdORURfSU5UX0xJTUlUUyhzaWduZWQgaW50
LCB1bnNpZ25lZCBpbnQpCi1ERUNMX1NJR05FRF9JTlRfTElNSVRTKHNpZ25lZCBsb25nIGludCwg
dW5zaWduZWQgbG9uZyBpbnQpCi1ERUNMX1NJR05FRF9JTlRfTElNSVRTKHNpZ25lZCBsb25nIGxv
bmcgaW50LCB1bnNpZ25lZCBsb25nIGxvbmcgaW50KQotREVDTF9VTlNJR05FRF9JTlRfTElNSVRT
KHVuc2lnbmVkIGNoYXIpCi1ERUNMX1VOU0lHTkVEX0lOVF9MSU1JVFModW5zaWduZWQgc2hvcnQg
aW50KQotREVDTF9VTlNJR05FRF9JTlRfTElNSVRTKHVuc2lnbmVkIGludCkKLURFQ0xfVU5TSUdO
RURfSU5UX0xJTUlUUyh1bnNpZ25lZCBsb25nIGludCkKLURFQ0xfVU5TSUdORURfSU5UX0xJTUlU
Uyh1bnNpZ25lZCBsb25nIGxvbmcgaW50KQotCi0jdW5kZWYgREVDTF9TSUdORURfSU5UX0xJTUlU
UwotI3VuZGVmIERFQ0xfVU5TSUdORURfSU5UX0xJTUlUUwotI3VuZGVmIFNJR05FRF9JTlRfTUFY
Ci0jdW5kZWYgU0lHTkVEX0lOVF9NSU4KLSN1bmRlZiBVTlNJR05FRF9JTlRfTUFYCi0jdW5kZWYg
U0lHTkVEX01BWF8xMF9FWFAKLSN1bmRlZiBVTlNJR05FRF9NQVhfMTBfRVhQCi0jdW5kZWYgREVD
TF9JTlRfTElNSVRfRlVOQ1MKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAvLwotI2lmZGVmIFdJTjMy
ICAvLyBMYWNrcyBidWlsdC1pbiBpc25hbigpIGFuZCBpc2luZigpCi0jZGVmaW5lIERFQ0xfRlBf
TElNSVRfRlVOQ1MgXAotICBzdGF0aWMgYm9vbCBJc0Zpbml0ZShjb25zdCBUeXBlIHgpIHsgcmV0
dXJuIF9maW5pdGUoeCk7IH0gXAotICBzdGF0aWMgYm9vbCBJc05hTihjb25zdCBUeXBlIHgpIHsg
cmV0dXJuIF9pc25hbih4KTsgfSBcCi0gIHN0YXRpYyBib29sIElzSW5mKGNvbnN0IFR5cGUgeCkg
eyByZXR1cm4gKF9mcGNsYXNzKHgpICYgKF9GUENMQVNTX05JTkYgfCBfRlBDTEFTU19QSU5GKSkg
IT0gMDsgfSBcCi0gIHN0YXRpYyBib29sIElzUG9zSW5mKGNvbnN0IFR5cGUgeCkgeyByZXR1cm4g
X2ZwY2xhc3MoeCkgPT0gX0ZQQ0xBU1NfUElORjsgfSBcCi0gIHN0YXRpYyBib29sIElzTmVnSW5m
KGNvbnN0IFR5cGUgeCkgeyByZXR1cm4gX2ZwY2xhc3MoeCkgPT0gX0ZQQ0xBU1NfTklORjsgfQot
I2Vsc2UKLSNkZWZpbmUgREVDTF9GUF9MSU1JVF9GVU5DUyBcCi0gIHN0YXRpYyBib29sIElzRmlu
aXRlKGNvbnN0IFR5cGUgeCkgeyByZXR1cm4gIWlzaW5mKHgpICAmJiAgIWlzbmFuKHgpOyB9IFwK
LSAgc3RhdGljIGJvb2wgSXNOYU4oY29uc3QgVHlwZSB4KSB7IHJldHVybiBpc25hbih4KTsgfSBc
Ci0gIHN0YXRpYyBib29sIElzSW5mKGNvbnN0IFR5cGUgeCkgeyByZXR1cm4gaXNpbmYoeCk7IH0g
XAotICBzdGF0aWMgYm9vbCBJc1Bvc0luZihjb25zdCBUeXBlIHgpIHsgcmV0dXJuIGlzaW5mKHgp
ICAmJiAgeCA+IDA7IH0gXAotICBzdGF0aWMgYm9vbCBJc05lZ0luZihjb25zdCBUeXBlIHgpIHsg
cmV0dXJuIGlzaW5mKHgpICAmJiAgeCA8IDA7IH0KLSNlbmRpZgotCi0vLyBXZSBjYW4ndCBwdXQg
ZmxvYXRpbmctcG9pbnQgY29uc3RhbnQgdmFsdWVzIGluIHRoZSBoZWFkZXIgaGVyZSBiZWNhdXNl
Ci0vLyBzdWNoIGNvbnN0YW50cyBhcmUgbm90IGNvbnNpZGVyZWQgdG8gYmUgcHJpbWl0aXZlLXR5
cGUgY29uc3RhbnRzIGJ5IGdjYy4KLS8vIENBVkVBVDogSGVuY2UsIHRoZXkgYXJlIGdvaW5nIHRv
IGJlIGluaXRpYWxpemVkIG9ubHkgZHVyaW5nCi0vLyB0aGUgZ2xvYmFsIG9iamVjdHMgY29uc3Ry
dWN0aW9uIHRpbWUuCi0jZGVmaW5lIERFQ0xfRlBfTElNSVRTKEZQX1R5cGUsIFBSRUZJWCkgXAot
dGVtcGxhdGU8PiBcCi1zdHJ1Y3QgTElCUFJPVE9CVUZfRVhQT1JUIE1hdGhMaW1pdHM8RlBfVHlw
ZT4geyBcCi0gIHR5cGVkZWYgRlBfVHlwZSBUeXBlOyBcCi0gIHR5cGVkZWYgRlBfVHlwZSBVbnNp
Z25lZFR5cGU7IFwKLSAgc3RhdGljIGNvbnN0IGJvb2wga0lzU2lnbmVkID0gdHJ1ZTsgXAotICBz
dGF0aWMgY29uc3QgYm9vbCBrSXNJbnRlZ2VyID0gZmFsc2U7IFwKLSAgc3RhdGljIGNvbnN0IFR5
cGUga1Bvc01pbjsgXAotICBzdGF0aWMgY29uc3QgVHlwZSBrUG9zTWF4OyBcCi0gIHN0YXRpYyBj
b25zdCBUeXBlIGtNaW47IFwKLSAgc3RhdGljIGNvbnN0IFR5cGUga01heDsgXAotICBzdGF0aWMg
Y29uc3QgVHlwZSBrTmVnTWluOyBcCi0gIHN0YXRpYyBjb25zdCBUeXBlIGtOZWdNYXg7IFwKLSAg
c3RhdGljIGNvbnN0IGludCBrTWluMTBFeHAgPSBQUkVGSVgjI19NSU5fMTBfRVhQOyBcCi0gIHN0
YXRpYyBjb25zdCBpbnQga01heDEwRXhwID0gUFJFRklYIyNfTUFYXzEwX0VYUDsgXAotICBzdGF0
aWMgY29uc3QgVHlwZSBrRXBzaWxvbjsgXAotICBzdGF0aWMgY29uc3QgVHlwZSBrU3RkRXJyb3I7
IFwKLSAgc3RhdGljIGNvbnN0IGludCBrUHJlY2lzaW9uRGlnaXRzID0gUFJFRklYIyNfRElHOyBc
Ci0gIHN0YXRpYyBjb25zdCBUeXBlIGtOYU47IFwKLSAgc3RhdGljIGNvbnN0IFR5cGUga1Bvc0lu
ZjsgXAotICBzdGF0aWMgY29uc3QgVHlwZSBrTmVnSW5mOyBcCi0gIERFQ0xfRlBfTElNSVRfRlVO
Q1MgXAotfTsKLQotREVDTF9GUF9MSU1JVFMoZmxvYXQsIEZMVCkKLURFQ0xfRlBfTElNSVRTKGRv
dWJsZSwgREJMKQotREVDTF9GUF9MSU1JVFMobG9uZyBkb3VibGUsIExEQkwpCi0KLSN1bmRlZiBE
RUNMX0ZQX0xJTUlUUwotI3VuZGVmIERFQ0xfRlBfTElNSVRfRlVOQ1MKLQotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PSAvLwotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCi0KLSNlbmRpZiAgLy8gVVRJTF9NQVRIX01BVEhMSU1JVFNfSF9fCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbWF0aHV0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9z
dHVicy9tYXRodXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzk1NmE4ZWEw
MmY3N2I5OGM2YzFiZmJlOTgwMDZmYjVhNzM1OGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXRodXRpbC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfU1RVQlNfTUFUSFVUSUxfSF8KLSNk
ZWZpbmUgR09PR0xFX1BST1RPQlVGX1NUVUJTX01BVEhVVElMX0hfCi0KLSNpbmNsdWRlIDxmbG9h
dC5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmg+Ci0KLW5hbWVzcGFj
ZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBJc05hbihUIHZhbHVlKSB7Ci0gIHJldHVybiBmYWxz
ZTsKLX0KLXRlbXBsYXRlPD4KLWlubGluZSBib29sIElzTmFuKGZsb2F0IHZhbHVlKSB7Ci0jaWZk
ZWYgX01TQ19WRVIKLSAgcmV0dXJuIF9pc25hbih2YWx1ZSk7Ci0jZWxzZQotICByZXR1cm4gaXNu
YW4odmFsdWUpOwotI2VuZGlmCi19Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUgYm9vbCBJc05hbihkb3Vi
bGUgdmFsdWUpIHsKLSNpZmRlZiBfTVNDX1ZFUgotICByZXR1cm4gX2lzbmFuKHZhbHVlKTsKLSNl
bHNlCi0gIHJldHVybiBpc25hbih2YWx1ZSk7Ci0jZW5kaWYKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLWJvb2wgQWxtb3N0RXF1YWxzKFQgYSwgVCBiKSB7Ci0gIHJldHVybiBhID09IGI7Ci19
Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUgYm9vbCBBbG1vc3RFcXVhbHMoZmxvYXQgYSwgZmxvYXQgYikg
ewotICByZXR1cm4gZmFicyhhIC0gYikgPCAzMiAqIEZMVF9FUFNJTE9OOwotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgYm9vbCBBbG1vc3RFcXVhbHMoZG91YmxlIGEsIGRvdWJsZSBiKSB7Ci0gIHJl
dHVybiBmYWJzKGEgLSBiKSA8IDMyICogREJMX0VQU0lMT047Ci19Ci19ICAvLyBuYW1lc3BhY2Ug
aW50ZXJuYWwKLQotY2xhc3MgTWF0aFV0aWwgewotIHB1YmxpYzoKLSAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgc3RhdGljIFQgU2lnbihUIHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlID09IFQoMCkg
fHwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SXNOYW48VD4odmFsdWUpKSB7Ci0gICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZSA+IFQoMCkgPyAxIDogLTE7
Ci0gIH0KLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICBzdGF0aWMgYm9vbCBBbG1vc3RFcXVh
bHMoVCBhLCBUIGIpIHsKLSAgICByZXR1cm4gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
QWxtb3N0RXF1YWxzKGEsIGIpOwotICB9Ci0KLSAgLy8gTGFyZ2VzdCBvZiB0d28gdmFsdWVzLgot
ICAvLyBXb3JrcyBjb3JyZWN0bHkgZm9yIHNwZWNpYWwgZmxvYXRpbmcgcG9pbnQgdmFsdWVzLgot
ICAvLyBOb3RlOiAwLjAgYW5kIC0wLjAgYXJlIG5vdCBkaWZmZXJlbnRpYXRlZCBieSBNYXggKE1h
eCgwLjAsIC0wLjApIGlzIC0wLjApLAotICAvLyB3aGljaCBzaG91bGQgYmUgT0sgYmVjYXVzZSwg
YWx0aG91Z2ggdGhleSAoY2FuKSBoYXZlIGRpZmZlcmVudAotICAvLyBiaXQgcmVwcmVzZW50YXRp
b24sIHRoZXkgYXJlIG9ic2VydmFibHkgdGhlIHNhbWUgd2hlbiBleGFtaW5lZAotICAvLyB3aXRo
IGFyaXRobWV0aWMgYW5kIChpbillcXVhbGl0eSBvcGVyYXRvcnMuCi0gIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gIHN0YXRpYyBUIE1heChjb25zdCBUIHgsIGNvbnN0IFQgeSkgewotICAgIHJldHVy
biBNYXRoTGltaXRzPFQ+OjpJc05hTih4KSB8fCB4ID4geSA/IHggOiB5OwotICB9Ci0KLSAgLy8g
QWJzb2x1dGUgdmFsdWUgb2YgeAotICAvLyBXb3JrcyBjb3JyZWN0bHkgZm9yIHVuc2lnbmVkIHR5
cGVzIGFuZAotICAvLyBmb3Igc3BlY2lhbCBmbG9hdGluZyBwb2ludCB2YWx1ZXMuCi0gIC8vIE5v
dGU6IDAuMCBhbmQgLTAuMCBhcmUgbm90IGRpZmZlcmVudGlhdGVkIGJ5IEFicyAoQWJzKDAuMCkg
aXMgLTAuMCksCi0gIC8vIHdoaWNoIHNob3VsZCBiZSBPSzogc2VlIHRoZSBjb21tZW50IGZvciBN
YXggYWJvdmUuCi0gIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gIHN0YXRpYyBUIEFicyhjb25zdCBU
IHgpIHsKLSAgICByZXR1cm4geCA+IFQoMCkgPyB4IDogLXg7Ci0gIH0KLQotICAvLyBBYnNvbHV0
ZSB2YWx1ZSBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBudW1iZXJzLgotICAvLyBXb3Jr
cyBjb3JyZWN0bHkgZm9yIHNpZ25lZCB0eXBlcyBhbmQgc3BlY2lhbCBmbG9hdGluZyBwb2ludCB2
YWx1ZXMuCi0gIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gIHN0YXRpYyB0eXBlbmFtZSBNYXRoTGlt
aXRzPFQ+OjpVbnNpZ25lZFR5cGUgQWJzRGlmZihjb25zdCBUIHgsIGNvbnN0IFQgeSkgewotICAg
IC8vIENhcnJpZXMgb3V0IGFyaXRobWV0aWMgYXMgdW5zaWduZWQgdG8gYXZvaWQgb3ZlcmZsb3cu
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBNYXRoTGltaXRzPFQ+OjpVbnNpZ25lZFR5cGUgUjsKLSAg
ICByZXR1cm4geCA+IHkgPyBSKHgpIC0gUih5KSA6IFIoeSkgLSBSKHgpOwotICB9Ci0KLSAgLy8g
SWYgdHdvICh1c3VhbGx5IGZsb2F0aW5nIHBvaW50KSBudW1iZXJzIGFyZSB3aXRoaW4gYSBjZXJ0
YWluCi0gIC8vIGZyYWN0aW9uIG9mIHRoZWlyIG1hZ25pdHVkZSBvciB3aXRoaW4gYSBjZXJ0YWlu
IGFic29sdXRlIG1hcmdpbiBvZiBlcnJvci4KLSAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUg
Zm9sbG93aW5nIGJ1dCBmYXN0ZXI6Ci0gIC8vICAgV2l0aGluRnJhY3Rpb24oeCwgeSwgZnJhY3Rp
b24pICB8fCAgV2l0aGluTWFyZ2luKHgsIHksIG1hcmdpbikKLSAgLy8gRS5nLiBXaXRoaW5GcmFj
dGlvbigwLjAsIDFlLTEwLCAxZS01KSBpcyBmYWxzZSBidXQKLSAgLy8gICAgICBXaXRoaW5GcmFj
dGlvbk9yTWFyZ2luKDAuMCwgMWUtMTAsIDFlLTUsIDFlLTUpIGlzIHRydWUuCi0gIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gIHN0YXRpYyBib29sIFdpdGhpbkZyYWN0aW9uT3JNYXJnaW4oY29uc3Qg
VCB4LCBjb25zdCBUIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVCBmcmFjdGlvbiwgY29uc3QgVCBtYXJnaW4pOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWJvb2wgTWF0aFV0aWw6OldpdGhpbkZyYWN0aW9uT3JNYXJnaW4oY29uc3QgVCB4LCBjb25z
dCBUIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQgZnJh
Y3Rpb24sIGNvbnN0IFQgbWFyZ2luKSB7Ci0gIC8vIE5vdCBqdXN0ICIwIDw9IGZyYWN0aW9uIiB0
byBmb29sIHRoZSBjb21waWxlciBmb3IgdW5zaWduZWQgdHlwZXMuCi0gIEdPT0dMRV9EQ0hFQ0so
KFQoMCkgPCBmcmFjdGlvbiB8fCBUKDApID09IGZyYWN0aW9uKSAmJgotICAgICAgICAgZnJhY3Rp
b24gPCBUKDEpICYmCi0gICAgICAgICBtYXJnaW4gPj0gVCgwKSk7Ci0KLSAgLy8gVGVtcGxhdGUg
c3BlY2lhbGl6YXRpb24gd2lsbCBjb252ZXJ0IHRoZSBpZigpIGNvbmRpdGlvbiB0byBhIGNvbnN0
YW50LAotICAvLyB3aGljaCB3aWxsIGNhdXNlIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSBjb2Rl
IGZvciBlaXRoZXIgdGhlICJpZiIgcGFydAotICAvLyBvciB0aGUgInRoZW4iIHBhcnQuICBJbiB0
aGlzIHdheSB3ZSBhdm9pZCBhIGNvbXBpbGVyIHdhcm5pbmcKLSAgLy8gYWJvdXQgYSBwb3RlbnRp
YWwgaW50ZWdlciBvdmVyZmxvdyBpbiBjcm9zc3Rvb2wgdjEyIChnY2MgNC4zLjEpLgotICBpZiAo
TWF0aExpbWl0czxUPjo6a0lzSW50ZWdlcikgewotICAgIHJldHVybiB4ID09IHk7Ci0gIH0gZWxz
ZSB7Ci0gICAgLy8gSXNGaW5pdGUgY2hlY2tzIGFyZSB0byBtYWtlIGtQb3NJbmYgYW5kIGtOZWdJ
bmYgbm90IHdpdGhpbiBmcmFjdGlvbgotICAgIGlmICghTWF0aExpbWl0czxUPjo6SXNGaW5pdGUo
eCkgJiYgIU1hdGhMaW1pdHM8VD46OklzRmluaXRlKHkpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIFQgcmVsYXRpdmVfbWFyZ2luID0gc3RhdGljX2Nhc3Q8VD4oZnJhY3Rpb24g
KiBNYXgoQWJzKHgpLCBBYnMoeSkpKTsKLSAgICByZXR1cm4gQWJzRGlmZih4LCB5KSA8PSBNYXgo
bWFyZ2luLCByZWxhdGl2ZV9tYXJnaW4pOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JV
Rl9TVFVCU19NQVRIVVRJTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJz
L211dGV4LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbXV0ZXguaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggN2VmMWNiNjkxNjM1ZjQxMmJkNDMxYzEyN2NmZWJlNWEwZTQ4ZWU5
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvc3R1YnMvbXV0ZXguaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDYsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZu
ZGVmIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19NVVRFWF9IXwotI2RlZmluZSBHT09HTEVfUFJPVE9C
VUZfU1RVQlNfTVVURVhfSF8KLQotI2lmZGVmIEdPT0dMRV9QUk9UT0JVRl9OT19USFJFQURMT0NB
TAotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL21hY3Jvcy5oPgotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBlbXVsYXRlcyBnb29nbGUz
L2Jhc2UvbXV0ZXguaAotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewot
bmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gQSBNdXRleCBpcyBhIG5vbi1yZWVudHJhbnQgKGFr
YSBub24tcmVjdXJzaXZlKSBtdXRleC4gIEF0IG1vc3Qgb25lIHRocmVhZCBUCi0vLyBtYXkgaG9s
ZCBhIG11dGV4IGF0IGEgZ2l2ZW4gdGltZS4gIElmIFQgYXR0ZW1wdHMgdG8gTG9jaygpIHRoZSBz
YW1lIE11dGV4Ci0vLyB3aGlsZSBob2xkaW5nIGl0LCBUIHdpbGwgZGVhZGxvY2suCi1jbGFzcyBM
SUJQUk9UT0JVRl9FWFBPUlQgTXV0ZXggewotIHB1YmxpYzoKLSAgLy8gQ3JlYXRlIGEgTXV0ZXgg
dGhhdCBpcyBub3QgaGVsZCBieSBhbnlib2R5LgotICBNdXRleCgpOwotCi0gIC8vIERlc3RydWN0
b3IKLSAgfk11dGV4KCk7Ci0KLSAgLy8gQmxvY2sgaWYgbmVjZXNzYXJ5IHVudGlsIHRoaXMgTXV0
ZXggaXMgZnJlZSwgdGhlbiBhY3F1aXJlIGl0IGV4Y2x1c2l2ZWx5LgotICB2b2lkIExvY2soKTsK
LQotICAvLyBSZWxlYXNlIHRoaXMgTXV0ZXguICBDYWxsZXIgbXVzdCBob2xkIGl0IGV4Y2x1c2l2
ZWx5LgotICB2b2lkIFVubG9jaygpOwotCi0gIC8vIENyYXNoIGlmIHRoaXMgTXV0ZXggaXMgbm90
IGhlbGQgZXhjbHVzaXZlbHkgYnkgdGhpcyB0aHJlYWQuCi0gIC8vIE1heSBmYWlsIHRvIGNyYXNo
IHdoZW4gaXQgc2hvdWxkOyB3aWxsIG5ldmVyIGNyYXNoIHdoZW4gaXQgc2hvdWxkIG5vdC4KLSAg
dm9pZCBBc3NlcnRIZWxkKCk7Ci0KLSBwcml2YXRlOgotICBzdHJ1Y3QgSW50ZXJuYWw7Ci0gIElu
dGVybmFsKiBtSW50ZXJuYWw7Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JT
KE11dGV4KTsKLX07Ci0KLS8vIFVuZGVmaW5lIHRoZSBtYWNyb3MgIHRvIHdvcmthcm91bmQgdGhl
IGNvbmZsaWN0cyB3aXRoIEdvb2dsZSBpbnRlcm5hbAotLy8gTXV0ZXhMb2NrIGltcGxlbWVudGF0
aW9uLgotLy8gVE9ETyhsaXVqaXNpKTogUmVtb3ZlIHRoZSB1bmRlZiBvbmNlIGludGVybmFsIG1h
Y3JvcyBhcmUgcmVtb3ZlZC4KLSN1bmRlZiBNdXRleExvY2sKLSN1bmRlZiBSZWFkZXJNdXRleExv
Y2sKLSN1bmRlZiBXcml0ZXJNdXRleExvY2sKLSN1bmRlZiBNdXRleExvY2tNYXliZQotCi0vLyBN
dXRleExvY2sobXUpIGFjcXVpcmVzIG11IHdoZW4gY29uc3RydWN0ZWQgYW5kIHJlbGVhc2VzIGl0
IHdoZW4gZGVzdHJveWVkLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE11dGV4TG9jayB7Ci0g
cHVibGljOgotICBleHBsaWNpdCBNdXRleExvY2soTXV0ZXggKm11KSA6IG11XyhtdSkgeyB0aGlz
LT5tdV8tPkxvY2soKTsgfQotICB+TXV0ZXhMb2NrKCkgeyB0aGlzLT5tdV8tPlVubG9jaygpOyB9
Ci0gcHJpdmF0ZToKLSAgTXV0ZXggKmNvbnN0IG11XzsKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxf
Q09OU1RSVUNUT1JTKE11dGV4TG9jayk7Ci19OwotCi0vLyBUT0RPKGtlbnRvbik6ICBJbXBsZW1l
bnQgdGhlc2U/ICBIYXJkIHRvIGltcGxlbWVudCBwb3J0YWJseS4KLXR5cGVkZWYgTXV0ZXhMb2Nr
IFJlYWRlck11dGV4TG9jazsKLXR5cGVkZWYgTXV0ZXhMb2NrIFdyaXRlck11dGV4TG9jazsKLQot
Ly8gTXV0ZXhMb2NrTWF5YmUgaXMgbGlrZSBNdXRleExvY2ssIGJ1dCBpcyBhIG5vLW9wIHdoZW4g
bXUgaXMgTlVMTC4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBNdXRleExvY2tNYXliZSB7Ci0g
cHVibGljOgotICBleHBsaWNpdCBNdXRleExvY2tNYXliZShNdXRleCAqbXUpIDoKLSAgICBtdV8o
bXUpIHsgaWYgKHRoaXMtPm11XyAhPSBOVUxMKSB7IHRoaXMtPm11Xy0+TG9jaygpOyB9IH0KLSAg
fk11dGV4TG9ja01heWJlKCkgeyBpZiAodGhpcy0+bXVfICE9IE5VTEwpIHsgdGhpcy0+bXVfLT5V
bmxvY2soKTsgfSB9Ci0gcHJpdmF0ZToKLSAgTXV0ZXggKmNvbnN0IG11XzsKLSAgR09PR0xFX0RJ
U0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE11dGV4TG9ja01heWJlKTsKLX07Ci0KLSNpZiBkZWZp
bmVkKEdPT0dMRV9QUk9UT0JVRl9OT19USFJFQURMT0NBTCkKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1jbGFzcyBUaHJlYWRMb2NhbFN0b3JhZ2UgewotIHB1YmxpYzoKLSAgVGhyZWFkTG9jYWxTdG9y
YWdlKCkgewotICAgIHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5XywgJlRocmVhZExvY2FsU3RvcmFn
ZTo6RGVsZXRlKTsKLSAgfQotICB+VGhyZWFkTG9jYWxTdG9yYWdlKCkgewotICAgIHB0aHJlYWRf
a2V5X2RlbGV0ZShrZXlfKTsKLSAgfQotICBUKiBHZXQoKSB7Ci0gICAgVCogcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8VCo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5XykpOwotICAgIGlmIChyZXN1bHQg
PT0gTlVMTCkgewotICAgICAgcmVzdWx0ID0gbmV3IFQoKTsKLSAgICAgIHB0aHJlYWRfc2V0c3Bl
Y2lmaWMoa2V5XywgcmVzdWx0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotIHBy
aXZhdGU6Ci0gIHN0YXRpYyB2b2lkIERlbGV0ZSh2b2lkKiB2YWx1ZSkgewotICAgIGRlbGV0ZSBz
dGF0aWNfY2FzdDxUKj4odmFsdWUpOwotICB9Ci0gIHB0aHJlYWRfa2V5X3Qga2V5XzsKLQotICBH
T09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoVGhyZWFkTG9jYWxTdG9yYWdlKTsKLX07
Ci0jZW5kaWYKLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLS8vIFdlIG1hZGUgdGhlc2Ug
aW50ZXJuYWwgc28gdGhhdCB0aGV5IHdvdWxkIHNob3cgdXAgYXMgc3VjaCBpbiB0aGUgZG9jcywK
LS8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHN0aWNrICJpbnRlcm5hbDo6IiBpbiBmcm9udCBvZiB0
aGVtIGV2ZXJ5d2hlcmUuCi11c2luZyBpbnRlcm5hbDo6TXV0ZXg7Ci11c2luZyBpbnRlcm5hbDo6
TXV0ZXhMb2NrOwotdXNpbmcgaW50ZXJuYWw6OlJlYWRlck11dGV4TG9jazsKLXVzaW5nIGludGVy
bmFsOjpXcml0ZXJNdXRleExvY2s7Ci11c2luZyBpbnRlcm5hbDo6TXV0ZXhMb2NrTWF5YmU7Ci0K
LQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNl
bmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1NUVUJTX01VVEVYX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9v
bmNlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjY3YjQ0MzkzZjg2NzFlNjE5
Zjg4YWNlYWI0ZjEzNjdmZjc3ZDY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlLmNjCisrKyAvZGV2L251
bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLwotLy8gZW11
bGF0ZXMgZ29vZ2xlMy9iYXNlL29uY2UuaAotLy8KLS8vIFRoaXMgaGVhZGVyIGlzIGludGVuZGVk
IHRvIGJlIGluY2x1ZGVkIG9ubHkgYnkgaW50ZXJuYWwgLmNjIGZpbGVzIGFuZAotLy8gZ2VuZXJh
dGVkIC5wYi5jYyBmaWxlcy4gIFVzZXJzIHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkuCi0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oPgotCi0jaWZuZGVmIEdPT0dM
RV9QUk9UT0JVRl9OT19USFJFQURfU0FGRVRZCi0KLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx3
aW5kb3dzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHNjaGVkLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHMuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1uYW1lc3BhY2UgewotCi12b2lkIFNjaGVkWWllbGQo
KSB7Ci0jaWZkZWYgX1dJTjMyCi0gIFNsZWVwKDApOwotI2Vsc2UgIC8vIFBPU0lYCi0gIHNjaGVk
X3lpZWxkKCk7Ci0jZW5kaWYKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLXZvaWQgR29vZ2xlT25j
ZUluaXQoUHJvdG9idWZPbmNlVHlwZSogb25jZSwgdm9pZCAoKmluaXRfZnVuYykoKSkgewotICBp
ZiAoaW50ZXJuYWw6OkFjcXVpcmVfTG9hZChvbmNlKSAhPSBPTkNFX1NUQVRFX0RPTkUpIHsKLSAg
ICBpbnRlcm5hbDo6RnVuY3Rpb25DbG9zdXJlMCBmdW5jKGluaXRfZnVuYywgZmFsc2UpOwotICAg
IEdvb2dsZU9uY2VJbml0SW1wbChvbmNlLCAmZnVuYyk7Ci0gIH0KLX0KLQotdm9pZCBHb29nbGVP
bmNlSW5pdEltcGwoUHJvdG9idWZPbmNlVHlwZSogb25jZSwgQ2xvc3VyZSogY2xvc3VyZSkgewot
ICBpbnRlcm5hbDo6QXRvbWljV29yZCBzdGF0ZSA9IGludGVybmFsOjpBY3F1aXJlX0xvYWQob25j
ZSk7Ci0gIC8vIEZhc3QgcGF0aC4gVGhlIHByb3ZpZGVkIGNsb3N1cmUgd2FzIGFscmVhZHkgZXhl
Y3V0ZWQuCi0gIGlmIChzdGF0ZSA9PSBPTkNFX1NUQVRFX0RPTkUpIHsKLSAgICByZXR1cm47Ci0g
IH0KLSAgLy8gVGhlIGNsb3N1cmUgZXhlY3V0aW9uIGRpZCBub3QgY29tcGxldGUgeWV0LiBUaGUg
b25jZSBvYmplY3QgY2FuIGJlIGluIG9uZQotICAvLyBvZiB0aGUgdHdvIGZvbGxvd2luZyBzdGF0
ZXM6Ci0gIC8vICAgLSBVTklOSVRJQUxJWkVEOiBXZSBhcmUgdGhlIGZpcnN0IHRocmVhZCBjYWxs
aW5nIHRoaXMgZnVuY3Rpb24uCi0gIC8vICAgLSBFWEVDVVRJTkdfQ0xPU1VSRTogQW5vdGhlciB0
aHJlYWQgaXMgYWxyZWFkeSBleGVjdXRpbmcgdGhlIGNsb3N1cmUuCi0gIC8vCi0gIC8vIEZpcnN0
LCB0cnkgdG8gY2hhbmdlIHRoZSBzdGF0ZSBmcm9tIFVOSU5JVElBTElaRUQgdG8gRVhFQ1VUSU5H
X0NMT1NVUkUKLSAgLy8gYXRvbWljYWxseS4KLSAgc3RhdGUgPSBpbnRlcm5hbDo6QWNxdWlyZV9D
b21wYXJlQW5kU3dhcCgKLSAgICAgIG9uY2UsIE9OQ0VfU1RBVEVfVU5JTklUSUFMSVpFRCwgT05D
RV9TVEFURV9FWEVDVVRJTkdfQ0xPU1VSRSk7Ci0gIGlmIChzdGF0ZSA9PSBPTkNFX1NUQVRFX1VO
SU5JVElBTElaRUQpIHsKLSAgICAvLyBXZSBhcmUgdGhlIGZpcnN0IHRocmVhZCB0byBjYWxsIHRo
aXMgZnVuY3Rpb24sIHNvIHdlIGhhdmUgdG8gY2FsbCB0aGUKLSAgICAvLyBjbG9zdXJlLgotICAg
IGNsb3N1cmUtPlJ1bigpOwotICAgIGludGVybmFsOjpSZWxlYXNlX1N0b3JlKG9uY2UsIE9OQ0Vf
U1RBVEVfRE9ORSk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gQW5vdGhlciB0aHJlYWQgaGFzIGFscmVh
ZHkgc3RhcnRlZCBleGVjdXRpbmcgdGhlIGNsb3N1cmUuIFdlIG5lZWQgdG8KLSAgICAvLyB3YWl0
IHVudGlsIGl0IGNvbXBsZXRlcyB0aGUgaW5pdGlhbGl6YXRpb24uCi0gICAgd2hpbGUgKHN0YXRl
ID09IE9OQ0VfU1RBVEVfRVhFQ1VUSU5HX0NMT1NVUkUpIHsKLSAgICAgIC8vIE5vdGUgdGhhdCBm
dXRleCgpIGNvdWxkIGJlIHVzZWQgaGVyZSBvbiBMaW51eCBhcyBhbiBpbXByb3ZlbWVudC4KLSAg
ICAgIFNjaGVkWWllbGQoKTsKLSAgICAgIHN0YXRlID0gaW50ZXJuYWw6OkFjcXVpcmVfTG9hZChv
bmNlKTsKLSAgICB9Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBu
YW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX05PX1RIUkVBRF9T
QUZFVFkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5NTIyYjIyYTFjMjI2NTdlNTE1NDczNGI4NmU0YTQxN2JiMDgxZDM5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVi
cy9vbmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRv
biBWYXJkYSkKLS8vCi0vLyBlbXVsYXRlcyBnb29nbGUzL2Jhc2Uvb25jZS5oCi0vLwotLy8gVGhp
cyBoZWFkZXIgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgb25seSBieSBpbnRlcm5hbCAuY2Mg
ZmlsZXMgYW5kCi0vLyBnZW5lcmF0ZWQgLnBiLmNjIGZpbGVzLiAgVXNlcnMgc2hvdWxkIG5vdCB1
c2UgdGhpcyBkaXJlY3RseS4KLS8vCi0vLyBUaGlzIGlzIGJhc2ljYWxseSBhIHBvcnRhYmxlIHZl
cnNpb24gb2YgcHRocmVhZF9vbmNlKCkuCi0vLwotLy8gVGhpcyBoZWFkZXIgZGVjbGFyZXM6Ci0v
LyAqIEEgdHlwZSBjYWxsZWQgUHJvdG9idWZPbmNlVHlwZS4KLS8vICogQSBtYWNybyBHT09HTEVf
UFJPVE9CVUZfREVDTEFSRV9PTkNFKCkgd2hpY2ggZGVjbGFyZXMgYSB2YXJpYWJsZSBvZiB0eXBl
Ci0vLyAgIFByb3RvYnVmT25jZVR5cGUuICBUaGlzIGlzIHRoZSBvbmx5IGxlZ2FsIHdheSB0byBk
ZWNsYXJlIHN1Y2ggYSB2YXJpYWJsZS4KLS8vICAgVGhlIG1hY3JvIG1heSBvbmx5IGJlIHVzZWQg
YXQgdGhlIGdsb2JhbCBzY29wZSAoeW91IGNhbm5vdCBjcmVhdGUgbG9jYWwgb3IKLS8vICAgY2xh
c3MgbWVtYmVyIHZhcmlhYmxlcyBvZiB0aGlzIHR5cGUpLgotLy8gKiBBIGZ1bmN0aW9uIEdvb2ds
ZU9uY2VJbml0KFByb3RvYnVmT25jZVR5cGUqIG9uY2UsIHZvaWQgKCppbml0X2Z1bmMpKCkpLgot
Ly8gICBUaGlzIGZ1bmN0aW9uLCB3aGVuIGludm9rZWQgbXVsdGlwbGUgdGltZXMgZ2l2ZW4gdGhl
IHNhbWUgUHJvdG9idWZPbmNlVHlwZQotLy8gICBvYmplY3QsIHdpbGwgaW52b2tlIGluaXRfZnVu
YyBvbiB0aGUgZmlyc3QgY2FsbCBvbmx5LCBhbmQgd2lsbCBtYWtlIHN1cmUKLS8vICAgbm9uZSBv
ZiB0aGUgY2FsbHMgcmV0dXJuIGJlZm9yZSB0aGF0IGZpcnN0IGNhbGwgdG8gaW5pdF9mdW5jIGhh
cyBmaW5pc2hlZC4KLS8vICogVGhlIHVzZXIgY2FuIHByb3ZpZGUgYSBwYXJhbWV0ZXIgd2hpY2gg
R29vZ2xlT25jZUluaXQoKSBmb3J3YXJkcyB0byB0aGUKLS8vICAgdXNlci1wcm92aWRlZCBmdW5j
dGlvbiB3aGVuIGl0IGlzIGNhbGxlZC4gVXNhZ2UgZXhhbXBsZToKLS8vICAgICBpbnQgYSA9IDEw
OwotLy8gICAgIEdvb2dsZU9uY2VJbml0KCZteV9vbmNlLCAmTXlGdW5jdGlvbkV4cGVjdGluZ0lu
dEFyZ3VtZW50LCAmYSk7Ci0vLyAqIFRoaXMgaW1wbGVtZW50YXRpb24gZ3VhcmFudGVlcyB0aGF0
IFByb3RvYnVmT25jZVR5cGUgaXMgYSBQT0QgKGkuZS4gbm8KLS8vICAgc3RhdGljIGluaXRpYWxp
emVyIGdlbmVyYXRlZCkuCi0vLwotLy8gVGhpcyBpbXBsZW1lbnRzIGEgd2F5IHRvIHBlcmZvcm0g
bGF6eSBpbml0aWFsaXphdGlvbi4gIEl0J3MgbW9yZSBlZmZpY2llbnQKLS8vIHRoYW4gdXNpbmcg
bXV0ZXhlcyBhcyBubyBsb2NrIGlzIG5lZWRlZCBpZiBpbml0aWFsaXphdGlvbiBoYXMgYWxyZWFk
eQotLy8gaGFwcGVuZWQuCi0vLwotLy8gRXhhbXBsZSB1c2FnZToKLS8vICAgdm9pZCBJbml0KCk7
Ci0vLyAgIEdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0Uob25jZV9pbml0KTsKLS8vCi0vLyAg
IC8vIENhbGxzIEluaXQoKSBleGFjdGx5IG9uY2UuCi0vLyAgIHZvaWQgSW5pdE9uY2UoKSB7Ci0v
LyAgICAgR29vZ2xlT25jZUluaXQoJm9uY2VfaW5pdCwgJkluaXQpOwotLy8gICB9Ci0vLwotLy8g
Tm90ZSB0aGF0IGlmIEdvb2dsZU9uY2VJbml0KCkgaXMgY2FsbGVkIGJlZm9yZSBtYWluKCkgaGFz
IGJlZ3VuLCBpdCBtdXN0Ci0vLyBvbmx5IGJlIGNhbGxlZCBieSB0aGUgdGhyZWFkIHRoYXQgd2ls
bCBldmVudHVhbGx5IGNhbGwgbWFpbigpIC0tIHRoYXQgaXMsCi0vLyB0aGUgdGhyZWFkIHRoYXQg
cGVyZm9ybXMgZHluYW1pYyBpbml0aWFsaXphdGlvbi4gIEluIGdlbmVyYWwgdGhpcyBpcyBhIHNh
ZmUKLS8vIGFzc3VtcHRpb24gc2luY2UgcGVvcGxlIGRvbid0IHVzdWFsbHkgY29uc3RydWN0IHRo
cmVhZHMgYmVmb3JlIG1haW4oKSBzdGFydHMsCi0vLyBidXQgaXQgaXMgdGVjaG5pY2FsbHkgbm90
IGd1YXJhbnRlZWQuICBVbmZvcnR1bmF0ZWx5LCBXaW4zMiBwcm92aWRlcyBubyB3YXkKLS8vIHdo
YXRzb2V2ZXIgdG8gc3RhdGljYWxseS1pbml0aWFsaXplIGl0cyBzeW5jaHJvbml6YXRpb24gcHJp
bWl0aXZlcywgc28gb3VyCi0vLyBvbmx5IGNob2ljZSBpcyB0byBhc3N1bWUgdGhhdCBkeW5hbWlj
IGluaXRpYWxpemF0aW9uIGlzIHNpbmdsZS10aHJlYWRlZC4KLQotI2lmbmRlZiBHT09HTEVfUFJP
VE9CVUZfU1RVQlNfT05DRV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1NUVUJTX09OQ0Vf
SF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NhbGxiYWNrLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFj
ZSBwcm90b2J1ZiB7Ci0KLSNpZmRlZiBHT09HTEVfUFJPVE9CVUZfTk9fVEhSRUFEX1NBRkVUWQot
Ci10eXBlZGVmIGJvb2wgUHJvdG9idWZPbmNlVHlwZTsKLQotI2RlZmluZSBHT09HTEVfUFJPVE9C
VUZfT05DRV9JTklUIGZhbHNlCi0KLWlubGluZSB2b2lkIEdvb2dsZU9uY2VJbml0KFByb3RvYnVm
T25jZVR5cGUqIG9uY2UsIHZvaWQgKCppbml0X2Z1bmMpKCkpIHsKLSAgaWYgKCEqb25jZSkgewot
ICAgICpvbmNlID0gdHJ1ZTsKLSAgICBpbml0X2Z1bmMoKTsKLSAgfQotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgQXJnPgotaW5saW5lIHZvaWQgR29vZ2xlT25jZUluaXQoUHJvdG9idWZPbmNlVHlw
ZSogb25jZSwgdm9pZCAoKmluaXRfZnVuYykoQXJnKSwKLSAgICBBcmcgYXJnKSB7Ci0gIGlmICgh
Km9uY2UpIHsKLSAgICAqb25jZSA9IHRydWU7Ci0gICAgaW5pdF9mdW5jKGFyZyk7Ci0gIH0KLX0K
LQotI2Vsc2UKLQotZW51bSB7Ci0gIE9OQ0VfU1RBVEVfVU5JTklUSUFMSVpFRCA9IDAsCi0gIE9O
Q0VfU1RBVEVfRVhFQ1VUSU5HX0NMT1NVUkUgPSAxLAotICBPTkNFX1NUQVRFX0RPTkUgPSAyCi19
OwotCi10eXBlZGVmIGludGVybmFsOjpBdG9taWNXb3JkIFByb3RvYnVmT25jZVR5cGU7Ci0KLSNk
ZWZpbmUgR09PR0xFX1BST1RPQlVGX09OQ0VfSU5JVCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9OQ0Vf
U1RBVEVfVU5JTklUSUFMSVpFRAotCi1MSUJQUk9UT0JVRl9FWFBPUlQKLXZvaWQgR29vZ2xlT25j
ZUluaXRJbXBsKFByb3RvYnVmT25jZVR5cGUqIG9uY2UsIENsb3N1cmUqIGNsb3N1cmUpOwotCi1M
SUJQUk9UT0JVRl9FWFBPUlQKLXZvaWQgR29vZ2xlT25jZUluaXQoUHJvdG9idWZPbmNlVHlwZSog
b25jZSwgdm9pZCAoKmluaXRfZnVuYykoKSk7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBBcmc+Ci1p
bmxpbmUgdm9pZCBHb29nbGVPbmNlSW5pdChQcm90b2J1Zk9uY2VUeXBlKiBvbmNlLCB2b2lkICgq
aW5pdF9mdW5jKShBcmcqKSwKLSAgICBBcmcqIGFyZykgewotICBpZiAoaW50ZXJuYWw6OkFjcXVp
cmVfTG9hZChvbmNlKSAhPSBPTkNFX1NUQVRFX0RPTkUpIHsKLSAgICBpbnRlcm5hbDo6RnVuY3Rp
b25DbG9zdXJlMTxBcmcqPiBmdW5jKGluaXRfZnVuYywgZmFsc2UsIGFyZyk7Ci0gICAgR29vZ2xl
T25jZUluaXRJbXBsKG9uY2UsICZmdW5jKTsKLSAgfQotfQotCi0jZW5kaWYgIC8vIEdPT0dMRV9Q
Uk9UT0JVRl9OT19USFJFQURfU0FGRVRZCi0KLWNsYXNzIEdvb2dsZU9uY2VEeW5hbWljIHsKLSBw
dWJsaWM6Ci0gIEdvb2dsZU9uY2VEeW5hbWljKCkgOiBzdGF0ZV8oR09PR0xFX1BST1RPQlVGX09O
Q0VfSU5JVCkgeyB9Ci0KLSAgLy8gSWYgdGhpcy0+SW5pdCgpIGhhcyBub3QgYmVlbiBjYWxsZWQg
YmVmb3JlIGJ5IGFueSB0aHJlYWQsCi0gIC8vIGV4ZWN1dGUgKCpmdW5jX3dpdGhfYXJnKShhcmcp
IHRoZW4gcmV0dXJuLgotICAvLyBPdGhlcndpc2UsIHdhaXQgdW50aWwgdGhhdCBwcmlvciBpbnZv
Y2F0aW9uIGhhcyBmaW5pc2hlZAotICAvLyBleGVjdXRpbmcgaXRzIGZ1bmN0aW9uLCB0aGVuIHJl
dHVybi4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgdm9pZCBJbml0KHZvaWQgKCpmdW5jX3dp
dGhfYXJnKShUKiksIFQqIGFyZykgewotICAgIEdvb2dsZU9uY2VJbml0PFQ+KCZ0aGlzLT5zdGF0
ZV8sCi0gICAgICAgICAgICAgICAgICAgICAgZnVuY193aXRoX2FyZywKLSAgICAgICAgICAgICAg
ICAgICAgICBhcmcpOwotICB9Ci0gcHJpdmF0ZToKLSAgUHJvdG9idWZPbmNlVHlwZSBzdGF0ZV87
Ci19OwotCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0UoTkFNRSkgXAotICA6
Omdvb2dsZTo6cHJvdG9idWY6OlByb3RvYnVmT25jZVR5cGUgTkFNRSA9IEdPT0dMRV9QUk9UT0JV
Rl9PTkNFX0lOSVQKLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2Ug
Z29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1NUVUJTX09OQ0VfSF9fCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZV91bml0dGVzdC5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzN2RlZjU4ZDAzNGU1MTI3MDc2NWQwZTZlZmUyOGRjNzhkODIwM2NmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9vbmNlX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRv
bkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0KLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx3
aW5kb3dzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHB0aHJlYWQu
aD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL29uY2UuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0Lmg+Ci0jaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotdXNpbmcgaW50ZXJuYWw6Ok5ld0NhbGxiYWNrOwotbmFtZXNwYWNlIHsKLQotY2xhc3MgT25j
ZUluaXRUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgdm9pZCBT
ZXRVcCgpIHsKLSAgICBzdGF0ZV8gPSBJTklUX05PVF9TVEFSVEVEOwotICAgIGN1cnJlbnRfdGVz
dF8gPSB0aGlzOwotICB9Ci0KLSAgLy8gU2luY2UgUHJvdG9idWZPbmNlVHlwZSBpcyBvbmx5IGFs
bG93ZWQgdG8gYmUgYWxsb2NhdGVkIGluIHN0YXRpYyBzdG9yYWdlLAotICAvLyBlYWNoIHRlc3Qg
bXVzdCB1c2UgYSBkaWZmZXJlbnQgcGFpciBvZiBQcm90b2J1Zk9uY2VUeXBlIG9iamVjdHMgd2hp
Y2ggaXQKLSAgLy8gbXVzdCBkZWNsYXJlIGl0c2VsZi4KLSAgdm9pZCBTZXRPbmNlcyhQcm90b2J1
Zk9uY2VUeXBlKiBvbmNlLCBQcm90b2J1Zk9uY2VUeXBlKiByZWN1cnNpdmVfb25jZSkgewotICAg
IG9uY2VfID0gb25jZTsKLSAgICByZWN1cnNpdmVfb25jZV8gPSByZWN1cnNpdmVfb25jZTsKLSAg
fQotCi0gIHZvaWQgSW5pdE9uY2UoKSB7Ci0gICAgR29vZ2xlT25jZUluaXQob25jZV8sICZJbml0
U3RhdGljKTsKLSAgfQotICB2b2lkIEluaXRSZWN1cnNpdmVPbmNlKCkgewotICAgIEdvb2dsZU9u
Y2VJbml0KHJlY3Vyc2l2ZV9vbmNlXywgJkluaXRSZWN1cnNpdmVTdGF0aWMpOwotICB9Ci0KLSAg
dm9pZCBCbG9ja0luaXQoKSB7IGluaXRfYmxvY2tlcl8uTG9jaygpOyB9Ci0gIHZvaWQgVW5ibG9j
a0luaXQoKSB7IGluaXRfYmxvY2tlcl8uVW5sb2NrKCk7IH0KLQotICBjbGFzcyBUZXN0VGhyZWFk
IHsKLSAgIHB1YmxpYzoKLSAgICBUZXN0VGhyZWFkKENsb3N1cmUqIGNhbGxiYWNrKQotICAgICAg
ICA6IGRvbmVfKGZhbHNlKSwgam9pbmVkXyhmYWxzZSksIGNhbGxiYWNrXyhjYWxsYmFjaykgewot
I2lmZGVmIF9XSU4zMgotICAgICAgdGhyZWFkXyA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAmU3Rh
cnQsIHRoaXMsIDAsIE5VTEwpOwotI2Vsc2UKLSAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRf
LCBOVUxMLCAmU3RhcnQsIHRoaXMpOwotI2VuZGlmCi0gICAgfQotICAgIH5UZXN0VGhyZWFkKCkg
ewotICAgICAgaWYgKCFqb2luZWRfKSBKb2luKCk7Ci0gICAgfQotCi0gICAgYm9vbCBJc0RvbmUo
KSB7Ci0gICAgICBNdXRleExvY2sgbG9jaygmZG9uZV9tdXRleF8pOwotICAgICAgcmV0dXJuIGRv
bmVfOwotICAgIH0KLSAgICB2b2lkIEpvaW4oKSB7Ci0gICAgICBqb2luZWRfID0gdHJ1ZTsKLSNp
ZmRlZiBfV0lOMzIKLSAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkXywgSU5GSU5JVEUp
OwotICAgICAgQ2xvc2VIYW5kbGUodGhyZWFkXyk7Ci0jZWxzZQotICAgICAgcHRocmVhZF9qb2lu
KHRocmVhZF8sIE5VTEwpOwotI2VuZGlmCi0gICAgfQotCi0gICBwcml2YXRlOgotI2lmZGVmIF9X
SU4zMgotICAgIEhBTkRMRSB0aHJlYWRfOwotI2Vsc2UKLSAgICBwdGhyZWFkX3QgdGhyZWFkXzsK
LSNlbmRpZgotCi0gICAgTXV0ZXggZG9uZV9tdXRleF87Ci0gICAgYm9vbCBkb25lXzsKLSAgICBi
b29sIGpvaW5lZF87Ci0gICAgQ2xvc3VyZSogY2FsbGJhY2tfOwotCi0jaWZkZWYgX1dJTjMyCi0g
ICAgc3RhdGljIERXT1JEIFdJTkFQSSBTdGFydChMUFZPSUQgYXJnKSB7Ci0jZWxzZQotICAgIHN0
YXRpYyB2b2lkKiBTdGFydCh2b2lkKiBhcmcpIHsKLSNlbmRpZgotICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxUZXN0VGhyZWFkKj4oYXJnKS0+UnVuKCk7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICB2b2lkIFJ1bigpIHsKLSAgICAgIGNhbGxiYWNrXy0+UnVuKCk7Ci0gICAgICBNdXRleExv
Y2sgbG9jaygmZG9uZV9tdXRleF8pOwotICAgICAgZG9uZV8gPSB0cnVlOwotICAgIH0KLSAgfTsK
LQotICBUZXN0VGhyZWFkKiBSdW5Jbml0T25jZUluTmV3VGhyZWFkKCkgewotICAgIHJldHVybiBu
ZXcgVGVzdFRocmVhZChpbnRlcm5hbDo6TmV3Q2FsbGJhY2sodGhpcywgJk9uY2VJbml0VGVzdDo6
SW5pdE9uY2UpKTsKLSAgfQotICBUZXN0VGhyZWFkKiBSdW5Jbml0UmVjdXJzaXZlT25jZUluTmV3
VGhyZWFkKCkgewotICAgIHJldHVybiBuZXcgVGVzdFRocmVhZCgKLSAgICAgICAgaW50ZXJuYWw6
Ok5ld0NhbGxiYWNrKHRoaXMsICZPbmNlSW5pdFRlc3Q6OkluaXRSZWN1cnNpdmVPbmNlKSk7Ci0g
IH0KLQotICBlbnVtIFN0YXRlIHsKLSAgICBJTklUX05PVF9TVEFSVEVELAotICAgIElOSVRfU1RB
UlRFRCwKLSAgICBJTklUX0RPTkUKLSAgfTsKLSAgU3RhdGUgQ3VycmVudFN0YXRlKCkgewotICAg
IE11dGV4TG9jayBsb2NrKCZtdXRleF8pOwotICAgIHJldHVybiBzdGF0ZV87Ci0gIH0KLQotICB2
b2lkIFdhaXRBQml0KCkgewotI2lmZGVmIF9XSU4zMgotICAgIFNsZWVwKDEwMDApOwotI2Vsc2UK
LSAgICBzbGVlcCgxKTsKLSNlbmRpZgotICB9Ci0KLSBwcml2YXRlOgotICBNdXRleCBtdXRleF87
Ci0gIE11dGV4IGluaXRfYmxvY2tlcl87Ci0gIFN0YXRlIHN0YXRlXzsKLSAgUHJvdG9idWZPbmNl
VHlwZSogb25jZV87Ci0gIFByb3RvYnVmT25jZVR5cGUqIHJlY3Vyc2l2ZV9vbmNlXzsKLQotICB2
b2lkIEluaXQoKSB7Ci0gICAgTXV0ZXhMb2NrIGxvY2soJm11dGV4Xyk7Ci0gICAgRVhQRUNUX0VR
KElOSVRfTk9UX1NUQVJURUQsIHN0YXRlXyk7Ci0gICAgc3RhdGVfID0gSU5JVF9TVEFSVEVEOwot
ICAgIG11dGV4Xy5VbmxvY2soKTsKLSAgICBpbml0X2Jsb2NrZXJfLkxvY2soKTsKLSAgICBpbml0
X2Jsb2NrZXJfLlVubG9jaygpOwotICAgIG11dGV4Xy5Mb2NrKCk7Ci0gICAgc3RhdGVfID0gSU5J
VF9ET05FOwotICB9Ci0KLSAgc3RhdGljIE9uY2VJbml0VGVzdCogY3VycmVudF90ZXN0XzsKLSAg
c3RhdGljIHZvaWQgSW5pdFN0YXRpYygpIHsgY3VycmVudF90ZXN0Xy0+SW5pdCgpOyB9Ci0gIHN0
YXRpYyB2b2lkIEluaXRSZWN1cnNpdmVTdGF0aWMoKSB7IGN1cnJlbnRfdGVzdF8tPkluaXRPbmNl
KCk7IH0KLX07Ci0KLU9uY2VJbml0VGVzdCogT25jZUluaXRUZXN0OjpjdXJyZW50X3Rlc3RfID0g
TlVMTDsKLQotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShzaW1wbGVfb25jZSk7Ci0KLVRF
U1RfRihPbmNlSW5pdFRlc3QsIFNpbXBsZSkgewotICBTZXRPbmNlcygmc2ltcGxlX29uY2UsIE5V
TEwpOwotCi0gIEVYUEVDVF9FUShJTklUX05PVF9TVEFSVEVELCBDdXJyZW50U3RhdGUoKSk7Ci0g
IEluaXRPbmNlKCk7Ci0gIEVYUEVDVF9FUShJTklUX0RPTkUsIEN1cnJlbnRTdGF0ZSgpKTsKLQot
ICAvLyBDYWxsaW5nIGFnYWluIGhhcyBubyBlZmZlY3QuCi0gIEluaXRPbmNlKCk7Ci0gIEVYUEVD
VF9FUShJTklUX0RPTkUsIEN1cnJlbnRTdGF0ZSgpKTsKLX0KLQotR09PR0xFX1BST1RPQlVGX0RF
Q0xBUkVfT05DRShyZWN1cnNpdmVfb25jZTEpOwotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05D
RShyZWN1cnNpdmVfb25jZTIpOwotCi1URVNUX0YoT25jZUluaXRUZXN0LCBSZWN1cnNpdmUpIHsK
LSAgU2V0T25jZXMoJnJlY3Vyc2l2ZV9vbmNlMSwgJnJlY3Vyc2l2ZV9vbmNlMik7Ci0KLSAgRVhQ
RUNUX0VRKElOSVRfTk9UX1NUQVJURUQsIEN1cnJlbnRTdGF0ZSgpKTsKLSAgSW5pdFJlY3Vyc2l2
ZU9uY2UoKTsKLSAgRVhQRUNUX0VRKElOSVRfRE9ORSwgQ3VycmVudFN0YXRlKCkpOwotfQotCi1H
T09HTEVfUFJPVE9CVUZfREVDTEFSRV9PTkNFKG11bHRpcGxlX3RocmVhZHNfb25jZSk7Ci0KLVRF
U1RfRihPbmNlSW5pdFRlc3QsIE11bHRpcGxlVGhyZWFkcykgewotICBTZXRPbmNlcygmbXVsdGlw
bGVfdGhyZWFkc19vbmNlLCBOVUxMKTsKLQotICBzY29wZWRfcHRyPFRlc3RUaHJlYWQ+IHRocmVh
ZHNbNF07Ci0gIEVYUEVDVF9FUShJTklUX05PVF9TVEFSVEVELCBDdXJyZW50U3RhdGUoKSk7Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgdGhyZWFkc1tpXS5yZXNldChSdW5J
bml0T25jZUluTmV3VGhyZWFkKCkpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr
KSB7Ci0gICAgdGhyZWFkc1tpXS0+Sm9pbigpOwotICB9Ci0gIEVYUEVDVF9FUShJTklUX0RPTkUs
IEN1cnJlbnRTdGF0ZSgpKTsKLX0KLQotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShtdWx0
aXBsZV90aHJlYWRzX2Jsb2NrZWRfb25jZTEpOwotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05D
RShtdWx0aXBsZV90aHJlYWRzX2Jsb2NrZWRfb25jZTIpOwotCi1URVNUX0YoT25jZUluaXRUZXN0
LCBNdWx0aXBsZVRocmVhZHNCbG9ja2VkKSB7Ci0gIFNldE9uY2VzKCZtdWx0aXBsZV90aHJlYWRz
X2Jsb2NrZWRfb25jZTEsICZtdWx0aXBsZV90aHJlYWRzX2Jsb2NrZWRfb25jZTIpOwotCi0gIHNj
b3BlZF9wdHI8VGVzdFRocmVhZD4gdGhyZWFkc1s4XTsKLSAgRVhQRUNUX0VRKElOSVRfTk9UX1NU
QVJURUQsIEN1cnJlbnRTdGF0ZSgpKTsKLQotICBCbG9ja0luaXQoKTsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCA0OyBpKyspIHsKLSAgICB0aHJlYWRzW2ldLnJlc2V0KFJ1bkluaXRPbmNlSW5OZXdU
aHJlYWQoKSk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IDQ7IGkgPCA4OyBpKyspIHsKLSAgICB0aHJl
YWRzW2ldLnJlc2V0KFJ1bkluaXRSZWN1cnNpdmVPbmNlSW5OZXdUaHJlYWQoKSk7Ci0gIH0KLQot
ICBXYWl0QUJpdCgpOwotCi0gIC8vIFdlIHNob3VsZCBub3cgaGF2ZSBvbmUgdGhyZWFkIGJsb2Nr
ZWQgaW5zaWRlIEluaXQoKSwgZm91ciBibG9ja2VkIHdhaXRpbmcKLSAgLy8gZm9yIEluaXQoKSB0
byBjb21wbGV0ZSwgYW5kIHRocmVlIGJsb2NrZWQgd2FpdGluZyBmb3IgSW5pdFJlY3Vyc2l2ZSgp
IHRvCi0gIC8vIGNvbXBsZXRlLgotICBFWFBFQ1RfRVEoSU5JVF9TVEFSVEVELCBDdXJyZW50U3Rh
dGUoKSk7Ci0gIFVuYmxvY2tJbml0KCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKysp
IHsKLSAgICB0aHJlYWRzW2ldLT5Kb2luKCk7Ci0gIH0KLSAgRVhQRUNUX0VRKElOSVRfRE9ORSwg
Q3VycmVudFN0YXRlKCkpOwotfQotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9zdHVicy9wbGF0Zm9ybV9tYWNyb3MuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9wbGF0Zm9ybV9tYWNyb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNGJhNGIzNDhjNzRmY2MzN2NkZDViNjdlOTYzYzY1NDkwOTc4OGVhNy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvcGxhdGZvcm1fbWFjcm9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVG
X1BMQVRGT1JNX01BQ1JPU19IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfUExBVEZPUk1fTUFD
Uk9TX0hfCi0KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1BMQVRGT1JNX0VSUk9SIFwKLSNlcnJv
ciAiSG9zdCBwbGF0Zm9ybSB3YXMgbm90IGRldGVjdGVkIGFzIHN1cHBvcnRlZCBieSBwcm90b2J1
ZiIKLQotLy8gUHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBkZXRlY3Rpb24uICBGb3IgbW9yZSBpbmZv
IG9uIHdoYXQncyBkZWZpbmVkLCBzZWU6Ci0vLyAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v
ZW4tdXMvbGlicmFyeS9iMDA4NGtheS5hc3B4Ci0vLyAgIGh0dHA6Ly93d3cuYWduZXIub3JnL29w
dGltaXplL2NhbGxpbmdfY29udmVudGlvbnMucGRmCi0vLyAgIG9yIHdpdGggZ2NjLCBydW46ICJl
Y2hvIHwgZ2NjIC1FIC1kTSAtIgotI2lmIGRlZmluZWQoX01fWDY0KSB8fCBkZWZpbmVkKF9feDg2
XzY0X18pCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BUkNIX1g2NCAxCi0jZGVmaW5lIEdPT0dM
RV9QUk9UT0JVRl9BUkNIXzY0X0JJVCAxCi0jZWxpZiBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmlu
ZWQoX19pMzg2X18pCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BUkNIX0lBMzIgMQotI2RlZmlu
ZSBHT09HTEVfUFJPVE9CVUZfQVJDSF8zMl9CSVQgMQotI2VsaWYgZGVmaW5lZChfX1FOWF9fKQot
I2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQVJDSF9BUk1fUU5YIDEKLSNkZWZpbmUgR09PR0xFX1BS
T1RPQlVGX0FSQ0hfMzJfQklUIDEKLSNlbGlmIGRlZmluZWQoX19BUk1FTF9fKQotI2RlZmluZSBH
T09HTEVfUFJPVE9CVUZfQVJDSF9BUk0gMQotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQVJDSF8z
Ml9CSVQgMQotI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKLSNkZWZpbmUgR09PR0xFX1BST1RP
QlVGX0FSQ0hfQUFSQ0g2NCAxCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BUkNIXzY0X0JJVCAx
Ci0jZWxpZiBkZWZpbmVkKF9fTUlQU0VMX18pCi0jaWYgZGVmaW5lZChfX0xQNjRfXykKLSNkZWZp
bmUgR09PR0xFX1BST1RPQlVGX0FSQ0hfTUlQUzY0IDEKLSNkZWZpbmUgR09PR0xFX1BST1RPQlVG
X0FSQ0hfNjRfQklUIDEKLSNlbHNlCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BUkNIX01JUFMg
MQotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQVJDSF8zMl9CSVQgMQotI2VuZGlmCi0jZWxpZiBk
ZWZpbmVkKF9fcG5hY2xfXykKLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0FSQ0hfMzJfQklUIDEK
LSNlbGlmIGRlZmluZWQoc3BhcmMpCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BUkNIX1NQQVJD
IDEKLSNpZiBkZWZpbmVkKF9fc3BhcmNfdjlfXykgfHwgZGVmaW5lZChfX3NwYXJjdjkpIHx8IGRl
ZmluZWQoX19hcmNoNjRfXykKLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX0FSQ0hfNjRfQklUIDEK
LSNlbHNlCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BUkNIXzMyX0JJVCAxCi0jZW5kaWYKLSNl
bGlmIGRlZmluZWQoX1BPV0VSKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IGRlZmluZWQo
X19QUEM2NF9fKQotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfQVJDSF9QT1dFUiAxCi0jZGVmaW5l
IEdPT0dMRV9QUk9UT0JVRl9BUkNIXzY0X0JJVCAxCi0jZWxpZiBkZWZpbmVkKF9fUFBDX18pCi0j
ZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9BUkNIX1BQQyAxCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JV
Rl9BUkNIXzMyX0JJVCAxCi0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKQotIyBpZiAoKChfX0dOVUNf
XyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNykpIHx8IChfX0dOVUNfXyA+IDQpKQotLy8g
V2UgZmFsbGJhY2sgdG8gdGhlIGdlbmVyaWMgQ2xhbmcvR0NDID49IDQuNyBpbXBsZW1lbnRhdGlv
biBpbiBhdG9taWNvcHMuaAotIyBlbGlmIGRlZmluZWQoX19jbGFuZ19fKQotIyAgaWYgIV9faGFz
X2V4dGVuc2lvbihjX2F0b21pYykKLUdPT0dMRV9QUk9UT0JVRl9QTEFURk9STV9FUlJPUgotIyAg
ZW5kaWYKLS8vIFdlIGZhbGxiYWNrIHRvIHRoZSBnZW5lcmljIENsYW5nL0dDQyA+PSA0LjcgaW1w
bGVtZW50YXRpb24gaW4gYXRvbWljb3BzLmgKLSMgZW5kaWYKLSMgaWYgX19MUDY0X18KLSMgIGRl
ZmluZSBHT09HTEVfUFJPVE9CVUZfQVJDSF82NF9CSVQgMQotIyBlbHNlCi0jICBkZWZpbmUgR09P
R0xFX1BST1RPQlVGX0FSQ0hfMzJfQklUIDEKLSMgZW5kaWYKLSNlbHNlCi1HT09HTEVfUFJPVE9C
VUZfUExBVEZPUk1fRVJST1IKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jZGVm
aW5lIEdPT0dMRV9QUk9UT0JVRl9PU19BUFBMRQotI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFs
cy5oPgotI2lmIFRBUkdFVF9PU19JUEhPTkUKLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX09TX0lQ
SE9ORQotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKF9fRU1TQ1JJUFRFTl9fKQotI2RlZmluZSBHT09H
TEVfUFJPVE9CVUZfT1NfRU1TQ1JJUFRFTgotI2VsaWYgZGVmaW5lZChfX25hdGl2ZV9jbGllbnRf
XykKLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX09TX05BQ0wKLSNlbGlmIGRlZmluZWQoc3VuKQot
I2RlZmluZSBHT09HTEVfUFJPVE9CVUZfT1NfU09MQVJJUwotI2VsaWYgZGVmaW5lZChfQUlYKQot
I2RlZmluZSBHT09HTEVfUFJPVE9CVUZfT1NfQUlYCi0jZWxpZiBkZWZpbmVkKF9fQU5EUk9JRF9f
KQotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfT1NfQU5EUk9JRAotI2VuZGlmCi0KLSN1bmRlZiBH
T09HTEVfUFJPVE9CVUZfUExBVEZPUk1fRVJST1IKLQotI2lmIGRlZmluZWQoR09PR0xFX1BST1RP
QlVGX09TX0FORFJPSUQpIHx8IGRlZmluZWQoR09PR0xFX1BST1RPQlVGX09TX0lQSE9ORSkKLS8v
IEFuZHJvaWQgbmRrIGRvZXMgbm90IHN1cHBvcnQgdGhlIF9fdGhyZWFkIGtleXdvcmQgdmVyeSB3
ZWxsIHlldC4gSGVyZQotLy8gd2UgdXNlIHB0aHJlYWRfa2V5X2NyZWF0ZSgpL3B0aHJlYWRfZ2V0
c3BlY2lmaWMoKS8uLi4gbWV0aG9kcyBmb3IKLS8vIFRMUyBzdXBwb3J0IG9uIGFuZHJvaWQuCi0v
LyBpT1MgYWxzbyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBfX3RocmVhZCBrZXl3b3JkLgotI2RlZmlu
ZSBHT09HTEVfUFJPVE9CVUZfTk9fVEhSRUFETE9DQUwKLSNlbmRpZgotCi0jZW5kaWYgIC8vIEdP
T0dMRV9QUk9UT0JVRl9QTEFURk9STV9NQUNST1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi9zdHVicy9wb3J0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvcG9ydC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGU2MDc0NjUzMTQwNGE0MDNjODk2NjFlM2Zm
NjgzMDM0ZmRkYmJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9wb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
MDAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYg
R09PR0xFX1BST1RPQlVGX1NUVUJTX1BPUlRfSF8KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1NU
VUJTX1BPUlRfSF8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHN0cmluZy5o
PgotI2lmIGRlZmluZWQoX19vc2ZfXykKLS8vIFRydTY0IGxhY2tzIHN0ZGludC5oLCBidXQgaGFz
IGludHR5cGVzLmggd2hpY2ggZGVmaW5lcyBhIHN1cGVyc2V0IG9mCi0vLyB3aGF0IHN0ZGludC5o
IHdvdWxkIGRlZmluZS4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2VsaWYgIWRlZmluZWQoX01T
Q19WRVIpCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIFBST1RPQlVGX0xJ
VFRMRV9FTkRJQU4KLSNpZmRlZiBfV0lOMzIKLSAgLy8gQXNzdW1pbmcgd2luZG93cyBpcyBhbHdh
eXMgbGl0dGxlLWVuZGlhbi4KLSAgLy8gVE9ETyh4aWFvZmVuZyk6IFRoZSBQUk9UT0JVRl9MSVRU
TEVfRU5ESUFOIGlzIG5vdCBvbmx5IHVzZWQgZm9yCi0gIC8vIG9wdGltaXphdGlvbiBidXQgYWxz
byBmb3IgY29ycmVjdG5lc3MuIFdlIHNob3VsZCBkZWZpbmUgYW4KLSAgLy8gZGlmZmVyZW50IG1h
Y3JvIHRvIHRlc3QgdGhlIGJpZy1lbmRpYW4gY29kZSBwYXRoIGluIGNvZGVkX3N0cmVhbS4KLSAg
I2lmICFkZWZpbmVkKFBST1RPQlVGX0RJU0FCTEVfTElUVExFX0VORElBTl9PUFRfRk9SX1RFU1Qp
Ci0gICAgI2RlZmluZSBQUk9UT0JVRl9MSVRUTEVfRU5ESUFOIDEKLSAgI2VuZGlmCi0gICNpZiBf
TVNDX1ZFUiA+PSAxMzAwICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCi0gICAgLy8gSWYg
TVNWQyBoYXMgIi9SVENjIiBzZXQsIGl0IHdpbGwgY29tcGxhaW4gYWJvdXQgdHJ1bmNhdGluZyBj
YXN0cyBhdAotICAgIC8vIHJ1bnRpbWUuICBUaGlzIGZpbGUgY29udGFpbnMgc29tZSBpbnRlbnRp
b25hbCB0cnVuY2F0aW5nIGNhc3RzLgotICAgICNwcmFnbWEgcnVudGltZV9jaGVja3MoImMiLCBv
ZmYpCi0gICNlbmRpZgotI2Vsc2UKLSAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiAgIC8vIF9fQllU
RV9PUkRFUgotICAjaWYgKChkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKSAmJiAhZGVmaW5lZChf
X0JJR19FTkRJQU5fXykpIHx8IFwKLSAgICAgICAgIChkZWZpbmVkKF9fQllURV9PUkRFUikgJiYg
X19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikpICYmIFwKLSAgICAgICFkZWZpbmVkKFBS
T1RPQlVGX0RJU0FCTEVfTElUVExFX0VORElBTl9PUFRfRk9SX1RFU1QpCi0gICAgI2RlZmluZSBQ
Uk9UT0JVRl9MSVRUTEVfRU5ESUFOIDEKLSAgI2VuZGlmCi0jZW5kaWYKLQotLy8gVGhlIG1hY3Jv
cyBkZWZpbmVkIGJlbG93IGFyZSByZXF1aXJlZCBpbiBvcmRlciB0byBtYWtlIHByb3RvYnVmX2xp
dGUgYQotLy8gY29tcG9uZW50IG9uIGFsbCBwbGF0Zm9ybXMuIFNlZSBodHRwOi8vY3JidWcuY29t
LzE3MjgwMC4KLSNpZiBkZWZpbmVkKENPTVBPTkVOVF9CVUlMRCkgJiYgZGVmaW5lZChQUk9UT0JV
Rl9VU0VfRExMUykKLSAgI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgI2lmZGVmIExJQlBST1RP
QlVGX0VYUE9SVFMKLSAgICAgICNkZWZpbmUgTElCUFJPVE9CVUZfRVhQT1JUIF9fZGVjbHNwZWMo
ZGxsZXhwb3J0KQotICAgICNlbHNlCi0gICAgICAjZGVmaW5lIExJQlBST1RPQlVGX0VYUE9SVCBf
X2RlY2xzcGVjKGRsbGltcG9ydCkKLSAgICAjZW5kaWYKLSAgICAjaWZkZWYgTElCUFJPVE9DX0VY
UE9SVFMKLSAgICAgICNkZWZpbmUgTElCUFJPVE9DX0VYUE9SVCAgIF9fZGVjbHNwZWMoZGxsZXhw
b3J0KQotICAgICNlbHNlCi0gICAgICAjZGVmaW5lIExJQlBST1RPQ19FWFBPUlQgICBfX2RlY2xz
cGVjKGRsbGltcG9ydCkKLSAgICAjZW5kaWYKLSAgI2Vsc2UgIC8vIGRlZmluZWQoX01TQ19WRVIp
Ci0gICAgI2lmZGVmIExJQlBST1RPQlVGX0VYUE9SVFMKLSAgICAgICNkZWZpbmUgTElCUFJPVE9C
VUZfRVhQT1JUIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCi0gICAgI2Vs
c2UKLSAgICAgICNkZWZpbmUgTElCUFJPVE9CVUZfRVhQT1JUCi0gICAgI2VuZGlmCi0gICAgI2lm
ZGVmIExJQlBST1RPQ19FWFBPUlRTCi0gICAgICAjZGVmaW5lIExJQlBST1RPQ19FWFBPUlQgICBf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQotICAgICNlbHNlCi0gICAgICAj
ZGVmaW5lIExJQlBST1RPQ19FWFBPUlQKLSAgICAjZW5kaWYKLSAgI2VuZGlmCi0jZWxzZSAgLy8g
ZGVmaW5lZChDT01QT05FTlRfQlVJTEQpICYmIGRlZmluZWQoUFJPVE9CVUZfVVNFX0RMTFMpCi0g
ICNkZWZpbmUgTElCUFJPVE9CVUZfRVhQT1JUCi0gICNkZWZpbmUgTElCUFJPVE9DX0VYUE9SVAot
I2VuZGlmCi0KLS8vIFRoZXNlICNpbmNsdWRlcyBhcmUgZm9yIHRoZSBieXRlIHN3YXAgZnVuY3Rp
b25zIGRlY2xhcmVkIGxhdGVyIG9uLgotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8c3RkbGli
Lmg+ICAvLyBOT0xJTlQoYnVpbGQvaW5jbHVkZSkKLSNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQot
I2luY2x1ZGUgPGxpYmtlcm4vT1NCeXRlT3JkZXIuaD4KLSNlbGlmIGRlZmluZWQoX19HTElCQ19f
KSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCi0jaW5jbHVkZSA8Ynl0ZXN3YXAuaD4gIC8vIElXWVUg
cHJhZ21hOiBleHBvcnQKLSNlbmRpZgotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBmcm9tIGdvb2dsZTMv
YmFzZS9wb3J0LmgKLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQot
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKLQotI2lmZGVmIF9NU0NfVkVSCi10eXBlZGVmIHNp
Z25lZCBfX2ludDggIGludDg7Ci10eXBlZGVmIF9faW50MTYgaW50MTY7Ci10eXBlZGVmIF9faW50
MzIgaW50MzI7Ci10eXBlZGVmIF9faW50NjQgaW50NjQ7Ci0KLXR5cGVkZWYgdW5zaWduZWQgX19p
bnQ4ICB1aW50ODsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQxNiB1aW50MTY7Ci10eXBlZGVmIHVu
c2lnbmVkIF9faW50MzIgdWludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NDsK
LSNlbHNlCi10eXBlZGVmIGludDhfdCAgaW50ODsKLXR5cGVkZWYgaW50MTZfdCBpbnQxNjsKLXR5
cGVkZWYgaW50MzJfdCBpbnQzMjsKLXR5cGVkZWYgaW50NjRfdCBpbnQ2NDsKLQotdHlwZWRlZiB1
aW50OF90ICB1aW50ODsKLXR5cGVkZWYgdWludDE2X3QgdWludDE2OwotdHlwZWRlZiB1aW50MzJf
dCB1aW50MzI7Ci10eXBlZGVmIHVpbnQ2NF90IHVpbnQ2NDsKLSNlbmRpZgotCi0vLyBsb25nIGxv
bmcgbWFjcm9zIHRvIGJlIHVzZWQgYmVjYXVzZSBnY2MgYW5kIHZjKysgdXNlIGRpZmZlcmVudCBz
dWZmaXhlcywKLS8vIGFuZCBkaWZmZXJlbnQgc2l6ZSBzcGVjaWZpZXJzIGluIGZvcm1hdCBzdHJp
bmdzCi0jdW5kZWYgR09PR0xFX0xPTkdMT05HCi0jdW5kZWYgR09PR0xFX1VMT05HTE9ORwotI3Vu
ZGVmIEdPT0dMRV9MTF9GT1JNQVQKLQotI2lmZGVmIF9NU0NfVkVSCi0jZGVmaW5lIEdPT0dMRV9M
T05HTE9ORyh4KSB4IyNJNjQKLSNkZWZpbmUgR09PR0xFX1VMT05HTE9ORyh4KSB4IyNVSTY0Ci0j
ZGVmaW5lIEdPT0dMRV9MTF9GT1JNQVQgIkk2NCIgIC8vIEFzIGluIHByaW50ZigiJUk2NGQiLCAu
Li4pCi0jZWxzZQotI2RlZmluZSBHT09HTEVfTE9OR0xPTkcoeCkgSU5UNjRfQyh4KQotI2RlZmlu
ZSBHT09HTEVfVUxPTkdMT05HKHgpIFVJTlQ2NF9DKHgpCi0jZGVmaW5lIEdPT0dMRV9MTF9GT1JN
QVQgImxsIiAgLy8gQXMgaW4gIiVsbGQiLiBOb3RlIHRoYXQgInEiIGlzIHBvb3IgZm9ybSBhbHNv
LgotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBpbnQzMiBraW50MzJtYXggPSAweDdGRkZGRkZGOwot
c3RhdGljIGNvbnN0IGludDMyIGtpbnQzMm1pbiA9IC1raW50MzJtYXggLSAxOwotc3RhdGljIGNv
bnN0IGludDY0IGtpbnQ2NG1heCA9IEdPT0dMRV9MT05HTE9ORygweDdGRkZGRkZGRkZGRkZGRkYp
Owotc3RhdGljIGNvbnN0IGludDY0IGtpbnQ2NG1pbiA9IC1raW50NjRtYXggLSAxOwotc3RhdGlj
IGNvbnN0IHVpbnQzMiBrdWludDMybWF4ID0gMHhGRkZGRkZGRnU7Ci1zdGF0aWMgY29uc3QgdWlu
dDY0IGt1aW50NjRtYXggPSBHT09HTEVfVUxPTkdMT05HKDB4RkZGRkZGRkZGRkZGRkZGRik7Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIEFubm90YXRpb25zOiAgU29tZSBwYXJ0cyBvZiB0aGUgY29kZSBo
YXZlIGJlZW4gYW5ub3RhdGVkIGluIHdheXMgdGhhdCBtaWdodAotLy8gICBiZSB1c2VmdWwgdG8g
c29tZSBjb21waWxlcnMgb3IgdG9vbHMsIGJ1dCBhcmUgbm90IHN1cHBvcnRlZCB1bml2ZXJzYWxs
eS4KLS8vICAgWW91IGNhbiAjZGVmaW5lIHRoZXNlIGFubm90YXRpb25zIHlvdXJzZWxmIGlmIHRo
ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCi0vLyAgIGlzIG5vdCByaWdodCBmb3IgeW91LgotCi0j
aWZuZGVmIEdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElORQotI2lmIGRlZmluZWQoX19HTlVD
X18pICYmIChfX0dOVUNfXyA+IDMgfHwoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+
PSAxKSkKLS8vIEZvciBmdW5jdGlvbnMgd2Ugd2FudCB0byBmb3JjZSBpbmxpbmUuCi0vLyBJbnRy
b2R1Y2VkIGluIGdjYyAzLjEuCi0jZGVmaW5lIEdPT0dMRV9BVFRSSUJVVEVfQUxXQVlTX0lOTElO
RSBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCi0jZWxzZQotLy8gT3RoZXIgY29tcGls
ZXJzIHdpbGwgaGF2ZSB0byBmaWd1cmUgaXQgb3V0IGZvciB0aGVtc2VsdmVzLgotI2RlZmluZSBH
T09HTEVfQVRUUklCVVRFX0FMV0FZU19JTkxJTkUKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYg
R09PR0xFX0FUVFJJQlVURV9OT0lOTElORQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dO
VUNfXyA+IDMgfHwoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxKSkKLS8vIEZv
ciBmdW5jdGlvbnMgd2Ugd2FudCB0byBmb3JjZSBub3QgaW5saW5lLgotLy8gSW50cm9kdWNlZCBp
biBnY2MgMy4xLgotI2RlZmluZSBHT09HTEVfQVRUUklCVVRFX05PSU5MSU5FIF9fYXR0cmlidXRl
X18gKChub2lubGluZSkpCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0g
MTQwMCkKLS8vIFNlZW1zIHRvIGhhdmUgYmVlbiBhcm91bmQgc2luY2UgYXQgbGVhc3QgVmlzdWFs
IFN0dWRpbyAyMDA1Ci0jZGVmaW5lIEdPT0dMRV9BVFRSSUJVVEVfTk9JTkxJTkUgX19kZWNsc3Bl
Yyhub2lubGluZSkKLSNlbHNlCi0vLyBPdGhlciBjb21waWxlcnMgd2lsbCBoYXZlIHRvIGZpZ3Vy
ZSBpdCBvdXQgZm9yIHRoZW1zZWx2ZXMuCi0jZGVmaW5lIEdPT0dMRV9BVFRSSUJVVEVfTk9JTkxJ
TkUKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgR09PR0xFX0FUVFJJQlVURV9ERVBSRUNBVEVE
Ci0jaWZkZWYgX19HTlVDX18KLS8vIElmIHRoZSBtZXRob2QvdmFyaWFibGUvdHlwZSBpcyB1c2Vk
IGFueXdoZXJlLCBwcm9kdWNlIGEgd2FybmluZy4KLSNkZWZpbmUgR09PR0xFX0FUVFJJQlVURV9E
RVBSRUNBVEVEIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKQotI2Vsc2UKLSNkZWZpbmUgR09P
R0xFX0FUVFJJQlVURV9ERVBSRUNBVEVECi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEdPT0dM
RV9QUkVESUNUX1RSVUUKLSNpZmRlZiBfX0dOVUNfXwotLy8gUHJvdmlkZWQgYXQgbGVhc3Qgc2lu
Y2UgR0NDIDMuMC4KLSNkZWZpbmUgR09PR0xFX1BSRURJQ1RfVFJVRSh4KSAoX19idWlsdGluX2V4
cGVjdCghISh4KSwgMSkpCi0jZWxzZQotI2RlZmluZSBHT09HTEVfUFJFRElDVF9UUlVFKHgpICh4
KQotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBHT09HTEVfUFJFRElDVF9GQUxTRQotI2lmZGVm
IF9fR05VQ19fCi0vLyBQcm92aWRlZCBhdCBsZWFzdCBzaW5jZSBHQ0MgMy4wLgotI2RlZmluZSBH
T09HTEVfUFJFRElDVF9GQUxTRSh4KSAoX19idWlsdGluX2V4cGVjdCh4LCAwKSkKLSNlbHNlCi0j
ZGVmaW5lIEdPT0dMRV9QUkVESUNUX0ZBTFNFKHgpICh4KQotI2VuZGlmCi0jZW5kaWYKLQotLy8g
RGVsaW1pdHMgYSBibG9jayBvZiBjb2RlIHdoaWNoIG1heSB3cml0ZSB0byBtZW1vcnkgd2hpY2gg
aXMgc2ltdWx0YW5lb3VzbHkKLS8vIHdyaXR0ZW4gYnkgb3RoZXIgdGhyZWFkcywgYnV0IHdoaWNo
IGhhcyBiZWVuIGRldGVybWluZWQgdG8gYmUgdGhyZWFkLXNhZmUKLS8vIChlLmcuIGJlY2F1c2Ug
aXQgaXMgYW4gaWRlbXBvdGVudCB3cml0ZSkuCi0jaWZuZGVmIEdPT0dMRV9TQUZFX0NPTkNVUlJF
TlRfV1JJVEVTX0JFR0lOCi0jZGVmaW5lIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JF
R0lOKCkKLSNlbmRpZgotI2lmbmRlZiBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQK
LSNkZWZpbmUgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCkKLSNlbmRpZgotCi0j
aWYgZGVmaW5lZChfX2NsYW5nX18pICYmIGRlZmluZWQoX19oYXNfY3BwX2F0dHJpYnV0ZSkgXAot
ICAgICYmICFkZWZpbmVkKEdPT0dMRV9QUk9UT0JVRl9PU19BUFBMRSkKLSMgaWYgZGVmaW5lZChH
T09HTEVfUFJPVE9CVUZfT1NfTkFDTCkgfHwgZGVmaW5lZChFTVNDUklQVEVOKSB8fCBcCi0gICAg
IF9faGFzX2NwcF9hdHRyaWJ1dGUoY2xhbmc6OmZhbGx0aHJvdWdoKQotIyAgZGVmaW5lIEdPT0dM
RV9GQUxMVEhST1VHSF9JTlRFTkRFRCBbW2NsYW5nOjpmYWxsdGhyb3VnaF1dCi0jIGVuZGlmCi0j
ZW5kaWYKLQotI2lmbmRlZiBHT09HTEVfRkFMTFRIUk9VR0hfSU5URU5ERUQKLSMgZGVmaW5lIEdP
T0dMRV9GQUxMVEhST1VHSF9JTlRFTkRFRAotI2VuZGlmCi0KLSNkZWZpbmUgR09PR0xFX0dVQVJE
RURfQlkoeCkKLSNkZWZpbmUgR09PR0xFX0FUVFJJQlVURV9DT0xECi0KLS8vIHg4NiBhbmQgeDg2
LTY0IGNhbiBwZXJmb3JtIHVuYWxpZ25lZCBsb2Fkcy9zdG9yZXMgZGlyZWN0bHkuCi0jaWYgZGVm
aW5lZChfTV9YNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAotICAgIGRlZmluZWQoX01f
SVg4NikgfHwgZGVmaW5lZChfX2kzODZfXykKLQotI2RlZmluZSBHT09HTEVfVU5BTElHTkVEX0xP
QUQxNihfcCkgKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNiAqPihfcCkpCi0jZGVmaW5l
IEdPT0dMRV9VTkFMSUdORURfTE9BRDMyKF9wKSAoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyICo+KF9wKSkKLSNkZWZpbmUgR09PR0xFX1VOQUxJR05FRF9MT0FENjQoX3ApICgqcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50NjQgKj4oX3ApKQotCi0jZGVmaW5lIEdPT0dMRV9VTkFMSUdO
RURfU1RPUkUxNihfcCwgX3ZhbCkgKCpyZWludGVycHJldF9jYXN0PHVpbnQxNiAqPihfcCkgPSAo
X3ZhbCkpCi0jZGVmaW5lIEdPT0dMRV9VTkFMSUdORURfU1RPUkUzMihfcCwgX3ZhbCkgKCpyZWlu
dGVycHJldF9jYXN0PHVpbnQzMiAqPihfcCkgPSAoX3ZhbCkpCi0jZGVmaW5lIEdPT0dMRV9VTkFM
SUdORURfU1RPUkU2NChfcCwgX3ZhbCkgKCpyZWludGVycHJldF9jYXN0PHVpbnQ2NCAqPihfcCkg
PSAoX3ZhbCkpCi0KLSNlbHNlCi1pbmxpbmUgdWludDE2IEdPT0dMRV9VTkFMSUdORURfTE9BRDE2
KGNvbnN0IHZvaWQgKnApIHsKLSAgdWludDE2IHQ7Ci0gIG1lbWNweSgmdCwgcCwgc2l6ZW9mIHQp
OwotICByZXR1cm4gdDsKLX0KLQotaW5saW5lIHVpbnQzMiBHT09HTEVfVU5BTElHTkVEX0xPQUQz
Mihjb25zdCB2b2lkICpwKSB7Ci0gIHVpbnQzMiB0OwotICBtZW1jcHkoJnQsIHAsIHNpemVvZiB0
KTsKLSAgcmV0dXJuIHQ7Ci19Ci0KLWlubGluZSB1aW50NjQgR09PR0xFX1VOQUxJR05FRF9MT0FE
NjQoY29uc3Qgdm9pZCAqcCkgewotICB1aW50NjQgdDsKLSAgbWVtY3B5KCZ0LCBwLCBzaXplb2Yg
dCk7Ci0gIHJldHVybiB0OwotfQotCi1pbmxpbmUgdm9pZCBHT09HTEVfVU5BTElHTkVEX1NUT1JF
MTYodm9pZCAqcCwgdWludDE2IHYpIHsKLSAgbWVtY3B5KHAsICZ2LCBzaXplb2Ygdik7Ci19Ci0K
LWlubGluZSB2b2lkIEdPT0dMRV9VTkFMSUdORURfU1RPUkUzMih2b2lkICpwLCB1aW50MzIgdikg
ewotICBtZW1jcHkocCwgJnYsIHNpemVvZiB2KTsKLX0KLQotaW5saW5lIHZvaWQgR09PR0xFX1VO
QUxJR05FRF9TVE9SRTY0KHZvaWQgKnAsIHVpbnQ2NCB2KSB7Ci0gIG1lbWNweShwLCAmdiwgc2l6
ZW9mIHYpOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotI2RlZmluZSBHT09H
TEVfVEhSRUFEX0xPQ0FMIF9fZGVjbHNwZWModGhyZWFkKQotI2Vsc2UKLSNkZWZpbmUgR09PR0xF
X1RIUkVBRF9MT0NBTCBfX3RocmVhZAotI2VuZGlmCi0KLS8vIFRoZSBmb2xsb3dpbmcgZ3VhcmFu
dGVlcyBkZWNsYXJhdGlvbiBvZiB0aGUgYnl0ZSBzd2FwIGZ1bmN0aW9ucywgYW5kCi0vLyBkZWZp
bmVzIF9fQllURV9PUkRFUiBmb3IgTVNWQwotI2lmZGVmIF9NU0NfVkVSCi0jZGVmaW5lIF9fQllU
RV9PUkRFUiBfX0xJVFRMRV9FTkRJQU4KLSNkZWZpbmUgYnN3YXBfMTYoeCkgX2J5dGVzd2FwX3Vz
aG9ydCh4KQotI2RlZmluZSBic3dhcF8zMih4KSBfYnl0ZXN3YXBfdWxvbmcoeCkKLSNkZWZpbmUg
YnN3YXBfNjQoeCkgX2J5dGVzd2FwX3VpbnQ2NCh4KQotCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLS8vIE1hYyBPUyBYIC8gRGFyd2luIGZlYXR1cmVzCi0jZGVmaW5lIGJzd2FwXzE2KHgpIE9T
U3dhcEludDE2KHgpCi0jZGVmaW5lIGJzd2FwXzMyKHgpIE9TU3dhcEludDMyKHgpCi0jZGVmaW5l
IGJzd2FwXzY0KHgpIE9TU3dhcEludDY0KHgpCi0KLSNlbGlmICFkZWZpbmVkKF9fR0xJQkNfXykg
JiYgIWRlZmluZWQoX19DWUdXSU5fXykKLQotc3RhdGljIGlubGluZSB1aW50MTYgYnN3YXBfMTYo
dWludDE2IHgpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNj4oKCh4ICYgMHhGRikgPDwg
OCkgfCAoKHggJiAweEZGMDApID4+IDgpKTsKLX0KLSNkZWZpbmUgYnN3YXBfMTYoeCkgYnN3YXBf
MTYoeCkKLXN0YXRpYyBpbmxpbmUgdWludDMyIGJzd2FwXzMyKHVpbnQzMiB4KSB7Ci0gIHJldHVy
biAoKCh4ICYgMHhGRikgPDwgMjQpIHwKLSAgICAgICAgICAoKHggJiAweEZGMDApIDw8IDgpIHwK
LSAgICAgICAgICAoKHggJiAweEZGMDAwMCkgPj4gOCkgfAotICAgICAgICAgICgoeCAmIDB4RkYw
MDAwMDApID4+IDI0KSk7Ci19Ci0jZGVmaW5lIGJzd2FwXzMyKHgpIGJzd2FwXzMyKHgpCi1zdGF0
aWMgaW5saW5lIHVpbnQ2NCBic3dhcF82NCh1aW50NjQgeCkgewotICByZXR1cm4gKCgoeCAmIEdP
T0dMRV9VTE9OR0xPTkcoMHhGRikpIDw8IDU2KSB8Ci0gICAgICAgICAgKCh4ICYgR09PR0xFX1VM
T05HTE9ORygweEZGMDApKSA8PCA0MCkgfAotICAgICAgICAgICgoeCAmIEdPT0dMRV9VTE9OR0xP
TkcoMHhGRjAwMDApKSA8PCAyNCkgfAotICAgICAgICAgICgoeCAmIEdPT0dMRV9VTE9OR0xPTkco
MHhGRjAwMDAwMCkpIDw8IDgpIHwKLSAgICAgICAgICAoKHggJiBHT09HTEVfVUxPTkdMT05HKDB4
RkYwMDAwMDAwMCkpID4+IDgpIHwKLSAgICAgICAgICAoKHggJiBHT09HTEVfVUxPTkdMT05HKDB4
RkYwMDAwMDAwMDAwKSkgPj4gMjQpIHwKLSAgICAgICAgICAoKHggJiBHT09HTEVfVUxPTkdMT05H
KDB4RkYwMDAwMDAwMDAwMDApKSA+PiA0MCkgfAotICAgICAgICAgICgoeCAmIEdPT0dMRV9VTE9O
R0xPTkcoMHhGRjAwMDAwMDAwMDAwMDAwKSkgPj4gNTYpKTsKLX0KLSNkZWZpbmUgYnN3YXBfNjQo
eCkgYnN3YXBfNjQoeCkKLQotI2VuZGlmCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGZyb20gZ29vZ2xl
My91dGlsL2VuZGlhbi9lbmRpYW4uaAotTElCUFJPVE9CVUZfRVhQT1JUIHVpbnQzMiBnaHRvbmwo
dWludDMyIHgpOwotCi1jbGFzcyBCaWdFbmRpYW4gewotIHB1YmxpYzoKLSNpZmRlZiBQUk9UT0JV
Rl9MSVRUTEVfRU5ESUFOCi0KLSAgc3RhdGljIHVpbnQxNiBGcm9tSG9zdDE2KHVpbnQxNiB4KSB7
IHJldHVybiBic3dhcF8xNih4KTsgfQotICBzdGF0aWMgdWludDE2IFRvSG9zdDE2KHVpbnQxNiB4
KSB7IHJldHVybiBic3dhcF8xNih4KTsgfQotCi0gIHN0YXRpYyB1aW50MzIgRnJvbUhvc3QzMih1
aW50MzIgeCkgeyByZXR1cm4gYnN3YXBfMzIoeCk7IH0KLSAgc3RhdGljIHVpbnQzMiBUb0hvc3Qz
Mih1aW50MzIgeCkgeyByZXR1cm4gYnN3YXBfMzIoeCk7IH0KLQotICBzdGF0aWMgdWludDY0IEZy
b21Ib3N0NjQodWludDY0IHgpIHsgcmV0dXJuIGJzd2FwXzY0KHgpOyB9Ci0gIHN0YXRpYyB1aW50
NjQgVG9Ib3N0NjQodWludDY0IHgpIHsgcmV0dXJuIGJzd2FwXzY0KHgpOyB9Ci0KLSAgc3RhdGlj
IGJvb2wgSXNMaXR0bGVFbmRpYW4oKSB7IHJldHVybiB0cnVlOyB9Ci0KLSNlbHNlCi0KLSAgc3Rh
dGljIHVpbnQxNiBGcm9tSG9zdDE2KHVpbnQxNiB4KSB7IHJldHVybiB4OyB9Ci0gIHN0YXRpYyB1
aW50MTYgVG9Ib3N0MTYodWludDE2IHgpIHsgcmV0dXJuIHg7IH0KLQotICBzdGF0aWMgdWludDMy
IEZyb21Ib3N0MzIodWludDMyIHgpIHsgcmV0dXJuIHg7IH0KLSAgc3RhdGljIHVpbnQzMiBUb0hv
c3QzMih1aW50MzIgeCkgeyByZXR1cm4geDsgfQotCi0gIHN0YXRpYyB1aW50NjQgRnJvbUhvc3Q2
NCh1aW50NjQgeCkgeyByZXR1cm4geDsgfQotICBzdGF0aWMgdWludDY0IFRvSG9zdDY0KHVpbnQ2
NCB4KSB7IHJldHVybiB4OyB9Ci0KLSAgc3RhdGljIGJvb2wgSXNMaXR0bGVFbmRpYW4oKSB7IHJl
dHVybiBmYWxzZTsgfQotCi0jZW5kaWYgLyogRU5ESUFOICovCi0KLSAgLy8gRnVuY3Rpb25zIHRv
IGRvIHVuYWxpZ25lZCBsb2FkcyBhbmQgc3RvcmVzIGluIGJpZy1lbmRpYW4gb3JkZXIuCi0gIHN0
YXRpYyB1aW50MTYgTG9hZDE2KGNvbnN0IHZvaWQgKnApIHsKLSAgICByZXR1cm4gVG9Ib3N0MTYo
R09PR0xFX1VOQUxJR05FRF9MT0FEMTYocCkpOwotICB9Ci0KLSAgc3RhdGljIHZvaWQgU3RvcmUx
Nih2b2lkICpwLCB1aW50MTYgdikgewotICAgIEdPT0dMRV9VTkFMSUdORURfU1RPUkUxNihwLCBG
cm9tSG9zdDE2KHYpKTsKLSAgfQotCi0gIHN0YXRpYyB1aW50MzIgTG9hZDMyKGNvbnN0IHZvaWQg
KnApIHsKLSAgICByZXR1cm4gVG9Ib3N0MzIoR09PR0xFX1VOQUxJR05FRF9MT0FEMzIocCkpOwot
ICB9Ci0KLSAgc3RhdGljIHZvaWQgU3RvcmUzMih2b2lkICpwLCB1aW50MzIgdikgewotICAgIEdP
T0dMRV9VTkFMSUdORURfU1RPUkUzMihwLCBGcm9tSG9zdDMyKHYpKTsKLSAgfQotCi0gIHN0YXRp
YyB1aW50NjQgTG9hZDY0KGNvbnN0IHZvaWQgKnApIHsKLSAgICByZXR1cm4gVG9Ib3N0NjQoR09P
R0xFX1VOQUxJR05FRF9MT0FENjQocCkpOwotICB9Ci0KLSAgc3RhdGljIHZvaWQgU3RvcmU2NCh2
b2lkICpwLCB1aW50NjQgdikgewotICAgIEdPT0dMRV9VTkFMSUdORURfU1RPUkU2NChwLCBGcm9t
SG9zdDY0KHYpKTsKLSAgfQotfTsKLQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfU1RVQlNfUE9S
VF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3Njb3BlZF9wdHIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zY29wZWRfcHRyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQ0MjNjMTE4YzQwYjU0YTMyODdmNzk4MjU0MjEwODA0OGM1NjUzMzMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL3Njb3BlZF9wdHIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJP
VE9CVUZfU1RVQlNfU0NPUEVEX1BUUl9IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfU1RVQlNf
U0NPUEVEX1BUUl9IXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3BvcnQuaD4K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0vLyBmcm9tIGdvb2dsZTMvYmFzZS9zY29wZWRfcHRyLmgKLQotbmFtZXNwYWNlIGludGVy
bmFsIHsKLQotLy8gIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGVzaWduZWQgdG8gbWF0Y2gg
dGhlIGFudGljaXBhdGVkIGZ1dHVyZSBUUjIKLS8vICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2Nv
cGVkX3B0ciBjbGFzcywgYW5kIGl0cyBjbG9zZWx5LXJlbGF0ZWQgYnJldGhyZW4sCi0vLyAgc2Nv
cGVkX2FycmF5LCBzY29wZWRfcHRyX21hbGxvYywgYW5kIG1ha2Vfc2NvcGVkX3B0ci4KLQotdGVt
cGxhdGUgPGNsYXNzIEM+IGNsYXNzIHNjb3BlZF9wdHI7Ci10ZW1wbGF0ZSA8Y2xhc3MgQz4gY2xh
c3Mgc2NvcGVkX2FycmF5OwotCi0vLyBBIHNjb3BlZF9wdHI8VD4gaXMgbGlrZSBhIFQqLCBleGNl
cHQgdGhhdCB0aGUgZGVzdHJ1Y3RvciBvZiBzY29wZWRfcHRyPFQ+Ci0vLyBhdXRvbWF0aWNhbGx5
IGRlbGV0ZXMgdGhlIHBvaW50ZXIgaXQgaG9sZHMgKGlmIGFueSkuCi0vLyBUaGF0IGlzLCBzY29w
ZWRfcHRyPFQ+IG93bnMgdGhlIFQgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLgotLy8gTGlrZSBh
IFQqLCBhIHNjb3BlZF9wdHI8VD4gbWF5IGhvbGQgZWl0aGVyIE5VTEwgb3IgYSBwb2ludGVyIHRv
IGEgVCBvYmplY3QuCi0vLwotLy8gVGhlIHNpemUgb2YgYSBzY29wZWRfcHRyIGlzIHNtYWxsOgot
Ly8gc2l6ZW9mKHNjb3BlZF9wdHI8Qz4pID09IHNpemVvZihDKikKLXRlbXBsYXRlIDxjbGFzcyBD
PgotY2xhc3Mgc2NvcGVkX3B0ciB7Ci0gcHVibGljOgotCi0gIC8vIFRoZSBlbGVtZW50IHR5cGUK
LSAgdHlwZWRlZiBDIGVsZW1lbnRfdHlwZTsKLQotICAvLyBDb25zdHJ1Y3Rvci4gIERlZmF1bHRz
IHRvIGluaXRpYWxpemluZyB3aXRoIE5VTEwuCi0gIC8vIFRoZXJlIGlzIG5vIHdheSB0byBjcmVh
dGUgYW4gdW5pbml0aWFsaXplZCBzY29wZWRfcHRyLgotICAvLyBUaGUgaW5wdXQgcGFyYW1ldGVy
IG11c3QgYmUgYWxsb2NhdGVkIHdpdGggbmV3LgotICBleHBsaWNpdCBzY29wZWRfcHRyKEMqIHAg
PSBOVUxMKSA6IHB0cl8ocCkgeyB9Ci0KLSAgLy8gRGVzdHJ1Y3Rvci4gIElmIHRoZXJlIGlzIGEg
QyBvYmplY3QsIGRlbGV0ZSBpdC4KLSAgLy8gV2UgZG9uJ3QgbmVlZCB0byB0ZXN0IHB0cl8gPT0g
TlVMTCBiZWNhdXNlIEMrKyBkb2VzIHRoYXQgZm9yIHVzLgotICB+c2NvcGVkX3B0cigpIHsKLSAg
ICBlbnVtIHsgdHlwZV9tdXN0X2JlX2NvbXBsZXRlID0gc2l6ZW9mKEMpIH07Ci0gICAgZGVsZXRl
IHB0cl87Ci0gIH0KLQotICAvLyBSZXNldC4gIERlbGV0ZXMgdGhlIGN1cnJlbnQgb3duZWQgb2Jq
ZWN0LCBpZiBhbnkuCi0gIC8vIFRoZW4gdGFrZXMgb3duZXJzaGlwIG9mIGEgbmV3IG9iamVjdCwg
aWYgZ2l2ZW4uCi0gIC8vIHRoaXMtPnJlc2V0KHRoaXMtPmdldCgpKSB3b3Jrcy4KLSAgdm9pZCBy
ZXNldChDKiBwID0gTlVMTCkgewotICAgIGlmIChwICE9IHB0cl8pIHsKLSAgICAgIGVudW0geyB0
eXBlX211c3RfYmVfY29tcGxldGUgPSBzaXplb2YoQykgfTsKLSAgICAgIGRlbGV0ZSBwdHJfOwot
ICAgICAgcHRyXyA9IHA7Ci0gICAgfQotICB9Ci0KLSAgLy8gQWNjZXNzb3JzIHRvIGdldCB0aGUg
b3duZWQgb2JqZWN0LgotICAvLyBvcGVyYXRvciogYW5kIG9wZXJhdG9yLT4gd2lsbCBhc3NlcnQo
KSBpZiB0aGVyZSBpcyBubyBjdXJyZW50IG9iamVjdC4KLSAgQyYgb3BlcmF0b3IqKCkgY29uc3Qg
ewotICAgIGFzc2VydChwdHJfICE9IE5VTEwpOwotICAgIHJldHVybiAqcHRyXzsKLSAgfQotICBD
KiBvcGVyYXRvci0+KCkgY29uc3QgIHsKLSAgICBhc3NlcnQocHRyXyAhPSBOVUxMKTsKLSAgICBy
ZXR1cm4gcHRyXzsKLSAgfQotICBDKiBnZXQoKSBjb25zdCB7IHJldHVybiBwdHJfOyB9Ci0KLSAg
Ly8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCi0gIC8vIFRoZXNlIHJldHVybiB3aGV0aGVyIHR3byBz
Y29wZWRfcHRyIHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCwgbm90IGp1c3QgdG8KLSAgLy8gdHdv
IGRpZmZlcmVudCBidXQgZXF1YWwgb2JqZWN0cy4KLSAgYm9vbCBvcGVyYXRvcj09KEMqIHApIGNv
bnN0IHsgcmV0dXJuIHB0cl8gPT0gcDsgfQotICBib29sIG9wZXJhdG9yIT0oQyogcCkgY29uc3Qg
eyByZXR1cm4gcHRyXyAhPSBwOyB9Ci0KLSAgLy8gU3dhcCB0d28gc2NvcGVkIHBvaW50ZXJzLgot
ICB2b2lkIHN3YXAoc2NvcGVkX3B0ciYgcDIpIHsKLSAgICBDKiB0bXAgPSBwdHJfOwotICAgIHB0
cl8gPSBwMi5wdHJfOwotICAgIHAyLnB0cl8gPSB0bXA7Ci0gIH0KLQotICAvLyBSZWxlYXNlIGEg
cG9pbnRlci4KLSAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgY3VycmVudCBwb2ludGVyIGhl
bGQgYnkgdGhpcyBvYmplY3QuCi0gIC8vIElmIHRoaXMgb2JqZWN0IGhvbGRzIGEgTlVMTCBwb2lu
dGVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIE5VTEwuCi0gIC8vIEFmdGVyIHRoaXMgb3BlcmF0aW9u
LCB0aGlzIG9iamVjdCB3aWxsIGhvbGQgYSBOVUxMIHBvaW50ZXIsCi0gIC8vIGFuZCB3aWxsIG5v
dCBvd24gdGhlIG9iamVjdCBhbnkgbW9yZS4KLSAgQyogcmVsZWFzZSgpIHsKLSAgICBDKiByZXRW
YWwgPSBwdHJfOwotICAgIHB0cl8gPSBOVUxMOwotICAgIHJldHVybiByZXRWYWw7Ci0gIH0KLQot
IHByaXZhdGU6Ci0gIEMqIHB0cl87Ci0KLSAgLy8gRm9yYmlkIGNvbXBhcmlzb24gb2Ygc2NvcGVk
X3B0ciB0eXBlcy4gIElmIEMyICE9IEMsIGl0IHRvdGFsbHkgZG9lc24ndAotICAvLyBtYWtlIHNl
bnNlLCBhbmQgaWYgQzIgPT0gQywgaXQgc3RpbGwgZG9lc24ndCBtYWtlIHNlbnNlIGJlY2F1c2Ug
eW91IHNob3VsZAotICAvLyBuZXZlciBoYXZlIHRoZSBzYW1lIG9iamVjdCBvd25lZCBieSB0d28g
ZGlmZmVyZW50IHNjb3BlZF9wdHJzLgotICB0ZW1wbGF0ZSA8Y2xhc3MgQzI+IGJvb2wgb3BlcmF0
b3I9PShzY29wZWRfcHRyPEMyPiBjb25zdCYgcDIpIGNvbnN0OwotICB0ZW1wbGF0ZSA8Y2xhc3Mg
QzI+IGJvb2wgb3BlcmF0b3IhPShzY29wZWRfcHRyPEMyPiBjb25zdCYgcDIpIGNvbnN0OwotCi0g
IC8vIERpc2FsbG93IGV2aWwgY29uc3RydWN0b3JzCi0gIHNjb3BlZF9wdHIoY29uc3Qgc2NvcGVk
X3B0ciYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBzY29wZWRfcHRyJik7Ci19OwotCi0vLyBz
Y29wZWRfYXJyYXk8Qz4gaXMgbGlrZSBzY29wZWRfcHRyPEM+LCBleGNlcHQgdGhhdCB0aGUgY2Fs
bGVyIG11c3QgYWxsb2NhdGUKLS8vIHdpdGggbmV3IFtdIGFuZCB0aGUgZGVzdHJ1Y3RvciBkZWxl
dGVzIG9iamVjdHMgd2l0aCBkZWxldGUgW10uCi0vLwotLy8gQXMgd2l0aCBzY29wZWRfcHRyPEM+
LCBhIHNjb3BlZF9hcnJheTxDPiBlaXRoZXIgcG9pbnRzIHRvIGFuIG9iamVjdAotLy8gb3IgaXMg
TlVMTC4gIEEgc2NvcGVkX2FycmF5PEM+IG93bnMgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0
by4KLS8vCi0vLyBTaXplOiBzaXplb2Yoc2NvcGVkX2FycmF5PEM+KSA9PSBzaXplb2YoQyopCi10
ZW1wbGF0ZSA8Y2xhc3MgQz4KLWNsYXNzIHNjb3BlZF9hcnJheSB7Ci0gcHVibGljOgotCi0gIC8v
IFRoZSBlbGVtZW50IHR5cGUKLSAgdHlwZWRlZiBDIGVsZW1lbnRfdHlwZTsKLQotICAvLyBDb25z
dHJ1Y3Rvci4gIERlZmF1bHRzIHRvIGluaXRpYWxpemluZyB3aXRoIE5VTEwuCi0gIC8vIFRoZXJl
IGlzIG5vIHdheSB0byBjcmVhdGUgYW4gdW5pbml0aWFsaXplZCBzY29wZWRfYXJyYXkuCi0gIC8v
IFRoZSBpbnB1dCBwYXJhbWV0ZXIgbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCBuZXcgW10uCi0gIGV4
cGxpY2l0IHNjb3BlZF9hcnJheShDKiBwID0gTlVMTCkgOiBhcnJheV8ocCkgeyB9Ci0KLSAgLy8g
RGVzdHJ1Y3Rvci4gIElmIHRoZXJlIGlzIGEgQyBvYmplY3QsIGRlbGV0ZSBpdC4KLSAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byB0ZXN0IHB0cl8gPT0gTlVMTCBiZWNhdXNlIEMrKyBkb2VzIHRoYXQgZm9y
IHVzLgotICB+c2NvcGVkX2FycmF5KCkgewotICAgIGVudW0geyB0eXBlX211c3RfYmVfY29tcGxl
dGUgPSBzaXplb2YoQykgfTsKLSAgICBkZWxldGVbXSBhcnJheV87Ci0gIH0KLQotICAvLyBSZXNl
dC4gIERlbGV0ZXMgdGhlIGN1cnJlbnQgb3duZWQgb2JqZWN0LCBpZiBhbnkuCi0gIC8vIFRoZW4g
dGFrZXMgb3duZXJzaGlwIG9mIGEgbmV3IG9iamVjdCwgaWYgZ2l2ZW4uCi0gIC8vIHRoaXMtPnJl
c2V0KHRoaXMtPmdldCgpKSB3b3Jrcy4KLSAgdm9pZCByZXNldChDKiBwID0gTlVMTCkgewotICAg
IGlmIChwICE9IGFycmF5XykgewotICAgICAgZW51bSB7IHR5cGVfbXVzdF9iZV9jb21wbGV0ZSA9
IHNpemVvZihDKSB9OwotICAgICAgZGVsZXRlW10gYXJyYXlfOwotICAgICAgYXJyYXlfID0gcDsK
LSAgICB9Ci0gIH0KLQotICAvLyBHZXQgb25lIGVsZW1lbnQgb2YgdGhlIGN1cnJlbnQgb2JqZWN0
LgotICAvLyBXaWxsIGFzc2VydCgpIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgb2JqZWN0LCBvciBp
bmRleCBpIGlzIG5lZ2F0aXZlLgotICBDJiBvcGVyYXRvcltdKHN0ZDo6cHRyZGlmZl90IGkpIGNv
bnN0IHsKLSAgICBhc3NlcnQoaSA+PSAwKTsKLSAgICBhc3NlcnQoYXJyYXlfICE9IE5VTEwpOwot
ICAgIHJldHVybiBhcnJheV9baV07Ci0gIH0KLQotICAvLyBHZXQgYSBwb2ludGVyIHRvIHRoZSB6
ZXJvdGggZWxlbWVudCBvZiB0aGUgY3VycmVudCBvYmplY3QuCi0gIC8vIElmIHRoZXJlIGlzIG5v
IGN1cnJlbnQgb2JqZWN0LCByZXR1cm4gTlVMTC4KLSAgQyogZ2V0KCkgY29uc3QgewotICAgIHJl
dHVybiBhcnJheV87Ci0gIH0KLQotICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KLSAgLy8gVGhl
c2UgcmV0dXJuIHdoZXRoZXIgdHdvIHNjb3BlZF9hcnJheSByZWZlciB0byB0aGUgc2FtZSBvYmpl
Y3QsIG5vdCBqdXN0IHRvCi0gIC8vIHR3byBkaWZmZXJlbnQgYnV0IGVxdWFsIG9iamVjdHMuCi0g
IGJvb2wgb3BlcmF0b3I9PShDKiBwKSBjb25zdCB7IHJldHVybiBhcnJheV8gPT0gcDsgfQotICBi
b29sIG9wZXJhdG9yIT0oQyogcCkgY29uc3QgeyByZXR1cm4gYXJyYXlfICE9IHA7IH0KLQotICAv
LyBTd2FwIHR3byBzY29wZWQgYXJyYXlzLgotICB2b2lkIHN3YXAoc2NvcGVkX2FycmF5JiBwMikg
ewotICAgIEMqIHRtcCA9IGFycmF5XzsKLSAgICBhcnJheV8gPSBwMi5hcnJheV87Ci0gICAgcDIu
YXJyYXlfID0gdG1wOwotICB9Ci0KLSAgLy8gUmVsZWFzZSBhbiBhcnJheS4KLSAgLy8gVGhlIHJl
dHVybiB2YWx1ZSBpcyB0aGUgY3VycmVudCBwb2ludGVyIGhlbGQgYnkgdGhpcyBvYmplY3QuCi0g
IC8vIElmIHRoaXMgb2JqZWN0IGhvbGRzIGEgTlVMTCBwb2ludGVyLCB0aGUgcmV0dXJuIHZhbHVl
IGlzIE5VTEwuCi0gIC8vIEFmdGVyIHRoaXMgb3BlcmF0aW9uLCB0aGlzIG9iamVjdCB3aWxsIGhv
bGQgYSBOVUxMIHBvaW50ZXIsCi0gIC8vIGFuZCB3aWxsIG5vdCBvd24gdGhlIG9iamVjdCBhbnkg
bW9yZS4KLSAgQyogcmVsZWFzZSgpIHsKLSAgICBDKiByZXRWYWwgPSBhcnJheV87Ci0gICAgYXJy
YXlfID0gTlVMTDsKLSAgICByZXR1cm4gcmV0VmFsOwotICB9Ci0KLSBwcml2YXRlOgotICBDKiBh
cnJheV87Ci0KLSAgLy8gRm9yYmlkIGNvbXBhcmlzb24gb2YgZGlmZmVyZW50IHNjb3BlZF9hcnJh
eSB0eXBlcy4KLSAgdGVtcGxhdGUgPGNsYXNzIEMyPiBib29sIG9wZXJhdG9yPT0oc2NvcGVkX2Fy
cmF5PEMyPiBjb25zdCYgcDIpIGNvbnN0OwotICB0ZW1wbGF0ZSA8Y2xhc3MgQzI+IGJvb2wgb3Bl
cmF0b3IhPShzY29wZWRfYXJyYXk8QzI+IGNvbnN0JiBwMikgY29uc3Q7Ci0KLSAgLy8gRGlzYWxs
b3cgZXZpbCBjb25zdHJ1Y3RvcnMKLSAgc2NvcGVkX2FycmF5KGNvbnN0IHNjb3BlZF9hcnJheSYp
OwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBzY29wZWRfYXJyYXkmKTsKLX07Ci0KLX0gIC8vIG5h
bWVzcGFjZSBpbnRlcm5hbAotCi0vLyBXZSBtYWRlIHRoZXNlIGludGVybmFsIHNvIHRoYXQgdGhl
eSB3b3VsZCBzaG93IHVwIGFzIHN1Y2ggaW4gdGhlIGRvY3MsCi0vLyBidXQgd2UgZG9uJ3Qgd2Fu
dCB0byBzdGljayAiaW50ZXJuYWw6OiIgaW4gZnJvbnQgb2YgdGhlbSBldmVyeXdoZXJlLgotdXNp
bmcgaW50ZXJuYWw6OnNjb3BlZF9wdHI7Ci11c2luZyBpbnRlcm5hbDo6c2NvcGVkX2FycmF5Owot
Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0j
ZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19TQ09QRURfUFRSX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3NoYXJlZF9wdHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI1
MGJmNGQzMzg1MGQwYTQ4NTA3ZDEwZDFiY2ZkMTgxY2MyZDg1My4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc2hh
cmVkX3B0ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBmcm9tIGdvb2dsZTMvdXRpbC9ndGwvc2hhcmVkX3B0
ci5oCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1NUVUJTX1NIQVJFRF9QVFJfSF9fCi0jZGVm
aW5lIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19TSEFSRURfUFRSX0hfXwotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wcy5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPiAg
Ly8gZm9yIHN3YXAKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLW5h
bWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5h
bCB7Ci0KLS8vIEFsaWFzIHRvIHN0ZDo6c2hhcmVkX3B0ciBmb3IgYW55IEMrKzExIHBsYXRmb3Jt
LAotLy8gYW5kIGZvciBhbnkgc3VwcG9ydGVkIE1TVkMgY29tcGlsZXIuCi0jaWYgIWRlZmluZWQo
VVRJTF9HVExfVVNFX1NURF9TSEFSRURfUFRSKSAmJiBcCi0gICAgKGRlZmluZWQoQ09NUElMRVJf
TVNWQykgfHwgZGVmaW5lZChMQU5HX0NYWDExKSkKLSNkZWZpbmUgVVRJTF9HVExfVVNFX1NURF9T
SEFSRURfUFRSIDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChVVElMX0dUTF9VU0VfU1REX1NIQVJF
RF9QVFIpICYmIFVUSUxfR1RMX1VTRV9TVERfU0hBUkVEX1BUUgotCi0vLyBUaGVzZSBhcmUgdHJh
bnNpdGlvbmFsLiAgVGhleSB3aWxsIGJlIGdvaW5nIGF3YXkgc29vbi4KLS8vIFBsZWFzZSBqdXN0
ICNpbmNsdWRlIDxtZW1vcnk+IGFuZCBqdXN0IHR5cGUgc3RkOjpzaGFyZWRfcHRyIHlvdXJzZWxm
LCBpbnN0ZWFkCi0vLyBvZiByZWx5aW5nIG9uIHRoaXMgZmlsZS4KLS8vCi0vLyBNaWdyYXRpb24g
ZG9jOiBodHRwOi8vZ28vc3RkLXNoYXJlZC1wdHItbHNjCi11c2luZyBzdGQ6OmVuYWJsZV9zaGFy
ZWRfZnJvbV90aGlzOwotdXNpbmcgc3RkOjpzaGFyZWRfcHRyOwotdXNpbmcgc3RkOjpzdGF0aWNf
cG9pbnRlcl9jYXN0OwotdXNpbmcgc3RkOjp3ZWFrX3B0cjsKLQotI2Vsc2UgIC8vIGJlbG93LCBV
VElMX0dUTF9VU0VfU1REX1NIQVJFRF9QVFIgbm90IHNldCBvciBzZXQgdG8gMC4KLQotLy8gRm9y
IGV2ZXJ5dGhpbmcgZWxzZSB0aGVyZSBpcyB0aGUgZ29vZ2xlMyBpbXBsZW1lbnRhdGlvbi4KLWlu
bGluZSBib29sIFJlZkNvdW50RGVjKHZvbGF0aWxlIEF0b21pYzMyICpwdHIpIHsKLSAgcmV0dXJu
IEJhcnJpZXJfQXRvbWljSW5jcmVtZW50KHB0ciwgLTEpICE9IDA7Ci19Ci0KLWlubGluZSB2b2lk
IFJlZkNvdW50SW5jKHZvbGF0aWxlIEF0b21pYzMyICpwdHIpIHsKLSAgTm9CYXJyaWVyX0F0b21p
Y0luY3JlbWVudChwdHIsIDEpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mgc2hh
cmVkX3B0cjsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyB3ZWFrX3B0cjsKLQotLy8gVGhp
cyBjbGFzcyBpcyBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgZm9yIHNoYXJlZF9w
dHIuIElmIHR3bwotLy8gc2hhcmVkX3B0cnMgcG9pbnQgdG8gdGhlIHNhbWUgb2JqZWN0LCB0aGV5
IGFsc28gc2hhcmUgYSBjb250cm9sIGJsb2NrLgotLy8gQW4gImVtcHR5IiBzaGFyZWRfcG9pbnRl
ciByZWZlcnMgdG8gTlVMTCBhbmQgYWxzbyBoYXMgYSBOVUxMIGNvbnRyb2wgYmxvY2suCi0vLyBJ
dCBjb250YWlucyBhbGwgb2YgdGhlIHN0YXRlIHRoYXQncyBuZWVkZWQgZm9yIHJlZmVyZW5jZSBj
b3VudGluZyBvciBhbnkKLS8vIG90aGVyIGtpbmQgb2YgcmVzb3VyY2UgbWFuYWdlbWVudC4gSW4g
dGhpcyBpbXBsZW1lbnRhdGlvbiB0aGUgY29udHJvbCBibG9jawotLy8gaGFwcGVucyB0byBjb25z
aXN0IG9mIHR3byBhdG9taWMgd29yZHMsIHRoZSByZWZlcmVuY2UgY291bnQgKHRoZSBudW1iZXIK
LS8vIG9mIHNoYXJlZF9wdHJzIHRoYXQgc2hhcmUgb3duZXJzaGlwIG9mIHRoZSBvYmplY3QpIGFu
ZCB0aGUgd2VhayBjb3VudAotLy8gKHRoZSBudW1iZXIgb2Ygd2Vha19wdHJzIHRoYXQgb2JzZXJ2
ZSB0aGUgb2JqZWN0LCBwbHVzIDEgaWYgdGhlCi0vLyByZWZjb3VudCBpcyBub256ZXJvKS4KLS8v
Ci0vLyBUaGUgInBsdXMgMSIgaXMgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBz
aGFyZWRfcHRyIGFuZAotLy8gd2Vha19wdHIgZGVzdHJ1Y3RvcnMuIFdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRoZSBjb250cm9sIGJsb2NrIGlzCi0vLyBvbmx5IGRlbGV0ZWQgb25jZSwgc28gd2UgbmVl
ZCB0byBtYWtlIHN1cmUgdGhhdCBhdCBtb3N0IG9uZQotLy8gb2JqZWN0IHNlZXMgdGhlIHdlYWsg
Y291bnQgZGVjcmVtZW50ZWQgZnJvbSAxIHRvIDAuCi1jbGFzcyBTaGFyZWRQdHJDb250cm9sQmxv
Y2sgewotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gZnJpZW5kIGNsYXNzIHNoYXJlZF9wdHI7Ci0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBmcmllbmQgY2xhc3Mgd2Vha19wdHI7Ci0gcHJpdmF0ZToK
LSAgU2hhcmVkUHRyQ29udHJvbEJsb2NrKCkgOiByZWZjb3VudF8oMSksIHdlYWtfY291bnRfKDEp
IHsgfQotICBBdG9taWMzMiByZWZjb3VudF87Ci0gIEF0b21pYzMyIHdlYWtfY291bnRfOwotfTsK
LQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbi4gVGhlIGNsYXNzIGlzIGRlZmluZWQgYmVsb3cuCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM7Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3Mgc2hhcmVkX3B0ciB7Ci0gIHRlbXBsYXRlIDx0eXBl
bmFtZSBVPiBmcmllbmQgY2xhc3Mgd2Vha19wdHI7Ci0gcHVibGljOgotICB0eXBlZGVmIFQgZWxl
bWVudF90eXBlOwotCi0gIHNoYXJlZF9wdHIoKSA6IHB0cl8oTlVMTCksIGNvbnRyb2xfYmxvY2tf
KE5VTEwpIHt9Ci0KLSAgZXhwbGljaXQgc2hhcmVkX3B0cihUKiBwdHIpCi0gICAgICA6IHB0cl8o
cHRyKSwKLSAgICAgICAgY29udHJvbF9ibG9ja18ocHRyICE9IE5VTEwgPyBuZXcgU2hhcmVkUHRy
Q29udHJvbEJsb2NrIDogTlVMTCkgewotICAgIC8vIElmIHAgaXMgbm9uLW51bGwgYW5kIFQgaW5o
ZXJpdHMgZnJvbSBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcywgd2UKLSAgICAvLyBzZXQgdXAgdGhl
IGRhdGEgdGhhdCBzaGFyZWRfZnJvbV90aGlzIG5lZWRzLgotICAgIE1heWJlU2V0dXBXZWFrVGhp
cyhwdHIpOwotICB9Ci0KLSAgLy8gQ29weSBjb25zdHJ1Y3RvcjogbWFrZXMgdGhpcyBvYmplY3Qg
YSBjb3B5IG9mIHB0ciwgYW5kIGluY3JlbWVudHMKLSAgLy8gdGhlIHJlZmVyZW5jZSBjb3VudC4K
LSAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gIHNoYXJlZF9wdHIoY29uc3Qgc2hhcmVkX3B0cjxV
PiYgcHRyKQotICAgICAgOiBwdHJfKE5VTEwpLAotICAgICAgICBjb250cm9sX2Jsb2NrXyhOVUxM
KSB7Ci0gICAgSW5pdGlhbGl6ZShwdHIpOwotICB9Ci0gIC8vIE5lZWQgbm9uLXRlbXBsYXRlZCB2
ZXJzaW9uIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyLWdlbmVyYXRlZCBkZWZhdWx0Ci0gIHNoYXJl
ZF9wdHIoY29uc3Qgc2hhcmVkX3B0cjxUPiYgcHRyKQotICAgICAgOiBwdHJfKE5VTEwpLAotICAg
ICAgICBjb250cm9sX2Jsb2NrXyhOVUxMKSB7Ci0gICAgSW5pdGlhbGl6ZShwdHIpOwotICB9Ci0K
LSAgLy8gQXNzaWdubWVudCBvcGVyYXRvci4gUmVwbGFjZXMgdGhlIGV4aXN0aW5nIHNoYXJlZF9w
dHIgd2l0aCBwdHIuCi0gIC8vIEluY3JlbWVudCBwdHIncyByZWZlcmVuY2UgY291bnQgYW5kIGRl
Y3JlbWVudCB0aGUgb25lIGJlaW5nIHJlcGxhY2VkLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
LSAgc2hhcmVkX3B0cjxUPiYgb3BlcmF0b3I9KGNvbnN0IHNoYXJlZF9wdHI8VT4mIHB0cikgewot
ICAgIGlmIChwdHJfICE9IHB0ci5wdHJfKSB7Ci0gICAgICBzaGFyZWRfcHRyPFQ+IG1lKHB0cik7
ICAgLy8gd2lsbCBob2xkIG91ciBwcmV2aW91cyBzdGF0ZSB0byBiZSBkZXN0cm95ZWQuCi0gICAg
ICBzd2FwKG1lKTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgLy8gTmVlZCBu
b24tdGVtcGxhdGVkIHZlcnNpb24gdG8gcHJldmVudCB0aGUgY29tcGlsZXItZ2VuZXJhdGVkIGRl
ZmF1bHQKLSAgc2hhcmVkX3B0cjxUPiYgb3BlcmF0b3I9KGNvbnN0IHNoYXJlZF9wdHI8VD4mIHB0
cikgewotICAgIGlmIChwdHJfICE9IHB0ci5wdHJfKSB7Ci0gICAgICBzaGFyZWRfcHRyPFQ+IG1l
KHB0cik7ICAgLy8gd2lsbCBob2xkIG91ciBwcmV2aW91cyBzdGF0ZSB0byBiZSBkZXN0cm95ZWQu
Ci0gICAgICBzd2FwKG1lKTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgLy8g
VE9ETyhhdXN0ZXJuKTogQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgY29uc3RydWN0b3IuIFRoZSBk
cmFmdCBDKysgc3RhbmRhcmQKLSAgLy8gKDIwLjguMTAuMi4xKSBpbmNsdWRlcyBpdC4gSG93ZXZl
ciwgaXQgc2F5cyB0aGF0IHRoaXMgY29uc3RydWN0b3IgdGhyb3dzCi0gIC8vIGEgYmFkX3dlYWtf
cHRyIGV4Y2VwdGlvbiB3aGVuIHB0ciBpcyBleHBpcmVkLiBJcyBpdCBiZXR0ZXIgdG8gcHJvdmlk
ZSB0aGlzCi0gIC8vIGNvbnN0cnVjdG9yIGFuZCBtYWtlIGl0IGRvIHNvbWV0aGluZyBlbHNlLCBs
aWtlIGZhaWwgd2l0aCBhIENIRUNLLCBvciB0bwotICAvLyBsZWF2ZSB0aGlzIGNvbnN0cnVjdG9y
IG91dCBlbnRpcmVseT8KLSAgLy8KLSAgLy8gdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gIC8vIHNo
YXJlZF9wdHIoY29uc3Qgd2Vha19wdHI8VT4mIHB0cik7Ci0KLSAgfnNoYXJlZF9wdHIoKSB7Ci0g
ICAgaWYgKHB0cl8gIT0gTlVMTCkgewotICAgICAgaWYgKCFSZWZDb3VudERlYygmY29udHJvbF9i
bG9ja18tPnJlZmNvdW50XykpIHsKLSAgICAgICAgZGVsZXRlIHB0cl87Ci0KLSAgICAgICAgLy8g
d2Vha19jb3VudF8gaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIHdlYWtfcHRycyB0aGF0IG9i
c2VydmUKLSAgICAgICAgLy8gcHRyXywgcGx1cyAxIGlmIHJlZmNvdW50XyBpcyBub256ZXJvLgot
ICAgICAgICBpZiAoIVJlZkNvdW50RGVjKCZjb250cm9sX2Jsb2NrXy0+d2Vha19jb3VudF8pKSB7
Ci0gICAgICAgICAgZGVsZXRlIGNvbnRyb2xfYmxvY2tfOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgLy8gUmVwbGFjZXMgdW5kZXJseWluZyByYXcgcG9pbnRlciB3aXRoIHRo
ZSBvbmUgcGFzc2VkIGluLiAgVGhlIHJlZmVyZW5jZQotICAvLyBjb3VudCBpcyBzZXQgdG8gb25l
IChvciB6ZXJvIGlmIHRoZSBwb2ludGVyIGlzIE5VTEwpIGZvciB0aGUgcG9pbnRlcgotICAvLyBi
ZWluZyBwYXNzZWQgaW4gYW5kIGRlY3JlbWVudGVkIGZvciB0aGUgb25lIGJlaW5nIHJlcGxhY2Vk
LgotICAvLwotICAvLyBJZiB5b3UgaGF2ZSBhIGNvbXBpbGF0aW9uIGVycm9yIHdpdGggdGhpcyBj
b2RlLCBtYWtlIHN1cmUgeW91IGFyZW4ndAotICAvLyBwYXNzaW5nIE5VTEwsIG51bGxwdHIsIG9y
IDAgdG8gdGhpcyBmdW5jdGlvbi4gIENhbGwgcmVzZXQgd2l0aG91dCBhbgotICAvLyBhcmd1bWVu
dCB0byByZXNldCB0byBhIG51bGwgcHRyLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWT4KLSAgdm9p
ZCByZXNldChZKiBwKSB7Ci0gICAgaWYgKHAgIT0gcHRyXykgewotICAgICAgc2hhcmVkX3B0cjxU
PiB0bXAocCk7Ci0gICAgICB0bXAuc3dhcCgqdGhpcyk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBy
ZXNldCgpIHsKLSAgICByZXNldChzdGF0aWNfY2FzdDxUKj4oTlVMTCkpOwotICB9Ci0KLSAgLy8g
RXhjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiB0aGlzIHdpdGggdGhlIGNvbnRlbnRzIG9mIHIuICBU
aGlzIGZ1bmN0aW9uCi0gIC8vIHN1cHBvcnRzIG1vcmUgZWZmaWNpZW50IHN3YXBwaW5nIHNpbmNl
IGl0IGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGEKLSAgLy8gdGVtcG9yYXJ5IHNoYXJlZF9wdHIg
b2JqZWN0LgotICB2b2lkIHN3YXAoc2hhcmVkX3B0cjxUPiYgcikgewotICAgIHVzaW5nIHN0ZDo6
c3dhcDsgIC8vIGh0dHA6Ly9nby91c2luZy1zdGQtc3dhcAotICAgIHN3YXAocHRyXywgci5wdHJf
KTsKLSAgICBzd2FwKGNvbnRyb2xfYmxvY2tfLCByLmNvbnRyb2xfYmxvY2tfKTsKLSAgfQotCi0g
IC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBnYWluaW5nIGFjY2VzcyB0
byB0aGUgdW5kZXJseWluZwotICAvLyBwb2ludGVyIHdoZW4gYSBzaGFyZWRfcHRyIHJlbWFpbnMg
aW4gc2NvcGUgc28gdGhlIHJlZmVyZW5jZS1jb3VudCBpcwotICAvLyBrbm93biB0byBiZSA+IDAg
KGUuZy4gZm9yIHBhcmFtZXRlciBwYXNzaW5nKS4KLSAgVCogZ2V0KCkgY29uc3QgewotICAgIHJl
dHVybiBwdHJfOwotICB9Ci0KLSAgVCYgb3BlcmF0b3IqKCkgY29uc3QgewotICAgIHJldHVybiAq
cHRyXzsKLSAgfQotCi0gIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIHB0cl87
Ci0gIH0KLQotICBsb25nIHVzZV9jb3VudCgpIGNvbnN0IHsKLSAgICByZXR1cm4gY29udHJvbF9i
bG9ja18gPyBjb250cm9sX2Jsb2NrXy0+cmVmY291bnRfIDogMTsKLSAgfQotCi0gIGJvb2wgdW5p
cXVlKCkgY29uc3QgewotICAgIHJldHVybiB1c2VfY291bnQoKSA9PSAxOwotICB9Ci0KLSBwcml2
YXRlOgotICAvLyBJZiByIGlzIG5vbi1lbXB0eSwgaW5pdGlhbGl6ZSAqdGhpcyB0byBzaGFyZSBv
d25lcnNoaXAgd2l0aCByLAotICAvLyBpbmNyZWFzaW5nIHRoZSB1bmRlcmx5aW5nIHJlZmVyZW5j
ZSBjb3VudC4KLSAgLy8gSWYgciBpcyBlbXB0eSwgKnRoaXMgcmVtYWlucyBlbXB0eS4KLSAgLy8g
UmVxdWlyZXM6IHRoaXMgaXMgZW1wdHksIG5hbWVseSB0aGlzLT5wdHJfID09IE5VTEwuCi0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPgotICB2b2lkIEluaXRpYWxpemUoY29uc3Qgc2hhcmVkX3B0cjxV
PiYgcikgewotICAgIC8vIFRoaXMgcGVyZm9ybXMgYSBzdGF0aWNfY2FzdCBvbiByLnB0cl8gdG8g
VSosIHdoaWNoIGlzIGEgbm8tb3Agc2luY2UgaXQKLSAgICAvLyBpcyBhbHJlYWR5IGEgVSouIFNv
IGluaXRpYWxpemF0aW9uIGhlcmUgcmVxdWlyZXMgdGhhdCByLnB0cl8gaXMKLSAgICAvLyBpbXBs
aWNpdGx5IGNvbnZlcnRpYmxlIHRvIFQqLgotICAgIEluaXRpYWxpemVXaXRoU3RhdGljQ2FzdDxV
PihyKTsKLSAgfQotCi0gIC8vIEluaXRpYWxpemVzICp0aGlzIGFzIGRlc2NyaWJlZCBpbiBJbml0
aWFsaXplLCBidXQgYWRkaXRpb25hbGx5IHBlcmZvcm1zIGEKLSAgLy8gc3RhdGljX2Nhc3QgZnJv
bSByLnB0cl8gKFYqKSB0byBVKi4KLSAgLy8gTk9URShnZmMpOiBXZSdkIG5lZWQgYSBtb3JlIGdl
bmVyYWwgZm9ybSB0byBzdXBwb3J0IGNvbnN0X3BvaW50ZXJfY2FzdCBhbmQKLSAgLy8gZHluYW1p
Y19wb2ludGVyX2Nhc3QsIGJ1dCB0aG9zZSBvcGVyYXRpb25zIGFyZSBzdWZmaWNpZW50bHkgZGlz
Y291cmFnZWQKLSAgLy8gdGhhdCBzdXBwb3J0aW5nIHN0YXRpY19wb2ludGVyX2Nhc3QgaXMgc3Vm
ZmljaWVudC4KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gIHZvaWQgSW5p
dGlhbGl6ZVdpdGhTdGF0aWNDYXN0KGNvbnN0IHNoYXJlZF9wdHI8Vj4mIHIpIHsKLSAgICBpZiAo
ci5jb250cm9sX2Jsb2NrXyAhPSBOVUxMKSB7Ci0gICAgICBSZWZDb3VudEluYygmci5jb250cm9s
X2Jsb2NrXy0+cmVmY291bnRfKTsKLQotICAgICAgcHRyXyA9IHN0YXRpY19jYXN0PFUqPihyLnB0
cl8pOwotICAgICAgY29udHJvbF9ibG9ja18gPSByLmNvbnRyb2xfYmxvY2tfOwotICAgIH0KLSAg
fQotCi0gIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMg
YSByYXcgcG9pbnRlci4gSWYgVAotICAvLyBkb2Vzbid0IGluaGVyaXQgZnJvbSBlbmFibGVfc2hh
cmVkX2Zyb21fdGhpczxUPiB0aGVuIHdlIGhhdmUgbm90aGluZyB0bwotICAvLyBkbywgc28gdGhp
cyBmdW5jdGlvbiBpcyB0cml2aWFsIGFuZCBpbmxpbmUuIFRoZSBvdGhlciB2ZXJzaW9uIGlzIGRl
Y2xhcmVkCi0gIC8vIG91dCBvZiBsaW5lLCBhZnRlciB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvZiBl
bmFibGVfc2hhcmVkX2Zyb21fdGhpcy4KLSAgdm9pZCBNYXliZVNldHVwV2Vha1RoaXMoZW5hYmxl
X3NoYXJlZF9mcm9tX3RoaXM8VD4qIHB0cik7Ci0gIHZvaWQgTWF5YmVTZXR1cFdlYWtUaGlzKC4u
LikgeyB9Ci0KLSAgVCogcHRyXzsKLSAgU2hhcmVkUHRyQ29udHJvbEJsb2NrKiBjb250cm9sX2Js
b2NrXzsKLQotI2lmbmRlZiBTV0lHCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICBmcmllbmQg
Y2xhc3Mgc2hhcmVkX3B0cjsKLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4K
LSAgZnJpZW5kIHNoYXJlZF9wdHI8VT4gc3RhdGljX3BvaW50ZXJfY2FzdChjb25zdCBzaGFyZWRf
cHRyPFY+JiByaHMpOwotI2VuZGlmCi19OwotCi0vLyBNYXRjaGVzIHRoZSBpbnRlcmZhY2Ugb2Yg
c3RkOjpzd2FwIGFzIGFuIGFpZCB0byBnZW5lcmljIHByb2dyYW1taW5nLgotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHZvaWQgc3dhcChzaGFyZWRfcHRyPFQ+JiByLCBzaGFyZWRfcHRyPFQ+JiBzKSB7
Ci0gIHIuc3dhcChzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1z
aGFyZWRfcHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3Qgc2hhcmVkX3B0cjxVPiYgcmhz
KSB7Ci0gIHNoYXJlZF9wdHI8VD4gbGhzOwotICBsaHMudGVtcGxhdGUgSW5pdGlhbGl6ZVdpdGhT
dGF0aWNDYXN0PFQ+KHJocyk7Ci0gIHJldHVybiBsaHM7Ci19Ci0KLS8vIFNlZSBjb21tZW50cyBh
dCB0aGUgdG9wIG9mIHRoZSBmaWxlIGZvciBhIGRlc2NyaXB0aW9uIG9mIHdoeSB0aGlzCi0vLyBj
bGFzcyBleGlzdHMsIGFuZCB0aGUgZHJhZnQgQysrIHN0YW5kYXJkIChhcyBvZiBKdWx5IDIwMDkg
dGhlCi0vLyBsYXRlc3QgZHJhZnQgaXMgTjI5MTQpIGZvciB0aGUgZGV0YWlsZWQgc3BlY2lmaWNh
dGlvbi4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3Mgd2Vha19wdHIgewotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4gZnJpZW5kIGNsYXNzIHdlYWtfcHRyOwotIHB1YmxpYzoKLSAgdHlwZWRl
ZiBUIGVsZW1lbnRfdHlwZTsKLQotICAvLyBDcmVhdGUgYW4gZW1wdHkgKGkuZS4gYWxyZWFkeSBl
eHBpcmVkKSB3ZWFrX3B0ci4KLSAgd2Vha19wdHIoKSA6IHB0cl8oTlVMTCksIGNvbnRyb2xfYmxv
Y2tfKE5VTEwpIHsgfQotCi0gIC8vIENyZWF0ZSBhIHdlYWtfcHRyIHRoYXQgb2JzZXJ2ZXMgdGhl
IHNhbWUgb2JqZWN0IHRoYXQgcHRyIHBvaW50cwotICAvLyB0by4gIE5vdGUgdGhhdCB0aGVyZSBp
cyBubyByYWNlIGNvbmRpdGlvbiBoZXJlOiB3ZSBrbm93IHRoYXQgdGhlCi0gIC8vIGNvbnRyb2wg
YmxvY2sgY2FuJ3QgZGlzYXBwZWFyIHdoaWxlIHdlJ3JlIGxvb2tpbmcgYXQgaXQgYmVjYXVzZQot
ICAvLyBpdCBpcyBvd25lZCBieSBhdCBsZWFzdCBvbmUgc2hhcmVkX3B0ciwgcHRyLgotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4gd2Vha19wdHIoY29uc3Qgc2hhcmVkX3B0cjxVPiYgcHRyKSB7Ci0g
ICAgQ29weUZyb20ocHRyLnB0cl8sIHB0ci5jb250cm9sX2Jsb2NrXyk7Ci0gIH0KLQotICAvLyBD
b3B5IGEgd2Vha19wdHIuIFRoZSBvYmplY3QgaXQgcG9pbnRzIHRvIG1pZ2h0IGRpc2FwcGVhciwg
YnV0IHdlCi0gIC8vIGRvbid0IGNhcmU6IHdlJ3JlIG9ubHkgd29ya2luZyB3aXRoIHRoZSBjb250
cm9sIGJsb2NrLCBhbmQgaXQgY2FuJ3QKLSAgLy8gZGlzYXBwZWFyIHdoaWxlIHdlJ3JlIGxvb2tp
bmcgYXQgYmVjYXVzZSBpdCdzIG93bmVkIGJ5IGF0IGxlYXN0IG9uZQotICAvLyB3ZWFrX3B0ciwg
cHRyLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gd2Vha19wdHIoY29uc3Qgd2Vha19wdHI8VT4m
IHB0cikgewotICAgIENvcHlGcm9tKHB0ci5wdHJfLCBwdHIuY29udHJvbF9ibG9ja18pOwotICB9
Ci0KLSAgLy8gTmVlZCBub24tdGVtcGxhdGVkIHZlcnNpb24gdG8gcHJldmVudCBkZWZhdWx0IGNv
cHkgY29uc3RydWN0b3IKLSAgd2Vha19wdHIoY29uc3Qgd2Vha19wdHImIHB0cikgewotICAgIENv
cHlGcm9tKHB0ci5wdHJfLCBwdHIuY29udHJvbF9ibG9ja18pOwotICB9Ci0KLSAgLy8gRGVzdHJv
eSB0aGUgd2Vha19wdHIuIElmIG5vIHNoYXJlZF9wdHIgb3ducyB0aGUgY29udHJvbCBibG9jaywg
YW5kIGlmCi0gIC8vIHdlIGFyZSB0aGUgbGFzdCB3ZWFrX3B0ciB0byBvd24gaXQsIHRoZW4gaXQg
Y2FuIGJlIGRlbGV0ZWQuIE5vdGUgdGhhdAotICAvLyB3ZWFrX2NvdW50XyBpcyBkZWZpbmVkIGFz
IHRoZSBudW1iZXIgb2Ygd2Vha19wdHJzIHNoYXJpbmcgdGhpcyBjb250cm9sCi0gIC8vIGJsb2Nr
LCBwbHVzIDEgaWYgdGhlcmUgYXJlIGFueSBzaGFyZWRfcHRycy4gV2UgdGhlcmVmb3JlIGtub3cg
dGhhdCBpdCdzCi0gIC8vIHNhZmUgdG8gZGVsZXRlIHRoZSBjb250cm9sIGJsb2NrIHdoZW4gd2Vh
a19jb3VudF8gcmVhY2hlcyAwLCB3aXRob3V0Ci0gIC8vIGhhdmluZyB0byBwZXJmb3JtIGFueSBh
ZGRpdGlvbmFsIHRlc3RzLgotICB+d2Vha19wdHIoKSB7Ci0gICAgaWYgKGNvbnRyb2xfYmxvY2tf
ICE9IE5VTEwgJiYKLSAgICAgICAgIVJlZkNvdW50RGVjKCZjb250cm9sX2Jsb2NrXy0+d2Vha19j
b3VudF8pKSB7Ci0gICAgICBkZWxldGUgY29udHJvbF9ibG9ja187Ci0gICAgfQotICB9Ci0KLSAg
d2Vha19wdHImIG9wZXJhdG9yPShjb25zdCB3ZWFrX3B0ciYgcHRyKSB7Ci0gICAgaWYgKCZwdHIg
IT0gdGhpcykgewotICAgICAgd2Vha19wdHIgdG1wKHB0cik7Ci0gICAgICB0bXAuc3dhcCgqdGhp
cyk7Ci0gICAgfQotICAgIHJldHVybiAqdGhpczsKLSAgfQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4gd2Vha19wdHImIG9wZXJhdG9yPShjb25zdCB3ZWFrX3B0cjxVPiYgcHRyKSB7Ci0gICAgd2Vh
a19wdHIgdG1wKHB0cik7Ci0gICAgdG1wLnN3YXAoKnRoaXMpOwotICAgIHJldHVybiAqdGhpczsK
LSAgfQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gd2Vha19wdHImIG9wZXJhdG9yPShjb25zdCBz
aGFyZWRfcHRyPFU+JiBwdHIpIHsKLSAgICB3ZWFrX3B0ciB0bXAocHRyKTsKLSAgICB0bXAuc3dh
cCgqdGhpcyk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgdm9pZCBzd2FwKHdlYWtfcHRy
JiBwdHIpIHsKLSAgICB1c2luZyBzdGQ6OnN3YXA7ICAvLyBodHRwOi8vZ28vdXNpbmctc3RkLXN3
YXAKLSAgICBzd2FwKHB0cl8sIHB0ci5wdHJfKTsKLSAgICBzd2FwKGNvbnRyb2xfYmxvY2tfLCBw
dHIuY29udHJvbF9ibG9ja18pOwotICB9Ci0KLSAgdm9pZCByZXNldCgpIHsKLSAgICB3ZWFrX3B0
ciB0bXA7Ci0gICAgdG1wLnN3YXAoKnRoaXMpOwotICB9Ci0KLSAgLy8gUmV0dXJuIHRoZSBudW1i
ZXIgb2Ygc2hhcmVkX3B0cnMgdGhhdCBvd24gdGhlIG9iamVjdCB3ZSBhcmUgb2JzZXJ2aW5nLgot
ICAvLyBOb3RlIHRoYXQgdGhpcyBudW1iZXIgY2FuIGJlIDAgKGlmIHRoaXMgcG9pbnRlciBoYXMg
ZXhwaXJlZCkuCi0gIGxvbmcgdXNlX2NvdW50KCkgY29uc3QgewotICAgIHJldHVybiBjb250cm9s
X2Jsb2NrXyAhPSBOVUxMID8gY29udHJvbF9ibG9ja18tPnJlZmNvdW50XyA6IDA7Ci0gIH0KLQot
ICBib29sIGV4cGlyZWQoKSBjb25zdCB7IHJldHVybiB1c2VfY291bnQoKSA9PSAwOyB9Ci0KLSAg
Ly8gUmV0dXJuIGEgc2hhcmVkX3B0ciB0aGF0IG93bnMgdGhlIG9iamVjdCB3ZSBhcmUgb2JzZXJ2
aW5nLiBJZiB3ZQotICAvLyBoYXZlIGV4cGlyZWQsIHRoZSBzaGFyZWRfcHRyIHdpbGwgYmUgZW1w
dHkuIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bAotICAvLyBhYm91dCBjb25jdXJyZW5jeSwgdGhvdWdo
LCBzaW5jZSBzb21lIG90aGVyIHRocmVhZCBtaWdodCBiZQotICAvLyBkZXN0cm95aW5nIHRoZSBs
YXN0IG93bmluZyBzaGFyZWRfcHRyIHdoaWxlIHdlJ3JlIGluIHRoaXMKLSAgLy8gZnVuY3Rpb24u
ICBXZSB3YW50IHRvIGluY3JlbWVudCB0aGUgcmVmY291bnQgb25seSBpZiBpdCdzIG5vbnplcm8K
LSAgLy8gYW5kIGdldCB0aGUgbmV3IHZhbHVlLCBhbmQgd2Ugd2FudCB0aGF0IHdob2xlIG9wZXJh
dGlvbiB0byBiZQotICAvLyBhdG9taWMuCi0gIHNoYXJlZF9wdHI8VD4gbG9jaygpIGNvbnN0IHsK
LSAgICBzaGFyZWRfcHRyPFQ+IHJlc3VsdDsKLSAgICBpZiAoY29udHJvbF9ibG9ja18gIT0gTlVM
TCkgewotICAgICAgQXRvbWljMzIgb2xkX3JlZmNvdW50OwotICAgICAgZG8gewotICAgICAgICBv
bGRfcmVmY291bnQgPSBjb250cm9sX2Jsb2NrXy0+cmVmY291bnRfOwotICAgICAgICBpZiAob2xk
X3JlZmNvdW50ID09IDApCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9IHdoaWxlIChvbGRfcmVm
Y291bnQgIT0KLSAgICAgICAgICAgICAgIE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCgKLSAgICAg
ICAgICAgICAgICAgICAmY29udHJvbF9ibG9ja18tPnJlZmNvdW50Xywgb2xkX3JlZmNvdW50LAot
ICAgICAgICAgICAgICAgICAgIG9sZF9yZWZjb3VudCArIDEpKTsKLSAgICAgIGlmIChvbGRfcmVm
Y291bnQgPiAwKSB7Ci0gICAgICAgIHJlc3VsdC5wdHJfID0gcHRyXzsKLSAgICAgICAgcmVzdWx0
LmNvbnRyb2xfYmxvY2tfID0gY29udHJvbF9ibG9ja187Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gcHJpdmF0ZToKLSAgdm9pZCBDb3B5RnJvbShUKiBwdHIs
IFNoYXJlZFB0ckNvbnRyb2xCbG9jayogY29udHJvbF9ibG9jaykgewotICAgIHB0cl8gPSBwdHI7
Ci0gICAgY29udHJvbF9ibG9ja18gPSBjb250cm9sX2Jsb2NrOwotICAgIGlmIChjb250cm9sX2Js
b2NrXyAhPSBOVUxMKQotICAgICAgUmVmQ291bnRJbmMoJmNvbnRyb2xfYmxvY2tfLT53ZWFrX2Nv
dW50Xyk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGVsZW1lbnRfdHlwZSogcHRyXzsKLSAgU2hhcmVk
UHRyQ29udHJvbEJsb2NrKiBjb250cm9sX2Jsb2NrXzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiB2b2lkIHN3YXAod2Vha19wdHI8VD4mIHIsIHdlYWtfcHRyPFQ+JiBzKSB7Ci0gIHIuc3dh
cChzKTsKLX0KLQotLy8gU2VlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUgZm9yIGEg
ZGVzY3JpcHRpb24gb2Ygd2h5IHRoaXMgY2xhc3MKLS8vIGV4aXN0cywgYW5kIHNlY3Rpb24gMjAu
OC4xMC41IG9mIHRoZSBkcmFmdCBDKysgc3RhbmRhcmQgKGFzIG9mIEp1bHkgMjAwOQotLy8gdGhl
IGxhdGVzdCBkcmFmdCBpcyBOMjkxNCkgZm9yIHRoZSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uLgot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcyB7Ci0g
IGZyaWVuZCBjbGFzcyBzaGFyZWRfcHRyPFQ+OwotIHB1YmxpYzoKLSAgLy8gUHJlY29uZGl0aW9u
OiB0aGVyZSBtdXN0IGJlIGEgc2hhcmVkX3B0ciB0aGF0IG93bnMgKnRoaXMgYW5kIHRoYXQgd2Fz
Ci0gIC8vIGNyZWF0ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gYSByYXcgcG9pbnRl
ciBvZiB0eXBlIFQqLiAoVGhlCi0gIC8vIGxhdHRlciBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaXMg
dGVjaG5pY2FsIGJ1dCBub3QgcXVpdGUgcmVkdW5kYW50OyBpdAotICAvLyBydWxlcyBvdXQgc29t
ZSBjb21wbGljYXRlZCB1c2VzIGludm9sdmluZyBpbmhlcml0YW5jZSBoaWVyYXJjaGllcy4pCi0g
IHNoYXJlZF9wdHI8VD4gc2hhcmVkX2Zyb21fdGhpcygpIHsKLSAgICAvLyBCZWhhdmlvciBpcyB1
bmRlZmluZWQgaWYgdGhlIHByZWNvbmRpdGlvbiBpc24ndCBzYXRpc2ZpZWQ7IHdlIGNob29zZQot
ICAgIC8vIHRvIGRpZSB3aXRoIGEgQ0hFQ0sgZmFpbHVyZS4KLSAgICBDSEVDSyghd2Vha190aGlz
Xy5leHBpcmVkKCkpIDw8ICJObyBzaGFyZWRfcHRyIG93bnMgdGhpcyBvYmplY3QiOwotICAgIHJl
dHVybiB3ZWFrX3RoaXNfLmxvY2soKTsKLSAgfQotICBzaGFyZWRfcHRyPGNvbnN0IFQ+IHNoYXJl
ZF9mcm9tX3RoaXMoKSBjb25zdCB7Ci0gICAgQ0hFQ0soIXdlYWtfdGhpc18uZXhwaXJlZCgpKSA8
PCAiTm8gc2hhcmVkX3B0ciBvd25zIHRoaXMgb2JqZWN0IjsKLSAgICByZXR1cm4gd2Vha190aGlz
Xy5sb2NrKCk7Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMo
KSB7IH0KLSAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMoY29uc3QgZW5hYmxlX3NoYXJlZF9mcm9t
X3RoaXMmIG90aGVyKSB7IH0KLSAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmIG9wZXJhdG9yPShj
b25zdCBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcyYgb3RoZXIpIHsKLSAgICByZXR1cm4gKnRoaXM7
Ci0gIH0KLSAgfmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzKCkgeyB9Ci0KLSBwcml2YXRlOgotICB3
ZWFrX3B0cjxUPiB3ZWFrX3RoaXNfOwotfTsKLQotLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlv
biBjYWxsZWQgYnkgc2hhcmVkX3B0cidzIGNvbnN0cnVjdG9yIGZyb20gYSByYXcKLS8vIHBvaW50
ZXIuIElmIFQgaW5oZXJpdHMgZnJvbSBlbmFibGVfc2hhcmVkX2Zyb21fdGhpczxUPiwgaXQgc2V0
cyB1cAotLy8gd2Vha190aGlzXyBzbyB0aGF0IHNoYXJlZF9mcm9tX3RoaXMgd29ya3MgY29ycmVj
dGx5LiBJZiBUIGRvZXMgbm90IGluaGVyaXQKLS8vIGZyb20gd2Vha190aGlzIHdlIGdldCBhIGRp
ZmZlcmVudCBvdmVybG9hZCwgZGVmaW5lZCBpbmxpbmUsIHdoaWNoIGRvZXMKLS8vIG5vdGhpbmcu
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBzaGFyZWRfcHRyPFQ+OjpNYXliZVNldHVwV2Vh
a1RoaXMoZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8VD4qIHB0cikgewotICBpZiAocHRyKSB7Ci0g
ICAgQ0hFQ0socHRyLT53ZWFrX3RoaXNfLmV4cGlyZWQoKSkgPDwgIk9iamVjdCBhbHJlYWR5IG93
bmVkIGJ5IGEgc2hhcmVkX3B0ciI7Ci0gICAgcHRyLT53ZWFrX3RoaXNfID0gKnRoaXM7Ci0gIH0K
LX0KLQotI2VuZGlmICAvLyBVVElMX0dUTF9VU0VfU1REX1NIQVJFRF9QVFIKLQotfSAgLy8gaW50
ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQot
Ci0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19TSEFSRURfUFRSX0hfXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NpbmdsZXRvbi5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL3NpbmdsZXRvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
MzAxZjU0OWIxZDZmOWVlYjAzODQ3MmViMzI2MTkwZDRiZTBlMzBkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9z
aW5nbGV0b24uaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MTQgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfU1RVQlNfU0lOR0xF
VE9OX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfU1RVQlNfU0lOR0xFVE9OX0hfXwotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wcy5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvb25jZS5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIFNpbmds
ZXRvbiB7Ci0gcHVibGljOgotICBzdGF0aWMgVCogZ2V0KCkgewotICAgIEdvb2dsZU9uY2VJbml0
KCZvbmNlXywgJlNpbmdsZXRvbjxUPjo6SW5pdCk7Ci0gICAgcmV0dXJuIGluc3RhbmNlXzsKLSAg
fQotICBzdGF0aWMgdm9pZCBTaHV0RG93bigpIHsKLSAgICBkZWxldGUgaW5zdGFuY2VfOwotICAg
IGluc3RhbmNlXyA9IE5VTEw7Ci0gIH0KLSBwcml2YXRlOgotICBzdGF0aWMgdm9pZCBJbml0KCkg
ewotICAgIGluc3RhbmNlXyA9IG5ldyBUKCk7Ci0gIH0KLSAgc3RhdGljIFByb3RvYnVmT25jZVR5
cGUgb25jZV87Ci0gIHN0YXRpYyBUKiBpbnN0YW5jZV87Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotUHJvdG9idWZPbmNlVHlwZSBTaW5nbGV0b248VD46Om9uY2VfOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotVCogU2luZ2xldG9uPFQ+OjppbnN0YW5jZV8gPSBOVUxMOwotfSAgLy8gbmFt
ZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFj
ZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfU1RVQlNfU0lOR0xFVE9OX0hf
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1cy5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGY1ZTNiZGNlYjMzNWI1M2Q3ZWI4NmQ0Yjg2NDJiNzdhNGY0ZTk4MDMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0YXR1cy5jYworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
c3RhdHVzLmg+Ci0KLSNpbmNsdWRlIDxvc3RyZWFtPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewot
bmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1dGlsIHsKLW5hbWVzcGFjZSBlcnJvciB7
Ci1pbmxpbmUgc3RyaW5nIENvZGVFbnVtVG9TdHJpbmcoZXJyb3I6OkNvZGUgY29kZSkgewotICBz
d2l0Y2ggKGNvZGUpIHsKLSAgICBjYXNlIE9LOgotICAgICAgcmV0dXJuICJPSyI7Ci0gICAgY2Fz
ZSBDQU5DRUxMRUQ6Ci0gICAgICByZXR1cm4gIkNBTkNFTExFRCI7Ci0gICAgY2FzZSBVTktOT1dO
OgotICAgICAgcmV0dXJuICJVTktOT1dOIjsKLSAgICBjYXNlIElOVkFMSURfQVJHVU1FTlQ6Ci0g
ICAgICByZXR1cm4gIklOVkFMSURfQVJHVU1FTlQiOwotICAgIGNhc2UgREVBRExJTkVfRVhDRUVE
RUQ6Ci0gICAgICByZXR1cm4gIkRFQURMSU5FX0VYQ0VFREVEIjsKLSAgICBjYXNlIE5PVF9GT1VO
RDoKLSAgICAgIHJldHVybiAiTk9UX0ZPVU5EIjsKLSAgICBjYXNlIEFMUkVBRFlfRVhJU1RTOgot
ICAgICAgcmV0dXJuICJBTFJFQURZX0VYSVNUUyI7Ci0gICAgY2FzZSBQRVJNSVNTSU9OX0RFTklF
RDoKLSAgICAgIHJldHVybiAiUEVSTUlTU0lPTl9ERU5JRUQiOwotICAgIGNhc2UgVU5BVVRIRU5U
SUNBVEVEOgotICAgICAgcmV0dXJuICJVTkFVVEhFTlRJQ0FURUQiOwotICAgIGNhc2UgUkVTT1VS
Q0VfRVhIQVVTVEVEOgotICAgICAgcmV0dXJuICJSRVNPVVJDRV9FWEhBVVNURUQiOwotICAgIGNh
c2UgRkFJTEVEX1BSRUNPTkRJVElPTjoKLSAgICAgIHJldHVybiAiRkFJTEVEX1BSRUNPTkRJVElP
TiI7Ci0gICAgY2FzZSBBQk9SVEVEOgotICAgICAgcmV0dXJuICJBQk9SVEVEIjsKLSAgICBjYXNl
IE9VVF9PRl9SQU5HRToKLSAgICAgIHJldHVybiAiT1VUX09GX1JBTkdFIjsKLSAgICBjYXNlIFVO
SU1QTEVNRU5URUQ6Ci0gICAgICByZXR1cm4gIlVOSU1QTEVNRU5URUQiOwotICAgIGNhc2UgSU5U
RVJOQUw6Ci0gICAgICByZXR1cm4gIklOVEVSTkFMIjsKLSAgICBjYXNlIFVOQVZBSUxBQkxFOgot
ICAgICAgcmV0dXJuICJVTkFWQUlMQUJMRSI7Ci0gICAgY2FzZSBEQVRBX0xPU1M6Ci0gICAgICBy
ZXR1cm4gIkRBVEFfTE9TUyI7Ci0gIH0KLQotICAvLyBObyBkZWZhdWx0IGNsYXVzZSwgY2xhbmcg
d2lsbCBhYm9ydCBpZiBhIGNvZGUgaXMgbWlzc2luZyBmcm9tCi0gIC8vIGFib3ZlIHN3aXRjaC4K
LSAgcmV0dXJuICJVTktOT1dOIjsKLX0KLX0gIC8vIG5hbWVzcGFjZSBlcnJvci4KLQotY29uc3Qg
U3RhdHVzUG9kIFN0YXR1czo6T0sgPSB7IGVycm9yOjpPSyB9OwotY29uc3QgU3RhdHVzUG9kIFN0
YXR1czo6Q0FOQ0VMTEVEID0geyBlcnJvcjo6Q0FOQ0VMTEVEIH07Ci1jb25zdCBTdGF0dXNQb2Qg
U3RhdHVzOjpVTktOT1dOID0geyBlcnJvcjo6VU5LTk9XTiB9OwotCi1TdGF0dXM6OlN0YXR1cygp
IDogZXJyb3JfY29kZV8oZXJyb3I6Ok9LKSB7Ci19Ci0KLVN0YXR1czo6U3RhdHVzKGVycm9yOjpD
b2RlIGVycm9yX2NvZGUsIFN0cmluZ1BpZWNlIGVycm9yX21lc3NhZ2UpCi0gICAgOiBlcnJvcl9j
b2RlXyhlcnJvcl9jb2RlKSB7Ci0gIGlmIChlcnJvcl9jb2RlICE9IGVycm9yOjpPSykgewotICAg
IGVycm9yX21lc3NhZ2VfID0gZXJyb3JfbWVzc2FnZS5Ub1N0cmluZygpOwotICB9Ci19Ci0KLVN0
YXR1czo6U3RhdHVzKGNvbnN0IFN0YXR1cyYgb3RoZXIpCi0gICAgOiBlcnJvcl9jb2RlXyhvdGhl
ci5lcnJvcl9jb2RlXyksIGVycm9yX21lc3NhZ2VfKG90aGVyLmVycm9yX21lc3NhZ2VfKSB7Ci19
Ci0KLVN0YXR1czo6U3RhdHVzKGNvbnN0IFN0YXR1c1BvZCYgc3RhdHVzX3BvZCkgOiBlcnJvcl9j
b2RlXyhzdGF0dXNfcG9kLmNvZGUpIHsKLX0KLQotU3RhdHVzJiBTdGF0dXM6Om9wZXJhdG9yPShj
b25zdCBTdGF0dXMmIG90aGVyKSB7Ci0gIGVycm9yX2NvZGVfID0gb3RoZXIuZXJyb3JfY29kZV87
Ci0gIGVycm9yX21lc3NhZ2VfID0gb3RoZXIuZXJyb3JfbWVzc2FnZV87Ci0gIHJldHVybiAqdGhp
czsKLX0KLQotYm9vbCBTdGF0dXM6Om9wZXJhdG9yPT0oY29uc3QgU3RhdHVzJiB4KSBjb25zdCB7
Ci0gIHJldHVybiBlcnJvcl9jb2RlXyA9PSB4LmVycm9yX2NvZGVfICYmCi0gICAgICBlcnJvcl9t
ZXNzYWdlXyA9PSB4LmVycm9yX21lc3NhZ2VfOwotfQotCi1zdHJpbmcgU3RhdHVzOjpUb1N0cmlu
ZygpIGNvbnN0IHsKLSAgaWYgKGVycm9yX2NvZGVfID09IGVycm9yOjpPSykgewotICAgIHJldHVy
biAiT0siOwotICB9IGVsc2UgewotICAgIGlmIChlcnJvcl9tZXNzYWdlXy5lbXB0eSgpKSB7Ci0g
ICAgICByZXR1cm4gZXJyb3I6OkNvZGVFbnVtVG9TdHJpbmcoZXJyb3JfY29kZV8pOwotICAgIH0g
ZWxzZSB7Ci0gICAgICByZXR1cm4gZXJyb3I6OkNvZGVFbnVtVG9TdHJpbmcoZXJyb3JfY29kZV8p
ICsgIjoiICsKLSAgICAgICAgICBlcnJvcl9tZXNzYWdlXzsKLSAgICB9Ci0gIH0KLX0KLQotb3N0
cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29uc3QgU3RhdHVzJiB4KSB7Ci0gIG9zIDw8
IHguVG9TdHJpbmcoKTsKLSAgcmV0dXJuIG9zOwotfQotCi19ICAvLyBuYW1lc3BhY2UgdXRpbAot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvc3R1YnMvc3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMjdkNmEw
ZjRhMWU4MzI5NDAxMDdlNjNkNDM1MDU4Yzk3OTg4NGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1cy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfU1RVQlNfU1RBVFVTX0hfCi0jZGVm
aW5lIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19TVEFUVVNfSF8KLQotI2luY2x1ZGUgPGlvc2Z3ZD4K
LSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29t
bW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3BpZWNlLmg+Ci0K
LW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1dGls
IHsKLW5hbWVzcGFjZSBlcnJvciB7Ci0vLyBUaGVzZSB2YWx1ZXMgbXVzdCBtYXRjaCBlcnJvciBj
b2RlcyBkZWZpbmVkIGluIGdvb2dsZS9ycGMvY29kZS5wcm90by4KLWVudW0gQ29kZSB7Ci0gIE9L
ID0gMCwKLSAgQ0FOQ0VMTEVEID0gMSwKLSAgVU5LTk9XTiA9IDIsCi0gIElOVkFMSURfQVJHVU1F
TlQgPSAzLAotICBERUFETElORV9FWENFRURFRCA9IDQsCi0gIE5PVF9GT1VORCA9IDUsCi0gIEFM
UkVBRFlfRVhJU1RTID0gNiwKLSAgUEVSTUlTU0lPTl9ERU5JRUQgPSA3LAotICBVTkFVVEhFTlRJ
Q0FURUQgPSAxNiwKLSAgUkVTT1VSQ0VfRVhIQVVTVEVEID0gOCwKLSAgRkFJTEVEX1BSRUNPTkRJ
VElPTiA9IDksCi0gIEFCT1JURUQgPSAxMCwKLSAgT1VUX09GX1JBTkdFID0gMTEsCi0gIFVOSU1Q
TEVNRU5URUQgPSAxMiwKLSAgSU5URVJOQUwgPSAxMywKLSAgVU5BVkFJTEFCTEUgPSAxNCwKLSAg
REFUQV9MT1NTID0gMTUsCi19OwotfSAgLy8gbmFtZXNwYWNlIGVycm9yCi0KLXN0cnVjdCBTdGF0
dXNQb2QgewotICBlcnJvcjo6Q29kZSBjb2RlOwotfTsKLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQ
T1JUIFN0YXR1cyB7Ci0gcHVibGljOgotICAvLyBDcmVhdGVzIGEgInN1Y2Nlc3NmdWwiIHN0YXR1
cy4KLSAgU3RhdHVzKCk7Ci0KLSAgLy8gQ3JlYXRlIGEgc3RhdHVzIGluIHRoZSBjYW5vbmljYWwg
ZXJyb3Igc3BhY2Ugd2l0aCB0aGUgc3BlY2lmaWVkCi0gIC8vIGNvZGUsIGFuZCBlcnJvciBtZXNz
YWdlLiAgSWYgImNvZGUgPT0gMCIsIGVycm9yX21lc3NhZ2UgaXMKLSAgLy8gaWdub3JlZCBhbmQg
YSBTdGF0dXMgb2JqZWN0IGlkZW50aWNhbCB0byBTdGF0dXM6Ok9LIGlzCi0gIC8vIGNvbnN0cnVj
dGVkLgotICBTdGF0dXMoZXJyb3I6OkNvZGUgZXJyb3JfY29kZSwgU3RyaW5nUGllY2UgZXJyb3Jf
bWVzc2FnZSk7Ci0gIFN0YXR1cyhjb25zdCBTdGF0dXMmKTsKLSAgU3RhdHVzKGNvbnN0IFN0YXR1
c1BvZCYpOwotICBTdGF0dXMmIG9wZXJhdG9yPShjb25zdCBTdGF0dXMmIHgpOwotICB+U3RhdHVz
KCkge30KLQotICAvLyBTb21lIHByZS1kZWZpbmVkIFN0YXR1cyBvYmplY3RzCi0gIHN0YXRpYyBj
b25zdCBTdGF0dXNQb2QgT0s7Ci0gIHN0YXRpYyBjb25zdCBTdGF0dXNQb2QgQ0FOQ0VMTEVEOwot
ICBzdGF0aWMgY29uc3QgU3RhdHVzUG9kIFVOS05PV047Ci0KLSAgLy8gQWNjZXNzb3IKLSAgYm9v
bCBvaygpIGNvbnN0IHsKLSAgICByZXR1cm4gZXJyb3JfY29kZV8gPT0gZXJyb3I6Ok9LOwotICB9
Ci0gIGludCBlcnJvcl9jb2RlKCkgY29uc3QgewotICAgIHJldHVybiBlcnJvcl9jb2RlXzsKLSAg
fQotICBTdHJpbmdQaWVjZSBlcnJvcl9tZXNzYWdlKCkgY29uc3QgewotICAgIHJldHVybiBlcnJv
cl9tZXNzYWdlXzsKLSAgfQotCi0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdGF0dXMmIHgpIGNv
bnN0OwotICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RhdHVzJiB4KSBjb25zdCB7Ci0gICAgcmV0
dXJuICFvcGVyYXRvcj09KHgpOwotICB9Ci0KLSAgLy8gUmV0dXJuIGEgY29tYmluYXRpb24gb2Yg
dGhlIGVycm9yIGNvZGUgbmFtZSBhbmQgbWVzc2FnZS4KLSAgc3RyaW5nIFRvU3RyaW5nKCkgY29u
c3Q7Ci0KLSBwcml2YXRlOgotICBlcnJvcjo6Q29kZSBlcnJvcl9jb2RlXzsKLSAgc3RyaW5nIGVy
cm9yX21lc3NhZ2VfOwotfTsKLQotLy8gUHJpbnRzIGEgaHVtYW4tcmVhZGFibGUgcmVwcmVzZW50
YXRpb24gb2YgJ3gnIHRvICdvcycuCi1MSUJQUk9UT0JVRl9FWFBPUlQgb3N0cmVhbSYgb3BlcmF0
b3I8PChvc3RyZWFtJiBvcywgY29uc3QgU3RhdHVzJiB4KTsKLQotI2RlZmluZSBFWFBFQ1RfT0so
dmFsdWUpIEVYUEVDVF9UUlVFKCh2YWx1ZSkub2soKSkKLQotfSAgLy8gbmFtZXNwYWNlIHV0aWwK
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlm
ICAvLyBHT09HTEVfUFJPVE9CVUZfU1RVQlNfU1RBVFVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzX21hY3Jvcy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0YXR1c19tYWNyb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQzZTc5
YTcyN2QwMjA5MmNlZThkM2Y5ZDUzNzk1N2RkYjgyMjlkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVz
X21hY3Jvcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEZyb206IHV0aWwvdGFzay9jb250cmliL3N0YXR1c19t
YWNyb3Mvc3RhdHVzX21hY3Jvcy5oCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1NUVUJTX1NU
QVRVU19NQUNST1NfSF8KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1NUVUJTX1NUQVRVU19NQUNS
T1NfSF8KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3N0dWJzL3N0YXR1c29yLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNl
IHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1dGlsIHsKLQotLy8gUnVuIGEgY29tbWFuZCB0aGF0IHJl
dHVybnMgYSB1dGlsOjpTdGF0dXMuICBJZiB0aGUgY2FsbGVkIGNvZGUgcmV0dXJucyBhbgotLy8g
ZXJyb3Igc3RhdHVzLCByZXR1cm4gdGhhdCBzdGF0dXMgdXAgb3V0IG9mIHRoaXMgbWV0aG9kIHRv
by4KLS8vCi0vLyBFeGFtcGxlOgotLy8gICBSRVRVUk5fSUZfRVJST1IoRG9UaGluZ3MoNCkpOwot
I2RlZmluZSBSRVRVUk5fSUZfRVJST1IoZXhwcikgXAotICBkbyB7IFwKLSAgICAvKiBVc2luZyBf
c3RhdHVzIGJlbG93IHRvIGF2b2lkIGNhcHR1cmUgcHJvYmxlbXMgaWYgZXhwciBpcyAic3RhdHVz
Ii4gKi8gXAotICAgIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dXRpbDo6U3RhdHVzIF9zdGF0
dXMgPSAoZXhwcik7IFwKLSAgICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoIV9zdGF0dXMub2so
KSkpIHJldHVybiBfc3RhdHVzOyBcCi0gIH0gd2hpbGUgKDApCi0KLS8vIEludGVybmFsIGhlbHBl
ciBmb3IgY29uY2F0ZW5hdGluZyBtYWNybyB2YWx1ZXMuCi0jZGVmaW5lIFNUQVRVU19NQUNST1Nf
Q09OQ0FUX05BTUVfSU5ORVIoeCwgeSkgeCMjeQotI2RlZmluZSBTVEFUVVNfTUFDUk9TX0NPTkNB
VF9OQU1FKHgsIHkpIFNUQVRVU19NQUNST1NfQ09OQ0FUX05BTUVfSU5ORVIoeCwgeSkKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLVN0YXR1cyBEb0Fzc2lnbk9yUmV0dXJuKFQmIGxocywgU3RhdHVz
T3I8VD4gcmVzdWx0KSB7Ci0gIGlmIChyZXN1bHQub2soKSkgewotICAgIGxocyA9IHJlc3VsdC5W
YWx1ZU9yRGllKCk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdC5zdGF0dXMoKTsKLX0KLQotI2RlZmlu
ZSBBU1NJR05fT1JfUkVUVVJOX0lNUEwoc3RhdHVzLCBsaHMsIHJleHByKSBcCi0gIFN0YXR1cyBz
dGF0dXMgPSBEb0Fzc2lnbk9yUmV0dXJuKGxocywgKHJleHByKSk7IFwKLSAgaWYgKEdPT0dMRV9Q
UkVESUNUX0ZBTFNFKCFzdGF0dXMub2soKSkpIHJldHVybiBzdGF0dXM7Ci0KLS8vIEV4ZWN1dGVz
IGFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIGEgdXRpbDo6U3RhdHVzT3IsIGV4dHJhY3Rpbmcg
aXRzIHZhbHVlCi0vLyBpbnRvIHRoZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IGxocyAob3IgcmV0dXJu
aW5nIG9uIGVycm9yKS4KLS8vCi0vLyBFeGFtcGxlOiBBc3NpZ25pbmcgdG8gYW4gZXhpc3Rpbmcg
dmFsdWUKLS8vICAgVmFsdWVUeXBlIHZhbHVlOwotLy8gICBBU1NJR05fT1JfUkVUVVJOKHZhbHVl
LCBNYXliZUdldFZhbHVlKGFyZykpOwotLy8KLS8vIFdBUk5JTkc6IEFTU0lHTl9PUl9SRVRVUk4g
ZXhwYW5kcyBpbnRvIG11bHRpcGxlIHN0YXRlbWVudHM7IGl0IGNhbm5vdCBiZSB1c2VkCi0vLyAg
aW4gYSBzaW5nbGUgc3RhdGVtZW50IChlLmcuIGFzIHRoZSBib2R5IG9mIGFuIGlmIHN0YXRlbWVu
dCB3aXRob3V0IHt9KSEKLSNkZWZpbmUgQVNTSUdOX09SX1JFVFVSTihsaHMsIHJleHByKSBcCi0g
IEFTU0lHTl9PUl9SRVRVUk5fSU1QTCggXAotICAgICAgU1RBVFVTX01BQ1JPU19DT05DQVRfTkFN
RShfc3RhdHVzX29yX3ZhbHVlLCBfX0NPVU5URVJfXyksIGxocywgcmV4cHIpOwotCi19ICAvLyBu
YW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2Ug
Z29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1NUVUJTX1NUQVRVU19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1c190ZXN0LmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1c190ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjNzBjMzNjNDc0MzdiNjA3OGU4YzY1YTgyOWQzNjcxYTBmOTVhZWM1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9zdGF0dXNfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvc3RhdHVzLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFj
ZSB7Ci1URVNUKFN0YXR1cywgRW1wdHkpIHsKLSAgdXRpbDo6U3RhdHVzIHN0YXR1czsKLSAgRVhQ
RUNUX0VRKHV0aWw6OmVycm9yOjpPSywgdXRpbDo6U3RhdHVzOjpPSy5lcnJvcl9jb2RlKCkpOwot
ICBFWFBFQ1RfRVEoIk9LIiwgdXRpbDo6U3RhdHVzOjpPSy5Ub1N0cmluZygpKTsKLX0KLQotVEVT
VChTdGF0dXMsIEdlbmVyaWNDb2RlcykgewotICBFWFBFQ1RfRVEodXRpbDo6ZXJyb3I6Ok9LLCB1
dGlsOjpTdGF0dXM6Ok9LLmVycm9yX2NvZGUoKSk7Ci0gIEVYUEVDVF9FUSh1dGlsOjplcnJvcjo6
Q0FOQ0VMTEVELCB1dGlsOjpTdGF0dXM6OkNBTkNFTExFRC5lcnJvcl9jb2RlKCkpOwotICBFWFBF
Q1RfRVEodXRpbDo6ZXJyb3I6OlVOS05PV04sIHV0aWw6OlN0YXR1czo6VU5LTk9XTi5lcnJvcl9j
b2RlKCkpOwotfQotCi1URVNUKFN0YXR1cywgQ29uc3RydWN0b3JaZXJvKSB7Ci0gIHV0aWw6OlN0
YXR1cyBzdGF0dXModXRpbDo6ZXJyb3I6Ok9LLCAibXNnIik7Ci0gIEVYUEVDVF9UUlVFKHN0YXR1
cy5vaygpKTsKLSAgRVhQRUNUX0VRKCJPSyIsIHN0YXR1cy5Ub1N0cmluZygpKTsKLX0KLQotVEVT
VChTdGF0dXMsIENoZWNrT0spIHsKLSAgdXRpbDo6U3RhdHVzIHN0YXR1czsKLSAgR09PR0xFX0NI
RUNLX09LKHN0YXR1cyk7Ci0gIEdPT0dMRV9DSEVDS19PSyhzdGF0dXMpIDw8ICJGYWlsZWQiOwot
ICBHT09HTEVfRENIRUNLX09LKHN0YXR1cykgPDwgIkZhaWxlZCI7Ci19Ci0KLVRFU1QoU3RhdHVz
LCBFcnJvck1lc3NhZ2UpIHsKLSAgdXRpbDo6U3RhdHVzIHN0YXR1cyh1dGlsOjplcnJvcjo6SU5W
QUxJRF9BUkdVTUVOVCwgIiIpOwotICBFWFBFQ1RfRkFMU0Uoc3RhdHVzLm9rKCkpOwotICBFWFBF
Q1RfRVEoIiIsIHN0YXR1cy5lcnJvcl9tZXNzYWdlKCkuVG9TdHJpbmcoKSk7Ci0gIEVYUEVDVF9F
USgiSU5WQUxJRF9BUkdVTUVOVCIsIHN0YXR1cy5Ub1N0cmluZygpKTsKLSAgc3RhdHVzID0gdXRp
bDo6U3RhdHVzKHV0aWw6OmVycm9yOjpJTlZBTElEX0FSR1VNRU5ULCAibXNnIik7Ci0gIEVYUEVD
VF9GQUxTRShzdGF0dXMub2soKSk7Ci0gIEVYUEVDVF9FUSgibXNnIiwgc3RhdHVzLmVycm9yX21l
c3NhZ2UoKS5Ub1N0cmluZygpKTsKLSAgRVhQRUNUX0VRKCJJTlZBTElEX0FSR1VNRU5UOm1zZyIs
IHN0YXR1cy5Ub1N0cmluZygpKTsKLSAgc3RhdHVzID0gdXRpbDo6U3RhdHVzKHV0aWw6OmVycm9y
OjpPSywgIm1zZyIpOwotICBFWFBFQ1RfVFJVRShzdGF0dXMub2soKSk7Ci0gIEVYUEVDVF9FUSgi
Iiwgc3RhdHVzLmVycm9yX21lc3NhZ2UoKS5Ub1N0cmluZygpKTsKLSAgRVhQRUNUX0VRKCJPSyIs
IHN0YXR1cy5Ub1N0cmluZygpKTsKLX0KLQotVEVTVChTdGF0dXMsIENvcHkpIHsKLSAgdXRpbDo6
U3RhdHVzIGEodXRpbDo6ZXJyb3I6OlVOS05PV04sICJtZXNzYWdlIik7Ci0gIHV0aWw6OlN0YXR1
cyBiKGEpOwotICBBU1NFUlRfRVEoYS5Ub1N0cmluZygpLCBiLlRvU3RyaW5nKCkpOwotfQotCi1U
RVNUKFN0YXR1cywgQXNzaWduKSB7Ci0gIHV0aWw6OlN0YXR1cyBhKHV0aWw6OmVycm9yOjpVTktO
T1dOLCAibWVzc2FnZSIpOwotICB1dGlsOjpTdGF0dXMgYjsKLSAgYiA9IGE7Ci0gIEFTU0VSVF9F
UShhLlRvU3RyaW5nKCksIGIuVG9TdHJpbmcoKSk7Ci19Ci0KLVRFU1QoU3RhdHVzLCBBc3NpZ25F
bXB0eSkgewotICB1dGlsOjpTdGF0dXMgYSh1dGlsOjplcnJvcjo6VU5LTk9XTiwgIm1lc3NhZ2Ui
KTsKLSAgdXRpbDo6U3RhdHVzIGI7Ci0gIGEgPSBiOwotICBBU1NFUlRfRVEoc3RyaW5nKCJPSyIp
LCBhLlRvU3RyaW5nKCkpOwotICBBU1NFUlRfVFJVRShiLm9rKCkpOwotICBBU1NFUlRfVFJVRShh
Lm9rKCkpOwotfQotCi1URVNUKFN0YXR1cywgRXF1YWxzT0spIHsKLSAgQVNTRVJUX0VRKHV0aWw6
OlN0YXR1czo6T0ssIHV0aWw6OlN0YXR1cygpKTsKLX0KLQotVEVTVChTdGF0dXMsIEVxdWFsc1Nh
bWUpIHsKLSAgY29uc3QgdXRpbDo6U3RhdHVzIGEgPSB1dGlsOjpTdGF0dXModXRpbDo6ZXJyb3I6
OkNBTkNFTExFRCwgIm1lc3NhZ2UiKTsKLSAgY29uc3QgdXRpbDo6U3RhdHVzIGIgPSB1dGlsOjpT
dGF0dXModXRpbDo6ZXJyb3I6OkNBTkNFTExFRCwgIm1lc3NhZ2UiKTsKLSAgQVNTRVJUX0VRKGEs
IGIpOwotfQotCi1URVNUKFN0YXR1cywgRXF1YWxzQ29weSkgewotICBjb25zdCB1dGlsOjpTdGF0
dXMgYSA9IHV0aWw6OlN0YXR1cyh1dGlsOjplcnJvcjo6Q0FOQ0VMTEVELCAibWVzc2FnZSIpOwot
ICBjb25zdCB1dGlsOjpTdGF0dXMgYiA9IGE7Ci0gIEFTU0VSVF9FUShhLCBiKTsKLX0KLQotVEVT
VChTdGF0dXMsIEVxdWFsc0RpZmZlcmVudENvZGUpIHsKLSAgY29uc3QgdXRpbDo6U3RhdHVzIGEg
PSB1dGlsOjpTdGF0dXModXRpbDo6ZXJyb3I6OkNBTkNFTExFRCwgIm1lc3NhZ2UiKTsKLSAgY29u
c3QgdXRpbDo6U3RhdHVzIGIgPSB1dGlsOjpTdGF0dXModXRpbDo6ZXJyb3I6OlVOS05PV04sICJt
ZXNzYWdlIik7Ci0gIEFTU0VSVF9ORShhLCBiKTsKLX0KLQotVEVTVChTdGF0dXMsIEVxdWFsc0Rp
ZmZlcmVudE1lc3NhZ2UpIHsKLSAgY29uc3QgdXRpbDo6U3RhdHVzIGEgPSB1dGlsOjpTdGF0dXMo
dXRpbDo6ZXJyb3I6OkNBTkNFTExFRCwgIm1lc3NhZ2UiKTsKLSAgY29uc3QgdXRpbDo6U3RhdHVz
IGIgPSB1dGlsOjpTdGF0dXModXRpbDo6ZXJyb3I6OkNBTkNFTExFRCwgImFub3RoZXIiKTsKLSAg
QVNTRVJUX05FKGEsIGIpOwotfQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgcHJv
dG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9zdGF0dXNvci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXNv
ci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkMTQwMmFlMDAzNmQ3YjI5ZTE0
MTU5MjNlMTZkNzMxMWFmYjRhOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzb3IuY2MKKysrIC9kZXYv
bnVsbApAQCAtMSw0NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0
YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9j
b2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwot
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXNvci5oPgotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1l
c3BhY2UgaW50ZXJuYWwgewotCi12b2lkIFN0YXR1c09ySGVscGVyOjpDcmFzaChjb25zdCBTdGF0
dXMmIHN0YXR1cykgewotICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiQXR0ZW1wdGluZyB0byBmZXRj
aCB2YWx1ZSBpbnN0ZWFkIG9mIGhhbmRsaW5nIGVycm9yICIKLSAgICAgICAgICAgICAgICAgICAg
PDwgc3RhdHVzLlRvU3RyaW5nKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAg
Ly8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNw
YWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1c29y
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzb3IuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjlmODY5YWQ1ZThkNThhMzM0YzhjZjcwNjdlODMwMjdjZjliOWU2MS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RhdHVzb3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gU3RhdHVzT3I8VD4gaXMg
dGhlIHVuaW9uIG9mIGEgU3RhdHVzIG9iamVjdCBhbmQgYSBUCi0vLyBvYmplY3QuIFN0YXR1c09y
IG1vZGVscyB0aGUgY29uY2VwdCBvZiBhbiBvYmplY3QgdGhhdCBpcyBlaXRoZXIgYQotLy8gdXNh
YmxlIHZhbHVlLCBvciBhbiBlcnJvciBTdGF0dXMgZXhwbGFpbmluZyB3aHkgc3VjaCBhIHZhbHVl
IGlzCi0vLyBub3QgcHJlc2VudC4gVG8gdGhpcyBlbmQsIFN0YXR1c09yPFQ+IGRvZXMgbm90IGFs
bG93IGl0cyBTdGF0dXMKLS8vIHZhbHVlIHRvIGJlIFN0YXR1czo6T0suIEZ1cnRoZXIsIFN0YXR1
c09yPFQqPiBkb2VzIG5vdCBhbGxvdyB0aGUKLS8vIGNvbnRhaW5lZCBwb2ludGVyIHRvIGJlIE5V
TEwuCi0vLwotLy8gVGhlIHByaW1hcnkgdXNlLWNhc2UgZm9yIFN0YXR1c09yPFQ+IGlzIGFzIHRo
ZSByZXR1cm4gdmFsdWUgb2YgYQotLy8gZnVuY3Rpb24gd2hpY2ggbWF5IGZhaWwuCi0vLwotLy8g
RXhhbXBsZSBjbGllbnQgdXNhZ2UgZm9yIGEgU3RhdHVzT3I8VD4sIHdoZXJlIFQgaXMgbm90IGEg
cG9pbnRlcjoKLS8vCi0vLyAgU3RhdHVzT3I8ZmxvYXQ+IHJlc3VsdCA9IERvQmlnQ2FsY3VsYXRp
b25UaGF0Q291bGRGYWlsKCk7Ci0vLyAgaWYgKHJlc3VsdC5vaygpKSB7Ci0vLyAgICBmbG9hdCBh
bnN3ZXIgPSByZXN1bHQuVmFsdWVPckRpZSgpOwotLy8gICAgcHJpbnRmKCJCaWcgY2FsY3VsYXRp
b24geWllbGRlZDogJWYiLCBhbnN3ZXIpOwotLy8gIH0gZWxzZSB7Ci0vLyAgICBMT0coRVJST1Ip
IDw8IHJlc3VsdC5zdGF0dXMoKTsKLS8vICB9Ci0vLwotLy8gRXhhbXBsZSBjbGllbnQgdXNhZ2Ug
Zm9yIGEgU3RhdHVzT3I8VCo+OgotLy8KLS8vICBTdGF0dXNPcjxGb28qPiByZXN1bHQgPSBGb29G
YWN0b3J5OjpNYWtlTmV3Rm9vKGFyZyk7Ci0vLyAgaWYgKHJlc3VsdC5vaygpKSB7Ci0vLyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Rm9vPiBmb28ocmVzdWx0LlZhbHVlT3JEaWUoKSk7Ci0vLyAgICBmb28t
PkRvU29tZXRoaW5nQ29vbCgpOwotLy8gIH0gZWxzZSB7Ci0vLyAgICBMT0coRVJST1IpIDw8IHJl
c3VsdC5zdGF0dXMoKTsKLS8vICB9Ci0vLwotLy8gRXhhbXBsZSBjbGllbnQgdXNhZ2UgZm9yIGEg
U3RhdHVzT3I8c3RkOjp1bmlxdWVfcHRyPFQ+PjoKLS8vCi0vLyAgU3RhdHVzT3I8c3RkOjp1bmlx
dWVfcHRyPEZvbz4+IHJlc3VsdCA9IEZvb0ZhY3Rvcnk6Ok1ha2VOZXdGb28oYXJnKTsKLS8vICBp
ZiAocmVzdWx0Lm9rKCkpIHsKLS8vICAgIHN0ZDo6dW5pcXVlX3B0cjxGb28+IGZvbyA9IHJlc3Vs
dC5Db25zdW1lVmFsdWVPckRpZSgpOwotLy8gICAgZm9vLT5Eb1NvbWV0aGluZ0Nvb2woKTsKLS8v
ICB9IGVsc2UgewotLy8gICAgTE9HKEVSUk9SKSA8PCByZXN1bHQuc3RhdHVzKCk7Ci0vLyAgfQot
Ly8KLS8vIEV4YW1wbGUgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbiByZXR1cm5pbmcgU3RhdHVzT3I8
VCo+OgotLy8KLS8vICBTdGF0dXNPcjxGb28qPiBGb29GYWN0b3J5OjpNYWtlTmV3Rm9vKGludCBh
cmcpIHsKLS8vICAgIGlmIChhcmcgPD0gMCkgewotLy8gICAgICByZXR1cm4gOjp1dGlsOjpTdGF0
dXMoOjp1dGlsOjplcnJvcjo6SU5WQUxJRF9BUkdVTUVOVCwKLS8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJBcmcgbXVzdCBiZSBwb3NpdGl2ZSIpOwotLy8gICAgfSBlbHNlIHsKLS8vICAg
ICAgcmV0dXJuIG5ldyBGb28oYXJnKTsKLS8vICAgIH0KLS8vICB9Ci0vLwotCi0jaWZuZGVmIEdP
T0dMRV9QUk9UT0JVRl9TVFVCU19TVEFUVVNPUl9IXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZf
U1RVQlNfU1RBVFVTT1JfSF8KLQotI2luY2x1ZGUgPG5ldz4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0j
aW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0
dXMuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNw
YWNlIHV0aWwgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgU3RhdHVzT3IgewotICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBmcmllbmQgY2xhc3MgU3RhdHVzT3I7Ci0KLSBwdWJsaWM6Ci0g
IC8vIENvbnN0cnVjdCBhIG5ldyBTdGF0dXNPciB3aXRoIFN0YXR1czo6VU5LTk9XTiBzdGF0dXMK
LSAgU3RhdHVzT3IoKTsKLQotICAvLyBDb25zdHJ1Y3QgYSBuZXcgU3RhdHVzT3Igd2l0aCB0aGUg
Z2l2ZW4gbm9uLW9rIHN0YXR1cy4gQWZ0ZXIgY2FsbGluZwotICAvLyB0aGlzIGNvbnN0cnVjdG9y
LCBjYWxscyB0byBWYWx1ZU9yRGllKCkgd2lsbCBDSEVDSy1mYWlsLgotICAvLwotICAvLyBOT1RF
OiBOb3QgZXhwbGljaXQgLSB3ZSB3YW50IHRvIHVzZSBTdGF0dXNPcjxUPiBhcyBhIHJldHVybgot
ICAvLyB2YWx1ZSwgc28gaXQgaXMgY29udmVuaWVudCBhbmQgc2Vuc2libGUgdG8gYmUgYWJsZSB0
byBkbyAncmV0dXJuCi0gIC8vIFN0YXR1cygpJyB3aGVuIHRoZSByZXR1cm4gdHlwZSBpcyBTdGF0
dXNPcjxUPi4KLSAgLy8KLSAgLy8gUkVRVUlSRVM6IHN0YXR1cyAhPSBTdGF0dXM6Ok9LLiBUaGlz
IHJlcXVpcmVtZW50IGlzIERDSEVDS2VkLgotICAvLyBJbiBvcHRpbWl6ZWQgYnVpbGRzLCBwYXNz
aW5nIFN0YXR1czo6T0sgaGVyZSB3aWxsIGhhdmUgdGhlIGVmZmVjdAotICAvLyBvZiBwYXNzaW5n
IFBvc2l4RXJyb3JTcGFjZTo6RUlOVkFMIGFzIGEgZmFsbGJhY2suCi0gIFN0YXR1c09yKGNvbnN0
IFN0YXR1cyYgc3RhdHVzKTsgIC8vIE5PTElOVAotCi0gIC8vIENvbnN0cnVjdCBhIG5ldyBTdGF0
dXNPciB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4gSWYgVCBpcyBhIHBsYWluIHBvaW50ZXIsCi0gIC8v
IHZhbHVlIG11c3Qgbm90IGJlIE5VTEwuIEFmdGVyIGNhbGxpbmcgdGhpcyBjb25zdHJ1Y3Rvciwg
Y2FsbHMgdG8KLSAgLy8gVmFsdWVPckRpZSgpIHdpbGwgc3VjY2VlZCwgYW5kIGNhbGxzIHRvIHN0
YXR1cygpIHdpbGwgcmV0dXJuIE9LLgotICAvLwotICAvLyBOT1RFOiBOb3QgZXhwbGljaXQgLSB3
ZSB3YW50IHRvIHVzZSBTdGF0dXNPcjxUPiBhcyBhIHJldHVybiB0eXBlCi0gIC8vIHNvIGl0IGlz
IGNvbnZlbmllbnQgYW5kIHNlbnNpYmxlIHRvIGJlIGFibGUgdG8gZG8gJ3JldHVybiBUKCknCi0g
IC8vIHdoZW4gd2hlbiB0aGUgcmV0dXJuIHR5cGUgaXMgU3RhdHVzT3I8VD4uCi0gIC8vCi0gIC8v
IFJFUVVJUkVTOiBpZiBUIGlzIGEgcGxhaW4gcG9pbnRlciwgdmFsdWUgIT0gTlVMTC4gVGhpcyBy
ZXF1aXJlbWVudCBpcwotICAvLyBEQ0hFQ0tlZC4gSW4gb3B0aW1pemVkIGJ1aWxkcywgcGFzc2lu
ZyBhIE5VTEwgcG9pbnRlciBoZXJlIHdpbGwgaGF2ZQotICAvLyB0aGUgZWZmZWN0IG9mIHBhc3Np
bmcgUG9zaXhFcnJvclNwYWNlOjpFSU5WQUwgYXMgYSBmYWxsYmFjay4KLSAgU3RhdHVzT3IoY29u
c3QgVCYgdmFsdWUpOyAgLy8gTk9MSU5UCi0KLSAgLy8gQ29weSBjb25zdHJ1Y3Rvci4KLSAgU3Rh
dHVzT3IoY29uc3QgU3RhdHVzT3ImIG90aGVyKTsKLQotICAvLyBDb252ZXJzaW9uIGNvcHkgY29u
c3RydWN0b3IsIFQgbXVzdCBiZSBjb3B5IGNvbnN0cnVjdGlibGUgZnJvbSBVCi0gIHRlbXBsYXRl
PHR5cGVuYW1lIFU+Ci0gIFN0YXR1c09yKGNvbnN0IFN0YXR1c09yPFU+JiBvdGhlcik7Ci0KLSAg
Ly8gQXNzaWdubWVudCBvcGVyYXRvci4KLSAgU3RhdHVzT3ImIG9wZXJhdG9yPShjb25zdCBTdGF0
dXNPciYgb3RoZXIpOwotCi0gIC8vIENvbnZlcnNpb24gYXNzaWdubWVudCBvcGVyYXRvciwgVCBt
dXN0IGJlIGFzc2lnbmFibGUgZnJvbSBVCi0gIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gIFN0YXR1
c09yJiBvcGVyYXRvcj0oY29uc3QgU3RhdHVzT3I8VT4mIG90aGVyKTsKLQotICAvLyBSZXR1cm5z
IGEgcmVmZXJlbmNlIHRvIG91ciBzdGF0dXMuIElmIHRoaXMgY29udGFpbnMgYSBULCB0aGVuCi0g
IC8vIHJldHVybnMgU3RhdHVzOjpPSy4KLSAgY29uc3QgU3RhdHVzJiBzdGF0dXMoKSBjb25zdDsK
LQotICAvLyBSZXR1cm5zIHRoaXMtPnN0YXR1cygpLm9rKCkKLSAgYm9vbCBvaygpIGNvbnN0Owot
Ci0gIC8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gb3VyIGN1cnJlbnQgdmFsdWUsIG9yIENIRUNL
LWZhaWxzIGlmICF0aGlzLT5vaygpLgotICAvLyBJZiB5b3UgbmVlZCB0byBpbml0aWFsaXplIGEg
VCBvYmplY3QgZnJvbSB0aGUgc3RvcmVkIHZhbHVlLAotICAvLyBDb25zdW1lVmFsdWVPckRpZSgp
IG1heSBiZSBtb3JlIGVmZmljaWVudC4KLSAgY29uc3QgVCYgVmFsdWVPckRpZSgpIGNvbnN0Owot
Ci0gcHJpdmF0ZToKLSAgU3RhdHVzIHN0YXR1c187Ci0gIFQgdmFsdWVfOwotfTsKLQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vIEltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIFN0YXR1c09y
PFQ+Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBT
dGF0dXNPckhlbHBlciB7Ci0gcHVibGljOgotICAvLyBNb3ZlIHR5cGUtYWdub3N0aWMgZXJyb3Ig
aGFuZGxpbmcgdG8gdGhlIC5jYy4KLSAgc3RhdGljIHZvaWQgQ3Jhc2goY29uc3QgdXRpbDo6U3Rh
dHVzJiBzdGF0dXMpOwotCi0gIC8vIEN1c3RvbWl6ZWQgYmVoYXZpb3IgZm9yIFN0YXR1c09yPFQ+
IHZzLiBTdGF0dXNPcjxUKj4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgc3RydWN0IFNwZWNp
YWxpemU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IFN0YXR1c09ySGVscGVy
OjpTcGVjaWFsaXplIHsKLSAgLy8gRm9yIG5vbi1wb2ludGVyIFQsIGEgcmVmZXJlbmNlIGNhbiBu
ZXZlciBiZSBOVUxMLgotICBzdGF0aWMgaW5saW5lIGJvb2wgSXNWYWx1ZU51bGwoY29uc3QgVCYg
dCkgeyByZXR1cm4gZmFsc2U7IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
U3RhdHVzT3JIZWxwZXI6OlNwZWNpYWxpemU8VCo+IHsKLSAgc3RhdGljIGlubGluZSBib29sIElz
VmFsdWVOdWxsKGNvbnN0IFQqIHQpIHsgcmV0dXJuIHQgPT0gTlVMTDsgfQotfTsKLQotfSAgLy8g
bmFtZXNwYWNlIGludGVybmFsCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgU3RhdHVz
T3I8VD46OlN0YXR1c09yKCkKLSAgICA6IHN0YXR1c18odXRpbDo6U3RhdHVzOjpVTktOT1dOKSB7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgU3RhdHVzT3I8VD46OlN0YXR1c09y
KGNvbnN0IFN0YXR1cyYgc3RhdHVzKSB7Ci0gIGlmIChzdGF0dXMub2soKSkgewotICAgIHN0YXR1
c18gPSBTdGF0dXMoZXJyb3I6OklOVEVSTkFMLCAiU3RhdHVzOjpPSyBpcyBub3QgYSB2YWxpZCBh
cmd1bWVudC4iKTsKLSAgfSBlbHNlIHsKLSAgICBzdGF0dXNfID0gc3RhdHVzOwotICB9Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgU3RhdHVzT3I8VD46OlN0YXR1c09yKGNvbnN0
IFQmIHZhbHVlKSB7Ci0gIGlmIChpbnRlcm5hbDo6U3RhdHVzT3JIZWxwZXI6OlNwZWNpYWxpemU8
VD46OklzVmFsdWVOdWxsKHZhbHVlKSkgewotICAgIHN0YXR1c18gPSBTdGF0dXMoZXJyb3I6OklO
VEVSTkFMLCAiTlVMTCBpcyBub3QgYSB2YWlsZCBhcmd1bWVudC4iKTsKLSAgfSBlbHNlIHsKLSAg
ICBzdGF0dXNfID0gU3RhdHVzOjpPSzsKLSAgICB2YWx1ZV8gPSB2YWx1ZTsKLSAgfQotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFN0YXR1c09yPFQ+OjpTdGF0dXNPcihjb25zdCBT
dGF0dXNPcjxUPiYgb3RoZXIpCi0gICAgOiBzdGF0dXNfKG90aGVyLnN0YXR1c18pLCB2YWx1ZV8o
b3RoZXIudmFsdWVfKSB7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgU3RhdHVz
T3I8VD4mIFN0YXR1c09yPFQ+OjpvcGVyYXRvcj0oY29uc3QgU3RhdHVzT3I8VD4mIG90aGVyKSB7
Ci0gIHN0YXR1c18gPSBvdGhlci5zdGF0dXNfOwotICB2YWx1ZV8gPSBvdGhlci52YWx1ZV87Ci0g
IHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci1pbmxpbmUgU3RhdHVzT3I8VD46OlN0YXR1c09yKGNvbnN0IFN0YXR1c09yPFU+JiBv
dGhlcikKLSAgICA6IHN0YXR1c18ob3RoZXIuc3RhdHVzXyksIHZhbHVlXyhvdGhlci5zdGF0dXNf
Lm9rKCkgPyBvdGhlci52YWx1ZV8gOiBUKCkpIHsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1pbmxpbmUgU3RhdHVzT3I8VD4mIFN0YXR1c09yPFQ+Ojpv
cGVyYXRvcj0oY29uc3QgU3RhdHVzT3I8VT4mIG90aGVyKSB7Ci0gIHN0YXR1c18gPSBvdGhlci5z
dGF0dXNfOwotICBpZiAoc3RhdHVzXy5vaygpKSB2YWx1ZV8gPSBvdGhlci52YWx1ZV87Ci0gIHJl
dHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBjb25zdCBTdGF0
dXMmIFN0YXR1c09yPFQ+OjpzdGF0dXMoKSBjb25zdCB7Ci0gIHJldHVybiBzdGF0dXNfOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIGJvb2wgU3RhdHVzT3I8VD46Om9rKCkgY29u
c3QgewotICByZXR1cm4gc3RhdHVzKCkub2soKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LWlubGluZSBjb25zdCBUJiBTdGF0dXNPcjxUPjo6VmFsdWVPckRpZSgpIGNvbnN0IHsKLSAgaWYg
KCFzdGF0dXNfLm9rKCkpIHsKLSAgICBpbnRlcm5hbDo6U3RhdHVzT3JIZWxwZXI6OkNyYXNoKHN0
YXR1c18pOwotICB9Ci0gIHJldHVybiB2YWx1ZV87Ci19Ci19ICAvLyBuYW1lc3BhY2UgdXRpbAot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRp
ZiAgLy8gR09PR0xFX1BST1RPQlVGX1NUVUJTX1NUQVRVU09SX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzb3JfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9zdGF0dXNvcl90ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
ZTJhOWU1NTQ1ZWRhYmIzNjUwM2ZjMjgzMGI4MDA5MzAzZjBjOThjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9z
dGF0dXNvcl90ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjc0ICswLDAgQEAKLS8vIFByb3Rv
Y29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJp
Z2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0YXR1c29yLmg+Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPG1lbW9yeT4K
LQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgewotCi1jbGFzcyBCYXNlMSB7Ci0g
cHVibGljOgotICB2aXJ0dWFsIH5CYXNlMSgpIHt9Ci0gIGludCBwYWQ7Ci19OwotCi1jbGFzcyBC
YXNlMiB7Ci0gcHVibGljOgotICB2aXJ0dWFsIH5CYXNlMigpIHt9Ci0gIGludCB5ZXRvdGhlcnBh
ZDsKLX07Ci0KLWNsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZTEsIHB1YmxpYyBCYXNlMiB7Ci0g
cHVibGljOgotICB2aXJ0dWFsIH5EZXJpdmVkKCkge30KLSAgaW50IGV2ZW5tb3JlcGFkOwotfTsK
LQotY2xhc3MgQ29weU5vQXNzaWduIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IENvcHlOb0Fzc2ln
bihpbnQgdmFsdWUpIDogZm9vKHZhbHVlKSB7fQotICBDb3B5Tm9Bc3NpZ24oY29uc3QgQ29weU5v
QXNzaWduJiBvdGhlcikgOiBmb28ob3RoZXIuZm9vKSB7fQotICBpbnQgZm9vOwotIHByaXZhdGU6
Ci0gIGNvbnN0IENvcHlOb0Fzc2lnbiYgb3BlcmF0b3I9KGNvbnN0IENvcHlOb0Fzc2lnbiYpOwot
fTsKLQotVEVTVChTdGF0dXNPciwgVGVzdERlZmF1bHRDdG9yKSB7Ci0gIFN0YXR1c09yPGludD4g
dGhpbmc7Ci0gIEVYUEVDVF9GQUxTRSh0aGluZy5vaygpKTsKLSAgRVhQRUNUX0VRKFN0YXR1czo6
VU5LTk9XTiwgdGhpbmcuc3RhdHVzKCkpOwotfQotCi1URVNUKFN0YXR1c09yLCBUZXN0U3RhdHVz
Q3RvcikgewotICBTdGF0dXNPcjxpbnQ+IHRoaW5nKFN0YXR1czo6Q0FOQ0VMTEVEKTsKLSAgRVhQ
RUNUX0ZBTFNFKHRoaW5nLm9rKCkpOwotICBFWFBFQ1RfRVEoU3RhdHVzOjpDQU5DRUxMRUQsIHRo
aW5nLnN0YXR1cygpKTsKLX0KLQotVEVTVChTdGF0dXNPciwgVGVzdFZhbHVlQ3RvcikgewotICBj
b25zdCBpbnQga0kgPSA0OwotICBTdGF0dXNPcjxpbnQ+IHRoaW5nKGtJKTsKLSAgRVhQRUNUX1RS
VUUodGhpbmcub2soKSk7Ci0gIEVYUEVDVF9FUShrSSwgdGhpbmcuVmFsdWVPckRpZSgpKTsKLX0K
LQotVEVTVChTdGF0dXNPciwgVGVzdENvcHlDdG9yU3RhdHVzT2spIHsKLSAgY29uc3QgaW50IGtJ
ID0gNDsKLSAgU3RhdHVzT3I8aW50PiBvcmlnaW5hbChrSSk7Ci0gIFN0YXR1c09yPGludD4gY29w
eShvcmlnaW5hbCk7Ci0gIEVYUEVDVF9FUShvcmlnaW5hbC5zdGF0dXMoKSwgY29weS5zdGF0dXMo
KSk7Ci0gIEVYUEVDVF9FUShvcmlnaW5hbC5WYWx1ZU9yRGllKCksIGNvcHkuVmFsdWVPckRpZSgp
KTsKLX0KLQotVEVTVChTdGF0dXNPciwgVGVzdENvcHlDdG9yU3RhdHVzTm90T2spIHsKLSAgU3Rh
dHVzT3I8aW50PiBvcmlnaW5hbChTdGF0dXM6OkNBTkNFTExFRCk7Ci0gIFN0YXR1c09yPGludD4g
Y29weShvcmlnaW5hbCk7Ci0gIEVYUEVDVF9FUShvcmlnaW5hbC5zdGF0dXMoKSwgY29weS5zdGF0
dXMoKSk7Ci19Ci0KLVRFU1QoU3RhdHVzT3IsIFRlc3RDb3B5Q3RvclN0YXR1c09LQ29udmVydGlu
ZykgewotICBjb25zdCBpbnQga0kgPSA0OwotICBTdGF0dXNPcjxpbnQ+ICAgIG9yaWdpbmFsKGtJ
KTsKLSAgU3RhdHVzT3I8ZG91YmxlPiBjb3B5KG9yaWdpbmFsKTsKLSAgRVhQRUNUX0VRKG9yaWdp
bmFsLnN0YXR1cygpLCBjb3B5LnN0YXR1cygpKTsKLSAgRVhQRUNUX0VRKG9yaWdpbmFsLlZhbHVl
T3JEaWUoKSwgY29weS5WYWx1ZU9yRGllKCkpOwotfQotCi1URVNUKFN0YXR1c09yLCBUZXN0Q29w
eUN0b3JTdGF0dXNOb3RPa0NvbnZlcnRpbmcpIHsKLSAgU3RhdHVzT3I8aW50PiAgICBvcmlnaW5h
bChTdGF0dXM6OkNBTkNFTExFRCk7Ci0gIFN0YXR1c09yPGRvdWJsZT4gY29weShvcmlnaW5hbCk7
Ci0gIEVYUEVDVF9FUShvcmlnaW5hbC5zdGF0dXMoKSwgY29weS5zdGF0dXMoKSk7Ci19Ci0KLVRF
U1QoU3RhdHVzT3IsIFRlc3RBc3NpZ25tZW50U3RhdHVzT2spIHsKLSAgY29uc3QgaW50IGtJID0g
NDsKLSAgU3RhdHVzT3I8aW50PiBzb3VyY2Uoa0kpOwotICBTdGF0dXNPcjxpbnQ+IHRhcmdldDsK
LSAgdGFyZ2V0ID0gc291cmNlOwotICBFWFBFQ1RfRVEoc291cmNlLnN0YXR1cygpLCB0YXJnZXQu
c3RhdHVzKCkpOwotICBFWFBFQ1RfRVEoc291cmNlLlZhbHVlT3JEaWUoKSwgdGFyZ2V0LlZhbHVl
T3JEaWUoKSk7Ci19Ci0KLVRFU1QoU3RhdHVzT3IsIFRlc3RBc3NpZ25tZW50U3RhdHVzTm90T2sp
IHsKLSAgU3RhdHVzT3I8aW50PiBzb3VyY2UoU3RhdHVzOjpDQU5DRUxMRUQpOwotICBTdGF0dXNP
cjxpbnQ+IHRhcmdldDsKLSAgdGFyZ2V0ID0gc291cmNlOwotICBFWFBFQ1RfRVEoc291cmNlLnN0
YXR1cygpLCB0YXJnZXQuc3RhdHVzKCkpOwotfQotCi1URVNUKFN0YXR1c09yLCBUZXN0QXNzaWdu
bWVudFN0YXR1c09LQ29udmVydGluZykgewotICBjb25zdCBpbnQga0kgPSA0OwotICBTdGF0dXNP
cjxpbnQ+ICAgIHNvdXJjZShrSSk7Ci0gIFN0YXR1c09yPGRvdWJsZT4gdGFyZ2V0OwotICB0YXJn
ZXQgPSBzb3VyY2U7Ci0gIEVYUEVDVF9FUShzb3VyY2Uuc3RhdHVzKCksIHRhcmdldC5zdGF0dXMo
KSk7Ci0gIEVYUEVDVF9ET1VCTEVfRVEoc291cmNlLlZhbHVlT3JEaWUoKSwgdGFyZ2V0LlZhbHVl
T3JEaWUoKSk7Ci19Ci0KLVRFU1QoU3RhdHVzT3IsIFRlc3RBc3NpZ25tZW50U3RhdHVzTm90T2tD
b252ZXJ0aW5nKSB7Ci0gIFN0YXR1c09yPGludD4gICAgc291cmNlKFN0YXR1czo6Q0FOQ0VMTEVE
KTsKLSAgU3RhdHVzT3I8ZG91YmxlPiB0YXJnZXQ7Ci0gIHRhcmdldCA9IHNvdXJjZTsKLSAgRVhQ
RUNUX0VRKHNvdXJjZS5zdGF0dXMoKSwgdGFyZ2V0LnN0YXR1cygpKTsKLX0KLQotVEVTVChTdGF0
dXNPciwgVGVzdFN0YXR1cykgewotICBTdGF0dXNPcjxpbnQ+IGdvb2QoNCk7Ci0gIEVYUEVDVF9U
UlVFKGdvb2Qub2soKSk7Ci0gIFN0YXR1c09yPGludD4gYmFkKFN0YXR1czo6Q0FOQ0VMTEVEKTsK
LSAgRVhQRUNUX0ZBTFNFKGJhZC5vaygpKTsKLSAgRVhQRUNUX0VRKFN0YXR1czo6Q0FOQ0VMTEVE
LCBiYWQuc3RhdHVzKCkpOwotfQotCi1URVNUKFN0YXR1c09yLCBUZXN0VmFsdWUpIHsKLSAgY29u
c3QgaW50IGtJID0gNDsKLSAgU3RhdHVzT3I8aW50PiB0aGluZyhrSSk7Ci0gIEVYUEVDVF9FUShr
SSwgdGhpbmcuVmFsdWVPckRpZSgpKTsKLX0KLQotVEVTVChTdGF0dXNPciwgVGVzdFZhbHVlQ29u
c3QpIHsKLSAgY29uc3QgaW50IGtJID0gNDsKLSAgY29uc3QgU3RhdHVzT3I8aW50PiB0aGluZyhr
SSk7Ci0gIEVYUEVDVF9FUShrSSwgdGhpbmcuVmFsdWVPckRpZSgpKTsKLX0KLQotVEVTVChTdGF0
dXNPciwgVGVzdFBvaW50ZXJEZWZhdWx0Q3RvcikgewotICBTdGF0dXNPcjxpbnQqPiB0aGluZzsK
LSAgRVhQRUNUX0ZBTFNFKHRoaW5nLm9rKCkpOwotICBFWFBFQ1RfRVEoU3RhdHVzOjpVTktOT1dO
LCB0aGluZy5zdGF0dXMoKSk7Ci19Ci0KLVRFU1QoU3RhdHVzT3IsIFRlc3RQb2ludGVyU3RhdHVz
Q3RvcikgewotICBTdGF0dXNPcjxpbnQqPiB0aGluZyhTdGF0dXM6OkNBTkNFTExFRCk7Ci0gIEVY
UEVDVF9GQUxTRSh0aGluZy5vaygpKTsKLSAgRVhQRUNUX0VRKFN0YXR1czo6Q0FOQ0VMTEVELCB0
aGluZy5zdGF0dXMoKSk7Ci19Ci0KLVRFU1QoU3RhdHVzT3IsIFRlc3RQb2ludGVyVmFsdWVDdG9y
KSB7Ci0gIGNvbnN0IGludCBrSSA9IDQ7Ci0gIFN0YXR1c09yPGNvbnN0IGludCo+IHRoaW5nKCZr
SSk7Ci0gIEVYUEVDVF9UUlVFKHRoaW5nLm9rKCkpOwotICBFWFBFQ1RfRVEoJmtJLCB0aGluZy5W
YWx1ZU9yRGllKCkpOwotfQotCi1URVNUKFN0YXR1c09yLCBUZXN0UG9pbnRlckNvcHlDdG9yU3Rh
dHVzT2spIHsKLSAgY29uc3QgaW50IGtJID0gMDsKLSAgU3RhdHVzT3I8Y29uc3QgaW50Kj4gb3Jp
Z2luYWwoJmtJKTsKLSAgU3RhdHVzT3I8Y29uc3QgaW50Kj4gY29weShvcmlnaW5hbCk7Ci0gIEVY
UEVDVF9FUShvcmlnaW5hbC5zdGF0dXMoKSwgY29weS5zdGF0dXMoKSk7Ci0gIEVYUEVDVF9FUShv
cmlnaW5hbC5WYWx1ZU9yRGllKCksIGNvcHkuVmFsdWVPckRpZSgpKTsKLX0KLQotVEVTVChTdGF0
dXNPciwgVGVzdFBvaW50ZXJDb3B5Q3RvclN0YXR1c05vdE9rKSB7Ci0gIFN0YXR1c09yPGludCo+
IG9yaWdpbmFsKFN0YXR1czo6Q0FOQ0VMTEVEKTsKLSAgU3RhdHVzT3I8aW50Kj4gY29weShvcmln
aW5hbCk7Ci0gIEVYUEVDVF9FUShvcmlnaW5hbC5zdGF0dXMoKSwgY29weS5zdGF0dXMoKSk7Ci19
Ci0KLVRFU1QoU3RhdHVzT3IsIFRlc3RQb2ludGVyQ29weUN0b3JTdGF0dXNPS0NvbnZlcnRpbmcp
IHsKLSAgRGVyaXZlZCBkZXJpdmVkOwotICBTdGF0dXNPcjxEZXJpdmVkKj4gb3JpZ2luYWwoJmRl
cml2ZWQpOwotICBTdGF0dXNPcjxCYXNlMio+ICAgY29weShvcmlnaW5hbCk7Ci0gIEVYUEVDVF9F
UShvcmlnaW5hbC5zdGF0dXMoKSwgY29weS5zdGF0dXMoKSk7Ci0gIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxjb25zdCBCYXNlMio+KG9yaWdpbmFsLlZhbHVlT3JEaWUoKSksCi0gICAgICAgICAgICBj
b3B5LlZhbHVlT3JEaWUoKSk7Ci19Ci0KLVRFU1QoU3RhdHVzT3IsIFRlc3RQb2ludGVyQ29weUN0
b3JTdGF0dXNOb3RPa0NvbnZlcnRpbmcpIHsKLSAgU3RhdHVzT3I8RGVyaXZlZCo+IG9yaWdpbmFs
KFN0YXR1czo6Q0FOQ0VMTEVEKTsKLSAgU3RhdHVzT3I8QmFzZTIqPiAgIGNvcHkob3JpZ2luYWwp
OwotICBFWFBFQ1RfRVEob3JpZ2luYWwuc3RhdHVzKCksIGNvcHkuc3RhdHVzKCkpOwotfQotCi1U
RVNUKFN0YXR1c09yLCBUZXN0UG9pbnRlckFzc2lnbm1lbnRTdGF0dXNPaykgewotICBjb25zdCBp
bnQga0kgPSAwOwotICBTdGF0dXNPcjxjb25zdCBpbnQqPiBzb3VyY2UoJmtJKTsKLSAgU3RhdHVz
T3I8Y29uc3QgaW50Kj4gdGFyZ2V0OwotICB0YXJnZXQgPSBzb3VyY2U7Ci0gIEVYUEVDVF9FUShz
b3VyY2Uuc3RhdHVzKCksIHRhcmdldC5zdGF0dXMoKSk7Ci0gIEVYUEVDVF9FUShzb3VyY2UuVmFs
dWVPckRpZSgpLCB0YXJnZXQuVmFsdWVPckRpZSgpKTsKLX0KLQotVEVTVChTdGF0dXNPciwgVGVz
dFBvaW50ZXJBc3NpZ25tZW50U3RhdHVzTm90T2spIHsKLSAgU3RhdHVzT3I8aW50Kj4gc291cmNl
KFN0YXR1czo6Q0FOQ0VMTEVEKTsKLSAgU3RhdHVzT3I8aW50Kj4gdGFyZ2V0OwotICB0YXJnZXQg
PSBzb3VyY2U7Ci0gIEVYUEVDVF9FUShzb3VyY2Uuc3RhdHVzKCksIHRhcmdldC5zdGF0dXMoKSk7
Ci19Ci0KLVRFU1QoU3RhdHVzT3IsIFRlc3RQb2ludGVyQXNzaWdubWVudFN0YXR1c09LQ29udmVy
dGluZykgewotICBEZXJpdmVkIGRlcml2ZWQ7Ci0gIFN0YXR1c09yPERlcml2ZWQqPiBzb3VyY2Uo
JmRlcml2ZWQpOwotICBTdGF0dXNPcjxCYXNlMio+ICAgdGFyZ2V0OwotICB0YXJnZXQgPSBzb3Vy
Y2U7Ci0gIEVYUEVDVF9FUShzb3VyY2Uuc3RhdHVzKCksIHRhcmdldC5zdGF0dXMoKSk7Ci0gIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxjb25zdCBCYXNlMio+KHNvdXJjZS5WYWx1ZU9yRGllKCkpLAot
ICAgICAgICAgICAgdGFyZ2V0LlZhbHVlT3JEaWUoKSk7Ci19Ci0KLVRFU1QoU3RhdHVzT3IsIFRl
c3RQb2ludGVyQXNzaWdubWVudFN0YXR1c05vdE9rQ29udmVydGluZykgewotICBTdGF0dXNPcjxE
ZXJpdmVkKj4gc291cmNlKFN0YXR1czo6Q0FOQ0VMTEVEKTsKLSAgU3RhdHVzT3I8QmFzZTIqPiAg
IHRhcmdldDsKLSAgdGFyZ2V0ID0gc291cmNlOwotICBFWFBFQ1RfRVEoc291cmNlLnN0YXR1cygp
LCB0YXJnZXQuc3RhdHVzKCkpOwotfQotCi1URVNUKFN0YXR1c09yLCBUZXN0UG9pbnRlclN0YXR1
cykgewotICBjb25zdCBpbnQga0kgPSAwOwotICBTdGF0dXNPcjxjb25zdCBpbnQqPiBnb29kKCZr
SSk7Ci0gIEVYUEVDVF9UUlVFKGdvb2Qub2soKSk7Ci0gIFN0YXR1c09yPGNvbnN0IGludCo+IGJh
ZChTdGF0dXM6OkNBTkNFTExFRCk7Ci0gIEVYUEVDVF9FUShTdGF0dXM6OkNBTkNFTExFRCwgYmFk
LnN0YXR1cygpKTsKLX0KLQotVEVTVChTdGF0dXNPciwgVGVzdFBvaW50ZXJWYWx1ZSkgewotICBj
b25zdCBpbnQga0kgPSAwOwotICBTdGF0dXNPcjxjb25zdCBpbnQqPiB0aGluZygma0kpOwotICBF
WFBFQ1RfRVEoJmtJLCB0aGluZy5WYWx1ZU9yRGllKCkpOwotfQotCi1URVNUKFN0YXR1c09yLCBU
ZXN0UG9pbnRlclZhbHVlQ29uc3QpIHsKLSAgY29uc3QgaW50IGtJID0gMDsKLSAgY29uc3QgU3Rh
dHVzT3I8Y29uc3QgaW50Kj4gdGhpbmcoJmtJKTsKLSAgRVhQRUNUX0VRKCZrSSwgdGhpbmcuVmFs
dWVPckRpZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgdXRpbAot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RsX3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi9zdHVicy9zdGxfdXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTRj
ODJhNGMzYmUzNTI0NWNiZWFmOWU5N2FmYmRiYmE4YWI0NTU4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGxf
dXRpbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0vLyBmcm9tIGdvb2dsZTMvdXRpbC9ndGwvc3RsX3V0aWwuaAot
Ci0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19TVExfVVRJTF9IX18KLSNkZWZpbmUgR09P
R0xFX1BST1RPQlVGX1NUVUJTX1NUTF9VVElMX0hfXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2NvbW1vbi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci0KLS8vIFNUTERlbGV0ZUNvbnRhaW5lclBvaW50ZXJzKCkKLS8vICBGb3IgYSByYW5n
ZSB3aXRoaW4gYSBjb250YWluZXIgb2YgcG9pbnRlcnMsIGNhbGxzIGRlbGV0ZQotLy8gIChub24t
YXJyYXkgdmVyc2lvbikgb24gdGhlc2UgcG9pbnRlcnMuCi0vLyBOT1RFOiBmb3IgdGhlc2UgdGhy
ZWUgZnVuY3Rpb25zLCB3ZSBjb3VsZCBqdXN0IGltcGxlbWVudCBhIERlbGV0ZU9iamVjdAotLy8g
ZnVuY3RvciBhbmQgdGhlbiBjYWxsIGZvcl9lYWNoKCkgb24gdGhlIHJhbmdlIGFuZCBmdW5jdG9y
LCBidXQgdGhpcwotLy8gcmVxdWlyZXMgdXMgdG8gcHVsbCBpbiBhbGwgb2YgYWxnb3JpdGhtLmgs
IHdoaWNoIHNlZW1zIGV4cGVuc2l2ZS4KLS8vIEZvciBoYXNoX1ttdWx0aV1zZXQsIGl0IGlzIGlt
cG9ydGFudCB0aGF0IHRoaXMgZGVsZXRlcyBiZWhpbmQgdGhlIGl0ZXJhdG9yCi0vLyBiZWNhdXNl
IHRoZSBoYXNoX3NldCBtYXkgY2FsbCB0aGUgaGFzaCBmdW5jdGlvbiBvbiB0aGUgaXRlcmF0b3Ig
d2hlbiBpdCBpcwotLy8gYWR2YW5jZWQsIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiB0aGUgaGFzaCBm
dW5jdGlvbiB0cnlpbmcgdG8gZGVmZXJlbmNlIGEKLS8vIHN0YWxlIHBvaW50ZXIuCi10ZW1wbGF0
ZSA8Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yPgotdm9pZCBTVExEZWxldGVDb250YWluZXJQb2ludGVy
cyhGb3J3YXJkSXRlcmF0b3IgYmVnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZvcndhcmRJdGVyYXRvciBlbmQpIHsKLSAgd2hpbGUgKGJlZ2luICE9IGVuZCkgewotICAgIEZv
cndhcmRJdGVyYXRvciB0ZW1wID0gYmVnaW47Ci0gICAgKytiZWdpbjsKLSAgICBkZWxldGUgKnRl
bXA7Ci0gIH0KLX0KLQotLy8gSW5zaWRlIEdvb2dsZSwgdGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRz
IGEgaG9ycmlibGUsIGRpc2d1c3RpbmcgaGFjayBpbiB3aGljaAotLy8gd2UgcmVhY2ggaW50byB0
aGUgc3RyaW5nJ3MgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBhbmQgcmVzaXplIGl0IHdpdGhvdXQK
LS8vIGluaXRpYWxpemluZyB0aGUgbmV3IGJ5dGVzLiAgSW4gc29tZSBjYXNlcyBkb2luZyB0aGlz
IGNhbiBzaWduaWZpY2FudGx5Ci0vLyBpbXByb3ZlIHBlcmZvcm1hbmNlLiAgSG93ZXZlciwgc2lu
Y2UgaXQncyB0b3RhbGx5IG5vbi1wb3J0YWJsZSBpdCBoYXMgbm8KLS8vIHBsYWNlIGluIG9wZW4g
c291cmNlIGNvZGUuICBGZWVsIGZyZWUgdG8gZmlsbCB0aGlzIGZ1bmN0aW9uIGluIHdpdGggeW91
cgotLy8gb3duIGRpc2d1c3RpbmcgaGFjayBpZiB5b3Ugd2FudCB0aGUgcGVyZiBib29zdC4KLWlu
bGluZSB2b2lkIFNUTFN0cmluZ1Jlc2l6ZVVuaW5pdGlhbGl6ZWQoc3RyaW5nKiBzLCBzaXplX3Qg
bmV3X3NpemUpIHsKLSAgcy0+cmVzaXplKG5ld19zaXplKTsKLX0KLQotLy8gUmV0dXJuIGEgbXV0
YWJsZSBjaGFyKiBwb2ludGluZyB0byBhIHN0cmluZydzIGludGVybmFsIGJ1ZmZlciwKLS8vIHdo
aWNoIG1heSBub3QgYmUgbnVsbC10ZXJtaW5hdGVkLiBXcml0aW5nIHRocm91Z2ggdGhpcyBwb2lu
dGVyIHdpbGwKLS8vIG1vZGlmeSB0aGUgc3RyaW5nLgotLy8KLS8vIHN0cmluZ19hc19hcnJheSgm
c3RyKVtpXSBpcyB2YWxpZCBmb3IgMCA8PSBpIDwgc3RyLnNpemUoKSB1bnRpbCB0aGUKLS8vIG5l
eHQgY2FsbCB0byBhIHN0cmluZyBtZXRob2QgdGhhdCBpbnZhbGlkYXRlcyBpdGVyYXRvcnMuCi0v
LwotLy8gQXMgb2YgMjAwNi0wNCwgdGhlcmUgaXMgbm8gc3RhbmRhcmQtYmxlc3NlZCB3YXkgb2Yg
Z2V0dGluZyBhCi0vLyBtdXRhYmxlIHJlZmVyZW5jZSB0byBhIHN0cmluZydzIGludGVybmFsIGJ1
ZmZlci4gSG93ZXZlciwgaXNzdWUgNTMwCi0vLyAoaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvSlRD
MS9TQzIyL1dHMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTMwKQotLy8gcHJvcG9zZXMgdGhpcyBh
cyB0aGUgbWV0aG9kLiBBY2NvcmRpbmcgdG8gTWF0dCBBdXN0ZXJuLCB0aGlzIHNob3VsZAotLy8g
YWxyZWFkeSB3b3JrIG9uIGFsbCBjdXJyZW50IGltcGxlbWVudGF0aW9ucy4KLWlubGluZSBjaGFy
KiBzdHJpbmdfYXNfYXJyYXkoc3RyaW5nKiBzdHIpIHsKLSAgLy8gRE8gTk9UIFVTRSBjb25zdF9j
YXN0PGNoYXIqPihzdHItPmRhdGEoKSkhIFNlZSB0aGUgdW5pdHRlc3QgZm9yIHdoeS4KLSAgcmV0
dXJuIHN0ci0+ZW1wdHkoKSA/IE5VTEwgOiAmKnN0ci0+YmVnaW4oKTsKLX0KLQotLy8gU1RMRGVs
ZXRlRWxlbWVudHMoKSBkZWxldGVzIGFsbCB0aGUgZWxlbWVudHMgaW4gYW4gU1RMIGNvbnRhaW5l
ciBhbmQgY2xlYXJzCi0vLyB0aGUgY29udGFpbmVyLiAgVGhpcyBmdW5jdGlvbiBpcyBzdWl0YWJs
ZSBmb3IgdXNlIHdpdGggYSB2ZWN0b3IsIHNldCwKLS8vIGhhc2hfc2V0LCBvciBhbnkgb3RoZXIg
U1RMIGNvbnRhaW5lciB3aGljaCBkZWZpbmVzIHNlbnNpYmxlIGJlZ2luKCksIGVuZCgpLAotLy8g
YW5kIGNsZWFyKCkgbWV0aG9kcy4KLS8vCi0vLyBJZiBjb250YWluZXIgaXMgTlVMTCwgdGhpcyBm
dW5jdGlvbiBpcyBhIG5vLW9wLgotLy8KLS8vIEFzIGFuIGFsdGVybmF0aXZlIHRvIGNhbGxpbmcg
U1RMRGVsZXRlRWxlbWVudHMoKSBkaXJlY3RseSwgY29uc2lkZXIKLS8vIEVsZW1lbnREZWxldGVy
IChkZWZpbmVkIGJlbG93KSwgd2hpY2ggZW5zdXJlcyB0aGF0IHlvdXIgY29udGFpbmVyJ3MgZWxl
bWVudHMKLS8vIGFyZSBkZWxldGVkIHdoZW4gdGhlIEVsZW1lbnREZWxldGVyIGdvZXMgb3V0IG9m
IHNjb3BlLgotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIFNUTERlbGV0ZUVsZW1lbnRzKFQgKmNv
bnRhaW5lcikgewotICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuOwotICBTVExEZWxldGVDb250YWlu
ZXJQb2ludGVycyhjb250YWluZXItPmJlZ2luKCksIGNvbnRhaW5lci0+ZW5kKCkpOwotICBjb250
YWluZXItPmNsZWFyKCk7Ci19Ci0KLS8vIEdpdmVuIGFuIFNUTCBjb250YWluZXIgY29uc2lzdGlu
ZyBvZiAoa2V5LCB2YWx1ZSkgcGFpcnMsIFNUTERlbGV0ZVZhbHVlcwotLy8gZGVsZXRlcyBhbGwg
dGhlICJ2YWx1ZSIgY29tcG9uZW50cyBhbmQgY2xlYXJzIHRoZSBjb250YWluZXIuICBEb2VzIG5v
dGhpbmcKLS8vIGluIHRoZSBjYXNlIGl0J3MgZ2l2ZW4gYSBOVUxMIHBvaW50ZXIuCi0KLXRlbXBs
YXRlIDxjbGFzcyBUPgotdm9pZCBTVExEZWxldGVWYWx1ZXMoVCAqdikgewotICBpZiAoIXYpIHJl
dHVybjsKLSAgZm9yICh0eXBlbmFtZSBUOjppdGVyYXRvciBpID0gdi0+YmVnaW4oKTsgaSAhPSB2
LT5lbmQoKTsgKytpKSB7Ci0gICAgZGVsZXRlIGktPnNlY29uZDsKLSAgfQotICB2LT5jbGVhcigp
OwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUK
LQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfU1RVQlNfU1RMX1VUSUxfSF9fCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk4OTQ3NGI3NDcwNGQxYWQ2OTlhNGViNzlkMTM1YTEyZjljNDQ3NjAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0cmluZ3BpZWNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdHJpbmdwaWVjZS5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8YWxn
b3JpdGhtPgotI2luY2x1ZGUgPGNsaW1pdHM+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUg
PG9zdHJlYW0+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLXN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG8sIFN0cmluZ1BpZWNlIHBpZWNl
KSB7Ci0gIG8ud3JpdGUocGllY2UuZGF0YSgpLCBwaWVjZS5zaXplKCkpOwotICByZXR1cm4gbzsK
LX0KLQotLy8gT3V0LW9mLWxpbmUgZXJyb3IgcGF0aC4KLXZvaWQgU3RyaW5nUGllY2U6OkxvZ0Zh
dGFsU2l6ZVRvb0JpZyhzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogZGV0YWlscykgewotICBHT09H
TEVfTE9HKEZBVEFMKSA8PCAic2l6ZSB0b28gYmlnOiAiIDw8IHNpemUgPDwgIiBkZXRhaWxzOiAi
IDw8IGRldGFpbHM7Ci19Ci0KLVN0cmluZ1BpZWNlOjpTdHJpbmdQaWVjZShTdHJpbmdQaWVjZSB4
LCBzdHJpbmdwaWVjZV9zc2l6ZV90eXBlIHBvcykKLSAgICA6IHB0cl8oeC5wdHJfICsgcG9zKSwg
bGVuZ3RoXyh4Lmxlbmd0aF8gLSBwb3MpIHsKLSAgR09PR0xFX0RDSEVDS19MRSgwLCBwb3MpOwot
ICBHT09HTEVfRENIRUNLX0xFKHBvcywgeC5sZW5ndGhfKTsKLX0KLQotU3RyaW5nUGllY2U6OlN0
cmluZ1BpZWNlKFN0cmluZ1BpZWNlIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5n
cGllY2Vfc3NpemVfdHlwZSBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncGll
Y2Vfc3NpemVfdHlwZSBsZW4pCi0gICAgOiBwdHJfKHgucHRyXyArIHBvcyksIGxlbmd0aF8oc3Rk
OjptaW4obGVuLCB4Lmxlbmd0aF8gLSBwb3MpKSB7Ci0gIEdPT0dMRV9EQ0hFQ0tfTEUoMCwgcG9z
KTsKLSAgR09PR0xFX0RDSEVDS19MRShwb3MsIHgubGVuZ3RoXyk7Ci0gIEdPT0dMRV9EQ0hFQ0tf
R0UobGVuLCAwKTsKLX0KLQotdm9pZCBTdHJpbmdQaWVjZTo6Q29weVRvU3RyaW5nKHN0cmluZyog
dGFyZ2V0KSBjb25zdCB7Ci0gIHRhcmdldC0+YXNzaWduKHB0cl8sIGxlbmd0aF8pOwotfQotCi12
b2lkIFN0cmluZ1BpZWNlOjpBcHBlbmRUb1N0cmluZyhzdHJpbmcqIHRhcmdldCkgY29uc3Qgewot
ICB0YXJnZXQtPmFwcGVuZChwdHJfLCBsZW5ndGhfKTsKLX0KLQotYm9vbCBTdHJpbmdQaWVjZTo6
Q29uc3VtZShTdHJpbmdQaWVjZSB4KSB7Ci0gIGlmIChzdGFydHNfd2l0aCh4KSkgewotICAgIHB0
cl8gKz0geC5sZW5ndGhfOwotICAgIGxlbmd0aF8gLT0geC5sZW5ndGhfOwotICAgIHJldHVybiB0
cnVlOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTdHJpbmdQaWVjZTo6Q29uc3Vt
ZUZyb21FbmQoU3RyaW5nUGllY2UgeCkgewotICBpZiAoZW5kc193aXRoKHgpKSB7Ci0gICAgbGVu
Z3RoXyAtPSB4Lmxlbmd0aF87Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNl
OwotfQotCi1zdHJpbmdwaWVjZV9zc2l6ZV90eXBlIFN0cmluZ1BpZWNlOjpjb3B5KGNoYXIqIGJ1
ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIG4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBwb3Mp
IGNvbnN0IHsKLSAgc3RyaW5ncGllY2Vfc3NpemVfdHlwZSByZXQgPSBzdGQ6Om1pbihsZW5ndGhf
IC0gcG9zLCBuKTsKLSAgbWVtY3B5KGJ1ZiwgcHRyXyArIHBvcywgcmV0KTsKLSAgcmV0dXJuIHJl
dDsKLX0KLQotYm9vbCBTdHJpbmdQaWVjZTo6Y29udGFpbnMoU3RyaW5nUGllY2UgcykgY29uc3Qg
ewotICByZXR1cm4gZmluZChzLCAwKSAhPSBucG9zOwotfQotCi1zdHJpbmdwaWVjZV9zc2l6ZV90
eXBlIFN0cmluZ1BpZWNlOjpmaW5kKFN0cmluZ1BpZWNlIHMsIHNpemVfdHlwZSBwb3MpIGNvbnN0
IHsKLSAgaWYgKGxlbmd0aF8gPD0gMCB8fCBwb3MgPiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGxl
bmd0aF8pKSB7Ci0gICAgaWYgKGxlbmd0aF8gPT0gMCAmJiBwb3MgPT0gMCAmJiBzLmxlbmd0aF8g
PT0gMCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5wb3M7Ci0gIH0KLSAgY29uc3QgY2hhciAqcmVz
dWx0ID0gc3RkOjpzZWFyY2gocHRyXyArIHBvcywgcHRyXyArIGxlbmd0aF8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHMucHRyXywgcy5wdHJfICsgcy5sZW5ndGhfKTsKLSAg
cmV0dXJuIHJlc3VsdCA9PSBwdHJfICsgbGVuZ3RoXyA/IG5wb3MgOiByZXN1bHQgLSBwdHJfOwot
fQotCi1zdHJpbmdwaWVjZV9zc2l6ZV90eXBlIFN0cmluZ1BpZWNlOjpmaW5kKGNoYXIgYywgc2l6
ZV90eXBlIHBvcykgY29uc3QgewotICBpZiAobGVuZ3RoXyA8PSAwIHx8IHBvcyA+PSBzdGF0aWNf
Y2FzdDxzaXplX3R5cGU+KGxlbmd0aF8pKSB7Ci0gICAgcmV0dXJuIG5wb3M7Ci0gIH0KLSAgY29u
c3QgY2hhciogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KAotICAgICAgbWVtY2hy
KHB0cl8gKyBwb3MsIGMsIGxlbmd0aF8gLSBwb3MpKTsKLSAgcmV0dXJuIHJlc3VsdCAhPSBOVUxM
ID8gcmVzdWx0IC0gcHRyXyA6IG5wb3M7Ci19Ci0KLXN0cmluZ3BpZWNlX3NzaXplX3R5cGUgU3Ry
aW5nUGllY2U6OnJmaW5kKFN0cmluZ1BpZWNlIHMsIHNpemVfdHlwZSBwb3MpIGNvbnN0IHsKLSAg
aWYgKGxlbmd0aF8gPCBzLmxlbmd0aF8pIHJldHVybiBucG9zOwotICBjb25zdCBzaXplX3QgdWxl
biA9IGxlbmd0aF87Ci0gIGlmIChzLmxlbmd0aF8gPT0gMCkgcmV0dXJuIHN0ZDo6bWluKHVsZW4s
IHBvcyk7Ci0KLSAgY29uc3QgY2hhciogbGFzdCA9IHB0cl8gKyBzdGQ6Om1pbih1bGVuIC0gcy5s
ZW5ndGhfLCBwb3MpICsgcy5sZW5ndGhfOwotICBjb25zdCBjaGFyKiByZXN1bHQgPSBzdGQ6OmZp
bmRfZW5kKHB0cl8sIGxhc3QsIHMucHRyXywgcy5wdHJfICsgcy5sZW5ndGhfKTsKLSAgcmV0dXJu
IHJlc3VsdCAhPSBsYXN0ID8gcmVzdWx0IC0gcHRyXyA6IG5wb3M7Ci19Ci0KLS8vIFNlYXJjaCBy
YW5nZSBpcyBbMC4ucG9zXSBpbmNsdXNpdmUuICBJZiBwb3MgPT0gbnBvcywgc2VhcmNoIGV2ZXJ5
dGhpbmcuCi1zdHJpbmdwaWVjZV9zc2l6ZV90eXBlIFN0cmluZ1BpZWNlOjpyZmluZChjaGFyIGMs
IHNpemVfdHlwZSBwb3MpIGNvbnN0IHsKLSAgLy8gTm90ZTogbWVtcmNocigpIGlzIG5vdCBhdmFp
bGFibGUgb24gV2luZG93cy4KLSAgaWYgKGxlbmd0aF8gPD0gMCkgcmV0dXJuIG5wb3M7Ci0gIGZv
ciAoc3RyaW5ncGllY2Vfc3NpemVfdHlwZSBpID0KLSAgICAgIHN0ZDo6bWluKHBvcywgc3RhdGlj
X2Nhc3Q8c2l6ZV90eXBlPihsZW5ndGhfIC0gMSkpOwotICAgICAgIGkgPj0gMDsgLS1pKSB7Ci0g
ICAgaWYgKHB0cl9baV0gPT0gYykgewotICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICB9Ci0gIHJl
dHVybiBucG9zOwotfQotCi0vLyBGb3IgZWFjaCBjaGFyYWN0ZXIgaW4gY2hhcmFjdGVyc193YW50
ZWQsIHNldHMgdGhlIGluZGV4IGNvcnJlc3BvbmRpbmcKLS8vIHRvIHRoZSBBU0NJSSBjb2RlIG9m
IHRoYXQgY2hhcmFjdGVyIHRvIDEgaW4gdGFibGUuICBUaGlzIGlzIHVzZWQgYnkKLS8vIHRoZSBm
aW5kXy4qX29mIG1ldGhvZHMgYmVsb3cgdG8gdGVsbCB3aGV0aGVyIG9yIG5vdCBhIGNoYXJhY3Rl
ciBpcyBpbgotLy8gdGhlIGxvb2t1cCB0YWJsZSBpbiBjb25zdGFudCB0aW1lLgotLy8gVGhlIGFy
Z3VtZW50IGB0YWJsZScgbXVzdCBiZSBhbiBhcnJheSB0aGF0IGlzIGxhcmdlIGVub3VnaCB0byBo
b2xkIGFsbAotLy8gdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBhbiB1bnNpZ25lZCBjaGFyLiAgVGh1
cyBpdCBzaG91bGQgYmUgYmUgZGVjbGFyZWQKLS8vIGFzIGZvbGxvd3M6Ci0vLyAgIGJvb2wgdGFi
bGVbVUNIQVJfTUFYICsgMV0KLXN0YXRpYyBpbmxpbmUgdm9pZCBCdWlsZExvb2t1cFRhYmxlKFN0
cmluZ1BpZWNlIGNoYXJhY3RlcnNfd2FudGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCogdGFibGUpIHsKLSAgY29uc3Qgc3RyaW5ncGllY2Vfc3NpemVfdHlwZSBs
ZW5ndGggPSBjaGFyYWN0ZXJzX3dhbnRlZC5sZW5ndGgoKTsKLSAgY29uc3QgY2hhciogY29uc3Qg
ZGF0YSA9IGNoYXJhY3RlcnNfd2FudGVkLmRhdGEoKTsKLSAgZm9yIChzdHJpbmdwaWVjZV9zc2l6
ZV90eXBlIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICB0YWJsZVtzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihkYXRhW2ldKV0gPSB0cnVlOwotICB9Ci19Ci0KLXN0cmluZ3BpZWNlX3Nz
aXplX3R5cGUgU3RyaW5nUGllY2U6OmZpbmRfZmlyc3Rfb2YoU3RyaW5nUGllY2UgcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHBv
cykgY29uc3QgewotICBpZiAobGVuZ3RoXyA8PSAwIHx8IHMubGVuZ3RoXyA8PSAwKSB7Ci0gICAg
cmV0dXJuIG5wb3M7Ci0gIH0KLSAgLy8gQXZvaWQgdGhlIGNvc3Qgb2YgQnVpbGRMb29rdXBUYWJs
ZSgpIGZvciBhIHNpbmdsZS1jaGFyYWN0ZXIgc2VhcmNoLgotICBpZiAocy5sZW5ndGhfID09IDEp
IHJldHVybiBmaW5kX2ZpcnN0X29mKHMucHRyX1swXSwgcG9zKTsKLQotICBib29sIGxvb2t1cFtV
Q0hBUl9NQVggKyAxXSA9IHsgZmFsc2UgfTsKLSAgQnVpbGRMb29rdXBUYWJsZShzLCBsb29rdXAp
OwotICBmb3IgKHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgaSA9IHBvczsgaSA8IGxlbmd0aF87ICsr
aSkgewotICAgIGlmIChsb29rdXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4ocHRyX1tpXSld
KSB7Ci0gICAgICByZXR1cm4gaTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG5wb3M7Ci19Ci0KLXN0
cmluZ3BpZWNlX3NzaXplX3R5cGUgU3RyaW5nUGllY2U6OmZpbmRfZmlyc3Rfbm90X29mKFN0cmlu
Z1BpZWNlIHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3R5cGUgcG9zKSBjb25zdCB7Ci0gIGlmIChsZW5ndGhfIDw9IDApIHJldHVy
biBucG9zOwotICBpZiAocy5sZW5ndGhfIDw9IDApIHJldHVybiAwOwotICAvLyBBdm9pZCB0aGUg
Y29zdCBvZiBCdWlsZExvb2t1cFRhYmxlKCkgZm9yIGEgc2luZ2xlLWNoYXJhY3RlciBzZWFyY2gu
Ci0gIGlmIChzLmxlbmd0aF8gPT0gMSkgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mKHMucHRyX1sw
XSwgcG9zKTsKLQotICBib29sIGxvb2t1cFtVQ0hBUl9NQVggKyAxXSA9IHsgZmFsc2UgfTsKLSAg
QnVpbGRMb29rdXBUYWJsZShzLCBsb29rdXApOwotICBmb3IgKHN0cmluZ3BpZWNlX3NzaXplX3R5
cGUgaSA9IHBvczsgaSA8IGxlbmd0aF87ICsraSkgewotICAgIGlmICghbG9va3VwW3N0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KHB0cl9baV0pXSkgewotICAgICAgcmV0dXJuIGk7Ci0gICAgfQot
ICB9Ci0gIHJldHVybiBucG9zOwotfQotCi1zdHJpbmdwaWVjZV9zc2l6ZV90eXBlIFN0cmluZ1Bp
ZWNlOjpmaW5kX2ZpcnN0X25vdF9vZihjaGFyIGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgcG9zKSBjb25zdCB7Ci0gIGlm
IChsZW5ndGhfIDw9IDApIHJldHVybiBucG9zOwotCi0gIGZvciAoOyBwb3MgPCBzdGF0aWNfY2Fz
dDxzaXplX3R5cGU+KGxlbmd0aF8pOyArK3BvcykgewotICAgIGlmIChwdHJfW3Bvc10gIT0gYykg
ewotICAgICAgcmV0dXJuIHBvczsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG5wb3M7Ci19Ci0KLXN0
cmluZ3BpZWNlX3NzaXplX3R5cGUgU3RyaW5nUGllY2U6OmZpbmRfbGFzdF9vZihTdHJpbmdQaWVj
ZSBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdHlwZSBwb3MpIGNvbnN0IHsKLSAgaWYgKGxlbmd0aF8gPD0gMCB8fCBzLmxlbmd0aF8gPD0g
MCkgcmV0dXJuIG5wb3M7Ci0gIC8vIEF2b2lkIHRoZSBjb3N0IG9mIEJ1aWxkTG9va3VwVGFibGUo
KSBmb3IgYSBzaW5nbGUtY2hhcmFjdGVyIHNlYXJjaC4KLSAgaWYgKHMubGVuZ3RoXyA9PSAxKSBy
ZXR1cm4gZmluZF9sYXN0X29mKHMucHRyX1swXSwgcG9zKTsKLQotICBib29sIGxvb2t1cFtVQ0hB
Ul9NQVggKyAxXSA9IHsgZmFsc2UgfTsKLSAgQnVpbGRMb29rdXBUYWJsZShzLCBsb29rdXApOwot
ICBmb3IgKHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgaSA9Ci0gICAgICAgc3RkOjptaW4ocG9zLCBz
dGF0aWNfY2FzdDxzaXplX3R5cGU+KGxlbmd0aF8gLSAxKSk7IGkgPj0gMDsgLS1pKSB7Ci0gICAg
aWYgKGxvb2t1cFtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihwdHJfW2ldKV0pIHsKLSAgICAg
IHJldHVybiBpOwotICAgIH0KLSAgfQotICByZXR1cm4gbnBvczsKLX0KLQotc3RyaW5ncGllY2Vf
c3NpemVfdHlwZSBTdHJpbmdQaWVjZTo6ZmluZF9sYXN0X25vdF9vZihTdHJpbmdQaWVjZSBzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3R5cGUgcG9zKSBjb25zdCB7Ci0gIGlmIChsZW5ndGhfIDw9IDApIHJldHVybiBucG9zOwotCi0g
IHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgaSA9IHN0ZDo6bWluKHBvcywgc3RhdGljX2Nhc3Q8c2l6
ZV90eXBlPihsZW5ndGhfIC0gMSkpOwotICBpZiAocy5sZW5ndGhfIDw9IDApIHJldHVybiBpOwot
Ci0gIC8vIEF2b2lkIHRoZSBjb3N0IG9mIEJ1aWxkTG9va3VwVGFibGUoKSBmb3IgYSBzaW5nbGUt
Y2hhcmFjdGVyIHNlYXJjaC4KLSAgaWYgKHMubGVuZ3RoXyA9PSAxKSByZXR1cm4gZmluZF9sYXN0
X25vdF9vZihzLnB0cl9bMF0sIHBvcyk7Ci0KLSAgYm9vbCBsb29rdXBbVUNIQVJfTUFYICsgMV0g
PSB7IGZhbHNlIH07Ci0gIEJ1aWxkTG9va3VwVGFibGUocywgbG9va3VwKTsKLSAgZm9yICg7IGkg
Pj0gMDsgLS1pKSB7Ci0gICAgaWYgKCFsb29rdXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
cHRyX1tpXSldKSB7Ci0gICAgICByZXR1cm4gaTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG5wb3M7
Ci19Ci0KLXN0cmluZ3BpZWNlX3NzaXplX3R5cGUgU3RyaW5nUGllY2U6OmZpbmRfbGFzdF9ub3Rf
b2YoY2hhciBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3R5cGUgcG9zKSBjb25zdCB7Ci0gIGlmIChsZW5ndGhfIDw9IDApIHJldHVy
biBucG9zOwotCi0gIGZvciAoc3RyaW5ncGllY2Vfc3NpemVfdHlwZSBpID0KLSAgICAgICBzdGQ6
Om1pbihwb3MsIHN0YXRpY19jYXN0PHNpemVfdHlwZT4obGVuZ3RoXyAtIDEpKTsgaSA+PSAwOyAt
LWkpIHsKLSAgICBpZiAocHRyX1tpXSAhPSBjKSB7Ci0gICAgICByZXR1cm4gaTsKLSAgICB9Ci0g
IH0KLSAgcmV0dXJuIG5wb3M7Ci19Ci0KLVN0cmluZ1BpZWNlIFN0cmluZ1BpZWNlOjpzdWJzdHIo
c2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0IHsKLSAgaWYgKHBvcyA+IGxlbmd0aF8p
IHBvcyA9IGxlbmd0aF87Ci0gIGlmIChuID4gbGVuZ3RoXyAtIHBvcykgbiA9IGxlbmd0aF8gLSBw
b3M7Ci0gIHJldHVybiBTdHJpbmdQaWVjZShwdHJfICsgcG9zLCBuKTsKLX0KLQotY29uc3QgU3Ry
aW5nUGllY2U6OnNpemVfdHlwZSBTdHJpbmdQaWVjZTo6bnBvcyA9IHNpemVfdHlwZSgtMSk7Ci0K
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3BpZWNlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTE2NzE2NTk0MGQyNGU4OGNjMjliZTBmZTRkZTk4YTg1NzkyMDVhYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvc3RyaW5ncGllY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MSArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQSBTdHJpbmdQaWVjZSBwb2ludHMgdG8g
cGFydCBvciBhbGwgb2YgYSBzdHJpbmcsIENvcmQsIGRvdWJsZS1xdW90ZWQgc3RyaW5nCi0vLyBs
aXRlcmFsLCBvciBvdGhlciBzdHJpbmctbGlrZSBvYmplY3QuICBBIFN0cmluZ1BpZWNlIGRvZXMg
Km5vdCogb3duIHRoZQotLy8gc3RyaW5nIHRvIHdoaWNoIGl0IHBvaW50cy4gIEEgU3RyaW5nUGll
Y2UgaXMgbm90IG51bGwtdGVybWluYXRlZC4KLS8vCi0vLyBZb3UgY2FuIHVzZSBTdHJpbmdQaWVj
ZSBhcyBhIGZ1bmN0aW9uIG9yIG1ldGhvZCBwYXJhbWV0ZXIuICBBIFN0cmluZ1BpZWNlCi0vLyBw
YXJhbWV0ZXIgY2FuIHJlY2VpdmUgYSBkb3VibGUtcXVvdGVkIHN0cmluZyBsaXRlcmFsIGFyZ3Vt
ZW50LCBhICJjb25zdAotLy8gY2hhcioiIGFyZ3VtZW50LCBhIHN0cmluZyBhcmd1bWVudCwgb3Ig
YSBTdHJpbmdQaWVjZSBhcmd1bWVudCB3aXRoIG5vIGRhdGEKLS8vIGNvcHlpbmcuICBTeXN0ZW1h
dGljIHVzZSBvZiBTdHJpbmdQaWVjZSBmb3IgYXJndW1lbnRzIHJlZHVjZXMgZGF0YQotLy8gY29w
aWVzIGFuZCBzdHJsZW4oKSBjYWxscy4KLS8vCi0vLyBQcmVmZXIgcGFzc2luZyBTdHJpbmdQaWVj
ZXMgYnkgdmFsdWU6Ci0vLyAgIHZvaWQgTXlGdW5jdGlvbihTdHJpbmdQaWVjZSBhcmcpOwotLy8g
SWYgY2lyY3Vtc3RhbmNlcyByZXF1aXJlLCB5b3UgbWF5IGFsc28gcGFzcyBieSBjb25zdCByZWZl
cmVuY2U6Ci0vLyAgIHZvaWQgTXlGdW5jdGlvbihjb25zdCBTdHJpbmdQaWVjZSYgYXJnKTsgIC8v
IG5vdCBwcmVmZXJyZWQKLS8vIEJvdGggb2YgdGhlc2UgaGF2ZSB0aGUgc2FtZSBsaWZldGltZSBz
ZW1hbnRpY3MuICBQYXNzaW5nIGJ5IHZhbHVlCi0vLyBnZW5lcmF0ZXMgc2xpZ2h0bHkgc21hbGxl
ciBjb2RlLiAgRm9yIG1vcmUgZGlzY3Vzc2lvbiwgc2VlIHRoZSB0aHJlYWQKLS8vIGdvL3N0cmlu
Z3BpZWNlYnl2YWx1ZSBvbiBjLXVzZXJzLgotLy8KLS8vIFN0cmluZ1BpZWNlIGlzIGFsc28gc3Vp
dGFibGUgZm9yIGxvY2FsIHZhcmlhYmxlcyBpZiB5b3Uga25vdyB0aGF0Ci0vLyB0aGUgbGlmZXRp
bWUgb2YgdGhlIHVuZGVybHlpbmcgb2JqZWN0IGlzIGxvbmdlciB0aGFuIHRoZSBsaWZldGltZQot
Ly8gb2YgeW91ciBTdHJpbmdQaWVjZSB2YXJpYWJsZS4KLS8vCi0vLyBCZXdhcmUgb2YgYmluZGlu
ZyBhIFN0cmluZ1BpZWNlIHRvIGEgdGVtcG9yYXJ5OgotLy8gICBTdHJpbmdQaWVjZSBzcCA9IG9i
ai5NZXRob2RSZXR1cm5pbmdTdHJpbmcoKTsgIC8vIEJBRDogbGlmZXRpbWUgcHJvYmxlbQotLy8K
LS8vIFRoaXMgY29kZSBpcyBva2F5OgotLy8gICBzdHJpbmcgc3RyID0gb2JqLk1ldGhvZFJldHVy
bmluZ1N0cmluZygpOyAgLy8gc3RyIG93bnMgaXRzIGNvbnRlbnRzCi0vLyAgIFN0cmluZ1BpZWNl
IHNwKHN0cik7ICAvLyBHT09ELCBiZWNhdXNlIHN0ciBvdXRsaXZlcyBzcAotLy8KLS8vIFN0cmlu
Z1BpZWNlIGlzIHNvbWV0aW1lcyBhIHBvb3IgY2hvaWNlIGZvciBhIHJldHVybiB2YWx1ZSBhbmQg
dXN1YWxseSBhIHBvb3IKLS8vIGNob2ljZSBmb3IgYSBkYXRhIG1lbWJlci4gIElmIHlvdSBkbyB1
c2UgYSBTdHJpbmdQaWVjZSB0aGlzIHdheSwgaXQgaXMgeW91cgotLy8gcmVzcG9uc2liaWxpdHkg
dG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IHRoZSBTdHJpbmdQaWVjZQot
Ly8gb3V0bGl2ZXMgdGhlIFN0cmluZ1BpZWNlLgotLy8KLS8vIEEgU3RyaW5nUGllY2UgbWF5IHJl
cHJlc2VudCBqdXN0IHBhcnQgb2YgYSBzdHJpbmc7IHRodXMgdGhlIG5hbWUgIlBpZWNlIi4KLS8v
IEZvciBleGFtcGxlLCB3aGVuIHNwbGl0dGluZyBhIHN0cmluZywgdmVjdG9yPFN0cmluZ1BpZWNl
PiBpcyBhIG5hdHVyYWwgZGF0YQotLy8gdHlwZSBmb3IgdGhlIG91dHB1dC4gIEZvciBhbm90aGVy
IGV4YW1wbGUsIGEgQ29yZCBpcyBhIG5vbi1jb250aWd1b3VzLAotLy8gcG90ZW50aWFsbHkgdmVy
eSBsb25nIHN0cmluZy1saWtlIG9iamVjdC4gIFRoZSBDb3JkIGNsYXNzIGhhcyBhbiBpbnRlcmZh
Y2UKLS8vIHRoYXQgaXRlcmF0aXZlbHkgcHJvdmlkZXMgU3RyaW5nUGllY2Ugb2JqZWN0cyB0aGF0
IHBvaW50IHRvIHRoZQotLy8gc3VjY2Vzc2l2ZSBwaWVjZXMgb2YgYSBDb3JkIG9iamVjdC4KLS8v
Ci0vLyBBIFN0cmluZ1BpZWNlIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuICBJZiB5b3Ugd3JpdGUg
Y29kZSB0aGF0IHNjYW5zIGEKLS8vIFN0cmluZ1BpZWNlLCB5b3UgbXVzdCBjaGVjayBpdHMgbGVu
Z3RoIGJlZm9yZSByZWFkaW5nIGFueSBjaGFyYWN0ZXJzLgotLy8gQ29tbW9uIGlkaW9tcyB0aGF0
IHdvcmsgb24gbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MgZG8gbm90IHdvcmsgb24KLS8vIFN0cmlu
Z1BpZWNlIG9iamVjdHMuCi0vLwotLy8gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBjcmVhdGUg
YSBudWxsIFN0cmluZ1BpZWNlOgotLy8gICBTdHJpbmdQaWVjZSgpCi0vLyAgIFN0cmluZ1BpZWNl
KE5VTEwpCi0vLyAgIFN0cmluZ1BpZWNlKE5VTEwsIDApCi0vLyBGb3IgYWxsIG9mIHRoZSBhYm92
ZSwgc3AuZGF0YSgpID09IE5VTEwsIHNwLmxlbmd0aCgpID09IDAsCi0vLyBhbmQgc3AuZW1wdHko
KSA9PSB0cnVlLiAgQWxzbywgaWYgeW91IGNyZWF0ZSBhIFN0cmluZ1BpZWNlIHdpdGgKLS8vIGEg
bm9uLU5VTEwgcG9pbnRlciB0aGVuIHNwLmRhdGEoKSAhPSBOVUxMLiAgT25jZSBjcmVhdGVkLAot
Ly8gc3AuZGF0YSgpIHdpbGwgc3RheSBlaXRoZXIgTlVMTCBvciBub3QtTlVMTCwgZXhjZXB0IGlm
IHlvdSBjYWxsCi0vLyBzcC5jbGVhcigpIG9yIHNwLnNldCgpLgotLy8KLS8vIFRodXMsIHlvdSBj
YW4gdXNlIFN0cmluZ1BpZWNlKE5VTEwpIHRvIHNpZ25hbCBhbiBvdXQtb2YtYmFuZCB2YWx1ZQot
Ly8gdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSBvdGhlciBTdHJpbmdQaWVjZSB2YWx1ZXMuICBUaGlz
IGlzIHNpbWlsYXIKLS8vIHRvIHRoZSB3YXkgdGhhdCBjb25zdCBjaGFyKiBwMSA9IE5VTEw7IGlz
IGRpZmZlcmVudCBmcm9tCi0vLyBjb25zdCBjaGFyKiBwMiA9ICIiOy4KLS8vCi0vLyBUaGVyZSBh
cmUgbWFueSB3YXlzIHRvIGNyZWF0ZSBhbiBlbXB0eSBTdHJpbmdQaWVjZToKLS8vICAgU3RyaW5n
UGllY2UoKQotLy8gICBTdHJpbmdQaWVjZShOVUxMKQotLy8gICBTdHJpbmdQaWVjZShOVUxMLCAw
KQotLy8gICBTdHJpbmdQaWVjZSgiIikKLS8vICAgU3RyaW5nUGllY2UoIiIsIDApCi0vLyAgIFN0
cmluZ1BpZWNlKCJhYmNkZWYiLCAwKQotLy8gICBTdHJpbmdQaWVjZSgiYWJjZGVmIis2LCAwKQot
Ly8gRm9yIGFsbCBvZiB0aGUgYWJvdmUsIHNwLmxlbmd0aCgpIHdpbGwgYmUgMCBhbmQgc3AuZW1w
dHkoKSB3aWxsIGJlIHRydWUuCi0vLyBGb3Igc29tZSBlbXB0eSBTdHJpbmdQaWVjZSB2YWx1ZXMs
IHNwLmRhdGEoKSB3aWxsIGJlIE5VTEwuCi0vLyBGb3Igc29tZSBlbXB0eSBTdHJpbmdQaWVjZSB2
YWx1ZXMsIHNwLmRhdGEoKSB3aWxsIG5vdCBiZSBOVUxMLgotLy8KLS8vIEJlIGNhcmVmdWwgbm90
IHRvIGNvbmZ1c2U6IG51bGwgU3RyaW5nUGllY2UgYW5kIGVtcHR5IFN0cmluZ1BpZWNlLgotLy8g
VGhlIHNldCBvZiBlbXB0eSBTdHJpbmdQaWVjZXMgcHJvcGVybHkgaW5jbHVkZXMgdGhlIHNldCBv
ZiBudWxsIFN0cmluZ1BpZWNlcy4KLS8vIFRoYXQgaXMsIGV2ZXJ5IG51bGwgU3RyaW5nUGllY2Ug
aXMgYW4gZW1wdHkgU3RyaW5nUGllY2UsCi0vLyBidXQgc29tZSBub24tbnVsbCBTdHJpbmdQaWVj
ZXMgYXJlIGVtcHR5IFN0cmluZ3BpZWNlcyB0b28uCi0vLwotLy8gQWxsIGVtcHR5IFN0cmluZ1Bp
ZWNlIHZhbHVlcyBjb21wYXJlIGVxdWFsIHRvIGVhY2ggb3RoZXIuCi0vLyBFdmVuIGEgbnVsbCBT
dHJpbmdQaWVjZXMgY29tcGFyZXMgZXF1YWwgdG8gYSBub24tbnVsbCBlbXB0eSBTdHJpbmdQaWVj
ZToKLS8vICBTdHJpbmdQaWVjZSgpID09IFN0cmluZ1BpZWNlKCIiLCAwKQotLy8gIFN0cmluZ1Bp
ZWNlKE5VTEwpID09IFN0cmluZ1BpZWNlKCJhYmMiLCAwKQotLy8gIFN0cmluZ1BpZWNlKE5VTEws
IDApID09IFN0cmluZ1BpZWNlKCJhYmNkZWYiKzYsIDApCi0vLwotLy8gTG9vayBjYXJlZnVsbHkg
YXQgdGhpcyBleGFtcGxlOgotLy8gICBTdHJpbmdQaWVjZSgiIikgPT0gTlVMTAotLy8gVHJ1ZSBv
ciBmYWxzZT8gIFRSVUUsIGJlY2F1c2UgU3RyaW5nUGllY2U6Om9wZXJhdG9yPT0gY29udmVydHMK
LS8vIHRoZSByaWdodC1oYW5kIHNpZGUgZnJvbSBOVUxMIHRvIFN0cmluZ1BpZWNlKE5VTEwpLAot
Ly8gYW5kIHRoZW4gY29tcGFyZXMgdHdvIHplcm8tbGVuZ3RoIHNwYW5zIG9mIGNoYXJhY3RlcnMu
Ci0vLyBIb3dldmVyLCB3ZSBhcmUgd29ya2luZyB0byBtYWtlIHRoaXMgZXhhbXBsZSBwcm9kdWNl
IGEgY29tcGlsZSBlcnJvci4KLS8vCi0vLyBTdXBwb3NlIHlvdSB3YW50IHRvIHdyaXRlOgotLy8g
ICBib29sIFRlc3RXaGF0PyhTdHJpbmdQaWVjZSBzcCkgeyByZXR1cm4gc3AgPT0gTlVMTDsgfSAg
Ly8gQkFECi0vLyBEbyBub3QgZG8gdGhhdC4gIFdyaXRlIG9uZSBvZiB0aGVzZSBpbnN0ZWFkOgot
Ly8gICBib29sIFRlc3ROdWxsKFN0cmluZ1BpZWNlIHNwKSB7IHJldHVybiBzcC5kYXRhKCkgPT0g
TlVMTDsgfQotLy8gICBib29sIFRlc3RFbXB0eShTdHJpbmdQaWVjZSBzcCkgeyByZXR1cm4gc3Au
ZW1wdHkoKTsgfQotLy8gVGhlIGludGVudCBvZiBUZXN0V2hhdD8gaXMgdW5jbGVhci4gIERpZCB5
b3UgbWVhbiBUZXN0TnVsbCBvciBUZXN0RW1wdHk/Ci0vLyBSaWdodCBub3csIFRlc3RXaGF0PyBi
ZWhhdmVzIGxpa2VzIFRlc3RFbXB0eS4KLS8vIFdlIGFyZSB3b3JraW5nIHRvIG1ha2UgVGVzdFdo
YXQ/IHByb2R1Y2UgYSBjb21waWxlIGVycm9yLgotLy8gVGVzdE51bGwgaXMgZ29vZCB0byB0ZXN0
IGZvciBhbiBvdXQtb2YtYmFuZCBzaWduYWwuCi0vLyBUZXN0RW1wdHkgaXMgZ29vZCB0byB0ZXN0
IGZvciBhbiBlbXB0eSBTdHJpbmdQaWVjZS4KLS8vCi0vLyBDYXZlYXRzIChhZ2Fpbik6Ci0vLyAo
MSkgVGhlIGxpZmV0aW1lIG9mIHRoZSBwb2ludGVkLXRvIHN0cmluZyAob3IgcGllY2Ugb2YgYSBz
dHJpbmcpCi0vLyAgICAgbXVzdCBiZSBsb25nZXIgdGhhbiB0aGUgbGlmZXRpbWUgb2YgdGhlIFN0
cmluZ1BpZWNlLgotLy8gKDIpIFRoZXJlIG1heSBvciBtYXkgbm90IGJlIGEgJ1wwJyBjaGFyYWN0
ZXIgYWZ0ZXIgdGhlIGVuZCBvZgotLy8gICAgIFN0cmluZ1BpZWNlIGRhdGEuCi0vLyAoMykgQSBu
dWxsIFN0cmluZ1BpZWNlIGlzIGVtcHR5LgotLy8gICAgIEFuIGVtcHR5IFN0cmluZ1BpZWNlIG1h
eSBvciBtYXkgbm90IGJlIGEgbnVsbCBTdHJpbmdQaWVjZS4KLQotI2lmbmRlZiBHT09HTEVfUFJP
VE9CVUZfU1RVQlNfU1RSSU5HUElFQ0VfSF8KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1NUVUJT
X1NUUklOR1BJRUNFX0hfCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdGRkZWYu
aD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8bGlt
aXRzPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oPgotCi1u
YW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0vLyBTdHJpbmdQaWVjZSBo
YXMgKnR3byogc2l6ZSB0eXBlcy4KLS8vIFN0cmluZ1BpZWNlOjpzaXplX3R5cGUKLS8vICAgaXMg
dW5zaWduZWQKLS8vICAgaXMgMzIgYml0cyBpbiBMUDMyLCA2NCBiaXRzIGluIExQNjQsIDY0IGJp
dHMgaW4gTExQNjQKLS8vICAgbm8gZnV0dXJlIGNoYW5nZXMgaW50ZW5kZWQKLS8vIHN0cmluZ3Bp
ZWNlX3NzaXplX3R5cGUKLS8vICAgaXMgc2lnbmVkCi0vLyAgIGlzIDMyIGJpdHMgaW4gTFAzMiwg
NjQgYml0cyBpbiBMUDY0LCA2NCBiaXRzIGluIExMUDY0Ci0vLyAgIGZ1dHVyZSBjaGFuZ2VzIGlu
dGVuZGVkOiBodHRwOi8vZ28vNjRCaXRTdHJpbmdQaWVjZQotLy8KLXR5cGVkZWYgc3RyaW5nOjpk
aWZmZXJlbmNlX3R5cGUgc3RyaW5ncGllY2Vfc3NpemVfdHlwZTsKLQotLy8gU1RSSU5HUElFQ0Vf
Q0hFQ0tfU0laRSBwcm90ZWN0cyB1cyBmcm9tIDMyLWJpdCBvdmVyZmxvd3MuCi0vLyBUT0RPKG1l
Yyk6IGRlbGV0ZSB0aGlzIGFmdGVyIHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgZ29lcyA2NCBiaXQu
Ci0jaWYgIWRlZmluZWQoTkRFQlVHKQotI2RlZmluZSBTVFJJTkdQSUVDRV9DSEVDS19TSVpFIDEK
LSNlbGlmIGRlZmluZWQoX0ZPUlRJRllfU09VUkNFKSAmJiBfRk9SVElGWV9TT1VSQ0UgPiAwCi0j
ZGVmaW5lIFNUUklOR1BJRUNFX0NIRUNLX1NJWkUgMQotI2Vsc2UKLSNkZWZpbmUgU1RSSU5HUElF
Q0VfQ0hFQ0tfU0laRSAwCi0jZW5kaWYKLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFN0cmlu
Z1BpZWNlIHsKLSBwcml2YXRlOgotICBjb25zdCBjaGFyKiBwdHJfOwotICBzdHJpbmdwaWVjZV9z
c2l6ZV90eXBlIGxlbmd0aF87Ci0KLSAgLy8gUHJldmVudCBvdmVyZmxvdyBpbiBkZWJ1ZyBtb2Rl
IG9yIGZvcnRpZmllZCBtb2RlLgotICAvLyBzaXplb2Yoc3RyaW5ncGllY2Vfc3NpemVfdHlwZSkg
bWF5IGJlIHNtYWxsZXIgdGhhbiBzaXplb2Yoc2l6ZV90KS4KLSAgc3RhdGljIHN0cmluZ3BpZWNl
X3NzaXplX3R5cGUgQ2hlY2tlZFNzaXplVEZyb21TaXplVChzaXplX3Qgc2l6ZSkgewotI2lmIFNU
UklOR1BJRUNFX0NIRUNLX1NJWkUgPiAwCi0jaWZkZWYgbWF4Ci0jdW5kZWYgbWF4Ci0jZW5kaWYK
LSAgICBpZiAoc2l6ZSA+IHN0YXRpY19jYXN0PHNpemVfdD4oCi0gICAgICAgIHN0ZDo6bnVtZXJp
Y19saW1pdHM8c3RyaW5ncGllY2Vfc3NpemVfdHlwZT46Om1heCgpKSkgewotICAgICAgLy8gU29t
ZSBwZW9wbGUgZ3JlcCBmb3IgdGhpcyBtZXNzYWdlIGluIGxvZ3MKLSAgICAgIC8vIHNvIHRha2Ug
Y2FyZSBpZiB5b3UgZXZlciBjaGFuZ2UgaXQuCi0gICAgICBMb2dGYXRhbFNpemVUb29CaWcoc2l6
ZSwgInNpemVfdCB0byBpbnQgY29udmVyc2lvbiIpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxzdHJpbmdwaWVjZV9zc2l6ZV90eXBlPihzaXplKTsKLSAgfQotCi0gIC8v
IE91dC1vZi1saW5lIGVycm9yIHBhdGguCi0gIHN0YXRpYyB2b2lkIExvZ0ZhdGFsU2l6ZVRvb0Jp
ZyhzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogZGV0YWlscyk7Ci0KLSBwdWJsaWM6Ci0gIC8vIFdl
IHByb3ZpZGUgbm9uLWV4cGxpY2l0IHNpbmdsZXRvbiBjb25zdHJ1Y3RvcnMgc28gdXNlcnMgY2Fu
IHBhc3MKLSAgLy8gaW4gYSAiY29uc3QgY2hhcioiIG9yIGEgInN0cmluZyIgd2hlcmV2ZXIgYSAi
U3RyaW5nUGllY2UiIGlzCi0gIC8vIGV4cGVjdGVkLgotICAvLwotICAvLyBTdHlsZSBndWlkZSBl
eGNlcHRpb24gZ3JhbnRlZDoKLSAgLy8gaHR0cDovL2dvdG8vc3R5bGUtZ3VpZGUtZXhjZXB0aW9u
LTIwOTc4Mjg4Ci0gIFN0cmluZ1BpZWNlKCkgOiBwdHJfKE5VTEwpLCBsZW5ndGhfKDApIHt9Ci0K
LSAgU3RyaW5nUGllY2UoY29uc3QgY2hhciogc3RyKSAgLy8gTk9MSU5UKHJ1bnRpbWUvZXhwbGlj
aXQpCi0gICAgICA6IHB0cl8oc3RyKSwgbGVuZ3RoXygwKSB7Ci0gICAgaWYgKHN0ciAhPSBOVUxM
KSB7Ci0gICAgICBsZW5ndGhfID0gQ2hlY2tlZFNzaXplVEZyb21TaXplVChzdHJsZW4oc3RyKSk7
Ci0gICAgfQotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIEFsbG9jYXRvcj4KLSAgU3RyaW5nUGll
Y2UoICAvLyBOT0xJTlQocnVudGltZS9leHBsaWNpdCkKLSAgICAgIGNvbnN0IHN0ZDo6YmFzaWNf
c3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIEFsbG9jYXRvcj4mIHN0cikKLSAg
ICAgIDogcHRyXyhzdHIuZGF0YSgpKSwgbGVuZ3RoXygwKSB7Ci0gICAgbGVuZ3RoXyA9IENoZWNr
ZWRTc2l6ZVRGcm9tU2l6ZVQoc3RyLnNpemUoKSk7Ci0gIH0KLSNpZiBkZWZpbmVkKEhBU19HTE9C
QUxfU1RSSU5HKQotICB0ZW1wbGF0ZSA8Y2xhc3MgQWxsb2NhdG9yPgotICBTdHJpbmdQaWVjZSgg
IC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQotICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPGNo
YXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIEFsbG9jYXRvcj4mIHN0cikKLSAgICAgIDogcHRy
XyhzdHIuZGF0YSgpKSwgbGVuZ3RoXygwKSB7Ci0gICAgbGVuZ3RoXyA9IENoZWNrZWRTc2l6ZVRG
cm9tU2l6ZVQoc3RyLnNpemUoKSk7Ci0gIH0KLSNlbmRpZgotCi0gIFN0cmluZ1BpZWNlKGNvbnN0
IGNoYXIqIG9mZnNldCwgc3RyaW5ncGllY2Vfc3NpemVfdHlwZSBsZW4pCi0gICAgICA6IHB0cl8o
b2Zmc2V0KSwgbGVuZ3RoXyhsZW4pIHsKLSAgICBhc3NlcnQobGVuID49IDApOwotICB9Ci0KLSAg
Ly8gU3Vic3RyaW5nIG9mIGFub3RoZXIgU3RyaW5nUGllY2UuCi0gIC8vIHBvcyBtdXN0IGJlIG5v
bi1uZWdhdGl2ZSBhbmQgPD0geC5sZW5ndGgoKS4KLSAgU3RyaW5nUGllY2UoU3RyaW5nUGllY2Ug
eCwgc3RyaW5ncGllY2Vfc3NpemVfdHlwZSBwb3MpOwotICAvLyBTdWJzdHJpbmcgb2YgYW5vdGhl
ciBTdHJpbmdQaWVjZS4KLSAgLy8gcG9zIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCA8PSB4Lmxl
bmd0aCgpLgotICAvLyBsZW4gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIHdpbGwgYmUgcGlubmVk
IHRvIGF0IG1vc3QgeC5sZW5ndGgoKSAtIHBvcy4KLSAgU3RyaW5nUGllY2UoU3RyaW5nUGllY2Ug
eCwKLSAgICAgICAgICAgICAgc3RyaW5ncGllY2Vfc3NpemVfdHlwZSBwb3MsCi0gICAgICAgICAg
ICAgIHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgbGVuKTsKLQotICAvLyBkYXRhKCkgbWF5IHJldHVy
biBhIHBvaW50ZXIgdG8gYSBidWZmZXIgd2l0aCBlbWJlZGRlZCBOVUxzLCBhbmQgdGhlCi0gIC8v
IHJldHVybmVkIGJ1ZmZlciBtYXkgb3IgbWF5IG5vdCBiZSBudWxsIHRlcm1pbmF0ZWQuICBUaGVy
ZWZvcmUgaXQgaXMKLSAgLy8gdHlwaWNhbGx5IGEgbWlzdGFrZSB0byBwYXNzIGRhdGEoKSB0byBh
IHJvdXRpbmUgdGhhdCBleHBlY3RzIGEgTlVMCi0gIC8vIHRlcm1pbmF0ZWQgc3RyaW5nLgotICBj
b25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gcHRyXzsgfQotICBzdHJpbmdwaWVjZV9z
c2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBsZW5ndGhfOyB9Ci0gIHN0cmluZ3BpZWNl
X3NzaXplX3R5cGUgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXzsgfQotICBib29sIGVt
cHR5KCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXyA9PSAwOyB9Ci0KLSAgdm9pZCBjbGVhcigpIHsK
LSAgICBwdHJfID0gTlVMTDsKLSAgICBsZW5ndGhfID0gMDsKLSAgfQotCi0gIHZvaWQgc2V0KGNv
bnN0IGNoYXIqIGRhdGEsIHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgbGVuKSB7Ci0gICAgYXNzZXJ0
KGxlbiA+PSAwKTsKLSAgICBwdHJfID0gZGF0YTsKLSAgICBsZW5ndGhfID0gbGVuOwotICB9Ci0K
LSAgdm9pZCBzZXQoY29uc3QgY2hhciogc3RyKSB7Ci0gICAgcHRyXyA9IHN0cjsKLSAgICBpZiAo
c3RyICE9IE5VTEwpCi0gICAgICBsZW5ndGhfID0gQ2hlY2tlZFNzaXplVEZyb21TaXplVChzdHJs
ZW4oc3RyKSk7Ci0gICAgZWxzZQotICAgICAgbGVuZ3RoXyA9IDA7Ci0gIH0KLQotICB2b2lkIHNl
dChjb25zdCB2b2lkKiBkYXRhLCBzdHJpbmdwaWVjZV9zc2l6ZV90eXBlIGxlbikgewotICAgIHB0
cl8gPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKTsKLSAgICBsZW5ndGhfID0g
bGVuOwotICB9Ci0KLSAgY2hhciBvcGVyYXRvcltdKHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgaSkg
Y29uc3QgewotICAgIGFzc2VydCgwIDw9IGkpOwotICAgIGFzc2VydChpIDwgbGVuZ3RoXyk7Ci0g
ICAgcmV0dXJuIHB0cl9baV07Ci0gIH0KLQotICB2b2lkIHJlbW92ZV9wcmVmaXgoc3RyaW5ncGll
Y2Vfc3NpemVfdHlwZSBuKSB7Ci0gICAgYXNzZXJ0KGxlbmd0aF8gPj0gbik7Ci0gICAgcHRyXyAr
PSBuOwotICAgIGxlbmd0aF8gLT0gbjsKLSAgfQotCi0gIHZvaWQgcmVtb3ZlX3N1ZmZpeChzdHJp
bmdwaWVjZV9zc2l6ZV90eXBlIG4pIHsKLSAgICBhc3NlcnQobGVuZ3RoXyA+PSBuKTsKLSAgICBs
ZW5ndGhfIC09IG47Ci0gIH0KLQotICAvLyByZXR1cm5zIHstMSwgMCwgMX0KLSAgaW50IGNvbXBh
cmUoU3RyaW5nUGllY2UgeCkgY29uc3QgewotICAgIGNvbnN0IHN0cmluZ3BpZWNlX3NzaXplX3R5
cGUgbWluX3NpemUgPQotICAgICAgICBsZW5ndGhfIDwgeC5sZW5ndGhfID8gbGVuZ3RoXyA6IHgu
bGVuZ3RoXzsKLSAgICBpbnQgciA9IG1lbWNtcChwdHJfLCB4LnB0cl8sIG1pbl9zaXplKTsKLSAg
ICBpZiAociA8IDApIHJldHVybiAtMTsKLSAgICBpZiAociA+IDApIHJldHVybiAxOwotICAgIGlm
IChsZW5ndGhfIDwgeC5sZW5ndGhfKSByZXR1cm4gLTE7Ci0gICAgaWYgKGxlbmd0aF8gPiB4Lmxl
bmd0aF8pIHJldHVybiAxOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgc3RyaW5nIGFzX3N0cmlu
ZygpIGNvbnN0IHsKLSAgICByZXR1cm4gVG9TdHJpbmcoKTsKLSAgfQotICAvLyBXZSBhbHNvIGRl
ZmluZSBUb1N0cmluZygpIGhlcmUsIHNpbmNlIG1hbnkgb3RoZXIgc3RyaW5nLWxpa2UKLSAgLy8g
aW50ZXJmYWNlcyBuYW1lIHRoZSByb3V0aW5lIHRoYXQgY29udmVydHMgdG8gYSBDKysgc3RyaW5n
Ci0gIC8vICJUb1N0cmluZyIsIGFuZCBpdCdzIGNvbmZ1c2luZyB0byBoYXZlIHRoZSBtZXRob2Qg
dGhhdCBkb2VzIHRoYXQKLSAgLy8gZm9yIGEgU3RyaW5nUGllY2UgYmUgY2FsbGVkICJhc19zdHJp
bmcoKSIuICBXZSBhbHNvIGxlYXZlIHRoZQotICAvLyAiYXNfc3RyaW5nKCkiIG1ldGhvZCBkZWZp
bmVkIGhlcmUgZm9yIGV4aXN0aW5nIGNvZGUuCi0gIHN0cmluZyBUb1N0cmluZygpIGNvbnN0IHsK
LSAgICBpZiAocHRyXyA9PSBOVUxMKSByZXR1cm4gc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmlu
ZyhkYXRhKCksIHNpemUoKSk7Ci0gIH0KLQotICBvcGVyYXRvciBzdHJpbmcoKSBjb25zdCB7Ci0g
ICAgcmV0dXJuIFRvU3RyaW5nKCk7Ci0gIH0KLQotICB2b2lkIENvcHlUb1N0cmluZyhzdHJpbmcq
IHRhcmdldCkgY29uc3Q7Ci0gIHZvaWQgQXBwZW5kVG9TdHJpbmcoc3RyaW5nKiB0YXJnZXQpIGNv
bnN0OwotCi0gIGJvb2wgc3RhcnRzX3dpdGgoU3RyaW5nUGllY2UgeCkgY29uc3QgewotICAgIHJl
dHVybiAobGVuZ3RoXyA+PSB4Lmxlbmd0aF8pICYmIChtZW1jbXAocHRyXywgeC5wdHJfLCB4Lmxl
bmd0aF8pID09IDApOwotICB9Ci0KLSAgYm9vbCBlbmRzX3dpdGgoU3RyaW5nUGllY2UgeCkgY29u
c3QgewotICAgIHJldHVybiAoKGxlbmd0aF8gPj0geC5sZW5ndGhfKSAmJgotICAgICAgICAgICAg
KG1lbWNtcChwdHJfICsgKGxlbmd0aF8teC5sZW5ndGhfKSwgeC5wdHJfLCB4Lmxlbmd0aF8pID09
IDApKTsKLSAgfQotCi0gIC8vIENoZWNrcyB3aGV0aGVyIFN0cmluZ1BpZWNlIHN0YXJ0cyB3aXRo
IHggYW5kIGlmIHNvIGFkdmFuY2VzIHRoZSBiZWdpbm5pbmcKLSAgLy8gb2YgaXQgdG8gcGFzdCB0
aGUgbWF0Y2guICBJdCdzIGJhc2ljYWxseSBhIHNob3J0Y3V0IGZvciBzdGFydHNfd2l0aAotICAv
LyBmb2xsb3dlZCBieSByZW1vdmVfcHJlZml4LgotICBib29sIENvbnN1bWUoU3RyaW5nUGllY2Ug
eCk7Ci0gIC8vIExpa2UgYWJvdmUgYnV0IGZvciB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCi0gIGJv
b2wgQ29uc3VtZUZyb21FbmQoU3RyaW5nUGllY2UgeCk7Ci0KLSAgLy8gc3RhbmRhcmQgU1RMIGNv
bnRhaW5lciBib2lsZXJwbGF0ZQotICB0eXBlZGVmIGNoYXIgdmFsdWVfdHlwZTsKLSAgdHlwZWRl
ZiBjb25zdCBjaGFyKiBwb2ludGVyOwotICB0eXBlZGVmIGNvbnN0IGNoYXImIHJlZmVyZW5jZTsK
LSAgdHlwZWRlZiBjb25zdCBjaGFyJiBjb25zdF9yZWZlcmVuY2U7Ci0gIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKLSAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwotICBzdGF0
aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3M7Ci0gIHR5cGVkZWYgY29uc3QgY2hhciogY29uc3RfaXRl
cmF0b3I7Ci0gIHR5cGVkZWYgY29uc3QgY2hhciogaXRlcmF0b3I7Ci0gIHR5cGVkZWYgc3RkOjpy
ZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwot
ICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRv
cjsKLSAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBwdHJfOyB9Ci0gIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIHB0cl8gKyBsZW5ndGhfOyB9Ci0gIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewotICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yKHB0cl8gKyBsZW5ndGhfKTsKLSAgfQotICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
KSBjb25zdCB7Ci0gICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IocHRyXyk7Ci0gIH0K
LSAgc3RyaW5ncGllY2Vfc3NpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGxlbmd0
aF87IH0KLSAgc3RyaW5ncGllY2Vfc3NpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IGxlbmd0aF87IH0KLQotICAvLyBjcHBsaW50LnB5IGVtaXRzIGEgZmFsc2UgcG9zaXRpdmUgW2J1
aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXQotICBzdHJpbmdwaWVjZV9zc2l6ZV90eXBlIGNvcHko
Y2hhciogYnVmLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OyAgLy8gTk9M
SU5UCi0KLSAgYm9vbCBjb250YWlucyhTdHJpbmdQaWVjZSBzKSBjb25zdDsKLQotICBzdHJpbmdw
aWVjZV9zc2l6ZV90eXBlIGZpbmQoU3RyaW5nUGllY2Ugcywgc2l6ZV90eXBlIHBvcyA9IDApIGNv
bnN0OwotICBzdHJpbmdwaWVjZV9zc2l6ZV90eXBlIGZpbmQoY2hhciBjLCBzaXplX3R5cGUgcG9z
ID0gMCkgY29uc3Q7Ci0gIHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgcmZpbmQoU3RyaW5nUGllY2Ug
cywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0OwotICBzdHJpbmdwaWVjZV9zc2l6ZV90eXBl
IHJmaW5kKGNoYXIgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0OwotCi0gIHN0cmluZ3Bp
ZWNlX3NzaXplX3R5cGUgZmluZF9maXJzdF9vZihTdHJpbmdQaWVjZSBzLCBzaXplX3R5cGUgcG9z
ID0gMCkgY29uc3Q7Ci0gIHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgZmluZF9maXJzdF9vZihjaGFy
IGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZpbmQoYywgcG9zKTsK
LSAgfQotICBzdHJpbmdwaWVjZV9zc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mKFN0cmluZ1Bp
ZWNlIHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
eXBlIHBvcyA9IDApIGNvbnN0OwotICBzdHJpbmdwaWVjZV9zc2l6ZV90eXBlIGZpbmRfZmlyc3Rf
bm90X29mKGNoYXIgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwotICBzdHJpbmdwaWVjZV9z
c2l6ZV90eXBlIGZpbmRfbGFzdF9vZihTdHJpbmdQaWVjZSBzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7Ci0gIHN0cmlu
Z3BpZWNlX3NzaXplX3R5cGUgZmluZF9sYXN0X29mKGNoYXIgYywgc2l6ZV90eXBlIHBvcyA9IG5w
b3MpIGNvbnN0IHsKLSAgICByZXR1cm4gcmZpbmQoYywgcG9zKTsKLSAgfQotICBzdHJpbmdwaWVj
ZV9zc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YoU3RyaW5nUGllY2UgcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25z
dDsKLSAgc3RyaW5ncGllY2Vfc3NpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mKGNoYXIgYywgc2l6
ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0OwotCi0gIFN0cmluZ1BpZWNlIHN1YnN0cihzaXplX3R5
cGUgcG9zLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0OwotfTsKLQotLy8gVGhpcyBsYXJnZSBm
dW5jdGlvbiBpcyBkZWZpbmVkIGlubGluZSBzbyB0aGF0IGluIGEgZmFpcmx5IGNvbW1vbiBjYXNl
IHdoZXJlCi0vLyBvbmUgb2YgdGhlIGFyZ3VtZW50cyBpcyBhIGxpdGVyYWwsIHRoZSBjb21waWxl
ciBjYW4gZWxpZGUgYSBsb3Qgb2YgdGhlCi0vLyBmb2xsb3dpbmcgY29tcGFyaXNvbnMuCi1pbmxp
bmUgYm9vbCBvcGVyYXRvcj09KFN0cmluZ1BpZWNlIHgsIFN0cmluZ1BpZWNlIHkpIHsKLSAgc3Ry
aW5ncGllY2Vfc3NpemVfdHlwZSBsZW4gPSB4LnNpemUoKTsKLSAgaWYgKGxlbiAhPSB5LnNpemUo
KSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHJldHVybiB4LmRhdGEoKSA9PSB5LmRh
dGEoKSB8fCBsZW4gPD0gMCB8fAotICAgICAgbWVtY21wKHguZGF0YSgpLCB5LmRhdGEoKSwgbGVu
KSA9PSAwOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KFN0cmluZ1BpZWNlIHgsIFN0cmlu
Z1BpZWNlIHkpIHsKLSAgcmV0dXJuICEoeCA9PSB5KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0
b3I8KFN0cmluZ1BpZWNlIHgsIFN0cmluZ1BpZWNlIHkpIHsKLSAgY29uc3Qgc3RyaW5ncGllY2Vf
c3NpemVfdHlwZSBtaW5fc2l6ZSA9Ci0gICAgICB4LnNpemUoKSA8IHkuc2l6ZSgpID8geC5zaXpl
KCkgOiB5LnNpemUoKTsKLSAgY29uc3QgaW50IHIgPSBtZW1jbXAoeC5kYXRhKCksIHkuZGF0YSgp
LCBtaW5fc2l6ZSk7Ci0gIHJldHVybiAociA8IDApIHx8IChyID09IDAgJiYgeC5zaXplKCkgPCB5
LnNpemUoKSk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPihTdHJpbmdQaWVjZSB4LCBTdHJp
bmdQaWVjZSB5KSB7Ci0gIHJldHVybiB5IDwgeDsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8
PShTdHJpbmdQaWVjZSB4LCBTdHJpbmdQaWVjZSB5KSB7Ci0gIHJldHVybiAhKHggPiB5KTsKLX0K
LQotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShTdHJpbmdQaWVjZSB4LCBTdHJpbmdQaWVjZSB5KSB7
Ci0gIHJldHVybiAhKHggPCB5KTsKLX0KLQotLy8gYWxsb3cgU3RyaW5nUGllY2UgdG8gYmUgbG9n
Z2VkCi1leHRlcm4gc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgbywgU3Ry
aW5nUGllY2UgcGllY2UpOwotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotLy8gU3RyaW5nUGllY2Ug
aXMgbm90IGEgUE9EIGFuZCBjYW4gbm90IGJlIHVzZWQgaW4gYW4gdW5pb24gKHByZSBDKysxMSku
IFdlCi0vLyBuZWVkIGEgUE9EIHZlcnNpb24gb2YgaXQuCi1zdHJ1Y3QgU3RyaW5nUGllY2VQb2Qg
ewotICAvLyBDcmVhdGUgZnJvbSBhIFN0cmluZ1BpZWNlLgotICBzdGF0aWMgU3RyaW5nUGllY2VQ
b2QgQ3JlYXRlRnJvbVN0cmluZ1BpZWNlKFN0cmluZ1BpZWNlIHN0cikgewotICAgIFN0cmluZ1Bp
ZWNlUG9kIHBvZDsKLSAgICBwb2QuZGF0YV8gPSBzdHIuZGF0YSgpOwotICAgIHBvZC5zaXplXyA9
IHN0ci5zaXplKCk7Ci0gICAgcmV0dXJuIHBvZDsKLSAgfQotCi0gIC8vIENhc3QgdG8gU3RyaW5n
UGllY2UuCi0gIG9wZXJhdG9yIFN0cmluZ1BpZWNlKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nUGll
Y2UoZGF0YV8sIHNpemVfKTsgfQotCi0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjaGFyKiB2YWx1
ZSkgY29uc3QgewotICAgIHJldHVybiBTdHJpbmdQaWVjZShkYXRhXywgc2l6ZV8pID09IFN0cmlu
Z1BpZWNlKHZhbHVlKTsKLSAgfQotCi0gIGNoYXIgb3BlcmF0b3JbXShzdHJpbmdwaWVjZV9zc2l6
ZV90eXBlIGkpIGNvbnN0IHsKLSAgICBhc3NlcnQoMCA8PSBpKTsKLSAgICBhc3NlcnQoaSA8IHNp
emVfKTsKLSAgICByZXR1cm4gZGF0YV9baV07Ci0gIH0KLQotICBjb25zdCBjaGFyKiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gZGF0YV87IH0KLQotICBzdHJpbmdwaWVjZV9zc2l6ZV90eXBlIHNpemUo
KSBjb25zdCB7Ci0gICAgcmV0dXJuIHNpemVfOwotICB9Ci0KLSAgc3RkOjpzdHJpbmcgVG9TdHJp
bmcoKSBjb25zdCB7IHJldHVybiBzdGQ6OnN0cmluZyhkYXRhXywgc2l6ZV8pOyB9Ci0gcHJpdmF0
ZToKLSAgY29uc3QgY2hhciogZGF0YV87Ci0gIHN0cmluZ3BpZWNlX3NzaXplX3R5cGUgc2l6ZV87
Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1
ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi1HT09HTEVfUFJPVE9CVUZfSEFTSF9OQU1FU1BB
Q0VfREVDTEFSQVRJT05fU1RBUlQKLXRlbXBsYXRlPD4gc3RydWN0IGhhc2g8U3RyaW5nUGllY2U+
IHsKLSAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgU3RyaW5nUGllY2UmIHMpIGNvbnN0IHsKLSAg
ICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGNvbnN0IGNoYXIgKnN0ciA9IHMuZGF0YSgp
LCAqZW5kID0gc3RyICsgcy5zaXplKCk7IHN0ciA8IGVuZDsgc3RyKyspIHsgIAotICAgICAgcmVz
dWx0ID0gNSAqIHJlc3VsdCArICpzdHI7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0K
LX07Ci1HT09HTEVfUFJPVE9CVUZfSEFTSF9OQU1FU1BBQ0VfREVDTEFSQVRJT05fRU5ECi0KLSNl
bmRpZiAgLy8gU1RSSU5HU19TVFJJTkdQSUVDRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL3N0cmluZ3BpZWNlX3VuaXR0ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L3N0dWJzL3N0cmluZ3BpZWNlX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhNTJkODFmODNhMGZjNzkxNDgzNDRiYzhlMTE5YWY1MTNiMGM3NmU3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdHJpbmdwaWVjZV91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDc5NCArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuaD4KLQotI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2lu
Y2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNs
dWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9nb29nbGV0
ZXN0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2hhc2guaD4KLSNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1
ZiB7Ci1uYW1lc3BhY2UgewotVEVTVChTdHJpbmdQaWVjZSwgQ3RvcikgewotICB7Ci0gICAgLy8g
TnVsbC4KLSAgICBTdHJpbmdQaWVjZSBzMTA7Ci0gICAgRVhQRUNUX1RSVUUoczEwLmRhdGEoKSA9
PSBOVUxMKTsKLSAgICBFWFBFQ1RfRVEoMCwgczEwLmxlbmd0aCgpKTsKLSAgfQotCi0gIHsKLSAg
ICAvLyBjb25zdCBjaGFyKiB3aXRob3V0IGxlbmd0aC4KLSAgICBjb25zdCBjaGFyKiBoZWxsbyA9
ICJoZWxsbyI7Ci0gICAgU3RyaW5nUGllY2UgczIwKGhlbGxvKTsKLSAgICBFWFBFQ1RfVFJVRShz
MjAuZGF0YSgpID09IGhlbGxvKTsKLSAgICBFWFBFQ1RfRVEoNSwgczIwLmxlbmd0aCgpKTsKLQot
ICAgIC8vIGNvbnN0IGNoYXIqIHdpdGggbGVuZ3RoLgotICAgIFN0cmluZ1BpZWNlIHMyMShoZWxs
bywgNCk7Ci0gICAgRVhQRUNUX1RSVUUoczIxLmRhdGEoKSA9PSBoZWxsbyk7Ci0gICAgRVhQRUNU
X0VRKDQsIHMyMS5sZW5ndGgoKSk7Ci0KLSAgICAvLyBOb3QgcmVjb21tZW5kZWQsIGJ1dCB2YWxp
ZCBDKysKLSAgICBTdHJpbmdQaWVjZSBzMjIoaGVsbG8sIDYpOwotICAgIEVYUEVDVF9UUlVFKHMy
Mi5kYXRhKCkgPT0gaGVsbG8pOwotICAgIEVYUEVDVF9FUSg2LCBzMjIubGVuZ3RoKCkpOwotICB9
Ci0KLSAgewotICAgIC8vIHN0ZDo6c3RyaW5nLgotICAgIHN0ZDo6c3RyaW5nIGhvbGEgPSAiaG9s
YSI7Ci0gICAgU3RyaW5nUGllY2UgczMwKGhvbGEpOwotICAgIEVYUEVDVF9UUlVFKHMzMC5kYXRh
KCkgPT0gaG9sYS5kYXRhKCkpOwotICAgIEVYUEVDVF9FUSg0LCBzMzAubGVuZ3RoKCkpOwotCi0g
ICAgLy8gc3RkOjpzdHJpbmcgd2l0aCBlbWJlZGRlZCAnXDAnLgotICAgIGhvbGEucHVzaF9iYWNr
KCdcMCcpOwotICAgIGhvbGEuYXBwZW5kKCJoMiIpOwotICAgIGhvbGEucHVzaF9iYWNrKCdcMCcp
OwotICAgIFN0cmluZ1BpZWNlIHMzMShob2xhKTsKLSAgICBFWFBFQ1RfVFJVRShzMzEuZGF0YSgp
ID09IGhvbGEuZGF0YSgpKTsKLSAgICBFWFBFQ1RfRVEoOCwgczMxLmxlbmd0aCgpKTsKLSAgfQot
Ci0jaWYgZGVmaW5lZChIQVNfR0xPQkFMX1NUUklORykKLSAgewotICAgIC8vIDo6c3RyaW5nCi0g
ICAgc3RyaW5nIGJvbmpvdXIgPSAiYm9uam91ciI7Ci0gICAgU3RyaW5nUGllY2UgczQwKGJvbmpv
dXIpOwotICAgIEVYUEVDVF9UUlVFKHM0MC5kYXRhKCkgPT0gYm9uam91ci5kYXRhKCkpOwotICAg
IEVYUEVDVF9FUSg3LCBzNDAubGVuZ3RoKCkpOwotICB9Ci0jZW5kaWYKLQotICAvLyBUT0RPKG1l
Yyk6IFN0cmluZ1BpZWNlKFN0cmluZ1BpZWNlIHgsIGludCBwb3MpOwotICAvLyBUT0RPKG1lYyk6
IFN0cmluZ1BpZWNlKFN0cmluZ1BpZWNlIHgsIGludCBwb3MsIGludCBsZW4pOwotICAvLyBUT0RP
KG1lYyk6IFN0cmluZ1BpZWNlKGNvbnN0IFN0cmluZ1BpZWNlJik7Ci19Ci0KLVRFU1QoU3RyaW5n
UGllY2UsIFNUTENvbXBhcmF0b3IpIHsKLSAgc3RyaW5nIHMxKCJmb28iKTsKLSAgc3RyaW5nIHMy
KCJiYXIiKTsKLSAgc3RyaW5nIHMzKCJiYXoiKTsKLQotICBTdHJpbmdQaWVjZSBwMShzMSk7Ci0g
IFN0cmluZ1BpZWNlIHAyKHMyKTsKLSAgU3RyaW5nUGllY2UgcDMoczMpOwotCi0gIHR5cGVkZWYg
c3RkOjptYXA8U3RyaW5nUGllY2UsIGludD4gVGVzdE1hcDsKLSAgVGVzdE1hcCBtYXA7Ci0KLSAg
bWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihwMSwgMCkpOwotICBtYXAuaW5zZXJ0KHN0ZDo6bWFr
ZV9wYWlyKHAyLCAxKSk7Ci0gIG1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIocDMsIDIpKTsKLSAg
RVhQRUNUX0VRKG1hcC5zaXplKCksIDMpOwotCi0gIFRlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtYXAuYmVnaW4oKTsKLSAgRVhQRUNUX0VRKGl0ZXItPnNlY29uZCwgMSk7Ci0gICsraXRl
cjsKLSAgRVhQRUNUX0VRKGl0ZXItPnNlY29uZCwgMik7Ci0gICsraXRlcjsKLSAgRVhQRUNUX0VR
KGl0ZXItPnNlY29uZCwgMCk7Ci0gICsraXRlcjsKLSAgRVhQRUNUX1RSVUUoaXRlciA9PSBtYXAu
ZW5kKCkpOwotCi0gIFRlc3RNYXA6Oml0ZXJhdG9yIG5ld19pdGVyID0gbWFwLmZpbmQoInpvdCIp
OwotICBFWFBFQ1RfVFJVRShuZXdfaXRlciA9PSBtYXAuZW5kKCkpOwotCi0gIG5ld19pdGVyID0g
bWFwLmZpbmQoImJhciIpOwotICBFWFBFQ1RfVFJVRShuZXdfaXRlciAhPSBtYXAuZW5kKCkpOwot
Ci0gIG1hcC5lcmFzZShuZXdfaXRlcik7Ci0gIEVYUEVDVF9FUShtYXAuc2l6ZSgpLCAyKTsKLQot
ICBpdGVyID0gbWFwLmJlZ2luKCk7Ci0gIEVYUEVDVF9FUShpdGVyLT5zZWNvbmQsIDIpOwotICAr
K2l0ZXI7Ci0gIEVYUEVDVF9FUShpdGVyLT5zZWNvbmQsIDApOwotICArK2l0ZXI7Ci0gIEVYUEVD
VF9UUlVFKGl0ZXIgPT0gbWFwLmVuZCgpKTsKLX0KLQotVEVTVChTdHJpbmdQaWVjZSwgQ29tcGFy
aXNvbk9wZXJhdG9ycykgewotI2RlZmluZSBDT01QQVJFKHJlc3VsdCwgb3AsIHgsIHkpIFwKLSAg
RVhQRUNUX0VRKHJlc3VsdCwgU3RyaW5nUGllY2UoKHgpKSBvcCBTdHJpbmdQaWVjZSgoeSkpKTsg
XAotICBFWFBFQ1RfRVEocmVzdWx0LCBTdHJpbmdQaWVjZSgoeCkpLmNvbXBhcmUoU3RyaW5nUGll
Y2UoKHkpKSkgb3AgMCkKLQotICBDT01QQVJFKHRydWUsID09LCAiIiwgICAiIik7Ci0gIENPTVBB
UkUodHJ1ZSwgPT0sICIiLCBOVUxMKTsKLSAgQ09NUEFSRSh0cnVlLCA9PSwgTlVMTCwgIiIpOwot
ICBDT01QQVJFKHRydWUsID09LCAiYSIsICAiYSIpOwotICBDT01QQVJFKHRydWUsID09LCAiYWEi
LCAiYWEiKTsKLSAgQ09NUEFSRShmYWxzZSwgPT0sICJhIiwgICIiKTsKLSAgQ09NUEFSRShmYWxz
ZSwgPT0sICIiLCAgICJhIik7Ci0gIENPTVBBUkUoZmFsc2UsID09LCAiYSIsICAiYiIpOwotICBD
T01QQVJFKGZhbHNlLCA9PSwgImEiLCAgImFhIik7Ci0gIENPTVBBUkUoZmFsc2UsID09LCAiYWEi
LCAiYSIpOwotCi0gIENPTVBBUkUoZmFsc2UsICE9LCAiIiwgICAiIik7Ci0gIENPTVBBUkUoZmFs
c2UsICE9LCAiYSIsICAiYSIpOwotICBDT01QQVJFKGZhbHNlLCAhPSwgImFhIiwgImFhIik7Ci0g
IENPTVBBUkUodHJ1ZSwgIT0sICJhIiwgICIiKTsKLSAgQ09NUEFSRSh0cnVlLCAhPSwgIiIsICAg
ImEiKTsKLSAgQ09NUEFSRSh0cnVlLCAhPSwgImEiLCAgImIiKTsKLSAgQ09NUEFSRSh0cnVlLCAh
PSwgImEiLCAgImFhIik7Ci0gIENPTVBBUkUodHJ1ZSwgIT0sICJhYSIsICJhIik7Ci0KLSAgQ09N
UEFSRSh0cnVlLCA8LCAiYSIsICAiYiIpOwotICBDT01QQVJFKHRydWUsIDwsICJhIiwgICJhYSIp
OwotICBDT01QQVJFKHRydWUsIDwsICJhYSIsICJiIik7Ci0gIENPTVBBUkUodHJ1ZSwgPCwgImFh
IiwgImJiIik7Ci0gIENPTVBBUkUoZmFsc2UsIDwsICJhIiwgICJhIik7Ci0gIENPTVBBUkUoZmFs
c2UsIDwsICJiIiwgICJhIik7Ci0gIENPTVBBUkUoZmFsc2UsIDwsICJhYSIsICJhIik7Ci0gIENP
TVBBUkUoZmFsc2UsIDwsICJiIiwgICJhYSIpOwotICBDT01QQVJFKGZhbHNlLCA8LCAiYmIiLCAi
YWEiKTsKLQotICBDT01QQVJFKHRydWUsIDw9LCAiYSIsICAiYSIpOwotICBDT01QQVJFKHRydWUs
IDw9LCAiYSIsICAiYiIpOwotICBDT01QQVJFKHRydWUsIDw9LCAiYSIsICAiYWEiKTsKLSAgQ09N
UEFSRSh0cnVlLCA8PSwgImFhIiwgImIiKTsKLSAgQ09NUEFSRSh0cnVlLCA8PSwgImFhIiwgImJi
Iik7Ci0gIENPTVBBUkUoZmFsc2UsIDw9LCAiYiIsICAiYSIpOwotICBDT01QQVJFKGZhbHNlLCA8
PSwgImFhIiwgImEiKTsKLSAgQ09NUEFSRShmYWxzZSwgPD0sICJiIiwgICJhYSIpOwotICBDT01Q
QVJFKGZhbHNlLCA8PSwgImJiIiwgImFhIik7Ci0KLSAgQ09NUEFSRShmYWxzZSwgPj0sICJhIiwg
ICJiIik7Ci0gIENPTVBBUkUoZmFsc2UsID49LCAiYSIsICAiYWEiKTsKLSAgQ09NUEFSRShmYWxz
ZSwgPj0sICJhYSIsICJiIik7Ci0gIENPTVBBUkUoZmFsc2UsID49LCAiYWEiLCAiYmIiKTsKLSAg
Q09NUEFSRSh0cnVlLCA+PSwgImEiLCAgImEiKTsKLSAgQ09NUEFSRSh0cnVlLCA+PSwgImIiLCAg
ImEiKTsKLSAgQ09NUEFSRSh0cnVlLCA+PSwgImFhIiwgImEiKTsKLSAgQ09NUEFSRSh0cnVlLCA+
PSwgImIiLCAgImFhIik7Ci0gIENPTVBBUkUodHJ1ZSwgPj0sICJiYiIsICJhYSIpOwotCi0gIENP
TVBBUkUoZmFsc2UsID4sICJhIiwgICJhIik7Ci0gIENPTVBBUkUoZmFsc2UsID4sICJhIiwgICJi
Iik7Ci0gIENPTVBBUkUoZmFsc2UsID4sICJhIiwgICJhYSIpOwotICBDT01QQVJFKGZhbHNlLCA+
LCAiYWEiLCAiYiIpOwotICBDT01QQVJFKGZhbHNlLCA+LCAiYWEiLCAiYmIiKTsKLSAgQ09NUEFS
RSh0cnVlLCA+LCAiYiIsICAiYSIpOwotICBDT01QQVJFKHRydWUsID4sICJhYSIsICJhIik7Ci0g
IENPTVBBUkUodHJ1ZSwgPiwgImIiLCAgImFhIik7Ci0gIENPTVBBUkUodHJ1ZSwgPiwgImJiIiwg
ImFhIik7Ci0KLSAgc3RyaW5nIHg7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKyspIHsK
LSAgICB4ICs9ICdhJzsKLSAgICBzdHJpbmcgeSA9IHg7Ci0gICAgQ09NUEFSRSh0cnVlLCA9PSwg
eCwgeSk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKLSAgICAgIHN0cmluZyB6
ID0geDsKLSAgICAgIHpbal0gPSAnYic7ICAgICAgIC8vIERpZmZlcnMgaW4gcG9zaXRpb24gJ2on
Ci0gICAgICBDT01QQVJFKGZhbHNlLCA9PSwgeCwgeik7Ci0gICAgICBDT01QQVJFKHRydWUsIDws
IHgsIHopOwotICAgICAgQ09NUEFSRSh0cnVlLCA+LCB6LCB4KTsKLSAgICAgIGlmIChqICsgMSA8
IGkpIHsKLSAgICAgICAgeltqICsgMV0gPSAnQSc7ICAvLyBEaWZmZXJzIGluIHBvc2l0aW9uICdq
KzEnIGFzIHdlbGwKLSAgICAgICAgQ09NUEFSRShmYWxzZSwgPT0sIHgsIHopOwotICAgICAgICBD
T01QQVJFKHRydWUsIDwsIHgsIHopOwotICAgICAgICBDT01QQVJFKHRydWUsID4sIHosIHgpOwot
ICAgICAgICB6W2ogKyAxXSA9ICd6JzsgIC8vIERpZmZlcnMgaW4gcG9zaXRpb24gJ2orMScgYXMg
d2VsbAotICAgICAgICBDT01QQVJFKGZhbHNlLCA9PSwgeCwgeik7Ci0gICAgICAgIENPTVBBUkUo
dHJ1ZSwgPCwgeCwgeik7Ci0gICAgICAgIENPTVBBUkUodHJ1ZSwgPiwgeiwgeCk7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSN1bmRlZiBDT01QQVJFCi19Ci0KLVRFU1QoU3RyaW5nUGllY2UsIFNU
TDEpIHsKLSAgY29uc3QgU3RyaW5nUGllY2UgYSgiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoi
KTsKLSAgY29uc3QgU3RyaW5nUGllY2UgYigiYWJjIik7Ci0gIGNvbnN0IFN0cmluZ1BpZWNlIGMo
Inh5eiIpOwotICBjb25zdCBTdHJpbmdQaWVjZSBkKCJmb29iYXIiKTsKLSAgY29uc3QgU3RyaW5n
UGllY2UgZTsKLSAgc3RyaW5nIHRlbXAoIjEyMyIpOwotICB0ZW1wICs9ICdcMCc7Ci0gIHRlbXAg
Kz0gIjQ1NiI7Ci0gIGNvbnN0IFN0cmluZ1BpZWNlIGYodGVtcCk7Ci0KLSAgRVhQRUNUX0VRKGFb
Nl0sICdnJyk7Ci0gIEVYUEVDVF9FUShiWzBdLCAnYScpOwotICBFWFBFQ1RfRVEoY1syXSwgJ3on
KTsKLSAgRVhQRUNUX0VRKGZbM10sICdcMCcpOwotICBFWFBFQ1RfRVEoZls1XSwgJzUnKTsKLQot
ICBFWFBFQ1RfRVEoKmQuZGF0YSgpLCAnZicpOwotICBFWFBFQ1RfRVEoZC5kYXRhKClbNV0sICdy
Jyk7Ci0gIEVYUEVDVF9UUlVFKGUuZGF0YSgpID09IE5VTEwpOwotCi0gIEVYUEVDVF9FUSgqYS5i
ZWdpbigpLCAnYScpOwotICBFWFBFQ1RfRVEoKihiLmJlZ2luKCkgKyAyKSwgJ2MnKTsKLSAgRVhQ
RUNUX0VRKCooYy5lbmQoKSAtIDEpLCAneicpOwotCi0gIEVYUEVDVF9FUSgqYS5yYmVnaW4oKSwg
J3onKTsKLSAgRVhQRUNUX0VRKCooYi5yYmVnaW4oKSArIDIpLCAnYScpOwotICBFWFBFQ1RfRVEo
KihjLnJlbmQoKSAtIDEpLCAneCcpOwotICBFWFBFQ1RfVFJVRShhLnJiZWdpbigpICsgMjYgPT0g
YS5yZW5kKCkpOwotCi0gIEVYUEVDVF9FUShhLnNpemUoKSwgMjYpOwotICBFWFBFQ1RfRVEoYi5z
aXplKCksIDMpOwotICBFWFBFQ1RfRVEoYy5zaXplKCksIDMpOwotICBFWFBFQ1RfRVEoZC5zaXpl
KCksIDYpOwotICBFWFBFQ1RfRVEoZS5zaXplKCksIDApOwotICBFWFBFQ1RfRVEoZi5zaXplKCks
IDcpOwotCi0gIEVYUEVDVF9UUlVFKCFkLmVtcHR5KCkpOwotICBFWFBFQ1RfVFJVRShkLmJlZ2lu
KCkgIT0gZC5lbmQoKSk7Ci0gIEVYUEVDVF9UUlVFKGQuYmVnaW4oKSArIDYgPT0gZC5lbmQoKSk7
Ci0KLSAgRVhQRUNUX1RSVUUoZS5lbXB0eSgpKTsKLSAgRVhQRUNUX1RSVUUoZS5iZWdpbigpID09
IGUuZW5kKCkpOwotCi0gIEVYUEVDVF9HRShhLm1heF9zaXplKCksIGEuY2FwYWNpdHkoKSk7Ci0g
IEVYUEVDVF9HRShhLmNhcGFjaXR5KCksIGEuc2l6ZSgpKTsKLQotICBjaGFyIGJ1Zls0XSA9IHsg
JyUnLCAnJScsICclJywgJyUnIH07Ci0gIEVYUEVDVF9FUShhLmNvcHkoYnVmLCA0KSwgNCk7Ci0g
IEVYUEVDVF9FUShidWZbMF0sIGFbMF0pOwotICBFWFBFQ1RfRVEoYnVmWzFdLCBhWzFdKTsKLSAg
RVhQRUNUX0VRKGJ1ZlsyXSwgYVsyXSk7Ci0gIEVYUEVDVF9FUShidWZbM10sIGFbM10pOwotICBF
WFBFQ1RfRVEoYS5jb3B5KGJ1ZiwgMywgNyksIDMpOwotICBFWFBFQ1RfRVEoYnVmWzBdLCBhWzdd
KTsKLSAgRVhQRUNUX0VRKGJ1ZlsxXSwgYVs4XSk7Ci0gIEVYUEVDVF9FUShidWZbMl0sIGFbOV0p
OwotICBFWFBFQ1RfRVEoYnVmWzNdLCBhWzNdKTsKLSAgRVhQRUNUX0VRKGMuY29weShidWYsIDk5
KSwgMyk7Ci0gIEVYUEVDVF9FUShidWZbMF0sIGNbMF0pOwotICBFWFBFQ1RfRVEoYnVmWzFdLCBj
WzFdKTsKLSAgRVhQRUNUX0VRKGJ1ZlsyXSwgY1syXSk7Ci0gIEVYUEVDVF9FUShidWZbM10sIGFb
M10pOwotfQotCi0vLyBTZXBhcmF0ZWQgZnJvbSBTVEwxKCkgYmVjYXVzZSBzb21lIGNvbXBpbGVy
cyBwcm9kdWNlIGFuIG92ZXJseQotLy8gbGFyZ2Ugc3RhY2sgZnJhbWUgZm9yIHRoZSBjb21iaW5l
ZCBmdW5jdGlvbi4KLVRFU1QoU3RyaW5nUGllY2UsIFNUTDIpIHsKLSAgY29uc3QgU3RyaW5nUGll
Y2UgYSgiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKTsKLSAgY29uc3QgU3RyaW5nUGllY2Ug
YigiYWJjIik7Ci0gIGNvbnN0IFN0cmluZ1BpZWNlIGMoInh5eiIpOwotICBTdHJpbmdQaWVjZSBk
KCJmb29iYXIiKTsKLSAgY29uc3QgU3RyaW5nUGllY2UgZTsKLSAgY29uc3QgU3RyaW5nUGllY2Ug
ZigiMTIzIiAiXDAiICI0NTYiLCA3KTsKLQotICBkLmNsZWFyKCk7Ci0gIEVYUEVDVF9FUShkLnNp
emUoKSwgMCk7Ci0gIEVYUEVDVF9UUlVFKGQuZW1wdHkoKSk7Ci0gIEVYUEVDVF9UUlVFKGQuZGF0
YSgpID09IE5VTEwpOwotICBFWFBFQ1RfVFJVRShkLmJlZ2luKCkgPT0gZC5lbmQoKSk7Ci0KLSAg
RVhQRUNUX0VRKFN0cmluZ1BpZWNlOjpucG9zLCBzdHJpbmc6Om5wb3MpOwotCi0gIEVYUEVDVF9F
UShhLmZpbmQoYiksIDApOwotICBFWFBFQ1RfRVEoYS5maW5kKGIsIDEpLCBTdHJpbmdQaWVjZTo6
bnBvcyk7Ci0gIEVYUEVDVF9FUShhLmZpbmQoYyksIDIzKTsKLSAgRVhQRUNUX0VRKGEuZmluZChj
LCA5KSwgMjMpOwotICBFWFBFQ1RfRVEoYS5maW5kKGMsIFN0cmluZ1BpZWNlOjpucG9zKSwgU3Ry
aW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoYi5maW5kKGMpLCBTdHJpbmdQaWVjZTo6bnBv
cyk7Ci0gIEVYUEVDVF9FUShiLmZpbmQoYywgU3RyaW5nUGllY2U6Om5wb3MpLCBTdHJpbmdQaWVj
ZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShhLmZpbmQoZCksIDApOwotICBFWFBFQ1RfRVEoYS5maW5k
KGUpLCAwKTsKLSAgRVhQRUNUX0VRKGEuZmluZChkLCAxMiksIDEyKTsKLSAgRVhQRUNUX0VRKGEu
ZmluZChlLCAxNyksIDE3KTsKLSAgU3RyaW5nUGllY2UgZygieHggbm90IGZvdW5kIGJiIik7Ci0g
IEVYUEVDVF9FUShhLmZpbmQoZyksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgLy8gZW1wdHkgc3Ry
aW5nIG5vbnNlbnNlCi0gIEVYUEVDVF9FUShkLmZpbmQoYiksIFN0cmluZ1BpZWNlOjpucG9zKTsK
LSAgRVhQRUNUX0VRKGUuZmluZChiKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEo
ZC5maW5kKGIsIDQpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShlLmZpbmQoYiwg
NyksIFN0cmluZ1BpZWNlOjpucG9zKTsKLQotICBzaXplX3QgZW1wdHlfc2VhcmNoX3BvcyA9IHN0
cmluZygpLmZpbmQoc3RyaW5nKCkpOwotICBFWFBFQ1RfRVEoZC5maW5kKGQpLCBlbXB0eV9zZWFy
Y2hfcG9zKTsKLSAgRVhQRUNUX0VRKGQuZmluZChlKSwgZW1wdHlfc2VhcmNoX3Bvcyk7Ci0gIEVY
UEVDVF9FUShlLmZpbmQoZCksIGVtcHR5X3NlYXJjaF9wb3MpOwotICBFWFBFQ1RfRVEoZS5maW5k
KGUpLCBlbXB0eV9zZWFyY2hfcG9zKTsKLSAgRVhQRUNUX0VRKGQuZmluZChkLCA0KSwgc3RyaW5n
KCkuZmluZChzdHJpbmcoKSwgNCkpOwotICBFWFBFQ1RfRVEoZC5maW5kKGUsIDQpLCBzdHJpbmco
KS5maW5kKHN0cmluZygpLCA0KSk7Ci0gIEVYUEVDVF9FUShlLmZpbmQoZCwgNCksIHN0cmluZygp
LmZpbmQoc3RyaW5nKCksIDQpKTsKLSAgRVhQRUNUX0VRKGUuZmluZChlLCA0KSwgc3RyaW5nKCku
ZmluZChzdHJpbmcoKSwgNCkpOwotCi0gIEVYUEVDVF9FUShhLmZpbmQoJ2EnKSwgMCk7Ci0gIEVY
UEVDVF9FUShhLmZpbmQoJ2MnKSwgMik7Ci0gIEVYUEVDVF9FUShhLmZpbmQoJ3onKSwgMjUpOwot
ICBFWFBFQ1RfRVEoYS5maW5kKCckJyksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VR
KGEuZmluZCgnXDAnKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZi5maW5kKCdc
MCcpLCAzKTsKLSAgRVhQRUNUX0VRKGYuZmluZCgnMycpLCAyKTsKLSAgRVhQRUNUX0VRKGYuZmlu
ZCgnNScpLCA1KTsKLSAgRVhQRUNUX0VRKGcuZmluZCgnbycpLCA0KTsKLSAgRVhQRUNUX0VRKGcu
ZmluZCgnbycsIDQpLCA0KTsKLSAgRVhQRUNUX0VRKGcuZmluZCgnbycsIDUpLCA4KTsKLSAgRVhQ
RUNUX0VRKGEuZmluZCgnYicsIDUpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIC8vIGVtcHR5IHN0
cmluZyBub25zZW5zZQotICBFWFBFQ1RfRVEoZC5maW5kKCdcMCcpLCBTdHJpbmdQaWVjZTo6bnBv
cyk7Ci0gIEVYUEVDVF9FUShlLmZpbmQoJ1wwJyksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQ
RUNUX0VRKGQuZmluZCgnXDAnLCA0KSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEo
ZS5maW5kKCdcMCcsIDcpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShkLmZpbmQo
J3gnKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZS5maW5kKCd4JyksIFN0cmlu
Z1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VRKGQuZmluZCgneCcsIDQpLCBTdHJpbmdQaWVjZTo6
bnBvcyk7Ci0gIEVYUEVDVF9FUShlLmZpbmQoJ3gnLCA3KSwgU3RyaW5nUGllY2U6Om5wb3MpOwot
Ci0gIEVYUEVDVF9FUShhLnJmaW5kKGIpLCAwKTsKLSAgRVhQRUNUX0VRKGEucmZpbmQoYiwgMSks
IDApOwotICBFWFBFQ1RfRVEoYS5yZmluZChjKSwgMjMpOwotICBFWFBFQ1RfRVEoYS5yZmluZChj
LCAyMiksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VRKGEucmZpbmQoYywgMSksIFN0
cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VRKGEucmZpbmQoYywgMCksIFN0cmluZ1BpZWNl
OjpucG9zKTsKLSAgRVhQRUNUX0VRKGIucmZpbmQoYyksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAg
RVhQRUNUX0VRKGIucmZpbmQoYywgMCksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VR
KGEucmZpbmQoZCksIGEuYXNfc3RyaW5nKCkucmZpbmQoc3RyaW5nKCkpKTsKLSAgRVhQRUNUX0VR
KGEucmZpbmQoZSksIGEuYXNfc3RyaW5nKCkucmZpbmQoc3RyaW5nKCkpKTsKLSAgRVhQRUNUX0VR
KGEucmZpbmQoZCwgMTIpLCAxMik7Ci0gIEVYUEVDVF9FUShhLnJmaW5kKGUsIDE3KSwgMTcpOwot
ICBFWFBFQ1RfRVEoYS5yZmluZChnKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEo
ZC5yZmluZChiKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZS5yZmluZChiKSwg
U3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZC5yZmluZChiLCA0KSwgU3RyaW5nUGll
Y2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZS5yZmluZChiLCA3KSwgU3RyaW5nUGllY2U6Om5wb3Mp
OwotICAvLyBlbXB0eSBzdHJpbmcgbm9uc2Vuc2UKLSAgRVhQRUNUX0VRKGQucmZpbmQoZCwgNCks
IHN0cmluZygpLnJmaW5kKHN0cmluZygpKSk7Ci0gIEVYUEVDVF9FUShlLnJmaW5kKGQsIDcpLCBz
dHJpbmcoKS5yZmluZChzdHJpbmcoKSkpOwotICBFWFBFQ1RfRVEoZC5yZmluZChlLCA0KSwgc3Ry
aW5nKCkucmZpbmQoc3RyaW5nKCkpKTsKLSAgRVhQRUNUX0VRKGUucmZpbmQoZSwgNyksIHN0cmlu
ZygpLnJmaW5kKHN0cmluZygpKSk7Ci0gIEVYUEVDVF9FUShkLnJmaW5kKGQpLCBzdHJpbmcoKS5y
ZmluZChzdHJpbmcoKSkpOwotICBFWFBFQ1RfRVEoZS5yZmluZChkKSwgc3RyaW5nKCkucmZpbmQo
c3RyaW5nKCkpKTsKLSAgRVhQRUNUX0VRKGQucmZpbmQoZSksIHN0cmluZygpLnJmaW5kKHN0cmlu
ZygpKSk7Ci0gIEVYUEVDVF9FUShlLnJmaW5kKGUpLCBzdHJpbmcoKS5yZmluZChzdHJpbmcoKSkp
OwotCi0gIEVYUEVDVF9FUShnLnJmaW5kKCdvJyksIDgpOwotICBFWFBFQ1RfRVEoZy5yZmluZCgn
cScpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShnLnJmaW5kKCdvJywgOCksIDgp
OwotICBFWFBFQ1RfRVEoZy5yZmluZCgnbycsIDcpLCA0KTsKLSAgRVhQRUNUX0VRKGcucmZpbmQo
J28nLCAzKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZi5yZmluZCgnXDAnKSwg
Myk7Ci0gIEVYUEVDVF9FUShmLnJmaW5kKCdcMCcsIDEyKSwgMyk7Ci0gIEVYUEVDVF9FUShmLnJm
aW5kKCczJyksIDIpOwotICBFWFBFQ1RfRVEoZi5yZmluZCgnNScpLCA1KTsKLSAgLy8gZW1wdHkg
c3RyaW5nIG5vbnNlbnNlCi0gIEVYUEVDVF9FUShkLnJmaW5kKCdvJyksIFN0cmluZ1BpZWNlOjpu
cG9zKTsKLSAgRVhQRUNUX0VRKGUucmZpbmQoJ28nKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBF
WFBFQ1RfRVEoZC5yZmluZCgnbycsIDQpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9F
UShlLnJmaW5kKCdvJywgNyksIFN0cmluZ1BpZWNlOjpucG9zKTsKLQotICBFWFBFQ1RfRVEoYS5m
aW5kX2ZpcnN0X29mKGIpLCAwKTsKLSAgRVhQRUNUX0VRKGEuZmluZF9maXJzdF9vZihiLCAwKSwg
MCk7Ci0gIEVYUEVDVF9FUShhLmZpbmRfZmlyc3Rfb2YoYiwgMSksIDEpOwotICBFWFBFQ1RfRVEo
YS5maW5kX2ZpcnN0X29mKGIsIDIpLCAyKTsKLSAgRVhQRUNUX0VRKGEuZmluZF9maXJzdF9vZihi
LCAzKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoYS5maW5kX2ZpcnN0X29mKGMp
LCAyMyk7Ci0gIEVYUEVDVF9FUShhLmZpbmRfZmlyc3Rfb2YoYywgMjMpLCAyMyk7Ci0gIEVYUEVD
VF9FUShhLmZpbmRfZmlyc3Rfb2YoYywgMjQpLCAyNCk7Ci0gIEVYUEVDVF9FUShhLmZpbmRfZmly
c3Rfb2YoYywgMjUpLCAyNSk7Ci0gIEVYUEVDVF9FUShhLmZpbmRfZmlyc3Rfb2YoYywgMjYpLCBT
dHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShnLmZpbmRfZmlyc3Rfb2YoYiksIDEzKTsK
LSAgRVhQRUNUX0VRKGcuZmluZF9maXJzdF9vZihjKSwgMCk7Ci0gIEVYUEVDVF9FUShhLmZpbmRf
Zmlyc3Rfb2YoZiksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VRKGYuZmluZF9maXJz
dF9vZihhKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICAvLyBlbXB0eSBzdHJpbmcgbm9uc2Vuc2UK
LSAgRVhQRUNUX0VRKGEuZmluZF9maXJzdF9vZihkKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBF
WFBFQ1RfRVEoYS5maW5kX2ZpcnN0X29mKGUpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVD
VF9FUShkLmZpbmRfZmlyc3Rfb2YoYiksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VR
KGUuZmluZF9maXJzdF9vZihiKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZC5m
aW5kX2ZpcnN0X29mKGQpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShlLmZpbmRf
Zmlyc3Rfb2YoZCksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VRKGQuZmluZF9maXJz
dF9vZihlKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZS5maW5kX2ZpcnN0X29m
KGUpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0KLSAgRVhQRUNUX0VRKGEuZmluZF9maXJzdF9ub3Rf
b2YoYiksIDMpOwotICBFWFBFQ1RfRVEoYS5maW5kX2ZpcnN0X25vdF9vZihjKSwgMCk7Ci0gIEVY
UEVDVF9FUShiLmZpbmRfZmlyc3Rfbm90X29mKGEpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVY
UEVDVF9FUShjLmZpbmRfZmlyc3Rfbm90X29mKGEpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVY
UEVDVF9FUShmLmZpbmRfZmlyc3Rfbm90X29mKGEpLCAwKTsKLSAgRVhQRUNUX0VRKGEuZmluZF9m
aXJzdF9ub3Rfb2YoZiksIDApOwotICBFWFBFQ1RfRVEoYS5maW5kX2ZpcnN0X25vdF9vZihkKSwg
MCk7Ci0gIEVYUEVDVF9FUShhLmZpbmRfZmlyc3Rfbm90X29mKGUpLCAwKTsKLSAgLy8gZW1wdHkg
c3RyaW5nIG5vbnNlbnNlCi0gIEVYUEVDVF9FUShkLmZpbmRfZmlyc3Rfbm90X29mKGEpLCBTdHJp
bmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShlLmZpbmRfZmlyc3Rfbm90X29mKGEpLCBTdHJp
bmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShkLmZpbmRfZmlyc3Rfbm90X29mKGQpLCBTdHJp
bmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShlLmZpbmRfZmlyc3Rfbm90X29mKGQpLCBTdHJp
bmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShkLmZpbmRfZmlyc3Rfbm90X29mKGUpLCBTdHJp
bmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShlLmZpbmRfZmlyc3Rfbm90X29mKGUpLCBTdHJp
bmdQaWVjZTo6bnBvcyk7Ci0KLSAgU3RyaW5nUGllY2UgaCgiPT09PSIpOwotICBFWFBFQ1RfRVEo
aC5maW5kX2ZpcnN0X25vdF9vZignPScpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9F
UShoLmZpbmRfZmlyc3Rfbm90X29mKCc9JywgMyksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQ
RUNUX0VRKGguZmluZF9maXJzdF9ub3Rfb2YoJ1wwJyksIDApOwotICBFWFBFQ1RfRVEoZy5maW5k
X2ZpcnN0X25vdF9vZigneCcpLCAyKTsKLSAgRVhQRUNUX0VRKGYuZmluZF9maXJzdF9ub3Rfb2Yo
J1wwJyksIDApOwotICBFWFBFQ1RfRVEoZi5maW5kX2ZpcnN0X25vdF9vZignXDAnLCAzKSwgNCk7
Ci0gIEVYUEVDVF9FUShmLmZpbmRfZmlyc3Rfbm90X29mKCdcMCcsIDIpLCAyKTsKLSAgLy8gZW1w
dHkgc3RyaW5nIG5vbnNlbnNlCi0gIEVYUEVDVF9FUShkLmZpbmRfZmlyc3Rfbm90X29mKCd4Jyks
IFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VRKGUuZmluZF9maXJzdF9ub3Rfb2YoJ3gn
KSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZC5maW5kX2ZpcnN0X25vdF9vZign
XDAnKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZS5maW5kX2ZpcnN0X25vdF9v
ZignXDAnKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotCi0gIC8vICBTdHJpbmdQaWVjZSBnKCJ4eCBu
b3QgZm91bmQgYmIiKTsKLSAgU3RyaW5nUGllY2UgaSgiNTYiKTsKLSAgRVhQRUNUX0VRKGguZmlu
ZF9sYXN0X29mKGEpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShnLmZpbmRfbGFz
dF9vZihhKSwgZy5zaXplKCktMSk7Ci0gIEVYUEVDVF9FUShhLmZpbmRfbGFzdF9vZihiKSwgMik7
Ci0gIEVYUEVDVF9FUShhLmZpbmRfbGFzdF9vZihjKSwgYS5zaXplKCktMSk7Ci0gIEVYUEVDVF9F
UShmLmZpbmRfbGFzdF9vZihpKSwgNik7Ci0gIEVYUEVDVF9FUShhLmZpbmRfbGFzdF9vZignYScp
LCAwKTsKLSAgRVhQRUNUX0VRKGEuZmluZF9sYXN0X29mKCdiJyksIDEpOwotICBFWFBFQ1RfRVEo
YS5maW5kX2xhc3Rfb2YoJ3onKSwgMjUpOwotICBFWFBFQ1RfRVEoYS5maW5kX2xhc3Rfb2YoJ2En
LCA1KSwgMCk7Ci0gIEVYUEVDVF9FUShhLmZpbmRfbGFzdF9vZignYicsIDUpLCAxKTsKLSAgRVhQ
RUNUX0VRKGEuZmluZF9sYXN0X29mKCdiJywgMCksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQ
RUNUX0VRKGEuZmluZF9sYXN0X29mKCd6JywgMjUpLCAyNSk7Ci0gIEVYUEVDVF9FUShhLmZpbmRf
bGFzdF9vZigneicsIDI0KSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZi5maW5k
X2xhc3Rfb2YoaSwgNSksIDUpOwotICBFWFBFQ1RfRVEoZi5maW5kX2xhc3Rfb2YoaSwgNiksIDYp
OwotICBFWFBFQ1RfRVEoZi5maW5kX2xhc3Rfb2YoYSwgNCksIFN0cmluZ1BpZWNlOjpucG9zKTsK
LSAgLy8gZW1wdHkgc3RyaW5nIG5vbnNlbnNlCi0gIEVYUEVDVF9FUShmLmZpbmRfbGFzdF9vZihk
KSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZi5maW5kX2xhc3Rfb2YoZSksIFN0
cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VRKGYuZmluZF9sYXN0X29mKGQsIDQpLCBTdHJp
bmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShmLmZpbmRfbGFzdF9vZihlLCA0KSwgU3RyaW5n
UGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZC5maW5kX2xhc3Rfb2YoZCksIFN0cmluZ1BpZWNl
OjpucG9zKTsKLSAgRVhQRUNUX0VRKGQuZmluZF9sYXN0X29mKGUpLCBTdHJpbmdQaWVjZTo6bnBv
cyk7Ci0gIEVYUEVDVF9FUShlLmZpbmRfbGFzdF9vZihkKSwgU3RyaW5nUGllY2U6Om5wb3MpOwot
ICBFWFBFQ1RfRVEoZS5maW5kX2xhc3Rfb2YoZSksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQ
RUNUX0VRKGQuZmluZF9sYXN0X29mKGYpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9F
UShlLmZpbmRfbGFzdF9vZihmKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZC5m
aW5kX2xhc3Rfb2YoZCwgNCksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VRKGQuZmlu
ZF9sYXN0X29mKGUsIDQpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShlLmZpbmRf
bGFzdF9vZihkLCA0KSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEoZS5maW5kX2xh
c3Rfb2YoZSwgNCksIFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgRVhQRUNUX0VRKGQuZmluZF9sYXN0
X29mKGYsIDQpLCBTdHJpbmdQaWVjZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShlLmZpbmRfbGFzdF9v
ZihmLCA0KSwgU3RyaW5nUGllY2U6Om5wb3MpOwotCi0gIEVYUEVDVF9FUShhLmZpbmRfbGFzdF9u
b3Rfb2YoYiksIGEuc2l6ZSgpLTEpOwotICBFWFBFQ1RfRVEoYS5maW5kX2xhc3Rfbm90X29mKGMp
LCAyMik7Ci0gIEVYUEVDVF9FUShiLmZpbmRfbGFzdF9ub3Rfb2YoYSksIFN0cmluZ1BpZWNlOjpu
cG9zKTsKLSAgRVhQRUNUX0VRKGIuZmluZF9sYXN0X25vdF9vZihiKSwgU3RyaW5nUGllY2U6Om5w
b3MpOwotICBFWFBFQ1RfRVEoZi5maW5kX2xhc3Rfbm90X29mKGkpLCA0KTsKLSAgRVhQRUNUX0VR
KGEuZmluZF9sYXN0X25vdF9vZihjLCAyNCksIDIyKTsKLSAgRVhQRUNUX0VRKGEuZmluZF9sYXN0
X25vdF9vZihiLCAzKSwgMyk7Ci0gIEVYUEVDVF9FUShhLmZpbmRfbGFzdF9ub3Rfb2YoYiwgMiks
IFN0cmluZ1BpZWNlOjpucG9zKTsKLSAgLy8gZW1wdHkgc3RyaW5nIG5vbnNlbnNlCi0gIEVYUEVD
VF9FUShmLmZpbmRfbGFzdF9ub3Rfb2YoZCksIGYuc2l6ZSgpLTEpOwotICBFWFBFQ1RfRVEoZi5m
aW5kX2xhc3Rfbm90X29mKGUpLCBmLnNpemUoKS0xKTsKLSAgRVhQRUNUX0VRKGYuZmluZF9sYXN0
X25vdF9vZihkLCA0KSwgNCk7Ci0gIEVYUEVDVF9FUShmLmZpbmRfbGFzdF9ub3Rfb2YoZSwgNCks
IDQpOwotICBFWFBFQ1RfRVEoZC5maW5kX2xhc3Rfbm90X29mKGQpLCBTdHJpbmdQaWVjZTo6bnBv
cyk7Ci0gIEVYUEVDVF9FUShkLmZpbmRfbGFzdF9ub3Rfb2YoZSksIFN0cmluZ1BpZWNlOjpucG9z
KTsKLSAgRVhQRUNUX0VRKGUuZmluZF9sYXN0X25vdF9vZihkKSwgU3RyaW5nUGllY2U6Om5wb3Mp
OwotICBFWFBFQ1RfRVEoZS5maW5kX2xhc3Rfbm90X29mKGUpLCBTdHJpbmdQaWVjZTo6bnBvcyk7
Ci0gIEVYUEVDVF9FUShkLmZpbmRfbGFzdF9ub3Rfb2YoZiksIFN0cmluZ1BpZWNlOjpucG9zKTsK
LSAgRVhQRUNUX0VRKGUuZmluZF9sYXN0X25vdF9vZihmKSwgU3RyaW5nUGllY2U6Om5wb3MpOwot
ICBFWFBFQ1RfRVEoZC5maW5kX2xhc3Rfbm90X29mKGQsIDQpLCBTdHJpbmdQaWVjZTo6bnBvcyk7
Ci0gIEVYUEVDVF9FUShkLmZpbmRfbGFzdF9ub3Rfb2YoZSwgNCksIFN0cmluZ1BpZWNlOjpucG9z
KTsKLSAgRVhQRUNUX0VRKGUuZmluZF9sYXN0X25vdF9vZihkLCA0KSwgU3RyaW5nUGllY2U6Om5w
b3MpOwotICBFWFBFQ1RfRVEoZS5maW5kX2xhc3Rfbm90X29mKGUsIDQpLCBTdHJpbmdQaWVjZTo6
bnBvcyk7Ci0gIEVYUEVDVF9FUShkLmZpbmRfbGFzdF9ub3Rfb2YoZiwgNCksIFN0cmluZ1BpZWNl
OjpucG9zKTsKLSAgRVhQRUNUX0VRKGUuZmluZF9sYXN0X25vdF9vZihmLCA0KSwgU3RyaW5nUGll
Y2U6Om5wb3MpOwotCi0gIEVYUEVDVF9FUShoLmZpbmRfbGFzdF9ub3Rfb2YoJ3gnKSwgaC5zaXpl
KCkgLSAxKTsKLSAgRVhQRUNUX0VRKGguZmluZF9sYXN0X25vdF9vZignPScpLCBTdHJpbmdQaWVj
ZTo6bnBvcyk7Ci0gIEVYUEVDVF9FUShiLmZpbmRfbGFzdF9ub3Rfb2YoJ2MnKSwgMSk7Ci0gIEVY
UEVDVF9FUShoLmZpbmRfbGFzdF9ub3Rfb2YoJ3gnLCAyKSwgMik7Ci0gIEVYUEVDVF9FUShoLmZp
bmRfbGFzdF9ub3Rfb2YoJz0nLCAyKSwgU3RyaW5nUGllY2U6Om5wb3MpOwotICBFWFBFQ1RfRVEo
Yi5maW5kX2xhc3Rfbm90X29mKCdiJywgMSksIDApOwotICAvLyBlbXB0eSBzdHJpbmcgbm9uc2Vu
c2UKLSAgRVhQRUNUX0VRKGQuZmluZF9sYXN0X25vdF9vZigneCcpLCBTdHJpbmdQaWVjZTo6bnBv
cyk7Ci0gIEVYUEVDVF9FUShlLmZpbmRfbGFzdF9ub3Rfb2YoJ3gnKSwgU3RyaW5nUGllY2U6Om5w
b3MpOwotICBFWFBFQ1RfRVEoZC5maW5kX2xhc3Rfbm90X29mKCdcMCcpLCBTdHJpbmdQaWVjZTo6
bnBvcyk7Ci0gIEVYUEVDVF9FUShlLmZpbmRfbGFzdF9ub3Rfb2YoJ1wwJyksIFN0cmluZ1BpZWNl
OjpucG9zKTsKLQotICBFWFBFQ1RfRVEoYS5zdWJzdHIoMCwgMyksIGIpOwotICBFWFBFQ1RfRVEo
YS5zdWJzdHIoMjMpLCBjKTsKLSAgRVhQRUNUX0VRKGEuc3Vic3RyKDIzLCAzKSwgYyk7Ci0gIEVY
UEVDVF9FUShhLnN1YnN0cigyMywgOTkpLCBjKTsKLSAgRVhQRUNUX0VRKGEuc3Vic3RyKDApLCBh
KTsKLSAgRVhQRUNUX0VRKGEuc3Vic3RyKDMsIDIpLCAiZGUiKTsKLSAgLy8gZW1wdHkgc3RyaW5n
IG5vbnNlbnNlCi0gIEVYUEVDVF9FUShhLnN1YnN0cig5OSwgMiksIGUpOwotICBFWFBFQ1RfRVEo
ZC5zdWJzdHIoOTkpLCBlKTsKLSAgRVhQRUNUX0VRKGQuc3Vic3RyKDAsIDk5KSwgZSk7Ci0gIEVY
UEVDVF9FUShkLnN1YnN0cig5OSwgOTkpLCBlKTsKLSAgLy8gdXNlIG9mIG5wb3MKLSAgRVhQRUNU
X0VRKGEuc3Vic3RyKDAsIFN0cmluZ1BpZWNlOjpucG9zKSwgYSk7Ci0gIEVYUEVDVF9FUShhLnN1
YnN0cigyMywgU3RyaW5nUGllY2U6Om5wb3MpLCBjKTsKLSAgRVhQRUNUX0VRKGEuc3Vic3RyKFN0
cmluZ1BpZWNlOjpucG9zLCAwKSwgZSk7Ci0gIEVYUEVDVF9FUShhLnN1YnN0cihTdHJpbmdQaWVj
ZTo6bnBvcywgMSksIGUpOwotICBFWFBFQ1RfRVEoYS5zdWJzdHIoU3RyaW5nUGllY2U6Om5wb3Ms
IFN0cmluZ1BpZWNlOjpucG9zKSwgZSk7Ci0KLSAgLy8gU3Vic3RyaW5nIGNvbnN0cnVjdG9ycy4K
LSAgRVhQRUNUX0VRKFN0cmluZ1BpZWNlKGEsIDAsIDMpLCBiKTsKLSAgRVhQRUNUX0VRKFN0cmlu
Z1BpZWNlKGEsIDIzKSwgYyk7Ci0gIEVYUEVDVF9FUShTdHJpbmdQaWVjZShhLCAyMywgMyksIGMp
OwotICBFWFBFQ1RfRVEoU3RyaW5nUGllY2UoYSwgMjMsIDk5KSwgYyk7Ci0gIEVYUEVDVF9FUShT
dHJpbmdQaWVjZShhLCAwKSwgYSk7Ci0gIEVYUEVDVF9FUShTdHJpbmdQaWVjZShhLCAzLCAyKSwg
ImRlIik7Ci0gIC8vIGVtcHR5IHN0cmluZyBub25zZW5zZQotICBFWFBFQ1RfRVEoU3RyaW5nUGll
Y2UoZCwgMCwgOTkpLCBlKTsKLSAgLy8gVmVyaWZ5IHRoYXQgdGhleSB3b3JrIHRha2luZyBhbiBh
Y3R1YWwgc3RyaW5nLCBub3QganVzdCBhIFN0cmluZ1BpZWNlLgotICBzdHJpbmcgYTIgPSBhLmFz
X3N0cmluZygpOwotICBFWFBFQ1RfRVEoU3RyaW5nUGllY2UoYTIsIDAsIDMpLCBiKTsKLSAgRVhQ
RUNUX0VRKFN0cmluZ1BpZWNlKGEyLCAyMyksIGMpOwotICBFWFBFQ1RfRVEoU3RyaW5nUGllY2Uo
YTIsIDIzLCAzKSwgYyk7Ci0gIEVYUEVDVF9FUShTdHJpbmdQaWVjZShhMiwgMjMsIDk5KSwgYyk7
Ci0gIEVYUEVDVF9FUShTdHJpbmdQaWVjZShhMiwgMCksIGEpOwotICBFWFBFQ1RfRVEoU3RyaW5n
UGllY2UoYTIsIDMsIDIpLCAiZGUiKTsKLX0KLQotVEVTVChTdHJpbmdQaWVjZSwgQ3VzdG9tKSB7
Ci0gIFN0cmluZ1BpZWNlIGEoImZvb2JhciIpOwotICBzdHJpbmcgczEoIjEyMyIpOwotICBzMSAr
PSAnXDAnOwotICBzMSArPSAiNDU2IjsKLSAgU3RyaW5nUGllY2UgYihzMSk7Ci0gIFN0cmluZ1Bp
ZWNlIGU7Ci0gIHN0cmluZyBzMjsKLQotICAvLyBDb3B5VG9TdHJpbmcKLSAgYS5Db3B5VG9TdHJp
bmcoJnMyKTsKLSAgRVhQRUNUX0VRKHMyLnNpemUoKSwgNik7Ci0gIEVYUEVDVF9FUShzMiwgImZv
b2JhciIpOwotICBiLkNvcHlUb1N0cmluZygmczIpOwotICBFWFBFQ1RfRVEoczIuc2l6ZSgpLCA3
KTsKLSAgRVhQRUNUX0VRKHMxLCBzMik7Ci0gIGUuQ29weVRvU3RyaW5nKCZzMik7Ci0gIEVYUEVD
VF9UUlVFKHMyLmVtcHR5KCkpOwotCi0gIC8vIEFwcGVuZFRvU3RyaW5nCi0gIHMyLmVyYXNlKCk7
Ci0gIGEuQXBwZW5kVG9TdHJpbmcoJnMyKTsKLSAgRVhQRUNUX0VRKHMyLnNpemUoKSwgNik7Ci0g
IEVYUEVDVF9FUShzMiwgImZvb2JhciIpOwotICBhLkFwcGVuZFRvU3RyaW5nKCZzMik7Ci0gIEVY
UEVDVF9FUShzMi5zaXplKCksIDEyKTsKLSAgRVhQRUNUX0VRKHMyLCAiZm9vYmFyZm9vYmFyIik7
Ci0KLSAgLy8gc3RhcnRzX3dpdGgKLSAgRVhQRUNUX1RSVUUoYS5zdGFydHNfd2l0aChhKSk7Ci0g
IEVYUEVDVF9UUlVFKGEuc3RhcnRzX3dpdGgoImZvbyIpKTsKLSAgRVhQRUNUX1RSVUUoYS5zdGFy
dHNfd2l0aChlKSk7Ci0gIEVYUEVDVF9UUlVFKGIuc3RhcnRzX3dpdGgoczEpKTsKLSAgRVhQRUNU
X1RSVUUoYi5zdGFydHNfd2l0aChiKSk7Ci0gIEVYUEVDVF9UUlVFKGIuc3RhcnRzX3dpdGgoZSkp
OwotICBFWFBFQ1RfVFJVRShlLnN0YXJ0c193aXRoKCIiKSk7Ci0gIEVYUEVDVF9UUlVFKCFhLnN0
YXJ0c193aXRoKGIpKTsKLSAgRVhQRUNUX1RSVUUoIWIuc3RhcnRzX3dpdGgoYSkpOwotICBFWFBF
Q1RfVFJVRSghZS5zdGFydHNfd2l0aChhKSk7Ci0KLSAgLy8gZW5kcyB3aXRoCi0gIEVYUEVDVF9U
UlVFKGEuZW5kc193aXRoKGEpKTsKLSAgRVhQRUNUX1RSVUUoYS5lbmRzX3dpdGgoImJhciIpKTsK
LSAgRVhQRUNUX1RSVUUoYS5lbmRzX3dpdGgoZSkpOwotICBFWFBFQ1RfVFJVRShiLmVuZHNfd2l0
aChzMSkpOwotICBFWFBFQ1RfVFJVRShiLmVuZHNfd2l0aChiKSk7Ci0gIEVYUEVDVF9UUlVFKGIu
ZW5kc193aXRoKGUpKTsKLSAgRVhQRUNUX1RSVUUoZS5lbmRzX3dpdGgoIiIpKTsKLSAgRVhQRUNU
X1RSVUUoIWEuZW5kc193aXRoKGIpKTsKLSAgRVhQRUNUX1RSVUUoIWIuZW5kc193aXRoKGEpKTsK
LSAgRVhQRUNUX1RSVUUoIWUuZW5kc193aXRoKGEpKTsKLQotICAvLyByZW1vdmVfcHJlZml4Ci0g
IFN0cmluZ1BpZWNlIGMoYSk7Ci0gIGMucmVtb3ZlX3ByZWZpeCgzKTsKLSAgRVhQRUNUX0VRKGMs
ICJiYXIiKTsKLSAgYyA9IGE7Ci0gIGMucmVtb3ZlX3ByZWZpeCgwKTsKLSAgRVhQRUNUX0VRKGMs
IGEpOwotICBjLnJlbW92ZV9wcmVmaXgoYy5zaXplKCkpOwotICBFWFBFQ1RfRVEoYywgZSk7Ci0K
LSAgLy8gcmVtb3ZlX3N1ZmZpeAotICBjID0gYTsKLSAgYy5yZW1vdmVfc3VmZml4KDMpOwotICBF
WFBFQ1RfRVEoYywgImZvbyIpOwotICBjID0gYTsKLSAgYy5yZW1vdmVfc3VmZml4KDApOwotICBF
WFBFQ1RfRVEoYywgYSk7Ci0gIGMucmVtb3ZlX3N1ZmZpeChjLnNpemUoKSk7Ci0gIEVYUEVDVF9F
UShjLCBlKTsKLQotICAvLyBzZXQKLSAgYy5zZXQoImZvb2JhciIsIDYpOwotICBFWFBFQ1RfRVEo
YywgYSk7Ci0gIGMuc2V0KCJmb29iYXIiLCAwKTsKLSAgRVhQRUNUX0VRKGMsIGUpOwotICBjLnNl
dCgiZm9vYmFyIiwgNyk7Ci0gIEVYUEVDVF9ORShjLCBhKTsKLQotICBjLnNldCgiZm9vYmFyIik7
Ci0gIEVYUEVDVF9FUShjLCBhKTsKLQotICBjLnNldChzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4o
ImZvb2JhciIpLCA2KTsKLSAgRVhQRUNUX0VRKGMsIGEpOwotICBjLnNldChzdGF0aWNfY2FzdDxj
b25zdCB2b2lkKj4oImZvb2JhciIpLCAwKTsKLSAgRVhQRUNUX0VRKGMsIGUpOwotICBjLnNldChz
dGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImZvb2JhciIpLCA3KTsKLSAgRVhQRUNUX05FKGMsIGEp
OwotCi0gIC8vIGFzX3N0cmluZwotICBzdHJpbmcgczMoYS5hc19zdHJpbmcoKS5jX3N0cigpLCA3
KTsKLSAgRVhQRUNUX0VRKGMsIHMzKTsKLSAgc3RyaW5nIHM0KGUuYXNfc3RyaW5nKCkpOwotICBF
WFBFQ1RfVFJVRShzNC5lbXB0eSgpKTsKLQotICAvLyBUb1N0cmluZwotICB7Ci0gICAgc3RyaW5n
IHM1KGEuVG9TdHJpbmcoKS5jX3N0cigpLCA3KTsKLSAgICBFWFBFQ1RfRVEoYywgczUpOwotICAg
IHN0cmluZyBzNihlLlRvU3RyaW5nKCkpOwotICAgIEVYUEVDVF9UUlVFKHM2LmVtcHR5KCkpOwot
ICB9Ci0KLSAgLy8gQ29uc3VtZQotICBhLnNldCgiZm9vYmFyIik7Ci0gIEVYUEVDVF9UUlVFKGEu
Q29uc3VtZSgiZm9vIikpOwotICBFWFBFQ1RfRVEoYSwgImJhciIpOwotICBFWFBFQ1RfRkFMU0Uo
YS5Db25zdW1lKCJmb28iKSk7Ci0gIEVYUEVDVF9GQUxTRShhLkNvbnN1bWUoImJhcmJhciIpKTsK
LSAgRVhQRUNUX0ZBTFNFKGEuQ29uc3VtZSgiYXIiKSk7Ci0gIEVYUEVDVF9FUShhLCAiYmFyIik7
Ci0KLSAgYS5zZXQoImZvb2JhciIpOwotICBFWFBFQ1RfVFJVRShhLkNvbnN1bWVGcm9tRW5kKCJi
YXIiKSk7Ci0gIEVYUEVDVF9FUShhLCAiZm9vIik7Ci0gIEVYUEVDVF9GQUxTRShhLkNvbnN1bWVG
cm9tRW5kKCJiYXIiKSk7Ci0gIEVYUEVDVF9GQUxTRShhLkNvbnN1bWVGcm9tRW5kKCJmb29mb28i
KSk7Ci0gIEVYUEVDVF9GQUxTRShhLkNvbnN1bWVGcm9tRW5kKCJmbyIpKTsKLSAgRVhQRUNUX0VR
KGEsICJmb28iKTsKLX0KLQotVEVTVChTdHJpbmdQaWVjZSwgQ29udGFpbnMpIHsKLSAgU3RyaW5n
UGllY2UgYSgiYWJjZGVmZyIpOwotICBTdHJpbmdQaWVjZSBiKCJhYmNkIik7Ci0gIFN0cmluZ1Bp
ZWNlIGMoImVmZyIpOwotICBTdHJpbmdQaWVjZSBkKCJnaCIpOwotICBFWFBFQ1RfVFJVRShhLmNv
bnRhaW5zKGIpKTsKLSAgRVhQRUNUX1RSVUUoYS5jb250YWlucyhjKSk7Ci0gIEVYUEVDVF9UUlVF
KCFhLmNvbnRhaW5zKGQpKTsKLX0KLQotVEVTVChTdHJpbmdQaWVjZSwgTlVMTElucHV0KSB7Ci0g
IC8vIHdlIHVzZWQgdG8gY3Jhc2ggaGVyZSwgYnV0IG5vdyB3ZSBkb24ndC4KLSAgU3RyaW5nUGll
Y2UgcyhOVUxMKTsKLSAgRVhQRUNUX0VRKHMuZGF0YSgpLCAoY29uc3QgY2hhciopTlVMTCk7Ci0g
IEVYUEVDVF9FUShzLnNpemUoKSwgMCk7Ci0KLSAgcy5zZXQoTlVMTCk7Ci0gIEVYUEVDVF9FUShz
LmRhdGEoKSwgKGNvbnN0IGNoYXIqKU5VTEwpOwotICBFWFBFQ1RfRVEocy5zaXplKCksIDApOwot
Ci0gIC8vIC5Ub1N0cmluZygpIG9uIGEgU3RyaW5nUGllY2Ugd2l0aCBOVUxMIHNob3VsZCBwcm9k
dWNlIHRoZSBlbXB0eSBzdHJpbmcuCi0gIEVYUEVDVF9FUSgiIiwgcy5Ub1N0cmluZygpKTsKLSAg
RVhQRUNUX0VRKCIiLCBzLmFzX3N0cmluZygpKTsKLX0KLQotVEVTVChTdHJpbmdQaWVjZSwgQ29t
cGFyaXNvbnMyKSB7Ci0gIFN0cmluZ1BpZWNlIGFiYygiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4
eXoiKTsKLQotICAvLyBjaGVjayBjb21wYXJpc29uIG9wZXJhdGlvbnMgb24gc3RyaW5ncyBsb25n
ZXIgdGhhbiA0IGJ5dGVzLgotICBFWFBFQ1RfRVEoYWJjLCBTdHJpbmdQaWVjZSgiYWJjZGVmZ2hp
amtsbW5vcHFyc3R1dnd4eXoiKSk7Ci0gIEVYUEVDVF9FUShhYmMuY29tcGFyZShTdHJpbmdQaWVj
ZSgiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKSksIDApOwotCi0gIEVYUEVDVF9MVChhYmMs
IFN0cmluZ1BpZWNlKCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h6eiIpKTsKLSAgRVhQRUNUX0xU
KGFiYy5jb21wYXJlKFN0cmluZ1BpZWNlKCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h6eiIpKSwg
MCk7Ci0KLSAgRVhQRUNUX0dUKGFiYywgU3RyaW5nUGllY2UoImFiY2RlZmdoaWprbG1ub3BxcnN0
dXZ3eHl5IikpOwotICBFWFBFQ1RfR1QoYWJjLmNvbXBhcmUoU3RyaW5nUGllY2UoImFiY2RlZmdo
aWprbG1ub3BxcnN0dXZ3eHl5IikpLCAwKTsKLQotICAvLyBzdGFydHNfd2l0aAotICBFWFBFQ1Rf
VFJVRShhYmMuc3RhcnRzX3dpdGgoYWJjKSk7Ci0gIEVYUEVDVF9UUlVFKGFiYy5zdGFydHNfd2l0
aCgiYWJjZGVmZ2hpamtsbSIpKTsKLSAgRVhQRUNUX1RSVUUoIWFiYy5zdGFydHNfd2l0aCgiYWJj
ZGVmZ3V2d3h5eiIpKTsKLQotICAvLyBlbmRzX3dpdGgKLSAgRVhQRUNUX1RSVUUoYWJjLmVuZHNf
d2l0aChhYmMpKTsKLSAgRVhQRUNUX1RSVUUoIWFiYy5lbmRzX3dpdGgoImFiY2RlZmd1dnd4eXoi
KSk7Ci0gIEVYUEVDVF9UUlVFKGFiYy5lbmRzX3dpdGgoIm5vcHFyc3R1dnd4eXoiKSk7Ci19Ci0K
LVRFU1QoQ29tcGFyaXNvbk9wc1Rlc3QsIFN0cmluZ0NvbXBhcmVOb3RBbWJpZ3VvdXMpIHsKLSAg
RVhQRUNUX0VRKCJoZWxsbyIsIHN0cmluZygiaGVsbG8iKSk7Ci0gIEVYUEVDVF9MVCgiaGVsbG8i
LCBzdHJpbmcoIndvcmxkIikpOwotfQotCi1URVNUKENvbXBhcmlzb25PcHNUZXN0LCBIZXRlcm9n
ZW5vdXNTdHJpbmdQaWVjZUVxdWFscykgewotICBFWFBFQ1RfRVEoU3RyaW5nUGllY2UoImhlbGxv
IiksIHN0cmluZygiaGVsbG8iKSk7Ci0gIEVYUEVDVF9FUSgiaGVsbG8iLCBTdHJpbmdQaWVjZSgi
aGVsbG8iKSk7Ci19Ci0KLVRFU1QoRmluZE9uZUNoYXJUZXN0LCBFZGdlQ2FzZXMpIHsKLSAgU3Ry
aW5nUGllY2UgYSgieHh5eXl4eCIpOwotCi0gIC8vIFNldCBhID0gInh5eXl4Ii4KLSAgYS5yZW1v
dmVfcHJlZml4KDEpOwotICBhLnJlbW92ZV9zdWZmaXgoMSk7Ci0KLSAgRVhQRUNUX0VRKDAsIGEu
ZmluZCgneCcpKTsKLSAgRVhQRUNUX0VRKDAsIGEuZmluZCgneCcsIDApKTsKLSAgRVhQRUNUX0VR
KDQsIGEuZmluZCgneCcsIDEpKTsKLSAgRVhQRUNUX0VRKDQsIGEuZmluZCgneCcsIDQpKTsKLSAg
RVhQRUNUX0VRKFN0cmluZ1BpZWNlOjpucG9zLCBhLmZpbmQoJ3gnLCA1KSk7Ci0KLSAgRVhQRUNU
X0VRKDQsIGEucmZpbmQoJ3gnKSk7Ci0gIEVYUEVDVF9FUSg0LCBhLnJmaW5kKCd4JywgNSkpOwot
ICBFWFBFQ1RfRVEoNCwgYS5yZmluZCgneCcsIDQpKTsKLSAgRVhQRUNUX0VRKDAsIGEucmZpbmQo
J3gnLCAzKSk7Ci0gIEVYUEVDVF9FUSgwLCBhLnJmaW5kKCd4JywgMCkpOwotCi0gIC8vIFNldCBh
ID0gInl5eSIuCi0gIGEucmVtb3ZlX3ByZWZpeCgxKTsKLSAgYS5yZW1vdmVfc3VmZml4KDEpOwot
Ci0gIEVYUEVDVF9FUShTdHJpbmdQaWVjZTo6bnBvcywgYS5maW5kKCd4JykpOwotICBFWFBFQ1Rf
RVEoU3RyaW5nUGllY2U6Om5wb3MsIGEucmZpbmQoJ3gnKSk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVH
Ci1URVNUKE5vbk5lZ2F0aXZlTGVuVGVzdCwgTm9uTmVnYXRpdmVMZW4pIHsKLSAgRVhQRUNUX0RF
QVRIKFN0cmluZ1BpZWNlKCJ4eXoiLCAtMSksICJsZW4gPj0gMCIpOwotfQotI2VuZGlmICAvLyBu
ZGVmIERFQlVHCi0KLX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19
ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvc3RyaW5ncHJpbnRmLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3ByaW50
Zi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNmZGZlNDU0ZTkwMzRlMzZkOTQ2
ZGFiYmRkY2E0ZjE5YmU2MmVkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncHJpbnRmLmNjCisrKyAv
ZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0vLyBmcm9tIGdvb2dsZTMvYmFzZS9zdHJpbmdwcmludGYuY2MKLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmludGYuaD4KLQotI2luY2x1ZGUgPGVycm5v
Lmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+IC8vIEZvciB2YV9saXN0IGFuZCByZWxhdGVkIG9wZXJh
dGlvbnMKLSNpbmNsdWRlIDxzdGRpby5oPiAvLyBNU1ZDIHJlcXVpcmVzIHRoaXMgZm9yIF92c25w
cmludGYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2NvbW1vbi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0K
LSNpZmRlZiBfTVNDX1ZFUgotZW51bSB7IElTX0NPTVBJTEVSX01TVkMgPSAxIH07Ci0jaWZuZGVm
IHZhX2NvcHkKLS8vIERlZmluZSB2YV9jb3B5IGZvciBNU1ZDLiBUaGlzIGlzIGEgaGFjaywgYXNz
dW1pbmcgdmFfbGlzdCBpcyBzaW1wbHkgYQotLy8gcG9pbnRlciBpbnRvIHRoZSBzdGFjayBhbmQg
aXMgc2FmZSB0byBjb3B5LgotI2RlZmluZSB2YV9jb3B5KGRlc3QsIHNyYykgKChkZXN0KSA9IChz
cmMpKQotI2VuZGlmCi0jZWxzZQotZW51bSB7IElTX0NPTVBJTEVSX01TVkMgPSAwIH07Ci0jZW5k
aWYKLQotdm9pZCBTdHJpbmdBcHBlbmRWKHN0cmluZyogZHN0LCBjb25zdCBjaGFyKiBmb3JtYXQs
IHZhX2xpc3QgYXApIHsKLSAgLy8gRmlyc3QgdHJ5IHdpdGggYSBzbWFsbCBmaXhlZCBzaXplIGJ1
ZmZlcgotICBzdGF0aWMgY29uc3QgaW50IGtTcGFjZUxlbmd0aCA9IDEwMjQ7Ci0gIGNoYXIgc3Bh
Y2Vba1NwYWNlTGVuZ3RoXTsKLQotICAvLyBJdCdzIHBvc3NpYmxlIGZvciBtZXRob2RzIHRoYXQg
dXNlIGEgdmFfbGlzdCB0byBpbnZhbGlkYXRlCi0gIC8vIHRoZSBkYXRhIGluIGl0IHVwb24gdXNl
LiAgVGhlIGZpeCBpcyB0byBtYWtlIGEgY29weQotICAvLyBvZiB0aGUgc3RydWN0dXJlIGJlZm9y
ZSB1c2luZyBpdCBhbmQgdXNlIHRoYXQgY29weSBpbnN0ZWFkLgotICB2YV9saXN0IGJhY2t1cF9h
cDsKLSAgdmFfY29weShiYWNrdXBfYXAsIGFwKTsKLSAgaW50IHJlc3VsdCA9IHZzbnByaW50Zihz
cGFjZSwga1NwYWNlTGVuZ3RoLCBmb3JtYXQsIGJhY2t1cF9hcCk7Ci0gIHZhX2VuZChiYWNrdXBf
YXApOwotCi0gIGlmIChyZXN1bHQgPCBrU3BhY2VMZW5ndGgpIHsKLSAgICBpZiAocmVzdWx0ID49
IDApIHsKLSAgICAgIC8vIE5vcm1hbCBjYXNlIC0tIGV2ZXJ5dGhpbmcgZml0LgotICAgICAgZHN0
LT5hcHBlbmQoc3BhY2UsIHJlc3VsdCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KElTX0NPTVBJTEVSX01TVkMpIHsKLSAgICAgIC8vIEVycm9yIG9yIE1TVkMgcnVubmluZyBvdXQg
b2Ygc3BhY2UuICBNU1ZDIDguMCBhbmQgaGlnaGVyCi0gICAgICAvLyBjYW4gYmUgYXNrZWQgYWJv
dXQgc3BhY2UgbmVlZGVkIHdpdGggdGhlIHNwZWNpYWwgaWRpb20gYmVsb3c6Ci0gICAgICB2YV9j
b3B5KGJhY2t1cF9hcCwgYXApOwotICAgICAgcmVzdWx0ID0gdnNucHJpbnRmKE5VTEwsIDAsIGZv
cm1hdCwgYmFja3VwX2FwKTsKLSAgICAgIHZhX2VuZChiYWNrdXBfYXApOwotICAgIH0KLQotICAg
IGlmIChyZXN1bHQgPCAwKSB7Ci0gICAgICAvLyBKdXN0IGFuIGVycm9yLgotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgfQotCi0gIC8vIEluY3JlYXNlIHRoZSBidWZmZXIgc2l6ZSB0byB0aGUgc2l6
ZSByZXF1ZXN0ZWQgYnkgdnNucHJpbnRmLAotICAvLyBwbHVzIG9uZSBmb3IgdGhlIGNsb3Npbmcg
XDAuCi0gIGludCBsZW5ndGggPSByZXN1bHQrMTsKLSAgY2hhciogYnVmID0gbmV3IGNoYXJbbGVu
Z3RoXTsKLQotICAvLyBSZXN0b3JlIHRoZSB2YV9saXN0IGJlZm9yZSB3ZSB1c2UgaXQgYWdhaW4K
LSAgdmFfY29weShiYWNrdXBfYXAsIGFwKTsKLSAgcmVzdWx0ID0gdnNucHJpbnRmKGJ1ZiwgbGVu
Z3RoLCBmb3JtYXQsIGJhY2t1cF9hcCk7Ci0gIHZhX2VuZChiYWNrdXBfYXApOwotCi0gIGlmIChy
ZXN1bHQgPj0gMCAmJiByZXN1bHQgPCBsZW5ndGgpIHsKLSAgICAvLyBJdCBmaXQKLSAgICBkc3Qt
PmFwcGVuZChidWYsIHJlc3VsdCk7Ci0gIH0KLSAgZGVsZXRlW10gYnVmOwotfQotCi0KLXN0cmlu
ZyBTdHJpbmdQcmludGYoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIHsKLSAgdmFfbGlzdCBhcDsK
LSAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0gIHN0cmluZyByZXN1bHQ7Ci0gIFN0cmluZ0FwcGVu
ZFYoJnJlc3VsdCwgZm9ybWF0LCBhcCk7Ci0gIHZhX2VuZChhcCk7Ci0gIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWNvbnN0IHN0cmluZyYgU1N0cmluZ1ByaW50ZihzdHJpbmcqIGRzdCwgY29uc3QgY2hh
ciogZm9ybWF0LCAuLi4pIHsKLSAgdmFfbGlzdCBhcDsKLSAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7
Ci0gIGRzdC0+Y2xlYXIoKTsKLSAgU3RyaW5nQXBwZW5kVihkc3QsIGZvcm1hdCwgYXApOwotICB2
YV9lbmQoYXApOwotICByZXR1cm4gKmRzdDsKLX0KLQotdm9pZCBTdHJpbmdBcHBlbmRGKHN0cmlu
ZyogZHN0LCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgewotICB2YV9saXN0IGFwOwotICB2YV9z
dGFydChhcCwgZm9ybWF0KTsKLSAgU3RyaW5nQXBwZW5kVihkc3QsIGZvcm1hdCwgYXApOwotICB2
YV9lbmQoYXApOwotfQotCi0vLyBNYXggYXJndW1lbnRzIHN1cHBvcnRlZCBieSBTdHJpbmdQcmlu
dFZlY3RvcgotY29uc3QgaW50IGtTdHJpbmdQcmludGZWZWN0b3JNYXhBcmdzID0gMzI7Ci0KLS8v
IEFuIGVtcHR5IGJsb2NrIG9mIHplcm8gZm9yIGZpbGxlciBhcmd1bWVudHMuICBUaGlzIGlzIGNv
bnN0IHNvIHRoYXQgaWYKLS8vIHByaW50ZiB0cmllcyB0byB3cml0ZSB0byBpdCAodmlhICVuKSB0
aGVuIHRoZSBwcm9ncmFtIGdldHMgYSBTSUdTRUdWCi0vLyBhbmQgd2UgY2FuIGZpeCB0aGUgcHJv
YmxlbSBvciBwcm90ZWN0IGFnYWluc3QgYW4gYXR0YWNrLgotc3RhdGljIGNvbnN0IGNoYXIgc3Ry
aW5nX3ByaW50Zl9lbXB0eV9ibG9ja1syNTZdID0geyAnXDAnIH07Ci0KLXN0cmluZyBTdHJpbmdQ
cmludGZWZWN0b3IoY29uc3QgY2hhciogZm9ybWF0LCBjb25zdCB2ZWN0b3I8c3RyaW5nPiYgdikg
ewotICBHT09HTEVfQ0hFQ0tfTEUodi5zaXplKCksIGtTdHJpbmdQcmludGZWZWN0b3JNYXhBcmdz
KQotICAgICAgPDwgIlN0cmluZ1ByaW50ZlZlY3RvciBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1
cCB0byAiCi0gICAgICA8PCBrU3RyaW5nUHJpbnRmVmVjdG9yTWF4QXJncyA8PCAiIGFyZ3VtZW50
cy4gIgotICAgICAgPDwgIkZlZWwgZnJlZSB0byBhZGQgc3VwcG9ydCBmb3IgbW9yZSBpZiB5b3Ug
bmVlZCBpdC4iOwotCi0gIC8vIEFkZCBmaWxsZXIgYXJndW1lbnRzIHNvIHRoYXQgYm9ndXMgZm9y
bWF0K2FyZ3MgaGF2ZSBhIGhhcmRlciB0aW1lCi0gIC8vIGNyYXNoaW5nIHRoZSBwcm9ncmFtLCBj
b3JydXB0aW5nIHRoZSBwcm9ncmFtICglbiksCi0gIC8vIG9yIGRpc3BsYXlpbmcgcmFuZG9tIGNo
dW5rcyBvZiBtZW1vcnkgdG8gdXNlcnMuCi0KLSAgY29uc3QgY2hhciogY3N0cltrU3RyaW5nUHJp
bnRmVmVjdG9yTWF4QXJnc107Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdi5zaXplKCk7ICsraSkg
ewotICAgIGNzdHJbaV0gPSB2W2ldLmNfc3RyKCk7Ci0gIH0KLSAgZm9yIChpbnQgaSA9IHYuc2l6
ZSgpOyBpIDwgR09PR0xFX0FSUkFZU0laRShjc3RyKTsgKytpKSB7Ci0gICAgY3N0cltpXSA9ICZz
dHJpbmdfcHJpbnRmX2VtcHR5X2Jsb2NrWzBdOwotICB9Ci0KLSAgLy8gSSBkbyBub3Qga25vdyBh
bnkgd2F5IHRvIHBhc3Mga1N0cmluZ1ByaW50ZlZlY3Rvck1heEFyZ3MgYXJndW1lbnRzLAotICAv
LyBvciBhbnkgd2F5IHRvIGJ1aWxkIGEgdmFfbGlzdCBieSBoYW5kLCBvciBhbnkgQVBJIGZvciBw
cmludGYKLSAgLy8gdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFyZ3VtZW50cy4gIFRoZSBiZXN0
IEkgY2FuIGRvIGlzIHN0aWNrCi0gIC8vIHRoaXMgQ09NUElMRV9BU1NFUlQgcmlnaHQgbmV4dCB0
byB0aGUgYWN0dWFsIHN0YXRlbWVudC4KLQotICBHT09HTEVfQ09NUElMRV9BU1NFUlQoa1N0cmlu
Z1ByaW50ZlZlY3Rvck1heEFyZ3MgPT0gMzIsIGFyZ19jb3VudF9taXNtYXRjaCk7Ci0gIHJldHVy
biBTdHJpbmdQcmludGYoZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgIGNzdHJbMF0sIGNz
dHJbMV0sIGNzdHJbMl0sIGNzdHJbM10sIGNzdHJbNF0sCi0gICAgICAgICAgICAgICAgICAgICAg
Y3N0cls1XSwgY3N0cls2XSwgY3N0cls3XSwgY3N0cls4XSwgY3N0cls5XSwKLSAgICAgICAgICAg
ICAgICAgICAgICBjc3RyWzEwXSwgY3N0clsxMV0sIGNzdHJbMTJdLCBjc3RyWzEzXSwgY3N0clsx
NF0sCi0gICAgICAgICAgICAgICAgICAgICAgY3N0clsxNV0sIGNzdHJbMTZdLCBjc3RyWzE3XSwg
Y3N0clsxOF0sIGNzdHJbMTldLAotICAgICAgICAgICAgICAgICAgICAgIGNzdHJbMjBdLCBjc3Ry
WzIxXSwgY3N0clsyMl0sIGNzdHJbMjNdLCBjc3RyWzI0XSwKLSAgICAgICAgICAgICAgICAgICAg
ICBjc3RyWzI1XSwgY3N0clsyNl0sIGNzdHJbMjddLCBjc3RyWzI4XSwgY3N0clsyOV0sCi0gICAg
ICAgICAgICAgICAgICAgICAgY3N0clszMF0sIGNzdHJbMzFdKTsKLX0KLX0gIC8vIG5hbWVzcGFj
ZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3N0dWJzL3N0cmluZ3ByaW50Zi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJz
L3N0cmluZ3ByaW50Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjFhYjU1ODMy
OWU0NmUzMWY4NDk0OGU4ZDI2YzBhZGVhZTdkOGY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmlu
dGYuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMTIgR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0vLyBmcm9tIGdvb2dsZTMvYmFzZS9zdHJpbmdwcmludGYuaAotLy8K
LS8vIFByaW50ZiB2YXJpYW50cyB0aGF0IHBsYWNlIHRoZWlyIG91dHB1dCBpbiBhIEMrKyBzdHJp
bmcuCi0vLwotLy8gVXNhZ2U6Ci0vLyAgICAgIHN0cmluZyByZXN1bHQgPSBTdHJpbmdQcmludGYo
IiVkICVzXG4iLCAxMCwgImhlbGxvIik7Ci0vLyAgICAgIFNTdHJpbmdQcmludGYoJnJlc3VsdCwg
IiVkICVzXG4iLCAxMCwgImhlbGxvIik7Ci0vLyAgICAgIFN0cmluZ0FwcGVuZEYoJnJlc3VsdCwg
IiVkICVzXG4iLCAyMCwgInRoZXJlIik7Ci0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1NUVUJT
X1NUUklOR1BSSU5URl9ICi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19TVFJJTkdQUklO
VEZfSAotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUg
PHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi0vLyBSZXR1cm4gYSBD
Kysgc3RyaW5nCi1MSUJQUk9UT0JVRl9FWFBPUlQgZXh0ZXJuIHN0cmluZyBTdHJpbmdQcmludGYo
Y29uc3QgY2hhciogZm9ybWF0LCAuLi4pOwotCi0vLyBTdG9yZSByZXN1bHQgaW50byBhIHN1cHBs
aWVkIHN0cmluZyBhbmQgcmV0dXJuIGl0Ci1MSUJQUk9UT0JVRl9FWFBPUlQgZXh0ZXJuIGNvbnN0
IHN0cmluZyYgU1N0cmluZ1ByaW50ZihzdHJpbmcqIGRzdCwgY29uc3QgY2hhciogZm9ybWF0LCAu
Li4pOwotCi0vLyBBcHBlbmQgcmVzdWx0IHRvIGEgc3VwcGxpZWQgc3RyaW5nCi1MSUJQUk9UT0JV
Rl9FWFBPUlQgZXh0ZXJuIHZvaWQgU3RyaW5nQXBwZW5kRihzdHJpbmcqIGRzdCwgY29uc3QgY2hh
ciogZm9ybWF0LCAuLi4pOwotCi0vLyBMb3dlci1sZXZlbCByb3V0aW5lIHRoYXQgdGFrZXMgYSB2
YV9saXN0IGFuZCBhcHBlbmRzIHRvIGEgc3BlY2lmaWVkCi0vLyBzdHJpbmcuICBBbGwgb3RoZXIg
cm91dGluZXMgYXJlIGp1c3QgY29udmVuaWVuY2Ugd3JhcHBlcnMgYXJvdW5kIGl0LgotTElCUFJP
VE9CVUZfRVhQT1JUIGV4dGVybiB2b2lkIFN0cmluZ0FwcGVuZFYoc3RyaW5nKiBkc3QsIGNvbnN0
IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcCk7Ci0KLS8vIFRoZSBtYXggYXJndW1lbnRzIHN1cHBv
cnRlZCBieSBTdHJpbmdQcmludGZWZWN0b3IKLUxJQlBST1RPQlVGX0VYUE9SVCBleHRlcm4gY29u
c3QgaW50IGtTdHJpbmdQcmludGZWZWN0b3JNYXhBcmdzOwotCi0vLyBZb3UgY2FuIHVzZSB0aGlz
IHZlcnNpb24gd2hlbiBhbGwgeW91ciBhcmd1bWVudHMgYXJlIHN0cmluZ3MsIGJ1dAotLy8geW91
IGRvbid0IGtub3cgaG93IG1hbnkgYXJndW1lbnRzIHlvdSdsbCBoYXZlIGF0IGNvbXBpbGUgdGlt
ZS4KLS8vIFN0cmluZ1ByaW50ZlZlY3RvciB3aWxsIExPRyhGQVRBTCkgaWYgdi5zaXplKCkgPiBr
U3RyaW5nUHJpbnRmVmVjdG9yTWF4QXJncwotTElCUFJPVE9CVUZfRVhQT1JUIGV4dGVybiBzdHJp
bmcgU3RyaW5nUHJpbnRmVmVjdG9yKGNvbnN0IGNoYXIqIGZvcm1hdCwgY29uc3QgdmVjdG9yPHN0
cmluZz4mIHYpOwotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfU1RVQlNfU1RSSU5HUFJJTlRGX0gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmludGZfdW5pdHRl
c3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncHJpbnRmX3VuaXR0ZXN0LmNj
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTg5NWU1OTZjZGM0M2YwNjRiYmY3Mjgz
ZWRmN2E4MDM3NzkzNGUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmludGZfdW5pdHRlc3QuY2MK
KysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIGZyb20gZ29vZ2xlMy9iYXNlL3N0cmluZ3ByaW50Zl91bml0dGVzdC5j
YwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3ByaW50Zi5oPgotCi0j
aW5jbHVkZSA8Y2Vycm5vPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ugewot
Ci1URVNUKFN0cmluZ1ByaW50ZlRlc3QsIEVtcHR5KSB7Ci0jaWYgMAotICAvLyBnY2MgMi45NS4z
LCBnY2MgNC4xLjAsIGFuZCBnY2MgNC4yLjIgYWxsIHdhcm4gYWJvdXQgdGhpczoKLSAgLy8gd2Fy
bmluZzogemVyby1sZW5ndGggcHJpbnRmIGZvcm1hdCBzdHJpbmcuCi0gIC8vIHNvIHdlIGRvIG5v
dCBhbGxvdyB0aGVtIGluIGdvb2dsZTMuCi0gIEVYUEVDVF9FUSgiIiwgU3RyaW5nUHJpbnRmKCIi
KSk7Ci0jZW5kaWYKLSAgRVhQRUNUX0VRKCIiLCBTdHJpbmdQcmludGYoIiVzIiwgc3RyaW5nKCku
Y19zdHIoKSkpOwotICBFWFBFQ1RfRVEoIiIsIFN0cmluZ1ByaW50ZigiJXMiLCAiIikpOwotfQot
Ci1URVNUKFN0cmluZ1ByaW50ZlRlc3QsIE1pc2MpIHsKLS8vIE1TVkMgYW5kIG1pbmd3IGRvZXMg
bm90IHN1cHBvcnQgJCBmb3JtYXQgc3BlY2lmaWVyLgotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSAm
JiAhZGVmaW5lZChfX01JTkdXMzJfXykKLSAgRVhQRUNUX0VRKCIxMjNoZWxsbyB3IiwgU3RyaW5n
UHJpbnRmKCIlMyRkJTIkcyAlMSRjIiwgJ3cnLCAiaGVsbG8iLCAxMjMpKTsKLSNlbmRpZiAgLy8g
IV9NU0NfVkVSCi19Ci0KLVRFU1QoU3RyaW5nQXBwZW5kRlRlc3QsIEVtcHR5KSB7Ci0gIHN0cmlu
ZyB2YWx1ZSgiSGVsbG8iKTsKLSAgY29uc3QgY2hhciogZW1wdHkgPSAiIjsKLSAgU3RyaW5nQXBw
ZW5kRigmdmFsdWUsICIlcyIsIGVtcHR5KTsKLSAgRVhQRUNUX0VRKCJIZWxsbyIsIHZhbHVlKTsK
LX0KLQotVEVTVChTdHJpbmdBcHBlbmRGVGVzdCwgRW1wdHlTdHJpbmcpIHsKLSAgc3RyaW5nIHZh
bHVlKCJIZWxsbyIpOwotICBTdHJpbmdBcHBlbmRGKCZ2YWx1ZSwgIiVzIiwgIiIpOwotICBFWFBF
Q1RfRVEoIkhlbGxvIiwgdmFsdWUpOwotfQotCi1URVNUKFN0cmluZ0FwcGVuZEZUZXN0LCBTdHJp
bmcpIHsKLSAgc3RyaW5nIHZhbHVlKCJIZWxsbyIpOwotICBTdHJpbmdBcHBlbmRGKCZ2YWx1ZSwg
IiAlcyIsICJXb3JsZCIpOwotICBFWFBFQ1RfRVEoIkhlbGxvIFdvcmxkIiwgdmFsdWUpOwotfQot
Ci1URVNUKFN0cmluZ0FwcGVuZEZUZXN0LCBJbnQpIHsKLSAgc3RyaW5nIHZhbHVlKCJIZWxsbyIp
OwotICBTdHJpbmdBcHBlbmRGKCZ2YWx1ZSwgIiAlZCIsIDEyMyk7Ci0gIEVYUEVDVF9FUSgiSGVs
bG8gMTIzIiwgdmFsdWUpOwotfQotCi1URVNUKFN0cmluZ1ByaW50ZlRlc3QsIE11bHRpYnl0ZSkg
ewotICAvLyBJZiB3ZSBhcmUgaW4gbXVsdGlieXRlIG1vZGUgYW5kIGZlZWQgaW52YWxpZCBtdWx0
aWJ5dGUgc2VxdWVuY2UsCi0gIC8vIFN0cmluZ1ByaW50ZiBzaG91bGQgcmV0dXJuIGFuIGVtcHR5
IHN0cmluZyBpbnN0ZWFkIG9mIHJ1bm5pbmcKLSAgLy8gb3V0IG9mIG1lbW9yeSB3aGlsZSB0cnlp
bmcgdG8gZGV0ZXJtaW5lIGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXplLgotICAvLyBzZWUgYi80MTk0
NTQzLgotCi0gIGNoYXIqIG9sZF9sb2NhbGUgPSBzZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpOwot
ICAvLyBQdXNoIGxvY2FsZSB3aXRoIG11bHRpYnl0ZSBtb2RlCi0gIHNldGxvY2FsZShMQ19DVFlQ
RSwgImVuX1VTLnV0ZjgiKTsKLQotICBjb25zdCBjaGFyIGtJbnZhbGlkQ29kZVBvaW50W10gPSAi
XDM3NVwwNjdzIjsKLSAgc3RyaW5nIHZhbHVlID0gU3RyaW5nUHJpbnRmKCIlLipzIiwgMywga0lu
dmFsaWRDb2RlUG9pbnQpOwotCi0gIC8vIEluIHNvbWUgdmVyc2lvbnMgb2YgZ2xpYmMgKGUuZy4g
ZWdsaWJjLTIuMTEuMSwgYWthIEdSVEV2MiksIHNucHJpbnRmCi0gIC8vIHJldHVybnMgZXJyb3Ig
Z2l2ZW4gYW4gaW52YWxpZCBjb2RlcG9pbnQuIE90aGVyIHZlcnNpb25zCi0gIC8vIChlLmcuIGVn
bGliYy0yLjE1LCBha2EgcHJlLUdSVEV2MykgZW1pdCB0aGUgY29kZXBvaW50IHZlcmJhdGltLgot
ICAvLyBXZSB0ZXN0IHRoYXQgdGhlIG91dHB1dCBpcyBvbmUgb2YgdGhlIGFib3ZlLgotICBFWFBF
Q1RfVFJVRSh2YWx1ZS5lbXB0eSgpIHx8IHZhbHVlID09IGtJbnZhbGlkQ29kZVBvaW50KTsKLQot
ICAvLyBSZXBlYXQgd2l0aCBsb25nZXIgc3RyaW5nLCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZHlu
YW1pY2FsbHkKLSAgLy8gYWxsb2NhdGVkIHBhdGggaW4gU3RyaW5nQXBwZW5kViBpcyBoYW5kbGVk
IGNvcnJlY3RseS4KLSAgaW50IG4gPSAyMDQ4OwotICBjaGFyKiBidWYgPSBuZXcgY2hhcltuKzFd
OwotICBtZW1zZXQoYnVmLCAnICcsIG4tMyk7Ci0gIG1lbWNweShidWYgKyBuIC0gMywga0ludmFs
aWRDb2RlUG9pbnQsIDQpOwotICB2YWx1ZSA9ICBTdHJpbmdQcmludGYoIiUuKnMiLCBuLCBidWYp
OwotICAvLyBTZWUgR1JURXYyIHZzLiBHUlRFdjMgY29tbWVudCBhYm92ZS4KLSAgRVhQRUNUX1RS
VUUodmFsdWUuZW1wdHkoKSB8fCB2YWx1ZSA9PSBidWYpOwotICBkZWxldGVbXSBidWY7Ci0KLSAg
c2V0bG9jYWxlKExDX0NUWVBFLCBvbGRfbG9jYWxlKTsKLX0KLQotVEVTVChTdHJpbmdQcmludGZU
ZXN0LCBOb011bHRpYnl0ZSkgewotICAvLyBObyBtdWx0aWJ5dGUgaGFuZGxpbmcsIGJ1dCB0aGUg
c3RyaW5nIGNvbnRhaW5zIGZ1bm55IGNoYXJzLgotICBjaGFyKiBvbGRfbG9jYWxlID0gc2V0bG9j
YWxlKExDX0NUWVBFLCBOVUxMKTsKLSAgc2V0bG9jYWxlKExDX0NUWVBFLCAiUE9TSVgiKTsKLSAg
c3RyaW5nIHZhbHVlID0gU3RyaW5nUHJpbnRmKCIlLipzIiwgMywgIlwzNzVcMDY3cyIpOwotICBz
ZXRsb2NhbGUoTENfQ1RZUEUsIG9sZF9sb2NhbGUpOwotICBFWFBFQ1RfRVEoIlwzNzVcMDY3cyIs
IHZhbHVlKTsKLX0KLQotVEVTVChTdHJpbmdQcmludGZUZXN0LCBEb250T3ZlcndyaXRlRXJybm8p
IHsKLSAgLy8gQ2hlY2sgdGhhdCBlcnJubyBpc24ndCBvdmVyd3JpdHRlbiB1bmxlc3Mgd2UncmUg
cHJpbnRpbmcKLSAgLy8gc29tZXRoaW5nIHNpZ25pZmljYW50bHkgbGFyZ2VyIHRoYW4gd2hhdCBw
ZW9wbGUgYXJlIG5vcm1hbGx5Ci0gIC8vIHByaW50aW5nIGluIHRoZWlyIGJhZGx5IHdyaXR0ZW4g
UExPRygpIHN0YXRlbWVudHMuCi0gIGVycm5vID0gRUNISUxEOwotICBzdHJpbmcgdmFsdWUgPSBT
dHJpbmdQcmludGYoIkhlbGxvLCAlcyEiLCAiV29ybGQiKTsKLSAgRVhQRUNUX0VRKEVDSElMRCwg
ZXJybm8pOwotfQotCi1URVNUKFN0cmluZ1ByaW50ZlRlc3QsIExhcmdlQnVmKSB7Ci0gIC8vIENo
ZWNrIHRoYXQgdGhlIGxhcmdlIGJ1ZmZlciBpcyBoYW5kbGVkIGNvcnJlY3RseS4KLSAgaW50IG4g
PSAyMDQ4OwotICBjaGFyKiBidWYgPSBuZXcgY2hhcltuKzFdOwotICBtZW1zZXQoYnVmLCAnICcs
IG4pOwotICBidWZbbl0gPSAwOwotICBzdHJpbmcgdmFsdWUgPSBTdHJpbmdQcmludGYoIiVzIiwg
YnVmKTsKLSAgRVhQRUNUX0VRKGJ1ZiwgdmFsdWUpOwotICBkZWxldGVbXSBidWY7Ci19Ci0KLX0g
IC8vIGFub255bW91cyBuYW1lc3BhY2UKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8g
bmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0
cnVjdHVyYWxseV92YWxpZC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1Y3R1cmFs
bHlfdmFsaWQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3OWE2ZWU0NTAwN2M5
OWQ3YjIwNTlkNTBiMWZmMzc0ODVhMzEzOGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnVjdHVyYWxseV92
YWxpZC5jYworKysgL2Rldi9udWxsCkBAIC0xLDU4OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAw
NS0yMDA4IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLyBBdXRob3I6IGpybUBn
b29nbGUuY29tIChKaW0gTWVlaGFuKQotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2NvbW1vbi5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3BpZWNl
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFj
ZSBpbnRlcm5hbCB7Ci0KLS8vIFRoZXNlIGZvdXItYnl0ZSBlbnRyaWVzIGNvbXBhY3RseSBlbmNv
ZGUgaG93IG1hbnkgYnl0ZXMgMC4uMjU1IHRvIGRlbGV0ZQotLy8gaW4gbWFraW5nIGEgc3RyaW5n
IHJlcGxhY2VtZW50LCBob3cgbWFueSBieXRlcyB0byBhZGQgMC4uMjU1LCBhbmQgdGhlIG9mZnNl
dAotLy8gMC4uNjRrLTEgb2YgdGhlIHJlcGxhY2VtZW50IHN0cmluZyBpbiByZW1hcF9zdHJpbmcu
Ci1zdHJ1Y3QgUmVtYXBFbnRyeSB7Ci0gIHVpbnQ4IGRlbGV0ZV9ieXRlczsKLSAgdWludDggYWRk
X2J5dGVzOwotICB1aW50MTYgYnl0ZXNfb2Zmc2V0OwotfTsKLQotLy8gRXhpdCB0eXBlIGNvZGVz
IGZvciBzdGF0ZSB0YWJsZXMuIEFsbCBidXQgdGhlIGZpcnN0IGdldCBzdHVmZmVkIGludG8KLS8v
IHNpZ25lZCBvbmUtYnl0ZSBlbnRyaWVzLiBUaGUgZmlyc3QgaXMgb25seSBnZW5lcmF0ZWQgYnkg
ZXhlY3V0YWJsZSBjb2RlLgotLy8gVG8gZGlzdGluZ3Vpc2ggZnJvbSBuZXh0LXN0YXRlIGVudHJp
ZXMsIHRoZXNlIG11c3QgYmUgY29udGlndW91cyBhbmQKLS8vIGFsbCA8PSBrRXhpdE5vbmUKLXR5
cGVkZWYgZW51bSB7Ci0gIGtFeGl0RHN0U3BhY2VGdWxsID0gMjM5LAotICBrRXhpdElsbGVnYWxT
dHJ1Y3R1cmUsICAvLyAyNDAKLSAga0V4aXRPSywgICAgICAgICAgICAgICAgLy8gMjQxCi0gIGtF
eGl0UmVqZWN0LCAgICAgICAgICAgIC8vIC4uLgotICBrRXhpdFJlcGxhY2UxLAotICBrRXhpdFJl
cGxhY2UyLAotICBrRXhpdFJlcGxhY2UzLAotICBrRXhpdFJlcGxhY2UyMSwKLSAga0V4aXRSZXBs
YWNlMzEsCi0gIGtFeGl0UmVwbGFjZTMyLAotICBrRXhpdFJlcGxhY2VPZmZzZXQxLAotICBrRXhp
dFJlcGxhY2VPZmZzZXQyLAotICBrRXhpdFJlcGxhY2UxUzAsCi0gIGtFeGl0U3BlY2lhbCwKLSAg
a0V4aXREb0FnYWluLAotICBrRXhpdFJlamVjdEFsdCwKLSAga0V4aXROb25lICAgICAgICAgICAg
ICAgLy8gMjU1Ci19IEV4aXRSZWFzb247Ci0KLQotLy8gVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyBv
bmUgZW50aXJlIHN0YXRlIHRhYmxlLiBUaGUgdGhyZWUgaW5pdGlhbGl6ZWQgYnl0ZQotLy8gYXJl
YXMgYXJlIHN0YXRlX3RhYmxlLCByZW1hcF9iYXNlLCBhbmQgcmVtYXBfc3RyaW5nLiBzdGF0ZTAg
YW5kIHN0YXRlMF9zaXplCi0vLyBnaXZlIHRoZSBieXRlIG9mZnNldCBhbmQgbGVuZ3RoIHdpdGhp
biBzdGF0ZV90YWJsZSBvZiB0aGUgaW5pdGlhbCBzdGF0ZSAtLQotLy8gdGFibGUgbG9va3VwcyBh
cmUgZXhwZWN0ZWQgdG8gc3RhcnQgYW5kIGVuZCBpbiB0aGlzIHN0YXRlLCBidXQgZm9yCi0vLyB0
cnVuY2F0ZWQgVVRGLTggc3RyaW5ncywgbWF5IGVuZCBpbiBhIGRpZmZlcmVudCBzdGF0ZS4gVGhl
c2UgYWxsb3cgYSBxdWljawotLy8gdGVzdCBmb3IgdGhhdCBjb25kaXRpb24uIGVudHJ5X3NoaWZ0
IGlzIDggZm9yIHRhYmxlcyBzdWJzY3JpcHRlZCBieSBhIGZ1bGwKLS8vIGJ5dGUgdmFsdWUgYW5k
IDYgZm9yIHNwYWNlLW9wdGltaXplZCB0YWJsZXMgc3Vic2NyaXB0ZWQgYnkgb25seSBzaXgKLS8v
IHNpZ25pZmljYW50IGJpdHMgaW4gVVRGLTggY29udGludWF0aW9uIGJ5dGVzLgotdHlwZWRlZiBz
dHJ1Y3QgewotICBjb25zdCB1aW50MzIgc3RhdGUwOwotICBjb25zdCB1aW50MzIgc3RhdGUwX3Np
emU7Ci0gIGNvbnN0IHVpbnQzMiB0b3RhbF9zaXplOwotICBjb25zdCBpbnQgbWF4X2V4cGFuZDsK
LSAgY29uc3QgaW50IGVudHJ5X3NoaWZ0OwotICBjb25zdCBpbnQgYnl0ZXNfcGVyX2VudHJ5Owot
ICBjb25zdCB1aW50MzIgbG9zdWI7Ci0gIGNvbnN0IHVpbnQzMiBoaWFkZDsKLSAgY29uc3QgdWlu
dDgqIHN0YXRlX3RhYmxlOwotICBjb25zdCBSZW1hcEVudHJ5KiByZW1hcF9iYXNlOwotICBjb25z
dCB1aW50OCogcmVtYXBfc3RyaW5nOwotICBjb25zdCB1aW50OCogZmFzdF9zdGF0ZTsKLX0gVVRG
OFN0YXRlTWFjaGluZU9iajsKLQotdHlwZWRlZiBVVEY4U3RhdGVNYWNoaW5lT2JqIFVURjhTY2Fu
T2JqOwotCi0jZGVmaW5lIFhfXyAoa0V4aXRJbGxlZ2FsU3RydWN0dXJlKQotI2RlZmluZSBSSl8g
KGtFeGl0UmVqZWN0KQotI2RlZmluZSBTMV8gKGtFeGl0UmVwbGFjZTEpCi0jZGVmaW5lIFMyXyAo
a0V4aXRSZXBsYWNlMikKLSNkZWZpbmUgUzNfIChrRXhpdFJlcGxhY2UzKQotI2RlZmluZSBTMjEg
KGtFeGl0UmVwbGFjZTIxKQotI2RlZmluZSBTMzEgKGtFeGl0UmVwbGFjZTMxKQotI2RlZmluZSBT
MzIgKGtFeGl0UmVwbGFjZTMyKQotI2RlZmluZSBUMV8gKGtFeGl0UmVwbGFjZU9mZnNldDEpCi0j
ZGVmaW5lIFQyXyAoa0V4aXRSZXBsYWNlT2Zmc2V0MikKLSNkZWZpbmUgUzExIChrRXhpdFJlcGxh
Y2UxUzApCi0jZGVmaW5lIFNQXyAoa0V4aXRTcGVjaWFsKQotI2RlZmluZSBEX18gKGtFeGl0RG9B
Z2FpbikKLSNkZWZpbmUgUkpBIChrRXhpdFJlamVjdEFsdCkKLQotLy8gIEVudGlyZSB0YWJsZSBo
YXMgOSBzdGF0ZSBibG9ja3Mgb2YgMjU2IGVudHJpZXMgZWFjaAotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGludCB1dGY4YWNjZXB0bm9uc3Vycm9nYXRlc19TVEFURTAgPSAwOyAgICAgLy8gc3RhdGVb
MF0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXRmOGFjY2VwdG5vbnN1cnJvZ2F0ZXNfU1RB
VEUwX1NJWkUgPSAyNTY7ICAvLyA9WzFdCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHV0Zjhh
Y2NlcHRub25zdXJyb2dhdGVzX1RPVEFMX1NJWkUgPSAyMzA0Owotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGludCB1dGY4YWNjZXB0bm9uc3Vycm9nYXRlc19NQVhfRVhQQU5EX1g0ID0gMDsKLXN0YXRp
YyBjb25zdCB1bnNpZ25lZCBpbnQgdXRmOGFjY2VwdG5vbnN1cnJvZ2F0ZXNfU0hJRlQgPSA4Owot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1dGY4YWNjZXB0bm9uc3Vycm9nYXRlc19CWVRFUyA9
IDE7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHV0ZjhhY2NlcHRub25zdXJyb2dhdGVzX0xP
U1VCID0gMHgyMDIwMjAyMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXRmOGFjY2VwdG5v
bnN1cnJvZ2F0ZXNfSElBREQgPSAweDAwMDAwMDAwOwotCi1zdGF0aWMgY29uc3QgdWludDggdXRm
OGFjY2VwdG5vbnN1cnJvZ2F0ZXNbXSA9IHsKLS8vIHN0YXRlWzBdIDB4MDAwMDAwIEJ5dGUgMQot
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCi0gIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLAotICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLQotICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwKLSAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCi0gIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLAotICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLQotWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywK
LVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywKLQotWF9fLCBYX18sICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAg
IDEsICAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwKLSAgMSwgICAxLCAg
IDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAg
MSwgICAxLCAgIDEsCi0gIDIsICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAg
MywgICAzLCAgIDMsICAgMywgICAzLCAgIDcsICAgMywgICAzLAotICA0LCAgIDUsICAgNSwgICA1
LCAgIDYsIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywKLQotLy8gc3RhdGVbMV0gMHgwMDAwODAgQnl0ZSAyIG9mIDIKLVhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi0KLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1Y
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sCi0KLSAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCi0gIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLAotICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsCi0KLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAot
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi0KLS8vIHN0
YXRlWzJdIDB4MDAwMDAwIEJ5dGUgMiBvZiAzCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLAotCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LAotCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLSAg
MSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgICAxLCAgIDEsICAgMSwgICAx
LCAgIDEsICAgMSwgICAxLCAgIDEsCi0gIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEs
ICAgMSwgICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLAotCi1YX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
ICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotCi0vLyBzdGF0ZVszXSAweDAwMTAw
MCBCeXRlIDIgb2YgMwotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywK
LQotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLQotICAxLCAgIDEs
ICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwg
ICAxLCAgIDEsICAgMSwKLSAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAg
ICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsCi0gIDEsICAgMSwgICAxLCAg
IDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAg
MSwgICAxLAotICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgIDEsICAg
MSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwKLQotWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywKLQotLy8gc3RhdGVbNF0gMHgwMDAwMDAgQnl0ZSAyIG9mIDQK
LVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi0KLVhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi0KLVhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
Ci0gIDMsICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAgMywgICAzLCAgIDMs
ICAgMywgICAzLCAgIDMsICAgMywgICAzLAotICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywg
ICAzLCAgIDMsICAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywKLSAgMywg
ICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgICAzLCAgIDMsICAgMywgICAzLCAg
IDMsICAgMywgICAzLCAgIDMsCi0KLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sCi0KLS8vIHN0YXRlWzVdIDB4MDQwMDAwIEJ5dGUgMiBvZiA0Ci1YX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAot
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLAotCi0gIDMsICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAg
MywgICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAzLAotICAzLCAgIDMsICAg
MywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAz
LCAgIDMsICAgMywKLSAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgICAz
LCAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsCi0gIDMsICAgMywgICAzLCAgIDMs
ICAgMywgICAzLCAgIDMsICAgMywgICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywg
ICAzLAotCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywK
LVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotCi0vLyBz
dGF0ZVs2XSAweDEwMDAwMCBCeXRlIDIgb2YgNAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywKLQotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
ICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywKLQotICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgIDMsICAgMywg
ICAzLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1Y
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLQotWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLQotLy8gc3RhdGVbN10gMHgwMGQw
MDAgQnl0ZSAyIG9mIDMKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
Ci0KLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi0KLSAgMSwgICAx
LCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgICAxLCAgIDEsICAgMSwgICAxLCAgIDEs
ICAgMSwgICAxLCAgIDEsCi0gIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwg
ICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLAotICA4LCAgIDgsICAgOCwg
ICA4LCAgIDgsICAgOCwgICA4LCAgIDgsICAgIDgsICAgOCwgICA4LCAgIDgsICAgOCwgICA4LCAg
IDgsICAgOCwKLSAgOCwgICA4LCAgIDgsICAgOCwgICA4LCAgIDgsICAgOCwgICA4LCAgICA4LCAg
IDgsICAgOCwgICA4LCAgIDgsICAgOCwgICA4LCAgIDgsCi0KLVhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sCi0KLS8vIHN0YXRlWzhdIDB4MDBkODAwIEJ5dGUgMyBvZiAz
Ci1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotCi1YX18sIFhfXywg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLAotWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhf
XywgWF9fLCBYX18sIFhfXywgWF9fLCAgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9f
LCBYX18sCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9f
LCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotCi1SSl8sIFJKXywgUkpfLCBSSl8sIFJK
XywgUkpfLCBSSl8sIFJKXywgIFJKXywgUkpfLCBSSl8sIFJKXywgUkpfLCBSSl8sIFJKXywgUkpf
LAotUkpfLCBSSl8sIFJKXywgUkpfLCBSSl8sIFJKXywgUkpfLCBSSl8sICBSSl8sIFJKXywgUkpf
LCBSSl8sIFJKXywgUkpfLCBSSl8sIFJKXywKLVJKXywgUkpfLCBSSl8sIFJKXywgUkpfLCBSSl8s
IFJKXywgUkpfLCAgUkpfLCBSSl8sIFJKXywgUkpfLCBSSl8sIFJKXywgUkpfLCBSSl8sCi1SSl8s
IFJKXywgUkpfLCBSSl8sIFJKXywgUkpfLCBSSl8sIFJKXywgIFJKXywgUkpfLCBSSl8sIFJKXywg
UkpfLCBSSl8sIFJKXywgUkpfLAotCi1YX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18s
IFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLAotWF9fLCBYX18s
IFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sICBYX18sIFhfXywgWF9fLCBYX18sIFhfXywg
WF9fLCBYX18sIFhfXywKLVhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCAg
WF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sCi1YX18sIFhfXywgWF9fLCBY
X18sIFhfXywgWF9fLCBYX18sIFhfXywgIFhfXywgWF9fLCBYX18sIFhfXywgWF9fLCBYX18sIFhf
XywgWF9fLAotfTsKLQotLy8gUmVtYXAgYmFzZVswXSA9IChkZWwsIGFkZCwgc3RyaW5nX29mZnNl
dCkKLXN0YXRpYyBjb25zdCBSZW1hcEVudHJ5IHV0ZjhhY2NlcHRub25zdXJyb2dhdGVzX3JlbWFw
X2Jhc2VbXSA9IHsKLXswLCAwLCAwfSB9OwotCi0vLyBSZW1hcCBzdHJpbmdbMF0KLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIHV0ZjhhY2NlcHRub25zdXJyb2dhdGVzX3JlbWFwX3N0cmluZ1td
ID0gewotMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB1dGY4YWNjZXB0bm9uc3Vy
cm9nYXRlc19mYXN0WzI1Nl0gPSB7Ci0wLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwKLTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLAotMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
Ci0wLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQotMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0wLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLTAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0KLTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsICAxLCAx
LCAxLCAxLCAxLCAxLCAxLCAxLAotMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsCi0xLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwKLTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAot
Ci0xLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKLTEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAotMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCi0xLCAxLCAxLCAxLCAxLCAxLCAx
LCAxLCAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKLX07Ci0KLXN0YXRpYyBjb25zdCBVVEY4U2Nh
bk9iaiB1dGY4YWNjZXB0bm9uc3Vycm9nYXRlc19vYmogPSB7Ci0gIHV0ZjhhY2NlcHRub25zdXJy
b2dhdGVzX1NUQVRFMCwKLSAgdXRmOGFjY2VwdG5vbnN1cnJvZ2F0ZXNfU1RBVEUwX1NJWkUsCi0g
IHV0ZjhhY2NlcHRub25zdXJyb2dhdGVzX1RPVEFMX1NJWkUsCi0gIHV0ZjhhY2NlcHRub25zdXJy
b2dhdGVzX01BWF9FWFBBTkRfWDQsCi0gIHV0ZjhhY2NlcHRub25zdXJyb2dhdGVzX1NISUZULAot
ICB1dGY4YWNjZXB0bm9uc3Vycm9nYXRlc19CWVRFUywKLSAgdXRmOGFjY2VwdG5vbnN1cnJvZ2F0
ZXNfTE9TVUIsCi0gIHV0ZjhhY2NlcHRub25zdXJyb2dhdGVzX0hJQURELAotICB1dGY4YWNjZXB0
bm9uc3Vycm9nYXRlcywKLSAgdXRmOGFjY2VwdG5vbnN1cnJvZ2F0ZXNfcmVtYXBfYmFzZSwKLSAg
dXRmOGFjY2VwdG5vbnN1cnJvZ2F0ZXNfcmVtYXBfc3RyaW5nLAotICB1dGY4YWNjZXB0bm9uc3Vy
cm9nYXRlc19mYXN0Ci19OwotCi0KLSN1bmRlZiBYX18KLSN1bmRlZiBSSl8KLSN1bmRlZiBTMV8K
LSN1bmRlZiBTMl8KLSN1bmRlZiBTM18KLSN1bmRlZiBTMjEKLSN1bmRlZiBTMzEKLSN1bmRlZiBT
MzIKLSN1bmRlZiBUMV8KLSN1bmRlZiBUMl8KLSN1bmRlZiBTMTEKLSN1bmRlZiBTUF8KLSN1bmRl
ZiBEX18KLSN1bmRlZiBSSkEKLQotLy8gUmV0dXJuIHRydWUgaWYgY3VycmVudCBUYmwgcG9pbnRl
ciBpcyB3aXRoaW4gc3RhdGUwIHJhbmdlCi0vLyBOb3RlIHRoYXQgdW5zaWduZWQgY29tcGFyZSBj
aGVja3MgYm90aCBlbmRzIG9mIHJhbmdlIHNpbXVsdGFuZW91c2x5Ci1zdGF0aWMgaW5saW5lIGJv
b2wgSW5TdGF0ZVplcm8oY29uc3QgVVRGOFNjYW5PYmoqIHN0LCBjb25zdCB1aW50OCogVGJsKSB7
Ci0gIGNvbnN0IHVpbnQ4KiBUYmwwID0gJnN0LT5zdGF0ZV90YWJsZVtzdC0+c3RhdGUwXTsKLSAg
cmV0dXJuIChzdGF0aWNfY2FzdDx1aW50MzI+KFRibCAtIFRibDApIDwgc3QtPnN0YXRlMF9zaXpl
KTsKLX0KLQotLy8gU2NhbiBhIFVURi04IHN0cmluZyBiYXNlZCBvbiBzdGF0ZSB0YWJsZS4KLS8v
IEFsd2F5cyBzY2FuIGNvbXBsZXRlIFVURi04IGNoYXJhY3RlcnMKLS8vIFNldCBudW1iZXIgb2Yg
Ynl0ZXMgc2Nhbm5lZC4gUmV0dXJuIHJlYXNvbiBmb3IgZXhpdGluZwotaW50IFVURjhHZW5lcmlj
U2Nhbihjb25zdCBVVEY4U2Nhbk9iaiogc3QsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKiBzdHIsCi0gICAgICAgICAgICAgICAgICAgIGludCBzdHJfbGVuZ3RoLAotICAgICAgICAg
ICAgICAgICAgICBpbnQqIGJ5dGVzX2NvbnN1bWVkKSB7Ci0gICpieXRlc19jb25zdW1lZCA9IDA7
Ci0gIGlmIChzdHJfbGVuZ3RoID09IDApIHJldHVybiBrRXhpdE9LOwotCi0gIGludCBlc2hpZnQg
PSBzdC0+ZW50cnlfc2hpZnQ7Ci0gIGNvbnN0IHVpbnQ4KiBpc3JjID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OCo+KHN0cik7Ci0gIGNvbnN0IHVpbnQ4KiBzcmMgPSBpc3JjOwotICBjb25z
dCB1aW50OCogc3JjbGltaXQgPSBpc3JjICsgc3RyX2xlbmd0aDsKLSAgY29uc3QgdWludDgqIHNy
Y2xpbWl0OCA9IHNyY2xpbWl0IC0gNzsKLSAgY29uc3QgdWludDgqIFRibF8wID0gJnN0LT5zdGF0
ZV90YWJsZVtzdC0+c3RhdGUwXTsKLQotIERvQWdhaW46Ci0gIC8vIERvIHN0YXRlLXRhYmxlIHNj
YW4KLSAgaW50IGUgPSAwOwotICB1aW50OCBjOwotICBjb25zdCB1aW50OCogVGJsMiA9ICZzdC0+
ZmFzdF9zdGF0ZVswXTsKLSAgY29uc3QgdWludDMyIGxvc3ViID0gc3QtPmxvc3ViOwotICBjb25z
dCB1aW50MzIgaGlhZGQgPSBzdC0+aGlhZGQ7Ci0gIC8vIENoZWNrIGluaXRpYWwgZmV3IGJ5dGVz
IG9uZSBhdCBhIHRpbWUgdW50aWwgOC1ieXRlIGFsaWduZWQKLSAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gIHdoaWxlICgoKCh1aW50cHRyX3Qpc3JjICYgMHgwNykgIT0gMCkgJiYK
LSAgICAgICAgIChzcmMgPCBzcmNsaW1pdCkgJiYKLSAgICAgICAgIFRibDJbc3JjWzBdXSA9PSAw
KSB7Ci0gICAgc3JjKys7Ci0gIH0KLSAgaWYgKCgodWludHB0cl90KXNyYyAmIDB4MDcpID09IDAp
IHsKLSAgICAvLyBEbyBmYXN0IGZvciBncm91cHMgb2YgOCBpZGVudGl0eSBieXRlcy4KLSAgICAv
LyBUaGlzIGNvdmVycyBhIGxvdCBvZiA3LWJpdCBBU0NJSSB+OHggZmFzdGVyIHRoZW4gdGhlIDEt
Ynl0ZSBsb29wLAotICAgIC8vIGluY2x1ZGluZyBzbG93aW5nIHNsaWdodGx5IG9uIGNyL2xmL2h0
Ci0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgd2hpbGUgKHNyYyA8IHNy
Y2xpbWl0OCkgewotICAgICAgdWludDMyIHMwMTIzID0gKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyICo+KHNyYykpWzBdOwotICAgICAgdWludDMyIHM0NTY3ID0gKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyICo+KHNyYykpWzFdOwotICAgICAgc3JjICs9IDg7Ci0gICAgICAvLyBU
aGlzIGlzIGEgZmFzdCByYW5nZSBjaGVjayBmb3IgYWxsIGJ5dGVzIGluIFtsb3dzdWIuLjB4ODAt
aGlhZGQpCi0gICAgICB1aW50MzIgdGVtcCA9IChzMDEyMyAtIGxvc3ViKSB8IChzMDEyMyArIGhp
YWRkKSB8Ci0gICAgICAgICAgICAgICAgICAgIChzNDU2NyAtIGxvc3ViKSB8IChzNDU2NyArIGhp
YWRkKTsKLSAgICAgIGlmICgodGVtcCAmIDB4ODA4MDgwODApICE9IDApIHsKLSAgICAgICAgLy8g
V2UgdHlwaWNhbGx5IGVuZCB1cCBoZXJlIG9uIGNyL2xmL2h0OyBzcmMgd2FzIGluY3JlbWVudGVk
Ci0gICAgICAgIGludCBlMDEyMyA9IChUYmwyW3NyY1stOF1dIHwgVGJsMltzcmNbLTddXSkgfAot
ICAgICAgICAgICAgICAgICAgICAoVGJsMltzcmNbLTZdXSB8IFRibDJbc3JjWy01XV0pOwotICAg
ICAgICBpZiAoZTAxMjMgIT0gMCkgewotICAgICAgICAgIHNyYyAtPSA4OwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9ICAgIC8vIEV4aXQgb24gTm9uLWludGVyY2hhbmdlCi0gICAgICAgIGUw
MTIzID0gKFRibDJbc3JjWy00XV0gfCBUYmwyW3NyY1stM11dKSB8Ci0gICAgICAgICAgICAgICAg
KFRibDJbc3JjWy0yXV0gfCBUYmwyW3NyY1stMV1dKTsKLSAgICAgICAgaWYgKGUwMTIzICE9IDAp
IHsKLSAgICAgICAgICBzcmMgLT0gNDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAv
LyBFeGl0IG9uIE5vbi1pbnRlcmNoYW5nZQotICAgICAgICAvLyBFbHNlIE9LLCBnbyBhcm91bmQg
YWdhaW4KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgLy8gQnl0ZS1hdC1hLXRpbWUgc2NhbgotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgY29uc3QgdWludDgqIFRibCA9IFRibF8wOwotICB3aGlsZSAoc3JjIDwgc3Jj
bGltaXQpIHsKLSAgICBjID0gKnNyYzsKLSAgICBlID0gVGJsW2NdOwotICAgIHNyYysrOwotICAg
IGlmIChlID49IGtFeGl0SWxsZWdhbFN0cnVjdHVyZSkge2JyZWFrO30KLSAgICBUYmwgPSAmVGJs
XzBbZSA8PCBlc2hpZnRdOwotICB9Ci0gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0KLSAgLy8gRXhpdCBwb3NpYmlsaXRpZXM6Ci0gIC8vICBTb21lIGV4aXQgY29kZSwgIXN0YXRl
MCwgYmFjayB1cCBvdmVyIGxhc3QgY2hhcgotICAvLyAgU29tZSBleGl0IGNvZGUsIHN0YXRlMCwg
YmFjayB1cCBvbmUgYnl0ZSBleGFjdGx5Ci0gIC8vICBzb3VyY2UgY29uc3VtZWQsICFzdGF0ZTAs
IGJhY2sgdXAgb3ZlciBwYXJ0aWFsIGNoYXIKLSAgLy8gIHNvdXJjZSBjb25zdW1lZCwgc3RhdGUw
LCBleGl0IE9LCi0gIC8vIEZvciBpbGxlZ2FsIGJ5dGUgaW4gc3RhdGUwLCBhdm9pZCBiYWNrdXAg
dXAgb3ZlciBQUkVWSU9VUyBjaGFyCi0gIC8vIEZvciB0cnVuY2F0ZWQgbGFzdCBjaGFyLCBiYWNr
IHVwIHRvIGJlZ2lubmluZyBvZiBpdAotCi0gIGlmIChlID49IGtFeGl0SWxsZWdhbFN0cnVjdHVy
ZSkgewotICAgIC8vIEJhY2sgdXAgb3ZlciBleGFjdGx5IG9uZSBieXRlIG9mIHJlamVjdGVkL2ls
bGVnYWwgVVRGLTggY2hhcmFjdGVyCi0gICAgc3JjLS07Ci0gICAgLy8gQmFjayB1cCBtb3JlIGlm
IG5lZWRlZAotICAgIGlmICghSW5TdGF0ZVplcm8oc3QsIFRibCkpIHsKLSAgICAgIGRvIHsKLSAg
ICAgICAgc3JjLS07Ci0gICAgICB9IHdoaWxlICgoc3JjID4gaXNyYykgJiYgKChzcmNbMF0gJiAw
eGMwKSA9PSAweDgwKSk7Ci0gICAgfQotICB9IGVsc2UgaWYgKCFJblN0YXRlWmVybyhzdCwgVGJs
KSkgewotICAgIC8vIEJhY2sgdXAgb3ZlciB0cnVuY2F0ZWQgVVRGLTggY2hhcmFjdGVyCi0gICAg
ZSA9IGtFeGl0SWxsZWdhbFN0cnVjdHVyZTsKLSAgICBkbyB7Ci0gICAgICBzcmMtLTsKLSAgICB9
IHdoaWxlICgoc3JjID4gaXNyYykgJiYgKChzcmNbMF0gJiAweGMwKSA9PSAweDgwKSk7Ci0gIH0g
ZWxzZSB7Ci0gICAgLy8gTm9ybWFsIHRlcm1pbmF0aW9uLCBzb3VyY2UgZnVsbHkgY29uc3VtZWQK
LSAgICBlID0ga0V4aXRPSzsKLSAgfQotCi0gIGlmIChlID09IGtFeGl0RG9BZ2FpbikgewotICAg
IC8vIExvb3AgYmFjayB1cCB0byB0aGUgZmFzdCBzY2FuCi0gICAgZ290byBEb0FnYWluOwotICB9
Ci0KLSAgKmJ5dGVzX2NvbnN1bWVkID0gc3JjIC0gaXNyYzsKLSAgcmV0dXJuIGU7Ci19Ci0KLWlu
dCBVVEY4R2VuZXJpY1NjYW5GYXN0QXNjaWkoY29uc3QgVVRGOFNjYW5PYmoqIHN0LAotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICogc3RyLAotICAgICAgICAgICAgICAgICAgICBpbnQg
c3RyX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgaW50KiBieXRlc19jb25zdW1lZCkgewot
ICAqYnl0ZXNfY29uc3VtZWQgPSAwOwotICBpZiAoc3RyX2xlbmd0aCA9PSAwKSByZXR1cm4ga0V4
aXRPSzsKLQotICBjb25zdCB1aW50OCogaXNyYyA9ICByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4Kj4oc3RyKTsKLSAgY29uc3QgdWludDgqIHNyYyA9IGlzcmM7Ci0gIGNvbnN0IHVpbnQ4KiBz
cmNsaW1pdCA9IGlzcmMgKyBzdHJfbGVuZ3RoOwotICBjb25zdCB1aW50OCogc3JjbGltaXQ4ID0g
c3JjbGltaXQgLSA3OwotICBpbnQgbjsKLSAgaW50IHJlc3RfY29uc3VtZWQ7Ci0gIGludCBleGl0
X3JlYXNvbjsKLSAgZG8gewotICAgIC8vIENoZWNrIGluaXRpYWwgZmV3IGJ5dGVzIG9uZSBhdCBh
IHRpbWUgdW50aWwgOC1ieXRlIGFsaWduZWQKLSAgICB3aGlsZSAoKCgodWludHB0cl90KXNyYyAm
IDB4MDcpICE9IDApICYmCi0gICAgICAgICAgIChzcmMgPCBzcmNsaW1pdCkgJiYgKHNyY1swXSA8
IDB4ODApKSB7Ci0gICAgICBzcmMrKzsKLSAgICB9Ci0gICAgaWYgKCgodWludHB0cl90KXNyYyAm
IDB4MDcpID09IDApIHsKLSAgICAgIHdoaWxlICgoc3JjIDwgc3JjbGltaXQ4KSAmJgotICAgICAg
ICAgICAgICgoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyKj4oc3JjKVswXSB8Ci0gICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzIqPihzcmMpWzFdKSAmIDB4
ODA4MDgwODApID09IDApKSB7Ci0gICAgICAgIHNyYyArPSA4OwotICAgICAgfQotICAgIH0KLSAg
ICB3aGlsZSAoKHNyYyA8IHNyY2xpbWl0KSAmJiAoc3JjWzBdIDwgMHg4MCkpIHsKLSAgICAgIHNy
YysrOwotICAgIH0KLSAgICAvLyBSdW4gc3RhdGUgdGFibGUgb24gdGhlIHJlc3QKLSAgICBuID0g
c3JjIC0gaXNyYzsKLSAgICBleGl0X3JlYXNvbiA9IFVURjhHZW5lcmljU2NhbihzdCwgc3RyICsg
biwgc3RyX2xlbmd0aCAtIG4sICZyZXN0X2NvbnN1bWVkKTsKLSAgICBzcmMgKz0gcmVzdF9jb25z
dW1lZDsKLSAgfSB3aGlsZSAoIGV4aXRfcmVhc29uID09IGtFeGl0RG9BZ2FpbiApOwotCi0gICpi
eXRlc19jb25zdW1lZCA9IHNyYyAtIGlzcmM7Ci0gIHJldHVybiBleGl0X3JlYXNvbjsKLX0KLQot
Ly8gSGFjazogIE9uIHNvbWUgY29tcGlsZXJzIHRoZSBzdGF0aWMgdGFibGVzIGFyZSBpbml0aWFs
aXplZCBhdCBzdGFydHVwLgotLy8gICBXZSBjYW4ndCB1c2UgdGhlbSB1bnRpbCB0aGV5IGFyZSBp
bml0aWFsaXplZC4gIEhvd2V2ZXIsIHNvbWUgUHJvdG9jb2wKLS8vICAgQnVmZmVyIHBhcnNpbmcg
aGFwcGVucyBhdCBzdGF0aWMgaW5pdCB0aW1lIGFuZCBtYXkgdHJ5IHRvIHZhbGlkYXRlCi0vLyAg
IFVURi04IHN0cmluZ3MuICBTaW5jZSBVVEYtOCB2YWxpZGF0aW9uIGlzIG9ubHkgdXNlZCBmb3Ig
ZGVidWdnaW5nCi0vLyAgIGFueXdheSwgd2Ugc2ltcGx5IGFsd2F5cyByZXR1cm4gc3VjY2VzcyBp
ZiBpbml0aWFsaXphdGlvbiBoYXNuJ3QKLS8vICAgb2NjdXJyZWQgeWV0LgotbmFtZXNwYWNlIHsK
LQotYm9vbCBtb2R1bGVfaW5pdGlhbGl6ZWRfID0gZmFsc2U7Ci0KLXN0cnVjdCBJbml0RGV0ZWN0
b3IgewotICBJbml0RGV0ZWN0b3IoKSB7Ci0gICAgbW9kdWxlX2luaXRpYWxpemVkXyA9IHRydWU7
Ci0gIH0KLX07Ci1Jbml0RGV0ZWN0b3IgaW5pdF9kZXRlY3RvcjsKLQotfSAgLy8gbmFtZXNwYWNl
Ci0KLWJvb2wgSXNTdHJ1Y3R1cmFsbHlWYWxpZFVURjgoY29uc3QgY2hhciogYnVmLCBpbnQgbGVu
KSB7Ci0gIGlmICghbW9kdWxlX2luaXRpYWxpemVkXykgcmV0dXJuIHRydWU7Ci0gIAotICBpbnQg
Ynl0ZXNfY29uc3VtZWQgPSAwOwotICBVVEY4R2VuZXJpY1NjYW5GYXN0QXNjaWkoJnV0ZjhhY2Nl
cHRub25zdXJyb2dhdGVzX29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgbGVu
LCAmYnl0ZXNfY29uc3VtZWQpOwotICByZXR1cm4gKGJ5dGVzX2NvbnN1bWVkID09IGxlbik7Ci19
Ci0KLWludCBVVEY4U3BuU3RydWN0dXJhbGx5VmFsaWQoY29uc3QgU3RyaW5nUGllY2UmIHN0cikg
ewotICBpZiAoIW1vZHVsZV9pbml0aWFsaXplZF8pIHJldHVybiBzdHIuc2l6ZSgpOwotCi0gIGlu
dCBieXRlc19jb25zdW1lZCA9IDA7Ci0gIFVURjhHZW5lcmljU2NhbkZhc3RBc2NpaSgmdXRmOGFj
Y2VwdG5vbnN1cnJvZ2F0ZXNfb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLmRh
dGEoKSwgc3RyLnNpemUoKSwgJmJ5dGVzX2NvbnN1bWVkKTsKLSAgcmV0dXJuIGJ5dGVzX2NvbnN1
bWVkOwotfQotCi0vLyBDb2VyY2UgVVRGLTggYnl0ZSBzdHJpbmcgaW4gc3JjX3N0ciB0byBiZQot
Ly8gYSBzdHJ1Y3R1cmFsbHktdmFsaWQgZXF1YWwtbGVuZ3RoIHN0cmluZyBieSBzZWxlY3RpdmVs
eQotLy8gb3ZlcndyaXRpbmcgaWxsZWdhbCBieXRlcyB3aXRoIHJlcGxhY2VfY2hhciAodHlwaWNh
bGx5IGJsYW5rKS4KLS8vIHJlcGxhY2VfY2hhciBtdXN0IGJlIGxlZ2FsIHByaW50YWJsZSA3LWJp
dCBBc2NpaSAweDIwLi4weDdlLgotLy8gc3JjX3N0ciBpcyByZWFkLW9ubHkuIElmIGFueSBvdmVy
d3JpdGluZyBpcyBuZWVkZWQsIGEgbW9kaWZpZWQgYnl0ZSBzdHJpbmcKLS8vIGlzIGNyZWF0ZWQg
aW4gaWRzdCwgbGVuZ3RoIGlzcmNsZW4uCi0vLwotLy8gUmV0dXJucyBwb2ludGVyIHRvIG91dHB1
dCBidWZmZXIsIGlzcmMgaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUsCi0vLyAgb3IgaWRzdCBpZiBz
b21lIGJ5dGVzIHdlcmUgY2hhbmdlZC4KLS8vCi0vLyBGYXN0IGNhc2U6IGFsbCBpcyBzdHJ1Y3R1
cmFsbHkgdmFsaWQgYW5kIG5vIGJ5dGUgY29weWluZyBpcyBkb25lLgotLy8KLWNoYXIqIFVURjhD
b2VyY2VUb1N0cnVjdHVyYWxseVZhbGlkKGNvbnN0IFN0cmluZ1BpZWNlJiBzcmNfc3RyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaWRzdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcmVwbGFjZV9jaGFyKSB7Ci0gIGNv
bnN0IGNoYXIqIGlzcmMgPSBzcmNfc3RyLmRhdGEoKTsKLSAgY29uc3QgaW50IGxlbiA9IHNyY19z
dHIubGVuZ3RoKCk7Ci0gIGludCBuID0gVVRGOFNwblN0cnVjdHVyYWxseVZhbGlkKHNyY19zdHIp
OwotICBpZiAobiA9PSBsZW4pIHsgICAgICAgICAgICAgICAvLyBOb3JtYWwgY2FzZSAtLSBhbGwg
aXMgY29vbCwgcmV0dXJuCi0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y2hhcio+KGlzcmMpOwotICB9
IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvLyBVbnVzdWFsIGNhc2UgLS0gY29weSB3L28g
YmFkIGJ5dGVzCi0gICAgY29uc3QgY2hhciogc3JjID0gaXNyYzsKLSAgICBjb25zdCBjaGFyKiBz
cmNsaW1pdCA9IGlzcmMgKyBsZW47Ci0gICAgY2hhciogZHN0ID0gaWRzdDsKLSAgICBtZW1tb3Zl
KGRzdCwgc3JjLCBuKTsgICAgICAgLy8gQ29weSBpbml0aWFsIGdvb2QgY2h1bmsKLSAgICBzcmMg
Kz0gbjsKLSAgICBkc3QgKz0gbjsKLSAgICB3aGlsZSAoc3JjIDwgc3JjbGltaXQpIHsgICAgLy8g
c3JjIHBvaW50cyB0byBib2d1cyBieXRlIG9yIGlzIG9mZiB0aGUgZW5kCi0gICAgICBkc3RbMF0g
PSByZXBsYWNlX2NoYXI7ICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlIG9uZSBiYWQgYnl0
ZQotICAgICAgc3JjKys7Ci0gICAgICBkc3QrKzsKLSAgICAgIFN0cmluZ1BpZWNlIHN0cjIoc3Jj
LCBzcmNsaW1pdCAtIHNyYyk7Ci0gICAgICBuID0gVVRGOFNwblN0cnVjdHVyYWxseVZhbGlkKHN0
cjIpOyAgICAgICAvLyBzY2FuIHRoZSByZW1haW5kZXIKLSAgICAgIG1lbW1vdmUoZHN0LCBzcmMs
IG4pOyAgICAgICAgICAgICAgICAgICAgIC8vIGNvcHkgbmV4dCBnb29kIGNodW5rCi0gICAgICBz
cmMgKz0gbjsKLSAgICAgIGRzdCArPSBuOwotICAgIH0KLSAgfQotICByZXR1cm4gaWRzdDsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVi
cy9zdHJ1Y3R1cmFsbHlfdmFsaWRfdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvc3RydWN0dXJhbGx5X3ZhbGlkX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5MDg4ODg4NWFkNWY1NGVjZDMxNWUwOWNkMzU3MjkxNTBmOGIxYTJmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9zdHJ1Y3R1cmFsbHlfdmFsaWRfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAt
MSw0MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotLy8gQXV0aG9yOiB4cGVuZ0Bnb29nbGUuY29tIChQZXRlciBQZW5nKQotCi0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSBpbnRlcm5hbCB7Ci1uYW1lc3BhY2UgewotCi1URVNUKFN0cnVjdHVyYWxseVZhbGlkVGVz
dCwgVmFsaWRVVEY4U3RyaW5nKSB7Ci0gIC8vIE9uIEdDQywgdGhpcyBzdHJpbmcgY2FuIGJlIHdy
aXR0ZW4gYXM6Ci0gIC8vICAgImFiY2QgMTIzNCAtIFx1MjAxNFx1MjAxM1x1MjIxMiIKLSAgLy8g
TVNWQyBzZWVtcyB0byBpbnRlcnByZXQgXHUgZGlmZmVyZW50bHkuCi0gIHN0cmluZyB2YWxpZF9z
dHIoImFiY2QgMTIzNCAtIFwzNDJcMjAwXDIyNFwzNDJcMjAwXDIyM1wzNDJcMjEwXDIyMiAtIHh5
ejc4OSIpOwotICBFWFBFQ1RfVFJVRShJc1N0cnVjdHVyYWxseVZhbGlkVVRGOCh2YWxpZF9zdHIu
ZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZF9zdHIu
c2l6ZSgpKSk7Ci0gIC8vIEFkZGl0aW9uYWwgY2hlY2sgZm9yIHBvaW50ZXIgYWxpZ25tZW50Ci0g
IGZvciAoaW50IGkgPSAxOyBpIDwgODsgKytpKSB7Ci0gICAgRVhQRUNUX1RSVUUoSXNTdHJ1Y3R1
cmFsbHlWYWxpZFVURjgodmFsaWRfc3RyLmRhdGEoKSArIGksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRfc3RyLnNpemUoKSAtIGkpKTsKLSAgfQotfQotCi1U
RVNUKFN0cnVjdHVyYWxseVZhbGlkVGVzdCwgSW52YWxpZFVURjhTdHJpbmcpIHsKLSAgY29uc3Qg
c3RyaW5nIGludmFsaWRfc3RyKCJhYmNkXHhBMFx4QjBceEEwXHhCMFx4QTBceEIwIC0geHl6Nzg5
Iik7Ci0gIEVYUEVDVF9GQUxTRShJc1N0cnVjdHVyYWxseVZhbGlkVVRGOChpbnZhbGlkX3N0ci5k
YXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkX3N0
ci5zaXplKCkpKTsKLSAgLy8gQWRkaXRpb25hbCBjaGVjayBmb3IgcG9pbnRlciBhbGlnbm1lbnQK
LSAgZm9yIChpbnQgaSA9IDE7IGkgPCA4OyArK2kpIHsKLSAgICBFWFBFQ1RfRkFMU0UoSXNTdHJ1
Y3R1cmFsbHlWYWxpZFVURjgoaW52YWxpZF9zdHIuZGF0YSgpICsgaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9zdHIuc2l6ZSgpIC0gaSkpOwotICB9
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0
dWJzL3N0cnV0aWwuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYTkyZThmMWZh
NGQ5NWRkNzdmZWI0YTE0YWJlNmFhMTMyNmMxYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuY2MK
KysrIC9kZXYvbnVsbApAQCAtMSwyMjg5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBmcm9tIGdvb2dsZTMvc3RyaW5ncy9zdHJ1dGlsLmNjCi0KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmg+Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1
ZGUgPGZsb2F0Lmg+ICAgIC8vIEZMVF9ESUcgYW5kIERCTF9ESUcKLSNpbmNsdWRlIDxsaW1pdHM+
Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxpdGVy
YXRvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGxfdXRpbC5oPgotCi0j
aWZkZWYgX1dJTjMyCi0vLyBNU1ZDIGhhcyBvbmx5IF9zbnByaW50Ziwgbm90IHNucHJpbnRmLgot
Ly8KLS8vIE1pbkdXIGhhcyBib3RoIHNucHJpbnRmIGFuZCBfc25wcmludGYsIGJ1dCB0aGV5IGFw
cGVhciB0byBiZSBkaWZmZXJlbnQKLS8vIGZ1bmN0aW9ucy4gIFRoZSBmb3JtZXIgaXMgYnVnZ3ku
ICBXaGVuIGludm9rZWQgbGlrZSBzbzoKLS8vICAgY2hhciBidWZmZXJbMzJdOwotLy8gICBzbnBy
aW50ZihidWZmZXIsIDMyLCAiJS4qZ1xuIiwgRkxUX0RJRywgMS4yM2UxMGYpOwotLy8gaXQgcHJp
bnRzICIxLjIzMDAwZSsxMCIuICBUaGlzIGlzIHBsYWlubHkgd3Jvbmc6ICAlZyBzaG91bGQgbmV2
ZXIgcHJpbnQKLS8vIHRyYWlsaW5nIHplcm9zIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiAgRm9y
IHNvbWUgcmVhc29uIHRoaXMgYnVnIG9ubHkKLS8vIG9jY3VycyB3aXRoIHNvbWUgaW5wdXQgdmFs
dWVzLCBub3QgYWxsLiAgSW4gYW55IGNhc2UsIF9zbnByaW50ZiBkb2VzIHRoZQotLy8gcmlnaHQg
dGhpbmcsIHNvIHdlIHVzZSBpdC4KLSNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCi0jZW5kaWYK
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi0vLyBUaGVzZSBh
cmUgZGVmaW5lZCBhcyBtYWNyb3Mgb24gc29tZSBwbGF0Zm9ybXMuICAjdW5kZWYgdGhlbSBzbyB0
aGF0IHdlIGNhbgotLy8gcmVkZWZpbmUgdGhlbS4KLSN1bmRlZiBpc3hkaWdpdAotI3VuZGVmIGlz
cHJpbnQKLQotLy8gVGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIGluIGN0eXBlLmggY2hhbmdlIGJh
c2VkIG9uIGxvY2FsZS4gIFNpbmNlIG91cgotLy8gc3RyaW5nIG1hbmlwdWxhdGlvbiBpcyBhbGwg
aW4gcmVsYXRpb24gdG8gdGhlIHByb3RvY29sIGJ1ZmZlciBhbmQgQysrCi0vLyBsYW5ndWFnZXMs
IHdlIGFsd2F5cyB3YW50IHRvIHVzZSB0aGUgQyBsb2NhbGUuICBTbywgd2UgcmUtZGVmaW5lIHRo
ZXNlCi0vLyBleGFjdGx5IGFzIHdlIHdhbnQgdGhlbS4KLWlubGluZSBib29sIGlzeGRpZ2l0KGNo
YXIgYykgewotICByZXR1cm4gKCcwJyA8PSBjICYmIGMgPD0gJzknKSB8fAotICAgICAgICAgKCdh
JyA8PSBjICYmIGMgPD0gJ2YnKSB8fAotICAgICAgICAgKCdBJyA8PSBjICYmIGMgPD0gJ0YnKTsK
LX0KLQotaW5saW5lIGJvb2wgaXNwcmludChjaGFyIGMpIHsKLSAgcmV0dXJuIGMgPj0gMHgyMCAm
JiBjIDw9IDB4N0U7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFN0cmlwU3RyaW5nCi0vLyAg
ICBSZXBsYWNlcyBhbnkgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVyICdyZW1vdmUnIChvciB0
aGUgY2hhcmFjdGVycwotLy8gICAgaW4gJ3JlbW92ZScpIHdpdGggdGhlIGNoYXJhY3RlciAncmVw
bGFjZXdpdGgnLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBTdHJpcFN0cmluZyhzdHJpbmcqIHMs
IGNvbnN0IGNoYXIqIHJlbW92ZSwgY2hhciByZXBsYWNld2l0aCkgewotICBjb25zdCBjaGFyICog
c3RyX3N0YXJ0ID0gcy0+Y19zdHIoKTsKLSAgY29uc3QgY2hhciAqIHN0ciA9IHN0cl9zdGFydDsK
LSAgZm9yIChzdHIgPSBzdHJwYnJrKHN0ciwgcmVtb3ZlKTsKLSAgICAgICBzdHIgIT0gTlVMTDsK
LSAgICAgICBzdHIgPSBzdHJwYnJrKHN0ciArIDEsIHJlbW92ZSkpIHsKLSAgICAoKnMpW3N0ciAt
IHN0cl9zdGFydF0gPSByZXBsYWNld2l0aDsKLSAgfQotfQotCi12b2lkIFN0cmlwV2hpdGVzcGFj
ZShzdHJpbmcqIHN0cikgewotICBpbnQgc3RyX2xlbmd0aCA9IHN0ci0+bGVuZ3RoKCk7Ci0KLSAg
Ly8gU3RyaXAgb2ZmIGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgaW50IGZpcnN0ID0gMDsKLSAgd2hp
bGUgKGZpcnN0IDwgc3RyX2xlbmd0aCAmJiBhc2NpaV9pc3NwYWNlKHN0ci0+YXQoZmlyc3QpKSkg
ewotICAgICsrZmlyc3Q7Ci0gIH0KLSAgLy8gSWYgZW50aXJlIHN0cmluZyBpcyB3aGl0ZSBzcGFj
ZS4KLSAgaWYgKGZpcnN0ID09IHN0cl9sZW5ndGgpIHsKLSAgICBzdHItPmNsZWFyKCk7Ci0gICAg
cmV0dXJuOwotICB9Ci0gIGlmIChmaXJzdCA+IDApIHsKLSAgICBzdHItPmVyYXNlKDAsIGZpcnN0
KTsKLSAgICBzdHJfbGVuZ3RoIC09IGZpcnN0OwotICB9Ci0KLSAgLy8gU3RyaXAgb2ZmIHRyYWls
aW5nIHdoaXRlc3BhY2UuCi0gIGludCBsYXN0ID0gc3RyX2xlbmd0aCAtIDE7Ci0gIHdoaWxlIChs
YXN0ID49IDAgJiYgYXNjaWlfaXNzcGFjZShzdHItPmF0KGxhc3QpKSkgewotICAgIC0tbGFzdDsK
LSAgfQotICBpZiAobGFzdCAhPSAoc3RyX2xlbmd0aCAtIDEpICYmIGxhc3QgPj0gMCkgewotICAg
IHN0ci0+ZXJhc2UobGFzdCArIDEsIHN0cmluZzo6bnBvcyk7Ci0gIH0KLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gU3RyaW5nUmVwbGFjZSgpCi0vLyAgICBSZXBsYWNlIHRoZSAib2xkIiBwYXR0
ZXJuIHdpdGggdGhlICJuZXciIHBhdHRlcm4gaW4gYSBzdHJpbmcsCi0vLyAgICBhbmQgYXBwZW5k
IHRoZSByZXN1bHQgdG8gInJlcyIuICBJZiByZXBsYWNlX2FsbCBpcyBmYWxzZSwKLS8vICAgIGl0
IG9ubHkgcmVwbGFjZXMgdGhlIGZpcnN0IGluc3RhbmNlIG9mICJvbGQuIgotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi12b2lkIFN0cmluZ1JlcGxhY2UoY29uc3Qgc3RyaW5nJiBzLCBjb25zdCBzdHJpbmcm
IG9sZHN1YiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIG5ld3N1YiwgYm9vbCBy
ZXBsYWNlX2FsbCwKLSAgICAgICAgICAgICAgICAgICBzdHJpbmcqIHJlcykgewotICBpZiAob2xk
c3ViLmVtcHR5KCkpIHsKLSAgICByZXMtPmFwcGVuZChzKTsgIC8vIGlmIGVtcHR5LCBhcHBlbmQg
dGhlIGdpdmVuIHN0cmluZy4KLSAgICByZXR1cm47Ci0gIH0KLQotICBzdHJpbmc6OnNpemVfdHlw
ZSBzdGFydF9wb3MgPSAwOwotICBzdHJpbmc6OnNpemVfdHlwZSBwb3M7Ci0gIGRvIHsKLSAgICBw
b3MgPSBzLmZpbmQob2xkc3ViLCBzdGFydF9wb3MpOwotICAgIGlmIChwb3MgPT0gc3RyaW5nOjpu
cG9zKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgcmVzLT5hcHBlbmQocywgc3RhcnRfcG9z
LCBwb3MgLSBzdGFydF9wb3MpOwotICAgIHJlcy0+YXBwZW5kKG5ld3N1Yik7Ci0gICAgc3RhcnRf
cG9zID0gcG9zICsgb2xkc3ViLnNpemUoKTsgIC8vIHN0YXJ0IHNlYXJjaGluZyBhZ2FpbiBhZnRl
ciB0aGUgIm9sZCIKLSAgfSB3aGlsZSAocmVwbGFjZV9hbGwpOwotICByZXMtPmFwcGVuZChzLCBz
dGFydF9wb3MsIHMubGVuZ3RoKCkgLSBzdGFydF9wb3MpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0vLyBTdHJpbmdSZXBsYWNlKCkKLS8vICAgIEdpdmUgbWUgYSBzdHJpbmcgYW5kIHR3byBwYXR0
ZXJucyAib2xkIiBhbmQgIm5ldyIsIGFuZCBJIHJlcGxhY2UKLS8vICAgIHRoZSBmaXJzdCBpbnN0
YW5jZSBvZiAib2xkIiBpbiB0aGUgc3RyaW5nIHdpdGggIm5ldyIsIGlmIGl0Ci0vLyAgICBleGlz
dHMuICBJZiAiZ2xvYmFsIiBpcyB0cnVlOyBjYWxsIHRoaXMgcmVwZWF0ZWRseSB1bnRpbCBpdAot
Ly8gICAgZmFpbHMuICBSRVRVUk4gYSBuZXcgc3RyaW5nLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIg
dGhlIHJlcGxhY2VtZW50Ci0vLyAgICBoYXBwZW5lZCBvciBub3QuCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLXN0cmluZyBTdHJpbmdSZXBsYWNlKGNvbnN0IHN0cmluZyYgcywgY29uc3Qgc3RyaW5nJiBv
bGRzdWIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIG5ld3N1YiwgYm9vbCBy
ZXBsYWNlX2FsbCkgewotICBzdHJpbmcgcmV0OwotICBTdHJpbmdSZXBsYWNlKHMsIG9sZHN1Yiwg
bmV3c3ViLCByZXBsYWNlX2FsbCwgJnJldCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIFNwbGl0U3RyaW5nVXNpbmcoKQotLy8gICAgU3BsaXQgYSBzdHJpbmcgdXNp
bmcgYSBjaGFyYWN0ZXIgZGVsaW1pdGVyLiBBcHBlbmQgdGhlIGNvbXBvbmVudHMKLS8vICAgIHRv
ICdyZXN1bHQnLgotLy8KLS8vIE5vdGU6IEZvciBtdWx0aS1jaGFyYWN0ZXIgZGVsaW1pdGVycywg
dGhpcyByb3V0aW5lIHdpbGwgc3BsaXQgb24gKkFOWSogb2YKLS8vIHRoZSBjaGFyYWN0ZXJzIGlu
IHRoZSBzdHJpbmcsIG5vdCB0aGUgZW50aXJlIHN0cmluZyBhcyBhIHNpbmdsZSBkZWxpbWl0ZXIu
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSVRSPgotc3RhdGljIGlubGlu
ZQotdm9pZCBTcGxpdFN0cmluZ1RvSXRlcmF0b3JVc2luZyhjb25zdCBzdHJpbmcmIGZ1bGwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlbGltLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJVFImIHJlc3VsdCkgewotICAvLyBPcHRpbWl6ZSB0
aGUgY29tbW9uIGNhc2Ugd2hlcmUgZGVsaW0gaXMgYSBzaW5nbGUgY2hhcmFjdGVyLgotICBpZiAo
ZGVsaW1bMF0gIT0gJ1wwJyAmJiBkZWxpbVsxXSA9PSAnXDAnKSB7Ci0gICAgY2hhciBjID0gZGVs
aW1bMF07Ci0gICAgY29uc3QgY2hhciogcCA9IGZ1bGwuZGF0YSgpOwotICAgIGNvbnN0IGNoYXIq
IGVuZCA9IHAgKyBmdWxsLnNpemUoKTsKLSAgICB3aGlsZSAocCAhPSBlbmQpIHsKLSAgICAgIGlm
ICgqcCA9PSBjKSB7Ci0gICAgICAgICsrcDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0
IGNoYXIqIHN0YXJ0ID0gcDsKLSAgICAgICAgd2hpbGUgKCsrcCAhPSBlbmQgJiYgKnAgIT0gYyk7
Ci0gICAgICAgICpyZXN1bHQrKyA9IHN0cmluZyhzdGFydCwgcCAtIHN0YXJ0KTsKLSAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc3RyaW5nOjpzaXplX3R5cGUgYmVnaW5faW5k
ZXgsIGVuZF9pbmRleDsKLSAgYmVnaW5faW5kZXggPSBmdWxsLmZpbmRfZmlyc3Rfbm90X29mKGRl
bGltKTsKLSAgd2hpbGUgKGJlZ2luX2luZGV4ICE9IHN0cmluZzo6bnBvcykgewotICAgIGVuZF9p
bmRleCA9IGZ1bGwuZmluZF9maXJzdF9vZihkZWxpbSwgYmVnaW5faW5kZXgpOwotICAgIGlmIChl
bmRfaW5kZXggPT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAqcmVzdWx0KysgPSBmdWxsLnN1YnN0
cihiZWdpbl9pbmRleCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgICpyZXN1bHQrKyA9IGZ1
bGwuc3Vic3RyKGJlZ2luX2luZGV4LCAoZW5kX2luZGV4IC0gYmVnaW5faW5kZXgpKTsKLSAgICBi
ZWdpbl9pbmRleCA9IGZ1bGwuZmluZF9maXJzdF9ub3Rfb2YoZGVsaW0sIGVuZF9pbmRleCk7Ci0g
IH0KLX0KLQotdm9pZCBTcGxpdFN0cmluZ1VzaW5nKGNvbnN0IHN0cmluZyYgZnVsbCwKLSAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZWxpbSwKLSAgICAgICAgICAgICAgICAgICAg
ICB2ZWN0b3I8c3RyaW5nPiogcmVzdWx0KSB7Ci0gIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPCB2ZWN0
b3I8c3RyaW5nPiA+IGl0KCpyZXN1bHQpOwotICBTcGxpdFN0cmluZ1RvSXRlcmF0b3JVc2luZyhm
dWxsLCBkZWxpbSwgaXQpOwotfQotCi0vLyBTcGxpdCBhIHN0cmluZyB1c2luZyBhIGNoYXJhY3Rl
ciBkZWxpbWl0ZXIuIEFwcGVuZCB0aGUgY29tcG9uZW50cwotLy8gdG8gJ3Jlc3VsdCcuICBJZiB0
aGVyZSBhcmUgY29uc2VjdXRpdmUgZGVsaW1pdGVycywgdGhpcyBmdW5jdGlvbgotLy8gd2lsbCBy
ZXR1cm4gY29ycmVzcG9uZGluZyBlbXB0eSBzdHJpbmdzLiBUaGUgc3RyaW5nIGlzIHNwbGl0IGlu
dG8KLS8vIGF0IG1vc3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcGllY2VzIGdyZWVkaWx5LiBU
aGlzIG1lYW5zIHRoYXQgdGhlCi0vLyBsYXN0IHBpZWNlIG1heSBwb3NzaWJseSBiZSBzcGxpdCBm
dXJ0aGVyLiBUbyBzcGxpdCBpbnRvIGFzIG1hbnkgcGllY2VzCi0vLyBhcyBwb3NzaWJsZSwgc3Bl
Y2lmeSAwIGFzIHRoZSBudW1iZXIgb2YgcGllY2VzLgotLy8KLS8vIElmICJmdWxsIiBpcyB0aGUg
ZW1wdHkgc3RyaW5nLCB5aWVsZHMgYW4gZW1wdHkgc3RyaW5nIGFzIHRoZSBvbmx5IHZhbHVlLgot
Ly8KLS8vIElmICJwaWVjZXMiIGlzIG5lZ2F0aXZlIGZvciBzb21lIHJlYXNvbiwgaXQgcmV0dXJu
cyB0aGUgd2hvbGUgc3RyaW5nCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
U3RyaW5nVHlwZSwgdHlwZW5hbWUgSVRSPgotc3RhdGljIGlubGluZQotdm9pZCBTcGxpdFN0cmlu
Z1RvSXRlcmF0b3JBbGxvd0VtcHR5KGNvbnN0IFN0cmluZ1R5cGUmIGZ1bGwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZGVsaW0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpZWNlcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJVFImIHJlc3VsdCkgewotICBzdHJpbmc6OnNpemVfdHlwZSBi
ZWdpbl9pbmRleCwgZW5kX2luZGV4OwotICBiZWdpbl9pbmRleCA9IDA7Ci0KLSAgZm9yIChpbnQg
aSA9IDA7IChpIDwgcGllY2VzLTEpIHx8IChwaWVjZXMgPT0gMCk7IGkrKykgewotICAgIGVuZF9p
bmRleCA9IGZ1bGwuZmluZF9maXJzdF9vZihkZWxpbSwgYmVnaW5faW5kZXgpOwotICAgIGlmIChl
bmRfaW5kZXggPT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAqcmVzdWx0KysgPSBmdWxsLnN1YnN0
cihiZWdpbl9pbmRleCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgICpyZXN1bHQrKyA9IGZ1
bGwuc3Vic3RyKGJlZ2luX2luZGV4LCAoZW5kX2luZGV4IC0gYmVnaW5faW5kZXgpKTsKLSAgICBi
ZWdpbl9pbmRleCA9IGVuZF9pbmRleCArIDE7Ci0gIH0KLSAgKnJlc3VsdCsrID0gZnVsbC5zdWJz
dHIoYmVnaW5faW5kZXgpOwotfQotCi12b2lkIFNwbGl0U3RyaW5nQWxsb3dFbXB0eShjb25zdCBz
dHJpbmcmIGZ1bGwsIGNvbnN0IGNoYXIqIGRlbGltLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmVjdG9yPHN0cmluZz4qIHJlc3VsdCkgewotICBiYWNrX2luc2VydF9pdGVyYXRvcjx2ZWN0
b3I8c3RyaW5nPiA+IGl0KCpyZXN1bHQpOwotICBTcGxpdFN0cmluZ1RvSXRlcmF0b3JBbGxvd0Vt
cHR5KGZ1bGwsIGRlbGltLCAwLCBpdCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEpvaW5T
dHJpbmdzKCkKLS8vICAgIFRoaXMgbWVyZ2VzIGEgdmVjdG9yIG9mIHN0cmluZyBjb21wb25lbnRz
IHdpdGggZGVsaW0gaW5zZXJ0ZWQKLS8vICAgIGFzIHNlcGFyYXRlcnMgYmV0d2VlbiBjb21wb25l
bnRzLgotLy8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRlbXBsYXRlIDxjbGFzcyBJVEVSQVRPUj4KLXN0
YXRpYyB2b2lkIEpvaW5TdHJpbmdzSXRlcmF0b3IoY29uc3QgSVRFUkFUT1ImIHN0YXJ0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJVEVSQVRPUiYgZW5kLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZWxpbSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiByZXN1bHQpIHsKLSAgR09PR0xFX0NIRUNLKHJl
c3VsdCAhPSBOVUxMKTsKLSAgcmVzdWx0LT5jbGVhcigpOwotICBpbnQgZGVsaW1fbGVuZ3RoID0g
c3RybGVuKGRlbGltKTsKLQotICAvLyBQcmVjb21wdXRlIHJlc3VsdGluZyBsZW5ndGggc28gd2Ug
Y2FuIHJlc2VydmUoKSBtZW1vcnkgaW4gb25lIHNob3QuCi0gIGludCBsZW5ndGggPSAwOwotICBm
b3IgKElURVJBVE9SIGl0ZXIgPSBzdGFydDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgIGlm
IChpdGVyICE9IHN0YXJ0KSB7Ci0gICAgICBsZW5ndGggKz0gZGVsaW1fbGVuZ3RoOwotICAgIH0K
LSAgICBsZW5ndGggKz0gaXRlci0+c2l6ZSgpOwotICB9Ci0gIHJlc3VsdC0+cmVzZXJ2ZShsZW5n
dGgpOwotCi0gIC8vIE5vdyBjb21iaW5lIGV2ZXJ5dGhpbmcuCi0gIGZvciAoSVRFUkFUT1IgaXRl
ciA9IHN0YXJ0OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgaWYgKGl0ZXIgIT0gc3RhcnQp
IHsKLSAgICAgIHJlc3VsdC0+YXBwZW5kKGRlbGltLCBkZWxpbV9sZW5ndGgpOwotICAgIH0KLSAg
ICByZXN1bHQtPmFwcGVuZChpdGVyLT5kYXRhKCksIGl0ZXItPnNpemUoKSk7Ci0gIH0KLX0KLQot
dm9pZCBKb2luU3RyaW5ncyhjb25zdCB2ZWN0b3I8c3RyaW5nPiYgY29tcG9uZW50cywKLSAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZGVsaW0sCi0gICAgICAgICAgICAgICAgIHN0cmluZyAq
IHJlc3VsdCkgewotICBKb2luU3RyaW5nc0l0ZXJhdG9yKGNvbXBvbmVudHMuYmVnaW4oKSwgY29t
cG9uZW50cy5lbmQoKSwgZGVsaW0sIHJlc3VsdCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFVuZXNjYXBlQ0VzY2FwZVNlcXVlbmNlcygpCi0vLyAgICBUaGlzIGRvZXMgYWxsIHRoZSB1bmVz
Y2FwaW5nIHRoYXQgQyBkb2VzOiBcb29vLCBcciwgXG4sIGV0YwotLy8gICAgUmV0dXJucyBsZW5n
dGggb2YgcmVzdWx0aW5nIHN0cmluZy4KLS8vICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBceCBw
YXJzZXMgYW55IHBvc2l0aXZlIG51bWJlciBvZiBoZXggZGlnaXRzLAotLy8gICAgYnV0IGl0IGlz
IGFuIGVycm9yIGlmIHRoZSB2YWx1ZSByZXF1aXJlcyBtb3JlIHRoYW4gOCBiaXRzLCBhbmQgdGhl
Ci0vLyAgICByZXN1bHQgaXMgdHJ1bmNhdGVkIHRvIDggYml0cy4KLS8vCi0vLyAgICBUaGUgc2Vj
b25kIGNhbGwgc3RvcmVzIGl0cyBlcnJvcnMgaW4gYSBzdXBwbGllZCBzdHJpbmcgdmVjdG9yLgot
Ly8gICAgSWYgdGhlIHN0cmluZyB2ZWN0b3IgcG9pbnRlciBpcyBOVUxMLCBpdCByZXBvcnRzIHRo
ZSBlcnJvcnMgd2l0aCBMT0coKS4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBJU19PQ1RB
TF9ESUdJVChjKSAoKChjKSA+PSAnMCcpICYmICgoYykgPD0gJzcnKSkKLQotLy8gUHJvdG9jb2wg
YnVmZmVycyBkb2Vzbid0IGV2ZXIgY2FyZSBhYm91dCBlcnJvcnMsIGJ1dCBJIGRvbid0IHdhbnQg
dG8gcmVtb3ZlCi0vLyB0aGUgY29kZS4KLSNkZWZpbmUgTE9HX1NUUklORyhMRVZFTCwgVkVDVE9S
KSBHT09HTEVfTE9HX0lGKExFVkVMLCBmYWxzZSkKLQotaW50IFVuZXNjYXBlQ0VzY2FwZVNlcXVl
bmNlcyhjb25zdCBjaGFyKiBzb3VyY2UsIGNoYXIqIGRlc3QpIHsKLSAgcmV0dXJuIFVuZXNjYXBl
Q0VzY2FwZVNlcXVlbmNlcyhzb3VyY2UsIGRlc3QsIE5VTEwpOwotfQotCi1pbnQgVW5lc2NhcGVD
RXNjYXBlU2VxdWVuY2VzKGNvbnN0IGNoYXIqIHNvdXJjZSwgY2hhciogZGVzdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4gKmVycm9ycykgewotICBHT09HTEVf
RENIRUNLKGVycm9ycyA9PSBOVUxMKSA8PCAiRXJyb3IgcmVwb3J0aW5nIG5vdCBpbXBsZW1lbnRl
ZC4iOwotCi0gIGNoYXIqIGQgPSBkZXN0OwotICBjb25zdCBjaGFyKiBwID0gc291cmNlOwotCi0g
IC8vIFNtYWxsIG9wdGltaXphdGlvbiBmb3IgY2FzZSB3aGVyZSBzb3VyY2UgPSBkZXN0IGFuZCB0
aGVyZSdzIG5vIGVzY2FwaW5nCi0gIHdoaWxlICggcCA9PSBkICYmICpwICE9ICdcMCcgJiYgKnAg
IT0gJ1xcJyApCi0gICAgcCsrLCBkKys7Ci0KLSAgd2hpbGUgKCpwICE9ICdcMCcpIHsKLSAgICBp
ZiAoKnAgIT0gJ1xcJykgewotICAgICAgKmQrKyA9ICpwKys7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHN3aXRjaCAoICorK3AgKSB7ICAgICAgICAgICAgICAgICAgICAvLyBza2lwIHBhc3QgdGhlICdc
XCcKLSAgICAgICAgY2FzZSAnXDAnOgotICAgICAgICAgIExPR19TVFJJTkcoRVJST1IsIGVycm9y
cykgPDwgIlN0cmluZyBjYW5ub3QgZW5kIHdpdGggXFwiOwotICAgICAgICAgICpkID0gJ1wwJzsK
LSAgICAgICAgICByZXR1cm4gZCAtIGRlc3Q7ICAgLy8gd2UncmUgZG9uZSB3aXRoIHAKLSAgICAg
ICAgY2FzZSAnYSc6ICAqZCsrID0gJ1xhJzsgIGJyZWFrOwotICAgICAgICBjYXNlICdiJzogICpk
KysgPSAnXGInOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2YnOiAgKmQrKyA9ICdcZic7ICBicmVh
azsKLSAgICAgICAgY2FzZSAnbic6ICAqZCsrID0gJ1xuJzsgIGJyZWFrOwotICAgICAgICBjYXNl
ICdyJzogICpkKysgPSAnXHInOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3QnOiAgKmQrKyA9ICdc
dCc7ICBicmVhazsKLSAgICAgICAgY2FzZSAndic6ICAqZCsrID0gJ1x2JzsgIGJyZWFrOwotICAg
ICAgICBjYXNlICdcXCc6ICpkKysgPSAnXFwnOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJz8nOiAg
KmQrKyA9ICdcPyc7ICBicmVhazsgICAgLy8gXD8gIFdobyBrbmV3PwotICAgICAgICBjYXNlICdc
Jyc6ICpkKysgPSAnXCcnOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJyInOiAgKmQrKyA9ICdcIic7
ICBicmVhazsKLSAgICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6
ICAvLyBvY3RhbCBkaWdpdDogMSB0byAzIGRpZ2l0cwotICAgICAgICBjYXNlICc0JzogY2FzZSAn
NSc6IGNhc2UgJzYnOiBjYXNlICc3JzogewotICAgICAgICAgIGNoYXIgY2ggPSAqcCAtICcwJzsK
LSAgICAgICAgICBpZiAoIElTX09DVEFMX0RJR0lUKHBbMV0pICkKLSAgICAgICAgICAgIGNoID0g
Y2ggKiA4ICsgKisrcCAtICcwJzsKLSAgICAgICAgICBpZiAoIElTX09DVEFMX0RJR0lUKHBbMV0p
ICkgICAgICAvLyBzYWZlIChhbmQgZWFzeSkgdG8gZG8gdGhpcyB0d2ljZQotICAgICAgICAgICAg
Y2ggPSBjaCAqIDggKyAqKytwIC0gJzAnOyAgICAgIC8vIG5vdyBwb2ludHMgYXQgbGFzdCBkaWdp
dAotICAgICAgICAgICpkKysgPSBjaDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlICd4JzogY2FzZSAnWCc6IHsKLSAgICAgICAgICBpZiAoIWlzeGRpZ2l0KHBbMV0p
KSB7Ci0gICAgICAgICAgICBpZiAocFsxXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgICAgIExPR19T
VFJJTkcoRVJST1IsIGVycm9ycykgPDwgIlN0cmluZyBjYW5ub3QgZW5kIHdpdGggXFx4IjsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIExPR19TVFJJTkcoRVJST1IsIGVycm9y
cykgPDwKLSAgICAgICAgICAgICAgICAiXFx4IGNhbm5vdCBiZSBmb2xsb3dlZCBieSBub24taGV4
IGRpZ2l0OiBcXCIgPDwgKnAgPDwgcFsxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICB1bnNpZ25lZCBpbnQgY2ggPSAwOwotICAgICAg
ICAgIGNvbnN0IGNoYXIgKmhleF9zdGFydCA9IHA7Ci0gICAgICAgICAgd2hpbGUgKGlzeGRpZ2l0
KHBbMV0pKSAgLy8gYXJiaXRyYXJpbHkgbWFueSBoZXggZGlnaXRzCi0gICAgICAgICAgICBjaCA9
IChjaCA8PCA0KSArIGhleF9kaWdpdF90b19pbnQoKisrcCk7Ci0gICAgICAgICAgaWYgKGNoID4g
MHhGRikKLSAgICAgICAgICAgIExPR19TVFJJTkcoRVJST1IsIGVycm9ycykgPDwgIlZhbHVlIG9m
ICIgPDwKLSAgICAgICAgICAgICAgIlxcIiA8PCBzdHJpbmcoaGV4X3N0YXJ0LCBwKzEtaGV4X3N0
YXJ0KSA8PCAiIGV4Y2VlZHMgOCBiaXRzIjsKLSAgICAgICAgICAqZCsrID0gY2g7Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSNpZiAwICAvLyBUT0RPKGtlbnRvbik6ICBTdXBwb3J0IFx1
IGFuZCBcVT8gIFJlcXVpcmVzIHJ1bmV0b2NoYXIoKS4KLSAgICAgICAgY2FzZSAndSc6IHsKLSAg
ICAgICAgICAvLyBcdWhoaGggPT4gY29udmVydCA0IGhleCBkaWdpdHMgdG8gVVRGLTgKLSAgICAg
ICAgICBjaGFyMzIgcnVuZSA9IDA7Ci0gICAgICAgICAgY29uc3QgY2hhciAqaGV4X3N0YXJ0ID0g
cDsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICAgICAg
aWYgKGlzeGRpZ2l0KHBbMV0pKSB7ICAvLyBMb29rIG9uZSBjaGFyIGFoZWFkLgotICAgICAgICAg
ICAgICBydW5lID0gKHJ1bmUgPDwgNCkgKyBoZXhfZGlnaXRfdG9faW50KCorK3ApOyAgLy8gQWR2
YW5jZSBwLgotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgTE9HX1NUUklORyhF
UlJPUiwgZXJyb3JzKQotICAgICAgICAgICAgICAgIDw8ICJcXHUgbXVzdCBiZSBmb2xsb3dlZCBi
eSA0IGhleCBkaWdpdHM6IFxcIgotICAgICAgICAgICAgICAgIDw8ICBzdHJpbmcoaGV4X3N0YXJ0
LCBwKzEtaGV4X3N0YXJ0KTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGQgKz0gcnVuZXRvY2hhcihkLCAmcnVuZSk7Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSAnVSc6IHsKLSAgICAgICAgICAvLyBc
VWhoaGhoaGhoID0+IGNvbnZlcnQgOCBoZXggZGlnaXRzIHRvIFVURi04Ci0gICAgICAgICAgY2hh
cjMyIHJ1bmUgPSAwOwotICAgICAgICAgIGNvbnN0IGNoYXIgKmhleF9zdGFydCA9IHA7Ci0gICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpc3hk
aWdpdChwWzFdKSkgeyAgLy8gTG9vayBvbmUgY2hhciBhaGVhZC4KLSAgICAgICAgICAgICAgLy8g
RG9uJ3QgY2hhbmdlIHJ1bmUgdW50aWwgd2UncmUgc3VyZSB0aGlzCi0gICAgICAgICAgICAgIC8v
IGlzIHdpdGhpbiB0aGUgVW5pY29kZSBsaW1pdCwgYnV0IGRvIGFkdmFuY2UgcC4KLSAgICAgICAg
ICAgICAgY2hhcjMyIG5ld3J1bmUgPSAocnVuZSA8PCA0KSArIGhleF9kaWdpdF90b19pbnQoKisr
cCk7Ci0gICAgICAgICAgICAgIGlmIChuZXdydW5lID4gMHgxMEZGRkYpIHsKLSAgICAgICAgICAg
ICAgICBMT0dfU1RSSU5HKEVSUk9SLCBlcnJvcnMpCi0gICAgICAgICAgICAgICAgICA8PCAiVmFs
dWUgb2YgXFwiCi0gICAgICAgICAgICAgICAgICA8PCBzdHJpbmcoaGV4X3N0YXJ0LCBwICsgMSAt
IGhleF9zdGFydCkKLSAgICAgICAgICAgICAgICAgIDw8ICIgZXhjZWVkcyBVbmljb2RlIGxpbWl0
ICgweDEwRkZGRikiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHJ1bmUgPSBuZXdydW5lOwotICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBMT0dfU1RSSU5HKEVSUk9SLCBlcnJv
cnMpCi0gICAgICAgICAgICAgICAgPDwgIlxcVSBtdXN0IGJlIGZvbGxvd2VkIGJ5IDggaGV4IGRp
Z2l0czogXFwiCi0gICAgICAgICAgICAgICAgPDwgIHN0cmluZyhoZXhfc3RhcnQsIHArMS1oZXhf
c3RhcnQpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9
Ci0gICAgICAgICAgZCArPSBydW5ldG9jaGFyKGQsICZydW5lKTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgTE9HX1NUUklO
RyhFUlJPUiwgZXJyb3JzKSA8PCAiVW5rbm93biBlc2NhcGUgc2VxdWVuY2U6IFxcIiA8PCAqcDsK
LSAgICAgIH0KLSAgICAgIHArKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBy
ZWFkIHBhc3QgbGV0dGVyIHdlIGVzY2FwZWQKLSAgICB9Ci0gIH0KLSAgKmQgPSAnXDAnOwotICBy
ZXR1cm4gZCAtIGRlc3Q7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFVuZXNjYXBlQ0VzY2Fw
ZVN0cmluZygpCi0vLyAgICBUaGlzIGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgVW5lc2NhcGVDRXNj
YXBlU2VxdWVuY2VzLCBidXQgY3JlYXRlcwotLy8gICAgYSBuZXcgc3RyaW5nLiBUaGUgY2FsbGVy
IGRvZXMgbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgYWxsb2NhdGluZwotLy8gICAgYSBkZXN0IGJ1
ZmZlci4gVGhpcyBzaG91bGQgYmUgdXNlZCBmb3Igbm9uIHBlcmZvcm1hbmNlIGNyaXRpY2FsCi0v
LyAgICB0YXNrcyBzdWNoIGFzIHByaW50aW5nIGRlYnVnIG1lc3NhZ2VzLiBJdCBpcyBzYWZlIGZv
ciBzcmMgYW5kIGRlc3QKLS8vICAgIHRvIGJlIHRoZSBzYW1lLgotLy8KLS8vICAgIFRoZSBzZWNv
bmQgY2FsbCBzdG9yZXMgaXRzIGVycm9ycyBpbiBhIHN1cHBsaWVkIHN0cmluZyB2ZWN0b3IuCi0v
LyAgICBJZiB0aGUgc3RyaW5nIHZlY3RvciBwb2ludGVyIGlzIE5VTEwsIGl0IHJlcG9ydHMgdGhl
IGVycm9ycyB3aXRoIExPRygpLgotLy8KLS8vICAgIEluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNh
bGxzLCB0aGUgbGVuZ3RoIG9mIGRlc3QgaXMgcmV0dXJuZWQuIEluIHRoZQotLy8gICAgdGhlIHRo
aXJkIGNhbGwsIHRoZSBuZXcgc3RyaW5nIGlzIHJldHVybmVkLgotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
aW50IFVuZXNjYXBlQ0VzY2FwZVN0cmluZyhjb25zdCBzdHJpbmcmIHNyYywgc3RyaW5nKiBkZXN0
KSB7Ci0gIHJldHVybiBVbmVzY2FwZUNFc2NhcGVTdHJpbmcoc3JjLCBkZXN0LCBOVUxMKTsKLX0K
LQotaW50IFVuZXNjYXBlQ0VzY2FwZVN0cmluZyhjb25zdCBzdHJpbmcmIHNyYywgc3RyaW5nKiBk
ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8c3RyaW5nPiAqZXJyb3JzKSB7
Ci0gIHNjb3BlZF9hcnJheTxjaGFyPiB1bmVzY2FwZWQobmV3IGNoYXJbc3JjLnNpemUoKSArIDFd
KTsKLSAgaW50IGxlbiA9IFVuZXNjYXBlQ0VzY2FwZVNlcXVlbmNlcyhzcmMuY19zdHIoKSwgdW5l
c2NhcGVkLmdldCgpLCBlcnJvcnMpOwotICBHT09HTEVfQ0hFQ0soZGVzdCk7Ci0gIGRlc3QtPmFz
c2lnbih1bmVzY2FwZWQuZ2V0KCksIGxlbik7Ci0gIHJldHVybiBsZW47Ci19Ci0KLXN0cmluZyBV
bmVzY2FwZUNFc2NhcGVTdHJpbmcoY29uc3Qgc3RyaW5nJiBzcmMpIHsKLSAgc2NvcGVkX2FycmF5
PGNoYXI+IHVuZXNjYXBlZChuZXcgY2hhcltzcmMuc2l6ZSgpICsgMV0pOwotICBpbnQgbGVuID0g
VW5lc2NhcGVDRXNjYXBlU2VxdWVuY2VzKHNyYy5jX3N0cigpLCB1bmVzY2FwZWQuZ2V0KCksIE5V
TEwpOwotICByZXR1cm4gc3RyaW5nKHVuZXNjYXBlZC5nZXQoKSwgbGVuKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gQ0VzY2FwZVN0cmluZygpCi0vLyBDSGV4RXNjYXBlU3RyaW5nKCkKLS8v
ICAgIENvcGllcyAnc3JjJyB0byAnZGVzdCcsIGVzY2FwaW5nIGRhbmdlcm91cyBjaGFyYWN0ZXJz
IHVzaW5nCi0vLyAgICBDLXN0eWxlIGVzY2FwZSBzZXF1ZW5jZXMuIFRoaXMgaXMgdmVyeSB1c2Vm
dWwgZm9yIHByZXBhcmluZyBxdWVyeQotLy8gICAgZmxhZ3MuICdzcmMnIGFuZCAnZGVzdCcgc2hv
dWxkIG5vdCBvdmVybGFwLiBUaGUgJ0hleCcgdmVyc2lvbiB1c2VzCi0vLyAgICBoZXhhZGVjaW1h
bCByYXRoZXIgdGhhbiBvY3RhbCBzZXF1ZW5jZXMuCi0vLyAgICBSZXR1cm5zIHRoZSBudW1iZXIg
b2YgYnl0ZXMgd3JpdHRlbiB0byAnZGVzdCcgKG5vdCBpbmNsdWRpbmcgdGhlIFwwKQotLy8gICAg
b3IgLTEgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBzcGFjZS4KLS8vCi0vLyAgICBDdXJyZW50
bHkgb25seSBcbiwgXHIsIFx0LCAiLCAnLCBcIGFuZCAhaXNwcmludCgpIGNoYXJzIGFyZSBlc2Nh
cGVkLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW50IENFc2NhcGVJbnRlcm5hbChjb25zdCBjaGFyKiBz
cmMsIGludCBzcmNfbGVuLCBjaGFyKiBkZXN0LAotICAgICAgICAgICAgICAgICAgICBpbnQgZGVz
dF9sZW4sIGJvb2wgdXNlX2hleCwgYm9vbCB1dGY4X3NhZmUpIHsKLSAgY29uc3QgY2hhciogc3Jj
X2VuZCA9IHNyYyArIHNyY19sZW47Ci0gIGludCB1c2VkID0gMDsKLSAgYm9vbCBsYXN0X2hleF9l
c2NhcGUgPSBmYWxzZTsgLy8gdHJ1ZSBpZiBsYXN0IG91dHB1dCBjaGFyIHdhcyBceE5OCi0KLSAg
Zm9yICg7IHNyYyA8IHNyY19lbmQ7IHNyYysrKSB7Ci0gICAgaWYgKGRlc3RfbGVuIC0gdXNlZCA8
IDIpICAgLy8gTmVlZCBzcGFjZSBmb3IgdHdvIGxldHRlciBlc2NhcGUKLSAgICAgIHJldHVybiAt
MTsKLQotICAgIGJvb2wgaXNfaGV4X2VzY2FwZSA9IGZhbHNlOwotICAgIHN3aXRjaCAoKnNyYykg
ewotICAgICAgY2FzZSAnXG4nOiBkZXN0W3VzZWQrK10gPSAnXFwnOyBkZXN0W3VzZWQrK10gPSAn
bic7ICBicmVhazsKLSAgICAgIGNhc2UgJ1xyJzogZGVzdFt1c2VkKytdID0gJ1xcJzsgZGVzdFt1
c2VkKytdID0gJ3InOyAgYnJlYWs7Ci0gICAgICBjYXNlICdcdCc6IGRlc3RbdXNlZCsrXSA9ICdc
XCc7IGRlc3RbdXNlZCsrXSA9ICd0JzsgIGJyZWFrOwotICAgICAgY2FzZSAnXCInOiBkZXN0W3Vz
ZWQrK10gPSAnXFwnOyBkZXN0W3VzZWQrK10gPSAnXCInOyBicmVhazsKLSAgICAgIGNhc2UgJ1wn
JzogZGVzdFt1c2VkKytdID0gJ1xcJzsgZGVzdFt1c2VkKytdID0gJ1wnJzsgYnJlYWs7Ci0gICAg
ICBjYXNlICdcXCc6IGRlc3RbdXNlZCsrXSA9ICdcXCc7IGRlc3RbdXNlZCsrXSA9ICdcXCc7IGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gTm90ZSB0aGF0IGlmIHdlIGVtaXQgXHhO
TiBhbmQgdGhlIHNyYyBjaGFyYWN0ZXIgYWZ0ZXIgdGhhdCBpcyBhIGhleAotICAgICAgICAvLyBk
aWdpdCB0aGVuIHRoYXQgZGlnaXQgbXVzdCBiZSBlc2NhcGVkIHRvbyB0byBwcmV2ZW50IGl0IGJl
aW5nCi0gICAgICAgIC8vIGludGVycHJldGVkIGFzIHBhcnQgb2YgdGhlIGNoYXJhY3RlciBjb2Rl
IGJ5IEMuCi0gICAgICAgIGlmICgoIXV0Zjhfc2FmZSB8fCBzdGF0aWNfY2FzdDx1aW50OD4oKnNy
YykgPCAweDgwKSAmJgotICAgICAgICAgICAgKCFpc3ByaW50KCpzcmMpIHx8Ci0gICAgICAgICAg
ICAgKGxhc3RfaGV4X2VzY2FwZSAmJiBpc3hkaWdpdCgqc3JjKSkpKSB7Ci0gICAgICAgICAgaWYg
KGRlc3RfbGVuIC0gdXNlZCA8IDQpIC8vIG5lZWQgc3BhY2UgZm9yIDQgbGV0dGVyIGVzY2FwZQot
ICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgIHNwcmludGYoZGVzdCArIHVzZWQsICh1
c2VfaGV4ID8gIlxceCUwMngiIDogIlxcJTAzbyIpLAotICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDg+KCpzcmMpKTsKLSAgICAgICAgICBpc19oZXhfZXNjYXBlID0gdXNlX2hleDsK
LSAgICAgICAgICB1c2VkICs9IDQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZGVzdFt1
c2VkKytdID0gKnNyYzsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbGFzdF9oZXhfZXNj
YXBlID0gaXNfaGV4X2VzY2FwZTsKLSAgfQotCi0gIGlmIChkZXN0X2xlbiAtIHVzZWQgPCAxKSAg
IC8vIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIHJvb20gZm9yIFwwCi0gICAgcmV0dXJuIC0xOwot
Ci0gIGRlc3RbdXNlZF0gPSAnXDAnOyAgIC8vIGRvZXNuJ3QgY291bnQgdG93YXJkcyByZXR1cm4g
dmFsdWUgdGhvdWdoCi0gIHJldHVybiB1c2VkOwotfQotCi0vLyBDYWxjdWxhdGVzIHRoZSBsZW5n
dGggb2YgdGhlIEMtc3R5bGUgZXNjYXBlZCB2ZXJzaW9uIG9mICdzcmMnLgotLy8gQXNzdW1lcyB0
aGF0IG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCB1c2luZyBvY3RhbCBzZXF1
ZW5jZXMsIGFuZAotLy8gdGhhdCBVVEYtOCBieXRlcyBhcmUgbm90IGhhbmRsZWQgc3BlY2lhbGx5
Lgotc3RhdGljIGlubGluZSBzaXplX3QgQ0VzY2FwZWRMZW5ndGgoU3RyaW5nUGllY2Ugc3JjKSB7
Ci0gIHN0YXRpYyBjaGFyIGNfZXNjYXBlZF9sZW5bMjU2XSA9IHsKLSAgICA0LCA0LCA0LCA0LCA0
LCA0LCA0LCA0LCA0LCAyLCAyLCA0LCA0LCAyLCA0LCA0LCAgLy8gXHQsIFxuLCBccgotICAgIDQs
IDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCi0gICAgMSwgMSwg
MiwgMSwgMSwgMSwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgIC8vICIsICcKLSAgICAx
LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAgLy8gJzAnLi4n
OScKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAg
Ly8gJ0EnLi4nTycKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAx
LCAxLCAxLCAgLy8gJ1AnLi4nWicsICdcJwotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsICAvLyAnYScuLidvJwotICAgIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQsICAvLyAncCcuLid6JywgREVMCi0gICAgNCwg
NCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwKLSAgICA0LCA0LCA0
LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAotICAgIDQsIDQsIDQsIDQs
IDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCi0gICAgNCwgNCwgNCwgNCwgNCwg
NCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwKLSAgICA0LCA0LCA0LCA0LCA0LCA0LCA0
LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAotICAgIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQs
IDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCi0gICAgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwg
NCwgNCwgNCwgNCwgNCwgNCwgNCwKLSAgICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0
LCA0LCA0LCA0LCA0LCA0LAotICB9OwotCi0gIHNpemVfdCBlc2NhcGVkX2xlbiA9IDA7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgc3JjLnNpemUoKTsgKytpKSB7Ci0gICAgdW5zaWduZWQgY2hhciBj
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3JjW2ldKTsKLSAgICBlc2NhcGVkX2xlbiAr
PSBjX2VzY2FwZWRfbGVuW2NdOwotICB9Ci0gIHJldHVybiBlc2NhcGVkX2xlbjsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gRXNjYXBlcyAnc3JjJyB1c2luZyBDLXN0eWxlIGVzY2FwZSBzZXF1
ZW5jZXMsIGFuZCBhcHBlbmRzIHRoZSBlc2NhcGVkIHN0cmluZwotLy8gdG8gJ2Rlc3QnLiBUaGlz
IHZlcnNpb24gaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBDRXNjYXBlSW50ZXJuYWwgYXMgaXQgY29t
cHV0ZXMKLS8vIHRoZSByZXF1aXJlZCBzcGFjZSB1c2luZyBhIGxvb2t1cCB0YWJsZSwgYW5kIGFs
c28gZG9lcyBub3QgZG8gYW55IHNwZWNpYWwKLS8vIGhhbmRsaW5nIGZvciBIZXggb3IgVVRGLTgg
Y2hhcmFjdGVycy4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZvaWQgQ0VzY2FwZUFuZEFwcGVuZChTdHJp
bmdQaWVjZSBzcmMsIHN0cmluZyogZGVzdCkgewotICBzaXplX3QgZXNjYXBlZF9sZW4gPSBDRXNj
YXBlZExlbmd0aChzcmMpOwotICBpZiAoZXNjYXBlZF9sZW4gPT0gc3JjLnNpemUoKSkgewotICAg
IGRlc3QtPmFwcGVuZChzcmMuZGF0YSgpLCBzcmMuc2l6ZSgpKTsKLSAgICByZXR1cm47Ci0gIH0K
LQotICBzaXplX3QgY3VyX2Rlc3RfbGVuID0gZGVzdC0+c2l6ZSgpOwotICBkZXN0LT5yZXNpemUo
Y3VyX2Rlc3RfbGVuICsgZXNjYXBlZF9sZW4pOwotICBjaGFyKiBhcHBlbmRfcHRyID0gJigqZGVz
dClbY3VyX2Rlc3RfbGVuXTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IHNyYy5zaXplKCk7ICsr
aSkgewotICAgIHVuc2lnbmVkIGNoYXIgYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNy
Y1tpXSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlICdcbic6ICphcHBlbmRfcHRyKysg
PSAnXFwnOyAqYXBwZW5kX3B0cisrID0gJ24nOyBicmVhazsKLSAgICAgIGNhc2UgJ1xyJzogKmFw
cGVuZF9wdHIrKyA9ICdcXCc7ICphcHBlbmRfcHRyKysgPSAncic7IGJyZWFrOwotICAgICAgY2Fz
ZSAnXHQnOiAqYXBwZW5kX3B0cisrID0gJ1xcJzsgKmFwcGVuZF9wdHIrKyA9ICd0JzsgYnJlYWs7
Ci0gICAgICBjYXNlICdcIic6ICphcHBlbmRfcHRyKysgPSAnXFwnOyAqYXBwZW5kX3B0cisrID0g
J1wiJzsgYnJlYWs7Ci0gICAgICBjYXNlICdcJyc6ICphcHBlbmRfcHRyKysgPSAnXFwnOyAqYXBw
ZW5kX3B0cisrID0gJ1wnJzsgYnJlYWs7Ci0gICAgICBjYXNlICdcXCc6ICphcHBlbmRfcHRyKysg
PSAnXFwnOyAqYXBwZW5kX3B0cisrID0gJ1xcJzsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBpZiAoIWlzcHJpbnQoYykpIHsKLSAgICAgICAgICAqYXBwZW5kX3B0cisrID0gJ1xcJzsK
LSAgICAgICAgICAqYXBwZW5kX3B0cisrID0gJzAnICsgYyAvIDY0OwotICAgICAgICAgICphcHBl
bmRfcHRyKysgPSAnMCcgKyAoYyAlIDY0KSAvIDg7Ci0gICAgICAgICAgKmFwcGVuZF9wdHIrKyA9
ICcwJyArIGMgJSA4OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICphcHBlbmRfcHRyKysg
PSBjOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotfQotCi1zdHJpbmcg
Q0VzY2FwZShjb25zdCBzdHJpbmcmIHNyYykgewotICBzdHJpbmcgZGVzdDsKLSAgQ0VzY2FwZUFu
ZEFwcGVuZChzcmMsICZkZXN0KTsKLSAgcmV0dXJuIGRlc3Q7Ci19Ci0KLW5hbWVzcGFjZSBzdHJp
bmdzIHsKLQotc3RyaW5nIFV0ZjhTYWZlQ0VzY2FwZShjb25zdCBzdHJpbmcmIHNyYykgewotICBj
b25zdCBpbnQgZGVzdF9sZW5ndGggPSBzcmMuc2l6ZSgpICogNCArIDE7IC8vIE1heGltdW0gcG9z
c2libGUgZXhwYW5zaW9uCi0gIHNjb3BlZF9hcnJheTxjaGFyPiBkZXN0KG5ldyBjaGFyW2Rlc3Rf
bGVuZ3RoXSk7Ci0gIGNvbnN0IGludCBsZW4gPSBDRXNjYXBlSW50ZXJuYWwoc3JjLmRhdGEoKSwg
c3JjLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LmdldCgp
LCBkZXN0X2xlbmd0aCwgZmFsc2UsIHRydWUpOwotICBHT09HTEVfRENIRUNLX0dFKGxlbiwgMCk7
Ci0gIHJldHVybiBzdHJpbmcoZGVzdC5nZXQoKSwgbGVuKTsKLX0KLQotc3RyaW5nIENIZXhFc2Nh
cGUoY29uc3Qgc3RyaW5nJiBzcmMpIHsKLSAgY29uc3QgaW50IGRlc3RfbGVuZ3RoID0gc3JjLnNp
emUoKSAqIDQgKyAxOyAvLyBNYXhpbXVtIHBvc3NpYmxlIGV4cGFuc2lvbgotICBzY29wZWRfYXJy
YXk8Y2hhcj4gZGVzdChuZXcgY2hhcltkZXN0X2xlbmd0aF0pOwotICBjb25zdCBpbnQgbGVuID0g
Q0VzY2FwZUludGVybmFsKHNyYy5kYXRhKCksIHNyYy5zaXplKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdC5nZXQoKSwgZGVzdF9sZW5ndGgsIHRydWUsIGZhbHNlKTsK
LSAgR09PR0xFX0RDSEVDS19HRShsZW4sIDApOwotICByZXR1cm4gc3RyaW5nKGRlc3QuZ2V0KCks
IGxlbik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBzdHJpbmdzCi0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIHN0cnRvMzJfYWRhcHRvcigpCi0vLyBzdHJ0b3UzMl9hZGFwdG9yKCkKLS8vICAgIEltcGxl
bWVudGF0aW9uIG9mIHN0cnRvW3VdbCByZXBsYWNlbWVudHMgdGhhdCBoYXZlIGlkZW50aWNhbAot
Ly8gICAgb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyBjaGFyYWN0ZXJpc3RpY3MgZm9yIGJvdGggSUxQ
LTMyIGFuZCBMUC02NAotLy8gICAgcGxhdGZvcm1zLCBpbmNsdWRpbmcgZXJybm8gcHJlc2VydmF0
aW9uIGluIGVycm9yLWZyZWUgY2FsbHMuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWludDMyIHN0cnRv
MzJfYWRhcHRvcihjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkgewot
ICBjb25zdCBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKLSAgZXJybm8gPSAwOwotICBjb25zdCBs
b25nIHJlc3VsdCA9IHN0cnRvbChucHRyLCBlbmRwdHIsIGJhc2UpOwotICBpZiAoZXJybm8gPT0g
RVJBTkdFICYmIHJlc3VsdCA9PSBMT05HX01JTikgewotICAgIHJldHVybiBraW50MzJtaW47Ci0g
IH0gZWxzZSBpZiAoZXJybm8gPT0gRVJBTkdFICYmIHJlc3VsdCA9PSBMT05HX01BWCkgewotICAg
IHJldHVybiBraW50MzJtYXg7Ci0gIH0gZWxzZSBpZiAoZXJybm8gPT0gMCAmJiByZXN1bHQgPCBr
aW50MzJtaW4pIHsKLSAgICBlcnJubyA9IEVSQU5HRTsKLSAgICByZXR1cm4ga2ludDMybWluOwot
ICB9IGVsc2UgaWYgKGVycm5vID09IDAgJiYgcmVzdWx0ID4ga2ludDMybWF4KSB7Ci0gICAgZXJy
bm8gPSBFUkFOR0U7Ci0gICAgcmV0dXJuIGtpbnQzMm1heDsKLSAgfQotICBpZiAoZXJybm8gPT0g
MCkKLSAgICBlcnJubyA9IHNhdmVkX2Vycm5vOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzI+
KHJlc3VsdCk7Ci19Ci0KLXVpbnQzMiBzdHJ0b3UzMl9hZGFwdG9yKGNvbnN0IGNoYXIgKm5wdHIs
IGNoYXIgKiplbmRwdHIsIGludCBiYXNlKSB7Ci0gIGNvbnN0IGludCBzYXZlZF9lcnJubyA9IGVy
cm5vOwotICBlcnJubyA9IDA7Ci0gIGNvbnN0IHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gc3RydG91
bChucHRyLCBlbmRwdHIsIGJhc2UpOwotICBpZiAoZXJybm8gPT0gRVJBTkdFICYmIHJlc3VsdCA9
PSBVTE9OR19NQVgpIHsKLSAgICByZXR1cm4ga3VpbnQzMm1heDsKLSAgfSBlbHNlIGlmIChlcnJu
byA9PSAwICYmIHJlc3VsdCA+IGt1aW50MzJtYXgpIHsKLSAgICBlcnJubyA9IEVSQU5HRTsKLSAg
ICByZXR1cm4ga3VpbnQzMm1heDsKLSAgfQotICBpZiAoZXJybm8gPT0gMCkKLSAgICBlcnJubyA9
IHNhdmVkX2Vycm5vOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyPihyZXN1bHQpOwotfQot
Ci1pbmxpbmUgYm9vbCBzYWZlX3BhcnNlX3NpZ24oc3RyaW5nKiB0ZXh0ICAvKmlub3V0Ki8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogbmVnYXRpdmVfcHRyICAvKm91dHB1dCov
KSB7Ci0gIGNvbnN0IGNoYXIqIHN0YXJ0ID0gdGV4dC0+ZGF0YSgpOwotICBjb25zdCBjaGFyKiBl
bmQgPSBzdGFydCArIHRleHQtPnNpemUoKTsKLQotICAvLyBDb25zdW1lIHdoaXRlc3BhY2UuCi0g
IHdoaWxlIChzdGFydCA8IGVuZCAmJiAoc3RhcnRbMF0gPT0gJyAnKSkgewotICAgICsrc3RhcnQ7
Ci0gIH0KLSAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmIChlbmRbLTFdID09ICcgJykpIHsKLSAgICAt
LWVuZDsKLSAgfQotICBpZiAoc3RhcnQgPj0gZW5kKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgLy8gQ29uc3VtZSBzaWduLgotICAqbmVnYXRpdmVfcHRyID0gKHN0YXJ0WzBdID09ICct
Jyk7Ci0gIGlmICgqbmVnYXRpdmVfcHRyIHx8IHN0YXJ0WzBdID09ICcrJykgewotICAgICsrc3Rh
cnQ7Ci0gICAgaWYgKHN0YXJ0ID49IGVuZCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgfQotICAqdGV4dCA9IHRleHQtPnN1YnN0cihzdGFydCAtIHRleHQtPmRhdGEoKSwgZW5kIC0g
c3RhcnQpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4K
LWJvb2wgc2FmZV9wYXJzZV9wb3NpdGl2ZV9pbnQoCi0gICAgc3RyaW5nIHRleHQsIEludFR5cGUq
IHZhbHVlX3ApIHsKLSAgaW50IGJhc2UgPSAxMDsKLSAgSW50VHlwZSB2YWx1ZSA9IDA7Ci0gIGNv
bnN0IEludFR5cGUgdm1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8SW50VHlwZT46Om1heCgpOwot
ICBhc3NlcnQodm1heCA+IDApOwotICBhc3NlcnQodm1heCA+PSBiYXNlKTsKLSAgY29uc3QgSW50
VHlwZSB2bWF4X292ZXJfYmFzZSA9IHZtYXggLyBiYXNlOwotICBjb25zdCBjaGFyKiBzdGFydCA9
IHRleHQuZGF0YSgpOwotICBjb25zdCBjaGFyKiBlbmQgPSBzdGFydCArIHRleHQuc2l6ZSgpOwot
ICAvLyBsb29wIG92ZXIgZGlnaXRzCi0gIGZvciAoOyBzdGFydCA8IGVuZDsgKytzdGFydCkgewot
ICAgIHVuc2lnbmVkIGNoYXIgYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHN0YXJ0WzBd
KTsKLSAgICBpbnQgZGlnaXQgPSBjIC0gJzAnOwotICAgIGlmIChkaWdpdCA+PSBiYXNlIHx8IGRp
Z2l0IDwgMCkgewotICAgICAgKnZhbHVlX3AgPSB2YWx1ZTsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKHZhbHVlID4gdm1heF9vdmVyX2Jhc2UpIHsKLSAgICAgICp2YWx1ZV9w
ID0gdm1heDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdmFsdWUgKj0gYmFzZTsK
LSAgICBpZiAodmFsdWUgPiB2bWF4IC0gZGlnaXQpIHsKLSAgICAgICp2YWx1ZV9wID0gdm1heDsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdmFsdWUgKz0gZGlnaXQ7Ci0gIH0KLSAg
KnZhbHVlX3AgPSB2YWx1ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEludFR5cGU+Ci1ib29sIHNhZmVfcGFyc2VfbmVnYXRpdmVfaW50KAotICAgIGNvbnN0IHN0cmlu
ZyYgdGV4dCwgSW50VHlwZSogdmFsdWVfcCkgewotICBpbnQgYmFzZSA9IDEwOwotICBJbnRUeXBl
IHZhbHVlID0gMDsKLSAgY29uc3QgSW50VHlwZSB2bWluID0gc3RkOjpudW1lcmljX2xpbWl0czxJ
bnRUeXBlPjo6bWluKCk7Ci0gIGFzc2VydCh2bWluIDwgMCk7Ci0gIGFzc2VydCh2bWluIDw9IDAg
LSBiYXNlKTsKLSAgSW50VHlwZSB2bWluX292ZXJfYmFzZSA9IHZtaW4gLyBiYXNlOwotICAvLyAy
MDAzIGMrKyBzdGFuZGFyZCBbZXhwci5tdWxdCi0gIC8vICIuLi4gdGhlIHNpZ24gb2YgdGhlIHJl
bWFpbmRlciBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLiIKLSAgLy8gQWx0aG91Z2ggKHZtaW4v
YmFzZSkqYmFzZSArIHZtaW4lYmFzZSBpcyBhbHdheXMgdm1pbi4KLSAgLy8gMjAxMSBjKysgc3Rh
bmRhcmQgdGlnaHRlbnMgdGhlIHNwZWMgYnV0IHdlIGNhbm5vdCByZWx5IG9uIGl0LgotICBpZiAo
dm1pbiAlIGJhc2UgPiAwKSB7Ci0gICAgdm1pbl9vdmVyX2Jhc2UgKz0gMTsKLSAgfQotICBjb25z
dCBjaGFyKiBzdGFydCA9IHRleHQuZGF0YSgpOwotICBjb25zdCBjaGFyKiBlbmQgPSBzdGFydCAr
IHRleHQuc2l6ZSgpOwotICAvLyBsb29wIG92ZXIgZGlnaXRzCi0gIGZvciAoOyBzdGFydCA8IGVu
ZDsgKytzdGFydCkgewotICAgIHVuc2lnbmVkIGNoYXIgYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHN0YXJ0WzBdKTsKLSAgICBpbnQgZGlnaXQgPSBjIC0gJzAnOwotICAgIGlmIChkaWdp
dCA+PSBiYXNlIHx8IGRpZ2l0IDwgMCkgewotICAgICAgKnZhbHVlX3AgPSB2YWx1ZTsKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHZhbHVlIDwgdm1pbl9vdmVyX2Jhc2UpIHsK
LSAgICAgICp2YWx1ZV9wID0gdm1pbjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
dmFsdWUgKj0gYmFzZTsKLSAgICBpZiAodmFsdWUgPCB2bWluICsgZGlnaXQpIHsKLSAgICAgICp2
YWx1ZV9wID0gdm1pbjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdmFsdWUgLT0g
ZGlnaXQ7Ci0gIH0KLSAgKnZhbHVlX3AgPSB2YWx1ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIEludFR5cGU+Ci1ib29sIHNhZmVfaW50X2ludGVybmFsKHN0cmluZyB0
ZXh0LCBJbnRUeXBlKiB2YWx1ZV9wKSB7Ci0gICp2YWx1ZV9wID0gMDsKLSAgYm9vbCBuZWdhdGl2
ZTsKLSAgaWYgKCFzYWZlX3BhcnNlX3NpZ24oJnRleHQsICZuZWdhdGl2ZSkpIHsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKCFuZWdhdGl2ZSkgewotICAgIHJldHVybiBzYWZlX3BhcnNl
X3Bvc2l0aXZlX2ludCh0ZXh0LCB2YWx1ZV9wKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gc2Fm
ZV9wYXJzZV9uZWdhdGl2ZV9pbnQodGV4dCwgdmFsdWVfcCk7Ci0gIH0KLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgSW50VHlwZT4KLWJvb2wgc2FmZV91aW50X2ludGVybmFsKHN0cmluZyB0ZXh0LCBJ
bnRUeXBlKiB2YWx1ZV9wKSB7Ci0gICp2YWx1ZV9wID0gMDsKLSAgYm9vbCBuZWdhdGl2ZTsKLSAg
aWYgKCFzYWZlX3BhcnNlX3NpZ24oJnRleHQsICZuZWdhdGl2ZSkgfHwgbmVnYXRpdmUpIHsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHNhZmVfcGFyc2VfcG9zaXRpdmVfaW50KHRl
eHQsIHZhbHVlX3ApOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBGYXN0SW50VG9CdWZmZXIo
KQotLy8gRmFzdEludDY0VG9CdWZmZXIoKQotLy8gRmFzdEhleFRvQnVmZmVyKCkKLS8vIEZhc3RI
ZXg2NFRvQnVmZmVyKCkKLS8vIEZhc3RIZXgzMlRvQnVmZmVyKCkKLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotLy8gT2Zmc2V0IGludG8gYnVmZmVyIHdoZXJlIEZhc3RJbnQ2NFRvQnVmZmVyIHBsYWNlcyB0
aGUgZW5kIG9mIHN0cmluZwotLy8gbnVsbCBjaGFyYWN0ZXIuICBBbHNvIHVzZWQgYnkgRmFzdElu
dDY0VG9CdWZmZXJMZWZ0Lgotc3RhdGljIGNvbnN0IGludCBrRmFzdEludDY0VG9CdWZmZXJPZmZz
ZXQgPSAyMTsKLQotY2hhciAqRmFzdEludDY0VG9CdWZmZXIoaW50NjQgaSwgY2hhciogYnVmZmVy
KSB7Ci0gIC8vIFdlIGNvdWxkIGNvbGxhcHNlIHRoZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgc2Vj
dGlvbnMsIGJ1dCB0aGF0Ci0gIC8vIHdvdWxkIGJlIHNsaWdodGx5IHNsb3dlciBmb3IgcG9zaXRp
dmUgbnVtYmVycy4uLgotICAvLyAyMiBieXRlcyBpcyBlbm91Z2ggdG8gc3RvcmUgLTIqKjY0LCAt
MTg0NDY3NDQwNzM3MDk1NTE2MTYuCi0gIGNoYXIqIHAgPSBidWZmZXIgKyBrRmFzdEludDY0VG9C
dWZmZXJPZmZzZXQ7Ci0gICpwLS0gPSAnXDAnOwotICBpZiAoaSA+PSAwKSB7Ci0gICAgZG8gewot
ICAgICAgKnAtLSA9ICcwJyArIGkgJSAxMDsKLSAgICAgIGkgLz0gMTA7Ci0gICAgfSB3aGlsZSAo
aSA+IDApOwotICAgIHJldHVybiBwICsgMTsKLSAgfSBlbHNlIHsKLSAgICAvLyBPbiBkaWZmZXJl
bnQgcGxhdGZvcm1zLCAlIGFuZCAvIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9ycyBmb3IKLSAgICAv
LyBuZWdhdGl2ZSBudW1iZXJzLCBzbyB3ZSBuZWVkIHRvIGp1bXAgdGhyb3VnaCBob29wcyB0byBt
YWtlIHN1cmUKLSAgICAvLyB3ZSBkb24ndCBkaXZpZGUgbmVnYXRpdmUgbnVtYmVycy4KLSAgICBp
ZiAoaSA+IC0xMCkgewotICAgICAgaSA9IC1pOwotICAgICAgKnAtLSA9ICcwJyArIGk7Ci0gICAg
ICAqcCA9ICctJzsKLSAgICAgIHJldHVybiBwOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBNYWtl
IHN1cmUgd2UgYXJlbid0IGF0IE1JTl9JTlQsIGluIHdoaWNoIGNhc2Ugd2UgY2FuJ3Qgc2F5IGkg
PSAtaQotICAgICAgaSA9IGkgKyAxMDsKLSAgICAgIGkgPSAtaTsKLSAgICAgICpwLS0gPSAnMCcg
KyBpICUgMTA7Ci0gICAgICAvLyBVbmRvIHdoYXQgd2UgZGlkIGEgbW9tZW50IGFnbwotICAgICAg
aSA9IGkgLyAxMCArIDE7Ci0gICAgICBkbyB7Ci0gICAgICAgICpwLS0gPSAnMCcgKyBpICUgMTA7
Ci0gICAgICAgIGkgLz0gMTA7Ci0gICAgICB9IHdoaWxlIChpID4gMCk7Ci0gICAgICAqcCA9ICct
JzsKLSAgICAgIHJldHVybiBwOwotICAgIH0KLSAgfQotfQotCi0vLyBPZmZzZXQgaW50byBidWZm
ZXIgd2hlcmUgRmFzdEludDMyVG9CdWZmZXIgcGxhY2VzIHRoZSBlbmQgb2Ygc3RyaW5nCi0vLyBu
dWxsIGNoYXJhY3Rlci4gIEFsc28gdXNlZCBieSBGYXN0SW50MzJUb0J1ZmZlckxlZnQKLXN0YXRp
YyBjb25zdCBpbnQga0Zhc3RJbnQzMlRvQnVmZmVyT2Zmc2V0ID0gMTE7Ci0KLS8vIFllcywgdGhp
cyBpcyBhIGR1cGxpY2F0ZSBvZiBGYXN0SW50NjRUb0J1ZmZlci4gIEJ1dCwgd2UgbmVlZCB0aGlz
IGZvciB0aGUKLS8vIGNvbXBpbGVyIHRvIGdlbmVyYXRlIDMyIGJpdCBhcml0aG1ldGljIGluc3Ry
dWN0aW9ucy4gIEl0J3MgbXVjaCBmYXN0ZXIsIGF0Ci0vLyBsZWFzdCB3aXRoIDMyIGJpdCBiaW5h
cmllcy4KLWNoYXIgKkZhc3RJbnQzMlRvQnVmZmVyKGludDMyIGksIGNoYXIqIGJ1ZmZlcikgewot
ICAvLyBXZSBjb3VsZCBjb2xsYXBzZSB0aGUgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHNlY3Rpb25z
LCBidXQgdGhhdAotICAvLyB3b3VsZCBiZSBzbGlnaHRseSBzbG93ZXIgZm9yIHBvc2l0aXZlIG51
bWJlcnMuLi4KLSAgLy8gMTIgYnl0ZXMgaXMgZW5vdWdoIHRvIHN0b3JlIC0yKiozMiwgLTQyOTQ5
NjcyOTYuCi0gIGNoYXIqIHAgPSBidWZmZXIgKyBrRmFzdEludDMyVG9CdWZmZXJPZmZzZXQ7Ci0g
ICpwLS0gPSAnXDAnOwotICBpZiAoaSA+PSAwKSB7Ci0gICAgZG8gewotICAgICAgKnAtLSA9ICcw
JyArIGkgJSAxMDsKLSAgICAgIGkgLz0gMTA7Ci0gICAgfSB3aGlsZSAoaSA+IDApOwotICAgIHJl
dHVybiBwICsgMTsKLSAgfSBlbHNlIHsKLSAgICAvLyBPbiBkaWZmZXJlbnQgcGxhdGZvcm1zLCAl
IGFuZCAvIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9ycyBmb3IKLSAgICAvLyBuZWdhdGl2ZSBudW1i
ZXJzLCBzbyB3ZSBuZWVkIHRvIGp1bXAgdGhyb3VnaCBob29wcyB0byBtYWtlIHN1cmUKLSAgICAv
LyB3ZSBkb24ndCBkaXZpZGUgbmVnYXRpdmUgbnVtYmVycy4KLSAgICBpZiAoaSA+IC0xMCkgewot
ICAgICAgaSA9IC1pOwotICAgICAgKnAtLSA9ICcwJyArIGk7Ci0gICAgICAqcCA9ICctJzsKLSAg
ICAgIHJldHVybiBwOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBNYWtlIHN1cmUgd2UgYXJlbid0
IGF0IE1JTl9JTlQsIGluIHdoaWNoIGNhc2Ugd2UgY2FuJ3Qgc2F5IGkgPSAtaQotICAgICAgaSA9
IGkgKyAxMDsKLSAgICAgIGkgPSAtaTsKLSAgICAgICpwLS0gPSAnMCcgKyBpICUgMTA7Ci0gICAg
ICAvLyBVbmRvIHdoYXQgd2UgZGlkIGEgbW9tZW50IGFnbwotICAgICAgaSA9IGkgLyAxMCArIDE7
Ci0gICAgICBkbyB7Ci0gICAgICAgICpwLS0gPSAnMCcgKyBpICUgMTA7Ci0gICAgICAgIGkgLz0g
MTA7Ci0gICAgICB9IHdoaWxlIChpID4gMCk7Ci0gICAgICAqcCA9ICctJzsKLSAgICAgIHJldHVy
biBwOwotICAgIH0KLSAgfQotfQotCi1jaGFyICpGYXN0SGV4VG9CdWZmZXIoaW50IGksIGNoYXIq
IGJ1ZmZlcikgewotICBHT09HTEVfQ0hFQ0soaSA+PSAwKSA8PCAiRmFzdEhleFRvQnVmZmVyKCkg
d2FudHMgbm9uLW5lZ2F0aXZlIGludGVnZXJzLCBub3QgIiA8PCBpOwotCi0gIHN0YXRpYyBjb25z
dCBjaGFyICpoZXhkaWdpdHMgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0gIGNoYXIgKnAgPSBidWZm
ZXIgKyAyMTsKLSAgKnAtLSA9ICdcMCc7Ci0gIGRvIHsKLSAgICAqcC0tID0gaGV4ZGlnaXRzW2kg
JiAxNV07ICAgLy8gbW9kIGJ5IDE2Ci0gICAgaSA+Pj0gNDsgICAgICAgICAgICAgICAgICAgIC8v
IGRpdmlkZSBieSAxNgotICB9IHdoaWxlIChpID4gMCk7Ci0gIHJldHVybiBwICsgMTsKLX0KLQot
Y2hhciAqSW50ZXJuYWxGYXN0SGV4VG9CdWZmZXIodWludDY0IHZhbHVlLCBjaGFyKiBidWZmZXIs
IGludCBudW1fYnl0ZSkgewotICBzdGF0aWMgY29uc3QgY2hhciAqaGV4ZGlnaXRzID0gIjAxMjM0
NTY3ODlhYmNkZWYiOwotICBidWZmZXJbbnVtX2J5dGVdID0gJ1wwJzsKLSAgZm9yIChpbnQgaSA9
IG51bV9ieXRlIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSNpZmRlZiBfTV9YNjQKLSAgICAvLyBNU1ZD
IHg2NCBwbGF0Zm9ybSBoYXMgYSBidWcgb3B0aW1pemluZyB0aGUgdWludDMyKHZhbHVlKSBpbiB0
aGUgI2Vsc2UKLSAgICAvLyBibG9jay4gR2l2ZW4gdGhhdCB0aGUgdWludDMyIGNhc3Qgd2FzIHRv
IGltcHJvdmUgcGVyZm9ybWFuY2Ugb24gMzItYml0Ci0gICAgLy8gcGxhdGZvcm1zLCB3ZSB1c2Ug
NjQtYml0ICcmJyBkaXJlY3RseS4KLSAgICBidWZmZXJbaV0gPSBoZXhkaWdpdHNbdmFsdWUgJiAw
eGZdOwotI2Vsc2UKLSAgICBidWZmZXJbaV0gPSBoZXhkaWdpdHNbdWludDMyKHZhbHVlKSAmIDB4
Zl07Ci0jZW5kaWYKLSAgICB2YWx1ZSA+Pj0gNDsKLSAgfQotICByZXR1cm4gYnVmZmVyOwotfQot
Ci1jaGFyICpGYXN0SGV4NjRUb0J1ZmZlcih1aW50NjQgdmFsdWUsIGNoYXIqIGJ1ZmZlcikgewot
ICByZXR1cm4gSW50ZXJuYWxGYXN0SGV4VG9CdWZmZXIodmFsdWUsIGJ1ZmZlciwgMTYpOwotfQot
Ci1jaGFyICpGYXN0SGV4MzJUb0J1ZmZlcih1aW50MzIgdmFsdWUsIGNoYXIqIGJ1ZmZlcikgewot
ICByZXR1cm4gSW50ZXJuYWxGYXN0SGV4VG9CdWZmZXIodmFsdWUsIGJ1ZmZlciwgOCk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZhc3RJbnQzMlRvQnVmZmVyTGVmdCgpCi0vLyBGYXN0VUlu
dDMyVG9CdWZmZXJMZWZ0KCkKLS8vIEZhc3RJbnQ2NFRvQnVmZmVyTGVmdCgpCi0vLyBGYXN0VUlu
dDY0VG9CdWZmZXJMZWZ0KCkKLS8vCi0vLyBMaWtlIHRoZSBGYXN0KlRvQnVmZmVyKCkgZnVuY3Rp
b25zIGFib3ZlLCB0aGVzZSBhcmUgaW50ZW5kZWQgZm9yIHNwZWVkLgotLy8gVW5saWtlIHRoZSBG
YXN0KlRvQnVmZmVyKCkgZnVuY3Rpb25zLCBob3dldmVyLCB0aGVzZSBmdW5jdGlvbnMgd3JpdGUK
LS8vIHRoZWlyIG91dHB1dCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKGhlbmNlIHRo
ZSBuYW1lLCBhcyB0aGUKLS8vIG91dHB1dCBpcyBsZWZ0LWFsaWduZWQpLiAgVGhlIGNhbGxlciBp
cyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdAotLy8gdGhlIGJ1ZmZlciBoYXMgZW5vdWdo
IHNwYWNlIHRvIGhvbGQgdGhlIG91dHB1dC4KLS8vCi0vLyBSZXR1cm5zIGEgcG9pbnRlciB0byB0
aGUgZW5kIG9mIHRoZSBzdHJpbmcgKGkuZS4gdGhlIG51bGwgY2hhcmFjdGVyCi0vLyB0ZXJtaW5h
dGluZyB0aGUgc3RyaW5nKS4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGNvbnN0IGNoYXIg
dHdvX0FTQ0lJX2RpZ2l0c1sxMDBdWzJdID0gewotICB7JzAnLCcwJ30sIHsnMCcsJzEnfSwgeycw
JywnMid9LCB7JzAnLCczJ30sIHsnMCcsJzQnfSwKLSAgeycwJywnNSd9LCB7JzAnLCc2J30sIHsn
MCcsJzcnfSwgeycwJywnOCd9LCB7JzAnLCc5J30sCi0gIHsnMScsJzAnfSwgeycxJywnMSd9LCB7
JzEnLCcyJ30sIHsnMScsJzMnfSwgeycxJywnNCd9LAotICB7JzEnLCc1J30sIHsnMScsJzYnfSwg
eycxJywnNyd9LCB7JzEnLCc4J30sIHsnMScsJzknfSwKLSAgeycyJywnMCd9LCB7JzInLCcxJ30s
IHsnMicsJzInfSwgeycyJywnMyd9LCB7JzInLCc0J30sCi0gIHsnMicsJzUnfSwgeycyJywnNid9
LCB7JzInLCc3J30sIHsnMicsJzgnfSwgeycyJywnOSd9LAotICB7JzMnLCcwJ30sIHsnMycsJzEn
fSwgeyczJywnMid9LCB7JzMnLCczJ30sIHsnMycsJzQnfSwKLSAgeyczJywnNSd9LCB7JzMnLCc2
J30sIHsnMycsJzcnfSwgeyczJywnOCd9LCB7JzMnLCc5J30sCi0gIHsnNCcsJzAnfSwgeyc0Jywn
MSd9LCB7JzQnLCcyJ30sIHsnNCcsJzMnfSwgeyc0JywnNCd9LAotICB7JzQnLCc1J30sIHsnNCcs
JzYnfSwgeyc0JywnNyd9LCB7JzQnLCc4J30sIHsnNCcsJzknfSwKLSAgeyc1JywnMCd9LCB7JzUn
LCcxJ30sIHsnNScsJzInfSwgeyc1JywnMyd9LCB7JzUnLCc0J30sCi0gIHsnNScsJzUnfSwgeyc1
JywnNid9LCB7JzUnLCc3J30sIHsnNScsJzgnfSwgeyc1JywnOSd9LAotICB7JzYnLCcwJ30sIHsn
NicsJzEnfSwgeyc2JywnMid9LCB7JzYnLCczJ30sIHsnNicsJzQnfSwKLSAgeyc2JywnNSd9LCB7
JzYnLCc2J30sIHsnNicsJzcnfSwgeyc2JywnOCd9LCB7JzYnLCc5J30sCi0gIHsnNycsJzAnfSwg
eyc3JywnMSd9LCB7JzcnLCcyJ30sIHsnNycsJzMnfSwgeyc3JywnNCd9LAotICB7JzcnLCc1J30s
IHsnNycsJzYnfSwgeyc3JywnNyd9LCB7JzcnLCc4J30sIHsnNycsJzknfSwKLSAgeyc4JywnMCd9
LCB7JzgnLCcxJ30sIHsnOCcsJzInfSwgeyc4JywnMyd9LCB7JzgnLCc0J30sCi0gIHsnOCcsJzUn
fSwgeyc4JywnNid9LCB7JzgnLCc3J30sIHsnOCcsJzgnfSwgeyc4JywnOSd9LAotICB7JzknLCcw
J30sIHsnOScsJzEnfSwgeyc5JywnMid9LCB7JzknLCczJ30sIHsnOScsJzQnfSwKLSAgeyc5Jywn
NSd9LCB7JzknLCc2J30sIHsnOScsJzcnfSwgeyc5JywnOCd9LCB7JzknLCc5J30KLX07Ci0KLWNo
YXIqIEZhc3RVSW50MzJUb0J1ZmZlckxlZnQodWludDMyIHUsIGNoYXIqIGJ1ZmZlcikgewotICBp
bnQgZGlnaXRzOwotICBjb25zdCBjaGFyICpBU0NJSV9kaWdpdHMgPSBOVUxMOwotICAvLyBUaGUg
aWRlYSBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHRvIHRyaW0gdGhlIG51bWJlciBvZiBkaXZp
ZGVzIHRvIGFzIGZldwotICAvLyBhcyBwb3NzaWJsZSBieSB1c2luZyBtdWx0aXBsaWNhdGlvbiBh
bmQgc3VidHJhY3Rpb24gcmF0aGVyIHRoYW4gbW9kICglKSwKLSAgLy8gYW5kIGJ5IG91dHB1dHRp
bmcgdHdvIGRpZ2l0cyBhdCBhIHRpbWUgcmF0aGVyIHRoYW4gb25lLgotICAvLyBUaGUgaHVnZS1u
dW1iZXIgY2FzZSBpcyBmaXJzdCwgaW4gdGhlIGhvcGVzIHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwg
b3V0cHV0Ci0gIC8vIHRoYXQgY2FzZSBpbiBvbmUgYnJhbmNoLWZyZWUgYmxvY2sgb2YgY29kZSwg
YW5kIG9ubHkgb3V0cHV0IGNvbmRpdGlvbmFsCi0gIC8vIGJyYW5jaGVzIGludG8gaXQgZnJvbSBi
ZWxvdy4KLSAgaWYgKHUgPj0gMTAwMDAwMDAwMCkgeyAgLy8gPj0gMSwwMDAsMDAwLDAwMAotICAg
IGRpZ2l0cyA9IHUgLyAxMDAwMDAwMDA7ICAvLyAxMDAsMDAwLDAwMAotICAgIEFTQ0lJX2RpZ2l0
cyA9IHR3b19BU0NJSV9kaWdpdHNbZGlnaXRzXTsKLSAgICBidWZmZXJbMF0gPSBBU0NJSV9kaWdp
dHNbMF07Ci0gICAgYnVmZmVyWzFdID0gQVNDSUlfZGlnaXRzWzFdOwotICAgIGJ1ZmZlciArPSAy
Owotc3VibHQxMDBfMDAwXzAwMDoKLSAgICB1IC09IGRpZ2l0cyAqIDEwMDAwMDAwMDsgIC8vIDEw
MCwwMDAsMDAwCi1sdDEwMF8wMDBfMDAwOgotICAgIGRpZ2l0cyA9IHUgLyAxMDAwMDAwOyAgLy8g
MSwwMDAsMDAwCi0gICAgQVNDSUlfZGlnaXRzID0gdHdvX0FTQ0lJX2RpZ2l0c1tkaWdpdHNdOwot
ICAgIGJ1ZmZlclswXSA9IEFTQ0lJX2RpZ2l0c1swXTsKLSAgICBidWZmZXJbMV0gPSBBU0NJSV9k
aWdpdHNbMV07Ci0gICAgYnVmZmVyICs9IDI7Ci1zdWJsdDFfMDAwXzAwMDoKLSAgICB1IC09IGRp
Z2l0cyAqIDEwMDAwMDA7ICAvLyAxLDAwMCwwMDAKLWx0MV8wMDBfMDAwOgotICAgIGRpZ2l0cyA9
IHUgLyAxMDAwMDsgIC8vIDEwLDAwMAotICAgIEFTQ0lJX2RpZ2l0cyA9IHR3b19BU0NJSV9kaWdp
dHNbZGlnaXRzXTsKLSAgICBidWZmZXJbMF0gPSBBU0NJSV9kaWdpdHNbMF07Ci0gICAgYnVmZmVy
WzFdID0gQVNDSUlfZGlnaXRzWzFdOwotICAgIGJ1ZmZlciArPSAyOwotc3VibHQxMF8wMDA6Ci0g
ICAgdSAtPSBkaWdpdHMgKiAxMDAwMDsgIC8vIDEwLDAwMAotbHQxMF8wMDA6Ci0gICAgZGlnaXRz
ID0gdSAvIDEwMDsKLSAgICBBU0NJSV9kaWdpdHMgPSB0d29fQVNDSUlfZGlnaXRzW2RpZ2l0c107
Ci0gICAgYnVmZmVyWzBdID0gQVNDSUlfZGlnaXRzWzBdOwotICAgIGJ1ZmZlclsxXSA9IEFTQ0lJ
X2RpZ2l0c1sxXTsKLSAgICBidWZmZXIgKz0gMjsKLXN1Ymx0MTAwOgotICAgIHUgLT0gZGlnaXRz
ICogMTAwOwotbHQxMDA6Ci0gICAgZGlnaXRzID0gdTsKLSAgICBBU0NJSV9kaWdpdHMgPSB0d29f
QVNDSUlfZGlnaXRzW2RpZ2l0c107Ci0gICAgYnVmZmVyWzBdID0gQVNDSUlfZGlnaXRzWzBdOwot
ICAgIGJ1ZmZlclsxXSA9IEFTQ0lJX2RpZ2l0c1sxXTsKLSAgICBidWZmZXIgKz0gMjsKLWRvbmU6
Ci0gICAgKmJ1ZmZlciA9IDA7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLSAgfQotCi0gIGlmICh1IDwg
MTAwKSB7Ci0gICAgZGlnaXRzID0gdTsKLSAgICBpZiAodSA+PSAxMCkgZ290byBsdDEwMDsKLSAg
ICAqYnVmZmVyKysgPSAnMCcgKyBkaWdpdHM7Ci0gICAgZ290byBkb25lOwotICB9Ci0gIGlmICh1
ICA8ICAxMDAwMCkgeyAgIC8vIDEwLDAwMAotICAgIGlmICh1ID49IDEwMDApIGdvdG8gbHQxMF8w
MDA7Ci0gICAgZGlnaXRzID0gdSAvIDEwMDsKLSAgICAqYnVmZmVyKysgPSAnMCcgKyBkaWdpdHM7
Ci0gICAgZ290byBzdWJsdDEwMDsKLSAgfQotICBpZiAodSAgPCAgMTAwMDAwMCkgeyAgIC8vIDEs
MDAwLDAwMAotICAgIGlmICh1ID49IDEwMDAwMCkgZ290byBsdDFfMDAwXzAwMDsKLSAgICBkaWdp
dHMgPSB1IC8gMTAwMDA7ICAvLyAgICAxMCwwMDAKLSAgICAqYnVmZmVyKysgPSAnMCcgKyBkaWdp
dHM7Ci0gICAgZ290byBzdWJsdDEwXzAwMDsKLSAgfQotICBpZiAodSAgPCAgMTAwMDAwMDAwKSB7
ICAgLy8gMTAwLDAwMCwwMDAKLSAgICBpZiAodSA+PSAxMDAwMDAwMCkgZ290byBsdDEwMF8wMDBf
MDAwOwotICAgIGRpZ2l0cyA9IHUgLyAxMDAwMDAwOyAgLy8gICAxLDAwMCwwMDAKLSAgICAqYnVm
ZmVyKysgPSAnMCcgKyBkaWdpdHM7Ci0gICAgZ290byBzdWJsdDFfMDAwXzAwMDsKLSAgfQotICAv
LyB3ZSBhbHJlYWR5IGtub3cgdGhhdCB1IDwgMSwwMDAsMDAwLDAwMAotICBkaWdpdHMgPSB1IC8g
MTAwMDAwMDAwOyAgIC8vIDEwMCwwMDAsMDAwCi0gICpidWZmZXIrKyA9ICcwJyArIGRpZ2l0czsK
LSAgZ290byBzdWJsdDEwMF8wMDBfMDAwOwotfQotCi1jaGFyKiBGYXN0SW50MzJUb0J1ZmZlckxl
ZnQoaW50MzIgaSwgY2hhciogYnVmZmVyKSB7Ci0gIHVpbnQzMiB1ID0gaTsKLSAgaWYgKGkgPCAw
KSB7Ci0gICAgKmJ1ZmZlcisrID0gJy0nOwotICAgIHUgPSAtaTsKLSAgfQotICByZXR1cm4gRmFz
dFVJbnQzMlRvQnVmZmVyTGVmdCh1LCBidWZmZXIpOwotfQotCi1jaGFyKiBGYXN0VUludDY0VG9C
dWZmZXJMZWZ0KHVpbnQ2NCB1NjQsIGNoYXIqIGJ1ZmZlcikgewotICBpbnQgZGlnaXRzOwotICBj
b25zdCBjaGFyICpBU0NJSV9kaWdpdHMgPSBOVUxMOwotCi0gIHVpbnQzMiB1ID0gc3RhdGljX2Nh
c3Q8dWludDMyPih1NjQpOwotICBpZiAodSA9PSB1NjQpIHJldHVybiBGYXN0VUludDMyVG9CdWZm
ZXJMZWZ0KHUsIGJ1ZmZlcik7Ci0KLSAgdWludDY0IHRvcF8xMV9kaWdpdHMgPSB1NjQgLyAxMDAw
MDAwMDAwOwotICBidWZmZXIgPSBGYXN0VUludDY0VG9CdWZmZXJMZWZ0KHRvcF8xMV9kaWdpdHMs
IGJ1ZmZlcik7Ci0gIHUgPSB1NjQgLSAodG9wXzExX2RpZ2l0cyAqIDEwMDAwMDAwMDApOwotCi0g
IGRpZ2l0cyA9IHUgLyAxMDAwMDAwMDsgIC8vIDEwLDAwMCwwMDAKLSAgR09PR0xFX0RDSEVDS19M
VChkaWdpdHMsIDEwMCk7Ci0gIEFTQ0lJX2RpZ2l0cyA9IHR3b19BU0NJSV9kaWdpdHNbZGlnaXRz
XTsKLSAgYnVmZmVyWzBdID0gQVNDSUlfZGlnaXRzWzBdOwotICBidWZmZXJbMV0gPSBBU0NJSV9k
aWdpdHNbMV07Ci0gIGJ1ZmZlciArPSAyOwotICB1IC09IGRpZ2l0cyAqIDEwMDAwMDAwOyAgLy8g
MTAsMDAwLDAwMAotICBkaWdpdHMgPSB1IC8gMTAwMDAwOyAgLy8gMTAwLDAwMAotICBBU0NJSV9k
aWdpdHMgPSB0d29fQVNDSUlfZGlnaXRzW2RpZ2l0c107Ci0gIGJ1ZmZlclswXSA9IEFTQ0lJX2Rp
Z2l0c1swXTsKLSAgYnVmZmVyWzFdID0gQVNDSUlfZGlnaXRzWzFdOwotICBidWZmZXIgKz0gMjsK
LSAgdSAtPSBkaWdpdHMgKiAxMDAwMDA7ICAvLyAxMDAsMDAwCi0gIGRpZ2l0cyA9IHUgLyAxMDAw
OyAgLy8gMSwwMDAKLSAgQVNDSUlfZGlnaXRzID0gdHdvX0FTQ0lJX2RpZ2l0c1tkaWdpdHNdOwot
ICBidWZmZXJbMF0gPSBBU0NJSV9kaWdpdHNbMF07Ci0gIGJ1ZmZlclsxXSA9IEFTQ0lJX2RpZ2l0
c1sxXTsKLSAgYnVmZmVyICs9IDI7Ci0gIHUgLT0gZGlnaXRzICogMTAwMDsgIC8vIDEsMDAwCi0g
IGRpZ2l0cyA9IHUgLyAxMDsKLSAgQVNDSUlfZGlnaXRzID0gdHdvX0FTQ0lJX2RpZ2l0c1tkaWdp
dHNdOwotICBidWZmZXJbMF0gPSBBU0NJSV9kaWdpdHNbMF07Ci0gIGJ1ZmZlclsxXSA9IEFTQ0lJ
X2RpZ2l0c1sxXTsKLSAgYnVmZmVyICs9IDI7Ci0gIHUgLT0gZGlnaXRzICogMTA7Ci0gIGRpZ2l0
cyA9IHU7Ci0gICpidWZmZXIrKyA9ICcwJyArIGRpZ2l0czsKLSAgKmJ1ZmZlciA9IDA7Ci0gIHJl
dHVybiBidWZmZXI7Ci19Ci0KLWNoYXIqIEZhc3RJbnQ2NFRvQnVmZmVyTGVmdChpbnQ2NCBpLCBj
aGFyKiBidWZmZXIpIHsKLSAgdWludDY0IHUgPSBpOwotICBpZiAoaSA8IDApIHsKLSAgICAqYnVm
ZmVyKysgPSAnLSc7Ci0gICAgdSA9IC1pOwotICB9Ci0gIHJldHVybiBGYXN0VUludDY0VG9CdWZm
ZXJMZWZ0KHUsIGJ1ZmZlcik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNpbXBsZUl0b2Eo
KQotLy8gICAgRGVzY3JpcHRpb246IGNvbnZlcnRzIGFuIGludGVnZXIgdG8gYSBzdHJpbmcuCi0v
LwotLy8gICAgUmV0dXJuIHZhbHVlOiBzdHJpbmcKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RyaW5n
IFNpbXBsZUl0b2EoaW50IGkpIHsKLSAgY2hhciBidWZmZXJba0Zhc3RUb0J1ZmZlclNpemVdOwot
ICByZXR1cm4gKHNpemVvZihpKSA9PSA0KSA/Ci0gICAgRmFzdEludDMyVG9CdWZmZXIoaSwgYnVm
ZmVyKSA6Ci0gICAgRmFzdEludDY0VG9CdWZmZXIoaSwgYnVmZmVyKTsKLX0KLQotc3RyaW5nIFNp
bXBsZUl0b2EodW5zaWduZWQgaW50IGkpIHsKLSAgY2hhciBidWZmZXJba0Zhc3RUb0J1ZmZlclNp
emVdOwotICByZXR1cm4gc3RyaW5nKGJ1ZmZlciwgKHNpemVvZihpKSA9PSA0KSA/Ci0gICAgRmFz
dFVJbnQzMlRvQnVmZmVyTGVmdChpLCBidWZmZXIpIDoKLSAgICBGYXN0VUludDY0VG9CdWZmZXJM
ZWZ0KGksIGJ1ZmZlcikpOwotfQotCi1zdHJpbmcgU2ltcGxlSXRvYShsb25nIGkpIHsKLSAgY2hh
ciBidWZmZXJba0Zhc3RUb0J1ZmZlclNpemVdOwotICByZXR1cm4gKHNpemVvZihpKSA9PSA0KSA/
Ci0gICAgRmFzdEludDMyVG9CdWZmZXIoaSwgYnVmZmVyKSA6Ci0gICAgRmFzdEludDY0VG9CdWZm
ZXIoaSwgYnVmZmVyKTsKLX0KLQotc3RyaW5nIFNpbXBsZUl0b2EodW5zaWduZWQgbG9uZyBpKSB7
Ci0gIGNoYXIgYnVmZmVyW2tGYXN0VG9CdWZmZXJTaXplXTsKLSAgcmV0dXJuIHN0cmluZyhidWZm
ZXIsIChzaXplb2YoaSkgPT0gNCkgPwotICAgIEZhc3RVSW50MzJUb0J1ZmZlckxlZnQoaSwgYnVm
ZmVyKSA6Ci0gICAgRmFzdFVJbnQ2NFRvQnVmZmVyTGVmdChpLCBidWZmZXIpKTsKLX0KLQotc3Ry
aW5nIFNpbXBsZUl0b2EobG9uZyBsb25nIGkpIHsKLSAgY2hhciBidWZmZXJba0Zhc3RUb0J1ZmZl
clNpemVdOwotICByZXR1cm4gKHNpemVvZihpKSA9PSA0KSA/Ci0gICAgRmFzdEludDMyVG9CdWZm
ZXIoaSwgYnVmZmVyKSA6Ci0gICAgRmFzdEludDY0VG9CdWZmZXIoaSwgYnVmZmVyKTsKLX0KLQot
c3RyaW5nIFNpbXBsZUl0b2EodW5zaWduZWQgbG9uZyBsb25nIGkpIHsKLSAgY2hhciBidWZmZXJb
a0Zhc3RUb0J1ZmZlclNpemVdOwotICByZXR1cm4gc3RyaW5nKGJ1ZmZlciwgKHNpemVvZihpKSA9
PSA0KSA/Ci0gICAgRmFzdFVJbnQzMlRvQnVmZmVyTGVmdChpLCBidWZmZXIpIDoKLSAgICBGYXN0
VUludDY0VG9CdWZmZXJMZWZ0KGksIGJ1ZmZlcikpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBTaW1wbGVEdG9hKCkKLS8vIFNpbXBsZUZ0b2EoKQotLy8gRG91YmxlVG9CdWZmZXIoKQotLy8g
RmxvYXRUb0J1ZmZlcigpCi0vLyAgICBXZSB3YW50IHRvIHByaW50IHRoZSB2YWx1ZSB3aXRob3V0
IGxvc2luZyBwcmVjaXNpb24sIGJ1dCB3ZSBhbHNvIGRvCi0vLyAgICBub3Qgd2FudCB0byBwcmlu
dCBtb3JlIGRpZ2l0cyB0aGFuIG5lY2Vzc2FyeS4gIFRoaXMgdHVybnMgb3V0IHRvIGJlCi0vLyAg
ICB0cmlja2llciB0aGFuIGl0IHNvdW5kcy4gIE51bWJlcnMgbGlrZSAwLjIgY2Fubm90IGJlIHJl
cHJlc2VudGVkCi0vLyAgICBleGFjdGx5IGluIGJpbmFyeS4gIElmIHdlIHByaW50IDAuMiB3aXRo
IGEgdmVyeSBsYXJnZSBwcmVjaXNpb24sCi0vLyAgICBlLmcuICIlLjUwZyIsIHdlIGdldCAiMC4y
MDAwMDAwMDAwMDAwMDAwMTExMDIyMzAyNDYyNTE1NjU0MDQyMzYzMTY3Ii4KLS8vICAgIE9uIHRo
ZSBvdGhlciBoYW5kLCBpZiB3ZSBzZXQgdGhlIHByZWNpc2lvbiB0b28gbG93LCB3ZSBsb3NlCi0v
LyAgICBzaWduaWZpY2FudCBkaWdpdHMgd2hlbiBwcmludGluZyBudW1iZXJzIHRoYXQgYWN0dWFs
bHkgbmVlZCB0aGVtLgotLy8gICAgSXQgdHVybnMgb3V0IHRoZXJlIGlzIG5vIHByZWNpc2lvbiB2
YWx1ZSB0aGF0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nCi0vLyAgICBmb3IgYWxsIG51bWJlcnMuCi0v
LwotLy8gICAgT3VyIHN0cmF0ZWd5IGlzIHRvIGZpcnN0IHRyeSBwcmludGluZyB3aXRoIGEgcHJl
Y2lzaW9uIHRoYXQgaXMgbmV2ZXIKLS8vICAgIG92ZXItcHJlY2lzZSwgdGhlbiBwYXJzZSB0aGUg
cmVzdWx0IHdpdGggc3RydG9kKCkgdG8gc2VlIGlmIGl0Ci0vLyAgICBtYXRjaGVzLiAgSWYgbm90
LCB3ZSBwcmludCBhZ2FpbiB3aXRoIGEgcHJlY2lzaW9uIHRoYXQgd2lsbCBhbHdheXMKLS8vICAg
IGdpdmUgYSBwcmVjaXNlIHJlc3VsdCwgYnV0IG1heSB1c2UgbW9yZSBkaWdpdHMgdGhhbiBuZWNl
c3NhcnkuCi0vLwotLy8gICAgQW4gYXJndWFibHkgYmV0dGVyIHN0cmF0ZWd5IHdvdWxkIGJlIHRv
IHVzZSB0aGUgYWxnb3JpdGhtIGRlc2NyaWJlZAotLy8gICAgaW4gIkhvdyB0byBQcmludCBGbG9h
dGluZy1Qb2ludCBOdW1iZXJzIEFjY3VyYXRlbHkiIGJ5IFN0ZWVsZSAmCi0vLyAgICBXaGl0ZSwg
ZS5nLiBhcyBpbXBsZW1lbnRlZCBieSBEYXZpZCBNLiBHYXkncyBkdG9hKCkuICBJdCB0dXJucyBv
dXQsCi0vLyAgICBob3dldmVyLCB0aGF0IHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gaXMg
YWJvdXQgYXMgZmFzdCBhcwotLy8gICAgRE1HJ3MgY29kZS4gIEZ1cnRoZXJtb3JlLCBETUcncyBj
b2RlIGxvY2tzIG11dGV4ZXMsIHdoaWNoIG1lYW5zIGl0Ci0vLyAgICB3aWxsIG5vdCBzY2FsZSB3
ZWxsIG9uIG11bHRpLWNvcmUgbWFjaGluZXMuICBETUcncyBjb2RlIGlzIHNsaWdodGx5Ci0vLyAg
ICBtb3JlIGFjY3VyYXRlIChpbiB0aGF0IGl0IHdpbGwgbmV2ZXIgdXNlIG1vcmUgZGlnaXRzIHRo
YW4KLS8vICAgIG5lY2Vzc2FyeSksIGJ1dCB0aGlzIGlzIHByb2JhYmx5IGlycmVsZXZhbnQgZm9y
IG1vc3QgdXNlcnMuCi0vLwotLy8gICAgUm9iIFBpa2UgYW5kIEtlbiBUaG9tcHNvbiBhbHNvIGhh
dmUgYW4gaW1wbGVtZW50YXRpb24gb2YgZHRvYSgpIGluCi0vLyAgICB0aGlyZF9wYXJ0eS9mbXQv
Zmx0Zm10LmNjLiAgVGhlaXIgaW1wbGVtZW50YXRpb24gaXMgc2ltaWxhciB0byB0aGlzCi0vLyAg
ICBvbmUgaW4gdGhhdCBpdCBtYWtlcyBndWVzc2VzIGFuZCB0aGVuIHVzZXMgc3RydG9kKCkgdG8g
Y2hlY2sgdGhlbS4KLS8vICAgIFRoZWlyIGltcGxlbWVudGF0aW9uIGlzIGZhc3RlciBiZWNhdXNl
IHRoZXkgdXNlIHRoZWlyIG93biBjb2RlIHRvCi0vLyAgICBnZW5lcmF0ZSB0aGUgZGlnaXRzIGlu
IHRoZSBmaXJzdCBwbGFjZSByYXRoZXIgdGhhbiB1c2Ugc25wcmludGYoKSwKLS8vICAgIHRodXMg
YXZvaWRpbmcgZm9ybWF0IHN0cmluZyBwYXJzaW5nIG92ZXJoZWFkLiAgSG93ZXZlciwgdGhpcyBt
YWtlcwotLy8gICAgaXQgY29uc2lkZXJhYmx5IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGUgZm9s
bG93aW5nIGltcGxlbWVudGF0aW9uLAotLy8gICAgYW5kIGl0IGlzIGVtYmVkZGVkIGluIGEgbGFy
Z2VyIGxpYnJhcnkuICBJZiBzcGVlZCB0dXJucyBvdXQgdG8gYmUKLS8vICAgIGFuIGlzc3VlLCB3
ZSBjb3VsZCByZS1pbXBsZW1lbnQgdGhpcyBpbiB0ZXJtcyBvZiB0aGVpcgotLy8gICAgaW1wbGVt
ZW50YXRpb24uCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0cmluZyBTaW1wbGVEdG9hKGRvdWJsZSB2
YWx1ZSkgewotICBjaGFyIGJ1ZmZlcltrRG91YmxlVG9CdWZmZXJTaXplXTsKLSAgcmV0dXJuIERv
dWJsZVRvQnVmZmVyKHZhbHVlLCBidWZmZXIpOwotfQotCi1zdHJpbmcgU2ltcGxlRnRvYShmbG9h
dCB2YWx1ZSkgewotICBjaGFyIGJ1ZmZlcltrRmxvYXRUb0J1ZmZlclNpemVdOwotICByZXR1cm4g
RmxvYXRUb0J1ZmZlcih2YWx1ZSwgYnVmZmVyKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIElz
VmFsaWRGbG9hdENoYXIoY2hhciBjKSB7Ci0gIHJldHVybiAoJzAnIDw9IGMgJiYgYyA8PSAnOScp
IHx8Ci0gICAgICAgICBjID09ICdlJyB8fCBjID09ICdFJyB8fAotICAgICAgICAgYyA9PSAnKycg
fHwgYyA9PSAnLSc7Ci19Ci0KLXZvaWQgRGVsb2NhbGl6ZVJhZGl4KGNoYXIqIGJ1ZmZlcikgewot
ICAvLyBGYXN0IGNoZWNrOiAgaWYgdGhlIGJ1ZmZlciBoYXMgYSBub3JtYWwgZGVjaW1hbCBwb2lu
dCwgYXNzdW1lIG5vCi0gIC8vIHRyYW5zbGF0aW9uIGlzIG5lZWRlZC4KLSAgaWYgKHN0cmNocihi
dWZmZXIsICcuJykgIT0gTlVMTCkgcmV0dXJuOwotCi0gIC8vIEZpbmQgdGhlIGZpcnN0IHVua25v
d24gY2hhcmFjdGVyLgotICB3aGlsZSAoSXNWYWxpZEZsb2F0Q2hhcigqYnVmZmVyKSkgKytidWZm
ZXI7Ci0KLSAgaWYgKCpidWZmZXIgPT0gJ1wwJykgewotICAgIC8vIE5vIHJhZGl4IGNoYXJhY3Rl
ciBmb3VuZC4KLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBXZSBhcmUgbm93IHBvaW50aW5nIGF0
IHRoZSBsb2NhbGUtc3BlY2lmaWMgcmFkaXggY2hhcmFjdGVyLiAgUmVwbGFjZSBpdAotICAvLyB3
aXRoICcuJy4KLSAgKmJ1ZmZlciA9ICcuJzsKLSAgKytidWZmZXI7Ci0KLSAgaWYgKCFJc1ZhbGlk
RmxvYXRDaGFyKCpidWZmZXIpICYmICpidWZmZXIgIT0gJ1wwJykgewotICAgIC8vIEl0IGFwcGVh
cnMgdGhlIHJhZGl4IHdhcyBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAgV2UgbmVlZCB0byByZW1v
dmUgdGhlCi0gICAgLy8gZXh0cmEgYnl0ZXMuCi0gICAgY2hhciogdGFyZ2V0ID0gYnVmZmVyOwot
ICAgIGRvIHsgKytidWZmZXI7IH0gd2hpbGUgKCFJc1ZhbGlkRmxvYXRDaGFyKCpidWZmZXIpICYm
ICpidWZmZXIgIT0gJ1wwJyk7Ci0gICAgbWVtbW92ZSh0YXJnZXQsIGJ1ZmZlciwgc3RybGVuKGJ1
ZmZlcikgKyAxKTsKLSAgfQotfQotCi1jaGFyKiBEb3VibGVUb0J1ZmZlcihkb3VibGUgdmFsdWUs
IGNoYXIqIGJ1ZmZlcikgewotICAvLyBEQkxfRElHIGlzIDE1IGZvciBJRUVFLTc1NCBkb3VibGVz
LCB3aGljaCBhcmUgdXNlZCBvbiBhbG1vc3QgYWxsCi0gIC8vIHBsYXRmb3JtcyB0aGVzZSBkYXlz
LiAgSnVzdCBpbiBjYXNlIHNvbWUgc3lzdGVtIGV4aXN0cyB3aGVyZSBEQkxfRElHCi0gIC8vIGlz
IHNpZ25pZmljYW50bHkgbGFyZ2VyIC0tIGFuZCByaXNrcyBvdmVyZmxvd2luZyBvdXIgYnVmZmVy
IC0tIHdlIGhhdmUKLSAgLy8gdGhpcyBhc3NlcnQuCi0gIEdPT0dMRV9DT01QSUxFX0FTU0VSVChE
QkxfRElHIDwgMjAsIERCTF9ESUdfaXNfdG9vX2JpZyk7Ci0KLSAgaWYgKHZhbHVlID09IG51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpIHsKLSAgICBzdHJjcHkoYnVmZmVyLCAiaW5m
Iik7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLSAgfSBlbHNlIGlmICh2YWx1ZSA9PSAtbnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewotICAgIHN0cmNweShidWZmZXIsICItaW5mIik7
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLSAgfSBlbHNlIGlmIChNYXRoTGltaXRzPGRvdWJsZT46Oklz
TmFOKHZhbHVlKSkgewotICAgIHN0cmNweShidWZmZXIsICJuYW4iKTsKLSAgICByZXR1cm4gYnVm
ZmVyOwotICB9Ci0KLSAgaW50IHNucHJpbnRmX3Jlc3VsdCA9Ci0gICAgc25wcmludGYoYnVmZmVy
LCBrRG91YmxlVG9CdWZmZXJTaXplLCAiJS4qZyIsIERCTF9ESUcsIHZhbHVlKTsKLQotICAvLyBU
aGUgc25wcmludGYgc2hvdWxkIG5ldmVyIG92ZXJmbG93IGJlY2F1c2UgdGhlIGJ1ZmZlciBpcyBz
aWduaWZpY2FudGx5Ci0gIC8vIGxhcmdlciB0aGFuIHRoZSBwcmVjaXNpb24gd2UgYXNrZWQgZm9y
LgotICBHT09HTEVfRENIRUNLKHNucHJpbnRmX3Jlc3VsdCA+IDAgJiYgc25wcmludGZfcmVzdWx0
IDwga0RvdWJsZVRvQnVmZmVyU2l6ZSk7Ci0KLSAgLy8gV2UgbmVlZCB0byBtYWtlIHBhcnNlZF92
YWx1ZSB2b2xhdGlsZSBpbiBvcmRlciB0byBmb3JjZSB0aGUgY29tcGlsZXIgdG8KLSAgLy8gd3Jp
dGUgaXQgb3V0IHRvIHRoZSBzdGFjay4gIE90aGVyd2lzZSwgaXQgbWF5IGtlZXAgdGhlIHZhbHVl
IGluIGEKLSAgLy8gcmVnaXN0ZXIsIGFuZCBpZiBpdCBkb2VzIHRoYXQsIGl0IG1heSBrZWVwIGl0
IGFzIGEgbG9uZyBkb3VibGUgaW5zdGVhZAotICAvLyBvZiBhIGRvdWJsZS4gIFRoaXMgbG9uZyBk
b3VibGUgbWF5IGhhdmUgZXh0cmEgYml0cyB0aGF0IG1ha2UgaXQgY29tcGFyZQotICAvLyB1bmVx
dWFsIHRvICJ2YWx1ZSIgZXZlbiB0aG91Z2ggaXQgd291bGQgYmUgZXhhY3RseSBlcXVhbCBpZiBp
dCB3ZXJlCi0gIC8vIHRydW5jYXRlZCB0byBhIGRvdWJsZS4KLSAgdm9sYXRpbGUgZG91YmxlIHBh
cnNlZF92YWx1ZSA9IHN0cnRvZChidWZmZXIsIE5VTEwpOwotICBpZiAocGFyc2VkX3ZhbHVlICE9
IHZhbHVlKSB7Ci0gICAgaW50IHNucHJpbnRmX3Jlc3VsdCA9Ci0gICAgICBzbnByaW50ZihidWZm
ZXIsIGtEb3VibGVUb0J1ZmZlclNpemUsICIlLipnIiwgREJMX0RJRysyLCB2YWx1ZSk7Ci0KLSAg
ICAvLyBTaG91bGQgbmV2ZXIgb3ZlcmZsb3c7IHNlZSBhYm92ZS4KLSAgICBHT09HTEVfRENIRUNL
KHNucHJpbnRmX3Jlc3VsdCA+IDAgJiYgc25wcmludGZfcmVzdWx0IDwga0RvdWJsZVRvQnVmZmVy
U2l6ZSk7Ci0gIH0KLQotICBEZWxvY2FsaXplUmFkaXgoYnVmZmVyKTsKLSAgcmV0dXJuIGJ1ZmZl
cjsKLX0KLQotc3RhdGljIGludCBtZW1jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFy
ICpzMiwgc2l6ZV90IGxlbikgewotICBjb25zdCB1bnNpZ25lZCBjaGFyICp1czEgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oczEpOwotICBjb25zdCB1bnNpZ25lZCBj
aGFyICp1czIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oczIpOwot
Ci0gIGZvciAoIGludCBpID0gMDsgaSA8IGxlbjsgaSsrICkgewotICAgIGNvbnN0IGludCBkaWZm
ID0KLSAgICAgIHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYXNj
aWlfdG9sb3dlcih1czFbaV0pKSkgLQotICAgICAgc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihhc2NpaV90b2xvd2VyKHVzMltpXSkpKTsKLSAgICBpZiAoZGlmZiAh
PSAwKSByZXR1cm4gZGlmZjsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotaW5saW5lIGJvb2wgQ2Fz
ZUVxdWFsKFN0cmluZ1BpZWNlIHMxLCBTdHJpbmdQaWVjZSBzMikgewotICBpZiAoczEuc2l6ZSgp
ICE9IHMyLnNpemUoKSkgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gbWVtY2FzZWNtcChzMS5kYXRh
KCksIHMyLmRhdGEoKSwgczEuc2l6ZSgpKSA9PSAwOwotfQotCi1ib29sIHNhZmVfc3RydG9iKFN0
cmluZ1BpZWNlIHN0ciwgYm9vbCogdmFsdWUpIHsKLSAgR09PR0xFX0NIRUNLKHZhbHVlICE9IE5V
TEwpIDw8ICJOVUxMIG91dHB1dCBib29sZWFuIGdpdmVuLiI7Ci0gIGlmIChDYXNlRXF1YWwoc3Ry
LCAidHJ1ZSIpIHx8IENhc2VFcXVhbChzdHIsICJ0IikgfHwKLSAgICAgIENhc2VFcXVhbChzdHIs
ICJ5ZXMiKSB8fCBDYXNlRXF1YWwoc3RyLCAieSIpIHx8Ci0gICAgICBDYXNlRXF1YWwoc3RyLCAi
MSIpKSB7Ci0gICAgKnZhbHVlID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpZiAo
Q2FzZUVxdWFsKHN0ciwgImZhbHNlIikgfHwgQ2FzZUVxdWFsKHN0ciwgImYiKSB8fAotICAgICAg
Q2FzZUVxdWFsKHN0ciwgIm5vIikgfHwgQ2FzZUVxdWFsKHN0ciwgIm4iKSB8fAotICAgICAgQ2Fz
ZUVxdWFsKHN0ciwgIjAiKSkgewotICAgICp2YWx1ZSA9IGZhbHNlOwotICAgIHJldHVybiB0cnVl
OwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBzYWZlX3N0cnRvZihjb25zdCBjaGFy
KiBzdHIsIGZsb2F0KiB2YWx1ZSkgewotICBjaGFyKiBlbmRwdHI7Ci0gIGVycm5vID0gMDsgIC8v
IGVycm5vIG9ubHkgZ2V0cyBzZXQgb24gZXJyb3JzCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRl
ZmluZWQgKF9faHB1eCkgIC8vIGhhcyBubyBzdHJ0b2YoKQotICAqdmFsdWUgPSBzdHJ0b2Qoc3Ry
LCAmZW5kcHRyKTsKLSNlbHNlCi0gICp2YWx1ZSA9IHN0cnRvZihzdHIsICZlbmRwdHIpOwotI2Vu
ZGlmCi0gIHJldHVybiAqc3RyICE9IDAgJiYgKmVuZHB0ciA9PSAwICYmIGVycm5vID09IDA7Ci19
Ci0KLWJvb2wgc2FmZV9zdHJ0b2QoY29uc3QgY2hhciogc3RyLCBkb3VibGUqIHZhbHVlKSB7Ci0g
IGNoYXIqIGVuZHB0cjsKLSAgKnZhbHVlID0gc3RydG9kKHN0ciwgJmVuZHB0cik7Ci0gIGlmIChl
bmRwdHIgIT0gc3RyKSB7Ci0gICAgd2hpbGUgKGFzY2lpX2lzc3BhY2UoKmVuZHB0cikpICsrZW5k
cHRyOwotICB9Ci0gIC8vIElnbm9yZSByYW5nZSBlcnJvcnMgZnJvbSBzdHJ0b2QuICBUaGUgdmFs
dWVzIGl0Ci0gIC8vIHJldHVybnMgb24gdW5kZXJmbG93IGFuZCBvdmVyZmxvdyBhcmUgdGhlIHJp
Z2h0Ci0gIC8vIGZhbGxiYWNrIGluIGEgcm9idXN0IHNldHRpbmcuCi0gIHJldHVybiAqc3RyICE9
ICdcMCcgJiYgKmVuZHB0ciA9PSAnXDAnOwotfQotCi1ib29sIHNhZmVfc3RydG8zMihjb25zdCBz
dHJpbmcmIHN0ciwgaW50MzIqIHZhbHVlKSB7Ci0gIHJldHVybiBzYWZlX2ludF9pbnRlcm5hbChz
dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBzYWZlX3N0cnRvdTMyKGNvbnN0IHN0cmluZyYgc3RyLCB1
aW50MzIqIHZhbHVlKSB7Ci0gIHJldHVybiBzYWZlX3VpbnRfaW50ZXJuYWwoc3RyLCB2YWx1ZSk7
Ci19Ci0KLWJvb2wgc2FmZV9zdHJ0bzY0KGNvbnN0IHN0cmluZyYgc3RyLCBpbnQ2NCogdmFsdWUp
IHsKLSAgcmV0dXJuIHNhZmVfaW50X2ludGVybmFsKHN0ciwgdmFsdWUpOwotfQotCi1ib29sIHNh
ZmVfc3RydG91NjQoY29uc3Qgc3RyaW5nJiBzdHIsIHVpbnQ2NCogdmFsdWUpIHsKLSAgcmV0dXJu
IHNhZmVfdWludF9pbnRlcm5hbChzdHIsIHZhbHVlKTsKLX0KLQotY2hhciogRmxvYXRUb0J1ZmZl
cihmbG9hdCB2YWx1ZSwgY2hhciogYnVmZmVyKSB7Ci0gIC8vIEZMVF9ESUcgaXMgNiBmb3IgSUVF
RS03NTQgZmxvYXRzLCB3aGljaCBhcmUgdXNlZCBvbiBhbG1vc3QgYWxsCi0gIC8vIHBsYXRmb3Jt
cyB0aGVzZSBkYXlzLiAgSnVzdCBpbiBjYXNlIHNvbWUgc3lzdGVtIGV4aXN0cyB3aGVyZSBGTFRf
RElHCi0gIC8vIGlzIHNpZ25pZmljYW50bHkgbGFyZ2VyIC0tIGFuZCByaXNrcyBvdmVyZmxvd2lu
ZyBvdXIgYnVmZmVyIC0tIHdlIGhhdmUKLSAgLy8gdGhpcyBhc3NlcnQuCi0gIEdPT0dMRV9DT01Q
SUxFX0FTU0VSVChGTFRfRElHIDwgMTAsIEZMVF9ESUdfaXNfdG9vX2JpZyk7Ci0KLSAgaWYgKHZh
bHVlID09IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpIHsKLSAgICBzdHJjcHko
YnVmZmVyLCAiaW5mIik7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLSAgfSBlbHNlIGlmICh2YWx1ZSA9
PSAtbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewotICAgIHN0cmNweShidWZm
ZXIsICItaW5mIik7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLSAgfSBlbHNlIGlmIChNYXRoTGltaXRz
PGZsb2F0Pjo6SXNOYU4odmFsdWUpKSB7Ci0gICAgc3RyY3B5KGJ1ZmZlciwgIm5hbiIpOwotICAg
IHJldHVybiBidWZmZXI7Ci0gIH0KLQotICBpbnQgc25wcmludGZfcmVzdWx0ID0KLSAgICBzbnBy
aW50ZihidWZmZXIsIGtGbG9hdFRvQnVmZmVyU2l6ZSwgIiUuKmciLCBGTFRfRElHLCB2YWx1ZSk7
Ci0KLSAgLy8gVGhlIHNucHJpbnRmIHNob3VsZCBuZXZlciBvdmVyZmxvdyBiZWNhdXNlIHRoZSBi
dWZmZXIgaXMgc2lnbmlmaWNhbnRseQotICAvLyBsYXJnZXIgdGhhbiB0aGUgcHJlY2lzaW9uIHdl
IGFza2VkIGZvci4KLSAgR09PR0xFX0RDSEVDSyhzbnByaW50Zl9yZXN1bHQgPiAwICYmIHNucHJp
bnRmX3Jlc3VsdCA8IGtGbG9hdFRvQnVmZmVyU2l6ZSk7Ci0KLSAgZmxvYXQgcGFyc2VkX3ZhbHVl
OwotICBpZiAoIXNhZmVfc3RydG9mKGJ1ZmZlciwgJnBhcnNlZF92YWx1ZSkgfHwgcGFyc2VkX3Zh
bHVlICE9IHZhbHVlKSB7Ci0gICAgaW50IHNucHJpbnRmX3Jlc3VsdCA9Ci0gICAgICBzbnByaW50
ZihidWZmZXIsIGtGbG9hdFRvQnVmZmVyU2l6ZSwgIiUuKmciLCBGTFRfRElHKzIsIHZhbHVlKTsK
LQotICAgIC8vIFNob3VsZCBuZXZlciBvdmVyZmxvdzsgc2VlIGFib3ZlLgotICAgIEdPT0dMRV9E
Q0hFQ0soc25wcmludGZfcmVzdWx0ID4gMCAmJiBzbnByaW50Zl9yZXN1bHQgPCBrRmxvYXRUb0J1
ZmZlclNpemUpOwotICB9Ci0KLSAgRGVsb2NhbGl6ZVJhZGl4KGJ1ZmZlcik7Ci0gIHJldHVybiBi
dWZmZXI7Ci19Ci0KLW5hbWVzcGFjZSBzdHJpbmdzIHsKLQotQWxwaGFOdW06OkFscGhhTnVtKHN0
cmluZ3M6OkhleCBoZXgpIHsKLSAgY2hhciAqY29uc3QgZW5kID0gJmRpZ2l0c1trRmFzdFRvQnVm
ZmVyU2l6ZV07Ci0gIGNoYXIgKndyaXRlciA9IGVuZDsKLSAgdWludDY0IHZhbHVlID0gaGV4LnZh
bHVlOwotICB1aW50NjQgd2lkdGggPSBoZXguc3BlYzsKLSAgLy8gV2UgYWNjb21wbGlzaCBtaW5p
bXVtIHdpZHRoIGJ5IE9SJ2luZyBpbiAweDEwMDAwIHRvIHRoZSB1c2VyJ3MgdmFsdWUsCi0gIC8v
IHdoZXJlIDB4MTAwMDAgaXMgdGhlIHNtYWxsZXN0IGhleCBudW1iZXIgdGhhdCBpcyBhcyB3aWRl
IGFzIHRoZSB1c2VyCi0gIC8vIGFza2VkIGZvci4KLSAgdWludDY0IG1hc2sgPSAoKHN0YXRpY19j
YXN0PHVpbnQ2ND4oMSkgPDwgKHdpZHRoIC0gMSkgKiA0KSkgfCB2YWx1ZTsKLSAgc3RhdGljIGNv
bnN0IGNoYXIgaGV4ZGlnaXRzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0gIGRvIHsKLSAgICAq
LS13cml0ZXIgPSBoZXhkaWdpdHNbdmFsdWUgJiAweEZdOwotICAgIHZhbHVlID4+PSA0OwotICAg
IG1hc2sgPj49IDQ7Ci0gIH0gd2hpbGUgKG1hc2sgIT0gMCk7Ci0gIHBpZWNlX2RhdGFfID0gd3Jp
dGVyOwotICBwaWVjZV9zaXplXyA9IGVuZCAtIHdyaXRlcjsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
IHN0cmluZ3MKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU3RyQ2F0KCkKLS8vICAgIFRoaXMgbWVy
Z2VzIHRoZSBnaXZlbiBzdHJpbmdzIG9yIGludGVnZXJzLCB3aXRoIG5vIGRlbGltaXRlci4gIFRo
aXMKLS8vICAgIGlzIGRlc2lnbmVkIHRvIGJlIHRoZSBmYXN0ZXN0IHBvc3NpYmxlIHdheSB0byBj
b25zdHJ1Y3QgYSBzdHJpbmcgb3V0Ci0vLyAgICBvZiBhIG1peCBvZiByYXcgQyBzdHJpbmdzLCBD
Kysgc3RyaW5ncywgYW5kIGludGVnZXIgdmFsdWVzLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBB
cHBlbmQgaXMgbWVyZWx5IGEgdmVyc2lvbiBvZiBtZW1jcHkgdGhhdCByZXR1cm5zIHRoZSBhZGRy
ZXNzIG9mIHRoZSBieXRlCi0vLyBhZnRlciB0aGUgYXJlYSBqdXN0IG92ZXJ3cml0dGVuLiAgSXQg
Y29tZXMgaW4gbXVsdGlwbGUgZmxhdm9ycyB0byBtaW5pbWl6ZQotLy8gY2FsbCBvdmVyaGVhZC4K
LXN0YXRpYyBjaGFyICpBcHBlbmQxKGNoYXIgKm91dCwgY29uc3QgQWxwaGFOdW0gJngpIHsKLSAg
bWVtY3B5KG91dCwgeC5kYXRhKCksIHguc2l6ZSgpKTsKLSAgcmV0dXJuIG91dCArIHguc2l6ZSgp
OwotfQotCi1zdGF0aWMgY2hhciAqQXBwZW5kMihjaGFyICpvdXQsIGNvbnN0IEFscGhhTnVtICZ4
MSwgY29uc3QgQWxwaGFOdW0gJngyKSB7Ci0gIG1lbWNweShvdXQsIHgxLmRhdGEoKSwgeDEuc2l6
ZSgpKTsKLSAgb3V0ICs9IHgxLnNpemUoKTsKLQotICBtZW1jcHkob3V0LCB4Mi5kYXRhKCksIHgy
LnNpemUoKSk7Ci0gIHJldHVybiBvdXQgKyB4Mi5zaXplKCk7Ci19Ci0KLXN0YXRpYyBjaGFyICpB
cHBlbmQ0KGNoYXIgKm91dCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFscGhhTnVtICZ4
MSwgY29uc3QgQWxwaGFOdW0gJngyLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxwaGFO
dW0gJngzLCBjb25zdCBBbHBoYU51bSAmeDQpIHsKLSAgbWVtY3B5KG91dCwgeDEuZGF0YSgpLCB4
MS5zaXplKCkpOwotICBvdXQgKz0geDEuc2l6ZSgpOwotCi0gIG1lbWNweShvdXQsIHgyLmRhdGEo
KSwgeDIuc2l6ZSgpKTsKLSAgb3V0ICs9IHgyLnNpemUoKTsKLQotICBtZW1jcHkob3V0LCB4My5k
YXRhKCksIHgzLnNpemUoKSk7Ci0gIG91dCArPSB4My5zaXplKCk7Ci0KLSAgbWVtY3B5KG91dCwg
eDQuZGF0YSgpLCB4NC5zaXplKCkpOwotICByZXR1cm4gb3V0ICsgeDQuc2l6ZSgpOwotfQotCi1z
dHJpbmcgU3RyQ2F0KGNvbnN0IEFscGhhTnVtICZhLCBjb25zdCBBbHBoYU51bSAmYikgewotICBz
dHJpbmcgcmVzdWx0OwotICByZXN1bHQucmVzaXplKGEuc2l6ZSgpICsgYi5zaXplKCkpOwotICBj
aGFyICpjb25zdCBiZWdpbiA9ICYqcmVzdWx0LmJlZ2luKCk7Ci0gIGNoYXIgKm91dCA9IEFwcGVu
ZDIoYmVnaW4sIGEsIGIpOwotICBHT09HTEVfRENIRUNLX0VRKG91dCwgYmVnaW4gKyByZXN1bHQu
c2l6ZSgpKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RyaW5nIFN0ckNhdChjb25zdCBBbHBo
YU51bSAmYSwgY29uc3QgQWxwaGFOdW0gJmIsIGNvbnN0IEFscGhhTnVtICZjKSB7Ci0gIHN0cmlu
ZyByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNpemUoYS5zaXplKCkgKyBiLnNpemUoKSArIGMuc2l6ZSgp
KTsKLSAgY2hhciAqY29uc3QgYmVnaW4gPSAmKnJlc3VsdC5iZWdpbigpOwotICBjaGFyICpvdXQg
PSBBcHBlbmQyKGJlZ2luLCBhLCBiKTsKLSAgb3V0ID0gQXBwZW5kMShvdXQsIGMpOwotICBHT09H
TEVfRENIRUNLX0VRKG91dCwgYmVnaW4gKyByZXN1bHQuc2l6ZSgpKTsKLSAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotc3RyaW5nIFN0ckNhdChjb25zdCBBbHBoYU51bSAmYSwgY29uc3QgQWxwaGFOdW0g
JmIsIGNvbnN0IEFscGhhTnVtICZjLAotICAgICAgICAgICAgICBjb25zdCBBbHBoYU51bSAmZCkg
ewotICBzdHJpbmcgcmVzdWx0OwotICByZXN1bHQucmVzaXplKGEuc2l6ZSgpICsgYi5zaXplKCkg
KyBjLnNpemUoKSArIGQuc2l6ZSgpKTsKLSAgY2hhciAqY29uc3QgYmVnaW4gPSAmKnJlc3VsdC5i
ZWdpbigpOwotICBjaGFyICpvdXQgPSBBcHBlbmQ0KGJlZ2luLCBhLCBiLCBjLCBkKTsKLSAgR09P
R0xFX0RDSEVDS19FUShvdXQsIGJlZ2luICsgcmVzdWx0LnNpemUoKSk7Ci0gIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0cmluZyBTdHJDYXQoY29uc3QgQWxwaGFOdW0gJmEsIGNvbnN0IEFscGhhTnVt
ICZiLCBjb25zdCBBbHBoYU51bSAmYywKLSAgICAgICAgICAgICAgY29uc3QgQWxwaGFOdW0gJmQs
IGNvbnN0IEFscGhhTnVtICZlKSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNpemUo
YS5zaXplKCkgKyBiLnNpemUoKSArIGMuc2l6ZSgpICsgZC5zaXplKCkgKyBlLnNpemUoKSk7Ci0g
IGNoYXIgKmNvbnN0IGJlZ2luID0gJipyZXN1bHQuYmVnaW4oKTsKLSAgY2hhciAqb3V0ID0gQXBw
ZW5kNChiZWdpbiwgYSwgYiwgYywgZCk7Ci0gIG91dCA9IEFwcGVuZDEob3V0LCBlKTsKLSAgR09P
R0xFX0RDSEVDS19FUShvdXQsIGJlZ2luICsgcmVzdWx0LnNpemUoKSk7Ci0gIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0cmluZyBTdHJDYXQoY29uc3QgQWxwaGFOdW0gJmEsIGNvbnN0IEFscGhhTnVt
ICZiLCBjb25zdCBBbHBoYU51bSAmYywKLSAgICAgICAgICAgICAgY29uc3QgQWxwaGFOdW0gJmQs
IGNvbnN0IEFscGhhTnVtICZlLCBjb25zdCBBbHBoYU51bSAmZikgewotICBzdHJpbmcgcmVzdWx0
OwotICByZXN1bHQucmVzaXplKGEuc2l6ZSgpICsgYi5zaXplKCkgKyBjLnNpemUoKSArIGQuc2l6
ZSgpICsgZS5zaXplKCkgKwotICAgICAgICAgICAgICAgIGYuc2l6ZSgpKTsKLSAgY2hhciAqY29u
c3QgYmVnaW4gPSAmKnJlc3VsdC5iZWdpbigpOwotICBjaGFyICpvdXQgPSBBcHBlbmQ0KGJlZ2lu
LCBhLCBiLCBjLCBkKTsKLSAgb3V0ID0gQXBwZW5kMihvdXQsIGUsIGYpOwotICBHT09HTEVfRENI
RUNLX0VRKG91dCwgYmVnaW4gKyByZXN1bHQuc2l6ZSgpKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RyaW5nIFN0ckNhdChjb25zdCBBbHBoYU51bSAmYSwgY29uc3QgQWxwaGFOdW0gJmIsIGNv
bnN0IEFscGhhTnVtICZjLAotICAgICAgICAgICAgICBjb25zdCBBbHBoYU51bSAmZCwgY29uc3Qg
QWxwaGFOdW0gJmUsIGNvbnN0IEFscGhhTnVtICZmLAotICAgICAgICAgICAgICBjb25zdCBBbHBo
YU51bSAmZykgewotICBzdHJpbmcgcmVzdWx0OwotICByZXN1bHQucmVzaXplKGEuc2l6ZSgpICsg
Yi5zaXplKCkgKyBjLnNpemUoKSArIGQuc2l6ZSgpICsgZS5zaXplKCkgKwotICAgICAgICAgICAg
ICAgIGYuc2l6ZSgpICsgZy5zaXplKCkpOwotICBjaGFyICpjb25zdCBiZWdpbiA9ICYqcmVzdWx0
LmJlZ2luKCk7Ci0gIGNoYXIgKm91dCA9IEFwcGVuZDQoYmVnaW4sIGEsIGIsIGMsIGQpOwotICBv
dXQgPSBBcHBlbmQyKG91dCwgZSwgZik7Ci0gIG91dCA9IEFwcGVuZDEob3V0LCBnKTsKLSAgR09P
R0xFX0RDSEVDS19FUShvdXQsIGJlZ2luICsgcmVzdWx0LnNpemUoKSk7Ci0gIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0cmluZyBTdHJDYXQoY29uc3QgQWxwaGFOdW0gJmEsIGNvbnN0IEFscGhhTnVt
ICZiLCBjb25zdCBBbHBoYU51bSAmYywKLSAgICAgICAgICAgICAgY29uc3QgQWxwaGFOdW0gJmQs
IGNvbnN0IEFscGhhTnVtICZlLCBjb25zdCBBbHBoYU51bSAmZiwKLSAgICAgICAgICAgICAgY29u
c3QgQWxwaGFOdW0gJmcsIGNvbnN0IEFscGhhTnVtICZoKSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0g
IHJlc3VsdC5yZXNpemUoYS5zaXplKCkgKyBiLnNpemUoKSArIGMuc2l6ZSgpICsgZC5zaXplKCkg
KyBlLnNpemUoKSArCi0gICAgICAgICAgICAgICAgZi5zaXplKCkgKyBnLnNpemUoKSArIGguc2l6
ZSgpKTsKLSAgY2hhciAqY29uc3QgYmVnaW4gPSAmKnJlc3VsdC5iZWdpbigpOwotICBjaGFyICpv
dXQgPSBBcHBlbmQ0KGJlZ2luLCBhLCBiLCBjLCBkKTsKLSAgb3V0ID0gQXBwZW5kNChvdXQsIGUs
IGYsIGcsIGgpOwotICBHT09HTEVfRENIRUNLX0VRKG91dCwgYmVnaW4gKyByZXN1bHQuc2l6ZSgp
KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RyaW5nIFN0ckNhdChjb25zdCBBbHBoYU51bSAm
YSwgY29uc3QgQWxwaGFOdW0gJmIsIGNvbnN0IEFscGhhTnVtICZjLAotICAgICAgICAgICAgICBj
b25zdCBBbHBoYU51bSAmZCwgY29uc3QgQWxwaGFOdW0gJmUsIGNvbnN0IEFscGhhTnVtICZmLAot
ICAgICAgICAgICAgICBjb25zdCBBbHBoYU51bSAmZywgY29uc3QgQWxwaGFOdW0gJmgsIGNvbnN0
IEFscGhhTnVtICZpKSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNpemUoYS5zaXpl
KCkgKyBiLnNpemUoKSArIGMuc2l6ZSgpICsgZC5zaXplKCkgKyBlLnNpemUoKSArCi0gICAgICAg
ICAgICAgICAgZi5zaXplKCkgKyBnLnNpemUoKSArIGguc2l6ZSgpICsgaS5zaXplKCkpOwotICBj
aGFyICpjb25zdCBiZWdpbiA9ICYqcmVzdWx0LmJlZ2luKCk7Ci0gIGNoYXIgKm91dCA9IEFwcGVu
ZDQoYmVnaW4sIGEsIGIsIGMsIGQpOwotICBvdXQgPSBBcHBlbmQ0KG91dCwgZSwgZiwgZywgaCk7
Ci0gIG91dCA9IEFwcGVuZDEob3V0LCBpKTsKLSAgR09PR0xFX0RDSEVDS19FUShvdXQsIGJlZ2lu
ICsgcmVzdWx0LnNpemUoKSk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEl0J3MgcG9zc2li
bGUgdG8gY2FsbCBTdHJBcHBlbmQgd2l0aCBhIGNoYXIgKiBwb2ludGVyIHRoYXQgaXMgcGFydHdh
eSBpbnRvCi0vLyB0aGUgc3RyaW5nIHdlJ3JlIGFwcGVuZGluZyB0by4gIEhvd2V2ZXIgdGhlIHJl
c3VsdHMgb2YgdGhpcyBhcmUgcmFuZG9tLgotLy8gVGhlcmVmb3JlLCBjaGVjayBmb3IgdGhpcyBp
biBkZWJ1ZyBtb2RlLiAgVXNlIHVuc2lnbmVkIG1hdGggc28gd2Ugb25seSBoYXZlCi0vLyB0byBk
byBvbmUgY29tcGFyaXNvbi4KLSNkZWZpbmUgR09PR0xFX0RDSEVDS19OT19PVkVSTEFQKGRlc3Qs
IHNyYykgXAotICAgIEdPT0dMRV9EQ0hFQ0tfR1QodWludHB0cl90KChzcmMpLmRhdGEoKSAtIChk
ZXN0KS5kYXRhKCkpLCBcCi0gICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QoKGRlc3QpLnNp
emUoKSkpCi0KLXZvaWQgU3RyQXBwZW5kKHN0cmluZyAqcmVzdWx0LCBjb25zdCBBbHBoYU51bSAm
YSkgewotICBHT09HTEVfRENIRUNLX05PX09WRVJMQVAoKnJlc3VsdCwgYSk7Ci0gIHJlc3VsdC0+
YXBwZW5kKGEuZGF0YSgpLCBhLnNpemUoKSk7Ci19Ci0KLXZvaWQgU3RyQXBwZW5kKHN0cmluZyAq
cmVzdWx0LCBjb25zdCBBbHBoYU51bSAmYSwgY29uc3QgQWxwaGFOdW0gJmIpIHsKLSAgR09PR0xF
X0RDSEVDS19OT19PVkVSTEFQKCpyZXN1bHQsIGEpOwotICBHT09HTEVfRENIRUNLX05PX09WRVJM
QVAoKnJlc3VsdCwgYik7Ci0gIHN0cmluZzo6c2l6ZV90eXBlIG9sZF9zaXplID0gcmVzdWx0LT5z
aXplKCk7Ci0gIHJlc3VsdC0+cmVzaXplKG9sZF9zaXplICsgYS5zaXplKCkgKyBiLnNpemUoKSk7
Ci0gIGNoYXIgKmNvbnN0IGJlZ2luID0gJipyZXN1bHQtPmJlZ2luKCk7Ci0gIGNoYXIgKm91dCA9
IEFwcGVuZDIoYmVnaW4gKyBvbGRfc2l6ZSwgYSwgYik7Ci0gIEdPT0dMRV9EQ0hFQ0tfRVEob3V0
LCBiZWdpbiArIHJlc3VsdC0+c2l6ZSgpKTsKLX0KLQotdm9pZCBTdHJBcHBlbmQoc3RyaW5nICpy
ZXN1bHQsCi0gICAgICAgICAgICAgICBjb25zdCBBbHBoYU51bSAmYSwgY29uc3QgQWxwaGFOdW0g
JmIsIGNvbnN0IEFscGhhTnVtICZjKSB7Ci0gIEdPT0dMRV9EQ0hFQ0tfTk9fT1ZFUkxBUCgqcmVz
dWx0LCBhKTsKLSAgR09PR0xFX0RDSEVDS19OT19PVkVSTEFQKCpyZXN1bHQsIGIpOwotICBHT09H
TEVfRENIRUNLX05PX09WRVJMQVAoKnJlc3VsdCwgYyk7Ci0gIHN0cmluZzo6c2l6ZV90eXBlIG9s
ZF9zaXplID0gcmVzdWx0LT5zaXplKCk7Ci0gIHJlc3VsdC0+cmVzaXplKG9sZF9zaXplICsgYS5z
aXplKCkgKyBiLnNpemUoKSArIGMuc2l6ZSgpKTsKLSAgY2hhciAqY29uc3QgYmVnaW4gPSAmKnJl
c3VsdC0+YmVnaW4oKTsKLSAgY2hhciAqb3V0ID0gQXBwZW5kMihiZWdpbiArIG9sZF9zaXplLCBh
LCBiKTsKLSAgb3V0ID0gQXBwZW5kMShvdXQsIGMpOwotICBHT09HTEVfRENIRUNLX0VRKG91dCwg
YmVnaW4gKyByZXN1bHQtPnNpemUoKSk7Ci19Ci0KLXZvaWQgU3RyQXBwZW5kKHN0cmluZyAqcmVz
dWx0LAotICAgICAgICAgICAgICAgY29uc3QgQWxwaGFOdW0gJmEsIGNvbnN0IEFscGhhTnVtICZi
LAotICAgICAgICAgICAgICAgY29uc3QgQWxwaGFOdW0gJmMsIGNvbnN0IEFscGhhTnVtICZkKSB7
Ci0gIEdPT0dMRV9EQ0hFQ0tfTk9fT1ZFUkxBUCgqcmVzdWx0LCBhKTsKLSAgR09PR0xFX0RDSEVD
S19OT19PVkVSTEFQKCpyZXN1bHQsIGIpOwotICBHT09HTEVfRENIRUNLX05PX09WRVJMQVAoKnJl
c3VsdCwgYyk7Ci0gIEdPT0dMRV9EQ0hFQ0tfTk9fT1ZFUkxBUCgqcmVzdWx0LCBkKTsKLSAgc3Ry
aW5nOjpzaXplX3R5cGUgb2xkX3NpemUgPSByZXN1bHQtPnNpemUoKTsKLSAgcmVzdWx0LT5yZXNp
emUob2xkX3NpemUgKyBhLnNpemUoKSArIGIuc2l6ZSgpICsgYy5zaXplKCkgKyBkLnNpemUoKSk7
Ci0gIGNoYXIgKmNvbnN0IGJlZ2luID0gJipyZXN1bHQtPmJlZ2luKCk7Ci0gIGNoYXIgKm91dCA9
IEFwcGVuZDQoYmVnaW4gKyBvbGRfc2l6ZSwgYSwgYiwgYywgZCk7Ci0gIEdPT0dMRV9EQ0hFQ0tf
RVEob3V0LCBiZWdpbiArIHJlc3VsdC0+c2l6ZSgpKTsKLX0KLQotaW50IEdsb2JhbFJlcGxhY2VT
dWJzdHJpbmcoY29uc3Qgc3RyaW5nJiBzdWJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdHJpbmcmIHJlcGxhY2VtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyaW5nKiBzKSB7Ci0gIEdPT0dMRV9DSEVDSyhzICE9IE5VTEwpOwotICBpZiAocy0+ZW1w
dHkoKSB8fCBzdWJzdHJpbmcuZW1wdHkoKSkKLSAgICByZXR1cm4gMDsKLSAgc3RyaW5nIHRtcDsK
LSAgaW50IG51bV9yZXBsYWNlbWVudHMgPSAwOwotICBpbnQgcG9zID0gMDsKLSAgZm9yIChpbnQg
bWF0Y2hfcG9zID0gcy0+ZmluZChzdWJzdHJpbmcuZGF0YSgpLCBwb3MsIHN1YnN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgICAgbWF0Y2hfcG9zICE9IHN0cmluZzo6bnBvczsKLSAgICAgICBwb3MgPSBt
YXRjaF9wb3MgKyBzdWJzdHJpbmcubGVuZ3RoKCksCi0gICAgICAgICAgIG1hdGNoX3BvcyA9IHMt
PmZpbmQoc3Vic3RyaW5nLmRhdGEoKSwgcG9zLCBzdWJzdHJpbmcubGVuZ3RoKCkpKSB7Ci0gICAg
KytudW1fcmVwbGFjZW1lbnRzOwotICAgIC8vIEFwcGVuZCB0aGUgb3JpZ2luYWwgY29udGVudCBi
ZWZvcmUgdGhlIG1hdGNoLgotICAgIHRtcC5hcHBlbmQoKnMsIHBvcywgbWF0Y2hfcG9zIC0gcG9z
KTsKLSAgICAvLyBBcHBlbmQgdGhlIHJlcGxhY2VtZW50IGZvciB0aGUgbWF0Y2guCi0gICAgdG1w
LmFwcGVuZChyZXBsYWNlbWVudC5iZWdpbigpLCByZXBsYWNlbWVudC5lbmQoKSk7Ci0gIH0KLSAg
Ly8gQXBwZW5kIHRoZSBjb250ZW50IGFmdGVyIHRoZSBsYXN0IG1hdGNoLiBJZiBubyByZXBsYWNl
bWVudHMgd2VyZSBtYWRlLCB0aGUKLSAgLy8gb3JpZ2luYWwgc3RyaW5nIGlzIGxlZnQgdW50b3Vj
aGVkLgotICBpZiAobnVtX3JlcGxhY2VtZW50cyA+IDApIHsKLSAgICB0bXAuYXBwZW5kKCpzLCBw
b3MsIHMtPmxlbmd0aCgpIC0gcG9zKTsKLSAgICBzLT5zd2FwKHRtcCk7Ci0gIH0KLSAgcmV0dXJu
IG51bV9yZXBsYWNlbWVudHM7Ci19Ci0KLWludCBDYWxjdWxhdGVCYXNlNjRFc2NhcGVkTGVuKGlu
dCBpbnB1dF9sZW4sIGJvb2wgZG9fcGFkZGluZykgewotICAvLyBCYXNlNjQgZW5jb2RlcyB0aHJl
ZSBieXRlcyBvZiBpbnB1dCBhdCBhIHRpbWUuIElmIHRoZSBpbnB1dCBpcyBub3QKLSAgLy8gZGl2
aXNpYmxlIGJ5IHRocmVlLCB3ZSBwYWQgYXMgYXBwcm9wcmlhdGUuCi0gIC8vCi0gIC8vIChmcm9t
IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1NDgpCi0gIC8vIFNwZWNpYWwgcHJvY2Vz
c2luZyBpcyBwZXJmb3JtZWQgaWYgZmV3ZXIgdGhhbiAyNCBiaXRzIGFyZSBhdmFpbGFibGUKLSAg
Ly8gYXQgdGhlIGVuZCBvZiB0aGUgZGF0YSBiZWluZyBlbmNvZGVkLiAgQSBmdWxsIGVuY29kaW5n
IHF1YW50dW0gaXMKLSAgLy8gYWx3YXlzIGNvbXBsZXRlZCBhdCB0aGUgZW5kIG9mIGEgcXVhbnRp
dHkuICBXaGVuIGZld2VyIHRoYW4gMjQgaW5wdXQKLSAgLy8gYml0cyBhcmUgYXZhaWxhYmxlIGlu
IGFuIGlucHV0IGdyb3VwLCB6ZXJvIGJpdHMgYXJlIGFkZGVkIChvbiB0aGUKLSAgLy8gcmlnaHQp
IHRvIGZvcm0gYW4gaW50ZWdyYWwgbnVtYmVyIG9mIDYtYml0IGdyb3Vwcy4gIFBhZGRpbmcgYXQg
dGhlCi0gIC8vIGVuZCBvZiB0aGUgZGF0YSBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlICc9JyBjaGFy
YWN0ZXIuICBTaW5jZSBhbGwgYmFzZQotICAvLyA2NCBpbnB1dCBpcyBhbiBpbnRlZ3JhbCBudW1i
ZXIgb2Ygb2N0ZXRzLCBvbmx5IHRoZSBmb2xsb3dpbmcgY2FzZXMKLSAgLy8gY2FuIGFyaXNlOgot
Ci0KLSAgLy8gQmFzZTY0IGVuY29kZXMgZWFjaCB0aHJlZSBieXRlcyBvZiBpbnB1dCBpbnRvIGZv
dXIgYnl0ZXMgb2Ygb3V0cHV0LgotICBpbnQgbGVuID0gKGlucHV0X2xlbiAvIDMpICogNDsKLQot
ICBpZiAoaW5wdXRfbGVuICUgMyA9PSAwKSB7Ci0gICAgLy8gKGZyb20gaHR0cDovL3Rvb2xzLmll
dGYub3JnL2h0bWwvcmZjMzU0OCkKLSAgICAvLyAoMSkgdGhlIGZpbmFsIHF1YW50dW0gb2YgZW5j
b2RpbmcgaW5wdXQgaXMgYW4gaW50ZWdyYWwgbXVsdGlwbGUgb2YgMjQKLSAgICAvLyBiaXRzOyBo
ZXJlLCB0aGUgZmluYWwgdW5pdCBvZiBlbmNvZGVkIG91dHB1dCB3aWxsIGJlIGFuIGludGVncmFs
Ci0gICAgLy8gbXVsdGlwbGUgb2YgNCBjaGFyYWN0ZXJzIHdpdGggbm8gIj0iIHBhZGRpbmcsCi0g
IH0gZWxzZSBpZiAoaW5wdXRfbGVuICUgMyA9PSAxKSB7Ci0gICAgLy8gKGZyb20gaHR0cDovL3Rv
b2xzLmlldGYub3JnL2h0bWwvcmZjMzU0OCkKLSAgICAvLyAoMikgdGhlIGZpbmFsIHF1YW50dW0g
b2YgZW5jb2RpbmcgaW5wdXQgaXMgZXhhY3RseSA4IGJpdHM7IGhlcmUsIHRoZQotICAgIC8vIGZp
bmFsIHVuaXQgb2YgZW5jb2RlZCBvdXRwdXQgd2lsbCBiZSB0d28gY2hhcmFjdGVycyBmb2xsb3dl
ZCBieSB0d28KLSAgICAvLyAiPSIgcGFkZGluZyBjaGFyYWN0ZXJzLCBvcgotICAgIGxlbiArPSAy
OwotICAgIGlmIChkb19wYWRkaW5nKSB7Ci0gICAgICBsZW4gKz0gMjsKLSAgICB9Ci0gIH0gZWxz
ZSB7ICAvLyAoaW5wdXRfbGVuICUgMyA9PSAyKQotICAgIC8vIChmcm9tIGh0dHA6Ly90b29scy5p
ZXRmLm9yZy9odG1sL3JmYzM1NDgpCi0gICAgLy8gKDMpIHRoZSBmaW5hbCBxdWFudHVtIG9mIGVu
Y29kaW5nIGlucHV0IGlzIGV4YWN0bHkgMTYgYml0czsgaGVyZSwgdGhlCi0gICAgLy8gZmluYWwg
dW5pdCBvZiBlbmNvZGVkIG91dHB1dCB3aWxsIGJlIHRocmVlIGNoYXJhY3RlcnMgZm9sbG93ZWQg
Ynkgb25lCi0gICAgLy8gIj0iIHBhZGRpbmcgY2hhcmFjdGVyLgotICAgIGxlbiArPSAzOwotICAg
IGlmIChkb19wYWRkaW5nKSB7Ci0gICAgICBsZW4gKz0gMTsKLSAgICB9Ci0gIH0KLQotICBhc3Nl
cnQobGVuID49IGlucHV0X2xlbik7ICAvLyBtYWtlIHN1cmUgd2UgZGlkbid0IG92ZXJmbG93Ci0g
IHJldHVybiBsZW47Ci19Ci0KLS8vIEJhc2U2NEVzY2FwZSBkb2VzIHBhZGRpbmcsIHNvIHRoaXMg
Y2FsY3VsYXRpb24gaW5jbHVkZXMgcGFkZGluZy4KLWludCBDYWxjdWxhdGVCYXNlNjRFc2NhcGVk
TGVuKGludCBpbnB1dF9sZW4pIHsKLSAgcmV0dXJuIENhbGN1bGF0ZUJhc2U2NEVzY2FwZWRMZW4o
aW5wdXRfbGVuLCB0cnVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gaW50IEJhc2U2NFVu
ZXNjYXBlKCkgLSBiYXNlNjQgZGVjb2RlcgotLy8gaW50IEJhc2U2NEVzY2FwZSgpIC0gYmFzZTY0
IGVuY29kZXIKLS8vIGludCBXZWJTYWZlQmFzZTY0VW5lc2NhcGUoKSAtIEdvb2dsZSdzIHZhcmlh
dGlvbiBvZiBiYXNlNjQgZGVjb2RlcgotLy8gaW50IFdlYlNhZmVCYXNlNjRFc2NhcGUoKSAtIEdv
b2dsZSdzIHZhcmlhdGlvbiBvZiBiYXNlNjQgZW5jb2RlcgotLy8KLS8vIENoZWNrIG91dAotLy8g
aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NSBmb3IgZm9ybWFsIGRlc2NyaXB0aW9u
LCBidXQgd2hhdCB3ZQotLy8gY2FyZSBhYm91dCBpcyB0aGF0Li4uCi0vLyAgIFRha2UgdGhlIGVu
Y29kZWQgc3R1ZmYgaW4gZ3JvdXBzIG9mIDQgY2hhcmFjdGVycyBhbmQgdHVybiBlYWNoCi0vLyAg
IGNoYXJhY3RlciBpbnRvIGEgY29kZSAwIHRvIDYzIHRodXM6Ci0vLyAgICAgICAgICAgQS1aIG1h
cCB0byAwIHRvIDI1Ci0vLyAgICAgICAgICAgYS16IG1hcCB0byAyNiB0byA1MQotLy8gICAgICAg
ICAgIDAtOSBtYXAgdG8gNTIgdG8gNjEKLS8vICAgICAgICAgICArKC0gZm9yIFdlYlNhZmUpIG1h
cHMgdG8gNjIKLS8vICAgICAgICAgICAvKF8gZm9yIFdlYlNhZmUpIG1hcHMgdG8gNjMKLS8vICAg
VGhlcmUgd2lsbCBiZSBmb3VyIG51bWJlcnMsIGFsbCBsZXNzIHRoYW4gNjQgd2hpY2ggY2FuIGJl
IHJlcHJlc2VudGVkCi0vLyAgIGJ5IGEgNiBkaWdpdCBiaW5hcnkgbnVtYmVyIChhYWFhYWEsIGJi
YmJiYiwgY2NjY2NjLCBkZGRkZGQgcmVzcGVjdGl2ZWx5KS4KLS8vICAgQXJyYW5nZSB0aGUgNiBk
aWdpdCBiaW5hcnkgbnVtYmVycyBpbnRvIHRocmVlIGJ5dGVzIGFzIHN1Y2g6Ci0vLyAgIGFhYWFh
YWJiIGJiYmJjY2NjIGNjZGRkZGRkCi0vLyAgIEVxdWFscyBzaWducyAob25lIG9yIHR3bykgYXJl
IHVzZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW5jb2RlZCBibG9jayB0bwotLy8gICBpbmRpY2F0ZSB0
aGF0IHRoZSB0ZXh0IHdhcyBub3QgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiB0aHJlZSBieXRlcyBs
b25nLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pbnQgQmFzZTY0VW5lc2NhcGVJbnRlcm5hbChjb25z
dCBjaGFyICpzcmNfcGFyYW0sIGludCBzenNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKmRlc3QsIGludCBzemRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzaWduZWQgY2hhciogdW5iYXNlNjQpIHsKLSAgc3RhdGljIGNvbnN0IGNoYXIga1BhZDY0RXF1
YWxzID0gJz0nOwotICBzdGF0aWMgY29uc3QgY2hhciBrUGFkNjREb3QgPSAnLic7Ci0KLSAgaW50
IGRlY29kZSA9IDA7Ci0gIGludCBkZXN0aWR4ID0gMDsKLSAgaW50IHN0YXRlID0gMDsKLSAgdW5z
aWduZWQgaW50IGNoID0gMDsKLSAgdW5zaWduZWQgaW50IHRlbXAgPSAwOwotCi0gIC8vIElmICJj
aGFyIiBpcyBzaWduZWQgYnkgZGVmYXVsdCwgdXNpbmcgKnNyYyBhcyBhbiBhcnJheSBpbmRleCBy
ZXN1bHRzIGluCi0gIC8vIGFjY2Vzc2luZyBuZWdhdGl2ZSBhcnJheSBlbGVtZW50cy4gVHJlYXQg
dGhlIGlucHV0IGFzIGEgcG9pbnRlciB0bwotICAvLyB1bnNpZ25lZCBjaGFyIHRvIGF2b2lkIHRo
aXMuCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KHNyY19wYXJhbSk7Ci0KLSAgLy8gVGhlIEdFVF9JTlBVVCBtYWNybyBn
ZXRzIHRoZSBuZXh0IGlucHV0IGNoYXJhY3Rlciwgc2tpcHBpbmcKLSAgLy8gb3ZlciBhbnkgd2hp
dGVzcGFjZSwgYW5kIHN0b3BwaW5nIHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUKLSAgLy8g
c3RyaW5nIG9yIHdoZW4gd2UgcmVhZCBhbnkgbm9uLWRhdGEgY2hhcmFjdGVyLiAgVGhlIGFyZ3Vt
ZW50cyBhcmUKLSAgLy8gYW4gYXJiaXRyYXJ5IGlkZW50aWZpZXIgKHVzZWQgYXMgYSBsYWJlbCBm
b3IgZ290bykgYW5kIHRoZSBudW1iZXIKLSAgLy8gb2YgZGF0YSBieXRlcyB0aGF0IG11c3QgcmVt
YWluIGluIHRoZSBpbnB1dCB0byBhdm9pZCBhYm9ydGluZyB0aGUKLSAgLy8gbG9vcC4KLSNkZWZp
bmUgR0VUX0lOUFVUKGxhYmVsLCByZW1haW4pICAgICAgICAgICAgICAgICBcCi0gIGxhYmVsOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIC0tc3pzcmM7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjaCA9ICpzcmMrKzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZGVjb2RlID0gdW5iYXNlNjRbY2hd
OyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChkZWNvZGUgPCAwKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmIChhc2NpaV9pc3NwYWNlKGNoKSAmJiBzenNy
YyA+PSByZW1haW4pICBcCi0gICAgICAgIGdvdG8gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgc3RhdGUgPSA0IC0gcmVtYWluOyAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfQotCi0gIC8vIGlmIGRlc3QgaXMgbnVsbCwgd2UncmUganVzdCBjaGVja2luZyB0byBz
ZWUgaWYgaXQncyBsZWdhbCBpbnB1dAotICAvLyByYXRoZXIgdGhhbiBwcm9kdWNpbmcgb3V0cHV0
LiAgKEkgc3VzcGVjdCB0aGlzIGNvdWxkIGp1c3QgYmUgZG9uZQotICAvLyB3aXRoIGEgcmVnZXhw
Li4uKS4gIFdlIGR1cGxpY2F0ZSB0aGUgbG9vcCBzbyB0aGlzIHRlc3QgY2FuIGJlCi0gIC8vIG91
dHNpZGUgaXQgaW5zdGVhZCBvZiBpbiBldmVyeSBpdGVyYXRpb24uCi0KLSAgaWYgKGRlc3QpIHsK
LSAgICAvLyBUaGlzIGxvb3AgY29uc3VtZXMgNCBpbnB1dCBieXRlcyBhbmQgcHJvZHVjZXMgMyBv
dXRwdXQgYnl0ZXMKLSAgICAvLyBwZXIgaXRlcmF0aW9uLiAgV2UgY2FuJ3Qga25vdyBhdCB0aGUg
c3RhcnQgdGhhdCB0aGVyZSBpcyBlbm91Z2gKLSAgICAvLyBkYXRhIGxlZnQgaW4gdGhlIHN0cmlu
ZyBmb3IgYSBmdWxsIGl0ZXJhdGlvbiwgc28gdGhlIGxvb3AgbWF5Ci0gICAgLy8gYnJlYWsgb3V0
IGluIHRoZSBtaWRkbGU7IGlmIHNvICdzdGF0ZScgd2lsbCBiZSBzZXQgdG8gdGhlCi0gICAgLy8g
bnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQuCi0KLSAgICB3aGlsZSAoc3pzcmMgPj0gNCkgIHsK
LSAgICAgIC8vIFdlJ2xsIHN0YXJ0IGJ5IG9wdGltaXN0aWNhbGx5IGFzc3VtaW5nIHRoYXQgdGhl
IG5leHQgZm91cgotICAgICAgLy8gYnl0ZXMgb2YgdGhlIHN0cmluZyAoc3JjWzAuLjNdKSBhcmUg
Zm91ciBnb29kIGRhdGEgYnl0ZXMKLSAgICAgIC8vICh0aGF0IGlzLCBubyBudWxscywgd2hpdGVz
cGFjZSwgcGFkZGluZyBjaGFycywgb3IgaWxsZWdhbAotICAgICAgLy8gY2hhcnMpLiAgV2UgbmVl
ZCB0byB0ZXN0IHNyY1swLi4yXSBmb3IgbnVsbHMgaW5kaXZpZHVhbGx5Ci0gICAgICAvLyBiZWZv
cmUgY29uc3RydWN0aW5nIHRlbXAgdG8gcHJlc2VydmUgdGhlIHByb3BlcnR5IHRoYXQgd2UKLSAg
ICAgIC8vIG5ldmVyIHJlYWQgcGFzdCBhIG51bGwgaW4gdGhlIHN0cmluZyAobm8gbWF0dGVyIGhv
dyBsb25nCi0gICAgICAvLyBzenNyYyBjbGFpbXMgdGhlIHN0cmluZyBpcykuCi0KLSAgICAgIGlm
ICghc3JjWzBdIHx8ICFzcmNbMV0gfHwgIXNyY1syXSB8fAotICAgICAgICAgICh0ZW1wID0gKCh1
bnNpZ25lZCh1bmJhc2U2NFtzcmNbMF1dKSA8PCAxOCkgfAotICAgICAgICAgICAgICAgICAgICh1
bnNpZ25lZCh1bmJhc2U2NFtzcmNbMV1dKSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICh1
bnNpZ25lZCh1bmJhc2U2NFtzcmNbMl1dKSA8PCA2KSB8Ci0gICAgICAgICAgICAgICAgICAgKHVu
c2lnbmVkKHVuYmFzZTY0W3NyY1szXV0pKSkpICYgMHg4MDAwMDAwMCkgewotICAgICAgICAvLyBJ
ZmYgYW55IG9mIHRob3NlIGZvdXIgY2hhcmFjdGVycyB3YXMgYmFkIChudWxsLCBpbGxlZ2FsLAot
ICAgICAgICAvLyB3aGl0ZXNwYWNlLCBwYWRkaW5nKSwgdGhlbiB0ZW1wJ3MgaGlnaCBiaXQgd2ls
bCBiZSBzZXQKLSAgICAgICAgLy8gKGJlY2F1c2UgdW5iYXNlNjRbXSBpcyAtMSBmb3IgYWxsIGJh
ZCBjaGFyYWN0ZXJzKS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gV2UnbGwgYmFjayB1cCBhbmQg
cmVzb3J0IHRvIHRoZSBzbG93ZXIgZGVjb2Rlciwgd2hpY2gga25vd3MKLSAgICAgICAgLy8gaG93
IHRvIGhhbmRsZSB0aG9zZSBjYXNlcy4KLQotICAgICAgICBHRVRfSU5QVVQoZmlyc3QsIDQpOwot
ICAgICAgICB0ZW1wID0gZGVjb2RlOwotICAgICAgICBHRVRfSU5QVVQoc2Vjb25kLCAzKTsKLSAg
ICAgICAgdGVtcCA9ICh0ZW1wIDw8IDYpIHwgZGVjb2RlOwotICAgICAgICBHRVRfSU5QVVQodGhp
cmQsIDIpOwotICAgICAgICB0ZW1wID0gKHRlbXAgPDwgNikgfCBkZWNvZGU7Ci0gICAgICAgIEdF
VF9JTlBVVChmb3VydGgsIDEpOwotICAgICAgICB0ZW1wID0gKHRlbXAgPDwgNikgfCBkZWNvZGU7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSByZWFsbHkgZGlkIGhhdmUgZm91ciBnb29k
IGRhdGEgYnl0ZXMsIHNvIGFkdmFuY2UgZm91cgotICAgICAgICAvLyBjaGFyYWN0ZXJzIGluIHRo
ZSBzdHJpbmcuCi0KLSAgICAgICAgc3pzcmMgLT0gNDsKLSAgICAgICAgc3JjICs9IDQ7Ci0gICAg
ICAgIGRlY29kZSA9IC0xOwotICAgICAgICBjaCA9ICdcMCc7Ci0gICAgICB9Ci0KLSAgICAgIC8v
IHRlbXAgaGFzIDI0IGJpdHMgb2YgaW5wdXQsIHNvIHdyaXRlIHRoYXQgb3V0IGFzIHRocmVlIGJ5
dGVzLgotCi0gICAgICBpZiAoZGVzdGlkeCszID4gc3pkZXN0KSByZXR1cm4gLTE7Ci0gICAgICBk
ZXN0W2Rlc3RpZHgrMl0gPSB0ZW1wOwotICAgICAgdGVtcCA+Pj0gODsKLSAgICAgIGRlc3RbZGVz
dGlkeCsxXSA9IHRlbXA7Ci0gICAgICB0ZW1wID4+PSA4OwotICAgICAgZGVzdFtkZXN0aWR4XSA9
IHRlbXA7Ci0gICAgICBkZXN0aWR4ICs9IDM7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHdoaWxl
IChzenNyYyA+PSA0KSAgewotICAgICAgaWYgKCFzcmNbMF0gfHwgIXNyY1sxXSB8fCAhc3JjWzJd
IHx8Ci0gICAgICAgICAgKHRlbXAgPSAoKHVuc2lnbmVkKHVuYmFzZTY0W3NyY1swXV0pIDw8IDE4
KSB8Ci0gICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKHVuYmFzZTY0W3NyY1sxXV0pIDw8IDEy
KSB8Ci0gICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKHVuYmFzZTY0W3NyY1syXV0pIDw8IDYp
IHwKLSAgICAgICAgICAgICAgICAgICAodW5zaWduZWQodW5iYXNlNjRbc3JjWzNdXSkpKSkgJiAw
eDgwMDAwMDAwKSB7Ci0gICAgICAgIEdFVF9JTlBVVChmaXJzdF9ub19kZXN0LCA0KTsKLSAgICAg
ICAgR0VUX0lOUFVUKHNlY29uZF9ub19kZXN0LCAzKTsKLSAgICAgICAgR0VUX0lOUFVUKHRoaXJk
X25vX2Rlc3QsIDIpOwotICAgICAgICBHRVRfSU5QVVQoZm91cnRoX25vX2Rlc3QsIDEpOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgc3pzcmMgLT0gNDsKLSAgICAgICAgc3JjICs9IDQ7Ci0gICAg
ICAgIGRlY29kZSA9IC0xOwotICAgICAgICBjaCA9ICdcMCc7Ci0gICAgICB9Ci0gICAgICBkZXN0
aWR4ICs9IDM7Ci0gICAgfQotICB9Ci0KLSN1bmRlZiBHRVRfSU5QVVQKLQotICAvLyBpZiB0aGUg
bG9vcCB0ZXJtaW5hdGVkIGJlY2F1c2Ugd2UgcmVhZCBhIGJhZCBjaGFyYWN0ZXIsIHJldHVybgot
ICAvLyBub3cuCi0gIGlmIChkZWNvZGUgPCAwICYmIGNoICE9ICdcMCcgJiYKLSAgICAgIGNoICE9
IGtQYWQ2NEVxdWFscyAmJiBjaCAhPSBrUGFkNjREb3QgJiYgIWFzY2lpX2lzc3BhY2UoY2gpKQot
ICAgIHJldHVybiAtMTsKLQotICBpZiAoY2ggPT0ga1BhZDY0RXF1YWxzIHx8IGNoID09IGtQYWQ2
NERvdCkgewotICAgIC8vIGlmIHdlIHN0b3BwZWQgYnkgaGl0dGluZyBhbiAnPScgb3IgJy4nLCB1
bi1yZWFkIHRoYXQgY2hhcmFjdGVyIC0tIHdlJ2xsCi0gICAgLy8gbG9vayBhdCBpdCBhZ2FpbiB3
aGVuIHdlIGNvdW50IHRvIGNoZWNrIGZvciB0aGUgcHJvcGVyIG51bWJlciBvZgotICAgIC8vIGVx
dWFscyBzaWducyBhdCB0aGUgZW5kLgotICAgICsrc3pzcmM7Ci0gICAgLS1zcmM7Ci0gIH0gZWxz
ZSB7Ci0gICAgLy8gVGhpcyBsb29wIGNvbnN1bWVzIDEgaW5wdXQgYnl0ZSBwZXIgaXRlcmF0aW9u
LiAgSXQncyB1c2VkIHRvCi0gICAgLy8gY2xlYW4gdXAgdGhlIDAtMyBpbnB1dCBieXRlcyByZW1h
aW5pbmcgd2hlbiB0aGUgZmlyc3QsIGZhc3RlcgotICAgIC8vIGxvb3AgZmluaXNoZXMuICAndGVt
cCcgY29udGFpbnMgdGhlIGRhdGEgZnJvbSAnc3RhdGUnIGlucHV0Ci0gICAgLy8gY2hhcmFjdGVy
cyByZWFkIGJ5IHRoZSBmaXJzdCBsb29wLgotICAgIHdoaWxlIChzenNyYyA+IDApICB7Ci0gICAg
ICAtLXN6c3JjOwotICAgICAgY2ggPSAqc3JjKys7Ci0gICAgICBkZWNvZGUgPSB1bmJhc2U2NFtj
aF07Ci0gICAgICBpZiAoZGVjb2RlIDwgMCkgewotICAgICAgICBpZiAoYXNjaWlfaXNzcGFjZShj
aCkpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXDAn
KSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0ga1BhZDY0RXF1
YWxzIHx8IGNoID09IGtQYWQ2NERvdCkgewotICAgICAgICAgIC8vIGJhY2sgdXAgb25lIGNoYXJh
Y3Rlcjsgd2UnbGwgcmVhZCBpdCBhZ2FpbiB3aGVuIHdlIGNoZWNrCi0gICAgICAgICAgLy8gZm9y
IHRoZSBjb3JyZWN0IG51bWJlciBvZiBwYWQgY2hhcmFjdGVycyBhdCB0aGUgZW5kLgotICAgICAg
ICAgICsrc3pzcmM7Ci0gICAgICAgICAgLS1zcmM7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAg
ICAgIC8vIEVhY2ggaW5wdXQgY2hhcmFjdGVyIGdpdmVzIHVzIHNpeCBiaXRzIG9mIG91dHB1dC4K
LSAgICAgIHRlbXAgPSAodGVtcCA8PCA2KSB8IGRlY29kZTsKLSAgICAgICsrc3RhdGU7Ci0gICAg
ICBpZiAoc3RhdGUgPT0gNCkgewotICAgICAgICAvLyBJZiB3ZSd2ZSBhY2N1bXVsYXRlZCAyNCBi
aXRzIG9mIG91dHB1dCwgd3JpdGUgdGhhdCBvdXQgYXMKLSAgICAgICAgLy8gdGhyZWUgYnl0ZXMu
Ci0gICAgICAgIGlmIChkZXN0KSB7Ci0gICAgICAgICAgaWYgKGRlc3RpZHgrMyA+IHN6ZGVzdCkg
cmV0dXJuIC0xOwotICAgICAgICAgIGRlc3RbZGVzdGlkeCsyXSA9IHRlbXA7Ci0gICAgICAgICAg
dGVtcCA+Pj0gODsKLSAgICAgICAgICBkZXN0W2Rlc3RpZHgrMV0gPSB0ZW1wOwotICAgICAgICAg
IHRlbXAgPj49IDg7Ci0gICAgICAgICAgZGVzdFtkZXN0aWR4XSA9IHRlbXA7Ci0gICAgICAgIH0K
LSAgICAgICAgZGVzdGlkeCArPSAzOwotICAgICAgICBzdGF0ZSA9IDA7Ci0gICAgICAgIHRlbXAg
PSAwOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFByb2Nlc3MgdGhlIGxlZnRvdmVyIGRh
dGEgY29udGFpbmVkIGluICd0ZW1wJyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4KLSAgaW50IGV4
cGVjdGVkX2VxdWFscyA9IDA7Ci0gIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIDA6Ci0gICAg
ICAvLyBOb3RoaW5nIGxlZnQgb3Zlcjsgb3V0cHV0IGlzIGEgbXVsdGlwbGUgb2YgMyBieXRlcy4K
LSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAxOgotICAgICAgLy8gQmFkIGlucHV0OyB3ZSBoYXZl
IDYgYml0cyBsZWZ0IG92ZXIuCi0gICAgICByZXR1cm4gLTE7Ci0KLSAgICBjYXNlIDI6Ci0gICAg
ICAvLyBQcm9kdWNlIG9uZSBtb3JlIG91dHB1dCBieXRlIGZyb20gdGhlIDEyIGlucHV0IGJpdHMg
d2UgaGF2ZSBsZWZ0LgotICAgICAgaWYgKGRlc3QpIHsKLSAgICAgICAgaWYgKGRlc3RpZHgrMSA+
IHN6ZGVzdCkgcmV0dXJuIC0xOwotICAgICAgICB0ZW1wID4+PSA0OwotICAgICAgICBkZXN0W2Rl
c3RpZHhdID0gdGVtcDsKLSAgICAgIH0KLSAgICAgICsrZGVzdGlkeDsKLSAgICAgIGV4cGVjdGVk
X2VxdWFscyA9IDI7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgMzoKLSAgICAgIC8vIFByb2R1
Y2UgdHdvIG1vcmUgb3V0cHV0IGJ5dGVzIGZyb20gdGhlIDE4IGlucHV0IGJpdHMgd2UgaGF2ZSBs
ZWZ0LgotICAgICAgaWYgKGRlc3QpIHsKLSAgICAgICAgaWYgKGRlc3RpZHgrMiA+IHN6ZGVzdCkg
cmV0dXJuIC0xOwotICAgICAgICB0ZW1wID4+PSAyOwotICAgICAgICBkZXN0W2Rlc3RpZHgrMV0g
PSB0ZW1wOwotICAgICAgICB0ZW1wID4+PSA4OwotICAgICAgICBkZXN0W2Rlc3RpZHhdID0gdGVt
cDsKLSAgICAgIH0KLSAgICAgIGRlc3RpZHggKz0gMjsKLSAgICAgIGV4cGVjdGVkX2VxdWFscyA9
IDE7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAvLyBzdGF0ZSBzaG91bGQg
aGF2ZSBubyBvdGhlciB2YWx1ZXMgYXQgdGhpcyBwb2ludC4KLSAgICAgIEdPT0dMRV9MT0coRkFU
QUwpIDw8ICJUaGlzIGNhbid0IGhhcHBlbjsgYmFzZTY0IGRlY29kZXIgc3RhdGUgPSAiIDw8IHN0
YXRlOwotICB9Ci0KLSAgLy8gVGhlIHJlbWFpbmRlciBvZiB0aGUgc3RyaW5nIHNob3VsZCBiZSBh
bGwgd2hpdGVzcGFjZSwgbWl4ZWQgd2l0aAotICAvLyBleGFjdGx5IDAgZXF1YWxzIHNpZ25zLCBv
ciBleGFjdGx5ICdleHBlY3RlZF9lcXVhbHMnIGVxdWFscwotICAvLyBzaWducy4gIChBbHdheXMg
YWNjZXB0aW5nIDAgZXF1YWxzIHNpZ25zIGlzIGEgZ29vZ2xlIGV4dGVuc2lvbgotICAvLyBub3Qg
Y292ZXJlZCBpbiB0aGUgUkZDLCBhcyBpcyBhY2NlcHRpbmcgZG90IGFzIHRoZSBwYWQgY2hhcmFj
dGVyLikKLQotICBpbnQgZXF1YWxzID0gMDsKLSAgd2hpbGUgKHN6c3JjID4gMCAmJiAqc3JjKSB7
Ci0gICAgaWYgKCpzcmMgPT0ga1BhZDY0RXF1YWxzIHx8ICpzcmMgPT0ga1BhZDY0RG90KQotICAg
ICAgKytlcXVhbHM7Ci0gICAgZWxzZSBpZiAoIWFzY2lpX2lzc3BhY2UoKnNyYykpCi0gICAgICBy
ZXR1cm4gLTE7Ci0gICAgLS1zenNyYzsKLSAgICArK3NyYzsKLSAgfQotCi0gIHJldHVybiAoZXF1
YWxzID09IDAgfHwgZXF1YWxzID09IGV4cGVjdGVkX2VxdWFscykgPyBkZXN0aWR4IDogLTE7Ci19
Ci0KLS8vIFRoZSBhcnJheXMgYmVsb3cgd2VyZSBnZW5lcmF0ZWQgYnkgdGhlIGZvbGxvd2luZyBj
b2RlCi0vLyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KLS8vICNpbmNsdWRlIDxzdGRsaWIuaD4KLS8v
ICNpbmNsdWRlIDxzdHJpbmcuaD4KLS8vIG1haW4oKQotLy8gewotLy8gICBzdGF0aWMgY29uc3Qg
Y2hhciBCYXNlNjRbXSA9Ci0vLyAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVm
Z2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwotLy8gICBjaGFyICpwb3M7Ci0vLyAg
IGludCBpZHgsIGksIGo7Ci0vLyAgIHByaW50ZigiICAgICIpOwotLy8gICBmb3IgKGkgPSAwOyBp
IDwgMjU1OyBpICs9IDgpIHsKLS8vICAgICBmb3IgKGogPSBpOyBqIDwgaSArIDg7IGorKykgewot
Ly8gICAgICAgcG9zID0gc3RyY2hyKEJhc2U2NCwgaik7Ci0vLyAgICAgICBpZiAoKHBvcyA9PSBO
VUxMKSB8fCAoaiA9PSAwKSkKLS8vICAgICAgICAgaWR4ID0gLTE7Ci0vLyAgICAgICBlbHNlCi0v
LyAgICAgICAgIGlkeCA9IHBvcyAtIEJhc2U2NDsKLS8vICAgICAgIGlmIChpZHggPT0gLTEpCi0v
LyAgICAgICAgIHByaW50ZigiICUyZCwgICAgICIsIGlkeCk7Ci0vLyAgICAgICBlbHNlCi0vLyAg
ICAgICAgIHByaW50ZigiICUyZC8qJWMqLywiLCBpZHgsIGopOwotLy8gICAgIH0KLS8vICAgICBw
cmludGYoIlxuICAgICIpOwotLy8gICB9Ci0vLyB9Ci0vLwotLy8gd2hlcmUgdGhlIHZhbHVlIG9m
ICJCYXNlNjRbXSIgd2FzIHJlcGxhY2VkIGJ5IG9uZSBvZiB0aGUgYmFzZS02NCBjb252ZXJzaW9u
Ci0vLyB0YWJsZXMgZnJvbSB0aGUgZnVuY3Rpb25zIGJlbG93Lgotc3RhdGljIGNvbnN0IHNpZ25l
ZCBjaGFyIGtVbkJhc2U2NFtdID0gewotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwg
ICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAg
LTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAg
ICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAg
IC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwg
ICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAg
LTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIDYyLyorKi8sIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIDYzLyovICovLAotICA1Mi8q
MCovLCA1My8qMSovLCA1NC8qMiovLCA1NS8qMyovLCA1Ni8qNCovLCA1Ny8qNSovLCA1OC8qNiov
LCA1OS8qNyovLAotICA2MC8qOCovLCA2MS8qOSovLCAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgIDAvKkEqLywgIDEvKkIqLywgIDIv
KkMqLywgIDMvKkQqLywgIDQvKkUqLywgIDUvKkYqLywgIDYvKkcqLywKLSAgMDcvKkgqLywgIDgv
KkkqLywgIDkvKkoqLywgMTAvKksqLywgMTEvKkwqLywgMTIvKk0qLywgMTMvKk4qLywgMTQvKk8q
LywKLSAgMTUvKlAqLywgMTYvKlEqLywgMTcvKlIqLywgMTgvKlMqLywgMTkvKlQqLywgMjAvKlUq
LywgMjEvKlYqLywgMjIvKlcqLywKLSAgMjMvKlgqLywgMjQvKlkqLywgMjUvKloqLywgLTEsICAg
ICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIDI2LyphKi8sIDI3
LypiKi8sIDI4LypjKi8sIDI5LypkKi8sIDMwLyplKi8sIDMxLypmKi8sIDMyLypnKi8sCi0gIDMz
LypoKi8sIDM0LyppKi8sIDM1LypqKi8sIDM2LyprKi8sIDM3LypsKi8sIDM4LyptKi8sIDM5Lypu
Ki8sIDQwLypvKi8sCi0gIDQxLypwKi8sIDQyLypxKi8sIDQzLypyKi8sIDQ0LypzKi8sIDQ1Lyp0
Ki8sIDQ2Lyp1Ki8sIDQ3Lyp2Ki8sIDQ4Lyp3Ki8sCi0gIDQ5Lyp4Ki8sIDUwLyp5Ki8sIDUxLyp6
Ki8sIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAt
MSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwK
LSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAg
LTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAt
MSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAg
ICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0x
LCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAt
MSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAg
ICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAt
MSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAg
ICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEs
ICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0g
IC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMQotfTsKLXN0YXRpYyBjb25zdCBzaWduZWQgY2hhciBrVW5X
ZWJTYWZlQmFzZTY0W10gPSB7Ci0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAg
IC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwg
ICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAg
LTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEs
Ci0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAg
IC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwg
ICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAg
LTEsICAgICAgLTEsICAgICAgNjIvKi0qLywgLTEsICAgICAgLTEsCi0gIDUyLyowKi8sIDUzLyox
Ki8sIDU0LyoyKi8sIDU1LyozKi8sIDU2Lyo0Ki8sIDU3Lyo1Ki8sIDU4Lyo2Ki8sIDU5Lyo3Ki8s
Ci0gIDYwLyo4Ki8sIDYxLyo5Ki8sIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAg
IC0xLCAgICAgIC0xLAotICAtMSwgICAgICAgMC8qQSovLCAgMS8qQiovLCAgMi8qQyovLCAgMy8q
RCovLCAgNC8qRSovLCAgNS8qRiovLCAgNi8qRyovLAotICAwNy8qSCovLCAgOC8qSSovLCAgOS8q
SiovLCAxMC8qSyovLCAxMS8qTCovLCAxMi8qTSovLCAxMy8qTiovLCAxNC8qTyovLAotICAxNS8q
UCovLCAxNi8qUSovLCAxNy8qUiovLCAxOC8qUyovLCAxOS8qVCovLCAyMC8qVSovLCAyMS8qViov
LCAyMi8qVyovLAotICAyMy8qWCovLCAyNC8qWSovLCAyNS8qWiovLCAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICA2My8qXyovLAotICAtMSwgICAgICAyNi8qYSovLCAyNy8qYiov
LCAyOC8qYyovLCAyOS8qZCovLCAzMC8qZSovLCAzMS8qZiovLCAzMi8qZyovLAotICAzMy8qaCov
LCAzNC8qaSovLCAzNS8qaiovLCAzNi8qayovLCAzNy8qbCovLCAzOC8qbSovLCAzOS8qbiovLCA0
MC8qbyovLAotICA0MS8qcCovLCA0Mi8qcSovLCA0My8qciovLCA0NC8qcyovLCA0NS8qdCovLCA0
Ni8qdSovLCA0Ny8qdiovLCA0OC8qdyovLAotICA0OS8qeCovLCA1MC8qeSovLCA1MS8qeiovLCAt
MSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAg
ICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0x
LCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAg
ICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAt
MSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAg
ICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAt
MSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAg
ICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEs
ICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0g
IC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0x
LCAgICAgIC0xLAotICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwgICAgICAtMSwgICAgICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEs
ICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsCi0gIC0xLCAgICAgIC0xLCAgICAg
IC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLCAgICAgIC0xLAotICAtMSwg
ICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAgICAtMSwgICAg
ICAtMSwKLSAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEsICAgICAgLTEs
ICAgICAgLTEsICAgICAgLTEKLX07Ci0KLWludCBXZWJTYWZlQmFzZTY0VW5lc2NhcGUoY29uc3Qg
Y2hhciAqc3JjLCBpbnQgc3pzcmMsIGNoYXIgKmRlc3QsIGludCBzemRlc3QpIHsKLSAgcmV0dXJu
IEJhc2U2NFVuZXNjYXBlSW50ZXJuYWwoc3JjLCBzenNyYywgZGVzdCwgc3pkZXN0LCBrVW5XZWJT
YWZlQmFzZTY0KTsKLX0KLQotc3RhdGljIGJvb2wgQmFzZTY0VW5lc2NhcGVJbnRlcm5hbChjb25z
dCBjaGFyKiBzcmMsIGludCBzbGVuLCBzdHJpbmcqIGRlc3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyKiB1bmJhc2U2NCkgewotICAvLyBEZXRl
cm1pbmUgdGhlIHNpemUgb2YgdGhlIG91dHB1dCBzdHJpbmcuICBCYXNlNjQgZW5jb2RlcyBldmVy
eSAzIGJ5dGVzIGludG8KLSAgLy8gNCBjaGFyYWN0ZXJzLiAgYW55IGxlZnRvdmVyIGNoYXJzIGFy
ZSBhZGRlZCBkaXJlY3RseSBmb3IgZ29vZCBtZWFzdXJlLgotICAvLyBUaGlzIGlzIGRvY3VtZW50
ZWQgaW4gdGhlIGJhc2U2NCBSRkM6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1NDgK
LSAgY29uc3QgaW50IGRlc3RfbGVuID0gMyAqIChzbGVuIC8gNCkgKyAoc2xlbiAlIDQpOwotCi0g
IGRlc3QtPnJlc2l6ZShkZXN0X2xlbik7Ci0KLSAgLy8gV2UgYXJlIGdldHRpbmcgdGhlIGRlc3Rp
bmF0aW9uIGJ1ZmZlciBieSBnZXR0aW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlCi0gIC8vIHN0cmlu
ZyBhbmQgY29udmVydGluZyBpdCBpbnRvIGEgY2hhciAqLgotICBjb25zdCBpbnQgbGVuID0gQmFz
ZTY0VW5lc2NhcGVJbnRlcm5hbChzcmMsIHNsZW4sIHN0cmluZ19hc19hcnJheShkZXN0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9sZW4sIHVuYmFzZTY0
KTsKLSAgaWYgKGxlbiA8IDApIHsKLSAgICBkZXN0LT5jbGVhcigpOwotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotCi0gIC8vIGNvdWxkIGJlIHNob3J0ZXIgaWYgdGhlcmUgd2FzIHBhZGRpbmcKLSAg
R09PR0xFX0RDSEVDS19MRShsZW4sIGRlc3RfbGVuKTsKLSAgZGVzdC0+ZXJhc2UobGVuKTsKLQot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCYXNlNjRVbmVzY2FwZShTdHJpbmdQaWVjZSBzcmMs
IHN0cmluZyogZGVzdCkgewotICByZXR1cm4gQmFzZTY0VW5lc2NhcGVJbnRlcm5hbChzcmMuZGF0
YSgpLCBzcmMuc2l6ZSgpLCBkZXN0LCBrVW5CYXNlNjQpOwotfQotCi1ib29sIFdlYlNhZmVCYXNl
NjRVbmVzY2FwZShTdHJpbmdQaWVjZSBzcmMsIHN0cmluZyogZGVzdCkgewotICByZXR1cm4gQmFz
ZTY0VW5lc2NhcGVJbnRlcm5hbChzcmMuZGF0YSgpLCBzcmMuc2l6ZSgpLCBkZXN0LCBrVW5XZWJT
YWZlQmFzZTY0KTsKLX0KLQotaW50IEJhc2U2NEVzY2FwZUludGVybmFsKGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNyYywgaW50IHN6c3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRl
c3QsIGludCBzemRlc3QsIGNvbnN0IGNoYXIgKmJhc2U2NCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGRvX3BhZGRpbmcpIHsKLSAgc3RhdGljIGNvbnN0IGNoYXIga1BhZDY0ID0gJz0n
OwotCi0gIGlmIChzenNyYyA8PSAwKSByZXR1cm4gMDsKLQotICBpZiAoc3pzcmMgKiA0ID4gc3pk
ZXN0ICogMykgcmV0dXJuIDA7Ci0KLSAgY2hhciAqY3VyX2Rlc3QgPSBkZXN0OwotICBjb25zdCB1
bnNpZ25lZCBjaGFyICpjdXJfc3JjID0gc3JjOwotCi0gIGNoYXIgKmxpbWl0X2Rlc3QgPSBkZXN0
ICsgc3pkZXN0OwotICBjb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdF9zcmMgPSBzcmMgKyBzenNy
YzsKLQotICAvLyBUaHJlZSBieXRlcyBvZiBkYXRhIGVuY29kZXMgdG8gZm91ciBjaGFyYWN0ZXJz
IG9mIGN5cGhlcnRleHQuCi0gIC8vIFNvIHdlIGNhbiBwdW1wIHRocm91Z2ggdGhyZWUtYnl0ZSBj
aHVua3MgYXRvbWljYWxseS4KLSAgd2hpbGUgKGN1cl9zcmMgPCBsaW1pdF9zcmMgLSAzKSB7ICAv
LyBrZWVwIGdvaW5nIGFzIGxvbmcgYXMgd2UgaGF2ZSA+PSAzMiBiaXRzCi0gICAgdWludDMyIGlu
ID0gQmlnRW5kaWFuOjpMb2FkMzIoY3VyX3NyYykgPj4gODsKLQotICAgIGN1cl9kZXN0WzBdID0g
YmFzZTY0W2luID4+IDE4XTsKLSAgICBpbiAmPSAweDNGRkZGOwotICAgIGN1cl9kZXN0WzFdID0g
YmFzZTY0W2luID4+IDEyXTsKLSAgICBpbiAmPSAweEZGRjsKLSAgICBjdXJfZGVzdFsyXSA9IGJh
c2U2NFtpbiA+PiA2XTsKLSAgICBpbiAmPSAweDNGOwotICAgIGN1cl9kZXN0WzNdID0gYmFzZTY0
W2luXTsKLQotICAgIGN1cl9kZXN0ICs9IDQ7Ci0gICAgY3VyX3NyYyArPSAzOwotICB9Ci0gIC8v
IFRvIHNhdmUgdGltZSwgd2UgZGlkbid0IHVwZGF0ZSBzemRlc3Qgb3Igc3pzcmMgaW4gdGhlIGxv
b3AuICBTbyBkbyBpdCBub3cuCi0gIHN6ZGVzdCA9IGxpbWl0X2Rlc3QgLSBjdXJfZGVzdDsKLSAg
c3pzcmMgPSBsaW1pdF9zcmMgLSBjdXJfc3JjOwotCi0gIC8qIG5vdyBkZWFsIHdpdGggdGhlIHRh
aWwgKDw9MyBieXRlcykgKi8KLSAgc3dpdGNoIChzenNyYykgewotICAgIGNhc2UgMDoKLSAgICAg
IC8vIE5vdGhpbmcgbGVmdDsgbm90aGluZyBtb3JlIHRvIGRvLgotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAxOiB7Ci0gICAgICAvLyBPbmUgYnl0ZSBsZWZ0OiB0aGlzIGVuY29kZXMgdG8gdHdvIGNo
YXJhY3RlcnMsIGFuZCAob3B0aW9uYWxseSkKLSAgICAgIC8vIHR3byBwYWQgY2hhcmFjdGVycyB0
byByb3VuZCBvdXQgdGhlIGZvdXItY2hhcmFjdGVyIGN5cGhlcmJsb2NrLgotICAgICAgaWYgKChz
emRlc3QgLT0gMikgPCAwKSByZXR1cm4gMDsKLSAgICAgIHVpbnQzMiBpbiA9IGN1cl9zcmNbMF07
Ci0gICAgICBjdXJfZGVzdFswXSA9IGJhc2U2NFtpbiA+PiAyXTsKLSAgICAgIGluICY9IDB4MzsK
LSAgICAgIGN1cl9kZXN0WzFdID0gYmFzZTY0W2luIDw8IDRdOwotICAgICAgY3VyX2Rlc3QgKz0g
MjsKLSAgICAgIGlmIChkb19wYWRkaW5nKSB7Ci0gICAgICAgIGlmICgoc3pkZXN0IC09IDIpIDwg
MCkgcmV0dXJuIDA7Ci0gICAgICAgIGN1cl9kZXN0WzBdID0ga1BhZDY0OwotICAgICAgICBjdXJf
ZGVzdFsxXSA9IGtQYWQ2NDsKLSAgICAgICAgY3VyX2Rlc3QgKz0gMjsKLSAgICAgIH0KLSAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIDI6IHsKLSAgICAgIC8vIFR3byBieXRlcyBsZWZ0OiB0
aGlzIGVuY29kZXMgdG8gdGhyZWUgY2hhcmFjdGVycywgYW5kIChvcHRpb25hbGx5KQotICAgICAg
Ly8gb25lIHBhZCBjaGFyYWN0ZXIgdG8gcm91bmQgb3V0IHRoZSBmb3VyLWNoYXJhY3RlciBjeXBo
ZXJibG9jay4KLSAgICAgIGlmICgoc3pkZXN0IC09IDMpIDwgMCkgcmV0dXJuIDA7Ci0gICAgICB1
aW50MzIgaW4gPSBCaWdFbmRpYW46OkxvYWQxNihjdXJfc3JjKTsKLSAgICAgIGN1cl9kZXN0WzBd
ID0gYmFzZTY0W2luID4+IDEwXTsKLSAgICAgIGluICY9IDB4M0ZGOwotICAgICAgY3VyX2Rlc3Rb
MV0gPSBiYXNlNjRbaW4gPj4gNF07Ci0gICAgICBpbiAmPSAweDAwRjsKLSAgICAgIGN1cl9kZXN0
WzJdID0gYmFzZTY0W2luIDw8IDJdOwotICAgICAgY3VyX2Rlc3QgKz0gMzsKLSAgICAgIGlmIChk
b19wYWRkaW5nKSB7Ci0gICAgICAgIGlmICgoc3pkZXN0IC09IDEpIDwgMCkgcmV0dXJuIDA7Ci0g
ICAgICAgIGN1cl9kZXN0WzBdID0ga1BhZDY0OwotICAgICAgICBjdXJfZGVzdCArPSAxOwotICAg
ICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgMzogewotICAgICAgLy8gVGhyZWUg
Ynl0ZXMgbGVmdDogc2FtZSBhcyBpbiB0aGUgYmlnIGxvb3AgYWJvdmUuICBXZSBjYW4ndCBkbyB0
aGlzIGluCi0gICAgICAvLyB0aGUgbG9vcCBiZWNhdXNlIHRoZSBsb29wIGFib3ZlIGFsd2F5cyBy
ZWFkcyA0IGJ5dGVzLCBhbmQgdGhlIGZvdXJ0aAotICAgICAgLy8gYnl0ZSBpcyBwYXN0IHRoZSBl
bmQgb2YgdGhlIGlucHV0LgotICAgICAgaWYgKChzemRlc3QgLT0gNCkgPCAwKSByZXR1cm4gMDsK
LSAgICAgIHVpbnQzMiBpbiA9IChjdXJfc3JjWzBdIDw8IDE2KSArIEJpZ0VuZGlhbjo6TG9hZDE2
KGN1cl9zcmMgKyAxKTsKLSAgICAgIGN1cl9kZXN0WzBdID0gYmFzZTY0W2luID4+IDE4XTsKLSAg
ICAgIGluICY9IDB4M0ZGRkY7Ci0gICAgICBjdXJfZGVzdFsxXSA9IGJhc2U2NFtpbiA+PiAxMl07
Ci0gICAgICBpbiAmPSAweEZGRjsKLSAgICAgIGN1cl9kZXN0WzJdID0gYmFzZTY0W2luID4+IDZd
OwotICAgICAgaW4gJj0gMHgzRjsKLSAgICAgIGN1cl9kZXN0WzNdID0gYmFzZTY0W2luXTsKLSAg
ICAgIGN1cl9kZXN0ICs9IDQ7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAg
ICAgIC8vIFNob3VsZCBub3QgYmUgcmVhY2hlZDogYmxvY2tzIG9mIDQgYnl0ZXMgYXJlIGhhbmRs
ZWQKLSAgICAgIC8vIGluIHRoZSB3aGlsZSBsb29wIGJlZm9yZSB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCi0gICAgICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiTG9naWMgcHJvYmxlbT8gc3pzcmMgPSAi
IDw8IHN6c3JjOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIChjdXJfZGVzdCAtIGRlc3Qp
OwotfQotCi1zdGF0aWMgY29uc3QgY2hhciBrQmFzZTY0Q2hhcnNbXSA9Ci0iQUJDREVGR0hJSktM
TU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7Ci0K
LXN0YXRpYyBjb25zdCBjaGFyIGtXZWJTYWZlQmFzZTY0Q2hhcnNbXSA9Ci0iQUJDREVGR0hJSktM
TU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyI7Ci0K
LWludCBCYXNlNjRFc2NhcGUoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgc3pzcmMsIGNo
YXIgKmRlc3QsIGludCBzemRlc3QpIHsKLSAgcmV0dXJuIEJhc2U2NEVzY2FwZUludGVybmFsKHNy
Yywgc3pzcmMsIGRlc3QsIHN6ZGVzdCwga0Jhc2U2NENoYXJzLCB0cnVlKTsKLX0KLWludCBXZWJT
YWZlQmFzZTY0RXNjYXBlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IHN6c3JjLCBjaGFy
ICpkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN6ZGVzdCwgYm9vbCBkb19wYWRk
aW5nKSB7Ci0gIHJldHVybiBCYXNlNjRFc2NhcGVJbnRlcm5hbChzcmMsIHN6c3JjLCBkZXN0LCBz
emRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrV2ViU2FmZUJhc2U2NENoYXJz
LCBkb19wYWRkaW5nKTsKLX0KLQotdm9pZCBCYXNlNjRFc2NhcGVJbnRlcm5hbChjb25zdCB1bnNp
Z25lZCBjaGFyKiBzcmMsIGludCBzenNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
aW5nKiBkZXN0LCBib29sIGRvX3BhZGRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGJhc2U2NF9jaGFycykgewotICBjb25zdCBpbnQgY2FsY19lc2NhcGVkX3NpemUg
PQotICAgIENhbGN1bGF0ZUJhc2U2NEVzY2FwZWRMZW4oc3pzcmMsIGRvX3BhZGRpbmcpOwotICBk
ZXN0LT5yZXNpemUoY2FsY19lc2NhcGVkX3NpemUpOwotICBjb25zdCBpbnQgZXNjYXBlZF9sZW4g
PSBCYXNlNjRFc2NhcGVJbnRlcm5hbChzcmMsIHN6c3JjLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfYXNfYXJyYXkoZGVzdCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPnNpemUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0X2NoYXJz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19wYWRk
aW5nKTsKLSAgR09PR0xFX0RDSEVDS19FUShjYWxjX2VzY2FwZWRfc2l6ZSwgZXNjYXBlZF9sZW4p
OwotICBkZXN0LT5lcmFzZShlc2NhcGVkX2xlbik7Ci19Ci0KLXZvaWQgQmFzZTY0RXNjYXBlKGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IHN6c3JjLAotICAgICAgICAgICAgICAgICAgc3Ry
aW5nKiBkZXN0LCBib29sIGRvX3BhZGRpbmcpIHsKLSAgQmFzZTY0RXNjYXBlSW50ZXJuYWwoc3Jj
LCBzenNyYywgZGVzdCwgZG9fcGFkZGluZywga0Jhc2U2NENoYXJzKTsKLX0KLQotdm9pZCBXZWJT
YWZlQmFzZTY0RXNjYXBlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IHN6c3JjLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAqZGVzdCwgYm9vbCBkb19wYWRkaW5nKSB7Ci0g
IEJhc2U2NEVzY2FwZUludGVybmFsKHNyYywgc3pzcmMsIGRlc3QsIGRvX3BhZGRpbmcsIGtXZWJT
YWZlQmFzZTY0Q2hhcnMpOwotfQotCi12b2lkIEJhc2U2NEVzY2FwZShTdHJpbmdQaWVjZSBzcmMs
IHN0cmluZyogZGVzdCkgewotICBCYXNlNjRFc2NhcGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oc3JjLmRhdGEoKSksCi0gICAgICAgICAgICAgICBzcmMuc2l6ZSgpLCBk
ZXN0LCB0cnVlKTsKLX0KLQotdm9pZCBXZWJTYWZlQmFzZTY0RXNjYXBlKFN0cmluZ1BpZWNlIHNy
Yywgc3RyaW5nKiBkZXN0KSB7Ci0gIFdlYlNhZmVCYXNlNjRFc2NhcGUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3JjLmRhdGEoKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgc3JjLnNpemUoKSwgZGVzdCwgZmFsc2UpOwotfQotCi12b2lkIFdlYlNhZmVCYXNlNjRFc2Nh
cGVXaXRoUGFkZGluZyhTdHJpbmdQaWVjZSBzcmMsIHN0cmluZyogZGVzdCkgewotICBXZWJTYWZl
QmFzZTY0RXNjYXBlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHNyYy5k
YXRhKCkpLAotICAgICAgICAgICAgICAgICAgICAgIHNyYy5zaXplKCksIGRlc3QsIHRydWUpOwot
fQotCi0vLyBIZWxwZXIgdG8gYXBwZW5kIGEgVW5pY29kZSBjb2RlIHBvaW50IHRvIGEgc3RyaW5n
IGFzIFVURjgsIHdpdGhvdXQgYnJpbmdpbmcKLS8vIGluIGFueSBleHRlcm5hbCBkZXBlbmRlbmNp
ZXMuCi1pbnQgRW5jb2RlQXNVVEY4Q2hhcih1aW50MzIgY29kZV9wb2ludCwgY2hhciogb3V0cHV0
KSB7Ci0gIHVpbnQzMiB0bXAgPSAwOwotICBpbnQgbGVuID0gMDsKLSAgaWYgKGNvZGVfcG9pbnQg
PD0gMHg3ZikgewotICAgIHRtcCA9IGNvZGVfcG9pbnQ7Ci0gICAgbGVuID0gMTsKLSAgfSBlbHNl
IGlmIChjb2RlX3BvaW50IDw9IDB4MDdmZikgewotICAgIHRtcCA9IDB4MDAwMGMwODAgfAotICAg
ICAgICAoKGNvZGVfcG9pbnQgJiAweDA3YzApIDw8IDIpIHwKLSAgICAgICAgKGNvZGVfcG9pbnQg
JiAweDAwM2YpOwotICAgIGxlbiA9IDI7Ci0gIH0gZWxzZSBpZiAoY29kZV9wb2ludCA8PSAweGZm
ZmYpIHsKLSAgICB0bXAgPSAweDAwZTA4MDgwIHwKLSAgICAgICAgKChjb2RlX3BvaW50ICYgMHhm
MDAwKSA8PCA0KSB8Ci0gICAgICAgICgoY29kZV9wb2ludCAmIDB4MGZjMCkgPDwgMikgfAotICAg
ICAgICAoY29kZV9wb2ludCAmIDB4MDAzZik7Ci0gICAgbGVuID0gMzsKLSAgfSBlbHNlIHsKLSAg
ICAvLyBVVEYtMTYgaXMgb25seSBkZWZpbmVkIGZvciBjb2RlIHBvaW50cyB1cCB0byAweDEwRkZG
RiwgYW5kIFVURi04IGlzCi0gICAgLy8gbm9ybWFsbHkgb25seSBkZWZpbmVkIHVwIHRvIHRoZXJl
IGFzIHdlbGwuCi0gICAgdG1wID0gMHhmMDgwODA4MCB8Ci0gICAgICAgICgoY29kZV9wb2ludCAm
IDB4MWMwMDAwKSA8PCA2KSB8Ci0gICAgICAgICgoY29kZV9wb2ludCAmIDB4MDNmMDAwKSA8PCA0
KSB8Ci0gICAgICAgICgoY29kZV9wb2ludCAmIDB4MDAwZmMwKSA8PCAyKSB8Ci0gICAgICAgIChj
b2RlX3BvaW50ICYgMHgwMDNmKTsKLSAgICBsZW4gPSA0OwotICB9Ci0gIHRtcCA9IGdodG9ubCh0
bXApOwotICBtZW1jcHkob3V0cHV0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmdG1w
KSArIHNpemVvZih0bXApIC0gbGVuLCBsZW4pOwotICByZXR1cm4gbGVuOwotfQotCi0vLyBUYWJs
ZSBvZiBVVEYtOCBjaGFyYWN0ZXIgbGVuZ3RocywgYmFzZWQgb24gZmlyc3QgYnl0ZQotc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGNoYXIga1VURjhMZW5UYmxbMjU2XSA9IHsKLSAgMSwxLDEsMSwxLDEs
MSwxLCAxLDEsMSwxLDEsMSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwgMSwxLDEsMSwxLDEsMSwxLAot
ICAxLDEsMSwxLDEsMSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwgMSwxLDEsMSwxLDEsMSwxLCAxLDEs
MSwxLDEsMSwxLDEsCi0gIDEsMSwxLDEsMSwxLDEsMSwgMSwxLDEsMSwxLDEsMSwxLCAxLDEsMSwx
LDEsMSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwKLSAgMSwxLDEsMSwxLDEsMSwxLCAxLDEsMSwxLDEs
MSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwgMSwxLDEsMSwxLDEsMSwxLAotCi0gIDEsMSwxLDEsMSwx
LDEsMSwgMSwxLDEsMSwxLDEsMSwxLCAxLDEsMSwxLDEsMSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwK
LSAgMSwxLDEsMSwxLDEsMSwxLCAxLDEsMSwxLDEsMSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwgMSwx
LDEsMSwxLDEsMSwxLAotICAyLDIsMiwyLDIsMiwyLDIsIDIsMiwyLDIsMiwyLDIsMiwgMiwyLDIs
MiwyLDIsMiwyLCAyLDIsMiwyLDIsMiwyLDIsCi0gIDMsMywzLDMsMywzLDMsMywgMywzLDMsMywz
LDMsMywzLCA0LDQsNCw0LDQsNCw0LDQsIDQsNCw0LDQsNCw0LDQsNAotfTsKLQotLy8gUmV0dXJu
IGxlbmd0aCBvZiBhIHNpbmdsZSBVVEYtOCBzb3VyY2UgY2hhcmFjdGVyCi1pbnQgVVRGOEZpcnN0
TGV0dGVyTnVtQnl0ZXMoY29uc3QgY2hhciogc3JjLCBpbnQgbGVuKSB7Ci0gIGlmIChsZW4gPT0g
MCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIHJldHVybiBrVVRGOExlblRibFsqcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OCo+KHNyYyldOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9i
dWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy9zdHJ1dGlsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmRkNjExMDMwZmY0YmM2ZWY5NWJjMjg1NWFl
NjcyN2E5NGIyNDAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw4NzYgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIGZy
b20gZ29vZ2xlMy9zdHJpbmdzL3N0cnV0aWwuaAotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9T
VFVCU19TVFJVVElMX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfU1RVQlNfU1RSVVRJTF9I
X18KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL3N0cmluZ3BpZWNlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLQotI2lmZGVmIF9NU0NfVkVSCi0jZGVmaW5lIHN0cnRvbGwgIF9zdHJ0b2k2NAot
I2RlZmluZSBzdHJ0b3VsbCBfc3RydG91aTY0Ci0jZWxpZiBkZWZpbmVkKF9fREVDQ1hYKSAmJiBk
ZWZpbmVkKF9fb3NmX18pCi0vLyBIUCBDKysgb24gVHJ1NjQgZG9lcyBub3QgaGF2ZSBzdHJ0b2xs
LCBidXQgc3RydG9sIGlzIGFscmVhZHkgNjQtYml0LgotI2RlZmluZSBzdHJ0b2xsIHN0cnRvbAot
I2RlZmluZSBzdHJ0b3VsbCBzdHJ0b3VsCi0jZW5kaWYKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
YXNjaWlfaXNhbG51bSgpCi0vLyAgICBDaGVjayBpZiBhbiBBU0NJSSBjaGFyYWN0ZXIgaXMgYWxw
aGFudW1lcmljLiAgV2UgY2FuJ3QgdXNlIGN0eXBlJ3MKLS8vICAgIGlzYWxudW0oKSBiZWNhdXNl
IGl0IGlzIGFmZmVjdGVkIGJ5IGxvY2FsZS4gIFRoaXMgZnVuY3Rpb24gaXMgYXBwbGllZAotLy8g
ICAgdG8gaWRlbnRpZmllcnMgaW4gdGhlIHByb3RvY29sIGJ1ZmZlciBsYW5ndWFnZSwgbm90IHRv
IG5hdHVyYWwtbGFuZ3VhZ2UKLS8vICAgIHN0cmluZ3MsIHNvIGxvY2FsZSBzaG91bGQgbm90IGJl
IHRha2VuIGludG8gYWNjb3VudC4KLS8vIGFzY2lpX2lzZGlnaXQoKQotLy8gICAgTGlrZSBhYm92
ZSwgYnV0IG9ubHkgYWNjZXB0cyBkaWdpdHMuCi0vLyBhc2NpaV9pc3NwYWNlKCkKLS8vICAgIENo
ZWNrIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBzcGFjZSBjaGFyYWN0ZXIuCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLWlubGluZSBib29sIGFzY2lpX2lzYWxudW0oY2hhciBjKSB7Ci0gIHJldHVybiAoJ2En
IDw9IGMgJiYgYyA8PSAneicpIHx8Ci0gICAgICAgICAoJ0EnIDw9IGMgJiYgYyA8PSAnWicpIHx8
Ci0gICAgICAgICAoJzAnIDw9IGMgJiYgYyA8PSAnOScpOwotfQotCi1pbmxpbmUgYm9vbCBhc2Np
aV9pc2RpZ2l0KGNoYXIgYykgewotICByZXR1cm4gKCcwJyA8PSBjICYmIGMgPD0gJzknKTsKLX0K
LQotaW5saW5lIGJvb2wgYXNjaWlfaXNzcGFjZShjaGFyIGMpIHsKLSAgcmV0dXJuIGMgPT0gJyAn
IHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHYnIHx8IGMgPT0gJ1xmJyB8fAot
ICAgICAgYyA9PSAnXHInOwotfQotCi1pbmxpbmUgYm9vbCBhc2NpaV9pc3VwcGVyKGNoYXIgYykg
ewotICByZXR1cm4gYyA+PSAnQScgJiYgYyA8PSAnWic7Ci19Ci0KLWlubGluZSBib29sIGFzY2lp
X2lzbG93ZXIoY2hhciBjKSB7Ci0gIHJldHVybiBjID49ICdhJyAmJiBjIDw9ICd6JzsKLX0KLQot
aW5saW5lIGNoYXIgYXNjaWlfdG91cHBlcihjaGFyIGMpIHsKLSAgcmV0dXJuIGFzY2lpX2lzbG93
ZXIoYykgPyBjIC0gKCdhJyAtICdBJykgOiBjOwotfQotCi1pbmxpbmUgY2hhciBhc2NpaV90b2xv
d2VyKGNoYXIgYykgewotICByZXR1cm4gYXNjaWlfaXN1cHBlcihjKSA/IGMgKyAoJ2EnIC0gJ0En
KSA6IGM7Ci19Ci0KLWlubGluZSBpbnQgaGV4X2RpZ2l0X3RvX2ludChjaGFyIGMpIHsKLSAgLyog
QXNzdW1lIEFTQ0lJLiAqLwotICBpbnQgeCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMp
OwotICBpZiAoeCA+ICc5JykgewotICAgIHggKz0gOTsKLSAgfQotICByZXR1cm4geCAmIDB4ZjsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSGFzUHJlZml4U3RyaW5nKCkKLS8vICAgIENoZWNr
IGlmIGEgc3RyaW5nIGJlZ2lucyB3aXRoIGEgZ2l2ZW4gcHJlZml4LgotLy8gU3RyaXBQcmVmaXhT
dHJpbmcoKQotLy8gICAgR2l2ZW4gYSBzdHJpbmcgYW5kIGEgcHV0YXRpdmUgcHJlZml4LCByZXR1
cm5zIHRoZSBzdHJpbmcgbWludXMgdGhlCi0vLyAgICBwcmVmaXggc3RyaW5nIGlmIHRoZSBwcmVm
aXggbWF0Y2hlcywgb3RoZXJ3aXNlIHRoZSBvcmlnaW5hbAotLy8gICAgc3RyaW5nLgotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotaW5saW5lIGJvb2wgSGFzUHJlZml4U3RyaW5nKGNvbnN0IHN0cmluZyYgc3Ry
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcHJlZml4KSB7Ci0g
IHJldHVybiBzdHIuc2l6ZSgpID49IHByZWZpeC5zaXplKCkgJiYKLSAgICAgICAgIHN0ci5jb21w
YXJlKDAsIHByZWZpeC5zaXplKCksIHByZWZpeCkgPT0gMDsKLX0KLQotaW5saW5lIHN0cmluZyBT
dHJpcFByZWZpeFN0cmluZyhjb25zdCBzdHJpbmcmIHN0ciwgY29uc3Qgc3RyaW5nJiBwcmVmaXgp
IHsKLSAgaWYgKEhhc1ByZWZpeFN0cmluZyhzdHIsIHByZWZpeCkpIHsKLSAgICByZXR1cm4gc3Ry
LnN1YnN0cihwcmVmaXguc2l6ZSgpKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gc3RyOwotICB9
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhhc1N1ZmZpeFN0cmluZygpCi0vLyAgICBSZXR1
cm4gdHJ1ZSBpZiBzdHIgZW5kcyBpbiBzdWZmaXguCi0vLyBTdHJpcFN1ZmZpeFN0cmluZygpCi0v
LyAgICBHaXZlbiBhIHN0cmluZyBhbmQgYSBwdXRhdGl2ZSBzdWZmaXgsIHJldHVybnMgdGhlIHN0
cmluZyBtaW51cyB0aGUKLS8vICAgIHN1ZmZpeCBzdHJpbmcgaWYgdGhlIHN1ZmZpeCBtYXRjaGVz
LCBvdGhlcndpc2UgdGhlIG9yaWdpbmFsCi0vLyAgICBzdHJpbmcuCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci1pbmxpbmUgYm9vbCBIYXNTdWZmaXhTdHJpbmcoY29uc3Qgc3RyaW5nJiBzdHIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBzdWZmaXgpIHsKLSAgcmV0dXJuIHN0
ci5zaXplKCkgPj0gc3VmZml4LnNpemUoKSAmJgotICAgICAgICAgc3RyLmNvbXBhcmUoc3RyLnNp
emUoKSAtIHN1ZmZpeC5zaXplKCksIHN1ZmZpeC5zaXplKCksIHN1ZmZpeCkgPT0gMDsKLX0KLQot
aW5saW5lIHN0cmluZyBTdHJpcFN1ZmZpeFN0cmluZyhjb25zdCBzdHJpbmcmIHN0ciwgY29uc3Qg
c3RyaW5nJiBzdWZmaXgpIHsKLSAgaWYgKEhhc1N1ZmZpeFN0cmluZyhzdHIsIHN1ZmZpeCkpIHsK
LSAgICByZXR1cm4gc3RyLnN1YnN0cigwLCBzdHIuc2l6ZSgpIC0gc3VmZml4LnNpemUoKSk7Ci0g
IH0gZWxzZSB7Ci0gICAgcmV0dXJuIHN0cjsKLSAgfQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBTdHJpcFN0cmluZwotLy8gICAgUmVwbGFjZXMgYW55IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJh
Y3RlciAncmVtb3ZlJyAob3IgdGhlIGNoYXJhY3RlcnMKLS8vICAgIGluICdyZW1vdmUnKSB3aXRo
IHRoZSBjaGFyYWN0ZXIgJ3JlcGxhY2V3aXRoJy4KLS8vICAgIEdvb2QgZm9yIGtlZXBpbmcgaHRt
bCBjaGFyYWN0ZXJzIG9yIHByb3RvY29sIGNoYXJhY3RlcnMgKFx0KSBvdXQKLS8vICAgIG9mIHBs
YWNlcyB3aGVyZSB0aGV5IG1pZ2h0IGNhdXNlIGEgcHJvYmxlbS4KLS8vIFN0cmlwV2hpdGVzcGFj
ZQotLy8gICAgUmVtb3ZlcyB3aGl0ZXNwYWNlcyBmcm9tIGJvdGggZW5kcyBvZiB0aGUgZ2l2ZW4g
c3RyaW5nLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTElCUFJPVE9CVUZfRVhQT1JUIHZvaWQgU3RyaXBT
dHJpbmcoc3RyaW5nKiBzLCBjb25zdCBjaGFyKiByZW1vdmUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyIHJlcGxhY2V3aXRoKTsKLQotTElCUFJPVE9CVUZfRVhQT1JU
IHZvaWQgU3RyaXBXaGl0ZXNwYWNlKHN0cmluZyogcyk7Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gTG93ZXJTdHJpbmcoKQotLy8gVXBwZXJTdHJpbmcoKQotLy8gVG9VcHBlcigpCi0vLyAgICBD
b252ZXJ0IHRoZSBjaGFyYWN0ZXJzIGluICJzIiB0byBsb3dlcmNhc2Ugb3IgdXBwZXJjYXNlLiAg
QVNDSUktb25seToKLS8vICAgIHRoZXNlIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGlnbm9yZSBs
b2NhbGUgYmVjYXVzZSB0aGV5IGFyZSBhcHBsaWVkIHRvCi0vLyAgICBpZGVudGlmaWVycyB1c2Vk
IGluIHRoZSBQcm90b2NvbCBCdWZmZXIgbGFuZ3VhZ2UsIG5vdCB0byBuYXR1cmFsLWxhbmd1YWdl
Ci0vLyAgICBzdHJpbmdzLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pbmxpbmUgdm9pZCBMb3dlclN0
cmluZyhzdHJpbmcgKiBzKSB7Ci0gIHN0cmluZzo6aXRlcmF0b3IgZW5kID0gcy0+ZW5kKCk7Ci0g
IGZvciAoc3RyaW5nOjppdGVyYXRvciBpID0gcy0+YmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewot
ICAgIC8vIHRvbG93ZXIoKSBjaGFuZ2VzIGJhc2VkIG9uIGxvY2FsZS4gIFdlIGRvbid0IHdhbnQg
dGhpcyEKLSAgICBpZiAoJ0EnIDw9ICppICYmICppIDw9ICdaJykgKmkgKz0gJ2EnIC0gJ0EnOwot
ICB9Ci19Ci0KLWlubGluZSB2b2lkIFVwcGVyU3RyaW5nKHN0cmluZyAqIHMpIHsKLSAgc3RyaW5n
OjppdGVyYXRvciBlbmQgPSBzLT5lbmQoKTsKLSAgZm9yIChzdHJpbmc6Oml0ZXJhdG9yIGkgPSBz
LT5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgLy8gdG91cHBlcigpIGNoYW5nZXMgYmFz
ZWQgb24gbG9jYWxlLiAgV2UgZG9uJ3Qgd2FudCB0aGlzIQotICAgIGlmICgnYScgPD0gKmkgJiYg
KmkgPD0gJ3onKSAqaSArPSAnQScgLSAnYSc7Ci0gIH0KLX0KLQotaW5saW5lIHN0cmluZyBUb1Vw
cGVyKGNvbnN0IHN0cmluZyYgcykgewotICBzdHJpbmcgb3V0ID0gczsKLSAgVXBwZXJTdHJpbmco
Jm91dCk7Ci0gIHJldHVybiBvdXQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFN0cmluZ1Jl
cGxhY2UoKQotLy8gICAgR2l2ZSBtZSBhIHN0cmluZyBhbmQgdHdvIHBhdHRlcm5zICJvbGQiIGFu
ZCAibmV3IiwgYW5kIEkgcmVwbGFjZQotLy8gICAgdGhlIGZpcnN0IGluc3RhbmNlIG9mICJvbGQi
IGluIHRoZSBzdHJpbmcgd2l0aCAibmV3IiwgaWYgaXQKLS8vICAgIGV4aXN0cy4gIFJFVFVSTiBh
IG5ldyBzdHJpbmcsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcmVwbGFjZW1lbnQKLS8vICAg
IGhhcHBlbmVkIG9yIG5vdC4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTElCUFJPVE9CVUZfRVhQT1JU
IHN0cmluZyBTdHJpbmdSZXBsYWNlKGNvbnN0IHN0cmluZyYgcywgY29uc3Qgc3RyaW5nJiBvbGRz
dWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5n
JiBuZXdzdWIsIGJvb2wgcmVwbGFjZV9hbGwpOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTcGxp
dFN0cmluZ1VzaW5nKCkKLS8vICAgIFNwbGl0IGEgc3RyaW5nIHVzaW5nIGEgY2hhcmFjdGVyIGRl
bGltaXRlci4gQXBwZW5kIHRoZSBjb21wb25lbnRzCi0vLyAgICB0byAncmVzdWx0Jy4gIElmIHRo
ZXJlIGFyZSBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzLCB0aGlzIGZ1bmN0aW9uIHNraXBzCi0vLyAg
ICBvdmVyIGFsbCBvZiB0aGVtLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTElCUFJPVE9CVUZfRVhQT1JU
IHZvaWQgU3BsaXRTdHJpbmdVc2luZyhjb25zdCBzdHJpbmcmIGZ1bGwsIGNvbnN0IGNoYXIqIGRl
bGltLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8c3Ry
aW5nPiogcmVzKTsKLQotLy8gU3BsaXQgYSBzdHJpbmcgdXNpbmcgb25lIG9yIG1vcmUgYnl0ZSBk
ZWxpbWl0ZXJzLCBwcmVzZW50ZWQKLS8vIGFzIGEgbnVsLXRlcm1pbmF0ZWQgYyBzdHJpbmcuIEFw
cGVuZCB0aGUgY29tcG9uZW50cyB0byAncmVzdWx0Jy4KLS8vIElmIHRoZXJlIGFyZSBjb25zZWN1
dGl2ZSBkZWxpbWl0ZXJzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCi0vLyBjb3JyZXNwb25k
aW5nIGVtcHR5IHN0cmluZ3MuICBJZiB5b3Ugd2FudCB0byBkcm9wIHRoZSBlbXB0eQotLy8gc3Ry
aW5ncywgdHJ5IFNwbGl0U3RyaW5nVXNpbmcoKS4KLS8vCi0vLyBJZiAiZnVsbCIgaXMgdGhlIGVt
cHR5IHN0cmluZywgeWllbGRzIGFuIGVtcHR5IHN0cmluZyBhcyB0aGUgb25seSB2YWx1ZS4KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLUxJQlBST1RPQlVGX0VYUE9SVCB2b2lkIFNwbGl0U3RyaW5nQWxsb3dF
bXB0eShjb25zdCBzdHJpbmcmIGZ1bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZGVsaW0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4qIHJlc3VsdCk7Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vIFNwbGl0KCkKLS8vICAgIFNwbGl0IGEgc3RyaW5nIHVzaW5nIGEgY2hh
cmFjdGVyIGRlbGltaXRlci4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWlubGluZSB2ZWN0b3I8c3RyaW5n
PiBTcGxpdCgKLSAgICBjb25zdCBzdHJpbmcmIGZ1bGwsIGNvbnN0IGNoYXIqIGRlbGltLCBib29s
IHNraXBfZW1wdHkgPSB0cnVlKSB7Ci0gIHZlY3RvcjxzdHJpbmc+IHJlc3VsdDsKLSAgaWYgKHNr
aXBfZW1wdHkpIHsKLSAgICBTcGxpdFN0cmluZ1VzaW5nKGZ1bGwsIGRlbGltLCAmcmVzdWx0KTsK
LSAgfSBlbHNlIHsKLSAgICBTcGxpdFN0cmluZ0FsbG93RW1wdHkoZnVsbCwgZGVsaW0sICZyZXN1
bHQpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEpv
aW5TdHJpbmdzKCkKLS8vICAgIFRoZXNlIG1ldGhvZHMgY29uY2F0ZW5hdGUgYSB2ZWN0b3Igb2Yg
c3RyaW5ncyBpbnRvIGEgQysrIHN0cmluZywgdXNpbmcKLS8vICAgIHRoZSBDLXN0cmluZyAiZGVs
aW0iIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gY29tcG9uZW50cy4gVGhlcmUgYXJlIHR3bwotLy8g
ICAgZmxhdm9ycyBvZiB0aGUgZnVuY3Rpb24sIG9uZSBmbGF2b3IgcmV0dXJucyB0aGUgY29uY2F0
ZW5hdGVkIHN0cmluZywKLS8vICAgIGFub3RoZXIgdGFrZXMgYSBwb2ludGVyIHRvIHRoZSB0YXJn
ZXQgc3RyaW5nLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlCi0vLyAgICB0YXJnZXQgc3RyaW5nIGlz
IGNsZWFyZWQgYW5kIG92ZXJ3cml0dGVuLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTElCUFJPVE9CVUZf
RVhQT1JUIHZvaWQgSm9pblN0cmluZ3MoY29uc3QgdmVjdG9yPHN0cmluZz4mIGNvbXBvbmVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZWxpbSwg
c3RyaW5nKiByZXN1bHQpOwotCi1pbmxpbmUgc3RyaW5nIEpvaW5TdHJpbmdzKGNvbnN0IHZlY3Rv
cjxzdHJpbmc+JiBjb21wb25lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBkZWxpbSkgewotICBzdHJpbmcgcmVzdWx0OwotICBKb2luU3RyaW5ncyhjb21wb25lbnRz
LCBkZWxpbSwgJnJlc3VsdCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vIFVuZXNjYXBlQ0VzY2FwZVNlcXVlbmNlcygpCi0vLyAgICBDb3BpZXMgInNvdXJjZSIg
dG8gImRlc3QiLCByZXdyaXRpbmcgQy1zdHlsZSBlc2NhcGUgc2VxdWVuY2VzCi0vLyAgICAtLSAn
XG4nLCAnXHInLCAnXFwnLCAnXG9vbycsIGV0YyAtLSB0byB0aGVpciBBU0NJSQotLy8gICAgZXF1
aXZhbGVudHMuICAiZGVzdCIgbXVzdCBiZSBzdWZmaWNpZW50bHkgbGFyZ2UgdG8gaG9sZCBhbGwK
LS8vICAgIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByZXdyaXR0ZW4gc3RyaW5nIChpLmUuIGF0IGxl
YXN0IGFzIGxhcmdlCi0vLyAgICBhcyBzdHJsZW4oc291cmNlKSArIDEgc2hvdWxkIGJlIHNhZmUs
IHNpbmNlIHRoZSByZXBsYWNlbWVudHMKLS8vICAgIGFyZSBhbHdheXMgc2hvcnRlciB0aGFuIHRo
ZSBvcmlnaW5hbCBlc2NhcGVkIHNlcXVlbmNlcykuICBJdCdzCi0vLyAgICBzYWZlIGZvciBzb3Vy
Y2UgYW5kIGRlc3QgdG8gYmUgdGhlIHNhbWUuICBSRVRVUk5TIHRoZSBsZW5ndGgKLS8vICAgIG9m
IGRlc3QuCi0vLwotLy8gICAgSXQgYWxsb3dzIGhleCBzZXF1ZW5jZXMgXHhoaCwgb3IgZ2VuZXJh
bGx5IFx4aGhoaGggd2l0aCBhbgotLy8gICAgYXJiaXRyYXJ5IG51bWJlciBvZiBoZXggZGlnaXRz
LCBidXQgYWxsIG9mIHRoZW0gdG9nZXRoZXIgbXVzdAotLy8gICAgc3BlY2lmeSBhIHZhbHVlIG9m
IGEgc2luZ2xlIGJ5dGUgKGUuZy4gXHgwMDQ1IGlzIGVxdWl2YWxlbnQKLS8vICAgIHRvIFx4NDUs
IGFuZCBceDEyMzQgaXMgZXJyb25lb3VzKS4KLS8vCi0vLyAgICBJdCBhbHNvIGFsbG93cyBlc2Nh
cGUgc2VxdWVuY2VzIG9mIHRoZSBmb3JtIFx1aGhoaCAoZXhhY3RseSBmb3VyCi0vLyAgICBoZXgg
ZGlnaXRzLCB1cHBlciBvciBsb3dlciBjYXNlKSBvciBcVWhoaGhoaGhoIChleGFjdGx5IGVpZ2h0
Ci0vLyAgICBoZXggZGlnaXRzLCB1cHBlciBvciBsb3dlciBjYXNlKSB0byBzcGVjaWZ5IGEgVW5p
Y29kZSBjb2RlCi0vLyAgICBwb2ludC4gVGhlIGRlc3QgYXJyYXkgd2lsbCBjb250YWluIHRoZSBV
VEY4LWVuY29kZWQgdmVyc2lvbiBvZgotLy8gICAgdGhhdCBjb2RlLXBvaW50IChlLmcuLCBpZiBz
b3VyY2UgY29udGFpbnMgXHUyMDE5LCB0aGVuIGRlc3Qgd2lsbAotLy8gICAgY29udGFpbiB0aGUg
dGhyZWUgYnl0ZXMgMHhFMiwgMHg4MCwgYW5kIDB4OTkpLgotLy8KLS8vICAgIEVycm9yczogSW4g
dGhlIGZpcnN0IGZvcm0gb2YgdGhlIGNhbGwsIGVycm9ycyBhcmUgcmVwb3J0ZWQgd2l0aAotLy8g
ICAgTE9HKEVSUk9SKS4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIHNlY29uZCBmb3JtIG9mIHRo
ZSBjYWxsIGlmCi0vLyAgICB0aGUgcG9pbnRlciB0byB0aGUgc3RyaW5nIHZlY3RvciBpcyBOVUxM
OyBvdGhlcndpc2UsIGVycm9yCi0vLyAgICBtZXNzYWdlcyBhcmUgc3RvcmVkIGluIHRoZSB2ZWN0
b3IuIEluIGVpdGhlciBjYXNlLCB0aGUgZWZmZWN0IG9uCi0vLyAgICB0aGUgZGVzdCBhcnJheSBp
cyBub3QgZGVmaW5lZCwgYnV0IHJlc3Qgb2YgdGhlIHNvdXJjZSB3aWxsIGJlCi0vLyAgICBwcm9j
ZXNzZWQuCi0vLyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUxJQlBST1RPQlVGX0VYUE9SVCBpbnQgVW5l
c2NhcGVDRXNjYXBlU2VxdWVuY2VzKGNvbnN0IGNoYXIqIHNvdXJjZSwgY2hhciogZGVzdCk7Ci1M
SUJQUk9UT0JVRl9FWFBPUlQgaW50IFVuZXNjYXBlQ0VzY2FwZVNlcXVlbmNlcyhjb25zdCBjaGFy
KiBzb3VyY2UsIGNoYXIqIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2ZWN0b3I8c3RyaW5nPiAqZXJyb3JzKTsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8gVW5lc2NhcGVDRXNjYXBlU3RyaW5nKCkKLS8vICAgIFRoaXMgZG9lcyB0aGUgc2FtZSB0
aGluZyBhcyBVbmVzY2FwZUNFc2NhcGVTZXF1ZW5jZXMsIGJ1dCBjcmVhdGVzCi0vLyAgICBhIG5l
dyBzdHJpbmcuIFRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBhbGxvY2F0
aW5nCi0vLyAgICBhIGRlc3QgYnVmZmVyLiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvciBub24gcGVy
Zm9ybWFuY2UgY3JpdGljYWwKLS8vICAgIHRhc2tzIHN1Y2ggYXMgcHJpbnRpbmcgZGVidWcgbWVz
c2FnZXMuIEl0IGlzIHNhZmUgZm9yIHNyYyBhbmQgZGVzdAotLy8gICAgdG8gYmUgdGhlIHNhbWUu
Ci0vLwotLy8gICAgVGhlIHNlY29uZCBjYWxsIHN0b3JlcyBpdHMgZXJyb3JzIGluIGEgc3VwcGxp
ZWQgc3RyaW5nIHZlY3Rvci4KLS8vICAgIElmIHRoZSBzdHJpbmcgdmVjdG9yIHBvaW50ZXIgaXMg
TlVMTCwgaXQgcmVwb3J0cyB0aGUgZXJyb3JzIHdpdGggTE9HKCkuCi0vLwotLy8gICAgSW4gdGhl
IGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMsIHRoZSBsZW5ndGggb2YgZGVzdCBpcyByZXR1cm5lZC4g
SW4gdGhlCi0vLyAgICB0aGUgdGhpcmQgY2FsbCwgdGhlIG5ldyBzdHJpbmcgaXMgcmV0dXJuZWQu
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLUxJQlBST1RPQlVGX0VYUE9SVCBpbnQgVW5lc2NhcGVDRXNj
YXBlU3RyaW5nKGNvbnN0IHN0cmluZyYgc3JjLCBzdHJpbmcqIGRlc3QpOwotTElCUFJPVE9CVUZf
RVhQT1JUIGludCBVbmVzY2FwZUNFc2NhcGVTdHJpbmcoY29uc3Qgc3RyaW5nJiBzcmMsIHN0cmlu
ZyogZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZl
Y3RvcjxzdHJpbmc+ICplcnJvcnMpOwotTElCUFJPVE9CVUZfRVhQT1JUIHN0cmluZyBVbmVzY2Fw
ZUNFc2NhcGVTdHJpbmcoY29uc3Qgc3RyaW5nJiBzcmMpOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBDRXNjYXBlKCkKLS8vICAgIEVzY2FwZXMgJ3NyYycgdXNpbmcgQy1zdHlsZSBlc2NhcGUgc2Vx
dWVuY2VzIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcKLS8vICAgIHN0cmluZy4KLS8vCi0vLyAg
ICBFc2NhcGVkIGNoYXJzOiBcbiwgXHIsIFx0LCAiLCAnLCBcLCBhbmQgIWlzcHJpbnQoKS4KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLUxJQlBST1RPQlVGX0VYUE9SVCBzdHJpbmcgQ0VzY2FwZShjb25zdCBz
dHJpbmcmIHNyYyk7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENFc2NhcGVBbmRBcHBlbmQoKQot
Ly8gICAgRXNjYXBlcyAnc3JjJyB1c2luZyBDLXN0eWxlIGVzY2FwZSBzZXF1ZW5jZXMsIGFuZCBh
cHBlbmRzIHRoZSBlc2NhcGVkCi0vLyAgICBzdHJpbmcgdG8gJ2Rlc3QnLgotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotTElCUFJPVE9CVUZfRVhQT1JUIHZvaWQgQ0VzY2FwZUFuZEFwcGVuZChTdHJpbmdQaWVj
ZSBzcmMsIHN0cmluZyogZGVzdCk7Ci0KLW5hbWVzcGFjZSBzdHJpbmdzIHsKLS8vIExpa2UgQ0Vz
Y2FwZSgpIGJ1dCBkb2VzIG5vdCBlc2NhcGUgYnl0ZXMgd2l0aCB0aGUgdXBwZXIgYml0IHNldC4K
LUxJQlBST1RPQlVGX0VYUE9SVCBzdHJpbmcgVXRmOFNhZmVDRXNjYXBlKGNvbnN0IHN0cmluZyYg
c3JjKTsKLQotLy8gTGlrZSBDRXNjYXBlKCkgYnV0IHVzZXMgaGV4IChceCkgZXNjYXBlcyBpbnN0
ZWFkIG9mIG9jdGFscy4KLUxJQlBST1RPQlVGX0VYUE9SVCBzdHJpbmcgQ0hleEVzY2FwZShjb25z
dCBzdHJpbmcmIHNyYyk7Ci19ICAvLyBuYW1lc3BhY2Ugc3RyaW5ncwotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBzdHJ0bzMyKCkKLS8vIHN0cnRvdTMyKCkKLS8vIHN0cnRvNjQoKQotLy8gc3RydG91
NjQoKQotLy8gICAgQXJjaGl0ZWN0dXJlLW5ldXRyYWwgcGx1ZyBjb21wYXRpYmxlIHJlcGxhY2Vt
ZW50cyBmb3Igc3RydG9sKCkgYW5kCi0vLyAgICBzdHJ0b3VsKCkuICBMb25nJ3MgaGF2ZSBkaWZm
ZXJlbnQgbGVuZ3RocyBvbiBJTFAtMzIgYW5kIExQLTY0Ci0vLyAgICBwbGF0Zm9ybXMsIHNvIHVz
aW5nIHRoZXNlIGlzIHNhZmVyLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCi0vLyAgICBvdmVy
ZmxvdyBiZWhhdmlvciwgdGhhbiB1c2luZyB0aGUgc3RhbmRhcmQgbGliYyBmdW5jdGlvbnMuCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi1MSUJQUk9UT0JVRl9FWFBPUlQgaW50MzIgc3RydG8zMl9hZGFwdG9y
KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBiYXNlKTsKLUxJQlBST1RPQlVGX0VYUE9SVCB1aW50MzIg
c3RydG91MzJfYWRhcHRvcihjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiYXNlKTsKLQotaW5saW5l
IGludDMyIHN0cnRvMzIoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2Up
IHsKLSAgaWYgKHNpemVvZihpbnQzMikgPT0gc2l6ZW9mKGxvbmcpKQotICAgIHJldHVybiBzdHJ0
b2wobnB0ciwgZW5kcHRyLCBiYXNlKTsKLSAgZWxzZQotICAgIHJldHVybiBzdHJ0bzMyX2FkYXB0
b3IobnB0ciwgZW5kcHRyLCBiYXNlKTsKLX0KLQotaW5saW5lIHVpbnQzMiBzdHJ0b3UzMihjb25z
dCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkgewotICBpZiAoc2l6ZW9mKHVp
bnQzMikgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotICAgIHJldHVybiBzdHJ0b3VsKG5wdHIs
IGVuZHB0ciwgYmFzZSk7Ci0gIGVsc2UKLSAgICByZXR1cm4gc3RydG91MzJfYWRhcHRvcihucHRy
LCBlbmRwdHIsIGJhc2UpOwotfQotCi0vLyBGb3Igbm93LCBsb25nIGxvbmcgaXMgNjQtYml0IG9u
IGFsbCB0aGUgcGxhdGZvcm1zIHdlIGNhcmUgYWJvdXQsIHNvIHRoZXNlCi0vLyBmdW5jdGlvbnMg
Y2FuIHNpbXBseSBwYXNzIHRoZSBjYWxsIHRvIHN0cnRvW3VdbGwuCi1pbmxpbmUgaW50NjQgc3Ry
dG82NChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkgewotICBHT09H
TEVfQ09NUElMRV9BU1NFUlQoc2l6ZW9mKGludDY0KSA9PSBzaXplb2YobG9uZyBsb25nKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZl9pbnQ2NF9pc19ub3Rfc2l6ZW9mX2xvbmdfbG9u
Zyk7Ci0gIHJldHVybiBzdHJ0b2xsKG5wdHIsIGVuZHB0ciwgYmFzZSk7Ci19Ci0KLWlubGluZSB1
aW50NjQgc3RydG91NjQoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2Up
IHsKLSAgR09PR0xFX0NPTVBJTEVfQVNTRVJUKHNpemVvZih1aW50NjQpID09IHNpemVvZih1bnNp
Z25lZCBsb25nIGxvbmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mX3VpbnQ2NF9p
c19ub3Rfc2l6ZW9mX2xvbmdfbG9uZyk7Ci0gIHJldHVybiBzdHJ0b3VsbChucHRyLCBlbmRwdHIs
IGJhc2UpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBzYWZlX3N0cnRvYigpCi0vLyBzYWZl
X3N0cnRvMzIoKQotLy8gc2FmZV9zdHJ0b3UzMigpCi0vLyBzYWZlX3N0cnRvNjQoKQotLy8gc2Fm
ZV9zdHJ0b3U2NCgpCi0vLyBzYWZlX3N0cnRvZigpCi0vLyBzYWZlX3N0cnRvZCgpCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1MSUJQUk9UT0JVRl9FWFBPUlQgYm9vbCBzYWZlX3N0cnRvYihTdHJpbmdQaWVj
ZSBzdHIsIGJvb2wqIHZhbHVlKTsKLQotTElCUFJPVE9CVUZfRVhQT1JUIGJvb2wgc2FmZV9zdHJ0
bzMyKGNvbnN0IHN0cmluZyYgc3RyLCBpbnQzMiogdmFsdWUpOwotTElCUFJPVE9CVUZfRVhQT1JU
IGJvb2wgc2FmZV9zdHJ0b3UzMihjb25zdCBzdHJpbmcmIHN0ciwgdWludDMyKiB2YWx1ZSk7Ci1p
bmxpbmUgYm9vbCBzYWZlX3N0cnRvMzIoY29uc3QgY2hhciogc3RyLCBpbnQzMiogdmFsdWUpIHsK
LSAgcmV0dXJuIHNhZmVfc3RydG8zMihzdHJpbmcoc3RyKSwgdmFsdWUpOwotfQotaW5saW5lIGJv
b2wgc2FmZV9zdHJ0bzMyKFN0cmluZ1BpZWNlIHN0ciwgaW50MzIqIHZhbHVlKSB7Ci0gIHJldHVy
biBzYWZlX3N0cnRvMzIoc3RyLlRvU3RyaW5nKCksIHZhbHVlKTsKLX0KLWlubGluZSBib29sIHNh
ZmVfc3RydG91MzIoY29uc3QgY2hhciogc3RyLCB1aW50MzIqIHZhbHVlKSB7Ci0gIHJldHVybiBz
YWZlX3N0cnRvdTMyKHN0cmluZyhzdHIpLCB2YWx1ZSk7Ci19Ci1pbmxpbmUgYm9vbCBzYWZlX3N0
cnRvdTMyKFN0cmluZ1BpZWNlIHN0ciwgdWludDMyKiB2YWx1ZSkgewotICByZXR1cm4gc2FmZV9z
dHJ0b3UzMihzdHIuVG9TdHJpbmcoKSwgdmFsdWUpOwotfQotCi1MSUJQUk9UT0JVRl9FWFBPUlQg
Ym9vbCBzYWZlX3N0cnRvNjQoY29uc3Qgc3RyaW5nJiBzdHIsIGludDY0KiB2YWx1ZSk7Ci1MSUJQ
Uk9UT0JVRl9FWFBPUlQgYm9vbCBzYWZlX3N0cnRvdTY0KGNvbnN0IHN0cmluZyYgc3RyLCB1aW50
NjQqIHZhbHVlKTsKLWlubGluZSBib29sIHNhZmVfc3RydG82NChjb25zdCBjaGFyKiBzdHIsIGlu
dDY0KiB2YWx1ZSkgewotICByZXR1cm4gc2FmZV9zdHJ0bzY0KHN0cmluZyhzdHIpLCB2YWx1ZSk7
Ci19Ci1pbmxpbmUgYm9vbCBzYWZlX3N0cnRvNjQoU3RyaW5nUGllY2Ugc3RyLCBpbnQ2NCogdmFs
dWUpIHsKLSAgcmV0dXJuIHNhZmVfc3RydG82NChzdHIuVG9TdHJpbmcoKSwgdmFsdWUpOwotfQot
aW5saW5lIGJvb2wgc2FmZV9zdHJ0b3U2NChjb25zdCBjaGFyKiBzdHIsIHVpbnQ2NCogdmFsdWUp
IHsKLSAgcmV0dXJuIHNhZmVfc3RydG91NjQoc3RyaW5nKHN0ciksIHZhbHVlKTsKLX0KLWlubGlu
ZSBib29sIHNhZmVfc3RydG91NjQoU3RyaW5nUGllY2Ugc3RyLCB1aW50NjQqIHZhbHVlKSB7Ci0g
IHJldHVybiBzYWZlX3N0cnRvdTY0KHN0ci5Ub1N0cmluZygpLCB2YWx1ZSk7Ci19Ci0KLUxJQlBS
T1RPQlVGX0VYUE9SVCBib29sIHNhZmVfc3RydG9mKGNvbnN0IGNoYXIqIHN0ciwgZmxvYXQqIHZh
bHVlKTsKLUxJQlBST1RPQlVGX0VYUE9SVCBib29sIHNhZmVfc3RydG9kKGNvbnN0IGNoYXIqIHN0
ciwgZG91YmxlKiB2YWx1ZSk7Ci1pbmxpbmUgYm9vbCBzYWZlX3N0cnRvZihjb25zdCBzdHJpbmcm
IHN0ciwgZmxvYXQqIHZhbHVlKSB7Ci0gIHJldHVybiBzYWZlX3N0cnRvZihzdHIuY19zdHIoKSwg
dmFsdWUpOwotfQotaW5saW5lIGJvb2wgc2FmZV9zdHJ0b2QoY29uc3Qgc3RyaW5nJiBzdHIsIGRv
dWJsZSogdmFsdWUpIHsKLSAgcmV0dXJuIHNhZmVfc3RydG9kKHN0ci5jX3N0cigpLCB2YWx1ZSk7
Ci19Ci1pbmxpbmUgYm9vbCBzYWZlX3N0cnRvZihTdHJpbmdQaWVjZSBzdHIsIGZsb2F0KiB2YWx1
ZSkgewotICByZXR1cm4gc2FmZV9zdHJ0b2Yoc3RyLlRvU3RyaW5nKCksIHZhbHVlKTsKLX0KLWlu
bGluZSBib29sIHNhZmVfc3RydG9kKFN0cmluZ1BpZWNlIHN0ciwgZG91YmxlKiB2YWx1ZSkgewot
ICByZXR1cm4gc2FmZV9zdHJ0b2Qoc3RyLlRvU3RyaW5nKCksIHZhbHVlKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gRmFzdEludFRvQnVmZmVyKCkKLS8vIEZhc3RIZXhUb0J1ZmZlcigpCi0v
LyBGYXN0SGV4NjRUb0J1ZmZlcigpCi0vLyBGYXN0SGV4MzJUb0J1ZmZlcigpCi0vLyBGYXN0VGlt
ZVRvQnVmZmVyKCkKLS8vICAgIFRoZXNlIGFyZSBpbnRlbmRlZCBmb3Igc3BlZWQuICBGYXN0SW50
VG9CdWZmZXIoKSBhc3N1bWVzIHRoZQotLy8gICAgaW50ZWdlciBpcyBub24tbmVnYXRpdmUuICBG
YXN0SGV4VG9CdWZmZXIoKSBwdXRzIG91dHB1dCBpbgotLy8gICAgaGV4IHJhdGhlciB0aGFuIGRl
Y2ltYWwuICBGYXN0VGltZVRvQnVmZmVyKCkgcHV0cyB0aGUgb3V0cHV0Ci0vLyAgICBpbnRvIFJG
QzgyMiBmb3JtYXQuCi0vLwotLy8gICAgRmFzdEhleDY0VG9CdWZmZXIoKSBwdXRzIGEgNjQtYml0
IHVuc2lnbmVkIHZhbHVlIGluIGhleC1mb3JtYXQsCi0vLyAgICBwYWRkZWQgdG8gZXhhY3RseSAx
NiBieXRlcyAocGx1cyBvbmUgYnl0ZSBmb3IgJ1wwJykKLS8vCi0vLyAgICBGYXN0SGV4MzJUb0J1
ZmZlcigpIHB1dHMgYSAzMi1iaXQgdW5zaWduZWQgdmFsdWUgaW4gaGV4LWZvcm1hdCwKLS8vICAg
IHBhZGRlZCB0byBleGFjdGx5IDggYnl0ZXMgKHBsdXMgb25lIGJ5dGUgZm9yICdcMCcpCi0vLwot
Ly8gICAgICAgQWxsIGZ1bmN0aW9ucyB0YWtlIHRoZSBvdXRwdXQgYnVmZmVyIGFzIGFuIGFyZy4K
LS8vICAgIFRoZXkgYWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUg
b3V0cHV0LAotLy8gICAgd2hpY2ggbWF5IG5vdCBiZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1
dCBidWZmZXIuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFN1Z2dlc3RlZCBidWZmZXIgc2l6ZSBm
b3IgRmFzdFRvQnVmZmVyIGZ1bmN0aW9ucy4gIEFsc28gd29ya3Mgd2l0aAotLy8gRG91YmxlVG9C
dWZmZXIoKSBhbmQgRmxvYXRUb0J1ZmZlcigpLgotc3RhdGljIGNvbnN0IGludCBrRmFzdFRvQnVm
ZmVyU2l6ZSA9IDMyOwotCi1MSUJQUk9UT0JVRl9FWFBPUlQgY2hhciogRmFzdEludDMyVG9CdWZm
ZXIoaW50MzIgaSwgY2hhciogYnVmZmVyKTsKLUxJQlBST1RPQlVGX0VYUE9SVCBjaGFyKiBGYXN0
SW50NjRUb0J1ZmZlcihpbnQ2NCBpLCBjaGFyKiBidWZmZXIpOwotY2hhciogRmFzdFVJbnQzMlRv
QnVmZmVyKHVpbnQzMiBpLCBjaGFyKiBidWZmZXIpOyAgLy8gaW5saW5lIGJlbG93Ci1jaGFyKiBG
YXN0VUludDY0VG9CdWZmZXIodWludDY0IGksIGNoYXIqIGJ1ZmZlcik7ICAvLyBpbmxpbmUgYmVs
b3cKLUxJQlBST1RPQlVGX0VYUE9SVCBjaGFyKiBGYXN0SGV4VG9CdWZmZXIoaW50IGksIGNoYXIq
IGJ1ZmZlcik7Ci1MSUJQUk9UT0JVRl9FWFBPUlQgY2hhciogRmFzdEhleDY0VG9CdWZmZXIodWlu
dDY0IGksIGNoYXIqIGJ1ZmZlcik7Ci1MSUJQUk9UT0JVRl9FWFBPUlQgY2hhciogRmFzdEhleDMy
VG9CdWZmZXIodWludDMyIGksIGNoYXIqIGJ1ZmZlcik7Ci0KLS8vIGF0IGxlYXN0IDIyIGJ5dGVz
IGxvbmcKLWlubGluZSBjaGFyKiBGYXN0SW50VG9CdWZmZXIoaW50IGksIGNoYXIqIGJ1ZmZlcikg
ewotICByZXR1cm4gKHNpemVvZihpKSA9PSA0ID8KLSAgICAgICAgICBGYXN0SW50MzJUb0J1ZmZl
cihpLCBidWZmZXIpIDogRmFzdEludDY0VG9CdWZmZXIoaSwgYnVmZmVyKSk7Ci19Ci1pbmxpbmUg
Y2hhciogRmFzdFVJbnRUb0J1ZmZlcih1bnNpZ25lZCBpbnQgaSwgY2hhciogYnVmZmVyKSB7Ci0g
IHJldHVybiAoc2l6ZW9mKGkpID09IDQgPwotICAgICAgICAgIEZhc3RVSW50MzJUb0J1ZmZlcihp
LCBidWZmZXIpIDogRmFzdFVJbnQ2NFRvQnVmZmVyKGksIGJ1ZmZlcikpOwotfQotaW5saW5lIGNo
YXIqIEZhc3RMb25nVG9CdWZmZXIobG9uZyBpLCBjaGFyKiBidWZmZXIpIHsKLSAgcmV0dXJuIChz
aXplb2YoaSkgPT0gNCA/Ci0gICAgICAgICAgRmFzdEludDMyVG9CdWZmZXIoaSwgYnVmZmVyKSA6
IEZhc3RJbnQ2NFRvQnVmZmVyKGksIGJ1ZmZlcikpOwotfQotaW5saW5lIGNoYXIqIEZhc3RVTG9u
Z1RvQnVmZmVyKHVuc2lnbmVkIGxvbmcgaSwgY2hhciogYnVmZmVyKSB7Ci0gIHJldHVybiAoc2l6
ZW9mKGkpID09IDQgPwotICAgICAgICAgIEZhc3RVSW50MzJUb0J1ZmZlcihpLCBidWZmZXIpIDog
RmFzdFVJbnQ2NFRvQnVmZmVyKGksIGJ1ZmZlcikpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBGYXN0SW50MzJUb0J1ZmZlckxlZnQoKQotLy8gRmFzdFVJbnQzMlRvQnVmZmVyTGVmdCgpCi0v
LyBGYXN0SW50NjRUb0J1ZmZlckxlZnQoKQotLy8gRmFzdFVJbnQ2NFRvQnVmZmVyTGVmdCgpCi0v
LwotLy8gTGlrZSB0aGUgRmFzdCpUb0J1ZmZlcigpIGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgYXJl
IGludGVuZGVkIGZvciBzcGVlZC4KLS8vIFVubGlrZSB0aGUgRmFzdCpUb0J1ZmZlcigpIGZ1bmN0
aW9ucywgaG93ZXZlciwgdGhlc2UgZnVuY3Rpb25zIHdyaXRlCi0vLyB0aGVpciBvdXRwdXQgdG8g
dGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIChoZW5jZSB0aGUgbmFtZSwgYXMgdGhlCi0vLyBv
dXRwdXQgaXMgbGVmdC1hbGlnbmVkKS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVu
c3VyaW5nIHRoYXQKLS8vIHRoZSBidWZmZXIgaGFzIGVub3VnaCBzcGFjZSB0byBob2xkIHRoZSBv
dXRwdXQuCi0vLwotLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5n
IChpLmUuIHRoZSBudWxsIGNoYXJhY3RlcgotLy8gdGVybWluYXRpbmcgdGhlIHN0cmluZykuCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLUxJQlBST1RPQlVGX0VYUE9SVCBjaGFyKiBGYXN0SW50MzJUb0J1
ZmZlckxlZnQoaW50MzIgaSwgY2hhciogYnVmZmVyKTsKLUxJQlBST1RPQlVGX0VYUE9SVCBjaGFy
KiBGYXN0VUludDMyVG9CdWZmZXJMZWZ0KHVpbnQzMiBpLCBjaGFyKiBidWZmZXIpOwotTElCUFJP
VE9CVUZfRVhQT1JUIGNoYXIqIEZhc3RJbnQ2NFRvQnVmZmVyTGVmdChpbnQ2NCBpLCBjaGFyKiBi
dWZmZXIpOwotTElCUFJPVE9CVUZfRVhQT1JUIGNoYXIqIEZhc3RVSW50NjRUb0J1ZmZlckxlZnQo
dWludDY0IGksIGNoYXIqIGJ1ZmZlcik7Ci0KLS8vIEp1c3QgZGVmaW5lIHRoZXNlIGluIHRlcm1z
IG9mIHRoZSBhYm92ZS4KLWlubGluZSBjaGFyKiBGYXN0VUludDMyVG9CdWZmZXIodWludDMyIGks
IGNoYXIqIGJ1ZmZlcikgewotICBGYXN0VUludDMyVG9CdWZmZXJMZWZ0KGksIGJ1ZmZlcik7Ci0g
IHJldHVybiBidWZmZXI7Ci19Ci1pbmxpbmUgY2hhciogRmFzdFVJbnQ2NFRvQnVmZmVyKHVpbnQ2
NCBpLCBjaGFyKiBidWZmZXIpIHsKLSAgRmFzdFVJbnQ2NFRvQnVmZmVyTGVmdChpLCBidWZmZXIp
OwotICByZXR1cm4gYnVmZmVyOwotfQotCi1pbmxpbmUgc3RyaW5nIFNpbXBsZUJ0b2EoYm9vbCB2
YWx1ZSkgewotICByZXR1cm4gdmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2UiOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBTaW1wbGVJdG9hKCkKLS8vICAgIERlc2NyaXB0aW9uOiBjb252ZXJ0cyBh
biBpbnRlZ2VyIHRvIGEgc3RyaW5nLgotLy8KLS8vICAgIFJldHVybiB2YWx1ZTogc3RyaW5nCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi1MSUJQUk9UT0JVRl9FWFBPUlQgc3RyaW5nIFNpbXBsZUl0b2EoaW50
IGkpOwotTElCUFJPVE9CVUZfRVhQT1JUIHN0cmluZyBTaW1wbGVJdG9hKHVuc2lnbmVkIGludCBp
KTsKLUxJQlBST1RPQlVGX0VYUE9SVCBzdHJpbmcgU2ltcGxlSXRvYShsb25nIGkpOwotTElCUFJP
VE9CVUZfRVhQT1JUIHN0cmluZyBTaW1wbGVJdG9hKHVuc2lnbmVkIGxvbmcgaSk7Ci1MSUJQUk9U
T0JVRl9FWFBPUlQgc3RyaW5nIFNpbXBsZUl0b2EobG9uZyBsb25nIGkpOwotTElCUFJPVE9CVUZf
RVhQT1JUIHN0cmluZyBTaW1wbGVJdG9hKHVuc2lnbmVkIGxvbmcgbG9uZyBpKTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gU2ltcGxlRHRvYSgpCi0vLyBTaW1wbGVGdG9hKCkKLS8vIERvdWJsZVRv
QnVmZmVyKCkKLS8vIEZsb2F0VG9CdWZmZXIoKQotLy8gICAgRGVzY3JpcHRpb246IGNvbnZlcnRz
IGEgZG91YmxlIG9yIGZsb2F0IHRvIGEgc3RyaW5nIHdoaWNoLCBpZgotLy8gICAgcGFzc2VkIHRv
IE5vTG9jYWxlU3RydG9kKCksIHdpbGwgcHJvZHVjZSB0aGUgZXhhY3Qgc2FtZSBvcmlnaW5hbCBk
b3VibGUKLS8vICAgIChleGNlcHQgaW4gY2FzZSBvZiBOYU47IGFsbCBOYU5zIGFyZSBjb25zaWRl
cmVkIHRoZSBzYW1lIHZhbHVlKS4KLS8vICAgIFdlIHRyeSB0byBrZWVwIHRoZSBzdHJpbmcgc2hv
cnQgYnV0IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gYmUgYXMKLS8vICAgIHNob3J0IGFzIHBvc3Np
YmxlLgotLy8KLS8vICAgIERvdWJsZVRvQnVmZmVyKCkgYW5kIEZsb2F0VG9CdWZmZXIoKSB3cml0
ZSB0aGUgdGV4dCB0byB0aGUgZ2l2ZW4KLS8vICAgIGJ1ZmZlciBhbmQgcmV0dXJuIGl0LiAgVGhl
IGJ1ZmZlciBtdXN0IGJlIGF0IGxlYXN0Ci0vLyAgICBrRG91YmxlVG9CdWZmZXJTaXplIGJ5dGVz
IGZvciBkb3VibGVzIGFuZCBrRmxvYXRUb0J1ZmZlclNpemUKLS8vICAgIGJ5dGVzIGZvciBmbG9h
dHMuICBrRmFzdFRvQnVmZmVyU2l6ZSBpcyBhbHNvIGd1YXJhbnRlZWQgdG8gYmUgbGFyZ2UKLS8v
ICAgIGVub3VnaCB0byBob2xkIGVpdGhlci4KLS8vCi0vLyAgICBSZXR1cm4gdmFsdWU6IHN0cmlu
ZwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotTElCUFJPVE9CVUZfRVhQT1JUIHN0cmluZyBTaW1wbGVEdG9h
KGRvdWJsZSB2YWx1ZSk7Ci1MSUJQUk9UT0JVRl9FWFBPUlQgc3RyaW5nIFNpbXBsZUZ0b2EoZmxv
YXQgdmFsdWUpOwotCi1MSUJQUk9UT0JVRl9FWFBPUlQgY2hhciogRG91YmxlVG9CdWZmZXIoZG91
YmxlIGksIGNoYXIqIGJ1ZmZlcik7Ci1MSUJQUk9UT0JVRl9FWFBPUlQgY2hhciogRmxvYXRUb0J1
ZmZlcihmbG9hdCBpLCBjaGFyKiBidWZmZXIpOwotCi0vLyBJbiBwcmFjdGljZSwgZG91YmxlcyBz
aG91bGQgbmV2ZXIgbmVlZCBtb3JlIHRoYW4gMjQgYnl0ZXMgYW5kIGZsb2F0cwotLy8gc2hvdWxk
IG5ldmVyIG5lZWQgbW9yZSB0aGFuIDE0IChpbmNsdWRpbmcgbnVsbCB0ZXJtaW5hdG9ycyksIGJ1
dCB3ZQotLy8gb3ZlcmVzdGltYXRlIHRvIGJlIHNhZmUuCi1zdGF0aWMgY29uc3QgaW50IGtEb3Vi
bGVUb0J1ZmZlclNpemUgPSAzMjsKLXN0YXRpYyBjb25zdCBpbnQga0Zsb2F0VG9CdWZmZXJTaXpl
ID0gMjQ7Ci0KLW5hbWVzcGFjZSBzdHJpbmdzIHsKLQotZW51bSBQYWRTcGVjIHsKLSAgTk9fUEFE
ID0gMSwKLSAgWkVST19QQURfMiwKLSAgWkVST19QQURfMywKLSAgWkVST19QQURfNCwKLSAgWkVS
T19QQURfNSwKLSAgWkVST19QQURfNiwKLSAgWkVST19QQURfNywKLSAgWkVST19QQURfOCwKLSAg
WkVST19QQURfOSwKLSAgWkVST19QQURfMTAsCi0gIFpFUk9fUEFEXzExLAotICBaRVJPX1BBRF8x
MiwKLSAgWkVST19QQURfMTMsCi0gIFpFUk9fUEFEXzE0LAotICBaRVJPX1BBRF8xNSwKLSAgWkVS
T19QQURfMTYsCi19OwotCi1zdHJ1Y3QgSGV4IHsKLSAgdWludDY0IHZhbHVlOwotICBlbnVtIFBh
ZFNwZWMgc3BlYzsKLSAgdGVtcGxhdGUgPGNsYXNzIEludD4KLSAgZXhwbGljaXQgSGV4KEludCB2
LCBQYWRTcGVjIHMgPSBOT19QQUQpCi0gICAgICA6IHNwZWMocykgewotICAgIC8vIFByZXZlbnQg
c2lnbi1leHRlbnNpb24gYnkgY2FzdGluZyBpbnRlZ2VycyB0bwotICAgIC8vIHRoZWlyIHVuc2ln
bmVkIGNvdW50ZXJwYXJ0cy4KLSNpZmRlZiBMQU5HX0NYWDExCi0gICAgc3RhdGljX2Fzc2VydCgK
LSAgICAgICAgc2l6ZW9mKHYpID09IDEgfHwgc2l6ZW9mKHYpID09IDIgfHwgc2l6ZW9mKHYpID09
IDQgfHwgc2l6ZW9mKHYpID09IDgsCi0gICAgICAgICJVbmtub3duIGludGVnZXIgdHlwZSIpOwot
I2VuZGlmCi0gICAgdmFsdWUgPSBzaXplb2YodikgPT0gMSA/IHN0YXRpY19jYXN0PHVpbnQ4Pih2
KQotICAgICAgICAgIDogc2l6ZW9mKHYpID09IDIgPyBzdGF0aWNfY2FzdDx1aW50MTY+KHYpCi0g
ICAgICAgICAgOiBzaXplb2YodikgPT0gNCA/IHN0YXRpY19jYXN0PHVpbnQzMj4odikKLSAgICAg
ICAgICA6IHN0YXRpY19jYXN0PHVpbnQ2ND4odik7Ci0gIH0KLX07Ci0KLXN0cnVjdCBMSUJQUk9U
T0JVRl9FWFBPUlQgQWxwaGFOdW0gewotICBjb25zdCBjaGFyICpwaWVjZV9kYXRhXzsgIC8vIG1v
dmUgdGhlc2UgdG8gc3RyaW5nX3JlZiBldmVudHVhbGx5Ci0gIHNpemVfdCBwaWVjZV9zaXplXzsg
ICAgICAgLy8gbW92ZSB0aGVzZSB0byBzdHJpbmdfcmVmIGV2ZW50dWFsbHkKLQotICBjaGFyIGRp
Z2l0c1trRmFzdFRvQnVmZmVyU2l6ZV07Ci0KLSAgLy8gTm8gYm9vbCBjdG9yIC0tIGJvb2xzIGNv
bnZlcnQgdG8gYW4gaW50ZWdyYWwgdHlwZS4KLSAgLy8gQSBib29sIGN0b3Igd291bGQgYWxzbyBj
b252ZXJ0IGluY29taW5nIHBvaW50ZXJzIChibGV0Y2gpLgotCi0gIEFscGhhTnVtKGludDMyIGkz
MikKLSAgICAgIDogcGllY2VfZGF0YV8oZGlnaXRzKSwKLSAgICAgICAgcGllY2Vfc2l6ZV8oRmFz
dEludDMyVG9CdWZmZXJMZWZ0KGkzMiwgZGlnaXRzKSAtICZkaWdpdHNbMF0pIHt9Ci0gIEFscGhh
TnVtKHVpbnQzMiB1MzIpCi0gICAgICA6IHBpZWNlX2RhdGFfKGRpZ2l0cyksCi0gICAgICAgIHBp
ZWNlX3NpemVfKEZhc3RVSW50MzJUb0J1ZmZlckxlZnQodTMyLCBkaWdpdHMpIC0gJmRpZ2l0c1sw
XSkge30KLSAgQWxwaGFOdW0oaW50NjQgaTY0KQotICAgICAgOiBwaWVjZV9kYXRhXyhkaWdpdHMp
LAotICAgICAgICBwaWVjZV9zaXplXyhGYXN0SW50NjRUb0J1ZmZlckxlZnQoaTY0LCBkaWdpdHMp
IC0gJmRpZ2l0c1swXSkge30KLSAgQWxwaGFOdW0odWludDY0IHU2NCkKLSAgICAgIDogcGllY2Vf
ZGF0YV8oZGlnaXRzKSwKLSAgICAgICAgcGllY2Vfc2l6ZV8oRmFzdFVJbnQ2NFRvQnVmZmVyTGVm
dCh1NjQsIGRpZ2l0cykgLSAmZGlnaXRzWzBdKSB7fQotCi0gIEFscGhhTnVtKGZsb2F0IGYpCi0g
ICAgOiBwaWVjZV9kYXRhXyhkaWdpdHMpLCBwaWVjZV9zaXplXyhzdHJsZW4oRmxvYXRUb0J1ZmZl
cihmLCBkaWdpdHMpKSkge30KLSAgQWxwaGFOdW0oZG91YmxlIGYpCi0gICAgOiBwaWVjZV9kYXRh
XyhkaWdpdHMpLCBwaWVjZV9zaXplXyhzdHJsZW4oRG91YmxlVG9CdWZmZXIoZiwgZGlnaXRzKSkp
IHt9Ci0KLSAgQWxwaGFOdW0oSGV4IGhleCk7Ci0KLSAgQWxwaGFOdW0oY29uc3QgY2hhciogY19z
dHIpCi0gICAgICA6IHBpZWNlX2RhdGFfKGNfc3RyKSwgcGllY2Vfc2l6ZV8oc3RybGVuKGNfc3Ry
KSkge30KLSAgLy8gVE9ETzogQWRkIGEgc3RyaW5nX3JlZiBjb25zdHJ1Y3RvciwgZXZlbnR1YWxs
eQotICAvLyBBbHBoYU51bShjb25zdCBTdHJpbmdQaWVjZSAmcGMpIDogcGllY2UocGMpIHt9Ci0K
LSAgQWxwaGFOdW0oY29uc3Qgc3RyaW5nJiBzdHIpCi0gICAgICA6IHBpZWNlX2RhdGFfKHN0ci5k
YXRhKCkpLCBwaWVjZV9zaXplXyhzdHIuc2l6ZSgpKSB7fQotCi0gIEFscGhhTnVtKFN0cmluZ1Bp
ZWNlIHN0cikKLSAgICAgIDogcGllY2VfZGF0YV8oc3RyLmRhdGEoKSksIHBpZWNlX3NpemVfKHN0
ci5zaXplKCkpIHt9Ci0KLSAgQWxwaGFOdW0oaW50ZXJuYWw6OlN0cmluZ1BpZWNlUG9kIHN0cikK
LSAgICAgIDogcGllY2VfZGF0YV8oc3RyLmRhdGEoKSksIHBpZWNlX3NpemVfKHN0ci5zaXplKCkp
IHt9Ci0KLSAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBwaWVjZV9zaXplXzsgfQotICBj
b25zdCBjaGFyICpkYXRhKCkgY29uc3QgeyByZXR1cm4gcGllY2VfZGF0YV87IH0KLQotIHByaXZh
dGU6Ci0gIC8vIFVzZSAiOiIgbm90ICc6JwotICBBbHBoYU51bShjaGFyIGMpOyAgLy8gTk9MSU5U
KHJ1bnRpbWUvZXhwbGljaXQpCi0KLSAgLy8gRGlzYWxsb3cgY29weSBhbmQgYXNzaWduLgotICBB
bHBoYU51bShjb25zdCBBbHBoYU51bSYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBBbHBoYU51
bSYpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHN0cmluZ3MKLQotdXNpbmcgc3RyaW5nczo6QWxw
aGFOdW07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFN0ckNhdCgpCi0vLyAgICBUaGlzIG1lcmdl
cyB0aGUgZ2l2ZW4gc3RyaW5ncyBvciBudW1iZXJzLCB3aXRoIG5vIGRlbGltaXRlci4gIFRoaXMK
LS8vICAgIGlzIGRlc2lnbmVkIHRvIGJlIHRoZSBmYXN0ZXN0IHBvc3NpYmxlIHdheSB0byBjb25z
dHJ1Y3QgYSBzdHJpbmcgb3V0Ci0vLyAgICBvZiBhIG1peCBvZiByYXcgQyBzdHJpbmdzLCBzdHJp
bmdzLCBib29sIHZhbHVlcywKLS8vICAgIGFuZCBudW1lcmljIHZhbHVlcy4KLS8vCi0vLyAgICBE
b24ndCB1c2UgdGhpcyBmb3IgdXNlci12aXNpYmxlIHN0cmluZ3MuICBUaGUgbG9jYWxpemF0aW9u
IHByb2Nlc3MKLS8vICAgIHdvcmtzIHBvb3JseSBvbiBzdHJpbmdzIGJ1aWx0IHVwIG91dCBvZiBm
cmFnbWVudHMuCi0vLwotLy8gICAgRm9yIGNsYXJpdHkgYW5kIHBlcmZvcm1hbmNlLCBkb24ndCB1
c2UgU3RyQ2F0IHdoZW4gYXBwZW5kaW5nIHRvIGEKLS8vICAgIHN0cmluZy4gIEluIHBhcnRpY3Vs
YXIsIGF2b2lkIHVzaW5nIGFueSBvZiB0aGVzZSAoYW50aS0pcGF0dGVybnM6Ci0vLyAgICAgIHN0
ci5hcHBlbmQoU3RyQ2F0KC4uLikKLS8vICAgICAgc3RyICs9IFN0ckNhdCguLi4pCi0vLyAgICAg
IHN0ciA9IFN0ckNhdChzdHIsIC4uLikKLS8vICAgIHdoZXJlIHRoZSBsYXN0IGlzIHRoZSB3b3Jz
ZSwgd2l0aCB0aGUgcG90ZW50aWFsIHRvIGNoYW5nZSBhIGxvb3AKLS8vICAgIGZyb20gYSBsaW5l
YXIgdGltZSBvcGVyYXRpb24gd2l0aCBPKDEpIGR5bmFtaWMgYWxsb2NhdGlvbnMgaW50byBhCi0v
LyAgICBxdWFkcmF0aWMgdGltZSBvcGVyYXRpb24gd2l0aCBPKG4pIGR5bmFtaWMgYWxsb2NhdGlv
bnMuICBTdHJBcHBlbmQKLS8vICAgIGlzIGEgYmV0dGVyIGNob2ljZSB0aGFuIGFueSBvZiB0aGUg
YWJvdmUsIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9uCi0vLyAgICBvZiBTdHJBcHBlbmQoJnN0
ciwgYSwgYiwgYywgLi4uKSB0aGF0IG5vbmUgb2YgdGhlIGEsIGIsIGMsIC4uLiBtYXkKLS8vICAg
IGJlIGEgcmVmZXJlbmNlIGludG8gc3RyLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1MSUJQUk9UT0JV
Rl9FWFBPUlQgc3RyaW5nIFN0ckNhdChjb25zdCBBbHBoYU51bSYgYSwgY29uc3QgQWxwaGFOdW0m
IGIpOwotTElCUFJPVE9CVUZfRVhQT1JUIHN0cmluZyBTdHJDYXQoY29uc3QgQWxwaGFOdW0mIGEs
IGNvbnN0IEFscGhhTnVtJiBiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQWxwaGFOdW0mIGMpOwotTElCUFJPVE9CVUZfRVhQT1JUIHN0cmluZyBTdHJDYXQoY29uc3Qg
QWxwaGFOdW0mIGEsIGNvbnN0IEFscGhhTnVtJiBiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQWxwaGFOdW0mIGMsIGNvbnN0IEFscGhhTnVtJiBkKTsKLUxJQlBST1RP
QlVGX0VYUE9SVCBzdHJpbmcgU3RyQ2F0KGNvbnN0IEFscGhhTnVtJiBhLCBjb25zdCBBbHBoYU51
bSYgYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFscGhhTnVtJiBj
LCBjb25zdCBBbHBoYU51bSYgZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFscGhhTnVtJiBlKTsKLUxJQlBST1RPQlVGX0VYUE9SVCBzdHJpbmcgU3RyQ2F0KGNvbnN0
IEFscGhhTnVtJiBhLCBjb25zdCBBbHBoYU51bSYgYiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEFscGhhTnVtJiBjLCBjb25zdCBBbHBoYU51bSYgZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFscGhhTnVtJiBlLCBjb25zdCBBbHBoYU51
bSYgZik7Ci1MSUJQUk9UT0JVRl9FWFBPUlQgc3RyaW5nIFN0ckNhdChjb25zdCBBbHBoYU51bSYg
YSwgY29uc3QgQWxwaGFOdW0mIGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBbHBoYU51bSYgYywgY29uc3QgQWxwaGFOdW0mIGQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBbHBoYU51bSYgZSwgY29uc3QgQWxwaGFOdW0mIGYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBbHBoYU51bSYgZyk7Ci1MSUJQUk9U
T0JVRl9FWFBPUlQgc3RyaW5nIFN0ckNhdChjb25zdCBBbHBoYU51bSYgYSwgY29uc3QgQWxwaGFO
dW0mIGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBbHBoYU51bSYg
YywgY29uc3QgQWxwaGFOdW0mIGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBbHBoYU51bSYgZSwgY29uc3QgQWxwaGFOdW0mIGYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBbHBoYU51bSYgZywgY29uc3QgQWxwaGFOdW0mIGgpOwotTElC
UFJPVE9CVUZfRVhQT1JUIHN0cmluZyBTdHJDYXQoY29uc3QgQWxwaGFOdW0mIGEsIGNvbnN0IEFs
cGhhTnVtJiBiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxwaGFO
dW0mIGMsIGNvbnN0IEFscGhhTnVtJiBkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQWxwaGFOdW0mIGUsIGNvbnN0IEFscGhhTnVtJiBmLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQWxwaGFOdW0mIGcsIGNvbnN0IEFscGhhTnVtJiBoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxwaGFOdW0mIGkpOwotCi1p
bmxpbmUgc3RyaW5nIFN0ckNhdChjb25zdCBBbHBoYU51bSYgYSkgeyByZXR1cm4gc3RyaW5nKGEu
ZGF0YSgpLCBhLnNpemUoKSk7IH0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU3RyQXBwZW5kKCkK
LS8vICAgIFNhbWUgYXMgYWJvdmUsIGJ1dCBhZGRzIHRoZSBvdXRwdXQgdG8gdGhlIGdpdmVuIHN0
cmluZy4KLS8vICAgIFdBUk5JTkc6IEZvciBzcGVlZCwgU3RyQXBwZW5kIGRvZXMgbm90IHRyeSB0
byBjaGVjayBlYWNoIG9mIGl0cyBpbnB1dAotLy8gICAgYXJndW1lbnRzIHRvIGJlIHN1cmUgdGhh
dCB0aGV5IGFyZSBub3QgYSBzdWJzZXQgb2YgdGhlIHN0cmluZyBiZWluZwotLy8gICAgYXBwZW5k
ZWQgdG8uICBUaGF0IGlzLCB3aGlsZSB0aGlzIHdpbGwgd29yazoKLS8vCi0vLyAgICBzdHJpbmcg
cyA9ICJmb28iOwotLy8gICAgcyArPSBzOwotLy8KLS8vICAgIFRoaXMgd2lsbCBub3QgKG5lY2Vz
c2FyaWx5KSB3b3JrOgotLy8KLS8vICAgIHN0cmluZyBzID0gImZvbyI7Ci0vLyAgICBTdHJBcHBl
bmQoJnMsIHMpOwotLy8KLS8vICAgIE5vdGU6IHdoaWxlIFN0ckNhdCBzdXBwb3J0cyBhcHBlbmRp
bmcgdXAgdG8gOSBhcmd1bWVudHMsIFN0ckFwcGVuZAotLy8gICAgaXMgY3VycmVudGx5IGxpbWl0
ZWQgdG8gNC4gIFRoYXQncyByYXJlbHkgYW4gaXNzdWUgZXhjZXB0IHdoZW4KLS8vICAgIGF1dG9t
YXRpY2FsbHkgdHJhbnNmb3JtaW5nIFN0ckNhdCB0byBTdHJBcHBlbmQsIGFuZCBjYW4gZWFzaWx5
IGJlCi0vLyAgICB3b3JrZWQgYXJvdW5kIGFzIGNvbnNlY3V0aXZlIGNhbGxzIHRvIFN0ckFwcGVu
ZCBhcmUgcXVpdGUgZWZmaWNpZW50LgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1MSUJQUk9UT0JVRl9F
WFBPUlQgdm9pZCBTdHJBcHBlbmQoc3RyaW5nKiBkZXN0LCBjb25zdCBBbHBoYU51bSYgYSk7Ci1M
SUJQUk9UT0JVRl9FWFBPUlQgdm9pZCBTdHJBcHBlbmQoc3RyaW5nKiBkZXN0LCBjb25zdCBBbHBo
YU51bSYgYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBbHBoYU51
bSYgYik7Ci1MSUJQUk9UT0JVRl9FWFBPUlQgdm9pZCBTdHJBcHBlbmQoc3RyaW5nKiBkZXN0LCBj
b25zdCBBbHBoYU51bSYgYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBBbHBoYU51bSYgYiwgY29uc3QgQWxwaGFOdW0mIGMpOwotTElCUFJPVE9CVUZfRVhQT1JUIHZv
aWQgU3RyQXBwZW5kKHN0cmluZyogZGVzdCwgY29uc3QgQWxwaGFOdW0mIGEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxwaGFOdW0mIGIsIGNvbnN0IEFscGhhTnVt
JiBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFscGhhTnVtJiBk
KTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSm9pbigpCi0vLyAgICBUaGVzZSBtZXRob2RzIGNv
bmNhdGVuYXRlIGEgcmFuZ2Ugb2YgY29tcG9uZW50cyBpbnRvIGEgQysrIHN0cmluZywgdXNpbmcK
LS8vICAgIHRoZSBDLXN0cmluZyAiZGVsaW0iIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gY29tcG9u
ZW50cy4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvcj4KLXZv
aWQgSm9pbihJdGVyYXRvciBzdGFydCwgSXRlcmF0b3IgZW5kLAotICAgICAgICAgIGNvbnN0IGNo
YXIqIGRlbGltLCBzdHJpbmcqIHJlc3VsdCkgewotICBmb3IgKEl0ZXJhdG9yIGl0ID0gc3RhcnQ7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgIGlmIChpdCAhPSBzdGFydCkgewotICAgICAgcmVzdWx0
LT5hcHBlbmQoZGVsaW0pOwotICAgIH0KLSAgICBTdHJBcHBlbmQocmVzdWx0LCAqaXQpOwotICB9
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KLXN0cmluZyBKb2luKGNvbnN0IFJhbmdl
JiBjb21wb25lbnRzLAotICAgICAgICAgICAgY29uc3QgY2hhciogZGVsaW0pIHsKLSAgc3RyaW5n
IHJlc3VsdDsKLSAgSm9pbihjb21wb25lbnRzLmJlZ2luKCksIGNvbXBvbmVudHMuZW5kKCksIGRl
bGltLCAmcmVzdWx0KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gVG9IZXgoKQotLy8gICAgUmV0dXJuIGEgbG93ZXItY2FzZSBoZXggc3RyaW5nIHJlcHJlc2Vu
dGF0aW9uIG9mIHRoZSBnaXZlbiBpbnRlZ2VyLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTElCUFJPVE9C
VUZfRVhQT1JUIHN0cmluZyBUb0hleCh1aW50NjQgbnVtKTsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gR2xvYmFsUmVwbGFjZVN1YnN0cmluZygpCi0vLyAgICBSZXBsYWNlcyBhbGwgaW5zdGFuY2Vz
IG9mIGEgc3Vic3RyaW5nIGluIGEgc3RyaW5nLiAgRG9lcyBub3RoaW5nCi0vLyAgICBpZiAnc3Vi
c3RyaW5nJyBpcyBlbXB0eS4gIFJldHVybnMgdGhlIG51bWJlciBvZiByZXBsYWNlbWVudHMuCi0v
LwotLy8gICAgTk9URTogVGhlIHN0cmluZyBwaWVjZXMgbXVzdCBub3Qgb3ZlcmxhcCBzLgotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotTElCUFJPVE9CVUZfRVhQT1JUIGludCBHbG9iYWxSZXBsYWNlU3Vic3Ry
aW5nKGNvbnN0IHN0cmluZyYgc3Vic3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcmVwbGFjZW1lbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBzKTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gQmFzZTY0VW5lc2NhcGUoKQotLy8gICAgQ29udmVydHMgInNyYyIgd2hp
Y2ggaXMgZW5jb2RlZCBpbiBCYXNlNjQgdG8gaXRzIGJpbmFyeSBlcXVpdmFsZW50IGFuZAotLy8g
ICAgd3JpdGVzIGl0IHRvICJkZXN0Ii4gSWYgc3JjIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVy
cywgZGVzdCBpcyBjbGVhcmVkCi0vLyAgICBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Uu
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTElCUFJPVE9CVUZf
RVhQT1JUIGJvb2wgQmFzZTY0VW5lc2NhcGUoU3RyaW5nUGllY2Ugc3JjLCBzdHJpbmcqIGRlc3Qp
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXZWJTYWZlQmFzZTY0VW5lc2NhcGUoKQotLy8gICAg
VGhpcyBpcyBhIHZhcmlhdGlvbiBvZiBCYXNlNjRVbmVzY2FwZSB3aGljaCB1c2VzICctJyBpbnN0
ZWFkIG9mICcrJywgYW5kCi0vLyAgICAnXycgaW5zdGVhZCBvZiAnLycuIHNyYyBpcyBub3QgbnVs
bCB0ZXJtaW5hdGVkLCBpbnN0ZWFkIHNwZWNpZnkgbGVuLiBJCi0vLyAgICByZWNvbW1lbmQgdGhh
dCBzbGVuPHN6ZGVzdCwgYnV0IHdlIGhvbm9yIHN6ZGVzdCBhbnl3YXkuCi0vLyAgICBSRVRVUk5T
IHRoZSBsZW5ndGggb2YgZGVzdCwgb3IgLTEgaWYgc3JjIGNvbnRhaW5zIGludmFsaWQgY2hhcnMu
Ci0KLS8vICAgIFRoZSB2YXJpYXRpb24gdGhhdCBzdG9yZXMgaW50byBhIHN0cmluZyBjbGVhcnMg
dGhlIHN0cmluZyBmaXJzdCwgYW5kCi0vLyAgICByZXR1cm5zIGZhbHNlICh3aXRoIGRlc3QgZW1w
dHkpIGlmIHNyYyBjb250YWlucyBpbnZhbGlkIGNoYXJzOyBmb3IKLS8vICAgIHRoaXMgdmVyc2lv
biBzcmMgYW5kIGRlc3QgbXVzdCBiZSBkaWZmZXJlbnQgc3RyaW5ncy4KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLUxJQlBST1RPQlVGX0VYUE9SVCBpbnQgV2ViU2FmZUJhc2U2NFVuZXNjYXBlKGNvbnN0IGNo
YXIqIHNyYywgaW50IHNsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyKiBkZXN0LCBpbnQgc3pkZXN0KTsKLUxJQlBST1RPQlVGX0VYUE9SVCBib29s
IFdlYlNhZmVCYXNlNjRVbmVzY2FwZShTdHJpbmdQaWVjZSBzcmMsIHN0cmluZyogZGVzdCk7Ci0K
LS8vIFJldHVybiB0aGUgbGVuZ3RoIHRvIHVzZSBmb3IgdGhlIG91dHB1dCBidWZmZXIgZ2l2ZW4g
dG8gdGhlIGJhc2U2NCBlc2NhcGUKLS8vIHJvdXRpbmVzLiBNYWtlIHN1cmUgdG8gdXNlIHRoZSBz
YW1lIHZhbHVlIGZvciBkb19wYWRkaW5nIGluIGJvdGguCi0vLyBUaGlzIGZ1bmN0aW9uIG1heSBy
ZXR1cm4gaW5jb3JyZWN0IHJlc3VsdHMgaWYgZ2l2ZW4gaW5wdXRfbGVuIHZhbHVlcyB0aGF0Ci0v
LyBhcmUgZXh0cmVtZWx5IGhpZ2gsIHdoaWNoIHNob3VsZCBoYXBwZW4gcmFyZWx5LgotTElCUFJP
VE9CVUZfRVhQT1JUIGludCBDYWxjdWxhdGVCYXNlNjRFc2NhcGVkTGVuKGludCBpbnB1dF9sZW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBk
b19wYWRkaW5nKTsKLS8vIFVzZSB0aGlzIHZlcnNpb24gd2hlbiBjYWxsaW5nIEJhc2U2NEVzY2Fw
ZSB3aXRob3V0IGEgZG9fcGFkZGluZyBhcmcuCi1MSUJQUk9UT0JVRl9FWFBPUlQgaW50IENhbGN1
bGF0ZUJhc2U2NEVzY2FwZWRMZW4oaW50IGlucHV0X2xlbik7Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIEJhc2U2NEVzY2FwZSgpCi0vLyBXZWJTYWZlQmFzZTY0RXNjYXBlKCkKLS8vICAgIEVuY29k
ZSAic3JjIiB0byAiZGVzdCIgdXNpbmcgYmFzZTY0IGVuY29kaW5nLgotLy8gICAgc3JjIGlzIG5v
dCBudWxsIHRlcm1pbmF0ZWQsIGluc3RlYWQgc3BlY2lmeSBsZW4uCi0vLyAgICAnZGVzdCcgc2hv
dWxkIGhhdmUgYXQgbGVhc3QgQ2FsY3VsYXRlQmFzZTY0RXNjYXBlZExlbigpIGxlbmd0aC4KLS8v
ICAgIFJFVFVSTlMgdGhlIGxlbmd0aCBvZiBkZXN0LgotLy8gICAgVGhlIFdlYlNhZmUgdmFyaWF0
aW9uIHVzZSAnLScgaW5zdGVhZCBvZiAnKycgYW5kICdfJyBpbnN0ZWFkIG9mICcvJwotLy8gICAg
c28gdGhhdCB3ZSBjYW4gcGxhY2UgdGhlIG91dCBpbiB0aGUgVVJMIG9yIGNvb2tpZXMgd2l0aG91
dCBoYXZpbmcKLS8vICAgIHRvIGVzY2FwZSB0aGVtLiAgSXQgYWxzbyBoYXMgYW4gZXh0cmEgcGFy
YW1ldGVyICJkb19wYWRkaW5nIiwKLS8vICAgIHdoaWNoIHdoZW4gc2V0IHRvIGZhbHNlIHdpbGwg
cHJldmVudCBwYWRkaW5nIHdpdGggIj0iLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTElCUFJPVE9CVUZf
RVhQT1JUIGludCBCYXNlNjRFc2NhcGUoY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBpbnQgc2xl
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGRlc3QsIGludCBz
emRlc3QpOwotTElCUFJPVE9CVUZfRVhQT1JUIGludCBXZWJTYWZlQmFzZTY0RXNjYXBlKAotICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgaW50IHNsZW4sIGNoYXIqIGRlc3QsCi0gICAgaW50
IHN6ZGVzdCwgYm9vbCBkb19wYWRkaW5nKTsKLS8vIEVuY29kZSBzcmMgaW50byBkZXN0IHdpdGgg
cGFkZGluZy4KLUxJQlBST1RPQlVGX0VYUE9SVCB2b2lkIEJhc2U2NEVzY2FwZShTdHJpbmdQaWVj
ZSBzcmMsIHN0cmluZyogZGVzdCk7Ci0vLyBFbmNvZGUgc3JjIGludG8gZGVzdCB3ZWItc2FmZWx5
IHdpdGhvdXQgcGFkZGluZy4KLUxJQlBST1RPQlVGX0VYUE9SVCB2b2lkIFdlYlNhZmVCYXNlNjRF
c2NhcGUoU3RyaW5nUGllY2Ugc3JjLCBzdHJpbmcqIGRlc3QpOwotLy8gRW5jb2RlIHNyYyBpbnRv
IGRlc3Qgd2ViLXNhZmVseSB3aXRoIHBhZGRpbmcuCi1MSUJQUk9UT0JVRl9FWFBPUlQgdm9pZCBX
ZWJTYWZlQmFzZTY0RXNjYXBlV2l0aFBhZGRpbmcoU3RyaW5nUGllY2Ugc3JjLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogZGVz
dCk7Ci0KLUxJQlBST1RPQlVGX0VYUE9SVCB2b2lkIEJhc2U2NEVzY2FwZShjb25zdCB1bnNpZ25l
ZCBjaGFyKiBzcmMsIGludCBzenNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJpbmcqIGRlc3QsIGJvb2wgZG9fcGFkZGluZyk7Ci1MSUJQUk9UT0JVRl9FWFBPUlQg
dm9pZCBXZWJTYWZlQmFzZTY0RXNjYXBlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgaW50IHN6
c3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcq
IGRlc3QsIGJvb2wgZG9fcGFkZGluZyk7Ci0KLWlubGluZSBib29sIElzVmFsaWRDb2RlUG9pbnQo
dWludDMyIGNvZGVfcG9pbnQpIHsKLSAgcmV0dXJuIGNvZGVfcG9pbnQgPCAweEQ4MDAgfHwKLSAg
ICAgICAgIChjb2RlX3BvaW50ID49IDB4RTAwMCAmJiBjb2RlX3BvaW50IDw9IDB4MTBGRkZGKTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBVVEZtYXggPSA0OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
RW5jb2RlQXNVVEY4Q2hhcigpCi0vLyAgSGVscGVyIHRvIGFwcGVuZCBhIFVuaWNvZGUgY29kZSBw
b2ludCB0byBhIHN0cmluZyBhcyBVVEY4LCB3aXRob3V0IGJyaW5naW5nCi0vLyAgaW4gYW55IGV4
dGVybmFsIGRlcGVuZGVuY2llcy4gVGhlIG91dHB1dCBidWZmZXIgbXVzdCBiZSBhcyBsZWFzdCA0
IGJ5dGVzCi0vLyAgbGFyZ2UuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1MSUJQUk9UT0JVRl9FWFBPUlQg
aW50IEVuY29kZUFzVVRGOENoYXIodWludDMyIGNvZGVfcG9pbnQsIGNoYXIqIG91dHB1dCk7Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vIFVURjhGaXJzdExldHRlck51bUJ5dGVzKCkKLS8vICAgTGVu
Z3RoIG9mIHRoZSBmaXJzdCBVVEYtOCBjaGFyYWN0ZXIuCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1MSUJQ
Uk9UT0JVRl9FWFBPUlQgaW50IFVURjhGaXJzdExldHRlck51bUJ5dGVzKGNvbnN0IGNoYXIqIHNy
YywgaW50IGxlbik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNl
IGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19TVFJVVElMX0hfXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWxfdW5pdHRlc3QuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbF91bml0dGVzdC5jYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ2MmZjNGFkZjczNzk3NWM2ZGUwMDI1MzMxODhkZGE1ZGVm
Y2Q2OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbF91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBA
IC0xLDgxMCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8g
QXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQotI2luY2x1ZGUgPGxvY2FsZS5oPgotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0bF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+Ci0KLSNpZmRlZiBfV0lOMzIKLSNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCi0jZW5kaWYK
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHsK
LQotLy8gVE9ETyhrZW50b24pOiAgQ29weSBzdHJ1dGlsIHRlc3RzIGZyb20gZ29vZ2xlMz8KLQot
VEVTVChTdHJpbmdVdGlsaXR5VGVzdCwgSW1tdW5lVG9Mb2NhbGVzKSB7Ci0gIC8vIFJlbWVtYmVy
IHRoZSBvbGQgbG9jYWxlLgotICBjaGFyKiBvbGRfbG9jYWxlX2NzdHIgPSBzZXRsb2NhbGUoTENf
TlVNRVJJQywgTlVMTCk7Ci0gIEFTU0VSVF9UUlVFKG9sZF9sb2NhbGVfY3N0ciAhPSBOVUxMKTsK
LSAgc3RyaW5nIG9sZF9sb2NhbGUgPSBvbGRfbG9jYWxlX2NzdHI7Ci0KLSAgLy8gU2V0IHRoZSBs
b2NhbGUgdG8gIkMiLgotICBBU1NFUlRfVFJVRShzZXRsb2NhbGUoTENfTlVNRVJJQywgIkMiKSAh
PSBOVUxMKTsKLQotICBFWFBFQ1RfRVEoIjEuNSIsIFNpbXBsZUR0b2EoMS41KSk7Ci0gIEVYUEVD
VF9FUSgiMS41IiwgU2ltcGxlRnRvYSgxLjUpKTsKLQotICBpZiAoc2V0bG9jYWxlKExDX05VTUVS
SUMsICJlc19FUyIpID09IE5VTEwgJiYKLSAgICAgIHNldGxvY2FsZShMQ19OVU1FUklDLCAiZXNf
RVMudXRmOCIpID09IE5VTEwpIHsKLSAgICAvLyBTb21lIHN5c3RlbXMgbWF5IG5vdCBoYXZlIHRo
ZSBkZXNpcmVkIGxvY2FsZSBhdmFpbGFibGUuCi0gICAgR09PR0xFX0xPRyhXQVJOSU5HKQotICAg
ICAgPDwgIkNvdWxkbid0IHNldCBsb2NhbGUgdG8gZXNfRVMuICBTa2lwcGluZyB0aGlzIHRlc3Qu
IjsKLSAgfSBlbHNlIHsKLSAgICBFWFBFQ1RfRVEoIjEuNSIsIFNpbXBsZUR0b2EoMS41KSk7Ci0g
ICAgRVhQRUNUX0VRKCIxLjUiLCBTaW1wbGVGdG9hKDEuNSkpOwotICB9Ci0KLSAgLy8gUmV0dXJu
IHRvIG9yaWdpbmFsIGxvY2FsZS4KLSAgc2V0bG9jYWxlKExDX05VTUVSSUMsIG9sZF9sb2NhbGUu
Y19zdHIoKSk7Ci19Ci0KLSNkZWZpbmUgRVhQRUNUX0VRX0FSUkFZKGxlbiwgeCwgeSwgbXNnKSAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgZm9yIChpbnQgaiA9IDA7IGogPCBsZW47ICsraikgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFWFBFQ1RfRVEoeFtqXSwgeVtqXSkgPDwg
IiIgIyB4IDw8ICIgIT0gIiAjIHkgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgPDwgIiBieXRlICIgPDwgaiA8PCAiOiAiIDw8IG1zZzsgIFwKLSAgfQotCi1zdGF0aWMgc3Ry
dWN0IHsKLSAgaW50IHBsYWluX2xlbmd0aDsKLSAgY29uc3QgY2hhciogcGxhaW50ZXh0OwotICBj
b25zdCBjaGFyKiBjeXBoZXJ0ZXh0OwotfSBiYXNlNjRfdGVzdHNbXSA9IHsKLSAgLy8gRW1wdHkg
c3RyaW5nLgotICB7IDAsICIiLCAiIn0sCi0KLSAgLy8gQmFzaWMgYml0IHBhdHRlcm5zOwotICAv
LyB2YWx1ZXMgb2J0YWluZWQgd2l0aCAiZWNobyAtbiAnLi4uJyB8IHV1ZW5jb2RlIC1tIHRlc3Qi
Ci0KLSAgeyAxLCAiXDAwMCIsICJBQT09IiB9LAotICB7IDEsICJcMDAxIiwgIkFRPT0iIH0sCi0g
IHsgMSwgIlwwMDIiLCAiQWc9PSIgfSwKLSAgeyAxLCAiXDAwNCIsICJCQT09IiB9LAotICB7IDEs
ICJcMDEwIiwgIkNBPT0iIH0sCi0gIHsgMSwgIlwwMjAiLCAiRUE9PSIgfSwKLSAgeyAxLCAiXDA0
MCIsICJJQT09IiB9LAotICB7IDEsICJcMTAwIiwgIlFBPT0iIH0sCi0gIHsgMSwgIlwyMDAiLCAi
Z0E9PSIgfSwKLQotICB7IDEsICJcMzc3IiwgIi93PT0iIH0sCi0gIHsgMSwgIlwzNzYiLCAiL2c9
PSIgfSwKLSAgeyAxLCAiXDM3NSIsICIvUT09IiB9LAotICB7IDEsICJcMzczIiwgIit3PT0iIH0s
Ci0gIHsgMSwgIlwzNjciLCAiOXc9PSIgfSwKLSAgeyAxLCAiXDM1NyIsICI3dz09IiB9LAotICB7
IDEsICJcMzM3IiwgIjN3PT0iIH0sCi0gIHsgMSwgIlwyNzciLCAidnc9PSIgfSwKLSAgeyAxLCAi
XDE3NyIsICJmdz09IiB9LAotICB7IDIsICJcMDAwXDAwMCIsICJBQUE9IiB9LAotICB7IDIsICJc
MDAwXDAwMSIsICJBQUU9IiB9LAotICB7IDIsICJcMDAwXDAwMiIsICJBQUk9IiB9LAotICB7IDIs
ICJcMDAwXDAwNCIsICJBQVE9IiB9LAotICB7IDIsICJcMDAwXDAxMCIsICJBQWc9IiB9LAotICB7
IDIsICJcMDAwXDAyMCIsICJBQkE9IiB9LAotICB7IDIsICJcMDAwXDA0MCIsICJBQ0E9IiB9LAot
ICB7IDIsICJcMDAwXDEwMCIsICJBRUE9IiB9LAotICB7IDIsICJcMDAwXDIwMCIsICJBSUE9IiB9
LAotICB7IDIsICJcMDAxXDAwMCIsICJBUUE9IiB9LAotICB7IDIsICJcMDAyXDAwMCIsICJBZ0E9
IiB9LAotICB7IDIsICJcMDA0XDAwMCIsICJCQUE9IiB9LAotICB7IDIsICJcMDEwXDAwMCIsICJD
QUE9IiB9LAotICB7IDIsICJcMDIwXDAwMCIsICJFQUE9IiB9LAotICB7IDIsICJcMDQwXDAwMCIs
ICJJQUE9IiB9LAotICB7IDIsICJcMTAwXDAwMCIsICJRQUE9IiB9LAotICB7IDIsICJcMjAwXDAw
MCIsICJnQUE9IiB9LAotCi0gIHsgMiwgIlwzNzdcMzc3IiwgIi8vOD0iIH0sCi0gIHsgMiwgIlwz
NzdcMzc2IiwgIi8vND0iIH0sCi0gIHsgMiwgIlwzNzdcMzc1IiwgIi8vMD0iIH0sCi0gIHsgMiwg
IlwzNzdcMzczIiwgIi8vcz0iIH0sCi0gIHsgMiwgIlwzNzdcMzY3IiwgIi8vYz0iIH0sCi0gIHsg
MiwgIlwzNzdcMzU3IiwgIi8rOD0iIH0sCi0gIHsgMiwgIlwzNzdcMzM3IiwgIi85OD0iIH0sCi0g
IHsgMiwgIlwzNzdcMjc3IiwgIi83OD0iIH0sCi0gIHsgMiwgIlwzNzdcMTc3IiwgIi8zOD0iIH0s
Ci0gIHsgMiwgIlwzNzZcMzc3IiwgIi92OD0iIH0sCi0gIHsgMiwgIlwzNzVcMzc3IiwgIi9mOD0i
IH0sCi0gIHsgMiwgIlwzNzNcMzc3IiwgIisvOD0iIH0sCi0gIHsgMiwgIlwzNjdcMzc3IiwgIjkv
OD0iIH0sCi0gIHsgMiwgIlwzNTdcMzc3IiwgIjcvOD0iIH0sCi0gIHsgMiwgIlwzMzdcMzc3Iiwg
IjMvOD0iIH0sCi0gIHsgMiwgIlwyNzdcMzc3IiwgInYvOD0iIH0sCi0gIHsgMiwgIlwxNzdcMzc3
IiwgImYvOD0iIH0sCi0KLSAgeyAzLCAiXDAwMFwwMDBcMDAwIiwgIkFBQUEiIH0sCi0gIHsgMywg
IlwwMDBcMDAwXDAwMSIsICJBQUFCIiB9LAotICB7IDMsICJcMDAwXDAwMFwwMDIiLCAiQUFBQyIg
fSwKLSAgeyAzLCAiXDAwMFwwMDBcMDA0IiwgIkFBQUUiIH0sCi0gIHsgMywgIlwwMDBcMDAwXDAx
MCIsICJBQUFJIiB9LAotICB7IDMsICJcMDAwXDAwMFwwMjAiLCAiQUFBUSIgfSwKLSAgeyAzLCAi
XDAwMFwwMDBcMDQwIiwgIkFBQWciIH0sCi0gIHsgMywgIlwwMDBcMDAwXDEwMCIsICJBQUJBIiB9
LAotICB7IDMsICJcMDAwXDAwMFwyMDAiLCAiQUFDQSIgfSwKLSAgeyAzLCAiXDAwMFwwMDFcMDAw
IiwgIkFBRUEiIH0sCi0gIHsgMywgIlwwMDBcMDAyXDAwMCIsICJBQUlBIiB9LAotICB7IDMsICJc
MDAwXDAwNFwwMDAiLCAiQUFRQSIgfSwKLSAgeyAzLCAiXDAwMFwwMTBcMDAwIiwgIkFBZ0EiIH0s
Ci0gIHsgMywgIlwwMDBcMDIwXDAwMCIsICJBQkFBIiB9LAotICB7IDMsICJcMDAwXDA0MFwwMDAi
LCAiQUNBQSIgfSwKLSAgeyAzLCAiXDAwMFwxMDBcMDAwIiwgIkFFQUEiIH0sCi0gIHsgMywgIlww
MDBcMjAwXDAwMCIsICJBSUFBIiB9LAotICB7IDMsICJcMDAxXDAwMFwwMDAiLCAiQVFBQSIgfSwK
LSAgeyAzLCAiXDAwMlwwMDBcMDAwIiwgIkFnQUEiIH0sCi0gIHsgMywgIlwwMDRcMDAwXDAwMCIs
ICJCQUFBIiB9LAotICB7IDMsICJcMDEwXDAwMFwwMDAiLCAiQ0FBQSIgfSwKLSAgeyAzLCAiXDAy
MFwwMDBcMDAwIiwgIkVBQUEiIH0sCi0gIHsgMywgIlwwNDBcMDAwXDAwMCIsICJJQUFBIiB9LAot
ICB7IDMsICJcMTAwXDAwMFwwMDAiLCAiUUFBQSIgfSwKLSAgeyAzLCAiXDIwMFwwMDBcMDAwIiwg
ImdBQUEiIH0sCi0KLSAgeyAzLCAiXDM3N1wzNzdcMzc3IiwgIi8vLy8iIH0sCi0gIHsgMywgIlwz
NzdcMzc3XDM3NiIsICIvLy8rIiB9LAotICB7IDMsICJcMzc3XDM3N1wzNzUiLCAiLy8vOSIgfSwK
LSAgeyAzLCAiXDM3N1wzNzdcMzczIiwgIi8vLzciIH0sCi0gIHsgMywgIlwzNzdcMzc3XDM2NyIs
ICIvLy8zIiB9LAotICB7IDMsICJcMzc3XDM3N1wzNTciLCAiLy8vdiIgfSwKLSAgeyAzLCAiXDM3
N1wzNzdcMzM3IiwgIi8vL2YiIH0sCi0gIHsgMywgIlwzNzdcMzc3XDI3NyIsICIvLysvIiB9LAot
ICB7IDMsICJcMzc3XDM3N1wxNzciLCAiLy85LyIgfSwKLSAgeyAzLCAiXDM3N1wzNzZcMzc3Iiwg
Ii8vNy8iIH0sCi0gIHsgMywgIlwzNzdcMzc1XDM3NyIsICIvLzMvIiB9LAotICB7IDMsICJcMzc3
XDM3M1wzNzciLCAiLy92LyIgfSwKLSAgeyAzLCAiXDM3N1wzNjdcMzc3IiwgIi8vZi8iIH0sCi0g
IHsgMywgIlwzNzdcMzU3XDM3NyIsICIvKy8vIiB9LAotICB7IDMsICJcMzc3XDMzN1wzNzciLCAi
LzkvLyIgfSwKLSAgeyAzLCAiXDM3N1wyNzdcMzc3IiwgIi83Ly8iIH0sCi0gIHsgMywgIlwzNzdc
MTc3XDM3NyIsICIvMy8vIiB9LAotICB7IDMsICJcMzc2XDM3N1wzNzciLCAiL3YvLyIgfSwKLSAg
eyAzLCAiXDM3NVwzNzdcMzc3IiwgIi9mLy8iIH0sCi0gIHsgMywgIlwzNzNcMzc3XDM3NyIsICIr
Ly8vIiB9LAotICB7IDMsICJcMzY3XDM3N1wzNzciLCAiOS8vLyIgfSwKLSAgeyAzLCAiXDM1N1wz
NzdcMzc3IiwgIjcvLy8iIH0sCi0gIHsgMywgIlwzMzdcMzc3XDM3NyIsICIzLy8vIiB9LAotICB7
IDMsICJcMjc3XDM3N1wzNzciLCAidi8vLyIgfSwKLSAgeyAzLCAiXDE3N1wzNzdcMzc3IiwgImYv
Ly8iIH0sCi0KLSAgLy8gUmFuZG9tIG51bWJlcnM6IHZhbHVlcyBvYnRhaW5lZCB3aXRoCi0gIC8v
Ci0gIC8vICAjISAvYmluL2Jhc2gKLSAgLy8gIGRkIGJzPSQxIGNvdW50PTEgaWY9L2Rldi9yYW5k
b20gb2Y9L3RtcC9iYXIucmFuZG9tCi0gIC8vICBvZCAtTiAkMSAtdCBvMSAvdG1wL2Jhci5yYW5k
b20KLSAgLy8gIHV1ZW5jb2RlIC1tIHRlc3QgPCAvdG1wL2Jhci5yYW5kb20KLSAgLy8KLSAgLy8g
d2hlcmUgJDEgaXMgdGhlIG51bWJlciBvZiBieXRlcyAoMiwgMykKLQotICB7IDIsICJcMjQzXDM2
MSIsICJvL0U9IiB9LAotICB7IDIsICJcMDI0XDE2NyIsICJGSGM9IiB9LAotICB7IDIsICJcMzEz
XDI1MiIsICJ5Nm89IiB9LAotICB7IDIsICJcMDQ2XDA0MSIsICJKaUU9IiB9LAotICB7IDIsICJc
MTQ1XDIzNiIsICJaWjQ9IiB9LAotICB7IDIsICJcMjU0XDMyNSIsICJyTlU9IiB9LAotICB7IDIs
ICJcMDYxXDMzMCIsICJNZGc9IiB9LAotICB7IDIsICJcMjQ1XDAzMiIsICJwUm89IiB9LAotICB7
IDIsICJcMDA2XDAwMCIsICJCZ0E9IiB9LAotICB7IDIsICJcMzc1XDEzMSIsICIvVms9IiB9LAot
ICB7IDIsICJcMzAzXDIxMCIsICJ3NGc9IiB9LAotICB7IDIsICJcMDQwXDAzNyIsICJJQjg9IiB9
LAotICB7IDIsICJcMjYxXDM3MiIsICJzZm89IiB9LAotICB7IDIsICJcMzM1XDAxNCIsICIzUXc9
IiB9LAotICB7IDIsICJcMjMzXDIxNyIsICJtNDg9IiB9LAotICB7IDIsICJcMzczXDA1NiIsICIr
eTQ9IiB9LAotICB7IDIsICJcMjQ3XDIzMiIsICJwNW89IiB9LAotICB7IDIsICJcMTA3XDA1MyIs
ICJSeXM9IiB9LAotICB7IDIsICJcMjA0XDA3NyIsICJoRDg9IiB9LAotICB7IDIsICJcMjc2XDIx
MSIsICJ2b2s9IiB9LAotICB7IDIsICJcMzEzXDExMCIsICJ5MGc9IiB9LAotICB7IDIsICJcMzYz
XDM3NiIsICI4LzQ9IiB9LAotICB7IDIsICJcMjUxXDIzNCIsICJxWnc9IiB9LAotICB7IDIsICJc
MTAzXDI2MiIsICJRN0k9IiB9LAotICB7IDIsICJcMTQyXDMxMiIsICJZc289IiB9LAotICB7IDIs
ICJcMDY3XDIxMSIsICJONGs9IiB9LAotICB7IDIsICJcMjIwXDAwMSIsICJrQUU9IiB9LAotICB7
IDIsICJcMTUyXDI0MCIsICJhcUE9IiB9LAotICB7IDIsICJcMzY3XDA2MSIsICI5ekU9IiB9LAot
ICB7IDIsICJcMTMzXDI1NSIsICJXNjA9IiB9LAotICB7IDIsICJcMTc2XDAzNSIsICJmaDA9IiB9
LAotICB7IDIsICJcMDMyXDIzMSIsICJHcGs9IiB9LAotCi0gIHsgMywgIlwwMTNcMDA3XDE0NCIs
ICJDd2RrIiB9LAotICB7IDMsICJcMDMwXDExMlwxMDYiLCAiR0VwRyIgfSwKLSAgeyAzLCAiXDA0
N1wzMjVcMDQ2IiwgIko5VW0iIH0sCi0gIHsgMywgIlwzMTBcMTYwXDAyMiIsICJ5SEFTIiB9LAot
ICB7IDMsICJcMTMxXDEwMFwyMzciLCAiV1VDZiIgfSwKLSAgeyAzLCAiXDA2NFwzNDJcMTM0Iiwg
Ik5PSmMiIH0sCi0gIHsgMywgIlwwMTBcMTc3XDAwNCIsICJDSDhFIiB9LAotICB7IDMsICJcMzQ1
XDE0N1wyMDUiLCAiNVdlRiIgfSwKLSAgeyAzLCAiXDMwMFwzNDNcMzYwIiwgIndPUHciIH0sCi0g
IHsgMywgIlwwNjFcMjQwXDIwMSIsICJNYUNCIiB9LAotICB7IDMsICJcMjI1XDMzM1wwNDQiLCAi
bGRzayIgfSwKLSAgeyAzLCAiXDIxNVwxMzdcMzUyIiwgImpWL3EiIH0sCi0gIHsgMywgIlwzNzFc
MTQ3XDE2MCIsICIrV2R3IiB9LAotICB7IDMsICJcMDMwXDMyMFwwNTEiLCAiR05BcCIgfSwKLSAg
eyAzLCAiXDA0NFwxNzRcMjQxIiwgIkpIeWgiIH0sCi0gIHsgMywgIlwyNjBcMTI3XDAzNyIsICJz
RmNmIiB9LAotICB7IDMsICJcMTExXDA0NVwwMzMiLCAiU1NVYiIgfSwKLSAgeyAzLCAiXDIwMlwx
MTRcMTA3IiwgImdreEgiIH0sCi0gIHsgMywgIlwwNTdcMzcxXDA0MiIsICJML2tpIiB9LAotICB7
IDMsICJcMjIzXDI0N1wyNDQiLCAiazZlayIgfSwKLSAgeyAzLCAiXDA0N1wyMTZcMTQ0IiwgIko0
NWsiIH0sCi0gIHsgMywgIlwyMDNcMDcwXDMyNyIsICJnempYIiB9LAotICB7IDMsICJcMjQ3XDE0
MFwwNzIiLCAicDJBNiIgfSwKLSAgeyAzLCAiXDEyNFwxMTVcMTE2IiwgIlZFMU8iIH0sCi0gIHsg
MywgIlwxNTdcMTYyXDA1MCIsICJiM0lvIiB9LAotICB7IDMsICJcMzU3XDIyM1wwMDQiLCAiNzVN
RSIgfSwKLSAgeyAzLCAiXDA1MlwxMTdcMTU2IiwgIktrOXUiIH0sCi0gIHsgMywgIlwzNDdcMTU0
XDAwMCIsICI1MndBIiB9LAotICB7IDMsICJcMzAzXDAxMlwxNDIiLCAid3dwaSIgfSwKLSAgeyAz
LCAiXDA2MFwwMzVcMzYyIiwgIk1CM3kiIH0sCi0gIHsgMywgIlwxMzBcMjI2XDM2MSIsICJXSmJ4
IiB9LAotICB7IDMsICJcMTczXDAxM1wwNzEiLCAiZXdzNSIgfSwKLSAgeyAzLCAiXDMzNlwwMDRc
MDI3IiwgIjNnUVgiIH0sCi0gIHsgMywgIlwzNTdcMzY2XDIzNCIsICI3L2FjIiB9LAotICB7IDMs
ICJcMzUzXDMwNFwxMTEiLCAiNjhSSiIgfSwKLSAgeyAzLCAiXDAyNFwyNjRcMTMxIiwgIkZMUloi
IH0sCi0gIHsgMywgIlwwNzVcMTE0XDI1MSIsICJQVXlwIiB9LAotICB7IDMsICJcMzE1XDAzMVwy
MjUiLCAielJtViIgfSwKLSAgeyAzLCAiXDE1NFwyMDFcMjc2IiwgImJJRysiIH0sCi0gIHsgMywg
IlwyMDBcMDY2XDA3MiIsICJnRFk2IiB9LAotICB7IDMsICJcMTQyXDM1MFwyNjciLCAiWXVpMyIg
fSwKLSAgeyAzLCAiXDAzM1wwMDBcMTY2IiwgIkd3QjIiIH0sCi0gIHsgMywgIlwyMTBcMDU1XDA3
NyIsICJpQzAvIiB9LAotICB7IDMsICJcMzQxXDAzN1wxMjQiLCAiNFI5VSIgfSwKLSAgeyAzLCAi
XDE2MVwxMDNcMTUyIiwgImNVTnEiIH0sCi0gIHsgMywgIlwyNzBcMTQyXDEzMSIsICJ1R0paIiB9
LAotICB7IDMsICJcMzM3XDA3NlwwNzQiLCAiM3o0OCIgfSwKLSAgeyAzLCAiXDM3NVwxMDZcMzYy
IiwgIi9VYnkiIH0sCi0gIHsgMywgIlwyMjdcMzAxXDEyNyIsICJsOEZYIiB9LAotICB7IDMsICJc
MzQwXDAwMlwyMzQiLCAiNEFLYyIgfSwKLSAgeyAzLCAiXDEyMVwwNjRcMDMzIiwgIlVUUWIiIH0s
Ci0gIHsgMywgIlwxNTdcMTM0XDE0MyIsICJiMXhqIiB9LAotICB7IDMsICJcMjQ3XDA1NVwzMjci
LCAicHkzWCIgfSwKLSAgeyAzLCAiXDM0MFwxNDJcMDA1IiwgIjRHSUYiIH0sCi0gIHsgMywgIlww
NjBcMjYwXDE0MyIsICJNTEJqIiB9LAotICB7IDMsICJcMDc1XDIwM1wxNzAiLCAiUFlONCIgfSwK
LSAgeyAzLCAiXDE0M1wxNjBcMDE2IiwgIlkzQU8iIH0sCi0gIHsgMywgIlwzMTNcMDEzXDA2MyIs
ICJ5d3N6IiB9LAotICB7IDMsICJcMTc0XDIzNlwxMzUiLCAiZko1ZCIgfSwKLSAgeyAzLCAiXDEw
M1wwNDdcMDI2IiwgIlF5Y1ciIH0sCi0gIHsgMywgIlwzNjVcMDA1XDM0MyIsICI5UVhqIiB9LAot
ICB7IDMsICJcMjcxXDE2MFwyMjMiLCAidVhDVCIgfSwKLSAgeyAzLCAiXDM2MlwyNTVcMTcyIiwg
IjhxMTYiIH0sCi0gIHsgMywgIlwxMTNcMDEyXDAxNSIsICJTd29OIiB9LAotCi0gIC8vIHZhcmlv
dXMgbGVuZ3RocywgZ2VuZXJhdGVkIGJ5IHRoaXMgcHl0aG9uIHNjcmlwdDoKLSAgLy8KLSAgLy8g
ZnJvbSBzdHJpbmcgaW1wb3J0IGxvd2VyY2FzZSBhcyBsYwotICAvLyBmb3IgaSBpbiByYW5nZSgy
Nyk6Ci0gIC8vICAgcHJpbnQgJ3sgJTJkLCAiJXMiLCVzICIlcyIgfSwnICUgKGksIGxjWzppXSwg
JyAnICogKDI2LWkpLAotICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
Y1s6aV0uZW5jb2RlKCdiYXNlNjQnKS5zdHJpcCgpKQotCi0gIHsgIDAsICIiLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIiIH0sCi0gIHsgIDEsICJhIiwgICAgICAgICAgICAgICAgICAgICAg
ICAgICJZUT09IiB9LAotICB7ICAyLCAiYWIiLCAgICAgICAgICAgICAgICAgICAgICAgICAiWVdJ
PSIgfSwKLSAgeyAgMywgImFiYyIsICAgICAgICAgICAgICAgICAgICAgICAgIllXSmoiIH0sCi0g
IHsgIDQsICJhYmNkIiwgICAgICAgICAgICAgICAgICAgICAgICJZV0pqWkE9PSIgfSwKLSAgeyAg
NSwgImFiY2RlIiwgICAgICAgICAgICAgICAgICAgICAgIllXSmpaR1U9IiB9LAotICB7ICA2LCAi
YWJjZGVmIiwgICAgICAgICAgICAgICAgICAgICAiWVdKalpHVm0iIH0sCi0gIHsgIDcsICJhYmNk
ZWZnIiwgICAgICAgICAgICAgICAgICAgICJZV0pqWkdWbVp3PT0iIH0sCi0gIHsgIDgsICJhYmNk
ZWZnaCIsICAgICAgICAgICAgICAgICAgICJZV0pqWkdWbVoyZz0iIH0sCi0gIHsgIDksICJhYmNk
ZWZnaGkiLCAgICAgICAgICAgICAgICAgICJZV0pqWkdWbVoyaHAiIH0sCi0gIHsgMTAsICJhYmNk
ZWZnaGlqIiwgICAgICAgICAgICAgICAgICJZV0pqWkdWbVoyaHBhZz09IiB9LAotICB7IDExLCAi
YWJjZGVmZ2hpamsiLCAgICAgICAgICAgICAgICAiWVdKalpHVm1aMmhwYW1zPSIgfSwKLSAgeyAx
MiwgImFiY2RlZmdoaWprbCIsICAgICAgICAgICAgICAgIllXSmpaR1ZtWjJocGFtdHMiIH0sCi0g
IHsgMTMsICJhYmNkZWZnaGlqa2xtIiwgICAgICAgICAgICAgICJZV0pqWkdWbVoyaHBhbXRzYlE9
PSIgfSwKLSAgeyAxNCwgImFiY2RlZmdoaWprbG1uIiwgICAgICAgICAgICAgIllXSmpaR1ZtWjJo
cGFtdHNiVzQ9IiB9LAotICB7IDE1LCAiYWJjZGVmZ2hpamtsbW5vIiwgICAgICAgICAgICAiWVdK
alpHVm1aMmhwYW10c2JXNXYiIH0sCi0gIHsgMTYsICJhYmNkZWZnaGlqa2xtbm9wIiwgICAgICAg
ICAgICJZV0pqWkdWbVoyaHBhbXRzYlc1dmNBPT0iIH0sCi0gIHsgMTcsICJhYmNkZWZnaGlqa2xt
bm9wcSIsICAgICAgICAgICJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRT0iIH0sCi0gIHsgMTgsICJh
YmNkZWZnaGlqa2xtbm9wcXIiLCAgICAgICAgICJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnkiIH0s
Ci0gIHsgMTksICJhYmNkZWZnaGlqa2xtbm9wcXJzIiwgICAgICAgICJZV0pqWkdWbVoyaHBhbXRz
Ylc1dmNIRnljdz09IiB9LAotICB7IDIwLCAiYWJjZGVmZ2hpamtsbW5vcHFyc3QiLCAgICAgICAi
WVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNRPSIgfSwKLSAgeyAyMSwgImFiY2RlZmdoaWprbG1u
b3BxcnN0dSIsICAgICAgIllXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjEiIH0sCi0gIHsgMjIs
ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2IiwgICAgICJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnlj
M1IxZGc9PSIgfSwKLSAgeyAyMywgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3IiwgICAgIllXSmpa
R1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmM9IiB9LAotICB7IDI0LCAiYWJjZGVmZ2hpamtsbW5v
cHFyc3R1dnd4IiwgICAiWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDQiIH0sCi0gIHsg
MjUsICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5IiwgICJZV0pqWkdWbVoyaHBhbXRzYlc1dmNI
RnljM1IxZG5kNGVRPT0iIH0sCi0gIHsgMjYsICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIs
ICJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYbz0iIH0sCi19OwotCi1zdGF0aWMg
c3RydWN0IHsKLSAgY29uc3QgY2hhciogcGxhaW50ZXh0OwotICBjb25zdCBjaGFyKiBjeXBoZXJ0
ZXh0OwotfSBiYXNlNjRfc3RyaW5nc1tdID0gewotICAvLyBTb21lIGdvb2dsZSBxdW90ZXMKLSAg
Ly8gQ3lwaGVydGV4dCBjcmVhdGVkIHdpdGggInV1ZW5jb2RlIChHTlUgc2hhcnV0aWxzKSA0LjYu
MyIKLSAgLy8gKE5vdGUgdGhhdCB3ZSdyZSB0ZXN0aW5nIHRoZSB3ZWJzYWZlIGVuY29kaW5nLCB0
aG91Z2gsIHNvIGlmCi0gIC8vIHlvdSBhZGQgbWVzc2FnZXMsIGJlIHN1cmUgdG8gcnVuICJ0ciAt
LSAnKy8nICctXyciIG9uIHRoZSBvdXRwdXQpCi0gIHsgIkkgd2FzIGFsd2F5cyBnb29kIGF0IG1h
dGggYW5kIHNjaWVuY2UsIGFuZCBJIG5ldmVyIHJlYWxpemVkICIKLSAgICAidGhhdCB3YXMgdW51
c3VhbCBvciBzb21laG93IHVuZGVzaXJhYmxlLiBTbyBvbmUgb2YgdGhlIHRoaW5ncyAiCi0gICAg
IkkgY2FyZSBhIGxvdCBhYm91dCBpcyBoZWxwaW5nIHRvIHJlbW92ZSB0aGF0IHN0aWdtYSwgIgot
ICAgICJ0byBzaG93IGdpcmxzIHRoYXQgeW91IGNhbiBiZSBmZW1pbmluZSwgeW91IGNhbiBsaWtl
IHRoZSB0aGluZ3MgIgotICAgICJ0aGF0IGdpcmxzIGxpa2UsIGJ1dCB5b3UgY2FuIGFsc28gYmUg
cmVhbGx5IGdvb2QgYXQgdGVjaG5vbG9neS4gIgotICAgICJZb3UgY2FuIGJlIHJlYWxseSBnb29k
IGF0IGJ1aWxkaW5nIHRoaW5ncy4iCi0gICAgIiAtIE1hcmlzc2EgTWV5ZXIsIE5ld3N3ZWVrLCAy
MDEwLTEyLTIyIiAiXG4iLAotCi0gICAgIlNTQjNZWE1nWVd4M1lYbHpJR2R2YjJRZ1lYUWdiV0Yw
YUNCaGJtUWdjMk5wWlc1alpTd2dZVzVrSUVrZyIKLSAgICAiYm1WMlpYSWdjbVZoYkdsNlpXUWdk
R2hoZENCM1lYTWdkVzUxYzNWaGJDQnZjaUJ6YjIxbGFHOTNJSFZ1IgotICAgICJaR1Z6YVhKaFlt
eGxMaUJUYnlCdmJtVWdiMllnZEdobElIUm9hVzVuY3lCSklHTmhjbVVnWVNCc2IzUWciCi0gICAg
IllXSnZkWFFnYVhNZ2FHVnNjR2x1WnlCMGJ5QnlaVzF2ZG1VZ2RHaGhkQ0J6ZEdsbmJXRXNJSFJ2
SUhObyIKLSAgICAiYjNjZ1oybHliSE1nZEdoaGRDQjViM1VnWTJGdUlHSmxJR1psYldsdWFXNWxM
Q0I1YjNVZ1kyRnVJR3hwIgotICAgICJhMlVnZEdobElIUm9hVzVuY3lCMGFHRjBJR2RwY214eklH
eHBhMlVzSUdKMWRDQjViM1VnWTJGdUlHRnMiCi0gICAgImMyOGdZbVVnY21WaGJHeDVJR2R2YjJR
Z1lYUWdkR1ZqYUc1dmJHOW5lUzRnV1c5MUlHTmhiaUJpWlNCeSIKLSAgICAiWldGc2JIa2daMjl2
WkNCaGRDQmlkV2xzWkdsdVp5QjBhR2x1WjNNdUlDMGdUV0Z5YVhOellTQk5aWGxsIgotICAgICJj
aXdnVG1WM2MzZGxaV3NzSURJd01UQXRNVEl0TWpJSyIgfSwKLQotICB7ICJUeXBpY2FsIGZpcnN0
IHllYXIgZm9yIGEgbmV3IGNsdXN0ZXI6ICIKLSAgICAifjAuNSBvdmVyaGVhdGluZyAiCi0gICAg
In4xIFBEVSBmYWlsdXJlICIKLSAgICAifjEgcmFjay1tb3ZlICIKLSAgICAifjEgbmV0d29yayBy
ZXdpcmluZyAiCi0gICAgIn4yMCByYWNrIGZhaWx1cmVzICIKLSAgICAifjUgcmFja3MgZ28gd29u
a3kgIgotICAgICJ+OCBuZXR3b3JrIG1haW50ZW5hbmNlcyAiCi0gICAgIn4xMiByb3V0ZXIgcmVs
b2FkcyAiCi0gICAgIn4zIHJvdXRlciBmYWlsdXJlcyAiCi0gICAgIn5kb3plbnMgb2YgbWlub3Ig
MzAtc2Vjb25kIGJsaXBzIGZvciBkbnMgIgotICAgICJ+MTAwMCBpbmRpdmlkdWFsIG1hY2hpbmUg
ZmFpbHVyZXMgIgotICAgICJ+dGhvdXNhbmRzIG9mIGhhcmQgZHJpdmUgZmFpbHVyZXMgIgotICAg
ICJzbG93IGRpc2tzLCBiYWQgbWVtb3J5LCBtaXNjb25maWd1cmVkIG1hY2hpbmVzLCBmbGFreSBt
YWNoaW5lcywgZXRjLiIKLSAgICAiIC0gSmVmZiBEZWFuLCBUaGUgSm95cyBvZiBSZWFsIEhhcmR3
YXJlIiAiXG4iLAotCi0gICAgIlZIbHdhV05oYkNCbWFYSnpkQ0I1WldGeUlHWnZjaUJoSUc1bGR5
QmpiSFZ6ZEdWeU9pQi1NQzQxSUc5MiIKLSAgICAiWlhKb1pXRjBhVzVuSUg0eElGQkVWU0JtWVds
c2RYSmxJSDR4SUhKaFkyc3RiVzkyWlNCLU1TQnVaWFIzIgotICAgICJiM0pySUhKbGQybHlhVzVu
SUg0eU1DQnlZV05ySUdaaGFXeDFjbVZ6SUg0MUlISmhZMnR6SUdkdklIZHYiCi0gICAgImJtdDVJ
SDQ0SUc1bGRIZHZjbXNnYldGcGJuUmxibUZ1WTJWeklINHhNaUJ5YjNWMFpYSWdjbVZzYjJGayIK
LSAgICAiY3lCLU15QnliM1YwWlhJZ1ptRnBiSFZ5WlhNZ2ZtUnZlbVZ1Y3lCdlppQnRhVzV2Y2lB
ek1DMXpaV052IgotICAgICJibVFnWW14cGNITWdabTl5SUdSdWN5Qi1NVEF3TUNCcGJtUnBkbWxr
ZFdGc0lHMWhZMmhwYm1VZ1ptRnAiCi0gICAgImJIVnlaWE1nZm5Sb2IzVnpZVzVrY3lCdlppQm9Z
WEprSUdSeWFYWmxJR1poYVd4MWNtVnpJSE5zYjNjZyIKLSAgICAiWkdsemEzTXNJR0poWkNCdFpX
MXZjbmtzSUcxcGMyTnZibVpwWjNWeVpXUWdiV0ZqYUdsdVpYTXNJR1pzIgotICAgICJZV3Q1SUcx
aFkyaHBibVZ6TENCbGRHTXVJQzBnU21WbVppQkVaV0Z1TENCVWFHVWdTbTk1Y3lCdlppQlMiCi0g
ICAgIlpXRnNJRWhoY21SM1lYSmxDZyIgfSwKLQotICB7ICJJJ20gdGhlIGhlYWQgb2YgdGhlIHdl
YnNwYW0gdGVhbSBhdCBHb29nbGUuICAiCi0gICAgIlRoYXQgbWVhbnMgdGhhdCBpZiB5b3UgdHlw
ZSB5b3VyIG5hbWUgaW50byBHb29nbGUgYW5kIGdldCBwb3JuIGJhY2ssICIKLSAgICAiaXQncyBt
eSBmYXVsdC4gVW5sZXNzIHlvdSdyZSBhIHBvcm4gc3RhciwgaW4gd2hpY2ggY2FzZSBwb3JuIGlz
IGEgIgotICAgICJjb21wbGV0ZWx5IHJlYXNvbmFibGUgcmVzcG9uc2UuIgotICAgICIgLSBNYXR0
IEN1dHRzLCBHb29nbGUgUGx1cyIgIlxuIiwKLQotICAgICJTU2R0SUhSb1pTQm9aV0ZrSUc5bUlI
Um9aU0IzWldKemNHRnRJSFJsWVcwZ1lYUWdSMjl2WjJ4bExpQWciCi0gICAgIlZHaGhkQ0J0WldG
dWN5QjBhR0YwSUdsbUlIbHZkU0IwZVhCbElIbHZkWElnYm1GdFpTQnBiblJ2SUVkdiIKLSAgICAi
YjJkc1pTQmhibVFnWjJWMElIQnZjbTRnWW1GamF5d2dhWFFuY3lCdGVTQm1ZWFZzZEM0Z1ZXNXNa
WE56IgotICAgICJJSGx2ZFNkeVpTQmhJSEJ2Y200Z2MzUmhjaXdnYVc0Z2QyaHBZMmdnWTJGelpT
QndiM0p1SUdseklHRWciCi0gICAgIlkyOXRjR3hsZEdWc2VTQnlaV0Z6YjI1aFlteGxJSEpsYzNC
dmJuTmxMaUF0SUUxaGRIUWdRM1YwZEhNcyIKLSAgICAiSUVkdmIyZHNaU0JRYkhWekNnIiB9LAot
Ci0gIHsgIkl0IHdpbGwgc3RpbGwgYmUgYSBsb25nIHRpbWUgYmVmb3JlIG1hY2hpbmVzIGFwcHJv
YWNoIGh1bWFuIGludGVsbGlnZW5jZS4gIgotICAgICJCdXQgbHVja2lseSwgbWFjaGluZXMgZG9u
J3QgYWN0dWFsbHkgaGF2ZSB0byBiZSBpbnRlbGxpZ2VudDsgIgotICAgICJ0aGV5IGp1c3QgaGF2
ZSB0byBmYWtlIGl0LiBBY2Nlc3MgdG8gYSB3ZWFsdGggb2YgaW5mb3JtYXRpb24sICIKLSAgICAi
Y29tYmluZWQgd2l0aCBhIHJ1ZGltZW50YXJ5IGRlY2lzaW9uLW1ha2luZyBjYXBhY2l0eSwgIgot
ICAgICJjYW4gb2Z0ZW4gYmUgYWxtb3N0IGFzIHVzZWZ1bC4gT2YgY291cnNlLCB0aGUgcmVzdWx0
cyBhcmUgYmV0dGVyIHlldCAiCi0gICAgIndoZW4gY291cGxlZCB3aXRoIGludGVsbGlnZW5jZS4g
QSByZWZlcmVuY2UgbGlicmFyaWFuIHdpdGggYWNjZXNzIHRvICIKLSAgICAiYSBnb29kIHNlYXJj
aCBlbmdpbmUgaXMgYSBmb3JtaWRhYmxlIHRvb2wuIgotICAgICIgLSBDcmFpZyBTaWx2ZXJzdGVp
biwgU2llbWVucyBQaWN0dXJlcyBvZiB0aGUgRnV0dXJlLCBTcHJpbmcgMjAwNCIgIlxuIiwKLQot
ICAgICJTWFFnZDJsc2JDQnpkR2xzYkNCaVpTQmhJR3h2Ym1jZ2RHbHRaU0JpWldadmNtVWdiV0Zq
YUdsdVpYTWciCi0gICAgIllYQndjbTloWTJnZ2FIVnRZVzRnYVc1MFpXeHNhV2RsYm1ObExpQkNk
WFFnYkhWamEybHNlU3dnYldGaiIKLSAgICAiYUdsdVpYTWdaRzl1SjNRZ1lXTjBkV0ZzYkhrZ2FH
RjJaU0IwYnlCaVpTQnBiblJsYkd4cFoyVnVkRHNnIgotICAgICJkR2hsZVNCcWRYTjBJR2hoZG1V
Z2RHOGdabUZyWlNCcGRDNGdRV05qWlhOeklIUnZJR0VnZDJWaGJIUm8iCi0gICAgIklHOW1JR2x1
Wm05eWJXRjBhVzl1TENCamIyMWlhVzVsWkNCM2FYUm9JR0VnY25Wa2FXMWxiblJoY25rZyIKLSAg
ICAiWkdWamFYTnBiMjR0YldGcmFXNW5JR05oY0dGamFYUjVMQ0JqWVc0Z2IyWjBaVzRnWW1VZ1lX
eHRiM04wIgotICAgICJJR0Z6SUhWelpXWjFiQzRnVDJZZ1kyOTFjbk5sTENCMGFHVWdjbVZ6ZFd4
MGN5QmhjbVVnWW1WMGRHVnkiCi0gICAgIklIbGxkQ0IzYUdWdUlHTnZkWEJzWldRZ2QybDBhQ0Jw
Ym5SbGJHeHBaMlZ1WTJVdUlFRWdjbVZtWlhKbCIKLSAgICAiYm1ObElHeHBZbkpoY21saGJpQjNh
WFJvSUdGalkyVnpjeUIwYnlCaElHZHZiMlFnYzJWaGNtTm9JR1Z1IgotICAgICJaMmx1WlNCcGN5
QmhJR1p2Y20xcFpHRmliR1VnZEc5dmJDNGdMU0JEY21GcFp5QlRhV3gyWlhKemRHVnAiCi0gICAg
ImJpd2dVMmxsYldWdWN5QlFhV04wZFhKbGN5QnZaaUIwYUdVZ1JuVjBkWEpsTENCVGNISnBibWNn
TWpBdyIKLSAgICAiTkFvIiB9LAotCi0gIC8vIERlZ2VuZXJhdGUgZWRnZSBjYXNlCi0gIHsgIiIs
Ci0gICAgIiIgfSwKLX07Ci0KLVRFU1QoQmFzZTY0LCBFc2NhcGVBbmRVbmVzY2FwZSkgewotICAv
LyBDaGVjayB0aGUgc2hvcnQgc3RyaW5nczsgdGhpcyB0ZXN0cyB0aGUgbWF0aCAoYW5kIGJvdW5k
YXJpZXMpCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGJhc2U2NF90ZXN0cykgLyBzaXpl
b2YoYmFzZTY0X3Rlc3RzWzBdKTsgKytpKSB7Ci0gICAgY2hhciBlbmNvZGVfYnVmZmVyWzEwMF07
Ci0gICAgaW50IGVuY29kZV9sZW5ndGg7Ci0gICAgY2hhciBkZWNvZGVfYnVmZmVyWzEwMF07Ci0g
ICAgaW50IGRlY29kZV9sZW5ndGg7Ci0gICAgaW50IGN5cGhlcl9sZW5ndGg7Ci0gICAgc3RyaW5n
IGRlY29kZV9zdHI7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1bnNpZ25lZF9wbGFpbnRl
eHQgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYmFzZTY0
X3Rlc3RzW2ldLnBsYWludGV4dCk7Ci0KLSAgICBTdHJpbmdQaWVjZSBwbGFpbnRleHQoYmFzZTY0
X3Rlc3RzW2ldLnBsYWludGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0X3Rl
c3RzW2ldLnBsYWluX2xlbmd0aCk7Ci0KLSAgICBjeXBoZXJfbGVuZ3RoID0gc3RybGVuKGJhc2U2
NF90ZXN0c1tpXS5jeXBoZXJ0ZXh0KTsKLQotICAgIC8vIFRoZSBiYXNpYyBlc2NhcGUgZnVuY3Rp
b246Ci0gICAgbWVtc2V0KGVuY29kZV9idWZmZXIsIDAsIHNpemVvZihlbmNvZGVfYnVmZmVyKSk7
Ci0gICAgZW5jb2RlX2xlbmd0aCA9IEJhc2U2NEVzY2FwZSh1bnNpZ25lZF9wbGFpbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVu
Z3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlX2J1ZmZlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbmNvZGVfYnVmZmVyKSk7Ci0g
ICAgLy8gICAgSXMgaXQgb2YgdGhlIGV4cGVjdGVkIGxlbmd0aD8KLSAgICBFWFBFQ1RfRVEoZW5j
b2RlX2xlbmd0aCwgY3lwaGVyX2xlbmd0aCk7Ci0gICAgLy8gV291bGQgaXQgaGF2ZSBiZWVuIG9r
YXkgdG8gYWxsb2NhdGUgb25seSBDYWxjdWxhdGVCYXNlNjRFc2NhcGVMZW4oKT8KLSAgICBFWFBF
Q1RfRVEoQ2FsY3VsYXRlQmFzZTY0RXNjYXBlZExlbihiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVu
Z3RoKSwKLSAgICAgICAgICAgICAgZW5jb2RlX2xlbmd0aCk7Ci0KLSAgICAvLyAgICBJcyBpdCB0
aGUgZXhwZWN0ZWQgZW5jb2RlZCB2YWx1ZT8KLSAgICBBU1NFUlRfU1RSRVEoZW5jb2RlX2J1ZmZl
ciwgYmFzZTY0X3Rlc3RzW2ldLmN5cGhlcnRleHQpOwotCi0gICAgLy8gSWYgd2UgZW5jb2RlIGl0
IGludG8gYSBidWZmZXIgb2YgZXhhY3RseSB0aGUgcmlnaHQgbGVuZ3RoLi4uCi0gICAgbWVtc2V0
KGVuY29kZV9idWZmZXIsIDAsIHNpemVvZihlbmNvZGVfYnVmZmVyKSk7Ci0gICAgZW5jb2RlX2xl
bmd0aCA9IEJhc2U2NEVzY2FwZSh1bnNpZ25lZF9wbGFpbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlX2J1ZmZlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5cGhlcl9sZW5ndGgp
OwotICAgIC8vICAgIElzIGl0IHN0aWxsIG9mIHRoZSBleHBlY3RlZCBsZW5ndGg/Ci0gICAgRVhQ
RUNUX0VRKGVuY29kZV9sZW5ndGgsIGN5cGhlcl9sZW5ndGgpOwotCi0gICAgLy8gICAgQW5kIGlz
IHRoZSB2YWx1ZSBzdGlsbCBjb3JyZWN0PyAgKGkuZS4sIG5vdCBsb3NpbmcgdGhlIGxhc3QgYnl0
ZSkKLSAgICBFWFBFQ1RfU1RSRVEoZW5jb2RlX2J1ZmZlciwgYmFzZTY0X3Rlc3RzW2ldLmN5cGhl
cnRleHQpOwotCi0gICAgLy8gSWYgd2UgZGVjb2RlIGl0IGJhY2s6Ci0gICAgZGVjb2RlX3N0ci5j
bGVhcigpOwotICAgIEVYUEVDVF9UUlVFKEJhc2U2NFVuZXNjYXBlKAotICAgICAgICBTdHJpbmdQ
aWVjZShlbmNvZGVfYnVmZmVyLCBjeXBoZXJfbGVuZ3RoKSwgJmRlY29kZV9zdHIpKTsKLQotICAg
IC8vICAgIElzIGl0IG9mIHRoZSBleHBlY3RlZCBsZW5ndGg/Ci0gICAgRVhQRUNUX0VRKGJhc2U2
NF90ZXN0c1tpXS5wbGFpbl9sZW5ndGgsIGRlY29kZV9zdHIubGVuZ3RoKCkpOwotCi0gICAgLy8g
ICAgSXMgaXQgdGhlIGV4cGVjdGVkIGRlY29kZWQgdmFsdWU/Ci0gICAgRVhQRUNUX0VRKHBsYWlu
dGV4dCwgZGVjb2RlX3N0cik7Ci0KLSAgICAvLyBMZXQncyB0cnkgd2l0aCBhIHByZS1wb3B1bGF0
ZWQgc3RyaW5nLgotICAgIHN0cmluZyBlbmNvZGVkKCJ0aGlzIGp1bmsgc2hvdWxkIGJlIGlnbm9y
ZWQiKTsKLSAgICBCYXNlNjRFc2NhcGUoc3RyaW5nKGJhc2U2NF90ZXN0c1tpXS5wbGFpbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVuZ3RoKSwK
LSAgICAgICAgICAgICAgICAgJmVuY29kZWQpOwotICAgIEVYUEVDVF9FUShlbmNvZGVkLCBzdHJp
bmcoZW5jb2RlX2J1ZmZlciwgY3lwaGVyX2xlbmd0aCkpOwotCi0gICAgc3RyaW5nIGRlY29kZWQo
InRoaXMganVuayBzaG91bGQgYmUgaWdub3JlZCIpOwotICAgIEVYUEVDVF9UUlVFKEJhc2U2NFVu
ZXNjYXBlKAotICAgICAgICBTdHJpbmdQaWVjZShlbmNvZGVfYnVmZmVyLCBjeXBoZXJfbGVuZ3Ro
KSwgJmRlY29kZWQpKTsKLSAgICBFWFBFQ1RfRVEoZGVjb2RlZC5zaXplKCksIGJhc2U2NF90ZXN0
c1tpXS5wbGFpbl9sZW5ndGgpOwotICAgIEVYUEVDVF9FUV9BUlJBWShkZWNvZGVkLnNpemUoKSwg
ZGVjb2RlZCwgYmFzZTY0X3Rlc3RzW2ldLnBsYWludGV4dCwgaSk7Ci0KLSAgICAvLyBPdXIgZGVj
b2RlciB0cmVhdHMgdGhlIHBhZGRpbmcgJz0nIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBhcwotICAg
IC8vIG9wdGlvbmFsIChidXQgaWYgdGhlcmUgYXJlIGFueSwgdGhlcmUgbXVzdCBiZSB0aGUgY29y
cmVjdAotICAgIC8vIG51bWJlciBvZiB0aGVtLikgIElmIGVuY29kZV9idWZmZXIgaGFzIGFueSwg
cnVuIHNvbWUgYWRkaXRpb25hbAotICAgIC8vIHRlc3RzIHRoYXQgZmlkZGxlIHdpdGggdGhlbS4K
LSAgICBjaGFyKiBmaXJzdF9lcXVhbHMgPSBzdHJjaHIoZW5jb2RlX2J1ZmZlciwgJz0nKTsKLSAg
ICBpZiAoZmlyc3RfZXF1YWxzKSB7Ci0gICAgICAvLyBIb3cgbWFueSBlcXVhbHMgc2lnbnMgZG9l
cyB0aGUgc3RyaW5nIHN0YXJ0IHdpdGg/Ci0gICAgICBpbnQgZXF1YWxzID0gKCooZmlyc3RfZXF1
YWxzKzEpID09ICc9JykgPyAyIDogMTsKLQotICAgICAgLy8gVHJ5IGNob3BwaW5nIG9mZiB0aGUg
ZXF1YWxzIHNpZ24ocykgZW50aXJlbHkuICBUaGUgZGVjb2RlcgotICAgICAgLy8gc2hvdWxkIHN0
aWxsIGJlIG9rYXkgd2l0aCB0aGlzLgotICAgICAgc3RyaW5nIGRlY29kZWQyKCJ0aGlzIGp1bmsg
c2hvdWxkIGFsc28gYmUgaWdub3JlZCIpOwotICAgICAgKmZpcnN0X2VxdWFscyA9ICdcMCc7Ci0g
ICAgICBFWFBFQ1RfVFJVRShCYXNlNjRVbmVzY2FwZSgKLSAgICAgICAgICBTdHJpbmdQaWVjZShl
bmNvZGVfYnVmZmVyLCBmaXJzdF9lcXVhbHMgLSBlbmNvZGVfYnVmZmVyKSwgJmRlY29kZWQyKSk7
Ci0gICAgICBFWFBFQ1RfRVEoZGVjb2RlZC5zaXplKCksIGJhc2U2NF90ZXN0c1tpXS5wbGFpbl9s
ZW5ndGgpOwotICAgICAgRVhQRUNUX0VRX0FSUkFZKGRlY29kZWQuc2l6ZSgpLCBkZWNvZGVkLCBi
YXNlNjRfdGVzdHNbaV0ucGxhaW50ZXh0LCBpKTsKLQotICAgICAgLy8gTm93IHRlc3QgY2hvcHBp
bmcgb2ZmIHRoZSBlcXVhbHMgc2lnbihzKSBhbmQgYWRkaW5nCi0gICAgICAvLyB3aGl0ZXNwYWNl
LiAgT3VyIGRlY29kZXIgc2hvdWxkIHN0aWxsIGFjY2VwdCB0aGlzLgotICAgICAgZGVjb2RlZDIu
YXNzaWduKCJ0aGlzIGp1bmsgc2hvdWxkIGJlIGlnbm9yZWQiKTsKLSAgICAgICpmaXJzdF9lcXVh
bHMgPSAnICc7Ci0gICAgICAqKGZpcnN0X2VxdWFscysxKSA9ICdcMCc7Ci0gICAgICBFWFBFQ1Rf
VFJVRShCYXNlNjRVbmVzY2FwZSgKLSAgICAgICAgICBTdHJpbmdQaWVjZShlbmNvZGVfYnVmZmVy
LCBmaXJzdF9lcXVhbHMgLSBlbmNvZGVfYnVmZmVyICsgMSksCi0gICAgICAgICAgJmRlY29kZWQy
KSk7Ci0gICAgICBFWFBFQ1RfRVEoZGVjb2RlZC5zaXplKCksIGJhc2U2NF90ZXN0c1tpXS5wbGFp
bl9sZW5ndGgpOwotICAgICAgRVhQRUNUX0VRX0FSUkFZKGRlY29kZWQuc2l6ZSgpLCBkZWNvZGVk
LCBiYXNlNjRfdGVzdHNbaV0ucGxhaW50ZXh0LCBpKTsKLQotICAgICAgLy8gTm93IHN0aWNrIGEg
YmFkIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuICBUaGUgZGVjb2RlcgotICAg
ICAgLy8gc2hvdWxkIHJlZnVzZSB0aGlzIHN0cmluZy4KLSAgICAgIGRlY29kZWQyLmFzc2lnbigi
dGhpcyBqdW5rIHNob3VsZCBiZSBpZ25vcmVkIik7Ci0gICAgICAqZmlyc3RfZXF1YWxzID0gJz8n
OwotICAgICAgKihmaXJzdF9lcXVhbHMrMSkgPSAnXDAnOwotICAgICAgRVhQRUNUX1RSVUUoCi0g
ICAgICAgICAgIUJhc2U2NFVuZXNjYXBlKAotICAgICAgICAgICAgICBTdHJpbmdQaWVjZShlbmNv
ZGVfYnVmZmVyLCBmaXJzdF9lcXVhbHMgLSBlbmNvZGVfYnVmZmVyICsgMSksCi0gICAgICAgICAg
ICAgICZkZWNvZGVkMikpOwotCi0gICAgICBpbnQgbGVuOwotCi0gICAgICAvLyBUZXN0IHdoaXRl
c3BhY2UgbWl4ZWQgd2l0aCB0aGUgcGFkZGluZy4gIChlZyAiQUEgPSA9ICIpICBUaGUKLSAgICAg
IC8vIGRlY29kZXIgc2hvdWxkIGFjY2VwdCB0aGlzLgotICAgICAgaWYgKGVxdWFscyA9PSAyKSB7
Ci0gICAgICAgIHNucHJpbnRmKGZpcnN0X2VxdWFscywgNiwgIiA9ID0gIik7Ci0gICAgICAgIGxl
biA9IGZpcnN0X2VxdWFscyAtIGVuY29kZV9idWZmZXIgKyA1OwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgc25wcmludGYoZmlyc3RfZXF1YWxzLCA2LCAiID0gIik7Ci0gICAgICAgIGxlbiA9IGZp
cnN0X2VxdWFscyAtIGVuY29kZV9idWZmZXIgKyAzOwotICAgICAgfQotICAgICAgZGVjb2RlZDIu
YXNzaWduKCJ0aGlzIGp1bmsgc2hvdWxkIGJlIGlnbm9yZWQiKTsKLSAgICAgIEVYUEVDVF9UUlVF
KAotICAgICAgICAgIEJhc2U2NFVuZXNjYXBlKFN0cmluZ1BpZWNlKGVuY29kZV9idWZmZXIsIGxl
biksICZkZWNvZGVkMikpOwotICAgICAgRVhQRUNUX0VRKGRlY29kZWQuc2l6ZSgpLCBiYXNlNjRf
dGVzdHNbaV0ucGxhaW5fbGVuZ3RoKTsKLSAgICAgIEVYUEVDVF9FUV9BUlJBWShkZWNvZGVkLnNp
emUoKSwgZGVjb2RlZCwgYmFzZTY0X3Rlc3RzW2ldLnBsYWludGV4dCwgaSk7Ci0KLSAgICAgIC8v
IFRlc3Qgd2hpdGVzcGFjZSBtaXhlZCB3aXRoIHRoZSBwYWRkaW5nLCBidXQgd2l0aCB0aGUgd3Jv
bmcKLSAgICAgIC8vIG51bWJlciBvZiBlcXVhbHMgc2lnbnMgKGVnICJBQSA9ICIpLiAgVGhlIGRl
Y29kZXIgc2hvdWxkCi0gICAgICAvLyByZWZ1c2UgdGhlc2Ugc3RyaW5ncy4KLSAgICAgIGlmIChl
cXVhbHMgPT0gMSkgewotICAgICAgICBzbnByaW50ZihmaXJzdF9lcXVhbHMsIDYsICIgPSA9ICIp
OwotICAgICAgICBsZW4gPSBmaXJzdF9lcXVhbHMgLSBlbmNvZGVfYnVmZmVyICsgNTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIHNucHJpbnRmKGZpcnN0X2VxdWFscywgNiwgIiA9ICIpOwotICAg
ICAgICBsZW4gPSBmaXJzdF9lcXVhbHMgLSBlbmNvZGVfYnVmZmVyICsgMzsKLSAgICAgIH0KLSAg
ICAgIEVYUEVDVF9UUlVFKAotICAgICAgICAgICFCYXNlNjRVbmVzY2FwZShTdHJpbmdQaWVjZShl
bmNvZGVfYnVmZmVyLCBsZW4pLCAmZGVjb2RlZDIpKTsKLSAgICB9Ci0KLSAgICAvLyBDb29sISB0
aGUgYmFzaWMgQmFzZTY0IGVuY29kZXIvZGVjb2RlciB3b3Jrcy4KLSAgICAvLyBMZXQncyB0cnkg
dGhlIGFsdGVybmF0ZSBhbHBoYWJldDogdHIgLS0gJysvJyAnLV8nCi0KLSAgICBjaGFyIHdlYnNh
ZmVbMTAwXTsKLSAgICBtZW1zZXQod2Vic2FmZSwgMCwgc2l6ZW9mKHdlYnNhZmUpKTsKLSAgICBz
dHJuY3B5KHdlYnNhZmUsIGJhc2U2NF90ZXN0c1tpXS5jeXBoZXJ0ZXh0LCBjeXBoZXJfbGVuZ3Ro
KTsKLSAgICBmb3IgKGludCBjID0gMDsgYyA8IHNpemVvZih3ZWJzYWZlKTsgKytjKSB7Ci0gICAg
ICBpZiAoJysnID09IHdlYnNhZmVbY10pIHsgd2Vic2FmZVtjXSA9ICctJzsgfQotICAgICAgaWYg
KCcvJyA9PSB3ZWJzYWZlW2NdKSB7IHdlYnNhZmVbY10gPSAnXyc7IH0KLSAgICB9Ci0KLSAgICAv
LyBUaGUgd2Vic2FmZSBlc2NhcGUgZnVuY3Rpb246Ci0gICAgbWVtc2V0KGVuY29kZV9idWZmZXIs
IDAsIHNpemVvZihlbmNvZGVfYnVmZmVyKSk7Ci0gICAgZW5jb2RlX2xlbmd0aCA9IFdlYlNhZmVC
YXNlNjRFc2NhcGUodW5zaWduZWRfcGxhaW50ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NF90ZXN0c1tpXS5wbGFpbl9sZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlX2J1
ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplb2YoZW5jb2RlX2J1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgLy8gICAgSXMgaXQgb2YgdGhlIGV4cGVjdGVkIGxl
bmd0aD8KLSAgICBFWFBFQ1RfRVEoZW5jb2RlX2xlbmd0aCwgY3lwaGVyX2xlbmd0aCk7Ci0gICAg
RVhQRUNUX0VRKAotICAgICAgICBDYWxjdWxhdGVCYXNlNjRFc2NhcGVkTGVuKGJhc2U2NF90ZXN0
c1tpXS5wbGFpbl9sZW5ndGgsIHRydWUpLAotICAgICAgICBlbmNvZGVfbGVuZ3RoKTsKLQotICAg
IC8vICAgIElzIGl0IHRoZSBleHBlY3RlZCBlbmNvZGVkIHZhbHVlPwotICAgIEVYUEVDVF9TVFJF
UShlbmNvZGVfYnVmZmVyLCB3ZWJzYWZlKTsKLQotICAgIC8vICAgIElmIHdlIGVuY29kZSBpdCBp
bnRvIGEgYnVmZmVyIG9mIGV4YWN0bHkgdGhlIHJpZ2h0IGxlbmd0aC4uLgotICAgIG1lbXNldChl
bmNvZGVfYnVmZmVyLCAwLCBzaXplb2YoZW5jb2RlX2J1ZmZlcikpOwotICAgIGVuY29kZV9sZW5n
dGggPSBXZWJTYWZlQmFzZTY0RXNjYXBlKHVuc2lnbmVkX3BsYWludGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRfdGVzdHNbaV0ucGxh
aW5fbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuY29kZV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3lwaGVyX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAvLyAgICBJcyBpdCBzdGlsbCBvZiB0aGUg
ZXhwZWN0ZWQgbGVuZ3RoPwotICAgIEVYUEVDVF9FUShlbmNvZGVfbGVuZ3RoLCBjeXBoZXJfbGVu
Z3RoKTsKLQotICAgIC8vICAgIEFuZCBpcyB0aGUgdmFsdWUgc3RpbGwgY29ycmVjdD8gIChpLmUu
LCBub3QgbG9zaW5nIHRoZSBsYXN0IGJ5dGUpCi0gICAgRVhQRUNUX1NUUkVRKGVuY29kZV9idWZm
ZXIsIHdlYnNhZmUpOwotCi0gICAgLy8gICAgTGV0J3MgdHJ5IHRoZSBzdHJpbmcgdmVyc2lvbiBv
ZiB0aGUgZW5jb2RlcgotICAgIGVuY29kZWQgPSAidGhpcyBqdW5rIHNob3VsZCBiZSBpZ25vcmVk
IjsKLSAgICBXZWJTYWZlQmFzZTY0RXNjYXBlKAotICAgICAgICB1bnNpZ25lZF9wbGFpbnRleHQs
IGJhc2U2NF90ZXN0c1tpXS5wbGFpbl9sZW5ndGgsCi0gICAgICAgICZlbmNvZGVkLCB0cnVlKTsK
LSAgICBFWFBFQ1RfRVEoZW5jb2RlZC5zaXplKCksIGN5cGhlcl9sZW5ndGgpOwotICAgIEVYUEVD
VF9TVFJFUShlbmNvZGVkLmNfc3RyKCksIHdlYnNhZmUpOwotCi0gICAgLy8gICAgSWYgd2UgZGVj
b2RlIGl0IGJhY2s6Ci0gICAgbWVtc2V0KGRlY29kZV9idWZmZXIsIDAsIHNpemVvZihkZWNvZGVf
YnVmZmVyKSk7Ci0gICAgZGVjb2RlX2xlbmd0aCA9IFdlYlNhZmVCYXNlNjRVbmVzY2FwZShlbmNv
ZGVfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3lwaGVyX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlY29kZV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGVjb2RlX2J1ZmZlcikpOwotCi0gICAg
Ly8gICAgSXMgaXQgb2YgdGhlIGV4cGVjdGVkIGxlbmd0aD8KLSAgICBFWFBFQ1RfRVEoZGVjb2Rl
X2xlbmd0aCwgYmFzZTY0X3Rlc3RzW2ldLnBsYWluX2xlbmd0aCk7Ci0KLSAgICAvLyAgICBJcyBp
dCB0aGUgZXhwZWN0ZWQgZGVjb2RlZCB2YWx1ZT8KLSAgICBFWFBFQ1RfRVEoMCwKLSAgICAgICAg
ICAgICAgbWVtY21wKGRlY29kZV9idWZmZXIsIGJhc2U2NF90ZXN0c1tpXS5wbGFpbnRleHQsIGRl
Y29kZV9sZW5ndGgpKTsKLQotICAgIC8vICAgIElmIHdlIGRlY29kZSBpdCBpbnRvIGEgYnVmZmVy
IG9mIGV4YWN0bHkgdGhlIHJpZ2h0IGxlbmd0aC4uLgotICAgIG1lbXNldChkZWNvZGVfYnVmZmVy
LCAwLCBzaXplb2YoZGVjb2RlX2J1ZmZlcikpOwotICAgIGRlY29kZV9sZW5ndGggPSBXZWJTYWZl
QmFzZTY0VW5lc2NhcGUoZW5jb2RlX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN5cGhlcl9sZW5ndGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfYnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2xlbmd0
aCk7Ci0KLSAgICAvLyAgICBJcyBpdCBzdGlsbCBvZiB0aGUgZXhwZWN0ZWQgbGVuZ3RoPwotICAg
IEVYUEVDVF9FUShkZWNvZGVfbGVuZ3RoLCBiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVuZ3RoKTsK
LQotICAgIC8vICAgIEFuZCBpcyBpdCB0aGUgZXhwZWN0ZWQgZGVjb2RlZCB2YWx1ZT8KLSAgICBF
WFBFQ1RfRVEoMCwKLSAgICAgICAgICAgICAgbWVtY21wKGRlY29kZV9idWZmZXIsIGJhc2U2NF90
ZXN0c1tpXS5wbGFpbnRleHQsIGRlY29kZV9sZW5ndGgpKTsKLQotICAgIC8vIFRyeSB1c2luZyAn
LicgZm9yIHRoZSBwYWQgY2hhcmFjdGVyLgotICAgIGZvciAoaW50IGMgPSBjeXBoZXJfbGVuZ3Ro
IC0gMTsgYyA+PSAwICYmICc9JyA9PSBlbmNvZGVfYnVmZmVyW2NdOyAtLWMpIHsKLSAgICAgIGVu
Y29kZV9idWZmZXJbY10gPSAnLic7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZGVjb2RlIGl0IGJh
Y2s6Ci0gICAgbWVtc2V0KGRlY29kZV9idWZmZXIsIDAsIHNpemVvZihkZWNvZGVfYnVmZmVyKSk7
Ci0gICAgZGVjb2RlX2xlbmd0aCA9IFdlYlNhZmVCYXNlNjRVbmVzY2FwZShlbmNvZGVfYnVmZmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3lw
aGVyX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlY29kZV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplb2YoZGVjb2RlX2J1ZmZlcikpOwotCi0gICAgLy8gSXMgaXQg
b2YgdGhlIGV4cGVjdGVkIGxlbmd0aD8KLSAgICBFWFBFQ1RfRVEoZGVjb2RlX2xlbmd0aCwgYmFz
ZTY0X3Rlc3RzW2ldLnBsYWluX2xlbmd0aCk7Ci0KLSAgICAvLyBJcyBpdCB0aGUgZXhwZWN0ZWQg
ZGVjb2RlZCB2YWx1ZT8KLSAgICBFWFBFQ1RfRVEoMCwKLSAgICAgICAgICAgICAgbWVtY21wKGRl
Y29kZV9idWZmZXIsIGJhc2U2NF90ZXN0c1tpXS5wbGFpbnRleHQsIGRlY29kZV9sZW5ndGgpKTsK
LQotICAgIC8vIElmIHdlIGRlY29kZSBpdCBpbnRvIGEgYnVmZmVyIG9mIGV4YWN0bHkgdGhlIHJp
Z2h0IGxlbmd0aC4uLgotICAgIG1lbXNldChkZWNvZGVfYnVmZmVyLCAwLCBzaXplb2YoZGVjb2Rl
X2J1ZmZlcikpOwotICAgIGRlY29kZV9sZW5ndGggPSBXZWJTYWZlQmFzZTY0VW5lc2NhcGUoZW5j
b2RlX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN5cGhlcl9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWNvZGVfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2xlbmd0aCk7Ci0KLSAgICAvLyBJcyBp
dCBzdGlsbCBvZiB0aGUgZXhwZWN0ZWQgbGVuZ3RoPwotICAgIEVYUEVDVF9FUShkZWNvZGVfbGVu
Z3RoLCBiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVuZ3RoKTsKLQotICAgIC8vIEFuZCBpcyBpdCB0
aGUgZXhwZWN0ZWQgZGVjb2RlZCB2YWx1ZT8KLSAgICBFWFBFQ1RfRVEoMCwKLSAgICAgICAgICAg
ICAgbWVtY21wKGRlY29kZV9idWZmZXIsIGJhc2U2NF90ZXN0c1tpXS5wbGFpbnRleHQsIGRlY29k
ZV9sZW5ndGgpKTsKLQotICAgIC8vIExldCdzIHRyeSB0aGUgc3RyaW5nIHZlcnNpb24gb2YgdGhl
IGRlY29kZXIKLSAgICBkZWNvZGVkID0gInRoaXMganVuayBzaG91bGQgYmUgaWdub3JlZCI7Ci0g
ICAgRVhQRUNUX1RSVUUoV2ViU2FmZUJhc2U2NFVuZXNjYXBlKAotICAgICAgICBTdHJpbmdQaWVj
ZShlbmNvZGVfYnVmZmVyLCBjeXBoZXJfbGVuZ3RoKSwgJmRlY29kZWQpKTsKLSAgICBFWFBFQ1Rf
RVEoZGVjb2RlZC5zaXplKCksIGJhc2U2NF90ZXN0c1tpXS5wbGFpbl9sZW5ndGgpOwotICAgIEVY
UEVDVF9FUV9BUlJBWShkZWNvZGVkLnNpemUoKSwgZGVjb2RlZCwgYmFzZTY0X3Rlc3RzW2ldLnBs
YWludGV4dCwgaSk7Ci0KLSAgICAvLyBPa2F5ISB0aGUgd2Vic2FmZSBCYXNlNjQgZW5jb2Rlci9k
ZWNvZGVyIHdvcmtzLgotICAgIC8vIExldCdzIHRyeSB0aGUgdW5wYWRkZWQgdmVyc2lvbgotCi0g
ICAgZm9yIChpbnQgYyA9IDA7IGMgPCBzaXplb2Yod2Vic2FmZSk7ICsrYykgewotICAgICAgaWYg
KCc9JyA9PSB3ZWJzYWZlW2NdKSB7Ci0gICAgICAgIHdlYnNhZmVbY10gPSAnXDAnOwotICAgICAg
ICBjeXBoZXJfbGVuZ3RoID0gYzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gVGhlIHdlYnNhZmUgZXNjYXBlIGZ1bmN0aW9uOgotICAgIG1lbXNldChlbmNvZGVfYnVm
ZmVyLCAwLCBzaXplb2YoZW5jb2RlX2J1ZmZlcikpOwotICAgIGVuY29kZV9sZW5ndGggPSBXZWJT
YWZlQmFzZTY0RXNjYXBlKHVuc2lnbmVkX3BsYWludGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVuZ3Ro
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29k
ZV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZW9mKGVuY29kZV9idWZmZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKLSAgICAvLyAgICBJcyBpdCBvZiB0aGUgZXhwZWN0
ZWQgbGVuZ3RoPwotICAgIEVYUEVDVF9FUShlbmNvZGVfbGVuZ3RoLCBjeXBoZXJfbGVuZ3RoKTsK
LSAgICBFWFBFQ1RfRVEoCi0gICAgICAgIENhbGN1bGF0ZUJhc2U2NEVzY2FwZWRMZW4oYmFzZTY0
X3Rlc3RzW2ldLnBsYWluX2xlbmd0aCwgZmFsc2UpLAotICAgICAgICBlbmNvZGVfbGVuZ3RoKTsK
LQotICAgIC8vICAgIElzIGl0IHRoZSBleHBlY3RlZCBlbmNvZGVkIHZhbHVlPwotICAgIEVYUEVD
VF9TVFJFUShlbmNvZGVfYnVmZmVyLCB3ZWJzYWZlKTsKLQotICAgIC8vICAgIElmIHdlIGVuY29k
ZSBpdCBpbnRvIGEgYnVmZmVyIG9mIGV4YWN0bHkgdGhlIHJpZ2h0IGxlbmd0aC4uLgotICAgIG1l
bXNldChlbmNvZGVfYnVmZmVyLCAwLCBzaXplb2YoZW5jb2RlX2J1ZmZlcikpOwotICAgIGVuY29k
ZV9sZW5ndGggPSBXZWJTYWZlQmFzZTY0RXNjYXBlKHVuc2lnbmVkX3BsYWludGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRfdGVzdHNb
aV0ucGxhaW5fbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuY29kZV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3lwaGVyX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7Ci0gICAgLy8gICAgSXMgaXQgc3RpbGwg
b2YgdGhlIGV4cGVjdGVkIGxlbmd0aD8KLSAgICBFWFBFQ1RfRVEoZW5jb2RlX2xlbmd0aCwgY3lw
aGVyX2xlbmd0aCk7Ci0KLSAgICAvLyAgICBBbmQgaXMgdGhlIHZhbHVlIHN0aWxsIGNvcnJlY3Q/
ICAoaS5lLiwgbm90IGxvc2luZyB0aGUgbGFzdCBieXRlKQotICAgIEVYUEVDVF9TVFJFUShlbmNv
ZGVfYnVmZmVyLCB3ZWJzYWZlKTsKLQotICAgIC8vIExldCdzIHRyeSB0aGUgKG90aGVyKSBzdHJp
bmcgdmVyc2lvbiBvZiB0aGUgZW5jb2RlcgotICAgIHN0cmluZyBwbGFpbihiYXNlNjRfdGVzdHNb
aV0ucGxhaW50ZXh0LCBiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVuZ3RoKTsKLSAgICBlbmNvZGVk
ID0gInRoaXMganVuayBzaG91bGQgYmUgaWdub3JlZCI7Ci0gICAgV2ViU2FmZUJhc2U2NEVzY2Fw
ZShwbGFpbiwgJmVuY29kZWQpOwotICAgIEVYUEVDVF9FUShlbmNvZGVkLnNpemUoKSwgY3lwaGVy
X2xlbmd0aCk7Ci0gICAgRVhQRUNUX1NUUkVRKGVuY29kZWQuY19zdHIoKSwgd2Vic2FmZSk7Ci0K
LSAgICAvLyAgICBJZiB3ZSBkZWNvZGUgaXQgYmFjazoKLSAgICBtZW1zZXQoZGVjb2RlX2J1ZmZl
ciwgMCwgc2l6ZW9mKGRlY29kZV9idWZmZXIpKTsKLSAgICBkZWNvZGVfbGVuZ3RoID0gV2ViU2Fm
ZUJhc2U2NFVuZXNjYXBlKGVuY29kZV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjeXBoZXJfbGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2J1ZmZlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkZWNv
ZGVfYnVmZmVyKSk7Ci0KLSAgICAvLyAgICBJcyBpdCBvZiB0aGUgZXhwZWN0ZWQgbGVuZ3RoPwot
ICAgIEVYUEVDVF9FUShkZWNvZGVfbGVuZ3RoLCBiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVuZ3Ro
KTsKLQotICAgIC8vICAgIElzIGl0IHRoZSBleHBlY3RlZCBkZWNvZGVkIHZhbHVlPwotICAgIEVY
UEVDVF9FUSgwLAotICAgICAgICAgICAgICBtZW1jbXAoZGVjb2RlX2J1ZmZlciwgYmFzZTY0X3Rl
c3RzW2ldLnBsYWludGV4dCwgZGVjb2RlX2xlbmd0aCkpOwotCi0gICAgLy8gICAgSWYgd2UgZGVj
b2RlIGl0IGludG8gYSBidWZmZXIgb2YgZXhhY3RseSB0aGUgcmlnaHQgbGVuZ3RoLi4uCi0gICAg
bWVtc2V0KGRlY29kZV9idWZmZXIsIDAsIHNpemVvZihkZWNvZGVfYnVmZmVyKSk7Ci0gICAgZGVj
b2RlX2xlbmd0aCA9IFdlYlNhZmVCYXNlNjRVbmVzY2FwZShlbmNvZGVfYnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3lwaGVyX2xlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
Y29kZV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWNvZGVfbGVuZ3RoKTsKLQotICAgIC8vICAgIElzIGl0IHN0aWxsIG9mIHRoZSBl
eHBlY3RlZCBsZW5ndGg/Ci0gICAgRVhQRUNUX0VRKGRlY29kZV9sZW5ndGgsIGJhc2U2NF90ZXN0
c1tpXS5wbGFpbl9sZW5ndGgpOwotCi0gICAgLy8gICAgQW5kIGlzIGl0IHRoZSBleHBlY3RlZCBk
ZWNvZGVkIHZhbHVlPwotICAgIEVYUEVDVF9FUSgwLAotICAgICAgICAgICAgICBtZW1jbXAoZGVj
b2RlX2J1ZmZlciwgYmFzZTY0X3Rlc3RzW2ldLnBsYWludGV4dCwgZGVjb2RlX2xlbmd0aCkpOwot
Ci0KLSAgICAvLyBMZXQncyB0cnkgdGhlIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSBkZWNvZGVyCi0g
ICAgZGVjb2RlZCA9ICJ0aGlzIGp1bmsgc2hvdWxkIGJlIGlnbm9yZWQiOwotICAgIEVYUEVDVF9U
UlVFKFdlYlNhZmVCYXNlNjRVbmVzY2FwZSgKLSAgICAgICAgU3RyaW5nUGllY2UoZW5jb2RlX2J1
ZmZlciwgY3lwaGVyX2xlbmd0aCksICZkZWNvZGVkKSk7Ci0gICAgRVhQRUNUX0VRKGRlY29kZWQu
c2l6ZSgpLCBiYXNlNjRfdGVzdHNbaV0ucGxhaW5fbGVuZ3RoKTsKLSAgICBFWFBFQ1RfRVFfQVJS
QVkoZGVjb2RlZC5zaXplKCksIGRlY29kZWQsIGJhc2U2NF90ZXN0c1tpXS5wbGFpbnRleHQsIGkp
OwotCi0gICAgLy8gVGhpcyB2YWx1ZSB3b3Jrcy4gIFRyeSB0aGUgbmV4dC4KLSAgfQotCi0gIC8v
IE5vdyB0cnkgdGhlIGxvbmcgc3RyaW5ncywgdGhpcyB0ZXN0cyB0aGUgc3RyZWFtaW5nCi0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGJhc2U2NF9zdHJpbmdzKSAvIHNpemVvZihiYXNlNjRf
c3RyaW5nc1swXSk7Ci0gICAgICAgKytpKSB7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogdW5z
aWduZWRfcGxhaW50ZXh0ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGJhc2U2NF9zdHJpbmdzW2ldLnBsYWludGV4dCk7Ci0gICAgaW50IHBsYWluX2xlbmd0
aCA9IHN0cmxlbihiYXNlNjRfc3RyaW5nc1tpXS5wbGFpbnRleHQpOwotICAgIGludCBjeXBoZXJf
bGVuZ3RoID0gc3RybGVuKGJhc2U2NF9zdHJpbmdzW2ldLmN5cGhlcnRleHQpOwotICAgIHZlY3Rv
cjxjaGFyPiBidWZmZXIoY3lwaGVyX2xlbmd0aCsxKTsKLSAgICBpbnQgZW5jb2RlX2xlbmd0aCA9
IFdlYlNhZmVCYXNlNjRFc2NhcGUodW5zaWduZWRfcGxhaW50ZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbl9sZW5ndGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXJb
MF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlci5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhbHNlKTsKLSAgICBFWFBFQ1RfRVEoY3lwaGVyX2xlbmd0aCwgZW5jb2Rl
X2xlbmd0aCk7Ci0gICAgRVhQRUNUX0VRKAotICAgICAgICBDYWxjdWxhdGVCYXNlNjRFc2NhcGVk
TGVuKHBsYWluX2xlbmd0aCwgZmFsc2UpLCBlbmNvZGVfbGVuZ3RoKTsKLSAgICBidWZmZXJbIGVu
Y29kZV9sZW5ndGggXSA9ICdcMCc7Ci0gICAgRVhQRUNUX1NUUkVRKGJhc2U2NF9zdHJpbmdzW2ld
LmN5cGhlcnRleHQsICZidWZmZXJbMF0pOwotICB9Ci0KLSAgLy8gVmVyaWZ5IHRoZSBiZWhhdmlv
ciB3aGVuIGRlY29kaW5nIGJhZCBkYXRhCi0gIHsKLSAgICBjb25zdCBjaGFyKiBiYWRfZGF0YSA9
ICJhYi0vIjsKLSAgICBzdHJpbmcgYnVmOwotICAgIEVYUEVDVF9GQUxTRShCYXNlNjRVbmVzY2Fw
ZShTdHJpbmdQaWVjZShiYWRfZGF0YSksICZidWYpKTsKLSAgICBFWFBFQ1RfVFJVRSghV2ViU2Fm
ZUJhc2U2NFVuZXNjYXBlKGJhZF9kYXRhLCAmYnVmKSk7Ci0gICAgRVhQRUNUX1RSVUUoYnVmLmVt
cHR5KCkpOwotICB9Ci19Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1dGUuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvc3Vic3RpdHV0ZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlkOTU4OTlm
NTI0OWM4ZDI1MDc2ODk4YzRjZWJhNDE5Y2M2Y2Q0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3Vic3RpdHV0
ZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZh
cmRhKQotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1dGUuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9zdGxfdXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVz
cGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ugc3RyaW5ncyB7Ci0KLXVzaW5nIGludGVybmFsOjpT
dWJzdGl0dXRlQXJnOwotCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYXJncyBpbiBhcmdfYXJy
YXkgd2hpY2ggd2VyZSBwYXNzZWQgZXhwbGljaXRseQotLy8gdG8gU3Vic3RpdHV0ZSgpLgotc3Rh
dGljIGludCBDb3VudFN1YnN0aXR1dGVBcmdzKGNvbnN0IFN1YnN0aXR1dGVBcmcqIGNvbnN0KiBh
cmdzX2FycmF5KSB7Ci0gIGludCBjb3VudCA9IDA7Ci0gIHdoaWxlIChhcmdzX2FycmF5W2NvdW50
XSAhPSBOVUxMICYmIGFyZ3NfYXJyYXlbY291bnRdLT5zaXplKCkgIT0gLTEpIHsKLSAgICArK2Nv
dW50OwotICB9Ci0gIHJldHVybiBjb3VudDsKLX0KLQotc3RyaW5nIFN1YnN0aXR1dGUoCi0gICAg
Y29uc3QgY2hhciogZm9ybWF0LAotICAgIGNvbnN0IFN1YnN0aXR1dGVBcmcmIGFyZzAsIGNvbnN0
IFN1YnN0aXR1dGVBcmcmIGFyZzEsCi0gICAgY29uc3QgU3Vic3RpdHV0ZUFyZyYgYXJnMiwgY29u
c3QgU3Vic3RpdHV0ZUFyZyYgYXJnMywKLSAgICBjb25zdCBTdWJzdGl0dXRlQXJnJiBhcmc0LCBj
b25zdCBTdWJzdGl0dXRlQXJnJiBhcmc1LAotICAgIGNvbnN0IFN1YnN0aXR1dGVBcmcmIGFyZzYs
IGNvbnN0IFN1YnN0aXR1dGVBcmcmIGFyZzcsCi0gICAgY29uc3QgU3Vic3RpdHV0ZUFyZyYgYXJn
OCwgY29uc3QgU3Vic3RpdHV0ZUFyZyYgYXJnOSkgewotICBzdHJpbmcgcmVzdWx0OwotICBTdWJz
dGl0dXRlQW5kQXBwZW5kKCZyZXN1bHQsIGZvcm1hdCwgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywg
YXJnNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzUsIGFyZzYs
IGFyZzcsIGFyZzgsIGFyZzkpOwotICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFN1YnN0aXR1
dGVBbmRBcHBlbmQoCi0gICAgc3RyaW5nKiBvdXRwdXQsIGNvbnN0IGNoYXIqIGZvcm1hdCwKLSAg
ICBjb25zdCBTdWJzdGl0dXRlQXJnJiBhcmcwLCBjb25zdCBTdWJzdGl0dXRlQXJnJiBhcmcxLAot
ICAgIGNvbnN0IFN1YnN0aXR1dGVBcmcmIGFyZzIsIGNvbnN0IFN1YnN0aXR1dGVBcmcmIGFyZzMs
Ci0gICAgY29uc3QgU3Vic3RpdHV0ZUFyZyYgYXJnNCwgY29uc3QgU3Vic3RpdHV0ZUFyZyYgYXJn
NSwKLSAgICBjb25zdCBTdWJzdGl0dXRlQXJnJiBhcmc2LCBjb25zdCBTdWJzdGl0dXRlQXJnJiBh
cmc3LAotICAgIGNvbnN0IFN1YnN0aXR1dGVBcmcmIGFyZzgsIGNvbnN0IFN1YnN0aXR1dGVBcmcm
IGFyZzkpIHsKLSAgY29uc3QgU3Vic3RpdHV0ZUFyZyogY29uc3QgYXJnc19hcnJheVtdID0gewot
ICAgICZhcmcwLCAmYXJnMSwgJmFyZzIsICZhcmczLCAmYXJnNCwgJmFyZzUsICZhcmc2LCAmYXJn
NywgJmFyZzgsICZhcmc5LCBOVUxMCi0gIH07Ci0KLSAgLy8gRGV0ZXJtaW5lIHRvdGFsIHNpemUg
bmVlZGVkLgotICBpbnQgc2l6ZSA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBmb3JtYXRbaV0gIT0g
J1wwJzsgaSsrKSB7Ci0gICAgaWYgKGZvcm1hdFtpXSA9PSAnJCcpIHsKLSAgICAgIGlmIChhc2Np
aV9pc2RpZ2l0KGZvcm1hdFtpKzFdKSkgewotICAgICAgICBpbnQgaW5kZXggPSBmb3JtYXRbaSsx
XSAtICcwJzsKLSAgICAgICAgaWYgKGFyZ3NfYXJyYXlbaW5kZXhdLT5zaXplKCkgPT0gLTEpIHsK
LSAgICAgICAgICBHT09HTEVfTE9HKERGQVRBTCkKLSAgICAgICAgICAgIDw8ICJzdHJpbmdzOjpT
dWJzdGl0dXRlIGZvcm1hdCBzdHJpbmcgaW52YWxpZDogYXNrZWQgZm9yIFwiJCIKLSAgICAgICAg
ICAgIDw8IGluZGV4IDw8ICJcIiwgYnV0IG9ubHkgIiA8PCBDb3VudFN1YnN0aXR1dGVBcmdzKGFy
Z3NfYXJyYXkpCi0gICAgICAgICAgICA8PCAiIGFyZ3Mgd2VyZSBnaXZlbi4gIEZ1bGwgZm9ybWF0
IHN0cmluZyB3YXM6IFwiIgotICAgICAgICAgICAgPDwgQ0VzY2FwZShmb3JtYXQpIDw8ICJcIi4i
OwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzaXplICs9IGFyZ3NfYXJy
YXlbaW5kZXhdLT5zaXplKCk7Ci0gICAgICAgICsraTsgIC8vIFNraXAgbmV4dCBjaGFyLgotICAg
ICAgfSBlbHNlIGlmIChmb3JtYXRbaSsxXSA9PSAnJCcpIHsKLSAgICAgICAgKytzaXplOwotICAg
ICAgICArK2k7ICAvLyBTa2lwIG5leHQgY2hhci4KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdP
T0dMRV9MT0coREZBVEFMKQotICAgICAgICAgIDw8ICJJbnZhbGlkIHN0cmluZ3M6OlN1YnN0aXR1
dGUoKSBmb3JtYXQgc3RyaW5nOiBcIiIKLSAgICAgICAgICA8PCBDRXNjYXBlKGZvcm1hdCkgPDwg
IlwiLiI7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgKytz
aXplOwotICAgIH0KLSAgfQotCi0gIGlmIChzaXplID09IDApIHJldHVybjsKLQotICAvLyBCdWls
ZCB0aGUgc3RyaW5nLgotICBpbnQgb3JpZ2luYWxfc2l6ZSA9IG91dHB1dC0+c2l6ZSgpOwotICBT
VExTdHJpbmdSZXNpemVVbmluaXRpYWxpemVkKG91dHB1dCwgb3JpZ2luYWxfc2l6ZSArIHNpemUp
OwotICBjaGFyKiB0YXJnZXQgPSBzdHJpbmdfYXNfYXJyYXkob3V0cHV0KSArIG9yaWdpbmFsX3Np
emU7Ci0gIGZvciAoaW50IGkgPSAwOyBmb3JtYXRbaV0gIT0gJ1wwJzsgaSsrKSB7Ci0gICAgaWYg
KGZvcm1hdFtpXSA9PSAnJCcpIHsKLSAgICAgIGlmIChhc2NpaV9pc2RpZ2l0KGZvcm1hdFtpKzFd
KSkgewotICAgICAgICBjb25zdCBTdWJzdGl0dXRlQXJnKiBzcmMgPSBhcmdzX2FycmF5W2Zvcm1h
dFtpKzFdIC0gJzAnXTsKLSAgICAgICAgbWVtY3B5KHRhcmdldCwgc3JjLT5kYXRhKCksIHNyYy0+
c2l6ZSgpKTsKLSAgICAgICAgdGFyZ2V0ICs9IHNyYy0+c2l6ZSgpOwotICAgICAgICArK2k7ICAv
LyBTa2lwIG5leHQgY2hhci4KLSAgICAgIH0gZWxzZSBpZiAoZm9ybWF0W2krMV0gPT0gJyQnKSB7
Ci0gICAgICAgICp0YXJnZXQrKyA9ICckJzsKLSAgICAgICAgKytpOyAgLy8gU2tpcCBuZXh0IGNo
YXIuCi0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICp0YXJnZXQrKyA9IGZvcm1hdFtpXTsK
LSAgICB9Ci0gIH0KLQotICBHT09HTEVfRENIRUNLX0VRKHRhcmdldCAtIG91dHB1dC0+ZGF0YSgp
LCBvdXRwdXQtPnNpemUoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBzdHJpbmdzCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
c3R1YnMvc3Vic3RpdHV0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWU0NDJh
Zjc3YjM1MDA2MWU4MmRjODQ4MTAzMzdkYjc5MTk5YjQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0
dXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBW
YXJkYSkKLS8vIGZyb20gZ29vZ2xlMy9zdHJpbmdzL3N1YnN0aXR1dGUuaAotCi0jaW5jbHVkZSA8
c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotCi0jaWZuZGVmIEdPT0dMRV9Q
Uk9UT0JVRl9TVFVCU19TVUJTVElUVVRFX0hfCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9TVFVC
U19TVUJTVElUVVRFX0hfCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLW5hbWVzcGFjZSBzdHJpbmdzIHsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gc3RyaW5nczo6
U3Vic3RpdHV0ZSgpCi0vLyBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5kKCkKLS8vICAgS2lu
ZCBvZiBsaWtlIFN0cmluZ1ByaW50ZiwgYnV0IGRpZmZlcmVudC4KLS8vCi0vLyAgIEV4YW1wbGU6
Ci0vLyAgICAgc3RyaW5nIEdldE1lc3NhZ2Uoc3RyaW5nIGZpcnN0X25hbWUsIHN0cmluZyBsYXN0
X25hbWUsIGludCBhZ2UpIHsKLS8vICAgICAgIHJldHVybiBzdHJpbmdzOjpTdWJzdGl0dXRlKCJN
eSBuYW1lIGlzICQwICQxIGFuZCBJIGFtICQyIHllYXJzIG9sZC4iLAotLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RfbmFtZSwgbGFzdF9uYW1lLCBhZ2UpOwotLy8gICAg
IH0KLS8vCi0vLyAgIERpZmZlcmVuY2VzIGZyb20gU3RyaW5nUHJpbnRmOgotLy8gICAqIFRoZSBm
b3JtYXQgc3RyaW5nIGRvZXMgbm90IGlkZW50aWZ5IHRoZSB0eXBlcyBvZiBhcmd1bWVudHMuCi0v
LyAgICAgSW5zdGVhZCwgdGhlIG1hZ2ljIG9mIEMrKyBkZWFscyB3aXRoIHRoaXMgZm9yIHVzLiAg
U2VlIGJlbG93Ci0vLyAgICAgZm9yIGEgbGlzdCBvZiBhY2NlcHRlZCB0eXBlcy4KLS8vICAgKiBT
dWJzdGl0dXRpb25zIGluIHRoZSBmb3JtYXQgc3RyaW5nIGFyZSBpZGVudGlmaWVkIGJ5IGEgJyQn
Ci0vLyAgICAgZm9sbG93ZWQgYnkgYSBkaWdpdC4gIFNvLCB5b3UgY2FuIHVzZSBhcmd1bWVudHMg
b3V0LW9mLW9yZGVyIGFuZAotLy8gICAgIHVzZSB0aGUgc2FtZSBhcmd1bWVudCBtdWx0aXBsZSB0
aW1lcy4KLS8vICAgKiBJdCdzIG11Y2ggZmFzdGVyIHRoYW4gU3RyaW5nUHJpbnRmLgotLy8KLS8v
ICAgU3VwcG9ydGVkIHR5cGVzOgotLy8gICAqIFN0cmluZ3MgKGNvbnN0IGNoYXIqLCBjb25zdCBz
dHJpbmcmKQotLy8gICAgICogTm90ZSB0aGF0IHRoaXMgbWVhbnMgeW91IGRvIG5vdCBoYXZlIHRv
IGFkZCAuY19zdHIoKSB0byBhbGwgb2YKLS8vICAgICAgIHlvdXIgc3RyaW5ncy4gIEluIGZhY3Qs
IHlvdSBzaG91bGRuJ3Q7IGl0IHdpbGwgYmUgc2xvd2VyLgotLy8gICAqIGludDMyLCBpbnQ2NCwg
dWludDMyLCB1aW50NjQ6ICBGb3JtYXR0ZWQgdXNpbmcgU2ltcGxlSXRvYSgpLgotLy8gICAqIGZs
b2F0LCBkb3VibGU6ICBGb3JtYXR0ZWQgdXNpbmcgU2ltcGxlRnRvYSgpIGFuZCBTaW1wbGVEdG9h
KCkuCi0vLyAgICogYm9vbDogIFByaW50ZWQgYXMgInRydWUiIG9yICJmYWxzZSIuCi0vLwotLy8g
ICBTdWJzdGl0dXRlQW5kQXBwZW5kKCkgaXMgbGlrZSBTdWJzdGl0dXRlKCkgYnV0IGFwcGVuZHMg
dGhlIHJlc3VsdCB0bwotLy8gICAqb3V0cHV0LiAgRXhhbXBsZToKLS8vCi0vLyAgICAgc3RyaW5n
IHN0cjsKLS8vICAgICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5kQXBwZW5kKCZzdHIsCi0vLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXkgbmFtZSBpcyAkMCAkMSBhbmQgSSBhbSAk
MiB5ZWFycyBvbGQuIiwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0
X25hbWUsIGxhc3RfbmFtZSwgYWdlKTsKLS8vCi0vLyAgIFN1YnN0aXR1dGUoKSBpcyBzaWduaWZp
Y2FudGx5IGZhc3RlciB0aGFuIFN0cmluZ1ByaW50ZigpLiAgRm9yIHZlcnkKLS8vICAgbGFyZ2Ug
c3RyaW5ncywgaXQgbWF5IGJlIG9yZGVycyBvZiBtYWduaXR1ZGUgZmFzdGVyLgotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1uYW1lc3BhY2UgaW50ZXJuYWwgeyAgLy8gSW1wbGVtZW50YXRpb24gZGV0YWls
cy4KLQotY2xhc3MgU3Vic3RpdHV0ZUFyZyB7Ci0gcHVibGljOgotICBpbmxpbmUgU3Vic3RpdHV0
ZUFyZyhjb25zdCBjaGFyKiB2YWx1ZSkKLSAgICA6IHRleHRfKHZhbHVlKSwgc2l6ZV8oc3RybGVu
KHRleHRfKSkge30KLSAgaW5saW5lIFN1YnN0aXR1dGVBcmcoY29uc3Qgc3RyaW5nJiB2YWx1ZSkK
LSAgICA6IHRleHRfKHZhbHVlLmRhdGEoKSksIHNpemVfKHZhbHVlLnNpemUoKSkge30KLQotICAv
LyBJbmRpY2F0ZXMgdGhhdCBubyBhcmd1bWVudCB3YXMgZ2l2ZW4uCi0gIGlubGluZSBleHBsaWNp
dCBTdWJzdGl0dXRlQXJnKCkKLSAgICA6IHRleHRfKE5VTEwpLCBzaXplXygtMSkge30KLQotICAv
LyBQcmltaXRpdmVzCi0gIC8vIFdlIGRvbid0IG92ZXJsb2FkIGZvciBzaWduZWQgYW5kIHVuc2ln
bmVkIGNoYXIgYmVjYXVzZSBpZiBwZW9wbGUgYXJlCi0gIC8vIGV4cGxpY2l0bHkgZGVjbGFyaW5n
IHRoZWlyIGNoYXJzIGFzIHNpZ25lZCBvciB1bnNpZ25lZCB0aGVuIHRoZXkgYXJlCi0gIC8vIHBy
b2JhYmx5IGFjdHVhbGx5IHVzaW5nIHRoZW0gYXMgOC1iaXQgaW50ZWdlcnMgYW5kIHdvdWxkIHBy
b2JhYmx5Ci0gIC8vIHByZWZlciBhbiBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uLiAgQnV0LCB3ZSBk
b24ndCByZWFsbHkga25vdy4gIFNvLCB3ZQotICAvLyBtYWtlIHRoZSBjYWxsZXIgZGVjaWRlIHdo
YXQgdG8gZG8uCi0gIGlubGluZSBTdWJzdGl0dXRlQXJnKGNoYXIgdmFsdWUpCi0gICAgOiB0ZXh0
XyhzY3JhdGNoXyksIHNpemVfKDEpIHsgc2NyYXRjaF9bMF0gPSB2YWx1ZTsgfQotICBpbmxpbmUg
U3Vic3RpdHV0ZUFyZyhzaG9ydCB2YWx1ZSkKLSAgICA6IHRleHRfKEZhc3RJbnQzMlRvQnVmZmVy
KHZhbHVlLCBzY3JhdGNoXykpLCBzaXplXyhzdHJsZW4odGV4dF8pKSB7fQotICBpbmxpbmUgU3Vi
c3RpdHV0ZUFyZyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKLSAgICA6IHRleHRfKEZhc3RVSW50MzJU
b0J1ZmZlcih2YWx1ZSwgc2NyYXRjaF8pKSwgc2l6ZV8oc3RybGVuKHRleHRfKSkge30KLSAgaW5s
aW5lIFN1YnN0aXR1dGVBcmcoaW50IHZhbHVlKQotICAgIDogdGV4dF8oRmFzdEludDMyVG9CdWZm
ZXIodmFsdWUsIHNjcmF0Y2hfKSksIHNpemVfKHN0cmxlbih0ZXh0XykpIHt9Ci0gIGlubGluZSBT
dWJzdGl0dXRlQXJnKHVuc2lnbmVkIGludCB2YWx1ZSkKLSAgICA6IHRleHRfKEZhc3RVSW50MzJU
b0J1ZmZlcih2YWx1ZSwgc2NyYXRjaF8pKSwgc2l6ZV8oc3RybGVuKHRleHRfKSkge30KLSAgaW5s
aW5lIFN1YnN0aXR1dGVBcmcobG9uZyB2YWx1ZSkKLSAgICA6IHRleHRfKEZhc3RMb25nVG9CdWZm
ZXIodmFsdWUsIHNjcmF0Y2hfKSksIHNpemVfKHN0cmxlbih0ZXh0XykpIHt9Ci0gIGlubGluZSBT
dWJzdGl0dXRlQXJnKHVuc2lnbmVkIGxvbmcgdmFsdWUpCi0gICAgOiB0ZXh0XyhGYXN0VUxvbmdU
b0J1ZmZlcih2YWx1ZSwgc2NyYXRjaF8pKSwgc2l6ZV8oc3RybGVuKHRleHRfKSkge30KLSAgaW5s
aW5lIFN1YnN0aXR1dGVBcmcobG9uZyBsb25nIHZhbHVlKQotICAgIDogdGV4dF8oRmFzdEludDY0
VG9CdWZmZXIodmFsdWUsIHNjcmF0Y2hfKSksIHNpemVfKHN0cmxlbih0ZXh0XykpIHt9Ci0gIGlu
bGluZSBTdWJzdGl0dXRlQXJnKHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSkKLSAgICA6IHRleHRf
KEZhc3RVSW50NjRUb0J1ZmZlcih2YWx1ZSwgc2NyYXRjaF8pKSwgc2l6ZV8oc3RybGVuKHRleHRf
KSkge30KLSAgaW5saW5lIFN1YnN0aXR1dGVBcmcoZmxvYXQgdmFsdWUpCi0gICAgOiB0ZXh0XyhG
bG9hdFRvQnVmZmVyKHZhbHVlLCBzY3JhdGNoXykpLCBzaXplXyhzdHJsZW4odGV4dF8pKSB7fQot
ICBpbmxpbmUgU3Vic3RpdHV0ZUFyZyhkb3VibGUgdmFsdWUpCi0gICAgOiB0ZXh0XyhEb3VibGVU
b0J1ZmZlcih2YWx1ZSwgc2NyYXRjaF8pKSwgc2l6ZV8oc3RybGVuKHRleHRfKSkge30KLSAgaW5s
aW5lIFN1YnN0aXR1dGVBcmcoYm9vbCB2YWx1ZSkKLSAgICA6IHRleHRfKHZhbHVlID8gInRydWUi
IDogImZhbHNlIiksIHNpemVfKHN0cmxlbih0ZXh0XykpIHt9Ci0KLSAgaW5saW5lIGNvbnN0IGNo
YXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiB0ZXh0XzsgfQotICBpbmxpbmUgaW50IHNpemUoKSBj
b25zdCB7IHJldHVybiBzaXplXzsgfQotCi0gcHJpdmF0ZToKLSAgY29uc3QgY2hhciogdGV4dF87
Ci0gIGludCBzaXplXzsKLSAgY2hhciBzY3JhdGNoX1trRmFzdFRvQnVmZmVyU2l6ZV07Ci19Owot
Ci19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotTElCUFJPVE9CVUZfRVhQT1JUIHN0cmluZyBT
dWJzdGl0dXRlKAotICBjb25zdCBjaGFyKiBmb3JtYXQsCi0gIGNvbnN0IGludGVybmFsOjpTdWJz
dGl0dXRlQXJnJiBhcmcwID0gaW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcoKSwKLSAgY29uc3QgaW50
ZXJuYWw6OlN1YnN0aXR1dGVBcmcmIGFyZzEgPSBpbnRlcm5hbDo6U3Vic3RpdHV0ZUFyZygpLAot
ICBjb25zdCBpbnRlcm5hbDo6U3Vic3RpdHV0ZUFyZyYgYXJnMiA9IGludGVybmFsOjpTdWJzdGl0
dXRlQXJnKCksCi0gIGNvbnN0IGludGVybmFsOjpTdWJzdGl0dXRlQXJnJiBhcmczID0gaW50ZXJu
YWw6OlN1YnN0aXR1dGVBcmcoKSwKLSAgY29uc3QgaW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcmIGFy
ZzQgPSBpbnRlcm5hbDo6U3Vic3RpdHV0ZUFyZygpLAotICBjb25zdCBpbnRlcm5hbDo6U3Vic3Rp
dHV0ZUFyZyYgYXJnNSA9IGludGVybmFsOjpTdWJzdGl0dXRlQXJnKCksCi0gIGNvbnN0IGludGVy
bmFsOjpTdWJzdGl0dXRlQXJnJiBhcmc2ID0gaW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcoKSwKLSAg
Y29uc3QgaW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcmIGFyZzcgPSBpbnRlcm5hbDo6U3Vic3RpdHV0
ZUFyZygpLAotICBjb25zdCBpbnRlcm5hbDo6U3Vic3RpdHV0ZUFyZyYgYXJnOCA9IGludGVybmFs
OjpTdWJzdGl0dXRlQXJnKCksCi0gIGNvbnN0IGludGVybmFsOjpTdWJzdGl0dXRlQXJnJiBhcmc5
ID0gaW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcoKSk7Ci0KLUxJQlBST1RPQlVGX0VYUE9SVCB2b2lk
IFN1YnN0aXR1dGVBbmRBcHBlbmQoCi0gIHN0cmluZyogb3V0cHV0LCBjb25zdCBjaGFyKiBmb3Jt
YXQsCi0gIGNvbnN0IGludGVybmFsOjpTdWJzdGl0dXRlQXJnJiBhcmcwID0gaW50ZXJuYWw6OlN1
YnN0aXR1dGVBcmcoKSwKLSAgY29uc3QgaW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcmIGFyZzEgPSBp
bnRlcm5hbDo6U3Vic3RpdHV0ZUFyZygpLAotICBjb25zdCBpbnRlcm5hbDo6U3Vic3RpdHV0ZUFy
ZyYgYXJnMiA9IGludGVybmFsOjpTdWJzdGl0dXRlQXJnKCksCi0gIGNvbnN0IGludGVybmFsOjpT
dWJzdGl0dXRlQXJnJiBhcmczID0gaW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcoKSwKLSAgY29uc3Qg
aW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcmIGFyZzQgPSBpbnRlcm5hbDo6U3Vic3RpdHV0ZUFyZygp
LAotICBjb25zdCBpbnRlcm5hbDo6U3Vic3RpdHV0ZUFyZyYgYXJnNSA9IGludGVybmFsOjpTdWJz
dGl0dXRlQXJnKCksCi0gIGNvbnN0IGludGVybmFsOjpTdWJzdGl0dXRlQXJnJiBhcmc2ID0gaW50
ZXJuYWw6OlN1YnN0aXR1dGVBcmcoKSwKLSAgY29uc3QgaW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcm
IGFyZzcgPSBpbnRlcm5hbDo6U3Vic3RpdHV0ZUFyZygpLAotICBjb25zdCBpbnRlcm5hbDo6U3Vi
c3RpdHV0ZUFyZyYgYXJnOCA9IGludGVybmFsOjpTdWJzdGl0dXRlQXJnKCksCi0gIGNvbnN0IGlu
dGVybmFsOjpTdWJzdGl0dXRlQXJnJiBhcmc5ID0gaW50ZXJuYWw6OlN1YnN0aXR1dGVBcmcoKSk7
Ci0KLX0gIC8vIG5hbWVzcGFjZSBzdHJpbmdzCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmIC8vIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19T
VUJTVElUVVRFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvdGVtcGxh
dGVfdXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RlbXBsYXRlX3V0aWwuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlZjkwNGJlYWE1OGYzZWMwNmM1NTNhMjVlMzE4
ZWEzNWJmMGQwYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvdGVtcGxhdGVfdXRpbC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTM4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA1IEdvb2dsZSBJbmMuCi0vLyBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0vLyAtLS0tCi0vLyBBdXRob3I6IGxhckBnb29nbGUuY29tIChMYXJhbWllIExlYXZp
dHQpCi0vLwotLy8gVGVtcGxhdGUgbWV0YXByb2dyYW1taW5nIHV0aWxpdHkgZnVuY3Rpb25zLgot
Ly8KLS8vIFRoaXMgY29kZSBpcyBjb21waWxlZCBkaXJlY3RseSBvbiBtYW55IHBsYXRmb3Jtcywg
aW5jbHVkaW5nIGNsaWVudAotLy8gcGxhdGZvcm1zIGxpa2UgV2luZG93cywgTWFjLCBhbmQgZW1i
ZWRkZWQgc3lzdGVtcy4gIEJlZm9yZSBtYWtpbmcKLS8vIGFueSBjaGFuZ2VzIGhlcmUsIG1ha2Ug
c3VyZSB0aGF0IHlvdSdyZSBub3QgYnJlYWtpbmcgYW55IHBsYXRmb3Jtcy4KLS8vCi0vLwotLy8g
VGhlIG5hbWVzIGNob3NlbiBoZXJlIHJlZmxlY3QgdGhvc2UgdXNlZCBpbiB0cjEgYW5kIHRoZSBi
b29zdDo6bXBsCi0vLyBsaWJyYXJ5LCB0aGVyZSBhcmUgc2ltaWxhciBvcGVyYXRpb25zIHVzZWQg
aW4gdGhlIExva2kgbGlicmFyeSBhcwotLy8gd2VsbC4gIEkgcHJlZmVyIHRoZSBib29zdCBuYW1l
cyBmb3IgMiByZWFzb25zOgotLy8gMS4gIEkgdGhpbmsgdGhhdCBwb3J0aW9ucyBvZiB0aGUgQm9v
c3QgbGlicmFyaWVzIGFyZSBtb3JlIGxpa2VseSB0bwotLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGMr
KyBzdGFuZGFyZC4KLS8vIDIuICBJdCBpcyBub3QgaW1wb3NzaWJsZSB0aGF0IHNvbWUgb2YgdGhl
IGJvb3N0IGxpYnJhcmllcyB3aWxsIGJlCi0vLyBpbmNsdWRlZCBpbiBvdXIgb3duIGJ1aWxkIGlu
IHRoZSBmdXR1cmUuCi0vLyBCb3RoIG9mIHRoZXNlIG91dGNvbWVzIG1lYW5zIHRoYXQgd2UgbWF5
IGJlIGFibGUgdG8gZGlyZWN0bHkgcmVwbGFjZQotLy8gc29tZSBvZiB0aGVzZSB3aXRoIGJvb3N0
IGVxdWl2YWxlbnRzLgotLy8KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1RFTVBMQVRFX1VUSUxf
SF8KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1RFTVBMQVRFX1VUSUxfSF8KLQotbmFtZXNwYWNl
IGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGludGVybmFsIHsKLQot
Ly8gVHlwZXMgc21hbGxfIGFuZCBiaWdfIGFyZSBndWFyYW50ZWVkIHN1Y2ggdGhhdCBzaXplb2Yo
c21hbGxfKSA8Ci0vLyBzaXplb2YoYmlnXykKLXR5cGVkZWYgY2hhciBzbWFsbF87Ci0KLXN0cnVj
dCBiaWdfIHsKLSAgY2hhciBkdW1teVsyXTsKLX07Ci0KLS8vIElkZW50aXR5IG1ldGFmdW5jdGlv
bi4KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlkZW50aXR5XyB7Ci0gIHR5cGVkZWYgVCB0
eXBlOwotfTsKLQotLy8gaW50ZWdyYWxfY29uc3RhbnQsIGRlZmluZWQgaW4gdHIxLCBpcyBhIHdy
YXBwZXIgZm9yIGFuIGludGVnZXIKLS8vIHZhbHVlLiBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlz
IGdlbmVyYWxpdHk7IHdlIGNvdWxkIGdldCBhd2F5Ci0vLyB3aXRoIGhhcmRjb2RpbmcgdGhlIGlu
dGVnZXIgdHlwZSB0byBib29sLiBXZSB1c2UgdGhlIGZ1bGx5Ci0vLyBnZW5lcmFsIGludGVnZXJf
Y29uc3RhbnQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0cjEuCi0KLXRlbXBsYXRlPGNsYXNzIFQs
IFQgdj4KLXN0cnVjdCBpbnRlZ3JhbF9jb25zdGFudCB7Ci0gIHN0YXRpYyBjb25zdCBUIHZhbHVl
ID0gdjsKLSAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgaW50ZWdyYWxfY29uc3Rh
bnQ8VCwgdj4gdHlwZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBUIHY+IGNvbnN0IFQgaW50
ZWdyYWxfY29uc3RhbnQ8VCwgdj46OnZhbHVlOwotCi0KLS8vIEFiYnJldmlhdGlvbnM6IHRydWVf
dHlwZSBhbmQgZmFsc2VfdHlwZSBhcmUgc3RydWN0cyB0aGF0IHJlcHJlc2VudCBib29sZWFuCi0v
LyB0cnVlIGFuZCBmYWxzZSB2YWx1ZXMuIEFsc28gZGVmaW5lIHRoZSBib29zdDo6bXBsIHZlcnNp
b25zIG9mIHRob3NlIG5hbWVzLAotLy8gdHJ1ZV8gYW5kIGZhbHNlXy4KLXR5cGVkZWYgaW50ZWdy
YWxfY29uc3RhbnQ8Ym9vbCwgdHJ1ZT4gIHRydWVfdHlwZTsKLXR5cGVkZWYgaW50ZWdyYWxfY29u
c3RhbnQ8Ym9vbCwgZmFsc2U+IGZhbHNlX3R5cGU7Ci10eXBlZGVmIHRydWVfdHlwZSAgdHJ1ZV87
Ci10eXBlZGVmIGZhbHNlX3R5cGUgZmFsc2VfOwotCi0vLyBpZl8gaXMgYSB0ZW1wbGF0aXplZCBj
b25kaXRpb25hbCBzdGF0ZW1lbnQuCi0vLyBpZl88Y29uZCwgQSwgQj4gaXMgYSBjb21waWxlIHRp
bWUgZXZhbHVhdGlvbiBvZiBjb25kLgotLy8gaWZfPD46OnR5cGUgY29udGFpbnMgQSBpZiBjb25k
IGlzIHRydWUsIEIgb3RoZXJ3aXNlLgotdGVtcGxhdGU8Ym9vbCBjb25kLCB0eXBlbmFtZSBBLCB0
eXBlbmFtZSBCPgotc3RydWN0IGlmX3sKLSAgdHlwZWRlZiBBIHR5cGU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBBLCB0eXBlbmFtZSBCPgotc3RydWN0IGlmXzxmYWxzZSwgQSwgQj4gewotICB0
eXBlZGVmIEIgdHlwZTsKLX07Ci0KLQotLy8gdHlwZV9lcXVhbHNfIGlzIGEgdGVtcGxhdGUgdHlw
ZSBjb21wYXJhdG9yLCBzaW1pbGFyIHRvIExva2kgSXNTYW1lVHlwZS4KLS8vIHR5cGVfZXF1YWxz
XzxBLCBCPjo6dmFsdWUgaXMgdHJ1ZSBpZmYgIkEiIGlzIHRoZSBzYW1lIHR5cGUgYXMgIkIiLgot
Ly8KLS8vIE5ldyBjb2RlIHNob3VsZCBwcmVmZXIgYmFzZTo6aXNfc2FtZSwgZGVmaW5lZCBpbiBi
YXNlL3R5cGVfdHJhaXRzLmguCi0vLyBJdCBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsLCBidXQg
aXNfc2FtZSBpcyB0aGUgc3RhbmRhcmQgc3BlbGxpbmcuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBLCB0
eXBlbmFtZSBCPgotc3RydWN0IHR5cGVfZXF1YWxzXyA6IHB1YmxpYyBmYWxzZV8gewotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgQT4KLXN0cnVjdCB0eXBlX2VxdWFsc188QSwgQT4gOiBwdWJsaWMg
dHJ1ZV8gewotfTsKLQotLy8gYW5kXyBpcyBhIHRlbXBsYXRlICYmIG9wZXJhdG9yLgotLy8gYW5k
XzxBLCBCPjo6dmFsdWUgZXZhbHVhdGVzICJBOjp2YWx1ZSAmJiBCOjp2YWx1ZSIuCi10ZW1wbGF0
ZTx0eXBlbmFtZSBBLCB0eXBlbmFtZSBCPgotc3RydWN0IGFuZF8gOiBwdWJsaWMgaW50ZWdyYWxf
Y29uc3RhbnQ8Ym9vbCwgKEE6OnZhbHVlICYmIEI6OnZhbHVlKT4gewotfTsKLQotLy8gb3JfIGlz
IGEgdGVtcGxhdGUgfHwgb3BlcmF0b3IuCi0vLyBvcl88QSwgQj46OnZhbHVlIGV2YWx1YXRlcyAi
QTo6dmFsdWUgfHwgQjo6dmFsdWUiLgotdGVtcGxhdGU8dHlwZW5hbWUgQSwgdHlwZW5hbWUgQj4K
LXN0cnVjdCBvcl8gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKEE6OnZhbHVlIHx8
IEI6OnZhbHVlKT4gewotfTsKLQotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5h
bWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jZW5kaWYgIC8vIEdP
T0dMRV9QUk9UT0JVRl9URU1QTEFURV9VVElMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvc3R1YnMvdGVtcGxhdGVfdXRpbF91bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy90ZW1wbGF0ZV91dGlsX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiMTc0NWUyYmY3YzgzNmVjODVlMDhiOGU5YTAyMjI4YjFiMjkxMTZmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi9zdHVicy90ZW1wbGF0ZV91dGlsX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTMw
ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA1IEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyAtLS0tCi0vLyBBdXRob3I6IGxhckBnb29nbGUuY29tIChMYXJhbWllIExlYXZpdHQpCi0vLwot
Ly8gVGhlc2UgdGVzdHMgYXJlIHJlYWxseSBjb21waWxlIHRpbWUgdGVzdHMuCi0vLyBJZiB5b3Ug
dHJ5IHRvIHN0ZXAgdGhyb3VnaCB0aGlzIGluIGEgZGVidWdnZXIKLS8vIHlvdSB3aWxsIG5vdCBz
ZWUgYW55IGV2YWx1YXRpb25zLCBtZXJlbHkgdGhhdAotLy8gdmFsdWUgaXMgYXNzaWduZWQgdHJ1
ZSBvciBmYWxzZSBzZXF1ZW50aWFsbHkuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvdGVtcGxhdGVfdXRpbC5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3Rpbmcv
Z29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBHT09H
TEVfTkFNRVNQQUNFID0gZ29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw7Ci0KLW5hbWVzcGFjZSBn
b29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci1uYW1l
c3BhY2UgewotCi1URVNUKFRlbXBsYXRlVXRpbFRlc3QsIFRlc3RTaXplKSB7Ci0gIEVYUEVDVF9H
VChzaXplb2YoR09PR0xFX05BTUVTUEFDRTo6YmlnXyksIHNpemVvZihHT09HTEVfTkFNRVNQQUNF
OjpzbWFsbF8pKTsKLX0KLQotVEVTVChUZW1wbGF0ZVV0aWxUZXN0LCBUZXN0SW50ZWdyYWxDb25z
dGFudHMpIHsKLSAgLy8gdGVzdCB0aGUgYnVpbHQtaW4gdHlwZXMuCi0gIEVYUEVDVF9UUlVFKHRy
dWVfdHlwZTo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoZmFsc2VfdHlwZTo6dmFsdWUpOwotCi0g
IHR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8aW50LCAxPiBvbmVfdHlwZTsKLSAgRVhQRUNUX0VR
KDEsIG9uZV90eXBlOjp2YWx1ZSk7Ci19Ci0KLVRFU1QoVGVtcGxhdGVVdGlsVGVzdCwgVGVzdFRl
bXBsYXRlSWYpIHsKLSAgdHlwZWRlZiBpZl88dHJ1ZSwgdHJ1ZV90eXBlLCBmYWxzZV90eXBlPjo6
dHlwZSBpZl90cnVlOwotICBFWFBFQ1RfVFJVRShpZl90cnVlOjp2YWx1ZSk7Ci0KLSAgdHlwZWRl
ZiBpZl88ZmFsc2UsIHRydWVfdHlwZSwgZmFsc2VfdHlwZT46OnR5cGUgaWZfZmFsc2U7Ci0gIEVY
UEVDVF9GQUxTRShpZl9mYWxzZTo6dmFsdWUpOwotfQotCi1URVNUKFRlbXBsYXRlVXRpbFRlc3Qs
IFRlc3RUZW1wbGF0ZVR5cGVFcXVhbHMpIHsKLSAgLy8gQ2hlY2sgdGhhdCB0aGUgVGVtcGxhdGVU
eXBlRXF1YWxzIHdvcmtzIGNvcnJlY3RseS4KLSAgYm9vbCB2YWx1ZSA9IGZhbHNlOwotCi0gIC8v
IFRlc3QgdGhlIHNhbWUgdHlwZSBpcyB0cnVlLgotICB2YWx1ZSA9IHR5cGVfZXF1YWxzXzxpbnQs
IGludD46OnZhbHVlOwotICBFWFBFQ1RfVFJVRSh2YWx1ZSk7Ci0KLSAgLy8gVGVzdCBkaWZmZXJl
bnQgdHlwZXMgYXJlIGZhbHNlLgotICB2YWx1ZSA9IHR5cGVfZXF1YWxzXzxmbG9hdCwgaW50Pjo6
dmFsdWU7Ci0gIEVYUEVDVF9GQUxTRSh2YWx1ZSk7Ci0KLSAgLy8gVGVzdCB0eXBlIGFsaWFzaW5n
LgotICB0eXBlZGVmIGNvbnN0IGludCBmb287Ci0gIHZhbHVlID0gdHlwZV9lcXVhbHNfPGNvbnN0
IGZvbywgY29uc3QgaW50Pjo6dmFsdWU7Ci0gIEVYUEVDVF9UUlVFKHZhbHVlKTsKLX0KLQotVEVT
VChUZW1wbGF0ZVV0aWxUZXN0LCBUZXN0VGVtcGxhdGVBbmRPcikgewotICAvLyBDaGVjayB0aGF0
IHRoZSBUZW1wbGF0ZVR5cGVFcXVhbHMgd29ya3MgY29ycmVjdGx5LgotICBib29sIHZhbHVlID0g
ZmFsc2U7Ci0KLSAgLy8gWWVzICYmIFllcyA9PSB0cnVlLgotICB2YWx1ZSA9IGFuZF88dHJ1ZV8s
IHRydWVfPjo6dmFsdWU7Ci0gIEVYUEVDVF9UUlVFKHZhbHVlKTsKLSAgLy8gWWVzICYmIE5vID09
IGZhbHNlLgotICB2YWx1ZSA9IGFuZF88dHJ1ZV8sIGZhbHNlXz46OnZhbHVlOwotICBFWFBFQ1Rf
RkFMU0UodmFsdWUpOwotICAvLyBObyAmJiBZZXMgPT0gZmFsc2UuCi0gIHZhbHVlID0gYW5kXzxm
YWxzZV8sIHRydWVfPjo6dmFsdWU7Ci0gIEVYUEVDVF9GQUxTRSh2YWx1ZSk7Ci0gIC8vIE5vICYm
IE5vID09IGZhbHNlLgotICB2YWx1ZSA9IGFuZF88ZmFsc2VfLCBmYWxzZV8+Ojp2YWx1ZTsKLSAg
RVhQRUNUX0ZBTFNFKHZhbHVlKTsKLQotICAvLyBZZXMgfHwgWWVzID09IHRydWUuCi0gIHZhbHVl
ID0gb3JfPHRydWVfLCB0cnVlXz46OnZhbHVlOwotICBFWFBFQ1RfVFJVRSh2YWx1ZSk7Ci0gIC8v
IFllcyB8fCBObyA9PSB0cnVlLgotICB2YWx1ZSA9IG9yXzx0cnVlXywgZmFsc2VfPjo6dmFsdWU7
Ci0gIEVYUEVDVF9UUlVFKHZhbHVlKTsKLSAgLy8gTm8gfHwgWWVzID09IHRydWUuCi0gIHZhbHVl
ID0gb3JfPGZhbHNlXywgdHJ1ZV8+Ojp2YWx1ZTsKLSAgRVhQRUNUX1RSVUUodmFsdWUpOwotICAv
LyBObyB8fCBObyA9PSBmYWxzZS4KLSAgdmFsdWUgPSBvcl88ZmFsc2VfLCBmYWxzZV8+Ojp2YWx1
ZTsKLSAgRVhQRUNUX0ZBTFNFKHZhbHVlKTsKLX0KLQotVEVTVChUZW1wbGF0ZVV0aWxUZXN0LCBU
ZXN0SWRlbnRpdHkpIHsKLSAgRVhQRUNUX1RSVUUoCi0gICAgICAodHlwZV9lcXVhbHNfPEdPT0dM
RV9OQU1FU1BBQ0U6OmlkZW50aXR5XzxpbnQ+Ojp0eXBlLCBpbnQ+Ojp2YWx1ZSkpOwotICBFWFBF
Q1RfVFJVRSgKLSAgICAgICh0eXBlX2VxdWFsc188R09PR0xFX05BTUVTUEFDRTo6aWRlbnRpdHlf
PHZvaWQ+Ojp0eXBlLCB2b2lkPjo6dmFsdWUpKTsKLX0KLQotfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYK
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi9z
dHVicy90aW1lLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RpbWUuY2MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YzA0MTJjMTc2NjFkZDBmOTk0MmZhZGNhNDc4MWU1MWYw
ZDhmNTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RpbWUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzNjUgKzAs
MCBAQAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy90aW1lLmg+Ci0KLSNpbmNsdWRl
IDxjdGltZT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmludGYu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewot
Ci1uYW1lc3BhY2Ugewotc3RhdGljIGNvbnN0IGludDY0IGtTZWNvbmRzUGVyTWludXRlID0gNjA7
Ci1zdGF0aWMgY29uc3QgaW50NjQga1NlY29uZHNQZXJIb3VyID0gMzYwMDsKLXN0YXRpYyBjb25z
dCBpbnQ2NCBrU2Vjb25kc1BlckRheSA9IGtTZWNvbmRzUGVySG91ciAqIDI0Owotc3RhdGljIGNv
bnN0IGludDY0IGtTZWNvbmRzUGVyNDAwWWVhcnMgPQotICAgIGtTZWNvbmRzUGVyRGF5ICogKDQw
MCAqIDM2NSArIDQwMCAvIDQgLSAzKTsKLS8vIFNlY29uZHMgZnJvbSAwMDAxLTAxLTAxVDAwOjAw
OjAwIHRvIDE5NzAtMDEtMDFUOjAwOjAwOjAwCi1zdGF0aWMgY29uc3QgaW50NjQga1NlY29uZHNG
cm9tRXJhVG9FcG9jaCA9IDYyMTM1NTk2ODAwTEw7Ci0vLyBUaGUgcmFuZ2Ugb2YgdGltZXN0YW1w
IHZhbHVlcyB3ZSBzdXBwb3J0Lgotc3RhdGljIGNvbnN0IGludDY0IGtNaW5UaW1lID0gLTYyMTM1
NTk2ODAwTEw7ICAvLyAwMDAxLTAxLTAxVDAwOjAwOjAwCi1zdGF0aWMgY29uc3QgaW50NjQga01h
eFRpbWUgPSAyNTM0MDIzMDA3OTlMTDsgIC8vIDk5OTktMTItMzFUMjM6NTk6NTkKLQotc3RhdGlj
IGNvbnN0IGludCBrTmFub3NQZXJNaWxsaXNlY29uZCA9IDEwMDAwMDA7Ci1zdGF0aWMgY29uc3Qg
aW50IGtOYW5vc1Blck1pY3Jvc2Vjb25kID0gMTAwMDsKLQotLy8gQ291bnQgdGhlIHNlY29uZHMg
ZnJvbSB0aGUgZ2l2ZW4geWVhciAoc3RhcnQgYXQgSmFuIDEsIDAwOjAwKSB0byAxMDAgeWVhcnMK
LS8vIGFmdGVyLgotaW50NjQgU2Vjb25kc1BlcjEwMFllYXJzKGludCB5ZWFyKSB7Ci0gIGlmICh5
ZWFyICUgNDAwID09IDAgfHwgeWVhciAlIDQwMCA+IDMwMCkgewotICAgIHJldHVybiBrU2Vjb25k
c1BlckRheSAqICgxMDAgKiAzNjUgKyAxMDAgLyA0KTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4g
a1NlY29uZHNQZXJEYXkgKiAoMTAwICogMzY1ICsgMTAwIC8gNCAtIDEpOwotICB9Ci19Ci0KLS8v
IENvdW50IHRoZSBzZWNvbmRzIGZyb20gdGhlIGdpdmVuIHllYXIgKHN0YXJ0IGF0IEphbiAxLCAw
MDowMCkgdG8gNCB5ZWFycwotLy8gYWZ0ZXIuCi1pbnQ2NCBTZWNvbmRzUGVyNFllYXJzKGludCB5
ZWFyKSB7Ci0gIGlmICgoeWVhciAlIDEwMCA9PSAwIHx8IHllYXIgJSAxMDAgPiA5NikgJiYKLSAg
ICAgICEoeWVhciAlIDQwMCA9PSAwIHx8IHllYXIgJSA0MDAgPiAzOTYpKSB7Ci0gICAgLy8gTm8g
bGVhcCB5ZWFycy4KLSAgICByZXR1cm4ga1NlY29uZHNQZXJEYXkgKiAoNCAqIDM2NSk7Ci0gIH0g
ZWxzZSB7Ci0gICAgLy8gT25lIGxlYXAgeWVhcnMuCi0gICAgcmV0dXJuIGtTZWNvbmRzUGVyRGF5
ICogKDQgKiAzNjUgKyAxKTsKLSAgfQotfQotCi1ib29sIElzTGVhcFllYXIoaW50IHllYXIpIHsK
LSAgcmV0dXJuIHllYXIgJSA0MDAgPT0gMCB8fCAoeWVhciAlIDQgPT0gMCAmJiB5ZWFyICUgMTAw
ICE9IDApOwotfQotCi1pbnQ2NCBTZWNvbmRzUGVyWWVhcihpbnQgeWVhcikgewotICByZXR1cm4g
a1NlY29uZHNQZXJEYXkgKiAoSXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NSk7Ci19Ci0KLXN0
YXRpYyBjb25zdCBpbnQga0RheXNJbk1vbnRoWzEzXSA9IHsKLSAgMCwgMzEsIDI4LCAzMSwgMzAs
IDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMQotfTsKLQotaW50NjQgU2Vjb25kc1Blck1v
bnRoKGludCBtb250aCwgYm9vbCBsZWFwKSB7Ci0gIGlmIChtb250aCA9PSAyICYmIGxlYXApIHsK
LSAgICByZXR1cm4ga1NlY29uZHNQZXJEYXkgKiAoa0RheXNJbk1vbnRoW21vbnRoXSArIDEpOwot
ICB9Ci0gIHJldHVybiBrU2Vjb25kc1BlckRheSAqIGtEYXlzSW5Nb250aFttb250aF07Ci19Ci0K
LXN0YXRpYyBjb25zdCBpbnQga0RheXNTaW5jZUphblsxM10gPSB7Ci0gIDAsIDAsIDMxLCA1OSwg
OTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0LAotfTsKLQotYm9vbCBW
YWxpZGF0ZURhdGVUaW1lKGNvbnN0IERhdGVUaW1lJiB0aW1lKSB7Ci0gIGlmICh0aW1lLnllYXIg
PCAxIHx8IHRpbWUueWVhciA+IDk5OTkgfHwKLSAgICAgIHRpbWUubW9udGggPCAxIHx8IHRpbWUu
bW9udGggPiAxMiB8fAotICAgICAgdGltZS5kYXkgPCAxIHx8IHRpbWUuZGF5ID4gMzEgfHwKLSAg
ICAgIHRpbWUuaG91ciA8IDAgfHwgdGltZS5ob3VyID4gMjMgfHwKLSAgICAgIHRpbWUubWludXRl
IDwgMCB8fCB0aW1lLm1pbnV0ZSA+IDU5IHx8Ci0gICAgICB0aW1lLnNlY29uZCA8IDAgfHwgdGlt
ZS5zZWNvbmQgPiA1OSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAodGltZS5tb250
aCA9PSAyICYmIElzTGVhcFllYXIodGltZS55ZWFyKSkgewotICAgIHJldHVybiB0aW1lLm1vbnRo
IDw9IGtEYXlzSW5Nb250aFt0aW1lLm1vbnRoXSArIDE7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJu
IHRpbWUubW9udGggPD0ga0RheXNJbk1vbnRoW3RpbWUubW9udGhdOwotICB9Ci19Ci0KLS8vIENv
dW50IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBlbGFwc2VkIGZyb20gMDAwMS0wMS0wMVQwMDowMDow
MCB0byB0aGUgZ2l2ZW4KLS8vIHRpbWUuCi1pbnQ2NCBTZWNvbmRzU2luY2VDb21tb25FcmEoY29u
c3QgRGF0ZVRpbWUmIHRpbWUpIHsKLSAgaW50NjQgcmVzdWx0ID0gMDsKLSAgLy8gWWVhcnMgc2hv
dWxkIGJlIGJldHdlZW4gMSBhbmQgOTk5OS4KLSAgYXNzZXJ0KHRpbWUueWVhciA+PSAxICYmIHRp
bWUueWVhciA8PSA5OTk5KTsKLSAgaW50IHllYXIgPSAxOwotICBpZiAoKHRpbWUueWVhciAtIHll
YXIpID49IDQwMCkgewotICAgIGludCBjb3VudF80MDB5ZWFycyA9ICh0aW1lLnllYXIgLSB5ZWFy
KSAvIDQwMDsKLSAgICByZXN1bHQgKz0ga1NlY29uZHNQZXI0MDBZZWFycyAqIGNvdW50XzQwMHll
YXJzOwotICAgIHllYXIgKz0gY291bnRfNDAweWVhcnMgKiA0MDA7Ci0gIH0KLSAgd2hpbGUgKCh0
aW1lLnllYXIgLSB5ZWFyKSA+PSAxMDApIHsKLSAgICByZXN1bHQgKz0gU2Vjb25kc1BlcjEwMFll
YXJzKHllYXIpOwotICAgIHllYXIgKz0gMTAwOwotICB9Ci0gIHdoaWxlICgodGltZS55ZWFyIC0g
eWVhcikgPj0gNCkgewotICAgIHJlc3VsdCArPSBTZWNvbmRzUGVyNFllYXJzKHllYXIpOwotICAg
IHllYXIgKz0gNDsKLSAgfQotICB3aGlsZSAodGltZS55ZWFyID4geWVhcikgewotICAgIHJlc3Vs
dCArPSBTZWNvbmRzUGVyWWVhcih5ZWFyKTsKLSAgICArK3llYXI7Ci0gIH0KLSAgLy8gTW9udGhz
IHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDEyLgotICBhc3NlcnQodGltZS5tb250aCA+PSAxICYm
IHRpbWUubW9udGggPD0gMTIpOwotICBpbnQgbW9udGggPSB0aW1lLm1vbnRoOwotICByZXN1bHQg
Kz0ga1NlY29uZHNQZXJEYXkgKiBrRGF5c1NpbmNlSmFuW21vbnRoXTsKLSAgaWYgKG1vbnRoID4g
MiAmJiBJc0xlYXBZZWFyKHllYXIpKSB7Ci0gICAgcmVzdWx0ICs9IGtTZWNvbmRzUGVyRGF5Owot
ICB9Ci0gIGFzc2VydCh0aW1lLmRheSA+PSAxICYmCi0gICAgICAgICB0aW1lLmRheSA8PSAobW9u
dGggPT0gMiAmJiBJc0xlYXBZZWFyKHllYXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8g
a0RheXNJbk1vbnRoW21vbnRoXSArIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBrRGF5
c0luTW9udGhbbW9udGhdKSk7Ci0gIHJlc3VsdCArPSBrU2Vjb25kc1BlckRheSAqICh0aW1lLmRh
eSAtIDEpOwotICByZXN1bHQgKz0ga1NlY29uZHNQZXJIb3VyICogdGltZS5ob3VyICsKLSAgICAg
IGtTZWNvbmRzUGVyTWludXRlICogdGltZS5taW51dGUgKwotICAgICAgdGltZS5zZWNvbmQ7Ci0g
IHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEZvcm1hdCBuYW5vc2Vjb25kcyB3aXRoIGVpdGhlciAz
LCA2LCBvciA5IGRpZ2l0cyBkZXBlbmRpbmcgb24gdGhlIHJlcXVpcmVkCi0vLyBwcmVjaXNpb24g
dG8gcmVwcmVzZW50IHRoZSBleGFjdCB2YWx1ZS4KLXN0cmluZyBGb3JtYXROYW5vcyhpbnQzMiBu
YW5vcykgewotICBpZiAobmFub3MgJSBrTmFub3NQZXJNaWxsaXNlY29uZCA9PSAwKSB7Ci0gICAg
cmV0dXJuIFN0cmluZ1ByaW50ZigiJTAzZCIsIG5hbm9zIC8ga05hbm9zUGVyTWlsbGlzZWNvbmQp
OwotICB9IGVsc2UgaWYgKG5hbm9zICUga05hbm9zUGVyTWljcm9zZWNvbmQgPT0gMCkgewotICAg
IHJldHVybiBTdHJpbmdQcmludGYoIiUwNmQiLCBuYW5vcyAvIGtOYW5vc1Blck1pY3Jvc2Vjb25k
KTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gU3RyaW5nUHJpbnRmKCIlMDlkIiwgbmFub3MpOwot
ICB9Ci19Ci0KLS8vIFBhcnNlcyBhbiBpbnRlZ2VyIGZyb20gYSBudWxsLXRlcm1pbmF0ZWQgY2hh
ciBzZXF1ZW5jZS4gVGhlIG1ldGhvZAotLy8gY29uc3VtZXMgYXQgbW9zdCAid2lkdGgiIGNoYXJz
LiBSZXR1cm5zIGEgcG9pbnRlciBhZnRlciB0aGUgY29uc3VtZWQKLS8vIGludGVnZXIsIG9yIE5V
TEwgaWYgdGhlIGRhdGEgZG9lcyBub3Qgc3RhcnQgd2l0aCBhbiBpbnRlZ2VyIG9yIHRoZQotLy8g
aW50ZWdlciB2YWx1ZSBkb2VzIG5vdCBmYWxsIGluIHRoZSByYW5nZSBvZiBbbWluX3ZhbHVlLCBt
YXhfdmFsdWVdLgotY29uc3QgY2hhciogUGFyc2VJbnQoY29uc3QgY2hhciogZGF0YSwgaW50IHdp
ZHRoLCBpbnQgbWluX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgaW50IG1heF92YWx1ZSwg
aW50KiByZXN1bHQpIHsKLSAgaWYgKCFhc2NpaV9pc2RpZ2l0KCpkYXRhKSkgewotICAgIHJldHVy
biBOVUxMOwotICB9Ci0gIGludCB2YWx1ZSA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgd2lk
dGg7ICsraSwgKytkYXRhKSB7Ci0gICAgaWYgKGFzY2lpX2lzZGlnaXQoKmRhdGEpKSB7Ci0gICAg
ICB2YWx1ZSA9IHZhbHVlICogMTAgKyAoKmRhdGEgLSAnMCcpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKHZhbHVlID49IG1pbl92YWx1ZSAmJiB2YWx1ZSA8
PSBtYXhfdmFsdWUpIHsKLSAgICAqcmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIGRhdGE7Ci0g
IH0gZWxzZSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLy8gQ29uc3VtZXMgdGhlIGZy
YWN0aW9uYWwgcGFydHMgb2YgYSBzZWNvbmQgaW50byBuYW5vcy4gRm9yIGV4YW1wbGUsCi0vLyAi
MDEwIiB3aWxsIGJlIHBhcnNlZCB0byAxMDAwMDAwMCBuYW5vcy4KLWNvbnN0IGNoYXIqIFBhcnNl
TmFub3MoY29uc3QgY2hhciogZGF0YSwgaW50MzIqIG5hbm9zKSB7Ci0gIGlmICghYXNjaWlfaXNk
aWdpdCgqZGF0YSkpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBpbnQgdmFsdWUgPSAwOwot
ICBpbnQgbGVuID0gMDsKLSAgLy8gQ29uc3VtZSBhcyBtYW55IGRpZ2l0cyBhcyB0aGVyZSBhcmUg
YnV0IG9ubHkgdGFrZSB0aGUgZmlyc3QgOSBpbnRvCi0gIC8vIGFjY291bnQuCi0gIHdoaWxlIChh
c2NpaV9pc2RpZ2l0KCpkYXRhKSkgewotICAgIGlmIChsZW4gPCA5KSB7Ci0gICAgICB2YWx1ZSA9
IHZhbHVlICogMTAgKyAqZGF0YSAtICcwJzsKLSAgICB9Ci0gICAgKytsZW47Ci0gICAgKytkYXRh
OwotICB9Ci0gIHdoaWxlIChsZW4gPCA5KSB7Ci0gICAgdmFsdWUgPSB2YWx1ZSAqIDEwOwotICAg
ICsrbGVuOwotICB9Ci0gICpuYW5vcyA9IHZhbHVlOwotICByZXR1cm4gZGF0YTsKLX0KLQotY29u
c3QgY2hhciogUGFyc2VUaW1lem9uZU9mZnNldChjb25zdCBjaGFyKiBkYXRhLCBpbnQ2NCogb2Zm
c2V0KSB7Ci0gIC8vIEFjY2VwdCBmb3JtYXQgIkhIOk1NIi4gRS5nLiwgIjA4OjAwIgotICBpbnQg
aG91cjsKLSAgaWYgKChkYXRhID0gUGFyc2VJbnQoZGF0YSwgMiwgMCwgMjMsICZob3VyKSkgPT0g
TlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGlmICgqZGF0YSsrICE9ICc6Jykgewot
ICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGludCBtaW51dGU7Ci0gIGlmICgoZGF0YSA9IFBhcnNl
SW50KGRhdGEsIDIsIDAsIDU5LCAmbWludXRlKSkgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxM
OwotICB9Ci0gICpvZmZzZXQgPSAoaG91ciAqIDYwICsgbWludXRlKSAqIDYwOwotICByZXR1cm4g
ZGF0YTsKLX0KLX0gIC8vIG5hbWVzcGFjZQotCi1ib29sIFNlY29uZHNUb0RhdGVUaW1lKGludDY0
IHNlY29uZHMsIERhdGVUaW1lKiB0aW1lKSB7Ci0gIGlmIChzZWNvbmRzIDwga01pblRpbWUgfHwg
c2Vjb25kcyA+IGtNYXhUaW1lKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIC8vIEl0J3Mg
ZWFzaWVyIHRvIGNhbGN1YXRlIHRoZSBEYXRlVGltZSBzdGFydGluZyBmcm9tIDAwMDEtMDEtMDFU
MDA6MDA6MDAKLSAgc2Vjb25kcyA9IHNlY29uZHMgKyBrU2Vjb25kc0Zyb21FcmFUb0Vwb2NoOwot
ICBpbnQgeWVhciA9IDE7Ci0gIGlmIChzZWNvbmRzID49IGtTZWNvbmRzUGVyNDAwWWVhcnMpIHsK
LSAgICBpbnQgY291bnRfNDAweWVhcnMgPSBzZWNvbmRzIC8ga1NlY29uZHNQZXI0MDBZZWFyczsK
LSAgICB5ZWFyICs9IDQwMCAqIGNvdW50XzQwMHllYXJzOwotICAgIHNlY29uZHMgJT0ga1NlY29u
ZHNQZXI0MDBZZWFyczsKLSAgfQotICB3aGlsZSAoc2Vjb25kcyA+PSBTZWNvbmRzUGVyMTAwWWVh
cnMoeWVhcikpIHsKLSAgICBzZWNvbmRzIC09IFNlY29uZHNQZXIxMDBZZWFycyh5ZWFyKTsKLSAg
ICB5ZWFyICs9IDEwMDsKLSAgfQotICB3aGlsZSAoc2Vjb25kcyA+PSBTZWNvbmRzUGVyNFllYXJz
KHllYXIpKSB7Ci0gICAgc2Vjb25kcyAtPSBTZWNvbmRzUGVyNFllYXJzKHllYXIpOwotICAgIHll
YXIgKz0gNDsKLSAgfQotICB3aGlsZSAoc2Vjb25kcyA+PSBTZWNvbmRzUGVyWWVhcih5ZWFyKSkg
ewotICAgIHNlY29uZHMgLT0gU2Vjb25kc1BlclllYXIoeWVhcik7Ci0gICAgeWVhciArPSAxOwot
ICB9Ci0gIGJvb2wgbGVhcCA9IElzTGVhcFllYXIoeWVhcik7Ci0gIGludCBtb250aCA9IDE7Ci0g
IHdoaWxlIChzZWNvbmRzID49IFNlY29uZHNQZXJNb250aChtb250aCwgbGVhcCkpIHsKLSAgICBz
ZWNvbmRzIC09IFNlY29uZHNQZXJNb250aChtb250aCwgbGVhcCk7Ci0gICAgKyttb250aDsKLSAg
fQotICBpbnQgZGF5ID0gMSArIHNlY29uZHMgLyBrU2Vjb25kc1BlckRheTsKLSAgc2Vjb25kcyAl
PSBrU2Vjb25kc1BlckRheTsKLSAgaW50IGhvdXIgPSBzZWNvbmRzIC8ga1NlY29uZHNQZXJIb3Vy
OwotICBzZWNvbmRzICU9IGtTZWNvbmRzUGVySG91cjsKLSAgaW50IG1pbnV0ZSA9IHNlY29uZHMg
LyBrU2Vjb25kc1Blck1pbnV0ZTsKLSAgc2Vjb25kcyAlPSBrU2Vjb25kc1Blck1pbnV0ZTsKLSAg
dGltZS0+eWVhciA9IHllYXI7Ci0gIHRpbWUtPm1vbnRoID0gbW9udGg7Ci0gIHRpbWUtPmRheSA9
IGRheTsKLSAgdGltZS0+aG91ciA9IGhvdXI7Ci0gIHRpbWUtPm1pbnV0ZSA9IG1pbnV0ZTsKLSAg
dGltZS0+c2Vjb25kID0gc3RhdGljX2Nhc3Q8aW50PihzZWNvbmRzKTsKLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgRGF0ZVRpbWVUb1NlY29uZHMoY29uc3QgRGF0ZVRpbWUmIHRpbWUsIGludDY0
KiBzZWNvbmRzKSB7Ci0gIGlmICghVmFsaWRhdGVEYXRlVGltZSh0aW1lKSkgewotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotICAqc2Vjb25kcyA9IFNlY29uZHNTaW5jZUNvbW1vbkVyYSh0aW1lKSAt
IGtTZWNvbmRzRnJvbUVyYVRvRXBvY2g7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdldEN1
cnJlbnRUaW1lKGludDY0KiBzZWNvbmRzLCBpbnQzMiogbmFub3MpIHsKLSAgLy8gVE9ETyh4aWFv
ZmVuZyk6IEltcHJvdmUgdGhlIGFjY3VyYWN5IG9mIHRoaXMgaW1wbGVtZW50YXRpb24gKG9yIGp1
c3QKLSAgLy8gcmVtb3ZlIHRoaXMgbWV0aG9kIGZyb20gcHJvdG9idWYpLgotICAqc2Vjb25kcyA9
IHRpbWUoTlVMTCk7Ci0gICpuYW5vcyA9IDA7Ci19Ci0KLXN0cmluZyBGb3JtYXRUaW1lKGludDY0
IHNlY29uZHMsIGludDMyIG5hbm9zKSB7Ci0gIERhdGVUaW1lIHRpbWU7Ci0gIGlmIChuYW5vcyA8
IDAgfHwgbmFub3MgPiA5OTk5OTk5OTkgfHwgIVNlY29uZHNUb0RhdGVUaW1lKHNlY29uZHMsICZ0
aW1lKSkgewotICAgIHJldHVybiAiSW52YWxpZFRpbWUiOwotICB9Ci0gIHN0cmluZyByZXN1bHQg
PSBTdHJpbmdQcmludGYoIiUwNGQtJTAyZC0lMDJkVCUwMmQ6JTAyZDolMDJkIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnllYXIsIHRpbWUubW9udGgsIHRpbWUuZGF5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuaG91ciwgdGltZS5taW51dGUsIHRp
bWUuc2Vjb25kKTsKLSAgaWYgKG5hbm9zICE9IDApIHsKLSAgICByZXN1bHQgKz0gIi4iICsgRm9y
bWF0TmFub3MobmFub3MpOwotICB9Ci0gIHJldHVybiByZXN1bHQgKyAiWiI7Ci19Ci0KLWJvb2wg
UGFyc2VUaW1lKGNvbnN0IHN0cmluZyYgdmFsdWUsIGludDY0KiBzZWNvbmRzLCBpbnQzMiogbmFu
b3MpIHsKLSAgRGF0ZVRpbWUgdGltZTsKLSAgY29uc3QgY2hhciogZGF0YSA9IHZhbHVlLmNfc3Ry
KCk7Ci0gIC8vIFdlIG9ubHkgYWNjZXB0OgotICAvLyAgIFotbm9ybWFsaXplZDogMjAxNS0wNS0y
MFQxMzoyOTozNS4xMjBaCi0gIC8vICAgV2l0aCBVVEMgb2Zmc2V0OiAyMDE1LTA1LTIwVDEzOjI5
OjM1LjEyMC0wODowMAotCi0gIC8vIFBhcnNlIHllYXIKLSAgaWYgKChkYXRhID0gUGFyc2VJbnQo
ZGF0YSwgNCwgMSwgOTk5OSwgJnRpbWUueWVhcikpID09IE5VTEwpIHsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLSAgLy8gRXhwZWN0ICctJwotICBpZiAoKmRhdGErKyAhPSAnLScpIHJldHVybiBm
YWxzZTsKLSAgLy8gUGFyc2UgbW9udGgKLSAgaWYgKChkYXRhID0gUGFyc2VJbnQoZGF0YSwgMiwg
MSwgMTIsICZ0aW1lLm1vbnRoKSkgPT0gTlVMTCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICAvLyBFeHBlY3QgJy0nCi0gIGlmICgqZGF0YSsrICE9ICctJykgcmV0dXJuIGZhbHNlOwotICAv
LyBQYXJzZSBkYXkKLSAgaWYgKChkYXRhID0gUGFyc2VJbnQoZGF0YSwgMiwgMSwgMzEsICZ0aW1l
LmRheSkpID09IE5VTEwpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLy8gRXhwZWN0ICdU
JwotICBpZiAoKmRhdGErKyAhPSAnVCcpIHJldHVybiBmYWxzZTsKLSAgLy8gUGFyc2UgaG91cgot
ICBpZiAoKGRhdGEgPSBQYXJzZUludChkYXRhLCAyLCAwLCAyMywgJnRpbWUuaG91cikpID09IE5V
TEwpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLy8gRXhwZWN0ICc6JwotICBpZiAoKmRh
dGErKyAhPSAnOicpIHJldHVybiBmYWxzZTsKLSAgLy8gUGFyc2UgbWludXRlCi0gIGlmICgoZGF0
YSA9IFBhcnNlSW50KGRhdGEsIDIsIDAsIDU5LCAmdGltZS5taW51dGUpKSA9PSBOVUxMKSB7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIC8vIEV4cGVjdCAnOicKLSAgaWYgKCpkYXRhKysgIT0g
JzonKSByZXR1cm4gZmFsc2U7Ci0gIC8vIFBhcnNlIHNlY29uZAotICBpZiAoKGRhdGEgPSBQYXJz
ZUludChkYXRhLCAyLCAwLCA1OSwgJnRpbWUuc2Vjb25kKSkgPT0gTlVMTCkgewotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotICBpZiAoIURhdGVUaW1lVG9TZWNvbmRzKHRpbWUsIHNlY29uZHMpKSB7
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIC8vIFBhcnNlIG5hbm9zZWNvbmRzLgotICBpZiAo
KmRhdGEgPT0gJy4nKSB7Ci0gICAgKytkYXRhOwotICAgIC8vIFBhcnNlIG5hbm9zZWNvbmRzLgot
ICAgIGlmICgoZGF0YSA9IFBhcnNlTmFub3MoZGF0YSwgbmFub3MpKSA9PSBOVUxMKSB7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9IGVsc2UgewotICAgICpuYW5vcyA9IDA7Ci0gIH0K
LSAgLy8gUGFyc2UgVVRDIG9mZnNldHMuCi0gIGlmICgqZGF0YSA9PSAnWicpIHsKLSAgICArK2Rh
dGE7Ci0gIH0gZWxzZSBpZiAoKmRhdGEgPT0gJysnKSB7Ci0gICAgKytkYXRhOwotICAgIGludDY0
IG9mZnNldDsKLSAgICBpZiAoKGRhdGEgPSBQYXJzZVRpbWV6b25lT2Zmc2V0KGRhdGEsICZvZmZz
ZXQpKSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgICpzZWNvbmRz
IC09IG9mZnNldDsKLSAgfSBlbHNlIGlmICgqZGF0YSA9PSAnLScpIHsKLSAgICArK2RhdGE7Ci0g
ICAgaW50NjQgb2Zmc2V0OwotICAgIGlmICgoZGF0YSA9IFBhcnNlVGltZXpvbmVPZmZzZXQoZGF0
YSwgJm9mZnNldCkpID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
KnNlY29uZHMgKz0gb2Zmc2V0OwotICB9IGVsc2UgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICAvLyBEb25lIHdpdGggcGFyc2luZy4KLSAgcmV0dXJuICpkYXRhID09IDA7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvdGltZS5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RpbWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjBhNmI1NmQ5MWM0ODk3MzRhMGJmMmI0MzM2MzJhMzcyOWZmMGQxZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvc3R1YnMvdGltZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19U
SU1FX0hfCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9TVFVCU19USU1FX0hfCi0KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewot
bmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLXN0cnVjdCBEYXRl
VGltZSB7Ci0gIGludCB5ZWFyOwotICBpbnQgbW9udGg7Ci0gIGludCBkYXk7Ci0gIGludCBob3Vy
OwotICBpbnQgbWludXRlOwotICBpbnQgc2Vjb25kOwotfTsKLQotLy8gQ29udmVydHMgYSB0aW1l
c3RhbXAgKHNlY29uZHMgZWxhcHNlZCBzaW5jZSAxOTcwLTAxLTAxVDAwOjAwOjAwLCBjb3VsZCBi
ZQotLy8gbmVnYXRpdmUgdG8gcmVwcmVzZW50IHRpbWUgYmVmb3JlIDE5NzAtMDEtMDEpIHRvIERh
dGVUaW1lLiBSZXR1cm5zIGZhbHNlCi0vLyBpZiB0aGUgdGltZXN0YW1wIGlzIG5vdCBpbiB0aGUg
cmFuZ2UgYmV0d2VlbiAwMDAxLTAxLTAxVDAwOjAwOjAwIGFuZAotLy8gOTk5OS0xMi0zMVQyMzo1
OTo1OS4KLWJvb2wgTElCUFJPVE9CVUZfRVhQT1JUIFNlY29uZHNUb0RhdGVUaW1lKGludDY0IHNl
Y29uZHMsIERhdGVUaW1lKiB0aW1lKTsKLS8vIENvbnZlcnRzIERhdGVUaW1lIHRvIGEgdGltZXN0
YW1wIChzZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDFUMDA6MDA6MDApLgotLy8gUmV0dXJucyBmYWxz
ZSBpZiB0aGUgRGF0ZVRpbWUgaXMgbm90IHZhbGlkIG9yIGlzIG5vdCBpbiB0aGUgdmFsaWQgcmFu
Z2UuCi1ib29sIExJQlBST1RPQlVGX0VYUE9SVCBEYXRlVGltZVRvU2Vjb25kcyhjb25zdCBEYXRl
VGltZSYgdGltZSwgaW50NjQqIHNlY29uZHMpOwotCi12b2lkIExJQlBST1RPQlVGX0VYUE9SVCBH
ZXRDdXJyZW50VGltZShpbnQ2NCogc2Vjb25kcywgaW50MzIqIG5hbm9zKTsKLQotLy8gRm9ybWF0
cyBhIHRpbWUgc3RyaW5nIGluIFJGQzMzMzkgZnJvbWF0LgotLy8KLS8vIEZvciBleGFtcGxlLCAi
MjAxNS0wNS0yMFQxMzoyOTozNS4xMjBaIi4gRm9yIG5hbm9zLCAwLCAzLCA2IG9yIDkgZnJhY3Rp
b25hbAotLy8gZGlnaXRzIHdpbGwgYmUgdXNlZCBkZXBlbmRpbmcgb24gaG93IG1hbnkgYXJlIHJl
cXVpcmVkIHRvIHJlcHJlc2VudCB0aGUgZXhhY3QKLS8vIHZhbHVlLgotLy8KLS8vIE5vdGUgdGhh
dCAibmFub3MiIG11c3QgaW4gdGhlIHJhbmdlIG9mIFswLCA5OTk5OTk5OTldLgotc3RyaW5nIExJ
QlBST1RPQlVGX0VYUE9SVCBGb3JtYXRUaW1lKGludDY0IHNlY29uZHMsIGludDMyIG5hbm9zKTsK
LS8vIFBhcnNlcyBhIHRpbWUgc3RyaW5nLiBUaGlzIG1ldGhvZCBhY2NlcHRzIFJGQzMzMzkgZGF0
ZS90aW1lIHN0cmluZyB3aXRoIFVUQwotLy8gb2Zmc2V0LiBGb3IgZXhhbXBsZSwgIjIwMTUtMDUt
MjBUMTM6Mjk6MzUuMTIwLTA4OjAwIi4KLWJvb2wgTElCUFJPVE9CVUZfRVhQT1JUIFBhcnNlVGlt
ZShjb25zdCBzdHJpbmcmIHZhdWxlLCBpbnQ2NCogc2Vjb25kcywgaW50MzIqIG5hbm9zKTsKLQot
fSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfU1RVQlNfVElN
RV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RpbWVfdGVzdC5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy90aW1lX3Rlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDU5ZTlkMWM3M2NmZDcyZjUzMThkOGE2MTRkYzFkYmE4NmYyODdmMDYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL3RpbWVfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvdGltZS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3Rpbmcv
Z29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29n
bGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci1uYW1lc3Bh
Y2Ugewotc3RhdGljIGNvbnN0IGludDY0IGtTZWNvbmRzUGVyRGF5ID0gMzYwMCAqIDI0OwotCi0v
LyBGb3IgRGF0ZVRpbWUsIHRlc3RzIHdpbGwgbW9zdGx5IGZvY3VzZSBvbiB0aGUgZGF0ZSBwYXJ0
IGJlY2F1c2UgdGhhdCdzCi0vLyB0aGUgdHJpY2t5IG9uZS4KLWludDY0IENyZWF0ZVRpbWVzdGFt
cChpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KSB7Ci0gIERhdGVUaW1lIHRpbWU7Ci0gIHRp
bWUueWVhciA9IHllYXI7Ci0gIHRpbWUubW9udGggPSBtb250aDsKLSAgdGltZS5kYXkgPSBkYXk7
Ci0gIHRpbWUuaG91ciA9IHRpbWUubWludXRlID0gdGltZS5zZWNvbmQgPSAwOwotICBpbnQ2NCBy
ZXN1bHQ7Ci0gIEdPT0dMRV9DSEVDSyhEYXRlVGltZVRvU2Vjb25kcyh0aW1lLCAmcmVzdWx0KSk7
Ci0gIC8vIENoZWNrIHRoYXQgYSByb3VuZHRyaXAgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0Lgot
ICBHT09HTEVfQ0hFQ0soU2Vjb25kc1RvRGF0ZVRpbWUocmVzdWx0LCAmdGltZSkpOwotICBHT09H
TEVfQ0hFQ0sodGltZS55ZWFyID09IHllYXIpOwotICBHT09HTEVfQ0hFQ0sodGltZS5tb250aCA9
PSBtb250aCk7Ci0gIEdPT0dMRV9DSEVDSyh0aW1lLmRheSA9PSBkYXkpOwotICByZXR1cm4gcmVz
dWx0OwotfQotCi1URVNUKERhdGVUaW1lVGVzdCwgU2ltcGxlVGltZSkgewotICBEYXRlVGltZSB0
aW1lOwotICBBU1NFUlRfVFJVRShTZWNvbmRzVG9EYXRlVGltZSgxLCAmdGltZSkpOwotICBFWFBF
Q1RfRVEoMTk3MCwgdGltZS55ZWFyKTsKLSAgRVhQRUNUX0VRKDEsIHRpbWUubW9udGgpOwotICBF
WFBFQ1RfRVEoMSwgdGltZS5kYXkpOwotICBFWFBFQ1RfRVEoMCwgdGltZS5ob3VyKTsKLSAgRVhQ
RUNUX0VRKDAsIHRpbWUubWludXRlKTsKLSAgRVhQRUNUX0VRKDEsIHRpbWUuc2Vjb25kKTsKLSAg
aW50NjQgc2Vjb25kczsKLSAgQVNTRVJUX1RSVUUoRGF0ZVRpbWVUb1NlY29uZHModGltZSwgJnNl
Y29uZHMpKTsKLSAgRVhQRUNUX0VRKDEsIHNlY29uZHMpOwotCi0gIEFTU0VSVF9UUlVFKFNlY29u
ZHNUb0RhdGVUaW1lKC0xLCAmdGltZSkpOwotICBFWFBFQ1RfRVEoMTk2OSwgdGltZS55ZWFyKTsK
LSAgRVhQRUNUX0VRKDEyLCB0aW1lLm1vbnRoKTsKLSAgRVhQRUNUX0VRKDMxLCB0aW1lLmRheSk7
Ci0gIEVYUEVDVF9FUSgyMywgdGltZS5ob3VyKTsKLSAgRVhQRUNUX0VRKDU5LCB0aW1lLm1pbnV0
ZSk7Ci0gIEVYUEVDVF9FUSg1OSwgdGltZS5zZWNvbmQpOwotICBBU1NFUlRfVFJVRShEYXRlVGlt
ZVRvU2Vjb25kcyh0aW1lLCAmc2Vjb25kcykpOwotICBFWFBFQ1RfRVEoLTEsIHNlY29uZHMpOwot
Ci0gIERhdGVUaW1lIHN0YXJ0LCBlbmQ7Ci0gIHN0YXJ0LnllYXIgPSAxOwotICBzdGFydC5tb250
aCA9IDE7Ci0gIHN0YXJ0LmRheSA9IDE7Ci0gIHN0YXJ0LmhvdXIgPSAwOwotICBzdGFydC5taW51
dGUgPSAwOwotICBzdGFydC5zZWNvbmQgPSAwOwotICBlbmQueWVhciA9IDk5OTk7Ci0gIGVuZC5t
b250aCA9IDEyOwotICBlbmQuZGF5ID0gMzE7Ci0gIGVuZC5ob3VyID0gMjM7Ci0gIGVuZC5taW51
dGUgPSA1OTsKLSAgZW5kLnNlY29uZCA9IDU5OwotICBpbnQ2NCBzdGFydF90aW1lLCBlbmRfdGlt
ZTsKLSAgQVNTRVJUX1RSVUUoRGF0ZVRpbWVUb1NlY29uZHMoc3RhcnQsICZzdGFydF90aW1lKSk7
Ci0gIEFTU0VSVF9UUlVFKERhdGVUaW1lVG9TZWNvbmRzKGVuZCwgJmVuZF90aW1lKSk7Ci0gIEVY
UEVDVF9FUSgzMTU1Mzc4OTc1OTlMTCwgZW5kX3RpbWUgLSBzdGFydF90aW1lKTsKLSAgQVNTRVJU
X1RSVUUoU2Vjb25kc1RvRGF0ZVRpbWUoc3RhcnRfdGltZSwgJnRpbWUpKTsKLSAgQVNTRVJUX1RS
VUUoRGF0ZVRpbWVUb1NlY29uZHModGltZSwgJnNlY29uZHMpKTsKLSAgRVhQRUNUX0VRKHN0YXJ0
X3RpbWUsIHNlY29uZHMpOwotICBBU1NFUlRfVFJVRShTZWNvbmRzVG9EYXRlVGltZShlbmRfdGlt
ZSwgJnRpbWUpKTsKLSAgQVNTRVJUX1RSVUUoRGF0ZVRpbWVUb1NlY29uZHModGltZSwgJnNlY29u
ZHMpKTsKLSAgRVhQRUNUX0VRKGVuZF90aW1lLCBzZWNvbmRzKTsKLX0KLQotVEVTVChEYXRlVGlt
ZVRlc3QsIERheUluTW9udGhzKSB7Ci0gIC8vIENoZWNrIHRoYXQgbW9udGggYm91bmRhcmllcyBh
cmUgaGFuZGxlZCBjb3JyZWN0bHkuCi0gIEVYUEVDVF9FUShrU2Vjb25kc1BlckRheSwKLSAgICAg
ICAgICAgIENyZWF0ZVRpbWVzdGFtcCgyMDE1LCAxLCAxKSAtIENyZWF0ZVRpbWVzdGFtcCgyMDE0
LCAxMiwgMzEpKTsKLSAgRVhQRUNUX0VRKGtTZWNvbmRzUGVyRGF5LAotICAgICAgICAgICAgQ3Jl
YXRlVGltZXN0YW1wKDIwMTUsIDIsIDEpIC0gQ3JlYXRlVGltZXN0YW1wKDIwMTUsIDEsIDMxKSk7
Ci0gIEVYUEVDVF9FUShrU2Vjb25kc1BlckRheSwKLSAgICAgICAgICAgIENyZWF0ZVRpbWVzdGFt
cCgyMDE1LCAzLCAxKSAtIENyZWF0ZVRpbWVzdGFtcCgyMDE1LCAyLCAyOCkpOwotICBFWFBFQ1Rf
RVEoa1NlY29uZHNQZXJEYXksCi0gICAgICAgICAgICBDcmVhdGVUaW1lc3RhbXAoMjAxNSwgNCwg
MSkgLSBDcmVhdGVUaW1lc3RhbXAoMjAxNSwgMywgMzEpKTsKLSAgRVhQRUNUX0VRKGtTZWNvbmRz
UGVyRGF5LAotICAgICAgICAgICAgQ3JlYXRlVGltZXN0YW1wKDIwMTUsIDUsIDEpIC0gQ3JlYXRl
VGltZXN0YW1wKDIwMTUsIDQsIDMwKSk7Ci0gIEVYUEVDVF9FUShrU2Vjb25kc1BlckRheSwKLSAg
ICAgICAgICAgIENyZWF0ZVRpbWVzdGFtcCgyMDE1LCA2LCAxKSAtIENyZWF0ZVRpbWVzdGFtcCgy
MDE1LCA1LCAzMSkpOwotICBFWFBFQ1RfRVEoa1NlY29uZHNQZXJEYXksCi0gICAgICAgICAgICBD
cmVhdGVUaW1lc3RhbXAoMjAxNSwgNywgMSkgLSBDcmVhdGVUaW1lc3RhbXAoMjAxNSwgNiwgMzAp
KTsKLSAgRVhQRUNUX0VRKGtTZWNvbmRzUGVyRGF5LAotICAgICAgICAgICAgQ3JlYXRlVGltZXN0
YW1wKDIwMTUsIDgsIDEpIC0gQ3JlYXRlVGltZXN0YW1wKDIwMTUsIDcsIDMxKSk7Ci0gIEVYUEVD
VF9FUShrU2Vjb25kc1BlckRheSwKLSAgICAgICAgICAgIENyZWF0ZVRpbWVzdGFtcCgyMDE1LCA5
LCAxKSAtIENyZWF0ZVRpbWVzdGFtcCgyMDE1LCA4LCAzMSkpOwotICBFWFBFQ1RfRVEoa1NlY29u
ZHNQZXJEYXksCi0gICAgICAgICAgICBDcmVhdGVUaW1lc3RhbXAoMjAxNSwgMTAsIDEpIC0gQ3Jl
YXRlVGltZXN0YW1wKDIwMTUsIDksIDMwKSk7Ci0gIEVYUEVDVF9FUShrU2Vjb25kc1BlckRheSwK
LSAgICAgICAgICAgIENyZWF0ZVRpbWVzdGFtcCgyMDE1LCAxMSwgMSkgLSBDcmVhdGVUaW1lc3Rh
bXAoMjAxNSwgMTAsIDMxKSk7Ci0gIEVYUEVDVF9FUShrU2Vjb25kc1BlckRheSwKLSAgICAgICAg
ICAgIENyZWF0ZVRpbWVzdGFtcCgyMDE1LCAxMiwgMSkgLSBDcmVhdGVUaW1lc3RhbXAoMjAxNSwg
MTEsIDMwKSk7Ci0gIEVYUEVDVF9FUShrU2Vjb25kc1BlckRheSwKLSAgICAgICAgICAgIENyZWF0
ZVRpbWVzdGFtcCgyMDE2LCAxLCAxKSAtIENyZWF0ZVRpbWVzdGFtcCgyMDE1LCAxMiwgMzEpKTsK
LX0KLQotVEVTVChEYXRlVGltZVRlc3QsIExlYXBZZWFyKSB7Ci0gIC8vIE5vbi1sZWFwIHllYXIu
Ci0gIEVYUEVDVF9FUShrU2Vjb25kc1BlckRheSwKLSAgICAgICAgICAgIENyZWF0ZVRpbWVzdGFt
cCgyMDE1LCAzLCAxKSAtIENyZWF0ZVRpbWVzdGFtcCgyMDE1LCAyLCAyOCkpOwotICAvLyBMZWFw
IHllYXIuCi0gIEVYUEVDVF9FUShrU2Vjb25kc1BlckRheSwKLSAgICAgICAgICAgIENyZWF0ZVRp
bWVzdGFtcCgyMDE2LCAzLCAxKSAtIENyZWF0ZVRpbWVzdGFtcCgyMDE2LCAyLCAyOSkpOwotICAv
LyBOb24tbGVhcCB5ZWFyLgotICBFWFBFQ1RfRVEoa1NlY29uZHNQZXJEYXksCi0gICAgICAgICAg
ICBDcmVhdGVUaW1lc3RhbXAoMjEwMCwgMywgMSkgLSBDcmVhdGVUaW1lc3RhbXAoMjEwMCwgMiwg
MjgpKTsKLSAgLy8gTGVhcCB5ZWFyLgotICBFWFBFQ1RfRVEoa1NlY29uZHNQZXJEYXksCi0gICAg
ICAgICAgICBDcmVhdGVUaW1lc3RhbXAoMjQwMCwgMywgMSkgLSBDcmVhdGVUaW1lc3RhbXAoMjQw
MCwgMiwgMjkpKTsKLX0KLQotVEVTVChEYXRlVGltZVRlc3QsIFN0cmluZ0Zvcm1hdCkgewotICBE
YXRlVGltZSBzdGFydCwgZW5kOwotICBzdGFydC55ZWFyID0gMTsKLSAgc3RhcnQubW9udGggPSAx
OwotICBzdGFydC5kYXkgPSAxOwotICBzdGFydC5ob3VyID0gMDsKLSAgc3RhcnQubWludXRlID0g
MDsKLSAgc3RhcnQuc2Vjb25kID0gMDsKLSAgZW5kLnllYXIgPSA5OTk5OwotICBlbmQubW9udGgg
PSAxMjsKLSAgZW5kLmRheSA9IDMxOwotICBlbmQuaG91ciA9IDIzOwotICBlbmQubWludXRlID0g
NTk7Ci0gIGVuZC5zZWNvbmQgPSA1OTsKLSAgaW50NjQgc3RhcnRfdGltZSwgZW5kX3RpbWU7Ci0g
IEFTU0VSVF9UUlVFKERhdGVUaW1lVG9TZWNvbmRzKHN0YXJ0LCAmc3RhcnRfdGltZSkpOwotICBB
U1NFUlRfVFJVRShEYXRlVGltZVRvU2Vjb25kcyhlbmQsICZlbmRfdGltZSkpOwotCi0gIEVYUEVD
VF9FUSgiMDAwMS0wMS0wMVQwMDowMDowMFoiLCBGb3JtYXRUaW1lKHN0YXJ0X3RpbWUsIDApKTsK
LSAgRVhQRUNUX0VRKCI5OTk5LTEyLTMxVDIzOjU5OjU5WiIsIEZvcm1hdFRpbWUoZW5kX3RpbWUs
IDApKTsKLQotICAvLyBNYWtlIHN1cmUgdGhlIG5hbm9zZWNvbmRzIHBhcnQgaXMgZm9ybWF0ZWQg
Y29ycmVjdGx5LgotICBFWFBFQ1RfRVEoIjE5NzAtMDEtMDFUMDA6MDA6MDAuMDEwWiIsIEZvcm1h
dFRpbWUoMCwgMTAwMDAwMDApKTsKLSAgRVhQRUNUX0VRKCIxOTcwLTAxLTAxVDAwOjAwOjAwLjAw
MDAxMFoiLCBGb3JtYXRUaW1lKDAsIDEwMDAwKSk7Ci0gIEVYUEVDVF9FUSgiMTk3MC0wMS0wMVQw
MDowMDowMC4wMDAwMDAwMTBaIiwgRm9ybWF0VGltZSgwLCAxMCkpOwotfQotCi1URVNUKERhdGVU
aW1lVGVzdCwgUGFyc2VTdHJpbmcpIHsKLSAgaW50NjQgc2Vjb25kczsKLSAgaW50MzIgbmFub3M7
Ci0gIEFTU0VSVF9UUlVFKFBhcnNlVGltZSgiMDAwMS0wMS0wMVQwMDowMDowMFoiLCAmc2Vjb25k
cywgJm5hbm9zKSk7Ci0gIEVYUEVDVF9FUSgiMDAwMS0wMS0wMVQwMDowMDowMFoiLCBGb3JtYXRU
aW1lKHNlY29uZHMsIG5hbm9zKSk7Ci0gIEFTU0VSVF9UUlVFKFBhcnNlVGltZSgiOTk5OS0xMi0z
MVQyMzo1OTo1OS45OTk5OTk5OTlaIiwgJnNlY29uZHMsICZuYW5vcykpOwotICBFWFBFQ1RfRVEo
Ijk5OTktMTItMzFUMjM6NTk6NTkuOTk5OTk5OTk5WiIsIEZvcm1hdFRpbWUoc2Vjb25kcywgbmFu
b3MpKTsKLQotICAvLyBUZXN0IHRpbWUgem9uZSBvZmZzZXRzLgotICBBU1NFUlRfVFJVRShQYXJz
ZVRpbWUoIjE5NzAtMDEtMDFUMDA6MDA6MDAtMDg6MDAiLCAmc2Vjb25kcywgJm5hbm9zKSk7Ci0g
IEVYUEVDVF9FUSgiMTk3MC0wMS0wMVQwODowMDowMFoiLCBGb3JtYXRUaW1lKHNlY29uZHMsIG5h
bm9zKSk7Ci0gIEFTU0VSVF9UUlVFKFBhcnNlVGltZSgiMTk3MC0wMS0wMVQwMDowMDowMCswODow
MCIsICZzZWNvbmRzLCAmbmFub3MpKTsKLSAgRVhQRUNUX0VRKCIxOTY5LTEyLTMxVDE2OjAwOjAw
WiIsIEZvcm1hdFRpbWUoc2Vjb25kcywgbmFub3MpKTsKLQotICAvLyBUZXN0IG5hbm9zZWNvbmRz
LgotICBBU1NFUlRfVFJVRShQYXJzZVRpbWUoIjE5NzAtMDEtMDFUMDA6MDA6MDAuMDFaIiwgJnNl
Y29uZHMsICZuYW5vcykpOwotICBFWFBFQ1RfRVEoIjE5NzAtMDEtMDFUMDA6MDA6MDAuMDEwWiIs
IEZvcm1hdFRpbWUoc2Vjb25kcywgbmFub3MpKTsKLSAgQVNTRVJUX1RSVUUoUGFyc2VUaW1lKCIx
OTcwLTAxLTAxVDAwOjAwOjAwLjAwMDAxLTA4OjAwIiwgJnNlY29uZHMsICZuYW5vcykpOwotICBF
WFBFQ1RfRVEoIjE5NzAtMDEtMDFUMDg6MDA6MDAuMDAwMDEwWiIsIEZvcm1hdFRpbWUoc2Vjb25k
cywgbmFub3MpKTsKLSAgQVNTRVJUX1RSVUUoUGFyc2VUaW1lKCIxOTcwLTAxLTAxVDAwOjAwOjAw
LjAwMDAwMDAxKzA4OjAwIiwgJnNlY29uZHMsICZuYW5vcykpOwotICBFWFBFQ1RfRVEoIjE5Njkt
MTItMzFUMTY6MDA6MDAuMDAwMDAwMDEwWiIsIEZvcm1hdFRpbWUoc2Vjb25kcywgbmFub3MpKTsK
LSAgLy8gRnJhY3Rpb25hbCBwYXJ0cyBsZXNzIHRoYW4gMSBuYW5vc2Vjb25kIHdpbGwgYmUgaWdu
b3JlZC4KLSAgQVNTRVJUX1RSVUUoUGFyc2VUaW1lKCIxOTcwLTAxLTAxVDAwOjAwOjAwLjAxMjM0
NTY3ODlaIiwgJnNlY29uZHMsICZuYW5vcykpOwotICBFWFBFQ1RfRVEoIjE5NzAtMDEtMDFUMDA6
MDA6MDAuMDEyMzQ1Njc4WiIsIEZvcm1hdFRpbWUoc2Vjb25kcywgbmFub3MpKTsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBw
cm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3N0dWJzL3R5cGVfdHJhaXRzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvdHlw
ZV90cmFpdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ4MTI3ZTUwNGQ0YjE2
YjE0NmRiNDk5ZmFhM2M5NmYxNjg2ZmI3NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvdHlwZV90cmFpdHMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMDYsIEdv
b2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyAtLS0tCi0vLyBBdXRob3I6IE1hdHQgQXVzdGVy
bgotLy8KLS8vIFRoaXMgY29kZSBpcyBjb21waWxlZCBkaXJlY3RseSBvbiBtYW55IHBsYXRmb3Jt
cywgaW5jbHVkaW5nIGNsaWVudAotLy8gcGxhdGZvcm1zIGxpa2UgV2luZG93cywgTWFjLCBhbmQg
ZW1iZWRkZWQgc3lzdGVtcy4gIEJlZm9yZSBtYWtpbmcKLS8vIGFueSBjaGFuZ2VzIGhlcmUsIG1h
a2Ugc3VyZSB0aGF0IHlvdSdyZSBub3QgYnJlYWtpbmcgYW55IHBsYXRmb3Jtcy4KLS8vCi0vLyBE
ZWZpbmUgYSBzbWFsbCBzdWJzZXQgb2YgdHIxIHR5cGUgdHJhaXRzLiBUaGUgdHJhaXRzIHdlIGRl
ZmluZSBhcmU6Ci0vLyAgIGVuYWJsZV9pZgotLy8gICBpc19pbnRlZ3JhbAotLy8gICBpc19mbG9h
dGluZ19wb2ludAotLy8gICBpc19wb2ludGVyCi0vLyAgIGlzX2VudW0KLS8vICAgaXNfcmVmZXJl
bmNlCi0vLyAgIGlzX3BvZAotLy8gICBoYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcgotLy8gICBoYXNf
dHJpdmlhbF9jb3B5Ci0vLyAgIGhhc190cml2aWFsX2Fzc2lnbgotLy8gICBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yCi0vLyAgIHJlbW92ZV9jb25zdAotLy8gICByZW1vdmVfdm9sYXRpbGUKLS8vICAg
cmVtb3ZlX2N2Ci0vLyAgIHJlbW92ZV9yZWZlcmVuY2UKLS8vICAgYWRkX3JlZmVyZW5jZQotLy8g
ICByZW1vdmVfcG9pbnRlcgotLy8gICBpc19zYW1lCi0vLyAgIGlzX2NvbnZlcnRpYmxlCi0vLyBX
ZSBjYW4gYWRkIG1vcmUgdHlwZSB0cmFpdHMgYXMgcmVxdWlyZWQuCi0KLSNpZm5kZWYgR09PR0xF
X1BST1RPQlVGX1RZUEVfVFJBSVRTX0hfCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9UWVBFX1RS
QUlUU19IXwotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4gICAgICAgICAgICAgICAgICAvLyBmb3IgTlVM
TAotI2luY2x1ZGUgPHV0aWxpdHk+ICAgICAgICAgICAgICAgICAgLy8gRm9yIHBhaXIKLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy90ZW1wbGF0ZV91dGlsLmg+ICAvLyBGb3IgdHJ1
ZV90eXBlIGFuZCBmYWxzZV90eXBlCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEIsIHR5
cGVuYW1lIEQ+Ci1zdHJ1Y3QgaXNfYmFzZV9vZiB7Ci0gIHR5cGVkZWYgY2hhciAoJnllcylbMV07
Ci0gIHR5cGVkZWYgY2hhciAoJm5vKVsyXTsKLQotICAvLyBCRUdJTiBHT09HTEUgTE9DQUwgTU9E
SUZJQ0FUSU9OIC0tIGNoZWNrIGlzIGEgI2RlZmluZSBvbiBNYWMuCi0gICN1bmRlZiBjaGVjawot
ICAvLyBFTkQgR09PR0xFIExPQ0FMIE1PRElGSUNBVElPTgotCi0gIHN0YXRpYyB5ZXMgY2hlY2so
Y29uc3QgQiopOwotICBzdGF0aWMgbm8gY2hlY2soY29uc3Qgdm9pZCopOwotCi0gIGVudW0gewot
ICAgIHZhbHVlID0gc2l6ZW9mKGNoZWNrKHN0YXRpY19jYXN0PGNvbnN0IEQqPihOVUxMKSkpID09
IHNpemVvZih5ZXMpLAotICB9OwotfTsKLQotdGVtcGxhdGUgPGJvb2wgY29uZCwgY2xhc3MgVCA9
IHZvaWQ+IHN0cnVjdCBlbmFibGVfaWY7Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2lu
dGVncmFsOwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19mbG9hdGluZ19wb2ludDsKLXRl
bXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfcG9pbnRlcjsKLS8vIE1TVkMgY2FuJ3QgY29tcGls
ZSB0aGlzIGNvcnJlY3RseSwgYW5kIG5laXRoZXIgY2FuIGdjYyAzLjMuNSAoYXQgbGVhc3QpCi0j
aWYgIWRlZmluZWQoX01TQ19WRVIpICYmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18g
PD0gMykKLS8vIGlzX2VudW0gdXNlcyBpc19jb252ZXJ0aWJsZSwgd2hpY2ggaXMgbm90IGF2YWls
YWJsZSBvbiBNU1ZDLgotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19lbnVtOwotI2VuZGlm
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX3JlZmVyZW5jZTsKLXRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgaXNfcG9kOwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfdHJpdmlh
bF9jb25zdHJ1Y3RvcjsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfY29w
eTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfYXNzaWduOwotdGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwotdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCByZW1vdmVfY29uc3Q7Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJl
bW92ZV92b2xhdGlsZTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgcmVtb3ZlX2N2OwotdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlOwotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBhZGRfcmVmZXJlbmNlOwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1v
dmVfcG9pbnRlcjsKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPiBzdHJ1Y3QgaXNfc2FtZTsK
LSNpZiAhKGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fIDw9IDMpCi10ZW1wbGF0ZSA8Y2xh
c3MgRnJvbSwgY2xhc3MgVG8+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTsKLSNlbmRpZgotCi0vLyBl
bmFibGVfaWYsIGVxdWl2YWxlbnQgc2VtYW50aWNzIHRvIGMrKzExIHN0ZDo6ZW5hYmxlX2lmLCBz
cGVjaWZpY2FsbHk6Ci0vLyAgICJJZiBCIGlzIHRydWUsIHRoZSBtZW1iZXIgdHlwZWRlZiB0eXBl
IHNoYWxsIGVxdWFsIFQ7IG90aGVyd2lzZSwgdGhlcmUKLS8vICAgIHNoYWxsIGJlIG5vIG1lbWJl
ciB0eXBlZGVmIHR5cGUuIgotLy8gU3BlY2lmaWVkIGJ5IDIwLjkuNy42IFtPdGhlciB0cmFuc2Zv
cm1hdGlvbnNdCi0KLXRlbXBsYXRlPGJvb2wgY29uZCwgY2xhc3MgVD4gc3RydWN0IGVuYWJsZV9p
ZiB7IHR5cGVkZWYgVCB0eXBlOyB9OwotdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IGVuYWJsZV9p
ZjxmYWxzZSwgVD4ge307Ci0vLyBpc19pbnRlZ3JhbCBpcyBmYWxzZSBleGNlcHQgZm9yIHRoZSBi
dWlsdC1pbiBpbnRlZ2VyIHR5cGVzLiBBCi0vLyBjdi1xdWFsaWZpZWQgdHlwZSBpcyBpbnRlZ3Jh
bCBpZiBhbmQgb25seSBpZiB0aGUgdW5kZXJseWluZyB0eXBlIGlzLgotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBpc19pbnRlZ3JhbCA6IGZhbHNlX3R5cGUgeyB9OwotdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfaW50ZWdyYWw8Ym9vbD4gOiB0cnVlX3R5cGUgeyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3Qg
aXNfaW50ZWdyYWw8Y2hhcj4gOiB0cnVlX3R5cGUgeyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8dW5zaWduZWQgY2hhcj4gOiB0cnVlX3R5cGUgeyB9OwotdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfaW50ZWdyYWw8c2lnbmVkIGNoYXI+IDogdHJ1ZV90eXBlIHsgfTsKLSNpZiBkZWZpbmVk
KF9NU0NfVkVSKQotLy8gd2NoYXJfdCBpcyBub3QgYnkgZGVmYXVsdCBhIGRpc3RpbmN0IHR5cGUg
ZnJvbSB1bnNpZ25lZCBzaG9ydCBpbgotLy8gTWljcm9zb2Z0IEMuCi0vLyBTZWUgaHR0cDovL21z
ZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kaDhjaGU3cyhWUy44MCkuYXNweAotdGVt
cGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8X193Y2hhcl90PiA6IHRydWVfdHlwZSB7IH07Ci0j
ZWxzZQotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8d2NoYXJfdD4gOiB0cnVlX3R5cGUg
eyB9OwotI2VuZGlmCi10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxzaG9ydD4gOiB0cnVl
X3R5cGUgeyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgc2hvcnQ+
IDogdHJ1ZV90eXBlIHsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPGludD4gOiB0
cnVlX3R5cGUgeyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgaW50
PiA6IHRydWVfdHlwZSB7IH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxsb25nPiA6
IHRydWVfdHlwZSB7IH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDx1bnNpZ25lZCBs
b25nPiA6IHRydWVfdHlwZSB7IH07Ci0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLXRlbXBsYXRlPD4g
c3RydWN0IGlzX2ludGVncmFsPGxvbmcgbG9uZz4gOiB0cnVlX3R5cGUgeyB9OwotdGVtcGxhdGU8
PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgbG9uZyBsb25nPiA6IHRydWVfdHlwZSB7IH07
Ci0jZW5kaWYKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Y29uc3QgVD4g
OiBpc19pbnRlZ3JhbDxUPiB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2ludGVn
cmFsPHZvbGF0aWxlIFQ+IDogaXNfaW50ZWdyYWw8VD4geyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCBpc19pbnRlZ3JhbDxjb25zdCB2b2xhdGlsZSBUPiA6IGlzX2ludGVncmFsPFQ+IHsg
fTsKLQotLy8gaXNfZmxvYXRpbmdfcG9pbnQgaXMgZmFsc2UgZXhjZXB0IGZvciB0aGUgYnVpbHQt
aW4gZmxvYXRpbmctcG9pbnQgdHlwZXMuCi0vLyBBIGN2LXF1YWxpZmllZCB0eXBlIGlzIGludGVn
cmFsIGlmIGFuZCBvbmx5IGlmIHRoZSB1bmRlcmx5aW5nIHR5cGUgaXMuCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gc3RydWN0IGlzX2Zsb2F0aW5nX3BvaW50IDogZmFsc2VfdHlwZSB7IH07Ci10ZW1wbGF0
ZTw+IHN0cnVjdCBpc19mbG9hdGluZ19wb2ludDxmbG9hdD4gOiB0cnVlX3R5cGUgeyB9OwotdGVt
cGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXRpbmdfcG9pbnQ8ZG91YmxlPiA6IHRydWVfdHlwZSB7IH07
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdGluZ19wb2ludDxsb25nIGRvdWJsZT4gOiB0cnVl
X3R5cGUgeyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19mbG9hdGluZ19wb2ludDxj
b25zdCBUPgotICAgIDogaXNfZmxvYXRpbmdfcG9pbnQ8VD4geyB9OwotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBpc19mbG9hdGluZ19wb2ludDx2b2xhdGlsZSBUPgotICAgIDogaXNfZmxvYXRp
bmdfcG9pbnQ8VD4geyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19mbG9hdGluZ19w
b2ludDxjb25zdCB2b2xhdGlsZSBUPgotICAgIDogaXNfZmxvYXRpbmdfcG9pbnQ8VD4geyB9Owot
Ci0vLyBpc19wb2ludGVyIGlzIGZhbHNlIGV4Y2VwdCBmb3IgcG9pbnRlciB0eXBlcy4gQSBjdi1x
dWFsaWZpZWQgdHlwZSAoZS5nLgotLy8gImludCogY29uc3QiLCBhcyBvcHBvc2VkIHRvICJpbnQg
Y29uc3QqIikgaXMgY3YtcXVhbGlmaWVkIGlmIGFuZCBvbmx5IGlmCi0vLyB0aGUgdW5kZXJseWlu
ZyB0eXBlIGlzLgotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19wb2ludGVyIDogZmFsc2Vf
dHlwZSB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX3BvaW50ZXI8VCo+IDogdHJ1
ZV90eXBlIHsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfcG9pbnRlcjxjb25zdCBU
PiA6IGlzX3BvaW50ZXI8VD4geyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19wb2lu
dGVyPHZvbGF0aWxlIFQ+IDogaXNfcG9pbnRlcjxUPiB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4g
c3RydWN0IGlzX3BvaW50ZXI8Y29uc3Qgdm9sYXRpbGUgVD4gOiBpc19wb2ludGVyPFQ+IHsgfTsK
LQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSAmJiAhKGRlZmluZWQoX19HTlVDX18pICYmIF9fR05V
Q19fIDw9IDMpCi0KLW5hbWVzcGFjZSB0eXBlX3RyYWl0c19pbnRlcm5hbCB7Ci0KLXRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgaXNfY2xhc3Nfb3JfdW5pb24gewotICB0ZW1wbGF0ZSA8Y2xhc3Mg
VT4gc3RhdGljIHNtYWxsXyB0ZXN0ZXIodm9pZCAoVTo6KikoKSk7Ci0gIHRlbXBsYXRlIDxjbGFz
cyBVPiBzdGF0aWMgYmlnXyB0ZXN0ZXIoLi4uKTsKLSAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSBzaXplb2YodGVzdGVyPFQ+KDApKSA9PSBzaXplb2Yoc21hbGxfKTsKLX07Ci0KLS8vIGlzX2Nv
bnZlcnRpYmxlIGNob2tlcyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXkuIFRoYXQn
cyB3aHkKLS8vIHdlIHVzZSBhZGRfcmVmZXJlbmNlIGhlcmUuCi10ZW1wbGF0ZSA8Ym9vbCBOb3RV
bnVtLCBjbGFzcyBUPiBzdHJ1Y3QgaXNfZW51bV9pbXBsCi0gICAgOiBpc19jb252ZXJ0aWJsZTx0
eXBlbmFtZSBhZGRfcmVmZXJlbmNlPFQ+Ojp0eXBlLCBpbnQ+IHsgfTsKLQotdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBpc19lbnVtX2ltcGw8dHJ1ZSwgVD4gOiBmYWxzZV90eXBlIHsgfTsKLQot
fSAgLy8gbmFtZXNwYWNlIHR5cGVfdHJhaXRzX2ludGVybmFsCi0KLS8vIFNwZWNpZmllZCBieSBU
UjEgWzQuNS4xXSBwcmltYXJ5IHR5cGUgY2F0ZWdvcmllcy4KLQotLy8gSW1wbGVtZW50YXRpb24g
bm90ZToKLS8vCi0vLyBFYWNoIHR5cGUgaXMgZWl0aGVyIHZvaWQsIGludGVncmFsLCBmbG9hdGlu
ZyBwb2ludCwgYXJyYXksIHBvaW50ZXIsCi0vLyByZWZlcmVuY2UsIG1lbWJlciBvYmplY3QgcG9p
bnRlciwgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXIsIGVudW0sCi0vLyB1bmlvbiBvciBjbGFzcy4g
T3V0IG9mIHRoZXNlLCBvbmx5IGludGVncmFsLCBmbG9hdGluZyBwb2ludCwgcmVmZXJlbmNlLAot
Ly8gY2xhc3MgYW5kIGVudW0gdHlwZXMgYXJlIHBvdGVudGlhbGx5IGNvbnZlcnRpYmxlIHRvIGlu
dC4gVGhlcmVmb3JlLAotLy8gaWYgYSB0eXBlIGlzIG5vdCBhIHJlZmVyZW5jZSwgaW50ZWdyYWws
IGZsb2F0aW5nIHBvaW50IG9yIGNsYXNzIGFuZAotLy8gaXMgY29udmVydGlibGUgdG8gaW50LCBp
dCdzIGEgZW51bS4gQWRkaW5nIGN2LXF1YWxpZmljYXRpb24gdG8gYSB0eXBlCi0vLyBkb2VzIG5v
dCBjaGFuZ2Ugd2hldGhlciBpdCdzIGFuIGVudW0uCi0vLwotLy8gSXMtY29udmVydGlibGUtdG8t
aW50IGNoZWNrIGlzIGRvbmUgb25seSBpZiBhbGwgb3RoZXIgY2hlY2tzIHBhc3MsCi0vLyBiZWNh
dXNlIGl0IGNhbid0IGJlIHVzZWQgd2l0aCBzb21lIHR5cGVzIChlLmcuIHZvaWQgb3IgY2xhc3Nl
cyB3aXRoCi0vLyBpbmFjY2Vzc2libGUgY29udmVyc2lvbiBvcGVyYXRvcnMpLgotdGVtcGxhdGUg
PGNsYXNzIFQ+IHN0cnVjdCBpc19lbnVtCi0gICAgOiB0eXBlX3RyYWl0c19pbnRlcm5hbDo6aXNf
ZW51bV9pbXBsPAotICAgICAgICAgIGlzX3NhbWU8VCwgdm9pZD46OnZhbHVlIHx8Ci0gICAgICAg
ICAgICAgIGlzX2ludGVncmFsPFQ+Ojp2YWx1ZSB8fAotICAgICAgICAgICAgICBpc19mbG9hdGlu
Z19wb2ludDxUPjo6dmFsdWUgfHwKLSAgICAgICAgICAgICAgaXNfcmVmZXJlbmNlPFQ+Ojp2YWx1
ZSB8fAotICAgICAgICAgICAgICB0eXBlX3RyYWl0c19pbnRlcm5hbDo6aXNfY2xhc3Nfb3JfdW5p
b248VD46OnZhbHVlLAotICAgICAgICAgIFQ+IHsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0
cnVjdCBpc19lbnVtPGNvbnN0IFQ+IDogaXNfZW51bTxUPiB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IGlzX2VudW08dm9sYXRpbGUgVD4gOiBpc19lbnVtPFQ+IHsgfTsKLXRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgaXNfZW51bTxjb25zdCB2b2xhdGlsZSBUPiA6IGlzX2VudW08VD4g
eyB9OwotCi0jZW5kaWYKLQotLy8gaXNfcmVmZXJlbmNlIGlzIGZhbHNlIGV4Y2VwdCBmb3IgcmVm
ZXJlbmNlIHR5cGVzLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IGlzX3JlZmVyZW5jZSA6
IGZhbHNlX3R5cGUge307Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgaXNfcmVmZXJlbmNl
PFQmPiA6IHRydWVfdHlwZSB7fTsKLQotCi0vLyBXZSBjYW4ndCBnZXQgaXNfcG9kIHJpZ2h0IHdp
dGhvdXQgY29tcGlsZXIgaGVscCwgc28gZmFpbCBjb25zZXJ2YXRpdmVseS4KLS8vIFdlIHdpbGwg
YXNzdW1lIGl0J3MgZmFsc2UgZXhjZXB0IGZvciBhcml0aG1ldGljIHR5cGVzLCBlbnVtZXJhdGlv
bnMsCi0vLyBwb2ludGVycyBhbmQgY3YtcXVhbGlmaWVkIHZlcnNpb25zIHRoZXJlb2YuIE5vdGUg
dGhhdCBzdGQ6OnBhaXI8VCxVPgotLy8gaXMgbm90IGEgUE9EIGV2ZW4gaWYgVCBhbmQgVSBhcmUg
UE9Ecy4KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfcG9kCi0gOiBpbnRlZ3JhbF9jb25z
dGFudDxib29sLCAoaXNfaW50ZWdyYWw8VD46OnZhbHVlIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlIHx8Ci0jaWYgIWRlZmluZWQoX01T
Q19WRVIpICYmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPD0gMykKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBpc19lbnVtIGlzIG5vdCBhdmFpbGFibGUgb24gTVNWQy4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19lbnVtPFQ+Ojp2YWx1ZSB8fAotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcG9pbnRlcjxUPjo6dmFsdWUpPiB7IH07
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX3BvZDxjb25zdCBUPiA6IGlzX3BvZDxUPiB7
IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX3BvZDx2b2xhdGlsZSBUPiA6IGlzX3Bv
ZDxUPiB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX3BvZDxjb25zdCB2b2xhdGls
ZSBUPiA6IGlzX3BvZDxUPiB7IH07Ci0KLQotLy8gV2UgY2FuJ3QgZ2V0IGhhc190cml2aWFsX2Nv
bnN0cnVjdG9yIHJpZ2h0IHdpdGhvdXQgY29tcGlsZXIgaGVscCwgc28KLS8vIGZhaWwgY29uc2Vy
dmF0aXZlbHkuIFdlIHdpbGwgYXNzdW1lIGl0J3MgZmFsc2UgZXhjZXB0IGZvcjogKDEpIHR5cGVz
Ci0vLyBmb3Igd2hpY2ggaXNfcG9kIGlzIHRydWUuICgyKSBzdGQ6OnBhaXIgb2YgdHlwZXMgd2l0
aCB0cml2aWFsCi0vLyBjb25zdHJ1Y3RvcnMuICgzKSBhcnJheSBvZiBhIHR5cGUgd2l0aCBhIHRy
aXZpYWwgY29uc3RydWN0b3IuCi0vLyAoNCkgY29uc3QgdmVyc2lvbnMgdGhlcmVvZi4KLXRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfY29uc3RydWN0b3IgOiBpc19wb2Q8VD4g
eyB9OwotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IHN0cnVjdCBoYXNfdHJpdmlhbF9jb25z
dHJ1Y3RvcjxzdGQ6OnBhaXI8VCwgVT4gPgotICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsCi0g
ICAgICAgICAgICAgICAgICAgICAgKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPFQ+Ojp2YWx1ZSAm
JgotICAgICAgICAgICAgICAgICAgICAgICBoYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcjxVPjo6dmFs
dWUpPiB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgQSwgaW50IE4+IHN0cnVjdCBoYXNfdHJpdmlhbF9j
b25zdHJ1Y3RvcjxBW05dPgotICA6IGhhc190cml2aWFsX2NvbnN0cnVjdG9yPEE+IHsgfTsKLXRl
bXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfY29uc3RydWN0b3I8Y29uc3QgVD4K
LSAgOiBoYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcjxUPiB7IH07Ci0KLS8vIFdlIGNhbid0IGdldCBo
YXNfdHJpdmlhbF9jb3B5IHJpZ2h0IHdpdGhvdXQgY29tcGlsZXIgaGVscCwgc28gZmFpbAotLy8g
Y29uc2VydmF0aXZlbHkuIFdlIHdpbGwgYXNzdW1lIGl0J3MgZmFsc2UgZXhjZXB0IGZvcjogKDEp
IHR5cGVzCi0vLyBmb3Igd2hpY2ggaXNfcG9kIGlzIHRydWUuICgyKSBzdGQ6OnBhaXIgb2YgdHlw
ZXMgd2l0aCB0cml2aWFsIGNvcHkKLS8vIGNvbnN0cnVjdG9ycy4gKDMpIGFycmF5IG9mIGEgdHlw
ZSB3aXRoIGEgdHJpdmlhbCBjb3B5IGNvbnN0cnVjdG9yLgotLy8gKDQpIGNvbnN0IHZlcnNpb25z
IHRoZXJlb2YuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGhhc190cml2aWFsX2NvcHkgOiBp
c19wb2Q8VD4geyB9OwotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IHN0cnVjdCBoYXNfdHJp
dmlhbF9jb3B5PHN0ZDo6cGFpcjxULCBVPiA+Ci0gIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwK
LSAgICAgICAgICAgICAgICAgICAgICAoaGFzX3RyaXZpYWxfY29weTxUPjo6dmFsdWUgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgaGFzX3RyaXZpYWxfY29weTxVPjo6dmFsdWUpPiB7IH07Ci10
ZW1wbGF0ZSA8Y2xhc3MgQSwgaW50IE4+IHN0cnVjdCBoYXNfdHJpdmlhbF9jb3B5PEFbTl0+Ci0g
IDogaGFzX3RyaXZpYWxfY29weTxBPiB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGhh
c190cml2aWFsX2NvcHk8Y29uc3QgVD4gOiBoYXNfdHJpdmlhbF9jb3B5PFQ+IHsgfTsKLQotLy8g
V2UgY2FuJ3QgZ2V0IGhhc190cml2aWFsX2Fzc2lnbiByaWdodCB3aXRob3V0IGNvbXBpbGVyIGhl
bHAsIHNvIGZhaWwKLS8vIGNvbnNlcnZhdGl2ZWx5LiBXZSB3aWxsIGFzc3VtZSBpdCdzIGZhbHNl
IGV4Y2VwdCBmb3I6ICgxKSB0eXBlcwotLy8gZm9yIHdoaWNoIGlzX3BvZCBpcyB0cnVlLiAoMikg
c3RkOjpwYWlyIG9mIHR5cGVzIHdpdGggdHJpdmlhbCBjb3B5Ci0vLyBjb25zdHJ1Y3RvcnMuICgz
KSBhcnJheSBvZiBhIHR5cGUgd2l0aCBhIHRyaXZpYWwgYXNzaWduIGNvbnN0cnVjdG9yLgotdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfdHJpdmlhbF9hc3NpZ24gOiBpc19wb2Q8VD4geyB9
OwotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IHN0cnVjdCBoYXNfdHJpdmlhbF9hc3NpZ248
c3RkOjpwYWlyPFQsIFU+ID4KLSAgOiBpbnRlZ3JhbF9jb25zdGFudDxib29sLAotICAgICAgICAg
ICAgICAgICAgICAgIChoYXNfdHJpdmlhbF9hc3NpZ248VD46OnZhbHVlICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgIGhhc190cml2aWFsX2Fzc2lnbjxVPjo6dmFsdWUpPiB7IH07Ci10ZW1wbGF0
ZSA8Y2xhc3MgQSwgaW50IE4+IHN0cnVjdCBoYXNfdHJpdmlhbF9hc3NpZ248QVtOXT4KLSAgOiBo
YXNfdHJpdmlhbF9hc3NpZ248QT4geyB9OwotCi0vLyBXZSBjYW4ndCBnZXQgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvciByaWdodCB3aXRob3V0IGNvbXBpbGVyIGhlbHAsIHNvCi0vLyBmYWlsIGNvbnNl
cnZhdGl2ZWx5LiBXZSB3aWxsIGFzc3VtZSBpdCdzIGZhbHNlIGV4Y2VwdCBmb3I6ICgxKSB0eXBl
cwotLy8gZm9yIHdoaWNoIGlzX3BvZCBpcyB0cnVlLiAoMikgc3RkOjpwYWlyIG9mIHR5cGVzIHdp
dGggdHJpdmlhbAotLy8gZGVzdHJ1Y3RvcnMuICgzKSBhcnJheSBvZiBhIHR5cGUgd2l0aCBhIHRy
aXZpYWwgZGVzdHJ1Y3Rvci4KLS8vICg0KSBjb25zdCB2ZXJzaW9ucyB0aGVyZW9mLgotdGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yIDogaXNfcG9kPFQ+IHsg
fTsKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjxzdGQ6OnBhaXI8VCwgVT4gPgotICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsCi0gICAg
ICAgICAgICAgICAgICAgICAgKGhhc190cml2aWFsX2Rlc3RydWN0b3I8VD46OnZhbHVlICYmCi0g
ICAgICAgICAgICAgICAgICAgICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I8VT46OnZhbHVlKT4g
eyB9OwotdGVtcGxhdGUgPGNsYXNzIEEsIGludCBOPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjxBW05dPgotICA6IGhhc190cml2aWFsX2Rlc3RydWN0b3I8QT4geyB9OwotdGVtcGxhdGUg
PGNsYXNzIFQ+IHN0cnVjdCBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPGNvbnN0IFQ+Ci0gIDogaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjxUPiB7IH07Ci0KLS8vIFNwZWNpZmllZCBieSBUUjEgWzQuNy4x
XQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IHJlbW92ZV9jb25zdCB7IHR5cGVkZWYgVCB0
eXBlOyB9OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IHJlbW92ZV9jb25zdDxUIGNvbnN0
PiB7IHR5cGVkZWYgVCB0eXBlOyB9OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IHJlbW92
ZV92b2xhdGlsZSB7IHR5cGVkZWYgVCB0eXBlOyB9OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IHJlbW92ZV92b2xhdGlsZTxUIHZvbGF0aWxlPiB7IHR5cGVkZWYgVCB0eXBlOyB9OwotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IHJlbW92ZV9jdiB7Ci0gIHR5cGVkZWYgdHlwZW5hbWUg
cmVtb3ZlX2NvbnN0PHR5cGVuYW1lIHJlbW92ZV92b2xhdGlsZTxUPjo6dHlwZT46OnR5cGUgdHlw
ZTsKLX07Ci0KLQotLy8gU3BlY2lmaWVkIGJ5IFRSMSBbNC43LjJdIFJlZmVyZW5jZSBtb2RpZmlj
YXRpb25zLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IHJlbW92ZV9yZWZlcmVuY2UgeyB0
eXBlZGVmIFQgdHlwZTsgfTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCByZW1vdmVfcmVm
ZXJlbmNlPFQmPiB7IHR5cGVkZWYgVCB0eXBlOyB9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RydWN0IGFkZF9yZWZlcmVuY2UgeyB0eXBlZGVmIFQmIHR5cGU7IH07Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RydWN0IGFkZF9yZWZlcmVuY2U8VCY+IHsgdHlwZWRlZiBUJiB0eXBlOyB9Owot
Ci0vLyBTcGVjaWZpZWQgYnkgVFIxIFs0LjcuNF0gUG9pbnRlciBtb2RpZmljYXRpb25zLgotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IHJlbW92ZV9wb2ludGVyIHsgdHlwZWRlZiBUIHR5cGU7
IH07Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCo+IHsgdHlw
ZWRlZiBUIHR5cGU7IH07Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50
ZXI8VCogY29uc3Q+IHsgdHlwZWRlZiBUIHR5cGU7IH07Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCogdm9sYXRpbGU+IHsgdHlwZWRlZiBUIHR5cGU7IH07Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCogY29uc3Qgdm9sYXRp
bGU+IHsKLSAgdHlwZWRlZiBUIHR5cGU7IH07Ci0KLS8vIFNwZWNpZmllZCBieSBUUjEgWzQuNl0g
UmVsYXRpb25zaGlwcyBiZXR3ZWVuIHR5cGVzCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBzdHJ1Y3QgaXNfc2FtZSA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBpc19zYW1lPFQsIFQ+IDogcHVibGljIHRydWVfdHlwZSB7IH07Ci0K
LS8vIFNwZWNpZmllZCBieSBUUjEgWzQuNl0gUmVsYXRpb25zaGlwcyBiZXR3ZWVuIHR5cGVzCi0j
aWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA8PSAzKQotbmFtZXNwYWNlIHR5cGVf
dHJhaXRzX2ludGVybmFsIHsKLQotLy8gVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWwgZm9yIGlzX2NvbnZlcnRpYmxlLCBhbmQgeW91Ci0vLyBkb24ndCBuZWVkIHRvIGtub3cg
aG93IGl0IHdvcmtzIHRvIHVzZSBpc19jb252ZXJ0aWJsZS4gRm9yIHRob3NlCi0vLyB3aG8gY2Fy
ZTogd2UgZGVjbGFyZSB0d28gZGlmZmVyZW50IGZ1bmN0aW9ucywgb25lIHdob3NlIGFyZ3VtZW50
IGlzCi0vLyBvZiB0eXBlIFRvIGFuZCBvbmUgd2l0aCBhIHZhcmlhZGljIGFyZ3VtZW50IGxpc3Qu
IFdlIGdpdmUgdGhlbQotLy8gcmV0dXJuIHR5cGVzIG9mIGRpZmZlcmVudCBzaXplLCBzbyB3ZSBj
YW4gdXNlIHNpemVvZiB0byB0cmljayB0aGUKLS8vIGNvbXBpbGVyIGludG8gdGVsbGluZyB1cyB3
aGljaCBmdW5jdGlvbiBpdCB3b3VsZCBoYXZlIGNob3NlbiBpZiB3ZQotLy8gaGFkIGNhbGxlZCBp
dCB3aXRoIGFuIGFyZ3VtZW50IG9mIHR5cGUgRnJvbS4gIFNlZSBBbGV4YW5kcmVzY3UncwotLy8g
X01vZGVybiBDKysgRGVzaWduXyBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgc29ydCBvZiB0cmlj
ay4KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZyb20sIHR5cGVuYW1lIFRvPgotc3RydWN0IENvbnZl
cnRIZWxwZXIgewotICBzdGF0aWMgc21hbGxfIFRlc3QoVG8pOwotICBzdGF0aWMgYmlnXyBUZXN0
KC4uLik7Ci0gIHN0YXRpYyBGcm9tIENyZWF0ZSgpOwotICBlbnVtIHsKLSAgICB2YWx1ZSA9IHNp
emVvZihUZXN0KENyZWF0ZSgpKSkgPT0gc2l6ZW9mKHNtYWxsXykKLSAgfTsKLX07Ci19ICAvLyBu
YW1lc3BhY2UgdHlwZV90cmFpdHNfaW50ZXJuYWwKLQotLy8gSW5oZXJpdHMgZnJvbSB0cnVlX3R5
cGUgaWYgRnJvbSBpcyBjb252ZXJ0aWJsZSB0byBUbywgZmFsc2VfdHlwZSBvdGhlcndpc2UuCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUgVG8+Ci1zdHJ1Y3QgaXNfY29udmVydGli
bGUKLSAgICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlX3RyYWl0c19pbnRlcm5hbDo6Q29udmVydEhlbHBlcjxGcm9tLCBUbz46OnZhbHVlPiB7
Ci19OwotI2VuZGlmCi0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLSNlbmRpZiAgLy8gR09PR0xFX1BS
T1RPQlVGX1RZUEVfVFJBSVRTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1
YnMvdHlwZV90cmFpdHNfdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvdHlw
ZV90cmFpdHNfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YzEw
YWNlZDYyMDU5ZTM4ZGQ4ZjA1YWY3NDdmNjUxNzZhOTI3ODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3R5cGVf
dHJhaXRzX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjMxICswLDAgQEAKLS8vIENv
cHlyaWdodCAoYykgMjAwNiwgR29vZ2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIC0tLS0KLS8v
IEF1dGhvcjogTWF0dCBBdXN0ZXJuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
dHlwZV90cmFpdHMuaD4KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgIC8vIGZvciBleGl0KCkKLSNp
bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0Lmg+Ci0jaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotdHlwZWRlZiBpbnQgaW50MzI7Ci0vLyBJQk0gQUlYIHR5cGVk
ZWZzIGBpbnQ2NGAgaW4gYHN5cy9pbnR0eXBlcy5oYCwgaW5jbHVkZWQgdHJhbnNpdGl2ZWx5IGFi
b3ZlLgotI2lmbmRlZiBfQUlYCi10eXBlZGVmIGxvbmcgaW50NjQ7Ci0jZW5kaWYKLQotdXNpbmcg
c3RkOjpzdHJpbmc7Ci11c2luZyBzdGQ6OnZlY3RvcjsKLXVzaW5nIHN0ZDo6cGFpcjsKLQotCi0v
LyBUaGlzIGFzc2VydGlvbiBwcm9kdWNlcyBlcnJvcnMgbGlrZSAiZXJyb3I6IGludmFsaWQgdXNl
IG9mCi0vLyBpbmNvbXBsZXRlIHR5cGUgJ3N0cnVjdCA8dW5uYW1lZD46OkFzc2VydFR5cGVzRXE8
Y29uc3QgaW50LCBpbnQ+JyIKLS8vIHdoZW4gaXQgZmFpbHMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQXNzZXJ0VHlwZXNFcTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBBc3NlcnRUeXBlc0VxPFQsIFQ+IHt9OwotI2RlZmluZSBDT01QSUxFX0FTU0VSVF9U
WVBFU19FUShULCBVKSBzdGF0aWNfY2FzdDx2b2lkPihBc3NlcnRUeXBlc0VxPFQsIFU+KCkpCi0K
LS8vIEEgdXNlci1kZWZpbmVkIFBPRCB0eXBlLgotc3RydWN0IEEgewotICBpbnQgbl87Ci19Owot
Ci0vLyBBIHVzZXItZGVmaW5lZCBub24tUE9EIHR5cGUgd2l0aCBhIHRyaXZpYWwgY29weSBjb25z
dHJ1Y3Rvci4KLWNsYXNzIEIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgQihpbnQgbikgOiBuXyhu
KSB7IH0KLSBwcml2YXRlOgotICBpbnQgbl87Ci19OwotCi0vLyBBbm90aGVyIHVzZXItZGVmaW5l
ZCBub24tUE9EIHR5cGUgd2l0aCBhIHRyaXZpYWwgY29weSBjb25zdHJ1Y3Rvci4KLS8vIFdlIHdp
bGwgZXhwbGljaXRseSBkZWNsYXJlIEMgdG8gaGF2ZSBhIHRyaXZpYWwgY29weSBjb25zdHJ1Y3Rv
cgotLy8gYnkgc3BlY2lhbGl6aW5nIGhhc190cml2aWFsX2NvcHkuCi1jbGFzcyBDIHsKLSBwdWJs
aWM6Ci0gIGV4cGxpY2l0IEMoaW50IG4pIDogbl8obikgeyB9Ci0gcHJpdmF0ZToKLSAgaW50IG5f
OwotfTsKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNw
YWNlIGludGVybmFsIHsKLXRlbXBsYXRlPD4gc3RydWN0IGhhc190cml2aWFsX2NvcHk8Qz4gOiB0
cnVlX3R5cGUgeyB9OwotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLQotLy8gQW5vdGhlciB1c2VyLWRlZmlu
ZWQgbm9uLVBPRCB0eXBlIHdpdGggYSB0cml2aWFsIGFzc2lnbm1lbnQgb3BlcmF0b3IuCi0vLyBX
ZSB3aWxsIGV4cGxpY2l0bHkgZGVjbGFyZSBDIHRvIGhhdmUgYSB0cml2aWFsIGFzc2lnbm1lbnQg
b3BlcmF0b3IKLS8vIGJ5IHNwZWNpYWxpemluZyBoYXNfdHJpdmlhbF9hc3NpZ24uCi1jbGFzcyBE
IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEQoaW50IG4pIDogbl8obikgeyB9Ci0gcHJpdmF0ZToK
LSAgaW50IG5fOwotfTsKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIGludGVybmFsIHsKLXRlbXBsYXRlPD4gc3RydWN0IGhhc190cml2aWFsX2Fz
c2lnbjxEPiA6IHRydWVfdHlwZSB7IH07Ci19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8v
IG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0vLyBBbm90aGVy
IHVzZXItZGVmaW5lZCBub24tUE9EIHR5cGUgd2l0aCBhIHRyaXZpYWwgY29uc3RydWN0b3IuCi0v
LyBXZSB3aWxsIGV4cGxpY2l0bHkgZGVjbGFyZSBFIHRvIGhhdmUgYSB0cml2aWFsIGNvbnN0cnVj
dG9yCi0vLyBieSBzcGVjaWFsaXppbmcgaGFzX3RyaXZpYWxfY29uc3RydWN0b3IuCi1jbGFzcyBF
IHsKLSBwdWJsaWM6Ci0gIGludCBuXzsKLX07Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNw
YWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBo
YXNfdHJpdmlhbF9jb25zdHJ1Y3RvcjxFPiA6IHRydWVfdHlwZSB7IH07Ci19ICAvLyBuYW1lc3Bh
Y2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdv
b2dsZQotCi0vLyBBbm90aGVyIHVzZXItZGVmaW5lZCBub24tUE9EIHR5cGUgd2l0aCBhIHRyaXZp
YWwgZGVzdHJ1Y3Rvci4KLS8vIFdlIHdpbGwgZXhwbGljaXRseSBkZWNsYXJlIEUgdG8gaGF2ZSBh
IHRyaXZpYWwgZGVzdHJ1Y3RvcgotLy8gYnkgc3BlY2lhbGl6aW5nIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3IuCi1jbGFzcyBGIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEYoaW50IG4pIDogbl8obikg
eyB9Ci0gcHJpdmF0ZToKLSAgaW50IG5fOwotfTsKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1l
c3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIGludGVybmFsIHsKLXRlbXBsYXRlPD4gc3RydWN0
IGhhc190cml2aWFsX2Rlc3RydWN0b3I8Rj4gOiB0cnVlX3R5cGUgeyB9OwotfSAgLy8gbmFtZXNw
YWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKLQotZW51bSBHIHt9OwotCi11bmlvbiBIIHt9OwotCi1jbGFzcyBJIHsKLSBwdWJsaWM6
Ci0gIG9wZXJhdG9yIGludCgpIGNvbnN0OwotfTsKLQotY2xhc3MgSiB7Ci0gcHJpdmF0ZToKLSAg
b3BlcmF0b3IgaW50KCkgY29uc3Q7Ci19OwotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFj
ZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotbmFtZXNwYWNlIHsKLQotLy8gQSBi
YXNlIGNsYXNzIGFuZCBhIGRlcml2ZWQgY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIGl0LCB1c2Vk
IGZvcgotLy8gdGVzdGluZyBjb252ZXJzaW9uIHR5cGUgdHJhaXRzLgotY2xhc3MgQmFzZSB7Ci0g
cHVibGljOgotICB2aXJ0dWFsIH5CYXNlKCkgeyB9Ci19OwotCi1jbGFzcyBEZXJpdmVkIDogcHVi
bGljIEJhc2UgewotfTsKLQotVEVTVChUeXBlVHJhaXRzVGVzdCwgVGVzdElzSW50ZWdlcikgewot
ICAvLyBWZXJpZnkgdGhhdCBpc19pbnRlZ3JhbCBpcyB0cnVlIGZvciBhbGwgaW50ZWdlciB0eXBl
cy4KLSAgRVhQRUNUX1RSVUUoaXNfaW50ZWdyYWw8Ym9vbD46OnZhbHVlKTsKLSAgRVhQRUNUX1RS
VUUoaXNfaW50ZWdyYWw8Y2hhcj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfaW50ZWdyYWw8
dW5zaWduZWQgY2hhcj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfaW50ZWdyYWw8c2lnbmVk
IGNoYXI+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX2ludGVncmFsPHdjaGFyX3Q+Ojp2YWx1
ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX2ludGVncmFsPGludD46OnZhbHVlKTsKLSAgRVhQRUNUX1RS
VUUoaXNfaW50ZWdyYWw8dW5zaWduZWQgaW50Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShpc19p
bnRlZ3JhbDxzaG9ydD46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfaW50ZWdyYWw8dW5zaWdu
ZWQgc2hvcnQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX2ludGVncmFsPGxvbmc+Ojp2YWx1
ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX2ludGVncmFsPHVuc2lnbmVkIGxvbmc+Ojp2YWx1ZSk7Ci0K
LSAgLy8gVmVyaWZ5IHRoYXQgaXNfaW50ZWdyYWwgaXMgZmFsc2UgZm9yIGEgZmV3IG5vbi1pbnRl
Z2VyIHR5cGVzLgotICBFWFBFQ1RfRkFMU0UoaXNfaW50ZWdyYWw8dm9pZD46OnZhbHVlKTsKLSAg
RVhQRUNUX0ZBTFNFKGlzX2ludGVncmFsPGZsb2F0Pjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0Uo
aXNfaW50ZWdyYWw8c3RyaW5nPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfaW50ZWdyYWw8
aW50Kj46OnZhbHVlKTsKLSAgRVhQRUNUX0ZBTFNFKGlzX2ludGVncmFsPEE+Ojp2YWx1ZSk7Ci0g
IEVYUEVDVF9GQUxTRSgoaXNfaW50ZWdyYWw8cGFpcjxpbnQsIGludD4gPjo6dmFsdWUpKTsKLQot
ICAvLyBWZXJpZnkgdGhhdCBjdi1xdWFsaWZpZWQgaW50ZWdyYWwgdHlwZXMgYXJlIHN0aWxsIGlu
dGVncmFsLCBhbmQKLSAgLy8gY3YtcXVhbGlmaWVkIG5vbi1pbnRlZ3JhbCB0eXBlcyBhcmUgc3Rp
bGwgbm9uLWludGVncmFsLgotICBFWFBFQ1RfVFJVRShpc19pbnRlZ3JhbDxjb25zdCBjaGFyPjo6
dmFsdWUpOwotICBFWFBFQ1RfVFJVRShpc19pbnRlZ3JhbDx2b2xhdGlsZSBib29sPjo6dmFsdWUp
OwotICBFWFBFQ1RfVFJVRShpc19pbnRlZ3JhbDxjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQ+
Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19pbnRlZ3JhbDxjb25zdCBmbG9hdD46OnZhbHVl
KTsKLSAgRVhQRUNUX0ZBTFNFKGlzX2ludGVncmFsPGludCogdm9sYXRpbGU+Ojp2YWx1ZSk7Ci0g
IEVYUEVDVF9GQUxTRShpc19pbnRlZ3JhbDxjb25zdCB2b2xhdGlsZSBzdHJpbmc+Ojp2YWx1ZSk7
Ci19Ci0KLVRFU1QoVHlwZVRyYWl0c1Rlc3QsIFRlc3RJc0Zsb2F0aW5nKSB7Ci0gIC8vIFZlcmlm
eSB0aGF0IGlzX2Zsb2F0aW5nX3BvaW50IGlzIHRydWUgZm9yIGFsbCBmbG9hdGluZy1wb2ludCB0
eXBlcy4KLSAgRVhQRUNUX1RSVUUoaXNfZmxvYXRpbmdfcG9pbnQ8ZmxvYXQ+Ojp2YWx1ZSk7Ci0g
IEVYUEVDVF9UUlVFKGlzX2Zsb2F0aW5nX3BvaW50PGRvdWJsZT46OnZhbHVlKTsKLSAgRVhQRUNU
X1RSVUUoaXNfZmxvYXRpbmdfcG9pbnQ8bG9uZyBkb3VibGU+Ojp2YWx1ZSk7Ci0KLSAgLy8gVmVy
aWZ5IHRoYXQgaXNfZmxvYXRpbmdfcG9pbnQgaXMgZmFsc2UgZm9yIGEgZmV3IG5vbi1mbG9hdCB0
eXBlcy4KLSAgRVhQRUNUX0ZBTFNFKGlzX2Zsb2F0aW5nX3BvaW50PHZvaWQ+Ojp2YWx1ZSk7Ci0g
IEVYUEVDVF9GQUxTRShpc19mbG9hdGluZ19wb2ludDxsb25nPjo6dmFsdWUpOwotICBFWFBFQ1Rf
RkFMU0UoaXNfZmxvYXRpbmdfcG9pbnQ8c3RyaW5nPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0Uo
aXNfZmxvYXRpbmdfcG9pbnQ8ZmxvYXQqPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfZmxv
YXRpbmdfcG9pbnQ8QT46OnZhbHVlKTsKLSAgRVhQRUNUX0ZBTFNFKChpc19mbG9hdGluZ19wb2lu
dDxwYWlyPGludCwgaW50PiA+Ojp2YWx1ZSkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IGN2LXF1YWxp
ZmllZCBmbG9hdGluZyBwb2ludCB0eXBlcyBhcmUgc3RpbGwgZmxvYXRpbmcsIGFuZAotICAvLyBj
di1xdWFsaWZpZWQgbm9uLWZsb2F0aW5nIHR5cGVzIGFyZSBzdGlsbCBub24tZmxvYXRpbmcuCi0g
IEVYUEVDVF9UUlVFKGlzX2Zsb2F0aW5nX3BvaW50PGNvbnN0IGZsb2F0Pjo6dmFsdWUpOwotICBF
WFBFQ1RfVFJVRShpc19mbG9hdGluZ19wb2ludDx2b2xhdGlsZSBkb3VibGU+Ojp2YWx1ZSk7Ci0g
IEVYUEVDVF9UUlVFKGlzX2Zsb2F0aW5nX3BvaW50PGNvbnN0IHZvbGF0aWxlIGxvbmcgZG91Ymxl
Pjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfZmxvYXRpbmdfcG9pbnQ8Y29uc3QgaW50Pjo6
dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfZmxvYXRpbmdfcG9pbnQ8dm9sYXRpbGUgc3RyaW5n
Pjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfZmxvYXRpbmdfcG9pbnQ8Y29uc3Qgdm9sYXRp
bGUgY2hhcj46OnZhbHVlKTsKLX0KLQotVEVTVChUeXBlVHJhaXRzVGVzdCwgVGVzdElzUG9pbnRl
cikgewotICAvLyBWZXJpZnkgdGhhdCBpc19wb2ludGVyIGlzIHRydWUgZm9yIHNvbWUgcG9pbnRl
ciB0eXBlcy4KLSAgRVhQRUNUX1RSVUUoaXNfcG9pbnRlcjxpbnQqPjo6dmFsdWUpOwotICBFWFBF
Q1RfVFJVRShpc19wb2ludGVyPHZvaWQqPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShpc19wb2lu
dGVyPHN0cmluZyo+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvaW50ZXI8Y29uc3Qgdm9p
ZCo+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvaW50ZXI8dm9sYXRpbGUgZmxvYXQqIGNv
bnN0Kj46OnZhbHVlKTsKLQotICAvLyBWZXJpZnkgdGhhdCBpc19wb2ludGVyIGlzIGZhbHNlIGZv
ciBzb21lIG5vbi1wb2ludGVyIHR5cGVzLgotICBFWFBFQ1RfRkFMU0UoaXNfcG9pbnRlcjx2b2lk
Pjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfcG9pbnRlcjxmbG9hdCY+Ojp2YWx1ZSk7Ci0g
IEVYUEVDVF9GQUxTRShpc19wb2ludGVyPGxvbmc+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShp
c19wb2ludGVyPHZlY3RvcjxpbnQqPiA+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19wb2lu
dGVyPGludFs1XT46OnZhbHVlKTsKLQotICAvLyBBIGZ1bmN0aW9uIHBvaW50ZXIgaXMgYSBwb2lu
dGVyLCBidXQgYSBmdW5jdGlvbiB0eXBlLCBvciBhIGZ1bmN0aW9uCi0gIC8vIHJlZmVyZW5jZSB0
eXBlLCBpcyBub3QuCi0gIEVYUEVDVF9UUlVFKGlzX3BvaW50ZXI8aW50ICgqKShpbnQgeCk+Ojp2
YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19wb2ludGVyPHZvaWQoY2hhciB4KT46OnZhbHVlKTsK
LSAgRVhQRUNUX0ZBTFNFKGlzX3BvaW50ZXI8ZG91YmxlICgmKShzdHJpbmcgeCk+Ojp2YWx1ZSk7
Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgaXNfcG9pbnRlcjxUPiBpcyB0cnVlIGZvciBzb21lIGN2LXF1
YWxpZmllZCBwb2ludGVyIHR5cGVzLAotICAvLyBhbmQgZmFsc2UgZm9yIHNvbWUgY3YtcXVhbGlm
aWVkIG5vbi1wb2ludGVyIHR5cGVzLgotICBFWFBFQ1RfVFJVRShpc19wb2ludGVyPGludCogY29u
c3Q+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvaW50ZXI8Y29uc3Qgdm9pZCogdm9sYXRp
bGU+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvaW50ZXI8Y2hhcioqIGNvbnN0IHZvbGF0
aWxlPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfcG9pbnRlcjxjb25zdCBpbnQ+Ojp2YWx1
ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19wb2ludGVyPHZvbGF0aWxlIHZlY3RvcjxpbnQqPiA+Ojp2
YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19wb2ludGVyPGNvbnN0IHZvbGF0aWxlIGRvdWJsZT46
OnZhbHVlKTsKLX0KLQotVEVTVChUeXBlVHJhaXRzVGVzdCwgVGVzdElzRW51bSkgewotLy8gaXNf
ZW51bSBpc24ndCBzdXBwb3J0ZWQgb24gTVNWQyBvciBnY2MgMy54Ci0jaWYgIWRlZmluZWQoX01T
Q19WRVIpICYmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPD0gMykKLSAgLy8gVmVy
aWZ5IHRoYXQgaXNfZW51bSBpcyB0cnVlIGZvciBlbnVtIHR5cGVzLgotICBFWFBFQ1RfVFJVRShp
c19lbnVtPEc+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX2VudW08Y29uc3QgRz46OnZhbHVl
KTsKLSAgRVhQRUNUX1RSVUUoaXNfZW51bTx2b2xhdGlsZSBHPjo6dmFsdWUpOwotICBFWFBFQ1Rf
VFJVRShpc19lbnVtPGNvbnN0IHZvbGF0aWxlIEc+Ojp2YWx1ZSk7Ci0KLSAgLy8gVmVyaWZ5IHRo
YXQgaXNfZW51bSBpcyBmYWxzZSBmb3IgYSBmZXcgbm9uLWVudW0gdHlwZXMuCi0gIEVYUEVDVF9G
QUxTRShpc19lbnVtPHZvaWQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19lbnVtPEcmPjo6
dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfZW51bTxHWzFdPjo6dmFsdWUpOwotICBFWFBFQ1Rf
RkFMU0UoaXNfZW51bTxjb25zdCBHWzFdPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfZW51
bTxHW10+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19lbnVtPGludD46OnZhbHVlKTsKLSAg
RVhQRUNUX0ZBTFNFKGlzX2VudW08ZmxvYXQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19l
bnVtPEE+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19lbnVtPEEqPjo6dmFsdWUpOwotICBF
WFBFQ1RfRkFMU0UoaXNfZW51bTxjb25zdCBBPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNf
ZW51bTxIPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfZW51bTxJPjo6dmFsdWUpOwotICBF
WFBFQ1RfRkFMU0UoaXNfZW51bTxKPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfZW51bTx2
b2lkKCk+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19lbnVtPHZvaWQoKikoKT46OnZhbHVl
KTsKLSAgRVhQRUNUX0ZBTFNFKGlzX2VudW08aW50IEE6Oio+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9G
QUxTRShpc19lbnVtPHZvaWQgKEE6OiopKCk+Ojp2YWx1ZSk7Ci0jZW5kaWYKLX0KLQotVEVTVChU
eXBlVHJhaXRzVGVzdCwgVGVzdElzUmVmZXJlbmNlKSB7Ci0gIC8vIFZlcmlmaWVzIHRoYXQgaXNf
cmVmZXJlbmNlIGlzIHRydWUgZm9yIGFsbCByZWZlcmVuY2UgdHlwZXMuCi0gIHR5cGVkZWYgZmxv
YXQmIFJlZkZsb2F0OwotICBFWFBFQ1RfVFJVRShpc19yZWZlcmVuY2U8ZmxvYXQmPjo6dmFsdWUp
OwotICBFWFBFQ1RfVFJVRShpc19yZWZlcmVuY2U8Y29uc3QgaW50Jj46OnZhbHVlKTsKLSAgRVhQ
RUNUX1RSVUUoaXNfcmVmZXJlbmNlPGNvbnN0IGludComPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJV
RShpc19yZWZlcmVuY2U8aW50ICgmKShib29sKT46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNf
cmVmZXJlbmNlPFJlZkZsb2F0Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShpc19yZWZlcmVuY2U8
Y29uc3QgUmVmRmxvYXQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3JlZmVyZW5jZTx2b2xh
dGlsZSBSZWZGbG9hdD46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfcmVmZXJlbmNlPGNvbnN0
IHZvbGF0aWxlIFJlZkZsb2F0Pjo6dmFsdWUpOwotCi0KLSAgLy8gVmVyaWZpZXMgdGhhdCBpc19y
ZWZlcmVuY2UgaXMgZmFsc2UgZm9yIGFsbCBub24tcmVmZXJlbmNlIHR5cGVzLgotICBFWFBFQ1Rf
RkFMU0UoaXNfcmVmZXJlbmNlPGZsb2F0Pjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfcmVm
ZXJlbmNlPGNvbnN0IGZsb2F0Pjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfcmVmZXJlbmNl
PHZvbGF0aWxlIGZsb2F0Pjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfcmVmZXJlbmNlPGNv
bnN0IHZvbGF0aWxlIGZsb2F0Pjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfcmVmZXJlbmNl
PGNvbnN0IGludCo+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19yZWZlcmVuY2U8aW50KCk+
Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19yZWZlcmVuY2U8dm9pZCgqKShjb25zdCBjaGFy
Jik+Ojp2YWx1ZSk7Ci19Ci0KLVRFU1QoVHlwZVRyYWl0c1Rlc3QsIFRlc3RBZGRSZWZlcmVuY2Up
IHsKLSAgQ09NUElMRV9BU1NFUlRfVFlQRVNfRVEoaW50JiwgYWRkX3JlZmVyZW5jZTxpbnQ+Ojp0
eXBlKTsKLSAgQ09NUElMRV9BU1NFUlRfVFlQRVNfRVEoY29uc3QgaW50JiwgYWRkX3JlZmVyZW5j
ZTxjb25zdCBpbnQ+Ojp0eXBlKTsKLSAgQ09NUElMRV9BU1NFUlRfVFlQRVNfRVEodm9sYXRpbGUg
aW50JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3JlZmVyZW5jZTx2b2xhdGlsZSBp
bnQ+Ojp0eXBlKTsKLSAgQ09NUElMRV9BU1NFUlRfVFlQRVNfRVEoY29uc3Qgdm9sYXRpbGUgaW50
JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3JlZmVyZW5jZTxjb25zdCB2b2xhdGls
ZSBpbnQ+Ojp0eXBlKTsKLSAgQ09NUElMRV9BU1NFUlRfVFlQRVNfRVEoaW50JiwgYWRkX3JlZmVy
ZW5jZTxpbnQmPjo6dHlwZSk7Ci0gIENPTVBJTEVfQVNTRVJUX1RZUEVTX0VRKGNvbnN0IGludCYs
IGFkZF9yZWZlcmVuY2U8Y29uc3QgaW50Jj46OnR5cGUpOwotICBDT01QSUxFX0FTU0VSVF9UWVBF
U19FUSh2b2xhdGlsZSBpbnQmLAotICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfcmVmZXJl
bmNlPHZvbGF0aWxlIGludCY+Ojp0eXBlKTsKLSAgQ09NUElMRV9BU1NFUlRfVFlQRVNfRVEoY29u
c3Qgdm9sYXRpbGUgaW50JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3JlZmVyZW5j
ZTxjb25zdCB2b2xhdGlsZSBpbnQmPjo6dHlwZSk7Ci19Ci0KLVRFU1QoVHlwZVRyYWl0c1Rlc3Qs
IFRlc3RJc1BvZCkgewotICAvLyBWZXJpZnkgdGhhdCBhcml0aG1ldGljIHR5cGVzIGFuZCBwb2lu
dGVycyBhcmUgbWFya2VkIGFzIFBPRHMuCi0gIEVYUEVDVF9UUlVFKGlzX3BvZDxib29sPjo6dmFs
dWUpOwotICBFWFBFQ1RfVFJVRShpc19wb2Q8Y2hhcj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUo
aXNfcG9kPHVuc2lnbmVkIGNoYXI+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvZDxzaWdu
ZWQgY2hhcj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfcG9kPHdjaGFyX3Q+Ojp2YWx1ZSk7
Ci0gIEVYUEVDVF9UUlVFKGlzX3BvZDxpbnQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3Bv
ZDx1bnNpZ25lZCBpbnQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvZDxzaG9ydD46OnZh
bHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfcG9kPHVuc2lnbmVkIHNob3J0Pjo6dmFsdWUpOwotICBF
WFBFQ1RfVFJVRShpc19wb2Q8bG9uZz46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfcG9kPHVu
c2lnbmVkIGxvbmc+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvZDxmbG9hdD46OnZhbHVl
KTsKLSAgRVhQRUNUX1RSVUUoaXNfcG9kPGRvdWJsZT46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUo
aXNfcG9kPGxvbmcgZG91YmxlPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShpc19wb2Q8c3RyaW5n
Kj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfcG9kPEEqPjo6dmFsdWUpOwotICBFWFBFQ1Rf
VFJVRShpc19wb2Q8Y29uc3QgQio+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvZDxDKio+
Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvZDxjb25zdCBpbnQ+Ojp2YWx1ZSk7Ci0gIEVY
UEVDVF9UUlVFKGlzX3BvZDxjaGFyKiB2b2xhdGlsZT46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUo
aXNfcG9kPGNvbnN0IHZvbGF0aWxlIGRvdWJsZT46OnZhbHVlKTsKLSNpZiAhZGVmaW5lZChfTVND
X1ZFUikgJiYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA8PSAzKQotICBFWFBFQ1Rf
VFJVRShpc19wb2Q8Rz46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaXNfcG9kPGNvbnN0IEc+Ojp2
YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGlzX3BvZDx2b2xhdGlsZSBHPjo6dmFsdWUpOwotICBFWFBF
Q1RfVFJVRShpc19wb2Q8Y29uc3Qgdm9sYXRpbGUgRz46OnZhbHVlKTsKLSNlbmRpZgotCi0gIC8v
IFZlcmlmeSB0aGF0IHNvbWUgbm9uLVBPRCB0eXBlcyBhcmUgbm90IG1hcmtlZCBhcyBQT0RzLgot
ICBFWFBFQ1RfRkFMU0UoaXNfcG9kPHZvaWQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShpc19w
b2Q8c3RyaW5nPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoKGlzX3BvZDxwYWlyPGludCwgaW50
PiA+Ojp2YWx1ZSkpOwotICBFWFBFQ1RfRkFMU0UoaXNfcG9kPEE+Ojp2YWx1ZSk7Ci0gIEVYUEVD
VF9GQUxTRShpc19wb2Q8Qj46OnZhbHVlKTsKLSAgRVhQRUNUX0ZBTFNFKGlzX3BvZDxDPjo6dmFs
dWUpOwotICBFWFBFQ1RfRkFMU0UoaXNfcG9kPGNvbnN0IHN0cmluZz46OnZhbHVlKTsKLSAgRVhQ
RUNUX0ZBTFNFKGlzX3BvZDx2b2xhdGlsZSBBPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaXNf
cG9kPGNvbnN0IHZvbGF0aWxlIEI+Ojp2YWx1ZSk7Ci19Ci0KLVRFU1QoVHlwZVRyYWl0c1Rlc3Qs
IFRlc3RIYXNUcml2aWFsQ29uc3RydWN0b3IpIHsKLSAgLy8gVmVyaWZ5IHRoYXQgYXJpdGhtZXRp
YyB0eXBlcyBhbmQgcG9pbnRlcnMgaGF2ZSB0cml2aWFsIGNvbnN0cnVjdG9ycy4KLSAgRVhQRUNU
X1RSVUUoaGFzX3RyaXZpYWxfY29uc3RydWN0b3I8Ym9vbD46OnZhbHVlKTsKLSAgRVhQRUNUX1RS
VUUoaGFzX3RyaXZpYWxfY29uc3RydWN0b3I8Y2hhcj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUo
aGFzX3RyaXZpYWxfY29uc3RydWN0b3I8dW5zaWduZWQgY2hhcj46OnZhbHVlKTsKLSAgRVhQRUNU
X1RSVUUoaGFzX3RyaXZpYWxfY29uc3RydWN0b3I8c2lnbmVkIGNoYXI+Ojp2YWx1ZSk7Ci0gIEVY
UEVDVF9UUlVFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPHdjaGFyX3Q+Ojp2YWx1ZSk7Ci0gIEVY
UEVDVF9UUlVFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPGludD46OnZhbHVlKTsKLSAgRVhQRUNU
X1RSVUUoaGFzX3RyaXZpYWxfY29uc3RydWN0b3I8dW5zaWduZWQgaW50Pjo6dmFsdWUpOwotICBF
WFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcjxzaG9ydD46OnZhbHVlKTsKLSAgRVhQ
RUNUX1RSVUUoaGFzX3RyaXZpYWxfY29uc3RydWN0b3I8dW5zaWduZWQgc2hvcnQ+Ojp2YWx1ZSk7
Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPGxvbmc+Ojp2YWx1ZSk7Ci0g
IEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPHVuc2lnbmVkIGxvbmc+Ojp2YWx1
ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPGZsb2F0Pjo6dmFsdWUp
OwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9jb25zdHJ1Y3Rvcjxkb3VibGU+Ojp2YWx1ZSk7
Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPGxvbmcgZG91YmxlPjo6dmFs
dWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcjxzdHJpbmcqPjo6dmFs
dWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcjxBKj46OnZhbHVlKTsK
LSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfY29uc3RydWN0b3I8Y29uc3QgQio+Ojp2YWx1ZSk7
Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPEMqKj46OnZhbHVlKTsKLQot
ICAvLyBWZXJpZnkgdGhhdCBwYWlycyBhbmQgYXJyYXlzIG9mIHN1Y2ggdHlwZXMgaGF2ZSB0cml2
aWFsCi0gIC8vIGNvbnN0cnVjdG9ycy4KLSAgdHlwZWRlZiBpbnQgaW50MTBbMTBdOwotICBFWFBF
Q1RfVFJVRSgoaGFzX3RyaXZpYWxfY29uc3RydWN0b3I8cGFpcjxpbnQsIGNoYXIqPiA+Ojp2YWx1
ZSkpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcjxpbnQxMD46OnZhbHVl
KTsKLQotICAvLyBWZXJpZnkgdGhhdCBwYWlycyBvZiB0eXBlcyB3aXRob3V0IHRyaXZpYWwgY29u
c3RydWN0b3JzCi0gIC8vIGFyZSBub3QgbWFya2VkIGFzIHRyaXZpYWwuCi0gIEVYUEVDVF9GQUxT
RSgoaGFzX3RyaXZpYWxfY29uc3RydWN0b3I8cGFpcjxpbnQsIHN0cmluZz4gPjo6dmFsdWUpKTsK
LSAgRVhQRUNUX0ZBTFNFKChoYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcjxwYWlyPHN0cmluZywgaW50
PiA+Ojp2YWx1ZSkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHR5cGVzIHdpdGhvdXQgdHJpdmlhbCBj
b25zdHJ1Y3RvcnMgYXJlCi0gIC8vIGNvcnJlY3RseSBtYXJrZWQgYXMgc3VjaC4KLSAgRVhQRUNU
X0ZBTFNFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPHN0cmluZz46OnZhbHVlKTsKLSAgRVhQRUNU
X0ZBTFNFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPHZlY3RvcjxpbnQ+ID46OnZhbHVlKTsKLQot
ICAvLyBWZXJpZnkgdGhhdCBFLCB3aGljaCB3ZSBoYXZlIGRlY2xhcmVkIHRvIGhhdmUgYSB0cml2
aWFsCi0gIC8vIGNvbnN0cnVjdG9yLCBpcyBjb3JyZWN0bHkgbWFya2VkIGFzIHN1Y2guCi0gIEVY
UEVDVF9UUlVFKGhhc190cml2aWFsX2NvbnN0cnVjdG9yPEU+Ojp2YWx1ZSk7Ci19Ci0KLVRFU1Qo
VHlwZVRyYWl0c1Rlc3QsIFRlc3RIYXNUcml2aWFsQ29weSkgewotICAvLyBWZXJpZnkgdGhhdCBh
cml0aG1ldGljIHR5cGVzIGFuZCBwb2ludGVycyBoYXZlIHRyaXZpYWwgY29weQotICAvLyBjb25z
dHJ1Y3RvcnMuCi0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2NvcHk8Ym9vbD46OnZhbHVlKTsK
LSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfY29weTxjaGFyPjo6dmFsdWUpOwotICBFWFBFQ1Rf
VFJVRShoYXNfdHJpdmlhbF9jb3B5PHVuc2lnbmVkIGNoYXI+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9U
UlVFKGhhc190cml2aWFsX2NvcHk8c2lnbmVkIGNoYXI+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVF
KGhhc190cml2aWFsX2NvcHk8d2NoYXJfdD46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3Ry
aXZpYWxfY29weTxpbnQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2NvcHk8
dW5zaWduZWQgaW50Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9jb3B5PHNo
b3J0Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9jb3B5PHVuc2lnbmVkIHNo
b3J0Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9jb3B5PGxvbmc+Ojp2YWx1
ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2NvcHk8dW5zaWduZWQgbG9uZz46OnZhbHVl
KTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfY29weTxmbG9hdD46OnZhbHVlKTsKLSAgRVhQ
RUNUX1RSVUUoaGFzX3RyaXZpYWxfY29weTxkb3VibGU+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVF
KGhhc190cml2aWFsX2NvcHk8bG9uZyBkb3VibGU+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhh
c190cml2aWFsX2NvcHk8c3RyaW5nKj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZp
YWxfY29weTxBKj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfY29weTxjb25z
dCBCKj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfY29weTxDKio+Ojp2YWx1
ZSk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgcGFpcnMgYW5kIGFycmF5cyBvZiBzdWNoIHR5cGVzIGhh
dmUgdHJpdmlhbAotICAvLyBjb3B5IGNvbnN0cnVjdG9ycy4KLSAgdHlwZWRlZiBpbnQgaW50MTBb
MTBdOwotICBFWFBFQ1RfVFJVRSgoaGFzX3RyaXZpYWxfY29weTxwYWlyPGludCwgY2hhcio+ID46
OnZhbHVlKSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2NvcHk8aW50MTA+Ojp2YWx1ZSk7
Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgcGFpcnMgb2YgdHlwZXMgd2l0aG91dCB0cml2aWFsIGNvcHkg
Y29uc3RydWN0b3JzCi0gIC8vIGFyZSBub3QgbWFya2VkIGFzIHRyaXZpYWwuCi0gIEVYUEVDVF9G
QUxTRSgoaGFzX3RyaXZpYWxfY29weTxwYWlyPGludCwgc3RyaW5nPiA+Ojp2YWx1ZSkpOwotICBF
WFBFQ1RfRkFMU0UoKGhhc190cml2aWFsX2NvcHk8cGFpcjxzdHJpbmcsIGludD4gPjo6dmFsdWUp
KTsKLQotICAvLyBWZXJpZnkgdGhhdCB0eXBlcyB3aXRob3V0IHRyaXZpYWwgY29weSBjb25zdHJ1
Y3RvcnMgYXJlCi0gIC8vIGNvcnJlY3RseSBtYXJrZWQgYXMgc3VjaC4KLSAgRVhQRUNUX0ZBTFNF
KGhhc190cml2aWFsX2NvcHk8c3RyaW5nPjo6dmFsdWUpOwotICBFWFBFQ1RfRkFMU0UoaGFzX3Ry
aXZpYWxfY29weTx2ZWN0b3I8aW50PiA+Ojp2YWx1ZSk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgQywg
d2hpY2ggd2UgaGF2ZSBkZWNsYXJlZCB0byBoYXZlIGEgdHJpdmlhbAotICAvLyBjb3B5IGNvbnN0
cnVjdG9yLCBpcyBjb3JyZWN0bHkgbWFya2VkIGFzIHN1Y2guCi0gIEVYUEVDVF9UUlVFKGhhc190
cml2aWFsX2NvcHk8Qz46OnZhbHVlKTsKLX0KLQotVEVTVChUeXBlVHJhaXRzVGVzdCwgVGVzdEhh
c1RyaXZpYWxBc3NpZ24pIHsKLSAgLy8gVmVyaWZ5IHRoYXQgYXJpdGhtZXRpYyB0eXBlcyBhbmQg
cG9pbnRlcnMgaGF2ZSB0cml2aWFsIGFzc2lnbm1lbnQKLSAgLy8gb3BlcmF0b3JzLgotICBFWFBF
Q1RfVFJVRShoYXNfdHJpdmlhbF9hc3NpZ248Ym9vbD46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUo
aGFzX3RyaXZpYWxfYXNzaWduPGNoYXI+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2
aWFsX2Fzc2lnbjx1bnNpZ25lZCBjaGFyPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJp
dmlhbF9hc3NpZ248c2lnbmVkIGNoYXI+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2
aWFsX2Fzc2lnbjx3Y2hhcl90Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9h
c3NpZ248aW50Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9hc3NpZ248dW5z
aWduZWQgaW50Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9hc3NpZ248c2hv
cnQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2Fzc2lnbjx1bnNpZ25lZCBz
aG9ydD46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfYXNzaWduPGxvbmc+Ojp2
YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2Fzc2lnbjx1bnNpZ25lZCBsb25nPjo6
dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9hc3NpZ248ZmxvYXQ+Ojp2YWx1ZSk7
Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2Fzc2lnbjxkb3VibGU+Ojp2YWx1ZSk7Ci0gIEVY
UEVDVF9UUlVFKGhhc190cml2aWFsX2Fzc2lnbjxsb25nIGRvdWJsZT46OnZhbHVlKTsKLSAgRVhQ
RUNUX1RSVUUoaGFzX3RyaXZpYWxfYXNzaWduPHN0cmluZyo+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9U
UlVFKGhhc190cml2aWFsX2Fzc2lnbjxBKj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3Ry
aXZpYWxfYXNzaWduPGNvbnN0IEIqPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlh
bF9hc3NpZ248QyoqPjo6dmFsdWUpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHBhaXJzIGFuZCBhcnJh
eXMgb2Ygc3VjaCB0eXBlcyBoYXZlIHRyaXZpYWwKLSAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnMu
Ci0gIHR5cGVkZWYgaW50IGludDEwWzEwXTsKLSAgRVhQRUNUX1RSVUUoKGhhc190cml2aWFsX2Fz
c2lnbjxwYWlyPGludCwgY2hhcio+ID46OnZhbHVlKSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2
aWFsX2Fzc2lnbjxpbnQxMD46OnZhbHVlKTsKLQotICAvLyBWZXJpZnkgdGhhdCBwYWlycyBvZiB0
eXBlcyB3aXRob3V0IHRyaXZpYWwgYXNzaWdubWVudCBvcGVyYXRvcnMKLSAgLy8gYXJlIG5vdCBt
YXJrZWQgYXMgdHJpdmlhbC4KLSAgRVhQRUNUX0ZBTFNFKChoYXNfdHJpdmlhbF9hc3NpZ248cGFp
cjxpbnQsIHN0cmluZz4gPjo6dmFsdWUpKTsKLSAgRVhQRUNUX0ZBTFNFKChoYXNfdHJpdmlhbF9h
c3NpZ248cGFpcjxzdHJpbmcsIGludD4gPjo6dmFsdWUpKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0
eXBlcyB3aXRob3V0IHRyaXZpYWwgYXNzaWdubWVudCBvcGVyYXRvcnMgYXJlCi0gIC8vIGNvcnJl
Y3RseSBtYXJrZWQgYXMgc3VjaC4KLSAgRVhQRUNUX0ZBTFNFKGhhc190cml2aWFsX2Fzc2lnbjxz
dHJpbmc+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9GQUxTRShoYXNfdHJpdmlhbF9hc3NpZ248dmVjdG9y
PGludD4gPjo6dmFsdWUpOwotCi0gIC8vIFZlcmlmeSB0aGF0IEQsIHdoaWNoIHdlIGhhdmUgZGVj
bGFyZWQgdG8gaGF2ZSBhIHRyaXZpYWwKLSAgLy8gYXNzaWdubWVudCBvcGVyYXRvciwgaXMgY29y
cmVjdGx5IG1hcmtlZCBhcyBzdWNoLgotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9hc3NpZ248
RD46OnZhbHVlKTsKLX0KLQotVEVTVChUeXBlVHJhaXRzVGVzdCwgVGVzdEhhc1RyaXZpYWxEZXN0
cnVjdG9yKSB7Ci0gIC8vIFZlcmlmeSB0aGF0IGFyaXRobWV0aWMgdHlwZXMgYW5kIHBvaW50ZXJz
IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfZGVz
dHJ1Y3Rvcjxib29sPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yPGNoYXI+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2Rlc3RydWN0b3I8
dW5zaWduZWQgY2hhcj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjxzaWduZWQgY2hhcj46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfZGVz
dHJ1Y3Rvcjx3Y2hhcl90Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yPGludD46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjx1bnNpZ25lZCBpbnQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I8c2hvcnQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2Rlc3RydWN0
b3I8dW5zaWduZWQgc2hvcnQ+Ojp2YWx1ZSk7Ci0gIEVYUEVDVF9UUlVFKGhhc190cml2aWFsX2Rl
c3RydWN0b3I8bG9uZz46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfZGVzdHJ1
Y3Rvcjx1bnNpZ25lZCBsb25nPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yPGZsb2F0Pjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yPGRvdWJsZT46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfZGVzdHJ1
Y3Rvcjxsb25nIGRvdWJsZT46OnZhbHVlKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjxzdHJpbmcqPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yPEEqPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
PGNvbnN0IEIqPjo6dmFsdWUpOwotICBFWFBFQ1RfVFJVRShoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
PEMqKj46OnZhbHVlKTsKLQotICAvLyBWZXJpZnkgdGhhdCBwYWlycyBhbmQgYXJyYXlzIG9mIHN1
Y2ggdHlwZXMgaGF2ZSB0cml2aWFsCi0gIC8vIGRlc3RydWN0b3JzLgotICB0eXBlZGVmIGludCBp
bnQxMFsxMF07Ci0gIEVYUEVDVF9UUlVFKChoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPHBhaXI8aW50
LCBjaGFyKj4gPjo6dmFsdWUpKTsKLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjxpbnQxMD46OnZhbHVlKTsKLQotICAvLyBWZXJpZnkgdGhhdCBwYWlycyBvZiB0eXBlcyB3aXRo
b3V0IHRyaXZpYWwgZGVzdHJ1Y3RvcnMKLSAgLy8gYXJlIG5vdCBtYXJrZWQgYXMgdHJpdmlhbC4K
LSAgRVhQRUNUX0ZBTFNFKChoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPHBhaXI8aW50LCBzdHJpbmc+
ID46OnZhbHVlKSk7Ci0gIEVYUEVDVF9GQUxTRSgoaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjxwYWly
PHN0cmluZywgaW50PiA+Ojp2YWx1ZSkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHR5cGVzIHdpdGhv
dXQgdHJpdmlhbCBkZXN0cnVjdG9ycyBhcmUKLSAgLy8gY29ycmVjdGx5IG1hcmtlZCBhcyBzdWNo
LgotICBFWFBFQ1RfRkFMU0UoaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjxzdHJpbmc+Ojp2YWx1ZSk7
Ci0gIEVYUEVDVF9GQUxTRShoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPHZlY3RvcjxpbnQ+ID46OnZh
bHVlKTsKLQotICAvLyBWZXJpZnkgdGhhdCBGLCB3aGljaCB3ZSBoYXZlIGRlY2xhcmVkIHRvIGhh
dmUgYSB0cml2aWFsCi0gIC8vIGRlc3RydWN0b3IsIGlzIGNvcnJlY3RseSBtYXJrZWQgYXMgc3Vj
aC4KLSAgRVhQRUNUX1RSVUUoaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjxGPjo6dmFsdWUpOwotfQot
Ci0vLyBUZXN0cyByZW1vdmVfcG9pbnRlci4KLVRFU1QoVHlwZVRyYWl0c1Rlc3QsIFRlc3RSZW1v
dmVQb2ludGVyKSB7Ci0gIENPTVBJTEVfQVNTRVJUX1RZUEVTX0VRKGludCwgcmVtb3ZlX3BvaW50
ZXI8aW50Pjo6dHlwZSk7Ci0gIENPTVBJTEVfQVNTRVJUX1RZUEVTX0VRKGludCwgcmVtb3ZlX3Bv
aW50ZXI8aW50Kj46OnR5cGUpOwotICBDT01QSUxFX0FTU0VSVF9UWVBFU19FUShjb25zdCBpbnQs
IHJlbW92ZV9wb2ludGVyPGNvbnN0IGludCo+Ojp0eXBlKTsKLSAgQ09NUElMRV9BU1NFUlRfVFlQ
RVNfRVEoaW50LCByZW1vdmVfcG9pbnRlcjxpbnQqIGNvbnN0Pjo6dHlwZSk7Ci0gIENPTVBJTEVf
QVNTRVJUX1RZUEVTX0VRKGludCwgcmVtb3ZlX3BvaW50ZXI8aW50KiB2b2xhdGlsZT46OnR5cGUp
OwotfQotCi1URVNUKFR5cGVUcmFpdHNUZXN0LCBUZXN0UmVtb3ZlQ29uc3QpIHsKLSAgQ09NUElM
RV9BU1NFUlRfVFlQRVNfRVEoaW50LCByZW1vdmVfY29uc3Q8aW50Pjo6dHlwZSk7Ci0gIENPTVBJ
TEVfQVNTRVJUX1RZUEVTX0VRKGludCwgcmVtb3ZlX2NvbnN0PGNvbnN0IGludD46OnR5cGUpOwot
ICBDT01QSUxFX0FTU0VSVF9UWVBFU19FUShpbnQgKiwgcmVtb3ZlX2NvbnN0PGludCAqIGNvbnN0
Pjo6dHlwZSk7Ci0gIC8vIFRSMSBleGFtcGxlcy4KLSAgQ09NUElMRV9BU1NFUlRfVFlQRVNfRVEo
Y29uc3QgaW50ICosIHJlbW92ZV9jb25zdDxjb25zdCBpbnQgKj46OnR5cGUpOwotICBDT01QSUxF
X0FTU0VSVF9UWVBFU19FUSh2b2xhdGlsZSBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHJlbW92ZV9jb25zdDxjb25zdCB2b2xhdGlsZSBpbnQ+Ojp0eXBlKTsKLX0KLQotVEVTVChUeXBl
VHJhaXRzVGVzdCwgVGVzdFJlbW92ZVZvbGF0aWxlKSB7Ci0gIENPTVBJTEVfQVNTRVJUX1RZUEVT
X0VRKGludCwgcmVtb3ZlX3ZvbGF0aWxlPGludD46OnR5cGUpOwotICBDT01QSUxFX0FTU0VSVF9U
WVBFU19FUShpbnQsIHJlbW92ZV92b2xhdGlsZTx2b2xhdGlsZSBpbnQ+Ojp0eXBlKTsKLSAgQ09N
UElMRV9BU1NFUlRfVFlQRVNfRVEoaW50ICosIHJlbW92ZV92b2xhdGlsZTxpbnQgKiB2b2xhdGls
ZT46OnR5cGUpOwotICAvLyBUUjEgZXhhbXBsZXMuCi0gIENPTVBJTEVfQVNTRVJUX1RZUEVTX0VR
KHZvbGF0aWxlIGludCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfdm9sYXRp
bGU8dm9sYXRpbGUgaW50ICo+Ojp0eXBlKTsKLSAgQ09NUElMRV9BU1NFUlRfVFlQRVNfRVEoY29u
c3QgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfdm9sYXRpbGU8Y29uc3Qg
dm9sYXRpbGUgaW50Pjo6dHlwZSk7Ci19Ci0KLVRFU1QoVHlwZVRyYWl0c1Rlc3QsIFRlc3RSZW1v
dmVDVikgewotICBDT01QSUxFX0FTU0VSVF9UWVBFU19FUShpbnQsIHJlbW92ZV9jdjxpbnQ+Ojp0
eXBlKTsKLSAgQ09NUElMRV9BU1NFUlRfVFlQRVNfRVEoaW50LCByZW1vdmVfY3Y8dm9sYXRpbGUg
aW50Pjo6dHlwZSk7Ci0gIENPTVBJTEVfQVNTRVJUX1RZUEVTX0VRKGludCwgcmVtb3ZlX2N2PGNv
bnN0IGludD46OnR5cGUpOwotICBDT01QSUxFX0FTU0VSVF9UWVBFU19FUShpbnQgKiwgcmVtb3Zl
X2N2PGludCAqIGNvbnN0IHZvbGF0aWxlPjo6dHlwZSk7Ci0gIC8vIFRSMSBleGFtcGxlcy4KLSAg
Q09NUElMRV9BU1NFUlRfVFlQRVNfRVEoY29uc3Qgdm9sYXRpbGUgaW50ICosCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbW92ZV9jdjxjb25zdCB2b2xhdGlsZSBpbnQgKj46OnR5cGUpOwot
ICBDT01QSUxFX0FTU0VSVF9UWVBFU19FUShpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHJlbW92ZV9jdjxjb25zdCB2b2xhdGlsZSBpbnQ+Ojp0eXBlKTsKLX0KLQotVEVTVChUeXBlVHJh
aXRzVGVzdCwgVGVzdFJlbW92ZVJlZmVyZW5jZSkgewotICBDT01QSUxFX0FTU0VSVF9UWVBFU19F
UShpbnQsIHJlbW92ZV9yZWZlcmVuY2U8aW50Pjo6dHlwZSk7Ci0gIENPTVBJTEVfQVNTRVJUX1RZ
UEVTX0VRKGludCwgcmVtb3ZlX3JlZmVyZW5jZTxpbnQmPjo6dHlwZSk7Ci0gIENPTVBJTEVfQVNT
RVJUX1RZUEVTX0VRKGNvbnN0IGludCwgcmVtb3ZlX3JlZmVyZW5jZTxjb25zdCBpbnQmPjo6dHlw
ZSk7Ci0gIENPTVBJTEVfQVNTRVJUX1RZUEVTX0VRKGludCosIHJlbW92ZV9yZWZlcmVuY2U8aW50
ICogJj46OnR5cGUpOwotfQotCi1URVNUKFR5cGVUcmFpdHNUZXN0LCBUZXN0SXNTYW1lKSB7Ci0g
IEVYUEVDVF9UUlVFKChpc19zYW1lPGludDMyLCBpbnQzMj46OnZhbHVlKSk7Ci0gIEVYUEVDVF9G
QUxTRSgoaXNfc2FtZTxpbnQzMiwgaW50NjQ+Ojp2YWx1ZSkpOwotICBFWFBFQ1RfRkFMU0UoKGlz
X3NhbWU8aW50NjQsIGludDMyPjo6dmFsdWUpKTsKLSAgRVhQRUNUX0ZBTFNFKChpc19zYW1lPGlu
dCwgY29uc3QgaW50Pjo6dmFsdWUpKTsKLQotICBFWFBFQ1RfVFJVRSgoaXNfc2FtZTx2b2lkLCB2
b2lkPjo6dmFsdWUpKTsKLSAgRVhQRUNUX0ZBTFNFKChpc19zYW1lPHZvaWQsIGludD46OnZhbHVl
KSk7Ci0gIEVYUEVDVF9GQUxTRSgoaXNfc2FtZTxpbnQsIHZvaWQ+Ojp2YWx1ZSkpOwotCi0gIEVY
UEVDVF9UUlVFKChpc19zYW1lPGludCosIGludCo+Ojp2YWx1ZSkpOwotICBFWFBFQ1RfVFJVRSgo
aXNfc2FtZTx2b2lkKiwgdm9pZCo+Ojp2YWx1ZSkpOwotICBFWFBFQ1RfRkFMU0UoKGlzX3NhbWU8
aW50Kiwgdm9pZCo+Ojp2YWx1ZSkpOwotICBFWFBFQ1RfRkFMU0UoKGlzX3NhbWU8dm9pZCosIGlu
dCo+Ojp2YWx1ZSkpOwotICBFWFBFQ1RfRkFMU0UoKGlzX3NhbWU8dm9pZCosIGNvbnN0IHZvaWQq
Pjo6dmFsdWUpKTsKLSAgRVhQRUNUX0ZBTFNFKChpc19zYW1lPHZvaWQqLCB2b2lkKiBjb25zdD46
OnZhbHVlKSk7Ci0KLSAgRVhQRUNUX1RSVUUoKGlzX3NhbWU8QmFzZSosIEJhc2UqPjo6dmFsdWUp
KTsKLSAgRVhQRUNUX1RSVUUoKGlzX3NhbWU8RGVyaXZlZCosIERlcml2ZWQqPjo6dmFsdWUpKTsK
LSAgRVhQRUNUX0ZBTFNFKChpc19zYW1lPEJhc2UqLCBEZXJpdmVkKj46OnZhbHVlKSk7Ci0gIEVY
UEVDVF9GQUxTRSgoaXNfc2FtZTxEZXJpdmVkKiwgQmFzZSo+Ojp2YWx1ZSkpOwotfQotCi1URVNU
KFR5cGVUcmFpdHNUZXN0LCBUZXN0Q29udmVydGlibGUpIHsKLSNpZiAhKGRlZmluZWQoX19HTlVD
X18pICYmIF9fR05VQ19fIDw9IDMpCi0gIEVYUEVDVF9UUlVFKChpc19jb252ZXJ0aWJsZTxpbnQs
IGludD46OnZhbHVlKSk7Ci0gIEVYUEVDVF9UUlVFKChpc19jb252ZXJ0aWJsZTxpbnQsIGxvbmc+
Ojp2YWx1ZSkpOwotICBFWFBFQ1RfVFJVRSgoaXNfY29udmVydGlibGU8bG9uZywgaW50Pjo6dmFs
dWUpKTsKLQotICBFWFBFQ1RfVFJVRSgoaXNfY29udmVydGlibGU8aW50Kiwgdm9pZCo+Ojp2YWx1
ZSkpOwotICBFWFBFQ1RfRkFMU0UoKGlzX2NvbnZlcnRpYmxlPHZvaWQqLCBpbnQqPjo6dmFsdWUp
KTsKLQotICBFWFBFQ1RfVFJVRSgoaXNfY29udmVydGlibGU8RGVyaXZlZCosIEJhc2UqPjo6dmFs
dWUpKTsKLSAgRVhQRUNUX0ZBTFNFKChpc19jb252ZXJ0aWJsZTxCYXNlKiwgRGVyaXZlZCo+Ojp2
YWx1ZSkpOwotICBFWFBFQ1RfVFJVRSgoaXNfY29udmVydGlibGU8RGVyaXZlZCosIGNvbnN0IEJh
c2UqPjo6dmFsdWUpKTsKLSAgRVhQRUNUX0ZBTFNFKChpc19jb252ZXJ0aWJsZTxjb25zdCBEZXJp
dmVkKiwgQmFzZSo+Ojp2YWx1ZSkpOwotI2VuZGlmCi19Ci0KLX0gIC8vIGFub255bW91cyBuYW1l
c3BhY2UKLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVm
Ci19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
dGVzdF91dGlsLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RfdXRpbC5jYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDdhYTFkNzc4MWI1NTQ1OTc2OGM5NmNhN2ZiYWU4NWZlMTBm
ZmQzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdGVzdF91dGlsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzM0NiArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50
b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3Rv
Y29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFu
ZCBvdGhlcnMuCi0KLSNpZmRlZiBfV0lOMzIKLS8vIFZlcmlmeSB0aGF0ICNpbmNsdWRpbmcgd2lu
ZG93cy5oIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nIChlLmcuIGJlY2F1c2UKLS8vIHdpbmRvd3Mu
aCAjZGVmaW5lcyBHZXRNZXNzYWdlKCkgYXMgYSBtYWNybykuCi0jaW5jbHVkZSA8d2luZG93cy5o
PgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdF91dGlsLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvbWVzc2FnZS5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dp
bmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQot
dm9pZCBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMqIG1lc3Nh
Z2UpIHsKLSAgU2V0T3B0aW9uYWxGaWVsZHMobWVzc2FnZSk7Ci0gIEFkZFJlcGVhdGVkRmllbGRz
MShtZXNzYWdlKTsKLSAgQWRkUmVwZWF0ZWRGaWVsZHMyKG1lc3NhZ2UpOwotICBTZXREZWZhdWx0
RmllbGRzKG1lc3NhZ2UpOwotICBTZXRPbmVvZkZpZWxkcyhtZXNzYWdlKTsKLX0KLQotdm9pZCBU
ZXN0VXRpbDo6U2V0T3B0aW9uYWxGaWVsZHModW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyogbWVzc2Fn
ZSkgewotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfaW50MzIgICAoMTAxKTsKLSAgbWVzc2FnZS0+
c2V0X29wdGlvbmFsX2ludDY0ICAgKDEwMik7Ci0gIG1lc3NhZ2UtPnNldF9vcHRpb25hbF91aW50
MzIgICgxMDMpOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfdWludDY0ICAoMTA0KTsKLSAgbWVz
c2FnZS0+c2V0X29wdGlvbmFsX3NpbnQzMiAgKDEwNSk7Ci0gIG1lc3NhZ2UtPnNldF9vcHRpb25h
bF9zaW50NjQgICgxMDYpOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfZml4ZWQzMiAoMTA3KTsK
LSAgbWVzc2FnZS0+c2V0X29wdGlvbmFsX2ZpeGVkNjQgKDEwOCk7Ci0gIG1lc3NhZ2UtPnNldF9v
cHRpb25hbF9zZml4ZWQzMigxMDkpOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfc2ZpeGVkNjQo
MTEwKTsKLSAgbWVzc2FnZS0+c2V0X29wdGlvbmFsX2Zsb2F0ICAgKDExMSk7Ci0gIG1lc3NhZ2Ut
PnNldF9vcHRpb25hbF9kb3VibGUgICgxMTIpOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfYm9v
bCAgICAodHJ1ZSk7Ci0gIG1lc3NhZ2UtPnNldF9vcHRpb25hbF9zdHJpbmcgICgiMTE1Iik7Ci0g
IG1lc3NhZ2UtPnNldF9vcHRpb25hbF9ieXRlcyAgICgiMTE2Iik7Ci0KLSAgbWVzc2FnZS0+bXV0
YWJsZV9vcHRpb25hbGdyb3VwICAgICAgICAgICAgICAgICAoKS0+c2V0X2EoMTE3KTsKLSAgbWVz
c2FnZS0+bXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSAgICAgICAoKS0+c2V0X2JiKDEx
OCk7Ci0gIG1lc3NhZ2UtPm11dGFibGVfb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlICAgICAgKCkt
PnNldF9jKDExOSk7Ci0gIG1lc3NhZ2UtPm11dGFibGVfb3B0aW9uYWxfaW1wb3J0X21lc3NhZ2Ug
ICAgICAgKCktPnNldF9kKDEyMCk7Ci0gIG1lc3NhZ2UtPm11dGFibGVfb3B0aW9uYWxfcHVibGlj
X2ltcG9ydF9tZXNzYWdlKCktPnNldF9lKDEyNik7Ci0gIG1lc3NhZ2UtPm11dGFibGVfb3B0aW9u
YWxfbGF6eV9tZXNzYWdlICAgICAgICAgKCktPnNldF9iYigxMjcpOwotCi0gIG1lc3NhZ2UtPnNl
dF9vcHRpb25hbF9uZXN0ZWRfZW51bSAodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFaKTsKLSAg
bWVzc2FnZS0+c2V0X29wdGlvbmFsX2ZvcmVpZ25fZW51bSh1bml0dGVzdDo6Rk9SRUlHTl9CQVog
ICAgICApOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfaW1wb3J0X2VudW0gKHVuaXR0ZXN0X2lt
cG9ydDo6SU1QT1JUX0JBWik7Ci0KLSAgLy8gU3RyaW5nUGllY2UgYW5kIENvcmQgZmllbGRzIGFy
ZSBvbmx5IGFjY2Vzc2libGUgdmlhIHJlZmxlY3Rpb24gaW4gdGhlCi0gIC8vIG9wZW4gc291cmNl
IHJlbGVhc2U7IHNlZSBjb21tZW50cyBpbiBjb21waWxlci9jcHAvc3RyaW5nX2ZpZWxkLmNjLgot
I2lmbmRlZiBQUk9UT0JVRl9URVNUX05PX0RFU0NSSVBUT1JTCi0gIG1lc3NhZ2UtPkdldFJlZmxl
Y3Rpb24oKS0+U2V0U3RyaW5nKAotICAgIG1lc3NhZ2UsCi0gICAgbWVzc2FnZS0+R2V0RGVzY3Jp
cHRvcigpLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX3N0cmluZ19waWVjZSIpLAotICAgICIx
MjQiKTsKLSAgbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRTdHJpbmcoCi0gICAgbWVzc2Fn
ZSwKLSAgICBtZXNzYWdlLT5HZXREZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9u
YWxfY29yZCIpLAotICAgICIxMjUiKTsKLSNlbmRpZiAgLy8gIVBST1RPQlVGX1RFU1RfTk9fREVT
Q1JJUFRPUlMKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFRlc3RVdGlsOjpBZGRSZXBlYXRl
ZEZpZWxkczEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyogbWVzc2FnZSkgewotICBtZXNzYWdlLT5h
ZGRfcmVwZWF0ZWRfaW50MzIgICAoMjAxKTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2ludDY0
ICAgKDIwMik7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF91aW50MzIgICgyMDMpOwotICBtZXNz
YWdlLT5hZGRfcmVwZWF0ZWRfdWludDY0ICAoMjA0KTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVk
X3NpbnQzMiAgKDIwNSk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9zaW50NjQgICgyMDYpOwot
ICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfZml4ZWQzMiAoMjA3KTsKLSAgbWVzc2FnZS0+YWRkX3Jl
cGVhdGVkX2ZpeGVkNjQgKDIwOCk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9zZml4ZWQzMigy
MDkpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfc2ZpeGVkNjQoMjEwKTsKLSAgbWVzc2FnZS0+
YWRkX3JlcGVhdGVkX2Zsb2F0ICAgKDIxMSk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9kb3Vi
bGUgICgyMTIpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfYm9vbCAgICAodHJ1ZSk7Ci0gIG1l
c3NhZ2UtPmFkZF9yZXBlYXRlZF9zdHJpbmcgICgiMjE1Iik7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBl
YXRlZF9ieXRlcyAgICgiMjE2Iik7Ci0KLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkZ3JvdXAgICAg
ICAgICAgICgpLT5zZXRfYSgyMTcpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfbmVzdGVkX21l
c3NhZ2UgKCktPnNldF9iYigyMTgpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfZm9yZWlnbl9t
ZXNzYWdlKCktPnNldF9jKDIxOSk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9pbXBvcnRfbWVz
c2FnZSAoKS0+c2V0X2QoMjIwKTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2xhenlfbWVzc2Fn
ZSAgICgpLT5zZXRfYmIoMjI3KTsKLQotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfbmVzdGVkX2Vu
dW0gKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkJBUik7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRl
ZF9mb3JlaWduX2VudW0odW5pdHRlc3Q6OkZPUkVJR05fQkFSICAgICAgKTsKLSAgbWVzc2FnZS0+
YWRkX3JlcGVhdGVkX2ltcG9ydF9lbnVtICh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9CQVIpOwot
Ci0jaWZuZGVmIFBST1RPQlVGX1RFU1RfTk9fREVTQ1JJUFRPUlMKLSAgbWVzc2FnZS0+R2V0UmVm
bGVjdGlvbigpLT5BZGRTdHJpbmcoCi0gICAgbWVzc2FnZSwKLSAgICBtZXNzYWdlLT5HZXREZXNj
cmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfc3RyaW5nX3BpZWNlIiksCi0gICAg
IjIyNCIpOwotICBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkFkZFN0cmluZygKLSAgICBtZXNz
YWdlLAotICAgIG1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKCJyZXBl
YXRlZF9jb3JkIiksCi0gICAgIjIyNSIpOwotI2VuZGlmICAvLyAhUFJPVE9CVUZfVEVTVF9OT19E
RVNDUklQVE9SUwotfQotCi12b2lkIFRlc3RVdGlsOjpBZGRSZXBlYXRlZEZpZWxkczIodW5pdHRl
c3Q6OlRlc3RBbGxUeXBlcyogbWVzc2FnZSkgewotICAvLyBBZGQgYSBzZWNvbmQgb25lIG9mIGVh
Y2ggZmllbGQuCi0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9pbnQzMiAgICgzMDEpOwotICBtZXNz
YWdlLT5hZGRfcmVwZWF0ZWRfaW50NjQgICAoMzAyKTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVk
X3VpbnQzMiAgKDMwMyk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF91aW50NjQgICgzMDQpOwot
ICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfc2ludDMyICAoMzA1KTsKLSAgbWVzc2FnZS0+YWRkX3Jl
cGVhdGVkX3NpbnQ2NCAgKDMwNik7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9maXhlZDMyICgz
MDcpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfZml4ZWQ2NCAoMzA4KTsKLSAgbWVzc2FnZS0+
YWRkX3JlcGVhdGVkX3NmaXhlZDMyKDMwOSk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9zZml4
ZWQ2NCgzMTApOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfZmxvYXQgICAoMzExKTsKLSAgbWVz
c2FnZS0+YWRkX3JlcGVhdGVkX2RvdWJsZSAgKDMxMik7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRl
ZF9ib29sICAgIChmYWxzZSk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9zdHJpbmcgICgiMzE1
Iik7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9ieXRlcyAgICgiMzE2Iik7Ci0KLSAgbWVzc2Fn
ZS0+YWRkX3JlcGVhdGVkZ3JvdXAgICAgICAgICAgICgpLT5zZXRfYSgzMTcpOwotICBtZXNzYWdl
LT5hZGRfcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgKCktPnNldF9iYigzMTgpOwotICBtZXNzYWdl
LT5hZGRfcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlKCktPnNldF9jKDMxOSk7Ci0gIG1lc3NhZ2Ut
PmFkZF9yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSAoKS0+c2V0X2QoMzIwKTsKLSAgbWVzc2FnZS0+
YWRkX3JlcGVhdGVkX2xhenlfbWVzc2FnZSAgICgpLT5zZXRfYmIoMzI3KTsKLQotICBtZXNzYWdl
LT5hZGRfcmVwZWF0ZWRfbmVzdGVkX2VudW0gKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkJBWik7
Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9mb3JlaWduX2VudW0odW5pdHRlc3Q6OkZPUkVJR05f
QkFaICAgICAgKTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2ltcG9ydF9lbnVtICh1bml0dGVz
dF9pbXBvcnQ6OklNUE9SVF9CQVopOwotCi0jaWZuZGVmIFBST1RPQlVGX1RFU1RfTk9fREVTQ1JJ
UFRPUlMKLSAgbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5BZGRTdHJpbmcoCi0gICAgbWVzc2Fn
ZSwKLSAgICBtZXNzYWdlLT5HZXREZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0
ZWRfc3RyaW5nX3BpZWNlIiksCi0gICAgIjMyNCIpOwotICBtZXNzYWdlLT5HZXRSZWZsZWN0aW9u
KCktPkFkZFN0cmluZygKLSAgICBtZXNzYWdlLAotICAgIG1lc3NhZ2UtPkdldERlc2NyaXB0b3Io
KS0+RmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9jb3JkIiksCi0gICAgIjMyNSIpOwotI2VuZGlm
ICAvLyAhUFJPVE9CVUZfVEVTVF9OT19ERVNDUklQVE9SUwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LXZvaWQgVGVzdFV0aWw6OlNldERlZmF1bHRGaWVsZHModW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyog
bWVzc2FnZSkgewotICBtZXNzYWdlLT5zZXRfZGVmYXVsdF9pbnQzMiAgICg0MDEpOwotICBtZXNz
YWdlLT5zZXRfZGVmYXVsdF9pbnQ2NCAgICg0MDIpOwotICBtZXNzYWdlLT5zZXRfZGVmYXVsdF91
aW50MzIgICg0MDMpOwotICBtZXNzYWdlLT5zZXRfZGVmYXVsdF91aW50NjQgICg0MDQpOwotICBt
ZXNzYWdlLT5zZXRfZGVmYXVsdF9zaW50MzIgICg0MDUpOwotICBtZXNzYWdlLT5zZXRfZGVmYXVs
dF9zaW50NjQgICg0MDYpOwotICBtZXNzYWdlLT5zZXRfZGVmYXVsdF9maXhlZDMyICg0MDcpOwot
ICBtZXNzYWdlLT5zZXRfZGVmYXVsdF9maXhlZDY0ICg0MDgpOwotICBtZXNzYWdlLT5zZXRfZGVm
YXVsdF9zZml4ZWQzMig0MDkpOwotICBtZXNzYWdlLT5zZXRfZGVmYXVsdF9zZml4ZWQ2NCg0MTAp
OwotICBtZXNzYWdlLT5zZXRfZGVmYXVsdF9mbG9hdCAgICg0MTEpOwotICBtZXNzYWdlLT5zZXRf
ZGVmYXVsdF9kb3VibGUgICg0MTIpOwotICBtZXNzYWdlLT5zZXRfZGVmYXVsdF9ib29sICAgIChm
YWxzZSk7Ci0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0X3N0cmluZyAgKCI0MTUiKTsKLSAgbWVzc2Fn
ZS0+c2V0X2RlZmF1bHRfYnl0ZXMgICAoIjQxNiIpOwotCi0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0
X25lc3RlZF9lbnVtICh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpGT08pOwotICBtZXNzYWdlLT5z
ZXRfZGVmYXVsdF9mb3JlaWduX2VudW0odW5pdHRlc3Q6OkZPUkVJR05fRk9PICAgICAgKTsKLSAg
bWVzc2FnZS0+c2V0X2RlZmF1bHRfaW1wb3J0X2VudW0gKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JU
X0ZPTyk7Ci0KLSNpZm5kZWYgUFJPVE9CVUZfVEVTVF9OT19ERVNDUklQVE9SUwotICBtZXNzYWdl
LT5HZXRSZWZsZWN0aW9uKCktPlNldFN0cmluZygKLSAgICBtZXNzYWdlLAotICAgIG1lc3NhZ2Ut
PkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKCJkZWZhdWx0X3N0cmluZ19waWVjZSIp
LAotICAgICI0MjQiKTsKLSAgbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRTdHJpbmcoCi0g
ICAgbWVzc2FnZSwKLSAgICBtZXNzYWdlLT5HZXREZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFt
ZSgiZGVmYXVsdF9jb3JkIiksCi0gICAgIjQyNSIpOwotI2VuZGlmICAvLyAhUFJPVE9CVUZfVEVT
VF9OT19ERVNDUklQVE9SUwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgVGVzdFV0aWw6Ok1v
ZGlmeVJlcGVhdGVkRmllbGRzKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMqIG1lc3NhZ2UpIHsKLSAg
bWVzc2FnZS0+c2V0X3JlcGVhdGVkX2ludDMyICAgKDEsIDUwMSk7Ci0gIG1lc3NhZ2UtPnNldF9y
ZXBlYXRlZF9pbnQ2NCAgICgxLCA1MDIpOwotICBtZXNzYWdlLT5zZXRfcmVwZWF0ZWRfdWludDMy
ICAoMSwgNTAzKTsKLSAgbWVzc2FnZS0+c2V0X3JlcGVhdGVkX3VpbnQ2NCAgKDEsIDUwNCk7Ci0g
IG1lc3NhZ2UtPnNldF9yZXBlYXRlZF9zaW50MzIgICgxLCA1MDUpOwotICBtZXNzYWdlLT5zZXRf
cmVwZWF0ZWRfc2ludDY0ICAoMSwgNTA2KTsKLSAgbWVzc2FnZS0+c2V0X3JlcGVhdGVkX2ZpeGVk
MzIgKDEsIDUwNyk7Ci0gIG1lc3NhZ2UtPnNldF9yZXBlYXRlZF9maXhlZDY0ICgxLCA1MDgpOwot
ICBtZXNzYWdlLT5zZXRfcmVwZWF0ZWRfc2ZpeGVkMzIoMSwgNTA5KTsKLSAgbWVzc2FnZS0+c2V0
X3JlcGVhdGVkX3NmaXhlZDY0KDEsIDUxMCk7Ci0gIG1lc3NhZ2UtPnNldF9yZXBlYXRlZF9mbG9h
dCAgICgxLCA1MTEpOwotICBtZXNzYWdlLT5zZXRfcmVwZWF0ZWRfZG91YmxlICAoMSwgNTEyKTsK
LSAgbWVzc2FnZS0+c2V0X3JlcGVhdGVkX2Jvb2wgICAgKDEsIHRydWUpOwotICBtZXNzYWdlLT5z
ZXRfcmVwZWF0ZWRfc3RyaW5nICAoMSwgIjUxNSIpOwotICBtZXNzYWdlLT5zZXRfcmVwZWF0ZWRf
Ynl0ZXMgICAoMSwgIjUxNiIpOwotCi0gIG1lc3NhZ2UtPm11dGFibGVfcmVwZWF0ZWRncm91cCAg
ICAgICAgICAgKDEpLT5zZXRfYSg1MTcpOwotICBtZXNzYWdlLT5tdXRhYmxlX3JlcGVhdGVkX25l
c3RlZF9tZXNzYWdlICgxKS0+c2V0X2JiKDUxOCk7Ci0gIG1lc3NhZ2UtPm11dGFibGVfcmVwZWF0
ZWRfZm9yZWlnbl9tZXNzYWdlKDEpLT5zZXRfYyg1MTkpOwotICBtZXNzYWdlLT5tdXRhYmxlX3Jl
cGVhdGVkX2ltcG9ydF9tZXNzYWdlICgxKS0+c2V0X2QoNTIwKTsKLSAgbWVzc2FnZS0+bXV0YWJs
ZV9yZXBlYXRlZF9sYXp5X21lc3NhZ2UgICAoMSktPnNldF9iYig1MjcpOwotCi0gIG1lc3NhZ2Ut
PnNldF9yZXBlYXRlZF9uZXN0ZWRfZW51bSAoMSwgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6Rk9P
KTsKLSAgbWVzc2FnZS0+c2V0X3JlcGVhdGVkX2ZvcmVpZ25fZW51bSgxLCB1bml0dGVzdDo6Rk9S
RUlHTl9GT08gICAgICApOwotICBtZXNzYWdlLT5zZXRfcmVwZWF0ZWRfaW1wb3J0X2VudW0gKDEs
IHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0ZPTyk7Ci0KLSNpZm5kZWYgUFJPVE9CVUZfVEVTVF9O
T19ERVNDUklQVE9SUwotICBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlNldFJlcGVhdGVkU3Ry
aW5nKAotICAgIG1lc3NhZ2UsCi0gICAgbWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpLT5GaW5kRmll
bGRCeU5hbWUoInJlcGVhdGVkX3N0cmluZ19waWVjZSIpLAotICAgIDEsICI1MjQiKTsKLSAgbWVz
c2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRSZXBlYXRlZFN0cmluZygKLSAgICBtZXNzYWdlLAot
ICAgIG1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9j
b3JkIiksCi0gICAgMSwgIjUyNSIpOwotI2VuZGlmICAvLyAhUFJPVE9CVUZfVEVTVF9OT19ERVND
UklQVE9SUwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZvaWQgVGVzdFV0aWw6OlNldE9uZW9mRmllbGRz
KHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMqIG1lc3NhZ2UpIHsKLSAgbWVzc2FnZS0+c2V0X29uZW9m
X3VpbnQzMig2MDEpOwotICBtZXNzYWdlLT5tdXRhYmxlX29uZW9mX25lc3RlZF9tZXNzYWdlKCkt
PnNldF9iYig2MDIpOwotICBtZXNzYWdlLT5zZXRfb25lb2Zfc3RyaW5nKCI2MDMiKTsKLSAgbWVz
c2FnZS0+c2V0X29uZW9mX2J5dGVzKCI2MDQiKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lk
IFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQoY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxUeXBl
cyYgbWVzc2FnZSkgewotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF9pbnQzMiAg
ICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0aW9uYWxfaW50NjQgICAoKSk7Ci0g
IEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX3VpbnQzMiAgKCkpOwotICBFWFBFQ1Rf
VFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF91aW50NjQgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVz
c2FnZS5oYXNfb3B0aW9uYWxfc2ludDMyICAoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFz
X29wdGlvbmFsX3NpbnQ2NCAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25h
bF9maXhlZDMyICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0aW9uYWxfZml4ZWQ2
NCAoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX3NmaXhlZDMyKCkpOwot
ICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF9zZml4ZWQ2NCgpKTsKLSAgRVhQRUNU
X1RSVUUobWVzc2FnZS5oYXNfb3B0aW9uYWxfZmxvYXQgICAoKSk7Ci0gIEVYUEVDVF9UUlVFKG1l
c3NhZ2UuaGFzX29wdGlvbmFsX2RvdWJsZSAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhh
c19vcHRpb25hbF9ib29sICAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0aW9u
YWxfc3RyaW5nICAoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX2J5dGVz
ICAgKCkpOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsZ3JvdXAgICAgICAg
ICAgICAgICAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UgICAgICAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF9m
b3JlaWduX21lc3NhZ2UgICAgICAoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlv
bmFsX2ltcG9ydF9tZXNzYWdlICAgICAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNf
b3B0aW9uYWxfcHVibGljX2ltcG9ydF9tZXNzYWdlKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lmhhc19vcHRpb25hbF9sYXp5X21lc3NhZ2UgICAgICAgICAoKSk7Ci0KLSAgRVhQRUNUX1RSVUUo
bWVzc2FnZS5vcHRpb25hbGdyb3VwICAgICAgICAgICAgICAgICAoKS5oYXNfYSgpKTsKLSAgRVhQ
RUNUX1RSVUUobWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSAgICAgICAoKS5oYXNfYmIo
KSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uub3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlICAgICAg
KCkuaGFzX2MoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uub3B0aW9uYWxfaW1wb3J0X21lc3Nh
Z2UgICAgICAgKCkuaGFzX2QoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uub3B0aW9uYWxfcHVi
bGljX2ltcG9ydF9tZXNzYWdlKCkuaGFzX2UoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uub3B0
aW9uYWxfbGF6eV9tZXNzYWdlICAgICAgICAgKCkuaGFzX2JiKCkpOwotCi0gIEVYUEVDVF9UUlVF
KG1lc3NhZ2UuaGFzX29wdGlvbmFsX25lc3RlZF9lbnVtICgpKTsKLSAgRVhQRUNUX1RSVUUobWVz
c2FnZS5oYXNfb3B0aW9uYWxfZm9yZWlnbl9lbnVtKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lmhhc19vcHRpb25hbF9pbXBvcnRfZW51bSAoKSk7Ci0KLSNpZm5kZWYgUFJPVE9CVUZfVEVTVF9O
T19ERVNDUklQVE9SUwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF9zdHJpbmdf
cGllY2UoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX2NvcmQoKSk7Ci0j
ZW5kaWYKLQotICBFWFBFQ1RfRVEoMTAxICAsIG1lc3NhZ2Uub3B0aW9uYWxfaW50MzIgICAoKSk7
Ci0gIEVYUEVDVF9FUSgxMDIgICwgbWVzc2FnZS5vcHRpb25hbF9pbnQ2NCAgICgpKTsKLSAgRVhQ
RUNUX0VRKDEwMyAgLCBtZXNzYWdlLm9wdGlvbmFsX3VpbnQzMiAgKCkpOwotICBFWFBFQ1RfRVEo
MTA0ICAsIG1lc3NhZ2Uub3B0aW9uYWxfdWludDY0ICAoKSk7Ci0gIEVYUEVDVF9FUSgxMDUgICwg
bWVzc2FnZS5vcHRpb25hbF9zaW50MzIgICgpKTsKLSAgRVhQRUNUX0VRKDEwNiAgLCBtZXNzYWdl
Lm9wdGlvbmFsX3NpbnQ2NCAgKCkpOwotICBFWFBFQ1RfRVEoMTA3ICAsIG1lc3NhZ2Uub3B0aW9u
YWxfZml4ZWQzMiAoKSk7Ci0gIEVYUEVDVF9FUSgxMDggICwgbWVzc2FnZS5vcHRpb25hbF9maXhl
ZDY0ICgpKTsKLSAgRVhQRUNUX0VRKDEwOSAgLCBtZXNzYWdlLm9wdGlvbmFsX3NmaXhlZDMyKCkp
OwotICBFWFBFQ1RfRVEoMTEwICAsIG1lc3NhZ2Uub3B0aW9uYWxfc2ZpeGVkNjQoKSk7Ci0gIEVY
UEVDVF9FUSgxMTEgICwgbWVzc2FnZS5vcHRpb25hbF9mbG9hdCAgICgpKTsKLSAgRVhQRUNUX0VR
KDExMiAgLCBtZXNzYWdlLm9wdGlvbmFsX2RvdWJsZSAgKCkpOwotICBFWFBFQ1RfVFJVRSggICAg
IG1lc3NhZ2Uub3B0aW9uYWxfYm9vbCAgICAoKSk7Ci0gIEVYUEVDVF9FUSgiMTE1IiwgbWVzc2Fn
ZS5vcHRpb25hbF9zdHJpbmcgICgpKTsKLSAgRVhQRUNUX0VRKCIxMTYiLCBtZXNzYWdlLm9wdGlv
bmFsX2J5dGVzICAgKCkpOwotCi0gIEVYUEVDVF9FUSgxMTcsIG1lc3NhZ2Uub3B0aW9uYWxncm91
cCAgICAgICAgICAgICAgICAgICgpLmEoKSk7Ci0gIEVYUEVDVF9FUSgxMTgsIG1lc3NhZ2Uub3B0
aW9uYWxfbmVzdGVkX21lc3NhZ2UgICAgICAgICgpLmJiKCkpOwotICBFWFBFQ1RfRVEoMTE5LCBt
ZXNzYWdlLm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSAgICAgICAoKS5jKCkpOwotICBFWFBFQ1Rf
RVEoMTIwLCBtZXNzYWdlLm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlICAgICAgICAoKS5kKCkpOwot
ICBFWFBFQ1RfRVEoMTI2LCBtZXNzYWdlLm9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZSAo
KS5lKCkpOwotICBFWFBFQ1RfRVEoMTI3LCBtZXNzYWdlLm9wdGlvbmFsX2xhenlfbWVzc2FnZSAg
ICAgICAgICAoKS5iYigpKTsKLQotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6
QkFaLCBtZXNzYWdlLm9wdGlvbmFsX25lc3RlZF9lbnVtICgpKTsKLSAgRVhQRUNUX0VRKHVuaXR0
ZXN0OjpGT1JFSUdOX0JBWiAgICAgICwgbWVzc2FnZS5vcHRpb25hbF9mb3JlaWduX2VudW0oKSk7
Ci0gIEVYUEVDVF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9CQVosIG1lc3NhZ2Uub3B0aW9u
YWxfaW1wb3J0X2VudW0gKCkpOwotCi0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBBU1NFUlRfRVEoMiwg
bWVzc2FnZS5yZXBlYXRlZF9pbnQzMl9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZS5yZXBlYXRlZF9pbnQ2NF9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBl
YXRlZF91aW50MzJfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF91
aW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zaW50MzJf
c2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zaW50NjRfc2l6ZSAg
KCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDMyX3NpemUgKCkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDY0X3NpemUgKCkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQzMl9zaXplKCkpOwotICBBU1NFUlRfRVEo
MiwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQ2NF9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5yZXBlYXRlZF9mbG9hdF9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5y
ZXBlYXRlZF9kb3VibGVfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRl
ZF9ib29sX3NpemUgICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zdHJp
bmdfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9ieXRlc19zaXpl
ICAgKCkpOwotCi0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkZ3JvdXBfc2l6ZSAgICAg
ICAgICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZV9zaXplICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9tZXNz
YWdlX3NpemUoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNz
YWdlX3NpemUgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9sYXp5X21lc3Nh
Z2Vfc2l6ZSAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2Vu
dW1fc2l6ZSAgICAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25f
ZW51bV9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRf
ZW51bV9zaXplICAgICgpKTsKLQotI2lmbmRlZiBQUk9UT0JVRl9URVNUX05PX0RFU0NSSVBUT1JT
Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZ19waWVjZV9zaXplKCkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9jb3JkX3NpemUoKSk7Ci0jZW5kaWYKLQot
ICBFWFBFQ1RfRVEoMjAxICAsIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzIgICAoMCkpOwotICBFWFBF
Q1RfRVEoMjAyICAsIG1lc3NhZ2UucmVwZWF0ZWRfaW50NjQgICAoMCkpOwotICBFWFBFQ1RfRVEo
MjAzICAsIG1lc3NhZ2UucmVwZWF0ZWRfdWludDMyICAoMCkpOwotICBFWFBFQ1RfRVEoMjA0ICAs
IG1lc3NhZ2UucmVwZWF0ZWRfdWludDY0ICAoMCkpOwotICBFWFBFQ1RfRVEoMjA1ICAsIG1lc3Nh
Z2UucmVwZWF0ZWRfc2ludDMyICAoMCkpOwotICBFWFBFQ1RfRVEoMjA2ICAsIG1lc3NhZ2UucmVw
ZWF0ZWRfc2ludDY0ICAoMCkpOwotICBFWFBFQ1RfRVEoMjA3ICAsIG1lc3NhZ2UucmVwZWF0ZWRf
Zml4ZWQzMiAoMCkpOwotICBFWFBFQ1RfRVEoMjA4ICAsIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQ2
NCAoMCkpOwotICBFWFBFQ1RfRVEoMjA5ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkMzIoMCkp
OwotICBFWFBFQ1RfRVEoMjEwICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkNjQoMCkpOwotICBF
WFBFQ1RfRVEoMjExICAsIG1lc3NhZ2UucmVwZWF0ZWRfZmxvYXQgICAoMCkpOwotICBFWFBFQ1Rf
RVEoMjEyICAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlICAoMCkpOwotICBFWFBFQ1RfVFJVRSgg
ICAgIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbCAgICAoMCkpOwotICBFWFBFQ1RfRVEoIjIxNSIsIG1l
c3NhZ2UucmVwZWF0ZWRfc3RyaW5nICAoMCkpOwotICBFWFBFQ1RfRVEoIjIxNiIsIG1lc3NhZ2Uu
cmVwZWF0ZWRfYnl0ZXMgICAoMCkpOwotCi0gIEVYUEVDVF9FUSgyMTcsIG1lc3NhZ2UucmVwZWF0
ZWRncm91cCAgICAgICAgICAgKDApLmEoKSk7Ci0gIEVYUEVDVF9FUSgyMTgsIG1lc3NhZ2UucmVw
ZWF0ZWRfbmVzdGVkX21lc3NhZ2UgKDApLmJiKCkpOwotICBFWFBFQ1RfRVEoMjE5LCBtZXNzYWdl
LnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgwKS5jKCkpOwotICBFWFBFQ1RfRVEoMjIwLCBtZXNz
YWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlICgwKS5kKCkpOwotICBFWFBFQ1RfRVEoMjI3LCBt
ZXNzYWdlLnJlcGVhdGVkX2xhenlfbWVzc2FnZSAgICgwKS5iYigpKTsKLQotCi0gIEVYUEVDVF9F
USh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpCQVIsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2Vu
dW0gKDApKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0JBUiAgICAgICwgbWVzc2Fn
ZS5yZXBlYXRlZF9mb3JlaWduX2VudW0oMCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3RfaW1wb3J0
OjpJTVBPUlRfQkFSLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9lbnVtICgwKSk7Ci0KLSAgRVhQ
RUNUX0VRKDMwMSAgLCBtZXNzYWdlLnJlcGVhdGVkX2ludDMyICAgKDEpKTsKLSAgRVhQRUNUX0VR
KDMwMiAgLCBtZXNzYWdlLnJlcGVhdGVkX2ludDY0ICAgKDEpKTsKLSAgRVhQRUNUX0VRKDMwMyAg
LCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQzMiAgKDEpKTsKLSAgRVhQRUNUX0VRKDMwNCAgLCBtZXNz
YWdlLnJlcGVhdGVkX3VpbnQ2NCAgKDEpKTsKLSAgRVhQRUNUX0VRKDMwNSAgLCBtZXNzYWdlLnJl
cGVhdGVkX3NpbnQzMiAgKDEpKTsKLSAgRVhQRUNUX0VRKDMwNiAgLCBtZXNzYWdlLnJlcGVhdGVk
X3NpbnQ2NCAgKDEpKTsKLSAgRVhQRUNUX0VRKDMwNyAgLCBtZXNzYWdlLnJlcGVhdGVkX2ZpeGVk
MzIgKDEpKTsKLSAgRVhQRUNUX0VRKDMwOCAgLCBtZXNzYWdlLnJlcGVhdGVkX2ZpeGVkNjQgKDEp
KTsKLSAgRVhQRUNUX0VRKDMwOSAgLCBtZXNzYWdlLnJlcGVhdGVkX3NmaXhlZDMyKDEpKTsKLSAg
RVhQRUNUX0VRKDMxMCAgLCBtZXNzYWdlLnJlcGVhdGVkX3NmaXhlZDY0KDEpKTsKLSAgRVhQRUNU
X0VRKDMxMSAgLCBtZXNzYWdlLnJlcGVhdGVkX2Zsb2F0ICAgKDEpKTsKLSAgRVhQRUNUX0VRKDMx
MiAgLCBtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZSAgKDEpKTsKLSAgRVhQRUNUX0ZBTFNFKCAgICBt
ZXNzYWdlLnJlcGVhdGVkX2Jvb2wgICAgKDEpKTsKLSAgRVhQRUNUX0VRKCIzMTUiLCBtZXNzYWdl
LnJlcGVhdGVkX3N0cmluZyAgKDEpKTsKLSAgRVhQRUNUX0VRKCIzMTYiLCBtZXNzYWdlLnJlcGVh
dGVkX2J5dGVzICAgKDEpKTsKLQotICBFWFBFQ1RfRVEoMzE3LCBtZXNzYWdlLnJlcGVhdGVkZ3Jv
dXAgICAgICAgICAgICgxKS5hKCkpOwotICBFWFBFQ1RfRVEoMzE4LCBtZXNzYWdlLnJlcGVhdGVk
X25lc3RlZF9tZXNzYWdlICgxKS5iYigpKTsKLSAgRVhQRUNUX0VRKDMxOSwgbWVzc2FnZS5yZXBl
YXRlZF9mb3JlaWduX21lc3NhZ2UoMSkuYygpKTsKLSAgRVhQRUNUX0VRKDMyMCwgbWVzc2FnZS5y
ZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSAoMSkuZCgpKTsKLSAgRVhQRUNUX0VRKDMyNywgbWVzc2Fn
ZS5yZXBlYXRlZF9sYXp5X21lc3NhZ2UgICAoMSkuYmIoKSk7Ci0KLSAgRVhQRUNUX0VRKHVuaXR0
ZXN0OjpUZXN0QWxsVHlwZXM6OkJBWiwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bSAoMSkp
OwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fQkFaICAgICAgLCBtZXNzYWdlLnJlcGVh
dGVkX2ZvcmVpZ25fZW51bSgxKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9S
VF9CQVosIG1lc3NhZ2UucmVwZWF0ZWRfaW1wb3J0X2VudW0gKDEpKTsKLQotCi0gIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9pbnQzMiAgICgpKTsKLSAg
RVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9pbnQ2NCAgICgpKTsKLSAgRVhQRUNUX1RS
VUUobWVzc2FnZS5oYXNfZGVmYXVsdF91aW50MzIgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2Fn
ZS5oYXNfZGVmYXVsdF91aW50NjQgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVm
YXVsdF9zaW50MzIgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9zaW50
NjQgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9maXhlZDMyICgpKTsK
LSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9maXhlZDY0ICgpKTsKLSAgRVhQRUNU
X1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9zZml4ZWQzMigpKTsKLSAgRVhQRUNUX1RSVUUobWVz
c2FnZS5oYXNfZGVmYXVsdF9zZml4ZWQ2NCgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNf
ZGVmYXVsdF9mbG9hdCAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9k
b3VibGUgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9ib29sICAgICgp
KTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9zdHJpbmcgICgpKTsKLSAgRVhQ
RUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9ieXRlcyAgICgpKTsKLQotICBFWFBFQ1RfVFJV
RShtZXNzYWdlLmhhc19kZWZhdWx0X25lc3RlZF9lbnVtICgpKTsKLSAgRVhQRUNUX1RSVUUobWVz
c2FnZS5oYXNfZGVmYXVsdF9mb3JlaWduX2VudW0oKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uu
aGFzX2RlZmF1bHRfaW1wb3J0X2VudW0gKCkpOwotCi0KLSAgRVhQRUNUX0VRKDQwMSAgLCBtZXNz
YWdlLmRlZmF1bHRfaW50MzIgICAoKSk7Ci0gIEVYUEVDVF9FUSg0MDIgICwgbWVzc2FnZS5kZWZh
dWx0X2ludDY0ICAgKCkpOwotICBFWFBFQ1RfRVEoNDAzICAsIG1lc3NhZ2UuZGVmYXVsdF91aW50
MzIgICgpKTsKLSAgRVhQRUNUX0VRKDQwNCAgLCBtZXNzYWdlLmRlZmF1bHRfdWludDY0ICAoKSk7
Ci0gIEVYUEVDVF9FUSg0MDUgICwgbWVzc2FnZS5kZWZhdWx0X3NpbnQzMiAgKCkpOwotICBFWFBF
Q1RfRVEoNDA2ICAsIG1lc3NhZ2UuZGVmYXVsdF9zaW50NjQgICgpKTsKLSAgRVhQRUNUX0VRKDQw
NyAgLCBtZXNzYWdlLmRlZmF1bHRfZml4ZWQzMiAoKSk7Ci0gIEVYUEVDVF9FUSg0MDggICwgbWVz
c2FnZS5kZWZhdWx0X2ZpeGVkNjQgKCkpOwotICBFWFBFQ1RfRVEoNDA5ICAsIG1lc3NhZ2UuZGVm
YXVsdF9zZml4ZWQzMigpKTsKLSAgRVhQRUNUX0VRKDQxMCAgLCBtZXNzYWdlLmRlZmF1bHRfc2Zp
eGVkNjQoKSk7Ci0gIEVYUEVDVF9FUSg0MTEgICwgbWVzc2FnZS5kZWZhdWx0X2Zsb2F0ICAgKCkp
OwotICBFWFBFQ1RfRVEoNDEyICAsIG1lc3NhZ2UuZGVmYXVsdF9kb3VibGUgICgpKTsKLSAgRVhQ
RUNUX0ZBTFNFKCAgICBtZXNzYWdlLmRlZmF1bHRfYm9vbCAgICAoKSk7Ci0gIEVYUEVDVF9FUSgi
NDE1IiwgbWVzc2FnZS5kZWZhdWx0X3N0cmluZyAgKCkpOwotICBFWFBFQ1RfRVEoIjQxNiIsIG1l
c3NhZ2UuZGVmYXVsdF9ieXRlcyAgICgpKTsKLQotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RB
bGxUeXBlczo6Rk9PLCBtZXNzYWdlLmRlZmF1bHRfbmVzdGVkX2VudW0gKCkpOwotICBFWFBFQ1Rf
RVEodW5pdHRlc3Q6OkZPUkVJR05fRk9PICAgICAgLCBtZXNzYWdlLmRlZmF1bHRfZm9yZWlnbl9l
bnVtKCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfRk9PLCBtZXNzYWdl
LmRlZmF1bHRfaW1wb3J0X2VudW0gKCkpOwotCi0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFz
X29uZW9mX3VpbnQzMiAgICAgICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb25l
b2ZfbmVzdGVkX21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vbmVvZl9z
dHJpbmcgICAgICAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb25lb2ZfYnl0ZXMg
ICAgICAgICAgKCkpOwotCi0gIEVYUEVDVF9FUSgiNjA0IiwgbWVzc2FnZS5vbmVvZl9ieXRlcygp
KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFRlc3RVdGlsOjpFeHBlY3RDbGVhcihjb25z
dCB1bml0dGVzdDo6VGVzdEFsbFR5cGVzJiBtZXNzYWdlKSB7Ci0gIC8vIGhhc19ibGFoKCkgc2hv
dWxkIGluaXRpYWxseSBiZSBmYWxzZSBmb3IgYWxsIG9wdGlvbmFsIGZpZWxkcy4KLSAgRVhQRUNU
X0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX2ludDMyICAgKCkpOwotICBFWFBFQ1RfRkFMU0Uo
bWVzc2FnZS5oYXNfb3B0aW9uYWxfaW50NjQgICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdl
Lmhhc19vcHRpb25hbF91aW50MzIgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29w
dGlvbmFsX3VpbnQ2NCAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxf
c2ludDMyICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vcHRpb25hbF9zaW50NjQg
ICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX2ZpeGVkMzIgKCkpOwot
ICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfZml4ZWQ2NCAoKSk7Ci0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLmhhc19vcHRpb25hbF9zZml4ZWQzMigpKTsKLSAgRVhQRUNUX0ZBTFNF
KG1lc3NhZ2UuaGFzX29wdGlvbmFsX3NmaXhlZDY0KCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5oYXNfb3B0aW9uYWxfZmxvYXQgICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19v
cHRpb25hbF9kb3VibGUgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFs
X2Jvb2wgICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfc3RyaW5n
ICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vcHRpb25hbF9ieXRlcyAgICgpKTsK
LQotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxncm91cCAgICAgICAgICAgICAg
ICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfbmVzdGVkX21lc3Nh
Z2UgICAgICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfZm9yZWln
bl9tZXNzYWdlICAgICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxf
aW1wb3J0X21lc3NhZ2UgICAgICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0
aW9uYWxfcHVibGljX2ltcG9ydF9tZXNzYWdlKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5o
YXNfb3B0aW9uYWxfbGF6eV9tZXNzYWdlICAgICAgICAgKCkpOwotCi0gIEVYUEVDVF9GQUxTRSht
ZXNzYWdlLmhhc19vcHRpb25hbF9uZXN0ZWRfZW51bSAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNz
YWdlLmhhc19vcHRpb25hbF9mb3JlaWduX2VudW0oKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdl
Lmhhc19vcHRpb25hbF9pbXBvcnRfZW51bSAoKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2Uu
aGFzX29wdGlvbmFsX3N0cmluZ19waWVjZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFz
X29wdGlvbmFsX2NvcmQoKSk7Ci0KLSAgLy8gT3B0aW9uYWwgZmllbGRzIHdpdGhvdXQgZGVmYXVs
dHMgYXJlIHNldCB0byB6ZXJvIG9yIHNvbWV0aGluZyBsaWtlIGl0LgotICBFWFBFQ1RfRVEoMCAg
ICAsIG1lc3NhZ2Uub3B0aW9uYWxfaW50MzIgICAoKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVz
c2FnZS5vcHRpb25hbF9pbnQ2NCAgICgpKTsKLSAgRVhQRUNUX0VRKDAgICAgLCBtZXNzYWdlLm9w
dGlvbmFsX3VpbnQzMiAgKCkpOwotICBFWFBFQ1RfRVEoMCAgICAsIG1lc3NhZ2Uub3B0aW9uYWxf
dWludDY0ICAoKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5vcHRpb25hbF9zaW50MzIg
ICgpKTsKLSAgRVhQRUNUX0VRKDAgICAgLCBtZXNzYWdlLm9wdGlvbmFsX3NpbnQ2NCAgKCkpOwot
ICBFWFBFQ1RfRVEoMCAgICAsIG1lc3NhZ2Uub3B0aW9uYWxfZml4ZWQzMiAoKSk7Ci0gIEVYUEVD
VF9FUSgwICAgICwgbWVzc2FnZS5vcHRpb25hbF9maXhlZDY0ICgpKTsKLSAgRVhQRUNUX0VRKDAg
ICAgLCBtZXNzYWdlLm9wdGlvbmFsX3NmaXhlZDMyKCkpOwotICBFWFBFQ1RfRVEoMCAgICAsIG1l
c3NhZ2Uub3B0aW9uYWxfc2ZpeGVkNjQoKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5v
cHRpb25hbF9mbG9hdCAgICgpKTsKLSAgRVhQRUNUX0VRKDAgICAgLCBtZXNzYWdlLm9wdGlvbmFs
X2RvdWJsZSAgKCkpOwotICBFWFBFQ1RfRkFMU0UoICAgIG1lc3NhZ2Uub3B0aW9uYWxfYm9vbCAg
ICAoKSk7Ci0gIEVYUEVDVF9FUSgiIiAgICwgbWVzc2FnZS5vcHRpb25hbF9zdHJpbmcgICgpKTsK
LSAgRVhQRUNUX0VRKCIiICAgLCBtZXNzYWdlLm9wdGlvbmFsX2J5dGVzICAgKCkpOwotCi0gIC8v
IEVtYmVkZGVkIG1lc3NhZ2VzIHNob3VsZCBhbHNvIGJlIGNsZWFyLgotICBFWFBFQ1RfRkFMU0Uo
bWVzc2FnZS5vcHRpb25hbGdyb3VwICAgICAgICAgICAgICAgICAoKS5oYXNfYSgpKTsKLSAgRVhQ
RUNUX0ZBTFNFKG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgICAgICAgKCkuaGFzX2Ji
KCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5vcHRpb25hbF9mb3JlaWduX21lc3NhZ2UgICAg
ICAoKS5oYXNfYygpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2Uub3B0aW9uYWxfaW1wb3J0X21l
c3NhZ2UgICAgICAgKCkuaGFzX2QoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLm9wdGlvbmFs
X3B1YmxpY19pbXBvcnRfbWVzc2FnZSgpLmhhc19lKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5vcHRpb25hbF9sYXp5X21lc3NhZ2UgICAgICAgICAoKS5oYXNfYmIoKSk7Ci0KLSAgRVhQRUNU
X0VRKDAsIG1lc3NhZ2Uub3B0aW9uYWxncm91cCAgICAgICAgICAgICAgICAgKCkuYSgpKTsKLSAg
RVhQRUNUX0VRKDAsIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgICAgICAgKCkuYmIo
KSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSAgICAg
ICgpLmMoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdl
ICAgICAgICgpLmQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm9wdGlvbmFsX3B1YmxpY19p
bXBvcnRfbWVzc2FnZSgpLmUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm9wdGlvbmFsX2xh
enlfbWVzc2FnZSAgICAgICAgICgpLmJiKCkpOwotCi0gIC8vIEVudW1zIHdpdGhvdXQgZGVmYXVs
dHMgYXJlIHNldCB0byB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlIGVudW0uCi0gIEVYUEVDVF9FUSh1
bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpGT08sIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVkX2VudW0g
KCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fRk9PICAgICAgLCBtZXNzYWdlLm9w
dGlvbmFsX2ZvcmVpZ25fZW51bSgpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6SU1Q
T1JUX0ZPTywgbWVzc2FnZS5vcHRpb25hbF9pbXBvcnRfZW51bSAoKSk7Ci0KLQotICAvLyBSZXBl
YXRlZCBmaWVsZHMgYXJlIGVtcHR5LgotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9p
bnQzMl9zaXplICAgKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2NF9z
aXplICAgKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF91aW50MzJfc2l6ZSAg
KCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF91aW50NjRfc2l6ZSAgKCkpOwot
ICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9zaW50MzJfc2l6ZSAgKCkpOwotICBFWFBF
Q1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9zaW50NjRfc2l6ZSAgKCkpOwotICBFWFBFQ1RfRVEo
MCwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDMyX3NpemUgKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVz
c2FnZS5yZXBlYXRlZF9maXhlZDY0X3NpemUgKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5y
ZXBlYXRlZF9zZml4ZWQzMl9zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRl
ZF9zZml4ZWQ2NF9zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9mbG9h
dF9zaXplICAgKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9kb3VibGVfc2l6
ZSAgKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9ib29sX3NpemUgICAgKCkp
OwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdfc2l6ZSAgKCkpOwotICBF
WFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9ieXRlc19zaXplICAgKCkpOwotCi0gIEVYUEVD
VF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkZ3JvdXBfc2l6ZSAgICAgICAgICAgKCkpOwotICBFWFBF
Q1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9zaXplICgpKTsKLSAgRVhQ
RUNUX0VRKDAsIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX3NpemUoKSk7Ci0gIEVY
UEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX3NpemUgKCkpOwotICBF
WFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9sYXp5X21lc3NhZ2Vfc2l6ZSAgICgpKTsKLSAg
RVhQRUNUX0VRKDAsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW1fc2l6ZSAgICAoKSk7Ci0g
IEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9zaXplICAgKCkpOwot
ICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfZW51bV9zaXplICAgICgpKTsK
LQotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdfcGllY2Vfc2l6ZSgpKTsK
LSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UucmVwZWF0ZWRfY29yZF9zaXplKCkpOwotCi0gIC8vIGhh
c19ibGFoKCkgc2hvdWxkIGFsc28gYmUgZmFsc2UgZm9yIGFsbCBkZWZhdWx0IGZpZWxkcy4KLSAg
RVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2RlZmF1bHRfaW50MzIgICAoKSk7Ci0gIEVYUEVDVF9G
QUxTRShtZXNzYWdlLmhhc19kZWZhdWx0X2ludDY0ICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVz
c2FnZS5oYXNfZGVmYXVsdF91aW50MzIgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFz
X2RlZmF1bHRfdWludDY0ICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19kZWZhdWx0
X3NpbnQzMiAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZGVmYXVsdF9zaW50NjQg
ICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2RlZmF1bHRfZml4ZWQzMiAoKSk7Ci0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19kZWZhdWx0X2ZpeGVkNjQgKCkpOwotICBFWFBFQ1Rf
RkFMU0UobWVzc2FnZS5oYXNfZGVmYXVsdF9zZml4ZWQzMigpKTsKLSAgRVhQRUNUX0ZBTFNFKG1l
c3NhZ2UuaGFzX2RlZmF1bHRfc2ZpeGVkNjQoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhh
c19kZWZhdWx0X2Zsb2F0ICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZGVmYXVs
dF9kb3VibGUgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2RlZmF1bHRfYm9vbCAg
ICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19kZWZhdWx0X3N0cmluZyAgKCkpOwot
ICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZGVmYXVsdF9ieXRlcyAgICgpKTsKLQotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS5oYXNfZGVmYXVsdF9uZXN0ZWRfZW51bSAoKSk7Ci0gIEVYUEVDVF9G
QUxTRShtZXNzYWdlLmhhc19kZWZhdWx0X2ZvcmVpZ25fZW51bSgpKTsKLSAgRVhQRUNUX0ZBTFNF
KG1lc3NhZ2UuaGFzX2RlZmF1bHRfaW1wb3J0X2VudW0gKCkpOwotCi0KLSAgLy8gRmllbGRzIHdp
dGggZGVmYXVsdHMgaGF2ZSB0aGVpciBkZWZhdWx0IHZhbHVlcyAoZHVoKS4KLSAgRVhQRUNUX0VR
KCA0MSAgICAsIG1lc3NhZ2UuZGVmYXVsdF9pbnQzMiAgICgpKTsKLSAgRVhQRUNUX0VRKCA0MiAg
ICAsIG1lc3NhZ2UuZGVmYXVsdF9pbnQ2NCAgICgpKTsKLSAgRVhQRUNUX0VRKCA0MyAgICAsIG1l
c3NhZ2UuZGVmYXVsdF91aW50MzIgICgpKTsKLSAgRVhQRUNUX0VRKCA0NCAgICAsIG1lc3NhZ2Uu
ZGVmYXVsdF91aW50NjQgICgpKTsKLSAgRVhQRUNUX0VRKC00NSAgICAsIG1lc3NhZ2UuZGVmYXVs
dF9zaW50MzIgICgpKTsKLSAgRVhQRUNUX0VRKCA0NiAgICAsIG1lc3NhZ2UuZGVmYXVsdF9zaW50
NjQgICgpKTsKLSAgRVhQRUNUX0VRKCA0NyAgICAsIG1lc3NhZ2UuZGVmYXVsdF9maXhlZDMyICgp
KTsKLSAgRVhQRUNUX0VRKCA0OCAgICAsIG1lc3NhZ2UuZGVmYXVsdF9maXhlZDY0ICgpKTsKLSAg
RVhQRUNUX0VRKCA0OSAgICAsIG1lc3NhZ2UuZGVmYXVsdF9zZml4ZWQzMigpKTsKLSAgRVhQRUNU
X0VRKC01MCAgICAsIG1lc3NhZ2UuZGVmYXVsdF9zZml4ZWQ2NCgpKTsKLSAgRVhQRUNUX0VRKCA1
MS41ICAsIG1lc3NhZ2UuZGVmYXVsdF9mbG9hdCAgICgpKTsKLSAgRVhQRUNUX0VRKCA1MmUzICAs
IG1lc3NhZ2UuZGVmYXVsdF9kb3VibGUgICgpKTsKLSAgRVhQRUNUX1RSVUUoICAgICAgIG1lc3Nh
Z2UuZGVmYXVsdF9ib29sICAgICgpKTsKLSAgRVhQRUNUX0VRKCJoZWxsbyIsIG1lc3NhZ2UuZGVm
YXVsdF9zdHJpbmcgICgpKTsKLSAgRVhQRUNUX0VRKCJ3b3JsZCIsIG1lc3NhZ2UuZGVmYXVsdF9i
eXRlcyAgICgpKTsKLQotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFSLCBt
ZXNzYWdlLmRlZmF1bHRfbmVzdGVkX2VudW0gKCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZP
UkVJR05fQkFSICAgICAgLCBtZXNzYWdlLmRlZmF1bHRfZm9yZWlnbl9lbnVtKCkpOwotICBFWFBF
Q1RfRVEodW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfQkFSLCBtZXNzYWdlLmRlZmF1bHRfaW1wb3J0
X2VudW0gKCkpOwotCi0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29uZW9mX3VpbnQzMiAg
ICAgICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb25lb2ZfbmVzdGVkX21lc3Nh
Z2UoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vbmVvZl9zdHJpbmcgICAgICAgICgp
KTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29uZW9mX2J5dGVzICAgICAgICAgKCkpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgVGVzdFV0aWw6OkV4cGVjdFJlcGVhdGVkRmllbGRz
TW9kaWZpZWQoCi0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyYgbWVzc2FnZSkgewot
ICAvLyBNb2RpZnlSZXBlYXRlZEZpZWxkcyBvbmx5IHNldHMgdGhlIHNlY29uZCByZXBlYXRlZCBl
bGVtZW50IG9mIGVhY2gKLSAgLy8gZmllbGQuICBJbiBhZGRpdGlvbiB0byB2ZXJpZnlpbmcgdGhp
cywgd2UgYWxzbyB2ZXJpZnkgdGhhdCB0aGUgZmlyc3QKLSAgLy8gZWxlbWVudCBhbmQgc2l6ZSB3
ZXJlICpub3QqIG1vZGlmaWVkLgotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9pbnQz
Ml9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2NF9zaXpl
ICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF91aW50MzJfc2l6ZSAgKCkp
OwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF91aW50NjRfc2l6ZSAgKCkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zaW50MzJfc2l6ZSAgKCkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zaW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwg
bWVzc2FnZS5yZXBlYXRlZF9maXhlZDMyX3NpemUgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZS5yZXBlYXRlZF9maXhlZDY0X3NpemUgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBl
YXRlZF9zZml4ZWQzMl9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9z
Zml4ZWQ2NF9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9mbG9hdF9z
aXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9kb3VibGVfc2l6ZSAg
KCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9ib29sX3NpemUgICAgKCkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdfc2l6ZSAgKCkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9ieXRlc19zaXplICAgKCkpOwotCi0gIEFTU0VSVF9F
USgyLCBtZXNzYWdlLnJlcGVhdGVkZ3JvdXBfc2l6ZSAgICAgICAgICAgKCkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9zaXplICgpKTsKLSAgQVNTRVJU
X0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX3NpemUoKSk7Ci0gIEFTU0VS
VF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX3NpemUgKCkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9sYXp5X21lc3NhZ2Vfc2l6ZSAgICgpKTsKLSAgQVNT
RVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW1fc2l6ZSAgICAoKSk7Ci0gIEFT
U0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9zaXplICAgKCkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfZW51bV9zaXplICAgICgpKTsKLQot
I2lmbmRlZiBQUk9UT0JVRl9URVNUX05PX0RFU0NSSVBUT1JTCi0gIEFTU0VSVF9FUSgyLCBtZXNz
YWdlLnJlcGVhdGVkX3N0cmluZ19waWVjZV9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZS5yZXBlYXRlZF9jb3JkX3NpemUoKSk7Ci0jZW5kaWYKLQotICBFWFBFQ1RfRVEoMjAxICAsIG1l
c3NhZ2UucmVwZWF0ZWRfaW50MzIgICAoMCkpOwotICBFWFBFQ1RfRVEoMjAyICAsIG1lc3NhZ2Uu
cmVwZWF0ZWRfaW50NjQgICAoMCkpOwotICBFWFBFQ1RfRVEoMjAzICAsIG1lc3NhZ2UucmVwZWF0
ZWRfdWludDMyICAoMCkpOwotICBFWFBFQ1RfRVEoMjA0ICAsIG1lc3NhZ2UucmVwZWF0ZWRfdWlu
dDY0ICAoMCkpOwotICBFWFBFQ1RfRVEoMjA1ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDMyICAo
MCkpOwotICBFWFBFQ1RfRVEoMjA2ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDY0ICAoMCkpOwot
ICBFWFBFQ1RfRVEoMjA3ICAsIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQzMiAoMCkpOwotICBFWFBF
Q1RfRVEoMjA4ICAsIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQ2NCAoMCkpOwotICBFWFBFQ1RfRVEo
MjA5ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkMzIoMCkpOwotICBFWFBFQ1RfRVEoMjEwICAs
IG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkNjQoMCkpOwotICBFWFBFQ1RfRVEoMjExICAsIG1lc3Nh
Z2UucmVwZWF0ZWRfZmxvYXQgICAoMCkpOwotICBFWFBFQ1RfRVEoMjEyICAsIG1lc3NhZ2UucmVw
ZWF0ZWRfZG91YmxlICAoMCkpOwotICBFWFBFQ1RfVFJVRSggICAgIG1lc3NhZ2UucmVwZWF0ZWRf
Ym9vbCAgICAoMCkpOwotICBFWFBFQ1RfRVEoIjIxNSIsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5n
ICAoMCkpOwotICBFWFBFQ1RfRVEoIjIxNiIsIG1lc3NhZ2UucmVwZWF0ZWRfYnl0ZXMgICAoMCkp
OwotCi0gIEVYUEVDVF9FUSgyMTcsIG1lc3NhZ2UucmVwZWF0ZWRncm91cCAgICAgICAgICAgKDAp
LmEoKSk7Ci0gIEVYUEVDVF9FUSgyMTgsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Ug
KDApLmJiKCkpOwotICBFWFBFQ1RfRVEoMjE5LCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVz
c2FnZSgwKS5jKCkpOwotICBFWFBFQ1RfRVEoMjIwLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9t
ZXNzYWdlICgwKS5kKCkpOwotICBFWFBFQ1RfRVEoMjI3LCBtZXNzYWdlLnJlcGVhdGVkX2xhenlf
bWVzc2FnZSAgICgwKS5iYigpKTsKLQotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBl
czo6QkFSLCBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9lbnVtICgwKSk7Ci0gIEVYUEVDVF9FUSh1
bml0dGVzdDo6Rk9SRUlHTl9CQVIgICAgICAsIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9lbnVt
KDApKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0JBUiwgbWVzc2FnZS5y
ZXBlYXRlZF9pbXBvcnRfZW51bSAoMCkpOwotCi0KLSAgLy8gQWN0dWFsbHkgdmVyaWZ5IHRoZSBz
ZWNvbmQgKG1vZGlmaWVkKSBlbGVtZW50cyBub3cuCi0gIEVYUEVDVF9FUSg1MDEgICwgbWVzc2Fn
ZS5yZXBlYXRlZF9pbnQzMiAgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDIgICwgbWVzc2FnZS5yZXBl
YXRlZF9pbnQ2NCAgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDMgICwgbWVzc2FnZS5yZXBlYXRlZF91
aW50MzIgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDQgICwgbWVzc2FnZS5yZXBlYXRlZF91aW50NjQg
ICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDUgICwgbWVzc2FnZS5yZXBlYXRlZF9zaW50MzIgICgxKSk7
Ci0gIEVYUEVDVF9FUSg1MDYgICwgbWVzc2FnZS5yZXBlYXRlZF9zaW50NjQgICgxKSk7Ci0gIEVY
UEVDVF9FUSg1MDcgICwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDMyICgxKSk7Ci0gIEVYUEVDVF9F
USg1MDggICwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDY0ICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDkg
ICwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQzMigxKSk7Ci0gIEVYUEVDVF9FUSg1MTAgICwgbWVz
c2FnZS5yZXBlYXRlZF9zZml4ZWQ2NCgxKSk7Ci0gIEVYUEVDVF9FUSg1MTEgICwgbWVzc2FnZS5y
ZXBlYXRlZF9mbG9hdCAgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MTIgICwgbWVzc2FnZS5yZXBlYXRl
ZF9kb3VibGUgICgxKSk7Ci0gIEVYUEVDVF9UUlVFKCAgICAgbWVzc2FnZS5yZXBlYXRlZF9ib29s
ICAgICgxKSk7Ci0gIEVYUEVDVF9FUSgiNTE1IiwgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmcgICgx
KSk7Ci0gIEVYUEVDVF9FUSgiNTE2IiwgbWVzc2FnZS5yZXBlYXRlZF9ieXRlcyAgICgxKSk7Ci0K
LSAgRVhQRUNUX0VRKDUxNywgbWVzc2FnZS5yZXBlYXRlZGdyb3VwICAgICAgICAgICAoMSkuYSgp
KTsKLSAgRVhQRUNUX0VRKDUxOCwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSAoMSku
YmIoKSk7Ci0gIEVYUEVDVF9FUSg1MTksIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdl
KDEpLmMoKSk7Ci0gIEVYUEVDVF9FUSg1MjAsIG1lc3NhZ2UucmVwZWF0ZWRfaW1wb3J0X21lc3Nh
Z2UgKDEpLmQoKSk7Ci0gIEVYUEVDVF9FUSg1MjcsIG1lc3NhZ2UucmVwZWF0ZWRfbGF6eV9tZXNz
YWdlICAgKDEpLmJiKCkpOwotCi0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpG
T08sIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW0gKDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0
ZXN0OjpGT1JFSUdOX0ZPTyAgICAgICwgbWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX2VudW0oMSkp
OwotICBFWFBFQ1RfRVEodW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfRk9PLCBtZXNzYWdlLnJlcGVh
dGVkX2ltcG9ydF9lbnVtICgxKSk7Ci0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFRlc3RV
dGlsOjpTZXRQYWNrZWRGaWVsZHModW5pdHRlc3Q6OlRlc3RQYWNrZWRUeXBlcyogbWVzc2FnZSkg
ewotICBtZXNzYWdlLT5hZGRfcGFja2VkX2ludDMyICAgKDYwMSk7Ci0gIG1lc3NhZ2UtPmFkZF9w
YWNrZWRfaW50NjQgICAoNjAyKTsKLSAgbWVzc2FnZS0+YWRkX3BhY2tlZF91aW50MzIgICg2MDMp
OwotICBtZXNzYWdlLT5hZGRfcGFja2VkX3VpbnQ2NCAgKDYwNCk7Ci0gIG1lc3NhZ2UtPmFkZF9w
YWNrZWRfc2ludDMyICAoNjA1KTsKLSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9zaW50NjQgICg2MDYp
OwotICBtZXNzYWdlLT5hZGRfcGFja2VkX2ZpeGVkMzIgKDYwNyk7Ci0gIG1lc3NhZ2UtPmFkZF9w
YWNrZWRfZml4ZWQ2NCAoNjA4KTsKLSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9zZml4ZWQzMig2MDkp
OwotICBtZXNzYWdlLT5hZGRfcGFja2VkX3NmaXhlZDY0KDYxMCk7Ci0gIG1lc3NhZ2UtPmFkZF9w
YWNrZWRfZmxvYXQgICAoNjExKTsKLSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9kb3VibGUgICg2MTIp
OwotICBtZXNzYWdlLT5hZGRfcGFja2VkX2Jvb2wgICAgKHRydWUpOwotICBtZXNzYWdlLT5hZGRf
cGFja2VkX2VudW0gICAgKHVuaXR0ZXN0OjpGT1JFSUdOX0JBUik7Ci0gIC8vIGFkZCBhIHNlY29u
ZCBvbmUgb2YgZWFjaCBmaWVsZAotICBtZXNzYWdlLT5hZGRfcGFja2VkX2ludDMyICAgKDcwMSk7
Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRfaW50NjQgICAoNzAyKTsKLSAgbWVzc2FnZS0+YWRkX3Bh
Y2tlZF91aW50MzIgICg3MDMpOwotICBtZXNzYWdlLT5hZGRfcGFja2VkX3VpbnQ2NCAgKDcwNCk7
Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRfc2ludDMyICAoNzA1KTsKLSAgbWVzc2FnZS0+YWRkX3Bh
Y2tlZF9zaW50NjQgICg3MDYpOwotICBtZXNzYWdlLT5hZGRfcGFja2VkX2ZpeGVkMzIgKDcwNyk7
Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRfZml4ZWQ2NCAoNzA4KTsKLSAgbWVzc2FnZS0+YWRkX3Bh
Y2tlZF9zZml4ZWQzMig3MDkpOwotICBtZXNzYWdlLT5hZGRfcGFja2VkX3NmaXhlZDY0KDcxMCk7
Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRfZmxvYXQgICAoNzExKTsKLSAgbWVzc2FnZS0+YWRkX3Bh
Y2tlZF9kb3VibGUgICg3MTIpOwotICBtZXNzYWdlLT5hZGRfcGFja2VkX2Jvb2wgICAgKGZhbHNl
KTsKLSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9lbnVtICAgICh1bml0dGVzdDo6Rk9SRUlHTl9CQVop
OwotfQotCi12b2lkIFRlc3RVdGlsOjpTZXRVbnBhY2tlZEZpZWxkcyh1bml0dGVzdDo6VGVzdFVu
cGFja2VkVHlwZXMqIG1lc3NhZ2UpIHsKLSAgLy8gVGhlIHZhbHVlcyBhcHBsaWVkIGhlcmUgbXVz
dCBtYXRjaCB0aG9zZSBvZiBTZXRQYWNrZWRGaWVsZHMuCi0KLSAgbWVzc2FnZS0+YWRkX3VucGFj
a2VkX2ludDMyICAgKDYwMSk7Ci0gIG1lc3NhZ2UtPmFkZF91bnBhY2tlZF9pbnQ2NCAgICg2MDIp
OwotICBtZXNzYWdlLT5hZGRfdW5wYWNrZWRfdWludDMyICAoNjAzKTsKLSAgbWVzc2FnZS0+YWRk
X3VucGFja2VkX3VpbnQ2NCAgKDYwNCk7Ci0gIG1lc3NhZ2UtPmFkZF91bnBhY2tlZF9zaW50MzIg
ICg2MDUpOwotICBtZXNzYWdlLT5hZGRfdW5wYWNrZWRfc2ludDY0ICAoNjA2KTsKLSAgbWVzc2Fn
ZS0+YWRkX3VucGFja2VkX2ZpeGVkMzIgKDYwNyk7Ci0gIG1lc3NhZ2UtPmFkZF91bnBhY2tlZF9m
aXhlZDY0ICg2MDgpOwotICBtZXNzYWdlLT5hZGRfdW5wYWNrZWRfc2ZpeGVkMzIoNjA5KTsKLSAg
bWVzc2FnZS0+YWRkX3VucGFja2VkX3NmaXhlZDY0KDYxMCk7Ci0gIG1lc3NhZ2UtPmFkZF91bnBh
Y2tlZF9mbG9hdCAgICg2MTEpOwotICBtZXNzYWdlLT5hZGRfdW5wYWNrZWRfZG91YmxlICAoNjEy
KTsKLSAgbWVzc2FnZS0+YWRkX3VucGFja2VkX2Jvb2wgICAgKHRydWUpOwotICBtZXNzYWdlLT5h
ZGRfdW5wYWNrZWRfZW51bSAgICAodW5pdHRlc3Q6OkZPUkVJR05fQkFSKTsKLSAgLy8gYWRkIGEg
c2Vjb25kIG9uZSBvZiBlYWNoIGZpZWxkCi0gIG1lc3NhZ2UtPmFkZF91bnBhY2tlZF9pbnQzMiAg
ICg3MDEpOwotICBtZXNzYWdlLT5hZGRfdW5wYWNrZWRfaW50NjQgICAoNzAyKTsKLSAgbWVzc2Fn
ZS0+YWRkX3VucGFja2VkX3VpbnQzMiAgKDcwMyk7Ci0gIG1lc3NhZ2UtPmFkZF91bnBhY2tlZF91
aW50NjQgICg3MDQpOwotICBtZXNzYWdlLT5hZGRfdW5wYWNrZWRfc2ludDMyICAoNzA1KTsKLSAg
bWVzc2FnZS0+YWRkX3VucGFja2VkX3NpbnQ2NCAgKDcwNik7Ci0gIG1lc3NhZ2UtPmFkZF91bnBh
Y2tlZF9maXhlZDMyICg3MDcpOwotICBtZXNzYWdlLT5hZGRfdW5wYWNrZWRfZml4ZWQ2NCAoNzA4
KTsKLSAgbWVzc2FnZS0+YWRkX3VucGFja2VkX3NmaXhlZDMyKDcwOSk7Ci0gIG1lc3NhZ2UtPmFk
ZF91bnBhY2tlZF9zZml4ZWQ2NCg3MTApOwotICBtZXNzYWdlLT5hZGRfdW5wYWNrZWRfZmxvYXQg
ICAoNzExKTsKLSAgbWVzc2FnZS0+YWRkX3VucGFja2VkX2RvdWJsZSAgKDcxMik7Ci0gIG1lc3Nh
Z2UtPmFkZF91bnBhY2tlZF9ib29sICAgIChmYWxzZSk7Ci0gIG1lc3NhZ2UtPmFkZF91bnBhY2tl
ZF9lbnVtICAgICh1bml0dGVzdDo6Rk9SRUlHTl9CQVopOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LXZvaWQgVGVzdFV0aWw6Ok1vZGlmeVBhY2tlZEZpZWxkcyh1bml0dGVzdDo6VGVzdFBhY2tlZFR5
cGVzKiBtZXNzYWdlKSB7Ci0gIG1lc3NhZ2UtPnNldF9wYWNrZWRfaW50MzIgICAoMSwgODAxKTsK
LSAgbWVzc2FnZS0+c2V0X3BhY2tlZF9pbnQ2NCAgICgxLCA4MDIpOwotICBtZXNzYWdlLT5zZXRf
cGFja2VkX3VpbnQzMiAgKDEsIDgwMyk7Ci0gIG1lc3NhZ2UtPnNldF9wYWNrZWRfdWludDY0ICAo
MSwgODA0KTsKLSAgbWVzc2FnZS0+c2V0X3BhY2tlZF9zaW50MzIgICgxLCA4MDUpOwotICBtZXNz
YWdlLT5zZXRfcGFja2VkX3NpbnQ2NCAgKDEsIDgwNik7Ci0gIG1lc3NhZ2UtPnNldF9wYWNrZWRf
Zml4ZWQzMiAoMSwgODA3KTsKLSAgbWVzc2FnZS0+c2V0X3BhY2tlZF9maXhlZDY0ICgxLCA4MDgp
OwotICBtZXNzYWdlLT5zZXRfcGFja2VkX3NmaXhlZDMyKDEsIDgwOSk7Ci0gIG1lc3NhZ2UtPnNl
dF9wYWNrZWRfc2ZpeGVkNjQoMSwgODEwKTsKLSAgbWVzc2FnZS0+c2V0X3BhY2tlZF9mbG9hdCAg
ICgxLCA4MTEpOwotICBtZXNzYWdlLT5zZXRfcGFja2VkX2RvdWJsZSAgKDEsIDgxMik7Ci0gIG1l
c3NhZ2UtPnNldF9wYWNrZWRfYm9vbCAgICAoMSwgdHJ1ZSk7Ci0gIG1lc3NhZ2UtPnNldF9wYWNr
ZWRfZW51bSAgICAoMSwgdW5pdHRlc3Q6OkZPUkVJR05fRk9PKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi12b2lkIFRlc3RVdGlsOjpFeHBlY3RQYWNrZWRGaWVsZHNTZXQoY29uc3QgdW5pdHRlc3Q6
OlRlc3RQYWNrZWRUeXBlcyYgbWVzc2FnZSkgewotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNr
ZWRfaW50MzJfc2l6ZSAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX2ludDY0
X3NpemUgICAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF91aW50MzJfc2l6ZSAg
KCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfdWludDY0X3NpemUgICgpKTsKLSAg
QVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX3NpbnQzMl9zaXplICAoKSk7Ci0gIEFTU0VSVF9F
USgyLCBtZXNzYWdlLnBhY2tlZF9zaW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5wYWNrZWRfZml4ZWQzMl9zaXplICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFj
a2VkX2ZpeGVkNjRfc2l6ZSAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF9zZml4
ZWQzMl9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfc2ZpeGVkNjRfc2l6
ZSgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX2Zsb2F0X3NpemUgICAoKSk7Ci0g
IEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF9kb3VibGVfc2l6ZSAgKCkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5wYWNrZWRfYm9vbF9zaXplICAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1l
c3NhZ2UucGFja2VkX2VudW1fc2l6ZSAgICAoKSk7Ci0KLSAgRVhQRUNUX0VRKDYwMSAgLCBtZXNz
YWdlLnBhY2tlZF9pbnQzMiAgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDIgICwgbWVzc2FnZS5wYWNr
ZWRfaW50NjQgICAoMCkpOwotICBFWFBFQ1RfRVEoNjAzICAsIG1lc3NhZ2UucGFja2VkX3VpbnQz
MiAgKDApKTsKLSAgRVhQRUNUX0VRKDYwNCAgLCBtZXNzYWdlLnBhY2tlZF91aW50NjQgICgwKSk7
Ci0gIEVYUEVDVF9FUSg2MDUgICwgbWVzc2FnZS5wYWNrZWRfc2ludDMyICAoMCkpOwotICBFWFBF
Q1RfRVEoNjA2ICAsIG1lc3NhZ2UucGFja2VkX3NpbnQ2NCAgKDApKTsKLSAgRVhQRUNUX0VRKDYw
NyAgLCBtZXNzYWdlLnBhY2tlZF9maXhlZDMyICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDggICwgbWVz
c2FnZS5wYWNrZWRfZml4ZWQ2NCAoMCkpOwotICBFWFBFQ1RfRVEoNjA5ICAsIG1lc3NhZ2UucGFj
a2VkX3NmaXhlZDMyKDApKTsKLSAgRVhQRUNUX0VRKDYxMCAgLCBtZXNzYWdlLnBhY2tlZF9zZml4
ZWQ2NCgwKSk7Ci0gIEVYUEVDVF9FUSg2MTEgICwgbWVzc2FnZS5wYWNrZWRfZmxvYXQgICAoMCkp
OwotICBFWFBFQ1RfRVEoNjEyICAsIG1lc3NhZ2UucGFja2VkX2RvdWJsZSAgKDApKTsKLSAgRVhQ
RUNUX1RSVUUoICAgICBtZXNzYWdlLnBhY2tlZF9ib29sICAgICgwKSk7Ci0gIEVYUEVDVF9FUSh1
bml0dGVzdDo6Rk9SRUlHTl9CQVIsIG1lc3NhZ2UucGFja2VkX2VudW0oMCkpOwotCi0gIEVYUEVD
VF9FUSg3MDEgICwgbWVzc2FnZS5wYWNrZWRfaW50MzIgICAoMSkpOwotICBFWFBFQ1RfRVEoNzAy
ICAsIG1lc3NhZ2UucGFja2VkX2ludDY0ICAgKDEpKTsKLSAgRVhQRUNUX0VRKDcwMyAgLCBtZXNz
YWdlLnBhY2tlZF91aW50MzIgICgxKSk7Ci0gIEVYUEVDVF9FUSg3MDQgICwgbWVzc2FnZS5wYWNr
ZWRfdWludDY0ICAoMSkpOwotICBFWFBFQ1RfRVEoNzA1ICAsIG1lc3NhZ2UucGFja2VkX3NpbnQz
MiAgKDEpKTsKLSAgRVhQRUNUX0VRKDcwNiAgLCBtZXNzYWdlLnBhY2tlZF9zaW50NjQgICgxKSk7
Ci0gIEVYUEVDVF9FUSg3MDcgICwgbWVzc2FnZS5wYWNrZWRfZml4ZWQzMiAoMSkpOwotICBFWFBF
Q1RfRVEoNzA4ICAsIG1lc3NhZ2UucGFja2VkX2ZpeGVkNjQgKDEpKTsKLSAgRVhQRUNUX0VRKDcw
OSAgLCBtZXNzYWdlLnBhY2tlZF9zZml4ZWQzMigxKSk7Ci0gIEVYUEVDVF9FUSg3MTAgICwgbWVz
c2FnZS5wYWNrZWRfc2ZpeGVkNjQoMSkpOwotICBFWFBFQ1RfRVEoNzExICAsIG1lc3NhZ2UucGFj
a2VkX2Zsb2F0ICAgKDEpKTsKLSAgRVhQRUNUX0VRKDcxMiAgLCBtZXNzYWdlLnBhY2tlZF9kb3Vi
bGUgICgxKSk7Ci0gIEVYUEVDVF9GQUxTRSggICAgbWVzc2FnZS5wYWNrZWRfYm9vbCAgICAoMSkp
OwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fQkFaLCBtZXNzYWdlLnBhY2tlZF9lbnVt
KDEpKTsKLX0KLQotdm9pZCBUZXN0VXRpbDo6RXhwZWN0VW5wYWNrZWRGaWVsZHNTZXQoCi0gICAg
Y29uc3QgdW5pdHRlc3Q6OlRlc3RVbnBhY2tlZFR5cGVzJiBtZXNzYWdlKSB7Ci0gIC8vIFRoZSB2
YWx1ZXMgZXhwZWN0ZWQgaGVyZSBtdXN0IG1hdGNoIHRob3NlIG9mIEV4cGVjdFBhY2tlZEZpZWxk
c1NldC4KLQotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS51bnBhY2tlZF9pbnQzMl9zaXplICAgKCkp
OwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS51bnBhY2tlZF9pbnQ2NF9zaXplICAgKCkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS51bnBhY2tlZF91aW50MzJfc2l6ZSAgKCkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS51bnBhY2tlZF91aW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwg
bWVzc2FnZS51bnBhY2tlZF9zaW50MzJfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZS51bnBhY2tlZF9zaW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS51bnBh
Y2tlZF9maXhlZDMyX3NpemUgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS51bnBhY2tlZF9m
aXhlZDY0X3NpemUgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS51bnBhY2tlZF9zZml4ZWQz
Ml9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS51bnBhY2tlZF9zZml4ZWQ2NF9zaXpl
KCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS51bnBhY2tlZF9mbG9hdF9zaXplICAgKCkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS51bnBhY2tlZF9kb3VibGVfc2l6ZSAgKCkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS51bnBhY2tlZF9ib29sX3NpemUgICAgKCkpOwotICBBU1NFUlRfRVEo
MiwgbWVzc2FnZS51bnBhY2tlZF9lbnVtX3NpemUgICAgKCkpOwotCi0gIEVYUEVDVF9FUSg2MDEg
ICwgbWVzc2FnZS51bnBhY2tlZF9pbnQzMiAgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDIgICwgbWVz
c2FnZS51bnBhY2tlZF9pbnQ2NCAgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDMgICwgbWVzc2FnZS51
bnBhY2tlZF91aW50MzIgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDQgICwgbWVzc2FnZS51bnBhY2tl
ZF91aW50NjQgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDUgICwgbWVzc2FnZS51bnBhY2tlZF9zaW50
MzIgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDYgICwgbWVzc2FnZS51bnBhY2tlZF9zaW50NjQgICgw
KSk7Ci0gIEVYUEVDVF9FUSg2MDcgICwgbWVzc2FnZS51bnBhY2tlZF9maXhlZDMyICgwKSk7Ci0g
IEVYUEVDVF9FUSg2MDggICwgbWVzc2FnZS51bnBhY2tlZF9maXhlZDY0ICgwKSk7Ci0gIEVYUEVD
VF9FUSg2MDkgICwgbWVzc2FnZS51bnBhY2tlZF9zZml4ZWQzMigwKSk7Ci0gIEVYUEVDVF9FUSg2
MTAgICwgbWVzc2FnZS51bnBhY2tlZF9zZml4ZWQ2NCgwKSk7Ci0gIEVYUEVDVF9FUSg2MTEgICwg
bWVzc2FnZS51bnBhY2tlZF9mbG9hdCAgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MTIgICwgbWVzc2Fn
ZS51bnBhY2tlZF9kb3VibGUgICgwKSk7Ci0gIEVYUEVDVF9UUlVFKCAgICAgbWVzc2FnZS51bnBh
Y2tlZF9ib29sICAgICgwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9CQVIsIG1l
c3NhZ2UudW5wYWNrZWRfZW51bSgwKSk7Ci0KLSAgRVhQRUNUX0VRKDcwMSAgLCBtZXNzYWdlLnVu
cGFja2VkX2ludDMyICAgKDEpKTsKLSAgRVhQRUNUX0VRKDcwMiAgLCBtZXNzYWdlLnVucGFja2Vk
X2ludDY0ICAgKDEpKTsKLSAgRVhQRUNUX0VRKDcwMyAgLCBtZXNzYWdlLnVucGFja2VkX3VpbnQz
MiAgKDEpKTsKLSAgRVhQRUNUX0VRKDcwNCAgLCBtZXNzYWdlLnVucGFja2VkX3VpbnQ2NCAgKDEp
KTsKLSAgRVhQRUNUX0VRKDcwNSAgLCBtZXNzYWdlLnVucGFja2VkX3NpbnQzMiAgKDEpKTsKLSAg
RVhQRUNUX0VRKDcwNiAgLCBtZXNzYWdlLnVucGFja2VkX3NpbnQ2NCAgKDEpKTsKLSAgRVhQRUNU
X0VRKDcwNyAgLCBtZXNzYWdlLnVucGFja2VkX2ZpeGVkMzIgKDEpKTsKLSAgRVhQRUNUX0VRKDcw
OCAgLCBtZXNzYWdlLnVucGFja2VkX2ZpeGVkNjQgKDEpKTsKLSAgRVhQRUNUX0VRKDcwOSAgLCBt
ZXNzYWdlLnVucGFja2VkX3NmaXhlZDMyKDEpKTsKLSAgRVhQRUNUX0VRKDcxMCAgLCBtZXNzYWdl
LnVucGFja2VkX3NmaXhlZDY0KDEpKTsKLSAgRVhQRUNUX0VRKDcxMSAgLCBtZXNzYWdlLnVucGFj
a2VkX2Zsb2F0ICAgKDEpKTsKLSAgRVhQRUNUX0VRKDcxMiAgLCBtZXNzYWdlLnVucGFja2VkX2Rv
dWJsZSAgKDEpKTsKLSAgRVhQRUNUX0ZBTFNFKCAgICBtZXNzYWdlLnVucGFja2VkX2Jvb2wgICAg
KDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0JBWiwgbWVzc2FnZS51bnBhY2tl
ZF9lbnVtKDEpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFRlc3RVdGlsOjpFeHBlY3RQ
YWNrZWRDbGVhcigKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzJiBtZXNzYWdl
KSB7Ci0gIC8vIFBhY2tlZCByZXBlYXRlZCBmaWVsZHMgYXJlIGVtcHR5LgotICBFWFBFQ1RfRVEo
MCwgbWVzc2FnZS5wYWNrZWRfaW50MzJfc2l6ZSAgICgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UucGFja2VkX2ludDY0X3NpemUgICAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnBhY2tl
ZF91aW50MzJfc2l6ZSAgKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5wYWNrZWRfdWludDY0
X3NpemUgICgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UucGFja2VkX3NpbnQzMl9zaXplICAo
KSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnBhY2tlZF9zaW50NjRfc2l6ZSAgKCkpOwotICBF
WFBFQ1RfRVEoMCwgbWVzc2FnZS5wYWNrZWRfZml4ZWQzMl9zaXplICgpKTsKLSAgRVhQRUNUX0VR
KDAsIG1lc3NhZ2UucGFja2VkX2ZpeGVkNjRfc2l6ZSAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNz
YWdlLnBhY2tlZF9zZml4ZWQzMl9zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5wYWNr
ZWRfc2ZpeGVkNjRfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UucGFja2VkX2Zsb2F0
X3NpemUgICAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnBhY2tlZF9kb3VibGVfc2l6ZSAg
KCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5wYWNrZWRfYm9vbF9zaXplICAgICgpKTsKLSAg
RVhQRUNUX0VRKDAsIG1lc3NhZ2UucGFja2VkX2VudW1fc2l6ZSAgICAoKSk7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbDo6RXhwZWN0UGFja2VkRmllbGRzTW9kaWZpZWQoCi0g
ICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RQYWNrZWRUeXBlcyYgbWVzc2FnZSkgewotICAvLyBEbyB0
aGUgc2FtZSBmb3IgcGFja2VkIHJlcGVhdGVkIGZpZWxkcy4KLSAgQVNTRVJUX0VRKDIsIG1lc3Nh
Z2UucGFja2VkX2ludDMyX3NpemUgICAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tl
ZF9pbnQ2NF9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfdWludDMy
X3NpemUgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX3VpbnQ2NF9zaXplICAo
KSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF9zaW50MzJfc2l6ZSAgKCkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfc2ludDY0X3NpemUgICgpKTsKLSAgQVNTRVJUX0VR
KDIsIG1lc3NhZ2UucGFja2VkX2ZpeGVkMzJfc2l6ZSAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNz
YWdlLnBhY2tlZF9maXhlZDY0X3NpemUgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNr
ZWRfc2ZpeGVkMzJfc2l6ZSgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX3NmaXhl
ZDY0X3NpemUoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF9mbG9hdF9zaXplICAg
KCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfZG91YmxlX3NpemUgICgpKTsKLSAg
QVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX2Jvb2xfc2l6ZSAgICAoKSk7Ci0gIEFTU0VSVF9F
USgyLCBtZXNzYWdlLnBhY2tlZF9lbnVtX3NpemUgICAgKCkpOwotCi0gIEVYUEVDVF9FUSg2MDEg
ICwgbWVzc2FnZS5wYWNrZWRfaW50MzIgICAoMCkpOwotICBFWFBFQ1RfRVEoNjAyICAsIG1lc3Nh
Z2UucGFja2VkX2ludDY0ICAgKDApKTsKLSAgRVhQRUNUX0VRKDYwMyAgLCBtZXNzYWdlLnBhY2tl
ZF91aW50MzIgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDQgICwgbWVzc2FnZS5wYWNrZWRfdWludDY0
ICAoMCkpOwotICBFWFBFQ1RfRVEoNjA1ICAsIG1lc3NhZ2UucGFja2VkX3NpbnQzMiAgKDApKTsK
LSAgRVhQRUNUX0VRKDYwNiAgLCBtZXNzYWdlLnBhY2tlZF9zaW50NjQgICgwKSk7Ci0gIEVYUEVD
VF9FUSg2MDcgICwgbWVzc2FnZS5wYWNrZWRfZml4ZWQzMiAoMCkpOwotICBFWFBFQ1RfRVEoNjA4
ICAsIG1lc3NhZ2UucGFja2VkX2ZpeGVkNjQgKDApKTsKLSAgRVhQRUNUX0VRKDYwOSAgLCBtZXNz
YWdlLnBhY2tlZF9zZml4ZWQzMigwKSk7Ci0gIEVYUEVDVF9FUSg2MTAgICwgbWVzc2FnZS5wYWNr
ZWRfc2ZpeGVkNjQoMCkpOwotICBFWFBFQ1RfRVEoNjExICAsIG1lc3NhZ2UucGFja2VkX2Zsb2F0
ICAgKDApKTsKLSAgRVhQRUNUX0VRKDYxMiAgLCBtZXNzYWdlLnBhY2tlZF9kb3VibGUgICgwKSk7
Ci0gIEVYUEVDVF9UUlVFKCAgICAgbWVzc2FnZS5wYWNrZWRfYm9vbCAgICAoMCkpOwotICBFWFBF
Q1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fQkFSLCBtZXNzYWdlLnBhY2tlZF9lbnVtKDApKTsKLSAg
Ly8gQWN0dWFsbHkgdmVyaWZ5IHRoZSBzZWNvbmQgKG1vZGlmaWVkKSBlbGVtZW50cyBub3cuCi0g
IEVYUEVDVF9FUSg4MDEgICwgbWVzc2FnZS5wYWNrZWRfaW50MzIgICAoMSkpOwotICBFWFBFQ1Rf
RVEoODAyICAsIG1lc3NhZ2UucGFja2VkX2ludDY0ICAgKDEpKTsKLSAgRVhQRUNUX0VRKDgwMyAg
LCBtZXNzYWdlLnBhY2tlZF91aW50MzIgICgxKSk7Ci0gIEVYUEVDVF9FUSg4MDQgICwgbWVzc2Fn
ZS5wYWNrZWRfdWludDY0ICAoMSkpOwotICBFWFBFQ1RfRVEoODA1ICAsIG1lc3NhZ2UucGFja2Vk
X3NpbnQzMiAgKDEpKTsKLSAgRVhQRUNUX0VRKDgwNiAgLCBtZXNzYWdlLnBhY2tlZF9zaW50NjQg
ICgxKSk7Ci0gIEVYUEVDVF9FUSg4MDcgICwgbWVzc2FnZS5wYWNrZWRfZml4ZWQzMiAoMSkpOwot
ICBFWFBFQ1RfRVEoODA4ICAsIG1lc3NhZ2UucGFja2VkX2ZpeGVkNjQgKDEpKTsKLSAgRVhQRUNU
X0VRKDgwOSAgLCBtZXNzYWdlLnBhY2tlZF9zZml4ZWQzMigxKSk7Ci0gIEVYUEVDVF9FUSg4MTAg
ICwgbWVzc2FnZS5wYWNrZWRfc2ZpeGVkNjQoMSkpOwotICBFWFBFQ1RfRVEoODExICAsIG1lc3Nh
Z2UucGFja2VkX2Zsb2F0ICAgKDEpKTsKLSAgRVhQRUNUX0VRKDgxMiAgLCBtZXNzYWdlLnBhY2tl
ZF9kb3VibGUgICgxKSk7Ci0gIEVYUEVDVF9UUlVFKCAgICAgbWVzc2FnZS5wYWNrZWRfYm9vbCAg
ICAoMSkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fRk9PLCBtZXNzYWdlLnBhY2tl
ZF9lbnVtKDEpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRXh0ZW5zaW9ucwotLy8KLS8vIEFs
bCB0aGlzIGNvZGUgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSBjb2RlIGV4Y2Vw
dCB0aGF0IGl0J3MKLS8vIG1hbmlwdWxhdGluZyBleHRlbnNpb24gZmllbGRzIGluc3RlYWQgb2Yg
bm9ybWFsIG9uZXMuCi0vLwotLy8gSSBnYXZlIHVwIG9uIHRoZSA4MC1jaGFyIGxpbWl0IGhlcmUu
ICBTb3JyeS4KLQotdm9pZCBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucyh1bml0dGVzdDo6VGVz
dEFsbEV4dGVuc2lvbnMqIG1lc3NhZ2UpIHsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpvcHRpb25hbF9pbnQzMl9leHRlbnNpb24gICAsIDEwMSk7Ci0gIG1lc3NhZ2UtPlNldEV4
dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW50NjRfZXh0ZW5zaW9uICAgLCAxMDIpOwotICBt
ZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3VpbnQzMl9leHRlbnNpb24g
ICwgMTAzKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF91aW50
NjRfZXh0ZW5zaW9uICAsIDEwNCk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6
b3B0aW9uYWxfc2ludDMyX2V4dGVuc2lvbiAgLCAxMDUpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX3NpbnQ2NF9leHRlbnNpb24gICwgMTA2KTsKLSAgbWVzc2Fn
ZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9maXhlZDMyX2V4dGVuc2lvbiAsIDEw
Nyk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZml4ZWQ2NF9l
eHRlbnNpb24gLCAxMDgpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlv
bmFsX3NmaXhlZDMyX2V4dGVuc2lvbiwgMTA5KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpvcHRpb25hbF9zZml4ZWQ2NF9leHRlbnNpb24sIDExMCk7Ci0gIG1lc3NhZ2UtPlNl
dEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZmxvYXRfZXh0ZW5zaW9uICAgLCAxMTEpOwot
ICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2RvdWJsZV9leHRlbnNp
b24gICwgMTEyKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9i
b29sX2V4dGVuc2lvbiAgICAsIHRydWUpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsX3N0cmluZ19leHRlbnNpb24gICwgIjExNSIpOwotICBtZXNzYWdlLT5TZXRF
eHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2J5dGVzX2V4dGVuc2lvbiAgICwgIjExNiIpOwot
Ci0gIG1lc3NhZ2UtPk11dGFibGVFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsZ3JvdXBfZXh0
ZW5zaW9uICAgICAgICAgICApLT5zZXRfYSgxMTcpOwotICBtZXNzYWdlLT5NdXRhYmxlRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24gKS0+c2V0X2Ji
KDExOCk7Ci0gIG1lc3NhZ2UtPk11dGFibGVFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2Zv
cmVpZ25fbWVzc2FnZV9leHRlbnNpb24pLT5zZXRfYygxMTkpOwotICBtZXNzYWdlLT5NdXRhYmxl
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb24gKS0+
c2V0X2QoMTIwKTsKLQotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X25lc3RlZF9lbnVtX2V4dGVuc2lvbiAsIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkJBWik7Ci0g
IG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9lbnVtX2V4
dGVuc2lvbiwgdW5pdHRlc3Q6OkZPUkVJR05fQkFaICAgICAgKTsKLSAgbWVzc2FnZS0+U2V0RXh0
ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbXBvcnRfZW51bV9leHRlbnNpb24gLCB1bml0dGVz
dF9pbXBvcnQ6OklNUE9SVF9CQVopOwotCi0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVz
dDo6b3B0aW9uYWxfc3RyaW5nX3BpZWNlX2V4dGVuc2lvbiwgIjEyNCIpOwotICBtZXNzYWdlLT5T
ZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2NvcmRfZXh0ZW5zaW9uLCAiMTI1Iik7Ci0K
LSAgbWVzc2FnZS0+TXV0YWJsZUV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfcHVibGljX2lt
cG9ydF9tZXNzYWdlX2V4dGVuc2lvbiktPnNldF9lKDEyNik7Ci0gIG1lc3NhZ2UtPk11dGFibGVF
eHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2xhenlfbWVzc2FnZV9leHRlbnNpb24pLT5zZXRf
YmIoMTI3KTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0
dGVzdDo6cmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uICAgLCAyMDEpOwotICBtZXNzYWdlLT5BZGRF
eHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDY0X2V4dGVuc2lvbiAgICwgMjAyKTsKLSAg
bWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9u
ICAsIDIwMyk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfdWlu
dDY0X2V4dGVuc2lvbiAgLCAyMDQpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6
OnJlcGVhdGVkX3NpbnQzMl9leHRlbnNpb24gICwgMjA1KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50NjRfZXh0ZW5zaW9uICAsIDIwNik7Ci0gIG1lc3Nh
Z2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZml4ZWQzMl9leHRlbnNpb24gLCAy
MDcpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkNjRf
ZXh0ZW5zaW9uICwgMjA4KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBl
YXRlZF9zZml4ZWQzMl9leHRlbnNpb24sIDIwOSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1
bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uLCAyMTApOwotICBtZXNzYWdlLT5B
ZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lvbiAgICwgMjExKTsK
LSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9kb3VibGVfZXh0ZW5z
aW9uICAsIDIxMik7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRf
Ym9vbF9leHRlbnNpb24gICAgLCB0cnVlKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uICAsICIyMTUiKTsKLSAgbWVzc2FnZS0+QWRk
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9ieXRlc19leHRlbnNpb24gICAsICIyMTYiKTsK
LQotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkZ3JvdXBfZXh0ZW5z
aW9uICAgICAgICAgICApLT5zZXRfYSgyMTcpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbiApLT5zZXRfYmIoMjE4KTsK
LSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX21lc3Nh
Z2VfZXh0ZW5zaW9uKS0+c2V0X2MoMjE5KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb24gKS0+c2V0X2QoMjIwKTsKLSAg
bWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0
ZW5zaW9uICAgKS0+c2V0X2JiKDIyNyk7Ci0KLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb24gLCB1bml0dGVzdDo6VGVzdEFsbFR5
cGVzOjpCQVIpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Zv
cmVpZ25fZW51bV9leHRlbnNpb24sIHVuaXR0ZXN0OjpGT1JFSUdOX0JBUiAgICAgICk7Ci0gIG1l
c3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5z
aW9uICwgdW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfQkFSKTsKLQotICBtZXNzYWdlLT5BZGRFeHRl
bnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3N0cmluZ19waWVjZV9leHRlbnNpb24sICIyMjQiKTsK
LSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9jb3JkX2V4dGVuc2lv
biwgIjIyNSIpOwotCi0gIC8vIEFkZCBhIHNlY29uZCBvbmUgb2YgZWFjaCBmaWVsZC4KLSAgbWVz
c2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb24gICAs
IDMwMSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW50NjRf
ZXh0ZW5zaW9uICAgLCAzMDIpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJl
cGVhdGVkX3VpbnQzMl9leHRlbnNpb24gICwgMzAzKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9u
KHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uICAsIDMwNCk7Ci0gIG1lc3NhZ2Ut
PkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDMyX2V4dGVuc2lvbiAgLCAzMDUp
OwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQ2NF9leHRl
bnNpb24gICwgMzA2KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRl
ZF9maXhlZDMyX2V4dGVuc2lvbiAsIDMwNyk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0
dGVzdDo6cmVwZWF0ZWRfZml4ZWQ2NF9leHRlbnNpb24gLCAzMDgpOwotICBtZXNzYWdlLT5BZGRF
eHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbiwgMzA5KTsKLSAg
bWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zZml4ZWQ2NF9leHRlbnNp
b24sIDMxMCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZmxv
YXRfZXh0ZW5zaW9uICAgLCAzMTEpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6
OnJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb24gICwgMzEyKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9ib29sX2V4dGVuc2lvbiAgICAsIGZhbHNlKTsKLSAgbWVz
c2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uICAs
ICIzMTUiKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9ieXRl
c19leHRlbnNpb24gICAsICIzMTYiKTsKLQotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uICAgICAgICAgICApLT5zZXRfYSgzMTcpOwotICBt
ZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4
dGVuc2lvbiApLT5zZXRfYmIoMzE4KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uKS0+c2V0X2MoMzE5KTsKLSAgbWVz
c2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRl
bnNpb24gKS0+c2V0X2QoMzIwKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uICAgKS0+c2V0X2JiKDMyNyk7Ci0KLSAgbWVz
c2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNp
b24gLCB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpCQVopOwotICBtZXNzYWdlLT5BZGRFeHRlbnNp
b24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNpb24sIHVuaXR0ZXN0OjpG
T1JFSUdOX0JBWiAgICAgICk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVw
ZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5zaW9uICwgdW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfQkFa
KTsKLQotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3N0cmluZ19w
aWVjZV9leHRlbnNpb24sICIzMjQiKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF9jb3JkX2V4dGVuc2lvbiwgIjMyNSIpOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAg
bWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ludDMyX2V4dGVuc2lvbiAg
ICwgNDAxKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ludDY0
X2V4dGVuc2lvbiAgICwgNDAyKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpk
ZWZhdWx0X3VpbnQzMl9leHRlbnNpb24gICwgNDAzKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpkZWZhdWx0X3VpbnQ2NF9leHRlbnNpb24gICwgNDA0KTsKLSAgbWVzc2FnZS0+
U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NpbnQzMl9leHRlbnNpb24gICwgNDA1KTsK
LSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NpbnQ2NF9leHRlbnNp
b24gICwgNDA2KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2Zp
eGVkMzJfZXh0ZW5zaW9uICwgNDA3KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpkZWZhdWx0X2ZpeGVkNjRfZXh0ZW5zaW9uICwgNDA4KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NmaXhlZDMyX2V4dGVuc2lvbiwgNDA5KTsKLSAgbWVzc2Fn
ZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NmaXhlZDY0X2V4dGVuc2lvbiwgNDEw
KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2Zsb2F0X2V4dGVu
c2lvbiAgICwgNDExKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0
X2RvdWJsZV9leHRlbnNpb24gICwgNDEyKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpkZWZhdWx0X2Jvb2xfZXh0ZW5zaW9uICAgICwgZmFsc2UpOwotICBtZXNzYWdlLT5TZXRF
eHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc3RyaW5nX2V4dGVuc2lvbiAgLCAiNDE1Iik7Ci0g
IG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9ieXRlc19leHRlbnNpb24g
ICAsICI0MTYiKTsKLQotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRf
bmVzdGVkX2VudW1fZXh0ZW5zaW9uICwgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6Rk9PKTsKLSAg
bWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ZvcmVpZ25fZW51bV9leHRl
bnNpb24sIHVuaXR0ZXN0OjpGT1JFSUdOX0ZPTyAgICAgICk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVu
c2lvbih1bml0dGVzdDo6ZGVmYXVsdF9pbXBvcnRfZW51bV9leHRlbnNpb24gLCB1bml0dGVzdF9p
bXBvcnQ6OklNUE9SVF9GT08pOwotCi0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6
ZGVmYXVsdF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uLCAiNDI0Iik7Ci0gIG1lc3NhZ2UtPlNldEV4
dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9jb3JkX2V4dGVuc2lvbiwgIjQyNSIpOwotCi0gIFNl
dE9uZW9mRmllbGRzKG1lc3NhZ2UpOwotfQotCi12b2lkIFRlc3RVdGlsOjpTZXRPbmVvZkZpZWxk
cyh1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMqIG1lc3NhZ2UpIHsKLSAgbWVzc2FnZS0+U2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVvZl91aW50MzJfZXh0ZW5zaW9uLCA2MDEpOwotICBtZXNz
YWdlLT5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVvZl9uZXN0ZWRfbWVzc2FnZV9leHRl
bnNpb24pLT5zZXRfYmIoNjAyKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpv
bmVvZl9zdHJpbmdfZXh0ZW5zaW9uLCAiNjAzIik7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1
bml0dGVzdDo6b25lb2ZfYnl0ZXNfZXh0ZW5zaW9uLCAiNjA0Iik7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotdm9pZCBUZXN0VXRpbDo6U2V0QWxsRmllbGRzQW5kRXh0ZW5zaW9ucygKLSAgICB1bml0
dGVzdDo6VGVzdEZpZWxkT3JkZXJpbmdzKiBtZXNzYWdlKSB7Ci0gIEdPT0dMRV9DSEVDSyhtZXNz
YWdlKTsKLSAgbWVzc2FnZS0+c2V0X215X2ludCgxKTsKLSAgbWVzc2FnZS0+c2V0X215X3N0cmlu
ZygiZm9vIik7Ci0gIG1lc3NhZ2UtPnNldF9teV9mbG9hdCgxLjApOwotICBtZXNzYWdlLT5TZXRF
eHRlbnNpb24odW5pdHRlc3Q6Om15X2V4dGVuc2lvbl9pbnQsIDIzKTsKLSAgbWVzc2FnZS0+U2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpteV9leHRlbnNpb25fc3RyaW5nLCAiYmFyIik7Ci19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbDo6TW9kaWZ5UmVwZWF0ZWRFeHRlbnNpb25zKHVu
aXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyogbWVzc2FnZSkgewotICBtZXNzYWdlLT5TZXRFeHRl
bnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbiAgICwgMSwgNTAxKTsKLSAg
bWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQ2NF9leHRlbnNpb24g
ICAsIDEsIDUwMik7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRf
dWludDMyX2V4dGVuc2lvbiAgLCAxLCA1MDMpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX3VpbnQ2NF9leHRlbnNpb24gICwgMSwgNTA0KTsKLSAgbWVzc2FnZS0+
U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uICAsIDEsIDUw
NSk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDY0X2V4
dGVuc2lvbiAgLCAxLCA1MDYpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJl
cGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uICwgMSwgNTA3KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lvbiAsIDEsIDUwOCk7Ci0gIG1l
c3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9u
LCAxLCA1MDkpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3Nm
aXhlZDY0X2V4dGVuc2lvbiwgMSwgNTEwKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9mbG9hdF9leHRlbnNpb24gICAsIDEsIDUxMSk7Ci0gIG1lc3NhZ2UtPlNl
dEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbiAgLCAxLCA1MTIp
OwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Jvb2xfZXh0ZW5z
aW9uICAgICwgMSwgdHJ1ZSk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cmVw
ZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbiAgLCAxLCAiNTE1Iik7Ci0gIG1lc3NhZ2UtPlNldEV4dGVu
c2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uICAgLCAxLCAiNTE2Iik7Ci0K
LSAgbWVzc2FnZS0+TXV0YWJsZUV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRncm91cF9leHRl
bnNpb24gICAgICAgICAgICwgMSktPnNldF9hKDUxNyk7Ci0gIG1lc3NhZ2UtPk11dGFibGVFeHRl
bnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbiAsIDEpLT5z
ZXRfYmIoNTE4KTsKLSAgbWVzc2FnZS0+TXV0YWJsZUV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0
ZWRfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lvbiwgMSktPnNldF9jKDUxOSk7Ci0gIG1lc3NhZ2Ut
Pk11dGFibGVFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX2V4dGVu
c2lvbiAsIDEpLT5zZXRfZCg1MjApOwotICBtZXNzYWdlLT5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uICAgLCAxKS0+c2V0X2JiKDUyNyk7
Ci0KLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51
bV9leHRlbnNpb24gLCAxLCB1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpGT08pOwotICBtZXNzYWdl
LT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNpb24s
IDEsIHVuaXR0ZXN0OjpGT1JFSUdOX0ZPTyAgICAgICk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lv
bih1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5zaW9uICwgMSwgdW5pdHRlc3Rf
aW1wb3J0OjpJTVBPUlRfRk9PKTsKLQotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnJlcGVhdGVkX3N0cmluZ19waWVjZV9leHRlbnNpb24sIDEsICI1MjQiKTsKLSAgbWVzc2FnZS0+
U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9jb3JkX2V4dGVuc2lvbiwgMSwgIjUyNSIp
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgVGVzdFV0aWw6OkV4cGVjdEFsbEV4dGVuc2lv
bnNTZXQoCi0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zJiBtZXNzYWdlKSB7
Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9p
bnQzMl9leHRlbnNpb24gICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24o
dW5pdHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4dGVuc2lvbiAgICkpOwotICBFWFBFQ1RfVFJVRSht
ZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfdWludDMyX2V4dGVuc2lvbiAg
KSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25h
bF91aW50NjRfZXh0ZW5zaW9uICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX3NpbnQzMl9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfVFJV
RShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfc2ludDY0X2V4dGVuc2lv
biAgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRp
b25hbF9maXhlZDMyX2V4dGVuc2lvbiApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZpeGVkNjRfZXh0ZW5zaW9uICkpOwotICBFWFBFQ1Rf
VFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfc2ZpeGVkMzJfZXh0
ZW5zaW9uKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0Ojpv
cHRpb25hbF9zZml4ZWQ2NF9leHRlbnNpb24pKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNF
eHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2Zsb2F0X2V4dGVuc2lvbiAgICkpOwotICBFWFBF
Q1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZG91YmxlX2V4
dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0
OjpvcHRpb25hbF9ib29sX2V4dGVuc2lvbiAgICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5I
YXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3N0cmluZ19leHRlbnNpb24gICkpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfYnl0ZXNf
ZXh0ZW5zaW9uICAgKSk7Ci0KLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5p
dHRlc3Q6Om9wdGlvbmFsZ3JvdXBfZXh0ZW5zaW9uICAgICAgICAgICAgICAgICApKTsKLSAgRVhQ
RUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX25lc3RlZF9t
ZXNzYWdlX2V4dGVuc2lvbiAgICAgICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24gICAgICAp
KTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbiAgICAgICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2Fn
ZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZV9l
eHRlbnNpb24pKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6
Om9wdGlvbmFsX2xhenlfbWVzc2FnZV9leHRlbnNpb24gICAgICAgICApKTsKLQotICBFWFBFQ1Rf
VFJVRShtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxncm91cF9leHRlbnNp
b24gICAgICAgICAgICAgICAgICkuaGFzX2EoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24gICAg
ICAgKS5oYXNfYmIoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpvcHRpb25hbF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uICAgICAgKS5oYXNfYygpKTsK
LSAgRVhQRUNUX1RSVUUobWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2lt
cG9ydF9tZXNzYWdlX2V4dGVuc2lvbiAgICAgICApLmhhc19kKCkpOwotICBFWFBFQ1RfVFJVRSht
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfcHVibGljX2ltcG9ydF9tZXNz
YWdlX2V4dGVuc2lvbikuaGFzX2UoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uICAgICAgICAgKS5o
YXNfYmIoKSk7Ci0KLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6
Om9wdGlvbmFsX25lc3RlZF9lbnVtX2V4dGVuc2lvbiApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2Fn
ZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZvcmVpZ25fZW51bV9leHRlbnNpb24p
KTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X2ltcG9ydF9lbnVtX2V4dGVuc2lvbiApKTsKLQotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4
dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfc3RyaW5nX3BpZWNlX2V4dGVuc2lvbikpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfY29yZF9l
eHRlbnNpb24pKTsKLQotICBFWFBFQ1RfRVEoMTAxICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpvcHRpb25hbF9pbnQzMl9leHRlbnNpb24gICApKTsKLSAgRVhQRUNUX0VRKDEwMiAg
LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW50NjRfZXh0ZW5zaW9u
ICAgKSk7Ci0gIEVYUEVDVF9FUSgxMDMgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
Om9wdGlvbmFsX3VpbnQzMl9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfRVEoMTA0ICAsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF91aW50NjRfZXh0ZW5zaW9uICApKTsK
LSAgRVhQRUNUX0VRKDEwNSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9u
YWxfc2ludDMyX2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSgxMDYgICwgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NpbnQ2NF9leHRlbnNpb24gICkpOwotICBFWFBF
Q1RfRVEoMTA3ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9maXhl
ZDMyX2V4dGVuc2lvbiApKTsKLSAgRVhQRUNUX0VRKDEwOCAgLCBtZXNzYWdlLkdldEV4dGVuc2lv
bih1bml0dGVzdDo6b3B0aW9uYWxfZml4ZWQ2NF9leHRlbnNpb24gKSk7Ci0gIEVYUEVDVF9FUSgx
MDkgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NmaXhlZDMyX2V4
dGVuc2lvbikpOwotICBFWFBFQ1RfRVEoMTEwICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpvcHRpb25hbF9zZml4ZWQ2NF9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKDExMSAgLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZmxvYXRfZXh0ZW5zaW9uICAg
KSk7Ci0gIEVYUEVDVF9FUSgxMTIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9w
dGlvbmFsX2RvdWJsZV9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfVFJVRSggICAgIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9ib29sX2V4dGVuc2lvbiAgICApKTsKLSAg
RVhQRUNUX0VRKCIxMTUiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxf
c3RyaW5nX2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSgiMTE2IiwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2J5dGVzX2V4dGVuc2lvbiAgICkpOwotCi0gIEVYUEVD
VF9FUSgxMTcsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbGdyb3VwX2V4
dGVuc2lvbiAgICAgICAgICAgKS5hKCkpOwotICBFWFBFQ1RfRVEoMTE4LCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uICkuYmIo
KSk7Ci0gIEVYUEVDVF9FUSgxMTksIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRp
b25hbF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uKS5jKCkpOwotICBFWFBFQ1RfRVEoMTIwLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0
ZW5zaW9uICkuZCgpKTsKLQotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFa
LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfbmVzdGVkX2VudW1fZXh0
ZW5zaW9uICkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fQkFaICAgICAgLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9lbnVtX2V4dGVuc2lv
bikpOwotICBFWFBFQ1RfRVEodW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfQkFaLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0X2VudW1fZXh0ZW5zaW9uICkpOwot
Ci0gIEVYUEVDVF9FUSgiMTI0IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlv
bmFsX3N0cmluZ19waWVjZV9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKCIxMjUiLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfY29yZF9leHRlbnNpb24pKTsKLSAgRVhQ
RUNUX0VRKDEyNiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3B1Ymxp
Y19pbXBvcnRfbWVzc2FnZV9leHRlbnNpb24gKS5lKCkpOwotICBFWFBFQ1RfRVEoMTI3LCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfbGF6eV9tZXNzYWdlX2V4dGVuc2lv
bikuYmIoKSk7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRl
bnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb24gICApKTsKLSAgQVNT
RVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfaW50NjRf
ZXh0ZW5zaW9uICAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5p
dHRlc3Q6OnJlcGVhdGVkX3VpbnQzMl9leHRlbnNpb24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uICAp
KTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0
ZWRfc2ludDMyX2V4dGVuc2lvbiAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lv
blNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb24gICkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDMyX2V4
dGVuc2lvbiApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVz
dDo6cmVwZWF0ZWRfZml4ZWQ2NF9leHRlbnNpb24gKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdl
LkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbikpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9z
Zml4ZWQ2NF9leHRlbnNpb24pKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6
ZSh1bml0dGVzdDo6cmVwZWF0ZWRfZmxvYXRfZXh0ZW5zaW9uICAgKSk7Ci0gIEFTU0VSVF9FUSgy
LCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2RvdWJsZV9leHRlbnNp
b24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9ib29sX2V4dGVuc2lvbiAgICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0
ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbiAgKSk7Ci0gIEFT
U0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2J5dGVz
X2V4dGVuc2lvbiAgICkpOwotCi0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUo
dW5pdHRlc3Q6OnJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uICAgICAgICAgICApKTsKLSAgQVNTRVJU
X0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21l
c3NhZ2VfZXh0ZW5zaW9uICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXpl
KHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uKSk7Ci0gIEFTU0VS
VF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9t
ZXNzYWdlX2V4dGVuc2lvbiApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6
ZSh1bml0dGVzdDo6cmVwZWF0ZWRfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbiAgICkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRf
ZW51bV9leHRlbnNpb24gICAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNp
emUodW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNpb24gICApKTsKLSAgQVNT
RVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0
X2VudW1fZXh0ZW5zaW9uICAgICkpOwotCi0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lv
blNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3N0cmluZ19waWVjZV9leHRlbnNpb24pKTsKLSAgQVNT
RVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfY29yZF9l
eHRlbnNpb24pKTsKLQotICBFWFBFQ1RfRVEoMjAxICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb24gICAsIDApKTsKLSAgRVhQRUNUX0VRKDIw
MiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW50NjRfZXh0ZW5z
aW9uICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDMgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX3VpbnQzMl9leHRlbnNpb24gICwgMCkpOwotICBFWFBFQ1RfRVEoMjA0
ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50NjRfZXh0ZW5z
aW9uICAsIDApKTsKLSAgRVhQRUNUX0VRKDIwNSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6cmVwZWF0ZWRfc2ludDMyX2V4dGVuc2lvbiAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDYg
ICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNp
b24gICwgMCkpOwotICBFWFBFQ1RfRVEoMjA3ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbiAsIDApKTsKLSAgRVhQRUNUX0VRKDIwOCAg
LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZml4ZWQ2NF9leHRlbnNp
b24gLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDkgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbiwgMCkpOwotICBFWFBFQ1RfRVEoMjEwICAs
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zZml4ZWQ2NF9leHRlbnNp
b24sIDApKTsKLSAgRVhQRUNUX0VRKDIxMSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cmVwZWF0ZWRfZmxvYXRfZXh0ZW5zaW9uICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMTIgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb24g
ICwgMCkpOwotICBFWFBFQ1RfVFJVRSggICAgIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF9ib29sX2V4dGVuc2lvbiAgICAsIDApKTsKLSAgRVhQRUNUX0VRKCIyMTUiLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbiAg
LCAwKSk7Ci0gIEVYUEVDVF9FUSgiMjE2IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnJlcGVhdGVkX2J5dGVzX2V4dGVuc2lvbiAgICwgMCkpOwotCi0gIEVYUEVDVF9FUSgyMTcsIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZGdyb3VwX2V4dGVuc2lvbiAgICAg
ICAgICAgLCAwKS5hKCkpOwotICBFWFBFQ1RfRVEoMjE4LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uICwgMCkuYmIoKSk7Ci0g
IEVYUEVDVF9FUSgyMTksIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9m
b3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uLCAwKS5jKCkpOwotICBFWFBFQ1RfRVEoMjIwLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2VfZXh0ZW5z
aW9uICwgMCkuZCgpKTsKLSAgRVhQRUNUX0VRKDIyNywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX2xhenlfbWVzc2FnZV9leHRlbnNpb24gICAsIDApLmJiKCkpOwotCi0g
IEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpCQVIsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb24gLCAwKSk7Ci0gIEVY
UEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9CQVIgICAgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uLCAwKSk7Ci0gIEVYUEVD
VF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9CQVIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfZW51bV9leHRlbnNpb24gLCAwKSk7Ci0KLSAgRVhQRUNU
X0VRKCIyMjQiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5n
X3BpZWNlX2V4dGVuc2lvbiwgMCkpOwotICBFWFBFQ1RfRVEoIjIyNSIsIG1lc3NhZ2UuR2V0RXh0
ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9jb3JkX2V4dGVuc2lvbiwgMCkpOwotCi0gIEVYUEVD
VF9FUSgzMDEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMy
X2V4dGVuc2lvbiAgICwgMSkpOwotICBFWFBFQ1RfRVEoMzAyICAsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQ2NF9leHRlbnNpb24gICAsIDEpKTsKLSAgRVhQRUNU
X0VRKDMwMyAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfdWludDMy
X2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9FUSgzMDQgICwgbWVzc2FnZS5HZXRFeHRlbnNp
b24odW5pdHRlc3Q6OnJlcGVhdGVkX3VpbnQ2NF9leHRlbnNpb24gICwgMSkpOwotICBFWFBFQ1Rf
RVEoMzA1ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJf
ZXh0ZW5zaW9uICAsIDEpKTsKLSAgRVhQRUNUX0VRKDMwNiAgLCBtZXNzYWdlLkdldEV4dGVuc2lv
bih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDY0X2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9F
USgzMDcgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkMzJf
ZXh0ZW5zaW9uICwgMSkpOwotICBFWFBFQ1RfRVEoMzA4ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lvbiAsIDEpKTsKLSAgRVhQRUNUX0VR
KDMwOSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkMzJf
ZXh0ZW5zaW9uLCAxKSk7Ci0gIEVYUEVDVF9FUSgzMTAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVuc2lvbiwgMSkpOwotICBFWFBFQ1RfRVEo
MzExICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mbG9hdF9leHRl
bnNpb24gICAsIDEpKTsKLSAgRVhQRUNUX0VRKDMxMiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6cmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9GQUxT
RSggICAgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Jvb2xfZXh0ZW5z
aW9uICAgICwgMSkpOwotICBFWFBFQ1RfRVEoIjMxNSIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uICAsIDEpKTsKLSAgRVhQRUNUX0VRKCIz
MTYiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5z
aW9uICAgLCAxKSk7Ci0KLSAgRVhQRUNUX0VRKDMxNywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uICAgICAgICAgICAsIDEpLmEoKSk7Ci0gIEVY
UEVDVF9FUSgzMTgsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0
ZWRfbWVzc2FnZV9leHRlbnNpb24gLCAxKS5iYigpKTsKLSAgRVhQRUNUX0VRKDMxOSwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNp
b24sIDEpLmMoKSk7Ci0gIEVYUEVDVF9FUSgzMjAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb24gLCAxKS5kKCkpOwotICBFWFBF
Q1RfRVEoMzI3LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfbGF6eV9t
ZXNzYWdlX2V4dGVuc2lvbiAgICwgMSkuYmIoKSk7Ci0KLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXM6OkJBWiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVk
X25lc3RlZF9lbnVtX2V4dGVuc2lvbiAsIDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JF
SUdOX0JBWiAgICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Zv
cmVpZ25fZW51bV9leHRlbnNpb24sIDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6
SU1QT1JUX0JBWiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9y
dF9lbnVtX2V4dGVuc2lvbiAsIDEpKTsKLQotICBFWFBFQ1RfRVEoIjMyNCIsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uLCAxKSk7
Ci0gIEVYUEVDVF9FUSgiMzI1IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVh
dGVkX2NvcmRfZXh0ZW5zaW9uLCAxKSk7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBFWFBFQ1RfVFJV
RShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9pbnQzMl9leHRlbnNpb24g
ICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1
bHRfaW50NjRfZXh0ZW5zaW9uICAgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3VpbnQzMl9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfVFJV
RShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF91aW50NjRfZXh0ZW5zaW9u
ICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1
bHRfc2ludDMyX2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NpbnQ2NF9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfVFJV
RShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9maXhlZDMyX2V4dGVuc2lv
biApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1
bHRfZml4ZWQ2NF9leHRlbnNpb24gKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NmaXhlZDMyX2V4dGVuc2lvbikpOwotICBFWFBFQ1RfVFJV
RShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9zZml4ZWQ2NF9leHRlbnNp
b24pKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1
bHRfZmxvYXRfZXh0ZW5zaW9uICAgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2RvdWJsZV9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfVFJV
RShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9ib29sX2V4dGVuc2lvbiAg
ICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1
bHRfc3RyaW5nX2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2J5dGVzX2V4dGVuc2lvbiAgICkpOwotCi0gIEVYUEVDVF9U
UlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X25lc3RlZF9lbnVtX2V4
dGVuc2lvbiApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6
OmRlZmF1bHRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbikpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9pbXBvcnRfZW51bV9leHRlbnNpb24gKSk7
Ci0KLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRf
c3RyaW5nX3BpZWNlX2V4dGVuc2lvbikpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVu
c2lvbih1bml0dGVzdDo6ZGVmYXVsdF9jb3JkX2V4dGVuc2lvbikpOwotCi0gIEVYUEVDVF9FUSg0
MDEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfaW50MzJfZXh0ZW5z
aW9uICAgKSk7Ci0gIEVYUEVDVF9FUSg0MDIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OmRlZmF1bHRfaW50NjRfZXh0ZW5zaW9uICAgKSk7Ci0gIEVYUEVDVF9FUSg0MDMgICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfdWludDMyX2V4dGVuc2lvbiAgKSk7
Ci0gIEVYUEVDVF9FUSg0MDQgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1
bHRfdWludDY0X2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSg0MDUgICwgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc2ludDMyX2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVD
VF9FUSg0MDYgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc2ludDY0
X2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSg0MDcgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OmRlZmF1bHRfZml4ZWQzMl9leHRlbnNpb24gKSk7Ci0gIEVYUEVDVF9FUSg0MDgg
ICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfZml4ZWQ2NF9leHRlbnNp
b24gKSk7Ci0gIEVYUEVDVF9FUSg0MDkgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
OmRlZmF1bHRfc2ZpeGVkMzJfZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9FUSg0MTAgICwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc2ZpeGVkNjRfZXh0ZW5zaW9uKSk7Ci0g
IEVYUEVDVF9FUSg0MTEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRf
ZmxvYXRfZXh0ZW5zaW9uICAgKSk7Ci0gIEVYUEVDVF9FUSg0MTIgICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfZG91YmxlX2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9G
QUxTRSggICAgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfYm9vbF9leHRl
bnNpb24gICAgKSk7Ci0gIEVYUEVDVF9FUSgiNDE1IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OmRlZmF1bHRfc3RyaW5nX2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSgiNDE2Iiwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfYnl0ZXNfZXh0ZW5zaW9uICAg
KSk7Ci0KLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkZPTywgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uICkpOwot
ICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fRk9PICAgICAgLCBtZXNzYWdlLkdldEV4dGVu
c2lvbih1bml0dGVzdDo6ZGVmYXVsdF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uKSk7Ci0gIEVYUEVD
VF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9GT08sIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpkZWZhdWx0X2ltcG9ydF9lbnVtX2V4dGVuc2lvbiApKTsKLQotICBFWFBFQ1RfRVEo
IjQyNCIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3N0cmluZ19waWVj
ZV9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKCI0MjUiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6ZGVmYXVsdF9jb3JkX2V4dGVuc2lvbikpOwotCi0gIEVYUEVDVF9UUlVFKG1lc3Nh
Z2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVvZl91aW50MzJfZXh0ZW5zaW9uKSk7Ci0gIEVY
UEVDVF9UUlVFKG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVvZl9uZXN0ZWRfbWVz
c2FnZV9leHRlbnNpb24pLmhhc19iYigpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRl
bnNpb24odW5pdHRlc3Q6Om9uZW9mX3N0cmluZ19leHRlbnNpb24pKTsKLSAgRVhQRUNUX1RSVUUo
bWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9uZW9mX2J5dGVzX2V4dGVuc2lvbikpOwot
Ci0gIEVYUEVDVF9FUSg2MDEsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVvZl91
aW50MzJfZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9FUSg2MDIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpvbmVvZl9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pLmJiKCkpOwotICBFWFBF
Q1RfRVEoIjYwMyIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVvZl9zdHJpbmdf
ZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9FUSgiNjA0IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6Om9uZW9mX2J5dGVzX2V4dGVuc2lvbikpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZv
aWQgVGVzdFV0aWw6OkV4cGVjdEV4dGVuc2lvbnNDbGVhcigKLSAgICBjb25zdCB1bml0dGVzdDo6
VGVzdEFsbEV4dGVuc2lvbnMmIG1lc3NhZ2UpIHsKLSAgc3RyaW5nIHNlcmlhbGl6ZWQ7Ci0gIEFT
U0VSVF9UUlVFKG1lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoJnNlcmlhbGl6ZWQpKTsKLSAgRVhQ
RUNUX0VRKCIiLCBzZXJpYWxpemVkKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuQnl0ZVNpemUo
KSk7Ci0KLSAgLy8gaGFzX2JsYWgoKSBzaG91bGQgaW5pdGlhbGx5IGJlIGZhbHNlIGZvciBhbGwg
b3B0aW9uYWwgZmllbGRzLgotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5p
dHRlc3Q6Om9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbiAgICkpOwotICBFWFBFQ1RfRkFMU0UobWVz
c2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4dGVuc2lvbiAgICkp
OwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X3VpbnQzMl9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX3VpbnQ2NF9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfRkFM
U0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NpbnQzMl9leHRlbnNp
b24gICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9w
dGlvbmFsX3NpbnQ2NF9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNF
eHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZpeGVkMzJfZXh0ZW5zaW9uICkpOwotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZpeGVkNjRf
ZXh0ZW5zaW9uICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsX3NmaXhlZDMyX2V4dGVuc2lvbikpOwotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NmaXhlZDY0X2V4dGVuc2lvbikpOwot
ICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2Zs
b2F0X2V4dGVuc2lvbiAgICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24o
dW5pdHRlc3Q6Om9wdGlvbmFsX2RvdWJsZV9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfRkFMU0Uo
bWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2Jvb2xfZXh0ZW5zaW9uICAg
ICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlv
bmFsX3N0cmluZ19leHRlbnNpb24gICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2J5dGVzX2V4dGVuc2lvbiAgICkpOwotCi0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxncm91cF9leHRl
bnNpb24gICAgICAgICAgICAgICAgICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbiAgICAgICAp
KTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25h
bF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uICAgICAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNz
YWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0ZW5z
aW9uICAgICAgICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZV9leHRlbnNpb24pKTsKLSAgRVhQRUNU
X0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9sYXp5X21lc3Nh
Z2VfZXh0ZW5zaW9uICAgICAgICAgKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfZW51bV9leHRlbnNpb24gKSk7Ci0gIEVY
UEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWln
bl9lbnVtX2V4dGVuc2lvbikpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24o
dW5pdHRlc3Q6Om9wdGlvbmFsX2ltcG9ydF9lbnVtX2V4dGVuc2lvbiApKTsKLQotICBFWFBFQ1Rf
RkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3N0cmluZ19waWVj
ZV9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0
ZXN0OjpvcHRpb25hbF9jb3JkX2V4dGVuc2lvbikpOwotCi0gIC8vIE9wdGlvbmFsIGZpZWxkcyB3
aXRob3V0IGRlZmF1bHRzIGFyZSBzZXQgdG8gemVybyBvciBzb21ldGhpbmcgbGlrZSBpdC4KLSAg
RVhQRUNUX0VRKDAgICAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxf
aW50MzJfZXh0ZW5zaW9uICAgKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4dGVuc2lvbiAgICkpOwotICBFWFBFQ1Rf
RVEoMCAgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF91aW50MzJf
ZXh0ZW5zaW9uICApKTsKLSAgRVhQRUNUX0VRKDAgICAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6b3B0aW9uYWxfdWludDY0X2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSgwICAg
ICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NpbnQzMl9leHRlbnNp
b24gICkpOwotICBFWFBFQ1RfRVEoMCAgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpvcHRpb25hbF9zaW50NjRfZXh0ZW5zaW9uICApKTsKLSAgRVhQRUNUX0VRKDAgICAgLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZml4ZWQzMl9leHRlbnNpb24gKSk7
Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlv
bmFsX2ZpeGVkNjRfZXh0ZW5zaW9uICkpOwotICBFWFBFQ1RfRVEoMCAgICAsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9zZml4ZWQzMl9leHRlbnNpb24pKTsKLSAgRVhQ
RUNUX0VRKDAgICAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfc2Zp
eGVkNjRfZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX2Zsb2F0X2V4dGVuc2lvbiAgICkpOwotICBFWFBFQ1RfRVEo
MCAgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9kb3VibGVfZXh0
ZW5zaW9uICApKTsKLSAgRVhQRUNUX0ZBTFNFKCAgICBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6b3B0aW9uYWxfYm9vbF9leHRlbnNpb24gICAgKSk7Ci0gIEVYUEVDVF9FUSgiIiAgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3N0cmluZ19leHRlbnNpb24g
ICkpOwotICBFWFBFQ1RfRVEoIiIgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpv
cHRpb25hbF9ieXRlc19leHRlbnNpb24gICApKTsKLQotICAvLyBFbWJlZGRlZCBtZXNzYWdlcyBz
aG91bGQgYWxzbyBiZSBjbGVhci4KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpvcHRpb25hbGdyb3VwX2V4dGVuc2lvbiAgICAgICAgICAgICAgICAgKS5oYXNf
YSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRp
b25hbF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24gICAgICAgKS5oYXNfYmIoKSk7Ci0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9t
ZXNzYWdlX2V4dGVuc2lvbiAgICAgICkuaGFzX2MoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9u
ICAgICAgICkuaGFzX2QoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6b3B0aW9uYWxfcHVibGljX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbikuaGFzX2Uo
KSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9u
YWxfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbiAgICAgICAgICkuaGFzX2JiKCkpOwotCi0gIEVYUEVD
VF9FUSgwLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxncm91cF9leHRl
bnNpb24gICAgICAgICAgICAgICAgICkuYSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24gICAg
ICAgKS5iYigpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpvcHRpb25hbF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uICAgICAgKS5jKCkpOwotICBFWFBF
Q1RfRVEoMCwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ltcG9ydF9t
ZXNzYWdlX2V4dGVuc2lvbiAgICAgICApLmQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfcHVibGljX2ltcG9ydF9tZXNzYWdlX2V4dGVu
c2lvbikuZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpvcHRpb25hbF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uICAgICAgICAgKS5iYigpKTsKLQotICAv
LyBFbnVtcyB3aXRob3V0IGRlZmF1bHRzIGFyZSBzZXQgdG8gdGhlIGZpcnN0IHZhbHVlIGluIHRo
ZSBlbnVtLgotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6Rk9PLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfbmVzdGVkX2VudW1fZXh0ZW5zaW9uICkp
OwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fRk9PICAgICAgLCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbikpOwotICBF
WFBFQ1RfRVEodW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfRk9PLCBtZXNzYWdlLkdldEV4dGVuc2lv
bih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0X2VudW1fZXh0ZW5zaW9uICkpOwotCi0gIEVYUEVD
VF9FUSgiIiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3N0cmluZ19w
aWVjZV9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKCIiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6b3B0aW9uYWxfY29yZF9leHRlbnNpb24pKTsKLQotICAvLyBSZXBlYXRlZCBmaWVs
ZHMgYXJlIGVtcHR5LgotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0
ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb24gICApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfaW50NjRfZXh0ZW5zaW9uICAgKSk7
Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVk
X3VpbnQzMl9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uICApKTsKLSAgRVhQRUNUX0VR
KDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDMyX2V4dGVu
c2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6
OnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5F
eHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbiApKTsKLSAg
RVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfZml4
ZWQ2NF9leHRlbnNpb24gKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUo
dW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbikpOwotICBFWFBFQ1RfRVEoMCwg
bWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zZml4ZWQ2NF9leHRlbnNp
b24pKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVw
ZWF0ZWRfZmxvYXRfZXh0ZW5zaW9uICAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVu
c2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb24gICkpOwotICBFWFBF
Q1RfRVEoMCwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9ib29sX2V4
dGVuc2lvbiAgICApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0
dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNz
YWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2J5dGVzX2V4dGVuc2lvbiAgICkp
OwotCi0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVh
dGVkZ3JvdXBfZXh0ZW5zaW9uICAgICAgICAgICApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2Uu
RXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9u
ICkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBl
YXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdl
LkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lv
biApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVw
ZWF0ZWRfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbiAgICkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2Fn
ZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb24g
ICAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJl
cGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNpb24gICApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5zaW9u
ICAgICkpOwotCi0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6
OnJlcGVhdGVkX3N0cmluZ19waWVjZV9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfY29yZF9leHRlbnNpb24pKTsKLQot
ICAvLyBoYXNfYmxhaCgpIHNob3VsZCBhbHNvIGJlIGZhbHNlIGZvciBhbGwgZGVmYXVsdCBmaWVs
ZHMuCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVs
dF9pbnQzMl9leHRlbnNpb24gICApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ludDY0X2V4dGVuc2lvbiAgICkpOwotICBFWFBFQ1RfRkFM
U0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfdWludDMyX2V4dGVuc2lv
biAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVm
YXVsdF91aW50NjRfZXh0ZW5zaW9uICApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NpbnQzMl9leHRlbnNpb24gICkpOwotICBFWFBFQ1Rf
RkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc2ludDY0X2V4dGVu
c2lvbiAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6
ZGVmYXVsdF9maXhlZDMyX2V4dGVuc2lvbiApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFz
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ZpeGVkNjRfZXh0ZW5zaW9uICkpOwotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc2ZpeGVkMzJf
ZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVz
dDo6ZGVmYXVsdF9zZml4ZWQ2NF9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2Uu
SGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2Zsb2F0X2V4dGVuc2lvbiAgICkpOwotICBF
WFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfZG91Ymxl
X2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0
dGVzdDo6ZGVmYXVsdF9ib29sX2V4dGVuc2lvbiAgICApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3Nh
Z2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3N0cmluZ19leHRlbnNpb24gICkpOwot
ICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfYnl0
ZXNfZXh0ZW5zaW9uICAgKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9u
KHVuaXR0ZXN0OjpkZWZhdWx0X25lc3RlZF9lbnVtX2V4dGVuc2lvbiApKTsKLSAgRVhQRUNUX0ZB
TFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ZvcmVpZ25fZW51bV9l
eHRlbnNpb24pKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0
OjpkZWZhdWx0X2ltcG9ydF9lbnVtX2V4dGVuc2lvbiApKTsKLQotICBFWFBFQ1RfRkFMU0UobWVz
c2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc3RyaW5nX3BpZWNlX2V4dGVuc2lv
bikpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1
bHRfY29yZF9leHRlbnNpb24pKTsKLQotICAvLyBGaWVsZHMgd2l0aCBkZWZhdWx0cyBoYXZlIHRo
ZWlyIGRlZmF1bHQgdmFsdWVzIChkdWgpLgotICBFWFBFQ1RfRVEoIDQxICAgICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfaW50MzJfZXh0ZW5zaW9uICAgKSk7Ci0gIEVY
UEVDVF9FUSggNDIgICAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9p
bnQ2NF9leHRlbnNpb24gICApKTsKLSAgRVhQRUNUX0VRKCA0MyAgICAsIG1lc3NhZ2UuR2V0RXh0
ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3VpbnQzMl9leHRlbnNpb24gICkpOwotICBFWFBFQ1Rf
RVEoIDQ0ICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfdWludDY0
X2V4dGVuc2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSgtNDUgICAgLCBtZXNzYWdlLkdldEV4dGVuc2lv
bih1bml0dGVzdDo6ZGVmYXVsdF9zaW50MzJfZXh0ZW5zaW9uICApKTsKLSAgRVhQRUNUX0VRKCA0
NiAgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NpbnQ2NF9leHRl
bnNpb24gICkpOwotICBFWFBFQ1RfRVEoIDQ3ICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OmRlZmF1bHRfZml4ZWQzMl9leHRlbnNpb24gKSk7Ci0gIEVYUEVDVF9FUSggNDggICAg
LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9maXhlZDY0X2V4dGVuc2lv
biApKTsKLSAgRVhQRUNUX0VRKCA0OSAgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpkZWZhdWx0X3NmaXhlZDMyX2V4dGVuc2lvbikpOwotICBFWFBFQ1RfRVEoLTUwICAgICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc2ZpeGVkNjRfZXh0ZW5zaW9uKSk7
Ci0gIEVYUEVDVF9FUSggNTEuNSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVm
YXVsdF9mbG9hdF9leHRlbnNpb24gICApKTsKLSAgRVhQRUNUX0VRKCA1MmUzICAsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2RvdWJsZV9leHRlbnNpb24gICkpOwotICBF
WFBFQ1RfVFJVRSggICAgICAgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRf
Ym9vbF9leHRlbnNpb24gICAgKSk7Ci0gIEVYUEVDVF9FUSgiaGVsbG8iLCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9zdHJpbmdfZXh0ZW5zaW9uICApKTsKLSAgRVhQRUNU
X0VRKCJ3b3JsZCIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2J5dGVz
X2V4dGVuc2lvbiAgICkpOwotCi0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpC
QVIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X25lc3RlZF9lbnVtX2V4
dGVuc2lvbiApKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0JBUiAgICAgICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfZm9yZWlnbl9lbnVtX2V4dGVuc2lv
bikpOwotICBFWFBFQ1RfRVEodW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfQkFSLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9pbXBvcnRfZW51bV9leHRlbnNpb24gKSk7Ci0K
LSAgRVhQRUNUX0VRKCJhYmMiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVs
dF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uKSk7Ci0gIEVYUEVDVF9FUSgiMTIzIiwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfY29yZF9leHRlbnNpb24pKTsKLQotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9uZW9mX3VpbnQzMl9leHRl
bnNpb24pKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpv
bmVvZl9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pLmhhc19iYigpKTsKLSAgRVhQRUNUX0ZBTFNF
KG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVvZl9zdHJpbmdfZXh0ZW5zaW9uKSk7
Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b25lb2ZfYnl0
ZXNfZXh0ZW5zaW9uKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbDo6RXhw
ZWN0UmVwZWF0ZWRFeHRlbnNpb25zTW9kaWZpZWQoCi0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RB
bGxFeHRlbnNpb25zJiBtZXNzYWdlKSB7Ci0gIC8vIE1vZGlmeVJlcGVhdGVkRmllbGRzIG9ubHkg
c2V0cyB0aGUgc2Vjb25kIHJlcGVhdGVkIGVsZW1lbnQgb2YgZWFjaAotICAvLyBmaWVsZC4gIElu
IGFkZGl0aW9uIHRvIHZlcmlmeWluZyB0aGlzLCB3ZSBhbHNvIHZlcmlmeSB0aGF0IHRoZSBmaXJz
dAotICAvLyBlbGVtZW50IGFuZCBzaXplIHdlcmUgKm5vdCogbW9kaWZpZWQuCi0gIEFTU0VSVF9F
USgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVu
c2lvbiAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9pbnQ2NF9leHRlbnNpb24gICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2Uu
RXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfdWludDMyX2V4dGVuc2lvbiAgKSk7Ci0g
IEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3Vp
bnQ2NF9leHRlbnNpb24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXpl
KHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uICApKTsKLSAgQVNTRVJUX0VRKDIs
IG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDY0X2V4dGVuc2lv
biAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJl
cGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRl
bnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lvbiApKTsKLSAgQVNT
RVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVk
MzJfZXh0ZW5zaW9uKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5p
dHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVuc2lvbikpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9mbG9hdF9leHRlbnNpb24gICAp
KTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0
ZWRfZG91YmxlX2V4dGVuc2lvbiAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lv
blNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2Jvb2xfZXh0ZW5zaW9uICAgICkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0
ZW5zaW9uICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVz
dDo6cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uICAgKSk7Ci0KLSAgQVNTRVJUX0VRKDIsIG1lc3Nh
Z2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRncm91cF9leHRlbnNpb24gICAgICAg
ICAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24gKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNz
YWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRl
bnNpb24pKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6
cmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uICkpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5z
aW9uICAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6
OnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbiAgICApKTsKLSAgQVNTRVJUX0VRKDIsIG1l
c3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVu
c2lvbiAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9pbXBvcnRfZW51bV9leHRlbnNpb24gICAgKSk7Ci0KLSAgQVNTRVJUX0VRKDIs
IG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX3BpZWNlX2V4
dGVuc2lvbikpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9jb3JkX2V4dGVuc2lvbikpOwotCi0gIEVYUEVDVF9FUSgyMDEgICwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbiAgICwgMCkp
OwotICBFWFBFQ1RfRVEoMjAyICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBl
YXRlZF9pbnQ2NF9leHRlbnNpb24gICAsIDApKTsKLSAgRVhQRUNUX0VRKDIwMyAgLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfdWludDMyX2V4dGVuc2lvbiAgLCAwKSk7
Ci0gIEVYUEVDVF9FUSgyMDQgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVh
dGVkX3VpbnQ2NF9leHRlbnNpb24gICwgMCkpOwotICBFWFBFQ1RfRVEoMjA1ICAsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uICAsIDApKTsK
LSAgRVhQRUNUX0VRKDIwNiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0
ZWRfc2ludDY0X2V4dGVuc2lvbiAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDcgICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uICwgMCkpOwot
ICBFWFBFQ1RfRVEoMjA4ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRl
ZF9maXhlZDY0X2V4dGVuc2lvbiAsIDApKTsKLSAgRVhQRUNUX0VRKDIwOSAgLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uLCAwKSk7Ci0g
IEVYUEVDVF9FUSgyMTAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVk
X3NmaXhlZDY0X2V4dGVuc2lvbiwgMCkpOwotICBFWFBFQ1RfRVEoMjExICAsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mbG9hdF9leHRlbnNpb24gICAsIDApKTsKLSAg
RVhQRUNUX0VRKDIxMiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRf
ZG91YmxlX2V4dGVuc2lvbiAgLCAwKSk7Ci0gIEVYUEVDVF9UUlVFKCAgICAgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Jvb2xfZXh0ZW5zaW9uICAgICwgMCkpOwotICBF
WFBFQ1RfRVEoIjIxNSIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9z
dHJpbmdfZXh0ZW5zaW9uICAsIDApKTsKLSAgRVhQRUNUX0VRKCIyMTYiLCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uICAgLCAwKSk7Ci0KLSAg
RVhQRUNUX0VRKDIxNywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkZ3Jv
dXBfZXh0ZW5zaW9uICAgICAgICAgICAsIDApLmEoKSk7Ci0gIEVYUEVDVF9FUSgyMTgsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNp
b24gLCAwKS5iYigpKTsKLSAgRVhQRUNUX0VRKDIxOSwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24sIDApLmMoKSk7Ci0gIEVY
UEVDVF9FUSgyMjAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBv
cnRfbWVzc2FnZV9leHRlbnNpb24gLCAwKS5kKCkpOwotICBFWFBFQ1RfRVEoMjI3LCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbiAg
ICwgMCkuYmIoKSk7Ci0KLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkJBUiwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVu
c2lvbiAsIDApKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0JBUiAgICAgICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNp
b24sIDApKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0JBUiwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9lbnVtX2V4dGVuc2lvbiAs
IDApKTsKLQotICBFWFBFQ1RfRVEoIjIyNCIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uLCAwKSk7Ci0gIEVYUEVDVF9FUSgiMjI1
IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2NvcmRfZXh0ZW5zaW9u
LCAwKSk7Ci0KLSAgLy8gQWN0dWFsbHkgdmVyaWZ5IHRoZSBzZWNvbmQgKG1vZGlmaWVkKSBlbGVt
ZW50cyBub3cuCi0gIEVYUEVDVF9FUSg1MDEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbiAgICwgMSkpOwotICBFWFBFQ1RfRVEoNTAyICAs
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQ2NF9leHRlbnNpb24g
ICAsIDEpKTsKLSAgRVhQRUNUX0VRKDUwMyAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cmVwZWF0ZWRfdWludDMyX2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9FUSg1MDQgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3VpbnQ2NF9leHRlbnNpb24g
ICwgMSkpOwotICBFWFBFQ1RfRVEoNTA1ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uICAsIDEpKTsKLSAgRVhQRUNUX0VRKDUwNiAgLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDY0X2V4dGVuc2lvbiAg
LCAxKSk7Ci0gIEVYUEVDVF9FUSg1MDcgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnJlcGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uICwgMSkpOwotICBFWFBFQ1RfRVEoNTA4ICAsIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lvbiAs
IDEpKTsKLSAgRVhQRUNUX0VRKDUwOSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6
cmVwZWF0ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uLCAxKSk7Ci0gIEVYUEVDVF9FUSg1MTAgICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVuc2lvbiwg
MSkpOwotICBFWFBFQ1RfRVEoNTExICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9mbG9hdF9leHRlbnNpb24gICAsIDEpKTsKLSAgRVhQRUNUX0VRKDUxMiAgLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbiAgLCAx
KSk7Ci0gIEVYUEVDVF9UUlVFKCAgICAgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJl
cGVhdGVkX2Jvb2xfZXh0ZW5zaW9uICAgICwgMSkpOwotICBFWFBFQ1RfRVEoIjUxNSIsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uICAsIDEp
KTsKLSAgRVhQRUNUX0VRKCI1MTYiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVw
ZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uICAgLCAxKSk7Ci0KLSAgRVhQRUNUX0VRKDUxNywgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uICAgICAgICAg
ICAsIDEpLmEoKSk7Ci0gIEVYUEVDVF9FUSg1MTgsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24gLCAxKS5iYigpKTsKLSAgRVhQ
RUNUX0VRKDUxOSwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVp
Z25fbWVzc2FnZV9leHRlbnNpb24sIDEpLmMoKSk7Ci0gIEVYUEVDVF9FUSg1MjAsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb24g
LCAxKS5kKCkpOwotICBFWFBFQ1RfRVEoNTI3LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cmVwZWF0ZWRfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbiAgICwgMSkuYmIoKSk7Ci0KLSAgRVhQ
RUNUX0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkZPTywgbWVzc2FnZS5HZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbiAsIDEpKTsKLSAgRVhQRUNU
X0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0ZPTyAgICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNpb24sIDEpKTsKLSAgRVhQRUNUX0VR
KHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0ZPTywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX2ltcG9ydF9lbnVtX2V4dGVuc2lvbiAsIDEpKTsKLQotICBFWFBFQ1RfRVEo
IjUyNCIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfcGll
Y2VfZXh0ZW5zaW9uLCAxKSk7Ci0gIEVYUEVDVF9FUSgiNTI1IiwgbWVzc2FnZS5HZXRFeHRlbnNp
b24odW5pdHRlc3Q6OnJlcGVhdGVkX2NvcmRfZXh0ZW5zaW9uLCAxKSk7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotdm9pZCBUZXN0VXRpbDo6U2V0UGFja2VkRXh0ZW5zaW9ucyh1bml0dGVzdDo6VGVz
dFBhY2tlZEV4dGVuc2lvbnMqIG1lc3NhZ2UpIHsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVu
aXR0ZXN0OjpwYWNrZWRfaW50MzJfZXh0ZW5zaW9uICAgLCA2MDEpOwotICBtZXNzYWdlLT5BZGRF
eHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9pbnQ2NF9leHRlbnNpb24gICAsIDYwMik7Ci0gIG1l
c3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3VpbnQzMl9leHRlbnNpb24gICwg
NjAzKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfdWludDY0X2V4
dGVuc2lvbiAgLCA2MDQpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tl
ZF9zaW50MzJfZXh0ZW5zaW9uICAsIDYwNSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0
dGVzdDo6cGFja2VkX3NpbnQ2NF9leHRlbnNpb24gICwgNjA2KTsKLSAgbWVzc2FnZS0+QWRkRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZml4ZWQzMl9leHRlbnNpb24gLCA2MDcpOwotICBtZXNz
YWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9maXhlZDY0X2V4dGVuc2lvbiAsIDYw
OCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NmaXhlZDMyX2V4
dGVuc2lvbiwgNjA5KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRf
c2ZpeGVkNjRfZXh0ZW5zaW9uLCA2MTApOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRl
c3Q6OnBhY2tlZF9mbG9hdF9leHRlbnNpb24gICAsIDYxMSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVu
c2lvbih1bml0dGVzdDo6cGFja2VkX2RvdWJsZV9leHRlbnNpb24gICwgNjEyKTsKLSAgbWVzc2Fn
ZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfYm9vbF9leHRlbnNpb24gICAgLCB0cnVl
KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZW51bV9leHRlbnNp
b24sIHVuaXR0ZXN0OjpGT1JFSUdOX0JBUik7Ci0gIC8vIGFkZCBhIHNlY29uZCBvbmUgb2YgZWFj
aCBmaWVsZAotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9pbnQzMl9l
eHRlbnNpb24gICAsIDcwMSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cGFj
a2VkX2ludDY0X2V4dGVuc2lvbiAgICwgNzAyKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVu
aXR0ZXN0OjpwYWNrZWRfdWludDMyX2V4dGVuc2lvbiAgLCA3MDMpOwotICBtZXNzYWdlLT5BZGRF
eHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF91aW50NjRfZXh0ZW5zaW9uICAsIDcwNCk7Ci0gIG1l
c3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NpbnQzMl9leHRlbnNpb24gICwg
NzA1KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ludDY0X2V4
dGVuc2lvbiAgLCA3MDYpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tl
ZF9maXhlZDMyX2V4dGVuc2lvbiAsIDcwNyk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0
dGVzdDo6cGFja2VkX2ZpeGVkNjRfZXh0ZW5zaW9uICwgNzA4KTsKLSAgbWVzc2FnZS0+QWRkRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uLCA3MDkpOwotICBtZXNz
YWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9zZml4ZWQ2NF9leHRlbnNpb24sIDcx
MCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2Zsb2F0X2V4dGVu
c2lvbiAgICwgNzExKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRf
ZG91YmxlX2V4dGVuc2lvbiAgLCA3MTIpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRl
c3Q6OnBhY2tlZF9ib29sX2V4dGVuc2lvbiAgICAsIGZhbHNlKTsKLSAgbWVzc2FnZS0+QWRkRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZW51bV9leHRlbnNpb24sIHVuaXR0ZXN0OjpGT1JFSUdO
X0JBWik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbDo6TW9kaWZ5UGFja2Vk
RXh0ZW5zaW9ucyh1bml0dGVzdDo6VGVzdFBhY2tlZEV4dGVuc2lvbnMqIG1lc3NhZ2UpIHsKLSAg
bWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfaW50MzJfZXh0ZW5zaW9uICAg
LCAxLCA4MDEpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9pbnQ2
NF9leHRlbnNpb24gICAsIDEsIDgwMik7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVz
dDo6cGFja2VkX3VpbnQzMl9leHRlbnNpb24gICwgMSwgODAzKTsKLSAgbWVzc2FnZS0+U2V0RXh0
ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfdWludDY0X2V4dGVuc2lvbiAgLCAxLCA4MDQpOwotICBt
ZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9zaW50MzJfZXh0ZW5zaW9uICAs
IDEsIDgwNSk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NpbnQ2
NF9leHRlbnNpb24gICwgMSwgODA2KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpwYWNrZWRfZml4ZWQzMl9leHRlbnNpb24gLCAxLCA4MDcpOwotICBtZXNzYWdlLT5TZXRFeHRl
bnNpb24odW5pdHRlc3Q6OnBhY2tlZF9maXhlZDY0X2V4dGVuc2lvbiAsIDEsIDgwOCk7Ci0gIG1l
c3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NmaXhlZDMyX2V4dGVuc2lvbiwg
MSwgODA5KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVk
NjRfZXh0ZW5zaW9uLCAxLCA4MTApOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnBhY2tlZF9mbG9hdF9leHRlbnNpb24gICAsIDEsIDgxMSk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVu
c2lvbih1bml0dGVzdDo6cGFja2VkX2RvdWJsZV9leHRlbnNpb24gICwgMSwgODEyKTsKLSAgbWVz
c2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfYm9vbF9leHRlbnNpb24gICAgLCAx
LCB0cnVlKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZW51bV9l
eHRlbnNpb24gICAgLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Q6OkZPUkVJ
R05fRk9PKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFRlc3RVdGlsOjpFeHBlY3RQYWNr
ZWRFeHRlbnNpb25zU2V0KAotICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0UGFja2VkRXh0ZW5zaW9u
cyYgbWVzc2FnZSkgewotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0
ZXN0OjpwYWNrZWRfaW50MzJfZXh0ZW5zaW9uICAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdl
LkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9pbnQ2NF9leHRlbnNpb24gICApKTsKLSAg
QVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX3VpbnQz
Ml9leHRlbnNpb24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVu
aXR0ZXN0OjpwYWNrZWRfdWludDY0X2V4dGVuc2lvbiAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNz
YWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9zaW50MzJfZXh0ZW5zaW9uICApKTsK
LSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX3Np
bnQ2NF9leHRlbnNpb24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXpl
KHVuaXR0ZXN0OjpwYWNrZWRfZml4ZWQzMl9leHRlbnNpb24gKSk7Ci0gIEFTU0VSVF9FUSgyLCBt
ZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9maXhlZDY0X2V4dGVuc2lvbiAp
KTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2Vk
X3NmaXhlZDMyX2V4dGVuc2lvbikpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uKSk7Ci0gIEFTU0VSVF9FUSgy
LCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9mbG9hdF9leHRlbnNpb24g
ICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFj
a2VkX2RvdWJsZV9leHRlbnNpb24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNp
b25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfYm9vbF9leHRlbnNpb24gICAgKSk7Ci0gIEFTU0VSVF9F
USgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9lbnVtX2V4dGVuc2lv
biAgICApKTsKLQotICBFWFBFQ1RfRVEoNjAxICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpwYWNrZWRfaW50MzJfZXh0ZW5zaW9uICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDIgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9pbnQ2NF9leHRlbnNpb24gICAs
IDApKTsKLSAgRVhQRUNUX0VRKDYwMyAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6
cGFja2VkX3VpbnQzMl9leHRlbnNpb24gICwgMCkpOwotICBFWFBFQ1RfRVEoNjA0ICAsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfdWludDY0X2V4dGVuc2lvbiAgLCAwKSk7
Ci0gIEVYUEVDVF9FUSg2MDUgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tl
ZF9zaW50MzJfZXh0ZW5zaW9uICAsIDApKTsKLSAgRVhQRUNUX0VRKDYwNiAgLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NpbnQ2NF9leHRlbnNpb24gICwgMCkpOwotICBF
WFBFQ1RfRVEoNjA3ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZml4
ZWQzMl9leHRlbnNpb24gLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDggICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6OnBhY2tlZF9maXhlZDY0X2V4dGVuc2lvbiAsIDApKTsKLSAgRVhQRUNU
X0VRKDYwOSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NmaXhlZDMy
X2V4dGVuc2lvbiwgMCkpOwotICBFWFBFQ1RfRVEoNjEwICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uLCAwKSk7Ci0gIEVYUEVDVF9FUSg2
MTEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9mbG9hdF9leHRlbnNp
b24gICAsIDApKTsKLSAgRVhQRUNUX0VRKDYxMiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6cGFja2VkX2RvdWJsZV9leHRlbnNpb24gICwgMCkpOwotICBFWFBFQ1RfVFJVRSggICAg
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfYm9vbF9leHRlbnNpb24gICAg
LCAwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9CQVIsCi0gICAgICAgICAgICBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2VudW1fZXh0ZW5zaW9uLCAwKSk7
Ci0gIEVYUEVDVF9FUSg3MDEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tl
ZF9pbnQzMl9leHRlbnNpb24gICAsIDEpKTsKLSAgRVhQRUNUX0VRKDcwMiAgLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ludDY0X2V4dGVuc2lvbiAgICwgMSkpOwotICBF
WFBFQ1RfRVEoNzAzICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfdWlu
dDMyX2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9FUSg3MDQgICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6OnBhY2tlZF91aW50NjRfZXh0ZW5zaW9uICAsIDEpKTsKLSAgRVhQRUNU
X0VRKDcwNSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NpbnQzMl9l
eHRlbnNpb24gICwgMSkpOwotICBFWFBFQ1RfRVEoNzA2ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpwYWNrZWRfc2ludDY0X2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9FUSg3
MDcgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9maXhlZDMyX2V4dGVu
c2lvbiAsIDEpKTsKLSAgRVhQRUNUX0VRKDcwOCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6cGFja2VkX2ZpeGVkNjRfZXh0ZW5zaW9uICwgMSkpOwotICBFWFBFQ1RfRVEoNzA5ICAs
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVkMzJfZXh0ZW5zaW9u
LCAxKSk7Ci0gIEVYUEVDVF9FUSg3MTAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnBhY2tlZF9zZml4ZWQ2NF9leHRlbnNpb24sIDEpKTsKLSAgRVhQRUNUX0VRKDcxMSAgLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2Zsb2F0X2V4dGVuc2lvbiAgICwgMSkp
OwotICBFWFBFQ1RfRVEoNzEyICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNr
ZWRfZG91YmxlX2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9GQUxTRSggICAgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9ib29sX2V4dGVuc2lvbiAgICAsIDEpKTsKLSAg
RVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0JBWiwKLSAgICAgICAgICAgIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZW51bV9leHRlbnNpb24sIDEpKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi12b2lkIFRlc3RVdGlsOjpFeHBlY3RQYWNrZWRFeHRlbnNpb25zQ2xlYXIo
Ci0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RQYWNrZWRFeHRlbnNpb25zJiBtZXNzYWdlKSB7Ci0g
IEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9pbnQz
Ml9leHRlbnNpb24gICApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1
bml0dGVzdDo6cGFja2VkX2ludDY0X2V4dGVuc2lvbiAgICkpOwotICBFWFBFQ1RfRVEoMCwgbWVz
c2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfdWludDMyX2V4dGVuc2lvbiAgKSk7
Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF91
aW50NjRfZXh0ZW5zaW9uICApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6
ZSh1bml0dGVzdDo6cGFja2VkX3NpbnQzMl9leHRlbnNpb24gICkpOwotICBFWFBFQ1RfRVEoMCwg
bWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfc2ludDY0X2V4dGVuc2lvbiAg
KSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tl
ZF9maXhlZDMyX2V4dGVuc2lvbiApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9u
U2l6ZSh1bml0dGVzdDo6cGFja2VkX2ZpeGVkNjRfZXh0ZW5zaW9uICkpOwotICBFWFBFQ1RfRVEo
MCwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVkMzJfZXh0ZW5z
aW9uKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBh
Y2tlZF9zZml4ZWQ2NF9leHRlbnNpb24pKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5z
aW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX2Zsb2F0X2V4dGVuc2lvbiAgICkpOwotICBFWFBFQ1Rf
RVEoMCwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfZG91YmxlX2V4dGVu
c2lvbiAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6
OnBhY2tlZF9ib29sX2V4dGVuc2lvbiAgICApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0
ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX2VudW1fZXh0ZW5zaW9uICAgICkpOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLXZvaWQgVGVzdFV0aWw6OkV4cGVjdFBhY2tlZEV4dGVuc2lvbnNNb2Rp
ZmllZCgKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdFBhY2tlZEV4dGVuc2lvbnMmIG1lc3NhZ2Up
IHsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2Vk
X2ludDMyX2V4dGVuc2lvbiAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpwYWNrZWRfaW50NjRfZXh0ZW5zaW9uICAgKSk7Ci0gIEFTU0VSVF9FUSgy
LCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF91aW50MzJfZXh0ZW5zaW9u
ICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFj
a2VkX3VpbnQ2NF9leHRlbnNpb24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNp
b25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfc2ludDMyX2V4dGVuc2lvbiAgKSk7Ci0gIEFTU0VSVF9F
USgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9zaW50NjRfZXh0ZW5z
aW9uICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6
cGFja2VkX2ZpeGVkMzJfZXh0ZW5zaW9uICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRl
bnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfZml4ZWQ2NF9leHRlbnNpb24gKSk7Ci0gIEFTU0VS
VF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9zZml4ZWQzMl9l
eHRlbnNpb24pKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVz
dDo6cGFja2VkX3NmaXhlZDY0X2V4dGVuc2lvbikpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5F
eHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfZmxvYXRfZXh0ZW5zaW9uICAgKSk7Ci0gIEFT
U0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9kb3VibGVf
ZXh0ZW5zaW9uICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0
dGVzdDo6cGFja2VkX2Jvb2xfZXh0ZW5zaW9uICAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfZW51bV9leHRlbnNpb24gICAgKSk7Ci0g
IEVYUEVDVF9FUSg2MDEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9p
bnQzMl9leHRlbnNpb24gICAsIDApKTsKLSAgRVhQRUNUX0VRKDYwMiAgLCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ludDY0X2V4dGVuc2lvbiAgICwgMCkpOwotICBFWFBF
Q1RfRVEoNjAzICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfdWludDMy
X2V4dGVuc2lvbiAgLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDQgICwgbWVzc2FnZS5HZXRFeHRlbnNp
b24odW5pdHRlc3Q6OnBhY2tlZF91aW50NjRfZXh0ZW5zaW9uICAsIDApKTsKLSAgRVhQRUNUX0VR
KDYwNSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NpbnQzMl9leHRl
bnNpb24gICwgMCkpOwotICBFWFBFQ1RfRVEoNjA2ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpwYWNrZWRfc2ludDY0X2V4dGVuc2lvbiAgLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDcg
ICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9maXhlZDMyX2V4dGVuc2lv
biAsIDApKTsKLSAgRVhQRUNUX0VRKDYwOCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cGFja2VkX2ZpeGVkNjRfZXh0ZW5zaW9uICwgMCkpOwotICBFWFBFQ1RfRVEoNjA5ICAsIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uLCAw
KSk7Ci0gIEVYUEVDVF9FUSg2MTAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBh
Y2tlZF9zZml4ZWQ2NF9leHRlbnNpb24sIDApKTsKLSAgRVhQRUNUX0VRKDYxMSAgLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2Zsb2F0X2V4dGVuc2lvbiAgICwgMCkpOwot
ICBFWFBFQ1RfRVEoNjEyICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRf
ZG91YmxlX2V4dGVuc2lvbiAgLCAwKSk7Ci0gIEVYUEVDVF9UUlVFKCAgICAgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9ib29sX2V4dGVuc2lvbiAgICAsIDApKTsKLSAgRVhQ
RUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0JBUiwKLSAgICAgICAgICAgIG1lc3NhZ2UuR2V0RXh0
ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZW51bV9leHRlbnNpb24sIDApKTsKLQotICAvLyBBY3R1
YWxseSB2ZXJpZnkgdGhlIHNlY29uZCAobW9kaWZpZWQpIGVsZW1lbnRzIG5vdy4KLSAgRVhQRUNU
X0VRKDgwMSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ludDMyX2V4
dGVuc2lvbiAgICwgMSkpOwotICBFWFBFQ1RfRVEoODAyICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpwYWNrZWRfaW50NjRfZXh0ZW5zaW9uICAgLCAxKSk7Ci0gIEVYUEVDVF9FUSg4
MDMgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF91aW50MzJfZXh0ZW5z
aW9uICAsIDEpKTsKLSAgRVhQRUNUX0VRKDgwNCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6cGFja2VkX3VpbnQ2NF9leHRlbnNpb24gICwgMSkpOwotICBFWFBFQ1RfRVEoODA1ICAs
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ludDMyX2V4dGVuc2lvbiAg
LCAxKSk7Ci0gIEVYUEVDVF9FUSg4MDYgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnBhY2tlZF9zaW50NjRfZXh0ZW5zaW9uICAsIDEpKTsKLSAgRVhQRUNUX0VRKDgwNyAgLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ZpeGVkMzJfZXh0ZW5zaW9uICwgMSkp
OwotICBFWFBFQ1RfRVEoODA4ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNr
ZWRfZml4ZWQ2NF9leHRlbnNpb24gLCAxKSk7Ci0gIEVYUEVDVF9FUSg4MDkgICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9zZml4ZWQzMl9leHRlbnNpb24sIDEpKTsKLSAg
RVhQRUNUX0VRKDgxMCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3Nm
aXhlZDY0X2V4dGVuc2lvbiwgMSkpOwotICBFWFBFQ1RfRVEoODExICAsIG1lc3NhZ2UuR2V0RXh0
ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZmxvYXRfZXh0ZW5zaW9uICAgLCAxKSk7Ci0gIEVYUEVD
VF9FUSg4MTIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9kb3VibGVf
ZXh0ZW5zaW9uICAsIDEpKTsKLSAgRVhQRUNUX1RSVUUoICAgICBtZXNzYWdlLkdldEV4dGVuc2lv
bih1bml0dGVzdDo6cGFja2VkX2Jvb2xfZXh0ZW5zaW9uICAgICwgMSkpOwotICBFWFBFQ1RfRVEo
dW5pdHRlc3Q6OkZPUkVJR05fRk9PLAotICAgICAgICAgICAgbWVzc2FnZS5HZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OnBhY2tlZF9lbnVtX2V4dGVuc2lvbiwgMSkpOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLXZvaWQgVGVzdFV0aWw6OkV4cGVjdFVucGFja2VkRXh0ZW5zaW9uc1NldCgKLSAgICBjb25z
dCB1bml0dGVzdDo6VGVzdFVucGFja2VkRXh0ZW5zaW9ucyYgbWVzc2FnZSkgewotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0Ojp1bnBhY2tlZF9pbnQzMl9leHRl
bnNpb24gICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVz
dDo6dW5wYWNrZWRfaW50NjRfZXh0ZW5zaW9uICAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdl
LkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnVucGFja2VkX3VpbnQzMl9leHRlbnNpb24gICkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0Ojp1bnBhY2tlZF91
aW50NjRfZXh0ZW5zaW9uICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6
ZSh1bml0dGVzdDo6dW5wYWNrZWRfc2ludDMyX2V4dGVuc2lvbiAgKSk7Ci0gIEFTU0VSVF9FUSgy
LCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnVucGFja2VkX3NpbnQ2NF9leHRlbnNp
b24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0Ojp1
bnBhY2tlZF9maXhlZDMyX2V4dGVuc2lvbiApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0
ZW5zaW9uU2l6ZSh1bml0dGVzdDo6dW5wYWNrZWRfZml4ZWQ2NF9leHRlbnNpb24gKSk7Ci0gIEFT
U0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnVucGFja2VkX3NmaXhl
ZDMyX2V4dGVuc2lvbikpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVu
aXR0ZXN0Ojp1bnBhY2tlZF9zZml4ZWQ2NF9leHRlbnNpb24pKTsKLSAgQVNTRVJUX0VRKDIsIG1l
c3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6dW5wYWNrZWRfZmxvYXRfZXh0ZW5zaW9uICAg
KSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnVucGFj
a2VkX2RvdWJsZV9leHRlbnNpb24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNp
b25TaXplKHVuaXR0ZXN0Ojp1bnBhY2tlZF9ib29sX2V4dGVuc2lvbiAgICApKTsKLSAgQVNTRVJU
X0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6dW5wYWNrZWRfZW51bV9leHRl
bnNpb24gICAgKSk7Ci0KLSAgRVhQRUNUX0VRKDYwMSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6dW5wYWNrZWRfaW50MzJfZXh0ZW5zaW9uICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSg2
MDIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnVucGFja2VkX2ludDY0X2V4dGVu
c2lvbiAgICwgMCkpOwotICBFWFBFQ1RfRVEoNjAzICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0Ojp1bnBhY2tlZF91aW50MzJfZXh0ZW5zaW9uICAsIDApKTsKLSAgRVhQRUNUX0VRKDYw
NCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6dW5wYWNrZWRfdWludDY0X2V4dGVu
c2lvbiAgLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDUgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnVucGFja2VkX3NpbnQzMl9leHRlbnNpb24gICwgMCkpOwotICBFWFBFQ1RfRVEoNjA2
ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojp1bnBhY2tlZF9zaW50NjRfZXh0ZW5z
aW9uICAsIDApKTsKLSAgRVhQRUNUX0VRKDYwNyAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6dW5wYWNrZWRfZml4ZWQzMl9leHRlbnNpb24gLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDgg
ICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnVucGFja2VkX2ZpeGVkNjRfZXh0ZW5z
aW9uICwgMCkpOwotICBFWFBFQ1RfRVEoNjA5ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0Ojp1bnBhY2tlZF9zZml4ZWQzMl9leHRlbnNpb24sIDApKTsKLSAgRVhQRUNUX0VRKDYxMCAg
LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6dW5wYWNrZWRfc2ZpeGVkNjRfZXh0ZW5z
aW9uLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MTEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnVucGFja2VkX2Zsb2F0X2V4dGVuc2lvbiAgICwgMCkpOwotICBFWFBFQ1RfRVEoNjEyICAs
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojp1bnBhY2tlZF9kb3VibGVfZXh0ZW5zaW9u
ICAsIDApKTsKLSAgRVhQRUNUX0VRKHRydWUgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6dW5wYWNrZWRfYm9vbF9leHRlbnNpb24gICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVz
dDo6Rk9SRUlHTl9CQVIsCi0gICAgICAgICAgICBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6dW5wYWNrZWRfZW51bV9leHRlbnNpb24sIDApKTsKLSAgRVhQRUNUX0VRKDcwMSAgLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6dW5wYWNrZWRfaW50MzJfZXh0ZW5zaW9uICAgLCAx
KSk7Ci0gIEVYUEVDVF9FUSg3MDIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnVu
cGFja2VkX2ludDY0X2V4dGVuc2lvbiAgICwgMSkpOwotICBFWFBFQ1RfRVEoNzAzICAsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojp1bnBhY2tlZF91aW50MzJfZXh0ZW5zaW9uICAsIDEp
KTsKLSAgRVhQRUNUX0VRKDcwNCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6dW5w
YWNrZWRfdWludDY0X2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9FUSg3MDUgICwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnVucGFja2VkX3NpbnQzMl9leHRlbnNpb24gICwgMSkp
OwotICBFWFBFQ1RfRVEoNzA2ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojp1bnBh
Y2tlZF9zaW50NjRfZXh0ZW5zaW9uICAsIDEpKTsKLSAgRVhQRUNUX0VRKDcwNyAgLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6dW5wYWNrZWRfZml4ZWQzMl9leHRlbnNpb24gLCAxKSk7
Ci0gIEVYUEVDVF9FUSg3MDggICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnVucGFj
a2VkX2ZpeGVkNjRfZXh0ZW5zaW9uICwgMSkpOwotICBFWFBFQ1RfRVEoNzA5ICAsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojp1bnBhY2tlZF9zZml4ZWQzMl9leHRlbnNpb24sIDEpKTsK
LSAgRVhQRUNUX0VRKDcxMCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6dW5wYWNr
ZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uLCAxKSk7Ci0gIEVYUEVDVF9FUSg3MTEgICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnVucGFja2VkX2Zsb2F0X2V4dGVuc2lvbiAgICwgMSkpOwot
ICBFWFBFQ1RfRVEoNzEyICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojp1bnBhY2tl
ZF9kb3VibGVfZXh0ZW5zaW9uICAsIDEpKTsKLSAgRVhQRUNUX0VRKGZhbHNlLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6dW5wYWNrZWRfYm9vbF9leHRlbnNpb24gICAgLCAxKSk7Ci0g
IEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9CQVosCi0gICAgICAgICAgICBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6dW5wYWNrZWRfZW51bV9leHRlbnNpb24sIDEpKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi12b2lkIFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNBbmRFeHRlbnNp
b25zSW5PcmRlcihjb25zdCBzdHJpbmcmIHNlcmlhbGl6ZWQpIHsKLSAgLy8gV2Ugc2V0IGVhY2gg
ZmllbGQgaW5kaXZpZHVhbGx5LCBzZXJpYWxpemUgc2VwYXJhdGVseSwgYW5kIGNvbmNhdGVuYXRl
IGFsbAotICAvLyB0aGUgc3RyaW5ncyBpbiBjYW5vbmljYWwgb3JkZXIgdG8gZGV0ZXJtaW5lIHRo
ZSBleHBlY3RlZCBzZXJpYWxpemF0aW9uLgotICBzdHJpbmcgZXhwZWN0ZWQ7Ci0gIHVuaXR0ZXN0
OjpUZXN0RmllbGRPcmRlcmluZ3MgbWVzc2FnZTsKLSAgbWVzc2FnZS5zZXRfbXlfaW50KDEpOyAg
Ly8gRmllbGQgMS4KLSAgbWVzc2FnZS5BcHBlbmRUb1N0cmluZygmZXhwZWN0ZWQpOwotICBtZXNz
YWdlLkNsZWFyKCk7Ci0gIG1lc3NhZ2UuU2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpteV9leHRlbnNp
b25faW50LCAyMyk7ICAvLyBGaWVsZCA1LgotICBtZXNzYWdlLkFwcGVuZFRvU3RyaW5nKCZleHBl
Y3RlZCk7Ci0gIG1lc3NhZ2UuQ2xlYXIoKTsKLSAgbWVzc2FnZS5zZXRfbXlfc3RyaW5nKCJmb28i
KTsgIC8vIEZpZWxkIDExLgotICBtZXNzYWdlLkFwcGVuZFRvU3RyaW5nKCZleHBlY3RlZCk7Ci0g
IG1lc3NhZ2UuQ2xlYXIoKTsKLSAgbWVzc2FnZS5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om15X2V4
dGVuc2lvbl9zdHJpbmcsICJiYXIiKTsgIC8vIEZpZWxkIDUwLgotICBtZXNzYWdlLkFwcGVuZFRv
U3RyaW5nKCZleHBlY3RlZCk7Ci0gIG1lc3NhZ2UuQ2xlYXIoKTsKLSAgbWVzc2FnZS5zZXRfbXlf
ZmxvYXQoMS4wKTsgIC8vIEZpZWxkIDEwMS4KLSAgbWVzc2FnZS5BcHBlbmRUb1N0cmluZygmZXhw
ZWN0ZWQpOwotICBtZXNzYWdlLkNsZWFyKCk7Ci0KLSAgLy8gV2UgZG9uJ3QgRVhQRUNUX0VRKCkg
c2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBwcmludCByYXcgYnl0ZXMgdG8gc3Rkb3V0LgotICBFWFBF
Q1RfVFJVRShzZXJpYWxpemVkID09IGV4cGVjdGVkKTsKLX0KLQotdm9pZCBUZXN0VXRpbDo6RXhw
ZWN0TGFzdFJlcGVhdGVkc1JlbW92ZWQoCi0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxUeXBl
cyYgbWVzc2FnZSkgewotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMl9zaXpl
ICAgKCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2NF9zaXplICAgKCkp
OwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF91aW50MzJfc2l6ZSAgKCkpOwotICBB
U1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF91aW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRf
RVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9zaW50MzJfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMSwg
bWVzc2FnZS5yZXBlYXRlZF9zaW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2Fn
ZS5yZXBlYXRlZF9maXhlZDMyX3NpemUgKCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBl
YXRlZF9maXhlZDY0X3NpemUgKCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9z
Zml4ZWQzMl9zaXplKCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQ2
NF9zaXplKCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9mbG9hdF9zaXplICAg
KCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9kb3VibGVfc2l6ZSAgKCkpOwot
ICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9ib29sX3NpemUgICAgKCkpOwotICBBU1NF
UlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEo
MSwgbWVzc2FnZS5yZXBlYXRlZF9ieXRlc19zaXplICAgKCkpOwotCi0gIEFTU0VSVF9FUSgxLCBt
ZXNzYWdlLnJlcGVhdGVkZ3JvdXBfc2l6ZSAgICAgICAgICAgKCkpOwotICBBU1NFUlRfRVEoMSwg
bWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9zaXplICgpKTsKLSAgQVNTRVJUX0VRKDEs
IG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX3NpemUoKSk7Ci0gIEFTU0VSVF9FUSgx
LCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX3NpemUgKCkpOwotICBBU1NFUlRfRVEo
MSwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9zaXplICgpKTsKLSAgQVNTRVJUX0VR
KDEsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW1fc2l6ZSAgICAoKSk7Ci0gIEFTU0VSVF9F
USgxLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9zaXplICAgKCkpOwotICBBU1NFUlRf
RVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfZW51bV9zaXplICAgICgpKTsKLQotI2lmbmRl
ZiBQUk9UT0JVRl9URVNUX05PX0RFU0NSSVBUT1JTCi0gIEFTU0VSVF9FUSgxLCBtZXNzYWdlLnJl
cGVhdGVkX3N0cmluZ19waWVjZV9zaXplKCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBl
YXRlZF9jb3JkX3NpemUoKSk7Ci0jZW5kaWYKLQotICAvLyBUZXN0IHRoYXQgdGhlIHJlbWFpbmlu
ZyBlbGVtZW50IGlzIHRoZSBjb3JyZWN0IG9uZS4KLSAgRVhQRUNUX0VRKDIwMSAgLCBtZXNzYWdl
LnJlcGVhdGVkX2ludDMyICAgKDApKTsKLSAgRVhQRUNUX0VRKDIwMiAgLCBtZXNzYWdlLnJlcGVh
dGVkX2ludDY0ICAgKDApKTsKLSAgRVhQRUNUX0VRKDIwMyAgLCBtZXNzYWdlLnJlcGVhdGVkX3Vp
bnQzMiAgKDApKTsKLSAgRVhQRUNUX0VRKDIwNCAgLCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQ2NCAg
KDApKTsKLSAgRVhQRUNUX0VRKDIwNSAgLCBtZXNzYWdlLnJlcGVhdGVkX3NpbnQzMiAgKDApKTsK
LSAgRVhQRUNUX0VRKDIwNiAgLCBtZXNzYWdlLnJlcGVhdGVkX3NpbnQ2NCAgKDApKTsKLSAgRVhQ
RUNUX0VRKDIwNyAgLCBtZXNzYWdlLnJlcGVhdGVkX2ZpeGVkMzIgKDApKTsKLSAgRVhQRUNUX0VR
KDIwOCAgLCBtZXNzYWdlLnJlcGVhdGVkX2ZpeGVkNjQgKDApKTsKLSAgRVhQRUNUX0VRKDIwOSAg
LCBtZXNzYWdlLnJlcGVhdGVkX3NmaXhlZDMyKDApKTsKLSAgRVhQRUNUX0VRKDIxMCAgLCBtZXNz
YWdlLnJlcGVhdGVkX3NmaXhlZDY0KDApKTsKLSAgRVhQRUNUX0VRKDIxMSAgLCBtZXNzYWdlLnJl
cGVhdGVkX2Zsb2F0ICAgKDApKTsKLSAgRVhQRUNUX0VRKDIxMiAgLCBtZXNzYWdlLnJlcGVhdGVk
X2RvdWJsZSAgKDApKTsKLSAgRVhQRUNUX1RSVUUoICAgICBtZXNzYWdlLnJlcGVhdGVkX2Jvb2wg
ICAgKDApKTsKLSAgRVhQRUNUX0VRKCIyMTUiLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZyAgKDAp
KTsKLSAgRVhQRUNUX0VRKCIyMTYiLCBtZXNzYWdlLnJlcGVhdGVkX2J5dGVzICAgKDApKTsKLQot
ICBFWFBFQ1RfRVEoMjE3LCBtZXNzYWdlLnJlcGVhdGVkZ3JvdXAgICAgICAgICAgICgwKS5hKCkp
OwotICBFWFBFQ1RfRVEoMjE4LCBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlICgwKS5i
YigpKTsKLSAgRVhQRUNUX0VRKDIxOSwgbWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2Uo
MCkuYygpKTsKLSAgRVhQRUNUX0VRKDIyMCwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfbWVzc2Fn
ZSAoMCkuZCgpKTsKLSAgRVhQRUNUX0VRKDIyMCwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfbWVz
c2FnZSAoMCkuZCgpKTsKLQotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFS
LCBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9lbnVtICgwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVz
dDo6Rk9SRUlHTl9CQVIgICAgICAsIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9lbnVtKDApKTsK
LSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0JBUiwgbWVzc2FnZS5yZXBlYXRl
ZF9pbXBvcnRfZW51bSAoMCkpOwotfQotCi12b2lkIFRlc3RVdGlsOjpFeHBlY3RMYXN0UmVwZWF0
ZWRFeHRlbnNpb25zUmVtb3ZlZCgKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lv
bnMmIG1lc3NhZ2UpIHsKLQotICAvLyBUZXN0IHRoYXQgb25lIGVsZW1lbnQgd2FzIHJlbW92ZWQu
Ci0gIEFTU0VSVF9FUSgxLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVk
X2ludDMyX2V4dGVuc2lvbiAgICkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQ2NF9leHRlbnNpb24gICApKTsKLSAgQVNTRVJUX0VR
KDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfdWludDMyX2V4dGVu
c2lvbiAgKSk7Ci0gIEFTU0VSVF9FUSgxLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6
OnJlcGVhdGVkX3VpbnQ2NF9leHRlbnNpb24gICkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5F
eHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uICApKTsKLSAg
QVNTRVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc2lu
dDY0X2V4dGVuc2lvbiAgKSk7Ci0gIEFTU0VSVF9FUSgxLCBtZXNzYWdlLkV4dGVuc2lvblNpemUo
dW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uICkpOwotICBBU1NFUlRfRVEoMSwg
bWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lv
biApKTsKLSAgQVNTRVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVw
ZWF0ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uKSk7Ci0gIEFTU0VSVF9FUSgxLCBtZXNzYWdlLkV4dGVu
c2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVuc2lvbikpOwotICBBU1NF
UlRfRVEoMSwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9mbG9hdF9l
eHRlbnNpb24gICApKTsKLSAgQVNTRVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0
dGVzdDo6cmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbiAgKSk7Ci0gIEFTU0VSVF9FUSgxLCBtZXNz
YWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2Jvb2xfZXh0ZW5zaW9uICAgICkp
OwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRl
ZF9zdHJpbmdfZXh0ZW5zaW9uICApKTsKLSAgQVNTRVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9u
U2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uICAgKSk7Ci0KLSAgQVNTRVJU
X0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRncm91cF9leHRl
bnNpb24gICAgICAgICAgICkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5FeHRlbnNpb25TaXpl
KHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24gKSk7Ci0gIEFTU0VS
VF9FUSgxLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25f
bWVzc2FnZV9leHRlbnNpb24pKTsKLSAgQVNTRVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6
ZSh1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uICkpOwotICBBU1NF
UlRfRVEoMSwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9sYXp5X21l
c3NhZ2VfZXh0ZW5zaW9uICAgKSk7Ci0gIEFTU0VSVF9FUSgxLCBtZXNzYWdlLkV4dGVuc2lvblNp
emUodW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbiAgICApKTsKLSAgQVNT
RVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWln
bl9lbnVtX2V4dGVuc2lvbiAgICkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfZW51bV9leHRlbnNpb24gICAgKSk7Ci0KLSAg
QVNTRVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc3Ry
aW5nX3BpZWNlX2V4dGVuc2lvbikpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9jb3JkX2V4dGVuc2lvbikpOwotCi0gIC8vIFRlc3QgdGhh
dCB0aGUgcmVtYWluaW5nIGVsZW1lbnQgaXMgdGhlIGNvcnJlY3Qgb25lLgotICBFWFBFQ1RfRVEo
MjAxICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRl
bnNpb24gICAsIDApKTsKLSAgRVhQRUNUX0VRKDIwMiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6cmVwZWF0ZWRfaW50NjRfZXh0ZW5zaW9uICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgy
MDMgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3VpbnQzMl9leHRl
bnNpb24gICwgMCkpOwotICBFWFBFQ1RfRVEoMjA0ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpyZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uICAsIDApKTsKLSAgRVhQRUNUX0VRKDIw
NSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDMyX2V4dGVu
c2lvbiAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDYgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb24gICwgMCkpOwotICBFWFBFQ1RfRVEoMjA3
ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDMyX2V4dGVu
c2lvbiAsIDApKTsKLSAgRVhQRUNUX0VRKDIwOCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6cmVwZWF0ZWRfZml4ZWQ2NF9leHRlbnNpb24gLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDkg
ICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDMyX2V4dGVu
c2lvbiwgMCkpOwotICBFWFBFQ1RfRVEoMjEwICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9zZml4ZWQ2NF9leHRlbnNpb24sIDApKTsKLSAgRVhQRUNUX0VRKDIxMSAg
LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZmxvYXRfZXh0ZW5zaW9u
ICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMTIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb24gICwgMCkpOwotICBFWFBFQ1RfVFJVRSggICAg
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9ib29sX2V4dGVuc2lvbiAg
ICAsIDApKTsKLSAgRVhQRUNUX0VRKCIyMTUiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbiAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgiMjE2Iiwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2J5dGVzX2V4dGVuc2lvbiAg
ICwgMCkpOwotCi0gIEVYUEVDVF9FUSgyMTcsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZGdyb3VwX2V4dGVuc2lvbiAgICAgICAgICAgLCAwKS5hKCkpOwotICBFWFBFQ1Rf
RVEoMjE4LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21l
c3NhZ2VfZXh0ZW5zaW9uICwgMCkuYmIoKSk7Ci0gIEVYUEVDVF9FUSgyMTksIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uLCAw
KS5jKCkpOwotICBFWFBFQ1RfRVEoMjIwLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6
cmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uICwgMCkuZCgpKTsKLSAgRVhQRUNUX0VR
KDIyNywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2xhenlfbWVzc2Fn
ZV9leHRlbnNpb24gICAsIDApLmJiKCkpOwotCi0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFs
bFR5cGVzOjpCQVIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0
ZWRfZW51bV9leHRlbnNpb24gLCAwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9C
QVIgICAgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWdu
X2VudW1fZXh0ZW5zaW9uLCAwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9S
VF9CQVIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfZW51
bV9leHRlbnNpb24gLCAwKSk7Ci0KLSAgRVhQRUNUX0VRKCIyMjQiLCBtZXNzYWdlLkdldEV4dGVu
c2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX3BpZWNlX2V4dGVuc2lvbiwgMCkpOwotICBF
WFBFQ1RfRVEoIjIyNSIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9j
b3JkX2V4dGVuc2lvbiwgMCkpOwotfQotCi12b2lkIFRlc3RVdGlsOjpFeHBlY3RMYXN0UmVwZWF0
ZWRzUmVsZWFzZWQoCi0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyYgbWVzc2FnZSkg
ewotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZGdyb3VwX3NpemUgICAgICAgICAgICgp
KTsKLSAgQVNTRVJUX0VRKDEsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Vfc2l6ZSAo
KSk7Ci0gIEFTU0VSVF9FUSgxLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9zaXpl
KCkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9zaXpl
ICgpKTsKLSAgQVNTRVJUX0VRKDEsIG1lc3NhZ2UucmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2Vfc2l6
ZSAoKSk7Ci0KLSAgRVhQRUNUX0VRKDIxNywgbWVzc2FnZS5yZXBlYXRlZGdyb3VwICAgICAgICAg
ICAoMCkuYSgpKTsKLSAgRVhQRUNUX0VRKDIxOCwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZSAoMCkuYmIoKSk7Ci0gIEVYUEVDVF9FUSgyMTksIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWln
bl9tZXNzYWdlKDApLmMoKSk7Ci0gIEVYUEVDVF9FUSgyMjAsIG1lc3NhZ2UucmVwZWF0ZWRfaW1w
b3J0X21lc3NhZ2UgKDApLmQoKSk7Ci0gIEVYUEVDVF9FUSgyMjAsIG1lc3NhZ2UucmVwZWF0ZWRf
aW1wb3J0X21lc3NhZ2UgKDApLmQoKSk7Ci19Ci0KLXZvaWQgVGVzdFV0aWw6OkV4cGVjdExhc3RS
ZXBlYXRlZEV4dGVuc2lvbnNSZWxlYXNlZCgKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdEFsbEV4
dGVuc2lvbnMmIG1lc3NhZ2UpIHsKLSAgQVNTRVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6
ZSh1bml0dGVzdDo6cmVwZWF0ZWRncm91cF9leHRlbnNpb24gICAgICAgICAgICkpOwotICBBU1NF
UlRfRVEoMSwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRf
bWVzc2FnZV9leHRlbnNpb24gKSk7Ci0gIEFTU0VSVF9FUSgxLCBtZXNzYWdlLkV4dGVuc2lvblNp
emUodW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24pKTsKLSAgQVNT
RVJUX0VRKDEsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0
X21lc3NhZ2VfZXh0ZW5zaW9uICkpOwotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uICAgKSk7Ci0KLSAg
RVhQRUNUX0VRKDIxNywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkZ3Jv
dXBfZXh0ZW5zaW9uICAgICAgICAgICAsIDApLmEoKSk7Ci0gIEVYUEVDVF9FUSgyMTgsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNp
b24gLCAwKS5iYigpKTsKLSAgRVhQRUNUX0VRKDIxOSwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24sIDApLmMoKSk7Ci0gIEVY
UEVDVF9FUSgyMjAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBv
cnRfbWVzc2FnZV9leHRlbnNpb24gLCAwKS5kKCkpOwotICBFWFBFQ1RfRVEoMjI3LCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbiAg
ICwgMCkuYmIoKSk7Ci19Ci0KLXZvaWQgVGVzdFV0aWw6OkV4cGVjdFJlcGVhdGVkc1N3YXBwZWQo
Ci0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyYgbWVzc2FnZSkgewotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMl9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwg
bWVzc2FnZS5yZXBlYXRlZF9pbnQ2NF9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZS5yZXBlYXRlZF91aW50MzJfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBl
YXRlZF91aW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9z
aW50MzJfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zaW50NjRf
c2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDMyX3NpemUg
KCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDY0X3NpemUgKCkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQzMl9zaXplKCkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQ2NF9zaXplKCkpOwotICBBU1NFUlRfRVEo
MiwgbWVzc2FnZS5yZXBlYXRlZF9mbG9hdF9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5yZXBlYXRlZF9kb3VibGVfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5y
ZXBlYXRlZF9ib29sX3NpemUgICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRl
ZF9zdHJpbmdfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9ieXRl
c19zaXplICAgKCkpOwotCi0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkZ3JvdXBfc2l6
ZSAgICAgICAgICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRf
bWVzc2FnZV9zaXplICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWln
bl9tZXNzYWdlX3NpemUoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9y
dF9tZXNzYWdlX3NpemUgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9pbXBv
cnRfbWVzc2FnZV9zaXplICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfbmVz
dGVkX2VudW1fc2l6ZSAgICAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2Zv
cmVpZ25fZW51bV9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9p
bXBvcnRfZW51bV9zaXplICAgICgpKTsKLQotI2lmbmRlZiBQUk9UT0JVRl9URVNUX05PX0RFU0NS
SVBUT1JTCi0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZ19waWVjZV9zaXpl
KCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9jb3JkX3NpemUoKSk7Ci0jZW5k
aWYKLQotICAvLyBUZXN0IHRoYXQgdGhlIGZpcnN0IGVsZW1lbnQgYW5kIHNlY29uZCBlbGVtZW50
IGFyZSBmbGlwcGVkLgotICBFWFBFQ1RfRVEoMjAxICAsIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzIg
ICAoMSkpOwotICBFWFBFQ1RfRVEoMjAyICAsIG1lc3NhZ2UucmVwZWF0ZWRfaW50NjQgICAoMSkp
OwotICBFWFBFQ1RfRVEoMjAzICAsIG1lc3NhZ2UucmVwZWF0ZWRfdWludDMyICAoMSkpOwotICBF
WFBFQ1RfRVEoMjA0ICAsIG1lc3NhZ2UucmVwZWF0ZWRfdWludDY0ICAoMSkpOwotICBFWFBFQ1Rf
RVEoMjA1ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDMyICAoMSkpOwotICBFWFBFQ1RfRVEoMjA2
ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDY0ICAoMSkpOwotICBFWFBFQ1RfRVEoMjA3ICAsIG1l
c3NhZ2UucmVwZWF0ZWRfZml4ZWQzMiAoMSkpOwotICBFWFBFQ1RfRVEoMjA4ICAsIG1lc3NhZ2Uu
cmVwZWF0ZWRfZml4ZWQ2NCAoMSkpOwotICBFWFBFQ1RfRVEoMjA5ICAsIG1lc3NhZ2UucmVwZWF0
ZWRfc2ZpeGVkMzIoMSkpOwotICBFWFBFQ1RfRVEoMjEwICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2Zp
eGVkNjQoMSkpOwotICBFWFBFQ1RfRVEoMjExICAsIG1lc3NhZ2UucmVwZWF0ZWRfZmxvYXQgICAo
MSkpOwotICBFWFBFQ1RfRVEoMjEyICAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlICAoMSkpOwot
ICBFWFBFQ1RfVFJVRSggICAgIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbCAgICAoMSkpOwotICBFWFBF
Q1RfRVEoIjIxNSIsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nICAoMSkpOwotICBFWFBFQ1RfRVEo
IjIxNiIsIG1lc3NhZ2UucmVwZWF0ZWRfYnl0ZXMgICAoMSkpOwotCi0gIEVYUEVDVF9FUSgyMTcs
IG1lc3NhZ2UucmVwZWF0ZWRncm91cCAgICAgICAgICAgKDEpLmEoKSk7Ci0gIEVYUEVDVF9FUSgy
MTgsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgKDEpLmJiKCkpOwotICBFWFBFQ1Rf
RVEoMjE5LCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgxKS5jKCkpOwotICBFWFBF
Q1RfRVEoMjIwLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlICgxKS5kKCkpOwotICBF
WFBFQ1RfRVEoMjIwLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlICgxKS5kKCkpOwot
Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpCQVIsIG1lc3NhZ2UucmVwZWF0
ZWRfbmVzdGVkX2VudW0gKDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0JBUiAg
ICAgICwgbWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX2VudW0oMSkpOwotICBFWFBFQ1RfRVEodW5p
dHRlc3RfaW1wb3J0OjpJTVBPUlRfQkFSLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9lbnVtICgx
KSk7Ci0KLSAgRVhQRUNUX0VRKDMwMSAgLCBtZXNzYWdlLnJlcGVhdGVkX2ludDMyICAgKDApKTsK
LSAgRVhQRUNUX0VRKDMwMiAgLCBtZXNzYWdlLnJlcGVhdGVkX2ludDY0ICAgKDApKTsKLSAgRVhQ
RUNUX0VRKDMwMyAgLCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQzMiAgKDApKTsKLSAgRVhQRUNUX0VR
KDMwNCAgLCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQ2NCAgKDApKTsKLSAgRVhQRUNUX0VRKDMwNSAg
LCBtZXNzYWdlLnJlcGVhdGVkX3NpbnQzMiAgKDApKTsKLSAgRVhQRUNUX0VRKDMwNiAgLCBtZXNz
YWdlLnJlcGVhdGVkX3NpbnQ2NCAgKDApKTsKLSAgRVhQRUNUX0VRKDMwNyAgLCBtZXNzYWdlLnJl
cGVhdGVkX2ZpeGVkMzIgKDApKTsKLSAgRVhQRUNUX0VRKDMwOCAgLCBtZXNzYWdlLnJlcGVhdGVk
X2ZpeGVkNjQgKDApKTsKLSAgRVhQRUNUX0VRKDMwOSAgLCBtZXNzYWdlLnJlcGVhdGVkX3NmaXhl
ZDMyKDApKTsKLSAgRVhQRUNUX0VRKDMxMCAgLCBtZXNzYWdlLnJlcGVhdGVkX3NmaXhlZDY0KDAp
KTsKLSAgRVhQRUNUX0VRKDMxMSAgLCBtZXNzYWdlLnJlcGVhdGVkX2Zsb2F0ICAgKDApKTsKLSAg
RVhQRUNUX0VRKDMxMiAgLCBtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZSAgKDApKTsKLSAgRVhQRUNU
X0ZBTFNFKCAgICBtZXNzYWdlLnJlcGVhdGVkX2Jvb2wgICAgKDApKTsKLSAgRVhQRUNUX0VRKCIz
MTUiLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZyAgKDApKTsKLSAgRVhQRUNUX0VRKCIzMTYiLCBt
ZXNzYWdlLnJlcGVhdGVkX2J5dGVzICAgKDApKTsKLQotICBFWFBFQ1RfRVEoMzE3LCBtZXNzYWdl
LnJlcGVhdGVkZ3JvdXAgICAgICAgICAgICgwKS5hKCkpOwotICBFWFBFQ1RfRVEoMzE4LCBtZXNz
YWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlICgwKS5iYigpKTsKLSAgRVhQRUNUX0VRKDMxOSwg
bWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UoMCkuYygpKTsKLSAgRVhQRUNUX0VRKDMy
MCwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSAoMCkuZCgpKTsKLSAgRVhQRUNUX0VR
KDMyMCwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSAoMCkuZCgpKTsKLQotICBFWFBF
Q1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFaLCBtZXNzYWdlLnJlcGVhdGVkX25lc3Rl
ZF9lbnVtICgwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9CQVogICAgICAsIG1l
c3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9lbnVtKDApKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2lt
cG9ydDo6SU1QT1JUX0JBWiwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfZW51bSAoMCkpOwotfQot
Ci12b2lkIFRlc3RVdGlsOjpFeHBlY3RSZXBlYXRlZEV4dGVuc2lvbnNTd2FwcGVkKAotICAgIGNv
bnN0IHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyYgbWVzc2FnZSkgewotCi0gIEFTU0VSVF9F
USgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVu
c2lvbiAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9pbnQ2NF9leHRlbnNpb24gICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2Uu
RXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfdWludDMyX2V4dGVuc2lvbiAgKSk7Ci0g
IEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3Vp
bnQ2NF9leHRlbnNpb24gICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXpl
KHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uICApKTsKLSAgQVNTRVJUX0VRKDIs
IG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDY0X2V4dGVuc2lv
biAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJl
cGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRl
bnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lvbiApKTsKLSAgQVNT
RVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVk
MzJfZXh0ZW5zaW9uKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5p
dHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVuc2lvbikpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9mbG9hdF9leHRlbnNpb24gICAp
KTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0
ZWRfZG91YmxlX2V4dGVuc2lvbiAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lv
blNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2Jvb2xfZXh0ZW5zaW9uICAgICkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0
ZW5zaW9uICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVz
dDo6cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uICAgKSk7Ci0KLSAgQVNTRVJUX0VRKDIsIG1lc3Nh
Z2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRncm91cF9leHRlbnNpb24gICAgICAg
ICAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24gKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNz
YWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRl
bnNpb24pKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6
cmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uICkpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5z
aW9uICAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6
OnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbiAgICApKTsKLSAgQVNTRVJUX0VRKDIsIG1l
c3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVu
c2lvbiAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9pbXBvcnRfZW51bV9leHRlbnNpb24gICAgKSk7Ci0KLSAgQVNTRVJUX0VRKDIs
IG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX3BpZWNlX2V4
dGVuc2lvbikpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9jb3JkX2V4dGVuc2lvbikpOwotCi0gIEVYUEVDVF9FUSgyMDEgICwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbiAgICwgMSkp
OwotICBFWFBFQ1RfRVEoMjAyICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBl
YXRlZF9pbnQ2NF9leHRlbnNpb24gICAsIDEpKTsKLSAgRVhQRUNUX0VRKDIwMyAgLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfdWludDMyX2V4dGVuc2lvbiAgLCAxKSk7
Ci0gIEVYUEVDVF9FUSgyMDQgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVh
dGVkX3VpbnQ2NF9leHRlbnNpb24gICwgMSkpOwotICBFWFBFQ1RfRVEoMjA1ICAsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uICAsIDEpKTsK
LSAgRVhQRUNUX0VRKDIwNiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0
ZWRfc2ludDY0X2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9FUSgyMDcgICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uICwgMSkpOwot
ICBFWFBFQ1RfRVEoMjA4ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRl
ZF9maXhlZDY0X2V4dGVuc2lvbiAsIDEpKTsKLSAgRVhQRUNUX0VRKDIwOSAgLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uLCAxKSk7Ci0g
IEVYUEVDVF9FUSgyMTAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVk
X3NmaXhlZDY0X2V4dGVuc2lvbiwgMSkpOwotICBFWFBFQ1RfRVEoMjExICAsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mbG9hdF9leHRlbnNpb24gICAsIDEpKTsKLSAg
RVhQRUNUX0VRKDIxMiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRf
ZG91YmxlX2V4dGVuc2lvbiAgLCAxKSk7Ci0gIEVYUEVDVF9UUlVFKCAgICAgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Jvb2xfZXh0ZW5zaW9uICAgICwgMSkpOwotICBF
WFBFQ1RfRVEoIjIxNSIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9z
dHJpbmdfZXh0ZW5zaW9uICAsIDEpKTsKLSAgRVhQRUNUX0VRKCIyMTYiLCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uICAgLCAxKSk7Ci0KLSAg
RVhQRUNUX0VRKDIxNywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkZ3Jv
dXBfZXh0ZW5zaW9uICAgICAgICAgICAsIDEpLmEoKSk7Ci0gIEVYUEVDVF9FUSgyMTgsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNp
b24gLCAxKS5iYigpKTsKLSAgRVhQRUNUX0VRKDIxOSwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24sIDEpLmMoKSk7Ci0gIEVY
UEVDVF9FUSgyMjAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBv
cnRfbWVzc2FnZV9leHRlbnNpb24gLCAxKS5kKCkpOwotICBFWFBFQ1RfRVEoMjI3LCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbiAg
ICwgMSkuYmIoKSk7Ci0KLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkJBUiwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVu
c2lvbiAsIDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0JBUiAgICAgICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNp
b24sIDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0JBUiwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9lbnVtX2V4dGVuc2lvbiAs
IDEpKTsKLQotICBFWFBFQ1RfRVEoIjIyNCIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uLCAxKSk7Ci0gIEVYUEVDVF9FUSgiMjI1
IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2NvcmRfZXh0ZW5zaW9u
LCAxKSk7Ci0KLSAgRVhQRUNUX0VRKDMwMSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgzMDIgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDY0X2V4dGVuc2lvbiAg
ICwgMCkpOwotICBFWFBFQ1RfRVEoMzAzICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uICAsIDApKTsKLSAgRVhQRUNUX0VRKDMwNCAgLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfdWludDY0X2V4dGVuc2lvbiAg
LCAwKSk7Ci0gIEVYUEVDVF9FUSgzMDUgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnJlcGVhdGVkX3NpbnQzMl9leHRlbnNpb24gICwgMCkpOwotICBFWFBFQ1RfRVEoMzA2ICAsIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50NjRfZXh0ZW5zaW9uICAs
IDApKTsKLSAgRVhQRUNUX0VRKDMwNyAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6
cmVwZWF0ZWRfZml4ZWQzMl9leHRlbnNpb24gLCAwKSk7Ci0gIEVYUEVDVF9FUSgzMDggICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkNjRfZXh0ZW5zaW9uICwg
MCkpOwotICBFWFBFQ1RfRVEoMzA5ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9zZml4ZWQzMl9leHRlbnNpb24sIDApKTsKLSAgRVhQRUNUX0VRKDMxMCAgLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uLCAw
KSk7Ci0gIEVYUEVDVF9FUSgzMTEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJl
cGVhdGVkX2Zsb2F0X2V4dGVuc2lvbiAgICwgMCkpOwotICBFWFBFQ1RfRVEoMzEyICAsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9kb3VibGVfZXh0ZW5zaW9uICAsIDAp
KTsKLSAgRVhQRUNUX0ZBTFNFKCAgICBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVw
ZWF0ZWRfYm9vbF9leHRlbnNpb24gICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgiMzE1IiwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3N0cmluZ19leHRlbnNpb24gICwgMCkp
OwotICBFWFBFQ1RfRVEoIjMxNiIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBl
YXRlZF9ieXRlc19leHRlbnNpb24gICAsIDApKTsKLQotICBFWFBFQ1RfRVEoMzE3LCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRncm91cF9leHRlbnNpb24gICAgICAgICAg
ICwgMCkuYSgpKTsKLSAgRVhQRUNUX0VRKDMxOCwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbiAsIDApLmJiKCkpOwotICBFWFBF
Q1RfRVEoMzE5LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWln
bl9tZXNzYWdlX2V4dGVuc2lvbiwgMCkuYygpKTsKLSAgRVhQRUNUX0VRKDMyMCwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbiAs
IDApLmQoKSk7Ci0gIEVYUEVDVF9FUSgzMjcsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uICAgLCAwKS5iYigpKTsKLQotICBFWFBF
Q1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFaLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uICwgMCkpOwotICBFWFBFQ1Rf
RVEodW5pdHRlc3Q6OkZPUkVJR05fQkFaICAgICAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6cmVwZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbiwgMCkpOwotICBFWFBFQ1RfRVEo
dW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfQkFaLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5zaW9uICwgMCkpOwotCi0gIEVYUEVDVF9FUSgi
MzI0IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3N0cmluZ19waWVj
ZV9leHRlbnNpb24sIDApKTsKLSAgRVhQRUNUX0VRKCIzMjUiLCBtZXNzYWdlLkdldEV4dGVuc2lv
bih1bml0dGVzdDo6cmVwZWF0ZWRfY29yZF9leHRlbnNpb24sIDApKTsKLX0KLQotdm9pZCBUZXN0
VXRpbDo6U2V0T25lb2YxKHVuaXR0ZXN0OjpUZXN0T25lb2YyKiBtZXNzYWdlKSB7Ci0gIG1lc3Nh
Z2UtPm11dGFibGVfZm9vX2xhenlfbWVzc2FnZSgpLT5zZXRfcXV4X2ludCgxMDApOwotICBtZXNz
YWdlLT5zZXRfYmFyX3N0cmluZygiMTAxIik7Ci0gIG1lc3NhZ2UtPnNldF9iYXpfaW50KDEwMik7
Ci0gIG1lc3NhZ2UtPnNldF9iYXpfc3RyaW5nKCIxMDMiKTsKLX0KLQotdm9pZCBUZXN0VXRpbDo6
U2V0T25lb2YyKHVuaXR0ZXN0OjpUZXN0T25lb2YyKiBtZXNzYWdlKSB7Ci0gIG1lc3NhZ2UtPnNl
dF9mb29faW50KDIwMCk7Ci0gIG1lc3NhZ2UtPnNldF9iYXJfZW51bSh1bml0dGVzdDo6VGVzdE9u
ZW9mMjo6QkFaKTsKLSAgbWVzc2FnZS0+c2V0X2Jhel9pbnQoMjAyKTsKLSAgbWVzc2FnZS0+c2V0
X2Jhel9zdHJpbmcoIjIwMyIpOwotfQotCi12b2lkIFRlc3RVdGlsOjpFeHBlY3RPbmVvZlNldDEo
Y29uc3QgdW5pdHRlc3Q6OlRlc3RPbmVvZjImIG1lc3NhZ2UpIHsKLSAgRXhwZWN0QXRNb3N0T25l
RmllbGRTZXRJbk9uZW9mKG1lc3NhZ2UpOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX2Zv
b19sYXp5X21lc3NhZ2UgICAgICAgICAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmZvb19s
YXp5X21lc3NhZ2UoKS5oYXNfcXV4X2ludCgpKTsKLQotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhh
c19iYXJfc3RyaW5nKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19iYXpfaW50ICAgKCkp
OwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19iYXpfc3RyaW5nKCkpOwotCi0gIEFTU0VSVF9F
USgwLCBtZXNzYWdlLmZvb19sYXp5X21lc3NhZ2UoKS5jb3JnZV9pbnRfc2l6ZSgpKTsKLQotICBF
WFBFQ1RfRVEoMTAwICAsIG1lc3NhZ2UuZm9vX2xhenlfbWVzc2FnZSgpLnF1eF9pbnQoKSk7Ci0g
IEVYUEVDVF9FUSgiMTAxIiwgbWVzc2FnZS5iYXJfc3RyaW5nICAgICAgICAgICAgICAgICgpKTsK
LSAgRVhQRUNUX0VRKDEwMiAgLCBtZXNzYWdlLmJhel9pbnQgICAgICAgICAgICAgICAgICAgKCkp
OwotICBFWFBFQ1RfRVEoIjEwMyIsIG1lc3NhZ2UuYmF6X3N0cmluZyAgICAgICAgICAgICAgICAo
KSk7Ci19Ci0KLXZvaWQgVGVzdFV0aWw6OkV4cGVjdE9uZW9mU2V0Mihjb25zdCB1bml0dGVzdDo6
VGVzdE9uZW9mMiYgbWVzc2FnZSkgewotICBFeHBlY3RBdE1vc3RPbmVGaWVsZFNldEluT25lb2Yo
bWVzc2FnZSk7Ci0KLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZm9vX2ludCAgICgpKTsKLSAg
RVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfYmFyX2VudW0gICgpKTsKLSAgRVhQRUNUX1RSVUUobWVz
c2FnZS5oYXNfYmF6X2ludCAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfYmF6X3N0
cmluZygpKTsKLQotICBFWFBFQ1RfRVEoMjAwICAgICAgICAgICAgICAgICAgICAgICwgbWVzc2Fn
ZS5mb29faW50ICAgKCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RPbmVvZjI6OkJBWiwg
bWVzc2FnZS5iYXJfZW51bSAgKCkpOwotICBFWFBFQ1RfRVEoMjAyICAgICAgICAgICAgICAgICAg
ICAgICwgbWVzc2FnZS5iYXpfaW50ICAgKCkpOwotICBFWFBFQ1RfRVEoIjIwMyIgICAgICAgICAg
ICAgICAgICAgICwgbWVzc2FnZS5iYXpfc3RyaW5nKCkpOwotfQotCi12b2lkIFRlc3RVdGlsOjpF
eHBlY3RPbmVvZkNsZWFyKGNvbnN0IHVuaXR0ZXN0OjpUZXN0T25lb2YyJiBtZXNzYWdlKSB7Ci0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19mb29faW50KCkpOwotICBFWFBFQ1RfRkFMU0UobWVz
c2FnZS5oYXNfZm9vX3N0cmluZygpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19i
eXRlcygpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19lbnVtKCkpOwotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS5oYXNfZm9vX21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNz
YWdlLmhhc19mb29ncm91cCgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Zvb19sYXp5
X21lc3NhZ2UoKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Jhcl9pbnQoKSk7Ci0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19iYXJfc3RyaW5nKCkpOwotICBFWFBFQ1RfRkFMU0Uo
bWVzc2FnZS5oYXNfYmFyX2J5dGVzKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfYmFy
X2VudW0oKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Jhel9pbnQoKSk7Ci0gIEVY
UEVDVF9GQUxTRShtZXNzYWdlLmhhc19iYXpfc3RyaW5nKCkpOwotCi0gIEVYUEVDVF9FUSh1bml0
dGVzdDo6VGVzdE9uZW9mMjo6Rk9PX05PVF9TRVQsIG1lc3NhZ2UuZm9vX2Nhc2UoKSk7Ci0gIEVY
UEVDVF9FUSh1bml0dGVzdDo6VGVzdE9uZW9mMjo6QkFSX05PVF9TRVQsIG1lc3NhZ2UuYmFyX2Nh
c2UoKSk7Ci19Ci0KLXZvaWQgVGVzdFV0aWw6OkV4cGVjdEF0TW9zdE9uZUZpZWxkU2V0SW5PbmVv
ZigKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdE9uZW9mMiYgbWVzc2FnZSkgewotICBpbnQgY291
bnQgPSAwOwotICBpZiAobWVzc2FnZS5oYXNfZm9vX2ludCgpKSBjb3VudCsrOwotICBpZiAobWVz
c2FnZS5oYXNfZm9vX3N0cmluZygpKSBjb3VudCsrOwotICBpZiAobWVzc2FnZS5oYXNfZm9vX2J5
dGVzKCkpIGNvdW50Kys7Ci0gIGlmIChtZXNzYWdlLmhhc19mb29fZW51bSgpKSBjb3VudCsrOwot
ICBpZiAobWVzc2FnZS5oYXNfZm9vX21lc3NhZ2UoKSkgY291bnQrKzsKLSAgaWYgKG1lc3NhZ2Uu
aGFzX2Zvb2dyb3VwKCkpIGNvdW50Kys7Ci0gIGlmIChtZXNzYWdlLmhhc19mb29fbGF6eV9tZXNz
YWdlKCkpIGNvdW50Kys7Ci0gIEVYUEVDVF9MRShjb3VudCwgMSk7Ci0gIGNvdW50ID0gMDsKLSAg
aWYgKG1lc3NhZ2UuaGFzX2Jhcl9pbnQoKSkgY291bnQrKzsKLSAgaWYgKG1lc3NhZ2UuaGFzX2Jh
cl9zdHJpbmcoKSkgY291bnQrKzsKLSAgaWYgKG1lc3NhZ2UuaGFzX2Jhcl9ieXRlcygpKSBjb3Vu
dCsrOwotICBpZiAobWVzc2FnZS5oYXNfYmFyX2VudW0oKSkgY291bnQrKzsKLSAgRVhQRUNUX1RS
VUUoY291bnQgPT0gMCB8fCBjb3VudCA9PSAxKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UZXN0
VXRpbDo6UmVmbGVjdGlvblRlc3Rlcjo6UmVmbGVjdGlvblRlc3RlcigKLSAgICBjb25zdCBEZXNj
cmlwdG9yKiBiYXNlX2Rlc2NyaXB0b3IpCi0gIDogYmFzZV9kZXNjcmlwdG9yXyhiYXNlX2Rlc2Ny
aXB0b3IpIHsKLQotICBjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbCA9IGJhc2VfZGVzY3JpcHRv
ci0+ZmlsZSgpLT5wb29sKCk7Ci0KLSAgbmVzdGVkX2JfID0KLSAgICBwb29sLT5GaW5kRmllbGRC
eU5hbWUoInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlLmJiIik7
Ci0gIGZvcmVpZ25fY18gPQotICAgIHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgicHJvdG9idWZfdW5p
dHRlc3QuRm9yZWlnbk1lc3NhZ2UuYyIpOwotICBpbXBvcnRfZF8gPQotICAgIHBvb2wtPkZpbmRG
aWVsZEJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2UuZCIpOwot
ICBpbXBvcnRfZV8gPQotICAgIHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgicHJvdG9idWZfdW5pdHRl
c3RfaW1wb3J0LlB1YmxpY0ltcG9ydE1lc3NhZ2UuZSIpOwotICBuZXN0ZWRfZm9vXyA9Ci0gICAg
cG9vbC0+RmluZEVudW1WYWx1ZUJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVz
LkZPTyIpOwotICBuZXN0ZWRfYmFyXyA9Ci0gICAgcG9vbC0+RmluZEVudW1WYWx1ZUJ5TmFtZSgi
cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLkJBUiIpOwotICBuZXN0ZWRfYmF6XyA9Ci0g
ICAgcG9vbC0+RmluZEVudW1WYWx1ZUJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5
cGVzLkJBWiIpOwotICBmb3JlaWduX2Zvb18gPQotICAgIHBvb2wtPkZpbmRFbnVtVmFsdWVCeU5h
bWUoInByb3RvYnVmX3VuaXR0ZXN0LkZPUkVJR05fRk9PIik7Ci0gIGZvcmVpZ25fYmFyXyA9Ci0g
ICAgcG9vbC0+RmluZEVudW1WYWx1ZUJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3QuRk9SRUlHTl9C
QVIiKTsKLSAgZm9yZWlnbl9iYXpfID0KLSAgICBwb29sLT5GaW5kRW51bVZhbHVlQnlOYW1lKCJw
cm90b2J1Zl91bml0dGVzdC5GT1JFSUdOX0JBWiIpOwotICBpbXBvcnRfZm9vXyA9Ci0gICAgcG9v
bC0+RmluZEVudW1WYWx1ZUJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LklNUE9SVF9G
T08iKTsKLSAgaW1wb3J0X2Jhcl8gPQotICAgIHBvb2wtPkZpbmRFbnVtVmFsdWVCeU5hbWUoInBy
b3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JTVBPUlRfQkFSIik7Ci0gIGltcG9ydF9iYXpfID0KLSAg
ICBwb29sLT5GaW5kRW51bVZhbHVlQnlOYW1lKCJwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSU1Q
T1JUX0JBWiIpOwotCi0gIGlmIChiYXNlX2Rlc2NyaXB0b3JfLT5uYW1lKCkgPT0gIlRlc3RBbGxF
eHRlbnNpb25zIikgewotICAgIGdyb3VwX2FfID0KLSAgICAgIHBvb2wtPkZpbmRGaWVsZEJ5TmFt
ZSgicHJvdG9idWZfdW5pdHRlc3QuT3B0aW9uYWxHcm91cF9leHRlbnNpb24uYSIpOwotICAgIHJl
cGVhdGVkX2dyb3VwX2FfID0KLSAgICAgIHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgicHJvdG9idWZf
dW5pdHRlc3QuUmVwZWF0ZWRHcm91cF9leHRlbnNpb24uYSIpOwotICB9IGVsc2UgewotICAgIGdy
b3VwX2FfID0KLSAgICAgIHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3Qu
VGVzdEFsbFR5cGVzLk9wdGlvbmFsR3JvdXAuYSIpOwotICAgIHJlcGVhdGVkX2dyb3VwX2FfID0K
LSAgICAgIHBvb2wtPkZpbmRGaWVsZEJ5TmFtZSgicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5
cGVzLlJlcGVhdGVkR3JvdXAuYSIpOwotICB9Ci0KLSAgRVhQRUNUX1RSVUUoZ3JvdXBfYV8gICAg
ICAgICAgIT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKHJlcGVhdGVkX2dyb3VwX2FfICE9IE5VTEwp
OwotICBFWFBFQ1RfVFJVRShuZXN0ZWRfYl8gICAgICAgICAhPSBOVUxMKTsKLSAgRVhQRUNUX1RS
VUUoZm9yZWlnbl9jXyAgICAgICAgIT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGltcG9ydF9kXyAg
ICAgICAgICE9IE5VTEwpOwotICBFWFBFQ1RfVFJVRShpbXBvcnRfZV8gICAgICAgICAhPSBOVUxM
KTsKLSAgRVhQRUNUX1RSVUUobmVzdGVkX2Zvb18gICAgICAgIT0gTlVMTCk7Ci0gIEVYUEVDVF9U
UlVFKG5lc3RlZF9iYXJfICAgICAgICE9IE5VTEwpOwotICBFWFBFQ1RfVFJVRShuZXN0ZWRfYmF6
XyAgICAgICAhPSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoZm9yZWlnbl9mb29fICAgICAgIT0gTlVM
TCk7Ci0gIEVYUEVDVF9UUlVFKGZvcmVpZ25fYmFyXyAgICAgICE9IE5VTEwpOwotICBFWFBFQ1Rf
VFJVRShmb3JlaWduX2Jhel8gICAgICAhPSBOVUxMKTsKLSAgRVhQRUNUX1RSVUUoaW1wb3J0X2Zv
b18gICAgICAgIT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGltcG9ydF9iYXJfICAgICAgICE9IE5V
TEwpOwotICBFWFBFQ1RfVFJVRShpbXBvcnRfYmF6XyAgICAgICAhPSBOVUxMKTsKLX0KLQotLy8g
U2hvcnRoYW5kIHRvIGdldCBhIEZpZWxkRGVzY3JpcHRvciBmb3IgYSBmaWVsZCBvZiB1bml0dGVz
dDo6VGVzdEFsbFR5cGVzLgotY29uc3QgRmllbGREZXNjcmlwdG9yKiBUZXN0VXRpbDo6UmVmbGVj
dGlvblRlc3Rlcjo6Rihjb25zdCBzdHJpbmcmIG5hbWUpIHsKLSAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiByZXN1bHQgPSBOVUxMOwotICBpZiAoYmFzZV9kZXNjcmlwdG9yXy0+bmFtZSgpID09ICJU
ZXN0QWxsRXh0ZW5zaW9ucyIgfHwKLSAgICAgIGJhc2VfZGVzY3JpcHRvcl8tPm5hbWUoKSA9PSAi
VGVzdFBhY2tlZEV4dGVuc2lvbnMiKSB7Ci0gICAgcmVzdWx0ID0gYmFzZV9kZXNjcmlwdG9yXy0+
ZmlsZSgpLT5GaW5kRXh0ZW5zaW9uQnlOYW1lKG5hbWUgKyAiX2V4dGVuc2lvbiIpOwotICB9IGVs
c2UgewotICAgIHJlc3VsdCA9IGJhc2VfZGVzY3JpcHRvcl8tPkZpbmRGaWVsZEJ5TmFtZShuYW1l
KTsKLSAgfQotICBHT09HTEVfQ0hFQ0socmVzdWx0ICE9IE5VTEwpOwotICByZXR1cm4gcmVzdWx0
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6
OlNldEFsbEZpZWxkc1ZpYVJlZmxlY3Rpb24oTWVzc2FnZSogbWVzc2FnZSkgewotICBjb25zdCBS
ZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotICBNZXNz
YWdlKiBzdWJfbWVzc2FnZTsKLQotICByZWZsZWN0aW9uLT5TZXRJbnQzMiAobWVzc2FnZSwgRigi
b3B0aW9uYWxfaW50MzIiICAgKSwgMTAxKTsKLSAgcmVmbGVjdGlvbi0+U2V0SW50NjQgKG1lc3Nh
Z2UsIEYoIm9wdGlvbmFsX2ludDY0IiAgICksIDEwMik7Ci0gIHJlZmxlY3Rpb24tPlNldFVJbnQz
MihtZXNzYWdlLCBGKCJvcHRpb25hbF91aW50MzIiICApLCAxMDMpOwotICByZWZsZWN0aW9uLT5T
ZXRVSW50NjQobWVzc2FnZSwgRigib3B0aW9uYWxfdWludDY0IiAgKSwgMTA0KTsKLSAgcmVmbGVj
dGlvbi0+U2V0SW50MzIgKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3NpbnQzMiIgICksIDEwNSk7Ci0g
IHJlZmxlY3Rpb24tPlNldEludDY0IChtZXNzYWdlLCBGKCJvcHRpb25hbF9zaW50NjQiICApLCAx
MDYpOwotICByZWZsZWN0aW9uLT5TZXRVSW50MzIobWVzc2FnZSwgRigib3B0aW9uYWxfZml4ZWQz
MiIgKSwgMTA3KTsKLSAgcmVmbGVjdGlvbi0+U2V0VUludDY0KG1lc3NhZ2UsIEYoIm9wdGlvbmFs
X2ZpeGVkNjQiICksIDEwOCk7Ci0gIHJlZmxlY3Rpb24tPlNldEludDMyIChtZXNzYWdlLCBGKCJv
cHRpb25hbF9zZml4ZWQzMiIpLCAxMDkpOwotICByZWZsZWN0aW9uLT5TZXRJbnQ2NCAobWVzc2Fn
ZSwgRigib3B0aW9uYWxfc2ZpeGVkNjQiKSwgMTEwKTsKLSAgcmVmbGVjdGlvbi0+U2V0RmxvYXQg
KG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2Zsb2F0IiAgICksIDExMSk7Ci0gIHJlZmxlY3Rpb24tPlNl
dERvdWJsZShtZXNzYWdlLCBGKCJvcHRpb25hbF9kb3VibGUiICApLCAxMTIpOwotICByZWZsZWN0
aW9uLT5TZXRCb29sICAobWVzc2FnZSwgRigib3B0aW9uYWxfYm9vbCIgICAgKSwgdHJ1ZSk7Ci0g
IHJlZmxlY3Rpb24tPlNldFN0cmluZyhtZXNzYWdlLCBGKCJvcHRpb25hbF9zdHJpbmciICApLCAi
MTE1Iik7Ci0gIHJlZmxlY3Rpb24tPlNldFN0cmluZyhtZXNzYWdlLCBGKCJvcHRpb25hbF9ieXRl
cyIgICApLCAiMTE2Iik7Ci0KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5NdXRhYmxlTWVz
c2FnZShtZXNzYWdlLCBGKCJvcHRpb25hbGdyb3VwIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVm
bGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgZ3JvdXBfYV8sIDExNyk7Ci0gIHN1Yl9t
ZXNzYWdlID0gcmVmbGVjdGlvbi0+TXV0YWJsZU1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxf
bmVzdGVkX21lc3NhZ2UiKSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlNldElu
dDMyKHN1Yl9tZXNzYWdlLCBuZXN0ZWRfYl8sIDExOCk7Ci0gIHN1Yl9tZXNzYWdlID0gcmVmbGVj
dGlvbi0+TXV0YWJsZU1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdl
IikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2Fn
ZSwgZm9yZWlnbl9jXywgMTE5KTsKLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5NdXRhYmxl
TWVzc2FnZShtZXNzYWdlLCBGKCJvcHRpb25hbF9pbXBvcnRfbWVzc2FnZSIpKTsKLSAgc3ViX21l
c3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+U2V0SW50MzIoc3ViX21lc3NhZ2UsIGltcG9ydF9kXywg
MTIwKTsKLQotICByZWZsZWN0aW9uLT5TZXRFbnVtKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX25lc3Rl
ZF9lbnVtIiApLCAgbmVzdGVkX2Jhel8pOwotICByZWZsZWN0aW9uLT5TZXRFbnVtKG1lc3NhZ2Us
IEYoIm9wdGlvbmFsX2ZvcmVpZ25fZW51bSIpLCBmb3JlaWduX2Jhel8pOwotICByZWZsZWN0aW9u
LT5TZXRFbnVtKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2ltcG9ydF9lbnVtIiApLCAgaW1wb3J0X2Jh
el8pOwotCi0gIHJlZmxlY3Rpb24tPlNldFN0cmluZyhtZXNzYWdlLCBGKCJvcHRpb25hbF9zdHJp
bmdfcGllY2UiKSwgIjEyNCIpOwotICByZWZsZWN0aW9uLT5TZXRTdHJpbmcobWVzc2FnZSwgRigi
b3B0aW9uYWxfY29yZCIpLCAiMTI1Iik7Ci0KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5N
dXRhYmxlTWVzc2FnZShtZXNzYWdlLCBGKCJvcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2Ui
KSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlNldEludDMyKHN1Yl9tZXNzYWdl
LCBpbXBvcnRfZV8sIDEyNik7Ci0KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5NdXRhYmxl
TWVzc2FnZShtZXNzYWdlLCBGKCJvcHRpb25hbF9sYXp5X21lc3NhZ2UiKSk7Ci0gIHN1Yl9tZXNz
YWdlLT5HZXRSZWZsZWN0aW9uKCktPlNldEludDMyKHN1Yl9tZXNzYWdlLCBuZXN0ZWRfYl8sIDEy
Nyk7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICByZWZsZWN0aW9uLT5BZGRJbnQzMiAobWVzc2FnZSwg
RigicmVwZWF0ZWRfaW50MzIiICAgKSwgMjAxKTsKLSAgcmVmbGVjdGlvbi0+QWRkSW50NjQgKG1l
c3NhZ2UsIEYoInJlcGVhdGVkX2ludDY0IiAgICksIDIwMik7Ci0gIHJlZmxlY3Rpb24tPkFkZFVJ
bnQzMihtZXNzYWdlLCBGKCJyZXBlYXRlZF91aW50MzIiICApLCAyMDMpOwotICByZWZsZWN0aW9u
LT5BZGRVSW50NjQobWVzc2FnZSwgRigicmVwZWF0ZWRfdWludDY0IiAgKSwgMjA0KTsKLSAgcmVm
bGVjdGlvbi0+QWRkSW50MzIgKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3NpbnQzMiIgICksIDIwNSk7
Ci0gIHJlZmxlY3Rpb24tPkFkZEludDY0IChtZXNzYWdlLCBGKCJyZXBlYXRlZF9zaW50NjQiICAp
LCAyMDYpOwotICByZWZsZWN0aW9uLT5BZGRVSW50MzIobWVzc2FnZSwgRigicmVwZWF0ZWRfZml4
ZWQzMiIgKSwgMjA3KTsKLSAgcmVmbGVjdGlvbi0+QWRkVUludDY0KG1lc3NhZ2UsIEYoInJlcGVh
dGVkX2ZpeGVkNjQiICksIDIwOCk7Ci0gIHJlZmxlY3Rpb24tPkFkZEludDMyIChtZXNzYWdlLCBG
KCJyZXBlYXRlZF9zZml4ZWQzMiIpLCAyMDkpOwotICByZWZsZWN0aW9uLT5BZGRJbnQ2NCAobWVz
c2FnZSwgRigicmVwZWF0ZWRfc2ZpeGVkNjQiKSwgMjEwKTsKLSAgcmVmbGVjdGlvbi0+QWRkRmxv
YXQgKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2Zsb2F0IiAgICksIDIxMSk7Ci0gIHJlZmxlY3Rpb24t
PkFkZERvdWJsZShtZXNzYWdlLCBGKCJyZXBlYXRlZF9kb3VibGUiICApLCAyMTIpOwotICByZWZs
ZWN0aW9uLT5BZGRCb29sICAobWVzc2FnZSwgRigicmVwZWF0ZWRfYm9vbCIgICAgKSwgdHJ1ZSk7
Ci0gIHJlZmxlY3Rpb24tPkFkZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBlYXRlZF9zdHJpbmciICAp
LCAiMjE1Iik7Ci0gIHJlZmxlY3Rpb24tPkFkZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBlYXRlZF9i
eXRlcyIgICApLCAiMjE2Iik7Ci0KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNz
YWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkZ3JvdXAiKSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZs
ZWN0aW9uKCktPlNldEludDMyKHN1Yl9tZXNzYWdlLCByZXBlYXRlZF9ncm91cF9hXywgMjE3KTsK
LSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoInJlcGVh
dGVkX25lc3RlZF9tZXNzYWdlIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5T
ZXRJbnQzMihzdWJfbWVzc2FnZSwgbmVzdGVkX2JfLCAyMTgpOwotICBzdWJfbWVzc2FnZSA9IHJl
ZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdl
IikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2Fn
ZSwgZm9yZWlnbl9jXywgMjE5KTsKLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNz
YWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIikpOwotICBzdWJfbWVzc2Fn
ZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgaW1wb3J0X2RfLCAyMjAp
OwotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigicmVw
ZWF0ZWRfbGF6eV9tZXNzYWdlIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5T
ZXRJbnQzMihzdWJfbWVzc2FnZSwgbmVzdGVkX2JfLCAyMjcpOwotCi0gIHJlZmxlY3Rpb24tPkFk
ZEVudW0obWVzc2FnZSwgRigicmVwZWF0ZWRfbmVzdGVkX2VudW0iICksICBuZXN0ZWRfYmFyXyk7
Ci0gIHJlZmxlY3Rpb24tPkFkZEVudW0obWVzc2FnZSwgRigicmVwZWF0ZWRfZm9yZWlnbl9lbnVt
IiksIGZvcmVpZ25fYmFyXyk7Ci0gIHJlZmxlY3Rpb24tPkFkZEVudW0obWVzc2FnZSwgRigicmVw
ZWF0ZWRfaW1wb3J0X2VudW0iICksICBpbXBvcnRfYmFyXyk7Ci0KLSAgcmVmbGVjdGlvbi0+QWRk
U3RyaW5nKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3N0cmluZ19waWVjZSIpLCAiMjI0Iik7Ci0gIHJl
ZmxlY3Rpb24tPkFkZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBlYXRlZF9jb3JkIiksICIyMjUiKTsK
LQotICAvLyBBZGQgYSBzZWNvbmQgb25lIG9mIGVhY2ggZmllbGQuCi0gIHJlZmxlY3Rpb24tPkFk
ZEludDMyIChtZXNzYWdlLCBGKCJyZXBlYXRlZF9pbnQzMiIgICApLCAzMDEpOwotICByZWZsZWN0
aW9uLT5BZGRJbnQ2NCAobWVzc2FnZSwgRigicmVwZWF0ZWRfaW50NjQiICAgKSwgMzAyKTsKLSAg
cmVmbGVjdGlvbi0+QWRkVUludDMyKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3VpbnQzMiIgICksIDMw
Myk7Ci0gIHJlZmxlY3Rpb24tPkFkZFVJbnQ2NChtZXNzYWdlLCBGKCJyZXBlYXRlZF91aW50NjQi
ICApLCAzMDQpOwotICByZWZsZWN0aW9uLT5BZGRJbnQzMiAobWVzc2FnZSwgRigicmVwZWF0ZWRf
c2ludDMyIiAgKSwgMzA1KTsKLSAgcmVmbGVjdGlvbi0+QWRkSW50NjQgKG1lc3NhZ2UsIEYoInJl
cGVhdGVkX3NpbnQ2NCIgICksIDMwNik7Ci0gIHJlZmxlY3Rpb24tPkFkZFVJbnQzMihtZXNzYWdl
LCBGKCJyZXBlYXRlZF9maXhlZDMyIiApLCAzMDcpOwotICByZWZsZWN0aW9uLT5BZGRVSW50NjQo
bWVzc2FnZSwgRigicmVwZWF0ZWRfZml4ZWQ2NCIgKSwgMzA4KTsKLSAgcmVmbGVjdGlvbi0+QWRk
SW50MzIgKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3NmaXhlZDMyIiksIDMwOSk7Ci0gIHJlZmxlY3Rp
b24tPkFkZEludDY0IChtZXNzYWdlLCBGKCJyZXBlYXRlZF9zZml4ZWQ2NCIpLCAzMTApOwotICBy
ZWZsZWN0aW9uLT5BZGRGbG9hdCAobWVzc2FnZSwgRigicmVwZWF0ZWRfZmxvYXQiICAgKSwgMzEx
KTsKLSAgcmVmbGVjdGlvbi0+QWRkRG91YmxlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2RvdWJsZSIg
ICksIDMxMik7Ci0gIHJlZmxlY3Rpb24tPkFkZEJvb2wgIChtZXNzYWdlLCBGKCJyZXBlYXRlZF9i
b29sIiAgICApLCBmYWxzZSk7Ci0gIHJlZmxlY3Rpb24tPkFkZFN0cmluZyhtZXNzYWdlLCBGKCJy
ZXBlYXRlZF9zdHJpbmciICApLCAiMzE1Iik7Ci0gIHJlZmxlY3Rpb24tPkFkZFN0cmluZyhtZXNz
YWdlLCBGKCJyZXBlYXRlZF9ieXRlcyIgICApLCAiMzE2Iik7Ci0KLSAgc3ViX21lc3NhZ2UgPSBy
ZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkZ3JvdXAiKSk7Ci0gIHN1
Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlNldEludDMyKHN1Yl9tZXNzYWdlLCByZXBlYXRl
ZF9ncm91cF9hXywgMzE3KTsKLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5BZGRNZXNzYWdl
KG1lc3NhZ2UsIEYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIikpOwotICBzdWJfbWVzc2FnZS0+
R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgbmVzdGVkX2JfLCAzMTgpOwot
ICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3NhZ2UobWVzc2FnZSwgRigicmVwZWF0
ZWRfZm9yZWlnbl9tZXNzYWdlIikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5T
ZXRJbnQzMihzdWJfbWVzc2FnZSwgZm9yZWlnbl9jXywgMzE5KTsKLSAgc3ViX21lc3NhZ2UgPSBy
ZWZsZWN0aW9uLT5BZGRNZXNzYWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdl
IikpOwotICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2Fn
ZSwgaW1wb3J0X2RfLCAzMjApOwotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPkFkZE1lc3Nh
Z2UobWVzc2FnZSwgRigicmVwZWF0ZWRfbGF6eV9tZXNzYWdlIikpOwotICBzdWJfbWVzc2FnZS0+
R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgbmVzdGVkX2JfLCAzMjcpOwot
Ci0gIHJlZmxlY3Rpb24tPkFkZEVudW0obWVzc2FnZSwgRigicmVwZWF0ZWRfbmVzdGVkX2VudW0i
ICksICBuZXN0ZWRfYmF6Xyk7Ci0gIHJlZmxlY3Rpb24tPkFkZEVudW0obWVzc2FnZSwgRigicmVw
ZWF0ZWRfZm9yZWlnbl9lbnVtIiksIGZvcmVpZ25fYmF6Xyk7Ci0gIHJlZmxlY3Rpb24tPkFkZEVu
dW0obWVzc2FnZSwgRigicmVwZWF0ZWRfaW1wb3J0X2VudW0iICksICBpbXBvcnRfYmF6Xyk7Ci0K
LSAgcmVmbGVjdGlvbi0+QWRkU3RyaW5nKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3N0cmluZ19waWVj
ZSIpLCAiMzI0Iik7Ci0gIHJlZmxlY3Rpb24tPkFkZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBlYXRl
ZF9jb3JkIiksICIzMjUiKTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHJlZmxlY3Rpb24tPlNldElu
dDMyIChtZXNzYWdlLCBGKCJkZWZhdWx0X2ludDMyIiAgICksIDQwMSk7Ci0gIHJlZmxlY3Rpb24t
PlNldEludDY0IChtZXNzYWdlLCBGKCJkZWZhdWx0X2ludDY0IiAgICksIDQwMik7Ci0gIHJlZmxl
Y3Rpb24tPlNldFVJbnQzMihtZXNzYWdlLCBGKCJkZWZhdWx0X3VpbnQzMiIgICksIDQwMyk7Ci0g
IHJlZmxlY3Rpb24tPlNldFVJbnQ2NChtZXNzYWdlLCBGKCJkZWZhdWx0X3VpbnQ2NCIgICksIDQw
NCk7Ci0gIHJlZmxlY3Rpb24tPlNldEludDMyIChtZXNzYWdlLCBGKCJkZWZhdWx0X3NpbnQzMiIg
ICksIDQwNSk7Ci0gIHJlZmxlY3Rpb24tPlNldEludDY0IChtZXNzYWdlLCBGKCJkZWZhdWx0X3Np
bnQ2NCIgICksIDQwNik7Ci0gIHJlZmxlY3Rpb24tPlNldFVJbnQzMihtZXNzYWdlLCBGKCJkZWZh
dWx0X2ZpeGVkMzIiICksIDQwNyk7Ci0gIHJlZmxlY3Rpb24tPlNldFVJbnQ2NChtZXNzYWdlLCBG
KCJkZWZhdWx0X2ZpeGVkNjQiICksIDQwOCk7Ci0gIHJlZmxlY3Rpb24tPlNldEludDMyIChtZXNz
YWdlLCBGKCJkZWZhdWx0X3NmaXhlZDMyIiksIDQwOSk7Ci0gIHJlZmxlY3Rpb24tPlNldEludDY0
IChtZXNzYWdlLCBGKCJkZWZhdWx0X3NmaXhlZDY0IiksIDQxMCk7Ci0gIHJlZmxlY3Rpb24tPlNl
dEZsb2F0IChtZXNzYWdlLCBGKCJkZWZhdWx0X2Zsb2F0IiAgICksIDQxMSk7Ci0gIHJlZmxlY3Rp
b24tPlNldERvdWJsZShtZXNzYWdlLCBGKCJkZWZhdWx0X2RvdWJsZSIgICksIDQxMik7Ci0gIHJl
ZmxlY3Rpb24tPlNldEJvb2wgIChtZXNzYWdlLCBGKCJkZWZhdWx0X2Jvb2wiICAgICksIGZhbHNl
KTsKLSAgcmVmbGVjdGlvbi0+U2V0U3RyaW5nKG1lc3NhZ2UsIEYoImRlZmF1bHRfc3RyaW5nIiAg
KSwgIjQxNSIpOwotICByZWZsZWN0aW9uLT5TZXRTdHJpbmcobWVzc2FnZSwgRigiZGVmYXVsdF9i
eXRlcyIgICApLCAiNDE2Iik7Ci0KLSAgcmVmbGVjdGlvbi0+U2V0RW51bShtZXNzYWdlLCBGKCJk
ZWZhdWx0X25lc3RlZF9lbnVtIiApLCAgbmVzdGVkX2Zvb18pOwotICByZWZsZWN0aW9uLT5TZXRF
bnVtKG1lc3NhZ2UsIEYoImRlZmF1bHRfZm9yZWlnbl9lbnVtIiksIGZvcmVpZ25fZm9vXyk7Ci0g
IHJlZmxlY3Rpb24tPlNldEVudW0obWVzc2FnZSwgRigiZGVmYXVsdF9pbXBvcnRfZW51bSIgKSwg
IGltcG9ydF9mb29fKTsKLQotICByZWZsZWN0aW9uLT5TZXRTdHJpbmcobWVzc2FnZSwgRigiZGVm
YXVsdF9zdHJpbmdfcGllY2UiKSwgIjQyNCIpOwotICByZWZsZWN0aW9uLT5TZXRTdHJpbmcobWVz
c2FnZSwgRigiZGVmYXVsdF9jb3JkIiksICI0MjUiKTsKLQotICByZWZsZWN0aW9uLT5TZXRVSW50
MzIobWVzc2FnZSwgRigib25lb2ZfdWludDMyIiAgICksIDYwMSk7Ci0gIHN1Yl9tZXNzYWdlID0g
cmVmbGVjdGlvbi0+TXV0YWJsZU1lc3NhZ2UobWVzc2FnZSwgRigib25lb2ZfbmVzdGVkX21lc3Nh
Z2UiKSk7Ci0gIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlNldEludDMyKHN1Yl9tZXNz
YWdlLCBuZXN0ZWRfYl8sIDYwMik7Ci0gIHJlZmxlY3Rpb24tPlNldFN0cmluZyhtZXNzYWdlLCBG
KCJvbmVvZl9zdHJpbmciKSwgIjYwMyIpOwotICByZWZsZWN0aW9uLT5TZXRTdHJpbmcobWVzc2Fn
ZSwgRigib25lb2ZfYnl0ZXMiICksICI2MDQiKTsKLX0KLQotdm9pZCBUZXN0VXRpbDo6UmVmbGVj
dGlvblRlc3Rlcjo6U2V0T25lb2ZWaWFSZWZsZWN0aW9uKE1lc3NhZ2UqIG1lc3NhZ2UpIHsKLSAg
Y29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IG1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKTsK
LSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24o
KTsKLSAgTWVzc2FnZSogc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5NdXRhYmxlTWVzc2FnZSgK
LSAgICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiZm9vX2xhenlfbWVz
c2FnZSIpKTsKLSAgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+U2V0SW50NjQoCi0gICAg
ICBzdWJfbWVzc2FnZSwKLSAgICAgIGRlc2NyaXB0b3ItPmZpbGUoKS0+cG9vbCgpLT5GaW5kRmll
bGRCeU5hbWUoCi0gICAgICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RPbmVvZjIuTmVzdGVk
TWVzc2FnZS5xdXhfaW50IiksCi0gICAgICAxMDApOwotCi0gIHJlZmxlY3Rpb24tPlNldFN0cmlu
ZyhtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+RmluZEZpZWxk
QnlOYW1lKCJiYXJfY29yZCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIjEwMSIpOwotICBy
ZWZsZWN0aW9uLT5TZXRJbnQzMihtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJiYXpfaW50IiksCi0gICAgICAgICAgICAgICAgICAg
ICAgIDEwMik7Ci0gIHJlZmxlY3Rpb24tPlNldFN0cmluZyhtZXNzYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJiYXpfc3RyaW5nIiksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAiMTAzIik7Ci19Ci0KLXZvaWQgVGVzdFV0aWw6OlJlZmxl
Y3Rpb25UZXN0ZXI6OkV4cGVjdE9uZW9mU2V0VmlhUmVmbGVjdGlvbigKLSAgICBjb25zdCBNZXNz
YWdlJiBtZXNzYWdlKSB7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBtZXNzYWdl
LkdldERlc2NyaXB0b3IoKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3Nh
Z2UuR2V0UmVmbGVjdGlvbigpOwotICBzdHJpbmcgc2NyYXRjaDsKLSAgRVhQRUNUX1RSVUUocmVm
bGVjdGlvbi0+SGFzRmllbGQoCi0gICAgICBtZXNzYWdlLCBkZXNjcmlwdG9yLT5GaW5kRmllbGRC
eU5hbWUoImZvb19sYXp5X21lc3NhZ2UiKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5I
YXNGaWVsZCgKLSAgICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiYmFy
X2NvcmQiKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZCgKLSAgICAgIG1l
c3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiYmF6X2ludCIpKSk7Ci0gIEVYUEVD
VF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKAotICAgICAgbWVzc2FnZSwgZGVzY3JpcHRvci0+
RmluZEZpZWxkQnlOYW1lKCJiYXpfc3RyaW5nIikpKTsKLQotICBjb25zdCBNZXNzYWdlKiBzdWJf
bWVzc2FnZSA9ICZyZWZsZWN0aW9uLT5HZXRNZXNzYWdlKAotICAgICAgbWVzc2FnZSwgZGVzY3Jp
cHRvci0+RmluZEZpZWxkQnlOYW1lKCJmb29fbGF6eV9tZXNzYWdlIikpOwotICBFWFBFQ1RfRVEo
MTAwLCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQ2NCgKLSAgICAgICpzdWJf
bWVzc2FnZSwKLSAgICAgIGRlc2NyaXB0b3ItPmZpbGUoKS0+cG9vbCgpLT5GaW5kRmllbGRCeU5h
bWUoCi0gICAgICAgICAgInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RPbmVvZjIuTmVzdGVkTWVzc2Fn
ZS5xdXhfaW50IikpKTsKLQotICBFWFBFQ1RfRVEoIjEwMSIsIHJlZmxlY3Rpb24tPkdldFN0cmlu
ZygKLSAgICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiYmFyX2NvcmQi
KSkpOwotICBFWFBFQ1RfRVEoIjEwMSIsIHJlZmxlY3Rpb24tPkdldFN0cmluZ1JlZmVyZW5jZSgK
LSAgICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiYmFyX2NvcmQiKSwg
JnNjcmF0Y2gpKTsKLQotICBFWFBFQ1RfRVEoMTAyLCByZWZsZWN0aW9uLT5HZXRJbnQzMigKLSAg
ICAgIG1lc3NhZ2UsIGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiYmF6X2ludCIpKSk7Ci0K
LSAgRVhQRUNUX0VRKCIxMDMiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcoCi0gICAgICBtZXNzYWdl
LCBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU5hbWUoImJhel9zdHJpbmciKSkpOwotICBFWFBFQ1Rf
RVEoIjEwMyIsIHJlZmxlY3Rpb24tPkdldFN0cmluZ1JlZmVyZW5jZSgKLSAgICAgIG1lc3NhZ2Us
IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgiYmF6X3N0cmluZyIpLCAmc2NyYXRjaCkpOwot
fQotCi12b2lkIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyOjpTZXRQYWNrZWRGaWVsZHNWaWFS
ZWZsZWN0aW9uKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UpIHsKLSAgY29uc3QgUmVmbGVjdGlvbiog
cmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLSAgcmVmbGVjdGlvbi0+QWRk
SW50MzIgKG1lc3NhZ2UsIEYoInBhY2tlZF9pbnQzMiIgICApLCA2MDEpOwotICByZWZsZWN0aW9u
LT5BZGRJbnQ2NCAobWVzc2FnZSwgRigicGFja2VkX2ludDY0IiAgICksIDYwMik7Ci0gIHJlZmxl
Y3Rpb24tPkFkZFVJbnQzMihtZXNzYWdlLCBGKCJwYWNrZWRfdWludDMyIiAgKSwgNjAzKTsKLSAg
cmVmbGVjdGlvbi0+QWRkVUludDY0KG1lc3NhZ2UsIEYoInBhY2tlZF91aW50NjQiICApLCA2MDQp
OwotICByZWZsZWN0aW9uLT5BZGRJbnQzMiAobWVzc2FnZSwgRigicGFja2VkX3NpbnQzMiIgICks
IDYwNSk7Ci0gIHJlZmxlY3Rpb24tPkFkZEludDY0IChtZXNzYWdlLCBGKCJwYWNrZWRfc2ludDY0
IiAgKSwgNjA2KTsKLSAgcmVmbGVjdGlvbi0+QWRkVUludDMyKG1lc3NhZ2UsIEYoInBhY2tlZF9m
aXhlZDMyIiApLCA2MDcpOwotICByZWZsZWN0aW9uLT5BZGRVSW50NjQobWVzc2FnZSwgRigicGFj
a2VkX2ZpeGVkNjQiICksIDYwOCk7Ci0gIHJlZmxlY3Rpb24tPkFkZEludDMyIChtZXNzYWdlLCBG
KCJwYWNrZWRfc2ZpeGVkMzIiKSwgNjA5KTsKLSAgcmVmbGVjdGlvbi0+QWRkSW50NjQgKG1lc3Nh
Z2UsIEYoInBhY2tlZF9zZml4ZWQ2NCIpLCA2MTApOwotICByZWZsZWN0aW9uLT5BZGRGbG9hdCAo
bWVzc2FnZSwgRigicGFja2VkX2Zsb2F0IiAgICksIDYxMSk7Ci0gIHJlZmxlY3Rpb24tPkFkZERv
dWJsZShtZXNzYWdlLCBGKCJwYWNrZWRfZG91YmxlIiAgKSwgNjEyKTsKLSAgcmVmbGVjdGlvbi0+
QWRkQm9vbCAgKG1lc3NhZ2UsIEYoInBhY2tlZF9ib29sIiAgICApLCB0cnVlKTsKLSAgcmVmbGVj
dGlvbi0+QWRkRW51bSAgKG1lc3NhZ2UsIEYoInBhY2tlZF9lbnVtIiAgICApLCBmb3JlaWduX2Jh
cl8pOwotCi0gIHJlZmxlY3Rpb24tPkFkZEludDMyIChtZXNzYWdlLCBGKCJwYWNrZWRfaW50MzIi
ICAgKSwgNzAxKTsKLSAgcmVmbGVjdGlvbi0+QWRkSW50NjQgKG1lc3NhZ2UsIEYoInBhY2tlZF9p
bnQ2NCIgICApLCA3MDIpOwotICByZWZsZWN0aW9uLT5BZGRVSW50MzIobWVzc2FnZSwgRigicGFj
a2VkX3VpbnQzMiIgICksIDcwMyk7Ci0gIHJlZmxlY3Rpb24tPkFkZFVJbnQ2NChtZXNzYWdlLCBG
KCJwYWNrZWRfdWludDY0IiAgKSwgNzA0KTsKLSAgcmVmbGVjdGlvbi0+QWRkSW50MzIgKG1lc3Nh
Z2UsIEYoInBhY2tlZF9zaW50MzIiICApLCA3MDUpOwotICByZWZsZWN0aW9uLT5BZGRJbnQ2NCAo
bWVzc2FnZSwgRigicGFja2VkX3NpbnQ2NCIgICksIDcwNik7Ci0gIHJlZmxlY3Rpb24tPkFkZFVJ
bnQzMihtZXNzYWdlLCBGKCJwYWNrZWRfZml4ZWQzMiIgKSwgNzA3KTsKLSAgcmVmbGVjdGlvbi0+
QWRkVUludDY0KG1lc3NhZ2UsIEYoInBhY2tlZF9maXhlZDY0IiApLCA3MDgpOwotICByZWZsZWN0
aW9uLT5BZGRJbnQzMiAobWVzc2FnZSwgRigicGFja2VkX3NmaXhlZDMyIiksIDcwOSk7Ci0gIHJl
ZmxlY3Rpb24tPkFkZEludDY0IChtZXNzYWdlLCBGKCJwYWNrZWRfc2ZpeGVkNjQiKSwgNzEwKTsK
LSAgcmVmbGVjdGlvbi0+QWRkRmxvYXQgKG1lc3NhZ2UsIEYoInBhY2tlZF9mbG9hdCIgICApLCA3
MTEpOwotICByZWZsZWN0aW9uLT5BZGREb3VibGUobWVzc2FnZSwgRigicGFja2VkX2RvdWJsZSIg
ICksIDcxMik7Ci0gIHJlZmxlY3Rpb24tPkFkZEJvb2wgIChtZXNzYWdlLCBGKCJwYWNrZWRfYm9v
bCIgICAgKSwgZmFsc2UpOwotICByZWZsZWN0aW9uLT5BZGRFbnVtICAobWVzc2FnZSwgRigicGFj
a2VkX2VudW0iICAgICksIGZvcmVpZ25fYmF6Xyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9p
ZCBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3Rlcjo6RXhwZWN0QWxsRmllbGRzU2V0VmlhUmVmbGVj
dGlvbigKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlKSB7Ci0gIC8vIFdlIGhhdmUgdG8gc3Bs
aXQgdGhpcyBpbnRvIHRocmVlIGZ1bmN0aW9uIG90aGVyd2lzZSBpdCBjcmVhdGVzIGEgc3RhY2sK
LSAgLy8gZnJhbWUgc28gbGFyZ2UgdGhhdCBpdCB0cmlnZ2VycyBhIHdhcm5pbmcuCi0gIEV4cGVj
dEFsbEZpZWxkc1NldFZpYVJlZmxlY3Rpb24xKG1lc3NhZ2UpOwotICBFeHBlY3RBbGxGaWVsZHNT
ZXRWaWFSZWZsZWN0aW9uMihtZXNzYWdlKTsKLSAgRXhwZWN0QWxsRmllbGRzU2V0VmlhUmVmbGVj
dGlvbjMobWVzc2FnZSk7Ci19Ci0KLXZvaWQgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OkV4
cGVjdEFsbEZpZWxkc1NldFZpYVJlZmxlY3Rpb24xKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3Nh
Z2UpIHsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVmbGVj
dGlvbigpOwotICBzdHJpbmcgc2NyYXRjaDsKLSAgY29uc3QgTWVzc2FnZSogc3ViX21lc3NhZ2U7
Ci0KLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigib3B0aW9u
YWxfaW50MzIiICAgKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNz
YWdlLCBGKCJvcHRpb25hbF9pbnQ2NCIgICApKSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24t
Pkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3VpbnQzMiIgICkpKTsKLSAgRVhQRUNUX1RS
VUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigib3B0aW9uYWxfdWludDY0IiAgKSkp
OwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25h
bF9zaW50MzIiICApKSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3Nh
Z2UsIEYoIm9wdGlvbmFsX3NpbnQ2NCIgICkpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+
SGFzRmllbGQobWVzc2FnZSwgRigib3B0aW9uYWxfZml4ZWQzMiIgKSkpOwotICBFWFBFQ1RfVFJV
RShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbF9maXhlZDY0IiApKSk7
Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFs
X3NmaXhlZDMyIikpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2Fn
ZSwgRigib3B0aW9uYWxfc2ZpeGVkNjQiKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5I
YXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbF9mbG9hdCIgICApKSk7Ci0gIEVYUEVDVF9UUlVF
KHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2RvdWJsZSIgICkpKTsK
LSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigib3B0aW9uYWxf
Ym9vbCIgICAgKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdl
LCBGKCJvcHRpb25hbF9zdHJpbmciICApKSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhh
c0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2J5dGVzIiAgICkpKTsKLQotICBFWFBFQ1RfVFJV
RShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbGdyb3VwIiAgICAgICAg
ICAgICAgICAgKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdl
LCBGKCJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSIgICAgICAgKSkpOwotICBFWFBFQ1RfVFJVRShy
ZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbF9mb3JlaWduX21lc3NhZ2Ui
ICAgICAgKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBG
KCJvcHRpb25hbF9pbXBvcnRfbWVzc2FnZSIgICAgICAgKSkpOwotICBFWFBFQ1RfVFJVRShyZWZs
ZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3Nh
Z2UiKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJv
cHRpb25hbF9sYXp5X21lc3NhZ2UiICAgICAgICAgKSkpOwotCi0gIHN1Yl9tZXNzYWdlID0gJnJl
ZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxncm91cCIpKTsKLSAgRVhQ
RUNUX1RSVUUoc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+SGFzRmllbGQoKnN1Yl9tZXNz
YWdlLCBncm91cF9hXykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZsZWN0aW9uLT5HZXRNZXNzYWdl
KG1lc3NhZ2UsIEYoIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIikpOwotICBFWFBFQ1RfVFJVRShz
dWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5IYXNGaWVsZCgqc3ViX21lc3NhZ2UsIG5lc3Rl
ZF9iXykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZsZWN0aW9uLT5HZXRNZXNzYWdlKG1lc3NhZ2Us
IEYoIm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSIpKTsKLSAgRVhQRUNUX1RSVUUoc3ViX21lc3Nh
Z2UtPkdldFJlZmxlY3Rpb24oKS0+SGFzRmllbGQoKnN1Yl9tZXNzYWdlLCBmb3JlaWduX2NfKSk7
Ci0gIHN1Yl9tZXNzYWdlID0gJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigib3B0
aW9uYWxfaW1wb3J0X21lc3NhZ2UiKSk7Ci0gIEVYUEVDVF9UUlVFKHN1Yl9tZXNzYWdlLT5HZXRS
ZWZsZWN0aW9uKCktPkhhc0ZpZWxkKCpzdWJfbWVzc2FnZSwgaW1wb3J0X2RfKSk7Ci0gIHN1Yl9t
ZXNzYWdlID0gJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxfcHVi
bGljX2ltcG9ydF9tZXNzYWdlIikpOwotICBFWFBFQ1RfVFJVRShzdWJfbWVzc2FnZS0+R2V0UmVm
bGVjdGlvbigpLT5IYXNGaWVsZCgqc3ViX21lc3NhZ2UsIGltcG9ydF9lXykpOwotICBzdWJfbWVz
c2FnZSA9ICZyZWZsZWN0aW9uLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2xhenlf
bWVzc2FnZSIpKTsKLSAgRVhQRUNUX1RSVUUoc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+
SGFzRmllbGQoKnN1Yl9tZXNzYWdlLCBuZXN0ZWRfYl8pKTsKLQotICBFWFBFQ1RfVFJVRShyZWZs
ZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbF9uZXN0ZWRfZW51bSIgKSkpOwot
ICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbF9m
b3JlaWduX2VudW0iKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNz
YWdlLCBGKCJvcHRpb25hbF9pbXBvcnRfZW51bSIgKSkpOwotCi0gIEVYUEVDVF9UUlVFKHJlZmxl
Y3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3N0cmluZ19waWVjZSIpKSk7Ci0g
IEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2Nv
cmQiKSkpOwotCi0gIEVYUEVDVF9FUSgxMDEgICwgcmVmbGVjdGlvbi0+R2V0SW50MzIgKG1lc3Nh
Z2UsIEYoIm9wdGlvbmFsX2ludDMyIiAgICkpKTsKLSAgRVhQRUNUX0VRKDEwMiAgLCByZWZsZWN0
aW9uLT5HZXRJbnQ2NCAobWVzc2FnZSwgRigib3B0aW9uYWxfaW50NjQiICAgKSkpOwotICBFWFBF
Q1RfRVEoMTAzICAsIHJlZmxlY3Rpb24tPkdldFVJbnQzMihtZXNzYWdlLCBGKCJvcHRpb25hbF91
aW50MzIiICApKSk7Ci0gIEVYUEVDVF9FUSgxMDQgICwgcmVmbGVjdGlvbi0+R2V0VUludDY0KG1l
c3NhZ2UsIEYoIm9wdGlvbmFsX3VpbnQ2NCIgICkpKTsKLSAgRVhQRUNUX0VRKDEwNSAgLCByZWZs
ZWN0aW9uLT5HZXRJbnQzMiAobWVzc2FnZSwgRigib3B0aW9uYWxfc2ludDMyIiAgKSkpOwotICBF
WFBFQ1RfRVEoMTA2ICAsIHJlZmxlY3Rpb24tPkdldEludDY0IChtZXNzYWdlLCBGKCJvcHRpb25h
bF9zaW50NjQiICApKSk7Ci0gIEVYUEVDVF9FUSgxMDcgICwgcmVmbGVjdGlvbi0+R2V0VUludDMy
KG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2ZpeGVkMzIiICkpKTsKLSAgRVhQRUNUX0VRKDEwOCAgLCBy
ZWZsZWN0aW9uLT5HZXRVSW50NjQobWVzc2FnZSwgRigib3B0aW9uYWxfZml4ZWQ2NCIgKSkpOwot
ICBFWFBFQ1RfRVEoMTA5ICAsIHJlZmxlY3Rpb24tPkdldEludDMyIChtZXNzYWdlLCBGKCJvcHRp
b25hbF9zZml4ZWQzMiIpKSk7Ci0gIEVYUEVDVF9FUSgxMTAgICwgcmVmbGVjdGlvbi0+R2V0SW50
NjQgKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3NmaXhlZDY0IikpKTsKLSAgRVhQRUNUX0VRKDExMSAg
LCByZWZsZWN0aW9uLT5HZXRGbG9hdCAobWVzc2FnZSwgRigib3B0aW9uYWxfZmxvYXQiICAgKSkp
OwotICBFWFBFQ1RfRVEoMTEyICAsIHJlZmxlY3Rpb24tPkdldERvdWJsZShtZXNzYWdlLCBGKCJv
cHRpb25hbF9kb3VibGUiICApKSk7Ci0gIEVYUEVDVF9UUlVFKCAgICAgcmVmbGVjdGlvbi0+R2V0
Qm9vbCAgKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2Jvb2wiICAgICkpKTsKLSAgRVhQRUNUX0VRKCIx
MTUiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcobWVzc2FnZSwgRigib3B0aW9uYWxfc3RyaW5nIiAg
KSkpOwotICBFWFBFQ1RfRVEoIjExNiIsIHJlZmxlY3Rpb24tPkdldFN0cmluZyhtZXNzYWdlLCBG
KCJvcHRpb25hbF9ieXRlcyIgICApKSk7Ci0KLSAgRVhQRUNUX0VRKCIxMTUiLCByZWZsZWN0aW9u
LT5HZXRTdHJpbmdSZWZlcmVuY2UobWVzc2FnZSwgRigib3B0aW9uYWxfc3RyaW5nIiksICZzY3Jh
dGNoKSk7Ci0gIEVYUEVDVF9FUSgiMTE2IiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nUmVmZXJlbmNl
KG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2J5dGVzIiApLCAmc2NyYXRjaCkpOwotCi0gIHN1Yl9tZXNz
YWdlID0gJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxncm91cCIp
KTsKLSAgRVhQRUNUX0VRKDExNywgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50
MzIoKnN1Yl9tZXNzYWdlLCBncm91cF9hXykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZsZWN0aW9u
LT5HZXRNZXNzYWdlKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIikpOwotICBF
WFBFQ1RfRVEoMTE4LCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3Vi
X21lc3NhZ2UsIG5lc3RlZF9iXykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZsZWN0aW9uLT5HZXRN
ZXNzYWdlKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSIpKTsKLSAgRVhQRUNU
X0VRKDExOSwgc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoKnN1Yl9tZXNz
YWdlLCBmb3JlaWduX2NfKSk7Ci0gIHN1Yl9tZXNzYWdlID0gJnJlZmxlY3Rpb24tPkdldE1lc3Nh
Z2UobWVzc2FnZSwgRigib3B0aW9uYWxfaW1wb3J0X21lc3NhZ2UiKSk7Ci0gIEVYUEVDVF9FUSgx
MjAsIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKCpzdWJfbWVzc2FnZSwg
aW1wb3J0X2RfKSk7Ci0gIHN1Yl9tZXNzYWdlID0gJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVz
c2FnZSwgRigib3B0aW9uYWxfcHVibGljX2ltcG9ydF9tZXNzYWdlIikpOwotICBFWFBFQ1RfRVEo
MTI2LCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3ViX21lc3NhZ2Us
IGltcG9ydF9lXykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZsZWN0aW9uLT5HZXRNZXNzYWdlKG1l
c3NhZ2UsIEYoIm9wdGlvbmFsX2xhenlfbWVzc2FnZSIpKTsKLSAgRVhQRUNUX0VRKDEyNywgc3Vi
X21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoKnN1Yl9tZXNzYWdlLCBuZXN0ZWRf
Yl8pKTsKLQotICBFWFBFQ1RfRVEoIG5lc3RlZF9iYXpfLCByZWZsZWN0aW9uLT5HZXRFbnVtKG1l
c3NhZ2UsIEYoIm9wdGlvbmFsX25lc3RlZF9lbnVtIiApKSk7Ci0gIEVYUEVDVF9FUShmb3JlaWdu
X2Jhel8sIHJlZmxlY3Rpb24tPkdldEVudW0obWVzc2FnZSwgRigib3B0aW9uYWxfZm9yZWlnbl9l
bnVtIikpKTsKLSAgRVhQRUNUX0VRKCBpbXBvcnRfYmF6XywgcmVmbGVjdGlvbi0+R2V0RW51bSht
ZXNzYWdlLCBGKCJvcHRpb25hbF9pbXBvcnRfZW51bSIgKSkpOwotCi0gIEVYUEVDVF9FUSgiMTI0
IiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3N0cmluZ19waWVj
ZSIpKSk7Ci0gIEVYUEVDVF9FUSgiMTI0IiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nUmVmZXJlbmNl
KG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3N0cmluZ19waWVjZSIpLCAmc2NyYXRjaCkpOwotCi0gIEVY
UEVDVF9FUSgiMTI1IiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nKG1lc3NhZ2UsIEYoIm9wdGlvbmFs
X2NvcmQiKSkpOwotICBFWFBFQ1RfRVEoIjEyNSIsIHJlZmxlY3Rpb24tPkdldFN0cmluZ1JlZmVy
ZW5jZShtZXNzYWdlLCBGKCJvcHRpb25hbF9jb3JkIiksICZzY3JhdGNoKSk7Ci0KLSAgRVhQRUNU
X1RSVUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigib25lb2ZfYnl0ZXMiICkpKTsK
LSAgRVhQRUNUX0VRKCI2MDQiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcobWVzc2FnZSwgRigib25l
b2ZfYnl0ZXMiICAgKSkpOwotCi0gIGlmIChiYXNlX2Rlc2NyaXB0b3JfLT5uYW1lKCkgPT0gIlRl
c3RBbGxUeXBlcyIpIHsKLSAgICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmllbGQobWVz
c2FnZSwgRigib25lb2ZfdWludDMyIikpKTsKLSAgICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+
SGFzRmllbGQobWVzc2FnZSwgRigib25lb2Zfc3RyaW5nIikpKTsKLSAgfSBlbHNlIHsKLSAgICBF
WFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvbmVvZl91aW50MzIi
KSkpOwotICAgIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9u
ZW9mX3N0cmluZyIpKSk7Ci0gICAgRVhQRUNUX0VRKDYwMSAgLCByZWZsZWN0aW9uLT5HZXRVSW50
MzIobWVzc2FnZSwgRigib25lb2ZfdWludDMyIikpKTsKLSAgICBFWFBFQ1RfRVEoIjYwMyIsIHJl
ZmxlY3Rpb24tPkdldFN0cmluZyhtZXNzYWdlLCBGKCJvbmVvZl9zdHJpbmciKSkpOwotICAgIHN1
Yl9tZXNzYWdlID0gJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigib25lb2ZfbmVz
dGVkX21lc3NhZ2UiKSk7Ci0gICAgRVhQRUNUX0VRKDYwMiwgc3ViX21lc3NhZ2UtPkdldFJlZmxl
Y3Rpb24oKS0+R2V0SW50MzIoKnN1Yl9tZXNzYWdlLCBuZXN0ZWRfYl8pKTsKLSAgfQotfQotCi12
b2lkIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyOjpFeHBlY3RBbGxGaWVsZHNTZXRWaWFSZWZs
ZWN0aW9uMigKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlKSB7Ci0gIGNvbnN0IFJlZmxlY3Rp
b24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAgc3RyaW5nIHNjcmF0
Y2g7Ci0gIGNvbnN0IE1lc3NhZ2UqIHN1Yl9tZXNzYWdlOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAg
QVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRlZF9p
bnQzMiIgICApKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2Fn
ZSwgRigicmVwZWF0ZWRfaW50NjQiICAgKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+
RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3VpbnQzMiIgICkpKTsKLSAgQVNTRVJUX0VR
KDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRlZF91aW50NjQiICAp
KSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVw
ZWF0ZWRfc2ludDMyIiAgKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXpl
KG1lc3NhZ2UsIEYoInJlcGVhdGVkX3NpbnQ2NCIgICkpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxl
Y3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRlZF9maXhlZDMyIiApKSk7Ci0gIEFT
U0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfZml4
ZWQ2NCIgKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2Us
IEYoInJlcGVhdGVkX3NmaXhlZDMyIikpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZp
ZWxkU2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRlZF9zZml4ZWQ2NCIpKSk7Ci0gIEFTU0VSVF9FUSgy
LCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfZmxvYXQiICAgKSkp
OwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVh
dGVkX2RvdWJsZSIgICkpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZSht
ZXNzYWdlLCBGKCJyZXBlYXRlZF9ib29sIiAgICApKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0
aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfc3RyaW5nIiAgKSkpOwotICBBU1NF
UlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2J5dGVz
IiAgICkpKTsKLQotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2Us
IEYoInJlcGVhdGVkZ3JvdXAiICAgICAgICAgICApKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0
aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UiICkpKTsK
LSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRl
ZF9mb3JlaWduX21lc3NhZ2UiKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRT
aXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIiApKSk7Ci0gIEFTU0VSVF9F
USgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfbGF6eV9tZXNz
YWdlIiAgICkpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdl
LCBGKCJyZXBlYXRlZF9uZXN0ZWRfZW51bSIgICAgKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVj
dGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ZvcmVpZ25fZW51bSIgICApKSk7
Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0
ZWRfaW1wb3J0X2VudW0iICAgICkpKTsKLQotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+Rmll
bGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3N0cmluZ19waWVjZSIpKSk7Ci0gIEFTU0VSVF9F
USgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfY29yZCIpKSk7
Ci0KLSAgRVhQRUNUX0VRKDIwMSAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEludDMyIChtZXNz
YWdlLCBGKCJyZXBlYXRlZF9pbnQzMiIgICApLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDIgICwgcmVm
bGVjdGlvbi0+R2V0UmVwZWF0ZWRJbnQ2NCAobWVzc2FnZSwgRigicmVwZWF0ZWRfaW50NjQiICAg
KSwgMCkpOwotICBFWFBFQ1RfRVEoMjAzICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkVUludDMy
KG1lc3NhZ2UsIEYoInJlcGVhdGVkX3VpbnQzMiIgICksIDApKTsKLSAgRVhQRUNUX0VRKDIwNCAg
LCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZFVJbnQ2NChtZXNzYWdlLCBGKCJyZXBlYXRlZF91aW50
NjQiICApLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDUgICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRJ
bnQzMiAobWVzc2FnZSwgRigicmVwZWF0ZWRfc2ludDMyIiAgKSwgMCkpOwotICBFWFBFQ1RfRVEo
MjA2ICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkSW50NjQgKG1lc3NhZ2UsIEYoInJlcGVhdGVk
X3NpbnQ2NCIgICksIDApKTsKLSAgRVhQRUNUX0VRKDIwNyAgLCByZWZsZWN0aW9uLT5HZXRSZXBl
YXRlZFVJbnQzMihtZXNzYWdlLCBGKCJyZXBlYXRlZF9maXhlZDMyIiApLCAwKSk7Ci0gIEVYUEVD
VF9FUSgyMDggICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRVSW50NjQobWVzc2FnZSwgRigicmVw
ZWF0ZWRfZml4ZWQ2NCIgKSwgMCkpOwotICBFWFBFQ1RfRVEoMjA5ICAsIHJlZmxlY3Rpb24tPkdl
dFJlcGVhdGVkSW50MzIgKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3NmaXhlZDMyIiksIDApKTsKLSAg
RVhQRUNUX0VRKDIxMCAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEludDY0IChtZXNzYWdlLCBG
KCJyZXBlYXRlZF9zZml4ZWQ2NCIpLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMTEgICwgcmVmbGVjdGlv
bi0+R2V0UmVwZWF0ZWRGbG9hdCAobWVzc2FnZSwgRigicmVwZWF0ZWRfZmxvYXQiICAgKSwgMCkp
OwotICBFWFBFQ1RfRVEoMjEyICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkRG91YmxlKG1lc3Nh
Z2UsIEYoInJlcGVhdGVkX2RvdWJsZSIgICksIDApKTsKLSAgRVhQRUNUX1RSVUUoICAgICByZWZs
ZWN0aW9uLT5HZXRSZXBlYXRlZEJvb2wgIChtZXNzYWdlLCBGKCJyZXBlYXRlZF9ib29sIiAgICAp
LCAwKSk7Ci0gIEVYUEVDVF9FUSgiMjE1IiwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRTdHJpbmco
bWVzc2FnZSwgRigicmVwZWF0ZWRfc3RyaW5nIiAgKSwgMCkpOwotICBFWFBFQ1RfRVEoIjIxNiIs
IHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkU3RyaW5nKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2J5dGVz
IiAgICksIDApKTsKLQotICBFWFBFQ1RfRVEoIjIxNSIsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVk
U3RyaW5nUmVmZXJlbmNlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3N0cmluZyIpLCAwLCAmc2NyYXRj
aCkpOwotICBFWFBFQ1RfRVEoIjIxNiIsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkU3RyaW5nUmVm
ZXJlbmNlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2J5dGVzIiksIDAsICZzY3JhdGNoKSk7Ci0KLSAg
c3ViX21lc3NhZ2UgPSAmcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIEYo
InJlcGVhdGVkZ3JvdXAiKSwgMCk7Ci0gIEVYUEVDVF9FUSgyMTcsIHN1Yl9tZXNzYWdlLT5HZXRS
ZWZsZWN0aW9uKCktPkdldEludDMyKCpzdWJfbWVzc2FnZSwgcmVwZWF0ZWRfZ3JvdXBfYV8pKTsK
LSAgc3ViX21lc3NhZ2UgPSAmcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRNZXNzYWdlKG1lc3NhZ2Us
IEYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiksIDApOwotICBFWFBFQ1RfRVEoMjE4LCBzdWJf
bWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3ViX21lc3NhZ2UsIG5lc3RlZF9i
XykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2UobWVz
c2FnZSwgRigicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlIiksIDApOwotICBFWFBFQ1RfRVEoMjE5
LCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3ViX21lc3NhZ2UsIGZv
cmVpZ25fY18pKTsKLSAgc3ViX21lc3NhZ2UgPSAmcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRNZXNz
YWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIiksIDApOwotICBFWFBFQ1Rf
RVEoMjIwLCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3ViX21lc3Nh
Z2UsIGltcG9ydF9kXykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZsZWN0aW9uLT5HZXRSZXBlYXRl
ZE1lc3NhZ2UobWVzc2FnZSwgRigicmVwZWF0ZWRfbGF6eV9tZXNzYWdlIiksIDApOwotICBFWFBF
Q1RfRVEoMjI3LCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3ViX21l
c3NhZ2UsIG5lc3RlZF9iXykpOwotCi0gIEVYUEVDVF9FUSggbmVzdGVkX2Jhcl8sIHJlZmxlY3Rp
b24tPkdldFJlcGVhdGVkRW51bShtZXNzYWdlLCBGKCJyZXBlYXRlZF9uZXN0ZWRfZW51bSIgKSww
KSk7Ci0gIEVYUEVDVF9FUShmb3JlaWduX2Jhcl8sIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkRW51
bShtZXNzYWdlLCBGKCJyZXBlYXRlZF9mb3JlaWduX2VudW0iKSwwKSk7Ci0gIEVYUEVDVF9FUSgg
aW1wb3J0X2Jhcl8sIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkRW51bShtZXNzYWdlLCBGKCJyZXBl
YXRlZF9pbXBvcnRfZW51bSIgKSwwKSk7Ci0KLSAgRVhQRUNUX0VRKCIyMjQiLCByZWZsZWN0aW9u
LT5HZXRSZXBlYXRlZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBlYXRlZF9zdHJpbmdfcGllY2UiKSwg
MCkpOwotICBFWFBFQ1RfRVEoIjIyNCIsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkU3RyaW5nUmVm
ZXJlbmNlKAotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgRigicmVwZWF0ZWRfc3Ry
aW5nX3BpZWNlIiksIDAsICZzY3JhdGNoKSk7Ci0KLSAgRVhQRUNUX0VRKCIyMjUiLCByZWZsZWN0
aW9uLT5HZXRSZXBlYXRlZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBlYXRlZF9jb3JkIiksIDApKTsK
LSAgRVhQRUNUX0VRKCIyMjUiLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZFN0cmluZ1JlZmVyZW5j
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIEYoInJlcGVhdGVkX2NvcmQiKSwg
MCwgJnNjcmF0Y2gpKTsKLQotICBFWFBFQ1RfRVEoMzAxICAsIHJlZmxlY3Rpb24tPkdldFJlcGVh
dGVkSW50MzIgKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ludDMyIiAgICksIDEpKTsKLSAgRVhQRUNU
X0VRKDMwMiAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEludDY0IChtZXNzYWdlLCBGKCJyZXBl
YXRlZF9pbnQ2NCIgICApLCAxKSk7Ci0gIEVYUEVDVF9FUSgzMDMgICwgcmVmbGVjdGlvbi0+R2V0
UmVwZWF0ZWRVSW50MzIobWVzc2FnZSwgRigicmVwZWF0ZWRfdWludDMyIiAgKSwgMSkpOwotICBF
WFBFQ1RfRVEoMzA0ICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkVUludDY0KG1lc3NhZ2UsIEYo
InJlcGVhdGVkX3VpbnQ2NCIgICksIDEpKTsKLSAgRVhQRUNUX0VRKDMwNSAgLCByZWZsZWN0aW9u
LT5HZXRSZXBlYXRlZEludDMyIChtZXNzYWdlLCBGKCJyZXBlYXRlZF9zaW50MzIiICApLCAxKSk7
Ci0gIEVYUEVDVF9FUSgzMDYgICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRJbnQ2NCAobWVzc2Fn
ZSwgRigicmVwZWF0ZWRfc2ludDY0IiAgKSwgMSkpOwotICBFWFBFQ1RfRVEoMzA3ICAsIHJlZmxl
Y3Rpb24tPkdldFJlcGVhdGVkVUludDMyKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ZpeGVkMzIiICks
IDEpKTsKLSAgRVhQRUNUX0VRKDMwOCAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZFVJbnQ2NCht
ZXNzYWdlLCBGKCJyZXBlYXRlZF9maXhlZDY0IiApLCAxKSk7Ci0gIEVYUEVDVF9FUSgzMDkgICwg
cmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRJbnQzMiAobWVzc2FnZSwgRigicmVwZWF0ZWRfc2ZpeGVk
MzIiKSwgMSkpOwotICBFWFBFQ1RfRVEoMzEwICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkSW50
NjQgKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3NmaXhlZDY0IiksIDEpKTsKLSAgRVhQRUNUX0VRKDMx
MSAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEZsb2F0IChtZXNzYWdlLCBGKCJyZXBlYXRlZF9m
bG9hdCIgICApLCAxKSk7Ci0gIEVYUEVDVF9FUSgzMTIgICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0
ZWREb3VibGUobWVzc2FnZSwgRigicmVwZWF0ZWRfZG91YmxlIiAgKSwgMSkpOwotICBFWFBFQ1Rf
RkFMU0UoICAgIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkQm9vbCAgKG1lc3NhZ2UsIEYoInJlcGVh
dGVkX2Jvb2wiICAgICksIDEpKTsKLSAgRVhQRUNUX0VRKCIzMTUiLCByZWZsZWN0aW9uLT5HZXRS
ZXBlYXRlZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBlYXRlZF9zdHJpbmciICApLCAxKSk7Ci0gIEVY
UEVDVF9FUSgiMzE2IiwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRTdHJpbmcobWVzc2FnZSwgRigi
cmVwZWF0ZWRfYnl0ZXMiICAgKSwgMSkpOwotCi0gIEVYUEVDVF9FUSgiMzE1IiwgcmVmbGVjdGlv
bi0+R2V0UmVwZWF0ZWRTdHJpbmdSZWZlcmVuY2UobWVzc2FnZSwgRigicmVwZWF0ZWRfc3RyaW5n
IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMSwgJnNjcmF0Y2gpKTsKLSAgRVhQRUNUX0VRKCIzMTYiLCByZWZsZWN0aW9uLT5HZXRS
ZXBlYXRlZFN0cmluZ1JlZmVyZW5jZShtZXNzYWdlLCBGKCJyZXBlYXRlZF9ieXRlcyIpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEs
ICZzY3JhdGNoKSk7Ci0KLSAgc3ViX21lc3NhZ2UgPSAmcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRN
ZXNzYWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkZ3JvdXAiKSwgMSk7Ci0gIEVYUEVDVF9FUSgzMTcs
IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKCpzdWJfbWVzc2FnZSwgcmVw
ZWF0ZWRfZ3JvdXBfYV8pKTsKLSAgc3ViX21lc3NhZ2UgPSAmcmVmbGVjdGlvbi0+R2V0UmVwZWF0
ZWRNZXNzYWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiksIDEpOwotICBF
WFBFQ1RfRVEoMzE4LCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQzMigqc3Vi
X21lc3NhZ2UsIG5lc3RlZF9iXykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZsZWN0aW9uLT5HZXRS
ZXBlYXRlZE1lc3NhZ2UobWVzc2FnZSwgRigicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlIiksIDEp
OwotICBFWFBFQ1RfRVEoMzE5LCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5HZXRJbnQz
Migqc3ViX21lc3NhZ2UsIGZvcmVpZ25fY18pKTsKLSAgc3ViX21lc3NhZ2UgPSAmcmVmbGVjdGlv
bi0+R2V0UmVwZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdl
IiksIDEpOwotICBFWFBFQ1RfRVEoMzIwLCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5H
ZXRJbnQzMigqc3ViX21lc3NhZ2UsIGltcG9ydF9kXykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZs
ZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2UobWVzc2FnZSwgRigicmVwZWF0ZWRfbGF6eV9tZXNz
YWdlIiksIDEpOwotICBFWFBFQ1RfRVEoMzI3LCBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigp
LT5HZXRJbnQzMigqc3ViX21lc3NhZ2UsIG5lc3RlZF9iXykpOwotCi0gIEVYUEVDVF9FUSggbmVz
dGVkX2Jhel8sIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkRW51bShtZXNzYWdlLCBGKCJyZXBlYXRl
ZF9uZXN0ZWRfZW51bSIgKSwxKSk7Ci0gIEVYUEVDVF9FUShmb3JlaWduX2Jhel8sIHJlZmxlY3Rp
b24tPkdldFJlcGVhdGVkRW51bShtZXNzYWdlLCBGKCJyZXBlYXRlZF9mb3JlaWduX2VudW0iKSwx
KSk7Ci0gIEVYUEVDVF9FUSggaW1wb3J0X2Jhel8sIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkRW51
bShtZXNzYWdlLCBGKCJyZXBlYXRlZF9pbXBvcnRfZW51bSIgKSwxKSk7Ci0KLSAgRVhQRUNUX0VR
KCIzMjQiLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBlYXRl
ZF9zdHJpbmdfcGllY2UiKSwgMSkpOwotICBFWFBFQ1RfRVEoIjMyNCIsIHJlZmxlY3Rpb24tPkdl
dFJlcGVhdGVkU3RyaW5nUmVmZXJlbmNlKAotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZSwgRigicmVwZWF0ZWRfc3RyaW5nX3BpZWNlIiksIDEsICZzY3JhdGNoKSk7Ci0KLSAgRVhQRUNU
X0VRKCIzMjUiLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBl
YXRlZF9jb3JkIiksIDEpKTsKLSAgRVhQRUNUX0VRKCIzMjUiLCByZWZsZWN0aW9uLT5HZXRSZXBl
YXRlZFN0cmluZ1JlZmVyZW5jZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIEYo
InJlcGVhdGVkX2NvcmQiKSwgMSwgJnNjcmF0Y2gpKTsKLX0KLQotdm9pZCBUZXN0VXRpbDo6UmVm
bGVjdGlvblRlc3Rlcjo6RXhwZWN0QWxsRmllbGRzU2V0VmlhUmVmbGVjdGlvbjMoCi0gICAgY29u
c3QgTWVzc2FnZSYgbWVzc2FnZSkgewotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0g
bWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0gIHN0cmluZyBzY3JhdGNoOwotCi0gIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigiZGVm
YXVsdF9pbnQzMiIgICApKSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1l
c3NhZ2UsIEYoImRlZmF1bHRfaW50NjQiICAgKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9u
LT5IYXNGaWVsZChtZXNzYWdlLCBGKCJkZWZhdWx0X3VpbnQzMiIgICkpKTsKLSAgRVhQRUNUX1RS
VUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigiZGVmYXVsdF91aW50NjQiICApKSk7
Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoImRlZmF1bHRf
c2ludDMyIiAgKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdl
LCBGKCJkZWZhdWx0X3NpbnQ2NCIgICkpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SGFz
RmllbGQobWVzc2FnZSwgRigiZGVmYXVsdF9maXhlZDMyIiApKSk7Ci0gIEVYUEVDVF9UUlVFKHJl
ZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoImRlZmF1bHRfZml4ZWQ2NCIgKSkpOwotICBF
WFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJkZWZhdWx0X3NmaXhl
ZDMyIikpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigi
ZGVmYXVsdF9zZml4ZWQ2NCIpKSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxk
KG1lc3NhZ2UsIEYoImRlZmF1bHRfZmxvYXQiICAgKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0
aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJkZWZhdWx0X2RvdWJsZSIgICkpKTsKLSAgRVhQRUNU
X1RSVUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigiZGVmYXVsdF9ib29sIiAgICAp
KSk7Ci0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoImRlZmF1
bHRfc3RyaW5nIiAgKSkpOwotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNz
YWdlLCBGKCJkZWZhdWx0X2J5dGVzIiAgICkpKTsKLQotICBFWFBFQ1RfVFJVRShyZWZsZWN0aW9u
LT5IYXNGaWVsZChtZXNzYWdlLCBGKCJkZWZhdWx0X25lc3RlZF9lbnVtIiApKSk7Ci0gIEVYUEVD
VF9UUlVFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoImRlZmF1bHRfZm9yZWlnbl9l
bnVtIikpKTsKLSAgRVhQRUNUX1RSVUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigi
ZGVmYXVsdF9pbXBvcnRfZW51bSIgKSkpOwotCi0gIEVYUEVDVF9UUlVFKHJlZmxlY3Rpb24tPkhh
c0ZpZWxkKG1lc3NhZ2UsIEYoImRlZmF1bHRfc3RyaW5nX3BpZWNlIikpKTsKLSAgRVhQRUNUX1RS
VUUocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigiZGVmYXVsdF9jb3JkIikpKTsKLQot
ICBFWFBFQ1RfRVEoNDAxICAsIHJlZmxlY3Rpb24tPkdldEludDMyIChtZXNzYWdlLCBGKCJkZWZh
dWx0X2ludDMyIiAgICkpKTsKLSAgRVhQRUNUX0VRKDQwMiAgLCByZWZsZWN0aW9uLT5HZXRJbnQ2
NCAobWVzc2FnZSwgRigiZGVmYXVsdF9pbnQ2NCIgICApKSk7Ci0gIEVYUEVDVF9FUSg0MDMgICwg
cmVmbGVjdGlvbi0+R2V0VUludDMyKG1lc3NhZ2UsIEYoImRlZmF1bHRfdWludDMyIiAgKSkpOwot
ICBFWFBFQ1RfRVEoNDA0ICAsIHJlZmxlY3Rpb24tPkdldFVJbnQ2NChtZXNzYWdlLCBGKCJkZWZh
dWx0X3VpbnQ2NCIgICkpKTsKLSAgRVhQRUNUX0VRKDQwNSAgLCByZWZsZWN0aW9uLT5HZXRJbnQz
MiAobWVzc2FnZSwgRigiZGVmYXVsdF9zaW50MzIiICApKSk7Ci0gIEVYUEVDVF9FUSg0MDYgICwg
cmVmbGVjdGlvbi0+R2V0SW50NjQgKG1lc3NhZ2UsIEYoImRlZmF1bHRfc2ludDY0IiAgKSkpOwot
ICBFWFBFQ1RfRVEoNDA3ICAsIHJlZmxlY3Rpb24tPkdldFVJbnQzMihtZXNzYWdlLCBGKCJkZWZh
dWx0X2ZpeGVkMzIiICkpKTsKLSAgRVhQRUNUX0VRKDQwOCAgLCByZWZsZWN0aW9uLT5HZXRVSW50
NjQobWVzc2FnZSwgRigiZGVmYXVsdF9maXhlZDY0IiApKSk7Ci0gIEVYUEVDVF9FUSg0MDkgICwg
cmVmbGVjdGlvbi0+R2V0SW50MzIgKG1lc3NhZ2UsIEYoImRlZmF1bHRfc2ZpeGVkMzIiKSkpOwot
ICBFWFBFQ1RfRVEoNDEwICAsIHJlZmxlY3Rpb24tPkdldEludDY0IChtZXNzYWdlLCBGKCJkZWZh
dWx0X3NmaXhlZDY0IikpKTsKLSAgRVhQRUNUX0VRKDQxMSAgLCByZWZsZWN0aW9uLT5HZXRGbG9h
dCAobWVzc2FnZSwgRigiZGVmYXVsdF9mbG9hdCIgICApKSk7Ci0gIEVYUEVDVF9FUSg0MTIgICwg
cmVmbGVjdGlvbi0+R2V0RG91YmxlKG1lc3NhZ2UsIEYoImRlZmF1bHRfZG91YmxlIiAgKSkpOwot
ICBFWFBFQ1RfRkFMU0UoICAgIHJlZmxlY3Rpb24tPkdldEJvb2wgIChtZXNzYWdlLCBGKCJkZWZh
dWx0X2Jvb2wiICAgICkpKTsKLSAgRVhQRUNUX0VRKCI0MTUiLCByZWZsZWN0aW9uLT5HZXRTdHJp
bmcobWVzc2FnZSwgRigiZGVmYXVsdF9zdHJpbmciICApKSk7Ci0gIEVYUEVDVF9FUSgiNDE2Iiwg
cmVmbGVjdGlvbi0+R2V0U3RyaW5nKG1lc3NhZ2UsIEYoImRlZmF1bHRfYnl0ZXMiICAgKSkpOwot
Ci0gIEVYUEVDVF9FUSgiNDE1IiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nUmVmZXJlbmNlKG1lc3Nh
Z2UsIEYoImRlZmF1bHRfc3RyaW5nIiksICZzY3JhdGNoKSk7Ci0gIEVYUEVDVF9FUSgiNDE2Iiwg
cmVmbGVjdGlvbi0+R2V0U3RyaW5nUmVmZXJlbmNlKG1lc3NhZ2UsIEYoImRlZmF1bHRfYnl0ZXMi
ICksICZzY3JhdGNoKSk7Ci0KLSAgRVhQRUNUX0VRKCBuZXN0ZWRfZm9vXywgcmVmbGVjdGlvbi0+
R2V0RW51bShtZXNzYWdlLCBGKCJkZWZhdWx0X25lc3RlZF9lbnVtIiApKSk7Ci0gIEVYUEVDVF9F
UShmb3JlaWduX2Zvb18sIHJlZmxlY3Rpb24tPkdldEVudW0obWVzc2FnZSwgRigiZGVmYXVsdF9m
b3JlaWduX2VudW0iKSkpOwotICBFWFBFQ1RfRVEoIGltcG9ydF9mb29fLCByZWZsZWN0aW9uLT5H
ZXRFbnVtKG1lc3NhZ2UsIEYoImRlZmF1bHRfaW1wb3J0X2VudW0iICkpKTsKLQotICBFWFBFQ1Rf
RVEoIjQyNCIsIHJlZmxlY3Rpb24tPkdldFN0cmluZyhtZXNzYWdlLCBGKCJkZWZhdWx0X3N0cmlu
Z19waWVjZSIpKSk7Ci0gIEVYUEVDVF9FUSgiNDI0IiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nUmVm
ZXJlbmNlKG1lc3NhZ2UsIEYoImRlZmF1bHRfc3RyaW5nX3BpZWNlIiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY3JhdGNoKSk7Ci0KLSAgRVhQ
RUNUX0VRKCI0MjUiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcobWVzc2FnZSwgRigiZGVmYXVsdF9j
b3JkIikpKTsKLSAgRVhQRUNUX0VRKCI0MjUiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmdSZWZlcmVu
Y2UobWVzc2FnZSwgRigiZGVmYXVsdF9jb3JkIiksICZzY3JhdGNoKSk7Ci19Ci0KLXZvaWQgVGVz
dFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OkV4cGVjdFBhY2tlZEZpZWxkc1NldFZpYVJlZmxlY3Rp
b24oCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSkgewotICBjb25zdCBSZWZsZWN0aW9uKiBy
ZWZsZWN0aW9uID0gbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgQVNTRVJUX0VRKDIsIHJl
ZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJwYWNrZWRfaW50MzIiICAgKSkpOwotICBB
U1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInBhY2tlZF9pbnQ2
NCIgICApKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwg
RigicGFja2VkX3VpbnQzMiIgICkpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxk
U2l6ZShtZXNzYWdlLCBGKCJwYWNrZWRfdWludDY0IiAgKSkpOwotICBBU1NFUlRfRVEoMiwgcmVm
bGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInBhY2tlZF9zaW50MzIiICApKSk7Ci0gIEFT
U0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicGFja2VkX3NpbnQ2
NCIgICkpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBG
KCJwYWNrZWRfZml4ZWQzMiIgKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRT
aXplKG1lc3NhZ2UsIEYoInBhY2tlZF9maXhlZDY0IiApKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZs
ZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicGFja2VkX3NmaXhlZDMyIikpKTsKLSAgQVNT
RVJUX0VRKDIsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJwYWNrZWRfc2ZpeGVk
NjQiKSkpOwotICBBU1NFUlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYo
InBhY2tlZF9mbG9hdCIgICApKSk7Ci0gIEFTU0VSVF9FUSgyLCByZWZsZWN0aW9uLT5GaWVsZFNp
emUobWVzc2FnZSwgRigicGFja2VkX2RvdWJsZSIgICkpKTsKLSAgQVNTRVJUX0VRKDIsIHJlZmxl
Y3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJwYWNrZWRfYm9vbCIgICAgKSkpOwotICBBU1NF
UlRfRVEoMiwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInBhY2tlZF9lbnVtIiAg
ICApKSk7Ci0KLSAgRVhQRUNUX0VRKDYwMSAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEludDMy
IChtZXNzYWdlLCBGKCJwYWNrZWRfaW50MzIiICAgKSwgMCkpOwotICBFWFBFQ1RfRVEoNjAyICAs
IHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkSW50NjQgKG1lc3NhZ2UsIEYoInBhY2tlZF9pbnQ2NCIg
ICApLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDMgICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRVSW50
MzIobWVzc2FnZSwgRigicGFja2VkX3VpbnQzMiIgICksIDApKTsKLSAgRVhQRUNUX0VRKDYwNCAg
LCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZFVJbnQ2NChtZXNzYWdlLCBGKCJwYWNrZWRfdWludDY0
IiAgKSwgMCkpOwotICBFWFBFQ1RfRVEoNjA1ICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkSW50
MzIgKG1lc3NhZ2UsIEYoInBhY2tlZF9zaW50MzIiICApLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDYg
ICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRJbnQ2NCAobWVzc2FnZSwgRigicGFja2VkX3NpbnQ2
NCIgICksIDApKTsKLSAgRVhQRUNUX0VRKDYwNyAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZFVJ
bnQzMihtZXNzYWdlLCBGKCJwYWNrZWRfZml4ZWQzMiIgKSwgMCkpOwotICBFWFBFQ1RfRVEoNjA4
ICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkVUludDY0KG1lc3NhZ2UsIEYoInBhY2tlZF9maXhl
ZDY0IiApLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDkgICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRJ
bnQzMiAobWVzc2FnZSwgRigicGFja2VkX3NmaXhlZDMyIiksIDApKTsKLSAgRVhQRUNUX0VRKDYx
MCAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEludDY0IChtZXNzYWdlLCBGKCJwYWNrZWRfc2Zp
eGVkNjQiKSwgMCkpOwotICBFWFBFQ1RfRVEoNjExICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVk
RmxvYXQgKG1lc3NhZ2UsIEYoInBhY2tlZF9mbG9hdCIgICApLCAwKSk7Ci0gIEVYUEVDVF9FUSg2
MTIgICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWREb3VibGUobWVzc2FnZSwgRigicGFja2VkX2Rv
dWJsZSIgICksIDApKTsKLSAgRVhQRUNUX1RSVUUoICAgICByZWZsZWN0aW9uLT5HZXRSZXBlYXRl
ZEJvb2wgIChtZXNzYWdlLCBGKCJwYWNrZWRfYm9vbCIgICAgKSwgMCkpOwotICBFWFBFQ1RfRVEo
Zm9yZWlnbl9iYXJfLAotICAgICAgICAgICAgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRFbnVtKG1l
c3NhZ2UsIEYoInBhY2tlZF9lbnVtIiksIDApKTsKLQotICBFWFBFQ1RfRVEoNzAxICAsIHJlZmxl
Y3Rpb24tPkdldFJlcGVhdGVkSW50MzIgKG1lc3NhZ2UsIEYoInBhY2tlZF9pbnQzMiIgICApLCAx
KSk7Ci0gIEVYUEVDVF9FUSg3MDIgICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRJbnQ2NCAobWVz
c2FnZSwgRigicGFja2VkX2ludDY0IiAgICksIDEpKTsKLSAgRVhQRUNUX0VRKDcwMyAgLCByZWZs
ZWN0aW9uLT5HZXRSZXBlYXRlZFVJbnQzMihtZXNzYWdlLCBGKCJwYWNrZWRfdWludDMyIiAgKSwg
MSkpOwotICBFWFBFQ1RfRVEoNzA0ICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkVUludDY0KG1l
c3NhZ2UsIEYoInBhY2tlZF91aW50NjQiICApLCAxKSk7Ci0gIEVYUEVDVF9FUSg3MDUgICwgcmVm
bGVjdGlvbi0+R2V0UmVwZWF0ZWRJbnQzMiAobWVzc2FnZSwgRigicGFja2VkX3NpbnQzMiIgICks
IDEpKTsKLSAgRVhQRUNUX0VRKDcwNiAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEludDY0ICht
ZXNzYWdlLCBGKCJwYWNrZWRfc2ludDY0IiAgKSwgMSkpOwotICBFWFBFQ1RfRVEoNzA3ICAsIHJl
ZmxlY3Rpb24tPkdldFJlcGVhdGVkVUludDMyKG1lc3NhZ2UsIEYoInBhY2tlZF9maXhlZDMyIiAp
LCAxKSk7Ci0gIEVYUEVDVF9FUSg3MDggICwgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRVSW50NjQo
bWVzc2FnZSwgRigicGFja2VkX2ZpeGVkNjQiICksIDEpKTsKLSAgRVhQRUNUX0VRKDcwOSAgLCBy
ZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEludDMyIChtZXNzYWdlLCBGKCJwYWNrZWRfc2ZpeGVkMzIi
KSwgMSkpOwotICBFWFBFQ1RfRVEoNzEwICAsIHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkSW50NjQg
KG1lc3NhZ2UsIEYoInBhY2tlZF9zZml4ZWQ2NCIpLCAxKSk7Ci0gIEVYUEVDVF9FUSg3MTEgICwg
cmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRGbG9hdCAobWVzc2FnZSwgRigicGFja2VkX2Zsb2F0IiAg
ICksIDEpKTsKLSAgRVhQRUNUX0VRKDcxMiAgLCByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZERvdWJs
ZShtZXNzYWdlLCBGKCJwYWNrZWRfZG91YmxlIiAgKSwgMSkpOwotICBFWFBFQ1RfRkFMU0UoICAg
IHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkQm9vbCAgKG1lc3NhZ2UsIEYoInBhY2tlZF9ib29sIiAg
ICApLCAxKSk7Ci0gIEVYUEVDVF9FUShmb3JlaWduX2Jhel8sCi0gICAgICAgICAgICByZWZsZWN0
aW9uLT5HZXRSZXBlYXRlZEVudW0obWVzc2FnZSwgRigicGFja2VkX2VudW0iKSwgMSkpOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OkV4cGVj
dENsZWFyVmlhUmVmbGVjdGlvbigKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlKSB7Ci0gIGNv
bnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAg
c3RyaW5nIHNjcmF0Y2g7Ci0gIGNvbnN0IE1lc3NhZ2UqIHN1Yl9tZXNzYWdlOwotCi0gIC8vIGhh
c19ibGFoKCkgc2hvdWxkIGluaXRpYWxseSBiZSBmYWxzZSBmb3IgYWxsIG9wdGlvbmFsIGZpZWxk
cy4KLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlv
bmFsX2ludDMyIiAgICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1l
c3NhZ2UsIEYoIm9wdGlvbmFsX2ludDY0IiAgICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rp
b24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3VpbnQzMiIgICkpKTsKLSAgRVhQRUNU
X0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3VpbnQ2NCIg
ICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9w
dGlvbmFsX3NpbnQzMiIgICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxk
KG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3NpbnQ2NCIgICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxl
Y3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2ZpeGVkMzIiICkpKTsKLSAgRVhQ
RUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2ZpeGVk
NjQiICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYo
Im9wdGlvbmFsX3NmaXhlZDMyIikpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0Zp
ZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3NmaXhlZDY0IikpKTsKLSAgRVhQRUNUX0ZBTFNFKHJl
ZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2Zsb2F0IiAgICkpKTsKLSAg
RVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2Rv
dWJsZSIgICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2Us
IEYoIm9wdGlvbmFsX2Jvb2wiICAgICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhh
c0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3N0cmluZyIgICkpKTsKLSAgRVhQRUNUX0ZBTFNF
KHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2J5dGVzIiAgICkpKTsK
LQotICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigib3B0aW9u
YWxncm91cCIgICAgICAgICAgICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0Zp
ZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIiApKSk7Ci0gIEVYUEVDVF9G
QUxTRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbF9mb3JlaWduX21l
c3NhZ2UiKSkpOwotICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwg
Rigib3B0aW9uYWxfaW1wb3J0X21lc3NhZ2UiICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rp
b24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZSIp
KSk7Ci0gIEVYUEVDVF9GQUxTRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRp
b25hbF9sYXp5X21lc3NhZ2UiKSkpOwotCi0gIEVYUEVDVF9GQUxTRShyZWZsZWN0aW9uLT5IYXNG
aWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbF9uZXN0ZWRfZW51bSIgKSkpOwotICBFWFBFQ1RfRkFM
U0UocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigib3B0aW9uYWxfZm9yZWlnbl9lbnVt
IikpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoIm9w
dGlvbmFsX2ltcG9ydF9lbnVtIiApKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhh
c0ZpZWxkKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3N0cmluZ19waWVjZSIpKSk7Ci0gIEVYUEVDVF9G
QUxTRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJvcHRpb25hbF9jb3JkIikpKTsK
LQotICAvLyBPcHRpb25hbCBmaWVsZHMgd2l0aG91dCBkZWZhdWx0cyBhcmUgc2V0IHRvIHplcm8g
b3Igc29tZXRoaW5nIGxpa2UgaXQuCi0gIEVYUEVDVF9FUSgwICAgICwgcmVmbGVjdGlvbi0+R2V0
SW50MzIgKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2ludDMyIiAgICkpKTsKLSAgRVhQRUNUX0VRKDAg
ICAgLCByZWZsZWN0aW9uLT5HZXRJbnQ2NCAobWVzc2FnZSwgRigib3B0aW9uYWxfaW50NjQiICAg
KSkpOwotICBFWFBFQ1RfRVEoMCAgICAsIHJlZmxlY3Rpb24tPkdldFVJbnQzMihtZXNzYWdlLCBG
KCJvcHRpb25hbF91aW50MzIiICApKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgcmVmbGVjdGlvbi0+
R2V0VUludDY0KG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3VpbnQ2NCIgICkpKTsKLSAgRVhQRUNUX0VR
KDAgICAgLCByZWZsZWN0aW9uLT5HZXRJbnQzMiAobWVzc2FnZSwgRigib3B0aW9uYWxfc2ludDMy
IiAgKSkpOwotICBFWFBFQ1RfRVEoMCAgICAsIHJlZmxlY3Rpb24tPkdldEludDY0IChtZXNzYWdl
LCBGKCJvcHRpb25hbF9zaW50NjQiICApKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgcmVmbGVjdGlv
bi0+R2V0VUludDMyKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2ZpeGVkMzIiICkpKTsKLSAgRVhQRUNU
X0VRKDAgICAgLCByZWZsZWN0aW9uLT5HZXRVSW50NjQobWVzc2FnZSwgRigib3B0aW9uYWxfZml4
ZWQ2NCIgKSkpOwotICBFWFBFQ1RfRVEoMCAgICAsIHJlZmxlY3Rpb24tPkdldEludDMyIChtZXNz
YWdlLCBGKCJvcHRpb25hbF9zZml4ZWQzMiIpKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgcmVmbGVj
dGlvbi0+R2V0SW50NjQgKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX3NmaXhlZDY0IikpKTsKLSAgRVhQ
RUNUX0VRKDAgICAgLCByZWZsZWN0aW9uLT5HZXRGbG9hdCAobWVzc2FnZSwgRigib3B0aW9uYWxf
ZmxvYXQiICAgKSkpOwotICBFWFBFQ1RfRVEoMCAgICAsIHJlZmxlY3Rpb24tPkdldERvdWJsZSht
ZXNzYWdlLCBGKCJvcHRpb25hbF9kb3VibGUiICApKSk7Ci0gIEVYUEVDVF9GQUxTRSggICAgcmVm
bGVjdGlvbi0+R2V0Qm9vbCAgKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2Jvb2wiICAgICkpKTsKLSAg
RVhQRUNUX0VRKCIiICAgLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcobWVzc2FnZSwgRigib3B0aW9u
YWxfc3RyaW5nIiAgKSkpOwotICBFWFBFQ1RfRVEoIiIgICAsIHJlZmxlY3Rpb24tPkdldFN0cmlu
ZyhtZXNzYWdlLCBGKCJvcHRpb25hbF9ieXRlcyIgICApKSk7Ci0KLSAgRVhQRUNUX0VRKCIiLCBy
ZWZsZWN0aW9uLT5HZXRTdHJpbmdSZWZlcmVuY2UobWVzc2FnZSwgRigib3B0aW9uYWxfc3RyaW5n
IiksICZzY3JhdGNoKSk7Ci0gIEVYUEVDVF9FUSgiIiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nUmVm
ZXJlbmNlKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2J5dGVzIiApLCAmc2NyYXRjaCkpOwotCi0gIC8v
IEVtYmVkZGVkIG1lc3NhZ2VzIHNob3VsZCBhbHNvIGJlIGNsZWFyLgotICBzdWJfbWVzc2FnZSA9
ICZyZWZsZWN0aW9uLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIEYoIm9wdGlvbmFsZ3JvdXAiKSk7Ci0g
IEVYUEVDVF9GQUxTRShzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5IYXNGaWVsZCgqc3Vi
X21lc3NhZ2UsIGdyb3VwX2FfKSk7Ci0gIEVYUEVDVF9FUSgwLCBzdWJfbWVzc2FnZS0+R2V0UmVm
bGVjdGlvbigpLT5HZXRJbnQzMigqc3ViX21lc3NhZ2UsIGdyb3VwX2FfKSk7Ci0gIHN1Yl9tZXNz
YWdlID0gJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UiKSk7Ci0gIEVYUEVDVF9GQUxTRShzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigp
LT5IYXNGaWVsZCgqc3ViX21lc3NhZ2UsIG5lc3RlZF9iXykpOwotICBFWFBFQ1RfRVEoMCwgc3Vi
X21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+R2V0SW50MzIoKnN1Yl9tZXNzYWdlLCBuZXN0ZWRf
Yl8pKTsKLSAgc3ViX21lc3NhZ2UgPSAmcmVmbGVjdGlvbi0+R2V0TWVzc2FnZShtZXNzYWdlLCBG
KCJvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UiKSk7Ci0gIEVYUEVDVF9GQUxTRShzdWJfbWVzc2Fn
ZS0+R2V0UmVmbGVjdGlvbigpLT5IYXNGaWVsZCgqc3ViX21lc3NhZ2UsIGZvcmVpZ25fY18pKTsK
LSAgRVhQRUNUX0VRKDAsIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKCpz
dWJfbWVzc2FnZSwgZm9yZWlnbl9jXykpOwotICBzdWJfbWVzc2FnZSA9ICZyZWZsZWN0aW9uLT5H
ZXRNZXNzYWdlKG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlIikpOwotICBFWFBF
Q1RfRkFMU0Uoc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKS0+SGFzRmllbGQoKnN1Yl9tZXNz
YWdlLCBpbXBvcnRfZF8pKTsKLSAgRVhQRUNUX0VRKDAsIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0
aW9uKCktPkdldEludDMyKCpzdWJfbWVzc2FnZSwgaW1wb3J0X2RfKSk7Ci0gIHN1Yl9tZXNzYWdl
ID0gJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2FnZSwgRigib3B0aW9uYWxfcHVibGljX2lt
cG9ydF9tZXNzYWdlIikpOwotICBFWFBFQ1RfRkFMU0Uoc3ViX21lc3NhZ2UtPkdldFJlZmxlY3Rp
b24oKS0+SGFzRmllbGQoKnN1Yl9tZXNzYWdlLCBpbXBvcnRfZV8pKTsKLSAgRVhQRUNUX0VRKDAs
IHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKCpzdWJfbWVzc2FnZSwgaW1w
b3J0X2VfKSk7Ci0gIHN1Yl9tZXNzYWdlID0gJnJlZmxlY3Rpb24tPkdldE1lc3NhZ2UobWVzc2Fn
ZSwgRigib3B0aW9uYWxfbGF6eV9tZXNzYWdlIikpOwotICBFWFBFQ1RfRkFMU0Uoc3ViX21lc3Nh
Z2UtPkdldFJlZmxlY3Rpb24oKS0+SGFzRmllbGQoKnN1Yl9tZXNzYWdlLCBuZXN0ZWRfYl8pKTsK
LSAgRVhQRUNUX0VRKDAsIHN1Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPkdldEludDMyKCpz
dWJfbWVzc2FnZSwgbmVzdGVkX2JfKSk7Ci0KLSAgLy8gRW51bXMgd2l0aG91dCBkZWZhdWx0cyBh
cmUgc2V0IHRvIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUgZW51bS4KLSAgRVhQRUNUX0VRKCBuZXN0
ZWRfZm9vXywgcmVmbGVjdGlvbi0+R2V0RW51bShtZXNzYWdlLCBGKCJvcHRpb25hbF9uZXN0ZWRf
ZW51bSIgKSkpOwotICBFWFBFQ1RfRVEoZm9yZWlnbl9mb29fLCByZWZsZWN0aW9uLT5HZXRFbnVt
KG1lc3NhZ2UsIEYoIm9wdGlvbmFsX2ZvcmVpZ25fZW51bSIpKSk7Ci0gIEVYUEVDVF9FUSggaW1w
b3J0X2Zvb18sIHJlZmxlY3Rpb24tPkdldEVudW0obWVzc2FnZSwgRigib3B0aW9uYWxfaW1wb3J0
X2VudW0iICkpKTsKLQotICBFWFBFQ1RfRVEoIiIsIHJlZmxlY3Rpb24tPkdldFN0cmluZyhtZXNz
YWdlLCBGKCJvcHRpb25hbF9zdHJpbmdfcGllY2UiKSkpOwotICBFWFBFQ1RfRVEoIiIsIHJlZmxl
Y3Rpb24tPkdldFN0cmluZ1JlZmVyZW5jZShtZXNzYWdlLCBGKCJvcHRpb25hbF9zdHJpbmdfcGll
Y2UiKSwgJnNjcmF0Y2gpKTsKLQotICBFWFBFQ1RfRVEoIiIsIHJlZmxlY3Rpb24tPkdldFN0cmlu
ZyhtZXNzYWdlLCBGKCJvcHRpb25hbF9jb3JkIikpKTsKLSAgRVhQRUNUX0VRKCIiLCByZWZsZWN0
aW9uLT5HZXRTdHJpbmdSZWZlcmVuY2UobWVzc2FnZSwgRigib3B0aW9uYWxfY29yZCIpLCAmc2Ny
YXRjaCkpOwotCi0gIC8vIFJlcGVhdGVkIGZpZWxkcyBhcmUgZW1wdHkuCi0gIEVYUEVDVF9FUSgw
LCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfaW50MzIiICAgKSkp
OwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVh
dGVkX2ludDY0IiAgICkpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZSht
ZXNzYWdlLCBGKCJyZXBlYXRlZF91aW50MzIiICApKSk7Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0
aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfdWludDY0IiAgKSkpOwotICBFWFBF
Q1RfRVEoMCwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3NpbnQz
MiIgICkpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBG
KCJyZXBlYXRlZF9zaW50NjQiICApKSk7Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0aW9uLT5GaWVs
ZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfZml4ZWQzMiIgKSkpOwotICBFWFBFQ1RfRVEoMCwg
cmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ZpeGVkNjQiICkpKTsK
LSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRl
ZF9zZml4ZWQzMiIpKSk7Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVz
c2FnZSwgRigicmVwZWF0ZWRfc2ZpeGVkNjQiKSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlv
bi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2Zsb2F0IiAgICkpKTsKLSAgRVhQRUNU
X0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRlZF9kb3VibGUi
ICApKSk7Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigi
cmVwZWF0ZWRfYm9vbCIgICAgKSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+RmllbGRT
aXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX3N0cmluZyIgICkpKTsKLSAgRVhQRUNUX0VRKDAsIHJl
ZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRlZF9ieXRlcyIgICApKSk7Ci0K
LSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRl
ZGdyb3VwIiAgICAgICAgICAgKSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+RmllbGRT
aXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiApKSk7Ci0gIEVYUEVDVF9F
USgwLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0ZWRfZm9yZWlnbl9t
ZXNzYWdlIikpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdl
LCBGKCJyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSIgKSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVj
dGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2xhenlfbWVzc2FnZSIgICApKSk7
Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicmVwZWF0
ZWRfbmVzdGVkX2VudW0iICAgICkpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxk
U2l6ZShtZXNzYWdlLCBGKCJyZXBlYXRlZF9mb3JlaWduX2VudW0iICAgKSkpOwotICBFWFBFQ1Rf
RVEoMCwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ltcG9ydF9l
bnVtIiAgICApKSk7Ci0KLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNz
YWdlLCBGKCJyZXBlYXRlZF9zdHJpbmdfcGllY2UiKSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVj
dGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2NvcmQiKSkpOwotCi0gIC8vIGhh
c19ibGFoKCkgc2hvdWxkIGFsc28gYmUgZmFsc2UgZm9yIGFsbCBkZWZhdWx0IGZpZWxkcy4KLSAg
RVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoImRlZmF1bHRfaW50
MzIiICAgKSkpOwotICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwg
RigiZGVmYXVsdF9pbnQ2NCIgICApKSk7Ci0gIEVYUEVDVF9GQUxTRShyZWZsZWN0aW9uLT5IYXNG
aWVsZChtZXNzYWdlLCBGKCJkZWZhdWx0X3VpbnQzMiIgICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJl
ZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoImRlZmF1bHRfdWludDY0IiAgKSkpOwotICBF
WFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigiZGVmYXVsdF9zaW50
MzIiICApKSk7Ci0gIEVYUEVDVF9GQUxTRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBG
KCJkZWZhdWx0X3NpbnQ2NCIgICkpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0Zp
ZWxkKG1lc3NhZ2UsIEYoImRlZmF1bHRfZml4ZWQzMiIgKSkpOwotICBFWFBFQ1RfRkFMU0UocmVm
bGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigiZGVmYXVsdF9maXhlZDY0IiApKSk7Ci0gIEVY
UEVDVF9GQUxTRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJkZWZhdWx0X3NmaXhl
ZDMyIikpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYo
ImRlZmF1bHRfc2ZpeGVkNjQiKSkpOwotICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmll
bGQobWVzc2FnZSwgRigiZGVmYXVsdF9mbG9hdCIgICApKSk7Ci0gIEVYUEVDVF9GQUxTRShyZWZs
ZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJkZWZhdWx0X2RvdWJsZSIgICkpKTsKLSAgRVhQ
RUNUX0ZBTFNFKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIEYoImRlZmF1bHRfYm9vbCIg
ICAgKSkpOwotICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigi
ZGVmYXVsdF9zdHJpbmciICApKSk7Ci0gIEVYUEVDVF9GQUxTRShyZWZsZWN0aW9uLT5IYXNGaWVs
ZChtZXNzYWdlLCBGKCJkZWZhdWx0X2J5dGVzIiAgICkpKTsKLQotICBFWFBFQ1RfRkFMU0UocmVm
bGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigiZGVmYXVsdF9uZXN0ZWRfZW51bSIgKSkpOwot
ICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgRigiZGVmYXVsdF9m
b3JlaWduX2VudW0iKSkpOwotICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmllbGQobWVz
c2FnZSwgRigiZGVmYXVsdF9pbXBvcnRfZW51bSIgKSkpOwotCi0gIEVYUEVDVF9GQUxTRShyZWZs
ZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJkZWZhdWx0X3N0cmluZ19waWVjZSIpKSk7Ci0g
IEVYUEVDVF9GQUxTRShyZWZsZWN0aW9uLT5IYXNGaWVsZChtZXNzYWdlLCBGKCJkZWZhdWx0X2Nv
cmQiKSkpOwotCi0gIC8vIEZpZWxkcyB3aXRoIGRlZmF1bHRzIGhhdmUgdGhlaXIgZGVmYXVsdCB2
YWx1ZXMgKGR1aCkuCi0gIEVYUEVDVF9FUSggNDEgICAgLCByZWZsZWN0aW9uLT5HZXRJbnQzMiAo
bWVzc2FnZSwgRigiZGVmYXVsdF9pbnQzMiIgICApKSk7Ci0gIEVYUEVDVF9FUSggNDIgICAgLCBy
ZWZsZWN0aW9uLT5HZXRJbnQ2NCAobWVzc2FnZSwgRigiZGVmYXVsdF9pbnQ2NCIgICApKSk7Ci0g
IEVYUEVDVF9FUSggNDMgICAgLCByZWZsZWN0aW9uLT5HZXRVSW50MzIobWVzc2FnZSwgRigiZGVm
YXVsdF91aW50MzIiICApKSk7Ci0gIEVYUEVDVF9FUSggNDQgICAgLCByZWZsZWN0aW9uLT5HZXRV
SW50NjQobWVzc2FnZSwgRigiZGVmYXVsdF91aW50NjQiICApKSk7Ci0gIEVYUEVDVF9FUSgtNDUg
ICAgLCByZWZsZWN0aW9uLT5HZXRJbnQzMiAobWVzc2FnZSwgRigiZGVmYXVsdF9zaW50MzIiICAp
KSk7Ci0gIEVYUEVDVF9FUSggNDYgICAgLCByZWZsZWN0aW9uLT5HZXRJbnQ2NCAobWVzc2FnZSwg
RigiZGVmYXVsdF9zaW50NjQiICApKSk7Ci0gIEVYUEVDVF9FUSggNDcgICAgLCByZWZsZWN0aW9u
LT5HZXRVSW50MzIobWVzc2FnZSwgRigiZGVmYXVsdF9maXhlZDMyIiApKSk7Ci0gIEVYUEVDVF9F
USggNDggICAgLCByZWZsZWN0aW9uLT5HZXRVSW50NjQobWVzc2FnZSwgRigiZGVmYXVsdF9maXhl
ZDY0IiApKSk7Ci0gIEVYUEVDVF9FUSggNDkgICAgLCByZWZsZWN0aW9uLT5HZXRJbnQzMiAobWVz
c2FnZSwgRigiZGVmYXVsdF9zZml4ZWQzMiIpKSk7Ci0gIEVYUEVDVF9FUSgtNTAgICAgLCByZWZs
ZWN0aW9uLT5HZXRJbnQ2NCAobWVzc2FnZSwgRigiZGVmYXVsdF9zZml4ZWQ2NCIpKSk7Ci0gIEVY
UEVDVF9FUSggNTEuNSAgLCByZWZsZWN0aW9uLT5HZXRGbG9hdCAobWVzc2FnZSwgRigiZGVmYXVs
dF9mbG9hdCIgICApKSk7Ci0gIEVYUEVDVF9FUSggNTJlMyAgLCByZWZsZWN0aW9uLT5HZXREb3Vi
bGUobWVzc2FnZSwgRigiZGVmYXVsdF9kb3VibGUiICApKSk7Ci0gIEVYUEVDVF9UUlVFKCAgICAg
ICByZWZsZWN0aW9uLT5HZXRCb29sICAobWVzc2FnZSwgRigiZGVmYXVsdF9ib29sIiAgICApKSk7
Ci0gIEVYUEVDVF9FUSgiaGVsbG8iLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcobWVzc2FnZSwgRigi
ZGVmYXVsdF9zdHJpbmciICApKSk7Ci0gIEVYUEVDVF9FUSgid29ybGQiLCByZWZsZWN0aW9uLT5H
ZXRTdHJpbmcobWVzc2FnZSwgRigiZGVmYXVsdF9ieXRlcyIgICApKSk7Ci0KLSAgRVhQRUNUX0VR
KCJoZWxsbyIsIHJlZmxlY3Rpb24tPkdldFN0cmluZ1JlZmVyZW5jZShtZXNzYWdlLCBGKCJkZWZh
dWx0X3N0cmluZyIpLCAmc2NyYXRjaCkpOwotICBFWFBFQ1RfRVEoIndvcmxkIiwgcmVmbGVjdGlv
bi0+R2V0U3RyaW5nUmVmZXJlbmNlKG1lc3NhZ2UsIEYoImRlZmF1bHRfYnl0ZXMiICksICZzY3Jh
dGNoKSk7Ci0KLSAgRVhQRUNUX0VRKCBuZXN0ZWRfYmFyXywgcmVmbGVjdGlvbi0+R2V0RW51bSht
ZXNzYWdlLCBGKCJkZWZhdWx0X25lc3RlZF9lbnVtIiApKSk7Ci0gIEVYUEVDVF9FUShmb3JlaWdu
X2Jhcl8sIHJlZmxlY3Rpb24tPkdldEVudW0obWVzc2FnZSwgRigiZGVmYXVsdF9mb3JlaWduX2Vu
dW0iKSkpOwotICBFWFBFQ1RfRVEoIGltcG9ydF9iYXJfLCByZWZsZWN0aW9uLT5HZXRFbnVtKG1l
c3NhZ2UsIEYoImRlZmF1bHRfaW1wb3J0X2VudW0iICkpKTsKLQotICBFWFBFQ1RfRVEoImFiYyIs
IHJlZmxlY3Rpb24tPkdldFN0cmluZyhtZXNzYWdlLCBGKCJkZWZhdWx0X3N0cmluZ19waWVjZSIp
KSk7Ci0gIEVYUEVDVF9FUSgiYWJjIiwgcmVmbGVjdGlvbi0+R2V0U3RyaW5nUmVmZXJlbmNlKG1l
c3NhZ2UsIEYoImRlZmF1bHRfc3RyaW5nX3BpZWNlIiksICZzY3JhdGNoKSk7Ci0KLSAgRVhQRUNU
X0VRKCIxMjMiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmcobWVzc2FnZSwgRigiZGVmYXVsdF9jb3Jk
IikpKTsKLSAgRVhQRUNUX0VRKCIxMjMiLCByZWZsZWN0aW9uLT5HZXRTdHJpbmdSZWZlcmVuY2Uo
bWVzc2FnZSwgRigiZGVmYXVsdF9jb3JkIiksICZzY3JhdGNoKSk7Ci19Ci0KLXZvaWQgVGVzdFV0
aWw6OlJlZmxlY3Rpb25UZXN0ZXI6OkV4cGVjdFBhY2tlZENsZWFyVmlhUmVmbGVjdGlvbigKLSAg
ICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlKSB7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rp
b24gPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLQotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlv
bi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInBhY2tlZF9pbnQzMiIgICApKSk7Ci0gIEVYUEVDVF9F
USgwLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicGFja2VkX2ludDY0IiAgICkp
KTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJwYWNr
ZWRfdWludDMyIiAgKSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1l
c3NhZ2UsIEYoInBhY2tlZF91aW50NjQiICApKSk7Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0aW9u
LT5GaWVsZFNpemUobWVzc2FnZSwgRigicGFja2VkX3NpbnQzMiIgICkpKTsKLSAgRVhQRUNUX0VR
KDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJwYWNrZWRfc2ludDY0IiAgKSkp
OwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInBhY2tl
ZF9maXhlZDMyIiApKSk7Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVz
c2FnZSwgRigicGFja2VkX2ZpeGVkNjQiICkpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24t
PkZpZWxkU2l6ZShtZXNzYWdlLCBGKCJwYWNrZWRfc2ZpeGVkMzIiKSkpOwotICBFWFBFQ1RfRVEo
MCwgcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIEYoInBhY2tlZF9zZml4ZWQ2NCIpKSk7
Ci0gIEVYUEVDVF9FUSgwLCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicGFja2Vk
X2Zsb2F0IiAgICkpKTsKLSAgRVhQRUNUX0VRKDAsIHJlZmxlY3Rpb24tPkZpZWxkU2l6ZShtZXNz
YWdlLCBGKCJwYWNrZWRfZG91YmxlIiAgKSkpOwotICBFWFBFQ1RfRVEoMCwgcmVmbGVjdGlvbi0+
RmllbGRTaXplKG1lc3NhZ2UsIEYoInBhY2tlZF9ib29sIiAgICApKSk7Ci0gIEVYUEVDVF9FUSgw
LCByZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgRigicGFja2VkX2VudW0iICAgICkpKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyOjpN
b2RpZnlSZXBlYXRlZEZpZWxkc1ZpYVJlZmxlY3Rpb24oCi0gICAgTWVzc2FnZSogbWVzc2FnZSkg
ewotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlv
bigpOwotICBNZXNzYWdlKiBzdWJfbWVzc2FnZTsKLQotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRl
ZEludDMyIChtZXNzYWdlLCBGKCJyZXBlYXRlZF9pbnQzMiIgICApLCAxLCA1MDEpOwotICByZWZs
ZWN0aW9uLT5TZXRSZXBlYXRlZEludDY0IChtZXNzYWdlLCBGKCJyZXBlYXRlZF9pbnQ2NCIgICAp
LCAxLCA1MDIpOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZFVJbnQzMihtZXNzYWdlLCBGKCJy
ZXBlYXRlZF91aW50MzIiICApLCAxLCA1MDMpOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZFVJ
bnQ2NChtZXNzYWdlLCBGKCJyZXBlYXRlZF91aW50NjQiICApLCAxLCA1MDQpOwotICByZWZsZWN0
aW9uLT5TZXRSZXBlYXRlZEludDMyIChtZXNzYWdlLCBGKCJyZXBlYXRlZF9zaW50MzIiICApLCAx
LCA1MDUpOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZEludDY0IChtZXNzYWdlLCBGKCJyZXBl
YXRlZF9zaW50NjQiICApLCAxLCA1MDYpOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZFVJbnQz
MihtZXNzYWdlLCBGKCJyZXBlYXRlZF9maXhlZDMyIiApLCAxLCA1MDcpOwotICByZWZsZWN0aW9u
LT5TZXRSZXBlYXRlZFVJbnQ2NChtZXNzYWdlLCBGKCJyZXBlYXRlZF9maXhlZDY0IiApLCAxLCA1
MDgpOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZEludDMyIChtZXNzYWdlLCBGKCJyZXBlYXRl
ZF9zZml4ZWQzMiIpLCAxLCA1MDkpOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZEludDY0ICht
ZXNzYWdlLCBGKCJyZXBlYXRlZF9zZml4ZWQ2NCIpLCAxLCA1MTApOwotICByZWZsZWN0aW9uLT5T
ZXRSZXBlYXRlZEZsb2F0IChtZXNzYWdlLCBGKCJyZXBlYXRlZF9mbG9hdCIgICApLCAxLCA1MTEp
OwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZERvdWJsZShtZXNzYWdlLCBGKCJyZXBlYXRlZF9k
b3VibGUiICApLCAxLCA1MTIpOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZEJvb2wgIChtZXNz
YWdlLCBGKCJyZXBlYXRlZF9ib29sIiAgICApLCAxLCB0cnVlKTsKLSAgcmVmbGVjdGlvbi0+U2V0
UmVwZWF0ZWRTdHJpbmcobWVzc2FnZSwgRigicmVwZWF0ZWRfc3RyaW5nIiAgKSwgMSwgIjUxNSIp
OwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZFN0cmluZyhtZXNzYWdlLCBGKCJyZXBlYXRlZF9i
eXRlcyIgICApLCAxLCAiNTE2Iik7Ci0KLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5NdXRh
YmxlUmVwZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkZ3JvdXAiKSwgMSk7Ci0gIHN1
Yl9tZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCktPlNldEludDMyKHN1Yl9tZXNzYWdlLCByZXBlYXRl
ZF9ncm91cF9hXywgNTE3KTsKLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5NdXRhYmxlUmVw
ZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiksIDEpOwot
ICBzdWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgbmVz
dGVkX2JfLCA1MTgpOwotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPk11dGFibGVSZXBlYXRl
ZE1lc3NhZ2UobWVzc2FnZSwgRigicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlIiksIDEpOwotICBz
dWJfbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgZm9yZWln
bl9jXywgNTE5KTsKLSAgc3ViX21lc3NhZ2UgPSByZWZsZWN0aW9uLT5NdXRhYmxlUmVwZWF0ZWRN
ZXNzYWdlKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIiksIDEpOwotICBzdWJf
bWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgaW1wb3J0X2Rf
LCA1MjApOwotICBzdWJfbWVzc2FnZSA9IHJlZmxlY3Rpb24tPk11dGFibGVSZXBlYXRlZE1lc3Nh
Z2UobWVzc2FnZSwgRigicmVwZWF0ZWRfbGF6eV9tZXNzYWdlIiksIDEpOwotICBzdWJfbWVzc2Fn
ZS0+R2V0UmVmbGVjdGlvbigpLT5TZXRJbnQzMihzdWJfbWVzc2FnZSwgbmVzdGVkX2JfLCA1Mjcp
OwotCi0gIHJlZmxlY3Rpb24tPlNldFJlcGVhdGVkRW51bShtZXNzYWdlLCBGKCJyZXBlYXRlZF9u
ZXN0ZWRfZW51bSIgKSwgMSwgIG5lc3RlZF9mb29fKTsKLSAgcmVmbGVjdGlvbi0+U2V0UmVwZWF0
ZWRFbnVtKG1lc3NhZ2UsIEYoInJlcGVhdGVkX2ZvcmVpZ25fZW51bSIpLCAxLCBmb3JlaWduX2Zv
b18pOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZEVudW0obWVzc2FnZSwgRigicmVwZWF0ZWRf
aW1wb3J0X2VudW0iICksIDEsICBpbXBvcnRfZm9vXyk7Ci0KLSAgcmVmbGVjdGlvbi0+U2V0UmVw
ZWF0ZWRTdHJpbmcobWVzc2FnZSwgRigicmVwZWF0ZWRfc3RyaW5nX3BpZWNlIiksIDEsICI1MjQi
KTsKLSAgcmVmbGVjdGlvbi0+U2V0UmVwZWF0ZWRTdHJpbmcobWVzc2FnZSwgRigicmVwZWF0ZWRf
Y29yZCIpLCAxLCAiNTI1Iik7Ci19Ci0KLXZvaWQgVGVzdFV0aWw6OlJlZmxlY3Rpb25UZXN0ZXI6
Ok1vZGlmeVBhY2tlZEZpZWxkc1ZpYVJlZmxlY3Rpb24oCi0gICAgTWVzc2FnZSogbWVzc2FnZSkg
ewotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlv
bigpOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZEludDMyIChtZXNzYWdlLCBGKCJwYWNrZWRf
aW50MzIiICAgKSwgMSwgODAxKTsKLSAgcmVmbGVjdGlvbi0+U2V0UmVwZWF0ZWRJbnQ2NCAobWVz
c2FnZSwgRigicGFja2VkX2ludDY0IiAgICksIDEsIDgwMik7Ci0gIHJlZmxlY3Rpb24tPlNldFJl
cGVhdGVkVUludDMyKG1lc3NhZ2UsIEYoInBhY2tlZF91aW50MzIiICApLCAxLCA4MDMpOwotICBy
ZWZsZWN0aW9uLT5TZXRSZXBlYXRlZFVJbnQ2NChtZXNzYWdlLCBGKCJwYWNrZWRfdWludDY0IiAg
KSwgMSwgODA0KTsKLSAgcmVmbGVjdGlvbi0+U2V0UmVwZWF0ZWRJbnQzMiAobWVzc2FnZSwgRigi
cGFja2VkX3NpbnQzMiIgICksIDEsIDgwNSk7Ci0gIHJlZmxlY3Rpb24tPlNldFJlcGVhdGVkSW50
NjQgKG1lc3NhZ2UsIEYoInBhY2tlZF9zaW50NjQiICApLCAxLCA4MDYpOwotICByZWZsZWN0aW9u
LT5TZXRSZXBlYXRlZFVJbnQzMihtZXNzYWdlLCBGKCJwYWNrZWRfZml4ZWQzMiIgKSwgMSwgODA3
KTsKLSAgcmVmbGVjdGlvbi0+U2V0UmVwZWF0ZWRVSW50NjQobWVzc2FnZSwgRigicGFja2VkX2Zp
eGVkNjQiICksIDEsIDgwOCk7Ci0gIHJlZmxlY3Rpb24tPlNldFJlcGVhdGVkSW50MzIgKG1lc3Nh
Z2UsIEYoInBhY2tlZF9zZml4ZWQzMiIpLCAxLCA4MDkpOwotICByZWZsZWN0aW9uLT5TZXRSZXBl
YXRlZEludDY0IChtZXNzYWdlLCBGKCJwYWNrZWRfc2ZpeGVkNjQiKSwgMSwgODEwKTsKLSAgcmVm
bGVjdGlvbi0+U2V0UmVwZWF0ZWRGbG9hdCAobWVzc2FnZSwgRigicGFja2VkX2Zsb2F0IiAgICks
IDEsIDgxMSk7Ci0gIHJlZmxlY3Rpb24tPlNldFJlcGVhdGVkRG91YmxlKG1lc3NhZ2UsIEYoInBh
Y2tlZF9kb3VibGUiICApLCAxLCA4MTIpOwotICByZWZsZWN0aW9uLT5TZXRSZXBlYXRlZEJvb2wg
IChtZXNzYWdlLCBGKCJwYWNrZWRfYm9vbCIgICAgKSwgMSwgdHJ1ZSk7Ci0gIHJlZmxlY3Rpb24t
PlNldFJlcGVhdGVkRW51bSAgKG1lc3NhZ2UsIEYoInBhY2tlZF9lbnVtIiAgICApLCAxLCBmb3Jl
aWduX2Zvb18pOwotfQotCi12b2lkIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyOjpSZW1vdmVM
YXN0UmVwZWF0ZWRzVmlhUmVmbGVjdGlvbigKLSAgICBNZXNzYWdlKiBtZXNzYWdlKSB7Ci0gIGNv
bnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0K
LSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IG91dHB1dDsKLSAgcmVmbGVjdGlvbi0+
TGlzdEZpZWxkcygqbWVzc2FnZSwgJm91dHB1dCk7Ci0gIGZvciAoaW50IGk9MDsgaTxvdXRwdXQu
c2l6ZSgpOyArK2kpIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gb3V0cHV0
W2ldOwotICAgIGlmICghZmllbGQtPmlzX3JlcGVhdGVkKCkpIGNvbnRpbnVlOwotCi0gICAgcmVm
bGVjdGlvbi0+UmVtb3ZlTGFzdChtZXNzYWdlLCBmaWVsZCk7Ci0gIH0KLX0KLQotdm9pZCBUZXN0
VXRpbDo6UmVmbGVjdGlvblRlc3Rlcjo6UmVsZWFzZUxhc3RSZXBlYXRlZHNWaWFSZWZsZWN0aW9u
KAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UsIGJvb2wgZXhwZWN0X2V4dGVuc2lvbnNfbm90bnVsbCkg
ewotICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlv
bigpOwotCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBvdXRwdXQ7Ci0gIHJlZmxl
Y3Rpb24tPkxpc3RGaWVsZHMoKm1lc3NhZ2UsICZvdXRwdXQpOwotICBmb3IgKGludCBpPTA7IGk8
b3V0cHV0LnNpemUoKTsgKytpKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9
IG91dHB1dFtpXTsKLSAgICBpZiAoIWZpZWxkLT5pc19yZXBlYXRlZCgpKSBjb250aW51ZTsKLSAg
ICBpZiAoZmllbGQtPmNwcF90eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NB
R0UpIGNvbnRpbnVlOwotCi0gICAgTWVzc2FnZSogcmVsZWFzZWQgPSByZWZsZWN0aW9uLT5SZWxl
YXNlTGFzdChtZXNzYWdlLCBmaWVsZCk7Ci0gICAgaWYgKCFmaWVsZC0+aXNfZXh0ZW5zaW9uKCkg
fHwgZXhwZWN0X2V4dGVuc2lvbnNfbm90bnVsbCkgewotICAgICAgQVNTRVJUX1RSVUUocmVsZWFz
ZWQgIT0gTlVMTCkgPDwgIlJlbGVhc2VMYXN0IHJldHVybmVkIE5VTEwgZm9yOiAiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaWVsZC0+bmFtZSgpOwotICAgIH0KLSAg
ICBkZWxldGUgcmVsZWFzZWQ7Ci0gIH0KLX0KLQotdm9pZCBUZXN0VXRpbDo6UmVmbGVjdGlvblRl
c3Rlcjo6U3dhcFJlcGVhdGVkc1ZpYVJlZmxlY3Rpb24oTWVzc2FnZSogbWVzc2FnZSkgewotICBj
b25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwot
Ci0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBvdXRwdXQ7Ci0gIHJlZmxlY3Rpb24t
Pkxpc3RGaWVsZHMoKm1lc3NhZ2UsICZvdXRwdXQpOwotICBmb3IgKGludCBpPTA7IGk8b3V0cHV0
LnNpemUoKTsgKytpKSB7Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IG91dHB1
dFtpXTsKLSAgICBpZiAoIWZpZWxkLT5pc19yZXBlYXRlZCgpKSBjb250aW51ZTsKLQotICAgIHJl
ZmxlY3Rpb24tPlN3YXBFbGVtZW50cyhtZXNzYWdlLCBmaWVsZCwgMCwgMSk7Ci0gIH0KLX0KLQot
dm9pZCBUZXN0VXRpbDo6UmVmbGVjdGlvblRlc3Rlcjo6Ci1TZXRBbGxvY2F0ZWRPcHRpb25hbE1l
c3NhZ2VGaWVsZHNUb051bGxWaWFSZWZsZWN0aW9uKAotICAgIE1lc3NhZ2UqIG1lc3NhZ2UpIHsK
LSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJlZmxlY3Rpb24o
KTsKLQotICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmllbGRzOwotICByZWZsZWN0
aW9uLT5MaXN0RmllbGRzKCptZXNzYWdlLCAmZmllbGRzKTsKLQotICBmb3IgKGludCBpID0gMDsg
aSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmll
bGQgPSBmaWVsZHNbaV07Ci0gICAgaWYgKCFmaWVsZC0+aXNfb3B0aW9uYWwoKSB8fAotICAgICAg
ICBmaWVsZC0+Y3BwX3R5cGUoKSAhPSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkg
Y29udGludWU7Ci0KLSAgICByZWZsZWN0aW9uLT5TZXRBbGxvY2F0ZWRNZXNzYWdlKG1lc3NhZ2Us
IE5VTEwsIGZpZWxkKTsKLSAgfQotfQotCi12b2lkIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVy
OjoKLVNldEFsbG9jYXRlZE9wdGlvbmFsTWVzc2FnZUZpZWxkc1RvTWVzc2FnZVZpYVJlZmxlY3Rp
b24oCi0gICAgTWVzc2FnZSogZnJvbV9tZXNzYWdlLAotICAgIE1lc3NhZ2UqIHRvX21lc3NhZ2Up
IHsKLSAgRVhQRUNUX0VRKGZyb21fbWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpLCB0b19tZXNzYWdl
LT5HZXREZXNjcmlwdG9yKCkpOwotICBjb25zdCBSZWZsZWN0aW9uKiBmcm9tX3JlZmxlY3Rpb24g
PSBmcm9tX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogdG9f
cmVmbGVjdGlvbiA9IHRvX21lc3NhZ2UtPkdldFJlZmxlY3Rpb24oKTsKLQotICB2ZWN0b3I8Y29u
c3QgRmllbGREZXNjcmlwdG9yKj4gZmllbGRzOwotICBmcm9tX3JlZmxlY3Rpb24tPkxpc3RGaWVs
ZHMoKmZyb21fbWVzc2FnZSwgJmZpZWxkcyk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVs
ZHMuc2l6ZSgpOyArK2kpIHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZmll
bGRzW2ldOwotICAgIGlmICghZmllbGQtPmlzX29wdGlvbmFsKCkgfHwKLSAgICAgICAgZmllbGQt
PmNwcF90eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIGNvbnRpbnVl
OwotCi0gICAgTWVzc2FnZSogc3ViX21lc3NhZ2UgPQotICAgICAgICBmcm9tX3JlZmxlY3Rpb24t
PlJlbGVhc2VNZXNzYWdlKGZyb21fbWVzc2FnZSwgZmllbGQpOwotICAgIHRvX3JlZmxlY3Rpb24t
PlNldEFsbG9jYXRlZE1lc3NhZ2UodG9fbWVzc2FnZSwgc3ViX21lc3NhZ2UsIGZpZWxkKTsKLSAg
fQotfQotCi12b2lkIFRlc3RVdGlsOjpSZWZsZWN0aW9uVGVzdGVyOjpFeHBlY3RNZXNzYWdlc1Jl
bGVhc2VkVmlhUmVmbGVjdGlvbigKLSAgICBNZXNzYWdlKiBtZXNzYWdlLAotICAgIFRlc3RVdGls
OjpSZWZsZWN0aW9uVGVzdGVyOjpNZXNzYWdlUmVsZWFzZVN0YXRlIGV4cGVjdGVkX3JlbGVhc2Vf
c3RhdGUpIHsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdldFJl
ZmxlY3Rpb24oKTsKLQotICBzdGF0aWMgY29uc3QgY2hhciogZmllbGRzW10gPSB7Ci0gICAgIm9w
dGlvbmFsZ3JvdXAiLAotICAgICJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSIsCi0gICAgIm9wdGlv
bmFsX2ZvcmVpZ25fbWVzc2FnZSIsCi0gICAgIm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlIiwKLSAg
fTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBHT09HTEVfQVJSQVlTSVpFKGZpZWxkcyk7IGkrKykg
ewotICAgIGNvbnN0IE1lc3NhZ2UmIHN1Yl9tZXNzYWdlID0gcmVmbGVjdGlvbi0+R2V0TWVzc2Fn
ZSgqbWVzc2FnZSwgRihmaWVsZHNbaV0pKTsKLSAgICBNZXNzYWdlKiByZWxlYXNlZCA9IHJlZmxl
Y3Rpb24tPlJlbGVhc2VNZXNzYWdlKG1lc3NhZ2UsIEYoZmllbGRzW2ldKSk7Ci0gICAgc3dpdGNo
IChleHBlY3RlZF9yZWxlYXNlX3N0YXRlKSB7Ci0gICAgICBjYXNlIElTX05VTEw6Ci0gICAgICAg
IEVYUEVDVF9UUlVFKHJlbGVhc2VkID09IE5VTEwpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgTk9UX05VTEw6Ci0gICAgICAgIEVYUEVDVF9UUlVFKHJlbGVhc2VkICE9IE5VTEwpOwotICAg
ICAgICBFWFBFQ1RfRVEoJnN1Yl9tZXNzYWdlLCByZWxlYXNlZCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBDQU5fQkVfTlVMTDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlbGV0
ZSByZWxlYXNlZDsKLSAgICBFWFBFQ1RfRkFMU0UocmVmbGVjdGlvbi0+SGFzRmllbGQoKm1lc3Nh
Z2UsIEYoZmllbGRzW2ldKSkpOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1Zgot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rl
c3RfdXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RfdXRpbC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxYzEzYTFhN2Y2MWE3YTUzYTE5MmFiYWQwMzg2MTJhY2M1ZjUyNzIy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi90ZXN0X3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29v
Z2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1
ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhl
cnMuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1RFU1RfVVRJTF9IX18KLSNkZWZpbmUgR09P
R0xFX1BST1RPQlVGX1RFU1RfVVRJTF9IX18KLQotI2luY2x1ZGUgPHN0YWNrPgotI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wYi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5hbWVzcGFjZSB1bml0dGVzdCA9IDo6cHJvdG9idWZfdW5p
dHRlc3Q7Ci1uYW1lc3BhY2UgdW5pdHRlc3RfaW1wb3J0ID0gcHJvdG9idWZfdW5pdHRlc3RfaW1w
b3J0OwotCi1jbGFzcyBUZXN0VXRpbCB7Ci0gcHVibGljOgotICAvLyBTZXQgZXZlcnkgZmllbGQg
aW4gdGhlIG1lc3NhZ2UgdG8gYSB1bmlxdWUgdmFsdWUuCi0gIHN0YXRpYyB2b2lkIFNldEFsbEZp
ZWxkcyh1bml0dGVzdDo6VGVzdEFsbFR5cGVzKiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgU2V0
T3B0aW9uYWxGaWVsZHModW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyogbWVzc2FnZSk7Ci0gIHN0YXRp
YyB2b2lkIEFkZFJlcGVhdGVkRmllbGRzMSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzKiBtZXNzYWdl
KTsKLSAgc3RhdGljIHZvaWQgQWRkUmVwZWF0ZWRGaWVsZHMyKHVuaXR0ZXN0OjpUZXN0QWxsVHlw
ZXMqIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBTZXREZWZhdWx0RmllbGRzKHVuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXMqIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBTZXRPbmVvZkZpZWxkcyh1bml0
dGVzdDo6VGVzdEFsbFR5cGVzKiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgU2V0QWxsRXh0ZW5z
aW9ucyh1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMqIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9p
ZCBTZXRPbmVvZkZpZWxkcyh1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMqIG1lc3NhZ2UpOwot
ICBzdGF0aWMgdm9pZCBTZXRBbGxGaWVsZHNBbmRFeHRlbnNpb25zKHVuaXR0ZXN0OjpUZXN0Rmll
bGRPcmRlcmluZ3MqIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBTZXRQYWNrZWRGaWVsZHModW5p
dHRlc3Q6OlRlc3RQYWNrZWRUeXBlcyogbWVzc2FnZSk7Ci0gIHN0YXRpYyB2b2lkIFNldFBhY2tl
ZEV4dGVuc2lvbnModW5pdHRlc3Q6OlRlc3RQYWNrZWRFeHRlbnNpb25zKiBtZXNzYWdlKTsKLSAg
c3RhdGljIHZvaWQgU2V0VW5wYWNrZWRGaWVsZHModW5pdHRlc3Q6OlRlc3RVbnBhY2tlZFR5cGVz
KiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgU2V0T25lb2YxKHVuaXR0ZXN0OjpUZXN0T25lb2Yy
KiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgU2V0T25lb2YyKHVuaXR0ZXN0OjpUZXN0T25lb2Yy
KiBtZXNzYWdlKTsKLQotICAvLyBVc2UgdGhlIHJlcGVhdGVkIHZlcnNpb25zIG9mIHRoZSBzZXRf
KigpIGFjY2Vzc29ycyB0byBtb2RpZnkgYWxsIHRoZQotICAvLyByZXBlYXRlZCBmaWVsZHMgb2Yg
dGhlIG1lc3NhZ2UgKHdoaWNoIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbgotICAvLyBpbml0aWFs
aXplZCB3aXRoIFNldCpGaWVsZHMoKSkuICBTZXQqRmllbGRzKCkgaXRzZWxmIG9ubHkgdGVzdHMK
LSAgLy8gdGhlIGFkZF8qKCkgYWNjZXNzb3JzLgotICBzdGF0aWMgdm9pZCBNb2RpZnlSZXBlYXRl
ZEZpZWxkcyh1bml0dGVzdDo6VGVzdEFsbFR5cGVzKiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQg
TW9kaWZ5UmVwZWF0ZWRFeHRlbnNpb25zKHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyogbWVz
c2FnZSk7Ci0gIHN0YXRpYyB2b2lkIE1vZGlmeVBhY2tlZEZpZWxkcyh1bml0dGVzdDo6VGVzdFBh
Y2tlZFR5cGVzKiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgTW9kaWZ5UGFja2VkRXh0ZW5zaW9u
cyh1bml0dGVzdDo6VGVzdFBhY2tlZEV4dGVuc2lvbnMqIG1lc3NhZ2UpOwotCi0gIC8vIENoZWNr
IHRoYXQgYWxsIGZpZWxkcyBoYXZlIHRoZSB2YWx1ZXMgdGhhdCB0aGV5IHNob3VsZCBoYXZlIGFm
dGVyCi0gIC8vIFNldCpGaWVsZHMoKSBpcyBjYWxsZWQuCi0gIHN0YXRpYyB2b2lkIEV4cGVjdEFs
bEZpZWxkc1NldChjb25zdCB1bml0dGVzdDo6VGVzdEFsbFR5cGVzJiBtZXNzYWdlKTsKLSAgc3Rh
dGljIHZvaWQgRXhwZWN0QWxsRXh0ZW5zaW9uc1NldCgKLSAgICAgIGNvbnN0IHVuaXR0ZXN0OjpU
ZXN0QWxsRXh0ZW5zaW9ucyYgbWVzc2FnZSk7Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdFBhY2tlZEZp
ZWxkc1NldChjb25zdCB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzJiBtZXNzYWdlKTsKLSAgc3Rh
dGljIHZvaWQgRXhwZWN0UGFja2VkRXh0ZW5zaW9uc1NldCgKLSAgICAgIGNvbnN0IHVuaXR0ZXN0
OjpUZXN0UGFja2VkRXh0ZW5zaW9ucyYgbWVzc2FnZSk7Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdFVu
cGFja2VkRmllbGRzU2V0KAotICAgICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RVbnBhY2tlZFR5cGVz
JiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgRXhwZWN0VW5wYWNrZWRFeHRlbnNpb25zU2V0KAot
ICAgICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RVbnBhY2tlZEV4dGVuc2lvbnMmIG1lc3NhZ2UpOwot
ICBzdGF0aWMgdm9pZCBFeHBlY3RPbmVvZlNldDEoY29uc3QgdW5pdHRlc3Q6OlRlc3RPbmVvZjIm
IG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBFeHBlY3RPbmVvZlNldDIoY29uc3QgdW5pdHRlc3Q6
OlRlc3RPbmVvZjImIG1lc3NhZ2UpOwotCi0gIC8vIEV4cGVjdCB0aGF0IHRoZSBtZXNzYWdlIGlz
IG1vZGlmaWVkIGFzIHdvdWxkIGJlIGV4cGVjdGVkIGZyb20KLSAgLy8gTW9kaWZ5KkZpZWxkcygp
LgotICBzdGF0aWMgdm9pZCBFeHBlY3RSZXBlYXRlZEZpZWxkc01vZGlmaWVkKAotICAgICAgY29u
c3QgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyYgbWVzc2FnZSk7Ci0gIHN0YXRpYyB2b2lkIEV4cGVj
dFJlcGVhdGVkRXh0ZW5zaW9uc01vZGlmaWVkKAotICAgICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RB
bGxFeHRlbnNpb25zJiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgRXhwZWN0UGFja2VkRmllbGRz
TW9kaWZpZWQoCi0gICAgICBjb25zdCB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzJiBtZXNzYWdl
KTsKLSAgc3RhdGljIHZvaWQgRXhwZWN0UGFja2VkRXh0ZW5zaW9uc01vZGlmaWVkKAotICAgICAg
Y29uc3QgdW5pdHRlc3Q6OlRlc3RQYWNrZWRFeHRlbnNpb25zJiBtZXNzYWdlKTsKLQotICAvLyBD
aGVjayB0aGF0IGFsbCBmaWVsZHMgaGF2ZSB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgc3RhdGlj
IHZvaWQgRXhwZWN0Q2xlYXIoY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyYgbWVzc2FnZSk7
Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdEV4dGVuc2lvbnNDbGVhcihjb25zdCB1bml0dGVzdDo6VGVz
dEFsbEV4dGVuc2lvbnMmIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBFeHBlY3RQYWNrZWRDbGVh
cihjb25zdCB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzJiBtZXNzYWdlKTsKLSAgc3RhdGljIHZv
aWQgRXhwZWN0UGFja2VkRXh0ZW5zaW9uc0NsZWFyKAotICAgICAgY29uc3QgdW5pdHRlc3Q6OlRl
c3RQYWNrZWRFeHRlbnNpb25zJiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgRXhwZWN0T25lb2ZD
bGVhcihjb25zdCB1bml0dGVzdDo6VGVzdE9uZW9mMiYgbWVzc2FnZSk7Ci0KLSAgLy8gQ2hlY2sg
dGhhdCB0aGUgcGFzc2VkLWluIHNlcmlhbGl6YXRpb24gaXMgdGhlIGNhbm9uaWNhbCBzZXJpYWxp
emF0aW9uIHdlCi0gIC8vIGV4cGVjdCBmb3IgYSBUZXN0RmllbGRPcmRlcmluZ3MgbWVzc2FnZSBm
aWxsZWQgaW4gYnkKLSAgLy8gU2V0QWxsRmllbGRzQW5kRXh0ZW5zaW9ucygpLgotICBzdGF0aWMg
dm9pZCBFeHBlY3RBbGxGaWVsZHNBbmRFeHRlbnNpb25zSW5PcmRlcihjb25zdCBzdHJpbmcmIHNl
cmlhbGl6ZWQpOwotCi0gIC8vIENoZWNrIHRoYXQgYWxsIHJlcGVhdGVkIGZpZWxkcyBoYXZlIGhh
ZCB0aGVpciBsYXN0IGVsZW1lbnRzIHJlbW92ZWQuCi0gIHN0YXRpYyB2b2lkIEV4cGVjdExhc3RS
ZXBlYXRlZHNSZW1vdmVkKAotICAgICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyYgbWVz
c2FnZSk7Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdExhc3RSZXBlYXRlZEV4dGVuc2lvbnNSZW1vdmVk
KAotICAgICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zJiBtZXNzYWdlKTsKLSAg
c3RhdGljIHZvaWQgRXhwZWN0TGFzdFJlcGVhdGVkc1JlbGVhc2VkKAotICAgICAgY29uc3QgdW5p
dHRlc3Q6OlRlc3RBbGxUeXBlcyYgbWVzc2FnZSk7Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdExhc3RS
ZXBlYXRlZEV4dGVuc2lvbnNSZWxlYXNlZCgKLSAgICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0QWxs
RXh0ZW5zaW9ucyYgbWVzc2FnZSk7Ci0KLSAgLy8gQ2hlY2sgdGhhdCBhbGwgcmVwZWF0ZWQgZmll
bGRzIGhhdmUgaGFkIHRoZWlyIGZpcnN0IGFuZCBsYXN0IGVsZW1lbnRzCi0gIC8vIHN3YXBwZWQu
Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdFJlcGVhdGVkc1N3YXBwZWQoY29uc3QgdW5pdHRlc3Q6OlRl
c3RBbGxUeXBlcyYgbWVzc2FnZSk7Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdFJlcGVhdGVkRXh0ZW5z
aW9uc1N3YXBwZWQoCi0gICAgICBjb25zdCB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMmIG1l
c3NhZ2UpOwotCi0gIHN0YXRpYyB2b2lkIEV4cGVjdEF0TW9zdE9uZUZpZWxkU2V0SW5PbmVvZigK
LSAgICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0T25lb2YyICZtZXNzYWdlKTsKLQotICAvLyBMaWtl
IGFib3ZlLCBidXQgdXNlIHRoZSByZWZsZWN0aW9uIGludGVyZmFjZS4KLSAgY2xhc3MgUmVmbGVj
dGlvblRlc3RlciB7Ci0gICBwdWJsaWM6Ci0gICAgLy8gYmFzZV9kZXNjcmlwdG9yIG11c3QgYmUg
YSBkZXNjcmlwdG9yIGZvciBUZXN0QWxsVHlwZXMgb3IKLSAgICAvLyBUZXN0QWxsRXh0ZW5zaW9u
cy4gIEluIHRoZSBmb3JtZXIgY2FzZSwgUmVmbGVjdGlvblRlc3RlciBmZXRjaGVzIGZyb20KLSAg
ICAvLyBpdCB0aGUgRmllbGREZXNjcmlwdG9ycyBuZWVkZWQgdG8gdXNlIHRoZSByZWZsZWN0aW9u
IGludGVyZmFjZS4gIEluCi0gICAgLy8gdGhlIGxhdHRlciBjYXNlLCBSZWZsZWN0aW9uVGVzdGVy
IHNlYXJjaGVzIGZvciBleHRlbnNpb24gZmllbGRzIGluCi0gICAgLy8gaXRzIGZpbGUuCi0gICAg
ZXhwbGljaXQgUmVmbGVjdGlvblRlc3Rlcihjb25zdCBEZXNjcmlwdG9yKiBiYXNlX2Rlc2NyaXB0
b3IpOwotCi0gICAgdm9pZCBTZXRBbGxGaWVsZHNWaWFSZWZsZWN0aW9uKE1lc3NhZ2UqIG1lc3Nh
Z2UpOwotICAgIHZvaWQgTW9kaWZ5UmVwZWF0ZWRGaWVsZHNWaWFSZWZsZWN0aW9uKE1lc3NhZ2Uq
IG1lc3NhZ2UpOwotICAgIHZvaWQgRXhwZWN0QWxsRmllbGRzU2V0VmlhUmVmbGVjdGlvbihjb25z
dCBNZXNzYWdlJiBtZXNzYWdlKTsKLSAgICB2b2lkIEV4cGVjdENsZWFyVmlhUmVmbGVjdGlvbihj
b25zdCBNZXNzYWdlJiBtZXNzYWdlKTsKLQotICAgIHZvaWQgU2V0UGFja2VkRmllbGRzVmlhUmVm
bGVjdGlvbihNZXNzYWdlKiBtZXNzYWdlKTsKLSAgICB2b2lkIE1vZGlmeVBhY2tlZEZpZWxkc1Zp
YVJlZmxlY3Rpb24oTWVzc2FnZSogbWVzc2FnZSk7Ci0gICAgdm9pZCBFeHBlY3RQYWNrZWRGaWVs
ZHNTZXRWaWFSZWZsZWN0aW9uKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UpOwotICAgIHZvaWQgRXhw
ZWN0UGFja2VkQ2xlYXJWaWFSZWZsZWN0aW9uKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UpOwotCi0g
ICAgdm9pZCBSZW1vdmVMYXN0UmVwZWF0ZWRzVmlhUmVmbGVjdGlvbihNZXNzYWdlKiBtZXNzYWdl
KTsKLSAgICB2b2lkIFJlbGVhc2VMYXN0UmVwZWF0ZWRzVmlhUmVmbGVjdGlvbigKLSAgICAgICAg
TWVzc2FnZSogbWVzc2FnZSwgYm9vbCBleHBlY3RfZXh0ZW5zaW9uc19ub3RudWxsKTsKLSAgICB2
b2lkIFN3YXBSZXBlYXRlZHNWaWFSZWZsZWN0aW9uKE1lc3NhZ2UqIG1lc3NhZ2UpOwotICAgIHZv
aWQgU2V0QWxsb2NhdGVkT3B0aW9uYWxNZXNzYWdlRmllbGRzVG9OdWxsVmlhUmVmbGVjdGlvbigK
LSAgICAgICAgTWVzc2FnZSogbWVzc2FnZSk7Ci0gICAgc3RhdGljIHZvaWQgU2V0QWxsb2NhdGVk
T3B0aW9uYWxNZXNzYWdlRmllbGRzVG9NZXNzYWdlVmlhUmVmbGVjdGlvbigKLSAgICAgICAgTWVz
c2FnZSogZnJvbV9tZXNzYWdlLAotICAgICAgICBNZXNzYWdlKiB0b19tZXNzYWdlKTsKLQotICAg
IGVudW0gTWVzc2FnZVJlbGVhc2VTdGF0ZSB7Ci0gICAgICBJU19OVUxMLAotICAgICAgQ0FOX0JF
X05VTEwsCi0gICAgICBOT1RfTlVMTCwKLSAgICB9OwotICAgIHZvaWQgRXhwZWN0TWVzc2FnZXNS
ZWxlYXNlZFZpYVJlZmxlY3Rpb24oCi0gICAgICAgIE1lc3NhZ2UqIG1lc3NhZ2UsIE1lc3NhZ2VS
ZWxlYXNlU3RhdGUgZXhwZWN0ZWRfcmVsZWFzZV9zdGF0ZSk7Ci0KLSAgICAvLyBTZXQgYW5kIGNo
ZWNrIGZ1bmN0aW9ucyBmb3IgVGVzdE9uZW9mMiBtZXNzYWdlcy4gTm8gbmVlZCB0byBjb25zdHJ1
Y3QKLSAgICAvLyB0aGUgUmVmbGVjdGlvblRlc3RlciBieSBUZXN0QWxsVHlwZXMgbm9yIFRlc3RB
bGxFeHRlbnNpb25zLgotICAgIHN0YXRpYyB2b2lkIFNldE9uZW9mVmlhUmVmbGVjdGlvbihNZXNz
YWdlKiBtZXNzYWdlKTsKLSAgICBzdGF0aWMgdm9pZCBFeHBlY3RPbmVvZlNldFZpYVJlZmxlY3Rp
b24oY29uc3QgTWVzc2FnZSYgbWVzc2FnZSk7Ci0KLSAgIHByaXZhdGU6Ci0gICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBGKGNvbnN0IHN0cmluZyYgbmFtZSk7Ci0KLSAgICBjb25zdCBEZXNjcmlw
dG9yKiBiYXNlX2Rlc2NyaXB0b3JfOwotCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBncm91
cF9hXzsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHJlcGVhdGVkX2dyb3VwX2FfOwotICAg
IGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbmVzdGVkX2JfOwotICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZm9yZWlnbl9jXzsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGltcG9ydF9kXzsK
LSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGltcG9ydF9lXzsKLQotICAgIGNvbnN0IEVudW1W
YWx1ZURlc2NyaXB0b3IqIG5lc3RlZF9mb29fOwotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0
b3IqIG5lc3RlZF9iYXJfOwotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIG5lc3RlZF9i
YXpfOwotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGZvcmVpZ25fZm9vXzsKLSAgICBj
b25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBmb3JlaWduX2Jhcl87Ci0gICAgY29uc3QgRW51bVZh
bHVlRGVzY3JpcHRvciogZm9yZWlnbl9iYXpfOwotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0
b3IqIGltcG9ydF9mb29fOwotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGltcG9ydF9i
YXJfOwotICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIGltcG9ydF9iYXpfOwotCi0gICAg
Ly8gV2UgaGF2ZSB0byBzcGxpdCB0aGlzIGludG8gdGhyZWUgZnVuY3Rpb24gb3RoZXJ3aXNlIGl0
IGNyZWF0ZXMgYSBzdGFjawotICAgIC8vIGZyYW1lIHNvIGxhcmdlIHRoYXQgaXQgdHJpZ2dlcnMg
YSB3YXJuaW5nLgotICAgIHZvaWQgRXhwZWN0QWxsRmllbGRzU2V0VmlhUmVmbGVjdGlvbjEoY29u
c3QgTWVzc2FnZSYgbWVzc2FnZSk7Ci0gICAgdm9pZCBFeHBlY3RBbGxGaWVsZHNTZXRWaWFSZWZs
ZWN0aW9uMihjb25zdCBNZXNzYWdlJiBtZXNzYWdlKTsKLSAgICB2b2lkIEV4cGVjdEFsbEZpZWxk
c1NldFZpYVJlZmxlY3Rpb24zKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UpOwotCi0gICAgR09PR0xF
X0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlZmxlY3Rpb25UZXN0ZXIpOwotICB9OwotCi0g
cHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFRlc3RVdGlsKTsK
LX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xl
Ci0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9URVNUX1VUSUxfSF9fCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvdGVzdF91dGlsX2xpdGUuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
dGVzdF91dGlsX2xpdGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4OGMwY2Jk
ZTIwNTE3ZWExNDFlN2RhNjFhMjY4MDYyYTY4N2Q2YzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RfdXRpbF9saXRl
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTU4NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZh
cmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0v
LyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvdGVzdF91dGlsX2xpdGUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21t
b24uaD4KLQotCi0jZGVmaW5lIEVYUEVDVF9UUlVFIEdPT0dMRV9DSEVDSwotI2RlZmluZSBBU1NF
UlRfVFJVRSBHT09HTEVfQ0hFQ0sKLSNkZWZpbmUgRVhQRUNUX0ZBTFNFKENPTkQpIEdPT0dMRV9D
SEVDSyghKENPTkQpKQotI2RlZmluZSBFWFBFQ1RfRVEgR09PR0xFX0NIRUNLX0VRCi0jZGVmaW5l
IEFTU0VSVF9FUSBHT09HTEVfQ0hFQ0tfRVEKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3Bh
Y2UgcHJvdG9idWYgewotCi12b2lkIFRlc3RVdGlsTGl0ZTo6U2V0QWxsRmllbGRzKHVuaXR0ZXN0
OjpUZXN0QWxsVHlwZXNMaXRlKiBtZXNzYWdlKSB7Ci0gIG1lc3NhZ2UtPnNldF9vcHRpb25hbF9p
bnQzMiAgICgxMDEpOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfaW50NjQgICAoMTAyKTsKLSAg
bWVzc2FnZS0+c2V0X29wdGlvbmFsX3VpbnQzMiAgKDEwMyk7Ci0gIG1lc3NhZ2UtPnNldF9vcHRp
b25hbF91aW50NjQgICgxMDQpOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfc2ludDMyICAoMTA1
KTsKLSAgbWVzc2FnZS0+c2V0X29wdGlvbmFsX3NpbnQ2NCAgKDEwNik7Ci0gIG1lc3NhZ2UtPnNl
dF9vcHRpb25hbF9maXhlZDMyICgxMDcpOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxfZml4ZWQ2
NCAoMTA4KTsKLSAgbWVzc2FnZS0+c2V0X29wdGlvbmFsX3NmaXhlZDMyKDEwOSk7Ci0gIG1lc3Nh
Z2UtPnNldF9vcHRpb25hbF9zZml4ZWQ2NCgxMTApOwotICBtZXNzYWdlLT5zZXRfb3B0aW9uYWxf
ZmxvYXQgICAoMTExKTsKLSAgbWVzc2FnZS0+c2V0X29wdGlvbmFsX2RvdWJsZSAgKDExMik7Ci0g
IG1lc3NhZ2UtPnNldF9vcHRpb25hbF9ib29sICAgICh0cnVlKTsKLSAgbWVzc2FnZS0+c2V0X29w
dGlvbmFsX3N0cmluZyAgKCIxMTUiKTsKLSAgbWVzc2FnZS0+c2V0X29wdGlvbmFsX2J5dGVzICAg
KCIxMTYiKTsKLQotICBtZXNzYWdlLT5tdXRhYmxlX29wdGlvbmFsZ3JvdXAgICAgICAgICAgICAg
ICAgICgpLT5zZXRfYSgxMTcpOwotICBtZXNzYWdlLT5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9t
ZXNzYWdlICAgICAgICgpLT5zZXRfYmIoMTE4KTsKLSAgbWVzc2FnZS0+bXV0YWJsZV9vcHRpb25h
bF9mb3JlaWduX21lc3NhZ2UgICAgICAoKS0+c2V0X2MoMTE5KTsKLSAgbWVzc2FnZS0+bXV0YWJs
ZV9vcHRpb25hbF9pbXBvcnRfbWVzc2FnZSAgICAgICAoKS0+c2V0X2QoMTIwKTsKLSAgbWVzc2Fn
ZS0+bXV0YWJsZV9vcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2UoKS0+c2V0X2UoMTI2KTsK
LSAgbWVzc2FnZS0+bXV0YWJsZV9vcHRpb25hbF9sYXp5X21lc3NhZ2UgICAgICAgICAoKS0+c2V0
X2JiKDEyNyk7Ci0KLSAgbWVzc2FnZS0+c2V0X29wdGlvbmFsX25lc3RlZF9lbnVtICh1bml0dGVz
dDo6VGVzdEFsbFR5cGVzTGl0ZTo6QkFaICk7Ci0gIG1lc3NhZ2UtPnNldF9vcHRpb25hbF9mb3Jl
aWduX2VudW0odW5pdHRlc3Q6OkZPUkVJR05fTElURV9CQVogICAgICApOwotICBtZXNzYWdlLT5z
ZXRfb3B0aW9uYWxfaW1wb3J0X2VudW0gKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0xJVEVfQkFa
KTsKLQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2ludDMyICAg
KDIwMSk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9pbnQ2NCAgICgyMDIpOwotICBtZXNzYWdl
LT5hZGRfcmVwZWF0ZWRfdWludDMyICAoMjAzKTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX3Vp
bnQ2NCAgKDIwNCk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9zaW50MzIgICgyMDUpOwotICBt
ZXNzYWdlLT5hZGRfcmVwZWF0ZWRfc2ludDY0ICAoMjA2KTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVh
dGVkX2ZpeGVkMzIgKDIwNyk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9maXhlZDY0ICgyMDgp
OwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfc2ZpeGVkMzIoMjA5KTsKLSAgbWVzc2FnZS0+YWRk
X3JlcGVhdGVkX3NmaXhlZDY0KDIxMCk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9mbG9hdCAg
ICgyMTEpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfZG91YmxlICAoMjEyKTsKLSAgbWVzc2Fn
ZS0+YWRkX3JlcGVhdGVkX2Jvb2wgICAgKHRydWUpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRf
c3RyaW5nICAoIjIxNSIpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfYnl0ZXMgICAoIjIxNiIp
OwotCi0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZGdyb3VwICAgICAgICAgICAoKS0+c2V0X2EoMjE3
KTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlICgpLT5zZXRfYmIoMjE4
KTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgpLT5zZXRfYygyMTkp
OwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2UgKCktPnNldF9kKDIyMCk7
Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9sYXp5X21lc3NhZ2UgICAoKS0+c2V0X2JiKDIyNyk7
Ci0KLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX25lc3RlZF9lbnVtICh1bml0dGVzdDo6VGVzdEFs
bFR5cGVzTGl0ZTo6QkFSICk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9mb3JlaWduX2VudW0o
dW5pdHRlc3Q6OkZPUkVJR05fTElURV9CQVIgICAgICApOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0
ZWRfaW1wb3J0X2VudW0gKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0xJVEVfQkFSKTsKLQotCi0g
IC8vIEFkZCBhIHNlY29uZCBvbmUgb2YgZWFjaCBmaWVsZC4KLSAgbWVzc2FnZS0+YWRkX3JlcGVh
dGVkX2ludDMyICAgKDMwMSk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9pbnQ2NCAgICgzMDIp
OwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfdWludDMyICAoMzAzKTsKLSAgbWVzc2FnZS0+YWRk
X3JlcGVhdGVkX3VpbnQ2NCAgKDMwNCk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9zaW50MzIg
ICgzMDUpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfc2ludDY0ICAoMzA2KTsKLSAgbWVzc2Fn
ZS0+YWRkX3JlcGVhdGVkX2ZpeGVkMzIgKDMwNyk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9m
aXhlZDY0ICgzMDgpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfc2ZpeGVkMzIoMzA5KTsKLSAg
bWVzc2FnZS0+YWRkX3JlcGVhdGVkX3NmaXhlZDY0KDMxMCk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBl
YXRlZF9mbG9hdCAgICgzMTEpOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfZG91YmxlICAoMzEy
KTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2Jvb2wgICAgKGZhbHNlKTsKLSAgbWVzc2FnZS0+
YWRkX3JlcGVhdGVkX3N0cmluZyAgKCIzMTUiKTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2J5
dGVzICAgKCIzMTYiKTsKLQotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRncm91cCAgICAgICAgICAg
KCktPnNldF9hKDMxNyk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSAo
KS0+c2V0X2JiKDMxOCk7Ci0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2Uo
KS0+c2V0X2MoMzE5KTsKLSAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2ltcG9ydF9tZXNzYWdlICgp
LT5zZXRfZCgzMjApOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfbGF6eV9tZXNzYWdlICAgKCkt
PnNldF9iYigzMjcpOwotCi0gIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9uZXN0ZWRfZW51bSAodW5p
dHRlc3Q6OlRlc3RBbGxUeXBlc0xpdGU6OkJBWiApOwotICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRf
Zm9yZWlnbl9lbnVtKHVuaXR0ZXN0OjpGT1JFSUdOX0xJVEVfQkFaICAgICAgKTsKLSAgbWVzc2Fn
ZS0+YWRkX3JlcGVhdGVkX2ltcG9ydF9lbnVtICh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9MSVRF
X0JBWik7Ci0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0X2ludDMy
ICAgKDQwMSk7Ci0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0X2ludDY0ICAgKDQwMik7Ci0gIG1lc3Nh
Z2UtPnNldF9kZWZhdWx0X3VpbnQzMiAgKDQwMyk7Ci0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0X3Vp
bnQ2NCAgKDQwNCk7Ci0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0X3NpbnQzMiAgKDQwNSk7Ci0gIG1l
c3NhZ2UtPnNldF9kZWZhdWx0X3NpbnQ2NCAgKDQwNik7Ci0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0
X2ZpeGVkMzIgKDQwNyk7Ci0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0X2ZpeGVkNjQgKDQwOCk7Ci0g
IG1lc3NhZ2UtPnNldF9kZWZhdWx0X3NmaXhlZDMyKDQwOSk7Ci0gIG1lc3NhZ2UtPnNldF9kZWZh
dWx0X3NmaXhlZDY0KDQxMCk7Ci0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0X2Zsb2F0ICAgKDQxMSk7
Ci0gIG1lc3NhZ2UtPnNldF9kZWZhdWx0X2RvdWJsZSAgKDQxMik7Ci0gIG1lc3NhZ2UtPnNldF9k
ZWZhdWx0X2Jvb2wgICAgKGZhbHNlKTsKLSAgbWVzc2FnZS0+c2V0X2RlZmF1bHRfc3RyaW5nICAo
IjQxNSIpOwotICBtZXNzYWdlLT5zZXRfZGVmYXVsdF9ieXRlcyAgICgiNDE2Iik7Ci0KLSAgbWVz
c2FnZS0+c2V0X2RlZmF1bHRfbmVzdGVkX2VudW0gKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNMaXRl
OjpGT08gKTsKLSAgbWVzc2FnZS0+c2V0X2RlZmF1bHRfZm9yZWlnbl9lbnVtKHVuaXR0ZXN0OjpG
T1JFSUdOX0xJVEVfRk9PICAgICAgKTsKLSAgbWVzc2FnZS0+c2V0X2RlZmF1bHRfaW1wb3J0X2Vu
dW0gKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0xJVEVfRk9PKTsKLQotCi0gIG1lc3NhZ2UtPnNl
dF9vbmVvZl91aW50MzIoNjAxKTsKLSAgbWVzc2FnZS0+bXV0YWJsZV9vbmVvZl9uZXN0ZWRfbWVz
c2FnZSgpLT5zZXRfYmIoNjAyKTsKLSAgbWVzc2FnZS0+c2V0X29uZW9mX3N0cmluZygiNjAzIik7
Ci0gIG1lc3NhZ2UtPnNldF9vbmVvZl9ieXRlcygiNjA0Iik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotdm9pZCBUZXN0VXRpbExpdGU6Ok1vZGlmeVJlcGVhdGVkRmllbGRzKHVuaXR0ZXN0OjpUZXN0
QWxsVHlwZXNMaXRlKiBtZXNzYWdlKSB7Ci0gIG1lc3NhZ2UtPnNldF9yZXBlYXRlZF9pbnQzMiAg
ICgxLCA1MDEpOwotICBtZXNzYWdlLT5zZXRfcmVwZWF0ZWRfaW50NjQgICAoMSwgNTAyKTsKLSAg
bWVzc2FnZS0+c2V0X3JlcGVhdGVkX3VpbnQzMiAgKDEsIDUwMyk7Ci0gIG1lc3NhZ2UtPnNldF9y
ZXBlYXRlZF91aW50NjQgICgxLCA1MDQpOwotICBtZXNzYWdlLT5zZXRfcmVwZWF0ZWRfc2ludDMy
ICAoMSwgNTA1KTsKLSAgbWVzc2FnZS0+c2V0X3JlcGVhdGVkX3NpbnQ2NCAgKDEsIDUwNik7Ci0g
IG1lc3NhZ2UtPnNldF9yZXBlYXRlZF9maXhlZDMyICgxLCA1MDcpOwotICBtZXNzYWdlLT5zZXRf
cmVwZWF0ZWRfZml4ZWQ2NCAoMSwgNTA4KTsKLSAgbWVzc2FnZS0+c2V0X3JlcGVhdGVkX3NmaXhl
ZDMyKDEsIDUwOSk7Ci0gIG1lc3NhZ2UtPnNldF9yZXBlYXRlZF9zZml4ZWQ2NCgxLCA1MTApOwot
ICBtZXNzYWdlLT5zZXRfcmVwZWF0ZWRfZmxvYXQgICAoMSwgNTExKTsKLSAgbWVzc2FnZS0+c2V0
X3JlcGVhdGVkX2RvdWJsZSAgKDEsIDUxMik7Ci0gIG1lc3NhZ2UtPnNldF9yZXBlYXRlZF9ib29s
ICAgICgxLCB0cnVlKTsKLSAgbWVzc2FnZS0+c2V0X3JlcGVhdGVkX3N0cmluZyAgKDEsICI1MTUi
KTsKLSAgbWVzc2FnZS0+c2V0X3JlcGVhdGVkX2J5dGVzICAgKDEsICI1MTYiKTsKLQotICBtZXNz
YWdlLT5tdXRhYmxlX3JlcGVhdGVkZ3JvdXAgICAgICAgICAgICgxKS0+c2V0X2EoNTE3KTsKLSAg
bWVzc2FnZS0+bXV0YWJsZV9yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSAoMSktPnNldF9iYig1MTgp
OwotICBtZXNzYWdlLT5tdXRhYmxlX3JlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgxKS0+c2V0X2Mo
NTE5KTsKLSAgbWVzc2FnZS0+bXV0YWJsZV9yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSAoMSktPnNl
dF9kKDUyMCk7Ci0gIG1lc3NhZ2UtPm11dGFibGVfcmVwZWF0ZWRfbGF6eV9tZXNzYWdlICAgKDEp
LT5zZXRfYmIoNTI3KTsKLQotICBtZXNzYWdlLT5zZXRfcmVwZWF0ZWRfbmVzdGVkX2VudW0gKDEs
IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNMaXRlOjpGT08gKTsKLSAgbWVzc2FnZS0+c2V0X3JlcGVh
dGVkX2ZvcmVpZ25fZW51bSgxLCB1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0ZPTyAgICAgICk7Ci0g
IG1lc3NhZ2UtPnNldF9yZXBlYXRlZF9pbXBvcnRfZW51bSAoMSwgdW5pdHRlc3RfaW1wb3J0OjpJ
TVBPUlRfTElURV9GT08pOwotCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbExp
dGU6OkV4cGVjdEFsbEZpZWxkc1NldCgKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdEFsbFR5cGVz
TGl0ZSYgbWVzc2FnZSkgewotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF9pbnQz
MiAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0aW9uYWxfaW50NjQgICAoKSk7
Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX3VpbnQzMiAgKCkpOwotICBFWFBF
Q1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF91aW50NjQgICgpKTsKLSAgRVhQRUNUX1RSVUUo
bWVzc2FnZS5oYXNfb3B0aW9uYWxfc2ludDMyICAoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uu
aGFzX29wdGlvbmFsX3NpbnQ2NCAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRp
b25hbF9maXhlZDMyICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0aW9uYWxfZml4
ZWQ2NCAoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX3NmaXhlZDMyKCkp
OwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25hbF9zZml4ZWQ2NCgpKTsKLSAgRVhQ
RUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0aW9uYWxfZmxvYXQgICAoKSk7Ci0gIEVYUEVDVF9UUlVF
KG1lc3NhZ2UuaGFzX29wdGlvbmFsX2RvdWJsZSAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lmhhc19vcHRpb25hbF9ib29sICAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0
aW9uYWxfc3RyaW5nICAoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX2J5
dGVzICAgKCkpOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsZ3JvdXAgICAg
ICAgICAgICAgICAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfb3B0aW9uYWxfbmVz
dGVkX21lc3NhZ2UgICAgICAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vcHRpb25h
bF9mb3JlaWduX21lc3NhZ2UgICAgICAoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX29w
dGlvbmFsX2ltcG9ydF9tZXNzYWdlICAgICAgICgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5o
YXNfb3B0aW9uYWxfcHVibGljX2ltcG9ydF9tZXNzYWdlKCkpOwotICBFWFBFQ1RfVFJVRShtZXNz
YWdlLmhhc19vcHRpb25hbF9sYXp5X21lc3NhZ2UgICAgICAgICAoKSk7Ci0KLSAgRVhQRUNUX1RS
VUUobWVzc2FnZS5vcHRpb25hbGdyb3VwICAgICAgICAgICAgICAgICAoKS5oYXNfYSgpKTsKLSAg
RVhQRUNUX1RSVUUobWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSAgICAgICAoKS5oYXNf
YmIoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uub3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlICAg
ICAgKCkuaGFzX2MoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uub3B0aW9uYWxfaW1wb3J0X21l
c3NhZ2UgICAgICAgKCkuaGFzX2QoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uub3B0aW9uYWxf
cHVibGljX2ltcG9ydF9tZXNzYWdlKCkuaGFzX2UoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uu
b3B0aW9uYWxfbGF6eV9tZXNzYWdlICAgICAgICAgKCkuaGFzX2JiKCkpOwotCi0gIEVYUEVDVF9U
UlVFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX25lc3RlZF9lbnVtICgpKTsKLSAgRVhQRUNUX1RSVUUo
bWVzc2FnZS5oYXNfb3B0aW9uYWxfZm9yZWlnbl9lbnVtKCkpOwotICBFWFBFQ1RfVFJVRShtZXNz
YWdlLmhhc19vcHRpb25hbF9pbXBvcnRfZW51bSAoKSk7Ci0KLQotICBFWFBFQ1RfRVEoMTAxICAs
IG1lc3NhZ2Uub3B0aW9uYWxfaW50MzIgICAoKSk7Ci0gIEVYUEVDVF9FUSgxMDIgICwgbWVzc2Fn
ZS5vcHRpb25hbF9pbnQ2NCAgICgpKTsKLSAgRVhQRUNUX0VRKDEwMyAgLCBtZXNzYWdlLm9wdGlv
bmFsX3VpbnQzMiAgKCkpOwotICBFWFBFQ1RfRVEoMTA0ICAsIG1lc3NhZ2Uub3B0aW9uYWxfdWlu
dDY0ICAoKSk7Ci0gIEVYUEVDVF9FUSgxMDUgICwgbWVzc2FnZS5vcHRpb25hbF9zaW50MzIgICgp
KTsKLSAgRVhQRUNUX0VRKDEwNiAgLCBtZXNzYWdlLm9wdGlvbmFsX3NpbnQ2NCAgKCkpOwotICBF
WFBFQ1RfRVEoMTA3ICAsIG1lc3NhZ2Uub3B0aW9uYWxfZml4ZWQzMiAoKSk7Ci0gIEVYUEVDVF9F
USgxMDggICwgbWVzc2FnZS5vcHRpb25hbF9maXhlZDY0ICgpKTsKLSAgRVhQRUNUX0VRKDEwOSAg
LCBtZXNzYWdlLm9wdGlvbmFsX3NmaXhlZDMyKCkpOwotICBFWFBFQ1RfRVEoMTEwICAsIG1lc3Nh
Z2Uub3B0aW9uYWxfc2ZpeGVkNjQoKSk7Ci0gIEVYUEVDVF9FUSgxMTEgICwgbWVzc2FnZS5vcHRp
b25hbF9mbG9hdCAgICgpKTsKLSAgRVhQRUNUX0VRKDExMiAgLCBtZXNzYWdlLm9wdGlvbmFsX2Rv
dWJsZSAgKCkpOwotICBFWFBFQ1RfRVEodHJ1ZSAsIG1lc3NhZ2Uub3B0aW9uYWxfYm9vbCAgICAo
KSk7Ci0gIEVYUEVDVF9FUSgiMTE1IiwgbWVzc2FnZS5vcHRpb25hbF9zdHJpbmcgICgpKTsKLSAg
RVhQRUNUX0VRKCIxMTYiLCBtZXNzYWdlLm9wdGlvbmFsX2J5dGVzICAgKCkpOwotCi0gIEVYUEVD
VF9FUSgxMTcsIG1lc3NhZ2Uub3B0aW9uYWxncm91cCAgICAgICAgICAgICAgICAgKCkuYSgpKTsK
LSAgRVhQRUNUX0VRKDExOCwgbWVzc2FnZS5vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSAgICAgICAo
KS5iYigpKTsKLSAgRVhQRUNUX0VRKDExOSwgbWVzc2FnZS5vcHRpb25hbF9mb3JlaWduX21lc3Nh
Z2UgICAgICAoKS5jKCkpOwotICBFWFBFQ1RfRVEoMTIwLCBtZXNzYWdlLm9wdGlvbmFsX2ltcG9y
dF9tZXNzYWdlICAgICAgICgpLmQoKSk7Ci0gIEVYUEVDVF9FUSgxMjYsIG1lc3NhZ2Uub3B0aW9u
YWxfcHVibGljX2ltcG9ydF9tZXNzYWdlKCkuZSgpKTsKLSAgRVhQRUNUX0VRKDEyNywgbWVzc2Fn
ZS5vcHRpb25hbF9sYXp5X21lc3NhZ2UgICAgICAgICAoKS5iYigpKTsKLQotICBFWFBFQ1RfRVEo
dW5pdHRlc3Q6OlRlc3RBbGxUeXBlc0xpdGU6OkJBWiAsIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVk
X2VudW0gKCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fTElURV9CQVogICAgICAs
IG1lc3NhZ2Uub3B0aW9uYWxfZm9yZWlnbl9lbnVtKCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Rf
aW1wb3J0OjpJTVBPUlRfTElURV9CQVosIG1lc3NhZ2Uub3B0aW9uYWxfaW1wb3J0X2VudW0gKCkp
OwotCi0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9p
bnQzMl9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2NF9z
aXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF91aW50MzJfc2l6ZSAg
KCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF91aW50NjRfc2l6ZSAgKCkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zaW50MzJfc2l6ZSAgKCkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zaW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEo
MiwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDMyX3NpemUgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5yZXBlYXRlZF9maXhlZDY0X3NpemUgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5y
ZXBlYXRlZF9zZml4ZWQzMl9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRl
ZF9zZml4ZWQ2NF9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9mbG9h
dF9zaXplICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9kb3VibGVfc2l6
ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9ib29sX3NpemUgICAgKCkp
OwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdfc2l6ZSAgKCkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9ieXRlc19zaXplICAgKCkpOwotCi0gIEFTU0VS
VF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkZ3JvdXBfc2l6ZSAgICAgICAgICAgKCkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9zaXplICgpKTsKLSAgQVNT
RVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX3NpemUoKSk7Ci0gIEFT
U0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX3NpemUgKCkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9sYXp5X21lc3NhZ2Vfc2l6ZSAgICgpKTsKLSAg
QVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW1fc2l6ZSAgICAoKSk7Ci0g
IEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9zaXplICAgKCkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfZW51bV9zaXplICAgICgpKTsK
LQotCi0gIEVYUEVDVF9FUSgyMDEgICwgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMiAgICgwKSk7Ci0g
IEVYUEVDVF9FUSgyMDIgICwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2NCAgICgwKSk7Ci0gIEVYUEVD
VF9FUSgyMDMgICwgbWVzc2FnZS5yZXBlYXRlZF91aW50MzIgICgwKSk7Ci0gIEVYUEVDVF9FUSgy
MDQgICwgbWVzc2FnZS5yZXBlYXRlZF91aW50NjQgICgwKSk7Ci0gIEVYUEVDVF9FUSgyMDUgICwg
bWVzc2FnZS5yZXBlYXRlZF9zaW50MzIgICgwKSk7Ci0gIEVYUEVDVF9FUSgyMDYgICwgbWVzc2Fn
ZS5yZXBlYXRlZF9zaW50NjQgICgwKSk7Ci0gIEVYUEVDVF9FUSgyMDcgICwgbWVzc2FnZS5yZXBl
YXRlZF9maXhlZDMyICgwKSk7Ci0gIEVYUEVDVF9FUSgyMDggICwgbWVzc2FnZS5yZXBlYXRlZF9m
aXhlZDY0ICgwKSk7Ci0gIEVYUEVDVF9FUSgyMDkgICwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQz
MigwKSk7Ci0gIEVYUEVDVF9FUSgyMTAgICwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQ2NCgwKSk7
Ci0gIEVYUEVDVF9FUSgyMTEgICwgbWVzc2FnZS5yZXBlYXRlZF9mbG9hdCAgICgwKSk7Ci0gIEVY
UEVDVF9FUSgyMTIgICwgbWVzc2FnZS5yZXBlYXRlZF9kb3VibGUgICgwKSk7Ci0gIEVYUEVDVF9F
USh0cnVlICwgbWVzc2FnZS5yZXBlYXRlZF9ib29sICAgICgwKSk7Ci0gIEVYUEVDVF9FUSgiMjE1
IiwgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmcgICgwKSk7Ci0gIEVYUEVDVF9FUSgiMjE2IiwgbWVz
c2FnZS5yZXBlYXRlZF9ieXRlcyAgICgwKSk7Ci0KLSAgRVhQRUNUX0VRKDIxNywgbWVzc2FnZS5y
ZXBlYXRlZGdyb3VwICAgICAgICAgICAoMCkuYSgpKTsKLSAgRVhQRUNUX0VRKDIxOCwgbWVzc2Fn
ZS5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSAoMCkuYmIoKSk7Ci0gIEVYUEVDVF9FUSgyMTksIG1l
c3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlKDApLmMoKSk7Ci0gIEVYUEVDVF9FUSgyMjAs
IG1lc3NhZ2UucmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2UgKDApLmQoKSk7Ci0gIEVYUEVDVF9FUSgy
MjcsIG1lc3NhZ2UucmVwZWF0ZWRfbGF6eV9tZXNzYWdlICAgKDApLmJiKCkpOwotCi0KLSAgRVhQ
RUNUX0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNMaXRlOjpCQVIgLCBtZXNzYWdlLnJlcGVhdGVk
X25lc3RlZF9lbnVtICgwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0JB
UiAgICAgICwgbWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX2VudW0oMCkpOwotICBFWFBFQ1RfRVEo
dW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfTElURV9CQVIsIG1lc3NhZ2UucmVwZWF0ZWRfaW1wb3J0
X2VudW0gKDApKTsKLQotICBFWFBFQ1RfRVEoMzAxICAsIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzIg
ICAoMSkpOwotICBFWFBFQ1RfRVEoMzAyICAsIG1lc3NhZ2UucmVwZWF0ZWRfaW50NjQgICAoMSkp
OwotICBFWFBFQ1RfRVEoMzAzICAsIG1lc3NhZ2UucmVwZWF0ZWRfdWludDMyICAoMSkpOwotICBF
WFBFQ1RfRVEoMzA0ICAsIG1lc3NhZ2UucmVwZWF0ZWRfdWludDY0ICAoMSkpOwotICBFWFBFQ1Rf
RVEoMzA1ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDMyICAoMSkpOwotICBFWFBFQ1RfRVEoMzA2
ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDY0ICAoMSkpOwotICBFWFBFQ1RfRVEoMzA3ICAsIG1l
c3NhZ2UucmVwZWF0ZWRfZml4ZWQzMiAoMSkpOwotICBFWFBFQ1RfRVEoMzA4ICAsIG1lc3NhZ2Uu
cmVwZWF0ZWRfZml4ZWQ2NCAoMSkpOwotICBFWFBFQ1RfRVEoMzA5ICAsIG1lc3NhZ2UucmVwZWF0
ZWRfc2ZpeGVkMzIoMSkpOwotICBFWFBFQ1RfRVEoMzEwICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2Zp
eGVkNjQoMSkpOwotICBFWFBFQ1RfRVEoMzExICAsIG1lc3NhZ2UucmVwZWF0ZWRfZmxvYXQgICAo
MSkpOwotICBFWFBFQ1RfRVEoMzEyICAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlICAoMSkpOwot
ICBFWFBFQ1RfRVEoZmFsc2UsIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbCAgICAoMSkpOwotICBFWFBF
Q1RfRVEoIjMxNSIsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nICAoMSkpOwotICBFWFBFQ1RfRVEo
IjMxNiIsIG1lc3NhZ2UucmVwZWF0ZWRfYnl0ZXMgICAoMSkpOwotCi0gIEVYUEVDVF9FUSgzMTcs
IG1lc3NhZ2UucmVwZWF0ZWRncm91cCAgICAgICAgICAgKDEpLmEoKSk7Ci0gIEVYUEVDVF9FUSgz
MTgsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgKDEpLmJiKCkpOwotICBFWFBFQ1Rf
RVEoMzE5LCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgxKS5jKCkpOwotICBFWFBF
Q1RfRVEoMzIwLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlICgxKS5kKCkpOwotICBF
WFBFQ1RfRVEoMzI3LCBtZXNzYWdlLnJlcGVhdGVkX2xhenlfbWVzc2FnZSAgICgxKS5iYigpKTsK
LQotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlc0xpdGU6OkJBWiAsIG1lc3NhZ2Uu
cmVwZWF0ZWRfbmVzdGVkX2VudW0gKDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdO
X0xJVEVfQkFaICAgICAgLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fZW51bSgxKSk7Ci0gIEVY
UEVDVF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9MSVRFX0JBWiwgbWVzc2FnZS5yZXBlYXRl
ZF9pbXBvcnRfZW51bSAoMSkpOwotCi0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBFWFBFQ1RfVFJVRSht
ZXNzYWdlLmhhc19kZWZhdWx0X2ludDMyICAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhh
c19kZWZhdWx0X2ludDY0ICAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19kZWZhdWx0
X3VpbnQzMiAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19kZWZhdWx0X3VpbnQ2NCAg
KCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19kZWZhdWx0X3NpbnQzMiAgKCkpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlLmhhc19kZWZhdWx0X3NpbnQ2NCAgKCkpOwotICBFWFBFQ1RfVFJV
RShtZXNzYWdlLmhhc19kZWZhdWx0X2ZpeGVkMzIgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lmhhc19kZWZhdWx0X2ZpeGVkNjQgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19kZWZh
dWx0X3NmaXhlZDMyKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19kZWZhdWx0X3NmaXhl
ZDY0KCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19kZWZhdWx0X2Zsb2F0ICAgKCkpOwot
ICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19kZWZhdWx0X2RvdWJsZSAgKCkpOwotICBFWFBFQ1Rf
VFJVRShtZXNzYWdlLmhhc19kZWZhdWx0X2Jvb2wgICAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNz
YWdlLmhhc19kZWZhdWx0X3N0cmluZyAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19k
ZWZhdWx0X2J5dGVzICAgKCkpOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuaGFzX2RlZmF1bHRf
bmVzdGVkX2VudW0gKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19kZWZhdWx0X2ZvcmVp
Z25fZW51bSgpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5oYXNfZGVmYXVsdF9pbXBvcnRfZW51
bSAoKSk7Ci0KLQotICBFWFBFQ1RfRVEoNDAxICAsIG1lc3NhZ2UuZGVmYXVsdF9pbnQzMiAgICgp
KTsKLSAgRVhQRUNUX0VRKDQwMiAgLCBtZXNzYWdlLmRlZmF1bHRfaW50NjQgICAoKSk7Ci0gIEVY
UEVDVF9FUSg0MDMgICwgbWVzc2FnZS5kZWZhdWx0X3VpbnQzMiAgKCkpOwotICBFWFBFQ1RfRVEo
NDA0ICAsIG1lc3NhZ2UuZGVmYXVsdF91aW50NjQgICgpKTsKLSAgRVhQRUNUX0VRKDQwNSAgLCBt
ZXNzYWdlLmRlZmF1bHRfc2ludDMyICAoKSk7Ci0gIEVYUEVDVF9FUSg0MDYgICwgbWVzc2FnZS5k
ZWZhdWx0X3NpbnQ2NCAgKCkpOwotICBFWFBFQ1RfRVEoNDA3ICAsIG1lc3NhZ2UuZGVmYXVsdF9m
aXhlZDMyICgpKTsKLSAgRVhQRUNUX0VRKDQwOCAgLCBtZXNzYWdlLmRlZmF1bHRfZml4ZWQ2NCAo
KSk7Ci0gIEVYUEVDVF9FUSg0MDkgICwgbWVzc2FnZS5kZWZhdWx0X3NmaXhlZDMyKCkpOwotICBF
WFBFQ1RfRVEoNDEwICAsIG1lc3NhZ2UuZGVmYXVsdF9zZml4ZWQ2NCgpKTsKLSAgRVhQRUNUX0VR
KDQxMSAgLCBtZXNzYWdlLmRlZmF1bHRfZmxvYXQgICAoKSk7Ci0gIEVYUEVDVF9FUSg0MTIgICwg
bWVzc2FnZS5kZWZhdWx0X2RvdWJsZSAgKCkpOwotICBFWFBFQ1RfRVEoZmFsc2UsIG1lc3NhZ2Uu
ZGVmYXVsdF9ib29sICAgICgpKTsKLSAgRVhQRUNUX0VRKCI0MTUiLCBtZXNzYWdlLmRlZmF1bHRf
c3RyaW5nICAoKSk7Ci0gIEVYUEVDVF9FUSgiNDE2IiwgbWVzc2FnZS5kZWZhdWx0X2J5dGVzICAg
KCkpOwotCi0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZTo6Rk9PICwgbWVz
c2FnZS5kZWZhdWx0X25lc3RlZF9lbnVtICgpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JF
SUdOX0xJVEVfRk9PICAgICAgLCBtZXNzYWdlLmRlZmF1bHRfZm9yZWlnbl9lbnVtKCkpOwotICBF
WFBFQ1RfRVEodW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfTElURV9GT08sIG1lc3NhZ2UuZGVmYXVs
dF9pbXBvcnRfZW51bSAoKSk7Ci0KLQotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb25lb2Zf
dWludDMyICAgICAgICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vbmVvZl9uZXN0
ZWRfbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29uZW9mX3N0cmluZyAg
ICAgICAgKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLmhhc19vbmVvZl9ieXRlcyAgICAgICAg
ICAoKSk7Ci0KLSAgRVhQRUNUX0VRKCI2MDQiLCBtZXNzYWdlLm9uZW9mX2J5dGVzKCkpOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgVGVzdFV0aWxMaXRlOjpFeHBlY3RDbGVhcihjb25zdCB1
bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSYgbWVzc2FnZSkgewotICAvLyBoYXNfYmxhaCgpIHNo
b3VsZCBpbml0aWFsbHkgYmUgZmFsc2UgZm9yIGFsbCBvcHRpb25hbCBmaWVsZHMuCi0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLmhhc19vcHRpb25hbF9pbnQzMiAgICgpKTsKLSAgRVhQRUNUX0ZBTFNF
KG1lc3NhZ2UuaGFzX29wdGlvbmFsX2ludDY0ICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5oYXNfb3B0aW9uYWxfdWludDMyICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19v
cHRpb25hbF91aW50NjQgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFs
X3NpbnQzMiAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfc2ludDY0
ICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vcHRpb25hbF9maXhlZDMyICgpKTsK
LSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX2ZpeGVkNjQgKCkpOwotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfc2ZpeGVkMzIoKSk7Ci0gIEVYUEVDVF9GQUxT
RShtZXNzYWdlLmhhc19vcHRpb25hbF9zZml4ZWQ2NCgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3Nh
Z2UuaGFzX29wdGlvbmFsX2Zsb2F0ICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNf
b3B0aW9uYWxfZG91YmxlICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19vcHRpb25h
bF9ib29sICAgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX3N0cmlu
ZyAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb3B0aW9uYWxfYnl0ZXMgICAoKSk7
Ci0KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFsZ3JvdXAgICAgICAgICAgICAg
ICAgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX25lc3RlZF9tZXNz
YWdlICAgICAgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFsX2ZvcmVp
Z25fbWVzc2FnZSAgICAgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29wdGlvbmFs
X2ltcG9ydF9tZXNzYWdlICAgICAgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29w
dGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2Uu
aGFzX29wdGlvbmFsX2xhenlfbWVzc2FnZSAgICAgICAgICgpKTsKLQotICBFWFBFQ1RfRkFMU0Uo
bWVzc2FnZS5oYXNfb3B0aW9uYWxfbmVzdGVkX2VudW0gKCkpOwotICBFWFBFQ1RfRkFMU0UobWVz
c2FnZS5oYXNfb3B0aW9uYWxfZm9yZWlnbl9lbnVtKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5oYXNfb3B0aW9uYWxfaW1wb3J0X2VudW0gKCkpOwotCi0KLSAgLy8gT3B0aW9uYWwgZmllbGRz
IHdpdGhvdXQgZGVmYXVsdHMgYXJlIHNldCB0byB6ZXJvIG9yIHNvbWV0aGluZyBsaWtlIGl0Lgot
ICBFWFBFQ1RfRVEoMCAgICAsIG1lc3NhZ2Uub3B0aW9uYWxfaW50MzIgICAoKSk7Ci0gIEVYUEVD
VF9FUSgwICAgICwgbWVzc2FnZS5vcHRpb25hbF9pbnQ2NCAgICgpKTsKLSAgRVhQRUNUX0VRKDAg
ICAgLCBtZXNzYWdlLm9wdGlvbmFsX3VpbnQzMiAgKCkpOwotICBFWFBFQ1RfRVEoMCAgICAsIG1l
c3NhZ2Uub3B0aW9uYWxfdWludDY0ICAoKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5v
cHRpb25hbF9zaW50MzIgICgpKTsKLSAgRVhQRUNUX0VRKDAgICAgLCBtZXNzYWdlLm9wdGlvbmFs
X3NpbnQ2NCAgKCkpOwotICBFWFBFQ1RfRVEoMCAgICAsIG1lc3NhZ2Uub3B0aW9uYWxfZml4ZWQz
MiAoKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5vcHRpb25hbF9maXhlZDY0ICgpKTsK
LSAgRVhQRUNUX0VRKDAgICAgLCBtZXNzYWdlLm9wdGlvbmFsX3NmaXhlZDMyKCkpOwotICBFWFBF
Q1RfRVEoMCAgICAsIG1lc3NhZ2Uub3B0aW9uYWxfc2ZpeGVkNjQoKSk7Ci0gIEVYUEVDVF9FUSgw
ICAgICwgbWVzc2FnZS5vcHRpb25hbF9mbG9hdCAgICgpKTsKLSAgRVhQRUNUX0VRKDAgICAgLCBt
ZXNzYWdlLm9wdGlvbmFsX2RvdWJsZSAgKCkpOwotICBFWFBFQ1RfRVEoZmFsc2UsIG1lc3NhZ2Uu
b3B0aW9uYWxfYm9vbCAgICAoKSk7Ci0gIEVYUEVDVF9FUSgiIiAgICwgbWVzc2FnZS5vcHRpb25h
bF9zdHJpbmcgICgpKTsKLSAgRVhQRUNUX0VRKCIiICAgLCBtZXNzYWdlLm9wdGlvbmFsX2J5dGVz
ICAgKCkpOwotCi0gIC8vIEVtYmVkZGVkIG1lc3NhZ2VzIHNob3VsZCBhbHNvIGJlIGNsZWFyLgot
ICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5vcHRpb25hbGdyb3VwICAgICAgICAgICAgICAgICAoKS5o
YXNfYSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Ug
ICAgICAgKCkuaGFzX2JiKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5vcHRpb25hbF9mb3Jl
aWduX21lc3NhZ2UgICAgICAoKS5oYXNfYygpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2Uub3B0
aW9uYWxfaW1wb3J0X21lc3NhZ2UgICAgICAgKCkuaGFzX2QoKSk7Ci0gIEVYUEVDVF9GQUxTRSht
ZXNzYWdlLm9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZSgpLmhhc19lKCkpOwotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS5vcHRpb25hbF9sYXp5X21lc3NhZ2UgICAgICAgICAoKS5oYXNfYmIo
KSk7Ci0KLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2Uub3B0aW9uYWxncm91cCAgICAgICAgICAgKCku
YSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2Uub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgKCku
YmIoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSgp
LmMoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlICgp
LmQoKSk7Ci0KLSAgLy8gRW51bXMgd2l0aG91dCBkZWZhdWx0cyBhcmUgc2V0IHRvIHRoZSBmaXJz
dCB2YWx1ZSBpbiB0aGUgZW51bS4KLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNM
aXRlOjpGT08gLCBtZXNzYWdlLm9wdGlvbmFsX25lc3RlZF9lbnVtICgpKTsKLSAgRVhQRUNUX0VR
KHVuaXR0ZXN0OjpGT1JFSUdOX0xJVEVfRk9PICAgICAgLCBtZXNzYWdlLm9wdGlvbmFsX2ZvcmVp
Z25fZW51bSgpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0xJVEVfRk9P
LCBtZXNzYWdlLm9wdGlvbmFsX2ltcG9ydF9lbnVtICgpKTsKLQotCi0gIC8vIFJlcGVhdGVkIGZp
ZWxkcyBhcmUgZW1wdHkuCi0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX2ludDMyX3Np
emUgICAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX2ludDY0X3NpemUgICAo
KSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQzMl9zaXplICAoKSk7Ci0g
IEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQ2NF9zaXplICAoKSk7Ci0gIEVYUEVD
VF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX3NpbnQzMl9zaXplICAoKSk7Ci0gIEVYUEVDVF9FUSgw
LCBtZXNzYWdlLnJlcGVhdGVkX3NpbnQ2NF9zaXplICAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNz
YWdlLnJlcGVhdGVkX2ZpeGVkMzJfc2l6ZSAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJl
cGVhdGVkX2ZpeGVkNjRfc2l6ZSAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVk
X3NmaXhlZDMyX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX3NmaXhl
ZDY0X3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX2Zsb2F0X3NpemUg
ICAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZV9zaXplICAoKSk7
Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX2Jvb2xfc2l6ZSAgICAoKSk7Ci0gIEVY
UEVDVF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX3N0cmluZ19zaXplICAoKSk7Ci0gIEVYUEVDVF9F
USgwLCBtZXNzYWdlLnJlcGVhdGVkX2J5dGVzX3NpemUgICAoKSk7Ci0KLSAgRVhQRUNUX0VRKDAs
IG1lc3NhZ2UucmVwZWF0ZWRncm91cF9zaXplICAgICAgICAgICAoKSk7Ci0gIEVYUEVDVF9FUSgw
LCBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX3NpemUgKCkpOwotICBFWFBFQ1RfRVEo
MCwgbWVzc2FnZS5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2Vfc2l6ZSgpKTsKLSAgRVhQRUNUX0VR
KDAsIG1lc3NhZ2UucmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2Vfc2l6ZSAoKSk7Ci0gIEVYUEVDVF9F
USgwLCBtZXNzYWdlLnJlcGVhdGVkX2xhenlfbWVzc2FnZV9zaXplICAgKCkpOwotICBFWFBFQ1Rf
RVEoMCwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bV9zaXplICAgICgpKTsKLSAgRVhQRUNU
X0VRKDAsIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWlnbl9lbnVtX3NpemUgICAoKSk7Ci0gIEVYUEVD
VF9FUSgwLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9lbnVtX3NpemUgICAgKCkpOwotCi0KLSAg
Ly8gaGFzX2JsYWgoKSBzaG91bGQgYWxzbyBiZSBmYWxzZSBmb3IgYWxsIGRlZmF1bHQgZmllbGRz
LgotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZGVmYXVsdF9pbnQzMiAgICgpKTsKLSAgRVhQ
RUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2RlZmF1bHRfaW50NjQgICAoKSk7Ci0gIEVYUEVDVF9GQUxT
RShtZXNzYWdlLmhhc19kZWZhdWx0X3VpbnQzMiAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5oYXNfZGVmYXVsdF91aW50NjQgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Rl
ZmF1bHRfc2ludDMyICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19kZWZhdWx0X3Np
bnQ2NCAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZGVmYXVsdF9maXhlZDMyICgp
KTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2RlZmF1bHRfZml4ZWQ2NCAoKSk7Ci0gIEVY
UEVDVF9GQUxTRShtZXNzYWdlLmhhc19kZWZhdWx0X3NmaXhlZDMyKCkpOwotICBFWFBFQ1RfRkFM
U0UobWVzc2FnZS5oYXNfZGVmYXVsdF9zZml4ZWQ2NCgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3Nh
Z2UuaGFzX2RlZmF1bHRfZmxvYXQgICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19k
ZWZhdWx0X2RvdWJsZSAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfZGVmYXVsdF9i
b29sICAgICgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2RlZmF1bHRfc3RyaW5nICAo
KSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19kZWZhdWx0X2J5dGVzICAgKCkpOwotCi0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLmhhc19kZWZhdWx0X25lc3RlZF9lbnVtICgpKTsKLSAgRVhQ
RUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2RlZmF1bHRfZm9yZWlnbl9lbnVtKCkpOwotICBFWFBFQ1Rf
RkFMU0UobWVzc2FnZS5oYXNfZGVmYXVsdF9pbXBvcnRfZW51bSAoKSk7Ci0KLQotICAvLyBGaWVs
ZHMgd2l0aCBkZWZhdWx0cyBoYXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzIChkdWgpLgotICBFWFBF
Q1RfRVEoIDQxICAgICwgbWVzc2FnZS5kZWZhdWx0X2ludDMyICAgKCkpOwotICBFWFBFQ1RfRVEo
IDQyICAgICwgbWVzc2FnZS5kZWZhdWx0X2ludDY0ICAgKCkpOwotICBFWFBFQ1RfRVEoIDQzICAg
ICwgbWVzc2FnZS5kZWZhdWx0X3VpbnQzMiAgKCkpOwotICBFWFBFQ1RfRVEoIDQ0ICAgICwgbWVz
c2FnZS5kZWZhdWx0X3VpbnQ2NCAgKCkpOwotICBFWFBFQ1RfRVEoLTQ1ICAgICwgbWVzc2FnZS5k
ZWZhdWx0X3NpbnQzMiAgKCkpOwotICBFWFBFQ1RfRVEoIDQ2ICAgICwgbWVzc2FnZS5kZWZhdWx0
X3NpbnQ2NCAgKCkpOwotICBFWFBFQ1RfRVEoIDQ3ICAgICwgbWVzc2FnZS5kZWZhdWx0X2ZpeGVk
MzIgKCkpOwotICBFWFBFQ1RfRVEoIDQ4ICAgICwgbWVzc2FnZS5kZWZhdWx0X2ZpeGVkNjQgKCkp
OwotICBFWFBFQ1RfRVEoIDQ5ICAgICwgbWVzc2FnZS5kZWZhdWx0X3NmaXhlZDMyKCkpOwotICBF
WFBFQ1RfRVEoLTUwICAgICwgbWVzc2FnZS5kZWZhdWx0X3NmaXhlZDY0KCkpOwotICBFWFBFQ1Rf
RVEoIDUxLjUgICwgbWVzc2FnZS5kZWZhdWx0X2Zsb2F0ICAgKCkpOwotICBFWFBFQ1RfRVEoIDUy
ZTMgICwgbWVzc2FnZS5kZWZhdWx0X2RvdWJsZSAgKCkpOwotICBFWFBFQ1RfRVEodHJ1ZSAgICwg
bWVzc2FnZS5kZWZhdWx0X2Jvb2wgICAgKCkpOwotICBFWFBFQ1RfRVEoImhlbGxvIiwgbWVzc2Fn
ZS5kZWZhdWx0X3N0cmluZyAgKCkpOwotICBFWFBFQ1RfRVEoIndvcmxkIiwgbWVzc2FnZS5kZWZh
dWx0X2J5dGVzICAgKCkpOwotCi0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0
ZTo6QkFSICwgbWVzc2FnZS5kZWZhdWx0X25lc3RlZF9lbnVtICgpKTsKLSAgRVhQRUNUX0VRKHVu
aXR0ZXN0OjpGT1JFSUdOX0xJVEVfQkFSICAgICAgLCBtZXNzYWdlLmRlZmF1bHRfZm9yZWlnbl9l
bnVtKCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfTElURV9CQVIsIG1l
c3NhZ2UuZGVmYXVsdF9pbXBvcnRfZW51bSAoKSk7Ci0KLQotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5oYXNfb25lb2ZfdWludDMyICAgICAgICAoKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLmhh
c19vbmVvZl9uZXN0ZWRfbWVzc2FnZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX29u
ZW9mX3N0cmluZyAgICAgICAgKCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5oYXNfb25lb2Zf
Ynl0ZXMgICAgICAgICAoKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbExp
dGU6OkV4cGVjdFJlcGVhdGVkRmllbGRzTW9kaWZpZWQoCi0gICAgY29uc3QgdW5pdHRlc3Q6OlRl
c3RBbGxUeXBlc0xpdGUmIG1lc3NhZ2UpIHsKLSAgLy8gTW9kaWZ5UmVwZWF0ZWRGaWVsZHMgb25s
eSBzZXRzIHRoZSBzZWNvbmQgcmVwZWF0ZWQgZWxlbWVudCBvZiBlYWNoCi0gIC8vIGZpZWxkLiAg
SW4gYWRkaXRpb24gdG8gdmVyaWZ5aW5nIHRoaXMsIHdlIGFsc28gdmVyaWZ5IHRoYXQgdGhlIGZp
cnN0Ci0gIC8vIGVsZW1lbnQgYW5kIHNpemUgd2VyZSAqbm90KiBtb2RpZmllZC4KLSAgQVNTRVJU
X0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzJfc2l6ZSAgICgpKTsKLSAgQVNTRVJUX0VRKDIs
IG1lc3NhZ2UucmVwZWF0ZWRfaW50NjRfc2l6ZSAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3Nh
Z2UucmVwZWF0ZWRfdWludDMyX3NpemUgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVw
ZWF0ZWRfdWludDY0X3NpemUgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRf
c2ludDMyX3NpemUgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDY0
X3NpemUgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQzMl9zaXpl
ICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQ2NF9zaXplICgpKTsK
LSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkMzJfc2l6ZSgpKTsKLSAgQVNT
RVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkNjRfc2l6ZSgpKTsKLSAgQVNTRVJUX0VR
KDIsIG1lc3NhZ2UucmVwZWF0ZWRfZmxvYXRfc2l6ZSAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1l
c3NhZ2UucmVwZWF0ZWRfZG91YmxlX3NpemUgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2Uu
cmVwZWF0ZWRfYm9vbF9zaXplICAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0
ZWRfc3RyaW5nX3NpemUgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfYnl0
ZXNfc2l6ZSAgICgpKTsKLQotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZGdyb3VwX3Np
emUgICAgICAgICAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2Vfc2l6ZSAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVp
Z25fbWVzc2FnZV9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9pbXBv
cnRfbWVzc2FnZV9zaXplICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfbGF6
eV9tZXNzYWdlX3NpemUgICAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX25l
c3RlZF9lbnVtX3NpemUgICAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5yZXBlYXRlZF9m
b3JlaWduX2VudW1fc2l6ZSAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRf
aW1wb3J0X2VudW1fc2l6ZSAgICAoKSk7Ci0KLQotICBFWFBFQ1RfRVEoMjAxICAsIG1lc3NhZ2Uu
cmVwZWF0ZWRfaW50MzIgICAoMCkpOwotICBFWFBFQ1RfRVEoMjAyICAsIG1lc3NhZ2UucmVwZWF0
ZWRfaW50NjQgICAoMCkpOwotICBFWFBFQ1RfRVEoMjAzICAsIG1lc3NhZ2UucmVwZWF0ZWRfdWlu
dDMyICAoMCkpOwotICBFWFBFQ1RfRVEoMjA0ICAsIG1lc3NhZ2UucmVwZWF0ZWRfdWludDY0ICAo
MCkpOwotICBFWFBFQ1RfRVEoMjA1ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDMyICAoMCkpOwot
ICBFWFBFQ1RfRVEoMjA2ICAsIG1lc3NhZ2UucmVwZWF0ZWRfc2ludDY0ICAoMCkpOwotICBFWFBF
Q1RfRVEoMjA3ICAsIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQzMiAoMCkpOwotICBFWFBFQ1RfRVEo
MjA4ICAsIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQ2NCAoMCkpOwotICBFWFBFQ1RfRVEoMjA5ICAs
IG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkMzIoMCkpOwotICBFWFBFQ1RfRVEoMjEwICAsIG1lc3Nh
Z2UucmVwZWF0ZWRfc2ZpeGVkNjQoMCkpOwotICBFWFBFQ1RfRVEoMjExICAsIG1lc3NhZ2UucmVw
ZWF0ZWRfZmxvYXQgICAoMCkpOwotICBFWFBFQ1RfRVEoMjEyICAsIG1lc3NhZ2UucmVwZWF0ZWRf
ZG91YmxlICAoMCkpOwotICBFWFBFQ1RfRVEodHJ1ZSAsIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbCAg
ICAoMCkpOwotICBFWFBFQ1RfRVEoIjIxNSIsIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nICAoMCkp
OwotICBFWFBFQ1RfRVEoIjIxNiIsIG1lc3NhZ2UucmVwZWF0ZWRfYnl0ZXMgICAoMCkpOwotCi0g
IEVYUEVDVF9FUSgyMTcsIG1lc3NhZ2UucmVwZWF0ZWRncm91cCAgICAgICAgICAgKDApLmEoKSk7
Ci0gIEVYUEVDVF9FUSgyMTgsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgKDApLmJi
KCkpOwotICBFWFBFQ1RfRVEoMjE5LCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSgw
KS5jKCkpOwotICBFWFBFQ1RfRVEoMjIwLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdl
ICgwKS5kKCkpOwotICBFWFBFQ1RfRVEoMjI3LCBtZXNzYWdlLnJlcGVhdGVkX2xhenlfbWVzc2Fn
ZSAgICgwKS5iYigpKTsKLQotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlc0xpdGU6
OkJBUiAsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2VudW0gKDApKTsKLSAgRVhQRUNUX0VRKHVu
aXR0ZXN0OjpGT1JFSUdOX0xJVEVfQkFSICAgICAgLCBtZXNzYWdlLnJlcGVhdGVkX2ZvcmVpZ25f
ZW51bSgwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9MSVRFX0JBUiwg
bWVzc2FnZS5yZXBlYXRlZF9pbXBvcnRfZW51bSAoMCkpOwotCi0KLSAgLy8gQWN0dWFsbHkgdmVy
aWZ5IHRoZSBzZWNvbmQgKG1vZGlmaWVkKSBlbGVtZW50cyBub3cuCi0gIEVYUEVDVF9FUSg1MDEg
ICwgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMiAgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDIgICwgbWVz
c2FnZS5yZXBlYXRlZF9pbnQ2NCAgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDMgICwgbWVzc2FnZS5y
ZXBlYXRlZF91aW50MzIgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDQgICwgbWVzc2FnZS5yZXBlYXRl
ZF91aW50NjQgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDUgICwgbWVzc2FnZS5yZXBlYXRlZF9zaW50
MzIgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MDYgICwgbWVzc2FnZS5yZXBlYXRlZF9zaW50NjQgICgx
KSk7Ci0gIEVYUEVDVF9FUSg1MDcgICwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDMyICgxKSk7Ci0g
IEVYUEVDVF9FUSg1MDggICwgbWVzc2FnZS5yZXBlYXRlZF9maXhlZDY0ICgxKSk7Ci0gIEVYUEVD
VF9FUSg1MDkgICwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQzMigxKSk7Ci0gIEVYUEVDVF9FUSg1
MTAgICwgbWVzc2FnZS5yZXBlYXRlZF9zZml4ZWQ2NCgxKSk7Ci0gIEVYUEVDVF9FUSg1MTEgICwg
bWVzc2FnZS5yZXBlYXRlZF9mbG9hdCAgICgxKSk7Ci0gIEVYUEVDVF9FUSg1MTIgICwgbWVzc2Fn
ZS5yZXBlYXRlZF9kb3VibGUgICgxKSk7Ci0gIEVYUEVDVF9FUSh0cnVlICwgbWVzc2FnZS5yZXBl
YXRlZF9ib29sICAgICgxKSk7Ci0gIEVYUEVDVF9FUSgiNTE1IiwgbWVzc2FnZS5yZXBlYXRlZF9z
dHJpbmcgICgxKSk7Ci0gIEVYUEVDVF9FUSgiNTE2IiwgbWVzc2FnZS5yZXBlYXRlZF9ieXRlcyAg
ICgxKSk7Ci0KLSAgRVhQRUNUX0VRKDUxNywgbWVzc2FnZS5yZXBlYXRlZGdyb3VwICAgICAgICAg
ICAoMSkuYSgpKTsKLSAgRVhQRUNUX0VRKDUxOCwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZSAoMSkuYmIoKSk7Ci0gIEVYUEVDVF9FUSg1MTksIG1lc3NhZ2UucmVwZWF0ZWRfZm9yZWln
bl9tZXNzYWdlKDEpLmMoKSk7Ci0gIEVYUEVDVF9FUSg1MjAsIG1lc3NhZ2UucmVwZWF0ZWRfaW1w
b3J0X21lc3NhZ2UgKDEpLmQoKSk7Ci0gIEVYUEVDVF9FUSg1MjcsIG1lc3NhZ2UucmVwZWF0ZWRf
bGF6eV9tZXNzYWdlICAgKDEpLmJiKCkpOwotCi0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFs
bFR5cGVzTGl0ZTo6Rk9PICwgbWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bSAoMSkpOwotICBF
WFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fTElURV9GT08gICAgICAsIG1lc3NhZ2UucmVwZWF0
ZWRfZm9yZWlnbl9lbnVtKDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JU
X0xJVEVfRk9PLCBtZXNzYWdlLnJlcGVhdGVkX2ltcG9ydF9lbnVtICgxKSk7Ci0KLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi12b2lkIFRlc3RVdGlsTGl0ZTo6U2V0UGFja2VkRmllbGRzKHVuaXR0ZXN0
OjpUZXN0UGFja2VkVHlwZXNMaXRlKiBtZXNzYWdlKSB7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRf
aW50MzIgICAoNjAxKTsKLSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9pbnQ2NCAgICg2MDIpOwotICBt
ZXNzYWdlLT5hZGRfcGFja2VkX3VpbnQzMiAgKDYwMyk7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRf
dWludDY0ICAoNjA0KTsKLSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9zaW50MzIgICg2MDUpOwotICBt
ZXNzYWdlLT5hZGRfcGFja2VkX3NpbnQ2NCAgKDYwNik7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRf
Zml4ZWQzMiAoNjA3KTsKLSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9maXhlZDY0ICg2MDgpOwotICBt
ZXNzYWdlLT5hZGRfcGFja2VkX3NmaXhlZDMyKDYwOSk7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRf
c2ZpeGVkNjQoNjEwKTsKLSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9mbG9hdCAgICg2MTEpOwotICBt
ZXNzYWdlLT5hZGRfcGFja2VkX2RvdWJsZSAgKDYxMik7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRf
Ym9vbCAgICAodHJ1ZSk7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRfZW51bSAgICAodW5pdHRlc3Q6
OkZPUkVJR05fTElURV9CQVIpOwotICAvLyBhZGQgYSBzZWNvbmQgb25lIG9mIGVhY2ggZmllbGQK
LSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9pbnQzMiAgICg3MDEpOwotICBtZXNzYWdlLT5hZGRfcGFj
a2VkX2ludDY0ICAgKDcwMik7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRfdWludDMyICAoNzAzKTsK
LSAgbWVzc2FnZS0+YWRkX3BhY2tlZF91aW50NjQgICg3MDQpOwotICBtZXNzYWdlLT5hZGRfcGFj
a2VkX3NpbnQzMiAgKDcwNSk7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRfc2ludDY0ICAoNzA2KTsK
LSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9maXhlZDMyICg3MDcpOwotICBtZXNzYWdlLT5hZGRfcGFj
a2VkX2ZpeGVkNjQgKDcwOCk7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRfc2ZpeGVkMzIoNzA5KTsK
LSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9zZml4ZWQ2NCg3MTApOwotICBtZXNzYWdlLT5hZGRfcGFj
a2VkX2Zsb2F0ICAgKDcxMSk7Ci0gIG1lc3NhZ2UtPmFkZF9wYWNrZWRfZG91YmxlICAoNzEyKTsK
LSAgbWVzc2FnZS0+YWRkX3BhY2tlZF9ib29sICAgIChmYWxzZSk7Ci0gIG1lc3NhZ2UtPmFkZF9w
YWNrZWRfZW51bSAgICAodW5pdHRlc3Q6OkZPUkVJR05fTElURV9CQVopOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLXZvaWQgVGVzdFV0aWxMaXRlOjpNb2RpZnlQYWNrZWRGaWVsZHModW5pdHRlc3Q6
OlRlc3RQYWNrZWRUeXBlc0xpdGUqIG1lc3NhZ2UpIHsKLSAgbWVzc2FnZS0+c2V0X3BhY2tlZF9p
bnQzMiAgICgxLCA4MDEpOwotICBtZXNzYWdlLT5zZXRfcGFja2VkX2ludDY0ICAgKDEsIDgwMik7
Ci0gIG1lc3NhZ2UtPnNldF9wYWNrZWRfdWludDMyICAoMSwgODAzKTsKLSAgbWVzc2FnZS0+c2V0
X3BhY2tlZF91aW50NjQgICgxLCA4MDQpOwotICBtZXNzYWdlLT5zZXRfcGFja2VkX3NpbnQzMiAg
KDEsIDgwNSk7Ci0gIG1lc3NhZ2UtPnNldF9wYWNrZWRfc2ludDY0ICAoMSwgODA2KTsKLSAgbWVz
c2FnZS0+c2V0X3BhY2tlZF9maXhlZDMyICgxLCA4MDcpOwotICBtZXNzYWdlLT5zZXRfcGFja2Vk
X2ZpeGVkNjQgKDEsIDgwOCk7Ci0gIG1lc3NhZ2UtPnNldF9wYWNrZWRfc2ZpeGVkMzIoMSwgODA5
KTsKLSAgbWVzc2FnZS0+c2V0X3BhY2tlZF9zZml4ZWQ2NCgxLCA4MTApOwotICBtZXNzYWdlLT5z
ZXRfcGFja2VkX2Zsb2F0ICAgKDEsIDgxMSk7Ci0gIG1lc3NhZ2UtPnNldF9wYWNrZWRfZG91Ymxl
ICAoMSwgODEyKTsKLSAgbWVzc2FnZS0+c2V0X3BhY2tlZF9ib29sICAgICgxLCB0cnVlKTsKLSAg
bWVzc2FnZS0+c2V0X3BhY2tlZF9lbnVtICAgICgxLCB1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0ZP
Tyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbExpdGU6OkV4cGVjdFBhY2tl
ZEZpZWxkc1NldCgKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzTGl0ZSYgbWVz
c2FnZSkgewotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfaW50MzJfc2l6ZSAgICgpKTsK
LSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX2ludDY0X3NpemUgICAoKSk7Ci0gIEFTU0VS
VF9FUSgyLCBtZXNzYWdlLnBhY2tlZF91aW50MzJfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwg
bWVzc2FnZS5wYWNrZWRfdWludDY0X3NpemUgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2Uu
cGFja2VkX3NpbnQzMl9zaXplICAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF9z
aW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfZml4ZWQzMl9z
aXplICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX2ZpeGVkNjRfc2l6ZSAoKSk7
Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF9zZml4ZWQzMl9zaXplKCkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfc2ZpeGVkNjRfc2l6ZSgpKTsKLSAgQVNTRVJUX0VRKDIs
IG1lc3NhZ2UucGFja2VkX2Zsb2F0X3NpemUgICAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdl
LnBhY2tlZF9kb3VibGVfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRf
Ym9vbF9zaXplICAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX2VudW1fc2l6
ZSAgICAoKSk7Ci0KLSAgRVhQRUNUX0VRKDYwMSAgLCBtZXNzYWdlLnBhY2tlZF9pbnQzMiAgICgw
KSk7Ci0gIEVYUEVDVF9FUSg2MDIgICwgbWVzc2FnZS5wYWNrZWRfaW50NjQgICAoMCkpOwotICBF
WFBFQ1RfRVEoNjAzICAsIG1lc3NhZ2UucGFja2VkX3VpbnQzMiAgKDApKTsKLSAgRVhQRUNUX0VR
KDYwNCAgLCBtZXNzYWdlLnBhY2tlZF91aW50NjQgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDUgICwg
bWVzc2FnZS5wYWNrZWRfc2ludDMyICAoMCkpOwotICBFWFBFQ1RfRVEoNjA2ICAsIG1lc3NhZ2Uu
cGFja2VkX3NpbnQ2NCAgKDApKTsKLSAgRVhQRUNUX0VRKDYwNyAgLCBtZXNzYWdlLnBhY2tlZF9m
aXhlZDMyICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDggICwgbWVzc2FnZS5wYWNrZWRfZml4ZWQ2NCAo
MCkpOwotICBFWFBFQ1RfRVEoNjA5ICAsIG1lc3NhZ2UucGFja2VkX3NmaXhlZDMyKDApKTsKLSAg
RVhQRUNUX0VRKDYxMCAgLCBtZXNzYWdlLnBhY2tlZF9zZml4ZWQ2NCgwKSk7Ci0gIEVYUEVDVF9F
USg2MTEgICwgbWVzc2FnZS5wYWNrZWRfZmxvYXQgICAoMCkpOwotICBFWFBFQ1RfRVEoNjEyICAs
IG1lc3NhZ2UucGFja2VkX2RvdWJsZSAgKDApKTsKLSAgRVhQRUNUX0VRKHRydWUgLCBtZXNzYWdl
LnBhY2tlZF9ib29sICAgICgwKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9MSVRF
X0JBUiwgbWVzc2FnZS5wYWNrZWRfZW51bSgwKSk7Ci0KLSAgRVhQRUNUX0VRKDcwMSAgLCBtZXNz
YWdlLnBhY2tlZF9pbnQzMiAgICgxKSk7Ci0gIEVYUEVDVF9FUSg3MDIgICwgbWVzc2FnZS5wYWNr
ZWRfaW50NjQgICAoMSkpOwotICBFWFBFQ1RfRVEoNzAzICAsIG1lc3NhZ2UucGFja2VkX3VpbnQz
MiAgKDEpKTsKLSAgRVhQRUNUX0VRKDcwNCAgLCBtZXNzYWdlLnBhY2tlZF91aW50NjQgICgxKSk7
Ci0gIEVYUEVDVF9FUSg3MDUgICwgbWVzc2FnZS5wYWNrZWRfc2ludDMyICAoMSkpOwotICBFWFBF
Q1RfRVEoNzA2ICAsIG1lc3NhZ2UucGFja2VkX3NpbnQ2NCAgKDEpKTsKLSAgRVhQRUNUX0VRKDcw
NyAgLCBtZXNzYWdlLnBhY2tlZF9maXhlZDMyICgxKSk7Ci0gIEVYUEVDVF9FUSg3MDggICwgbWVz
c2FnZS5wYWNrZWRfZml4ZWQ2NCAoMSkpOwotICBFWFBFQ1RfRVEoNzA5ICAsIG1lc3NhZ2UucGFj
a2VkX3NmaXhlZDMyKDEpKTsKLSAgRVhQRUNUX0VRKDcxMCAgLCBtZXNzYWdlLnBhY2tlZF9zZml4
ZWQ2NCgxKSk7Ci0gIEVYUEVDVF9FUSg3MTEgICwgbWVzc2FnZS5wYWNrZWRfZmxvYXQgICAoMSkp
OwotICBFWFBFQ1RfRVEoNzEyICAsIG1lc3NhZ2UucGFja2VkX2RvdWJsZSAgKDEpKTsKLSAgRVhQ
RUNUX0VRKGZhbHNlLCBtZXNzYWdlLnBhY2tlZF9ib29sICAgICgxKSk7Ci0gIEVYUEVDVF9FUSh1
bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0JBWiwgbWVzc2FnZS5wYWNrZWRfZW51bSgxKSk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbExpdGU6OkV4cGVjdFBhY2tlZENsZWFyKAot
ICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0UGFja2VkVHlwZXNMaXRlJiBtZXNzYWdlKSB7Ci0gIC8v
IFBhY2tlZCByZXBlYXRlZCBmaWVsZHMgYXJlIGVtcHR5LgotICBFWFBFQ1RfRVEoMCwgbWVzc2Fn
ZS5wYWNrZWRfaW50MzJfc2l6ZSAgICgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UucGFja2Vk
X2ludDY0X3NpemUgICAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnBhY2tlZF91aW50MzJf
c2l6ZSAgKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5wYWNrZWRfdWludDY0X3NpemUgICgp
KTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UucGFja2VkX3NpbnQzMl9zaXplICAoKSk7Ci0gIEVY
UEVDVF9FUSgwLCBtZXNzYWdlLnBhY2tlZF9zaW50NjRfc2l6ZSAgKCkpOwotICBFWFBFQ1RfRVEo
MCwgbWVzc2FnZS5wYWNrZWRfZml4ZWQzMl9zaXplICgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3Nh
Z2UucGFja2VkX2ZpeGVkNjRfc2l6ZSAoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnBhY2tl
ZF9zZml4ZWQzMl9zaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5wYWNrZWRfc2ZpeGVk
NjRfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UucGFja2VkX2Zsb2F0X3NpemUgICAo
KSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLnBhY2tlZF9kb3VibGVfc2l6ZSAgKCkpOwotICBF
WFBFQ1RfRVEoMCwgbWVzc2FnZS5wYWNrZWRfYm9vbF9zaXplICAgICgpKTsKLSAgRVhQRUNUX0VR
KDAsIG1lc3NhZ2UucGFja2VkX2VudW1fc2l6ZSAgICAoKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotdm9pZCBUZXN0VXRpbExpdGU6OkV4cGVjdFBhY2tlZEZpZWxkc01vZGlmaWVkKAotICAgIGNv
bnN0IHVuaXR0ZXN0OjpUZXN0UGFja2VkVHlwZXNMaXRlJiBtZXNzYWdlKSB7Ci0gIC8vIERvIHRo
ZSBzYW1lIGZvciBwYWNrZWQgcmVwZWF0ZWQgZmllbGRzLgotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZS5wYWNrZWRfaW50MzJfc2l6ZSAgICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2Vk
X2ludDY0X3NpemUgICAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF91aW50MzJf
c2l6ZSAgKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfdWludDY0X3NpemUgICgp
KTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX3NpbnQzMl9zaXplICAoKSk7Ci0gIEFT
U0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF9zaW50NjRfc2l6ZSAgKCkpOwotICBBU1NFUlRfRVEo
MiwgbWVzc2FnZS5wYWNrZWRfZml4ZWQzMl9zaXplICgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3Nh
Z2UucGFja2VkX2ZpeGVkNjRfc2l6ZSAoKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tl
ZF9zZml4ZWQzMl9zaXplKCkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfc2ZpeGVk
NjRfc2l6ZSgpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucGFja2VkX2Zsb2F0X3NpemUgICAo
KSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLnBhY2tlZF9kb3VibGVfc2l6ZSAgKCkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS5wYWNrZWRfYm9vbF9zaXplICAgICgpKTsKLSAgQVNTRVJUX0VR
KDIsIG1lc3NhZ2UucGFja2VkX2VudW1fc2l6ZSAgICAoKSk7Ci0KLSAgRVhQRUNUX0VRKDYwMSAg
LCBtZXNzYWdlLnBhY2tlZF9pbnQzMiAgICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDIgICwgbWVzc2Fn
ZS5wYWNrZWRfaW50NjQgICAoMCkpOwotICBFWFBFQ1RfRVEoNjAzICAsIG1lc3NhZ2UucGFja2Vk
X3VpbnQzMiAgKDApKTsKLSAgRVhQRUNUX0VRKDYwNCAgLCBtZXNzYWdlLnBhY2tlZF91aW50NjQg
ICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDUgICwgbWVzc2FnZS5wYWNrZWRfc2ludDMyICAoMCkpOwot
ICBFWFBFQ1RfRVEoNjA2ICAsIG1lc3NhZ2UucGFja2VkX3NpbnQ2NCAgKDApKTsKLSAgRVhQRUNU
X0VRKDYwNyAgLCBtZXNzYWdlLnBhY2tlZF9maXhlZDMyICgwKSk7Ci0gIEVYUEVDVF9FUSg2MDgg
ICwgbWVzc2FnZS5wYWNrZWRfZml4ZWQ2NCAoMCkpOwotICBFWFBFQ1RfRVEoNjA5ICAsIG1lc3Nh
Z2UucGFja2VkX3NmaXhlZDMyKDApKTsKLSAgRVhQRUNUX0VRKDYxMCAgLCBtZXNzYWdlLnBhY2tl
ZF9zZml4ZWQ2NCgwKSk7Ci0gIEVYUEVDVF9FUSg2MTEgICwgbWVzc2FnZS5wYWNrZWRfZmxvYXQg
ICAoMCkpOwotICBFWFBFQ1RfRVEoNjEyICAsIG1lc3NhZ2UucGFja2VkX2RvdWJsZSAgKDApKTsK
LSAgRVhQRUNUX0VRKHRydWUgLCBtZXNzYWdlLnBhY2tlZF9ib29sICAgICgwKSk7Ci0gIEVYUEVD
VF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0JBUiwgbWVzc2FnZS5wYWNrZWRfZW51bSgwKSk7
Ci0gIC8vIEFjdHVhbGx5IHZlcmlmeSB0aGUgc2Vjb25kIChtb2RpZmllZCkgZWxlbWVudHMgbm93
LgotICBFWFBFQ1RfRVEoODAxICAsIG1lc3NhZ2UucGFja2VkX2ludDMyICAgKDEpKTsKLSAgRVhQ
RUNUX0VRKDgwMiAgLCBtZXNzYWdlLnBhY2tlZF9pbnQ2NCAgICgxKSk7Ci0gIEVYUEVDVF9FUSg4
MDMgICwgbWVzc2FnZS5wYWNrZWRfdWludDMyICAoMSkpOwotICBFWFBFQ1RfRVEoODA0ICAsIG1l
c3NhZ2UucGFja2VkX3VpbnQ2NCAgKDEpKTsKLSAgRVhQRUNUX0VRKDgwNSAgLCBtZXNzYWdlLnBh
Y2tlZF9zaW50MzIgICgxKSk7Ci0gIEVYUEVDVF9FUSg4MDYgICwgbWVzc2FnZS5wYWNrZWRfc2lu
dDY0ICAoMSkpOwotICBFWFBFQ1RfRVEoODA3ICAsIG1lc3NhZ2UucGFja2VkX2ZpeGVkMzIgKDEp
KTsKLSAgRVhQRUNUX0VRKDgwOCAgLCBtZXNzYWdlLnBhY2tlZF9maXhlZDY0ICgxKSk7Ci0gIEVY
UEVDVF9FUSg4MDkgICwgbWVzc2FnZS5wYWNrZWRfc2ZpeGVkMzIoMSkpOwotICBFWFBFQ1RfRVEo
ODEwICAsIG1lc3NhZ2UucGFja2VkX3NmaXhlZDY0KDEpKTsKLSAgRVhQRUNUX0VRKDgxMSAgLCBt
ZXNzYWdlLnBhY2tlZF9mbG9hdCAgICgxKSk7Ci0gIEVYUEVDVF9FUSg4MTIgICwgbWVzc2FnZS5w
YWNrZWRfZG91YmxlICAoMSkpOwotICBFWFBFQ1RfRVEodHJ1ZSAsIG1lc3NhZ2UucGFja2VkX2Jv
b2wgICAgKDEpKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0xJVEVfRk9PLCBtZXNz
YWdlLnBhY2tlZF9lbnVtKDEpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gRXh0ZW5zaW9ucwot
Ly8KLS8vIEFsbCB0aGlzIGNvZGUgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSBj
b2RlIGV4Y2VwdCB0aGF0IGl0J3MKLS8vIG1hbmlwdWxhdGluZyBleHRlbnNpb24gZmllbGRzIGlu
c3RlYWQgb2Ygbm9ybWFsIG9uZXMuCi0vLwotLy8gSSBnYXZlIHVwIG9uIHRoZSA4MC1jaGFyIGxp
bWl0IGhlcmUuICBTb3JyeS4KLQotdm9pZCBUZXN0VXRpbExpdGU6OlNldEFsbEV4dGVuc2lvbnMo
dW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zTGl0ZSogbWVzc2FnZSkgewotICBtZXNzYWdlLT5T
ZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbl9saXRlICAgLCAx
MDEpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4
dGVuc2lvbl9saXRlICAgLCAxMDIpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6
Om9wdGlvbmFsX3VpbnQzMl9leHRlbnNpb25fbGl0ZSAgLCAxMDMpOwotICBtZXNzYWdlLT5TZXRF
eHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3VpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAxMDQp
OwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NpbnQzMl9leHRl
bnNpb25fbGl0ZSAgLCAxMDUpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9w
dGlvbmFsX3NpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAxMDYpOwotICBtZXNzYWdlLT5TZXRFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUgLCAxMDcpOwot
ICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZpeGVkNjRfZXh0ZW5z
aW9uX2xpdGUgLCAxMDgpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlv
bmFsX3NmaXhlZDMyX2V4dGVuc2lvbl9saXRlLCAxMDkpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX3NmaXhlZDY0X2V4dGVuc2lvbl9saXRlLCAxMTApOwotICBt
ZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2Zsb2F0X2V4dGVuc2lvbl9s
aXRlICAgLCAxMTEpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X2RvdWJsZV9leHRlbnNpb25fbGl0ZSAgLCAxMTIpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24o
dW5pdHRlc3Q6Om9wdGlvbmFsX2Jvb2xfZXh0ZW5zaW9uX2xpdGUgICAgLCB0cnVlKTsKLSAgbWVz
c2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9zdHJpbmdfZXh0ZW5zaW9uX2xp
dGUgICwgIjExNSIpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X2J5dGVzX2V4dGVuc2lvbl9saXRlICAgLCAiMTE2Iik7Ci0KLSAgbWVzc2FnZS0+TXV0YWJsZUV4
dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxncm91cF9leHRlbnNpb25fbGl0ZSAgICAgICAgICAg
ICAgICAgKS0+c2V0X2EoMTE3KTsKLSAgbWVzc2FnZS0+TXV0YWJsZUV4dGVuc2lvbih1bml0dGVz
dDo6b3B0aW9uYWxfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgICAgICAgKS0+c2V0X2Ji
KDExOCk7Ci0gIG1lc3NhZ2UtPk11dGFibGVFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2Zv
cmVpZ25fbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICktPnNldF9jKDExOSk7Ci0gIG1lc3Nh
Z2UtPk11dGFibGVFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlX2V4
dGVuc2lvbl9saXRlICAgICAgICktPnNldF9kKDEyMCk7Ci0gIG1lc3NhZ2UtPk11dGFibGVFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25f
bGl0ZSktPnNldF9lKDEyNik7Ci0gIG1lc3NhZ2UtPk11dGFibGVFeHRlbnNpb24odW5pdHRlc3Q6
Om9wdGlvbmFsX2xhenlfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICAgICktPnNldF9iYigx
MjcpOwotCi0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfbmVzdGVk
X2VudW1fZXh0ZW5zaW9uX2xpdGUgLCB1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZTo6QkFaICk7
Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9lbnVt
X2V4dGVuc2lvbl9saXRlLCB1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0JBWiAgICAgICk7Ci0gIG1l
c3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0X2VudW1fZXh0ZW5z
aW9uX2xpdGUgLCB1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9MSVRFX0JBWik7Ci0KLQotICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW50
MzJfZXh0ZW5zaW9uX2xpdGUgICAsIDIwMSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0
dGVzdDo6cmVwZWF0ZWRfaW50NjRfZXh0ZW5zaW9uX2xpdGUgICAsIDIwMik7Ci0gIG1lc3NhZ2Ut
PkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfdWludDMyX2V4dGVuc2lvbl9saXRlICAs
IDIwMyk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfdWludDY0
X2V4dGVuc2lvbl9saXRlICAsIDIwNCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVz
dDo6cmVwZWF0ZWRfc2ludDMyX2V4dGVuc2lvbl9saXRlICAsIDIwNSk7Ci0gIG1lc3NhZ2UtPkFk
ZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDY0X2V4dGVuc2lvbl9saXRlICAsIDIw
Nik7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZml4ZWQzMl9l
eHRlbnNpb25fbGl0ZSAsIDIwNyk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6
cmVwZWF0ZWRfZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSAsIDIwOCk7Ci0gIG1lc3NhZ2UtPkFkZEV4
dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUsIDIwOSk7
Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkNjRfZXh0
ZW5zaW9uX2xpdGUsIDIxMCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVw
ZWF0ZWRfZmxvYXRfZXh0ZW5zaW9uX2xpdGUgICAsIDIxMSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVu
c2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbl9saXRlICAsIDIxMik7Ci0g
IG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfYm9vbF9leHRlbnNpb25f
bGl0ZSAgICAsIHRydWUpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVh
dGVkX3N0cmluZ19leHRlbnNpb25fbGl0ZSAgLCAiMjE1Iik7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVu
c2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uX2xpdGUgICAsICIyMTYiKTsK
LQotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkZ3JvdXBfZXh0ZW5z
aW9uX2xpdGUgICAgICAgICAgICktPnNldF9hKDIxNyk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lv
bih1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgKS0+c2V0
X2JiKDIxOCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZm9y
ZWlnbl9tZXNzYWdlX2V4dGVuc2lvbl9saXRlKS0+c2V0X2MoMjE5KTsKLSAgbWVzc2FnZS0+QWRk
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25fbGl0
ZSApLT5zZXRfZCgyMjApOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVh
dGVkX2xhenlfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICktPnNldF9iYigyMjcpOwotCi0gIG1l
c3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5z
aW9uX2xpdGUgLCB1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZTo6QkFSICk7Ci0gIG1lc3NhZ2Ut
PkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbl9s
aXRlLCB1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0JBUiAgICAgICk7Ci0gIG1lc3NhZ2UtPkFkZEV4
dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5zaW9uX2xpdGUgLCB1
bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9MSVRFX0JBUik7Ci0KLQotICAvLyBBZGQgYSBzZWNvbmQg
b25lIG9mIGVhY2ggZmllbGQuCi0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVw
ZWF0ZWRfaW50MzJfZXh0ZW5zaW9uX2xpdGUgICAsIDMwMSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVu
c2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW50NjRfZXh0ZW5zaW9uX2xpdGUgICAsIDMwMik7Ci0g
IG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfdWludDMyX2V4dGVuc2lv
bl9saXRlICAsIDMwMyk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0
ZWRfdWludDY0X2V4dGVuc2lvbl9saXRlICAsIDMwNCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lv
bih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDMyX2V4dGVuc2lvbl9saXRlICAsIDMwNSk7Ci0gIG1l
c3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDY0X2V4dGVuc2lvbl9s
aXRlICAsIDMwNik7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRf
Zml4ZWQzMl9leHRlbnNpb25fbGl0ZSAsIDMwNyk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1
bml0dGVzdDo6cmVwZWF0ZWRfZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSAsIDMwOCk7Ci0gIG1lc3Nh
Z2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uX2xp
dGUsIDMwOSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2Zp
eGVkNjRfZXh0ZW5zaW9uX2xpdGUsIDMxMCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0
dGVzdDo6cmVwZWF0ZWRfZmxvYXRfZXh0ZW5zaW9uX2xpdGUgICAsIDMxMSk7Ci0gIG1lc3NhZ2Ut
PkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbl9saXRlICAs
IDMxMik7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfYm9vbF9l
eHRlbnNpb25fbGl0ZSAgICAsIGZhbHNlKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uX2xpdGUgICwgIjMxNSIpOwotICBtZXNzYWdl
LT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2J5dGVzX2V4dGVuc2lvbl9saXRlICAg
LCAiMzE2Iik7Ci0KLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZGdy
b3VwX2V4dGVuc2lvbl9saXRlICAgICAgICAgICApLT5zZXRfYSgzMTcpOwotICBtZXNzYWdlLT5B
ZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl9s
aXRlICktPnNldF9iYigzMTgpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJl
cGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb25fbGl0ZSktPnNldF9jKDMxOSk7Ci0gIG1l
c3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2VfZXh0
ZW5zaW9uX2xpdGUgKS0+c2V0X2QoMzIwKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0
ZXN0OjpyZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgICApLT5zZXRfYmIoMzI3
KTsKLQotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9l
bnVtX2V4dGVuc2lvbl9saXRlICwgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlc0xpdGU6OkJBWiApOwot
ICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9l
eHRlbnNpb25fbGl0ZSwgdW5pdHRlc3Q6OkZPUkVJR05fTElURV9CQVogICAgICApOwotICBtZXNz
YWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9lbnVtX2V4dGVuc2lv
bl9saXRlICwgdW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfTElURV9CQVopOwotCi0KLSAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfaW50MzJf
ZXh0ZW5zaW9uX2xpdGUgICAsIDQwMSk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVz
dDo6ZGVmYXVsdF9pbnQ2NF9leHRlbnNpb25fbGl0ZSAgICwgNDAyKTsKLSAgbWVzc2FnZS0+U2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3VpbnQzMl9leHRlbnNpb25fbGl0ZSAgLCA0MDMp
OwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfdWludDY0X2V4dGVu
c2lvbl9saXRlICAsIDQwNCk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVm
YXVsdF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUgICwgNDA1KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCA0MDYpOwotICBt
ZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfZml4ZWQzMl9leHRlbnNpb25f
bGl0ZSAsIDQwNyk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9m
aXhlZDY0X2V4dGVuc2lvbl9saXRlICwgNDA4KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpkZWZhdWx0X3NmaXhlZDMyX2V4dGVuc2lvbl9saXRlLCA0MDkpOwotICBtZXNzYWdl
LT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUs
IDQxMCk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9mbG9hdF9l
eHRlbnNpb25fbGl0ZSAgICwgNDExKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpkZWZhdWx0X2RvdWJsZV9leHRlbnNpb25fbGl0ZSAgLCA0MTIpOwotICBtZXNzYWdlLT5TZXRF
eHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfYm9vbF9leHRlbnNpb25fbGl0ZSAgICAsIGZhbHNl
KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3N0cmluZ19leHRl
bnNpb25fbGl0ZSAgLCAiNDE1Iik7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6
ZGVmYXVsdF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICwgIjQxNiIpOwotCi0gIG1lc3NhZ2UtPlNl
dEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9uZXN0ZWRfZW51bV9leHRlbnNpb25fbGl0ZSAs
IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNMaXRlOjpGT08gKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ZvcmVpZ25fZW51bV9leHRlbnNpb25fbGl0ZSwgdW5pdHRl
c3Q6OkZPUkVJR05fTElURV9GT08gICAgICApOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5p
dHRlc3Q6OmRlZmF1bHRfaW1wb3J0X2VudW1fZXh0ZW5zaW9uX2xpdGUgLCB1bml0dGVzdF9pbXBv
cnQ6OklNUE9SVF9MSVRFX0ZPTyk7Ci0KLQotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRl
c3Q6Om9uZW9mX3VpbnQzMl9leHRlbnNpb25fbGl0ZSwgNjAxKTsKLSAgbWVzc2FnZS0+TXV0YWJs
ZUV4dGVuc2lvbih1bml0dGVzdDo6b25lb2ZfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUp
LT5zZXRfYmIoNjAyKTs7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6b25lb2Zf
c3RyaW5nX2V4dGVuc2lvbl9saXRlLCAiNjAzIik7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1
bml0dGVzdDo6b25lb2ZfYnl0ZXNfZXh0ZW5zaW9uX2xpdGUsICI2MDQiKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi12b2lkIFRlc3RVdGlsTGl0ZTo6TW9kaWZ5UmVwZWF0ZWRFeHRlbnNpb25zKAot
ICAgIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9uc0xpdGUqIG1lc3NhZ2UpIHsKLSAgbWVzc2Fn
ZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb25fbGl0ZSAg
ICwgMSwgNTAxKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9p
bnQ2NF9leHRlbnNpb25fbGl0ZSAgICwgMSwgNTAyKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICwgMSwgNTAzKTsKLSAg
bWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9u
X2xpdGUgICwgMSwgNTA0KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBl
YXRlZF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUgICwgMSwgNTA1KTsKLSAgbWVzc2FnZS0+U2V0RXh0
ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICwgMSwgNTA2
KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDMyX2V4
dGVuc2lvbl9saXRlICwgMSwgNTA3KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lvbl9saXRlICwgMSwgNTA4KTsKLSAgbWVzc2FnZS0+
U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSwg
MSwgNTA5KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zZml4
ZWQ2NF9leHRlbnNpb25fbGl0ZSwgMSwgNTEwKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpyZXBlYXRlZF9mbG9hdF9leHRlbnNpb25fbGl0ZSAgICwgMSwgNTExKTsKLSAgbWVz
c2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9kb3VibGVfZXh0ZW5zaW9uX2xp
dGUgICwgMSwgNTEyKTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRl
ZF9ib29sX2V4dGVuc2lvbl9saXRlICAgICwgMSwgdHJ1ZSk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVu
c2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbl9saXRlICAsIDEsICI1MTUi
KTsKLSAgbWVzc2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9ieXRlc19leHRl
bnNpb25fbGl0ZSAgICwgMSwgIjUxNiIpOwotCi0gIG1lc3NhZ2UtPk11dGFibGVFeHRlbnNpb24o
dW5pdHRlc3Q6OnJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uX2xpdGUgICAgICAgICAgICwgMSktPnNl
dF9hKDUxNyk7Ci0gIG1lc3NhZ2UtPk11dGFibGVFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVk
X25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICwgMSktPnNldF9iYig1MTgpOwotICBtZXNz
YWdlLT5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2Vf
ZXh0ZW5zaW9uX2xpdGUsIDEpLT5zZXRfYyg1MTkpOwotICBtZXNzYWdlLT5NdXRhYmxlRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAsIDEp
LT5zZXRfZCg1MjApOwotICBtZXNzYWdlLT5NdXRhYmxlRXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBl
YXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgICAsIDEpLT5zZXRfYmIoNTI3KTsKLQot
ICBtZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4
dGVuc2lvbl9saXRlICwgMSwgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlc0xpdGU6OkZPTyApOwotICBt
ZXNzYWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRl
bnNpb25fbGl0ZSwgMSwgdW5pdHRlc3Q6OkZPUkVJR05fTElURV9GT08gICAgICApOwotICBtZXNz
YWdlLT5TZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9lbnVtX2V4dGVuc2lv
bl9saXRlICwgMSwgdW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfTElURV9GT08pOwotCi19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbExpdGU6OkV4cGVjdEFsbEV4dGVuc2lvbnNTZXQo
Ci0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zTGl0ZSYgbWVzc2FnZSkgewot
ICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW50
MzJfZXh0ZW5zaW9uX2xpdGUgICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVD
VF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF91aW50MzJfZXh0
ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0
dGVzdDo6b3B0aW9uYWxfdWludDY0X2V4dGVuc2lvbl9saXRlICApKTsKLSAgRVhQRUNUX1RSVUUo
bWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NpbnQzMl9leHRlbnNpb25f
bGl0ZSAgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0Ojpv
cHRpb25hbF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZml4ZWQzMl9leHRlbnNpb25fbGl0ZSAp
KTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSkpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfc2ZpeGVk
NjRfZXh0ZW5zaW9uX2xpdGUpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24o
dW5pdHRlc3Q6Om9wdGlvbmFsX2Zsb2F0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVDVF9U
UlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9kb3VibGVfZXh0ZW5z
aW9uX2xpdGUgICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVz
dDo6b3B0aW9uYWxfYm9vbF9leHRlbnNpb25fbGl0ZSAgICApKTsKLSAgRVhQRUNUX1RSVUUobWVz
c2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3N0cmluZ19leHRlbnNpb25fbGl0
ZSAgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRp
b25hbF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICkpOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uu
SGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbGdyb3VwX2V4dGVuc2lvbl9saXRlICAgICAg
ICAgICAgICAgICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICAgICAgICkpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWln
bl9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICAgICAgKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2Uu
SGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25f
bGl0ZSAgICAgICApKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSkpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfbGF6eV9t
ZXNzYWdlX2V4dGVuc2lvbl9saXRlICAgICAgICAgKSk7Ci0KLSAgRVhQRUNUX1RSVUUobWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsZ3JvdXBfZXh0ZW5zaW9uX2xpdGUgICAg
ICAgICAgICAgICAgICkuaGFzX2EoKSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAg
ICApLmhhc19iYigpKTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICkuaGFzX2Mo
KSk7Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25h
bF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICApLmhhc19kKCkpOwotICBFWFBF
Q1RfVFJVRShtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfcHVibGljX2lt
cG9ydF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlKS5oYXNfZSgpKTsKLSAgRVhQRUNUX1RSVUUobWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2xhenlfbWVzc2FnZV9leHRlbnNp
b25fbGl0ZSAgICAgICAgICkuaGFzX2JiKCkpOwotCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UuSGFz
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfZW51bV9leHRlbnNpb25fbGl0ZSAp
KTsKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X2ZvcmVpZ25fZW51bV9leHRlbnNpb25fbGl0ZSkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhh
c0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0X2VudW1fZXh0ZW5zaW9uX2xpdGUg
KSk7Ci0KLQotICBFWFBFQ1RfRVEoMTAxICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpvcHRpb25hbF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICkpOwotICBFWFBFQ1RfRVEoMTAyICAs
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbnQ2NF9leHRlbnNpb25f
bGl0ZSAgICkpOwotICBFWFBFQ1RfRVEoMTAzICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpvcHRpb25hbF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoMTA0
ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF91aW50NjRfZXh0ZW5z
aW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoMTA1ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpvcHRpb25hbF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEo
MTA2ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9zaW50NjRfZXh0
ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoMTA3ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpvcHRpb25hbF9maXhlZDMyX2V4dGVuc2lvbl9saXRlICkpOwotICBFWFBFQ1Rf
RVEoMTA4ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9maXhlZDY0
X2V4dGVuc2lvbl9saXRlICkpOwotICBFWFBFQ1RfRVEoMTA5ICAsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSkpOwotICBFWFBF
Q1RfRVEoMTEwICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9zZml4
ZWQ2NF9leHRlbnNpb25fbGl0ZSkpOwotICBFWFBFQ1RfRVEoMTExICAsIG1lc3NhZ2UuR2V0RXh0
ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9mbG9hdF9leHRlbnNpb25fbGl0ZSAgICkpOwotICBF
WFBFQ1RfRVEoMTEyICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9k
b3VibGVfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEodHJ1ZSAsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9ib29sX2V4dGVuc2lvbl9saXRlICAgICkpOwot
ICBFWFBFQ1RfRVEoIjExNSIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25h
bF9zdHJpbmdfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoIjExNiIsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICkp
OwotCi0gIEVYUEVDVF9FUSgxMTcsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRp
b25hbGdyb3VwX2V4dGVuc2lvbl9saXRlICAgICAgICAgICAgICAgICApLmEoKSk7Ci0gIEVYUEVD
VF9FUSgxMTgsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRf
bWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICApLmJiKCkpOwotICBFWFBFQ1RfRVEoMTE5LCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlX2V4
dGVuc2lvbl9saXRlICAgICAgKS5jKCkpOwotICBFWFBFQ1RfRVEoMTIwLCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUg
ICAgICAgKS5kKCkpOwotICBFWFBFQ1RfRVEoMTI2LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6b3B0aW9uYWxfcHVibGljX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlKS5lKCkp
OwotICBFWFBFQ1RfRVEoMTI3LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9u
YWxfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICAgICAgICAgKS5iYigpKTsKLQotICBFWFBF
Q1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlc0xpdGU6OkJBWiAsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfZW51bV9leHRlbnNpb25fbGl0ZSApKTsKLSAg
RVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0xJVEVfQkFaICAgICAgLCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbl9saXRlKSk7
Ci0gIEVYUEVDVF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9MSVRFX0JBWiwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ltcG9ydF9lbnVtX2V4dGVuc2lvbl9saXRl
ICkpOwotCi0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNp
b25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQ2
NF9leHRlbnNpb25fbGl0ZSAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50NjRf
ZXh0ZW5zaW9uX2xpdGUgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXpl
KHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50NjRfZXh0
ZW5zaW9uX2xpdGUgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVu
aXR0ZXN0OjpyZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbl9saXRlICkpOwotICBBU1NFUlRfRVEo
MiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVu
c2lvbl9saXRlICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0
ZXN0OjpyZXBlYXRlZF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSkpOwotICBBU1NFUlRfRVEoMiwg
bWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zZml4ZWQ2NF9leHRlbnNp
b25fbGl0ZSkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9mbG9hdF9leHRlbnNpb25fbGl0ZSAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9kb3VibGVfZXh0ZW5zaW9uX2xp
dGUgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9ib29sX2V4dGVuc2lvbl9saXRlICAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uX2xpdGUg
ICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBl
YXRlZF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICkpOwotCi0gIEFTU0VSVF9FUSgyLCBtZXNzYWdl
LkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uX2xpdGUgICAg
ICAgICAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSApKTsKLSAgQVNTRVJUX0VR
KDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWlnbl9tZXNz
YWdlX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNp
emUodW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9s
YXp5X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2Uu
RXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uX2xp
dGUgICAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6
OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNpb25fbGl0ZSAgICkpOwotICBBU1NFUlRfRVEo
MiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfZW51bV9l
eHRlbnNpb25fbGl0ZSAgICApKTsKLQotCi0gIEVYUEVDVF9FUSgyMDEgICwgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbl9saXRlICAgLCAwKSk7
Ci0gIEVYUEVDVF9FUSgyMDIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVh
dGVkX2ludDY0X2V4dGVuc2lvbl9saXRlICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDMgICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3VpbnQzMl9leHRlbnNpb25fbGl0
ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDQgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX3VpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgy
MDUgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQzMl9leHRl
bnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDYgICwgbWVzc2FnZS5HZXRFeHRlbnNp
b24odW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVY
UEVDVF9FUSgyMDcgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Zp
eGVkMzJfZXh0ZW5zaW9uX2xpdGUgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDggICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUgLCAw
KSk7Ci0gIEVYUEVDVF9FUSgyMDkgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJl
cGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbl9saXRlLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMTAgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVuc2lv
bl9saXRlLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMTEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lvbl9saXRlICAgLCAwKSk7Ci0gIEVYUEVDVF9F
USgyMTIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2RvdWJsZV9l
eHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSh0cnVlICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Jvb2xfZXh0ZW5zaW9uX2xpdGUgICAgLCAwKSk7Ci0g
IEVYUEVDVF9FUSgiMjE1IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVk
X3N0cmluZ19leHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgiMjE2IiwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2J5dGVzX2V4dGVuc2lvbl9saXRlICAg
LCAwKSk7Ci0KLSAgRVhQRUNUX0VRKDIxNywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uX2xpdGUgICAgICAgICAgICwgMCkuYSgpKTsKLSAgRVhQ
RUNUX0VRKDIxOCwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICwgMCkuYmIoKSk7Ci0gIEVYUEVDVF9FUSgyMTksIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0
ZW5zaW9uX2xpdGUsIDApLmMoKSk7Ci0gIEVYUEVDVF9FUSgyMjAsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAsIDAp
LmQoKSk7Ci0gIEVYUEVDVF9FUSgyMjcsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgICAsIDApLmJiKCkpOwotCi0gIEVY
UEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZTo6QkFSICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbl9saXRlICwgMCkp
OwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fTElURV9CQVIgICAgICAsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uX2xp
dGUsIDApKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0xJVEVfQkFSLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5z
aW9uX2xpdGUgLCAwKSk7Ci0KLQotICBFWFBFQ1RfRVEoMzAxICAsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICwgMSkpOwotICBF
WFBFQ1RfRVEoMzAyICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9p
bnQ2NF9leHRlbnNpb25fbGl0ZSAgICwgMSkpOwotICBFWFBFQ1RfRVEoMzAzICAsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICwg
MSkpOwotICBFWFBFQ1RfRVEoMzA0ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uX2xpdGUgICwgMSkpOwotICBFWFBFQ1RfRVEoMzA1ICAs
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9u
X2xpdGUgICwgMSkpOwotICBFWFBFQ1RfRVEoMzA2ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVu
aXR0ZXN0OjpyZXBlYXRlZF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICwgMSkpOwotICBFWFBFQ1Rf
RVEoMzA3ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDMy
X2V4dGVuc2lvbl9saXRlICwgMSkpOwotICBFWFBFQ1RfRVEoMzA4ICAsIG1lc3NhZ2UuR2V0RXh0
ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lvbl9saXRlICwgMSkpOwot
ICBFWFBFQ1RfRVEoMzA5ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRl
ZF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSwgMSkpOwotICBFWFBFQ1RfRVEoMzEwICAsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zZml4ZWQ2NF9leHRlbnNpb25fbGl0
ZSwgMSkpOwotICBFWFBFQ1RfRVEoMzExICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0
OjpyZXBlYXRlZF9mbG9hdF9leHRlbnNpb25fbGl0ZSAgICwgMSkpOwotICBFWFBFQ1RfRVEoMzEy
ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9kb3VibGVfZXh0ZW5z
aW9uX2xpdGUgICwgMSkpOwotICBFWFBFQ1RfRVEoZmFsc2UsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpyZXBlYXRlZF9ib29sX2V4dGVuc2lvbl9saXRlICAgICwgMSkpOwotICBFWFBF
Q1RfRVEoIjMxNSIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJp
bmdfZXh0ZW5zaW9uX2xpdGUgICwgMSkpOwotICBFWFBFQ1RfRVEoIjMxNiIsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICwgMSkp
OwotCi0gIEVYUEVDVF9FUSgzMTcsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBl
YXRlZGdyb3VwX2V4dGVuc2lvbl9saXRlICAgICAgICAgICAsIDEpLmEoKSk7Ci0gIEVYUEVDVF9F
USgzMTgsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZV9leHRlbnNpb25fbGl0ZSAsIDEpLmJiKCkpOwotICBFWFBFQ1RfRVEoMzE5LCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lv
bl9saXRlLCAxKS5jKCkpOwotICBFWFBFQ1RfRVEoMzIwLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgLCAxKS5kKCkp
OwotICBFWFBFQ1RfRVEoMzI3LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0
ZWRfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICAgLCAxKS5iYigpKTsKLQotICBFWFBFQ1Rf
RVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlc0xpdGU6OkJBWiAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb25fbGl0ZSAsIDEpKTsKLSAg
RVhQRUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0xJVEVfQkFaICAgICAgLCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbl9saXRlLCAx
KSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9MSVRFX0JBWiwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9lbnVtX2V4dGVuc2lvbl9s
aXRlICwgMSkpOwotCi0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhh
c0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICkpOwot
ICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9pbnQ2
NF9leHRlbnNpb25fbGl0ZSAgICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lv
bih1bml0dGVzdDo6ZGVmYXVsdF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1Rf
VFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF91aW50NjRfZXh0ZW5z
aW9uX2xpdGUgICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVz
dDo6ZGVmYXVsdF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfVFJVRShtZXNz
YWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUg
ICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVs
dF9maXhlZDMyX2V4dGVuc2lvbl9saXRlICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4
dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9maXhlZDY0X2V4dGVuc2lvbl9saXRlICkpOwotICBF
WFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9zZml4ZWQz
Ml9leHRlbnNpb25fbGl0ZSkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1
bml0dGVzdDo6ZGVmYXVsdF9zZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSkpOwotICBFWFBFQ1RfVFJV
RShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9mbG9hdF9leHRlbnNpb25f
bGl0ZSAgICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6
ZGVmYXVsdF9kb3VibGVfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Lkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9ib29sX2V4dGVuc2lvbl9saXRlICAgICkp
OwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9z
dHJpbmdfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVu
c2lvbih1bml0dGVzdDo6ZGVmYXVsdF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICkpOwotCi0gIEVY
UEVDVF9UUlVFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X25lc3RlZF9l
bnVtX2V4dGVuc2lvbl9saXRlICkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lv
bih1bml0dGVzdDo6ZGVmYXVsdF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uX2xpdGUpKTsKLSAgRVhQ
RUNUX1RSVUUobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfaW1wb3J0X2Vu
dW1fZXh0ZW5zaW9uX2xpdGUgKSk7Ci0KLQotICBFWFBFQ1RfRVEoNDAxICAsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ludDMyX2V4dGVuc2lvbl9saXRlICAgKSk7Ci0g
IEVYUEVDVF9FUSg0MDIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRf
aW50NjRfZXh0ZW5zaW9uX2xpdGUgICApKTsKLSAgRVhQRUNUX0VRKDQwMyAgLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwot
ICBFWFBFQ1RfRVEoNDA0ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0
X3VpbnQ2NF9leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSg0MDUgICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc2ludDMyX2V4dGVuc2lvbl9saXRlICApKTsK
LSAgRVhQRUNUX0VRKDQwNiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVs
dF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoNDA3ICAsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUgKSk7
Ci0gIEVYUEVDVF9FUSg0MDggICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1
bHRfZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSApKTsKLSAgRVhQRUNUX0VRKDQwOSAgLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSkp
OwotICBFWFBFQ1RfRVEoNDEwICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZh
dWx0X3NmaXhlZDY0X2V4dGVuc2lvbl9saXRlKSk7Ci0gIEVYUEVDVF9FUSg0MTEgICwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfZmxvYXRfZXh0ZW5zaW9uX2xpdGUgICAp
KTsKLSAgRVhQRUNUX0VRKDQxMiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVm
YXVsdF9kb3VibGVfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoZmFsc2UsIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2Jvb2xfZXh0ZW5zaW9uX2xpdGUgICAg
KSk7Ci0gIEVYUEVDVF9FUSgiNDE1IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRl
ZmF1bHRfc3RyaW5nX2V4dGVuc2lvbl9saXRlICApKTsKLSAgRVhQRUNUX0VRKCI0MTYiLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9ieXRlc19leHRlbnNpb25fbGl0ZSAg
ICkpOwotCi0gIEVYUEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZTo6Rk9PICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfbmVzdGVkX2VudW1fZXh0ZW5zaW9u
X2xpdGUgKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0ZPTyAgICAgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfZm9yZWlnbl9lbnVtX2V4dGVu
c2lvbl9saXRlKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9MSVRFX0ZP
TywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfaW1wb3J0X2VudW1fZXh0
ZW5zaW9uX2xpdGUgKSk7Ci0KLQotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1
bml0dGVzdDo6b25lb2ZfdWludDMyX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEVYUEVDVF9UUlVFKG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVvZl9uZXN0ZWRfbWVzc2FnZV9leHRlbnNp
b25fbGl0ZSkuaGFzX2JiKCkpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1
bml0dGVzdDo6b25lb2Zfc3RyaW5nX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEVYUEVDVF9UUlVFKG1l
c3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVvZl9ieXRlc19leHRlbnNpb25fbGl0ZSkp
OwotCi0gIEVYUEVDVF9FUSg2MDEsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvbmVv
Zl91aW50MzJfZXh0ZW5zaW9uX2xpdGUpKTsKLSAgRVhQRUNUX0VRKDYwMiwgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6Om9uZW9mX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlKS5i
YigpKTsKLSAgRVhQRUNUX0VRKCI2MDMiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6
b25lb2Zfc3RyaW5nX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEVYUEVDVF9FUSgiNjA0IiwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9uZW9mX2J5dGVzX2V4dGVuc2lvbl9saXRlKSk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbExpdGU6OkV4cGVjdEV4dGVuc2lvbnND
bGVhcigKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnNMaXRlJiBtZXNzYWdl
KSB7Ci0gIHN0cmluZyBzZXJpYWxpemVkOwotICBBU1NFUlRfVFJVRShtZXNzYWdlLlNlcmlhbGl6
ZVRvU3RyaW5nKCZzZXJpYWxpemVkKSk7Ci0gIEVYUEVDVF9FUSgiIiwgc2VyaWFsaXplZCk7Ci0g
IEVYUEVDVF9FUSgwLCBtZXNzYWdlLkJ5dGVTaXplKCkpOwotCi0gIC8vIGhhc19ibGFoKCkgc2hv
dWxkIGluaXRpYWxseSBiZSBmYWxzZSBmb3IgYWxsIG9wdGlvbmFsIGZpZWxkcy4KLSAgRVhQRUNU
X0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbnQzMl9leHRl
bnNpb25fbGl0ZSAgICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5p
dHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVDVF9GQUxT
RShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfdWludDMyX2V4dGVuc2lv
bl9saXRlICApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0
OjpvcHRpb25hbF91aW50NjRfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRkFMU0UobWVz
c2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NpbnQzMl9leHRlbnNpb25fbGl0
ZSAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0
aW9uYWxfc2ludDY0X2V4dGVuc2lvbl9saXRlICApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2Uu
SGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9maXhlZDMyX2V4dGVuc2lvbl9saXRlICkp
OwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4
dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfc2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUpKTsKLSAg
RVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9zZml4
ZWQ2NF9leHRlbnNpb25fbGl0ZSkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX2Zsb2F0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfZG91YmxlX2V4
dGVuc2lvbl9saXRlICApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVu
aXR0ZXN0OjpvcHRpb25hbF9ib29sX2V4dGVuc2lvbl9saXRlICAgICkpOwotICBFWFBFQ1RfRkFM
U0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3N0cmluZ19leHRlbnNp
b25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVz
dDo6b3B0aW9uYWxfYnl0ZXNfZXh0ZW5zaW9uX2xpdGUgICApKTsKLQotICBFWFBFQ1RfRkFMU0Uo
bWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsZ3JvdXBfZXh0ZW5zaW9uX2xp
dGUgICAgICAgICAgICAgICAgICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICAgICAg
ICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlv
bmFsX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICkpOwotICBFWFBFQ1RfRkFM
U0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ltcG9ydF9tZXNzYWdl
X2V4dGVuc2lvbl9saXRlICAgICAgICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25f
bGl0ZSkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9w
dGlvbmFsX2xhenlfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICAgICkpOwotCi0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfbmVzdGVkX2Vu
dW1fZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lv
bih1bml0dGVzdDo6b3B0aW9uYWxfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEVY
UEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW1wb3J0
X2VudW1fZXh0ZW5zaW9uX2xpdGUgKSk7Ci0KLQotICAvLyBPcHRpb25hbCBmaWVsZHMgd2l0aG91
dCBkZWZhdWx0cyBhcmUgc2V0IHRvIHplcm8gb3Igc29tZXRoaW5nIGxpa2UgaXQuCi0gIEVYUEVD
VF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDMy
X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVY
UEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3Vp
bnQzMl9leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3VpbnQ2NF9leHRlbnNpb25fbGl0ZSAgKSk7Ci0g
IEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X3NpbnQzMl9leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NpbnQ2NF9leHRlbnNpb25fbGl0ZSAgKSk7
Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlv
bmFsX2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUg
KSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9w
dGlvbmFsX3NmaXhlZDMyX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3NmaXhlZDY0X2V4dGVuc2lvbl9s
aXRlKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
Om9wdGlvbmFsX2Zsb2F0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVDVF9FUSgwICAgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2RvdWJsZV9leHRlbnNpb25f
bGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUShmYWxzZSwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6Om9wdGlvbmFsX2Jvb2xfZXh0ZW5zaW9uX2xpdGUgICAgKSk7Ci0gIEVYUEVDVF9FUSgiIiAg
ICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX3N0cmluZ19leHRlbnNp
b25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSgiIiAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6Om9wdGlvbmFsX2J5dGVzX2V4dGVuc2lvbl9saXRlICAgKSk7Ci0KLSAgLy8gRW1iZWRk
ZWQgbWVzc2FnZXMgc2hvdWxkIGFsc28gYmUgY2xlYXIuCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxncm91cF9leHRlbnNpb25fbGl0ZSAgICAg
ICAgICAgICAgICAgKS5oYXNfYSgpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAg
ICApLmhhc19iYigpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpvcHRpb25hbF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgICAgICApLmhhc19j
KCkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlv
bmFsX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICAgICAgICkuaGFzX2QoKSk7Ci0gIEVY
UEVDVF9GQUxTRShtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfcHVibGlj
X2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlKS5oYXNfZSgpKTsKLSAgRVhQRUNUX0ZBTFNF
KG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9sYXp5X21lc3NhZ2VfZXh0
ZW5zaW9uX2xpdGUgICAgICAgICApLmhhc19iYigpKTsKLQotICBFWFBFQ1RfRVEoMCwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsZ3JvdXBfZXh0ZW5zaW9uX2xpdGUgICAg
ICAgICAgICAgICAgICkuYSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICAp
LmJiKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9w
dGlvbmFsX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICkuYygpKTsKLSAgRVhQ
RUNUX0VRKDAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbXBvcnRf
bWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICApLmQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfcHVibGljX2ltcG9ydF9tZXNzYWdl
X2V4dGVuc2lvbl9saXRlKS5lKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5HZXRFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX2xhenlfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICAgICAg
ICkuYmIoKSk7Ci0KLSAgLy8gRW51bXMgd2l0aG91dCBkZWZhdWx0cyBhcmUgc2V0IHRvIHRoZSBm
aXJzdCB2YWx1ZSBpbiB0aGUgZW51bS4KLSAgRVhQRUNUX0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlw
ZXNMaXRlOjpGT08gLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6b3B0aW9uYWxfbmVz
dGVkX2VudW1fZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlH
Tl9MSVRFX0ZPTyAgICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFs
X2ZvcmVpZ25fZW51bV9leHRlbnNpb25fbGl0ZSkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3RfaW1w
b3J0OjpJTVBPUlRfTElURV9GT08sIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRp
b25hbF9pbXBvcnRfZW51bV9leHRlbnNpb25fbGl0ZSApKTsKLQotCi0gIC8vIFJlcGVhdGVkIGZp
ZWxkcyBhcmUgZW1wdHkuCi0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5p
dHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVDVF9FUSgw
LCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ludDY0X2V4dGVuc2lv
bl9saXRlICAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRl
c3Q6OnJlcGVhdGVkX3VpbnQzMl9leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBt
ZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3VpbnQ2NF9leHRlbnNpb25f
bGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6
OnJlcGVhdGVkX3NpbnQzMl9leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNz
YWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb25fbGl0
ZSAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJl
cGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdl
LkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUg
KSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVh
dGVkX3NmaXhlZDMyX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4
dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVuc2lvbl9saXRlKSk7
Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVk
X2Zsb2F0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVu
c2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb25fbGl0ZSAgKSk7Ci0g
IEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2Jv
b2xfZXh0ZW5zaW9uX2xpdGUgICAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lv
blNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX3N0cmluZ19leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEVY
UEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2J5dGVz
X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0KLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9u
U2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRncm91cF9leHRlbnNpb25fbGl0ZSAgICAgICAgICAgKSk7
Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVk
X25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2Fn
ZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5z
aW9uX2xpdGUpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVz
dDo6cmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVDVF9F
USgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2xhenlfbWVzc2Fn
ZV9leHRlbnNpb25fbGl0ZSAgICkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb25fbGl0ZSAgICApKTsK
LSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRf
Zm9yZWlnbl9lbnVtX2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdl
LkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9lbnVtX2V4dGVuc2lvbl9s
aXRlICAgICkpOwotCi0KLSAgLy8gaGFzX2JsYWgoKSBzaG91bGQgYWxzbyBiZSBmYWxzZSBmb3Ig
YWxsIGRlZmF1bHQgZmllbGRzLgotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24o
dW5pdHRlc3Q6OmRlZmF1bHRfaW50MzJfZXh0ZW5zaW9uX2xpdGUgICApKTsKLSAgRVhQRUNUX0ZB
TFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ludDY0X2V4dGVuc2lv
bl9saXRlICAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVz
dDo6ZGVmYXVsdF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRkFMU0UobWVz
c2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfdWludDY0X2V4dGVuc2lvbl9saXRl
ICApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZh
dWx0X3NpbnQzMl9leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhh
c0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICkpOwot
ICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfZml4
ZWQzMl9leHRlbnNpb25fbGl0ZSApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9zZml4ZWQzMl9l
eHRlbnNpb25fbGl0ZSkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5p
dHRlc3Q6OmRlZmF1bHRfc2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUpKTsKLSAgRVhQRUNUX0ZBTFNF
KG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2Zsb2F0X2V4dGVuc2lvbl9s
aXRlICAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6
ZGVmYXVsdF9kb3VibGVfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2Fn
ZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfYm9vbF9leHRlbnNpb25fbGl0ZSAgICAp
KTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0
X3N0cmluZ19leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4
dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICkpOwotCi0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9uZXN0
ZWRfZW51bV9leHRlbnNpb25fbGl0ZSApKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuSGFzRXh0
ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ZvcmVpZ25fZW51bV9leHRlbnNpb25fbGl0ZSkpOwot
ICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfaW1w
b3J0X2VudW1fZXh0ZW5zaW9uX2xpdGUgKSk7Ci0KLQotICAvLyBGaWVsZHMgd2l0aCBkZWZhdWx0
cyBoYXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzIChkdWgpLgotICBFWFBFQ1RfRVEoIDQxICAgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfaW50MzJfZXh0ZW5zaW9uX2xp
dGUgICApKTsKLSAgRVhQRUNUX0VRKCA0MiAgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0
ZXN0OjpkZWZhdWx0X2ludDY0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVDVF9FUSggNDMg
ICAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF91aW50MzJfZXh0ZW5z
aW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoIDQ0ICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OmRlZmF1bHRfdWludDY0X2V4dGVuc2lvbl9saXRlICApKTsKLSAgRVhQRUNUX0VR
KC00NSAgICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3NpbnQzMl9l
eHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSggNDYgICAgLCBtZXNzYWdlLkdldEV4dGVu
c2lvbih1bml0dGVzdDo6ZGVmYXVsdF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBF
Q1RfRVEoIDQ3ICAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfZml4
ZWQzMl9leHRlbnNpb25fbGl0ZSApKTsKLSAgRVhQRUNUX0VRKCA0OCAgICAsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUgKSk7Ci0g
IEVYUEVDVF9FUSggNDkgICAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVs
dF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSkpOwotICBFWFBFQ1RfRVEoLTUwICAgICwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfc2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUp
KTsKLSAgRVhQRUNUX0VRKCA1MS41ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpk
ZWZhdWx0X2Zsb2F0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVDVF9FUSggNTJlMyAgLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6ZGVmYXVsdF9kb3VibGVfZXh0ZW5zaW9uX2xp
dGUgICkpOwotICBFWFBFQ1RfRVEodHJ1ZSAgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OmRlZmF1bHRfYm9vbF9leHRlbnNpb25fbGl0ZSAgICApKTsKLSAgRVhQRUNUX0VRKCJoZWxs
byIsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpkZWZhdWx0X3N0cmluZ19leHRlbnNp
b25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSgid29ybGQiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6ZGVmYXVsdF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICkpOwotCi0gIEVYUEVDVF9F
USh1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZTo6QkFSICwgbWVzc2FnZS5HZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OmRlZmF1bHRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVD
VF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0JBUiAgICAgICwgbWVzc2FnZS5HZXRFeHRlbnNp
b24odW5pdHRlc3Q6OmRlZmF1bHRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEVY
UEVDVF9FUSh1bml0dGVzdF9pbXBvcnQ6OklNUE9SVF9MSVRFX0JBUiwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6OmRlZmF1bHRfaW1wb3J0X2VudW1fZXh0ZW5zaW9uX2xpdGUgKSk7Ci0K
LQotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5IYXNFeHRlbnNpb24odW5pdHRlc3Q6Om9uZW9mX3Vp
bnQzMl9leHRlbnNpb25fbGl0ZSkpOwotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5HZXRFeHRlbnNp
b24odW5pdHRlc3Q6Om9uZW9mX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlKS5oYXNfYmIo
KSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVuc2lvbih1bml0dGVzdDo6b25lb2Zf
c3RyaW5nX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLkhhc0V4dGVu
c2lvbih1bml0dGVzdDo6b25lb2ZfYnl0ZXNfZXh0ZW5zaW9uX2xpdGUpKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi12b2lkIFRlc3RVdGlsTGl0ZTo6RXhwZWN0UmVwZWF0ZWRFeHRlbnNpb25zTW9k
aWZpZWQoCi0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zTGl0ZSYgbWVzc2Fn
ZSkgewotICAvLyBNb2RpZnlSZXBlYXRlZEZpZWxkcyBvbmx5IHNldHMgdGhlIHNlY29uZCByZXBl
YXRlZCBlbGVtZW50IG9mIGVhY2gKLSAgLy8gZmllbGQuICBJbiBhZGRpdGlvbiB0byB2ZXJpZnlp
bmcgdGhpcywgd2UgYWxzbyB2ZXJpZnkgdGhhdCB0aGUgZmlyc3QKLSAgLy8gZWxlbWVudCBhbmQg
c2l6ZSB3ZXJlICpub3QqIG1vZGlmaWVkLgotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNp
b25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbnQ2
NF9leHRlbnNpb25fbGl0ZSAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25T
aXplKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF91aW50NjRf
ZXh0ZW5zaW9uX2xpdGUgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXpl
KHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zaW50NjRfZXh0
ZW5zaW9uX2xpdGUgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVu
aXR0ZXN0OjpyZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbl9saXRlICkpOwotICBBU1NFUlRfRVEo
MiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9maXhlZDY0X2V4dGVu
c2lvbl9saXRlICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0
ZXN0OjpyZXBlYXRlZF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSkpOwotICBBU1NFUlRfRVEoMiwg
bWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zZml4ZWQ2NF9leHRlbnNp
b25fbGl0ZSkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9mbG9hdF9leHRlbnNpb25fbGl0ZSAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVz
c2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9kb3VibGVfZXh0ZW5zaW9uX2xp
dGUgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9ib29sX2V4dGVuc2lvbl9saXRlICAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2Fn
ZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9zdHJpbmdfZXh0ZW5zaW9uX2xpdGUg
ICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBl
YXRlZF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICkpOwotCi0gIEFTU0VSVF9FUSgyLCBtZXNzYWdl
LkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uX2xpdGUgICAg
ICAgICAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSApKTsKLSAgQVNTRVJUX0VR
KDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfZm9yZWlnbl9tZXNz
YWdlX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNp
emUodW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICkpOwot
ICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9s
YXp5X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2Uu
RXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uX2xp
dGUgICAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6
OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNpb25fbGl0ZSAgICkpOwotICBBU1NFUlRfRVEo
MiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfZW51bV9l
eHRlbnNpb25fbGl0ZSAgICApKTsKLQotCi0gIEVYUEVDVF9FUSgyMDEgICwgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbl9saXRlICAgLCAwKSk7
Ci0gIEVYUEVDVF9FUSgyMDIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVh
dGVkX2ludDY0X2V4dGVuc2lvbl9saXRlICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDMgICwgbWVz
c2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3VpbnQzMl9leHRlbnNpb25fbGl0
ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDQgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnJlcGVhdGVkX3VpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgy
MDUgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQzMl9leHRl
bnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDYgICwgbWVzc2FnZS5HZXRFeHRlbnNp
b24odW5pdHRlc3Q6OnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVY
UEVDVF9FUSgyMDcgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Zp
eGVkMzJfZXh0ZW5zaW9uX2xpdGUgLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMDggICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUgLCAw
KSk7Ci0gIEVYUEVDVF9FUSgyMDkgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJl
cGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbl9saXRlLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMTAgICwg
bWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVuc2lv
bl9saXRlLCAwKSk7Ci0gIEVYUEVDVF9FUSgyMTEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5p
dHRlc3Q6OnJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lvbl9saXRlICAgLCAwKSk7Ci0gIEVYUEVDVF9F
USgyMTIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2RvdWJsZV9l
eHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSh0cnVlICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2Jvb2xfZXh0ZW5zaW9uX2xpdGUgICAgLCAwKSk7Ci0g
IEVYUEVDVF9FUSgiMjE1IiwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVk
X3N0cmluZ19leHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSgiMjE2IiwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2J5dGVzX2V4dGVuc2lvbl9saXRlICAg
LCAwKSk7Ci0KLSAgRVhQRUNUX0VRKDIxNywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnJlcGVhdGVkZ3JvdXBfZXh0ZW5zaW9uX2xpdGUgICAgICAgICAgICwgMCkuYSgpKTsKLSAgRVhQ
RUNUX0VRKDIxOCwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICwgMCkuYmIoKSk7Ci0gIEVYUEVDVF9FUSgyMTksIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0
ZW5zaW9uX2xpdGUsIDApLmMoKSk7Ci0gIEVYUEVDVF9FUSgyMjAsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAsIDAp
LmQoKSk7Ci0gIEVYUEVDVF9FUSgyMjcsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpy
ZXBlYXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgICAsIDApLmJiKCkpOwotCi0gIEVY
UEVDVF9FUSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZTo6QkFSICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbl9saXRlICwgMCkp
OwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZPUkVJR05fTElURV9CQVIgICAgICAsIG1lc3NhZ2Uu
R2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uX2xp
dGUsIDApKTsKLSAgRVhQRUNUX0VRKHVuaXR0ZXN0X2ltcG9ydDo6SU1QT1JUX0xJVEVfQkFSLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5z
aW9uX2xpdGUgLCAwKSk7Ci0KLQotICAvLyBBY3R1YWxseSB2ZXJpZnkgdGhlIHNlY29uZCAobW9k
aWZpZWQpIGVsZW1lbnRzIG5vdy4KLSAgRVhQRUNUX0VRKDUwMSAgLCBtZXNzYWdlLkdldEV4dGVu
c2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uX2xpdGUgICAsIDEpKTsKLSAg
RVhQRUNUX0VRKDUwMiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRf
aW50NjRfZXh0ZW5zaW9uX2xpdGUgICAsIDEpKTsKLSAgRVhQRUNUX0VRKDUwMyAgLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfdWludDMyX2V4dGVuc2lvbl9saXRlICAs
IDEpKTsKLSAgRVhQRUNUX0VRKDUwNCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6
cmVwZWF0ZWRfdWludDY0X2V4dGVuc2lvbl9saXRlICAsIDEpKTsKLSAgRVhQRUNUX0VRKDUwNSAg
LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ludDMyX2V4dGVuc2lv
bl9saXRlICAsIDEpKTsKLSAgRVhQRUNUX0VRKDUwNiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6cmVwZWF0ZWRfc2ludDY0X2V4dGVuc2lvbl9saXRlICAsIDEpKTsKLSAgRVhQRUNU
X0VRKDUwNyAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZml4ZWQz
Ml9leHRlbnNpb25fbGl0ZSAsIDEpKTsKLSAgRVhQRUNUX0VRKDUwOCAgLCBtZXNzYWdlLkdldEV4
dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSAsIDEpKTsK
LSAgRVhQRUNUX0VRKDUwOSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0
ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUsIDEpKTsKLSAgRVhQRUNUX0VRKDUxMCAgLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uX2xp
dGUsIDEpKTsKLSAgRVhQRUNUX0VRKDUxMSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cmVwZWF0ZWRfZmxvYXRfZXh0ZW5zaW9uX2xpdGUgICAsIDEpKTsKLSAgRVhQRUNUX0VRKDUx
MiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfZG91YmxlX2V4dGVu
c2lvbl9saXRlICAsIDEpKTsKLSAgRVhQRUNUX0VRKHRydWUgLCBtZXNzYWdlLkdldEV4dGVuc2lv
bih1bml0dGVzdDo6cmVwZWF0ZWRfYm9vbF9leHRlbnNpb25fbGl0ZSAgICAsIDEpKTsKLSAgRVhQ
RUNUX0VRKCI1MTUiLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfc3Ry
aW5nX2V4dGVuc2lvbl9saXRlICAsIDEpKTsKLSAgRVhQRUNUX0VRKCI1MTYiLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uX2xpdGUgICAsIDEp
KTsKLQotICBFWFBFQ1RfRVEoNTE3LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVw
ZWF0ZWRncm91cF9leHRlbnNpb25fbGl0ZSAgICAgICAgICAgLCAxKS5hKCkpOwotICBFWFBFQ1Rf
RVEoNTE4LCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX21l
c3NhZ2VfZXh0ZW5zaW9uX2xpdGUgLCAxKS5iYigpKTsKLSAgRVhQRUNUX0VRKDUxOSwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNp
b25fbGl0ZSwgMSkuYygpKTsKLSAgRVhQRUNUX0VRKDUyMCwgbWVzc2FnZS5HZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlICwgMSkuZCgp
KTsKLSAgRVhQRUNUX0VRKDUyNywgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnJlcGVh
dGVkX2xhenlfbWVzc2FnZV9leHRlbnNpb25fbGl0ZSAgICwgMSkuYmIoKSk7Ci0KLSAgRVhQRUNU
X0VRKHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNMaXRlOjpGT08gLCBtZXNzYWdlLkdldEV4dGVuc2lv
bih1bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uX2xpdGUgLCAxKSk7Ci0g
IEVYUEVDVF9FUSh1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0ZPTyAgICAgICwgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6OnJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNpb25fbGl0ZSwg
MSkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3RfaW1wb3J0OjpJTVBPUlRfTElURV9GT08sIG1lc3Nh
Z2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpyZXBlYXRlZF9pbXBvcnRfZW51bV9leHRlbnNpb25f
bGl0ZSAsIDEpKTsKLQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgVGVzdFV0aWxMaXRlOjpT
ZXRQYWNrZWRFeHRlbnNpb25zKAotICAgIHVuaXR0ZXN0OjpUZXN0UGFja2VkRXh0ZW5zaW9uc0xp
dGUqIG1lc3NhZ2UpIHsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRf
aW50MzJfZXh0ZW5zaW9uX2xpdGUgICAsIDYwMSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1
bml0dGVzdDo6cGFja2VkX2ludDY0X2V4dGVuc2lvbl9saXRlICAgLCA2MDIpOwotICBtZXNzYWdl
LT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICwg
NjAzKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfdWludDY0X2V4
dGVuc2lvbl9saXRlICAsIDYwNCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6
cGFja2VkX3NpbnQzMl9leHRlbnNpb25fbGl0ZSAgLCA2MDUpOwotICBtZXNzYWdlLT5BZGRFeHRl
bnNpb24odW5pdHRlc3Q6OnBhY2tlZF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICwgNjA2KTsKLSAg
bWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZml4ZWQzMl9leHRlbnNpb25f
bGl0ZSAsIDYwNyk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2Zp
eGVkNjRfZXh0ZW5zaW9uX2xpdGUgLCA2MDgpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5p
dHRlc3Q6OnBhY2tlZF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSwgNjA5KTsKLSAgbWVzc2FnZS0+
QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUsIDYx
MCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2Zsb2F0X2V4dGVu
c2lvbl9saXRlICAgLCA2MTEpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBh
Y2tlZF9kb3VibGVfZXh0ZW5zaW9uX2xpdGUgICwgNjEyKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5z
aW9uKHVuaXR0ZXN0OjpwYWNrZWRfYm9vbF9leHRlbnNpb25fbGl0ZSAgICAsIHRydWUpOwotICBt
ZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9lbnVtX2V4dGVuc2lvbl9saXRl
LCB1bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0JBUik7Ci0gIC8vIGFkZCBhIHNlY29uZCBvbmUgb2Yg
ZWFjaCBmaWVsZAotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9pbnQz
Ml9leHRlbnNpb25fbGl0ZSAgICwgNzAxKTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0
ZXN0OjpwYWNrZWRfaW50NjRfZXh0ZW5zaW9uX2xpdGUgICAsIDcwMik7Ci0gIG1lc3NhZ2UtPkFk
ZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3VpbnQzMl9leHRlbnNpb25fbGl0ZSAgLCA3MDMp
OwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF91aW50NjRfZXh0ZW5z
aW9uX2xpdGUgICwgNzA0KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNr
ZWRfc2ludDMyX2V4dGVuc2lvbl9saXRlICAsIDcwNSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lv
bih1bml0dGVzdDo6cGFja2VkX3NpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCA3MDYpOwotICBtZXNz
YWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9maXhlZDMyX2V4dGVuc2lvbl9saXRl
ICwgNzA3KTsKLSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZml4ZWQ2
NF9leHRlbnNpb25fbGl0ZSAsIDcwOCk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVz
dDo6cGFja2VkX3NmaXhlZDMyX2V4dGVuc2lvbl9saXRlLCA3MDkpOwotICBtZXNzYWdlLT5BZGRF
eHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9zZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSwgNzEwKTsK
LSAgbWVzc2FnZS0+QWRkRXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZmxvYXRfZXh0ZW5zaW9u
X2xpdGUgICAsIDcxMSk7Ci0gIG1lc3NhZ2UtPkFkZEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2Vk
X2RvdWJsZV9leHRlbnNpb25fbGl0ZSAgLCA3MTIpOwotICBtZXNzYWdlLT5BZGRFeHRlbnNpb24o
dW5pdHRlc3Q6OnBhY2tlZF9ib29sX2V4dGVuc2lvbl9saXRlICAgICwgZmFsc2UpOwotICBtZXNz
YWdlLT5BZGRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9lbnVtX2V4dGVuc2lvbl9saXRlLCB1
bml0dGVzdDo6Rk9SRUlHTl9MSVRFX0JBWik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBU
ZXN0VXRpbExpdGU6Ok1vZGlmeVBhY2tlZEV4dGVuc2lvbnMoCi0gICAgdW5pdHRlc3Q6OlRlc3RQ
YWNrZWRFeHRlbnNpb25zTGl0ZSogbWVzc2FnZSkgewotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OnBhY2tlZF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICwgMSwgODAxKTsKLSAgbWVz
c2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfaW50NjRfZXh0ZW5zaW9uX2xpdGUg
ICAsIDEsIDgwMik7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3Vp
bnQzMl9leHRlbnNpb25fbGl0ZSAgLCAxLCA4MDMpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OnBhY2tlZF91aW50NjRfZXh0ZW5zaW9uX2xpdGUgICwgMSwgODA0KTsKLSAgbWVz
c2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ludDMyX2V4dGVuc2lvbl9saXRl
ICAsIDEsIDgwNSk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3Np
bnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAxLCA4MDYpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OnBhY2tlZF9maXhlZDMyX2V4dGVuc2lvbl9saXRlICwgMSwgODA3KTsKLSAgbWVz
c2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZml4ZWQ2NF9leHRlbnNpb25fbGl0
ZSAsIDEsIDgwOCk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3Nm
aXhlZDMyX2V4dGVuc2lvbl9saXRlLCAxLCA4MDkpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OnBhY2tlZF9zZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSwgMSwgODEwKTsKLSAgbWVz
c2FnZS0+U2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZmxvYXRfZXh0ZW5zaW9uX2xpdGUg
ICAsIDEsIDgxMSk7Ci0gIG1lc3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2Rv
dWJsZV9leHRlbnNpb25fbGl0ZSAgLCAxLCA4MTIpOwotICBtZXNzYWdlLT5TZXRFeHRlbnNpb24o
dW5pdHRlc3Q6OnBhY2tlZF9ib29sX2V4dGVuc2lvbl9saXRlICAgICwgMSwgdHJ1ZSk7Ci0gIG1l
c3NhZ2UtPlNldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2VudW1fZXh0ZW5zaW9uX2xpdGUg
ICAgLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Q6OkZPUkVJR05fTElURV9G
T08pOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgVGVzdFV0aWxMaXRlOjpFeHBlY3RQYWNr
ZWRFeHRlbnNpb25zU2V0KAotICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0UGFja2VkRXh0ZW5zaW9u
c0xpdGUmIG1lc3NhZ2UpIHsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1
bml0dGVzdDo6cGFja2VkX2ludDMyX2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEFTU0VSVF9FUSgy
LCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9pbnQ2NF9leHRlbnNpb25f
bGl0ZSAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpwYWNrZWRfdWludDMyX2V4dGVuc2lvbl9saXRlICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3Nh
Z2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX3VpbnQ2NF9leHRlbnNpb25fbGl0ZSAg
KSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tl
ZF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRl
bnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfc2ludDY0X2V4dGVuc2lvbl9saXRlICApKTsKLSAg
QVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX2ZpeGVk
MzJfZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNp
emUodW5pdHRlc3Q6OnBhY2tlZF9maXhlZDY0X2V4dGVuc2lvbl9saXRlICkpOwotICBBU1NFUlRf
RVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVkMzJfZXh0
ZW5zaW9uX2xpdGUpKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0
dGVzdDo6cGFja2VkX3NmaXhlZDY0X2V4dGVuc2lvbl9saXRlKSk7Ci0gIEFTU0VSVF9FUSgyLCBt
ZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9mbG9hdF9leHRlbnNpb25fbGl0
ZSAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0Ojpw
YWNrZWRfZG91YmxlX2V4dGVuc2lvbl9saXRlICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2Uu
RXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX2Jvb2xfZXh0ZW5zaW9uX2xpdGUgICAgKSk7
Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9l
bnVtX2V4dGVuc2lvbl9saXRlICAgICkpOwotCi0gIEVYUEVDVF9FUSg2MDEgICwgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICwgMCkp
OwotICBFWFBFQ1RfRVEoNjAyICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNr
ZWRfaW50NjRfZXh0ZW5zaW9uX2xpdGUgICAsIDApKTsKLSAgRVhQRUNUX0VRKDYwMyAgLCBtZXNz
YWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3VpbnQzMl9leHRlbnNpb25fbGl0ZSAg
LCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDQgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6
OnBhY2tlZF91aW50NjRfZXh0ZW5zaW9uX2xpdGUgICwgMCkpOwotICBFWFBFQ1RfRVEoNjA1ICAs
IG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ludDMyX2V4dGVuc2lvbl9s
aXRlICAsIDApKTsKLSAgRVhQRUNUX0VRKDYwNiAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0
dGVzdDo6cGFja2VkX3NpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9FUSg2
MDcgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9maXhlZDMyX2V4dGVu
c2lvbl9saXRlICwgMCkpOwotICBFWFBFQ1RfRVEoNjA4ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpwYWNrZWRfZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSAsIDApKTsKLSAgRVhQRUNU
X0VRKDYwOSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NmaXhlZDMy
X2V4dGVuc2lvbl9saXRlLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MTAgICwgbWVzc2FnZS5HZXRFeHRl
bnNpb24odW5pdHRlc3Q6OnBhY2tlZF9zZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSwgMCkpOwotICBF
WFBFQ1RfRVEoNjExICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZmxv
YXRfZXh0ZW5zaW9uX2xpdGUgICAsIDApKTsKLSAgRVhQRUNUX0VRKDYxMiAgLCBtZXNzYWdlLkdl
dEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2RvdWJsZV9leHRlbnNpb25fbGl0ZSAgLCAwKSk7
Ci0gIEVYUEVDVF9FUSh0cnVlICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tl
ZF9ib29sX2V4dGVuc2lvbl9saXRlICAgICwgMCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OkZP
UkVJR05fTElURV9CQVIsCi0gICAgICAgICAgICBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cGFja2VkX2VudW1fZXh0ZW5zaW9uX2xpdGUsIDApKTsKLSAgRVhQRUNUX0VRKDcwMSAgLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ludDMyX2V4dGVuc2lvbl9saXRl
ICAgLCAxKSk7Ci0gIEVYUEVDVF9FUSg3MDIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnBhY2tlZF9pbnQ2NF9leHRlbnNpb25fbGl0ZSAgICwgMSkpOwotICBFWFBFQ1RfRVEoNzAz
ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfdWludDMyX2V4dGVuc2lv
bl9saXRlICAsIDEpKTsKLSAgRVhQRUNUX0VRKDcwNCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6cGFja2VkX3VpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAxKSk7Ci0gIEVYUEVDVF9F
USg3MDUgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9zaW50MzJfZXh0
ZW5zaW9uX2xpdGUgICwgMSkpOwotICBFWFBFQ1RfRVEoNzA2ICAsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ludDY0X2V4dGVuc2lvbl9saXRlICAsIDEpKTsKLSAgRVhQ
RUNUX0VRKDcwNyAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ZpeGVk
MzJfZXh0ZW5zaW9uX2xpdGUgLCAxKSk7Ci0gIEVYUEVDVF9FUSg3MDggICwgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9maXhlZDY0X2V4dGVuc2lvbl9saXRlICwgMSkpOwot
ICBFWFBFQ1RfRVEoNzA5ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRf
c2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUsIDEpKTsKLSAgRVhQRUNUX0VRKDcxMCAgLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NmaXhlZDY0X2V4dGVuc2lvbl9saXRlLCAx
KSk7Ci0gIEVYUEVDVF9FUSg3MTEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBh
Y2tlZF9mbG9hdF9leHRlbnNpb25fbGl0ZSAgICwgMSkpOwotICBFWFBFQ1RfRVEoNzEyICAsIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZG91YmxlX2V4dGVuc2lvbl9saXRl
ICAsIDEpKTsKLSAgRVhQRUNUX0VRKGZhbHNlLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cGFja2VkX2Jvb2xfZXh0ZW5zaW9uX2xpdGUgICAgLCAxKSk7Ci0gIEVYUEVDVF9FUSh1bml0
dGVzdDo6Rk9SRUlHTl9MSVRFX0JBWiwKLSAgICAgICAgICAgIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpwYWNrZWRfZW51bV9leHRlbnNpb25fbGl0ZSwgMSkpOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLXZvaWQgVGVzdFV0aWxMaXRlOjpFeHBlY3RQYWNrZWRFeHRlbnNpb25zQ2xlYXIo
Ci0gICAgY29uc3QgdW5pdHRlc3Q6OlRlc3RQYWNrZWRFeHRlbnNpb25zTGl0ZSYgbWVzc2FnZSkg
ewotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRf
aW50MzJfZXh0ZW5zaW9uX2xpdGUgICApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5z
aW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX2ludDY0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVY
UEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF91aW50MzJf
ZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5FeHRlbnNpb25TaXpl
KHVuaXR0ZXN0OjpwYWNrZWRfdWludDY0X2V4dGVuc2lvbl9saXRlICApKTsKLSAgRVhQRUNUX0VR
KDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX3NpbnQzMl9leHRlbnNp
b25fbGl0ZSAgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRl
c3Q6OnBhY2tlZF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoMCwgbWVz
c2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfZml4ZWQzMl9leHRlbnNpb25fbGl0
ZSApKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFj
a2VkX2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUgKSk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkV4
dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSkpOwot
ICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfc2Zp
eGVkNjRfZXh0ZW5zaW9uX2xpdGUpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuRXh0ZW5zaW9u
U2l6ZSh1bml0dGVzdDo6cGFja2VkX2Zsb2F0X2V4dGVuc2lvbl9saXRlICAgKSk7Ci0gIEVYUEVD
VF9FUSgwLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9kb3VibGVfZXh0
ZW5zaW9uX2xpdGUgICkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVu
aXR0ZXN0OjpwYWNrZWRfYm9vbF9leHRlbnNpb25fbGl0ZSAgICApKTsKLSAgRVhQRUNUX0VRKDAs
IG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX2VudW1fZXh0ZW5zaW9uX2xp
dGUgICAgKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBUZXN0VXRpbExpdGU6OkV4cGVj
dFBhY2tlZEV4dGVuc2lvbnNNb2RpZmllZCgKLSAgICBjb25zdCB1bml0dGVzdDo6VGVzdFBhY2tl
ZEV4dGVuc2lvbnNMaXRlJiBtZXNzYWdlKSB7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVu
c2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICkpOwotICBB
U1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfaW50NjRf
ZXh0ZW5zaW9uX2xpdGUgICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6
ZSh1bml0dGVzdDo6cGFja2VkX3VpbnQzMl9leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEFTU0VSVF9F
USgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF91aW50NjRfZXh0ZW5z
aW9uX2xpdGUgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0
ZXN0OjpwYWNrZWRfc2ludDMyX2V4dGVuc2lvbl9saXRlICApKTsKLSAgQVNTRVJUX0VRKDIsIG1l
c3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX3NpbnQ2NF9leHRlbnNpb25fbGl0
ZSAgKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBh
Y2tlZF9maXhlZDMyX2V4dGVuc2lvbl9saXRlICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5F
eHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSApKTsK
LSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1bml0dGVzdDo6cGFja2VkX3Nm
aXhlZDMyX2V4dGVuc2lvbl9saXRlKSk7Ci0gIEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lv
blNpemUodW5pdHRlc3Q6OnBhY2tlZF9zZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSkpOwotICBBU1NF
UlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0OjpwYWNrZWRfZmxvYXRfZXh0
ZW5zaW9uX2xpdGUgICApKTsKLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UuRXh0ZW5zaW9uU2l6ZSh1
bml0dGVzdDo6cGFja2VkX2RvdWJsZV9leHRlbnNpb25fbGl0ZSAgKSk7Ci0gIEFTU0VSVF9FUSgy
LCBtZXNzYWdlLkV4dGVuc2lvblNpemUodW5pdHRlc3Q6OnBhY2tlZF9ib29sX2V4dGVuc2lvbl9s
aXRlICAgICkpOwotICBBU1NFUlRfRVEoMiwgbWVzc2FnZS5FeHRlbnNpb25TaXplKHVuaXR0ZXN0
OjpwYWNrZWRfZW51bV9leHRlbnNpb25fbGl0ZSAgICApKTsKLSAgRVhQRUNUX0VRKDYwMSAgLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ludDMyX2V4dGVuc2lvbl9saXRl
ICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnBhY2tlZF9pbnQ2NF9leHRlbnNpb25fbGl0ZSAgICwgMCkpOwotICBFWFBFQ1RfRVEoNjAz
ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfdWludDMyX2V4dGVuc2lv
bl9saXRlICAsIDApKTsKLSAgRVhQRUNUX0VRKDYwNCAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6cGFja2VkX3VpbnQ2NF9leHRlbnNpb25fbGl0ZSAgLCAwKSk7Ci0gIEVYUEVDVF9F
USg2MDUgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9zaW50MzJfZXh0
ZW5zaW9uX2xpdGUgICwgMCkpOwotICBFWFBFQ1RfRVEoNjA2ICAsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ludDY0X2V4dGVuc2lvbl9saXRlICAsIDApKTsKLSAgRVhQ
RUNUX0VRKDYwNyAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ZpeGVk
MzJfZXh0ZW5zaW9uX2xpdGUgLCAwKSk7Ci0gIEVYUEVDVF9FUSg2MDggICwgbWVzc2FnZS5HZXRF
eHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9maXhlZDY0X2V4dGVuc2lvbl9saXRlICwgMCkpOwot
ICBFWFBFQ1RfRVEoNjA5ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRf
c2ZpeGVkMzJfZXh0ZW5zaW9uX2xpdGUsIDApKTsKLSAgRVhQRUNUX0VRKDYxMCAgLCBtZXNzYWdl
LkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX3NmaXhlZDY0X2V4dGVuc2lvbl9saXRlLCAw
KSk7Ci0gIEVYUEVDVF9FUSg2MTEgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBh
Y2tlZF9mbG9hdF9leHRlbnNpb25fbGl0ZSAgICwgMCkpOwotICBFWFBFQ1RfRVEoNjEyICAsIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfZG91YmxlX2V4dGVuc2lvbl9saXRl
ICAsIDApKTsKLSAgRVhQRUNUX0VRKHRydWUgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVz
dDo6cGFja2VkX2Jvb2xfZXh0ZW5zaW9uX2xpdGUgICAgLCAwKSk7Ci0gIEVYUEVDVF9FUSh1bml0
dGVzdDo6Rk9SRUlHTl9MSVRFX0JBUiwKLSAgICAgICAgICAgIG1lc3NhZ2UuR2V0RXh0ZW5zaW9u
KHVuaXR0ZXN0OjpwYWNrZWRfZW51bV9leHRlbnNpb25fbGl0ZSwgMCkpOwotCi0gIC8vIEFjdHVh
bGx5IHZlcmlmeSB0aGUgc2Vjb25kIChtb2RpZmllZCkgZWxlbWVudHMgbm93LgotICBFWFBFQ1Rf
RVEoODAxICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfaW50MzJfZXh0
ZW5zaW9uX2xpdGUgICAsIDEpKTsKLSAgRVhQRUNUX0VRKDgwMiAgLCBtZXNzYWdlLkdldEV4dGVu
c2lvbih1bml0dGVzdDo6cGFja2VkX2ludDY0X2V4dGVuc2lvbl9saXRlICAgLCAxKSk7Ci0gIEVY
UEVDVF9FUSg4MDMgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF91aW50
MzJfZXh0ZW5zaW9uX2xpdGUgICwgMSkpOwotICBFWFBFQ1RfRVEoODA0ICAsIG1lc3NhZ2UuR2V0
RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfdWludDY0X2V4dGVuc2lvbl9saXRlICAsIDEpKTsK
LSAgRVhQRUNUX0VRKDgwNSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2Vk
X3NpbnQzMl9leHRlbnNpb25fbGl0ZSAgLCAxKSk7Ci0gIEVYUEVDVF9FUSg4MDYgICwgbWVzc2Fn
ZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICwg
MSkpOwotICBFWFBFQ1RfRVEoODA3ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0Ojpw
YWNrZWRfZml4ZWQzMl9leHRlbnNpb25fbGl0ZSAsIDEpKTsKLSAgRVhQRUNUX0VRKDgwOCAgLCBt
ZXNzYWdlLkdldEV4dGVuc2lvbih1bml0dGVzdDo6cGFja2VkX2ZpeGVkNjRfZXh0ZW5zaW9uX2xp
dGUgLCAxKSk7Ci0gIEVYUEVDVF9FUSg4MDkgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRl
c3Q6OnBhY2tlZF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSwgMSkpOwotICBFWFBFQ1RfRVEoODEw
ICAsIG1lc3NhZ2UuR2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpwYWNrZWRfc2ZpeGVkNjRfZXh0ZW5z
aW9uX2xpdGUsIDEpKTsKLSAgRVhQRUNUX0VRKDgxMSAgLCBtZXNzYWdlLkdldEV4dGVuc2lvbih1
bml0dGVzdDo6cGFja2VkX2Zsb2F0X2V4dGVuc2lvbl9saXRlICAgLCAxKSk7Ci0gIEVYUEVDVF9F
USg4MTIgICwgbWVzc2FnZS5HZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9kb3VibGVfZXh0
ZW5zaW9uX2xpdGUgICwgMSkpOwotICBFWFBFQ1RfRVEodHJ1ZSAsIG1lc3NhZ2UuR2V0RXh0ZW5z
aW9uKHVuaXR0ZXN0OjpwYWNrZWRfYm9vbF9leHRlbnNpb25fbGl0ZSAgICAsIDEpKTsKLSAgRVhQ
RUNUX0VRKHVuaXR0ZXN0OjpGT1JFSUdOX0xJVEVfRk9PLAotICAgICAgICAgICAgbWVzc2FnZS5H
ZXRFeHRlbnNpb24odW5pdHRlc3Q6OnBhY2tlZF9lbnVtX2V4dGVuc2lvbl9saXRlLCAxKSk7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RfdXRpbF9saXRlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdGVzdF91dGlsX2xpdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDdhMjI2OWQzNjNjNWFiNTNjOGFmNDNkNjlhNTY1OWUyNTcwZDIwZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdF91
dGlsX2xpdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2Vu
dG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWdu
IGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0KLSNpZm5k
ZWYgR09PR0xFX1BST1RPQlVGX1RFU1RfVVRJTF9MSVRFX0hfXwotI2RlZmluZSBHT09HTEVfUFJP
VE9CVUZfVEVTVF9VVElMX0xJVEVfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5p
dHRlc3RfbGl0ZS5wYi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1
ZiB7Ci0KLW5hbWVzcGFjZSB1bml0dGVzdCA9IHByb3RvYnVmX3VuaXR0ZXN0OwotbmFtZXNwYWNl
IHVuaXR0ZXN0X2ltcG9ydCA9IHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydDsKLQotY2xhc3MgVGVz
dFV0aWxMaXRlIHsKLSBwdWJsaWM6Ci0gIC8vIFNldCBldmVyeSBmaWVsZCBpbiB0aGUgbWVzc2Fn
ZSB0byBhIHVuaXF1ZSB2YWx1ZS4KLSAgc3RhdGljIHZvaWQgU2V0QWxsRmllbGRzKHVuaXR0ZXN0
OjpUZXN0QWxsVHlwZXNMaXRlKiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgU2V0QWxsRXh0ZW5z
aW9ucyh1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnNMaXRlKiBtZXNzYWdlKTsKLSAgc3RhdGlj
IHZvaWQgU2V0UGFja2VkRmllbGRzKHVuaXR0ZXN0OjpUZXN0UGFja2VkVHlwZXNMaXRlKiBtZXNz
YWdlKTsKLSAgc3RhdGljIHZvaWQgU2V0UGFja2VkRXh0ZW5zaW9ucyh1bml0dGVzdDo6VGVzdFBh
Y2tlZEV4dGVuc2lvbnNMaXRlKiBtZXNzYWdlKTsKLQotICAvLyBVc2UgdGhlIHJlcGVhdGVkIHZl
cnNpb25zIG9mIHRoZSBzZXRfKigpIGFjY2Vzc29ycyB0byBtb2RpZnkgYWxsIHRoZQotICAvLyBy
ZXBlYXRlZCBmaWVsZHMgb2YgdGhlIG1lc3NhZ2UgKHdoaWNoIHNob3VsZCBhbHJlYWR5IGhhdmUg
YmVlbgotICAvLyBpbml0aWFsaXplZCB3aXRoIFNldCpGaWVsZHMoKSkuICBTZXQqRmllbGRzKCkg
aXRzZWxmIG9ubHkgdGVzdHMKLSAgLy8gdGhlIGFkZF8qKCkgYWNjZXNzb3JzLgotICBzdGF0aWMg
dm9pZCBNb2RpZnlSZXBlYXRlZEZpZWxkcyh1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSogbWVz
c2FnZSk7Ci0gIHN0YXRpYyB2b2lkIE1vZGlmeVJlcGVhdGVkRXh0ZW5zaW9ucygKLSAgICAgIHVu
aXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9uc0xpdGUqIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBN
b2RpZnlQYWNrZWRGaWVsZHModW5pdHRlc3Q6OlRlc3RQYWNrZWRUeXBlc0xpdGUqIG1lc3NhZ2Up
OwotICBzdGF0aWMgdm9pZCBNb2RpZnlQYWNrZWRFeHRlbnNpb25zKAotICAgICAgdW5pdHRlc3Q6
OlRlc3RQYWNrZWRFeHRlbnNpb25zTGl0ZSogbWVzc2FnZSk7Ci0KLSAgLy8gQ2hlY2sgdGhhdCBh
bGwgZmllbGRzIGhhdmUgdGhlIHZhbHVlcyB0aGF0IHRoZXkgc2hvdWxkIGhhdmUgYWZ0ZXIKLSAg
Ly8gU2V0KkZpZWxkcygpIGlzIGNhbGxlZC4KLSAgc3RhdGljIHZvaWQgRXhwZWN0QWxsRmllbGRz
U2V0KGNvbnN0IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNMaXRlJiBtZXNzYWdlKTsKLSAgc3RhdGlj
IHZvaWQgRXhwZWN0QWxsRXh0ZW5zaW9uc1NldCgKLSAgICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0
QWxsRXh0ZW5zaW9uc0xpdGUmIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBFeHBlY3RQYWNrZWRG
aWVsZHNTZXQoCi0gICAgICBjb25zdCB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzTGl0ZSYgbWVz
c2FnZSk7Ci0gIHN0YXRpYyB2b2lkIEV4cGVjdFBhY2tlZEV4dGVuc2lvbnNTZXQoCi0gICAgICBj
b25zdCB1bml0dGVzdDo6VGVzdFBhY2tlZEV4dGVuc2lvbnNMaXRlJiBtZXNzYWdlKTsKLQotICAv
LyBFeHBlY3QgdGhhdCB0aGUgbWVzc2FnZSBpcyBtb2RpZmllZCBhcyB3b3VsZCBiZSBleHBlY3Rl
ZCBmcm9tCi0gIC8vIE1vZGlmeSpGaWVsZHMoKS4KLSAgc3RhdGljIHZvaWQgRXhwZWN0UmVwZWF0
ZWRGaWVsZHNNb2RpZmllZCgKLSAgICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXNMaXRl
JiBtZXNzYWdlKTsKLSAgc3RhdGljIHZvaWQgRXhwZWN0UmVwZWF0ZWRFeHRlbnNpb25zTW9kaWZp
ZWQoCi0gICAgICBjb25zdCB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnNMaXRlJiBtZXNzYWdl
KTsKLSAgc3RhdGljIHZvaWQgRXhwZWN0UGFja2VkRmllbGRzTW9kaWZpZWQoCi0gICAgICBjb25z
dCB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzTGl0ZSYgbWVzc2FnZSk7Ci0gIHN0YXRpYyB2b2lk
IEV4cGVjdFBhY2tlZEV4dGVuc2lvbnNNb2RpZmllZCgKLSAgICAgIGNvbnN0IHVuaXR0ZXN0OjpU
ZXN0UGFja2VkRXh0ZW5zaW9uc0xpdGUmIG1lc3NhZ2UpOwotCi0gIC8vIENoZWNrIHRoYXQgYWxs
IGZpZWxkcyBoYXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICBzdGF0aWMgdm9pZCBFeHBlY3RD
bGVhcihjb25zdCB1bml0dGVzdDo6VGVzdEFsbFR5cGVzTGl0ZSYgbWVzc2FnZSk7Ci0gIHN0YXRp
YyB2b2lkIEV4cGVjdEV4dGVuc2lvbnNDbGVhcigKLSAgICAgIGNvbnN0IHVuaXR0ZXN0OjpUZXN0
QWxsRXh0ZW5zaW9uc0xpdGUmIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBFeHBlY3RQYWNrZWRD
bGVhcihjb25zdCB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzTGl0ZSYgbWVzc2FnZSk7Ci0gIHN0
YXRpYyB2b2lkIEV4cGVjdFBhY2tlZEV4dGVuc2lvbnNDbGVhcigKLSAgICAgIGNvbnN0IHVuaXR0
ZXN0OjpUZXN0UGFja2VkRXh0ZW5zaW9uc0xpdGUmIG1lc3NhZ2UpOwotCi0gcHJpdmF0ZToKLSAg
R09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFRlc3RVdGlsTGl0ZSk7Ci19OwotCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlm
ICAvLyBHT09HTEVfUFJPVE9CVUZfVEVTVF9VVElMX0xJVEVfSF9fCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdGVzdGRhdGEvZ29sZGVuX21lc3NhZ2UgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdGVzdGRhdGEvZ29sZGVuX21lc3NhZ2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDBiN2U2NTUyYzZlYTVlNzhmZDMxMzkwYjJiZWE3Njc3NjgwMmU0OWYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNt
Vj9kMDAwMDEKCmxpdGVyYWwgNTMxCnpjbVh4Zkp4bWwpNUNgeCN8OVFLMmJlNUtzbDxkZGImZ0Fy
SjNTK0FVZytjQD1CPX1ZNjF9SFhFPVZ7X3tYbVVfcAp6aHpGYiVBdnB2Wl5wcSRVM3BrQWhQIUs4
LUQ3SkxvYVpXYkJfbikxWT5gd212d0ZsUW5gYlApYUgyOH5kajQ3cFYKemp0alBpOXRwUTZ4Pj4x
dk84dmJ4ZUFWMTdqTThLRkpvNz9gVys8VmxTdD05cVBiJExHQ0U7MChjI1loMz5mMGdxCnp7SUYj
O1pKRTY2MihMMndOKlVEPXFlVUBSa2wtNjdTVmFsbnNmMEQ4c0JuclNVQiFFQDt6WlorTCV2LXtL
dVJfNgp6di1lWENnd29xO1YheH1BZWpEeFhKRFp+M2Q9RTw5RFQ/dHphYkwxantJS3ZwTyVASjcy
VChefi0hbyQxbktQUnMKekc0UEBiV0hfV3QqdDNhQ09mJTtAV1psR15fP3hWc1E1T0dAYnFndVch
JlA+dz9BQUQ2PEd4U0t6OHtLI0E4eSFlCnojSzFRI3hxblI3VTdZZjNLSWJ4THtEeCF3bUpffH5t
aD95V2dNS0hRRWI2cWtQaEhQVFlVb09AWil6M3E2fU5TRgp1diNzWmFGSXUlVmhvMCRKcXJ7PC1x
ZjtsaDxaJFNSJVR8LVFoazgwRW85TVk1TX10QXg4dlg7Xj53Y3NGCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL2dvbGRlbl9tZXNzYWdlX29uZW9mX2ltcGxlbWVudGVk
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL2dvbGRlbl9tZXNzYWdlX29uZW9mX2ltcGxl
bWVudGVkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDhjODk4NTI2NDk5NDlkYjZi
NzMxY2YxMDE4MzZkNDExZjU2ZWJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDUx
NQp6Y21YeGZLVEswbTZiQTVuekg/dEduPEp3bUJrI3xCOCVlZFoxN1gjezBVPzQ2Nyhme0Mxc3pf
VE4tXjxTR150RHQKenArY0RxTmZCNnAwcyRIYUQxLXFWakZYOEI5WFlwQGxiN0g5Jk8wfUdAMXpH
Rnl5ek55SU1pTElvP3B+RXRkeDIqCnpCR2BLSk82VkpIV3U9fWViQH0tRFVHcD9FTH1Ub19XP0Jm
fVFCMzNTRE5qZ0c2b2tufDtaMkVubH5PO2JiRFAtcAp6Znx9TFRXaXJ6Yy1acDhFbnA4JUY4YiRi
eTgyYzFzMXZ3bTA0eSNCfC1+P0I/aCVhMmtaKFlXYmU3Zyp2bCZhdmsKentaa2JMKCVZKXlxQHxJ
NTMtIzdKbzVKP3w1SzhyRCNiX2FXQjNVWVduWW1BfEdwQz9hczRLQU44cXMmblV6PGJHCnpjZjxj
XjsqNCUhJm5qKiglYmFlSWJwcyM3YkYlKEtVYzRhZENLOHMxaXxpQ1JScE5Bc0pKKjshRkEjayVT
aHZ9VAp6ekdySDN8Qysyal9gYEdqa01yRSpkNS1pKWpgZFAxcjxZUy1eKFdjbm5ALXlNbD1Xdng2
PHVpZVJqczFLPzNRa0EKandtRnNBKXZCJkphODFKKyN0IThpb2o0dGY0aExTYVdIdEU/NHRzKUkx
UzVKWAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0ZGF0YS9nb2xkZW5fbWVz
c2FnZV9wcm90bzMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGRhdGEvZ29sZGVuX21lc3NhZ2Vf
cHJvdG8zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDY0NmEwZGM4NWUwYjhjN2Nm
Y2ZiZWE4YmI5YWUwYTg5ODc4ODNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDI0
OAp6Y21YWlNKOHJeMjVDLTZ4ZT5UQ1RrQWlvLXU5MThNJlg2VztFP2BsKmJtXnBXaU5yJmM2bzY9
dW9KYXZtcGZhZykKemdqQVZ6R1F+SWxKYnFaN1d8K1hWSlZ5IWgmST9wOUFHfH5qUSVoJFdtXmIr
e1EkKExjPGR8ck1fXjJeZHMkLX0lCnpxTFZoUzt+dyQzLXd8ZDEqQUB9Y0lIJSRAS09ecHMjcTtR
fHpsPCZiUXdPbiRTNiQtMkwoV3V9V0R9OS0hb2R3bgpxXn4lOTVEKXEqfTljbHJqNWo7R3VNNjY5
IVhWWjFhVVVrO0RgZ2lCeDBvNmRWVmZxV00zTiVtdgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi90ZXN0ZGF0YS9nb2xkZW5fcGFja2VkX2ZpZWxkc19tZXNzYWdlIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3Rlc3RkYXRhL2dvbGRlbl9wYWNrZWRfZmllbGRzX21lc3NhZ2UKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMjhkMzg4MzA1NTA4YjdhNWRiZTc4NGUzYzZiZjQyMDRj
NTIxMjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFy
eSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTQyCnpjbWNiXyU1c3hzRlk3
SDxtUmxfUVNSYipuKy1CTCZgaWhuMTQkQUA3UHBtQXZJR2ViQ3Y5aiNwWX5nTlY8QWBUcwp6VV5v
b0tVMkZtZ0tuZXRvSzxQPHI5RW17WVE2UWVoQ1hmVWJKcUQjMHYyaWRRa1pAcipWQ2JAbk8jck0+
cTFnZFUKU0pHNDEkVnE7PXQqdX09ZyRfNDwtRzk0V04KCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdGVzdGRhdGEvbWFwX3Rlc3RfZGF0YS50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
dGVzdGRhdGEvbWFwX3Rlc3RfZGF0YS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJjMjcyMzIxNGEyNjVjZWQ0Y2IyNzg3NGFhMWQ0YjllNThlZDkxNDQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3Rk
YXRhL21hcF90ZXN0X2RhdGEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLW1h
cF9pbnQzMl9pbnQzMiB7Ci0gIGtleTogMAotICB2YWx1ZTogMAotfQotbWFwX2ludDMyX2ludDMy
IHsKLSAga2V5OiAxCi0gIHZhbHVlOiAxCi19Ci1tYXBfaW50NjRfaW50NjQgewotICBrZXk6IDAK
LSAgdmFsdWU6IDAKLX0KLW1hcF9pbnQ2NF9pbnQ2NCB7Ci0gIGtleTogMQotICB2YWx1ZTogMQot
fQotbWFwX3VpbnQzMl91aW50MzIgewotICBrZXk6IDAKLSAgdmFsdWU6IDAKLX0KLW1hcF91aW50
MzJfdWludDMyIHsKLSAga2V5OiAxCi0gIHZhbHVlOiAxCi19Ci1tYXBfdWludDY0X3VpbnQ2NCB7
Ci0gIGtleTogMAotICB2YWx1ZTogMAotfQotbWFwX3VpbnQ2NF91aW50NjQgewotICBrZXk6IDEK
LSAgdmFsdWU6IDEKLX0KLW1hcF9zaW50MzJfc2ludDMyIHsKLSAga2V5OiAwCi0gIHZhbHVlOiAw
Ci19Ci1tYXBfc2ludDMyX3NpbnQzMiB7Ci0gIGtleTogMQotICB2YWx1ZTogMQotfQotbWFwX3Np
bnQ2NF9zaW50NjQgewotICBrZXk6IDAKLSAgdmFsdWU6IDAKLX0KLW1hcF9zaW50NjRfc2ludDY0
IHsKLSAga2V5OiAxCi0gIHZhbHVlOiAxCi19Ci1tYXBfZml4ZWQzMl9maXhlZDMyIHsKLSAga2V5
OiAwCi0gIHZhbHVlOiAwCi19Ci1tYXBfZml4ZWQzMl9maXhlZDMyIHsKLSAga2V5OiAxCi0gIHZh
bHVlOiAxCi19Ci1tYXBfZml4ZWQ2NF9maXhlZDY0IHsKLSAga2V5OiAwCi0gIHZhbHVlOiAwCi19
Ci1tYXBfZml4ZWQ2NF9maXhlZDY0IHsKLSAga2V5OiAxCi0gIHZhbHVlOiAxCi19Ci1tYXBfc2Zp
eGVkMzJfc2ZpeGVkMzIgewotICBrZXk6IDAKLSAgdmFsdWU6IDAKLX0KLW1hcF9zZml4ZWQzMl9z
Zml4ZWQzMiB7Ci0gIGtleTogMQotICB2YWx1ZTogMQotfQotbWFwX3NmaXhlZDY0X3NmaXhlZDY0
IHsKLSAga2V5OiAwCi0gIHZhbHVlOiAwCi19Ci1tYXBfc2ZpeGVkNjRfc2ZpeGVkNjQgewotICBr
ZXk6IDEKLSAgdmFsdWU6IDEKLX0KLW1hcF9pbnQzMl9mbG9hdCB7Ci0gIGtleTogMAotICB2YWx1
ZTogMAotfQotbWFwX2ludDMyX2Zsb2F0IHsKLSAga2V5OiAxCi0gIHZhbHVlOiAxCi19Ci1tYXBf
aW50MzJfZG91YmxlIHsKLSAga2V5OiAwCi0gIHZhbHVlOiAwCi19Ci1tYXBfaW50MzJfZG91Ymxl
IHsKLSAga2V5OiAxCi0gIHZhbHVlOiAxCi19Ci1tYXBfYm9vbF9ib29sIHsKLSAga2V5OiBmYWxz
ZQotICB2YWx1ZTogZmFsc2UKLX0KLW1hcF9ib29sX2Jvb2wgewotICBrZXk6IHRydWUKLSAgdmFs
dWU6IHRydWUKLX0KLW1hcF9zdHJpbmdfc3RyaW5nIHsKLSAga2V5OiAiMCIKLSAgdmFsdWU6ICIw
IgotfQotbWFwX3N0cmluZ19zdHJpbmcgewotICBrZXk6ICIxIgotICB2YWx1ZTogIjEiCi19Ci1t
YXBfaW50MzJfYnl0ZXMgewotICBrZXk6IDAKLSAgdmFsdWU6ICIwIgotfQotbWFwX2ludDMyX2J5
dGVzIHsKLSAga2V5OiAxCi0gIHZhbHVlOiAiMSIKLX0KLW1hcF9pbnQzMl9lbnVtIHsKLSAga2V5
OiAwCi0gIHZhbHVlOiBNQVBfRU5VTV9CQVIKLX0KLW1hcF9pbnQzMl9lbnVtIHsKLSAga2V5OiAx
Ci0gIHZhbHVlOiBNQVBfRU5VTV9CQVoKLX0KLW1hcF9pbnQzMl9mb3JlaWduX21lc3NhZ2Ugewot
ICBrZXk6IDAKLSAgdmFsdWUgewotICAgIGM6IDAKLSAgfQotfQotbWFwX2ludDMyX2ZvcmVpZ25f
bWVzc2FnZSB7Ci0gIGtleTogMQotICB2YWx1ZSB7Ci0gICAgYzogMQotICB9Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGRhdGEvdGV4dF9mb3JtYXRfdW5pdHRlc3RfZGF0
YS50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGRhdGEvdGV4dF9mb3JtYXRfdW5pdHRlc3Rf
ZGF0YS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhODc0YjU0Y2RiYTBlYjI1
ZTQwN2NmODI3NTg2MjRkNzU3YzAyZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL3RleHRfZm9ybWF0X3Vu
aXR0ZXN0X2RhdGEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLW9wdGlvbmFs
X2ludDMyOiAxMDEKLW9wdGlvbmFsX2ludDY0OiAxMDIKLW9wdGlvbmFsX3VpbnQzMjogMTAzCi1v
cHRpb25hbF91aW50NjQ6IDEwNAotb3B0aW9uYWxfc2ludDMyOiAxMDUKLW9wdGlvbmFsX3NpbnQ2
NDogMTA2Ci1vcHRpb25hbF9maXhlZDMyOiAxMDcKLW9wdGlvbmFsX2ZpeGVkNjQ6IDEwOAotb3B0
aW9uYWxfc2ZpeGVkMzI6IDEwOQotb3B0aW9uYWxfc2ZpeGVkNjQ6IDExMAotb3B0aW9uYWxfZmxv
YXQ6IDExMQotb3B0aW9uYWxfZG91YmxlOiAxMTIKLW9wdGlvbmFsX2Jvb2w6IHRydWUKLW9wdGlv
bmFsX3N0cmluZzogIjExNSIKLW9wdGlvbmFsX2J5dGVzOiAiMTE2IgotT3B0aW9uYWxHcm91cCB7
Ci0gIGE6IDExNwotfQotb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgewotICBiYjogMTE4Ci19Ci1v
cHRpb25hbF9mb3JlaWduX21lc3NhZ2UgewotICBjOiAxMTkKLX0KLW9wdGlvbmFsX2ltcG9ydF9t
ZXNzYWdlIHsKLSAgZDogMTIwCi19Ci1vcHRpb25hbF9uZXN0ZWRfZW51bTogQkFaCi1vcHRpb25h
bF9mb3JlaWduX2VudW06IEZPUkVJR05fQkFaCi1vcHRpb25hbF9pbXBvcnRfZW51bTogSU1QT1JU
X0JBWgotb3B0aW9uYWxfc3RyaW5nX3BpZWNlOiAiMTI0Igotb3B0aW9uYWxfY29yZDogIjEyNSIK
LW9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZSB7Ci0gIGU6IDEyNgotfQotb3B0aW9uYWxf
bGF6eV9tZXNzYWdlIHsKLSAgYmI6IDEyNwotfQotcmVwZWF0ZWRfaW50MzI6IDIwMQotcmVwZWF0
ZWRfaW50MzI6IDMwMQotcmVwZWF0ZWRfaW50NjQ6IDIwMgotcmVwZWF0ZWRfaW50NjQ6IDMwMgot
cmVwZWF0ZWRfdWludDMyOiAyMDMKLXJlcGVhdGVkX3VpbnQzMjogMzAzCi1yZXBlYXRlZF91aW50
NjQ6IDIwNAotcmVwZWF0ZWRfdWludDY0OiAzMDQKLXJlcGVhdGVkX3NpbnQzMjogMjA1Ci1yZXBl
YXRlZF9zaW50MzI6IDMwNQotcmVwZWF0ZWRfc2ludDY0OiAyMDYKLXJlcGVhdGVkX3NpbnQ2NDog
MzA2Ci1yZXBlYXRlZF9maXhlZDMyOiAyMDcKLXJlcGVhdGVkX2ZpeGVkMzI6IDMwNwotcmVwZWF0
ZWRfZml4ZWQ2NDogMjA4Ci1yZXBlYXRlZF9maXhlZDY0OiAzMDgKLXJlcGVhdGVkX3NmaXhlZDMy
OiAyMDkKLXJlcGVhdGVkX3NmaXhlZDMyOiAzMDkKLXJlcGVhdGVkX3NmaXhlZDY0OiAyMTAKLXJl
cGVhdGVkX3NmaXhlZDY0OiAzMTAKLXJlcGVhdGVkX2Zsb2F0OiAyMTEKLXJlcGVhdGVkX2Zsb2F0
OiAzMTEKLXJlcGVhdGVkX2RvdWJsZTogMjEyCi1yZXBlYXRlZF9kb3VibGU6IDMxMgotcmVwZWF0
ZWRfYm9vbDogdHJ1ZQotcmVwZWF0ZWRfYm9vbDogZmFsc2UKLXJlcGVhdGVkX3N0cmluZzogIjIx
NSIKLXJlcGVhdGVkX3N0cmluZzogIjMxNSIKLXJlcGVhdGVkX2J5dGVzOiAiMjE2IgotcmVwZWF0
ZWRfYnl0ZXM6ICIzMTYiCi1SZXBlYXRlZEdyb3VwIHsKLSAgYTogMjE3Ci19Ci1SZXBlYXRlZEdy
b3VwIHsKLSAgYTogMzE3Ci19Ci1yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSB7Ci0gIGJiOiAyMTgK
LX0KLXJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIHsKLSAgYmI6IDMxOAotfQotcmVwZWF0ZWRfZm9y
ZWlnbl9tZXNzYWdlIHsKLSAgYzogMjE5Ci19Ci1yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2Ugewot
ICBjOiAzMTkKLX0KLXJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIHsKLSAgZDogMjIwCi19Ci1yZXBl
YXRlZF9pbXBvcnRfbWVzc2FnZSB7Ci0gIGQ6IDMyMAotfQotcmVwZWF0ZWRfbmVzdGVkX2VudW06
IEJBUgotcmVwZWF0ZWRfbmVzdGVkX2VudW06IEJBWgotcmVwZWF0ZWRfZm9yZWlnbl9lbnVtOiBG
T1JFSUdOX0JBUgotcmVwZWF0ZWRfZm9yZWlnbl9lbnVtOiBGT1JFSUdOX0JBWgotcmVwZWF0ZWRf
aW1wb3J0X2VudW06IElNUE9SVF9CQVIKLXJlcGVhdGVkX2ltcG9ydF9lbnVtOiBJTVBPUlRfQkFa
Ci1yZXBlYXRlZF9zdHJpbmdfcGllY2U6ICIyMjQiCi1yZXBlYXRlZF9zdHJpbmdfcGllY2U6ICIz
MjQiCi1yZXBlYXRlZF9jb3JkOiAiMjI1IgotcmVwZWF0ZWRfY29yZDogIjMyNSIKLXJlcGVhdGVk
X2xhenlfbWVzc2FnZSB7Ci0gIGJiOiAyMjcKLX0KLXJlcGVhdGVkX2xhenlfbWVzc2FnZSB7Ci0g
IGJiOiAzMjcKLX0KLWRlZmF1bHRfaW50MzI6IDQwMQotZGVmYXVsdF9pbnQ2NDogNDAyCi1kZWZh
dWx0X3VpbnQzMjogNDAzCi1kZWZhdWx0X3VpbnQ2NDogNDA0Ci1kZWZhdWx0X3NpbnQzMjogNDA1
Ci1kZWZhdWx0X3NpbnQ2NDogNDA2Ci1kZWZhdWx0X2ZpeGVkMzI6IDQwNwotZGVmYXVsdF9maXhl
ZDY0OiA0MDgKLWRlZmF1bHRfc2ZpeGVkMzI6IDQwOQotZGVmYXVsdF9zZml4ZWQ2NDogNDEwCi1k
ZWZhdWx0X2Zsb2F0OiA0MTEKLWRlZmF1bHRfZG91YmxlOiA0MTIKLWRlZmF1bHRfYm9vbDogZmFs
c2UKLWRlZmF1bHRfc3RyaW5nOiAiNDE1IgotZGVmYXVsdF9ieXRlczogIjQxNiIKLWRlZmF1bHRf
bmVzdGVkX2VudW06IEZPTwotZGVmYXVsdF9mb3JlaWduX2VudW06IEZPUkVJR05fRk9PCi1kZWZh
dWx0X2ltcG9ydF9lbnVtOiBJTVBPUlRfRk9PCi1kZWZhdWx0X3N0cmluZ19waWVjZTogIjQyNCIK
LWRlZmF1bHRfY29yZDogIjQyNSIKLW9uZW9mX3VpbnQzMjogNjAxCi1vbmVvZl9uZXN0ZWRfbWVz
c2FnZSB7Ci0gIGJiOiA2MDIKLX0KLW9uZW9mX3N0cmluZzogIjYwMyIKLW9uZW9mX2J5dGVzOiAi
NjA0IgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL3RleHRfZm9ybWF0
X3VuaXR0ZXN0X2RhdGFfb25lb2ZfaW1wbGVtZW50ZWQudHh0IGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L3Rlc3RkYXRhL3RleHRfZm9ybWF0X3VuaXR0ZXN0X2RhdGFfb25lb2ZfaW1wbGVtZW50ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzk1ZTFlODFhYjcyZTM1ZDU2YmI1ZmUz
NGUwZjBlMmUxNmQ3NTdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0ZGF0YS90ZXh0X2Zvcm1hdF91bml0dGVzdF9k
YXRhX29uZW9mX2ltcGxlbWVudGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBA
Ci1vcHRpb25hbF9pbnQzMjogMTAxCi1vcHRpb25hbF9pbnQ2NDogMTAyCi1vcHRpb25hbF91aW50
MzI6IDEwMwotb3B0aW9uYWxfdWludDY0OiAxMDQKLW9wdGlvbmFsX3NpbnQzMjogMTA1Ci1vcHRp
b25hbF9zaW50NjQ6IDEwNgotb3B0aW9uYWxfZml4ZWQzMjogMTA3Ci1vcHRpb25hbF9maXhlZDY0
OiAxMDgKLW9wdGlvbmFsX3NmaXhlZDMyOiAxMDkKLW9wdGlvbmFsX3NmaXhlZDY0OiAxMTAKLW9w
dGlvbmFsX2Zsb2F0OiAxMTEKLW9wdGlvbmFsX2RvdWJsZTogMTEyCi1vcHRpb25hbF9ib29sOiB0
cnVlCi1vcHRpb25hbF9zdHJpbmc6ICIxMTUiCi1vcHRpb25hbF9ieXRlczogIjExNiIKLU9wdGlv
bmFsR3JvdXAgewotICBhOiAxMTcKLX0KLW9wdGlvbmFsX25lc3RlZF9tZXNzYWdlIHsKLSAgYmI6
IDExOAotfQotb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlIHsKLSAgYzogMTE5Ci19Ci1vcHRpb25h
bF9pbXBvcnRfbWVzc2FnZSB7Ci0gIGQ6IDEyMAotfQotb3B0aW9uYWxfbmVzdGVkX2VudW06IEJB
Wgotb3B0aW9uYWxfZm9yZWlnbl9lbnVtOiBGT1JFSUdOX0JBWgotb3B0aW9uYWxfaW1wb3J0X2Vu
dW06IElNUE9SVF9CQVoKLW9wdGlvbmFsX3N0cmluZ19waWVjZTogIjEyNCIKLW9wdGlvbmFsX2Nv
cmQ6ICIxMjUiCi1vcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2UgewotICBlOiAxMjYKLX0K
LW9wdGlvbmFsX2xhenlfbWVzc2FnZSB7Ci0gIGJiOiAxMjcKLX0KLXJlcGVhdGVkX2ludDMyOiAy
MDEKLXJlcGVhdGVkX2ludDMyOiAzMDEKLXJlcGVhdGVkX2ludDY0OiAyMDIKLXJlcGVhdGVkX2lu
dDY0OiAzMDIKLXJlcGVhdGVkX3VpbnQzMjogMjAzCi1yZXBlYXRlZF91aW50MzI6IDMwMwotcmVw
ZWF0ZWRfdWludDY0OiAyMDQKLXJlcGVhdGVkX3VpbnQ2NDogMzA0Ci1yZXBlYXRlZF9zaW50MzI6
IDIwNQotcmVwZWF0ZWRfc2ludDMyOiAzMDUKLXJlcGVhdGVkX3NpbnQ2NDogMjA2Ci1yZXBlYXRl
ZF9zaW50NjQ6IDMwNgotcmVwZWF0ZWRfZml4ZWQzMjogMjA3Ci1yZXBlYXRlZF9maXhlZDMyOiAz
MDcKLXJlcGVhdGVkX2ZpeGVkNjQ6IDIwOAotcmVwZWF0ZWRfZml4ZWQ2NDogMzA4Ci1yZXBlYXRl
ZF9zZml4ZWQzMjogMjA5Ci1yZXBlYXRlZF9zZml4ZWQzMjogMzA5Ci1yZXBlYXRlZF9zZml4ZWQ2
NDogMjEwCi1yZXBlYXRlZF9zZml4ZWQ2NDogMzEwCi1yZXBlYXRlZF9mbG9hdDogMjExCi1yZXBl
YXRlZF9mbG9hdDogMzExCi1yZXBlYXRlZF9kb3VibGU6IDIxMgotcmVwZWF0ZWRfZG91YmxlOiAz
MTIKLXJlcGVhdGVkX2Jvb2w6IHRydWUKLXJlcGVhdGVkX2Jvb2w6IGZhbHNlCi1yZXBlYXRlZF9z
dHJpbmc6ICIyMTUiCi1yZXBlYXRlZF9zdHJpbmc6ICIzMTUiCi1yZXBlYXRlZF9ieXRlczogIjIx
NiIKLXJlcGVhdGVkX2J5dGVzOiAiMzE2IgotUmVwZWF0ZWRHcm91cCB7Ci0gIGE6IDIxNwotfQot
UmVwZWF0ZWRHcm91cCB7Ci0gIGE6IDMxNwotfQotcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Ugewot
ICBiYjogMjE4Ci19Ci1yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSB7Ci0gIGJiOiAzMTgKLX0KLXJl
cGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSB7Ci0gIGM6IDIxOQotfQotcmVwZWF0ZWRfZm9yZWlnbl9t
ZXNzYWdlIHsKLSAgYzogMzE5Ci19Ci1yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSB7Ci0gIGQ6IDIy
MAotfQotcmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2UgewotICBkOiAzMjAKLX0KLXJlcGVhdGVkX25l
c3RlZF9lbnVtOiBCQVIKLXJlcGVhdGVkX25lc3RlZF9lbnVtOiBCQVoKLXJlcGVhdGVkX2ZvcmVp
Z25fZW51bTogRk9SRUlHTl9CQVIKLXJlcGVhdGVkX2ZvcmVpZ25fZW51bTogRk9SRUlHTl9CQVoK
LXJlcGVhdGVkX2ltcG9ydF9lbnVtOiBJTVBPUlRfQkFSCi1yZXBlYXRlZF9pbXBvcnRfZW51bTog
SU1QT1JUX0JBWgotcmVwZWF0ZWRfc3RyaW5nX3BpZWNlOiAiMjI0IgotcmVwZWF0ZWRfc3RyaW5n
X3BpZWNlOiAiMzI0IgotcmVwZWF0ZWRfY29yZDogIjIyNSIKLXJlcGVhdGVkX2NvcmQ6ICIzMjUi
Ci1yZXBlYXRlZF9sYXp5X21lc3NhZ2UgewotICBiYjogMjI3Ci19Ci1yZXBlYXRlZF9sYXp5X21l
c3NhZ2UgewotICBiYjogMzI3Ci19Ci1kZWZhdWx0X2ludDMyOiA0MDEKLWRlZmF1bHRfaW50NjQ6
IDQwMgotZGVmYXVsdF91aW50MzI6IDQwMwotZGVmYXVsdF91aW50NjQ6IDQwNAotZGVmYXVsdF9z
aW50MzI6IDQwNQotZGVmYXVsdF9zaW50NjQ6IDQwNgotZGVmYXVsdF9maXhlZDMyOiA0MDcKLWRl
ZmF1bHRfZml4ZWQ2NDogNDA4Ci1kZWZhdWx0X3NmaXhlZDMyOiA0MDkKLWRlZmF1bHRfc2ZpeGVk
NjQ6IDQxMAotZGVmYXVsdF9mbG9hdDogNDExCi1kZWZhdWx0X2RvdWJsZTogNDEyCi1kZWZhdWx0
X2Jvb2w6IGZhbHNlCi1kZWZhdWx0X3N0cmluZzogIjQxNSIKLWRlZmF1bHRfYnl0ZXM6ICI0MTYi
Ci1kZWZhdWx0X25lc3RlZF9lbnVtOiBGT08KLWRlZmF1bHRfZm9yZWlnbl9lbnVtOiBGT1JFSUdO
X0ZPTwotZGVmYXVsdF9pbXBvcnRfZW51bTogSU1QT1JUX0ZPTwotZGVmYXVsdF9zdHJpbmdfcGll
Y2U6ICI0MjQiCi1kZWZhdWx0X2NvcmQ6ICI0MjUiCi1vbmVvZl9ieXRlczogIjYwNCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0ZGF0YS90ZXh0X2Zvcm1hdF91bml0dGVzdF9k
YXRhX3BvaW50eS50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGRhdGEvdGV4dF9mb3JtYXRf
dW5pdHRlc3RfZGF0YV9wb2ludHkudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
MTAxMWViZjE1ZGY5NmIxOTMzMWU3MjZjNDc2ZWFmOWIwZGZhOWFjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0ZGF0
YS90ZXh0X2Zvcm1hdF91bml0dGVzdF9kYXRhX3BvaW50eS50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSwxMzQgKzAsMCBAQAotb3B0aW9uYWxfaW50MzI6IDEwMQotb3B0aW9uYWxfaW50NjQ6IDEwMgot
b3B0aW9uYWxfdWludDMyOiAxMDMKLW9wdGlvbmFsX3VpbnQ2NDogMTA0Ci1vcHRpb25hbF9zaW50
MzI6IDEwNQotb3B0aW9uYWxfc2ludDY0OiAxMDYKLW9wdGlvbmFsX2ZpeGVkMzI6IDEwNwotb3B0
aW9uYWxfZml4ZWQ2NDogMTA4Ci1vcHRpb25hbF9zZml4ZWQzMjogMTA5Ci1vcHRpb25hbF9zZml4
ZWQ2NDogMTEwCi1vcHRpb25hbF9mbG9hdDogMTExCi1vcHRpb25hbF9kb3VibGU6IDExMgotb3B0
aW9uYWxfYm9vbDogdHJ1ZQotb3B0aW9uYWxfc3RyaW5nOiAiMTE1Igotb3B0aW9uYWxfYnl0ZXM6
ICIxMTYiCi1PcHRpb25hbEdyb3VwIDwKLSAgYTogMTE3Ci0+Ci1vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSA8Ci0gIGJiOiAxMTgKLT4KLW9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSA8Ci0gIGM6IDEx
OQotPgotb3B0aW9uYWxfaW1wb3J0X21lc3NhZ2UgPAotICBkOiAxMjAKLT4KLW9wdGlvbmFsX25l
c3RlZF9lbnVtOiBCQVoKLW9wdGlvbmFsX2ZvcmVpZ25fZW51bTogRk9SRUlHTl9CQVoKLW9wdGlv
bmFsX2ltcG9ydF9lbnVtOiBJTVBPUlRfQkFaCi1vcHRpb25hbF9zdHJpbmdfcGllY2U6ICIxMjQi
Ci1vcHRpb25hbF9jb3JkOiAiMTI1Igotb3B0aW9uYWxfcHVibGljX2ltcG9ydF9tZXNzYWdlIDwK
LSAgZTogMTI2Ci0+Ci1vcHRpb25hbF9sYXp5X21lc3NhZ2UgPAotICBiYjogMTI3Ci0+Ci1yZXBl
YXRlZF9pbnQzMjogMjAxCi1yZXBlYXRlZF9pbnQzMjogMzAxCi1yZXBlYXRlZF9pbnQ2NDogMjAy
Ci1yZXBlYXRlZF9pbnQ2NDogMzAyCi1yZXBlYXRlZF91aW50MzI6IDIwMwotcmVwZWF0ZWRfdWlu
dDMyOiAzMDMKLXJlcGVhdGVkX3VpbnQ2NDogMjA0Ci1yZXBlYXRlZF91aW50NjQ6IDMwNAotcmVw
ZWF0ZWRfc2ludDMyOiAyMDUKLXJlcGVhdGVkX3NpbnQzMjogMzA1Ci1yZXBlYXRlZF9zaW50NjQ6
IDIwNgotcmVwZWF0ZWRfc2ludDY0OiAzMDYKLXJlcGVhdGVkX2ZpeGVkMzI6IDIwNwotcmVwZWF0
ZWRfZml4ZWQzMjogMzA3Ci1yZXBlYXRlZF9maXhlZDY0OiAyMDgKLXJlcGVhdGVkX2ZpeGVkNjQ6
IDMwOAotcmVwZWF0ZWRfc2ZpeGVkMzI6IDIwOQotcmVwZWF0ZWRfc2ZpeGVkMzI6IDMwOQotcmVw
ZWF0ZWRfc2ZpeGVkNjQ6IDIxMAotcmVwZWF0ZWRfc2ZpeGVkNjQ6IDMxMAotcmVwZWF0ZWRfZmxv
YXQ6IDIxMQotcmVwZWF0ZWRfZmxvYXQ6IDMxMQotcmVwZWF0ZWRfZG91YmxlOiAyMTIKLXJlcGVh
dGVkX2RvdWJsZTogMzEyCi1yZXBlYXRlZF9ib29sOiB0cnVlCi1yZXBlYXRlZF9ib29sOiBmYWxz
ZQotcmVwZWF0ZWRfc3RyaW5nOiAiMjE1IgotcmVwZWF0ZWRfc3RyaW5nOiAiMzE1IgotcmVwZWF0
ZWRfYnl0ZXM6ICIyMTYiCi1yZXBlYXRlZF9ieXRlczogIjMxNiIKLVJlcGVhdGVkR3JvdXAgPAot
ICBhOiAyMTcKLT4KLVJlcGVhdGVkR3JvdXAgPAotICBhOiAzMTcKLT4KLXJlcGVhdGVkX25lc3Rl
ZF9tZXNzYWdlIDwKLSAgYmI6IDIxOAotPgotcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgPAotICBi
YjogMzE4Ci0+Ci1yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UgPAotICBjOiAyMTkKLT4KLXJlcGVh
dGVkX2ZvcmVpZ25fbWVzc2FnZSA8Ci0gIGM6IDMxOQotPgotcmVwZWF0ZWRfaW1wb3J0X21lc3Nh
Z2UgPAotICBkOiAyMjAKLT4KLXJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIDwKLSAgZDogMzIwCi0+
Ci1yZXBlYXRlZF9uZXN0ZWRfZW51bTogQkFSCi1yZXBlYXRlZF9uZXN0ZWRfZW51bTogQkFaCi1y
ZXBlYXRlZF9mb3JlaWduX2VudW06IEZPUkVJR05fQkFSCi1yZXBlYXRlZF9mb3JlaWduX2VudW06
IEZPUkVJR05fQkFaCi1yZXBlYXRlZF9pbXBvcnRfZW51bTogSU1QT1JUX0JBUgotcmVwZWF0ZWRf
aW1wb3J0X2VudW06IElNUE9SVF9CQVoKLXJlcGVhdGVkX3N0cmluZ19waWVjZTogIjIyNCIKLXJl
cGVhdGVkX3N0cmluZ19waWVjZTogIjMyNCIKLXJlcGVhdGVkX2NvcmQ6ICIyMjUiCi1yZXBlYXRl
ZF9jb3JkOiAiMzI1IgotcmVwZWF0ZWRfbGF6eV9tZXNzYWdlIDwKLSAgYmI6IDIyNwotPgotcmVw
ZWF0ZWRfbGF6eV9tZXNzYWdlIDwKLSAgYmI6IDMyNwotPgotZGVmYXVsdF9pbnQzMjogNDAxCi1k
ZWZhdWx0X2ludDY0OiA0MDIKLWRlZmF1bHRfdWludDMyOiA0MDMKLWRlZmF1bHRfdWludDY0OiA0
MDQKLWRlZmF1bHRfc2ludDMyOiA0MDUKLWRlZmF1bHRfc2ludDY0OiA0MDYKLWRlZmF1bHRfZml4
ZWQzMjogNDA3Ci1kZWZhdWx0X2ZpeGVkNjQ6IDQwOAotZGVmYXVsdF9zZml4ZWQzMjogNDA5Ci1k
ZWZhdWx0X3NmaXhlZDY0OiA0MTAKLWRlZmF1bHRfZmxvYXQ6IDQxMQotZGVmYXVsdF9kb3VibGU6
IDQxMgotZGVmYXVsdF9ib29sOiBmYWxzZQotZGVmYXVsdF9zdHJpbmc6ICI0MTUiCi1kZWZhdWx0
X2J5dGVzOiAiNDE2IgotZGVmYXVsdF9uZXN0ZWRfZW51bTogRk9PCi1kZWZhdWx0X2ZvcmVpZ25f
ZW51bTogRk9SRUlHTl9GT08KLWRlZmF1bHRfaW1wb3J0X2VudW06IElNUE9SVF9GT08KLWRlZmF1
bHRfc3RyaW5nX3BpZWNlOiAiNDI0IgotZGVmYXVsdF9jb3JkOiAiNDI1Igotb25lb2ZfdWludDMy
OiA2MDEKLW9uZW9mX25lc3RlZF9tZXNzYWdlIDwKLSAgYmI6IDYwMgotPgotb25lb2Zfc3RyaW5n
OiAiNjAzIgotb25lb2ZfYnl0ZXM6ICI2MDQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdGVzdGRhdGEvdGV4dF9mb3JtYXRfdW5pdHRlc3RfZGF0YV9wb2ludHlfb25lb2YudHh0IGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL3RleHRfZm9ybWF0X3VuaXR0ZXN0X2RhdGFfcG9p
bnR5X29uZW9mLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUxMDlmNjJhYjZm
NWVkMGJjMmUzMDk1ZGI1NmM4MzgzYzE2NGViZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGRhdGEvdGV4dF9mb3Jt
YXRfdW5pdHRlc3RfZGF0YV9wb2ludHlfb25lb2YudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTI5
ICswLDAgQEAKLW9wdGlvbmFsX2ludDMyOiAxMDEKLW9wdGlvbmFsX2ludDY0OiAxMDIKLW9wdGlv
bmFsX3VpbnQzMjogMTAzCi1vcHRpb25hbF91aW50NjQ6IDEwNAotb3B0aW9uYWxfc2ludDMyOiAx
MDUKLW9wdGlvbmFsX3NpbnQ2NDogMTA2Ci1vcHRpb25hbF9maXhlZDMyOiAxMDcKLW9wdGlvbmFs
X2ZpeGVkNjQ6IDEwOAotb3B0aW9uYWxfc2ZpeGVkMzI6IDEwOQotb3B0aW9uYWxfc2ZpeGVkNjQ6
IDExMAotb3B0aW9uYWxfZmxvYXQ6IDExMQotb3B0aW9uYWxfZG91YmxlOiAxMTIKLW9wdGlvbmFs
X2Jvb2w6IHRydWUKLW9wdGlvbmFsX3N0cmluZzogIjExNSIKLW9wdGlvbmFsX2J5dGVzOiAiMTE2
IgotT3B0aW9uYWxHcm91cCA8Ci0gIGE6IDExNwotPgotb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Ug
PAotICBiYjogMTE4Ci0+Ci1vcHRpb25hbF9mb3JlaWduX21lc3NhZ2UgPAotICBjOiAxMTkKLT4K
LW9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlIDwKLSAgZDogMTIwCi0+Ci1vcHRpb25hbF9uZXN0ZWRf
ZW51bTogQkFaCi1vcHRpb25hbF9mb3JlaWduX2VudW06IEZPUkVJR05fQkFaCi1vcHRpb25hbF9p
bXBvcnRfZW51bTogSU1QT1JUX0JBWgotb3B0aW9uYWxfc3RyaW5nX3BpZWNlOiAiMTI0Igotb3B0
aW9uYWxfY29yZDogIjEyNSIKLW9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2FnZSA8Ci0gIGU6
IDEyNgotPgotb3B0aW9uYWxfbGF6eV9tZXNzYWdlIDwKLSAgYmI6IDEyNwotPgotcmVwZWF0ZWRf
aW50MzI6IDIwMQotcmVwZWF0ZWRfaW50MzI6IDMwMQotcmVwZWF0ZWRfaW50NjQ6IDIwMgotcmVw
ZWF0ZWRfaW50NjQ6IDMwMgotcmVwZWF0ZWRfdWludDMyOiAyMDMKLXJlcGVhdGVkX3VpbnQzMjog
MzAzCi1yZXBlYXRlZF91aW50NjQ6IDIwNAotcmVwZWF0ZWRfdWludDY0OiAzMDQKLXJlcGVhdGVk
X3NpbnQzMjogMjA1Ci1yZXBlYXRlZF9zaW50MzI6IDMwNQotcmVwZWF0ZWRfc2ludDY0OiAyMDYK
LXJlcGVhdGVkX3NpbnQ2NDogMzA2Ci1yZXBlYXRlZF9maXhlZDMyOiAyMDcKLXJlcGVhdGVkX2Zp
eGVkMzI6IDMwNwotcmVwZWF0ZWRfZml4ZWQ2NDogMjA4Ci1yZXBlYXRlZF9maXhlZDY0OiAzMDgK
LXJlcGVhdGVkX3NmaXhlZDMyOiAyMDkKLXJlcGVhdGVkX3NmaXhlZDMyOiAzMDkKLXJlcGVhdGVk
X3NmaXhlZDY0OiAyMTAKLXJlcGVhdGVkX3NmaXhlZDY0OiAzMTAKLXJlcGVhdGVkX2Zsb2F0OiAy
MTEKLXJlcGVhdGVkX2Zsb2F0OiAzMTEKLXJlcGVhdGVkX2RvdWJsZTogMjEyCi1yZXBlYXRlZF9k
b3VibGU6IDMxMgotcmVwZWF0ZWRfYm9vbDogdHJ1ZQotcmVwZWF0ZWRfYm9vbDogZmFsc2UKLXJl
cGVhdGVkX3N0cmluZzogIjIxNSIKLXJlcGVhdGVkX3N0cmluZzogIjMxNSIKLXJlcGVhdGVkX2J5
dGVzOiAiMjE2IgotcmVwZWF0ZWRfYnl0ZXM6ICIzMTYiCi1SZXBlYXRlZEdyb3VwIDwKLSAgYTog
MjE3Ci0+Ci1SZXBlYXRlZEdyb3VwIDwKLSAgYTogMzE3Ci0+Ci1yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZSA8Ci0gIGJiOiAyMTgKLT4KLXJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIDwKLSAgYmI6IDMx
OAotPgotcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlIDwKLSAgYzogMjE5Ci0+Ci1yZXBlYXRlZF9m
b3JlaWduX21lc3NhZ2UgPAotICBjOiAzMTkKLT4KLXJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIDwK
LSAgZDogMjIwCi0+Ci1yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSA8Ci0gIGQ6IDMyMAotPgotcmVw
ZWF0ZWRfbmVzdGVkX2VudW06IEJBUgotcmVwZWF0ZWRfbmVzdGVkX2VudW06IEJBWgotcmVwZWF0
ZWRfZm9yZWlnbl9lbnVtOiBGT1JFSUdOX0JBUgotcmVwZWF0ZWRfZm9yZWlnbl9lbnVtOiBGT1JF
SUdOX0JBWgotcmVwZWF0ZWRfaW1wb3J0X2VudW06IElNUE9SVF9CQVIKLXJlcGVhdGVkX2ltcG9y
dF9lbnVtOiBJTVBPUlRfQkFaCi1yZXBlYXRlZF9zdHJpbmdfcGllY2U6ICIyMjQiCi1yZXBlYXRl
ZF9zdHJpbmdfcGllY2U6ICIzMjQiCi1yZXBlYXRlZF9jb3JkOiAiMjI1IgotcmVwZWF0ZWRfY29y
ZDogIjMyNSIKLXJlcGVhdGVkX2xhenlfbWVzc2FnZSA8Ci0gIGJiOiAyMjcKLT4KLXJlcGVhdGVk
X2xhenlfbWVzc2FnZSA8Ci0gIGJiOiAzMjcKLT4KLWRlZmF1bHRfaW50MzI6IDQwMQotZGVmYXVs
dF9pbnQ2NDogNDAyCi1kZWZhdWx0X3VpbnQzMjogNDAzCi1kZWZhdWx0X3VpbnQ2NDogNDA0Ci1k
ZWZhdWx0X3NpbnQzMjogNDA1Ci1kZWZhdWx0X3NpbnQ2NDogNDA2Ci1kZWZhdWx0X2ZpeGVkMzI6
IDQwNwotZGVmYXVsdF9maXhlZDY0OiA0MDgKLWRlZmF1bHRfc2ZpeGVkMzI6IDQwOQotZGVmYXVs
dF9zZml4ZWQ2NDogNDEwCi1kZWZhdWx0X2Zsb2F0OiA0MTEKLWRlZmF1bHRfZG91YmxlOiA0MTIK
LWRlZmF1bHRfYm9vbDogZmFsc2UKLWRlZmF1bHRfc3RyaW5nOiAiNDE1IgotZGVmYXVsdF9ieXRl
czogIjQxNiIKLWRlZmF1bHRfbmVzdGVkX2VudW06IEZPTwotZGVmYXVsdF9mb3JlaWduX2VudW06
IEZPUkVJR05fRk9PCi1kZWZhdWx0X2ltcG9ydF9lbnVtOiBJTVBPUlRfRk9PCi1kZWZhdWx0X3N0
cmluZ19waWVjZTogIjQyNCIKLWRlZmF1bHRfY29yZDogIjQyNSIKLW9uZW9mX2J5dGVzOiAiNjA0
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RkYXRhL3RleHRfZm9ybWF0X3Vu
aXR0ZXN0X2V4dGVuc2lvbnNfZGF0YS50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGRhdGEv
dGV4dF9mb3JtYXRfdW5pdHRlc3RfZXh0ZW5zaW9uc19kYXRhLnR4dApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOGM4YjFlYjRkODVlYjQyY2MyNmE2MGEzYjBiNTNjOGYyYjFiZmRmZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdGVzdGRhdGEvdGV4dF9mb3JtYXRfdW5pdHRlc3RfZXh0ZW5zaW9uc19kYXRhLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0
aW9uYWxfaW50MzJfZXh0ZW5zaW9uXTogMTAxCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxf
aW50NjRfZXh0ZW5zaW9uXTogMTAyCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfdWludDMy
X2V4dGVuc2lvbl06IDEwMwotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX3VpbnQ2NF9leHRl
bnNpb25dOiAxMDQKLVtwcm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF9zaW50MzJfZXh0ZW5zaW9u
XTogMTA1Ci1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfc2ludDY0X2V4dGVuc2lvbl06IDEw
NgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX2ZpeGVkMzJfZXh0ZW5zaW9uXTogMTA3Ci1b
cHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfZml4ZWQ2NF9leHRlbnNpb25dOiAxMDgKLVtwcm90
b2J1Zl91bml0dGVzdC5vcHRpb25hbF9zZml4ZWQzMl9leHRlbnNpb25dOiAxMDkKLVtwcm90b2J1
Zl91bml0dGVzdC5vcHRpb25hbF9zZml4ZWQ2NF9leHRlbnNpb25dOiAxMTAKLVtwcm90b2J1Zl91
bml0dGVzdC5vcHRpb25hbF9mbG9hdF9leHRlbnNpb25dOiAxMTEKLVtwcm90b2J1Zl91bml0dGVz
dC5vcHRpb25hbF9kb3VibGVfZXh0ZW5zaW9uXTogMTEyCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0
aW9uYWxfYm9vbF9leHRlbnNpb25dOiB0cnVlCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxf
c3RyaW5nX2V4dGVuc2lvbl06ICIxMTUiCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfYnl0
ZXNfZXh0ZW5zaW9uXTogIjExNiIKLVtwcm90b2J1Zl91bml0dGVzdC5vcHRpb25hbGdyb3VwX2V4
dGVuc2lvbl0gewotICBhOiAxMTcKLX0KLVtwcm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF9uZXN0
ZWRfbWVzc2FnZV9leHRlbnNpb25dIHsKLSAgYmI6IDExOAotfQotW3Byb3RvYnVmX3VuaXR0ZXN0
Lm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb25dIHsKLSAgYzogMTE5Ci19Ci1bcHJv
dG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uXSB7Ci0gIGQ6
IDEyMAotfQotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX25lc3RlZF9lbnVtX2V4dGVuc2lv
bl06IEJBWgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX2ZvcmVpZ25fZW51bV9leHRlbnNp
b25dOiBGT1JFSUdOX0JBWgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX2ltcG9ydF9lbnVt
X2V4dGVuc2lvbl06IElNUE9SVF9CQVoKLVtwcm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF9zdHJp
bmdfcGllY2VfZXh0ZW5zaW9uXTogIjEyNCIKLVtwcm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF9j
b3JkX2V4dGVuc2lvbl06ICIxMjUiCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfcHVibGlj
X2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl0gewotICBlOiAxMjYKLX0KLVtwcm90b2J1Zl91bml0
dGVzdC5vcHRpb25hbF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uXSB7Ci0gIGJiOiAxMjcKLX0KLVtw
cm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9pbnQzMl9leHRlbnNpb25dOiAyMDEKLVtwcm90b2J1
Zl91bml0dGVzdC5yZXBlYXRlZF9pbnQzMl9leHRlbnNpb25dOiAzMDEKLVtwcm90b2J1Zl91bml0
dGVzdC5yZXBlYXRlZF9pbnQ2NF9leHRlbnNpb25dOiAyMDIKLVtwcm90b2J1Zl91bml0dGVzdC5y
ZXBlYXRlZF9pbnQ2NF9leHRlbnNpb25dOiAzMDIKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRl
ZF91aW50MzJfZXh0ZW5zaW9uXTogMjAzCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfdWlu
dDMyX2V4dGVuc2lvbl06IDMwMwotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX3VpbnQ2NF9l
eHRlbnNpb25dOiAyMDQKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF91aW50NjRfZXh0ZW5z
aW9uXTogMzA0Ci1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfc2ludDMyX2V4dGVuc2lvbl06
IDIwNQotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX3NpbnQzMl9leHRlbnNpb25dOiAzMDUK
LVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9zaW50NjRfZXh0ZW5zaW9uXTogMjA2Ci1bcHJv
dG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfc2ludDY0X2V4dGVuc2lvbl06IDMwNgotW3Byb3RvYnVm
X3VuaXR0ZXN0LnJlcGVhdGVkX2ZpeGVkMzJfZXh0ZW5zaW9uXTogMjA3Ci1bcHJvdG9idWZfdW5p
dHRlc3QucmVwZWF0ZWRfZml4ZWQzMl9leHRlbnNpb25dOiAzMDcKLVtwcm90b2J1Zl91bml0dGVz
dC5yZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lvbl06IDIwOAotW3Byb3RvYnVmX3VuaXR0ZXN0LnJl
cGVhdGVkX2ZpeGVkNjRfZXh0ZW5zaW9uXTogMzA4Ci1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0
ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uXTogMjA5Ci1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRf
c2ZpeGVkMzJfZXh0ZW5zaW9uXTogMzA5Ci1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfc2Zp
eGVkNjRfZXh0ZW5zaW9uXTogMjEwCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfc2ZpeGVk
NjRfZXh0ZW5zaW9uXTogMzEwCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfZmxvYXRfZXh0
ZW5zaW9uXTogMjExCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfZmxvYXRfZXh0ZW5zaW9u
XTogMzExCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbl06IDIx
MgotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb25dOiAzMTIKLVtw
cm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9ib29sX2V4dGVuc2lvbl06IHRydWUKLVtwcm90b2J1
Zl91bml0dGVzdC5yZXBlYXRlZF9ib29sX2V4dGVuc2lvbl06IGZhbHNlCi1bcHJvdG9idWZfdW5p
dHRlc3QucmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbl06ICIyMTUiCi1bcHJvdG9idWZfdW5pdHRl
c3QucmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbl06ICIzMTUiCi1bcHJvdG9idWZfdW5pdHRlc3Qu
cmVwZWF0ZWRfYnl0ZXNfZXh0ZW5zaW9uXTogIjIxNiIKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBl
YXRlZF9ieXRlc19leHRlbnNpb25dOiAiMzE2IgotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVk
Z3JvdXBfZXh0ZW5zaW9uXSB7Ci0gIGE6IDIxNwotfQotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVh
dGVkZ3JvdXBfZXh0ZW5zaW9uXSB7Ci0gIGE6IDMxNwotfQotW3Byb3RvYnVmX3VuaXR0ZXN0LnJl
cGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl0gewotICBiYjogMjE4Ci19Ci1bcHJvdG9i
dWZfdW5pdHRlc3QucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uXSB7Ci0gIGJiOiAz
MTgKLX0KLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5z
aW9uXSB7Ci0gIGM6IDIxOQotfQotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX2ZvcmVpZ25f
bWVzc2FnZV9leHRlbnNpb25dIHsKLSAgYzogMzE5Ci19Ci1bcHJvdG9idWZfdW5pdHRlc3QucmVw
ZWF0ZWRfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uXSB7Ci0gIGQ6IDIyMAotfQotW3Byb3RvYnVm
X3VuaXR0ZXN0LnJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl0gewotICBkOiAzMjAK
LX0KLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb25dOiBC
QVIKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb25dOiBC
QVoKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uXTog
Rk9SRUlHTl9CQVIKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9mb3JlaWduX2VudW1fZXh0
ZW5zaW9uXTogRk9SRUlHTl9CQVoKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9pbXBvcnRf
ZW51bV9leHRlbnNpb25dOiBJTVBPUlRfQkFSCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRf
aW1wb3J0X2VudW1fZXh0ZW5zaW9uXTogSU1QT1JUX0JBWgotW3Byb3RvYnVmX3VuaXR0ZXN0LnJl
cGVhdGVkX3N0cmluZ19waWVjZV9leHRlbnNpb25dOiAiMjI0IgotW3Byb3RvYnVmX3VuaXR0ZXN0
LnJlcGVhdGVkX3N0cmluZ19waWVjZV9leHRlbnNpb25dOiAiMzI0IgotW3Byb3RvYnVmX3VuaXR0
ZXN0LnJlcGVhdGVkX2NvcmRfZXh0ZW5zaW9uXTogIjIyNSIKLVtwcm90b2J1Zl91bml0dGVzdC5y
ZXBlYXRlZF9jb3JkX2V4dGVuc2lvbl06ICIzMjUiCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0
ZWRfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbl0gewotICBiYjogMjI3Ci19Ci1bcHJvdG9idWZfdW5p
dHRlc3QucmVwZWF0ZWRfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbl0gewotICBiYjogMzI3Ci19Ci1b
cHJvdG9idWZfdW5pdHRlc3QuZGVmYXVsdF9pbnQzMl9leHRlbnNpb25dOiA0MDEKLVtwcm90b2J1
Zl91bml0dGVzdC5kZWZhdWx0X2ludDY0X2V4dGVuc2lvbl06IDQwMgotW3Byb3RvYnVmX3VuaXR0
ZXN0LmRlZmF1bHRfdWludDMyX2V4dGVuc2lvbl06IDQwMwotW3Byb3RvYnVmX3VuaXR0ZXN0LmRl
ZmF1bHRfdWludDY0X2V4dGVuc2lvbl06IDQwNAotW3Byb3RvYnVmX3VuaXR0ZXN0LmRlZmF1bHRf
c2ludDMyX2V4dGVuc2lvbl06IDQwNQotW3Byb3RvYnVmX3VuaXR0ZXN0LmRlZmF1bHRfc2ludDY0
X2V4dGVuc2lvbl06IDQwNgotW3Byb3RvYnVmX3VuaXR0ZXN0LmRlZmF1bHRfZml4ZWQzMl9leHRl
bnNpb25dOiA0MDcKLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0X2ZpeGVkNjRfZXh0ZW5zaW9u
XTogNDA4Ci1bcHJvdG9idWZfdW5pdHRlc3QuZGVmYXVsdF9zZml4ZWQzMl9leHRlbnNpb25dOiA0
MDkKLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0X3NmaXhlZDY0X2V4dGVuc2lvbl06IDQxMAot
W3Byb3RvYnVmX3VuaXR0ZXN0LmRlZmF1bHRfZmxvYXRfZXh0ZW5zaW9uXTogNDExCi1bcHJvdG9i
dWZfdW5pdHRlc3QuZGVmYXVsdF9kb3VibGVfZXh0ZW5zaW9uXTogNDEyCi1bcHJvdG9idWZfdW5p
dHRlc3QuZGVmYXVsdF9ib29sX2V4dGVuc2lvbl06IGZhbHNlCi1bcHJvdG9idWZfdW5pdHRlc3Qu
ZGVmYXVsdF9zdHJpbmdfZXh0ZW5zaW9uXTogIjQxNSIKLVtwcm90b2J1Zl91bml0dGVzdC5kZWZh
dWx0X2J5dGVzX2V4dGVuc2lvbl06ICI0MTYiCi1bcHJvdG9idWZfdW5pdHRlc3QuZGVmYXVsdF9u
ZXN0ZWRfZW51bV9leHRlbnNpb25dOiBGT08KLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0X2Zv
cmVpZ25fZW51bV9leHRlbnNpb25dOiBGT1JFSUdOX0ZPTwotW3Byb3RvYnVmX3VuaXR0ZXN0LmRl
ZmF1bHRfaW1wb3J0X2VudW1fZXh0ZW5zaW9uXTogSU1QT1JUX0ZPTwotW3Byb3RvYnVmX3VuaXR0
ZXN0LmRlZmF1bHRfc3RyaW5nX3BpZWNlX2V4dGVuc2lvbl06ICI0MjQiCi1bcHJvdG9idWZfdW5p
dHRlc3QuZGVmYXVsdF9jb3JkX2V4dGVuc2lvbl06ICI0MjUiCi1bcHJvdG9idWZfdW5pdHRlc3Qu
b25lb2ZfdWludDMyX2V4dGVuc2lvbl06IDYwMQotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9uZW9mX25l
c3RlZF9tZXNzYWdlX2V4dGVuc2lvbl0gewotICBiYjogNjAyCi19Ci1bcHJvdG9idWZfdW5pdHRl
c3Qub25lb2Zfc3RyaW5nX2V4dGVuc2lvbl06ICI2MDMiCi1bcHJvdG9idWZfdW5pdHRlc3Qub25l
b2ZfYnl0ZXNfZXh0ZW5zaW9uXTogIjYwNCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi90ZXN0ZGF0YS90ZXh0X2Zvcm1hdF91bml0dGVzdF9leHRlbnNpb25zX2RhdGFfcG9pbnR5LnR4
dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0ZGF0YS90ZXh0X2Zvcm1hdF91bml0dGVzdF9leHRl
bnNpb25zX2RhdGFfcG9pbnR5LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMy
Zjc0NDVmM2Y3NWJkYWFlMzdmMmNiZWU1ZmNlYTNlNzYxNjlhOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGRhdGEv
dGV4dF9mb3JtYXRfdW5pdHRlc3RfZXh0ZW5zaW9uc19kYXRhX3BvaW50eS50eHQKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzQgKzAsMCBAQAotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX2ludDMy
X2V4dGVuc2lvbl06IDEwMQotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX2ludDY0X2V4dGVu
c2lvbl06IDEwMgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX3VpbnQzMl9leHRlbnNpb25d
OiAxMDMKLVtwcm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF91aW50NjRfZXh0ZW5zaW9uXTogMTA0
Ci1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfc2ludDMyX2V4dGVuc2lvbl06IDEwNQotW3By
b3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX3NpbnQ2NF9leHRlbnNpb25dOiAxMDYKLVtwcm90b2J1
Zl91bml0dGVzdC5vcHRpb25hbF9maXhlZDMyX2V4dGVuc2lvbl06IDEwNwotW3Byb3RvYnVmX3Vu
aXR0ZXN0Lm9wdGlvbmFsX2ZpeGVkNjRfZXh0ZW5zaW9uXTogMTA4Ci1bcHJvdG9idWZfdW5pdHRl
c3Qub3B0aW9uYWxfc2ZpeGVkMzJfZXh0ZW5zaW9uXTogMTA5Ci1bcHJvdG9idWZfdW5pdHRlc3Qu
b3B0aW9uYWxfc2ZpeGVkNjRfZXh0ZW5zaW9uXTogMTEwCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0
aW9uYWxfZmxvYXRfZXh0ZW5zaW9uXTogMTExCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxf
ZG91YmxlX2V4dGVuc2lvbl06IDExMgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX2Jvb2xf
ZXh0ZW5zaW9uXTogdHJ1ZQotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX3N0cmluZ19leHRl
bnNpb25dOiAiMTE1IgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX2J5dGVzX2V4dGVuc2lv
bl06ICIxMTYiCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxncm91cF9leHRlbnNpb25dIDwK
LSAgYTogMTE3Ci0+Ci1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Vf
ZXh0ZW5zaW9uXSA8Ci0gIGJiOiAxMTgKLT4KLVtwcm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF9m
b3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uXSA8Ci0gIGM6IDExOQotPgotW3Byb3RvYnVmX3VuaXR0
ZXN0Lm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl0gPAotICBkOiAxMjAKLT4KLVtw
cm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF9uZXN0ZWRfZW51bV9leHRlbnNpb25dOiBCQVoKLVtw
cm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uXTogRk9SRUlH
Tl9CQVoKLVtwcm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF9pbXBvcnRfZW51bV9leHRlbnNpb25d
OiBJTVBPUlRfQkFaCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfc3RyaW5nX3BpZWNlX2V4
dGVuc2lvbl06ICIxMjQiCi1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9uYWxfY29yZF9leHRlbnNp
b25dOiAiMTI1IgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVz
c2FnZV9leHRlbnNpb25dIDwKLSAgZTogMTI2Ci0+Ci1bcHJvdG9idWZfdW5pdHRlc3Qub3B0aW9u
YWxfbGF6eV9tZXNzYWdlX2V4dGVuc2lvbl0gPAotICBiYjogMTI3Ci0+Ci1bcHJvdG9idWZfdW5p
dHRlc3QucmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uXTogMjAxCi1bcHJvdG9idWZfdW5pdHRlc3Qu
cmVwZWF0ZWRfaW50MzJfZXh0ZW5zaW9uXTogMzAxCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0
ZWRfaW50NjRfZXh0ZW5zaW9uXTogMjAyCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfaW50
NjRfZXh0ZW5zaW9uXTogMzAyCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfdWludDMyX2V4
dGVuc2lvbl06IDIwMwotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX3VpbnQzMl9leHRlbnNp
b25dOiAzMDMKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uXTog
MjA0Ci1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfdWludDY0X2V4dGVuc2lvbl06IDMwNAot
W3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX3NpbnQzMl9leHRlbnNpb25dOiAyMDUKLVtwcm90
b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uXTogMzA1Ci1bcHJvdG9idWZf
dW5pdHRlc3QucmVwZWF0ZWRfc2ludDY0X2V4dGVuc2lvbl06IDIwNgotW3Byb3RvYnVmX3VuaXR0
ZXN0LnJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb25dOiAzMDYKLVtwcm90b2J1Zl91bml0dGVzdC5y
ZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbl06IDIwNwotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVh
dGVkX2ZpeGVkMzJfZXh0ZW5zaW9uXTogMzA3Ci1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRf
Zml4ZWQ2NF9leHRlbnNpb25dOiAyMDgKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9maXhl
ZDY0X2V4dGVuc2lvbl06IDMwOAotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX3NmaXhlZDMy
X2V4dGVuc2lvbl06IDIwOQotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX3NmaXhlZDMyX2V4
dGVuc2lvbl06IDMwOQotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVu
c2lvbl06IDIxMAotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX3NmaXhlZDY0X2V4dGVuc2lv
bl06IDMxMAotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lvbl06IDIx
MQotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lvbl06IDMxMQotW3By
b3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb25dOiAyMTIKLVtwcm90b2J1
Zl91bml0dGVzdC5yZXBlYXRlZF9kb3VibGVfZXh0ZW5zaW9uXTogMzEyCi1bcHJvdG9idWZfdW5p
dHRlc3QucmVwZWF0ZWRfYm9vbF9leHRlbnNpb25dOiB0cnVlCi1bcHJvdG9idWZfdW5pdHRlc3Qu
cmVwZWF0ZWRfYm9vbF9leHRlbnNpb25dOiBmYWxzZQotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVh
dGVkX3N0cmluZ19leHRlbnNpb25dOiAiMjE1IgotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVk
X3N0cmluZ19leHRlbnNpb25dOiAiMzE1IgotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX2J5
dGVzX2V4dGVuc2lvbl06ICIyMTYiCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfYnl0ZXNf
ZXh0ZW5zaW9uXTogIjMxNiIKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZGdyb3VwX2V4dGVu
c2lvbl0gPAotICBhOiAyMTcKLT4KLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZGdyb3VwX2V4
dGVuc2lvbl0gPAotICBhOiAzMTcKLT4KLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9uZXN0
ZWRfbWVzc2FnZV9leHRlbnNpb25dIDwKLSAgYmI6IDIxOAotPgotW3Byb3RvYnVmX3VuaXR0ZXN0
LnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl0gPAotICBiYjogMzE4Ci0+Ci1bcHJv
dG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lvbl0gPAotICBj
OiAyMTkKLT4KLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0
ZW5zaW9uXSA8Ci0gIGM6IDMxOQotPgotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX2ltcG9y
dF9tZXNzYWdlX2V4dGVuc2lvbl0gPAotICBkOiAyMjAKLT4KLVtwcm90b2J1Zl91bml0dGVzdC5y
ZXBlYXRlZF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb25dIDwKLSAgZDogMzIwCi0+Ci1bcHJvdG9i
dWZfdW5pdHRlc3QucmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uXTogQkFSCi1bcHJvdG9i
dWZfdW5pdHRlc3QucmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uXTogQkFaCi1bcHJvdG9i
dWZfdW5pdHRlc3QucmVwZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbl06IEZPUkVJR05fQkFS
Ci1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbl06IEZP
UkVJR05fQkFaCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5z
aW9uXTogSU1QT1JUX0JBUgotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX2ltcG9ydF9lbnVt
X2V4dGVuc2lvbl06IElNUE9SVF9CQVoKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9zdHJp
bmdfcGllY2VfZXh0ZW5zaW9uXTogIjIyNCIKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9z
dHJpbmdfcGllY2VfZXh0ZW5zaW9uXTogIjMyNCIKLVtwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRl
ZF9jb3JkX2V4dGVuc2lvbl06ICIyMjUiCi1bcHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfY29y
ZF9leHRlbnNpb25dOiAiMzI1IgotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX2xhenlfbWVz
c2FnZV9leHRlbnNpb25dIDwKLSAgYmI6IDIyNwotPgotW3Byb3RvYnVmX3VuaXR0ZXN0LnJlcGVh
dGVkX2xhenlfbWVzc2FnZV9leHRlbnNpb25dIDwKLSAgYmI6IDMyNwotPgotW3Byb3RvYnVmX3Vu
aXR0ZXN0LmRlZmF1bHRfaW50MzJfZXh0ZW5zaW9uXTogNDAxCi1bcHJvdG9idWZfdW5pdHRlc3Qu
ZGVmYXVsdF9pbnQ2NF9leHRlbnNpb25dOiA0MDIKLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0
X3VpbnQzMl9leHRlbnNpb25dOiA0MDMKLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0X3VpbnQ2
NF9leHRlbnNpb25dOiA0MDQKLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0X3NpbnQzMl9leHRl
bnNpb25dOiA0MDUKLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0X3NpbnQ2NF9leHRlbnNpb25d
OiA0MDYKLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0X2ZpeGVkMzJfZXh0ZW5zaW9uXTogNDA3
Ci1bcHJvdG9idWZfdW5pdHRlc3QuZGVmYXVsdF9maXhlZDY0X2V4dGVuc2lvbl06IDQwOAotW3By
b3RvYnVmX3VuaXR0ZXN0LmRlZmF1bHRfc2ZpeGVkMzJfZXh0ZW5zaW9uXTogNDA5Ci1bcHJvdG9i
dWZfdW5pdHRlc3QuZGVmYXVsdF9zZml4ZWQ2NF9leHRlbnNpb25dOiA0MTAKLVtwcm90b2J1Zl91
bml0dGVzdC5kZWZhdWx0X2Zsb2F0X2V4dGVuc2lvbl06IDQxMQotW3Byb3RvYnVmX3VuaXR0ZXN0
LmRlZmF1bHRfZG91YmxlX2V4dGVuc2lvbl06IDQxMgotW3Byb3RvYnVmX3VuaXR0ZXN0LmRlZmF1
bHRfYm9vbF9leHRlbnNpb25dOiBmYWxzZQotW3Byb3RvYnVmX3VuaXR0ZXN0LmRlZmF1bHRfc3Ry
aW5nX2V4dGVuc2lvbl06ICI0MTUiCi1bcHJvdG9idWZfdW5pdHRlc3QuZGVmYXVsdF9ieXRlc19l
eHRlbnNpb25dOiAiNDE2IgotW3Byb3RvYnVmX3VuaXR0ZXN0LmRlZmF1bHRfbmVzdGVkX2VudW1f
ZXh0ZW5zaW9uXTogRk9PCi1bcHJvdG9idWZfdW5pdHRlc3QuZGVmYXVsdF9mb3JlaWduX2VudW1f
ZXh0ZW5zaW9uXTogRk9SRUlHTl9GT08KLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0X2ltcG9y
dF9lbnVtX2V4dGVuc2lvbl06IElNUE9SVF9GT08KLVtwcm90b2J1Zl91bml0dGVzdC5kZWZhdWx0
X3N0cmluZ19waWVjZV9leHRlbnNpb25dOiAiNDI0IgotW3Byb3RvYnVmX3VuaXR0ZXN0LmRlZmF1
bHRfY29yZF9leHRlbnNpb25dOiAiNDI1IgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9uZW9mX3VpbnQz
Ml9leHRlbnNpb25dOiA2MDEKLVtwcm90b2J1Zl91bml0dGVzdC5vbmVvZl9uZXN0ZWRfbWVzc2Fn
ZV9leHRlbnNpb25dIDwKLSAgYmI6IDYwMgotPgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9uZW9mX3N0
cmluZ19leHRlbnNpb25dOiAiNjAzIgotW3Byb3RvYnVmX3VuaXR0ZXN0Lm9uZW9mX2J5dGVzX2V4
dGVuc2lvbl06ICI2MDQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGluZy9m
aWxlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmlsZS5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2QwN2IxMjc2Y2Y5NjY5OGY5NWIzNjdkNjU5OTlkZTVlNmViMjM2
Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRv
bkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyBlbXVsYXRlcyBnb29nbGUzL2ZpbGUvYmFz
ZS9maWxlLmNjCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmg+Ci0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgotI2lmZGVmIF9NU0NfVkVSCi0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gIC8v
IHllYWgsIHJpZ2h0Ci0jaW5jbHVkZSA8d2luZG93cy5oPiAgICAgICAgIC8vIEZpbmQqRmlsZSgp
LiAgOigKLSNpbmNsdWRlIDxpby5oPgotI2luY2x1ZGUgPGRpcmVjdC5oPgotI2Vsc2UKLSNpbmNs
dWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGVy
cm5vLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotI2lm
ZGVmIF9XSU4zMgotI2RlZmluZSBta2RpcihuYW1lLCBtb2RlKSBta2RpcihuYW1lKQotLy8gV2lu
ZG93cyBkb2Vzbid0IGhhdmUgc3ltYm9saWMgbGlua3MuCi0jZGVmaW5lIGxzdGF0IHN0YXQKLSNp
Zm5kZWYgRl9PSwotI2RlZmluZSBGX09LIDAwICAvLyBub3QgZGVmaW5lZCBieSBNU1ZDIGZvciB3
aGF0ZXZlciByZWFzb24KLSNlbmRpZgotI2VuZGlmCi0KLWJvb2wgRmlsZTo6RXhpc3RzKGNvbnN0
IHN0cmluZyYgbmFtZSkgewotICByZXR1cm4gYWNjZXNzKG5hbWUuY19zdHIoKSwgRl9PSykgPT0g
MDsKLX0KLQotYm9vbCBGaWxlOjpSZWFkRmlsZVRvU3RyaW5nKGNvbnN0IHN0cmluZyYgbmFtZSwg
c3RyaW5nKiBvdXRwdXQpIHsKLSAgY2hhciBidWZmZXJbMTAyNF07Ci0gIEZJTEUqIGZpbGUgPSBm
b3BlbihuYW1lLmNfc3RyKCksICJyYiIpOwotICBpZiAoZmlsZSA9PSBOVUxMKSByZXR1cm4gZmFs
c2U7Ci0KLSAgd2hpbGUgKHRydWUpIHsKLSAgICBzaXplX3QgbiA9IGZyZWFkKGJ1ZmZlciwgMSwg
c2l6ZW9mKGJ1ZmZlciksIGZpbGUpOwotICAgIGlmIChuIDw9IDApIGJyZWFrOwotICAgIG91dHB1
dC0+YXBwZW5kKGJ1ZmZlciwgbik7Ci0gIH0KLQotICBpbnQgZXJyb3IgPSBmZXJyb3IoZmlsZSk7
Ci0gIGlmIChmY2xvc2UoZmlsZSkgIT0gMCkgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gZXJyb3Ig
PT0gMDsKLX0KLQotdm9pZCBGaWxlOjpSZWFkRmlsZVRvU3RyaW5nT3JEaWUoY29uc3Qgc3RyaW5n
JiBuYW1lLCBzdHJpbmcqIG91dHB1dCkgewotICBHT09HTEVfQ0hFQ0soUmVhZEZpbGVUb1N0cmlu
ZyhuYW1lLCBvdXRwdXQpKSA8PCAiQ291bGQgbm90IHJlYWQ6ICIgPDwgbmFtZTsKLX0KLQotYm9v
bCBGaWxlOjpXcml0ZVN0cmluZ1RvRmlsZShjb25zdCBzdHJpbmcmIGNvbnRlbnRzLCBjb25zdCBz
dHJpbmcmIG5hbWUpIHsKLSAgRklMRSogZmlsZSA9IGZvcGVuKG5hbWUuY19zdHIoKSwgIndiIik7
Ci0gIGlmIChmaWxlID09IE5VTEwpIHsKLSAgICBHT09HTEVfTE9HKEVSUk9SKSA8PCAiZm9wZW4o
IiA8PCBuYW1lIDw8ICIsIFwid2JcIik6ICIgPDwgc3RyZXJyb3IoZXJybm8pOwotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotCi0gIGlmIChmd3JpdGUoY29udGVudHMuZGF0YSgpLCAxLCBjb250ZW50
cy5zaXplKCksIGZpbGUpICE9IGNvbnRlbnRzLnNpemUoKSkgewotICAgIEdPT0dMRV9MT0coRVJS
T1IpIDw8ICJmd3JpdGUoIiA8PCBuYW1lIDw8ICIpOiAiIDw8IHN0cmVycm9yKGVycm5vKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAoZmNsb3NlKGZpbGUpICE9IDApIHsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRmlsZTo6V3JpdGVT
dHJpbmdUb0ZpbGVPckRpZShjb25zdCBzdHJpbmcmIGNvbnRlbnRzLCBjb25zdCBzdHJpbmcmIG5h
bWUpIHsKLSAgRklMRSogZmlsZSA9IGZvcGVuKG5hbWUuY19zdHIoKSwgIndiIik7Ci0gIEdPT0dM
RV9DSEVDSyhmaWxlICE9IE5VTEwpCi0gICAgICA8PCAiZm9wZW4oIiA8PCBuYW1lIDw8ICIsIFwi
d2JcIik6ICIgPDwgc3RyZXJyb3IoZXJybm8pOwotICBHT09HTEVfQ0hFQ0tfRVEoZndyaXRlKGNv
bnRlbnRzLmRhdGEoKSwgMSwgY29udGVudHMuc2l6ZSgpLCBmaWxlKSwKLSAgICAgICAgICAgICAg
ICAgIGNvbnRlbnRzLnNpemUoKSkKLSAgICAgIDw8ICJmd3JpdGUoIiA8PCBuYW1lIDw8ICIpOiAi
IDw8IHN0cmVycm9yKGVycm5vKTsKLSAgR09PR0xFX0NIRUNLKGZjbG9zZShmaWxlKSA9PSAwKQot
ICAgICAgPDwgImZjbG9zZSgiIDw8IG5hbWUgPDwgIik6ICIgPDwgc3RyZXJyb3IoZXJybm8pOwot
fQotCi1ib29sIEZpbGU6OkNyZWF0ZURpcihjb25zdCBzdHJpbmcmIG5hbWUsIGludCBtb2RlKSB7
Ci0gIHJldHVybiBta2RpcihuYW1lLmNfc3RyKCksIG1vZGUpID09IDA7Ci19Ci0KLWJvb2wgRmls
ZTo6UmVjdXJzaXZlbHlDcmVhdGVEaXIoY29uc3Qgc3RyaW5nJiBwYXRoLCBpbnQgbW9kZSkgewot
ICBpZiAoQ3JlYXRlRGlyKHBhdGgsIG1vZGUpKSByZXR1cm4gdHJ1ZTsKLQotICBpZiAoRXhpc3Rz
KHBhdGgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gVHJ5IGNyZWF0aW5nIHRoZSBwYXJlbnQuCi0g
IHN0cmluZzo6c2l6ZV90eXBlIHNsYXNocG9zID0gcGF0aC5maW5kX2xhc3Rfb2YoJy8nKTsKLSAg
aWYgKHNsYXNocG9zID09IHN0cmluZzo6bnBvcykgewotICAgIC8vIE5vIHBhcmVudCBnaXZlbi4K
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gUmVjdXJzaXZlbHlDcmVhdGVEaXIo
cGF0aC5zdWJzdHIoMCwgc2xhc2hwb3MpLCBtb2RlKSAmJgotICAgICAgICAgQ3JlYXRlRGlyKHBh
dGgsIG1vZGUpOwotfQotCi12b2lkIEZpbGU6OkRlbGV0ZVJlY3Vyc2l2ZWx5KGNvbnN0IHN0cmlu
ZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogZHVtbXkxLCB2b2lk
KiBkdW1teTIpIHsKLSAgaWYgKG5hbWUuZW1wdHkoKSkgcmV0dXJuOwotCi0gIC8vIFdlIGRvbid0
IGNhcmUgdG9vIG11Y2ggYWJvdXQgZXJyb3IgY2hlY2tpbmcgaGVyZSBzaW5jZSB0aGlzIGlzIG9u
bHkgdXNlZAotICAvLyBpbiB0ZXN0cyB0byBkZWxldGUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIHRo
YXQgYXJlIHVuZGVyIC90bXAgYW55d2F5LgotCi0jaWZkZWYgX01TQ19WRVIKLSAgLy8gVGhpcyBp
bnRlcmZhY2UgaXMgc28gd2VpcmQuCi0gIFdJTjMyX0ZJTkRfREFUQSBmaW5kX2RhdGE7Ci0gIEhB
TkRMRSBmaW5kX2hhbmRsZSA9IEZpbmRGaXJzdEZpbGUoKG5hbWUgKyAiLyoiKS5jX3N0cigpLCAm
ZmluZF9kYXRhKTsKLSAgaWYgKGZpbmRfaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7
Ci0gICAgLy8gSnVzdCBkZWxldGUgaXQsIHdoYXRldmVyIGl0IGlzLgotICAgIERlbGV0ZUZpbGUo
bmFtZS5jX3N0cigpKTsKLSAgICBSZW1vdmVEaXJlY3RvcnkobmFtZS5jX3N0cigpKTsKLSAgICBy
ZXR1cm47Ci0gIH0KLQotICBkbyB7Ci0gICAgc3RyaW5nIGVudHJ5X25hbWUgPSBmaW5kX2RhdGEu
Y0ZpbGVOYW1lOwotICAgIGlmIChlbnRyeV9uYW1lICE9ICIuIiAmJiBlbnRyeV9uYW1lICE9ICIu
LiIpIHsKLSAgICAgIHN0cmluZyBwYXRoID0gbmFtZSArICIvIiArIGVudHJ5X25hbWU7Ci0gICAg
ICBpZiAoZmluZF9kYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RP
UlkpIHsKLSAgICAgICAgRGVsZXRlUmVjdXJzaXZlbHkocGF0aCwgTlVMTCwgTlVMTCk7Ci0gICAg
ICAgIFJlbW92ZURpcmVjdG9yeShwYXRoLmNfc3RyKCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgRGVsZXRlRmlsZShwYXRoLmNfc3RyKCkpOwotICAgICAgfQotICAgIH0KLSAgfSB3aGlsZShG
aW5kTmV4dEZpbGUoZmluZF9oYW5kbGUsICZmaW5kX2RhdGEpKTsKLSAgRmluZENsb3NlKGZpbmRf
aGFuZGxlKTsKLQotICBSZW1vdmVEaXJlY3RvcnkobmFtZS5jX3N0cigpKTsKLSNlbHNlCi0gIC8v
IFVzZSBvcGVuZGlyKCkhICBZYXkhCi0gIC8vIGxzdGF0ID0gRG9uJ3QgZm9sbG93IHN5bWJvbGlj
IGxpbmtzLgotICBzdHJ1Y3Qgc3RhdCBzdGF0czsKLSAgaWYgKGxzdGF0KG5hbWUuY19zdHIoKSwg
JnN0YXRzKSAhPSAwKSByZXR1cm47Ci0KLSAgaWYgKFNfSVNESVIoc3RhdHMuc3RfbW9kZSkpIHsK
LSAgICBESVIqIGRpciA9IG9wZW5kaXIobmFtZS5jX3N0cigpKTsKLSAgICBpZiAoZGlyICE9IE5V
TEwpIHsKLSAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHN0cnVjdCBkaXJlbnQqIGVudHJ5
ID0gcmVhZGRpcihkaXIpOwotICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkgYnJlYWs7Ci0gICAg
ICAgIHN0cmluZyBlbnRyeV9uYW1lID0gZW50cnktPmRfbmFtZTsKLSAgICAgICAgaWYgKGVudHJ5
X25hbWUgIT0gIi4iICYmIGVudHJ5X25hbWUgIT0gIi4uIikgewotICAgICAgICAgIERlbGV0ZVJl
Y3Vyc2l2ZWx5KG5hbWUgKyAiLyIgKyBlbnRyeV9uYW1lLCBOVUxMLCBOVUxMKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLQotICAgIGNsb3NlZGlyKGRpcik7Ci0gICAgcm1kaXIobmFtZS5j
X3N0cigpKTsKLQotICB9IGVsc2UgaWYgKFNfSVNSRUcoc3RhdHMuc3RfbW9kZSkpIHsKLSAgICBy
ZW1vdmUobmFtZS5jX3N0cigpKTsKLSAgfQotI2VuZGlmCi19Ci0KLWJvb2wgRmlsZTo6Q2hhbmdl
V29ya2luZ0RpcmVjdG9yeShjb25zdCBzdHJpbmcmIG5ld193b3JraW5nX2RpcmVjdG9yeSkgewot
ICByZXR1cm4gY2hkaXIobmV3X3dvcmtpbmdfZGlyZWN0b3J5LmNfc3RyKCkpID09IDA7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmlsZS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3Rlc3RpbmcvZmlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjYzZjgw
ZTdiMjk0NjEzNDE4NDY0MWExNjQzNTE4ZDkxMjIxMTAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2ZpbGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0g
R29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRh
KQotLy8gZW11bGF0ZXMgZ29vZ2xlMy9maWxlL2Jhc2UvZmlsZS5oCi0KLSNpZm5kZWYgR09PR0xF
X1BST1RPQlVGX1RFU1RJTkdfRklMRV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1RFU1RJ
TkdfRklMRV9IX18KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1jb25zdCBpbnQg
REVGQVVMVF9GSUxFX01PREUgPSAwNzc3OwotCi0vLyBQcm90b2NvbCBidWZmZXIgY29kZSBvbmx5
IHVzZXMgYSBjb3VwbGUgc3RhdGljIG1ldGhvZHMgb2YgRmlsZSwgYW5kIG9ubHkKLS8vIGluIHRl
c3RzLgotY2xhc3MgRmlsZSB7Ci0gcHVibGljOgotICAvLyBDaGVjayBpZiB0aGUgZmlsZSBleGlz
dHMuCi0gIHN0YXRpYyBib29sIEV4aXN0cyhjb25zdCBzdHJpbmcmIG5hbWUpOwotCi0gIC8vIFJl
YWQgYW4gZW50aXJlIGZpbGUgdG8gYSBzdHJpbmcuICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVs
LCBmYWxzZQotICAvLyBvdGhlcndpc2UuCi0gIHN0YXRpYyBib29sIFJlYWRGaWxlVG9TdHJpbmco
Y29uc3Qgc3RyaW5nJiBuYW1lLCBzdHJpbmcqIG91dHB1dCk7Ci0KLSAgLy8gU2FtZSBhcyBhYm92
ZSwgYnV0IGNyYXNoIG9uIGZhaWx1cmUuCi0gIHN0YXRpYyB2b2lkIFJlYWRGaWxlVG9TdHJpbmdP
ckRpZShjb25zdCBzdHJpbmcmIG5hbWUsIHN0cmluZyogb3V0cHV0KTsKLQotICAvLyBDcmVhdGUg
YSBmaWxlIGFuZCB3cml0ZSBhIHN0cmluZyB0byBpdC4KLSAgc3RhdGljIGJvb2wgV3JpdGVTdHJp
bmdUb0ZpbGUoY29uc3Qgc3RyaW5nJiBjb250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RyaW5nJiBuYW1lKTsKLQotICAvLyBTYW1lIGFzIGFib3ZlLCBidXQg
Y3Jhc2ggb24gZmFpbHVyZS4KLSAgc3RhdGljIHZvaWQgV3JpdGVTdHJpbmdUb0ZpbGVPckRpZShj
b25zdCBzdHJpbmcmIGNvbnRlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0cmluZyYgbmFtZSk7Ci0KLSAgLy8gQ3JlYXRlIGEgZGlyZWN0b3J5LgotICBz
dGF0aWMgYm9vbCBDcmVhdGVEaXIoY29uc3Qgc3RyaW5nJiBuYW1lLCBpbnQgbW9kZSk7Ci0KLSAg
Ly8gQ3JlYXRlIGEgZGlyZWN0b3J5IGFuZCBhbGwgcGFyZW50IGRpcmVjdG9yaWVzIGlmIG5lY2Vz
c2FyeS4KLSAgc3RhdGljIGJvb2wgUmVjdXJzaXZlbHlDcmVhdGVEaXIoY29uc3Qgc3RyaW5nJiBw
YXRoLCBpbnQgbW9kZSk7Ci0KLSAgLy8gSWYgIm5hbWUiIGlzIGEgZmlsZSwgd2UgZGVsZXRlIGl0
LiAgSWYgaXQgaXMgYSBkaXJlY3RvcnksIHdlCi0gIC8vIGNhbGwgRGVsZXRlUmVjdXJzaXZlbHko
KSBmb3IgZWFjaCBmaWxlIG9yIGRpcmVjdG9yeSAob3RoZXIgdGhhbgotICAvLyBkb3QgYW5kIGRv
dWJsZS1kb3QpIHdpdGhpbiBpdCwgYW5kIHRoZW4gZGVsZXRlIHRoZSBkaXJlY3RvcnkgaXRzZWxm
LgotICAvLyBUaGUgImR1bW15IiBwYXJhbWV0ZXJzIGhhdmUgYSBtZWFuaW5nIGluIHRoZSBvcmln
aW5hbCB2ZXJzaW9uIG9mIHRoaXMKLSAgLy8gbWV0aG9kIGJ1dCB0aGV5IGFyZSBub3QgdXNlZCBh
bnl3aGVyZSBpbiBwcm90b2NvbCBidWZmZXJzLgotICBzdGF0aWMgdm9pZCBEZWxldGVSZWN1cnNp
dmVseShjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQqIGR1bW15MSwgdm9pZCogZHVtbXkyKTsKLQotICAvLyBDaGFuZ2Ugd29ya2luZyBkaXJl
Y3RvcnkgdG8gZ2l2ZW4gZGlyZWN0b3J5LgotICBzdGF0aWMgYm9vbCBDaGFuZ2VXb3JraW5nRGly
ZWN0b3J5KGNvbnN0IHN0cmluZyYgbmV3X3dvcmtpbmdfZGlyZWN0b3J5KTsKLQotICBzdGF0aWMg
Ym9vbCBHZXRDb250ZW50cygKLSAgICAgIGNvbnN0IHN0cmluZyYgbmFtZSwgc3RyaW5nKiBvdXRw
dXQsIGJvb2wgLyppc19kZWZhdWx0Ki8pIHsKLSAgICByZXR1cm4gUmVhZEZpbGVUb1N0cmluZyhu
YW1lLCBvdXRwdXQpOwotICB9Ci0KLSAgc3RhdGljIGJvb2wgU2V0Q29udGVudHMoCi0gICAgICBj
b25zdCBzdHJpbmcmIG5hbWUsIGNvbnN0IHN0cmluZyYgY29udGVudHMsIGJvb2wgLyppc19kZWZh
dWx0Ki8pIHsKLSAgICByZXR1cm4gV3JpdGVTdHJpbmdUb0ZpbGUoY29udGVudHMsIG5hbWUpOwot
ICB9Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRmls
ZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29n
bGUKLQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfVEVTVElOR19GSUxFX0hfXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJiOWNkZGVmNTdlNjhjYTJlNmEzYTg3Mzg5MzczM2I3ZjJjYWVmNmQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L3Rlc3RpbmcvZ29vZ2xldGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29v
Z2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gZW11bGF0ZXMgZ29vZ2xlMy90ZXN0aW5nL2Jhc2Uv
cHVibGljL2dvb2dsZXRlc3QuY2MKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5n
L2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9maWxlLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxz
eXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0jaWZkZWYgX01TQ19WRVIKLSNpbmNsdWRlIDxpby5oPgotI2lu
Y2x1ZGUgPGRpcmVjdC5oPgotI2Vsc2UKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxpb3N0cmVhbT4K
LSNpbmNsdWRlIDxmc3RyZWFtPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci0KLSNpZmRlZiBfV0lOMzIKLSNkZWZpbmUgbWtkaXIobmFtZSwgbW9kZSkgbWtkaXIo
bmFtZSkKLSNlbmRpZgotCi0jaWZuZGVmIE9fQklOQVJZCi0jaWZkZWYgX09fQklOQVJZCi0jZGVm
aW5lIE9fQklOQVJZIF9PX0JJTkFSWQotI2Vsc2UKLSNkZWZpbmUgT19CSU5BUlkgMCAgICAgLy8g
SWYgdGhpcyBpc24ndCBkZWZpbmVkLCB0aGUgcGxhdGZvcm0gZG9lc24ndCBuZWVkIGl0LgotI2Vu
ZGlmCi0jZW5kaWYKLQotc3RyaW5nIFRlc3RTb3VyY2VEaXIoKSB7Ci0jaWZuZGVmIEdPT0dMRV9U
SElSRF9QQVJUWV9QUk9UT0JVRgotI2lmbmRlZiBfTVNDX1ZFUgotICAvLyBhdXRvbWFrZSBzZXRz
IHRoZSAic3JjZGlyIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgY2hhciogcmVzdWx0ID0gZ2V0
ZW52KCJzcmNkaXIiKTsKLSAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLSAgfQotI2VuZGlmICAvLyBfTVNDX1ZFUgotCi0gIC8vIExvb2sgZm9yIHRoZSAic3JjIiBk
aXJlY3RvcnkuCi0gIHN0cmluZyBwcmVmaXggPSAiLiI7Ci0KLSAgd2hpbGUgKCFGaWxlOjpFeGlz
dHMocHJlZml4ICsgIi9zcmMvZ29vZ2xlL3Byb3RvYnVmIikpIHsKLSAgICBpZiAoIUZpbGU6OkV4
aXN0cyhwcmVmaXgpKSB7Ci0gICAgICBHT09HTEVfTE9HKEZBVEFMKQotICAgICAgICA8PCAiQ291
bGQgbm90IGZpbmQgcHJvdG9idWYgc291cmNlIGNvZGUuICBQbGVhc2UgcnVuIHRlc3RzIGZyb20g
IgotICAgICAgICAgICAic29tZXdoZXJlIHdpdGhpbiB0aGUgcHJvdG9idWYgc291cmNlIHBhY2th
Z2UuIjsKLSAgICB9Ci0gICAgcHJlZml4ICs9ICIvLi4iOwotICB9Ci0gIHJldHVybiBwcmVmaXgg
KyAiL3NyYyI7Ci0jZWxzZQotICByZXR1cm4gInRoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYyI7Ci0j
ZW5kaWYgIC8vIEdPT0dMRV9USElSRF9QQVJUWV9QUk9UT0JVRgotfQotCi1uYW1lc3BhY2Ugewot
Ci1zdHJpbmcgR2V0VGVtcG9yYXJ5RGlyZWN0b3J5TmFtZSgpIHsKLSAgLy8gVGVzdHMgcnVuIHVu
ZGVyIEJhemVsICJzaG91bGQgbm90IiB1c2UgL3RtcC4gQmF6ZWwgc2V0cyB0aGlzIGVudmlyb25t
ZW50Ci0gIC8vIHZhcmlhYmxlIGZvciB0ZXN0cyB0byB1c2UgaW5zdGVhZC4KLSAgY2hhciAqZnJv
bV9lbnZpcm9ubWVudCA9IGdldGVudigiVEVTVF9UTVBESVIiKTsKLSAgaWYgKGZyb21fZW52aXJv
bm1lbnQgIT0gTlVMTCAmJiBmcm9tX2Vudmlyb25tZW50WzBdICE9ICdcMCcpIHsKLSAgICByZXR1
cm4gc3RyaW5nKGZyb21fZW52aXJvbm1lbnQpICsgIi9wcm90b2J1Zl90bXBkaXIiOwotICB9Ci0K
LSAgLy8gdG1wbmFtKCkgaXMgZ2VuZXJhbGx5IG5vdCBjb25zaWRlcmVkIHNhZmUgYnV0IHdlJ3Jl
IG9ubHkgdXNpbmcgaXQgZm9yCi0gIC8vIHRlc3RpbmcuICBXZSBjYW5ub3QgdXNlIHRtcGZpbGUo
KSBvciBta3N0ZW1wKCkgc2luY2Ugd2UncmUgY3JlYXRpbmcgYQotICAvLyBkaXJlY3RvcnkuCi0g
IGNoYXIgYltMX3RtcG5hbSArIDFdOyAgICAgLy8gSFBVWCBtdWx0aXRocmVhZCByZXR1cm4gMCBp
ZiBzIGlzIDAKLSAgc3RyaW5nIHJlc3VsdCA9IHRtcG5hbShiKTsKLSNpZmRlZiBfV0lOMzIKLSAg
Ly8gT24gV2luMzIsIHRtcG5hbSgpIHJldHVybnMgYSBmaWxlIHByZWZpeGVkIHdpdGggJ1wnLCBi
dXQgd2hpY2ggaXMgc3VwcG9zZWQKLSAgLy8gdG8gYmUgdXNlZCBpbiB0aGUgY3VycmVudCB3b3Jr
aW5nIGRpcmVjdG9yeS4gIFdURj8KLSAgaWYgKEhhc1ByZWZpeFN0cmluZyhyZXN1bHQsICJcXCIp
KSB7Ci0gICAgcmVzdWx0LmVyYXNlKDAsIDEpOwotICB9Ci0gIC8vIFRoZSBXaW4zMiBBUEkgYWNj
ZXB0cyBmb3J3YXJkIHNsYXNoZXMgYXMgYSBwYXRoIGRlbGltaXRlciBldmVuIHRob3VnaAotICAv
LyBiYWNrc2xhc2hlcyBhcmUgc3RhbmRhcmQuICBMZXQncyBhdm9pZCBjb25mdXNpb24gYW5kIHVz
ZSBvbmx5IGZvcndhcmQKLSAgLy8gc2xhc2hlcy4KLSAgcmVzdWx0ID0gU3RyaW5nUmVwbGFjZShy
ZXN1bHQsICJcXCIsICIvIiwgdHJ1ZSk7Ci0jZW5kaWYgIC8vIF9XSU4zMgotICByZXR1cm4gcmVz
dWx0OwotfQotCi0vLyBDcmVhdGVzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBvbiBkZW1hbmQgYW5k
IGRlbGV0ZXMgaXQgd2hlbiB0aGUgcHJvY2VzcwotLy8gcXVpdHMuCi1jbGFzcyBUZW1wRGlyRGVs
ZXRlciB7Ci0gcHVibGljOgotICBUZW1wRGlyRGVsZXRlcigpIHt9Ci0gIH5UZW1wRGlyRGVsZXRl
cigpIHsKLSAgICBpZiAoIW5hbWVfLmVtcHR5KCkpIHsKLSAgICAgIEZpbGU6OkRlbGV0ZVJlY3Vy
c2l2ZWx5KG5hbWVfLCBOVUxMLCBOVUxMKTsKLSAgICB9Ci0gIH0KLQotICBzdHJpbmcgR2V0VGVt
cERpcigpIHsKLSAgICBpZiAobmFtZV8uZW1wdHkoKSkgewotICAgICAgbmFtZV8gPSBHZXRUZW1w
b3JhcnlEaXJlY3RvcnlOYW1lKCk7Ci0gICAgICBHT09HTEVfQ0hFQ0sobWtkaXIobmFtZV8uY19z
dHIoKSwgMDc3NykgPT0gMCkgPDwgc3RyZXJyb3IoZXJybm8pOwotCi0gICAgICAvLyBTdGljayBh
IGZpbGUgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IHRlbGxzIHBlb3BsZSB3aGF0IHRoaXMgaXMsIGlu
IGNhc2UKLSAgICAgIC8vIHdlIGFib3J0IGFuZCBkb24ndCBnZXQgYSBjaGFuY2UgdG8gZGVsZXRl
IGl0LgotICAgICAgRmlsZTo6V3JpdGVTdHJpbmdUb0ZpbGVPckRpZSgiIiwgbmFtZV8gKyAiL1RF
TVBfRElSX0ZPUl9QUk9UT0JVRl9URVNUUyIpOwotICAgIH0KLSAgICByZXR1cm4gbmFtZV87Ci0g
IH0KLQotIHByaXZhdGU6Ci0gIHN0cmluZyBuYW1lXzsKLX07Ci0KLVRlbXBEaXJEZWxldGVyIHRl
bXBfZGlyX2RlbGV0ZXJfOwotCi19ICAvLyBuYW1lc3BhY2UKLQotc3RyaW5nIFRlc3RUZW1wRGly
KCkgewotICByZXR1cm4gdGVtcF9kaXJfZGVsZXRlcl8uR2V0VGVtcERpcigpOwotfQotCi0vLyBU
T0RPKGtlbnRvbik6ICBTaGFyZSBkdXBsaWNhdGVkIGNvZGUgYmVsb3cuICBUb28gYnVzeS9sYXp5
IGZvciBub3cuCi0KLXN0YXRpYyBzdHJpbmcgc3Rkb3V0X2NhcHR1cmVfZmlsZW5hbWVfOwotc3Rh
dGljIHN0cmluZyBzdGRlcnJfY2FwdHVyZV9maWxlbmFtZV87Ci1zdGF0aWMgaW50IG9yaWdpbmFs
X3N0ZG91dF8gPSAtMTsKLXN0YXRpYyBpbnQgb3JpZ2luYWxfc3RkZXJyXyA9IC0xOwotCi12b2lk
IENhcHR1cmVUZXN0U3Rkb3V0KCkgewotICBHT09HTEVfQ0hFQ0tfRVEob3JpZ2luYWxfc3Rkb3V0
XywgLTEpIDw8ICJBbHJlYWR5IGNhcHR1cmluZy4iOwotCi0gIHN0ZG91dF9jYXB0dXJlX2ZpbGVu
YW1lXyA9IFRlc3RUZW1wRGlyKCkgKyAiL2NhcHR1cmVkX3N0ZG91dCI7Ci0KLSAgaW50IGZkID0g
b3BlbihzdGRvdXRfY2FwdHVyZV9maWxlbmFtZV8uY19zdHIoKSwKLSAgICAgICAgICAgICAgICBP
X1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX0JJTkFSWSwgMDc3Nyk7Ci0gIEdPT0dMRV9D
SEVDSyhmZCA+PSAwKSA8PCAib3BlbjogIiA8PCBzdHJlcnJvcihlcnJubyk7Ci0KLSAgb3JpZ2lu
YWxfc3Rkb3V0XyA9IGR1cCgxKTsKLSAgY2xvc2UoMSk7Ci0gIGR1cDIoZmQsIDEpOwotICBjbG9z
ZShmZCk7Ci19Ci0KLXZvaWQgQ2FwdHVyZVRlc3RTdGRlcnIoKSB7Ci0gIEdPT0dMRV9DSEVDS19F
UShvcmlnaW5hbF9zdGRlcnJfLCAtMSkgPDwgIkFscmVhZHkgY2FwdHVyaW5nLiI7Ci0KLSAgc3Rk
ZXJyX2NhcHR1cmVfZmlsZW5hbWVfID0gVGVzdFRlbXBEaXIoKSArICIvY2FwdHVyZWRfc3RkZXJy
IjsKLQotICBpbnQgZmQgPSBvcGVuKHN0ZGVycl9jYXB0dXJlX2ZpbGVuYW1lXy5jX3N0cigpLAot
ICAgICAgICAgICAgICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCB8IE9fQklOQVJZLCAw
Nzc3KTsKLSAgR09PR0xFX0NIRUNLKGZkID49IDApIDw8ICJvcGVuOiAiIDw8IHN0cmVycm9yKGVy
cm5vKTsKLQotICBvcmlnaW5hbF9zdGRlcnJfID0gZHVwKDIpOwotICBjbG9zZSgyKTsKLSAgZHVw
MihmZCwgMik7Ci0gIGNsb3NlKGZkKTsKLX0KLQotc3RyaW5nIEdldENhcHR1cmVkVGVzdFN0ZG91
dCgpIHsKLSAgR09PR0xFX0NIRUNLX05FKG9yaWdpbmFsX3N0ZG91dF8sIC0xKSA8PCAiTm90IGNh
cHR1cmluZy4iOwotCi0gIGNsb3NlKDEpOwotICBkdXAyKG9yaWdpbmFsX3N0ZG91dF8sIDEpOwot
ICBvcmlnaW5hbF9zdGRvdXRfID0gLTE7Ci0KLSAgc3RyaW5nIHJlc3VsdDsKLSAgRmlsZTo6UmVh
ZEZpbGVUb1N0cmluZ09yRGllKHN0ZG91dF9jYXB0dXJlX2ZpbGVuYW1lXywgJnJlc3VsdCk7Ci0K
LSAgcmVtb3ZlKHN0ZG91dF9jYXB0dXJlX2ZpbGVuYW1lXy5jX3N0cigpKTsKLQotICByZXR1cm4g
cmVzdWx0OwotfQotCi1zdHJpbmcgR2V0Q2FwdHVyZWRUZXN0U3RkZXJyKCkgewotICBHT09HTEVf
Q0hFQ0tfTkUob3JpZ2luYWxfc3RkZXJyXywgLTEpIDw8ICJOb3QgY2FwdHVyaW5nLiI7Ci0KLSAg
Y2xvc2UoMik7Ci0gIGR1cDIob3JpZ2luYWxfc3RkZXJyXywgMik7Ci0gIG9yaWdpbmFsX3N0ZGVy
cl8gPSAtMTsKLQotICBzdHJpbmcgcmVzdWx0OwotICBGaWxlOjpSZWFkRmlsZVRvU3RyaW5nT3JE
aWUoc3RkZXJyX2NhcHR1cmVfZmlsZW5hbWVfLCAmcmVzdWx0KTsKLQotICByZW1vdmUoc3RkZXJy
X2NhcHR1cmVfZmlsZW5hbWVfLmNfc3RyKCkpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLVNj
b3BlZE1lbW9yeUxvZyogU2NvcGVkTWVtb3J5TG9nOjphY3RpdmVfbG9nXyA9IE5VTEw7Ci0KLVNj
b3BlZE1lbW9yeUxvZzo6U2NvcGVkTWVtb3J5TG9nKCkgewotICBHT09HTEVfQ0hFQ0soYWN0aXZl
X2xvZ18gPT0gTlVMTCk7Ci0gIGFjdGl2ZV9sb2dfID0gdGhpczsKLSAgb2xkX2hhbmRsZXJfID0g
U2V0TG9nSGFuZGxlcigmSGFuZGxlTG9nKTsKLX0KLQotU2NvcGVkTWVtb3J5TG9nOjp+U2NvcGVk
TWVtb3J5TG9nKCkgewotICBTZXRMb2dIYW5kbGVyKG9sZF9oYW5kbGVyXyk7Ci0gIGFjdGl2ZV9s
b2dfID0gTlVMTDsKLX0KLQotY29uc3QgdmVjdG9yPHN0cmluZz4mIFNjb3BlZE1lbW9yeUxvZzo6
R2V0TWVzc2FnZXMoTG9nTGV2ZWwgbGV2ZWwpIHsKLSAgR09PR0xFX0NIRUNLKGxldmVsID09IEVS
Uk9SIHx8Ci0gICAgICAgICAgICAgICBsZXZlbCA9PSBXQVJOSU5HKTsKLSAgcmV0dXJuIG1lc3Nh
Z2VzX1tsZXZlbF07Ci19Ci0KLXZvaWQgU2NvcGVkTWVtb3J5TG9nOjpIYW5kbGVMb2coTG9nTGV2
ZWwgbGV2ZWwsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbGluZSwgY29uc3Qgc3RyaW5nJiBtZXNzYWdlKSB7Ci0gIEdPT0dMRV9DSEVD
SyhhY3RpdmVfbG9nXyAhPSBOVUxMKTsKLSAgaWYgKGxldmVsID09IEVSUk9SIHx8IGxldmVsID09
IFdBUk5JTkcpIHsKLSAgICBhY3RpdmVfbG9nXy0+bWVzc2FnZXNfW2xldmVsXS5wdXNoX2JhY2so
bWVzc2FnZSk7Ci0gIH0KLX0KLQotbmFtZXNwYWNlIHsKLQotLy8gRm9yY2Ugc2h1dGRvd24gYXQg
cHJvY2VzcyBleGl0IHNvIHRoYXQgd2UgY2FuIHRlc3QgZm9yIG1lbW9yeSBsZWFrcy4gIFRvCi0v
LyBhY3R1YWxseSBjaGVjayBmb3IgbGVha3MsIEkgc3VnZ2VzdCB1c2luZyB0aGUgaGVhcCBjaGVj
a2VyIGluY2x1ZGVkIHdpdGgKLS8vIGdvb2dsZS1wZXJmdG9vbHMuICBTZXQgaXQgdG8gImRyYWNv
bmlhbiIgbW9kZSB0byBlbnN1cmUgdGhhdCBldmVyeSBsYXN0Ci0vLyBjYWxsIHRvIG1hbGxvYygp
IGhhcyBhIGNvcnJlc3BvbmRpbmcgZnJlZSgpLgotc3RydWN0IEZvcmNlU2h1dGRvd24gewotICB+
Rm9yY2VTaHV0ZG93bigpIHsKLSAgICBTaHV0ZG93blByb3RvYnVmTGlicmFyeSgpOwotICB9Ci19
IGZvcmNlX3NodXRkb3duOwotCi19ICAvLyBuYW1lc3BhY2UKLQotfSAgLy8gbmFtZXNwYWNlIHBy
b3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvdGVzdGluZy9nb29nbGV0ZXN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGluZy9n
b29nbGV0ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZDk5ZTY5YWM4NzYw
ODgxY2VhMTA4NjFmMmM4YjMzZGM5ZmUzNzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29vZ2xldGVzdC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEp
Ci0vLyBlbXVsYXRlcyBnb29nbGUzL3Rlc3RpbmcvYmFzZS9wdWJsaWMvZ29vZ2xldGVzdC5oCi0K
LSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX0dPT0dMRVRFU1RfSF9fCi0jZGVmaW5lIEdPT0dMRV9Q
Uk9UT0JVRl9HT09HTEVURVNUX0hfXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHZlY3Rv
cj4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0KLS8vIERpc2Fi
bGUgZGVhdGggdGVzdHMgaWYgd2UgdXNlIGV4Y2VwdGlvbnMgaW4gQ0hFQ0soKS4KLSNpZiAhUFJP
VE9CVUZfVVNFX0VYQ0VQVElPTlMgJiYgZGVmaW5lZChHVEVTVF9IQVNfREVBVEhfVEVTVCkKLSNk
ZWZpbmUgUFJPVE9CVUZfSEFTX0RFQVRIX1RFU1QKLSNlbmRpZgotCi1uYW1lc3BhY2UgZ29vZ2xl
IHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLS8vIFdoZW4gcnVubmluZyB1bml0dGVzdHMsIGdl
dCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBjb2RlLgotc3RyaW5nIFRlc3RT
b3VyY2VEaXIoKTsKLQotLy8gV2hlbiBydW5uaW5nIHVuaXR0ZXN0cywgZ2V0IGEgZGlyZWN0b3J5
IHdoZXJlIHRlbXBvcmFyeSBmaWxlcyBtYXkgYmUKLS8vIHBsYWNlZC4KLXN0cmluZyBUZXN0VGVt
cERpcigpOwotCi0vLyBDYXB0dXJlIGFsbCB0ZXh0IHdyaXR0ZW4gdG8gc3Rkb3V0IG9yIHN0ZGVy
ci4KLXZvaWQgQ2FwdHVyZVRlc3RTdGRvdXQoKTsKLXZvaWQgQ2FwdHVyZVRlc3RTdGRlcnIoKTsK
LQotLy8gU3RvcCBjYXB0dXJpbmcgc3Rkb3V0IG9yIHN0ZGVyciBhbmQgcmV0dXJuIHRoZSB0ZXh0
IGNhcHR1cmVkLgotc3RyaW5nIEdldENhcHR1cmVkVGVzdFN0ZG91dCgpOwotc3RyaW5nIEdldENh
cHR1cmVkVGVzdFN0ZGVycigpOwotCi0vLyBGb3IgdXNlIHdpdGggU2NvcGVkTWVtb3J5TG9nOjpH
ZXRNZXNzYWdlcygpLiAgSW5zaWRlIEdvb2dsZSB0aGUgTG9nTGV2ZWwKLS8vIGNvbnN0YW50cyBk
b24ndCBoYXZlIHRoZSBMT0dMRVZFTF8gcHJlZml4LCBzbyB0aGUgY29kZSB0aGF0IHVzZWQKLS8v
IFNjb3BlZE1lbW9yeUxvZyByZWZlcnMgdG8gTE9HTEVWRUxfRVJST1IgYXMganVzdCBFUlJPUi4K
LSN1bmRlZiBFUlJPUiAgLy8gZGVmZW5kIGFnYWluc3QgcHJvbWlzY3VvdXMgd2luZG93cy5oCi1z
dGF0aWMgY29uc3QgTG9nTGV2ZWwgRVJST1IgPSBMT0dMRVZFTF9FUlJPUjsKLXN0YXRpYyBjb25z
dCBMb2dMZXZlbCBXQVJOSU5HID0gTE9HTEVWRUxfV0FSTklORzsKLQotLy8gUmVjZWl2ZXMgY29w
aWVzIG9mIGFsbCBMT0coRVJST1IpIG1lc3NhZ2VzIHdoaWxlIGluIHNjb3BlLiAgU2FtcGxlIHVz
YWdlOgotLy8gICB7Ci0vLyAgICAgU2NvcGVkTWVtb3J5TG9nIGxvZzsgIC8vIGNvbnN0cnVjdG9y
IHJlZ2lzdGVycyBvYmplY3QgYXMgYSBsb2cgc2luawotLy8gICAgIFNvbWVSb3V0aW5lVGhhdE1h
eUxvZ01lc3NhZ2VzKCk7Ci0vLyAgICAgY29uc3QgdmVjdG9yPHN0cmluZz4mIHdhcm5pbmdzID0g
bG9nLkdldE1lc3NhZ2VzKEVSUk9SKTsKLS8vICAgfSAgLy8gZGVzdHJ1Y3RvciB1bnJlZ2lzdGVy
cyBvYmplY3QgYXMgYSBsb2cgc2luawotLy8gVGhpcyBpcyBhIGR1bW15IGltcGxlbWVudGF0aW9u
IHdoaWNoIGNvdmVycyBvbmx5IHdoYXQgaXMgdXNlZCBieSBwcm90b2NvbAotLy8gYnVmZmVyIHVu
aXQgdGVzdHMuCi1jbGFzcyBTY29wZWRNZW1vcnlMb2cgewotIHB1YmxpYzoKLSAgU2NvcGVkTWVt
b3J5TG9nKCk7Ci0gIHZpcnR1YWwgflNjb3BlZE1lbW9yeUxvZygpOwotCi0gIC8vIEZldGNoZXMg
YWxsIG1lc3NhZ2VzIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5IGxldmVsLgotICBjb25zdCB2ZWN0
b3I8c3RyaW5nPiYgR2V0TWVzc2FnZXMoTG9nTGV2ZWwgZXJyb3IpOwotCi0gcHJpdmF0ZToKLSAg
bWFwPExvZ0xldmVsLCB2ZWN0b3I8c3RyaW5nPiA+IG1lc3NhZ2VzXzsKLSAgTG9nSGFuZGxlciog
b2xkX2hhbmRsZXJfOwotCi0gIHN0YXRpYyB2b2lkIEhhbmRsZUxvZyhMb2dMZXZlbCBsZXZlbCwg
Y29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RyaW5nJiBtZXNzYWdlKTsKLQotICBzdGF0aWMgU2NvcGVkTWVtb3J5TG9nKiBhY3Rp
dmVfbG9nXzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoU2NvcGVkTWVt
b3J5TG9nKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNl
IGdvb2dsZQotCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9HT09HTEVURVNUX0hfXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvemNndW56aXAuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdGVzdGluZy96Y2d1bnppcC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzZmOGNmZTExYjJiMzkzN2E1YzczYTQ0M2I1MDRkYzM0YWQ3NGZlNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
dGVzdGluZy96Y2d1bnppcC5jYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGJyaWFub2xzb25AZ29v
Z2xlLmNvbSAoQnJpYW4gT2xzb24pCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVm
ZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVy
cy4KLS8vCi0vLyBUZXN0IHByb2dyYW0gdG8gdmVyaWZ5IHRoYXQgR3ppcElucHV0U3RyZWFtIGlz
IGNvbXBhdGlibGUgd2l0aCBjb21tYW5kIGxpbmUKLS8vIGd1bnppcCBvciBqYXZhLnV0aWwuemlw
Lkd6aXBJbnB1dFN0cmVhbQotLy8KLS8vIFJlYWRzIGd6aXAgc3RyZWFtIG9uIHN0YW5kYXJkIGlu
cHV0IGFuZCB3cml0ZXMgZGVjb21wcmVzc2VkIGRhdGEgdG8gc3RhbmRhcmQKLS8vIG91dHB1dC4K
LQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3Rk
bGliLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLQotI2lmZGVmIF9XSU4zMgotI2lmbmRlZiBTVERJ
Tl9GSUxFTk8KLSNkZWZpbmUgU1RESU5fRklMRU5PIDAKLSNlbmRpZgotI2lmbmRlZiBTVERPVVRf
RklMRU5PCi0jZGVmaW5lIFNURE9VVF9GSUxFTk8gMQotI2VuZGlmCi0jZW5kaWYKLQotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9nemlwX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGwuaD4KLQotdXNpbmcgZ29vZ2xlOjpwcm90
b2J1Zjo6aW86OkZpbGVJbnB1dFN0cmVhbTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OmlvOjpH
emlwSW5wdXRTdHJlYW07Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikg
ewotICBGaWxlSW5wdXRTdHJlYW0gZmluKFNURElOX0ZJTEVOTyk7Ci0gIEd6aXBJbnB1dFN0cmVh
bSBpbigmZmluKTsKLQotICB3aGlsZSAodHJ1ZSkgewotICAgIGNvbnN0IHZvaWQqIGlucHRyOwot
ICAgIGludCBpbmxlbjsKLSAgICBib29sIG9rOwotICAgIG9rID0gaW4uTmV4dCgmaW5wdHIsICZp
bmxlbik7Ci0gICAgaWYgKCFvaykgewotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChpbmxl
biA+IDApIHsKLSAgICAgIGludCBlcnIgPSB3cml0ZShTVERPVVRfRklMRU5PLCBpbnB0ciwgaW5s
ZW4pOwotICAgICAgYXNzZXJ0KGVyciA9PSBpbmxlbik7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJu
IDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGluZy96Y2d6aXAuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvdGVzdGluZy96Y2d6aXAuY2MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk5MmRkYzZlZDY2YjNjYWU1NjhmYTgyNjdmZWI3NGI0YTQ3M2VkNDguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3Rlc3RpbmcvemNnemlwLmNjCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogYnJpYW5vbHNv
bkBnb29nbGUuY29tIChCcmlhbiBPbHNvbikKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2Nv
bCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQg
b3RoZXJzLgotLy8KLS8vIFRlc3QgcHJvZ3JhbSB0byB2ZXJpZnkgdGhhdCBHemlwT3V0cHV0U3Ry
ZWFtIGlzIGNvbXBhdGlibGUgd2l0aCBjb21tYW5kIGxpbmUKLS8vIGd6aXAgb3IgamF2YS51dGls
LnppcC5HemlwT3V0cHV0U3RyZWFtCi0vLwotLy8gUmVhZHMgZGF0YSBvbiBzdGFuZGFyZCBpbnB1
dCBhbmQgd3JpdGVzIGNvbXByZXNzZWQgZ3ppcCBzdHJlYW0gdG8gc3RhbmRhcmQKLS8vIG91dHB1
dC4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8
ZmNudGwuaD4KLQotI2lmZGVmIF9XSU4zMgotI2lmbmRlZiBTVERJTl9GSUxFTk8KLSNkZWZpbmUg
U1RESU5fRklMRU5PIDAKLSNlbmRpZgotI2lmbmRlZiBTVERPVVRfRklMRU5PCi0jZGVmaW5lIFNU
RE9VVF9GSUxFTk8gMQotI2VuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9pby9nemlwX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2Nv
cHlfc3RyZWFtX2ltcGwuaD4KLQotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OkZpbGVPdXRw
dXRTdHJlYW07Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjppbzo6R3ppcE91dHB1dFN0cmVhbTsK
LQotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KSB7Ci0gIEZpbGVPdXRwdXRT
dHJlYW0gZm91dChTVERPVVRfRklMRU5PKTsKLSAgR3ppcE91dHB1dFN0cmVhbSBvdXQoJmZvdXQp
OwotICBpbnQgcmVhZGxlbjsKLQotICB3aGlsZSAodHJ1ZSkgewotICAgIHZvaWQqIG91dHB0cjsK
LSAgICBpbnQgb3V0bGVuOwotICAgIGJvb2wgb2s7Ci0gICAgZG8gewotICAgICAgb2sgPSBvdXQu
TmV4dCgmb3V0cHRyLCAmb3V0bGVuKTsKLSAgICAgIGlmICghb2spIHsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0gICAgfSB3aGlsZSAob3V0bGVuIDw9IDApOwotICAgIHJlYWRsZW4gPSByZWFk
KFNURElOX0ZJTEVOTywgb3V0cHRyLCBvdXRsZW4pOwotICAgIGlmIChyZWFkbGVuIDw9IDApIHsK
LSAgICAgIG91dC5CYWNrVXAob3V0bGVuKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAo
cmVhZGxlbiA8IG91dGxlbikgewotICAgICAgb3V0LkJhY2tVcChvdXRsZW4gLSByZWFkbGVuKTsK
LSAgICB9Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi90ZXh0X2Zvcm1hdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5jYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBkZmQ1M2ZkN2IwYzczNjBmM2ZhZGEwN2Nj
MjMyMDdmMzY3MjNlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGV4dF9mb3JtYXQuY2MKKysrIC9kZXYvbnVsbApAQCAt
MSwxOTc1ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBB
dXRob3I6IGpzY2hvcnJAZ29vZ2xlLmNvbSAoSm9zZXBoIFNjaG9ycikKLS8vICBCYXNlZCBvbiBv
cmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwg
SmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUg
PGZsb2F0Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVk
ZSA8c3RhY2s+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZHluYW1pY19t
ZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGUuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvaW8vc3RydG9kLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lv
L2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlf
c3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1f
aW1wbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2lvL3Rva2VuaXplci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9h
bnkuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncHJpbnRmLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvc3RsX3V0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9i
dWYgewotCi1uYW1lc3BhY2UgewotCi1pbmxpbmUgYm9vbCBJc0hleE51bWJlcihjb25zdCBzdHJp
bmcmIHN0cikgewotICByZXR1cm4gKHN0ci5sZW5ndGgoKSA+PSAyICYmIHN0clswXSA9PSAnMCcg
JiYKLSAgICAgICAgICAoc3RyWzFdID09ICd4JyB8fCBzdHJbMV0gPT0gJ1gnKSk7Ci19Ci0KLWlu
bGluZSBib29sIElzT2N0TnVtYmVyKGNvbnN0IHN0cmluZyYgc3RyKSB7Ci0gIHJldHVybiAoc3Ry
Lmxlbmd0aCgpID49IDIgJiYgc3RyWzBdID09ICcwJyAmJgotICAgICAgICAgIChzdHJbMV0gPj0g
JzAnICYmIHN0clsxXSA8ICc4JykpOwotfQotCi1pbmxpbmUgYm9vbCBHZXRBbnlGaWVsZERlc2Ny
aXB0b3JzKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvcioqIHR5cGVfdXJsX2ZpZWxkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqKiB2YWx1
ZV9maWVsZCkgewotICAgIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBtZXNzYWdlLkdl
dERlc2NyaXB0b3IoKTsKLSAgICAqdHlwZV91cmxfZmllbGQgPSBkZXNjcmlwdG9yLT5GaW5kRmll
bGRCeU51bWJlcigxKTsKLSAgICAqdmFsdWVfZmllbGQgPSBkZXNjcmlwdG9yLT5GaW5kRmllbGRC
eU51bWJlcigyKTsKLSAgICByZXR1cm4gKCp0eXBlX3VybF9maWVsZCAhPSBOVUxMICYmCi0gICAg
ICAgICAgICAoKnR5cGVfdXJsX2ZpZWxkKS0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9TVFJJTkcgJiYKLSAgICAgICAgICAgICp2YWx1ZV9maWVsZCAhPSBOVUxMICYmCi0gICAgICAg
ICAgICAoKnZhbHVlX2ZpZWxkKS0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9CWVRF
Uyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1zdHJpbmcgTWVzc2FnZTo6RGVidWdTdHJpbmco
KSBjb25zdCB7Ci0gIHN0cmluZyBkZWJ1Z19zdHJpbmc7Ci0KLSAgVGV4dEZvcm1hdDo6UHJpbnRl
ciBwcmludGVyOwotICBwcmludGVyLlNldEV4cGFuZEFueSh0cnVlKTsKLQotICBwcmludGVyLlBy
aW50VG9TdHJpbmcoKnRoaXMsICZkZWJ1Z19zdHJpbmcpOwotCi0gIHJldHVybiBkZWJ1Z19zdHJp
bmc7Ci19Ci0KLXN0cmluZyBNZXNzYWdlOjpTaG9ydERlYnVnU3RyaW5nKCkgY29uc3QgewotICBz
dHJpbmcgZGVidWdfc3RyaW5nOwotCi0gIFRleHRGb3JtYXQ6OlByaW50ZXIgcHJpbnRlcjsKLSAg
cHJpbnRlci5TZXRTaW5nbGVMaW5lTW9kZSh0cnVlKTsKLSAgcHJpbnRlci5TZXRFeHBhbmRBbnko
dHJ1ZSk7Ci0KLSAgcHJpbnRlci5QcmludFRvU3RyaW5nKCp0aGlzLCAmZGVidWdfc3RyaW5nKTsK
LSAgLy8gU2luZ2xlIGxpbmUgbW9kZSBjdXJyZW50bHkgbWlnaHQgaGF2ZSBhbiBleHRyYSBzcGFj
ZSBhdCB0aGUgZW5kLgotICBpZiAoZGVidWdfc3RyaW5nLnNpemUoKSA+IDAgJiYKLSAgICAgIGRl
YnVnX3N0cmluZ1tkZWJ1Z19zdHJpbmcuc2l6ZSgpIC0gMV0gPT0gJyAnKSB7Ci0gICAgZGVidWdf
c3RyaW5nLnJlc2l6ZShkZWJ1Z19zdHJpbmcuc2l6ZSgpIC0gMSk7Ci0gIH0KLQotICByZXR1cm4g
ZGVidWdfc3RyaW5nOwotfQotCi1zdHJpbmcgTWVzc2FnZTo6VXRmOERlYnVnU3RyaW5nKCkgY29u
c3QgewotICBzdHJpbmcgZGVidWdfc3RyaW5nOwotCi0gIFRleHRGb3JtYXQ6OlByaW50ZXIgcHJp
bnRlcjsKLSAgcHJpbnRlci5TZXRVc2VVdGY4U3RyaW5nRXNjYXBpbmcodHJ1ZSk7Ci0gIHByaW50
ZXIuU2V0RXhwYW5kQW55KHRydWUpOwotCi0gIHByaW50ZXIuUHJpbnRUb1N0cmluZygqdGhpcywg
JmRlYnVnX3N0cmluZyk7Ci0KLSAgcmV0dXJuIGRlYnVnX3N0cmluZzsKLX0KLQotdm9pZCBNZXNz
YWdlOjpQcmludERlYnVnU3RyaW5nKCkgY29uc3QgewotICBwcmludGYoIiVzIiwgRGVidWdTdHJp
bmcoKS5jX3N0cigpKTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEltcGxlbWVu
dGF0aW9uIG9mIHRoZSBwYXJzZSBpbmZvcm1hdGlvbiB0cmVlIGNsYXNzLgotVGV4dEZvcm1hdDo6
UGFyc2VJbmZvVHJlZTo6UGFyc2VJbmZvVHJlZSgpIHsgfQotCi1UZXh0Rm9ybWF0OjpQYXJzZUlu
Zm9UcmVlOjp+UGFyc2VJbmZvVHJlZSgpIHsKLSAgLy8gUmVtb3ZlIGFueSBuZXN0ZWQgaW5mb3Jt
YXRpb24gdHJlZXMsIGFzIHRoZXkgYXJlIG93bmVkIGJ5IHRoaXMgdHJlZS4KLSAgZm9yIChOZXN0
ZWRNYXA6Oml0ZXJhdG9yIGl0ID0gbmVzdGVkXy5iZWdpbigpOyBpdCAhPSBuZXN0ZWRfLmVuZCgp
OyArK2l0KSB7Ci0gICAgU1RMRGVsZXRlRWxlbWVudHMoJihpdC0+c2Vjb25kKSk7Ci0gIH0KLX0K
LQotdm9pZCBUZXh0Rm9ybWF0OjpQYXJzZUluZm9UcmVlOjpSZWNvcmRMb2NhdGlvbigKLSAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIFRleHRGb3JtYXQ6OlBhcnNlTG9jYXRp
b24gbG9jYXRpb24pIHsKLSAgbG9jYXRpb25zX1tmaWVsZF0ucHVzaF9iYWNrKGxvY2F0aW9uKTsK
LX0KLQotVGV4dEZvcm1hdDo6UGFyc2VJbmZvVHJlZSogVGV4dEZvcm1hdDo6UGFyc2VJbmZvVHJl
ZTo6Q3JlYXRlTmVzdGVkKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAg
Ly8gT3duZWQgYnkgdXMgaW4gdGhlIG1hcC4KLSAgVGV4dEZvcm1hdDo6UGFyc2VJbmZvVHJlZSog
aW5zdGFuY2UgPSBuZXcgVGV4dEZvcm1hdDo6UGFyc2VJbmZvVHJlZSgpOwotICB2ZWN0b3I8VGV4
dEZvcm1hdDo6UGFyc2VJbmZvVHJlZSo+KiB0cmVlcyA9ICZuZXN0ZWRfW2ZpZWxkXTsKLSAgR09P
R0xFX0NIRUNLKHRyZWVzKTsKLSAgdHJlZXMtPnB1c2hfYmFjayhpbnN0YW5jZSk7Ci0gIHJldHVy
biBpbnN0YW5jZTsKLX0KLQotdm9pZCBDaGVja0ZpZWxkSW5kZXgoY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCwgaW50IGluZGV4KSB7Ci0gIGlmIChmaWVsZCA9PSBOVUxMKSB7IHJldHVybjsg
fQotCi0gIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSAmJiBpbmRleCA9PSAtMSkgewotICAgIEdP
T0dMRV9MT0coREZBVEFMKSA8PCAiSW5kZXggbXVzdCBiZSBpbiByYW5nZSBvZiByZXBlYXRlZCBm
aWVsZCB2YWx1ZXMuICIKLSAgICAgICAgICAgICAgICA8PCAiRmllbGQ6ICIgPDwgZmllbGQtPm5h
bWUoKTsKLSAgfSBlbHNlIGlmICghZmllbGQtPmlzX3JlcGVhdGVkKCkgJiYgaW5kZXggIT0gLTEp
IHsKLSAgICBHT09HTEVfTE9HKERGQVRBTCkgPDwgIkluZGV4IG11c3QgYmUgLTEgZm9yIHNpbmd1
bGFyIGZpZWxkcy4iCi0gICAgICAgICAgICAgICAgPDwgIkZpZWxkOiAiIDw8IGZpZWxkLT5uYW1l
KCk7Ci0gIH0KLX0KLQotVGV4dEZvcm1hdDo6UGFyc2VMb2NhdGlvbiBUZXh0Rm9ybWF0OjpQYXJz
ZUluZm9UcmVlOjpHZXRMb2NhdGlvbigKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LCBpbnQgaW5kZXgpIGNvbnN0IHsKLSAgQ2hlY2tGaWVsZEluZGV4KGZpZWxkLCBpbmRleCk7Ci0g
IGlmIChpbmRleCA9PSAtMSkgeyBpbmRleCA9IDA7IH0KLQotICBjb25zdCB2ZWN0b3I8VGV4dEZv
cm1hdDo6UGFyc2VMb2NhdGlvbj4qIGxvY2F0aW9ucyA9Ci0gICAgICBGaW5kT3JOdWxsKGxvY2F0
aW9uc18sIGZpZWxkKTsKLSAgaWYgKGxvY2F0aW9ucyA9PSBOVUxMIHx8IGluZGV4ID49IGxvY2F0
aW9ucy0+c2l6ZSgpKSB7Ci0gICAgcmV0dXJuIFRleHRGb3JtYXQ6OlBhcnNlTG9jYXRpb24oKTsK
LSAgfQotCi0gIHJldHVybiAoKmxvY2F0aW9ucylbaW5kZXhdOwotfQotCi1UZXh0Rm9ybWF0OjpQ
YXJzZUluZm9UcmVlKiBUZXh0Rm9ybWF0OjpQYXJzZUluZm9UcmVlOjpHZXRUcmVlRm9yTmVzdGVk
KAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGludCBpbmRleCkgY29uc3Qgewot
ICBDaGVja0ZpZWxkSW5kZXgoZmllbGQsIGluZGV4KTsKLSAgaWYgKGluZGV4ID09IC0xKSB7IGlu
ZGV4ID0gMDsgfQotCi0gIGNvbnN0IHZlY3RvcjxUZXh0Rm9ybWF0OjpQYXJzZUluZm9UcmVlKj4q
IHRyZWVzID0gRmluZE9yTnVsbChuZXN0ZWRfLCBmaWVsZCk7Ci0gIGlmICh0cmVlcyA9PSBOVUxM
IHx8IGluZGV4ID49IHRyZWVzLT5zaXplKCkpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0g
IHJldHVybiAoKnRyZWVzKVtpbmRleF07Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0v
LyBJbnRlcm5hbCBjbGFzcyBmb3IgcGFyc2luZyBhbiBBU0NJSSByZXByZXNlbnRhdGlvbiBvZiBh
IFByb3RvY29sIE1lc3NhZ2UuCi0vLyBUaGlzIGNsYXNzIG1ha2VzIHVzZSBvZiB0aGUgUHJvdG9j
b2wgTWVzc2FnZSBjb21waWxlcidzIHRva2VuaXplciBmb3VuZAotLy8gaW4gLy9nb29nbGUvcHJv
dG9idWYvaW8vdG9rZW5pemVyLmguIE5vdGUgdGhhdCBjbGFzcydzIFBhcnNlCi0vLyBtZXRob2Qg
aXMgKm5vdCogdGhyZWFkLXNhZmUgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gYSBzaW5nbGUg
dGhyZWFkIGF0Ci0vLyBhIHRpbWUuCi0KLS8vIE1ha2VzIGNvZGUgc2xpZ2h0bHkgbW9yZSByZWFk
YWJsZS4gIFRoZSBtZWFuaW5nIG9mICJETyhmb28pIiBpcwotLy8gIkV4ZWN1dGUgZm9vIGFuZCBm
YWlsIGlmIGl0IGZhaWxzLiIsIHdoZXJlIGZhaWx1cmUgaXMgaW5kaWNhdGVkIGJ5Ci0vLyByZXR1
cm5pbmcgZmFsc2UuIEJvcnJvd2VkIGZyb20gcGFyc2VyLmNjIChUaGFua3MgS2VudG9uISkuCi0j
ZGVmaW5lIERPKFNUQVRFTUVOVCkgaWYgKFNUQVRFTUVOVCkge30gZWxzZSByZXR1cm4gZmFsc2UK
LQotY2xhc3MgVGV4dEZvcm1hdDo6UGFyc2VyOjpQYXJzZXJJbXBsIHsKLSBwdWJsaWM6Ci0KLSAg
Ly8gRGV0ZXJtaW5lcyBpZiByZXBlYXRlZCB2YWx1ZXMgZm9yIG5vbi1yZXBlYXRlZCBmaWVsZHMg
YW5kCi0gIC8vIG9uZW9mcyBhcmUgcGVybWl0dGVkLCBlLmcuLCB0aGUgc3RyaW5nICJmb286IDEg
Zm9vOiAyIiBmb3IgYQotICAvLyByZXF1aXJlZC9vcHRpb25hbCBmaWVsZCBuYW1lZCAiZm9vIiwg
b3IgImJhejogMSBxdXg6IDIiCi0gIC8vIHdoZXJlICJiYXoiIGFuZCAicXV4IiBhcmUgbWVtYmVy
cyBvZiB0aGUgc2FtZSBvbmVvZi4KLSAgZW51bSBTaW5ndWxhck92ZXJ3cml0ZVBvbGljeSB7Ci0g
ICAgQUxMT1dfU0lOR1VMQVJfT1ZFUldSSVRFUyA9IDAsICAgLy8gdGhlIGxhc3QgdmFsdWUgaXMg
cmV0YWluZWQKLSAgICBGT1JCSURfU0lOR1VMQVJfT1ZFUldSSVRFUyA9IDEsICAvLyBhbiBlcnJv
ciBpcyBpc3N1ZWQKLSAgfTsKLQotICBQYXJzZXJJbXBsKGNvbnN0IERlc2NyaXB0b3IqIHJvb3Rf
bWVzc2FnZV90eXBlLAotICAgICAgICAgICAgIGlvOjpaZXJvQ29weUlucHV0U3RyZWFtKiBpbnB1
dF9zdHJlYW0sCi0gICAgICAgICAgICAgaW86OkVycm9yQ29sbGVjdG9yKiBlcnJvcl9jb2xsZWN0
b3IsCi0gICAgICAgICAgICAgVGV4dEZvcm1hdDo6RmluZGVyKiBmaW5kZXIsCi0gICAgICAgICAg
ICAgUGFyc2VJbmZvVHJlZSogcGFyc2VfaW5mb190cmVlLAotICAgICAgICAgICAgIFNpbmd1bGFy
T3ZlcndyaXRlUG9saWN5IHNpbmd1bGFyX292ZXJ3cml0ZV9wb2xpY3ksCi0gICAgICAgICAgICAg
Ym9vbCBhbGxvd19jYXNlX2luc2Vuc2l0aXZlX2ZpZWxkLAotICAgICAgICAgICAgIGJvb2wgYWxs
b3dfdW5rbm93bl9maWVsZCwKLSAgICAgICAgICAgICBib29sIGFsbG93X3Vua25vd25fZW51bSwK
LSAgICAgICAgICAgICBib29sIGFsbG93X2ZpZWxkX251bWJlciwKLSAgICAgICAgICAgICBib29s
IGFsbG93X3JlbGF4ZWRfd2hpdGVzcGFjZSkKLSAgICA6IGVycm9yX2NvbGxlY3Rvcl8oZXJyb3Jf
Y29sbGVjdG9yKSwKLSAgICAgIGZpbmRlcl8oZmluZGVyKSwKLSAgICAgIHBhcnNlX2luZm9fdHJl
ZV8ocGFyc2VfaW5mb190cmVlKSwKLSAgICAgIHRva2VuaXplcl9lcnJvcl9jb2xsZWN0b3JfKHRo
aXMpLAotICAgICAgdG9rZW5pemVyXyhpbnB1dF9zdHJlYW0sICZ0b2tlbml6ZXJfZXJyb3JfY29s
bGVjdG9yXyksCi0gICAgICByb290X21lc3NhZ2VfdHlwZV8ocm9vdF9tZXNzYWdlX3R5cGUpLAot
ICAgICAgc2luZ3VsYXJfb3ZlcndyaXRlX3BvbGljeV8oc2luZ3VsYXJfb3ZlcndyaXRlX3BvbGlj
eSksCi0gICAgICBhbGxvd19jYXNlX2luc2Vuc2l0aXZlX2ZpZWxkXyhhbGxvd19jYXNlX2luc2Vu
c2l0aXZlX2ZpZWxkKSwKLSAgICAgIGFsbG93X3Vua25vd25fZmllbGRfKGFsbG93X3Vua25vd25f
ZmllbGQpLAotICAgICAgYWxsb3dfdW5rbm93bl9lbnVtXyhhbGxvd191bmtub3duX2VudW0pLAot
ICAgICAgYWxsb3dfZmllbGRfbnVtYmVyXyhhbGxvd19maWVsZF9udW1iZXIpLAotICAgICAgaGFk
X2Vycm9yc18oZmFsc2UpIHsKLSAgICAvLyBGb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0
aCBwcm90bzEsIHdlIG5lZWQgdG8gYWxsb3cgdGhlICdmJyBzdWZmaXgKLSAgICAvLyBmb3IgZmxv
YXRzLgotICAgIHRva2VuaXplcl8uc2V0X2FsbG93X2ZfYWZ0ZXJfZmxvYXQodHJ1ZSk7Ci0KLSAg
ICAvLyAnIycgc3RhcnRzIGEgY29tbWVudC4KLSAgICB0b2tlbml6ZXJfLnNldF9jb21tZW50X3N0
eWxlKGlvOjpUb2tlbml6ZXI6OlNIX0NPTU1FTlRfU1RZTEUpOwotCi0gICAgaWYgKGFsbG93X3Jl
bGF4ZWRfd2hpdGVzcGFjZSkgewotICAgICAgdG9rZW5pemVyXy5zZXRfcmVxdWlyZV9zcGFjZV9h
ZnRlcl9udW1iZXIoZmFsc2UpOwotICAgICAgdG9rZW5pemVyXy5zZXRfYWxsb3dfbXVsdGlsaW5l
X3N0cmluZ3ModHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ29uc3VtZSB0aGUgc3RhcnRpbmcgdG9r
ZW4uCi0gICAgdG9rZW5pemVyXy5OZXh0KCk7Ci0gIH0KLSAgflBhcnNlckltcGwoKSB7IH0KLQot
ICAvLyBQYXJzZXMgdGhlIEFTQ0lJIHJlcHJlc2VudGF0aW9uIHNwZWNpZmllZCBpbiBpbnB1dCBh
bmQgc2F2ZXMgdGhlCi0gIC8vIGluZm9ybWF0aW9uIGludG8gdGhlIG91dHB1dCBwb2ludGVyIChh
IE1lc3NhZ2UpLiBSZXR1cm5zCi0gIC8vIGZhbHNlIGlmIGFuIGVycm9yIG9jY3VycyAoYW4gZXJy
b3Igd2lsbCBhbHNvIGJlIGxvZ2dlZCB0bwotICAvLyBHT09HTEVfTE9HKEVSUk9SKSkuCi0gIGJv
b2wgUGFyc2UoTWVzc2FnZSogb3V0cHV0KSB7Ci0gICAgLy8gQ29uc3VtZSBmaWVsZHMgdW50aWwg
d2UgY2Fubm90IGRvIHNvIGFueW1vcmUuCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIGlmIChM
b29raW5nQXRUeXBlKGlvOjpUb2tlbml6ZXI6OlRZUEVfRU5EKSkgewotICAgICAgICByZXR1cm4g
IWhhZF9lcnJvcnNfOwotICAgICAgfQotCi0gICAgICBETyhDb25zdW1lRmllbGQob3V0cHV0KSk7
Ci0gICAgfQotICB9Ci0KLSAgYm9vbCBQYXJzZUZpZWxkKGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQsIE1lc3NhZ2UqIG91dHB1dCkgewotICAgIGJvb2wgc3VjOwotICAgIGlmIChmaWVsZC0+
Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAgICAg
c3VjID0gQ29uc3VtZUZpZWxkTWVzc2FnZShvdXRwdXQsIG91dHB1dC0+R2V0UmVmbGVjdGlvbigp
LCBmaWVsZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN1YyA9IENvbnN1bWVGaWVsZFZhbHVlKG91
dHB1dCwgb3V0cHV0LT5HZXRSZWZsZWN0aW9uKCksIGZpZWxkKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHN1YyAmJiBMb29raW5nQXRUeXBlKGlvOjpUb2tlbml6ZXI6OlRZUEVfRU5EKTsKLSAgfQotCi0g
IHZvaWQgUmVwb3J0RXJyb3IoaW50IGxpbmUsIGludCBjb2wsIGNvbnN0IHN0cmluZyYgbWVzc2Fn
ZSkgewotICAgIGhhZF9lcnJvcnNfID0gdHJ1ZTsKLSAgICBpZiAoZXJyb3JfY29sbGVjdG9yXyA9
PSBOVUxMKSB7Ci0gICAgICBpZiAobGluZSA+PSAwKSB7Ci0gICAgICAgIEdPT0dMRV9MT0coRVJS
T1IpIDw8ICJFcnJvciBwYXJzaW5nIHRleHQtZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAgICA8
PCByb290X21lc3NhZ2VfdHlwZV8tPmZ1bGxfbmFtZSgpCi0gICAgICAgICAgICAgICAgICAgPDwg
IjogIiA8PCAobGluZSArIDEpIDw8ICI6IgotICAgICAgICAgICAgICAgICAgIDw8IChjb2wgKyAx
KSA8PCAiOiAiIDw8IG1lc3NhZ2U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHT09HTEVfTE9H
KEVSUk9SKSA8PCAiRXJyb3IgcGFyc2luZyB0ZXh0LWZvcm1hdCAiCi0gICAgICAgICAgICAgICAg
ICAgPDwgcm9vdF9tZXNzYWdlX3R5cGVfLT5mdWxsX25hbWUoKQotICAgICAgICAgICAgICAgICAg
IDw8ICI6ICIgPDwgbWVzc2FnZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZXJyb3Jf
Y29sbGVjdG9yXy0+QWRkRXJyb3IobGluZSwgY29sLCBtZXNzYWdlKTsKLSAgICB9Ci0gIH0KLQot
ICB2b2lkIFJlcG9ydFdhcm5pbmcoaW50IGxpbmUsIGludCBjb2wsIGNvbnN0IHN0cmluZyYgbWVz
c2FnZSkgewotICAgIGlmIChlcnJvcl9jb2xsZWN0b3JfID09IE5VTEwpIHsKLSAgICAgIGlmIChs
aW5lID49IDApIHsKLSAgICAgICAgR09PR0xFX0xPRyhXQVJOSU5HKSA8PCAiV2FybmluZyBwYXJz
aW5nIHRleHQtZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAgICAgIDw8IHJvb3RfbWVzc2FnZV90
eXBlXy0+ZnVsbF9uYW1lKCkKLSAgICAgICAgICAgICAgICAgICAgIDw8ICI6ICIgPDwgKGxpbmUg
KyAxKSA8PCAiOiIKLSAgICAgICAgICAgICAgICAgICAgIDw8IChjb2wgKyAxKSA8PCAiOiAiIDw8
IG1lc3NhZ2U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHT09HTEVfTE9HKFdBUk5JTkcpIDw8
ICJXYXJuaW5nIHBhcnNpbmcgdGV4dC1mb3JtYXQgIgotICAgICAgICAgICAgICAgICAgICAgPDwg
cm9vdF9tZXNzYWdlX3R5cGVfLT5mdWxsX25hbWUoKQotICAgICAgICAgICAgICAgICAgICAgPDwg
IjogIiA8PCBtZXNzYWdlOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBlcnJvcl9jb2xs
ZWN0b3JfLT5BZGRXYXJuaW5nKGxpbmUsIGNvbCwgbWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSBw
cml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUGFyc2VySW1wbCk7
Ci0KLSAgLy8gUmVwb3J0cyBhbiBlcnJvciB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGggaW5m
b3JtYXRpb24gaW5kaWNhdGluZwotICAvLyB0aGUgcG9zaXRpb24gKGFzIGRlcml2ZWQgZnJvbSB0
aGUgY3VycmVudCB0b2tlbikuCi0gIHZvaWQgUmVwb3J0RXJyb3IoY29uc3Qgc3RyaW5nJiBtZXNz
YWdlKSB7Ci0gICAgUmVwb3J0RXJyb3IodG9rZW5pemVyXy5jdXJyZW50KCkubGluZSwgdG9rZW5p
emVyXy5jdXJyZW50KCkuY29sdW1uLAotICAgICAgICAgICAgICAgIG1lc3NhZ2UpOwotICB9Ci0K
LSAgLy8gUmVwb3J0cyBhIHdhcm5pbmcgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSB3aXRoIGluZm9y
bWF0aW9uIGluZGljYXRpbmcKLSAgLy8gdGhlIHBvc2l0aW9uIChhcyBkZXJpdmVkIGZyb20gdGhl
IGN1cnJlbnQgdG9rZW4pLgotICB2b2lkIFJlcG9ydFdhcm5pbmcoY29uc3Qgc3RyaW5nJiBtZXNz
YWdlKSB7Ci0gICAgUmVwb3J0V2FybmluZyh0b2tlbml6ZXJfLmN1cnJlbnQoKS5saW5lLCB0b2tl
bml6ZXJfLmN1cnJlbnQoKS5jb2x1bW4sCi0gICAgICAgICAgICAgICAgICBtZXNzYWdlKTsKLSAg
fQotCi0gIC8vIENvbnN1bWVzIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSB3aXRoIHRoZSBnaXZlbiBz
dGFydGluZyBkZWxpbWl0ZXIuCi0gIC8vIFRoaXMgbWV0aG9kIGNoZWNrcyB0byBzZWUgdGhhdCB0
aGUgZW5kIGRlbGltaXRlciBhdCB0aGUgY29uY2x1c2lvbiBvZgotICAvLyB0aGUgY29uc3VtcHRp
b24gbWF0Y2hlcyB0aGUgc3RhcnRpbmcgZGVsaW1pdGVyIHBhc3NlZCBpbiBoZXJlLgotICBib29s
IENvbnN1bWVNZXNzYWdlKE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IHN0cmluZyBkZWxpbWl0ZXIp
IHsKLSAgICB3aGlsZSAoIUxvb2tpbmdBdCgiPiIpICYmICAhTG9va2luZ0F0KCJ9IikpIHsKLSAg
ICAgIERPKENvbnN1bWVGaWVsZChtZXNzYWdlKSk7Ci0gICAgfQotCi0gICAgLy8gQ29uZmlybSB0
aGF0IHdlIGhhdmUgYSB2YWxpZCBlbmRpbmcgZGVsaW1pdGVyLgotICAgIERPKENvbnN1bWUoZGVs
aW1pdGVyKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBDb25zdW1lIGVpdGhlciAi
PCIgb3IgInsiLgotICBib29sIENvbnN1bWVNZXNzYWdlRGVsaW1pdGVyKHN0cmluZyogZGVsaW1p
dGVyKSB7Ci0gICAgaWYgKFRyeUNvbnN1bWUoIjwiKSkgewotICAgICAgKmRlbGltaXRlciA9ICI+
IjsKLSAgICB9IGVsc2UgewotICAgICAgRE8oQ29uc3VtZSgieyIpKTsKLSAgICAgICpkZWxpbWl0
ZXIgPSAifSI7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLQotICAvLyBDb25zdW1l
cyB0aGUgY3VycmVudCBmaWVsZCAoYXMgcmV0dXJuZWQgYnkgdGhlIHRva2VuaXplcikgb24gdGhl
Ci0gIC8vIHBhc3NlZCBpbiBtZXNzYWdlLgotICBib29sIENvbnN1bWVGaWVsZChNZXNzYWdlKiBt
ZXNzYWdlKSB7Ci0gICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UtPkdl
dFJlZmxlY3Rpb24oKTsKLSAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gbWVzc2Fn
ZS0+R2V0RGVzY3JpcHRvcigpOwotCi0gICAgc3RyaW5nIGZpZWxkX25hbWU7Ci0KLSAgICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gTlVMTDsKLSAgICBpbnQgc3RhcnRfbGluZSA9IHRv
a2VuaXplcl8uY3VycmVudCgpLmxpbmU7Ci0gICAgaW50IHN0YXJ0X2NvbHVtbiA9IHRva2VuaXpl
cl8uY3VycmVudCgpLmNvbHVtbjsKLQotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogYW55X3R5
cGVfdXJsX2ZpZWxkOwotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogYW55X3ZhbHVlX2ZpZWxk
OwotICAgIGlmIChpbnRlcm5hbDo6R2V0QW55RmllbGREZXNjcmlwdG9ycygqbWVzc2FnZSwgJmFu
eV90eXBlX3VybF9maWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmFueV92YWx1ZV9maWVsZCkgJiYKLSAgICAgICAgVHJ5Q29uc3VtZSgiWyIpKSB7Ci0gICAg
ICBzdHJpbmcgZnVsbF90eXBlX25hbWUsIHByZWZpeDsKLSAgICAgIERPKENvbnN1bWVBbnlUeXBl
VXJsKCZmdWxsX3R5cGVfbmFtZSwgJnByZWZpeCkpOwotICAgICAgRE8oQ29uc3VtZSgiXSIpKTsK
LSAgICAgIFRyeUNvbnN1bWUoIjoiKTsgIC8vICc6JyBpcyBvcHRpb25hbCBiZXR3ZWVuIG1lc3Nh
Z2UgbGFiZWxzIGFuZCB2YWx1ZXMuCi0gICAgICBzdHJpbmcgc2VyaWFsaXplZF92YWx1ZTsKLSAg
ICAgIERPKENvbnN1bWVBbnlWYWx1ZShmdWxsX3R5cGVfbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlLT5HZXREZXNjcmlwdG9yKCktPmZpbGUoKS0+cG9vbCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICZzZXJpYWxpemVkX3ZhbHVlKSk7Ci0gICAgICByZWZsZWN0aW9u
LT5TZXRTdHJpbmcoCi0gICAgICAgICAgbWVzc2FnZSwgYW55X3R5cGVfdXJsX2ZpZWxkLAotICAg
ICAgICAgIHN0cmluZyhwcmVmaXggKyBmdWxsX3R5cGVfbmFtZSkpOwotICAgICAgcmVmbGVjdGlv
bi0+U2V0U3RyaW5nKG1lc3NhZ2UsIGFueV92YWx1ZV9maWVsZCwgc2VyaWFsaXplZF92YWx1ZSk7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKFRyeUNvbnN1bWUoIlsiKSkgewot
ICAgICAgLy8gRXh0ZW5zaW9uLgotICAgICAgRE8oQ29uc3VtZUZ1bGxUeXBlTmFtZSgmZmllbGRf
bmFtZSkpOwotICAgICAgRE8oQ29uc3VtZSgiXSIpKTsKLQotICAgICAgZmllbGQgPSAoZmluZGVy
XyAhPSBOVUxMCi0gICAgICAgICAgICAgICA/IGZpbmRlcl8tPkZpbmRFeHRlbnNpb24obWVzc2Fn
ZSwgZmllbGRfbmFtZSkKLSAgICAgICAgICAgICAgIDogcmVmbGVjdGlvbi0+RmluZEtub3duRXh0
ZW5zaW9uQnlOYW1lKGZpZWxkX25hbWUpKTsKLQotICAgICAgaWYgKGZpZWxkID09IE5VTEwpIHsK
LSAgICAgICAgaWYgKCFhbGxvd191bmtub3duX2ZpZWxkXykgewotICAgICAgICAgIFJlcG9ydEVy
cm9yKCJFeHRlbnNpb24gXCIiICsgZmllbGRfbmFtZSArICJcIiBpcyBub3QgZGVmaW5lZCBvciAi
Ci0gICAgICAgICAgICAgICAgICAgICAgImlzIG5vdCBhbiBleHRlbnNpb24gb2YgXCIiICsKLSAg
ICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5mdWxsX25hbWUoKSArICJcIi4iKTsKLSAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgUmVwb3J0
V2FybmluZygiRXh0ZW5zaW9uIFwiIiArIGZpZWxkX25hbWUgKyAiXCIgaXMgbm90IGRlZmluZWQg
b3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgImlzIG5vdCBhbiBleHRlbnNpb24gb2YgXCIi
ICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItPmZ1bGxfbmFtZSgpICsgIlwi
LiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIERPKENvbnN1bWVJ
ZGVudGlmaWVyKCZmaWVsZF9uYW1lKSk7Ci0KLSAgICAgIGludDMyIGZpZWxkX251bWJlcjsKLSAg
ICAgIGlmIChhbGxvd19maWVsZF9udW1iZXJfICYmIHNhZmVfc3RydG8zMihmaWVsZF9uYW1lLCAm
ZmllbGRfbnVtYmVyKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci0+SXNFeHRlbnNpb25OdW1i
ZXIoZmllbGRfbnVtYmVyKSkgewotICAgICAgICAgIGZpZWxkID0gcmVmbGVjdGlvbi0+RmluZEtu
b3duRXh0ZW5zaW9uQnlOdW1iZXIoZmllbGRfbnVtYmVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICBmaWVsZCA9IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TnVtYmVyKGZpZWxkX251bWJl
cik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpZWxkID0gZGVzY3JpcHRv
ci0+RmluZEZpZWxkQnlOYW1lKGZpZWxkX25hbWUpOwotICAgICAgICAvLyBHcm91cCBuYW1lcyBh
cmUgZXhwZWN0ZWQgdG8gYmUgY2FwaXRhbGl6ZWQgYXMgdGhleSBhcHBlYXIgaW4gdGhlCi0gICAg
ICAgIC8vIC5wcm90byBmaWxlLCB3aGljaCBhY3R1YWxseSBtYXRjaGVzIHRoZWlyIHR5cGUgbmFt
ZXMsIG5vdCB0aGVpcgotICAgICAgICAvLyBmaWVsZCBuYW1lcy4KLSAgICAgICAgaWYgKGZpZWxk
ID09IE5VTEwpIHsKLSAgICAgICAgICBzdHJpbmcgbG93ZXJfZmllbGRfbmFtZSA9IGZpZWxkX25h
bWU7Ci0gICAgICAgICAgTG93ZXJTdHJpbmcoJmxvd2VyX2ZpZWxkX25hbWUpOwotICAgICAgICAg
IGZpZWxkID0gZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKGxvd2VyX2ZpZWxkX25hbWUpOwot
ICAgICAgICAgIC8vIElmIHRoZSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIHdvcmtlZCBidXQgdGhl
IGZpZWxkIGlzIE5PVCBhIGdyb3VwLAotICAgICAgICAgIGlmIChmaWVsZCAhPSBOVUxMICYmIGZp
ZWxkLT50eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQKSB7Ci0gICAgICAgICAg
ICBmaWVsZCA9IE5VTEw7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEFnYWlu
LCBzcGVjaWFsLWNhc2UgZ3JvdXAgbmFtZXMgYXMgZGVzY3JpYmVkIGFib3ZlLgotICAgICAgICBp
ZiAoZmllbGQgIT0gTlVMTCAmJiBmaWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV9HUk9VUAotICAgICAgICAgICAgJiYgZmllbGQtPm1lc3NhZ2VfdHlwZSgpLT5uYW1lKCkgIT0g
ZmllbGRfbmFtZSkgewotICAgICAgICAgIGZpZWxkID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChmaWVsZCA9PSBOVUxMICYmIGFsbG93X2Nhc2VfaW5zZW5zaXRpdmVfZmllbGRfKSB7
Ci0gICAgICAgICAgc3RyaW5nIGxvd2VyX2ZpZWxkX25hbWUgPSBmaWVsZF9uYW1lOwotICAgICAg
ICAgIExvd2VyU3RyaW5nKCZsb3dlcl9maWVsZF9uYW1lKTsKLSAgICAgICAgICBmaWVsZCA9IGRl
c2NyaXB0b3ItPkZpbmRGaWVsZEJ5TG93ZXJjYXNlTmFtZShsb3dlcl9maWVsZF9uYW1lKTsKLSAg
ICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoZmllbGQgPT0gTlVMTCkgewotICAgICAgICBp
ZiAoIWFsbG93X3Vua25vd25fZmllbGRfKSB7Ci0gICAgICAgICAgUmVwb3J0RXJyb3IoIk1lc3Nh
Z2UgdHlwZSBcIiIgKyBkZXNjcmlwdG9yLT5mdWxsX25hbWUoKSArCi0gICAgICAgICAgICAgICAg
ICAgICAgIlwiIGhhcyBubyBmaWVsZCBuYW1lZCBcIiIgKyBmaWVsZF9uYW1lICsgIlwiLiIpOwot
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBSZXBv
cnRXYXJuaW5nKCJNZXNzYWdlIHR5cGUgXCIiICsgZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCkgKwot
ICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGhhcyBubyBmaWVsZCBuYW1lZCBcIiIgKyBmaWVs
ZF9uYW1lICsgIlwiLiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gU2tp
cHMgdW5rbm93biBmaWVsZC4KLSAgICBpZiAoZmllbGQgPT0gTlVMTCkgewotICAgICAgR09PR0xF
X0NIRUNLKGFsbG93X3Vua25vd25fZmllbGRfKTsKLSAgICAgIC8vIFRyeSB0byBndWVzcyB0aGUg
dHlwZSBvZiB0aGlzIGZpZWxkLgotICAgICAgLy8gSWYgdGhpcyBmaWVsZCBpcyBub3QgYSBtZXNz
YWdlLCB0aGVyZSBzaG91bGQgYmUgYSAiOiIgYmV0d2VlbiB0aGUKLSAgICAgIC8vIGZpZWxkIG5h
bWUgYW5kIHRoZSBmaWVsZCB2YWx1ZSBhbmQgYWxzbyB0aGUgZmllbGQgdmFsdWUgc2hvdWxkIG5v
dAotICAgICAgLy8gc3RhcnQgd2l0aCAieyIgb3IgIjwiIHdoaWNoIGluZGljYXRlcyB0aGUgYmVn
aW5uaW5nIG9mIGEgbWVzc2FnZSBib2R5LgotICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gIjoiIG9y
IHRoZXJlIGlzIGEgInsiIG9yICI8IiBhZnRlciAiOiIsIHRoaXMgZmllbGQgaGFzCi0gICAgICAv
LyB0byBiZSBhIG1lc3NhZ2Ugb3IgdGhlIGlucHV0IGlzIGlsbC1mb3JtZWQuCi0gICAgICBpZiAo
VHJ5Q29uc3VtZSgiOiIpICYmICFMb29raW5nQXQoInsiKSAmJiAhTG9va2luZ0F0KCI8IikpIHsK
LSAgICAgICAgcmV0dXJuIFNraXBGaWVsZFZhbHVlKCk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICByZXR1cm4gU2tpcEZpZWxkTWVzc2FnZSgpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChz
aW5ndWxhcl9vdmVyd3JpdGVfcG9saWN5XyA9PSBGT1JCSURfU0lOR1VMQVJfT1ZFUldSSVRFUykg
ewotICAgICAgLy8gRmFpbCBpZiB0aGUgZmllbGQgaXMgbm90IHJlcGVhdGVkIGFuZCBpdCBoYXMg
YWxyZWFkeSBiZWVuIHNwZWNpZmllZC4KLSAgICAgIGlmICghZmllbGQtPmlzX3JlcGVhdGVkKCkg
JiYgcmVmbGVjdGlvbi0+SGFzRmllbGQoKm1lc3NhZ2UsIGZpZWxkKSkgewotICAgICAgICBSZXBv
cnRFcnJvcigiTm9uLXJlcGVhdGVkIGZpZWxkIFwiIiArIGZpZWxkX25hbWUgKwotICAgICAgICAg
ICAgICAgICAgICAiXCIgaXMgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICAvLyBGYWlsIGlmIHRoZSBmaWVsZCBpcyBhIG1l
bWJlciBvZiBhIG9uZW9mIGFuZCBhbm90aGVyIG1lbWJlciBoYXMgYWxyZWFkeQotICAgICAgLy8g
YmVlbiBzcGVjaWZpZWQuCi0gICAgICBjb25zdCBPbmVvZkRlc2NyaXB0b3IqIG9uZW9mID0gZmll
bGQtPmNvbnRhaW5pbmdfb25lb2YoKTsKLSAgICAgIGlmIChvbmVvZiAhPSBOVUxMICYmIHJlZmxl
Y3Rpb24tPkhhc09uZW9mKCptZXNzYWdlLCBvbmVvZikpIHsKLSAgICAgICAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBvdGhlcl9maWVsZCA9Ci0gICAgICAgICAgICByZWZsZWN0aW9uLT5HZXRPbmVv
ZkZpZWxkRGVzY3JpcHRvcigqbWVzc2FnZSwgb25lb2YpOwotICAgICAgICBSZXBvcnRFcnJvcigi
RmllbGQgXCIiICsgZmllbGRfbmFtZSArICJcIiBpcyBzcGVjaWZpZWQgYWxvbmcgd2l0aCAiCi0g
ICAgICAgICAgICAgICAgICAgICJmaWVsZCBcIiIgKyBvdGhlcl9maWVsZC0+bmFtZSgpICsgIlwi
LCBhbm90aGVyIG1lbWJlciAiCi0gICAgICAgICAgICAgICAgICAgICJvZiBvbmVvZiBcIiIgKyBv
bmVvZi0+bmFtZSgpICsgIlwiLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gUGVyZm9ybSBzcGVjaWFsIGhhbmRsaW5nIGZvciBlbWJlZGRlZCBtZXNz
YWdlIHR5cGVzLgotICAgIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfTUVTU0FHRSkgewotICAgICAgLy8gJzonIGlzIG9wdGlvbmFsIGhlcmUuCi0gICAg
ICBUcnlDb25zdW1lKCI6Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vICc6JyBpcyByZXF1aXJl
ZCBoZXJlLgotICAgICAgRE8oQ29uc3VtZSgiOiIpKTsKLSAgICB9Ci0KLSAgICBpZiAoZmllbGQt
PmlzX3JlcGVhdGVkKCkgJiYgVHJ5Q29uc3VtZSgiWyIpKSB7Ci0gICAgICAvLyBTaG9ydCByZXBl
YXRlZCBmb3JtYXQsIGUuZy4gICJmb286IFsxLCAyLCAzXSIKLSAgICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIGlmIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfTUVTU0FHRSkgewotICAgICAgICAgIC8vIFBlcmZvcm0gc3BlY2lhbCBoYW5kbGluZyBmb3Ig
ZW1iZWRkZWQgbWVzc2FnZSB0eXBlcy4KLSAgICAgICAgICBETyhDb25zdW1lRmllbGRNZXNzYWdl
KG1lc3NhZ2UsIHJlZmxlY3Rpb24sIGZpZWxkKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgRE8oQ29uc3VtZUZpZWxkVmFsdWUobWVzc2FnZSwgcmVmbGVjdGlvbiwgZmllbGQpKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoVHJ5Q29uc3VtZSgiXSIpKSB7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgRE8oQ29uc3VtZSgiLCIpKTsKLSAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNT
QUdFKSB7Ci0gICAgICBETyhDb25zdW1lRmllbGRNZXNzYWdlKG1lc3NhZ2UsIHJlZmxlY3Rpb24s
IGZpZWxkKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIERPKENvbnN1bWVGaWVsZFZhbHVlKG1lc3Nh
Z2UsIHJlZmxlY3Rpb24sIGZpZWxkKSk7Ci0gICAgfQotCi0gICAgLy8gRm9yIGhpc3RvcmljYWwg
cmVhc29ucywgZmllbGRzIG1heSBvcHRpb25hbGx5IGJlIHNlcGFyYXRlZCBieSBjb21tYXMgb3IK
LSAgICAvLyBzZW1pY29sb25zLgotICAgIFRyeUNvbnN1bWUoIjsiKSB8fCBUcnlDb25zdW1lKCIs
Iik7Ci0KLSAgICBpZiAoZmllbGQtPm9wdGlvbnMoKS5kZXByZWNhdGVkKCkpIHsKLSAgICAgIFJl
cG9ydFdhcm5pbmcoInRleHQgZm9ybWF0IGNvbnRhaW5zIGRlcHJlY2F0ZWQgZmllbGQgXCIiCi0g
ICAgICAgICAgICAgICAgICAgICsgZmllbGRfbmFtZSArICJcIiIpOwotICAgIH0KLQotICAgIC8v
IElmIGEgcGFyc2UgaW5mbyB0cmVlIGV4aXN0cywgYWRkIHRoZSBsb2NhdGlvbiBmb3IgdGhlIHBh
cnNlZAotICAgIC8vIGZpZWxkLgotICAgIGlmIChwYXJzZV9pbmZvX3RyZWVfICE9IE5VTEwpIHsK
LSAgICAgIFJlY29yZExvY2F0aW9uKHBhcnNlX2luZm9fdHJlZV8sIGZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgUGFyc2VMb2NhdGlvbihzdGFydF9saW5lLCBzdGFydF9jb2x1bW4pKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIFNraXBzIHRoZSBuZXh0IGZpZWxk
IGluY2x1ZGluZyB0aGUgZmllbGQncyBuYW1lIGFuZCB2YWx1ZS4KLSAgYm9vbCBTa2lwRmllbGQo
KSB7Ci0gICAgc3RyaW5nIGZpZWxkX25hbWU7Ci0gICAgaWYgKFRyeUNvbnN1bWUoIlsiKSkgewot
ICAgICAgLy8gRXh0ZW5zaW9uIG5hbWUuCi0gICAgICBETyhDb25zdW1lRnVsbFR5cGVOYW1lKCZm
aWVsZF9uYW1lKSk7Ci0gICAgICBETyhDb25zdW1lKCJdIikpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBETyhDb25zdW1lSWRlbnRpZmllcigmZmllbGRfbmFtZSkpOwotICAgIH0KLQotICAgIC8vIFRy
eSB0byBndWVzcyB0aGUgdHlwZSBvZiB0aGlzIGZpZWxkLgotICAgIC8vIElmIHRoaXMgZmllbGQg
aXMgbm90IGEgbWVzc2FnZSwgdGhlcmUgc2hvdWxkIGJlIGEgIjoiIGJldHdlZW4gdGhlCi0gICAg
Ly8gZmllbGQgbmFtZSBhbmQgdGhlIGZpZWxkIHZhbHVlIGFuZCBhbHNvIHRoZSBmaWVsZCB2YWx1
ZSBzaG91bGQgbm90Ci0gICAgLy8gc3RhcnQgd2l0aCAieyIgb3IgIjwiIHdoaWNoIGluZGljYXRl
cyB0aGUgYmVnaW5uaW5nIG9mIGEgbWVzc2FnZSBib2R5LgotICAgIC8vIElmIHRoZXJlIGlzIG5v
ICI6IiBvciB0aGVyZSBpcyBhICJ7IiBvciAiPCIgYWZ0ZXIgIjoiLCB0aGlzIGZpZWxkIGhhcwot
ICAgIC8vIHRvIGJlIGEgbWVzc2FnZSBvciB0aGUgaW5wdXQgaXMgaWxsLWZvcm1lZC4KLSAgICBp
ZiAoVHJ5Q29uc3VtZSgiOiIpICYmICFMb29raW5nQXQoInsiKSAmJiAhTG9va2luZ0F0KCI8Iikp
IHsKLSAgICAgIERPKFNraXBGaWVsZFZhbHVlKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBETyhT
a2lwRmllbGRNZXNzYWdlKCkpOwotICAgIH0KLSAgICAvLyBGb3IgaGlzdG9yaWNhbCByZWFzb25z
LCBmaWVsZHMgbWF5IG9wdGlvbmFsbHkgYmUgc2VwYXJhdGVkIGJ5IGNvbW1hcyBvcgotICAgIC8v
IHNlbWljb2xvbnMuCi0gICAgVHJ5Q29uc3VtZSgiOyIpIHx8IFRyeUNvbnN1bWUoIiwiKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGJvb2wgQ29uc3VtZUZpZWxkTWVzc2FnZShNZXNzYWdl
KiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVmbGVjdGlvbiog
cmVmbGVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQpIHsKLQotICAgIC8vIElmIHRoZSBwYXJzZSBpbmZvcm1hdGlvbiB0cmVlIGlz
IG5vdCBOVUxMLCBjcmVhdGUgYSBuZXN0ZWQgb25lCi0gICAgLy8gZm9yIHRoZSBuZXN0ZWQgbWVz
c2FnZS4KLSAgICBQYXJzZUluZm9UcmVlKiBwYXJlbnQgPSBwYXJzZV9pbmZvX3RyZWVfOwotICAg
IGlmIChwYXJlbnQgIT0gTlVMTCkgewotICAgICAgcGFyc2VfaW5mb190cmVlXyA9IENyZWF0ZU5l
c3RlZChwYXJlbnQsIGZpZWxkKTsKLSAgICB9Ci0KLSAgICBzdHJpbmcgZGVsaW1pdGVyOwotICAg
IERPKENvbnN1bWVNZXNzYWdlRGVsaW1pdGVyKCZkZWxpbWl0ZXIpKTsKLSAgICBpZiAoZmllbGQt
PmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgIERPKENvbnN1bWVNZXNzYWdlKHJlZmxlY3Rpb24tPkFk
ZE1lc3NhZ2UobWVzc2FnZSwgZmllbGQpLCBkZWxpbWl0ZXIpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgRE8oQ29uc3VtZU1lc3NhZ2UocmVmbGVjdGlvbi0+TXV0YWJsZU1lc3NhZ2UobWVzc2FnZSwg
ZmllbGQpLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyKSk7Ci0gICAgfQotCi0g
ICAgLy8gUmVzZXQgdGhlIHBhcnNlIGluZm9ybWF0aW9uIHRyZWUuCi0gICAgcGFyc2VfaW5mb190
cmVlXyA9IHBhcmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIFNraXBzIHRoZSB3
aG9sZSBib2R5IG9mIGEgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIGJlZ2lubmluZyBkZWxpbWl0ZXIg
YW5kCi0gIC8vIHRoZSBlbmRpbmcgZGVsaW1pdGVyLgotICBib29sIFNraXBGaWVsZE1lc3NhZ2Uo
KSB7Ci0gICAgc3RyaW5nIGRlbGltaXRlcjsKLSAgICBETyhDb25zdW1lTWVzc2FnZURlbGltaXRl
cigmZGVsaW1pdGVyKSk7Ci0gICAgd2hpbGUgKCFMb29raW5nQXQoIj4iKSAmJiAgIUxvb2tpbmdB
dCgifSIpKSB7Ci0gICAgICBETyhTa2lwRmllbGQoKSk7Ci0gICAgfQotICAgIERPKENvbnN1bWUo
ZGVsaW1pdGVyKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBib29sIENvbnN1bWVGaWVs
ZFZhbHVlKE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UmVmbGVjdGlvbiogcmVmbGVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0KLS8vIERlZmluZSBhbiBlYXN5IHRvIHVzZSBtYWNy
byBmb3Igc2V0dGluZyBmaWVsZHMuIFRoaXMgbWFjcm8gY2hlY2tzCi0vLyB0byBzZWUgaWYgdGhl
IGZpZWxkIGlzIHJlcGVhdGVkIChpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gdXNlIHRoZSBBZGQK
LS8vIG1ldGhvZHMgb3Igbm90IChpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gdXNlIHRoZSBTZXQg
bWV0aG9kcykuCi0jZGVmaW5lIFNFVF9GSUVMRChDUFBUWVBFLCBWQUxVRSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICByZWZsZWN0aW9u
LT5BZGQjI0NQUFRZUEUobWVzc2FnZSwgZmllbGQsIFZBTFVFKTsgICAgICAgICBcCi0gICAgICAg
IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgIHJlZmxlY3Rpb24tPlNldCMjQ1BQVFlQRShtZXNzYWdlLCBmaWVsZCwg
VkFMVUUpOyAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0KLSAgICBzd2l0Y2goZmllbGQtPmNwcF90
eXBlKCkpIHsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0lOVDMyOiB7Ci0g
ICAgICAgIGludDY0IHZhbHVlOwotICAgICAgICBETyhDb25zdW1lU2lnbmVkSW50ZWdlcigmdmFs
dWUsIGtpbnQzMm1heCkpOwotICAgICAgICBTRVRfRklFTEQoSW50MzIsIHN0YXRpY19jYXN0PGlu
dDMyPih2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBGaWVs
ZERlc2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMyOiB7Ci0gICAgICAgIHVpbnQ2NCB2YWx1ZTsKLSAg
ICAgICAgRE8oQ29uc3VtZVVuc2lnbmVkSW50ZWdlcigmdmFsdWUsIGt1aW50MzJtYXgpKTsKLSAg
ICAgICAgU0VUX0ZJRUxEKFVJbnQzMiwgc3RhdGljX2Nhc3Q8dWludDMyPih2YWx1ZSkpOwotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfSU5UNjQ6IHsKLSAgICAgICAgaW50NjQgdmFsdWU7Ci0gICAgICAgIERPKENvbnN1bWVTaWdu
ZWRJbnRlZ2VyKCZ2YWx1ZSwga2ludDY0bWF4KSk7Ci0gICAgICAgIFNFVF9GSUVMRChJbnQ2NCwg
dmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBGaWVsZERlc2Ny
aXB0b3I6OkNQUFRZUEVfVUlOVDY0OiB7Ci0gICAgICAgIHVpbnQ2NCB2YWx1ZTsKLSAgICAgICAg
RE8oQ29uc3VtZVVuc2lnbmVkSW50ZWdlcigmdmFsdWUsIGt1aW50NjRtYXgpKTsKLSAgICAgICAg
U0VUX0ZJRUxEKFVJbnQ2NCwgdmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAg
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQ6IHsKLSAgICAgICAgZG91Ymxl
IHZhbHVlOwotICAgICAgICBETyhDb25zdW1lRG91YmxlKCZ2YWx1ZSkpOwotICAgICAgICBTRVRf
RklFTEQoRmxvYXQsIGlvOjpTYWZlRG91YmxlVG9GbG9hdCh2YWx1ZSkpOwotICAgICAgICBicmVh
azsKLSAgICAgIH0KLQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRE9VQkxF
OiB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZTsKLSAgICAgICAgRE8oQ29uc3VtZURvdWJsZSgmdmFs
dWUpKTsKLSAgICAgICAgU0VUX0ZJRUxEKERvdWJsZSwgdmFsdWUpOwotICAgICAgICBicmVhazsK
LSAgICAgIH0KLQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOiB7
Ci0gICAgICAgIHN0cmluZyB2YWx1ZTsKLSAgICAgICAgRE8oQ29uc3VtZVN0cmluZygmdmFsdWUp
KTsKLSAgICAgICAgU0VUX0ZJRUxEKFN0cmluZywgdmFsdWUpOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTDogewotICAg
ICAgICBpZiAoTG9va2luZ0F0VHlwZShpbzo6VG9rZW5pemVyOjpUWVBFX0lOVEVHRVIpKSB7Ci0g
ICAgICAgICAgdWludDY0IHZhbHVlOwotICAgICAgICAgIERPKENvbnN1bWVVbnNpZ25lZEludGVn
ZXIoJnZhbHVlLCAxKSk7Ci0gICAgICAgICAgU0VUX0ZJRUxEKEJvb2wsIHZhbHVlKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBzdHJpbmcgdmFsdWU7Ci0gICAgICAgICAgRE8oQ29uc3Vt
ZUlkZW50aWZpZXIoJnZhbHVlKSk7Ci0gICAgICAgICAgaWYgKHZhbHVlID09ICJ0cnVlIiB8fCB2
YWx1ZSA9PSAiVHJ1ZSIgfHwgdmFsdWUgPT0gInQiKSB7Ci0gICAgICAgICAgICBTRVRfRklFTEQo
Qm9vbCwgdHJ1ZSk7Ci0gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAiZmFsc2UiIHx8IHZh
bHVlID09ICJGYWxzZSIgfHwgdmFsdWUgPT0gImYiKSB7Ci0gICAgICAgICAgICBTRVRfRklFTEQo
Qm9vbCwgZmFsc2UpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZXBvcnRFcnJv
cigiSW52YWxpZCB2YWx1ZSBmb3IgYm9vbGVhbiBmaWVsZCBcIiIgKyBmaWVsZC0+bmFtZSgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICArICJcIi4gVmFsdWU6IFwiIiArIHZhbHVlICArICJcIi4i
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX0VOVU06IHsKLSAgICAgICAgc3RyaW5nIHZhbHVlOwotICAgICAgICBjb25zdCBFbnVtRGVz
Y3JpcHRvciogZW51bV90eXBlID0gZmllbGQtPmVudW1fdHlwZSgpOwotICAgICAgICBjb25zdCBF
bnVtVmFsdWVEZXNjcmlwdG9yKiBlbnVtX3ZhbHVlID0gTlVMTDsKLQotICAgICAgICBpZiAoTG9v
a2luZ0F0VHlwZShpbzo6VG9rZW5pemVyOjpUWVBFX0lERU5USUZJRVIpKSB7Ci0gICAgICAgICAg
RE8oQ29uc3VtZUlkZW50aWZpZXIoJnZhbHVlKSk7Ci0gICAgICAgICAgLy8gRmluZCB0aGUgZW51
bWVyYXRpb24gdmFsdWUuCi0gICAgICAgICAgZW51bV92YWx1ZSA9IGVudW1fdHlwZS0+RmluZFZh
bHVlQnlOYW1lKHZhbHVlKTsKLQotICAgICAgICB9IGVsc2UgaWYgKExvb2tpbmdBdCgiLSIpIHx8
Ci0gICAgICAgICAgICAgICAgICAgTG9va2luZ0F0VHlwZShpbzo6VG9rZW5pemVyOjpUWVBFX0lO
VEVHRVIpKSB7Ci0gICAgICAgICAgaW50NjQgaW50X3ZhbHVlOwotICAgICAgICAgIERPKENvbnN1
bWVTaWduZWRJbnRlZ2VyKCZpbnRfdmFsdWUsIGtpbnQzMm1heCkpOwotICAgICAgICAgIHZhbHVl
ID0gU2ltcGxlSXRvYShpbnRfdmFsdWUpOyAgICAgICAgLy8gZm9yIGVycm9yIHJlcG9ydGluZwot
ICAgICAgICAgIGVudW1fdmFsdWUgPSBlbnVtX3R5cGUtPkZpbmRWYWx1ZUJ5TnVtYmVyKGludF92
YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgUmVwb3J0RXJyb3IoIkV4cGVjdGVk
IGludGVnZXIgb3IgaWRlbnRpZmllci4iKTsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoZW51bV92YWx1ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgaWYg
KCFhbGxvd191bmtub3duX2VudW1fKSB7Ci0gICAgICAgICAgICBSZXBvcnRFcnJvcigiVW5rbm93
biBlbnVtZXJhdGlvbiB2YWx1ZSBvZiBcIiIgKyB2YWx1ZSAgKyAiXCIgZm9yICIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICJmaWVsZCBcIiIgKyBmaWVsZC0+bmFtZSgpICsgIlwiLiIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBS
ZXBvcnRXYXJuaW5nKCJVbmtub3duIGVudW1lcmF0aW9uIHZhbHVlIG9mIFwiIiArIHZhbHVlICAr
ICJcIiBmb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgXCIiICsgZmllbGQt
Pm5hbWUoKSArICJcIi4iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIFNFVF9GSUVMRChFbnVtLCBlbnVtX3ZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X01FU1NBR0U6IHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLiBQdXQgaGVy
ZSBpbnN0ZWFkIG9mIGEgZGVmYXVsdAotICAgICAgICAvLyBzbyB0aGF0IGlmIG5ldyB0eXBlcyBh
cmUgYWRkZWQsIHdlIGdldCBhIG5pY2UgY29tcGlsZXIgd2FybmluZy4KLSAgICAgICAgR09PR0xF
X0xPRyhGQVRBTCkgPDwgIlJlYWNoZWQgYW4gdW5pbnRlbmRlZCBzdGF0ZTogQ1BQVFlQRV9NRVNT
QUdFIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotI3VuZGVmIFNFVF9GSUVMRAot
ICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgYm9vbCBTa2lwRmllbGRWYWx1ZSgpIHsKLSAgICBp
ZiAoTG9va2luZ0F0VHlwZShpbzo6VG9rZW5pemVyOjpUWVBFX1NUUklORykpIHsKLSAgICAgIHdo
aWxlIChMb29raW5nQXRUeXBlKGlvOjpUb2tlbml6ZXI6OlRZUEVfU1RSSU5HKSkgewotICAgICAg
ICB0b2tlbml6ZXJfLk5leHQoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAvLyBQb3NzaWJsZSBmaWVsZCB2YWx1ZXMgb3RoZXIgdGhhbiBzdHJpbmc6Ci0gICAgLy8g
ICAxMjM0NSAgICAgICAgPT4gVFlQRV9JTlRFR0VSCi0gICAgLy8gICAtMTIzNDUgICAgICAgPT4g
VFlQRV9TWU1CT0wgKyBUWVBFX0lOVEVHRVIKLSAgICAvLyAgIDEuMjM0NSAgICAgICA9PiBUWVBF
X0ZMT0FUCi0gICAgLy8gICAtMS4yMzQ1ICAgICAgPT4gVFlQRV9TWU1CT0wgKyBUWVBFX0ZMT0FU
Ci0gICAgLy8gICBpbmYgICAgICAgICAgPT4gVFlQRV9JREVOVElGSUVSCi0gICAgLy8gICAtaW5m
ICAgICAgICAgPT4gVFlQRV9TWU1CT0wgKyBUWVBFX0lERU5USUZJRVIKLSAgICAvLyAgIFRZUEVf
SU5URUdFUiA9PiBUWVBFX0lERU5USUZJRVIKLSAgICAvLyBEaXZpZGVzIHRoZW0gaW50byB0d28g
Z3JvdXAsIG9uZSB3aXRoIFRZUEVfU1lNQk9MCi0gICAgLy8gYW5kIHRoZSBvdGhlciB3aXRob3V0
OgotICAgIC8vICAgR3JvdXAgb25lOgotICAgIC8vICAgICAxMjM0NSAgICAgICAgPT4gVFlQRV9J
TlRFR0VSCi0gICAgLy8gICAgIDEuMjM0NSAgICAgICA9PiBUWVBFX0ZMT0FUCi0gICAgLy8gICAg
IGluZiAgICAgICAgICA9PiBUWVBFX0lERU5USUZJRVIKLSAgICAvLyAgICAgVFlQRV9JTlRFR0VS
ID0+IFRZUEVfSURFTlRJRklFUgotICAgIC8vICAgR3JvdXAgdHdvOgotICAgIC8vICAgICAtMTIz
NDUgICAgICAgPT4gVFlQRV9TWU1CT0wgKyBUWVBFX0lOVEVHRVIKLSAgICAvLyAgICAgLTEuMjM0
NSAgICAgID0+IFRZUEVfU1lNQk9MICsgVFlQRV9GTE9BVAotICAgIC8vICAgICAtaW5mICAgICAg
ICAgPT4gVFlQRV9TWU1CT0wgKyBUWVBFX0lERU5USUZJRVIKLSAgICAvLyBBcyB3ZSBjYW4gc2Vl
LCB0aGUgZmllbGQgdmFsdWUgY29uc2lzdHMgb2YgYW4gb3B0aW9uYWwgJy0nIGFuZCBvbmUgb2YK
LSAgICAvLyBUWVBFX0lOVEVHRVIsIFRZUEVfRkxPQVQgYW5kIFRZUEVfSURFTlRJRklFUi4KLSAg
ICBib29sIGhhc19taW51cyA9IFRyeUNvbnN1bWUoIi0iKTsKLSAgICBpZiAoIUxvb2tpbmdBdFR5
cGUoaW86OlRva2VuaXplcjo6VFlQRV9JTlRFR0VSKSAmJgotICAgICAgICAhTG9va2luZ0F0VHlw
ZShpbzo6VG9rZW5pemVyOjpUWVBFX0ZMT0FUKSAmJgotICAgICAgICAhTG9va2luZ0F0VHlwZShp
bzo6VG9rZW5pemVyOjpUWVBFX0lERU5USUZJRVIpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIC8vIENvbWJpbmF0aW9uIG9mICctJyBhbmQgVFlQRV9JREVOVElGSUVSIG1heSBy
ZXN1bHQgaW4gYW4gaW52YWxpZCBmaWVsZAotICAgIC8vIHZhbHVlIHdoaWxlIG90aGVyIGNvbWJp
bmF0aW9ucyBhbGwgZ2VuZXJhdGUgdmFsaWQgdmFsdWVzLgotICAgIC8vIFdlIGNoZWNrIGlmIHRo
ZSB2YWx1ZSBvZiB0aGlzIGNvbWJpbmF0aW9uIGlzIHZhbGlkIGhlcmUuCi0gICAgLy8gVFlQRV9J
REVOVElGSUVSIGFmdGVyIGEgJy0nIHNob3VsZCBiZSBvbmUgb2YgdGhlIGZsb2F0IHZhbHVlcyBs
aXN0ZWQKLSAgICAvLyBiZWxvdzoKLSAgICAvLyAgIGluZiwgaW5mZiwgaW5maW5pdHksIG5hbgot
ICAgIGlmIChoYXNfbWludXMgJiYgTG9va2luZ0F0VHlwZShpbzo6VG9rZW5pemVyOjpUWVBFX0lE
RU5USUZJRVIpKSB7Ci0gICAgICBzdHJpbmcgdGV4dCA9IHRva2VuaXplcl8uY3VycmVudCgpLnRl
eHQ7Ci0gICAgICBMb3dlclN0cmluZygmdGV4dCk7Ci0gICAgICBpZiAodGV4dCAhPSAiaW5mIiAm
JgotICAgICAgICAgIHRleHQgIT0gImluZmluaXR5IiAmJgotICAgICAgICAgIHRleHQgIT0gIm5h
biIpIHsKLSAgICAgICAgUmVwb3J0RXJyb3IoIkludmFsaWQgZmxvYXQgbnVtYmVyOiAiICsgdGV4
dCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdG9rZW5pemVy
Xy5OZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGN1cnJlbnQgdG9rZW4ncyB0ZXh0IGlzIGVxdWFsIHRvIHRoYXQgc3BlY2lmaWVkLgotICBi
b29sIExvb2tpbmdBdChjb25zdCBzdHJpbmcmIHRleHQpIHsKLSAgICByZXR1cm4gdG9rZW5pemVy
Xy5jdXJyZW50KCkudGV4dCA9PSB0ZXh0OwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBjdXJyZW50IHRva2VuJ3MgdHlwZSBpcyBlcXVhbCB0byB0aGF0IHNwZWNpZmllZC4KLSAgYm9v
bCBMb29raW5nQXRUeXBlKGlvOjpUb2tlbml6ZXI6OlRva2VuVHlwZSB0b2tlbl90eXBlKSB7Ci0g
ICAgcmV0dXJuIHRva2VuaXplcl8uY3VycmVudCgpLnR5cGUgPT0gdG9rZW5fdHlwZTsKLSAgfQot
Ci0gIC8vIENvbnN1bWVzIGFuIGlkZW50aWZpZXIgYW5kIHNhdmVzIGl0cyB2YWx1ZSBpbiB0aGUg
aWRlbnRpZmllciBwYXJhbWV0ZXIuCi0gIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHRva2VuIGlz
IG5vdCBvZiB0eXBlIElERU5URklFUi4KLSAgYm9vbCBDb25zdW1lSWRlbnRpZmllcihzdHJpbmcq
IGlkZW50aWZpZXIpIHsKLSAgICBpZiAoTG9va2luZ0F0VHlwZShpbzo6VG9rZW5pemVyOjpUWVBF
X0lERU5USUZJRVIpKSB7Ci0gICAgICAqaWRlbnRpZmllciA9IHRva2VuaXplcl8uY3VycmVudCgp
LnRleHQ7Ci0gICAgICB0b2tlbml6ZXJfLk5leHQoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIC8vIElmIGFsbG93X2ZpZWxkX251bWVyXyBvciBhbGxvd191bmtub3duX2ZpZWxk
XyBpcyB0cnVlLCB3ZSBzaG91bGQgYWJsZQotICAgIC8vIHRvIHBhcnNlIGludGVnZXIgaWRlbnRp
ZmllcnMuCi0gICAgaWYgKChhbGxvd19maWVsZF9udW1iZXJfIHx8IGFsbG93X3Vua25vd25fZmll
bGRfKQotICAgICAgICAmJiBMb29raW5nQXRUeXBlKGlvOjpUb2tlbml6ZXI6OlRZUEVfSU5URUdF
UikpIHsKLSAgICAgICppZGVudGlmaWVyID0gdG9rZW5pemVyXy5jdXJyZW50KCkudGV4dDsKLSAg
ICAgIHRva2VuaXplcl8uTmV4dCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
UmVwb3J0RXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0KLSAgLy8gQ29uc3VtZSBhIHN0cmluZyBvZiBmb3JtICI8aWQxPi48aWQyPi4uLi48aWRO
PiIuCi0gIGJvb2wgQ29uc3VtZUZ1bGxUeXBlTmFtZShzdHJpbmcqIG5hbWUpIHsKLSAgICBETyhD
b25zdW1lSWRlbnRpZmllcihuYW1lKSk7Ci0gICAgd2hpbGUgKFRyeUNvbnN1bWUoIi4iKSkgewot
ICAgICAgc3RyaW5nIHBhcnQ7Ci0gICAgICBETyhDb25zdW1lSWRlbnRpZmllcigmcGFydCkpOwot
ICAgICAgKm5hbWUgKz0gIi4iOwotICAgICAgKm5hbWUgKz0gcGFydDsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci0gIH0KLQotICAvLyBDb25zdW1lcyBhIHN0cmluZyBhbmQgc2F2ZXMgaXRzIHZh
bHVlIGluIHRoZSB0ZXh0IHBhcmFtZXRlci4KLSAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgdG9r
ZW4gaXMgbm90IG9mIHR5cGUgU1RSSU5HLgotICBib29sIENvbnN1bWVTdHJpbmcoc3RyaW5nKiB0
ZXh0KSB7Ci0gICAgaWYgKCFMb29raW5nQXRUeXBlKGlvOjpUb2tlbml6ZXI6OlRZUEVfU1RSSU5H
KSkgewotICAgICAgUmVwb3J0RXJyb3IoIkV4cGVjdGVkIHN0cmluZy4iKTsKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICB0ZXh0LT5jbGVhcigpOwotICAgIHdoaWxlIChMb29raW5n
QXRUeXBlKGlvOjpUb2tlbml6ZXI6OlRZUEVfU1RSSU5HKSkgewotICAgICAgaW86OlRva2VuaXpl
cjo6UGFyc2VTdHJpbmdBcHBlbmQodG9rZW5pemVyXy5jdXJyZW50KCkudGV4dCwgdGV4dCk7Ci0K
LSAgICAgIHRva2VuaXplcl8uTmV4dCgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9
Ci0KLSAgLy8gQ29uc3VtZXMgYSB1aW50NjQgYW5kIHNhdmVzIGl0cyB2YWx1ZSBpbiB0aGUgdmFs
dWUgcGFyYW1ldGVyLgotICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSB0b2tlbiBpcyBub3Qgb2Yg
dHlwZSBJTlRFR0VSLgotICBib29sIENvbnN1bWVVbnNpZ25lZEludGVnZXIodWludDY0KiB2YWx1
ZSwgdWludDY0IG1heF92YWx1ZSkgewotICAgIGlmICghTG9va2luZ0F0VHlwZShpbzo6VG9rZW5p
emVyOjpUWVBFX0lOVEVHRVIpKSB7Ci0gICAgICBSZXBvcnRFcnJvcigiRXhwZWN0ZWQgaW50ZWdl
ci4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlvOjpUb2tlbml6
ZXI6OlBhcnNlSW50ZWdlcih0b2tlbml6ZXJfLmN1cnJlbnQoKS50ZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1heF92YWx1ZSwgdmFsdWUpKSB7Ci0gICAgICBSZXBv
cnRFcnJvcigiSW50ZWdlciBvdXQgb2YgcmFuZ2UuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgdG9rZW5pemVyXy5OZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICAvLyBDb25zdW1lcyBhbiBpbnQ2NCBhbmQgc2F2ZXMgaXRzIHZhbHVlIGluIHRoZSB2YWx1ZSBw
YXJhbWV0ZXIuCi0gIC8vIE5vdGUgdGhhdCBzaW5jZSB0aGUgdG9rZW5pemVyIGRvZXMgbm90IHN1
cHBvcnQgbmVnYXRpdmUgbnVtYmVycywKLSAgLy8gd2UgYWN0dWFsbHkgbWF5IGNvbnN1bWUgYW4g
YWRkaXRpb25hbCB0b2tlbiAoZm9yIHRoZSBtaW51cyBzaWduKSBpbiB0aGlzCi0gIC8vIG1ldGhv
ZC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgdG9rZW4gaXMgbm90IGFuIGludGVnZXIKLSAgLy8gKHNp
Z25lZCBvciBvdGhlcndpc2UpLgotICBib29sIENvbnN1bWVTaWduZWRJbnRlZ2VyKGludDY0KiB2
YWx1ZSwgdWludDY0IG1heF92YWx1ZSkgewotICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKLQot
ICAgIGlmIChUcnlDb25zdW1lKCItIikpIHsKLSAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKLSAgICAg
IC8vIFR3bydzIGNvbXBsZW1lbnQgYWx3YXlzIGFsbG93cyBvbmUgbW9yZSBuZWdhdGl2ZSBpbnRl
Z2VyIHRoYW4KLSAgICAgIC8vIHBvc2l0aXZlLgotICAgICAgKyttYXhfdmFsdWU7Ci0gICAgfQot
Ci0gICAgdWludDY0IHVuc2lnbmVkX3ZhbHVlOwotCi0gICAgRE8oQ29uc3VtZVVuc2lnbmVkSW50
ZWdlcigmdW5zaWduZWRfdmFsdWUsIG1heF92YWx1ZSkpOwotCi0gICAgKnZhbHVlID0gc3RhdGlj
X2Nhc3Q8aW50NjQ+KHVuc2lnbmVkX3ZhbHVlKTsKLQotICAgIGlmIChuZWdhdGl2ZSkgewotICAg
ICAgKnZhbHVlID0gLSp2YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IC8vIENvbnN1bWVzIGEgdWludDY0IGFuZCBzYXZlcyBpdHMgdmFsdWUgaW4gdGhlIHZhbHVlIHBh
cmFtZXRlci4KLSAgLy8gQWNjZXB0cyBkZWNpbWFsIG51bWJlcnMgb25seSwgcmVqZWN0cyBoZXgg
b3Igb2N0IG51bWJlcnMuCi0gIGJvb2wgQ29uc3VtZVVuc2lnbmVkRGVjaW1hbEludGVnZXIodWlu
dDY0KiB2YWx1ZSwgdWludDY0IG1heF92YWx1ZSkgewotICAgIGlmICghTG9va2luZ0F0VHlwZShp
bzo6VG9rZW5pemVyOjpUWVBFX0lOVEVHRVIpKSB7Ci0gICAgICBSZXBvcnRFcnJvcigiRXhwZWN0
ZWQgaW50ZWdlci4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBz
dHJpbmcmIHRleHQgPSB0b2tlbml6ZXJfLmN1cnJlbnQoKS50ZXh0OwotICAgIGlmIChJc0hleE51
bWJlcih0ZXh0KSB8fCBJc09jdE51bWJlcih0ZXh0KSkgewotICAgICAgUmVwb3J0RXJyb3IoIkV4
cGVjdCBhIGRlY2ltYWwgbnVtYmVyLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmICghaW86OlRva2VuaXplcjo6UGFyc2VJbnRlZ2VyKHRleHQsIG1heF92YWx1ZSwgdmFs
dWUpKSB7Ci0gICAgICBSZXBvcnRFcnJvcigiSW50ZWdlciBvdXQgb2YgcmFuZ2UuIik7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdG9rZW5pemVyXy5OZXh0KCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci0gIH0KLQotICAvLyBDb25zdW1lcyBhIGRvdWJsZSBhbmQgc2F2ZXMgaXRzIHZh
bHVlIGluIHRoZSB2YWx1ZSBwYXJhbWV0ZXIuCi0gIC8vIE5vdGUgdGhhdCBzaW5jZSB0aGUgdG9r
ZW5pemVyIGRvZXMgbm90IHN1cHBvcnQgbmVnYXRpdmUgbnVtYmVycywKLSAgLy8gd2UgYWN0dWFs
bHkgbWF5IGNvbnN1bWUgYW4gYWRkaXRpb25hbCB0b2tlbiAoZm9yIHRoZSBtaW51cyBzaWduKSBp
biB0aGlzCi0gIC8vIG1ldGhvZC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgdG9rZW4gaXMgbm90IGEg
ZG91YmxlCi0gIC8vIChzaWduZWQgb3Igb3RoZXJ3aXNlKS4KLSAgYm9vbCBDb25zdW1lRG91Ymxl
KGRvdWJsZSogdmFsdWUpIHsKLSAgICBib29sIG5lZ2F0aXZlID0gZmFsc2U7Ci0KLSAgICBpZiAo
VHJ5Q29uc3VtZSgiLSIpKSB7Ci0gICAgICBuZWdhdGl2ZSA9IHRydWU7Ci0gICAgfQotCi0gICAg
Ly8gQSBkb3VibGUgY2FuIGFjdHVhbGx5IGJlIGFuIGludGVnZXIsIGFjY29yZGluZyB0byB0aGUg
dG9rZW5pemVyLgotICAgIC8vIFRoZXJlZm9yZSwgd2UgbXVzdCBjaGVjayBib3RoIGNhc2VzIGhl
cmUuCi0gICAgaWYgKExvb2tpbmdBdFR5cGUoaW86OlRva2VuaXplcjo6VFlQRV9JTlRFR0VSKSkg
ewotICAgICAgLy8gV2UgaGF2ZSBmb3VuZCBhbiBpbnRlZ2VyIHZhbHVlIGZvciB0aGUgZG91Ymxl
LgotICAgICAgdWludDY0IGludGVnZXJfdmFsdWU7Ci0gICAgICBETyhDb25zdW1lVW5zaWduZWRE
ZWNpbWFsSW50ZWdlcigmaW50ZWdlcl92YWx1ZSwga3VpbnQ2NG1heCkpOwotCi0gICAgICAqdmFs
dWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGludGVnZXJfdmFsdWUpOwotICAgIH0gZWxzZSBpZiAo
TG9va2luZ0F0VHlwZShpbzo6VG9rZW5pemVyOjpUWVBFX0ZMT0FUKSkgewotICAgICAgLy8gV2Ug
aGF2ZSBmb3VuZCBhIGZsb2F0IHZhbHVlIGZvciB0aGUgZG91YmxlLgotICAgICAgKnZhbHVlID0g
aW86OlRva2VuaXplcjo6UGFyc2VGbG9hdCh0b2tlbml6ZXJfLmN1cnJlbnQoKS50ZXh0KTsKLQot
ICAgICAgLy8gTWFyayB0aGUgY3VycmVudCB0b2tlbiBhcyBjb25zdW1lZC4KLSAgICAgIHRva2Vu
aXplcl8uTmV4dCgpOwotICAgIH0gZWxzZSBpZiAoTG9va2luZ0F0VHlwZShpbzo6VG9rZW5pemVy
OjpUWVBFX0lERU5USUZJRVIpKSB7Ci0gICAgICBzdHJpbmcgdGV4dCA9IHRva2VuaXplcl8uY3Vy
cmVudCgpLnRleHQ7Ci0gICAgICBMb3dlclN0cmluZygmdGV4dCk7Ci0gICAgICBpZiAodGV4dCA9
PSAiaW5mIiB8fAotICAgICAgICAgIHRleHQgPT0gImluZmluaXR5IikgewotICAgICAgICAqdmFs
dWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci0gICAgICAgIHRv
a2VuaXplcl8uTmV4dCgpOwotICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICJuYW4iKSB7Ci0gICAg
ICAgICp2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgICAgIHRva2VuaXplcl8uTmV4dCgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgUmVwb3J0
RXJyb3IoIkV4cGVjdGVkIGRvdWJsZS4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICBSZXBvcnRFcnJvcigiRXhwZWN0ZWQgZG91YmxlLiIpOwot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChuZWdhdGl2ZSkgewotICAgICAg
KnZhbHVlID0gLSp2YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8v
IENvbnN1bWVzIEFueTo6dHlwZV91cmwgdmFsdWUsIG9mIGZvcm0gInR5cGUuZ29vZ2xlYXBpcy5j
b20vZnVsbC50eXBlLk5hbWUiCi0gIC8vIG9yICJ0eXBlLmdvb2dsZXByb2QuY29tL2Z1bGwudHlw
ZS5OYW1lIgotICBib29sIENvbnN1bWVBbnlUeXBlVXJsKHN0cmluZyogZnVsbF90eXBlX25hbWUs
IHN0cmluZyogcHJlZml4KSB7Ci0gICAgLy8gVE9ETyhzYWl0bykgRXh0ZW5kIENvbnN1bWUoKSB0
byBjb25zdW1lIG11bHRpcGxlIHRva2VucyBhdCBvbmNlLCBzbyB0aGF0Ci0gICAgLy8gdGhpcyBj
b2RlIGNhbiBiZSB3cml0dGVuIGFzIGp1c3QgRE8oQ29uc3VtZShrR29vZ2xlQXBpc1R5cGVQcmVm
aXgpKS4KLSAgICBzdHJpbmcgdXJsMSwgdXJsMiwgdXJsMzsKLSAgICBETyhDb25zdW1lSWRlbnRp
ZmllcigmdXJsMSkpOyAgLy8gdHlwZQotICAgIERPKENvbnN1bWUoIi4iKSk7Ci0gICAgRE8oQ29u
c3VtZUlkZW50aWZpZXIoJnVybDIpKTsgIC8vIGdvb2dsZWFwaXMKLSAgICBETyhDb25zdW1lKCIu
IikpOwotICAgIERPKENvbnN1bWVJZGVudGlmaWVyKCZ1cmwzKSk7ICAvLyBjb20KLSAgICBETyhD
b25zdW1lKCIvIikpOwotICAgIERPKENvbnN1bWVGdWxsVHlwZU5hbWUoZnVsbF90eXBlX25hbWUp
KTsKLQotICAgICpwcmVmaXggPSB1cmwxICsgIi4iICsgdXJsMiArICIuIiArIHVybDMgKyAiLyI7
Ci0gICAgaWYgKCpwcmVmaXggIT0gaW50ZXJuYWw6OmtUeXBlR29vZ2xlQXBpc0NvbVByZWZpeCAm
JgotICAgICAgICAqcHJlZml4ICE9IGludGVybmFsOjprVHlwZUdvb2dsZVByb2RDb21QcmVmaXgp
IHsKLSAgICAgIFJlcG9ydEVycm9yKCJUZXh0Rm9ybWF0OjpQYXJzZXIgZm9yIEFueSBzdXBwb3J0
cyBvbmx5ICIKLSAgICAgICAgICAgICAgICAgICJ0eXBlLmdvb2dsZWFwaXMuY29tIGFuZCB0eXBl
Lmdvb2dsZXByb2QuY29tLCAiCi0gICAgICAgICAgICAgICAgICAiYnV0IGZvdW5kIFwiIiArICpw
cmVmaXggKyAiXCIiKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci0gIH0KLQotICAvLyBBIGhlbHBlciBmdW5jdGlvbiBmb3IgcmVjb25zdHJ1Y3RpbmcgQW55
Ojp2YWx1ZS4gQ29uc3VtZXMgYSB0ZXh0IG9mCi0gIC8vIGZ1bGxfdHlwZV9uYW1lLCB0aGVuIHNl
cmlhbGl6ZXMgaXQgaW50byBzZXJpYWxpemVkX3ZhbHVlLiAicG9vbCIgaXMgdXNlZCB0bwotICAv
LyBsb29rIHVwIGFuZCBjcmVhdGUgYSB0ZW1wb3Jhcnkgb2JqZWN0IHdpdGggZnVsbF90eXBlX25h
bWUuCi0gIGJvb2wgQ29uc3VtZUFueVZhbHVlKGNvbnN0IHN0cmluZyYgZnVsbF90eXBlX25hbWUs
IGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29sLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJp
bmcqIHNlcmlhbGl6ZWRfdmFsdWUpIHsKLSAgICBjb25zdCBEZXNjcmlwdG9yKiB2YWx1ZV9kZXNj
cmlwdG9yID0KLSAgICAgICAgcG9vbC0+RmluZE1lc3NhZ2VUeXBlQnlOYW1lKGZ1bGxfdHlwZV9u
YW1lKTsKLSAgICBpZiAodmFsdWVfZGVzY3JpcHRvciA9PSBOVUxMKSB7Ci0gICAgICBSZXBvcnRF
cnJvcigiQ291bGQgbm90IGZpbmQgdHlwZSBcIiIgKyBmdWxsX3R5cGVfbmFtZSArCi0gICAgICAg
ICAgICAgICAgICAiXCIgc3RvcmVkIGluIGdvb2dsZS5wcm90b2J1Zi5BbnkuIik7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIER5bmFtaWNNZXNzYWdlRmFjdG9yeSBmYWN0b3J5Owot
ICAgIGNvbnN0IE1lc3NhZ2UqIHZhbHVlX3Byb3RvdHlwZSA9IGZhY3RvcnkuR2V0UHJvdG90eXBl
KHZhbHVlX2Rlc2NyaXB0b3IpOwotICAgIGlmICh2YWx1ZV9wcm90b3R5cGUgPT0gTlVMTCkgewot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRf
cHRyPE1lc3NhZ2U+IHZhbHVlKHZhbHVlX3Byb3RvdHlwZS0+TmV3KCkpOwotICAgIHN0cmluZyBz
dWJfZGVsaW1pdGVyOwotICAgIERPKENvbnN1bWVNZXNzYWdlRGVsaW1pdGVyKCZzdWJfZGVsaW1p
dGVyKSk7Ci0gICAgRE8oQ29uc3VtZU1lc3NhZ2UodmFsdWUuZ2V0KCksIHN1Yl9kZWxpbWl0ZXIp
KTsKLQotICAgIHZhbHVlLT5BcHBlbmRUb1N0cmluZyhzZXJpYWxpemVkX3ZhbHVlKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIENvbnN1bWVzIGEgdG9rZW4gYW5kIGNvbmZpcm1zIHRo
YXQgaXQgbWF0Y2hlcyB0aGF0IHNwZWNpZmllZCBpbiB0aGUKLSAgLy8gdmFsdWUgcGFyYW1ldGVy
LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSB0b2tlbiBmb3VuZCBkb2VzIG5vdCBtYXRjaCB0aGF0Ci0g
IC8vIHdoaWNoIHdhcyBzcGVjaWZpZWQuCi0gIGJvb2wgQ29uc3VtZShjb25zdCBzdHJpbmcmIHZh
bHVlKSB7Ci0gICAgY29uc3Qgc3RyaW5nJiBjdXJyZW50X3ZhbHVlID0gdG9rZW5pemVyXy5jdXJy
ZW50KCkudGV4dDsKLQotICAgIGlmIChjdXJyZW50X3ZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICBS
ZXBvcnRFcnJvcigiRXhwZWN0ZWQgXCIiICsgdmFsdWUgKyAiXCIsIGZvdW5kIFwiIiArIGN1cnJl
bnRfdmFsdWUKLSAgICAgICAgICAgICAgICAgICsgIlwiLiIpOwotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHRva2VuaXplcl8uTmV4dCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci0g
IH0KLQotICAvLyBBdHRlbXB0cyB0byBjb25zdW1lIHRoZSBzdXBwbGllZCB2YWx1ZS4gUmV0dXJu
cyBmYWxzZSBpZiBhIHRoZQotICAvLyB0b2tlbiBmb3VuZCBkb2VzIG5vdCBtYXRjaCB0aGUgdmFs
dWUgc3BlY2lmaWVkLgotICBib29sIFRyeUNvbnN1bWUoY29uc3Qgc3RyaW5nJiB2YWx1ZSkgewot
ICAgIGlmICh0b2tlbml6ZXJfLmN1cnJlbnQoKS50ZXh0ID09IHZhbHVlKSB7Ci0gICAgICB0b2tl
bml6ZXJfLk5leHQoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLy8gQW4gaW50ZXJuYWwgaW5zdGFuY2Ugb2Yg
dGhlIFRva2VuaXplcidzIGVycm9yIGNvbGxlY3RvciwgdXNlZCB0bwotICAvLyBjb2xsZWN0IGFu
eSBiYXNlLWxldmVsIHBhcnNlIGVycm9ycyBhbmQgZmVlZCB0aGVtIHRvIHRoZSBQYXJzZXJJbXBs
LgotICBjbGFzcyBQYXJzZXJFcnJvckNvbGxlY3RvciA6IHB1YmxpYyBpbzo6RXJyb3JDb2xsZWN0
b3IgewotICAgcHVibGljOgotICAgIGV4cGxpY2l0IFBhcnNlckVycm9yQ29sbGVjdG9yKFRleHRG
b3JtYXQ6OlBhcnNlcjo6UGFyc2VySW1wbCogcGFyc2VyKSA6Ci0gICAgICAgIHBhcnNlcl8ocGFy
c2VyKSB7IH0KLQotICAgIHZpcnR1YWwgflBhcnNlckVycm9yQ29sbGVjdG9yKCkgeyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgQWRkRXJyb3IoaW50IGxpbmUsIGludCBjb2x1bW4sIGNvbnN0IHN0cmlu
ZyYgbWVzc2FnZSkgewotICAgICAgcGFyc2VyXy0+UmVwb3J0RXJyb3IobGluZSwgY29sdW1uLCBt
ZXNzYWdlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgQWRkV2FybmluZyhpbnQgbGluZSwg
aW50IGNvbHVtbiwgY29uc3Qgc3RyaW5nJiBtZXNzYWdlKSB7Ci0gICAgICBwYXJzZXJfLT5SZXBv
cnRXYXJuaW5nKGxpbmUsIGNvbHVtbiwgbWVzc2FnZSk7Ci0gICAgfQotCi0gICBwcml2YXRlOgot
ICAgIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhQYXJzZXJFcnJvckNvbGxlY3Rv
cik7Ci0gICAgVGV4dEZvcm1hdDo6UGFyc2VyOjpQYXJzZXJJbXBsKiBwYXJzZXJfOwotICB9Owot
Ci0gIGlvOjpFcnJvckNvbGxlY3RvciogZXJyb3JfY29sbGVjdG9yXzsKLSAgVGV4dEZvcm1hdDo6
RmluZGVyKiBmaW5kZXJfOwotICBQYXJzZUluZm9UcmVlKiBwYXJzZV9pbmZvX3RyZWVfOwotICBQ
YXJzZXJFcnJvckNvbGxlY3RvciB0b2tlbml6ZXJfZXJyb3JfY29sbGVjdG9yXzsKLSAgaW86OlRv
a2VuaXplciB0b2tlbml6ZXJfOwotICBjb25zdCBEZXNjcmlwdG9yKiByb290X21lc3NhZ2VfdHlw
ZV87Ci0gIFNpbmd1bGFyT3ZlcndyaXRlUG9saWN5IHNpbmd1bGFyX292ZXJ3cml0ZV9wb2xpY3lf
OwotICBjb25zdCBib29sIGFsbG93X2Nhc2VfaW5zZW5zaXRpdmVfZmllbGRfOwotICBjb25zdCBi
b29sIGFsbG93X3Vua25vd25fZmllbGRfOwotICBjb25zdCBib29sIGFsbG93X3Vua25vd25fZW51
bV87Ci0gIGNvbnN0IGJvb2wgYWxsb3dfZmllbGRfbnVtYmVyXzsKLSAgYm9vbCBoYWRfZXJyb3Jz
XzsKLX07Ci0KLSN1bmRlZiBETwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEludGVybmFs
IGNsYXNzIGZvciB3cml0aW5nIHRleHQgdG8gdGhlIGlvOjpaZXJvQ29weU91dHB1dFN0cmVhbS4g
QWRhcHRlZAotLy8gZnJvbSB0aGUgUHJpbnRlciBmb3VuZCBpbiAvL2dvb2dsZS9wcm90b2J1Zi9p
by9wcmludGVyLmgKLWNsYXNzIFRleHRGb3JtYXQ6OlByaW50ZXI6OlRleHRHZW5lcmF0b3Igewot
IHB1YmxpYzoKLSAgZXhwbGljaXQgVGV4dEdlbmVyYXRvcihpbzo6WmVyb0NvcHlPdXRwdXRTdHJl
YW0qIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5pdGlhbF9pbmRlbnRf
bGV2ZWwpCi0gICAgOiBvdXRwdXRfKG91dHB1dCksCi0gICAgICBidWZmZXJfKE5VTEwpLAotICAg
ICAgYnVmZmVyX3NpemVfKDApLAotICAgICAgYXRfc3RhcnRfb2ZfbGluZV8odHJ1ZSksCi0gICAg
ICBmYWlsZWRfKGZhbHNlKSwKLSAgICAgIGluZGVudF8oIiIpLAotICAgICAgaW5pdGlhbF9pbmRl
bnRfbGV2ZWxfKGluaXRpYWxfaW5kZW50X2xldmVsKSB7Ci0gICAgaW5kZW50Xy5yZXNpemUoaW5p
dGlhbF9pbmRlbnRfbGV2ZWxfICogMiwgJyAnKTsKLSAgfQotCi0gIH5UZXh0R2VuZXJhdG9yKCkg
ewotICAgIC8vIE9ubHkgQmFja1VwKCkgaWYgd2UncmUgc3VyZSB3ZSd2ZSBzdWNjZXNzZnVsbHkg
Y2FsbGVkIE5leHQoKSBhdCBsZWFzdAotICAgIC8vIG9uY2UuCi0gICAgaWYgKCFmYWlsZWRfICYm
IGJ1ZmZlcl9zaXplXyA+IDApIHsKLSAgICAgIG91dHB1dF8tPkJhY2tVcChidWZmZXJfc2l6ZV8p
OwotICAgIH0KLSAgfQotCi0gIC8vIEluZGVudCB0ZXh0IGJ5IHR3byBzcGFjZXMuICBBZnRlciBj
YWxsaW5nIEluZGVudCgpLCB0d28gc3BhY2VzIHdpbGwgYmUKLSAgLy8gaW5zZXJ0ZWQgYXQgdGhl
IGJlZ2lubmluZyBvZiBlYWNoIGxpbmUgb2YgdGV4dC4gIEluZGVudCgpIG1heSBiZSBjYWxsZWQK
LSAgLy8gbXVsdGlwbGUgdGltZXMgdG8gcHJvZHVjZSBkZWVwZXIgaW5kZW50cy4KLSAgdm9pZCBJ
bmRlbnQoKSB7Ci0gICAgaW5kZW50XyArPSAiICAiOwotICB9Ci0KLSAgLy8gUmVkdWNlcyB0aGUg
Y3VycmVudCBpbmRlbnQgbGV2ZWwgYnkgdHdvIHNwYWNlcywgb3IgY3Jhc2hlcyBpZiB0aGUgaW5k
ZW50Ci0gIC8vIGxldmVsIGlzIHplcm8uCi0gIHZvaWQgT3V0ZGVudCgpIHsKLSAgICBpZiAoaW5k
ZW50Xy5lbXB0eSgpIHx8Ci0gICAgICAgIGluZGVudF8uc2l6ZSgpIDwgaW5pdGlhbF9pbmRlbnRf
bGV2ZWxfICogMikgewotICAgICAgR09PR0xFX0xPRyhERkFUQUwpIDw8ICIgT3V0ZGVudCgpIHdp
dGhvdXQgbWF0Y2hpbmcgSW5kZW50KCkuIjsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
bmRlbnRfLnJlc2l6ZShpbmRlbnRfLnNpemUoKSAtIDIpOwotICB9Ci0KLSAgLy8gUHJpbnQgdGV4
dCB0byB0aGUgb3V0cHV0IHN0cmVhbS4KLSAgdm9pZCBQcmludChjb25zdCBzdHJpbmcmIHN0cikg
ewotICAgIFByaW50KHN0ci5kYXRhKCksIHN0ci5zaXplKCkpOwotICB9Ci0KLSAgLy8gUHJpbnQg
dGV4dCB0byB0aGUgb3V0cHV0IHN0cmVhbS4KLSAgdm9pZCBQcmludChjb25zdCBjaGFyKiB0ZXh0
KSB7Ci0gICAgUHJpbnQodGV4dCwgc3RybGVuKHRleHQpKTsKLSAgfQotCi0gIC8vIFByaW50IHRl
eHQgdG8gdGhlIG91dHB1dCBzdHJlYW0uCi0gIHZvaWQgUHJpbnQoY29uc3QgY2hhciogdGV4dCwg
c2l6ZV90IHNpemUpIHsKLSAgICBzaXplX3QgcG9zID0gMDsgIC8vIFRoZSBudW1iZXIgb2YgYnl0
ZXMgd2UndmUgd3JpdHRlbiBzbyBmYXIuCi0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7IGkrKykgewotICAgICAgaWYgKHRleHRbaV0gPT0gJ1xuJykgewotICAgICAgICAvLyBTYXcg
bmV3bGluZS4gIElmIHRoZXJlIGlzIG1vcmUgdGV4dCwgd2UgbWF5IG5lZWQgdG8gaW5zZXJ0IGFu
IGluZGVudAotICAgICAgICAvLyBoZXJlLiAgU28sIHdyaXRlIHdoYXQgd2UgaGF2ZSBzbyBmYXIs
IGluY2x1ZGluZyB0aGUgJ1xuJy4KLSAgICAgICAgV3JpdGUodGV4dCArIHBvcywgaSAtIHBvcyAr
IDEpOwotICAgICAgICBwb3MgPSBpICsgMTsKLQotICAgICAgICAvLyBTZXR0aW5nIHRoaXMgdHJ1
ZSB3aWxsIGNhdXNlIHRoZSBuZXh0IFdyaXRlKCkgdG8gaW5zZXJ0IGFuIGluZGVudAotICAgICAg
ICAvLyBmaXJzdC4KLSAgICAgICAgYXRfc3RhcnRfb2ZfbGluZV8gPSB0cnVlOwotICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFdyaXRlIHRoZSByZXN0LgotICAgIFdyaXRlKHRleHQgKyBwb3MsIHNp
emUgLSBwb3MpOwotICB9Ci0KLSAgLy8gVHJ1ZSBpZiBhbnkgd3JpdGUgdG8gdGhlIHVuZGVybHlp
bmcgc3RyZWFtIGZhaWxlZC4gIChXZSBkb24ndCBqdXN0Ci0gIC8vIGNyYXNoIGluIHRoaXMgY2Fz
ZSBiZWNhdXNlIHRoaXMgaXMgYW4gSS9PIGZhaWx1cmUsIG5vdCBhIHByb2dyYW1taW5nCi0gIC8v
IGVycm9yLikKLSAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBmYWlsZWRfOyB9Ci0KLSBw
cml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoVGV4dEdlbmVyYXRv
cik7Ci0KLSAgdm9pZCBXcml0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAg
IGlmIChmYWlsZWRfKSByZXR1cm47Ci0gICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuOwotCi0gICAg
aWYgKGF0X3N0YXJ0X29mX2xpbmVfKSB7Ci0gICAgICAvLyBJbnNlcnQgYW4gaW5kZW50LgotICAg
ICAgYXRfc3RhcnRfb2ZfbGluZV8gPSBmYWxzZTsKLSAgICAgIFdyaXRlKGluZGVudF8uZGF0YSgp
LCBpbmRlbnRfLnNpemUoKSk7Ci0gICAgICBpZiAoZmFpbGVkXykgcmV0dXJuOwotICAgIH0KLQot
ICAgIHdoaWxlIChzaXplID4gYnVmZmVyX3NpemVfKSB7Ci0gICAgICAvLyBEYXRhIGV4Y2VlZHMg
c3BhY2UgaW4gdGhlIGJ1ZmZlci4gIENvcHkgd2hhdCB3ZSBjYW4gYW5kIHJlcXVlc3QgYQotICAg
ICAgLy8gbmV3IGJ1ZmZlci4KLSAgICAgIG1lbWNweShidWZmZXJfLCBkYXRhLCBidWZmZXJfc2l6
ZV8pOwotICAgICAgZGF0YSArPSBidWZmZXJfc2l6ZV87Ci0gICAgICBzaXplIC09IGJ1ZmZlcl9z
aXplXzsKLSAgICAgIHZvaWQqIHZvaWRfYnVmZmVyOwotICAgICAgZmFpbGVkXyA9ICFvdXRwdXRf
LT5OZXh0KCZ2b2lkX2J1ZmZlciwgJmJ1ZmZlcl9zaXplXyk7Ci0gICAgICBpZiAoZmFpbGVkXykg
cmV0dXJuOwotICAgICAgYnVmZmVyXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZvaWRfYnVm
ZmVyKTsKLSAgICB9Ci0KLSAgICAvLyBCdWZmZXIgaXMgYmlnIGVub3VnaCB0byByZWNlaXZlIHRo
ZSBkYXRhOyBjb3B5IGl0LgotICAgIG1lbWNweShidWZmZXJfLCBkYXRhLCBzaXplKTsKLSAgICBi
dWZmZXJfICs9IHNpemU7Ci0gICAgYnVmZmVyX3NpemVfIC09IHNpemU7Ci0gIH0KLQotICBpbzo6
WmVyb0NvcHlPdXRwdXRTdHJlYW0qIGNvbnN0IG91dHB1dF87Ci0gIGNoYXIqIGJ1ZmZlcl87Ci0g
IGludCBidWZmZXJfc2l6ZV87Ci0gIGJvb2wgYXRfc3RhcnRfb2ZfbGluZV87Ci0gIGJvb2wgZmFp
bGVkXzsKLQotICBzdHJpbmcgaW5kZW50XzsKLSAgaW50IGluaXRpYWxfaW5kZW50X2xldmVsXzsK
LX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UZXh0Rm9ybWF0OjpGaW5kZXI6On5GaW5k
ZXIoKSB7Ci19Ci0KLVRleHRGb3JtYXQ6OlBhcnNlcjo6UGFyc2VyKCkKLSAgOiBlcnJvcl9jb2xs
ZWN0b3JfKE5VTEwpLAotICAgIGZpbmRlcl8oTlVMTCksCi0gICAgcGFyc2VfaW5mb190cmVlXyhO
VUxMKSwKLSAgICBhbGxvd19wYXJ0aWFsXyhmYWxzZSksCi0gICAgYWxsb3dfY2FzZV9pbnNlbnNp
dGl2ZV9maWVsZF8oZmFsc2UpLAotICAgIGFsbG93X3Vua25vd25fZmllbGRfKGZhbHNlKSwKLSAg
ICBhbGxvd191bmtub3duX2VudW1fKGZhbHNlKSwKLSAgICBhbGxvd19maWVsZF9udW1iZXJfKGZh
bHNlKSwKLSAgICBhbGxvd19yZWxheGVkX3doaXRlc3BhY2VfKGZhbHNlKSwKLSAgICBhbGxvd19z
aW5ndWxhcl9vdmVyd3JpdGVzXyhmYWxzZSkgewotfQotCi1UZXh0Rm9ybWF0OjpQYXJzZXI6On5Q
YXJzZXIoKSB7fQotCi1ib29sIFRleHRGb3JtYXQ6OlBhcnNlcjo6UGFyc2UoaW86Olplcm9Db3B5
SW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3Nh
Z2UqIG91dHB1dCkgewotICBvdXRwdXQtPkNsZWFyKCk7Ci0KLSAgUGFyc2VySW1wbDo6U2luZ3Vs
YXJPdmVyd3JpdGVQb2xpY3kgb3ZlcndyaXRlc19wb2xpY3kgPQotICAgICAgYWxsb3dfc2luZ3Vs
YXJfb3ZlcndyaXRlc18KLSAgICAgID8gUGFyc2VySW1wbDo6QUxMT1dfU0lOR1VMQVJfT1ZFUldS
SVRFUwotICAgICAgOiBQYXJzZXJJbXBsOjpGT1JCSURfU0lOR1VMQVJfT1ZFUldSSVRFUzsKLQot
ICBQYXJzZXJJbXBsIHBhcnNlcihvdXRwdXQtPkdldERlc2NyaXB0b3IoKSwgaW5wdXQsIGVycm9y
X2NvbGxlY3Rvcl8sCi0gICAgICAgICAgICAgICAgICAgIGZpbmRlcl8sIHBhcnNlX2luZm9fdHJl
ZV8sCi0gICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZXNfcG9saWN5LAotICAgICAgICAgICAg
ICAgICAgICBhbGxvd19jYXNlX2luc2Vuc2l0aXZlX2ZpZWxkXywgYWxsb3dfdW5rbm93bl9maWVs
ZF8sCi0gICAgICAgICAgICAgICAgICAgIGFsbG93X3Vua25vd25fZW51bV8sIGFsbG93X2ZpZWxk
X251bWJlcl8sCi0gICAgICAgICAgICAgICAgICAgIGFsbG93X3JlbGF4ZWRfd2hpdGVzcGFjZV8p
OwotICByZXR1cm4gTWVyZ2VVc2luZ0ltcGwoaW5wdXQsIG91dHB1dCwgJnBhcnNlcik7Ci19Ci0K
LWJvb2wgVGV4dEZvcm1hdDo6UGFyc2VyOjpQYXJzZUZyb21TdHJpbmcoY29uc3Qgc3RyaW5nJiBp
bnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSog
b3V0cHV0KSB7Ci0gIGlvOjpBcnJheUlucHV0U3RyZWFtIGlucHV0X3N0cmVhbShpbnB1dC5kYXRh
KCksIGlucHV0LnNpemUoKSk7Ci0gIHJldHVybiBQYXJzZSgmaW5wdXRfc3RyZWFtLCBvdXRwdXQp
OwotfQotCi1ib29sIFRleHRGb3JtYXQ6OlBhcnNlcjo6TWVyZ2UoaW86Olplcm9Db3B5SW5wdXRT
dHJlYW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UqIG91
dHB1dCkgewotICBQYXJzZXJJbXBsIHBhcnNlcihvdXRwdXQtPkdldERlc2NyaXB0b3IoKSwgaW5w
dXQsIGVycm9yX2NvbGxlY3Rvcl8sCi0gICAgICAgICAgICAgICAgICAgIGZpbmRlcl8sIHBhcnNl
X2luZm9fdHJlZV8sCi0gICAgICAgICAgICAgICAgICAgIFBhcnNlckltcGw6OkFMTE9XX1NJTkdV
TEFSX09WRVJXUklURVMsCi0gICAgICAgICAgICAgICAgICAgIGFsbG93X2Nhc2VfaW5zZW5zaXRp
dmVfZmllbGRfLCBhbGxvd191bmtub3duX2ZpZWxkXywKLSAgICAgICAgICAgICAgICAgICAgYWxs
b3dfdW5rbm93bl9lbnVtXywgYWxsb3dfZmllbGRfbnVtYmVyXywKLSAgICAgICAgICAgICAgICAg
ICAgYWxsb3dfcmVsYXhlZF93aGl0ZXNwYWNlXyk7Ci0gIHJldHVybiBNZXJnZVVzaW5nSW1wbChp
bnB1dCwgb3V0cHV0LCAmcGFyc2VyKTsKLX0KLQotYm9vbCBUZXh0Rm9ybWF0OjpQYXJzZXI6Ok1l
cmdlRnJvbVN0cmluZyhjb25zdCBzdHJpbmcmIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNZXNzYWdlKiBvdXRwdXQpIHsKLSAgaW86OkFycmF5SW5wdXRT
dHJlYW0gaW5wdXRfc3RyZWFtKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKLSAgcmV0dXJu
IE1lcmdlKCZpbnB1dF9zdHJlYW0sIG91dHB1dCk7Ci19Ci0KLWJvb2wgVGV4dEZvcm1hdDo6UGFy
c2VyOjpNZXJnZVVzaW5nSW1wbChpbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogLyogaW5wdXQgKi8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSogb3V0cHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlckltcGwqIHBh
cnNlcl9pbXBsKSB7Ci0gIGlmICghcGFyc2VyX2ltcGwtPlBhcnNlKG91dHB1dCkpIHJldHVybiBm
YWxzZTsKLSAgaWYgKCFhbGxvd19wYXJ0aWFsXyAmJiAhb3V0cHV0LT5Jc0luaXRpYWxpemVkKCkp
IHsKLSAgICB2ZWN0b3I8c3RyaW5nPiBtaXNzaW5nX2ZpZWxkczsKLSAgICBvdXRwdXQtPkZpbmRJ
bml0aWFsaXphdGlvbkVycm9ycygmbWlzc2luZ19maWVsZHMpOwotICAgIHBhcnNlcl9pbXBsLT5S
ZXBvcnRFcnJvcigtMSwgMCwgIk1lc3NhZ2UgbWlzc2luZyByZXF1aXJlZCBmaWVsZHM6ICIgKwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpvaW4obWlzc2luZ19maWVs
ZHMsICIsICIpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgVGV4dEZvcm1hdDo6UGFyc2VyOjpQYXJzZUZpZWxkVmFsdWVGcm9tU3RyaW5nKAotICAg
IGNvbnN0IHN0cmluZyYgaW5wdXQsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwK
LSAgICBNZXNzYWdlKiBvdXRwdXQpIHsKLSAgaW86OkFycmF5SW5wdXRTdHJlYW0gaW5wdXRfc3Ry
ZWFtKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKLSAgUGFyc2VySW1wbCBwYXJzZXIob3V0
cHV0LT5HZXREZXNjcmlwdG9yKCksICZpbnB1dF9zdHJlYW0sIGVycm9yX2NvbGxlY3Rvcl8sCi0g
ICAgICAgICAgICAgICAgICAgIGZpbmRlcl8sIHBhcnNlX2luZm9fdHJlZV8sCi0gICAgICAgICAg
ICAgICAgICAgIFBhcnNlckltcGw6OkFMTE9XX1NJTkdVTEFSX09WRVJXUklURVMsCi0gICAgICAg
ICAgICAgICAgICAgIGFsbG93X2Nhc2VfaW5zZW5zaXRpdmVfZmllbGRfLCBhbGxvd191bmtub3du
X2ZpZWxkXywKLSAgICAgICAgICAgICAgICAgICAgYWxsb3dfdW5rbm93bl9lbnVtXywgYWxsb3df
ZmllbGRfbnVtYmVyXywKLSAgICAgICAgICAgICAgICAgICAgYWxsb3dfcmVsYXhlZF93aGl0ZXNw
YWNlXyk7Ci0gIHJldHVybiBwYXJzZXIuUGFyc2VGaWVsZChmaWVsZCwgb3V0cHV0KTsKLX0KLQot
Lyogc3RhdGljICovIGJvb2wgVGV4dEZvcm1hdDo6UGFyc2UoaW86Olplcm9Db3B5SW5wdXRTdHJl
YW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSog
b3V0cHV0KSB7Ci0gIHJldHVybiBQYXJzZXIoKS5QYXJzZShpbnB1dCwgb3V0cHV0KTsKLX0KLQot
Lyogc3RhdGljICovIGJvb2wgVGV4dEZvcm1hdDo6TWVyZ2UoaW86Olplcm9Db3B5SW5wdXRTdHJl
YW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSog
b3V0cHV0KSB7Ci0gIHJldHVybiBQYXJzZXIoKS5NZXJnZShpbnB1dCwgb3V0cHV0KTsKLX0KLQot
Lyogc3RhdGljICovIGJvb2wgVGV4dEZvcm1hdDo6UGFyc2VGcm9tU3RyaW5nKGNvbnN0IHN0cmlu
ZyYgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWVzc2FnZSogb3V0cHV0KSB7Ci0gIHJldHVybiBQYXJzZXIoKS5QYXJzZUZyb21TdHJpbmcoaW5w
dXQsIG91dHB1dCk7Ci19Ci0KLS8qIHN0YXRpYyAqLyBib29sIFRleHRGb3JtYXQ6Ok1lcmdlRnJv
bVN0cmluZyhjb25zdCBzdHJpbmcmIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UqIG91dHB1dCkgewotICByZXR1cm4gUGFyc2VyKCku
TWVyZ2VGcm9tU3RyaW5nKGlucHV0LCBvdXRwdXQpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLQotLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIEZpZWxkVmFsdWVQcmludGVy
LiBUaGUgYmFzZSBjbGFzcyBqdXN0Ci0vLyBkb2VzIHNpbXBsZSBmb3JtYXR0aW5nLiBUaGF0IHdh
eSwgZGVyaXZpbmcgY2xhc3NlcyBjb3VsZCBkZWNpZGUgdG8gZmFsbGJhY2sKLS8vIHRvIHRoYXQg
YmVoYXZpb3IuCi1UZXh0Rm9ybWF0OjpGaWVsZFZhbHVlUHJpbnRlcjo6RmllbGRWYWx1ZVByaW50
ZXIoKSB7fQotVGV4dEZvcm1hdDo6RmllbGRWYWx1ZVByaW50ZXI6On5GaWVsZFZhbHVlUHJpbnRl
cigpIHt9Ci1zdHJpbmcgVGV4dEZvcm1hdDo6RmllbGRWYWx1ZVByaW50ZXI6OlByaW50Qm9vbChi
b29sIHZhbCkgY29uc3QgewotICByZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNlIjsKLX0KLXN0
cmluZyBUZXh0Rm9ybWF0OjpGaWVsZFZhbHVlUHJpbnRlcjo6UHJpbnRJbnQzMihpbnQzMiB2YWwp
IGNvbnN0IHsKLSAgcmV0dXJuIFNpbXBsZUl0b2EodmFsKTsKLX0KLXN0cmluZyBUZXh0Rm9ybWF0
OjpGaWVsZFZhbHVlUHJpbnRlcjo6UHJpbnRVSW50MzIodWludDMyIHZhbCkgY29uc3QgewotICBy
ZXR1cm4gU2ltcGxlSXRvYSh2YWwpOwotfQotc3RyaW5nIFRleHRGb3JtYXQ6OkZpZWxkVmFsdWVQ
cmludGVyOjpQcmludEludDY0KGludDY0IHZhbCkgY29uc3QgewotICByZXR1cm4gU2ltcGxlSXRv
YSh2YWwpOwotfQotc3RyaW5nIFRleHRGb3JtYXQ6OkZpZWxkVmFsdWVQcmludGVyOjpQcmludFVJ
bnQ2NCh1aW50NjQgdmFsKSBjb25zdCB7Ci0gIHJldHVybiBTaW1wbGVJdG9hKHZhbCk7Ci19Ci1z
dHJpbmcgVGV4dEZvcm1hdDo6RmllbGRWYWx1ZVByaW50ZXI6OlByaW50RmxvYXQoZmxvYXQgdmFs
KSBjb25zdCB7Ci0gIHJldHVybiBTaW1wbGVGdG9hKHZhbCk7Ci19Ci1zdHJpbmcgVGV4dEZvcm1h
dDo6RmllbGRWYWx1ZVByaW50ZXI6OlByaW50RG91YmxlKGRvdWJsZSB2YWwpIGNvbnN0IHsKLSAg
cmV0dXJuIFNpbXBsZUR0b2EodmFsKTsKLX0KLXN0cmluZyBUZXh0Rm9ybWF0OjpGaWVsZFZhbHVl
UHJpbnRlcjo6UHJpbnRTdHJpbmcoY29uc3Qgc3RyaW5nJiB2YWwpIGNvbnN0IHsKLSAgc3RyaW5n
IHByaW50ZWQoIlwiIik7Ci0gIENFc2NhcGVBbmRBcHBlbmQodmFsLCAmcHJpbnRlZCk7Ci0gIHBy
aW50ZWQucHVzaF9iYWNrKCdcIicpOwotICByZXR1cm4gcHJpbnRlZDsKLX0KLXN0cmluZyBUZXh0
Rm9ybWF0OjpGaWVsZFZhbHVlUHJpbnRlcjo6UHJpbnRCeXRlcyhjb25zdCBzdHJpbmcmIHZhbCkg
Y29uc3QgewotICByZXR1cm4gUHJpbnRTdHJpbmcodmFsKTsKLX0KLXN0cmluZyBUZXh0Rm9ybWF0
OjpGaWVsZFZhbHVlUHJpbnRlcjo6UHJpbnRFbnVtKGludDMyIHZhbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbmFtZSkgY29u
c3QgewotICByZXR1cm4gbmFtZTsKLX0KLXN0cmluZyBUZXh0Rm9ybWF0OjpGaWVsZFZhbHVlUHJp
bnRlcjo6UHJpbnRGaWVsZE5hbWUoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICBj
b25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQpIGNvbnN0IHsKLSAgaWYgKGZpZWxkLT5pc19leHRlbnNpb24oKSkgewotICAgIC8vIFdl
IHNwZWNpYWwtY2FzZSBNZXNzYWdlU2V0IGVsZW1lbnRzIGZvciBjb21wYXRpYmlsaXR5IHdpdGgg
cHJvdG8xLgotICAgIGlmIChmaWVsZC0+Y29udGFpbmluZ190eXBlKCktPm9wdGlvbnMoKS5tZXNz
YWdlX3NldF93aXJlX2Zvcm1hdCgpCi0gICAgICAgICYmIGZpZWxkLT50eXBlKCkgPT0gRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX01FU1NBR0UKLSAgICAgICAgJiYgZmllbGQtPmlzX29wdGlvbmFsKCkK
LSAgICAgICAgJiYgZmllbGQtPmV4dGVuc2lvbl9zY29wZSgpID09IGZpZWxkLT5tZXNzYWdlX3R5
cGUoKSkgewotICAgICAgcmV0dXJuIFN0ckNhdCgiWyIsIGZpZWxkLT5tZXNzYWdlX3R5cGUoKS0+
ZnVsbF9uYW1lKCksICJdIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBTdHJDYXQoIlsi
LCBmaWVsZC0+ZnVsbF9uYW1lKCksICJdIik7Ci0gICAgfQotICB9IGVsc2UgaWYgKGZpZWxkLT50
eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQKSB7Ci0gICAgLy8gR3JvdXBzIG11
c3QgYmUgc2VyaWFsaXplZCB3aXRoIHRoZWlyIG9yaWdpbmFsIGNhcGl0YWxpemF0aW9uLgotICAg
IHJldHVybiBmaWVsZC0+bWVzc2FnZV90eXBlKCktPm5hbWUoKTsKLSAgfSBlbHNlIHsKLSAgICBy
ZXR1cm4gZmllbGQtPm5hbWUoKTsKLSAgfQotfQotc3RyaW5nIFRleHRGb3JtYXQ6OkZpZWxkVmFs
dWVQcmludGVyOjpQcmludE1lc3NhZ2VTdGFydCgKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdl
LAotICAgIGludCBmaWVsZF9pbmRleCwKLSAgICBpbnQgZmllbGRfY291bnQsCi0gICAgYm9vbCBz
aW5nbGVfbGluZV9tb2RlKSBjb25zdCB7Ci0gIHJldHVybiBzaW5nbGVfbGluZV9tb2RlID8gIiB7
ICIgOiAiIHtcbiI7Ci19Ci1zdHJpbmcgVGV4dEZvcm1hdDo6RmllbGRWYWx1ZVByaW50ZXI6OlBy
aW50TWVzc2FnZUVuZCgKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgIGludCBmaWVs
ZF9pbmRleCwKLSAgICBpbnQgZmllbGRfY291bnQsCi0gICAgYm9vbCBzaW5nbGVfbGluZV9tb2Rl
KSBjb25zdCB7Ci0gIHJldHVybiBzaW5nbGVfbGluZV9tb2RlID8gIn0gIiA6ICJ9XG4iOwotfQot
Ci1uYW1lc3BhY2UgewotLy8gT3VyIG93biBzcGVjaWFsaXphdGlvbjogZm9yIFVURjggZXNjYXBl
ZCBzdHJpbmdzLgotY2xhc3MgRmllbGRWYWx1ZVByaW50ZXJVdGY4RXNjYXBpbmcgOiBwdWJsaWMg
VGV4dEZvcm1hdDo6RmllbGRWYWx1ZVByaW50ZXIgewotIHB1YmxpYzoKLSAgdmlydHVhbCBzdHJp
bmcgUHJpbnRTdHJpbmcoY29uc3Qgc3RyaW5nJiB2YWwpIGNvbnN0IHsKLSAgICByZXR1cm4gU3Ry
Q2F0KCJcIiIsIHN0cmluZ3M6OlV0ZjhTYWZlQ0VzY2FwZSh2YWwpLCAiXCIiKTsKLSAgfQotICB2
aXJ0dWFsIHN0cmluZyBQcmludEJ5dGVzKGNvbnN0IHN0cmluZyYgdmFsKSBjb25zdCB7Ci0gICAg
cmV0dXJuIFRleHRGb3JtYXQ6OkZpZWxkVmFsdWVQcmludGVyOjpQcmludFN0cmluZyh2YWwpOwot
ICB9Ci19OwotCi19ICAvLyBuYW1lc3BhY2UKLQotVGV4dEZvcm1hdDo6UHJpbnRlcjo6UHJpbnRl
cigpCi0gIDogaW5pdGlhbF9pbmRlbnRfbGV2ZWxfKDApLAotICAgIHNpbmdsZV9saW5lX21vZGVf
KGZhbHNlKSwKLSAgICB1c2VfZmllbGRfbnVtYmVyXyhmYWxzZSksCi0gICAgdXNlX3Nob3J0X3Jl
cGVhdGVkX3ByaW1pdGl2ZXNfKGZhbHNlKSwKLSAgICBoaWRlX3Vua25vd25fZmllbGRzXyhmYWxz
ZSksCi0gICAgcHJpbnRfbWVzc2FnZV9maWVsZHNfaW5faW5kZXhfb3JkZXJfKGZhbHNlKSwKLSAg
ICBleHBhbmRfYW55XyhmYWxzZSksCi0gICAgdHJ1bmNhdGVfc3RyaW5nX2ZpZWxkX2xvbmdlcl90
aGFuXygwTEwpIHsKLSAgU2V0VXNlVXRmOFN0cmluZ0VzY2FwaW5nKGZhbHNlKTsKLX0KLQotVGV4
dEZvcm1hdDo6UHJpbnRlcjo6flByaW50ZXIoKSB7Ci0gIFNUTERlbGV0ZVZhbHVlcygmY3VzdG9t
X3ByaW50ZXJzXyk7Ci19Ci0KLXZvaWQgVGV4dEZvcm1hdDo6UHJpbnRlcjo6U2V0VXNlVXRmOFN0
cmluZ0VzY2FwaW5nKGJvb2wgYXNfdXRmOCkgewotICBTZXREZWZhdWx0RmllbGRWYWx1ZVByaW50
ZXIoYXNfdXRmOAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRmllbGRWYWx1
ZVByaW50ZXJVdGY4RXNjYXBpbmcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBu
ZXcgRmllbGRWYWx1ZVByaW50ZXIoKSk7Ci19Ci0KLXZvaWQgVGV4dEZvcm1hdDo6UHJpbnRlcjo6
U2V0RGVmYXVsdEZpZWxkVmFsdWVQcmludGVyKAotICAgIGNvbnN0IEZpZWxkVmFsdWVQcmludGVy
KiBwcmludGVyKSB7Ci0gIGRlZmF1bHRfZmllbGRfdmFsdWVfcHJpbnRlcl8ucmVzZXQocHJpbnRl
cik7Ci19Ci0KLWJvb2wgVGV4dEZvcm1hdDo6UHJpbnRlcjo6UmVnaXN0ZXJGaWVsZFZhbHVlUHJp
bnRlcigKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIGNvbnN0IEZpZWxk
VmFsdWVQcmludGVyKiBwcmludGVyKSB7Ci0gIHJldHVybiBmaWVsZCAhPSBOVUxMICYmIHByaW50
ZXIgIT0gTlVMTCAmJgotICAgICAgICAgY3VzdG9tX3ByaW50ZXJzXy5pbnNlcnQoc3RkOjptYWtl
X3BhaXIoZmllbGQsIHByaW50ZXIpKS5zZWNvbmQ7Ci19Ci0KLWJvb2wgVGV4dEZvcm1hdDo6UHJp
bnRlcjo6UHJpbnRUb1N0cmluZyhjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyogb3V0cHV0KSBjb25zdCB7Ci0gIEdP
T0dMRV9EQ0hFQ0sob3V0cHV0KSA8PCAib3V0cHV0IHNwZWNpZmllZCBpcyBOVUxMIjsKLQotICBv
dXRwdXQtPmNsZWFyKCk7Ci0gIGlvOjpTdHJpbmdPdXRwdXRTdHJlYW0gb3V0cHV0X3N0cmVhbShv
dXRwdXQpOwotCi0gIHJldHVybiBQcmludChtZXNzYWdlLCAmb3V0cHV0X3N0cmVhbSk7Ci19Ci0K
LWJvb2wgVGV4dEZvcm1hdDo6UHJpbnRlcjo6UHJpbnRVbmtub3duRmllbGRzVG9TdHJpbmcoCi0g
ICAgY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcywKLSAgICBzdHJpbmcqIG91
dHB1dCkgY29uc3QgewotICBHT09HTEVfRENIRUNLKG91dHB1dCkgPDwgIm91dHB1dCBzcGVjaWZp
ZWQgaXMgTlVMTCI7Ci0KLSAgb3V0cHV0LT5jbGVhcigpOwotICBpbzo6U3RyaW5nT3V0cHV0U3Ry
ZWFtIG91dHB1dF9zdHJlYW0ob3V0cHV0KTsKLSAgcmV0dXJuIFByaW50VW5rbm93bkZpZWxkcyh1
bmtub3duX2ZpZWxkcywgJm91dHB1dF9zdHJlYW0pOwotfQotCi1ib29sIFRleHRGb3JtYXQ6OlBy
aW50ZXI6OlByaW50KGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlvOjpaZXJvQ29weU91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0g
IFRleHRHZW5lcmF0b3IgZ2VuZXJhdG9yKG91dHB1dCwgaW5pdGlhbF9pbmRlbnRfbGV2ZWxfKTsK
LQotICBQcmludChtZXNzYWdlLCBnZW5lcmF0b3IpOwotCi0gIC8vIE91dHB1dCBmYWxzZSBpZiB0
aGUgZ2VuZXJhdG9yIGZhaWxlZCBpbnRlcm5hbGx5LgotICByZXR1cm4gIWdlbmVyYXRvci5mYWls
ZWQoKTsKLX0KLQotYm9vbCBUZXh0Rm9ybWF0OjpQcmludGVyOjpQcmludFVua25vd25GaWVsZHMo
Ci0gICAgY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcywKLSAgICBpbzo6WmVy
b0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICBUZXh0R2VuZXJhdG9yIGdlbmVy
YXRvcihvdXRwdXQsIGluaXRpYWxfaW5kZW50X2xldmVsXyk7Ci0KLSAgUHJpbnRVbmtub3duRmll
bGRzKHVua25vd25fZmllbGRzLCBnZW5lcmF0b3IpOwotCi0gIC8vIE91dHB1dCBmYWxzZSBpZiB0
aGUgZ2VuZXJhdG9yIGZhaWxlZCBpbnRlcm5hbGx5LgotICByZXR1cm4gIWdlbmVyYXRvci5mYWls
ZWQoKTsKLX0KLQotbmFtZXNwYWNlIHsKLS8vIENvbXBhcmlzb24gZnVuY3RvciBmb3Igc29ydGlu
ZyBGaWVsZERlc2NyaXB0b3JzIGJ5IGZpZWxkIGluZGV4Lgotc3RydWN0IEZpZWxkSW5kZXhTb3J0
ZXIgewotICBib29sIG9wZXJhdG9yKCkoY29uc3QgRmllbGREZXNjcmlwdG9yKiBsZWZ0LAotICAg
ICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiByaWdodCkgY29uc3QgewotICAg
IHJldHVybiBsZWZ0LT5pbmRleCgpIDwgcmlnaHQtPmluZGV4KCk7Ci0gIH0KLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZQotCi1ib29sIFRleHRGb3JtYXQ6OlByaW50ZXI6OlByaW50QW55KGNvbnN0IE1l
c3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRH
ZW5lcmF0b3ImIGdlbmVyYXRvcikgY29uc3QgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHR5
cGVfdXJsX2ZpZWxkOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHZhbHVlX2ZpZWxkOwotICBp
ZiAoIWludGVybmFsOjpHZXRBbnlGaWVsZERlc2NyaXB0b3JzKG1lc3NhZ2UsICZ0eXBlX3VybF9m
aWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWVfZmll
bGQpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgY29uc3QgUmVmbGVjdGlvbiogcmVm
bGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotCi0gIC8vIEV4dHJhY3QgdGhlIGZ1
bGwgdHlwZSBuYW1lIGZyb20gdGhlIHR5cGVfdXJsIGZpZWxkLgotICBjb25zdCBzdHJpbmcmIHR5
cGVfdXJsID0gcmVmbGVjdGlvbi0+R2V0U3RyaW5nKG1lc3NhZ2UsIHR5cGVfdXJsX2ZpZWxkKTsK
LSAgc3RyaW5nIGZ1bGxfdHlwZV9uYW1lOwotICBpZiAoIWludGVybmFsOjpQYXJzZUFueVR5cGVV
cmwodHlwZV91cmwsICZmdWxsX3R5cGVfbmFtZSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LQotICAvLyBQcmludCB0aGUgInZhbHVlIiBpbiB0ZXh0LgotICBjb25zdCBnb29nbGU6OnByb3Rv
YnVmOjpEZXNjcmlwdG9yKiB2YWx1ZV9kZXNjcmlwdG9yID0KLSAgICAgIG1lc3NhZ2UuR2V0RGVz
Y3JpcHRvcigpLT5maWxlKCktPnBvb2woKS0+RmluZE1lc3NhZ2VUeXBlQnlOYW1lKAotICAgICAg
ICAgIGZ1bGxfdHlwZV9uYW1lKTsKLSAgaWYgKHZhbHVlX2Rlc2NyaXB0b3IgPT0gTlVMTCkgewot
ICAgIEdPT0dMRV9MT0coV0FSTklORykgPDwgIlByb3RvIHR5cGUgIiA8PCB0eXBlX3VybCA8PCAi
IG5vdCBmb3VuZCI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIER5bmFtaWNNZXNzYWdlRmFj
dG9yeSBmYWN0b3J5OwotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPGdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2U+IHZhbHVlX21lc3NhZ2UoCi0gICAgICBmYWN0b3J5LkdldFByb3RvdHlw
ZSh2YWx1ZV9kZXNjcmlwdG9yKS0+TmV3KCkpOwotICBzdHJpbmcgc2VyaWFsaXplZF92YWx1ZSA9
IHJlZmxlY3Rpb24tPkdldFN0cmluZyhtZXNzYWdlLCB2YWx1ZV9maWVsZCk7Ci0gIGlmICghdmFs
dWVfbWVzc2FnZS0+UGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWRfdmFsdWUpKSB7Ci0gICAgR09P
R0xFX0xPRyhXQVJOSU5HKSA8PCB0eXBlX3VybCA8PCAiOiBmYWlsZWQgdG8gcGFyc2UgY29udGVu
dHMiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBnZW5lcmF0b3IuUHJpbnQoU3RyQ2F0KCJb
IiwgdHlwZV91cmwsICJdIikpOwotICBjb25zdCBGaWVsZFZhbHVlUHJpbnRlciogcHJpbnRlciA9
IEZpbmRXaXRoRGVmYXVsdCgKLSAgICAgIGN1c3RvbV9wcmludGVyc18sIHZhbHVlX2ZpZWxkLCBk
ZWZhdWx0X2ZpZWxkX3ZhbHVlX3ByaW50ZXJfLmdldCgpKTsKLSAgZ2VuZXJhdG9yLlByaW50KAot
ICAgICAgcHJpbnRlci0+UHJpbnRNZXNzYWdlU3RhcnQobWVzc2FnZSwgLTEsIDAsIHNpbmdsZV9s
aW5lX21vZGVfKSk7Ci0gIGdlbmVyYXRvci5JbmRlbnQoKTsKLSAgUHJpbnQoKnZhbHVlX21lc3Nh
Z2UsIGdlbmVyYXRvcik7Ci0gIGdlbmVyYXRvci5PdXRkZW50KCk7Ci0gIGdlbmVyYXRvci5Qcmlu
dChwcmludGVyLT5QcmludE1lc3NhZ2VFbmQobWVzc2FnZSwgLTEsIDAsIHNpbmdsZV9saW5lX21v
ZGVfKSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRleHRGb3JtYXQ6OlByaW50ZXI6OlBy
aW50KGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHRHZW5lcmF0b3ImIGdlbmVyYXRvcikgY29uc3QgewotICBjb25zdCBEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gbWVzc2FnZS5HZXREZXNjcmlwdG9yKCk7Ci0gIGNvbnN0IFJlZmxlY3Rp
b24qIHJlZmxlY3Rpb24gPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAgaWYgKGRlc2NyaXB0
b3ItPmZ1bGxfbmFtZSgpID09IGludGVybmFsOjprQW55RnVsbFR5cGVOYW1lICYmIGV4cGFuZF9h
bnlfICYmCi0gICAgICBQcmludEFueShtZXNzYWdlLCBnZW5lcmF0b3IpKSB7Ci0gICAgcmV0dXJu
OwotICB9Ci0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIHJlZmxl
Y3Rpb24tPkxpc3RGaWVsZHMobWVzc2FnZSwgJmZpZWxkcyk7Ci0gIGlmIChwcmludF9tZXNzYWdl
X2ZpZWxkc19pbl9pbmRleF9vcmRlcl8pIHsKLSAgICBzdGQ6OnNvcnQoZmllbGRzLmJlZ2luKCks
IGZpZWxkcy5lbmQoKSwgRmllbGRJbmRleFNvcnRlcigpKTsKLSAgfQotICBmb3IgKGludCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykgewotICAgIFByaW50RmllbGQobWVzc2FnZSwgcmVm
bGVjdGlvbiwgZmllbGRzW2ldLCBnZW5lcmF0b3IpOwotICB9Ci0gIGlmICghaGlkZV91bmtub3du
X2ZpZWxkc18pIHsKLSAgICBQcmludFVua25vd25GaWVsZHMocmVmbGVjdGlvbi0+R2V0VW5rbm93
bkZpZWxkcyhtZXNzYWdlKSwgZ2VuZXJhdG9yKTsKLSAgfQotfQotCi12b2lkIFRleHRGb3JtYXQ6
OlByaW50ZXI6OlByaW50RmllbGRWYWx1ZVRvU3RyaW5nKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBpbnQgaW5kZXgs
Ci0gICAgc3RyaW5nKiBvdXRwdXQpIGNvbnN0IHsKLQotICBHT09HTEVfRENIRUNLKG91dHB1dCkg
PDwgIm91dHB1dCBzcGVjaWZpZWQgaXMgTlVMTCI7Ci0KLSAgb3V0cHV0LT5jbGVhcigpOwotICBp
bzo6U3RyaW5nT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0ob3V0cHV0KTsKLSAgVGV4dEdlbmVy
YXRvciBnZW5lcmF0b3IoJm91dHB1dF9zdHJlYW0sIGluaXRpYWxfaW5kZW50X2xldmVsXyk7Ci0K
LSAgUHJpbnRGaWVsZFZhbHVlKG1lc3NhZ2UsIG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpLCBmaWVs
ZCwgaW5kZXgsIGdlbmVyYXRvcik7Ci19Ci0KLWNsYXNzIE1hcEVudHJ5TWVzc2FnZUNvbXBhcmF0
b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgTWFwRW50cnlNZXNzYWdlQ29tcGFyYXRvcihjb25z
dCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKQotICAgICAgOiBmaWVsZF8oZGVzY3JpcHRvci0+Zmll
bGQoMCkpIHt9Ci0KLSAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IE1lc3NhZ2UqIGEsIGNvbnN0IE1l
c3NhZ2UqIGIpIHsKLSAgICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gYS0+R2V0UmVm
bGVjdGlvbigpOwotICAgIHN3aXRjaCAoZmllbGRfLT5jcHBfdHlwZSgpKSB7Ci0gICAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9CT09MOiB7Ci0gICAgICAgICAgYm9vbCBmaXJzdCA9
IHJlZmxlY3Rpb24tPkdldEJvb2woKmEsIGZpZWxkXyk7Ci0gICAgICAgICAgYm9vbCBzZWNvbmQg
PSByZWZsZWN0aW9uLT5HZXRCb29sKCpiLCBmaWVsZF8pOwotICAgICAgICAgIHJldHVybiBmaXJz
dCA8IHNlY29uZDsKLSAgICAgIH0KLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBF
X0lOVDMyOiB7Ci0gICAgICAgICAgaW50MzIgZmlyc3QgPSByZWZsZWN0aW9uLT5HZXRJbnQzMigq
YSwgZmllbGRfKTsKLSAgICAgICAgICBpbnQzMiBzZWNvbmQgPSByZWZsZWN0aW9uLT5HZXRJbnQz
MigqYiwgZmllbGRfKTsKLSAgICAgICAgICByZXR1cm4gZmlyc3QgPCBzZWNvbmQ7Ci0gICAgICB9
Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQ2NDogewotICAgICAgICAg
IGludDY0IGZpcnN0ID0gcmVmbGVjdGlvbi0+R2V0SW50NjQoKmEsIGZpZWxkXyk7Ci0gICAgICAg
ICAgaW50NjQgc2Vjb25kID0gcmVmbGVjdGlvbi0+R2V0SW50NjQoKmIsIGZpZWxkXyk7Ci0gICAg
ICAgICAgcmV0dXJuIGZpcnN0IDwgc2Vjb25kOwotICAgICAgfQotICAgICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfVUlOVDMyOiB7Ci0gICAgICAgICAgdWludDMyIGZpcnN0ID0gcmVm
bGVjdGlvbi0+R2V0VUludDMyKCphLCBmaWVsZF8pOwotICAgICAgICAgIHVpbnQzMiBzZWNvbmQg
PSByZWZsZWN0aW9uLT5HZXRVSW50MzIoKmIsIGZpZWxkXyk7Ci0gICAgICAgICAgcmV0dXJuIGZp
cnN0IDwgc2Vjb25kOwotICAgICAgfQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfVUlOVDY0OiB7Ci0gICAgICAgICAgdWludDY0IGZpcnN0ID0gcmVmbGVjdGlvbi0+R2V0VUlu
dDY0KCphLCBmaWVsZF8pOwotICAgICAgICAgIHVpbnQ2NCBzZWNvbmQgPSByZWZsZWN0aW9uLT5H
ZXRVSW50NjQoKmIsIGZpZWxkXyk7Ci0gICAgICAgICAgcmV0dXJuIGZpcnN0IDwgc2Vjb25kOwot
ICAgICAgfQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HOiB7Ci0g
ICAgICAgICAgc3RyaW5nIGZpcnN0ID0gcmVmbGVjdGlvbi0+R2V0U3RyaW5nKCphLCBmaWVsZF8p
OwotICAgICAgICAgIHN0cmluZyBzZWNvbmQgPSByZWZsZWN0aW9uLT5HZXRTdHJpbmcoKmIsIGZp
ZWxkXyk7Ci0gICAgICAgICAgcmV0dXJuIGZpcnN0IDwgc2Vjb25kOwotICAgICAgfQotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgR09PR0xFX0xPRyhERkFUQUwpIDw8ICJJbnZhbGlkIGtleSBmb3Ig
bWFwIGZpZWxkLiI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gcHJpdmF0
ZToKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF87Ci19OwotCi12b2lkIFRleHRGb3Jt
YXQ6OlByaW50ZXI6OlByaW50RmllbGQoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEdl
bmVyYXRvciYgZ2VuZXJhdG9yKSBjb25zdCB7Ci0gIGlmICh1c2Vfc2hvcnRfcmVwZWF0ZWRfcHJp
bWl0aXZlc18gJiYKLSAgICAgIGZpZWxkLT5pc19yZXBlYXRlZCgpICYmCi0gICAgICBmaWVsZC0+
Y3BwX3R5cGUoKSAhPSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfU1RSSU5HICYmCi0gICAgICBm
aWVsZC0+Y3BwX3R5cGUoKSAhPSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FHRSkgewot
ICAgIFByaW50U2hvcnRSZXBlYXRlZEZpZWxkKG1lc3NhZ2UsIHJlZmxlY3Rpb24sIGZpZWxkLCBn
ZW5lcmF0b3IpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGludCBjb3VudCA9IDA7Ci0KLSAgaWYg
KGZpZWxkLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgY291bnQgPSByZWZsZWN0aW9uLT5GaWVsZFNp
emUobWVzc2FnZSwgZmllbGQpOwotICB9IGVsc2UgaWYgKHJlZmxlY3Rpb24tPkhhc0ZpZWxkKG1l
c3NhZ2UsIGZpZWxkKSkgewotICAgIGNvdW50ID0gMTsKLSAgfQotCi0gIHN0ZDo6dmVjdG9yPGNv
bnN0IE1lc3NhZ2UqPiBzb3J0ZWRfbWFwX2ZpZWxkOwotICBpZiAoZmllbGQtPmlzX21hcCgpKSB7
Ci0gICAgY29uc3QgUmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPiYgbWFwX2ZpZWxkID0KLSAgICAg
ICAgcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRQdHJGaWVsZDxNZXNzYWdlPihtZXNzYWdlLCBmaWVs
ZCk7Ci0gICAgZm9yIChSZXBlYXRlZFB0ckZpZWxkPE1lc3NhZ2U+Ojpjb25zdF9wb2ludGVyX2l0
ZXJhdG9yIGl0ID0KLSAgICAgICAgICAgICBtYXBfZmllbGQucG9pbnRlcl9iZWdpbigpOwotICAg
ICAgICAgaXQgIT0gbWFwX2ZpZWxkLnBvaW50ZXJfZW5kKCk7ICsraXQpIHsKLSAgICAgIHNvcnRl
ZF9tYXBfZmllbGQucHVzaF9iYWNrKCppdCk7Ci0gICAgfQotCi0gICAgTWFwRW50cnlNZXNzYWdl
Q29tcGFyYXRvciBjb21wYXJhdG9yKGZpZWxkLT5tZXNzYWdlX3R5cGUoKSk7Ci0gICAgc3RkOjpz
dGFibGVfc29ydChzb3J0ZWRfbWFwX2ZpZWxkLmJlZ2luKCksIHNvcnRlZF9tYXBfZmllbGQuZW5k
KCksCi0gICAgICAgICAgICAgICAgICAgICBjb21wYXJhdG9yKTsKLSAgfQotCi0gIGZvciAoaW50
IGogPSAwOyBqIDwgY291bnQ7ICsraikgewotICAgIGNvbnN0IGludCBmaWVsZF9pbmRleCA9IGZp
ZWxkLT5pc19yZXBlYXRlZCgpID8gaiA6IC0xOwotCi0gICAgUHJpbnRGaWVsZE5hbWUobWVzc2Fn
ZSwgcmVmbGVjdGlvbiwgZmllbGQsIGdlbmVyYXRvcik7Ci0KLSAgICBpZiAoZmllbGQtPmNwcF90
eXBlKCkgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICAgIGNvbnN0
IEZpZWxkVmFsdWVQcmludGVyKiBwcmludGVyID0gRmluZFdpdGhEZWZhdWx0KAotICAgICAgICAg
IGN1c3RvbV9wcmludGVyc18sIGZpZWxkLCBkZWZhdWx0X2ZpZWxkX3ZhbHVlX3ByaW50ZXJfLmdl
dCgpKTsKLSAgICAgIGNvbnN0IE1lc3NhZ2UmIHN1Yl9tZXNzYWdlID0KLSAgICAgICAgICBmaWVs
ZC0+aXNfcmVwZWF0ZWQoKQotICAgICAgICAgICAgICA/IChmaWVsZC0+aXNfbWFwKCkKLSAgICAg
ICAgICAgICAgICAgICAgID8gKnNvcnRlZF9tYXBfZmllbGRbal0KLSAgICAgICAgICAgICAgICAg
ICAgIDogcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRNZXNzYWdlKG1lc3NhZ2UsIGZpZWxkLCBqKSkK
LSAgICAgICAgICAgICAgOiByZWZsZWN0aW9uLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIGZpZWxkKTsK
LSAgICAgIGdlbmVyYXRvci5QcmludCgKLSAgICAgICAgICBwcmludGVyLT5QcmludE1lc3NhZ2VT
dGFydCgKLSAgICAgICAgICAgICAgc3ViX21lc3NhZ2UsIGZpZWxkX2luZGV4LCBjb3VudCwgc2lu
Z2xlX2xpbmVfbW9kZV8pKTsKLSAgICAgIGdlbmVyYXRvci5JbmRlbnQoKTsKLSAgICAgIFByaW50
KHN1Yl9tZXNzYWdlLCBnZW5lcmF0b3IpOwotICAgICAgZ2VuZXJhdG9yLk91dGRlbnQoKTsKLSAg
ICAgIGdlbmVyYXRvci5QcmludCgKLSAgICAgICAgICBwcmludGVyLT5QcmludE1lc3NhZ2VFbmQo
Ci0gICAgICAgICAgICAgIHN1Yl9tZXNzYWdlLCBmaWVsZF9pbmRleCwgY291bnQsIHNpbmdsZV9s
aW5lX21vZGVfKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdlbmVyYXRvci5QcmludCgiOiAiKTsK
LSAgICAgIC8vIFdyaXRlIHRoZSBmaWVsZCB2YWx1ZS4KLSAgICAgIFByaW50RmllbGRWYWx1ZSht
ZXNzYWdlLCByZWZsZWN0aW9uLCBmaWVsZCwgZmllbGRfaW5kZXgsIGdlbmVyYXRvcik7Ci0gICAg
ICBpZiAoc2luZ2xlX2xpbmVfbW9kZV8pIHsKLSAgICAgICAgZ2VuZXJhdG9yLlByaW50KCIgIik7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnZW5lcmF0b3IuUHJpbnQoIlxuIik7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgVGV4dEZvcm1hdDo6UHJpbnRlcjo6UHJpbnRTaG9ydFJl
cGVhdGVkRmllbGQoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICBjb25zdCBSZWZs
ZWN0aW9uKiByZWZsZWN0aW9uLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0g
ICAgVGV4dEdlbmVyYXRvciYgZ2VuZXJhdG9yKSBjb25zdCB7Ci0gIC8vIFByaW50IHByaW1pdGl2
ZSByZXBlYXRlZCBmaWVsZCBpbiBzaG9ydCBmb3JtLgotICBQcmludEZpZWxkTmFtZShtZXNzYWdl
LCByZWZsZWN0aW9uLCBmaWVsZCwgZ2VuZXJhdG9yKTsKLQotICBpbnQgc2l6ZSA9IHJlZmxlY3Rp
b24tPkZpZWxkU2l6ZShtZXNzYWdlLCBmaWVsZCk7Ci0gIGdlbmVyYXRvci5QcmludCgiOiBbIik7
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgaWYgKGkgPiAwKSBnZW5l
cmF0b3IuUHJpbnQoIiwgIik7Ci0gICAgUHJpbnRGaWVsZFZhbHVlKG1lc3NhZ2UsIHJlZmxlY3Rp
b24sIGZpZWxkLCBpLCBnZW5lcmF0b3IpOwotICB9Ci0gIGlmIChzaW5nbGVfbGluZV9tb2RlXykg
ewotICAgIGdlbmVyYXRvci5QcmludCgiXSAiKTsKLSAgfSBlbHNlIHsKLSAgICBnZW5lcmF0b3Iu
UHJpbnQoIl1cbiIpOwotICB9Ci19Ci0KLXZvaWQgVGV4dEZvcm1hdDo6UHJpbnRlcjo6UHJpbnRG
aWVsZE5hbWUoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEdlbmVy
YXRvciYgZ2VuZXJhdG9yKSBjb25zdCB7Ci0gIC8vIGlmIHVzZV9maWVsZF9udW1iZXJfIGlzIHRy
dWUsIHByaW50cyBmaWVsZCBudW1iZXIgaW5zdGVhZAotICAvLyBvZiBmaWVsZCBuYW1lLgotICBp
ZiAodXNlX2ZpZWxkX251bWJlcl8pIHsKLSAgICBnZW5lcmF0b3IuUHJpbnQoU2ltcGxlSXRvYShm
aWVsZC0+bnVtYmVyKCkpKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBjb25zdCBGaWVsZFZhbHVl
UHJpbnRlciogcHJpbnRlciA9IEZpbmRXaXRoRGVmYXVsdCgKLSAgICAgIGN1c3RvbV9wcmludGVy
c18sIGZpZWxkLCBkZWZhdWx0X2ZpZWxkX3ZhbHVlX3ByaW50ZXJfLmdldCgpKTsKLSAgZ2VuZXJh
dG9yLlByaW50KHByaW50ZXItPlByaW50RmllbGROYW1lKG1lc3NhZ2UsIHJlZmxlY3Rpb24sIGZp
ZWxkKSk7Ci19Ci0KLXZvaWQgVGV4dEZvcm1hdDo6UHJpbnRlcjo6UHJpbnRGaWVsZFZhbHVlKAot
ICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVj
dGlvbiwKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIGludCBpbmRleCwK
LSAgICBUZXh0R2VuZXJhdG9yJiBnZW5lcmF0b3IpIGNvbnN0IHsKLSAgR09PR0xFX0RDSEVDSyhm
aWVsZC0+aXNfcmVwZWF0ZWQoKSB8fCAoaW5kZXggPT0gLTEpKQotICAgICAgPDwgIkluZGV4IG11
c3QgYmUgLTEgZm9yIG5vbi1yZXBlYXRlZCBmaWVsZHMiOwotCi0gIGNvbnN0IEZpZWxkVmFsdWVQ
cmludGVyKiBwcmludGVyCi0gICAgICA9IEZpbmRXaXRoRGVmYXVsdChjdXN0b21fcHJpbnRlcnNf
LCBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfZmllbGRfdmFsdWVfcHJp
bnRlcl8uZ2V0KCkpOwotCi0gIHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSNkZWZpbmUg
T1VUUFVUX0ZJRUxEKENQUFRZUEUsIE1FVEhPRCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV8jI0NQUFRZUEU6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdlbmVyYXRvci5QcmludChwcmludGVy
LT5QcmludCMjTUVUSE9EKGZpZWxkLT5pc19yZXBlYXRlZCgpICAgICAgIFwKLSAgICAgICAgICAg
ICAgID8gcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWQjI01FVEhPRChtZXNzYWdlLCBmaWVsZCwgaW5k
ZXgpIFwKLSAgICAgICAgICAgICAgIDogcmVmbGVjdGlvbi0+R2V0IyNNRVRIT0QobWVzc2FnZSwg
ZmllbGQpKSk7ICAgICAgICAgICAgIFwKLSAgICAgICAgYnJlYWsKLQotICAgIE9VVFBVVF9GSUVM
RCggSU5UMzIsICBJbnQzMik7Ci0gICAgT1VUUFVUX0ZJRUxEKCBJTlQ2NCwgIEludDY0KTsKLSAg
ICBPVVRQVVRfRklFTEQoVUlOVDMyLCBVSW50MzIpOwotICAgIE9VVFBVVF9GSUVMRChVSU5UNjQs
IFVJbnQ2NCk7Ci0gICAgT1VUUFVUX0ZJRUxEKCBGTE9BVCwgIEZsb2F0KTsKLSAgICBPVVRQVVRf
RklFTEQoRE9VQkxFLCBEb3VibGUpOwotICAgIE9VVFBVVF9GSUVMRCggIEJPT0wsICAgQm9vbCk7
Ci0jdW5kZWYgT1VUUFVUX0ZJRUxECi0KLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQ
RV9TVFJJTkc6IHsKLSAgICAgIHN0cmluZyBzY3JhdGNoOwotICAgICAgY29uc3Qgc3RyaW5nJiB2
YWx1ZSA9IGZpZWxkLT5pc19yZXBlYXRlZCgpCi0gICAgICAgICAgPyByZWZsZWN0aW9uLT5HZXRS
ZXBlYXRlZFN0cmluZ1JlZmVyZW5jZSgKLSAgICAgICAgICAgICAgbWVzc2FnZSwgZmllbGQsIGlu
ZGV4LCAmc2NyYXRjaCkKLSAgICAgICAgICA6IHJlZmxlY3Rpb24tPkdldFN0cmluZ1JlZmVyZW5j
ZShtZXNzYWdlLCBmaWVsZCwgJnNjcmF0Y2gpOwotICAgICAgY29uc3Qgc3RyaW5nKiB2YWx1ZV90
b19wcmludCA9ICZ2YWx1ZTsKLSAgICAgIHN0cmluZyB0cnVuY2F0ZWRfdmFsdWU7Ci0gICAgICBp
ZiAodHJ1bmNhdGVfc3RyaW5nX2ZpZWxkX2xvbmdlcl90aGFuXyA+IDAgJiYKLSAgICAgICAgICB0
cnVuY2F0ZV9zdHJpbmdfZmllbGRfbG9uZ2VyX3RoYW5fIDwgdmFsdWUuc2l6ZSgpKSB7Ci0gICAg
ICAgIHRydW5jYXRlZF92YWx1ZSA9IHZhbHVlLnN1YnN0cigwLCB0cnVuY2F0ZV9zdHJpbmdfZmll
bGRfbG9uZ2VyX3RoYW5fKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIuLi48dHJ1bmNh
dGVkPi4uLiI7Ci0gICAgICAgIHZhbHVlX3RvX3ByaW50ID0gJnRydW5jYXRlZF92YWx1ZTsKLSAg
ICAgIH0KLSAgICAgIGlmIChmaWVsZC0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9T
VFJJTkcpIHsKLSAgICAgICAgZ2VuZXJhdG9yLlByaW50KHByaW50ZXItPlByaW50U3RyaW5nKCp2
YWx1ZV90b19wcmludCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR09PR0xFX0RDSEVDS19F
UShmaWVsZC0+dHlwZSgpLCBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMpOwotICAgICAgICBn
ZW5lcmF0b3IuUHJpbnQocHJpbnRlci0+UHJpbnRCeXRlcygqdmFsdWVfdG9fcHJpbnQpKTsKLSAg
ICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX0VOVU06IHsKLSAgICAgIGludCBlbnVtX3ZhbHVlID0gZmllbGQtPmlzX3JlcGVhdGVk
KCkKLSAgICAgICAgICA/IHJlZmxlY3Rpb24tPkdldFJlcGVhdGVkRW51bVZhbHVlKG1lc3NhZ2Us
IGZpZWxkLCBpbmRleCkKLSAgICAgICAgICA6IHJlZmxlY3Rpb24tPkdldEVudW1WYWx1ZShtZXNz
YWdlLCBmaWVsZCk7Ci0gICAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiBlbnVtX2Rlc2Mg
PQotICAgICAgICAgIGZpZWxkLT5lbnVtX3R5cGUoKS0+RmluZFZhbHVlQnlOdW1iZXIoZW51bV92
YWx1ZSk7Ci0gICAgICBpZiAoZW51bV9kZXNjICE9IE5VTEwpIHsKLSAgICAgICAgZ2VuZXJhdG9y
LlByaW50KHByaW50ZXItPlByaW50RW51bShlbnVtX3ZhbHVlLCBlbnVtX2Rlc2MtPm5hbWUoKSkp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gT3JkaW5hcmlseSwgZW51bV9kZXNjIHNob3Vs
ZCBub3QgYmUgbnVsbCwgYmVjYXVzZSBwcm90bzIgaGFzIHRoZQotICAgICAgICAvLyBpbnZhcmlh
bnQgdGhhdCBzZXQgZW51bSBmaWVsZCB2YWx1ZXMgbXVzdCBiZSBpbi1yYW5nZSwgYnV0IHdpdGgg
dGhlCi0gICAgICAgIC8vIG5ldyBpbnRlZ2VyLWJhc2VkIEFQSSBmb3IgZW51bXMgKG9yIHRoZSBS
ZXBlYXRlZEZpZWxkPGludD4gbG9vcGhvbGUpLAotICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSBm
b3IgdGhlIHVzZXIgdG8gZm9yY2UgYW4gdW5rbm93biBpbnRlZ2VyIHZhbHVlLiAgU28gd2UKLSAg
ICAgICAgLy8gc2ltcGx5IHVzZSB0aGUgaW50ZWdlciB2YWx1ZSBpdHNlbGYgYXMgdGhlIGVudW0g
dmFsdWUgbmFtZSBpbiB0aGlzCi0gICAgICAgIC8vIGNhc2UuCi0gICAgICAgIGdlbmVyYXRvci5Q
cmludChwcmludGVyLT5QcmludEVudW0oZW51bV92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQcmludGYoIiVkIiwgZW51bV92YWx1ZSkpKTsK
LSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICBQcmludChmaWVsZC0+aXNfcmVwZWF0ZWQoKQotICAg
ICAgICAgICAgPyByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2UobWVzc2FnZSwgZmllbGQs
IGluZGV4KQotICAgICAgICAgICAgOiByZWZsZWN0aW9uLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIGZp
ZWxkKSwKLSAgICAgICAgICAgIGdlbmVyYXRvcik7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0v
KiBzdGF0aWMgKi8gYm9vbCBUZXh0Rm9ybWF0OjpQcmludChjb25zdCBNZXNzYWdlJiBtZXNzYWdl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86Olplcm9Db3B5T3V0cHV0
U3RyZWFtKiBvdXRwdXQpIHsKLSAgcmV0dXJuIFByaW50ZXIoKS5QcmludChtZXNzYWdlLCBvdXRw
dXQpOwotfQotCi0vKiBzdGF0aWMgKi8gYm9vbCBUZXh0Rm9ybWF0OjpQcmludFVua25vd25GaWVs
ZHMoCi0gICAgY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcywKLSAgICBpbzo6
WmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICByZXR1cm4gUHJpbnRlcigpLlByaW50
VW5rbm93bkZpZWxkcyh1bmtub3duX2ZpZWxkcywgb3V0cHV0KTsKLX0KLQotLyogc3RhdGljICov
IGJvb2wgVGV4dEZvcm1hdDo6UHJpbnRUb1N0cmluZygKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNz
YWdlLCBzdHJpbmcqIG91dHB1dCkgewotICByZXR1cm4gUHJpbnRlcigpLlByaW50VG9TdHJpbmco
bWVzc2FnZSwgb3V0cHV0KTsKLX0KLQotLyogc3RhdGljICovIGJvb2wgVGV4dEZvcm1hdDo6UHJp
bnRVbmtub3duRmllbGRzVG9TdHJpbmcoCi0gICAgY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1bmtu
b3duX2ZpZWxkcywgc3RyaW5nKiBvdXRwdXQpIHsKLSAgcmV0dXJuIFByaW50ZXIoKS5QcmludFVu
a25vd25GaWVsZHNUb1N0cmluZyh1bmtub3duX2ZpZWxkcywgb3V0cHV0KTsKLX0KLQotLyogc3Rh
dGljICovIHZvaWQgVGV4dEZvcm1hdDo6UHJpbnRGaWVsZFZhbHVlVG9TdHJpbmcoCi0gICAgY29u
c3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAot
ICAgIGludCBpbmRleCwKLSAgICBzdHJpbmcqIG91dHB1dCkgewotICByZXR1cm4gUHJpbnRlcigp
LlByaW50RmllbGRWYWx1ZVRvU3RyaW5nKG1lc3NhZ2UsIGZpZWxkLCBpbmRleCwgb3V0cHV0KTsK
LX0KLQotLyogc3RhdGljICovIGJvb2wgVGV4dEZvcm1hdDo6UGFyc2VGaWVsZFZhbHVlRnJvbVN0
cmluZygKLSAgICBjb25zdCBzdHJpbmcmIGlucHV0LAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogZmllbGQsCi0gICAgTWVzc2FnZSogbWVzc2FnZSkgewotICByZXR1cm4gUGFyc2VyKCkuUGFy
c2VGaWVsZFZhbHVlRnJvbVN0cmluZyhpbnB1dCwgZmllbGQsIG1lc3NhZ2UpOwotfQotCi0vLyBQ
cmludHMgYW4gaW50ZWdlciBhcyBoZXggd2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMgZGVw
ZW5kZW50IG9uIHRoZQotLy8gaW50ZWdlciB0eXBlLgotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlw
ZT4KLXN0YXRpYyBzdHJpbmcgUGFkZGVkSGV4KEludFR5cGUgdmFsdWUpIHsKLSAgc3RyaW5nIHJl
c3VsdDsKLSAgcmVzdWx0LnJlc2VydmUoc2l6ZW9mKHZhbHVlKSAqIDIpOwotICBmb3IgKGludCBp
ID0gc2l6ZW9mKHZhbHVlKSAqIDIgLSAxOyBpID49IDA7IGktLSkgewotICAgIHJlc3VsdC5wdXNo
X2JhY2soaW50X3RvX2hleF9kaWdpdCh2YWx1ZSA+PiAoaSo0KSAmIDB4MEYpKTsKLSAgfQotICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFRleHRGb3JtYXQ6OlByaW50ZXI6OlByaW50VW5rbm93
bkZpZWxkcygKLSAgICBjb25zdCBVbmtub3duRmllbGRTZXQmIHVua25vd25fZmllbGRzLCBUZXh0
R2VuZXJhdG9yJiBnZW5lcmF0b3IpIGNvbnN0IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB1bmtu
b3duX2ZpZWxkcy5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBjb25zdCBVbmtub3duRmllbGQm
IGZpZWxkID0gdW5rbm93bl9maWVsZHMuZmllbGQoaSk7Ci0gICAgc3RyaW5nIGZpZWxkX251bWJl
ciA9IFNpbXBsZUl0b2EoZmllbGQubnVtYmVyKCkpOwotCi0gICAgc3dpdGNoIChmaWVsZC50eXBl
KCkpIHsKLSAgICAgIGNhc2UgVW5rbm93bkZpZWxkOjpUWVBFX1ZBUklOVDoKLSAgICAgICAgZ2Vu
ZXJhdG9yLlByaW50KGZpZWxkX251bWJlcik7Ci0gICAgICAgIGdlbmVyYXRvci5QcmludCgiOiAi
KTsKLSAgICAgICAgZ2VuZXJhdG9yLlByaW50KFNpbXBsZUl0b2EoZmllbGQudmFyaW50KCkpKTsK
LSAgICAgICAgaWYgKHNpbmdsZV9saW5lX21vZGVfKSB7Ci0gICAgICAgICAgZ2VuZXJhdG9yLlBy
aW50KCIgIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ2VuZXJhdG9yLlByaW50KCJc
biIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVbmtub3duRmllbGQ6
OlRZUEVfRklYRUQzMjogewotICAgICAgICBnZW5lcmF0b3IuUHJpbnQoZmllbGRfbnVtYmVyKTsK
LSAgICAgICAgZ2VuZXJhdG9yLlByaW50KCI6IDB4Iik7Ci0gICAgICAgIGdlbmVyYXRvci5Qcmlu
dCgKLSAgICAgICAgICAgIFN0ckNhdChzdHJpbmdzOjpIZXgoZmllbGQuZml4ZWQzMigpLCBzdHJp
bmdzOjpaRVJPX1BBRF84KSkpOwotICAgICAgICBpZiAoc2luZ2xlX2xpbmVfbW9kZV8pIHsKLSAg
ICAgICAgICBnZW5lcmF0b3IuUHJpbnQoIiAiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBnZW5lcmF0b3IuUHJpbnQoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0gICAgICBjYXNlIFVua25vd25GaWVsZDo6VFlQRV9GSVhFRDY0OiB7Ci0gICAgICAgIGdl
bmVyYXRvci5QcmludChmaWVsZF9udW1iZXIpOwotICAgICAgICBnZW5lcmF0b3IuUHJpbnQoIjog
MHgiKTsKLSAgICAgICAgZ2VuZXJhdG9yLlByaW50KAotICAgICAgICAgICAgU3RyQ2F0KHN0cmlu
Z3M6OkhleChmaWVsZC5maXhlZDY0KCksIHN0cmluZ3M6OlpFUk9fUEFEXzE2KSkpOwotICAgICAg
ICBpZiAoc2luZ2xlX2xpbmVfbW9kZV8pIHsKLSAgICAgICAgICBnZW5lcmF0b3IuUHJpbnQoIiAi
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnZW5lcmF0b3IuUHJpbnQoIlxuIik7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFVua25vd25GaWVs
ZDo6VFlQRV9MRU5HVEhfREVMSU1JVEVEOiB7Ci0gICAgICAgIGdlbmVyYXRvci5QcmludChmaWVs
ZF9udW1iZXIpOwotICAgICAgICBjb25zdCBzdHJpbmcmIHZhbHVlID0gZmllbGQubGVuZ3RoX2Rl
bGltaXRlZCgpOwotICAgICAgICBVbmtub3duRmllbGRTZXQgZW1iZWRkZWRfdW5rbm93bl9maWVs
ZHM7Ci0gICAgICAgIGlmICghdmFsdWUuZW1wdHkoKSAmJiBlbWJlZGRlZF91bmtub3duX2ZpZWxk
cy5QYXJzZUZyb21TdHJpbmcodmFsdWUpKSB7Ci0gICAgICAgICAgLy8gVGhpcyBmaWVsZCBpcyBw
YXJzZWFibGUgYXMgYSBNZXNzYWdlLgotICAgICAgICAgIC8vIFNvIGl0IGlzIHByb2JhYmx5IGFu
IGVtYmVkZGVkIG1lc3NhZ2UuCi0gICAgICAgICAgaWYgKHNpbmdsZV9saW5lX21vZGVfKSB7Ci0g
ICAgICAgICAgICBnZW5lcmF0b3IuUHJpbnQoIiB7ICIpOwotICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBnZW5lcmF0b3IuUHJpbnQoIiB7XG4iKTsKLSAgICAgICAgICAgIGdlbmVyYXRv
ci5JbmRlbnQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgUHJpbnRVbmtub3duRmllbGRzKGVt
YmVkZGVkX3Vua25vd25fZmllbGRzLCBnZW5lcmF0b3IpOwotICAgICAgICAgIGlmIChzaW5nbGVf
bGluZV9tb2RlXykgewotICAgICAgICAgICAgZ2VuZXJhdG9yLlByaW50KCJ9ICIpOwotICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuT3V0ZGVudCgpOwotICAgICAgICAg
ICAgZ2VuZXJhdG9yLlByaW50KCJ9XG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgLy8gVGhpcyBmaWVsZCBpcyBub3QgcGFyc2VhYmxlIGFzIGEgTWVzc2FnZS4K
LSAgICAgICAgICAvLyBTbyBpdCBpcyBwcm9iYWJseSBqdXN0IGEgcGxhaW4gc3RyaW5nLgotICAg
ICAgICAgIHN0cmluZyBwcmludGVkKCI6IFwiIik7Ci0gICAgICAgICAgQ0VzY2FwZUFuZEFwcGVu
ZCh2YWx1ZSwgJnByaW50ZWQpOwotICAgICAgICAgIHByaW50ZWQuYXBwZW5kKHNpbmdsZV9saW5l
X21vZGVfID8gIlwiICIgOiAiXCJcbiIpOwotICAgICAgICAgIGdlbmVyYXRvci5QcmludChwcmlu
dGVkKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgVW5r
bm93bkZpZWxkOjpUWVBFX0dST1VQOgotICAgICAgICBnZW5lcmF0b3IuUHJpbnQoZmllbGRfbnVt
YmVyKTsKLSAgICAgICAgaWYgKHNpbmdsZV9saW5lX21vZGVfKSB7Ci0gICAgICAgICAgZ2VuZXJh
dG9yLlByaW50KCIgeyAiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnZW5lcmF0b3Iu
UHJpbnQoIiB7XG4iKTsKLSAgICAgICAgICBnZW5lcmF0b3IuSW5kZW50KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgUHJpbnRVbmtub3duRmllbGRzKGZpZWxkLmdyb3VwKCksIGdlbmVyYXRvcik7Ci0g
ICAgICAgIGlmIChzaW5nbGVfbGluZV9tb2RlXykgewotICAgICAgICAgIGdlbmVyYXRvci5Qcmlu
dCgifSAiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnZW5lcmF0b3IuT3V0ZGVudCgp
OwotICAgICAgICAgIGdlbmVyYXRvci5QcmludCgifVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8g
bmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3RleHRfZm9y
bWF0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGV4dF9mb3JtYXQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWYzZDRhOGZkNzkwNWNlNzljODA2ZGM2ZGZiNzUxZWJkZWIyNWZlNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdGV4dF9mb3JtYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxNyArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBqc2Nob3JyQGdv
b2dsZS5jb20gKEpvc2VwaCBTY2hvcnIpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wg
QnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90
aGVycy4KLS8vCi0vLyBVdGlsaXRpZXMgZm9yIHByaW50aW5nIGFuZCBwYXJzaW5nIHByb3RvY29s
IG1lc3NhZ2VzIGluIGEgaHVtYW4tcmVhZGFibGUsCi0vLyB0ZXh0LWJhc2VkIGZvcm1hdC4KLQot
I2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfVEVYVF9GT1JNQVRfSF9fCi0jZGVmaW5lIEdPT0dMRV9Q
Uk9UT0JVRl9URVhUX0ZPUk1BVF9IX18KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1v
cnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZl
Y3Rvcj4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9tZXNzYWdlLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLQotbmFtZXNwYWNlIGlvIHsKLSAgY2xhc3MgRXJyb3JDb2xsZWN0b3I7ICAgICAgLy8gdG9r
ZW5pemVyLmgKLX0KLQotLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHByb3RvY29sIGJ1ZmZlciB0
ZXh0IGZvcm1hdC4gIFByaW50aW5nIGFuZCBwYXJzaW5nCi0vLyBwcm90b2NvbCBtZXNzYWdlcyBp
biB0ZXh0IGZvcm1hdCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgaHVtYW4gZWRpdGluZwot
Ly8gb2YgbWVzc2FnZXMuCi0vLwotLy8gVGhpcyBjbGFzcyBpcyByZWFsbHkgYSBuYW1lc3BhY2Ug
dGhhdCBjb250YWlucyBvbmx5IHN0YXRpYyBtZXRob2RzLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQ
T1JUIFRleHRGb3JtYXQgewotIHB1YmxpYzoKLSAgLy8gT3V0cHV0cyBhIHRleHR1YWwgcmVwcmVz
ZW50YXRpb24gb2YgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gdGhlIGdpdmVuCi0gIC8vIG91dHB1dCBz
dHJlYW0uCi0gIHN0YXRpYyBib29sIFByaW50KGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsIGlvOjpa
ZXJvQ29weU91dHB1dFN0cmVhbSogb3V0cHV0KTsKLQotICAvLyBQcmludCB0aGUgZmllbGRzIGlu
IGFuIFVua25vd25GaWVsZFNldC4gIFRoZXkgYXJlIHByaW50ZWQgYnkgdGFnIG51bWJlcgotICAv
LyBvbmx5LiAgRW1iZWRkZWQgbWVzc2FnZXMgYXJlIGhldXJpc3RpY2FsbHkgaWRlbnRpZmllZCBi
eSBhdHRlbXB0aW5nIHRvCi0gIC8vIHBhcnNlIHRoZW0uCi0gIHN0YXRpYyBib29sIFByaW50VW5r
bm93bkZpZWxkcyhjb25zdCBVbmtub3duRmllbGRTZXQmIHVua25vd25fZmllbGRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86Olplcm9Db3B5T3V0cHV0U3RyZWFtKiBvdXRw
dXQpOwotCi0gIC8vIExpa2UgUHJpbnQoKSwgYnV0IG91dHB1dHMgZGlyZWN0bHkgdG8gYSBzdHJp
bmcuCi0gIHN0YXRpYyBib29sIFByaW50VG9TdHJpbmcoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwg
c3RyaW5nKiBvdXRwdXQpOwotCi0gIC8vIExpa2UgUHJpbnRVbmtub3duRmllbGRzKCksIGJ1dCBv
dXRwdXRzIGRpcmVjdGx5IHRvIGEgc3RyaW5nLgotICBzdGF0aWMgYm9vbCBQcmludFVua25vd25G
aWVsZHNUb1N0cmluZyhjb25zdCBVbmtub3duRmllbGRTZXQmIHVua25vd25fZmllbGRzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcqIG91dHB1dCk7Ci0K
LSAgLy8gT3V0cHV0cyBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIHRo
ZSBmaWVsZCBzdXBwbGllZCBvbgotICAvLyB0aGUgbWVzc2FnZSBzdXBwbGllZC4gRm9yIG5vbi1y
ZXBlYXRlZCBmaWVsZHMsIGFuIGluZGV4IG9mIC0xIG11c3QKLSAgLy8gYmUgc3VwcGxpZWQuIE5v
dGUgdGhhdCB0aGlzIG1ldGhvZCB3aWxsIHByaW50IHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhCi0g
IC8vIGZpZWxkIGlmIGl0IGlzIG5vdCBzZXQuCi0gIHN0YXRpYyB2b2lkIFByaW50RmllbGRWYWx1
ZVRvU3RyaW5nKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBvdXRwdXQpOwotCi0gIC8vIFRoZSBkZWZhdWx0
IHByaW50ZXIgdGhhdCBjb252ZXJ0cyBzY2FsYXIgdmFsdWVzIGZyb20gZmllbGRzIGludG8KLSAg
Ly8gdGhlaXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICAvLyBZb3UgY2FuIGRlcml2ZSBmcm9t
IHRoaXMgRmllbGRWYWx1ZVByaW50ZXIgaWYgeW91IHdhbnQgdG8gaGF2ZQotICAvLyBmaWVsZHMg
dG8gYmUgcHJpbnRlZCBpbiBhIGRpZmZlcmVudCB3YXkgYW5kIHJlZ2lzdGVyIGl0IGF0IHRoZQot
ICAvLyBQcmludGVyLgotICBjbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgRmllbGRWYWx1ZVByaW50
ZXIgewotICAgcHVibGljOgotICAgIEZpZWxkVmFsdWVQcmludGVyKCk7Ci0gICAgdmlydHVhbCB+
RmllbGRWYWx1ZVByaW50ZXIoKTsKLSAgICB2aXJ0dWFsIHN0cmluZyBQcmludEJvb2woYm9vbCB2
YWwpIGNvbnN0OwotICAgIHZpcnR1YWwgc3RyaW5nIFByaW50SW50MzIoaW50MzIgdmFsKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHN0cmluZyBQcmludFVJbnQzMih1aW50MzIgdmFsKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHN0cmluZyBQcmludEludDY0KGludDY0IHZhbCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBzdHJpbmcgUHJpbnRVSW50NjQodWludDY0IHZhbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBzdHJp
bmcgUHJpbnRGbG9hdChmbG9hdCB2YWwpIGNvbnN0OwotICAgIHZpcnR1YWwgc3RyaW5nIFByaW50
RG91YmxlKGRvdWJsZSB2YWwpIGNvbnN0OwotICAgIHZpcnR1YWwgc3RyaW5nIFByaW50U3RyaW5n
KGNvbnN0IHN0cmluZyYgdmFsKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0cmluZyBQcmludEJ5dGVz
KGNvbnN0IHN0cmluZyYgdmFsKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0cmluZyBQcmludEVudW0o
aW50MzIgdmFsLCBjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotICAgIHZpcnR1YWwgc3RyaW5n
IFByaW50RmllbGROYW1lKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHN0cmluZyBQcmludE1lc3NhZ2VTdGFydChjb25zdCBNZXNzYWdl
JiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVs
ZF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmllbGRf
Y291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaW5nbGVf
bGluZV9tb2RlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0cmluZyBQcmludE1lc3NhZ2VFbmQoY29u
c3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGZpZWxkX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZmllbGRfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2lu
Z2xlX2xpbmVfbW9kZSkgY29uc3Q7Ci0KLSAgIHByaXZhdGU6Ci0gICAgR09PR0xFX0RJU0FMTE9X
X0VWSUxfQ09OU1RSVUNUT1JTKEZpZWxkVmFsdWVQcmludGVyKTsKLSAgfTsKLQotICAvLyBDbGFz
cyBmb3IgdGhvc2UgdXNlcnMgd2hpY2ggcmVxdWlyZSBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9s
IG92ZXIgaG93Ci0gIC8vIGEgcHJvdG9idWZmZXIgbWVzc2FnZSBpcyBwcmludGVkIG91dC4KLSAg
Y2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFByaW50ZXIgewotICAgcHVibGljOgotICAgIFByaW50
ZXIoKTsKLSAgICB+UHJpbnRlcigpOwotCi0gICAgLy8gTGlrZSBUZXh0Rm9ybWF0OjpQcmludAot
ICAgIGJvb2wgUHJpbnQoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwgaW86Olplcm9Db3B5T3V0cHV0
U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICAgIC8vIExpa2UgVGV4dEZvcm1hdDo6UHJpbnRVbmtu
b3duRmllbGRzCi0gICAgYm9vbCBQcmludFVua25vd25GaWVsZHMoY29uc3QgVW5rbm93bkZpZWxk
U2V0JiB1bmtub3duX2ZpZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6WmVy
b0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gICAgLy8gTGlrZSBUZXh0Rm9ybWF0
OjpQcmludFRvU3RyaW5nCi0gICAgYm9vbCBQcmludFRvU3RyaW5nKGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UsIHN0cmluZyogb3V0cHV0KSBjb25zdDsKLSAgICAvLyBMaWtlIFRleHRGb3JtYXQ6OlBy
aW50VW5rbm93bkZpZWxkc1RvU3RyaW5nCi0gICAgYm9vbCBQcmludFVua25vd25GaWVsZHNUb1N0
cmluZyhjb25zdCBVbmtub3duRmllbGRTZXQmIHVua25vd25fZmllbGRzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBvdXRwdXQpIGNvbnN0OwotICAgIC8vIExp
a2UgVGV4dEZvcm1hdDo6UHJpbnRGaWVsZFZhbHVlVG9TdHJpbmcKLSAgICB2b2lkIFByaW50Rmll
bGRWYWx1ZVRvU3RyaW5nKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyaW5nKiBvdXRwdXQpIGNvbnN0OwotCi0gICAgLy8gQWRqdXN0IHRoZSBp
bml0aWFsIGluZGVudCBsZXZlbCBvZiBhbGwgb3V0cHV0LiAgRWFjaCBpbmRlbnQgbGV2ZWwgaXMK
LSAgICAvLyBlcXVhbCB0byB0d28gc3BhY2VzLgotICAgIHZvaWQgU2V0SW5pdGlhbEluZGVudExl
dmVsKGludCBpbmRlbnRfbGV2ZWwpIHsKLSAgICAgIGluaXRpYWxfaW5kZW50X2xldmVsXyA9IGlu
ZGVudF9sZXZlbDsKLSAgICB9Ci0KLSAgICAvLyBJZiBwcmludGluZyBpbiBzaW5nbGUgbGluZSBt
b2RlLCB0aGVuIHRoZSBlbnRpcmUgbWVzc2FnZSB3aWxsIGJlIG91dHB1dAotICAgIC8vIG9uIGEg
c2luZ2xlIGxpbmUgd2l0aCBubyBsaW5lIGJyZWFrcy4KLSAgICB2b2lkIFNldFNpbmdsZUxpbmVN
b2RlKGJvb2wgc2luZ2xlX2xpbmVfbW9kZSkgewotICAgICAgc2luZ2xlX2xpbmVfbW9kZV8gPSBz
aW5nbGVfbGluZV9tb2RlOwotICAgIH0KLQotICAgIGJvb2wgSXNJblNpbmdsZUxpbmVNb2RlKCkg
ewotICAgICAgcmV0dXJuIHNpbmdsZV9saW5lX21vZGVfOwotICAgIH0KLQotICAgIC8vIElmIHVz
ZV9maWVsZF9udW1iZXIgaXMgdHJ1ZSwgdXNlcyBmaWVsZCBudW1iZXIgaW5zdGVhZCBvZiBmaWVs
ZCBuYW1lLgotICAgIHZvaWQgU2V0VXNlRmllbGROdW1iZXIoYm9vbCB1c2VfZmllbGRfbnVtYmVy
KSB7Ci0gICAgICB1c2VfZmllbGRfbnVtYmVyXyA9IHVzZV9maWVsZF9udW1iZXI7Ci0gICAgfQot
Ci0gICAgLy8gU2V0IHRydWUgdG8gcHJpbnQgcmVwZWF0ZWQgcHJpbWl0aXZlcyBpbiBhIGZvcm1h
dCBsaWtlOgotICAgIC8vICAgZmllbGRfbmFtZTogWzEsIDIsIDMsIDRdCi0gICAgLy8gaW5zdGVh
ZCBvZiBwcmludGluZyBlYWNoIHZhbHVlIG9uIGl0cyBvd24gbGluZS4gIFNob3J0IGZvcm1hdCBh
cHBsaWVzCi0gICAgLy8gb25seSB0byBwcmltaXRpdmUgdmFsdWVzIC0tIGkuZS4gZXZlcnl0aGlu
ZyBleGNlcHQgc3RyaW5ncyBhbmQKLSAgICAvLyBzdWItbWVzc2FnZXMvZ3JvdXBzLgotICAgIHZv
aWQgU2V0VXNlU2hvcnRSZXBlYXRlZFByaW1pdGl2ZXMoYm9vbCB1c2Vfc2hvcnRfcmVwZWF0ZWRf
cHJpbWl0aXZlcykgewotICAgICAgdXNlX3Nob3J0X3JlcGVhdGVkX3ByaW1pdGl2ZXNfID0gdXNl
X3Nob3J0X3JlcGVhdGVkX3ByaW1pdGl2ZXM7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRydWUgdG8g
b3V0cHV0IFVURi04IGluc3RlYWQgb2YgQVNDSUkuICBUaGUgb25seSBkaWZmZXJlbmNlCi0gICAg
Ly8gaXMgdGhhdCBieXRlcyA+PSAweDgwIGluIHN0cmluZyBmaWVsZHMgd2lsbCBub3QgYmUgZXNj
YXBlZCwKLSAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIGFzc3VtZWQgdG8gYmUgcGFydCBvZiBVVEYt
OCBtdWx0aS1ieXRlCi0gICAgLy8gc2VxdWVuY2VzLiBUaGlzIHdpbGwgY2hhbmdlIHRoZSBkZWZh
dWx0IEZpZWxkVmFsdWVQcmludGVyLgotICAgIHZvaWQgU2V0VXNlVXRmOFN0cmluZ0VzY2FwaW5n
KGJvb2wgYXNfdXRmOCk7Ci0KLSAgICAvLyBTZXQgdGhlIGRlZmF1bHQgRmllbGRWYWx1ZVByaW50
ZXIgdGhhdCBpcyB1c2VkIGZvciBhbGwgZmllbGRzIHRoYXQKLSAgICAvLyBkb24ndCBoYXZlIGEg
ZmllbGQtc3BlY2lmaWMgcHJpbnRlciByZWdpc3RlcmVkLgotICAgIC8vIFRha2VzIG93bmVyc2hp
cCBvZiB0aGUgcHJpbnRlci4KLSAgICB2b2lkIFNldERlZmF1bHRGaWVsZFZhbHVlUHJpbnRlcihj
b25zdCBGaWVsZFZhbHVlUHJpbnRlciogcHJpbnRlcik7Ci0KLSAgICAvLyBTZXRzIHdoZXRoZXIg
d2Ugd2FudCB0byBoaWRlIHVua25vd24gZmllbGRzIG9yIG5vdC4KLSAgICAvLyBVc3VhbGx5IHVu
a25vd24gZmllbGRzIGFyZSBwcmludGVkIGluIGEgZ2VuZXJpYyB3YXkgdGhhdCBpbmNsdWRlcyB0
aGUKLSAgICAvLyB0YWcgbnVtYmVyIG9mIHRoZSBmaWVsZCBpbnN0ZWFkIG9mIGZpZWxkIG5hbWUu
IEhvd2V2ZXIsIHNvbWV0aW1lcyBpdAotICAgIC8vIGlzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIHBy
aW50IHRoZSBtZXNzYWdlIHdpdGhvdXQgdW5rbm93biBmaWVsZHMgKGUuZy4KLSAgICAvLyBmb3Ig
dGhlIHB5dGhvbiBwcm90b2J1ZiB2ZXJzaW9uIHRvIG1haW50YWluIGNvbnNpc3RlbmN5IGJldHdl
ZW4gaXRzIHB1cmUKLSAgICAvLyBweXRob24gYW5kIGMrKyBpbXBsZW1lbnRhdGlvbnMpLgotICAg
IHZvaWQgU2V0SGlkZVVua25vd25GaWVsZHMoYm9vbCBoaWRlKSB7Ci0gICAgICBoaWRlX3Vua25v
d25fZmllbGRzXyA9IGhpZGU7Ci0gICAgfQotCi0gICAgLy8gSWYgcHJpbnRfbWVzc2FnZV9maWVs
ZHNfaW5faW5kZXhfb3JkZXIgaXMgdHJ1ZSwgcHJpbnQgZmllbGRzIG9mIGEgcHJvdG8KLSAgICAv
LyBtZXNzYWdlIHVzaW5nIHRoZSBvcmRlciBkZWZpbmVkIGluIHNvdXJjZSBjb2RlIGluc3RlYWQg
b2YgdGhlIGZpZWxkCi0gICAgLy8gbnVtYmVyLiBCeSBkZWZhdWx0LCB1c2UgdGhlIGZpZWxkIG51
bWJlciBvcmRlci4KLSAgICB2b2lkIFNldFByaW50TWVzc2FnZUZpZWxkc0luSW5kZXhPcmRlcigK
LSAgICAgICAgYm9vbCBwcmludF9tZXNzYWdlX2ZpZWxkc19pbl9pbmRleF9vcmRlcikgewotICAg
ICAgcHJpbnRfbWVzc2FnZV9maWVsZHNfaW5faW5kZXhfb3JkZXJfID0KLSAgICAgICAgICBwcmlu
dF9tZXNzYWdlX2ZpZWxkc19pbl9pbmRleF9vcmRlcjsKLSAgICB9Ci0KLSAgICAvLyBJZiBleHBh
bmQ9PXRydWUsIGV4cGFuZCBnb29nbGUucHJvdG9idWYuQW55IHBheWxvYWRzLiBUaGUgb3V0cHV0
Ci0gICAgLy8gd2lsbCBiZSBvZiBmb3JtCi0gICAgLy8gICAgW3R5cGVfdXJsXSB7IDx2YWx1ZV9w
cmludGVkX2luX3RleHQ+IH0KLSAgICAvLwotICAgIC8vIElmIGV4cGFuZD09ZmFsc2UsIHByaW50
IEFueSB1c2luZyB0aGUgZGVmYXVsdCBwcmludGVyLiBUaGUgb3V0cHV0IHdpbGwKLSAgICAvLyBs
b29rIGxpa2UKLSAgICAvLyAgICB0eXBlX3VybDogIjx0eXBlX3VybD4iICB2YWx1ZTogInNlcmlh
bGl6ZWRfY29udGVudCIKLSAgICB2b2lkIFNldEV4cGFuZEFueShib29sIGV4cGFuZCkgewotICAg
ICAgZXhwYW5kX2FueV8gPSBleHBhbmQ7Ci0gICAgfQotCi0gICAgLy8gSWYgbm9uLXplcm8sIHdl
IHRydW5jYXRlIGFsbCBzdHJpbmcgZmllbGRzIHRoYXQgYXJlICBsb25nZXIgdGhhbiB0aGlzCi0g
ICAgLy8gdGhyZXNob2xkLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgcHJvdG8gbWVzc2FnZSBo
YXMgdmVyeSBsb25nIHN0cmluZ3MsCi0gICAgLy8gZS5nLiwgZHVtcCBvZiBlbmNvZGVkIGltYWdl
IGZpbGUuCi0gICAgLy8KLSAgICAvLyBOT1RFKGhmZ29uZyk6ICBTZXR0aW5nIGEgbm9uLXplcm8g
dmFsdWUgYnJlYWtzIHJvdW5kLXRyaXAgc2FmZQotICAgIC8vIHByb3BlcnR5IG9mIFRleHRGb3Jt
YXQ6OlByaW50ZXIuICBUaGF0IGlzLCBmcm9tIHRoZSBwcmludGVkIG1lc3NhZ2UsIHdlCi0gICAg
Ly8gY2Fubm90IGZ1bGx5IHJlY292ZXIgdGhlIG9yaWdpbmFsIHN0cmluZyBmaWVsZCBhbnkgbW9y
ZS4KLSAgICB2b2lkIFNldFRydW5jYXRlU3RyaW5nRmllbGRMb25nZXJUaGFuKAotICAgICAgICBj
b25zdCBpbnQ2NCB0cnVuY2F0ZV9zdHJpbmdfZmllbGRfbG9uZ2VyX3RoYW4pIHsKLSAgICAgIHRy
dW5jYXRlX3N0cmluZ19maWVsZF9sb25nZXJfdGhhbl8gPSB0cnVuY2F0ZV9zdHJpbmdfZmllbGRf
bG9uZ2VyX3RoYW47Ci0gICAgfQotCi0gICAgLy8gUmVnaXN0ZXIgYSBjdXN0b20gZmllbGQtc3Bl
Y2lmaWMgRmllbGRWYWx1ZVByaW50ZXIgZm9yIGZpZWxkcwotICAgIC8vIHdpdGggYSBwYXJ0aWN1
bGFyIEZpZWxkRGVzY3JpcHRvci4KLSAgICAvLyBSZXR1cm5zICJ0cnVlIiBpZiB0aGUgcmVnaXN0
cmF0aW9uIHN1Y2NlZWRlZCwgb3IgImZhbHNlIiwgaWYgdGhlcmUgaXMKLSAgICAvLyBhbHJlYWR5
IGEgcHJpbnRlciBmb3IgdGhhdCBGaWVsZERlc2NyaXB0b3IuCi0gICAgLy8gVGFrZXMgb3duZXJz
aGlwIG9mIHRoZSBwcmludGVyIG9uIHN1Y2Nlc3NmdWwgcmVnaXN0cmF0aW9uLgotICAgIGJvb2wg
UmVnaXN0ZXJGaWVsZFZhbHVlUHJpbnRlcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZFZhbHVlUHJpbnRl
ciogcHJpbnRlcik7Ci0KLSAgIHByaXZhdGU6Ci0gICAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBv
ZiBhbiBpbnRlcm5hbCBjbGFzcyB1c2VkIHRvIHByaW50IHRoZSB0ZXh0Ci0gICAgLy8gb3V0cHV0
IHRvIHRoZSBPdXRwdXRTdHJlYW0gKHNlZSB0ZXh0X2Zvcm1hdC5jYyBmb3IgaW1wbGVtZW50YXRp
b24pLgotICAgIGNsYXNzIFRleHRHZW5lcmF0b3I7Ci0KLSAgICAvLyBJbnRlcm5hbCBQcmludCBt
ZXRob2QsIHVzZWQgZm9yIHdyaXRpbmcgdG8gdGhlIE91dHB1dFN0cmVhbSB2aWEKLSAgICAvLyB0
aGUgVGV4dEdlbmVyYXRvciBjbGFzcy4KLSAgICB2b2lkIFByaW50KGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UsCi0gICAgICAgICAgICAgICBUZXh0R2VuZXJhdG9yJiBnZW5lcmF0b3IpIGNvbnN0Owot
Ci0gICAgLy8gUHJpbnQgYSBzaW5nbGUgZmllbGQuCi0gICAgdm9pZCBQcmludEZpZWxkKGNvbnN0
IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZmxlY3Rpb24q
IHJlZmxlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQsCi0gICAgICAgICAgICAgICAgICAgIFRleHRHZW5lcmF0b3ImIGdlbmVyYXRvcikgY29u
c3Q7Ci0KLSAgICAvLyBQcmludCBhIHJlcGVhdGVkIHByaW1pdGl2ZSBmaWVsZCBpbiBzaG9ydCBm
b3JtLgotICAgIHZvaWQgUHJpbnRTaG9ydFJlcGVhdGVkRmllbGQoY29uc3QgTWVzc2FnZSYgbWVz
c2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZmxlY3Rpb24q
IHJlZmxlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4
dEdlbmVyYXRvciYgZ2VuZXJhdG9yKSBjb25zdDsKLQotICAgIC8vIFByaW50IHRoZSBuYW1lIG9m
IGEgZmllbGQgLS0gaS5lLiBldmVyeXRoaW5nIHRoYXQgY29tZXMgYmVmb3JlIHRoZQotICAgIC8v
ICc6JyBmb3IgYSBzaW5nbGUgbmFtZS92YWx1ZSBwYWlyLgotICAgIHZvaWQgUHJpbnRGaWVsZE5h
bWUoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEdlbmVy
YXRvciYgZ2VuZXJhdG9yKSBjb25zdDsKLQotICAgIC8vIE91dHB1dHMgYSB0ZXh0dWFsIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgc3VwcGxpZWQgb24KLSAgICAvLyB0
aGUgbWVzc2FnZSBzdXBwbGllZCBvciB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc2V0LgotICAg
IHZvaWQgUHJpbnRGaWVsZFZhbHVlKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0R2Vu
ZXJhdG9yJiBnZW5lcmF0b3IpIGNvbnN0OwotCi0gICAgLy8gUHJpbnQgdGhlIGZpZWxkcyBpbiBh
biBVbmtub3duRmllbGRTZXQuICBUaGV5IGFyZSBwcmludGVkIGJ5IHRhZyBudW1iZXIKLSAgICAv
LyBvbmx5LiAgRW1iZWRkZWQgbWVzc2FnZXMgYXJlIGhldXJpc3RpY2FsbHkgaWRlbnRpZmllZCBi
eSBhdHRlbXB0aW5nIHRvCi0gICAgLy8gcGFyc2UgdGhlbS4KLSAgICB2b2lkIFByaW50VW5rbm93
bkZpZWxkcyhjb25zdCBVbmtub3duRmllbGRTZXQmIHVua25vd25fZmllbGRzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRleHRHZW5lcmF0b3ImIGdlbmVyYXRvcikgY29uc3Q7Ci0KLSAg
ICBib29sIFByaW50QW55KGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsIFRleHRHZW5lcmF0b3ImIGdl
bmVyYXRvcikgY29uc3Q7Ci0KLSAgICBpbnQgaW5pdGlhbF9pbmRlbnRfbGV2ZWxfOwotCi0gICAg
Ym9vbCBzaW5nbGVfbGluZV9tb2RlXzsKLQotICAgIGJvb2wgdXNlX2ZpZWxkX251bWJlcl87Ci0K
LSAgICBib29sIHVzZV9zaG9ydF9yZXBlYXRlZF9wcmltaXRpdmVzXzsKLQotICAgIGJvb2wgaGlk
ZV91bmtub3duX2ZpZWxkc187Ci0KLSAgICBib29sIHByaW50X21lc3NhZ2VfZmllbGRzX2luX2lu
ZGV4X29yZGVyXzsKLQotICAgIGJvb2wgZXhwYW5kX2FueV87Ci0KLSAgICBpbnQ2NCB0cnVuY2F0
ZV9zdHJpbmdfZmllbGRfbG9uZ2VyX3RoYW5fOwotCi0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2Nv
cGVkX3B0cjxjb25zdCBGaWVsZFZhbHVlUHJpbnRlcj4gZGVmYXVsdF9maWVsZF92YWx1ZV9wcmlu
dGVyXzsKLSAgICB0eXBlZGVmIG1hcDxjb25zdCBGaWVsZERlc2NyaXB0b3IqLAotICAgICAgICAg
ICAgICAgIGNvbnN0IEZpZWxkVmFsdWVQcmludGVyKj4gQ3VzdG9tUHJpbnRlck1hcDsKLSAgICBD
dXN0b21QcmludGVyTWFwIGN1c3RvbV9wcmludGVyc187Ci0gIH07Ci0KLSAgLy8gUGFyc2VzIGEg
dGV4dC1mb3JtYXQgcHJvdG9jb2wgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBpbnB1dCBzdHJlYW0g
dG8KLSAgLy8gdGhlIGdpdmVuIG1lc3NhZ2Ugb2JqZWN0LiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0
aGUgaHVtYW4tcmVhZGFibGUgZm9ybWF0Ci0gIC8vIHdyaXR0ZW4gYnkgUHJpbnQoKS4gUmV0dXJu
cyB0cnVlIG9uIHN1Y2Nlc3MuIFRoZSBtZXNzYWdlIGlzIGNsZWFyZWQgZmlyc3QsCi0gIC8vIGV2
ZW4gaWYgdGhlIGZ1bmN0aW9uIGZhaWxzIC0tIFNlZSBNZXJnZSgpIHRvIGF2b2lkIHRoaXMgYmVo
YXZpb3IuCi0gIC8vCi0gIC8vIEV4YW1wbGUgaW5wdXQ6ICJ1c2VyIHtcbiBpZDogMTIzIGV4dHJh
IHsgZ2VuZGVyOiBNQUxFIGxhbmd1YWdlOiAnZW4nIH1cbn0iCi0gIC8vCi0gIC8vIE9uZSB1c2Ug
Zm9yIHRoaXMgZnVuY3Rpb24gaXMgcGFyc2luZyBoYW5kd3JpdHRlbiBzdHJpbmdzIGluIHRlc3Qg
Y29kZS4KLSAgLy8gQW5vdGhlciB1c2UgaXMgdG8gcGFyc2UgdGhlIG91dHB1dCBmcm9tIGdvb2ds
ZTo6cHJvdG9idWY6Ok1lc3NhZ2U6OkRlYnVnU3RyaW5nKCkKLSAgLy8gKG9yIFNob3J0RGVidWdT
dHJpbmcoKSksIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIG91dHB1dCB1c2luZwotICAvLyBnb29n
bGU6OnByb3RvYnVmOjpUZXh0Rm9ybWF0OjpQcmludCgpLgotICAvLwotICAvLyBJZiB5b3Ugd291
bGQgbGlrZSB0byByZWFkIGEgcHJvdG9jb2wgYnVmZmVyIHNlcmlhbGl6ZWQgaW4gdGhlCi0gIC8v
IChub24taHVtYW4tcmVhZGFibGUpIGJpbmFyeSB3aXJlIGZvcm1hdCwgc2VlCi0gIC8vIGdvb2ds
ZTo6cHJvdG9idWY6Ok1lc3NhZ2VMaXRlOjpQYXJzZUZyb21TdHJpbmcoKS4KLSAgc3RhdGljIGJv
b2wgUGFyc2UoaW86Olplcm9Db3B5SW5wdXRTdHJlYW0qIGlucHV0LCBNZXNzYWdlKiBvdXRwdXQp
OwotICAvLyBMaWtlIFBhcnNlKCksIGJ1dCByZWFkcyBkaXJlY3RseSBmcm9tIGEgc3RyaW5nLgot
ICBzdGF0aWMgYm9vbCBQYXJzZUZyb21TdHJpbmcoY29uc3Qgc3RyaW5nJiBpbnB1dCwgTWVzc2Fn
ZSogb3V0cHV0KTsKLQotICAvLyBMaWtlIFBhcnNlKCksIGJ1dCB0aGUgZGF0YSBpcyBtZXJnZWQg
aW50byB0aGUgZ2l2ZW4gbWVzc2FnZSwgYXMgaWYKLSAgLy8gdXNpbmcgTWVzc2FnZTo6TWVyZ2VG
cm9tKCkuCi0gIHN0YXRpYyBib29sIE1lcmdlKGlvOjpaZXJvQ29weUlucHV0U3RyZWFtKiBpbnB1
dCwgTWVzc2FnZSogb3V0cHV0KTsKLSAgLy8gTGlrZSBNZXJnZSgpLCBidXQgcmVhZHMgZGlyZWN0
bHkgZnJvbSBhIHN0cmluZy4KLSAgc3RhdGljIGJvb2wgTWVyZ2VGcm9tU3RyaW5nKGNvbnN0IHN0
cmluZyYgaW5wdXQsIE1lc3NhZ2UqIG91dHB1dCk7Ci0KLSAgLy8gUGFyc2UgdGhlIGdpdmVuIHRl
eHQgYXMgYSBzaW5nbGUgZmllbGQgdmFsdWUgYW5kIHN0b3JlIGl0IGludG8gdGhlCi0gIC8vIGdp
dmVuIGZpZWxkIG9mIHRoZSBnaXZlbiBtZXNzYWdlLiBJZiB0aGUgZmllbGQgaXMgYSByZXBlYXRl
ZCBmaWVsZCwKLSAgLy8gdGhlIG5ldyB2YWx1ZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQKLSAg
c3RhdGljIGJvb2wgUGFyc2VGaWVsZFZhbHVlRnJvbVN0cmluZyhjb25zdCBzdHJpbmcmIGlucHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWVzc2FnZSogbWVzc2FnZSk7Ci0KLSAgLy8gSW50ZXJmYWNlIHRoYXQgVGV4dEZvcm1hdDo6UGFy
c2VyIGNhbiB1c2UgdG8gZmluZCBleHRlbnNpb25zLgotICAvLyBUaGlzIGNsYXNzIG1heSBiZSBl
eHRlbmRlZCBpbiB0aGUgZnV0dXJlIHRvIGZpbmQgbW9yZSBpbmZvcm1hdGlvbgotICAvLyBsaWtl
IGZpZWxkcywgZXRjLgotICBjbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgRmluZGVyIHsKLSAgIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5GaW5kZXIoKTsKLQotICAgIC8vIFRyeSB0byBmaW5kIGFuIGV4
dGVuc2lvbiBvZiAqbWVzc2FnZSBieSBmdWxseS1xdWFsaWZpZWQgZmllbGQKLSAgICAvLyBuYW1l
LiAgUmV0dXJucyBOVUxMIGlmIG5vIGV4dGVuc2lvbiBpcyBrbm93biBmb3IgdGhpcyBuYW1lIG9y
IG51bWJlci4KLSAgICB2aXJ0dWFsIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogRmluZEV4dGVuc2lv
bigKLSAgICAgICAgTWVzc2FnZSogbWVzc2FnZSwKLSAgICAgICAgY29uc3Qgc3RyaW5nJiBuYW1l
KSBjb25zdCA9IDA7Ci0gIH07Ci0KLSAgLy8gQSBsb2NhdGlvbiBpbiB0aGUgcGFyc2VkIHRleHQu
Ci0gIHN0cnVjdCBQYXJzZUxvY2F0aW9uIHsKLSAgICBpbnQgbGluZTsKLSAgICBpbnQgY29sdW1u
OwotCi0gICAgUGFyc2VMb2NhdGlvbigpIDogbGluZSgtMSksIGNvbHVtbigtMSkge30KLSAgICBQ
YXJzZUxvY2F0aW9uKGludCBsaW5lX3BhcmFtLCBpbnQgY29sdW1uX3BhcmFtKQotICAgICAgICA6
IGxpbmUobGluZV9wYXJhbSksIGNvbHVtbihjb2x1bW5fcGFyYW0pIHt9Ci0gIH07Ci0KLSAgLy8g
RGF0YSBzdHJ1Y3R1cmUgd2hpY2ggaXMgcG9wdWxhdGVkIHdpdGggdGhlIGxvY2F0aW9ucyBvZiBl
YWNoIGZpZWxkCi0gIC8vIHZhbHVlIHBhcnNlZCBmcm9tIHRoZSB0ZXh0LgotICBjbGFzcyBMSUJQ
Uk9UT0JVRl9FWFBPUlQgUGFyc2VJbmZvVHJlZSB7Ci0gICBwdWJsaWM6Ci0gICAgUGFyc2VJbmZv
VHJlZSgpOwotICAgIH5QYXJzZUluZm9UcmVlKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBwYXJz
ZSBsb2NhdGlvbiBmb3IgaW5kZXgtdGggdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBwYXJzZWQK
LSAgICAvLyB0ZXh0LiBJZiBub25lIGV4aXN0cywgcmV0dXJucyBhIGxvY2F0aW9uIHdpdGggbGlu
ZSA9IC0xLiBJbmRleCBzaG91bGQgYmUKLSAgICAvLyAtMSBmb3Igbm90LXJlcGVhdGVkIGZpZWxk
cy4KLSAgICBQYXJzZUxvY2F0aW9uIEdldExvY2F0aW9uKGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQsIGludCBpbmRleCkgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBwYXJzZSBpbmZv
IHRyZWUgZm9yIHRoZSBnaXZlbiBmaWVsZCwgd2hpY2ggbXVzdCBiZSBhIG1lc3NhZ2UKLSAgICAv
LyB0eXBlLiBUaGUgbmVzdGVkIGluZm9ybWF0aW9uIHRyZWUgaXMgb3duZWQgYnkgdGhlIHJvb3Qg
dHJlZSBhbmQgd2lsbCBiZQotICAgIC8vIGRlbGV0ZWQgd2hlbiBpdCBpcyBkZWxldGVkLgotICAg
IFBhcnNlSW5mb1RyZWUqIEdldFRyZWVGb3JOZXN0ZWQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCkgY29u
c3Q7Ci0KLSAgIHByaXZhdGU6Ci0gICAgLy8gQWxsb3cgdGhlIHRleHQgZm9ybWF0IHBhcnNlciB0
byByZWNvcmQgaW5mb3JtYXRpb24gaW50byB0aGUgdHJlZS4KLSAgICBmcmllbmQgY2xhc3MgVGV4
dEZvcm1hdDsKLQotICAgIC8vIFJlY29yZHMgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIG9mIGEgc2lu
Z2xlIHZhbHVlIGZvciBhIGZpZWxkLgotICAgIHZvaWQgUmVjb3JkTG9jYXRpb24oY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwgUGFyc2VMb2NhdGlvbiBsb2NhdGlvbik7Ci0KLSAgICAvLyBD
cmVhdGUgYW5kIHJlY29yZHMgYSBuZXN0ZWQgdHJlZSBmb3IgYSBuZXN0ZWQgbWVzc2FnZSBmaWVs
ZC4KLSAgICBQYXJzZUluZm9UcmVlKiBDcmVhdGVOZXN0ZWQoY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCk7Ci0KLSAgICAvLyBEZWZpbmVzIHRoZSBtYXAgZnJvbSB0aGUgaW5kZXgtdGggZmll
bGQgZGVzY3JpcHRvciB0byBpdHMgcGFyc2UgbG9jYXRpb24uCi0gICAgdHlwZWRlZiBtYXA8Y29u
c3QgRmllbGREZXNjcmlwdG9yKiwgdmVjdG9yPFBhcnNlTG9jYXRpb24+ID4gTG9jYXRpb25NYXA7
Ci0KLSAgICAvLyBEZWZpbmVzIHRoZSBtYXAgZnJvbSB0aGUgaW5kZXgtdGggZmllbGQgZGVzY3Jp
cHRvciB0byB0aGUgbmVzdGVkIHBhcnNlCi0gICAgLy8gaW5mbyB0cmVlLgotICAgIHR5cGVkZWYg
bWFwPGNvbnN0IEZpZWxkRGVzY3JpcHRvciosIHZlY3RvcjxQYXJzZUluZm9UcmVlKj4gPiBOZXN0
ZWRNYXA7Ci0KLSAgICBMb2NhdGlvbk1hcCBsb2NhdGlvbnNfOwotICAgIE5lc3RlZE1hcCBuZXN0
ZWRfOwotCi0gICAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFBhcnNlSW5mb1Ry
ZWUpOwotICB9OwotCi0gIC8vIEZvciBtb3JlIGNvbnRyb2wgb3ZlciBwYXJzaW5nLCB1c2UgdGhp
cyBjbGFzcy4KLSAgY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFBhcnNlciB7Ci0gICBwdWJsaWM6
Ci0gICAgUGFyc2VyKCk7Ci0gICAgflBhcnNlcigpOwotCi0gICAgLy8gTGlrZSBUZXh0Rm9ybWF0
OjpQYXJzZSgpLgotICAgIGJvb2wgUGFyc2UoaW86Olplcm9Db3B5SW5wdXRTdHJlYW0qIGlucHV0
LCBNZXNzYWdlKiBvdXRwdXQpOwotICAgIC8vIExpa2UgVGV4dEZvcm1hdDo6UGFyc2VGcm9tU3Ry
aW5nKCkuCi0gICAgYm9vbCBQYXJzZUZyb21TdHJpbmcoY29uc3Qgc3RyaW5nJiBpbnB1dCwgTWVz
c2FnZSogb3V0cHV0KTsKLSAgICAvLyBMaWtlIFRleHRGb3JtYXQ6Ok1lcmdlKCkuCi0gICAgYm9v
bCBNZXJnZShpbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogaW5wdXQsIE1lc3NhZ2UqIG91dHB1dCk7
Ci0gICAgLy8gTGlrZSBUZXh0Rm9ybWF0OjpNZXJnZUZyb21TdHJpbmcoKS4KLSAgICBib29sIE1l
cmdlRnJvbVN0cmluZyhjb25zdCBzdHJpbmcmIGlucHV0LCBNZXNzYWdlKiBvdXRwdXQpOwotCi0g
ICAgLy8gU2V0IHdoZXJlIHRvIHJlcG9ydCBwYXJzZSBlcnJvcnMuICBJZiBOVUxMICh0aGUgZGVm
YXVsdCksIGVycm9ycyB3aWxsCi0gICAgLy8gYmUgcHJpbnRlZCB0byBzdGRlcnIuCi0gICAgdm9p
ZCBSZWNvcmRFcnJvcnNUbyhpbzo6RXJyb3JDb2xsZWN0b3IqIGVycm9yX2NvbGxlY3Rvcikgewot
ICAgICAgZXJyb3JfY29sbGVjdG9yXyA9IGVycm9yX2NvbGxlY3RvcjsKLSAgICB9Ci0KLSAgICAv
LyBTZXQgaG93IHBhcnNlciBmaW5kcyBleHRlbnNpb25zLiAgSWYgTlVMTCAodGhlIGRlZmF1bHQp
LCB0aGUKLSAgICAvLyBwYXJzZXIgd2lsbCB1c2UgdGhlIHN0YW5kYXJkIFJlZmxlY3Rpb24gb2Jq
ZWN0IGFzc29jaWF0ZWQgd2l0aAotICAgIC8vIHRoZSBtZXNzYWdlIGJlaW5nIHBhcnNlZC4KLSAg
ICB2b2lkIFNldEZpbmRlcihGaW5kZXIqIGZpbmRlcikgewotICAgICAgZmluZGVyXyA9IGZpbmRl
cjsKLSAgICB9Ci0KLSAgICAvLyBTZXRzIHdoZXJlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGFib3V0
IHRoZSBwYXJzZSB3aWxsIGJlIHdyaXR0ZW4uIElmIE5VTEwKLSAgICAvLyAodGhlIGRlZmF1bHQp
LCB0aGVuIG5vIGxvY2F0aW9uIHdpbGwgYmUgd3JpdHRlbi4KLSAgICB2b2lkIFdyaXRlTG9jYXRp
b25zVG8oUGFyc2VJbmZvVHJlZSogdHJlZSkgewotICAgICAgcGFyc2VfaW5mb190cmVlXyA9IHRy
ZWU7Ci0gICAgfQotCi0gICAgLy8gTm9ybWFsbHkgcGFyc2luZyBmYWlscyBpZiwgYWZ0ZXIgcGFy
c2luZywgb3V0cHV0LT5Jc0luaXRpYWxpemVkKCkKLSAgICAvLyByZXR1cm5zIGZhbHNlLiAgQ2Fs
bCBBbGxvd1BhcnRpYWxNZXNzYWdlKHRydWUpIHRvIHNraXAgdGhpcyBjaGVjay4KLSAgICB2b2lk
IEFsbG93UGFydGlhbE1lc3NhZ2UoYm9vbCBhbGxvdykgewotICAgICAgYWxsb3dfcGFydGlhbF8g
PSBhbGxvdzsKLSAgICB9Ci0KLSAgICAvLyBBbGxvdyBmaWVsZCBuYW1lcyB0byBiZSBtYXRjaGVk
IGNhc2UtaW5zZW5zaXRpdmVseS4KLSAgICAvLyBUaGlzIGlzIG5vdCBhZHZpc2FibGUgaWYgdGhl
cmUgYXJlIGZpZWxkcyB0aGF0IG9ubHkgZGlmZmVyIGluIGNhc2UsIG9yCi0gICAgLy8gaWYgeW91
IHdhbnQgdG8gZW5mb3JjZSB3cml0aW5nIGluIHRoZSBjYW5vbmljYWwgZm9ybS4KLSAgICAvLyBU
aGlzIGlzICdmYWxzZScgYnkgZGVmYXVsdC4KLSAgICB2b2lkIEFsbG93Q2FzZUluc2Vuc2l0aXZl
RmllbGQoYm9vbCBhbGxvdykgewotICAgICAgYWxsb3dfY2FzZV9pbnNlbnNpdGl2ZV9maWVsZF8g
PSBhbGxvdzsKLSAgICB9Ci0KLSAgICAvLyBMaWtlIFRleHRGb3JtYXQ6OlBhcnNlRmllbGRWYWx1
ZUZyb21TdHJpbmcKLSAgICBib29sIFBhcnNlRmllbGRWYWx1ZUZyb21TdHJpbmcoY29uc3Qgc3Ry
aW5nJiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWVzc2FnZSogb3V0cHV0KTsKLQotCi0gICAgdm9pZCBBbGxvd0ZpZWxkTnVtYmVyKGJvb2wgYWxs
b3cpIHsKLSAgICAgIGFsbG93X2ZpZWxkX251bWJlcl8gPSBhbGxvdzsKLSAgICB9Ci0KLSAgIHBy
aXZhdGU6Ci0gICAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBhbiBpbnRlcm5hbCBjbGFzcyB1
c2VkIHRvIHBhcnNlIHRleHQKLSAgICAvLyByZXByZXNlbnRhdGlvbnMgKHNlZSB0ZXh0X2Zvcm1h
dC5jYyBmb3IgaW1wbGVtZW50YXRpb24pLgotICAgIGNsYXNzIFBhcnNlckltcGw7Ci0KLSAgICAv
LyBMaWtlIFRleHRGb3JtYXQ6Ok1lcmdlKCkuICBUaGUgcHJvdmlkZWQgaW1wbGVtZW50YXRpb24g
aXMgdXNlZAotICAgIC8vIHRvIGRvIHRoZSBwYXJzaW5nLgotICAgIGJvb2wgTWVyZ2VVc2luZ0lt
cGwoaW86Olplcm9Db3B5SW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgTWVzc2FnZSogb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VySW1wbCog
cGFyc2VyX2ltcGwpOwotCi0gICAgaW86OkVycm9yQ29sbGVjdG9yKiBlcnJvcl9jb2xsZWN0b3Jf
OwotICAgIEZpbmRlciogZmluZGVyXzsKLSAgICBQYXJzZUluZm9UcmVlKiBwYXJzZV9pbmZvX3Ry
ZWVfOwotICAgIGJvb2wgYWxsb3dfcGFydGlhbF87Ci0gICAgYm9vbCBhbGxvd19jYXNlX2luc2Vu
c2l0aXZlX2ZpZWxkXzsKLSAgICBib29sIGFsbG93X3Vua25vd25fZmllbGRfOwotICAgIGJvb2wg
YWxsb3dfdW5rbm93bl9lbnVtXzsKLSAgICBib29sIGFsbG93X2ZpZWxkX251bWJlcl87Ci0gICAg
Ym9vbCBhbGxvd19yZWxheGVkX3doaXRlc3BhY2VfOwotICAgIGJvb2wgYWxsb3dfc2luZ3VsYXJf
b3ZlcndyaXRlc187Ci0gIH07Ci0KLQotIHByaXZhdGU6Ci0gIC8vIEhhY2s6IFBhcnNlSW5mb1Ry
ZWUgZGVjbGFyZXMgVGV4dEZvcm1hdCBhcyBhIGZyaWVuZCB3aGljaCBzaG91bGQgZXh0ZW5kCi0g
IC8vIHRoZSBmcmllbmRzaGlwIHRvIFRleHRGb3JtYXQ6OlBhcnNlcjo6UGFyc2VySW1wbCwgYnV0
IHVuZm9ydHVuYXRlbHkgc29tZQotICAvLyBvbGQgY29tcGlsZXJzIChlLmcuIEdDQyAzLjQuNikg
ZG9uJ3QgaW1wbGVtZW50IHRoaXMgY29ycmVjdGx5LiBXZSBwcm92aWRlCi0gIC8vIGhlbHBlcnMg
Zm9yIFBhcnNlckltcGwgdG8gY2FsbCBtZXRob2RzIG9mIFBhcnNlSW5mb1RyZWUuCi0gIHN0YXRp
YyBpbmxpbmUgdm9pZCBSZWNvcmRMb2NhdGlvbihQYXJzZUluZm9UcmVlKiBpbmZvX3RyZWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VMb2NhdGlv
biBsb2NhdGlvbik7Ci0gIHN0YXRpYyBpbmxpbmUgUGFyc2VJbmZvVHJlZSogQ3JlYXRlTmVzdGVk
KFBhcnNlSW5mb1RyZWUqIGluZm9fdHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLSAgR09PR0xF
X0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFRleHRGb3JtYXQpOwotfTsKLQotaW5saW5lIHZv
aWQgVGV4dEZvcm1hdDo6UmVjb3JkTG9jYXRpb24oUGFyc2VJbmZvVHJlZSogaW5mb190cmVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNl
TG9jYXRpb24gbG9jYXRpb24pIHsKLSAgaW5mb190cmVlLT5SZWNvcmRMb2NhdGlvbihmaWVsZCwg
bG9jYXRpb24pOwotfQotCi0KLWlubGluZSBUZXh0Rm9ybWF0OjpQYXJzZUluZm9UcmVlKiBUZXh0
Rm9ybWF0OjpDcmVhdGVOZXN0ZWQoCi0gICAgUGFyc2VJbmZvVHJlZSogaW5mb190cmVlLCBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHJldHVybiBpbmZvX3RyZWUtPkNyZWF0ZU5l
c3RlZChmaWVsZCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1l
c3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9URVhUX0ZPUk1BVF9IX18K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdF91bml0dGVzdC5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdF91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNThhYTNmOGQ2MTcyZmUzMjYwMDhjN2I3NDVjOWZhNDk3Y2ZkMjNl
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdGV4dF9mb3JtYXRfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDg0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRo
b3I6IGpzY2hvcnJAZ29vZ2xlLmNvbSAoSm9zZXBoIFNjaG9ycikKLS8vICBCYXNlZCBvbiBvcmln
aW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVm
ZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3RleHRfZm9y
bWF0Lmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8bGltaXRzPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZmlsZS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2ZpbGUuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvdGVzdF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0
ZXN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X21zZXQucGIuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbXNldF93aXJlX2Zvcm1hdC5wYi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby90b2tlbml6ZXIuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvc3Vic3RpdHV0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dv
b2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmg+Ci0KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1l
c3BhY2UgcHJvdG9idWYgewotCi0vLyBDYW4ndCB1c2UgYW4gYW5vbnltb3VzIG5hbWVzcGFjZSBo
ZXJlIGR1ZSB0byBicm9rZW5uZXNzIG9mIFRydTY0IGNvbXBpbGVyLgotbmFtZXNwYWNlIHRleHRf
Zm9ybWF0X3VuaXR0ZXN0IHsKLQotLy8gQSBiYXNpYyBzdHJpbmcgd2l0aCBkaWZmZXJlbnQgZXNj
YXBhYmxlIGNoYXJhY3RlcnMgZm9yIHRlc3RpbmcuCi1jb25zdCBzdHJpbmcga0VzY2FwZVRlc3RT
dHJpbmcgPQotICAiXCJBIHN0cmluZyB3aXRoICcgY2hhcmFjdGVycyBcbiBhbmQgXHIgbmV3bGlu
ZXMgYW5kIFx0IHRhYnMgYW5kIFwwMDEgIgotICAic2xhc2hlcyBcXCBhbmQgIG11bHRpcGxlICAg
c3BhY2VzIjsKLQotLy8gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWJvdmUgc3RyaW5nIHdpdGgg
YWxsIHRoZSBjaGFyYWN0ZXJzIGVzY2FwZWQuCi1jb25zdCBzdHJpbmcga0VzY2FwZVRlc3RTdHJp
bmdFc2NhcGVkID0KLSAgIlwiXFxcIkEgc3RyaW5nIHdpdGggXFwnIGNoYXJhY3RlcnMgXFxuIGFu
ZCBcXHIgbmV3bGluZXMgIgotICAiYW5kIFxcdCB0YWJzIGFuZCBcXDAwMSBzbGFzaGVzIFxcXFwg
YW5kICBtdWx0aXBsZSAgIHNwYWNlc1wiIjsKLQotY2xhc3MgVGV4dEZvcm1hdFRlc3QgOiBwdWJs
aWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBzdGF0aWMgdm9pZCBTZXRVcFRlc3RDYXNl
KCkgewotICAgIEdPT0dMRV9DSEVDS19PSyhGaWxlOjpHZXRDb250ZW50cygKLSAgICAgICAgVGVz
dFNvdXJjZURpcigpICsKLSAgICAgICAgICAgICIvZ29vZ2xlL3Byb3RvYnVmLyIKLSAgICAgICAg
ICAgICJ0ZXN0ZGF0YS90ZXh0X2Zvcm1hdF91bml0dGVzdF9kYXRhX29uZW9mX2ltcGxlbWVudGVk
LnR4dCIsCi0gICAgICAgICZzdGF0aWNfcHJvdG9fZGVidWdfc3RyaW5nXywgdHJ1ZSkpOwotICB9
Ci0KLSAgVGV4dEZvcm1hdFRlc3QoKSA6IHByb3RvX2RlYnVnX3N0cmluZ18oc3RhdGljX3Byb3Rv
X2RlYnVnX3N0cmluZ18pIHt9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIC8vIERlYnVnIHN0cmluZyByZWFk
IGZyb20gdGV4dF9mb3JtYXRfdW5pdHRlc3RfZGF0YS50eHQuCi0gIGNvbnN0IHN0cmluZyBwcm90
b19kZWJ1Z19zdHJpbmdfOwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIHByb3RvXzsKLQotIHBy
aXZhdGU6Ci0gIHN0YXRpYyBzdHJpbmcgc3RhdGljX3Byb3RvX2RlYnVnX3N0cmluZ187Ci19Owot
c3RyaW5nIFRleHRGb3JtYXRUZXN0OjpzdGF0aWNfcHJvdG9fZGVidWdfc3RyaW5nXzsKLQotY2xh
c3MgVGV4dEZvcm1hdEV4dGVuc2lvbnNUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1
YmxpYzoKLSAgc3RhdGljIHZvaWQgU2V0VXBUZXN0Q2FzZSgpIHsKLSAgICBHT09HTEVfQ0hFQ0tf
T0soRmlsZTo6R2V0Q29udGVudHMoVGVzdFNvdXJjZURpcigpICsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIi9nb29nbGUvcHJvdG9idWYvdGVzdGRhdGEvIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dF9mb3JtYXRfdW5pdHRlc3RfZXh0ZW5zaW9u
c19kYXRhLnR4dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXRpY19wcm90
b19kZWJ1Z19zdHJpbmdfLCB0cnVlKSk7Ci0gIH0KLQotICBUZXh0Rm9ybWF0RXh0ZW5zaW9uc1Rl
c3QoKQotICAgICAgOiBwcm90b19kZWJ1Z19zdHJpbmdfKHN0YXRpY19wcm90b19kZWJ1Z19zdHJp
bmdfKSB7fQotCi0gcHJvdGVjdGVkOgotICAvLyBEZWJ1ZyBzdHJpbmcgcmVhZCBmcm9tIHRleHRf
Zm9ybWF0X3VuaXR0ZXN0X2RhdGEudHh0LgotICBjb25zdCBzdHJpbmcgcHJvdG9fZGVidWdfc3Ry
aW5nXzsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIHByb3RvXzsKLQotIHByaXZhdGU6
Ci0gIHN0YXRpYyBzdHJpbmcgc3RhdGljX3Byb3RvX2RlYnVnX3N0cmluZ187Ci19Owotc3RyaW5n
IFRleHRGb3JtYXRFeHRlbnNpb25zVGVzdDo6c3RhdGljX3Byb3RvX2RlYnVnX3N0cmluZ187Ci0K
LQotVEVTVF9GKFRleHRGb3JtYXRUZXN0LCBCYXNpYykgewotICBUZXN0VXRpbDo6U2V0QWxsRmll
bGRzKCZwcm90b18pOwotICBFWFBFQ1RfRVEocHJvdG9fZGVidWdfc3RyaW5nXywgcHJvdG9fLkRl
YnVnU3RyaW5nKCkpOwotfQotCi1URVNUX0YoVGV4dEZvcm1hdEV4dGVuc2lvbnNUZXN0LCBFeHRl
bnNpb25zKSB7Ci0gIFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKCZwcm90b18pOwotICBFWFBF
Q1RfRVEocHJvdG9fZGVidWdfc3RyaW5nXywgcHJvdG9fLkRlYnVnU3RyaW5nKCkpOwotfQotCi1U
RVNUX0YoVGV4dEZvcm1hdFRlc3QsIFNob3J0RGVidWdTdHJpbmcpIHsKLSAgcHJvdG9fLnNldF9v
cHRpb25hbF9pbnQzMigxKTsKLSAgcHJvdG9fLnNldF9vcHRpb25hbF9zdHJpbmcoImhlbGxvIik7
Ci0gIHByb3RvXy5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCktPnNldF9iYigyKTsK
LSAgcHJvdG9fLm11dGFibGVfb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlKCk7Ci0KLSAgRVhQRUNU
X0VRKCJvcHRpb25hbF9pbnQzMjogMSBvcHRpb25hbF9zdHJpbmc6IFwiaGVsbG9cIiAiCi0gICAg
ICAgICAgICAib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgeyBiYjogMiB9ICIKLSAgICAgICAgICAg
ICJvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UgeyB9IiwKLSAgICAgICAgICAgIHByb3RvXy5TaG9y
dERlYnVnU3RyaW5nKCkpOwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFRlc3QsIFNob3J0UHJpbWl0
aXZlUmVwZWF0ZWRzKSB7Ci0gIHByb3RvXy5zZXRfb3B0aW9uYWxfaW50MzIoMTIzKTsKLSAgcHJv
dG9fLmFkZF9yZXBlYXRlZF9pbnQzMig0NTYpOwotICBwcm90b18uYWRkX3JlcGVhdGVkX2ludDMy
KDc4OSk7Ci0gIHByb3RvXy5hZGRfcmVwZWF0ZWRfc3RyaW5nKCJmb28iKTsKLSAgcHJvdG9fLmFk
ZF9yZXBlYXRlZF9zdHJpbmcoImJhciIpOwotICBwcm90b18uYWRkX3JlcGVhdGVkX25lc3RlZF9t
ZXNzYWdlKCktPnNldF9iYigyKTsKLSAgcHJvdG9fLmFkZF9yZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZSgpLT5zZXRfYmIoMyk7Ci0gIHByb3RvXy5hZGRfcmVwZWF0ZWRfbmVzdGVkX2VudW0odW5pdHRl
c3Q6OlRlc3RBbGxUeXBlczo6Rk9PKTsKLSAgcHJvdG9fLmFkZF9yZXBlYXRlZF9uZXN0ZWRfZW51
bSh1bml0dGVzdDo6VGVzdEFsbFR5cGVzOjpCQVIpOwotCi0gIFRleHRGb3JtYXQ6OlByaW50ZXIg
cHJpbnRlcjsKLSAgcHJpbnRlci5TZXRVc2VTaG9ydFJlcGVhdGVkUHJpbWl0aXZlcyh0cnVlKTsK
LSAgc3RyaW5nIHRleHQ7Ci0gIHByaW50ZXIuUHJpbnRUb1N0cmluZyhwcm90b18sICZ0ZXh0KTsK
LQotICBFWFBFQ1RfRVEoIm9wdGlvbmFsX2ludDMyOiAxMjNcbiIKLSAgICAgICAgICAgICJyZXBl
YXRlZF9pbnQzMjogWzQ1NiwgNzg5XVxuIgotICAgICAgICAgICAgInJlcGVhdGVkX3N0cmluZzog
XCJmb29cIlxuIgotICAgICAgICAgICAgInJlcGVhdGVkX3N0cmluZzogXCJiYXJcIlxuIgotICAg
ICAgICAgICAgInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIHtcbiAgYmI6IDJcbn1cbiIKLSAgICAg
ICAgICAgICJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSB7XG4gIGJiOiAzXG59XG4iCi0gICAgICAg
ICAgICAicmVwZWF0ZWRfbmVzdGVkX2VudW06IFtGT08sIEJBUl1cbiIsCi0gICAgICAgICAgICB0
ZXh0KTsKLQotICAvLyBUcnkgaW4gc2luZ2xlLWxpbmUgbW9kZS4KLSAgcHJpbnRlci5TZXRTaW5n
bGVMaW5lTW9kZSh0cnVlKTsKLSAgcHJpbnRlci5QcmludFRvU3RyaW5nKHByb3RvXywgJnRleHQp
OwotCi0gIEVYUEVDVF9FUSgib3B0aW9uYWxfaW50MzI6IDEyMyAiCi0gICAgICAgICAgICAicmVw
ZWF0ZWRfaW50MzI6IFs0NTYsIDc4OV0gIgotICAgICAgICAgICAgInJlcGVhdGVkX3N0cmluZzog
XCJmb29cIiAiCi0gICAgICAgICAgICAicmVwZWF0ZWRfc3RyaW5nOiBcImJhclwiICIKLSAgICAg
ICAgICAgICJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSB7IGJiOiAyIH0gIgotICAgICAgICAgICAg
InJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIHsgYmI6IDMgfSAiCi0gICAgICAgICAgICAicmVwZWF0
ZWRfbmVzdGVkX2VudW06IFtGT08sIEJBUl0gIiwKLSAgICAgICAgICAgIHRleHQpOwotfQotCi0K
LVRFU1RfRihUZXh0Rm9ybWF0VGVzdCwgU3RyaW5nRXNjYXBlKSB7Ci0gIC8vIFNldCB0aGUgc3Ry
aW5nIHZhbHVlIHRvIHRlc3QuCi0gIHByb3RvXy5zZXRfb3B0aW9uYWxfc3RyaW5nKGtFc2NhcGVU
ZXN0U3RyaW5nKTsKLQotICAvLyBHZXQgdGhlIERlYnVnU3RyaW5nIGZyb20gdGhlIHByb3RvLgot
ICBzdHJpbmcgZGVidWdfc3RyaW5nID0gcHJvdG9fLkRlYnVnU3RyaW5nKCk7Ci0gIHN0cmluZyB1
dGY4X2RlYnVnX3N0cmluZyA9IHByb3RvXy5VdGY4RGVidWdTdHJpbmcoKTsKLQotICAvLyBIYXJk
Y29kZSBhIGNvcnJlY3QgdmFsdWUgdG8gdGVzdCBhZ2FpbnN0LgotICBzdHJpbmcgY29ycmVjdF9z
dHJpbmcgPSAib3B0aW9uYWxfc3RyaW5nOiAiCi0gICAgICArIGtFc2NhcGVUZXN0U3RyaW5nRXNj
YXBlZAotICAgICAgICsgIlxuIjsKLQotICAvLyBDb21wYXJlLgotICBFWFBFQ1RfRVEoY29ycmVj
dF9zdHJpbmcsIGRlYnVnX3N0cmluZyk7Ci0gIC8vIFVURi04IHN0cmluZyBpcyB0aGUgc2FtZSBh
cyBub24tVVRGLTggYmVjYXVzZQotICAvLyB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbnRhaW5zIG5v
IFVURi04IHRleHQuCi0gIEVYUEVDVF9FUShjb3JyZWN0X3N0cmluZywgdXRmOF9kZWJ1Z19zdHJp
bmcpOwotCi0gIHN0cmluZyBleHBlY3RlZF9zaG9ydF9kZWJ1Z19zdHJpbmcgPSAib3B0aW9uYWxf
c3RyaW5nOiAiCi0gICAgICArIGtFc2NhcGVUZXN0U3RyaW5nRXNjYXBlZDsKLSAgRVhQRUNUX0VR
KGV4cGVjdGVkX3Nob3J0X2RlYnVnX3N0cmluZywgcHJvdG9fLlNob3J0RGVidWdTdHJpbmcoKSk7
Ci19Ci0KLVRFU1RfRihUZXh0Rm9ybWF0VGVzdCwgVXRmOERlYnVnU3RyaW5nKSB7Ci0gIC8vIFNl
dCB0aGUgc3RyaW5nIHZhbHVlIHRvIHRlc3QuCi0gIHByb3RvXy5zZXRfb3B0aW9uYWxfc3RyaW5n
KCJcMzUwXDI2MFwyNjdcMzQ2XDI1NVwyMTQiKTsKLSAgcHJvdG9fLnNldF9vcHRpb25hbF9ieXRl
cygiXDM1MFwyNjBcMjY3XDM0NlwyNTVcMjE0Iik7Ci0KLSAgLy8gR2V0IHRoZSBEZWJ1Z1N0cmlu
ZyBmcm9tIHRoZSBwcm90by4KLSAgc3RyaW5nIGRlYnVnX3N0cmluZyA9IHByb3RvXy5EZWJ1Z1N0
cmluZygpOwotICBzdHJpbmcgdXRmOF9kZWJ1Z19zdHJpbmcgPSBwcm90b18uVXRmOERlYnVnU3Ry
aW5nKCk7Ci0KLSAgLy8gSGFyZGNvZGUgYSBjb3JyZWN0IHZhbHVlIHRvIHRlc3QgYWdhaW5zdC4K
LSAgc3RyaW5nIGNvcnJlY3RfdXRmOF9zdHJpbmcgPQotICAgICAgIm9wdGlvbmFsX3N0cmluZzog
IgotICAgICAgIlwiXDM1MFwyNjBcMjY3XDM0NlwyNTVcMjE0XCIiCi0gICAgICAiXG4iCi0gICAg
ICAib3B0aW9uYWxfYnl0ZXM6ICIKLSAgICAgICJcIlxcMzUwXFwyNjBcXDI2N1xcMzQ2XFwyNTVc
XDIxNFwiIgotICAgICAgIlxuIjsKLSAgc3RyaW5nIGNvcnJlY3Rfc3RyaW5nID0KLSAgICAgICJv
cHRpb25hbF9zdHJpbmc6ICIKLSAgICAgICJcIlxcMzUwXFwyNjBcXDI2N1xcMzQ2XFwyNTVcXDIx
NFwiIgotICAgICAgIlxuIgotICAgICAgIm9wdGlvbmFsX2J5dGVzOiAiCi0gICAgICAiXCJcXDM1
MFxcMjYwXFwyNjdcXDM0NlxcMjU1XFwyMTRcIiIKLSAgICAgICJcbiI7Ci0KLSAgLy8gQ29tcGFy
ZS4KLSAgRVhQRUNUX0VRKGNvcnJlY3RfdXRmOF9zdHJpbmcsIHV0ZjhfZGVidWdfc3RyaW5nKTsK
LSAgRVhQRUNUX0VRKGNvcnJlY3Rfc3RyaW5nLCBkZWJ1Z19zdHJpbmcpOwotfQotCi1URVNUX0Yo
VGV4dEZvcm1hdFRlc3QsIFByaW50VW5rbm93bkZpZWxkcykgewotICAvLyBUZXN0IHByaW50aW5n
IG9mIHVua25vd24gZmllbGRzIGluIGEgbWVzc2FnZS4KLQotICB1bml0dGVzdDo6VGVzdEVtcHR5
TWVzc2FnZSBtZXNzYWdlOwotICBVbmtub3duRmllbGRTZXQqIHVua25vd25fZmllbGRzID0gbWVz
c2FnZS5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7Ci0KLSAgdW5rbm93bl9maWVsZHMtPkFkZFZh
cmludCg1LCAxKTsKLSAgdW5rbm93bl9maWVsZHMtPkFkZEZpeGVkMzIoNSwgMik7Ci0gIHVua25v
d25fZmllbGRzLT5BZGRGaXhlZDY0KDUsIDMpOwotICB1bmtub3duX2ZpZWxkcy0+QWRkTGVuZ3Ro
RGVsaW1pdGVkKDUsICI0Iik7Ci0gIHVua25vd25fZmllbGRzLT5BZGRHcm91cCg1KS0+QWRkVmFy
aW50KDEwLCA1KTsKLQotICB1bmtub3duX2ZpZWxkcy0+QWRkVmFyaW50KDgsIDEpOwotICB1bmtu
b3duX2ZpZWxkcy0+QWRkVmFyaW50KDgsIDIpOwotICB1bmtub3duX2ZpZWxkcy0+QWRkVmFyaW50
KDgsIDMpOwotCi0gIEVYUEVDVF9FUSgKLSAgICAiNTogMVxuIgotICAgICI1OiAweDAwMDAwMDAy
XG4iCi0gICAgIjU6IDB4MDAwMDAwMDAwMDAwMDAwM1xuIgotICAgICI1OiBcIjRcIlxuIgotICAg
ICI1IHtcbiIKLSAgICAiICAxMDogNVxuIgotICAgICJ9XG4iCi0gICAgIjg6IDFcbiIKLSAgICAi
ODogMlxuIgotICAgICI4OiAzXG4iLAotICAgIG1lc3NhZ2UuRGVidWdTdHJpbmcoKSk7Ci19Ci0K
LVRFU1RfRihUZXh0Rm9ybWF0VGVzdCwgUHJpbnRVbmtub3duRmllbGRzSGlkZGVuKSB7Ci0gIC8v
IFRlc3QgcHJpbnRpbmcgb2YgdW5rbm93biBmaWVsZHMgaW4gYSBtZXNzYWdlIHdoZW4gc3VwcHJl
c3NlZC4KLQotICB1bml0dGVzdDo6T25lU3RyaW5nIG1lc3NhZ2U7Ci0gIG1lc3NhZ2Uuc2V0X2Rh
dGEoImRhdGEiKTsKLSAgVW5rbm93bkZpZWxkU2V0KiB1bmtub3duX2ZpZWxkcyA9IG1lc3NhZ2Uu
bXV0YWJsZV91bmtub3duX2ZpZWxkcygpOwotCi0gIHVua25vd25fZmllbGRzLT5BZGRWYXJpbnQo
NSwgMSk7Ci0gIHVua25vd25fZmllbGRzLT5BZGRGaXhlZDMyKDUsIDIpOwotICB1bmtub3duX2Zp
ZWxkcy0+QWRkRml4ZWQ2NCg1LCAzKTsKLSAgdW5rbm93bl9maWVsZHMtPkFkZExlbmd0aERlbGlt
aXRlZCg1LCAiNCIpOwotICB1bmtub3duX2ZpZWxkcy0+QWRkR3JvdXAoNSktPkFkZFZhcmludCgx
MCwgNSk7Ci0KLSAgdW5rbm93bl9maWVsZHMtPkFkZFZhcmludCg4LCAxKTsKLSAgdW5rbm93bl9m
aWVsZHMtPkFkZFZhcmludCg4LCAyKTsKLSAgdW5rbm93bl9maWVsZHMtPkFkZFZhcmludCg4LCAz
KTsKLQotICBUZXh0Rm9ybWF0OjpQcmludGVyIHByaW50ZXI7Ci0gIHByaW50ZXIuU2V0SGlkZVVu
a25vd25GaWVsZHModHJ1ZSk7Ci0gIHN0cmluZyBvdXRwdXQ7Ci0gIHByaW50ZXIuUHJpbnRUb1N0
cmluZyhtZXNzYWdlLCAmb3V0cHV0KTsKLQotICBFWFBFQ1RfRVEoImRhdGE6IFwiZGF0YVwiXG4i
LCBvdXRwdXQpOwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFRlc3QsIFByaW50VW5rbm93bk1lc3Nh
Z2UpIHsKLSAgLy8gVGVzdCBoZXVyaXN0aWMgcHJpbnRpbmcgb2YgbWVzc2FnZXMgaW4gYW4gVW5r
bm93bkZpZWxkU2V0LgotCi0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2Fn
ZTsKLQotICAvLyBDYXNlcyB3aGljaCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHN1Yi1t
ZXNzYWdlcy4KLQotICAvLyAnYScgaXMgYSB2YWxpZCBGSVhFRDY0IHRhZywgc28gZm9yIHRoZSBz
dHJpbmcgdG8gYmUgcGFyc2VhYmxlIGFzIGEgbWVzc2FnZQotICAvLyBpdCBzaG91bGQgYmUgZm9s
bG93ZWQgYnkgOCBieXRlcy4gIFNpbmNlIHRoaXMgc3RyaW5nIG9ubHkgaGFzIHR3bwotICAvLyBz
dWJzZXF1ZW50IGJ5dGVzLCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHN0cmluZy4KLSAgbWVz
c2FnZS5hZGRfcmVwZWF0ZWRfc3RyaW5nKCJhYmMiKTsKLQotICAvLyAnZCcgaGFwcGVucyB0byBi
ZSBhIHZhbGlkIEVOREdST1VQIHRhZy4gIFNvLAotICAvLyBVbmtub3duRmllbGRTZXQ6Ok1lcmdl
RnJvbUNvZGVkU3RyZWFtKCkgd2lsbCBzdWNjZXNzZnVsbHkgcGFyc2UgImRlZiIsIGJ1dAotICAv
LyB0aGUgQ29uc3VtZWRFbnRpcmVNZXNzYWdlKCkgY2hlY2sgc2hvdWxkIGZhaWwuCi0gIG1lc3Nh
Z2UuYWRkX3JlcGVhdGVkX3N0cmluZygiZGVmIik7Ci0KLSAgLy8gQSB6ZXJvLWxlbmd0aCBzdHJp
bmcgc2hvdWxkIG5ldmVyIGJlIGludGVycHJldGVkIGFzIGEgbWVzc2FnZSBldmVuIHRob3VnaAot
ICAvLyBpdCBpcyB0ZWNobmljYWxseSB2YWxpZCBhcyBvbmUuCi0gIG1lc3NhZ2UuYWRkX3JlcGVh
dGVkX3N0cmluZygiIik7Ci0KLSAgLy8gQ2FzZSB3aGljaCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQg
YXMgYSBzdWItbWVzc2FnZS4KLQotICAvLyBBbiBhY3R1YWwgbmVzdGVkIG1lc3NhZ2Ugd2l0aCBj
b250ZW50IHNob3VsZCBhbHdheXMgYmUgaW50ZXJwcmV0ZWQgYXMgYQotICAvLyBuZXN0ZWQgbWVz
c2FnZS4KLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UoKS0+c2V0X2JiKDEy
Myk7Ci0KLSAgc3RyaW5nIGRhdGE7Ci0gIG1lc3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoJmRhdGEp
OwotCi0gIHN0cmluZyB0ZXh0OwotICBVbmtub3duRmllbGRTZXQgdW5rbm93bl9maWVsZHM7Ci0g
IEVYUEVDVF9UUlVFKHVua25vd25fZmllbGRzLlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0gIEVY
UEVDVF9UUlVFKFRleHRGb3JtYXQ6OlByaW50VW5rbm93bkZpZWxkc1RvU3RyaW5nKHVua25vd25f
ZmllbGRzLCAmdGV4dCkpOwotICBFWFBFQ1RfRVEoCi0gICAgIjQ0OiBcImFiY1wiXG4iCi0gICAg
IjQ0OiBcImRlZlwiXG4iCi0gICAgIjQ0OiBcIlwiXG4iCi0gICAgIjQ4IHtcbiIKLSAgICAiICAx
OiAxMjNcbiIKLSAgICAifVxuIiwKLSAgICB0ZXh0KTsKLX0KLQotVEVTVF9GKFRleHRGb3JtYXRU
ZXN0LCBQcmludE1lc3NhZ2VXaXRoSW5kZW50KSB7Ci0gIC8vIFRlc3QgYWRkaW5nIGFuIGluaXRp
YWwgaW5kZW50IHRvIHByaW50aW5nLgotCi0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QWxsVHlw
ZXMgbWVzc2FnZTsKLQotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9zdHJpbmcoImFiYyIpOwotICBt
ZXNzYWdlLmFkZF9yZXBlYXRlZF9zdHJpbmcoImRlZiIpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRl
ZF9uZXN0ZWRfbWVzc2FnZSgpLT5zZXRfYmIoMTIzKTsKLQotICBzdHJpbmcgdGV4dDsKLSAgVGV4
dEZvcm1hdDo6UHJpbnRlciBwcmludGVyOwotICBwcmludGVyLlNldEluaXRpYWxJbmRlbnRMZXZl
bCgxKTsKLSAgRVhQRUNUX1RSVUUocHJpbnRlci5QcmludFRvU3RyaW5nKG1lc3NhZ2UsICZ0ZXh0
KSk7Ci0gIEVYUEVDVF9FUSgKLSAgICAiICByZXBlYXRlZF9zdHJpbmc6IFwiYWJjXCJcbiIKLSAg
ICAiICByZXBlYXRlZF9zdHJpbmc6IFwiZGVmXCJcbiIKLSAgICAiICByZXBlYXRlZF9uZXN0ZWRf
bWVzc2FnZSB7XG4iCi0gICAgIiAgICBiYjogMTIzXG4iCi0gICAgIiAgfVxuIiwKLSAgICB0ZXh0
KTsKLX0KLQotVEVTVF9GKFRleHRGb3JtYXRUZXN0LCBQcmludE1lc3NhZ2VTaW5nbGVMaW5lKSB7
Ci0gIC8vIFRlc3QgcHJpbnRpbmcgYSBtZXNzYWdlIG9uIGEgc2luZ2xlIGxpbmUuCi0KLSAgcHJv
dG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotCi0gIG1lc3NhZ2UuYWRkX3Jl
cGVhdGVkX3N0cmluZygiYWJjIik7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX3N0cmluZygiZGVm
Iik7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlKCktPnNldF9iYigxMjMp
OwotCi0gIHN0cmluZyB0ZXh0OwotICBUZXh0Rm9ybWF0OjpQcmludGVyIHByaW50ZXI7Ci0gIHBy
aW50ZXIuU2V0SW5pdGlhbEluZGVudExldmVsKDEpOwotICBwcmludGVyLlNldFNpbmdsZUxpbmVN
b2RlKHRydWUpOwotICBFWFBFQ1RfVFJVRShwcmludGVyLlByaW50VG9TdHJpbmcobWVzc2FnZSwg
JnRleHQpKTsKLSAgRVhQRUNUX0VRKAotICAgICIgIHJlcGVhdGVkX3N0cmluZzogXCJhYmNcIiBy
ZXBlYXRlZF9zdHJpbmc6IFwiZGVmXCIgIgotICAgICJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSB7
IGJiOiAxMjMgfSAiLAotICAgIHRleHQpOwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFRlc3QsIFBy
aW50QnVmZmVyVG9vU21hbGwpIHsKLSAgLy8gVGVzdCBwcmludGluZyBhIG1lc3NhZ2UgdG8gYSBi
dWZmZXIgdGhhdCBpcyB0b28gc21hbGwuCi0KLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxU
eXBlcyBtZXNzYWdlOwotCi0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX3N0cmluZygiYWJjIik7Ci0g
IG1lc3NhZ2UuYWRkX3JlcGVhdGVkX3N0cmluZygiZGVmIik7Ci0KLSAgY2hhciBidWZmZXJbMV0g
PSAiIjsKLSAgaW86OkFycmF5T3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0oYnVmZmVyLCAxKTsK
LSAgRVhQRUNUX0ZBTFNFKFRleHRGb3JtYXQ6OlByaW50KG1lc3NhZ2UsICZvdXRwdXRfc3RyZWFt
KSk7Ci0gIEVYUEVDVF9FUShidWZmZXJbMF0sICdyJyk7Ci0gIEVYUEVDVF9FUShvdXRwdXRfc3Ry
ZWFtLkJ5dGVDb3VudCgpLCAxKTsKLX0KLQotLy8gQSBwcmludGVyIHRoYXQgYXBwZW5kcyAndScg
dG8gYWxsIHVuc2lnbmVkIGludDMyLgotY2xhc3MgQ3VzdG9tVUludDMyRmllbGRWYWx1ZVByaW50
ZXIgOiBwdWJsaWMgVGV4dEZvcm1hdDo6RmllbGRWYWx1ZVByaW50ZXIgewotIHB1YmxpYzoKLSAg
dmlydHVhbCBzdHJpbmcgUHJpbnRVSW50MzIodWludDMyIHZhbCkgY29uc3QgewotICAgIHJldHVy
biBTdHJDYXQoRmllbGRWYWx1ZVByaW50ZXI6OlByaW50VUludDMyKHZhbCksICJ1Iik7Ci0gIH0K
LX07Ci0KLVRFU1RfRihUZXh0Rm9ybWF0VGVzdCwgRGVmYXVsdEN1c3RvbUZpZWxkUHJpbnRlcikg
ewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0KLSAgbWVzc2Fn
ZS5zZXRfb3B0aW9uYWxfdWludDMyKDQyKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfdWludDMy
KDEpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF91aW50MzIoMik7Ci0gIG1lc3NhZ2UuYWRkX3Jl
cGVhdGVkX3VpbnQzMigzKTsKLQotICBUZXh0Rm9ybWF0OjpQcmludGVyIHByaW50ZXI7Ci0gIHBy
aW50ZXIuU2V0RGVmYXVsdEZpZWxkVmFsdWVQcmludGVyKG5ldyBDdXN0b21VSW50MzJGaWVsZFZh
bHVlUHJpbnRlcigpKTsKLSAgLy8gTGV0J3Mgc2VlIGlmIHRoYXQgd29ya3Mgd2VsbCB0b2dldGhl
ciB3aXRoIHRoZSByZXBlYXRlZCBwcmltaXRpdmVzOgotICBwcmludGVyLlNldFVzZVNob3J0UmVw
ZWF0ZWRQcmltaXRpdmVzKHRydWUpOwotICBzdHJpbmcgdGV4dDsKLSAgcHJpbnRlci5QcmludFRv
U3RyaW5nKG1lc3NhZ2UsICZ0ZXh0KTsKLSAgRVhQRUNUX0VRKCJvcHRpb25hbF91aW50MzI6IDQy
dVxucmVwZWF0ZWRfdWludDMyOiBbMXUsIDJ1LCAzdV1cbiIsIHRleHQpOwotfQotCi1jbGFzcyBD
dXN0b21JbnQzMkZpZWxkVmFsdWVQcmludGVyIDogcHVibGljIFRleHRGb3JtYXQ6OkZpZWxkVmFs
dWVQcmludGVyIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgc3RyaW5nIFByaW50SW50MzIoaW50MzIg
dmFsKSBjb25zdCB7Ci0gICAgcmV0dXJuIFN0ckNhdCgidmFsdWUtaXMoIiwgRmllbGRWYWx1ZVBy
aW50ZXI6OlByaW50SW50MzIodmFsKSwgIikiKTsKLSAgfQotfTsKLQotVEVTVF9GKFRleHRGb3Jt
YXRUZXN0LCBGaWVsZFNwZWNpZmljQ3VzdG9tUHJpbnRlcikgewotICBwcm90b2J1Zl91bml0dGVz
dDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0KLSAgbWVzc2FnZS5zZXRfb3B0aW9uYWxfaW50MzIo
NDIpOyAgLy8gVGhpcyB3aWxsIGJlIGhhbmRsZWQgYnkgb3VyIFByaW50ZXIuCi0gIG1lc3NhZ2Uu
YWRkX3JlcGVhdGVkX2ludDMyKDQyKTsgIC8vIFRoaXMgd2lsbCBiZSBwcmludGVkIGFzIG51bWJl
ci4KLQotICBUZXh0Rm9ybWF0OjpQcmludGVyIHByaW50ZXI7Ci0gIEVYUEVDVF9UUlVFKHByaW50
ZXIuUmVnaXN0ZXJGaWVsZFZhbHVlUHJpbnRlcigKLSAgICAgIG1lc3NhZ2UuR2V0RGVzY3JpcHRv
cigpLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX2ludDMyIiksCi0gICAgICBuZXcgQ3VzdG9t
SW50MzJGaWVsZFZhbHVlUHJpbnRlcigpKSk7Ci0gIHN0cmluZyB0ZXh0OwotICBwcmludGVyLlBy
aW50VG9TdHJpbmcobWVzc2FnZSwgJnRleHQpOwotICBFWFBFQ1RfRVEoIm9wdGlvbmFsX2ludDMy
OiB2YWx1ZS1pcyg0MilcbnJlcGVhdGVkX2ludDMyOiA0MlxuIiwgdGV4dCk7Ci19Ci0KLVRFU1Rf
RihUZXh0Rm9ybWF0VGVzdCwgRXJyb3JDYXNlc1JlZ2lzdGVyaW5nRmllbGRWYWx1ZVByaW50ZXJT
aG91bGRGYWlsKSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsK
LSAgVGV4dEZvcm1hdDo6UHJpbnRlciBwcmludGVyOwotICAvLyBOVUxMIHByaW50ZXIuCi0gIEVY
UEVDVF9GQUxTRShwcmludGVyLlJlZ2lzdGVyRmllbGRWYWx1ZVByaW50ZXIoCi0gICAgICBtZXNz
YWdlLkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9pbnQzMiIpLAot
ICAgICAgTlVMTCkpOwotICAvLyBCZWNhdXNlIHJlZ2lzdHJhdGlvbiBmYWlscywgdGhlIG93bmVy
c2hpcCBvZiB0aGlzIHByaW50ZXIgaXMgbmV2ZXIgdGFrZW4uCi0gIFRleHRGb3JtYXQ6OkZpZWxk
VmFsdWVQcmludGVyIG15X2ZpZWxkX3ByaW50ZXI7Ci0gIC8vIE5VTEwgZmllbGQKLSAgRVhQRUNU
X0ZBTFNFKHByaW50ZXIuUmVnaXN0ZXJGaWVsZFZhbHVlUHJpbnRlcihOVUxMLCAmbXlfZmllbGRf
cHJpbnRlcikpOwotfQotCi1jbGFzcyBDdXN0b21NZXNzYWdlRmllbGRWYWx1ZVByaW50ZXIgOiBw
dWJsaWMgVGV4dEZvcm1hdDo6RmllbGRWYWx1ZVByaW50ZXIgewotIHB1YmxpYzoKLSAgdmlydHVh
bCBzdHJpbmcgUHJpbnRJbnQzMihpbnQzMiB2KSBjb25zdCB7Ci0gICAgcmV0dXJuIFN0ckNhdChG
aWVsZFZhbHVlUHJpbnRlcjo6UHJpbnRJbnQzMih2KSwgIiAgIyB4Iiwgc3RyaW5nczo6SGV4KHYp
KTsKLSAgfQotCi0gIHZpcnR1YWwgc3RyaW5nIFByaW50TWVzc2FnZVN0YXJ0KGNvbnN0IE1lc3Nh
Z2UmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVs
ZF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpZWxkX2Nv
dW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNpbmdsZV9saW5l
X21vZGUpIGNvbnN0IHsKLSAgICBpZiAoc2luZ2xlX2xpbmVfbW9kZSkgewotICAgICAgcmV0dXJu
ICIgeyAiOwotICAgIH0KLSAgICByZXR1cm4gU3RyQ2F0KAotICAgICAgICAiIHsgICMgIiwgbWVz
c2FnZS5HZXREZXNjcmlwdG9yKCktPm5hbWUoKSwgIjogIiwgZmllbGRfaW5kZXgsICJcbiIpOwot
ICB9Ci19OwotCi1URVNUX0YoVGV4dEZvcm1hdFRlc3QsIEN1c3RvbVByaW50ZXJGb3JDb21tZW50
cykgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1lc3NhZ2U7Ci0gIG1lc3Nh
Z2UubXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpOwotICBtZXNzYWdlLm11dGFibGVf
b3B0aW9uYWxfaW1wb3J0X21lc3NhZ2UoKS0+c2V0X2QoNDIpOwotICBtZXNzYWdlLmFkZF9yZXBl
YXRlZF9uZXN0ZWRfbWVzc2FnZSgpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZSgpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSgpLT5zZXRfZCg0
Myk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2ltcG9ydF9tZXNzYWdlKCktPnNldF9kKDQ0KTsK
LSAgVGV4dEZvcm1hdDo6UHJpbnRlciBwcmludGVyOwotICBDdXN0b21NZXNzYWdlRmllbGRWYWx1
ZVByaW50ZXIgbXlfZmllbGRfcHJpbnRlcjsKLSAgcHJpbnRlci5TZXREZWZhdWx0RmllbGRWYWx1
ZVByaW50ZXIobmV3IEN1c3RvbU1lc3NhZ2VGaWVsZFZhbHVlUHJpbnRlcigpKTsKLSAgc3RyaW5n
IHRleHQ7Ci0gIHByaW50ZXIuUHJpbnRUb1N0cmluZyhtZXNzYWdlLCAmdGV4dCk7Ci0gIEVYUEVD
VF9FUSgKLSAgICAgICJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSB7ICAjIE5lc3RlZE1lc3NhZ2U6
IC0xXG4iCi0gICAgICAifVxuIgotICAgICAgIm9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlIHsgICMg
SW1wb3J0TWVzc2FnZTogLTFcbiIKLSAgICAgICIgIGQ6IDQyICAjIHgyYVxuIgotICAgICAgIn1c
biIKLSAgICAgICJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSB7ICAjIE5lc3RlZE1lc3NhZ2U6IDBc
biIKLSAgICAgICJ9XG4iCi0gICAgICAicmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgeyAgIyBOZXN0
ZWRNZXNzYWdlOiAxXG4iCi0gICAgICAifVxuIgotICAgICAgInJlcGVhdGVkX2ltcG9ydF9tZXNz
YWdlIHsgICMgSW1wb3J0TWVzc2FnZTogMFxuIgotICAgICAgIiAgZDogNDMgICMgeDJiXG4iCi0g
ICAgICAifVxuIgotICAgICAgInJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlIHsgICMgSW1wb3J0TWVz
c2FnZTogMVxuIgotICAgICAgIiAgZDogNDQgICMgeDJjXG4iCi0gICAgICAifVxuIiwKLSAgICAg
IHRleHQpOwotfQotCi1jbGFzcyBDdXN0b21NdWx0aWxpbmVDb21tZW50UHJpbnRlciA6IHB1Ymxp
YyBUZXh0Rm9ybWF0OjpGaWVsZFZhbHVlUHJpbnRlciB7Ci0gcHVibGljOgotICB2aXJ0dWFsIHN0
cmluZyBQcmludE1lc3NhZ2VTdGFydChjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmllbGRfaW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBmaWVsZF9jb3VudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzaW5nbGVfbGluZV9jb21tZW50KSBjb25zdCB7Ci0gICAg
cmV0dXJuIFN0ckNhdCgiIHsgICMgMVxuIiwgIiAgIyAyXG4iKTsKLSAgfQotfTsKLQotVEVTVF9G
KFRleHRGb3JtYXRUZXN0LCBDdXN0b21QcmludGVyRm9yTXVsdGlsaW5lQ29tbWVudHMpIHsKLSAg
cHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotICBtZXNzYWdlLm11dGFi
bGVfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKTsKLSAgbWVzc2FnZS5tdXRhYmxlX29wdGlvbmFs
X2ltcG9ydF9tZXNzYWdlKCktPnNldF9kKDQyKTsKLSAgVGV4dEZvcm1hdDo6UHJpbnRlciBwcmlu
dGVyOwotICBDdXN0b21NZXNzYWdlRmllbGRWYWx1ZVByaW50ZXIgbXlfZmllbGRfcHJpbnRlcjsK
LSAgcHJpbnRlci5TZXREZWZhdWx0RmllbGRWYWx1ZVByaW50ZXIobmV3IEN1c3RvbU11bHRpbGlu
ZUNvbW1lbnRQcmludGVyKCkpOwotICBzdHJpbmcgdGV4dDsKLSAgcHJpbnRlci5QcmludFRvU3Ry
aW5nKG1lc3NhZ2UsICZ0ZXh0KTsKLSAgRVhQRUNUX0VRKAotICAgICAgIm9wdGlvbmFsX25lc3Rl
ZF9tZXNzYWdlIHsgICMgMVxuIgotICAgICAgIiAgIyAyXG4iCi0gICAgICAifVxuIgotICAgICAg
Im9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlIHsgICMgMVxuIgotICAgICAgIiAgIyAyXG4iCi0gICAg
ICAiICBkOiA0MlxuIgotICAgICAgIn1cbiIsCi0gICAgICB0ZXh0KTsKLX0KLQotVEVTVF9GKFRl
eHRGb3JtYXRUZXN0LCBQYXJzZUJhc2ljKSB7Ci0gIGlvOjpBcnJheUlucHV0U3RyZWFtIGlucHV0
X3N0cmVhbShwcm90b19kZWJ1Z19zdHJpbmdfLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3RvX2RlYnVnX3N0cmluZ18uc2l6ZSgpKTsKLSAgVGV4dEZvcm1h
dDo6UGFyc2UoJmlucHV0X3N0cmVhbSwgJnByb3RvXyk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxG
aWVsZHNTZXQocHJvdG9fKTsKLX0KLQotVEVTVF9GKFRleHRGb3JtYXRFeHRlbnNpb25zVGVzdCwg
UGFyc2VFeHRlbnNpb25zKSB7Ci0gIGlvOjpBcnJheUlucHV0U3RyZWFtIGlucHV0X3N0cmVhbShw
cm90b19kZWJ1Z19zdHJpbmdfLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3RvX2RlYnVnX3N0cmluZ18uc2l6ZSgpKTsKLSAgVGV4dEZvcm1hdDo6UGFyc2Uo
JmlucHV0X3N0cmVhbSwgJnByb3RvXyk7Ci0gIFRlc3RVdGlsOjpFeHBlY3RBbGxFeHRlbnNpb25z
U2V0KHByb3RvXyk7Ci19Ci0KLVRFU1RfRihUZXh0Rm9ybWF0VGVzdCwgUGFyc2VFbnVtRmllbGRG
cm9tTnVtYmVyKSB7Ci0gIC8vIENyZWF0ZSBhIHBhcnNlIHN0cmluZyB3aXRoIGEgbnVtZXJpY2Fs
IHZhbHVlIGZvciBhbiBlbnVtIGZpZWxkLgotICBzdHJpbmcgcGFyc2Vfc3RyaW5nID0gc3RyaW5n
czo6U3Vic3RpdHV0ZSgib3B0aW9uYWxfbmVzdGVkX2VudW06ICQwIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFa
KTsKLSAgRVhQRUNUX1RSVUUoVGV4dEZvcm1hdDo6UGFyc2VGcm9tU3RyaW5nKHBhcnNlX3N0cmlu
ZywgJnByb3RvXykpOwotICBFWFBFQ1RfVFJVRShwcm90b18uaGFzX29wdGlvbmFsX25lc3RlZF9l
bnVtKCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFaLCBwcm90b18u
b3B0aW9uYWxfbmVzdGVkX2VudW0oKSk7Ci19Ci0KLVRFU1RfRihUZXh0Rm9ybWF0VGVzdCwgUGFy
c2VFbnVtRmllbGRGcm9tTmVnYXRpdmVOdW1iZXIpIHsKLSAgQVNTRVJUX0xUKHVuaXR0ZXN0OjpT
UEFSU0VfRSwgMCk7Ci0gIHN0cmluZyBwYXJzZV9zdHJpbmcgPSBzdHJpbmdzOjpTdWJzdGl0dXRl
KCJzcGFyc2VfZW51bTogJDAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bml0dGVzdDo6U1BBUlNFX0UpOwotICB1bml0dGVzdDo6U3BhcnNlRW51bU1lc3Nh
Z2UgcHJvdG87Ci0gIEVYUEVDVF9UUlVFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZyhwYXJz
ZV9zdHJpbmcsICZwcm90bykpOwotICBFWFBFQ1RfVFJVRShwcm90by5oYXNfc3BhcnNlX2VudW0o
KSk7Ci0gIEVYUEVDVF9FUSh1bml0dGVzdDo6U1BBUlNFX0UsIHByb3RvLnNwYXJzZV9lbnVtKCkp
OwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFRlc3QsIFBhcnNlU3RyaW5nRXNjYXBlKSB7Ci0gIC8v
IENyZWF0ZSBhIHBhcnNlIHN0cmluZyB3aXRoIGVzY3BhZWQgY2hhcmFjdGVycyBpbiBpdC4KLSAg
c3RyaW5nIHBhcnNlX3N0cmluZyA9ICJvcHRpb25hbF9zdHJpbmc6ICIKLSAgICAgICsga0VzY2Fw
ZVRlc3RTdHJpbmdFc2NhcGVkCi0gICAgICArICJcbiI7Ci0KLSAgaW86OkFycmF5SW5wdXRTdHJl
YW0gaW5wdXRfc3RyZWFtKHBhcnNlX3N0cmluZy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZV9zdHJpbmcuc2l6ZSgpKTsKLSAgVGV4dEZvcm1hdDo6UGFy
c2UoJmlucHV0X3N0cmVhbSwgJnByb3RvXyk7Ci0KLSAgLy8gQ29tcGFyZS4KLSAgRVhQRUNUX0VR
KGtFc2NhcGVUZXN0U3RyaW5nLCBwcm90b18ub3B0aW9uYWxfc3RyaW5nKCkpOwotfQotCi1URVNU
X0YoVGV4dEZvcm1hdFRlc3QsIFBhcnNlQ29uY2F0ZW5hdGVkU3RyaW5nKSB7Ci0gIC8vIENyZWF0
ZSBhIHBhcnNlIHN0cmluZyB3aXRoIG11bHRpcGxlIHBhcnRzIG9uIG9uZSBsaW5lLgotICBzdHJp
bmcgcGFyc2Vfc3RyaW5nID0gIm9wdGlvbmFsX3N0cmluZzogXCJmb29cIiBcImJhclwiXG4iOwot
Ci0gIGlvOjpBcnJheUlucHV0U3RyZWFtIGlucHV0X3N0cmVhbTEocGFyc2Vfc3RyaW5nLmRhdGEo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX3N0cmluZy5zaXpl
KCkpOwotICBUZXh0Rm9ybWF0OjpQYXJzZSgmaW5wdXRfc3RyZWFtMSwgJnByb3RvXyk7Ci0KLSAg
Ly8gQ29tcGFyZS4KLSAgRVhQRUNUX0VRKCJmb29iYXIiLCBwcm90b18ub3B0aW9uYWxfc3RyaW5n
KCkpOwotCi0gIC8vIENyZWF0ZSBhIHBhcnNlIHN0cmluZyB3aXRoIG11bHRpcGxlIHBhcnRzIG9u
IHNlcGFyYXRlIGxpbmVzLgotICBwYXJzZV9zdHJpbmcgPSAib3B0aW9uYWxfc3RyaW5nOiBcImZv
b1wiXG4iCi0gICAgICAgICAgICAgICAgICJcImJhclwiXG4iOwotCi0gIGlvOjpBcnJheUlucHV0
U3RyZWFtIGlucHV0X3N0cmVhbTIocGFyc2Vfc3RyaW5nLmRhdGEoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX3N0cmluZy5zaXplKCkpOwotICBUZXh0Rm9ybWF0
OjpQYXJzZSgmaW5wdXRfc3RyZWFtMiwgJnByb3RvXyk7Ci0KLSAgLy8gQ29tcGFyZS4KLSAgRVhQ
RUNUX0VRKCJmb29iYXIiLCBwcm90b18ub3B0aW9uYWxfc3RyaW5nKCkpOwotfQotCi1URVNUX0Yo
VGV4dEZvcm1hdFRlc3QsIFBhcnNlRmxvYXRXaXRoU3VmZml4KSB7Ci0gIC8vIFRlc3QgdGhhdCB3
ZSBjYW4gcGFyc2UgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSB3aXRoICdmJyBhcHBlbmRlZCB0byB0
aGUKLSAgLy8gZW5kLiAgVGhpcyBpcyBuZWVkZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5
IHdpdGggcHJvdG8xLgotCi0gIC8vIEhhdmUgaXQgcGFyc2UgYSBmbG9hdCB3aXRoIHRoZSAnZicg
c3VmZml4LgotICBzdHJpbmcgcGFyc2Vfc3RyaW5nID0gIm9wdGlvbmFsX2Zsb2F0OiAxLjBmXG4i
OwotCi0gIGlvOjpBcnJheUlucHV0U3RyZWFtIGlucHV0X3N0cmVhbShwYXJzZV9zdHJpbmcuZGF0
YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vfc3RyaW5nLnNp
emUoKSk7Ci0KLSAgVGV4dEZvcm1hdDo6UGFyc2UoJmlucHV0X3N0cmVhbSwgJnByb3RvXyk7Ci0K
LSAgLy8gQ29tcGFyZS4KLSAgRVhQRUNUX0VRKDEuMCwgcHJvdG9fLm9wdGlvbmFsX2Zsb2F0KCkp
OwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFRlc3QsIFBhcnNlU2hvcnRSZXBlYXRlZEZvcm0pIHsK
LSAgc3RyaW5nIHBhcnNlX3N0cmluZyA9Ci0gICAgICAvLyBNaXhlZCBzaG9ydC1mb3JtIGFuZCBs
b25nLWZvcm0gYXJlIHNpbXBseSBjb25jYXRlbmF0ZWQuCi0gICAgICAicmVwZWF0ZWRfaW50MzI6
IDFcbiIKLSAgICAgICJyZXBlYXRlZF9pbnQzMjogWzQ1NiwgNzg5XVxuIgotICAgICAgInJlcGVh
dGVkX25lc3RlZF9lbnVtOiBbICBGT08gLEJBUiwgIyBjb21tZW50XG4iCi0gICAgICAiICAgICAg
ICAgICAgICAgICAgICAgICAgIDNdXG4iCi0gICAgICAvLyBOb3RlIHRoYXQgd2hpbGUgdGhlIHBy
aW50ZXIgd29uJ3QgcHJpbnQgcmVwZWF0ZWQgc3RyaW5ncyBpbiBzaG9ydC1mb3JtLAotICAgICAg
Ly8gdGhlIHBhcnNlciB3aWxsIGFjY2VwdCB0aGVtLgotICAgICAgInJlcGVhdGVkX3N0cmluZzog
WyBcImZvb1wiLCAnYmFyJyBdXG4iCi0gICAgICAvLyBSZXBlYXRlZCBtZXNzYWdlCi0gICAgICAi
cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2U6IFsgeyBiYjogMSB9LCB7IGJiIDogMiB9XVxuIgotICAg
ICAgLy8gUmVwZWF0ZWQgZ3JvdXAKLSAgICAgICJSZXBlYXRlZEdyb3VwIFt7IGE6IDMgfSx7IGE6
IDQgfV1cbiI7Ci0KLSAgQVNTRVJUX1RSVUUoVGV4dEZvcm1hdDo6UGFyc2VGcm9tU3RyaW5nKHBh
cnNlX3N0cmluZywgJnByb3RvXykpOwotCi0gIEFTU0VSVF9FUSgzLCBwcm90b18ucmVwZWF0ZWRf
aW50MzJfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDEsIHByb3RvXy5yZXBlYXRlZF9pbnQzMigwKSk7
Ci0gIEVYUEVDVF9FUSg0NTYsIHByb3RvXy5yZXBlYXRlZF9pbnQzMigxKSk7Ci0gIEVYUEVDVF9F
USg3ODksIHByb3RvXy5yZXBlYXRlZF9pbnQzMigyKSk7Ci0KLSAgQVNTRVJUX0VRKDMsIHByb3Rv
Xy5yZXBlYXRlZF9uZXN0ZWRfZW51bV9zaXplKCkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRl
c3RBbGxUeXBlczo6Rk9PLCBwcm90b18ucmVwZWF0ZWRfbmVzdGVkX2VudW0oMCkpOwotICBFWFBF
Q1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFSLCBwcm90b18ucmVwZWF0ZWRfbmVzdGVk
X2VudW0oMSkpOwotICBFWFBFQ1RfRVEodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFaLCBwcm90
b18ucmVwZWF0ZWRfbmVzdGVkX2VudW0oMikpOwotCi0gIEFTU0VSVF9FUSgyLCBwcm90b18ucmVw
ZWF0ZWRfc3RyaW5nX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgiZm9vIiwgcHJvdG9fLnJlcGVhdGVk
X3N0cmluZygwKSk7Ci0gIEVYUEVDVF9FUSgiYmFyIiwgcHJvdG9fLnJlcGVhdGVkX3N0cmluZygx
KSk7Ci0KLSAgQVNTRVJUX0VRKDIsIHByb3RvXy5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9zaXpl
KCkpOwotICBFWFBFQ1RfRVEoMSwgcHJvdG9fLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKDApLmJi
KCkpOwotICBFWFBFQ1RfRVEoMiwgcHJvdG9fLnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKDEpLmJi
KCkpOwotCi0gIEFTU0VSVF9FUSgyLCBwcm90b18ucmVwZWF0ZWRncm91cF9zaXplKCkpOwotICBF
WFBFQ1RfRVEoMywgcHJvdG9fLnJlcGVhdGVkZ3JvdXAoMCkuYSgpKTsKLSAgRVhQRUNUX0VRKDQs
IHByb3RvXy5yZXBlYXRlZGdyb3VwKDEpLmEoKSk7Ci19Ci0KLQotVEVTVF9GKFRleHRGb3JtYXRU
ZXN0LCBDb21tZW50cykgewotICAvLyBUZXN0IHRoYXQgY29tbWVudHMgYXJlIGlnbm9yZWQuCi0K
LSAgc3RyaW5nIHBhcnNlX3N0cmluZyA9ICJvcHRpb25hbF9pbnQzMjogMSAgIyBhIGNvbW1lbnRc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb25hbF9pbnQ2NDogMiAgIyBhbm90aGVy
IGNvbW1lbnQiOwotCi0gIGlvOjpBcnJheUlucHV0U3RyZWFtIGlucHV0X3N0cmVhbShwYXJzZV9z
dHJpbmcuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vf
c3RyaW5nLnNpemUoKSk7Ci0KLSAgVGV4dEZvcm1hdDo6UGFyc2UoJmlucHV0X3N0cmVhbSwgJnBy
b3RvXyk7Ci0KLSAgLy8gQ29tcGFyZS4KLSAgRVhQRUNUX0VRKDEsIHByb3RvXy5vcHRpb25hbF9p
bnQzMigpKTsKLSAgRVhQRUNUX0VRKDIsIHByb3RvXy5vcHRpb25hbF9pbnQ2NCgpKTsKLX0KLQot
VEVTVF9GKFRleHRGb3JtYXRUZXN0LCBPcHRpb25hbENvbG9uKSB7Ci0gIC8vIFRlc3QgdGhhdCB3
ZSBjYW4gcGxhY2UgYSAnOicgYWZ0ZXIgdGhlIGZpZWxkIG5hbWUgb2YgYSBuZXN0ZWQgbWVzc2Fn
ZSwKLSAgLy8gZXZlbiB0aG91Z2ggd2UgZG9uJ3QgaGF2ZSB0by4KLQotICBzdHJpbmcgcGFyc2Vf
c3RyaW5nID0gIm9wdGlvbmFsX25lc3RlZF9tZXNzYWdlOiB7IGJiOiAxfVxuIjsKLQotICBpbzo6
QXJyYXlJbnB1dFN0cmVhbSBpbnB1dF9zdHJlYW0ocGFyc2Vfc3RyaW5nLmRhdGEoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX3N0cmluZy5zaXplKCkpOwotCi0g
IFRleHRGb3JtYXQ6OlBhcnNlKCZpbnB1dF9zdHJlYW0sICZwcm90b18pOwotCi0gIC8vIENvbXBh
cmUuCi0gIEVYUEVDVF9UUlVFKHByb3RvXy5oYXNfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKSk7
Ci0gIEVYUEVDVF9FUSgxLCBwcm90b18ub3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKS5iYigpKTsK
LX0KLQotLy8gU29tZSBwbGF0Zm9ybXMgKGUuZy4gV2luZG93cykgaW5zaXN0IG9uIHBhZGRpbmcg
dGhlIGV4cG9uZW50IHRvIHRocmVlCi0vLyBkaWdpdHMgd2hlbiBvbmUgb3IgdHdvIHdvdWxkIGJl
IGp1c3QgZmluZS4KLXN0YXRpYyBzdHJpbmcgUmVtb3ZlUmVkdW5kYW50WmVyb3Moc3RyaW5nIHRl
eHQpIHsKLSAgdGV4dCA9IFN0cmluZ1JlcGxhY2UodGV4dCwgImUrMCIsICJlKyIsIHRydWUpOwot
ICB0ZXh0ID0gU3RyaW5nUmVwbGFjZSh0ZXh0LCAiZS0wIiwgImUtIiwgdHJ1ZSk7Ci0gIHJldHVy
biB0ZXh0OwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFRlc3QsIFByaW50RXhvdGljKSB7Ci0gIHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXMgbWVzc2FnZTsKLQotICAvLyBOb3RlOiAgSW4gQywgYSBuZWdh
dGl2ZSBpbnRlZ2VyIGxpdGVyYWwgaXMgYWN0dWFsbHkgdGhlIHVuYXJ5IG5lZ2F0aW9uCi0gIC8v
ICAgb3BlcmF0b3IgYmVpbmcgYXBwbGllZCB0byBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCwg
YW5kCi0gIC8vICAgOTIyMzM3MjAzNjg1NDc3NTgwOCBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBp
bnQ2NC4gIEhvd2V2ZXIsIGl0IGlzIG5vdAotICAvLyAgIG91dHNpZGUgdGhlIHJhbmdlIG9mIHVp
bnQ2NC4gIENvbmZ1c2luZ2x5LCB0aGlzIG1lYW5zIHRoYXQgZXZlcnl0aGluZwotICAvLyAgIHdv
cmtzIGlmIHdlIG1ha2UgdGhlIGxpdGVyYWwgdW5zaWduZWQsIGV2ZW4gdGhvdWdoIHdlIGFyZSBu
ZWdhdGluZyBpdC4KLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfaW50NjQoLUdPT0dMRV9VTE9OR0xP
TkcoOTIyMzM3MjAzNjg1NDc3NTgwOCkpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF91aW50NjQo
R09PR0xFX1VMT05HTE9ORygxODQ0Njc0NDA3MzcwOTU1MTYxNSkpOwotICBtZXNzYWdlLmFkZF9y
ZXBlYXRlZF9kb3VibGUoMTIzLjQ1Nik7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgx
LjIzZTIxKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfZG91YmxlKDEuMjNlLTE4KTsKLSAgbWVz
c2FnZS5hZGRfcmVwZWF0ZWRfZG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKSk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgtc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfZG91Ymxl
KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkpOwotICBtZXNzYWdlLmFk
ZF9yZXBlYXRlZF9zdHJpbmcoc3RyaW5nKCJcMDAwXDAwMVxhXGJcZlxuXHJcdFx2XFxcJ1wiIiwg
MTIpKTsKLQotICAvLyBGdW4gc3Rvcnk6ICBXZSB1c2VkIHRvIHVzZSAxLjIzZTIyIGluc3RlYWQg
b2YgMS4yM2UyMSBhYm92ZSwgYnV0IHRoaXMKLSAgLy8gICBzZWVtZWQgdG8gdHJpZ2dlciBhbiBv
ZGQgY2FzZSBvbiBNaW5HVy9HQ0MgMy40LjUgd2hlcmUgR0NDJ3MgcGFyc2luZyBvZgotICAvLyAg
IHRoZSB2YWx1ZSBkaWZmZXJlZCBmcm9tIHN0cnRvZCgpJ3MgcGFyc2luZy4gIFRoYXQgaXMgdG8g
c2F5LCB0aGUKLSAgLy8gICBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWxzIG9uIE1pbkdXOgotICAv
LyAgICAgYXNzZXJ0KDEuMjNlMjIgPT0gc3RydG9kKCIxLjIzZTIyIiwgTlVMTCkpOwotICAvLyAg
IEFzIGEgcmVzdWx0LCBTaW1wbGVEdG9hKCkgd291bGQgcHJpbnQgdGhlIHZhbHVlIGFzCi0gIC8v
ICAgIjEuMjMwMDAwMDAwMDAwMDAwMWUrMjIiIHRvIG1ha2Ugc3VyZSBzdHJ0b2QoKSBwcm9kdWNl
IHRoZSBleGFjdCBzYW1lCi0gIC8vICAgcmVzdWx0LiAgT3VyIGdvYWwgaXMgdG8gdGVzdCBydW50
aW1lIHBhcnNpbmcsIG5vdCBjb21waWxlLXRpbWUgcGFyc2luZywKLSAgLy8gICBzbyB0aGlzIHdh
c24ndCBvdXIgcHJvYmxlbS4gIEl0IHdhcyBmb3VuZCB0aGF0IHVzaW5nIDEuMjNlMjEgZGlkIG5v
dAotICAvLyAgIGhhdmUgdGhpcyBwcm9ibGVtLCBzbyB3ZSBzd2l0Y2hlZCB0byB0aGF0IGluc3Rl
YWQuCi0KLSAgRVhQRUNUX0VRKAotICAgICJyZXBlYXRlZF9pbnQ2NDogLTkyMjMzNzIwMzY4NTQ3
NzU4MDhcbiIKLSAgICAicmVwZWF0ZWRfdWludDY0OiAxODQ0Njc0NDA3MzcwOTU1MTYxNVxuIgot
ICAgICJyZXBlYXRlZF9kb3VibGU6IDEyMy40NTZcbiIKLSAgICAicmVwZWF0ZWRfZG91YmxlOiAx
LjIzZSsyMVxuIgotICAgICJyZXBlYXRlZF9kb3VibGU6IDEuMjNlLTE4XG4iCi0gICAgInJlcGVh
dGVkX2RvdWJsZTogaW5mXG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogLWluZlxuIgotICAgICJy
ZXBlYXRlZF9kb3VibGU6IG5hblxuIgotICAgICJyZXBlYXRlZF9zdHJpbmc6IFwiXFwwMDBcXDAw
MVxcMDA3XFwwMTBcXDAxNFxcblxcclxcdFxcMDEzXFxcXFxcJ1xcXCJcIlxuIiwKLSAgICBSZW1v
dmVSZWR1bmRhbnRaZXJvcyhtZXNzYWdlLkRlYnVnU3RyaW5nKCkpKTsKLX0KLQotVEVTVF9GKFRl
eHRGb3JtYXRUZXN0LCBQcmludEZsb2F0UHJlY2lzaW9uKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxs
VHlwZXMgbWVzc2FnZTsKLQotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9mbG9hdCgxLjIpOwotICBt
ZXNzYWdlLmFkZF9yZXBlYXRlZF9mbG9hdCgxLjIzKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRf
ZmxvYXQoMS4yMzQpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9mbG9hdCgxLjIzNDUpOwotICBt
ZXNzYWdlLmFkZF9yZXBlYXRlZF9mbG9hdCgxLjIzNDU2KTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0
ZWRfZmxvYXQoMS4yZTEwKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfZmxvYXQoMS4yM2UxMCk7
Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2Zsb2F0KDEuMjM0ZTEwKTsKLSAgbWVzc2FnZS5hZGRf
cmVwZWF0ZWRfZmxvYXQoMS4yMzQ1ZTEwKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfZmxvYXQo
MS4yMzQ1NmUxMCk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgxLjIpOwotICBtZXNz
YWdlLmFkZF9yZXBlYXRlZF9kb3VibGUoMS4yMyk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2Rv
dWJsZSgxLjIzNCk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgxLjIzNDUpOwotICBt
ZXNzYWdlLmFkZF9yZXBlYXRlZF9kb3VibGUoMS4yMzQ1Nik7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVh
dGVkX2RvdWJsZSgxLjIzNDU2Nyk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgxLjIz
NDU2NzgpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9kb3VibGUoMS4yMzQ1Njc4OSk7Ci0gIG1l
c3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgxLjIzNDU2Nzg5OCk7Ci0gIG1lc3NhZ2UuYWRkX3Jl
cGVhdGVkX2RvdWJsZSgxLjIzNDU2Nzg5ODcpOwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9kb3Vi
bGUoMS4yMzQ1Njc4OTg3Nik7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgxLjIzNDU2
Nzg5ODc2NSk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgxLjIzNDU2Nzg5ODc2NTQp
OwotICBtZXNzYWdlLmFkZF9yZXBlYXRlZF9kb3VibGUoMS4yMzQ1Njc4OTg3NjU0Myk7Ci0gIG1l
c3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgxLjJlMTAwKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0
ZWRfZG91YmxlKDEuMjNlMTAwKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfZG91YmxlKDEuMjM0
ZTEwMCk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgxLjIzNDVlMTAwKTsKLSAgbWVz
c2FnZS5hZGRfcmVwZWF0ZWRfZG91YmxlKDEuMjM0NTZlMTAwKTsKLSAgbWVzc2FnZS5hZGRfcmVw
ZWF0ZWRfZG91YmxlKDEuMjM0NTY3ZTEwMCk7Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJs
ZSgxLjIzNDU2NzhlMTAwKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfZG91YmxlKDEuMjM0NTY3
ODllMTAwKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0ZWRfZG91YmxlKDEuMjM0NTY3ODk4ZTEwMCk7
Ci0gIG1lc3NhZ2UuYWRkX3JlcGVhdGVkX2RvdWJsZSgxLjIzNDU2Nzg5ODdlMTAwKTsKLSAgbWVz
c2FnZS5hZGRfcmVwZWF0ZWRfZG91YmxlKDEuMjM0NTY3ODk4NzZlMTAwKTsKLSAgbWVzc2FnZS5h
ZGRfcmVwZWF0ZWRfZG91YmxlKDEuMjM0NTY3ODk4NzY1ZTEwMCk7Ci0gIG1lc3NhZ2UuYWRkX3Jl
cGVhdGVkX2RvdWJsZSgxLjIzNDU2Nzg5ODc2NTRlMTAwKTsKLSAgbWVzc2FnZS5hZGRfcmVwZWF0
ZWRfZG91YmxlKDEuMjM0NTY3ODk4NzY1NDNlMTAwKTsKLQotICBFWFBFQ1RfRVEoCi0gICAgInJl
cGVhdGVkX2Zsb2F0OiAxLjJcbiIKLSAgICAicmVwZWF0ZWRfZmxvYXQ6IDEuMjNcbiIKLSAgICAi
cmVwZWF0ZWRfZmxvYXQ6IDEuMjM0XG4iCi0gICAgInJlcGVhdGVkX2Zsb2F0OiAxLjIzNDVcbiIK
LSAgICAicmVwZWF0ZWRfZmxvYXQ6IDEuMjM0NTZcbiIKLSAgICAicmVwZWF0ZWRfZmxvYXQ6IDEu
MmUrMTBcbiIKLSAgICAicmVwZWF0ZWRfZmxvYXQ6IDEuMjNlKzEwXG4iCi0gICAgInJlcGVhdGVk
X2Zsb2F0OiAxLjIzNGUrMTBcbiIKLSAgICAicmVwZWF0ZWRfZmxvYXQ6IDEuMjM0NWUrMTBcbiIK
LSAgICAicmVwZWF0ZWRfZmxvYXQ6IDEuMjM0NTZlKzEwXG4iCi0gICAgInJlcGVhdGVkX2RvdWJs
ZTogMS4yXG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yM1xuIgotICAgICJyZXBlYXRlZF9k
b3VibGU6IDEuMjM0XG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzQ1XG4iCi0gICAgInJl
cGVhdGVkX2RvdWJsZTogMS4yMzQ1NlxuIgotICAgICJyZXBlYXRlZF9kb3VibGU6IDEuMjM0NTY3
XG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzQ1Njc4XG4iCi0gICAgInJlcGVhdGVkX2Rv
dWJsZTogMS4yMzQ1Njc4OVxuIgotICAgICJyZXBlYXRlZF9kb3VibGU6IDEuMjM0NTY3ODk4XG4i
Ci0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzQ1Njc4OTg3XG4iCi0gICAgInJlcGVhdGVkX2Rv
dWJsZTogMS4yMzQ1Njc4OTg3NlxuIgotICAgICJyZXBlYXRlZF9kb3VibGU6IDEuMjM0NTY3ODk4
NzY1XG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzQ1Njc4OTg3NjU0XG4iCi0gICAgInJl
cGVhdGVkX2RvdWJsZTogMS4yMzQ1Njc4OTg3NjU0M1xuIgotICAgICJyZXBlYXRlZF9kb3VibGU6
IDEuMmUrMTAwXG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yM2UrMTAwXG4iCi0gICAgInJl
cGVhdGVkX2RvdWJsZTogMS4yMzRlKzEwMFxuIgotICAgICJyZXBlYXRlZF9kb3VibGU6IDEuMjM0
NWUrMTAwXG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzQ1NmUrMTAwXG4iCi0gICAgInJl
cGVhdGVkX2RvdWJsZTogMS4yMzQ1NjdlKzEwMFxuIgotICAgICJyZXBlYXRlZF9kb3VibGU6IDEu
MjM0NTY3OGUrMTAwXG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzQ1Njc4OWUrMTAwXG4i
Ci0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzQ1Njc4OThlKzEwMFxuIgotICAgICJyZXBlYXRl
ZF9kb3VibGU6IDEuMjM0NTY3ODk4N2UrMTAwXG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4y
MzQ1Njc4OTg3NmUrMTAwXG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzQ1Njc4OTg3NjVl
KzEwMFxuIgotICAgICJyZXBlYXRlZF9kb3VibGU6IDEuMjM0NTY3ODk4NzY1NGUrMTAwXG4iCi0g
ICAgInJlcGVhdGVkX2RvdWJsZTogMS4yMzQ1Njc4OTg3NjU0M2UrMTAwXG4iLAotICAgIFJlbW92
ZVJlZHVuZGFudFplcm9zKG1lc3NhZ2UuRGVidWdTdHJpbmcoKSkpOwotfQotCi0KLVRFU1RfRihU
ZXh0Rm9ybWF0VGVzdCwgQWxsb3dQYXJ0aWFsKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQg
bWVzc2FnZTsKLSAgVGV4dEZvcm1hdDo6UGFyc2VyIHBhcnNlcjsKLSAgcGFyc2VyLkFsbG93UGFy
dGlhbE1lc3NhZ2UodHJ1ZSk7Ci0gIEVYUEVDVF9UUlVFKHBhcnNlci5QYXJzZUZyb21TdHJpbmco
ImE6IDEiLCAmbWVzc2FnZSkpOwotICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5hKCkpOwotICBFWFBF
Q1RfRkFMU0UobWVzc2FnZS5oYXNfYigpKTsKLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuaGFzX2Mo
KSk7Ci19Ci0KLVRFU1RfRihUZXh0Rm9ybWF0VGVzdCwgUGFyc2VFeG90aWMpIHsKLSAgdW5pdHRl
c3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotICBBU1NFUlRfVFJVRShUZXh0Rm9ybWF0OjpQYXJz
ZUZyb21TdHJpbmcoCi0gICAgInJlcGVhdGVkX2ludDMyOiAtMVxuIgotICAgICJyZXBlYXRlZF9p
bnQzMjogLTIxNDc0ODM2NDhcbiIKLSAgICAicmVwZWF0ZWRfaW50NjQ6IC0xXG4iCi0gICAgInJl
cGVhdGVkX2ludDY0OiAtOTIyMzM3MjAzNjg1NDc3NTgwOFxuIgotICAgICJyZXBlYXRlZF91aW50
MzI6IDQyOTQ5NjcyOTVcbiIKLSAgICAicmVwZWF0ZWRfdWludDMyOiAyMTQ3NDgzNjQ4XG4iCi0g
ICAgInJlcGVhdGVkX3VpbnQ2NDogMTg0NDY3NDQwNzM3MDk1NTE2MTVcbiIKLSAgICAicmVwZWF0
ZWRfdWludDY0OiA5MjIzMzcyMDM2ODU0Nzc1ODA4XG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTog
MTIzLjBcbiIKLSAgICAicmVwZWF0ZWRfZG91YmxlOiAxMjMuNVxuIgotICAgICJyZXBlYXRlZF9k
b3VibGU6IDAuMTI1XG4iCi0gICAgInJlcGVhdGVkX2RvdWJsZTogMS4yM0UxN1xuIgotICAgICJy
ZXBlYXRlZF9kb3VibGU6IDEuMjM1RSsyMlxuIgotICAgICJyZXBlYXRlZF9kb3VibGU6IDEuMjM1
ZS0xOFxuIgotICAgICJyZXBlYXRlZF9kb3VibGU6IDEyMy40NTY3ODlcbiIKLSAgICAicmVwZWF0
ZWRfZG91YmxlOiBpbmZcbiIKLSAgICAicmVwZWF0ZWRfZG91YmxlOiBJbmZpbml0eVxuIgotICAg
ICJyZXBlYXRlZF9kb3VibGU6IC1pbmZcbiIKLSAgICAicmVwZWF0ZWRfZG91YmxlOiAtSW5maW5p
dHlcbiIKLSAgICAicmVwZWF0ZWRfZG91YmxlOiBuYW5cbiIKLSAgICAicmVwZWF0ZWRfZG91Ymxl
OiBOYU5cbiIKLSAgICAicmVwZWF0ZWRfc3RyaW5nOiBcIlxcMDAwXFwwMDFcXGFcXGJcXGZcXG5c
XHJcXHRcXHZcXFxcXFwnXFxcIlwiXG4iLAotICAgICZtZXNzYWdlKSk7Ci0KLSAgQVNTRVJUX0VR
KDIsIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzJfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKC0xLCBtZXNz
YWdlLnJlcGVhdGVkX2ludDMyKDApKTsKLSAgLy8gTm90ZTogIEluIEMsIGEgbmVnYXRpdmUgaW50
ZWdlciBsaXRlcmFsIGlzIGFjdHVhbGx5IHRoZSB1bmFyeSBuZWdhdGlvbgotICAvLyAgIG9wZXJh
dG9yIGJlaW5nIGFwcGxpZWQgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyIGxpdGVyYWwsIGFuZCAyMTQ3
NDgzNjQ4IGlzCi0gIC8vICAgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgaW50MzIuICBIb3dldmVyLCBp
dCBpcyBub3Qgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YKLSAgLy8gICB1aW50MzIuICBDb25mdXNpbmds
eSwgdGhpcyBtZWFucyB0aGF0IGV2ZXJ5dGhpbmcgd29ya3MgaWYgd2UgbWFrZSB0aGUKLSAgLy8g
ICBsaXRlcmFsIHVuc2lnbmVkLCBldmVuIHRob3VnaCB3ZSBhcmUgbmVnYXRpbmcgaXQuCi0gIEVY
UEVDVF9FUSgtMjE0NzQ4MzY0OHUsIG1lc3NhZ2UucmVwZWF0ZWRfaW50MzIoMSkpOwotCi0gIEFT
U0VSVF9FUSgyLCBtZXNzYWdlLnJlcGVhdGVkX2ludDY0X3NpemUoKSk7Ci0gIEVYUEVDVF9FUSgt
MSwgbWVzc2FnZS5yZXBlYXRlZF9pbnQ2NCgwKSk7Ci0gIC8vIE5vdGU6ICBJbiBDLCBhIG5lZ2F0
aXZlIGludGVnZXIgbGl0ZXJhbCBpcyBhY3R1YWxseSB0aGUgdW5hcnkgbmVnYXRpb24KLSAgLy8g
ICBvcGVyYXRvciBiZWluZyBhcHBsaWVkIHRvIGEgcG9zaXRpdmUgaW50ZWdlciBsaXRlcmFsLCBh
bmQKLSAgLy8gICA5MjIzMzcyMDM2ODU0Nzc1ODA4IGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIGlu
dDY0LiAgSG93ZXZlciwgaXQgaXMgbm90Ci0gIC8vICAgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdWlu
dDY0LiAgQ29uZnVzaW5nbHksIHRoaXMgbWVhbnMgdGhhdCBldmVyeXRoaW5nCi0gIC8vICAgd29y
a3MgaWYgd2UgbWFrZSB0aGUgbGl0ZXJhbCB1bnNpZ25lZCwgZXZlbiB0aG91Z2ggd2UgYXJlIG5l
Z2F0aW5nIGl0LgotICBFWFBFQ1RfRVEoLUdPT0dMRV9VTE9OR0xPTkcoOTIyMzM3MjAzNjg1NDc3
NTgwOCksIG1lc3NhZ2UucmVwZWF0ZWRfaW50NjQoMSkpOwotCi0gIEFTU0VSVF9FUSgyLCBtZXNz
YWdlLnJlcGVhdGVkX3VpbnQzMl9zaXplKCkpOwotICBFWFBFQ1RfRVEoNDI5NDk2NzI5NXUsIG1l
c3NhZ2UucmVwZWF0ZWRfdWludDMyKDApKTsKLSAgRVhQRUNUX0VRKDIxNDc0ODM2NDh1LCBtZXNz
YWdlLnJlcGVhdGVkX3VpbnQzMigxKSk7Ci0KLSAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0
ZWRfdWludDY0X3NpemUoKSk7Ci0gIEVYUEVDVF9FUShHT09HTEVfVUxPTkdMT05HKDE4NDQ2NzQ0
MDczNzA5NTUxNjE1KSwgbWVzc2FnZS5yZXBlYXRlZF91aW50NjQoMCkpOwotICBFWFBFQ1RfRVEo
R09PR0xFX1VMT05HTE9ORyg5MjIzMzcyMDM2ODU0Nzc1ODA4KSwgbWVzc2FnZS5yZXBlYXRlZF91
aW50NjQoMSkpOwotCi0gIEFTU0VSVF9FUSgxMywgbWVzc2FnZS5yZXBlYXRlZF9kb3VibGVfc2l6
ZSgpKTsKLSAgRVhQRUNUX0VRKDEyMy4wICAgICAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlKDAp
KTsKLSAgRVhQRUNUX0VRKDEyMy41ICAgICAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlKDEpKTsK
LSAgRVhQRUNUX0VRKDAuMTI1ICAgICAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlKDIpKTsKLSAg
RVhQRUNUX0VRKDEuMjNFMTcgICAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlKDMpKTsKLSAgRVhQ
RUNUX0VRKDEuMjM1RTIyICAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlKDQpKTsKLSAgRVhQRUNU
X0VRKDEuMjM1RS0xOCAsIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlKDUpKTsKLSAgRVhQRUNUX0VR
KDEyMy40NTY3ODksIG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlKDYpKTsKLSAgRVhQRUNUX0VRKG1l
c3NhZ2UucmVwZWF0ZWRfZG91YmxlKDcpLCBudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UucmVwZWF0ZWRfZG91YmxlKDgpLCBudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsKLSAgRVhQRUNUX0VRKG1lc3NhZ2UucmVwZWF0ZWRf
ZG91YmxlKDkpLCAtbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7Ci0gIEVYUEVD
VF9FUShtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZSgxMCksIC1udW1lcmljX2xpbWl0czxkb3VibGU+
OjppbmZpbml0eSgpKTsKLSAgRVhQRUNUX1RSVUUoTWF0aExpbWl0czxkb3VibGU+OjpJc05hTiht
ZXNzYWdlLnJlcGVhdGVkX2RvdWJsZSgxMSkpKTsKLSAgRVhQRUNUX1RSVUUoTWF0aExpbWl0czxk
b3VibGU+OjpJc05hTihtZXNzYWdlLnJlcGVhdGVkX2RvdWJsZSgxMikpKTsKLQotICAvLyBOb3Rl
OiAgU2luY2UgdGhlc2Ugc3RyaW5nIGxpdGVyYWxzIGhhdmUgXDAncyBpbiB0aGVtLCB3ZSBtdXN0
IGV4cGxpY2l0bHkKLSAgLy8gICBwYXNzIHRoZWlyIHNpemVzIHRvIHN0cmluZydzIGNvbnN0cnVj
dG9yLgotICBBU1NFUlRfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9zdHJpbmdfc2l6ZSgpKTsKLSAg
RVhQRUNUX0VRKHN0cmluZygiXDAwMFwwMDFcYVxiXGZcblxyXHRcdlxcXCdcIiIsIDEyKSwKLSAg
ICAgICAgICAgIG1lc3NhZ2UucmVwZWF0ZWRfc3RyaW5nKDApKTsKLX0KLQotVEVTVF9GKFRleHRG
b3JtYXRUZXN0LCBQcmludEZpZWxkc0luSW5kZXhPcmRlcikgewotICBwcm90b2J1Zl91bml0dGVz
dDo6VGVzdEZpZWxkT3JkZXJpbmdzIG1lc3NhZ2U7Ci0gIC8vIEZpZWxkcyBhcmUgbGlzdGVkIGlu
IGluZGV4IG9yZGVyIGluc3RlYWQgb2YgZmllbGQgbnVtYmVyLgotICBtZXNzYWdlLnNldF9teV9z
dHJpbmcoIlRlc3QgU3RyaW5nIik7ICAgLy8gRmllbGQgbnVtYmVyIDExCi0gIG1lc3NhZ2Uuc2V0
X215X2ludCgxMjM0NSk7ICAgICAgICAgICAgICAvLyBGaWVsZCBudW1iZXIgMQotICBtZXNzYWdl
LnNldF9teV9mbG9hdCgwLjk5OSk7ICAgICAgICAgICAgLy8gRmllbGQgbnVtYmVyIDEwMQotICBU
ZXh0Rm9ybWF0OjpQcmludGVyIHByaW50ZXI7Ci0gIHN0cmluZyB0ZXh0OwotCi0gIC8vIEJ5IGRl
ZmF1bHQsIHByaW50IGluIGZpZWxkIG51bWJlciBvcmRlci4KLSAgcHJpbnRlci5QcmludFRvU3Ry
aW5nKG1lc3NhZ2UsICZ0ZXh0KTsKLSAgRVhQRUNUX0VRKCJteV9pbnQ6IDEyMzQ1XG5teV9zdHJp
bmc6IFwiVGVzdCBTdHJpbmdcIlxubXlfZmxvYXQ6IDAuOTk5XG4iLAotICAgICAgICAgICAgdGV4
dCk7Ci0KLSAgLy8gUHJpbnQgaW4gaW5kZXggb3JkZXIuCi0gIHByaW50ZXIuU2V0UHJpbnRNZXNz
YWdlRmllbGRzSW5JbmRleE9yZGVyKHRydWUpOwotICBwcmludGVyLlByaW50VG9TdHJpbmcobWVz
c2FnZSwgJnRleHQpOwotICBFWFBFQ1RfRVEoIm15X3N0cmluZzogXCJUZXN0IFN0cmluZ1wiXG5t
eV9pbnQ6IDEyMzQ1XG5teV9mbG9hdDogMC45OTlcbiIsCi0gICAgICAgICAgICB0ZXh0KTsKLX0K
LQotY2xhc3MgVGV4dEZvcm1hdFBhcnNlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0g
cHJvdGVjdGVkOgotICB2b2lkIEV4cGVjdEZhaWx1cmUoY29uc3Qgc3RyaW5nJiBpbnB1dCwgY29u
c3Qgc3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZSwKLSAgICAgICAgICAgICAgICAgICAgIGludCBj
b2wpIHsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPHVuaXR0ZXN0OjpUZXN0QWxs
VHlwZXM+IHByb3RvKG5ldyB1bml0dGVzdDo6VGVzdEFsbFR5cGVzKTsKLSAgICBFeHBlY3RGYWls
dXJlKGlucHV0LCBtZXNzYWdlLCBsaW5lLCBjb2wsIHByb3RvLmdldCgpKTsKLSAgfQotCi0gIHZv
aWQgRXhwZWN0RmFpbHVyZShjb25zdCBzdHJpbmcmIGlucHV0LCBjb25zdCBzdHJpbmcmIG1lc3Nh
Z2UsIGludCBsaW5lLAotICAgICAgICAgICAgICAgICAgICAgaW50IGNvbCwgTWVzc2FnZSogcHJv
dG8pIHsKLSAgICBFeHBlY3RNZXNzYWdlKGlucHV0LCBtZXNzYWdlLCBsaW5lLCBjb2wsIHByb3Rv
LCBmYWxzZSk7Ci0gIH0KLQotICB2b2lkIEV4cGVjdE1lc3NhZ2UoY29uc3Qgc3RyaW5nJiBpbnB1
dCwgY29uc3Qgc3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZSwKLSAgICAgICAgICAgICAgICAgICAg
IGludCBjb2wsIE1lc3NhZ2UqIHByb3RvLCBib29sIGV4cGVjdGVkX3Jlc3VsdCkgewotICAgIFRl
eHRGb3JtYXQ6OlBhcnNlciBwYXJzZXI7Ci0gICAgTW9ja0Vycm9yQ29sbGVjdG9yIGVycm9yX2Nv
bGxlY3RvcjsKLSAgICBwYXJzZXIuUmVjb3JkRXJyb3JzVG8oJmVycm9yX2NvbGxlY3Rvcik7Ci0g
ICAgRVhQRUNUX0VRKGV4cGVjdGVkX3Jlc3VsdCwgcGFyc2VyLlBhcnNlRnJvbVN0cmluZyhpbnB1
dCwgcHJvdG8pKQotICAgICAgICA8PCBpbnB1dCA8PCAiIC0+ICIgPDwgcHJvdG8tPkRlYnVnU3Ry
aW5nKCk7Ci0gICAgRVhQRUNUX0VRKFNpbXBsZUl0b2EobGluZSkgKyAiOiIgKyBTaW1wbGVJdG9h
KGNvbCkgKyAiOiAiICsgbWVzc2FnZSArICJcbiIsCi0gICAgICAgICAgICAgIGVycm9yX2NvbGxl
Y3Rvci50ZXh0Xyk7Ci0gIH0KLQotICB2b2lkIEV4cGVjdFN1Y2Nlc3NBbmRUcmVlKGNvbnN0IHN0
cmluZyYgaW5wdXQsIE1lc3NhZ2UqIHByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRleHRGb3JtYXQ6OlBhcnNlSW5mb1RyZWUqIGluZm9fdHJlZSkgewotICAgIFRleHRGb3JtYXQ6
OlBhcnNlciBwYXJzZXI7Ci0gICAgTW9ja0Vycm9yQ29sbGVjdG9yIGVycm9yX2NvbGxlY3RvcjsK
LSAgICBwYXJzZXIuUmVjb3JkRXJyb3JzVG8oJmVycm9yX2NvbGxlY3Rvcik7Ci0gICAgcGFyc2Vy
LldyaXRlTG9jYXRpb25zVG8oaW5mb190cmVlKTsKLQotICAgIEVYUEVDVF9UUlVFKHBhcnNlci5Q
YXJzZUZyb21TdHJpbmcoaW5wdXQsIHByb3RvKSk7Ci0gIH0KLQotICB2b2lkIEV4cGVjdExvY2F0
aW9uKFRleHRGb3JtYXQ6OlBhcnNlSW5mb1RyZWUqIHRyZWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRGVzY3JpcHRvciogZCwgY29uc3Qgc3RyaW5nJiBmaWVsZF9uYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbmRleCwgaW50IGxpbmUsIGludCBjb2x1bW4pIHsKLSAgICBU
ZXh0Rm9ybWF0OjpQYXJzZUxvY2F0aW9uIGxvY2F0aW9uID0gdHJlZS0+R2V0TG9jYXRpb24oCi0g
ICAgICAgIGQtPkZpbmRGaWVsZEJ5TmFtZShmaWVsZF9uYW1lKSwgaW5kZXgpOwotICAgIEVYUEVD
VF9FUShsaW5lLCBsb2NhdGlvbi5saW5lKTsKLSAgICBFWFBFQ1RfRVEoY29sdW1uLCBsb2NhdGlv
bi5jb2x1bW4pOwotICB9Ci0KLSAgLy8gQW4gZXJyb3IgY29sbGVjdG9yIHdoaWNoIHNpbXBseSBj
b25jYXRlbmF0ZXMgYWxsIGl0cyBlcnJvcnMgaW50byBhIGJpZwotICAvLyBibG9jayBvZiB0ZXh0
IHdoaWNoIGNhbiBiZSBjaGVja2VkLgotICBjbGFzcyBNb2NrRXJyb3JDb2xsZWN0b3IgOiBwdWJs
aWMgaW86OkVycm9yQ29sbGVjdG9yIHsKLSAgIHB1YmxpYzoKLSAgICBNb2NrRXJyb3JDb2xsZWN0
b3IoKSB7fQotICAgIH5Nb2NrRXJyb3JDb2xsZWN0b3IoKSB7fQotCi0gICAgc3RyaW5nIHRleHRf
OwotCi0gICAgLy8gaW1wbGVtZW50cyBFcnJvckNvbGxlY3RvciAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgdm9pZCBBZGRFcnJvcihpbnQgbGluZSwgaW50IGNvbHVt
biwgY29uc3Qgc3RyaW5nJiBtZXNzYWdlKSB7Ci0gICAgICBzdHJpbmdzOjpTdWJzdGl0dXRlQW5k
QXBwZW5kKCZ0ZXh0XywgIiQwOiQxOiAkMlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZSArIDEsIGNvbHVtbiArIDEsIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZv
aWQgQWRkV2FybmluZyhpbnQgbGluZSwgaW50IGNvbHVtbiwgY29uc3Qgc3RyaW5nJiBtZXNzYWdl
KSB7Ci0gICAgICBBZGRFcnJvcihsaW5lLCBjb2x1bW4sICJXQVJOSU5HOiIgKyBtZXNzYWdlKTsK
LSAgICB9Ci0gIH07Ci19OwotCi1URVNUX0YoVGV4dEZvcm1hdFBhcnNlclRlc3QsIFBhcnNlSW5m
b1RyZWVCdWlsZGluZykgewotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPHVuaXR0ZXN0
OjpUZXN0QWxsVHlwZXM+IG1lc3NhZ2UobmV3IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMpOwotICBj
b25zdCBEZXNjcmlwdG9yKiBkID0gbWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpOwotCi0gIHN0cmlu
ZyBzdHJpbmdEYXRhID0KLSAgICAgICJvcHRpb25hbF9pbnQzMjogMVxuIgotICAgICAgIm9wdGlv
bmFsX2ludDY0OiAyXG4iCi0gICAgICAiICBvcHRpb25hbF9kb3VibGU6IDIuNFxuIgotICAgICAg
InJlcGVhdGVkX2ludDMyOiA1XG4iCi0gICAgICAicmVwZWF0ZWRfaW50MzI6IDEwXG4iCi0gICAg
ICAib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgPFxuIgotICAgICAgIiAgYmI6IDc4XG4iCi0gICAg
ICAiPlxuIgotICAgICAgInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIDxcbiIKLSAgICAgICIgIGJi
OiA3OVxuIgotICAgICAgIj5cbiIKLSAgICAgICJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSA8XG4i
Ci0gICAgICAiICBiYjogODBcbiIKLSAgICAgICI+IjsKLQotCi0gIFRleHRGb3JtYXQ6OlBhcnNl
SW5mb1RyZWUgdHJlZTsKLSAgRXhwZWN0U3VjY2Vzc0FuZFRyZWUoc3RyaW5nRGF0YSwgbWVzc2Fn
ZS5nZXQoKSwgJnRyZWUpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSB0cmVlIGhhcyB0aGUgY29y
cmVjdCBwb3NpdGlvbnMuCi0gIEV4cGVjdExvY2F0aW9uKCZ0cmVlLCBkLCAib3B0aW9uYWxfaW50
MzIiLCAtMSwgMCwgMCk7Ci0gIEV4cGVjdExvY2F0aW9uKCZ0cmVlLCBkLCAib3B0aW9uYWxfaW50
NjQiLCAtMSwgMSwgMCk7Ci0gIEV4cGVjdExvY2F0aW9uKCZ0cmVlLCBkLCAib3B0aW9uYWxfZG91
YmxlIiwgLTEsIDIsIDIpOwotCi0gIEV4cGVjdExvY2F0aW9uKCZ0cmVlLCBkLCAicmVwZWF0ZWRf
aW50MzIiLCAwLCAzLCAwKTsKLSAgRXhwZWN0TG9jYXRpb24oJnRyZWUsIGQsICJyZXBlYXRlZF9p
bnQzMiIsIDEsIDQsIDApOwotCi0gIEV4cGVjdExvY2F0aW9uKCZ0cmVlLCBkLCAib3B0aW9uYWxf
bmVzdGVkX21lc3NhZ2UiLCAtMSwgNSwgMCk7Ci0gIEV4cGVjdExvY2F0aW9uKCZ0cmVlLCBkLCAi
cmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UiLCAwLCA4LCAwKTsKLSAgRXhwZWN0TG9jYXRpb24oJnRy
ZWUsIGQsICJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSIsIDEsIDExLCAwKTsKLQotICAvLyBDaGVj
ayBmb3IgZmllbGRzIG5vdCBzZXQuIEZvciBhbiBpbnZhbGlkIGZpZWxkLCB0aGUgbG9jYXRpb24g
cmV0dXJuZWQKLSAgLy8gc2hvdWxkIGJlIC0xLCAtMS4KLSAgRXhwZWN0TG9jYXRpb24oJnRyZWUs
IGQsICJyZXBlYXRlZF9pbnQ2NCIsIDAsIC0xLCAtMSk7Ci0gIEV4cGVjdExvY2F0aW9uKCZ0cmVl
LCBkLCAicmVwZWF0ZWRfaW50MzIiLCA2LCAtMSwgLTEpOwotICBFeHBlY3RMb2NhdGlvbigmdHJl
ZSwgZCwgInNvbWVfdW5rbm93bl9maWVsZCIsIC0xLCAtMSwgLTEpOwotCi0gIC8vIFZlcmlmeSBp
bnNpZGUgdGhlIG5lc3RlZCBtZXNzYWdlLgotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG5lc3Rl
ZF9maWVsZCA9Ci0gICAgICBkLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX25lc3RlZF9tZXNz
YWdlIik7Ci0KLSAgVGV4dEZvcm1hdDo6UGFyc2VJbmZvVHJlZSogbmVzdGVkX3RyZWUgPQotICAg
ICAgdHJlZS5HZXRUcmVlRm9yTmVzdGVkKG5lc3RlZF9maWVsZCwgLTEpOwotICBFeHBlY3RMb2Nh
dGlvbihuZXN0ZWRfdHJlZSwgbmVzdGVkX2ZpZWxkLT5tZXNzYWdlX3R5cGUoKSwgImJiIiwgLTEs
IDYsIDIpOwotCi0gIC8vIFZlcmlmeSBpbnNpZGUgYW5vdGhlciBuZXN0ZWQgbWVzc2FnZS4KLSAg
bmVzdGVkX2ZpZWxkID0gZC0+RmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZSIpOwotICBuZXN0ZWRfdHJlZSA9IHRyZWUuR2V0VHJlZUZvck5lc3RlZChuZXN0ZWRfZmllbGQs
IDApOwotICBFeHBlY3RMb2NhdGlvbihuZXN0ZWRfdHJlZSwgbmVzdGVkX2ZpZWxkLT5tZXNzYWdl
X3R5cGUoKSwgImJiIiwgLTEsIDksIDIpOwotCi0gIG5lc3RlZF90cmVlID0gdHJlZS5HZXRUcmVl
Rm9yTmVzdGVkKG5lc3RlZF9maWVsZCwgMSk7Ci0gIEV4cGVjdExvY2F0aW9uKG5lc3RlZF90cmVl
LCBuZXN0ZWRfZmllbGQtPm1lc3NhZ2VfdHlwZSgpLCAiYmIiLCAtMSwgMTIsIDIpOwotCi0gIC8v
IFZlcmlmeSBhIE5VTEwgdHJlZSBmb3IgYW4gdW5rbm93biBuZXN0ZWQgZmllbGQuCi0gIFRleHRG
b3JtYXQ6OlBhcnNlSW5mb1RyZWUqIHVua25vd25fbmVzdGVkX3RyZWUgPQotICAgICAgdHJlZS5H
ZXRUcmVlRm9yTmVzdGVkKG5lc3RlZF9maWVsZCwgMik7Ci0KLSAgRVhQRUNUX0VRKE5VTEwsIHVu
a25vd25fbmVzdGVkX3RyZWUpOwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFBhcnNlclRlc3QsIFBh
cnNlRmllbGRWYWx1ZUZyb21TdHJpbmcpIHsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0
cjx1bml0dGVzdDo6VGVzdEFsbFR5cGVzPiBtZXNzYWdlKG5ldyB1bml0dGVzdDo6VGVzdEFsbFR5
cGVzKTsKLSAgY29uc3QgRGVzY3JpcHRvciogZCA9IG1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKTsK
LQotI2RlZmluZSBFWFBFQ1RfRklFTEQobmFtZSwgdmFsdWUsIHZhbHVlc3RyaW5nKSBcCi0gIEVY
UEVDVF9UUlVFKFRleHRGb3JtYXQ6OlBhcnNlRmllbGRWYWx1ZUZyb21TdHJpbmcoIFwKLSAgICB2
YWx1ZXN0cmluZywgZC0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF8iICNuYW1lKSwgbWVzc2Fn
ZS5nZXQoKSkpOyBcCi0gIEVYUEVDVF9FUSh2YWx1ZSwgbWVzc2FnZS0+b3B0aW9uYWxfIyNuYW1l
KCkpOyBcCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UtPmhhc19vcHRpb25hbF8jI25hbWUoKSk7Ci0K
LSNkZWZpbmUgRVhQRUNUX0JPT0xfRklFTEQobmFtZSwgdmFsdWUsIHZhbHVlc3RyaW5nKSBcCi0g
IEVYUEVDVF9UUlVFKFRleHRGb3JtYXQ6OlBhcnNlRmllbGRWYWx1ZUZyb21TdHJpbmcoIFwKLSAg
ICB2YWx1ZXN0cmluZywgZC0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF8iICNuYW1lKSwgbWVz
c2FnZS5nZXQoKSkpOyBcCi0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UtPm9wdGlvbmFsXyMjbmFtZSgp
ID09IHZhbHVlKTsgXAotICBFWFBFQ1RfVFJVRShtZXNzYWdlLT5oYXNfb3B0aW9uYWxfIyNuYW1l
KCkpOwotCi0jZGVmaW5lIEVYUEVDVF9GTE9BVF9GSUVMRChuYW1lLCB2YWx1ZSwgdmFsdWVzdHJp
bmcpIFwKLSAgRVhQRUNUX1RSVUUoVGV4dEZvcm1hdDo6UGFyc2VGaWVsZFZhbHVlRnJvbVN0cmlu
ZyggXAotICAgIHZhbHVlc3RyaW5nLCBkLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsXyIgI25h
bWUpLCBtZXNzYWdlLmdldCgpKSk7IFwKLSAgRVhQRUNUX0ZMT0FUX0VRKHZhbHVlLCBtZXNzYWdl
LT5vcHRpb25hbF8jI25hbWUoKSk7IFwKLSAgRVhQRUNUX1RSVUUobWVzc2FnZS0+aGFzX29wdGlv
bmFsXyMjbmFtZSgpKTsKLQotI2RlZmluZSBFWFBFQ1RfRE9VQkxFX0ZJRUxEKG5hbWUsIHZhbHVl
LCB2YWx1ZXN0cmluZykgXAotICBFWFBFQ1RfVFJVRShUZXh0Rm9ybWF0OjpQYXJzZUZpZWxkVmFs
dWVGcm9tU3RyaW5nKCBcCi0gICAgdmFsdWVzdHJpbmcsIGQtPkZpbmRGaWVsZEJ5TmFtZSgib3B0
aW9uYWxfIiAjbmFtZSksIG1lc3NhZ2UuZ2V0KCkpKTsgXAotICBFWFBFQ1RfRE9VQkxFX0VRKHZh
bHVlLCBtZXNzYWdlLT5vcHRpb25hbF8jI25hbWUoKSk7IFwKLSAgRVhQRUNUX1RSVUUobWVzc2Fn
ZS0+aGFzX29wdGlvbmFsXyMjbmFtZSgpKTsKLQotI2RlZmluZSBFWFBFQ1RfSU5WQUxJRChuYW1l
LCB2YWx1ZXN0cmluZykgXAotICBFWFBFQ1RfRkFMU0UoVGV4dEZvcm1hdDo6UGFyc2VGaWVsZFZh
bHVlRnJvbVN0cmluZyggXAotICAgIHZhbHVlc3RyaW5nLCBkLT5GaW5kRmllbGRCeU5hbWUoIm9w
dGlvbmFsXyIgI25hbWUpLCBtZXNzYWdlLmdldCgpKSk7Ci0KLSAgLy8gaW50MzIKLSAgRVhQRUNU
X0ZJRUxEKGludDMyLCAxLCAiMSIpOwotICBFWFBFQ1RfRklFTEQoaW50MzIsIC0xLCAiLTEiKTsK
LSAgRVhQRUNUX0ZJRUxEKGludDMyLCAweDEyMzQsICIweDEyMzQiKTsKLSAgRVhQRUNUX0lOVkFM
SUQoaW50MzIsICJhIik7Ci0gIEVYUEVDVF9JTlZBTElEKGludDMyLCAiOTk5OTk5OTk5OTk5OTk5
OTk5OTk5OTk5OTk5OTk5OTk5OTk5Iik7Ci0gIEVYUEVDVF9JTlZBTElEKGludDMyLCAiMSwyIik7
Ci0KLSAgLy8gaW50NjQKLSAgRVhQRUNUX0ZJRUxEKGludDY0LCAxLCAiMSIpOwotICBFWFBFQ1Rf
RklFTEQoaW50NjQsIC0xLCAiLTEiKTsKLSAgRVhQRUNUX0ZJRUxEKGludDY0LCAweDEyMzQ1Njc4
MTIzNDU2NzhMTCwgIjB4MTIzNDU2NzgxMjM0NTY3OCIpOwotICBFWFBFQ1RfSU5WQUxJRChpbnQ2
NCwgImEiKTsKLSAgRVhQRUNUX0lOVkFMSUQoaW50NjQsICI5OTk5OTk5OTk5OTk5OTk5OTk5OTk5
OTk5OTk5OTk5OTk5OTkiKTsKLSAgRVhQRUNUX0lOVkFMSUQoaW50NjQsICIxLDIiKTsKLQotICAv
LyB1aW50NjQKLSAgRVhQRUNUX0ZJRUxEKHVpbnQ2NCwgMSwgIjEiKTsKLSAgRVhQRUNUX0ZJRUxE
KHVpbnQ2NCwgMHhmMjM0NTY3ODEyMzQ1Njc4VUxMLCAiMHhmMjM0NTY3ODEyMzQ1Njc4Iik7Ci0g
IEVYUEVDVF9JTlZBTElEKHVpbnQ2NCwgIi0xIik7Ci0gIEVYUEVDVF9JTlZBTElEKHVpbnQ2NCwg
ImEiKTsKLSAgRVhQRUNUX0lOVkFMSUQodWludDY0LCAiOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5
OTk5OTk5OTk5OTk5Iik7Ci0gIEVYUEVDVF9JTlZBTElEKHVpbnQ2NCwgIjEsMiIpOwotCi0gIC8v
IGZpeGVkMzIKLSAgRVhQRUNUX0ZJRUxEKGZpeGVkMzIsIDEsICIxIik7Ci0gIEVYUEVDVF9GSUVM
RChmaXhlZDMyLCAweDEyMzQ1Njc4LCAiMHgxMjM0NTY3OCIpOwotICBFWFBFQ1RfSU5WQUxJRChm
aXhlZDMyLCAiLTEiKTsKLSAgRVhQRUNUX0lOVkFMSUQoZml4ZWQzMiwgImEiKTsKLSAgRVhQRUNU
X0lOVkFMSUQoZml4ZWQzMiwgIjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSIp
OwotICBFWFBFQ1RfSU5WQUxJRChmaXhlZDMyLCAiMSwyIik7Ci0KLSAgLy8gZml4ZWQ2NAotICBF
WFBFQ1RfRklFTEQoZml4ZWQ2NCwgMSwgIjEiKTsKLSAgRVhQRUNUX0ZJRUxEKGZpeGVkNjQsIDB4
MTIzNDU2NzgxMjM0NTY3OFVMTCwgIjB4MTIzNDU2NzgxMjM0NTY3OCIpOwotICBFWFBFQ1RfSU5W
QUxJRChmaXhlZDY0LCAiLTEiKTsKLSAgRVhQRUNUX0lOVkFMSUQoZml4ZWQ2NCwgImEiKTsKLSAg
RVhQRUNUX0lOVkFMSUQoZml4ZWQ2NCwgIjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5
OTk5OSIpOwotICBFWFBFQ1RfSU5WQUxJRChmaXhlZDY0LCAiMSwyIik7Ci0KLSAgLy8gYm9vbAot
ICBFWFBFQ1RfQk9PTF9GSUVMRChib29sLCB0cnVlLCAidHJ1ZSIpOwotICBFWFBFQ1RfQk9PTF9G
SUVMRChib29sLCBmYWxzZSwgImZhbHNlIik7Ci0gIEVYUEVDVF9CT09MX0ZJRUxEKGJvb2wsIHRy
dWUsICIxIik7Ci0gIEVYUEVDVF9CT09MX0ZJRUxEKGJvb2wsIHRydWUsICJ0Iik7Ci0gIEVYUEVD
VF9CT09MX0ZJRUxEKGJvb2wsIGZhbHNlLCAiMCIpOwotICBFWFBFQ1RfQk9PTF9GSUVMRChib29s
LCBmYWxzZSwgImYiKTsKLSAgRVhQRUNUX0ZJRUxEKGJvb2wsIHRydWUsICJUcnVlIik7Ci0gIEVY
UEVDVF9GSUVMRChib29sLCBmYWxzZSwgIkZhbHNlIik7Ci0gIEVYUEVDVF9JTlZBTElEKGJvb2ws
ICJ0UnVlIik7Ci0gIEVYUEVDVF9JTlZBTElEKGJvb2wsICJmYUxzZSIpOwotICBFWFBFQ1RfSU5W
QUxJRChib29sLCAiMiIpOwotICBFWFBFQ1RfSU5WQUxJRChib29sLCAiLTAiKTsKLSAgRVhQRUNU
X0lOVkFMSUQoYm9vbCwgIm9uIik7Ci0gIEVYUEVDVF9JTlZBTElEKGJvb2wsICJhIik7Ci0KLSAg
Ly8gZmxvYXQKLSAgRVhQRUNUX0ZJRUxEKGZsb2F0LCAxLCAiMSIpOwotICBFWFBFQ1RfRkxPQVRf
RklFTEQoZmxvYXQsIDEuNSwgIjEuNSIpOwotICBFWFBFQ1RfRkxPQVRfRklFTEQoZmxvYXQsIDEu
NWUzLCAiMS41ZTMiKTsKLSAgRVhQRUNUX0ZMT0FUX0ZJRUxEKGZsb2F0LCAtNC41NSwgIi00LjU1
Iik7Ci0gIEVYUEVDVF9JTlZBTElEKGZsb2F0LCAiYSIpOwotICBFWFBFQ1RfSU5WQUxJRChmbG9h
dCwgIjEsMiIpOwotCi0gIC8vIGRvdWJsZQotICBFWFBFQ1RfRklFTEQoZG91YmxlLCAxLCAiMSIp
OwotICBFWFBFQ1RfRklFTEQoZG91YmxlLCAtMSwgIi0xIik7Ci0gIEVYUEVDVF9ET1VCTEVfRklF
TEQoZG91YmxlLCAyLjMsICIyLjMiKTsKLSAgRVhQRUNUX0RPVUJMRV9GSUVMRChkb3VibGUsIDNl
NSwgIjNlNSIpOwotICBFWFBFQ1RfSU5WQUxJRChkb3VibGUsICJhIik7Ci0gIEVYUEVDVF9JTlZB
TElEKGRvdWJsZSwgIjEsMiIpOwotICAvLyBSZWplY3RzIGhleCBhbmQgb2N0IG51bWJlcnMgZm9y
IGEgZG91YmxlIGZpZWxkLgotICBFWFBFQ1RfSU5WQUxJRChkb3VibGUsICIweGYiKTsKLSAgRVhQ
RUNUX0lOVkFMSUQoZG91YmxlLCAiMDEyIik7Ci0KLSAgLy8gc3RyaW5nCi0gIEVYUEVDVF9GSUVM
RChzdHJpbmcsICJoZWxsbyIsICJcImhlbGxvXCIiKTsKLSAgRVhQRUNUX0ZJRUxEKHN0cmluZywg
Ii0xLjg3IiwgIictMS44NyciKTsKLSAgRVhQRUNUX0lOVkFMSUQoc3RyaW5nLCAiaGVsbG8iKTsg
IC8vIHdpdGhvdXQgcXVvdGUgZm9yIHZhbHVlCi0KLSAgLy8gZW51bQotICBFWFBFQ1RfRklFTEQo
bmVzdGVkX2VudW0sIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkJBUiwgIkJBUiIpOwotICBFWFBF
Q1RfRklFTEQobmVzdGVkX2VudW0sIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OkJBWiwKLSAgICAg
ICAgICAgICAgIFNpbXBsZUl0b2EodW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6QkFaKSk7Ci0gIEVY
UEVDVF9JTlZBTElEKG5lc3RlZF9lbnVtLCAiRk9PQkFSIik7Ci0KLSAgLy8gbWVzc2FnZQotICBF
WFBFQ1RfVFJVRShUZXh0Rm9ybWF0OjpQYXJzZUZpZWxkVmFsdWVGcm9tU3RyaW5nKAotICAgICI8
YmI6MTI+IiwgZC0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSIpLCBt
ZXNzYWdlLmdldCgpKSk7Ci0gIEVYUEVDVF9FUSgxMiwgbWVzc2FnZS0+b3B0aW9uYWxfbmVzdGVk
X21lc3NhZ2UoKS5iYigpKTsgXAotICBFWFBFQ1RfVFJVRShtZXNzYWdlLT5oYXNfb3B0aW9uYWxf
bmVzdGVkX21lc3NhZ2UoKSk7Ci0gIEVYUEVDVF9JTlZBTElEKG5lc3RlZF9tZXNzYWdlLCAiYW55
Iik7Ci0KLSN1bmRlZiBFWFBFQ1RfRklFTEQKLSN1bmRlZiBFWFBFQ1RfQk9PTF9GSUVMRAotI3Vu
ZGVmIEVYUEVDVF9GTE9BVF9GSUVMRAotI3VuZGVmIEVYUEVDVF9ET1VCTEVfRklFTEQKLSN1bmRl
ZiBFWFBFQ1RfSU5WQUxJRAotfQotCi0KLVRFU1RfRihUZXh0Rm9ybWF0UGFyc2VyVGVzdCwgSW52
YWxpZFRva2VuKSB7Ci0gIEV4cGVjdEZhaWx1cmUoIm9wdGlvbmFsX2Jvb2w6IHRydWVcbi01XG4i
LCAiRXhwZWN0ZWQgaWRlbnRpZmllci4iLAotICAgICAgICAgICAgICAgIDIsIDEpOwotCi0gIEV4
cGVjdEZhaWx1cmUoIm9wdGlvbmFsX2Jvb2w6IHRydWUhXG4iLCAiRXhwZWN0ZWQgaWRlbnRpZmll
ci4iLCAxLCAyMCk7Ci0gIEV4cGVjdEZhaWx1cmUoIlwic29tZSBzdHJpbmdcIiIsICJFeHBlY3Rl
ZCBpZGVudGlmaWVyLiIsIDEsIDEpOwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFBhcnNlclRlc3Qs
IEludmFsaWRGaWVsZE5hbWUpIHsKLSAgRXhwZWN0RmFpbHVyZSgKLSAgICAgICJpbnZhbGlkX2Zp
ZWxkOiBzb21ldmFsdWVcbiIsCi0gICAgICAiTWVzc2FnZSB0eXBlIFwicHJvdG9idWZfdW5pdHRl
c3QuVGVzdEFsbFR5cGVzXCIgaGFzIG5vIGZpZWxkIG5hbWVkICIKLSAgICAgICJcImludmFsaWRf
ZmllbGRcIi4iLAotICAgICAgMSwgMTQpOwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFBhcnNlclRl
c3QsIEludmFsaWRDYXBpdGFsaXphdGlvbikgewotICAvLyBXZSByZXF1aXJlIHRoYXQgZ3JvdXAg
bmFtZXMgYmUgZXhhY3RseSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgLnByb3RvLgotICBFeHBlY3RG
YWlsdXJlKAotICAgICAgIm9wdGlvbmFsZ3JvdXAge1xuYTogMTVcbn1cbiIsCi0gICAgICAiTWVz
c2FnZSB0eXBlIFwicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzXCIgaGFzIG5vIGZpZWxk
IG5hbWVkICIKLSAgICAgICJcIm9wdGlvbmFsZ3JvdXBcIi4iLAotICAgICAgMSwgMTUpOwotICBF
eHBlY3RGYWlsdXJlKAotICAgICAgIk9QVElPTkFMZ3JvdXAge1xuYTogMTVcbn1cbiIsCi0gICAg
ICAiTWVzc2FnZSB0eXBlIFwicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzXCIgaGFzIG5v
IGZpZWxkIG5hbWVkICIKLSAgICAgICJcIk9QVElPTkFMZ3JvdXBcIi4iLAotICAgICAgMSwgMTUp
OwotICBFeHBlY3RGYWlsdXJlKAotICAgICAgIk9wdGlvbmFsX0RvdWJsZTogMTAuMFxuIiwKLSAg
ICAgICJNZXNzYWdlIHR5cGUgXCJwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXNcIiBoYXMg
bm8gZmllbGQgbmFtZWQgIgotICAgICAgIlwiT3B0aW9uYWxfRG91YmxlXCIuIiwKLSAgICAgIDEs
IDE2KTsKLX0KLQotVEVTVF9GKFRleHRGb3JtYXRQYXJzZXJUZXN0LCBBbGxvd0lnbm9yZUNhcGl0
YWxpemF0aW9uRXJyb3IpIHsKLSAgVGV4dEZvcm1hdDo6UGFyc2VyIHBhcnNlcjsKLSAgcHJvdG9i
dWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBwcm90bzsKLQotICAvLyBUaGVzZSBmaWVsZHMgaGF2
ZSBhIG1pc21hdGNoaW5nIGNhc2UuCi0gIEVYUEVDVF9GQUxTRShwYXJzZXIuUGFyc2VGcm9tU3Ry
aW5nKCJPcHRpb25hbF9Eb3VibGU6IDEwLjAiLCAmcHJvdG8pKTsKLSAgRVhQRUNUX0ZBTFNFKHBh
cnNlci5QYXJzZUZyb21TdHJpbmcoIm9QdElvTmFMZ1JvVXAgeyBhOiAxNSB9IiwgJnByb3RvKSk7
Ci0KLSAgLy8gLi4uIGJ1dCBhcmUgcGFyc2VkIGNvcnJlY3RseSBpZiB3ZSBtYXRjaCBjYXNlIGlu
c2Vuc2l0aXZlLgotICBwYXJzZXIuQWxsb3dDYXNlSW5zZW5zaXRpdmVGaWVsZCh0cnVlKTsKLSAg
RVhQRUNUX1RSVUUocGFyc2VyLlBhcnNlRnJvbVN0cmluZygiT3B0aW9uYWxfRG91YmxlOiAxMC4w
IiwgJnByb3RvKSk7Ci0gIEVYUEVDVF9FUSgxMC4wLCBwcm90by5vcHRpb25hbF9kb3VibGUoKSk7
Ci0gIEVYUEVDVF9UUlVFKHBhcnNlci5QYXJzZUZyb21TdHJpbmcoIm9QdElvTmFMZ1JvVXAgeyBh
OiAxNSB9IiwgJnByb3RvKSk7Ci0gIEVYUEVDVF9FUSgxNSwgcHJvdG8ub3B0aW9uYWxncm91cCgp
LmEoKSk7Ci19Ci0KLVRFU1RfRihUZXh0Rm9ybWF0UGFyc2VyVGVzdCwgSW52YWxpZEZpZWxkVmFs
dWVzKSB7Ci0gIC8vIEludmFsaWQgdmFsdWVzIGZvciBhIGRvdWJsZS9mbG9hdCBmaWVsZC4KLSAg
RXhwZWN0RmFpbHVyZSgib3B0aW9uYWxfZG91YmxlOiBcImhlbGxvXCJcbiIsICJFeHBlY3RlZCBk
b3VibGUuIiwgMSwgMTgpOwotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25hbF9kb3VibGU6IHRydWVc
biIsICJFeHBlY3RlZCBkb3VibGUuIiwgMSwgMTgpOwotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25h
bF9kb3VibGU6ICFcbiIsICJFeHBlY3RlZCBkb3VibGUuIiwgMSwgMTgpOwotICBFeHBlY3RGYWls
dXJlKCJvcHRpb25hbF9kb3VibGUge1xuICBcbn1cbiIsICJFeHBlY3RlZCBcIjpcIiwgZm91bmQg
XCJ7XCIuIiwKLSAgICAgICAgICAgICAgICAxLCAxNyk7Ci0KLSAgLy8gSW52YWxpZCB2YWx1ZXMg
Zm9yIGEgc2lnbmVkIGludGVnZXIgZmllbGQuCi0gIEV4cGVjdEZhaWx1cmUoIm9wdGlvbmFsX2lu
dDMyOiBcImhlbGxvXCJcbiIsICJFeHBlY3RlZCBpbnRlZ2VyLiIsIDEsIDE3KTsKLSAgRXhwZWN0
RmFpbHVyZSgib3B0aW9uYWxfaW50MzI6IHRydWVcbiIsICJFeHBlY3RlZCBpbnRlZ2VyLiIsIDEs
IDE3KTsKLSAgRXhwZWN0RmFpbHVyZSgib3B0aW9uYWxfaW50MzI6IDQuNVxuIiwgIkV4cGVjdGVk
IGludGVnZXIuIiwgMSwgMTcpOwotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25hbF9pbnQzMjogIVxu
IiwgIkV4cGVjdGVkIGludGVnZXIuIiwgMSwgMTcpOwotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25h
bF9pbnQzMiB7XG4gXG59XG4iLCAiRXhwZWN0ZWQgXCI6XCIsIGZvdW5kIFwie1wiLiIsCi0gICAg
ICAgICAgICAgICAgMSwgMTYpOwotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25hbF9pbnQzMjogMHg4
MDAwMDAwMFxuIiwKLSAgICAgICAgICAgICAgICAiSW50ZWdlciBvdXQgb2YgcmFuZ2UuIiwgMSwg
MTcpOwotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25hbF9pbnQ2NDogMHg4MDAwMDAwMDAwMDAwMDAw
XG4iLAotICAgICAgICAgICAgICAgICJJbnRlZ2VyIG91dCBvZiByYW5nZS4iLCAxLCAxNyk7Ci0g
IEV4cGVjdEZhaWx1cmUoIm9wdGlvbmFsX2ludDMyOiAtMHg4MDAwMDAwMVxuIiwKLSAgICAgICAg
ICAgICAgICAiSW50ZWdlciBvdXQgb2YgcmFuZ2UuIiwgMSwgMTgpOwotICBFeHBlY3RGYWlsdXJl
KCJvcHRpb25hbF9pbnQ2NDogLTB4ODAwMDAwMDAwMDAwMDAwMVxuIiwKLSAgICAgICAgICAgICAg
ICAiSW50ZWdlciBvdXQgb2YgcmFuZ2UuIiwgMSwgMTgpOwotCi0gIC8vIEludmFsaWQgdmFsdWVz
IGZvciBhbiB1bnNpZ25lZCBpbnRlZ2VyIGZpZWxkLgotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25h
bF91aW50NjQ6IFwiaGVsbG9cIlxuIiwgIkV4cGVjdGVkIGludGVnZXIuIiwgMSwgMTgpOwotICBF
eHBlY3RGYWlsdXJlKCJvcHRpb25hbF91aW50NjQ6IHRydWVcbiIsICJFeHBlY3RlZCBpbnRlZ2Vy
LiIsIDEsIDE4KTsKLSAgRXhwZWN0RmFpbHVyZSgib3B0aW9uYWxfdWludDY0OiA0LjVcbiIsICJF
eHBlY3RlZCBpbnRlZ2VyLiIsIDEsIDE4KTsKLSAgRXhwZWN0RmFpbHVyZSgib3B0aW9uYWxfdWlu
dDY0OiAtNVxuIiwgIkV4cGVjdGVkIGludGVnZXIuIiwgMSwgMTgpOwotICBFeHBlY3RGYWlsdXJl
KCJvcHRpb25hbF91aW50NjQ6ICFcbiIsICJFeHBlY3RlZCBpbnRlZ2VyLiIsIDEsIDE4KTsKLSAg
RXhwZWN0RmFpbHVyZSgib3B0aW9uYWxfdWludDY0IHtcbiBcbn1cbiIsICJFeHBlY3RlZCBcIjpc
IiwgZm91bmQgXCJ7XCIuIiwKLSAgICAgICAgICAgICAgICAxLCAxNyk7Ci0gIEV4cGVjdEZhaWx1
cmUoIm9wdGlvbmFsX3VpbnQzMjogMHgxMDAwMDAwMDBcbiIsCi0gICAgICAgICAgICAgICAgIklu
dGVnZXIgb3V0IG9mIHJhbmdlLiIsIDEsIDE4KTsKLSAgRXhwZWN0RmFpbHVyZSgib3B0aW9uYWxf
dWludDY0OiAweDEwMDAwMDAwMDAwMDAwMDAwXG4iLAotICAgICAgICAgICAgICAgICJJbnRlZ2Vy
IG91dCBvZiByYW5nZS4iLCAxLCAxOCk7Ci0KLSAgLy8gSW52YWxpZCB2YWx1ZXMgZm9yIGEgYm9v
bGVhbiBmaWVsZC4KLSAgRXhwZWN0RmFpbHVyZSgib3B0aW9uYWxfYm9vbDogXCJoZWxsb1wiXG4i
LCAiRXhwZWN0ZWQgaWRlbnRpZmllci4iLCAxLCAxNik7Ci0gIEV4cGVjdEZhaWx1cmUoIm9wdGlv
bmFsX2Jvb2w6IDVcbiIsICJJbnRlZ2VyIG91dCBvZiByYW5nZS4iLCAxLCAxNik7Ci0gIEV4cGVj
dEZhaWx1cmUoIm9wdGlvbmFsX2Jvb2w6IC03LjVcbiIsICJFeHBlY3RlZCBpZGVudGlmaWVyLiIs
IDEsIDE2KTsKLSAgRXhwZWN0RmFpbHVyZSgib3B0aW9uYWxfYm9vbDogIVxuIiwgIkV4cGVjdGVk
IGlkZW50aWZpZXIuIiwgMSwgMTYpOwotCi0gIEV4cGVjdEZhaWx1cmUoCi0gICAgICAib3B0aW9u
YWxfYm9vbDogbWVoXG4iLAotICAgICAgIkludmFsaWQgdmFsdWUgZm9yIGJvb2xlYW4gZmllbGQg
XCJvcHRpb25hbF9ib29sXCIuIFZhbHVlOiBcIm1laFwiLiIsCi0gICAgICAyLCAxKTsKLQotICBF
eHBlY3RGYWlsdXJlKCJvcHRpb25hbF9ib29sIHtcbiBcbn1cbiIsICJFeHBlY3RlZCBcIjpcIiwg
Zm91bmQgXCJ7XCIuIiwKLSAgICAgICAgICAgICAgICAxLCAxNSk7Ci0KLSAgLy8gSW52YWxpZCB2
YWx1ZXMgZm9yIGEgc3RyaW5nIGZpZWxkLgotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25hbF9zdHJp
bmc6IHRydWVcbiIsICJFeHBlY3RlZCBzdHJpbmcuIiwgMSwgMTgpOwotICBFeHBlY3RGYWlsdXJl
KCJvcHRpb25hbF9zdHJpbmc6IDVcbiIsICJFeHBlY3RlZCBzdHJpbmcuIiwgMSwgMTgpOwotICBF
eHBlY3RGYWlsdXJlKCJvcHRpb25hbF9zdHJpbmc6IC03LjVcbiIsICJFeHBlY3RlZCBzdHJpbmcu
IiwgMSwgMTgpOwotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25hbF9zdHJpbmc6ICFcbiIsICJFeHBl
Y3RlZCBzdHJpbmcuIiwgMSwgMTgpOwotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25hbF9zdHJpbmcg
e1xuIFxufVxuIiwgIkV4cGVjdGVkIFwiOlwiLCBmb3VuZCBcIntcIi4iLAotICAgICAgICAgICAg
ICAgIDEsIDE3KTsKLQotICAvLyBJbnZhbGlkIHZhbHVlcyBmb3IgYW4gZW51bWVyYXRpb24gZmll
bGQuCi0gIEV4cGVjdEZhaWx1cmUoIm9wdGlvbmFsX25lc3RlZF9lbnVtOiBcImhlbGxvXCJcbiIs
Ci0gICAgICAgICAgICAgICAgIkV4cGVjdGVkIGludGVnZXIgb3IgaWRlbnRpZmllci4iLCAxLCAy
Myk7Ci0KLSAgLy8gVmFsaWQgdG9rZW4sIGJ1dCBlbnVtIHZhbHVlIGlzIG5vdCBkZWZpbmVkLgot
ICBFeHBlY3RGYWlsdXJlKCJvcHRpb25hbF9uZXN0ZWRfZW51bTogNVxuIiwKLSAgICAgICAgICAg
ICAgICAiVW5rbm93biBlbnVtZXJhdGlvbiB2YWx1ZSBvZiBcIjVcIiBmb3IgZmllbGQgIgotICAg
ICAgICAgICAgICAgICJcIm9wdGlvbmFsX25lc3RlZF9lbnVtXCIuIiwgMiwgMSk7Ci0gIC8vIFdl
IGNvbnN1bWUgdGhlIG5lZ2F0aXZlIHNpZ24sIHNvIHRoZSBlcnJvciBwb3NpdGlvbiBzdGFydHMg
b25lIGNoYXJhY3RlcgotICAvLyBsYXRlci4KLSAgRXhwZWN0RmFpbHVyZSgib3B0aW9uYWxfbmVz
dGVkX2VudW06IC03LjVcbiIsICJFeHBlY3RlZCBpbnRlZ2VyLiIsIDEsIDI0KTsKLSAgRXhwZWN0
RmFpbHVyZSgib3B0aW9uYWxfbmVzdGVkX2VudW06ICFcbiIsCi0gICAgICAgICAgICAgICAgIkV4
cGVjdGVkIGludGVnZXIgb3IgaWRlbnRpZmllci4iLCAxLCAyMyk7Ci0KLSAgRXhwZWN0RmFpbHVy
ZSgKLSAgICAgICJvcHRpb25hbF9uZXN0ZWRfZW51bTogZ3JhaFxuIiwKLSAgICAgICJVbmtub3du
IGVudW1lcmF0aW9uIHZhbHVlIG9mIFwiZ3JhaFwiIGZvciBmaWVsZCAiCi0gICAgICAiXCJvcHRp
b25hbF9uZXN0ZWRfZW51bVwiLiIsIDIsIDEpOwotCi0gIEV4cGVjdEZhaWx1cmUoCi0gICAgICAi
b3B0aW9uYWxfbmVzdGVkX2VudW0ge1xuIFxufVxuIiwKLSAgICAgICJFeHBlY3RlZCBcIjpcIiwg
Zm91bmQgXCJ7XCIuIiwgMSwgMjIpOwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFBhcnNlclRlc3Qs
IE1lc3NhZ2VEZWxpbWl0ZXJzKSB7Ci0gIC8vIE5vbi1tYXRjaGluZyBkZWxpbWl0ZXJzLgotICBF
eHBlY3RGYWlsdXJlKCJPcHRpb25hbEdyb3VwIDxcbiBcbn1cbiIsICJFeHBlY3RlZCBcIj5cIiwg
Zm91bmQgXCJ9XCIuIiwKLSAgICAgICAgICAgICAgICAzLCAxKTsKLQotICAvLyBJbnZhbGlkIGRl
bGltaXRlcnMuCi0gIEV4cGVjdEZhaWx1cmUoIk9wdGlvbmFsR3JvdXAgW1xuIFxuXVxuIiwgIkV4
cGVjdGVkIFwie1wiLCBmb3VuZCBcIltcIi4iLAotICAgICAgICAgICAgICAgIDEsIDE1KTsKLQot
ICAvLyBVbmVuZGluZyBtZXNzYWdlLgotICBFeHBlY3RGYWlsdXJlKCJvcHRpb25hbF9uZXN0ZWRf
bWVzc2FnZSB7XG4gXG5iYjogMTE4XG4iLAotICAgICAgICAgICAgICAgICJFeHBlY3RlZCBpZGVu
dGlmaWVyLiIsCi0gICAgICAgICAgICAgICAgNCwgMSk7Ci19Ci0KLVRFU1RfRihUZXh0Rm9ybWF0
UGFyc2VyVGVzdCwgVW5rbm93bkV4dGVuc2lvbikgewotICAvLyBOb24tbWF0Y2hpbmcgZGVsaW1p
dGVycy4KLSAgRXhwZWN0RmFpbHVyZSgiW2JsYWhibGFoXTogMTIzIiwKLSAgICAgICAgICAgICAg
ICAiRXh0ZW5zaW9uIFwiYmxhaGJsYWhcIiBpcyBub3QgZGVmaW5lZCBvciBpcyBub3QgYW4gIgot
ICAgICAgICAgICAgICAgICJleHRlbnNpb24gb2YgXCJwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs
VHlwZXNcIi4iLAotICAgICAgICAgICAgICAgIDEsIDExKTsKLX0KLQotVEVTVF9GKFRleHRGb3Jt
YXRQYXJzZXJUZXN0LCBNaXNzaW5nUmVxdWlyZWQpIHsKLSAgdW5pdHRlc3Q6OlRlc3RSZXF1aXJl
ZCBtZXNzYWdlOwotICBFeHBlY3RGYWlsdXJlKCJhOiAxIiwKLSAgICAgICAgICAgICAgICAiTWVz
c2FnZSBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkczogYiwgYyIsCi0gICAgICAgICAgICAgICAgMCwg
MSwgJm1lc3NhZ2UpOwotfQotCi1URVNUX0YoVGV4dEZvcm1hdFBhcnNlclRlc3QsIFBhcnNlRHVw
bGljYXRlUmVxdWlyZWQpIHsKLSAgdW5pdHRlc3Q6OlRlc3RSZXF1aXJlZCBtZXNzYWdlOwotICBF
eHBlY3RGYWlsdXJlKCJhOiAxIGI6IDIgYzogMyBhOiAxIiwKLSAgICAgICAgICAgICAgICAiTm9u
LXJlcGVhdGVkIGZpZWxkIFwiYVwiIGlzIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4iLAotICAg
ICAgICAgICAgICAgIDEsIDE3LCAmbWVzc2FnZSk7Ci19Ci0KLVRFU1RfRihUZXh0Rm9ybWF0UGFy
c2VyVGVzdCwgUGFyc2VEdXBsaWNhdGVPcHRpb25hbCkgewotICB1bml0dGVzdDo6Rm9yZWlnbk1l
c3NhZ2UgbWVzc2FnZTsKLSAgRXhwZWN0RmFpbHVyZSgiYzogMSBjOiAyIiwKLSAgICAgICAgICAg
ICAgICAiTm9uLXJlcGVhdGVkIGZpZWxkIFwiY1wiIGlzIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1l
cy4iLAotICAgICAgICAgICAgICAgIDEsIDcsICZtZXNzYWdlKTsKLX0KLQotVEVTVF9GKFRleHRG
b3JtYXRQYXJzZXJUZXN0LCBNZXJnZUR1cGxpY2F0ZVJlcXVpcmVkKSB7Ci0gIHVuaXR0ZXN0OjpU
ZXN0UmVxdWlyZWQgbWVzc2FnZTsKLSAgVGV4dEZvcm1hdDo6UGFyc2VyIHBhcnNlcjsKLSAgRVhQ
RUNUX1RSVUUocGFyc2VyLk1lcmdlRnJvbVN0cmluZygiYTogMSBiOiAyIGM6IDMgYTogNCIsICZt
ZXNzYWdlKSk7Ci0gIEVYUEVDVF9FUSg0LCBtZXNzYWdlLmEoKSk7Ci19Ci0KLVRFU1RfRihUZXh0
Rm9ybWF0UGFyc2VyVGVzdCwgTWVyZ2VEdXBsaWNhdGVPcHRpb25hbCkgewotICB1bml0dGVzdDo6
Rm9yZWlnbk1lc3NhZ2UgbWVzc2FnZTsKLSAgVGV4dEZvcm1hdDo6UGFyc2VyIHBhcnNlcjsKLSAg
RVhQRUNUX1RSVUUocGFyc2VyLk1lcmdlRnJvbVN0cmluZygiYzogMSBjOiAyIiwgJm1lc3NhZ2Up
KTsKLSAgRVhQRUNUX0VRKDIsIG1lc3NhZ2UuYygpKTsKLX0KLQotVEVTVF9GKFRleHRGb3JtYXRQ
YXJzZXJUZXN0LCBFeHBsaWNpdERlbGltaXRlcnMpIHsKLSAgdW5pdHRlc3Q6OlRlc3RSZXF1aXJl
ZCBtZXNzYWdlOwotICBFWFBFQ1RfVFJVRShUZXh0Rm9ybWF0OjpQYXJzZUZyb21TdHJpbmcoImE6
MSxiOjI7YzozIiwgJm1lc3NhZ2UpKTsKLSAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UuYSgpKTsKLSAg
RVhQRUNUX0VRKDIsIG1lc3NhZ2UuYigpKTsKLSAgRVhQRUNUX0VRKDMsIG1lc3NhZ2UuYygpKTsK
LX0KLQotVEVTVF9GKFRleHRGb3JtYXRQYXJzZXJUZXN0LCBQcmludEVycm9yc1RvU3RkZXJyKSB7
Ci0gIHZlY3RvcjxzdHJpbmc+IGVycm9yczsKLQotICB7Ci0gICAgU2NvcGVkTWVtb3J5TG9nIGxv
ZzsKLSAgICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIHByb3RvOwotICAgIEVYUEVDVF9GQUxTRShU
ZXh0Rm9ybWF0OjpQYXJzZUZyb21TdHJpbmcoIm5vX3N1Y2hfZmllbGQ6IDEiLCAmcHJvdG8pKTsK
LSAgICBlcnJvcnMgPSBsb2cuR2V0TWVzc2FnZXMoRVJST1IpOwotICB9Ci0KLSAgQVNTRVJUX0VR
KDEsIGVycm9ycy5zaXplKCkpOwotICBFWFBFQ1RfRVEoIkVycm9yIHBhcnNpbmcgdGV4dC1mb3Jt
YXQgcHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzOiAiCi0gICAgICAgICAgICAiMToxNDog
TWVzc2FnZSB0eXBlIFwicHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzXCIgaGFzIG5vIGZp
ZWxkICIKLSAgICAgICAgICAgICJuYW1lZCBcIm5vX3N1Y2hfZmllbGRcIi4iLAotICAgICAgICAg
ICAgZXJyb3JzWzBdKTsKLX0KLQotVEVTVF9GKFRleHRGb3JtYXRQYXJzZXJUZXN0LCBGYWlsc09u
VG9rZW5pemF0aW9uRXJyb3IpIHsKLSAgdmVjdG9yPHN0cmluZz4gZXJyb3JzOwotCi0gIHsKLSAg
ICBTY29wZWRNZW1vcnlMb2cgbG9nOwotICAgIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgcHJvdG87
Ci0gICAgRVhQRUNUX0ZBTFNFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZygiXDAyMCIsICZw
cm90bykpOwotICAgIGVycm9ycyA9IGxvZy5HZXRNZXNzYWdlcyhFUlJPUik7Ci0gIH0KLQotICBB
U1NFUlRfRVEoMSwgZXJyb3JzLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgiRXJyb3IgcGFyc2luZyB0
ZXh0LWZvcm1hdCBwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXM6ICIKLSAgICAgICAgICAg
ICIxOjE6IEludmFsaWQgY29udHJvbCBjaGFyYWN0ZXJzIGVuY291bnRlcmVkIGluIHRleHQuIiwK
LSAgICAgICAgICAgIGVycm9yc1swXSk7Ci19Ci0KLVRFU1RfRihUZXh0Rm9ybWF0UGFyc2VyVGVz
dCwgUGFyc2VEZXByZWNhdGVkRmllbGQpIHsKLSAgdW5pdHRlc3Q6OlRlc3REZXByZWNhdGVkRmll
bGRzIG1lc3NhZ2U7Ci0gIEV4cGVjdE1lc3NhZ2UoImRlcHJlY2F0ZWRfaW50MzI6IDQyIiwKLSAg
ICAgICAgICAgICAgICAiV0FSTklORzp0ZXh0IGZvcm1hdCBjb250YWlucyBkZXByZWNhdGVkIGZp
ZWxkICIKLSAgICAgICAgICAgICAgICAiXCJkZXByZWNhdGVkX2ludDMyXCIiLCAxLCAyMSwgJm1l
c3NhZ2UsIHRydWUpOwotfQotCi1jbGFzcyBUZXh0Rm9ybWF0TWVzc2FnZVNldFRlc3QgOiBwdWJs
aWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICBzdGF0aWMgY29uc3QgY2hhciBwcm90
b19kZWJ1Z19zdHJpbmdfW107Ci19OwotY29uc3QgY2hhciBUZXh0Rm9ybWF0TWVzc2FnZVNldFRl
c3Q6OnByb3RvX2RlYnVnX3N0cmluZ19bXSA9Ci0ibWVzc2FnZV9zZXQge1xuIgotIiAgW3Byb3Rv
YnVmX3VuaXR0ZXN0LlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMV0ge1xuIgotIiAgICBpOiAyM1xu
IgotIiAgfVxuIgotIiAgW3Byb3RvYnVmX3VuaXR0ZXN0LlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9u
Ml0ge1xuIgotIiAgICBzdHI6IFwiZm9vXCJcbiIKLSIgIH1cbiIKLSJ9XG4iOwotCi0KLVRFU1Rf
RihUZXh0Rm9ybWF0TWVzc2FnZVNldFRlc3QsIFNlcmlhbGl6ZSkgewotICBwcm90b2J1Zl91bml0
dGVzdDo6VGVzdE1lc3NhZ2VTZXRDb250YWluZXIgcHJvdG87Ci0gIHByb3RvYnVmX3VuaXR0ZXN0
OjpUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEqIGl0ZW1fYSA9Ci0gICAgcHJvdG8ubXV0YWJsZV9t
ZXNzYWdlX3NldCgpLT5NdXRhYmxlRXh0ZW5zaW9uKAotICAgICAgcHJvdG9idWZfdW5pdHRlc3Q6
OlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMTo6bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKTsKLSAgaXRl
bV9hLT5zZXRfaSgyMyk7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0TWVzc2FnZVNldEV4dGVu
c2lvbjIqIGl0ZW1fYiA9Ci0gICAgcHJvdG8ubXV0YWJsZV9tZXNzYWdlX3NldCgpLT5NdXRhYmxl
RXh0ZW5zaW9uKAotICAgICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNZXNzYWdlU2V0RXh0ZW5z
aW9uMjo6bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKTsKLSAgaXRlbV9iLT5zZXRfc3RyKCJmb28iKTsK
LSAgRVhQRUNUX0VRKHByb3RvX2RlYnVnX3N0cmluZ18sIHByb3RvLkRlYnVnU3RyaW5nKCkpOwot
fQotCi1URVNUX0YoVGV4dEZvcm1hdE1lc3NhZ2VTZXRUZXN0LCBEZXNlcmlhbGl6ZSkgewotICBw
cm90b2J1Zl91bml0dGVzdDo6VGVzdE1lc3NhZ2VTZXRDb250YWluZXIgcHJvdG87Ci0gIEFTU0VS
VF9UUlVFKFRleHRGb3JtYXQ6OlBhcnNlRnJvbVN0cmluZyhwcm90b19kZWJ1Z19zdHJpbmdfLCAm
cHJvdG8pKTsKLSAgRVhQRUNUX0VRKDIzLCBwcm90by5tZXNzYWdlX3NldCgpLkdldEV4dGVuc2lv
bigKLSAgICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xOjptZXNz
YWdlX3NldF9leHRlbnNpb24pLmkoKSk7Ci0gIEVYUEVDVF9FUSgiZm9vIiwgcHJvdG8ubWVzc2Fn
ZV9zZXQoKS5HZXRFeHRlbnNpb24oCi0gICAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RNZXNzYWdl
U2V0RXh0ZW5zaW9uMjo6bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKS5zdHIoKSk7Ci0KLSAgLy8gRW5z
dXJlIHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IGVudHJpZXMgcHJlc2VudC4KLSAgdmVjdG9yPGNv
bnN0IEZpZWxkRGVzY3JpcHRvcio+IGRlc2NyaXB0b3JzOwotICBwcm90by5tZXNzYWdlX3NldCgp
LkdldFJlZmxlY3Rpb24oKS0+TGlzdEZpZWxkcygKLSAgICBwcm90by5tZXNzYWdlX3NldCgpLCAm
ZGVzY3JpcHRvcnMpOwotICBFWFBFQ1RfRVEoMiwgZGVzY3JpcHRvcnMuc2l6ZSgpKTsKLX0KLQot
Ci19ICAvLyBuYW1lc3BhY2UgdGV4dF9mb3JtYXRfdW5pdHRlc3QKLX0gIC8vIG5hbWVzcGFjZSBw
cm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3RpbWVzdGFtcC5wYi5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucGIu
Y2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZGY1MDkzZDcwNTU5ZWMyNTU2Njgz
ZjI4YzVmY2MwNGM0NjFlODUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wYi5jYworKysgL2Rldi9udWxs
CkBAIC0xLDQ1MSArMCwwIEBACi0vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBj
b21waWxlci4gIERPIE5PVCBFRElUIQotLy8gc291cmNlOiBnb29nbGUvcHJvdG9idWYvdGltZXN0
YW1wLnByb3RvCi0KLSNkZWZpbmUgSU5URVJOQUxfU1VQUFJFU1NfUFJPVE9CVUZfRklFTERfREVQ
UkVDQVRJT04KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnBiLmg+Ci0KLSNp
bmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29t
bW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3BvcnQuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9pby9jb2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3Jt
YXRfbGl0ZV9pbmwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV9yZWZsZWN0aW9uLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0Lmg+Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoaW5jbHVkZXMpCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LQotbmFtZXNwYWNlIHsKLQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBU
aW1lc3RhbXBfZGVzY3JpcHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIFRpbWVzdGFtcF9yZWZsZWN0
aW9uXyA9IE5VTEw7Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0KLXZvaWQgcHJvdG9idWZfQXNzaWdu
RGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnRpbWVzdGFtcF8yZXByb3RvKCkgewotICBwcm90b2J1
Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmdGltZXN0YW1wXzJlcHJvdG8oKTsKLSAgY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjpGaWxlRGVzY3JpcHRvciogZmlsZSA9Ci0gICAgOjpnb29n
bGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbDo6Z2VuZXJhdGVkX3Bvb2woKS0+RmluZEZpbGVC
eU5hbWUoCi0gICAgICAiZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90byIpOwotICBHT09H
TEVfQ0hFQ0soZmlsZSAhPSBOVUxMKTsKLSAgVGltZXN0YW1wX2Rlc2NyaXB0b3JfID0gZmlsZS0+
bWVzc2FnZV90eXBlKDApOwotICBzdGF0aWMgY29uc3QgaW50IFRpbWVzdGFtcF9vZmZzZXRzX1sy
XSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VU
KFRpbWVzdGFtcCwgc2Vjb25kc18pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVT
U0FHRV9GSUVMRF9PRkZTRVQoVGltZXN0YW1wLCBuYW5vc18pLAotICB9OwotICBUaW1lc3RhbXBf
cmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRl
ZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAg
IFRpbWVzdGFtcF9kZXNjcmlwdG9yXywKLSAgICAgIFRpbWVzdGFtcDo6ZGVmYXVsdF9pbnN0YW5j
ZV8sCi0gICAgICBUaW1lc3RhbXBfb2Zmc2V0c18sCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAg
ICAgLTEsCi0gICAgICBzaXplb2YoVGltZXN0YW1wKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVGltZXN0YW1wLCBfaW50ZXJuYWxfbWV0YWRh
dGFfKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZT
RVQoVGltZXN0YW1wLCBfaXNfZGVmYXVsdF9pbnN0YW5jZV8pKTsKLX0KLQotbmFtZXNwYWNlIHsK
LQotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9y
c19vbmNlXyk7Ci1pbmxpbmUgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKSB7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xlT25jZUluaXQoJnByb3RvYnVmX0Fzc2lnbkRl
c2NyaXB0b3JzX29uY2VfLAotICAgICAgICAgICAgICAgICAmcHJvdG9idWZfQXNzaWduRGVzY19n
b29nbGVfMmZwcm90b2J1Zl8yZnRpbWVzdGFtcF8yZXByb3RvKTsKLX0KLQotdm9pZCBwcm90b2J1
Zl9SZWdpc3RlclR5cGVzKGNvbnN0IDo6c3RkOjpzdHJpbmcmKSB7Ci0gIHByb3RvYnVmX0Fzc2ln
bkRlc2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5
OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgKLSAgICAgIFRpbWVzdGFtcF9kZXNj
cmlwdG9yXywgJlRpbWVzdGFtcDo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlCi0KLXZvaWQgcHJvdG9idWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJm
dGltZXN0YW1wXzJlcHJvdG8oKSB7Ci0gIGRlbGV0ZSBUaW1lc3RhbXA6OmRlZmF1bHRfaW5zdGFu
Y2VfOwotICBkZWxldGUgVGltZXN0YW1wX3JlZmxlY3Rpb25fOwotfQotCi12b2lkIHByb3RvYnVm
X0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0aW1lc3RhbXBfMmVwcm90bygpIHsKLSAgc3Rh
dGljIGJvb2wgYWxyZWFkeV9oZXJlID0gZmFsc2U7Ci0gIGlmIChhbHJlYWR5X2hlcmUpIHJldHVy
bjsKLSAgYWxyZWFkeV9oZXJlID0gdHJ1ZTsKLSAgR09PR0xFX1BST1RPQlVGX1ZFUklGWV9WRVJT
SU9OOwotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclBvb2w6OkludGVybmFsQWRk
R2VuZXJhdGVkRmlsZSgKLSAgICAiXG5cMDM3Z29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90
b1wwMjJcMDE3Z29vZ2wiCi0gICAgImUucHJvdG9idWZcIitcblx0VGltZXN0YW1wXDAyMlwwMTdc
blwwMDdzZWNvbmRzXDAzMFwwMDEgXDAwMShcMDAzIgotICAgICJcMDIyXHJcblwwMDVuYW5vc1ww
MzBcMDAyIFwwMDEoXDAwNUJcMjAxXDAwMVxuXDAyM2NvbS5nb29nbGUucHJvdG9idWZCIgotICAg
ICJcMDE2VGltZXN0YW1wUHJvdG9QXDAwMVorZ2l0aHViLmNvbS9nb2xhbmcvcHJvIgotICAgICJ0
b2J1Zi9wdHlwZXMvdGltZXN0YW1wXDI0MFwwMDFcMDAxXDM3MFwwMDFcMDAxXDI0MlwwMDJcMDAz
R1BCXDI1MlwwMDJcMDM2R29vIgotICAgICJnbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiXDAw
NnByb3RvMyIsIDIzNSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6Oklu
dGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRGaWxlKAotICAgICJnb29nbGUvcHJvdG9idWYvdGltZXN0
YW1wLnByb3RvIiwgJnByb3RvYnVmX1JlZ2lzdGVyVHlwZXMpOwotICBUaW1lc3RhbXA6OmRlZmF1
bHRfaW5zdGFuY2VfID0gbmV3IFRpbWVzdGFtcCgpOwotICBUaW1lc3RhbXA6OmRlZmF1bHRfaW5z
dGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6T25TaHV0ZG93bigmcHJvdG9idWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3Rv
YnVmXzJmdGltZXN0YW1wXzJlcHJvdG8pOwotfQotCi0vLyBGb3JjZSBBZGREZXNjcmlwdG9ycygp
IHRvIGJlIGNhbGxlZCBhdCBzdGF0aWMgaW5pdGlhbGl6YXRpb24gdGltZS4KLXN0cnVjdCBTdGF0
aWNEZXNjcmlwdG9ySW5pdGlhbGl6ZXJfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0aW1lc3RhbXBfMmVw
cm90byB7Ci0gIFN0YXRpY0Rlc2NyaXB0b3JJbml0aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8y
ZnRpbWVzdGFtcF8yZXByb3RvKCkgewotICAgIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJv
dG9idWZfMmZ0aW1lc3RhbXBfMmVwcm90bygpOwotICB9Ci19IHN0YXRpY19kZXNjcmlwdG9yX2lu
aXRpYWxpemVyX2dvb2dsZV8yZnByb3RvYnVmXzJmdGltZXN0YW1wXzJlcHJvdG9fOwotCi1uYW1l
c3BhY2UgewotCi1zdGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGludCBsaW5lKSBHT09HTEVfQVRU
UklCVVRFX0NPTEQ7Ci1zdGF0aWMgdm9pZCBNZXJnZUZyb21GYWlsKGludCBsaW5lKSB7Ci0gIEdP
T0dMRV9DSEVDSyhmYWxzZSkgPDwgX19GSUxFX18gPDwgIjoiIDw8IGxpbmU7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8
fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgVGltZXN0YW1wOjprU2Vjb25kc0ZpZWxkTnVt
YmVyOwotY29uc3QgaW50IFRpbWVzdGFtcDo6a05hbm9zRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8v
ICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLVRpbWVzdGFtcDo6VGlt
ZXN0YW1wKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21l
dGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXApCi19Ci0KLVRpbWVz
dGFtcDo6VGltZXN0YW1wKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKQotICA6IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLAotICBfaW50ZXJuYWxfbWV0YWRhdGFfKGFyZW5h
KSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgUmVnaXN0ZXJBcmVuYUR0b3IoYXJlbmEpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoYXJlbmFfY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVm
LlRpbWVzdGFtcCkKLX0KLQotdm9pZCBUaW1lc3RhbXA6OkluaXRBc0RlZmF1bHRJbnN0YW5jZSgp
IHsKLSAgX2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gdHJ1ZTsKLX0KLQotVGltZXN0YW1wOjpUaW1l
c3RhbXAoY29uc3QgVGltZXN0YW1wJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSgpLAotICAgIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7
Ci0gIE1lcmdlRnJvbShmcm9tKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlf
Y29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCkKLX0KLQotdm9pZCBUaW1lc3Rh
bXA6OlNoYXJlZEN0b3IoKSB7Ci0gICAgX2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gZmFsc2U7Ci0g
IF9jYWNoZWRfc2l6ZV8gPSAwOwotICBzZWNvbmRzXyA9IEdPT0dMRV9MT05HTE9ORygwKTsKLSAg
bmFub3NfID0gMDsKLX0KLQotVGltZXN0YW1wOjp+VGltZXN0YW1wKCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuVGltZXN0YW1wKQot
ICBTaGFyZWREdG9yKCk7Ci19Ci0KLXZvaWQgVGltZXN0YW1wOjpTaGFyZWREdG9yKCkgewotICBp
ZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAg
aWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIFRpbWVzdGFt
cDo6QXJlbmFEdG9yKHZvaWQqIG9iamVjdCkgewotICBUaW1lc3RhbXAqIF90aGlzID0gcmVpbnRl
cnByZXRfY2FzdDwgVGltZXN0YW1wKiA+KG9iamVjdCk7Ci0gICh2b2lkKV90aGlzOwotfQotdm9p
ZCBUaW1lc3RhbXA6OlJlZ2lzdGVyQXJlbmFEdG9yKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEq
IGFyZW5hKSB7Ci19Ci12b2lkIFRpbWVzdGFtcDo6U2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29u
c3QgewotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVk
X3NpemVfID0gc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci19
Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIFRpbWVzdGFtcDo6ZGVzY3Jp
cHRvcigpIHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIHJldHVybiBU
aW1lc3RhbXBfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IFRpbWVzdGFtcCYgVGltZXN0YW1wOjpk
ZWZhdWx0X2luc3RhbmNlKCkgewotICBpZiAoZGVmYXVsdF9pbnN0YW5jZV8gPT0gTlVMTCkgcHJv
dG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnRpbWVzdGFtcF8yZXByb3RvKCk7Ci0g
IHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLVRpbWVzdGFtcCogVGltZXN0YW1wOjpk
ZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLVRpbWVzdGFtcCogVGltZXN0YW1wOjpOZXcoOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgcmV0dXJuIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6QXJlbmE6OkNyZWF0ZU1lc3NhZ2U8VGltZXN0YW1wPihhcmVuYSk7Ci19Ci0K
LXZvaWQgVGltZXN0YW1wOjpDbGVhcigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludCht
ZXNzYWdlX2NsZWFyX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXApCi0jaWYgZGVmaW5l
ZChfX2NsYW5nX18pCi0jZGVmaW5lIFpSX0hFTFBFUl8oZikgXAotICBfUHJhZ21hKCJjbGFuZyBk
aWFnbm9zdGljIHB1c2giKSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBc
Ii1XaW52YWxpZC1vZmZzZXRvZlwiIikgXAotICBfX2J1aWx0aW5fb2Zmc2V0b2YoVGltZXN0YW1w
LCBmKSBcCi0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcG9wIikKLSNlbHNlCi0jZGVmaW5l
IFpSX0hFTFBFUl8oZikgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oXAotICAmcmVpbnRlcnByZXRf
Y2FzdDxUaW1lc3RhbXAqPigxNiktPmYpCi0jZW5kaWYKLQotI2RlZmluZSBaUl8oZmlyc3QsIGxh
c3QpIGRvIHtcCi0gIDo6bWVtc2V0KCZmaXJzdCwgMCxcCi0gICAgICAgICAgIFpSX0hFTFBFUl8o
bGFzdCkgLSBaUl9IRUxQRVJfKGZpcnN0KSArIHNpemVvZihsYXN0KSk7XAotfSB3aGlsZSAoMCkK
LQotICBaUl8oc2Vjb25kc18sIG5hbm9zXyk7Ci0KLSN1bmRlZiBaUl9IRUxQRVJfCi0jdW5kZWYg
WlJfCi0KLX0KLQotYm9vbCBUaW1lc3RhbXA6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewot
I2RlZmluZSBET18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJ
T04pKSBnb3RvIGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlRp
bWVzdGFtcCkKLSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAg
IHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsK
LSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCBpbnQ2NCBzZWNv
bmRzID0gMTsKLSAgICAgIGNhc2UgMTogewotICAgICAgICBpZiAodGFnID09IDgpIHsKLSAgICAg
ICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpS
ZWFkUHJpbWl0aXZlPAotICAgICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
NjQsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0lO
VDY0PigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZzZWNvbmRzXykpKTsKLQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMTYpKSBnb3RvIHBhcnNlX25hbm9zOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgaW50MzIgbmFub3MgPSAyOwotICAg
ICAgY2FzZSAyOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTYpIHsKLSAgICAgICAgIHBhcnNlX25h
bm9zOgotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnQzMiwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlRZUEVfSU5UMzI+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJm5hbm9zXykpKTsKLQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51
c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQot
ICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAg
fQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OlNraXBGaWVsZChpbnB1dCwgdGFnKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAg
IH0KLSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1
Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCkKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJl
OgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJv
dG9idWYuVGltZXN0YW1wKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQg
VGltZXN0YW1wOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5UaW1lc3Rh
bXApCi0gIC8vIG9wdGlvbmFsIGludDY0IHNlY29uZHMgPSAxOwotICBpZiAodGhpcy0+c2Vjb25k
cygpICE9IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVJbnQ2NCgxLCB0aGlzLT5zZWNvbmRzKCksIG91dHB1dCk7Ci0gIH0KLQotICAv
LyBvcHRpb25hbCBpbnQzMiBuYW5vcyA9IDI7Ci0gIGlmICh0aGlzLT5uYW5vcygpICE9IDApIHsK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJ
bnQzMigyLCB0aGlzLT5uYW5vcygpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCkKLX0K
LQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogVGltZXN0YW1wOjpTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkg
Y29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5
X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXApCi0gIC8vIG9wdGlvbmFsIGludDY0IHNl
Y29uZHMgPSAxOwotICBpZiAodGhpcy0+c2Vjb25kcygpICE9IDApIHsKLSAgICB0YXJnZXQgPSA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQ2NFRv
QXJyYXkoMSwgdGhpcy0+c2Vjb25kcygpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwg
aW50MzIgbmFub3MgPSAyOwotICBpZiAodGhpcy0+bmFub3MoKSAhPSAwKSB7Ci0gICAgdGFyZ2V0
ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50
MzJUb0FycmF5KDIsIHRoaXMtPm5hbm9zKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYu
VGltZXN0YW1wKQotICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQgVGltZXN0YW1wOjpCeXRlU2l6
ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6
ZV9zdGFydDpnb29nbGUucHJvdG9idWYuVGltZXN0YW1wKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7
Ci0KLSAgLy8gb3B0aW9uYWwgaW50NjQgc2Vjb25kcyA9IDE7Ci0gIGlmICh0aGlzLT5zZWNvbmRz
KCkgIT0gMCkgewotICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6SW50NjRTaXplKAotICAgICAgICB0aGlzLT5z
ZWNvbmRzKCkpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgaW50MzIgbmFub3MgPSAyOwotICBpZiAo
dGhpcy0+bmFub3MoKSAhPSAwKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpJbnQzMlNpemUoCi0gICAg
ICAgIHRoaXMtPm5hbm9zKCkpOwotICB9Ci0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklU
RVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZF
X0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9p
ZCBUaW1lc3RhbXA6Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2Um
IGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9m
cm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXApCi0gIGlmIChHT09HTEVfUFJFRElD
VF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGNvbnN0
IFRpbWVzdGFtcCogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IFRpbWVzdGFtcD4oCi0gICAgICAgICAgJmZy
b20pOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90b2J1Zi5UaW1l
c3RhbXApCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6UmVmbGVjdGlvbk9wczo6
TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpnb29nbGUucHJvdG9idWYu
VGltZXN0YW1wKQotICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIFRpbWVz
dGFtcDo6TWVyZ2VGcm9tKGNvbnN0IFRpbWVzdGFtcCYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLlRpbWVzdGFtcCkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMp
KSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgaWYgKGZyb20uc2Vjb25kcygpICE9IDApIHsK
LSAgICBzZXRfc2Vjb25kcyhmcm9tLnNlY29uZHMoKSk7Ci0gIH0KLSAgaWYgKGZyb20ubmFub3Mo
KSAhPSAwKSB7Ci0gICAgc2V0X25hbm9zKGZyb20ubmFub3MoKSk7Ci0gIH0KLX0KLQotdm9pZCBU
aW1lc3RhbXA6OkNvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJv
bSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9z
dGFydDpnb29nbGUucHJvdG9idWYuVGltZXN0YW1wKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0
dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLXZvaWQgVGltZXN0YW1w
OjpDb3B5RnJvbShjb25zdCBUaW1lc3RhbXAmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChjbGFzc19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlRp
bWVzdGFtcCkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVy
Z2VGcm9tKGZyb20pOwotfQotCi1ib29sIFRpbWVzdGFtcDo6SXNJbml0aWFsaXplZCgpIGNvbnN0
IHsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUaW1lc3RhbXA6OlN3YXAoVGltZXN0YW1w
KiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBpZiAoR2V0QXJlbmFO
b1ZpcnR1YWwoKSA9PSBvdGhlci0+R2V0QXJlbmFOb1ZpcnR1YWwoKSkgewotICAgIEludGVybmFs
U3dhcChvdGhlcik7Ci0gIH0gZWxzZSB7Ci0gICAgVGltZXN0YW1wIHRlbXA7Ci0gICAgdGVtcC5N
ZXJnZUZyb20oKnRoaXMpOwotICAgIENvcHlGcm9tKCpvdGhlcik7Ci0gICAgb3RoZXItPkNvcHlG
cm9tKHRlbXApOwotICB9Ci19Ci12b2lkIFRpbWVzdGFtcDo6VW5zYWZlQXJlbmFTd2FwKFRpbWVz
dGFtcCogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgR09PR0xFX0RD
SEVDSyhHZXRBcmVuYU5vVmlydHVhbCgpID09IG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKTsK
LSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQgVGltZXN0YW1wOjpJbnRlcm5hbFN3YXAo
VGltZXN0YW1wKiBvdGhlcikgewotICBzdGQ6OnN3YXAoc2Vjb25kc18sIG90aGVyLT5zZWNvbmRz
Xyk7Ci0gIHN0ZDo6c3dhcChuYW5vc18sIG90aGVyLT5uYW5vc18pOwotICBfaW50ZXJuYWxfbWV0
YWRhdGFfLlN3YXAoJm90aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9j
YWNoZWRfc2l6ZV8sIG90aGVyLT5fY2FjaGVkX3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXRhZGF0YSBUaW1lc3RhbXA6OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1
Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0
YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IFRpbWVzdGFtcF9kZXNjcmlwdG9y
XzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IFRpbWVzdGFtcF9yZWZsZWN0aW9uXzsKLSAgcmV0
dXJuIG1ldGFkYXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0v
LyBUaW1lc3RhbXAKLQotLy8gb3B0aW9uYWwgaW50NjQgc2Vjb25kcyA9IDE7Ci12b2lkIFRpbWVz
dGFtcDo6Y2xlYXJfc2Vjb25kcygpIHsKLSAgc2Vjb25kc18gPSBHT09HTEVfTE9OR0xPTkcoMCk7
Ci19Ci0gOjpnb29nbGU6OnByb3RvYnVmOjppbnQ2NCBUaW1lc3RhbXA6OnNlY29uZHMoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLlRpbWVzdGFtcC5zZWNvbmRzKQotICByZXR1cm4gc2Vjb25kc187Ci19Ci0gdm9pZCBUaW1l
c3RhbXA6OnNldF9zZWNvbmRzKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50NjQgdmFsdWUpIHsKLSAg
Ci0gIHNlY29uZHNfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC5zZWNvbmRzKQotfQotCi0vLyBvcHRpb25h
bCBpbnQzMiBuYW5vcyA9IDI7Ci12b2lkIFRpbWVzdGFtcDo6Y2xlYXJfbmFub3MoKSB7Ci0gIG5h
bm9zXyA9IDA7Ci19Ci0gOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBUaW1lc3RhbXA6Om5hbm9z
KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2ds
ZS5wcm90b2J1Zi5UaW1lc3RhbXAubmFub3MpCi0gIHJldHVybiBuYW5vc187Ci19Ci0gdm9pZCBU
aW1lc3RhbXA6OnNldF9uYW5vcyg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0g
IAotICBuYW5vc18gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldDpnb29nbGUucHJvdG9idWYuVGltZXN0YW1wLm5hbm9zKQotfQotCi0jZW5kaWYgIC8vIFBS
T1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotCi0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQobmFtZXNwYWNlX3Njb3BlKQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2JhbF9zY29w
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucGIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucGIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggN2JmNjI1OTc0ZDJlNmZmMGVhOGY1YzRmZWYxNWQ5MWE4MGNjMjI0Ny4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGlt
ZXN0YW1wLnBiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLy8gR2VuZXJhdGVk
IGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJj
ZTogZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90bwotCi0jaWZuZGVmIFBST1RPQlVGX2dv
b2dsZV8yZnByb3RvYnVmXzJmdGltZXN0YW1wXzJlcHJvdG9fX0lOQ0xVREVECi0jZGVmaW5lIFBS
T1RPQlVGX2dvb2dsZV8yZnByb3RvYnVmXzJmdGltZXN0YW1wXzJlcHJvdG9fX0lOQ0xVREVECi0K
LSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29t
bW9uLmg+Ci0KLSNpZiBHT09HTEVfUFJPVE9CVUZfVkVSU0lPTiA8IDMwMDAwMDAKLSNlcnJvciBU
aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBhIG5ld2VyIHZlcnNpb24gb2YgcHJvdG9jIHdoaWNo
IGlzCi0jZXJyb3IgaW5jb21wYXRpYmxlIHdpdGggeW91ciBQcm90b2NvbCBCdWZmZXIgaGVhZGVy
cy4gIFBsZWFzZSB1cGRhdGUKLSNlcnJvciB5b3VyIGhlYWRlcnMuCi0jZW5kaWYKLSNpZiAzMDAw
MDAwIDwgR09PR0xFX1BST1RPQlVGX01JTl9QUk9UT0NfVkVSU0lPTgotI2Vycm9yIFRoaXMgZmls
ZSB3YXMgZ2VuZXJhdGVkIGJ5IGFuIG9sZGVyIHZlcnNpb24gb2YgcHJvdG9jIHdoaWNoIGlzCi0j
ZXJyb3IgaW5jb21wYXRpYmxlIHdpdGggeW91ciBQcm90b2NvbCBCdWZmZXIgaGVhZGVycy4gIFBs
ZWFzZQotI2Vycm9yIHJlZ2VuZXJhdGUgdGhpcyBmaWxlIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9m
IHByb3RvYy4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hc3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3V0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvbWV0YWRhdGEuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZC5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3Vua25vd25fZmllbGRfc2V0Lmg+Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoaW5jbHVk
ZXMpCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotLy8gSW50
ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIC0tIGRvIG5vdCBjYWxsIHRoZXNlLgotdm9pZCBM
SUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnRp
bWVzdGFtcF8yZXByb3RvKCk7Ci12b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJv
dG9idWZfMmZ0aW1lc3RhbXBfMmVwcm90bygpOwotdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVf
Z29vZ2xlXzJmcHJvdG9idWZfMmZ0aW1lc3RhbXBfMmVwcm90bygpOwotCi1jbGFzcyBUaW1lc3Rh
bXA7Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFRpbWVzdGFt
cCA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgVGlt
ZXN0YW1wKCk7Ci0gIHZpcnR1YWwgflRpbWVzdGFtcCgpOwotCi0gIFRpbWVzdGFtcChjb25zdCBU
aW1lc3RhbXAmIGZyb20pOwotCi0gIGlubGluZSBUaW1lc3RhbXAmIG9wZXJhdG9yPShjb25zdCBU
aW1lc3RhbXAmIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAgICByZXR1cm4gKnRoaXM7
Ci0gIH0KLQotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmEoKSBj
b25zdCB7IHJldHVybiBHZXRBcmVuYU5vVmlydHVhbCgpOyB9Ci0gIGlubGluZSB2b2lkKiBHZXRN
YXliZUFyZW5hUG9pbnRlcigpIGNvbnN0IHsKLSAgICByZXR1cm4gTWF5YmVBcmVuYVB0cigpOwot
ICB9Ci0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IFRpbWVzdGFtcCYgZGVmYXVsdF9pbnN0YW5jZSgpOwot
Ci0gIHZvaWQgVW5zYWZlQXJlbmFTd2FwKFRpbWVzdGFtcCogb3RoZXIpOwotICB2b2lkIFN3YXAo
VGltZXN0YW1wKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUgVGltZXN0YW1w
KiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0KLQotICBUaW1lc3RhbXAqIE5ldyg6
Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20o
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZy
b20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5
RnJvbShjb25zdCBUaW1lc3RhbXAmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBUaW1l
c3RhbXAmIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNv
bnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21D
b2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJl
YW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJh
eSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2Fj
aGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAg
dm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hl
ZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChUaW1lc3RhbXAqIG90
aGVyKTsKLSAgcHJvdGVjdGVkOgotICBleHBsaWNpdCBUaW1lc3RhbXAoOjpnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYSogYXJlbmEpOwotICBwcml2YXRlOgotICBzdGF0aWMgdm9pZCBBcmVuYUR0b3Io
dm9pZCogb2JqZWN0KTsKLSAgaW5saW5lIHZvaWQgUmVnaXN0ZXJBcmVuYUR0b3IoOjpnb29nbGU6
OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6
OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJu
IF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVB
cmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJl
bmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRh
dGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29y
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgLy8gb3B0aW9uYWwgaW50NjQgc2Vjb25kcyA9IDE7Ci0gIHZvaWQgY2xlYXJfc2Vjb25k
cygpOwotICBzdGF0aWMgY29uc3QgaW50IGtTZWNvbmRzRmllbGROdW1iZXIgPSAxOwotICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludDY0IHNlY29uZHMoKSBjb25zdDsKLSAgdm9pZCBzZXRfc2Vjb25k
cyg6Omdvb2dsZTo6cHJvdG9idWY6OmludDY0IHZhbHVlKTsKLQotICAvLyBvcHRpb25hbCBpbnQz
MiBuYW5vcyA9IDI7Ci0gIHZvaWQgY2xlYXJfbmFub3MoKTsKLSAgc3RhdGljIGNvbnN0IGludCBr
TmFub3NGaWVsZE51bWJlciA9IDI7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgbmFub3Mo
KSBjb25zdDsKLSAgdm9pZCBzZXRfbmFub3MoOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1
ZSk7Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5w
cm90b2J1Zi5UaW1lc3RhbXApCi0gcHJpdmF0ZToKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0g
IGZyaWVuZCBjbGFzcyA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOwotICB0eXBlZGVmIHZvaWQg
SW50ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfOwotICB0eXBlZGVmIHZvaWQgRGVzdHJ1Y3RvclNr
aXBwYWJsZV87Ci0gIGJvb2wgX2lzX2RlZmF1bHRfaW5zdGFuY2VfOwotICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludDY0IHNlY29uZHNfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIG5hbm9z
XzsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgZnJpZW5kIHZvaWQgTElCUFJPVE9C
VUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0aW1lc3RhbXBf
MmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnBy
b3RvYnVmXzJmdGltZXN0YW1wXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfU2h1
dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmdGltZXN0YW1wXzJlcHJvdG8oKTsKLQotICB2
b2lkIEluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBzdGF0aWMgVGltZXN0YW1wKiBkZWZhdWx0
X2luc3RhbmNlXzsKLX07Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWYg
IVBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gVGltZXN0YW1wCi0KLS8vIG9wdGlv
bmFsIGludDY0IHNlY29uZHMgPSAxOwotaW5saW5lIHZvaWQgVGltZXN0YW1wOjpjbGVhcl9zZWNv
bmRzKCkgewotICBzZWNvbmRzXyA9IEdPT0dMRV9MT05HTE9ORygwKTsKLX0KLWlubGluZSA6Omdv
b2dsZTo6cHJvdG9idWY6OmludDY0IFRpbWVzdGFtcDo6c2Vjb25kcygpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVGltZXN0
YW1wLnNlY29uZHMpCi0gIHJldHVybiBzZWNvbmRzXzsKLX0KLWlubGluZSB2b2lkIFRpbWVzdGFt
cDo6c2V0X3NlY29uZHMoOjpnb29nbGU6OnByb3RvYnVmOjppbnQ2NCB2YWx1ZSkgewotICAKLSAg
c2Vjb25kc18gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dDpnb29nbGUucHJvdG9idWYuVGltZXN0YW1wLnNlY29uZHMpCi19Ci0KLS8vIG9wdGlvbmFsIGlu
dDMyIG5hbm9zID0gMjsKLWlubGluZSB2b2lkIFRpbWVzdGFtcDo6Y2xlYXJfbmFub3MoKSB7Ci0g
IG5hbm9zXyA9IDA7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBUaW1lc3Rh
bXA6Om5hbm9zKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
Z2V0Omdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAubmFub3MpCi0gIHJldHVybiBuYW5vc187Ci19
Ci1pbmxpbmUgdm9pZCBUaW1lc3RhbXA6OnNldF9uYW5vcyg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dDMyIHZhbHVlKSB7Ci0gIAotICBuYW5vc18gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVGltZXN0YW1wLm5hbm9zKQotfQot
Ci0jZW5kaWYgIC8vICFQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKLQotfSAgLy8gbmFtZXNwYWNlIHBy
b3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChnbG9iYWxfc2NvcGUpCi0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfZ29vZ2xlXzJmcHJvdG9i
dWZfMmZ0aW1lc3RhbXBfMmVwcm90b19fSU5DTFVERUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi90aW1lc3RhbXAucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnBy
b3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTkyYTg1ODg2ZmIwY2Y5MWZlZmFi
ZGQ5YmZhOWFjYjA3YmQwOWJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8KKysrIC9kZXYvbnVs
bApAQCAtMSwxMTEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LXN5bnRheCA9ICJwcm90bzMiOwotCi1wYWNrYWdlIGdvb2dsZS5wcm90b2J1ZjsKLQotb3B0aW9u
IGNzaGFycF9uYW1lc3BhY2UgPSAiR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzIjsKLW9w
dGlvbiBjY19lbmFibGVfYXJlbmFzID0gdHJ1ZTsKLW9wdGlvbiBnb19wYWNrYWdlID0gImdpdGh1
Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3B0eXBlcy90aW1lc3RhbXAiOwotb3B0aW9uIGphdmFfcGFj
a2FnZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmIjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFt
ZSA9ICJUaW1lc3RhbXBQcm90byI7Ci1vcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7
Ci1vcHRpb24gamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2ggPSB0cnVlOwotb3B0aW9uIG9i
amNfY2xhc3NfcHJlZml4ID0gIkdQQiI7Ci0KLS8vIEEgVGltZXN0YW1wIHJlcHJlc2VudHMgYSBw
b2ludCBpbiB0aW1lIGluZGVwZW5kZW50IG9mIGFueSB0aW1lIHpvbmUKLS8vIG9yIGNhbGVuZGFy
LCByZXByZXNlbnRlZCBhcyBzZWNvbmRzIGFuZCBmcmFjdGlvbnMgb2Ygc2Vjb25kcyBhdAotLy8g
bmFub3NlY29uZCByZXNvbHV0aW9uIGluIFVUQyBFcG9jaCB0aW1lLiBJdCBpcyBlbmNvZGVkIHVz
aW5nIHRoZQotLy8gUHJvbGVwdGljIEdyZWdvcmlhbiBDYWxlbmRhciB3aGljaCBleHRlbmRzIHRo
ZSBHcmVnb3JpYW4gY2FsZW5kYXIKLS8vIGJhY2t3YXJkcyB0byB5ZWFyIG9uZS4gSXQgaXMgZW5j
b2RlZCBhc3N1bWluZyBhbGwgbWludXRlcyBhcmUgNjAKLS8vIHNlY29uZHMgbG9uZywgaS5lLiBs
ZWFwIHNlY29uZHMgYXJlICJzbWVhcmVkIiBzbyB0aGF0IG5vIGxlYXAgc2Vjb25kCi0vLyB0YWJs
ZSBpcyBuZWVkZWQgZm9yIGludGVycHJldGF0aW9uLiBSYW5nZSBpcyBmcm9tCi0vLyAwMDAxLTAx
LTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTk5OVouCi0vLyBCeSBy
ZXN0cmljdGluZyB0byB0aGF0IHJhbmdlLCB3ZSBlbnN1cmUgdGhhdCB3ZSBjYW4gY29udmVydCB0
bwotLy8gYW5kIGZyb20gIFJGQyAzMzM5IGRhdGUgc3RyaW5ncy4KLS8vIFNlZSBbaHR0cHM6Ly93
d3cuaWV0Zi5vcmcvcmZjL3JmYzMzMzkudHh0XShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZj
MzMzOS50eHQpLgotLy8KLS8vIEV4YW1wbGUgMTogQ29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBQT1NJ
WCBgdGltZSgpYC4KLS8vCi0vLyAgICAgVGltZXN0YW1wIHRpbWVzdGFtcDsKLS8vICAgICB0aW1l
c3RhbXAuc2V0X3NlY29uZHModGltZShOVUxMKSk7Ci0vLyAgICAgdGltZXN0YW1wLnNldF9uYW5v
cygwKTsKLS8vCi0vLyBFeGFtcGxlIDI6IENvbXB1dGUgVGltZXN0YW1wIGZyb20gUE9TSVggYGdl
dHRpbWVvZmRheSgpYC4KLS8vCi0vLyAgICAgc3RydWN0IHRpbWV2YWwgdHY7Ci0vLyAgICAgZ2V0
dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0vLwotLy8gICAgIFRpbWVzdGFtcCB0aW1lc3RhbXA7Ci0v
LyAgICAgdGltZXN0YW1wLnNldF9zZWNvbmRzKHR2LnR2X3NlYyk7Ci0vLyAgICAgdGltZXN0YW1w
LnNldF9uYW5vcyh0di50dl91c2VjICogMTAwMCk7Ci0vLwotLy8gRXhhbXBsZSAzOiBDb21wdXRl
IFRpbWVzdGFtcCBmcm9tIFdpbjMyIGBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgpYC4KLS8vCi0v
LyAgICAgRklMRVRJTUUgZnQ7Ci0vLyAgICAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsK
LS8vICAgICBVSU5UNjQgdGlja3MgPSAoKChVSU5UNjQpZnQuZHdIaWdoRGF0ZVRpbWUpIDw8IDMy
KSB8IGZ0LmR3TG93RGF0ZVRpbWU7Ci0vLwotLy8gICAgIC8vIEEgV2luZG93cyB0aWNrIGlzIDEw
MCBuYW5vc2Vjb25kcy4gV2luZG93cyBlcG9jaCAxNjAxLTAxLTAxVDAwOjAwOjAwWgotLy8gICAg
IC8vIGlzIDExNjQ0NDczNjAwIHNlY29uZHMgYmVmb3JlIFVuaXggZXBvY2ggMTk3MC0wMS0wMVQw
MDowMDowMFouCi0vLyAgICAgVGltZXN0YW1wIHRpbWVzdGFtcDsKLS8vICAgICB0aW1lc3RhbXAu
c2V0X3NlY29uZHMoKElOVDY0KSAoKHRpY2tzIC8gMTAwMDAwMDApIC0gMTE2NDQ0NzM2MDBMTCkp
OwotLy8gICAgIHRpbWVzdGFtcC5zZXRfbmFub3MoKElOVDMyKSAoKHRpY2tzICUgMTAwMDAwMDAp
ICogMTAwKSk7Ci0vLwotLy8gRXhhbXBsZSA0OiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIEphdmEg
YFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpYC4KLS8vCi0vLyAgICAgbG9uZyBtaWxsaXMgPSBT
eXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLS8vCi0vLyAgICAgVGltZXN0YW1wIHRpbWVzdGFt
cCA9IFRpbWVzdGFtcC5uZXdCdWlsZGVyKCkuc2V0U2Vjb25kcyhtaWxsaXMgLyAxMDAwKQotLy8g
ICAgICAgICAuc2V0TmFub3MoKGludCkgKChtaWxsaXMgJSAxMDAwKSAqIDEwMDAwMDApKS5idWls
ZCgpOwotLy8KLS8vCi0vLyBFeGFtcGxlIDU6IENvbXB1dGUgVGltZXN0YW1wIGZyb20gY3VycmVu
dCB0aW1lIGluIFB5dGhvbi4KLS8vCi0vLyAgICAgbm93ID0gdGltZS50aW1lKCkKLS8vICAgICBz
ZWNvbmRzID0gaW50KG5vdykKLS8vICAgICBuYW5vcyA9IGludCgobm93IC0gc2Vjb25kcykgKiAx
MCoqOSkKLS8vICAgICB0aW1lc3RhbXAgPSBUaW1lc3RhbXAoc2Vjb25kcz1zZWNvbmRzLCBuYW5v
cz1uYW5vcykKLS8vCi0vLwotbWVzc2FnZSBUaW1lc3RhbXAgewotCi0gIC8vIFJlcHJlc2VudHMg
c2Vjb25kcyBvZiBVVEMgdGltZSBzaW5jZSBVbml4IGVwb2NoCi0gIC8vIDE5NzAtMDEtMDFUMDA6
MDA6MDBaLiBNdXN0IGJlIGZyb20gZnJvbSAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0bwotICAvLyA5
OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuCi0gIGludDY0IHNlY29uZHMgPSAxOwotCi0g
IC8vIE5vbi1uZWdhdGl2ZSBmcmFjdGlvbnMgb2YgYSBzZWNvbmQgYXQgbmFub3NlY29uZCByZXNv
bHV0aW9uLiBOZWdhdGl2ZQotICAvLyBzZWNvbmQgdmFsdWVzIHdpdGggZnJhY3Rpb25zIG11c3Qg
c3RpbGwgaGF2ZSBub24tbmVnYXRpdmUgbmFub3MgdmFsdWVzCi0gIC8vIHRoYXQgY291bnQgZm9y
d2FyZCBpbiB0aW1lLiBNdXN0IGJlIGZyb20gMCB0byA5OTksOTk5LDk5OQotICAvLyBpbmNsdXNp
dmUuCi0gIGludDMyIG5hbm9zID0gMjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi90eXBlLnBiLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3R5cGUucGIuY2MKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDc1OWNhYjI3ODFmY2M4ZTI1Y2RkZmQyYjZlZWI0YzBmYjUzM2U0
MTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3R5cGUucGIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkxICswLDAgQEAK
LS8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVE
SVQhCi0vLyBzb3VyY2U6IGdvb2dsZS9wcm90b2J1Zi90eXBlLnByb3RvCi0KLSNkZWZpbmUgSU5U
RVJOQUxfU1VQUFJFU1NfUFJPVE9CVUZfRklFTERfREVQUkVDQVRJT04KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvdHlwZS5wYi5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9wb3J0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL29uY2Uu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGVfaW5sLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZ2Vu
ZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9y
ZWZsZWN0aW9uX29wcy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5o
PgotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGluY2x1ZGVzKQotCi1uYW1lc3BhY2UgZ29v
Z2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNvbnN0IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogVHlwZV9kZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlv
bioKLSAgVHlwZV9yZWZsZWN0aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OkRlc2NyaXB0b3IqIEZpZWxkX2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgotICBGaWVsZF9y
ZWZsZWN0aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlw
dG9yKiBGaWVsZF9LaW5kX2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RW51bURlc2NyaXB0b3IqIEZpZWxkX0NhcmRpbmFsaXR5X2Rlc2NyaXB0b3JfID0gTlVM
TDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogRW51bV9kZXNjcmlwdG9y
XyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRN
ZXNzYWdlUmVmbGVjdGlvbioKLSAgRW51bV9yZWZsZWN0aW9uXyA9IE5VTEw7Ci1jb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIEVudW1WYWx1ZV9kZXNjcmlwdG9yXyA9IE5VTEw7
Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVm
bGVjdGlvbioKLSAgRW51bVZhbHVlX3JlZmxlY3Rpb25fID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RGVzY3JpcHRvciogT3B0aW9uX2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9u
KgotICBPcHRpb25fcmVmbGVjdGlvbl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpFbnVtRGVzY3JpcHRvciogU3ludGF4X2Rlc2NyaXB0b3JfID0gTlVMTDsKLQotfSAgLy8gbmFt
ZXNwYWNlCi0KLQotdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJm
dHlwZV8yZXByb3RvKCkgewotICBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJm
dHlwZV8yZXByb3RvKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0
b3IqIGZpbGUgPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvclBvb2w6OmdlbmVy
YXRlZF9wb29sKCktPkZpbmRGaWxlQnlOYW1lKAotICAgICAgImdvb2dsZS9wcm90b2J1Zi90eXBl
LnByb3RvIik7Ci0gIEdPT0dMRV9DSEVDSyhmaWxlICE9IE5VTEwpOwotICBUeXBlX2Rlc2NyaXB0
b3JfID0gZmlsZS0+bWVzc2FnZV90eXBlKDApOwotICBzdGF0aWMgY29uc3QgaW50IFR5cGVfb2Zm
c2V0c19bNl0gPSB7Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxE
X09GRlNFVChUeXBlLCBuYW1lXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNT
QUdFX0ZJRUxEX09GRlNFVChUeXBlLCBmaWVsZHNfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VO
RVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKFR5cGUsIG9uZW9mc18pLAotICAgIEdPT0dMRV9Q
Uk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVHlwZSwgb3B0aW9uc18pLAot
ICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVHlwZSwg
c291cmNlX2NvbnRleHRfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VUKFR5cGUsIHN5bnRheF8pLAotICB9OwotICBUeXBlX3JlZmxlY3Rpb25fID0K
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVj
dGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBUeXBlX2Rlc2NyaXB0
b3JfLAotICAgICAgVHlwZTo6ZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAgICBUeXBlX29mZnNldHNf
LAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKFR5cGUpLAot
ICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChUeXBl
LCBfaW50ZXJuYWxfbWV0YWRhdGFfKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURf
TUVTU0FHRV9GSUVMRF9PRkZTRVQoVHlwZSwgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci0gIEZp
ZWxkX2Rlc2NyaXB0b3JfID0gZmlsZS0+bWVzc2FnZV90eXBlKDEpOwotICBzdGF0aWMgY29uc3Qg
aW50IEZpZWxkX29mZnNldHNfWzEwXSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVE
X01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkLCBraW5kXyksCi0gICAgR09PR0xFX1BST1RPQlVG
X0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChGaWVsZCwgY2FyZGluYWxpdHlfKSwKLSAg
ICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkLCBu
dW1iZXJfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZG
U0VUKEZpZWxkLCBuYW1lXyksCi0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdF
X0ZJRUxEX09GRlNFVChGaWVsZCwgdHlwZV91cmxfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VO
RVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkLCBvbmVvZl9pbmRleF8pLAotICAgIEdP
T0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmllbGQsIHBhY2tl
ZF8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQo
RmllbGQsIG9wdGlvbnNfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0Vf
RklFTERfT0ZGU0VUKEZpZWxkLCBqc29uX25hbWVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VO
RVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZpZWxkLCBkZWZhdWx0X3ZhbHVlXyksCi0gIH07
Ci0gIEZpZWxkX3JlZmxlY3Rpb25fID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rp
b24oCi0gICAgICBGaWVsZF9kZXNjcmlwdG9yXywKLSAgICAgIEZpZWxkOjpkZWZhdWx0X2luc3Rh
bmNlXywKLSAgICAgIEZpZWxkX29mZnNldHNfLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAg
IC0xLAotICAgICAgc2l6ZW9mKEZpZWxkKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFU
RURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRmllbGQsIF9pbnRlcm5hbF9tZXRhZGF0YV8pLAotICAg
ICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChGaWVsZCwg
X2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci0gIEZpZWxkX0tpbmRfZGVzY3JpcHRvcl8gPSBGaWVs
ZF9kZXNjcmlwdG9yXy0+ZW51bV90eXBlKDApOwotICBGaWVsZF9DYXJkaW5hbGl0eV9kZXNjcmlw
dG9yXyA9IEZpZWxkX2Rlc2NyaXB0b3JfLT5lbnVtX3R5cGUoMSk7Ci0gIEVudW1fZGVzY3JpcHRv
cl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUoMik7Ci0gIHN0YXRpYyBjb25zdCBpbnQgRW51bV9vZmZz
ZXRzX1s1XSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERf
T0ZGU0VUKEVudW0sIG5hbWVfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NB
R0VfRklFTERfT0ZGU0VUKEVudW0sIGVudW12YWx1ZV8pLAotICAgIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRW51bSwgb3B0aW9uc18pLAotICAgIEdPT0dM
RV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoRW51bSwgc291cmNlX2Nv
bnRleHRfKSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZG
U0VUKEVudW0sIHN5bnRheF8pLAotICB9OwotICBFbnVtX3JlZmxlY3Rpb25fID0KLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3
R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBFbnVtX2Rlc2NyaXB0b3JfLAotICAg
ICAgRW51bTo6ZGVmYXVsdF9pbnN0YW5jZV8sCi0gICAgICBFbnVtX29mZnNldHNfLAotICAgICAg
LTEsCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKEVudW0pLAotICAgICAgR09P
R0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChFbnVtLCBfaW50ZXJu
YWxfbWV0YWRhdGFfKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9G
SUVMRF9PRkZTRVQoRW51bSwgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci0gIEVudW1WYWx1ZV9k
ZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlwZSgzKTsKLSAgc3RhdGljIGNvbnN0IGludCBF
bnVtVmFsdWVfb2Zmc2V0c19bM10gPSB7Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9N
RVNTQUdFX0ZJRUxEX09GRlNFVChFbnVtVmFsdWUsIG5hbWVfKSwKLSAgICBHT09HTEVfUFJPVE9C
VUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEVudW1WYWx1ZSwgbnVtYmVyXyksCi0g
ICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChFbnVtVmFs
dWUsIG9wdGlvbnNfKSwKLSAgfTsKLSAgRW51bVZhbHVlX3JlZmxlY3Rpb25fID0KLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3
R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBFbnVtVmFsdWVfZGVzY3JpcHRvcl8s
Ci0gICAgICBFbnVtVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgRW51bVZhbHVlX29m
ZnNldHNfLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKEVu
dW1WYWx1ZSksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERf
T0ZGU0VUKEVudW1WYWx1ZSwgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICBHT09HTEVfUFJP
VE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEVudW1WYWx1ZSwgX2lzX2RlZmF1
bHRfaW5zdGFuY2VfKSk7Ci0gIE9wdGlvbl9kZXNjcmlwdG9yXyA9IGZpbGUtPm1lc3NhZ2VfdHlw
ZSg0KTsKLSAgc3RhdGljIGNvbnN0IGludCBPcHRpb25fb2Zmc2V0c19bMl0gPSB7Ci0gICAgR09P
R0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChPcHRpb24sIG5hbWVf
KSwKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE9w
dGlvbiwgdmFsdWVfKSwKLSAgfTsKLSAgT3B0aW9uX3JlZmxlY3Rpb25fID0KLSAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2Vu
ZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBPcHRpb25fZGVzY3JpcHRvcl8sCi0gICAg
ICBPcHRpb246OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgT3B0aW9uX29mZnNldHNfLAotICAg
ICAgLTEsCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKE9wdGlvbiksCi0gICAg
ICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKE9wdGlvbiwg
X2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01F
U1NBR0VfRklFTERfT0ZGU0VUKE9wdGlvbiwgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci0gIFN5
bnRheF9kZXNjcmlwdG9yXyA9IGZpbGUtPmVudW1fdHlwZSgwKTsKLX0KLQotbmFtZXNwYWNlIHsK
LQotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9y
c19vbmNlXyk7Ci1pbmxpbmUgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKSB7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xlT25jZUluaXQoJnByb3RvYnVmX0Fzc2lnbkRl
c2NyaXB0b3JzX29uY2VfLAotICAgICAgICAgICAgICAgICAmcHJvdG9idWZfQXNzaWduRGVzY19n
b29nbGVfMmZwcm90b2J1Zl8yZnR5cGVfMmVwcm90byk7Ci19Ci0KLXZvaWQgcHJvdG9idWZfUmVn
aXN0ZXJUeXBlcyhjb25zdCA6OnN0ZDo6c3RyaW5nJikgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNj
cmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50
ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBUeXBlX2Rlc2NyaXB0b3JfLCAm
VHlwZTo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdl
RmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBGaWVsZF9k
ZXNjcmlwdG9yXywgJkZpZWxkOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgK
LSAgICAgIEVudW1fZGVzY3JpcHRvcl8sICZFbnVtOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJh
dGVkTWVzc2FnZSgKLSAgICAgIEVudW1WYWx1ZV9kZXNjcmlwdG9yXywgJkVudW1WYWx1ZTo6ZGVm
YXVsdF9pbnN0YW5jZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6
SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBPcHRpb25fZGVzY3JpcHRv
cl8sICZPcHRpb246OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQot
Ci12b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZnR5cGVfMmVw
cm90bygpIHsKLSAgZGVsZXRlIFR5cGU6OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgVHlw
ZV9yZWZsZWN0aW9uXzsKLSAgZGVsZXRlIEZpZWxkOjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVs
ZXRlIEZpZWxkX3JlZmxlY3Rpb25fOwotICBkZWxldGUgRW51bTo6ZGVmYXVsdF9pbnN0YW5jZV87
Ci0gIGRlbGV0ZSBFbnVtX3JlZmxlY3Rpb25fOwotICBkZWxldGUgRW51bVZhbHVlOjpkZWZhdWx0
X2luc3RhbmNlXzsKLSAgZGVsZXRlIEVudW1WYWx1ZV9yZWZsZWN0aW9uXzsKLSAgZGVsZXRlIE9w
dGlvbjo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRlbGV0ZSBPcHRpb25fcmVmbGVjdGlvbl87Ci19
Ci0KLXZvaWQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnR5cGVfMmVwcm90
bygpIHsKLSAgc3RhdGljIGJvb2wgYWxyZWFkeV9oZXJlID0gZmFsc2U7Ci0gIGlmIChhbHJlYWR5
X2hlcmUpIHJldHVybjsKLSAgYWxyZWFkeV9oZXJlID0gdHJ1ZTsKLSAgR09PR0xFX1BST1RPQlVG
X1ZFUklGWV9WRVJTSU9OOwotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6cHJvdG9idWZfQWRkRGVz
Y19nb29nbGVfMmZwcm90b2J1Zl8yZmFueV8yZXByb3RvKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6cHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnNvdXJjZV81ZmNvbnRleHRf
MmVwcm90bygpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQb29sOjpJbnRlcm5h
bEFkZEdlbmVyYXRlZEZpbGUoCi0gICAgIlxuXDAzMmdvb2dsZS9wcm90b2J1Zi90eXBlLnByb3Rv
XDAyMlwwMTdnb29nbGUucHJvIgotICAgICJ0b2J1ZlwwMzJcMDMxZ29vZ2xlL3Byb3RvYnVmL2Fu
eS5wcm90b1wwMzIkZ29vZ2xlIgotICAgICIvcHJvdG9idWYvc291cmNlX2NvbnRleHQucHJvdG9c
IlwzMjdcMDAxXG5cMDA0VHlwZVwwMjIiCi0gICAgIlwwMTRcblwwMDRuYW1lXDAzMFwwMDEgXDAw
MShcdFwwMjImXG5cMDA2ZmllbGRzXDAzMFwwMDIgXDAwMyhcMDEzMlwwMjYuZ29vZ2xlLnAiCi0g
ICAgInJvdG9idWYuRmllbGRcMDIyXDAxNlxuXDAwNm9uZW9mc1wwMzBcMDAzIFwwMDMoXHRcMDIy
KFxuXDAwN29wdGlvbnMiCi0gICAgIlwwMzBcMDA0IFwwMDMoXDAxMzJcMDI3Lmdvb2dsZS5wcm90
b2J1Zi5PcHRpb25cMDIyNlxuXDAxNnNvdXJjIgotICAgICJlX2NvbnRleHRcMDMwXDAwNSBcMDAx
KFwwMTMyXDAzNi5nb29nbGUucHJvdG9idWYuU291cmNlIgotICAgICJDb250ZXh0XDAyMlwnXG5c
MDA2c3ludGF4XDAzMFwwMDYgXDAwMShcMDE2MlwwMjcuZ29vZ2xlLnByb3RvYnUiCi0gICAgImYu
U3ludGF4XCJcMzI1XDAwNVxuXDAwNUZpZWxkXDAyMilcblwwMDRraW5kXDAzMFwwMDEgXDAwMShc
MDE2MlwwMzMuZ29vZ2wiCi0gICAgImUucHJvdG9idWYuRmllbGQuS2luZFwwMjI3XG5cMDEzY2Fy
ZGluYWxpdHlcMDMwXDAwMiBcMDAxIgotICAgICIoXDAxNjJcIi5nb29nbGUucHJvdG9idWYuRmll
bGQuQ2FyZGluYWxpdHlcMDIyXDAxNiIKLSAgICAiXG5cMDA2bnVtYmVyXDAzMFwwMDMgXDAwMShc
MDA1XDAyMlwwMTRcblwwMDRuYW1lXDAzMFwwMDQgXDAwMShcdFwwMjJcMDIwXG5cMDEwdHlwZV91
cmwiCi0gICAgIlwwMzBcMDA2IFwwMDEoXHRcMDIyXDAyM1xuXDAxM29uZW9mX2luZGV4XDAzMFww
MDcgXDAwMShcMDA1XDAyMlwwMTZcblwwMDZwYWNrZWRcMDMwXDAxMCAiCi0gICAgIlwwMDEoXDAx
MFwwMjIoXG5cMDA3b3B0aW9uc1wwMzBcdCBcMDAzKFwwMTMyXDAyNy5nb29nbGUucHJvdG9idWYu
TyIKLSAgICAicHRpb25cMDIyXDAyMVxuXHRqc29uX25hbWVcMDMwXG4gXDAwMShcdFwwMjJcMDI1
XG5ccmRlZmF1bHRfdmFsdSIKLSAgICAiZVwwMzBcMDEzIFwwMDEoXHRcIlwzMTBcMDAyXG5cMDA0
S2luZFwwMjJcMDIwXG5cMDE0VFlQRV9VTktOT1dOXDAyMFwwMDBcMDIyXDAxN1xuXDAxM1RZIgot
ICAgICJQRV9ET1VCTEVcMDIwXDAwMVwwMjJcMDE2XG5cblRZUEVfRkxPQVRcMDIwXDAwMlwwMjJc
MDE2XG5cblRZUEVfSU5UNiIKLSAgICAiNFwwMjBcMDAzXDAyMlwwMTdcblwwMTNUWVBFX1VJTlQ2
NFwwMjBcMDA0XDAyMlwwMTZcblxuVFlQRV9JTlQzMlwwMjBcMDA1XDAyMlwwMjBcblwwMTQiCi0g
ICAgIlRZUEVfRklYRUQ2NFwwMjBcMDA2XDAyMlwwMjBcblwwMTRUWVBFX0ZJWEVEMzJcMDIwXDAw
N1wwMjJcclxuXHRUWVBFIgotICAgICJfQk9PTFwwMjBcMDEwXDAyMlwwMTdcblwwMTNUWVBFX1NU
UklOR1wwMjBcdFwwMjJcMDE2XG5cblRZUEVfR1JPVVBcMDIwXG4iCi0gICAgIlwwMjJcMDIwXG5c
MDE0VFlQRV9NRVNTQUdFXDAyMFwwMTNcMDIyXDAxNlxuXG5UWVBFX0JZVEVTXDAyMFwwMTRcMDIy
XDAxN1xuXDAxM1RZIgotICAgICJQRV9VSU5UMzJcMDIwXHJcMDIyXHJcblx0VFlQRV9FTlVNXDAy
MFwwMTZcMDIyXDAyMVxuXHJUWVBFX1NGSVhFIgotICAgICJEMzJcMDIwXDAxN1wwMjJcMDIxXG5c
clRZUEVfU0ZJWEVENjRcMDIwXDAyMFwwMjJcMDE3XG5cMDEzVFlQRV9TSU5UMzJcMDIwIgotICAg
ICJcMDIxXDAyMlwwMTdcblwwMTNUWVBFX1NJTlQ2NFwwMjBcMDIyXCJ0XG5cMDEzQ2FyZGluYWxp
dHlcMDIyXDAyN1xuXDAyM0NBUiIKLSAgICAiRElOQUxJVFlfVU5LTk9XTlwwMjBcMDAwXDAyMlww
MzBcblwwMjRDQVJESU5BTElUWV9PUFRJT04iCi0gICAgIkFMXDAyMFwwMDFcMDIyXDAzMFxuXDAy
NENBUkRJTkFMSVRZX1JFUVVJUkVEXDAyMFwwMDJcMDIyXDAzMFxuXDAyNENBUkRJTiIKLSAgICAi
QUxJVFlfUkVQRUFURURcMDIwXDAwM1wiXDMxNlwwMDFcblwwMDRFbnVtXDAyMlwwMTRcblwwMDRu
YW1lXDAzMFwwMDEgXDAwMShcdFwwMjIiCi0gICAgIi1cblx0ZW51bXZhbHVlXDAzMFwwMDIgXDAw
MyhcMDEzMlwwMzIuZ29vZ2xlLnByb3RvYnVmLkVudSIKLSAgICAibVZhbHVlXDAyMihcblwwMDdv
cHRpb25zXDAzMFwwMDMgXDAwMyhcMDEzMlwwMjcuZ29vZ2xlLnByb3RvYnUiCi0gICAgImYuT3B0
aW9uXDAyMjZcblwwMTZzb3VyY2VfY29udGV4dFwwMzBcMDA0IFwwMDEoXDAxMzJcMDM2Lmdvb2ds
IgotICAgICJlLnByb3RvYnVmLlNvdXJjZUNvbnRleHRcMDIyXCdcblwwMDZzeW50YXhcMDMwXDAw
NSBcMDAxKFwwMTYiCi0gICAgIjJcMDI3Lmdvb2dsZS5wcm90b2J1Zi5TeW50YXhcIlNcblx0RW51
bVZhbHVlXDAyMlwwMTQiCi0gICAgIlxuXDAwNG5hbWVcMDMwXDAwMSBcMDAxKFx0XDAyMlwwMTZc
blwwMDZudW1iZXJcMDMwXDAwMiBcMDAxKFwwMDVcMDIyKFxuXDAwN29wdGlvbnNcMDMwIgotICAg
ICJcMDAzIFwwMDMoXDAxMzJcMDI3Lmdvb2dsZS5wcm90b2J1Zi5PcHRpb25cIjtcblwwMDZPcHRp
b24iCi0gICAgIlwwMjJcMDE0XG5cMDA0bmFtZVwwMzBcMDAxIFwwMDEoXHRcMDIyI1xuXDAwNXZh
bHVlXDAzMFwwMDIgXDAwMShcMDEzMlwwMjQuZ29vZ2xlLnAiCi0gICAgInJvdG9idWYuQW55Ki5c
blwwMDZTeW50YXhcMDIyXDAyMVxuXHJTWU5UQVhfUFJPVE8yXDAyMFwwMDAiCi0gICAgIlwwMjJc
MDIxXG5cclNZTlRBWF9QUk9UTzNcMDIwXDAwMUJMXG5cMDIzY29tLmdvb2dsZS5wcm90b2IiCi0g
ICAgInVmQlx0VHlwZVByb3RvUFwwMDFcMjQwXDAwMVwwMDFcMjQyXDAwMlwwMDNHUEJcMjUyXDAw
MlwwMzZHb29nbGUuUHJvdG9iIgotICAgICJ1Zi5XZWxsS25vd25UeXBlc2JcMDA2cHJvdG8zIiwg
MTU0NSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVn
aXN0ZXJHZW5lcmF0ZWRGaWxlKAotICAgICJnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90byIsICZw
cm90b2J1Zl9SZWdpc3RlclR5cGVzKTsKLSAgVHlwZTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcg
VHlwZSgpOwotICBGaWVsZDo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgRmllbGQoKTsKLSAgRW51
bTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgRW51bSgpOwotICBFbnVtVmFsdWU6OmRlZmF1bHRf
aW5zdGFuY2VfID0gbmV3IEVudW1WYWx1ZSgpOwotICBPcHRpb246OmRlZmF1bHRfaW5zdGFuY2Vf
ID0gbmV3IE9wdGlvbigpOwotICBUeXBlOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVs
dEluc3RhbmNlKCk7Ci0gIEZpZWxkOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdElu
c3RhbmNlKCk7Ci0gIEVudW06OmRlZmF1bHRfaW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFu
Y2UoKTsKLSAgRW51bVZhbHVlOjpkZWZhdWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3Rh
bmNlKCk7Ci0gIE9wdGlvbjo6ZGVmYXVsdF9pbnN0YW5jZV8tPkluaXRBc0RlZmF1bHRJbnN0YW5j
ZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpPblNodXRkb3duKCZwcm90b2J1
Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8pOwotfQotCi0v
LyBGb3JjZSBBZGREZXNjcmlwdG9ycygpIHRvIGJlIGNhbGxlZCBhdCBzdGF0aWMgaW5pdGlhbGl6
YXRpb24gdGltZS4KLXN0cnVjdCBTdGF0aWNEZXNjcmlwdG9ySW5pdGlhbGl6ZXJfZ29vZ2xlXzJm
cHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8gewotICBTdGF0aWNEZXNjcmlwdG9ySW5pdGlhbGl6ZXJf
Z29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8oKSB7Ci0gICAgcHJvdG9idWZfQWRkRGVz
Y19nb29nbGVfMmZwcm90b2J1Zl8yZnR5cGVfMmVwcm90bygpOwotICB9Ci19IHN0YXRpY19kZXNj
cmlwdG9yX2luaXRpYWxpemVyX2dvb2dsZV8yZnByb3RvYnVmXzJmdHlwZV8yZXByb3RvXzsKLWNv
bnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3IqIFN5bnRheF9kZXNjcmlwdG9y
KCkgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIFN5bnRh
eF9kZXNjcmlwdG9yXzsKLX0KLWJvb2wgU3ludGF4X0lzVmFsaWQoaW50IHZhbHVlKSB7Ci0gIHN3
aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLQotbmFtZXNw
YWNlIHsKLQotc3RhdGljIHZvaWQgTWVyZ2VGcm9tRmFpbChpbnQgbGluZSkgR09PR0xFX0FUVFJJ
QlVURV9DT0xEOwotc3RhdGljIHZvaWQgTWVyZ2VGcm9tRmFpbChpbnQgbGluZSkgewotICBHT09H
TEVfQ0hFQ0soZmFsc2UpIDw8IF9fRklMRV9fIDw8ICI6IiA8PCBsaW5lOwotfQotCi19ICAvLyBu
YW1lc3BhY2UKLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwg
X01TQ19WRVIgPj0gMTkwMAotY29uc3QgaW50IFR5cGU6OmtOYW1lRmllbGROdW1iZXI7Ci1jb25z
dCBpbnQgVHlwZTo6a0ZpZWxkc0ZpZWxkTnVtYmVyOwotY29uc3QgaW50IFR5cGU6OmtPbmVvZnNG
aWVsZE51bWJlcjsKLWNvbnN0IGludCBUeXBlOjprT3B0aW9uc0ZpZWxkTnVtYmVyOwotY29uc3Qg
aW50IFR5cGU6OmtTb3VyY2VDb250ZXh0RmllbGROdW1iZXI7Ci1jb25zdCBpbnQgVHlwZTo6a1N5
bnRheEZpZWxkTnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19W
RVIgPj0gMTkwMAotCi1UeXBlOjpUeXBlKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3Nh
Z2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5UeXBl
KQotfQotCi12b2lkIFR5cGU6OkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpIHsKLSAgX2lzX2RlZmF1
bHRfaW5zdGFuY2VfID0gdHJ1ZTsKLSAgc291cmNlX2NvbnRleHRfID0gY29uc3RfY2FzdDwgOjpn
b29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0Kj4oJjo6Z29vZ2xlOjpwcm90b2J1Zjo6U291
cmNlQ29udGV4dDo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLX0KLQotVHlwZTo6VHlwZShjb25zdCBU
eXBlJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRl
cm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9t
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xl
LnByb3RvYnVmLlR5cGUpCi19Ci0KLXZvaWQgVHlwZTo6U2hhcmVkQ3RvcigpIHsKLSAgICBfaXNf
ZGVmYXVsdF9pbnN0YW5jZV8gPSBmYWxzZTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmcoKTsKLSAgX2NhY2hlZF9zaXplXyA9IDA7Ci0gIG5hbWVfLlVuc2Fm
ZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpKTsKLSAgc291cmNlX2NvbnRleHRfID0gTlVMTDsKLSAgc3ludGF4XyA9
IDA7Ci19Ci0KLVR5cGU6On5UeXBlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuVHlwZSkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12
b2lkIFR5cGU6OlNoYXJlZER0b3IoKSB7Ci0gIG5hbWVfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0g
IGlmICh0aGlzICE9IGRlZmF1bHRfaW5zdGFuY2VfKSB7Ci0gICAgZGVsZXRlIHNvdXJjZV9jb250
ZXh0XzsKLSAgfQotfQotCi12b2lkIFR5cGU6OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0
IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9z
aXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQot
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBUeXBlOjpkZXNjcmlwdG9yKCkg
ewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIFR5cGVfZGVz
Y3JpcHRvcl87Ci19Ci0KLWNvbnN0IFR5cGUmIFR5cGU6OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0g
IGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8y
ZnByb3RvYnVmXzJmdHlwZV8yZXByb3RvKCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87
Ci19Ci0KLVR5cGUqIFR5cGU6OmRlZmF1bHRfaW5zdGFuY2VfID0gTlVMTDsKLQotVHlwZSogVHlw
ZTo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIFR5cGUq
IG4gPSBuZXcgVHlwZTsKLSAgaWYgKGFyZW5hICE9IE5VTEwpIHsKLSAgICBhcmVuYS0+T3duKG4p
OwotICB9Ci0gIHJldHVybiBuOwotfQotCi12b2lkIFR5cGU6OkNsZWFyKCkgewotLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlR5
cGUpCi0gIG5hbWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgaWYgKEdldEFyZW5hTm9W
aXJ0dWFsKCkgPT0gTlVMTCAmJiBzb3VyY2VfY29udGV4dF8gIT0gTlVMTCkgZGVsZXRlIHNvdXJj
ZV9jb250ZXh0XzsKLSAgc291cmNlX2NvbnRleHRfID0gTlVMTDsKLSAgc3ludGF4XyA9IDA7Ci0g
IGZpZWxkc18uQ2xlYXIoKTsKLSAgb25lb2ZzXy5DbGVhcigpOwotICBvcHRpb25zXy5DbGVhcigp
OwotfQotCi1ib29sIFR5cGU6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBE
T18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3Rv
IGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlR5cGUpCi0gIGZv
ciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJv
b2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0
OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGRO
dW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICAgICAg
Y2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAg
ICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVfbmFtZSgpKSk7Ci0gICAgICAgICAgRE9f
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4
U3RyaW5nKAotICAgICAgICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgpLmxl
bmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5UeXBlLm5hbWUi
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxOCkpIGdvdG8gcGFyc2VfZmll
bGRzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdvb2ds
ZS5wcm90b2J1Zi5GaWVsZCBmaWVsZHMgPSAyOwotICAgICAgY2FzZSAyOiB7Ci0gICAgICAgIGlm
ICh0YWcgPT0gMTgpIHsKLSAgICAgICAgIHBhcnNlX2ZpZWxkczoKLSAgICAgICAgICBET18oaW5w
dXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOwotICAgICAgICAgcGFyc2VfbG9vcF9maWVs
ZHM6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoCi0gICAgICAgICAg
ICAgICAgaW5wdXQsIGFkZF9maWVsZHMoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBl
Y3RUYWcoMTgpKSBnb3RvIHBhcnNlX2xvb3BfZmllbGRzOwotICAgICAgICBpbnB1dC0+VW5zYWZl
RGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWco
MjYpKSBnb3RvIHBhcnNlX29uZW9mczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAg
IC8vIHJlcGVhdGVkIHN0cmluZyBvbmVvZnMgPSAzOwotICAgICAgY2FzZSAzOiB7Ci0gICAgICAg
IGlmICh0YWcgPT0gMjYpIHsKLSAgICAgICAgIHBhcnNlX29uZW9mczoKLSAgICAgICAgICBET18o
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmco
Ci0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPmFkZF9vbmVvZnMoKSkpOwotICAgICAgICAg
IERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5
VXRmOFN0cmluZygKLSAgICAgICAgICAgIHRoaXMtPm9uZW9mcyh0aGlzLT5vbmVvZnNfc2l6ZSgp
IC0gMSkuZGF0YSgpLAotICAgICAgICAgICAgdGhpcy0+b25lb2ZzKHRoaXMtPm9uZW9mc19zaXpl
KCkgLSAxKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpQQVJTRSwKLSAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYu
VHlwZS5vbmVvZnMiKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVf
dW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygyNikpIGdv
dG8gcGFyc2Vfb25lb2ZzOwotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygzNCkpIGdvdG8g
cGFyc2Vfb3B0aW9uczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHJlcGVh
dGVkIC5nb29nbGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSA0OwotICAgICAgY2FzZSA0OiB7
Ci0gICAgICAgIGlmICh0YWcgPT0gMzQpIHsKLSAgICAgICAgIHBhcnNlX29wdGlvbnM6Ci0gICAg
ICAgICAgRE9fKGlucHV0LT5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBh
cnNlX2xvb3Bfb3B0aW9uczoKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0
aCgKLSAgICAgICAgICAgICAgICBpbnB1dCwgYWRkX29wdGlvbnMoKSkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGlucHV0LT5FeHBlY3RUYWcoMzQpKSBnb3RvIHBhcnNlX2xvb3Bfb3B0aW9uczsKLSAgICAg
ICAgaW5wdXQtPlVuc2FmZURlY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCk7Ci0gICAgICAgIGlmIChp
bnB1dC0+RXhwZWN0VGFnKDQyKSkgZ290byBwYXJzZV9zb3VyY2VfY29udGV4dDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU291
cmNlQ29udGV4dCBzb3VyY2VfY29udGV4dCA9IDU7Ci0gICAgICBjYXNlIDU6IHsKLSAgICAgICAg
aWYgKHRhZyA9PSA0MikgewotICAgICAgICAgcGFyc2Vfc291cmNlX2NvbnRleHQ6Ci0gICAgICAg
ICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFk
TWVzc2FnZU5vVmlydHVhbCgKLSAgICAgICAgICAgICAgIGlucHV0LCBtdXRhYmxlX3NvdXJjZV9j
b250ZXh0KCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVz
dWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDQ4KSkgZ290byBw
YXJzZV9zeW50YXg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25h
bCAuZ29vZ2xlLnByb3RvYnVmLlN5bnRheCBzeW50YXggPSA2OwotICAgICAgY2FzZSA2OiB7Ci0g
ICAgICAgIGlmICh0YWcgPT0gNDgpIHsKLSAgICAgICAgIHBhcnNlX3N5bnRheDoKLSAgICAgICAg
ICBpbnQgdmFsdWU7Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICBpbnQs
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX0VOVU0+
KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJnZhbHVlKSkpOwotICAgICAgICAgIHNldF9zeW50
YXgoc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U3ludGF4ID4odmFsdWUpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0QXRFbmQoKSkgZ290byBzdWNjZXNzOwotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDogewotICAgICAgaGFuZGxlX3VudXN1
YWw6Ci0gICAgICAgIGlmICh0YWcgPT0gMCB8fAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAg
ICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpX
SVJFVFlQRV9FTkRfR1JPVVApIHsKLSAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0K
LSAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpTa2lwRmllbGQoaW5wdXQsIHRhZykpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNj
ZXNzOmdvb2dsZS5wcm90b2J1Zi5UeXBlKQotICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5U
eXBlKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgVHlwZTo6U2VyaWFs
aXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0
cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuVHlwZSkKLSAgLy8gb3B0aW9uYWwgc3Ry
aW5nIG5hbWUgPSAxOwotICBpZiAodGhpcy0+bmFtZSgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmlu
ZygKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJ
WkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLlR5cGUubmFtZSIpOwotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNl
ZCgKLSAgICAgIDEsIHRoaXMtPm5hbWUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVk
IC5nb29nbGUucHJvdG9idWYuRmllbGQgZmllbGRzID0gMjsKLSAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDAsIG4gPSB0aGlzLT5maWVsZHNfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJl
VG9BcnJheSgKLSAgICAgIDIsIHRoaXMtPmZpZWxkcyhpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8v
IHJlcGVhdGVkIHN0cmluZyBvbmVvZnMgPSAzOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMt
Pm9uZW9mc19zaXplKCk7IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+b25lb2ZzKGkp
LmRhdGEoKSwgdGhpcy0+b25lb2ZzKGkpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUu
cHJvdG9idWYuVHlwZS5vbmVvZnMiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmcoCi0gICAgICAzLCB0aGlzLT5vbmVvZnMoaSks
IG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBv
cHRpb25zID0gNDsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5vcHRpb25z
X3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VNYXliZVRvQXJyYXkoCi0gICAgICA0LCB0aGlz
LT5vcHRpb25zKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90
b2J1Zi5Tb3VyY2VDb250ZXh0IHNvdXJjZV9jb250ZXh0ID0gNTsKLSAgaWYgKHRoaXMtPmhhc19z
b3VyY2VfY29udGV4dCgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDUsICp0aGlzLT5z
b3VyY2VfY29udGV4dF8sIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnBy
b3RvYnVmLlN5bnRheCBzeW50YXggPSA2OwotICBpZiAodGhpcy0+c3ludGF4KCkgIT0gMCkgewot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUVu
dW0oCi0gICAgICA2LCB0aGlzLT5zeW50YXgoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfZW5kOmdvb2dsZS5wcm90b2J1Zi5UeXBlKQot
fQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBUeXBlOjpTZXJpYWxpemVXaXRoQ2FjaGVk
U2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29u
c3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0
YXJ0Omdvb2dsZS5wcm90b2J1Zi5UeXBlKQotICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7
Ci0gIGlmICh0aGlzLT5uYW1lKCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhp
cy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJn
b29nbGUucHJvdG9idWYuVHlwZS5uYW1lIik7Ci0gICAgdGFyZ2V0ID0KLSAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ1RvQXJyYXko
Ci0gICAgICAgIDEsIHRoaXMtPm5hbWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVk
IC5nb29nbGUucHJvdG9idWYuRmllbGQgZmllbGRzID0gMjsKLSAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDAsIG4gPSB0aGlzLT5maWVsZHNfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgdGFyZ2V0
ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAg
V3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgMiwgdGhpcy0+ZmllbGRzKGkp
LCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgc3RyaW5nIG9uZW9mcyA9IDM7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+b25lb2ZzX3NpemUoKTsgaSsrKSB7Ci0gICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlZlcmlmeVV0ZjhTdHJpbmco
Ci0gICAgICB0aGlzLT5vbmVvZnMoaSkuZGF0YSgpLCB0aGlzLT5vbmVvZnMoaSkubGVuZ3RoKCks
Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U0VS
SUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5UeXBlLm9uZW9mcyIpOwotICAgIHRhcmdl
dCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAg
IFdyaXRlU3RyaW5nVG9BcnJheSgzLCB0aGlzLT5vbmVvZnMoaSksIHRhcmdldCk7Ci0gIH0KLQot
ICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBvcHRpb25zID0gNDsKLSAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5vcHRpb25zX3NpemUoKTsgaSA8IG47IGkr
KykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgICAgIDQs
IHRoaXMtPm9wdGlvbnMoaSksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xl
LnByb3RvYnVmLlNvdXJjZUNvbnRleHQgc291cmNlX2NvbnRleHQgPSA1OwotICBpZiAodGhpcy0+
aGFzX3NvdXJjZV9jb250ZXh0KCkpIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxU
b0FycmF5KAotICAgICAgICA1LCAqdGhpcy0+c291cmNlX2NvbnRleHRfLCB0YXJnZXQpOwotICB9
Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5TeW50YXggc3ludGF4ID0gNjsKLSAg
aWYgKHRoaXMtPnN5bnRheCgpICE9IDApIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVtVG9BcnJheSgKLSAgICAgIDYs
IHRoaXMtPnN5bnRheCgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLlR5cGUpCi0gIHJl
dHVybiB0YXJnZXQ7Ci19Ci0KLWludCBUeXBlOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJvdG9i
dWYuVHlwZSkKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyBu
YW1lID0gMTsKLSAgaWYgKHRoaXMtPm5hbWUoKS5zaXplKCkgPiAwKSB7Ci0gICAgdG90YWxfc2l6
ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpTdHJpbmdTaXplKAotICAgICAgICB0aGlzLT5uYW1lKCkpOwotICB9Ci0KLSAgLy8gb3B0
aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0IHNvdXJjZV9jb250ZXh0ID0gNTsK
LSAgaWYgKHRoaXMtPmhhc19zb3VyY2VfY29udGV4dCgpKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAx
ICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpN
ZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgKnRoaXMtPnNvdXJjZV9jb250ZXh0Xyk7Ci0g
IH0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlN5bnRheCBzeW50YXggPSA2Owot
ICBpZiAodGhpcy0+c3ludGF4KCkgIT0gMCkgewotICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6RW51bVNpemUo
dGhpcy0+c3ludGF4KCkpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5G
aWVsZCBmaWVsZHMgPSAyOwotICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5maWVsZHNfc2l6ZSgp
OwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPmZpZWxkc19zaXplKCk7IGkrKykgewotICAg
IHRvdGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgdGhpcy0+ZmllbGRzKGkp
KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIHN0cmluZyBvbmVvZnMgPSAzOwotICB0b3RhbF9zaXpl
ICs9IDEgKiB0aGlzLT5vbmVvZnNfc2l6ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMt
Pm9uZW9mc19zaXplKCk7IGkrKykgewotICAgIHRvdGFsX3NpemUgKz0gOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0cmluZ1NpemUoCi0gICAgICB0aGlzLT5v
bmVvZnMoaSkpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5PcHRpb24g
b3B0aW9ucyA9IDQ7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMtPm9wdGlvbnNfc2l6ZSgpOwot
ICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPm9wdGlvbnNfc2l6ZSgpOyBpKyspIHsKLSAgICB0
b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAgIHRoaXMtPm9wdGlvbnMoaSkp
OwotICB9Ci0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2Nh
Y2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVT
X0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBUeXBlOjpNZXJnZUZyb20o
Y29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuVHlwZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJn
ZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgVHlwZSogc291cmNlID0gCi0gICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IFR5
cGU+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpn
b29nbGUucHJvdG9idWYuVHlwZSkKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpS
ZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdv
b2dsZS5wcm90b2J1Zi5UeXBlKQotICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12
b2lkIFR5cGU6Ok1lcmdlRnJvbShjb25zdCBUeXBlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuVHlwZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJn
ZUZyb21GYWlsKF9fTElORV9fKTsKLSAgZmllbGRzXy5NZXJnZUZyb20oZnJvbS5maWVsZHNfKTsK
LSAgb25lb2ZzXy5NZXJnZUZyb20oZnJvbS5vbmVvZnNfKTsKLSAgb3B0aW9uc18uTWVyZ2VGcm9t
KGZyb20ub3B0aW9uc18pOwotICBpZiAoZnJvbS5uYW1lKCkuc2l6ZSgpID4gMCkgewotCi0gICAg
bmFtZV8uQXNzaWduV2l0aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBmcm9tLm5hbWVfKTsKLSAgfQotICBpZiAoZnJv
bS5oYXNfc291cmNlX2NvbnRleHQoKSkgewotICAgIG11dGFibGVfc291cmNlX2NvbnRleHQoKS0+
Ojpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0OjpNZXJnZUZyb20oZnJvbS5zb3VyY2Vf
Y29udGV4dCgpKTsKLSAgfQotICBpZiAoZnJvbS5zeW50YXgoKSAhPSAwKSB7Ci0gICAgc2V0X3N5
bnRheChmcm9tLnN5bnRheCgpKTsKLSAgfQotfQotCi12b2lkIFR5cGU6OkNvcHlGcm9tKGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuVHlw
ZSkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9t
KGZyb20pOwotfQotCi12b2lkIFR5cGU6OkNvcHlGcm9tKGNvbnN0IFR5cGUmIGZyb20pIHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6
Z29vZ2xlLnByb3RvYnVmLlR5cGUpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENs
ZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBUeXBlOjpJc0luaXRpYWxpemVk
KCkgY29uc3QgewotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIFR5cGU6OlN3YXAoVHlwZSog
b3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90
aGVyKTsKLX0KLXZvaWQgVHlwZTo6SW50ZXJuYWxTd2FwKFR5cGUqIG90aGVyKSB7Ci0gIG5hbWVf
LlN3YXAoJm90aGVyLT5uYW1lXyk7Ci0gIGZpZWxkc18uVW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+
ZmllbGRzXyk7Ci0gIG9uZW9mc18uVW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+b25lb2ZzXyk7Ci0g
IG9wdGlvbnNfLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPm9wdGlvbnNfKTsKLSAgc3RkOjpzd2Fw
KHNvdXJjZV9jb250ZXh0Xywgb3RoZXItPnNvdXJjZV9jb250ZXh0Xyk7Ci0gIHN0ZDo6c3dhcChz
eW50YXhfLCBvdGhlci0+c3ludGF4Xyk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3Ro
ZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3Ro
ZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIFR5
cGU6OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09u
Y2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRh
dGEuZGVzY3JpcHRvciA9IFR5cGVfZGVzY3JpcHRvcl87Ci0gIG1ldGFkYXRhLnJlZmxlY3Rpb24g
PSBUeXBlX3JlZmxlY3Rpb25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JV
Rl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIFR5cGUKLQotLy8gb3B0aW9uYWwgc3RyaW5nIG5h
bWUgPSAxOwotdm9pZCBUeXBlOjpjbGVhcl9uYW1lKCkgewotICBuYW1lXy5DbGVhclRvRW1wdHlO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgVHlwZTo6bmFtZSgpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9i
dWYuVHlwZS5uYW1lKQotICByZXR1cm4gbmFtZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQg
VHlwZTo6c2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgCi0gIG5hbWVf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLlR5cGUubmFtZSkKLX0KLSB2b2lkIFR5cGU6OnNldF9u
YW1lKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIAotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpz
dGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLlR5cGUubmFtZSkKLX0KLSB2b2lkIFR5cGU6OnNldF9u
YW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLlR5cGUubmFtZSkKLX0KLSA6OnN0ZDo6c3RyaW5n
KiBUeXBlOjptdXRhYmxlX25hbWUoKSB7Ci0gIAotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuVHlwZS5uYW1lKQotICByZXR1cm4gbmFt
ZV8uTXV0YWJsZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBUeXBlOjpyZWxlYXNl
X25hbWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdv
b2dsZS5wcm90b2J1Zi5UeXBlLm5hbWUpCi0gIAotICByZXR1cm4gbmFtZV8uUmVsZWFzZU5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpKTsKLX0KLSB2b2lkIFR5cGU6OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3RyaW5n
KiBuYW1lKSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAK
LSAgfQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5U
eXBlLm5hbWUpCi19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRmllbGQgZmllbGRz
ID0gMjsKLWludCBUeXBlOjpmaWVsZHNfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIGZpZWxkc18u
c2l6ZSgpOwotfQotdm9pZCBUeXBlOjpjbGVhcl9maWVsZHMoKSB7Ci0gIGZpZWxkc18uQ2xlYXIo
KTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGQmIFR5cGU6OmZpZWxkcyhpbnQg
aW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpn
b29nbGUucHJvdG9idWYuVHlwZS5maWVsZHMpCi0gIHJldHVybiBmaWVsZHNfLkdldChpbmRleCk7
Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkKiBUeXBlOjptdXRhYmxlX2ZpZWxkcyhpbnQg
aW5kZXgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29v
Z2xlLnByb3RvYnVmLlR5cGUuZmllbGRzKQotICByZXR1cm4gZmllbGRzXy5NdXRhYmxlKGluZGV4
KTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIFR5cGU6OmFkZF9maWVsZHMoKSB7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLlR5
cGUuZmllbGRzKQotICByZXR1cm4gZmllbGRzXy5BZGQoKTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1
Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZCA+KgotVHlwZTo6
bXV0YWJsZV9maWVsZHMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9t
dXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlR5cGUuZmllbGRzKQotICByZXR1cm4gJmZpZWxk
c187Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29v
Z2xlOjpwcm90b2J1Zjo6RmllbGQgPiYKLVR5cGU6OmZpZWxkcygpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlR5cGUuZmll
bGRzKQotICByZXR1cm4gZmllbGRzXzsKLX0KLQotLy8gcmVwZWF0ZWQgc3RyaW5nIG9uZW9mcyA9
IDM7Ci1pbnQgVHlwZTo6b25lb2ZzX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBvbmVvZnNfLnNp
emUoKTsKLX0KLXZvaWQgVHlwZTo6Y2xlYXJfb25lb2ZzKCkgewotICBvbmVvZnNfLkNsZWFyKCk7
Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgVHlwZTo6b25lb2ZzKGludCBpbmRleCkgY29uc3Qg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1
Zi5UeXBlLm9uZW9mcykKLSAgcmV0dXJuIG9uZW9mc18uR2V0KGluZGV4KTsKLX0KLSA6OnN0ZDo6
c3RyaW5nKiBUeXBlOjptdXRhYmxlX29uZW9mcyhpbnQgaW5kZXgpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlR5cGUub25lb2Zz
KQotICByZXR1cm4gb25lb2ZzXy5NdXRhYmxlKGluZGV4KTsKLX0KLSB2b2lkIFR5cGU6OnNldF9v
bmVvZnMoaW50IGluZGV4LCBjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5UeXBlLm9uZW9m
cykKLSAgb25lb2ZzXy5NdXRhYmxlKGluZGV4KS0+YXNzaWduKHZhbHVlKTsKLX0KLSB2b2lkIFR5
cGU6OnNldF9vbmVvZnMoaW50IGluZGV4LCBjb25zdCBjaGFyKiB2YWx1ZSkgewotICBvbmVvZnNf
Lk11dGFibGUoaW5kZXgpLT5hc3NpZ24odmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLlR5cGUub25lb2ZzKQotfQotIHZv
aWQgVHlwZTo6c2V0X29uZW9mcyhpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qg
c2l6ZSkgewotICBvbmVvZnNfLk11dGFibGUoaW5kZXgpLT5hc3NpZ24oCi0gICAgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5UeXBlLm9uZW9mcykK
LX0KLSA6OnN0ZDo6c3RyaW5nKiBUeXBlOjphZGRfb25lb2ZzKCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlR5cGUub25l
b2ZzKQotICByZXR1cm4gb25lb2ZzXy5BZGQoKTsKLX0KLSB2b2lkIFR5cGU6OmFkZF9vbmVvZnMo
Y29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgb25lb2ZzXy5BZGQoKS0+YXNzaWduKHZh
bHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJv
dG9idWYuVHlwZS5vbmVvZnMpCi19Ci0gdm9pZCBUeXBlOjphZGRfb25lb2ZzKGNvbnN0IGNoYXIq
IHZhbHVlKSB7Ci0gIG9uZW9mc18uQWRkKCktPmFzc2lnbih2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9hZGRfY2hhcjpnb29nbGUucHJvdG9idWYuVHlwZS5vbmVv
ZnMpCi19Ci0gdm9pZCBUeXBlOjphZGRfb25lb2ZzKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qg
c2l6ZSkgewotICBvbmVvZnNfLkFkZCgpLT5hc3NpZ24ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4odmFsdWUpLCBzaXplKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X2FkZF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5UeXBlLm9uZW9mcykKLX0KLSBjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+JgotVHlwZTo6
b25lb2ZzKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlz
dDpnb29nbGUucHJvdG9idWYuVHlwZS5vbmVvZnMpCi0gIHJldHVybiBvbmVvZnNfOwotfQotIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpzdGQ6OnN0cmluZz4qCi1UeXBl
OjptdXRhYmxlX29uZW9mcygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuVHlwZS5vbmVvZnMpCi0gIHJldHVybiAmb25l
b2ZzXzsKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5PcHRpb24gb3B0aW9ucyA9
IDQ7Ci1pbnQgVHlwZTo6b3B0aW9uc19zaXplKCkgY29uc3QgewotICByZXR1cm4gb3B0aW9uc18u
c2l6ZSgpOwotfQotdm9pZCBUeXBlOjpjbGVhcl9vcHRpb25zKCkgewotICBvcHRpb25zXy5DbGVh
cigpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24mIFR5cGU6Om9wdGlvbnMo
aW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9n
ZXQ6Z29vZ2xlLnByb3RvYnVmLlR5cGUub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLkdldChp
bmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiogVHlwZTo6bXV0YWJsZV9vcHRp
b25zKGludCBpbmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0
YWJsZTpnb29nbGUucHJvdG9idWYuVHlwZS5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc18uTXV0
YWJsZShpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiogVHlwZTo6YWRkX29w
dGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xl
LnByb3RvYnVmLlR5cGUub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLkFkZCgpOwotfQotOjpn
b29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9w
dGlvbiA+KgotVHlwZTo6bXV0YWJsZV9vcHRpb25zKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5UeXBlLm9wdGlvbnMp
Ci0gIHJldHVybiAmb3B0aW9uc187Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4mCi1UeXBlOjpvcHRpb25z
KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29n
bGUucHJvdG9idWYuVHlwZS5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc187Ci19Ci0KLS8vIG9w
dGlvbmFsIC5nb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dCBzb3VyY2VfY29udGV4dCA9IDU7
Ci1ib29sIFR5cGU6Omhhc19zb3VyY2VfY29udGV4dCgpIGNvbnN0IHsKLSAgcmV0dXJuICFfaXNf
ZGVmYXVsdF9pbnN0YW5jZV8gJiYgc291cmNlX2NvbnRleHRfICE9IE5VTEw7Ci19Ci12b2lkIFR5
cGU6OmNsZWFyX3NvdXJjZV9jb250ZXh0KCkgewotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9
PSBOVUxMICYmIHNvdXJjZV9jb250ZXh0XyAhPSBOVUxMKSBkZWxldGUgc291cmNlX2NvbnRleHRf
OwotICBzb3VyY2VfY29udGV4dF8gPSBOVUxMOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpTb3VyY2VDb250ZXh0JiBUeXBlOjpzb3VyY2VfY29udGV4dCgpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVHlwZS5zb3Vy
Y2VfY29udGV4dCkKLSAgcmV0dXJuIHNvdXJjZV9jb250ZXh0XyAhPSBOVUxMID8gKnNvdXJjZV9j
b250ZXh0XyA6ICpkZWZhdWx0X2luc3RhbmNlXy0+c291cmNlX2NvbnRleHRfOwotfQotOjpnb29n
bGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiBUeXBlOjptdXRhYmxlX3NvdXJjZV9jb250ZXh0
KCkgewotICAKLSAgaWYgKHNvdXJjZV9jb250ZXh0XyA9PSBOVUxMKSB7Ci0gICAgc291cmNlX2Nv
bnRleHRfID0gbmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dDsKLSAgfQotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYu
VHlwZS5zb3VyY2VfY29udGV4dCkKLSAgcmV0dXJuIHNvdXJjZV9jb250ZXh0XzsKLX0KLTo6Z29v
Z2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCogVHlwZTo6cmVsZWFzZV9zb3VyY2VfY29udGV4
dCgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xl
LnByb3RvYnVmLlR5cGUuc291cmNlX2NvbnRleHQpCi0gIAotICA6Omdvb2dsZTo6cHJvdG9idWY6
OlNvdXJjZUNvbnRleHQqIHRlbXAgPSBzb3VyY2VfY29udGV4dF87Ci0gIHNvdXJjZV9jb250ZXh0
XyA9IE5VTEw7Ci0gIHJldHVybiB0ZW1wOwotfQotdm9pZCBUeXBlOjpzZXRfYWxsb2NhdGVkX3Nv
dXJjZV9jb250ZXh0KDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCogc291cmNlX2Nv
bnRleHQpIHsKLSAgZGVsZXRlIHNvdXJjZV9jb250ZXh0XzsKLSAgc291cmNlX2NvbnRleHRfID0g
c291cmNlX2NvbnRleHQ7Ci0gIGlmIChzb3VyY2VfY29udGV4dCkgewotICAgIAotICB9IGVsc2Ug
ewotICAgIAotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxs
b2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5UeXBlLnNvdXJjZV9jb250ZXh0KQotfQotCi0vLyBvcHRp
b25hbCAuZ29vZ2xlLnByb3RvYnVmLlN5bnRheCBzeW50YXggPSA2Owotdm9pZCBUeXBlOjpjbGVh
cl9zeW50YXgoKSB7Ci0gIHN5bnRheF8gPSAwOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U3lu
dGF4IFR5cGU6OnN5bnRheCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVHlwZS5zeW50YXgpCi0gIHJldHVybiBzdGF0aWNf
Y2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpTeW50YXggPihzeW50YXhfKTsKLX0KLSB2b2lkIFR5
cGU6OnNldF9zeW50YXgoOjpnb29nbGU6OnByb3RvYnVmOjpTeW50YXggdmFsdWUpIHsKLSAgCi0g
IHN5bnRheF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dDpnb29nbGUucHJvdG9idWYuVHlwZS5zeW50YXgpCi19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZf
SU5MSU5FX05PVF9JTl9IRUFERVJTCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvciogRmllbGRfS2luZF9kZXNjcmlwdG9yKCkgewotICBw
cm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIEZpZWxkX0tpbmRfZGVz
Y3JpcHRvcl87Ci19Ci1ib29sIEZpZWxkX0tpbmRfSXNWYWxpZChpbnQgdmFsdWUpIHsKLSAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAg
Y2FzZSAzOgotICAgIGNhc2UgNDoKLSAgICBjYXNlIDU6Ci0gICAgY2FzZSA2OgotICAgIGNhc2Ug
NzoKLSAgICBjYXNlIDg6Ci0gICAgY2FzZSA5OgotICAgIGNhc2UgMTA6Ci0gICAgY2FzZSAxMToK
LSAgICBjYXNlIDEyOgotICAgIGNhc2UgMTM6Ci0gICAgY2FzZSAxNDoKLSAgICBjYXNlIDE1Ogot
ICAgIGNhc2UgMTY6Ci0gICAgY2FzZSAxNzoKLSAgICBjYXNlIDE4OgotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi0jaWYgIWRl
ZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IEZpZWxkX0tpbmQgRmll
bGQ6OlRZUEVfVU5LTk9XTjsKLWNvbnN0IEZpZWxkX0tpbmQgRmllbGQ6OlRZUEVfRE9VQkxFOwot
Y29uc3QgRmllbGRfS2luZCBGaWVsZDo6VFlQRV9GTE9BVDsKLWNvbnN0IEZpZWxkX0tpbmQgRmll
bGQ6OlRZUEVfSU5UNjQ7Ci1jb25zdCBGaWVsZF9LaW5kIEZpZWxkOjpUWVBFX1VJTlQ2NDsKLWNv
bnN0IEZpZWxkX0tpbmQgRmllbGQ6OlRZUEVfSU5UMzI7Ci1jb25zdCBGaWVsZF9LaW5kIEZpZWxk
OjpUWVBFX0ZJWEVENjQ7Ci1jb25zdCBGaWVsZF9LaW5kIEZpZWxkOjpUWVBFX0ZJWEVEMzI7Ci1j
b25zdCBGaWVsZF9LaW5kIEZpZWxkOjpUWVBFX0JPT0w7Ci1jb25zdCBGaWVsZF9LaW5kIEZpZWxk
OjpUWVBFX1NUUklORzsKLWNvbnN0IEZpZWxkX0tpbmQgRmllbGQ6OlRZUEVfR1JPVVA7Ci1jb25z
dCBGaWVsZF9LaW5kIEZpZWxkOjpUWVBFX01FU1NBR0U7Ci1jb25zdCBGaWVsZF9LaW5kIEZpZWxk
OjpUWVBFX0JZVEVTOwotY29uc3QgRmllbGRfS2luZCBGaWVsZDo6VFlQRV9VSU5UMzI7Ci1jb25z
dCBGaWVsZF9LaW5kIEZpZWxkOjpUWVBFX0VOVU07Ci1jb25zdCBGaWVsZF9LaW5kIEZpZWxkOjpU
WVBFX1NGSVhFRDMyOwotY29uc3QgRmllbGRfS2luZCBGaWVsZDo6VFlQRV9TRklYRUQ2NDsKLWNv
bnN0IEZpZWxkX0tpbmQgRmllbGQ6OlRZUEVfU0lOVDMyOwotY29uc3QgRmllbGRfS2luZCBGaWVs
ZDo6VFlQRV9TSU5UNjQ7Ci1jb25zdCBGaWVsZF9LaW5kIEZpZWxkOjpLaW5kX01JTjsKLWNvbnN0
IEZpZWxkX0tpbmQgRmllbGQ6OktpbmRfTUFYOwotY29uc3QgaW50IEZpZWxkOjpLaW5kX0FSUkFZ
U0laRTsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAK
LWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3IqIEZpZWxkX0NhcmRpbmFs
aXR5X2Rlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwot
ICByZXR1cm4gRmllbGRfQ2FyZGluYWxpdHlfZGVzY3JpcHRvcl87Ci19Ci1ib29sIEZpZWxkX0Nh
cmRpbmFsaXR5X0lzVmFsaWQoaW50IHZhbHVlKSB7Ci0gIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMzoKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KLQotI2lm
ICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBGaWVsZF9DYXJk
aW5hbGl0eSBGaWVsZDo6Q0FSRElOQUxJVFlfVU5LTk9XTjsKLWNvbnN0IEZpZWxkX0NhcmRpbmFs
aXR5IEZpZWxkOjpDQVJESU5BTElUWV9PUFRJT05BTDsKLWNvbnN0IEZpZWxkX0NhcmRpbmFsaXR5
IEZpZWxkOjpDQVJESU5BTElUWV9SRVFVSVJFRDsKLWNvbnN0IEZpZWxkX0NhcmRpbmFsaXR5IEZp
ZWxkOjpDQVJESU5BTElUWV9SRVBFQVRFRDsKLWNvbnN0IEZpZWxkX0NhcmRpbmFsaXR5IEZpZWxk
OjpDYXJkaW5hbGl0eV9NSU47Ci1jb25zdCBGaWVsZF9DYXJkaW5hbGl0eSBGaWVsZDo6Q2FyZGlu
YWxpdHlfTUFYOwotY29uc3QgaW50IEZpZWxkOjpDYXJkaW5hbGl0eV9BUlJBWVNJWkU7Ci0jZW5k
aWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0jaWYgIWRlZmlu
ZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBGaWVsZDo6a0tpbmRG
aWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWVsZDo6a0NhcmRpbmFsaXR5RmllbGROdW1iZXI7Ci1j
b25zdCBpbnQgRmllbGQ6OmtOdW1iZXJGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWVsZDo6a05h
bWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWVsZDo6a1R5cGVVcmxGaWVsZE51bWJlcjsKLWNv
bnN0IGludCBGaWVsZDo6a09uZW9mSW5kZXhGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWVsZDo6
a1BhY2tlZEZpZWxkTnVtYmVyOwotY29uc3QgaW50IEZpZWxkOjprT3B0aW9uc0ZpZWxkTnVtYmVy
OwotY29uc3QgaW50IEZpZWxkOjprSnNvbk5hbWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBGaWVs
ZDo6a0RlZmF1bHRWYWx1ZUZpZWxkTnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZF
UikgfHwgX01TQ19WRVIgPj0gMTkwMAotCi1GaWVsZDo6RmllbGQoKQotICA6IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVk
Q3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xl
LnByb3RvYnVmLkZpZWxkKQotfQotCi12b2lkIEZpZWxkOjpJbml0QXNEZWZhdWx0SW5zdGFuY2Uo
KSB7Ci0gIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IHRydWU7Ci19Ci0KLUZpZWxkOjpGaWVsZChj
b25zdCBGaWVsZCYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAg
ICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZy
b20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9y
Omdvb2dsZS5wcm90b2J1Zi5GaWVsZCkKLX0KLQotdm9pZCBGaWVsZDo6U2hhcmVkQ3RvcigpIHsK
LSAgICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSBmYWxzZTsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmcoKTsKLSAgX2NhY2hlZF9zaXplXyA9IDA7Ci0gIGtp
bmRfID0gMDsKLSAgY2FyZGluYWxpdHlfID0gMDsKLSAgbnVtYmVyXyA9IDA7Ci0gIG5hbWVfLlVu
c2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgdHlwZV91cmxfLlVuc2FmZVNldERlZmF1bHQoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LSAgb25lb2ZfaW5kZXhfID0gMDsKLSAgcGFja2VkXyA9IGZhbHNlOwotICBqc29uX25hbWVfLlVu
c2FmZVNldERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgZGVmYXVsdF92YWx1ZV8uVW5zYWZlU2V0RGVmYXVsdCgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCkpOwotfQotCi1GaWVsZDo6fkZpZWxkKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRmllbGQpCi0gIFNoYXJlZER0b3IoKTsKLX0K
LQotdm9pZCBGaWVsZDo6U2hhcmVkRHRvcigpIHsKLSAgbmFtZV8uRGVzdHJveU5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTsKLSAgdHlwZV91cmxfLkRlc3Ryb3lOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGpzb25fbmFtZV8uRGVzdHJv
eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLSAgZGVmYXVsdF92YWx1ZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAg
aWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIEZpZWxkOjpT
ZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9D
T05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogRmllbGQ6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0
b3JzT25jZSgpOwotICByZXR1cm4gRmllbGRfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IEZpZWxk
JiBGaWVsZDo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09
IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8o
KTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRmllbGQqIEZpZWxkOjpkZWZh
dWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLUZpZWxkKiBGaWVsZDo6TmV3KDo6Z29vZ2xlOjpwcm90
b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIEZpZWxkKiBuID0gbmV3IEZpZWxkOwotICBp
ZiAoYXJlbmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47
Ci19Ci0KLXZvaWQgRmllbGQ6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkKQotI2lmIGRlZmluZWQo
X19jbGFuZ19fKQotI2RlZmluZSBaUl9IRUxQRVJfKGYpIFwKLSAgX1ByYWdtYSgiY2xhbmcgZGlh
Z25vc3RpYyBwdXNoIikgXAotICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCIt
V2ludmFsaWQtb2Zmc2V0b2ZcIiIpIFwKLSAgX19idWlsdGluX29mZnNldG9mKEZpZWxkLCBmKSBc
Ci0gIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcG9wIikKLSNlbHNlCi0jZGVmaW5lIFpSX0hF
TFBFUl8oZikgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oXAotICAmcmVpbnRlcnByZXRfY2FzdDxG
aWVsZCo+KDE2KS0+ZikKLSNlbmRpZgotCi0jZGVmaW5lIFpSXyhmaXJzdCwgbGFzdCkgZG8ge1wK
LSAgOjptZW1zZXQoJmZpcnN0LCAwLFwKLSAgICAgICAgICAgWlJfSEVMUEVSXyhsYXN0KSAtIFpS
X0hFTFBFUl8oZmlyc3QpICsgc2l6ZW9mKGxhc3QpKTtcCi19IHdoaWxlICgwKQotCi0gIFpSXyhr
aW5kXywgY2FyZGluYWxpdHlfKTsKLSAgWlJfKG51bWJlcl8sIG9uZW9mX2luZGV4Xyk7Ci0gIG5h
bWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgdHlwZV91cmxfLkNsZWFyVG9FbXB0eU5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLSAgcGFja2VkXyA9IGZhbHNlOwotICBqc29uX25hbWVfLkNsZWFyVG9FbXB0
eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLSAgZGVmYXVsdF92YWx1ZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotCi0jdW5kZWYgWlJfSEVMUEVSXwotI3VuZGVmIFpSXwotCi0gIG9wdGlvbnNfLkNsZWFyKCk7
Ci19Ci0KLWJvb2wgRmllbGQ6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBE
T18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3Rv
IGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkKQotICBm
b3IgKDs7KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyLCBi
b29sPiBwID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0b2ZmKDEyNyk7Ci0gICAgdGFnID0gcC5maXJz
dDsKLSAgICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAo
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxk
TnVtYmVyKHRhZykpIHsKLSAgICAgIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGQu
S2luZCBraW5kID0gMTsKLSAgICAgIGNhc2UgMTogewotICAgICAgICBpZiAodGFnID09IDgpIHsK
LSAgICAgICAgICBpbnQgdmFsdWU7Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAg
ICAgICBpbnQsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpU
WVBFX0VOVU0+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJnZhbHVlKSkpOwotICAgICAgICAg
IHNldF9raW5kKHN0YXRpY19jYXN0PCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmQgPih2
YWx1ZSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMTYpKSBnb3RvIHBhcnNl
X2NhcmRpbmFsaXR5OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9u
YWwgLmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5DYXJkaW5hbGl0eSBjYXJkaW5hbGl0eSA9IDI7Ci0g
ICAgICBjYXNlIDI6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAxNikgewotICAgICAgICAgcGFyc2Vf
Y2FyZGluYWxpdHk6Ci0gICAgICAgICAgaW50IHZhbHVlOwotICAgICAgICAgIERPXygoOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0g
ICAgICAgICAgICAgICAgICAgaW50LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6VFlQRV9FTlVNPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZ2YWx1ZSkp
KTsKLSAgICAgICAgICBzZXRfY2FyZGluYWxpdHkoc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RmllbGRfQ2FyZGluYWxpdHkgPih2YWx1ZSkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0
LT5FeHBlY3RUYWcoMjQpKSBnb3RvIHBhcnNlX251bWJlcjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDM7Ci0gICAgICBjYXNlIDM6
IHsKLSAgICAgICAgaWYgKHRhZyA9PSAyNCkgewotICAgICAgICAgcGFyc2VfbnVtYmVyOgotICAg
ICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnQzMiwgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVf
SU5UMzI+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJm51bWJlcl8pKSk7Ci0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDM0KSkgZ290byBwYXJzZV9uYW1lOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSA0OwotICAg
ICAgY2FzZSA0OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMzQpIHsKLSAgICAgICAgIHBhcnNlX25h
bWU6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5tdXRhYmxl
X25hbWUoKSkpOwotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgICAgICAgIHRoaXMtPm5hbWUo
KS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpQQVJTRSwKLSAgICAgICAgICAgICJn
b29nbGUucHJvdG9idWYuRmllbGQubmFtZSIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhw
ZWN0VGFnKDUwKSkgZ290byBwYXJzZV90eXBlX3VybDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0KLSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyB0eXBlX3VybCA9IDY7Ci0gICAgICBjYXNlIDY6
IHsKLSAgICAgICAgaWYgKHRhZyA9PSA1MCkgewotICAgICAgICAgcGFyc2VfdHlwZV91cmw6Ci0g
ICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5tdXRhYmxlX3R5cGVf
dXJsKCkpKTsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OlZlcmlmeVV0ZjhTdHJpbmcoCi0gICAgICAgICAgICB0aGlzLT50eXBlX3Vy
bCgpLmRhdGEoKSwgdGhpcy0+dHlwZV91cmwoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpQQVJTRSwKLSAgICAgICAg
ICAgICJnb29nbGUucHJvdG9idWYuRmllbGQudHlwZV91cmwiKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aW5wdXQtPkV4cGVjdFRhZyg1NikpIGdvdG8gcGFyc2Vfb25lb2ZfaW5kZXg7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCBpbnQzMiBvbmVvZl9pbmRleCA9IDc7
Ci0gICAgICBjYXNlIDc6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA1NikgewotICAgICAgICAgcGFy
c2Vfb25lb2ZfaW5kZXg6Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludDMyLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6VFlQRV9JTlQzMj4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmb25l
b2ZfaW5kZXhfKSkpOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVf
dW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZyg2NCkpIGdv
dG8gcGFyc2VfcGFja2VkOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0
aW9uYWwgYm9vbCBwYWNrZWQgPSA4OwotICAgICAgY2FzZSA4OiB7Ci0gICAgICAgIGlmICh0YWcg
PT0gNjQpIHsKLSAgICAgICAgIHBhcnNlX3BhY2tlZDoKLSAgICAgICAgICBET18oKDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPAotICAg
ICAgICAgICAgICAgICAgIGJvb2wsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpUWVBFX0JPT0w+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJnBhY2tlZF8p
KSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDc0KSkgZ290byBwYXJzZV9v
cHRpb25zOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gcmVwZWF0ZWQgLmdv
b2dsZS5wcm90b2J1Zi5PcHRpb24gb3B0aW9ucyA9IDk7Ci0gICAgICBjYXNlIDk6IHsKLSAgICAg
ICAgaWYgKHRhZyA9PSA3NCkgewotICAgICAgICAgcGFyc2Vfb3B0aW9uczoKLSAgICAgICAgICBE
T18oaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpOwotICAgICAgICAgcGFyc2VfbG9v
cF9vcHRpb25zOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2VOb1ZpcnR1YWxOb1JlY3Vyc2lvbkRlcHRoKAotICAg
ICAgICAgICAgICAgIGlucHV0LCBhZGRfb3B0aW9ucygpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5w
dXQtPkV4cGVjdFRhZyg3NCkpIGdvdG8gcGFyc2VfbG9vcF9vcHRpb25zOwotICAgICAgICBpbnB1
dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgICAgICAgaWYgKGlucHV0LT5F
eHBlY3RUYWcoODIpKSBnb3RvIHBhcnNlX2pzb25fbmFtZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIG9wdGlvbmFsIHN0cmluZyBqc29uX25hbWUgPSAxMDsKLSAgICAgIGNh
c2UgMTA6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA4MikgewotICAgICAgICAgcGFyc2VfanNvbl9u
YW1lOgotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6UmVhZFN0cmluZygKLSAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy0+bXV0YWJs
ZV9qc29uX25hbWUoKSkpOwotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgICAgICAgIHRoaXMt
Pmpzb25fbmFtZSgpLmRhdGEoKSwgdGhpcy0+anNvbl9uYW1lKCkubGVuZ3RoKCksCi0gICAgICAg
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UEFSU0Us
Ci0gICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkLmpzb25fbmFtZSIpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDkwKSkgZ290byBwYXJzZV9kZWZhdWx0X3ZhbHVl
OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIGRl
ZmF1bHRfdmFsdWUgPSAxMTsKLSAgICAgIGNhc2UgMTE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA5
MCkgewotICAgICAgICAgcGFyc2VfZGVmYXVsdF92YWx1ZToKLSAgICAgICAgICBET18oOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAg
ICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVfZGVmYXVsdF92YWx1ZSgpKSk7Ci0gICAg
ICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpW
ZXJpZnlVdGY4U3RyaW5nKAotICAgICAgICAgICAgdGhpcy0+ZGVmYXVsdF92YWx1ZSgpLmRhdGEo
KSwgdGhpcy0+ZGVmYXVsdF92YWx1ZSgpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlBBUlNFLAotICAgICAgICAgICAg
Imdvb2dsZS5wcm90b2J1Zi5GaWVsZC5kZWZhdWx0X3ZhbHVlIikpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAg
aWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9H
Uk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18o
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNraXBGaWVsZChp
bnB1dCwgdGFnKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotc3VjY2Vz
czoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnBy
b3RvYnVmLkZpZWxkKQotICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChwYXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5GaWVsZCkKLSAgcmV0
dXJuIGZhbHNlOwotI3VuZGVmIERPXwotfQotCi12b2lkIEZpZWxkOjpTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0q
IG91dHB1dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXpl
X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZCkKLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90
b2J1Zi5GaWVsZC5LaW5kIGtpbmQgPSAxOwotICBpZiAodGhpcy0+a2luZCgpICE9IDApIHsKLSAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVt
KAotICAgICAgMSwgdGhpcy0+a2luZCgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwg
Lmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5DYXJkaW5hbGl0eSBjYXJkaW5hbGl0eSA9IDI7Ci0gIGlm
ICh0aGlzLT5jYXJkaW5hbGl0eSgpICE9IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVtKAotICAgICAgMiwgdGhpcy0+Y2FyZGlu
YWxpdHkoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDM7
Ci0gIGlmICh0aGlzLT5udW1iZXIoKSAhPSAwKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzIoMywgdGhpcy0+bnVtYmVyKCksIG91
dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDQ7Ci0gIGlmICh0aGlz
LT5uYW1lKCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+bmFtZSgpLmRh
dGEoKSwgdGhpcy0+bmFtZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9i
dWYuRmllbGQubmFtZSIpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDQsIHRoaXMtPm5hbWUo
KSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIHN0cmluZyB0eXBlX3VybCA9IDY7Ci0g
IGlmICh0aGlzLT50eXBlX3VybCgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRo
aXMtPnR5cGVfdXJsKCkuZGF0YSgpLCB0aGlzLT50eXBlX3VybCgpLmxlbmd0aCgpLAotICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwK
LSAgICAgICJnb29nbGUucHJvdG9idWYuRmllbGQudHlwZV91cmwiKTsKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFz
ZWQoCi0gICAgICA2LCB0aGlzLT50eXBlX3VybCgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0
aW9uYWwgaW50MzIgb25lb2ZfaW5kZXggPSA3OwotICBpZiAodGhpcy0+b25lb2ZfaW5kZXgoKSAh
PSAwKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OldyaXRlSW50MzIoNywgdGhpcy0+b25lb2ZfaW5kZXgoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8v
IG9wdGlvbmFsIGJvb2wgcGFja2VkID0gODsKLSAgaWYgKHRoaXMtPnBhY2tlZCgpICE9IDApIHsK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVC
b29sKDgsIHRoaXMtPnBhY2tlZCgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdv
b2dsZS5wcm90b2J1Zi5PcHRpb24gb3B0aW9ucyA9IDk7Ci0gIGZvciAodW5zaWduZWQgaW50IGkg
PSAwLCBuID0gdGhpcy0+b3B0aW9uc19zaXplKCk7IGkgPCBuOyBpKyspIHsKLSAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5YmVU
b0FycmF5KAotICAgICAgOSwgdGhpcy0+b3B0aW9ucyhpKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8v
IG9wdGlvbmFsIHN0cmluZyBqc29uX25hbWUgPSAxMDsKLSAgaWYgKHRoaXMtPmpzb25fbmFtZSgp
LnNpemUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMtPmpzb25fbmFtZSgpLmRhdGEo
KSwgdGhpcy0+anNvbl9uYW1lKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90
b2J1Zi5GaWVsZC5qc29uX25hbWUiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAxMCwgdGhp
cy0+anNvbl9uYW1lKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBzdHJpbmcgZGVm
YXVsdF92YWx1ZSA9IDExOwotICBpZiAodGhpcy0+ZGVmYXVsdF92YWx1ZSgpLnNpemUoKSA+IDAp
IHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVy
aWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMtPmRlZmF1bHRfdmFsdWUoKS5kYXRhKCksIHRoaXMt
PmRlZmF1bHRfdmFsdWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVm
LkZpZWxkLmRlZmF1bHRfdmFsdWUiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0gICAgICAxMSwgdGhp
cy0+ZGVmYXVsdF92YWx1ZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkKQotfQotCi06Omdv
b2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBGaWVsZDo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9B
cnJheSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29n
bGUucHJvdG9idWYuRmllbGQpCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGQu
S2luZCBraW5kID0gMTsKLSAgaWYgKHRoaXMtPmtpbmQoKSAhPSAwKSB7Ci0gICAgdGFyZ2V0ID0g
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlRW51bVRv
QXJyYXkoCi0gICAgICAxLCB0aGlzLT5raW5kKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRp
b25hbCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxkLkNhcmRpbmFsaXR5IGNhcmRpbmFsaXR5ID0gMjsK
LSAgaWYgKHRoaXMtPmNhcmRpbmFsaXR5KCkgIT0gMCkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUVudW1Ub0FycmF5KAot
ICAgICAgMiwgdGhpcy0+Y2FyZGluYWxpdHkoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlv
bmFsIGludDMyIG51bWJlciA9IDM7Ci0gIGlmICh0aGlzLT5udW1iZXIoKSAhPSAwKSB7Ci0gICAg
dGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Oldy
aXRlSW50MzJUb0FycmF5KDMsIHRoaXMtPm51bWJlcigpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8g
b3B0aW9uYWwgc3RyaW5nIG5hbWUgPSA0OwotICBpZiAodGhpcy0+bmFtZSgpLnNpemUoKSA+IDAp
IHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVy
aWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5s
ZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkZpZWxkLm5hbWUiKTsKLSAg
ICB0YXJnZXQgPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OldyaXRlU3RyaW5nVG9BcnJheSgKLSAgICAgICAgNCwgdGhpcy0+bmFtZSgpLCB0YXJn
ZXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIHR5cGVfdXJsID0gNjsKLSAgaWYgKHRo
aXMtPnR5cGVfdXJsKCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+dHlw
ZV91cmwoKS5kYXRhKCksIHRoaXMtPnR5cGVfdXJsKCkubGVuZ3RoKCksCi0gICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U0VSSUFMSVpFLAotICAgICAg
Imdvb2dsZS5wcm90b2J1Zi5GaWVsZC50eXBlX3VybCIpOwotICAgIHRhcmdldCA9Ci0gICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdU
b0FycmF5KAotICAgICAgICA2LCB0aGlzLT50eXBlX3VybCgpLCB0YXJnZXQpOwotICB9Ci0KLSAg
Ly8gb3B0aW9uYWwgaW50MzIgb25lb2ZfaW5kZXggPSA3OwotICBpZiAodGhpcy0+b25lb2ZfaW5k
ZXgoKSAhPSAwKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzJUb0FycmF5KDcsIHRoaXMtPm9uZW9mX2luZGV4KCks
IHRhcmdldCk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCBib29sIHBhY2tlZCA9IDg7Ci0gIGlmICh0
aGlzLT5wYWNrZWQoKSAhPSAwKSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbFRvQXJyYXkoOCwgdGhpcy0+cGFja2Vk
KCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlv
biBvcHRpb25zID0gOTsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIG4gPSB0aGlzLT5vcHRp
b25zX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVh
bFRvQXJyYXkoCi0gICAgICAgIDksIHRoaXMtPm9wdGlvbnMoaSksIHRhcmdldCk7Ci0gIH0KLQot
ICAvLyBvcHRpb25hbCBzdHJpbmcganNvbl9uYW1lID0gMTA7Ci0gIGlmICh0aGlzLT5qc29uX25h
bWUoKS5zaXplKCkgPiAwKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OlZlcmlmeVV0ZjhTdHJpbmcoCi0gICAgICB0aGlzLT5qc29uX25hbWUoKS5k
YXRhKCksIHRoaXMtPmpzb25fbmFtZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJnb29nbGUu
cHJvdG9idWYuRmllbGQuanNvbl9uYW1lIik7Ci0gICAgdGFyZ2V0ID0KLSAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ1RvQXJyYXko
Ci0gICAgICAgIDEwLCB0aGlzLT5qc29uX25hbWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9w
dGlvbmFsIHN0cmluZyBkZWZhdWx0X3ZhbHVlID0gMTE7Ci0gIGlmICh0aGlzLT5kZWZhdWx0X3Zh
bHVlKCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgdGhpcy0+ZGVmYXVsdF92YWx1
ZSgpLmRhdGEoKSwgdGhpcy0+ZGVmYXVsdF92YWx1ZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAg
ICJnb29nbGUucHJvdG9idWYuRmllbGQuZGVmYXVsdF92YWx1ZSIpOwotICAgIHRhcmdldCA9Ci0g
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVT
dHJpbmdUb0FycmF5KAotICAgICAgICAxMSwgdGhpcy0+ZGVmYXVsdF92YWx1ZSgpLCB0YXJnZXQp
OwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJh
eV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkKQotICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQg
RmllbGQ6OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1l
c3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZCkKLSAgaW50IHRvdGFs
X3NpemUgPSAwOwotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuRmllbGQuS2luZCBr
aW5kID0gMTsKLSAgaWYgKHRoaXMtPmtpbmQoKSAhPSAwKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAx
ICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpF
bnVtU2l6ZSh0aGlzLT5raW5kKCkpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90
b2J1Zi5GaWVsZC5DYXJkaW5hbGl0eSBjYXJkaW5hbGl0eSA9IDI7Ci0gIGlmICh0aGlzLT5jYXJk
aW5hbGl0eSgpICE9IDApIHsKLSAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkVudW1TaXplKHRoaXMtPmNhcmRp
bmFsaXR5KCkpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgaW50MzIgbnVtYmVyID0gMzsKLSAgaWYg
KHRoaXMtPm51bWJlcigpICE9IDApIHsKLSAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkludDMyU2l6ZSgKLSAg
ICAgICAgdGhpcy0+bnVtYmVyKCkpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUg
PSA0OwotICBpZiAodGhpcy0+bmFtZSgpLnNpemUoKSA+IDApIHsKLSAgICB0b3RhbF9zaXplICs9
IDEgKwotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OlN0cmluZ1NpemUoCi0gICAgICAgIHRoaXMtPm5hbWUoKSk7Ci0gIH0KLQotICAvLyBvcHRpb25h
bCBzdHJpbmcgdHlwZV91cmwgPSA2OwotICBpZiAodGhpcy0+dHlwZV91cmwoKS5zaXplKCkgPiAw
KSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICB0aGlzLT50eXBlX3Vy
bCgpKTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGludDMyIG9uZW9mX2luZGV4ID0gNzsKLSAgaWYg
KHRoaXMtPm9uZW9mX2luZGV4KCkgIT0gMCkgewotICAgIHRvdGFsX3NpemUgKz0gMSArCi0gICAg
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6SW50MzJTaXpl
KAotICAgICAgICB0aGlzLT5vbmVvZl9pbmRleCgpKTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIGJv
b2wgcGFja2VkID0gODsKLSAgaWYgKHRoaXMtPnBhY2tlZCgpICE9IDApIHsKLSAgICB0b3RhbF9z
aXplICs9IDEgKyAxOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIGpzb25fbmFtZSA9IDEw
OwotICBpZiAodGhpcy0+anNvbl9uYW1lKCkuc2l6ZSgpID4gMCkgewotICAgIHRvdGFsX3NpemUg
Kz0gMSArCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6U3RyaW5nU2l6ZSgKLSAgICAgICAgdGhpcy0+anNvbl9uYW1lKCkpOwotICB9Ci0KLSAgLy8g
b3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfdmFsdWUgPSAxMTsKLSAgaWYgKHRoaXMtPmRlZmF1bHRf
dmFsdWUoKS5zaXplKCkgPiAwKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAg
ICAgICB0aGlzLT5kZWZhdWx0X3ZhbHVlKCkpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2ds
ZS5wcm90b2J1Zi5PcHRpb24gb3B0aW9ucyA9IDk7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMt
Pm9wdGlvbnNfc2l6ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPm9wdGlvbnNfc2l6
ZSgpOyBpKyspIHsKLSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAg
IHRoaXMtPm9wdGlvbnMoaSkpOwotICB9Ci0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklU
RVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZF
X0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9p
ZCBGaWVsZDo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJv
bSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21f
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0Uo
JmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25zdCBGaWVsZCog
c291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2Fz
dFRvR2VuZXJhdGVkPGNvbnN0IEZpZWxkPigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3Vy
Y2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRf
bWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLkZpZWxkKQotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25PcHM6Ok1lcmdlKGZyb20sIHRoaXMpOwot
ICB9IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVy
Z2VfZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkZpZWxkKQotICAgIE1lcmdlRnJv
bSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIEZpZWxkOjpNZXJnZUZyb20oY29uc3QgRmllbGQm
IGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19tZXJn
ZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZCkKLSAgaWYgKEdPT0dMRV9QUkVESUNU
X0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgb3B0aW9u
c18uTWVyZ2VGcm9tKGZyb20ub3B0aW9uc18pOwotICBpZiAoZnJvbS5raW5kKCkgIT0gMCkgewot
ICAgIHNldF9raW5kKGZyb20ua2luZCgpKTsKLSAgfQotICBpZiAoZnJvbS5jYXJkaW5hbGl0eSgp
ICE9IDApIHsKLSAgICBzZXRfY2FyZGluYWxpdHkoZnJvbS5jYXJkaW5hbGl0eSgpKTsKLSAgfQot
ICBpZiAoZnJvbS5udW1iZXIoKSAhPSAwKSB7Ci0gICAgc2V0X251bWJlcihmcm9tLm51bWJlcigp
KTsKLSAgfQotICBpZiAoZnJvbS5uYW1lKCkuc2l6ZSgpID4gMCkgewotCi0gICAgbmFtZV8uQXNz
aWduV2l0aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLCBmcm9tLm5hbWVfKTsKLSAgfQotICBpZiAoZnJvbS50eXBlX3Vy
bCgpLnNpemUoKSA+IDApIHsKLQotICAgIHR5cGVfdXJsXy5Bc3NpZ25XaXRoRGVmYXVsdCgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCks
IGZyb20udHlwZV91cmxfKTsKLSAgfQotICBpZiAoZnJvbS5vbmVvZl9pbmRleCgpICE9IDApIHsK
LSAgICBzZXRfb25lb2ZfaW5kZXgoZnJvbS5vbmVvZl9pbmRleCgpKTsKLSAgfQotICBpZiAoZnJv
bS5wYWNrZWQoKSAhPSAwKSB7Ci0gICAgc2V0X3BhY2tlZChmcm9tLnBhY2tlZCgpKTsKLSAgfQot
ICBpZiAoZnJvbS5qc29uX25hbWUoKS5zaXplKCkgPiAwKSB7Ci0KLSAgICBqc29uX25hbWVfLkFz
c2lnbldpdGhEZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSwgZnJvbS5qc29uX25hbWVfKTsKLSAgfQotICBpZiAoZnJvbS5k
ZWZhdWx0X3ZhbHVlKCkuc2l6ZSgpID4gMCkgewotCi0gICAgZGVmYXVsdF92YWx1ZV8uQXNzaWdu
V2l0aERlZmF1bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLCBmcm9tLmRlZmF1bHRfdmFsdWVfKTsKLSAgfQotfQotCi12b2lkIEZp
ZWxkOjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsK
LS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6
Z29vZ2xlLnByb3RvYnVmLkZpZWxkKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBD
bGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLXZvaWQgRmllbGQ6OkNvcHlGcm9tKGNv
bnN0IEZpZWxkJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3Bl
Y2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZCkKLSAgaWYgKCZmcm9t
ID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi1i
b29sIEZpZWxkOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEZpZWxkOjpTd2FwKEZpZWxkKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykg
cmV0dXJuOwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQotdm9pZCBGaWVsZDo6SW50ZXJuYWxT
d2FwKEZpZWxkKiBvdGhlcikgewotICBzdGQ6OnN3YXAoa2luZF8sIG90aGVyLT5raW5kXyk7Ci0g
IHN0ZDo6c3dhcChjYXJkaW5hbGl0eV8sIG90aGVyLT5jYXJkaW5hbGl0eV8pOwotICBzdGQ6OnN3
YXAobnVtYmVyXywgb3RoZXItPm51bWJlcl8pOwotICBuYW1lXy5Td2FwKCZvdGhlci0+bmFtZV8p
OwotICB0eXBlX3VybF8uU3dhcCgmb3RoZXItPnR5cGVfdXJsXyk7Ci0gIHN0ZDo6c3dhcChvbmVv
Zl9pbmRleF8sIG90aGVyLT5vbmVvZl9pbmRleF8pOwotICBzdGQ6OnN3YXAocGFja2VkXywgb3Ro
ZXItPnBhY2tlZF8pOwotICBvcHRpb25zXy5VbnNhZmVBcmVuYVN3YXAoJm90aGVyLT5vcHRpb25z
Xyk7Ci0gIGpzb25fbmFtZV8uU3dhcCgmb3RoZXItPmpzb25fbmFtZV8pOwotICBkZWZhdWx0X3Zh
bHVlXy5Td2FwKCZvdGhlci0+ZGVmYXVsdF92YWx1ZV8pOwotICBfaW50ZXJuYWxfbWV0YWRhdGFf
LlN3YXAoJm90aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9jYWNoZWRf
c2l6ZV8sIG90aGVyLT5fY2FjaGVkX3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXRhZGF0YSBGaWVsZDo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRl
c2NyaXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIG1ldGFkYXRh
OwotICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gRmllbGRfZGVzY3JpcHRvcl87Ci0gIG1ldGFkYXRh
LnJlZmxlY3Rpb24gPSBGaWVsZF9yZWZsZWN0aW9uXzsKLSAgcmV0dXJuIG1ldGFkYXRhOwotfQot
Ci0jaWYgUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0vLyBGaWVsZAotCi0vLyBvcHRp
b25hbCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxkLktpbmQga2luZCA9IDE7Ci12b2lkIEZpZWxkOjpj
bGVhcl9raW5kKCkgewotICBraW5kXyA9IDA7Ci19Ci0gOjpnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZF9LaW5kIEZpZWxkOjpraW5kKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZC5raW5kKQotICByZXR1cm4gc3RhdGlj
X2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZCA+KGtpbmRfKTsKLX0KLSB2b2lk
IEZpZWxkOjpzZXRfa2luZCg6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmQgdmFsdWUpIHsK
LSAgCi0gIGtpbmRfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLmtpbmQpCi19Ci0KLS8vIG9wdGlvbmFsIC5nb29n
bGUucHJvdG9idWYuRmllbGQuQ2FyZGluYWxpdHkgY2FyZGluYWxpdHkgPSAyOwotdm9pZCBGaWVs
ZDo6Y2xlYXJfY2FyZGluYWxpdHkoKSB7Ci0gIGNhcmRpbmFsaXR5XyA9IDA7Ci19Ci0gOjpnb29n
bGU6OnByb3RvYnVmOjpGaWVsZF9DYXJkaW5hbGl0eSBGaWVsZDo6Y2FyZGluYWxpdHkoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLkZpZWxkLmNhcmRpbmFsaXR5KQotICByZXR1cm4gc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6RmllbGRfQ2FyZGluYWxpdHkgPihjYXJkaW5hbGl0eV8pOwotfQotIHZvaWQgRmll
bGQ6OnNldF9jYXJkaW5hbGl0eSg6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0NhcmRpbmFsaXR5
IHZhbHVlKSB7Ci0gIAotICBjYXJkaW5hbGl0eV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGQuY2FyZGluYWxpdHkp
Ci19Ci0KLS8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDM7Ci12b2lkIEZpZWxkOjpjbGVhcl9u
dW1iZXIoKSB7Ci0gIG51bWJlcl8gPSAwOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIg
RmllbGQ6Om51bWJlcigpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZp
ZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGQubnVtYmVyKQotICByZXR1cm4gbnVtYmVyXzsK
LX0KLSB2b2lkIEZpZWxkOjpzZXRfbnVtYmVyKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFs
dWUpIHsKLSAgCi0gIG51bWJlcl8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGQubnVtYmVyKQotfQotCi0vLyBvcHRp
b25hbCBzdHJpbmcgbmFtZSA9IDQ7Ci12b2lkIEZpZWxkOjpjbGVhcl9uYW1lKCkgewotICBuYW1l
Xy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgRmll
bGQ6Om5hbWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9n
ZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLm5hbWUpCi0gIHJldHVybiBuYW1lXy5HZXROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci19Ci0gdm9pZCBGaWVsZDo6c2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFs
dWUpIHsKLSAgCi0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLm5hbWUpCi19
Ci0gdm9pZCBGaWVsZDo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgCi0gIG5hbWVf
LlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5n
QWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRmllbGQubmFtZSkK
LX0KLSB2b2lkIEZpZWxkOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUp
IHsKLSAgCi0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5u
YW1lKQotfQotIDo6c3RkOjpzdHJpbmcqIEZpZWxkOjptdXRhYmxlX25hbWUoKSB7Ci0gIAotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYu
RmllbGQubmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpz
dGQ6OnN0cmluZyogRmllbGQ6OnJlbGVhc2VfbmFtZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLm5hbWUpCi0gIAot
ICByZXR1cm4gbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpZWxkOjpzZXRf
YWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxM
KSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAgbmFtZV8uU2V0QWxsb2NhdGVkTm9B
cmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCksIG5hbWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmllbGQubmFtZSkKLX0KLQotLy8gb3B0aW9uYWwg
c3RyaW5nIHR5cGVfdXJsID0gNjsKLXZvaWQgRmllbGQ6OmNsZWFyX3R5cGVfdXJsKCkgewotICB0
eXBlX3VybF8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIGNvbnN0IDo6c3RkOjpzdHJp
bmcmIEZpZWxkOjp0eXBlX3VybCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGQudHlwZV91cmwpCi0gIHJldHVybiB0
eXBlX3VybF8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgRmllbGQ6OnNldF90eXBlX3VybChj
b25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAKLSAgdHlwZV91cmxfLlNldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29v
Z2xlLnByb3RvYnVmLkZpZWxkLnR5cGVfdXJsKQotfQotIHZvaWQgRmllbGQ6OnNldF90eXBlX3Vy
bChjb25zdCBjaGFyKiB2YWx1ZSkgewotICAKLSAgdHlwZV91cmxfLlNldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCA6
OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRmllbGQudHlwZV91cmwpCi19Ci0gdm9pZCBGaWVs
ZDo6c2V0X3R5cGVfdXJsKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAg
dHlwZV91cmxfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZC50eXBlX3Vy
bCkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWVsZDo6bXV0YWJsZV90eXBlX3VybCgpIHsKLSAgCi0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1
Zi5GaWVsZC50eXBlX3VybCkKLSAgcmV0dXJuIHR5cGVfdXJsXy5NdXRhYmxlTm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotfQotIDo6c3RkOjpzdHJpbmcqIEZpZWxkOjpyZWxlYXNlX3R5cGVfdXJsKCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRmll
bGQudHlwZV91cmwpCi0gIAotICByZXR1cm4gdHlwZV91cmxfLlJlbGVhc2VOb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci0gdm9pZCBGaWVsZDo6c2V0X2FsbG9jYXRlZF90eXBlX3VybCg6OnN0ZDo6c3RyaW5nKiB0
eXBlX3VybCkgewotICBpZiAodHlwZV91cmwgIT0gTlVMTCkgewotICAgIAotICB9IGVsc2Ugewot
ICAgIAotICB9Ci0gIHR5cGVfdXJsXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdHlwZV91cmwp
OwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29n
bGUucHJvdG9idWYuRmllbGQudHlwZV91cmwpCi19Ci0KLS8vIG9wdGlvbmFsIGludDMyIG9uZW9m
X2luZGV4ID0gNzsKLXZvaWQgRmllbGQ6OmNsZWFyX29uZW9mX2luZGV4KCkgewotICBvbmVvZl9p
bmRleF8gPSAwOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgRmllbGQ6Om9uZW9mX2lu
ZGV4KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5GaWVsZC5vbmVvZl9pbmRleCkKLSAgcmV0dXJuIG9uZW9mX2luZGV4XzsK
LX0KLSB2b2lkIEZpZWxkOjpzZXRfb25lb2ZfaW5kZXgoOjpnb29nbGU6OnByb3RvYnVmOjppbnQz
MiB2YWx1ZSkgewotICAKLSAgb25lb2ZfaW5kZXhfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLm9uZW9mX2luZGV4
KQotfQotCi0vLyBvcHRpb25hbCBib29sIHBhY2tlZCA9IDg7Ci12b2lkIEZpZWxkOjpjbGVhcl9w
YWNrZWQoKSB7Ci0gIHBhY2tlZF8gPSBmYWxzZTsKLX0KLSBib29sIEZpZWxkOjpwYWNrZWQoKSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnBy
b3RvYnVmLkZpZWxkLnBhY2tlZCkKLSAgcmV0dXJuIHBhY2tlZF87Ci19Ci0gdm9pZCBGaWVsZDo6
c2V0X3BhY2tlZChib29sIHZhbHVlKSB7Ci0gIAotICBwYWNrZWRfID0gdmFsdWU7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLnBh
Y2tlZCkKLX0KLQotLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5PcHRpb24gb3B0aW9ucyA9
IDk7Ci1pbnQgRmllbGQ6Om9wdGlvbnNfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG9wdGlvbnNf
LnNpemUoKTsKLX0KLXZvaWQgRmllbGQ6OmNsZWFyX29wdGlvbnMoKSB7Ci0gIG9wdGlvbnNfLkNs
ZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiYgRmllbGQ6Om9wdGlv
bnMoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXy5H
ZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24qIEZpZWxkOjptdXRhYmxl
X29wdGlvbnMoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5vcHRpb25zKQotICByZXR1cm4gb3B0aW9u
c18uTXV0YWJsZShpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiogRmllbGQ6
OmFkZF9vcHRpb25zKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRk
Omdvb2dsZS5wcm90b2J1Zi5GaWVsZC5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc18uQWRkKCk7
Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6T3B0aW9uID4qCi1GaWVsZDo6bXV0YWJsZV9vcHRpb25zKCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWVs
ZC5vcHRpb25zKQotICByZXR1cm4gJm9wdGlvbnNfOwotfQotY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiA+JgotRmll
bGQ6Om9wdGlvbnMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZC5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc187
Ci19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBqc29uX25hbWUgPSAxMDsKLXZvaWQgRmllbGQ6OmNs
ZWFyX2pzb25fbmFtZSgpIHsKLSAganNvbl9uYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgRmllbGQ6Ompzb25fbmFtZSgpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmll
bGQuanNvbl9uYW1lKQotICByZXR1cm4ganNvbl9uYW1lXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0g
dm9pZCBGaWVsZDo6c2V0X2pzb25fbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewot
ICAKLSAganNvbl9uYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZC5qc29uX25hbWUp
Ci19Ci0gdm9pZCBGaWVsZDo6c2V0X2pzb25fbmFtZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICAK
LSAganNvbl9uYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVm
LkZpZWxkLmpzb25fbmFtZSkKLX0KLSB2b2lkIEZpZWxkOjpzZXRfanNvbl9uYW1lKGNvbnN0IGNo
YXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAganNvbl9uYW1lXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFs
dWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9p
bnRlcjpnb29nbGUucHJvdG9idWYuRmllbGQuanNvbl9uYW1lKQotfQotIDo6c3RkOjpzdHJpbmcq
IEZpZWxkOjptdXRhYmxlX2pzb25fbmFtZSgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5qc29uX25hbWUpCi0g
IHJldHVybiBqc29uX25hbWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmlu
ZyogRmllbGQ6OnJlbGVhc2VfanNvbl9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuRmllbGQuanNvbl9uYW1lKQotICAK
LSAgcmV0dXJuIGpzb25fbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpZWxk
OjpzZXRfYWxsb2NhdGVkX2pzb25fbmFtZSg6OnN0ZDo6c3RyaW5nKiBqc29uX25hbWUpIHsKLSAg
aWYgKGpzb25fbmFtZSAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAg
anNvbl9uYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwganNvbl9uYW1lKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVm
LkZpZWxkLmpzb25fbmFtZSkKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfdmFsdWUg
PSAxMTsKLXZvaWQgRmllbGQ6OmNsZWFyX2RlZmF1bHRfdmFsdWUoKSB7Ci0gIGRlZmF1bHRfdmFs
dWVfLkNsZWFyVG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBG
aWVsZDo6ZGVmYXVsdF92YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGQuZGVmYXVsdF92YWx1ZSkKLSAgcmV0
dXJuIGRlZmF1bHRfdmFsdWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEZpZWxkOjpzZXRf
ZGVmYXVsdF92YWx1ZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAKLSAgZGVmYXVs
dF92YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGQuZGVmYXVsdF92YWx1ZSkKLX0K
LSB2b2lkIEZpZWxkOjpzZXRfZGVmYXVsdF92YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICAK
LSAgZGVmYXVsdF92YWx1ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90
b2J1Zi5GaWVsZC5kZWZhdWx0X3ZhbHVlKQotfQotIHZvaWQgRmllbGQ6OnNldF9kZWZhdWx0X3Zh
bHVlKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAgZGVmYXVsdF92YWx1
ZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLmRlZmF1bHRfdmFsdWUp
Ci19Ci0gOjpzdGQ6OnN0cmluZyogRmllbGQ6Om11dGFibGVfZGVmYXVsdF92YWx1ZSgpIHsKLSAg
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90
b2J1Zi5GaWVsZC5kZWZhdWx0X3ZhbHVlKQotICByZXR1cm4gZGVmYXVsdF92YWx1ZV8uTXV0YWJs
ZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBGaWVsZDo6cmVsZWFzZV9kZWZhdWx0
X3ZhbHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpn
b29nbGUucHJvdG9idWYuRmllbGQuZGVmYXVsdF92YWx1ZSkKLSAgCi0gIHJldHVybiBkZWZhdWx0
X3ZhbHVlXy5SZWxlYXNlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIHZvaWQgRmllbGQ6OnNldF9hbGxvY2F0
ZWRfZGVmYXVsdF92YWx1ZSg6OnN0ZDo6c3RyaW5nKiBkZWZhdWx0X3ZhbHVlKSB7Ci0gIGlmIChk
ZWZhdWx0X3ZhbHVlICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAKLSAgfQotICBk
ZWZhdWx0X3ZhbHVlXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgZGVmYXVsdF92YWx1ZSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5w
cm90b2J1Zi5GaWVsZC5kZWZhdWx0X3ZhbHVlKQotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lO
TElORV9OT1RfSU5fSEVBREVSUwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVND
X1ZFUikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgaW50IEVudW06OmtOYW1lRmllbGROdW1i
ZXI7Ci1jb25zdCBpbnQgRW51bTo6a0VudW12YWx1ZUZpZWxkTnVtYmVyOwotY29uc3QgaW50IEVu
dW06OmtPcHRpb25zRmllbGROdW1iZXI7Ci1jb25zdCBpbnQgRW51bTo6a1NvdXJjZUNvbnRleHRG
aWVsZE51bWJlcjsKLWNvbnN0IGludCBFbnVtOjprU3ludGF4RmllbGROdW1iZXI7Ci0jZW5kaWYg
IC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUVudW06OkVudW0o
KQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFf
KE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Y29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkVudW0pCi19Ci0KLXZvaWQgRW51bTo6SW5pdEFz
RGVmYXVsdEluc3RhbmNlKCkgewotICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSB0cnVlOwotICBz
b3VyY2VfY29udGV4dF8gPSBjb25zdF9jYXN0PCA6Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNv
bnRleHQqPigmOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0OjpkZWZhdWx0X2luc3Rh
bmNlKCkpOwotfQotCi1FbnVtOjpFbnVtKGNvbnN0IEVudW0mIGZyb20pCi0gIDogOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0g
IFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoY29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRW51bSkKLX0KLQotdm9p
ZCBFbnVtOjpTaGFyZWRDdG9yKCkgewotICAgIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IGZhbHNl
OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZygpOwotICBf
Y2FjaGVkX3NpemVfID0gMDsKLSAgbmFtZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBzb3Vy
Y2VfY29udGV4dF8gPSBOVUxMOwotICBzeW50YXhfID0gMDsKLX0KLQotRW51bTo6fkVudW0oKSB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1
Zi5FbnVtKQotICBTaGFyZWREdG9yKCk7Ci19Ci0KLXZvaWQgRW51bTo6U2hhcmVkRHRvcigpIHsK
LSAgbmFtZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
dEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0
YW5jZV8pIHsKLSAgICBkZWxldGUgc291cmNlX2NvbnRleHRfOwotICB9Ci19Ci0KLXZvaWQgRW51
bTo6U2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3QgewotICBHT09HTEVfU0FGRV9DT05DVVJS
RU5UX1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gc2l6ZTsKLSAgR09PR0xFX1NB
RkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OkRlc2NyaXB0b3IqIEVudW06OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2Ny
aXB0b3JzT25jZSgpOwotICByZXR1cm4gRW51bV9kZXNjcmlwdG9yXzsKLX0KLQotY29uc3QgRW51
bSYgRW51bTo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09
IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8o
KTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRW51bSogRW51bTo6ZGVmYXVs
dF9pbnN0YW5jZV8gPSBOVUxMOwotCi1FbnVtKiBFbnVtOjpOZXcoOjpnb29nbGU6OnByb3RvYnVm
OjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgRW51bSogbiA9IG5ldyBFbnVtOwotICBpZiAoYXJl
bmEgIT0gTlVMTCkgewotICAgIGFyZW5hLT5Pd24obik7Ci0gIH0KLSAgcmV0dXJuIG47Ci19Ci0K
LXZvaWQgRW51bTo6Q2xlYXIoKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2Fn
ZV9jbGVhcl9zdGFydDpnb29nbGUucHJvdG9idWYuRW51bSkKLSAgbmFtZV8uQ2xlYXJUb0VtcHR5
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBOVUxMICYmIHNvdXJj
ZV9jb250ZXh0XyAhPSBOVUxMKSBkZWxldGUgc291cmNlX2NvbnRleHRfOwotICBzb3VyY2VfY29u
dGV4dF8gPSBOVUxMOwotICBzeW50YXhfID0gMDsKLSAgZW51bXZhbHVlXy5DbGVhcigpOwotICBv
cHRpb25zXy5DbGVhcigpOwotfQotCi1ib29sIEVudW06Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0
cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1
dCkgewotI2RlZmluZSBET18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVY
UFJFU1NJT04pKSBnb3RvIGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFn
OwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLkVudW0pCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3Rv
YnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAg
ICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7
Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5h
bWUgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTApIHsKLSAgICAg
ICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJl
YWRTdHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVfbmFtZSgpKSk7
Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwg
dGhpcy0+bmFtZSgpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90
b2J1Zi5FbnVtLm5hbWUiKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5k
bGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdFRhZygxOCkp
IGdvdG8gcGFyc2VfZW51bXZhbHVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAg
Ly8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUgZW51bXZhbHVlID0gMjsKLSAg
ICAgIGNhc2UgMjogewotICAgICAgICBpZiAodGFnID09IDE4KSB7Ci0gICAgICAgICBwYXJzZV9l
bnVtdmFsdWU6Ci0gICAgICAgICAgRE9fKGlucHV0LT5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aCgp
KTsKLSAgICAgICAgIHBhcnNlX2xvb3BfZW51bXZhbHVlOgotICAgICAgICAgIERPXyg6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2VOb1ZpcnR1
YWxOb1JlY3Vyc2lvbkRlcHRoKAotICAgICAgICAgICAgICAgIGlucHV0LCBhZGRfZW51bXZhbHVl
KCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDE4KSkgZ290byBwYXJzZV9s
b29wX2VudW12YWx1ZTsKLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMjYpKSBnb3RvIHBh
cnNlX2xvb3Bfb3B0aW9uczsKLSAgICAgICAgaW5wdXQtPlVuc2FmZURlY3JlbWVudFJlY3Vyc2lv
bkRlcHRoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyByZXBlYXRlZCAu
Z29vZ2xlLnByb3RvYnVmLk9wdGlvbiBvcHRpb25zID0gMzsKLSAgICAgIGNhc2UgMzogewotICAg
ICAgICBpZiAodGFnID09IDI2KSB7Ci0gICAgICAgICAgRE9fKGlucHV0LT5JbmNyZW1lbnRSZWN1
cnNpb25EZXB0aCgpKTsKLSAgICAgICAgIHBhcnNlX2xvb3Bfb3B0aW9uczoKLSAgICAgICAgICBE
T18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRNZXNz
YWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0aCgKLSAgICAgICAgICAgICAgICBpbnB1dCwgYWRk
X29wdGlvbnMoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3Vu
dXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMjYpKSBnb3Rv
IHBhcnNlX2xvb3Bfb3B0aW9uczsKLSAgICAgICAgaW5wdXQtPlVuc2FmZURlY3JlbWVudFJlY3Vy
c2lvbkRlcHRoKCk7Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDM0KSkgZ290byBwYXJz
ZV9zb3VyY2VfY29udGV4dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9w
dGlvbmFsIC5nb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dCBzb3VyY2VfY29udGV4dCA9IDQ7
Ci0gICAgICBjYXNlIDQ6IHsKLSAgICAgICAgaWYgKHRhZyA9PSAzNCkgewotICAgICAgICAgcGFy
c2Vfc291cmNlX2NvbnRleHQ6Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbCgKLSAgICAgICAgICAg
ICAgIGlucHV0LCBtdXRhYmxlX3NvdXJjZV9jb250ZXh0KCkpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChp
bnB1dC0+RXhwZWN0VGFnKDQwKSkgZ290byBwYXJzZV9zeW50YXg7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgfQotCi0gICAgICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlN5bnRheCBzeW50
YXggPSA1OwotICAgICAgY2FzZSA1OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gNDApIHsKLSAgICAg
ICAgIHBhcnNlX3N5bnRheDoKLSAgICAgICAgICBpbnQgdmFsdWU7Ci0gICAgICAgICAgRE9fKCg6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2
ZTwKLSAgICAgICAgICAgICAgICAgICBpbnQsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpUWVBFX0VOVU0+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJnZh
bHVlKSkpOwotICAgICAgICAgIHNldF9zeW50YXgoc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6U3ludGF4ID4odmFsdWUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3Rv
IGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0QXRF
bmQoKSkgZ290byBzdWNjZXNzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVm
YXVsdDogewotICAgICAgaGFuZGxlX3VudXN1YWw6Ci0gICAgICAgIGlmICh0YWcgPT0gMCB8fAot
ICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9FTkRfR1JPVVApIHsKLSAgICAgICAg
ICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTa2lwRmllbGQoaW5wdXQsIHRhZykpOwotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5FbnVtKQotICBy
ZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJz
ZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5FbnVtKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYg
RE9fCi19Ci0KLXZvaWQgRW51bTo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9i
dWYuRW51bSkKLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBpZiAodGhpcy0+bmFt
ZSgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCks
IHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLkVu
dW0ubmFtZSIpOwotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDEsIHRoaXMtPm5hbWUoKSwgb3V0
cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlIGVu
dW12YWx1ZSA9IDI7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+ZW51bXZh
bHVlX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VNYXliZVRvQXJyYXkoCi0gICAgICAyLCB0
aGlzLT5lbnVtdmFsdWUoaSksIG91dHB1dCk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xl
LnByb3RvYnVmLk9wdGlvbiBvcHRpb25zID0gMzsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAs
IG4gPSB0aGlzLT5vcHRpb25zX3NpemUoKTsgaSA8IG47IGkrKykgewotICAgIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VNYXliZVRvQXJy
YXkoCi0gICAgICAzLCB0aGlzLT5vcHRpb25zKGkpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0
aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0IHNvdXJjZV9jb250ZXh0ID0gNDsK
LSAgaWYgKHRoaXMtPmhhc19zb3VyY2VfY29udGV4dCgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgK
LSAgICAgIDQsICp0aGlzLT5zb3VyY2VfY29udGV4dF8sIG91dHB1dCk7Ci0gIH0KLQotICAvLyBv
cHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlN5bnRheCBzeW50YXggPSA1OwotICBpZiAodGhpcy0+
c3ludGF4KCkgIT0gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXcml0ZUVudW0oCi0gICAgICA1LCB0aGlzLT5zeW50YXgoKSwgb3V0cHV0KTsK
LSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfZW5kOmdvb2ds
ZS5wcm90b2J1Zi5FbnVtKQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBFbnVtOjpT
ZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
dWludDgqIHRhcmdldCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2Vy
aWFsaXplX3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtKQotICAvLyBvcHRpb25h
bCBzdHJpbmcgbmFtZSA9IDE7Ci0gIGlmICh0aGlzLT5uYW1lKCkuc2l6ZSgpID4gMCkgewotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpWZXJpZnlVdGY4
U3RyaW5nKAotICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhpcy0+bmFtZSgpLmxlbmd0aCgp
LAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNF
UklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuRW51bS5uYW1lIik7Ci0gICAgdGFyZ2V0
ID0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpX
cml0ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDEsIHRoaXMtPm5hbWUoKSwgdGFyZ2V0KTsKLSAg
fQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlIGVudW12YWx1ZSA9
IDI7Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+ZW51bXZhbHVlX3NpemUo
KTsgaSA8IG47IGkrKykgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXko
Ci0gICAgICAgIDIsIHRoaXMtPmVudW12YWx1ZShpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIHJl
cGVhdGVkIC5nb29nbGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSAzOwotICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMCwgbiA9IHRoaXMtPm9wdGlvbnNfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0g
ICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OgotICAgICAgV3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgMywgdGhpcy0+
b3B0aW9ucyhpKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9i
dWYuU291cmNlQ29udGV4dCBzb3VyY2VfY29udGV4dCA9IDQ7Ci0gIGlmICh0aGlzLT5oYXNfc291
cmNlX2NvbnRleHQoKSkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjoKLSAgICAgIFdyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXko
Ci0gICAgICAgIDQsICp0aGlzLT5zb3VyY2VfY29udGV4dF8sIHRhcmdldCk7Ci0gIH0KLQotICAv
LyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlN5bnRheCBzeW50YXggPSA1OwotICBpZiAodGhp
cy0+c3ludGF4KCkgIT0gMCkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUVudW1Ub0FycmF5KAotICAgICAgNSwgdGhpcy0+
c3ludGF4KCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
c2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuRW51bSkKLSAgcmV0dXJuIHRh
cmdldDsKLX0KLQotaW50IEVudW06OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVt
KQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAx
OwotICBpZiAodGhpcy0+bmFtZSgpLnNpemUoKSA+IDApIHsKLSAgICB0b3RhbF9zaXplICs9IDEg
KwotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlN0
cmluZ1NpemUoCi0gICAgICAgIHRoaXMtPm5hbWUoKSk7Ci0gIH0KLQotICAvLyBvcHRpb25hbCAu
Z29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQgc291cmNlX2NvbnRleHQgPSA0OwotICBpZiAo
dGhpcy0+aGFzX3NvdXJjZV9jb250ZXh0KCkpIHsKLSAgICB0b3RhbF9zaXplICs9IDEgKwotICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Ok1lc3NhZ2VT
aXplTm9WaXJ0dWFsKAotICAgICAgICAqdGhpcy0+c291cmNlX2NvbnRleHRfKTsKLSAgfQotCi0g
IC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU3ludGF4IHN5bnRheCA9IDU7Ci0gIGlmICh0
aGlzLT5zeW50YXgoKSAhPSAwKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpFbnVtU2l6ZSh0aGlzLT5z
eW50YXgoKSk7Ci0gIH0KLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1
ZSBlbnVtdmFsdWUgPSAyOwotICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5lbnVtdmFsdWVfc2l6
ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPmVudW12YWx1ZV9zaXplKCk7IGkrKykg
ewotICAgIHRvdGFsX3NpemUgKz0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgdGhpcy0+ZW51
bXZhbHVlKGkpKTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuT3B0aW9u
IG9wdGlvbnMgPSAzOwotICB0b3RhbF9zaXplICs9IDEgKiB0aGlzLT5vcHRpb25zX3NpemUoKTsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLT5vcHRpb25zX3NpemUoKTsgaSsrKSB7Ci0gICAg
dG90YWxfc2l6ZSArPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZv
cm1hdExpdGU6Ok1lc3NhZ2VTaXplTm9WaXJ0dWFsKAotICAgICAgICB0aGlzLT5vcHRpb25zKGkp
KTsKLSAgfQotCi0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9j
YWNoZWRfc2l6ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRF
U19FTkQoKTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgRW51bTo6TWVyZ2VGcm9t
KGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLkVudW0pCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVy
Z2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGNvbnN0IEVudW0qIHNvdXJjZSA9IAotICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25zdCBF
bnVtPigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6
Z29vZ2xlLnByb3RvYnVmLkVudW0pCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
UmVmbGVjdGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpn
b29nbGUucHJvdG9idWYuRW51bSkKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQot
dm9pZCBFbnVtOjpNZXJnZUZyb20oY29uc3QgRW51bSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLkVudW0pCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVy
Z2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGVudW12YWx1ZV8uTWVyZ2VGcm9tKGZyb20uZW51bXZh
bHVlXyk7Ci0gIG9wdGlvbnNfLk1lcmdlRnJvbShmcm9tLm9wdGlvbnNfKTsKLSAgaWYgKGZyb20u
bmFtZSgpLnNpemUoKSA+IDApIHsKLQotICAgIG5hbWVfLkFzc2lnbldpdGhEZWZhdWx0KCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwg
ZnJvbS5uYW1lXyk7Ci0gIH0KLSAgaWYgKGZyb20uaGFzX3NvdXJjZV9jb250ZXh0KCkpIHsKLSAg
ICBtdXRhYmxlX3NvdXJjZV9jb250ZXh0KCktPjo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29u
dGV4dDo6TWVyZ2VGcm9tKGZyb20uc291cmNlX2NvbnRleHQoKSk7Ci0gIH0KLSAgaWYgKGZyb20u
c3ludGF4KCkgIT0gMCkgewotICAgIHNldF9zeW50YXgoZnJvbS5zeW50YXgoKSk7Ci0gIH0KLX0K
LQotdm9pZCBFbnVtOjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2Um
IGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zy
b21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVudW0pCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1
cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBFbnVtOjpDb3B5
RnJvbShjb25zdCBFbnVtJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xh
c3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5FbnVtKQotICBpZiAo
JmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19
Ci0KLWJvb2wgRW51bTo6SXNJbml0aWFsaXplZCgpIGNvbnN0IHsKLQotICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBFbnVtOjpTd2FwKEVudW0qIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlz
KSByZXR1cm47Ci0gIEludGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lkIEVudW06OkludGVybmFs
U3dhcChFbnVtKiBvdGhlcikgewotICBuYW1lXy5Td2FwKCZvdGhlci0+bmFtZV8pOwotICBlbnVt
dmFsdWVfLlVuc2FmZUFyZW5hU3dhcCgmb3RoZXItPmVudW12YWx1ZV8pOwotICBvcHRpb25zXy5V
bnNhZmVBcmVuYVN3YXAoJm90aGVyLT5vcHRpb25zXyk7Ci0gIHN0ZDo6c3dhcChzb3VyY2VfY29u
dGV4dF8sIG90aGVyLT5zb3VyY2VfY29udGV4dF8pOwotICBzdGQ6OnN3YXAoc3ludGF4Xywgb3Ro
ZXItPnN5bnRheF8pOwotICBfaW50ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90aGVyLT5faW50ZXJu
YWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90aGVyLT5fY2FjaGVk
X3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBFbnVtOjpHZXRNZXRh
ZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0
b3IgPSBFbnVtX2Rlc2NyaXB0b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gRW51bV9yZWZs
ZWN0aW9uXzsKLSAgcmV0dXJuIG1ldGFkYXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5MSU5FX05P
VF9JTl9IRUFERVJTCi0vLyBFbnVtCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLXZv
aWQgRW51bTo6Y2xlYXJfbmFtZSgpIHsKLSAgbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkp
OwotfQotIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEVudW06Om5hbWUoKSBjb25zdCB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW0ubmFt
ZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIEVudW06OnNldF9u
YW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAotICBuYW1lXy5TZXROb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdv
b2dsZS5wcm90b2J1Zi5FbnVtLm5hbWUpCi19Ci0gdm9pZCBFbnVtOjpzZXRfbmFtZShjb25zdCBj
aGFyKiB2YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmco
dmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdv
b2dsZS5wcm90b2J1Zi5FbnVtLm5hbWUpCi19Ci0gdm9pZCBFbnVtOjpzZXRfbmFtZShjb25zdCBj
aGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgCi0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAot
ICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSks
IHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVy
Omdvb2dsZS5wcm90b2J1Zi5FbnVtLm5hbWUpCi19Ci0gOjpzdGQ6OnN0cmluZyogRW51bTo6bXV0
YWJsZV9uYW1lKCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211
dGFibGU6Z29vZ2xlLnByb3RvYnVmLkVudW0ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFibGVO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogRW51bTo6cmVsZWFzZV9uYW1lKCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9i
dWYuRW51bS5uYW1lKQotICAKLSAgcmV0dXJuIG5hbWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19
Ci0gdm9pZCBFbnVtOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSkgewot
ICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAgbmFt
ZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIG5hbWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRW51bS5uYW1lKQot
fQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZSBlbnVtdmFsdWUgPSAy
OwotaW50IEVudW06OmVudW12YWx1ZV9zaXplKCkgY29uc3QgewotICByZXR1cm4gZW51bXZhbHVl
Xy5zaXplKCk7Ci19Ci12b2lkIEVudW06OmNsZWFyX2VudW12YWx1ZSgpIHsKLSAgZW51bXZhbHVl
Xy5DbGVhcigpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWUmIEVudW06
OmVudW12YWx1ZShpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRW51bS5lbnVtdmFsdWUpCi0gIHJldHVybiBl
bnVtdmFsdWVfLkdldChpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZSog
RW51bTo6bXV0YWJsZV9lbnVtdmFsdWUoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5FbnVtLmVudW12YWx1ZSkK
LSAgcmV0dXJuIGVudW12YWx1ZV8uTXV0YWJsZShpbmRleCk7Ci19Ci06Omdvb2dsZTo6cHJvdG9i
dWY6OkVudW1WYWx1ZSogRW51bTo6YWRkX2VudW12YWx1ZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9idWYuRW51bS5lbnVtdmFsdWUpCi0g
IHJldHVybiBlbnVtdmFsdWVfLkFkZCgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRl
ZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZSA+KgotRW51bTo6bXV0YWJs
ZV9lbnVtdmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRh
YmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkVudW0uZW51bXZhbHVlKQotICByZXR1cm4gJmVudW12
YWx1ZV87Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlID4mCi1FbnVtOjplbnVtdmFsdWUoKSBjb25zdCB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1
Zi5FbnVtLmVudW12YWx1ZSkKLSAgcmV0dXJuIGVudW12YWx1ZV87Ci19Ci0KLS8vIHJlcGVhdGVk
IC5nb29nbGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSAzOwotaW50IEVudW06Om9wdGlvbnNf
c2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG9wdGlvbnNfLnNpemUoKTsKLX0KLXZvaWQgRW51bTo6
Y2xlYXJfb3B0aW9ucygpIHsKLSAgb3B0aW9uc18uQ2xlYXIoKTsKLX0KLWNvbnN0IDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6T3B0aW9uJiBFbnVtOjpvcHRpb25zKGludCBpbmRleCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVt
Lm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXy5HZXQoaW5kZXgpOwotfQotOjpnb29nbGU6OnBy
b3RvYnVmOjpPcHRpb24qIEVudW06Om11dGFibGVfb3B0aW9ucyhpbnQgaW5kZXgpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkVu
dW0ub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLk11dGFibGUoaW5kZXgpOwotfQotOjpnb29n
bGU6OnByb3RvYnVmOjpPcHRpb24qIEVudW06OmFkZF9vcHRpb25zKCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkOmdvb2dsZS5wcm90b2J1Zi5FbnVtLm9wdGlvbnMp
Ci0gIHJldHVybiBvcHRpb25zXy5BZGQoKTsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0
ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24gPioKLUVudW06Om11dGFibGVf
b3B0aW9ucygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVf
bGlzdDpnb29nbGUucHJvdG9idWYuRW51bS5vcHRpb25zKQotICByZXR1cm4gJm9wdGlvbnNfOwot
fQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6
cHJvdG9idWY6Ok9wdGlvbiA+JgotRW51bTo6b3B0aW9ucygpIGNvbnN0IHsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkVudW0ub3B0aW9u
cykKLSAgcmV0dXJuIG9wdGlvbnNfOwotfQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVm
LlNvdXJjZUNvbnRleHQgc291cmNlX2NvbnRleHQgPSA0OwotYm9vbCBFbnVtOjpoYXNfc291cmNl
X2NvbnRleHQoKSBjb25zdCB7Ci0gIHJldHVybiAhX2lzX2RlZmF1bHRfaW5zdGFuY2VfICYmIHNv
dXJjZV9jb250ZXh0XyAhPSBOVUxMOwotfQotdm9pZCBFbnVtOjpjbGVhcl9zb3VyY2VfY29udGV4
dCgpIHsKLSAgaWYgKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gTlVMTCAmJiBzb3VyY2VfY29udGV4
dF8gIT0gTlVMTCkgZGVsZXRlIHNvdXJjZV9jb250ZXh0XzsKLSAgc291cmNlX2NvbnRleHRfID0g
TlVMTDsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCYgRW51bTo6
c291cmNlX2NvbnRleHQoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW0uc291cmNlX2NvbnRleHQpCi0gIHJldHVybiBz
b3VyY2VfY29udGV4dF8gIT0gTlVMTCA/ICpzb3VyY2VfY29udGV4dF8gOiAqZGVmYXVsdF9pbnN0
YW5jZV8tPnNvdXJjZV9jb250ZXh0XzsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29u
dGV4dCogRW51bTo6bXV0YWJsZV9zb3VyY2VfY29udGV4dCgpIHsKLSAgCi0gIGlmIChzb3VyY2Vf
Y29udGV4dF8gPT0gTlVMTCkgewotICAgIHNvdXJjZV9jb250ZXh0XyA9IG5ldyA6Omdvb2dsZTo6
cHJvdG9idWY6OlNvdXJjZUNvbnRleHQ7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkVudW0uc291cmNlX2NvbnRleHQpCi0g
IHJldHVybiBzb3VyY2VfY29udGV4dF87Ci19Ci06Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNv
bnRleHQqIEVudW06OnJlbGVhc2Vfc291cmNlX2NvbnRleHQoKSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5FbnVtLnNvdXJjZV9j
b250ZXh0KQotICAKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiB0ZW1wID0g
c291cmNlX2NvbnRleHRfOwotICBzb3VyY2VfY29udGV4dF8gPSBOVUxMOwotICByZXR1cm4gdGVt
cDsKLX0KLXZvaWQgRW51bTo6c2V0X2FsbG9jYXRlZF9zb3VyY2VfY29udGV4dCg6Omdvb2dsZTo6
cHJvdG9idWY6OlNvdXJjZUNvbnRleHQqIHNvdXJjZV9jb250ZXh0KSB7Ci0gIGRlbGV0ZSBzb3Vy
Y2VfY29udGV4dF87Ci0gIHNvdXJjZV9jb250ZXh0XyA9IHNvdXJjZV9jb250ZXh0OwotICBpZiAo
c291cmNlX2NvbnRleHQpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAKLSAgfQotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYu
RW51bS5zb3VyY2VfY29udGV4dCkKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5T
eW50YXggc3ludGF4ID0gNTsKLXZvaWQgRW51bTo6Y2xlYXJfc3ludGF4KCkgewotICBzeW50YXhf
ID0gMDsKLX0KLSA6Omdvb2dsZTo6cHJvdG9idWY6OlN5bnRheCBFbnVtOjpzeW50YXgoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLkVudW0uc3ludGF4KQotICByZXR1cm4gc3RhdGljX2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6U3ludGF4ID4oc3ludGF4Xyk7Ci19Ci0gdm9pZCBFbnVtOjpzZXRfc3ludGF4KDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6U3ludGF4IHZhbHVlKSB7Ci0gIAotICBzeW50YXhfID0gdmFsdWU7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW0u
c3ludGF4KQotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwot
Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPj0g
MTkwMAotY29uc3QgaW50IEVudW1WYWx1ZTo6a05hbWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBF
bnVtVmFsdWU6OmtOdW1iZXJGaWVsZE51bWJlcjsKLWNvbnN0IGludCBFbnVtVmFsdWU6OmtPcHRp
b25zRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZF
UiA+PSAxOTAwCi0KLUVudW1WYWx1ZTo6RW51bVZhbHVlKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3Io
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90
b2J1Zi5FbnVtVmFsdWUpCi19Ci0KLXZvaWQgRW51bVZhbHVlOjpJbml0QXNEZWZhdWx0SW5zdGFu
Y2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IHRydWU7Ci19Ci0KLUVudW1WYWx1ZTo6
RW51bVZhbHVlKGNvbnN0IEVudW1WYWx1ZSYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3Rv
cigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChj
b3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUpCi19Ci0KLXZvaWQgRW51
bVZhbHVlOjpTaGFyZWRDdG9yKCkgewotICAgIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IGZhbHNl
OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZygpOwotICBf
Y2FjaGVkX3NpemVfID0gMDsKLSAgbmFtZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBudW1i
ZXJfID0gMDsKLX0KLQotRW51bVZhbHVlOjp+RW51bVZhbHVlKCkgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlKQotICBT
aGFyZWREdG9yKCk7Ci19Ci0KLXZvaWQgRW51bVZhbHVlOjpTaGFyZWREdG9yKCkgewotICBuYW1l
Xy5EZXN0cm95Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNlXykg
ewotICB9Ci19Ci0KLXZvaWQgRW51bVZhbHVlOjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25z
dCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRf
c2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0K
LWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogRW51bVZhbHVlOjpkZXNjcmlw
dG9yKCkgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIEVu
dW1WYWx1ZV9kZXNjcmlwdG9yXzsKLX0KLQotY29uc3QgRW51bVZhbHVlJiBFbnVtVmFsdWU6OmRl
ZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlmIChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90
b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmdHlwZV8yZXByb3RvKCk7Ci0gIHJldHVy
biAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLUVudW1WYWx1ZSogRW51bVZhbHVlOjpkZWZhdWx0
X2luc3RhbmNlXyA9IE5VTEw7Ci0KLUVudW1WYWx1ZSogRW51bVZhbHVlOjpOZXcoOjpnb29nbGU6
OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgRW51bVZhbHVlKiBuID0gbmV3IEVu
dW1WYWx1ZTsKLSAgaWYgKGFyZW5hICE9IE5VTEwpIHsKLSAgICBhcmVuYS0+T3duKG4pOwotICB9
Ci0gIHJldHVybiBuOwotfQotCi12b2lkIEVudW1WYWx1ZTo6Q2xlYXIoKSB7Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUucHJvdG9idWYuRW51
bVZhbHVlKQotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIG51bWJlcl8gPSAw
OwotICBvcHRpb25zXy5DbGVhcigpOwotfQotCi1ib29sIEVudW1WYWx1ZTo6TWVyZ2VQYXJ0aWFs
RnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRT
dHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVE
SUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6
OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpn
b29nbGUucHJvdG9idWYuRW51bVZhbHVlKQotICBmb3IgKDs7KSB7Ci0gICAgOjpzdGQ6OnBhaXI8
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyLCBib29sPiBwID0gaW5wdXQtPlJlYWRUYWdXaXRo
Q3V0b2ZmKDEyNyk7Ci0gICAgdGFnID0gcC5maXJzdDsKLSAgICBpZiAoIXAuc2Vjb25kKSBnb3Rv
IGhhbmRsZV91bnVzdWFsOwotICAgIHN3aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZykpIHsKLSAgICAgIC8vIG9w
dGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgICAgIGNhc2UgMTogewotICAgICAgICBpZiAodGFn
ID09IDEwKSB7Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKAotICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLT5t
dXRhYmxlX25hbWUoKSkpOwotICAgICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgICAgICAgIHRoaXMt
Pm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgICAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpQQVJTRSwKLSAgICAgICAg
ICAgICJnb29nbGUucHJvdG9idWYuRW51bVZhbHVlLm5hbWUiKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aW5wdXQtPkV4cGVjdFRhZygxNikpIGdvdG8gcGFyc2VfbnVtYmVyOwotICAgICAgICBicmVhazsK
LSAgICAgIH0KLQotICAgICAgLy8gb3B0aW9uYWwgaW50MzIgbnVtYmVyID0gMjsKLSAgICAgIGNh
c2UgMjogewotICAgICAgICBpZiAodGFnID09IDE2KSB7Ci0gICAgICAgICBwYXJzZV9udW1iZXI6
Ci0gICAgICAgICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludDMyLCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
VFlQRV9JTlQzMj4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmbnVtYmVyXykpKTsKLQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RUYWcoMjYpKSBnb3RvIHBhcnNlX29wdGlvbnM7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3Rv
YnVmLk9wdGlvbiBvcHRpb25zID0gMzsKLSAgICAgIGNhc2UgMzogewotICAgICAgICBpZiAodGFn
ID09IDI2KSB7Ci0gICAgICAgICBwYXJzZV9vcHRpb25zOgotICAgICAgICAgIERPXyhpbnB1dC0+
SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSk7Ci0gICAgICAgICBwYXJzZV9sb29wX29wdGlvbnM6
Ci0gICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRM
aXRlOjpSZWFkTWVzc2FnZU5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoCi0gICAgICAgICAgICAg
ICAgaW5wdXQsIGFkZF9vcHRpb25zKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBn
b3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0
VGFnKDI2KSkgZ290byBwYXJzZV9sb29wX29wdGlvbnM7Ci0gICAgICAgIGlucHV0LT5VbnNhZmVE
ZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdEF0RW5k
KCkpIGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1
bHQ6IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAgICBpZiAodGFnID09IDAgfHwKLSAg
ICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpH
ZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7Ci0gICAgICAgICAg
Z290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U2tpcEZpZWxkKGlucHV0LCB0YWcpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlKQot
ICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChw
YXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUpCi0gIHJldHVybiBmYWxzZTsK
LSN1bmRlZiBET18KLX0KLQotdm9pZCBFbnVtVmFsdWU6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXpl
cygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0
KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6
Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZSkKLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAx
OwotICBpZiAodGhpcy0+bmFtZSgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRo
aXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAi
Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZS5uYW1lIik7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nTWF5YmVBbGlhc2VkKAotICAg
ICAgMSwgdGhpcy0+bmFtZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgaW50MzIg
bnVtYmVyID0gMjsKLSAgaWYgKHRoaXMtPm51bWJlcigpICE9IDApIHsKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQzMigyLCB0aGlzLT5u
dW1iZXIoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYu
T3B0aW9uIG9wdGlvbnMgPSAzOwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgbiA9IHRoaXMt
Pm9wdGlvbnNfc2l6ZSgpOyBpIDwgbjsgaSsrKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAg
IDMsIHRoaXMtPm9wdGlvbnMoaSksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlKQotfQot
Ci06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBFbnVtVmFsdWU6OlNlcmlhbGl6ZVdpdGhDYWNo
ZWRTaXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlf
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZSkKLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5h
bWUgPSAxOwotICBpZiAodGhpcy0+bmFtZSgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAg
ICAgIHRoaXMtPm5hbWUoKS5kYXRhKCksIHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0g
ICAgICAiZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZS5uYW1lIik7Ci0gICAgdGFyZ2V0ID0KLSAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0
cmluZ1RvQXJyYXkoCi0gICAgICAgIDEsIHRoaXMtPm5hbWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0g
IC8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDI7Ci0gIGlmICh0aGlzLT5udW1iZXIoKSAhPSAw
KSB7Ci0gICAgdGFyZ2V0ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OldyaXRlSW50MzJUb0FycmF5KDIsIHRoaXMtPm51bWJlcigpLCB0YXJnZXQpOwotICB9
Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5PcHRpb24gb3B0aW9ucyA9IDM7Ci0g
IGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBuID0gdGhpcy0+b3B0aW9uc19zaXplKCk7IGkgPCBu
OyBpKyspIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6Ci0gICAgICBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWxUb0FycmF5KAotICAgICAg
ICAzLCB0aGlzLT5vcHRpb25zKGkpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkVudW1W
YWx1ZSkKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IEVudW1WYWx1ZTo6Qnl0ZVNpemUoKSBj
b25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZSkKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0g
IC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgaWYgKHRoaXMtPm5hbWUoKS5zaXplKCkg
PiAwKSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICB0aGlzLT5uYW1l
KCkpOwotICB9Ci0KLSAgLy8gb3B0aW9uYWwgaW50MzIgbnVtYmVyID0gMjsKLSAgaWYgKHRoaXMt
Pm51bWJlcigpICE9IDApIHsKLSAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkludDMyU2l6ZSgKLSAgICAgICAg
dGhpcy0+bnVtYmVyKCkpOwotICB9Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1Zi5P
cHRpb24gb3B0aW9ucyA9IDM7Ci0gIHRvdGFsX3NpemUgKz0gMSAqIHRoaXMtPm9wdGlvbnNfc2l6
ZSgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMtPm9wdGlvbnNfc2l6ZSgpOyBpKyspIHsK
LSAgICB0b3RhbF9zaXplICs9Ci0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpX
aXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAgICAgIHRoaXMtPm9wdGlv
bnMoaSkpOwotICB9Ci0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsK
LSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBFbnVtVmFsdWU6
Ok1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUpCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJv
bSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGNvbnN0IEVudW1WYWx1ZSog
c291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2Fz
dFRvR2VuZXJhdGVkPGNvbnN0IEVudW1WYWx1ZT4oCi0gICAgICAgICAgJmZyb20pOwotICBpZiAo
c291cmNlID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxp
emVkX21lcmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUpCi0gICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6UmVmbGVjdGlvbk9wczo6TWVyZ2UoZnJvbSwg
dGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFs
aXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlKQot
ICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIEVudW1WYWx1ZTo6TWVyZ2VG
cm9tKGNvbnN0IEVudW1WYWx1ZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1
ZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21G
YWlsKF9fTElORV9fKTsKLSAgb3B0aW9uc18uTWVyZ2VGcm9tKGZyb20ub3B0aW9uc18pOwotICBp
ZiAoZnJvbS5uYW1lKCkuc2l6ZSgpID4gMCkgewotCi0gICAgbmFtZV8uQXNzaWduV2l0aERlZmF1
bHQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpLCBmcm9tLm5hbWVfKTsKLSAgfQotICBpZiAoZnJvbS5udW1iZXIoKSAhPSAwKSB7Ci0g
ICAgc2V0X251bWJlcihmcm9tLm51bWJlcigpKTsKLSAgfQotfQotCi12b2lkIEVudW1WYWx1ZTo6
Q29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2ds
ZS5wcm90b2J1Zi5FbnVtVmFsdWUpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENs
ZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBFbnVtVmFsdWU6OkNvcHlGcm9t
KGNvbnN0IEVudW1WYWx1ZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNs
YXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlKQot
ICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJv
bSk7Ci19Ci0KLWJvb2wgRW51bVZhbHVlOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIEVudW1WYWx1ZTo6U3dhcChFbnVtVmFsdWUqIG90aGVyKSB7
Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIEludGVybmFsU3dhcChvdGhlcik7Ci19
Ci12b2lkIEVudW1WYWx1ZTo6SW50ZXJuYWxTd2FwKEVudW1WYWx1ZSogb3RoZXIpIHsKLSAgbmFt
ZV8uU3dhcCgmb3RoZXItPm5hbWVfKTsKLSAgc3RkOjpzd2FwKG51bWJlcl8sIG90aGVyLT5udW1i
ZXJfKTsKLSAgb3B0aW9uc18uVW5zYWZlQXJlbmFTd2FwKCZvdGhlci0+b3B0aW9uc18pOwotICBf
aW50ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAg
c3RkOjpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90aGVyLT5fY2FjaGVkX3NpemVfKTsKLX0KLQotOjpn
b29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBFbnVtVmFsdWU6OkdldE1ldGFkYXRhKCkgY29uc3Qg
ewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IEVudW1WYWx1
ZV9kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IEVudW1WYWx1ZV9yZWZsZWN0
aW9uXzsKLSAgcmV0dXJuIG1ldGFkYXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5MSU5FX05PVF9J
Tl9IRUFERVJTCi0vLyBFbnVtVmFsdWUKLQotLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwot
dm9pZCBFbnVtVmFsdWU6OmNsZWFyX25hbWUoKSB7Ci0gIG5hbWVfLkNsZWFyVG9FbXB0eU5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpKTsKLX0KLSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBFbnVtVmFsdWU6Om5hbWUoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLkVudW1WYWx1ZS5uYW1lKQotICByZXR1cm4gbmFtZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQot
IHZvaWQgRW51bVZhbHVlOjpzZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewot
ICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlLm5hbWUpCi19Ci0g
dm9pZCBFbnVtVmFsdWU6OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKSB7Ci0gIAotICBuYW1l
Xy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZS5u
YW1lKQotfQotIHZvaWQgRW51bVZhbHVlOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6
ZV90IHNpemUpIHsKLSAgCi0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0
cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1
Zi5FbnVtVmFsdWUubmFtZSkKLX0KLSA6OnN0ZDo6c3RyaW5nKiBFbnVtVmFsdWU6Om11dGFibGVf
bmFtZSgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxl
Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUubmFtZSkKLSAgcmV0dXJuIG5hbWVfLk11dGFibGVO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSk7Ci19Ci0gOjpzdGQ6OnN0cmluZyogRW51bVZhbHVlOjpyZWxlYXNlX25hbWUo
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5w
cm90b2J1Zi5FbnVtVmFsdWUubmFtZSkKLSAgCi0gIHJldHVybiBuYW1lXy5SZWxlYXNlTm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotfQotIHZvaWQgRW51bVZhbHVlOjpzZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0
cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0g
ICAgCi0gIH0KLSAgbmFtZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIG5hbWUpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9i
dWYuRW51bVZhbHVlLm5hbWUpCi19Ci0KLS8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9IDI7Ci12
b2lkIEVudW1WYWx1ZTo6Y2xlYXJfbnVtYmVyKCkgewotICBudW1iZXJfID0gMDsKLX0KLSA6Omdv
b2dsZTo6cHJvdG9idWY6OmludDMyIEVudW1WYWx1ZTo6bnVtYmVyKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFs
dWUubnVtYmVyKQotICByZXR1cm4gbnVtYmVyXzsKLX0KLSB2b2lkIEVudW1WYWx1ZTo6c2V0X251
bWJlcig6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIAotICBudW1iZXJfID0g
dmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnBy
b3RvYnVmLkVudW1WYWx1ZS5udW1iZXIpCi19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9i
dWYuT3B0aW9uIG9wdGlvbnMgPSAzOwotaW50IEVudW1WYWx1ZTo6b3B0aW9uc19zaXplKCkgY29u
c3QgewotICByZXR1cm4gb3B0aW9uc18uc2l6ZSgpOwotfQotdm9pZCBFbnVtVmFsdWU6OmNsZWFy
X29wdGlvbnMoKSB7Ci0gIG9wdGlvbnNfLkNsZWFyKCk7Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6Ok9wdGlvbiYgRW51bVZhbHVlOjpvcHRpb25zKGludCBpbmRleCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVt
VmFsdWUub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLkdldChpbmRleCk7Ci19Ci06Omdvb2ds
ZTo6cHJvdG9idWY6Ok9wdGlvbiogRW51bVZhbHVlOjptdXRhYmxlX29wdGlvbnMoaW50IGluZGV4
KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5w
cm90b2J1Zi5FbnVtVmFsdWUub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLk11dGFibGUoaW5k
ZXgpOwotfQotOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24qIEVudW1WYWx1ZTo6YWRkX29wdGlv
bnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnBy
b3RvYnVmLkVudW1WYWx1ZS5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc18uQWRkKCk7Ci19Ci06
Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
T3B0aW9uID4qCi1FbnVtVmFsdWU6Om11dGFibGVfb3B0aW9ucygpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9idWYuRW51bVZh
bHVlLm9wdGlvbnMpCi0gIHJldHVybiAmb3B0aW9uc187Ci19Ci1jb25zdCA6Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4mCi1F
bnVtVmFsdWU6Om9wdGlvbnMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUub3B0aW9ucykKLSAgcmV0dXJu
IG9wdGlvbnNfOwotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVS
UwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIg
Pj0gMTkwMAotY29uc3QgaW50IE9wdGlvbjo6a05hbWVGaWVsZE51bWJlcjsKLWNvbnN0IGludCBP
cHRpb246OmtWYWx1ZUZpZWxkTnVtYmVyOwotI2VuZGlmICAvLyAhZGVmaW5lZChfTVNDX1ZFUikg
fHwgX01TQ19WRVIgPj0gMTkwMAotCi1PcHRpb246Ok9wdGlvbigpCi0gIDogOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRD
dG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb25zdHJ1Y3Rvcjpnb29nbGUu
cHJvdG9idWYuT3B0aW9uKQotfQotCi12b2lkIE9wdGlvbjo6SW5pdEFzRGVmYXVsdEluc3RhbmNl
KCkgewotICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSB0cnVlOwotICB2YWx1ZV8gPSBjb25zdF9j
YXN0PCA6Omdvb2dsZTo6cHJvdG9idWY6OkFueSo+KCY6Omdvb2dsZTo6cHJvdG9idWY6OkFueTo6
ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLX0KLQotT3B0aW9uOjpPcHRpb24oY29uc3QgT3B0aW9uJiBm
cm9tKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLAotICAgIF9pbnRlcm5hbF9t
ZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlfY29uc3RydWN0b3I6Z29vZ2xlLnByb3Rv
YnVmLk9wdGlvbikKLX0KLQotdm9pZCBPcHRpb246OlNoYXJlZEN0b3IoKSB7Ci0gICAgX2lzX2Rl
ZmF1bHRfaW5zdGFuY2VfID0gZmFsc2U7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwotICBuYW1lXy5VbnNhZmVT
ZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci0gIHZhbHVlXyA9IE5VTEw7Ci19Ci0KLU9wdGlvbjo6fk9wdGlvbigp
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0b3I6Z29vZ2xlLnByb3Rv
YnVmLk9wdGlvbikKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lkIE9wdGlvbjo6U2hhcmVkRHRv
cigpIHsKLSAgbmFtZV8uRGVzdHJveU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLSAgaWYgKHRoaXMgIT0gZGVmYXVs
dF9pbnN0YW5jZV8pIHsKLSAgICBkZWxldGUgdmFsdWVfOwotICB9Ci19Ci0KLXZvaWQgT3B0aW9u
OjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJF
TlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FG
RV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RGVzY3JpcHRvciogT3B0aW9uOjpkZXNjcmlwdG9yKCkgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNj
cmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIE9wdGlvbl9kZXNjcmlwdG9yXzsKLX0KLQotY29uc3Qg
T3B0aW9uJiBPcHRpb246OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlmIChkZWZhdWx0X2luc3Rh
bmNlXyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmdHlwZV8y
ZXByb3RvKCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5jZV87Ci19Ci0KLU9wdGlvbiogT3B0
aW9uOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLU9wdGlvbiogT3B0aW9uOjpOZXcoOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgT3B0aW9uKiBuID0gbmV3
IE9wdGlvbjsKLSAgaWYgKGFyZW5hICE9IE5VTEwpIHsKLSAgICBhcmVuYS0+T3duKG4pOwotICB9
Ci0gIHJldHVybiBuOwotfQotCi12b2lkIE9wdGlvbjo6Q2xlYXIoKSB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUucHJvdG9idWYuT3B0aW9u
KQotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci0gIGlmIChHZXRBcmVuYU5vVmly
dHVhbCgpID09IE5VTEwgJiYgdmFsdWVfICE9IE5VTEwpIGRlbGV0ZSB2YWx1ZV87Ci0gIHZhbHVl
XyA9IE5VTEw7Ci19Ci0KLWJvb2wgT3B0aW9uOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0o
Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsK
LSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShFWFBSRVNT
SU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRhZzsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5P
cHRpb24pCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVm
Ojp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0
YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0g
ICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6
R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUg
PSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTApIHsKLSAgICAgICAg
ICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRT
dHJpbmcoCi0gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVfbmFtZSgpKSk7Ci0g
ICAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpWZXJpZnlVdGY4U3RyaW5nKAotICAgICAgICAgICAgdGhpcy0+bmFtZSgpLmRhdGEoKSwgdGhp
cy0+bmFtZSgpLmxlbmd0aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1
Zi5PcHRpb24ubmFtZSIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRs
ZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0VGFnKDE4KSkg
Z290byBwYXJzZV92YWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIG9w
dGlvbmFsIC5nb29nbGUucHJvdG9idWYuQW55IHZhbHVlID0gMjsKLSAgICAgIGNhc2UgMjogewot
ICAgICAgICBpZiAodGFnID09IDE4KSB7Ci0gICAgICAgICBwYXJzZV92YWx1ZToKLSAgICAgICAg
ICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRN
ZXNzYWdlTm9WaXJ0dWFsKAotICAgICAgICAgICAgICAgaW5wdXQsIG11dGFibGVfdmFsdWUoKSkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVf
dW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9
PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExp
dGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAg
ICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlNraXBGaWVsZChpbnB1dCwgdGFnKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
ICAgIH0KLSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNl
X3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLk9wdGlvbikKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJl
OgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJv
dG9idWYuT3B0aW9uKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgT3B0
aW9uOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5PcHRpb24pCi0gIC8v
IG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgaWYgKHRoaXMtPm5hbWUoKS5zaXplKCkgPiAw
KSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlZl
cmlmeVV0ZjhTdHJpbmcoCi0gICAgICB0aGlzLT5uYW1lKCkuZGF0YSgpLCB0aGlzLT5uYW1lKCku
bGVuZ3RoKCksCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6U0VSSUFMSVpFLAotICAgICAgImdvb2dsZS5wcm90b2J1Zi5PcHRpb24ubmFtZSIpOwot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0
cmluZ01heWJlQWxpYXNlZCgKLSAgICAgIDEsIHRoaXMtPm5hbWUoKSwgb3V0cHV0KTsKLSAgfQot
Ci0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuQW55IHZhbHVlID0gMjsKLSAgaWYgKHRo
aXMtPmhhc192YWx1ZSgpKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICAgIDIsICp0aGlzLT52
YWx1ZV8sIG91dHB1dCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2Vy
aWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuT3B0aW9uKQotfQotCi06Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQ4KiBPcHRpb246OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
Lk9wdGlvbikKLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICBpZiAodGhpcy0+bmFt
ZSgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMtPm5hbWUoKS5kYXRhKCks
IHRoaXMtPm5hbWUoKS5sZW5ndGgoKSwKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAiZ29vZ2xlLnByb3RvYnVmLk9w
dGlvbi5uYW1lIik7Ci0gICAgdGFyZ2V0ID0KLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ1RvQXJyYXkoCi0gICAgICAgIDEsIHRo
aXMtPm5hbWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9i
dWYuQW55IHZhbHVlID0gMjsKLSAgaWYgKHRoaXMtPmhhc192YWx1ZSgpKSB7Ci0gICAgdGFyZ2V0
ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OgotICAgICAg
V3JpdGVNZXNzYWdlTm9WaXJ0dWFsVG9BcnJheSgKLSAgICAgICAgMiwgKnRoaXMtPnZhbHVlXywg
dGFyZ2V0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVf
dG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5PcHRpb24pCi0gIHJldHVybiB0YXJnZXQ7Ci19
Ci0KLWludCBPcHRpb246OkJ5dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5PcHRpb24pCi0g
IGludCB0b3RhbF9zaXplID0gMDsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0g
IGlmICh0aGlzLT5uYW1lKCkuc2l6ZSgpID4gMCkgewotICAgIHRvdGFsX3NpemUgKz0gMSArCi0g
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U3RyaW5n
U2l6ZSgKLSAgICAgICAgdGhpcy0+bmFtZSgpKTsKLSAgfQotCi0gIC8vIG9wdGlvbmFsIC5nb29n
bGUucHJvdG9idWYuQW55IHZhbHVlID0gMjsKLSAgaWYgKHRoaXMtPmhhc192YWx1ZSgpKSB7Ci0g
ICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OldpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZU5vVmlydHVhbCgKLSAgICAgICAgKnRoaXMtPnZh
bHVlXyk7Ci0gIH0KLQotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19CRUdJTigpOwot
ICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6ZTsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9X
UklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3RhbF9zaXplOwotfQotCi12b2lkIE9wdGlvbjo6TWVy
Z2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xl
LnByb3RvYnVmLk9wdGlvbikKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRo
aXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgT3B0aW9uKiBzb3VyY2UgPSAK
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0
ZWQ8Y29uc3QgT3B0aW9uPigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVM
TCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJv
bV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLk9wdGlvbikKLSAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNl
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21f
Y2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5PcHRpb24pCi0gICAgTWVyZ2VGcm9tKCpzb3Vy
Y2UpOwotICB9Ci19Ci0KLXZvaWQgT3B0aW9uOjpNZXJnZUZyb20oY29uc3QgT3B0aW9uJiBmcm9t
KSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJv
bV9zdGFydDpnb29nbGUucHJvdG9idWYuT3B0aW9uKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFM
U0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBpZiAoZnJvbS5u
YW1lKCkuc2l6ZSgpID4gMCkgewotCi0gICAgbmFtZV8uQXNzaWduV2l0aERlZmF1bHQoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBm
cm9tLm5hbWVfKTsKLSAgfQotICBpZiAoZnJvbS5oYXNfdmFsdWUoKSkgewotICAgIG11dGFibGVf
dmFsdWUoKS0+Ojpnb29nbGU6OnByb3RvYnVmOjpBbnk6Ok1lcmdlRnJvbShmcm9tLnZhbHVlKCkp
OwotICB9Ci19Ci0KLXZvaWQgT3B0aW9uOjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFs
aXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLk9wdGlvbikKLSAgaWYgKCZmcm9t
ID09IHRoaXMpIHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12
b2lkIE9wdGlvbjo6Q29weUZyb20oY29uc3QgT3B0aW9uJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90
b2J1Zi5PcHRpb24pCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0g
IE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBPcHRpb246OklzSW5pdGlhbGl6ZWQoKSBjb25z
dCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgT3B0aW9uOjpTd2FwKE9wdGlvbiogb3Ro
ZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsKLSAgSW50ZXJuYWxTd2FwKG90aGVy
KTsKLX0KLXZvaWQgT3B0aW9uOjpJbnRlcm5hbFN3YXAoT3B0aW9uKiBvdGhlcikgewotICBuYW1l
Xy5Td2FwKCZvdGhlci0+bmFtZV8pOwotICBzdGQ6OnN3YXAodmFsdWVfLCBvdGhlci0+dmFsdWVf
KTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFkYXRh
Xyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7Ci19
Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgT3B0aW9uOjpHZXRNZXRhZGF0YSgpIGNv
bnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBPcHRp
b25fZGVzY3JpcHRvcl87Ci0gIG1ldGFkYXRhLnJlZmxlY3Rpb24gPSBPcHRpb25fcmVmbGVjdGlv
bl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5f
SEVBREVSUwotLy8gT3B0aW9uCi0KLS8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLXZvaWQg
T3B0aW9uOjpjbGVhcl9uYW1lKCkgewotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgT3B0aW9uOjpuYW1lKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5PcHRpb24u
bmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIE9wdGlvbjo6
c2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgCi0gIG5hbWVfLlNldE5v
QXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9z
ZXQ6Z29vZ2xlLnByb3RvYnVmLk9wdGlvbi5uYW1lKQotfQotIHZvaWQgT3B0aW9uOjpzZXRfbmFt
ZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3Rk
OjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5PcHRpb24ubmFtZSkKLX0KLSB2b2lkIE9wdGlvbjo6c2V0
X25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gIAotICBuYW1lXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuT3B0aW9uLm5hbWUpCi19Ci0gOjpzdGQ6OnN0
cmluZyogT3B0aW9uOjptdXRhYmxlX25hbWUoKSB7Ci0gIAotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuT3B0aW9uLm5hbWUpCi0gIHJl
dHVybiBuYW1lXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotIDo6c3RkOjpzdHJpbmcqIE9wdGlv
bjo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
cmVsZWFzZTpnb29nbGUucHJvdG9idWYuT3B0aW9uLm5hbWUpCi0gIAotICByZXR1cm4gbmFtZV8u
UmVsZWFzZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLSB2b2lkIE9wdGlvbjo6c2V0X2FsbG9jYXRlZF9uYW1l
KDo6c3RkOjpzdHJpbmcqIG5hbWUpIHsKLSAgaWYgKG5hbWUgIT0gTlVMTCkgewotICAgIAotICB9
IGVsc2UgewotICAgIAotICB9Ci0gIG5hbWVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBuYW1l
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29v
Z2xlLnByb3RvYnVmLk9wdGlvbi5uYW1lKQotfQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnByb3Rv
YnVmLkFueSB2YWx1ZSA9IDI7Ci1ib29sIE9wdGlvbjo6aGFzX3ZhbHVlKCkgY29uc3QgewotICBy
ZXR1cm4gIV9pc19kZWZhdWx0X2luc3RhbmNlXyAmJiB2YWx1ZV8gIT0gTlVMTDsKLX0KLXZvaWQg
T3B0aW9uOjpjbGVhcl92YWx1ZSgpIHsKLSAgaWYgKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gTlVM
TCAmJiB2YWx1ZV8gIT0gTlVMTCkgZGVsZXRlIHZhbHVlXzsKLSAgdmFsdWVfID0gTlVMTDsKLX0K
LWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55JiBPcHRpb246OnZhbHVlKCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5P
cHRpb24udmFsdWUpCi0gIHJldHVybiB2YWx1ZV8gIT0gTlVMTCA/ICp2YWx1ZV8gOiAqZGVmYXVs
dF9pbnN0YW5jZV8tPnZhbHVlXzsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55KiBPcHRpb246
Om11dGFibGVfdmFsdWUoKSB7Ci0gIAotICBpZiAodmFsdWVfID09IE5VTEwpIHsKLSAgICB2YWx1
ZV8gPSBuZXcgOjpnb29nbGU6OnByb3RvYnVmOjpBbnk7Ci0gIH0KLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLk9wdGlvbi52YWx1ZSkK
LSAgcmV0dXJuIHZhbHVlXzsKLX0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55KiBPcHRpb246OnJl
bGVhc2VfdmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxl
YXNlOmdvb2dsZS5wcm90b2J1Zi5PcHRpb24udmFsdWUpCi0gIAotICA6Omdvb2dsZTo6cHJvdG9i
dWY6OkFueSogdGVtcCA9IHZhbHVlXzsKLSAgdmFsdWVfID0gTlVMTDsKLSAgcmV0dXJuIHRlbXA7
Ci19Ci12b2lkIE9wdGlvbjo6c2V0X2FsbG9jYXRlZF92YWx1ZSg6Omdvb2dsZTo6cHJvdG9idWY6
OkFueSogdmFsdWUpIHsKLSAgZGVsZXRlIHZhbHVlXzsKLSAgdmFsdWVfID0gdmFsdWU7Ci0gIGlm
ICh2YWx1ZSkgewotICAgIAotICB9IGVsc2UgewotICAgIAotICB9Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5PcHRpb24u
dmFsdWUpCi19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0K
LS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChuYW1lc3BhY2Vfc2NvcGUpCi0KLX0gIC8vIG5h
bWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0vLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoZ2xvYmFsX3Njb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3R5cGUucGIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi90eXBlLnBiLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQyNTVmYThjMmU5YjJhMTA5NDdkOWI0NjlkN2FhMTg5NTEyMWVh
MDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3R5cGUucGIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MzEgKzAsMCBAQAot
Ly8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJ
VCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL3R5cGUucHJvdG8KLQotI2lmbmRlZiBQUk9U
T0JVRl9nb29nbGVfMmZwcm90b2J1Zl8yZnR5cGVfMmVwcm90b19fSU5DTFVERUQKLSNkZWZpbmUg
UFJPVE9CVUZfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG9fX0lOQ0xVREVECi0KLSNp
bmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9u
Lmg+Ci0KLSNpZiBHT09HTEVfUFJPVE9CVUZfVkVSU0lPTiA8IDMwMDAwMDAKLSNlcnJvciBUaGlz
IGZpbGUgd2FzIGdlbmVyYXRlZCBieSBhIG5ld2VyIHZlcnNpb24gb2YgcHJvdG9jIHdoaWNoIGlz
Ci0jZXJyb3IgaW5jb21wYXRpYmxlIHdpdGggeW91ciBQcm90b2NvbCBCdWZmZXIgaGVhZGVycy4g
IFBsZWFzZSB1cGRhdGUKLSNlcnJvciB5b3VyIGhlYWRlcnMuCi0jZW5kaWYKLSNpZiAzMDAwMDAw
IDwgR09PR0xFX1BST1RPQlVGX01JTl9QUk9UT0NfVkVSU0lPTgotI2Vycm9yIFRoaXMgZmlsZSB3
YXMgZ2VuZXJhdGVkIGJ5IGFuIG9sZGVyIHZlcnNpb24gb2YgcHJvdG9jIHdoaWNoIGlzCi0jZXJy
b3IgaW5jb21wYXRpYmxlIHdpdGggeW91ciBQcm90b2NvbCBCdWZmZXIgaGVhZGVycy4gIFBsZWFz
ZQotI2Vycm9yIHJlZ2VuZXJhdGUgdGhpcyBmaWxlIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIHBy
b3RvYy4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hc3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3V0aWwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvbWV0YWRhdGEuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9yZXBlYXRlZF9maWVsZC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9leHRlbnNpb25fc2V0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dl
bmVyYXRlZF9lbnVtX3JlZmxlY3Rpb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5r
bm93bl9maWVsZF9zZXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYW55LnBiLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnBiLmg+Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoaW5jbHVkZXMpCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNw
YWNlIHByb3RvYnVmIHsKLQotLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIC0tIGRv
IG5vdCBjYWxsIHRoZXNlLgotdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVz
Y19nb29nbGVfMmZwcm90b2J1Zl8yZnR5cGVfMmVwcm90bygpOwotdm9pZCBwcm90b2J1Zl9Bc3Np
Z25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmdHlwZV8yZXByb3RvKCk7Ci12b2lkIHByb3RvYnVm
X1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZnR5cGVfMmVwcm90bygpOwotCi1jbGFz
cyBFbnVtOwotY2xhc3MgRW51bVZhbHVlOwotY2xhc3MgRmllbGQ7Ci1jbGFzcyBPcHRpb247Ci1j
bGFzcyBUeXBlOwotCi1lbnVtIEZpZWxkX0tpbmQgewotICBGaWVsZF9LaW5kX1RZUEVfVU5LTk9X
TiA9IDAsCi0gIEZpZWxkX0tpbmRfVFlQRV9ET1VCTEUgPSAxLAotICBGaWVsZF9LaW5kX1RZUEVf
RkxPQVQgPSAyLAotICBGaWVsZF9LaW5kX1RZUEVfSU5UNjQgPSAzLAotICBGaWVsZF9LaW5kX1RZ
UEVfVUlOVDY0ID0gNCwKLSAgRmllbGRfS2luZF9UWVBFX0lOVDMyID0gNSwKLSAgRmllbGRfS2lu
ZF9UWVBFX0ZJWEVENjQgPSA2LAotICBGaWVsZF9LaW5kX1RZUEVfRklYRUQzMiA9IDcsCi0gIEZp
ZWxkX0tpbmRfVFlQRV9CT09MID0gOCwKLSAgRmllbGRfS2luZF9UWVBFX1NUUklORyA9IDksCi0g
IEZpZWxkX0tpbmRfVFlQRV9HUk9VUCA9IDEwLAotICBGaWVsZF9LaW5kX1RZUEVfTUVTU0FHRSA9
IDExLAotICBGaWVsZF9LaW5kX1RZUEVfQllURVMgPSAxMiwKLSAgRmllbGRfS2luZF9UWVBFX1VJ
TlQzMiA9IDEzLAotICBGaWVsZF9LaW5kX1RZUEVfRU5VTSA9IDE0LAotICBGaWVsZF9LaW5kX1RZ
UEVfU0ZJWEVEMzIgPSAxNSwKLSAgRmllbGRfS2luZF9UWVBFX1NGSVhFRDY0ID0gMTYsCi0gIEZp
ZWxkX0tpbmRfVFlQRV9TSU5UMzIgPSAxNywKLSAgRmllbGRfS2luZF9UWVBFX1NJTlQ2NCA9IDE4
LAotICBGaWVsZF9LaW5kX0ZpZWxkX0tpbmRfSU5UX01JTl9TRU5USU5FTF9ET19OT1RfVVNFXyA9
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6a2ludDMybWluLAotICBGaWVsZF9LaW5kX0ZpZWxkX0tpbmRf
SU5UX01BWF9TRU5USU5FTF9ET19OT1RfVVNFXyA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6a2ludDMy
bWF4Ci19OwotTElCUFJPVE9CVUZfRVhQT1JUIGJvb2wgRmllbGRfS2luZF9Jc1ZhbGlkKGludCB2
YWx1ZSk7Ci1jb25zdCBGaWVsZF9LaW5kIEZpZWxkX0tpbmRfS2luZF9NSU4gPSBGaWVsZF9LaW5k
X1RZUEVfVU5LTk9XTjsKLWNvbnN0IEZpZWxkX0tpbmQgRmllbGRfS2luZF9LaW5kX01BWCA9IEZp
ZWxkX0tpbmRfVFlQRV9TSU5UNjQ7Ci1jb25zdCBpbnQgRmllbGRfS2luZF9LaW5kX0FSUkFZU0la
RSA9IEZpZWxkX0tpbmRfS2luZF9NQVggKyAxOwotCi1MSUJQUk9UT0JVRl9FWFBPUlQgY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvciogRmllbGRfS2luZF9kZXNjcmlwdG9y
KCk7Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgRmllbGRfS2luZF9OYW1lKEZpZWxkX0tp
bmQgdmFsdWUpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok5hbWVP
ZkVudW0oCi0gICAgRmllbGRfS2luZF9kZXNjcmlwdG9yKCksIHZhbHVlKTsKLX0KLWlubGluZSBi
b29sIEZpZWxkX0tpbmRfUGFyc2UoCi0gICAgY29uc3QgOjpzdGQ6OnN0cmluZyYgbmFtZSwgRmll
bGRfS2luZCogdmFsdWUpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OlBhcnNlTmFtZWRFbnVtPEZpZWxkX0tpbmQ+KAotICAgIEZpZWxkX0tpbmRfZGVzY3JpcHRvcigp
LCBuYW1lLCB2YWx1ZSk7Ci19Ci1lbnVtIEZpZWxkX0NhcmRpbmFsaXR5IHsKLSAgRmllbGRfQ2Fy
ZGluYWxpdHlfQ0FSRElOQUxJVFlfVU5LTk9XTiA9IDAsCi0gIEZpZWxkX0NhcmRpbmFsaXR5X0NB
UkRJTkFMSVRZX09QVElPTkFMID0gMSwKLSAgRmllbGRfQ2FyZGluYWxpdHlfQ0FSRElOQUxJVFlf
UkVRVUlSRUQgPSAyLAotICBGaWVsZF9DYXJkaW5hbGl0eV9DQVJESU5BTElUWV9SRVBFQVRFRCA9
IDMsCi0gIEZpZWxkX0NhcmRpbmFsaXR5X0ZpZWxkX0NhcmRpbmFsaXR5X0lOVF9NSU5fU0VOVElO
RUxfRE9fTk9UX1VTRV8gPSA6Omdvb2dsZTo6cHJvdG9idWY6OmtpbnQzMm1pbiwKLSAgRmllbGRf
Q2FyZGluYWxpdHlfRmllbGRfQ2FyZGluYWxpdHlfSU5UX01BWF9TRU5USU5FTF9ET19OT1RfVVNF
XyA9IDo6Z29vZ2xlOjpwcm90b2J1Zjo6a2ludDMybWF4Ci19OwotTElCUFJPVE9CVUZfRVhQT1JU
IGJvb2wgRmllbGRfQ2FyZGluYWxpdHlfSXNWYWxpZChpbnQgdmFsdWUpOwotY29uc3QgRmllbGRf
Q2FyZGluYWxpdHkgRmllbGRfQ2FyZGluYWxpdHlfQ2FyZGluYWxpdHlfTUlOID0gRmllbGRfQ2Fy
ZGluYWxpdHlfQ0FSRElOQUxJVFlfVU5LTk9XTjsKLWNvbnN0IEZpZWxkX0NhcmRpbmFsaXR5IEZp
ZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5X01BWCA9IEZpZWxkX0NhcmRpbmFsaXR5X0NBUkRJ
TkFMSVRZX1JFUEVBVEVEOwotY29uc3QgaW50IEZpZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5
X0FSUkFZU0laRSA9IEZpZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5X01BWCArIDE7Ci0KLUxJ
QlBST1RPQlVGX0VYUE9SVCBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9y
KiBGaWVsZF9DYXJkaW5hbGl0eV9kZXNjcmlwdG9yKCk7Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0
cmluZyYgRmllbGRfQ2FyZGluYWxpdHlfTmFtZShGaWVsZF9DYXJkaW5hbGl0eSB2YWx1ZSkgewot
ICByZXR1cm4gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6TmFtZU9mRW51bSgKLSAgICBG
aWVsZF9DYXJkaW5hbGl0eV9kZXNjcmlwdG9yKCksIHZhbHVlKTsKLX0KLWlubGluZSBib29sIEZp
ZWxkX0NhcmRpbmFsaXR5X1BhcnNlKAotICAgIGNvbnN0IDo6c3RkOjpzdHJpbmcmIG5hbWUsIEZp
ZWxkX0NhcmRpbmFsaXR5KiB2YWx1ZSkgewotICByZXR1cm4gOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6UGFyc2VOYW1lZEVudW08RmllbGRfQ2FyZGluYWxpdHk+KAotICAgIEZpZWxkX0Nh
cmRpbmFsaXR5X2Rlc2NyaXB0b3IoKSwgbmFtZSwgdmFsdWUpOwotfQotZW51bSBTeW50YXggewot
ICBTWU5UQVhfUFJPVE8yID0gMCwKLSAgU1lOVEFYX1BST1RPMyA9IDEsCi0gIFN5bnRheF9JTlRf
TUlOX1NFTlRJTkVMX0RPX05PVF9VU0VfID0gOjpnb29nbGU6OnByb3RvYnVmOjpraW50MzJtaW4s
Ci0gIFN5bnRheF9JTlRfTUFYX1NFTlRJTkVMX0RPX05PVF9VU0VfID0gOjpnb29nbGU6OnByb3Rv
YnVmOjpraW50MzJtYXgKLX07Ci1MSUJQUk9UT0JVRl9FWFBPUlQgYm9vbCBTeW50YXhfSXNWYWxp
ZChpbnQgdmFsdWUpOwotY29uc3QgU3ludGF4IFN5bnRheF9NSU4gPSBTWU5UQVhfUFJPVE8yOwot
Y29uc3QgU3ludGF4IFN5bnRheF9NQVggPSBTWU5UQVhfUFJPVE8zOwotY29uc3QgaW50IFN5bnRh
eF9BUlJBWVNJWkUgPSBTeW50YXhfTUFYICsgMTsKLQotTElCUFJPVE9CVUZfRVhQT1JUIGNvbnN0
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3IqIFN5bnRheF9kZXNjcmlwdG9yKCk7
Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgU3ludGF4X05hbWUoU3ludGF4IHZhbHVlKSB7
Ci0gIHJldHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpOYW1lT2ZFbnVtKAotICAg
IFN5bnRheF9kZXNjcmlwdG9yKCksIHZhbHVlKTsKLX0KLWlubGluZSBib29sIFN5bnRheF9QYXJz
ZSgKLSAgICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lLCBTeW50YXgqIHZhbHVlKSB7Ci0gIHJl
dHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpQYXJzZU5hbWVkRW51bTxTeW50YXg+
KAotICAgIFN5bnRheF9kZXNjcmlwdG9yKCksIG5hbWUsIHZhbHVlKTsKLX0KLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFR5cGUgOiBwdWJsaWMgOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIFR5cGUoKTsKLSAgdmlydHVhbCB+VHlwZSgp
OwotCi0gIFR5cGUoY29uc3QgVHlwZSYgZnJvbSk7Ci0KLSAgaW5saW5lIFR5cGUmIG9wZXJhdG9y
PShjb25zdCBUeXBlJiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRv
ciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgVHlwZSYgZGVmYXVsdF9pbnN0YW5jZSgp
OwotCi0gIHZvaWQgU3dhcChUeXBlKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxp
bmUgVHlwZSogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgVHlwZSogTmV3
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJv
bShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdl
RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENv
cHlGcm9tKGNvbnN0IFR5cGUmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBUeXBlJiBm
cm9tKTsKLSAgdm9pZCBDbGVhcigpOwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQot
ICBpbnQgQnl0ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJl
YW0oCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1
dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29n
bGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUo
KSBjb25zdCB7IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hh
cmVkQ3RvcigpOwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGlu
dCBzaXplKSBjb25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoVHlwZSogb3RoZXIpOwotICBwcml2
YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1
YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAg
fQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2lu
dGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBu
ZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAx
OwotICB2b2lkIGNsZWFyX25hbWUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrTmFtZUZpZWxkTnVt
YmVyID0gMTsKLSAgY29uc3QgOjpzdGQ6OnN0cmluZyYgbmFtZSgpIGNvbnN0OwotICB2b2lkIHNl
dF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBzZXRfbmFtZShjb25z
dCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVf
dCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0YWJsZV9uYW1lKCk7Ci0gIDo6c3RkOjpzdHJp
bmcqIHJlbGVhc2VfbmFtZSgpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3Ry
aW5nKiBuYW1lKTsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLkZpZWxkIGZpZWxk
cyA9IDI7Ci0gIGludCBmaWVsZHNfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX2ZpZWxkcygp
OwotICBzdGF0aWMgY29uc3QgaW50IGtGaWVsZHNGaWVsZE51bWJlciA9IDI7Ci0gIGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGQmIGZpZWxkcyhpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkKiBtdXRhYmxlX2ZpZWxkcyhpbnQgaW5kZXgpOwotICA6Omdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkKiBhZGRfZmllbGRzKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZCA+KgotICAgICAg
bXV0YWJsZV9maWVsZHMoKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0
ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkID4mCi0gICAgICBmaWVsZHMoKSBjb25z
dDsKLQotICAvLyByZXBlYXRlZCBzdHJpbmcgb25lb2ZzID0gMzsKLSAgaW50IG9uZW9mc19zaXpl
KCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfb25lb2ZzKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga09u
ZW9mc0ZpZWxkTnVtYmVyID0gMzsKLSAgY29uc3QgOjpzdGQ6OnN0cmluZyYgb25lb2ZzKGludCBp
bmRleCkgY29uc3Q7Ci0gIDo6c3RkOjpzdHJpbmcqIG11dGFibGVfb25lb2ZzKGludCBpbmRleCk7
Ci0gIHZvaWQgc2V0X29uZW9mcyhpbnQgaW5kZXgsIGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVl
KTsKLSAgdm9pZCBzZXRfb25lb2ZzKGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUpOwotICB2
b2lkIHNldF9vbmVvZnMoaW50IGluZGV4LCBjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUp
OwotICA6OnN0ZDo6c3RyaW5nKiBhZGRfb25lb2ZzKCk7Ci0gIHZvaWQgYWRkX29uZW9mcyhjb25z
dCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgYWRkX29uZW9mcyhjb25zdCBjaGFyKiB2
YWx1ZSk7Ci0gIHZvaWQgYWRkX29uZW9mcyhjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUp
OwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6c3RkOjpz
dHJpbmc+JiBvbmVvZnMoKSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0
ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPiogbXV0YWJsZV9vbmVvZnMoKTsKLQotICAvLyByZXBlYXRl
ZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBvcHRpb25zID0gNDsKLSAgaW50IG9wdGlvbnNfc2l6
ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX29wdGlvbnMoKTsKLSAgc3RhdGljIGNvbnN0IGludCBr
T3B0aW9uc0ZpZWxkTnVtYmVyID0gNDsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRp
b24mIG9wdGlvbnMoaW50IGluZGV4KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRp
b24qIG11dGFibGVfb3B0aW9ucyhpbnQgaW5kZXgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok9w
dGlvbiogYWRkX29wdGlvbnMoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZp
ZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiA+KgotICAgICAgbXV0YWJsZV9vcHRpb25z
KCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29n
bGU6OnByb3RvYnVmOjpPcHRpb24gPiYKLSAgICAgIG9wdGlvbnMoKSBjb25zdDsKLQotICAvLyBv
cHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQgc291cmNlX2NvbnRleHQgPSA1
OwotICBib29sIGhhc19zb3VyY2VfY29udGV4dCgpIGNvbnN0OwotICB2b2lkIGNsZWFyX3NvdXJj
ZV9jb250ZXh0KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1NvdXJjZUNvbnRleHRGaWVsZE51bWJl
ciA9IDU7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCYgc291cmNl
X2NvbnRleHQoKSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiBt
dXRhYmxlX3NvdXJjZV9jb250ZXh0KCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29u
dGV4dCogcmVsZWFzZV9zb3VyY2VfY29udGV4dCgpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRfc291
cmNlX2NvbnRleHQoOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiBzb3VyY2VfY29u
dGV4dCk7Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5TeW50YXggc3ludGF4ID0g
NjsKLSAgdm9pZCBjbGVhcl9zeW50YXgoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrU3ludGF4Rmll
bGROdW1iZXIgPSA2OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlN5bnRheCBzeW50YXgoKSBjb25z
dDsKLSAgdm9pZCBzZXRfc3ludGF4KDo6Z29vZ2xlOjpwcm90b2J1Zjo6U3ludGF4IHZhbHVlKTsK
LQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3Rv
YnVmLlR5cGUpCi0gcHJpdmF0ZToKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpJ
bnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0gIGJvb2wgX2lz
X2RlZmF1bHRfaW5zdGFuY2VfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBcmVu
YVN0cmluZ1B0ciBuYW1lXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxk
PCA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkID4gZmllbGRzXzsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6OnN0ZDo6c3RyaW5nPiBvbmVvZnNfOwotICA6Omdvb2ds
ZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9u
ID4gb3B0aW9uc187Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCogc291cmNl
X2NvbnRleHRfOwotICBpbnQgc3ludGF4XzsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsK
LSAgZnJpZW5kIHZvaWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNz
aWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnR5cGVfMmVwcm90bygpOwotICBmcmllbmQgdm9p
ZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8o
KTsKLQotICB2b2lkIEluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBzdGF0aWMgVHlwZSogZGVm
YXVsdF9pbnN0YW5jZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9F
WFBPUlQgRmllbGQgOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJs
aWM6Ci0gIEZpZWxkKCk7Ci0gIHZpcnR1YWwgfkZpZWxkKCk7Ci0KLSAgRmllbGQoY29uc3QgRmll
bGQmIGZyb20pOwotCi0gIGlubGluZSBGaWVsZCYgb3BlcmF0b3I9KGNvbnN0IEZpZWxkJiBmcm9t
KSB7Ci0gICAgQ29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgc3Rh
dGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwot
ICBzdGF0aWMgY29uc3QgRmllbGQmIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2b2lkIFN3YXAo
RmllbGQqIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlubGluZSBGaWVsZCogTmV3KCkg
Y29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgRmllbGQqIE5ldyg6Omdvb2dsZTo6cHJv
dG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBG
aWVsZCYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IEZpZWxkJiBmcm9tKTsKLSAgdm9p
ZCBDbGVhcigpOwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNp
emUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQg
U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6
Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVm
Ojp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJl
dHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwot
ICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25z
dDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoRmllbGQqIG90aGVyKTsKLSAgcHJpdmF0ZToKLSAgaW5s
aW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3Qg
ewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5l
IHZvaWQqIE1heWJlQXJlbmFQdHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRh
ZGF0YV8ucmF3X2FyZW5hX3B0cigpOwotICB9Ci0gIHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1ldGFkYXRhIEdldE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICB0eXBlZGVmIEZpZWxkX0tpbmQgS2luZDsKLSAgc3RhdGljIGNvbnN0IEtpbmQgVFlQRV9VTktO
T1dOID0KLSAgICBGaWVsZF9LaW5kX1RZUEVfVU5LTk9XTjsKLSAgc3RhdGljIGNvbnN0IEtpbmQg
VFlQRV9ET1VCTEUgPQotICAgIEZpZWxkX0tpbmRfVFlQRV9ET1VCTEU7Ci0gIHN0YXRpYyBjb25z
dCBLaW5kIFRZUEVfRkxPQVQgPQotICAgIEZpZWxkX0tpbmRfVFlQRV9GTE9BVDsKLSAgc3RhdGlj
IGNvbnN0IEtpbmQgVFlQRV9JTlQ2NCA9Ci0gICAgRmllbGRfS2luZF9UWVBFX0lOVDY0OwotICBz
dGF0aWMgY29uc3QgS2luZCBUWVBFX1VJTlQ2NCA9Ci0gICAgRmllbGRfS2luZF9UWVBFX1VJTlQ2
NDsKLSAgc3RhdGljIGNvbnN0IEtpbmQgVFlQRV9JTlQzMiA9Ci0gICAgRmllbGRfS2luZF9UWVBF
X0lOVDMyOwotICBzdGF0aWMgY29uc3QgS2luZCBUWVBFX0ZJWEVENjQgPQotICAgIEZpZWxkX0tp
bmRfVFlQRV9GSVhFRDY0OwotICBzdGF0aWMgY29uc3QgS2luZCBUWVBFX0ZJWEVEMzIgPQotICAg
IEZpZWxkX0tpbmRfVFlQRV9GSVhFRDMyOwotICBzdGF0aWMgY29uc3QgS2luZCBUWVBFX0JPT0wg
PQotICAgIEZpZWxkX0tpbmRfVFlQRV9CT09MOwotICBzdGF0aWMgY29uc3QgS2luZCBUWVBFX1NU
UklORyA9Ci0gICAgRmllbGRfS2luZF9UWVBFX1NUUklORzsKLSAgc3RhdGljIGNvbnN0IEtpbmQg
VFlQRV9HUk9VUCA9Ci0gICAgRmllbGRfS2luZF9UWVBFX0dST1VQOwotICBzdGF0aWMgY29uc3Qg
S2luZCBUWVBFX01FU1NBR0UgPQotICAgIEZpZWxkX0tpbmRfVFlQRV9NRVNTQUdFOwotICBzdGF0
aWMgY29uc3QgS2luZCBUWVBFX0JZVEVTID0KLSAgICBGaWVsZF9LaW5kX1RZUEVfQllURVM7Ci0g
IHN0YXRpYyBjb25zdCBLaW5kIFRZUEVfVUlOVDMyID0KLSAgICBGaWVsZF9LaW5kX1RZUEVfVUlO
VDMyOwotICBzdGF0aWMgY29uc3QgS2luZCBUWVBFX0VOVU0gPQotICAgIEZpZWxkX0tpbmRfVFlQ
RV9FTlVNOwotICBzdGF0aWMgY29uc3QgS2luZCBUWVBFX1NGSVhFRDMyID0KLSAgICBGaWVsZF9L
aW5kX1RZUEVfU0ZJWEVEMzI7Ci0gIHN0YXRpYyBjb25zdCBLaW5kIFRZUEVfU0ZJWEVENjQgPQot
ICAgIEZpZWxkX0tpbmRfVFlQRV9TRklYRUQ2NDsKLSAgc3RhdGljIGNvbnN0IEtpbmQgVFlQRV9T
SU5UMzIgPQotICAgIEZpZWxkX0tpbmRfVFlQRV9TSU5UMzI7Ci0gIHN0YXRpYyBjb25zdCBLaW5k
IFRZUEVfU0lOVDY0ID0KLSAgICBGaWVsZF9LaW5kX1RZUEVfU0lOVDY0OwotICBzdGF0aWMgaW5s
aW5lIGJvb2wgS2luZF9Jc1ZhbGlkKGludCB2YWx1ZSkgewotICAgIHJldHVybiBGaWVsZF9LaW5k
X0lzVmFsaWQodmFsdWUpOwotICB9Ci0gIHN0YXRpYyBjb25zdCBLaW5kIEtpbmRfTUlOID0KLSAg
ICBGaWVsZF9LaW5kX0tpbmRfTUlOOwotICBzdGF0aWMgY29uc3QgS2luZCBLaW5kX01BWCA9Ci0g
ICAgRmllbGRfS2luZF9LaW5kX01BWDsKLSAgc3RhdGljIGNvbnN0IGludCBLaW5kX0FSUkFZU0la
RSA9Ci0gICAgRmllbGRfS2luZF9LaW5kX0FSUkFZU0laRTsKLSAgc3RhdGljIGlubGluZSBjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1EZXNjcmlwdG9yKgotICBLaW5kX2Rlc2NyaXB0b3Io
KSB7Ci0gICAgcmV0dXJuIEZpZWxkX0tpbmRfZGVzY3JpcHRvcigpOwotICB9Ci0gIHN0YXRpYyBp
bmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgS2luZF9OYW1lKEtpbmQgdmFsdWUpIHsKLSAgICBy
ZXR1cm4gRmllbGRfS2luZF9OYW1lKHZhbHVlKTsKLSAgfQotICBzdGF0aWMgaW5saW5lIGJvb2wg
S2luZF9QYXJzZShjb25zdCA6OnN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgS2luZCogdmFsdWUp
IHsKLSAgICByZXR1cm4gRmllbGRfS2luZF9QYXJzZShuYW1lLCB2YWx1ZSk7Ci0gIH0KLQotICB0
eXBlZGVmIEZpZWxkX0NhcmRpbmFsaXR5IENhcmRpbmFsaXR5OwotICBzdGF0aWMgY29uc3QgQ2Fy
ZGluYWxpdHkgQ0FSRElOQUxJVFlfVU5LTk9XTiA9Ci0gICAgRmllbGRfQ2FyZGluYWxpdHlfQ0FS
RElOQUxJVFlfVU5LTk9XTjsKLSAgc3RhdGljIGNvbnN0IENhcmRpbmFsaXR5IENBUkRJTkFMSVRZ
X09QVElPTkFMID0KLSAgICBGaWVsZF9DYXJkaW5hbGl0eV9DQVJESU5BTElUWV9PUFRJT05BTDsK
LSAgc3RhdGljIGNvbnN0IENhcmRpbmFsaXR5IENBUkRJTkFMSVRZX1JFUVVJUkVEID0KLSAgICBG
aWVsZF9DYXJkaW5hbGl0eV9DQVJESU5BTElUWV9SRVFVSVJFRDsKLSAgc3RhdGljIGNvbnN0IENh
cmRpbmFsaXR5IENBUkRJTkFMSVRZX1JFUEVBVEVEID0KLSAgICBGaWVsZF9DYXJkaW5hbGl0eV9D
QVJESU5BTElUWV9SRVBFQVRFRDsKLSAgc3RhdGljIGlubGluZSBib29sIENhcmRpbmFsaXR5X0lz
VmFsaWQoaW50IHZhbHVlKSB7Ci0gICAgcmV0dXJuIEZpZWxkX0NhcmRpbmFsaXR5X0lzVmFsaWQo
dmFsdWUpOwotICB9Ci0gIHN0YXRpYyBjb25zdCBDYXJkaW5hbGl0eSBDYXJkaW5hbGl0eV9NSU4g
PQotICAgIEZpZWxkX0NhcmRpbmFsaXR5X0NhcmRpbmFsaXR5X01JTjsKLSAgc3RhdGljIGNvbnN0
IENhcmRpbmFsaXR5IENhcmRpbmFsaXR5X01BWCA9Ci0gICAgRmllbGRfQ2FyZGluYWxpdHlfQ2Fy
ZGluYWxpdHlfTUFYOwotICBzdGF0aWMgY29uc3QgaW50IENhcmRpbmFsaXR5X0FSUkFZU0laRSA9
Ci0gICAgRmllbGRfQ2FyZGluYWxpdHlfQ2FyZGluYWxpdHlfQVJSQVlTSVpFOwotICBzdGF0aWMg
aW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bURlc2NyaXB0b3IqCi0gIENhcmRp
bmFsaXR5X2Rlc2NyaXB0b3IoKSB7Ci0gICAgcmV0dXJuIEZpZWxkX0NhcmRpbmFsaXR5X2Rlc2Ny
aXB0b3IoKTsKLSAgfQotICBzdGF0aWMgaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIENhcmRp
bmFsaXR5X05hbWUoQ2FyZGluYWxpdHkgdmFsdWUpIHsKLSAgICByZXR1cm4gRmllbGRfQ2FyZGlu
YWxpdHlfTmFtZSh2YWx1ZSk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSBib29sIENhcmRpbmFsaXR5
X1BhcnNlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICBDYXJkaW5hbGl0eSogdmFs
dWUpIHsKLSAgICByZXR1cm4gRmllbGRfQ2FyZGluYWxpdHlfUGFyc2UobmFtZSwgdmFsdWUpOwot
ICB9Ci0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkZp
ZWxkLktpbmQga2luZCA9IDE7Ci0gIHZvaWQgY2xlYXJfa2luZCgpOwotICBzdGF0aWMgY29uc3Qg
aW50IGtLaW5kRmllbGROdW1iZXIgPSAxOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tp
bmQga2luZCgpIGNvbnN0OwotICB2b2lkIHNldF9raW5kKDo6Z29vZ2xlOjpwcm90b2J1Zjo6Rmll
bGRfS2luZCB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5D
YXJkaW5hbGl0eSBjYXJkaW5hbGl0eSA9IDI7Ci0gIHZvaWQgY2xlYXJfY2FyZGluYWxpdHkoKTsK
LSAgc3RhdGljIGNvbnN0IGludCBrQ2FyZGluYWxpdHlGaWVsZE51bWJlciA9IDI7Ci0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6RmllbGRfQ2FyZGluYWxpdHkgY2FyZGluYWxpdHkoKSBjb25zdDsKLSAg
dm9pZCBzZXRfY2FyZGluYWxpdHkoOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9DYXJkaW5hbGl0
eSB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwgaW50MzIgbnVtYmVyID0gMzsKLSAgdm9pZCBjbGVh
cl9udW1iZXIoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrTnVtYmVyRmllbGROdW1iZXIgPSAzOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIG51bWJlcigpIGNvbnN0OwotICB2b2lkIHNldF9u
dW1iZXIoOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiB2YWx1ZSk7Ci0KLSAgLy8gb3B0aW9uYWwg
c3RyaW5nIG5hbWUgPSA0OwotICB2b2lkIGNsZWFyX25hbWUoKTsKLSAgc3RhdGljIGNvbnN0IGlu
dCBrTmFtZUZpZWxkTnVtYmVyID0gNDsKLSAgY29uc3QgOjpzdGQ6OnN0cmluZyYgbmFtZSgpIGNv
bnN0OwotICB2b2lkIHNldF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9p
ZCBzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgY2hh
ciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0YWJsZV9uYW1lKCk7
Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfbmFtZSgpOwotICB2b2lkIHNldF9hbGxvY2F0ZWRf
bmFtZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKTsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcgdHlwZV91
cmwgPSA2OwotICB2b2lkIGNsZWFyX3R5cGVfdXJsKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1R5
cGVVcmxGaWVsZE51bWJlciA9IDY7Ci0gIGNvbnN0IDo6c3RkOjpzdHJpbmcmIHR5cGVfdXJsKCkg
Y29uc3Q7Ci0gIHZvaWQgc2V0X3R5cGVfdXJsKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsK
LSAgdm9pZCBzZXRfdHlwZV91cmwoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNldF90eXBl
X3VybChjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBt
dXRhYmxlX3R5cGVfdXJsKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfdHlwZV91cmwoKTsK
LSAgdm9pZCBzZXRfYWxsb2NhdGVkX3R5cGVfdXJsKDo6c3RkOjpzdHJpbmcqIHR5cGVfdXJsKTsK
LQotICAvLyBvcHRpb25hbCBpbnQzMiBvbmVvZl9pbmRleCA9IDc7Ci0gIHZvaWQgY2xlYXJfb25l
b2ZfaW5kZXgoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrT25lb2ZJbmRleEZpZWxkTnVtYmVyID0g
NzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBvbmVvZl9pbmRleCgpIGNvbnN0OwotICB2
b2lkIHNldF9vbmVvZl9pbmRleCg6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKTsKLQot
ICAvLyBvcHRpb25hbCBib29sIHBhY2tlZCA9IDg7Ci0gIHZvaWQgY2xlYXJfcGFja2VkKCk7Ci0g
IHN0YXRpYyBjb25zdCBpbnQga1BhY2tlZEZpZWxkTnVtYmVyID0gODsKLSAgYm9vbCBwYWNrZWQo
KSBjb25zdDsKLSAgdm9pZCBzZXRfcGFja2VkKGJvb2wgdmFsdWUpOwotCi0gIC8vIHJlcGVhdGVk
IC5nb29nbGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSA5OwotICBpbnQgb3B0aW9uc19zaXpl
KCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfb3B0aW9ucygpOwotICBzdGF0aWMgY29uc3QgaW50IGtP
cHRpb25zRmllbGROdW1iZXIgPSA5OwotICBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlv
biYgb3B0aW9ucyhpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlv
biogbXV0YWJsZV9vcHRpb25zKGludCBpbmRleCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0
aW9uKiBhZGRfb3B0aW9ucygpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmll
bGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4qCi0gICAgICBtdXRhYmxlX29wdGlvbnMo
KTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok9wdGlvbiA+JgotICAgICAgb3B0aW9ucygpIGNvbnN0OwotCi0gIC8vIG9w
dGlvbmFsIHN0cmluZyBqc29uX25hbWUgPSAxMDsKLSAgdm9pZCBjbGVhcl9qc29uX25hbWUoKTsK
LSAgc3RhdGljIGNvbnN0IGludCBrSnNvbk5hbWVGaWVsZE51bWJlciA9IDEwOwotICBjb25zdCA6
OnN0ZDo6c3RyaW5nJiBqc29uX25hbWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfanNvbl9uYW1lKGNv
bnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBzZXRfanNvbl9uYW1lKGNvbnN0IGNo
YXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfanNvbl9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXpl
X3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIG11dGFibGVfanNvbl9uYW1lKCk7Ci0gIDo6c3Rk
OjpzdHJpbmcqIHJlbGVhc2VfanNvbl9uYW1lKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF9qc29u
X25hbWUoOjpzdGQ6OnN0cmluZyoganNvbl9uYW1lKTsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcg
ZGVmYXVsdF92YWx1ZSA9IDExOwotICB2b2lkIGNsZWFyX2RlZmF1bHRfdmFsdWUoKTsKLSAgc3Rh
dGljIGNvbnN0IGludCBrRGVmYXVsdFZhbHVlRmllbGROdW1iZXIgPSAxMTsKLSAgY29uc3QgOjpz
dGQ6OnN0cmluZyYgZGVmYXVsdF92YWx1ZSgpIGNvbnN0OwotICB2b2lkIHNldF9kZWZhdWx0X3Zh
bHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKTsKLSAgdm9pZCBzZXRfZGVmYXVsdF92YWx1
ZShjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X2RlZmF1bHRfdmFsdWUoY29uc3QgY2hh
ciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0YWJsZV9kZWZhdWx0
X3ZhbHVlKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfZGVmYXVsdF92YWx1ZSgpOwotICB2
b2lkIHNldF9hbGxvY2F0ZWRfZGVmYXVsdF92YWx1ZSg6OnN0ZDo6c3RyaW5nKiBkZWZhdWx0X3Zh
bHVlKTsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xl
LnByb3RvYnVmLkZpZWxkKQotIHByaXZhdGU6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICBi
b29sIF9pc19kZWZhdWx0X2luc3RhbmNlXzsKLSAgaW50IGtpbmRfOwotICBpbnQgY2FyZGluYWxp
dHlfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpBcmVuYVN0cmluZ1B0ciBuYW1l
XzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQzMiBudW1iZXJfOwotICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludDMyIG9uZW9mX2luZGV4XzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6QXJlbmFTdHJpbmdQdHIgdHlwZV91cmxfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4gb3B0aW9uc187Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIGpzb25fbmFtZV87Ci0g
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIGRlZmF1bHRfdmFs
dWVfOwotICBib29sIHBhY2tlZF87Ci0gIG11dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIGZy
aWVuZCB2b2lkIExJQlBST1RPQlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnBy
b3RvYnVmXzJmdHlwZV8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRl
c2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJv
dG9idWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmdHlwZV8yZXByb3RvKCk7Ci0K
LSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIEZpZWxkKiBkZWZhdWx0
X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9S
VCBFbnVtIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgot
ICBFbnVtKCk7Ci0gIHZpcnR1YWwgfkVudW0oKTsKLQotICBFbnVtKGNvbnN0IEVudW0mIGZyb20p
OwotCi0gIGlubGluZSBFbnVtJiBvcGVyYXRvcj0oY29uc3QgRW51bSYgZnJvbSkgewotICAgIENv
cHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3RhdGljIGNv
bnN0IEVudW0mIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2b2lkIFN3YXAoRW51bSogb3RoZXIp
OwotCi0gIC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgaW5saW5lIEVudW0qIE5ldygpIGNvbnN0IHsgcmV0dXJu
IE5ldyhOVUxMKTsgfQotCi0gIEVudW0qIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBh
cmVuYSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBFbnVtJiBmcm9tKTsKLSAg
dm9pZCBNZXJnZUZyb20oY29uc3QgRW51bSYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9v
bCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJv
b2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVm
Ojppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNo
ZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFt
KiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVX
aXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkg
Y29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXpl
XzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9y
KCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJu
YWxTd2FwKEVudW0qIG90aGVyKTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50
ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQ
dHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0
cigpOwotICB9Ci0gIHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdl
dE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBhY2Nlc3NvcnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IC8vIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKLSAgdm9pZCBjbGVhcl9uYW1lKCk7Ci0gIHN0
YXRpYyBjb25zdCBpbnQga05hbWVGaWVsZE51bWJlciA9IDE7Ci0gIGNvbnN0IDo6c3RkOjpzdHJp
bmcmIG5hbWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5nJiB2
YWx1ZSk7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNldF9u
YW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSk7Ci0gIDo6c3RkOjpzdHJpbmcqIG11
dGFibGVfbmFtZSgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX25hbWUoKTsKLSAgdm9pZCBz
ZXRfYWxsb2NhdGVkX25hbWUoOjpzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgLy8gcmVwZWF0ZWQg
Lmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUgZW51bXZhbHVlID0gMjsKLSAgaW50IGVudW12YWx1
ZV9zaXplKCkgY29uc3Q7Ci0gIHZvaWQgY2xlYXJfZW51bXZhbHVlKCk7Ci0gIHN0YXRpYyBjb25z
dCBpbnQga0VudW12YWx1ZUZpZWxkTnVtYmVyID0gMjsKLSAgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpFbnVtVmFsdWUmIGVudW12YWx1ZShpbnQgaW5kZXgpIGNvbnN0OwotICA6Omdvb2dsZTo6
cHJvdG9idWY6OkVudW1WYWx1ZSogbXV0YWJsZV9lbnVtdmFsdWUoaW50IGluZGV4KTsKLSAgOjpn
b29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWUqIGFkZF9lbnVtdmFsdWUoKTsKLSAgOjpnb29nbGU6
OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1
ZSA+KgotICAgICAgbXV0YWJsZV9lbnVtdmFsdWUoKTsKLSAgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZSA+Jgot
ICAgICAgZW51bXZhbHVlKCkgY29uc3Q7Ci0KLSAgLy8gcmVwZWF0ZWQgLmdvb2dsZS5wcm90b2J1
Zi5PcHRpb24gb3B0aW9ucyA9IDM7Ci0gIGludCBvcHRpb25zX3NpemUoKSBjb25zdDsKLSAgdm9p
ZCBjbGVhcl9vcHRpb25zKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga09wdGlvbnNGaWVsZE51bWJl
ciA9IDM7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uJiBvcHRpb25zKGludCBp
bmRleCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uKiBtdXRhYmxlX29wdGlv
bnMoaW50IGluZGV4KTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24qIGFkZF9vcHRpb25z
KCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnBy
b3RvYnVmOjpPcHRpb24gPioKLSAgICAgIG11dGFibGVfb3B0aW9ucygpOwotICBjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0
aW9uID4mCi0gICAgICBvcHRpb25zKCkgY29uc3Q7Ci0KLSAgLy8gb3B0aW9uYWwgLmdvb2dsZS5w
cm90b2J1Zi5Tb3VyY2VDb250ZXh0IHNvdXJjZV9jb250ZXh0ID0gNDsKLSAgYm9vbCBoYXNfc291
cmNlX2NvbnRleHQoKSBjb25zdDsKLSAgdm9pZCBjbGVhcl9zb3VyY2VfY29udGV4dCgpOwotICBz
dGF0aWMgY29uc3QgaW50IGtTb3VyY2VDb250ZXh0RmllbGROdW1iZXIgPSA0OwotICBjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvbnRleHQmIHNvdXJjZV9jb250ZXh0KCkgY29uc3Q7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCogbXV0YWJsZV9zb3VyY2VfY29u
dGV4dCgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvbnRleHQqIHJlbGVhc2Vfc291
cmNlX2NvbnRleHQoKTsKLSAgdm9pZCBzZXRfYWxsb2NhdGVkX3NvdXJjZV9jb250ZXh0KDo6Z29v
Z2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCogc291cmNlX2NvbnRleHQpOwotCi0gIC8vIG9w
dGlvbmFsIC5nb29nbGUucHJvdG9idWYuU3ludGF4IHN5bnRheCA9IDU7Ci0gIHZvaWQgY2xlYXJf
c3ludGF4KCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1N5bnRheEZpZWxkTnVtYmVyID0gNTsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpTeW50YXggc3ludGF4KCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3N5
bnRheCg6Omdvb2dsZTo6cHJvdG9idWY6OlN5bnRheCB2YWx1ZSk7Ci0KLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5wcm90b2J1Zi5FbnVtKQotIHByaXZh
dGU6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdp
dGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICBib29sIF9pc19kZWZhdWx0X2luc3RhbmNl
XzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgbmFtZV87
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3Rv
YnVmOjpFbnVtVmFsdWUgPiBlbnVtdmFsdWVfOwotICA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4gb3B0aW9uc187Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dCogc291cmNlX2NvbnRleHRfOwotICBpbnQg
c3ludGF4XzsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgZnJpZW5kIHZvaWQgTElC
UFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBl
XzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZw
cm90b2J1Zl8yZnR5cGVfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93
bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8oKTsKLQotICB2b2lkIEluaXRB
c0RlZmF1bHRJbnN0YW5jZSgpOwotICBzdGF0aWMgRW51bSogZGVmYXVsdF9pbnN0YW5jZV87Ci19
OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgRW51bVZhbHVlIDog
cHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVibGljOgotICBFbnVtVmFs
dWUoKTsKLSAgdmlydHVhbCB+RW51bVZhbHVlKCk7Ci0KLSAgRW51bVZhbHVlKGNvbnN0IEVudW1W
YWx1ZSYgZnJvbSk7Ci0KLSAgaW5saW5lIEVudW1WYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IEVudW1W
YWx1ZSYgZnJvbSkgewotICAgIENvcHlGcm9tKGZyb20pOwotICAgIHJldHVybiAqdGhpczsKLSAg
fQotCi0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IEVudW1WYWx1ZSYgZGVmYXVsdF9pbnN0YW5jZSgpOwot
Ci0gIHZvaWQgU3dhcChFbnVtVmFsdWUqIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRzIE1lc3Nh
Z2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGlu
bGluZSBFbnVtVmFsdWUqIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIEVu
dW1WYWx1ZSogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAg
dm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwot
ICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20p
OwotICB2b2lkIENvcHlGcm9tKGNvbnN0IEVudW1WYWx1ZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VG
cm9tKGNvbnN0IEVudW1WYWx1ZSYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9vbCBJc0lu
aXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJvb2wgTWVy
Z2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6
Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXpl
cygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRw
dXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkgY29uc3Q7
Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXplXzsgfQot
ICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9yKCk7Ci0g
IHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJuYWxTd2Fw
KEVudW1WYWx1ZSogb3RoZXIpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRl
cm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0
cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRy
KCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0
TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29ycyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAg
Ly8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotICB2b2lkIGNsZWFyX25hbWUoKTsKLSAgc3Rh
dGljIGNvbnN0IGludCBrTmFtZUZpZWxkTnVtYmVyID0gMTsKLSAgY29uc3QgOjpzdGQ6OnN0cmlu
ZyYgbmFtZSgpIGNvbnN0OwotICB2b2lkIHNldF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZh
bHVlKTsKLSAgdm9pZCBzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X25h
bWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6OnN0cmluZyogbXV0
YWJsZV9uYW1lKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfbmFtZSgpOwotICB2b2lkIHNl
dF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKTsKLQotICAvLyBvcHRpb25hbCBp
bnQzMiBudW1iZXIgPSAyOwotICB2b2lkIGNsZWFyX251bWJlcigpOwotICBzdGF0aWMgY29uc3Qg
aW50IGtOdW1iZXJGaWVsZE51bWJlciA9IDI7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIg
bnVtYmVyKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X251bWJlcig6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dDMyIHZhbHVlKTsKLQotICAvLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBvcHRp
b25zID0gMzsKLSAgaW50IG9wdGlvbnNfc2l6ZSgpIGNvbnN0OwotICB2b2lkIGNsZWFyX29wdGlv
bnMoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrT3B0aW9uc0ZpZWxkTnVtYmVyID0gMzsKLSAgY29u
c3QgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24mIG9wdGlvbnMoaW50IGluZGV4KSBjb25zdDsK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24qIG11dGFibGVfb3B0aW9ucyhpbnQgaW5kZXgp
OwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiogYWRkX29wdGlvbnMoKTsKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlv
biA+KgotICAgICAgbXV0YWJsZV9vcHRpb25zKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24gPiYKLSAgICAg
IG9wdGlvbnMoKSBjb25zdDsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nf
c2NvcGU6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZSkKLSBwcml2YXRlOgotCi0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFs
X21ldGFkYXRhXzsKLSAgYm9vbCBfaXNfZGVmYXVsdF9pbnN0YW5jZV87Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OkFyZW5hU3RyaW5nUHRyIG5hbWVfOwotICA6Omdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4gb3B0
aW9uc187Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgbnVtYmVyXzsKLSAgbXV0YWJsZSBp
bnQgX2NhY2hlZF9zaXplXzsKLSAgZnJpZW5kIHZvaWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3Rv
YnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8oKTsKLSAgZnJpZW5k
IHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZnR5cGVfMmVwcm90
bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9i
dWZfMmZ0eXBlXzJlcHJvdG8oKTsKLQotICB2b2lkIEluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwot
ICBzdGF0aWMgRW51bVZhbHVlKiBkZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBPcHRpb24gOiBwdWJsaWMgOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIE9wdGlvbigpOwotICB2aXJ0dWFsIH5PcHRp
b24oKTsKLQotICBPcHRpb24oY29uc3QgT3B0aW9uJiBmcm9tKTsKLQotICBpbmxpbmUgT3B0aW9u
JiBvcGVyYXRvcj0oY29uc3QgT3B0aW9uJiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJvbSk7Ci0g
ICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgT3B0aW9uJiBkZWZh
dWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBTd2FwKE9wdGlvbiogb3RoZXIpOwotCi0gIC8vIGlt
cGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgaW5saW5lIE9wdGlvbiogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwp
OyB9Ci0KLSAgT3B0aW9uKiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNv
bnN0OwotICB2b2lkIENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYg
ZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2Fn
ZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgT3B0aW9uJiBmcm9tKTsKLSAgdm9pZCBN
ZXJnZUZyb20oY29uc3QgT3B0aW9uJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigpOwotICBib29sIElz
SW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBN
ZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlv
OjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNp
emVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91
dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhD
YWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0KSBjb25z
dDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2FjaGVkX3NpemVfOyB9
Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNoYXJlZER0b3IoKTsK
LSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3
YXAoT3B0aW9uKiBvdGhlcik7Ci0gIHByaXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9i
dWY6OkFyZW5hKiBHZXRBcmVuYU5vVmlydHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVy
bmFsX21ldGFkYXRhXy5hcmVuYSgpOwotICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRy
KCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIo
KTsKLSAgfQotICBwdWJsaWM6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRN
ZXRhZGF0YSgpIGNvbnN0OwotCi0gIC8vIG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAv
LyBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7Ci0gIHZvaWQgY2xlYXJfbmFtZSgpOwotICBzdGF0
aWMgY29uc3QgaW50IGtOYW1lRmllbGROdW1iZXIgPSAxOwotICBjb25zdCA6OnN0ZDo6c3RyaW5n
JiBuYW1lKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFs
dWUpOwotICB2b2lkIHNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBzZXRfbmFt
ZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5nKiBtdXRh
YmxlX25hbWUoKTsKLSAgOjpzdGQ6OnN0cmluZyogcmVsZWFzZV9uYW1lKCk7Ci0gIHZvaWQgc2V0
X2FsbG9jYXRlZF9uYW1lKDo6c3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIC8vIG9wdGlvbmFsIC5n
b29nbGUucHJvdG9idWYuQW55IHZhbHVlID0gMjsKLSAgYm9vbCBoYXNfdmFsdWUoKSBjb25zdDsK
LSAgdm9pZCBjbGVhcl92YWx1ZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtWYWx1ZUZpZWxkTnVt
YmVyID0gMjsKLSAgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpBbnkmIHZhbHVlKCkgY29uc3Q7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55KiBtdXRhYmxlX3ZhbHVlKCk7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6QW55KiByZWxlYXNlX3ZhbHVlKCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF92
YWx1ZSg6Omdvb2dsZTo6cHJvdG9idWY6OkFueSogdmFsdWUpOwotCi0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuT3B0aW9uKQotIHByaXZh
dGU6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdp
dGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICBib29sIF9pc19kZWZhdWx0X2luc3RhbmNl
XzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgbmFtZV87
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55KiB2YWx1ZV87Ci0gIG11dGFibGUgaW50IF9jYWNo
ZWRfc2l6ZV87Ci0gIGZyaWVuZCB2b2lkIExJQlBST1RPQlVGX0VYUE9SVCBwcm90b2J1Zl9BZGRE
ZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmdHlwZV8yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHBy
b3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ0eXBlXzJlcHJvdG8oKTsKLSAg
ZnJpZW5kIHZvaWQgcHJvdG9idWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmdHlw
ZV8yZXByb3RvKCk7Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGlj
IE9wdGlvbiogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLS8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLQotI2lmICFQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIFR5cGUK
LQotLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotaW5saW5lIHZvaWQgVHlwZTo6Y2xlYXJf
bmFtZSgpIHsKLSAgbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIGNv
bnN0IDo6c3RkOjpzdHJpbmcmIFR5cGU6Om5hbWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlR5cGUubmFtZSkKLSAgcmV0
dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIFR5cGU6OnNldF9uYW1l
KGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAotICBuYW1lXy5TZXROb0FyZW5hKCY6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQo
KSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2ds
ZS5wcm90b2J1Zi5UeXBlLm5hbWUpCi19Ci1pbmxpbmUgdm9pZCBUeXBlOjpzZXRfbmFtZShjb25z
dCBjaGFyKiB2YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJp
bmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFy
Omdvb2dsZS5wcm90b2J1Zi5UeXBlLm5hbWUpCi19Ci1pbmxpbmUgdm9pZCBUeXBlOjpzZXRfbmFt
ZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgCi0gIG5hbWVfLlNldE5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
Pih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5UeXBlLm5hbWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0
cmluZyogVHlwZTo6bXV0YWJsZV9uYW1lKCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLlR5cGUubmFtZSkKLSAgcmV0dXJu
IG5hbWVfLk11dGFibGVOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogVHlw
ZTo6cmVsZWFzZV9uYW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
cmVsZWFzZTpnb29nbGUucHJvdG9idWYuVHlwZS5uYW1lKQotICAKLSAgcmV0dXJuIG5hbWVfLlJl
bGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBUeXBlOjpzZXRfYWxsb2NhdGVkX25h
bWUoOjpzdGQ6OnN0cmluZyogbmFtZSkgewotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgCi0g
IH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAgbmFtZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIG5h
bWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpn
b29nbGUucHJvdG9idWYuVHlwZS5uYW1lKQotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3Rv
YnVmLkZpZWxkIGZpZWxkcyA9IDI7Ci1pbmxpbmUgaW50IFR5cGU6OmZpZWxkc19zaXplKCkgY29u
c3QgewotICByZXR1cm4gZmllbGRzXy5zaXplKCk7Ci19Ci1pbmxpbmUgdm9pZCBUeXBlOjpjbGVh
cl9maWVsZHMoKSB7Ci0gIGZpZWxkc18uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6OkZpZWxkJiBUeXBlOjpmaWVsZHMoaW50IGluZGV4KSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlR5cGUu
ZmllbGRzKQotICByZXR1cm4gZmllbGRzXy5HZXQoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6RmllbGQqIFR5cGU6Om11dGFibGVfZmllbGRzKGludCBpbmRleCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYu
VHlwZS5maWVsZHMpCi0gIHJldHVybiBmaWVsZHNfLk11dGFibGUoaW5kZXgpOwotfQotaW5saW5l
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIFR5cGU6OmFkZF9maWVsZHMoKSB7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLlR5cGUuZmll
bGRzKQotICByZXR1cm4gZmllbGRzXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9i
dWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGQgPioKLVR5cGU6
Om11dGFibGVfZmllbGRzKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
bXV0YWJsZV9saXN0Omdvb2dsZS5wcm90b2J1Zi5UeXBlLmZpZWxkcykKLSAgcmV0dXJuICZmaWVs
ZHNfOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVs
ZDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZCA+JgotVHlwZTo6ZmllbGRzKCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYu
VHlwZS5maWVsZHMpCi0gIHJldHVybiBmaWVsZHNfOwotfQotCi0vLyByZXBlYXRlZCBzdHJpbmcg
b25lb2ZzID0gMzsKLWlubGluZSBpbnQgVHlwZTo6b25lb2ZzX3NpemUoKSBjb25zdCB7Ci0gIHJl
dHVybiBvbmVvZnNfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIFR5cGU6OmNsZWFyX29uZW9mcygp
IHsKLSAgb25lb2ZzXy5DbGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIFR5
cGU6Om9uZW9mcyhpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVHlwZS5vbmVvZnMpCi0gIHJldHVybiBvbmVv
ZnNfLkdldChpbmRleCk7Ci19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogVHlwZTo6bXV0YWJsZV9v
bmVvZnMoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9t
dXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5UeXBlLm9uZW9mcykKLSAgcmV0dXJuIG9uZW9mc18uTXV0
YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgdm9pZCBUeXBlOjpzZXRfb25lb2ZzKGludCBpbmRleCwg
Y29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVHlwZS5vbmVvZnMpCi0gIG9uZW9mc18uTXV0
YWJsZShpbmRleCktPmFzc2lnbih2YWx1ZSk7Ci19Ci1pbmxpbmUgdm9pZCBUeXBlOjpzZXRfb25l
b2ZzKGludCBpbmRleCwgY29uc3QgY2hhciogdmFsdWUpIHsKLSAgb25lb2ZzXy5NdXRhYmxlKGlu
ZGV4KS0+YXNzaWduKHZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5UeXBlLm9uZW9mcykKLX0KLWlubGluZSB2b2lkIFR5
cGU6OnNldF9vbmVvZnMoaW50IGluZGV4LCBjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUp
IHsKLSAgb25lb2ZzXy5NdXRhYmxlKGluZGV4KS0+YXNzaWduKAotICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuVHlwZS5vbmVvZnMpCi19Ci1p
bmxpbmUgOjpzdGQ6OnN0cmluZyogVHlwZTo6YWRkX29uZW9mcygpIHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5UeXBlLm9u
ZW9mcykKLSAgcmV0dXJuIG9uZW9mc18uQWRkKCk7Ci19Ci1pbmxpbmUgdm9pZCBUeXBlOjphZGRf
b25lb2ZzKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIG9uZW9mc18uQWRkKCktPmFz
c2lnbih2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9hZGQ6Z29v
Z2xlLnByb3RvYnVmLlR5cGUub25lb2ZzKQotfQotaW5saW5lIHZvaWQgVHlwZTo6YWRkX29uZW9m
cyhjb25zdCBjaGFyKiB2YWx1ZSkgewotICBvbmVvZnNfLkFkZCgpLT5hc3NpZ24odmFsdWUpOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfYWRkX2NoYXI6Z29vZ2xlLnByb3Rv
YnVmLlR5cGUub25lb2ZzKQotfQotaW5saW5lIHZvaWQgVHlwZTo6YWRkX29uZW9mcyhjb25zdCBj
aGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsKLSAgb25lb2ZzXy5BZGQoKS0+YXNzaWduKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9hZGRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuVHlwZS5vbmVv
ZnMpCi19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxk
PCA6OnN0ZDo6c3RyaW5nPiYKLVR5cGU6Om9uZW9mcygpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGZpZWxkX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLlR5cGUub25lb2ZzKQot
ICByZXR1cm4gb25lb2ZzXzsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6c3RkOjpzdHJpbmc+KgotVHlwZTo6bXV0YWJsZV9vbmVvZnMoKSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3Rv
YnVmLlR5cGUub25lb2ZzKQotICByZXR1cm4gJm9uZW9mc187Ci19Ci0KLS8vIHJlcGVhdGVkIC5n
b29nbGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSA0OwotaW5saW5lIGludCBUeXBlOjpvcHRp
b25zX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBvcHRpb25zXy5zaXplKCk7Ci19Ci1pbmxpbmUg
dm9pZCBUeXBlOjpjbGVhcl9vcHRpb25zKCkgewotICBvcHRpb25zXy5DbGVhcigpOwotfQotaW5s
aW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uJiBUeXBlOjpvcHRpb25zKGludCBp
bmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdv
b2dsZS5wcm90b2J1Zi5UeXBlLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXy5HZXQoaW5kZXgp
OwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uKiBUeXBlOjptdXRhYmxlX29w
dGlvbnMoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9t
dXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5UeXBlLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXy5N
dXRhYmxlKGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiogVHlw
ZTo6YWRkX29wdGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9h
ZGQ6Z29vZ2xlLnByb3RvYnVmLlR5cGUub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLkFkZCgp
OwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29n
bGU6OnByb3RvYnVmOjpPcHRpb24gPioKLVR5cGU6Om11dGFibGVfb3B0aW9ucygpIHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29nbGUucHJvdG9i
dWYuVHlwZS5vcHRpb25zKQotICByZXR1cm4gJm9wdGlvbnNfOwotfQotaW5saW5lIGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpP
cHRpb24gPiYKLVR5cGU6Om9wdGlvbnMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5UeXBlLm9wdGlvbnMpCi0gIHJldHVy
biBvcHRpb25zXzsKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250
ZXh0IHNvdXJjZV9jb250ZXh0ID0gNTsKLWlubGluZSBib29sIFR5cGU6Omhhc19zb3VyY2VfY29u
dGV4dCgpIGNvbnN0IHsKLSAgcmV0dXJuICFfaXNfZGVmYXVsdF9pbnN0YW5jZV8gJiYgc291cmNl
X2NvbnRleHRfICE9IE5VTEw7Ci19Ci1pbmxpbmUgdm9pZCBUeXBlOjpjbGVhcl9zb3VyY2VfY29u
dGV4dCgpIHsKLSAgaWYgKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gTlVMTCAmJiBzb3VyY2VfY29u
dGV4dF8gIT0gTlVMTCkgZGVsZXRlIHNvdXJjZV9jb250ZXh0XzsKLSAgc291cmNlX2NvbnRleHRf
ID0gTlVMTDsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvbnRl
eHQmIFR5cGU6OnNvdXJjZV9jb250ZXh0KCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5UeXBlLnNvdXJjZV9jb250ZXh0KQot
ICByZXR1cm4gc291cmNlX2NvbnRleHRfICE9IE5VTEwgPyAqc291cmNlX2NvbnRleHRfIDogKmRl
ZmF1bHRfaW5zdGFuY2VfLT5zb3VyY2VfY29udGV4dF87Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnBy
b3RvYnVmOjpTb3VyY2VDb250ZXh0KiBUeXBlOjptdXRhYmxlX3NvdXJjZV9jb250ZXh0KCkgewot
ICAKLSAgaWYgKHNvdXJjZV9jb250ZXh0XyA9PSBOVUxMKSB7Ci0gICAgc291cmNlX2NvbnRleHRf
ID0gbmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dDsKLSAgfQotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuVHlwZS5z
b3VyY2VfY29udGV4dCkKLSAgcmV0dXJuIHNvdXJjZV9jb250ZXh0XzsKLX0KLWlubGluZSA6Omdv
b2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvbnRleHQqIFR5cGU6OnJlbGVhc2Vfc291cmNlX2NvbnRl
eHQoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2ds
ZS5wcm90b2J1Zi5UeXBlLnNvdXJjZV9jb250ZXh0KQotICAKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpTb3VyY2VDb250ZXh0KiB0ZW1wID0gc291cmNlX2NvbnRleHRfOwotICBzb3VyY2VfY29udGV4
dF8gPSBOVUxMOwotICByZXR1cm4gdGVtcDsKLX0KLWlubGluZSB2b2lkIFR5cGU6OnNldF9hbGxv
Y2F0ZWRfc291cmNlX2NvbnRleHQoOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiBz
b3VyY2VfY29udGV4dCkgewotICBkZWxldGUgc291cmNlX2NvbnRleHRfOwotICBzb3VyY2VfY29u
dGV4dF8gPSBzb3VyY2VfY29udGV4dDsKLSAgaWYgKHNvdXJjZV9jb250ZXh0KSB7Ci0gICAgCi0g
IH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlR5cGUuc291cmNlX2NvbnRleHQpCi19Ci0K
LS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU3ludGF4IHN5bnRheCA9IDY7Ci1pbmxpbmUg
dm9pZCBUeXBlOjpjbGVhcl9zeW50YXgoKSB7Ci0gIHN5bnRheF8gPSAwOwotfQotaW5saW5lIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6U3ludGF4IFR5cGU6OnN5bnRheCgpIGNvbnN0IHsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVHlwZS5zeW50
YXgpCi0gIHJldHVybiBzdGF0aWNfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpTeW50YXggPihz
eW50YXhfKTsKLX0KLWlubGluZSB2b2lkIFR5cGU6OnNldF9zeW50YXgoOjpnb29nbGU6OnByb3Rv
YnVmOjpTeW50YXggdmFsdWUpIHsKLSAgCi0gIHN5bnRheF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVHlwZS5zeW50YXgp
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRmllbGQKLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5w
cm90b2J1Zi5GaWVsZC5LaW5kIGtpbmQgPSAxOwotaW5saW5lIHZvaWQgRmllbGQ6OmNsZWFyX2tp
bmQoKSB7Ci0gIGtpbmRfID0gMDsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
X0tpbmQgRmllbGQ6OmtpbmQoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLmtpbmQpCi0gIHJldHVybiBzdGF0aWNf
Y2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kID4oa2luZF8pOwotfQotaW5saW5l
IHZvaWQgRmllbGQ6OnNldF9raW5kKDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZCB2YWx1
ZSkgewotICAKLSAga2luZF8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGQua2luZCkKLX0KLQotLy8gb3B0aW9uYWwg
Lmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5DYXJkaW5hbGl0eSBjYXJkaW5hbGl0eSA9IDI7Ci1pbmxp
bmUgdm9pZCBGaWVsZDo6Y2xlYXJfY2FyZGluYWxpdHkoKSB7Ci0gIGNhcmRpbmFsaXR5XyA9IDA7
Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9DYXJkaW5hbGl0eSBGaWVsZDo6
Y2FyZGluYWxpdHkoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLmNhcmRpbmFsaXR5KQotICByZXR1cm4gc3RhdGlj
X2Nhc3Q8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfQ2FyZGluYWxpdHkgPihjYXJkaW5hbGl0
eV8pOwotfQotaW5saW5lIHZvaWQgRmllbGQ6OnNldF9jYXJkaW5hbGl0eSg6Omdvb2dsZTo6cHJv
dG9idWY6OkZpZWxkX0NhcmRpbmFsaXR5IHZhbHVlKSB7Ci0gIAotICBjYXJkaW5hbGl0eV8gPSB2
YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJv
dG9idWYuRmllbGQuY2FyZGluYWxpdHkpCi19Ci0KLS8vIG9wdGlvbmFsIGludDMyIG51bWJlciA9
IDM7Ci1pbmxpbmUgdm9pZCBGaWVsZDo6Y2xlYXJfbnVtYmVyKCkgewotICBudW1iZXJfID0gMDsK
LX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIEZpZWxkOjpudW1iZXIoKSBjb25z
dCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3Rv
YnVmLkZpZWxkLm51bWJlcikKLSAgcmV0dXJuIG51bWJlcl87Ci19Ci1pbmxpbmUgdm9pZCBGaWVs
ZDo6c2V0X251bWJlcig6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIAotICBu
dW1iZXJfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6
Z29vZ2xlLnByb3RvYnVmLkZpZWxkLm51bWJlcikKLX0KLQotLy8gb3B0aW9uYWwgc3RyaW5nIG5h
bWUgPSA0OwotaW5saW5lIHZvaWQgRmllbGQ6OmNsZWFyX25hbWUoKSB7Ci0gIG5hbWVfLkNsZWFy
VG9FbXB0eU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBGaWVs
ZDo6bmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dl
dDpnb29nbGUucHJvdG9idWYuRmllbGQubmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkOjpzZXRfbmFtZShjb25zdCA6OnN0ZDo6c3RyaW5n
JiB2YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlKTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRmllbGQubmFt
ZSkKLX0KLWlubGluZSB2b2lkIEZpZWxkOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSkgewot
ICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5G
aWVsZC5uYW1lKQotfQotaW5saW5lIHZvaWQgRmllbGQ6OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZh
bHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6
OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkp
OwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xl
LnByb3RvYnVmLkZpZWxkLm5hbWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogRmllbGQ6Om11
dGFibGVfbmFtZSgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9t
dXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5uYW1lKQotICByZXR1cm4gbmFtZV8uTXV0YWJs
ZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBGaWVsZDo6cmVsZWFzZV9u
YW1lKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29n
bGUucHJvdG9idWYuRmllbGQubmFtZSkKLSAgCi0gIHJldHVybiBuYW1lXy5SZWxlYXNlTm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotfQotaW5saW5lIHZvaWQgRmllbGQ6OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6
c3RyaW5nKiBuYW1lKSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsK
LSAgICAKLSAgfQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90
b2J1Zi5GaWVsZC5uYW1lKQotfQotCi0vLyBvcHRpb25hbCBzdHJpbmcgdHlwZV91cmwgPSA2Owot
aW5saW5lIHZvaWQgRmllbGQ6OmNsZWFyX3R5cGVfdXJsKCkgewotICB0eXBlX3VybF8uQ2xlYXJU
b0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZpZWxk
Ojp0eXBlX3VybCgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X2dldDpnb29nbGUucHJvdG9idWYuRmllbGQudHlwZV91cmwpCi0gIHJldHVybiB0eXBlX3VybF8u
R2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgRmllbGQ6OnNldF90eXBlX3VybChjb25z
dCA6OnN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICAKLSAgdHlwZV91cmxfLlNldE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xl
LnByb3RvYnVmLkZpZWxkLnR5cGVfdXJsKQotfQotaW5saW5lIHZvaWQgRmllbGQ6OnNldF90eXBl
X3VybChjb25zdCBjaGFyKiB2YWx1ZSkgewotICAKLSAgdHlwZV91cmxfLlNldE5vQXJlbmEoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRmllbGQudHlwZV91cmwpCi19Ci1pbmxpbmUg
dm9pZCBGaWVsZDo6c2V0X3R5cGVfdXJsKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSkg
ewotICAKLSAgdHlwZV91cmxfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgOjpzdGQ6OnN0cmluZyhy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5wcm90b2J1Zi5GaWVs
ZC50eXBlX3VybCkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBGaWVsZDo6bXV0YWJsZV90eXBl
X3VybCgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxl
Omdvb2dsZS5wcm90b2J1Zi5GaWVsZC50eXBlX3VybCkKLSAgcmV0dXJuIHR5cGVfdXJsXy5NdXRh
YmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpZWxkOjpyZWxlYXNl
X3R5cGVfdXJsKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFz
ZTpnb29nbGUucHJvdG9idWYuRmllbGQudHlwZV91cmwpCi0gIAotICByZXR1cm4gdHlwZV91cmxf
LlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZDo6c2V0X2FsbG9jYXRl
ZF90eXBlX3VybCg6OnN0ZDo6c3RyaW5nKiB0eXBlX3VybCkgewotICBpZiAodHlwZV91cmwgIT0g
TlVMTCkgewotICAgIAotICB9IGVsc2UgewotICAgIAotICB9Ci0gIHR5cGVfdXJsXy5TZXRBbGxv
Y2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgdHlwZV91cmwpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0X2FsbG9jYXRlZDpnb29nbGUucHJvdG9idWYuRmllbGQudHlwZV91cmwpCi19
Ci0KLS8vIG9wdGlvbmFsIGludDMyIG9uZW9mX2luZGV4ID0gNzsKLWlubGluZSB2b2lkIEZpZWxk
OjpjbGVhcl9vbmVvZl9pbmRleCgpIHsKLSAgb25lb2ZfaW5kZXhfID0gMDsKLX0KLWlubGluZSA6
Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIEZpZWxkOjpvbmVvZl9pbmRleCgpIGNvbnN0IHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmll
bGQub25lb2ZfaW5kZXgpCi0gIHJldHVybiBvbmVvZl9pbmRleF87Ci19Ci1pbmxpbmUgdm9pZCBG
aWVsZDo6c2V0X29uZW9mX2luZGV4KDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpIHsK
LSAgCi0gIG9uZW9mX2luZGV4XyA9IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZC5vbmVvZl9pbmRleCkKLX0KLQotLy8g
b3B0aW9uYWwgYm9vbCBwYWNrZWQgPSA4OwotaW5saW5lIHZvaWQgRmllbGQ6OmNsZWFyX3BhY2tl
ZCgpIHsKLSAgcGFja2VkXyA9IGZhbHNlOwotfQotaW5saW5lIGJvb2wgRmllbGQ6OnBhY2tlZCgp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUu
cHJvdG9idWYuRmllbGQucGFja2VkKQotICByZXR1cm4gcGFja2VkXzsKLX0KLWlubGluZSB2b2lk
IEZpZWxkOjpzZXRfcGFja2VkKGJvb2wgdmFsdWUpIHsKLSAgCi0gIHBhY2tlZF8gPSB2YWx1ZTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYu
RmllbGQucGFja2VkKQotfQotCi0vLyByZXBlYXRlZCAuZ29vZ2xlLnByb3RvYnVmLk9wdGlvbiBv
cHRpb25zID0gOTsKLWlubGluZSBpbnQgRmllbGQ6Om9wdGlvbnNfc2l6ZSgpIGNvbnN0IHsKLSAg
cmV0dXJuIG9wdGlvbnNfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIEZpZWxkOjpjbGVhcl9vcHRp
b25zKCkgewotICBvcHRpb25zXy5DbGVhcigpOwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6T3B0aW9uJiBGaWVsZDo6b3B0aW9ucyhpbnQgaW5kZXgpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRmllbGQu
b3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLkdldChpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29n
bGU6OnByb3RvYnVmOjpPcHRpb24qIEZpZWxkOjptdXRhYmxlX29wdGlvbnMoaW50IGluZGV4KSB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90
b2J1Zi5GaWVsZC5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc18uTXV0YWJsZShpbmRleCk7Ci19
Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24qIEZpZWxkOjphZGRfb3B0aW9ucygp
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2FkZDpnb29nbGUucHJvdG9i
dWYuRmllbGQub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLkFkZCgpOwotfQotaW5saW5lIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnByb3RvYnVmOjpP
cHRpb24gPioKLUZpZWxkOjptdXRhYmxlX29wdGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChmaWVsZF9tdXRhYmxlX2xpc3Q6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLm9wdGlv
bnMpCi0gIHJldHVybiAmb3B0aW9uc187Ci19Ci1pbmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiA+JgotRmll
bGQ6Om9wdGlvbnMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZC5vcHRpb25zKQotICByZXR1cm4gb3B0aW9uc187
Ci19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBqc29uX25hbWUgPSAxMDsKLWlubGluZSB2b2lkIEZp
ZWxkOjpjbGVhcl9qc29uX25hbWUoKSB7Ci0gIGpzb25fbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJpbmcmIEZpZWxkOjpqc29uX25hbWUo
KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xl
LnByb3RvYnVmLkZpZWxkLmpzb25fbmFtZSkKLSAgcmV0dXJuIGpzb25fbmFtZV8uR2V0Tm9BcmVu
YSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCkpOwotfQotaW5saW5lIHZvaWQgRmllbGQ6OnNldF9qc29uX25hbWUoY29uc3QgOjpzdGQ6
OnN0cmluZyYgdmFsdWUpIHsKLSAgCi0gIGpzb25fbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVl
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9i
dWYuRmllbGQuanNvbl9uYW1lKQotfQotaW5saW5lIHZvaWQgRmllbGQ6OnNldF9qc29uX25hbWUo
Y29uc3QgY2hhciogdmFsdWUpIHsKLSAgCi0gIGpzb25fbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6
c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxk
X3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5qc29uX25hbWUpCi19Ci1pbmxpbmUgdm9p
ZCBGaWVsZDo6c2V0X2pzb25fbmFtZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsK
LSAgCi0gIGpzb25fbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkZpZWxk
Lmpzb25fbmFtZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBGaWVsZDo6bXV0YWJsZV9qc29u
X25hbWUoKSB7Ci0gIAotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJs
ZTpnb29nbGUucHJvdG9idWYuRmllbGQuanNvbl9uYW1lKQotICByZXR1cm4ganNvbl9uYW1lXy5N
dXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEZpZWxkOjpyZWxl
YXNlX2pzb25fbmFtZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Jl
bGVhc2U6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLmpzb25fbmFtZSkKLSAgCi0gIHJldHVybiBqc29u
X25hbWVfLlJlbGVhc2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZDo6c2V0X2Fs
bG9jYXRlZF9qc29uX25hbWUoOjpzdGQ6OnN0cmluZyoganNvbl9uYW1lKSB7Ci0gIGlmIChqc29u
X25hbWUgIT0gTlVMTCkgewotICAgIAotICB9IGVsc2UgewotICAgIAotICB9Ci0gIGpzb25fbmFt
ZV8uU2V0QWxsb2NhdGVkTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIGpzb25fbmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5q
c29uX25hbWUpCi19Ci0KLS8vIG9wdGlvbmFsIHN0cmluZyBkZWZhdWx0X3ZhbHVlID0gMTE7Ci1p
bmxpbmUgdm9pZCBGaWVsZDo6Y2xlYXJfZGVmYXVsdF92YWx1ZSgpIHsKLSAgZGVmYXVsdF92YWx1
ZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0
RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIGNvbnN0IDo6c3RkOjpzdHJp
bmcmIEZpZWxkOjpkZWZhdWx0X3ZhbHVlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZC5kZWZhdWx0X3ZhbHVlKQot
ICByZXR1cm4gZGVmYXVsdF92YWx1ZV8uR2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQg
RmllbGQ6OnNldF9kZWZhdWx0X3ZhbHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0g
IAotICBkZWZhdWx0X3ZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5GaWVsZC5kZWZhdWx0
X3ZhbHVlKQotfQotaW5saW5lIHZvaWQgRmllbGQ6OnNldF9kZWZhdWx0X3ZhbHVlKGNvbnN0IGNo
YXIqIHZhbHVlKSB7Ci0gIAotICBkZWZhdWx0X3ZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6
OnN0cmluZyh2YWx1ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0
X2NoYXI6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLmRlZmF1bHRfdmFsdWUpCi19Ci1pbmxpbmUgdm9p
ZCBGaWVsZDo6c2V0X2RlZmF1bHRfdmFsdWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBzaXpl
KSB7Ci0gIAotICBkZWZhdWx0X3ZhbHVlXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpz
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9i
dWYuRmllbGQuZGVmYXVsdF92YWx1ZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBGaWVsZDo6
bXV0YWJsZV9kZWZhdWx0X3ZhbHVlKCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX211dGFibGU6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLmRlZmF1bHRfdmFsdWUpCi0g
IHJldHVybiBkZWZhdWx0X3ZhbHVlXy5NdXRhYmxlTm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIDo6
c3RkOjpzdHJpbmcqIEZpZWxkOjpyZWxlYXNlX2RlZmF1bHRfdmFsdWUoKSB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2dsZS5wcm90b2J1Zi5GaWVsZC5k
ZWZhdWx0X3ZhbHVlKQotICAKLSAgcmV0dXJuIGRlZmF1bHRfdmFsdWVfLlJlbGVhc2VOb0FyZW5h
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBGaWVsZDo6c2V0X2FsbG9jYXRlZF9kZWZhdWx0X3ZhbHVl
KDo6c3RkOjpzdHJpbmcqIGRlZmF1bHRfdmFsdWUpIHsKLSAgaWYgKGRlZmF1bHRfdmFsdWUgIT0g
TlVMTCkgewotICAgIAotICB9IGVsc2UgewotICAgIAotICB9Ci0gIGRlZmF1bHRfdmFsdWVfLlNl
dEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBkZWZhdWx0X3ZhbHVlKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkZpZWxkLmRl
ZmF1bHRfdmFsdWUpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRW51bQotCi0vLyBvcHRpb25h
bCBzdHJpbmcgbmFtZSA9IDE7Ci1pbmxpbmUgdm9pZCBFbnVtOjpjbGVhcl9uYW1lKCkgewotICBu
YW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0
cmluZyYgRW51bTo6bmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRW51bS5uYW1lKQotICByZXR1cm4gbmFtZV8uR2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCkpOwotfQotaW5saW5lIHZvaWQgRW51bTo6c2V0X25hbWUoY29uc3QgOjpzdGQ6
OnN0cmluZyYgdmFsdWUpIHsKLSAgCi0gIG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkVu
dW0ubmFtZSkKLX0KLWlubGluZSB2b2lkIEVudW06OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVl
KSB7Ci0gIAotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZyh2YWx1ZSkpOwot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2NoYXI6Z29vZ2xlLnByb3Rv
YnVmLkVudW0ubmFtZSkKLX0KLWlubGluZSB2b2lkIEVudW06OnNldF9uYW1lKGNvbnN0IGNoYXIq
IHZhbHVlLCBzaXplX3Qgc2l6ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAg
ICA6OnN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6
ZSkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29v
Z2xlLnByb3RvYnVmLkVudW0ubmFtZSkKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBFbnVtOjpt
dXRhYmxlX25hbWUoKSB7Ci0gIAotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
bXV0YWJsZTpnb29nbGUucHJvdG9idWYuRW51bS5uYW1lKQotICByZXR1cm4gbmFtZV8uTXV0YWJs
ZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBFbnVtOjpyZWxlYXNlX25h
bWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxlYXNlOmdvb2ds
ZS5wcm90b2J1Zi5FbnVtLm5hbWUpCi0gIAotICByZXR1cm4gbmFtZV8uUmVsZWFzZU5vQXJlbmEo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpKTsKLX0KLWlubGluZSB2b2lkIEVudW06OnNldF9hbGxvY2F0ZWRfbmFtZSg6OnN0ZDo6c3Ry
aW5nKiBuYW1lKSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAg
ICAKLSAgfQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgbmFtZSk7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1
Zi5FbnVtLm5hbWUpCi19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuRW51bVZhbHVl
IGVudW12YWx1ZSA9IDI7Ci1pbmxpbmUgaW50IEVudW06OmVudW12YWx1ZV9zaXplKCkgY29uc3Qg
ewotICByZXR1cm4gZW51bXZhbHVlXy5zaXplKCk7Ci19Ci1pbmxpbmUgdm9pZCBFbnVtOjpjbGVh
cl9lbnVtdmFsdWUoKSB7Ci0gIGVudW12YWx1ZV8uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZSYgRW51bTo6ZW51bXZhbHVlKGludCBpbmRleCkg
Y29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5w
cm90b2J1Zi5FbnVtLmVudW12YWx1ZSkKLSAgcmV0dXJuIGVudW12YWx1ZV8uR2V0KGluZGV4KTsK
LX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZSogRW51bTo6bXV0YWJsZV9l
bnVtdmFsdWUoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5FbnVtLmVudW12YWx1ZSkKLSAgcmV0dXJuIGVudW12
YWx1ZV8uTXV0YWJsZShpbmRleCk7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpFbnVt
VmFsdWUqIEVudW06OmFkZF9lbnVtdmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkVudW0uZW51bXZhbHVlKQotICByZXR1cm4g
ZW51bXZhbHVlXy5BZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlID4qCi1FbnVtOjptdXRhYmxl
X2VudW12YWx1ZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFi
bGVfbGlzdDpnb29nbGUucHJvdG9idWYuRW51bS5lbnVtdmFsdWUpCi0gIHJldHVybiAmZW51bXZh
bHVlXzsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmll
bGQ8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlID4mCi1FbnVtOjplbnVtdmFsdWUoKSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5w
cm90b2J1Zi5FbnVtLmVudW12YWx1ZSkKLSAgcmV0dXJuIGVudW12YWx1ZV87Ci19Ci0KLS8vIHJl
cGVhdGVkIC5nb29nbGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSAzOwotaW5saW5lIGludCBF
bnVtOjpvcHRpb25zX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBvcHRpb25zXy5zaXplKCk7Ci19
Ci1pbmxpbmUgdm9pZCBFbnVtOjpjbGVhcl9vcHRpb25zKCkgewotICBvcHRpb25zXy5DbGVhcigp
OwotfQotaW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uJiBFbnVtOjpvcHRp
b25zKGludCBpbmRleCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXy5H
ZXQoaW5kZXgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uKiBFbnVtOjpt
dXRhYmxlX29wdGlvbnMoaW50IGluZGV4KSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5FbnVtLm9wdGlvbnMpCi0gIHJldHVybiBv
cHRpb25zXy5NdXRhYmxlKGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6Ok9w
dGlvbiogRW51bTo6YWRkX29wdGlvbnMoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9hZGQ6Z29vZ2xlLnByb3RvYnVmLkVudW0ub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlv
bnNfLkFkZCgpOwotfQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVs
ZDwgOjpnb29nbGU6OnByb3RvYnVmOjpPcHRpb24gPioKLUVudW06Om11dGFibGVfb3B0aW9ucygp
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29n
bGUucHJvdG9idWYuRW51bS5vcHRpb25zKQotICByZXR1cm4gJm9wdGlvbnNfOwotfQotaW5saW5l
IGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6UmVwZWF0ZWRQdHJGaWVsZDwgOjpnb29nbGU6OnBy
b3RvYnVmOjpPcHRpb24gPiYKLUVudW06Om9wdGlvbnMoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChmaWVsZF9saXN0Omdvb2dsZS5wcm90b2J1Zi5FbnVtLm9wdGlvbnMp
Ci0gIHJldHVybiBvcHRpb25zXzsKLX0KLQotLy8gb3B0aW9uYWwgLmdvb2dsZS5wcm90b2J1Zi5T
b3VyY2VDb250ZXh0IHNvdXJjZV9jb250ZXh0ID0gNDsKLWlubGluZSBib29sIEVudW06Omhhc19z
b3VyY2VfY29udGV4dCgpIGNvbnN0IHsKLSAgcmV0dXJuICFfaXNfZGVmYXVsdF9pbnN0YW5jZV8g
JiYgc291cmNlX2NvbnRleHRfICE9IE5VTEw7Ci19Ci1pbmxpbmUgdm9pZCBFbnVtOjpjbGVhcl9z
b3VyY2VfY29udGV4dCgpIHsKLSAgaWYgKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gTlVMTCAmJiBz
b3VyY2VfY29udGV4dF8gIT0gTlVMTCkgZGVsZXRlIHNvdXJjZV9jb250ZXh0XzsKLSAgc291cmNl
X2NvbnRleHRfID0gTlVMTDsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OlNv
dXJjZUNvbnRleHQmIEVudW06OnNvdXJjZV9jb250ZXh0KCkgY29uc3QgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtLnNvdXJjZV9j
b250ZXh0KQotICByZXR1cm4gc291cmNlX2NvbnRleHRfICE9IE5VTEwgPyAqc291cmNlX2NvbnRl
eHRfIDogKmRlZmF1bHRfaW5zdGFuY2VfLT5zb3VyY2VfY29udGV4dF87Ci19Ci1pbmxpbmUgOjpn
b29nbGU6OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiBFbnVtOjptdXRhYmxlX3NvdXJjZV9jb250
ZXh0KCkgewotICAKLSAgaWYgKHNvdXJjZV9jb250ZXh0XyA9PSBOVUxMKSB7Ci0gICAgc291cmNl
X2NvbnRleHRfID0gbmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6U291cmNlQ29udGV4dDsKLSAgfQot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9i
dWYuRW51bS5zb3VyY2VfY29udGV4dCkKLSAgcmV0dXJuIHNvdXJjZV9jb250ZXh0XzsKLX0KLWlu
bGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlNvdXJjZUNvbnRleHQqIEVudW06OnJlbGVhc2Vfc291
cmNlX2NvbnRleHQoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9yZWxl
YXNlOmdvb2dsZS5wcm90b2J1Zi5FbnVtLnNvdXJjZV9jb250ZXh0KQotICAKLSAgOjpnb29nbGU6
OnByb3RvYnVmOjpTb3VyY2VDb250ZXh0KiB0ZW1wID0gc291cmNlX2NvbnRleHRfOwotICBzb3Vy
Y2VfY29udGV4dF8gPSBOVUxMOwotICByZXR1cm4gdGVtcDsKLX0KLWlubGluZSB2b2lkIEVudW06
OnNldF9hbGxvY2F0ZWRfc291cmNlX2NvbnRleHQoOjpnb29nbGU6OnByb3RvYnVmOjpTb3VyY2VD
b250ZXh0KiBzb3VyY2VfY29udGV4dCkgewotICBkZWxldGUgc291cmNlX2NvbnRleHRfOwotICBz
b3VyY2VfY29udGV4dF8gPSBzb3VyY2VfY29udGV4dDsKLSAgaWYgKHNvdXJjZV9jb250ZXh0KSB7
Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkVudW0uc291cmNlX2NvbnRl
eHQpCi19Ci0KLS8vIG9wdGlvbmFsIC5nb29nbGUucHJvdG9idWYuU3ludGF4IHN5bnRheCA9IDU7
Ci1pbmxpbmUgdm9pZCBFbnVtOjpjbGVhcl9zeW50YXgoKSB7Ci0gIHN5bnRheF8gPSAwOwotfQot
aW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6U3ludGF4IEVudW06OnN5bnRheCgpIGNvbnN0IHsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYu
RW51bS5zeW50YXgpCi0gIHJldHVybiBzdGF0aWNfY2FzdDwgOjpnb29nbGU6OnByb3RvYnVmOjpT
eW50YXggPihzeW50YXhfKTsKLX0KLWlubGluZSB2b2lkIEVudW06OnNldF9zeW50YXgoOjpnb29n
bGU6OnByb3RvYnVmOjpTeW50YXggdmFsdWUpIHsKLSAgCi0gIHN5bnRheF8gPSB2YWx1ZTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRW51
bS5zeW50YXgpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRW51bVZhbHVlCi0KLS8vIG9wdGlv
bmFsIHN0cmluZyBuYW1lID0gMTsKLWlubGluZSB2b2lkIEVudW1WYWx1ZTo6Y2xlYXJfbmFtZSgp
IHsKLSAgbmFtZV8uQ2xlYXJUb0VtcHR5Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotaW5saW5lIGNvbnN0IDo6
c3RkOjpzdHJpbmcmIEVudW1WYWx1ZTo6bmFtZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlLm5hbWUpCi0g
IHJldHVybiBuYW1lXy5HZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBFbnVtVmFsdWU6
OnNldF9uYW1lKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAotICBuYW1lXy5TZXRO
b0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVh
ZHlJbml0ZWQoKSwgdmFsdWUpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
c2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUubmFtZSkKLX0KLWlubGluZSB2b2lkIEVudW1W
YWx1ZTo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgCi0gIG5hbWVfLlNldE5vQXJl
bmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUlu
aXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlLm5hbWUpCi19Ci1p
bmxpbmUgdm9pZCBFbnVtVmFsdWU6OnNldF9uYW1lKGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qg
c2l6ZSkgewotICAKLSAgbmFtZV8uU2V0Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksCi0gICAgICA6OnN0ZDo6c3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSkpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkVu
dW1WYWx1ZS5uYW1lKQotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIEVudW1WYWx1ZTo6bXV0YWJs
ZV9uYW1lKCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFi
bGU6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZS5uYW1lKQotICByZXR1cm4gbmFtZV8uTXV0YWJs
ZU5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBFbnVtVmFsdWU6OnJlbGVh
c2VfbmFtZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6
Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZS5uYW1lKQotICAKLSAgcmV0dXJuIG5hbWVfLlJlbGVh
c2VOb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSk7Ci19Ci1pbmxpbmUgdm9pZCBFbnVtVmFsdWU6OnNldF9hbGxvY2F0ZWRf
bmFtZSg6OnN0ZDo6c3RyaW5nKiBuYW1lKSB7Ci0gIGlmIChuYW1lICE9IE5VTEwpIHsKLSAgICAK
LSAgfSBlbHNlIHsKLSAgICAKLSAgfQotICBuYW1lXy5TZXRBbGxvY2F0ZWROb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwg
bmFtZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVk
Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUubmFtZSkKLX0KLQotLy8gb3B0aW9uYWwgaW50MzIg
bnVtYmVyID0gMjsKLWlubGluZSB2b2lkIEVudW1WYWx1ZTo6Y2xlYXJfbnVtYmVyKCkgewotICBu
dW1iZXJfID0gMDsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIEVudW1WYWx1
ZTo6bnVtYmVyKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRf
Z2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWUubnVtYmVyKQotICByZXR1cm4gbnVtYmVyXzsK
LX0KLWlubGluZSB2b2lkIEVudW1WYWx1ZTo6c2V0X251bWJlcig6Omdvb2dsZTo6cHJvdG9idWY6
OmludDMyIHZhbHVlKSB7Ci0gIAotICBudW1iZXJfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZS5udW1iZXIp
Ci19Ci0KLS8vIHJlcGVhdGVkIC5nb29nbGUucHJvdG9idWYuT3B0aW9uIG9wdGlvbnMgPSAzOwot
aW5saW5lIGludCBFbnVtVmFsdWU6Om9wdGlvbnNfc2l6ZSgpIGNvbnN0IHsKLSAgcmV0dXJuIG9w
dGlvbnNfLnNpemUoKTsKLX0KLWlubGluZSB2b2lkIEVudW1WYWx1ZTo6Y2xlYXJfb3B0aW9ucygp
IHsKLSAgb3B0aW9uc18uQ2xlYXIoKTsKLX0KLWlubGluZSBjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok9wdGlvbiYgRW51bVZhbHVlOjpvcHRpb25zKGludCBpbmRleCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5FbnVtVmFs
dWUub3B0aW9ucykKLSAgcmV0dXJuIG9wdGlvbnNfLkdldChpbmRleCk7Ci19Ci1pbmxpbmUgOjpn
b29nbGU6OnByb3RvYnVmOjpPcHRpb24qIEVudW1WYWx1ZTo6bXV0YWJsZV9vcHRpb25zKGludCBp
bmRleCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29n
bGUucHJvdG9idWYuRW51bVZhbHVlLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXy5NdXRhYmxl
KGluZGV4KTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiogRW51bVZhbHVl
OjphZGRfb3B0aW9ucygpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2Fk
ZDpnb29nbGUucHJvdG9idWYuRW51bVZhbHVlLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXy5B
ZGQoKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uID4qCi1FbnVtVmFsdWU6Om11dGFibGVfb3B0aW9ucygp
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211dGFibGVfbGlzdDpnb29n
bGUucHJvdG9idWYuRW51bVZhbHVlLm9wdGlvbnMpCi0gIHJldHVybiAmb3B0aW9uc187Ci19Ci1p
bmxpbmUgY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPCA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok9wdGlvbiA+JgotRW51bVZhbHVlOjpvcHRpb25zKCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbGlzdDpnb29nbGUucHJvdG9idWYuRW51
bVZhbHVlLm9wdGlvbnMpCi0gIHJldHVybiBvcHRpb25zXzsKLX0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0vLyBPcHRpb24KLQotLy8gb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxOwotaW5saW5lIHZvaWQg
T3B0aW9uOjpjbGVhcl9uYW1lKCkgewotICBuYW1lXy5DbGVhclRvRW1wdHlOb0FyZW5hKCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7
Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgT3B0aW9uOjpuYW1lKCkgY29uc3Qgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5P
cHRpb24ubmFtZSkKLSAgcmV0dXJuIG5hbWVfLkdldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsKLX0KLWlubGluZSB2
b2lkIE9wdGlvbjo6c2V0X25hbWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgCi0g
IG5hbWVfLlNldE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5
U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9w
b2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLk9wdGlvbi5uYW1lKQotfQotaW5saW5lIHZv
aWQgT3B0aW9uOjpzZXRfbmFtZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICAKLSAgbmFtZV8uU2V0
Tm9BcmVuYSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJl
YWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1Zi5PcHRpb24ubmFtZSkKLX0K
LWlubGluZSB2b2lkIE9wdGlvbjo6c2V0X25hbWUoY29uc3QgY2hhciogdmFsdWUsIHNpemVfdCBz
aXplKSB7Ci0gIAotICBuYW1lXy5TZXROb0FyZW5hKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIDo6c3RkOjpzdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSk7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9idWYuT3B0
aW9uLm5hbWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogT3B0aW9uOjptdXRhYmxlX25hbWUo
KSB7Ci0gIAotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfbXV0YWJsZTpnb29n
bGUucHJvdG9idWYuT3B0aW9uLm5hbWUpCi0gIHJldHVybiBuYW1lXy5NdXRhYmxlTm9BcmVuYSgm
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVk
KCkpOwotfQotaW5saW5lIDo6c3RkOjpzdHJpbmcqIE9wdGlvbjo6cmVsZWFzZV9uYW1lKCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9i
dWYuT3B0aW9uLm5hbWUpCi0gIAotICByZXR1cm4gbmFtZV8uUmVsZWFzZU5vQXJlbmEoJjo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpKTsK
LX0KLWlubGluZSB2b2lkIE9wdGlvbjo6c2V0X2FsbG9jYXRlZF9uYW1lKDo6c3RkOjpzdHJpbmcq
IG5hbWUpIHsKLSAgaWYgKG5hbWUgIT0gTlVMTCkgewotICAgIAotICB9IGVsc2UgewotICAgIAot
ICB9Ci0gIG5hbWVfLlNldEFsbG9jYXRlZE5vQXJlbmEoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBuYW1lKTsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLk9w
dGlvbi5uYW1lKQotfQotCi0vLyBvcHRpb25hbCAuZ29vZ2xlLnByb3RvYnVmLkFueSB2YWx1ZSA9
IDI7Ci1pbmxpbmUgYm9vbCBPcHRpb246Omhhc192YWx1ZSgpIGNvbnN0IHsKLSAgcmV0dXJuICFf
aXNfZGVmYXVsdF9pbnN0YW5jZV8gJiYgdmFsdWVfICE9IE5VTEw7Ci19Ci1pbmxpbmUgdm9pZCBP
cHRpb246OmNsZWFyX3ZhbHVlKCkgewotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBOVUxM
ICYmIHZhbHVlXyAhPSBOVUxMKSBkZWxldGUgdmFsdWVfOwotICB2YWx1ZV8gPSBOVUxMOwotfQot
aW5saW5lIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55JiBPcHRpb246OnZhbHVlKCkgY29u
c3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90
b2J1Zi5PcHRpb24udmFsdWUpCi0gIHJldHVybiB2YWx1ZV8gIT0gTlVMTCA/ICp2YWx1ZV8gOiAq
ZGVmYXVsdF9pbnN0YW5jZV8tPnZhbHVlXzsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6
OkFueSogT3B0aW9uOjptdXRhYmxlX3ZhbHVlKCkgewotICAKLSAgaWYgKHZhbHVlXyA9PSBOVUxM
KSB7Ci0gICAgdmFsdWVfID0gbmV3IDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55OwotICB9Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdvb2dsZS5wcm90b2J1Zi5P
cHRpb24udmFsdWUpCi0gIHJldHVybiB2YWx1ZV87Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3Rv
YnVmOjpBbnkqIE9wdGlvbjo6cmVsZWFzZV92YWx1ZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLk9wdGlvbi52YWx1ZSkKLSAg
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55KiB0ZW1wID0gdmFsdWVfOwotICB2YWx1ZV8gPSBO
VUxMOwotICByZXR1cm4gdGVtcDsKLX0KLWlubGluZSB2b2lkIE9wdGlvbjo6c2V0X2FsbG9jYXRl
ZF92YWx1ZSg6Omdvb2dsZTo6cHJvdG9idWY6OkFueSogdmFsdWUpIHsKLSAgZGVsZXRlIHZhbHVl
XzsKLSAgdmFsdWVfID0gdmFsdWU7Ci0gIGlmICh2YWx1ZSkgewotICAgIAotICB9IGVsc2Ugewot
ICAgIAotICB9Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2Nh
dGVkOmdvb2dsZS5wcm90b2J1Zi5PcHRpb24udmFsdWUpCi19Ci0KLSNlbmRpZiAgLy8gIVBST1RP
QlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLS8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChuYW1lc3BhY2Vfc2NvcGUpCi0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1Zgot
fSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotCi0jaWZuZGVmIFNXSUcKLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Byb3RvX2Vu
dW08IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZD4gOiA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjp0cnVlX3R5cGUge307Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0IEVudW1E
ZXNjcmlwdG9yKiBHZXRFbnVtRGVzY3JpcHRvcjwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9L
aW5kPigpIHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9kZXNjcmlw
dG9yKCk7Ci19Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfcHJvdG9fZW51bTwgOjpnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZF9DYXJkaW5hbGl0eT4gOiA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
Ojp0cnVlX3R5cGUge307Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0IEVudW1EZXNjcmlwdG9y
KiBHZXRFbnVtRGVzY3JpcHRvcjwgOjpnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9DYXJkaW5hbGl0
eT4oKSB7Ci0gIHJldHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0NhcmRpbmFsaXR5X2Rl
c2NyaXB0b3IoKTsKLX0KLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19wcm90b19lbnVtPCA6Omdvb2ds
ZTo6cHJvdG9idWY6OlN5bnRheD4gOiA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjp0cnVl
X3R5cGUge307Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0IEVudW1EZXNjcmlwdG9yKiBHZXRF
bnVtRGVzY3JpcHRvcjwgOjpnb29nbGU6OnByb3RvYnVmOjpTeW50YXg+KCkgewotICByZXR1cm4g
Ojpnb29nbGU6OnByb3RvYnVmOjpTeW50YXhfZGVzY3JpcHRvcigpOwotfQotCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gU1dJRwot
Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2xvYmFsX3Njb3BlKQotCi0jZW5kaWYgIC8v
IFBST1RPQlVGX2dvb2dsZV8yZnByb3RvYnVmXzJmdHlwZV8yZXByb3RvX19JTkNMVURFRApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3R5cGUucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdHlwZS5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5Y2Y1M2RhOGEz
OGY3NDIzZWE4YmY2YjJlMDQzYTZiYmM3ZjllYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdHlwZS5wcm90bworKysgL2Rl
di9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotc3ludGF4ID0gInByb3RvMyI7Ci0KLXBhY2thZ2UgZ29vZ2xlLnByb3RvYnVmOwotCi1p
bXBvcnQgImdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8iOwotaW1wb3J0ICJnb29nbGUvcHJvdG9i
dWYvc291cmNlX2NvbnRleHQucHJvdG8iOwotCi1vcHRpb24gY3NoYXJwX25hbWVzcGFjZSA9ICJH
b29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMiOwotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJj
b20uZ29vZ2xlLnByb3RvYnVmIjsKLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJUeXBl
UHJvdG8iOwotb3B0aW9uIGphdmFfbXVsdGlwbGVfZmlsZXMgPSB0cnVlOwotb3B0aW9uIGphdmFf
Z2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoID0gdHJ1ZTsKLW9wdGlvbiBvYmpjX2NsYXNzX3ByZWZp
eCA9ICJHUEIiOwotCi0vLyBBIHByb3RvY29sIGJ1ZmZlciBtZXNzYWdlIHR5cGUuCi1tZXNzYWdl
IFR5cGUgewotICAvLyBUaGUgZnVsbHkgcXVhbGlmaWVkIG1lc3NhZ2UgbmFtZS4KLSAgc3RyaW5n
IG5hbWUgPSAxOwotICAvLyBUaGUgbGlzdCBvZiBmaWVsZHMuCi0gIHJlcGVhdGVkIEZpZWxkIGZp
ZWxkcyA9IDI7Ci0gIC8vIFRoZSBsaXN0IG9mIHR5cGVzIGFwcGVhcmluZyBpbiBgb25lb2ZgIGRl
ZmluaXRpb25zIGluIHRoaXMgdHlwZS4KLSAgcmVwZWF0ZWQgc3RyaW5nIG9uZW9mcyA9IDM7Ci0g
IC8vIFRoZSBwcm90b2NvbCBidWZmZXIgb3B0aW9ucy4KLSAgcmVwZWF0ZWQgT3B0aW9uIG9wdGlv
bnMgPSA0OwotICAvLyBUaGUgc291cmNlIGNvbnRleHQuCi0gIFNvdXJjZUNvbnRleHQgc291cmNl
X2NvbnRleHQgPSA1OwotICAvLyBUaGUgc291cmNlIHN5bnRheC4KLSAgU3ludGF4IHN5bnRheCA9
IDY7Ci19Ci0KLS8vIEEgc2luZ2xlIGZpZWxkIG9mIGEgbWVzc2FnZSB0eXBlLgotbWVzc2FnZSBG
aWVsZCB7Ci0gIC8vIEJhc2ljIGZpZWxkIHR5cGVzLgotICBlbnVtIEtpbmQgewotICAgIC8vIEZp
ZWxkIHR5cGUgdW5rbm93bi4KLSAgICBUWVBFX1VOS05PV04gICAgICAgID0gMDsKLSAgICAvLyBG
aWVsZCB0eXBlIGRvdWJsZS4KLSAgICBUWVBFX0RPVUJMRSAgICAgICAgID0gMTsKLSAgICAvLyBG
aWVsZCB0eXBlIGZsb2F0LgotICAgIFRZUEVfRkxPQVQgICAgICAgICAgPSAyOwotICAgIC8vIEZp
ZWxkIHR5cGUgaW50NjQuCi0gICAgVFlQRV9JTlQ2NCAgICAgICAgICA9IDM7Ci0gICAgLy8gRmll
bGQgdHlwZSB1aW50NjQuCi0gICAgVFlQRV9VSU5UNjQgICAgICAgICA9IDQ7Ci0gICAgLy8gRmll
bGQgdHlwZSBpbnQzMi4KLSAgICBUWVBFX0lOVDMyICAgICAgICAgID0gNTsKLSAgICAvLyBGaWVs
ZCB0eXBlIGZpeGVkNjQuCi0gICAgVFlQRV9GSVhFRDY0ICAgICAgICA9IDY7Ci0gICAgLy8gRmll
bGQgdHlwZSBmaXhlZDMyLgotICAgIFRZUEVfRklYRUQzMiAgICAgICAgPSA3OwotICAgIC8vIEZp
ZWxkIHR5cGUgYm9vbC4KLSAgICBUWVBFX0JPT0wgICAgICAgICAgID0gODsKLSAgICAvLyBGaWVs
ZCB0eXBlIHN0cmluZy4KLSAgICBUWVBFX1NUUklORyAgICAgICAgID0gOTsKLSAgICAvLyBGaWVs
ZCB0eXBlIGdyb3VwLiBQcm90bzIgc3ludGF4IG9ubHksIGFuZCBkZXByZWNhdGVkLgotICAgIFRZ
UEVfR1JPVVAgICAgICAgICAgPSAxMDsKLSAgICAvLyBGaWVsZCB0eXBlIG1lc3NhZ2UuCi0gICAg
VFlQRV9NRVNTQUdFICAgICAgICA9IDExOwotICAgIC8vIEZpZWxkIHR5cGUgYnl0ZXMuCi0gICAg
VFlQRV9CWVRFUyAgICAgICAgICA9IDEyOwotICAgIC8vIEZpZWxkIHR5cGUgdWludDMyLgotICAg
IFRZUEVfVUlOVDMyICAgICAgICAgPSAxMzsKLSAgICAvLyBGaWVsZCB0eXBlIGVudW0uCi0gICAg
VFlQRV9FTlVNICAgICAgICAgICA9IDE0OwotICAgIC8vIEZpZWxkIHR5cGUgc2ZpeGVkMzIuCi0g
ICAgVFlQRV9TRklYRUQzMiAgICAgICA9IDE1OwotICAgIC8vIEZpZWxkIHR5cGUgc2ZpeGVkNjQu
Ci0gICAgVFlQRV9TRklYRUQ2NCAgICAgICA9IDE2OwotICAgIC8vIEZpZWxkIHR5cGUgc2ludDMy
LgotICAgIFRZUEVfU0lOVDMyICAgICAgICAgPSAxNzsKLSAgICAvLyBGaWVsZCB0eXBlIHNpbnQ2
NC4KLSAgICBUWVBFX1NJTlQ2NCAgICAgICAgID0gMTg7Ci0gIH07Ci0KLSAgLy8gV2hldGhlciBh
IGZpZWxkIGlzIG9wdGlvbmFsLCByZXF1aXJlZCwgb3IgcmVwZWF0ZWQuCi0gIGVudW0gQ2FyZGlu
YWxpdHkgewotICAgIC8vIEZvciBmaWVsZHMgd2l0aCB1bmtub3duIGNhcmRpbmFsaXR5LgotICAg
IENBUkRJTkFMSVRZX1VOS05PV04gPSAwOwotICAgIC8vIEZvciBvcHRpb25hbCBmaWVsZHMuCi0g
ICAgQ0FSRElOQUxJVFlfT1BUSU9OQUwgPSAxOwotICAgIC8vIEZvciByZXF1aXJlZCBmaWVsZHMu
IFByb3RvMiBzeW50YXggb25seS4KLSAgICBDQVJESU5BTElUWV9SRVFVSVJFRCA9IDI7Ci0gICAg
Ly8gRm9yIHJlcGVhdGVkIGZpZWxkcy4KLSAgICBDQVJESU5BTElUWV9SRVBFQVRFRCA9IDM7Ci0g
IH07Ci0KLSAgLy8gVGhlIGZpZWxkIHR5cGUuCi0gIEtpbmQga2luZCA9IDE7Ci0gIC8vIFRoZSBm
aWVsZCBjYXJkaW5hbGl0eS4KLSAgQ2FyZGluYWxpdHkgY2FyZGluYWxpdHkgPSAyOwotICAvLyBU
aGUgZmllbGQgbnVtYmVyLgotICBpbnQzMiBudW1iZXIgPSAzOwotICAvLyBUaGUgZmllbGQgbmFt
ZS4KLSAgc3RyaW5nIG5hbWUgPSA0OwotICAvLyBUaGUgZmllbGQgdHlwZSBVUkwsIHdpdGhvdXQg
dGhlIHNjaGVtZSwgZm9yIG1lc3NhZ2Ugb3IgZW51bWVyYXRpb24KLSAgLy8gdHlwZXMuIEV4YW1w
bGU6IGAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVGltZXN0YW1wImAuCi0g
IHN0cmluZyB0eXBlX3VybCA9IDY7Ci0gIC8vIFRoZSBpbmRleCBvZiB0aGUgZmllbGQgdHlwZSBp
biBgVHlwZS5vbmVvZnNgLCBmb3IgbWVzc2FnZSBvciBlbnVtZXJhdGlvbgotICAvLyB0eXBlcy4g
VGhlIGZpcnN0IHR5cGUgaGFzIGluZGV4IDE7IHplcm8gbWVhbnMgdGhlIHR5cGUgaXMgbm90IGlu
IHRoZSBsaXN0LgotICBpbnQzMiBvbmVvZl9pbmRleCA9IDc7Ci0gIC8vIFdoZXRoZXIgdG8gdXNl
IGFsdGVybmF0aXZlIHBhY2tlZCB3aXJlIHJlcHJlc2VudGF0aW9uLgotICBib29sIHBhY2tlZCA9
IDg7Ci0gIC8vIFRoZSBwcm90b2NvbCBidWZmZXIgb3B0aW9ucy4KLSAgcmVwZWF0ZWQgT3B0aW9u
IG9wdGlvbnMgPSA5OwotICAvLyBUaGUgZmllbGQgSlNPTiBuYW1lLgotICBzdHJpbmcganNvbl9u
YW1lID0gMTA7Ci0gIC8vIFRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGRlZmF1bHQgdmFsdWUgb2Yg
dGhpcyBmaWVsZC4gUHJvdG8yIHN5bnRheCBvbmx5LgotICBzdHJpbmcgZGVmYXVsdF92YWx1ZSA9
IDExOwotfQotCi0vLyBFbnVtIHR5cGUgZGVmaW5pdGlvbi4KLW1lc3NhZ2UgRW51bSB7Ci0gIC8v
IEVudW0gdHlwZSBuYW1lLgotICBzdHJpbmcgbmFtZSA9IDE7Ci0gIC8vIEVudW0gdmFsdWUgZGVm
aW5pdGlvbnMuCi0gIHJlcGVhdGVkIEVudW1WYWx1ZSBlbnVtdmFsdWUgPSAyOwotICAvLyBQcm90
b2NvbCBidWZmZXIgb3B0aW9ucy4KLSAgcmVwZWF0ZWQgT3B0aW9uIG9wdGlvbnMgPSAzOwotICAv
LyBUaGUgc291cmNlIGNvbnRleHQuCi0gIFNvdXJjZUNvbnRleHQgc291cmNlX2NvbnRleHQgPSA0
OwotICAvLyBUaGUgc291cmNlIHN5bnRheC4KLSAgU3ludGF4IHN5bnRheCA9IDU7Ci19Ci0KLS8v
IEVudW0gdmFsdWUgZGVmaW5pdGlvbi4KLW1lc3NhZ2UgRW51bVZhbHVlIHsKLSAgLy8gRW51bSB2
YWx1ZSBuYW1lLgotICBzdHJpbmcgbmFtZSA9IDE7Ci0gIC8vIEVudW0gdmFsdWUgbnVtYmVyLgot
ICBpbnQzMiBudW1iZXIgPSAyOwotICAvLyBQcm90b2NvbCBidWZmZXIgb3B0aW9ucy4KLSAgcmVw
ZWF0ZWQgT3B0aW9uIG9wdGlvbnMgPSAzOwotfQotCi0vLyBBIHByb3RvY29sIGJ1ZmZlciBvcHRp
b24sIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB0byBhIG1lc3NhZ2UsIGZpZWxkLAotLy8gZW51bWVy
YXRpb24sIGV0Yy4KLW1lc3NhZ2UgT3B0aW9uIHsKLSAgLy8gVGhlIG9wdGlvbidzIG5hbWUuIEZv
ciBleGFtcGxlLCBgImphdmFfcGFja2FnZSJgLgotICBzdHJpbmcgbmFtZSA9IDE7Ci0gIC8vIFRo
ZSBvcHRpb24ncyB2YWx1ZS4gRm9yIGV4YW1wbGUsIGAiY29tLmdvb2dsZS5wcm90b2J1ZiJgLgot
ICBBbnkgdmFsdWUgPSAyOwotfQotCi0vLyBUaGUgc3ludGF4IGluIHdoaWNoIGEgcHJvdG9jb2wg
YnVmZmVyIGVsZW1lbnQgaXMgZGVmaW5lZC4KLWVudW0gU3ludGF4IHsKLSAgLy8gU3ludGF4IGBw
cm90bzJgLgotICBTWU5UQVhfUFJPVE8yID0gMDsKLSAgLy8gU3ludGF4IGBwcm90bzNgLgotICBT
WU5UQVhfUFJPVE8zID0gMTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0
dGVzdC5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wcm90bwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1NmFlMGEyNDQ5YzYzOTZiNDk2Mzk5NWI3M2ZiY2JjZGIw
MDZkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw4NzkgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2Vu
dG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90
b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBh
bmQgb3RoZXJzLgotLy8KLS8vIEEgcHJvdG8gZmlsZSB3ZSB3aWxsIHVzZSBmb3IgdW5pdCB0ZXN0
aW5nLgotCi1zeW50YXggPSAicHJvdG8yIjsKLQotLy8gU29tZSBnZW5lcmljX3NlcnZpY2VzIG9w
dGlvbihzKSBhZGRlZCBhdXRvbWF0aWNhbGx5LgotLy8gU2VlOiAgaHR0cDovL2dvL3Byb3RvMi1n
ZW5lcmljLXNlcnZpY2VzLWRlZmF1bHQKLW9wdGlvbiBjY19nZW5lcmljX3NlcnZpY2VzID0gdHJ1
ZTsgICAgIC8vIGF1dG8tYWRkZWQKLW9wdGlvbiBqYXZhX2dlbmVyaWNfc2VydmljZXMgPSB0cnVl
OyAgIC8vIGF1dG8tYWRkZWQKLW9wdGlvbiBweV9nZW5lcmljX3NlcnZpY2VzID0gdHJ1ZTsgICAg
IC8vIGF1dG8tYWRkZWQKLW9wdGlvbiBjY19lbmFibGVfYXJlbmFzID0gdHJ1ZTsKLQotaW1wb3J0
ICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0LnByb3RvIjsKLQotLy8gV2UgZG9uJ3Qg
cHV0IHRoaXMgaW4gYSBwYWNrYWdlIHdpdGhpbiBwcm90bzIgYmVjYXVzZSB3ZSBuZWVkIHRvIG1h
a2Ugc3VyZQotLy8gdGhhdCB0aGUgZ2VuZXJhdGVkIGNvZGUgZG9lc24ndCBkZXBlbmQgb24gYmVp
bmcgaW4gdGhlIHByb3RvMiBuYW1lc3BhY2UuCi0vLyBJbiB0ZXN0X3V0aWwuaCB3ZSBkbyAidXNp
bmcgbmFtZXNwYWNlIHVuaXR0ZXN0ID0gcHJvdG9idWZfdW5pdHRlc3QiLgotcGFja2FnZSBwcm90
b2J1Zl91bml0dGVzdDsKLQotLy8gUHJvdG9zIG9wdGltaXplZCBmb3IgU1BFRUQgdXNlIGEgc3Ry
aWN0IHN1cGVyc2V0IG9mIHRoZSBnZW5lcmF0ZWQgY29kZQotLy8gb2YgZXF1aXZhbGVudCBvbmVz
IG9wdGltaXplZCBmb3IgQ09ERV9TSVpFLCBzbyB3ZSBzaG91bGQgb3B0aW1pemUgYWxsIG91cgot
Ly8gdGVzdHMgZm9yIHNwZWVkIHVubGVzcyBleHBsaWNpdGx5IHRlc3RpbmcgY29kZSBzaXplIG9w
dGltaXphdGlvbi4KLW9wdGlvbiBvcHRpbWl6ZV9mb3IgPSBTUEVFRDsKLQotb3B0aW9uIGphdmFf
b3V0ZXJfY2xhc3NuYW1lID0gIlVuaXR0ZXN0UHJvdG8iOwotCi0vLyBUaGlzIHByb3RvIGluY2x1
ZGVzIGV2ZXJ5IHR5cGUgb2YgZmllbGQgaW4gYm90aCBzaW5ndWxhciBhbmQgcmVwZWF0ZWQKLS8v
IGZvcm1zLgotbWVzc2FnZSBUZXN0QWxsVHlwZXMgewotICBtZXNzYWdlIE5lc3RlZE1lc3NhZ2Ug
ewotICAgIC8vIFRoZSBmaWVsZCBuYW1lICJiIiBmYWlscyB0byBjb21waWxlIGluIHByb3RvMSBi
ZWNhdXNlIGl0IGNvbmZsaWN0cyB3aXRoCi0gICAgLy8gYSBsb2NhbCB2YXJpYWJsZSBuYW1lZCAi
YiIgaW4gb25lIG9mIHRoZSBnZW5lcmF0ZWQgbWV0aG9kcy4gIERvaC4KLSAgICAvLyBUaGlzIGZp
bGUgbmVlZHMgdG8gY29tcGlsZSBpbiBwcm90bzEgdG8gdGVzdCBiYWNrd2FyZHMtY29tcGF0aWJp
bGl0eS4KLSAgICBvcHRpb25hbCBpbnQzMiBiYiA9IDE7Ci0gIH0KLQotICBlbnVtIE5lc3RlZEVu
dW0gewotICAgIEZPTyA9IDE7Ci0gICAgQkFSID0gMjsKLSAgICBCQVogPSAzOwotICAgIE5FRyA9
IC0xOyAgLy8gSW50ZW50aW9uYWxseSBuZWdhdGl2ZS4KLSAgfQotCi0gIC8vIFNpbmd1bGFyCi0g
IG9wdGlvbmFsICAgIGludDMyIG9wdGlvbmFsX2ludDMyICAgID0gIDE7Ci0gIG9wdGlvbmFsICAg
IGludDY0IG9wdGlvbmFsX2ludDY0ICAgID0gIDI7Ci0gIG9wdGlvbmFsICAgdWludDMyIG9wdGlv
bmFsX3VpbnQzMiAgID0gIDM7Ci0gIG9wdGlvbmFsICAgdWludDY0IG9wdGlvbmFsX3VpbnQ2NCAg
ID0gIDQ7Ci0gIG9wdGlvbmFsICAgc2ludDMyIG9wdGlvbmFsX3NpbnQzMiAgID0gIDU7Ci0gIG9w
dGlvbmFsICAgc2ludDY0IG9wdGlvbmFsX3NpbnQ2NCAgID0gIDY7Ci0gIG9wdGlvbmFsICBmaXhl
ZDMyIG9wdGlvbmFsX2ZpeGVkMzIgID0gIDc7Ci0gIG9wdGlvbmFsICBmaXhlZDY0IG9wdGlvbmFs
X2ZpeGVkNjQgID0gIDg7Ci0gIG9wdGlvbmFsIHNmaXhlZDMyIG9wdGlvbmFsX3NmaXhlZDMyID0g
IDk7Ci0gIG9wdGlvbmFsIHNmaXhlZDY0IG9wdGlvbmFsX3NmaXhlZDY0ID0gMTA7Ci0gIG9wdGlv
bmFsICAgIGZsb2F0IG9wdGlvbmFsX2Zsb2F0ICAgID0gMTE7Ci0gIG9wdGlvbmFsICAgZG91Ymxl
IG9wdGlvbmFsX2RvdWJsZSAgID0gMTI7Ci0gIG9wdGlvbmFsICAgICBib29sIG9wdGlvbmFsX2Jv
b2wgICAgID0gMTM7Ci0gIG9wdGlvbmFsICAgc3RyaW5nIG9wdGlvbmFsX3N0cmluZyAgID0gMTQ7
Ci0gIG9wdGlvbmFsICAgIGJ5dGVzIG9wdGlvbmFsX2J5dGVzICAgID0gMTU7Ci0KLSAgb3B0aW9u
YWwgZ3JvdXAgT3B0aW9uYWxHcm91cCA9IDE2IHsKLSAgICBvcHRpb25hbCBpbnQzMiBhID0gMTc7
Ci0gIH0KLQotICBvcHRpb25hbCBOZXN0ZWRNZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UgID0gMTg7Ci0gIG9wdGlvbmFsIEZvcmVpZ25NZXNzYWdl
ICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UgPSAxOTsKLSAg
b3B0aW9uYWwgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2Ugb3B0aW9uYWxf
aW1wb3J0X21lc3NhZ2UgID0gMjA7Ci0KLSAgb3B0aW9uYWwgTmVzdGVkRW51bSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbmFsX25lc3RlZF9lbnVtICAgICA9IDIxOwotICBvcHRpb25h
bCBGb3JlaWduRW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfZm9yZWlnbl9l
bnVtICAgID0gMjI7Ci0gIG9wdGlvbmFsIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRF
bnVtICAgIG9wdGlvbmFsX2ltcG9ydF9lbnVtICAgICA9IDIzOwotCi0gIG9wdGlvbmFsIHN0cmlu
ZyBvcHRpb25hbF9zdHJpbmdfcGllY2UgPSAyNCBbY3R5cGU9U1RSSU5HX1BJRUNFXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIG9wdGlvbmFsX2NvcmQgPSAyNSBbY3R5cGU9Q09SRF07Ci0KLSAgLy8gRGVm
aW5lZCBpbiB1bml0dGVzdF9pbXBvcnRfcHVibGljLnByb3RvCi0gIG9wdGlvbmFsIHByb3RvYnVm
X3VuaXR0ZXN0X2ltcG9ydC5QdWJsaWNJbXBvcnRNZXNzYWdlCi0gICAgICBvcHRpb25hbF9wdWJs
aWNfaW1wb3J0X21lc3NhZ2UgPSAyNjsKLQotICBvcHRpb25hbCBOZXN0ZWRNZXNzYWdlIG9wdGlv
bmFsX2xhenlfbWVzc2FnZSA9IDI3IFtsYXp5PXRydWVdOwotCi0gIC8vIFJlcGVhdGVkCi0gIHJl
cGVhdGVkICAgIGludDMyIHJlcGVhdGVkX2ludDMyICAgID0gMzE7Ci0gIHJlcGVhdGVkICAgIGlu
dDY0IHJlcGVhdGVkX2ludDY0ICAgID0gMzI7Ci0gIHJlcGVhdGVkICAgdWludDMyIHJlcGVhdGVk
X3VpbnQzMiAgID0gMzM7Ci0gIHJlcGVhdGVkICAgdWludDY0IHJlcGVhdGVkX3VpbnQ2NCAgID0g
MzQ7Ci0gIHJlcGVhdGVkICAgc2ludDMyIHJlcGVhdGVkX3NpbnQzMiAgID0gMzU7Ci0gIHJlcGVh
dGVkICAgc2ludDY0IHJlcGVhdGVkX3NpbnQ2NCAgID0gMzY7Ci0gIHJlcGVhdGVkICBmaXhlZDMy
IHJlcGVhdGVkX2ZpeGVkMzIgID0gMzc7Ci0gIHJlcGVhdGVkICBmaXhlZDY0IHJlcGVhdGVkX2Zp
eGVkNjQgID0gMzg7Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHJlcGVhdGVkX3NmaXhlZDMyID0gMzk7
Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IHJlcGVhdGVkX3NmaXhlZDY0ID0gNDA7Ci0gIHJlcGVhdGVk
ICAgIGZsb2F0IHJlcGVhdGVkX2Zsb2F0ICAgID0gNDE7Ci0gIHJlcGVhdGVkICAgZG91YmxlIHJl
cGVhdGVkX2RvdWJsZSAgID0gNDI7Ci0gIHJlcGVhdGVkICAgICBib29sIHJlcGVhdGVkX2Jvb2wg
ICAgID0gNDM7Ci0gIHJlcGVhdGVkICAgc3RyaW5nIHJlcGVhdGVkX3N0cmluZyAgID0gNDQ7Ci0g
IHJlcGVhdGVkICAgIGJ5dGVzIHJlcGVhdGVkX2J5dGVzICAgID0gNDU7Ci0KLSAgcmVwZWF0ZWQg
Z3JvdXAgUmVwZWF0ZWRHcm91cCA9IDQ2IHsKLSAgICBvcHRpb25hbCBpbnQzMiBhID0gNDc7Ci0g
IH0KLQotICByZXBlYXRlZCBOZXN0ZWRNZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgcmVw
ZWF0ZWRfbmVzdGVkX21lc3NhZ2UgID0gNDg7Ci0gIHJlcGVhdGVkIEZvcmVpZ25NZXNzYWdlICAg
ICAgICAgICAgICAgICAgICAgICByZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UgPSA0OTsKLSAgcmVw
ZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2UgcmVwZWF0ZWRfaW1w
b3J0X21lc3NhZ2UgID0gNTA7Ci0KLSAgcmVwZWF0ZWQgTmVzdGVkRW51bSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGVhdGVkX25lc3RlZF9lbnVtICAgICA9IDUxOwotICByZXBlYXRlZCBG
b3JlaWduRW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ZWRfZm9yZWlnbl9lbnVt
ICAgID0gNTI7Ci0gIHJlcGVhdGVkIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVt
ICAgIHJlcGVhdGVkX2ltcG9ydF9lbnVtICAgICA9IDUzOwotCi0gIHJlcGVhdGVkIHN0cmluZyBy
ZXBlYXRlZF9zdHJpbmdfcGllY2UgPSA1NCBbY3R5cGU9U1RSSU5HX1BJRUNFXTsKLSAgcmVwZWF0
ZWQgc3RyaW5nIHJlcGVhdGVkX2NvcmQgPSA1NSBbY3R5cGU9Q09SRF07Ci0KLSAgcmVwZWF0ZWQg
TmVzdGVkTWVzc2FnZSByZXBlYXRlZF9sYXp5X21lc3NhZ2UgPSA1NyBbbGF6eT10cnVlXTsKLQot
ICAvLyBTaW5ndWxhciB3aXRoIGRlZmF1bHRzCi0gIG9wdGlvbmFsICAgIGludDMyIGRlZmF1bHRf
aW50MzIgICAgPSA2MSBbZGVmYXVsdCA9ICA0MSAgICBdOwotICBvcHRpb25hbCAgICBpbnQ2NCBk
ZWZhdWx0X2ludDY0ICAgID0gNjIgW2RlZmF1bHQgPSAgNDIgICAgXTsKLSAgb3B0aW9uYWwgICB1
aW50MzIgZGVmYXVsdF91aW50MzIgICA9IDYzIFtkZWZhdWx0ID0gIDQzICAgIF07Ci0gIG9wdGlv
bmFsICAgdWludDY0IGRlZmF1bHRfdWludDY0ICAgPSA2NCBbZGVmYXVsdCA9ICA0NCAgICBdOwot
ICBvcHRpb25hbCAgIHNpbnQzMiBkZWZhdWx0X3NpbnQzMiAgID0gNjUgW2RlZmF1bHQgPSAtNDUg
ICAgXTsKLSAgb3B0aW9uYWwgICBzaW50NjQgZGVmYXVsdF9zaW50NjQgICA9IDY2IFtkZWZhdWx0
ID0gIDQ2ICAgIF07Ci0gIG9wdGlvbmFsICBmaXhlZDMyIGRlZmF1bHRfZml4ZWQzMiAgPSA2NyBb
ZGVmYXVsdCA9ICA0NyAgICBdOwotICBvcHRpb25hbCAgZml4ZWQ2NCBkZWZhdWx0X2ZpeGVkNjQg
ID0gNjggW2RlZmF1bHQgPSAgNDggICAgXTsKLSAgb3B0aW9uYWwgc2ZpeGVkMzIgZGVmYXVsdF9z
Zml4ZWQzMiA9IDY5IFtkZWZhdWx0ID0gIDQ5ICAgIF07Ci0gIG9wdGlvbmFsIHNmaXhlZDY0IGRl
ZmF1bHRfc2ZpeGVkNjQgPSA3MCBbZGVmYXVsdCA9IC01MCAgICBdOwotICBvcHRpb25hbCAgICBm
bG9hdCBkZWZhdWx0X2Zsb2F0ICAgID0gNzEgW2RlZmF1bHQgPSAgNTEuNSAgXTsKLSAgb3B0aW9u
YWwgICBkb3VibGUgZGVmYXVsdF9kb3VibGUgICA9IDcyIFtkZWZhdWx0ID0gIDUyZTMgIF07Ci0g
IG9wdGlvbmFsICAgICBib29sIGRlZmF1bHRfYm9vbCAgICAgPSA3MyBbZGVmYXVsdCA9IHRydWUg
ICBdOwotICBvcHRpb25hbCAgIHN0cmluZyBkZWZhdWx0X3N0cmluZyAgID0gNzQgW2RlZmF1bHQg
PSAiaGVsbG8iXTsKLSAgb3B0aW9uYWwgICAgYnl0ZXMgZGVmYXVsdF9ieXRlcyAgICA9IDc1IFtk
ZWZhdWx0ID0gIndvcmxkIl07Ci0KLSAgb3B0aW9uYWwgTmVzdGVkRW51bSAgZGVmYXVsdF9uZXN0
ZWRfZW51bSAgPSA4MSBbZGVmYXVsdCA9IEJBUiAgICAgICAgXTsKLSAgb3B0aW9uYWwgRm9yZWln
bkVudW0gZGVmYXVsdF9mb3JlaWduX2VudW0gPSA4MiBbZGVmYXVsdCA9IEZPUkVJR05fQkFSXTsK
LSAgb3B0aW9uYWwgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW0KLSAgICAgIGRl
ZmF1bHRfaW1wb3J0X2VudW0gPSA4MyBbZGVmYXVsdCA9IElNUE9SVF9CQVJdOwotCi0gIG9wdGlv
bmFsIHN0cmluZyBkZWZhdWx0X3N0cmluZ19waWVjZSA9IDg0IFtjdHlwZT1TVFJJTkdfUElFQ0Us
ZGVmYXVsdD0iYWJjIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBkZWZhdWx0X2NvcmQgPSA4NSBbY3R5
cGU9Q09SRCxkZWZhdWx0PSIxMjMiXTsKLQotICAvLyBGb3Igb25lb2YgdGVzdAotICBvbmVvZiBv
bmVvZl9maWVsZCB7Ci0gICAgdWludDMyIG9uZW9mX3VpbnQzMiA9IDExMTsKLSAgICBOZXN0ZWRN
ZXNzYWdlIG9uZW9mX25lc3RlZF9tZXNzYWdlID0gMTEyOwotICAgIHN0cmluZyBvbmVvZl9zdHJp
bmcgPSAxMTM7Ci0gICAgYnl0ZXMgb25lb2ZfYnl0ZXMgPSAxMTQ7Ci0gIH0KLX0KLQotLy8gVGhp
cyBwcm90byBpbmNsdWRlcyBhIHJlY3VzaXZlbHkgbmVzdGVkIG1lc3NhZ2UuCi1tZXNzYWdlIE5l
c3RlZFRlc3RBbGxUeXBlcyB7Ci0gIG9wdGlvbmFsIE5lc3RlZFRlc3RBbGxUeXBlcyBjaGlsZCA9
IDE7Ci0gIG9wdGlvbmFsIFRlc3RBbGxUeXBlcyBwYXlsb2FkID0gMjsKLSAgcmVwZWF0ZWQgTmVz
dGVkVGVzdEFsbFR5cGVzIHJlcGVhdGVkX2NoaWxkID0gMzsKLX0KLQotbWVzc2FnZSBUZXN0RGVw
cmVjYXRlZEZpZWxkcyB7Ci0gIG9wdGlvbmFsIGludDMyIGRlcHJlY2F0ZWRfaW50MzIgPSAxIFtk
ZXByZWNhdGVkPXRydWVdOwotfQotCi0vLyBEZWZpbmUgdGhlc2UgYWZ0ZXIgVGVzdEFsbFR5cGVz
IHRvIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgY2FuIGhhbmRsZQotLy8gdGhhdC4KLW1lc3NhZ2Ug
Rm9yZWlnbk1lc3NhZ2UgewotICBvcHRpb25hbCBpbnQzMiBjID0gMTsKLX0KLQotZW51bSBGb3Jl
aWduRW51bSB7Ci0gIEZPUkVJR05fRk9PID0gNDsKLSAgRk9SRUlHTl9CQVIgPSA1OwotICBGT1JF
SUdOX0JBWiA9IDY7Ci19Ci0KLW1lc3NhZ2UgVGVzdFJlc2VydmVkRmllbGRzIHsKLSAgcmVzZXJ2
ZWQgMiwgMTUsIDkgdG8gMTE7Ci0gIHJlc2VydmVkICJiYXIiLCAiYmF6IjsKLX0KLQotbWVzc2Fn
ZSBUZXN0QWxsRXh0ZW5zaW9ucyB7Ci0gIGV4dGVuc2lvbnMgMSB0byBtYXg7Ci19Ci0KLWV4dGVu
ZCBUZXN0QWxsRXh0ZW5zaW9ucyB7Ci0gIC8vIFNpbmd1bGFyCi0gIG9wdGlvbmFsICAgIGludDMy
IG9wdGlvbmFsX2ludDMyX2V4dGVuc2lvbiAgICA9ICAxOwotICBvcHRpb25hbCAgICBpbnQ2NCBv
cHRpb25hbF9pbnQ2NF9leHRlbnNpb24gICAgPSAgMjsKLSAgb3B0aW9uYWwgICB1aW50MzIgb3B0
aW9uYWxfdWludDMyX2V4dGVuc2lvbiAgID0gIDM7Ci0gIG9wdGlvbmFsICAgdWludDY0IG9wdGlv
bmFsX3VpbnQ2NF9leHRlbnNpb24gICA9ICA0OwotICBvcHRpb25hbCAgIHNpbnQzMiBvcHRpb25h
bF9zaW50MzJfZXh0ZW5zaW9uICAgPSAgNTsKLSAgb3B0aW9uYWwgICBzaW50NjQgb3B0aW9uYWxf
c2ludDY0X2V4dGVuc2lvbiAgID0gIDY7Ci0gIG9wdGlvbmFsICBmaXhlZDMyIG9wdGlvbmFsX2Zp
eGVkMzJfZXh0ZW5zaW9uICA9ICA3OwotICBvcHRpb25hbCAgZml4ZWQ2NCBvcHRpb25hbF9maXhl
ZDY0X2V4dGVuc2lvbiAgPSAgODsKLSAgb3B0aW9uYWwgc2ZpeGVkMzIgb3B0aW9uYWxfc2ZpeGVk
MzJfZXh0ZW5zaW9uID0gIDk7Ci0gIG9wdGlvbmFsIHNmaXhlZDY0IG9wdGlvbmFsX3NmaXhlZDY0
X2V4dGVuc2lvbiA9IDEwOwotICBvcHRpb25hbCAgICBmbG9hdCBvcHRpb25hbF9mbG9hdF9leHRl
bnNpb24gICAgPSAxMTsKLSAgb3B0aW9uYWwgICBkb3VibGUgb3B0aW9uYWxfZG91YmxlX2V4dGVu
c2lvbiAgID0gMTI7Ci0gIG9wdGlvbmFsICAgICBib29sIG9wdGlvbmFsX2Jvb2xfZXh0ZW5zaW9u
ICAgICA9IDEzOwotICBvcHRpb25hbCAgIHN0cmluZyBvcHRpb25hbF9zdHJpbmdfZXh0ZW5zaW9u
ICAgPSAxNDsKLSAgb3B0aW9uYWwgICAgYnl0ZXMgb3B0aW9uYWxfYnl0ZXNfZXh0ZW5zaW9uICAg
ID0gMTU7Ci0KLSAgb3B0aW9uYWwgZ3JvdXAgT3B0aW9uYWxHcm91cF9leHRlbnNpb24gPSAxNiB7
Ci0gICAgb3B0aW9uYWwgaW50MzIgYSA9IDE3OwotICB9Ci0KLSAgb3B0aW9uYWwgVGVzdEFsbFR5
cGVzLk5lc3RlZE1lc3NhZ2Ugb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uID0gMTg7
Ci0gIG9wdGlvbmFsIEZvcmVpZ25NZXNzYWdlIG9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZV9leHRl
bnNpb24gPSAxOTsKLSAgb3B0aW9uYWwgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1l
c3NhZ2UKLSAgICBvcHRpb25hbF9pbXBvcnRfbWVzc2FnZV9leHRlbnNpb24gPSAyMDsKLQotICBv
cHRpb25hbCBUZXN0QWxsVHlwZXMuTmVzdGVkRW51bSBvcHRpb25hbF9uZXN0ZWRfZW51bV9leHRl
bnNpb24gPSAyMTsKLSAgb3B0aW9uYWwgRm9yZWlnbkVudW0gb3B0aW9uYWxfZm9yZWlnbl9lbnVt
X2V4dGVuc2lvbiA9IDIyOwotICBvcHRpb25hbCBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1w
b3J0RW51bQotICAgIG9wdGlvbmFsX2ltcG9ydF9lbnVtX2V4dGVuc2lvbiA9IDIzOwotCi0gIG9w
dGlvbmFsIHN0cmluZyBvcHRpb25hbF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uID0gMjQgW2N0eXBl
PVNUUklOR19QSUVDRV07Ci0gIG9wdGlvbmFsIHN0cmluZyBvcHRpb25hbF9jb3JkX2V4dGVuc2lv
biA9IDI1IFtjdHlwZT1DT1JEXTsKLQotICBvcHRpb25hbCBwcm90b2J1Zl91bml0dGVzdF9pbXBv
cnQuUHVibGljSW1wb3J0TWVzc2FnZQotICAgIG9wdGlvbmFsX3B1YmxpY19pbXBvcnRfbWVzc2Fn
ZV9leHRlbnNpb24gPSAyNjsKLQotICBvcHRpb25hbCBUZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2Fn
ZQotICAgIG9wdGlvbmFsX2xhenlfbWVzc2FnZV9leHRlbnNpb24gPSAyNyBbbGF6eT10cnVlXTsK
LQotICAvLyBSZXBlYXRlZAotICByZXBlYXRlZCAgICBpbnQzMiByZXBlYXRlZF9pbnQzMl9leHRl
bnNpb24gICAgPSAzMTsKLSAgcmVwZWF0ZWQgICAgaW50NjQgcmVwZWF0ZWRfaW50NjRfZXh0ZW5z
aW9uICAgID0gMzI7Ci0gIHJlcGVhdGVkICAgdWludDMyIHJlcGVhdGVkX3VpbnQzMl9leHRlbnNp
b24gICA9IDMzOwotICByZXBlYXRlZCAgIHVpbnQ2NCByZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9u
ICAgPSAzNDsKLSAgcmVwZWF0ZWQgICBzaW50MzIgcmVwZWF0ZWRfc2ludDMyX2V4dGVuc2lvbiAg
ID0gMzU7Ci0gIHJlcGVhdGVkICAgc2ludDY0IHJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb24gICA9
IDM2OwotICByZXBlYXRlZCAgZml4ZWQzMiByZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbiAgPSAz
NzsKLSAgcmVwZWF0ZWQgIGZpeGVkNjQgcmVwZWF0ZWRfZml4ZWQ2NF9leHRlbnNpb24gID0gMzg7
Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHJlcGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbiA9IDM5Owot
ICByZXBlYXRlZCBzZml4ZWQ2NCByZXBlYXRlZF9zZml4ZWQ2NF9leHRlbnNpb24gPSA0MDsKLSAg
cmVwZWF0ZWQgICAgZmxvYXQgcmVwZWF0ZWRfZmxvYXRfZXh0ZW5zaW9uICAgID0gNDE7Ci0gIHJl
cGVhdGVkICAgZG91YmxlIHJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb24gICA9IDQyOwotICByZXBl
YXRlZCAgICAgYm9vbCByZXBlYXRlZF9ib29sX2V4dGVuc2lvbiAgICAgPSA0MzsKLSAgcmVwZWF0
ZWQgICBzdHJpbmcgcmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lvbiAgID0gNDQ7Ci0gIHJlcGVhdGVk
ICAgIGJ5dGVzIHJlcGVhdGVkX2J5dGVzX2V4dGVuc2lvbiAgICA9IDQ1OwotCi0gIHJlcGVhdGVk
IGdyb3VwIFJlcGVhdGVkR3JvdXBfZXh0ZW5zaW9uID0gNDYgewotICAgIG9wdGlvbmFsIGludDMy
IGEgPSA0NzsKLSAgfQotCi0gIHJlcGVhdGVkIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlIHJl
cGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbiA9IDQ4OwotICByZXBlYXRlZCBGb3JlaWdu
TWVzc2FnZSByZXBlYXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uID0gNDk7Ci0gIHJlcGVh
dGVkIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNzYWdlCi0gICAgcmVwZWF0ZWRf
aW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uID0gNTA7Ci0KLSAgcmVwZWF0ZWQgVGVzdEFsbFR5cGVz
Lk5lc3RlZEVudW0gcmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uID0gNTE7Ci0gIHJlcGVh
dGVkIEZvcmVpZ25FbnVtIHJlcGVhdGVkX2ZvcmVpZ25fZW51bV9leHRlbnNpb24gPSA1MjsKLSAg
cmVwZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW0KLSAgICByZXBlYXRl
ZF9pbXBvcnRfZW51bV9leHRlbnNpb24gPSA1MzsKLQotICByZXBlYXRlZCBzdHJpbmcgcmVwZWF0
ZWRfc3RyaW5nX3BpZWNlX2V4dGVuc2lvbiA9IDU0IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICBy
ZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRfY29yZF9leHRlbnNpb24gPSA1NSBbY3R5cGU9Q09SRF07
Ci0KLSAgcmVwZWF0ZWQgVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UKLSAgICByZXBlYXRlZF9s
YXp5X21lc3NhZ2VfZXh0ZW5zaW9uID0gNTcgW2xhenk9dHJ1ZV07Ci0KLSAgLy8gU2luZ3VsYXIg
d2l0aCBkZWZhdWx0cwotICBvcHRpb25hbCAgICBpbnQzMiBkZWZhdWx0X2ludDMyX2V4dGVuc2lv
biAgICA9IDYxIFtkZWZhdWx0ID0gIDQxICAgIF07Ci0gIG9wdGlvbmFsICAgIGludDY0IGRlZmF1
bHRfaW50NjRfZXh0ZW5zaW9uICAgID0gNjIgW2RlZmF1bHQgPSAgNDIgICAgXTsKLSAgb3B0aW9u
YWwgICB1aW50MzIgZGVmYXVsdF91aW50MzJfZXh0ZW5zaW9uICAgPSA2MyBbZGVmYXVsdCA9ICA0
MyAgICBdOwotICBvcHRpb25hbCAgIHVpbnQ2NCBkZWZhdWx0X3VpbnQ2NF9leHRlbnNpb24gICA9
IDY0IFtkZWZhdWx0ID0gIDQ0ICAgIF07Ci0gIG9wdGlvbmFsICAgc2ludDMyIGRlZmF1bHRfc2lu
dDMyX2V4dGVuc2lvbiAgID0gNjUgW2RlZmF1bHQgPSAtNDUgICAgXTsKLSAgb3B0aW9uYWwgICBz
aW50NjQgZGVmYXVsdF9zaW50NjRfZXh0ZW5zaW9uICAgPSA2NiBbZGVmYXVsdCA9ICA0NiAgICBd
OwotICBvcHRpb25hbCAgZml4ZWQzMiBkZWZhdWx0X2ZpeGVkMzJfZXh0ZW5zaW9uICA9IDY3IFtk
ZWZhdWx0ID0gIDQ3ICAgIF07Ci0gIG9wdGlvbmFsICBmaXhlZDY0IGRlZmF1bHRfZml4ZWQ2NF9l
eHRlbnNpb24gID0gNjggW2RlZmF1bHQgPSAgNDggICAgXTsKLSAgb3B0aW9uYWwgc2ZpeGVkMzIg
ZGVmYXVsdF9zZml4ZWQzMl9leHRlbnNpb24gPSA2OSBbZGVmYXVsdCA9ICA0OSAgICBdOwotICBv
cHRpb25hbCBzZml4ZWQ2NCBkZWZhdWx0X3NmaXhlZDY0X2V4dGVuc2lvbiA9IDcwIFtkZWZhdWx0
ID0gLTUwICAgIF07Ci0gIG9wdGlvbmFsICAgIGZsb2F0IGRlZmF1bHRfZmxvYXRfZXh0ZW5zaW9u
ICAgID0gNzEgW2RlZmF1bHQgPSAgNTEuNSAgXTsKLSAgb3B0aW9uYWwgICBkb3VibGUgZGVmYXVs
dF9kb3VibGVfZXh0ZW5zaW9uICAgPSA3MiBbZGVmYXVsdCA9ICA1MmUzICBdOwotICBvcHRpb25h
bCAgICAgYm9vbCBkZWZhdWx0X2Jvb2xfZXh0ZW5zaW9uICAgICA9IDczIFtkZWZhdWx0ID0gdHJ1
ZSAgIF07Ci0gIG9wdGlvbmFsICAgc3RyaW5nIGRlZmF1bHRfc3RyaW5nX2V4dGVuc2lvbiAgID0g
NzQgW2RlZmF1bHQgPSAiaGVsbG8iXTsKLSAgb3B0aW9uYWwgICAgYnl0ZXMgZGVmYXVsdF9ieXRl
c19leHRlbnNpb24gICAgPSA3NSBbZGVmYXVsdCA9ICJ3b3JsZCJdOwotCi0gIG9wdGlvbmFsIFRl
c3RBbGxUeXBlcy5OZXN0ZWRFbnVtCi0gICAgZGVmYXVsdF9uZXN0ZWRfZW51bV9leHRlbnNpb24g
PSA4MSBbZGVmYXVsdCA9IEJBUl07Ci0gIG9wdGlvbmFsIEZvcmVpZ25FbnVtCi0gICAgZGVmYXVs
dF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uID0gODIgW2RlZmF1bHQgPSBGT1JFSUdOX0JBUl07Ci0g
IG9wdGlvbmFsIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVtCi0gICAgZGVmYXVs
dF9pbXBvcnRfZW51bV9leHRlbnNpb24gPSA4MyBbZGVmYXVsdCA9IElNUE9SVF9CQVJdOwotCi0g
IG9wdGlvbmFsIHN0cmluZyBkZWZhdWx0X3N0cmluZ19waWVjZV9leHRlbnNpb24gPSA4NCBbY3R5
cGU9U1RSSU5HX1BJRUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImFiYyJdOwotICBvcHRpb25hbCBzdHJpbmcgZGVmYXVs
dF9jb3JkX2V4dGVuc2lvbiA9IDg1IFtjdHlwZT1DT1JELCBkZWZhdWx0PSIxMjMiXTsKLQotICAv
LyBGb3Igb25lb2YgdGVzdAotICBvcHRpb25hbCB1aW50MzIgb25lb2ZfdWludDMyX2V4dGVuc2lv
biA9IDExMTsKLSAgb3B0aW9uYWwgVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2Ugb25lb2ZfbmVz
dGVkX21lc3NhZ2VfZXh0ZW5zaW9uID0gMTEyOwotICBvcHRpb25hbCBzdHJpbmcgb25lb2Zfc3Ry
aW5nX2V4dGVuc2lvbiA9IDExMzsKLSAgb3B0aW9uYWwgYnl0ZXMgb25lb2ZfYnl0ZXNfZXh0ZW5z
aW9uID0gMTE0OwotfQotCi1tZXNzYWdlIFRlc3ROZXN0ZWRFeHRlbnNpb24gewotICBleHRlbmQg
VGVzdEFsbEV4dGVuc2lvbnMgewotICAgIC8vIENoZWNrIGZvciBidWcgd2hlcmUgc3RyaW5nIGV4
dGVuc2lvbnMgZGVjbGFyZWQgaW4gdGVzdGVkIHNjb3BlIGRpZCBub3QKLSAgICAvLyBjb21waWxl
LgotICAgIG9wdGlvbmFsIHN0cmluZyB0ZXN0ID0gMTAwMiBbZGVmYXVsdD0idGVzdCJdOwotICAg
IC8vIFVzZWQgdG8gdGVzdCBpZiBnZW5lcmF0ZWQgZXh0ZW5zaW9uIG5hbWUgaXMgY29ycmVjdCB3
aGVuIHRoZXJlIGFyZQotICAgIC8vIHVuZGVyc2NvcmVzLgotICAgIG9wdGlvbmFsIHN0cmluZyBu
ZXN0ZWRfc3RyaW5nX2V4dGVuc2lvbiA9IDEwMDM7Ci0gIH0KLX0KLQotLy8gV2UgaGF2ZSBzZXBh
cmF0ZSBtZXNzYWdlcyBmb3IgdGVzdGluZyByZXF1aXJlZCBmaWVsZHMgYmVjYXVzZSBpdCdzCi0v
LyBhbm5veWluZyB0byBoYXZlIHRvIGZpbGwgaW4gcmVxdWlyZWQgZmllbGRzIGluIFRlc3RQcm90
byBpbiBvcmRlciB0bwotLy8gZG8gYW55dGhpbmcgd2l0aCBpdC4gIE5vdGUgdGhhdCB3ZSBkb24n
dCBuZWVkIHRvIHRlc3QgZXZlcnkgdHlwZSBvZgotLy8gcmVxdWlyZWQgZmlsZWQgYmVjYXVzZSB0
aGUgY29kZSBvdXRwdXQgaXMgYmFzaWNhbGx5IGlkZW50aWNhbCB0bwotLy8gb3B0aW9uYWwgZmll
bGRzIGZvciBhbGwgdHlwZXMuCi1tZXNzYWdlIFRlc3RSZXF1aXJlZCB7Ci0gIHJlcXVpcmVkIGlu
dDMyIGEgPSAxOwotICBvcHRpb25hbCBpbnQzMiBkdW1teTIgPSAyOwotICByZXF1aXJlZCBpbnQz
MiBiID0gMzsKLQotICBleHRlbmQgVGVzdEFsbEV4dGVuc2lvbnMgewotICAgIG9wdGlvbmFsIFRl
c3RSZXF1aXJlZCBzaW5nbGUgPSAxMDAwOwotICAgIHJlcGVhdGVkIFRlc3RSZXF1aXJlZCBtdWx0
aSAgPSAxMDAxOwotICB9Ci0KLSAgLy8gUGFkIHRoZSBmaWVsZCBjb3VudCB0byAzMiBzbyB0aGF0
IHdlIGNhbiB0ZXN0IHRoYXQgSXNJbml0aWFsaXplZCgpCi0gIC8vIHByb3Blcmx5IGNoZWNrcyBt
dWx0aXBsZSBlbGVtZW50cyBvZiBoYXNfYml0c18uCi0gIG9wdGlvbmFsIGludDMyIGR1bW15NCAg
PSAgNDsKLSAgb3B0aW9uYWwgaW50MzIgZHVtbXk1ICA9ICA1OwotICBvcHRpb25hbCBpbnQzMiBk
dW1teTYgID0gIDY7Ci0gIG9wdGlvbmFsIGludDMyIGR1bW15NyAgPSAgNzsKLSAgb3B0aW9uYWwg
aW50MzIgZHVtbXk4ICA9ICA4OwotICBvcHRpb25hbCBpbnQzMiBkdW1teTkgID0gIDk7Ci0gIG9w
dGlvbmFsIGludDMyIGR1bW15MTAgPSAxMDsKLSAgb3B0aW9uYWwgaW50MzIgZHVtbXkxMSA9IDEx
OwotICBvcHRpb25hbCBpbnQzMiBkdW1teTEyID0gMTI7Ci0gIG9wdGlvbmFsIGludDMyIGR1bW15
MTMgPSAxMzsKLSAgb3B0aW9uYWwgaW50MzIgZHVtbXkxNCA9IDE0OwotICBvcHRpb25hbCBpbnQz
MiBkdW1teTE1ID0gMTU7Ci0gIG9wdGlvbmFsIGludDMyIGR1bW15MTYgPSAxNjsKLSAgb3B0aW9u
YWwgaW50MzIgZHVtbXkxNyA9IDE3OwotICBvcHRpb25hbCBpbnQzMiBkdW1teTE4ID0gMTg7Ci0g
IG9wdGlvbmFsIGludDMyIGR1bW15MTkgPSAxOTsKLSAgb3B0aW9uYWwgaW50MzIgZHVtbXkyMCA9
IDIwOwotICBvcHRpb25hbCBpbnQzMiBkdW1teTIxID0gMjE7Ci0gIG9wdGlvbmFsIGludDMyIGR1
bW15MjIgPSAyMjsKLSAgb3B0aW9uYWwgaW50MzIgZHVtbXkyMyA9IDIzOwotICBvcHRpb25hbCBp
bnQzMiBkdW1teTI0ID0gMjQ7Ci0gIG9wdGlvbmFsIGludDMyIGR1bW15MjUgPSAyNTsKLSAgb3B0
aW9uYWwgaW50MzIgZHVtbXkyNiA9IDI2OwotICBvcHRpb25hbCBpbnQzMiBkdW1teTI3ID0gMjc7
Ci0gIG9wdGlvbmFsIGludDMyIGR1bW15MjggPSAyODsKLSAgb3B0aW9uYWwgaW50MzIgZHVtbXky
OSA9IDI5OwotICBvcHRpb25hbCBpbnQzMiBkdW1teTMwID0gMzA7Ci0gIG9wdGlvbmFsIGludDMy
IGR1bW15MzEgPSAzMTsKLSAgb3B0aW9uYWwgaW50MzIgZHVtbXkzMiA9IDMyOwotCi0gIHJlcXVp
cmVkIGludDMyIGMgPSAzMzsKLX0KLQotbWVzc2FnZSBUZXN0UmVxdWlyZWRGb3JlaWduIHsKLSAg
b3B0aW9uYWwgVGVzdFJlcXVpcmVkIG9wdGlvbmFsX21lc3NhZ2UgPSAxOwotICByZXBlYXRlZCBU
ZXN0UmVxdWlyZWQgcmVwZWF0ZWRfbWVzc2FnZSA9IDI7Ci0gIG9wdGlvbmFsIGludDMyIGR1bW15
ID0gMzsKLX0KLQotLy8gVGVzdCB0aGF0IHdlIGNhbiB1c2UgTmVzdGVkTWVzc2FnZSBmcm9tIG91
dHNpZGUgVGVzdEFsbFR5cGVzLgotbWVzc2FnZSBUZXN0Rm9yZWlnbk5lc3RlZCB7Ci0gIG9wdGlv
bmFsIFRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlIGZvcmVpZ25fbmVzdGVkID0gMTsKLX0KLQot
Ly8gVGVzdEVtcHR5TWVzc2FnZSBpcyB1c2VkIHRvIHRlc3QgdW5rbm93biBmaWVsZCBzdXBwb3J0
LgotbWVzc2FnZSBUZXN0RW1wdHlNZXNzYWdlIHsKLX0KLQotLy8gTGlrZSBhYm92ZSwgYnV0IGRl
Y2xhcmUgYWxsIGZpZWxkIG51bWJlcnMgYXMgcG90ZW50aWFsIGV4dGVuc2lvbnMuICBObwotLy8g
YWN0dWFsIGV4dGVuc2lvbnMgc2hvdWxkIGV2ZXIgYmUgZGVmaW5lZCBmb3IgdGhpcyB0eXBlLgot
bWVzc2FnZSBUZXN0RW1wdHlNZXNzYWdlV2l0aEV4dGVuc2lvbnMgewotICBleHRlbnNpb25zIDEg
dG8gbWF4OwotfQotCi1tZXNzYWdlIFRlc3RNdWx0aXBsZUV4dGVuc2lvblJhbmdlcyB7Ci0gIGV4
dGVuc2lvbnMgNDI7Ci0gIGV4dGVuc2lvbnMgNDE0MyB0byA0MjQzOwotICBleHRlbnNpb25zIDY1
NTM2IHRvIG1heDsKLX0KLQotLy8gVGVzdCB0aGF0IHJlYWxseSBsYXJnZSB0YWcgbnVtYmVycyBk
b24ndCBicmVhayBhbnl0aGluZy4KLW1lc3NhZ2UgVGVzdFJlYWxseUxhcmdlVGFnTnVtYmVyIHsK
LSAgLy8gVGhlIGxhcmdlc3QgcG9zc2libGUgdGFnIG51bWJlciBpcyAyXjI4IC0gMSwgc2luY2Ug
dGhlIHdpcmUgZm9ybWF0IHVzZXMKLSAgLy8gdGhyZWUgYml0cyB0byBjb21tdW5pY2F0ZSB3aXJl
IHR5cGUuCi0gIG9wdGlvbmFsIGludDMyIGEgPSAxOwotICBvcHRpb25hbCBpbnQzMiBiYiA9IDI2
ODQzNTQ1NTsKLX0KLQotbWVzc2FnZSBUZXN0UmVjdXJzaXZlTWVzc2FnZSB7Ci0gIG9wdGlvbmFs
IFRlc3RSZWN1cnNpdmVNZXNzYWdlIGEgPSAxOwotICBvcHRpb25hbCBpbnQzMiBpID0gMjsKLX0K
LQotLy8gVGVzdCB0aGF0IG11dHVhbCByZWN1cnNpb24gd29ya3MuCi1tZXNzYWdlIFRlc3RNdXR1
YWxSZWN1cnNpb25BIHsKLSAgb3B0aW9uYWwgVGVzdE11dHVhbFJlY3Vyc2lvbkIgYmIgPSAxOwot
fQotCi1tZXNzYWdlIFRlc3RNdXR1YWxSZWN1cnNpb25CIHsKLSAgb3B0aW9uYWwgVGVzdE11dHVh
bFJlY3Vyc2lvbkEgYSA9IDE7Ci0gIG9wdGlvbmFsIGludDMyIG9wdGlvbmFsX2ludDMyID0gMjsK
LX0KLQotLy8gVGVzdCB0aGF0IGdyb3VwcyBoYXZlIGRpc2pvaW50IGZpZWxkIG51bWJlcnMgZnJv
bSB0aGVpciBzaWJsaW5ncyBhbmQKLS8vIHBhcmVudHMuICBUaGlzIGlzIE5PVCBwb3NzaWJsZSBp
biBwcm90bzE7IG9ubHkgZ29vZ2xlLnByb3RvYnVmLiAgV2hlbiBhdHRlbXB0aW5nCi0vLyB0byBj
b21waWxlIHdpdGggcHJvdG8xLCB0aGlzIHdpbGwgZW1pdCBhbiBlcnJvcjsgc28gd2Ugb25seSBp
bmNsdWRlIGl0Ci0vLyBpbiBwcm90b2J1Zl91bml0dGVzdF9wcm90by4KLW1lc3NhZ2UgVGVzdER1
cEZpZWxkTnVtYmVyIHsgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT19QUk9UTzEKLSAgb3B0
aW9uYWwgaW50MzIgYSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT19QUk9U
TzEKLSAgb3B0aW9uYWwgZ3JvdXAgRm9vID0gMiB7IG9wdGlvbmFsIGludDMyIGEgPSAxOyB9ICAv
LyBOT19QUk9UTzEKLSAgb3B0aW9uYWwgZ3JvdXAgQmFyID0gMyB7IG9wdGlvbmFsIGludDMyIGEg
PSAxOyB9ICAvLyBOT19QUk9UTzEKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBOT19QUk9UTzEKLQotLy8gQWRkaXRpb25hbCBtZXNzYWdlcyBm
b3IgdGVzdGluZyBsYXp5IGZpZWxkcy4KLW1lc3NhZ2UgVGVzdEVhZ2VyTWVzc2FnZSB7Ci0gIG9w
dGlvbmFsIFRlc3RBbGxUeXBlcyBzdWJfbWVzc2FnZSA9IDEgW2xhenk9ZmFsc2VdOwotfQotbWVz
c2FnZSBUZXN0TGF6eU1lc3NhZ2UgewotICBvcHRpb25hbCBUZXN0QWxsVHlwZXMgc3ViX21lc3Nh
Z2UgPSAxIFtsYXp5PXRydWVdOwotfQotCi0vLyBOZWVkZWQgZm9yIGEgUHl0aG9uIHRlc3QuCi1t
ZXNzYWdlIFRlc3ROZXN0ZWRNZXNzYWdlSGFzQml0cyB7Ci0gIG1lc3NhZ2UgTmVzdGVkTWVzc2Fn
ZSB7Ci0gICAgcmVwZWF0ZWQgaW50MzIgbmVzdGVkbWVzc2FnZV9yZXBlYXRlZF9pbnQzMiA9IDE7
Ci0gICAgcmVwZWF0ZWQgRm9yZWlnbk1lc3NhZ2UgbmVzdGVkbWVzc2FnZV9yZXBlYXRlZF9mb3Jl
aWdubWVzc2FnZSA9IDI7Ci0gIH0KLSAgb3B0aW9uYWwgTmVzdGVkTWVzc2FnZSBvcHRpb25hbF9u
ZXN0ZWRfbWVzc2FnZSA9IDE7Ci19Ci0KLQotLy8gVGVzdCBhbiBlbnVtIHRoYXQgaGFzIG11bHRp
cGxlIHZhbHVlcyB3aXRoIHRoZSBzYW1lIG51bWJlci4KLWVudW0gVGVzdEVudW1XaXRoRHVwVmFs
dWUgewotICBvcHRpb24gYWxsb3dfYWxpYXMgPSB0cnVlOwotCi0gIEZPTzEgPSAxOwotICBCQVIx
ID0gMjsKLSAgQkFaID0gMzsKLSAgRk9PMiA9IDE7Ci0gIEJBUjIgPSAyOwotfQotCi0vLyBUZXN0
IGFuIGVudW0gd2l0aCBsYXJnZSwgdW5vcmRlcmVkIHZhbHVlcy4KLWVudW0gVGVzdFNwYXJzZUVu
dW0gewotICBTUEFSU0VfQSA9IDEyMzsKLSAgU1BBUlNFX0IgPSA2MjM3NDsKLSAgU1BBUlNFX0Mg
PSAxMjU4OTIzNDsKLSAgU1BBUlNFX0QgPSAtMTU7Ci0gIFNQQVJTRV9FID0gLTUzNDUyOwotICBT
UEFSU0VfRiA9IDA7Ci0gIFNQQVJTRV9HID0gMjsKLX0KLQotLy8gVGVzdCBtZXNzYWdlIHdpdGgg
Q2FtZWxDYXNlIGZpZWxkIG5hbWVzLiAgVGhpcyB2aW9sYXRlcyBQcm90b2NvbCBCdWZmZXIKLS8v
IHN0YW5kYXJkIHN0eWxlLgotbWVzc2FnZSBUZXN0Q2FtZWxDYXNlRmllbGROYW1lcyB7Ci0gIG9w
dGlvbmFsIGludDMyIFByaW1pdGl2ZUZpZWxkID0gMTsKLSAgb3B0aW9uYWwgc3RyaW5nIFN0cmlu
Z0ZpZWxkID0gMjsKLSAgb3B0aW9uYWwgRm9yZWlnbkVudW0gRW51bUZpZWxkID0gMzsKLSAgb3B0
aW9uYWwgRm9yZWlnbk1lc3NhZ2UgTWVzc2FnZUZpZWxkID0gNDsKLSAgb3B0aW9uYWwgc3RyaW5n
IFN0cmluZ1BpZWNlRmllbGQgPSA1IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICBvcHRpb25hbCBz
dHJpbmcgQ29yZEZpZWxkID0gNiBbY3R5cGU9Q09SRF07Ci0KLSAgcmVwZWF0ZWQgaW50MzIgUmVw
ZWF0ZWRQcmltaXRpdmVGaWVsZCA9IDc7Ci0gIHJlcGVhdGVkIHN0cmluZyBSZXBlYXRlZFN0cmlu
Z0ZpZWxkID0gODsKLSAgcmVwZWF0ZWQgRm9yZWlnbkVudW0gUmVwZWF0ZWRFbnVtRmllbGQgPSA5
OwotICByZXBlYXRlZCBGb3JlaWduTWVzc2FnZSBSZXBlYXRlZE1lc3NhZ2VGaWVsZCA9IDEwOwot
ICByZXBlYXRlZCBzdHJpbmcgUmVwZWF0ZWRTdHJpbmdQaWVjZUZpZWxkID0gMTEgW2N0eXBlPVNU
UklOR19QSUVDRV07Ci0gIHJlcGVhdGVkIHN0cmluZyBSZXBlYXRlZENvcmRGaWVsZCA9IDEyIFtj
dHlwZT1DT1JEXTsKLX0KLQotCi0vLyBXZSBsaXN0IGZpZWxkcyBvdXQgb2Ygb3JkZXIsIHRvIGVu
c3VyZSB0aGF0IHdlJ3JlIHVzaW5nIGZpZWxkIG51bWJlciBhbmQgbm90Ci0vLyBmaWVsZCBpbmRl
eCB0byBkZXRlcm1pbmUgc2VyaWFsaXphdGlvbiBvcmRlci4KLW1lc3NhZ2UgVGVzdEZpZWxkT3Jk
ZXJpbmdzIHsKLSAgb3B0aW9uYWwgc3RyaW5nIG15X3N0cmluZyA9IDExOwotICBleHRlbnNpb25z
IDIgdG8gMTA7Ci0gIG9wdGlvbmFsIGludDY0IG15X2ludCA9IDE7Ci0gIGV4dGVuc2lvbnMgMTIg
dG8gMTAwOwotICBvcHRpb25hbCBmbG9hdCBteV9mbG9hdCA9IDEwMTsKLSAgbWVzc2FnZSBOZXN0
ZWRNZXNzYWdlIHsKLSAgICBvcHRpb25hbCBpbnQ2NCBvbyA9IDI7Ci0gICAgLy8gVGhlIGZpZWxk
IG5hbWUgImIiIGZhaWxzIHRvIGNvbXBpbGUgaW4gcHJvdG8xIGJlY2F1c2UgaXQgY29uZmxpY3Rz
IHdpdGgKLSAgICAvLyBhIGxvY2FsIHZhcmlhYmxlIG5hbWVkICJiIiBpbiBvbmUgb2YgdGhlIGdl
bmVyYXRlZCBtZXRob2RzLiAgRG9oLgotICAgIC8vIFRoaXMgZmlsZSBuZWVkcyB0byBjb21waWxl
IGluIHByb3RvMSB0byB0ZXN0IGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LgotICAgIG9wdGlvbmFs
IGludDMyIGJiID0gMTsKLSAgfQotCi0gIG9wdGlvbmFsIE5lc3RlZE1lc3NhZ2Ugb3B0aW9uYWxf
bmVzdGVkX21lc3NhZ2UgID0gMjAwOwotfQotCi0KLWV4dGVuZCBUZXN0RmllbGRPcmRlcmluZ3Mg
ewotICBvcHRpb25hbCBzdHJpbmcgbXlfZXh0ZW5zaW9uX3N0cmluZyA9IDUwOwotICBvcHRpb25h
bCBpbnQzMiBteV9leHRlbnNpb25faW50ID0gNTsKLX0KLQotCi1tZXNzYWdlIFRlc3RFeHRyZW1l
RGVmYXVsdFZhbHVlcyB7Ci0gIG9wdGlvbmFsIGJ5dGVzIGVzY2FwZWRfYnl0ZXMgPSAxIFtkZWZh
dWx0ID0gIlwwXDAwMVxhXGJcZlxuXHJcdFx2XFxcJ1wiXHhmZSJdOwotICBvcHRpb25hbCB1aW50
MzIgbGFyZ2VfdWludDMyID0gMiBbZGVmYXVsdCA9IDB4RkZGRkZGRkZdOwotICBvcHRpb25hbCB1
aW50NjQgbGFyZ2VfdWludDY0ID0gMyBbZGVmYXVsdCA9IDB4RkZGRkZGRkZGRkZGRkZGRl07Ci0g
IG9wdGlvbmFsICBpbnQzMiBzbWFsbF9pbnQzMiAgPSA0IFtkZWZhdWx0ID0gLTB4N0ZGRkZGRkZd
OwotICBvcHRpb25hbCAgaW50NjQgc21hbGxfaW50NjQgID0gNSBbZGVmYXVsdCA9IC0weDdGRkZG
RkZGRkZGRkZGRkZdOwotICBvcHRpb25hbCAgaW50MzIgcmVhbGx5X3NtYWxsX2ludDMyID0gMjEg
W2RlZmF1bHQgPSAtMHg4MDAwMDAwMF07Ci0gIG9wdGlvbmFsICBpbnQ2NCByZWFsbHlfc21hbGxf
aW50NjQgPSAyMiBbZGVmYXVsdCA9IC0weDgwMDAwMDAwMDAwMDAwMDBdOwotCi0gIC8vIFRoZSBk
ZWZhdWx0IHZhbHVlIGhlcmUgaXMgVVRGLTggZm9yICJcdTEyMzQiLiAgKFdlIGNvdWxkIGFsc28g
anVzdCB0eXBlCi0gIC8vIHRoZSBVVEYtOCB0ZXh0IGRpcmVjdGx5IGludG8gdGhpcyB0ZXh0IGZp
bGUgcmF0aGVyIHRoYW4gZXNjYXBlIGl0LCBidXQKLSAgLy8gbG90cyBvZiBwZW9wbGUgdXNlIGVk
aXRvcnMgdGhhdCB3b3VsZCBiZSBjb25mdXNlZCBieSB0aGlzLikKLSAgb3B0aW9uYWwgc3RyaW5n
IHV0Zjhfc3RyaW5nID0gNiBbZGVmYXVsdCA9ICJcMzQxXDIxMFwyNjQiXTsKLQotICAvLyBUZXN0
cyBmb3Igc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCi0gIG9wdGlvbmFs
IGZsb2F0IHplcm9fZmxvYXQgPSA3IFtkZWZhdWx0ID0gMF07Ci0gIG9wdGlvbmFsIGZsb2F0IG9u
ZV9mbG9hdCA9IDggW2RlZmF1bHQgPSAxXTsKLSAgb3B0aW9uYWwgZmxvYXQgc21hbGxfZmxvYXQg
PSA5IFtkZWZhdWx0ID0gMS41XTsKLSAgb3B0aW9uYWwgZmxvYXQgbmVnYXRpdmVfb25lX2Zsb2F0
ID0gMTAgW2RlZmF1bHQgPSAtMV07Ci0gIG9wdGlvbmFsIGZsb2F0IG5lZ2F0aXZlX2Zsb2F0ID0g
MTEgW2RlZmF1bHQgPSAtMS41XTsKLSAgLy8gVXNpbmcgZXhwb25lbnRzCi0gIG9wdGlvbmFsIGZs
b2F0IGxhcmdlX2Zsb2F0ID0gMTIgW2RlZmF1bHQgPSAyRThdOwotICBvcHRpb25hbCBmbG9hdCBz
bWFsbF9uZWdhdGl2ZV9mbG9hdCA9IDEzIFtkZWZhdWx0ID0gLThlLTI4XTsKLQotICAvLyBUZXh0
IGZvciBub25maW5pdGUgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgotICBvcHRpb25hbCBkb3VibGUg
aW5mX2RvdWJsZSA9IDE0IFtkZWZhdWx0ID0gaW5mXTsKLSAgb3B0aW9uYWwgZG91YmxlIG5lZ19p
bmZfZG91YmxlID0gMTUgW2RlZmF1bHQgPSAtaW5mXTsKLSAgb3B0aW9uYWwgZG91YmxlIG5hbl9k
b3VibGUgPSAxNiBbZGVmYXVsdCA9IG5hbl07Ci0gIG9wdGlvbmFsIGZsb2F0IGluZl9mbG9hdCA9
IDE3IFtkZWZhdWx0ID0gaW5mXTsKLSAgb3B0aW9uYWwgZmxvYXQgbmVnX2luZl9mbG9hdCA9IDE4
IFtkZWZhdWx0ID0gLWluZl07Ci0gIG9wdGlvbmFsIGZsb2F0IG5hbl9mbG9hdCA9IDE5IFtkZWZh
dWx0ID0gbmFuXTsKLQotICAvLyBUZXN0cyBmb3IgQysrIHRyaWdyYXBocy4KLSAgLy8gVHJpZ3Jh
cGhzIHNob3VsZCBiZSBlc2NhcGVkIGluIEMrKyBnZW5lcmF0ZWQgZmlsZXMsIGJ1dCB0aGV5IHNo
b3VsZCBub3QgYmUKLSAgLy8gZXNjYXBlZCBmb3Igb3RoZXIgbGFuZ3VhZ2VzLgotICAvLyBOb3Rl
IHRoYXQgaW4gLnByb3RvIGZpbGUsICJcPyIgaXMgYSB2YWxpZCB3YXkgdG8gZXNjYXBlID8gaW4g
c3RyaW5nCi0gIC8vIGxpdGVyYWxzLgotICBvcHRpb25hbCBzdHJpbmcgY3BwX3RyaWdyYXBoID0g
MjAgW2RlZmF1bHQgPSAiPyBcPyA/PyBcPz8gXD8/PyA/Py8gP1w/LSJdOwotCi0gIC8vIFN0cmlu
ZyBkZWZhdWx0cyBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIgJ1wwMDAnCi0gIG9wdGlvbmFsIHN0
cmluZyBzdHJpbmdfd2l0aF96ZXJvICAgICAgID0gMjMgW2RlZmF1bHQgPSAiaGVsXDAwMGxvIl07
Ci0gIG9wdGlvbmFsICBieXRlcyBieXRlc193aXRoX3plcm8gICAgICAgID0gMjQgW2RlZmF1bHQg
PSAid29yXDAwMGxkIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBzdHJpbmdfcGllY2Vfd2l0aF96ZXJv
ID0gMjUgW2N0eXBlPVNUUklOR19QSUVDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iYWJcMDAwYyJdOwotICBvcHRpb25hbCBzdHJpbmcg
Y29yZF93aXRoX3plcm8gICAgICAgICA9IDI2IFtjdHlwZT1DT1JELAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSIxMlwwMDAzIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyByZXBsYWNlbWVudF9zdHJpbmcgICAgID0gMjcgW2RlZmF1bHQ9IiR7dW5r
bm93bn0iXTsKLX0KLQotbWVzc2FnZSBTcGFyc2VFbnVtTWVzc2FnZSB7Ci0gIG9wdGlvbmFsIFRl
c3RTcGFyc2VFbnVtIHNwYXJzZV9lbnVtID0gMTsKLX0KLQotLy8gVGVzdCBTdHJpbmcgYW5kIEJ5
dGVzOiBzdHJpbmcgaXMgZm9yIHZhbGlkIFVURi04IHN0cmluZ3MKLW1lc3NhZ2UgT25lU3RyaW5n
IHsKLSAgb3B0aW9uYWwgc3RyaW5nIGRhdGEgPSAxOwotfQotCi1tZXNzYWdlIE1vcmVTdHJpbmcg
ewotICByZXBlYXRlZCBzdHJpbmcgZGF0YSA9IDE7Ci19Ci0KLW1lc3NhZ2UgT25lQnl0ZXMgewot
ICBvcHRpb25hbCBieXRlcyBkYXRhID0gMTsKLX0KLQotbWVzc2FnZSBNb3JlQnl0ZXMgewotICBy
ZXBlYXRlZCBieXRlcyBkYXRhID0gMTsKLX0KLQotLy8gVGVzdCBpbnQzMiwgdWludDMyLCBpbnQ2
NCwgdWludDY0LCBhbmQgYm9vbCBhcmUgYWxsIGNvbXBhdGlibGUKLW1lc3NhZ2UgSW50MzJNZXNz
YWdlIHsKLSAgb3B0aW9uYWwgaW50MzIgZGF0YSA9IDE7Ci19Ci0KLW1lc3NhZ2UgVWludDMyTWVz
c2FnZSB7Ci0gIG9wdGlvbmFsIHVpbnQzMiBkYXRhID0gMTsKLX0KLQotbWVzc2FnZSBJbnQ2NE1l
c3NhZ2UgewotICBvcHRpb25hbCBpbnQ2NCBkYXRhID0gMTsKLX0KLQotbWVzc2FnZSBVaW50NjRN
ZXNzYWdlIHsKLSAgb3B0aW9uYWwgdWludDY0IGRhdGEgPSAxOwotfQotCi1tZXNzYWdlIEJvb2xN
ZXNzYWdlIHsKLSAgb3B0aW9uYWwgYm9vbCBkYXRhID0gMTsKLX0KLQotLy8gVGVzdCBvbmVvZnMu
Ci1tZXNzYWdlIFRlc3RPbmVvZiB7Ci0gIG9uZW9mIGZvbyB7Ci0gICAgaW50MzIgZm9vX2ludCA9
IDE7Ci0gICAgc3RyaW5nIGZvb19zdHJpbmcgPSAyOwotICAgIFRlc3RBbGxUeXBlcyBmb29fbWVz
c2FnZSA9IDM7Ci0gICAgZ3JvdXAgRm9vR3JvdXAgPSA0IHsKLSAgICAgIG9wdGlvbmFsIGludDMy
IGEgPSA1OwotICAgICAgb3B0aW9uYWwgc3RyaW5nIGIgPSA2OwotICAgIH0KLSAgfQotfQotCi1t
ZXNzYWdlIFRlc3RPbmVvZkJhY2t3YXJkc0NvbXBhdGlibGUgewotICBvcHRpb25hbCBpbnQzMiBm
b29faW50ID0gMTsKLSAgb3B0aW9uYWwgc3RyaW5nIGZvb19zdHJpbmcgPSAyOwotICBvcHRpb25h
bCBUZXN0QWxsVHlwZXMgZm9vX21lc3NhZ2UgPSAzOwotICBvcHRpb25hbCBncm91cCBGb29Hcm91
cCA9IDQgewotICAgIG9wdGlvbmFsIGludDMyIGEgPSA1OwotICAgIG9wdGlvbmFsIHN0cmluZyBi
ID0gNjsKLSAgfQotfQotCi1tZXNzYWdlIFRlc3RPbmVvZjIgewotICBvbmVvZiBmb28gewotICAg
IGludDMyIGZvb19pbnQgPSAxOwotICAgIHN0cmluZyBmb29fc3RyaW5nID0gMjsKLSAgICBzdHJp
bmcgZm9vX2NvcmQgPSAzIFtjdHlwZT1DT1JEXTsKLSAgICBzdHJpbmcgZm9vX3N0cmluZ19waWVj
ZSA9IDQgW2N0eXBlPVNUUklOR19QSUVDRV07Ci0gICAgYnl0ZXMgZm9vX2J5dGVzID0gNTsKLSAg
ICBOZXN0ZWRFbnVtIGZvb19lbnVtID0gNjsKLSAgICBOZXN0ZWRNZXNzYWdlIGZvb19tZXNzYWdl
ID0gNzsKLSAgICBncm91cCBGb29Hcm91cCA9IDggewotICAgICAgb3B0aW9uYWwgaW50MzIgYSA9
IDk7Ci0gICAgICBvcHRpb25hbCBzdHJpbmcgYiA9IDEwOwotICAgIH0KLSAgICBOZXN0ZWRNZXNz
YWdlIGZvb19sYXp5X21lc3NhZ2UgPSAxMSBbbGF6eT10cnVlXTsKLSAgfQotCi0gIG9uZW9mIGJh
ciB7Ci0gICAgaW50MzIgYmFyX2ludCA9IDEyIFtkZWZhdWx0ID0gNV07Ci0gICAgc3RyaW5nIGJh
cl9zdHJpbmcgPSAxMyBbZGVmYXVsdCA9ICJTVFJJTkciXTsKLSAgICBzdHJpbmcgYmFyX2NvcmQg
PSAxNCBbY3R5cGU9Q09SRCwgZGVmYXVsdCA9ICJDT1JEIl07Ci0gICAgc3RyaW5nIGJhcl9zdHJp
bmdfcGllY2UgPSAxNSBbY3R5cGU9U1RSSU5HX1BJRUNFLCBkZWZhdWx0ID0gIlNQSUVDRSJdOwot
ICAgIGJ5dGVzIGJhcl9ieXRlcyA9IDE2IFtkZWZhdWx0ID0gIkJZVEVTIl07Ci0gICAgTmVzdGVk
RW51bSBiYXJfZW51bSA9IDE3IFtkZWZhdWx0ID0gQkFSXTsKLSAgfQotCi0gIG9wdGlvbmFsIGlu
dDMyIGJhel9pbnQgPSAxODsKLSAgb3B0aW9uYWwgc3RyaW5nIGJhel9zdHJpbmcgPSAxOSBbZGVm
YXVsdCA9ICJCQVoiXTsKLQotICBtZXNzYWdlIE5lc3RlZE1lc3NhZ2UgewotICAgIG9wdGlvbmFs
IGludDY0IHF1eF9pbnQgPSAxOwotICAgIHJlcGVhdGVkIGludDMyIGNvcmdlX2ludCA9IDI7Ci0g
IH0KLQotICBlbnVtIE5lc3RlZEVudW0gewotICAgIEZPTyA9IDE7Ci0gICAgQkFSID0gMjsKLSAg
ICBCQVogPSAzOwotICB9Ci19Ci0KLW1lc3NhZ2UgVGVzdFJlcXVpcmVkT25lb2YgewotICBvbmVv
ZiBmb28gewotICAgIGludDMyIGZvb19pbnQgPSAxOwotICAgIHN0cmluZyBmb29fc3RyaW5nID0g
MjsKLSAgICBOZXN0ZWRNZXNzYWdlIGZvb19tZXNzYWdlID0gMzsKLSAgfQotICBtZXNzYWdlIE5l
c3RlZE1lc3NhZ2UgewotICAgIHJlcXVpcmVkIGRvdWJsZSByZXF1aXJlZF9kb3VibGUgPSAxOwot
ICB9Ci19Ci0KLQotLy8gVGVzdCBtZXNzYWdlcyBmb3IgcGFja2VkIGZpZWxkcwotCi1tZXNzYWdl
IFRlc3RQYWNrZWRUeXBlcyB7Ci0gIHJlcGVhdGVkICAgIGludDMyIHBhY2tlZF9pbnQzMiAgICA9
ICA5MCBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgIGludDY0IHBhY2tlZF9pbnQ2NCAg
ICA9ICA5MSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgdWludDMyIHBhY2tlZF91aW50
MzIgICA9ICA5MiBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgdWludDY0IHBhY2tlZF91
aW50NjQgICA9ICA5MyBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgc2ludDMyIHBhY2tl
ZF9zaW50MzIgICA9ICA5NCBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgc2ludDY0IHBh
Y2tlZF9zaW50NjQgICA9ICA5NSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICBmaXhlZDMy
IHBhY2tlZF9maXhlZDMyICA9ICA5NiBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICBmaXhl
ZDY0IHBhY2tlZF9maXhlZDY0ICA9ICA5NyBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkIHNm
aXhlZDMyIHBhY2tlZF9zZml4ZWQzMiA9ICA5OCBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVk
IHNmaXhlZDY0IHBhY2tlZF9zZml4ZWQ2NCA9ICA5OSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVh
dGVkICAgIGZsb2F0IHBhY2tlZF9mbG9hdCAgICA9IDEwMCBbcGFja2VkID0gdHJ1ZV07Ci0gIHJl
cGVhdGVkICAgZG91YmxlIHBhY2tlZF9kb3VibGUgICA9IDEwMSBbcGFja2VkID0gdHJ1ZV07Ci0g
IHJlcGVhdGVkICAgICBib29sIHBhY2tlZF9ib29sICAgICA9IDEwMiBbcGFja2VkID0gdHJ1ZV07
Ci0gIHJlcGVhdGVkIEZvcmVpZ25FbnVtIHBhY2tlZF9lbnVtICA9IDEwMyBbcGFja2VkID0gdHJ1
ZV07Ci19Ci0KLS8vIEEgbWVzc2FnZSB3aXRoIHRoZSBzYW1lIGZpZWxkcyBhcyBUZXN0UGFja2Vk
VHlwZXMsIGJ1dCB3aXRob3V0IHBhY2tpbmcuIFVzZWQKLS8vIHRvIHRlc3QgcGFja2VkIDwtPiB1
bnBhY2tlZCB3aXJlIGNvbXBhdGliaWxpdHkuCi1tZXNzYWdlIFRlc3RVbnBhY2tlZFR5cGVzIHsK
LSAgcmVwZWF0ZWQgICAgaW50MzIgdW5wYWNrZWRfaW50MzIgICAgPSAgOTAgW3BhY2tlZCA9IGZh
bHNlXTsKLSAgcmVwZWF0ZWQgICAgaW50NjQgdW5wYWNrZWRfaW50NjQgICAgPSAgOTEgW3BhY2tl
ZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICB1aW50MzIgdW5wYWNrZWRfdWludDMyICAgPSAgOTIg
W3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICB1aW50NjQgdW5wYWNrZWRfdWludDY0ICAg
PSAgOTMgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICBzaW50MzIgdW5wYWNrZWRfc2lu
dDMyICAgPSAgOTQgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICBzaW50NjQgdW5wYWNr
ZWRfc2ludDY0ICAgPSAgOTUgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIg
dW5wYWNrZWRfZml4ZWQzMiAgPSAgOTYgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgIGZp
eGVkNjQgdW5wYWNrZWRfZml4ZWQ2NCAgPSAgOTcgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0
ZWQgc2ZpeGVkMzIgdW5wYWNrZWRfc2ZpeGVkMzIgPSAgOTggW3BhY2tlZCA9IGZhbHNlXTsKLSAg
cmVwZWF0ZWQgc2ZpeGVkNjQgdW5wYWNrZWRfc2ZpeGVkNjQgPSAgOTkgW3BhY2tlZCA9IGZhbHNl
XTsKLSAgcmVwZWF0ZWQgICAgZmxvYXQgdW5wYWNrZWRfZmxvYXQgICAgPSAxMDAgW3BhY2tlZCA9
IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICBkb3VibGUgdW5wYWNrZWRfZG91YmxlICAgPSAxMDEgW3Bh
Y2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgdW5wYWNrZWRfYm9vbCAgICAgPSAx
MDIgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgRm9yZWlnbkVudW0gdW5wYWNrZWRfZW51
bSAgPSAxMDMgW3BhY2tlZCA9IGZhbHNlXTsKLX0KLQotbWVzc2FnZSBUZXN0UGFja2VkRXh0ZW5z
aW9ucyB7Ci0gIGV4dGVuc2lvbnMgMSB0byBtYXg7Ci19Ci0KLWV4dGVuZCBUZXN0UGFja2VkRXh0
ZW5zaW9ucyB7Ci0gIHJlcGVhdGVkICAgIGludDMyIHBhY2tlZF9pbnQzMl9leHRlbnNpb24gICAg
PSAgOTAgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCAgICBpbnQ2NCBwYWNrZWRfaW50NjRf
ZXh0ZW5zaW9uICAgID0gIDkxIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICB1aW50MzIg
cGFja2VkX3VpbnQzMl9leHRlbnNpb24gICA9ICA5MiBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVh
dGVkICAgdWludDY0IHBhY2tlZF91aW50NjRfZXh0ZW5zaW9uICAgPSAgOTMgW3BhY2tlZCA9IHRy
dWVdOwotICByZXBlYXRlZCAgIHNpbnQzMiBwYWNrZWRfc2ludDMyX2V4dGVuc2lvbiAgID0gIDk0
IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICBzaW50NjQgcGFja2VkX3NpbnQ2NF9leHRl
bnNpb24gICA9ICA5NSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICBmaXhlZDMyIHBhY2tl
ZF9maXhlZDMyX2V4dGVuc2lvbiAgPSAgOTYgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCAg
Zml4ZWQ2NCBwYWNrZWRfZml4ZWQ2NF9leHRlbnNpb24gID0gIDk3IFtwYWNrZWQgPSB0cnVlXTsK
LSAgcmVwZWF0ZWQgc2ZpeGVkMzIgcGFja2VkX3NmaXhlZDMyX2V4dGVuc2lvbiA9ICA5OCBbcGFj
a2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IHBhY2tlZF9zZml4ZWQ2NF9leHRlbnNp
b24gPSAgOTkgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCAgICBmbG9hdCBwYWNrZWRfZmxv
YXRfZXh0ZW5zaW9uICAgID0gMTAwIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICBkb3Vi
bGUgcGFja2VkX2RvdWJsZV9leHRlbnNpb24gICA9IDEwMSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJl
cGVhdGVkICAgICBib29sIHBhY2tlZF9ib29sX2V4dGVuc2lvbiAgICAgPSAxMDIgW3BhY2tlZCA9
IHRydWVdOwotICByZXBlYXRlZCBGb3JlaWduRW51bSBwYWNrZWRfZW51bV9leHRlbnNpb24gID0g
MTAzIFtwYWNrZWQgPSB0cnVlXTsKLX0KLQotbWVzc2FnZSBUZXN0VW5wYWNrZWRFeHRlbnNpb25z
IHsKLSAgZXh0ZW5zaW9ucyAxIHRvIG1heDsKLX0KLQotZXh0ZW5kIFRlc3RVbnBhY2tlZEV4dGVu
c2lvbnMgewotICByZXBlYXRlZCAgICBpbnQzMiB1bnBhY2tlZF9pbnQzMl9leHRlbnNpb24gICAg
PSAgOTAgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICAgaW50NjQgdW5wYWNrZWRfaW50
NjRfZXh0ZW5zaW9uICAgID0gIDkxIFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAgdWlu
dDMyIHVucGFja2VkX3VpbnQzMl9leHRlbnNpb24gICA9ICA5MiBbcGFja2VkID0gZmFsc2VdOwot
ICByZXBlYXRlZCAgIHVpbnQ2NCB1bnBhY2tlZF91aW50NjRfZXh0ZW5zaW9uICAgPSAgOTMgW3Bh
Y2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICBzaW50MzIgdW5wYWNrZWRfc2ludDMyX2V4dGVu
c2lvbiAgID0gIDk0IFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAgc2ludDY0IHVucGFj
a2VkX3NpbnQ2NF9leHRlbnNpb24gICA9ICA5NSBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRl
ZCAgZml4ZWQzMiB1bnBhY2tlZF9maXhlZDMyX2V4dGVuc2lvbiAgPSAgOTYgW3BhY2tlZCA9IGZh
bHNlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkNjQgdW5wYWNrZWRfZml4ZWQ2NF9leHRlbnNpb24gID0g
IDk3IFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHVucGFja2VkX3NmaXhl
ZDMyX2V4dGVuc2lvbiA9ICA5OCBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCBzZml4ZWQ2
NCB1bnBhY2tlZF9zZml4ZWQ2NF9leHRlbnNpb24gPSAgOTkgW3BhY2tlZCA9IGZhbHNlXTsKLSAg
cmVwZWF0ZWQgICAgZmxvYXQgdW5wYWNrZWRfZmxvYXRfZXh0ZW5zaW9uICAgID0gMTAwIFtwYWNr
ZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAgZG91YmxlIHVucGFja2VkX2RvdWJsZV9leHRlbnNp
b24gICA9IDEwMSBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCAgICAgYm9vbCB1bnBhY2tl
ZF9ib29sX2V4dGVuc2lvbiAgICAgPSAxMDIgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQg
Rm9yZWlnbkVudW0gdW5wYWNrZWRfZW51bV9leHRlbnNpb24gID0gMTAzIFtwYWNrZWQgPSBmYWxz
ZV07Ci19Ci0KLS8vIFVzZWQgYnkgRXh0ZW5zaW9uU2V0VGVzdC9EeW5hbWljRXh0ZW5zaW9ucy4g
IFRoZSB0ZXN0IGFjdHVhbGx5IGJ1aWxkcwotLy8gYSBzZXQgb2YgZXh0ZW5zaW9ucyB0byBUZXN0
QWxsRXh0ZW5zaW9ucyBkeW5hbWljYWxseSwgYmFzZWQgb24gdGhlIGZpZWxkcwotLy8gb2YgdGhp
cyBtZXNzYWdlIHR5cGUuCi1tZXNzYWdlIFRlc3REeW5hbWljRXh0ZW5zaW9ucyB7Ci0gIGVudW0g
RHluYW1pY0VudW1UeXBlIHsKLSAgICBEWU5BTUlDX0ZPTyA9IDIyMDA7Ci0gICAgRFlOQU1JQ19C
QVIgPSAyMjAxOwotICAgIERZTkFNSUNfQkFaID0gMjIwMjsKLSAgfQotICBtZXNzYWdlIER5bmFt
aWNNZXNzYWdlVHlwZSB7Ci0gICAgb3B0aW9uYWwgaW50MzIgZHluYW1pY19maWVsZCA9IDIxMDA7
Ci0gIH0KLQotICBvcHRpb25hbCBmaXhlZDMyIHNjYWxhcl9leHRlbnNpb24gPSAyMDAwOwotICBv
cHRpb25hbCBGb3JlaWduRW51bSBlbnVtX2V4dGVuc2lvbiA9IDIwMDE7Ci0gIG9wdGlvbmFsIER5
bmFtaWNFbnVtVHlwZSBkeW5hbWljX2VudW1fZXh0ZW5zaW9uID0gMjAwMjsKLQotICBvcHRpb25h
bCBGb3JlaWduTWVzc2FnZSBtZXNzYWdlX2V4dGVuc2lvbiA9IDIwMDM7Ci0gIG9wdGlvbmFsIER5
bmFtaWNNZXNzYWdlVHlwZSBkeW5hbWljX21lc3NhZ2VfZXh0ZW5zaW9uID0gMjAwNDsKLQotICBy
ZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRfZXh0ZW5zaW9uID0gMjAwNTsKLSAgcmVwZWF0ZWQgc2lu
dDMyIHBhY2tlZF9leHRlbnNpb24gPSAyMDA2IFtwYWNrZWQgPSB0cnVlXTsKLX0KLQotbWVzc2Fn
ZSBUZXN0UmVwZWF0ZWRTY2FsYXJEaWZmZXJlbnRUYWdTaXplcyB7Ci0gIC8vIFBhcnNpbmcgcmVw
ZWF0ZWQgZml4ZWQgc2l6ZSB2YWx1ZXMgdXNlZCB0byBmYWlsLiBUaGlzIG1lc3NhZ2UgbmVlZHMg
dG8gYmUKLSAgLy8gdXNlZCBpbiBvcmRlciB0byBnZXQgYSB0YWcgb2YgdGhlIHJpZ2h0IHNpemU7
IGFsbCBvZiB0aGUgcmVwZWF0ZWQgZmllbGRzCi0gIC8vIGluIFRlc3RBbGxUeXBlcyBkaWRuJ3Qg
dHJpZ2dlciB0aGUgY2hlY2suCi0gIHJlcGVhdGVkIGZpeGVkMzIgcmVwZWF0ZWRfZml4ZWQzMiA9
IDEyOwotICAvLyBDaGVjayBmb3IgYSB2YXJpbnQgdHlwZSwganVzdCBmb3IgZ29vZCBtZWFzdXJl
LgotICByZXBlYXRlZCBpbnQzMiAgIHJlcGVhdGVkX2ludDMyICAgPSAxMzsKLQotICAvLyBUaGVz
ZSBoYXZlIHR3by1ieXRlIHRhZ3MuCi0gIHJlcGVhdGVkIGZpeGVkNjQgcmVwZWF0ZWRfZml4ZWQ2
NCA9IDIwNDY7Ci0gIHJlcGVhdGVkIGludDY0ICAgcmVwZWF0ZWRfaW50NjQgICA9IDIwNDc7Ci0K
LSAgLy8gVGhyZWUgYnl0ZSB0YWdzLgotICByZXBlYXRlZCBmbG9hdCAgIHJlcGVhdGVkX2Zsb2F0
ICAgPSAyNjIxNDI7Ci0gIHJlcGVhdGVkIHVpbnQ2NCAgcmVwZWF0ZWRfdWludDY0ICA9IDI2MjE0
MzsKLX0KLQotLy8gVGVzdCB0aGF0IGlmIGFuIG9wdGlvbmFsIG9yIHJlcXVpcmVkIG1lc3NhZ2Uv
Z3JvdXAgZmllbGQgYXBwZWFycyBtdWx0aXBsZQotLy8gdGltZXMgaW4gdGhlIGlucHV0LCB0aGV5
IG5lZWQgdG8gYmUgbWVyZ2VkLgotbWVzc2FnZSBUZXN0UGFyc2luZ01lcmdlIHsKLSAgLy8gUmVw
ZWF0ZWRGaWVsZHNHZW5lcmF0b3IgZGVmaW5lcyBtYXRjaGluZyBmaWVsZCB0eXBlcyBhcyBUZXN0
UGFyc2luZ01lcmdlLAotICAvLyBleGNlcHQgdGhhdCBhbGwgZmllbGRzIGFyZSByZXBlYXRlZC4g
SW4gdGhlIHRlc3RzLCB3ZSB3aWxsIHNlcmlhbGl6ZSB0aGUKLSAgLy8gUmVwZWF0ZWRGaWVsZHNH
ZW5lcmF0b3IgdG8gYnl0ZXMsIGFuZCBwYXJzZSB0aGUgYnl0ZXMgdG8gVGVzdFBhcnNpbmdNZXJn
ZS4KLSAgLy8gUmVwZWF0ZWQgZmllbGRzIGluIFJlcGVhdGVkRmllbGRzR2VuZXJhdG9yIGFyZSBl
eHBlY3RlZCB0byBiZSBtZXJnZWQgaW50bwotICAvLyB0aGUgY29ycmVzcG9uZGluZyByZXF1aXJl
ZC9vcHRpb25hbCBmaWVsZHMgaW4gVGVzdFBhcnNpbmdNZXJnZS4KLSAgbWVzc2FnZSBSZXBlYXRl
ZEZpZWxkc0dlbmVyYXRvciB7Ci0gICAgcmVwZWF0ZWQgVGVzdEFsbFR5cGVzIGZpZWxkMSA9IDE7
Ci0gICAgcmVwZWF0ZWQgVGVzdEFsbFR5cGVzIGZpZWxkMiA9IDI7Ci0gICAgcmVwZWF0ZWQgVGVz
dEFsbFR5cGVzIGZpZWxkMyA9IDM7Ci0gICAgcmVwZWF0ZWQgZ3JvdXAgR3JvdXAxID0gMTAgewot
ICAgICAgb3B0aW9uYWwgVGVzdEFsbFR5cGVzIGZpZWxkMSA9IDExOwotICAgIH0KLSAgICByZXBl
YXRlZCBncm91cCBHcm91cDIgPSAyMCB7Ci0gICAgICBvcHRpb25hbCBUZXN0QWxsVHlwZXMgZmll
bGQxID0gMjE7Ci0gICAgfQotICAgIHJlcGVhdGVkIFRlc3RBbGxUeXBlcyBleHQxID0gMTAwMDsK
LSAgICByZXBlYXRlZCBUZXN0QWxsVHlwZXMgZXh0MiA9IDEwMDE7Ci0gIH0KLSAgcmVxdWlyZWQg
VGVzdEFsbFR5cGVzIHJlcXVpcmVkX2FsbF90eXBlcyA9IDE7Ci0gIG9wdGlvbmFsIFRlc3RBbGxU
eXBlcyBvcHRpb25hbF9hbGxfdHlwZXMgPSAyOwotICByZXBlYXRlZCBUZXN0QWxsVHlwZXMgcmVw
ZWF0ZWRfYWxsX3R5cGVzID0gMzsKLSAgb3B0aW9uYWwgZ3JvdXAgT3B0aW9uYWxHcm91cCA9IDEw
IHsKLSAgICBvcHRpb25hbCBUZXN0QWxsVHlwZXMgb3B0aW9uYWxfZ3JvdXBfYWxsX3R5cGVzID0g
MTE7Ci0gIH0KLSAgcmVwZWF0ZWQgZ3JvdXAgUmVwZWF0ZWRHcm91cCA9IDIwIHsKLSAgICBvcHRp
b25hbCBUZXN0QWxsVHlwZXMgcmVwZWF0ZWRfZ3JvdXBfYWxsX3R5cGVzID0gMjE7Ci0gIH0KLSAg
ZXh0ZW5zaW9ucyAxMDAwIHRvIG1heDsKLSAgZXh0ZW5kIFRlc3RQYXJzaW5nTWVyZ2UgewotICAg
IG9wdGlvbmFsIFRlc3RBbGxUeXBlcyBvcHRpb25hbF9leHQgPSAxMDAwOwotICAgIHJlcGVhdGVk
IFRlc3RBbGxUeXBlcyByZXBlYXRlZF9leHQgPSAxMDAxOwotICB9Ci19Ci0KLW1lc3NhZ2UgVGVz
dENvbW1lbnRJbmplY3Rpb25NZXNzYWdlIHsKLSAgLy8gKi8gPC0gVGhpcyBzaG91bGQgbm90IGNs
b3NlIHRoZSBnZW5lcmF0ZWQgZG9jIGNvbW1lbnQKLSAgb3B0aW9uYWwgc3RyaW5nIGEgPSAxIFtk
ZWZhdWx0PSIqLyA8LSBOZWl0aGVyIHNob3VsZCB0aGlzLiJdOwotfQotCi0KLS8vIFRlc3QgdGhh
dCBSUEMgc2VydmljZXMgd29yay4KLW1lc3NhZ2UgRm9vUmVxdWVzdCAge30KLW1lc3NhZ2UgRm9v
UmVzcG9uc2Uge30KLQotbWVzc2FnZSBGb29DbGllbnRNZXNzYWdlIHt9Ci1tZXNzYWdlIEZvb1Nl
cnZlck1lc3NhZ2V7fQotCi1zZXJ2aWNlIFRlc3RTZXJ2aWNlIHsKLSAgcnBjIEZvbyhGb29SZXF1
ZXN0KSByZXR1cm5zIChGb29SZXNwb25zZSk7Ci0gIHJwYyBCYXIoQmFyUmVxdWVzdCkgcmV0dXJu
cyAoQmFyUmVzcG9uc2UpOwotfQotCi0KLW1lc3NhZ2UgQmFyUmVxdWVzdCAge30KLW1lc3NhZ2Ug
QmFyUmVzcG9uc2Uge30KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0
X2FyZW5hLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2FyZW5hLnByb3RvCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDdlNDM3ZTE2M2UxYTJlMzQ0Mjg2OWE1NjIz
OTczZjkyNTFlYmM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9hcmVuYS5wcm90bworKysgL2Rldi9udWxs
CkBAIC0xLDQ2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1z
eW50YXggPSAicHJvdG8yIjsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9f
YXJlbmFfaW1wb3J0LnByb3RvIjsKLQotcGFja2FnZSBwcm90bzJfYXJlbmFfdW5pdHRlc3Q7Ci0K
LW9wdGlvbiBjY19lbmFibGVfYXJlbmFzID0gdHJ1ZTsKLQotbWVzc2FnZSBOZXN0ZWRNZXNzYWdl
IHsKLSAgb3B0aW9uYWwgaW50MzIgZCA9IDE7Ci19Ci0KLW1lc3NhZ2UgQXJlbmFNZXNzYWdlIHsK
LSAgcmVwZWF0ZWQgTmVzdGVkTWVzc2FnZSAgcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgPSAxOwot
ICByZXBlYXRlZCBJbXBvcnROb0FyZW5hTmVzdGVkTWVzc2FnZSAgcmVwZWF0ZWRfaW1wb3J0X25v
X2FyZW5hX21lc3NhZ2UgPSAyOwotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91
bml0dGVzdF9jdXN0b21fb3B0aW9ucy5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVz
dF9jdXN0b21fb3B0aW9ucy5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNj
MGUzNjJjNTZjNzQzNzRiNDE4Mzk2NWRkZDY5ODM0NTgzZjBjYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rf
Y3VzdG9tX29wdGlvbnMucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw0MjEgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogYmVuanlAZ29vZ2xl
LmNvbSAoQmVuankgV2VpbmJlcmdlcikKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBC
dWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3Ro
ZXJzLgotLy8KLS8vIEEgcHJvdG8gZmlsZSB1c2VkIHRvIHRlc3QgdGhlICJjdXN0b20gb3B0aW9u
cyIgZmVhdHVyZSBvZiBnb29nbGUucHJvdG9idWYuCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi0v
LyBTb21lIGdlbmVyaWNfc2VydmljZXMgb3B0aW9uKHMpIGFkZGVkIGF1dG9tYXRpY2FsbHkuCi0v
LyBTZWU6ICBodHRwOi8vZ28vcHJvdG8yLWdlbmVyaWMtc2VydmljZXMtZGVmYXVsdAotb3B0aW9u
IGNjX2dlbmVyaWNfc2VydmljZXMgPSB0cnVlOyAgICAgLy8gYXV0by1hZGRlZAotb3B0aW9uIGph
dmFfZ2VuZXJpY19zZXJ2aWNlcyA9IHRydWU7ICAgLy8gYXV0by1hZGRlZAotb3B0aW9uIHB5X2dl
bmVyaWNfc2VydmljZXMgPSB0cnVlOwotCi0vLyBBIGN1c3RvbSBmaWxlIG9wdGlvbiAoZGVmaW5l
ZCBiZWxvdykuCi1vcHRpb24gKGZpbGVfb3B0MSkgPSA5ODc2NTQzMjEwOwotCi1pbXBvcnQgImdv
b2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvIjsKLQotLy8gV2UgZG9uJ3QgcHV0IHRoaXMg
aW4gYSBwYWNrYWdlIHdpdGhpbiBwcm90bzIgYmVjYXVzZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQot
Ly8gdGhhdCB0aGUgZ2VuZXJhdGVkIGNvZGUgZG9lc24ndCBkZXBlbmQgb24gYmVpbmcgaW4gdGhl
IHByb3RvMiBuYW1lc3BhY2UuCi1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi0KLS8vIFNv
bWUgc2ltcGxlIHRlc3QgY3VzdG9tIG9wdGlvbnMgb2YgdmFyaW91cyB0eXBlcy4KLQotZXh0ZW5k
IGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucyB7Ci0gIG9wdGlvbmFsIHVpbnQ2NCBmaWxlX29w
dDEgPSA3NzM2OTc0OwotfQotCi1leHRlbmQgZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25z
IHsKLSAgb3B0aW9uYWwgaW50MzIgbWVzc2FnZV9vcHQxID0gNzczOTAzNjsKLX0KLQotZXh0ZW5k
IGdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMgewotICBvcHRpb25hbCBmaXhlZDY0IGZpZWxk
X29wdDEgPSA3NzQwOTM2OwotICAvLyBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyB0aGF0IHdl
IGNvcnJlY3RseSByZWdpc3RlciBkZWZhdWx0IHZhbHVlcyBmb3IKLSAgLy8gZXh0ZW5zaW9uIG9w
dGlvbnMuCi0gIG9wdGlvbmFsIGludDMyIGZpZWxkX29wdDIgPSA3NzUzOTEzIFtkZWZhdWx0PTQy
XTsKLX0KLQotZXh0ZW5kIGdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucyB7Ci0gIG9wdGlvbmFs
IHNmaXhlZDMyIGVudW1fb3B0MSA9IDc3NTM1NzY7Ci19Ci0KLWV4dGVuZCBnb29nbGUucHJvdG9i
dWYuRW51bVZhbHVlT3B0aW9ucyB7Ci0gIG9wdGlvbmFsIGludDMyIGVudW1fdmFsdWVfb3B0MSA9
IDE1NjA2Nzg7Ci19Ci0KLWV4dGVuZCBnb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMgewot
ICBvcHRpb25hbCBzaW50NjQgc2VydmljZV9vcHQxID0gNzg4NzY1MDsKLX0KLQotZW51bSBNZXRo
b2RPcHQxIHsKLSAgTUVUSE9ET1BUMV9WQUwxID0gMTsKLSAgTUVUSE9ET1BUMV9WQUwyID0gMjsK
LX0KLQotZXh0ZW5kIGdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zIHsKLSAgb3B0aW9uYWwg
TWV0aG9kT3B0MSBtZXRob2Rfb3B0MSA9IDc4OTA4NjA7Ci19Ci0KLS8vIEEgdGVzdCBtZXNzYWdl
IHdpdGggY3VzdG9tIG9wdGlvbnMgYXQgYWxsIHBvc3NpYmxlIGxvY2F0aW9ucyAoYW5kIGFsc28g
c29tZQotLy8gcmVndWxhciBvcHRpb25zLCB0byBtYWtlIHN1cmUgdGhleSBpbnRlcmFjdCBuaWNl
bHkpLgotbWVzc2FnZSBUZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRpb25zIHsKLSAgb3B0aW9uIG1l
c3NhZ2Vfc2V0X3dpcmVfZm9ybWF0ID0gZmFsc2U7Ci0KLSAgb3B0aW9uIChtZXNzYWdlX29wdDEp
ID0gLTU2OwotCi0gIG9wdGlvbmFsIHN0cmluZyBmaWVsZDEgPSAxIFtjdHlwZT1DT1JELAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkX29wdDEpPTg3NjU0MzIxMDldOwotCi0g
IGVudW0gQW5FbnVtIHsKLSAgICBvcHRpb24gKGVudW1fb3B0MSkgPSAtNzg5OwotCi0gICAgQU5F
TlVNX1ZBTDEgPSAxOwotICAgIEFORU5VTV9WQUwyID0gMiBbKGVudW1fdmFsdWVfb3B0MSkgPSAx
MjNdOwotICB9Ci19Ci0KLQotLy8gQSB0ZXN0IFJQQyBzZXJ2aWNlIHdpdGggY3VzdG9tIG9wdGlv
bnMgYXQgYWxsIHBvc3NpYmxlIGxvY2F0aW9ucyAoYW5kIGFsc28KLS8vIHNvbWUgcmVndWxhciBv
cHRpb25zLCB0byBtYWtlIHN1cmUgdGhleSBpbnRlcmFjdCBuaWNlbHkpLgotbWVzc2FnZSBDdXN0
b21PcHRpb25Gb29SZXF1ZXN0IHsKLX0KLQotbWVzc2FnZSBDdXN0b21PcHRpb25Gb29SZXNwb25z
ZSB7Ci19Ci0KLW1lc3NhZ2UgQ3VzdG9tT3B0aW9uRm9vQ2xpZW50TWVzc2FnZSB7Ci19Ci0KLW1l
c3NhZ2UgQ3VzdG9tT3B0aW9uRm9vU2VydmVyTWVzc2FnZSB7Ci19Ci0KLXNlcnZpY2UgVGVzdFNl
cnZpY2VXaXRoQ3VzdG9tT3B0aW9ucyB7Ci0gIG9wdGlvbiAoc2VydmljZV9vcHQxKSA9IC05ODc2
NTQzMjEwOwotCi0gIHJwYyBGb28oQ3VzdG9tT3B0aW9uRm9vUmVxdWVzdCkgcmV0dXJucyAoQ3Vz
dG9tT3B0aW9uRm9vUmVzcG9uc2UpIHsKLSAgICBvcHRpb24gKG1ldGhvZF9vcHQxKSA9IE1FVEhP
RE9QVDFfVkFMMjsKLSAgfQotfQotCi0KLQotLy8gT3B0aW9ucyBvZiBldmVyeSBwb3NzaWJsZSBm
aWVsZCB0eXBlLCBzbyB3ZSBjYW4gdGVzdCB0aGVtIGFsbCBleGhhdXN0aXZlbHkuCi0KLW1lc3Nh
Z2UgRHVtbXlNZXNzYWdlQ29udGFpbmluZ0VudW0gewotICBlbnVtIFRlc3RFbnVtVHlwZSB7Ci0g
ICAgVEVTVF9PUFRJT05fRU5VTV9UWVBFMSA9IDIyOwotICAgIFRFU1RfT1BUSU9OX0VOVU1fVFlQ
RTIgPSAtMjM7Ci0gIH0KLX0KLQotbWVzc2FnZSBEdW1teU1lc3NhZ2VJbnZhbGlkQXNPcHRpb25U
eXBlIHsKLX0KLQotZXh0ZW5kIGdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucyB7Ci0gIG9w
dGlvbmFsICAgICAgICAgYm9vbCAgICAgYm9vbF9vcHQgPSA3NzA2MDkwOwotICBvcHRpb25hbCAg
ICAgICAgaW50MzIgICAgaW50MzJfb3B0ID0gNzcwNTcwOTsKLSAgb3B0aW9uYWwgICAgICAgIGlu
dDY0ICAgIGludDY0X29wdCA9IDc3MDU1NDI7Ci0gIG9wdGlvbmFsICAgICAgIHVpbnQzMiAgIHVp
bnQzMl9vcHQgPSA3NzA0ODgwOwotICBvcHRpb25hbCAgICAgICB1aW50NjQgICB1aW50NjRfb3B0
ID0gNzcwMjM2NzsKLSAgb3B0aW9uYWwgICAgICAgc2ludDMyICAgc2ludDMyX29wdCA9IDc3MDE1
Njg7Ci0gIG9wdGlvbmFsICAgICAgIHNpbnQ2NCAgIHNpbnQ2NF9vcHQgPSA3NzAwODYzOwotICBv
cHRpb25hbCAgICAgIGZpeGVkMzIgIGZpeGVkMzJfb3B0ID0gNzcwMDMwNzsKLSAgb3B0aW9uYWwg
ICAgICBmaXhlZDY0ICBmaXhlZDY0X29wdCA9IDc3MDAxOTQ7Ci0gIG9wdGlvbmFsICAgICBzZml4
ZWQzMiBzZml4ZWQzMl9vcHQgPSA3Njk4NjQ1OwotICBvcHRpb25hbCAgICAgc2ZpeGVkNjQgc2Zp
eGVkNjRfb3B0ID0gNzY4NTQ3NTsKLSAgb3B0aW9uYWwgICAgICAgIGZsb2F0ICAgIGZsb2F0X29w
dCA9IDc2NzUzOTA7Ci0gIG9wdGlvbmFsICAgICAgIGRvdWJsZSAgIGRvdWJsZV9vcHQgPSA3Njcz
MjkzOwotICBvcHRpb25hbCAgICAgICBzdHJpbmcgICBzdHJpbmdfb3B0ID0gNzY3MzI4NTsKLSAg
b3B0aW9uYWwgICAgICAgIGJ5dGVzICAgIGJ5dGVzX29wdCA9IDc2NzMyMzg7Ci0gIG9wdGlvbmFs
IER1bW15TWVzc2FnZUNvbnRhaW5pbmdFbnVtLlRlc3RFbnVtVHlwZSBlbnVtX29wdCA9IDc2NzMy
MzM7Ci0gIG9wdGlvbmFsIER1bW15TWVzc2FnZUludmFsaWRBc09wdGlvblR5cGUgbWVzc2FnZV90
eXBlX29wdCA9IDc2NjU5Njc7Ci19Ci0KLW1lc3NhZ2UgQ3VzdG9tT3B0aW9uTWluSW50ZWdlclZh
bHVlcyB7Ci0gIG9wdGlvbiAgICAgKGJvb2xfb3B0KSA9IGZhbHNlOwotICBvcHRpb24gICAgKGlu
dDMyX29wdCkgPSAtMHg4MDAwMDAwMDsKLSAgb3B0aW9uICAgIChpbnQ2NF9vcHQpID0gLTB4ODAw
MDAwMDAwMDAwMDAwMDsKLSAgb3B0aW9uICAgKHVpbnQzMl9vcHQpID0gMDsKLSAgb3B0aW9uICAg
KHVpbnQ2NF9vcHQpID0gMDsKLSAgb3B0aW9uICAgKHNpbnQzMl9vcHQpID0gLTB4ODAwMDAwMDA7
Ci0gIG9wdGlvbiAgIChzaW50NjRfb3B0KSA9IC0weDgwMDAwMDAwMDAwMDAwMDA7Ci0gIG9wdGlv
biAgKGZpeGVkMzJfb3B0KSA9IDA7Ci0gIG9wdGlvbiAgKGZpeGVkNjRfb3B0KSA9IDA7Ci0gIG9w
dGlvbiAoc2ZpeGVkMzJfb3B0KSA9IC0weDgwMDAwMDAwOwotICBvcHRpb24gKHNmaXhlZDY0X29w
dCkgPSAtMHg4MDAwMDAwMDAwMDAwMDAwOwotfQotCi1tZXNzYWdlIEN1c3RvbU9wdGlvbk1heElu
dGVnZXJWYWx1ZXMgewotICBvcHRpb24gICAgIChib29sX29wdCkgPSB0cnVlOwotICBvcHRpb24g
ICAgKGludDMyX29wdCkgPSAweDdGRkZGRkZGOwotICBvcHRpb24gICAgKGludDY0X29wdCkgPSAw
eDdGRkZGRkZGRkZGRkZGRkY7Ci0gIG9wdGlvbiAgICh1aW50MzJfb3B0KSA9IDB4RkZGRkZGRkY7
Ci0gIG9wdGlvbiAgICh1aW50NjRfb3B0KSA9IDB4RkZGRkZGRkZGRkZGRkZGRjsKLSAgb3B0aW9u
ICAgKHNpbnQzMl9vcHQpID0gMHg3RkZGRkZGRjsKLSAgb3B0aW9uICAgKHNpbnQ2NF9vcHQpID0g
MHg3RkZGRkZGRkZGRkZGRkZGOwotICBvcHRpb24gIChmaXhlZDMyX29wdCkgPSAweEZGRkZGRkZG
OwotICBvcHRpb24gIChmaXhlZDY0X29wdCkgPSAweEZGRkZGRkZGRkZGRkZGRkY7Ci0gIG9wdGlv
biAoc2ZpeGVkMzJfb3B0KSA9IDB4N0ZGRkZGRkY7Ci0gIG9wdGlvbiAoc2ZpeGVkNjRfb3B0KSA9
IDB4N0ZGRkZGRkZGRkZGRkZGRjsKLX0KLQotbWVzc2FnZSBDdXN0b21PcHRpb25PdGhlclZhbHVl
cyB7Ci0gIG9wdGlvbiAgKGludDMyX29wdCkgPSAtMTAwOyAgLy8gVG8gdGVzdCBzaWduLWV4dGVu
c2lvbi4KLSAgb3B0aW9uICAoZmxvYXRfb3B0KSA9IDEyLjM0NTY3ODk7Ci0gIG9wdGlvbiAoZG91
YmxlX29wdCkgPSAxLjIzNDU2Nzg5MDEyMzQ1Njc4OTsKLSAgb3B0aW9uIChzdHJpbmdfb3B0KSA9
ICJIZWxsbywgXCJXb3JsZFwiIjsKLSAgb3B0aW9uICAoYnl0ZXNfb3B0KSA9ICJIZWxsb1wwV29y
bGQiOwotICBvcHRpb24gICAoZW51bV9vcHQpID0gVEVTVF9PUFRJT05fRU5VTV9UWVBFMjsKLX0K
LQotbWVzc2FnZSBTZXR0aW5nUmVhbHNGcm9tUG9zaXRpdmVJbnRzIHsKLSAgb3B0aW9uICAoZmxv
YXRfb3B0KSA9IDEyOwotICBvcHRpb24gKGRvdWJsZV9vcHQpID0gMTU0OwotfQotCi1tZXNzYWdl
IFNldHRpbmdSZWFsc0Zyb21OZWdhdGl2ZUludHMgewotICBvcHRpb24gIChmbG9hdF9vcHQpID0g
LTEyOwotICBvcHRpb24gIChkb3VibGVfb3B0KSA9IC0xNTQ7Ci19Ci0KLS8vIE9wdGlvbnMgb2Yg
Y29tcGxleCBtZXNzYWdlIHR5cGVzLCB0aGVtc2VsdmVzIGNvbWJpbmVkIGFuZCBleHRlbmRlZCBp
bgotLy8gdmFyaW91cyB3YXlzLgotCi1tZXNzYWdlIENvbXBsZXhPcHRpb25UeXBlMSB7Ci0gIG9w
dGlvbmFsIGludDMyIGZvbyA9IDE7Ci0gIG9wdGlvbmFsIGludDMyIGZvbzIgPSAyOwotICBvcHRp
b25hbCBpbnQzMiBmb28zID0gMzsKLSAgcmVwZWF0ZWQgaW50MzIgZm9vNCA9IDQ7Ci0KLSAgZXh0
ZW5zaW9ucyAxMDAgdG8gbWF4OwotfQotCi1tZXNzYWdlIENvbXBsZXhPcHRpb25UeXBlMiB7Ci0g
IG9wdGlvbmFsIENvbXBsZXhPcHRpb25UeXBlMSBiYXIgPSAxOwotICBvcHRpb25hbCBpbnQzMiBi
YXogPSAyOwotCi0gIG1lc3NhZ2UgQ29tcGxleE9wdGlvblR5cGU0IHsKLSAgICBvcHRpb25hbCBp
bnQzMiB3YWxkbyA9IDE7Ci0KLSAgICBleHRlbmQgZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRp
b25zIHsKLSAgICAgIG9wdGlvbmFsIENvbXBsZXhPcHRpb25UeXBlNCBjb21wbGV4X29wdDQgPSA3
NjMzNTQ2OwotICAgIH0KLSAgfQotCi0gIG9wdGlvbmFsIENvbXBsZXhPcHRpb25UeXBlNCBmcmVk
ID0gMzsKLSAgcmVwZWF0ZWQgQ29tcGxleE9wdGlvblR5cGU0IGJhcm5leSA9IDQ7Ci0KLSAgZXh0
ZW5zaW9ucyAxMDAgdG8gbWF4OwotfQotCi1tZXNzYWdlIENvbXBsZXhPcHRpb25UeXBlMyB7Ci0g
IG9wdGlvbmFsIGludDMyIHF1eCA9IDE7Ci0KLSAgb3B0aW9uYWwgZ3JvdXAgQ29tcGxleE9wdGlv
blR5cGU1ID0gMiB7Ci0gICAgb3B0aW9uYWwgaW50MzIgcGx1Z2ggPSAzOwotICB9Ci19Ci0KLWV4
dGVuZCBDb21wbGV4T3B0aW9uVHlwZTEgewotICBvcHRpb25hbCBpbnQzMiBxdXV4ID0gNzY2Mzcw
NzsKLSAgb3B0aW9uYWwgQ29tcGxleE9wdGlvblR5cGUzIGNvcmdlID0gNzY2MzQ0MjsKLX0KLQot
ZXh0ZW5kIENvbXBsZXhPcHRpb25UeXBlMiB7Ci0gIG9wdGlvbmFsIGludDMyIGdyYXVsdCA9IDc2
NTA5Mjc7Ci0gIG9wdGlvbmFsIENvbXBsZXhPcHRpb25UeXBlMSBnYXJwbHkgPSA3NjQ5OTkyOwot
fQotCi1leHRlbmQgZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zIHsKLSAgb3B0aW9uYWwg
cHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUxIGNvbXBsZXhfb3B0MSA9IDc2NDY3
NTY7Ci0gIG9wdGlvbmFsIENvbXBsZXhPcHRpb25UeXBlMiBjb21wbGV4X29wdDIgPSA3NjM2OTQ5
OwotICBvcHRpb25hbCBDb21wbGV4T3B0aW9uVHlwZTMgY29tcGxleF9vcHQzID0gNzYzNjQ2MzsK
LSAgb3B0aW9uYWwgZ3JvdXAgQ29tcGxleE9wdDYgPSA3NTk1NDY4IHsKLSAgICBvcHRpb25hbCBp
bnQzMiB4eXp6eSA9IDc1OTM5NTE7Ci0gIH0KLX0KLQotLy8gTm90ZSB0aGF0IHdlIHRyeSB2YXJp
b3VzIGRpZmZlcmVudCB3YXlzIG9mIG5hbWluZyB0aGUgc2FtZSBleHRlbnNpb24uCi1tZXNzYWdl
IFZhcmlvdXNDb21wbGV4T3B0aW9ucyB7Ci0gIG9wdGlvbiAoLnByb3RvYnVmX3VuaXR0ZXN0LmNv
bXBsZXhfb3B0MSkuZm9vID0gNDI7Ci0gIG9wdGlvbiAocHJvdG9idWZfdW5pdHRlc3QuY29tcGxl
eF9vcHQxKS4oLnByb3RvYnVmX3VuaXR0ZXN0LnF1dXgpID0gMzI0OwotICBvcHRpb24gKC5wcm90
b2J1Zl91bml0dGVzdC5jb21wbGV4X29wdDEpLihwcm90b2J1Zl91bml0dGVzdC5jb3JnZSkucXV4
ID0gODc2OwotICBvcHRpb24gKHByb3RvYnVmX3VuaXR0ZXN0LmNvbXBsZXhfb3B0MSkuZm9vNCA9
IDk5OwotICBvcHRpb24gKHByb3RvYnVmX3VuaXR0ZXN0LmNvbXBsZXhfb3B0MSkuZm9vNCA9IDg4
OwotICBvcHRpb24gKGNvbXBsZXhfb3B0MikuYmF6ID0gOTg3OwotICBvcHRpb24gKGNvbXBsZXhf
b3B0MikuKGdyYXVsdCkgPSA2NTQ7Ci0gIG9wdGlvbiAoY29tcGxleF9vcHQyKS5iYXIuZm9vID0g
NzQzOwotICBvcHRpb24gKGNvbXBsZXhfb3B0MikuYmFyLihxdXV4KSA9IDE5OTk7Ci0gIG9wdGlv
biAoY29tcGxleF9vcHQyKS5iYXIuKHByb3RvYnVmX3VuaXR0ZXN0LmNvcmdlKS5xdXggPSAyMDA4
OwotICBvcHRpb24gKGNvbXBsZXhfb3B0MikuKGdhcnBseSkuZm9vID0gNzQxOwotICBvcHRpb24g
KGNvbXBsZXhfb3B0MikuKGdhcnBseSkuKC5wcm90b2J1Zl91bml0dGVzdC5xdXV4KSA9IDE5OTg7
Ci0gIG9wdGlvbiAoY29tcGxleF9vcHQyKS4ocHJvdG9idWZfdW5pdHRlc3QuZ2FycGx5KS4oY29y
Z2UpLnF1eCA9IDIxMjE7Ci0gIG9wdGlvbiAoQ29tcGxleE9wdGlvblR5cGUyLkNvbXBsZXhPcHRp
b25UeXBlNC5jb21wbGV4X29wdDQpLndhbGRvID0gMTk3MTsKLSAgb3B0aW9uIChjb21wbGV4X29w
dDIpLmZyZWQud2FsZG8gPSAzMjE7Ci0gIG9wdGlvbiAoY29tcGxleF9vcHQyKS5iYXJuZXkgPSB7
IHdhbGRvOiAxMDEgfTsKLSAgb3B0aW9uIChjb21wbGV4X29wdDIpLmJhcm5leSA9IHsgd2FsZG86
IDIxMiB9OwotICBvcHRpb24gKHByb3RvYnVmX3VuaXR0ZXN0LmNvbXBsZXhfb3B0MykucXV4ID0g
OTsKLSAgb3B0aW9uIChjb21wbGV4X29wdDMpLmNvbXBsZXhvcHRpb250eXBlNS5wbHVnaCA9IDIy
OwotICBvcHRpb24gKGNvbXBsZXhvcHQ2KS54eXp6eSA9IDI0OwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERlZmluaXRp
b25zIGZvciB0ZXN0aW5nIGFnZ3JlZ2F0ZSBvcHRpb24gcGFyc2luZy4KLS8vIFNlZSBkZXNjcmlw
dG9yX3VuaXR0ZXN0LmNjLgotCi1tZXNzYWdlIEFnZ3JlZ2F0ZU1lc3NhZ2VTZXQgewotICBvcHRp
b24gbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQgPSB0cnVlOwotICBleHRlbnNpb25zIDQgdG8gbWF4
OwotfQotCi1tZXNzYWdlIEFnZ3JlZ2F0ZU1lc3NhZ2VTZXRFbGVtZW50IHsKLSAgZXh0ZW5kIEFn
Z3JlZ2F0ZU1lc3NhZ2VTZXQgewotICAgIG9wdGlvbmFsIEFnZ3JlZ2F0ZU1lc3NhZ2VTZXRFbGVt
ZW50IG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbiA9IDE1NDQ3NTQyOwotICB9Ci0gIG9wdGlvbmFsIHN0
cmluZyBzID0gMTsKLX0KLQotLy8gQSBoZWxwZXIgdHlwZSB1c2VkIHRvIHRlc3QgYWdncmVnYXRl
IG9wdGlvbiBwYXJzaW5nCi1tZXNzYWdlIEFnZ3JlZ2F0ZSB7Ci0gIG9wdGlvbmFsIGludDMyIGkg
PSAxOwotICBvcHRpb25hbCBzdHJpbmcgcyA9IDI7Ci0KLSAgLy8gQSBuZXN0ZWQgb2JqZWN0Ci0g
IG9wdGlvbmFsIEFnZ3JlZ2F0ZSBzdWIgPSAzOwotCi0gIC8vIFRvIHRlc3QgdGhlIHBhcnNpbmcg
b2YgZXh0ZW5zaW9ucyBpbnNpZGUgYWdncmVnYXRlIHZhbHVlcwotICBvcHRpb25hbCBnb29nbGUu
cHJvdG9idWYuRmlsZU9wdGlvbnMgZmlsZSA9IDQ7Ci0gIGV4dGVuZCBnb29nbGUucHJvdG9idWYu
RmlsZU9wdGlvbnMgewotICAgIG9wdGlvbmFsIEFnZ3JlZ2F0ZSBuZXN0ZWQgPSAxNTQ3NjkwMzsK
LSAgfQotCi0gIC8vIEFuIGVtYmVkZGVkIG1lc3NhZ2Ugc2V0Ci0gIG9wdGlvbmFsIEFnZ3JlZ2F0
ZU1lc3NhZ2VTZXQgbXNldCA9IDU7Ci19Ci0KLS8vIEFsbG93IEFnZ3JlZ2F0ZSB0byBiZSB1c2Vk
IGFzIGFuIG9wdGlvbiBhdCBhbGwgcG9zc2libGUgbG9jYXRpb25zCi0vLyBpbiB0aGUgLnByb3Rv
IGdyYW1tZXIuCi1leHRlbmQgZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zICAgICAgeyBvcHRp
b25hbCBBZ2dyZWdhdGUgZmlsZW9wdCAgICA9IDE1NDc4NDc5OyB9Ci1leHRlbmQgZ29vZ2xlLnBy
b3RvYnVmLk1lc3NhZ2VPcHRpb25zICAgeyBvcHRpb25hbCBBZ2dyZWdhdGUgbXNnb3B0ICAgICA9
IDE1NDgwMDg4OyB9Ci1leHRlbmQgZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyAgICAgeyBv
cHRpb25hbCBBZ2dyZWdhdGUgZmllbGRvcHQgICA9IDE1NDgxMzc0OyB9Ci1leHRlbmQgZ29vZ2xl
LnByb3RvYnVmLkVudW1PcHRpb25zICAgICAgeyBvcHRpb25hbCBBZ2dyZWdhdGUgZW51bW9wdCAg
ICA9IDE1NDgzMjE4OyB9Ci1leHRlbmQgZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMg
eyBvcHRpb25hbCBBZ2dyZWdhdGUgZW51bXZhbG9wdCA9IDE1NDg2OTIxOyB9Ci1leHRlbmQgZ29v
Z2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zICAgeyBvcHRpb25hbCBBZ2dyZWdhdGUgc2Vydmlj
ZW9wdCA9IDE1NDk3MTQ1OyB9Ci1leHRlbmQgZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMg
ICAgeyBvcHRpb25hbCBBZ2dyZWdhdGUgbWV0aG9kb3B0ICA9IDE1NTEyNzEzOyB9Ci0KLS8vIFRy
eSB1c2luZyBBZ2dyZWdhdGVPcHRpb24gYXQgZGlmZmVyZW50IHBvaW50cyBpbiB0aGUgcHJvdG8g
Z3JhbW1hcgotb3B0aW9uIChmaWxlb3B0KSA9IHsKLSAgczogJ0ZpbGVBbm5vdGF0aW9uJwotICAv
LyBBbHNvIHRlc3QgdGhlIGhhbmRsaW5nIG9mIGNvbW1lbnRzCi0gIC8qIG9mIGJvdGggdHlwZXMg
Ki8gaTogMTAwCi0KLSAgc3ViIHsgczogJ05lc3RlZEZpbGVBbm5vdGF0aW9uJyB9Ci0KLSAgLy8g
SW5jbHVkZSBhIGdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucyBhbmQgcmVjdXJzaXZlbHkgZXh0
ZW5kIGl0IHdpdGgKLSAgLy8gYW5vdGhlciBmaWxlb3B0LgotICBmaWxlIHsKLSAgICBbcHJvdG9i
dWZfdW5pdHRlc3QuZmlsZW9wdF0gewotICAgICAgczonRmlsZUV4dGVuc2lvbkFubm90YXRpb24n
Ci0gICAgfQotICB9Ci0KLSAgLy8gQSBtZXNzYWdlIHNldCBpbnNpZGUgYW4gb3B0aW9uIHZhbHVl
Ci0gIG1zZXQgewotICAgIFtwcm90b2J1Zl91bml0dGVzdC5BZ2dyZWdhdGVNZXNzYWdlU2V0RWxl
bWVudC5tZXNzYWdlX3NldF9leHRlbnNpb25dIHsKLSAgICAgIHM6ICdFbWJlZGRlZE1lc3NhZ2VT
ZXRFbGVtZW50JwotICAgIH0KLSAgfQotfTsKLQotbWVzc2FnZSBBZ2dyZWdhdGVNZXNzYWdlIHsK
LSAgb3B0aW9uIChtc2dvcHQpID0geyBpOjEwMSBzOidNZXNzYWdlQW5ub3RhdGlvbicgfTsKLSAg
b3B0aW9uYWwgaW50MzIgZmllbGRuYW1lID0gMSBbKGZpZWxkb3B0KSA9IHsgczonRmllbGRBbm5v
dGF0aW9uJyB9XTsKLX0KLQotc2VydmljZSBBZ2dyZWdhdGVTZXJ2aWNlIHsKLSAgb3B0aW9uIChz
ZXJ2aWNlb3B0KSA9IHsgczonU2VydmljZUFubm90YXRpb24nIH07Ci0gIHJwYyBNZXRob2QgKEFn
Z3JlZ2F0ZU1lc3NhZ2UpIHJldHVybnMgKEFnZ3JlZ2F0ZU1lc3NhZ2UpIHsKLSAgICBvcHRpb24g
KG1ldGhvZG9wdCkgPSB7IHM6J01ldGhvZEFubm90YXRpb24nIH07Ci0gIH0KLX0KLQotZW51bSBB
Z2dyZWdhdGVFbnVtIHsKLSAgb3B0aW9uIChlbnVtb3B0KSA9IHsgczonRW51bUFubm90YXRpb24n
IH07Ci0gIFZBTFVFID0gMSBbKGVudW12YWxvcHQpID0geyBzOidFbnVtVmFsdWVBbm5vdGF0aW9u
JyB9XTsKLX0KLQotLy8gVGVzdCBjdXN0b20gb3B0aW9ucyBmb3IgbmVzdGVkIHR5cGUuCi1tZXNz
YWdlIE5lc3RlZE9wdGlvblR5cGUgewotICBtZXNzYWdlIE5lc3RlZE1lc3NhZ2UgewotICAgIG9w
dGlvbiAobWVzc2FnZV9vcHQxKSA9IDEwMDE7Ci0gICAgb3B0aW9uYWwgaW50MzIgbmVzdGVkX2Zp
ZWxkID0gMSBbKGZpZWxkX29wdDEpID0gMTAwMl07Ci0gIH0KLSAgZW51bSBOZXN0ZWRFbnVtIHsK
LSAgICBvcHRpb24gKGVudW1fb3B0MSkgPSAxMDAzOwotICAgIE5FU1RFRF9FTlVNX1ZBTFVFID0g
MSBbKGVudW1fdmFsdWVfb3B0MSkgPSAxMDA0XTsKLSAgfQotICBleHRlbmQgZ29vZ2xlLnByb3Rv
YnVmLkZpbGVPcHRpb25zIHsKLSAgICBvcHRpb25hbCBpbnQzMiBuZXN0ZWRfZXh0ZW5zaW9uID0g
NzkxMjU3MyBbKGZpZWxkX29wdDIpID0gMTAwNV07Ci0gIH0KLX0KLQotLy8gQ3VzdG9tIG1lc3Nh
Z2Ugb3B0aW9uIHRoYXQgaGFzIGEgcmVxdWlyZWQgZW51bSBmaWVsZC4KLS8vIFdBUk5JTkc6IHRo
aXMgaXMgc3Ryb25nbHkgZGlzY291cmFnZWQhCi1tZXNzYWdlIE9sZE9wdGlvblR5cGUgewotICBl
bnVtIFRlc3RFbnVtIHsKLSAgICBPTERfVkFMVUUgPSAwOwotICB9Ci0gIHJlcXVpcmVkIFRlc3RF
bnVtIHZhbHVlID0gMTsKLX0KLQotLy8gVXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBjdXN0b20gb3B0
aW9uIGFib3ZlLgotbWVzc2FnZSBOZXdPcHRpb25UeXBlIHsKLSAgZW51bSBUZXN0RW51bSB7Ci0g
ICAgT0xEX1ZBTFVFID0gMDsKLSAgICBORVdfVkFMVUUgPSAxOwotICB9Ci0gIHJlcXVpcmVkIFRl
c3RFbnVtIHZhbHVlID0gMTsKLX0KLQotZXh0ZW5kIGdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0
aW9ucyB7Ci0gIG9wdGlvbmFsIE9sZE9wdGlvblR5cGUgcmVxdWlyZWRfZW51bV9vcHQgPSAxMDYx
NjE4MDc7Ci19Ci0KLS8vIFRlc3QgbWVzc2FnZSB1c2luZyB0aGUgInJlcXVpcmVkX2VudW1fb3B0
IiBvcHRpb24gZGVmaW5lZCBhYm92ZS4KLW1lc3NhZ2UgVGVzdE1lc3NhZ2VXaXRoUmVxdWlyZWRF
bnVtT3B0aW9uIHsKLSAgb3B0aW9uIChyZXF1aXJlZF9lbnVtX29wdCkgPSB7IHZhbHVlOiBPTERf
VkFMVUUgfTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9kcm9w
X3Vua25vd25fZmllbGRzLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2Ryb3Bf
dW5rbm93bl9maWVsZHMucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTNh
MzdiOGUyOWEwODVjNmY3OGNkMGQ1ZDA1YTgyYzZjZjljNWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2Ry
b3BfdW5rbm93bl9maWVsZHMucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMyI7Ci0K
LXBhY2thZ2UgdW5pdHRlc3RfZHJvcF91bmtub3duX2ZpZWxkczsKLW9wdGlvbiBvYmpjX2NsYXNz
X3ByZWZpeCA9ICJEcm9wVW5rbm93bnMiOwotCi1vcHRpb24gY3NoYXJwX25hbWVzcGFjZSA9ICJH
b29nbGUuUHJvdG9idWYuVGVzdFByb3RvcyI7Ci0KLW1lc3NhZ2UgRm9vIHsKLSAgZW51bSBOZXN0
ZWRFbnVtIHsKLSAgICBGT08gPSAwOwotICAgIEJBUiA9IDE7Ci0gICAgQkFaID0gMjsKLSAgfQot
ICBpbnQzMiBpbnQzMl92YWx1ZSA9IDE7Ci0gIE5lc3RlZEVudW0gZW51bV92YWx1ZSA9IDI7Ci19
Ci0KLW1lc3NhZ2UgRm9vV2l0aEV4dHJhRmllbGRzIHsKLSAgZW51bSBOZXN0ZWRFbnVtIHsKLSAg
ICBGT08gPSAwOwotICAgIEJBUiA9IDE7Ci0gICAgQkFaID0gMjsKLSAgICBRVVggPSAzOwotICB9
Ci0gIGludDMyIGludDMyX3ZhbHVlID0gMTsKLSAgTmVzdGVkRW51bSBlbnVtX3ZhbHVlID0gMjsK
LSAgaW50MzIgZXh0cmFfaW50MzJfdmFsdWUgPSAzOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0X2VtYmVkX29wdGltaXplX2Zvci5wcm90byBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi91bml0dGVzdF9lbWJlZF9vcHRpbWl6ZV9mb3IucHJvdG8KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ4YjBmOWI5NGY5OTJlYTNkMDc0NWZhYzM3MGI3ZDQ4MWFhZTQxYTMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0X2VtYmVkX29wdGltaXplX2Zvci5wcm90bworKysgL2Rldi9udWxs
CkBAIC0xLDUxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24g
b3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQs
IEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBBIHByb3RvIGZpbGUgd2hpY2ggaW1wb3J0
cyBhIHByb3RvIGZpbGUgdGhhdCB1c2VzIG9wdGltaXplX2ZvciA9IENPREVfU0laRS4KLQotc3lu
dGF4ID0gInByb3RvMiI7Ci1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9vcHRpbWl6
ZV9mb3IucHJvdG8iOwotCi1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi0vLyBXZSBvcHRp
bWl6ZSBmb3Igc3BlZWQgaGVyZSwgYnV0IHdlIGFyZSBpbXBvcnRpbmcgYSBwcm90byB0aGF0IGlz
IG9wdGltaXplZAotLy8gZm9yIGNvZGUgc2l6ZS4KLW9wdGlvbiBvcHRpbWl6ZV9mb3IgPSBTUEVF
RDsKLQotbWVzc2FnZSBUZXN0RW1iZWRPcHRpbWl6ZWRGb3JTaXplIHsKLSAgLy8gVGVzdCB0aGF0
IGVtYmVkZGluZyBhIG1lc3NhZ2Ugd2hpY2ggaGFzIG9wdGltaXplX2ZvciA9IENPREVfU0laRSBp
bnRvCi0gIC8vIG9uZSBvcHRpbWl6ZWQgZm9yIHNwZWVkIHdvcmtzLgotICBvcHRpb25hbCBUZXN0
T3B0aW1pemVkRm9yU2l6ZSBvcHRpb25hbF9tZXNzYWdlID0gMTsKLSAgcmVwZWF0ZWQgVGVzdE9w
dGltaXplZEZvclNpemUgcmVwZWF0ZWRfbWVzc2FnZSA9IDI7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZW1wdHkucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
dW5pdHRlc3RfZW1wdHkucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NDQz
ZTdlMDEyNTljMTg2ZGFlYjQ1YmU2MDYyMzk3NDkyYTQ3YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2Vt
cHR5LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRv
biBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBi
eQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIFRo
aXMgZmlsZSBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsuICAoQXQgb25lIHBvaW50IHRoaXMgd291
bGRuJ3QgY29tcGlsZQotLy8gY29ycmVjdGx5LikKLQotc3ludGF4ID0gInByb3RvMiI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZW5vcm1vdXNfZGVzY3JpcHRvci5w
cm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbm9ybW91c19kZXNjcmlwdG9yLnBy
b3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTY1ZGMxOGI3ZGI1NGZkZmYxNDYw
YmEwYWY1ZDgyMTg3OTc1ZGZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9lbm9ybW91c19kZXNjcmlwdG9y
LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsMTA0OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9u
IFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5
Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gQSBw
cm90byBmaWxlIHRoYXQgaGFzIGFuIGV4dHJlbWVseSBsYXJnZSBkZXNjcmlwdG9yLiAgVXNlZCB0
byB0ZXN0IHRoYXQKLS8vIGRlc2NyaXB0b3JzIG92ZXIgNjRrIGRvbid0IGJyZWFrIGxhbmd1YWdl
LXNwZWNpZmljIGxpbWl0cyBpbiBnZW5lcmF0ZWQgY29kZSwKLS8vIHN1Y2ggYXMgdGhlIHN0cmlu
ZyBsaXRlcmFsIGxlbmd0aCBsaW1pdCBpbiBKYXZhLgotCi1zeW50YXggPSAicHJvdG8yIjsKLQot
cGFja2FnZSBnb29nbGUucHJvdG9idWY7Ci1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29n
bGUucHJvdG9idWYiOwotCi0vLyBBdm9pZCBnZW5lcmF0aW5nIGluc2FuZWx5IGxvbmcgbWV0aG9k
cy4KLW9wdGlvbiBvcHRpbWl6ZV9mb3IgPSBDT0RFX1NJWkU7Ci0KLW1lc3NhZ2UgVGVzdEVub3Jt
b3VzRGVzY3JpcHRvciB7Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ18xID0gMSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMiA9IDIgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzMg
PSAzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ180ID0gNCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNSA9IDUgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzYg
PSA2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ183ID0gNyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOCA9IDggW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzkg
PSA5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ18xMCA9IDEwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xMSA9IDExIFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z18xMiA9IDEyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ18xMyA9IDEzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNCA9IDE0IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ18xNSA9IDE1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNiA9IDE2IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNyA9IDE3
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ18xOCA9IDE4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xOSA9IDE5IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18y
MCA9IDIwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ18yMSA9IDIxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yMiA9IDIyIFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ18yMyA9IDIzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ18yNCA9IDI0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yNSA9IDI1IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ18yNiA9IDI2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yNyA9IDI3IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yOCA9
IDI4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ18yOSA9IDI5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zMCA9IDMwIFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z18zMSA9IDMxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ18zMiA9IDMyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zMyA9IDMzIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ18zNCA9IDM0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zNSA9IDM1IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zNiA9IDM2
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ18zNyA9IDM3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zOCA9IDM4IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18z
OSA9IDM5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ180MCA9IDQwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180MSA9IDQxIFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ180MiA9IDQyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ180MyA9IDQzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NCA9IDQ0IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ180NSA9IDQ1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NiA9IDQ2IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NyA9
IDQ3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ180OCA9IDQ4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180OSA9IDQ5IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z181MCA9IDUwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ181MSA9IDUxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181MiA9IDUyIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ181MyA9IDUzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ181NCA9IDU0IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181NSA9IDU1
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ181NiA9IDU2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181NyA9IDU3IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181
OCA9IDU4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ181OSA9IDU5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182MCA9IDYwIFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ182MSA9IDYxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ182MiA9IDYyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182MyA9IDYzIFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ182NCA9IDY0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182NSA9IDY1IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182NiA9
IDY2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ182NyA9IDY3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182OCA9IDY4IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z182OSA9IDY5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ183MCA9IDcwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183MSA9IDcxIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ183MiA9IDcyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ183MyA9IDczIFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183NCA9IDc0
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ183NSA9IDc1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183NiA9IDc2IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183
NyA9IDc3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ183OCA9IDc4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183OSA9IDc5IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ184MCA9IDgwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ184MSA9IDgxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184MiA9IDgyIFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ184MyA9IDgzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NCA9IDg0IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NSA9
IDg1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ184NiA9IDg2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NyA9IDg3IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z184OCA9IDg4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ184OSA9IDg5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MCA9IDkwIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ185MSA9IDkxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MiA9IDkyIFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MyA9IDkz
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ185NCA9IDk0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185NSA9IDk1IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185
NiA9IDk2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ185NyA9IDk3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185OCA9IDk4IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ185OSA9IDk5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ18xMDAgPSAxMDAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzEwMSA9IDEw
MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfMTAyID0gMTAyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xMDMgPSAxMDMgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzEwNCA9IDEwNCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfMTA1ID0gMTA1IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xMDYgPSAx
MDYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzEwNyA9IDEwNyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTA4ID0gMTA4IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ18xMDkgPSAxMDkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzExMCA9IDExMCBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTExID0g
MTExIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ18xMTIgPSAxMTIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzExMyA9IDExMyBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfMTE0ID0gMTE0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xMTUgPSAxMTUgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzExNiA9
IDExNiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfMTE3ID0gMTE3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xMTggPSAxMTggW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzExOSA9IDExOSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTIwID0gMTIwIFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xMjEg
PSAxMjEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzEyMiA9IDEyMiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTIzID0gMTIzIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ18xMjQgPSAxMjQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzEyNSA9IDEyNSBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTI2
ID0gMTI2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ18xMjcgPSAxMjcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzEyOCA9IDEyOCBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfMTI5ID0gMTI5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xMzAgPSAxMzAgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzEz
MSA9IDEzMSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfMTMyID0gMTMyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xMzMgPSAxMzMgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzEzNCA9IDEzNCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTM1ID0gMTM1IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18x
MzYgPSAxMzYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzEzNyA9IDEzNyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTM4ID0gMTM4IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ18xMzkgPSAxMzkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE0MCA9IDE0MCBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
MTQxID0gMTQxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ18xNDIgPSAxNDIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE0MyA9IDE0MyBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfMTQ0ID0gMTQ0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNDUgPSAxNDUgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzE0NiA9IDE0NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfMTQ3ID0gMTQ3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNDggPSAxNDgg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzE0OSA9IDE0OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTUwID0gMTUwIFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z18xNTEgPSAxNTEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzE1MiA9IDE1MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTUzID0gMTUz
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ18xNTQgPSAxNTQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE1NSA9IDE1NSBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfMTU2ID0gMTU2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ18xNTcgPSAxNTcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE1OCA9IDE1
OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfMTU5ID0gMTU5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNjAgPSAxNjAgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzE2MSA9IDE2MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfMTYyID0gMTYyIFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNjMgPSAx
NjMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzE2NCA9IDE2NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTY1ID0gMTY1IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ18xNjYgPSAxNjYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzE2NyA9IDE2NyBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTY4ID0g
MTY4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ18xNjkgPSAxNjkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE3MCA9IDE3MCBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfMTcxID0gMTcxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNzIgPSAxNzIgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE3MyA9
IDE3MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfMTc0ID0gMTc0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNzUgPSAxNzUgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzE3NiA9IDE3NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTc3ID0gMTc3IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xNzgg
PSAxNzggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzE3OSA9IDE3OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTgwID0gMTgwIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ18xODEgPSAxODEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE4MiA9IDE4MiBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTgz
ID0gMTgzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ18xODQgPSAxODQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE4NSA9IDE4NSBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfMTg2ID0gMTg2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xODcgPSAxODcgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE4
OCA9IDE4OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfMTg5ID0gMTg5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xOTAgPSAxOTAgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzE5MSA9IDE5MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTkyID0gMTkyIFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18x
OTMgPSAxOTMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzE5NCA9IDE5NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMTk1ID0gMTk1IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ18xOTYgPSAxOTYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzE5NyA9IDE5NyBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
MTk4ID0gMTk4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ18xOTkgPSAxOTkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzIwMCA9IDIwMCBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfMjAxID0gMjAxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yMDIgPSAyMDIgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzIwMyA9IDIwMyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfMjA0ID0gMjA0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yMDUgPSAyMDUg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzIwNiA9IDIwNiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjA3ID0gMjA3IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z18yMDggPSAyMDggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzIwOSA9IDIwOSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjEwID0gMjEw
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ18yMTEgPSAyMTEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzIxMiA9IDIxMiBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfMjEzID0gMjEzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ18yMTQgPSAyMTQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzIxNSA9IDIx
NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfMjE2ID0gMjE2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yMTcgPSAyMTcgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzIxOCA9IDIxOCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfMjE5ID0gMjE5IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yMjAgPSAy
MjAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzIyMSA9IDIyMSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjIyID0gMjIyIFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ18yMjMgPSAyMjMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzIyNCA9IDIyNCBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjI1ID0g
MjI1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ18yMjYgPSAyMjYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzIyNyA9IDIyNyBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfMjI4ID0gMjI4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yMjkgPSAyMjkgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzIzMCA9
IDIzMCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfMjMxID0gMjMxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yMzIgPSAyMzIgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzIzMyA9IDIzMyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjM0ID0gMjM0IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yMzUg
PSAyMzUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzIzNiA9IDIzNiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjM3ID0gMjM3IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ18yMzggPSAyMzggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzIzOSA9IDIzOSBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjQw
ID0gMjQwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ18yNDEgPSAyNDEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI0MiA9IDI0MiBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfMjQzID0gMjQzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yNDQgPSAyNDQgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI0
NSA9IDI0NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfMjQ2ID0gMjQ2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yNDcgPSAyNDcgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzI0OCA9IDI0OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjQ5ID0gMjQ5IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18y
NTAgPSAyNTAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzI1MSA9IDI1MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjUyID0gMjUyIFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ18yNTMgPSAyNTMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI1NCA9IDI1NCBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
MjU1ID0gMjU1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ18yNTYgPSAyNTYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI1NyA9IDI1NyBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfMjU4ID0gMjU4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yNTkgPSAyNTkgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzI2MCA9IDI2MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfMjYxID0gMjYxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yNjIgPSAyNjIg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzI2MyA9IDI2MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjY0ID0gMjY0IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z18yNjUgPSAyNjUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzI2NiA9IDI2NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjY3ID0gMjY3
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ18yNjggPSAyNjggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI2OSA9IDI2OSBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfMjcwID0gMjcwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ18yNzEgPSAyNzEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI3MiA9IDI3
MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfMjczID0gMjczIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yNzQgPSAyNzQgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzI3NSA9IDI3NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfMjc2ID0gMjc2IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yNzcgPSAy
NzcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzI3OCA9IDI3OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjc5ID0gMjc5IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ18yODAgPSAyODAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzI4MSA9IDI4MSBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjgyID0g
MjgyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ18yODMgPSAyODMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI4NCA9IDI4NCBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfMjg1ID0gMjg1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yODYgPSAyODYgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI4NyA9
IDI4NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfMjg4ID0gMjg4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yODkgPSAyODkgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzI5MCA9IDI5MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjkxID0gMjkxIFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18yOTIg
PSAyOTIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzI5MyA9IDI5MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjk0ID0gMjk0IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ18yOTUgPSAyOTUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI5NiA9IDI5NiBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMjk3
ID0gMjk3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ18yOTggPSAyOTggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzI5OSA9IDI5OSBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfMzAwID0gMzAwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zMDEgPSAzMDEgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzMw
MiA9IDMwMiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfMzAzID0gMzAzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zMDQgPSAzMDQgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzMwNSA9IDMwNSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzA2ID0gMzA2IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18z
MDcgPSAzMDcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzMwOCA9IDMwOCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzA5ID0gMzA5IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ18zMTAgPSAzMTAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzMxMSA9IDMxMSBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
MzEyID0gMzEyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ18zMTMgPSAzMTMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzMxNCA9IDMxNCBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfMzE1ID0gMzE1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zMTYgPSAzMTYgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzMxNyA9IDMxNyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfMzE4ID0gMzE4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zMTkgPSAzMTkg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzMyMCA9IDMyMCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzIxID0gMzIxIFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z18zMjIgPSAzMjIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzMyMyA9IDMyMyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzI0ID0gMzI0
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ18zMjUgPSAzMjUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzMyNiA9IDMyNiBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfMzI3ID0gMzI3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ18zMjggPSAzMjggW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzMyOSA9IDMy
OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfMzMwID0gMzMwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zMzEgPSAzMzEgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzMzMiA9IDMzMiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfMzMzID0gMzMzIFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zMzQgPSAz
MzQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzMzNSA9IDMzNSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzM2ID0gMzM2IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ18zMzcgPSAzMzcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzMzOCA9IDMzOCBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzM5ID0g
MzM5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ18zNDAgPSAzNDAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM0MSA9IDM0MSBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfMzQyID0gMzQyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zNDMgPSAzNDMgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM0NCA9
IDM0NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfMzQ1ID0gMzQ1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zNDYgPSAzNDYgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzM0NyA9IDM0NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzQ4ID0gMzQ4IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zNDkg
PSAzNDkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzM1MCA9IDM1MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzUxID0gMzUxIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ18zNTIgPSAzNTIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM1MyA9IDM1MyBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzU0
ID0gMzU0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ18zNTUgPSAzNTUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM1NiA9IDM1NiBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfMzU3ID0gMzU3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zNTggPSAzNTggW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM1
OSA9IDM1OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfMzYwID0gMzYwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zNjEgPSAzNjEgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzM2MiA9IDM2MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzYzID0gMzYzIFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18z
NjQgPSAzNjQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzM2NSA9IDM2NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzY2ID0gMzY2IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ18zNjcgPSAzNjcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM2OCA9IDM2OCBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
MzY5ID0gMzY5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ18zNzAgPSAzNzAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM3MSA9IDM3MSBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfMzcyID0gMzcyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zNzMgPSAzNzMgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzM3NCA9IDM3NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfMzc1ID0gMzc1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zNzYgPSAzNzYg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzM3NyA9IDM3NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzc4ID0gMzc4IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z18zNzkgPSAzNzkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzM4MCA9IDM4MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzgxID0gMzgx
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ18zODIgPSAzODIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM4MyA9IDM4MyBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfMzg0ID0gMzg0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ18zODUgPSAzODUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM4NiA9IDM4
NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfMzg3ID0gMzg3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zODggPSAzODggW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzM4OSA9IDM4OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfMzkwID0gMzkwIFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18zOTEgPSAz
OTEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzM5MiA9IDM5MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzkzID0gMzkzIFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ18zOTQgPSAzOTQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzM5NSA9IDM5NSBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfMzk2ID0g
Mzk2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ18zOTcgPSAzOTcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzM5OCA9IDM5OCBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfMzk5ID0gMzk5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ180MDAgPSA0MDAgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQwMSA9
IDQwMSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfNDAyID0gNDAyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180MDMgPSA0MDMgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzQwNCA9IDQwNCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDA1ID0gNDA1IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180MDYg
PSA0MDYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzQwNyA9IDQwNyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDA4ID0gNDA4IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ180MDkgPSA0MDkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQxMCA9IDQxMCBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDEx
ID0gNDExIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ180MTIgPSA0MTIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQxMyA9IDQxMyBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfNDE0ID0gNDE0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180MTUgPSA0MTUgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQx
NiA9IDQxNiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfNDE3ID0gNDE3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180MTggPSA0MTggW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzQxOSA9IDQxOSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDIwID0gNDIwIFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180
MjEgPSA0MjEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzQyMiA9IDQyMiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDIzID0gNDIzIFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ180MjQgPSA0MjQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQyNSA9IDQyNSBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
NDI2ID0gNDI2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ180MjcgPSA0MjcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQyOCA9IDQyOCBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfNDI5ID0gNDI5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180MzAgPSA0MzAgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzQzMSA9IDQzMSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfNDMyID0gNDMyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180MzMgPSA0MzMg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzQzNCA9IDQzNCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDM1ID0gNDM1IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z180MzYgPSA0MzYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzQzNyA9IDQzNyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDM4ID0gNDM4
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ180MzkgPSA0MzkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ0MCA9IDQ0MCBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfNDQxID0gNDQxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ180NDIgPSA0NDIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ0MyA9IDQ0
MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfNDQ0ID0gNDQ0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NDUgPSA0NDUgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzQ0NiA9IDQ0NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfNDQ3ID0gNDQ3IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NDggPSA0
NDggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzQ0OSA9IDQ0OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDUwID0gNDUwIFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ180NTEgPSA0NTEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ1MiA9IDQ1MiBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDUzID0g
NDUzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ180NTQgPSA0NTQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ1NSA9IDQ1NSBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfNDU2ID0gNDU2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NTcgPSA0NTcgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ1OCA9
IDQ1OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfNDU5ID0gNDU5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NjAgPSA0NjAgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzQ2MSA9IDQ2MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDYyID0gNDYyIFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NjMg
PSA0NjMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzQ2NCA9IDQ2NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDY1ID0gNDY1IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ180NjYgPSA0NjYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ2NyA9IDQ2NyBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDY4
ID0gNDY4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ180NjkgPSA0NjkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ3MCA9IDQ3MCBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfNDcxID0gNDcxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NzIgPSA0NzIgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ3
MyA9IDQ3MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfNDc0ID0gNDc0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180NzUgPSA0NzUgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzQ3NiA9IDQ3NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDc3ID0gNDc3IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180
NzggPSA0NzggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzQ3OSA9IDQ3OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDgwID0gNDgwIFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ180ODEgPSA0ODEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ4MiA9IDQ4MiBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
NDgzID0gNDgzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ180ODQgPSA0ODQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ4NSA9IDQ4NSBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfNDg2ID0gNDg2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180ODcgPSA0ODcgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzQ4OCA9IDQ4OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfNDg5ID0gNDg5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ180OTAgPSA0OTAg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzQ5MSA9IDQ5MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDkyID0gNDkyIFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z180OTMgPSA0OTMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzQ5NCA9IDQ5NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNDk1ID0gNDk1
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ180OTYgPSA0OTYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzQ5NyA9IDQ5NyBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfNDk4ID0gNDk4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ180OTkgPSA0OTkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzUwMCA9IDUw
MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfNTAxID0gNTAxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181MDIgPSA1MDIgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzUwMyA9IDUwMyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfNTA0ID0gNTA0IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181MDUgPSA1
MDUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzUwNiA9IDUwNiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTA3ID0gNTA3IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ181MDggPSA1MDggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzUwOSA9IDUwOSBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTEwID0g
NTEwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ181MTEgPSA1MTEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzUxMiA9IDUxMiBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfNTEzID0gNTEzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ181MTQgPSA1MTQgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzUxNSA9
IDUxNSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfNTE2ID0gNTE2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181MTcgPSA1MTcgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzUxOCA9IDUxOCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTE5ID0gNTE5IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181MjAg
PSA1MjAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzUyMSA9IDUyMSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTIyID0gNTIyIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ181MjMgPSA1MjMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzUyNCA9IDUyNCBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTI1
ID0gNTI1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ181MjYgPSA1MjYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzUyNyA9IDUyNyBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfNTI4ID0gNTI4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181MjkgPSA1MjkgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzUz
MCA9IDUzMCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfNTMxID0gNTMxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181MzIgPSA1MzIgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzUzMyA9IDUzMyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTM0ID0gNTM0IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181
MzUgPSA1MzUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzUzNiA9IDUzNiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTM3ID0gNTM3IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ181MzggPSA1MzggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzUzOSA9IDUzOSBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
NTQwID0gNTQwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ181NDEgPSA1NDEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU0MiA9IDU0MiBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfNTQzID0gNTQzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181NDQgPSA1NDQgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzU0NSA9IDU0NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfNTQ2ID0gNTQ2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181NDcgPSA1NDcg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzU0OCA9IDU0OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTQ5ID0gNTQ5IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z181NTAgPSA1NTAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzU1MSA9IDU1MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTUyID0gNTUy
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ181NTMgPSA1NTMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU1NCA9IDU1NCBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfNTU1ID0gNTU1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ181NTYgPSA1NTYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU1NyA9IDU1
NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfNTU4ID0gNTU4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181NTkgPSA1NTkgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzU2MCA9IDU2MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfNTYxID0gNTYxIFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181NjIgPSA1
NjIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzU2MyA9IDU2MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTY0ID0gNTY0IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ181NjUgPSA1NjUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzU2NiA9IDU2NiBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTY3ID0g
NTY3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ181NjggPSA1NjggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU2OSA9IDU2OSBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfNTcwID0gNTcwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ181NzEgPSA1NzEgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU3MiA9
IDU3MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfNTczID0gNTczIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181NzQgPSA1NzQgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzU3NSA9IDU3NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTc2ID0gNTc2IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181Nzcg
PSA1NzcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzU3OCA9IDU3OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTc5ID0gNTc5IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ181ODAgPSA1ODAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU4MSA9IDU4MSBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTgy
ID0gNTgyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ181ODMgPSA1ODMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU4NCA9IDU4NCBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfNTg1ID0gNTg1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181ODYgPSA1ODYgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU4
NyA9IDU4NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfNTg4ID0gNTg4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181ODkgPSA1ODkgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzU5MCA9IDU5MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTkxID0gNTkxIFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ181
OTIgPSA1OTIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzU5MyA9IDU5MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNTk0ID0gNTk0IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ181OTUgPSA1OTUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU5NiA9IDU5NiBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
NTk3ID0gNTk3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ181OTggPSA1OTggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzU5OSA9IDU5OSBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfNjAwID0gNjAwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182MDEgPSA2MDEgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzYwMiA9IDYwMiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfNjAzID0gNjAzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182MDQgPSA2MDQg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzYwNSA9IDYwNSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjA2ID0gNjA2IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z182MDcgPSA2MDcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzYwOCA9IDYwOCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjA5ID0gNjA5
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ182MTAgPSA2MTAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzYxMSA9IDYxMSBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfNjEyID0gNjEyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ182MTMgPSA2MTMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzYxNCA9IDYx
NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfNjE1ID0gNjE1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182MTYgPSA2MTYgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzYxNyA9IDYxNyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfNjE4ID0gNjE4IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182MTkgPSA2
MTkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzYyMCA9IDYyMCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjIxID0gNjIxIFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ182MjIgPSA2MjIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzYyMyA9IDYyMyBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjI0ID0g
NjI0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ182MjUgPSA2MjUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzYyNiA9IDYyNiBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfNjI3ID0gNjI3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ182MjggPSA2MjggW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzYyOSA9
IDYyOSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfNjMwID0gNjMwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182MzEgPSA2MzEgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzYzMiA9IDYzMiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjMzID0gNjMzIFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182MzQg
PSA2MzQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzYzNSA9IDYzNSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjM2ID0gNjM2IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ182MzcgPSA2MzcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzYzOCA9IDYzOCBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjM5
ID0gNjM5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ182NDAgPSA2NDAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY0MSA9IDY0MSBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfNjQyID0gNjQyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182NDMgPSA2NDMgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY0
NCA9IDY0NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfNjQ1ID0gNjQ1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182NDYgPSA2NDYgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzY0NyA9IDY0NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjQ4ID0gNjQ4IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182
NDkgPSA2NDkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzY1MCA9IDY1MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjUxID0gNjUxIFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ182NTIgPSA2NTIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY1MyA9IDY1MyBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
NjU0ID0gNjU0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ182NTUgPSA2NTUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY1NiA9IDY1NiBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfNjU3ID0gNjU3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182NTggPSA2NTggW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzY1OSA9IDY1OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfNjYwID0gNjYwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182NjEgPSA2NjEg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzY2MiA9IDY2MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjYzID0gNjYzIFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z182NjQgPSA2NjQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzY2NSA9IDY2NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjY2ID0gNjY2
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ182NjcgPSA2NjcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY2OCA9IDY2OCBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfNjY5ID0gNjY5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ182NzAgPSA2NzAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY3MSA9IDY3
MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfNjcyID0gNjcyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182NzMgPSA2NzMgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzY3NCA9IDY3NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfNjc1ID0gNjc1IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182NzYgPSA2
NzYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzY3NyA9IDY3NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjc4ID0gNjc4IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ182NzkgPSA2NzkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzY4MCA9IDY4MCBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjgxID0g
NjgxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ182ODIgPSA2ODIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY4MyA9IDY4MyBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfNjg0ID0gNjg0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ182ODUgPSA2ODUgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY4NiA9
IDY4NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfNjg3ID0gNjg3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182ODggPSA2ODggW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzY4OSA9IDY4OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjkwID0gNjkwIFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ182OTEg
PSA2OTEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzY5MiA9IDY5MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjkzID0gNjkzIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ182OTQgPSA2OTQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY5NSA9IDY5NSBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNjk2
ID0gNjk2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ182OTcgPSA2OTcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzY5OCA9IDY5OCBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfNjk5ID0gNjk5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183MDAgPSA3MDAgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzcw
MSA9IDcwMSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfNzAyID0gNzAyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183MDMgPSA3MDMgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzcwNCA9IDcwNCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzA1ID0gNzA1IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183
MDYgPSA3MDYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzcwNyA9IDcwNyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzA4ID0gNzA4IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ183MDkgPSA3MDkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzcxMCA9IDcxMCBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
NzExID0gNzExIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ183MTIgPSA3MTIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzcxMyA9IDcxMyBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfNzE0ID0gNzE0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183MTUgPSA3MTUgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzcxNiA9IDcxNiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfNzE3ID0gNzE3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183MTggPSA3MTgg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzcxOSA9IDcxOSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzIwID0gNzIwIFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z183MjEgPSA3MjEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzcyMiA9IDcyMiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzIzID0gNzIz
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ183MjQgPSA3MjQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzcyNSA9IDcyNSBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfNzI2ID0gNzI2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ183MjcgPSA3MjcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzcyOCA9IDcy
OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfNzI5ID0gNzI5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183MzAgPSA3MzAgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzczMSA9IDczMSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfNzMyID0gNzMyIFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183MzMgPSA3
MzMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzczNCA9IDczNCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzM1ID0gNzM1IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ183MzYgPSA3MzYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzczNyA9IDczNyBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzM4ID0g
NzM4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ183MzkgPSA3MzkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc0MCA9IDc0MCBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfNzQxID0gNzQxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ183NDIgPSA3NDIgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc0MyA9
IDc0MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfNzQ0ID0gNzQ0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183NDUgPSA3NDUgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzc0NiA9IDc0NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzQ3ID0gNzQ3IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183NDgg
PSA3NDggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzc0OSA9IDc0OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzUwID0gNzUwIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ183NTEgPSA3NTEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc1MiA9IDc1MiBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzUz
ID0gNzUzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ183NTQgPSA3NTQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc1NSA9IDc1NSBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfNzU2ID0gNzU2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183NTcgPSA3NTcgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc1
OCA9IDc1OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfNzU5ID0gNzU5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183NjAgPSA3NjAgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzc2MSA9IDc2MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzYyID0gNzYyIFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183
NjMgPSA3NjMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzc2NCA9IDc2NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzY1ID0gNzY1IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ183NjYgPSA3NjYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc2NyA9IDc2NyBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
NzY4ID0gNzY4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ183NjkgPSA3NjkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc3MCA9IDc3MCBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfNzcxID0gNzcxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183NzIgPSA3NzIgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Xzc3MyA9IDc3MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfNzc0ID0gNzc0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183NzUgPSA3NzUg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzc3NiA9IDc3NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzc3ID0gNzc3IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z183NzggPSA3NzggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzc3OSA9IDc3OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzgwID0gNzgw
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ183ODEgPSA3ODEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc4MiA9IDc4MiBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfNzgzID0gNzgzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ183ODQgPSA3ODQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc4NSA9IDc4
NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfNzg2ID0gNzg2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183ODcgPSA3ODcgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzc4OCA9IDc4OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfNzg5ID0gNzg5IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ183OTAgPSA3
OTAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzc5MSA9IDc5MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzkyID0gNzkyIFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ183OTMgPSA3OTMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzc5NCA9IDc5NCBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfNzk1ID0g
Nzk1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ183OTYgPSA3OTYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzc5NyA9IDc5NyBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfNzk4ID0gNzk4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ183OTkgPSA3OTkgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzgwMCA9
IDgwMCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfODAxID0gODAxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184MDIgPSA4MDIgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzgwMyA9IDgwMyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODA0ID0gODA0IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184MDUg
PSA4MDUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzgwNiA9IDgwNiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODA3ID0gODA3IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ184MDggPSA4MDggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzgwOSA9IDgwOSBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODEw
ID0gODEwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ184MTEgPSA4MTEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzgxMiA9IDgxMiBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfODEzID0gODEzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184MTQgPSA4MTQgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzgx
NSA9IDgxNSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfODE2ID0gODE2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184MTcgPSA4MTcgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzgxOCA9IDgxOCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODE5ID0gODE5IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184
MjAgPSA4MjAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzgyMSA9IDgyMSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODIyID0gODIyIFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ184MjMgPSA4MjMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzgyNCA9IDgyNCBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
ODI1ID0gODI1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ184MjYgPSA4MjYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzgyNyA9IDgyNyBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfODI4ID0gODI4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184MjkgPSA4MjkgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
XzgzMCA9IDgzMCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfODMxID0gODMxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184MzIgPSA4MzIg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzgzMyA9IDgzMyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODM0ID0gODM0IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z184MzUgPSA4MzUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzgzNiA9IDgzNiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODM3ID0gODM3
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ184MzggPSA4MzggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzgzOSA9IDgzOSBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfODQwID0gODQwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ184NDEgPSA4NDEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg0MiA9IDg0
MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfODQzID0gODQzIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NDQgPSA4NDQgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzg0NSA9IDg0NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfODQ2ID0gODQ2IFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NDcgPSA4
NDcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzg0OCA9IDg0OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODQ5ID0gODQ5IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ184NTAgPSA4NTAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzg1MSA9IDg1MSBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODUyID0g
ODUyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ184NTMgPSA4NTMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg1NCA9IDg1NCBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfODU1ID0gODU1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NTYgPSA4NTYgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg1NyA9
IDg1NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfODU4ID0gODU4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NTkgPSA4NTkgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzg2MCA9IDg2MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODYxID0gODYxIFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NjIg
PSA4NjIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzg2MyA9IDg2MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODY0ID0gODY0IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ184NjUgPSA4NjUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg2NiA9IDg2NiBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODY3
ID0gODY3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ184NjggPSA4NjggW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg2OSA9IDg2OSBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfODcwID0gODcwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NzEgPSA4NzEgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg3
MiA9IDg3MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfODczID0gODczIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184NzQgPSA4NzQgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzg3NSA9IDg3NSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODc2ID0gODc2IFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184
NzcgPSA4NzcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzg3OCA9IDg3OCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODc5ID0gODc5IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ184ODAgPSA4ODAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg4MSA9IDg4MSBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
ODgyID0gODgyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ184ODMgPSA4ODMgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg4NCA9IDg4NCBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfODg1ID0gODg1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184ODYgPSA4ODYgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Xzg4NyA9IDg4NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfODg4ID0gODg4IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ184ODkgPSA4ODkg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzg5MCA9IDg5MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODkxID0gODkxIFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z184OTIgPSA4OTIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzg5MyA9IDg5MyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfODk0ID0gODk0
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ184OTUgPSA4OTUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg5NiA9IDg5NiBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfODk3ID0gODk3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ184OTggPSA4OTggW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzg5OSA9IDg5
OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfOTAwID0gOTAwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MDEgPSA5MDEgW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzkwMiA9IDkwMiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfOTAzID0gOTAzIFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MDQgPSA5
MDQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzkwNSA9IDkwNSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTA2ID0gOTA2IFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ185MDcgPSA5MDcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzkwOCA9IDkwOCBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTA5ID0g
OTA5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ185MTAgPSA5MTAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzkxMSA9IDkxMSBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfOTEyID0gOTEyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MTMgPSA5MTMgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzkxNCA9
IDkxNCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfOTE1ID0gOTE1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MTYgPSA5MTYgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzkxNyA9IDkxNyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTE4ID0gOTE4IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MTkg
PSA5MTkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzkyMCA9IDkyMCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTIxID0gOTIxIFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ185MjIgPSA5MjIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzkyMyA9IDkyMyBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTI0
ID0gOTI0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ185MjUgPSA5MjUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzkyNiA9IDkyNiBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfOTI3ID0gOTI3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MjggPSA5MjggW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzky
OSA9IDkyOSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfOTMwID0gOTMwIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185MzEgPSA5MzEgW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzkzMiA9IDkzMiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTMzID0gOTMzIFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185
MzQgPSA5MzQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzkzNSA9IDkzNSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTM2ID0gOTM2IFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ185MzcgPSA5MzcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzkzOCA9IDkzOCBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
OTM5ID0gOTM5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ185NDAgPSA5NDAgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk0MSA9IDk0MSBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfOTQyID0gOTQyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185NDMgPSA5NDMgW2RlZmF1bHQ9Imxv
bmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsK
LSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Xzk0NCA9IDk0NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1l
X2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmdfOTQ1ID0gOTQ1IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQg
dmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFs
IHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185NDYgPSA5NDYg
W2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nXzk0NyA9IDk0NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFs
c28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9u
Z19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTQ4ID0gOTQ4IFtkZWZhdWx0PSJs
b25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07
Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
Z185NDkgPSA5NDkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFt
ZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nXzk1MCA9IDk1MCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0
IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25h
bCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTUxID0gOTUx
IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZ185NTIgPSA5NTIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBh
bHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxv
bmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk1MyA9IDk1MyBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmdfOTU0ID0gOTU0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25h
bWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZ185NTUgPSA5NTUgW2RlZmF1bHQ9ImxvbmcgZGVmYXVs
dCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk1NiA9IDk1
NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmdfOTU3ID0gOTU3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMg
YWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBs
b25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185NTggPSA5NTggW2RlZmF1bHQ9
ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmci
XTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nXzk1OSA9IDk1OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9u
YW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmdfOTYwID0gOTYwIFtkZWZhdWx0PSJsb25nIGRlZmF1
bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlv
bmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185NjEgPSA5
NjEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nXzk2MiA9IDk2MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlz
IGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcg
bG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTYzID0gOTYzIFtkZWZhdWx0
PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25n
Il07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZ185NjQgPSA5NjQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRf
bmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nXzk2NSA9IDk2NSBbZGVmYXVsdD0ibG9uZyBkZWZh
dWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRp
b25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTY2ID0g
OTY2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZ185NjcgPSA5NjcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBp
cyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5n
IGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk2OCA9IDk2OCBbZGVmYXVs
dD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29u
ZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmdfOTY5ID0gOTY5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxk
X25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZ185NzAgPSA5NzAgW2RlZmF1bHQ9ImxvbmcgZGVm
YXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk3MSA9
IDk3MSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmdfOTcyID0gOTcyIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUg
aXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmlu
ZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185NzMgPSA5NzMgW2RlZmF1
bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
bmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nXzk3NCA9IDk3NCBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVs
ZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTc1ID0gOTc1IFtkZWZhdWx0PSJsb25nIGRl
ZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9w
dGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185NzYg
PSA5NzYgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19s
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nXzk3NyA9IDk3NyBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVl
IGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJp
bmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTc4ID0gOTc4IFtkZWZh
dWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZ185NzkgPSA5NzkgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxv
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmll
bGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk4MCA9IDk4MCBbZGVmYXVsdD0ibG9uZyBk
ZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBv
cHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTgx
ID0gOTgxIFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNf
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29uZ185ODIgPSA5ODIgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1
ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3Ry
aW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk4MyA9IDk4MyBbZGVm
YXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbmdfOTg0ID0gOTg0IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBs
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2Zp
ZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185ODUgPSA5ODUgW2RlZmF1bHQ9Imxvbmcg
ZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAg
b3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk4
NiA9IDk4NiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lz
X2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbmdfOTg3ID0gOTg3IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFs
dWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0
cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185ODggPSA5ODggW2Rl
ZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb25nXzk4OSA9IDk4OSBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28g
bG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19m
aWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTkwID0gOTkwIFtkZWZhdWx0PSJsb25n
IGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0g
IG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ185
OTEgPSA5OTEgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNvIGxvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdfZmllbGRfbmFtZV9p
c19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb25nXzk5MiA9IDk5MiBbZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZh
bHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwotICBvcHRpb25hbCBz
dHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfOTkzID0gOTkzIFtk
ZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVfaXNfbG9vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29uZ185OTQgPSA5OTQgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2YWx1ZSBpcyBhbHNv
IGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGxvbmdf
ZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk5NSA9IDk5NSBbZGVmYXVsdD0ibG9u
ZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJdOwot
ICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdf
OTk2ID0gOTk2IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxzbyBsb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25nX2ZpZWxkX25hbWVf
aXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29uZ185OTcgPSA5OTcgW2RlZmF1bHQ9ImxvbmcgZGVmYXVsdCB2
YWx1ZSBpcyBhbHNvIGxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmciXTsKLSAgb3B0aW9uYWwg
c3RyaW5nIGxvbmdfZmllbGRfbmFtZV9pc19sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nXzk5OCA9IDk5OCBb
ZGVmYXVsdD0ibG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29uZyJdOwotICBvcHRpb25hbCBzdHJpbmcgbG9uZ19maWVsZF9uYW1lX2lzX2xvb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vbmdfOTk5ID0gOTk5IFtkZWZhdWx0PSJsb25nIGRlZmF1bHQgdmFsdWUgaXMgYWxz
byBsb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBsb25n
X2ZpZWxkX25hbWVfaXNfbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZ18xMDAwID0gMTAwMCBbZGVmYXVsdD0i
bG9uZyBkZWZhdWx0IHZhbHVlIGlzIGFsc28gbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyJd
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydC5wcm90
byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnQucHJvdG8KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDhkMDNlMzg4OGJjOTJlNmY3ZTg1MGY5NjgyMDJiZmY4ODFmN2Ez
MmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydC5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDcz
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6
IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwg
UHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVh
biwgYW5kIG90aGVycy4KLS8vCi0vLyBBIHByb3RvIGZpbGUgd2hpY2ggaXMgaW1wb3J0ZWQgYnkg
dW5pdHRlc3QucHJvdG8gdG8gdGVzdCBpbXBvcnRpbmcuCi0KLXN5bnRheCA9ICJwcm90bzIiOwot
Ci0vLyBXZSBkb24ndCBwdXQgdGhpcyBpbiBhIHBhY2thZ2Ugd2l0aGluIHByb3RvMiBiZWNhdXNl
IHdlIG5lZWQgdG8gbWFrZSBzdXJlCi0vLyB0aGF0IHRoZSBnZW5lcmF0ZWQgY29kZSBkb2Vzbid0
IGRlcGVuZCBvbiBiZWluZyBpbiB0aGUgcHJvdG8yIG5hbWVzcGFjZS4KLS8vIEluIHRlc3RfdXRp
bC5oIHdlIGRvCi0vLyAidXNpbmcgbmFtZXNwYWNlIHVuaXR0ZXN0X2ltcG9ydCA9IHByb3RvYnVm
X3VuaXR0ZXN0X2ltcG9ydCIuCi1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydDsKLQot
b3B0aW9uIG9wdGltaXplX2ZvciA9IFNQRUVEOwotb3B0aW9uIGNjX2VuYWJsZV9hcmVuYXMgPSB0
cnVlOwotCi0vLyBFeGVyY2lzZSB0aGUgamF2YV9wYWNrYWdlIG9wdGlvbi4KLW9wdGlvbiBqYXZh
X3BhY2thZ2UgPSAiY29tLmdvb2dsZS5wcm90b2J1Zi50ZXN0IjsKLQotLy8gRG8gbm90IHNldCBh
IGphdmFfb3V0ZXJfY2xhc3NuYW1lIGhlcmUgdG8gdmVyaWZ5IHRoYXQgUHJvdG8yIHdvcmtzIHdp
dGhvdXQKLS8vIG9uZS4KLQotLy8gVGVzdCBwdWJsaWMgaW1wb3J0Ci1pbXBvcnQgcHVibGljICJn
b29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpYy5wcm90byI7Ci0KLW1lc3NhZ2Ug
SW1wb3J0TWVzc2FnZSB7Ci0gIG9wdGlvbmFsIGludDMyIGQgPSAxOwotfQotCi1lbnVtIEltcG9y
dEVudW0gewotICBJTVBPUlRfRk9PID0gNzsKLSAgSU1QT1JUX0JBUiA9IDg7Ci0gIElNUE9SVF9C
QVogPSA5OwotfQotCi0KLS8vIFRvIHVzZSBhbiBlbnVtIGluIGEgbWFwLCBpdCBtdXN0IGhhcyB0
aGUgZmlyc3QgdmFsdWUgYXMgMC4KLWVudW0gSW1wb3J0RW51bUZvck1hcCB7Ci0gIFVOS05PV04g
PSAwOwotICBGT08gPSAxOwotICBCQVIgPSAyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3VuaXR0ZXN0X2ltcG9ydF9saXRlLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Vu
aXR0ZXN0X2ltcG9ydF9saXRlLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
N2FmYTQ1MjMzMmJjNTk2MmZmY2JiMjBjMGQ2MDY2MjU2OTAyZjBkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVz
dF9pbXBvcnRfbGl0ZS5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUu
Y29tIChLZW50b24gVmFyZGEpCi0vLwotLy8gVGhpcyBpcyBsaWtlIHVuaXR0ZXN0X2ltcG9ydC5w
cm90byBidXQgd2l0aCBvcHRpbWl6ZV9mb3IgPSBMSVRFX1JVTlRJTUUuCi0KLXN5bnRheCA9ICJw
cm90bzIiOwotcGFja2FnZSBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQ7Ci0KLW9wdGlvbiBvcHRp
bWl6ZV9mb3IgPSBMSVRFX1JVTlRJTUU7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdv
b2dsZS5wcm90b2J1ZiI7Ci0KLWltcG9ydCBwdWJsaWMgImdvb2dsZS9wcm90b2J1Zi91bml0dGVz
dF9pbXBvcnRfcHVibGljX2xpdGUucHJvdG8iOwotCi1tZXNzYWdlIEltcG9ydE1lc3NhZ2VMaXRl
IHsKLSAgb3B0aW9uYWwgaW50MzIgZCA9IDE7Ci19Ci0KLWVudW0gSW1wb3J0RW51bUxpdGUgewot
ICBJTVBPUlRfTElURV9GT08gPSA3OwotICBJTVBPUlRfTElURV9CQVIgPSA4OwotICBJTVBPUlRf
TElURV9CQVogPSA5OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0
X2ltcG9ydF9wcm90bzMucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0
X3Byb3RvMy5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk2NzNlYWY5ZDQz
YmQxNWU4OWQyYTA1ZjJiOTIwYTc4MjRjYmExZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3By
b3RvMy5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50
b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24g
YnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBB
IHByb3RvIGZpbGUgd2hpY2ggaXMgaW1wb3J0ZWQgYnkgdW5pdHRlc3RfcHJvdG8zLnByb3RvIHRv
IHRlc3QgaW1wb3J0aW5nLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotLy8gV2UgZG9uJ3QgcHV0
IHRoaXMgaW4gYSBwYWNrYWdlIHdpdGhpbiBwcm90bzIgYmVjYXVzZSB3ZSBuZWVkIHRvIG1ha2Ug
c3VyZQotLy8gdGhhdCB0aGUgZ2VuZXJhdGVkIGNvZGUgZG9lc24ndCBkZXBlbmQgb24gYmVpbmcg
aW4gdGhlIHByb3RvMiBuYW1lc3BhY2UuCi0vLyBJbiB0ZXN0X3V0aWwuaCB3ZSBkbwotLy8gInVz
aW5nIG5hbWVzcGFjZSB1bml0dGVzdF9pbXBvcnQgPSBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQi
LgotcGFja2FnZSBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQ7Ci0KLW9wdGlvbiBvcHRpbWl6ZV9m
b3IgPSBTUEVFRDsKLW9wdGlvbiBjY19lbmFibGVfYXJlbmFzID0gdHJ1ZTsKLQotLy8gRXhlcmNp
c2UgdGhlIGphdmFfcGFja2FnZSBvcHRpb24uCi1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5n
b29nbGUucHJvdG9idWYudGVzdCI7Ci1vcHRpb24gY3NoYXJwX25hbWVzcGFjZSA9ICJHb29nbGUu
UHJvdG9idWYuVGVzdFByb3RvcyI7Ci0KLS8vIERvIG5vdCBzZXQgYSBqYXZhX291dGVyX2NsYXNz
bmFtZSBoZXJlIHRvIHZlcmlmeSB0aGF0IFByb3RvMiB3b3JrcyB3aXRob3V0Ci0vLyBvbmUuCi0K
LS8vIFRlc3QgcHVibGljIGltcG9ydAotaW1wb3J0IHB1YmxpYyAiZ29vZ2xlL3Byb3RvYnVmL3Vu
aXR0ZXN0X2ltcG9ydF9wdWJsaWNfcHJvdG8zLnByb3RvIjsKLQotbWVzc2FnZSBJbXBvcnRNZXNz
YWdlIHsKLSAgaW50MzIgZCA9IDE7Ci19Ci0KLWVudW0gSW1wb3J0RW51bSB7Ci0gIElNUE9SVF9F
TlVNX1VOU1BFQ0lGSUVEID0gMDsKLSAgSU1QT1JUX0ZPTyA9IDc7Ci0gIElNUE9SVF9CQVIgPSA4
OwotICBJTVBPUlRfQkFaID0gOTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L3VuaXR0ZXN0X2ltcG9ydF9wdWJsaWMucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRl
c3RfaW1wb3J0X3B1YmxpYy5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZh
Zjc3MzY5OGYwYjQ5NWJlNjM1OWFmZTEzMjhkZjgzNTU5YmQ3OS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rf
aW1wb3J0X3B1YmxpYy5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGxpdWppc2lAZ29vZ2xl
LmNvbSAoUGhlcmwgTGl1KQotCi1zeW50YXggPSAicHJvdG8yIjsKLQotcGFja2FnZSBwcm90b2J1
Zl91bml0dGVzdF9pbXBvcnQ7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5w
cm90b2J1Zi50ZXN0IjsKLQotbWVzc2FnZSBQdWJsaWNJbXBvcnRNZXNzYWdlIHsKLSAgb3B0aW9u
YWwgaW50MzIgZSA9IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRl
c3RfaW1wb3J0X3B1YmxpY19saXRlLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0
X2ltcG9ydF9wdWJsaWNfbGl0ZS5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzM1NDljMjI3OTI5MDQ1ZTdlNDIxYjQ0M2RlODcyNTYwYzUyNDJmZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRl
c3RfaW1wb3J0X3B1YmxpY19saXRlLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjogbGl1amlz
aUBnb29nbGUuY29tIChQaGVybCBMaXUpCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi1wYWNrYWdl
IHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydDsKLQotb3B0aW9uIG9wdGltaXplX2ZvciA9IExJVEVf
UlVOVElNRTsKLQotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20uZ29vZ2xlLnByb3RvYnVmIjsK
LQotbWVzc2FnZSBQdWJsaWNJbXBvcnRNZXNzYWdlTGl0ZSB7Ci0gIG9wdGlvbmFsIGludDMyIGUg
PSAxOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydF9w
dWJsaWNfcHJvdG8zLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydF9w
dWJsaWNfcHJvdG8zLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmYxMWUy
OGJkMWJmNTU3YzJlNDZhZDkxZmY5OTg3MzQ3ODdmOTliLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBv
cnRfcHVibGljX3Byb3RvMy5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGxpdWppc2lAZ29v
Z2xlLmNvbSAoUGhlcmwgTGl1KQotCi1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBwcm90
b2J1Zl91bml0dGVzdF9pbXBvcnQ7Ci0KLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2ds
ZS5wcm90b2J1Zi50ZXN0IjsKLW9wdGlvbiBjc2hhcnBfbmFtZXNwYWNlID0gIkdvb2dsZS5Qcm90
b2J1Zi5UZXN0UHJvdG9zIjsKLQotbWVzc2FnZSBQdWJsaWNJbXBvcnRNZXNzYWdlIHsKLSBpbnQz
MiBlID0gMTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9saXRl
LnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2xpdGUucHJvdG8KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OGVjN2MxZDIwODE4OWU3ZmY2NmY2NGQ4NDBjNThiY2Yw
MWY2ZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2xpdGUucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw0
MDcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFu
Z2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMv
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8v
IGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhv
cjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vCi0vLyBUaGlzIGlzIGxpa2Ug
dW5pdHRlc3QucHJvdG8gYnV0IHdpdGggb3B0aW1pemVfZm9yID0gTElURV9SVU5USU1FLgotCi1z
eW50YXggPSAicHJvdG8yIjsKLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7Ci0KLWltcG9ydCAi
Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydF9saXRlLnByb3RvIjsKLQotb3B0aW9uIG9w
dGltaXplX2ZvciA9IExJVEVfUlVOVElNRTsKLQotb3B0aW9uIGphdmFfcGFja2FnZSA9ICJjb20u
Z29vZ2xlLnByb3RvYnVmIjsKLQotLy8gU2FtZSBhcyBUZXN0QWxsVHlwZXMgYnV0IHdpdGggdGhl
IGxpdGUgcnVudGltZS4KLW1lc3NhZ2UgVGVzdEFsbFR5cGVzTGl0ZSB7Ci0KLSAgbWVzc2FnZSBO
ZXN0ZWRNZXNzYWdlIHsKLSAgICBvcHRpb25hbCBpbnQzMiBiYiA9IDE7Ci0gICAgb3B0aW9uYWwg
aW50NjQgY2MgPSAyOwotICB9Ci0KLSAgZW51bSBOZXN0ZWRFbnVtIHsKLSAgICBGT08gPSAxOwot
ICAgIEJBUiA9IDI7Ci0gICAgQkFaID0gMzsKLSAgfQotCi0gIC8vIFNpbmd1bGFyCi0gIG9wdGlv
bmFsICAgIGludDMyIG9wdGlvbmFsX2ludDMyICAgID0gIDE7Ci0gIG9wdGlvbmFsICAgIGludDY0
IG9wdGlvbmFsX2ludDY0ICAgID0gIDI7Ci0gIG9wdGlvbmFsICAgdWludDMyIG9wdGlvbmFsX3Vp
bnQzMiAgID0gIDM7Ci0gIG9wdGlvbmFsICAgdWludDY0IG9wdGlvbmFsX3VpbnQ2NCAgID0gIDQ7
Ci0gIG9wdGlvbmFsICAgc2ludDMyIG9wdGlvbmFsX3NpbnQzMiAgID0gIDU7Ci0gIG9wdGlvbmFs
ICAgc2ludDY0IG9wdGlvbmFsX3NpbnQ2NCAgID0gIDY7Ci0gIG9wdGlvbmFsICBmaXhlZDMyIG9w
dGlvbmFsX2ZpeGVkMzIgID0gIDc7Ci0gIG9wdGlvbmFsICBmaXhlZDY0IG9wdGlvbmFsX2ZpeGVk
NjQgID0gIDg7Ci0gIG9wdGlvbmFsIHNmaXhlZDMyIG9wdGlvbmFsX3NmaXhlZDMyID0gIDk7Ci0g
IG9wdGlvbmFsIHNmaXhlZDY0IG9wdGlvbmFsX3NmaXhlZDY0ID0gMTA7Ci0gIG9wdGlvbmFsICAg
IGZsb2F0IG9wdGlvbmFsX2Zsb2F0ICAgID0gMTE7Ci0gIG9wdGlvbmFsICAgZG91YmxlIG9wdGlv
bmFsX2RvdWJsZSAgID0gMTI7Ci0gIG9wdGlvbmFsICAgICBib29sIG9wdGlvbmFsX2Jvb2wgICAg
ID0gMTM7Ci0gIG9wdGlvbmFsICAgc3RyaW5nIG9wdGlvbmFsX3N0cmluZyAgID0gMTQ7Ci0gIG9w
dGlvbmFsICAgIGJ5dGVzIG9wdGlvbmFsX2J5dGVzICAgID0gMTU7Ci0KLSAgb3B0aW9uYWwgZ3Jv
dXAgT3B0aW9uYWxHcm91cCA9IDE2IHsKLSAgICBvcHRpb25hbCBpbnQzMiBhID0gMTc7Ci0gIH0K
LQotICBvcHRpb25hbCBOZXN0ZWRNZXNzYWdlICAgICAgb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2Ug
ID0gMTg7Ci0gIG9wdGlvbmFsIEZvcmVpZ25NZXNzYWdlTGl0ZSBvcHRpb25hbF9mb3JlaWduX21l
c3NhZ2UgPSAxOTsKLSAgb3B0aW9uYWwgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1l
c3NhZ2VMaXRlCi0gICAgb3B0aW9uYWxfaW1wb3J0X21lc3NhZ2UgPSAyMDsKLQotICBvcHRpb25h
bCBOZXN0ZWRFbnVtICAgICAgb3B0aW9uYWxfbmVzdGVkX2VudW0gICAgID0gMjE7Ci0gIG9wdGlv
bmFsIEZvcmVpZ25FbnVtTGl0ZSBvcHRpb25hbF9mb3JlaWduX2VudW0gICAgPSAyMjsKLSAgb3B0
aW9uYWwgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW1MaXRlIG9wdGlvbmFsX2lt
cG9ydF9lbnVtID0gMjM7Ci0KLSAgb3B0aW9uYWwgc3RyaW5nIG9wdGlvbmFsX3N0cmluZ19waWVj
ZSA9IDI0IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICBvcHRpb25hbCBzdHJpbmcgb3B0aW9uYWxf
Y29yZCA9IDI1IFtjdHlwZT1DT1JEXTsKLQotICAvLyBEZWZpbmVkIGluIHVuaXR0ZXN0X2ltcG9y
dF9wdWJsaWMucHJvdG8KLSAgb3B0aW9uYWwgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LlB1Ymxp
Y0ltcG9ydE1lc3NhZ2VMaXRlCi0gICAgICBvcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2Ug
PSAyNjsKLQotICBvcHRpb25hbCBOZXN0ZWRNZXNzYWdlIG9wdGlvbmFsX2xhenlfbWVzc2FnZSA9
IDI3IFtsYXp5PXRydWVdOwotCi0gIC8vIFJlcGVhdGVkCi0gIHJlcGVhdGVkICAgIGludDMyIHJl
cGVhdGVkX2ludDMyICAgID0gMzE7Ci0gIHJlcGVhdGVkICAgIGludDY0IHJlcGVhdGVkX2ludDY0
ICAgID0gMzI7Ci0gIHJlcGVhdGVkICAgdWludDMyIHJlcGVhdGVkX3VpbnQzMiAgID0gMzM7Ci0g
IHJlcGVhdGVkICAgdWludDY0IHJlcGVhdGVkX3VpbnQ2NCAgID0gMzQ7Ci0gIHJlcGVhdGVkICAg
c2ludDMyIHJlcGVhdGVkX3NpbnQzMiAgID0gMzU7Ci0gIHJlcGVhdGVkICAgc2ludDY0IHJlcGVh
dGVkX3NpbnQ2NCAgID0gMzY7Ci0gIHJlcGVhdGVkICBmaXhlZDMyIHJlcGVhdGVkX2ZpeGVkMzIg
ID0gMzc7Ci0gIHJlcGVhdGVkICBmaXhlZDY0IHJlcGVhdGVkX2ZpeGVkNjQgID0gMzg7Ci0gIHJl
cGVhdGVkIHNmaXhlZDMyIHJlcGVhdGVkX3NmaXhlZDMyID0gMzk7Ci0gIHJlcGVhdGVkIHNmaXhl
ZDY0IHJlcGVhdGVkX3NmaXhlZDY0ID0gNDA7Ci0gIHJlcGVhdGVkICAgIGZsb2F0IHJlcGVhdGVk
X2Zsb2F0ICAgID0gNDE7Ci0gIHJlcGVhdGVkICAgZG91YmxlIHJlcGVhdGVkX2RvdWJsZSAgID0g
NDI7Ci0gIHJlcGVhdGVkICAgICBib29sIHJlcGVhdGVkX2Jvb2wgICAgID0gNDM7Ci0gIHJlcGVh
dGVkICAgc3RyaW5nIHJlcGVhdGVkX3N0cmluZyAgID0gNDQ7Ci0gIHJlcGVhdGVkICAgIGJ5dGVz
IHJlcGVhdGVkX2J5dGVzICAgID0gNDU7Ci0KLSAgcmVwZWF0ZWQgZ3JvdXAgUmVwZWF0ZWRHcm91
cCA9IDQ2IHsKLSAgICBvcHRpb25hbCBpbnQzMiBhID0gNDc7Ci0gIH0KLQotICByZXBlYXRlZCBO
ZXN0ZWRNZXNzYWdlICAgICAgcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgID0gNDg7Ci0gIHJlcGVh
dGVkIEZvcmVpZ25NZXNzYWdlTGl0ZSByZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UgPSA0OTsKLSAg
cmVwZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2VMaXRlCi0gICAg
cmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2UgPSA1MDsKLQotICByZXBlYXRlZCBOZXN0ZWRFbnVtICAg
ICAgcmVwZWF0ZWRfbmVzdGVkX2VudW0gID0gNTE7Ci0gIHJlcGVhdGVkIEZvcmVpZ25FbnVtTGl0
ZSByZXBlYXRlZF9mb3JlaWduX2VudW0gPSA1MjsKLSAgcmVwZWF0ZWQgcHJvdG9idWZfdW5pdHRl
c3RfaW1wb3J0LkltcG9ydEVudW1MaXRlIHJlcGVhdGVkX2ltcG9ydF9lbnVtID0gNTM7Ci0KLSAg
cmVwZWF0ZWQgc3RyaW5nIHJlcGVhdGVkX3N0cmluZ19waWVjZSA9IDU0IFtjdHlwZT1TVFJJTkdf
UElFQ0VdOwotICByZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRfY29yZCA9IDU1IFtjdHlwZT1DT1JE
XTsKLQotICByZXBlYXRlZCBOZXN0ZWRNZXNzYWdlIHJlcGVhdGVkX2xhenlfbWVzc2FnZSA9IDU3
IFtsYXp5PXRydWVdOwotCi0gIC8vIFNpbmd1bGFyIHdpdGggZGVmYXVsdHMKLSAgb3B0aW9uYWwg
ICAgaW50MzIgZGVmYXVsdF9pbnQzMiAgICA9IDYxIFtkZWZhdWx0ID0gIDQxICAgIF07Ci0gIG9w
dGlvbmFsICAgIGludDY0IGRlZmF1bHRfaW50NjQgICAgPSA2MiBbZGVmYXVsdCA9ICA0MiAgICBd
OwotICBvcHRpb25hbCAgIHVpbnQzMiBkZWZhdWx0X3VpbnQzMiAgID0gNjMgW2RlZmF1bHQgPSAg
NDMgICAgXTsKLSAgb3B0aW9uYWwgICB1aW50NjQgZGVmYXVsdF91aW50NjQgICA9IDY0IFtkZWZh
dWx0ID0gIDQ0ICAgIF07Ci0gIG9wdGlvbmFsICAgc2ludDMyIGRlZmF1bHRfc2ludDMyICAgPSA2
NSBbZGVmYXVsdCA9IC00NSAgICBdOwotICBvcHRpb25hbCAgIHNpbnQ2NCBkZWZhdWx0X3NpbnQ2
NCAgID0gNjYgW2RlZmF1bHQgPSAgNDYgICAgXTsKLSAgb3B0aW9uYWwgIGZpeGVkMzIgZGVmYXVs
dF9maXhlZDMyICA9IDY3IFtkZWZhdWx0ID0gIDQ3ICAgIF07Ci0gIG9wdGlvbmFsICBmaXhlZDY0
IGRlZmF1bHRfZml4ZWQ2NCAgPSA2OCBbZGVmYXVsdCA9ICA0OCAgICBdOwotICBvcHRpb25hbCBz
Zml4ZWQzMiBkZWZhdWx0X3NmaXhlZDMyID0gNjkgW2RlZmF1bHQgPSAgNDkgICAgXTsKLSAgb3B0
aW9uYWwgc2ZpeGVkNjQgZGVmYXVsdF9zZml4ZWQ2NCA9IDcwIFtkZWZhdWx0ID0gLTUwICAgIF07
Ci0gIG9wdGlvbmFsICAgIGZsb2F0IGRlZmF1bHRfZmxvYXQgICAgPSA3MSBbZGVmYXVsdCA9ICA1
MS41ICBdOwotICBvcHRpb25hbCAgIGRvdWJsZSBkZWZhdWx0X2RvdWJsZSAgID0gNzIgW2RlZmF1
bHQgPSAgNTJlMyAgXTsKLSAgb3B0aW9uYWwgICAgIGJvb2wgZGVmYXVsdF9ib29sICAgICA9IDcz
IFtkZWZhdWx0ID0gdHJ1ZSAgIF07Ci0gIG9wdGlvbmFsICAgc3RyaW5nIGRlZmF1bHRfc3RyaW5n
ICAgPSA3NCBbZGVmYXVsdCA9ICJoZWxsbyJdOwotICBvcHRpb25hbCAgICBieXRlcyBkZWZhdWx0
X2J5dGVzICAgID0gNzUgW2RlZmF1bHQgPSAid29ybGQiXTsKLQotICBvcHRpb25hbCBOZXN0ZWRF
bnVtIGRlZmF1bHRfbmVzdGVkX2VudW0gPSA4MSBbZGVmYXVsdCA9IEJBUl07Ci0gIG9wdGlvbmFs
IEZvcmVpZ25FbnVtTGl0ZSBkZWZhdWx0X2ZvcmVpZ25fZW51bSA9IDgyCi0gICAgICBbZGVmYXVs
dCA9IEZPUkVJR05fTElURV9CQVJdOwotICBvcHRpb25hbCBwcm90b2J1Zl91bml0dGVzdF9pbXBv
cnQuSW1wb3J0RW51bUxpdGUKLSAgICAgIGRlZmF1bHRfaW1wb3J0X2VudW0gPSA4MyBbZGVmYXVs
dCA9IElNUE9SVF9MSVRFX0JBUl07Ci0KLSAgb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfc3RyaW5n
X3BpZWNlID0gODQgW2N0eXBlPVNUUklOR19QSUVDRSxkZWZhdWx0PSJhYmMiXTsKLSAgb3B0aW9u
YWwgc3RyaW5nIGRlZmF1bHRfY29yZCA9IDg1IFtjdHlwZT1DT1JELGRlZmF1bHQ9IjEyMyJdOwot
Ci0gIC8vIEZvciBvbmVvZiB0ZXN0Ci0gIG9uZW9mIG9uZW9mX2ZpZWxkIHsKLSAgICB1aW50MzIg
b25lb2ZfdWludDMyID0gMTExOwotICAgIE5lc3RlZE1lc3NhZ2Ugb25lb2ZfbmVzdGVkX21lc3Nh
Z2UgPSAxMTI7Ci0gICAgc3RyaW5nIG9uZW9mX3N0cmluZyA9IDExMzsKLSAgICBieXRlcyBvbmVv
Zl9ieXRlcyA9IDExNDsKLSAgICBOZXN0ZWRNZXNzYWdlIG9uZW9mX2xhenlfbmVzdGVkX21lc3Nh
Z2UgPSAxMTUgW2xhenkgPSB0cnVlXTsKLSAgfQotfQotCi1tZXNzYWdlIEZvcmVpZ25NZXNzYWdl
TGl0ZSB7Ci0gIG9wdGlvbmFsIGludDMyIGMgPSAxOwotfQotCi1lbnVtIEZvcmVpZ25FbnVtTGl0
ZSB7Ci0gIEZPUkVJR05fTElURV9GT08gPSA0OwotICBGT1JFSUdOX0xJVEVfQkFSID0gNTsKLSAg
Rk9SRUlHTl9MSVRFX0JBWiA9IDY7Ci19Ci0KLW1lc3NhZ2UgVGVzdFBhY2tlZFR5cGVzTGl0ZSB7
Ci0gIHJlcGVhdGVkICAgIGludDMyIHBhY2tlZF9pbnQzMiAgICA9ICA5MCBbcGFja2VkID0gdHJ1
ZV07Ci0gIHJlcGVhdGVkICAgIGludDY0IHBhY2tlZF9pbnQ2NCAgICA9ICA5MSBbcGFja2VkID0g
dHJ1ZV07Ci0gIHJlcGVhdGVkICAgdWludDMyIHBhY2tlZF91aW50MzIgICA9ICA5MiBbcGFja2Vk
ID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgdWludDY0IHBhY2tlZF91aW50NjQgICA9ICA5MyBbcGFj
a2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgc2ludDMyIHBhY2tlZF9zaW50MzIgICA9ICA5NCBb
cGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgc2ludDY0IHBhY2tlZF9zaW50NjQgICA9ICA5
NSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICBmaXhlZDMyIHBhY2tlZF9maXhlZDMyICA9
ICA5NiBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICBmaXhlZDY0IHBhY2tlZF9maXhlZDY0
ICA9ICA5NyBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHBhY2tlZF9zZml4
ZWQzMiA9ICA5OCBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IHBhY2tlZF9z
Zml4ZWQ2NCA9ICA5OSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgIGZsb2F0IHBhY2tl
ZF9mbG9hdCAgICA9IDEwMCBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgZG91YmxlIHBh
Y2tlZF9kb3VibGUgICA9IDEwMSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgICBib29s
IHBhY2tlZF9ib29sICAgICA9IDEwMiBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkIEZvcmVp
Z25FbnVtTGl0ZSBwYWNrZWRfZW51bSAgPSAxMDMgW3BhY2tlZCA9IHRydWVdOwotfQotCi1tZXNz
YWdlIFRlc3RBbGxFeHRlbnNpb25zTGl0ZSB7Ci0gIGV4dGVuc2lvbnMgMSB0byBtYXg7Ci19Ci0K
LWV4dGVuZCBUZXN0QWxsRXh0ZW5zaW9uc0xpdGUgewotICAvLyBTaW5ndWxhcgotICBvcHRpb25h
bCAgICBpbnQzMiBvcHRpb25hbF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICA9ICAxOwotICBvcHRp
b25hbCAgICBpbnQ2NCBvcHRpb25hbF9pbnQ2NF9leHRlbnNpb25fbGl0ZSAgICA9ICAyOwotICBv
cHRpb25hbCAgIHVpbnQzMiBvcHRpb25hbF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICA9ICAzOwot
ICBvcHRpb25hbCAgIHVpbnQ2NCBvcHRpb25hbF91aW50NjRfZXh0ZW5zaW9uX2xpdGUgICA9ICA0
OwotICBvcHRpb25hbCAgIHNpbnQzMiBvcHRpb25hbF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUgICA9
ICA1OwotICBvcHRpb25hbCAgIHNpbnQ2NCBvcHRpb25hbF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUg
ICA9ICA2OwotICBvcHRpb25hbCAgZml4ZWQzMiBvcHRpb25hbF9maXhlZDMyX2V4dGVuc2lvbl9s
aXRlICA9ICA3OwotICBvcHRpb25hbCAgZml4ZWQ2NCBvcHRpb25hbF9maXhlZDY0X2V4dGVuc2lv
bl9saXRlICA9ICA4OwotICBvcHRpb25hbCBzZml4ZWQzMiBvcHRpb25hbF9zZml4ZWQzMl9leHRl
bnNpb25fbGl0ZSA9ICA5OwotICBvcHRpb25hbCBzZml4ZWQ2NCBvcHRpb25hbF9zZml4ZWQ2NF9l
eHRlbnNpb25fbGl0ZSA9IDEwOwotICBvcHRpb25hbCAgICBmbG9hdCBvcHRpb25hbF9mbG9hdF9l
eHRlbnNpb25fbGl0ZSAgICA9IDExOwotICBvcHRpb25hbCAgIGRvdWJsZSBvcHRpb25hbF9kb3Vi
bGVfZXh0ZW5zaW9uX2xpdGUgICA9IDEyOwotICBvcHRpb25hbCAgICAgYm9vbCBvcHRpb25hbF9i
b29sX2V4dGVuc2lvbl9saXRlICAgICA9IDEzOwotICBvcHRpb25hbCAgIHN0cmluZyBvcHRpb25h
bF9zdHJpbmdfZXh0ZW5zaW9uX2xpdGUgICA9IDE0OwotICBvcHRpb25hbCAgICBieXRlcyBvcHRp
b25hbF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICA9IDE1OwotCi0gIG9wdGlvbmFsIGdyb3VwIE9w
dGlvbmFsR3JvdXBfZXh0ZW5zaW9uX2xpdGUgPSAxNiB7Ci0gICAgb3B0aW9uYWwgaW50MzIgYSA9
IDE3OwotICB9Ci0KLSAgb3B0aW9uYWwgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRNZXNzYWdlIG9w
dGlvbmFsX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlCi0gICAgICA9IDE4OwotICBvcHRp
b25hbCBGb3JlaWduTWVzc2FnZUxpdGUgb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lv
bl9saXRlID0gMTk7Ci0gIG9wdGlvbmFsIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRN
ZXNzYWdlTGl0ZQotICAgIG9wdGlvbmFsX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlID0g
MjA7Ci0KLSAgb3B0aW9uYWwgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRFbnVtIG9wdGlvbmFsX25l
c3RlZF9lbnVtX2V4dGVuc2lvbl9saXRlID0gMjE7Ci0gIG9wdGlvbmFsIEZvcmVpZ25FbnVtTGl0
ZSBvcHRpb25hbF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uX2xpdGUgPSAyMjsKLSAgb3B0aW9uYWwg
cHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW1MaXRlCi0gICAgb3B0aW9uYWxfaW1w
b3J0X2VudW1fZXh0ZW5zaW9uX2xpdGUgPSAyMzsKLQotICBvcHRpb25hbCBzdHJpbmcgb3B0aW9u
YWxfc3RyaW5nX3BpZWNlX2V4dGVuc2lvbl9saXRlID0gMjQKLSAgICAgIFtjdHlwZT1TVFJJTkdf
UElFQ0VdOwotICBvcHRpb25hbCBzdHJpbmcgb3B0aW9uYWxfY29yZF9leHRlbnNpb25fbGl0ZSA9
IDI1IFtjdHlwZT1DT1JEXTsKLQotICBvcHRpb25hbCBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQu
UHVibGljSW1wb3J0TWVzc2FnZUxpdGUKLSAgICBvcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3Nh
Z2VfZXh0ZW5zaW9uX2xpdGUgPSAyNjsKLQotICBvcHRpb25hbCBUZXN0QWxsVHlwZXNMaXRlLk5l
c3RlZE1lc3NhZ2UKLSAgICBvcHRpb25hbF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgPSAy
NyBbbGF6eT10cnVlXTsKLQotICAvLyBSZXBlYXRlZAotICByZXBlYXRlZCAgICBpbnQzMiByZXBl
YXRlZF9pbnQzMl9leHRlbnNpb25fbGl0ZSAgICA9IDMxOwotICByZXBlYXRlZCAgICBpbnQ2NCBy
ZXBlYXRlZF9pbnQ2NF9leHRlbnNpb25fbGl0ZSAgICA9IDMyOwotICByZXBlYXRlZCAgIHVpbnQz
MiByZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uX2xpdGUgICA9IDMzOwotICByZXBlYXRlZCAgIHVp
bnQ2NCByZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uX2xpdGUgICA9IDM0OwotICByZXBlYXRlZCAg
IHNpbnQzMiByZXBlYXRlZF9zaW50MzJfZXh0ZW5zaW9uX2xpdGUgICA9IDM1OwotICByZXBlYXRl
ZCAgIHNpbnQ2NCByZXBlYXRlZF9zaW50NjRfZXh0ZW5zaW9uX2xpdGUgICA9IDM2OwotICByZXBl
YXRlZCAgZml4ZWQzMiByZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbl9saXRlICA9IDM3OwotICBy
ZXBlYXRlZCAgZml4ZWQ2NCByZXBlYXRlZF9maXhlZDY0X2V4dGVuc2lvbl9saXRlICA9IDM4Owot
ICByZXBlYXRlZCBzZml4ZWQzMiByZXBlYXRlZF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSA9IDM5
OwotICByZXBlYXRlZCBzZml4ZWQ2NCByZXBlYXRlZF9zZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSA9
IDQwOwotICByZXBlYXRlZCAgICBmbG9hdCByZXBlYXRlZF9mbG9hdF9leHRlbnNpb25fbGl0ZSAg
ICA9IDQxOwotICByZXBlYXRlZCAgIGRvdWJsZSByZXBlYXRlZF9kb3VibGVfZXh0ZW5zaW9uX2xp
dGUgICA9IDQyOwotICByZXBlYXRlZCAgICAgYm9vbCByZXBlYXRlZF9ib29sX2V4dGVuc2lvbl9s
aXRlICAgICA9IDQzOwotICByZXBlYXRlZCAgIHN0cmluZyByZXBlYXRlZF9zdHJpbmdfZXh0ZW5z
aW9uX2xpdGUgICA9IDQ0OwotICByZXBlYXRlZCAgICBieXRlcyByZXBlYXRlZF9ieXRlc19leHRl
bnNpb25fbGl0ZSAgICA9IDQ1OwotCi0gIHJlcGVhdGVkIGdyb3VwIFJlcGVhdGVkR3JvdXBfZXh0
ZW5zaW9uX2xpdGUgPSA0NiB7Ci0gICAgb3B0aW9uYWwgaW50MzIgYSA9IDQ3OwotICB9Ci0KLSAg
cmVwZWF0ZWQgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRNZXNzYWdlIHJlcGVhdGVkX25lc3RlZF9t
ZXNzYWdlX2V4dGVuc2lvbl9saXRlCi0gICAgICA9IDQ4OwotICByZXBlYXRlZCBGb3JlaWduTWVz
c2FnZUxpdGUgcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlX2V4dGVuc2lvbl9saXRlID0gNDk7Ci0g
IHJlcGVhdGVkIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNzYWdlTGl0ZQotICAg
IHJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlX2V4dGVuc2lvbl9saXRlID0gNTA7Ci0KLSAgcmVwZWF0
ZWQgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRFbnVtIHJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVu
c2lvbl9saXRlID0gNTE7Ci0gIHJlcGVhdGVkIEZvcmVpZ25FbnVtTGl0ZSByZXBlYXRlZF9mb3Jl
aWduX2VudW1fZXh0ZW5zaW9uX2xpdGUgPSA1MjsKLSAgcmVwZWF0ZWQgcHJvdG9idWZfdW5pdHRl
c3RfaW1wb3J0LkltcG9ydEVudW1MaXRlCi0gICAgcmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5z
aW9uX2xpdGUgPSA1MzsKLQotICByZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRfc3RyaW5nX3BpZWNl
X2V4dGVuc2lvbl9saXRlID0gNTQKLSAgICAgIFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICByZXBl
YXRlZCBzdHJpbmcgcmVwZWF0ZWRfY29yZF9leHRlbnNpb25fbGl0ZSA9IDU1IFtjdHlwZT1DT1JE
XTsKLQotICByZXBlYXRlZCBUZXN0QWxsVHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2UKLSAgICByZXBl
YXRlZF9sYXp5X21lc3NhZ2VfZXh0ZW5zaW9uX2xpdGUgPSA1NyBbbGF6eT10cnVlXTsKLQotICAv
LyBTaW5ndWxhciB3aXRoIGRlZmF1bHRzCi0gIG9wdGlvbmFsICAgIGludDMyIGRlZmF1bHRfaW50
MzJfZXh0ZW5zaW9uX2xpdGUgICAgPSA2MSBbZGVmYXVsdCA9ICA0MSAgICBdOwotICBvcHRpb25h
bCAgICBpbnQ2NCBkZWZhdWx0X2ludDY0X2V4dGVuc2lvbl9saXRlICAgID0gNjIgW2RlZmF1bHQg
PSAgNDIgICAgXTsKLSAgb3B0aW9uYWwgICB1aW50MzIgZGVmYXVsdF91aW50MzJfZXh0ZW5zaW9u
X2xpdGUgICA9IDYzIFtkZWZhdWx0ID0gIDQzICAgIF07Ci0gIG9wdGlvbmFsICAgdWludDY0IGRl
ZmF1bHRfdWludDY0X2V4dGVuc2lvbl9saXRlICAgPSA2NCBbZGVmYXVsdCA9ICA0NCAgICBdOwot
ICBvcHRpb25hbCAgIHNpbnQzMiBkZWZhdWx0X3NpbnQzMl9leHRlbnNpb25fbGl0ZSAgID0gNjUg
W2RlZmF1bHQgPSAtNDUgICAgXTsKLSAgb3B0aW9uYWwgICBzaW50NjQgZGVmYXVsdF9zaW50NjRf
ZXh0ZW5zaW9uX2xpdGUgICA9IDY2IFtkZWZhdWx0ID0gIDQ2ICAgIF07Ci0gIG9wdGlvbmFsICBm
aXhlZDMyIGRlZmF1bHRfZml4ZWQzMl9leHRlbnNpb25fbGl0ZSAgPSA2NyBbZGVmYXVsdCA9ICA0
NyAgICBdOwotICBvcHRpb25hbCAgZml4ZWQ2NCBkZWZhdWx0X2ZpeGVkNjRfZXh0ZW5zaW9uX2xp
dGUgID0gNjggW2RlZmF1bHQgPSAgNDggICAgXTsKLSAgb3B0aW9uYWwgc2ZpeGVkMzIgZGVmYXVs
dF9zZml4ZWQzMl9leHRlbnNpb25fbGl0ZSA9IDY5IFtkZWZhdWx0ID0gIDQ5ICAgIF07Ci0gIG9w
dGlvbmFsIHNmaXhlZDY0IGRlZmF1bHRfc2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUgPSA3MCBbZGVm
YXVsdCA9IC01MCAgICBdOwotICBvcHRpb25hbCAgICBmbG9hdCBkZWZhdWx0X2Zsb2F0X2V4dGVu
c2lvbl9saXRlICAgID0gNzEgW2RlZmF1bHQgPSAgNTEuNSAgXTsKLSAgb3B0aW9uYWwgICBkb3Vi
bGUgZGVmYXVsdF9kb3VibGVfZXh0ZW5zaW9uX2xpdGUgICA9IDcyIFtkZWZhdWx0ID0gIDUyZTMg
IF07Ci0gIG9wdGlvbmFsICAgICBib29sIGRlZmF1bHRfYm9vbF9leHRlbnNpb25fbGl0ZSAgICAg
PSA3MyBbZGVmYXVsdCA9IHRydWUgICBdOwotICBvcHRpb25hbCAgIHN0cmluZyBkZWZhdWx0X3N0
cmluZ19leHRlbnNpb25fbGl0ZSAgID0gNzQgW2RlZmF1bHQgPSAiaGVsbG8iXTsKLSAgb3B0aW9u
YWwgICAgYnl0ZXMgZGVmYXVsdF9ieXRlc19leHRlbnNpb25fbGl0ZSAgICA9IDc1IFtkZWZhdWx0
ID0gIndvcmxkIl07Ci0KLSAgb3B0aW9uYWwgVGVzdEFsbFR5cGVzTGl0ZS5OZXN0ZWRFbnVtCi0g
ICAgZGVmYXVsdF9uZXN0ZWRfZW51bV9leHRlbnNpb25fbGl0ZSA9IDgxIFtkZWZhdWx0ID0gQkFS
XTsKLSAgb3B0aW9uYWwgRm9yZWlnbkVudW1MaXRlCi0gICAgZGVmYXVsdF9mb3JlaWduX2VudW1f
ZXh0ZW5zaW9uX2xpdGUgPSA4MiBbZGVmYXVsdCA9IEZPUkVJR05fTElURV9CQVJdOwotICBvcHRp
b25hbCBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bUxpdGUKLSAgICBkZWZhdWx0
X2ltcG9ydF9lbnVtX2V4dGVuc2lvbl9saXRlID0gODMgW2RlZmF1bHQgPSBJTVBPUlRfTElURV9C
QVJdOwotCi0gIG9wdGlvbmFsIHN0cmluZyBkZWZhdWx0X3N0cmluZ19waWVjZV9leHRlbnNpb25f
bGl0ZSA9IDg0IFtjdHlwZT1TVFJJTkdfUElFQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJhYmMiXTsKLSAgb3B0
aW9uYWwgc3RyaW5nIGRlZmF1bHRfY29yZF9leHRlbnNpb25fbGl0ZSA9IDg1IFtjdHlwZT1DT1JE
LCBkZWZhdWx0PSIxMjMiXTsKLQotICAvLyBGb3Igb25lb2YgdGVzdAotICBvcHRpb25hbCB1aW50
MzIgb25lb2ZfdWludDMyX2V4dGVuc2lvbl9saXRlID0gMTExOwotICBvcHRpb25hbCBUZXN0QWxs
VHlwZXNMaXRlLk5lc3RlZE1lc3NhZ2Ugb25lb2ZfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uX2xp
dGUgPSAxMTI7Ci0gIG9wdGlvbmFsIHN0cmluZyBvbmVvZl9zdHJpbmdfZXh0ZW5zaW9uX2xpdGUg
PSAxMTM7Ci0gIG9wdGlvbmFsIGJ5dGVzIG9uZW9mX2J5dGVzX2V4dGVuc2lvbl9saXRlID0gMTE0
OwotfQotCi1tZXNzYWdlIFRlc3RQYWNrZWRFeHRlbnNpb25zTGl0ZSB7Ci0gIGV4dGVuc2lvbnMg
MSB0byBtYXg7Ci19Ci0KLWV4dGVuZCBUZXN0UGFja2VkRXh0ZW5zaW9uc0xpdGUgewotICByZXBl
YXRlZCAgICBpbnQzMiBwYWNrZWRfaW50MzJfZXh0ZW5zaW9uX2xpdGUgICAgPSAgOTAgW3BhY2tl
ZCA9IHRydWVdOwotICByZXBlYXRlZCAgICBpbnQ2NCBwYWNrZWRfaW50NjRfZXh0ZW5zaW9uX2xp
dGUgICAgPSAgOTEgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCAgIHVpbnQzMiBwYWNrZWRf
dWludDMyX2V4dGVuc2lvbl9saXRlICAgPSAgOTIgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRl
ZCAgIHVpbnQ2NCBwYWNrZWRfdWludDY0X2V4dGVuc2lvbl9saXRlICAgPSAgOTMgW3BhY2tlZCA9
IHRydWVdOwotICByZXBlYXRlZCAgIHNpbnQzMiBwYWNrZWRfc2ludDMyX2V4dGVuc2lvbl9saXRl
ICAgPSAgOTQgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCAgIHNpbnQ2NCBwYWNrZWRfc2lu
dDY0X2V4dGVuc2lvbl9saXRlICAgPSAgOTUgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCAg
Zml4ZWQzMiBwYWNrZWRfZml4ZWQzMl9leHRlbnNpb25fbGl0ZSAgPSAgOTYgW3BhY2tlZCA9IHRy
dWVdOwotICByZXBlYXRlZCAgZml4ZWQ2NCBwYWNrZWRfZml4ZWQ2NF9leHRlbnNpb25fbGl0ZSAg
PSAgOTcgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCBzZml4ZWQzMiBwYWNrZWRfc2ZpeGVk
MzJfZXh0ZW5zaW9uX2xpdGUgPSAgOTggW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCBzZml4
ZWQ2NCBwYWNrZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uX2xpdGUgPSAgOTkgW3BhY2tlZCA9IHRydWVd
OwotICByZXBlYXRlZCAgICBmbG9hdCBwYWNrZWRfZmxvYXRfZXh0ZW5zaW9uX2xpdGUgICAgPSAx
MDAgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCAgIGRvdWJsZSBwYWNrZWRfZG91YmxlX2V4
dGVuc2lvbl9saXRlICAgPSAxMDEgW3BhY2tlZCA9IHRydWVdOwotICByZXBlYXRlZCAgICAgYm9v
bCBwYWNrZWRfYm9vbF9leHRlbnNpb25fbGl0ZSAgICAgPSAxMDIgW3BhY2tlZCA9IHRydWVdOwot
ICByZXBlYXRlZCBGb3JlaWduRW51bUxpdGUgcGFja2VkX2VudW1fZXh0ZW5zaW9uX2xpdGUgPSAx
MDMgW3BhY2tlZCA9IHRydWVdOwotfQotCi1tZXNzYWdlIFRlc3ROZXN0ZWRFeHRlbnNpb25MaXRl
IHsKLSAgZXh0ZW5kIFRlc3RBbGxFeHRlbnNpb25zTGl0ZSB7Ci0gICAgb3B0aW9uYWwgaW50MzIg
bmVzdGVkX2V4dGVuc2lvbiA9IDEyMzQ1OwotICB9Ci19Ci0KLS8vIFRlc3QgdGhhdCBkZXByZWNh
dGVkIGZpZWxkcyB3b3JrLiAgV2Ugb25seSB2ZXJpZnkgdGhhdCB0aGV5IGNvbXBpbGUgKGF0IG9u
ZQotLy8gcG9pbnQgdGhpcyBmYWlsZWQpLgotbWVzc2FnZSBUZXN0RGVwcmVjYXRlZExpdGUgewot
ICBvcHRpb25hbCBpbnQzMiBkZXByZWNhdGVkX2ZpZWxkID0gMSBbZGVwcmVjYXRlZCA9IHRydWVd
OwotfQotCi0vLyBTZWUgdGhlIGNvbW1lbnRzIG9mIHRoZSBzYW1lIHR5cGUgaW4gdW5pdHRlc3Qu
cHJvdG8uCi1tZXNzYWdlIFRlc3RQYXJzaW5nTWVyZ2VMaXRlIHsKLSAgbWVzc2FnZSBSZXBlYXRl
ZEZpZWxkc0dlbmVyYXRvciB7Ci0gICAgcmVwZWF0ZWQgVGVzdEFsbFR5cGVzTGl0ZSBmaWVsZDEg
PSAxOwotICAgIHJlcGVhdGVkIFRlc3RBbGxUeXBlc0xpdGUgZmllbGQyID0gMjsKLSAgICByZXBl
YXRlZCBUZXN0QWxsVHlwZXNMaXRlIGZpZWxkMyA9IDM7Ci0gICAgcmVwZWF0ZWQgZ3JvdXAgR3Jv
dXAxID0gMTAgewotICAgICAgb3B0aW9uYWwgVGVzdEFsbFR5cGVzTGl0ZSBmaWVsZDEgPSAxMTsK
LSAgICB9Ci0gICAgcmVwZWF0ZWQgZ3JvdXAgR3JvdXAyID0gMjAgewotICAgICAgb3B0aW9uYWwg
VGVzdEFsbFR5cGVzTGl0ZSBmaWVsZDEgPSAyMTsKLSAgICB9Ci0gICAgcmVwZWF0ZWQgVGVzdEFs
bFR5cGVzTGl0ZSBleHQxID0gMTAwMDsKLSAgICByZXBlYXRlZCBUZXN0QWxsVHlwZXNMaXRlIGV4
dDIgPSAxMDAxOwotICB9Ci0gIHJlcXVpcmVkIFRlc3RBbGxUeXBlc0xpdGUgcmVxdWlyZWRfYWxs
X3R5cGVzID0gMTsKLSAgb3B0aW9uYWwgVGVzdEFsbFR5cGVzTGl0ZSBvcHRpb25hbF9hbGxfdHlw
ZXMgPSAyOwotICByZXBlYXRlZCBUZXN0QWxsVHlwZXNMaXRlIHJlcGVhdGVkX2FsbF90eXBlcyA9
IDM7Ci0gIG9wdGlvbmFsIGdyb3VwIE9wdGlvbmFsR3JvdXAgPSAxMCB7Ci0gICAgb3B0aW9uYWwg
VGVzdEFsbFR5cGVzTGl0ZSBvcHRpb25hbF9ncm91cF9hbGxfdHlwZXMgPSAxMTsKLSAgfQotICBy
ZXBlYXRlZCBncm91cCBSZXBlYXRlZEdyb3VwID0gMjAgewotICAgIG9wdGlvbmFsIFRlc3RBbGxU
eXBlc0xpdGUgcmVwZWF0ZWRfZ3JvdXBfYWxsX3R5cGVzID0gMjE7Ci0gIH0KLSAgZXh0ZW5zaW9u
cyAxMDAwIHRvIG1heDsKLSAgZXh0ZW5kIFRlc3RQYXJzaW5nTWVyZ2VMaXRlIHsKLSAgICBvcHRp
b25hbCBUZXN0QWxsVHlwZXNMaXRlIG9wdGlvbmFsX2V4dCA9IDEwMDA7Ci0gICAgcmVwZWF0ZWQg
VGVzdEFsbFR5cGVzTGl0ZSByZXBlYXRlZF9leHQgPSAxMDAxOwotICB9Ci19Ci0KLS8vIFRlc3RF
bXB0eU1lc3NhZ2VMaXRlIGlzIHVzZWQgdG8gdGVzdCB1bmtub3duIGZpZWxkcyBzdXBwb3J0IGlu
IGxpdGUgbW9kZS4KLW1lc3NhZ2UgVGVzdEVtcHR5TWVzc2FnZUxpdGV7Ci19Ci0KLS8vIExpa2Ug
YWJvdmUsIGJ1dCBkZWNsYXJlIGFsbCBmaWVsZCBudW1iZXJzIGFzIHBvdGVudGlhbCBleHRlbnNp
b25zLiAgTm8KLS8vIGFjdHVhbCBleHRlbnNpb25zIHNob3VsZCBldmVyIGJlIGRlZmluZWQgZm9y
IHRoaXMgdHlwZS4KLW1lc3NhZ2UgVGVzdEVtcHR5TWVzc2FnZVdpdGhFeHRlbnNpb25zTGl0ZSB7
Ci0gIGV4dGVuc2lvbnMgMSB0byBtYXg7Ci19Ci0KLWVudW0gVjFFbnVtTGl0ZSB7Ci0gICAgVjFf
RklSU1QgPSAxOwotfQotCi1lbnVtIFYyRW51bUxpdGUgewotICAgIFYyX0ZJUlNUID0gMTsKLSAg
ICBWMl9TRUNPTkQgPSAyOwotfQotCi1tZXNzYWdlIFYxTWVzc2FnZUxpdGUgewotICAgIHJlcXVp
cmVkIGludDMyIGludF9maWVsZCA9IDE7Ci0gICAgb3B0aW9uYWwgVjFFbnVtTGl0ZSBlbnVtX2Zp
ZWxkID0gMiBbIGRlZmF1bHQgPSBWMV9GSVJTVCBdOwotfQotCi1tZXNzYWdlIFYyTWVzc2FnZUxp
dGUgewotICAgIHJlcXVpcmVkIGludDMyIGludF9maWVsZCA9IDE7Ci0gICAgb3B0aW9uYWwgVjJF
bnVtTGl0ZSBlbnVtX2ZpZWxkID0gMiBbIGRlZmF1bHQgPSBWMl9GSVJTVCBdOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2xpdGVfaW1wb3J0c19ub25saXRlLnBy
b3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2xpdGVfaW1wb3J0c19ub25saXRlLnBy
b3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzJkNmE4MmQyYjQ2MmYyNGRmODRl
ZjQ1N2EzNjBhMTBmNjNlOGIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9saXRlX2ltcG9ydHNfbm9ubGl0
ZS5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24g
VmFyZGEpCi0vLwotLy8gVGVzdHMgdGhhdCBhICJsaXRlIiBtZXNzYWdlIGNhbiBpbXBvcnQgYSBy
ZWd1bGFyIG1lc3NhZ2UuCi0KLXN5bnRheCA9ICJwcm90bzIiOwotcGFja2FnZSBwcm90b2J1Zl91
bml0dGVzdDsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8iOwotCi1v
cHRpb24gb3B0aW1pemVfZm9yID0gTElURV9SVU5USU1FOwotCi1tZXNzYWdlIFRlc3RMaXRlSW1w
b3J0c05vbmxpdGUgewotICBvcHRpb25hbCBUZXN0QWxsVHlwZXMgbWVzc2FnZSA9IDE7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbXNldC5wcm90byBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0OWQ5YWRhZDBiNjk5ZjdmZTY3YzY0Zjk5N2IyNzYxZThhNzNmOGQxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi91bml0dGVzdF9tc2V0LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2ds
ZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZm
ZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJz
LgotLy8KLS8vIFRoaXMgZmlsZSBpcyBzaW1pbGFyIHRvIHVuaXR0ZXN0X21zZXRfd2lyZV9mb3Jt
YXQucHJvdG8sIGJ1dCBkb2VzIG5vdAotLy8gaGF2ZSBhIFRlc3RNZXNzYWdlU2V0LCBzbyBpdCBj
YW4gYmUgZG93bmdyYWRlZCB0byBwcm90bzEuCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi1pbXBv
cnQgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0X3dpcmVfZm9ybWF0LnByb3RvIjsKLQot
cGFja2FnZSBwcm90b2J1Zl91bml0dGVzdDsKLQotb3B0aW9uIGNjX2VuYWJsZV9hcmVuYXMgPSB0
cnVlOwotb3B0aW9uIG9wdGltaXplX2ZvciA9IFNQRUVEOwotCi1tZXNzYWdlIFRlc3RNZXNzYWdl
U2V0Q29udGFpbmVyIHsKLSAgb3B0aW9uYWwgcHJvdG8yX3dpcmVmb3JtYXRfdW5pdHRlc3QuVGVz
dE1lc3NhZ2VTZXQgbWVzc2FnZV9zZXQgPSAxOwotfQotCi1tZXNzYWdlIFRlc3RNZXNzYWdlU2V0
RXh0ZW5zaW9uMSB7Ci0gIGV4dGVuZCBwcm90bzJfd2lyZWZvcm1hdF91bml0dGVzdC5UZXN0TWVz
c2FnZVNldCB7Ci0gICAgb3B0aW9uYWwgVGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xIG1lc3NhZ2Vf
c2V0X2V4dGVuc2lvbiA9IDE1NDUwMDg7Ci0gIH0KLSAgb3B0aW9uYWwgaW50MzIgaSA9IDE1Owot
fQotCi1tZXNzYWdlIFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMiB7Ci0gIGV4dGVuZCBwcm90bzJf
d2lyZWZvcm1hdF91bml0dGVzdC5UZXN0TWVzc2FnZVNldCB7Ci0gICAgb3B0aW9uYWwgVGVzdE1l
c3NhZ2VTZXRFeHRlbnNpb24yIG1lc3NhZ2Vfc2V0X2V4dGVuc2lvbiA9IDE1NDc3Njk7Ci0gIH0K
LSAgb3B0aW9uYWwgc3RyaW5nIHN0ciA9IDI1OwotfQotCi0vLyBUaGlzIG1lc3NhZ2Ugd2FzIHVz
ZWQgdG8gZ2VuZXJhdGUKLS8vIC8vbmV0L3Byb3RvMi9weXRob24vaW50ZXJuYWwvdGVzdGRhdGEv
bWVzc2FnZV9zZXRfbWVzc2FnZSwgYnV0IGlzIGNvbW1lbnRlZAotLy8gb3V0IHNpbmNlIGl0IG11
c3Qgbm90IGFjdHVhbGx5IGV4aXN0IGluIGNvZGUsIHRvIHNpbXVsYXRlIGFuICJ1bmtub3duIgot
Ly8gZXh0ZW5zaW9uLgotLy8gbWVzc2FnZSBUZXN0TWVzc2FnZVNldFVua25vd25FeHRlbnNpb24g
ewotLy8gICBleHRlbmQgVGVzdE1lc3NhZ2VTZXQgewotLy8gICAgIG9wdGlvbmFsIFRlc3RNZXNz
YWdlU2V0VW5rbm93bkV4dGVuc2lvbiBtZXNzYWdlX3NldF9leHRlbnNpb24gPSA1NjE0MTQyMTsK
LS8vICAgfQotLy8gICBvcHRpb25hbCBpbnQ2NCBhID0gMTsKLS8vIH0KLQotLy8gTWVzc2FnZVNl
dCB3aXJlIGZvcm1hdCBpcyBlcXVpdmFsZW50IHRvIHRoaXMuCi1tZXNzYWdlIFJhd01lc3NhZ2VT
ZXQgewotICByZXBlYXRlZCBncm91cCBJdGVtID0gMSB7Ci0gICAgcmVxdWlyZWQgaW50MzIgdHlw
ZV9pZCA9IDI7Ci0gICAgcmVxdWlyZWQgYnl0ZXMgbWVzc2FnZSA9IDM7Ci0gIH0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9tc2V0X3dpcmVfZm9ybWF0LnByb3Rv
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X21zZXRfd2lyZV9mb3JtYXQucHJvdG8KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZTQzNTJlMDZkM2VlMDM0ODJkY2FjYTk3YTI3
Yzc4ZWZhNmJlYTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X21zZXRfd2lyZV9mb3JtYXQucHJvdG8KKysr
IC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8g
IEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5
IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRh
aW5zIG1lc3NhZ2VzIGZvciB0ZXN0aW5nIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0LgotCi1zeW50
YXggPSAicHJvdG8yIjsKLXBhY2thZ2UgcHJvdG8yX3dpcmVmb3JtYXRfdW5pdHRlc3Q7Ci0KLW9w
dGlvbiBjY19lbmFibGVfYXJlbmFzID0gdHJ1ZTsKLW9wdGlvbiBvcHRpbWl6ZV9mb3IgPSBTUEVF
RDsKLW9wdGlvbiBjc2hhcnBfbmFtZXNwYWNlID0gIkdvb2dsZS5Qcm90b2NvbEJ1ZmZlcnMuVGVz
dFByb3RvcyI7Ci0KLS8vIEEgbWVzc2FnZSB3aXRoIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0Lgot
bWVzc2FnZSBUZXN0TWVzc2FnZVNldCB7Ci0gIG9wdGlvbiBtZXNzYWdlX3NldF93aXJlX2Zvcm1h
dCA9IHRydWU7Ci0gIGV4dGVuc2lvbnMgNCB0byBtYXg7Ci19Ci0KLW1lc3NhZ2UgVGVzdE1lc3Nh
Z2VTZXRXaXJlRm9ybWF0Q29udGFpbmVyIHsKLSAgb3B0aW9uYWwgVGVzdE1lc3NhZ2VTZXQgbWVz
c2FnZV9zZXQgPSAxOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0
X25vX2FyZW5hLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X25vX2FyZW5hLnBy
b3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTUxOGRmMjk3M2ZkYjBkNThiMmIy
N2IyMDc3ZDdiMjU2MWZiNzUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19hcmVuYS5wcm90bworKysg
L2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8g
IEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5
IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gVGhpcyBwcm90byBmaWxl
IGNvbnRhaW5zIGNvcGllcyBvZiBUZXN0QWxsVHlwZXMgYW5kIGZyaWVuZHMsIGJ1dCB3aXRoIGFy
ZW5hCi0vLyBzdXBwb3J0IGRpc2FibGVkIGluIGNvZGUgZ2VuZXJhdGlvbi4gSXQgYWxsb3dzIHVz
IHRvIHRlc3QgdGhlIHBlcmZvcm1hbmNlCi0vLyBpbXBhY3QgYWdhaW5zdCBiYXNlbGluZSAobm9u
LWFyZW5hKSBnb29nbGUucHJvdG9idWYuCi0KLXN5bnRheCA9ICJwcm90bzIiOwotCi0vLyBTb21l
IGdlbmVyaWNfc2VydmljZXMgb3B0aW9uKHMpIGFkZGVkIGF1dG9tYXRpY2FsbHkuCi0vLyBTZWU6
ICBodHRwOi8vZ28vcHJvdG8yLWdlbmVyaWMtc2VydmljZXMtZGVmYXVsdAotb3B0aW9uIGNjX2dl
bmVyaWNfc2VydmljZXMgPSB0cnVlOyAgICAgLy8gYXV0by1hZGRlZAotb3B0aW9uIGphdmFfZ2Vu
ZXJpY19zZXJ2aWNlcyA9IHRydWU7ICAgLy8gYXV0by1hZGRlZAotb3B0aW9uIHB5X2dlbmVyaWNf
c2VydmljZXMgPSB0cnVlOyAgICAgLy8gYXV0by1hZGRlZAotb3B0aW9uIGNjX2VuYWJsZV9hcmVu
YXMgPSBmYWxzZTsKLW9wdGlvbiBvYmpjX2NsYXNzX3ByZWZpeCA9ICJOT0FSTiI7Ci0KLWltcG9y
dCAiZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9ydC5wcm90byI7Ci1pbXBvcnQgImdvb2ds
ZS9wcm90b2J1Zi91bml0dGVzdF9hcmVuYS5wcm90byI7Ci0KLS8vIFdlIGRvbid0IHB1dCB0aGlz
IGluIGEgcGFja2FnZSB3aXRoaW4gcHJvdG8yIGJlY2F1c2Ugd2UgbmVlZCB0byBtYWtlIHN1cmUK
LS8vIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGRvZXNuJ3QgZGVwZW5kIG9uIGJlaW5nIGluIHRo
ZSBwcm90bzIgbmFtZXNwYWNlLgotLy8gSW4gdGVzdF91dGlsLmggd2UgZG8gInVzaW5nIG5hbWVz
cGFjZSB1bml0dGVzdCA9IHByb3RvYnVmX3VuaXR0ZXN0Ii4KLXBhY2thZ2UgcHJvdG9idWZfdW5p
dHRlc3Rfbm9fYXJlbmE7Ci0KLS8vIFByb3RvcyBvcHRpbWl6ZWQgZm9yIFNQRUVEIHVzZSBhIHN0
cmljdCBzdXBlcnNldCBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUKLS8vIG9mIGVxdWl2YWxlbnQgb25l
cyBvcHRpbWl6ZWQgZm9yIENPREVfU0laRSwgc28gd2Ugc2hvdWxkIG9wdGltaXplIGFsbCBvdXIK
LS8vIHRlc3RzIGZvciBzcGVlZCB1bmxlc3MgZXhwbGljaXRseSB0ZXN0aW5nIGNvZGUgc2l6ZSBv
cHRpbWl6YXRpb24uCi1vcHRpb24gb3B0aW1pemVfZm9yID0gU1BFRUQ7Ci0KLW9wdGlvbiBqYXZh
X291dGVyX2NsYXNzbmFtZSA9ICJVbml0dGVzdFByb3RvIjsKLQotLy8gVGhpcyBwcm90byBpbmNs
dWRlcyBldmVyeSB0eXBlIG9mIGZpZWxkIGluIGJvdGggc2luZ3VsYXIgYW5kIHJlcGVhdGVkCi0v
LyBmb3Jtcy4KLW1lc3NhZ2UgVGVzdEFsbFR5cGVzIHsKLSAgbWVzc2FnZSBOZXN0ZWRNZXNzYWdl
IHsKLSAgICAvLyBUaGUgZmllbGQgbmFtZSAiYiIgZmFpbHMgdG8gY29tcGlsZSBpbiBwcm90bzEg
YmVjYXVzZSBpdCBjb25mbGljdHMgd2l0aAotICAgIC8vIGEgbG9jYWwgdmFyaWFibGUgbmFtZWQg
ImIiIGluIG9uZSBvZiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMuICBEb2guCi0gICAgLy8gVGhpcyBm
aWxlIG5lZWRzIHRvIGNvbXBpbGUgaW4gcHJvdG8xIHRvIHRlc3QgYmFja3dhcmRzLWNvbXBhdGli
aWxpdHkuCi0gICAgb3B0aW9uYWwgaW50MzIgYmIgPSAxOwotICB9Ci0KLSAgZW51bSBOZXN0ZWRF
bnVtIHsKLSAgICBGT08gPSAxOwotICAgIEJBUiA9IDI7Ci0gICAgQkFaID0gMzsKLSAgICBORUcg
PSAtMTsgIC8vIEludGVudGlvbmFsbHkgbmVnYXRpdmUuCi0gIH0KLQotICAvLyBTaW5ndWxhcgot
ICBvcHRpb25hbCAgICBpbnQzMiBvcHRpb25hbF9pbnQzMiAgICA9ICAxOwotICBvcHRpb25hbCAg
ICBpbnQ2NCBvcHRpb25hbF9pbnQ2NCAgICA9ICAyOwotICBvcHRpb25hbCAgIHVpbnQzMiBvcHRp
b25hbF91aW50MzIgICA9ICAzOwotICBvcHRpb25hbCAgIHVpbnQ2NCBvcHRpb25hbF91aW50NjQg
ICA9ICA0OwotICBvcHRpb25hbCAgIHNpbnQzMiBvcHRpb25hbF9zaW50MzIgICA9ICA1OwotICBv
cHRpb25hbCAgIHNpbnQ2NCBvcHRpb25hbF9zaW50NjQgICA9ICA2OwotICBvcHRpb25hbCAgZml4
ZWQzMiBvcHRpb25hbF9maXhlZDMyICA9ICA3OwotICBvcHRpb25hbCAgZml4ZWQ2NCBvcHRpb25h
bF9maXhlZDY0ICA9ICA4OwotICBvcHRpb25hbCBzZml4ZWQzMiBvcHRpb25hbF9zZml4ZWQzMiA9
ICA5OwotICBvcHRpb25hbCBzZml4ZWQ2NCBvcHRpb25hbF9zZml4ZWQ2NCA9IDEwOwotICBvcHRp
b25hbCAgICBmbG9hdCBvcHRpb25hbF9mbG9hdCAgICA9IDExOwotICBvcHRpb25hbCAgIGRvdWJs
ZSBvcHRpb25hbF9kb3VibGUgICA9IDEyOwotICBvcHRpb25hbCAgICAgYm9vbCBvcHRpb25hbF9i
b29sICAgICA9IDEzOwotICBvcHRpb25hbCAgIHN0cmluZyBvcHRpb25hbF9zdHJpbmcgICA9IDE0
OwotICBvcHRpb25hbCAgICBieXRlcyBvcHRpb25hbF9ieXRlcyAgICA9IDE1OwotCi0gIG9wdGlv
bmFsIGdyb3VwIE9wdGlvbmFsR3JvdXAgPSAxNiB7Ci0gICAgb3B0aW9uYWwgaW50MzIgYSA9IDE3
OwotICB9Ci0KLSAgb3B0aW9uYWwgTmVzdGVkTWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbmFsX25lc3RlZF9tZXNzYWdlICA9IDE4OwotICBvcHRpb25hbCBGb3JlaWduTWVzc2Fn
ZSAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlID0gMTk7Ci0g
IG9wdGlvbmFsIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNzYWdlIG9wdGlvbmFs
X2ltcG9ydF9tZXNzYWdlICA9IDIwOwotCi0gIG9wdGlvbmFsIE5lc3RlZEVudW0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25hbF9uZXN0ZWRfZW51bSAgICAgPSAyMTsKLSAgb3B0aW9u
YWwgRm9yZWlnbkVudW0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX2ZvcmVpZ25f
ZW51bSAgICA9IDIyOwotICBvcHRpb25hbCBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0
RW51bSAgICBvcHRpb25hbF9pbXBvcnRfZW51bSAgICAgPSAyMzsKLQotICBvcHRpb25hbCBzdHJp
bmcgb3B0aW9uYWxfc3RyaW5nX3BpZWNlID0gMjQgW2N0eXBlPVNUUklOR19QSUVDRV07Ci0gIG9w
dGlvbmFsIHN0cmluZyBvcHRpb25hbF9jb3JkID0gMjUgW2N0eXBlPUNPUkRdOwotCi0gIC8vIERl
ZmluZWQgaW4gdW5pdHRlc3RfaW1wb3J0X3B1YmxpYy5wcm90bwotICBvcHRpb25hbCBwcm90b2J1
Zl91bml0dGVzdF9pbXBvcnQuUHVibGljSW1wb3J0TWVzc2FnZQotICAgICAgb3B0aW9uYWxfcHVi
bGljX2ltcG9ydF9tZXNzYWdlID0gMjY7Ci0KLSAgb3B0aW9uYWwgTmVzdGVkTWVzc2FnZSBvcHRp
b25hbF9tZXNzYWdlID0gMjcgW2xhenk9dHJ1ZV07Ci0KLSAgLy8gUmVwZWF0ZWQKLSAgcmVwZWF0
ZWQgICAgaW50MzIgcmVwZWF0ZWRfaW50MzIgICAgPSAzMTsKLSAgcmVwZWF0ZWQgICAgaW50NjQg
cmVwZWF0ZWRfaW50NjQgICAgPSAzMjsKLSAgcmVwZWF0ZWQgICB1aW50MzIgcmVwZWF0ZWRfdWlu
dDMyICAgPSAzMzsKLSAgcmVwZWF0ZWQgICB1aW50NjQgcmVwZWF0ZWRfdWludDY0ICAgPSAzNDsK
LSAgcmVwZWF0ZWQgICBzaW50MzIgcmVwZWF0ZWRfc2ludDMyICAgPSAzNTsKLSAgcmVwZWF0ZWQg
ICBzaW50NjQgcmVwZWF0ZWRfc2ludDY0ICAgPSAzNjsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIgcmVw
ZWF0ZWRfZml4ZWQzMiAgPSAzNzsKLSAgcmVwZWF0ZWQgIGZpeGVkNjQgcmVwZWF0ZWRfZml4ZWQ2
NCAgPSAzODsKLSAgcmVwZWF0ZWQgc2ZpeGVkMzIgcmVwZWF0ZWRfc2ZpeGVkMzIgPSAzOTsKLSAg
cmVwZWF0ZWQgc2ZpeGVkNjQgcmVwZWF0ZWRfc2ZpeGVkNjQgPSA0MDsKLSAgcmVwZWF0ZWQgICAg
ZmxvYXQgcmVwZWF0ZWRfZmxvYXQgICAgPSA0MTsKLSAgcmVwZWF0ZWQgICBkb3VibGUgcmVwZWF0
ZWRfZG91YmxlICAgPSA0MjsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgcmVwZWF0ZWRfYm9vbCAgICAg
PSA0MzsKLSAgcmVwZWF0ZWQgICBzdHJpbmcgcmVwZWF0ZWRfc3RyaW5nICAgPSA0NDsKLSAgcmVw
ZWF0ZWQgICAgYnl0ZXMgcmVwZWF0ZWRfYnl0ZXMgICAgPSA0NTsKLQotICByZXBlYXRlZCBncm91
cCBSZXBlYXRlZEdyb3VwID0gNDYgewotICAgIG9wdGlvbmFsIGludDMyIGEgPSA0NzsKLSAgfQot
Ci0gIHJlcGVhdGVkIE5lc3RlZE1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRl
ZF9uZXN0ZWRfbWVzc2FnZSAgPSA0ODsKLSAgcmVwZWF0ZWQgRm9yZWlnbk1lc3NhZ2UgICAgICAg
ICAgICAgICAgICAgICAgIHJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZSA9IDQ5OwotICByZXBlYXRl
ZCBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0TWVzc2FnZSByZXBlYXRlZF9pbXBvcnRf
bWVzc2FnZSAgPSA1MDsKLQotICByZXBlYXRlZCBOZXN0ZWRFbnVtICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwZWF0ZWRfbmVzdGVkX2VudW0gICAgID0gNTE7Ci0gIHJlcGVhdGVkIEZvcmVp
Z25FbnVtICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRlZF9mb3JlaWduX2VudW0gICAg
PSA1MjsKLSAgcmVwZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW0gICAg
cmVwZWF0ZWRfaW1wb3J0X2VudW0gICAgID0gNTM7Ci0KLSAgcmVwZWF0ZWQgc3RyaW5nIHJlcGVh
dGVkX3N0cmluZ19waWVjZSA9IDU0IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICByZXBlYXRlZCBz
dHJpbmcgcmVwZWF0ZWRfY29yZCA9IDU1IFtjdHlwZT1DT1JEXTsKLQotICByZXBlYXRlZCBOZXN0
ZWRNZXNzYWdlIHJlcGVhdGVkX2xhenlfbWVzc2FnZSA9IDU3IFtsYXp5PXRydWVdOwotCi0gIC8v
IFNpbmd1bGFyIHdpdGggZGVmYXVsdHMKLSAgb3B0aW9uYWwgICAgaW50MzIgZGVmYXVsdF9pbnQz
MiAgICA9IDYxIFtkZWZhdWx0ID0gIDQxICAgIF07Ci0gIG9wdGlvbmFsICAgIGludDY0IGRlZmF1
bHRfaW50NjQgICAgPSA2MiBbZGVmYXVsdCA9ICA0MiAgICBdOwotICBvcHRpb25hbCAgIHVpbnQz
MiBkZWZhdWx0X3VpbnQzMiAgID0gNjMgW2RlZmF1bHQgPSAgNDMgICAgXTsKLSAgb3B0aW9uYWwg
ICB1aW50NjQgZGVmYXVsdF91aW50NjQgICA9IDY0IFtkZWZhdWx0ID0gIDQ0ICAgIF07Ci0gIG9w
dGlvbmFsICAgc2ludDMyIGRlZmF1bHRfc2ludDMyICAgPSA2NSBbZGVmYXVsdCA9IC00NSAgICBd
OwotICBvcHRpb25hbCAgIHNpbnQ2NCBkZWZhdWx0X3NpbnQ2NCAgID0gNjYgW2RlZmF1bHQgPSAg
NDYgICAgXTsKLSAgb3B0aW9uYWwgIGZpeGVkMzIgZGVmYXVsdF9maXhlZDMyICA9IDY3IFtkZWZh
dWx0ID0gIDQ3ICAgIF07Ci0gIG9wdGlvbmFsICBmaXhlZDY0IGRlZmF1bHRfZml4ZWQ2NCAgPSA2
OCBbZGVmYXVsdCA9ICA0OCAgICBdOwotICBvcHRpb25hbCBzZml4ZWQzMiBkZWZhdWx0X3NmaXhl
ZDMyID0gNjkgW2RlZmF1bHQgPSAgNDkgICAgXTsKLSAgb3B0aW9uYWwgc2ZpeGVkNjQgZGVmYXVs
dF9zZml4ZWQ2NCA9IDcwIFtkZWZhdWx0ID0gLTUwICAgIF07Ci0gIG9wdGlvbmFsICAgIGZsb2F0
IGRlZmF1bHRfZmxvYXQgICAgPSA3MSBbZGVmYXVsdCA9ICA1MS41ICBdOwotICBvcHRpb25hbCAg
IGRvdWJsZSBkZWZhdWx0X2RvdWJsZSAgID0gNzIgW2RlZmF1bHQgPSAgNTJlMyAgXTsKLSAgb3B0
aW9uYWwgICAgIGJvb2wgZGVmYXVsdF9ib29sICAgICA9IDczIFtkZWZhdWx0ID0gdHJ1ZSAgIF07
Ci0gIG9wdGlvbmFsICAgc3RyaW5nIGRlZmF1bHRfc3RyaW5nICAgPSA3NCBbZGVmYXVsdCA9ICJo
ZWxsbyJdOwotICBvcHRpb25hbCAgICBieXRlcyBkZWZhdWx0X2J5dGVzICAgID0gNzUgW2RlZmF1
bHQgPSAid29ybGQiXTsKLQotICBvcHRpb25hbCBOZXN0ZWRFbnVtICBkZWZhdWx0X25lc3RlZF9l
bnVtICA9IDgxIFtkZWZhdWx0ID0gQkFSICAgICAgICBdOwotICBvcHRpb25hbCBGb3JlaWduRW51
bSBkZWZhdWx0X2ZvcmVpZ25fZW51bSA9IDgyIFtkZWZhdWx0ID0gRk9SRUlHTl9CQVJdOwotICBv
cHRpb25hbCBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bQotICAgICAgZGVmYXVs
dF9pbXBvcnRfZW51bSA9IDgzIFtkZWZhdWx0ID0gSU1QT1JUX0JBUl07Ci0KLSAgb3B0aW9uYWwg
c3RyaW5nIGRlZmF1bHRfc3RyaW5nX3BpZWNlID0gODQgW2N0eXBlPVNUUklOR19QSUVDRSxkZWZh
dWx0PSJhYmMiXTsKLSAgb3B0aW9uYWwgc3RyaW5nIGRlZmF1bHRfY29yZCA9IDg1IFtjdHlwZT1D
T1JELGRlZmF1bHQ9IjEyMyJdOwotCi0gIC8vIEZvciBvbmVvZiB0ZXN0Ci0gIG9uZW9mIG9uZW9m
X2ZpZWxkIHsKLSAgICB1aW50MzIgb25lb2ZfdWludDMyID0gMTExOwotICAgIE5lc3RlZE1lc3Nh
Z2Ugb25lb2ZfbmVzdGVkX21lc3NhZ2UgPSAxMTI7Ci0gICAgc3RyaW5nIG9uZW9mX3N0cmluZyA9
IDExMzsKLSAgICBieXRlcyBvbmVvZl9ieXRlcyA9IDExNDsKLSAgICBOZXN0ZWRNZXNzYWdlIGxh
enlfb25lb2ZfbmVzdGVkX21lc3NhZ2UgPSAxMTUgW2xhenk9dHJ1ZV07Ci0gIH0KLX0KLQotLy8g
RGVmaW5lIHRoZXNlIGFmdGVyIFRlc3RBbGxUeXBlcyB0byBtYWtlIHN1cmUgdGhlIGNvbXBpbGVy
IGNhbiBoYW5kbGUKLS8vIHRoYXQuCi1tZXNzYWdlIEZvcmVpZ25NZXNzYWdlIHsKLSAgb3B0aW9u
YWwgaW50MzIgYyA9IDE7Ci19Ci0KLWVudW0gRm9yZWlnbkVudW0gewotICBGT1JFSUdOX0ZPTyA9
IDQ7Ci0gIEZPUkVJR05fQkFSID0gNTsKLSAgRk9SRUlHTl9CQVogPSA2OwotfQotCi1tZXNzYWdl
IFRlc3ROb0FyZW5hTWVzc2FnZSB7Ci0gIG9wdGlvbmFsIHByb3RvMl9hcmVuYV91bml0dGVzdC5B
cmVuYU1lc3NhZ2UgYXJlbmFfbWVzc2FnZSA9IDE7Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0X25vX2FyZW5hX2ltcG9ydC5wcm90byBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi91bml0dGVzdF9ub19hcmVuYV9pbXBvcnQucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA3MmFmNDllM2M3MDQ3Mjg3M2I2MWZhMTdiYTNkMzNkMzdmOWY4ZDMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3VuaXR0ZXN0X25vX2FyZW5hX2ltcG9ydC5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDM3
ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdl
IGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAi
cHJvdG8yIjsKLQotcGFja2FnZSBwcm90bzJfYXJlbmFfdW5pdHRlc3Q7Ci0KLW1lc3NhZ2UgSW1w
b3J0Tm9BcmVuYU5lc3RlZE1lc3NhZ2UgewotICBvcHRpb25hbCBpbnQzMiBkID0gMTsKLX07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fYXJlbmFfbGl0ZS5wcm90
byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19hcmVuYV9saXRlLnByb3RvCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGM3YjdjZTk5YTk1MDQzZTYyOWI1YzcyOWM3MGU5
NDNlN2Q3ZWI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19hcmVuYV9saXRlLnByb3RvCisrKyAvZGV2
L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLXN5bnRheCA9ICJwcm90bzIiOwotCi1vcHRpb24gb3B0aW1pemVfZm9yID0gTElURV9SVU5U
SU1FOwotCi0vLyBXZSBkb24ndCBwdXQgdGhpcyBpbiBhIHBhY2thZ2Ugd2l0aGluIHByb3RvMiBi
ZWNhdXNlIHdlIG5lZWQgdG8gbWFrZSBzdXJlCi0vLyB0aGF0IHRoZSBnZW5lcmF0ZWQgY29kZSBk
b2Vzbid0IGRlcGVuZCBvbiBiZWluZyBpbiB0aGUgcHJvdG8yIG5hbWVzcGFjZS4KLS8vIEluIHRl
c3RfdXRpbC5oIHdlIGRvICJ1c2luZyBuYW1lc3BhY2UgdW5pdHRlc3QgPSBwcm90b2J1Zl91bml0
dGVzdCIuCi1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0X25vX2FyZW5hOwotCi1tZXNzYWdlIEZv
cmVpZ25NZXNzYWdlTGl0ZSB7Ci0gIG9wdGlvbmFsIGludDMyIGMgPSAxOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X25vX2ZpZWxkX3ByZXNlbmNlLnByb3RvIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X25vX2ZpZWxkX3ByZXNlbmNlLnByb3RvCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTRhZmZmNDJkZTM0OThhMWJiYjAzNmI2YWZlMjE4
NmFiM2JlMTBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9ub19maWVsZF9wcmVzZW5jZS5wcm90bworKysg
L2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotLy8gQSBwcm90byBmaWxlIHVzZWQgdG8gdGVzdCBhIG1lc3NhZ2UgdHlwZSB3aXRo
IG5vIGV4cGxpY2l0IGZpZWxkIHByZXNlbmNlLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotLy8g
V2Ugd2FudCB0byB0ZXN0IGVtYmVkZGVkIHByb3RvMiBtZXNzYWdlcywgc28gaW5jbHVkZSBzb21l
IHByb3RvMiB0eXBlcy4KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnByb3RvIjsK
LQotcGFja2FnZSBwcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0OwotCi0vLyBUaGlzIHBy
b3RvIGluY2x1ZGVzIGV2ZXJ5IHR5cGUgb2YgZmllbGQgaW4gYm90aCBzaW5ndWxhciBhbmQgcmVw
ZWF0ZWQKLS8vIGZvcm1zLgotbWVzc2FnZSBUZXN0QWxsVHlwZXMgewotICBtZXNzYWdlIE5lc3Rl
ZE1lc3NhZ2UgewotICAgIGludDMyIGJiID0gMTsKLSAgfQotCi0gIGVudW0gTmVzdGVkRW51bSB7
Ci0gICAgRk9PID0gMDsKLSAgICBCQVIgPSAxOwotICAgIEJBWiA9IDI7Ci0gIH0KLQotICAvLyBT
aW5ndWxhcgotICAvLyBUT0RPOiByZW1vdmUgJ29wdGlvbmFsJyBsYWJlbHMgYXMgc29vbiBhcyBD
TCA2OTE4ODA3NyBpcyBMR1RNJ2QgdG8gbWFrZQotICAvLyAnb3B0aW9uYWwnIG9wdGlvbmFsLgot
ICAgICBpbnQzMiBvcHRpb25hbF9pbnQzMiAgICA9ICAxOwotICAgICBpbnQ2NCBvcHRpb25hbF9p
bnQ2NCAgICA9ICAyOwotICAgIHVpbnQzMiBvcHRpb25hbF91aW50MzIgICA9ICAzOwotICAgIHVp
bnQ2NCBvcHRpb25hbF91aW50NjQgICA9ICA0OwotICAgIHNpbnQzMiBvcHRpb25hbF9zaW50MzIg
ICA9ICA1OwotICAgIHNpbnQ2NCBvcHRpb25hbF9zaW50NjQgICA9ICA2OwotICAgZml4ZWQzMiBv
cHRpb25hbF9maXhlZDMyICA9ICA3OwotICAgZml4ZWQ2NCBvcHRpb25hbF9maXhlZDY0ICA9ICA4
OwotICBzZml4ZWQzMiBvcHRpb25hbF9zZml4ZWQzMiA9ICA5OwotICBzZml4ZWQ2NCBvcHRpb25h
bF9zZml4ZWQ2NCA9IDEwOwotICAgICBmbG9hdCBvcHRpb25hbF9mbG9hdCAgICA9IDExOwotICAg
IGRvdWJsZSBvcHRpb25hbF9kb3VibGUgICA9IDEyOwotICAgICAgYm9vbCBvcHRpb25hbF9ib29s
ICAgICA9IDEzOwotICAgIHN0cmluZyBvcHRpb25hbF9zdHJpbmcgICA9IDE0OwotICAgICBieXRl
cyBvcHRpb25hbF9ieXRlcyAgICA9IDE1OwotCi0gIE5lc3RlZE1lc3NhZ2UgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSAgPSAxODsKLSAgRm9yZWlnbk1lc3Nh
Z2UgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSA9IDE5Owot
ICBwcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMgICAgICAgICBvcHRpb25hbF9wcm90bzJf
bWVzc2FnZSA9IDIwOwotCi0gIE5lc3RlZEVudW0gICAgICAgICAgICAgICAgICAgICAgICAgICBv
cHRpb25hbF9uZXN0ZWRfZW51bSAgICAgPSAyMTsKLSAgRm9yZWlnbkVudW0gICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbmFsX2ZvcmVpZ25fZW51bSAgICA9IDIyOwotICAvLyBOLkIuOiBw
cm90bzItZW51bS10eXBlIGZpZWxkcyBub3QgYWxsb3dlZCwgYmVjYXVzZSB0aGVpciBkZWZhdWx0
IHZhbHVlcwotICAvLyBtaWdodCBub3QgYmUgemVyby4KLSAgLy9vcHRpb25hbCBwcm90b2J1Zl91
bml0dGVzdC5Gb3JlaWduRW51bSAgICAgICAgICBvcHRpb25hbF9wcm90bzJfZW51bSAgICAgPSAy
MzsKLQotICBzdHJpbmcgb3B0aW9uYWxfc3RyaW5nX3BpZWNlID0gMjQgW2N0eXBlPVNUUklOR19Q
SUVDRV07Ci0gIHN0cmluZyBvcHRpb25hbF9jb3JkID0gMjUgW2N0eXBlPUNPUkRdOwotCi0gIE5l
c3RlZE1lc3NhZ2Ugb3B0aW9uYWxfbGF6eV9tZXNzYWdlID0gMzAgW2xhenk9dHJ1ZV07Ci0KLSAg
Ly8gUmVwZWF0ZWQKLSAgcmVwZWF0ZWQgICAgaW50MzIgcmVwZWF0ZWRfaW50MzIgICAgPSAzMTsK
LSAgcmVwZWF0ZWQgICAgaW50NjQgcmVwZWF0ZWRfaW50NjQgICAgPSAzMjsKLSAgcmVwZWF0ZWQg
ICB1aW50MzIgcmVwZWF0ZWRfdWludDMyICAgPSAzMzsKLSAgcmVwZWF0ZWQgICB1aW50NjQgcmVw
ZWF0ZWRfdWludDY0ICAgPSAzNDsKLSAgcmVwZWF0ZWQgICBzaW50MzIgcmVwZWF0ZWRfc2ludDMy
ICAgPSAzNTsKLSAgcmVwZWF0ZWQgICBzaW50NjQgcmVwZWF0ZWRfc2ludDY0ICAgPSAzNjsKLSAg
cmVwZWF0ZWQgIGZpeGVkMzIgcmVwZWF0ZWRfZml4ZWQzMiAgPSAzNzsKLSAgcmVwZWF0ZWQgIGZp
eGVkNjQgcmVwZWF0ZWRfZml4ZWQ2NCAgPSAzODsKLSAgcmVwZWF0ZWQgc2ZpeGVkMzIgcmVwZWF0
ZWRfc2ZpeGVkMzIgPSAzOTsKLSAgcmVwZWF0ZWQgc2ZpeGVkNjQgcmVwZWF0ZWRfc2ZpeGVkNjQg
PSA0MDsKLSAgcmVwZWF0ZWQgICAgZmxvYXQgcmVwZWF0ZWRfZmxvYXQgICAgPSA0MTsKLSAgcmVw
ZWF0ZWQgICBkb3VibGUgcmVwZWF0ZWRfZG91YmxlICAgPSA0MjsKLSAgcmVwZWF0ZWQgICAgIGJv
b2wgcmVwZWF0ZWRfYm9vbCAgICAgPSA0MzsKLSAgcmVwZWF0ZWQgICBzdHJpbmcgcmVwZWF0ZWRf
c3RyaW5nICAgPSA0NDsKLSAgcmVwZWF0ZWQgICAgYnl0ZXMgcmVwZWF0ZWRfYnl0ZXMgICAgPSA0
NTsKLQotICByZXBlYXRlZCBOZXN0ZWRNZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgcmVw
ZWF0ZWRfbmVzdGVkX21lc3NhZ2UgID0gNDg7Ci0gIHJlcGVhdGVkIEZvcmVpZ25NZXNzYWdlICAg
ICAgICAgICAgICAgICAgICAgICByZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UgPSA0OTsKLSAgcmVw
ZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzICAgICAgICAgcmVwZWF0ZWRfcHJv
dG8yX21lc3NhZ2UgID0gNTA7Ci0KLSAgcmVwZWF0ZWQgTmVzdGVkRW51bSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGVhdGVkX25lc3RlZF9lbnVtICAgICA9IDUxOwotICByZXBlYXRlZCBG
b3JlaWduRW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ZWRfZm9yZWlnbl9lbnVt
ICAgID0gNTI7Ci0KLSAgcmVwZWF0ZWQgc3RyaW5nIHJlcGVhdGVkX3N0cmluZ19waWVjZSA9IDU0
IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICByZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRfY29yZCA9
IDU1IFtjdHlwZT1DT1JEXTsKLQotICByZXBlYXRlZCBOZXN0ZWRNZXNzYWdlIHJlcGVhdGVkX2xh
enlfbWVzc2FnZSA9IDU3IFtsYXp5PXRydWVdOwotCi0gIG9uZW9mIG9uZW9mX2ZpZWxkIHsKLSAg
ICB1aW50MzIgb25lb2ZfdWludDMyID0gMTExOwotICAgIE5lc3RlZE1lc3NhZ2Ugb25lb2ZfbmVz
dGVkX21lc3NhZ2UgPSAxMTI7Ci0gICAgc3RyaW5nIG9uZW9mX3N0cmluZyA9IDExMzsKLSAgICBO
ZXN0ZWRFbnVtIG9uZW9mX2VudW0gPSAxMTQ7Ci0gIH0KLX0KLQotbWVzc2FnZSBUZXN0UHJvdG8y
UmVxdWlyZWQgewotICBwcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWQgcHJvdG8yID0gMTsK
LX0KLQotLy8gRGVmaW5lIHRoZXNlIGFmdGVyIFRlc3RBbGxUeXBlcyB0byBtYWtlIHN1cmUgdGhl
IGNvbXBpbGVyIGNhbiBoYW5kbGUKLS8vIHRoYXQuCi1tZXNzYWdlIEZvcmVpZ25NZXNzYWdlIHsK
LSAgaW50MzIgYyA9IDE7Ci19Ci0KLWVudW0gRm9yZWlnbkVudW0gewotICBGT1JFSUdOX0ZPTyA9
IDA7Ci0gIEZPUkVJR05fQkFSID0gMTsKLSAgRk9SRUlHTl9CQVogPSAyOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X25vX2dlbmVyaWNfc2VydmljZXMucHJvdG8g
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fZ2VuZXJpY19zZXJ2aWNlcy5wcm90bwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZjNzcxM2M5ZTNhZDBmMGMyZWNmZjE1NjFl
OWM1ODg2NGIwMTUwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fZ2VuZXJpY19zZXJ2aWNlcy5wcm90
bworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEp
Ci0KLXN5bnRheCA9ICJwcm90bzIiOwotcGFja2FnZSBnb29nbGUucHJvdG9idWYubm9fZ2VuZXJp
Y19zZXJ2aWNlc190ZXN0OwotCi0KLS8vICpfZ2VuZXJpY19zZXJ2aWNlcyBhcmUgZmFsc2UgYnkg
ZGVmYXVsdC4KLQotbWVzc2FnZSBUZXN0TWVzc2FnZSB7Ci0gIG9wdGlvbmFsIGludDMyIGEgPSAx
OwotICBleHRlbnNpb25zIDEwMDAgdG8gbWF4OwotfQotCi1lbnVtIFRlc3RFbnVtIHsKLSAgRk9P
ID0gMTsKLX0KLQotZXh0ZW5kIFRlc3RNZXNzYWdlIHsKLSAgb3B0aW9uYWwgaW50MzIgdGVzdF9l
eHRlbnNpb24gPSAxMDAwOwotfQotCi1zZXJ2aWNlIFRlc3RTZXJ2aWNlIHsKLSAgcnBjIEZvbyhU
ZXN0TWVzc2FnZSkgcmV0dXJucyhUZXN0TWVzc2FnZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdW5pdHRlc3Rfb3B0aW1pemVfZm9yLnByb3RvIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3VuaXR0ZXN0X29wdGltaXplX2Zvci5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZWU5Y2M3YmQ0OTIxMWQyYmJmYzMzMjE5ZjMzNGNkNTcxNDI5ODNmNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
dW5pdHRlc3Rfb3B0aW1pemVfZm9yLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9u
QGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2Nv
bCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQg
b3RoZXJzLgotLy8KLS8vIEEgcHJvdG8gZmlsZSB3aGljaCB1c2VzIG9wdGltaXplX2ZvciA9IENP
REVfU0laRS4KLQotc3ludGF4ID0gInByb3RvMiI7Ci1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi91
bml0dGVzdC5wcm90byI7Ci0KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7Ci0KLW9wdGlvbiBv
cHRpbWl6ZV9mb3IgPSBDT0RFX1NJWkU7Ci0KLW1lc3NhZ2UgVGVzdE9wdGltaXplZEZvclNpemUg
ewotICBvcHRpb25hbCBpbnQzMiBpID0gMTsKLSAgb3B0aW9uYWwgRm9yZWlnbk1lc3NhZ2UgbXNn
ID0gMTk7Ci0KLSAgZXh0ZW5zaW9ucyAxMDAwIHRvIG1heDsKLQotICBleHRlbmQgVGVzdE9wdGlt
aXplZEZvclNpemUgewotICAgIG9wdGlvbmFsIGludDMyIHRlc3RfZXh0ZW5zaW9uID0gMTIzNDsK
LSAgICBvcHRpb25hbCBUZXN0UmVxdWlyZWRPcHRpbWl6ZWRGb3JTaXplIHRlc3RfZXh0ZW5zaW9u
MiA9IDEyMzU7Ci0gIH0KLQotICBvbmVvZiBmb28gewotICAgIGludDMyIGludGVnZXJfZmllbGQg
PSAyOwotICAgIHN0cmluZyBzdHJpbmdfZmllbGQgPSAzOwotICB9Ci19Ci0KLW1lc3NhZ2UgVGVz
dFJlcXVpcmVkT3B0aW1pemVkRm9yU2l6ZSB7Ci0gIHJlcXVpcmVkIGludDMyIHggPSAxOwotfQot
Ci1tZXNzYWdlIFRlc3RPcHRpb25hbE9wdGltaXplZEZvclNpemUgewotICBvcHRpb25hbCBUZXN0
UmVxdWlyZWRPcHRpbWl6ZWRGb3JTaXplIG8gPSAxOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3VuaXR0ZXN0X3ByZXNlcnZlX3Vua25vd25fZW51bS5wcm90byBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi91bml0dGVzdF9wcmVzZXJ2ZV91bmtub3duX2VudW0ucHJvdG8KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOTEzMzJjOWU3ZmFhN2Y1OTJiODYzNmY4MTI5ZWQ1ZWRi
NzI1MzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMv
Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3ByZXNlcnZlX3Vua25vd25fZW51bS5wcm90bworKysg
L2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBwcm90bzNfcHJlc2VydmVfdW5r
bm93bl9lbnVtX3VuaXR0ZXN0Owotb3B0aW9uIG9iamNfY2xhc3NfcHJlZml4ID0gIlVua25vd25F
bnVtcyI7Ci0KLW9wdGlvbiBjc2hhcnBfbmFtZXNwYWNlID0gIkdvb2dsZS5Qcm90b2J1Zi5UZXN0
UHJvdG9zIjsKLQotZW51bSBNeUVudW0gewotICBGT08gPSAwOwotICBCQVIgPSAxOwotICBCQVog
PSAyOwotfQotCi1lbnVtIE15RW51bVBsdXNFeHRyYSB7Ci0gIEVfRk9PID0gMDsKLSAgRV9CQVIg
PSAxOwotICBFX0JBWiA9IDI7Ci0gIEVfRVhUUkEgPSAzOwotfQotCi1tZXNzYWdlIE15TWVzc2Fn
ZSB7Ci0gIE15RW51bSBlID0gMTsKLSAgcmVwZWF0ZWQgTXlFbnVtIHJlcGVhdGVkX2UgPSAyOwot
ICByZXBlYXRlZCBNeUVudW0gcmVwZWF0ZWRfcGFja2VkX2UgPSAzIFtwYWNrZWQ9dHJ1ZV07Ci0g
IHJlcGVhdGVkIE15RW51bVBsdXNFeHRyYSByZXBlYXRlZF9wYWNrZWRfdW5leHBlY3RlZF9lID0g
NDsgIC8vIG5vdCBwYWNrZWQKLSAgb25lb2YgbyB7Ci0gICAgTXlFbnVtIG9uZW9mX2VfMSA9IDU7
Ci0gICAgTXlFbnVtIG9uZW9mX2VfMiA9IDY7Ci0gIH0KLX0KLQotbWVzc2FnZSBNeU1lc3NhZ2VQ
bHVzRXh0cmEgewotICBNeUVudW1QbHVzRXh0cmEgZSA9IDE7Ci0gIHJlcGVhdGVkIE15RW51bVBs
dXNFeHRyYSByZXBlYXRlZF9lID0gMjsKLSAgcmVwZWF0ZWQgTXlFbnVtUGx1c0V4dHJhIHJlcGVh
dGVkX3BhY2tlZF9lID0gMyBbcGFja2VkPXRydWVdOwotICByZXBlYXRlZCBNeUVudW1QbHVzRXh0
cmEgcmVwZWF0ZWRfcGFja2VkX3VuZXhwZWN0ZWRfZSA9IDQgW3BhY2tlZD10cnVlXTsKLSAgb25l
b2YgbyB7Ci0gICAgTXlFbnVtUGx1c0V4dHJhIG9uZW9mX2VfMSA9IDU7Ci0gICAgTXlFbnVtUGx1
c0V4dHJhIG9uZW9mX2VfMiA9IDY7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi91bml0dGVzdF9wcmVzZXJ2ZV91bmtub3duX2VudW0yLnByb3RvIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3VuaXR0ZXN0X3ByZXNlcnZlX3Vua25vd25fZW51bTIucHJvdG8KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFkZjQyOTY4YWFhNTNmY2ZhNmRiNTQ5YjExYjU4ZjBkMzIzODEw
OWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3ByZXNlcnZlX3Vua25vd25fZW51bTIucHJvdG8KKysrIC9k
ZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotc3ludGF4ID0gInByb3RvMiI7Ci0KLXBhY2thZ2UgcHJvdG8yX3ByZXNlcnZlX3Vua25v
d25fZW51bV91bml0dGVzdDsKLQotZW51bSBNeUVudW0gewotICBGT08gPSAwOwotICBCQVIgPSAx
OwotICBCQVogPSAyOwotfQotCi1tZXNzYWdlIE15TWVzc2FnZSB7Ci0gIG9wdGlvbmFsIE15RW51
bSBlID0gMTsKLSAgcmVwZWF0ZWQgTXlFbnVtIHJlcGVhdGVkX2UgPSAyOwotICByZXBlYXRlZCBN
eUVudW0gcmVwZWF0ZWRfcGFja2VkX2UgPSAzIFtwYWNrZWQ9dHJ1ZV07Ci0gIHJlcGVhdGVkIE15
RW51bSByZXBlYXRlZF9wYWNrZWRfdW5leHBlY3RlZF9lID0gNDsgIC8vIG5vdCBwYWNrZWQKLSAg
b25lb2YgbyB7Ci0gICAgTXlFbnVtIG9uZW9mX2VfMSA9IDU7Ci0gICAgTXlFbnVtIG9uZW9mX2Vf
MiA9IDY7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9w
cm90bzMucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zLnByb3RvCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTlkMjE3ODY0NTM3OWFjNTBiYWQzYmE1NDEy
N2IwOWU5M2Q0YmY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9wcm90bzMucHJvdG8KKysrIC9kZXYvbnVs
bApAQCAtMSwzODggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICBCYXNlZCBv
biBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdh
dCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIEEgcHJvdG8gZmlsZSB3ZSB3aWxsIHVz
ZSBmb3IgdW5pdCB0ZXN0aW5nLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotLy8gU29tZSBnZW5l
cmljX3NlcnZpY2VzIG9wdGlvbihzKSBhZGRlZCBhdXRvbWF0aWNhbGx5LgotLy8gU2VlOiAgaHR0
cDovL2dvL3Byb3RvMi1nZW5lcmljLXNlcnZpY2VzLWRlZmF1bHQKLW9wdGlvbiBjY19nZW5lcmlj
X3NlcnZpY2VzID0gdHJ1ZTsgICAgIC8vIGF1dG8tYWRkZWQKLW9wdGlvbiBqYXZhX2dlbmVyaWNf
c2VydmljZXMgPSB0cnVlOyAgIC8vIGF1dG8tYWRkZWQKLW9wdGlvbiBweV9nZW5lcmljX3NlcnZp
Y2VzID0gdHJ1ZTsgICAgIC8vIGF1dG8tYWRkZWQKLW9wdGlvbiBjY19lbmFibGVfYXJlbmFzID0g
dHJ1ZTsKLW9wdGlvbiBjc2hhcnBfbmFtZXNwYWNlID0gIkdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJv
dG9zIjsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3Byb3RvMy5w
cm90byI7Ci0KLS8vIFdlIGRvbid0IHB1dCB0aGlzIGluIGEgcGFja2FnZSB3aXRoaW4gcHJvdG8y
IGJlY2F1c2Ugd2UgbmVlZCB0byBtYWtlIHN1cmUKLS8vIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2Rl
IGRvZXNuJ3QgZGVwZW5kIG9uIGJlaW5nIGluIHRoZSBwcm90bzIgbmFtZXNwYWNlLgotLy8gSW4g
dGVzdF91dGlsLmggd2UgZG8gInVzaW5nIG5hbWVzcGFjZSB1bml0dGVzdCA9IHByb3RvYnVmX3Vu
aXR0ZXN0Ii4KLXBhY2thZ2UgcHJvdG9idWZfdW5pdHRlc3Q7Ci0KLS8vIFByb3RvcyBvcHRpbWl6
ZWQgZm9yIFNQRUVEIHVzZSBhIHN0cmljdCBzdXBlcnNldCBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUK
LS8vIG9mIGVxdWl2YWxlbnQgb25lcyBvcHRpbWl6ZWQgZm9yIENPREVfU0laRSwgc28gd2Ugc2hv
dWxkIG9wdGltaXplIGFsbCBvdXIKLS8vIHRlc3RzIGZvciBzcGVlZCB1bmxlc3MgZXhwbGljaXRs
eSB0ZXN0aW5nIGNvZGUgc2l6ZSBvcHRpbWl6YXRpb24uCi1vcHRpb24gb3B0aW1pemVfZm9yID0g
U1BFRUQ7Ci0KLW9wdGlvbiBqYXZhX291dGVyX2NsYXNzbmFtZSA9ICJVbml0dGVzdFByb3RvIjsK
LQotLy8gVGhpcyBwcm90byBpbmNsdWRlcyBldmVyeSB0eXBlIG9mIGZpZWxkIGluIGJvdGggc2lu
Z3VsYXIgYW5kIHJlcGVhdGVkCi0vLyBmb3Jtcy4KLW1lc3NhZ2UgVGVzdEFsbFR5cGVzIHsKLSAg
bWVzc2FnZSBOZXN0ZWRNZXNzYWdlIHsKLSAgICAvLyBUaGUgZmllbGQgbmFtZSAiYiIgZmFpbHMg
dG8gY29tcGlsZSBpbiBwcm90bzEgYmVjYXVzZSBpdCBjb25mbGljdHMgd2l0aAotICAgIC8vIGEg
bG9jYWwgdmFyaWFibGUgbmFtZWQgImIiIGluIG9uZSBvZiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMu
ICBEb2guCi0gICAgLy8gVGhpcyBmaWxlIG5lZWRzIHRvIGNvbXBpbGUgaW4gcHJvdG8xIHRvIHRl
c3QgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuCi0gICAgaW50MzIgYmIgPSAxOwotICB9Ci0KLSAg
ZW51bSBOZXN0ZWRFbnVtIHsKLSAgICBORVNURURfRU5VTV9VTlNQRUNJRklFRCA9IDA7Ci0gICAg
Rk9PID0gMTsKLSAgICBCQVIgPSAyOwotICAgIEJBWiA9IDM7Ci0gICAgTkVHID0gLTE7ICAvLyBJ
bnRlbnRpb25hbGx5IG5lZ2F0aXZlLgotICB9Ci0KLSAgLy8gU2luZ3VsYXIKLSAgaW50MzIgc2lu
Z2xlX2ludDMyID0gMTsKLSAgaW50NjQgc2luZ2xlX2ludDY0ID0gMjsKLSAgdWludDMyIHNpbmds
ZV91aW50MzIgPSAzOwotICB1aW50NjQgc2luZ2xlX3VpbnQ2NCA9IDQ7Ci0gIHNpbnQzMiBzaW5n
bGVfc2ludDMyID0gNTsKLSAgc2ludDY0IHNpbmdsZV9zaW50NjQgPSA2OwotICBmaXhlZDMyIHNp
bmdsZV9maXhlZDMyID0gNzsKLSAgZml4ZWQ2NCBzaW5nbGVfZml4ZWQ2NCA9IDg7Ci0gIHNmaXhl
ZDMyIHNpbmdsZV9zZml4ZWQzMiA9IDk7Ci0gIHNmaXhlZDY0IHNpbmdsZV9zZml4ZWQ2NCA9IDEw
OwotICBmbG9hdCBzaW5nbGVfZmxvYXQgPSAxMTsKLSAgZG91YmxlIHNpbmdsZV9kb3VibGUgPSAx
MjsKLSAgYm9vbCBzaW5nbGVfYm9vbCA9IDEzOwotICBzdHJpbmcgc2luZ2xlX3N0cmluZyA9IDE0
OwotICBieXRlcyBzaW5nbGVfYnl0ZXMgPSAxNTsKLQotICBOZXN0ZWRNZXNzYWdlIHNpbmdsZV9u
ZXN0ZWRfbWVzc2FnZSA9IDE4OwotICBGb3JlaWduTWVzc2FnZSBzaW5nbGVfZm9yZWlnbl9tZXNz
YWdlID0gMTk7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNzYWdlIHNpbmds
ZV9pbXBvcnRfbWVzc2FnZSA9IDIwOwotCi0gIE5lc3RlZEVudW0gc2luZ2xlX25lc3RlZF9lbnVt
ID0gMjE7Ci0gIEZvcmVpZ25FbnVtIHNpbmdsZV9mb3JlaWduX2VudW0gPSAyMjsKLSAgcHJvdG9i
dWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW0gc2luZ2xlX2ltcG9ydF9lbnVtID0gMjM7Ci0K
LSAgLy8gRGVmaW5lZCBpbiB1bml0dGVzdF9pbXBvcnRfcHVibGljLnByb3RvCi0gIHByb3RvYnVm
X3VuaXR0ZXN0X2ltcG9ydC5QdWJsaWNJbXBvcnRNZXNzYWdlCi0gICAgICBzaW5nbGVfcHVibGlj
X2ltcG9ydF9tZXNzYWdlID0gMjY7Ci0KLSAgLy8gUmVwZWF0ZWQKLSAgcmVwZWF0ZWQgICAgaW50
MzIgcmVwZWF0ZWRfaW50MzIgICAgPSAzMTsKLSAgcmVwZWF0ZWQgICAgaW50NjQgcmVwZWF0ZWRf
aW50NjQgICAgPSAzMjsKLSAgcmVwZWF0ZWQgICB1aW50MzIgcmVwZWF0ZWRfdWludDMyICAgPSAz
MzsKLSAgcmVwZWF0ZWQgICB1aW50NjQgcmVwZWF0ZWRfdWludDY0ICAgPSAzNDsKLSAgcmVwZWF0
ZWQgICBzaW50MzIgcmVwZWF0ZWRfc2ludDMyICAgPSAzNTsKLSAgcmVwZWF0ZWQgICBzaW50NjQg
cmVwZWF0ZWRfc2ludDY0ICAgPSAzNjsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIgcmVwZWF0ZWRfZml4
ZWQzMiAgPSAzNzsKLSAgcmVwZWF0ZWQgIGZpeGVkNjQgcmVwZWF0ZWRfZml4ZWQ2NCAgPSAzODsK
LSAgcmVwZWF0ZWQgc2ZpeGVkMzIgcmVwZWF0ZWRfc2ZpeGVkMzIgPSAzOTsKLSAgcmVwZWF0ZWQg
c2ZpeGVkNjQgcmVwZWF0ZWRfc2ZpeGVkNjQgPSA0MDsKLSAgcmVwZWF0ZWQgICAgZmxvYXQgcmVw
ZWF0ZWRfZmxvYXQgICAgPSA0MTsKLSAgcmVwZWF0ZWQgICBkb3VibGUgcmVwZWF0ZWRfZG91Ymxl
ICAgPSA0MjsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgcmVwZWF0ZWRfYm9vbCAgICAgPSA0MzsKLSAg
cmVwZWF0ZWQgICBzdHJpbmcgcmVwZWF0ZWRfc3RyaW5nICAgPSA0NDsKLSAgcmVwZWF0ZWQgICAg
Ynl0ZXMgcmVwZWF0ZWRfYnl0ZXMgICAgPSA0NTsKLQotICByZXBlYXRlZCBOZXN0ZWRNZXNzYWdl
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UgID0gNDg7Ci0g
IHJlcGVhdGVkIEZvcmVpZ25NZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRlZF9m
b3JlaWduX21lc3NhZ2UgPSA0OTsKLSAgcmVwZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0
LkltcG9ydE1lc3NhZ2UgcmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2UgID0gNTA7Ci0KLSAgcmVwZWF0
ZWQgTmVzdGVkRW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkX25lc3RlZF9l
bnVtICAgICA9IDUxOwotICByZXBlYXRlZCBGb3JlaWduRW51bSAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwZWF0ZWRfZm9yZWlnbl9lbnVtICAgID0gNTI7Ci0gIHJlcGVhdGVkIHByb3RvYnVm
X3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVtICAgIHJlcGVhdGVkX2ltcG9ydF9lbnVtICAgICA9
IDUzOwotICAvLyBEZWZpbmVkIGluIHVuaXR0ZXN0X2ltcG9ydF9wdWJsaWMucHJvdG8KLSAgcmVw
ZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LlB1YmxpY0ltcG9ydE1lc3NhZ2UKLSAgICAg
IHJlcGVhdGVkX3B1YmxpY19pbXBvcnRfbWVzc2FnZSA9IDU0OwotCi0gIC8vIEZvciBvbmVvZiB0
ZXN0Ci0gIG9uZW9mIG9uZW9mX2ZpZWxkIHsKLSAgICB1aW50MzIgb25lb2ZfdWludDMyID0gMTEx
OwotICAgIE5lc3RlZE1lc3NhZ2Ugb25lb2ZfbmVzdGVkX21lc3NhZ2UgPSAxMTI7Ci0gICAgc3Ry
aW5nIG9uZW9mX3N0cmluZyA9IDExMzsKLSAgICBieXRlcyBvbmVvZl9ieXRlcyA9IDExNDsKLSAg
fQotfQotCi0vLyBUaGlzIHByb3RvIGluY2x1ZGVzIGEgcmVjdXNpdmVseSBuZXN0ZWQgbWVzc2Fn
ZS4KLW1lc3NhZ2UgTmVzdGVkVGVzdEFsbFR5cGVzIHsKLSAgTmVzdGVkVGVzdEFsbFR5cGVzIGNo
aWxkID0gMTsKLSAgVGVzdEFsbFR5cGVzIHBheWxvYWQgPSAyOwotICByZXBlYXRlZCBOZXN0ZWRU
ZXN0QWxsVHlwZXMgcmVwZWF0ZWRfY2hpbGQgPSAzOwotfQotCi1tZXNzYWdlIFRlc3REZXByZWNh
dGVkRmllbGRzIHsKLSAgaW50MzIgZGVwcmVjYXRlZF9pbnQzMiA9IDEgW2RlcHJlY2F0ZWQ9dHJ1
ZV07Ci19Ci0KLS8vIERlZmluZSB0aGVzZSBhZnRlciBUZXN0QWxsVHlwZXMgdG8gbWFrZSBzdXJl
IHRoZSBjb21waWxlciBjYW4gaGFuZGxlCi0vLyB0aGF0LgotbWVzc2FnZSBGb3JlaWduTWVzc2Fn
ZSB7Ci0gIGludDMyIGMgPSAxOwotfQotCi1lbnVtIEZvcmVpZ25FbnVtIHsKLSAgRk9SRUlHTl9V
TlNQRUNJRklFRCA9IDA7Ci0gIEZPUkVJR05fRk9PID0gNDsKLSAgRk9SRUlHTl9CQVIgPSA1Owot
ICBGT1JFSUdOX0JBWiA9IDY7Ci19Ci0KLW1lc3NhZ2UgVGVzdFJlc2VydmVkRmllbGRzIHsKLSAg
cmVzZXJ2ZWQgMiwgMTUsIDkgdG8gMTE7Ci0gIHJlc2VydmVkICJiYXIiLCAiYmF6IjsKLX0KLQot
Ci0vLyBUZXN0IHRoYXQgd2UgY2FuIHVzZSBOZXN0ZWRNZXNzYWdlIGZyb20gb3V0c2lkZSBUZXN0
QWxsVHlwZXMuCi1tZXNzYWdlIFRlc3RGb3JlaWduTmVzdGVkIHsKLSAgVGVzdEFsbFR5cGVzLk5l
c3RlZE1lc3NhZ2UgZm9yZWlnbl9uZXN0ZWQgPSAxOwotfQotCi0vLyBUZXN0IHRoYXQgcmVhbGx5
IGxhcmdlIHRhZyBudW1iZXJzIGRvbid0IGJyZWFrIGFueXRoaW5nLgotbWVzc2FnZSBUZXN0UmVh
bGx5TGFyZ2VUYWdOdW1iZXIgewotICAvLyBUaGUgbGFyZ2VzdCBwb3NzaWJsZSB0YWcgbnVtYmVy
IGlzIDJeMjggLSAxLCBzaW5jZSB0aGUgd2lyZSBmb3JtYXQgdXNlcwotICAvLyB0aHJlZSBiaXRz
IHRvIGNvbW11bmljYXRlIHdpcmUgdHlwZS4KLSAgaW50MzIgYSA9IDE7Ci0gIGludDMyIGJiID0g
MjY4NDM1NDU1OwotfQotCi1tZXNzYWdlIFRlc3RSZWN1cnNpdmVNZXNzYWdlIHsKLSAgVGVzdFJl
Y3Vyc2l2ZU1lc3NhZ2UgYSA9IDE7Ci0gIGludDMyIGkgPSAyOwotfQotCi0vLyBUZXN0IHRoYXQg
bXV0dWFsIHJlY3Vyc2lvbiB3b3Jrcy4KLW1lc3NhZ2UgVGVzdE11dHVhbFJlY3Vyc2lvbkEgewot
ICBUZXN0TXV0dWFsUmVjdXJzaW9uQiBiYiA9IDE7Ci19Ci0KLW1lc3NhZ2UgVGVzdE11dHVhbFJl
Y3Vyc2lvbkIgewotICBUZXN0TXV0dWFsUmVjdXJzaW9uQSBhID0gMTsKLSAgaW50MzIgb3B0aW9u
YWxfaW50MzIgPSAyOwotfQotCi0KLS8vIFRlc3QgYW4gZW51bSB0aGF0IGhhcyBtdWx0aXBsZSB2
YWx1ZXMgd2l0aCB0aGUgc2FtZSBudW1iZXIuCi1lbnVtIFRlc3RFbnVtV2l0aER1cFZhbHVlIHsK
LSAgVEVTVF9FTlVNX1dJVEhfRFVQX1ZBTFVFX1VOU1BFQ0lGSUVEID0gMDsKLSAgb3B0aW9uIGFs
bG93X2FsaWFzID0gdHJ1ZTsKLQotICBGT08xID0gMTsKLSAgQkFSMSA9IDI7Ci0gIEJBWiA9IDM7
Ci0gIEZPTzIgPSAxOwotICBCQVIyID0gMjsKLX0KLQotLy8gVGVzdCBhbiBlbnVtIHdpdGggbGFy
Z2UsIHVub3JkZXJlZCB2YWx1ZXMuCi1lbnVtIFRlc3RTcGFyc2VFbnVtIHsKLSAgVEVTVF9TUEFS
U0VfRU5VTV9VTlNQRUNJRklFRCA9IDA7Ci0gIFNQQVJTRV9BID0gMTIzOwotICBTUEFSU0VfQiA9
IDYyMzc0OwotICBTUEFSU0VfQyA9IDEyNTg5MjM0OwotICBTUEFSU0VfRCA9IC0xNTsKLSAgU1BB
UlNFX0UgPSAtNTM0NTI7Ci0gIC8vIEluIHByb3RvMywgdmFsdWUgMCBtdXN0IGJlIHRoZSBmaXJz
dCBvbmUgc3BlY2lmaWVkCi0gIC8vIFNQQVJTRV9GID0gMDsKLSAgU1BBUlNFX0cgPSAyOwotfQot
Ci0vLyBUZXN0IG1lc3NhZ2Ugd2l0aCBDYW1lbENhc2UgZmllbGQgbmFtZXMuICBUaGlzIHZpb2xh
dGVzIFByb3RvY29sIEJ1ZmZlcgotLy8gc3RhbmRhcmQgc3R5bGUuCi1tZXNzYWdlIFRlc3RDYW1l
bENhc2VGaWVsZE5hbWVzIHsKLSAgaW50MzIgUHJpbWl0aXZlRmllbGQgPSAxOwotICBzdHJpbmcg
U3RyaW5nRmllbGQgPSAyOwotICBGb3JlaWduRW51bSBFbnVtRmllbGQgPSAzOwotICBGb3JlaWdu
TWVzc2FnZSBNZXNzYWdlRmllbGQgPSA0OwotCi0gIHJlcGVhdGVkIGludDMyIFJlcGVhdGVkUHJp
bWl0aXZlRmllbGQgPSA3OwotICByZXBlYXRlZCBzdHJpbmcgUmVwZWF0ZWRTdHJpbmdGaWVsZCA9
IDg7Ci0gIHJlcGVhdGVkIEZvcmVpZ25FbnVtIFJlcGVhdGVkRW51bUZpZWxkID0gOTsKLSAgcmVw
ZWF0ZWQgRm9yZWlnbk1lc3NhZ2UgUmVwZWF0ZWRNZXNzYWdlRmllbGQgPSAxMDsKLX0KLQotCi0v
LyBXZSBsaXN0IGZpZWxkcyBvdXQgb2Ygb3JkZXIsIHRvIGVuc3VyZSB0aGF0IHdlJ3JlIHVzaW5n
IGZpZWxkIG51bWJlciBhbmQgbm90Ci0vLyBmaWVsZCBpbmRleCB0byBkZXRlcm1pbmUgc2VyaWFs
aXphdGlvbiBvcmRlci4KLW1lc3NhZ2UgVGVzdEZpZWxkT3JkZXJpbmdzIHsKLSAgc3RyaW5nIG15
X3N0cmluZyA9IDExOwotICBpbnQ2NCBteV9pbnQgPSAxOwotICBmbG9hdCBteV9mbG9hdCA9IDEw
MTsKLSAgbWVzc2FnZSBOZXN0ZWRNZXNzYWdlIHsKLSAgICBpbnQ2NCBvbyA9IDI7Ci0gICAgLy8g
VGhlIGZpZWxkIG5hbWUgImIiIGZhaWxzIHRvIGNvbXBpbGUgaW4gcHJvdG8xIGJlY2F1c2UgaXQg
Y29uZmxpY3RzIHdpdGgKLSAgICAvLyBhIGxvY2FsIHZhcmlhYmxlIG5hbWVkICJiIiBpbiBvbmUg
b2YgdGhlIGdlbmVyYXRlZCBtZXRob2RzLiAgRG9oLgotICAgIC8vIFRoaXMgZmlsZSBuZWVkcyB0
byBjb21waWxlIGluIHByb3RvMSB0byB0ZXN0IGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LgotICAg
IGludDMyIGJiID0gMTsKLSAgfQotCi0gIE5lc3RlZE1lc3NhZ2Ugc2luZ2xlX25lc3RlZF9tZXNz
YWdlICA9IDIwMDsKLX0KLQotbWVzc2FnZSBTcGFyc2VFbnVtTWVzc2FnZSB7Ci0gIFRlc3RTcGFy
c2VFbnVtIHNwYXJzZV9lbnVtID0gMTsKLX0KLQotLy8gVGVzdCBTdHJpbmcgYW5kIEJ5dGVzOiBz
dHJpbmcgaXMgZm9yIHZhbGlkIFVURi04IHN0cmluZ3MKLW1lc3NhZ2UgT25lU3RyaW5nIHsKLSAg
c3RyaW5nIGRhdGEgPSAxOwotfQotCi1tZXNzYWdlIE1vcmVTdHJpbmcgewotICByZXBlYXRlZCBz
dHJpbmcgZGF0YSA9IDE7Ci19Ci0KLW1lc3NhZ2UgT25lQnl0ZXMgewotICBieXRlcyBkYXRhID0g
MTsKLX0KLQotbWVzc2FnZSBNb3JlQnl0ZXMgewotICBieXRlcyBkYXRhID0gMTsKLX0KLQotLy8g
VGVzdCBpbnQzMiwgdWludDMyLCBpbnQ2NCwgdWludDY0LCBhbmQgYm9vbCBhcmUgYWxsIGNvbXBh
dGlibGUKLW1lc3NhZ2UgSW50MzJNZXNzYWdlIHsKLSAgaW50MzIgZGF0YSA9IDE7Ci19Ci0KLW1l
c3NhZ2UgVWludDMyTWVzc2FnZSB7Ci0gIHVpbnQzMiBkYXRhID0gMTsKLX0KLQotbWVzc2FnZSBJ
bnQ2NE1lc3NhZ2UgewotICBpbnQ2NCBkYXRhID0gMTsKLX0KLQotbWVzc2FnZSBVaW50NjRNZXNz
YWdlIHsKLSAgdWludDY0IGRhdGEgPSAxOwotfQotCi1tZXNzYWdlIEJvb2xNZXNzYWdlIHsKLSAg
Ym9vbCBkYXRhID0gMTsKLX0KLQotLy8gVGVzdCBvbmVvZnMuCi1tZXNzYWdlIFRlc3RPbmVvZiB7
Ci0gIG9uZW9mIGZvbyB7Ci0gICAgaW50MzIgZm9vX2ludCA9IDE7Ci0gICAgc3RyaW5nIGZvb19z
dHJpbmcgPSAyOwotICAgIFRlc3RBbGxUeXBlcyBmb29fbWVzc2FnZSA9IDM7Ci0gIH0KLX0KLQot
Ly8gVGVzdCBtZXNzYWdlcyBmb3IgcGFja2VkIGZpZWxkcwotCi1tZXNzYWdlIFRlc3RQYWNrZWRU
eXBlcyB7Ci0gIHJlcGVhdGVkICAgIGludDMyIHBhY2tlZF9pbnQzMiAgICA9ICA5MCBbcGFja2Vk
ID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgIGludDY0IHBhY2tlZF9pbnQ2NCAgICA9ICA5MSBbcGFj
a2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgdWludDMyIHBhY2tlZF91aW50MzIgICA9ICA5MiBb
cGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgdWludDY0IHBhY2tlZF91aW50NjQgICA9ICA5
MyBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgc2ludDMyIHBhY2tlZF9zaW50MzIgICA9
ICA5NCBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgc2ludDY0IHBhY2tlZF9zaW50NjQg
ICA9ICA5NSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICBmaXhlZDMyIHBhY2tlZF9maXhl
ZDMyICA9ICA5NiBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICBmaXhlZDY0IHBhY2tlZF9m
aXhlZDY0ICA9ICA5NyBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHBhY2tl
ZF9zZml4ZWQzMiA9ICA5OCBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IHBh
Y2tlZF9zZml4ZWQ2NCA9ICA5OSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgIGZsb2F0
IHBhY2tlZF9mbG9hdCAgICA9IDEwMCBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAgZG91
YmxlIHBhY2tlZF9kb3VibGUgICA9IDEwMSBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVkICAg
ICBib29sIHBhY2tlZF9ib29sICAgICA9IDEwMiBbcGFja2VkID0gdHJ1ZV07Ci0gIHJlcGVhdGVk
IEZvcmVpZ25FbnVtIHBhY2tlZF9lbnVtICA9IDEwMyBbcGFja2VkID0gdHJ1ZV07Ci19Ci0KLS8v
IEEgbWVzc2FnZSB3aXRoIHRoZSBzYW1lIGZpZWxkcyBhcyBUZXN0UGFja2VkVHlwZXMsIGJ1dCB3
aXRob3V0IHBhY2tpbmcuIFVzZWQKLS8vIHRvIHRlc3QgcGFja2VkIDwtPiB1bnBhY2tlZCB3aXJl
IGNvbXBhdGliaWxpdHkuCi1tZXNzYWdlIFRlc3RVbnBhY2tlZFR5cGVzIHsKLSAgcmVwZWF0ZWQg
ICAgaW50MzIgdW5wYWNrZWRfaW50MzIgICAgPSAgOTAgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVw
ZWF0ZWQgICAgaW50NjQgdW5wYWNrZWRfaW50NjQgICAgPSAgOTEgW3BhY2tlZCA9IGZhbHNlXTsK
LSAgcmVwZWF0ZWQgICB1aW50MzIgdW5wYWNrZWRfdWludDMyICAgPSAgOTIgW3BhY2tlZCA9IGZh
bHNlXTsKLSAgcmVwZWF0ZWQgICB1aW50NjQgdW5wYWNrZWRfdWludDY0ICAgPSAgOTMgW3BhY2tl
ZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICBzaW50MzIgdW5wYWNrZWRfc2ludDMyICAgPSAgOTQg
W3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICBzaW50NjQgdW5wYWNrZWRfc2ludDY0ICAg
PSAgOTUgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIgdW5wYWNrZWRfZml4
ZWQzMiAgPSAgOTYgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkNjQgdW5wYWNr
ZWRfZml4ZWQ2NCAgPSAgOTcgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkMzIg
dW5wYWNrZWRfc2ZpeGVkMzIgPSAgOTggW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgc2Zp
eGVkNjQgdW5wYWNrZWRfc2ZpeGVkNjQgPSAgOTkgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0
ZWQgICAgZmxvYXQgdW5wYWNrZWRfZmxvYXQgICAgPSAxMDAgW3BhY2tlZCA9IGZhbHNlXTsKLSAg
cmVwZWF0ZWQgICBkb3VibGUgdW5wYWNrZWRfZG91YmxlICAgPSAxMDEgW3BhY2tlZCA9IGZhbHNl
XTsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgdW5wYWNrZWRfYm9vbCAgICAgPSAxMDIgW3BhY2tlZCA9
IGZhbHNlXTsKLSAgcmVwZWF0ZWQgRm9yZWlnbkVudW0gdW5wYWNrZWRfZW51bSAgPSAxMDMgW3Bh
Y2tlZCA9IGZhbHNlXTsKLX0KLQotbWVzc2FnZSBUZXN0UmVwZWF0ZWRTY2FsYXJEaWZmZXJlbnRU
YWdTaXplcyB7Ci0gIC8vIFBhcnNpbmcgcmVwZWF0ZWQgZml4ZWQgc2l6ZSB2YWx1ZXMgdXNlZCB0
byBmYWlsLiBUaGlzIG1lc3NhZ2UgbmVlZHMgdG8gYmUKLSAgLy8gdXNlZCBpbiBvcmRlciB0byBn
ZXQgYSB0YWcgb2YgdGhlIHJpZ2h0IHNpemU7IGFsbCBvZiB0aGUgcmVwZWF0ZWQgZmllbGRzCi0g
IC8vIGluIFRlc3RBbGxUeXBlcyBkaWRuJ3QgdHJpZ2dlciB0aGUgY2hlY2suCi0gIHJlcGVhdGVk
IGZpeGVkMzIgcmVwZWF0ZWRfZml4ZWQzMiA9IDEyOwotICAvLyBDaGVjayBmb3IgYSB2YXJpbnQg
dHlwZSwganVzdCBmb3IgZ29vZCBtZWFzdXJlLgotICByZXBlYXRlZCBpbnQzMiAgIHJlcGVhdGVk
X2ludDMyICAgPSAxMzsKLQotICAvLyBUaGVzZSBoYXZlIHR3by1ieXRlIHRhZ3MuCi0gIHJlcGVh
dGVkIGZpeGVkNjQgcmVwZWF0ZWRfZml4ZWQ2NCA9IDIwNDY7Ci0gIHJlcGVhdGVkIGludDY0ICAg
cmVwZWF0ZWRfaW50NjQgICA9IDIwNDc7Ci0KLSAgLy8gVGhyZWUgYnl0ZSB0YWdzLgotICByZXBl
YXRlZCBmbG9hdCAgIHJlcGVhdGVkX2Zsb2F0ICAgPSAyNjIxNDI7Ci0gIHJlcGVhdGVkIHVpbnQ2
NCAgcmVwZWF0ZWRfdWludDY0ICA9IDI2MjE0MzsKLX0KLQotbWVzc2FnZSBUZXN0Q29tbWVudElu
amVjdGlvbk1lc3NhZ2UgewotICAvLyAqLyA8LSBUaGlzIHNob3VsZCBub3QgY2xvc2UgdGhlIGdl
bmVyYXRlZCBkb2MgY29tbWVudAotICBzdHJpbmcgYSA9IDE7Ci19Ci0KLQotLy8gVGVzdCB0aGF0
IFJQQyBzZXJ2aWNlcyB3b3JrLgotbWVzc2FnZSBGb29SZXF1ZXN0ICB7fQotbWVzc2FnZSBGb29S
ZXNwb25zZSB7fQotCi1tZXNzYWdlIEZvb0NsaWVudE1lc3NhZ2Uge30KLW1lc3NhZ2UgRm9vU2Vy
dmVyTWVzc2FnZXt9Ci0KLXNlcnZpY2UgVGVzdFNlcnZpY2UgewotICBycGMgRm9vKEZvb1JlcXVl
c3QpIHJldHVybnMgKEZvb1Jlc3BvbnNlKTsKLSAgcnBjIEJhcihCYXJSZXF1ZXN0KSByZXR1cm5z
IChCYXJSZXNwb25zZSk7Ci19Ci0KLQotbWVzc2FnZSBCYXJSZXF1ZXN0ICB7fQotbWVzc2FnZSBC
YXJSZXNwb25zZSB7fQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rf
cHJvdG8zX2FyZW5hLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3Byb3RvM19h
cmVuYS5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgzNWE2YmEzNmFlODUy
YjMyYzdlMzVmNDI3ZjYyMzhlODEwYTMyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zX2FyZW5h
LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotb3B0aW9uIGNjX2VuYWJs
ZV9hcmVuYXMgPSB0cnVlOwotCi1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBv
cnQucHJvdG8iOwotCi1wYWNrYWdlIHByb3RvM19hcmVuYV91bml0dGVzdDsKLQotLy8gVGhpcyBw
cm90byBpbmNsdWRlcyBldmVyeSB0eXBlIG9mIGZpZWxkIGluIGJvdGggc2luZ3VsYXIgYW5kIHJl
cGVhdGVkCi0vLyBmb3Jtcy4KLW1lc3NhZ2UgVGVzdEFsbFR5cGVzIHsKLSAgbWVzc2FnZSBOZXN0
ZWRNZXNzYWdlIHsKLSAgICAvLyBUaGUgZmllbGQgbmFtZSAiYiIgZmFpbHMgdG8gY29tcGlsZSBp
biBwcm90bzEgYmVjYXVzZSBpdCBjb25mbGljdHMgd2l0aAotICAgIC8vIGEgbG9jYWwgdmFyaWFi
bGUgbmFtZWQgImIiIGluIG9uZSBvZiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMuICBEb2guCi0gICAg
Ly8gVGhpcyBmaWxlIG5lZWRzIHRvIGNvbXBpbGUgaW4gcHJvdG8xIHRvIHRlc3QgYmFja3dhcmRz
LWNvbXBhdGliaWxpdHkuCi0gICAgaW50MzIgYmIgPSAxOwotICB9Ci0KLSAgZW51bSBOZXN0ZWRF
bnVtIHsKLSAgICBaRVJPID0gMDsKLSAgICBGT08gPSAxOwotICAgIEJBUiA9IDI7Ci0gICAgQkFa
ID0gMzsKLSAgICBORUcgPSAtMTsgIC8vIEludGVudGlvbmFsbHkgbmVnYXRpdmUuCi0gIH0KLQot
ICAvLyBTaW5ndWxhcgotICAgICBpbnQzMiBvcHRpb25hbF9pbnQzMiAgICA9ICAxOwotICAgICBp
bnQ2NCBvcHRpb25hbF9pbnQ2NCAgICA9ICAyOwotICAgIHVpbnQzMiBvcHRpb25hbF91aW50MzIg
ICA9ICAzOwotICAgIHVpbnQ2NCBvcHRpb25hbF91aW50NjQgICA9ICA0OwotICAgIHNpbnQzMiBv
cHRpb25hbF9zaW50MzIgICA9ICA1OwotICAgIHNpbnQ2NCBvcHRpb25hbF9zaW50NjQgICA9ICA2
OwotICAgZml4ZWQzMiBvcHRpb25hbF9maXhlZDMyICA9ICA3OwotICAgZml4ZWQ2NCBvcHRpb25h
bF9maXhlZDY0ICA9ICA4OwotICBzZml4ZWQzMiBvcHRpb25hbF9zZml4ZWQzMiA9ICA5OwotICBz
Zml4ZWQ2NCBvcHRpb25hbF9zZml4ZWQ2NCA9IDEwOwotICAgICBmbG9hdCBvcHRpb25hbF9mbG9h
dCAgICA9IDExOwotICAgIGRvdWJsZSBvcHRpb25hbF9kb3VibGUgICA9IDEyOwotICAgICAgYm9v
bCBvcHRpb25hbF9ib29sICAgICA9IDEzOwotICAgIHN0cmluZyBvcHRpb25hbF9zdHJpbmcgICA9
IDE0OwotICAgICBieXRlcyBvcHRpb25hbF9ieXRlcyAgICA9IDE1OwotCi0gIC8vIEdyb3VwcyBh
cmUgbm90IGFsbG93ZWQgaW4gcHJvdG8zLgotICAvLyBvcHRpb25hbCBncm91cCBPcHRpb25hbEdy
b3VwID0gMTYgewotICAvLyAgIG9wdGlvbmFsIGludDMyIGEgPSAxNzsKLSAgLy8gfQotCi0gIE5l
c3RlZE1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9uZXN0ZWRfbWVzc2Fn
ZSAgPSAxODsKLSAgRm9yZWlnbk1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFs
X2ZvcmVpZ25fbWVzc2FnZSA9IDE5OwotICBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0
TWVzc2FnZSBvcHRpb25hbF9pbXBvcnRfbWVzc2FnZSAgPSAyMDsKLQotICBOZXN0ZWRFbnVtICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfbmVzdGVkX2VudW0gICAgID0gMjE7Ci0g
IEZvcmVpZ25FbnVtICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9mb3JlaWduX2Vu
dW0gICAgPSAyMjsKLQotICAvLyBPbWl0dGVkIChjb21wYXJlZCB0byB1bml0dGVzdC5wcm90bykg
YmVjYXVzZSBwcm90bzIgZW51bXMgYXJlIG5vdCBhbGxvd2VkCi0gIC8vIGluc2lkZSBwcm90bzIg
bWVzc2FnZXMuCi0gIC8vCi0gIC8vIG9wdGlvbmFsIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5J
bXBvcnRFbnVtICAgIG9wdGlvbmFsX2ltcG9ydF9lbnVtICA9IDIzOwotCi0gIHN0cmluZyBvcHRp
b25hbF9zdHJpbmdfcGllY2UgPSAyNCBbY3R5cGU9U1RSSU5HX1BJRUNFXTsKLSAgc3RyaW5nIG9w
dGlvbmFsX2NvcmQgPSAyNSBbY3R5cGU9Q09SRF07Ci0KLSAgLy8gRGVmaW5lZCBpbiB1bml0dGVz
dF9pbXBvcnRfcHVibGljLnByb3RvCi0gIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5QdWJsaWNJ
bXBvcnRNZXNzYWdlCi0gICAgICBvcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2UgPSAyNjsK
LQotICBOZXN0ZWRNZXNzYWdlIG9wdGlvbmFsX2xhenlfbWVzc2FnZSA9IDI3IFtsYXp5PXRydWVd
OwotCi0gIC8vIFJlcGVhdGVkCi0gIHJlcGVhdGVkICAgIGludDMyIHJlcGVhdGVkX2ludDMyICAg
ID0gMzE7Ci0gIHJlcGVhdGVkICAgIGludDY0IHJlcGVhdGVkX2ludDY0ICAgID0gMzI7Ci0gIHJl
cGVhdGVkICAgdWludDMyIHJlcGVhdGVkX3VpbnQzMiAgID0gMzM7Ci0gIHJlcGVhdGVkICAgdWlu
dDY0IHJlcGVhdGVkX3VpbnQ2NCAgID0gMzQ7Ci0gIHJlcGVhdGVkICAgc2ludDMyIHJlcGVhdGVk
X3NpbnQzMiAgID0gMzU7Ci0gIHJlcGVhdGVkICAgc2ludDY0IHJlcGVhdGVkX3NpbnQ2NCAgID0g
MzY7Ci0gIHJlcGVhdGVkICBmaXhlZDMyIHJlcGVhdGVkX2ZpeGVkMzIgID0gMzc7Ci0gIHJlcGVh
dGVkICBmaXhlZDY0IHJlcGVhdGVkX2ZpeGVkNjQgID0gMzg7Ci0gIHJlcGVhdGVkIHNmaXhlZDMy
IHJlcGVhdGVkX3NmaXhlZDMyID0gMzk7Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IHJlcGVhdGVkX3Nm
aXhlZDY0ID0gNDA7Ci0gIHJlcGVhdGVkICAgIGZsb2F0IHJlcGVhdGVkX2Zsb2F0ICAgID0gNDE7
Ci0gIHJlcGVhdGVkICAgZG91YmxlIHJlcGVhdGVkX2RvdWJsZSAgID0gNDI7Ci0gIHJlcGVhdGVk
ICAgICBib29sIHJlcGVhdGVkX2Jvb2wgICAgID0gNDM7Ci0gIHJlcGVhdGVkICAgc3RyaW5nIHJl
cGVhdGVkX3N0cmluZyAgID0gNDQ7Ci0gIHJlcGVhdGVkICAgIGJ5dGVzIHJlcGVhdGVkX2J5dGVz
ICAgID0gNDU7Ci0KLSAgLy8gR3JvdXBzIGFyZSBub3QgYWxsb3dlZCBpbiBwcm90bzMuCi0gIC8v
IHJlcGVhdGVkIGdyb3VwIFJlcGVhdGVkR3JvdXAgPSA0NiB7Ci0gIC8vICAgb3B0aW9uYWwgaW50
MzIgYSA9IDQ3OwotICAvLyB9Ci0KLSAgcmVwZWF0ZWQgTmVzdGVkTWVzc2FnZSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGVhdGVkX25lc3RlZF9tZXNzYWdlICA9IDQ4OwotICByZXBlYXRlZCBG
b3JlaWduTWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ZWRfZm9yZWlnbl9tZXNz
YWdlID0gNDk7Ci0gIHJlcGVhdGVkIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNz
YWdlIHJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlICA9IDUwOwotCi0gIHJlcGVhdGVkIE5lc3RlZEVu
dW0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRlZF9uZXN0ZWRfZW51bSAgICAgPSA1
MTsKLSAgcmVwZWF0ZWQgRm9yZWlnbkVudW0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVh
dGVkX2ZvcmVpZ25fZW51bSAgICA9IDUyOwotCi0gIC8vIE9taXR0ZWQgKGNvbXBhcmVkIHRvIHVu
aXR0ZXN0LnByb3RvKSBiZWNhdXNlIHByb3RvMiBlbnVtcyBhcmUgbm90IGFsbG93ZWQKLSAgLy8g
aW5zaWRlIHByb3RvMiBtZXNzYWdlcy4KLSAgLy8KLSAgLy8gcmVwZWF0ZWQgcHJvdG9idWZfdW5p
dHRlc3RfaW1wb3J0LkltcG9ydEVudW0gICAgcmVwZWF0ZWRfaW1wb3J0X2VudW0gID0gNTM7Ci0K
LSAgcmVwZWF0ZWQgc3RyaW5nIHJlcGVhdGVkX3N0cmluZ19waWVjZSA9IDU0IFtjdHlwZT1TVFJJ
TkdfUElFQ0VdOwotICByZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRfY29yZCA9IDU1IFtjdHlwZT1D
T1JEXTsKLQotICByZXBlYXRlZCBOZXN0ZWRNZXNzYWdlIHJlcGVhdGVkX2xhenlfbWVzc2FnZSA9
IDU3IFtsYXp5PXRydWVdOwotCi0gIG9uZW9mIG9uZW9mX2ZpZWxkIHsKLSAgICB1aW50MzIgb25l
b2ZfdWludDMyID0gMTExOwotICAgIE5lc3RlZE1lc3NhZ2Ugb25lb2ZfbmVzdGVkX21lc3NhZ2Ug
PSAxMTI7Ci0gICAgc3RyaW5nIG9uZW9mX3N0cmluZyA9IDExMzsKLSAgICBieXRlcyBvbmVvZl9i
eXRlcyA9IDExNDsKLSAgfQotfQotCi0vLyBUZXN0IG1lc3NhZ2VzIGZvciBwYWNrZWQgZmllbGRz
Ci0KLW1lc3NhZ2UgVGVzdFBhY2tlZFR5cGVzIHsKLSAgcmVwZWF0ZWQgICAgaW50MzIgcGFja2Vk
X2ludDMyICAgID0gIDkwIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICAgaW50NjQgcGFj
a2VkX2ludDY0ICAgID0gIDkxIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICB1aW50MzIg
cGFja2VkX3VpbnQzMiAgID0gIDkyIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICB1aW50
NjQgcGFja2VkX3VpbnQ2NCAgID0gIDkzIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICBz
aW50MzIgcGFja2VkX3NpbnQzMiAgID0gIDk0IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQg
ICBzaW50NjQgcGFja2VkX3NpbnQ2NCAgID0gIDk1IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0
ZWQgIGZpeGVkMzIgcGFja2VkX2ZpeGVkMzIgID0gIDk2IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVw
ZWF0ZWQgIGZpeGVkNjQgcGFja2VkX2ZpeGVkNjQgID0gIDk3IFtwYWNrZWQgPSB0cnVlXTsKLSAg
cmVwZWF0ZWQgc2ZpeGVkMzIgcGFja2VkX3NmaXhlZDMyID0gIDk4IFtwYWNrZWQgPSB0cnVlXTsK
LSAgcmVwZWF0ZWQgc2ZpeGVkNjQgcGFja2VkX3NmaXhlZDY0ID0gIDk5IFtwYWNrZWQgPSB0cnVl
XTsKLSAgcmVwZWF0ZWQgICAgZmxvYXQgcGFja2VkX2Zsb2F0ICAgID0gMTAwIFtwYWNrZWQgPSB0
cnVlXTsKLSAgcmVwZWF0ZWQgICBkb3VibGUgcGFja2VkX2RvdWJsZSAgID0gMTAxIFtwYWNrZWQg
PSB0cnVlXTsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgcGFja2VkX2Jvb2wgICAgID0gMTAyIFtwYWNr
ZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgRm9yZWlnbkVudW0gcGFja2VkX2VudW0gID0gMTAzIFtw
YWNrZWQgPSB0cnVlXTsKLX0KLQotLy8gRXhwbGljaXRseSBzZXQgcGFja2VkIHRvIGZhbHNlCi1t
ZXNzYWdlIFRlc3RVbnBhY2tlZFR5cGVzIHsKLSAgcmVwZWF0ZWQgICAgaW50MzIgcmVwZWF0ZWRf
aW50MzIgICAgPSAgMSBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCAgICBpbnQ2NCByZXBl
YXRlZF9pbnQ2NCAgICA9ICAyIFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAgdWludDMy
IHJlcGVhdGVkX3VpbnQzMiAgID0gIDMgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICB1
aW50NjQgcmVwZWF0ZWRfdWludDY0ICAgPSAgNCBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRl
ZCAgIHNpbnQzMiByZXBlYXRlZF9zaW50MzIgICA9ICA1IFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJl
cGVhdGVkICAgc2ludDY0IHJlcGVhdGVkX3NpbnQ2NCAgID0gIDYgW3BhY2tlZCA9IGZhbHNlXTsK
LSAgcmVwZWF0ZWQgIGZpeGVkMzIgcmVwZWF0ZWRfZml4ZWQzMiAgPSAgNyBbcGFja2VkID0gZmFs
c2VdOwotICByZXBlYXRlZCAgZml4ZWQ2NCByZXBlYXRlZF9maXhlZDY0ICA9ICA4IFtwYWNrZWQg
PSBmYWxzZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHJlcGVhdGVkX3NmaXhlZDMyID0gIDkgW3Bh
Y2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkNjQgcmVwZWF0ZWRfc2ZpeGVkNjQgPSAx
MCBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCAgICBmbG9hdCByZXBlYXRlZF9mbG9hdCAg
ICA9IDExIFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAgZG91YmxlIHJlcGVhdGVkX2Rv
dWJsZSAgID0gMTIgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgcmVwZWF0
ZWRfYm9vbCAgICAgPSAxMyBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCBUZXN0QWxsVHlw
ZXMuTmVzdGVkRW51bSByZXBlYXRlZF9uZXN0ZWRfZW51bSA9IDE0IFtwYWNrZWQgPSBmYWxzZV07
Ci19Ci0KLS8vIFRoaXMgcHJvdG8gaW5jbHVkZXMgYSByZWN1c2l2ZWx5IG5lc3RlZCBtZXNzYWdl
LgotbWVzc2FnZSBOZXN0ZWRUZXN0QWxsVHlwZXMgewotICBOZXN0ZWRUZXN0QWxsVHlwZXMgY2hp
bGQgPSAxOwotICBUZXN0QWxsVHlwZXMgcGF5bG9hZCA9IDI7Ci19Ci0KLS8vIERlZmluZSB0aGVz
ZSBhZnRlciBUZXN0QWxsVHlwZXMgdG8gbWFrZSBzdXJlIHRoZSBjb21waWxlciBjYW4gaGFuZGxl
Ci0vLyB0aGF0LgotbWVzc2FnZSBGb3JlaWduTWVzc2FnZSB7Ci0gIGludDMyIGMgPSAxOwotfQot
Ci1lbnVtIEZvcmVpZ25FbnVtIHsKLSAgRk9SRUlHTl9aRVJPID0gMDsKLSAgRk9SRUlHTl9GT08g
PSA0OwotICBGT1JFSUdOX0JBUiA9IDU7Ci0gIEZPUkVJR05fQkFaID0gNjsKLX0KLQotLy8gVGVz
dEVtcHR5TWVzc2FnZSBpcyB1c2VkIHRvIHRlc3QgYmVoYXZpb3Igb2YgdW5rbm93biBmaWVsZHMu
Ci1tZXNzYWdlIFRlc3RFbXB0eU1lc3NhZ2UgewotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zX2FyZW5hX2xpdGUucHJvdG8gYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvdW5pdHRlc3RfcHJvdG8zX2FyZW5hX2xpdGUucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDVhNjBiOTBmNWM2YzdkZTljYTkxYjc3YjY1MTk1M2NkNTIzNDRiMzAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3VuaXR0ZXN0X3Byb3RvM19hcmVuYV9saXRlLnByb3RvCisrKyAvZGV2L251bGwKQEAg
LTEsMjA3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50
YXggPSAicHJvdG8zIjsKLQotb3B0aW9uIGNjX2VuYWJsZV9hcmVuYXMgPSB0cnVlOwotb3B0aW9u
IG9wdGltaXplX2ZvciA9IExJVEVfUlVOVElNRTsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYv
dW5pdHRlc3RfaW1wb3J0LnByb3RvIjsKLQotcGFja2FnZSBwcm90bzNfYXJlbmFfbGl0ZV91bml0
dGVzdDsKLQotLy8gVGhpcyBwcm90byBpbmNsdWRlcyBldmVyeSB0eXBlIG9mIGZpZWxkIGluIGJv
dGggc2luZ3VsYXIgYW5kIHJlcGVhdGVkCi0vLyBmb3Jtcy4KLW1lc3NhZ2UgVGVzdEFsbFR5cGVz
IHsKLSAgbWVzc2FnZSBOZXN0ZWRNZXNzYWdlIHsKLSAgICAvLyBUaGUgZmllbGQgbmFtZSAiYiIg
ZmFpbHMgdG8gY29tcGlsZSBpbiBwcm90bzEgYmVjYXVzZSBpdCBjb25mbGljdHMgd2l0aAotICAg
IC8vIGEgbG9jYWwgdmFyaWFibGUgbmFtZWQgImIiIGluIG9uZSBvZiB0aGUgZ2VuZXJhdGVkIG1l
dGhvZHMuICBEb2guCi0gICAgLy8gVGhpcyBmaWxlIG5lZWRzIHRvIGNvbXBpbGUgaW4gcHJvdG8x
IHRvIHRlc3QgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuCi0gICAgaW50MzIgYmIgPSAxOwotICB9
Ci0KLSAgZW51bSBOZXN0ZWRFbnVtIHsKLSAgICBaRVJPID0gMDsKLSAgICBGT08gPSAxOwotICAg
IEJBUiA9IDI7Ci0gICAgQkFaID0gMzsKLSAgICBORUcgPSAtMTsgIC8vIEludGVudGlvbmFsbHkg
bmVnYXRpdmUuCi0gIH0KLQotICAvLyBTaW5ndWxhcgotICAgICBpbnQzMiBvcHRpb25hbF9pbnQz
MiAgICA9ICAxOwotICAgICBpbnQ2NCBvcHRpb25hbF9pbnQ2NCAgICA9ICAyOwotICAgIHVpbnQz
MiBvcHRpb25hbF91aW50MzIgICA9ICAzOwotICAgIHVpbnQ2NCBvcHRpb25hbF91aW50NjQgICA9
ICA0OwotICAgIHNpbnQzMiBvcHRpb25hbF9zaW50MzIgICA9ICA1OwotICAgIHNpbnQ2NCBvcHRp
b25hbF9zaW50NjQgICA9ICA2OwotICAgZml4ZWQzMiBvcHRpb25hbF9maXhlZDMyICA9ICA3Owot
ICAgZml4ZWQ2NCBvcHRpb25hbF9maXhlZDY0ICA9ICA4OwotICBzZml4ZWQzMiBvcHRpb25hbF9z
Zml4ZWQzMiA9ICA5OwotICBzZml4ZWQ2NCBvcHRpb25hbF9zZml4ZWQ2NCA9IDEwOwotICAgICBm
bG9hdCBvcHRpb25hbF9mbG9hdCAgICA9IDExOwotICAgIGRvdWJsZSBvcHRpb25hbF9kb3VibGUg
ICA9IDEyOwotICAgICAgYm9vbCBvcHRpb25hbF9ib29sICAgICA9IDEzOwotICAgIHN0cmluZyBv
cHRpb25hbF9zdHJpbmcgICA9IDE0OwotICAgICBieXRlcyBvcHRpb25hbF9ieXRlcyAgICA9IDE1
OwotCi0gIC8vIEdyb3VwcyBhcmUgbm90IGFsbG93ZWQgaW4gcHJvdG8zLgotICAvLyBvcHRpb25h
bCBncm91cCBPcHRpb25hbEdyb3VwID0gMTYgewotICAvLyAgIG9wdGlvbmFsIGludDMyIGEgPSAx
NzsKLSAgLy8gfQotCi0gIE5lc3RlZE1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25hbF9uZXN0ZWRfbWVzc2FnZSAgPSAxODsKLSAgRm9yZWlnbk1lc3NhZ2UgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSA9IDE5OwotICBwcm90b2J1Zl91bml0
dGVzdF9pbXBvcnQuSW1wb3J0TWVzc2FnZSBvcHRpb25hbF9pbXBvcnRfbWVzc2FnZSAgPSAyMDsK
LQotICBOZXN0ZWRFbnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfbmVzdGVk
X2VudW0gICAgID0gMjE7Ci0gIEZvcmVpZ25FbnVtICAgICAgICAgICAgICAgICAgICAgICAgICBv
cHRpb25hbF9mb3JlaWduX2VudW0gICAgPSAyMjsKLQotICAvLyBPbWl0dGVkIChjb21wYXJlZCB0
byB1bml0dGVzdC5wcm90bykgYmVjYXVzZSBwcm90bzIgZW51bXMgYXJlIG5vdCBhbGxvd2VkCi0g
IC8vIGluc2lkZSBwcm90bzIgbWVzc2FnZXMuCi0gIC8vCi0gIC8vIG9wdGlvbmFsIHByb3RvYnVm
X3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVtICAgIG9wdGlvbmFsX2ltcG9ydF9lbnVtICA9IDIz
OwotCi0gIHN0cmluZyBvcHRpb25hbF9zdHJpbmdfcGllY2UgPSAyNCBbY3R5cGU9U1RSSU5HX1BJ
RUNFXTsKLSAgc3RyaW5nIG9wdGlvbmFsX2NvcmQgPSAyNSBbY3R5cGU9Q09SRF07Ci0KLSAgLy8g
RGVmaW5lZCBpbiB1bml0dGVzdF9pbXBvcnRfcHVibGljLnByb3RvCi0gIHByb3RvYnVmX3VuaXR0
ZXN0X2ltcG9ydC5QdWJsaWNJbXBvcnRNZXNzYWdlCi0gICAgICBvcHRpb25hbF9wdWJsaWNfaW1w
b3J0X21lc3NhZ2UgPSAyNjsKLQotICBOZXN0ZWRNZXNzYWdlIG9wdGlvbmFsX2xhenlfbWVzc2Fn
ZSA9IDI3IFtsYXp5PXRydWVdOwotCi0gIC8vIFJlcGVhdGVkCi0gIHJlcGVhdGVkICAgIGludDMy
IHJlcGVhdGVkX2ludDMyICAgID0gMzE7Ci0gIHJlcGVhdGVkICAgIGludDY0IHJlcGVhdGVkX2lu
dDY0ICAgID0gMzI7Ci0gIHJlcGVhdGVkICAgdWludDMyIHJlcGVhdGVkX3VpbnQzMiAgID0gMzM7
Ci0gIHJlcGVhdGVkICAgdWludDY0IHJlcGVhdGVkX3VpbnQ2NCAgID0gMzQ7Ci0gIHJlcGVhdGVk
ICAgc2ludDMyIHJlcGVhdGVkX3NpbnQzMiAgID0gMzU7Ci0gIHJlcGVhdGVkICAgc2ludDY0IHJl
cGVhdGVkX3NpbnQ2NCAgID0gMzY7Ci0gIHJlcGVhdGVkICBmaXhlZDMyIHJlcGVhdGVkX2ZpeGVk
MzIgID0gMzc7Ci0gIHJlcGVhdGVkICBmaXhlZDY0IHJlcGVhdGVkX2ZpeGVkNjQgID0gMzg7Ci0g
IHJlcGVhdGVkIHNmaXhlZDMyIHJlcGVhdGVkX3NmaXhlZDMyID0gMzk7Ci0gIHJlcGVhdGVkIHNm
aXhlZDY0IHJlcGVhdGVkX3NmaXhlZDY0ID0gNDA7Ci0gIHJlcGVhdGVkICAgIGZsb2F0IHJlcGVh
dGVkX2Zsb2F0ICAgID0gNDE7Ci0gIHJlcGVhdGVkICAgZG91YmxlIHJlcGVhdGVkX2RvdWJsZSAg
ID0gNDI7Ci0gIHJlcGVhdGVkICAgICBib29sIHJlcGVhdGVkX2Jvb2wgICAgID0gNDM7Ci0gIHJl
cGVhdGVkICAgc3RyaW5nIHJlcGVhdGVkX3N0cmluZyAgID0gNDQ7Ci0gIHJlcGVhdGVkICAgIGJ5
dGVzIHJlcGVhdGVkX2J5dGVzICAgID0gNDU7Ci0KLSAgLy8gR3JvdXBzIGFyZSBub3QgYWxsb3dl
ZCBpbiBwcm90bzMuCi0gIC8vIHJlcGVhdGVkIGdyb3VwIFJlcGVhdGVkR3JvdXAgPSA0NiB7Ci0g
IC8vICAgb3B0aW9uYWwgaW50MzIgYSA9IDQ3OwotICAvLyB9Ci0KLSAgcmVwZWF0ZWQgTmVzdGVk
TWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkX25lc3RlZF9tZXNzYWdlICA9
IDQ4OwotICByZXBlYXRlZCBGb3JlaWduTWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgcmVw
ZWF0ZWRfZm9yZWlnbl9tZXNzYWdlID0gNDk7Ci0gIHJlcGVhdGVkIHByb3RvYnVmX3VuaXR0ZXN0
X2ltcG9ydC5JbXBvcnRNZXNzYWdlIHJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlICA9IDUwOwotCi0g
IHJlcGVhdGVkIE5lc3RlZEVudW0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRlZF9u
ZXN0ZWRfZW51bSAgICAgPSA1MTsKLSAgcmVwZWF0ZWQgRm9yZWlnbkVudW0gICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGVhdGVkX2ZvcmVpZ25fZW51bSAgICA9IDUyOwotCi0gIC8vIE9taXR0
ZWQgKGNvbXBhcmVkIHRvIHVuaXR0ZXN0LnByb3RvKSBiZWNhdXNlIHByb3RvMiBlbnVtcyBhcmUg
bm90IGFsbG93ZWQKLSAgLy8gaW5zaWRlIHByb3RvMiBtZXNzYWdlcy4KLSAgLy8KLSAgLy8gcmVw
ZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW0gICAgcmVwZWF0ZWRfaW1w
b3J0X2VudW0gID0gNTM7Ci0KLSAgcmVwZWF0ZWQgc3RyaW5nIHJlcGVhdGVkX3N0cmluZ19waWVj
ZSA9IDU0IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICByZXBlYXRlZCBzdHJpbmcgcmVwZWF0ZWRf
Y29yZCA9IDU1IFtjdHlwZT1DT1JEXTsKLQotICByZXBlYXRlZCBOZXN0ZWRNZXNzYWdlIHJlcGVh
dGVkX2xhenlfbWVzc2FnZSA9IDU3IFtsYXp5PXRydWVdOwotCi0gIG9uZW9mIG9uZW9mX2ZpZWxk
IHsKLSAgICB1aW50MzIgb25lb2ZfdWludDMyID0gMTExOwotICAgIE5lc3RlZE1lc3NhZ2Ugb25l
b2ZfbmVzdGVkX21lc3NhZ2UgPSAxMTI7Ci0gICAgc3RyaW5nIG9uZW9mX3N0cmluZyA9IDExMzsK
LSAgICBieXRlcyBvbmVvZl9ieXRlcyA9IDExNDsKLSAgfQotfQotCi0vLyBUZXN0IG1lc3NhZ2Vz
IGZvciBwYWNrZWQgZmllbGRzCi0KLW1lc3NhZ2UgVGVzdFBhY2tlZFR5cGVzIHsKLSAgcmVwZWF0
ZWQgICAgaW50MzIgcGFja2VkX2ludDMyICAgID0gIDkwIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVw
ZWF0ZWQgICAgaW50NjQgcGFja2VkX2ludDY0ICAgID0gIDkxIFtwYWNrZWQgPSB0cnVlXTsKLSAg
cmVwZWF0ZWQgICB1aW50MzIgcGFja2VkX3VpbnQzMiAgID0gIDkyIFtwYWNrZWQgPSB0cnVlXTsK
LSAgcmVwZWF0ZWQgICB1aW50NjQgcGFja2VkX3VpbnQ2NCAgID0gIDkzIFtwYWNrZWQgPSB0cnVl
XTsKLSAgcmVwZWF0ZWQgICBzaW50MzIgcGFja2VkX3NpbnQzMiAgID0gIDk0IFtwYWNrZWQgPSB0
cnVlXTsKLSAgcmVwZWF0ZWQgICBzaW50NjQgcGFja2VkX3NpbnQ2NCAgID0gIDk1IFtwYWNrZWQg
PSB0cnVlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIgcGFja2VkX2ZpeGVkMzIgID0gIDk2IFtwYWNr
ZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkNjQgcGFja2VkX2ZpeGVkNjQgID0gIDk3IFtw
YWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkMzIgcGFja2VkX3NmaXhlZDMyID0gIDk4
IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkNjQgcGFja2VkX3NmaXhlZDY0ID0g
IDk5IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICAgZmxvYXQgcGFja2VkX2Zsb2F0ICAg
ID0gMTAwIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICBkb3VibGUgcGFja2VkX2RvdWJs
ZSAgID0gMTAxIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgcGFja2VkX2Jv
b2wgICAgID0gMTAyIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgRm9yZWlnbkVudW0gcGFj
a2VkX2VudW0gID0gMTAzIFtwYWNrZWQgPSB0cnVlXTsKLX0KLQotLy8gRXhwbGljaXRseSBzZXQg
cGFja2VkIHRvIGZhbHNlCi1tZXNzYWdlIFRlc3RVbnBhY2tlZFR5cGVzIHsKLSAgcmVwZWF0ZWQg
ICAgaW50MzIgcmVwZWF0ZWRfaW50MzIgICAgPSAgMSBbcGFja2VkID0gZmFsc2VdOwotICByZXBl
YXRlZCAgICBpbnQ2NCByZXBlYXRlZF9pbnQ2NCAgICA9ICAyIFtwYWNrZWQgPSBmYWxzZV07Ci0g
IHJlcGVhdGVkICAgdWludDMyIHJlcGVhdGVkX3VpbnQzMiAgID0gIDMgW3BhY2tlZCA9IGZhbHNl
XTsKLSAgcmVwZWF0ZWQgICB1aW50NjQgcmVwZWF0ZWRfdWludDY0ICAgPSAgNCBbcGFja2VkID0g
ZmFsc2VdOwotICByZXBlYXRlZCAgIHNpbnQzMiByZXBlYXRlZF9zaW50MzIgICA9ICA1IFtwYWNr
ZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAgc2ludDY0IHJlcGVhdGVkX3NpbnQ2NCAgID0gIDYg
W3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIgcmVwZWF0ZWRfZml4ZWQzMiAg
PSAgNyBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCAgZml4ZWQ2NCByZXBlYXRlZF9maXhl
ZDY0ICA9ICA4IFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHJlcGVhdGVk
X3NmaXhlZDMyID0gIDkgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkNjQgcmVw
ZWF0ZWRfc2ZpeGVkNjQgPSAxMCBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCAgICBmbG9h
dCByZXBlYXRlZF9mbG9hdCAgICA9IDExIFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAg
ZG91YmxlIHJlcGVhdGVkX2RvdWJsZSAgID0gMTIgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0
ZWQgICAgIGJvb2wgcmVwZWF0ZWRfYm9vbCAgICAgPSAxMyBbcGFja2VkID0gZmFsc2VdOwotICBy
ZXBlYXRlZCBUZXN0QWxsVHlwZXMuTmVzdGVkRW51bSByZXBlYXRlZF9uZXN0ZWRfZW51bSA9IDE0
IFtwYWNrZWQgPSBmYWxzZV07Ci19Ci0KLS8vIFRoaXMgcHJvdG8gaW5jbHVkZXMgYSByZWN1c2l2
ZWx5IG5lc3RlZCBtZXNzYWdlLgotbWVzc2FnZSBOZXN0ZWRUZXN0QWxsVHlwZXMgewotICBOZXN0
ZWRUZXN0QWxsVHlwZXMgY2hpbGQgPSAxOwotICBUZXN0QWxsVHlwZXMgcGF5bG9hZCA9IDI7Ci19
Ci0KLS8vIERlZmluZSB0aGVzZSBhZnRlciBUZXN0QWxsVHlwZXMgdG8gbWFrZSBzdXJlIHRoZSBj
b21waWxlciBjYW4gaGFuZGxlCi0vLyB0aGF0LgotbWVzc2FnZSBGb3JlaWduTWVzc2FnZSB7Ci0g
IGludDMyIGMgPSAxOwotfQotCi1lbnVtIEZvcmVpZ25FbnVtIHsKLSAgRk9SRUlHTl9aRVJPID0g
MDsKLSAgRk9SRUlHTl9GT08gPSA0OwotICBGT1JFSUdOX0JBUiA9IDU7Ci0gIEZPUkVJR05fQkFa
ID0gNjsKLX0KLQotLy8gVGVzdEVtcHR5TWVzc2FnZSBpcyB1c2VkIHRvIHRlc3QgYmVoYXZpb3Ig
b2YgdW5rbm93biBmaWVsZHMuCi1tZXNzYWdlIFRlc3RFbXB0eU1lc3NhZ2UgewotfQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zX2xpdGUucHJvdG8gYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zX2xpdGUucHJvdG8KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDg3NGFkZTZjMGU4ZGE2YTBiYTNlMmRmMTM3OGU5NzRmNWEyOWRm
NTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3Byb3RvM19saXRlLnByb3RvCisrKyAvZGV2L251bGwKQEAg
LTEsMjA2ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVy
Y2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZm
ZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50
YXggPSAicHJvdG8zIjsKLQotb3B0aW9uIG9wdGltaXplX2ZvciA9IExJVEVfUlVOVElNRTsKLQot
aW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0LnByb3RvIjsKLQotcGFja2Fn
ZSBwcm90bzNfbGl0ZV91bml0dGVzdDsKLQotLy8gVGhpcyBwcm90byBpbmNsdWRlcyBldmVyeSB0
eXBlIG9mIGZpZWxkIGluIGJvdGggc2luZ3VsYXIgYW5kIHJlcGVhdGVkCi0vLyBmb3Jtcy4KLW1l
c3NhZ2UgVGVzdEFsbFR5cGVzIHsKLSAgbWVzc2FnZSBOZXN0ZWRNZXNzYWdlIHsKLSAgICAvLyBU
aGUgZmllbGQgbmFtZSAiYiIgZmFpbHMgdG8gY29tcGlsZSBpbiBwcm90bzEgYmVjYXVzZSBpdCBj
b25mbGljdHMgd2l0aAotICAgIC8vIGEgbG9jYWwgdmFyaWFibGUgbmFtZWQgImIiIGluIG9uZSBv
ZiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMuICBEb2guCi0gICAgLy8gVGhpcyBmaWxlIG5lZWRzIHRv
IGNvbXBpbGUgaW4gcHJvdG8xIHRvIHRlc3QgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuCi0gICAg
aW50MzIgYmIgPSAxOwotICB9Ci0KLSAgZW51bSBOZXN0ZWRFbnVtIHsKLSAgICBaRVJPID0gMDsK
LSAgICBGT08gPSAxOwotICAgIEJBUiA9IDI7Ci0gICAgQkFaID0gMzsKLSAgICBORUcgPSAtMTsg
IC8vIEludGVudGlvbmFsbHkgbmVnYXRpdmUuCi0gIH0KLQotICAvLyBTaW5ndWxhcgotICAgICBp
bnQzMiBvcHRpb25hbF9pbnQzMiAgICA9ICAxOwotICAgICBpbnQ2NCBvcHRpb25hbF9pbnQ2NCAg
ICA9ICAyOwotICAgIHVpbnQzMiBvcHRpb25hbF91aW50MzIgICA9ICAzOwotICAgIHVpbnQ2NCBv
cHRpb25hbF91aW50NjQgICA9ICA0OwotICAgIHNpbnQzMiBvcHRpb25hbF9zaW50MzIgICA9ICA1
OwotICAgIHNpbnQ2NCBvcHRpb25hbF9zaW50NjQgICA9ICA2OwotICAgZml4ZWQzMiBvcHRpb25h
bF9maXhlZDMyICA9ICA3OwotICAgZml4ZWQ2NCBvcHRpb25hbF9maXhlZDY0ICA9ICA4OwotICBz
Zml4ZWQzMiBvcHRpb25hbF9zZml4ZWQzMiA9ICA5OwotICBzZml4ZWQ2NCBvcHRpb25hbF9zZml4
ZWQ2NCA9IDEwOwotICAgICBmbG9hdCBvcHRpb25hbF9mbG9hdCAgICA9IDExOwotICAgIGRvdWJs
ZSBvcHRpb25hbF9kb3VibGUgICA9IDEyOwotICAgICAgYm9vbCBvcHRpb25hbF9ib29sICAgICA9
IDEzOwotICAgIHN0cmluZyBvcHRpb25hbF9zdHJpbmcgICA9IDE0OwotICAgICBieXRlcyBvcHRp
b25hbF9ieXRlcyAgICA9IDE1OwotCi0gIC8vIEdyb3VwcyBhcmUgbm90IGFsbG93ZWQgaW4gcHJv
dG8zLgotICAvLyBvcHRpb25hbCBncm91cCBPcHRpb25hbEdyb3VwID0gMTYgewotICAvLyAgIG9w
dGlvbmFsIGludDMyIGEgPSAxNzsKLSAgLy8gfQotCi0gIE5lc3RlZE1lc3NhZ2UgICAgICAgICAg
ICAgICAgICAgICAgICBvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSAgPSAxODsKLSAgRm9yZWlnbk1l
c3NhZ2UgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSA9IDE5
OwotICBwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0TWVzc2FnZSBvcHRpb25hbF9pbXBv
cnRfbWVzc2FnZSAgPSAyMDsKLQotICBOZXN0ZWRFbnVtICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3B0aW9uYWxfbmVzdGVkX2VudW0gICAgID0gMjE7Ci0gIEZvcmVpZ25FbnVtICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25hbF9mb3JlaWduX2VudW0gICAgPSAyMjsKLQotICAvLyBP
bWl0dGVkIChjb21wYXJlZCB0byB1bml0dGVzdC5wcm90bykgYmVjYXVzZSBwcm90bzIgZW51bXMg
YXJlIG5vdCBhbGxvd2VkCi0gIC8vIGluc2lkZSBwcm90bzIgbWVzc2FnZXMuCi0gIC8vCi0gIC8v
IG9wdGlvbmFsIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVtICAgIG9wdGlvbmFs
X2ltcG9ydF9lbnVtICA9IDIzOwotCi0gIHN0cmluZyBvcHRpb25hbF9zdHJpbmdfcGllY2UgPSAy
NCBbY3R5cGU9U1RSSU5HX1BJRUNFXTsKLSAgc3RyaW5nIG9wdGlvbmFsX2NvcmQgPSAyNSBbY3R5
cGU9Q09SRF07Ci0KLSAgLy8gRGVmaW5lZCBpbiB1bml0dGVzdF9pbXBvcnRfcHVibGljLnByb3Rv
Ci0gIHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5QdWJsaWNJbXBvcnRNZXNzYWdlCi0gICAgICBv
cHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2UgPSAyNjsKLQotICBOZXN0ZWRNZXNzYWdlIG9w
dGlvbmFsX2xhenlfbWVzc2FnZSA9IDI3IFtsYXp5PXRydWVdOwotCi0gIC8vIFJlcGVhdGVkCi0g
IHJlcGVhdGVkICAgIGludDMyIHJlcGVhdGVkX2ludDMyICAgID0gMzE7Ci0gIHJlcGVhdGVkICAg
IGludDY0IHJlcGVhdGVkX2ludDY0ICAgID0gMzI7Ci0gIHJlcGVhdGVkICAgdWludDMyIHJlcGVh
dGVkX3VpbnQzMiAgID0gMzM7Ci0gIHJlcGVhdGVkICAgdWludDY0IHJlcGVhdGVkX3VpbnQ2NCAg
ID0gMzQ7Ci0gIHJlcGVhdGVkICAgc2ludDMyIHJlcGVhdGVkX3NpbnQzMiAgID0gMzU7Ci0gIHJl
cGVhdGVkICAgc2ludDY0IHJlcGVhdGVkX3NpbnQ2NCAgID0gMzY7Ci0gIHJlcGVhdGVkICBmaXhl
ZDMyIHJlcGVhdGVkX2ZpeGVkMzIgID0gMzc7Ci0gIHJlcGVhdGVkICBmaXhlZDY0IHJlcGVhdGVk
X2ZpeGVkNjQgID0gMzg7Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHJlcGVhdGVkX3NmaXhlZDMyID0g
Mzk7Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IHJlcGVhdGVkX3NmaXhlZDY0ID0gNDA7Ci0gIHJlcGVh
dGVkICAgIGZsb2F0IHJlcGVhdGVkX2Zsb2F0ICAgID0gNDE7Ci0gIHJlcGVhdGVkICAgZG91Ymxl
IHJlcGVhdGVkX2RvdWJsZSAgID0gNDI7Ci0gIHJlcGVhdGVkICAgICBib29sIHJlcGVhdGVkX2Jv
b2wgICAgID0gNDM7Ci0gIHJlcGVhdGVkICAgc3RyaW5nIHJlcGVhdGVkX3N0cmluZyAgID0gNDQ7
Ci0gIHJlcGVhdGVkICAgIGJ5dGVzIHJlcGVhdGVkX2J5dGVzICAgID0gNDU7Ci0KLSAgLy8gR3Jv
dXBzIGFyZSBub3QgYWxsb3dlZCBpbiBwcm90bzMuCi0gIC8vIHJlcGVhdGVkIGdyb3VwIFJlcGVh
dGVkR3JvdXAgPSA0NiB7Ci0gIC8vICAgb3B0aW9uYWwgaW50MzIgYSA9IDQ3OwotICAvLyB9Ci0K
LSAgcmVwZWF0ZWQgTmVzdGVkTWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVk
X25lc3RlZF9tZXNzYWdlICA9IDQ4OwotICByZXBlYXRlZCBGb3JlaWduTWVzc2FnZSAgICAgICAg
ICAgICAgICAgICAgICAgcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlID0gNDk7Ci0gIHJlcGVhdGVk
IHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNzYWdlIHJlcGVhdGVkX2ltcG9ydF9t
ZXNzYWdlICA9IDUwOwotCi0gIHJlcGVhdGVkIE5lc3RlZEVudW0gICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBlYXRlZF9uZXN0ZWRfZW51bSAgICAgPSA1MTsKLSAgcmVwZWF0ZWQgRm9yZWln
bkVudW0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkX2ZvcmVpZ25fZW51bSAgICA9
IDUyOwotCi0gIC8vIE9taXR0ZWQgKGNvbXBhcmVkIHRvIHVuaXR0ZXN0LnByb3RvKSBiZWNhdXNl
IHByb3RvMiBlbnVtcyBhcmUgbm90IGFsbG93ZWQKLSAgLy8gaW5zaWRlIHByb3RvMiBtZXNzYWdl
cy4KLSAgLy8KLSAgLy8gcmVwZWF0ZWQgcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVu
dW0gICAgcmVwZWF0ZWRfaW1wb3J0X2VudW0gID0gNTM7Ci0KLSAgcmVwZWF0ZWQgc3RyaW5nIHJl
cGVhdGVkX3N0cmluZ19waWVjZSA9IDU0IFtjdHlwZT1TVFJJTkdfUElFQ0VdOwotICByZXBlYXRl
ZCBzdHJpbmcgcmVwZWF0ZWRfY29yZCA9IDU1IFtjdHlwZT1DT1JEXTsKLQotICByZXBlYXRlZCBO
ZXN0ZWRNZXNzYWdlIHJlcGVhdGVkX2xhenlfbWVzc2FnZSA9IDU3IFtsYXp5PXRydWVdOwotCi0g
IG9uZW9mIG9uZW9mX2ZpZWxkIHsKLSAgICB1aW50MzIgb25lb2ZfdWludDMyID0gMTExOwotICAg
IE5lc3RlZE1lc3NhZ2Ugb25lb2ZfbmVzdGVkX21lc3NhZ2UgPSAxMTI7Ci0gICAgc3RyaW5nIG9u
ZW9mX3N0cmluZyA9IDExMzsKLSAgICBieXRlcyBvbmVvZl9ieXRlcyA9IDExNDsKLSAgfQotfQot
Ci0vLyBUZXN0IG1lc3NhZ2VzIGZvciBwYWNrZWQgZmllbGRzCi0KLW1lc3NhZ2UgVGVzdFBhY2tl
ZFR5cGVzIHsKLSAgcmVwZWF0ZWQgICAgaW50MzIgcGFja2VkX2ludDMyICAgID0gIDkwIFtwYWNr
ZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICAgaW50NjQgcGFja2VkX2ludDY0ICAgID0gIDkxIFtw
YWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICB1aW50MzIgcGFja2VkX3VpbnQzMiAgID0gIDky
IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICB1aW50NjQgcGFja2VkX3VpbnQ2NCAgID0g
IDkzIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICBzaW50MzIgcGFja2VkX3NpbnQzMiAg
ID0gIDk0IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICBzaW50NjQgcGFja2VkX3NpbnQ2
NCAgID0gIDk1IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIgcGFja2VkX2Zp
eGVkMzIgID0gIDk2IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkNjQgcGFja2Vk
X2ZpeGVkNjQgID0gIDk3IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkMzIgcGFj
a2VkX3NmaXhlZDMyID0gIDk4IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgc2ZpeGVkNjQg
cGFja2VkX3NmaXhlZDY0ID0gIDk5IFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICAgZmxv
YXQgcGFja2VkX2Zsb2F0ICAgID0gMTAwIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQgICBk
b3VibGUgcGFja2VkX2RvdWJsZSAgID0gMTAxIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0ZWQg
ICAgIGJvb2wgcGFja2VkX2Jvb2wgICAgID0gMTAyIFtwYWNrZWQgPSB0cnVlXTsKLSAgcmVwZWF0
ZWQgRm9yZWlnbkVudW0gcGFja2VkX2VudW0gID0gMTAzIFtwYWNrZWQgPSB0cnVlXTsKLX0KLQot
Ly8gRXhwbGljaXRseSBzZXQgcGFja2VkIHRvIGZhbHNlCi1tZXNzYWdlIFRlc3RVbnBhY2tlZFR5
cGVzIHsKLSAgcmVwZWF0ZWQgICAgaW50MzIgcmVwZWF0ZWRfaW50MzIgICAgPSAgMSBbcGFja2Vk
ID0gZmFsc2VdOwotICByZXBlYXRlZCAgICBpbnQ2NCByZXBlYXRlZF9pbnQ2NCAgICA9ICAyIFtw
YWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAgdWludDMyIHJlcGVhdGVkX3VpbnQzMiAgID0g
IDMgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICB1aW50NjQgcmVwZWF0ZWRfdWludDY0
ICAgPSAgNCBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCAgIHNpbnQzMiByZXBlYXRlZF9z
aW50MzIgICA9ICA1IFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVkICAgc2ludDY0IHJlcGVh
dGVkX3NpbnQ2NCAgID0gIDYgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVwZWF0ZWQgIGZpeGVkMzIg
cmVwZWF0ZWRfZml4ZWQzMiAgPSAgNyBbcGFja2VkID0gZmFsc2VdOwotICByZXBlYXRlZCAgZml4
ZWQ2NCByZXBlYXRlZF9maXhlZDY0ICA9ICA4IFtwYWNrZWQgPSBmYWxzZV07Ci0gIHJlcGVhdGVk
IHNmaXhlZDMyIHJlcGVhdGVkX3NmaXhlZDMyID0gIDkgW3BhY2tlZCA9IGZhbHNlXTsKLSAgcmVw
ZWF0ZWQgc2ZpeGVkNjQgcmVwZWF0ZWRfc2ZpeGVkNjQgPSAxMCBbcGFja2VkID0gZmFsc2VdOwot
ICByZXBlYXRlZCAgICBmbG9hdCByZXBlYXRlZF9mbG9hdCAgICA9IDExIFtwYWNrZWQgPSBmYWxz
ZV07Ci0gIHJlcGVhdGVkICAgZG91YmxlIHJlcGVhdGVkX2RvdWJsZSAgID0gMTIgW3BhY2tlZCA9
IGZhbHNlXTsKLSAgcmVwZWF0ZWQgICAgIGJvb2wgcmVwZWF0ZWRfYm9vbCAgICAgPSAxMyBbcGFj
a2VkID0gZmFsc2VdOwotICByZXBlYXRlZCBUZXN0QWxsVHlwZXMuTmVzdGVkRW51bSByZXBlYXRl
ZF9uZXN0ZWRfZW51bSA9IDE0IFtwYWNrZWQgPSBmYWxzZV07Ci19Ci0KLS8vIFRoaXMgcHJvdG8g
aW5jbHVkZXMgYSByZWN1c2l2ZWx5IG5lc3RlZCBtZXNzYWdlLgotbWVzc2FnZSBOZXN0ZWRUZXN0
QWxsVHlwZXMgewotICBOZXN0ZWRUZXN0QWxsVHlwZXMgY2hpbGQgPSAxOwotICBUZXN0QWxsVHlw
ZXMgcGF5bG9hZCA9IDI7Ci19Ci0KLS8vIERlZmluZSB0aGVzZSBhZnRlciBUZXN0QWxsVHlwZXMg
dG8gbWFrZSBzdXJlIHRoZSBjb21waWxlciBjYW4gaGFuZGxlCi0vLyB0aGF0LgotbWVzc2FnZSBG
b3JlaWduTWVzc2FnZSB7Ci0gIGludDMyIGMgPSAxOwotfQotCi1lbnVtIEZvcmVpZ25FbnVtIHsK
LSAgRk9SRUlHTl9aRVJPID0gMDsKLSAgRk9SRUlHTl9GT08gPSA0OwotICBGT1JFSUdOX0JBUiA9
IDU7Ci0gIEZPUkVJR05fQkFaID0gNjsKLX0KLQotLy8gVGVzdEVtcHR5TWVzc2FnZSBpcyB1c2Vk
IHRvIHRlc3QgYmVoYXZpb3Igb2YgdW5rbm93biBmaWVsZHMuCi1tZXNzYWdlIFRlc3RFbXB0eU1l
c3NhZ2UgewotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfd2Vs
bF9rbm93bl90eXBlcy5wcm90byBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF93ZWxsX2tu
b3duX3R5cGVzLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTA3NTI0NDBi
Mjg2NGU0ZmI4NGU5YmM5ZjNlM2ZiNzZjMzBlODg4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91bml0dGVzdF93ZWxsX2tu
b3duX3R5cGVzLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLXN5bnRheCA9
ICJwcm90bzMiOwotCi1wYWNrYWdlIHByb3RvYnVmX3VuaXR0ZXN0OwotCi1vcHRpb24gY3NoYXJw
X25hbWVzcGFjZSA9ICJHb29nbGUuUHJvdG9idWYuVGVzdFByb3RvcyI7Ci1vcHRpb24gamF2YV9t
dWx0aXBsZV9maWxlcyA9IHRydWU7Ci1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUu
cHJvdG9idWYudGVzdCI7Ci0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90byI7Ci1p
bXBvcnQgImdvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8iOwotaW1wb3J0ICJnb29nbGUvcHJvdG9i
dWYvZHVyYXRpb24ucHJvdG8iOwotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG8i
OwotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90byI7Ci1pbXBvcnQgImdv
b2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wcm90byI7Ci1pbXBvcnQgImdvb2dsZS9wcm90
b2J1Zi9zdHJ1Y3QucHJvdG8iOwotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnBy
b3RvIjsKLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL3R5cGUucHJvdG8iOwotaW1wb3J0ICJnb29n
bGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8iOwotCi0vLyBUZXN0IHRoYXQgd2UgY2FuIGluY2x1
ZGUgYWxsIHdlbGwta25vd24gdHlwZXMuCi0vLyBFYWNoIHdyYXBwZXIgdHlwZSBpcyBpbmNsdWRl
ZCBzZXBhcmF0ZWx5LCBhcyBsYW5ndWFnZXMKLS8vIG1hcCBoYW5kbGUgZGlmZmVyZW50IHdyYXBw
ZXJzIGluIGRpZmZlcmVudCB3YXlzLgotbWVzc2FnZSBUZXN0V2VsbEtub3duVHlwZXMgewotICBn
b29nbGUucHJvdG9idWYuQW55IGFueV9maWVsZCA9IDE7Ci0gIGdvb2dsZS5wcm90b2J1Zi5BcGkg
YXBpX2ZpZWxkID0gMjsKLSAgZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIGR1cmF0aW9uX2ZpZWxk
ID0gMzsKLSAgZ29vZ2xlLnByb3RvYnVmLkVtcHR5IGVtcHR5X2ZpZWxkID0gNDsKLSAgZ29vZ2xl
LnByb3RvYnVmLkZpZWxkTWFzayBmaWVsZF9tYXNrX2ZpZWxkID0gNTsKLSAgZ29vZ2xlLnByb3Rv
YnVmLlNvdXJjZUNvbnRleHQgc291cmNlX2NvbnRleHRfZmllbGQgPSA2OwotICBnb29nbGUucHJv
dG9idWYuU3RydWN0IHN0cnVjdF9maWVsZCA9IDc7Ci0gIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3Rh
bXAgdGltZXN0YW1wX2ZpZWxkID0gODsKLSAgZ29vZ2xlLnByb3RvYnVmLlR5cGUgdHlwZV9maWVs
ZCA9IDk7Ci0gIGdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZSBkb3VibGVfZmllbGQgPSAxMDsK
LSAgZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWUgZmxvYXRfZmllbGQgPSAxMTsKLSAgZ29vZ2xl
LnByb3RvYnVmLkludDY0VmFsdWUgaW50NjRfZmllbGQgPSAxMjsKLSAgZ29vZ2xlLnByb3RvYnVm
LlVJbnQ2NFZhbHVlIHVpbnQ2NF9maWVsZCA9IDEzOwotICBnb29nbGUucHJvdG9idWYuSW50MzJW
YWx1ZSBpbnQzMl9maWVsZCA9IDE0OwotICBnb29nbGUucHJvdG9idWYuVUludDMyVmFsdWUgdWlu
dDMyX2ZpZWxkID0gMTU7Ci0gIGdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUgYm9vbF9maWVsZCA9
IDE2OwotICBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgc3RyaW5nX2ZpZWxkID0gMTc7Ci0g
IGdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlIGJ5dGVzX2ZpZWxkID0gMTg7Ci0gIC8vIFBhcnQg
b2Ygc3RydWN0LCBidXQgdXNlZnVsIHRvIGJlIGFibGUgdG8gdGVzdCBzZXBhcmF0ZWx5Ci0gIGdv
b2dsZS5wcm90b2J1Zi5WYWx1ZSB2YWx1ZV9maWVsZCA9IDE5OwotfQotCi0vLyBBIHJlcGVhdGVk
IGZpZWxkIGZvciBlYWNoIHdlbGwta25vd24gdHlwZS4KLW1lc3NhZ2UgUmVwZWF0ZWRXZWxsS25v
d25UeXBlcyB7Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5BbnkgYW55X2ZpZWxkID0gMTsK
LSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLkFwaSBhcGlfZmllbGQgPSAyOwotICByZXBlYXRl
ZCBnb29nbGUucHJvdG9idWYuRHVyYXRpb24gZHVyYXRpb25fZmllbGQgPSAzOwotICByZXBlYXRl
ZCBnb29nbGUucHJvdG9idWYuRW1wdHkgZW1wdHlfZmllbGQgPSA0OwotICByZXBlYXRlZCBnb29n
bGUucHJvdG9idWYuRmllbGRNYXNrIGZpZWxkX21hc2tfZmllbGQgPSA1OwotICByZXBlYXRlZCBn
b29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dCBzb3VyY2VfY29udGV4dF9maWVsZCA9IDY7Ci0g
IHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qgc3RydWN0X2ZpZWxkID0gNzsKLSAgcmVw
ZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCB0aW1lc3RhbXBfZmllbGQgPSA4OwotICBy
ZXBlYXRlZCBnb29nbGUucHJvdG9idWYuVHlwZSB0eXBlX2ZpZWxkID0gOTsKLSAgLy8gVGhlc2Ug
ZG9uJ3QgYWN0dWFsbHkgbWFrZSBhIGxvdCBvZiBzZW5zZSwgYnV0IHRoZXkncmUgbm90IHByb2hp
Yml0ZWQuLi4KLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlIGRvdWJsZV9m
aWVsZCA9IDEwOwotICByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZSBmbG9hdF9m
aWVsZCA9IDExOwotICByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSBpbnQ2NF9m
aWVsZCA9IDEyOwotICByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUgdWludDY0
X2ZpZWxkID0gMTM7Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlIGludDMy
X2ZpZWxkID0gMTQ7Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZSB1aW50
MzJfZmllbGQgPSAxNTsKLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZSBib29s
X2ZpZWxkID0gMTY7Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBzdHJp
bmdfZmllbGQgPSAxNzsKLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUgYnl0
ZXNfZmllbGQgPSAxODsKLX0KLQotbWVzc2FnZSBPbmVvZldlbGxLbm93blR5cGVzIHsKLSAgb25l
b2Ygb25lb2ZfZmllbGQgewotICAgIGdvb2dsZS5wcm90b2J1Zi5BbnkgYW55X2ZpZWxkID0gMTsK
LSAgICBnb29nbGUucHJvdG9idWYuQXBpIGFwaV9maWVsZCA9IDI7Ci0gICAgZ29vZ2xlLnByb3Rv
YnVmLkR1cmF0aW9uIGR1cmF0aW9uX2ZpZWxkID0gMzsKLSAgICBnb29nbGUucHJvdG9idWYuRW1w
dHkgZW1wdHlfZmllbGQgPSA0OwotICAgIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sgZmllbGRf
bWFza19maWVsZCA9IDU7Ci0gICAgZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHQgc291cmNl
X2NvbnRleHRfZmllbGQgPSA2OwotICAgIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qgc3RydWN0X2Zp
ZWxkID0gNzsKLSAgICBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIHRpbWVzdGFtcF9maWVsZCA9
IDg7Ci0gICAgZ29vZ2xlLnByb3RvYnVmLlR5cGUgdHlwZV9maWVsZCA9IDk7Ci0gICAgZ29vZ2xl
LnByb3RvYnVmLkRvdWJsZVZhbHVlIGRvdWJsZV9maWVsZCA9IDEwOwotICAgIGdvb2dsZS5wcm90
b2J1Zi5GbG9hdFZhbHVlIGZsb2F0X2ZpZWxkID0gMTE7Ci0gICAgZ29vZ2xlLnByb3RvYnVmLklu
dDY0VmFsdWUgaW50NjRfZmllbGQgPSAxMjsKLSAgICBnb29nbGUucHJvdG9idWYuVUludDY0VmFs
dWUgdWludDY0X2ZpZWxkID0gMTM7Ci0gICAgZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUgaW50
MzJfZmllbGQgPSAxNDsKLSAgICBnb29nbGUucHJvdG9idWYuVUludDMyVmFsdWUgdWludDMyX2Zp
ZWxkID0gMTU7Ci0gICAgZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZSBib29sX2ZpZWxkID0gMTY7
Ci0gICAgZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlIHN0cmluZ19maWVsZCA9IDE3OwotICAg
IGdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlIGJ5dGVzX2ZpZWxkID0gMTg7Ci0gIH0KLX0KLQot
Ly8gQSBtYXAgZmllbGQgZm9yIGVhY2ggd2VsbC1rbm93biB0eXBlLiBXZSBvbmx5Ci0vLyBuZWVk
IHRvIHdvcnJ5IGFib3V0IHRoZSB2YWx1ZSBwYXJ0IG9mIHRoZSBtYXAgYmVpbmcgdGhlCi0vLyB3
ZWxsLWtub3duIHR5cGVzLCBhcyBtZXNzYWdlcyBjYW4ndCBiZSBtYXAga2V5cy4KLW1lc3NhZ2Ug
TWFwV2VsbEtub3duVHlwZXMgewotICBtYXA8aW50MzIsZ29vZ2xlLnByb3RvYnVmLkFueT4gYW55
X2ZpZWxkID0gMTsKLSAgbWFwPGludDMyLGdvb2dsZS5wcm90b2J1Zi5BcGk+IGFwaV9maWVsZCA9
IDI7Ci0gIG1hcDxpbnQzMixnb29nbGUucHJvdG9idWYuRHVyYXRpb24+IGR1cmF0aW9uX2ZpZWxk
ID0gMzsKLSAgbWFwPGludDMyLGdvb2dsZS5wcm90b2J1Zi5FbXB0eT4gZW1wdHlfZmllbGQgPSA0
OwotICBtYXA8aW50MzIsZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzaz4gZmllbGRfbWFza19maWVs
ZCA9IDU7Ci0gIG1hcDxpbnQzMixnb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dD4gc291cmNl
X2NvbnRleHRfZmllbGQgPSA2OwotICBtYXA8aW50MzIsZ29vZ2xlLnByb3RvYnVmLlN0cnVjdD4g
c3RydWN0X2ZpZWxkID0gNzsKLSAgbWFwPGludDMyLGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXA+
IHRpbWVzdGFtcF9maWVsZCA9IDg7Ci0gIG1hcDxpbnQzMixnb29nbGUucHJvdG9idWYuVHlwZT4g
dHlwZV9maWVsZCA9IDk7Ci0gIG1hcDxpbnQzMixnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWU+
IGRvdWJsZV9maWVsZCA9IDEwOwotICBtYXA8aW50MzIsZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFs
dWU+IGZsb2F0X2ZpZWxkID0gMTE7Ci0gIG1hcDxpbnQzMixnb29nbGUucHJvdG9idWYuSW50NjRW
YWx1ZT4gaW50NjRfZmllbGQgPSAxMjsKLSAgbWFwPGludDMyLGdvb2dsZS5wcm90b2J1Zi5VSW50
NjRWYWx1ZT4gdWludDY0X2ZpZWxkID0gMTM7Ci0gIG1hcDxpbnQzMixnb29nbGUucHJvdG9idWYu
SW50MzJWYWx1ZT4gaW50MzJfZmllbGQgPSAxNDsKLSAgbWFwPGludDMyLGdvb2dsZS5wcm90b2J1
Zi5VSW50MzJWYWx1ZT4gdWludDMyX2ZpZWxkID0gMTU7Ci0gIG1hcDxpbnQzMixnb29nbGUucHJv
dG9idWYuQm9vbFZhbHVlPiBib29sX2ZpZWxkID0gMTY7Ci0gIG1hcDxpbnQzMixnb29nbGUucHJv
dG9idWYuU3RyaW5nVmFsdWU+IHN0cmluZ19maWVsZCA9IDE3OwotICBtYXA8aW50MzIsZ29vZ2xl
LnByb3RvYnVmLkJ5dGVzVmFsdWU+IGJ5dGVzX2ZpZWxkID0gMTg7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvdW5rbm93bl9maWVsZF9zZXQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdW5rbm93bl9maWVsZF9zZXQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0
ZTM4M2RhMjM0YTBjNTViODhkNWIzYjZiMjk3MjZkNGZhM2E5YmQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Vua25vd25f
ZmllbGRfc2V0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzQ3ICswLDAgQEAKLS8vIFByb3RvY29s
IEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0
IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVs
b3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChL
ZW50b24gVmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNp
Z24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldC5oPgotCi0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0
cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9zdGxfdXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVz
cGFjZSBwcm90b2J1ZiB7Ci0KLW5hbWVzcGFjZSB7Ci0vLyBUaGlzIGdsb2JhbCBpbnN0YW5jZSBp
cyByZXR1cm5lZCBieSB1bmtub3duX2ZpZWxkcygpIG9uIGFueSBtZXNzYWdlIGNsYXNzCi0vLyB3
aGVuIHRoZSBvYmplY3QgaGFzIG5vIHVua25vd24gZmllbGRzLiBUaGlzIGlzIG5lY2Vzc2FyeSBi
ZWNhdXNlIHdlIG5vdwotLy8gaW5zdGFudGlhdGUgdGhlIFVua25vd25GaWVsZFNldCBkeW5hbWlj
YWxseSBvbmx5IHdoZW4gcmVxdWlyZWQuCi1Vbmtub3duRmllbGRTZXQqIGRlZmF1bHRfdW5rbm93
bl9maWVsZF9zZXRfaW5zdGFuY2VfID0gTlVMTDsKLQotdm9pZCBEZWxldGVEZWZhdWx0VW5rbm93
bkZpZWxkU2V0KCkgewotICBkZWxldGUgZGVmYXVsdF91bmtub3duX2ZpZWxkX3NldF9pbnN0YW5j
ZV87Ci19Ci0KLXZvaWQgSW5pdERlZmF1bHRVbmtub3duRmllbGRTZXQoKSB7Ci0gIGRlZmF1bHRf
dW5rbm93bl9maWVsZF9zZXRfaW5zdGFuY2VfID0gbmV3IFVua25vd25GaWVsZFNldCgpOwotICBp
bnRlcm5hbDo6T25TaHV0ZG93bigmRGVsZXRlRGVmYXVsdFVua25vd25GaWVsZFNldCk7Ci19Ci0K
LUdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0UoZGVmYXVsdF91bmtub3duX2ZpZWxkX3NldF9v
bmNlX2luaXRfKTsKLX0KLQotY29uc3QgVW5rbm93bkZpZWxkU2V0KiBVbmtub3duRmllbGRTZXQ6
OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xlT25jZUlu
aXQoJmRlZmF1bHRfdW5rbm93bl9maWVsZF9zZXRfb25jZV9pbml0XywKLSAgICAgICAgICAgICAg
ICAgJkluaXREZWZhdWx0VW5rbm93bkZpZWxkU2V0KTsKLSAgcmV0dXJuIGRlZmF1bHRfdW5rbm93
bl9maWVsZF9zZXRfaW5zdGFuY2VfOwotfQotCi1Vbmtub3duRmllbGRTZXQ6OlVua25vd25GaWVs
ZFNldCgpCi0gICAgOiBmaWVsZHNfKE5VTEwpIHt9Ci0KLVVua25vd25GaWVsZFNldDo6flVua25v
d25GaWVsZFNldCgpIHsKLSAgQ2xlYXIoKTsKLSAgZGVsZXRlIGZpZWxkc187Ci19Ci0KLXZvaWQg
VW5rbm93bkZpZWxkU2V0OjpDbGVhckZhbGxiYWNrKCkgewotICBpZiAoZmllbGRzXyAhPSBOVUxM
KSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHNfLT5zaXplKCk7IGkrKykgewotICAg
ICAgKCpmaWVsZHNfKVtpXS5EZWxldGUoKTsKLSAgICB9Ci0gICAgZGVsZXRlIGZpZWxkc187Ci0g
ICAgZmllbGRzXyA9IE5VTEw7Ci0gIH0KLX0KLQotdm9pZCBVbmtub3duRmllbGRTZXQ6OkNsZWFy
QW5kRnJlZU1lbW9yeSgpIHsKLSAgaWYgKGZpZWxkc18gIT0gTlVMTCkgewotICAgIENsZWFyKCk7
Ci0gIH0KLX0KLQotdm9pZCBVbmtub3duRmllbGRTZXQ6OkludGVybmFsTWVyZ2VGcm9tKGNvbnN0
IFVua25vd25GaWVsZFNldCYgb3RoZXIpIHsKLSAgaW50IG90aGVyX2ZpZWxkX2NvdW50ID0gb3Ro
ZXIuZmllbGRfY291bnQoKTsKLSAgaWYgKG90aGVyX2ZpZWxkX2NvdW50ID4gMCkgewotICAgIGZp
ZWxkc18gPSBuZXcgdmVjdG9yPFVua25vd25GaWVsZD4oKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG90aGVyX2ZpZWxkX2NvdW50OyBpKyspIHsKLSAgICAgIGZpZWxkc18tPnB1c2hfYmFjaygo
Km90aGVyLmZpZWxkc18pW2ldKTsKLSAgICAgIGZpZWxkc18tPmJhY2soKS5EZWVwQ29weSgoKm90
aGVyLmZpZWxkc18pW2ldKTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBVbmtub3duRmllbGRTZXQ6
Ok1lcmdlRnJvbShjb25zdCBVbmtub3duRmllbGRTZXQmIG90aGVyKSB7Ci0gIGludCBvdGhlcl9m
aWVsZF9jb3VudCA9IG90aGVyLmZpZWxkX2NvdW50KCk7Ci0gIGlmIChvdGhlcl9maWVsZF9jb3Vu
dCA+IDApIHsKLSAgICBpZiAoZmllbGRzXyA9PSBOVUxMKSBmaWVsZHNfID0gbmV3IHZlY3RvcjxV
bmtub3duRmllbGQ+KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlcl9maWVsZF9jb3Vu
dDsgaSsrKSB7Ci0gICAgICBmaWVsZHNfLT5wdXNoX2JhY2soKCpvdGhlci5maWVsZHNfKVtpXSk7
Ci0gICAgICBmaWVsZHNfLT5iYWNrKCkuRGVlcENvcHkoKCpvdGhlci5maWVsZHNfKVtpXSk7Ci0g
ICAgfQotICB9Ci19Ci0KLS8vIEEgc3BlY2lhbGl6ZWQgTWVyZ2VGcm9tIGZvciBwZXJmb3JtYW5j
ZSB3aGVuIHdlIGFyZSBtZXJnaW5nIGZyb20gYW4gVUZTIHRoYXQKLS8vIGlzIHRlbXBvcmFyeSBh
bmQgY2FuIGJlIGRlc3Ryb3llZCBpbiB0aGUgcHJvY2Vzcy4KLXZvaWQgVW5rbm93bkZpZWxkU2V0
OjpNZXJnZUZyb21BbmREZXN0cm95KFVua25vd25GaWVsZFNldCogb3RoZXIpIHsKLSAgaW50IG90
aGVyX2ZpZWxkX2NvdW50ID0gb3RoZXItPmZpZWxkX2NvdW50KCk7Ci0gIGlmIChvdGhlcl9maWVs
ZF9jb3VudCA+IDApIHsKLSAgICBpZiAoZmllbGRzXyA9PSBOVUxMKSBmaWVsZHNfID0gbmV3IHZl
Y3RvcjxVbmtub3duRmllbGQ+KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlcl9maWVs
ZF9jb3VudDsgaSsrKSB7Ci0gICAgICBmaWVsZHNfLT5wdXNoX2JhY2soKCpvdGhlci0+ZmllbGRz
XylbaV0pOwotICAgICAgKCpvdGhlci0+ZmllbGRzXylbaV0uUmVzZXQoKTsKLSAgICB9Ci0gIH0K
LSAgZGVsZXRlIG90aGVyLT5maWVsZHNfOwotICBvdGhlci0+ZmllbGRzXyA9IE5VTEw7Ci19Ci0K
LWludCBVbmtub3duRmllbGRTZXQ6OlNwYWNlVXNlZEV4Y2x1ZGluZ1NlbGYoKSBjb25zdCB7Ci0g
IGlmIChmaWVsZHNfID09IE5VTEwpIHJldHVybiAwOwotCi0gIGludCB0b3RhbF9zaXplID0gc2l6
ZW9mKCpmaWVsZHNfKSArIHNpemVvZihVbmtub3duRmllbGQpICogZmllbGRzXy0+c2l6ZSgpOwot
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzXy0+c2l6ZSgpOyBpKyspIHsKLSAgICBjb25z
dCBVbmtub3duRmllbGQmIGZpZWxkID0gKCpmaWVsZHNfKVtpXTsKLSAgICBzd2l0Y2ggKGZpZWxk
LnR5cGUoKSkgewotICAgICAgY2FzZSBVbmtub3duRmllbGQ6OlRZUEVfTEVOR1RIX0RFTElNSVRF
RDoKLSAgICAgICAgdG90YWxfc2l6ZSArPSBzaXplb2YoKmZpZWxkLmxlbmd0aF9kZWxpbWl0ZWRf
LnN0cmluZ192YWx1ZV8pICsKLSAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6U3RyaW5n
U3BhY2VVc2VkRXhjbHVkaW5nU2VsZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKmZpZWxk
Lmxlbmd0aF9kZWxpbWl0ZWRfLnN0cmluZ192YWx1ZV8pOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgVW5rbm93bkZpZWxkOjpUWVBFX0dST1VQOgotICAgICAgICB0b3RhbF9zaXplICs9IGZp
ZWxkLmdyb3VwXy0+U3BhY2VVc2VkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVybiB0b3RhbF9zaXplOwotfQotCi1p
bnQgVW5rbm93bkZpZWxkU2V0OjpTcGFjZVVzZWQoKSBjb25zdCB7Ci0gIHJldHVybiBzaXplb2Yo
KnRoaXMpICsgU3BhY2VVc2VkRXhjbHVkaW5nU2VsZigpOwotfQotCi12b2lkIFVua25vd25GaWVs
ZFNldDo6QWRkVmFyaW50KGludCBudW1iZXIsIHVpbnQ2NCB2YWx1ZSkgewotICBVbmtub3duRmll
bGQgZmllbGQ7Ci0gIGZpZWxkLm51bWJlcl8gPSBudW1iZXI7Ci0gIGZpZWxkLlNldFR5cGUoVW5r
bm93bkZpZWxkOjpUWVBFX1ZBUklOVCk7Ci0gIGZpZWxkLnZhcmludF8gPSB2YWx1ZTsKLSAgaWYg
KGZpZWxkc18gPT0gTlVMTCkgZmllbGRzXyA9IG5ldyB2ZWN0b3I8VW5rbm93bkZpZWxkPigpOwot
ICBmaWVsZHNfLT5wdXNoX2JhY2soZmllbGQpOwotfQotCi12b2lkIFVua25vd25GaWVsZFNldDo6
QWRkRml4ZWQzMihpbnQgbnVtYmVyLCB1aW50MzIgdmFsdWUpIHsKLSAgVW5rbm93bkZpZWxkIGZp
ZWxkOwotICBmaWVsZC5udW1iZXJfID0gbnVtYmVyOwotICBmaWVsZC5TZXRUeXBlKFVua25vd25G
aWVsZDo6VFlQRV9GSVhFRDMyKTsKLSAgZmllbGQuZml4ZWQzMl8gPSB2YWx1ZTsKLSAgaWYgKGZp
ZWxkc18gPT0gTlVMTCkgZmllbGRzXyA9IG5ldyB2ZWN0b3I8VW5rbm93bkZpZWxkPigpOwotICBm
aWVsZHNfLT5wdXNoX2JhY2soZmllbGQpOwotfQotCi12b2lkIFVua25vd25GaWVsZFNldDo6QWRk
Rml4ZWQ2NChpbnQgbnVtYmVyLCB1aW50NjQgdmFsdWUpIHsKLSAgVW5rbm93bkZpZWxkIGZpZWxk
OwotICBmaWVsZC5udW1iZXJfID0gbnVtYmVyOwotICBmaWVsZC5TZXRUeXBlKFVua25vd25GaWVs
ZDo6VFlQRV9GSVhFRDY0KTsKLSAgZmllbGQuZml4ZWQ2NF8gPSB2YWx1ZTsKLSAgaWYgKGZpZWxk
c18gPT0gTlVMTCkgZmllbGRzXyA9IG5ldyB2ZWN0b3I8VW5rbm93bkZpZWxkPigpOwotICBmaWVs
ZHNfLT5wdXNoX2JhY2soZmllbGQpOwotfQotCi1zdHJpbmcqIFVua25vd25GaWVsZFNldDo6QWRk
TGVuZ3RoRGVsaW1pdGVkKGludCBudW1iZXIpIHsKLSAgVW5rbm93bkZpZWxkIGZpZWxkOwotICBm
aWVsZC5udW1iZXJfID0gbnVtYmVyOwotICBmaWVsZC5TZXRUeXBlKFVua25vd25GaWVsZDo6VFlQ
RV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgZmllbGQubGVuZ3RoX2RlbGltaXRlZF8uc3RyaW5nX3Zh
bHVlXyA9IG5ldyBzdHJpbmc7Ci0gIGlmIChmaWVsZHNfID09IE5VTEwpIGZpZWxkc18gPSBuZXcg
dmVjdG9yPFVua25vd25GaWVsZD4oKTsKLSAgZmllbGRzXy0+cHVzaF9iYWNrKGZpZWxkKTsKLSAg
cmV0dXJuIGZpZWxkLmxlbmd0aF9kZWxpbWl0ZWRfLnN0cmluZ192YWx1ZV87Ci19Ci0KLQotVW5r
bm93bkZpZWxkU2V0KiBVbmtub3duRmllbGRTZXQ6OkFkZEdyb3VwKGludCBudW1iZXIpIHsKLSAg
VW5rbm93bkZpZWxkIGZpZWxkOwotICBmaWVsZC5udW1iZXJfID0gbnVtYmVyOwotICBmaWVsZC5T
ZXRUeXBlKFVua25vd25GaWVsZDo6VFlQRV9HUk9VUCk7Ci0gIGZpZWxkLmdyb3VwXyA9IG5ldyBV
bmtub3duRmllbGRTZXQ7Ci0gIGlmIChmaWVsZHNfID09IE5VTEwpIGZpZWxkc18gPSBuZXcgdmVj
dG9yPFVua25vd25GaWVsZD4oKTsKLSAgZmllbGRzXy0+cHVzaF9iYWNrKGZpZWxkKTsKLSAgcmV0
dXJuIGZpZWxkLmdyb3VwXzsKLX0KLQotdm9pZCBVbmtub3duRmllbGRTZXQ6OkFkZEZpZWxkKGNv
bnN0IFVua25vd25GaWVsZCYgZmllbGQpIHsKLSAgaWYgKGZpZWxkc18gPT0gTlVMTCkgZmllbGRz
XyA9IG5ldyB2ZWN0b3I8VW5rbm93bkZpZWxkPigpOwotICBmaWVsZHNfLT5wdXNoX2JhY2soZmll
bGQpOwotICBmaWVsZHNfLT5iYWNrKCkuRGVlcENvcHkoZmllbGQpOwotfQotCi12b2lkIFVua25v
d25GaWVsZFNldDo6RGVsZXRlU3VicmFuZ2UoaW50IHN0YXJ0LCBpbnQgbnVtKSB7Ci0gIC8vIERl
bGV0ZSB0aGUgc3BlY2lmaWVkIGZpZWxkcy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW07ICsr
aSkgewotICAgICgqZmllbGRzXylbaSArIHN0YXJ0XS5EZWxldGUoKTsKLSAgfQotICAvLyBTbGlk
ZSBkb3duIHRoZSByZW1haW5pbmcgZmllbGRzLgotICBmb3IgKGludCBpID0gc3RhcnQgKyBudW07
IGkgPCBmaWVsZHNfLT5zaXplKCk7ICsraSkgewotICAgICgqZmllbGRzXylbaSAtIG51bV0gPSAo
KmZpZWxkc18pW2ldOwotICB9Ci0gIC8vIFBvcCBvZmYgdGhlICMgb2YgZGVsZXRlZCBmaWVsZHMu
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICBmaWVsZHNfLT5wb3BfYmFj
aygpOwotICB9Ci0gIGlmIChmaWVsZHNfICYmIGZpZWxkc18tPnNpemUoKSA9PSAwKSB7Ci0gICAg
Ly8gbWFpbnRhaW4gaW52YXJpYW50OiBuZXZlciBob2xkIGZpZWxkc18gaWYgZW1wdHkuCi0gICAg
ZGVsZXRlIGZpZWxkc187Ci0gICAgZmllbGRzXyA9IE5VTEw7Ci0gIH0KLX0KLQotdm9pZCBVbmtu
b3duRmllbGRTZXQ6OkRlbGV0ZUJ5TnVtYmVyKGludCBudW1iZXIpIHsKLSAgaWYgKGZpZWxkc18g
PT0gTlVMTCkgcmV0dXJuOwotICBpbnQgbGVmdCA9IDA7ICAvLyBUaGUgbnVtYmVyIG9mIGZpZWxk
cyBsZWZ0IGFmdGVyIGRlbGV0aW9uLgotICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkc18tPnNp
emUoKTsgKytpKSB7Ci0gICAgVW5rbm93bkZpZWxkKiBmaWVsZCA9ICYoKmZpZWxkc18pW2ldOwot
ICAgIGlmIChmaWVsZC0+bnVtYmVyKCkgPT0gbnVtYmVyKSB7Ci0gICAgICBmaWVsZC0+RGVsZXRl
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChpICE9IGxlZnQpIHsKLSAgICAgICAgKCpmaWVs
ZHNfKVtsZWZ0XSA9ICgqZmllbGRzXylbaV07Ci0gICAgICB9Ci0gICAgICArK2xlZnQ7Ci0gICAg
fQotICB9Ci0gIGZpZWxkc18tPnJlc2l6ZShsZWZ0KTsKLSAgaWYgKGxlZnQgPT0gMCkgewotICAg
IC8vIG1haW50YWluIGludmFyaWFudDogbmV2ZXIgaG9sZCBmaWVsZHNfIGlmIGVtcHR5LgotICAg
IGRlbGV0ZSBmaWVsZHNfOwotICAgIGZpZWxkc18gPSBOVUxMOwotICB9Ci19Ci0KLWJvb2wgVW5r
bm93bkZpZWxkU2V0OjpNZXJnZUZyb21Db2RlZFN0cmVhbShpbzo6Q29kZWRJbnB1dFN0cmVhbSog
aW5wdXQpIHsKLSAgVW5rbm93bkZpZWxkU2V0IG90aGVyOwotICBpZiAoaW50ZXJuYWw6OldpcmVG
b3JtYXQ6OlNraXBNZXNzYWdlKGlucHV0LCAmb3RoZXIpICYmCi0gICAgICBpbnB1dC0+Q29uc3Vt
ZWRFbnRpcmVNZXNzYWdlKCkpIHsKLSAgICBNZXJnZUZyb21BbmREZXN0cm95KCZvdGhlcik7Ci0g
ICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0K
LWJvb2wgVW5rbm93bkZpZWxkU2V0OjpQYXJzZUZyb21Db2RlZFN0cmVhbShpbzo6Q29kZWRJbnB1
dFN0cmVhbSogaW5wdXQpIHsKLSAgQ2xlYXIoKTsKLSAgcmV0dXJuIE1lcmdlRnJvbUNvZGVkU3Ry
ZWFtKGlucHV0KTsKLX0KLQotYm9vbCBVbmtub3duRmllbGRTZXQ6OlBhcnNlRnJvbVplcm9Db3B5
U3RyZWFtKGlvOjpaZXJvQ29weUlucHV0U3RyZWFtKiBpbnB1dCkgewotICBpbzo6Q29kZWRJbnB1
dFN0cmVhbSBjb2RlZF9pbnB1dChpbnB1dCk7Ci0gIHJldHVybiAoUGFyc2VGcm9tQ29kZWRTdHJl
YW0oJmNvZGVkX2lucHV0KSAmJgotICAgICAgICAgIGNvZGVkX2lucHV0LkNvbnN1bWVkRW50aXJl
TWVzc2FnZSgpKTsKLX0KLQotYm9vbCBVbmtub3duRmllbGRTZXQ6OlBhcnNlRnJvbUFycmF5KGNv
bnN0IHZvaWQqIGRhdGEsIGludCBzaXplKSB7Ci0gIGlvOjpBcnJheUlucHV0U3RyZWFtIGlucHV0
KGRhdGEsIHNpemUpOwotICByZXR1cm4gUGFyc2VGcm9tWmVyb0NvcHlTdHJlYW0oJmlucHV0KTsK
LX0KLQotdm9pZCBVbmtub3duRmllbGQ6OkRlbGV0ZSgpIHsKLSAgc3dpdGNoICh0eXBlKCkpIHsK
LSAgICBjYXNlIFVua25vd25GaWVsZDo6VFlQRV9MRU5HVEhfREVMSU1JVEVEOgotICAgICAgZGVs
ZXRlIGxlbmd0aF9kZWxpbWl0ZWRfLnN0cmluZ192YWx1ZV87Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIFVua25vd25GaWVsZDo6VFlQRV9HUk9VUDoKLSAgICAgIGRlbGV0ZSBncm91cF87Ci0gICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLy8gUmVzZXQg
YWxsIG93bmVkIHB0cnMsIGEgc3BlY2lhbCBmdW5jdGlvbiBmb3IgcGVyZm9ybWFuY2UsIHRvIGF2
b2lkIGRvdWJsZQotLy8gb3duaW5nIHRoZSBwdHJzLCB3aGVuIHdlIG1lcmdlIGZyb20gYSB0ZW1w
b3JhcnkgVW5rbm93bkZpZWxkU2V0IG9iamVjdHMuCi12b2lkIFVua25vd25GaWVsZDo6UmVzZXQo
KSB7Ci0gIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2FzZSBVbmtub3duRmllbGQ6OlRZUEVfTEVO
R1RIX0RFTElNSVRFRDoKLSAgICAgIGxlbmd0aF9kZWxpbWl0ZWRfLnN0cmluZ192YWx1ZV8gPSBO
VUxMOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVbmtub3duRmllbGQ6OlRZUEVfR1JPVVA6IHsK
LSAgICAgIGdyb3VwXyA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoK
LSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXZvaWQgVW5rbm93bkZpZWxkOjpEZWVwQ29weShjb25z
dCBVbmtub3duRmllbGQmIG90aGVyKSB7Ci0gIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2FzZSBV
bmtub3duRmllbGQ6OlRZUEVfTEVOR1RIX0RFTElNSVRFRDoKLSAgICAgIGxlbmd0aF9kZWxpbWl0
ZWRfLnN0cmluZ192YWx1ZV8gPSBuZXcgc3RyaW5nKAotICAgICAgICAgICpsZW5ndGhfZGVsaW1p
dGVkXy5zdHJpbmdfdmFsdWVfKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVW5rbm93bkZpZWxk
OjpUWVBFX0dST1VQOiB7Ci0gICAgICBVbmtub3duRmllbGRTZXQqIGdyb3VwID0gbmV3IFVua25v
d25GaWVsZFNldCgpOwotICAgICAgZ3JvdXAtPkludGVybmFsTWVyZ2VGcm9tKCpncm91cF8pOwot
ICAgICAgZ3JvdXBfID0gZ3JvdXA7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoK
LSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLQotdm9pZCBVbmtub3duRmllbGQ6OlNlcmlhbGl6ZUxl
bmd0aERlbGltaXRlZE5vVGFnKAotICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBj
b25zdCB7Ci0gIEdPT0dMRV9EQ0hFQ0tfRVEoVFlQRV9MRU5HVEhfREVMSU1JVEVELCB0eXBlKCkp
OwotICBjb25zdCBzdHJpbmcmIGRhdGEgPSAqbGVuZ3RoX2RlbGltaXRlZF8uc3RyaW5nX3ZhbHVl
XzsKLSAgb3V0cHV0LT5Xcml0ZVZhcmludDMyKGRhdGEuc2l6ZSgpKTsKLSAgb3V0cHV0LT5Xcml0
ZVJhd01heWJlQWxpYXNlZChkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwotfQotCi11aW50OCog
VW5rbm93bkZpZWxkOjpTZXJpYWxpemVMZW5ndGhEZWxpbWl0ZWROb1RhZ1RvQXJyYXkodWludDgq
IHRhcmdldCkgY29uc3QgewotICBHT09HTEVfRENIRUNLX0VRKFRZUEVfTEVOR1RIX0RFTElNSVRF
RCwgdHlwZSgpKTsKLSAgY29uc3Qgc3RyaW5nJiBkYXRhID0gKmxlbmd0aF9kZWxpbWl0ZWRfLnN0
cmluZ192YWx1ZV87Ci0gIHRhcmdldCA9IGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVWYXJp
bnQzMlRvQXJyYXkoZGF0YS5zaXplKCksIHRhcmdldCk7Ci0gIHRhcmdldCA9IGlvOjpDb2RlZE91
dHB1dFN0cmVhbTo6V3JpdGVTdHJpbmdUb0FycmF5KGRhdGEsIHRhcmdldCk7Ci0gIHJldHVybiB0
YXJnZXQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdv
b2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvdW5rbm93bl9maWVsZF9zZXQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjEyYTk0MmE3NzFkODRkYTIzOTJiYzVjOGQ0Nzg3N2I3NDQ3YTJkMi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdW5rbm93bl9maWVsZF9zZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50
b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3Rv
Y29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFu
ZCBvdGhlcnMuCi0vLwotLy8gQ29udGFpbnMgY2xhc3NlcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Yg
dW5yZWNvZ25pemVkIGZpZWxkcyBzZWVuIHdoaWxlCi0vLyBwYXJzaW5nIGEgcHJvdG9jb2wgbWVz
c2FnZS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfVU5LTk9XTl9GSUVMRF9TRVRfSF9fCi0j
ZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9VTktOT1dOX0ZJRUxEX1NFVF9IX18KLQotI2luY2x1ZGUg
PGFzc2VydC5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLSAgbmFtZXNwYWNlIGlvIHsKLSAgICBjbGFzcyBDb2RlZElucHV0U3RyZWFtOyAg
ICAgICAgIC8vIGNvZGVkX3N0cmVhbS5oCi0gICAgY2xhc3MgQ29kZWRPdXRwdXRTdHJlYW07ICAg
ICAgICAvLyBjb2RlZF9zdHJlYW0uaAotICAgIGNsYXNzIFplcm9Db3B5SW5wdXRTdHJlYW07ICAg
ICAgLy8gemVyb19jb3B5X3N0cmVhbS5oCi0gIH0KLSAgbmFtZXNwYWNlIGludGVybmFsIHsKLSAg
ICBjbGFzcyBXaXJlRm9ybWF0OyAgICAgICAgICAgICAgIC8vIHdpcmVfZm9ybWF0LmgKLSAgICBj
bGFzcyBNZXNzYWdlU2V0RmllbGRTa2lwcGVyVXNpbmdDb3JkOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZXh0ZW5zaW9uX3NldF9oZWF2eS5jYwotICB9Ci0KLWNsYXNz
IE1lc3NhZ2U7ICAgICAgICAgICAgICAgICAgICAgIC8vIG1lc3NhZ2UuaAotY2xhc3MgVW5rbm93
bkZpZWxkOyAgICAgICAgICAgICAgICAgLy8gYmVsb3cKLQotLy8gQW4gVW5rbm93bkZpZWxkU2V0
IGNvbnRhaW5zIGZpZWxkcyB0aGF0IHdlcmUgZW5jb3VudGVyZWQgd2hpbGUgcGFyc2luZyBhCi0v
LyBtZXNzYWdlIGJ1dCB3ZXJlIG5vdCBkZWZpbmVkIGJ5IGl0cyB0eXBlLiAgS2VlcGluZyB0cmFj
ayBvZiB0aGVzZSBjYW4gYmUKLS8vIHVzZWZ1bCwgZXNwZWNpYWxseSBpbiB0aGF0IHRoZXkgbWF5
IGJlIHdyaXR0ZW4gaWYgdGhlIG1lc3NhZ2UgaXMgc2VyaWFsaXplZAotLy8gYWdhaW4gd2l0aG91
dCBiZWluZyBjbGVhcmVkIGluIGJldHdlZW4uICBUaGlzIG1lYW5zIHRoYXQgc29mdHdhcmUgd2hp
Y2gKLS8vIHNpbXBseSByZWNlaXZlcyBtZXNzYWdlcyBhbmQgZm9yd2FyZHMgdGhlbSB0byBvdGhl
ciBzZXJ2ZXJzIGRvZXMgbm90IG5lZWQKLS8vIHRvIGJlIHVwZGF0ZWQgZXZlcnkgdGltZSBhIG5l
dyBmaWVsZCBpcyBhZGRlZCB0byB0aGUgbWVzc2FnZSBkZWZpbml0aW9uLgotLy8KLS8vIFRvIGdl
dCB0aGUgVW5rbm93bkZpZWxkU2V0IGF0dGFjaGVkIHRvIGFueSBtZXNzYWdlLCBjYWxsCi0vLyBS
ZWZsZWN0aW9uOjpHZXRVbmtub3duRmllbGRzKCkuCi0vLwotLy8gVGhpcyBjbGFzcyBpcyBuZWNl
c3NhcmlseSB0aWVkIHRvIHRoZSBwcm90b2NvbCBidWZmZXIgd2lyZSBmb3JtYXQsIHVubGlrZQot
Ly8gdGhlIFJlZmxlY3Rpb24gaW50ZXJmYWNlIHdoaWNoIGlzIGluZGVwZW5kZW50IG9mIGFueSBz
ZXJpYWxpemF0aW9uIHNjaGVtZS4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBVbmtub3duRmll
bGRTZXQgewotIHB1YmxpYzoKLSAgVW5rbm93bkZpZWxkU2V0KCk7Ci0gIH5Vbmtub3duRmllbGRT
ZXQoKTsKLQotICAvLyBSZW1vdmUgYWxsIGZpZWxkcy4KLSAgaW5saW5lIHZvaWQgQ2xlYXIoKTsK
LQotICAvLyBSZW1vdmUgYWxsIGZpZWxkcyBhbmQgZGVhbGxvY2F0ZSBpbnRlcm5hbCBkYXRhIG9i
amVjdHMKLSAgdm9pZCBDbGVhckFuZEZyZWVNZW1vcnkoKTsKLQotICAvLyBJcyB0aGlzIHNldCBl
bXB0eT8KLSAgaW5saW5lIGJvb2wgZW1wdHkoKSBjb25zdDsKLQotICAvLyBNZXJnZSB0aGUgY29u
dGVudHMgb2Ygc29tZSBvdGhlciBVbmtub3duRmllbGRTZXQgd2l0aCB0aGlzIG9uZS4KLSAgdm9p
ZCBNZXJnZUZyb20oY29uc3QgVW5rbm93bkZpZWxkU2V0JiBvdGhlcik7Ci0KLSAgLy8gU2ltaWxh
ciB0byBhYm92ZSwgYnV0IHRoaXMgZnVuY3Rpb24gd2lsbCBkZXN0cm95IHRoZSBjb250ZW50cyBv
ZiBvdGhlci4KLSAgdm9pZCBNZXJnZUZyb21BbmREZXN0cm95KFVua25vd25GaWVsZFNldCogb3Ro
ZXIpOwotCi0gIC8vIFN3YXBzIHRoZSBjb250ZW50cyBvZiBzb21lIG90aGVyIFVua25vd25GaWVs
ZFNldCB3aXRoIHRoaXMgb25lLgotICBpbmxpbmUgdm9pZCBTd2FwKFVua25vd25GaWVsZFNldCog
eCk7Ci0KLSAgLy8gQ29tcHV0ZXMgKGFuIGVzdGltYXRlIG9mKSB0aGUgdG90YWwgbnVtYmVyIG9m
IGJ5dGVzIGN1cnJlbnRseSB1c2VkIGZvcgotICAvLyBzdG9yaW5nIHRoZSB1bmtub3duIGZpZWxk
cyBpbiBtZW1vcnkuIERvZXMgTk9UIGluY2x1ZGUKLSAgLy8gc2l6ZW9mKCp0aGlzKSBpbiB0aGUg
Y2FsY3VsYXRpb24uCi0gIGludCBTcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCkgY29uc3Q7Ci0KLSAg
Ly8gVmVyc2lvbiBvZiBTcGFjZVVzZWQoKSBpbmNsdWRpbmcgc2l6ZW9mKCp0aGlzKS4KLSAgaW50
IFNwYWNlVXNlZCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBmaWVsZHMg
cHJlc2VudCBpbiB0aGUgVW5rbm93bkZpZWxkU2V0LgotICBpbmxpbmUgaW50IGZpZWxkX2NvdW50
KCkgY29uc3Q7Ci0gIC8vIEdldCBhIGZpZWxkIGluIHRoZSBzZXQsIHdoZXJlIDAgPD0gaW5kZXgg
PCBmaWVsZF9jb3VudCgpLiAgVGhlIGZpZWxkcwotICAvLyBhcHBlYXIgaW4gdGhlIG9yZGVyIGlu
IHdoaWNoIHRoZXkgd2VyZSBhZGRlZC4KLSAgaW5saW5lIGNvbnN0IFVua25vd25GaWVsZCYgZmll
bGQoaW50IGluZGV4KSBjb25zdDsKLSAgLy8gR2V0IGEgbXV0YWJsZSBwb2ludGVyIHRvIGEgZmll
bGQgaW4gdGhlIHNldCwgd2hlcmUKLSAgLy8gMCA8PSBpbmRleCA8IGZpZWxkX2NvdW50KCkuICBU
aGUgZmllbGRzIGFwcGVhciBpbiB0aGUgb3JkZXIgaW4gd2hpY2gKLSAgLy8gdGhleSB3ZXJlIGFk
ZGVkLgotICBpbmxpbmUgVW5rbm93bkZpZWxkKiBtdXRhYmxlX2ZpZWxkKGludCBpbmRleCk7Ci0K
LSAgLy8gQWRkaW5nIGZpZWxkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICB2b2lkIEFkZFZhcmludChpbnQgbnVtYmVyLCB1aW50NjQgdmFs
dWUpOwotICB2b2lkIEFkZEZpeGVkMzIoaW50IG51bWJlciwgdWludDMyIHZhbHVlKTsKLSAgdm9p
ZCBBZGRGaXhlZDY0KGludCBudW1iZXIsIHVpbnQ2NCB2YWx1ZSk7Ci0gIHZvaWQgQWRkTGVuZ3Ro
RGVsaW1pdGVkKGludCBudW1iZXIsIGNvbnN0IHN0cmluZyYgdmFsdWUpOwotICBzdHJpbmcqIEFk
ZExlbmd0aERlbGltaXRlZChpbnQgbnVtYmVyKTsKLSAgVW5rbm93bkZpZWxkU2V0KiBBZGRHcm91
cChpbnQgbnVtYmVyKTsKLQotICAvLyBBZGRzIGFuIHVua25vd24gZmllbGQgZnJvbSBhbm90aGVy
IHNldC4KLSAgdm9pZCBBZGRGaWVsZChjb25zdCBVbmtub3duRmllbGQmIGZpZWxkKTsKLQotICAv
LyBEZWxldGUgZmllbGRzIHdpdGggaW5kaWNlcyBpbiB0aGUgcmFuZ2UgW3N0YXJ0IC4uIHN0YXJ0
K251bS0xXS4KLSAgLy8gQ2F1dGlvbjogaW1wbGVtZW50YXRpb24gbW92ZXMgYWxsIGZpZWxkcyB3
aXRoIGluZGljZXMgW3N0YXJ0K251bSAuLiBdLgotICB2b2lkIERlbGV0ZVN1YnJhbmdlKGludCBz
dGFydCwgaW50IG51bSk7Ci0KLSAgLy8gRGVsZXRlIGFsbCBmaWVsZHMgd2l0aCBhIHNwZWNpZmlj
IGZpZWxkIG51bWJlci4gVGhlIG9yZGVyIG9mIGxlZnQgZmllbGRzCi0gIC8vIGlzIHByZXNlcnZl
ZC4KLSAgLy8gQ2F1dGlvbjogaW1wbGVtZW50YXRpb24gbW92ZXMgYWxsIGZpZWxkcyBhZnRlciB0
aGUgZmlyc3QgZGVsZXRlZCBmaWVsZC4KLSAgdm9pZCBEZWxldGVCeU51bWJlcihpbnQgbnVtYmVy
KTsKLQotICAvLyBQYXJzaW5nIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBUaGVzZSB3b3JrIGV4YWN0bHkgbGlrZSB0aGUgc2lt
aWxhcmx5LW5hbWVkIG1ldGhvZHMgb2YgTWVzc2FnZS4KLQotICBib29sIE1lcmdlRnJvbUNvZGVk
U3RyZWFtKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIGJvb2wgUGFyc2VGcm9tQ29k
ZWRTdHJlYW0oaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLSAgYm9vbCBQYXJzZUZyb21a
ZXJvQ29weVN0cmVhbShpbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogaW5wdXQpOwotICBib29sIFBh
cnNlRnJvbUFycmF5KGNvbnN0IHZvaWQqIGRhdGEsIGludCBzaXplKTsKLSAgaW5saW5lIGJvb2wg
UGFyc2VGcm9tU3RyaW5nKGNvbnN0IHN0cmluZyYgZGF0YSkgewotICAgIHJldHVybiBQYXJzZUZy
b21BcnJheShkYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSkpOwotICB9
Ci0KLSAgc3RhdGljIGNvbnN0IFVua25vd25GaWVsZFNldCogZGVmYXVsdF9pbnN0YW5jZSgpOwot
IHByaXZhdGU6Ci0gIC8vIEZvciBJbnRlcm5hbE1lcmdlRnJvbQotICBmcmllbmQgY2xhc3MgVW5r
bm93bkZpZWxkOwotICAvLyBNZXJnZXMgZnJvbSBvdGhlciBVbmtub3duRmllbGRTZXQuIFRoaXMg
bWV0aG9kIGFzc3VtZXMsIHRoYXQgdGhpcyBvYmplY3QKLSAgLy8gaXMgbmV3bHkgY3JlYXRlZCBh
bmQgaGFzIGZpZWxkc18gPT0gTlVMTDsKLSAgdm9pZCBJbnRlcm5hbE1lcmdlRnJvbShjb25zdCBV
bmtub3duRmllbGRTZXQmIG90aGVyKTsKLSAgdm9pZCBDbGVhckZhbGxiYWNrKCk7Ci0KLSAgLy8g
ZmllbGRzXyBpcyBlaXRoZXIgTlVMTCwgb3IgYSBwb2ludGVyIHRvIGEgdmVjdG9yIHRoYXQgaXMg
Km5vbi1lbXB0eSouIFdlCi0gIC8vIG5ldmVyIGhvbGQgdGhlIGVtcHR5IHZlY3RvciBiZWNhdXNl
IHdlIHdhbnQgdGhlICdkbyB3ZSBoYXZlIGFueSB1bmtub3duCi0gIC8vIGZpZWxkcycgY2hlY2sg
dG8gYmUgZmFzdCwgYW5kIGF2b2lkIGEgY2FjaGUgbWlzczogdGhlIFVGUyBpbnN0YW5jZSBnZXRz
Ci0gIC8vIGVtYmVkZGVkIGluIHRoZSBtZXNzYWdlIG9iamVjdCwgc28gJ2ZpZWxkc18gIT0gTlVM
TCcgdGVzdHMgYSBtZW1iZXIKLSAgLy8gdmFyaWFibGUgaG90IGluIHRoZSBjYWNoZSwgd2l0aG91
dCB0aGUgbmVlZCB0byBnbyB0b3VjaCBhIHZlY3RvciBzb21ld2hlcmUKLSAgLy8gZWxzZSBpbiBt
ZW1vcnkuCi0gIHN0ZDo6dmVjdG9yPFVua25vd25GaWVsZD4qIGZpZWxkc187Ci0gIEdPT0dMRV9E
SVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhVbmtub3duRmllbGRTZXQpOwotfTsKLQotLy8gUmVw
cmVzZW50cyBvbmUgZmllbGQgaW4gYW4gVW5rbm93bkZpZWxkU2V0LgotY2xhc3MgTElCUFJPVE9C
VUZfRVhQT1JUIFVua25vd25GaWVsZCB7Ci0gcHVibGljOgotICBlbnVtIFR5cGUgewotICAgIFRZ
UEVfVkFSSU5ULAotICAgIFRZUEVfRklYRUQzMiwKLSAgICBUWVBFX0ZJWEVENjQsCi0gICAgVFlQ
RV9MRU5HVEhfREVMSU1JVEVELAotICAgIFRZUEVfR1JPVVAKLSAgfTsKLQotICAvLyBUaGUgZmll
bGQncyB0YWcgbnVtYmVyLCBhcyBzZWVuIG9uIHRoZSB3aXJlLgotICBpbmxpbmUgaW50IG51bWJl
cigpIGNvbnN0OwotCi0gIC8vIFRoZSBmaWVsZCB0eXBlLgotICBpbmxpbmUgVHlwZSB0eXBlKCkg
Y29uc3Q7Ci0KLSAgLy8gQWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gRWFjaCBtZXRob2Qgd29ya3Mgb25seSBmb3Ig
VW5rbm93bkZpZWxkcyBvZiB0aGUgY29ycmVzcG9uZGluZyB0eXBlLgotCi0gIGlubGluZSB1aW50
NjQgdmFyaW50KCkgY29uc3Q7Ci0gIGlubGluZSB1aW50MzIgZml4ZWQzMigpIGNvbnN0OwotICBp
bmxpbmUgdWludDY0IGZpeGVkNjQoKSBjb25zdDsKLSAgaW5saW5lIGNvbnN0IHN0cmluZyYgbGVu
Z3RoX2RlbGltaXRlZCgpIGNvbnN0OwotICBpbmxpbmUgY29uc3QgVW5rbm93bkZpZWxkU2V0JiBn
cm91cCgpIGNvbnN0OwotCi0gIGlubGluZSB2b2lkIHNldF92YXJpbnQodWludDY0IHZhbHVlKTsK
LSAgaW5saW5lIHZvaWQgc2V0X2ZpeGVkMzIodWludDMyIHZhbHVlKTsKLSAgaW5saW5lIHZvaWQg
c2V0X2ZpeGVkNjQodWludDY0IHZhbHVlKTsKLSAgaW5saW5lIHZvaWQgc2V0X2xlbmd0aF9kZWxp
bWl0ZWQoY29uc3Qgc3RyaW5nJiB2YWx1ZSk7Ci0gIGlubGluZSBzdHJpbmcqIG11dGFibGVfbGVu
Z3RoX2RlbGltaXRlZCgpOwotICBpbmxpbmUgVW5rbm93bkZpZWxkU2V0KiBtdXRhYmxlX2dyb3Vw
KCk7Ci0KLSAgLy8gU2VyaWFsaXphdGlvbiBBUEkuCi0gIC8vIFRoZXNlIG1ldGhvZHMgY2FuIHRh
a2UgYWR2YW50YWdlIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGFuZCBtYXkKLSAg
Ly8gYXJjaGlldmUgYSBiZXR0ZXIgcGVyZm9ybWFuY2UgdGhhbiB1c2luZyBnZXR0ZXJzIHRvIHJl
dHJpZXZlIHRoZSBkYXRhIGFuZAotICAvLyBkbyB0aGUgc2VyaWFsaXphdGlvbiB5b3Vyc2VsZi4K
LSAgdm9pZCBTZXJpYWxpemVMZW5ndGhEZWxpbWl0ZWROb1RhZyhpbzo6Q29kZWRPdXRwdXRTdHJl
YW0qIG91dHB1dCkgY29uc3Q7Ci0gIHVpbnQ4KiBTZXJpYWxpemVMZW5ndGhEZWxpbWl0ZWROb1Rh
Z1RvQXJyYXkodWludDgqIHRhcmdldCkgY29uc3Q7Ci0KLSAgaW5saW5lIGludCBHZXRMZW5ndGhE
ZWxpbWl0ZWRTaXplKCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgVW5rbm93
bkZpZWxkU2V0OwotCi0gIC8vIElmIHRoaXMgVW5rbm93bkZpZWxkIGNvbnRhaW5zIGEgcG9pbnRl
ciwgZGVsZXRlIGl0LgotICB2b2lkIERlbGV0ZSgpOwotCi0gIC8vIFJlc2V0IGFsbCB0aGUgdW5k
ZXJseWluZyBwb2ludGVycyB0byBOVUxMLiBBIHNwZWNpYWwgZnVuY3Rpb24gdG8gYmUgb25seQot
ICAvLyB1c2VkIHdoaWxlIG1lcmdpbmcgZnJvbSBhIHRlbXBvcmFyeSBVRlMuCi0gIHZvaWQgUmVz
ZXQoKTsKLQotICAvLyBNYWtlIGEgZGVlcCBjb3B5IG9mIGFueSBwb2ludGVycyBpbiB0aGlzIFVu
a25vd25GaWVsZC4KLSAgdm9pZCBEZWVwQ29weShjb25zdCBVbmtub3duRmllbGQmIG90aGVyKTsK
LQotICAvLyBTZXQgdGhlIHdpcmUgdHlwZSBvZiB0aGlzIFVua25vd25GaWVsZC4gU2hvdWxkIG9u
bHkgYmUgdXNlZCB3aGVuIHRoaXMKLSAgLy8gVW5rbm93bkZpZWxkIGlzIGJlaW5nIGNyZWF0ZWQu
Ci0gIGlubGluZSB2b2lkIFNldFR5cGUoVHlwZSB0eXBlKTsKLQotICB1bmlvbiBMZW5ndGhEZWxp
bWl0ZWQgewotICAgIHN0cmluZyogc3RyaW5nX3ZhbHVlXzsKLSAgfTsKLQotICB1aW50MzIgbnVt
YmVyXzsKLSAgdWludDMyIHR5cGVfOwotICB1bmlvbiB7Ci0gICAgdWludDY0IHZhcmludF87Ci0g
ICAgdWludDMyIGZpeGVkMzJfOwotICAgIHVpbnQ2NCBmaXhlZDY0XzsKLSAgICBtdXRhYmxlIHVu
aW9uIExlbmd0aERlbGltaXRlZCBsZW5ndGhfZGVsaW1pdGVkXzsKLSAgICBVbmtub3duRmllbGRT
ZXQqIGdyb3VwXzsKLSAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGlubGluZSBpbXBsZW1l
bnRhdGlvbnMKLQotaW5saW5lIHZvaWQgVW5rbm93bkZpZWxkU2V0OjpDbGVhcigpIHsKLSAgaWYg
KGZpZWxkc18pIHsKLSAgICBDbGVhckZhbGxiYWNrKCk7Ci0gIH0KLX0KLQotaW5saW5lIGJvb2wg
VW5rbm93bkZpZWxkU2V0OjplbXB0eSgpIGNvbnN0IHsKLSAgLy8gSW52YXJpYW50OiBmaWVsZHNf
IGlzIG5ldmVyIGVtcHR5IGlmIHByZXNlbnQuCi0gIHJldHVybiAhZmllbGRzXzsKLX0KLQotaW5s
aW5lIHZvaWQgVW5rbm93bkZpZWxkU2V0OjpTd2FwKFVua25vd25GaWVsZFNldCogeCkgewotICBz
dGQ6OnN3YXAoZmllbGRzXywgeC0+ZmllbGRzXyk7Ci19Ci0KLWlubGluZSBpbnQgVW5rbm93bkZp
ZWxkU2V0OjpmaWVsZF9jb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIGZpZWxkc18gPyBzdGF0aWNf
Y2FzdDxpbnQ+KGZpZWxkc18tPnNpemUoKSkgOiAwOwotfQotaW5saW5lIGNvbnN0IFVua25vd25G
aWVsZCYgVW5rbm93bkZpZWxkU2V0OjpmaWVsZChpbnQgaW5kZXgpIGNvbnN0IHsKLSAgR09PR0xF
X0RDSEVDSyhmaWVsZHNfICE9IE5VTEwpOwotICByZXR1cm4gKCpmaWVsZHNfKVtpbmRleF07Ci19
Ci1pbmxpbmUgVW5rbm93bkZpZWxkKiBVbmtub3duRmllbGRTZXQ6Om11dGFibGVfZmllbGQoaW50
IGluZGV4KSB7Ci0gIHJldHVybiAmKCpmaWVsZHNfKVtpbmRleF07Ci19Ci0KLWlubGluZSB2b2lk
IFVua25vd25GaWVsZFNldDo6QWRkTGVuZ3RoRGVsaW1pdGVkKAotICAgIGludCBudW1iZXIsIGNv
bnN0IHN0cmluZyYgdmFsdWUpIHsKLSAgQWRkTGVuZ3RoRGVsaW1pdGVkKG51bWJlciktPmFzc2ln
bih2YWx1ZSk7Ci19Ci0KLQotaW5saW5lIGludCBVbmtub3duRmllbGQ6Om51bWJlcigpIGNvbnN0
IHsgcmV0dXJuIG51bWJlcl87IH0KLWlubGluZSBVbmtub3duRmllbGQ6OlR5cGUgVW5rbm93bkZp
ZWxkOjp0eXBlKCkgY29uc3QgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odHlwZV8pOwot
fQotCi1pbmxpbmUgdWludDY0IFVua25vd25GaWVsZDo6dmFyaW50KCkgY29uc3QgewotICBhc3Nl
cnQodHlwZSgpID09IFRZUEVfVkFSSU5UKTsKLSAgcmV0dXJuIHZhcmludF87Ci19Ci1pbmxpbmUg
dWludDMyIFVua25vd25GaWVsZDo6Zml4ZWQzMigpIGNvbnN0IHsKLSAgYXNzZXJ0KHR5cGUoKSA9
PSBUWVBFX0ZJWEVEMzIpOwotICByZXR1cm4gZml4ZWQzMl87Ci19Ci1pbmxpbmUgdWludDY0IFVu
a25vd25GaWVsZDo6Zml4ZWQ2NCgpIGNvbnN0IHsKLSAgYXNzZXJ0KHR5cGUoKSA9PSBUWVBFX0ZJ
WEVENjQpOwotICByZXR1cm4gZml4ZWQ2NF87Ci19Ci1pbmxpbmUgY29uc3Qgc3RyaW5nJiBVbmtu
b3duRmllbGQ6Omxlbmd0aF9kZWxpbWl0ZWQoKSBjb25zdCB7Ci0gIGFzc2VydCh0eXBlKCkgPT0g
VFlQRV9MRU5HVEhfREVMSU1JVEVEKTsKLSAgcmV0dXJuICpsZW5ndGhfZGVsaW1pdGVkXy5zdHJp
bmdfdmFsdWVfOwotfQotaW5saW5lIGNvbnN0IFVua25vd25GaWVsZFNldCYgVW5rbm93bkZpZWxk
Ojpncm91cCgpIGNvbnN0IHsKLSAgYXNzZXJ0KHR5cGUoKSA9PSBUWVBFX0dST1VQKTsKLSAgcmV0
dXJuICpncm91cF87Ci19Ci0KLWlubGluZSB2b2lkIFVua25vd25GaWVsZDo6c2V0X3ZhcmludCh1
aW50NjQgdmFsdWUpIHsKLSAgYXNzZXJ0KHR5cGUoKSA9PSBUWVBFX1ZBUklOVCk7Ci0gIHZhcmlu
dF8gPSB2YWx1ZTsKLX0KLWlubGluZSB2b2lkIFVua25vd25GaWVsZDo6c2V0X2ZpeGVkMzIodWlu
dDMyIHZhbHVlKSB7Ci0gIGFzc2VydCh0eXBlKCkgPT0gVFlQRV9GSVhFRDMyKTsKLSAgZml4ZWQz
Ml8gPSB2YWx1ZTsKLX0KLWlubGluZSB2b2lkIFVua25vd25GaWVsZDo6c2V0X2ZpeGVkNjQodWlu
dDY0IHZhbHVlKSB7Ci0gIGFzc2VydCh0eXBlKCkgPT0gVFlQRV9GSVhFRDY0KTsKLSAgZml4ZWQ2
NF8gPSB2YWx1ZTsKLX0KLWlubGluZSB2b2lkIFVua25vd25GaWVsZDo6c2V0X2xlbmd0aF9kZWxp
bWl0ZWQoY29uc3Qgc3RyaW5nJiB2YWx1ZSkgewotICBhc3NlcnQodHlwZSgpID09IFRZUEVfTEVO
R1RIX0RFTElNSVRFRCk7Ci0gIGxlbmd0aF9kZWxpbWl0ZWRfLnN0cmluZ192YWx1ZV8tPmFzc2ln
bih2YWx1ZSk7Ci19Ci1pbmxpbmUgc3RyaW5nKiBVbmtub3duRmllbGQ6Om11dGFibGVfbGVuZ3Ro
X2RlbGltaXRlZCgpIHsKLSAgYXNzZXJ0KHR5cGUoKSA9PSBUWVBFX0xFTkdUSF9ERUxJTUlURUQp
OwotICByZXR1cm4gbGVuZ3RoX2RlbGltaXRlZF8uc3RyaW5nX3ZhbHVlXzsKLX0KLWlubGluZSBV
bmtub3duRmllbGRTZXQqIFVua25vd25GaWVsZDo6bXV0YWJsZV9ncm91cCgpIHsKLSAgYXNzZXJ0
KHR5cGUoKSA9PSBUWVBFX0dST1VQKTsKLSAgcmV0dXJuIGdyb3VwXzsKLX0KLQotaW5saW5lIGlu
dCBVbmtub3duRmllbGQ6OkdldExlbmd0aERlbGltaXRlZFNpemUoKSBjb25zdCB7Ci0gIEdPT0dM
RV9EQ0hFQ0tfRVEoVFlQRV9MRU5HVEhfREVMSU1JVEVELCB0eXBlKCkpOwotICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50PihsZW5ndGhfZGVsaW1pdGVkXy5zdHJpbmdfdmFsdWVfLT5zaXplKCkpOwot
fQotCi1pbmxpbmUgdm9pZCBVbmtub3duRmllbGQ6OlNldFR5cGUoVHlwZSB0eXBlKSB7Ci0gIHR5
cGVfID0gdHlwZTsKLX0KLQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFt
ZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfVU5LTk9XTl9GSUVMRF9T
RVRfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5rbm93bl9maWVsZF9zZXRf
dW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdW5rbm93bl9maWVsZF9zZXRfdW5pdHRl
c3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZTcyNjMwYTZmMzIxMjFjZmY1
NmRlOTI3YzgwNGM0OGNiMTU4OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0X3VuaXR0ZXN0
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjA5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMg
LSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFy
ZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8v
ICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBUaGlzIHRl
c3QgaXMgdGVzdGluZyBhIGxvdCBtb3JlIHRoYW4ganVzdCB0aGUgVW5rbm93bkZpZWxkU2V0IGNs
YXNzLiAgSXQKLS8vIHRlc3RzIGhhbmRsaW5nIG9mIHVua25vd24gZmllbGRzIHRocm91Z2hvdXQg
dGhlIHN5c3RlbS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3Nl
dC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGwuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvd2lyZV9mb3JtYXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucGIu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdF91dGlsLmg+Ci0KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvY2FsbGJhY2suaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dp
bmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbXV0ZXguaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0Lmg+Ci0jaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RsX3V0aWwuaD4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi11c2luZyBpbnRlcm5h
bDo6V2lyZUZvcm1hdDsKLQotY2xhc3MgVW5rbm93bkZpZWxkU2V0VGVzdCA6IHB1YmxpYyB0ZXN0
aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsKLSAgICBk
ZXNjcmlwdG9yXyA9IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRlc2NyaXB0b3IoKTsKLSAgICBU
ZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZhbGxfZmllbGRzXyk7Ci0gICAgYWxsX2ZpZWxkc18uU2Vy
aWFsaXplVG9TdHJpbmcoJmFsbF9maWVsZHNfZGF0YV8pOwotICAgIEFTU0VSVF9UUlVFKGVtcHR5
X21lc3NhZ2VfLlBhcnNlRnJvbVN0cmluZyhhbGxfZmllbGRzX2RhdGFfKSk7Ci0gICAgdW5rbm93
bl9maWVsZHNfID0gZW1wdHlfbWVzc2FnZV8ubXV0YWJsZV91bmtub3duX2ZpZWxkcygpOwotICB9
Ci0KLSAgY29uc3QgVW5rbm93bkZpZWxkKiBHZXRGaWVsZChjb25zdCBzdHJpbmcmIG5hbWUpIHsK
LSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPkZpbmRGaWVs
ZEJ5TmFtZShuYW1lKTsKLSAgICBpZiAoZmllbGQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB1bmtub3duX2ZpZWxkc18tPmZpZWxkX2NvdW50KCk7IGkrKykg
ewotICAgICAgaWYgKHVua25vd25fZmllbGRzXy0+ZmllbGQoaSkubnVtYmVyKCkgPT0gZmllbGQt
Pm51bWJlcigpKSB7Ci0gICAgICAgIHJldHVybiAmdW5rbm93bl9maWVsZHNfLT5maWVsZChpKTsK
LSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAvLyBDb25zdHJ1Y3Rz
IGEgcHJvdG9jb2wgYnVmZmVyIHdoaWNoIGNvbnRhaW5zIGZpZWxkcyB3aXRoIGFsbCB0aGUgc2Ft
ZQotICAvLyBudW1iZXJzIGFzIGFsbF9maWVsZHNfZGF0YV8gZXhjZXB0IHRoYXQgZWFjaCBmaWVs
ZCBpcyBzb21lIG90aGVyIHdpcmUKLSAgLy8gdHlwZS4KLSAgc3RyaW5nIEdldEJpemFycm9EYXRh
KCkgewotICAgIHVuaXR0ZXN0OjpUZXN0RW1wdHlNZXNzYWdlIGJpemFycm9fbWVzc2FnZTsKLSAg
ICBVbmtub3duRmllbGRTZXQqIGJpemFycm9fdW5rbm93bl9maWVsZHMgPQotICAgICAgYml6YXJy
b19tZXNzYWdlLm11dGFibGVfdW5rbm93bl9maWVsZHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IHVua25vd25fZmllbGRzXy0+ZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgICBjb25zdCBV
bmtub3duRmllbGQmIHVua25vd25fZmllbGQgPSB1bmtub3duX2ZpZWxkc18tPmZpZWxkKGkpOwot
ICAgICAgaWYgKHVua25vd25fZmllbGQudHlwZSgpID09IFVua25vd25GaWVsZDo6VFlQRV9WQVJJ
TlQpIHsKLSAgICAgICAgYml6YXJyb191bmtub3duX2ZpZWxkcy0+QWRkRml4ZWQzMih1bmtub3du
X2ZpZWxkLm51bWJlcigpLCAxKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGJpemFycm9fdW5r
bm93bl9maWVsZHMtPkFkZFZhcmludCh1bmtub3duX2ZpZWxkLm51bWJlcigpLCAxKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBzdHJpbmcgZGF0YTsKLSAgICBFWFBFQ1RfVFJVRShiaXphcnJvX21l
c3NhZ2UuU2VyaWFsaXplVG9TdHJpbmcoJmRhdGEpKTsKLSAgICByZXR1cm4gZGF0YTsKLSAgfQot
Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3JfOwotICB1bml0dGVzdDo6VGVzdEFsbFR5
cGVzIGFsbF9maWVsZHNfOwotICBzdHJpbmcgYWxsX2ZpZWxkc19kYXRhXzsKLQotICAvLyBBbiBl
bXB0eSBtZXNzYWdlIHRoYXQgaGFzIGJlZW4gcGFyc2VkIGZyb20gYWxsX2ZpZWxkc19kYXRhXy4g
IFNvLCBpdCBoYXMKLSAgLy8gdW5rbm93biBmaWVsZHMgb2YgZXZlcnkgdHlwZS4KLSAgdW5pdHRl
c3Q6OlRlc3RFbXB0eU1lc3NhZ2UgZW1wdHlfbWVzc2FnZV87Ci0gIFVua25vd25GaWVsZFNldCog
dW5rbm93bl9maWVsZHNfOwotfTsKLQotbmFtZXNwYWNlIHsKLQotVEVTVF9GKFVua25vd25GaWVs
ZFNldFRlc3QsIEFsbEZpZWxkc1ByZXNlbnQpIHsKLSAgLy8gQWxsIGZpZWxkcyBvZiBUZXN0QWxs
VHlwZXMgc2hvdWxkIGJlIHByZXNlbnQsIGluIG51bWVyaWMgb3JkZXIgKGJlY2F1c2UKLSAgLy8g
dGhhdCdzIHRoZSBvcmRlciB3ZSBwYXJzZWQgdGhlbSBpbikuICBGaWVsZHMgdGhhdCBhcmUgbm90
IHZhbGlkIGZpZWxkCi0gIC8vIG51bWJlcnMgb2YgVGVzdEFsbFR5cGVzIHNob3VsZCBOT1QgYmUg
cHJlc2VudC4KLQotICBpbnQgcG9zID0gMDsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDA7
IGkrKykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBkZXNjcmlwdG9yXy0+
RmluZEZpZWxkQnlOdW1iZXIoaSk7Ci0gICAgaWYgKGZpZWxkICE9IE5VTEwpIHsKLSAgICAgIEFT
U0VSVF9MVChwb3MsIHVua25vd25fZmllbGRzXy0+ZmllbGRfY291bnQoKSk7Ci0gICAgICAvLyBE
byBub3QgY2hlY2sgb25lb2YgZmllbGQgaWYgaXQgaXMgbm90IHNldC4KLSAgICAgIGlmIChmaWVs
ZC0+Y29udGFpbmluZ19vbmVvZigpID09IE5VTEwpIHsKLSAgICAgICAgRVhQRUNUX0VRKGksIHVu
a25vd25fZmllbGRzXy0+ZmllbGQocG9zKyspLm51bWJlcigpKTsKLSAgICAgIH0gZWxzZSBpZiAo
aSA9PSB1bmtub3duX2ZpZWxkc18tPmZpZWxkKHBvcykubnVtYmVyKCkpIHsKLSAgICAgICAgcG9z
Kys7Ci0gICAgICB9Ci0gICAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgICAg
Ly8gU2hvdWxkIGhhdmUgYSBzZWNvbmQgaW5zdGFuY2UuCi0gICAgICAgIEFTU0VSVF9MVChwb3Ms
IHVua25vd25fZmllbGRzXy0+ZmllbGRfY291bnQoKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpLCB1
bmtub3duX2ZpZWxkc18tPmZpZWxkKHBvcysrKS5udW1iZXIoKSk7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0gIEVYUEVDVF9FUSh1bmtub3duX2ZpZWxkc18tPmZpZWxkX2NvdW50KCksIHBvcyk7Ci19
Ci0KLVRFU1RfRihVbmtub3duRmllbGRTZXRUZXN0LCBWYXJpbnQpIHsKLSAgY29uc3QgVW5rbm93
bkZpZWxkKiBmaWVsZCA9IEdldEZpZWxkKCJvcHRpb25hbF9pbnQzMiIpOwotICBBU1NFUlRfVFJV
RShmaWVsZCAhPSBOVUxMKTsKLQotICBBU1NFUlRfRVEoVW5rbm93bkZpZWxkOjpUWVBFX1ZBUklO
VCwgZmllbGQtPnR5cGUoKSk7Ci0gIEVYUEVDVF9FUShhbGxfZmllbGRzXy5vcHRpb25hbF9pbnQz
MigpLCBmaWVsZC0+dmFyaW50KCkpOwotfQotCi1URVNUX0YoVW5rbm93bkZpZWxkU2V0VGVzdCwg
Rml4ZWQzMikgewotICBjb25zdCBVbmtub3duRmllbGQqIGZpZWxkID0gR2V0RmllbGQoIm9wdGlv
bmFsX2ZpeGVkMzIiKTsKLSAgQVNTRVJUX1RSVUUoZmllbGQgIT0gTlVMTCk7Ci0KLSAgQVNTRVJU
X0VRKFVua25vd25GaWVsZDo6VFlQRV9GSVhFRDMyLCBmaWVsZC0+dHlwZSgpKTsKLSAgRVhQRUNU
X0VRKGFsbF9maWVsZHNfLm9wdGlvbmFsX2ZpeGVkMzIoKSwgZmllbGQtPmZpeGVkMzIoKSk7Ci19
Ci0KLVRFU1RfRihVbmtub3duRmllbGRTZXRUZXN0LCBGaXhlZDY0KSB7Ci0gIGNvbnN0IFVua25v
d25GaWVsZCogZmllbGQgPSBHZXRGaWVsZCgib3B0aW9uYWxfZml4ZWQ2NCIpOwotICBBU1NFUlRf
VFJVRShmaWVsZCAhPSBOVUxMKTsKLQotICBBU1NFUlRfRVEoVW5rbm93bkZpZWxkOjpUWVBFX0ZJ
WEVENjQsIGZpZWxkLT50eXBlKCkpOwotICBFWFBFQ1RfRVEoYWxsX2ZpZWxkc18ub3B0aW9uYWxf
Zml4ZWQ2NCgpLCBmaWVsZC0+Zml4ZWQ2NCgpKTsKLX0KLQotVEVTVF9GKFVua25vd25GaWVsZFNl
dFRlc3QsIExlbmd0aERlbGltaXRlZCkgewotICBjb25zdCBVbmtub3duRmllbGQqIGZpZWxkID0g
R2V0RmllbGQoIm9wdGlvbmFsX3N0cmluZyIpOwotICBBU1NFUlRfVFJVRShmaWVsZCAhPSBOVUxM
KTsKLQotICBBU1NFUlRfRVEoVW5rbm93bkZpZWxkOjpUWVBFX0xFTkdUSF9ERUxJTUlURUQsIGZp
ZWxkLT50eXBlKCkpOwotICBFWFBFQ1RfRVEoYWxsX2ZpZWxkc18ub3B0aW9uYWxfc3RyaW5nKCks
IGZpZWxkLT5sZW5ndGhfZGVsaW1pdGVkKCkpOwotfQotCi1URVNUX0YoVW5rbm93bkZpZWxkU2V0
VGVzdCwgR3JvdXApIHsKLSAgY29uc3QgVW5rbm93bkZpZWxkKiBmaWVsZCA9IEdldEZpZWxkKCJv
cHRpb25hbGdyb3VwIik7Ci0gIEFTU0VSVF9UUlVFKGZpZWxkICE9IE5VTEwpOwotCi0gIEFTU0VS
VF9FUShVbmtub3duRmllbGQ6OlRZUEVfR1JPVVAsIGZpZWxkLT50eXBlKCkpOwotICBBU1NFUlRf
RVEoMSwgZmllbGQtPmdyb3VwKCkuZmllbGRfY291bnQoKSk7Ci0KLSAgY29uc3QgVW5rbm93bkZp
ZWxkJiBuZXN0ZWRfZmllbGQgPSBmaWVsZC0+Z3JvdXAoKS5maWVsZCgwKTsKLSAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBuZXN0ZWRfZmllbGRfZGVzY3JpcHRvciA9Ci0gICAgdW5pdHRlc3Q6OlRl
c3RBbGxUeXBlczo6T3B0aW9uYWxHcm91cDo6ZGVzY3JpcHRvcigpLT5GaW5kRmllbGRCeU5hbWUo
ImEiKTsKLSAgQVNTRVJUX1RSVUUobmVzdGVkX2ZpZWxkX2Rlc2NyaXB0b3IgIT0gTlVMTCk7Ci0K
LSAgRVhQRUNUX0VRKG5lc3RlZF9maWVsZF9kZXNjcmlwdG9yLT5udW1iZXIoKSwgbmVzdGVkX2Zp
ZWxkLm51bWJlcigpKTsKLSAgQVNTRVJUX0VRKFVua25vd25GaWVsZDo6VFlQRV9WQVJJTlQsIG5l
c3RlZF9maWVsZC50eXBlKCkpOwotICBFWFBFQ1RfRVEoYWxsX2ZpZWxkc18ub3B0aW9uYWxncm91
cCgpLmEoKSwgbmVzdGVkX2ZpZWxkLnZhcmludCgpKTsKLX0KLQotVEVTVF9GKFVua25vd25GaWVs
ZFNldFRlc3QsIFNlcmlhbGl6ZUZhc3RBbmRTbG93QXJlRXF1aXZhbGVudCkgewotICBpbnQgc2l6
ZSA9IFdpcmVGb3JtYXQ6OkNvbXB1dGVVbmtub3duRmllbGRzU2l6ZSgKLSAgICAgIGVtcHR5X21l
c3NhZ2VfLnVua25vd25fZmllbGRzKCkpOwotICBzdHJpbmcgc2xvd19idWZmZXI7Ci0gIHN0cmlu
ZyBmYXN0X2J1ZmZlcjsKLSAgc2xvd19idWZmZXIucmVzaXplKHNpemUpOwotICBmYXN0X2J1ZmZl
ci5yZXNpemUoc2l6ZSk7Ci0KLSAgdWludDgqIHRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDgqPihzdHJpbmdfYXNfYXJyYXkoJmZhc3RfYnVmZmVyKSk7Ci0gIHVpbnQ4KiByZXN1bHQgPSBX
aXJlRm9ybWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzVG9BcnJheSgKLSAgICAgICAgICBlbXB0
eV9tZXNzYWdlXy51bmtub3duX2ZpZWxkcygpLCB0YXJnZXQpOwotICBFWFBFQ1RfRVEoc2l6ZSwg
cmVzdWx0IC0gdGFyZ2V0KTsKLQotICB7Ci0gICAgaW86OkFycmF5T3V0cHV0U3RyZWFtIHJhd19z
dHJlYW0oc3RyaW5nX2FzX2FycmF5KCZzbG93X2J1ZmZlciksIHNpemUsIDEpOwotICAgIGlvOjpD
b2RlZE91dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKCZyYXdfc3RyZWFtKTsKLSAgICBXaXJlRm9y
bWF0OjpTZXJpYWxpemVVbmtub3duRmllbGRzKGVtcHR5X21lc3NhZ2VfLnVua25vd25fZmllbGRz
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0X3N0cmVh
bSk7Ci0gICAgQVNTRVJUX0ZBTFNFKG91dHB1dF9zdHJlYW0uSGFkRXJyb3IoKSk7Ci0gIH0KLSAg
RVhQRUNUX1RSVUUoZmFzdF9idWZmZXIgPT0gc2xvd19idWZmZXIpOwotfQotCi1URVNUX0YoVW5r
bm93bkZpZWxkU2V0VGVzdCwgU2VyaWFsaXplKSB7Ci0gIC8vIENoZWNrIHRoYXQgc2VyaWFsaXpp
bmcgdGhlIFVua25vd25GaWVsZFNldCBwcm9kdWNlcyB0aGUgb3JpZ2luYWwgZGF0YQotICAvLyBh
Z2Fpbi4KLQotICBzdHJpbmcgZGF0YTsKLSAgZW1wdHlfbWVzc2FnZV8uU2VyaWFsaXplVG9TdHJp
bmcoJmRhdGEpOwotCi0gIC8vIERvbid0IHVzZSBFWFBFQ1RfRVEgYmVjYXVzZSB3ZSBkb24ndCB3
YW50IHRvIGR1bXAgcmF3IGJpbmFyeSBkYXRhIHRvCi0gIC8vIHN0ZG91dC4KLSAgRVhQRUNUX1RS
VUUoZGF0YSA9PSBhbGxfZmllbGRzX2RhdGFfKTsKLX0KLQotVEVTVF9GKFVua25vd25GaWVsZFNl
dFRlc3QsIFBhcnNlVmlhUmVmbGVjdGlvbikgewotICAvLyBNYWtlIHN1cmUgZmllbGRzIGFyZSBw
cm9wZXJseSBwYXJzZWQgdG8gdGhlIFVua25vd25GaWVsZFNldCB3aGVuIHBhcnNpbmcKLSAgLy8g
dmlhIHJlZmxlY3Rpb24uCi0KLSAgdW5pdHRlc3Q6OlRlc3RFbXB0eU1lc3NhZ2UgbWVzc2FnZTsK
LSAgaW86OkFycmF5SW5wdXRTdHJlYW0gcmF3X2lucHV0KGFsbF9maWVsZHNfZGF0YV8uZGF0YSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19kYXRhXy5zaXpl
KCkpOwotICBpbzo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCgmcmF3X2lucHV0KTsKLSAgQVNTRVJU
X1RSVUUoV2lyZUZvcm1hdDo6UGFyc2VBbmRNZXJnZVBhcnRpYWwoJmlucHV0LCAmbWVzc2FnZSkp
OwotCi0gIEVYUEVDVF9FUShtZXNzYWdlLkRlYnVnU3RyaW5nKCksIGVtcHR5X21lc3NhZ2VfLkRl
YnVnU3RyaW5nKCkpOwotfQotCi1URVNUX0YoVW5rbm93bkZpZWxkU2V0VGVzdCwgU2VyaWFsaXpl
VmlhUmVmbGVjdGlvbikgewotICAvLyBNYWtlIHN1cmUgZmllbGRzIGFyZSBwcm9wZXJseSB3cml0
dGVuIGZyb20gdGhlIFVua25vd25GaWVsZFNldCB3aGVuCi0gIC8vIHNlcmlhbGl6aW5nIHZpYSBy
ZWZsZWN0aW9uLgotCi0gIHN0cmluZyBkYXRhOwotCi0gIHsKLSAgICBpbzo6U3RyaW5nT3V0cHV0
U3RyZWFtIHJhd19vdXRwdXQoJmRhdGEpOwotICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRw
dXQoJnJhd19vdXRwdXQpOwotICAgIGludCBzaXplID0gV2lyZUZvcm1hdDo6Qnl0ZVNpemUoZW1w
dHlfbWVzc2FnZV8pOwotICAgIFdpcmVGb3JtYXQ6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhl
bXB0eV9tZXNzYWdlXywgc2l6ZSwgJm91dHB1dCk7Ci0gICAgQVNTRVJUX0ZBTFNFKG91dHB1dC5I
YWRFcnJvcigpKTsKLSAgfQotCi0gIC8vIERvbid0IHVzZSBFWFBFQ1RfRVEgYmVjYXVzZSB3ZSBk
b24ndCB3YW50IHRvIGR1bXAgcmF3IGJpbmFyeSBkYXRhIHRvCi0gIC8vIHN0ZG91dC4KLSAgRVhQ
RUNUX1RSVUUoZGF0YSA9PSBhbGxfZmllbGRzX2RhdGFfKTsKLX0KLQotVEVTVF9GKFVua25vd25G
aWVsZFNldFRlc3QsIENvcHlGcm9tKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0RW1wdHlNZXNzYWdlIG1l
c3NhZ2U7Ci0KLSAgbWVzc2FnZS5Db3B5RnJvbShlbXB0eV9tZXNzYWdlXyk7Ci0KLSAgRVhQRUNU
X0VRKGVtcHR5X21lc3NhZ2VfLkRlYnVnU3RyaW5nKCksIG1lc3NhZ2UuRGVidWdTdHJpbmcoKSk7
Ci19Ci0KLVRFU1RfRihVbmtub3duRmllbGRTZXRUZXN0LCBTd2FwKSB7Ci0gIHVuaXR0ZXN0OjpU
ZXN0RW1wdHlNZXNzYWdlIG90aGVyX21lc3NhZ2U7Ci0gIEFTU0VSVF9UUlVFKG90aGVyX21lc3Nh
Z2UuUGFyc2VGcm9tU3RyaW5nKEdldEJpemFycm9EYXRhKCkpKTsKLQotICBFWFBFQ1RfR1QoZW1w
dHlfbWVzc2FnZV8udW5rbm93bl9maWVsZHMoKS5maWVsZF9jb3VudCgpLCAwKTsKLSAgRVhQRUNU
X0dUKG90aGVyX21lc3NhZ2UudW5rbm93bl9maWVsZHMoKS5maWVsZF9jb3VudCgpLCAwKTsKLSAg
Y29uc3Qgc3RyaW5nIGRlYnVnX3N0cmluZyA9IGVtcHR5X21lc3NhZ2VfLkRlYnVnU3RyaW5nKCk7
Ci0gIGNvbnN0IHN0cmluZyBvdGhlcl9kZWJ1Z19zdHJpbmcgPSBvdGhlcl9tZXNzYWdlLkRlYnVn
U3RyaW5nKCk7Ci0gIEVYUEVDVF9ORShkZWJ1Z19zdHJpbmcsIG90aGVyX2RlYnVnX3N0cmluZyk7
Ci0KLSAgZW1wdHlfbWVzc2FnZV8uU3dhcCgmb3RoZXJfbWVzc2FnZSk7Ci0gIEVYUEVDVF9FUShk
ZWJ1Z19zdHJpbmcsIG90aGVyX21lc3NhZ2UuRGVidWdTdHJpbmcoKSk7Ci0gIEVYUEVDVF9FUShv
dGhlcl9kZWJ1Z19zdHJpbmcsIGVtcHR5X21lc3NhZ2VfLkRlYnVnU3RyaW5nKCkpOwotfQotCi1U
RVNUX0YoVW5rbm93bkZpZWxkU2V0VGVzdCwgU3dhcFdpdGhTZWxmKSB7Ci0gIGNvbnN0IHN0cmlu
ZyBkZWJ1Z19zdHJpbmcgPSBlbXB0eV9tZXNzYWdlXy5EZWJ1Z1N0cmluZygpOwotICBFWFBFQ1Rf
R1QoZW1wdHlfbWVzc2FnZV8udW5rbm93bl9maWVsZHMoKS5maWVsZF9jb3VudCgpLCAwKTsKLQot
ICBlbXB0eV9tZXNzYWdlXy5Td2FwKCZlbXB0eV9tZXNzYWdlXyk7Ci0gIEVYUEVDVF9HVChlbXB0
eV9tZXNzYWdlXy51bmtub3duX2ZpZWxkcygpLmZpZWxkX2NvdW50KCksIDApOwotICBFWFBFQ1Rf
RVEoZGVidWdfc3RyaW5nLCBlbXB0eV9tZXNzYWdlXy5EZWJ1Z1N0cmluZygpKTsKLX0KLQotVEVT
VF9GKFVua25vd25GaWVsZFNldFRlc3QsIE1lcmdlRnJvbSkgewotICB1bml0dGVzdDo6VGVzdEVt
cHR5TWVzc2FnZSBzb3VyY2UsIGRlc3RpbmF0aW9uOwotCi0gIGRlc3RpbmF0aW9uLm11dGFibGVf
dW5rbm93bl9maWVsZHMoKS0+QWRkVmFyaW50KDEsIDEpOwotICBkZXN0aW5hdGlvbi5tdXRhYmxl
X3Vua25vd25fZmllbGRzKCktPkFkZFZhcmludCgzLCAyKTsKLSAgc291cmNlLm11dGFibGVfdW5r
bm93bl9maWVsZHMoKS0+QWRkVmFyaW50KDIsIDMpOwotICBzb3VyY2UubXV0YWJsZV91bmtub3du
X2ZpZWxkcygpLT5BZGRWYXJpbnQoMywgNCk7Ci0KLSAgZGVzdGluYXRpb24uTWVyZ2VGcm9tKHNv
dXJjZSk7Ci0KLSAgRVhQRUNUX0VRKAotICAgIC8vIE5vdGU6ICBUaGUgb3JkZXJpbmcgb2YgZmll
bGRzIGhlcmUgZGVwZW5kcyBvbiB0aGUgb3JkZXJpbmcgb2YgYWRkcwotICAgIC8vICAgYW5kIG1l
cmdpbmcsIGFib3ZlLgotICAgICIxOiAxXG4iCi0gICAgIjM6IDJcbiIKLSAgICAiMjogM1xuIgot
ICAgICIzOiA0XG4iLAotICAgIGRlc3RpbmF0aW9uLkRlYnVnU3RyaW5nKCkpOwotfQotCi0KLVRF
U1RfRihVbmtub3duRmllbGRTZXRUZXN0LCBDbGVhcikgewotICAvLyBDbGVhciB0aGUgc2V0Lgot
ICBlbXB0eV9tZXNzYWdlXy5DbGVhcigpOwotICBFWFBFQ1RfRVEoMCwgdW5rbm93bl9maWVsZHNf
LT5maWVsZF9jb3VudCgpKTsKLX0KLQotVEVTVF9GKFVua25vd25GaWVsZFNldFRlc3QsIENsZWFy
QW5kRnJlZU1lbW9yeSkgewotICBFWFBFQ1RfR1QodW5rbm93bl9maWVsZHNfLT5maWVsZF9jb3Vu
dCgpLCAwKTsKLSAgdW5rbm93bl9maWVsZHNfLT5DbGVhckFuZEZyZWVNZW1vcnkoKTsKLSAgRVhQ
RUNUX0VRKDAsIHVua25vd25fZmllbGRzXy0+ZmllbGRfY291bnQoKSk7Ci0gIHVua25vd25fZmll
bGRzXy0+QWRkVmFyaW50KDEyMzQ1NiwgNjU0MzIxKTsKLSAgRVhQRUNUX0VRKDEsIHVua25vd25f
ZmllbGRzXy0+ZmllbGRfY291bnQoKSk7Ci19Ci0KLVRFU1RfRihVbmtub3duRmllbGRTZXRUZXN0
LCBQYXJzZUtub3duQW5kVW5rbm93bikgewotICAvLyBUZXN0IG1peGluZyBrbm93biBhbmQgdW5r
bm93biBmaWVsZHMgd2hlbiBwYXJzaW5nLgotCi0gIHVuaXR0ZXN0OjpUZXN0RW1wdHlNZXNzYWdl
IHNvdXJjZTsKLSAgc291cmNlLm11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+QWRkVmFyaW50KDEy
MzQ1NiwgNjU0MzIxKTsKLSAgc3RyaW5nIGRhdGE7Ci0gIEFTU0VSVF9UUlVFKHNvdXJjZS5TZXJp
YWxpemVUb1N0cmluZygmZGF0YSkpOwotCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgZGVzdGlu
YXRpb247Ci0gIEFTU0VSVF9UUlVFKGRlc3RpbmF0aW9uLlBhcnNlRnJvbVN0cmluZyhhbGxfZmll
bGRzX2RhdGFfICsgZGF0YSkpOwotCi0gIFRlc3RVdGlsOjpFeHBlY3RBbGxGaWVsZHNTZXQoZGVz
dGluYXRpb24pOwotICBBU1NFUlRfRVEoMSwgZGVzdGluYXRpb24udW5rbm93bl9maWVsZHMoKS5m
aWVsZF9jb3VudCgpKTsKLSAgQVNTRVJUX0VRKFVua25vd25GaWVsZDo6VFlQRV9WQVJJTlQsCi0g
ICAgICAgICAgICBkZXN0aW5hdGlvbi51bmtub3duX2ZpZWxkcygpLmZpZWxkKDApLnR5cGUoKSk7
Ci0gIEVYUEVDVF9FUSg2NTQzMjEsIGRlc3RpbmF0aW9uLnVua25vd25fZmllbGRzKCkuZmllbGQo
MCkudmFyaW50KCkpOwotfQotCi1URVNUX0YoVW5rbm93bkZpZWxkU2V0VGVzdCwgV3JvbmdUeXBl
VHJlYXRlZEFzVW5rbm93bikgewotICAvLyBUZXN0IHRoYXQgZmllbGRzIG9mIHRoZSB3cm9uZyB3
aXJlIHR5cGUgYXJlIHRyZWF0ZWQgbGlrZSB1bmtub3duIGZpZWxkcwotICAvLyB3aGVuIHBhcnNp
bmcuCi0KLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBhbGxfdHlwZXNfbWVzc2FnZTsKLSAgdW5p
dHRlc3Q6OlRlc3RFbXB0eU1lc3NhZ2UgZW1wdHlfbWVzc2FnZTsKLSAgc3RyaW5nIGJpemFycm9f
ZGF0YSA9IEdldEJpemFycm9EYXRhKCk7Ci0gIEFTU0VSVF9UUlVFKGFsbF90eXBlc19tZXNzYWdl
LlBhcnNlRnJvbVN0cmluZyhiaXphcnJvX2RhdGEpKTsKLSAgQVNTRVJUX1RSVUUoZW1wdHlfbWVz
c2FnZS5QYXJzZUZyb21TdHJpbmcoYml6YXJyb19kYXRhKSk7Ci0KLSAgLy8gQWxsIGZpZWxkcyBz
aG91bGQgaGF2ZSBiZWVuIGludGVycHJldGVkIGFzIHVua25vd24sIHNvIHRoZSBkZWJ1ZyBzdHJp
bmdzCi0gIC8vIHNob3VsZCBiZSB0aGUgc2FtZS4KLSAgRVhQRUNUX0VRKGVtcHR5X21lc3NhZ2Uu
RGVidWdTdHJpbmcoKSwgYWxsX3R5cGVzX21lc3NhZ2UuRGVidWdTdHJpbmcoKSk7Ci19Ci0KLVRF
U1RfRihVbmtub3duRmllbGRTZXRUZXN0LCBXcm9uZ1R5cGVUcmVhdGVkQXNVbmtub3duVmlhUmVm
bGVjdGlvbikgewotICAvLyBTYW1lIGFzIFdyb25nVHlwZVRyZWF0ZWRBc1Vua25vd24gYnV0IHZp
YSB0aGUgcmVmbGVjdGlvbiBpbnRlcmZhY2UuCi0KLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBh
bGxfdHlwZXNfbWVzc2FnZTsKLSAgdW5pdHRlc3Q6OlRlc3RFbXB0eU1lc3NhZ2UgZW1wdHlfbWVz
c2FnZTsKLSAgc3RyaW5nIGJpemFycm9fZGF0YSA9IEdldEJpemFycm9EYXRhKCk7Ci0gIGlvOjpB
cnJheUlucHV0U3RyZWFtIHJhd19pbnB1dChiaXphcnJvX2RhdGEuZGF0YSgpLCBiaXphcnJvX2Rh
dGEuc2l6ZSgpKTsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQoJnJhd19pbnB1dCk7Ci0g
IEFTU0VSVF9UUlVFKFdpcmVGb3JtYXQ6OlBhcnNlQW5kTWVyZ2VQYXJ0aWFsKCZpbnB1dCwgJmFs
bF90eXBlc19tZXNzYWdlKSk7Ci0gIEFTU0VSVF9UUlVFKGVtcHR5X21lc3NhZ2UuUGFyc2VGcm9t
U3RyaW5nKGJpemFycm9fZGF0YSkpOwotCi0gIEVYUEVDVF9FUShlbXB0eV9tZXNzYWdlLkRlYnVn
U3RyaW5nKCksIGFsbF90eXBlc19tZXNzYWdlLkRlYnVnU3RyaW5nKCkpOwotfQotCi1URVNUX0Yo
VW5rbm93bkZpZWxkU2V0VGVzdCwgVW5rbm93bkV4dGVuc2lvbnMpIHsKLSAgLy8gTWFrZSBzdXJl
IGZpZWxkcyBhcmUgcHJvcGVybHkgcGFyc2VkIHRvIHRoZSBVbmtub3duRmllbGRTZXQgZXZlbiB3
aGVuCi0gIC8vIHRoZXkgYXJlIGRlY2xhcmVkIGFzIGV4dGVuc2lvbiBudW1iZXJzLgotCi0gIHVu
aXR0ZXN0OjpUZXN0RW1wdHlNZXNzYWdlV2l0aEV4dGVuc2lvbnMgbWVzc2FnZTsKLSAgQVNTRVJU
X1RSVUUobWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoYWxsX2ZpZWxkc19kYXRhXykpOwotCi0gIEVY
UEVDVF9FUShtZXNzYWdlLkRlYnVnU3RyaW5nKCksIGVtcHR5X21lc3NhZ2VfLkRlYnVnU3RyaW5n
KCkpOwotfQotCi1URVNUX0YoVW5rbm93bkZpZWxkU2V0VGVzdCwgVW5rbm93bkV4dGVuc2lvbnNS
ZWZsZWN0aW9uKSB7Ci0gIC8vIFNhbWUgYXMgVW5rbm93bkV4dGVuc2lvbnMgZXhjZXB0IHBhcnNp
bmcgdmlhIHJlZmxlY3Rpb24uCi0KLSAgdW5pdHRlc3Q6OlRlc3RFbXB0eU1lc3NhZ2VXaXRoRXh0
ZW5zaW9ucyBtZXNzYWdlOwotICBpbzo6QXJyYXlJbnB1dFN0cmVhbSByYXdfaW5wdXQoYWxsX2Zp
ZWxkc19kYXRhXy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxf
ZmllbGRzX2RhdGFfLnNpemUoKSk7Ci0gIGlvOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KCZyYXdf
aW5wdXQpOwotICBBU1NFUlRfVFJVRShXaXJlRm9ybWF0OjpQYXJzZUFuZE1lcmdlUGFydGlhbCgm
aW5wdXQsICZtZXNzYWdlKSk7Ci0KLSAgRVhQRUNUX0VRKG1lc3NhZ2UuRGVidWdTdHJpbmcoKSwg
ZW1wdHlfbWVzc2FnZV8uRGVidWdTdHJpbmcoKSk7Ci19Ci0KLVRFU1RfRihVbmtub3duRmllbGRT
ZXRUZXN0LCBXcm9uZ0V4dGVuc2lvblR5cGVUcmVhdGVkQXNVbmtub3duKSB7Ci0gIC8vIFRlc3Qg
dGhhdCBmaWVsZHMgb2YgdGhlIHdyb25nIHdpcmUgdHlwZSBhcmUgdHJlYXRlZCBsaWtlIHVua25v
d24gZmllbGRzCi0gIC8vIHdoZW4gcGFyc2luZyBleHRlbnNpb25zLgotCi0gIHVuaXR0ZXN0OjpU
ZXN0QWxsRXh0ZW5zaW9ucyBhbGxfZXh0ZW5zaW9uc19tZXNzYWdlOwotICB1bml0dGVzdDo6VGVz
dEVtcHR5TWVzc2FnZSBlbXB0eV9tZXNzYWdlOwotICBzdHJpbmcgYml6YXJyb19kYXRhID0gR2V0
Qml6YXJyb0RhdGEoKTsKLSAgQVNTRVJUX1RSVUUoYWxsX2V4dGVuc2lvbnNfbWVzc2FnZS5QYXJz
ZUZyb21TdHJpbmcoYml6YXJyb19kYXRhKSk7Ci0gIEFTU0VSVF9UUlVFKGVtcHR5X21lc3NhZ2Uu
UGFyc2VGcm9tU3RyaW5nKGJpemFycm9fZGF0YSkpOwotCi0gIC8vIEFsbCBmaWVsZHMgc2hvdWxk
IGhhdmUgYmVlbiBpbnRlcnByZXRlZCBhcyB1bmtub3duLCBzbyB0aGUgZGVidWcgc3RyaW5ncwot
ICAvLyBzaG91bGQgYmUgdGhlIHNhbWUuCi0gIEVYUEVDVF9FUShlbXB0eV9tZXNzYWdlLkRlYnVn
U3RyaW5nKCksIGFsbF9leHRlbnNpb25zX21lc3NhZ2UuRGVidWdTdHJpbmcoKSk7Ci19Ci0KLVRF
U1RfRihVbmtub3duRmllbGRTZXRUZXN0LCBVbmtub3duRW51bVZhbHVlKSB7Ci0gIHVzaW5nIHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXM7Ci0gIHVzaW5nIHVuaXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9u
czsKLSAgdXNpbmcgdW5pdHRlc3Q6OlRlc3RFbXB0eU1lc3NhZ2U7Ci0KLSAgY29uc3QgRmllbGRE
ZXNjcmlwdG9yKiBzaW5ndWxhcl9maWVsZCA9Ci0gICAgVGVzdEFsbFR5cGVzOjpkZXNjcmlwdG9y
KCktPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfbmVzdGVkX2VudW0iKTsKLSAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiByZXBlYXRlZF9maWVsZCA9Ci0gICAgVGVzdEFsbFR5cGVzOjpkZXNjcmlw
dG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfbmVzdGVkX2VudW0iKTsKLSAgQVNTRVJU
X1RSVUUoc2luZ3VsYXJfZmllbGQgIT0gTlVMTCk7Ci0gIEFTU0VSVF9UUlVFKHJlcGVhdGVkX2Zp
ZWxkICE9IE5VTEwpOwotCi0gIHN0cmluZyBkYXRhOwotCi0gIHsKLSAgICBUZXN0RW1wdHlNZXNz
YWdlIGVtcHR5X21lc3NhZ2U7Ci0gICAgVW5rbm93bkZpZWxkU2V0KiB1bmtub3duX2ZpZWxkcyA9
IGVtcHR5X21lc3NhZ2UubXV0YWJsZV91bmtub3duX2ZpZWxkcygpOwotICAgIHVua25vd25fZmll
bGRzLT5BZGRWYXJpbnQoc2luZ3VsYXJfZmllbGQtPm51bWJlcigpLCBUZXN0QWxsVHlwZXM6OkJB
Uik7Ci0gICAgdW5rbm93bl9maWVsZHMtPkFkZFZhcmludChzaW5ndWxhcl9maWVsZC0+bnVtYmVy
KCksIDUpOyAgLy8gbm90IHZhbGlkCi0gICAgdW5rbm93bl9maWVsZHMtPkFkZFZhcmludChyZXBl
YXRlZF9maWVsZC0+bnVtYmVyKCksIFRlc3RBbGxUeXBlczo6Rk9PKTsKLSAgICB1bmtub3duX2Zp
ZWxkcy0+QWRkVmFyaW50KHJlcGVhdGVkX2ZpZWxkLT5udW1iZXIoKSwgNCk7ICAvLyBub3QgdmFs
aWQKLSAgICB1bmtub3duX2ZpZWxkcy0+QWRkVmFyaW50KHJlcGVhdGVkX2ZpZWxkLT5udW1iZXIo
KSwgVGVzdEFsbFR5cGVzOjpCQVopOwotICAgIHVua25vd25fZmllbGRzLT5BZGRWYXJpbnQocmVw
ZWF0ZWRfZmllbGQtPm51bWJlcigpLCA2KTsgIC8vIG5vdCB2YWxpZAotICAgIGVtcHR5X21lc3Nh
Z2UuU2VyaWFsaXplVG9TdHJpbmcoJmRhdGEpOwotICB9Ci0KLSAgewotICAgIFRlc3RBbGxUeXBl
cyBtZXNzYWdlOwotICAgIEFTU0VSVF9UUlVFKG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKGRhdGEp
KTsKLSAgICBFWFBFQ1RfRVEoVGVzdEFsbFR5cGVzOjpCQVIsIG1lc3NhZ2Uub3B0aW9uYWxfbmVz
dGVkX2VudW0oKSk7Ci0gICAgQVNTRVJUX0VRKDIsIG1lc3NhZ2UucmVwZWF0ZWRfbmVzdGVkX2Vu
dW1fc2l6ZSgpKTsKLSAgICBFWFBFQ1RfRVEoVGVzdEFsbFR5cGVzOjpGT08sIG1lc3NhZ2UucmVw
ZWF0ZWRfbmVzdGVkX2VudW0oMCkpOwotICAgIEVYUEVDVF9FUShUZXN0QWxsVHlwZXM6OkJBWiwg
bWVzc2FnZS5yZXBlYXRlZF9uZXN0ZWRfZW51bSgxKSk7Ci0KLSAgICBjb25zdCBVbmtub3duRmll
bGRTZXQmIHVua25vd25fZmllbGRzID0gbWVzc2FnZS51bmtub3duX2ZpZWxkcygpOwotICAgIEFT
U0VSVF9FUSgzLCB1bmtub3duX2ZpZWxkcy5maWVsZF9jb3VudCgpKTsKLQotICAgIEVYUEVDVF9F
UShzaW5ndWxhcl9maWVsZC0+bnVtYmVyKCksIHVua25vd25fZmllbGRzLmZpZWxkKDApLm51bWJl
cigpKTsKLSAgICBBU1NFUlRfRVEoVW5rbm93bkZpZWxkOjpUWVBFX1ZBUklOVCwgdW5rbm93bl9m
aWVsZHMuZmllbGQoMCkudHlwZSgpKTsKLSAgICBFWFBFQ1RfRVEoNSwgdW5rbm93bl9maWVsZHMu
ZmllbGQoMCkudmFyaW50KCkpOwotCi0gICAgRVhQRUNUX0VRKHJlcGVhdGVkX2ZpZWxkLT5udW1i
ZXIoKSwgdW5rbm93bl9maWVsZHMuZmllbGQoMSkubnVtYmVyKCkpOwotICAgIEFTU0VSVF9FUShV
bmtub3duRmllbGQ6OlRZUEVfVkFSSU5ULCB1bmtub3duX2ZpZWxkcy5maWVsZCgxKS50eXBlKCkp
OwotICAgIEVYUEVDVF9FUSg0LCB1bmtub3duX2ZpZWxkcy5maWVsZCgxKS52YXJpbnQoKSk7Ci0K
LSAgICBFWFBFQ1RfRVEocmVwZWF0ZWRfZmllbGQtPm51bWJlcigpLCB1bmtub3duX2ZpZWxkcy5m
aWVsZCgyKS5udW1iZXIoKSk7Ci0gICAgQVNTRVJUX0VRKFVua25vd25GaWVsZDo6VFlQRV9WQVJJ
TlQsIHVua25vd25fZmllbGRzLmZpZWxkKDIpLnR5cGUoKSk7Ci0gICAgRVhQRUNUX0VRKDYsIHVu
a25vd25fZmllbGRzLmZpZWxkKDIpLnZhcmludCgpKTsKLSAgfQotCi0gIHsKLSAgICB1c2luZyB1
bml0dGVzdDo6b3B0aW9uYWxfbmVzdGVkX2VudW1fZXh0ZW5zaW9uOwotICAgIHVzaW5nIHVuaXR0
ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb247Ci0KLSAgICBUZXN0QWxsRXh0ZW5z
aW9ucyBtZXNzYWdlOwotICAgIEFTU0VSVF9UUlVFKG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKGRh
dGEpKTsKLSAgICBFWFBFQ1RfRVEoVGVzdEFsbFR5cGVzOjpCQVIsCi0gICAgICAgICAgICAgIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKG9wdGlvbmFsX25lc3RlZF9lbnVtX2V4dGVuc2lvbikpOwotICAg
IEFTU0VSVF9FUSgyLCBtZXNzYWdlLkV4dGVuc2lvblNpemUocmVwZWF0ZWRfbmVzdGVkX2VudW1f
ZXh0ZW5zaW9uKSk7Ci0gICAgRVhQRUNUX0VRKFRlc3RBbGxUeXBlczo6Rk9PLAotICAgICAgICAg
ICAgICBtZXNzYWdlLkdldEV4dGVuc2lvbihyZXBlYXRlZF9uZXN0ZWRfZW51bV9leHRlbnNpb24s
IDApKTsKLSAgICBFWFBFQ1RfRVEoVGVzdEFsbFR5cGVzOjpCQVosCi0gICAgICAgICAgICAgIG1l
c3NhZ2UuR2V0RXh0ZW5zaW9uKHJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbiwgMSkpOwot
Ci0gICAgY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcyA9IG1lc3NhZ2UudW5r
bm93bl9maWVsZHMoKTsKLSAgICBBU1NFUlRfRVEoMywgdW5rbm93bl9maWVsZHMuZmllbGRfY291
bnQoKSk7Ci0KLSAgICBFWFBFQ1RfRVEoc2luZ3VsYXJfZmllbGQtPm51bWJlcigpLCB1bmtub3du
X2ZpZWxkcy5maWVsZCgwKS5udW1iZXIoKSk7Ci0gICAgQVNTRVJUX0VRKFVua25vd25GaWVsZDo6
VFlQRV9WQVJJTlQsIHVua25vd25fZmllbGRzLmZpZWxkKDApLnR5cGUoKSk7Ci0gICAgRVhQRUNU
X0VRKDUsIHVua25vd25fZmllbGRzLmZpZWxkKDApLnZhcmludCgpKTsKLQotICAgIEVYUEVDVF9F
UShyZXBlYXRlZF9maWVsZC0+bnVtYmVyKCksIHVua25vd25fZmllbGRzLmZpZWxkKDEpLm51bWJl
cigpKTsKLSAgICBBU1NFUlRfRVEoVW5rbm93bkZpZWxkOjpUWVBFX1ZBUklOVCwgdW5rbm93bl9m
aWVsZHMuZmllbGQoMSkudHlwZSgpKTsKLSAgICBFWFBFQ1RfRVEoNCwgdW5rbm93bl9maWVsZHMu
ZmllbGQoMSkudmFyaW50KCkpOwotCi0gICAgRVhQRUNUX0VRKHJlcGVhdGVkX2ZpZWxkLT5udW1i
ZXIoKSwgdW5rbm93bl9maWVsZHMuZmllbGQoMikubnVtYmVyKCkpOwotICAgIEFTU0VSVF9FUShV
bmtub3duRmllbGQ6OlRZUEVfVkFSSU5ULCB1bmtub3duX2ZpZWxkcy5maWVsZCgyKS50eXBlKCkp
OwotICAgIEVYUEVDVF9FUSg2LCB1bmtub3duX2ZpZWxkcy5maWVsZCgyKS52YXJpbnQoKSk7Ci0g
IH0KLX0KLQotVEVTVF9GKFVua25vd25GaWVsZFNldFRlc3QsIFNwYWNlVXNlZEV4Y2x1ZGluZ1Nl
bGYpIHsKLSAgVW5rbm93bkZpZWxkU2V0IGVtcHR5OwotICBlbXB0eS5BZGRWYXJpbnQoMSwgMCk7
Ci0gIEVYUEVDVF9FUShzaXplb2YodmVjdG9yPFVua25vd25GaWVsZD4pICsgc2l6ZW9mKFVua25v
d25GaWVsZCksCi0gICAgICAgICAgICBlbXB0eS5TcGFjZVVzZWRFeGNsdWRpbmdTZWxmKCkpOwot
fQotCi1URVNUX0YoVW5rbm93bkZpZWxkU2V0VGVzdCwgU3BhY2VVc2VkKSB7Ci0gIHVuaXR0ZXN0
OjpUZXN0RW1wdHlNZXNzYWdlIGVtcHR5X21lc3NhZ2U7Ci0KLSAgLy8gTWFrZSBzdXJlIGFuIHVu
a25vd24gZmllbGQgc2V0IGhhcyB6ZXJvIHNwYWNlIHVzZWQgdW50aWwgYSBmaWVsZCBpcwotICAv
LyBhY3R1YWxseSBhZGRlZC4KLSAgaW50IGJhc2Vfc2l6ZSA9IGVtcHR5X21lc3NhZ2UuU3BhY2VV
c2VkKCk7Ci0gIFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZHMgPSBlbXB0eV9tZXNzYWdl
Lm11dGFibGVfdW5rbm93bl9maWVsZHMoKTsKLSAgRVhQRUNUX0VRKGJhc2Vfc2l6ZSwgZW1wdHlf
bWVzc2FnZS5TcGFjZVVzZWQoKSk7Ci0KLSAgLy8gTWFrZSBzdXJlIGVhY2ggdGhpbmcgd2UgYWRk
IHRvIHRoZSBzZXQgaW5jcmVhc2VzIHRoZSBTcGFjZVVzZWQoKS4KLSAgdW5rbm93bl9maWVsZHMt
PkFkZFZhcmludCgxLCAwKTsKLSAgRVhQRUNUX0xUKGJhc2Vfc2l6ZSwgZW1wdHlfbWVzc2FnZS5T
cGFjZVVzZWQoKSk7Ci0gIGJhc2Vfc2l6ZSA9IGVtcHR5X21lc3NhZ2UuU3BhY2VVc2VkKCk7Ci0K
LSAgc3RyaW5nKiBzdHIgPSB1bmtub3duX2ZpZWxkcy0+QWRkTGVuZ3RoRGVsaW1pdGVkKDEpOwot
ICBFWFBFQ1RfTFQoYmFzZV9zaXplLCBlbXB0eV9tZXNzYWdlLlNwYWNlVXNlZCgpKTsKLSAgYmFz
ZV9zaXplID0gZW1wdHlfbWVzc2FnZS5TcGFjZVVzZWQoKTsKLQotICBzdHItPmFzc2lnbihzaXpl
b2Yoc3RyaW5nKSArIDEsICd4Jyk7Ci0gIEVYUEVDVF9MVChiYXNlX3NpemUsIGVtcHR5X21lc3Nh
Z2UuU3BhY2VVc2VkKCkpOwotICBiYXNlX3NpemUgPSBlbXB0eV9tZXNzYWdlLlNwYWNlVXNlZCgp
OwotCi0gIFVua25vd25GaWVsZFNldCogZ3JvdXAgPSB1bmtub3duX2ZpZWxkcy0+QWRkR3JvdXAo
MSk7Ci0gIEVYUEVDVF9MVChiYXNlX3NpemUsIGVtcHR5X21lc3NhZ2UuU3BhY2VVc2VkKCkpOwot
ICBiYXNlX3NpemUgPSBlbXB0eV9tZXNzYWdlLlNwYWNlVXNlZCgpOwotCi0gIGdyb3VwLT5BZGRW
YXJpbnQoMSwgMCk7Ci0gIEVYUEVDVF9MVChiYXNlX3NpemUsIGVtcHR5X21lc3NhZ2UuU3BhY2VV
c2VkKCkpOwotfQotCi0KLVRFU1RfRihVbmtub3duRmllbGRTZXRUZXN0LCBFbXB0eSkgewotICBV
bmtub3duRmllbGRTZXQgdW5rbm93bl9maWVsZHM7Ci0gIEVYUEVDVF9UUlVFKHVua25vd25fZmll
bGRzLmVtcHR5KCkpOwotICB1bmtub3duX2ZpZWxkcy5BZGRWYXJpbnQoNiwgMTIzKTsKLSAgRVhQ
RUNUX0ZBTFNFKHVua25vd25fZmllbGRzLmVtcHR5KCkpOwotICB1bmtub3duX2ZpZWxkcy5DbGVh
cigpOwotICBFWFBFQ1RfVFJVRSh1bmtub3duX2ZpZWxkcy5lbXB0eSgpKTsKLX0KLQotVEVTVF9G
KFVua25vd25GaWVsZFNldFRlc3QsIERlbGV0ZVN1YnJhbmdlKSB7Ci0gIC8vIEV4aGF1c3RpdmVs
eSB0ZXN0IHRoZSBkZWxldGlvbiBvZiBldmVyeSBwb3NzaWJsZSBzdWJyYW5nZSBpbiBhcnJheXMg
b2YgYWxsCi0gIC8vIHNpemVzIGZyb20gMCB0aHJvdWdoIDkuCi0gIGZvciAoaW50IHNpemUgPSAw
OyBzaXplIDwgMTA7ICsrc2l6ZSkgewotICAgIGZvciAoaW50IG51bSA9IDA7IG51bSA8PSBzaXpl
OyArK251bSkgewotICAgICAgZm9yIChpbnQgc3RhcnQgPSAwOyBzdGFydCA8IHNpemUgLSBudW07
ICsrc3RhcnQpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgc2V0IHdpdGggInNpemUiIGZpZWxkcy4K
LSAgICAgICAgVW5rbm93bkZpZWxkU2V0IHVua25vd247Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgdW5rbm93bi5BZGRGaXhlZDMyKGksIGkpOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIERlbGV0ZSB0aGUgc3BlY2lmaWVkIHN1YnJhbmdlLgotICAg
ICAgICB1bmtub3duLkRlbGV0ZVN1YnJhbmdlKHN0YXJ0LCBudW0pOwotICAgICAgICAvLyBNYWtl
IHN1cmUgdGhlIHJlc3VsdGluZyBmaWVsZCB2YWx1ZXMgYXJlIHN0aWxsIGNvcnJlY3QuCi0gICAg
ICAgIEVYUEVDVF9FUShzaXplIC0gbnVtLCB1bmtub3duLmZpZWxkX2NvdW50KCkpOwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHVua25vd24uZmllbGRfY291bnQoKTsgKytpKSB7Ci0gICAg
ICAgICAgaWYgKGkgPCBzdGFydCkgewotICAgICAgICAgICAgRVhQRUNUX0VRKGksIHVua25vd24u
ZmllbGQoaSkuZml4ZWQzMigpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRVhQ
RUNUX0VRKGkgKyBudW0sIHVua25vd24uZmllbGQoaSkuZml4ZWQzMigpKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBDaGVja0RlbGV0ZUJ5
TnVtYmVyKGNvbnN0IHZlY3RvcjxpbnQ+JiBmaWVsZF9udW1iZXJzLCBpbnQgZGVsZXRlZF9udW1i
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8aW50PiYgZXhwZWN0ZWRf
ZmllbGRfbnVibWVycykgewotICBVbmtub3duRmllbGRTZXQgdW5rbm93bl9maWVsZHM7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmllbGRfbnVtYmVycy5zaXplKCk7ICsraSkgewotICAgIHVua25v
d25fZmllbGRzLkFkZEZpeGVkMzIoZmllbGRfbnVtYmVyc1tpXSwgaSk7Ci0gIH0KLSAgdW5rbm93
bl9maWVsZHMuRGVsZXRlQnlOdW1iZXIoZGVsZXRlZF9udW1iZXIpOwotICBBU1NFUlRfRVEoZXhw
ZWN0ZWRfZmllbGRfbnVibWVycy5zaXplKCksIHVua25vd25fZmllbGRzLmZpZWxkX2NvdW50KCkp
OwotICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkX2ZpZWxkX251Ym1lcnMuc2l6ZSgpOyAr
K2kpIHsKLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfZmllbGRfbnVibWVyc1tpXSwKLSAgICAgICAg
ICAgICAgdW5rbm93bl9maWVsZHMuZmllbGQoaSkubnVtYmVyKCkpOwotICB9Ci19Ci0KLSNkZWZp
bmUgTUFLRV9WRUNUT1IoeCkgdmVjdG9yPGludD4oeCwgeCArIEdPT0dMRV9BUlJBWVNJWkUoeCkp
Ci1URVNUX0YoVW5rbm93bkZpZWxkU2V0VGVzdCwgRGVsZXRlQnlOdW1iZXIpIHsKLSAgQ2hlY2tE
ZWxldGVCeU51bWJlcih2ZWN0b3I8aW50PigpLCAxLCB2ZWN0b3I8aW50PigpKTsKLSAgc3RhdGlj
IGNvbnN0IGludCBrVGVzdEZpZWxkTnVtYmVyczFbXSA9IHsxLCAyLCAzfTsKLSAgc3RhdGljIGNv
bnN0IGludCBrRmllbGROdW1iZXJUb0RlbGV0ZTEgPSAxOwotICBzdGF0aWMgY29uc3QgaW50IGtF
eHBlY3RlZEZpZWxkTnVtYmVyczFbXSA9IHsyLCAzfTsKLSAgQ2hlY2tEZWxldGVCeU51bWJlcihN
QUtFX1ZFQ1RPUihrVGVzdEZpZWxkTnVtYmVyczEpLCBrRmllbGROdW1iZXJUb0RlbGV0ZTEsCi0g
ICAgICAgICAgICAgICAgICAgICAgTUFLRV9WRUNUT1Ioa0V4cGVjdGVkRmllbGROdW1iZXJzMSkp
OwotICBzdGF0aWMgY29uc3QgaW50IGtUZXN0RmllbGROdW1iZXJzMltdID0gezEsIDIsIDN9Owot
ICBzdGF0aWMgY29uc3QgaW50IGtGaWVsZE51bWJlclRvRGVsZXRlMiA9IDI7Ci0gIHN0YXRpYyBj
b25zdCBpbnQga0V4cGVjdGVkRmllbGROdW1iZXJzMltdID0gezEsIDN9OwotICBDaGVja0RlbGV0
ZUJ5TnVtYmVyKE1BS0VfVkVDVE9SKGtUZXN0RmllbGROdW1iZXJzMiksIGtGaWVsZE51bWJlclRv
RGVsZXRlMiwKLSAgICAgICAgICAgICAgICAgICAgICBNQUtFX1ZFQ1RPUihrRXhwZWN0ZWRGaWVs
ZE51bWJlcnMyKSk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1Rlc3RGaWVsZE51bWJlcnMzW10gPSB7
MSwgMiwgM307Ci0gIHN0YXRpYyBjb25zdCBpbnQga0ZpZWxkTnVtYmVyVG9EZWxldGUzID0gMzsK
LSAgc3RhdGljIGNvbnN0IGludCBrRXhwZWN0ZWRGaWVsZE51bWJlcnMzW10gPSB7MSwgMn07Ci0g
IENoZWNrRGVsZXRlQnlOdW1iZXIoTUFLRV9WRUNUT1Ioa1Rlc3RGaWVsZE51bWJlcnMzKSwga0Zp
ZWxkTnVtYmVyVG9EZWxldGUzLAotICAgICAgICAgICAgICAgICAgICAgIE1BS0VfVkVDVE9SKGtF
eHBlY3RlZEZpZWxkTnVtYmVyczMpKTsKLSAgc3RhdGljIGNvbnN0IGludCBrVGVzdEZpZWxkTnVt
YmVyczRbXSA9IHsxLCAyLCAxLCA0LCAxfTsKLSAgc3RhdGljIGNvbnN0IGludCBrRmllbGROdW1i
ZXJUb0RlbGV0ZTQgPSAxOwotICBzdGF0aWMgY29uc3QgaW50IGtFeHBlY3RlZEZpZWxkTnVtYmVy
czRbXSA9IHsyLCA0fTsKLSAgQ2hlY2tEZWxldGVCeU51bWJlcihNQUtFX1ZFQ1RPUihrVGVzdEZp
ZWxkTnVtYmVyczQpLCBrRmllbGROdW1iZXJUb0RlbGV0ZTQsCi0gICAgICAgICAgICAgICAgICAg
ICAgTUFLRV9WRUNUT1Ioa0V4cGVjdGVkRmllbGROdW1iZXJzNCkpOwotICBzdGF0aWMgY29uc3Qg
aW50IGtUZXN0RmllbGROdW1iZXJzNVtdID0gezEsIDIsIDMsIDQsIDV9OwotICBzdGF0aWMgY29u
c3QgaW50IGtGaWVsZE51bWJlclRvRGVsZXRlNSA9IDY7Ci0gIHN0YXRpYyBjb25zdCBpbnQga0V4
cGVjdGVkRmllbGROdW1iZXJzNVtdID0gezEsIDIsIDMsIDQsIDV9OwotICBDaGVja0RlbGV0ZUJ5
TnVtYmVyKE1BS0VfVkVDVE9SKGtUZXN0RmllbGROdW1iZXJzNSksIGtGaWVsZE51bWJlclRvRGVs
ZXRlNSwKLSAgICAgICAgICAgICAgICAgICAgICBNQUtFX1ZFQ1RPUihrRXhwZWN0ZWRGaWVsZE51
bWJlcnM1KSk7Ci19Ci0jdW5kZWYgTUFLRV9WRUNUT1IKLX0gIC8vIG5hbWVzcGFjZQotCi19ICAv
LyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxkX2NvbXBhcmF0b3IuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9maWVsZF9jb21wYXJhdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2MGI4YjhhNWFiODU4NDBjZTIzODlkZmNlMzU0YjRiNjZmOWMzYmNkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi91dGlsL2ZpZWxkX2NvbXBhcmF0b3IuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga3Nyb2th
QGdvb2dsZS5jb20gKEtyenlzenRvZiBTcm9rYSkKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi91dGlsL2ZpZWxkX2NvbXBhcmF0b3IuaD4KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL21lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWF0aGxpbWl0cy5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXRodXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xl
IHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci0KLUZpZWxkQ29tcGFy
YXRvcjo6RmllbGRDb21wYXJhdG9yKCkge30KLUZpZWxkQ29tcGFyYXRvcjo6fkZpZWxkQ29tcGFy
YXRvcigpIHt9Ci0KLURlZmF1bHRGaWVsZENvbXBhcmF0b3I6OkRlZmF1bHRGaWVsZENvbXBhcmF0
b3IoKQotICAgIDogZmxvYXRfY29tcGFyaXNvbl8oRVhBQ1QpLAotICAgICAgdHJlYXRfbmFuX2Fz
X2VxdWFsXyhmYWxzZSksCi0gICAgICBoYXNfZGVmYXVsdF90b2xlcmFuY2VfKGZhbHNlKSB7Ci19
Ci0KLURlZmF1bHRGaWVsZENvbXBhcmF0b3I6On5EZWZhdWx0RmllbGRDb21wYXJhdG9yKCkge30K
LQotRmllbGRDb21wYXJhdG9yOjpDb21wYXJpc29uUmVzdWx0IERlZmF1bHRGaWVsZENvbXBhcmF0
b3I6OkNvbXBhcmUoCi0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBtZXNz
YWdlXzEsCi0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBtZXNzYWdlXzIs
Ci0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAot
ICAgICAgaW50IGluZGV4XzEsIGludCBpbmRleF8yLAotICAgICAgY29uc3QgZ29vZ2xlOjpwcm90
b2J1Zjo6dXRpbDo6RmllbGRDb250ZXh0KiBmaWVsZF9jb250ZXh0KSB7Ci0gIGNvbnN0IFJlZmxl
Y3Rpb24qIHJlZmxlY3Rpb25fMSA9IG1lc3NhZ2VfMS5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0
IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb25fMiA9IG1lc3NhZ2VfMi5HZXRSZWZsZWN0aW9uKCk7Ci0K
LSAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotI2RlZmluZSBDT01QQVJFX0ZJRUxEKE1F
VEhPRCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIFJlc3VsdEZyb21Cb29sZWFuKENvbXBhcmUj
I01FVEhPRCggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICpmaWVsZCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgIHJlZmxlY3Rpb25fMS0+R2V0UmVwZWF0ZWQjI01FVEhPRChtZXNzYWdlXzEs
IGZpZWxkLCBpbmRleF8xKSwgICAgXAotICAgICAgICAgIHJlZmxlY3Rpb25fMi0+R2V0UmVwZWF0
ZWQjI01FVEhPRChtZXNzYWdlXzIsIGZpZWxkLCBpbmRleF8yKSkpOyAgXAotICAgIH0gZWxzZSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgcmV0dXJuIFJlc3VsdEZyb21Cb29sZWFuKENvbXBhcmUjI01FVEhPRCgg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICpmaWVsZCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgIHJlZmxlY3Rpb25fMS0+R2V0IyNNRVRIT0QobWVzc2FnZV8xLCBmaWVsZCksICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgIHJlZmxlY3Rpb25fMi0+R2V0IyNNRVRIT0QobWVzc2Fn
ZV8yLCBmaWVsZCkpKTsgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGJyZWFrOyAgLy8gTWFrZSBzdXJlIG5vIGZhbGwtdGhyb3VnaCBpcyBpbnRyb2R1Y2VkLgot
Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfQk9PTDoKLSAgICAgIENPTVBBUkVf
RklFTEQoQm9vbCk7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRE9VQkxFOgot
ICAgICAgQ09NUEFSRV9GSUVMRChEb3VibGUpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX0VOVU06Ci0gICAgICBDT01QQVJFX0ZJRUxEKEVudW0pOwotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FUOgotICAgICAgQ09NUEFSRV9GSUVMRChGbG9hdCk7Ci0g
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfSU5UMzI6Ci0gICAgICBDT01QQVJFX0ZJ
RUxEKEludDMyKTsKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQ2NDoKLSAg
ICAgIENPTVBBUkVfRklFTEQoSW50NjQpOwotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX1NUUklORzoKLSAgICAgIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgICAgICAv
LyBBbGxvY2F0ZSBzY3JhdGNoIHN0cmluZ3MgdG8gc3RvcmUgdGhlIHJlc3VsdCBpZiBhIGNvbnZl
cnNpb24gaXMKLSAgICAgICAgLy8gbmVlZGVkLgotICAgICAgICBzdHJpbmcgc2NyYXRjaDE7Ci0g
ICAgICAgIHN0cmluZyBzY3JhdGNoMjsKLSAgICAgICAgcmV0dXJuIFJlc3VsdEZyb21Cb29sZWFu
KAotICAgICAgICAgICAgQ29tcGFyZVN0cmluZygqZmllbGQsIHJlZmxlY3Rpb25fMS0+R2V0UmVw
ZWF0ZWRTdHJpbmdSZWZlcmVuY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2VfMSwgZmllbGQsIGluZGV4XzEsICZzY3JhdGNoMSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZmxlY3Rpb25fMi0+R2V0UmVwZWF0ZWRTdHJpbmdSZWZlcmVuY2UoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXzIsIGZpZWxkLCBpbmRleF8yLCAm
c2NyYXRjaDIpKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBBbGxvY2F0ZSBzY3JhdGNo
IHN0cmluZ3MgdG8gc3RvcmUgdGhlIHJlc3VsdCBpZiBhIGNvbnZlcnNpb24gaXMKLSAgICAgICAg
Ly8gbmVlZGVkLgotICAgICAgICBzdHJpbmcgc2NyYXRjaDE7Ci0gICAgICAgIHN0cmluZyBzY3Jh
dGNoMjsKLSAgICAgICAgcmV0dXJuIFJlc3VsdEZyb21Cb29sZWFuKENvbXBhcmVTdHJpbmcoCi0g
ICAgICAgICAgICAqZmllbGQsCi0gICAgICAgICAgICByZWZsZWN0aW9uXzEtPkdldFN0cmluZ1Jl
ZmVyZW5jZShtZXNzYWdlXzEsIGZpZWxkLCAmc2NyYXRjaDEpLAotICAgICAgICAgICAgcmVmbGVj
dGlvbl8yLT5HZXRTdHJpbmdSZWZlcmVuY2UobWVzc2FnZV8yLCBmaWVsZCwgJnNjcmF0Y2gyKSkp
OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZ
UEVfVUlOVDMyOgotICAgICAgQ09NUEFSRV9GSUVMRChVSW50MzIpOwotICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX1VJTlQ2NDoKLSAgICAgIENPTVBBUkVfRklFTEQoVUludDY0KTsK
LQotI3VuZGVmIENPTVBBUkVfRklFTEQKLQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBU
WVBFX01FU1NBR0U6Ci0gICAgICByZXR1cm4gUkVDVVJTRTsKLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICBHT09HTEVfTE9HKEZBVEFMKSA8PCAiTm8gY29tcGFyaXNvbiBjb2RlIGZvciBmaWVsZCAiIDw8
IGZpZWxkLT5mdWxsX25hbWUoKQotICAgICAgICAgICAgICAgICA8PCAiIG9mIENwcFR5cGUgPSAi
IDw8IGZpZWxkLT5jcHBfdHlwZSgpOwotICAgICAgcmV0dXJuIERJRkZFUkVOVDsKLSAgfQotfQot
Ci12b2lkIERlZmF1bHRGaWVsZENvbXBhcmF0b3I6OlNldERlZmF1bHRGcmFjdGlvbkFuZE1hcmdp
bihkb3VibGUgZnJhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgbWFyZ2luKSB7Ci0gIGRlZmF1bHRfdG9sZXJhbmNl
XyA9IFRvbGVyYW5jZShmcmFjdGlvbiwgbWFyZ2luKTsKLSAgaGFzX2RlZmF1bHRfdG9sZXJhbmNl
XyA9IHRydWU7Ci19Ci0KLXZvaWQgRGVmYXVsdEZpZWxkQ29tcGFyYXRvcjo6U2V0RnJhY3Rpb25B
bmRNYXJnaW4oY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGZyYWN0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbWFyZ2lu
KSB7Ci0gIEdPT0dMRV9DSEVDSyhGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRkxPQVQgPT0gZmll
bGQtPmNwcF90eXBlKCkgfHwKLSAgICAgICAgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJM
RSA9PSBmaWVsZC0+Y3BwX3R5cGUoKSkKLSAgICAgIDw8ICJGaWVsZCBoYXMgdG8gYmUgZmxvYXQg
b3IgZG91YmxlIHR5cGUuIEZpZWxkIG5hbWUgaXM6ICIKLSAgICAgIDw8IGZpZWxkLT5mdWxsX25h
bWUoKTsKLSAgbWFwX3RvbGVyYW5jZV9bZmllbGRdID0gVG9sZXJhbmNlKGZyYWN0aW9uLCBtYXJn
aW4pOwotfQotCi1ib29sIERlZmF1bHRGaWVsZENvbXBhcmF0b3I6OkNvbXBhcmVEb3VibGUoY29u
c3QgRmllbGREZXNjcmlwdG9yJiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgdmFsdWVfMSwgZG91YmxlIHZhbHVlXzIpIHsKLSAgcmV0dXJu
IENvbXBhcmVEb3VibGVPckZsb2F0KGZpZWxkLCB2YWx1ZV8xLCB2YWx1ZV8yKTsKLX0KLQotYm9v
bCBEZWZhdWx0RmllbGRDb21wYXJhdG9yOjpDb21wYXJlRW51bShjb25zdCBGaWVsZERlc2NyaXB0
b3ImIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBFbnVtVmFsdWVEZXNjcmlwdG9yKiB2YWx1ZV8xLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiB2YWx1ZV8yKSB7Ci0g
IHJldHVybiB2YWx1ZV8xLT5udW1iZXIoKSA9PSB2YWx1ZV8yLT5udW1iZXIoKTsKLX0KLQotYm9v
bCBEZWZhdWx0RmllbGRDb21wYXJhdG9yOjpDb21wYXJlRmxvYXQoY29uc3QgRmllbGREZXNjcmlw
dG9yJiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IHZhbHVlXzEsIGZsb2F0IHZhbHVlXzIpIHsKLSAgcmV0dXJuIENvbXBhcmVEb3VibGVPckZs
b2F0KGZpZWxkLCB2YWx1ZV8xLCB2YWx1ZV8yKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LWJvb2wgRGVmYXVsdEZpZWxkQ29tcGFyYXRvcjo6Q29tcGFyZURvdWJsZU9yRmxvYXQoY29uc3Qg
RmllbGREZXNjcmlwdG9yJiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVCB2YWx1ZV8xLCBUIHZhbHVlXzIpIHsKLSAgaWYgKHZhbHVlXzEg
PT0gdmFsdWVfMikgewotICAgIC8vIENvdmVycyAraW5mIGFuZCAtaW5mICh3aGljaCBhcmUgbm90
IHdpdGhpbiBtYXJnaW4gb3IgZnJhY3Rpb24gb2YKLSAgICAvLyB0aGVtc2VsdmVzKSwgYW5kIGlz
IGEgc2hvcnRjdXQgZm9yIGZpbml0ZSB2YWx1ZXMuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxz
ZSBpZiAoZmxvYXRfY29tcGFyaXNvbl8gPT0gRVhBQ1QpIHsKLSAgICBpZiAodHJlYXRfbmFuX2Fz
X2VxdWFsXyAmJgotICAgICAgICBNYXRoTGltaXRzPFQ+OjpJc05hTih2YWx1ZV8xKSAmJiBNYXRo
TGltaXRzPFQ+OjpJc05hTih2YWx1ZV8yKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIHsKLSAgICBpZiAodHJlYXRfbmFuX2FzX2VxdWFs
XyAmJgotICAgICAgICBNYXRoTGltaXRzPFQ+OjpJc05hTih2YWx1ZV8xKSAmJiBNYXRoTGltaXRz
PFQ+OjpJc05hTih2YWx1ZV8yKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8v
IGZsb2F0X2NvbXBhcmlzb25fID09IEFQUFJPWElNQVRFIGNvdmVycyB0d28gdXNlIGNhc2VzLgot
ICAgIFRvbGVyYW5jZSogdG9sZXJhbmNlID0gRmluZE9yTnVsbChtYXBfdG9sZXJhbmNlXywgJmZp
ZWxkKTsKLSAgICBpZiAodG9sZXJhbmNlID09IE5VTEwgJiYgaGFzX2RlZmF1bHRfdG9sZXJhbmNl
XykgewotICAgICAgdG9sZXJhbmNlID0gJmRlZmF1bHRfdG9sZXJhbmNlXzsKLSAgICB9Ci0gICAg
aWYgKHRvbGVyYW5jZSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTWF0aFV0aWw6OkFsbW9zdEVx
dWFscyh2YWx1ZV8xLCB2YWx1ZV8yKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gVXNlIHVzZXIt
cHJvdmlkZWQgZnJhY3Rpb24gYW5kIG1hcmdpbi4gU2luY2UgdGhleSBhcmUgc3RvcmVkIGFzCi0g
ICAgICAvLyBkb3VibGVzLCB3ZSBleHBsaWNpdGVseSBjYXN0IHRoZW0gdG8gdHlwZXMgb2YgdmFs
dWVzIHByb3ZpZGVkLiBUaGlzCi0gICAgICAvLyBpcyB2ZXJ5IGxpa2VseSB0byBmYWlsIGlmIHBy
b3ZpZGVkIHZhbHVlcyBhcmUgbm90IG51bWVyaWMuCi0gICAgICByZXR1cm4gTWF0aFV0aWw6Oldp
dGhpbkZyYWN0aW9uT3JNYXJnaW4oCi0gICAgICAgICAgdmFsdWVfMSwgdmFsdWVfMiwgc3RhdGlj
X2Nhc3Q8VD4odG9sZXJhbmNlLT5mcmFjdGlvbiksCi0gICAgICAgICAgc3RhdGljX2Nhc3Q8VD4o
dG9sZXJhbmNlLT5tYXJnaW4pKTsKLSAgICB9Ci0gIH0KLX0KLQotRmllbGRDb21wYXJhdG9yOjpD
b21wYXJpc29uUmVzdWx0IERlZmF1bHRGaWVsZENvbXBhcmF0b3I6OlJlc3VsdEZyb21Cb29sZWFu
KAotICAgIGJvb2wgYm9vbGVhbl9yZXN1bHQpIGNvbnN0IHsKLSAgcmV0dXJuIGJvb2xlYW5fcmVz
dWx0ID8gRmllbGRDb21wYXJhdG9yOjpTQU1FIDogRmllbGRDb21wYXJhdG9yOjpESUZGRVJFTlQ7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGls
L2ZpZWxkX2NvbXBhcmF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxkX2NvbXBh
cmF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI0ZDY1YjBlNmQzZDBhYjNl
ZTZhMThhMTc0NjY5ZDczZjJjMjZkYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9jb21wYXJhdG9yLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyNTkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga3Nyb2thQGdvb2dsZS5jb20gKEtyenlzenRvZiBTcm9r
YSkKLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfVVRJTF9GSUVMRF9DT01QQVJBVE9SX0hfXwot
I2RlZmluZSBHT09HTEVfUFJPVE9CVUZfVVRJTF9GSUVMRF9DT01QQVJBVE9SX0hfXwotCi0jaW5j
bHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9jb21tb24uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9i
dWYgewotCi1jbGFzcyBNZXNzYWdlOwotY2xhc3MgRW51bVZhbHVlRGVzY3JpcHRvcjsKLWNsYXNz
IEZpZWxkRGVzY3JpcHRvcjsKLQotbmFtZXNwYWNlIHV0aWwgewotCi1jbGFzcyBGaWVsZENvbnRl
eHQ7Ci0KLS8vIEJhc2UgY2xhc3Mgc3BlY2lmeWluZyB0aGUgaW50ZXJmYWNlIGZvciBjb21wYXJp
bmcgcHJvdG9jb2wgYnVmZmVyIGZpZWxkcy4KLS8vIFJlZ3VsYXIgdXNlcnMgc2hvdWxkIGNvbnNp
ZGVyIHVzaW5nIG9yIHN1YmNsYXNzaW5nIERlZmF1bHRGaWVsZENvbXBhcmF0b3IKLS8vIHJhdGhl
ciB0aGFuIHRoaXMgaW50ZXJmYWNlLgotLy8gQ3VycmVudGx5LCB0aGlzIGRvZXMgbm90IHN1cHBv
cnQgY29tcGFyaW5nIHVua25vd24gZmllbGRzLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIEZp
ZWxkQ29tcGFyYXRvciB7Ci0gcHVibGljOgotICBGaWVsZENvbXBhcmF0b3IoKTsKLSAgdmlydHVh
bCB+RmllbGRDb21wYXJhdG9yKCk7Ci0KLSAgZW51bSBDb21wYXJpc29uUmVzdWx0IHsKLSAgICBT
QU1FLCAgICAgICAvLyBDb21wYXJlZCBmaWVsZHMgYXJlIGVxdWFsLiBJbiBjYXNlIG9mIGNvbXBh
cmluZyBzdWJtZXNzYWdlcywKLSAgICAgICAgICAgICAgICAvLyB1c2VyIHNob3VsZCBub3QgcmVj
dXJzaXZlbHkgY29tcGFyZSB0aGVpciBjb250ZW50cy4KLSAgICBESUZGRVJFTlQsICAvLyBDb21w
YXJlZCBmaWVsZHMgYXJlIGRpZmZlcmVudC4gSW4gY2FzZSBvZiBjb21wYXJpbmcKLSAgICAgICAg
ICAgICAgICAvLyBzdWJtZXNzYWdlcywgdXNlciBzaG91bGQgbm90IHJlY3Vyc2l2ZWx5IGNvbXBh
cmUgdGhlaXIKLSAgICAgICAgICAgICAgICAvLyBjb250ZW50cy4KLSAgICBSRUNVUlNFLCAgICAv
LyBDb21wYXJlZCBzdWJtZXNzYWdlcyBuZWVkIHRvIGJlIGNvbXBhcmVkIHJlY3Vyc2l2ZWx5Lgot
ICAgICAgICAgICAgICAgIC8vIEZpZWxkQ29tcGFyYXRvciBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBz
ZW1hbnRpY3Mgb2YgcmVjdXJzaXZlCi0gICAgICAgICAgICAgICAgLy8gY29tcGFyaXNvbi4gVGhp
cyB2YWx1ZSBzaG91bGQgbm90IGJlIHJldHVybmVkIGZvciBzaW1wbGUKLSAgICAgICAgICAgICAg
ICAvLyB2YWx1ZXMuCi0gIH07Ci0KLSAgLy8gQ29tcGFyZXMgdGhlIHZhbHVlcyBvZiBhIGZpZWxk
IGluIHR3byBwcm90b2NvbCBidWZmZXIgbWVzc2FnZXMuCi0gIC8vIFJldHVybnMgU0FNRSBvciBE
SUZGRVJFTlQgZm9yIHNpbXBsZSB2YWx1ZXMsIGFuZCBTQU1FLCBESUZGRVJFTlQgb3IgUkVDVVJT
RQotICAvLyBmb3Igc3VibWVzc2FnZXMuIFJldHVybmluZyBSRUNVUlNFIGZvciBmaWVsZHMgbm90
IGJlaW5nIHN1Ym1lc3NhZ2VzIGlzCi0gIC8vIGlsbGVnYWwuCi0gIC8vIEluIGNhc2UgdGhlIGdp
dmVuIEZpZWxkRGVzY3JpcHRvciBwb2ludHMgdG8gYSByZXBlYXRlZCBmaWVsZCwgdGhlIGluZGlj
ZXMKLSAgLy8gbmVlZCB0byBiZSB2YWxpZC4gT3RoZXJ3aXNlIHRoZXkgc2hvdWxkIGJlIGlnbm9y
ZWQuCi0gIC8vCi0gIC8vIEZpZWxkQ29udGV4dCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgc3BlY2lmaWMgaW5zdGFuY2VzIG9mIHRoZQotICAvLyBmaWVsZHMgYmVpbmcgY29tcGFyZWQs
IHZlcnN1cyBGaWVsZERlc2NyaXB0b3Igd2hpY2ggb25seSBjb250YWlucyBnZW5lcmFsCi0gIC8v
IHR5cGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpZWxkcy4KLSAgdmlydHVhbCBDb21wYXJpc29u
UmVzdWx0IENvbXBhcmUoCi0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBt
ZXNzYWdlXzEsCi0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBtZXNzYWdl
XzIsCi0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LAotICAgICAgaW50IGluZGV4XzEsIGludCBpbmRleF8yLAotICAgICAgY29uc3QgZ29vZ2xlOjpw
cm90b2J1Zjo6dXRpbDo6RmllbGRDb250ZXh0KiBmaWVsZF9jb250ZXh0KSA9IDA7Ci0KLSBwcml2
YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoRmllbGRDb21wYXJhdG9y
KTsKLX07Ci0KLS8vIEJhc2ljIGltcGxlbWVudGF0aW9uIG9mIEZpZWxkQ29tcGFyYXRvci4gIFN1
cHBvcnRzIHRocmVlIG1vZGVzIG9mIGZsb2F0aW5nCi0vLyBwb2ludCB2YWx1ZSBjb21wYXJpc29u
OiBleGFjdCwgYXBwcm94aW1hdGUgdXNpbmcgTWF0aFV0aWw6OkFsbW9zdEVxdWFsCi0vLyBtZXRo
b2QsIGFuZCBhcmJpdHJhcmlseSBwcmVjaXNlIHVzaW5nIE1hdGhVdGlsOjpXaXRoaW5GcmFjdGlv
bk9yTWFyZ2luLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIERlZmF1bHRGaWVsZENvbXBhcmF0
b3IgOiBwdWJsaWMgRmllbGRDb21wYXJhdG9yIHsKLSBwdWJsaWM6Ci0gIGVudW0gRmxvYXRDb21w
YXJpc29uIHsKLSAgICAgRVhBQ1QsICAgICAgICAgICAgICAgLy8gRmxvYXRzIGFuZCBkb3VibGVz
IGFyZSBjb21wYXJlZCBleGFjdGx5LgotICAgICBBUFBST1hJTUFURSwgICAgICAgICAvLyBGbG9h
dHMgYW5kIGRvdWJsZXMgYXJlIGNvbXBhcmVkIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBNYXRoVXRpbDo6QWxtb3N0RXF1YWwgbWV0aG9kIG9yCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE1hdGhVdGlsOjpXaXRoaW5GcmFjdGlvbk9yTWFyZ2luIG1ldGhvZC4K
LSAgICAgLy8gVE9ETyhrc3Jva2EpOiBJbnRyb2R1Y2UgdGhpcmQgdmFsdWUgdG8gZGlmZmVyZW5j
aWF0ZSB1c2VzIG9mIEFsbW9zdEVxdWFsCi0gICAgIC8vICAgICAgICAgICAgICAgYW5kIFdpdGhp
bkZyYWN0aW9uT3JNYXJnaW4uCi0gIH07Ci0KLSAgLy8gQ3JlYXRlcyBuZXcgY29tcGFyYXRvciB3
aXRoIGZsb2F0IGNvbXBhcmlzb24gc2V0IHRvIEVYQUNULgotICBEZWZhdWx0RmllbGRDb21wYXJh
dG9yKCk7Ci0KLSAgdmlydHVhbCB+RGVmYXVsdEZpZWxkQ29tcGFyYXRvcigpOwotCi0gIHZpcnR1
YWwgQ29tcGFyaXNvblJlc3VsdCBDb21wYXJlKAotICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZSYgbWVzc2FnZV8xLAotICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSYgbWVzc2FnZV8yLAotICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNj
cmlwdG9yKiBmaWVsZCwKLSAgICAgIGludCBpbmRleF8xLCBpbnQgaW5kZXhfMiwKLSAgICAgIGNv
bnN0IGdvb2dsZTo6cHJvdG9idWY6OnV0aWw6OkZpZWxkQ29udGV4dCogZmllbGRfY29udGV4dCk7
Ci0KLSAgdm9pZCBzZXRfZmxvYXRfY29tcGFyaXNvbihGbG9hdENvbXBhcmlzb24gZmxvYXRfY29t
cGFyaXNvbikgewotICAgIGZsb2F0X2NvbXBhcmlzb25fID0gZmxvYXRfY29tcGFyaXNvbjsKLSAg
fQotCi0gIEZsb2F0Q29tcGFyaXNvbiBmbG9hdF9jb21wYXJpc29uKCkgY29uc3QgewotICAgIHJl
dHVybiBmbG9hdF9jb21wYXJpc29uXzsKLSAgfQotCi0gIC8vIFNldCB3aGV0aGVyIHRoZSBGaWVs
ZENvbXBhcmF0b3Igc2hhbGwgdHJlYXQgZmxvYXRzIG9yIGRvdWJsZXMgdGhhdCBhcmUgYm90aAot
ICAvLyBOYU4gYXMgZXF1YWwgKHRyZWF0X25hbl9hc19lcXVhbCA9IHRydWUpIG9yIGFzIGRpZmZl
cmVudAotICAvLyAodHJlYXRfbmFuX2FzX2VxdWFsID0gZmFsc2UpLiBEZWZhdWx0IGlzIHRyZWF0
aW5nIE5hTnMgYWx3YXlzIGFzIGRpZmZlcmVudC4KLSAgdm9pZCBzZXRfdHJlYXRfbmFuX2FzX2Vx
dWFsKGJvb2wgdHJlYXRfbmFuX2FzX2VxdWFsKSB7Ci0gICAgdHJlYXRfbmFuX2FzX2VxdWFsXyA9
IHRyZWF0X25hbl9hc19lcXVhbDsKLSAgfQotCi0gIGJvb2wgdHJlYXRfbmFuX2FzX2VxdWFsKCkg
Y29uc3QgewotICAgIHJldHVybiB0cmVhdF9uYW5fYXNfZXF1YWxfOwotICB9Ci0KLSAgLy8gU2V0
cyB0aGUgZnJhY3Rpb24gYW5kIG1hcmdpbiBmb3IgdGhlIGZsb2F0IGNvbXBhcmlzb24gb2YgYSBn
aXZlbiBmaWVsZC4KLSAgLy8gVXNlcyBNYXRoVXRpbDo6V2l0aGluRnJhY3Rpb25Pck1hcmdpbiB0
byBjb21wYXJlIHRoZSB2YWx1ZXMuCi0gIC8vCi0gIC8vIFJFUVVJUkVTOiBmaWVsZC0+Y3BwX3R5
cGUgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0RPVUJMRSBvcgotICAvLyAgICAgICAgICAg
ZmllbGQtPmNwcF90eXBlID09IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9GTE9BVAotICAvLyBS
RVFVSVJFUzogZmxvYXRfY29tcGFyaXNvbl8gPT0gQVBQUk9YSU1BVEUKLSAgdm9pZCBTZXRGcmFj
dGlvbkFuZE1hcmdpbihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBkb3VibGUgZnJhY3Rp
b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG1hcmdpbik7Ci0KLSAgLy8g
U2V0cyB0aGUgZnJhY3Rpb24gYW5kIG1hcmdpbiBmb3IgdGhlIGZsb2F0IGNvbXBhcmlzb24gb2Yg
YWxsIGZsb2F0IGFuZAotICAvLyBkb3VibGUgZmllbGRzLCB1bmxlc3MgYSBmaWVsZCBoYXMgYmVl
biBnaXZlbiBhIHNwZWNpZmljIHNldHRpbmcgdmlhCi0gIC8vIFNldEZyYWN0aW9uQW5kTWFyZ2lu
KCkgYWJvdmUuCi0gIC8vIFVzZXMgTWF0aFV0aWw6OldpdGhpbkZyYWN0aW9uT3JNYXJnaW4gdG8g
Y29tcGFyZSB0aGUgdmFsdWVzLgotICAvLwotICAvLyBSRVFVSVJFUzogZmxvYXRfY29tcGFyaXNv
bl8gPT0gQVBQUk9YSU1BVEUKLSAgdm9pZCBTZXREZWZhdWx0RnJhY3Rpb25BbmRNYXJnaW4oZG91
YmxlIGZyYWN0aW9uLCBkb3VibGUgbWFyZ2luKTsKLQotIHByaXZhdGU6Ci0gIC8vIERlZmluZXMg
dGhlIHRvbGVyYW5jZSBmb3IgZmxvYXRpbmcgcG9pbnQgY29tcGFyaXNvbiAoZnJhY3Rpb24gYW5k
IG1hcmdpbikuCi0gIHN0cnVjdCBUb2xlcmFuY2UgewotICAgIGRvdWJsZSBmcmFjdGlvbjsKLSAg
ICBkb3VibGUgbWFyZ2luOwotICAgIFRvbGVyYW5jZSgpCi0gICAgICAgIDogZnJhY3Rpb24oMC4w
KSwKLSAgICAgICAgICBtYXJnaW4oMC4wKSB7fQotICAgIFRvbGVyYW5jZShkb3VibGUgZiwgZG91
YmxlIG0pCi0gICAgICAgIDogZnJhY3Rpb24oZiksCi0gICAgICAgICAgbWFyZ2luKG0pIHt9Ci0g
IH07Ci0KLSAgLy8gRGVmaW5lcyB0aGUgbWFwIHRvIHN0b3JlIHRoZSB0b2xlcmFuY2VzIGZvciBm
bG9hdGluZyBwb2ludCBjb21wYXJpc29uLgotICB0eXBlZGVmIG1hcDxjb25zdCBGaWVsZERlc2Ny
aXB0b3IqLCBUb2xlcmFuY2U+IFRvbGVyYW5jZU1hcDsKLQotICAvLyBUaGUgZm9sbG93aW5nIG1l
dGhvZHMgZ2V0IGV4ZWN1dGVkIHdoZW4gQ29tcGFyZUZpZWxkcyBpcyBjYWxsZWQgZm9yIHRoZQot
ICAvLyBiYXNpYyB0eXBlcyAoaW5zdGVhZCBvZiBzdWJtZXNzYWdlcykuIFRoZXkgcmV0dXJuIHRy
dWUgb24gc3VjY2Vzcy4gT25lCi0gIC8vIGNhbiB1c2UgUmVzdWx0RnJvbUJvb2xlYW4oKSB0byBj
b252ZXJ0IHRoYXQgYm9vbGVhbiB0byBhIENvbXBhcmlzb25SZXN1bHQKLSAgLy8gdmFsdWUuCi0g
IGJvb2wgQ29tcGFyZUJvb2woY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9y
JiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICBib29sIHZhbHVlXzEsIGJvb2wgdmFsdWVfMikg
ewotICAgIHJldHVybiB2YWx1ZV8xID09IHZhbHVlXzI7Ci0gIH0KLQotICAvLyBVc2VzIENvbXBh
cmVEb3VibGVPckZsb2F0LCBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGJvdGggQ29tcGFyZURv
dWJsZSBhbmQKLSAgLy8gQ29tcGFyZUZsb2F0LgotICBib29sIENvbXBhcmVEb3VibGUoY29uc3Qg
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yJiBmaWVsZCwKLSAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB2YWx1ZV8xLCBkb3VibGUgdmFsdWVfMik7Ci0KLSAgYm9vbCBDb21wYXJl
RW51bShjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3ImIGZpZWxkLAotICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3IqIHZhbHVlXzEsCi0gICAg
ICAgICAgICAgICAgICAgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvciogdmFsdWVfMik7Ci0KLSAg
Ly8gVXNlcyBDb21wYXJlRG91YmxlT3JGbG9hdCwgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBi
b3RoIENvbXBhcmVEb3VibGUgYW5kCi0gIC8vIENvbXBhcmVGbG9hdC4KLSAgYm9vbCBDb21wYXJl
RmxvYXQoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yJiBmaWVsZCwKLSAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgdmFsdWVfMSwgZmxvYXQgdmFsdWVfMik7Ci0KLSAgYm9v
bCBDb21wYXJlSW50MzIoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGREZXNjcmlwdG9yJiBm
aWVsZCwKLSAgICAgICAgICAgICAgICAgICAgaW50MzIgdmFsdWVfMSwgaW50MzIgdmFsdWVfMikg
ewotICAgIHJldHVybiB2YWx1ZV8xID09IHZhbHVlXzI7Ci0gIH0KLQotICBib29sIENvbXBhcmVJ
bnQ2NChjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3ImIGZpZWxkLAotICAg
ICAgICAgICAgICAgICAgICBpbnQ2NCB2YWx1ZV8xLCBpbnQ2NCB2YWx1ZV8yKSB7Ci0gICAgcmV0
dXJuIHZhbHVlXzEgPT0gdmFsdWVfMjsKLSAgfQotCi0gIGJvb2wgQ29tcGFyZVN0cmluZyhjb25z
dCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3ImIGZpZWxkLAotICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RyaW5nJiB2YWx1ZV8xLCBjb25zdCBzdHJpbmcmIHZhbHVlXzIpIHsK
LSAgICByZXR1cm4gdmFsdWVfMSA9PSB2YWx1ZV8yOwotICB9Ci0KLSAgYm9vbCBDb21wYXJlVUlu
dDMyKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvciYgZmllbGQsCi0gICAg
ICAgICAgICAgICAgICAgICB1aW50MzIgdmFsdWVfMSwgdWludDMyIHZhbHVlXzIpIHsKLSAgICBy
ZXR1cm4gdmFsdWVfMSA9PSB2YWx1ZV8yOwotICB9Ci0KLSAgYm9vbCBDb21wYXJlVUludDY0KGNv
bnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvciYgZmllbGQsCi0gICAgICAgICAg
ICAgICAgICAgICB1aW50NjQgdmFsdWVfMSwgdWludDY0IHZhbHVlXzIpIHsKLSAgICByZXR1cm4g
dmFsdWVfMSA9PSB2YWx1ZV8yOwotICB9Ci0KLSAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5
IENvbXBhcmVEb3VibGUgYW5kIENvbXBhcmVGbG9hdCB0byBhdm9pZCBjb2RlCi0gIC8vIGR1cGxp
Y2F0aW9uLiBUaGVyZSBhcmUgbm8gY2hlY2tzIGRvbmUgYWdhaW5zdCB0eXBlcyBvZiB0aGUgdmFs
dWVzIHBhc3NlZCwKLSAgLy8gYnV0IGl0J3MgbGlrZWx5IHRvIGZhaWwgaWYgcGFzc2VkIG5vbi1u
dW1lcmljIGFyZ3VtZW50cy4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgYm9vbCBDb21wYXJl
RG91YmxlT3JGbG9hdChjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3ImIGZp
ZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgdmFsdWVfMSwgVCB2YWx1ZV8yKTsK
LQotICAvLyBSZXR1cm5zIEZpZWxkQ29tcGFyYXRvcjo6U0FNRSBpZiBib29sZWFuX3Jlc3VsdCBp
cyB0cnVlIGFuZAotICAvLyBGaWVsZENvbXBhcmF0b3I6OkRJRkZFUkVOVCBvdGhlcndpc2UuCi0g
IENvbXBhcmlzb25SZXN1bHQgUmVzdWx0RnJvbUJvb2xlYW4oYm9vbCBib29sZWFuX3Jlc3VsdCkg
Y29uc3Q7Ci0KLSAgRmxvYXRDb21wYXJpc29uIGZsb2F0X2NvbXBhcmlzb25fOwotCi0gIC8vIElm
IHRydWUsIGZsb2F0cyBhbmQgZG91YmxlcyB0aGF0IGFyZSBib3RoIE5hTiBhcmUgY29uc2lkZXJl
ZCB0byBiZQotICAvLyBlcXVhbC4gT3RoZXJ3aXNlLCB0d28gZmxvYXRzIG9yIGRvdWJsZXMgdGhh
dCBhcmUgTmFOIGFyZSBjb25zaWRlcmVkIHRvIGJlCi0gIC8vIGRpZmZlcmVudC4KLSAgYm9vbCB0
cmVhdF9uYW5fYXNfZXF1YWxfOwotCi0gIC8vIFRydWUgaWZmIGRlZmF1bHRfdG9sZXJhbmNlXyBo
YXMgYmVlbiBleHBsaWNpdGx5IHNldC4KLSAgLy8KLSAgLy8gSWYgZmFsc2UsIHRoZW4gdGhlIGRl
ZmF1bHQgdG9sZXJhbmNlIGZvciBmbGFvdHMgYW5kIGRvdWJsZXMgaXMgdGhhdCB3aGljaAotICAv
LyBpcyB1c2VkIGJ5IE1hdGhVdGlsOjpBbG1vc3RFcXVhbHMoKS4KLSAgYm9vbCBoYXNfZGVmYXVs
dF90b2xlcmFuY2VfOwotCi0gIC8vIERlZmF1bHQgZmxvYXQvZG91YmxlIHRvbGVyYW5jZS4gT25s
eSBtZWFuaW5nZnVsIGlmCi0gIC8vIGhhc19kZWZhdWx0X3RvbGVyYW5jZV8gPT0gdHJ1ZS4KLSAg
VG9sZXJhbmNlIGRlZmF1bHRfdG9sZXJhbmNlXzsKLQotICAvLyBGaWVsZC1zcGVjaWZpYyBmbG9h
dC9kb3VibGUgdG9sZXJhbmNlcywgd2hpY2ggb3ZlcnJpZGUgYW55IGRlZmF1bHQgZm9yCi0gIC8v
IHRob3NlIHBhcnRpY3VsYXIgZmllbGRzLgotICBUb2xlcmFuY2VNYXAgbWFwX3RvbGVyYW5jZV87
Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKERlZmF1bHRGaWVsZENvbXBh
cmF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JV
Rl9VVElMX0ZJRUxEX0NPTVBBUkFUT1JfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdXRpbC9maWVsZF9jb21wYXJhdG9yX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRp
bC9maWVsZF9jb21wYXJhdG9yX3Rlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDZmZDYzMWQ4NjBjOGZjNjNlMDI3OWVkODE3ZTE5NDFmMjU5N2UxNjIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
ZmllbGRfY29tcGFyYXRvcl90ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDg4ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtzcm9rYUBn
b29nbGUuY29tIChLcnp5c3p0b2YgU3Jva2EpCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
dXRpbC9maWVsZF9jb21wYXJhdG9yLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5p
dHRlc3QucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXRodXRpbC5oPgotLy8gVGhpcyBndGVzdCBo
ZWFkZXIgaXMgcHV0IGFmdGVyIG1hdGh1dGlsLmggaW50ZW50aW9uYWxseS4gV2UgaGF2ZSB0byBk
bwotLy8gdGhpcyBiZWNhdXNlIG1hdGh1dGlsLmggaW5jbHVkZXMgbWF0aGxpbWl0cy5oIHdoaWNo
IHJlcXVpcmVzIGNtYXRoIG5vdAotLy8gYmVpbmcgaW5jbHVkZWQgdG8gY29tcGlsZSBvbiBzb21l
IHZlcnNpb25zIG9mIGdjYzoKLS8vICAgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1
Zi9ibG9iLzgxOGM1ZWVlMDg4NDAzNTVkNzBkMmYzYmRmMWEyZjE3OTg2YTVlNzAvc3JjL2dvb2ds
ZS9wcm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmgjTDQ4Ci0vLyBhbmQgdGhlIG9wZW5zb3VyY2Ug
dmVyc2lvbiBndGVzdC5oIGhlYWRlciBpbmNsdWRlcyBjbWF0aCB0cmFuc2l0aXZlbHkKLS8vIHNv
bWVob3cuCi0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLW5hbWVzcGFjZSBnb29nbGUgewotbmFt
ZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1dGlsIHsKLW5hbWVzcGFjZSB7Ci0KLXVzaW5n
IHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXM7Ci0KLWNsYXNzIERlZmF1bHRGaWVsZENv
bXBhcmF0b3JUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICB2
b2lkIFNldFVwKCkgewotICAgIGRlc2NyaXB0b3JfID0gVGVzdEFsbFR5cGVzOjpkZXNjcmlwdG9y
KCk7Ci0gIH0KLQotICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yXzsKLSAgRGVmYXVsdEZp
ZWxkQ29tcGFyYXRvciBjb21wYXJhdG9yXzsKLSAgVGVzdEFsbFR5cGVzIG1lc3NhZ2VfMV87Ci0g
IFRlc3RBbGxUeXBlcyBtZXNzYWdlXzJfOwotfTsKLQotVEVTVF9GKERlZmF1bHRGaWVsZENvbXBh
cmF0b3JUZXN0LCBSZWN1cnNlc0ludG9Hcm91cCkgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkID0KLSAgICAgIGRlc2NyaXB0b3JfLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsZ3Jv
dXAiKTsKLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6UkVDVVJTRSwKLSAgICAgICAgICAg
IGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywgZmllbGQsIC0xLCAt
MSwgTlVMTCkpOwotfQotCi1URVNUX0YoRGVmYXVsdEZpZWxkQ29tcGFyYXRvclRlc3QsIFJlY3Vy
c2VzSW50b05lc3RlZE1lc3NhZ2UpIHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9
Ci0gICAgICBkZXNjcmlwdG9yXy0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSIpOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpSRUNVUlNFLAotICAgICAgICAg
ICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLCBmaWVsZCwgLTEs
IC0xLCBOVUxMKSk7Ci19Ci0KLVRFU1RfRihEZWZhdWx0RmllbGRDb21wYXJhdG9yVGVzdCwgUmVj
dXJzZXNJbnRvRm9yZWlnbk1lc3NhZ2UpIHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCA9Ci0gICAgICBkZXNjcmlwdG9yXy0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9mb3JlaWdu
X21lc3NhZ2UiKTsKLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6UkVDVVJTRSwKLSAgICAg
ICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywgZmllbGQs
IC0xLCAtMSwgTlVMTCkpOwotfQotCi1URVNUX0YoRGVmYXVsdEZpZWxkQ29tcGFyYXRvclRlc3Qs
IEludDMyQ29tcGFyaXNvbikgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVz
Y3JpcHRvcl8tPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfaW50MzIiKTsKLSAgbWVzc2FnZV8x
Xy5zZXRfb3B0aW9uYWxfaW50MzIoMSk7Ci0gIG1lc3NhZ2VfMl8uc2V0X29wdGlvbmFsX2ludDMy
KDEpOwotCi0gIEVYUEVDVF9FUShGaWVsZENvbXBhcmF0b3I6OlNBTUUsCi0gICAgICAgICAgICBj
b21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3NhZ2VfMl8sIGZpZWxkLCAtMSwgLTEs
IE5VTEwpKTsKLQotICBtZXNzYWdlXzJfLnNldF9vcHRpb25hbF9pbnQzMigtMSk7Ci0gIEVYUEVD
VF9FUShGaWVsZENvbXBhcmF0b3I6OkRJRkZFUkVOVCwKLSAgICAgICAgICAgIGNvbXBhcmF0b3Jf
LkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywgZmllbGQsIC0xLCAtMSwgTlVMTCkpOwot
fQotCi1URVNUX0YoRGVmYXVsdEZpZWxkQ29tcGFyYXRvclRlc3QsIEludDY0Q29tcGFyaXNvbikg
ewotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3JpcHRvcl8tPkZpbmRGaWVs
ZEJ5TmFtZSgib3B0aW9uYWxfaW50NjQiKTsKLSAgbWVzc2FnZV8xXy5zZXRfb3B0aW9uYWxfaW50
NjQoMUwpOwotICBtZXNzYWdlXzJfLnNldF9vcHRpb25hbF9pbnQ2NCgxTCk7Ci0KLSAgRVhQRUNU
X0VRKEZpZWxkQ29tcGFyYXRvcjo6U0FNRSwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBh
cmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywgZmllbGQsIC0xLCAtMSwgTlVMTCkpOwotCi0gIG1l
c3NhZ2VfMl8uc2V0X29wdGlvbmFsX2ludDY0KC0xTCk7Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBh
cmF0b3I6OkRJRkZFUkVOVCwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2Fn
ZV8xXywgbWVzc2FnZV8yXywgZmllbGQsIC0xLCAtMSwgTlVMTCkpOwotfQotCi1URVNUX0YoRGVm
YXVsdEZpZWxkQ29tcGFyYXRvclRlc3QsIFVJbnQzMkNvbXBhcmlzb24pIHsKLSAgY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCA9Ci0gICAgICBkZXNjcmlwdG9yXy0+RmluZEZpZWxkQnlOYW1l
KCJvcHRpb25hbF91aW50MzIiKTsKLSAgbWVzc2FnZV8xXy5zZXRfb3B0aW9uYWxfdWludDMyKDEp
OwotICBtZXNzYWdlXzJfLnNldF9vcHRpb25hbF91aW50MzIoMSk7Ci0KLSAgRVhQRUNUX0VRKEZp
ZWxkQ29tcGFyYXRvcjo6U0FNRSwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVz
c2FnZV8xXywgbWVzc2FnZV8yXywgZmllbGQsIC0xLCAtMSwgTlVMTCkpOwotCi0gIG1lc3NhZ2Vf
Ml8uc2V0X29wdGlvbmFsX3VpbnQzMigyKTsKLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6
RElGRkVSRU5ULAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBt
ZXNzYWdlXzJfLCBmaWVsZCwgLTEsIC0xLCBOVUxMKSk7Ci19Ci0KLVRFU1RfRihEZWZhdWx0Rmll
bGRDb21wYXJhdG9yVGVzdCwgVUludDY0Q29tcGFyaXNvbikgewotICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkID0KLSAgICAgIGRlc2NyaXB0b3JfLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlv
bmFsX3VpbnQ2NCIpOwotICBtZXNzYWdlXzFfLnNldF9vcHRpb25hbF91aW50NjQoMUwpOwotICBt
ZXNzYWdlXzJfLnNldF9vcHRpb25hbF91aW50NjQoMUwpOwotCi0gIEVYUEVDVF9FUShGaWVsZENv
bXBhcmF0b3I6OlNBTUUsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2Vf
MV8sIG1lc3NhZ2VfMl8sIGZpZWxkLCAtMSwgLTEsIE5VTEwpKTsKLQotICBtZXNzYWdlXzJfLnNl
dF9vcHRpb25hbF91aW50NjQoMkwpOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpESUZG
RVJFTlQsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3Nh
Z2VfMl8sIGZpZWxkLCAtMSwgLTEsIE5VTEwpKTsKLX0KLQotVEVTVF9GKERlZmF1bHRGaWVsZENv
bXBhcmF0b3JUZXN0LCBCb29sZWFuQ29tcGFyaXNvbikgewotICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkID0KLSAgICAgIGRlc2NyaXB0b3JfLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFs
X2Jvb2wiKTsKLSAgbWVzc2FnZV8xXy5zZXRfb3B0aW9uYWxfYm9vbCh0cnVlKTsKLSAgbWVzc2Fn
ZV8yXy5zZXRfb3B0aW9uYWxfYm9vbCh0cnVlKTsKLQotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJh
dG9yOjpTQU1FLAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBt
ZXNzYWdlXzJfLCBmaWVsZCwgLTEsIC0xLCBOVUxMKSk7Ci0KLSAgbWVzc2FnZV8yXy5zZXRfb3B0
aW9uYWxfYm9vbChmYWxzZSk7Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBhcmF0b3I6OkRJRkZFUkVO
VCwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8y
XywgZmllbGQsIC0xLCAtMSwgTlVMTCkpOwotfQotCi1URVNUX0YoRGVmYXVsdEZpZWxkQ29tcGFy
YXRvclRlc3QsIEVudW1Db21wYXJpc29uKSB7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmll
bGQgPQotICAgICAgZGVzY3JpcHRvcl8tPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfbmVzdGVk
X2VudW0iKTsKLSAgbWVzc2FnZV8xXy5zZXRfb3B0aW9uYWxfbmVzdGVkX2VudW0oVGVzdEFsbFR5
cGVzOjpCQVIpOwotICBtZXNzYWdlXzJfLnNldF9vcHRpb25hbF9uZXN0ZWRfZW51bShUZXN0QWxs
VHlwZXM6OkJBUik7Ci0KLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6U0FNRSwKLSAgICAg
ICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywgZmllbGQs
IC0xLCAtMSwgTlVMTCkpOwotCi0gIG1lc3NhZ2VfMl8uc2V0X29wdGlvbmFsX25lc3RlZF9lbnVt
KFRlc3RBbGxUeXBlczo6QkFaKTsKLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6RElGRkVS
RU5ULAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdl
XzJfLCBmaWVsZCwgLTEsIC0xLCBOVUxMKSk7Ci19Ci0KLVRFU1RfRihEZWZhdWx0RmllbGRDb21w
YXJhdG9yVGVzdCwgU3RyaW5nQ29tcGFyaXNvbikgewotICBjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkID0KLSAgICAgIGRlc2NyaXB0b3JfLT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX3N0
cmluZyIpOwotICBtZXNzYWdlXzFfLnNldF9vcHRpb25hbF9zdHJpbmcoImZvbyIpOwotICBtZXNz
YWdlXzJfLnNldF9vcHRpb25hbF9zdHJpbmcoImZvbyIpOwotCi0gIEVYUEVDVF9FUShGaWVsZENv
bXBhcmF0b3I6OlNBTUUsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2Vf
MV8sIG1lc3NhZ2VfMl8sIGZpZWxkLCAtMSwgLTEsIE5VTEwpKTsKLQotICBtZXNzYWdlXzJfLnNl
dF9vcHRpb25hbF9zdHJpbmcoImJhciIpOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpE
SUZGRVJFTlQsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1l
c3NhZ2VfMl8sIGZpZWxkLCAtMSwgLTEsIE5VTEwpKTsKLX0KLQotVEVTVF9GKERlZmF1bHRGaWVs
ZENvbXBhcmF0b3JUZXN0LCBGbG9hdGluZ1BvaW50Q29tcGFyaXNvbkV4YWN0KSB7Ci0gIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZmllbGRfZmxvYXQgPQotICAgICAgZGVzY3JpcHRvcl8tPkZpbmRG
aWVsZEJ5TmFtZSgib3B0aW9uYWxfZmxvYXQiKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZF9kb3VibGUgPQotICAgICAgZGVzY3JpcHRvcl8tPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9u
YWxfZG91YmxlIik7Ci0KLSAgbWVzc2FnZV8xXy5zZXRfb3B0aW9uYWxfZmxvYXQoMC4xZik7Ci0g
IG1lc3NhZ2VfMl8uc2V0X29wdGlvbmFsX2Zsb2F0KDAuMWYpOwotICBtZXNzYWdlXzFfLnNldF9v
cHRpb25hbF9kb3VibGUoMC4xKTsKLSAgbWVzc2FnZV8yXy5zZXRfb3B0aW9uYWxfZG91YmxlKDAu
MSk7Ci0KLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6U0FNRSwKLSAgICAgICAgICAgIGNv
bXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmllbGRfZmxvYXQsIC0xLCAtMSwgTlVMTCkpOwotICBFWFBFQ1Rf
RVEoRmllbGRDb21wYXJhdG9yOjpTQU1FLAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFy
ZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9kb3VibGUsIC0xLCAtMSwgTlVMTCkpOwotCi0gIG1lc3NhZ2VfMl8uc2V0X29wdGlv
bmFsX2Zsb2F0KDAuMmYpOwotICBtZXNzYWdlXzJfLnNldF9vcHRpb25hbF9kb3VibGUoMC4yKTsK
LQotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpESUZGRVJFTlQsCi0gICAgICAgICAgICBj
b21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3NhZ2VfMl8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpZWxkX2Zsb2F0LCAtMSwgLTEsIE5VTEwpKTsKLSAgRVhQRUNU
X0VRKEZpZWxkQ29tcGFyYXRvcjo6RElGRkVSRU5ULAotICAgICAgICAgICAgY29tcGFyYXRvcl8u
Q29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWVsZF9kb3VibGUsIC0xLCAtMSwgTlVMTCkpOwotfQotCi1URVNUX0YoRGVmYXVs
dEZpZWxkQ29tcGFyYXRvclRlc3QsIEZsb2F0aW5nUG9pbnRDb21wYXJpc29uQXBwcm94aW1hdGUp
IHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZF9mbG9hdCA9Ci0gICAgICBkZXNjcmlw
dG9yXy0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9mbG9hdCIpOwotICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIGZpZWxkX2RvdWJsZSA9Ci0gICAgICBkZXNjcmlwdG9yXy0+RmluZEZpZWxkQnlO
YW1lKCJvcHRpb25hbF9kb3VibGUiKTsKLQotICBtZXNzYWdlXzFfLnNldF9vcHRpb25hbF9mbG9h
dCgyLjMwMDAwNWYpOwotICBtZXNzYWdlXzJfLnNldF9vcHRpb25hbF9mbG9hdCgyLjMwMDAwNmYp
OwotICBtZXNzYWdlXzFfLnNldF9vcHRpb25hbF9kb3VibGUoMi4zMDAwMDAwMDAwMDAwMDAzKTsK
LSAgbWVzc2FnZV8yXy5zZXRfb3B0aW9uYWxfZG91YmxlKDIuMzAwMDAwMDAwMDAwMDAwNyk7Ci0K
LSAgLy8gQXBwcm94aW1hdGUgY29tcGFyaXNvbiBkZXBlbmRzIG9uIE1hdGhVdGlsLCBzbyB3ZSBh
c3NlcnQgb24gTWF0aFV0aWwKLSAgLy8gcmVzdWx0cyBmaXJzdCB0byBjaGVjayBpZiB0aGF0J3Mg
d2hlcmUgdGhlIGZhaWx1cmUgd2FzIGludHJvZHVjZWQuCi0gIEFTU0VSVF9ORShtZXNzYWdlXzFf
Lm9wdGlvbmFsX2Zsb2F0KCksIG1lc3NhZ2VfMl8ub3B0aW9uYWxfZmxvYXQoKSk7Ci0gIEFTU0VS
VF9ORShtZXNzYWdlXzFfLm9wdGlvbmFsX2RvdWJsZSgpLCBtZXNzYWdlXzJfLm9wdGlvbmFsX2Rv
dWJsZSgpKTsKLSAgQVNTRVJUX1RSVUUoTWF0aFV0aWw6OkFsbW9zdEVxdWFscyhtZXNzYWdlXzFf
Lm9wdGlvbmFsX2Zsb2F0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZV8yXy5vcHRpb25hbF9mbG9hdCgpKSk7Ci0gIEFTU0VSVF9UUlVFKE1hdGhVdGlsOjpB
bG1vc3RFcXVhbHMobWVzc2FnZV8xXy5vcHRpb25hbF9kb3VibGUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXzJfLm9wdGlvbmFsX2RvdWJsZSgpKSk7Ci0K
LSAgLy8gRGVmYXVsdEZpZWxkQ29tcGFyYXRvcidzIGRlZmF1bHQgZmxvYXQgY29tcGFyaXNvbiBt
b2RlIGlzIEVYQUNULgotICBBU1NFUlRfRVEoRGVmYXVsdEZpZWxkQ29tcGFyYXRvcjo6RVhBQ1Qs
IGNvbXBhcmF0b3JfLmZsb2F0X2NvbXBhcmlzb24oKSk7Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBh
cmF0b3I6OkRJRkZFUkVOVCwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2Fn
ZV8xXywgbWVzc2FnZV8yXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRf
ZmxvYXQsIC0xLCAtMSwgTlVMTCkpOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpESUZG
RVJFTlQsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3Nh
Z2VfMl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2RvdWJsZSwgLTEs
IC0xLCBOVUxMKSk7Ci0KLSAgY29tcGFyYXRvcl8uc2V0X2Zsb2F0X2NvbXBhcmlzb24oRGVmYXVs
dEZpZWxkQ29tcGFyYXRvcjo6QVBQUk9YSU1BVEUpOwotCi0gIEVYUEVDVF9FUShGaWVsZENvbXBh
cmF0b3I6OlNBTUUsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8s
IG1lc3NhZ2VfMl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2Zsb2F0
LCAtMSwgLTEsIE5VTEwpKTsKLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6U0FNRSwKLSAg
ICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZG91YmxlLCAtMSwgLTEsIE5VTEwp
KTsKLX0KLQotVEVTVF9GKERlZmF1bHRGaWVsZENvbXBhcmF0b3JUZXN0LCBGbG9hdGluZ1BvaW50
Q29tcGFyaXNvblRyZWF0TmFOc0FzRXF1YWwpIHsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZF9mbG9hdCA9Ci0gICAgICBkZXNjcmlwdG9yXy0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25h
bF9mbG9hdCIpOwotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2RvdWJsZSA9Ci0gICAg
ICBkZXNjcmlwdG9yXy0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9kb3VibGUiKTsKLQotICBt
ZXNzYWdlXzFfLnNldF9vcHRpb25hbF9mbG9hdChNYXRoTGltaXRzPGZsb2F0Pjo6a05hTik7Ci0g
IG1lc3NhZ2VfMl8uc2V0X29wdGlvbmFsX2Zsb2F0KE1hdGhMaW1pdHM8ZmxvYXQ+OjprTmFOKTsK
LSAgbWVzc2FnZV8xXy5zZXRfb3B0aW9uYWxfZG91YmxlKE1hdGhMaW1pdHM8ZG91YmxlPjo6a05h
Tik7Ci0gIG1lc3NhZ2VfMl8uc2V0X29wdGlvbmFsX2RvdWJsZShNYXRoTGltaXRzPGRvdWJsZT46
OmtOYU4pOwotCi0gIC8vIERlZmF1bHRGaWVsZENvbXBhcmF0b3IncyBkZWZhdWx0IGZsb2F0IGNv
bXBhcmlzb24gbW9kZSBpcyBFWEFDVCB3aXRoCi0gIC8vIHRyZWF0aW5nIE5hTnMgYXMgZGlmZmVy
ZW50LgotICBBU1NFUlRfRVEoRGVmYXVsdEZpZWxkQ29tcGFyYXRvcjo6RVhBQ1QsIGNvbXBhcmF0
b3JfLmZsb2F0X2NvbXBhcmlzb24oKSk7Ci0gIEFTU0VSVF9FUShmYWxzZSwgY29tcGFyYXRvcl8u
dHJlYXRfbmFuX2FzX2VxdWFsKCkpOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpESUZG
RVJFTlQsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3Nh
Z2VfMl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2Zsb2F0LCAtMSwg
LTEsIE5VTEwpKTsKLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6RElGRkVSRU5ULAotICAg
ICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9kb3VibGUsIC0xLCAtMSwgTlVMTCkp
OwotICBjb21wYXJhdG9yXy5zZXRfZmxvYXRfY29tcGFyaXNvbihEZWZhdWx0RmllbGRDb21wYXJh
dG9yOjpBUFBST1hJTUFURSk7Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBhcmF0b3I6OkRJRkZFUkVO
VCwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8y
XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZmxvYXQsIC0xLCAtMSwg
TlVMTCkpOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpESUZGRVJFTlQsCi0gICAgICAg
ICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3NhZ2VfMl8sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2RvdWJsZSwgLTEsIC0xLCBOVUxMKSk7Ci0K
LSAgY29tcGFyYXRvcl8uc2V0X3RyZWF0X25hbl9hc19lcXVhbCh0cnVlKTsKLSAgQVNTRVJUX0VR
KHRydWUsIGNvbXBhcmF0b3JfLnRyZWF0X25hbl9hc19lcXVhbCgpKTsKLSAgY29tcGFyYXRvcl8u
c2V0X2Zsb2F0X2NvbXBhcmlzb24oRGVmYXVsdEZpZWxkQ29tcGFyYXRvcjo6RVhBQ1QpOwotICBF
WFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpTQU1FLAotICAgICAgICAgICAgY29tcGFyYXRvcl8u
Q29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWVsZF9mbG9hdCwgLTEsIC0xLCBOVUxMKSk7Ci0gIEVYUEVDVF9FUShGaWVsZENv
bXBhcmF0b3I6OlNBTUUsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2Vf
MV8sIG1lc3NhZ2VfMl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2Rv
dWJsZSwgLTEsIC0xLCBOVUxMKSk7Ci0gIGNvbXBhcmF0b3JfLnNldF9mbG9hdF9jb21wYXJpc29u
KERlZmF1bHRGaWVsZENvbXBhcmF0b3I6OkFQUFJPWElNQVRFKTsKLSAgRVhQRUNUX0VRKEZpZWxk
Q29tcGFyYXRvcjo6U0FNRSwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2Fn
ZV8xXywgbWVzc2FnZV8yXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRf
ZmxvYXQsIC0xLCAtMSwgTlVMTCkpOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpTQU1F
LAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJf
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9kb3VibGUsIC0xLCAtMSwg
TlVMTCkpOwotfQotCi1URVNUX0YoRGVmYXVsdEZpZWxkQ29tcGFyYXRvclRlc3QsCi0gICAgICAg
RmxvYXRpbmdQb2ludENvbXBhcmlzb25XaXRoaW5GcmFjdGlvbk9yTWFyZ2luKSB7Ci0gIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZmllbGRfZmxvYXQgPQotICAgICAgZGVzY3JpcHRvcl8tPkZpbmRG
aWVsZEJ5TmFtZSgib3B0aW9uYWxfZmxvYXQiKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZF9kb3VibGUgPQotICAgICAgZGVzY3JpcHRvcl8tPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9u
YWxfZG91YmxlIik7Ci0KLSAgbWVzc2FnZV8xXy5zZXRfb3B0aW9uYWxfZmxvYXQoMTAwLjBmKTsK
LSAgbWVzc2FnZV8yXy5zZXRfb3B0aW9uYWxfZmxvYXQoMTA5LjlmKTsKLSAgbWVzc2FnZV8xXy5z
ZXRfb3B0aW9uYWxfZG91YmxlKDEwMC4wKTsKLSAgbWVzc2FnZV8yXy5zZXRfb3B0aW9uYWxfZG91
YmxlKDEwOS45KTsKLQotICBjb21wYXJhdG9yXy5zZXRfZmxvYXRfY29tcGFyaXNvbihEZWZhdWx0
RmllbGRDb21wYXJhdG9yOjpBUFBST1hJTUFURSk7Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBhcmF0
b3I6OkRJRkZFUkVOVCwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8x
XywgbWVzc2FnZV8yXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZmxv
YXQsIC0xLCAtMSwgTlVMTCkpOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpESUZGRVJF
TlQsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3NhZ2Vf
Ml8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2RvdWJsZSwgLTEsIC0x
LCBOVUxMKSk7Ci0KLSAgLy8gU2hvdWxkIGZhaWwgc2luY2UgdGhlIGZyYWN0aW9uIGlzIHRvbyBs
b3cuCi0gIGNvbXBhcmF0b3JfLlNldEZyYWN0aW9uQW5kTWFyZ2luKGZpZWxkX2Zsb2F0LCAwLjAx
LCAwLjApOwotICBjb21wYXJhdG9yXy5TZXRGcmFjdGlvbkFuZE1hcmdpbihmaWVsZF9kb3VibGUs
IDAuMDEsIDAuMCk7Ci0KLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6RElGRkVSRU5ULAot
ICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9mbG9hdCwgLTEsIC0xLCBOVUxM
KSk7Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBhcmF0b3I6OkRJRkZFUkVOVCwKLSAgICAgICAgICAg
IGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmllbGRfZG91YmxlLCAtMSwgLTEsIE5VTEwpKTsKLQotICAv
LyBTaG91bGQgZmFpbCBzaW5jZSB0aGUgbWFyZ2luIGlzIHRvbyBsb3cuCi0gIGNvbXBhcmF0b3Jf
LlNldEZyYWN0aW9uQW5kTWFyZ2luKGZpZWxkX2Zsb2F0LCAwLjAsIDkuMCk7Ci0gIGNvbXBhcmF0
b3JfLlNldEZyYWN0aW9uQW5kTWFyZ2luKGZpZWxkX2RvdWJsZSwgMC4wLCA5LjApOwotICBFWFBF
Q1RfRVEoRmllbGRDb21wYXJhdG9yOjpESUZGRVJFTlQsCi0gICAgICAgICAgICBjb21wYXJhdG9y
Xy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3NhZ2VfMl8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpZWxkX2Zsb2F0LCAtMSwgLTEsIE5VTEwpKTsKLSAgRVhQRUNUX0VRKEZpZWxk
Q29tcGFyYXRvcjo6RElGRkVSRU5ULAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZSht
ZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWVsZF9kb3VibGUsIC0xLCAtMSwgTlVMTCkpOwotCi0gIC8vIFNob3VsZCBzdWNjZWVkIHNpbmNl
IHRoZSBmcmFjdGlvbiBpcyBoaWdoIGVub3VnaC4KLSAgY29tcGFyYXRvcl8uU2V0RnJhY3Rpb25B
bmRNYXJnaW4oZmllbGRfZmxvYXQsIDAuMiwgMC4wKTsKLSAgY29tcGFyYXRvcl8uU2V0RnJhY3Rp
b25BbmRNYXJnaW4oZmllbGRfZG91YmxlLCAwLjIsIDAuMCk7Ci0gIEVYUEVDVF9FUShGaWVsZENv
bXBhcmF0b3I6OlNBTUUsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2Vf
MV8sIG1lc3NhZ2VfMl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2Zs
b2F0LCAtMSwgLTEsIE5VTEwpKTsKLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6U0FNRSwK
LSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZG91YmxlLCAtMSwgLTEsIE5V
TEwpKTsKLQotICAvLyBTaG91bGQgc3VjY2VlZCBzaW5jZSB0aGUgbWFyZ2luIGlzIGhpZ2ggZW5v
dWdoLgotICBjb21wYXJhdG9yXy5TZXRGcmFjdGlvbkFuZE1hcmdpbihmaWVsZF9mbG9hdCwgMC4w
LCAxMC4wKTsKLSAgY29tcGFyYXRvcl8uU2V0RnJhY3Rpb25BbmRNYXJnaW4oZmllbGRfZG91Ymxl
LCAwLjAsIDEwLjApOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpTQU1FLAotICAgICAg
ICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9mbG9hdCwgLTEsIC0xLCBOVUxMKSk7Ci0g
IEVYUEVDVF9FUShGaWVsZENvbXBhcmF0b3I6OlNBTUUsCi0gICAgICAgICAgICBjb21wYXJhdG9y
Xy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3NhZ2VfMl8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpZWxkX2RvdWJsZSwgLTEsIC0xLCBOVUxMKSk7Ci0KLSAgLy8gU2V0dGluZyB2
YWx1ZXMgZm9yIG9uZSBvZiB0aGUgZmllbGRzIHNob3VsZCBub3QgYWZmZWN0IHRoZSBvdGhlci4K
LSAgY29tcGFyYXRvcl8uU2V0RnJhY3Rpb25BbmRNYXJnaW4oZmllbGRfZG91YmxlLCAwLjAsIDAu
MCk7Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBhcmF0b3I6OlNBTUUsCi0gICAgICAgICAgICBjb21w
YXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3NhZ2VfMl8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpZWxkX2Zsb2F0LCAtMSwgLTEsIE5VTEwpKTsKLSAgRVhQRUNUX0VR
KEZpZWxkQ29tcGFyYXRvcjo6RElGRkVSRU5ULAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29t
cGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWVsZF9kb3VibGUsIC0xLCAtMSwgTlVMTCkpOwotCi0gIC8vICtpbmYgc2hvdWxkIGJl
IGVxdWFsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCB0ZWNobmljYWxseSB3aXRoaW4gbWFyZ2lu
IG9yCi0gIC8vIGZyYWN0aW9uLgotICBtZXNzYWdlXzFfLnNldF9vcHRpb25hbF9mbG9hdChudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpOwotICBtZXNzYWdlXzJfLnNldF9vcHRpb25h
bF9mbG9hdChudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpOwotICBtZXNzYWdlXzFf
LnNldF9vcHRpb25hbF9kb3VibGUobnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7
Ci0gIG1lc3NhZ2VfMl8uc2V0X29wdGlvbmFsX2RvdWJsZShudW1lcmljX2xpbWl0czxkb3VibGU+
OjppbmZpbml0eSgpKTsKLSAgY29tcGFyYXRvcl8uU2V0RnJhY3Rpb25BbmRNYXJnaW4oZmllbGRf
ZmxvYXQsIDAuMCwgMC4wKTsKLSAgY29tcGFyYXRvcl8uU2V0RnJhY3Rpb25BbmRNYXJnaW4oZmll
bGRfZG91YmxlLCAwLjAsIDAuMCk7Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBhcmF0b3I6OlNBTUUs
Ci0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3NhZ2VfMl8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2Zsb2F0LCAtMSwgLTEsIE5V
TEwpKTsKLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6U0FNRSwKLSAgICAgICAgICAgIGNv
bXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmllbGRfZG91YmxlLCAtMSwgLTEsIE5VTEwpKTsKLQotICAvLyAt
aW5mIHNob3VsZCBiZSBlcXVhbCBldmVuIHRob3VnaCB0aGV5IGFyZSBub3QgdGVjaG5pY2FsbHkg
d2l0aGluIG1hcmdpbiBvcgotICAvLyBmcmFjdGlvbi4KLSAgbWVzc2FnZV8xXy5zZXRfb3B0aW9u
YWxfZmxvYXQoLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSk7Ci0gIG1lc3NhZ2Vf
Ml8uc2V0X29wdGlvbmFsX2Zsb2F0KC1udW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkp
OwotICBtZXNzYWdlXzFfLnNldF9vcHRpb25hbF9kb3VibGUoLW51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OmluZmluaXR5KCkpOwotICBtZXNzYWdlXzJfLnNldF9vcHRpb25hbF9kb3VibGUoLW51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOwotICBjb21wYXJhdG9yXy5TZXRGcmFjdGlv
bkFuZE1hcmdpbihmaWVsZF9mbG9hdCwgMC4wLCAwLjApOwotICBjb21wYXJhdG9yXy5TZXRGcmFj
dGlvbkFuZE1hcmdpbihmaWVsZF9kb3VibGUsIDAuMCwgMC4wKTsKLSAgRVhQRUNUX0VRKEZpZWxk
Q29tcGFyYXRvcjo6U0FNRSwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2Fn
ZV8xXywgbWVzc2FnZV8yXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRf
ZmxvYXQsIC0xLCAtMSwgTlVMTCkpOwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpTQU1F
LAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJf
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9kb3VibGUsIC0xLCAtMSwg
TlVMTCkpOwotfQotCi1URVNUX0YoRGVmYXVsdEZpZWxkQ29tcGFyYXRvclRlc3QsCi0gICAgICAg
RmxvYXRpbmdQb2ludENvbXBhcmlzb25XaXRoaW5EZWZhdWx0RnJhY3Rpb25Pck1hcmdpbikgewot
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkX2Zsb2F0ID0KLSAgICAgIGRlc2NyaXB0b3Jf
LT5GaW5kRmllbGRCeU5hbWUoIm9wdGlvbmFsX2Zsb2F0Iik7Ci0gIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGRfZG91YmxlID0KLSAgICAgIGRlc2NyaXB0b3JfLT5GaW5kRmllbGRCeU5hbWUo
Im9wdGlvbmFsX2RvdWJsZSIpOwotCi0gIG1lc3NhZ2VfMV8uc2V0X29wdGlvbmFsX2Zsb2F0KDEw
MC4wZik7Ci0gIG1lc3NhZ2VfMl8uc2V0X29wdGlvbmFsX2Zsb2F0KDEwOS45Zik7Ci0gIG1lc3Nh
Z2VfMV8uc2V0X29wdGlvbmFsX2RvdWJsZSgxMDAuMCk7Ci0gIG1lc3NhZ2VfMl8uc2V0X29wdGlv
bmFsX2RvdWJsZSgxMDkuOSk7Ci0KLSAgY29tcGFyYXRvcl8uc2V0X2Zsb2F0X2NvbXBhcmlzb24o
RGVmYXVsdEZpZWxkQ29tcGFyYXRvcjo6QVBQUk9YSU1BVEUpOwotICBFWFBFQ1RfRVEoRmllbGRD
b21wYXJhdG9yOjpESUZGRVJFTlQsCi0gICAgICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1l
c3NhZ2VfMV8sIG1lc3NhZ2VfMl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
ZWxkX2Zsb2F0LCAtMSwgLTEsIE5VTEwpKTsKLSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6
RElGRkVSRU5ULAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBt
ZXNzYWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9kb3VibGUs
IC0xLCAtMSwgTlVMTCkpOwotCi0gIC8vIFNldCBkZWZhdWx0IGZyYWN0aW9uIGFuZCBtYXJnaW4u
Ci0gIGNvbXBhcmF0b3JfLlNldERlZmF1bHRGcmFjdGlvbkFuZE1hcmdpbigwLjAxLCAwLjApOwot
Ci0gIC8vIEZsb2F0IGNvbXBhcmlzb25zIHNob3VsZCBmYWlsIHNpbmNlIHRoZSBmcmFjdGlvbiBp
cyB0b28gbG93LgotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9yOjpESUZGRVJFTlQsCi0gICAg
ICAgICAgICBjb21wYXJhdG9yXy5Db21wYXJlKG1lc3NhZ2VfMV8sIG1lc3NhZ2VfMl8sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2Zsb2F0LCAtMSwgLTEsIE5VTEwpKTsK
LSAgRVhQRUNUX0VRKEZpZWxkQ29tcGFyYXRvcjo6RElGRkVSRU5ULAotICAgICAgICAgICAgY29t
cGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaWVsZF9kb3VibGUsIC0xLCAtMSwgTlVMTCkpOwotCi0gIC8vIFNl
dCBmaWVsZC1zcGVjaWZpYyBmcmFjdGlvbiBhbmQgbWFyZ2luIGZvciBvbmUgZmllbGQgKGZpZWxk
X2Zsb2F0KSBidXQgbm90Ci0gIC8vIHRoZSBvdGhlciAoZmllbGRfZG91YmxlKQotICBjb21wYXJh
dG9yXy5TZXRGcmFjdGlvbkFuZE1hcmdpbihmaWVsZF9mbG9hdCwgMC4yLCAwLjApOwotCi0gIC8v
IFRoZSBmaWVsZCB3aXRoIHRoZSBvdmVycmlkZSBzaG91bGQgc3VjY2VlZCwgc2luY2UgaXRzIGZp
ZWxkLXNwZWNpZmljCi0gIC8vIGZyYWN0aW9uIGlzIGhpZ2ggZW5vdWdoLgotICBFWFBFQ1RfRVEo
RmllbGRDb21wYXJhdG9yOjpTQU1FLAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZSht
ZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWVsZF9mbG9hdCwgLTEsIC0xLCBOVUxMKSk7Ci0gIC8vIFRoZSBmaWVsZCB3aXRoIG5vIG92ZXJy
aWRlIHNob3VsZCBmYWlsLCBzaW5jZSB0aGUgZGVmYXVsdCBmcmFjdGlvbiBpcyB0b28KLSAgLy8g
bG93Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBhcmF0b3I6OkRJRkZFUkVOVCwKLSAgICAgICAgICAg
IGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmllbGRfZG91YmxlLCAtMSwgLTEsIE5VTEwpKTsKLQotICAv
LyBTZXQgdGhlIGRlZmF1bHQgZnJhY3Rpb24gYW5kIG1hcmdpbiBoaWdoIGVub3VnaCBzbyB0aGF0
IGZpZWxkcyB0aGF0IHVzZQotICAvLyB0aGUgZGVmYXVsdCBzaG91bGQgc3VjY2VlZAotICBjb21w
YXJhdG9yXy5TZXREZWZhdWx0RnJhY3Rpb25BbmRNYXJnaW4oMC4yLCAwLjApOwotICBFWFBFQ1Rf
RVEoRmllbGRDb21wYXJhdG9yOjpTQU1FLAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFy
ZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9kb3VibGUsIC0xLCAtMSwgTlVMTCkpOwotCi0gIC8vIFRoZSBmaWVsZCB3aXRoIGFu
IG92ZXJyaWRlIHNob3VsZCBzdGlsbCBiZSBPSwotICBFWFBFQ1RfRVEoRmllbGRDb21wYXJhdG9y
OjpTQU1FLAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZShtZXNzYWdlXzFfLCBtZXNz
YWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9mbG9hdCwgLTEs
IC0xLCBOVUxMKSk7Ci0KLSAgLy8gU2V0IGZyYWN0aW9uIGFuZCBtYXJnaW4gZm9yIHRoZSBmaWVs
ZCB3aXRoIGFuIG92ZXJyaWRlIHRvIGJlIHRvbyBsb3cKLSAgY29tcGFyYXRvcl8uU2V0RnJhY3Rp
b25BbmRNYXJnaW4oZmllbGRfZmxvYXQsIDAuMDEsIDAuMCk7Ci0KLSAgLy8gTm93IG91ciBkZWZh
dWx0IGlzIGhpZ2ggZW5vdWdoIGJ1dCBmaWVsZF9mbG9hdCdzIG92ZXJyaWRlIGlzIHRvbyBsb3cu
Ci0gIEVYUEVDVF9FUShGaWVsZENvbXBhcmF0b3I6OkRJRkZFUkVOVCwKLSAgICAgICAgICAgIGNv
bXBhcmF0b3JfLkNvbXBhcmUobWVzc2FnZV8xXywgbWVzc2FnZV8yXywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmllbGRfZmxvYXQsIC0xLCAtMSwgTlVMTCkpOwotICBFWFBFQ1Rf
RVEoRmllbGRDb21wYXJhdG9yOjpTQU1FLAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFy
ZShtZXNzYWdlXzFfLCBtZXNzYWdlXzJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9kb3VibGUsIC0xLCAtMSwgTlVMTCkpOwotfQotCi0vLyBTaW1wbGUgdGVzdCBjaGVj
a2luZyB3aGV0aGVyIHdlIGNvbXBhcmUgdmFsdWVzIGF0IGNvcnJlY3QgaW5kaWNlcy4KLVRFU1Rf
RihEZWZhdWx0RmllbGRDb21wYXJhdG9yVGVzdCwgUmVwZWF0ZWRGaWVsZENvbXBhcmlzb24pIHsK
LSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9Ci0gICAgICBkZXNjcmlwdG9yXy0+Rmlu
ZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9zdHJpbmciKTsKLQotICBtZXNzYWdlXzFfLmFkZF9yZXBl
YXRlZF9zdHJpbmcoImZvbyIpOwotICBtZXNzYWdlXzFfLmFkZF9yZXBlYXRlZF9zdHJpbmcoImJh
ciIpOwotICBtZXNzYWdlXzJfLmFkZF9yZXBlYXRlZF9zdHJpbmcoImJhciIpOwotICBtZXNzYWdl
XzJfLmFkZF9yZXBlYXRlZF9zdHJpbmcoImJheiIpOwotCi0gIEVYUEVDVF9FUShGaWVsZENvbXBh
cmF0b3I6OkRJRkZFUkVOVCwKLSAgICAgICAgICAgIGNvbXBhcmF0b3JfLkNvbXBhcmUobWVzc2Fn
ZV8xXywgbWVzc2FnZV8yXywgZmllbGQsIDAsIDAsIE5VTEwpKTsKLSAgRVhQRUNUX0VRKEZpZWxk
Q29tcGFyYXRvcjo6RElGRkVSRU5ULAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZSht
ZXNzYWdlXzFfLCBtZXNzYWdlXzJfLCBmaWVsZCwgMSwgMSwgTlVMTCkpOwotICBFWFBFQ1RfRVEo
RmllbGRDb21wYXJhdG9yOjpTQU1FLAotICAgICAgICAgICAgY29tcGFyYXRvcl8uQ29tcGFyZSht
ZXNzYWdlXzFfLCBtZXNzYWdlXzJfLCBmaWVsZCwgMSwgMCwgTlVMTCkpOwotfQotCi19ICAvLyBu
YW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UK
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91
dGlsL2ZpZWxkX21hc2tfdXRpbC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxkX21h
c2tfdXRpbC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ3YzlmYjUyODQ2OWQ3
NmZiMmRkM2RiNzllM2U3NDk5ZTFkZjA0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9tYXNrX3V0aWwu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSw0OTQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9tYXNr
X3V0aWwuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hcF91dGlsLmg+Ci0KLW5hbWVzcGFjZSBn
b29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1dGlsIHsKLQotdXNpbmcg
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRNYXNrOwotCi1zdHJpbmcgRmllbGRNYXNrVXRpbDo6VG9T
dHJpbmcoY29uc3QgRmllbGRNYXNrJiBtYXNrKSB7Ci0gIHJldHVybiBKb2luKG1hc2sucGF0aHMo
KSwgIiwiKTsKLX0KLQotdm9pZCBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5nKFN0cmluZ1BpZWNl
IHN0ciwgRmllbGRNYXNrKiBvdXQpIHsKLSAgb3V0LT5DbGVhcigpOwotICB2ZWN0b3I8c3RyaW5n
PiBwYXRocyA9IFNwbGl0KHN0ciwgIiwiKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRocy5z
aXplKCk7ICsraSkgewotICAgIGlmIChwYXRoc1tpXS5lbXB0eSgpKSBjb250aW51ZTsKLSAgICBv
dXQtPmFkZF9wYXRocyhwYXRoc1tpXSk7Ci0gIH0KLX0KLQotYm9vbCBGaWVsZE1hc2tVdGlsOjpT
bmFrZUNhc2VUb0NhbWVsQ2FzZShTdHJpbmdQaWVjZSBpbnB1dCwgc3RyaW5nKiBvdXRwdXQpIHsK
LSAgb3V0cHV0LT5jbGVhcigpOwotICBib29sIGFmdGVyX3VuZGVyc2NvcmUgPSBmYWxzZTsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7ICsraSkgewotICAgIGlmIChpbnB1dFtp
XSA+PSAnQScgJiYgaW5wdXRbaV0gPD0gJ1onKSB7Ci0gICAgICAvLyBUaGUgZmllbGQgbmFtZSBt
dXN0IG5vdCBjb250YWluIHVwcGVyY2FzZSBsZXR0ZXJzLgotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBpZiAoYWZ0ZXJfdW5kZXJzY29yZSkgewotICAgICAgaWYgKGlucHV0W2ldID49
ICdhJyAmJiBpbnB1dFtpXSA8PSAneicpIHsKLSAgICAgICAgb3V0cHV0LT5wdXNoX2JhY2soaW5w
dXRbaV0gKyAnQScgLSAnYScpOwotICAgICAgICBhZnRlcl91bmRlcnNjb3JlID0gZmFsc2U7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGUgY2hhcmFjdGVyIGFmdGVyIGEgIl8iIG11c3Qg
YmUgYSBsb3dlcmNhc2UgbGV0dGVyLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChpbnB1dFtpXSA9PSAnXycpIHsKLSAgICAgIGFmdGVyX3VuZGVyc2NvcmUg
PSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBvdXRwdXQtPnB1c2hfYmFjayhpbnB1dFtpXSk7
Ci0gICAgfQotICB9Ci0gIGlmIChhZnRlcl91bmRlcnNjb3JlKSB7Ci0gICAgLy8gVHJhaWxpbmcg
Il8iLgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBG
aWVsZE1hc2tVdGlsOjpDYW1lbENhc2VUb1NuYWtlQ2FzZShTdHJpbmdQaWVjZSBpbnB1dCwgc3Ry
aW5nKiBvdXRwdXQpIHsKLSAgb3V0cHV0LT5jbGVhcigpOwotICBmb3IgKGludCBpID0gMDsgaSA8
IGlucHV0LnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKGlucHV0W2ldID09ICdfJykgewotICAgICAg
Ly8gVGhlIGZpZWxkIG5hbWUgbXVzdCBub3QgY29udGFpbiAiXyJzLgotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBpZiAoaW5wdXRbaV0gPj0gJ0EnICYmIGlucHV0W2ldIDw9ICdaJykg
ewotICAgICAgb3V0cHV0LT5wdXNoX2JhY2soJ18nKTsKLSAgICAgIG91dHB1dC0+cHVzaF9iYWNr
KGlucHV0W2ldICsgJ2EnIC0gJ0EnKTsKLSAgICB9IGVsc2UgewotICAgICAgb3V0cHV0LT5wdXNo
X2JhY2soaW5wdXRbaV0pOwotICAgIH0KLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBG
aWVsZE1hc2tVdGlsOjpUb0pzb25TdHJpbmcoY29uc3QgRmllbGRNYXNrJiBtYXNrLCBzdHJpbmcq
IG91dCkgewotICBvdXQtPmNsZWFyKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWFzay5wYXRo
c19zaXplKCk7ICsraSkgewotICAgIGNvbnN0IHN0cmluZyYgcGF0aCA9IG1hc2sucGF0aHMoaSk7
Ci0gICAgc3RyaW5nIGNhbWVsY2FzZV9wYXRoOwotICAgIGlmICghU25ha2VDYXNlVG9DYW1lbENh
c2UocGF0aCwgJmNhbWVsY2FzZV9wYXRoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAoaSA+IDApIHsKLSAgICAgIG91dC0+cHVzaF9iYWNrKCcsJyk7Ci0gICAgfQotICAg
IG91dC0+YXBwZW5kKGNhbWVsY2FzZV9wYXRoKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBGaWVsZE1hc2tVdGlsOjpGcm9tSnNvblN0cmluZyhTdHJpbmdQaWVjZSBzdHIsIEZpZWxk
TWFzayogb3V0KSB7Ci0gIG91dC0+Q2xlYXIoKTsKLSAgdmVjdG9yPHN0cmluZz4gcGF0aHMgPSBT
cGxpdChzdHIsICIsIik7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aHMuc2l6ZSgpOyArK2kp
IHsKLSAgICBpZiAocGF0aHNbaV0uZW1wdHkoKSkgY29udGludWU7Ci0gICAgc3RyaW5nIHNuYWtl
Y2FzZV9wYXRoOwotICAgIGlmICghQ2FtZWxDYXNlVG9TbmFrZUNhc2UocGF0aHNbaV0sICZzbmFr
ZWNhc2VfcGF0aCkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgb3V0LT5hZGRf
cGF0aHMoc25ha2VjYXNlX3BhdGgpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZp
ZWxkTWFza1V0aWw6OkludGVybmFsSXNWYWxpZFBhdGgoY29uc3QgRGVzY3JpcHRvciogZGVzY3Jp
cHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVj
ZSBwYXRoKSB7Ci0gIHZlY3RvcjxzdHJpbmc+IHBhcnRzID0gU3BsaXQocGF0aCwgIi4iKTsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5zaXplKCk7ICsraSkgewotICAgIGNvbnN0IHN0cmlu
ZyYgZmllbGRfbmFtZSA9IHBhcnRzW2ldOwotICAgIGlmIChkZXNjcmlwdG9yID09IE5VTEwpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBm
aWVsZCA9IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZShmaWVsZF9uYW1lKTsKLSAgICBpZiAo
ZmllbGQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIWZp
ZWxkLT5pc19yZXBlYXRlZCgpICYmCi0gICAgICAgIGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxk
RGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSB7Ci0gICAgICBkZXNjcmlwdG9yID0gZmllbGQt
Pm1lc3NhZ2VfdHlwZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBkZXNjcmlwdG9yID0gTlVMTDsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRmllbGRNYXNrVXRpbDo6SW50
ZXJuYWxHZXRGaWVsZE1hc2tGb3JBbGxGaWVsZHMoCi0gICAgY29uc3QgRGVzY3JpcHRvciogZGVz
Y3JpcHRvciwgRmllbGRNYXNrKiBvdXQpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlw
dG9yLT5maWVsZF9jb3VudCgpOyArK2kpIHsKLSAgICBvdXQtPmFkZF9wYXRocyhkZXNjcmlwdG9y
LT5maWVsZChpKS0+bmFtZSgpKTsKLSAgfQotfQotCi1uYW1lc3BhY2UgewotLy8gQSBGaWVsZE1h
c2tUcmVlIHJlcHJlc2VudHMgYSBGaWVsZE1hc2sgaW4gYSB0cmVlIHN0cnVjdHVyZS4gRm9yIGV4
YW1wbGUsCi0vLyBnaXZlbiBhIEZpZWxkTWFzayAiZm9vLmJhcixmb28uYmF6LGJhci5iYXoiLCB0
aGUgRmllbGRNYXNrVHJlZSB3aWxsIGJlOgotLy8KLS8vICAgW3Jvb3RdIC0rLSBmb28gLSstIGJh
cgotLy8gICAgICAgICAgIHwgICAgICAgfAotLy8gICAgICAgICAgIHwgICAgICAgKy0gYmF6Ci0v
LyAgICAgICAgICAgfAotLy8gICAgICAgICAgICstIGJhciAtLS0gYmF6Ci0vLwotLy8gSW4gdGhl
IHRyZWUsIGVhY2ggbGVhZiBub2RlIHJlcHJlc2VudHMgYSBmaWVsZCBwYXRoLgotY2xhc3MgRmll
bGRNYXNrVHJlZSB7Ci0gcHVibGljOgotICBGaWVsZE1hc2tUcmVlKCk7Ci0gIH5GaWVsZE1hc2tU
cmVlKCk7Ci0KLSAgdm9pZCBNZXJnZUZyb21GaWVsZE1hc2soY29uc3QgRmllbGRNYXNrJiBtYXNr
KTsKLSAgdm9pZCBNZXJnZVRvRmllbGRNYXNrKEZpZWxkTWFzayogbWFzayk7Ci0KLSAgLy8gQWRk
IGEgZmllbGQgcGF0aCBpbnRvIHRoZSB0cmVlLiBJbiBhIEZpZWxkTWFzaywgZWFjaCBmaWVsZCBw
YXRoIG1hdGNoZXMKLSAgLy8gdGhlIHNwZWNpZmllZCBmaWVsZCBhbmQgYWxzbyBhbGwgaXRzIHN1
Yi1maWVsZHMuIElmIHRoZSBmaWVsZCBwYXRoIHRvCi0gIC8vIGFkZCBpcyBhIHN1Yi1wYXRoIG9m
IGFuIGV4aXN0aW5nIGZpZWxkIHBhdGggaW4gdGhlIHRyZWUgKGkuZS4sIGEgbGVhZgotICAvLyBu
b2RlKSwgaXQgbWVhbnMgdGhlIHRyZWUgYWxyZWFkeSBtYXRjaGVzIHRoZSBnaXZlbiBwYXRoIHNv
IG5vdGhpbmcgd2lsbAotICAvLyBiZSBhZGRlZCB0byB0aGUgdHJlZS4gSWYgdGhlIHBhdGggbWF0
Y2hlcyBhbiBleGlzdGluZyBub24tbGVhZiBub2RlIGluIHRoZQotICAvLyB0cmVlLCB0aGF0IG5v
bi1sZWFmIG5vZGUgd2lsbCBiZSB0dXJuZWQgaW50byBhIGxlYWYgbm9kZSB3aXRoIGFsbCBpdHMK
LSAgLy8gY2hpbGRyZW4gcmVtb3ZlZCBiZWNhdXNlIHRoZSBwYXRoIG1hdGNoZXMgYWxsIHRoZSBu
b2RlJ3MgY2hpbGRyZW4uCi0gIHZvaWQgQWRkUGF0aChjb25zdCBzdHJpbmcmIHBhdGgpOwotCi0g
IC8vIENhbGN1bGF0ZSB0aGUgaW50ZXJzZWN0aW9uIHBhcnQgb2YgYSBmaWVsZCBwYXRoIHdpdGgg
dGhpcyB0cmVlIGFuZCBhZGQKLSAgLy8gdGhlIGludGVyc2VjdGlvbiBmaWVsZCBwYXRoIGludG8g
b3V0LgotICB2b2lkIEludGVyc2VjdFBhdGgoY29uc3Qgc3RyaW5nJiBwYXRoLCBGaWVsZE1hc2tU
cmVlKiBvdXQpOwotCi0gIC8vIE1lcmdlIGFsbCBmaWVsZHMgc3BlY2lmaWVkIGJ5IHRoaXMgdHJl
ZSBmcm9tIG9uZSBtZXNzYWdlIHRvIGFub3RoZXIuCi0gIHZvaWQgTWVyZ2VNZXNzYWdlKGNvbnN0
IE1lc3NhZ2UmIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGRNYXNrVXRp
bDo6TWVyZ2VPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICBNZXNzYWdlKiBk
ZXN0aW5hdGlvbikgewotICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIHRyZWUgaXMgZW1wdHkuCi0g
ICAgaWYgKHJvb3RfLmNoaWxkcmVuLmVtcHR5KCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgTWVyZ2VNZXNzYWdlKCZyb290Xywgc291cmNlLCBvcHRpb25zLCBkZXN0aW5hdGlvbik7Ci0g
IH0KLQotIHByaXZhdGU6Ci0gIHN0cnVjdCBOb2RlIHsKLSAgICBOb2RlKCkge30KLQotICAgIH5O
b2RlKCkgeyBDbGVhckNoaWxkcmVuKCk7IH0KLQotICAgIHZvaWQgQ2xlYXJDaGlsZHJlbigpIHsK
LSAgICAgIGZvciAobWFwPHN0cmluZywgTm9kZSo+OjppdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJl
Z2luKCk7Ci0gICAgICAgICAgIGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGRlbGV0ZSBpdC0+c2Vjb25kOwotICAgICAgfQotICAgICAgY2hpbGRyZW4uY2xlYXIoKTsKLSAg
ICB9Ci0KLSAgICBtYXA8c3RyaW5nLCBOb2RlKj4gY2hpbGRyZW47Ci0KLSAgIHByaXZhdGU6Ci0g
ICAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE5vZGUpOwotICB9OwotCi0gIC8v
IE1lcmdlIGEgc3ViLXRyZWUgdG8gbWFzay4gVGhpcyBtZXRob2QgYWRkcyB0aGUgZmllbGQgcGF0
aHMgcmVwcmVzZW50ZWQKLSAgLy8gYnkgYWxsIGxlYWYgbm9kZXMgZGVzY2VuZGVkIGZyb20gIm5v
ZGUiIHRvIG1hc2suCi0gIHZvaWQgTWVyZ2VUb0ZpZWxkTWFzayhjb25zdCBzdHJpbmcmIHByZWZp
eCwgY29uc3QgTm9kZSogbm9kZSwgRmllbGRNYXNrKiBvdXQpOwotCi0gIC8vIE1lcmdlIGFsbCBs
ZWFmIG5vZGVzIG9mIGEgc3ViLXRyZWUgdG8gYW5vdGhlciB0cmVlLgotICB2b2lkIE1lcmdlTGVh
Zk5vZGVzVG9UcmVlKGNvbnN0IHN0cmluZyYgcHJlZml4LCBjb25zdCBOb2RlKiBub2RlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkTWFza1RyZWUqIG91dCk7Ci0KLSAgLy8gTWVy
Z2UgYWxsIGZpZWxkcyBzcGVjaWZpZWQgYnkgYSBzdWItdHJlZSBmcm9tIG9uZSBtZXNzYWdlIHRv
IGFub3RoZXIuCi0gIHZvaWQgTWVyZ2VNZXNzYWdlKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IE1l
c3NhZ2UmIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGRNYXNrVXRpbDo6
TWVyZ2VPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICBNZXNzYWdlKiBkZXN0
aW5hdGlvbik7Ci0KLSAgTm9kZSByb290XzsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05T
VFJVQ1RPUlMoRmllbGRNYXNrVHJlZSk7Ci19OwotCi1GaWVsZE1hc2tUcmVlOjpGaWVsZE1hc2tU
cmVlKCkge30KLQotRmllbGRNYXNrVHJlZTo6fkZpZWxkTWFza1RyZWUoKSB7fQotCi12b2lkIEZp
ZWxkTWFza1RyZWU6Ok1lcmdlRnJvbUZpZWxkTWFzayhjb25zdCBGaWVsZE1hc2smIG1hc2spIHsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXNrLnBhdGhzX3NpemUoKTsgKytpKSB7Ci0gICAgQWRk
UGF0aChtYXNrLnBhdGhzKGkpKTsKLSAgfQotfQotCi12b2lkIEZpZWxkTWFza1RyZWU6Ok1lcmdl
VG9GaWVsZE1hc2soRmllbGRNYXNrKiBtYXNrKSB7Ci0gIE1lcmdlVG9GaWVsZE1hc2soIiIsICZy
b290XywgbWFzayk7Ci19Ci0KLXZvaWQgRmllbGRNYXNrVHJlZTo6TWVyZ2VUb0ZpZWxkTWFzayhj
b25zdCBzdHJpbmcmIHByZWZpeCwgY29uc3QgTm9kZSogbm9kZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGaWVsZE1hc2sqIG91dCkgewotICBpZiAobm9kZS0+Y2hpbGRy
ZW4uZW1wdHkoKSkgewotICAgIGlmIChwcmVmaXguZW1wdHkoKSkgewotICAgICAgLy8gVGhpcyBp
cyB0aGUgcm9vdCBub2RlLgotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBvdXQtPmFkZF9wYXRo
cyhwcmVmaXgpOwotICAgIHJldHVybjsKLSAgfQotICBmb3IgKG1hcDxzdHJpbmcsIE5vZGUqPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBub2RlLT5jaGlsZHJlbi5iZWdpbigpOwotICAgICAgIGl0ICE9
IG5vZGUtPmNoaWxkcmVuLmVuZCgpOyArK2l0KSB7Ci0gICAgc3RyaW5nIGN1cnJlbnRfcGF0aCA9
IHByZWZpeC5lbXB0eSgpID8gaXQtPmZpcnN0IDogcHJlZml4ICsgIi4iICsgaXQtPmZpcnN0Owot
ICAgIE1lcmdlVG9GaWVsZE1hc2soY3VycmVudF9wYXRoLCBpdC0+c2Vjb25kLCBvdXQpOwotICB9
Ci19Ci0KLXZvaWQgRmllbGRNYXNrVHJlZTo6QWRkUGF0aChjb25zdCBzdHJpbmcmIHBhdGgpIHsK
LSAgdmVjdG9yPHN0cmluZz4gcGFydHMgPSBTcGxpdChwYXRoLCAiLiIpOwotICBpZiAocGFydHMu
ZW1wdHkoKSkgewotICAgIHJldHVybjsKLSAgfQotICBib29sIG5ld19icmFuY2ggPSBmYWxzZTsK
LSAgTm9kZSogbm9kZSA9ICZyb290XzsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5zaXpl
KCk7ICsraSkgewotICAgIGlmICghbmV3X2JyYW5jaCAmJiBub2RlICE9ICZyb290XyAmJiBub2Rl
LT5jaGlsZHJlbi5lbXB0eSgpKSB7Ci0gICAgICAvLyBQYXRoIG1hdGNoZXMgYW4gZXhpc3Rpbmcg
bGVhZiBub2RlLiBUaGlzIG1lYW5zIHRoZSBwYXRoIGlzIGFscmVhZHkKLSAgICAgIC8vIGNvdmVy
cmVkIGJ5IHRoaXMgdHJlZSAoZm9yIGV4YW1wbGUsIGFkZGluZyAiZm9vLmJhci5iYXoiIHRvIGEg
dHJlZQotICAgICAgLy8gd2hpY2ggYWxyZWFkeSBjb250YWlucyAiZm9vLmJhciIpLgotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBzdHJpbmcmIG5vZGVfbmFtZSA9IHBhcnRzW2ldOwot
ICAgIE5vZGUqJiBjaGlsZCA9IG5vZGUtPmNoaWxkcmVuW25vZGVfbmFtZV07Ci0gICAgaWYgKGNo
aWxkID09IE5VTEwpIHsKLSAgICAgIG5ld19icmFuY2ggPSB0cnVlOwotICAgICAgY2hpbGQgPSBu
ZXcgTm9kZSgpOwotICAgIH0KLSAgICBub2RlID0gY2hpbGQ7Ci0gIH0KLSAgaWYgKCFub2RlLT5j
aGlsZHJlbi5lbXB0eSgpKSB7Ci0gICAgbm9kZS0+Q2xlYXJDaGlsZHJlbigpOwotICB9Ci19Ci0K
LXZvaWQgRmllbGRNYXNrVHJlZTo6SW50ZXJzZWN0UGF0aChjb25zdCBzdHJpbmcmIHBhdGgsIEZp
ZWxkTWFza1RyZWUqIG91dCkgewotICB2ZWN0b3I8c3RyaW5nPiBwYXJ0cyA9IFNwbGl0KHBhdGgs
ICIuIik7Ci0gIGlmIChwYXJ0cy5lbXB0eSgpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGNvbnN0
IE5vZGUqIG5vZGUgPSAmcm9vdF87Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydHMuc2l6ZSgp
OyArK2kpIHsKLSAgICBpZiAobm9kZS0+Y2hpbGRyZW4uZW1wdHkoKSkgewotICAgICAgaWYgKG5v
ZGUgIT0gJnJvb3RfKSB7Ci0gICAgICAgIG91dC0+QWRkUGF0aChwYXRoKTsKLSAgICAgIH0KLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3Qgc3RyaW5nJiBub2RlX25hbWUgPSBwYXJ0c1tp
XTsKLSAgICBjb25zdCBOb2RlKiByZXN1bHQgPSBGaW5kUHRyT3JOdWxsKG5vZGUtPmNoaWxkcmVu
LCBub2RlX25hbWUpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgICAgLy8gTm8gaW50
ZXJzZWN0aW9uIGZvdW5kLgotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBub2RlID0gcmVzdWx0
OwotICB9Ci0gIC8vIE5vdyB3ZSBmb3VuZCBhIG1hdGNoaW5nIG5vZGUgd2l0aCB0aGUgZ2l2ZW4g
cGF0aC4gQWRkIGFsbCBsZWFmIG5vZGVzCi0gIC8vIHRvIG91dC4KLSAgTWVyZ2VMZWFmTm9kZXNU
b1RyZWUocGF0aCwgbm9kZSwgb3V0KTsKLX0KLQotdm9pZCBGaWVsZE1hc2tUcmVlOjpNZXJnZUxl
YWZOb2Rlc1RvVHJlZShjb25zdCBzdHJpbmcmIHByZWZpeCwgY29uc3QgTm9kZSogbm9kZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRNYXNrVHJlZSogb3V0
KSB7Ci0gIGlmIChub2RlLT5jaGlsZHJlbi5lbXB0eSgpKSB7Ci0gICAgb3V0LT5BZGRQYXRoKHBy
ZWZpeCk7Ci0gIH0KLSAgZm9yIChtYXA8c3RyaW5nLCBOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbm9kZS0+Y2hpbGRyZW4uYmVnaW4oKTsKLSAgICAgICBpdCAhPSBub2RlLT5jaGlsZHJlbi5l
bmQoKTsgKytpdCkgewotICAgIHN0cmluZyBjdXJyZW50X3BhdGggPSBwcmVmaXguZW1wdHkoKSA/
IGl0LT5maXJzdCA6IHByZWZpeCArICIuIiArIGl0LT5maXJzdDsKLSAgICBNZXJnZUxlYWZOb2Rl
c1RvVHJlZShjdXJyZW50X3BhdGgsIGl0LT5zZWNvbmQsIG91dCk7Ci0gIH0KLX0KLQotdm9pZCBG
aWVsZE1hc2tUcmVlOjpNZXJnZU1lc3NhZ2UoY29uc3QgTm9kZSogbm9kZSwgY29uc3QgTWVzc2Fn
ZSYgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmllbGRN
YXNrVXRpbDo6TWVyZ2VPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWVzc2FnZSogZGVzdGluYXRpb24pIHsKLSAgR09PR0xFX0RDSEVDSyghbm9kZS0+
Y2hpbGRyZW4uZW1wdHkoKSk7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHNvdXJjZV9yZWZsZWN0aW9u
ID0gc291cmNlLkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogZGVzdGluYXRp
b25fcmVmbGVjdGlvbiA9IGRlc3RpbmF0aW9uLT5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IERl
c2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBzb3VyY2UuR2V0RGVzY3JpcHRvcigpOwotICBmb3IgKG1h
cDxzdHJpbmcsIE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub2RlLT5jaGlsZHJlbi5iZWdp
bigpOwotICAgICAgIGl0ICE9IG5vZGUtPmNoaWxkcmVuLmVuZCgpOyArK2l0KSB7Ci0gICAgY29u
c3Qgc3RyaW5nJiBmaWVsZF9uYW1lID0gaXQtPmZpcnN0OwotICAgIGNvbnN0IE5vZGUqIGNoaWxk
ID0gaXQtPnNlY29uZDsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0gZGVzY3Jp
cHRvci0+RmluZEZpZWxkQnlOYW1lKGZpZWxkX25hbWUpOwotICAgIGlmIChmaWVsZCA9PSBOVUxM
KSB7Ci0gICAgICBHT09HTEVfTE9HKEVSUk9SKSA8PCAiQ2Fubm90IGZpbmQgZmllbGQgXCIiIDw8
IGZpZWxkX25hbWUgPDwgIlwiIGluIG1lc3NhZ2UgIgotICAgICAgICAgICAgICAgICA8PCBkZXNj
cmlwdG9yLT5mdWxsX25hbWUoKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAoIWNo
aWxkLT5jaGlsZHJlbi5lbXB0eSgpKSB7Ci0gICAgICAvLyBTdWItcGF0aHMgYXJlIG9ubHkgYWxs
b3dlZCBmb3Igc2luZ3VsYXIgbWVzc2FnZSBmaWVsZHMuCi0gICAgICBpZiAoZmllbGQtPmlzX3Jl
cGVhdGVkKCkgfHwKLSAgICAgICAgICBmaWVsZC0+Y3BwX3R5cGUoKSAhPSBGaWVsZERlc2NyaXB0
b3I6OkNQUFRZUEVfTUVTU0FHRSkgewotICAgICAgICBHT09HTEVfTE9HKEVSUk9SKSA8PCAiRmll
bGQgXCIiIDw8IGZpZWxkX25hbWUgPDwgIlwiIGluIG1lc3NhZ2UgIgotICAgICAgICAgICAgICAg
ICAgIDw8IGRlc2NyaXB0b3ItPmZ1bGxfbmFtZSgpCi0gICAgICAgICAgICAgICAgICAgPDwgIiBp
cyBub3QgYSBzaW5ndWxhciBtZXNzYWdlIGZpZWxkIGFuZCBjYW5ub3QgIgotICAgICAgICAgICAg
ICAgICAgIDw8ICJoYXZlIHN1Yi1maWVsZHMuIjsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9
Ci0gICAgICBNZXJnZU1lc3NhZ2UoY2hpbGQsIHNvdXJjZV9yZWZsZWN0aW9uLT5HZXRNZXNzYWdl
KHNvdXJjZSwgZmllbGQpLCBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9u
X3JlZmxlY3Rpb24tPk11dGFibGVNZXNzYWdlKGRlc3RpbmF0aW9uLCBmaWVsZCkpOwotICAgICAg
Y29udGludWU7Ci0gICAgfQotICAgIGlmICghZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAg
IHN3aXRjaCAoZmllbGQtPmNwcF90eXBlKCkpIHsKLSNkZWZpbmUgQ09QWV9WQUxVRShUWVBFLCBO
YW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV8jI1RZUEU6IHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgZGVzdGluYXRpb25fcmVmbGVjdGlvbi0+U2V0IyNOYW1lKCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZGVzdGluYXRpb24sIGZp
ZWxkLCBzb3VyY2VfcmVmbGVjdGlvbi0+R2V0IyNOYW1lKHNvdXJjZSwgZmllbGQpKTsgXAotICAg
IGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIH0KLSAgICAgICAgQ09QWV9WQUxVRShCT09MLCBCb29sKQotICAg
ICAgICBDT1BZX1ZBTFVFKElOVDMyLCBJbnQzMikKLSAgICAgICAgQ09QWV9WQUxVRShJTlQ2NCwg
SW50NjQpCi0gICAgICAgIENPUFlfVkFMVUUoVUlOVDMyLCBVSW50MzIpCi0gICAgICAgIENPUFlf
VkFMVUUoVUlOVDY0LCBVSW50NjQpCi0gICAgICAgIENPUFlfVkFMVUUoRkxPQVQsIEZsb2F0KQot
ICAgICAgICBDT1BZX1ZBTFVFKERPVUJMRSwgRG91YmxlKQotICAgICAgICBDT1BZX1ZBTFVFKEVO
VU0sIEVudW0pCi0gICAgICAgIENPUFlfVkFMVUUoU1RSSU5HLCBTdHJpbmcpCi0jdW5kZWYgQ09Q
WV9WQUxVRQotICAgICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFOiB7
Ci0gICAgICAgICAgaWYgKG9wdGlvbnMucmVwbGFjZV9tZXNzYWdlX2ZpZWxkcygpKSB7Ci0gICAg
ICAgICAgICBkZXN0aW5hdGlvbl9yZWZsZWN0aW9uLT5DbGVhckZpZWxkKGRlc3RpbmF0aW9uLCBm
aWVsZCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzb3VyY2VfcmVmbGVjdGlvbi0+SGFz
RmllbGQoc291cmNlLCBmaWVsZCkpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uX3JlZmxlY3Rp
b24tPk11dGFibGVNZXNzYWdlKGRlc3RpbmF0aW9uLCBmaWVsZCkKLSAgICAgICAgICAgICAgICAt
Pk1lcmdlRnJvbShzb3VyY2VfcmVmbGVjdGlvbi0+R2V0TWVzc2FnZShzb3VyY2UsIGZpZWxkKSk7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgIGlmIChvcHRpb25zLnJlcGxhY2VfcmVwZWF0ZWRfZmllbGRzKCkpIHsK
LSAgICAgICAgZGVzdGluYXRpb25fcmVmbGVjdGlvbi0+Q2xlYXJGaWVsZChkZXN0aW5hdGlvbiwg
ZmllbGQpOwotICAgICAgfQotICAgICAgc3dpdGNoIChmaWVsZC0+Y3BwX3R5cGUoKSkgewotI2Rl
ZmluZSBDT1BZX1JFUEVBVEVEX1ZBTFVFKFRZUEUsIE5hbWUpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfIyNUWVBFOiB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgaW50IHNpemUgPSBzb3VyY2VfcmVmbGVjdGlvbi0+
RmllbGRTaXplKHNvdXJjZSwgZmllbGQpOyAgICAgICAgXAotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGRl
c3RpbmF0aW9uX3JlZmxlY3Rpb24tPkFkZCMjTmFtZSggICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgZGVzdGluYXRpb24sIGZpZWxkLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgIHNvdXJjZV9yZWZsZWN0aW9uLT5HZXRSZXBlYXRl
ZCMjTmFtZShzb3VyY2UsIGZpZWxkLCBpKSk7IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICB9Ci0gICAgICAgIENPUFlfUkVQRUFURURfVkFMVUUoQk9PTCwgQm9vbCkKLSAgICAgICAgQ09Q
WV9SRVBFQVRFRF9WQUxVRShJTlQzMiwgSW50MzIpCi0gICAgICAgIENPUFlfUkVQRUFURURfVkFM
VUUoSU5UNjQsIEludDY0KQotICAgICAgICBDT1BZX1JFUEVBVEVEX1ZBTFVFKFVJTlQzMiwgVUlu
dDMyKQotICAgICAgICBDT1BZX1JFUEVBVEVEX1ZBTFVFKFVJTlQ2NCwgVUludDY0KQotICAgICAg
ICBDT1BZX1JFUEVBVEVEX1ZBTFVFKEZMT0FULCBGbG9hdCkKLSAgICAgICAgQ09QWV9SRVBFQVRF
RF9WQUxVRShET1VCTEUsIERvdWJsZSkKLSAgICAgICAgQ09QWV9SRVBFQVRFRF9WQUxVRShFTlVN
LCBFbnVtKQotICAgICAgICBDT1BZX1JFUEVBVEVEX1ZBTFVFKFNUUklORywgU3RyaW5nKQotI3Vu
ZGVmIENPUFlfUkVQRUFURURfVkFMVUUKLSAgICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkNQ
UFRZUEVfTUVTU0FHRTogewotICAgICAgICAgIGludCBzaXplID0gc291cmNlX3JlZmxlY3Rpb24t
PkZpZWxkU2l6ZShzb3VyY2UsIGZpZWxkKTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25fcmVmbGVjdGlvbi0+QWRkTWVz
c2FnZShkZXN0aW5hdGlvbiwgZmllbGQpCi0gICAgICAgICAgICAgICAgLT5NZXJnZUZyb20oCi0g
ICAgICAgICAgICAgICAgICAgIHNvdXJjZV9yZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2Uo
c291cmNlLCBmaWVsZCwgaSkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotdm9pZCBG
aWVsZE1hc2tVdGlsOjpUb0Nhbm9uaWNhbEZvcm0oY29uc3QgRmllbGRNYXNrJiBtYXNrLCBGaWVs
ZE1hc2sqIG91dCkgewotICBGaWVsZE1hc2tUcmVlIHRyZWU7Ci0gIHRyZWUuTWVyZ2VGcm9tRmll
bGRNYXNrKG1hc2spOwotICBvdXQtPkNsZWFyKCk7Ci0gIHRyZWUuTWVyZ2VUb0ZpZWxkTWFzayhv
dXQpOwotfQotCi12b2lkIEZpZWxkTWFza1V0aWw6OlVuaW9uKGNvbnN0IEZpZWxkTWFzayYgbWFz
azEsIGNvbnN0IEZpZWxkTWFzayYgbWFzazIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZp
ZWxkTWFzayogb3V0KSB7Ci0gIEZpZWxkTWFza1RyZWUgdHJlZTsKLSAgdHJlZS5NZXJnZUZyb21G
aWVsZE1hc2sobWFzazEpOwotICB0cmVlLk1lcmdlRnJvbUZpZWxkTWFzayhtYXNrMik7Ci0gIG91
dC0+Q2xlYXIoKTsKLSAgdHJlZS5NZXJnZVRvRmllbGRNYXNrKG91dCk7Ci19Ci0KLXZvaWQgRmll
bGRNYXNrVXRpbDo6SW50ZXJzZWN0KGNvbnN0IEZpZWxkTWFzayYgbWFzazEsIGNvbnN0IEZpZWxk
TWFzayYgbWFzazIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZE1hc2sqIG91
dCkgewotICBGaWVsZE1hc2tUcmVlIHRyZWUsIGludGVyc2VjdGlvbjsKLSAgdHJlZS5NZXJnZUZy
b21GaWVsZE1hc2sobWFzazEpOwotICBmb3IgKGludCBpID0gMDsgaSA8IG1hc2syLnBhdGhzX3Np
emUoKTsgKytpKSB7Ci0gICAgdHJlZS5JbnRlcnNlY3RQYXRoKG1hc2syLnBhdGhzKGkpLCAmaW50
ZXJzZWN0aW9uKTsKLSAgfQotICBvdXQtPkNsZWFyKCk7Ci0gIGludGVyc2VjdGlvbi5NZXJnZVRv
RmllbGRNYXNrKG91dCk7Ci19Ci0KLWJvb2wgRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1h
c2soU3RyaW5nUGllY2UgcGF0aCwgY29uc3QgRmllbGRNYXNrJiBtYXNrKSB7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgbWFzay5wYXRoc19zaXplKCk7ICsraSkgewotICAgIGNvbnN0IHN0cmluZyYg
bWFza19wYXRoID0gbWFzay5wYXRocyhpKTsKLSAgICBpZiAocGF0aCA9PSBtYXNrX3BhdGgpIHsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAobWFza19wYXRoLmxlbmd0aCgpIDwg
cGF0aC5sZW5ndGgoKSkgewotICAgICAgLy8gQWxzbyBjaGVjayB3aGV0aGVyIG1hc2sucGF0aHMo
aSkgaXMgYSBwcmVmaXggb2YgcGF0aC4KLSAgICAgIGlmIChwYXRoLnN1YnN0cigwLCBtYXNrX3Bh
dGgubGVuZ3RoKCkgKyAxKS5jb21wYXJlKG1hc2tfcGF0aCArICIuIikgPT0KLSAgICAgICAgICAw
KSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgRmllbGRNYXNrVXRpbDo6TWVyZ2VNZXNzYWdlVG8oY29uc3QgTWVz
c2FnZSYgc291cmNlLCBjb25zdCBGaWVsZE1hc2smIG1hc2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IE1lcmdlT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSogZGVzdGluYXRpb24pIHsKLSAgR09PR0xF
X0NIRUNLKHNvdXJjZS5HZXREZXNjcmlwdG9yKCkgPT0gZGVzdGluYXRpb24tPkdldERlc2NyaXB0
b3IoKSk7Ci0gIC8vIEJ1aWxkIGEgRmllbGRNYXNrVHJlZSBhbmQgd2FsayB0aHJvdWdoIHRoZSB0
cmVlIHRvIG1lcmdlIGFsbCBzcGVjaWZpZWQKLSAgLy8gZmllbGRzLgotICBGaWVsZE1hc2tUcmVl
IHRyZWU7Ci0gIHRyZWUuTWVyZ2VGcm9tRmllbGRNYXNrKG1hc2spOwotICB0cmVlLk1lcmdlTWVz
c2FnZShzb3VyY2UsIG9wdGlvbnMsIGRlc3RpbmF0aW9uKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
IHV0aWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvZmllbGRfbWFza191dGlsLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9tYXNrX3V0aWwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjQ0MTYxYjk0MDE5MDczNWU2OTU2YzBjZWRiZjFjM2FmZjYzYzkzMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9maWVsZF9tYXNrX3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09H
TEVfUFJPVE9CVUZfVVRJTF9GSUVMRF9NQVNLX1VUSUxfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9U
T0JVRl9VVElMX0ZJRUxEX01BU0tfVVRJTF9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2ZpZWxkX21hc2sucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
c3RyaW5ncGllY2UuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIHV0aWwgewotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgRmllbGRNYXNr
VXRpbCB7Ci0gIHR5cGVkZWYgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRNYXNrIEZpZWxkTWFzazsK
LQotIHB1YmxpYzoKLSAgLy8gQ29udmVydHMgRmllbGRNYXNrIHRvL2Zyb20gc3RyaW5nLCBmb3Jt
YXR0ZWQgYnkgc2VwYXJhdGluZyBlYWNoIHBhdGgKLSAgLy8gd2l0aCBhIGNvbW1hIChlLmcuLCAi
Zm9vX2JhcixiYXoucXV6IikuCi0gIHN0YXRpYyBzdHJpbmcgVG9TdHJpbmcoY29uc3QgRmllbGRN
YXNrJiBtYXNrKTsKLSAgc3RhdGljIHZvaWQgRnJvbVN0cmluZyhTdHJpbmdQaWVjZSBzdHIsIEZp
ZWxkTWFzayogb3V0KTsKLQotICAvLyBDb252ZXJ0cyBGaWVsZE1hc2sgdG8vZnJvbSBzdHJpbmcs
IGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gcHJvdG8zIEpTT04KLSAgLy8gc3BlYyBmb3IgRmllbGRN
YXNrIChlLmcuLCAiZm9vQmFyLGJhei5xdXoiKS4gSWYgdGhlIGZpZWxkIG5hbWUgaXMgbm90Ci0g
IC8vIHN0eWxlIGNvbmZvcm1pbmcgKGkuZS4sIG5vdCBzbmFrZV9jYXNlIHdoZW4gY29udmVydGVk
IHRvIHN0cmluZywgb3Igbm90Ci0gIC8vIGNhbWVsQ2FzZSB3aGVuIGNvbnZlcnRlZCBmcm9tIHN0
cmluZyksIHRoZSBjb252ZXJzaW9uIHdpbGwgZmFpbC4KLSAgc3RhdGljIGJvb2wgVG9Kc29uU3Ry
aW5nKGNvbnN0IEZpZWxkTWFzayYgbWFzaywgc3RyaW5nKiBvdXQpOwotICBzdGF0aWMgYm9vbCBG
cm9tSnNvblN0cmluZyhTdHJpbmdQaWVjZSBzdHIsIEZpZWxkTWFzayogb3V0KTsKLQotICAvLyBD
aGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBmb3IgdHlwZSBULgotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3RhdGljIGJvb2wgSXNWYWxpZFBhdGgoU3RyaW5nUGllY2Ug
cGF0aCkgewotICAgIHJldHVybiBJbnRlcm5hbElzVmFsaWRQYXRoKFQ6OmRlc2NyaXB0b3IoKSwg
cGF0aCk7Ci0gIH0KLQotICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gRmllbGRNYXNrIGlz
IHZhbGlkIGZvciB0eXBlIFQuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBzdGF0aWMgYm9v
bCBJc1ZhbGlkRmllbGRNYXNrKGNvbnN0IEZpZWxkTWFzayYgbWFzaykgewotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbWFzay5wYXRoc19zaXplKCk7ICsraSkgewotICAgICAgaWYgKCFJbnRlcm5h
bElzVmFsaWRQYXRoKFQ6OmRlc2NyaXB0b3IoKSwgbWFzay5wYXRocyhpKSkpIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBBZGRzIGEgcGF0aCB0byBG
aWVsZE1hc2sgYWZ0ZXIgY2hlY2tpbmcgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBpcyB2YWxpZC4K
LSAgLy8gVGhpcyBtZXRob2QgY2hlY2stZmFpbHMgaWYgdGhlIHBhdGggaXMgbm90IGEgdmFsaWQg
cGF0aCBmb3IgdHlwZSBULgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3RhdGljIHZvaWQg
QWRkUGF0aFRvRmllbGRNYXNrKFN0cmluZ1BpZWNlIHBhdGgsIEZpZWxkTWFzayogbWFzaykgewot
ICAgIEdPT0dMRV9DSEVDSyhJc1ZhbGlkUGF0aDxUPihwYXRoKSk7Ci0gICAgbWFzay0+YWRkX3Bh
dGhzKHBhdGgpOwotICB9Ci0KLSAgLy8gQ3JlYXRlcyBhIEZpZWxkTWFzayB3aXRoIGFsbCBmaWVs
ZHMgb2YgdHlwZSBULiBUaGlzIEZpZWxkTWFzayBvbmx5Ci0gIC8vIGNvbnRhaW5zIGZpZWxkcyBv
ZiBUIGJ1dCBub3QgYW55IHN1Yi1tZXNzYWdlIGZpZWxkcy4KLSAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci0gIHN0YXRpYyB2b2lkIEdldEZpZWxkTWFza0ZvckFsbEZpZWxkcyhGaWVsZE1hc2sqIG91
dCkgewotICAgIEludGVybmFsR2V0RmllbGRNYXNrRm9yQWxsRmllbGRzKFQ6OmRlc2NyaXB0b3Io
KSwgb3V0KTsKLSAgfQotCi0gIC8vIENvbnZlcnRzIGEgRmllbGRNYXNrIHRvIHRoZSBjYW5vbmlj
YWwgZm9ybS4gSXQgd2lsbDoKLSAgLy8gICAxLiBSZW1vdmUgcGF0aHMgdGhhdCBhcmUgY292ZXJl
ZCBieSBhbm90aGVyIHBhdGguIEZvciBleGFtcGxlLAotICAvLyAgICAgICJmb28uYmFyIiBpcyBj
b3ZlcmVkIGJ5ICJmb28iIGFuZCB3aWxsIGJlIHJlbW92ZWQgaWYgImZvbyIKLSAgLy8gICAgICBp
cyBhbHNvIGluIHRoZSBGaWVsZE1hc2suCi0gIC8vICAgMi4gU29ydCBhbGwgcGF0aHMgaW4gYWxw
aGFiZXRpY2FsIG9yZGVyLgotICBzdGF0aWMgdm9pZCBUb0Nhbm9uaWNhbEZvcm0oY29uc3QgRmll
bGRNYXNrJiBtYXNrLCBGaWVsZE1hc2sqIG91dCk7Ci0KLSAgLy8gQ3JlYXRlcyBhbiB1bmlvbiBv
ZiB0d28gRmllbGRNYXNrcy4KLSAgc3RhdGljIHZvaWQgVW5pb24oY29uc3QgRmllbGRNYXNrJiBt
YXNrMSwgY29uc3QgRmllbGRNYXNrJiBtYXNrMiwKLSAgICAgICAgICAgICAgICAgICAgRmllbGRN
YXNrKiBvdXQpOwotCi0gIC8vIENyZWF0ZXMgYW4gaW50ZXJzZWN0aW9uIG9mIHR3byBGaWVsZE1h
c2tzLgotICBzdGF0aWMgdm9pZCBJbnRlcnNlY3QoY29uc3QgRmllbGRNYXNrJiBtYXNrMSwgY29u
c3QgRmllbGRNYXNrJiBtYXNrMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkTWFzayog
b3V0KTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgcGF0aCBpcyBjb3ZlcmVkIGJ5IHRoZSBnaXZl
biBGaWVsZE1hc2suIE5vdGUgdGhhdCBwYXRoCi0gIC8vICJmb28uYmFyIiBjb3ZlcnMgYWxsIHBh
dGhzIGxpa2UgImZvby5iYXIuYmF6IiwgImZvby5iYXIucXV6LngiLCBldGMuCi0gIHN0YXRpYyBi
b29sIElzUGF0aEluRmllbGRNYXNrKFN0cmluZ1BpZWNlIHBhdGgsIGNvbnN0IEZpZWxkTWFzayYg
bWFzayk7Ci0KLSAgY2xhc3MgTWVyZ2VPcHRpb25zOwotICAvLyBNZXJnZXMgZmllbGRzIHNwZWNp
ZmllZCBpbiBhIEZpZWxkTWFzayBpbnRvIGFub3RoZXIgbWVzc2FnZS4KLSAgc3RhdGljIHZvaWQg
TWVyZ2VNZXNzYWdlVG8oY29uc3QgTWVzc2FnZSYgc291cmNlLCBjb25zdCBGaWVsZE1hc2smIG1h
c2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lcmdlT3B0aW9ucyYgb3B0
aW9ucywgTWVzc2FnZSogZGVzdGluYXRpb24pOwotCi0gcHJpdmF0ZToKLSAgZnJpZW5kIGNsYXNz
IFNuYWtlQ2FzZUNhbWVsQ2FzZVRlc3Q7Ci0gIC8vIENvbnZlcnRzIGEgZmllbGQgbmFtZSBmcm9t
IHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlOgotICAvLyAgIDEuIEV2ZXJ5IGNoYXJhY3RlciBhZnRl
ciAiXyIgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLgotICAvLyAgIDIuIEFsbCAiXyJz
IGFyZSByZW1vdmVkLgotICAvLyBUaGUgY29udmVyc2lvbiB3aWxsIGZhaWwgaWY6Ci0gIC8vICAg
MS4gVGhlIGZpZWxkIG5hbWUgY29udGFpbnMgdXBwZXJjYXNlIGxldHRlcnMuCi0gIC8vICAgMi4g
QW55IGNoYXJhY3RlciBhZnRlciBhICJfIiBpcyBub3QgYSBsb3dlcmNhc2UgbGV0dGVyLgotICAv
LyBJZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcywgaXQncyBndWFyYW50ZWVkIHRoYXQgdGhlIHJl
c3VsdGVkCi0gIC8vIGNhbWVsQ2FzZSBuYW1lIHdpbGwgeWllbGQgdGhlIG9yaWdpbmFsIHNuYWtl
X2Nhc2UgbmFtZSB3aGVuCi0gIC8vIGNvbnZlcnRlZCB1c2luZyBDYW1lbENhc2VUb1NuYWtlQ2Fz
ZSgpLgotICAvLwotICAvLyBOb3RlIHRoYXQgdGhlIGlucHV0IGNhbiBjb250YWluIGNoYXJhY3Rl
cnMgbm90IGFsbG93ZWQgaW4gQyBpZGVudGlmaWVycy4KLSAgLy8gRm9yIGV4YW1wbGUsICJmb29f
YmFyLGJhel9xdXoiIHdpbGwgYmUgY29udmVydGVkIHRvICJmb29CYXIsYmF6UXV6IgotICAvLyBz
dWNjZXNzZnVsbHkuCi0gIHN0YXRpYyBib29sIFNuYWtlQ2FzZVRvQ2FtZWxDYXNlKFN0cmluZ1Bp
ZWNlIGlucHV0LCBzdHJpbmcqIG91dHB1dCk7Ci0gIC8vIENvbnZlcnRzIGEgZmllbGQgbmFtZSBm
cm9tIGNhbWVsQ2FzZSB0byBzbmFrZV9jYXNlOgotICAvLyAgIDEuIEV2ZXJ5IHVwcGVyY2FzZSBs
ZXR0ZXIgaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSB3aXRoIGEgYWRkaXRpb25hbAotICAvLyAg
ICAgIHByZWNlZGluZyAiLSIuCi0gIC8vIFRoZSBjb252ZXJzaW9uIHdpbGwgZmFpbCBpZjoKLSAg
Ly8gICAxLiBUaGUgZmllbGQgbmFtZSBjb250YWlucyAiXyJzLgotICAvLyBJZiB0aGUgY29udmVy
c2lvbiBzdWNjZWVkcywgaXQncyBndWFyYW50ZWVkIHRoYXQgdGhlIHJlc3VsdGVkCi0gIC8vIHNu
YWtlX2Nhc2UgbmFtZSB3aWxsIHlpZWxkIHRoZSBvcmlnaW5hbCBjYW1lbENhc2UgbmFtZSB3aGVu
Ci0gIC8vIGNvbnZlcnRlZCB1c2luZyBTbmFrZUNhc2VUb0NhbWVsQ2FzZSgpLgotICAvLwotICAv
LyBOb3RlIHRoYXQgdGhlIGlucHV0IGNhbiBjb250YWluIGNoYXJhY3RlcnMgbm90IGFsbG93ZWQg
aW4gQyBpZGVudGlmaWVycy4KLSAgLy8gRm9yIGV4YW1wbGUsICJmb29CYXIsYmF6UXV6IiB3aWxs
IGJlIGNvbnZlcnRlZCB0byAiZm9vX2JhcixiYXpfcXV6IgotICAvLyBzdWNjZXNzZnVsbHkuCi0g
IHN0YXRpYyBib29sIENhbWVsQ2FzZVRvU25ha2VDYXNlKFN0cmluZ1BpZWNlIGlucHV0LCBzdHJp
bmcqIG91dHB1dCk7Ci0KLSAgc3RhdGljIGJvb2wgSW50ZXJuYWxJc1ZhbGlkUGF0aChjb25zdCBE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZ1BpZWNlIHBhdGgpOwotCi0gIHN0YXRpYyB2b2lkIEludGVybmFsR2V0RmllbGRNYXNr
Rm9yQWxsRmllbGRzKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkTWFzayogb3V0KTsKLX07Ci0K
LWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBGaWVsZE1hc2tVdGlsOjpNZXJnZU9wdGlvbnMgewot
IHB1YmxpYzoKLSAgTWVyZ2VPcHRpb25zKCkKLSAgICAgIDogcmVwbGFjZV9tZXNzYWdlX2ZpZWxk
c18oZmFsc2UpLCByZXBsYWNlX3JlcGVhdGVkX2ZpZWxkc18oZmFsc2UpIHt9Ci0gIC8vIFdoZW4g
bWVyZ2luZyBtZXNzYWdlIGZpZWxkcywgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gbWVyZ2Ug
dGhlCi0gIC8vIGNvbnRlbnQgb2YgdHdvIG1lc3NhZ2UgZmllbGRzIHRvZ2V0aGVyLiBJZiB5b3Ug
aW5zdGVhZCB3YW50IHRvIHVzZQotICAvLyB0aGUgZmllbGQgZnJvbSB0aGUgc291cmNlIG1lc3Nh
Z2UgdG8gcmVwbGFjZSB0aGUgY29ycmVzcG9uZGluZyBmaWVsZAotICAvLyBpbiB0aGUgZGVzdGlu
YXRpb24gbWVzc2FnZSwgc2V0IHRoaXMgZmxhZyB0byB0cnVlLiBXaGVuIHRoaXMgZmxhZyBpcyBz
ZXQsCi0gIC8vIHNwZWNpZmllZCBzdWJtZXNzYWdlIGZpZWxkcyB0aGF0IGFyZSBtaXNzaW5nIGlu
IHNvdXJjZSB3aWxsIGJlIGNsZWFyZWQgaW4KLSAgLy8gZGVzdGluYXRpb24uCi0gIHZvaWQgc2V0
X3JlcGxhY2VfbWVzc2FnZV9maWVsZHMoYm9vbCB2YWx1ZSkgewotICAgIHJlcGxhY2VfbWVzc2Fn
ZV9maWVsZHNfID0gdmFsdWU7Ci0gIH0KLSAgYm9vbCByZXBsYWNlX21lc3NhZ2VfZmllbGRzKCkg
Y29uc3QgeyByZXR1cm4gcmVwbGFjZV9tZXNzYWdlX2ZpZWxkc187IH0KLSAgLy8gVGhlIGRlZmF1
bHQgbWVyZ2luZyBiZWhhdmlvciB3aWxsIGFwcGVuZCBlbnRyaWVzIGZyb20gdGhlIHNvdXJjZQot
ICAvLyByZXBlYXRlZCBmaWVsZCB0byB0aGUgZGVzdGluYXRpb24gcmVwZWF0ZWQgZmllbGQuIElm
IHlvdSBvbmx5IHdhbnQKLSAgLy8gdG8ga2VlcCB0aGUgZW50cmllcyBmcm9tIHRoZSBzb3VyY2Ug
cmVwZWF0ZWQgZmllbGQsIHNldCB0aGlzIGZsYWcKLSAgLy8gdG8gdHJ1ZS4KLSAgdm9pZCBzZXRf
cmVwbGFjZV9yZXBlYXRlZF9maWVsZHMoYm9vbCB2YWx1ZSkgewotICAgIHJlcGxhY2VfcmVwZWF0
ZWRfZmllbGRzXyA9IHZhbHVlOwotICB9Ci0gIGJvb2wgcmVwbGFjZV9yZXBlYXRlZF9maWVsZHMo
KSBjb25zdCB7IHJldHVybiByZXBsYWNlX3JlcGVhdGVkX2ZpZWxkc187IH0KLQotIHByaXZhdGU6
Ci0gIGJvb2wgcmVwbGFjZV9tZXNzYWdlX2ZpZWxkc187Ci0gIGJvb2wgcmVwbGFjZV9yZXBlYXRl
ZF9maWVsZHNfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVzcGFjZSBw
cm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9U
T0JVRl9VVElMX0ZJRUxEX01BU0tfVVRJTF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi91dGlsL2ZpZWxkX21hc2tfdXRpbF90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvZmllbGRfbWFza191dGlsX3Rlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDliN2ZiNjJhN2ZhZjVjMzIxZTE2NDE5NjRjMGQ3Yzk1ZjBjMWZjYzUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
ZmllbGRfbWFza191dGlsX3Rlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0OTEgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvdXRpbC9maWVsZF9tYXNrX3V0aWwuaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9m
aWVsZF9tYXNrLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnBiLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RfdXRpbC5oPgotI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5h
bWVzcGFjZSB1dGlsIHsKLQotY2xhc3MgU25ha2VDYXNlQ2FtZWxDYXNlVGVzdCA6IHB1YmxpYyA6
OnRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgc3RyaW5nIFNuYWtlQ2FzZVRvQ2FtZWxD
YXNlKGNvbnN0IHN0cmluZyYgaW5wdXQpIHsKLSAgICBzdHJpbmcgb3V0cHV0OwotICAgIGlmIChG
aWVsZE1hc2tVdGlsOjpTbmFrZUNhc2VUb0NhbWVsQ2FzZShpbnB1dCwgJm91dHB1dCkpIHsKLSAg
ICAgIHJldHVybiBvdXRwdXQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAiI0ZBSUwjIjsK
LSAgICB9Ci0gIH0KLQotICBzdHJpbmcgQ2FtZWxDYXNlVG9TbmFrZUNhc2UoY29uc3Qgc3RyaW5n
JiBpbnB1dCkgewotICAgIHN0cmluZyBvdXRwdXQ7Ci0gICAgaWYgKEZpZWxkTWFza1V0aWw6OkNh
bWVsQ2FzZVRvU25ha2VDYXNlKGlucHV0LCAmb3V0cHV0KSkgewotICAgICAgcmV0dXJuIG91dHB1
dDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuICIjRkFJTCMiOwotICAgIH0KLSAgfQotfTsK
LQotbmFtZXNwYWNlIHsKLQotVEVTVF9GKFNuYWtlQ2FzZUNhbWVsQ2FzZVRlc3QsIFNuYWtlVG9D
YW1lbCkgewotICBFWFBFQ1RfRVEoImZvb0JhciIsIFNuYWtlQ2FzZVRvQ2FtZWxDYXNlKCJmb29f
YmFyIikpOwotICBFWFBFQ1RfRVEoIkZvb0JhciIsIFNuYWtlQ2FzZVRvQ2FtZWxDYXNlKCJfZm9v
X2JhciIpKTsKLSAgRVhQRUNUX0VRKCJmb28zQmFyIiwgU25ha2VDYXNlVG9DYW1lbENhc2UoImZv
bzNfYmFyIikpOwotICAvLyBObyB1cHBlcmNhc2UgbGV0dGVyIGlzIGFsbG93ZWQuCi0gIEVYUEVD
VF9FUSgiI0ZBSUwjIiwgU25ha2VDYXNlVG9DYW1lbENhc2UoIkZvbyIpKTsKLSAgLy8gQW55IGNo
YXJhY3RlciBhZnRlciBhICJfIiBtdXN0IGJlIGEgbG93ZXJjYXNlIGxldHRlci4KLSAgLy8gICAx
LiAiXyIgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgIl8iLgotICAvLyAgIDIuICJfIiBj
YW5ub3QgYmUgZm9sbG93ZWQgYnkgYSBkaWdpdC4KLSAgLy8gICAzLiAiXyIgY2Fubm90IGFwcGVh
ciBhcyB0aGUgbGFzdCBjaGFyYWN0ZXIuCi0gIEVYUEVDVF9FUSgiI0ZBSUwjIiwgU25ha2VDYXNl
VG9DYW1lbENhc2UoImZvb19fYmFyIikpOwotICBFWFBFQ1RfRVEoIiNGQUlMIyIsIFNuYWtlQ2Fz
ZVRvQ2FtZWxDYXNlKCJmb29fM2JhciIpKTsKLSAgRVhQRUNUX0VRKCIjRkFJTCMiLCBTbmFrZUNh
c2VUb0NhbWVsQ2FzZSgiZm9vX2Jhcl8iKSk7Ci19Ci0KLVRFU1RfRihTbmFrZUNhc2VDYW1lbENh
c2VUZXN0LCBDYW1lbFRvU25ha2UpIHsKLSAgRVhQRUNUX0VRKCJmb29fYmFyIiwgQ2FtZWxDYXNl
VG9TbmFrZUNhc2UoImZvb0JhciIpKTsKLSAgRVhQRUNUX0VRKCJfZm9vX2JhciIsIENhbWVsQ2Fz
ZVRvU25ha2VDYXNlKCJGb29CYXIiKSk7Ci0gIEVYUEVDVF9FUSgiZm9vM19iYXIiLCBDYW1lbENh
c2VUb1NuYWtlQ2FzZSgiZm9vM0JhciIpKTsKLSAgLy8gIl8icyBhcmUgbm90IGFsbG93ZWQuCi0g
IEVYUEVDVF9FUSgiI0ZBSUwjIiwgQ2FtZWxDYXNlVG9TbmFrZUNhc2UoImZvb19iYXIiKSk7Ci19
Ci0KLVRFU1RfRihTbmFrZUNhc2VDYW1lbENhc2VUZXN0LCBSb3VuZFRyaXBUZXN0KSB7Ci0gIC8v
IEVudW1lcmF0ZXMgYWxsIHBvc3NpYmxlIHNuYWtlX2Nhc2UgbmFtZXMgYW5kIHRlc3QgdGhhdCBj
b252ZXJ0aW5nIGl0IHRvCi0gIC8vIGNhbWVsQ2FzZSBhbmQgdGhlbiB0byBzbmFrZV9jYXNlIGFn
YWluIHdpbGwgeWllbGQgdGhlIG9yaWdpbmFsIG5hbWUuCi0gIHN0cmluZyBuYW1lID0gIl9fX2Fi
YzEyMyI7Ci0gIHN0ZDo6c29ydChuYW1lLmJlZ2luKCksIG5hbWUuZW5kKCkpOwotICBkbyB7Ci0g
ICAgc3RyaW5nIGNhbWVsTmFtZSA9IFNuYWtlQ2FzZVRvQ2FtZWxDYXNlKG5hbWUpOwotICAgIGlm
IChjYW1lbE5hbWUgIT0gIiNGQUlMIyIpIHsKLSAgICAgIEVYUEVDVF9FUShuYW1lLCBDYW1lbENh
c2VUb1NuYWtlQ2FzZShjYW1lbE5hbWUpKTsKLSAgICB9Ci0gIH0gd2hpbGUgKHN0ZDo6bmV4dF9w
ZXJtdXRhdGlvbihuYW1lLmJlZ2luKCksIG5hbWUuZW5kKCkpKTsKLQotICAvLyBFbnVtZXJhdGVz
IGFsbCBwb3NzaWJsZSBjYW1lbENhc2UgbmFtZXMgYW5kIHRlc3QgdGhhdCBjb252ZXJ0aW5nIGl0
IHRvCi0gIC8vIHNuYWtlX2Nhc2UgYW5kIHRoZW4gdG8gY2FtZWxDYXNlIGFnYWluIHdpbGwgeWll
bGQgdGhlIG9yaWdpbmFsIG5hbWUuCi0gIG5hbWUgPSAiYWJjQUJDMTIzIjsKLSAgc3RkOjpzb3J0
KG5hbWUuYmVnaW4oKSwgbmFtZS5lbmQoKSk7Ci0gIGRvIHsKLSAgICBzdHJpbmcgY2FtZWxOYW1l
ID0gQ2FtZWxDYXNlVG9TbmFrZUNhc2UobmFtZSk7Ci0gICAgaWYgKGNhbWVsTmFtZSAhPSAiI0ZB
SUwjIikgewotICAgICAgRVhQRUNUX0VRKG5hbWUsIFNuYWtlQ2FzZVRvQ2FtZWxDYXNlKGNhbWVs
TmFtZSkpOwotICAgIH0KLSAgfSB3aGlsZSAoc3RkOjpuZXh0X3Blcm11dGF0aW9uKG5hbWUuYmVn
aW4oKSwgbmFtZS5lbmQoKSkpOwotfQotCi11c2luZyBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFs
bFR5cGVzOwotdXNpbmcgcHJvdG9idWZfdW5pdHRlc3Q6Ok5lc3RlZFRlc3RBbGxUeXBlczsKLXVz
aW5nIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkTWFzazsKLQotVEVTVChGaWVsZE1hc2tVdGlsVGVz
dCwgU3RyaW5nRm9ybWF0KSB7Ci0gIEZpZWxkTWFzayBtYXNrOwotICBFWFBFQ1RfRVEoIiIsIEZp
ZWxkTWFza1V0aWw6OlRvU3RyaW5nKG1hc2spKTsKLSAgbWFzay5hZGRfcGF0aHMoImZvb19iYXIi
KTsKLSAgRVhQRUNUX0VRKCJmb29fYmFyIiwgRmllbGRNYXNrVXRpbDo6VG9TdHJpbmcobWFzaykp
OwotICBtYXNrLmFkZF9wYXRocygiYmF6X3F1eiIpOwotICBFWFBFQ1RfRVEoImZvb19iYXIsYmF6
X3F1eiIsIEZpZWxkTWFza1V0aWw6OlRvU3RyaW5nKG1hc2spKTsKLQotICBGaWVsZE1hc2tVdGls
OjpGcm9tU3RyaW5nKCIiLCAmbWFzayk7Ci0gIEVYUEVDVF9FUSgwLCBtYXNrLnBhdGhzX3NpemUo
KSk7Ci0gIEZpZWxkTWFza1V0aWw6OkZyb21TdHJpbmcoImZvb0JhciIsICZtYXNrKTsKLSAgRVhQ
RUNUX0VRKDEsIG1hc2sucGF0aHNfc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKCJmb29CYXIiLCBtYXNr
LnBhdGhzKDApKTsKLSAgRmllbGRNYXNrVXRpbDo6RnJvbVN0cmluZygiZm9vQmFyLGJhelF1eiIs
ICZtYXNrKTsKLSAgRVhQRUNUX0VRKDIsIG1hc2sucGF0aHNfc2l6ZSgpKTsKLSAgRVhQRUNUX0VR
KCJmb29CYXIiLCBtYXNrLnBhdGhzKDApKTsKLSAgRVhQRUNUX0VRKCJiYXpRdXoiLCBtYXNrLnBh
dGhzKDEpKTsKLX0KLQotVEVTVChGaWVsZE1hc2tVdGlsVGVzdCwgSnNvblN0cmluZ0Zvcm1hdCkg
ewotICBGaWVsZE1hc2sgbWFzazsKLSAgc3RyaW5nIHZhbHVlOwotICBFWFBFQ1RfVFJVRShGaWVs
ZE1hc2tVdGlsOjpUb0pzb25TdHJpbmcobWFzaywgJnZhbHVlKSk7Ci0gIEVYUEVDVF9FUSgiIiwg
dmFsdWUpOwotICBtYXNrLmFkZF9wYXRocygiZm9vX2JhciIpOwotICBFWFBFQ1RfVFJVRShGaWVs
ZE1hc2tVdGlsOjpUb0pzb25TdHJpbmcobWFzaywgJnZhbHVlKSk7Ci0gIEVYUEVDVF9FUSgiZm9v
QmFyIiwgdmFsdWUpOwotICBtYXNrLmFkZF9wYXRocygiYmFyX3F1eiIpOwotICBFWFBFQ1RfVFJV
RShGaWVsZE1hc2tVdGlsOjpUb0pzb25TdHJpbmcobWFzaywgJnZhbHVlKSk7Ci0gIEVYUEVDVF9F
USgiZm9vQmFyLGJhclF1eiIsIHZhbHVlKTsKLQotICBGaWVsZE1hc2tVdGlsOjpGcm9tSnNvblN0
cmluZygiIiwgJm1hc2spOwotICBFWFBFQ1RfRVEoMCwgbWFzay5wYXRoc19zaXplKCkpOwotICBG
aWVsZE1hc2tVdGlsOjpGcm9tSnNvblN0cmluZygiZm9vQmFyIiwgJm1hc2spOwotICBFWFBFQ1Rf
RVEoMSwgbWFzay5wYXRoc19zaXplKCkpOwotICBFWFBFQ1RfRVEoImZvb19iYXIiLCBtYXNrLnBh
dGhzKDApKTsKLSAgRmllbGRNYXNrVXRpbDo6RnJvbUpzb25TdHJpbmcoImZvb0JhcixiYXpRdXoi
LCAmbWFzayk7Ci0gIEVYUEVDVF9FUSgyLCBtYXNrLnBhdGhzX3NpemUoKSk7Ci0gIEVYUEVDVF9F
USgiZm9vX2JhciIsIG1hc2sucGF0aHMoMCkpOwotICBFWFBFQ1RfRVEoImJhel9xdXoiLCBtYXNr
LnBhdGhzKDEpKTsKLX0KLQotVEVTVChGaWVsZE1hc2tVdGlsVGVzdCwgVGVzdElzVmFpbGRQYXRo
KSB7Ci0gIEVYUEVDVF9UUlVFKEZpZWxkTWFza1V0aWw6OklzVmFsaWRQYXRoPFRlc3RBbGxUeXBl
cz4oIm9wdGlvbmFsX2ludDMyIikpOwotICBFWFBFQ1RfRkFMU0UoRmllbGRNYXNrVXRpbDo6SXNW
YWxpZFBhdGg8VGVzdEFsbFR5cGVzPigib3B0aW9uYWxfbm9uZXhpc3QiKSk7Ci0gIEVYUEVDVF9U
UlVFKAotICAgICAgRmllbGRNYXNrVXRpbDo6SXNWYWxpZFBhdGg8VGVzdEFsbFR5cGVzPigib3B0
aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmIiKSk7Ci0gIEVYUEVDVF9GQUxTRShGaWVsZE1hc2tVdGls
OjpJc1ZhbGlkUGF0aDxUZXN0QWxsVHlwZXM+KAotICAgICAgIm9wdGlvbmFsX25lc3RlZF9tZXNz
YWdlLm5vbmV4aXN0IikpOwotICAvLyBGaWVsZE1hc2sgY2Fubm90IGJlIHVzZWQgdG8gc3BlY2lm
eSBzdWItZmllbGRzIG9mIGEgcmVwZWF0ZWQgbWVzc2FnZS4KLSAgRVhQRUNUX0ZBTFNFKAotICAg
ICAgRmllbGRNYXNrVXRpbDo6SXNWYWxpZFBhdGg8VGVzdEFsbFR5cGVzPigicmVwZWF0ZWRfbmVz
dGVkX21lc3NhZ2UuYmIiKSk7Ci19Ci0KLVRFU1QoRmllbGRNYXNrVXRpbFRlc3QsIFRlc3RJc1Zh
bGlkRmllbGRNYXNrKSB7Ci0gIEZpZWxkTWFzayBtYXNrOwotICBGaWVsZE1hc2tVdGlsOjpGcm9t
U3RyaW5nKCJvcHRpb25hbF9pbnQzMixvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5iYiIsICZtYXNr
KTsKLSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6SXNWYWxpZEZpZWxkTWFzazxUZXN0QWxs
VHlwZXM+KG1hc2spKTsKLQotICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5nKAotICAgICAgIm9w
dGlvbmFsX2ludDMyLG9wdGlvbmFsX25lc3RlZF9tZXNzYWdlLmJiLG9wdGlvbmFsX25vbmV4aXN0
IiwgJm1hc2spOwotICBFWFBFQ1RfRkFMU0UoRmllbGRNYXNrVXRpbDo6SXNWYWxpZEZpZWxkTWFz
azxUZXN0QWxsVHlwZXM+KG1hc2spKTsKLX0KLQotVEVTVChGaWVsZE1hc2tVdGlsVGVzdCwgVGVz
dEdldEZpZWxkTWFza0ZvckFsbEZpZWxkcykgewotICBGaWVsZE1hc2sgbWFzazsKLSAgRmllbGRN
YXNrVXRpbDo6R2V0RmllbGRNYXNrRm9yQWxsRmllbGRzPFRlc3RBbGxUeXBlczo6TmVzdGVkTWVz
c2FnZT4oJm1hc2spOwotICBFWFBFQ1RfRVEoMSwgbWFzay5wYXRoc19zaXplKCkpOwotICBFWFBF
Q1RfVFJVRShGaWVsZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygiYmIiLCBtYXNrKSk7Ci0K
LSAgRmllbGRNYXNrVXRpbDo6R2V0RmllbGRNYXNrRm9yQWxsRmllbGRzPFRlc3RBbGxUeXBlcz4o
Jm1hc2spOwotICBFWFBFQ1RfRVEoNzYsIG1hc2sucGF0aHNfc2l6ZSgpKTsKLSAgRVhQRUNUX1RS
VUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soIm9wdGlvbmFsX2ludDMyIiwgbWFz
aykpOwotICBFWFBFQ1RfVFJVRShGaWVsZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygib3B0
aW9uYWxfaW50NjQiLCBtYXNrKSk7Ci0gIEVYUEVDVF9UUlVFKEZpZWxkTWFza1V0aWw6OklzUGF0
aEluRmllbGRNYXNrKCJvcHRpb25hbF91aW50MzIiLCBtYXNrKSk7Ci0gIEVYUEVDVF9UUlVFKEZp
ZWxkTWFza1V0aWw6OklzUGF0aEluRmllbGRNYXNrKCJvcHRpb25hbF91aW50NjQiLCBtYXNrKSk7
Ci0gIEVYUEVDVF9UUlVFKEZpZWxkTWFza1V0aWw6OklzUGF0aEluRmllbGRNYXNrKCJvcHRpb25h
bF9zaW50MzIiLCBtYXNrKSk7Ci0gIEVYUEVDVF9UUlVFKEZpZWxkTWFza1V0aWw6OklzUGF0aElu
RmllbGRNYXNrKCJvcHRpb25hbF9zaW50NjQiLCBtYXNrKSk7Ci0gIEVYUEVDVF9UUlVFKEZpZWxk
TWFza1V0aWw6OklzUGF0aEluRmllbGRNYXNrKCJvcHRpb25hbF9maXhlZDMyIiwgbWFzaykpOwot
ICBFWFBFQ1RfVFJVRShGaWVsZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygib3B0aW9uYWxf
Zml4ZWQ2NCIsIG1hc2spKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5G
aWVsZE1hc2soIm9wdGlvbmFsX3NmaXhlZDMyIiwgbWFzaykpOwotICBFWFBFQ1RfVFJVRShGaWVs
ZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygib3B0aW9uYWxfc2ZpeGVkNjQiLCBtYXNrKSk7
Ci0gIEVYUEVDVF9UUlVFKEZpZWxkTWFza1V0aWw6OklzUGF0aEluRmllbGRNYXNrKCJvcHRpb25h
bF9mbG9hdCIsIG1hc2spKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5G
aWVsZE1hc2soIm9wdGlvbmFsX2RvdWJsZSIsIG1hc2spKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRN
YXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soIm9wdGlvbmFsX2Jvb2wiLCBtYXNrKSk7Ci0gIEVY
UEVDVF9UUlVFKEZpZWxkTWFza1V0aWw6OklzUGF0aEluRmllbGRNYXNrKCJvcHRpb25hbF9zdHJp
bmciLCBtYXNrKSk7Ci0gIEVYUEVDVF9UUlVFKEZpZWxkTWFza1V0aWw6OklzUGF0aEluRmllbGRN
YXNrKCJvcHRpb25hbF9ieXRlcyIsIG1hc2spKTsKLSAgRVhQRUNUX1RSVUUoCi0gICAgICBGaWVs
ZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygib3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UiLCBt
YXNrKSk7Ci0gIEVYUEVDVF9UUlVFKAotICAgICAgRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVs
ZE1hc2soIm9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZSIsIG1hc2spKTsKLSAgRVhQRUNUX1RSVUUo
Ci0gICAgICBGaWVsZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygib3B0aW9uYWxfaW1wb3J0
X21lc3NhZ2UiLCBtYXNrKSk7Ci0gIEVYUEVDVF9UUlVFKEZpZWxkTWFza1V0aWw6OklzUGF0aElu
RmllbGRNYXNrKCJvcHRpb25hbF9uZXN0ZWRfZW51bSIsIG1hc2spKTsKLSAgRVhQRUNUX1RSVUUo
RmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soIm9wdGlvbmFsX2ZvcmVpZ25fZW51bSIs
IG1hc2spKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2so
Im9wdGlvbmFsX2ltcG9ydF9lbnVtIiwgbWFzaykpOwotICBFWFBFQ1RfVFJVRShGaWVsZE1hc2tV
dGlsOjpJc1BhdGhJbkZpZWxkTWFzaygicmVwZWF0ZWRfaW50MzIiLCBtYXNrKSk7Ci0gIEVYUEVD
VF9UUlVFKEZpZWxkTWFza1V0aWw6OklzUGF0aEluRmllbGRNYXNrKCJyZXBlYXRlZF9pbnQ2NCIs
IG1hc2spKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2so
InJlcGVhdGVkX3VpbnQzMiIsIG1hc2spKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6
SXNQYXRoSW5GaWVsZE1hc2soInJlcGVhdGVkX3VpbnQ2NCIsIG1hc2spKTsKLSAgRVhQRUNUX1RS
VUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soInJlcGVhdGVkX3NpbnQzMiIsIG1h
c2spKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soInJl
cGVhdGVkX3NpbnQ2NCIsIG1hc2spKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6SXNQ
YXRoSW5GaWVsZE1hc2soInJlcGVhdGVkX2ZpeGVkMzIiLCBtYXNrKSk7Ci0gIEVYUEVDVF9UUlVF
KEZpZWxkTWFza1V0aWw6OklzUGF0aEluRmllbGRNYXNrKCJyZXBlYXRlZF9maXhlZDY0IiwgbWFz
aykpOwotICBFWFBFQ1RfVFJVRShGaWVsZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygicmVw
ZWF0ZWRfc2ZpeGVkMzIiLCBtYXNrKSk7Ci0gIEVYUEVDVF9UUlVFKEZpZWxkTWFza1V0aWw6Oklz
UGF0aEluRmllbGRNYXNrKCJyZXBlYXRlZF9zZml4ZWQ2NCIsIG1hc2spKTsKLSAgRVhQRUNUX1RS
VUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soInJlcGVhdGVkX2Zsb2F0IiwgbWFz
aykpOwotICBFWFBFQ1RfVFJVRShGaWVsZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygicmVw
ZWF0ZWRfZG91YmxlIiwgbWFzaykpOwotICBFWFBFQ1RfVFJVRShGaWVsZE1hc2tVdGlsOjpJc1Bh
dGhJbkZpZWxkTWFzaygicmVwZWF0ZWRfYm9vbCIsIG1hc2spKTsKLSAgRVhQRUNUX1RSVUUoRmll
bGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soInJlcGVhdGVkX3N0cmluZyIsIG1hc2spKTsK
LSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soInJlcGVhdGVk
X2J5dGVzIiwgbWFzaykpOwotICBFWFBFQ1RfVFJVRSgKLSAgICAgIEZpZWxkTWFza1V0aWw6Oklz
UGF0aEluRmllbGRNYXNrKCJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSIsIG1hc2spKTsKLSAgRVhQ
RUNUX1RSVUUoCi0gICAgICBGaWVsZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygicmVwZWF0
ZWRfZm9yZWlnbl9tZXNzYWdlIiwgbWFzaykpOwotICBFWFBFQ1RfVFJVRSgKLSAgICAgIEZpZWxk
TWFza1V0aWw6OklzUGF0aEluRmllbGRNYXNrKCJyZXBlYXRlZF9pbXBvcnRfbWVzc2FnZSIsIG1h
c2spKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soInJl
cGVhdGVkX25lc3RlZF9lbnVtIiwgbWFzaykpOwotICBFWFBFQ1RfVFJVRShGaWVsZE1hc2tVdGls
OjpJc1BhdGhJbkZpZWxkTWFzaygicmVwZWF0ZWRfZm9yZWlnbl9lbnVtIiwgbWFzaykpOwotICBF
WFBFQ1RfVFJVRShGaWVsZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygicmVwZWF0ZWRfaW1w
b3J0X2VudW0iLCBtYXNrKSk7Ci19Ci0KLVRFU1QoRmllbGRNYXNrVXRpbFRlc3QsIFRlc3RUb0Nh
bm9uaWNhbEZvcm0pIHsKLSAgRmllbGRNYXNrIGluLCBvdXQ7Ci0gIC8vIFBhdGhzIHdpbGwgYmUg
c29ydGVkLgotICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5nKCJiYXoucXV6LGJhcixmb28iLCAm
aW4pOwotICBGaWVsZE1hc2tVdGlsOjpUb0Nhbm9uaWNhbEZvcm0oaW4sICZvdXQpOwotICBFWFBF
Q1RfRVEoImJhcixiYXoucXV6LGZvbyIsIEZpZWxkTWFza1V0aWw6OlRvU3RyaW5nKG91dCkpOwot
ICAvLyBEdXBsaWNhdGVkIHBhdGhzIHdpbGwgYmUgcmVtb3ZlZC4KLSAgRmllbGRNYXNrVXRpbDo6
RnJvbVN0cmluZygiZm9vLGJhcixmb28iLCAmaW4pOwotICBGaWVsZE1hc2tVdGlsOjpUb0Nhbm9u
aWNhbEZvcm0oaW4sICZvdXQpOwotICBFWFBFQ1RfRVEoImJhcixmb28iLCBGaWVsZE1hc2tVdGls
OjpUb1N0cmluZyhvdXQpKTsKLSAgLy8gU3ViLXBhdGhzIG9mIG90aGVyIHBhdGhzIHdpbGwgYmUg
cmVtb3ZlZC4KLSAgRmllbGRNYXNrVXRpbDo6RnJvbVN0cmluZygiZm9vLmIxLGJhci5iMSxmb28u
YjIsYmFyIiwgJmluKTsKLSAgRmllbGRNYXNrVXRpbDo6VG9DYW5vbmljYWxGb3JtKGluLCAmb3V0
KTsKLSAgRVhQRUNUX0VRKCJiYXIsZm9vLmIxLGZvby5iMiIsIEZpZWxkTWFza1V0aWw6OlRvU3Ry
aW5nKG91dCkpOwotCi0gIC8vIFRlc3QgbW9yZSBkZWVwbHkgbmVzdGVkIGNhc2VzLgotICBGaWVs
ZE1hc2tVdGlsOjpGcm9tU3RyaW5nKAotICAgICAgImZvby5iYXIuYmF6MSwiCi0gICAgICAiZm9v
LmJhci5iYXoyLnF1eiwiCi0gICAgICAiZm9vLmJhci5iYXoyIiwKLSAgICAgICZpbik7Ci0gIEZp
ZWxkTWFza1V0aWw6OlRvQ2Fub25pY2FsRm9ybShpbiwgJm91dCk7Ci0gIEVYUEVDVF9FUSgiZm9v
LmJhci5iYXoxLGZvby5iYXIuYmF6MiIsIEZpZWxkTWFza1V0aWw6OlRvU3RyaW5nKG91dCkpOwot
ICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5nKAotICAgICAgImZvby5iYXIuYmF6MSwiCi0gICAg
ICAiZm9vLmJhci5iYXoyLCIKLSAgICAgICJmb28uYmFyLmJhejIucXV6IiwKLSAgICAgICZpbik7
Ci0gIEZpZWxkTWFza1V0aWw6OlRvQ2Fub25pY2FsRm9ybShpbiwgJm91dCk7Ci0gIEVYUEVDVF9F
USgiZm9vLmJhci5iYXoxLGZvby5iYXIuYmF6MiIsIEZpZWxkTWFza1V0aWw6OlRvU3RyaW5nKG91
dCkpOwotICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5nKAotICAgICAgImZvby5iYXIuYmF6MSwi
Ci0gICAgICAiZm9vLmJhci5iYXoyLCIKLSAgICAgICJmb28uYmFyLmJhejIucXV6LCIKLSAgICAg
ICJmb28uYmFyIiwKLSAgICAgICZpbik7Ci0gIEZpZWxkTWFza1V0aWw6OlRvQ2Fub25pY2FsRm9y
bShpbiwgJm91dCk7Ci0gIEVYUEVDVF9FUSgiZm9vLmJhciIsIEZpZWxkTWFza1V0aWw6OlRvU3Ry
aW5nKG91dCkpOwotICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5nKAotICAgICAgImZvby5iYXIu
YmF6MSwiCi0gICAgICAiZm9vLmJhci5iYXoyLCIKLSAgICAgICJmb28uYmFyLmJhejIucXV6LCIK
LSAgICAgICJmb28iLAotICAgICAgJmluKTsKLSAgRmllbGRNYXNrVXRpbDo6VG9DYW5vbmljYWxG
b3JtKGluLCAmb3V0KTsKLSAgRVhQRUNUX0VRKCJmb28iLCBGaWVsZE1hc2tVdGlsOjpUb1N0cmlu
ZyhvdXQpKTsKLX0KLQotVEVTVChGaWVsZE1hc2tVdGlsVGVzdCwgVGVzdFVuaW9uKSB7Ci0gIEZp
ZWxkTWFzayBtYXNrMSwgbWFzazIsIG91dDsKLSAgLy8gVGVzdCBjYXNlcyB3aXRob3V0IG92ZXJs
YXBwaW5nLgotICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5nKCJmb28sYmF6IiwgJm1hc2sxKTsK
LSAgRmllbGRNYXNrVXRpbDo6RnJvbVN0cmluZygiYmFyLHF1eiIsICZtYXNrMik7Ci0gIEZpZWxk
TWFza1V0aWw6OlVuaW9uKG1hc2sxLCBtYXNrMiwgJm91dCk7Ci0gIEVYUEVDVF9FUSgiYmFyLGJh
eixmb28scXV6IiwgRmllbGRNYXNrVXRpbDo6VG9TdHJpbmcob3V0KSk7Ci0gIC8vIE92ZXJsYXAg
d2l0aCBkdXBsaWNhdGVkIHBhdGhzLgotICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5nKCJmb28s
YmF6LmJiIiwgJm1hc2sxKTsKLSAgRmllbGRNYXNrVXRpbDo6RnJvbVN0cmluZygiYmF6LmJiLHF1
eiIsICZtYXNrMik7Ci0gIEZpZWxkTWFza1V0aWw6OlVuaW9uKG1hc2sxLCBtYXNrMiwgJm91dCk7
Ci0gIEVYUEVDVF9FUSgiYmF6LmJiLGZvbyxxdXoiLCBGaWVsZE1hc2tVdGlsOjpUb1N0cmluZyhv
dXQpKTsKLSAgLy8gT3ZlcmxhcCB3aXRoIHBhdGhzIGNvdmVyaW5nIHNvbWUgb3RoZXIgcGF0aHMu
Ci0gIEZpZWxkTWFza1V0aWw6OkZyb21TdHJpbmcoImZvby5iYXIuYmF6LHF1eiIsICZtYXNrMSk7
Ci0gIEZpZWxkTWFza1V0aWw6OkZyb21TdHJpbmcoImZvby5iYXIsYmFyIiwgJm1hc2syKTsKLSAg
RmllbGRNYXNrVXRpbDo6VW5pb24obWFzazEsIG1hc2syLCAmb3V0KTsKLSAgRVhQRUNUX0VRKCJi
YXIsZm9vLmJhcixxdXoiLCBGaWVsZE1hc2tVdGlsOjpUb1N0cmluZyhvdXQpKTsKLX0KLQotVEVT
VChGaWVsZE1hc2tVdGlsVGVzdCwgVGVzdEludGVyc2VjdCkgewotICBGaWVsZE1hc2sgbWFzazEs
IG1hc2syLCBvdXQ7Ci0gIC8vIFRlc3QgY2FzZXMgd2l0aG91dCBvdmVybGFwcGluZy4KLSAgRmll
bGRNYXNrVXRpbDo6RnJvbVN0cmluZygiZm9vLGJheiIsICZtYXNrMSk7Ci0gIEZpZWxkTWFza1V0
aWw6OkZyb21TdHJpbmcoImJhcixxdXoiLCAmbWFzazIpOwotICBGaWVsZE1hc2tVdGlsOjpJbnRl
cnNlY3QobWFzazEsIG1hc2syLCAmb3V0KTsKLSAgRVhQRUNUX0VRKCIiLCBGaWVsZE1hc2tVdGls
OjpUb1N0cmluZyhvdXQpKTsKLSAgLy8gT3ZlcmxhcCB3aXRoIGR1cGxpY2F0ZWQgcGF0aHMuCi0g
IEZpZWxkTWFza1V0aWw6OkZyb21TdHJpbmcoImZvbyxiYXouYmIiLCAmbWFzazEpOwotICBGaWVs
ZE1hc2tVdGlsOjpGcm9tU3RyaW5nKCJiYXouYmIscXV6IiwgJm1hc2syKTsKLSAgRmllbGRNYXNr
VXRpbDo6SW50ZXJzZWN0KG1hc2sxLCBtYXNrMiwgJm91dCk7Ci0gIEVYUEVDVF9FUSgiYmF6LmJi
IiwgRmllbGRNYXNrVXRpbDo6VG9TdHJpbmcob3V0KSk7Ci0gIC8vIE92ZXJsYXAgd2l0aCBwYXRo
cyBjb3ZlcmluZyBzb21lIG90aGVyIHBhdGhzLgotICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5n
KCJmb28uYmFyLmJheixxdXoiLCAmbWFzazEpOwotICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5n
KCJmb28uYmFyLGJhciIsICZtYXNrMik7Ci0gIEZpZWxkTWFza1V0aWw6OkludGVyc2VjdChtYXNr
MSwgbWFzazIsICZvdXQpOwotICBFWFBFQ1RfRVEoImZvby5iYXIuYmF6IiwgRmllbGRNYXNrVXRp
bDo6VG9TdHJpbmcob3V0KSk7Ci19Ci0KLVRFU1QoRmllbGRNYXNrVXRpbFRlc3QsIFRlc3RJc3Bh
dGhJbkZpZWxkTWFzaykgewotICBGaWVsZE1hc2sgbWFzazsKLSAgRmllbGRNYXNrVXRpbDo6RnJv
bVN0cmluZygiZm9vLmJhciIsICZtYXNrKTsKLSAgRVhQRUNUX0ZBTFNFKEZpZWxkTWFza1V0aWw6
OklzUGF0aEluRmllbGRNYXNrKCIiLCBtYXNrKSk7Ci0gIEVYUEVDVF9GQUxTRShGaWVsZE1hc2tV
dGlsOjpJc1BhdGhJbkZpZWxkTWFzaygiZm9vIiwgbWFzaykpOwotICBFWFBFQ1RfVFJVRShGaWVs
ZE1hc2tVdGlsOjpJc1BhdGhJbkZpZWxkTWFzaygiZm9vLmJhciIsIG1hc2spKTsKLSAgRVhQRUNU
X1RSVUUoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soImZvby5iYXIuYmF6IiwgbWFz
aykpOwotICBFWFBFQ1RfRkFMU0UoRmllbGRNYXNrVXRpbDo6SXNQYXRoSW5GaWVsZE1hc2soImZv
by5iYXIwLmJheiIsIG1hc2spKTsKLX0KLQotVEVTVChGaWVsZE1hc2tVdGlsVGVzdCwgTWVyZ2VN
ZXNzYWdlKSB7Ci0gIFRlc3RBbGxUeXBlcyBzcmMsIGRzdDsKLSAgVGVzdFV0aWw6OlNldEFsbEZp
ZWxkcygmc3JjKTsKLSAgRmllbGRNYXNrVXRpbDo6TWVyZ2VPcHRpb25zIG9wdGlvbnM7Ci0KLSNk
ZWZpbmUgVEVTVF9NRVJHRV9PTkVfUFJJTUlUSVZFX0ZJRUxEKGZpZWxkX25hbWUpICAgICAgICAg
ICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIFRlc3RBbGxUeXBlcyB0bXA7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB0bXAuc2V0XyMjZmllbGRfbmFtZShzcmMuZmllbGRfbmFt
ZSgpKTsgICAgICAgICAgICAgICAgICBcCi0gICAgRmllbGRNYXNrIG1hc2s7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hc2suYWRkX3BhdGhzKCNmaWVs
ZF9uYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkc3QuQ2xlYXIoKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRmllbGRN
YXNrVXRpbDo6TWVyZ2VNZXNzYWdlVG8oc3JjLCBtYXNrLCBvcHRpb25zLCAmZHN0KTsgXAotICAg
IEVYUEVDVF9FUSh0bXAuRGVidWdTdHJpbmcoKSwgZHN0LkRlYnVnU3RyaW5nKCkpOyAgICAgICAg
IFwKLSAgfQotICBURVNUX01FUkdFX09ORV9QUklNSVRJVkVfRklFTEQob3B0aW9uYWxfaW50MzIp
Ci0gIFRFU1RfTUVSR0VfT05FX1BSSU1JVElWRV9GSUVMRChvcHRpb25hbF9pbnQ2NCkKLSAgVEVT
VF9NRVJHRV9PTkVfUFJJTUlUSVZFX0ZJRUxEKG9wdGlvbmFsX3VpbnQzMikKLSAgVEVTVF9NRVJH
RV9PTkVfUFJJTUlUSVZFX0ZJRUxEKG9wdGlvbmFsX3VpbnQ2NCkKLSAgVEVTVF9NRVJHRV9PTkVf
UFJJTUlUSVZFX0ZJRUxEKG9wdGlvbmFsX3NpbnQzMikKLSAgVEVTVF9NRVJHRV9PTkVfUFJJTUlU
SVZFX0ZJRUxEKG9wdGlvbmFsX3NpbnQ2NCkKLSAgVEVTVF9NRVJHRV9PTkVfUFJJTUlUSVZFX0ZJ
RUxEKG9wdGlvbmFsX2ZpeGVkMzIpCi0gIFRFU1RfTUVSR0VfT05FX1BSSU1JVElWRV9GSUVMRChv
cHRpb25hbF9maXhlZDY0KQotICBURVNUX01FUkdFX09ORV9QUklNSVRJVkVfRklFTEQob3B0aW9u
YWxfc2ZpeGVkMzIpCi0gIFRFU1RfTUVSR0VfT05FX1BSSU1JVElWRV9GSUVMRChvcHRpb25hbF9z
Zml4ZWQ2NCkKLSAgVEVTVF9NRVJHRV9PTkVfUFJJTUlUSVZFX0ZJRUxEKG9wdGlvbmFsX2Zsb2F0
KQotICBURVNUX01FUkdFX09ORV9QUklNSVRJVkVfRklFTEQob3B0aW9uYWxfZG91YmxlKQotICBU
RVNUX01FUkdFX09ORV9QUklNSVRJVkVfRklFTEQob3B0aW9uYWxfYm9vbCkKLSAgVEVTVF9NRVJH
RV9PTkVfUFJJTUlUSVZFX0ZJRUxEKG9wdGlvbmFsX3N0cmluZykKLSAgVEVTVF9NRVJHRV9PTkVf
UFJJTUlUSVZFX0ZJRUxEKG9wdGlvbmFsX2J5dGVzKQotICBURVNUX01FUkdFX09ORV9QUklNSVRJ
VkVfRklFTEQob3B0aW9uYWxfbmVzdGVkX2VudW0pCi0gIFRFU1RfTUVSR0VfT05FX1BSSU1JVElW
RV9GSUVMRChvcHRpb25hbF9mb3JlaWduX2VudW0pCi0gIFRFU1RfTUVSR0VfT05FX1BSSU1JVElW
RV9GSUVMRChvcHRpb25hbF9pbXBvcnRfZW51bSkKLSN1bmRlZiBURVNUX01FUkdFX09ORV9QUklN
SVRJVkVfRklFTEQKLQotI2RlZmluZSBURVNUX01FUkdFX09ORV9GSUVMRChmaWVsZF9uYW1lKSAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVGVzdEFsbFR5cGVzIHRtcDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICp0bXAubXV0YWJsZV8jI2Zp
ZWxkX25hbWUoKSA9IHNyYy5maWVsZF9uYW1lKCk7ICAgICAgICAgIFwKLSAgICBGaWVsZE1hc2sg
bWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFz
ay5hZGRfcGF0aHMoI2ZpZWxkX25hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGRzdC5DbGVhcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBGaWVsZE1hc2tVdGlsOjpNZXJnZU1lc3NhZ2VUbyhzcmMsIG1hc2ssIG9wdGlv
bnMsICZkc3QpOyBcCi0gICAgRVhQRUNUX0VRKHRtcC5EZWJ1Z1N0cmluZygpLCBkc3QuRGVidWdT
dHJpbmcoKSk7ICAgICAgICAgXAotICB9Ci0gIFRFU1RfTUVSR0VfT05FX0ZJRUxEKG9wdGlvbmFs
X25lc3RlZF9tZXNzYWdlKQotICBURVNUX01FUkdFX09ORV9GSUVMRChvcHRpb25hbF9mb3JlaWdu
X21lc3NhZ2UpCi0gIFRFU1RfTUVSR0VfT05FX0ZJRUxEKG9wdGlvbmFsX2ltcG9ydF9tZXNzYWdl
KQotCi0gIFRFU1RfTUVSR0VfT05FX0ZJRUxEKHJlcGVhdGVkX2ludDMyKQotICBURVNUX01FUkdF
X09ORV9GSUVMRChyZXBlYXRlZF9pbnQ2NCkKLSAgVEVTVF9NRVJHRV9PTkVfRklFTEQocmVwZWF0
ZWRfdWludDMyKQotICBURVNUX01FUkdFX09ORV9GSUVMRChyZXBlYXRlZF91aW50NjQpCi0gIFRF
U1RfTUVSR0VfT05FX0ZJRUxEKHJlcGVhdGVkX3NpbnQzMikKLSAgVEVTVF9NRVJHRV9PTkVfRklF
TEQocmVwZWF0ZWRfc2ludDY0KQotICBURVNUX01FUkdFX09ORV9GSUVMRChyZXBlYXRlZF9maXhl
ZDMyKQotICBURVNUX01FUkdFX09ORV9GSUVMRChyZXBlYXRlZF9maXhlZDY0KQotICBURVNUX01F
UkdFX09ORV9GSUVMRChyZXBlYXRlZF9zZml4ZWQzMikKLSAgVEVTVF9NRVJHRV9PTkVfRklFTEQo
cmVwZWF0ZWRfc2ZpeGVkNjQpCi0gIFRFU1RfTUVSR0VfT05FX0ZJRUxEKHJlcGVhdGVkX2Zsb2F0
KQotICBURVNUX01FUkdFX09ORV9GSUVMRChyZXBlYXRlZF9kb3VibGUpCi0gIFRFU1RfTUVSR0Vf
T05FX0ZJRUxEKHJlcGVhdGVkX2Jvb2wpCi0gIFRFU1RfTUVSR0VfT05FX0ZJRUxEKHJlcGVhdGVk
X3N0cmluZykKLSAgVEVTVF9NRVJHRV9PTkVfRklFTEQocmVwZWF0ZWRfYnl0ZXMpCi0gIFRFU1Rf
TUVSR0VfT05FX0ZJRUxEKHJlcGVhdGVkX25lc3RlZF9tZXNzYWdlKQotICBURVNUX01FUkdFX09O
RV9GSUVMRChyZXBlYXRlZF9mb3JlaWduX21lc3NhZ2UpCi0gIFRFU1RfTUVSR0VfT05FX0ZJRUxE
KHJlcGVhdGVkX2ltcG9ydF9tZXNzYWdlKQotICBURVNUX01FUkdFX09ORV9GSUVMRChyZXBlYXRl
ZF9uZXN0ZWRfZW51bSkKLSAgVEVTVF9NRVJHRV9PTkVfRklFTEQocmVwZWF0ZWRfZm9yZWlnbl9l
bnVtKQotICBURVNUX01FUkdFX09ORV9GSUVMRChyZXBlYXRlZF9pbXBvcnRfZW51bSkKLSN1bmRl
ZiBURVNUX01FUkdFX09ORV9GSUVMRAotCi0gIC8vIFRlc3QgbWVyZ2UgbmVzdGVkIGZpZWxkcy4K
LSAgTmVzdGVkVGVzdEFsbFR5cGVzIG5lc3RlZF9zcmMsIG5lc3RlZF9kc3Q7Ci0gIG5lc3RlZF9z
cmMubXV0YWJsZV9jaGlsZCgpLT5tdXRhYmxlX3BheWxvYWQoKS0+c2V0X29wdGlvbmFsX2ludDMy
KDEyMzQpOwotICBuZXN0ZWRfc3JjLm11dGFibGVfY2hpbGQoKQotICAgICAgLT5tdXRhYmxlX2No
aWxkKCkKLSAgICAgIC0+bXV0YWJsZV9wYXlsb2FkKCkKLSAgICAgIC0+c2V0X29wdGlvbmFsX2lu
dDMyKDU2NzgpOwotICBGaWVsZE1hc2sgbWFzazsKLSAgRmllbGRNYXNrVXRpbDo6RnJvbVN0cmlu
ZygiY2hpbGQucGF5bG9hZCIsICZtYXNrKTsKLSAgRmllbGRNYXNrVXRpbDo6TWVyZ2VNZXNzYWdl
VG8obmVzdGVkX3NyYywgbWFzaywgb3B0aW9ucywgJm5lc3RlZF9kc3QpOwotICBFWFBFQ1RfRVEo
MTIzNCwgbmVzdGVkX2RzdC5jaGlsZCgpLnBheWxvYWQoKS5vcHRpb25hbF9pbnQzMigpKTsKLSAg
RVhQRUNUX0VRKDAsIG5lc3RlZF9kc3QuY2hpbGQoKS5jaGlsZCgpLnBheWxvYWQoKS5vcHRpb25h
bF9pbnQzMigpKTsKLQotICBGaWVsZE1hc2tVdGlsOjpGcm9tU3RyaW5nKCJjaGlsZC5jaGlsZC5w
YXlsb2FkIiwgJm1hc2spOwotICBGaWVsZE1hc2tVdGlsOjpNZXJnZU1lc3NhZ2VUbyhuZXN0ZWRf
c3JjLCBtYXNrLCBvcHRpb25zLCAmbmVzdGVkX2RzdCk7Ci0gIEVYUEVDVF9FUSgxMjM0LCBuZXN0
ZWRfZHN0LmNoaWxkKCkucGF5bG9hZCgpLm9wdGlvbmFsX2ludDMyKCkpOwotICBFWFBFQ1RfRVEo
NTY3OCwgbmVzdGVkX2RzdC5jaGlsZCgpLmNoaWxkKCkucGF5bG9hZCgpLm9wdGlvbmFsX2ludDMy
KCkpOwotCi0gIG5lc3RlZF9kc3QuQ2xlYXIoKTsKLSAgRmllbGRNYXNrVXRpbDo6RnJvbVN0cmlu
ZygiY2hpbGQuY2hpbGQucGF5bG9hZCIsICZtYXNrKTsKLSAgRmllbGRNYXNrVXRpbDo6TWVyZ2VN
ZXNzYWdlVG8obmVzdGVkX3NyYywgbWFzaywgb3B0aW9ucywgJm5lc3RlZF9kc3QpOwotICBFWFBF
Q1RfRVEoMCwgbmVzdGVkX2RzdC5jaGlsZCgpLnBheWxvYWQoKS5vcHRpb25hbF9pbnQzMigpKTsK
LSAgRVhQRUNUX0VRKDU2NzgsIG5lc3RlZF9kc3QuY2hpbGQoKS5jaGlsZCgpLnBheWxvYWQoKS5v
cHRpb25hbF9pbnQzMigpKTsKLQotICBuZXN0ZWRfZHN0LkNsZWFyKCk7Ci0gIEZpZWxkTWFza1V0
aWw6OkZyb21TdHJpbmcoImNoaWxkIiwgJm1hc2spOwotICBGaWVsZE1hc2tVdGlsOjpNZXJnZU1l
c3NhZ2VUbyhuZXN0ZWRfc3JjLCBtYXNrLCBvcHRpb25zLCAmbmVzdGVkX2RzdCk7Ci0gIEVYUEVD
VF9FUSgxMjM0LCBuZXN0ZWRfZHN0LmNoaWxkKCkucGF5bG9hZCgpLm9wdGlvbmFsX2ludDMyKCkp
OwotICBFWFBFQ1RfRVEoNTY3OCwgbmVzdGVkX2RzdC5jaGlsZCgpLmNoaWxkKCkucGF5bG9hZCgp
Lm9wdGlvbmFsX2ludDMyKCkpOwotCi0gIC8vIFRlc3QgTWVyZ2VPcHRpb25zLgotCi0gIG5lc3Rl
ZF9kc3QuQ2xlYXIoKTsKLSAgbmVzdGVkX2RzdC5tdXRhYmxlX2NoaWxkKCktPm11dGFibGVfcGF5
bG9hZCgpLT5zZXRfb3B0aW9uYWxfaW50NjQoNDMyMSk7Ci0gIC8vIE1lc3NhZ2UgZmllbGRzIHdp
bGwgYmUgbWVyZ2VkIGJ5IGRlZmF1bHQuCi0gIEZpZWxkTWFza1V0aWw6OkZyb21TdHJpbmcoImNo
aWxkLnBheWxvYWQiLCAmbWFzayk7Ci0gIEZpZWxkTWFza1V0aWw6Ok1lcmdlTWVzc2FnZVRvKG5l
c3RlZF9zcmMsIG1hc2ssIG9wdGlvbnMsICZuZXN0ZWRfZHN0KTsKLSAgRVhQRUNUX0VRKDEyMzQs
IG5lc3RlZF9kc3QuY2hpbGQoKS5wYXlsb2FkKCkub3B0aW9uYWxfaW50MzIoKSk7Ci0gIEVYUEVD
VF9FUSg0MzIxLCBuZXN0ZWRfZHN0LmNoaWxkKCkucGF5bG9hZCgpLm9wdGlvbmFsX2ludDY0KCkp
OwotICAvLyBDaGFuZ2UgdGhlIGJlaGF2aW9yIHRvIHJlcGxhY2UgbWVzc2FnZSBmaWVsZHMuCi0g
IG9wdGlvbnMuc2V0X3JlcGxhY2VfbWVzc2FnZV9maWVsZHModHJ1ZSk7Ci0gIEZpZWxkTWFza1V0
aWw6OkZyb21TdHJpbmcoImNoaWxkLnBheWxvYWQiLCAmbWFzayk7Ci0gIEZpZWxkTWFza1V0aWw6
Ok1lcmdlTWVzc2FnZVRvKG5lc3RlZF9zcmMsIG1hc2ssIG9wdGlvbnMsICZuZXN0ZWRfZHN0KTsK
LSAgRVhQRUNUX0VRKDEyMzQsIG5lc3RlZF9kc3QuY2hpbGQoKS5wYXlsb2FkKCkub3B0aW9uYWxf
aW50MzIoKSk7Ci0gIEVYUEVDVF9FUSgwLCBuZXN0ZWRfZHN0LmNoaWxkKCkucGF5bG9hZCgpLm9w
dGlvbmFsX2ludDY0KCkpOwotCi0gIC8vIEJ5IGRlZmF1bHQsIGZpZWxkcyBtaXNzaW5nIGluIHNv
dXJjZSBhcmUgbm90IGNsZWFyZWQgaW4gZGVzdGluYXRpb24uCi0gIG9wdGlvbnMuc2V0X3JlcGxh
Y2VfbWVzc2FnZV9maWVsZHMoZmFsc2UpOwotICBuZXN0ZWRfZHN0Lm11dGFibGVfcGF5bG9hZCgp
OwotICBFWFBFQ1RfVFJVRShuZXN0ZWRfZHN0Lmhhc19wYXlsb2FkKCkpOwotICBGaWVsZE1hc2tV
dGlsOjpGcm9tU3RyaW5nKCJwYXlsb2FkIiwgJm1hc2spOwotICBGaWVsZE1hc2tVdGlsOjpNZXJn
ZU1lc3NhZ2VUbyhuZXN0ZWRfc3JjLCBtYXNrLCBvcHRpb25zLCAmbmVzdGVkX2RzdCk7Ci0gIEVY
UEVDVF9UUlVFKG5lc3RlZF9kc3QuaGFzX3BheWxvYWQoKSk7Ci0gIC8vIEJ1dCB0aGV5IGFyZSBj
bGVhcmVkIHdoZW4gcmVwbGFjaW5nIG1lc3NhZ2UgZmllbGRzLgotICBvcHRpb25zLnNldF9yZXBs
YWNlX21lc3NhZ2VfZmllbGRzKHRydWUpOwotICBuZXN0ZWRfZHN0LkNsZWFyKCk7Ci0gIG5lc3Rl
ZF9kc3QubXV0YWJsZV9wYXlsb2FkKCk7Ci0gIEZpZWxkTWFza1V0aWw6OkZyb21TdHJpbmcoInBh
eWxvYWQiLCAmbWFzayk7Ci0gIEZpZWxkTWFza1V0aWw6Ok1lcmdlTWVzc2FnZVRvKG5lc3RlZF9z
cmMsIG1hc2ssIG9wdGlvbnMsICZuZXN0ZWRfZHN0KTsKLSAgRVhQRUNUX0ZBTFNFKG5lc3RlZF9k
c3QuaGFzX3BheWxvYWQoKSk7Ci0KLSAgbmVzdGVkX3NyYy5tdXRhYmxlX3BheWxvYWQoKS0+YWRk
X3JlcGVhdGVkX2ludDMyKDEyMzQpOwotICBuZXN0ZWRfZHN0Lm11dGFibGVfcGF5bG9hZCgpLT5h
ZGRfcmVwZWF0ZWRfaW50MzIoNTY3OCk7Ci0gIC8vIFJlcGVhdGVkIGZpZWxkcyB3aWxsIGJlIGFw
cGVuZGVkIGJ5IGRlZmF1bHQuCi0gIEZpZWxkTWFza1V0aWw6OkZyb21TdHJpbmcoInBheWxvYWQu
cmVwZWF0ZWRfaW50MzIiLCAmbWFzayk7Ci0gIEZpZWxkTWFza1V0aWw6Ok1lcmdlTWVzc2FnZVRv
KG5lc3RlZF9zcmMsIG1hc2ssIG9wdGlvbnMsICZuZXN0ZWRfZHN0KTsKLSAgQVNTRVJUX0VRKDIs
IG5lc3RlZF9kc3QucGF5bG9hZCgpLnJlcGVhdGVkX2ludDMyX3NpemUoKSk7Ci0gIEVYUEVDVF9F
USg1Njc4LCBuZXN0ZWRfZHN0LnBheWxvYWQoKS5yZXBlYXRlZF9pbnQzMigwKSk7Ci0gIEVYUEVD
VF9FUSgxMjM0LCBuZXN0ZWRfZHN0LnBheWxvYWQoKS5yZXBlYXRlZF9pbnQzMigxKSk7Ci0gIC8v
IENoYW5nZSB0aGUgYmVoYXZpb3IgdG8gcmVwbGFjZSByZXBlYXRlZCBmaWVsZHMuCi0gIG9wdGlv
bnMuc2V0X3JlcGxhY2VfcmVwZWF0ZWRfZmllbGRzKHRydWUpOwotICBGaWVsZE1hc2tVdGlsOjpG
cm9tU3RyaW5nKCJwYXlsb2FkLnJlcGVhdGVkX2ludDMyIiwgJm1hc2spOwotICBGaWVsZE1hc2tV
dGlsOjpNZXJnZU1lc3NhZ2VUbyhuZXN0ZWRfc3JjLCBtYXNrLCBvcHRpb25zLCAmbmVzdGVkX2Rz
dCk7Ci0gIEFTU0VSVF9FUSgxLCBuZXN0ZWRfZHN0LnBheWxvYWQoKS5yZXBlYXRlZF9pbnQzMl9z
aXplKCkpOwotICBFWFBFQ1RfRVEoMTIzNCwgbmVzdGVkX2RzdC5wYXlsb2FkKCkucmVwZWF0ZWRf
aW50MzIoMCkpOwotfQotCi0KLX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIHV0aWwK
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvY29uc3RhbnRzLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9jb25zdGFudHMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTU1Njg4OGNjYTkzNDE0YzY4ZDYzY2ZhYTVhNmQ0OTU0YzE1YjcwZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9pbnRlcm5hbC9jb25zdGFudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5n
ZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBH
T09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfQ09OU1RBTlRTX0hfXwotI2RlZmluZSBHT09H
TEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfQ09OU1RBTlRTX0hfXwotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgY29u
c3RhbnRzIHVzZWQgYnkgLy9uZXQvcHJvdG8yL3V0aWwvY29udmVydGVyLgotCi1uYW1lc3BhY2Ug
Z29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1lc3Bh
Y2UgY29udmVydGVyIHsKLS8vIFByZWZpeCBmb3IgdHlwZSBVUkxzLgotY29uc3QgY2hhciBrVHlw
ZVNlcnZpY2VCYXNlVXJsW10gPSAidHlwZS5nb29nbGVhcGlzLmNvbSI7Ci0KLS8vIEZvcm1hdCBz
dHJpbmcgZm9yIFJGQzMzMzkgdGltZXN0YW1wIGZvcm1hdHRpbmcuCi1jb25zdCBjaGFyIGtSZmMz
MzM5VGltZUZvcm1hdFtdID0gIiVFNFktJW0tJWRUJUg6JU06JVMiOwotCi0vLyBTYW1lIGFzIGFi
b3ZlLCBidXQgdGhlIHllYXIgdmFsdWUgaXMgbm90IHplcm8tcGFkZGVkIGkuZS4gdGhpcyBhY2Nl
cHRzCi0vLyB0aW1lc3RhbXBzIGxpa2UgIjEtMDEtMDAwMVQyMzo1OTo1OVoiIGluc3RlYWQgb2Yg
IjAwMDEtMDEtMDAwMVQyMzo1OTo1OVoiLgotY29uc3QgY2hhciBrUmZjMzMzOVRpbWVGb3JtYXRO
b1BhZGRpbmdbXSA9ICIlWS0lbS0lZFQlSDolTTolUyI7Ci0KLS8vIE1pbmltdW4gc2Vjb25kcyBh
bGxvd2VkIGluIGEgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCB2YWx1ZS4KLWNvbnN0IGludDY0
IGtUaW1lc3RhbXBNaW5TZWNvbmRzID0gLTYyMTM1NTk2ODAwOwotCi0vLyBNYXhpbXVtIHNlY29u
ZHMgYWxsb3dlZCBpbiBhIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgdmFsdWUuCi1jb25zdCBp
bnQ2NCBrVGltZXN0YW1wTWF4U2Vjb25kcyA9IDI1MzQwMjMwMDc5OTsKLQotLy8gTWluaW11bSBz
ZWNvbmRzIGFsbG93ZWQgaW4gYSBnb29nbGUucHJvdG9idWYuRHVyYXRpb24gdmFsdWUuCi1jb25z
dCBpbnQ2NCBrRHVyYXRpb25NaW5TZWNvbmRzID0gLTMxNTU3NjAwMDAwMDsKLQotLy8gTWF4aW11
bSBzZWNvbmRzIGFsbG93ZWQgaW4gYSBnb29nbGUucHJvdG9idWYuRHVyYXRpb24gdmFsdWUuCi1j
b25zdCBpbnQ2NCBrRHVyYXRpb25NYXhTZWNvbmRzID0gMzE1NTc2MDAwMDAwOwotCi0vLyBOYW5v
IHNlY29uZHMgaW4gYSBzZWNvbmQuCi1jb25zdCBpbnQzMiBrTmFub3NQZXJTZWNvbmQgPSAxMDAw
MDAwMDAwOwotCi0vLyBUeXBlIHVybCByZXByZXNlbnRpbmcgTlVMTCB2YWx1ZXMgaW4gZ29vZ2xl
LnByb3RvYnVmLlN0cnVjdCB0eXBlLgotY29uc3QgY2hhciBrU3RydWN0TnVsbFZhbHVlVHlwZVVy
bFtdID0KLSAgICAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuTnVsbFZhbHVl
IjsKLQotLy8gVHlwZSBzdHJpbmcgZm9yIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QKLWNvbnN0IGNo
YXIga1N0cnVjdFR5cGVbXSA9ICJnb29nbGUucHJvdG9idWYuU3RydWN0IjsKLQotLy8gVHlwZSBz
dHJpbmcgZm9yIHN0cnVjdC5wcm90bydzIGdvb2dsZS5wcm90b2J1Zi5WYWx1ZSB2YWx1ZSB0eXBl
LgotY29uc3QgY2hhciBrU3RydWN0VmFsdWVUeXBlW10gPSAiZ29vZ2xlLnByb3RvYnVmLlZhbHVl
IjsKLQotLy8gVHlwZSBzdHJpbmcgZm9yIHN0cnVjdC5wcm90bydzIGdvb2dsZS5wcm90b2J1Zi5M
aXN0VmFsdWUgdmFsdWUgdHlwZS4KLWNvbnN0IGNoYXIga1N0cnVjdExpc3RWYWx1ZVR5cGVbXSA9
ICJnb29nbGUucHJvdG9idWYuTGlzdFZhbHVlIjsKLQotLy8gVHlwZSBzdHJpbmcgZm9yIGdvb2ds
ZS5wcm90b2J1Zi5UaW1lc3RhbXAKLWNvbnN0IGNoYXIga1RpbWVzdGFtcFR5cGVbXSA9ICJnb29n
bGUucHJvdG9idWYuVGltZXN0YW1wIjsKLQotLy8gVHlwZSBzdHJpbmcgZm9yIGdvb2dsZS5wcm90
b2J1Zi5EdXJhdGlvbgotY29uc3QgY2hhciBrRHVyYXRpb25UeXBlW10gPSAiZ29vZ2xlLnByb3Rv
YnVmLkR1cmF0aW9uIjsKLQotLy8gVHlwZSBVUkwgZm9yIHN0cnVjdCB2YWx1ZSB0eXBlIGdvb2ds
ZS5wcm90b2J1Zi5WYWx1ZQotY29uc3QgY2hhciBrU3RydWN0VmFsdWVUeXBlVXJsW10gPSAidHlw
ZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVmFsdWUiOwotCi0vLyBUeXBlIFVSTCBm
b3Igc3RydWN0IHZhbHVlIHR5cGUgZ29vZ2xlLnByb3RvYnVmLlZhbHVlCi1jb25zdCBjaGFyIGtT
dHJ1Y3RUeXBlVXJsW10gPSAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuU3Ry
dWN0IjsKLQotLy8gVHlwZSBzdHJpbmcgZm9yIGdvb2dsZS5wcm90b2J1Zi5BbnkKLWNvbnN0IGNo
YXIga0FueVR5cGVbXSA9ICJnb29nbGUucHJvdG9idWYuQW55IjsKLQotLy8gVGhlIHR5cGUgVVJM
IG9mIGdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2s7Ci1jb25zdCBjaGFyIGtGaWVsZE1hc2tUeXBl
VXJsW10gPQotICAgICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5GaWVsZE1h
c2siOwotCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVyCi19ICAvLyBuYW1lc3BhY2UgdXRpbAot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYg
IC8vIEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9DT05TVEFOVFNfSF9fCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9kYXRhcGllY2UuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9kYXRhcGllY2UuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDcyYzBhY2E2MDkwZjZhNWYyODhmYWJlYzFjMDZiZTQ3MTc5MTFkNDgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGF0YXBpZWNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEs
MzYwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGF0YXBpZWNlLmg+Ci0KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3RydWN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3R5cGUucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3V0aWxpdHkuaD4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9tYXRobGltaXRzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L21hdGh1dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LW5hbWVzcGFjZSB1dGlsIHsKLW5hbWVzcGFjZSBjb252ZXJ0ZXIgewotCi11c2luZyBnb29nbGU6
OnByb3RvYnVmOjpFbnVtRGVzY3JpcHRvcjsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OkVudW1W
YWx1ZURlc2NyaXB0b3I7Ci07Ci07Ci07Ci11c2luZyB1dGlsOjplcnJvcjo6Q29kZTsKLXVzaW5n
IHV0aWw6OlN0YXR1czsKLXVzaW5nIHV0aWw6OlN0YXR1c09yOwotCi1uYW1lc3BhY2UgewotCi1p
bmxpbmUgU3RhdHVzIEludmFsaWRBcmd1bWVudChTdHJpbmdQaWVjZSB2YWx1ZV9zdHIpIHsKLSAg
cmV0dXJuIFN0YXR1cyh1dGlsOjplcnJvcjo6SU5WQUxJRF9BUkdVTUVOVCwgdmFsdWVfc3RyKTsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgotU3RhdHVzT3I8VG8+
IFZhbGlkYXRlTnVtYmVyQ29udmVyc2lvbihUbyBhZnRlciwgRnJvbSBiZWZvcmUpIHsKLSAgaWYg
KGFmdGVyID09IGJlZm9yZSAmJgotICAgICAgTWF0aFV0aWw6OlNpZ248RnJvbT4oYmVmb3JlKSA9
PSBNYXRoVXRpbDo6U2lnbjxUbz4oYWZ0ZXIpKSB7Ci0gICAgcmV0dXJuIGFmdGVyOwotICB9IGVs
c2UgewotICAgIHJldHVybiBJbnZhbGlkQXJndW1lbnQoOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6aXNfaW50ZWdyYWw8RnJvbT46OnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPyBWYWx1ZUFzU3RyaW5nKGJlZm9yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OmlzX3NhbWU8RnJvbSwgZG91Ymxl
Pjo6dmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IERvdWJsZUFz
U3RyaW5nKGJlZm9yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEZs
b2F0QXNTdHJpbmcoYmVmb3JlKSk7Ci0gIH0KLX0KLQotLy8gRm9yIGdlbmVyYWwgY29udmVyc2lv
biBiZXR3ZWVuCi0vLyAgICAgaW50MzIsIGludDY0LCB1aW50MzIsIHVpbnQ2NCwgZG91YmxlIGFu
ZCBmbG9hdAotLy8gZXhjZXB0IGNvbnZlcnNpb24gYmV0d2VlbiBkb3VibGUgYW5kIGZsb2F0Lgot
dGVtcGxhdGUgPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgotU3RhdHVzT3I8VG8+IE51bWJl
ckNvbnZlcnRBbmRDaGVjayhGcm9tIGJlZm9yZSkgewotICBpZiAoOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6aXNfc2FtZTxGcm9tLCBUbz46OnZhbHVlKSByZXR1cm4gYmVmb3JlOwotCi0g
IFRvIGFmdGVyID0gc3RhdGljX2Nhc3Q8VG8+KGJlZm9yZSk7Ci0gIHJldHVybiBWYWxpZGF0ZU51
bWJlckNvbnZlcnNpb24oYWZ0ZXIsIGJlZm9yZSk7Ci19Ci0KLS8vIEZvciBjb252ZXJzaW9uIHRv
IGludGVnZXIgdHlwZXMgKGludDMyLCBpbnQ2NCwgdWludDMyLCB1aW50NjQpIGZyb20gZmxvYXRp
bmcKLS8vIHBvaW50IHR5cGVzIChkb3VibGUsIGZsb2F0KSBvbmx5LgotdGVtcGxhdGUgPHR5cGVu
YW1lIFRvLCB0eXBlbmFtZSBGcm9tPgotU3RhdHVzT3I8VG8+IEZsb2F0aW5nUG9pbnRUb0ludENv
bnZlcnRBbmRDaGVjayhGcm9tIGJlZm9yZSkgewotICBpZiAoOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6aXNfc2FtZTxGcm9tLCBUbz46OnZhbHVlKSByZXR1cm4gYmVmb3JlOwotCi0gIFRv
IGFmdGVyID0gc3RhdGljX2Nhc3Q8VG8+KGJlZm9yZSk7Ci0gIHJldHVybiBWYWxpZGF0ZU51bWJl
ckNvbnZlcnNpb24oYWZ0ZXIsIGJlZm9yZSk7Ci19Ci0KLS8vIEZvciBjb252ZXJzaW9uIGJldHdl
ZW4gZG91YmxlIGFuZCBmbG9hdCBvbmx5LgotdGVtcGxhdGUgPHR5cGVuYW1lIFRvLCB0eXBlbmFt
ZSBGcm9tPgotU3RhdHVzT3I8VG8+IEZsb2F0aW5nUG9pbnRDb252ZXJ0QW5kQ2hlY2soRnJvbSBi
ZWZvcmUpIHsKLSAgaWYgKE1hdGhMaW1pdHM8RnJvbT46OklzTmFOKGJlZm9yZSkpIHsKLSAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUbz46OnF1aWV0X05hTigpOwotICB9Ci0KLSAgVG8g
YWZ0ZXIgPSBzdGF0aWNfY2FzdDxUbz4oYmVmb3JlKTsKLSAgaWYgKE1hdGhVdGlsOjpBbG1vc3RF
cXVhbHM8VG8+KGFmdGVyLCBiZWZvcmUpKSB7Ci0gICAgcmV0dXJuIGFmdGVyOwotICB9IGVsc2Ug
ewotICAgIHJldHVybiBJbnZhbGlkQXJndW1lbnQoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6aXNfc2FtZTxGcm9tLCBkb3VibGU+Ojp2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gRG91YmxlQXNTdHJpbmcoYmVmb3JlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogRmxvYXRBc1N0cmluZyhiZWZvcmUpKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3Bh
Y2UKLQotU3RhdHVzT3I8aW50MzI+IERhdGFQaWVjZTo6VG9JbnQzMigpIGNvbnN0IHsKLSAgaWYg
KHR5cGVfID09IFRZUEVfU1RSSU5HKSByZXR1cm4gU3RyaW5nVG9OdW1iZXI8aW50MzI+KHNhZmVf
c3RydG8zMik7Ci0KLSAgaWYgKHR5cGVfID09IFRZUEVfRE9VQkxFKQotICAgIHJldHVybiBGbG9h
dGluZ1BvaW50VG9JbnRDb252ZXJ0QW5kQ2hlY2s8aW50MzIsIGRvdWJsZT4oZG91YmxlXyk7Ci0K
LSAgaWYgKHR5cGVfID09IFRZUEVfRkxPQVQpCi0gICAgcmV0dXJuIEZsb2F0aW5nUG9pbnRUb0lu
dENvbnZlcnRBbmRDaGVjazxpbnQzMiwgZmxvYXQ+KGZsb2F0Xyk7Ci0KLSAgcmV0dXJuIEdlbmVy
aWNDb252ZXJ0PGludDMyPigpOwotfQotCi1TdGF0dXNPcjx1aW50MzI+IERhdGFQaWVjZTo6VG9V
aW50MzIoKSBjb25zdCB7Ci0gIGlmICh0eXBlXyA9PSBUWVBFX1NUUklORykgcmV0dXJuIFN0cmlu
Z1RvTnVtYmVyPHVpbnQzMj4oc2FmZV9zdHJ0b3UzMik7Ci0KLSAgaWYgKHR5cGVfID09IFRZUEVf
RE9VQkxFKQotICAgIHJldHVybiBGbG9hdGluZ1BvaW50VG9JbnRDb252ZXJ0QW5kQ2hlY2s8dWlu
dDMyLCBkb3VibGU+KGRvdWJsZV8pOwotCi0gIGlmICh0eXBlXyA9PSBUWVBFX0ZMT0FUKQotICAg
IHJldHVybiBGbG9hdGluZ1BvaW50VG9JbnRDb252ZXJ0QW5kQ2hlY2s8dWludDMyLCBmbG9hdD4o
ZmxvYXRfKTsKLQotICByZXR1cm4gR2VuZXJpY0NvbnZlcnQ8dWludDMyPigpOwotfQotCi1TdGF0
dXNPcjxpbnQ2ND4gRGF0YVBpZWNlOjpUb0ludDY0KCkgY29uc3QgewotICBpZiAodHlwZV8gPT0g
VFlQRV9TVFJJTkcpIHJldHVybiBTdHJpbmdUb051bWJlcjxpbnQ2ND4oc2FmZV9zdHJ0bzY0KTsK
LQotICBpZiAodHlwZV8gPT0gVFlQRV9ET1VCTEUpCi0gICAgcmV0dXJuIEZsb2F0aW5nUG9pbnRU
b0ludENvbnZlcnRBbmRDaGVjazxpbnQ2NCwgZG91YmxlPihkb3VibGVfKTsKLQotICBpZiAodHlw
ZV8gPT0gVFlQRV9GTE9BVCkKLSAgICByZXR1cm4gRmxvYXRpbmdQb2ludFRvSW50Q29udmVydEFu
ZENoZWNrPGludDY0LCBmbG9hdD4oZmxvYXRfKTsKLQotICByZXR1cm4gR2VuZXJpY0NvbnZlcnQ8
aW50NjQ+KCk7Ci19Ci0KLVN0YXR1c09yPHVpbnQ2ND4gRGF0YVBpZWNlOjpUb1VpbnQ2NCgpIGNv
bnN0IHsKLSAgaWYgKHR5cGVfID09IFRZUEVfU1RSSU5HKSByZXR1cm4gU3RyaW5nVG9OdW1iZXI8
dWludDY0PihzYWZlX3N0cnRvdTY0KTsKLQotICBpZiAodHlwZV8gPT0gVFlQRV9ET1VCTEUpCi0g
ICAgcmV0dXJuIEZsb2F0aW5nUG9pbnRUb0ludENvbnZlcnRBbmRDaGVjazx1aW50NjQsIGRvdWJs
ZT4oZG91YmxlXyk7Ci0KLSAgaWYgKHR5cGVfID09IFRZUEVfRkxPQVQpCi0gICAgcmV0dXJuIEZs
b2F0aW5nUG9pbnRUb0ludENvbnZlcnRBbmRDaGVjazx1aW50NjQsIGZsb2F0PihmbG9hdF8pOwot
Ci0gIHJldHVybiBHZW5lcmljQ29udmVydDx1aW50NjQ+KCk7Ci19Ci0KLVN0YXR1c09yPGRvdWJs
ZT4gRGF0YVBpZWNlOjpUb0RvdWJsZSgpIGNvbnN0IHsKLSAgaWYgKHR5cGVfID09IFRZUEVfRkxP
QVQpIHsKLSAgICByZXR1cm4gRmxvYXRpbmdQb2ludENvbnZlcnRBbmRDaGVjazxkb3VibGUsIGZs
b2F0PihmbG9hdF8pOwotICB9Ci0gIGlmICh0eXBlXyA9PSBUWVBFX1NUUklORykgewotICAgIGlm
IChzdHJfID09ICJJbmZpbml0eSIpIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OmluZmluaXR5KCk7Ci0gICAgaWYgKHN0cl8gPT0gIi1JbmZpbml0eSIpIHJldHVybiAtc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgIGlmIChzdHJfID09ICJOYU4i
KSByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBy
ZXR1cm4gU3RyaW5nVG9OdW1iZXI8ZG91YmxlPihzYWZlX3N0cnRvZCk7Ci0gIH0KLSAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0PGRvdWJsZT4oKTsKLX0KLQotU3RhdHVzT3I8ZmxvYXQ+IERhdGFQaWVj
ZTo6VG9GbG9hdCgpIGNvbnN0IHsKLSAgaWYgKHR5cGVfID09IFRZUEVfRE9VQkxFKSB7Ci0gICAg
cmV0dXJuIEZsb2F0aW5nUG9pbnRDb252ZXJ0QW5kQ2hlY2s8ZmxvYXQsIGRvdWJsZT4oZG91Ymxl
Xyk7Ci0gIH0KLSAgaWYgKHR5cGVfID09IFRZUEVfU1RSSU5HKSB7Ci0gICAgaWYgKHN0cl8gPT0g
IkluZmluaXR5IikgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgp
OwotICAgIGlmIChzdHJfID09ICItSW5maW5pdHkiKSByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjppbmZpbml0eSgpOwotICAgIGlmIChzdHJfID09ICJOYU4iKSByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgIC8vIFNhZmVTdHJUb0Zs
b2F0KCkgaXMgdXNlZCBpbnN0ZWFkIG9mIHNhZmVfc3RydG9mKCkgYmVjYXVzZSB0aGUgbGF0ZXIK
LSAgICAvLyBkb2VzIG5vdCBmYWlsIG9uIGlucHV0cyBsaWtlIFNpbXBsZUR0b2EoREJMX01BWCku
Ci0gICAgcmV0dXJuIFN0cmluZ1RvTnVtYmVyPGZsb2F0PihTYWZlU3RyVG9GbG9hdCk7Ci0gIH0K
LSAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0PGZsb2F0PigpOwotfQotCi1TdGF0dXNPcjxib29sPiBE
YXRhUGllY2U6OlRvQm9vbCgpIGNvbnN0IHsKLSAgc3dpdGNoICh0eXBlXykgewotICAgIGNhc2Ug
VFlQRV9CT09MOgotICAgICAgcmV0dXJuIGJvb2xfOwotICAgIGNhc2UgVFlQRV9TVFJJTkc6Ci0g
ICAgICByZXR1cm4gU3RyaW5nVG9OdW1iZXI8Ym9vbD4oc2FmZV9zdHJ0b2IpOwotICAgIGRlZmF1
bHQ6Ci0gICAgICByZXR1cm4gSW52YWxpZEFyZ3VtZW50KAotICAgICAgICAgIFZhbHVlQXNTdHJp
bmdPckRlZmF1bHQoIldyb25nIHR5cGUuIENhbm5vdCBjb252ZXJ0IHRvIEJvb2wuIikpOwotICB9
Ci19Ci0KLVN0YXR1c09yPHN0cmluZz4gRGF0YVBpZWNlOjpUb1N0cmluZygpIGNvbnN0IHsKLSAg
c3dpdGNoICh0eXBlXykgewotICAgIGNhc2UgVFlQRV9TVFJJTkc6Ci0gICAgICByZXR1cm4gc3Ry
Xy5Ub1N0cmluZygpOwotICAgIGNhc2UgVFlQRV9CWVRFUzogewotICAgICAgc3RyaW5nIGJhc2U2
NDsKLSAgICAgIEJhc2U2NEVzY2FwZShzdHJfLCAmYmFzZTY0KTsKLSAgICAgIHJldHVybiBiYXNl
NjQ7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gSW52YWxpZEFyZ3VtZW50KAot
ICAgICAgICAgIFZhbHVlQXNTdHJpbmdPckRlZmF1bHQoIkNhbm5vdCBjb252ZXJ0IHRvIHN0cmlu
Zy4iKSk7Ci0gIH0KLX0KLQotc3RyaW5nIERhdGFQaWVjZTo6VmFsdWVBc1N0cmluZ09yRGVmYXVs
dChTdHJpbmdQaWVjZSBkZWZhdWx0X3N0cmluZykgY29uc3QgewotICBzd2l0Y2ggKHR5cGVfKSB7
Ci0gICAgY2FzZSBUWVBFX0lOVDMyOgotICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoaTMyXyk7Ci0g
ICAgY2FzZSBUWVBFX0lOVDY0OgotICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoaTY0Xyk7Ci0gICAg
Y2FzZSBUWVBFX1VJTlQzMjoKLSAgICAgIHJldHVybiBTaW1wbGVJdG9hKHUzMl8pOwotICAgIGNh
c2UgVFlQRV9VSU5UNjQ6Ci0gICAgICByZXR1cm4gU2ltcGxlSXRvYSh1NjRfKTsKLSAgICBjYXNl
IFRZUEVfRE9VQkxFOgotICAgICAgcmV0dXJuIERvdWJsZUFzU3RyaW5nKGRvdWJsZV8pOwotICAg
IGNhc2UgVFlQRV9GTE9BVDoKLSAgICAgIHJldHVybiBGbG9hdEFzU3RyaW5nKGZsb2F0Xyk7Ci0g
ICAgY2FzZSBUWVBFX0JPT0w6Ci0gICAgICByZXR1cm4gU2ltcGxlQnRvYShib29sXyk7Ci0gICAg
Y2FzZSBUWVBFX1NUUklORzoKLSAgICAgIHJldHVybiBTdHJDYXQoIlwiIiwgc3RyXy5Ub1N0cmlu
ZygpLCAiXCIiKTsKLSAgICBjYXNlIFRZUEVfQllURVM6IHsKLSAgICAgIHN0cmluZyBiYXNlNjQ7
Ci0gICAgICBXZWJTYWZlQmFzZTY0RXNjYXBlKHN0cl8sICZiYXNlNjQpOwotICAgICAgcmV0dXJu
IFN0ckNhdCgiXCIiLCBiYXNlNjQsICJcIiIpOwotICAgIH0KLSAgICBjYXNlIFRZUEVfTlVMTDoK
LSAgICAgIHJldHVybiAibnVsbCI7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBkZWZhdWx0
X3N0cmluZy5Ub1N0cmluZygpOwotICB9Ci19Ci0KLVN0YXR1c09yPHN0cmluZz4gRGF0YVBpZWNl
OjpUb0J5dGVzKCkgY29uc3QgewotICBpZiAodHlwZV8gPT0gVFlQRV9CWVRFUykgcmV0dXJuIHN0
cl8uVG9TdHJpbmcoKTsKLSAgaWYgKHR5cGVfID09IFRZUEVfU1RSSU5HKSB7Ci0gICAgc3RyaW5n
IGRlY29kZWQ7Ci0gICAgaWYgKCFEZWNvZGVCYXNlNjQoc3RyXywgJmRlY29kZWQpKSB7Ci0gICAg
ICByZXR1cm4gSW52YWxpZEFyZ3VtZW50KFZhbHVlQXNTdHJpbmdPckRlZmF1bHQoIkludmFsaWQg
ZGF0YSBpbiBpbnB1dC4iKSk7Ci0gICAgfQotICAgIHJldHVybiBkZWNvZGVkOwotICB9IGVsc2Ug
ewotICAgIHJldHVybiBJbnZhbGlkQXJndW1lbnQoVmFsdWVBc1N0cmluZ09yRGVmYXVsdCgKLSAg
ICAgICAgIldyb25nIHR5cGUuIE9ubHkgU3RyaW5nIG9yIEJ5dGVzIGNhbiBiZSBjb252ZXJ0ZWQg
dG8gQnl0ZXMuIikpOwotICB9Ci19Ci0KLVN0YXR1c09yPGludD4gRGF0YVBpZWNlOjpUb0VudW0o
Y29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bSogZW51bV90eXBlKSBjb25zdCB7Ci0gIGlmICh0
eXBlXyA9PSBUWVBFX05VTEwpIHJldHVybiBnb29nbGU6OnByb3RvYnVmOjpOVUxMX1ZBTFVFOwot
Ci0gIGlmICh0eXBlXyA9PSBUWVBFX1NUUklORykgewotICAgIC8vIEZpcnN0IHRyeSB0aGUgZ2l2
ZW4gdmFsdWUgYXMgYSBuYW1lLgotICAgIHN0cmluZyBlbnVtX25hbWUgPSBzdHJfLlRvU3RyaW5n
KCk7Ci0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlKiB2YWx1ZSA9Ci0gICAg
ICAgIEZpbmRFbnVtVmFsdWVCeU5hbWVPck51bGwoZW51bV90eXBlLCBlbnVtX25hbWUpOwotICAg
IGlmICh2YWx1ZSAhPSBOVUxMKSByZXR1cm4gdmFsdWUtPm51bWJlcigpOwotICAgIC8vIE5leHQg
dHJ5IGEgbm9ybWFsaXplZCBuYW1lLgotICAgIGZvciAoc3RyaW5nOjppdGVyYXRvciBpdCA9IGVu
dW1fbmFtZS5iZWdpbigpOyBpdCAhPSBlbnVtX25hbWUuZW5kKCk7ICsraXQpIHsKLSAgICAgICpp
dCA9ICppdCA9PSAnLScgPyAnXycgOiBhc2NpaV90b3VwcGVyKCppdCk7Ci0gICAgfQotICAgIHZh
bHVlID0gRmluZEVudW1WYWx1ZUJ5TmFtZU9yTnVsbChlbnVtX3R5cGUsIGVudW1fbmFtZSk7Ci0g
ICAgaWYgKHZhbHVlICE9IE5VTEwpIHJldHVybiB2YWx1ZS0+bnVtYmVyKCk7Ci0gIH0gZWxzZSB7
Ci0gICAgU3RhdHVzT3I8aW50MzI+IHZhbHVlID0gVG9JbnQzMigpOwotICAgIGlmICh2YWx1ZS5v
aygpKSB7Ci0gICAgICBpZiAoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlKiBlbnVt
X3ZhbHVlID0KLSAgICAgICAgICAgICAgRmluZEVudW1WYWx1ZUJ5TnVtYmVyT3JOdWxsKGVudW1f
dHlwZSwgdmFsdWUuVmFsdWVPckRpZSgpKSkgewotICAgICAgICByZXR1cm4gZW51bV92YWx1ZS0+
bnVtYmVyKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBJbnZhbGlkQXJndW1lbnQo
Ci0gICAgICBWYWx1ZUFzU3RyaW5nT3JEZWZhdWx0KCJDYW5ub3QgZmluZCBlbnVtIHdpdGggZ2l2
ZW4gdmFsdWUuIikpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVG8+Ci1TdGF0dXNPcjxUbz4g
RGF0YVBpZWNlOjpHZW5lcmljQ29udmVydCgpIGNvbnN0IHsKLSAgc3dpdGNoICh0eXBlXykgewot
ICAgIGNhc2UgVFlQRV9JTlQzMjoKLSAgICAgIHJldHVybiBOdW1iZXJDb252ZXJ0QW5kQ2hlY2s8
VG8sIGludDMyPihpMzJfKTsKLSAgICBjYXNlIFRZUEVfSU5UNjQ6Ci0gICAgICByZXR1cm4gTnVt
YmVyQ29udmVydEFuZENoZWNrPFRvLCBpbnQ2ND4oaTY0Xyk7Ci0gICAgY2FzZSBUWVBFX1VJTlQz
MjoKLSAgICAgIHJldHVybiBOdW1iZXJDb252ZXJ0QW5kQ2hlY2s8VG8sIHVpbnQzMj4odTMyXyk7
Ci0gICAgY2FzZSBUWVBFX1VJTlQ2NDoKLSAgICAgIHJldHVybiBOdW1iZXJDb252ZXJ0QW5kQ2hl
Y2s8VG8sIHVpbnQ2ND4odTY0Xyk7Ci0gICAgY2FzZSBUWVBFX0RPVUJMRToKLSAgICAgIHJldHVy
biBOdW1iZXJDb252ZXJ0QW5kQ2hlY2s8VG8sIGRvdWJsZT4oZG91YmxlXyk7Ci0gICAgY2FzZSBU
WVBFX0ZMT0FUOgotICAgICAgcmV0dXJuIE51bWJlckNvbnZlcnRBbmRDaGVjazxUbywgZmxvYXQ+
KGZsb2F0Xyk7Ci0gICAgZGVmYXVsdDogIC8vIFRZUEVfRU5VTSwgVFlQRV9TVFJJTkcsIFRZUEVf
Q09SRCwgVFlQRV9CT09MCi0gICAgICByZXR1cm4gSW52YWxpZEFyZ3VtZW50KFZhbHVlQXNTdHJp
bmdPckRlZmF1bHQoCi0gICAgICAgICAgIldyb25nIHR5cGUuIEJvb2wsIEVudW0sIFN0cmluZyBh
bmQgQ29yZCBub3Qgc3VwcG9ydGVkIGluICIKLSAgICAgICAgICAiR2VuZXJpY0NvbnZlcnQuIikp
OwotICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUbz4KLVN0YXR1c09yPFRvPiBEYXRhUGll
Y2U6OlN0cmluZ1RvTnVtYmVyKGJvb2wgKCpmdW5jKShTdHJpbmdQaWVjZSwgVG8qKSkgY29uc3Qg
ewotICBpZiAoc3RyXy5zaXplKCkgPiAwICYmIChzdHJfWzBdID09ICcgJyB8fCBzdHJfW3N0cl8u
c2l6ZSgpIC0gMV0gPT0gJyAnKSkgewotICAgIHJldHVybiBJbnZhbGlkQXJndW1lbnQoU3RyQ2F0
KCJcIiIsIHN0cl8sICJcIiIpKTsKLSAgfQotICBUbyByZXN1bHQ7Ci0gIGlmIChmdW5jKHN0cl8s
ICZyZXN1bHQpKSByZXR1cm4gcmVzdWx0OwotICByZXR1cm4gSW52YWxpZEFyZ3VtZW50KFN0ckNh
dCgiXCIiLCBzdHJfLlRvU3RyaW5nKCksICJcIiIpKTsKLX0KLQotYm9vbCBEYXRhUGllY2U6OkRl
Y29kZUJhc2U2NChTdHJpbmdQaWVjZSBzcmMsIHN0cmluZyogZGVzdCkgY29uc3QgewotICAvLyBU
cnkgd2ViLXNhZmUgZGVjb2RlIGZpcnN0LCBpZiBpdCBmYWlscywgdHJ5IHRoZSBub24td2ViLXNh
ZmUgZGVjb2RlLgotICBpZiAoV2ViU2FmZUJhc2U2NFVuZXNjYXBlKHNyYywgZGVzdCkpIHsKLSAg
ICBpZiAodXNlX3N0cmljdF9iYXNlNjRfZGVjb2RpbmdfKSB7Ci0gICAgICAvLyBJbiBzdHJpY3Qg
bW9kZSwgY2hlY2sgaWYgdGhlIGVzY2FwZWQgdmVyc2lvbiBnaXZlcyB1cyB0aGUgc2FtZSB2YWx1
ZSBhcwotICAgICAgLy8gdW5lc2NhcGVkLgotICAgICAgc3RyaW5nIGVuY29kZWQ7Ci0gICAgICAv
LyBXZWJTYWZlQmFzZTY0RXNjYXBlIGRvZXMgbm8gcGFkZGluZyBieSBkZWZhdWx0LgotICAgICAg
V2ViU2FmZUJhc2U2NEVzY2FwZSgqZGVzdCwgJmVuY29kZWQpOwotICAgICAgLy8gUmVtb3ZlIHRy
YWlsaW5nIHBhZGRpbmcgJz0nIGNoYXJhY3RlcnMgYmVmb3JlIGNvbXBhcmlzb24uCi0gICAgICBT
dHJpbmdQaWVjZSBzcmNfbm9fcGFkZGluZyhzcmMsIDAsIHNyYy5lbmRzX3dpdGgoIj0iKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzcmMuZmluZF9sYXN0
X25vdF9vZignPScpICsgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBzcmMubGVuZ3RoKCkpOwotICAgICAgcmV0dXJuIGVuY29kZWQgPT0gc3JjX25vX3Bh
ZGRpbmc7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKEJhc2U2NFVuZXNj
YXBlKHNyYywgZGVzdCkpIHsKLSAgICBpZiAodXNlX3N0cmljdF9iYXNlNjRfZGVjb2RpbmdfKSB7
Ci0gICAgICBzdHJpbmcgZW5jb2RlZDsKLSAgICAgIEJhc2U2NEVzY2FwZSgKLSAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkZXN0LT5kYXRhKCkpLCBkZXN0
LT5sZW5ndGgoKSwKLSAgICAgICAgICAmZW5jb2RlZCwgZmFsc2UpOwotICAgICAgU3RyaW5nUGll
Y2Ugc3JjX25vX3BhZGRpbmcoc3JjLCAwLCBzcmMuZW5kc193aXRoKCI9IikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc3JjLmZpbmRfbGFzdF9ub3Rfb2Yo
Jz0nKSArIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
c3JjLmxlbmd0aCgpKTsKLSAgICAgIHJldHVybiBlbmNvZGVkID09IHNyY19ub19wYWRkaW5nOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHJldHVybiBmYWxzZTsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIGNvbnZlcnRlcgotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGF0YXBpZWNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdXRpbC9pbnRlcm5hbC9kYXRhcGllY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGIyZTM1ZDNhZGM1MDc3NmM3YTYzMzkyY2Q1YWQzZDA0ZDMyZmE0Ny4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC9kYXRhcGllY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0v
LyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9C
VUZfVVRJTF9DT05WRVJURVJfREFUQVBJRUNFX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZf
VVRJTF9DT05WRVJURVJfREFUQVBJRUNFX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi9zdHVicy9zdHJpbmdwaWVjZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdGF0dXNvci5oPgotCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3Rv
YnVmIHsKLWNsYXNzIEVudW07Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotCi1uYW1lc3Bh
Y2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwgewotbmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0K
LS8vIENvbnRhaW5lciBmb3IgYSBzaW5nbGUgcGllY2Ugb2YgZGF0YSB0b2dldGhlciB3aXRoIGl0
cyBkYXRhIHR5cGUuCi0vLwotLy8gRm9yIHByaW1pdGl2ZSB0eXBlcyAoaW50MzIsIGludDY0LCB1
aW50MzIsIHVpbnQ2NCwgZG91YmxlLCBmbG9hdCwgYm9vbCksCi0vLyB0aGUgZGF0YSBpcyBzdG9y
ZWQgYnkgdmFsdWUuCi0vLwotLy8gRm9yIHN0cmluZywgYSBTdHJpbmdQaWVjZSBpcyBzdG9yZWQu
IEZvciBDb3JkLCBhIHBvaW50ZXIgdG8gQ29yZCBpcyBzdG9yZWQuCi0vLyBKdXN0IGxpa2UgU3Ry
aW5nUGllY2UsIHRoZSBEYXRhUGllY2UgY2xhc3MgZG9lcyBub3Qgb3duIHRoZSBzdG9yYWdlIGZv
cgotLy8gdGhlIGFjdHVhbCBzdHJpbmcgb3IgQ29yZCwgc28gaXQgaXMgdGhlIHVzZXIncyByZXNw
b25zaWJsaXR5IHRvIGd1YXJhbnRlZQotLy8gdGhhdCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGlz
IHN0aWxsIHZhbGlkIHdoZW4gdGhlIERhdGFQaWVjZSBpcyBhY2Nlc3NlZC4KLWNsYXNzIExJQlBS
T1RPQlVGX0VYUE9SVCBEYXRhUGllY2UgewotIHB1YmxpYzoKLSAgLy8gSWRlbnRpZmllcyBkYXRh
IHR5cGUgb2YgdGhlIHZhbHVlLgotICAvLyBUaGVzZSBhcmUgdGhlIHR5cGVzIHN1cHBvcnRlZCBi
eSBEYXRhUGllY2UuCi0gIGVudW0gVHlwZSB7Ci0gICAgVFlQRV9JTlQzMiA9IDEsCi0gICAgVFlQ
RV9JTlQ2NCA9IDIsCi0gICAgVFlQRV9VSU5UMzIgPSAzLAotICAgIFRZUEVfVUlOVDY0ID0gNCwK
LSAgICBUWVBFX0RPVUJMRSA9IDUsCi0gICAgVFlQRV9GTE9BVCA9IDYsCi0gICAgVFlQRV9CT09M
ID0gNywKLSAgICBUWVBFX0VOVU0gPSA4LAotICAgIFRZUEVfU1RSSU5HID0gOSwKLSAgICBUWVBF
X0JZVEVTID0gMTAsCi0gICAgVFlQRV9OVUxMID0gMTEsICAvLyBleHBsaWNpdCBOVUxMIHR5cGUK
LSAgfTsKLQotICAvLyBDb25zdHJ1Y3RvcnMgYW5kIERlc3RydWN0b3IKLSAgZXhwbGljaXQgRGF0
YVBpZWNlKGNvbnN0IGludDMyIHZhbHVlKSA6IHR5cGVfKFRZUEVfSU5UMzIpLCBpMzJfKHZhbHVl
KSB7fQotICBleHBsaWNpdCBEYXRhUGllY2UoY29uc3QgaW50NjQgdmFsdWUpIDogdHlwZV8oVFlQ
RV9JTlQ2NCksIGk2NF8odmFsdWUpIHt9Ci0gIGV4cGxpY2l0IERhdGFQaWVjZShjb25zdCB1aW50
MzIgdmFsdWUpIDogdHlwZV8oVFlQRV9VSU5UMzIpLCB1MzJfKHZhbHVlKSB7fQotICBleHBsaWNp
dCBEYXRhUGllY2UoY29uc3QgdWludDY0IHZhbHVlKSA6IHR5cGVfKFRZUEVfVUlOVDY0KSwgdTY0
Xyh2YWx1ZSkge30KLSAgZXhwbGljaXQgRGF0YVBpZWNlKGNvbnN0IGRvdWJsZSB2YWx1ZSkgOiB0
eXBlXyhUWVBFX0RPVUJMRSksIGRvdWJsZV8odmFsdWUpIHt9Ci0gIGV4cGxpY2l0IERhdGFQaWVj
ZShjb25zdCBmbG9hdCB2YWx1ZSkgOiB0eXBlXyhUWVBFX0ZMT0FUKSwgZmxvYXRfKHZhbHVlKSB7
fQotICBleHBsaWNpdCBEYXRhUGllY2UoY29uc3QgYm9vbCB2YWx1ZSkgOiB0eXBlXyhUWVBFX0JP
T0wpLCBib29sXyh2YWx1ZSkge30KLSAgRGF0YVBpZWNlKFN0cmluZ1BpZWNlIHZhbHVlLCBib29s
IHVzZV9zdHJpY3RfYmFzZTY0X2RlY29kaW5nKQotICAgICAgOiB0eXBlXyhUWVBFX1NUUklORyks
Ci0gICAgICAgIHN0cl8oU3RyaW5nUGllY2VQb2Q6OkNyZWF0ZUZyb21TdHJpbmdQaWVjZSh2YWx1
ZSkpLAotICAgICAgICB1c2Vfc3RyaWN0X2Jhc2U2NF9kZWNvZGluZ18odXNlX3N0cmljdF9iYXNl
NjRfZGVjb2RpbmcpIHt9Ci0gIC8vIENvbnN0cnVjdG9yIGZvciBieXRlcy4gVGhlIHNlY29uZCBw
YXJhbWV0ZXIgaXMgbm90IHVzZWQuCi0gIERhdGFQaWVjZShTdHJpbmdQaWVjZSB2YWx1ZSwgYm9v
bCBkdW1teSwgYm9vbCB1c2Vfc3RyaWN0X2Jhc2U2NF9kZWNvZGluZykKLSAgICAgIDogdHlwZV8o
VFlQRV9CWVRFUyksCi0gICAgICAgIHN0cl8oU3RyaW5nUGllY2VQb2Q6OkNyZWF0ZUZyb21TdHJp
bmdQaWVjZSh2YWx1ZSkpLAotICAgICAgICB1c2Vfc3RyaWN0X2Jhc2U2NF9kZWNvZGluZ18odXNl
X3N0cmljdF9iYXNlNjRfZGVjb2RpbmcpIHt9Ci0gIERhdGFQaWVjZShjb25zdCBEYXRhUGllY2Um
IHIpIDogdHlwZV8oci50eXBlXyksIHN0cl8oci5zdHJfKSB7fQotICBEYXRhUGllY2UmIG9wZXJh
dG9yPShjb25zdCBEYXRhUGllY2UmIHgpIHsKLSAgICB0eXBlXyA9IHgudHlwZV87Ci0gICAgc3Ry
XyA9IHguc3RyXzsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBzdGF0aWMgRGF0YVBpZWNl
IE51bGxEYXRhKCkgeyByZXR1cm4gRGF0YVBpZWNlKFRZUEVfTlVMTCwgMCk7IH0KLQotICB2aXJ0
dWFsIH5EYXRhUGllY2UoKSB7Ci0gIH0KLQotICAvLyBBY2Nlc3NvcnMKLSAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gdHlwZV87IH0KLQotICBTdHJpbmdQaWVjZSBzdHIoKSBjb25zdCB7Ci0g
ICAgR09PR0xFX0xPR19JRihERkFUQUwsIHR5cGVfICE9IFRZUEVfU1RSSU5HKSA8PCAiTm90IGEg
c3RyaW5nIHR5cGUuIjsKLSAgICByZXR1cm4gc3RyXzsKLSAgfQotCi0KLSAgLy8gUGFyc2VzLCBj
YXN0cyBvciBjb252ZXJ0cyB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBEYXRhUGllY2UgaW50byBh
biBpbnQzMi4KLSAgdXRpbDo6U3RhdHVzT3I8aW50MzI+IFRvSW50MzIoKSBjb25zdDsKLQotICAv
LyBQYXJzZXMsIGNhc3RzIG9yIGNvbnZlcnRzIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIERhdGFQ
aWVjZSBpbnRvIGEgdWludDMyLgotICB1dGlsOjpTdGF0dXNPcjx1aW50MzI+IFRvVWludDMyKCkg
Y29uc3Q7Ci0KLSAgLy8gUGFyc2VzLCBjYXN0cyBvciBjb252ZXJ0cyB0aGUgdmFsdWUgc3RvcmVk
IGluIHRoZSBEYXRhUGllY2UgaW50byBhbiBpbnQ2NC4KLSAgdXRpbDo6U3RhdHVzT3I8aW50NjQ+
IFRvSW50NjQoKSBjb25zdDsKLQotICAvLyBQYXJzZXMsIGNhc3RzIG9yIGNvbnZlcnRzIHRoZSB2
YWx1ZSBzdG9yZWQgaW4gdGhlIERhdGFQaWVjZSBpbnRvIGEgdWludDY0LgotICB1dGlsOjpTdGF0
dXNPcjx1aW50NjQ+IFRvVWludDY0KCkgY29uc3Q7Ci0KLSAgLy8gUGFyc2VzLCBjYXN0cyBvciBj
b252ZXJ0cyB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBEYXRhUGllY2UgaW50byBhIGRvdWJsZS4K
LSAgdXRpbDo6U3RhdHVzT3I8ZG91YmxlPiBUb0RvdWJsZSgpIGNvbnN0OwotCi0gIC8vIFBhcnNl
cywgY2FzdHMgb3IgY29udmVydHMgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgRGF0YVBpZWNlIGlu
dG8gYSBmbG9hdC4KLSAgdXRpbDo6U3RhdHVzT3I8ZmxvYXQ+IFRvRmxvYXQoKSBjb25zdDsKLQot
ICAvLyBQYXJzZXMsIGNhc3RzIG9yIGNvbnZlcnRzIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIERh
dGFQaWVjZSBpbnRvIGEgYm9vbC4KLSAgdXRpbDo6U3RhdHVzT3I8Ym9vbD4gVG9Cb29sKCkgY29u
c3Q7Ci0KLSAgLy8gUGFyc2VzLCBjYXN0cyBvciBjb252ZXJ0cyB0aGUgdmFsdWUgc3RvcmVkIGlu
IHRoZSBEYXRhUGllY2UgaW50byBhIHN0cmluZy4KLSAgdXRpbDo6U3RhdHVzT3I8c3RyaW5nPiBU
b1N0cmluZygpIGNvbnN0OwotCi0gIC8vIFRyaWVzIHRvIGNvbnZlcnQgdGhlIHZhbHVlIGNvbnRh
aW5lZCBpbiB0aGlzIGRhdGFwaWVjZSB0byBzdHJpbmcuIElmIHRoZQotICAvLyBjb252ZXJzaW9u
IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBkZWZhdWx0X3N0cmluZy4KLSAgc3RyaW5nIFZhbHVlQXNT
dHJpbmdPckRlZmF1bHQoU3RyaW5nUGllY2UgZGVmYXVsdF9zdHJpbmcpIGNvbnN0OwotCi0gIHV0
aWw6OlN0YXR1c09yPHN0cmluZz4gVG9CeXRlcygpIGNvbnN0OwotCi0gIC8vIENvbnZlcnRzIGEg
dmFsdWUgaW50byBwcm90b2NvbCBidWZmZXIgZW51bSBudW1iZXIuIElmIHRoZSB2YWx1ZSBpcyBh
Ci0gIC8vIHN0cmluZywgZmlyc3QgYXR0ZW1wdHMgY29udmVyc2lvbiBieSBuYW1lLCB0cnlpbmcg
bmFtZXMgYXMgZm9sbG93czoKLSAgLy8gICAxKSB0aGUgZGlyZWN0bHkgcHJvdmlkZWQgc3RyaW5n
IHZhbHVlLgotICAvLyAgIDIpIHRoZSB2YWx1ZSB1cHBlci1jYXNlZCBhbmQgcmVwbGFjaW5nICct
JyBieSAnXycKLSAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhIHN0cmluZywgYXR0ZW1wdHMgdG8g
Y29udmVydCB0byBhIDMyLWJpdCBpbnRlZ2VyLgotICAvLyBJZiBub25lIG9mIHRoZXNlIHN1Y2Nl
ZWRzLCByZXR1cm5zIGEgY29udmVyc2lvbiBlcnJvciBzdGF0dXMuCi0gIHV0aWw6OlN0YXR1c09y
PGludD4gVG9FbnVtKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkVudW0qIGVudW1fdHlwZSkgY29u
c3Q7Ci0KLSBwcml2YXRlOgotICAvLyBEaXNhbGxvdyBpbXBsaWNpdCBjb25zdHJ1Y3Rvci4KLSAg
RGF0YVBpZWNlKCk7Ci0KLSAgLy8gSGVscGVyIHRvIGNyZWF0ZSBOVUxMIG9yIEVOVU0gdHlwZXMu
Ci0gIERhdGFQaWVjZShUeXBlIHR5cGUsIGludDMyIHZhbCkgOiB0eXBlXyh0eXBlKSwgaTMyXyh2
YWwpIHt9Ci0KLSAgLy8gRm9yIG51bWVyaWMgY29udmVyc2lvbiBiZXR3ZWVuCi0gIC8vICAgICBp
bnQzMiwgaW50NjQsIHVpbnQzMiwgdWludDY0LCBkb3VibGUsIGZsb2F0IGFuZCBib29sCi0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBUbz4KLSAgdXRpbDo6U3RhdHVzT3I8VG8+IEdlbmVyaWNDb252ZXJ0
KCkgY29uc3Q7Ci0KLSAgLy8gRm9yIGNvbnZlcnNpb24gZnJvbSBzdHJpbmcgdG8KLSAgLy8gICAg
IGludDMyLCBpbnQ2NCwgdWludDMyLCB1aW50NjQsIGRvdWJsZSwgZmxvYXQgYW5kIGJvb2wKLSAg
dGVtcGxhdGUgPHR5cGVuYW1lIFRvPgotICB1dGlsOjpTdGF0dXNPcjxUbz4gU3RyaW5nVG9OdW1i
ZXIoYm9vbCAoKmZ1bmMpKFN0cmluZ1BpZWNlLCBUbyopKSBjb25zdDsKLQotICAvLyBEZWNvZGVz
IGEgYmFzZTY0IHN0cmluZy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCi0gIGJvb2wgRGVjb2Rl
QmFzZTY0KFN0cmluZ1BpZWNlIHNyYywgc3RyaW5nKiBkZXN0KSBjb25zdDsKLQotICAvLyBEYXRh
IHR5cGUgZm9yIHRoaXMgcGllY2Ugb2YgZGF0YS4KLSAgVHlwZSB0eXBlXzsKLQotICB0eXBlZGVm
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlN0cmluZ1BpZWNlUG9kIFN0cmluZ1BpZWNl
UG9kOwotCi0gIC8vIFN0b3JlZCBwaWVjZSBvZiBkYXRhLgotICB1bmlvbiB7Ci0gICAgaW50MzIg
aTMyXzsKLSAgICBpbnQ2NCBpNjRfOwotICAgIHVpbnQzMiB1MzJfOwotICAgIHVpbnQ2NCB1NjRf
OwotICAgIGRvdWJsZSBkb3VibGVfOwotICAgIGZsb2F0IGZsb2F0XzsKLSAgICBib29sIGJvb2xf
OwotICAgIFN0cmluZ1BpZWNlUG9kIHN0cl87Ci0gIH07Ci0KLSAgLy8gVXNlcyBhIHN0cmljdGVy
IHZlcnNpb24gb2YgYmFzZTY0IGRlY29kaW5nIGZvciBieXRlIGZpZWxkcy4KLSAgYm9vbCB1c2Vf
c3RyaWN0X2Jhc2U2NF9kZWNvZGluZ187Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVy
Ci19ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVS
VEVSX0RBVEFQSUVDRV9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2lu
dGVybmFsL2RlZmF1bHRfdmFsdWVfb2JqZWN0d3JpdGVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmplY3R3cml0ZXIuY2MKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDIxZDdhMmU0YWI5NGRhMGI0ZTgxM2Y4MTQ1MTEyNTBjYTQ0MGNi
ZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmplY3R3cml0ZXIuY2MK
KysrIC9kZXYvbnVsbApAQCAtMSw1OTEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9kZWZh
dWx0X3ZhbHVlX29iamVjdHdyaXRlci5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2hhc2guaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2Nv
bnN0YW50cy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3V0aWxp
dHkuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwuaD4KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwgewot
dXNpbmcgdXRpbDo6U3RhdHVzOwotdXNpbmcgdXRpbDo6U3RhdHVzT3I7Ci1uYW1lc3BhY2UgY29u
dmVydGVyIHsKLQotbmFtZXNwYWNlIHsKLS8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IHN0
cmluZyB2YWx1ZSB0byBnaXZlbiBkYXRhIHR5cGUgYnkgY2FsbGluZyB0aGUKLS8vIHBhc3NlZCBj
b252ZXJ0ZXIgZnVuY3Rpb24gb24gdGhlIERhdGFQaWVjZSBjcmVhdGVkIGZyb20gInZhbHVlIiBh
cmd1bWVudC4KLS8vIElmIHZhbHVlIGlzIGVtcHR5IG9yIGlmIGNvbnZlcnNpb24gZmFpbHMsIHRo
ZSBkZWZhdWx0X3ZhbHVlIGlzIHJldHVybmVkLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1UIENv
bnZlcnRUbyhTdHJpbmdQaWVjZSB2YWx1ZSwgU3RhdHVzT3I8VD4gKERhdGFQaWVjZTo6KmNvbnZl
cnRlcl9mbikoKSBjb25zdCwKLSAgICAgICAgICAgIFQgZGVmYXVsdF92YWx1ZSkgewotICBpZiAo
dmFsdWUuZW1wdHkoKSkgcmV0dXJuIGRlZmF1bHRfdmFsdWU7Ci0gIFN0YXR1c09yPFQ+IHJlc3Vs
dCA9IChEYXRhUGllY2UodmFsdWUsIHRydWUpLipjb252ZXJ0ZXJfZm4pKCk7Ci0gIHJldHVybiBy
ZXN1bHQub2soKSA/IHJlc3VsdC5WYWx1ZU9yRGllKCkgOiBkZWZhdWx0X3ZhbHVlOwotfQotfSAg
Ly8gbmFtZXNwYWNlCi0KLURlZmF1bHRWYWx1ZU9iamVjdFdyaXRlcjo6RGVmYXVsdFZhbHVlT2Jq
ZWN0V3JpdGVyKAotICAgIFR5cGVSZXNvbHZlciogdHlwZV9yZXNvbHZlciwgY29uc3QgZ29vZ2xl
Ojpwcm90b2J1Zjo6VHlwZSYgdHlwZSwKLSAgICBPYmplY3RXcml0ZXIqIG93KQotICAgIDogdHlw
ZWluZm9fKFR5cGVJbmZvOjpOZXdUeXBlSW5mbyh0eXBlX3Jlc29sdmVyKSksCi0gICAgICBvd25f
dHlwZWluZm9fKHRydWUpLAotICAgICAgdHlwZV8odHlwZSksCi0gICAgICBjdXJyZW50XyhOVUxM
KSwKLSAgICAgIHJvb3RfKE5VTEwpLAotICAgICAgZmllbGRfc2NydWJfY2FsbGJhY2tfKE5VTEwp
LAotICAgICAgb3dfKG93KSB7fQotCi1EZWZhdWx0VmFsdWVPYmplY3RXcml0ZXI6On5EZWZhdWx0
VmFsdWVPYmplY3RXcml0ZXIoKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nX3ZhbHVl
c18uc2l6ZSgpOyArK2kpIHsKLSAgICBkZWxldGUgc3RyaW5nX3ZhbHVlc19baV07Ci0gIH0KLSAg
aWYgKG93bl90eXBlaW5mb18pIHsKLSAgICBkZWxldGUgdHlwZWluZm9fOwotICB9Ci19Ci0KLURl
ZmF1bHRWYWx1ZU9iamVjdFdyaXRlciogRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyOjpSZW5kZXJC
b29sKFN0cmluZ1BpZWNlIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHZhbHVlKSB7Ci0gIGlmIChjdXJyZW50
XyA9PSBOVUxMKSB7Ci0gICAgb3dfLT5SZW5kZXJCb29sKG5hbWUsIHZhbHVlKTsKLSAgfSBlbHNl
IHsKLSAgICBSZW5kZXJEYXRhUGllY2UobmFtZSwgRGF0YVBpZWNlKHZhbHVlKSk7Ci0gIH0KLSAg
cmV0dXJuIHRoaXM7Ci19Ci0KLURlZmF1bHRWYWx1ZU9iamVjdFdyaXRlciogRGVmYXVsdFZhbHVl
T2JqZWN0V3JpdGVyOjpSZW5kZXJJbnQzMigKLSAgICBTdHJpbmdQaWVjZSBuYW1lLCBpbnQzMiB2
YWx1ZSkgewotICBpZiAoY3VycmVudF8gPT0gTlVMTCkgewotICAgIG93Xy0+UmVuZGVySW50MzIo
bmFtZSwgdmFsdWUpOwotICB9IGVsc2UgewotICAgIFJlbmRlckRhdGFQaWVjZShuYW1lLCBEYXRh
UGllY2UodmFsdWUpKTsKLSAgfQotICByZXR1cm4gdGhpczsKLX0KLQotRGVmYXVsdFZhbHVlT2Jq
ZWN0V3JpdGVyKiBEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXI6OlJlbmRlclVpbnQzMigKLSAgICBT
dHJpbmdQaWVjZSBuYW1lLCB1aW50MzIgdmFsdWUpIHsKLSAgaWYgKGN1cnJlbnRfID09IE5VTEwp
IHsKLSAgICBvd18tPlJlbmRlclVpbnQzMihuYW1lLCB2YWx1ZSk7Ci0gIH0gZWxzZSB7Ci0gICAg
UmVuZGVyRGF0YVBpZWNlKG5hbWUsIERhdGFQaWVjZSh2YWx1ZSkpOwotICB9Ci0gIHJldHVybiB0
aGlzOwotfQotCi1EZWZhdWx0VmFsdWVPYmplY3RXcml0ZXIqIERlZmF1bHRWYWx1ZU9iamVjdFdy
aXRlcjo6UmVuZGVySW50NjQoCi0gICAgU3RyaW5nUGllY2UgbmFtZSwgaW50NjQgdmFsdWUpIHsK
LSAgaWYgKGN1cnJlbnRfID09IE5VTEwpIHsKLSAgICBvd18tPlJlbmRlckludDY0KG5hbWUsIHZh
bHVlKTsKLSAgfSBlbHNlIHsKLSAgICBSZW5kZXJEYXRhUGllY2UobmFtZSwgRGF0YVBpZWNlKHZh
bHVlKSk7Ci0gIH0KLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLURlZmF1bHRWYWx1ZU9iamVjdFdyaXRl
ciogRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyOjpSZW5kZXJVaW50NjQoCi0gICAgU3RyaW5nUGll
Y2UgbmFtZSwgdWludDY0IHZhbHVlKSB7Ci0gIGlmIChjdXJyZW50XyA9PSBOVUxMKSB7Ci0gICAg
b3dfLT5SZW5kZXJVaW50NjQobmFtZSwgdmFsdWUpOwotICB9IGVsc2UgewotICAgIFJlbmRlckRh
dGFQaWVjZShuYW1lLCBEYXRhUGllY2UodmFsdWUpKTsKLSAgfQotICByZXR1cm4gdGhpczsKLX0K
LQotRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyKiBEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXI6OlJl
bmRlckRvdWJsZSgKLSAgICBTdHJpbmdQaWVjZSBuYW1lLCBkb3VibGUgdmFsdWUpIHsKLSAgaWYg
KGN1cnJlbnRfID09IE5VTEwpIHsKLSAgICBvd18tPlJlbmRlckRvdWJsZShuYW1lLCB2YWx1ZSk7
Ci0gIH0gZWxzZSB7Ci0gICAgUmVuZGVyRGF0YVBpZWNlKG5hbWUsIERhdGFQaWVjZSh2YWx1ZSkp
OwotICB9Ci0gIHJldHVybiB0aGlzOwotfQotCi1EZWZhdWx0VmFsdWVPYmplY3RXcml0ZXIqIERl
ZmF1bHRWYWx1ZU9iamVjdFdyaXRlcjo6UmVuZGVyRmxvYXQoCi0gICAgU3RyaW5nUGllY2UgbmFt
ZSwgZmxvYXQgdmFsdWUpIHsKLSAgaWYgKGN1cnJlbnRfID09IE5VTEwpIHsKLSAgICBvd18tPlJl
bmRlckJvb2wobmFtZSwgdmFsdWUpOwotICB9IGVsc2UgewotICAgIFJlbmRlckRhdGFQaWVjZShu
YW1lLCBEYXRhUGllY2UodmFsdWUpKTsKLSAgfQotICByZXR1cm4gdGhpczsKLX0KLQotRGVmYXVs
dFZhbHVlT2JqZWN0V3JpdGVyKiBEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXI6OlJlbmRlclN0cmlu
ZygKLSAgICBTdHJpbmdQaWVjZSBuYW1lLCBTdHJpbmdQaWVjZSB2YWx1ZSkgewotICBpZiAoY3Vy
cmVudF8gPT0gTlVMTCkgewotICAgIG93Xy0+UmVuZGVyU3RyaW5nKG5hbWUsIHZhbHVlKTsKLSAg
fSBlbHNlIHsKLSAgICAvLyBTaW5jZSBTdHJpbmdQaWVjZSBpcyBlc3NlbnRpYWxseSBhIHBvaW50
ZXIsIHRha2VzIGEgY29weSBvZiAidmFsdWUiIHRvCi0gICAgLy8gYXZvaWQgb3duZXJzaGlwIGlz
c3Vlcy4KLSAgICBzdHJpbmdfdmFsdWVzXy5wdXNoX2JhY2sobmV3IHN0cmluZyh2YWx1ZS5Ub1N0
cmluZygpKSk7Ci0gICAgUmVuZGVyRGF0YVBpZWNlKG5hbWUsIERhdGFQaWVjZSgqc3RyaW5nX3Zh
bHVlc18uYmFjaygpLCB0cnVlKSk7Ci0gIH0KLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLURlZmF1bHRW
YWx1ZU9iamVjdFdyaXRlciogRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyOjpSZW5kZXJCeXRlcygK
LSAgICBTdHJpbmdQaWVjZSBuYW1lLCBTdHJpbmdQaWVjZSB2YWx1ZSkgewotICBpZiAoY3VycmVu
dF8gPT0gTlVMTCkgewotICAgIG93Xy0+UmVuZGVyQnl0ZXMobmFtZSwgdmFsdWUpOwotICB9IGVs
c2UgewotICAgIFJlbmRlckRhdGFQaWVjZShuYW1lLCBEYXRhUGllY2UodmFsdWUsIGZhbHNlLCB0
cnVlKSk7Ci0gIH0KLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLURlZmF1bHRWYWx1ZU9iamVjdFdyaXRl
ciogRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyOjpSZW5kZXJOdWxsKAotICAgIFN0cmluZ1BpZWNl
IG5hbWUpIHsKLSAgaWYgKGN1cnJlbnRfID09IE5VTEwpIHsKLSAgICBvd18tPlJlbmRlck51bGwo
bmFtZSk7Ci0gIH0gZWxzZSB7Ci0gICAgUmVuZGVyRGF0YVBpZWNlKG5hbWUsIERhdGFQaWVjZTo6
TnVsbERhdGEoKSk7Ci0gIH0KLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLXZvaWQgRGVmYXVsdFZhbHVl
T2JqZWN0V3JpdGVyOjpSZWdpc3RlckZpZWxkU2NydWJDYWxsQmFjaygKLSAgICBGaWVsZFNjcnVi
Q2FsbEJhY2tQdHIgZmllbGRfc2NydWJfY2FsbGJhY2spIHsKLSAgZmllbGRfc2NydWJfY2FsbGJh
Y2tfLnJlc2V0KGZpZWxkX3NjcnViX2NhbGxiYWNrLnJlbGVhc2UoKSk7Ci19Ci0KLURlZmF1bHRW
YWx1ZU9iamVjdFdyaXRlcjo6Tm9kZTo6Tm9kZShjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlw
ZSogdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlS2luZCBr
aW5kLCBjb25zdCBEYXRhUGllY2UmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpc19wbGFjZWhvbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2ZWN0b3I8c3RyaW5nPiYgcGF0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGaWVsZFNjcnViQ2FsbEJhY2sqIGZpZWxkX3NjcnViX2NhbGxi
YWNrKQotICAgIDogbmFtZV8obmFtZSksCi0gICAgICB0eXBlXyh0eXBlKSwKLSAgICAgIGtpbmRf
KGtpbmQpLAotICAgICAgaXNfYW55XyhmYWxzZSksCi0gICAgICBkYXRhXyhkYXRhKSwKLSAgICAg
IGlzX3BsYWNlaG9sZGVyXyhpc19wbGFjZWhvbGRlciksCi0gICAgICBwYXRoXyhwYXRoKSwKLSAg
ICAgIGZpZWxkX3NjcnViX2NhbGxiYWNrXyhmaWVsZF9zY3J1Yl9jYWxsYmFjaykge30KLQotRGVm
YXVsdFZhbHVlT2JqZWN0V3JpdGVyOjpOb2RlKiBEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXI6Ok5v
ZGU6OkZpbmRDaGlsZCgKLSAgICBTdHJpbmdQaWVjZSBuYW1lKSB7Ci0gIGlmIChuYW1lLmVtcHR5
KCkgfHwga2luZF8gIT0gT0JKRUNUKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjaGlsZHJlbl8uc2l6ZSgpOyArK2kpIHsKLSAgICBOb2RlKiBjaGlsZCA9
IGNoaWxkcmVuX1tpXTsKLSAgICBpZiAoY2hpbGQtPm5hbWUoKSA9PSBuYW1lKSB7Ci0gICAgICBy
ZXR1cm4gY2hpbGQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi12b2lkIERlZmF1
bHRWYWx1ZU9iamVjdFdyaXRlcjo6Tm9kZTo6V3JpdGVUbyhPYmplY3RXcml0ZXIqIG93KSB7Ci0g
IGlmIChraW5kXyA9PSBQUklNSVRJVkUpIHsKLSAgICBPYmplY3RXcml0ZXI6OlJlbmRlckRhdGFQ
aWVjZVRvKGRhdGFfLCBuYW1lXywgb3cpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIFJlbmRl
ciBtYXBzLiBFbXB0eSBtYXBzIGFyZSByZW5kZXJlZCBhcyAie30iLgotICBpZiAoa2luZF8gPT0g
TUFQKSB7Ci0gICAgb3ctPlN0YXJ0T2JqZWN0KG5hbWVfKTsKLSAgICBXcml0ZUNoaWxkcmVuKG93
KTsKLSAgICBvdy0+RW5kT2JqZWN0KCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gV3JpdGUg
b3V0IGxpc3RzLiBJZiB3ZSBkaWRuJ3QgaGF2ZSBhbnkgbGlzdCBpbiByZXNwb25zZSwgd3JpdGUg
b3V0IGVtcHR5Ci0gIC8vIGxpc3QuCi0gIGlmIChraW5kXyA9PSBMSVNUKSB7Ci0gICAgb3ctPlN0
YXJ0TGlzdChuYW1lXyk7Ci0gICAgV3JpdGVDaGlsZHJlbihvdyk7Ci0gICAgb3ctPkVuZExpc3Qo
KTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBJZiBpc19wbGFjZWhvbGRlcl8gPSB0cnVlLCB3
ZSBkaWRuJ3Qgc2VlIHRoaXMgbm9kZSBpbiB0aGUgcmVzcG9uc2UsIHNvCi0gIC8vIHNraXAgb3V0
cHV0LgotICBpZiAoaXNfcGxhY2Vob2xkZXJfKSByZXR1cm47Ci0KLSAgb3ctPlN0YXJ0T2JqZWN0
KG5hbWVfKTsKLSAgV3JpdGVDaGlsZHJlbihvdyk7Ci0gIG93LT5FbmRPYmplY3QoKTsKLX0KLQot
dm9pZCBEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXI6Ok5vZGU6OldyaXRlQ2hpbGRyZW4oT2JqZWN0
V3JpdGVyKiBvdykgewotICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuXy5zaXplKCk7ICsr
aSkgewotICAgIE5vZGUqIGNoaWxkID0gY2hpbGRyZW5fW2ldOwotICAgIGNoaWxkLT5Xcml0ZVRv
KG93KTsKLSAgfQotfQotCi1jb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKiBEZWZhdWx0VmFs
dWVPYmplY3RXcml0ZXI6Ok5vZGU6OkdldE1hcFZhbHVlVHlwZSgKLSAgICBjb25zdCBnb29nbGU6
OnByb3RvYnVmOjpUeXBlJiBmb3VuZF90eXBlLCBjb25zdCBUeXBlSW5mbyogdHlwZWluZm8pIHsK
LSAgLy8gSWYgdGhpcyBmaWVsZCBpcyBhIG1hcCwgd2Ugc2hvdWxkIHVzZSB0aGUgdHlwZSBvZiBp
dHMgIlZhbHVlIiBhcwotICAvLyB0aGUgdHlwZSBvZiB0aGUgY2hpbGQgbm9kZS4KLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBmb3VuZF90eXBlLmZpZWxkc19zaXplKCk7ICsraSkgewotICAgIGNvbnN0
IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkJiBzdWJfZmllbGQgPSBmb3VuZF90eXBlLmZpZWxkcyhp
KTsKLSAgICBpZiAoc3ViX2ZpZWxkLm51bWJlcigpICE9IDIpIHsKLSAgICAgIGNvbnRpbnVlOwot
ICAgIH0KLSAgICBpZiAoc3ViX2ZpZWxkLmtpbmQoKSAhPSBnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZF9LaW5kX1RZUEVfTUVTU0FHRSkgewotICAgICAgLy8gVGhpcyBtYXAncyB2YWx1ZSB0eXBlIGlz
IG5vdCBhIG1lc3NhZ2UgdHlwZS4gV2UgZG9uJ3QgbmVlZCB0bwotICAgICAgLy8gZ2V0IHRoZSBm
aWVsZF90eXBlIGluIHRoaXMgY2FzZS4KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICB1dGlsOjpT
dGF0dXNPcjxjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKj4gc3ViX3R5cGUgPQotICAgICAg
ICB0eXBlaW5mby0+UmVzb2x2ZVR5cGVVcmwoc3ViX2ZpZWxkLnR5cGVfdXJsKCkpOwotICAgIGlm
ICghc3ViX3R5cGUub2soKSkgewotICAgICAgR09PR0xFX0xPRyhXQVJOSU5HKSA8PCAiQ2Fubm90
IHJlc29sdmUgdHlwZSAnIiA8PCBzdWJfZmllbGQudHlwZV91cmwoKSA8PCAiJy4iOwotICAgIH0g
ZWxzZSB7Ci0gICAgICByZXR1cm4gc3ViX3R5cGUuVmFsdWVPckRpZSgpOwotICAgIH0KLSAgICBi
cmVhazsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBEZWZhdWx0VmFsdWVPYmplY3RX
cml0ZXI6Ok5vZGU6OlBvcHVsYXRlQ2hpbGRyZW4oCi0gICAgY29uc3QgVHlwZUluZm8qIHR5cGVp
bmZvKSB7Ci0gIC8vIElnbm9yZXMgd2VsbCBrbm93biB0eXBlcyB0aGF0IGRvbid0IHJlcXVpcmUg
YXV0b21hdGljYWxseSBwb3B1bGF0aW5nIHRoZWlyCi0gIC8vIHByaW1pdGl2ZSBjaGlsZHJlbi4g
Rm9yIHR5cGUgIkFueSIsIHdlIG9ubHkgcG9wdWxhdGUgaXRzIGNoaWxkcmVuIHdoZW4gdGhlCi0g
IC8vICJAdHlwZSIgZmllbGQgaXMgc2V0LgotICAvLyBUT0RPKHRzdW4pOiByZW1vdmUgImtTdHJ1
Y3RWYWx1ZVR5cGUiIGZyb20gdGhlIGxpc3QuIEl0J3MgYmVpbmcgY2hlY2tlZAotICAvLyAgICAg
bm93IGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlIHRvb2wtY2hhaW4gdGhhdCBjYXVzZXMgdGhlICJv
bmVvZl9pbmRleCIKLSAgLy8gICAgIG9mIGtTdHJ1Y3RWYWx1ZVR5cGUgdG8gbm90IGJlIHNldCBj
b3JyZWN0bHkuCi0gIGlmICh0eXBlXyA9PSBOVUxMIHx8IHR5cGVfLT5uYW1lKCkgPT0ga0FueVR5
cGUgfHwKLSAgICAgIHR5cGVfLT5uYW1lKCkgPT0ga1N0cnVjdFR5cGUgfHwgdHlwZV8tPm5hbWUo
KSA9PSBrVGltZXN0YW1wVHlwZSB8fAotICAgICAgdHlwZV8tPm5hbWUoKSA9PSBrRHVyYXRpb25U
eXBlIHx8IHR5cGVfLT5uYW1lKCkgPT0ga1N0cnVjdFZhbHVlVHlwZSkgewotICAgIHJldHVybjsK
LSAgfQotICBzdGQ6OnZlY3RvcjxOb2RlKj4gbmV3X2NoaWxkcmVuOwotICBoYXNoX21hcDxzdHJp
bmcsIGludD4gb3JpZ19jaGlsZHJlbl9tYXA7Ci0KLSAgLy8gQ3JlYXRlcyBhIG1hcCBvZiBjaGls
ZCBub2RlcyB0byBzcGVlZCB1cCBsb29rdXAuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRy
ZW5fLnNpemUoKTsgKytpKSB7Ci0gICAgSW5zZXJ0SWZOb3RQcmVzZW50KCZvcmlnX2NoaWxkcmVu
X21hcCwgY2hpbGRyZW5fW2ldLT5uYW1lXywgaSk7Ci0gIH0KLQotICBmb3IgKGludCBpID0gMDsg
aSA8IHR5cGVfLT5maWVsZHNfc2l6ZSgpOyArK2kpIHsKLSAgICBjb25zdCBnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZCYgZmllbGQgPSB0eXBlXy0+ZmllbGRzKGkpOwotCi0gICAgLy8gVGhpcyBjb2Rl
IGlzIGNoZWNraW5nIGlmIHRoZSBmaWVsZCB0byBiZSBhZGRlZCB0byB0aGUgdHJlZSBzaG91bGQg
YmUKLSAgICAvLyBzY3J1YmJlZCBvciBub3QgYnkgY2FsbGluZyB0aGUgZmllbGRfc2NydWJfY2Fs
bGJhY2tfIGNhbGxiYWNrIGZ1bmN0aW9uLgotICAgIHZlY3RvcjxzdHJpbmc+IHBhdGg7Ci0gICAg
aWYgKCFwYXRoXy5lbXB0eSgpKSB7Ci0gICAgICBwYXRoLmluc2VydChwYXRoLmJlZ2luKCksIHBh
dGhfLmJlZ2luKCksIHBhdGhfLmVuZCgpKTsKLSAgICB9Ci0gICAgcGF0aC5wdXNoX2JhY2soZmll
bGQubmFtZSgpKTsKLSAgICBpZiAoZmllbGRfc2NydWJfY2FsbGJhY2tfICE9IE5VTEwgJiYKLSAg
ICAgICAgZmllbGRfc2NydWJfY2FsbGJhY2tfLT5SdW4ocGF0aCwgJmZpZWxkKSkgewotICAgICAg
Y29udGludWU7Ci0gICAgfQotCi0gICAgaGFzaF9tYXA8c3RyaW5nLCBpbnQ+OjppdGVyYXRvciBm
b3VuZCA9Ci0gICAgICAgIG9yaWdfY2hpbGRyZW5fbWFwLmZpbmQoZmllbGQubmFtZSgpKTsKLSAg
ICAvLyBJZiB0aGUgY2hpbGQgZmllbGQgaGFzIGFscmVhZHkgYmVlbiBzZXQsIHdlIGp1c3QgYWRk
IGl0IHRvIHRoZSBuZXcgbGlzdAotICAgIC8vIG9mIGNoaWxkcmVuLgotICAgIGlmIChmb3VuZCAh
PSBvcmlnX2NoaWxkcmVuX21hcC5lbmQoKSkgewotICAgICAgbmV3X2NoaWxkcmVuLnB1c2hfYmFj
ayhjaGlsZHJlbl9bZm91bmQtPnNlY29uZF0pOwotICAgICAgY2hpbGRyZW5fW2ZvdW5kLT5zZWNv
bmRdID0gTlVMTDsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGNvbnN0IGdvb2dsZTo6
cHJvdG9idWY6OlR5cGUqIGZpZWxkX3R5cGUgPSBOVUxMOwotICAgIGJvb2wgaXNfbWFwID0gZmFs
c2U7Ci0gICAgTm9kZUtpbmQga2luZCA9IFBSSU1JVElWRTsKLQotICAgIGlmIChmaWVsZC5raW5k
KCkgPT0gZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX01FU1NBR0UpIHsKLSAgICAg
IGtpbmQgPSBPQkpFQ1Q7Ci0gICAgICB1dGlsOjpTdGF0dXNPcjxjb25zdCBnb29nbGU6OnByb3Rv
YnVmOjpUeXBlKj4gZm91bmRfcmVzdWx0ID0KLSAgICAgICAgICB0eXBlaW5mby0+UmVzb2x2ZVR5
cGVVcmwoZmllbGQudHlwZV91cmwoKSk7Ci0gICAgICBpZiAoIWZvdW5kX3Jlc3VsdC5vaygpKSB7
Ci0gICAgICAgIC8vICJmaWVsZCIgaXMgb2YgYW4gdW5rbm93biB0eXBlLgotICAgICAgICBHT09H
TEVfTE9HKFdBUk5JTkcpIDw8ICJDYW5ub3QgcmVzb2x2ZSB0eXBlICciIDw8IGZpZWxkLnR5cGVf
dXJsKCkgPDwgIicuIjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IGdvb2dsZTo6cHJv
dG9idWY6OlR5cGUqIGZvdW5kX3R5cGUgPSBmb3VuZF9yZXN1bHQuVmFsdWVPckRpZSgpOwotICAg
ICAgICBpc19tYXAgPSBJc01hcChmaWVsZCwgKmZvdW5kX3R5cGUpOwotCi0gICAgICAgIGlmICgh
aXNfbWFwKSB7Ci0gICAgICAgICAgZmllbGRfdHlwZSA9IGZvdW5kX3R5cGU7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgLy8gSWYgdGhpcyBmaWVsZCBpcyBhIG1hcCwgd2Ugc2hvdWxkIHVz
ZSB0aGUgdHlwZSBvZiBpdHMgIlZhbHVlIiBhcwotICAgICAgICAgIC8vIHRoZSB0eXBlIG9mIHRo
ZSBjaGlsZCBub2RlLgotICAgICAgICAgIGZpZWxkX3R5cGUgPSBHZXRNYXBWYWx1ZVR5cGUoKmZv
dW5kX3R5cGUsIHR5cGVpbmZvKTsKLSAgICAgICAgICBraW5kID0gTUFQOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpc19tYXAgJiYKLSAgICAgICAgZmllbGQuY2FyZGlu
YWxpdHkoKSA9PQotICAgICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfQ2FyZGluYWxp
dHlfQ0FSRElOQUxJVFlfUkVQRUFURUQpIHsKLSAgICAgIGtpbmQgPSBMSVNUOwotICAgIH0KLQot
ICAgIC8vIElmIG9uZW9mX2luZGV4KCkgIT0gMCwgdGhlIGNoaWxkIGZpZWxkIGlzIHBhcnQgb2Yg
YSAib25lb2YiLCB3aGljaCBtZWFucwotICAgIC8vIHRoZSBjaGlsZCBmaWVsZCBpcyBvcHRpb25h
bCBhbmQgd2Ugc2hvdWxkbid0IHBvcHVsYXRlIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgIGlmIChm
aWVsZC5vbmVvZl9pbmRleCgpICE9IDApIGNvbnRpbnVlOwotCi0gICAgLy8gSWYgdGhlIGNoaWxk
IGZpZWxkIGlzIG9mIHByaW1pdGl2ZSB0eXBlLCBzZXRzIGl0cyBkYXRhIHRvIHRoZSBkZWZhdWx0
Ci0gICAgLy8gdmFsdWUgb2YgaXRzIHR5cGUuCi0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVk
X3B0cjxOb2RlPiBjaGlsZChuZXcgTm9kZSgKLSAgICAgICAgZmllbGQuanNvbl9uYW1lKCksIGZp
ZWxkX3R5cGUsIGtpbmQsCi0gICAgICAgIGtpbmQgPT0gUFJJTUlUSVZFID8gQ3JlYXRlRGVmYXVs
dERhdGFQaWVjZUZvckZpZWxkKGZpZWxkLCB0eXBlaW5mbykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBEYXRhUGllY2U6Ok51bGxEYXRhKCksCi0gICAgICAgIHRydWUsIHBhdGgsIGZpZWxk
X3NjcnViX2NhbGxiYWNrXykpOwotICAgIG5ld19jaGlsZHJlbi5wdXNoX2JhY2soY2hpbGQucmVs
ZWFzZSgpKTsKLSAgfQotICAvLyBBZGRzIGFsbCBsZWZ0b3ZlciBub2RlcyBpbiBjaGlsZHJlbl8g
dG8gdGhlIGJlZ2lubmluZyBvZiBuZXdfY2hpbGQuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgY2hp
bGRyZW5fLnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKGNoaWxkcmVuX1tpXSA9PSBOVUxMKSB7Ci0g
ICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgbmV3X2NoaWxkcmVuLmluc2VydChuZXdfY2hpbGRy
ZW4uYmVnaW4oKSwgY2hpbGRyZW5fW2ldKTsKLSAgICBjaGlsZHJlbl9baV0gPSBOVUxMOwotICB9
Ci0gIGNoaWxkcmVuXy5zd2FwKG5ld19jaGlsZHJlbik7Ci19Ci0KLXZvaWQgRGVmYXVsdFZhbHVl
T2JqZWN0V3JpdGVyOjpNYXliZVBvcHVsYXRlQ2hpbGRyZW5PZkFueShOb2RlKiBub2RlKSB7Ci0g
IC8vIElmIHRoaXMgaXMgYW4gIkFueSIgbm9kZSB3aXRoICJAdHlwZSIgYWxyZWFkeSBnaXZlbiBh
bmQgbm8gb3RoZXIgY2hpbGRyZW4KLSAgLy8gaGF2ZSBiZWVuIGFkZGVkLCBwb3B1bGF0ZXMgaXRz
IGNoaWxkcmVuLgotICBpZiAobm9kZSAhPSBOVUxMICYmIG5vZGUtPmlzX2FueSgpICYmIG5vZGUt
PnR5cGUoKSAhPSBOVUxMICYmCi0gICAgICBub2RlLT50eXBlKCktPm5hbWUoKSAhPSBrQW55VHlw
ZSAmJiBub2RlLT5udW1iZXJfb2ZfY2hpbGRyZW4oKSA9PSAxKSB7Ci0gICAgbm9kZS0+UG9wdWxh
dGVDaGlsZHJlbih0eXBlaW5mb18pOwotICB9Ci19Ci0KLURhdGFQaWVjZSBEZWZhdWx0VmFsdWVP
YmplY3RXcml0ZXI6OkZpbmRFbnVtRGVmYXVsdCgKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVm
OjpGaWVsZCYgZmllbGQsIGNvbnN0IFR5cGVJbmZvKiB0eXBlaW5mbykgewotICBpZiAoIWZpZWxk
LmRlZmF1bHRfdmFsdWUoKS5lbXB0eSgpKQotICAgIHJldHVybiBEYXRhUGllY2UoZmllbGQuZGVm
YXVsdF92YWx1ZSgpLCB0cnVlKTsKLQotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpFbnVtKiBl
bnVtX3R5cGUgPQotICAgICAgdHlwZWluZm8tPkdldEVudW1CeVR5cGVVcmwoZmllbGQudHlwZV91
cmwoKSk7Ci0gIGlmICghZW51bV90eXBlKSB7Ci0gICAgR09PR0xFX0xPRyhXQVJOSU5HKSA8PCAi
Q291bGQgbm90IGZpbmQgZW51bSB3aXRoIHR5cGUgJyIgPDwgZmllbGQudHlwZV91cmwoKQotICAg
ICAgICAgICAgICAgICA8PCAiJyI7Ci0gICAgcmV0dXJuIERhdGFQaWVjZTo6TnVsbERhdGEoKTsK
LSAgfQotICAvLyBXZSB0cmVhdCB0aGUgZmlyc3QgdmFsdWUgYXMgdGhlIGRlZmF1bHQgaWYgbm9u
ZSBpcyBzcGVjaWZpZWQuCi0gIHJldHVybiBlbnVtX3R5cGUtPmVudW12YWx1ZV9zaXplKCkgPiAw
Ci0gICAgICAgICAgICAgPyBEYXRhUGllY2UoZW51bV90eXBlLT5lbnVtdmFsdWUoMCkubmFtZSgp
LCB0cnVlKQotICAgICAgICAgICAgIDogRGF0YVBpZWNlOjpOdWxsRGF0YSgpOwotfQotCi1EYXRh
UGllY2UgRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyOjpDcmVhdGVEZWZhdWx0RGF0YVBpZWNlRm9y
RmllbGQoCi0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQmIGZpZWxkLCBjb25zdCBU
eXBlSW5mbyogdHlwZWluZm8pIHsKLSAgc3dpdGNoIChmaWVsZC5raW5kKCkpIHsKLSAgICBjYXNl
IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9ET1VCTEU6IHsKLSAgICAgIHJldHVy
biBEYXRhUGllY2UoQ29udmVydFRvPGRvdWJsZT4oCi0gICAgICAgICAgZmllbGQuZGVmYXVsdF92
YWx1ZSgpLCAmRGF0YVBpZWNlOjpUb0RvdWJsZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPigwKSkpOwot
ICAgIH0KLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9GTE9BVDog
ewotICAgICAgcmV0dXJuIERhdGFQaWVjZShDb252ZXJ0VG88ZmxvYXQ+KAotICAgICAgICAgIGZp
ZWxkLmRlZmF1bHRfdmFsdWUoKSwgJkRhdGFQaWVjZTo6VG9GbG9hdCwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KDApKSk7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9U
WVBFX0lOVDY0OgotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX1NJ
TlQ2NDoKLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9TRklYRUQ2
NDogewotICAgICAgcmV0dXJuIERhdGFQaWVjZShDb252ZXJ0VG88aW50NjQ+KAotICAgICAgICAg
IGZpZWxkLmRlZmF1bHRfdmFsdWUoKSwgJkRhdGFQaWVjZTo6VG9JbnQ2NCwgc3RhdGljX2Nhc3Q8
aW50NjQ+KDApKSk7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2lu
ZF9UWVBFX1VJTlQ2NDoKLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQ
RV9GSVhFRDY0OiB7Ci0gICAgICByZXR1cm4gRGF0YVBpZWNlKENvbnZlcnRUbzx1aW50NjQ+KAot
ICAgICAgICAgIGZpZWxkLmRlZmF1bHRfdmFsdWUoKSwgJkRhdGFQaWVjZTo6VG9VaW50NjQsIHN0
YXRpY19jYXN0PHVpbnQ2ND4oMCkpKTsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVm
OjpGaWVsZF9LaW5kX1RZUEVfSU5UMzI6Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZF9LaW5kX1RZUEVfU0lOVDMyOgotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2lu
ZF9UWVBFX1NGSVhFRDMyOiB7Ci0gICAgICByZXR1cm4gRGF0YVBpZWNlKENvbnZlcnRUbzxpbnQz
Mj4oCi0gICAgICAgICAgZmllbGQuZGVmYXVsdF92YWx1ZSgpLCAmRGF0YVBpZWNlOjpUb0ludDMy
LCBzdGF0aWNfY2FzdDxpbnQzMj4oMCkpKTsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZF9LaW5kX1RZUEVfQk9PTDogewotICAgICAgcmV0dXJuIERhdGFQaWVjZSgKLSAg
ICAgICAgICBDb252ZXJ0VG88Ym9vbD4oZmllbGQuZGVmYXVsdF92YWx1ZSgpLCAmRGF0YVBpZWNl
OjpUb0Jvb2wsIGZhbHNlKSk7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6Rmll
bGRfS2luZF9UWVBFX1NUUklORzogewotICAgICAgcmV0dXJuIERhdGFQaWVjZShmaWVsZC5kZWZh
dWx0X3ZhbHVlKCksIHRydWUpOwotICAgIH0KLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkX0tpbmRfVFlQRV9CWVRFUzogewotICAgICAgcmV0dXJuIERhdGFQaWVjZShmaWVsZC5kZWZh
dWx0X3ZhbHVlKCksIGZhbHNlLCB0cnVlKTsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZF9LaW5kX1RZUEVfVUlOVDMyOgotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6
RmllbGRfS2luZF9UWVBFX0ZJWEVEMzI6IHsKLSAgICAgIHJldHVybiBEYXRhUGllY2UoQ29udmVy
dFRvPHVpbnQzMj4oCi0gICAgICAgICAgZmllbGQuZGVmYXVsdF92YWx1ZSgpLCAmRGF0YVBpZWNl
OjpUb1VpbnQzMiwgc3RhdGljX2Nhc3Q8dWludDMyPigwKSkpOwotICAgIH0KLSAgICBjYXNlIGdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9FTlVNOiB7Ci0gICAgICByZXR1cm4gRmlu
ZEVudW1EZWZhdWx0KGZpZWxkLCB0eXBlaW5mbyk7Ci0gICAgfQotICAgIGRlZmF1bHQ6IHsgcmV0
dXJuIERhdGFQaWVjZTo6TnVsbERhdGEoKTsgfQotICB9Ci19Ci0KLURlZmF1bHRWYWx1ZU9iamVj
dFdyaXRlciogRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyOjpTdGFydE9iamVjdCgKLSAgICBTdHJp
bmdQaWVjZSBuYW1lKSB7Ci0gIGlmIChjdXJyZW50XyA9PSBOVUxMKSB7Ci0gICAgdmVjdG9yPHN0
cmluZz4gcGF0aDsKLSAgICByb290Xy5yZXNldChuZXcgTm9kZShuYW1lLlRvU3RyaW5nKCksICZ0
eXBlXywgT0JKRUNULCBEYXRhUGllY2U6Ok51bGxEYXRhKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsIHBhdGgsIGZpZWxkX3NjcnViX2NhbGxiYWNrXy5nZXQoKSkpOwotICAgIHJv
b3RfLT5Qb3B1bGF0ZUNoaWxkcmVuKHR5cGVpbmZvXyk7Ci0gICAgY3VycmVudF8gPSByb290Xy5n
ZXQoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICBNYXliZVBvcHVsYXRlQ2hpbGRyZW5PZkFu
eShjdXJyZW50Xyk7Ci0gIE5vZGUqIGNoaWxkID0gY3VycmVudF8tPkZpbmRDaGlsZChuYW1lKTsK
LSAgaWYgKGN1cnJlbnRfLT5raW5kKCkgPT0gTElTVCB8fCBjdXJyZW50Xy0+a2luZCgpID09IE1B
UCB8fCBjaGlsZCA9PSBOVUxMKSB7Ci0gICAgLy8gSWYgY3VycmVudF8gaXMgYSBsaXN0IG9yIGEg
bWFwIG5vZGUsIHdlIHNob3VsZCBjcmVhdGUgYSBuZXcgY2hpbGQgYW5kIHVzZQotICAgIC8vIHRo
ZSB0eXBlIG9mIGN1cnJlbnRfIGFzIHRoZSB0eXBlIG9mIHRoZSBuZXcgY2hpbGQuCi0gICAgZ29v
Z2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxOb2RlPiBub2RlKG5ldyBOb2RlKAotICAgICAgICBu
YW1lLlRvU3RyaW5nKCksICgoY3VycmVudF8tPmtpbmQoKSA9PSBMSVNUIHx8IGN1cnJlbnRfLT5r
aW5kKCkgPT0gTUFQKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50Xy0+
dHlwZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpLAotICAgICAgICBP
QkpFQ1QsIERhdGFQaWVjZTo6TnVsbERhdGEoKSwgZmFsc2UsCi0gICAgICAgIGNoaWxkID09IE5V
TEwgPyBjdXJyZW50Xy0+cGF0aCgpIDogY2hpbGQtPnBhdGgoKSwKLSAgICAgICAgZmllbGRfc2Ny
dWJfY2FsbGJhY2tfLmdldCgpKSk7Ci0gICAgY2hpbGQgPSBub2RlLmdldCgpOwotICAgIGN1cnJl
bnRfLT5BZGRDaGlsZChub2RlLnJlbGVhc2UoKSk7Ci0gIH0KLQotICBjaGlsZC0+c2V0X2lzX3Bs
YWNlaG9sZGVyKGZhbHNlKTsKLSAgaWYgKGNoaWxkLT5raW5kKCkgPT0gT0JKRUNUICYmIGNoaWxk
LT5udW1iZXJfb2ZfY2hpbGRyZW4oKSA9PSAwKSB7Ci0gICAgY2hpbGQtPlBvcHVsYXRlQ2hpbGRy
ZW4odHlwZWluZm9fKTsKLSAgfQotCi0gIHN0YWNrXy5wdXNoKGN1cnJlbnRfKTsKLSAgY3VycmVu
dF8gPSBjaGlsZDsKLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLURlZmF1bHRWYWx1ZU9iamVjdFdyaXRl
ciogRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyOjpFbmRPYmplY3QoKSB7Ci0gIGlmIChzdGFja18u
ZW1wdHkoKSkgewotICAgIC8vIFRoZSByb290IG9iamVjdCBlbmRzIGhlcmUuIFdyaXRlcyBvdXQg
dGhlIHRyZWUuCi0gICAgV3JpdGVSb290KCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgY3Vy
cmVudF8gPSBzdGFja18udG9wKCk7Ci0gIHN0YWNrXy5wb3AoKTsKLSAgcmV0dXJuIHRoaXM7Ci19
Ci0KLURlZmF1bHRWYWx1ZU9iamVjdFdyaXRlciogRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyOjpT
dGFydExpc3QoCi0gICAgU3RyaW5nUGllY2UgbmFtZSkgewotICBpZiAoY3VycmVudF8gPT0gTlVM
TCkgewotICAgIHZlY3RvcjxzdHJpbmc+IHBhdGg7Ci0gICAgcm9vdF8ucmVzZXQobmV3IE5vZGUo
bmFtZS5Ub1N0cmluZygpLCAmdHlwZV8sIExJU1QsIERhdGFQaWVjZTo6TnVsbERhdGEoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgcGF0aCwgZmllbGRfc2NydWJfY2FsbGJhY2tf
LmdldCgpKSk7Ci0gICAgY3VycmVudF8gPSByb290Xy5nZXQoKTsKLSAgICByZXR1cm4gdGhpczsK
LSAgfQotICBNYXliZVBvcHVsYXRlQ2hpbGRyZW5PZkFueShjdXJyZW50Xyk7Ci0gIE5vZGUqIGNo
aWxkID0gY3VycmVudF8tPkZpbmRDaGlsZChuYW1lKTsKLSAgaWYgKGNoaWxkID09IE5VTEwgfHwg
Y2hpbGQtPmtpbmQoKSAhPSBMSVNUKSB7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0
cjxOb2RlPiBub2RlKAotICAgICAgICBuZXcgTm9kZShuYW1lLlRvU3RyaW5nKCksIE5VTEwsIExJ
U1QsIERhdGFQaWVjZTo6TnVsbERhdGEoKSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgIGNoaWxk
ID09IE5VTEwgPyBjdXJyZW50Xy0+cGF0aCgpIDogY2hpbGQtPnBhdGgoKSwKLSAgICAgICAgICAg
ICAgICAgZmllbGRfc2NydWJfY2FsbGJhY2tfLmdldCgpKSk7Ci0gICAgY2hpbGQgPSBub2RlLmdl
dCgpOwotICAgIGN1cnJlbnRfLT5BZGRDaGlsZChub2RlLnJlbGVhc2UoKSk7Ci0gIH0KLSAgY2hp
bGQtPnNldF9pc19wbGFjZWhvbGRlcihmYWxzZSk7Ci0KLSAgc3RhY2tfLnB1c2goY3VycmVudF8p
OwotICBjdXJyZW50XyA9IGNoaWxkOwotICByZXR1cm4gdGhpczsKLX0KLQotdm9pZCBEZWZhdWx0
VmFsdWVPYmplY3RXcml0ZXI6OldyaXRlUm9vdCgpIHsKLSAgcm9vdF8tPldyaXRlVG8ob3dfKTsK
LSAgcm9vdF8ucmVzZXQoTlVMTCk7Ci0gIGN1cnJlbnRfID0gTlVMTDsKLX0KLQotRGVmYXVsdFZh
bHVlT2JqZWN0V3JpdGVyKiBEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXI6OkVuZExpc3QoKSB7Ci0g
IGlmIChzdGFja18uZW1wdHkoKSkgewotICAgIFdyaXRlUm9vdCgpOwotICAgIHJldHVybiB0aGlz
OwotICB9Ci0gIGN1cnJlbnRfID0gc3RhY2tfLnRvcCgpOwotICBzdGFja18ucG9wKCk7Ci0gIHJl
dHVybiB0aGlzOwotfQotCi12b2lkIERlZmF1bHRWYWx1ZU9iamVjdFdyaXRlcjo6UmVuZGVyRGF0
YVBpZWNlKFN0cmluZ1BpZWNlIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IERhdGFQaWVjZSYgZGF0YSkgewotICBNYXliZVBvcHVsYXRl
Q2hpbGRyZW5PZkFueShjdXJyZW50Xyk7Ci0gIHV0aWw6OlN0YXR1c09yPHN0cmluZz4gZGF0YV9z
dHJpbmcgPSBkYXRhLlRvU3RyaW5nKCk7Ci0gIGlmIChjdXJyZW50Xy0+dHlwZSgpICE9IE5VTEwg
JiYgY3VycmVudF8tPnR5cGUoKS0+bmFtZSgpID09IGtBbnlUeXBlICYmCi0gICAgICBuYW1lID09
ICJAdHlwZSIgJiYgZGF0YV9zdHJpbmcub2soKSkgewotICAgIGNvbnN0IHN0cmluZyYgc3RyaW5n
X3ZhbHVlID0gZGF0YV9zdHJpbmcuVmFsdWVPckRpZSgpOwotICAgIC8vIElmIHRoZSB0eXBlIG9m
IGN1cnJlbnRfIGlzICJBbnkiIGFuZCBpdHMgIkB0eXBlIiBmaWVsZCBpcyBiZWluZyBzZXQgaGVy
ZSwKLSAgICAvLyBzZXRzIHRoZSB0eXBlIG9mIGN1cnJlbnRfIHRvIGJlIHRoZSB0eXBlIHNwZWNp
ZmllZCBieSB0aGUgIkB0eXBlIi4KLSAgICB1dGlsOjpTdGF0dXNPcjxjb25zdCBnb29nbGU6OnBy
b3RvYnVmOjpUeXBlKj4gZm91bmRfdHlwZSA9Ci0gICAgICAgIHR5cGVpbmZvXy0+UmVzb2x2ZVR5
cGVVcmwoc3RyaW5nX3ZhbHVlKTsKLSAgICBpZiAoIWZvdW5kX3R5cGUub2soKSkgewotICAgICAg
R09PR0xFX0xPRyhXQVJOSU5HKSA8PCAiRmFpbGVkIHRvIHJlc29sdmUgdHlwZSAnIiA8PCBzdHJp
bmdfdmFsdWUgPDwgIicuIjsKLSAgICB9IGVsc2UgewotICAgICAgY3VycmVudF8tPnNldF90eXBl
KGZvdW5kX3R5cGUuVmFsdWVPckRpZSgpKTsKLSAgICB9Ci0gICAgY3VycmVudF8tPnNldF9pc19h
bnkodHJ1ZSk7Ci0gICAgLy8gSWYgdGhlICJAdHlwZSIgZmllbGQgaXMgcGxhY2VkIGFmdGVyIG90
aGVyIGZpZWxkcywgd2Ugc2hvdWxkIHBvcHVsYXRlCi0gICAgLy8gb3RoZXIgY2hpbGRyZW4gb2Yg
cHJpbWl0aXZlIHR5cGUgbm93LiBPdGhlcndpc2UsIHdlIHNob3VsZCB3YWl0IHVudGlsIHRoZQot
ICAgIC8vIGZpcnN0IHZhbHVlIGZpZWxkIGlzIHJlbmRlcmVkIGJlZm9yZSB3ZSBwb3B1bGF0ZSB0
aGUgY2hpbGRyZW4sIGJlY2F1c2UKLSAgICAvLyB0aGUgInZhbHVlIiBmaWVsZCBvZiBhIEFueSBt
ZXNzYWdlIGNvdWxkIGJlIG9taXR0ZWQuCi0gICAgaWYgKGN1cnJlbnRfLT5udW1iZXJfb2ZfY2hp
bGRyZW4oKSA+IDEgJiYgY3VycmVudF8tPnR5cGUoKSAhPSBOVUxMKSB7Ci0gICAgICBjdXJyZW50
Xy0+UG9wdWxhdGVDaGlsZHJlbih0eXBlaW5mb18pOwotICAgIH0KLSAgfQotICBOb2RlKiBjaGls
ZCA9IGN1cnJlbnRfLT5GaW5kQ2hpbGQobmFtZSk7Ci0gIGlmIChjaGlsZCA9PSBOVUxMIHx8IGNo
aWxkLT5raW5kKCkgIT0gUFJJTUlUSVZFKSB7Ci0gICAgLy8gTm8gY2hpbGRyZW4gYXJlIGZvdW5k
LCBjcmVhdGVzIGEgbmV3IGNoaWxkLgotICAgIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8
Tm9kZT4gbm9kZSgKLSAgICAgICAgbmV3IE5vZGUobmFtZS5Ub1N0cmluZygpLCBOVUxMLCBQUklN
SVRJVkUsIGRhdGEsIGZhbHNlLAotICAgICAgICAgICAgICAgICBjaGlsZCA9PSBOVUxMID8gY3Vy
cmVudF8tPnBhdGgoKSA6IGNoaWxkLT5wYXRoKCksCi0gICAgICAgICAgICAgICAgIGZpZWxkX3Nj
cnViX2NhbGxiYWNrXy5nZXQoKSkpOwotICAgIGNoaWxkID0gbm9kZS5nZXQoKTsKLSAgICBjdXJy
ZW50Xy0+QWRkQ2hpbGQobm9kZS5yZWxlYXNlKCkpOwotICB9IGVsc2UgewotICAgIGNoaWxkLT5z
ZXRfZGF0YShkYXRhKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVyCi19ICAv
LyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3Bh
Y2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9k
ZWZhdWx0X3ZhbHVlX29iamVjdHdyaXRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50
ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmplY3R3cml0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWQ4NWJlZDg1ZjhhNGY5YTVjNTIyZGIxODkzODY3MzY5YWVlMzQwZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdXRpbC9pbnRlcm5hbC9kZWZhdWx0X3ZhbHVlX29iamVjdHdyaXRlci5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjc0ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRh
IGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2Nv
bC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0v
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0v
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9ERUZBVUxUX1ZBTFVFX09C
SkVDVFdSSVRFUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVSX0RF
RkFVTFRfVkFMVUVfT0JKRUNUV1JJVEVSX0hfXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRl
ZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9w
dHIuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0YWNrPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jYWxsYmFjay5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC90eXBlX2luZm8uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9p
bnRlcm5hbC9kYXRhcGllY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRl
cm5hbC9vYmplY3Rfd3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50
ZXJuYWwvdXRpbGl0eS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVz
b2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuaD4K
LQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0
aWwgewotbmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0KLS8vIEFuIE9iamVjdFdyaXRlciB0aGF0IHJl
bmRlcnMgbm9uLXJlcGVhdGVkIHByaW1pdGl2ZSBmaWVsZHMgb2YgcHJvdG8gbWVzc2FnZXMKLS8v
IHdpdGggdGhlaXIgZGVmYXVsdCB2YWx1ZXMuIERlZmF1bHRWYWx1ZU9iamVjdFdyaXRlciBob2xk
cyBvYmplY3RzLCBsaXN0cyBhbmQKLS8vIGZpZWxkcyBpdCByZWNlaXZlcyBpbiBhIHRyZWUgc3Ry
dWN0dXJlIGFuZCB3cml0ZXMgdGhlbSBvdXQgdG8gYW5vdGhlcgotLy8gT2JqZWN0V3JpdGVyIHdo
ZW4gRW5kT2JqZWN0KCkgaXMgY2FsbGVkIG9uIHRoZSByb290IG9iamVjdC4gSXQgYWxzbyB3cml0
ZXMKLS8vIG91dCBhbGwgbm9uLXJlcGVhdGVkIHByaW1pdGl2ZSBmaWVsZHMgdGhhdCBoYXZlbid0
IGJlZW4gZXhwbGljaXRseSByZW5kZXJlZAotLy8gd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlcyAo
MCBmb3IgbnVtYmVycywgIiIgZm9yIHN0cmluZ3MsIGV0YykuCi1jbGFzcyBMSUJQUk9UT0JVRl9F
WFBPUlQgRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyIDogcHVibGljIE9iamVjdFdyaXRlciB7Ci0g
cHVibGljOgotICAvLyBBIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYSBmaWVs
ZCBuZWVkcyB0byBiZSBzY3J1YmJlZC4KLSAgLy8KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBm
aWVsZCBzaG91bGQgbm90IGJlIHByZXNlbnQgaW4gdGhlIG91dHB1dC4gUmV0dXJucwotICAvLyBm
YWxzZSBvdGhlcndpc2UuCi0gIC8vCi0gIC8vIFRoZSAncGF0aCcgcGFyYW1ldGVyIGlzIGEgdmVj
dG9yIG9mIHBhdGggdG8gdGhlIGZpZWxkIGZyb20gcm9vdC4gRm9yCi0gIC8vIGV4YW1wbGU6IGlm
IGEgbmVzdGVkIGZpZWxkICJhLmIuYyIgKGIgaXMgdGhlIHBhcmVudCBtZXNzYWdlIGZpZWxkIG9m
IGMgYW5kCi0gIC8vIGEgaXMgdGhlIHBhcmVudCBtZXNzYWdlIGZpZWxkIG9mIGIpLCB0aGVuIHRo
ZSB2ZWN0b3Igc2hvdWxkIGNvbnRhaW4geyAiYSIsCi0gIC8vICJiIiwgImMiIH0uCi0gIC8vCi0g
IC8vIFRoZSBGaWVsZCogc2hvdWxkIHBvaW50IHRvIHRoZSBnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZCBvZiAiYyIuCi0gIHR5cGVkZWYgUmVzdWx0Q2FsbGJhY2syPGJvb2wgLypyZXR1cm4qLywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgLypwYXRo
IG9mIHRoZSBmaWVsZCovLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnb29nbGU6
OnByb3RvYnVmOjpGaWVsZCogLypmaWVsZCovPgotICAgICAgRmllbGRTY3J1YkNhbGxCYWNrOwot
Ci0gIC8vIEEgdW5pcXVlIHBvaW50ZXIgdG8gYSBEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXI6OkZp
ZWxkU2NydWJDYWxsQmFjay4KLSAgdHlwZWRlZiBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRy
PEZpZWxkU2NydWJDYWxsQmFjaz4gRmllbGRTY3J1YkNhbGxCYWNrUHRyOwotCi0gIERlZmF1bHRW
YWx1ZU9iamVjdFdyaXRlcihUeXBlUmVzb2x2ZXIqIHR5cGVfcmVzb2x2ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0V3JpdGVyKiBvdyk7Ci0KLSAgdmlydHVhbCB+
RGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyKCk7Ci0KLSAgLy8gT2JqZWN0V3JpdGVyIG1ldGhvZHMu
Ci0gIHZpcnR1YWwgRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyKiBTdGFydE9iamVjdChTdHJpbmdQ
aWVjZSBuYW1lKTsKLQotICB2aXJ0dWFsIERlZmF1bHRWYWx1ZU9iamVjdFdyaXRlciogRW5kT2Jq
ZWN0KCk7Ci0KLSAgdmlydHVhbCBEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXIqIFN0YXJ0TGlzdChT
dHJpbmdQaWVjZSBuYW1lKTsKLQotICB2aXJ0dWFsIERlZmF1bHRWYWx1ZU9iamVjdFdyaXRlciog
RW5kTGlzdCgpOwotCi0gIHZpcnR1YWwgRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyKiBSZW5kZXJC
b29sKFN0cmluZ1BpZWNlIG5hbWUsIGJvb2wgdmFsdWUpOwotCi0gIHZpcnR1YWwgRGVmYXVsdFZh
bHVlT2JqZWN0V3JpdGVyKiBSZW5kZXJJbnQzMihTdHJpbmdQaWVjZSBuYW1lLCBpbnQzMiB2YWx1
ZSk7Ci0KLSAgdmlydHVhbCBEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXIqIFJlbmRlclVpbnQzMihT
dHJpbmdQaWVjZSBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMiB2YWx1ZSk7Ci0KLSAgdmlydHVhbCBEZWZhdWx0VmFsdWVPYmplY3RX
cml0ZXIqIFJlbmRlckludDY0KFN0cmluZ1BpZWNlIG5hbWUsIGludDY0IHZhbHVlKTsKLQotICB2
aXJ0dWFsIERlZmF1bHRWYWx1ZU9iamVjdFdyaXRlciogUmVuZGVyVWludDY0KFN0cmluZ1BpZWNl
IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDY0IHZhbHVlKTsKLQotICB2aXJ0dWFsIERlZmF1bHRWYWx1ZU9iamVjdFdyaXRlciogUmVu
ZGVyRG91YmxlKFN0cmluZ1BpZWNlIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlKTsKLQotICB2aXJ0dWFsIERlZmF1bHRW
YWx1ZU9iamVjdFdyaXRlciogUmVuZGVyRmxvYXQoU3RyaW5nUGllY2UgbmFtZSwgZmxvYXQgdmFs
dWUpOwotCi0gIHZpcnR1YWwgRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyKiBSZW5kZXJTdHJpbmco
U3RyaW5nUGllY2UgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmdQaWVjZSB2YWx1ZSk7Ci0gIHZpcnR1YWwgRGVmYXVsdFZhbHVlT2Jq
ZWN0V3JpdGVyKiBSZW5kZXJCeXRlcyhTdHJpbmdQaWVjZSBuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UgdmFsdWUpOwotCi0g
IHZpcnR1YWwgRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyKiBSZW5kZXJOdWxsKFN0cmluZ1BpZWNl
IG5hbWUpOwotCi0gIC8vIFJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmb3Igc2NydWJiaW5nIG9mIGZp
ZWxkcy4gT3dlcnNoaXAgb2YKLSAgLy8gZmllbGRfc2NydWJfY2FsbGJhY2sgcG9pbnRlciBpcyBh
bHNvIHRyYW5zZmVycmVkIHRvIHRoaXMgY2xhc3MKLSAgdm9pZCBSZWdpc3RlckZpZWxkU2NydWJD
YWxsQmFjayhGaWVsZFNjcnViQ2FsbEJhY2tQdHIgZmllbGRfc2NydWJfY2FsbGJhY2spOwotCi0g
cHJpdmF0ZToKLSAgZW51bSBOb2RlS2luZCB7Ci0gICAgUFJJTUlUSVZFID0gMCwKLSAgICBPQkpF
Q1QgPSAxLAotICAgIExJU1QgPSAyLAotICAgIE1BUCA9IDMsCi0gIH07Ci0KLSAgLy8gIk5vZGUi
IHJlcHJlc2VudHMgYSBub2RlIGluIHRoZSB0cmVlIHRoYXQgaG9sZHMgdGhlIGlucHV0IG9mCi0g
IC8vIERlZmF1bHRWYWx1ZU9iamVjdFdyaXRlci4KLSAgY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JU
IE5vZGUgewotICAgcHVibGljOgotICAgIE5vZGUoY29uc3Qgc3RyaW5nJiBuYW1lLCBjb25zdCBn
b29nbGU6OnByb3RvYnVmOjpUeXBlKiB0eXBlLCBOb2RlS2luZCBraW5kLAotICAgICAgICAgY29u
c3QgRGF0YVBpZWNlJiBkYXRhLCBib29sIGlzX3BsYWNlaG9sZGVyLCBjb25zdCB2ZWN0b3I8c3Ry
aW5nPiYgcGF0aCwKLSAgICAgICAgIEZpZWxkU2NydWJDYWxsQmFjayogZmllbGRfc2NydWJfY2Fs
bGJhY2spOwotICAgIHZpcnR1YWwgfk5vZGUoKSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNoaWxkcmVuXy5zaXplKCk7ICsraSkgewotICAgICAgICBkZWxldGUgY2hpbGRyZW5fW2ldOwot
ICAgICAgfQotICAgIH0KLQotICAgIC8vIEFkZHMgYSBjaGlsZCB0byB0aGlzIG5vZGUuIFRha2Vz
IG93bmVyc2hpcCBvZiB0aGlzIGNoaWxkLgotICAgIHZvaWQgQWRkQ2hpbGQoTm9kZSogY2hpbGQp
IHsgY2hpbGRyZW5fLnB1c2hfYmFjayhjaGlsZCk7IH0KLQotICAgIC8vIEZpbmRzIHRoZSBjaGls
ZCBnaXZlbiBpdHMgbmFtZS4KLSAgICBOb2RlKiBGaW5kQ2hpbGQoU3RyaW5nUGllY2UgbmFtZSk7
Ci0KLSAgICAvLyBQb3B1bGF0ZXMgY2hpbGRyZW4gb2YgdGhpcyBOb2RlIGJhc2VkIG9uIGl0cyB0
eXBlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeQotICAgIC8vIGNoaWxkcmVuIGNyZWF0ZWQsIHRoZXkg
d2lsbCBiZSBtZXJnZWQgdG8gdGhlIHJlc3VsdC4gQ2FsbGVyIHNob3VsZCBwYXNzCi0gICAgLy8g
aW4gVHlwZUluZm8gZm9yIGxvb2tpbmcgdXAgdHlwZXMgb2YgdGhlIGNoaWxkcmVuLgotICAgIHZv
aWQgUG9wdWxhdGVDaGlsZHJlbihjb25zdCBUeXBlSW5mbyogdHlwZWluZm8pOwotCi0gICAgLy8g
SWYgdGhpcyBub2RlIGlzIGEgbGVhZiAoaGFzIGRhdGEpLCB3cml0ZXMgdGhlIGN1cnJlbnQgbm9k
ZSB0byB0aGUKLSAgICAvLyBPYmplY3RXcml0ZXI7IGlmIG5vdCwgdGhlbiByZWN1cnNpdmVseSB3
cml0ZXMgdGhlIGNoaWxkcmVuIHRvIHRoZQotICAgIC8vIE9iamVjdFdyaXRlci4KLSAgICB2b2lk
IFdyaXRlVG8oT2JqZWN0V3JpdGVyKiBvdyk7Ci0KLSAgICAvLyBBY2Nlc3NvcnMKLSAgICBjb25z
dCBzdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lXzsgfQotCi0gICAgY29uc3QgdmVj
dG9yPHN0cmluZz4mIHBhdGgoKSBjb25zdCB7IHJldHVybiBwYXRoXzsgfQotCi0gICAgY29uc3Qg
Z29vZ2xlOjpwcm90b2J1Zjo6VHlwZSogdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9Ci0K
LSAgICB2b2lkIHNldF90eXBlKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUqIHR5cGUpIHsg
dHlwZV8gPSB0eXBlOyB9Ci0KLSAgICBOb2RlS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4ga2lu
ZF87IH0KLQotICAgIGludCBudW1iZXJfb2ZfY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGls
ZHJlbl8uc2l6ZSgpOyB9Ci0KLSAgICB2b2lkIHNldF9kYXRhKGNvbnN0IERhdGFQaWVjZSYgZGF0
YSkgeyBkYXRhXyA9IGRhdGE7IH0KLQotICAgIGJvb2wgaXNfYW55KCkgY29uc3QgeyByZXR1cm4g
aXNfYW55XzsgfQotCi0gICAgdm9pZCBzZXRfaXNfYW55KGJvb2wgaXNfYW55KSB7IGlzX2FueV8g
PSBpc19hbnk7IH0KLQotICAgIHZvaWQgc2V0X2lzX3BsYWNlaG9sZGVyKGJvb2wgaXNfcGxhY2Vo
b2xkZXIpIHsKLSAgICAgIGlzX3BsYWNlaG9sZGVyXyA9IGlzX3BsYWNlaG9sZGVyOwotICAgIH0K
LQotICAgcHJpdmF0ZToKLSAgICAvLyBSZXR1cm5zIHRoZSBWYWx1ZSBUeXBlIG9mIGEgbWFwIGdp
dmVuIHRoZSBUeXBlIG9mIHRoZSBtYXAgZW50cnkgYW5kIGEKLSAgICAvLyBUeXBlSW5mbyBpbnN0
YW5jZS4KLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKiBHZXRNYXBWYWx1ZVR5cGUo
Ci0gICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIGVudHJ5X3R5cGUsIGNvbnN0
IFR5cGVJbmZvKiB0eXBlaW5mbyk7Ci0KLSAgICAvLyBDYWxscyBXcml0ZVRvKCkgb24gZXZlcnkg
Y2hpbGQgaW4gY2hpbGRyZW5fLgotICAgIHZvaWQgV3JpdGVDaGlsZHJlbihPYmplY3RXcml0ZXIq
IG93KTsKLQotICAgIC8vIFRoZSBuYW1lIG9mIHRoaXMgbm9kZS4KLSAgICBzdHJpbmcgbmFtZV87
Ci0gICAgLy8gZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSBvZiB0aGlzIG5vZGUuIE93bmVkIGJ5IFR5
cGVJbmZvLgotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUqIHR5cGVfOwotICAgIC8v
IFRoZSBraW5kIG9mIHRoaXMgbm9kZS4KLSAgICBOb2RlS2luZCBraW5kXzsKLSAgICAvLyBXaGV0
aGVyIHRoaXMgaXMgYSBub2RlIGZvciAiQW55Ii4KLSAgICBib29sIGlzX2FueV87Ci0gICAgLy8g
VGhlIGRhdGEgb2YgdGhpcyBub2RlIHdoZW4gaXQgaXMgYSBsZWFmIG5vZGUuCi0gICAgRGF0YVBp
ZWNlIGRhdGFfOwotICAgIC8vIENoaWxkcmVuIG9mIHRoaXMgbm9kZS4KLSAgICBzdGQ6OnZlY3Rv
cjxOb2RlKj4gY2hpbGRyZW5fOwotICAgIC8vIFdoZXRoZXIgdGhpcyBub2RlIGlzIGEgcGxhY2Vo
b2xkZXIgZm9yIGFuIG9iamVjdCBvciBsaXN0IGF1dG9tYXRpY2FsbHkKLSAgICAvLyBnZW5lcmF0
ZWQgd2hlbiBjcmVhdGluZyB0aGUgcGFyZW50IG5vZGUuIFNob3VsZCBiZSBzZXQgdG8gZmFsc2Ug
YWZ0ZXIKLSAgICAvLyB0aGUgcGFyZW50IG5vZGUncyBTdGFydE9iamVjdCgpL1N0YXJ0TGlzdCgp
IG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGlzCi0gICAgLy8gbm9kZSdzIG5hbWUuCi0gICAgYm9v
bCBpc19wbGFjZWhvbGRlcl87Ci0KLSAgICAvLyBQYXRoIG9mIHRoZSBmaWVsZCBvZiB0aGlzIG5v
ZGUKLSAgICBzdGQ6OnZlY3RvcjxzdHJpbmc+IHBhdGhfOwotCi0gICAgLy8gUG9pbnRlciB0byBm
dW5jdGlvbiBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhIGZpZWxkIG5lZWRzIHRvIGJlIHNjcnVi
YmVkCi0gICAgLy8gb3Igbm90LiBUaGlzIGNhbGxiYWNrIGlzIG93bmVkIGJ5IHRoZSBjcmVhdG9y
IG9mIHRoaXMgbm9kZS4KLSAgICBGaWVsZFNjcnViQ2FsbEJhY2sqIGZpZWxkX3NjcnViX2NhbGxi
YWNrXzsKLQotICAgIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhOb2RlKTsKLSAg
fTsKLQotICAvLyBQb3B1bGF0ZXMgY2hpbGRyZW4gb2YgIm5vZGUiIGlmIGl0IGlzIGFuICJhbnki
IE5vZGUgYW5kIGl0cyByZWFsIHR5cGUgaGFzCi0gIC8vIGJlZW4gZ2l2ZW4uCi0gIHZvaWQgTWF5
YmVQb3B1bGF0ZUNoaWxkcmVuT2ZBbnkoTm9kZSogbm9kZSk7Ci0KLSAgLy8gV3JpdGVzIHRoZSBy
b290XyBub2RlIHRvIG93XyBhbmQgcmVzZXRzIHRoZSByb290XyBhbmQgY3VycmVudF8gcG9pbnRl
ciB0bwotICAvLyBOVUxMLgotICB2b2lkIFdyaXRlUm9vdCgpOwotCi0gIC8vIENyZWF0ZXMgYSBE
YXRhUGllY2UgY29udGFpbmluZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgdHlwZSBvZiB0aGUg
ZmllbGQuCi0gIHN0YXRpYyBEYXRhUGllY2UgQ3JlYXRlRGVmYXVsdERhdGFQaWVjZUZvckZpZWxk
KAotICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQmIGZpZWxkLCBjb25zdCBUeXBl
SW5mbyogdHlwZWluZm8pOwotCi0gIC8vIEFkZHMgb3IgcmVwbGFjZXMgdGhlIGRhdGFfIG9mIGEg
cHJpbWl0aXZlIGNoaWxkIG5vZGUuCi0gIHZvaWQgUmVuZGVyRGF0YVBpZWNlKFN0cmluZ1BpZWNl
IG5hbWUsIGNvbnN0IERhdGFQaWVjZSYgZGF0YSk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgZGVmYXVs
dCBlbnVtIHZhbHVlIGFzIGEgRGF0YVBpZWNlLCBvciB0aGUgZmlyc3QgZW51bSB2YWx1ZSBpZgot
ICAvLyB0aGVyZSBpcyBubyBkZWZhdWx0LiBGb3IgcHJvdG8zLCB3aGVyZSB3ZSBjYW5ub3Qgc3Bl
Y2lmeSBhbiBleHBsaWNpdAotICAvLyBkZWZhdWx0LCBhIHplcm8gdmFsdWUgd2lsbCBhbHdheXMg
YmUgcmV0dXJuZWQuCi0gIHN0YXRpYyBEYXRhUGllY2UgRmluZEVudW1EZWZhdWx0KGNvbnN0IGdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVHlwZUluZm8qIHR5cGVpbmZvKTsKLQotICAvLyBUeXBlIGluZm9ybWF0
aW9uIGZvciBhbGwgdGhlIHR5cGVzIHVzZWQgaW4gdGhlIGRlc2NyaXB0b3IuIFVzZWQgdG8gZmlu
ZAotICAvLyBnb29nbGU6OnByb3RvYnVmOjpUeXBlIG9mIG5lc3RlZCBtZXNzYWdlcy9lbnVtcy4K
LSAgY29uc3QgVHlwZUluZm8qIHR5cGVpbmZvXzsKLSAgLy8gV2hldGhlciB0aGUgVHlwZUluZm8g
b2JqZWN0IGlzIG93bmVkIGJ5IHRoaXMgY2xhc3MuCi0gIGJvb2wgb3duX3R5cGVpbmZvXzsKLSAg
Ly8gZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSBvZiB0aGUgcm9vdCBtZXNzYWdlIHR5cGUuCi0gIGNv
bnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGVfOwotICAvLyBIb2xkcyBjb3BpZXMgb2Yg
c3RyaW5ncyBwYXNzZWQgdG8gUmVuZGVyU3RyaW5nLgotICB2ZWN0b3I8c3RyaW5nKj4gc3RyaW5n
X3ZhbHVlc187Ci0KLSAgLy8gVGhlIGN1cnJlbnQgTm9kZS4gT3duZWQgYnkgaXRzIHBhcmVudHMu
Ci0gIE5vZGUqIGN1cnJlbnRfOwotICAvLyBUaGUgcm9vdCBOb2RlLgotICBnb29nbGU6OnByb3Rv
YnVmOjpzY29wZWRfcHRyPE5vZGU+IHJvb3RfOwotICAvLyBUaGUgc3RhY2sgdG8gaG9sZCB0aGUg
cGF0aCBvZiBOb2RlcyBmcm9tIGN1cnJlbnRfIHRvIHJvb3RfOwotICBzdGQ6OnN0YWNrPE5vZGUq
PiBzdGFja187Ci0KLSAgLy8gVW5pcXVlIFBvaW50ZXIgdG8gZnVuY3Rpb24gZm9yIGRldGVybWlu
aW5nIHdoZXRoZXIgYSBmaWVsZCBuZWVkcyB0byBiZQotICAvLyBzY3J1YmJlZCBvciBub3QuCi0g
IEZpZWxkU2NydWJDYWxsQmFja1B0ciBmaWVsZF9zY3J1Yl9jYWxsYmFja187Ci0KLSAgT2JqZWN0
V3JpdGVyKiBvd187Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKERlZmF1
bHRWYWx1ZU9iamVjdFdyaXRlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVyCi19
ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVS
X0RFRkFVTFRfVkFMVUVfT0JKRUNUV1JJVEVSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmplY3R3cml0ZXJfdGVzdC5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2RlZmF1bHRfdmFsdWVfb2JqZWN0d3Jp
dGVyX3Rlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNTRjMGZhMmUxYmM0
MGY3ZTEzODExOGU4M2ZmMWI4YmUyODQ3NmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGVmYXVs
dF92YWx1ZV9vYmplY3R3cml0ZXJfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCww
IEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3Jt
YXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJp
YnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2RlZmF1bHRfdmFsdWVfb2JqZWN0d3JpdGVyLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZXhwZWN0aW5nX29iamVjdHdy
aXRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRh
L2RlZmF1bHRfdmFsdWVfdGVzdC5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGls
L2ludGVybmFsL3R5cGVfaW5mb190ZXN0X2hlbHBlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi91dGlsL2ludGVybmFsL2NvbnN0YW50cy5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1
dGlsIHsKLW5hbWVzcGFjZSBjb252ZXJ0ZXIgewotbmFtZXNwYWNlIHRlc3RpbmcgewotCi11c2lu
ZyBnb29nbGU6OnByb3RvYnVmOjp0ZXN0aW5nOjpEZWZhdWx0VmFsdWVUZXN0OwotCi0vLyBCYXNl
IGNsYXNzIGZvciBzZXR0aW5nIHVwIHJlcXVpcmVkIHN0YXRlIGZvciBydW5uaW5nIGRlZmF1bHQg
dmFsdWVzIHRlc3RzIG9uCi0vLyBkaWZmZXJlbnQgZGVzY3JpcHRvcnMuCi1jbGFzcyBCYXNlRGVm
YXVsdFZhbHVlT2JqZWN0V3JpdGVyVGVzdAotICAgIDogcHVibGljIDo6dGVzdGluZzo6VGVzdFdp
dGhQYXJhbTx0ZXN0aW5nOjpUeXBlSW5mb1NvdXJjZT4gewotIHByb3RlY3RlZDoKLSAgZXhwbGlj
aXQgQmFzZURlZmF1bHRWYWx1ZU9iamVjdFdyaXRlclRlc3QoY29uc3QgRGVzY3JpcHRvciogZGVz
Y3JpcHRvcikKLSAgICAgIDogaGVscGVyXyhHZXRQYXJhbSgpKSwgbW9ja18oKSwgZXhwZWN0c18o
Jm1vY2tfKSB7Ci0gICAgaGVscGVyXy5SZXNldFR5cGVJbmZvKGRlc2NyaXB0b3IpOwotICAgIHRl
c3RpbmdfLnJlc2V0KGhlbHBlcl8uTmV3RGVmYXVsdFZhbHVlV3JpdGVyKAotICAgICAgICBzdHJp
bmcoa1R5cGVTZXJ2aWNlQmFzZVVybCkgKyAiLyIgKyBkZXNjcmlwdG9yLT5mdWxsX25hbWUoKSwg
Jm1vY2tfKSk7Ci0gIH0KLQotICB2aXJ0dWFsIH5CYXNlRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVy
VGVzdCgpIHt9Ci0KLSAgVHlwZUluZm9UZXN0SGVscGVyIGhlbHBlcl87Ci0gIE1vY2tPYmplY3RX
cml0ZXIgbW9ja187Ci0gIEV4cGVjdGluZ09iamVjdFdyaXRlciBleHBlY3RzXzsKLSAgZ29vZ2xl
Ojpwcm90b2J1Zjo6c2NvcGVkX3B0cjxEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXI+IHRlc3Rpbmdf
OwotfTsKLQotLy8gVGVzdHMgdG8gY292ZXIgc29tZSBiYXNpYyBEZWZhdWx0VmFsdWVPYmplY3RX
cml0ZXIgdXNlIGNhc2VzLiBNb3JlIHRlc3RzIGFyZQotLy8gaW4gdGhlIG1hcnNoYWxsaW5nX3Rl
c3QuY2MgYW5kIHRyYW5zbGF0b3JfaW50ZWdyYXRpb25fdGVzdC5jYy4KLWNsYXNzIERlZmF1bHRW
YWx1ZU9iamVjdFdyaXRlclRlc3QgOiBwdWJsaWMgQmFzZURlZmF1bHRWYWx1ZU9iamVjdFdyaXRl
clRlc3QgewotIHByb3RlY3RlZDoKLSAgRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyVGVzdCgpCi0g
ICAgICA6IEJhc2VEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXJUZXN0KERlZmF1bHRWYWx1ZVRlc3Q6
OmRlc2NyaXB0b3IoKSkge30KLSAgdmlydHVhbCB+RGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVyVGVz
dCgpIHt9Ci19OwotCi1JTlNUQU5USUFURV9URVNUX0NBU0VfUChEaWZmZXJlbnRUeXBlSW5mb1Nv
dXJjZVRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWVPYmplY3RXcml0
ZXJUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgOjp0ZXN0aW5nOjpWYWx1ZXMoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGluZzo6VVNFX1RZUEVfUkVTT0xWRVIpKTsKLQot
VEVTVF9QKERlZmF1bHRWYWx1ZU9iamVjdFdyaXRlclRlc3QsIEVtcHR5KSB7Ci0gIC8vIFNldCBl
eHBlY3RhdGlvbgotICBleHBlY3RzXy5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVuZGVyRG91
YmxlKCJkb3VibGVWYWx1ZSIsIDAuMCkKLSAgICAgIC0+U3RhcnRMaXN0KCJyZXBlYXRlZERvdWJs
ZSIpCi0gICAgICAtPkVuZExpc3QoKQotICAgICAgLT5SZW5kZXJGbG9hdCgiZmxvYXRWYWx1ZSIs
IDAuMCkKLSAgICAgIC0+UmVuZGVySW50NjQoImludDY0VmFsdWUiLCAwKQotICAgICAgLT5SZW5k
ZXJVaW50NjQoInVpbnQ2NFZhbHVlIiwgMCkKLSAgICAgIC0+UmVuZGVySW50MzIoImludDMyVmFs
dWUiLCAwKQotICAgICAgLT5SZW5kZXJVaW50MzIoInVpbnQzMlZhbHVlIiwgMCkKLSAgICAgIC0+
UmVuZGVyQm9vbCgiYm9vbFZhbHVlIiwgZmFsc2UpCi0gICAgICAtPlJlbmRlclN0cmluZygic3Ry
aW5nVmFsdWUiLCAiIikKLSAgICAgIC0+UmVuZGVyQnl0ZXMoImJ5dGVzVmFsdWUiLCAiIikKLSAg
ICAgIC0+UmVuZGVyU3RyaW5nKCJlbnVtVmFsdWUiLCAiRU5VTV9GSVJTVCIpCi0gICAgICAtPkVu
ZE9iamVjdCgpOwotCi0gIC8vIEFjdHVhbCB0ZXN0aW5nCi0gIHRlc3RpbmdfLT5TdGFydE9iamVj
dCgiIiktPkVuZE9iamVjdCgpOwotfQotCi1URVNUX1AoRGVmYXVsdFZhbHVlT2JqZWN0V3JpdGVy
VGVzdCwgTm9uRGVmYXVsdERvdWJsZSkgewotICAvLyBTZXQgZXhwZWN0YXRpb24KLSAgZXhwZWN0
c18uU3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlckRvdWJsZSgiZG91YmxlVmFsdWUiLCAx
LjApCi0gICAgICAtPlN0YXJ0TGlzdCgicmVwZWF0ZWREb3VibGUiKQotICAgICAgLT5FbmRMaXN0
KCkKLSAgICAgIC0+UmVuZGVyRmxvYXQoImZsb2F0VmFsdWUiLCAwLjApCi0gICAgICAtPlJlbmRl
ckludDY0KCJpbnQ2NFZhbHVlIiwgMCkKLSAgICAgIC0+UmVuZGVyVWludDY0KCJ1aW50NjRWYWx1
ZSIsIDApCi0gICAgICAtPlJlbmRlckludDMyKCJpbnQzMlZhbHVlIiwgMCkKLSAgICAgIC0+UmVu
ZGVyVWludDMyKCJ1aW50MzJWYWx1ZSIsIDApCi0gICAgICAtPlJlbmRlckJvb2woImJvb2xWYWx1
ZSIsIGZhbHNlKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInN0cmluZ1ZhbHVlIiwgIiIpCi0gICAg
ICAtPlJlbmRlclN0cmluZygiZW51bVZhbHVlIiwgIkVOVU1fRklSU1QiKQotICAgICAgLT5FbmRP
YmplY3QoKTsKLQotICAvLyBBY3R1YWwgdGVzdGluZwotICB0ZXN0aW5nXy0+U3RhcnRPYmplY3Qo
IiIpLT5SZW5kZXJEb3VibGUoImRvdWJsZVZhbHVlIiwgMS4wKS0+RW5kT2JqZWN0KCk7Ci19Ci0K
LVRFU1RfUChEZWZhdWx0VmFsdWVPYmplY3RXcml0ZXJUZXN0LCBTaG91bGRSZXRhaW5Vbmtub3du
RmllbGQpIHsKLSAgLy8gU2V0IGV4cGVjdGF0aW9uCi0gIGV4cGVjdHNfLlN0YXJ0T2JqZWN0KCIi
KQotICAgICAgLT5SZW5kZXJEb3VibGUoImRvdWJsZVZhbHVlIiwgMS4wKQotICAgICAgLT5TdGFy
dExpc3QoInJlcGVhdGVkRG91YmxlIikKLSAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAtPlJlbmRl
ckZsb2F0KCJmbG9hdFZhbHVlIiwgMC4wKQotICAgICAgLT5SZW5kZXJJbnQ2NCgiaW50NjRWYWx1
ZSIsIDApCi0gICAgICAtPlJlbmRlclVpbnQ2NCgidWludDY0VmFsdWUiLCAwKQotICAgICAgLT5S
ZW5kZXJJbnQzMigiaW50MzJWYWx1ZSIsIDApCi0gICAgICAtPlJlbmRlclVpbnQzMigidWludDMy
VmFsdWUiLCAwKQotICAgICAgLT5SZW5kZXJCb29sKCJib29sVmFsdWUiLCBmYWxzZSkKLSAgICAg
IC0+UmVuZGVyU3RyaW5nKCJzdHJpbmdWYWx1ZSIsICIiKQotICAgICAgLT5SZW5kZXJTdHJpbmco
InVua25vd24iLCAiYWJjIikKLSAgICAgIC0+U3RhcnRPYmplY3QoInVua25vd25PYmplY3QiKQot
ICAgICAgLT5SZW5kZXJTdHJpbmcoInVua25vd24iLCAiZGVmIikKLSAgICAgIC0+RW5kT2JqZWN0
KCkKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJlbnVtVmFsdWUiLCAiRU5VTV9GSVJTVCIpCi0gICAg
ICAtPkVuZE9iamVjdCgpOwotCi0gIC8vIEFjdHVhbCB0ZXN0aW5nCi0gIHRlc3RpbmdfLT5TdGFy
dE9iamVjdCgiIikKLSAgICAgIC0+UmVuZGVyRG91YmxlKCJkb3VibGVWYWx1ZSIsIDEuMCkKLSAg
ICAgIC0+UmVuZGVyU3RyaW5nKCJ1bmtub3duIiwgImFiYyIpCi0gICAgICAtPlN0YXJ0T2JqZWN0
KCJ1bmtub3duT2JqZWN0IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ1bmtub3duIiwgImRlZiIp
Ci0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpOwotfQotCi0KLX0gIC8v
IG5hbWVzcGFjZSB0ZXN0aW5nCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVyCi19ICAvLyBuYW1l
c3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9lcnJvcl9s
aXN0ZW5lci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2Vycm9yX2xpc3Rl
bmVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzgzMDdiYWUyZjlkNWVhNzlj
ZDJhOGMwOTNlZGI2ZjNhNWIzOTlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2Vycm9yX2xpc3Rl
bmVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5h
bC9lcnJvcl9saXN0ZW5lci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLQotCi19ICAv
LyBuYW1lc3BhY2UgY29udmVydGVyCi19ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNw
YWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9lcnJvcl9saXN0ZW5lci5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3V0aWwvaW50ZXJuYWwvZXJyb3JfbGlzdGVuZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggM2YwNjM5MzY0YzUwZTU2MzA0MGY2MmQ1ZDJmY2ExMTE5NTBjZjMyNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvdXRpbC9pbnRlcm5hbC9lcnJvcl9saXN0ZW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTAzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVm
IEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9FUlJPUl9MSVNURU5FUl9IX18KLSNkZWZp
bmUgR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVSX0VSUk9SX0xJU1RFTkVSX0hfXwotCi0j
aW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9Q
VFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5k
aWYKLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL2NhbGxiYWNrLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5n
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvbG9jYXRpb25fdHJh
Y2tlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwaWVjZS5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRp
bCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLQotLy8gSW50ZXJmYWNlIGZvciBlcnJvciBsaXN0
ZW5lci4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBFcnJvckxpc3RlbmVyIHsKLSBwdWJsaWM6
Ci0gIHZpcnR1YWwgfkVycm9yTGlzdGVuZXIoKSB7fQotCi0gIC8vIFJlcG9ydHMgYW4gaW52YWxp
ZCBuYW1lIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi4KLSAgdmlydHVhbCB2b2lkIEludmFsaWROYW1l
KGNvbnN0IExvY2F0aW9uVHJhY2tlckludGVyZmFjZSYgbG9jLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nUGllY2UgdW5rbm93bl9uYW1lLCBTdHJpbmdQaWVjZSBtZXNzYWdlKSA9
IDA7Ci0KLSAgLy8gUmVwb3J0cyBhbiBpbnZhbGlkIHZhbHVlIGZvciBhIGZpZWxkLgotICB2aXJ0
dWFsIHZvaWQgSW52YWxpZFZhbHVlKGNvbnN0IExvY2F0aW9uVHJhY2tlckludGVyZmFjZSYgbG9j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlIHR5cGVfbmFtZSwgU3Ry
aW5nUGllY2UgdmFsdWUpID0gMDsKLQotICAvLyBSZXBvcnRzIGEgbWlzc2luZyByZXF1aXJlZCBm
aWVsZC4KLSAgdmlydHVhbCB2b2lkIE1pc3NpbmdGaWVsZChjb25zdCBMb2NhdGlvblRyYWNrZXJJ
bnRlcmZhY2UmIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBt
aXNzaW5nX25hbWUpID0gMDsKLQotIHByb3RlY3RlZDoKLSAgRXJyb3JMaXN0ZW5lcigpIHt9Ci0K
LSBwcml2YXRlOgotICAvLyBEbyBub3QgYWRkIGFueSBkYXRhIG1lbWJlcnMgdG8gdGhpcyBjbGFz
cy4KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEVycm9yTGlzdGVuZXIpOwot
fTsKLQotLy8gQW4gZXJyb3IgbGlzdGVuZXIgdGhhdCBpZ25vcmVzIGFsbCBlcnJvcnMuCi1jbGFz
cyBMSUJQUk9UT0JVRl9FWFBPUlQgTm9vcEVycm9yTGlzdGVuZXIgOiBwdWJsaWMgRXJyb3JMaXN0
ZW5lciB7Ci0gcHVibGljOgotICBOb29wRXJyb3JMaXN0ZW5lcigpIHt9Ci0gIHZpcnR1YWwgfk5v
b3BFcnJvckxpc3RlbmVyKCkge30KLQotICB2aXJ0dWFsIHZvaWQgSW52YWxpZE5hbWUoY29uc3Qg
TG9jYXRpb25UcmFja2VySW50ZXJmYWNlJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdQaWVjZSB1bmtub3duX25hbWUsIFN0cmluZ1BpZWNlIG1lc3NhZ2UpIHt9Ci0KLSAg
dmlydHVhbCB2b2lkIEludmFsaWRWYWx1ZShjb25zdCBMb2NhdGlvblRyYWNrZXJJbnRlcmZhY2Um
IGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSB0eXBlX25hbWUs
IFN0cmluZ1BpZWNlIHZhbHVlKSB7fQotCi0gIHZpcnR1YWwgdm9pZCBNaXNzaW5nRmllbGQoY29u
c3QgTG9jYXRpb25UcmFja2VySW50ZXJmYWNlJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nUGllY2UgbWlzc2luZ19uYW1lKSB7fQotCi0gcHJpdmF0ZToKLSAgR09PR0xF
X0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE5vb3BFcnJvckxpc3RlbmVyKTsKLX07Ci0KLQot
fSAgLy8gbmFtZXNwYWNlIGNvbnZlcnRlcgotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5h
bWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdP
T0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9FUlJPUl9MSVNURU5FUl9IX18KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2V4cGVjdGluZ19vYmplY3R3cml0
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2V4cGVjdGluZ19vYmplY3R3
cml0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU5OGRkZDg2YTY5M2EyZmQw
Nzg1OTNiNTg4Y2YyNDAwMmUxZjhlYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9leHBlY3Rpbmdf
b2JqZWN0d3JpdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1VUSUxf
Q09OVkVSVEVSX0VYUEVDVElOR19PQkpFQ1RXUklURVJfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9U
T0JVRl9VVElMX0NPTlZFUlRFUl9FWFBFQ1RJTkdfT0JKRUNUV1JJVEVSX0hfXwotCi0vLyBBbiBp
bXBsZW1lbnRhdGlvbiBvZiBPYmplY3RXcml0ZXIgdGhhdCBhdXRvbWF0aWNhbGx5IHNldHMgdGhl
Ci0vLyBnbW9jayBleHBlY3RhdGlvbnMgZm9yIHRoZSByZXNwb25zZSB0byBhIG1ldGhvZC4gRXZl
cnkgbWV0aG9kCi0vLyByZXR1cm5zIHRoZSBvYmplY3QgaXRzZWxmIGZvciBjaGFpbmluZy4KLS8v
Ci0vLyBVc2FnZToKLS8vICAgLy8gU2V0dXAKLS8vICAgTW9ja09iamVjdFdyaXRlciBtb2NrOwot
Ly8gICBFeHBlY3RpbmdPYmplY3RXcml0ZXIgb3coJm1vY2spOwotLy8KLS8vICAgLy8gU2V0IGV4
cGVjdGF0aW9uCi0vLyAgIG93LlN0YXJ0T2JqZWN0KCIiKQotLy8gICAgICAgLT5SZW5kZXJTdHJp
bmcoImtleSIsICJ2YWx1ZSIpCi0vLyAgICAgLT5FbmRPYmplY3QoKTsKLS8vCi0vLyAgIC8vIEFj
dHVhbCB0ZXN0aW5nCi0vLyAgIG1vY2suU3RhcnRPYmplY3QoU3RyaW5nUGllY2UoKSkKLS8vICAg
ICAgICAgLT5SZW5kZXJTdHJpbmcoImtleSIsICJ2YWx1ZSIpCi0vLyAgICAgICAtPkVuZE9iamVj
dCgpOwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29iamVjdF93cml0ZXIuaD4KLSNpbmNs
dWRlIDxnbW9jay9nbW9jay5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLQotdXNpbmcg
dGVzdGluZzo6SXNFbXB0eTsKLXVzaW5nIHRlc3Rpbmc6Ok5hblNlbnNpdGl2ZURvdWJsZUVxOwot
dXNpbmcgdGVzdGluZzo6TmFuU2Vuc2l0aXZlRmxvYXRFcTsKLXVzaW5nIHRlc3Rpbmc6OlJldHVy
bjsKLXVzaW5nIHRlc3Rpbmc6OlN0ckVxOwotdXNpbmcgdGVzdGluZzo6VHlwZWRFcTsKLQotY2xh
c3MgTW9ja09iamVjdFdyaXRlciA6IHB1YmxpYyBPYmplY3RXcml0ZXIgewotIHB1YmxpYzoKLSAg
TW9ja09iamVjdFdyaXRlcigpIHt9Ci0KLSAgTU9DS19NRVRIT0QxKFN0YXJ0T2JqZWN0LCBPYmpl
Y3RXcml0ZXIqKFN0cmluZ1BpZWNlKSk7Ci0gIE1PQ0tfTUVUSE9EMChFbmRPYmplY3QsIE9iamVj
dFdyaXRlciooKSk7Ci0gIE1PQ0tfTUVUSE9EMShTdGFydExpc3QsIE9iamVjdFdyaXRlciooU3Ry
aW5nUGllY2UpKTsKLSAgTU9DS19NRVRIT0QwKEVuZExpc3QsIE9iamVjdFdyaXRlciooKSk7Ci0g
IE1PQ0tfTUVUSE9EMihSZW5kZXJCb29sLCBPYmplY3RXcml0ZXIqKFN0cmluZ1BpZWNlLCBib29s
KSk7Ci0gIE1PQ0tfTUVUSE9EMihSZW5kZXJJbnQzMiwgT2JqZWN0V3JpdGVyKihTdHJpbmdQaWVj
ZSwgaW50MzIpKTsKLSAgTU9DS19NRVRIT0QyKFJlbmRlclVpbnQzMiwgT2JqZWN0V3JpdGVyKihT
dHJpbmdQaWVjZSwgdWludDMyKSk7Ci0gIE1PQ0tfTUVUSE9EMihSZW5kZXJJbnQ2NCwgT2JqZWN0
V3JpdGVyKihTdHJpbmdQaWVjZSwgaW50NjQpKTsKLSAgTU9DS19NRVRIT0QyKFJlbmRlclVpbnQ2
NCwgT2JqZWN0V3JpdGVyKihTdHJpbmdQaWVjZSwgdWludDY0KSk7Ci0gIE1PQ0tfTUVUSE9EMihS
ZW5kZXJEb3VibGUsIE9iamVjdFdyaXRlciooU3RyaW5nUGllY2UsIGRvdWJsZSkpOwotICBNT0NL
X01FVEhPRDIoUmVuZGVyRmxvYXQsIE9iamVjdFdyaXRlciooU3RyaW5nUGllY2UsIGZsb2F0KSk7
Ci0gIE1PQ0tfTUVUSE9EMihSZW5kZXJTdHJpbmcsIE9iamVjdFdyaXRlciooU3RyaW5nUGllY2Us
IFN0cmluZ1BpZWNlKSk7Ci0gIE1PQ0tfTUVUSE9EMihSZW5kZXJCeXRlcywgT2JqZWN0V3JpdGVy
KihTdHJpbmdQaWVjZSwgU3RyaW5nUGllY2UpKTsKLSAgTU9DS19NRVRIT0QxKFJlbmRlck51bGws
IE9iamVjdFdyaXRlciooU3RyaW5nUGllY2UpKTsKLX07Ci0KLWNsYXNzIEV4cGVjdGluZ09iamVj
dFdyaXRlciA6IHB1YmxpYyBPYmplY3RXcml0ZXIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgRXhw
ZWN0aW5nT2JqZWN0V3JpdGVyKE1vY2tPYmplY3RXcml0ZXIqIG1vY2spIDogbW9ja18obW9jaykg
e30KLQotICB2aXJ0dWFsIE9iamVjdFdyaXRlciogU3RhcnRPYmplY3QoU3RyaW5nUGllY2UgbmFt
ZSkgewotICAgIChuYW1lLmVtcHR5KCkKLSAgICAgICAgID8gRVhQRUNUX0NBTEwoKm1vY2tfLCBT
dGFydE9iamVjdChJc0VtcHR5KCkpKQotICAgICAgICAgOiBFWFBFQ1RfQ0FMTCgqbW9ja18sIFN0
YXJ0T2JqZWN0KFN0ckVxKG5hbWUuVG9TdHJpbmcoKSkpKSkKLSAgICAgICAgLldpbGxPbmNlKFJl
dHVybihtb2NrXykpCi0gICAgICAgIC5SZXRpcmVzT25TYXR1cmF0aW9uKCk7Ci0gICAgcmV0dXJu
IHRoaXM7Ci0gIH0KLQotICB2aXJ0dWFsIE9iamVjdFdyaXRlciogRW5kT2JqZWN0KCkgewotICAg
IEVYUEVDVF9DQUxMKCptb2NrXywgRW5kT2JqZWN0KCkpCi0gICAgICAgIC5XaWxsT25jZShSZXR1
cm4obW9ja18pKQotICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOwotICAgIHJldHVybiB0
aGlzOwotICB9Ci0KLSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIFN0YXJ0TGlzdChTdHJpbmdQaWVj
ZSBuYW1lKSB7Ci0gICAgKG5hbWUuZW1wdHkoKQotICAgICAgICAgPyBFWFBFQ1RfQ0FMTCgqbW9j
a18sIFN0YXJ0TGlzdChJc0VtcHR5KCkpKQotICAgICAgICAgOiBFWFBFQ1RfQ0FMTCgqbW9ja18s
IFN0YXJ0TGlzdChTdHJFcShuYW1lLlRvU3RyaW5nKCkpKSkpCi0gICAgICAgIC5XaWxsT25jZShS
ZXR1cm4obW9ja18pKQotICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOwotICAgIHJldHVy
biB0aGlzOwotICB9Ci0KLSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIEVuZExpc3QoKSB7Ci0gICAg
RVhQRUNUX0NBTEwoKm1vY2tfLCBFbmRMaXN0KCkpCi0gICAgICAgIC5XaWxsT25jZShSZXR1cm4o
bW9ja18pKQotICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOwotICAgIHJldHVybiB0aGlz
OwotICB9Ci0KLSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIFJlbmRlckJvb2woU3RyaW5nUGllY2Ug
bmFtZSwgYm9vbCB2YWx1ZSkgewotICAgIChuYW1lLmVtcHR5KCkKLSAgICAgICAgID8gRVhQRUNU
X0NBTEwoKm1vY2tfLCBSZW5kZXJCb29sKElzRW1wdHkoKSwgVHlwZWRFcTxib29sPih2YWx1ZSkp
KQotICAgICAgICAgOiBFWFBFQ1RfQ0FMTCgqbW9ja18sIFJlbmRlckJvb2woU3RyRXEobmFtZS5U
b1N0cmluZygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5
cGVkRXE8Ym9vbD4odmFsdWUpKSkpCi0gICAgICAgIC5XaWxsT25jZShSZXR1cm4obW9ja18pKQot
ICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0K
LSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIFJlbmRlckludDMyKFN0cmluZ1BpZWNlIG5hbWUsIGlu
dDMyIHZhbHVlKSB7Ci0gICAgKG5hbWUuZW1wdHkoKQotICAgICAgICAgPyBFWFBFQ1RfQ0FMTCgq
bW9ja18sIFJlbmRlckludDMyKElzRW1wdHkoKSwgVHlwZWRFcTxpbnQzMj4odmFsdWUpKSkKLSAg
ICAgICAgIDogRVhQRUNUX0NBTEwoKm1vY2tfLCBSZW5kZXJJbnQzMihTdHJFcShuYW1lLlRvU3Ry
aW5nKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVk
RXE8aW50MzI+KHZhbHVlKSkpKQotICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKG1vY2tfKSkKLSAg
ICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0g
IHZpcnR1YWwgT2JqZWN0V3JpdGVyKiBSZW5kZXJVaW50MzIoU3RyaW5nUGllY2UgbmFtZSwgdWlu
dDMyIHZhbHVlKSB7Ci0gICAgKG5hbWUuZW1wdHkoKQotICAgICAgICAgPyBFWFBFQ1RfQ0FMTCgq
bW9ja18sIFJlbmRlclVpbnQzMihJc0VtcHR5KCksIFR5cGVkRXE8dWludDMyPih2YWx1ZSkpKQot
ICAgICAgICAgOiBFWFBFQ1RfQ0FMTCgqbW9ja18sIFJlbmRlclVpbnQzMihTdHJFcShuYW1lLlRv
U3RyaW5nKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
eXBlZEVxPHVpbnQzMj4odmFsdWUpKSkpCi0gICAgICAgIC5XaWxsT25jZShSZXR1cm4obW9ja18p
KQotICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOwotICAgIHJldHVybiB0aGlzOwotICB9
Ci0KLSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIFJlbmRlckludDY0KFN0cmluZ1BpZWNlIG5hbWUs
IGludDY0IHZhbHVlKSB7Ci0gICAgKG5hbWUuZW1wdHkoKQotICAgICAgICAgPyBFWFBFQ1RfQ0FM
TCgqbW9ja18sIFJlbmRlckludDY0KElzRW1wdHkoKSwgVHlwZWRFcTxpbnQ2ND4odmFsdWUpKSkK
LSAgICAgICAgIDogRVhQRUNUX0NBTEwoKm1vY2tfLCBSZW5kZXJJbnQ2NChTdHJFcShuYW1lLlRv
U3RyaW5nKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5
cGVkRXE8aW50NjQ+KHZhbHVlKSkpKQotICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKG1vY2tfKSkK
LSAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQot
Ci0gIHZpcnR1YWwgT2JqZWN0V3JpdGVyKiBSZW5kZXJVaW50NjQoU3RyaW5nUGllY2UgbmFtZSwg
dWludDY0IHZhbHVlKSB7Ci0gICAgKG5hbWUuZW1wdHkoKQotICAgICAgICAgPyBFWFBFQ1RfQ0FM
TCgqbW9ja18sIFJlbmRlclVpbnQ2NChJc0VtcHR5KCksIFR5cGVkRXE8dWludDY0Pih2YWx1ZSkp
KQotICAgICAgICAgOiBFWFBFQ1RfQ0FMTCgqbW9ja18sIFJlbmRlclVpbnQ2NChTdHJFcShuYW1l
LlRvU3RyaW5nKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUeXBlZEVxPHVpbnQ2ND4odmFsdWUpKSkpCi0gICAgICAgIC5XaWxsT25jZShSZXR1cm4obW9j
a18pKQotICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOwotICAgIHJldHVybiB0aGlzOwot
ICB9Ci0KLSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIFJlbmRlckRvdWJsZShTdHJpbmdQaWVjZSBu
YW1lLCBkb3VibGUgdmFsdWUpIHsKLSAgICAobmFtZS5lbXB0eSgpCi0gICAgICAgICA/IEVYUEVD
VF9DQUxMKCptb2NrXywgUmVuZGVyRG91YmxlKElzRW1wdHkoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFuU2Vuc2l0aXZlRG91YmxlRXEodmFsdWUpKSkK
LSAgICAgICAgIDogRVhQRUNUX0NBTEwoKm1vY2tfLCBSZW5kZXJEb3VibGUoU3RyRXEobmFtZS5U
b1N0cmluZygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TmFuU2Vuc2l0aXZlRG91YmxlRXEodmFsdWUpKSkpCi0gICAgICAgIC5XaWxsT25jZShSZXR1cm4o
bW9ja18pKQotICAgICAgICAuUmV0aXJlc09uU2F0dXJhdGlvbigpOwotICAgIHJldHVybiB0aGlz
OwotICB9Ci0KLSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIFJlbmRlckZsb2F0KFN0cmluZ1BpZWNl
IG5hbWUsIGZsb2F0IHZhbHVlKSB7Ci0gICAgKG5hbWUuZW1wdHkoKQotICAgICAgICAgPyBFWFBF
Q1RfQ0FMTCgqbW9ja18sIFJlbmRlckZsb2F0KElzRW1wdHkoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOYW5TZW5zaXRpdmVGbG9hdEVxKHZhbHVlKSkpCi0g
ICAgICAgICA6IEVYUEVDVF9DQUxMKCptb2NrXywgUmVuZGVyRmxvYXQoU3RyRXEobmFtZS5Ub1N0
cmluZygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW5T
ZW5zaXRpdmVGbG9hdEVxKHZhbHVlKSkpKQotICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKG1vY2tf
KSkKLSAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKTsKLSAgICByZXR1cm4gdGhpczsKLSAg
fQotCi0gIHZpcnR1YWwgT2JqZWN0V3JpdGVyKiBSZW5kZXJTdHJpbmcoU3RyaW5nUGllY2UgbmFt
ZSwgU3RyaW5nUGllY2UgdmFsdWUpIHsKLSAgICAobmFtZS5lbXB0eSgpCi0gICAgICAgICA/IEVY
UEVDVF9DQUxMKCptb2NrXywgUmVuZGVyU3RyaW5nKElzRW1wdHkoKSwKLSAgICAgICAgICAgICAg
IFR5cGVkRXE8U3RyaW5nUGllY2U+KHZhbHVlLlRvU3RyaW5nKCkpKSkKLSAgICAgICAgIDogRVhQ
RUNUX0NBTEwoKm1vY2tfLCBSZW5kZXJTdHJpbmcoU3RyRXEobmFtZS5Ub1N0cmluZygpKSwKLSAg
ICAgICAgICAgICAgIFR5cGVkRXE8U3RyaW5nUGllY2U+KHZhbHVlLlRvU3RyaW5nKCkpKSkpCi0g
ICAgICAgIC5XaWxsT25jZShSZXR1cm4obW9ja18pKQotICAgICAgICAuUmV0aXJlc09uU2F0dXJh
dGlvbigpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIHZpcnR1YWwgT2JqZWN0V3JpdGVyKiBS
ZW5kZXJCeXRlcyhTdHJpbmdQaWVjZSBuYW1lLCBTdHJpbmdQaWVjZSB2YWx1ZSkgewotICAgIChu
YW1lLmVtcHR5KCkKLSAgICAgICAgID8gRVhQRUNUX0NBTEwoKm1vY2tfLCBSZW5kZXJCeXRlcyhJ
c0VtcHR5KCksIFR5cGVkRXE8U3RyaW5nUGllY2U+KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLlRvU3RyaW5nKCkpKSkKLSAg
ICAgICAgIDogRVhQRUNUX0NBTEwoKm1vY2tfLAotICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJCeXRlcyhTdHJFcShuYW1lLlRvU3RyaW5nKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUeXBlZEVxPFN0cmluZ1BpZWNlPih2YWx1ZS5Ub1N0cmluZygpKSkpKQotICAg
ICAgICAuV2lsbE9uY2UoUmV0dXJuKG1vY2tfKSkKLSAgICAgICAgLlJldGlyZXNPblNhdHVyYXRp
b24oKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIHZpcnR1YWwgT2JqZWN0V3JpdGVyKiBS
ZW5kZXJOdWxsKFN0cmluZ1BpZWNlIG5hbWUpIHsKLSAgICAobmFtZS5lbXB0eSgpID8gRVhQRUNU
X0NBTEwoKm1vY2tfLCBSZW5kZXJOdWxsKElzRW1wdHkoKSkpCi0gICAgICAgICAgICAgICAgICA6
IEVYUEVDVF9DQUxMKCptb2NrXywgUmVuZGVyTnVsbChTdHJFcShuYW1lLlRvU3RyaW5nKCkpKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4obW9ja18pKQotICAgICAg
ICAgICAgICAgICAgICAgICAgLlJldGlyZXNPblNhdHVyYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRo
aXM7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIE1vY2tPYmplY3RXcml0ZXIqIG1vY2tfOwotCi0gIEdP
T0dMRV9ESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoRXhwZWN0aW5nT2JqZWN0V3JpdGVy
KTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGls
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2Vu
ZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfRVhQRUNUSU5HX09CSkVDVFdS
SVRFUl9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2Zp
ZWxkX21hc2tfdXRpbGl0eS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2Zp
ZWxkX21hc2tfdXRpbGl0eS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBlOGZj
ODhhNGY5OWY4NzJjYzlkMmZhYjZmMjAxM2UzYWJmNTg0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5h
bC9maWVsZF9tYXNrX3V0aWxpdHkuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvdXRpbC9pbnRlcm5hbC9maWVsZF9tYXNrX3V0aWxpdHkuaD4KLQotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL3N0YXR1c19tYWNyb3MuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2Ug
cHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwgewotbmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0KLW5h
bWVzcGFjZSB7Ci1pbmxpbmUgdXRpbDo6U3RhdHVzIENhbGxQYXRoU2luayhQYXRoU2lua0NhbGxi
YWNrIHBhdGhfc2luaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
UGllY2UgYXJnKSB7Ci0gIHJldHVybiBwYXRoX3NpbmstPlJ1bihhcmcpOwotfQotCi11dGlsOjpT
dGF0dXMgQ3JlYXRlUHVibGljRXJyb3IodXRpbDo6ZXJyb3I6OkNvZGUgY29kZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbWVzc2FnZSkgewotICByZXR1
cm4gdXRpbDo6U3RhdHVzKGNvZGUsIG1lc3NhZ2UpOwotfQotCi0vLyBBcHBlbmRzIGEgRmllbGRN
YXNrIHBhdGggc2VnbWVudCB0byBhIHByZWZpeC4KLXN0cmluZyBBcHBlbmRQYXRoU2VnbWVudFRv
UHJlZml4KFN0cmluZ1BpZWNlIHByZWZpeCwgU3RyaW5nUGllY2Ugc2VnbWVudCkgewotICBpZiAo
cHJlZml4LmVtcHR5KCkpIHsKLSAgICByZXR1cm4gc2VnbWVudC5Ub1N0cmluZygpOwotICB9Ci0g
IGlmIChzZWdtZW50LmVtcHR5KCkpIHsKLSAgICByZXR1cm4gcHJlZml4LlRvU3RyaW5nKCk7Ci0g
IH0KLSAgLy8gSWYgdGhlIHNlZ21lbnQgaXMgYSBtYXAga2V5LCBhcHBlbmRzIGl0IHRvIHRoZSBw
cmVmaXggd2l0aG91dCB0aGUgIi4iLgotICBpZiAoc2VnbWVudC5zdGFydHNfd2l0aCgiW1wiIikp
IHsKLSAgICByZXR1cm4gU3RyQ2F0KHByZWZpeCwgc2VnbWVudCk7Ci0gIH0KLSAgcmV0dXJuIFN0
ckNhdChwcmVmaXgsICIuIiwgc2VnbWVudCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1zdHJp
bmcgQ29udmVydEZpZWxkTWFza1BhdGgoY29uc3QgU3RyaW5nUGllY2UgcGF0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb252ZXJ0ZXJDYWxsYmFjayBjb252ZXJ0ZXIpIHsKLSAgc3Ry
aW5nIHJlc3VsdDsKLSAgcmVzdWx0LnJlc2VydmUocGF0aC5zaXplKCkgPDwgMSk7Ci0KLSAgYm9v
bCBpc19xdW90ZWQgPSBmYWxzZTsKLSAgYm9vbCBpc19lc2NhcGluZyA9IGZhbHNlOwotICBpbnQg
Y3VycmVudF9zZWdtZW50X3N0YXJ0ID0gMDsKLQotICAvLyBMb29wcyB1bnRpbCAxIHBhc3NlZCB0
aGUgZW5kIG9mIHRoZSBpbnB1dCB0byBtYWtlIGhhbmRsaW5nIHRoZSBsYXN0Ci0gIC8vIHNlZ21l
bnQgZWFzaWVyLgotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8PSBwYXRoLnNpemUoKTsgKytpKSB7
Ci0gICAgLy8gT3V0cHV0cyBxdW90ZWQgc3RyaW5nIGFzLWlzLgotICAgIGlmIChpc19xdW90ZWQp
IHsKLSAgICAgIGlmIChpID09IHBhdGguc2l6ZSgpKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotICAgICAgcmVzdWx0LnB1c2hfYmFjayhwYXRoW2ldKTsKLSAgICAgIGlmIChpc19lc2NhcGlu
ZykgewotICAgICAgICBpc19lc2NhcGluZyA9IGZhbHNlOwotICAgICAgfSBlbHNlIGlmIChwYXRo
W2ldID09ICdcXCcpIHsKLSAgICAgICAgaXNfZXNjYXBpbmcgPSB0cnVlOwotICAgICAgfSBlbHNl
IGlmIChwYXRoW2ldID09ICdcIicpIHsKLSAgICAgICAgY3VycmVudF9zZWdtZW50X3N0YXJ0ID0g
aSArIDE7Ci0gICAgICAgIGlzX3F1b3RlZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgY29udGlu
dWU7Ci0gICAgfQotICAgIGlmIChpID09IHBhdGguc2l6ZSgpIHx8IHBhdGhbaV0gPT0gJy4nIHx8
IHBhdGhbaV0gPT0gJygnIHx8Ci0gICAgICAgIHBhdGhbaV0gPT0gJyknIHx8IHBhdGhbaV0gPT0g
J1wiJykgewotICAgICAgcmVzdWx0ICs9IGNvbnZlcnRlcigKLSAgICAgICAgICBwYXRoLnN1YnN0
cihjdXJyZW50X3NlZ21lbnRfc3RhcnQsIGkgLSBjdXJyZW50X3NlZ21lbnRfc3RhcnQpKTsKLSAg
ICAgIGlmIChpIDwgcGF0aC5zaXplKCkpIHsKLSAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhwYXRo
W2ldKTsKLSAgICAgIH0KLSAgICAgIGN1cnJlbnRfc2VnbWVudF9zdGFydCA9IGkgKyAxOwotICAg
IH0KLSAgICBpZiAoaSA8IHBhdGguc2l6ZSgpICYmIHBhdGhbaV0gPT0gJ1wiJykgewotICAgICAg
aXNfcXVvdGVkID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdXRp
bDo6U3RhdHVzIERlY29kZUNvbXBhY3RGaWVsZE1hc2tQYXRocyhTdHJpbmdQaWVjZSBwYXRocywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRoU2lua0NhbGxi
YWNrIHBhdGhfc2luaykgewotICBzdGFjazxzdHJpbmc+IHByZWZpeDsKLSAgaW50IGxlbmd0aCA9
IHBhdGhzLmxlbmd0aCgpOwotICBpbnQgcHJldmlvdXNfcG9zaXRpb24gPSAwOwotICBib29sIGlu
X21hcF9rZXkgPSBmYWxzZTsKLSAgYm9vbCBpc19lc2NhcGluZyA9IGZhbHNlOwotICAvLyBMb29w
cyB1bnRpbCAxIHBhc3NlZCB0aGUgZW5kIG9mIHRoZSBpbnB1dCB0byBtYWtlIHRoZSBoYW5kbGUg
b2YgdGhlIGxhc3QKLSAgLy8gc2VnbWVudCBlYXNpZXIuCi0gIGZvciAoaW50IGkgPSAwOyBpIDw9
IGxlbmd0aDsgKytpKSB7Ci0gICAgaWYgKGkgIT0gbGVuZ3RoKSB7Ci0gICAgICAvLyBTa2lwcyBl
dmVyeXRoaW5nIGluIGEgbWFwIGtleSB1bnRpbCB3ZSBoaXQgdGhlIGVuZCBvZiBpdCwgd2hpY2gg
aXMKLSAgICAgIC8vIG1hcmtlZCBieSBhbiB1bi1lc2NhcGVkICciJyBpbW1lZGlhdGVseSBmb2xs
b3dlZCBieSBhICddJy4KLSAgICAgIGlmIChpbl9tYXBfa2V5KSB7Ci0gICAgICAgIGlmIChpc19l
c2NhcGluZykgewotICAgICAgICAgIGlzX2VzY2FwaW5nID0gZmFsc2U7Ci0gICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBhdGhzW2ldID09ICdcXCcpIHsKLSAgICAg
ICAgICBpc19lc2NhcGluZyA9IHRydWU7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHBhdGhzW2ldICE9ICdcIicpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBVbi1lc2NhcGVkICciJyBtdXN0IGJlIGZvbGxvd2VkIHdpdGgg
YSAnXScuCi0gICAgICAgIGlmIChpID49IGxlbmd0aCAtIDEgfHwgcGF0aHNbaSArIDFdICE9ICdd
JykgewotICAgICAgICAgIHJldHVybiB1dGlsOjpTdGF0dXMoCi0gICAgICAgICAgICAgIHV0aWw6
OmVycm9yOjpJTlZBTElEX0FSR1VNRU5ULAotICAgICAgICAgICAgICBTdHJDYXQoIkludmFsaWQg
RmllbGRNYXNrICciLCBwYXRocywKLSAgICAgICAgICAgICAgICAgICAgICInLiBNYXAga2V5cyBz
aG91bGQgYmUgcmVwcmVzZW50ZWQgYXMgW1wic29tZV9rZXlcIl0uIikpOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIFRoZSBlbmQgb2YgdGhlIG1hcCBrZXkgKCJcIl0iKSBoYXMgYmVlbiBmb3VuZC4K
LSAgICAgICAgaW5fbWFwX2tleSA9IGZhbHNlOwotICAgICAgICAvLyBTa2lwcyAnXScuCi0gICAg
ICAgIGkrKzsKLSAgICAgICAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGtleSBlbmRzIGF0IHRoZSBl
bmQgb2YgYSBwYXRoIHNlZ21lbnQuCi0gICAgICAgIGlmIChpIDwgbGVuZ3RoIC0gMSAmJiBwYXRo
c1tpICsgMV0gIT0gJy4nICYmIHBhdGhzW2kgKyAxXSAhPSAnLCcgJiYKLSAgICAgICAgICAgIHBh
dGhzW2kgKyAxXSAhPSAnKScgJiYgcGF0aHNbaSArIDFdICE9ICcoJykgewotICAgICAgICAgIHJl
dHVybiB1dGlsOjpTdGF0dXMoCi0gICAgICAgICAgICAgIHV0aWw6OmVycm9yOjpJTlZBTElEX0FS
R1VNRU5ULAotICAgICAgICAgICAgICBTdHJDYXQoIkludmFsaWQgRmllbGRNYXNrICciLCBwYXRo
cywKLSAgICAgICAgICAgICAgICAgICAgICInLiBNYXAga2V5cyBzaG91bGQgYmUgYXQgdGhlIGVu
ZCBvZiBhIHBhdGggc2VnbWVudC4iKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaXNfZXNjYXBpbmcg
PSBmYWxzZTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdlIGFyZSBu
b3QgaW4gYSBtYXAga2V5LCBsb29rIGZvciB0aGUgc3RhcnQgb2Ygb25lLgotICAgICAgaWYgKHBh
dGhzW2ldID09ICdbJykgewotICAgICAgICBpZiAoaSA+PSBsZW5ndGggLSAxIHx8IHBhdGhzW2kg
KyAxXSAhPSAnXCInKSB7Ci0gICAgICAgICAgcmV0dXJuIHV0aWw6OlN0YXR1cygKLSAgICAgICAg
ICAgICAgdXRpbDo6ZXJyb3I6OklOVkFMSURfQVJHVU1FTlQsCi0gICAgICAgICAgICAgIFN0ckNh
dCgiSW52YWxpZCBGaWVsZE1hc2sgJyIsIHBhdGhzLAotICAgICAgICAgICAgICAgICAgICAgIicu
IE1hcCBrZXlzIHNob3VsZCBiZSByZXByZXNlbnRlZCBhcyBbXCJzb21lX2tleVwiXS4iKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gIltcIiIgc3RhcnRzIGEgbWFwIGtleS4KLSAgICAgICAgaW5f
bWFwX2tleSA9IHRydWU7Ci0gICAgICAgIGkrKzsgIC8vIFNraXBzIHRoZSAnXCInLgotICAgICAg
ICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBp
cyBub3QgYSBzcGVjaWFsIGNoYXJhY3RlciAoJywnLCAnKCcgb3IgJyknKSwKLSAgICAgIC8vIGNv
bnRpbnVlIHRvIHRoZSBuZXh0LgotICAgICAgaWYgKHBhdGhzW2ldICE9ICcsJyAmJiBwYXRoc1tp
XSAhPSAnKScgJiYgcGF0aHNbaV0gIT0gJygnKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAg
fQotICAgIH0KLSAgICAvLyBHZXRzIHRoZSBjdXJyZW50IHNlZ21lbnQgLSBzdWItc3RyaW5nIGJl
dHdlZW4gcHJldmlvdXMgcG9zaXRpb24gKGFmdGVyCi0gICAgLy8gJygnLCAnKScsICcsJywgb3Ig
dGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQpIGFuZCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAg
ICBTdHJpbmdQaWVjZSBzZWdtZW50ID0KLSAgICAgICAgcGF0aHMuc3Vic3RyKHByZXZpb3VzX3Bv
c2l0aW9uLCBpIC0gcHJldmlvdXNfcG9zaXRpb24pOwotICAgIHN0cmluZyBjdXJyZW50X3ByZWZp
eCA9IHByZWZpeC5lbXB0eSgpID8gIiIgOiBwcmVmaXgudG9wKCk7Ci0KLSAgICBpZiAoaSA8IGxl
bmd0aCAmJiBwYXRoc1tpXSA9PSAnKCcpIHsKLSAgICAgIC8vIEJ1aWxkcyBhIHByZWZpeCBhbmQg
c2F2ZSBpdCBpbnRvIHRoZSBzdGFjay4KLSAgICAgIHByZWZpeC5wdXNoKEFwcGVuZFBhdGhTZWdt
ZW50VG9QcmVmaXgoY3VycmVudF9wcmVmaXgsIHNlZ21lbnQpKTsKLSAgICB9IGVsc2UgaWYgKCFz
ZWdtZW50LmVtcHR5KCkpIHsKLSAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbnQgY2hhcmFjdG9yIGlz
ICcpJywgJywnIG9yIHRoZSBjdXJyZW50IHBvc2l0aW9uIGhhcwotICAgICAgLy8gcGFzc2VkIHRo
ZSBlbmQgb2YgdGhlIGlucHV0LCBidWlsZHMgYW5kIG91dHB1dHMgYSBuZXcgcGF0aHMgYnkKLSAg
ICAgIC8vIGNvbmNhdGVuYXRpbmcgdGhlIGxhc3QgcHJlZml4IHdpdGggdGhlIGN1cnJlbnQgc2Vn
bWVudC4KLSAgICAgIFJFVFVSTl9JRl9FUlJPUihDYWxsUGF0aFNpbmsoCi0gICAgICAgICAgcGF0
aF9zaW5rLCBBcHBlbmRQYXRoU2VnbWVudFRvUHJlZml4KGN1cnJlbnRfcHJlZml4LCBzZWdtZW50
KSkpOwotICAgIH0KLQotICAgIC8vIFJlbW92ZXMgdGhlIGxhc3QgcHJlZml4IGFmdGVyIHNlZWlu
ZyBhICcpJy4KLSAgICBpZiAoaSA8IGxlbmd0aCAmJiBwYXRoc1tpXSA9PSAnKScpIHsKLSAgICAg
IGlmIChwcmVmaXguZW1wdHkoKSkgewotICAgICAgICByZXR1cm4gdXRpbDo6U3RhdHVzKAotICAg
ICAgICAgICAgdXRpbDo6ZXJyb3I6OklOVkFMSURfQVJHVU1FTlQsCi0gICAgICAgICAgICBTdHJD
YXQoIkludmFsaWQgRmllbGRNYXNrICciLCBwYXRocywKLSAgICAgICAgICAgICAgICAgICAiJy4g
Q2Fubm90IGZpbmQgbWF0Y2hpbmcgJygnIGZvciBhbGwgJyknLiIpKTsKLSAgICAgIH0KLSAgICAg
IHByZWZpeC5wb3AoKTsKLSAgICB9Ci0gICAgcHJldmlvdXNfcG9zaXRpb24gPSBpICsgMTsKLSAg
fQotICBpZiAoaW5fbWFwX2tleSkgewotICAgIHJldHVybiB1dGlsOjpTdGF0dXModXRpbDo6ZXJy
b3I6OklOVkFMSURfQVJHVU1FTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0ckNhdCgi
SW52YWxpZCBGaWVsZE1hc2sgJyIsIHBhdGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIicuIENhbm5vdCBmaW5kIG1hdGNoaW5nICddJyBmb3IgYWxsICdbJy4iKSk7Ci0gIH0K
LSAgaWYgKCFwcmVmaXguZW1wdHkoKSkgewotICAgIHJldHVybiB1dGlsOjpTdGF0dXModXRpbDo6
ZXJyb3I6OklOVkFMSURfQVJHVU1FTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0ckNh
dCgiSW52YWxpZCBGaWVsZE1hc2sgJyIsIHBhdGhzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIicuIENhbm5vdCBmaW5kIG1hdGNoaW5nICcpJyBmb3IgYWxsICcoJy4iKSk7Ci0g
IH0KLSAgcmV0dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb252
ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGls
L2ludGVybmFsL2ZpZWxkX21hc2tfdXRpbGl0eS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
aW50ZXJuYWwvZmllbGRfbWFza191dGlsaXR5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU5ZjM2Zjc1NmZjYmRhZDZmOWRkYjQ0ZDE4ZmFhZGMwY2YxMWE3NTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvZmllbGRfbWFza191dGlsaXR5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiAr
MCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBm
b3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gRmllbGRNYXNr
IHJlbGF0ZWQgdXRpbGl0eSBtZXRob2RzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9VVElM
X0NPTlZFUlRFUl9GSUVMRF9NQVNLX1VUSUxJVFlfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JV
Rl9VVElMX0NPTlZFUlRFUl9GSUVMRF9NQVNLX1VUSUxJVFlfSF9fCi0KLSNpbmNsdWRlIDxmdW5j
dGlvbmFsPgotI2luY2x1ZGUgPHN0YWNrPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0
dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwaWVj
ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXMuaD4KLQotbmFtZXNw
YWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwgewotbmFt
ZXNwYWNlIGNvbnZlcnRlciB7Ci0KLXR5cGVkZWYgc3RyaW5nICgqQ29udmVydGVyQ2FsbGJhY2sp
KFN0cmluZ1BpZWNlKTsKLXR5cGVkZWYgUmVzdWx0Q2FsbGJhY2sxPHV0aWw6OlN0YXR1cywgU3Ry
aW5nUGllY2U+KiBQYXRoU2lua0NhbGxiYWNrOwotCi0vLyBBcHBsaWVzIGEgJ2NvbnZlcnRlcicg
dG8gZWFjaCBzZWdtZW50IG9mIGEgRmllbGRNYXNrIHBhdGggYW5kIHJldHVybnMgdGhlCi0vLyBy
ZXN1bHQuIFF1b3RlZCBzdHJpbmdzIGluIHRoZSAncGF0aCcgYXJlIGNvcGllZCB0byB0aGUgb3V0
cHV0IGFzLWlzIHdpdGhvdXQKLS8vIGNvbnZlcnRpbmcgdGhlaXIgY29udGVudC4gRXNjYXBpbmcg
aXMgc3VwcG9ydGVkIHdpdGhpbiBxdW90ZWQgc3RyaW5ncy4KLS8vIEZvciBleGFtcGxlLCAiYWJc
Il9jIiB3aWxsIGJlIHJldHVybmVkIGFzICJhYlwiX2MiIHdpdGhvdXQgYW55IGNoYW5nZXMuCi1z
dHJpbmcgQ29udmVydEZpZWxkTWFza1BhdGgoY29uc3QgU3RyaW5nUGllY2UgcGF0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0ZXJDYWxsYmFjayBjb252ZXJ0ZXIpOwotCi0v
LyBEZWNvZGVzIGEgY29tcGFjdCBsaXN0IG9mIEZpZWxkTWFza3MuIEZvciBleGFtcGxlLCAiYS5i
LGEuYy5kLGEuYy5lIiB3aWxsIGJlCi0vLyBkZWNvZGVkIGludG8gYSBsaXN0IG9mIGZpZWxkIHBh
dGhzIC0gImEuYiIsICJhLmMuZCIsICJhLmMuZSIuIEFuZCB0aGUgcmVzdWx0cwotLy8gd2lsbCBi
ZSBzZW50IHRvICdwYXRoX3NpbmsnLCBpLmUuICdwYXRoX3NpbmsnIHdpbGwgYmUgY2FsbGVkIG9u
Y2UgcGVyCi0vLyByZXN1bHRpbmcgcGF0aC4KLS8vIE5vdGUgdGhhdCB3ZSBhbHNvIHN1cHBvcnQg
QXBpYXJ5IHN0eWxlIEZpZWxkTWFzayBmb3JtLiBUaGUgYWJvdmUgZXhhbXBsZSBpbgotLy8gdGhl
IEFwaWFyeSBzdHlsZSB3aWxsIGxvb2sgbGlrZSAiYS5iLGEuYyhkLGUpIi4KLXV0aWw6OlN0YXR1
cyBEZWNvZGVDb21wYWN0RmllbGRNYXNrUGF0aHMoU3RyaW5nUGllY2UgcGF0aHMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aFNpbmtDYWxsYmFjayBwYXRo
X3NpbmspOwotCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVyCi19ICAvLyBuYW1lc3BhY2UgdXRp
bAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNl
bmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVSX0ZJRUxEX01BU0tfVVRJTElU
WV9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25f
ZXNjYXBpbmcuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX2VzY2Fw
aW5nLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGJkNTU0ZWEzODkzYWI1YjUw
ODZlYTYwYTJiZmNmNjdkZmI5MjJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fZXNjYXBp
bmcuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5h
bC9qc29uX2VzY2FwaW5nLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9n
Z2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwgewot
bmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIEFycmF5IG9mIGhleCBj
aGFyYWN0ZXJzIGZvciBjb252ZXJzaW9uIHRvIGhleC4KLXN0YXRpYyBjb25zdCBjaGFyIGtIZXhb
XSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLQotLy8gQ2hhcmFjdGVycyAweDAwIHRvIDB4OWYgYXJl
IHZlcnkgY29tbW9ubHkgdXNlZCwgc28gd2UgcHJvdmlkZSBhIHNwZWNpYWwKLS8vIHRhYmxlIGxv
b2t1cC4KLS8vCi0vLyBGb3IgdW5pY29kZSBjb2RlIHBvaW50IGNoIDwgMHhhMDoKLS8vIGtDb21t
b25Fc2NhcGVzW2NoXSBpcyB0aGUgZXNjYXBlZCBzdHJpbmcgb2YgY2gsIGlmIGVzY2FwaW5nIGlz
IG5lZWRlZDsKLS8vICAgICAgICAgICAgICAgICAgICBvciBhbiBlbXB0eSBzdHJpbmcsIGlmIGVz
Y2FwaW5nIGlzIG5vdCBuZWVkZWQuCi1zdGF0aWMgY29uc3QgY2hhciBrQ29tbW9uRXNjYXBlc1sx
NjBdWzddID0gewotICAvLyBDMCAoQVNDSUkgYW5kIGRlcml2YXRpdmVzKSBjb250cm9sIGNoYXJh
Y3RlcnMKLSAgIlxcdTAwMDAiLCAiXFx1MDAwMSIsICJcXHUwMDAyIiwgIlxcdTAwMDMiLCAgLy8g
MHgwMAotICAiXFx1MDAwNCIsICJcXHUwMDA1IiwgIlxcdTAwMDYiLCAiXFx1MDAwNyIsCi0gICJc
XGIiLCAgICAgIlxcdCIsICAgICAiXFxuIiwgICAgICJcXHUwMDBiIiwKLSAgIlxcZiIsICAgICAi
XFxyIiwgICAgICJcXHUwMDBlIiwgIlxcdTAwMGYiLAotICAiXFx1MDAxMCIsICJcXHUwMDExIiwg
IlxcdTAwMTIiLCAiXFx1MDAxMyIsICAvLyAweDEwCi0gICJcXHUwMDE0IiwgIlxcdTAwMTUiLCAi
XFx1MDAxNiIsICJcXHUwMDE3IiwKLSAgIlxcdTAwMTgiLCAiXFx1MDAxOSIsICJcXHUwMDFhIiwg
IlxcdTAwMWIiLAotICAiXFx1MDAxYyIsICJcXHUwMDFkIiwgIlxcdTAwMWUiLCAiXFx1MDAxZiIs
Ci0gIC8vIEVzY2FwaW5nIG9mICIgYW5kIFwgYXJlIHJlcXVpcmVkIGJ5IHd3dy5qc29uLm9yZyBz
dHJpbmcgZGVmaW5pdGlvbi4KLSAgLy8gRXNjYXBpbmcgb2YgPCBhbmQgPiBhcmUgcmVxdWlyZWQg
Zm9yIEhUTUwgc2VjdXJpdHkuCi0gICIiLCAiIiwgIlxcXCIiLCAiIiwgIiIsICAgICAgICAiIiwg
IiIsICAgICAgICAiIiwgIC8vIDB4MjAKLSAgIiIsICIiLCAiIiwgICAgICIiLCAiIiwgICAgICAg
ICIiLCAiIiwgICAgICAgICIiLAotICAiIiwgIiIsICIiLCAgICAgIiIsICIiLCAgICAgICAgIiIs
ICIiLCAgICAgICAgIiIsICAvLyAweDMwCi0gICIiLCAiIiwgIiIsICAgICAiIiwgIlxcdTAwM2Mi
LCAiIiwgIlxcdTAwM2UiLCAiIiwKLSAgIiIsICIiLCAiIiwgICAgICIiLCAiIiwgICAgICAgICIi
LCAiIiwgICAgICAgICIiLCAgLy8gMHg0MAotICAiIiwgIiIsICIiLCAgICAgIiIsICIiLCAgICAg
ICAgIiIsICIiLCAgICAgICAgIiIsCi0gICIiLCAiIiwgIiIsICAgICAiIiwgIiIsICAgICAgICAi
IiwgIiIsICAgICAgICAiIiwgIC8vIDB4NTAKLSAgIiIsICIiLCAiIiwgICAgICIiLCAiXFxcXCIs
ICAgICIiLCAiIiwgICAgICAgICIiLAotICAiIiwgIiIsICIiLCAgICAgIiIsICIiLCAgICAgICAg
IiIsICIiLCAgICAgICAgIiIsICAvLyAweDYwCi0gICIiLCAiIiwgIiIsICAgICAiIiwgIiIsICAg
ICAgICAiIiwgIiIsICAgICAgICAiIiwKLSAgIiIsICIiLCAiIiwgICAgICIiLCAiIiwgICAgICAg
ICIiLCAiIiwgICAgICAgICIiLCAgLy8gMHg3MAotICAiIiwgIiIsICIiLCAgICAgIiIsICIiLCAg
ICAgICAgIiIsICIiLCAgICAgICAgIlxcdTAwN2YiLAotICAvLyBDMSAoSVNPIDg4NTkgYW5kIFVu
aWNvZGUpIGV4dGVuZGVkIGNvbnRyb2wgY2hhcmFjdGVycwotICAiXFx1MDA4MCIsICJcXHUwMDgx
IiwgIlxcdTAwODIiLCAiXFx1MDA4MyIsICAvLyAweDgwCi0gICJcXHUwMDg0IiwgIlxcdTAwODUi
LCAiXFx1MDA4NiIsICJcXHUwMDg3IiwKLSAgIlxcdTAwODgiLCAiXFx1MDA4OSIsICJcXHUwMDhh
IiwgIlxcdTAwOGIiLAotICAiXFx1MDA4YyIsICJcXHUwMDhkIiwgIlxcdTAwOGUiLCAiXFx1MDA4
ZiIsCi0gICJcXHUwMDkwIiwgIlxcdTAwOTEiLCAiXFx1MDA5MiIsICJcXHUwMDkzIiwgIC8vIDB4
OTAKLSAgIlxcdTAwOTQiLCAiXFx1MDA5NSIsICJcXHUwMDk2IiwgIlxcdTAwOTciLAotICAiXFx1
MDA5OCIsICJcXHUwMDk5IiwgIlxcdTAwOWEiLCAiXFx1MDA5YiIsCi0gICJcXHUwMDljIiwgIlxc
dTAwOWQiLCAiXFx1MDA5ZSIsICJcXHUwMDlmIgotfTsKLQotLy8gRGV0ZXJtaW5lcyBpZiB0aGUg
Z2l2ZW4gY2hhciB2YWx1ZSBpcyBhIHVuaWNvZGUgaGlnaC1zdXJyb2dhdGUgY29kZSB1bml0Lgot
Ly8gU3VjaCB2YWx1ZXMgZG8gbm90IHJlcHJlc2VudCBjaGFyYWN0ZXJzIGJ5IHRoZW1zZWx2ZXMs
IGJ1dCBhcmUgdXNlZCBpbiB0aGUKLS8vIHJlcHJlc2VudGF0aW9uIG9mIHN1cHBsZW1lbnRhcnkg
Y2hhcmFjdGVycyBpbiB0aGUgdXRmLTE2IGVuY29kaW5nLgotaW5saW5lIGJvb2wgSXNIaWdoU3Vy
cm9nYXRlKHVpbnQxNiBjKSB7Ci0gIC8vIE9wdGltaXplZCBmb3JtIG9mOgotICAvLyByZXR1cm4g
YyA+PSBrTWluSGlnaFN1cnJvZ2F0ZSAmJiBjIDw9IGtNYXhIaWdoU3Vycm9nYXRlOwotICAvLyAo
UmVkdWNlZCBmcm9tIDMgQUxVIGluc3RydWN0aW9ucyB0byAyIEFMVSBpbnN0cnVjdGlvbnMpCi0g
IHJldHVybiAoYyAmIH4oSnNvbkVzY2FwaW5nOjprTWF4SGlnaFN1cnJvZ2F0ZSAtCi0gICAgICAg
ICAgICAgICAgSnNvbkVzY2FwaW5nOjprTWluSGlnaFN1cnJvZ2F0ZSkpCi0gICAgICA9PSBKc29u
RXNjYXBpbmc6OmtNaW5IaWdoU3Vycm9nYXRlOwotfQotCi0vLyBEZXRlcm1pbmVzIGlmIHRoZSBn
aXZlbiBjaGFyIHZhbHVlIGlzIGEgdW5pY29kZSBsb3ctc3Vycm9nYXRlIGNvZGUgdW5pdC4KLS8v
IFN1Y2ggdmFsdWVzIGRvIG5vdCByZXByZXNlbnQgY2hhcmFjdGVycyBieSB0aGVtc2VsdmVzLCBi
dXQgYXJlIHVzZWQgaW4gdGhlCi0vLyByZXByZXNlbnRhdGlvbiBvZiBzdXBwbGVtZW50YXJ5IGNo
YXJhY3RlcnMgaW4gdGhlIHV0Zi0xNiBlbmNvZGluZy4KLWlubGluZSBib29sIElzTG93U3Vycm9n
YXRlKHVpbnQxNiBjKSB7Ci0gIC8vIE9wdGltaXplZCBmb3JtIG9mOgotICAvLyByZXR1cm4gYyA+
PSBrTWluTG93U3Vycm9nYXRlICYmIGMgPD0ga01heExvd1N1cnJvZ2F0ZTsKLSAgLy8gKFJlZHVj
ZWQgZnJvbSAzIEFMVSBpbnN0cnVjdGlvbnMgdG8gMiBBTFUgaW5zdHJ1Y3Rpb25zKQotICByZXR1
cm4gKGMgJiB+KEpzb25Fc2NhcGluZzo6a01heExvd1N1cnJvZ2F0ZSAtCi0gICAgICAgICAgICAg
ICAgSnNvbkVzY2FwaW5nOjprTWluTG93U3Vycm9nYXRlKSkKLSAgICAgID09IEpzb25Fc2NhcGlu
Zzo6a01pbkxvd1N1cnJvZ2F0ZTsKLX0KLQotLy8gRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gY2hh
ciB2YWx1ZSBpcyBhIHVuaWNvZGUgc3Vycm9nYXRlIGNvZGUgdW5pdCAoZWl0aGVyCi0vLyBoaWdo
LXN1cnJvZ2F0ZSBvciBsb3ctc3Vycm9nYXRlKS4KLWlubGluZSBib29sIElzU3Vycm9nYXRlKHVp
bnQzMiBjKSB7Ci0gIC8vIE9wdGltaXplZCBmb3JtIG9mOgotICAvLyByZXR1cm4gYyA+PSBrTWlu
SGlnaFN1cnJvZ2F0ZSAmJiBjIDw9IGtNYXhMb3dTdXJyb2dhdGU7Ci0gIC8vIChSZWR1Y2VkIGZy
b20gMyBBTFUgaW5zdHJ1Y3Rpb25zIHRvIDIgQUxVIGluc3RydWN0aW9ucykKLSAgcmV0dXJuIChj
ICYgMHhmZmZmZjgwMCkgPT0gSnNvbkVzY2FwaW5nOjprTWluSGlnaFN1cnJvZ2F0ZTsKLX0KLQot
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB1bmljb2RlIGNvZGUgcG9pbnQgY3AgaXMKLS8v
IGluIHRoZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlciByYW5nZS4KLWlubGluZSBib29sIElzU3Vw
cGxlbWVudGFsQ29kZVBvaW50KHVpbnQzMiBjcCkgewotICAvLyBPcHRpbWl6ZWQgZm9ybSBvZjoK
LSAgLy8gcmV0dXJuIGtNaW5TdXBwbGVtZW50YXJ5Q29kZVBvaW50IDw9IGNwICYmIGNwIDw9IGtN
YXhDb2RlUG9pbnQ7Ci0gIC8vIChSZWR1Y2VkIGZyb20gMyBBTFUgaW5zdHJ1Y3Rpb25zIHRvIDIg
QUxVIGluc3RydWN0aW9ucykKLSAgcmV0dXJuIChjcCAmIH4oSnNvbkVzY2FwaW5nOjprTWluU3Vw
cGxlbWVudGFyeUNvZGVQb2ludCAtIDEpKQotICAgICAgPCBKc29uRXNjYXBpbmc6OmtNYXhDb2Rl
UG9pbnQ7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdW5pY29kZSBjb2RlIHBv
aW50IGNwIGlzIGEgdmFsaWQKLS8vIHVuaWNvZGUgY29kZSBwb2ludCAoaS5lLiBpbiB0aGUgcmFu
Z2UgMCA8PSBjcCA8PSBrTWF4Q29kZVBvaW50KS4KLWlubGluZSBib29sIElzVmFsaWRDb2RlUG9p
bnQodWludDMyIGNwKSB7Ci0gIHJldHVybiBjcCA8PSBKc29uRXNjYXBpbmc6OmtNYXhDb2RlUG9p
bnQ7Ci19Ci0KLS8vIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgc3Vycm9nYXRlIHBhaXIgdG8gaXRz
IHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludCB2YWx1ZS4KLS8vIEl0IGlzIHRoZSBjYWxsZXJzJyBy
ZXNwb25zaWJpbGl0eSB0byB2YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHN1cnJvZ2F0ZSBwYWlyLgot
aW5saW5lIHVpbnQzMiBUb0NvZGVQb2ludCh1aW50MTYgaGlnaCwgdWludDE2IGxvdykgewotICAv
LyBPcHRpbWl6ZWQgZm9ybSBvZjoKLSAgLy8gcmV0dXJuICgoaGlnaCAtIGtNaW5IaWdoU3Vycm9n
YXRlKSA8PCAxMCkKLSAgLy8gICAgICsgKGxvdyAtIGtNaW5Mb3dTdXJyb2dhdGUpCi0gIC8vICAg
ICArIGtNaW5TdXBwbGVtZW50YXJ5Q29kZVBvaW50OwotICAvLyAoUmVkdWNlZCBmcm9tIDUgQUxV
IGluc3RydWN0aW9ucyB0byAzIEFMVSBpbnN0cnVjdGlvbnMpCi0gIHJldHVybiAoaGlnaCA8PCAx
MCkgKyBsb3cgKwotICAgICAgKEpzb25Fc2NhcGluZzo6a01pblN1cHBsZW1lbnRhcnlDb2RlUG9p
bnQKLSAgICAgICAtIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSnNvbkVzY2FwaW5nOjprTWluSGln
aFN1cnJvZ2F0ZSkgPDwgMTApCi0gICAgICAgLSBKc29uRXNjYXBpbmc6OmtNaW5Mb3dTdXJyb2dh
dGUpOwotfQotCi0vLyBSZXR1cm5zIHRoZSBsb3cgc3Vycm9nYXRlIGZvciB0aGUgZ2l2ZW4gdW5p
Y29kZSBjb2RlIHBvaW50LiBUaGUgcmVzdWx0IGlzCi0vLyBtZWFuaW5nbGVzcyBpZiB0aGUgZ2l2
ZW4gY29kZSBwb2ludCBpcyBub3QgYSBzdXBwbGVtZW50YXJ5IGNoYXJhY3Rlci4KLWlubGluZSB1
aW50MTYgVG9Mb3dTdXJyb2dhdGUodWludDMyIGNwKSB7Ci0gIHJldHVybiAoY3AgJiAoSnNvbkVz
Y2FwaW5nOjprTWF4TG93U3Vycm9nYXRlCi0gICAgICAgICAgICAgICAgLSBKc29uRXNjYXBpbmc6
OmtNaW5Mb3dTdXJyb2dhdGUpKQotICAgICAgKyBKc29uRXNjYXBpbmc6OmtNaW5Mb3dTdXJyb2dh
dGU7Ci19Ci0KLS8vIFJldHVybnMgdGhlIGhpZ2ggc3Vycm9nYXRlIGZvciB0aGUgZ2l2ZW4gdW5p
Y29kZSBjb2RlIHBvaW50LiBUaGUgcmVzdWx0IGlzCi0vLyBtZWFuaW5nbGVzcyBpZiB0aGUgZ2l2
ZW4gY29kZSBwb2ludCBpcyBub3QgYSBzdXBwbGVtZW50YXJ5IGNoYXJhY3Rlci4KLWlubGluZSB1
aW50MTYgVG9IaWdoU3Vycm9nYXRlKHVpbnQzMiBjcCkgewotICByZXR1cm4gKGNwID4+IDEwKSAr
IChKc29uRXNjYXBpbmc6OmtNaW5IaWdoU3Vycm9nYXRlIC0KLSAgICAgICAgICAgICAgICAgICAg
ICAgKEpzb25Fc2NhcGluZzo6a01pblN1cHBsZW1lbnRhcnlDb2RlUG9pbnQgPj4gMTApKTsKLX0K
LQotLy8gSW5wdXQgc3RyIGlzIGVuY29kZWQgaW4gVVRGLTguIEEgdW5pY29kZSBjb2RlIHBvaW50
IGNvdWxkIGJlIGVuY29kZWQgaW4KLS8vIFVURi04IHVzaW5nIGFueXdoZXJlIGZyb20gMSB0byA0
IGNoYXJhY3RlcnMsIGFuZCBpdCBjb3VsZCBzcGFuIG11bHRpcGxlCi0vLyByZWFkcyBvZiB0aGUg
Qnl0ZVNvdXJjZS4KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBuZXh0IHVuaWNvZGUg
Y29kZSBwb2ludCBmcm9tIHRoZSBpbnB1dCAoc3RyKSBhdAotLy8gdGhlIGdpdmVuIHBvc2l0aW9u
IChpbmRleCksIHRha2luZyBpbnRvIGFjY291bnQgYW55IGxlZnQtb3ZlciBwYXJ0aWFsCi0vLyBj
b2RlIHBvaW50IGZyb20gdGhlIHByZXZpb3VzIGl0ZXJhdGlvbiAoY3ApLCB0b2dldGhlciB3aXRo
IHRoZSBudW1iZXIKLS8vIG9mIGNoYXJhY3RlcnMgbGVmdCB0byByZWFkIHRvIGNvbXBsZXRlIHRo
aXMgY29kZSBwb2ludCAobnVtX2xlZnQpLgotLy8KLS8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0
aGF0IHRoZSBpbnB1dCAoc3RyKSBpcyB2YWxpZCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24KLS8vIChp
bmRleCkuIEluIG9yZGVyIHdvcmRzLCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGNvdWxkIGJlIHJl
YWQgc3VjY2Vzc2Z1bGx5LgotLy8KLS8vIFRoZSBjb2RlIHBvaW50IHJlYWQgKHBhcnRpYWwgb3Ig
Y29tcGxldGUpIGlzIHN0b3JlZCBpbiAoY3ApLiBVcG9uIHJldHVybiwKLS8vIChudW1fbGVmdCkg
c3RvcmVzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGhhcyB5ZXQgdG8gYmUgcmVhZCBp
bgotLy8gb3JkZXIgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgdW5pY29kZSBjb2RlIHBvaW50LiBJ
ZiB0aGUgcmVhZCBpcyBjb21wbGV0ZSwKLS8vIHRoZW4gKG51bV9sZWZ0KSBpcyAwLiBBbHNvLCAo
bnVtX3JlYWQpIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLgotLy8KLS8vIFJldHVy
bnMgZmFsc2UgaWYgd2UgZW5jb3VudGVyIGFuIGludmFsaWQgVVRGLTggc3RyaW5nLiBSZXR1cm5z
IHRydWUKLS8vIG90aGVyd2lzZSwgaW5jbHVkaW5nIHRoZSBjYXNlIHdoZW4gd2UgcmVhY2ggdGhl
IGVuZCBvZiB0aGUgaW5wdXQgKHN0cikKLS8vIGJlZm9yZSBhIGNvbXBsZXRlIHVuaWNvZGUgY29k
ZSBwb2ludCBpcyByZWFkLgotYm9vbCBSZWFkQ29kZVBvaW50KFN0cmluZ1BpZWNlIHN0ciwgaW50
IGluZGV4LAotICAgICAgICAgICAgICAgICAgIHVpbnQzMiAqY3AsIGludCogbnVtX2xlZnQsIGlu
dCAqbnVtX3JlYWQpIHsKLSAgaWYgKCpudW1fbGVmdCA9PSAwKSB7Ci0gICAgLy8gTGFzdCByZWFk
IHdhcyBjb21wbGV0ZS4gU3RhcnQgcmVhZGluZyBhIG5ldyB1bmljb2RlIGNvZGUgcG9pbnQuCi0g
ICAgKmNwID0gc3RhdGljX2Nhc3Q8dWludDg+KHN0cltpbmRleCsrXSk7Ci0gICAgKm51bV9yZWFk
ID0gMTsKLSAgICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBjb2RlIHBvaW50IGlzIGRldGVybWluZWQg
ZnJvbSByZWFkaW5nIHRoZSBmaXJzdCBieXRlLgotICAgIC8vCi0gICAgLy8gSWYgdGhlIGZpcnN0
IGJ5dGUgaXMgYmV0d2VlbjoKLSAgICAvLyAgICAwLi4weDdmOiB0aGF0J3MgdGhlIHZhbHVlIG9m
IHRoZSBjb2RlIHBvaW50LgotICAgIC8vIDB4ODAuLjB4YmY6IDxpbnZhbGlkPgotICAgIC8vIDB4
YzAuLjB4ZGY6IDExLWJpdCBjb2RlIHBvaW50IGVuY29kZWQgaW4gMiBieXRlcy4KLSAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0IDEwLTYsIGJpdCA1LTAKLSAgICAv
LyAweGUwLi4weGVmOiAxNi1iaXQgY29kZSBwb2ludCBlbmNvZGVkIGluIDMgYnl0ZXMuCi0gICAg
Ly8gICAgICAgICAgICAgICAgICAgICAgICBiaXQgMTUtMTIsIGJpdCAxMS02LCBiaXQgNS0wCi0g
ICAgLy8gMHhmMC4uMHhmNzogMjEtYml0IGNvZGUgcG9pbnQgZW5jb2RlZCBpbiA0IGJ5dGVzLgot
ICAgIC8vICAgICAgICAgICAgIGJpdCAyMC0xOCwgYml0IDE3LTEyLCBiaXQgMTEtNiwgYml0IDUt
MAotICAgIC8vIDB4ZjguLjB4ZmY6IDxpbnZhbGlkPgotICAgIC8vCi0gICAgLy8gTWVhbmluZyBv
ZiBlYWNoIGJpdDoKLSAgICAvLyA8bXNiPiBiaXQgNzogMCAtIHNpbmdsZSBieXRlIGNvZGUgcG9p
bnQ6IGJpdHMgNi0wIGFyZSB2YWx1ZXMuCi0gICAgLy8gICAgICAgICAgICAgIDEgLSBtdWx0aWJ5
dGUgY29kZSBwb2ludAotICAgIC8vICAgICAgIGJpdCA2OiAwIC0gc3Vic2VxdWVudCBieXRlcyBv
ZiBtdWx0aWJ5dGUgY29kZSBwb2ludDoKLSAgICAvLyAgICAgICAgICAgICAgICAgIGJpdHMgNS0w
IGFyZSB2YWx1ZXMuCi0gICAgLy8gICAgICAgICAgICAgIDEgLSBmaXJzdCBieXRlIG9mIG11bHRp
Ynl0ZSBjb2RlIHBvaW50Ci0gICAgLy8gICAgICAgYml0IDU6IDAgLSBmaXJzdCBieXRlIG9mIDIt
Ynl0ZSBjb2RlIHBvaW50OiBiaXRzIDQtMCBhcmUgdmFsdWVzLgotICAgIC8vICAgICAgICAgICAg
ICAxIC0gZmlyc3QgYnl0ZSBvZiBjb2RlIHBvaW50IHdpdGggPj0gMyBieXRlcy4KLSAgICAvLyAg
ICAgICBiaXQgNDogMCAtIGZpcnN0IGJ5dGUgb2YgMy1ieXRlIGNvZGUgcG9pbnQ6IGJpdHMgMy0w
IGFyZSB2YWx1ZXMuCi0gICAgLy8gICAgICAgICAgICAgIDEgLSBmaXJzdCBieXRlIG9mIGNvZGUg
cG9pbnQgd2l0aCA+PSA0IGJ5dGVzLgotICAgIC8vICAgICAgIGJpdCAzOiAwIC0gZmlyc3QgYnl0
ZSBvZiA0LWJ5dGUgY29kZSBwb2ludDogYml0cyAyLTAgYXJlIHZhbHVlcy4KLSAgICAvLyAgICAg
ICAgICAgICAgMSAtIHJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9uLgotICAgIGlmICgqY3Ag
PD0gMHg3ZikgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmICgqY3AgPD0gMHhi
ZikgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAoKmNwIDw9IDB4ZGYpIHsK
LSAgICAgICpjcCAmPSAweDFmOwotICAgICAgKm51bV9sZWZ0ID0gMTsKLSAgICB9IGVsc2UgaWYg
KCpjcCA8PSAweGVmKSB7Ci0gICAgICAqY3AgJj0gMHgwZjsKLSAgICAgICpudW1fbGVmdCA9IDI7
Ci0gICAgfSBlbHNlIGlmICgqY3AgPD0gMHhmNykgewotICAgICAgKmNwICY9IDB4MDc7Ci0gICAg
ICAqbnVtX2xlZnQgPSAzOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICB9IGVsc2UgewotICAgIC8vIExhc3QgcmVhZCB3YXMgcGFydGlhbC4gSW5pdGlhbGl6ZSBu
dW1fcmVhZCB0byAwIGFuZCBjb250aW51ZSByZWFkaW5nCi0gICAgLy8gdGhlIGxhc3QgdW5pY29k
ZSBjb2RlIHBvaW50LgotICAgICpudW1fcmVhZCA9IDA7Ci0gIH0KLSAgd2hpbGUgKCpudW1fbGVm
dCA+IDAgJiYgaW5kZXggPCBzdHIuc2l6ZSgpKSB7Ci0gICAgdWludDMyIGNoID0gc3RhdGljX2Nh
c3Q8dWludDg+KHN0cltpbmRleCsrXSk7Ci0gICAgLS0oKm51bV9sZWZ0KTsKLSAgICArKygqbnVt
X3JlYWQpOwotICAgICpjcCA9ICgqY3AgPDwgNikgfCAoY2ggJiAweDNmKTsKLSAgICBpZiAoY2gg
PCAweDgwIHx8IGNoID4gMHhiZikgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiAqbnVtX2xl
ZnQgPiAwIHx8ICghSXNTdXJyb2dhdGUoKmNwKSAmJiBJc1ZhbGlkQ29kZVBvaW50KCpjcCkpOwot
fQotCi0vLyBTdG9yZXMgdGhlIDE2LWJpdCB1bmljb2RlIGNvZGUgcG9pbnQgYXMgaXRzIGhleGFk
ZWNpbWFsIGRpZ2l0cyBpbiBidWZmZXIKLS8vIGFuZCByZXR1cm5zIGEgU3RyaW5nUGllY2UgdGhh
dCBwb2ludHMgdG8gdGhpcyBidWZmZXIuIFRoZSBpbnB1dCBidWZmZXIgbmVlZHMKLS8vIHRvIGJl
IGF0IGxlYXN0IDYgYnl0ZXMgbG9uZy4KLVN0cmluZ1BpZWNlIFRvSGV4KHVpbnQxNiBjcCwgY2hh
ciogYnVmZmVyKSB7Ci0gIGJ1ZmZlcls1XSA9IGtIZXhbY3AgJiAweDBmXTsKLSAgY3AgPj49IDQ7
Ci0gIGJ1ZmZlcls0XSA9IGtIZXhbY3AgJiAweDBmXTsKLSAgY3AgPj49IDQ7Ci0gIGJ1ZmZlclsz
XSA9IGtIZXhbY3AgJiAweDBmXTsKLSAgY3AgPj49IDQ7Ci0gIGJ1ZmZlclsyXSA9IGtIZXhbY3Ag
JiAweDBmXTsKLSAgcmV0dXJuIFN0cmluZ1BpZWNlKGJ1ZmZlciwgMCwgNik7Ci19Ci0KLS8vIFN0
b3JlcyB0aGUgMzItYml0IHVuaWNvZGUgY29kZSBwb2ludCBhcyBpdHMgaGV4YWRlY2ltYWwgZGln
aXRzIGluIGJ1ZmZlcgotLy8gYW5kIHJldHVybnMgYSBTdHJpbmdQaWVjZSB0aGF0IHBvaW50cyB0
byB0aGlzIGJ1ZmZlci4gVGhlIGlucHV0IGJ1ZmZlciBuZWVkcwotLy8gdG8gYmUgYXQgbGVhc3Qg
MTIgYnl0ZXMgbG9uZy4KLVN0cmluZ1BpZWNlIFRvU3Vycm9nYXRlSGV4KHVpbnQzMiBjcCwgY2hh
ciogYnVmZmVyKSB7Ci0gIHVpbnQxNiBsb3cgPSBUb0xvd1N1cnJvZ2F0ZShjcCk7Ci0gIHVpbnQx
NiBoaWdoID0gVG9IaWdoU3Vycm9nYXRlKGNwKTsKLQotICBidWZmZXJbMTFdID0ga0hleFtsb3cg
JiAweDBmXTsKLSAgbG93ID4+PSA0OwotICBidWZmZXJbMTBdID0ga0hleFtsb3cgJiAweDBmXTsK
LSAgbG93ID4+PSA0OwotICBidWZmZXJbOV0gPSBrSGV4W2xvdyAmIDB4MGZdOwotICBsb3cgPj49
IDQ7Ci0gIGJ1ZmZlcls4XSA9IGtIZXhbbG93ICYgMHgwZl07Ci0KLSAgYnVmZmVyWzVdID0ga0hl
eFtoaWdoICYgMHgwZl07Ci0gIGhpZ2ggPj49IDQ7Ci0gIGJ1ZmZlcls0XSA9IGtIZXhbaGlnaCAm
IDB4MGZdOwotICBoaWdoID4+PSA0OwotICBidWZmZXJbM10gPSBrSGV4W2hpZ2ggJiAweDBmXTsK
LSAgaGlnaCA+Pj0gNDsKLSAgYnVmZmVyWzJdID0ga0hleFtoaWdoICYgMHgwZl07Ci0KLSAgcmV0
dXJuIFN0cmluZ1BpZWNlKGJ1ZmZlciwgMTIpOwotfQotCi0vLyBJZiB0aGUgZ2l2ZW4gdW5pY29k
ZSBjb2RlIHBvaW50IG5lZWRzIGVzY2FwaW5nLCB0aGVuIHJldHVybnMgdGhlCi0vLyBlc2NhcGVk
IGZvcm0uIFRoZSByZXR1cm5lZCBTdHJpbmdQaWVjZSBlaXRoZXIgcG9pbnRzIHRvIHN0YXRpY2Fs
bHkKLS8vIHByZS1hbGxvY2F0ZWQgY2hhcltdIG9yIHRvIHRoZSBnaXZlbiBidWZmZXIuIFRoZSBp
bnB1dCBidWZmZXIgbmVlZHMKLS8vIHRvIGJlIGF0IGxlYXN0IDEyIGJ5dGVzIGxvbmcuCi0vLwot
Ly8gSWYgdGhlIGdpdmVuIHVuaWNvZGUgY29kZSBwb2ludCBkb2VzIG5vdCBuZWVkIGVzY2FwaW5n
LCBhbiBlbXB0eQotLy8gU3RyaW5nUGllY2UgaXMgcmV0dXJuZWQuCi1TdHJpbmdQaWVjZSBFc2Nh
cGVDb2RlUG9pbnQodWludDMyIGNwLCBjaGFyKiBidWZmZXIpIHsKLSAgaWYgKGNwIDwgMHhhMCkg
cmV0dXJuIGtDb21tb25Fc2NhcGVzW2NwXTsKLSAgc3dpdGNoIChjcCkgewotICAgIC8vIFRoZXNl
IGFyZSBub3QgcmVxdWlyZWQgYnkganNvbiBzcGVjCi0gICAgLy8gYnV0IHVzZWQgdG8gcHJldmVu
dCBzZWN1cml0eSBidWdzIGluIGphdmFzY3JpcHQuCi0gICAgY2FzZSAweGZlZmY6ICAvLyBaZXJv
IHdpZHRoIG5vLWJyZWFrIHNwYWNlCi0gICAgY2FzZSAweGZmZjk6ICAvLyBJbnRlcmxpbmVhciBh
bm5vdGF0aW9uIGFuY2hvcgotICAgIGNhc2UgMHhmZmZhOiAgLy8gSW50ZXJsaW5lYXIgYW5ub3Rh
dGlvbiBzZXBhcmF0b3IKLSAgICBjYXNlIDB4ZmZmYjogIC8vIEludGVybGluZWFyIGFubm90YXRp
b24gdGVybWluYXRvcgotCi0gICAgY2FzZSAweDAwYWQ6ICAvLyBTb2Z0LWh5cGhlbgotICAgIGNh
c2UgMHgwNmRkOiAgLy8gQXJhYmljIGVuZCBvZiBheWFoCi0gICAgY2FzZSAweDA3MGY6ICAvLyBT
eXJpYWMgYWJicmV2aWF0aW9uIG1hcmsKLSAgICBjYXNlIDB4MTdiNDogIC8vIEtobWVyIHZvd2Vs
IGluaGVyZW50IEFxCi0gICAgY2FzZSAweDE3YjU6ICAvLyBLaG1lciB2b3dlbCBpbmhlcmVudCBB
YQotICAgICAgcmV0dXJuIFRvSGV4KGNwLCBidWZmZXIpOwotCi0gICAgZGVmYXVsdDoKLSAgICAg
IGlmICgoY3AgPj0gMHgwNjAwICYmIGNwIDw9IDB4MDYwMykgfHwgIC8vIEFyYWJpYyBzaWducwot
ICAgICAgICAgIChjcCA+PSAweDIwMGIgJiYgY3AgPD0gMHgyMDBmKSB8fCAgLy8gWmVybyB3aWR0
aCBldGMuCi0gICAgICAgICAgKGNwID49IDB4MjAyOCAmJiBjcCA8PSAweDIwMmUpIHx8ICAvLyBT
ZXBhcmF0b3JzIGV0Yy4KLSAgICAgICAgICAoY3AgPj0gMHgyMDYwICYmIGNwIDw9IDB4MjA2NCkg
fHwgIC8vIEludmlzaWJsZSBldGMuCi0gICAgICAgICAgKGNwID49IDB4MjA2YSAmJiBjcCA8PSAw
eDIwNmYpKSB7ICAvLyBTaGFwaW5nIGV0Yy4KLSAgICAgICAgcmV0dXJuIFRvSGV4KGNwLCBidWZm
ZXIpOwotICAgICAgfQotCi0gICAgICBpZiAoY3AgPT0gMHgwMDBlMDAwMSB8fCAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIExhbmd1YWdlIHRhZwotICAgICAgICAgIChjcCA+PSAweDAwMDFkMTcz
ICYmIGNwIDw9IDB4MDAwMWQxN2EpIHx8ICAvLyBNdXNpYyBmb3JtYXR0aW5nCi0gICAgICAgICAg
KGNwID49IDB4MDAwZTAwMjAgJiYgY3AgPD0gMHgwMDBlMDA3ZikpIHsgIC8vIFRBRyBzeW1ib2xz
Ci0gICAgICAgIHJldHVybiBUb1N1cnJvZ2F0ZUhleChjcCwgYnVmZmVyKTsKLSAgICAgIH0KLSAg
fQotICByZXR1cm4gU3RyaW5nUGllY2UoKTsKLX0KLQotLy8gVHJpZXMgdG8gZXNjYXBlIHRoZSBn
aXZlbiBjb2RlIHBvaW50IGZpcnN0LiBJZiB0aGUgZ2l2ZW4gY29kZSBwb2ludAotLy8gZG9lcyBu
b3QgbmVlZCB0byBiZSBlc2NhcGVkLCBidXQgZm9yY2Vfb3V0cHV0IGlzIHRydWUsIHRoZW4gcmVu
ZGVyCi0vLyB0aGUgZ2l2ZW4gbXVsdGktYnl0ZSBjb2RlIHBvaW50IGluIFVURjggaW4gdGhlIGJ1
ZmZlciBhbmQgcmV0dXJucyBpdC4KLVN0cmluZ1BpZWNlIEVzY2FwZUNvZGVQb2ludCh1aW50MzIg
Y3AsIGNoYXIqIGJ1ZmZlciwgYm9vbCBmb3JjZV9vdXRwdXQpIHsKLSAgU3RyaW5nUGllY2Ugc3Ag
PSBFc2NhcGVDb2RlUG9pbnQoY3AsIGJ1ZmZlcik7Ci0gIGlmIChmb3JjZV9vdXRwdXQgJiYgc3Au
ZW1wdHkoKSkgewotICAgIGJ1ZmZlcls1XSA9IChjcCAmIDB4M2YpIHwgMHg4MDsKLSAgICBjcCA+
Pj0gNjsKLSAgICBpZiAoY3AgPD0gMHgxZikgewotICAgICAgYnVmZmVyWzRdID0gY3AgfCAweGMw
OwotICAgICAgc3Auc2V0KGJ1ZmZlciArIDQsIDIpOwotICAgICAgcmV0dXJuIHNwOwotICAgIH0K
LSAgICBidWZmZXJbNF0gPSAoY3AgJiAweDNmKSB8IDB4ODA7Ci0gICAgY3AgPj49IDY7Ci0gICAg
aWYgKGNwIDw9IDB4MGYpIHsKLSAgICAgIGJ1ZmZlclszXSA9IGNwIHwgMHhlMDsKLSAgICAgIHNw
LnNldChidWZmZXIgKyAzLCAzKTsKLSAgICAgIHJldHVybiBzcDsKLSAgICB9Ci0gICAgYnVmZmVy
WzNdID0gKGNwICYgMHgzZikgfCAweDgwOwotICAgIGJ1ZmZlclsyXSA9ICgoY3AgPj4gNikgJiAw
eDA3KSB8IDB4ZjA7Ci0gICAgc3Auc2V0KGJ1ZmZlciArIDIsIDQpOwotICB9Ci0gIHJldHVybiBz
cDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLXZvaWQgSnNvbkVzY2FwaW5nOjpFc2NhcGUoc3Ry
aW5nczo6Qnl0ZVNvdXJjZSogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlu
Z3M6OkJ5dGVTaW5rKiBvdXRwdXQpIHsKLSAgY2hhciBidWZmZXJbMTJdID0gIlxcdWRlYWRcXHVi
ZWUiOwotICB1aW50MzIgY3AgPSAwOyAgICAgLy8gQ3VycmVudCB1bmljb2RlIGNvZGUgcG9pbnQu
Ci0gIGludCBudW1fbGVmdCA9IDA7ICAvLyBOdW0gb2YgY2hhcnMgdG8gcmVhZCB0byBjb21wbGV0
ZSB0aGUgY29kZSBwb2ludC4KLSAgd2hpbGUgKGlucHV0LT5BdmFpbGFibGUoKSA+IDApIHsKLSAg
ICBTdHJpbmdQaWVjZSBzdHIgPSBpbnB1dC0+UGVlaygpOwotICAgIFN0cmluZ1BpZWNlIGVzY2Fw
ZWQ7Ci0gICAgaW50IGkgPSAwOwotICAgIGludCBudW1fcmVhZDsKLSAgICBib29sIG9rOwotICAg
IGJvb2wgY3Bfd2FzX3NwbGl0ID0gbnVtX2xlZnQgPiAwOwotICAgIC8vIExvb3AgdW50aWwgd2Ug
ZW5jb3VudGVyIGVpdGhlcgotICAgIC8vICAgaSkgYSBjb2RlIHBvaW50IHRoYXQgbmVlZHMgdG8g
YmUgZXNjYXBlZDsgb3IKLSAgICAvLyAgaWkpIGEgc3BsaXQgY29kZSBwb2ludCBpcyBjb21wbGV0
ZWx5IHJlYWQ7IG9yCi0gICAgLy8gaWlpKSBhIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIHZhbGlk
IHV0Zjg7IG9yCi0gICAgLy8gIGl2KSBlbmQgb2YgdGhlIFN0cmluZ1BpZWNlIHN0ciBpcyByZWFj
aGVkLgotICAgIGRvIHsKLSAgICAgIG9rID0gUmVhZENvZGVQb2ludChzdHIsIGksICZjcCwgJm51
bV9sZWZ0LCAmbnVtX3JlYWQpOwotICAgICAgaWYgKG51bV9sZWZ0ID4gMCB8fCAhb2spIGJyZWFr
OyAgLy8gY2FzZSBpaWkgb3IgaXYKLSAgICAgIGVzY2FwZWQgPSBFc2NhcGVDb2RlUG9pbnQoY3As
IGJ1ZmZlciwgY3Bfd2FzX3NwbGl0KTsKLSAgICAgIGlmICghZXNjYXBlZC5lbXB0eSgpKSBicmVh
azsgICAgIC8vIGNhc2UgaSBvciBpaQotICAgICAgaSArPSBudW1fcmVhZDsKLSAgICAgIG51bV9y
ZWFkID0gMDsKLSAgICB9IHdoaWxlIChpIDwgc3RyLmxlbmd0aCgpKTsgICAgICAgIC8vIGNhc2Ug
aXYKLSAgICAvLyBGaXJzdCBjb3B5IHRoZSB1bi1lc2NhcGVkIHByZWZpeCwgaWYgYW55LCB0byB0
aGUgb3V0cHV0IEJ5dGVTaW5rLgotICAgIGlmIChpID4gMCkgaW5wdXQtPkNvcHlUbyhvdXRwdXQs
IGkpOwotICAgIGlmIChudW1fcmVhZCA+IDApIGlucHV0LT5Ta2lwKG51bV9yZWFkKTsKLSAgICBp
ZiAoIW9rKSB7Ci0gICAgICAvLyBDYXNlIGlpaTogUmVwb3J0IGVycm9yLgotICAgICAgLy8gVE9E
Tyh3cG9vbik6IEFkZCBlcnJvciByZXBvcnRpbmcuCi0gICAgICBudW1fbGVmdCA9IDA7Ci0gICAg
fSBlbHNlIGlmIChudW1fbGVmdCA9PSAwICYmICFlc2NhcGVkLmVtcHR5KCkpIHsKLSAgICAgIC8v
IENhc2UgaSBvciBpaTogQXBwZW5kIHRoZSBlc2NhcGVkIGNvZGUgcG9pbnQgdG8gdGhlIG91dHB1
dCBCeXRlU2luay4KLSAgICAgIG91dHB1dC0+QXBwZW5kKGVzY2FwZWQuZGF0YSgpLCBlc2NhcGVk
LnNpemUoKSk7Ci0gICAgfQotICB9Ci0gIGlmIChudW1fbGVmdCA+IDApIHsKLSAgICAvLyBUcmVh
dCBhcyBjYXNlIGlpaTogcmVwb3J0IGVycm9yLgotICAgIC8vIFRPRE8od3Bvb24pOiBBZGQgZXJy
b3IgcmVwb3J0aW5nLgotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8v
IG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFj
ZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pz
b25fZXNjYXBpbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fZXNj
YXBpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNlMzI5ZmM5NjlhNjdkODg3
ZTMzMDJkNTAwZGI2Yzk3NTlhMmIyYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX2VzY2Fw
aW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBORVRfUFJPVE8yX1VUSUxfQ09OVkVSVEVSX1NUUklO
R1NfSlNPTl9FU0NBUElOR19IXwotI2RlZmluZSBORVRfUFJPVE8yX1VUSUxfQ09OVkVSVEVSX1NU
UklOR1NfSlNPTl9FU0NBUElOR19IXwotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJz
L2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9ieXRlc3RyZWFtLmg+
Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1
dGlsIHsKLW5hbWVzcGFjZSBjb252ZXJ0ZXIgewotCi1jbGFzcyBKc29uRXNjYXBpbmcgewotIHB1
YmxpYzoKLSAgLy8gVGhlIG1pbmltdW0gdmFsdWUgb2YgYSB1bmljb2RlIGhpZ2gtc3Vycm9nYXRl
IGNvZGUgdW5pdCBpbiB0aGUgdXRmLTE2Ci0gIC8vIGVuY29kaW5nLiBBIGhpZ2gtc3Vycm9nYXRl
IGlzIGFsc28ga25vd24gYXMgYSBsZWFkaW5nLXN1cnJvZ2F0ZS4KLSAgLy8gU2VlIGh0dHA6Ly93
d3cudW5pY29kZS5vcmcvZ2xvc3NhcnkvI2hpZ2hfc3Vycm9nYXRlX2NvZGVfdW5pdAotICBzdGF0
aWMgY29uc3QgdWludDE2IGtNaW5IaWdoU3Vycm9nYXRlID0gMHhkODAwOwotCi0gIC8vIFRoZSBt
YXhpbXVtIHZhbHVlIG9mIGEgdW5pY2lkZSBoaWdoLXN1cnJvZ2F0ZSBjb2RlIHVuaXQgaW4gdGhl
IHV0Zi0xNgotICAvLyBlbmNvZGluZy4gQSBoaWdoLXN1cnJvZ2F0ZSBpcyBhbHNvIGtub3duIGFz
IGEgbGVhZGluZy1zdXJyb2dhdGUuCi0gIC8vIFNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2ds
b3NzYXJ5LyNoaWdoX3N1cnJvZ2F0ZV9jb2RlX3VuaXQKLSAgc3RhdGljIGNvbnN0IHVpbnQxNiBr
TWF4SGlnaFN1cnJvZ2F0ZSA9IDB4ZGJmZjsKLQotICAvLyBUaGUgbWluaW11bSB2YWx1ZSBvZiBh
IHVuaWNvZGUgbG93LXN1cnJvZ2F0ZSBjb2RlIHVuaXQgaW4gdGhlIHV0Zi0xNgotICAvLyBlbmNv
ZGluZy4gQSBsb3ctc3Vycm9nYXRlIGlzIGFsc28ga25vd24gYXMgYSB0cmFpbGluZy1zdXJyb2dh
dGUuCi0gIC8vIFNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2dsb3NzYXJ5LyNsb3dfc3Vycm9n
YXRlX2NvZGVfdW5pdAotICBzdGF0aWMgY29uc3QgdWludDE2IGtNaW5Mb3dTdXJyb2dhdGUgPSAw
eGRjMDA7Ci0KLSAgLy8gVGhlIG1heGltdW0gdmFsdWUgb2YgYSB1bmljb2RlIGxvdy1zdXJyb2dh
dGUgY29kZSB1bml0IGluIHRoZSB1dGYtMTYKLSAgLy8gZW5jb2RpbmcuIEEgbG93LXN1cnJvZ2F0
ZSBpcyBhbHNvIGtub3duIGFzIGEgdHJhaWxpbmcgc3Vycm9nYXRlLgotICAvLyBTZWUgaHR0cDov
L3d3dy51bmljb2RlLm9yZy9nbG9zc2FyeS8jbG93X3N1cnJvZ2F0ZV9jb2RlX3VuaXQKLSAgc3Rh
dGljIGNvbnN0IHVpbnQxNiBrTWF4TG93U3Vycm9nYXRlID0gMHhkZmZmOwotCi0gIC8vIFRoZSBt
aW5pbXVtIHZhbHVlIG9mIGEgdW5pY29kZSBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnQuCi0gIC8v
IFNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2dsb3NzYXJ5LyNzdXBwbGVtZW50YXJ5X2NvZGVf
cG9pbnQKLSAgc3RhdGljIGNvbnN0IHVpbnQzMiBrTWluU3VwcGxlbWVudGFyeUNvZGVQb2ludCA9
IDB4MDEwMDAwOwotCi0gIC8vIFRoZSBtaW5pbXVtIHZhbHVlIG9mIGEgdW5pY29kZSBjb2RlIHBv
aW50LgotICAvLyBTZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9nbG9zc2FyeS8jY29kZV9wb2lu
dAotICBzdGF0aWMgY29uc3QgdWludDMyIGtNaW5Db2RlUG9pbnQgPSAweDAwMDAwMDsKLQotICAv
LyBUaGUgbWF4aW11bSB2YWx1ZSBvZiBhIHVuaWNvZGUgY29kZSBwb2ludC4KLSAgLy8gU2VlIGh0
dHA6Ly93d3cudW5pY29kZS5vcmcvZ2xvc3NhcnkvI2NvZGVfcG9pbnQKLSAgc3RhdGljIGNvbnN0
IHVpbnQzMiBrTWF4Q29kZVBvaW50ID0gMHgxMGZmZmY7Ci0KLSAgSnNvbkVzY2FwaW5nKCkge30K
LSAgdmlydHVhbCB+SnNvbkVzY2FwaW5nKCkge30KLQotICAvLyBFc2NhcGUgdGhlIGdpdmVuIEJ5
dGVTb3VyY2UgdG8gdGhlIGdpdmVuIEJ5dGVTaW5rLgotICBzdGF0aWMgdm9pZCBFc2NhcGUoc3Ry
aW5nczo6Qnl0ZVNvdXJjZSogaW5wdXQsIHN0cmluZ3M6OkJ5dGVTaW5rKiBvdXRwdXQpOwotCi0g
cHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEpzb25Fc2NhcGlu
Zyk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVyCi19ICAvLyBuYW1lc3BhY2UgdXRp
bAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLSNlbmRpZiAgLy8gTkVUX1BST1RPMl9VVElM
X0NPTlZFUlRFUl9TVFJJTkdTX0pTT05fRVNDQVBJTkdfSF8KLX0gIC8vIG5hbWVzcGFjZSBnb29n
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fb2Jq
ZWN0d3JpdGVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9vYmpl
Y3R3cml0ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NDIxMGMxMGI5YTQz
YjA5OGU2ZjdiMzJkMTg3ZTQyNjllZTQ3ZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9v
YmplY3R3cml0ZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC9qc29uX29iamVjdHdyaXRlci5oPgotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Nhc3RzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdXRp
bGl0eS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fZXNj
YXBpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmg+Ci0KLW5hbWVzcGFjZSBn
b29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1dGlsIHsKLW5hbWVzcGFj
ZSBjb252ZXJ0ZXIgewotCi11c2luZyBzdHJpbmdzOjpBcnJheUJ5dGVTb3VyY2U7Ci07Ci0KLUpz
b25PYmplY3RXcml0ZXI6On5Kc29uT2JqZWN0V3JpdGVyKCkgewotICBpZiAoIWVsZW1lbnRfLT5p
c19yb290KCkpIHsKLSAgICBHT09HTEVfTE9HKFdBUk5JTkcpIDw8ICJKc29uT2JqZWN0V3JpdGVy
IHdhcyBub3QgZnVsbHkgY2xvc2VkLiI7Ci0gIH0KLX0KLQotSnNvbk9iamVjdFdyaXRlciogSnNv
bk9iamVjdFdyaXRlcjo6U3RhcnRPYmplY3QoU3RyaW5nUGllY2UgbmFtZSkgewotICBXcml0ZVBy
ZWZpeChuYW1lKTsKLSAgV3JpdGVDaGFyKCd7Jyk7Ci0gIFB1c2goKTsKLSAgcmV0dXJuIHRoaXM7
Ci19Ci0KLUpzb25PYmplY3RXcml0ZXIqIEpzb25PYmplY3RXcml0ZXI6OkVuZE9iamVjdCgpIHsK
LSAgUG9wKCk7Ci0gIFdyaXRlQ2hhcignfScpOwotICBpZiAoZWxlbWVudCgpLT5pc19yb290KCkp
IE5ld0xpbmUoKTsKLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLUpzb25PYmplY3RXcml0ZXIqIEpzb25P
YmplY3RXcml0ZXI6OlN0YXJ0TGlzdChTdHJpbmdQaWVjZSBuYW1lKSB7Ci0gIFdyaXRlUHJlZml4
KG5hbWUpOwotICBXcml0ZUNoYXIoJ1snKTsKLSAgUHVzaCgpOwotICByZXR1cm4gdGhpczsKLX0K
LQotSnNvbk9iamVjdFdyaXRlciogSnNvbk9iamVjdFdyaXRlcjo6RW5kTGlzdCgpIHsKLSAgUG9w
KCk7Ci0gIFdyaXRlQ2hhcignXScpOwotICBpZiAoZWxlbWVudCgpLT5pc19yb290KCkpIE5ld0xp
bmUoKTsKLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLUpzb25PYmplY3RXcml0ZXIqIEpzb25PYmplY3RX
cml0ZXI6OlJlbmRlckJvb2woU3RyaW5nUGllY2UgbmFtZSwgYm9vbCB2YWx1ZSkgewotICByZXR1
cm4gUmVuZGVyU2ltcGxlKG5hbWUsIHZhbHVlID8gInRydWUiIDogImZhbHNlIik7Ci19Ci0KLUpz
b25PYmplY3RXcml0ZXIqIEpzb25PYmplY3RXcml0ZXI6OlJlbmRlckludDMyKFN0cmluZ1BpZWNl
IG5hbWUsIGludDMyIHZhbHVlKSB7Ci0gIHJldHVybiBSZW5kZXJTaW1wbGUobmFtZSwgU2ltcGxl
SXRvYSh2YWx1ZSkpOwotfQotCi1Kc29uT2JqZWN0V3JpdGVyKiBKc29uT2JqZWN0V3JpdGVyOjpS
ZW5kZXJVaW50MzIoU3RyaW5nUGllY2UgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzIgdmFsdWUpIHsKLSAgcmV0dXJuIFJlbmRlclNp
bXBsZShuYW1lLCBTaW1wbGVJdG9hKHZhbHVlKSk7Ci19Ci0KLUpzb25PYmplY3RXcml0ZXIqIEpz
b25PYmplY3RXcml0ZXI6OlJlbmRlckludDY0KFN0cmluZ1BpZWNlIG5hbWUsIGludDY0IHZhbHVl
KSB7Ci0gIFdyaXRlUHJlZml4KG5hbWUpOwotICBXcml0ZUNoYXIoJyInKTsKLSAgc3RyZWFtXy0+
V3JpdGVTdHJpbmcoU2ltcGxlSXRvYSh2YWx1ZSkpOwotICBXcml0ZUNoYXIoJyInKTsKLSAgcmV0
dXJuIHRoaXM7Ci19Ci0KLUpzb25PYmplY3RXcml0ZXIqIEpzb25PYmplY3RXcml0ZXI6OlJlbmRl
clVpbnQ2NChTdHJpbmdQaWVjZSBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQ2NCB2YWx1ZSkgewotICBXcml0ZVByZWZpeChuYW1lKTsK
LSAgV3JpdGVDaGFyKCciJyk7Ci0gIHN0cmVhbV8tPldyaXRlU3RyaW5nKFNpbXBsZUl0b2EodmFs
dWUpKTsKLSAgV3JpdGVDaGFyKCciJyk7Ci0gIHJldHVybiB0aGlzOwotfQotCi1Kc29uT2JqZWN0
V3JpdGVyKiBKc29uT2JqZWN0V3JpdGVyOjpSZW5kZXJEb3VibGUoU3RyaW5nUGllY2UgbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
dmFsdWUpIHsKLSAgaWYgKE1hdGhMaW1pdHM8ZG91YmxlPjo6SXNGaW5pdGUodmFsdWUpKSB7Ci0g
ICAgcmV0dXJuIFJlbmRlclNpbXBsZShuYW1lLCBTaW1wbGVEdG9hKHZhbHVlKSk7Ci0gIH0KLQot
ICAvLyBSZW5kZXIgcXVvdGVkIHdpdGggTmFOL0luZmluaXR5LWF3YXJlIERvdWJsZUFzU3RyaW5n
LgotICByZXR1cm4gUmVuZGVyU3RyaW5nKG5hbWUsIERvdWJsZUFzU3RyaW5nKHZhbHVlKSk7Ci19
Ci0KLUpzb25PYmplY3RXcml0ZXIqIEpzb25PYmplY3RXcml0ZXI6OlJlbmRlckZsb2F0KFN0cmlu
Z1BpZWNlIG5hbWUsIGZsb2F0IHZhbHVlKSB7Ci0gIGlmIChNYXRoTGltaXRzPGZsb2F0Pjo6SXNG
aW5pdGUodmFsdWUpKSB7Ci0gICAgcmV0dXJuIFJlbmRlclNpbXBsZShuYW1lLCBTaW1wbGVGdG9h
KHZhbHVlKSk7Ci0gIH0KLQotICAvLyBSZW5kZXIgcXVvdGVkIHdpdGggTmFOL0luZmluaXR5LWF3
YXJlIEZsb2F0QXNTdHJpbmcuCi0gIHJldHVybiBSZW5kZXJTdHJpbmcobmFtZSwgRmxvYXRBc1N0
cmluZyh2YWx1ZSkpOwotfQotCi1Kc29uT2JqZWN0V3JpdGVyKiBKc29uT2JqZWN0V3JpdGVyOjpS
ZW5kZXJTdHJpbmcoU3RyaW5nUGllY2UgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSB2YWx1ZSkgewotICBXcml0ZVByZWZp
eChuYW1lKTsKLSAgV3JpdGVDaGFyKCciJyk7Ci0gIEFycmF5Qnl0ZVNvdXJjZSBzb3VyY2UodmFs
dWUpOwotICBKc29uRXNjYXBpbmc6OkVzY2FwZSgmc291cmNlLCAmc2lua18pOwotICBXcml0ZUNo
YXIoJyInKTsKLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLUpzb25PYmplY3RXcml0ZXIqIEpzb25PYmpl
Y3RXcml0ZXI6OlJlbmRlckJ5dGVzKFN0cmluZ1BpZWNlIG5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSB2YWx1ZSkgewotICBX
cml0ZVByZWZpeChuYW1lKTsKLSAgc3RyaW5nIGJhc2U2NDsKLQotICBpZiAodXNlX3dlYnNhZmVf
YmFzZTY0X2Zvcl9ieXRlc18pCi0gICAgV2ViU2FmZUJhc2U2NEVzY2FwZSh2YWx1ZS5Ub1N0cmlu
ZygpLCAmYmFzZTY0KTsKLSAgZWxzZQotICAgIEJhc2U2NEVzY2FwZSh2YWx1ZSwgJmJhc2U2NCk7
Ci0KLSAgV3JpdGVDaGFyKCciJyk7Ci0gIC8vIFRPRE8od3Bvb24pOiBDb25zaWRlciBhIEJ5dGVT
aW5rIHNvbHV0aW9uIHRoYXQgd3JpdGVzIHRoZSBiYXNlNjQgYnl0ZXMKLSAgLy8gICAgICAgICAg
ICAgIGRpcmVjdGx5IHRvIHRoZSBzdHJlYW0sIHJhdGhlciB0aGFuIGZpcnN0IHB1dHRpbmcgdGhl
bQotICAvLyAgICAgICAgICAgICAgaW50byBhIHN0cmluZyBhbmQgdGhlbiB3cml0aW5nIHRoZW0g
dG8gdGhlIHN0cmVhbS4KLSAgc3RyZWFtXy0+V3JpdGVSYXcoYmFzZTY0LmRhdGEoKSwgYmFzZTY0
LnNpemUoKSk7Ci0gIFdyaXRlQ2hhcignIicpOwotICByZXR1cm4gdGhpczsKLX0KLQotSnNvbk9i
amVjdFdyaXRlciogSnNvbk9iamVjdFdyaXRlcjo6UmVuZGVyTnVsbChTdHJpbmdQaWVjZSBuYW1l
KSB7Ci0gIHJldHVybiBSZW5kZXJTaW1wbGUobmFtZSwgIm51bGwiKTsKLX0KLQotdm9pZCBKc29u
T2JqZWN0V3JpdGVyOjpXcml0ZVByZWZpeChTdHJpbmdQaWVjZSBuYW1lKSB7Ci0gIGJvb2wgbm90
X2ZpcnN0ID0gIWVsZW1lbnQoKS0+aXNfZmlyc3QoKTsKLSAgaWYgKG5vdF9maXJzdCkgV3JpdGVD
aGFyKCcsJyk7Ci0gIGlmIChub3RfZmlyc3QgfHwgIWVsZW1lbnQoKS0+aXNfcm9vdCgpKSBOZXdM
aW5lKCk7Ci0gIGlmICghbmFtZS5lbXB0eSgpKSB7Ci0gICAgV3JpdGVDaGFyKCciJyk7Ci0gICAg
QXJyYXlCeXRlU291cmNlIHNvdXJjZShuYW1lKTsKLSAgICBKc29uRXNjYXBpbmc6OkVzY2FwZSgm
c291cmNlLCAmc2lua18pOwotICAgIHN0cmVhbV8tPldyaXRlU3RyaW5nKCJcIjoiKTsKLSAgICBp
ZiAoIWluZGVudF9zdHJpbmdfLmVtcHR5KCkpIFdyaXRlQ2hhcignICcpOwotICB9Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1l
c3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fb2JqZWN0d3JpdGVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX29iamVjdHdyaXRlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjYjdlMmZiMzBjNGZlYzViNjIxZjcyMGRlNzM0YmU0ODI1MGNm
YmI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fb2JqZWN0d3JpdGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRh
dGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3Rv
Y29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVSX0pTT05fT0JKRUNUV1JJ
VEVSX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfSlNPTl9PQkpF
Q1RXUklURVJfSF9fCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gK
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0j
aW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0
cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3N0cnVjdHVy
ZWRfb2JqZWN0d3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2J5dGVz
dHJlYW0uaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFt
ZXNwYWNlIHV0aWwgewotbmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0KLS8vIEFuIE9iamVjdFdyaXRl
ciBpbXBsZW1lbnRhdGlvbiB0aGF0IG91dHB1dHMgSlNPTi4gVGhpcyBPYmplY3RXcml0ZXIKLS8v
IHN1cHBvcnRzIHdyaXRpbmcgYSBjb21wYWN0IGZvcm0gb3IgYSBwcmV0dHkgcHJpbnRlZCBmb3Jt
LgotLy8KLS8vIFNhbXBsZSB1c2FnZToKLS8vICAgc3RyaW5nIG91dHB1dDsKLS8vICAgU3RyaW5n
T3V0cHV0U3RyZWFtKiBzdHJfc3RyZWFtID0gbmV3IFN0cmluZ091dHB1dFN0cmVhbSgmb3V0cHV0
KTsKLS8vICAgQ29kZWRPdXRwdXRTdHJlYW0qIG91dF9zdHJlYW0gPSBuZXcgQ29kZWRPdXRwdXRT
dHJlYW0oc3RyX3N0cmVhbSk7Ci0vLyAgIEpzb25PYmplY3RXcml0ZXIqIG93ID0gbmV3IEpzb25P
YmplY3RXcml0ZXIoIiAgIiwgb3V0X3N0cmVhbSk7Ci0vLyAgIG93LT5TdGFydE9iamVjdCgiIikK
LS8vICAgICAgIC0+UmVuZGVyU3RyaW5nKCJuYW1lIiwgInZhbHVlIikKLS8vICAgICAgIC0+UmVu
ZGVyU3RyaW5nKCJlbXB0eXN0cmluZyIsIHN0cmluZygpKQotLy8gICAgICAgLT5TdGFydE9iamVj
dCgibmVzdGVkIikKLS8vICAgICAgICAgLT5SZW5kZXJJbnQ2NCgibGlnaHQiLCAyOTk3OTI0NTgp
OwotLy8gICAgICAgICAtPlJlbmRlckRvdWJsZSgicGkiLCAzLjE0MTU5MjY1MzU4OTc5Myk7Ci0v
LyAgICAgICAtPkVuZE9iamVjdCgpCi0vLyAgICAgICAtPlN0YXJ0TGlzdCgiZW1wdHkiKQotLy8g
ICAgICAgLT5FbmRMaXN0KCkKLS8vICAgICAtPkVuZE9iamVjdCgpOwotLy8KLS8vIEFuZCB0aGVu
IHRoZSBvdXRwdXQgc3RyaW5nIHdvdWxkIGJlY29tZToKLS8vIHsKLS8vICAgIm5hbWUiOiAidmFs
dWUiLAotLy8gICAiZW1wdHlzdHJpbmciOiAiIiwKLS8vICAgIm5lc3RlZCI6IHsKLS8vICAgICAi
bGlnaHQiOiAiMjk5NzkyNDU4IiwKLS8vICAgICAicGkiOiAzLjE0MTU5MjY1MzU4OTc5MwotLy8g
ICB9LAotLy8gICAiZW1wdHkiOiBbXQotLy8gfQotLy8KLS8vIEpzb25PYmplY3RXcml0ZXIgZG9l
cyBub3QgdmFsaWRhdGUgaWYgY2FsbHMgYWN0dWFsbHkgcmVzdWx0IGluIHZhbGlkIEpTT04uCi0v
LyBGb3IgZXhhbXBsZSwgcGFzc2luZyBhbiBlbXB0eSBuYW1lIHdoZW4gb25lIHdvdWxkIGJlIHJl
cXVpcmVkIHdvbid0IHJlc3VsdAotLy8gaW4gYW4gZXJyb3IsIGp1c3QgYW4gaW52YWxpZCBvdXRw
dXQuCi0vLwotLy8gTm90ZSB0aGF0IGFsbCBpbnQ2NCBhbmQgdWludDY0IGFyZSByZW5kZXJlZCBh
cyBzdHJpbmdzIGluc3RlYWQgb2YgbnVtYmVycy4KLS8vIFRoaXMgaXMgYmVjYXVzZSBKYXZhU2Ny
aXB0IHBhcnNlcyBudW1iZXJzIGFzIDY0LWJpdCBmbG9hdCB0aHVzIGludDY0IGFuZAotLy8gdWlu
dDY0IHdvdWxkIGxvc2UgcHJlY2lzaW9uIGlmIHJlbmRlcmVkIGFzIG51bWJlcnMuCi0vLwotLy8g
SnNvbk9iamVjdFdyaXRlciBpcyB0aHJlYWQtdW5zYWZlLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQ
T1JUIEpzb25PYmplY3RXcml0ZXIgOiBwdWJsaWMgU3RydWN0dXJlZE9iamVjdFdyaXRlciB7Ci0g
cHVibGljOgotICBKc29uT2JqZWN0V3JpdGVyKFN0cmluZ1BpZWNlIGluZGVudF9zdHJpbmcsCi0g
ICAgICAgICAgICAgICAgICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFt
KiBvdXQpCi0gICAgICA6IGVsZW1lbnRfKG5ldyBFbGVtZW50KE5VTEwpKSwKLSAgICAgICAgc3Ry
ZWFtXyhvdXQpLAotICAgICAgICBzaW5rXyhvdXQpLAotICAgICAgICBpbmRlbnRfc3RyaW5nXyhp
bmRlbnRfc3RyaW5nLlRvU3RyaW5nKCkpLAotICAgICAgICB1c2Vfd2Vic2FmZV9iYXNlNjRfZm9y
X2J5dGVzXyhmYWxzZSkge30KLSAgdmlydHVhbCB+SnNvbk9iamVjdFdyaXRlcigpOwotCi0gIC8v
IE9iamVjdFdyaXRlciBtZXRob2RzLgotICB2aXJ0dWFsIEpzb25PYmplY3RXcml0ZXIqIFN0YXJ0
T2JqZWN0KFN0cmluZ1BpZWNlIG5hbWUpOwotICB2aXJ0dWFsIEpzb25PYmplY3RXcml0ZXIqIEVu
ZE9iamVjdCgpOwotICB2aXJ0dWFsIEpzb25PYmplY3RXcml0ZXIqIFN0YXJ0TGlzdChTdHJpbmdQ
aWVjZSBuYW1lKTsKLSAgdmlydHVhbCBKc29uT2JqZWN0V3JpdGVyKiBFbmRMaXN0KCk7Ci0gIHZp
cnR1YWwgSnNvbk9iamVjdFdyaXRlciogUmVuZGVyQm9vbChTdHJpbmdQaWVjZSBuYW1lLCBib29s
IHZhbHVlKTsKLSAgdmlydHVhbCBKc29uT2JqZWN0V3JpdGVyKiBSZW5kZXJJbnQzMihTdHJpbmdQ
aWVjZSBuYW1lLCBpbnQzMiB2YWx1ZSk7Ci0gIHZpcnR1YWwgSnNvbk9iamVjdFdyaXRlciogUmVu
ZGVyVWludDMyKFN0cmluZ1BpZWNlIG5hbWUsIHVpbnQzMiB2YWx1ZSk7Ci0gIHZpcnR1YWwgSnNv
bk9iamVjdFdyaXRlciogUmVuZGVySW50NjQoU3RyaW5nUGllY2UgbmFtZSwgaW50NjQgdmFsdWUp
OwotICB2aXJ0dWFsIEpzb25PYmplY3RXcml0ZXIqIFJlbmRlclVpbnQ2NChTdHJpbmdQaWVjZSBu
YW1lLCB1aW50NjQgdmFsdWUpOwotICB2aXJ0dWFsIEpzb25PYmplY3RXcml0ZXIqIFJlbmRlckRv
dWJsZShTdHJpbmdQaWVjZSBuYW1lLCBkb3VibGUgdmFsdWUpOwotICB2aXJ0dWFsIEpzb25PYmpl
Y3RXcml0ZXIqIFJlbmRlckZsb2F0KFN0cmluZ1BpZWNlIG5hbWUsIGZsb2F0IHZhbHVlKTsKLSAg
dmlydHVhbCBKc29uT2JqZWN0V3JpdGVyKiBSZW5kZXJTdHJpbmcoU3RyaW5nUGllY2UgbmFtZSwg
U3RyaW5nUGllY2UgdmFsdWUpOwotICB2aXJ0dWFsIEpzb25PYmplY3RXcml0ZXIqIFJlbmRlckJ5
dGVzKFN0cmluZ1BpZWNlIG5hbWUsIFN0cmluZ1BpZWNlIHZhbHVlKTsKLSAgdmlydHVhbCBKc29u
T2JqZWN0V3JpdGVyKiBSZW5kZXJOdWxsKFN0cmluZ1BpZWNlIG5hbWUpOwotCi0gIHZvaWQgc2V0
X3VzZV93ZWJzYWZlX2Jhc2U2NF9mb3JfYnl0ZXMoYm9vbCB2YWx1ZSkgewotICAgIHVzZV93ZWJz
YWZlX2Jhc2U2NF9mb3JfYnl0ZXNfID0gdmFsdWU7Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgY2xh
c3MgTElCUFJPVE9CVUZfRVhQT1JUIEVsZW1lbnQgOiBwdWJsaWMgQmFzZUVsZW1lbnQgewotICAg
cHVibGljOgotICAgIGV4cGxpY2l0IEVsZW1lbnQoRWxlbWVudCogcGFyZW50KSA6IEJhc2VFbGVt
ZW50KHBhcmVudCksIGlzX2ZpcnN0Xyh0cnVlKSB7fQotCi0gICAgLy8gQ2FsbGVkIGJlZm9yZSBl
YWNoIGZpZWxkIG9mIHRoZSBFbGVtZW50IGlzIHRvIGJlIHByb2Nlc3NlZC4KLSAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCAocHJvY2Vzc2luZyB0aGUgZmlyc3Qg
ZmllbGQpLgotICAgIGJvb2wgaXNfZmlyc3QoKSB7Ci0gICAgICBpZiAoaXNfZmlyc3RfKSB7Ci0g
ICAgICAgIGlzX2ZpcnN0XyA9IGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgYm9vbCBpc19m
aXJzdF87Ci0KLSAgICBHT09HTEVfRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKEVsZW1l
bnQpOwotICB9OwotCi0gIHZpcnR1YWwgRWxlbWVudCogZWxlbWVudCgpIHsgcmV0dXJuIGVsZW1l
bnRfLmdldCgpOyB9Ci0KLSBwcml2YXRlOgotICBjbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgQnl0
ZVNpbmtXcmFwcGVyIDogcHVibGljIHN0cmluZ3M6OkJ5dGVTaW5rIHsKLSAgIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBCeXRlU2lua1dyYXBwZXIoZ29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0
cHV0U3RyZWFtKiBzdHJlYW0pCi0gICAgICAgIDogc3RyZWFtXyhzdHJlYW0pIHt9Ci0gICAgdmly
dHVhbCB+Qnl0ZVNpbmtXcmFwcGVyKCkge30KLQotICAgIC8vIEJ5dGVTaW5rIG1ldGhvZHMuCi0g
ICAgdmlydHVhbCB2b2lkIEFwcGVuZChjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IG4pIHsKLSAg
ICAgIHN0cmVhbV8tPldyaXRlUmF3KGJ5dGVzLCBuKTsKLSAgICB9Ci0KLSAgIHByaXZhdGU6Ci0g
ICAgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBzdHJlYW1fOwotCi0g
ICAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKEJ5dGVTaW5rV3JhcHBlcik7Ci0g
IH07Ci0KLSAgLy8gUmVuZGVycyBhIHNpbXBsZSB2YWx1ZSBhcyBhIHN0cmluZy4gQnkgZGVmYXVs
dCBhbGwgbm9uLXN0cmluZyBSZW5kZXIKLSAgLy8gbWV0aG9kcyBjb252ZXJ0IHRoZWlyIGFyZ3Vt
ZW50IHRvIGEgc3RyaW5nIGFuZCBjYWxsIHRoaXMgbWV0aG9kLiBUaGlzCi0gIC8vIG1ldGhvZCBj
YW4gdGhlbiBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc2ltcGxlIHZhbHVlIHdpdGhvdXQgZXNjYXBp
bmcgaXQuCi0gIEpzb25PYmplY3RXcml0ZXIqIFJlbmRlclNpbXBsZShTdHJpbmdQaWVjZSBuYW1l
LCBjb25zdCBzdHJpbmcmIHZhbHVlKSB7Ci0gICAgV3JpdGVQcmVmaXgobmFtZSk7Ci0gICAgc3Ry
ZWFtXy0+V3JpdGVTdHJpbmcodmFsdWUpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLy8g
UHVzaGVzIGEgbmV3IGVsZW1lbnQgdG8gdGhlIHN0YWNrLgotICB2b2lkIFB1c2goKSB7IGVsZW1l
bnRfLnJlc2V0KG5ldyBFbGVtZW50KGVsZW1lbnRfLnJlbGVhc2UoKSkpOyB9Ci0KLSAgLy8gUG9w
cyBhbiBlbGVtZW50IG9mZiBvZiB0aGUgc3RhY2sgYW5kIGRlbGV0ZXMgdGhlIHBvcHBlZCBlbGVt
ZW50LgotICB2b2lkIFBvcCgpIHsKLSAgICBib29sIG5lZWRzX25ld2xpbmUgPSAhZWxlbWVudF8t
PmlzX2ZpcnN0KCk7Ci0gICAgZWxlbWVudF8ucmVzZXQoZWxlbWVudF8tPnBvcDxFbGVtZW50Pigp
KTsKLSAgICBpZiAobmVlZHNfbmV3bGluZSkgTmV3TGluZSgpOwotICB9Ci0KLSAgLy8gSWYgcHJl
dHR5IHByaW50aW5nIGlzIGVuYWJsZWQsIHRoaXMgd2lsbCB3cml0ZSBhIG5ld2xpbmUgdG8gdGhl
IG91dHB1dCwKLSAgLy8gZm9sbG93ZWQgYnkgb3B0aW9uYWwgaW5kZW50YXRpb24uIE90aGVyd2lz
ZSB0aGlzIG1ldGhvZCBpcyBhIG5vb3AuCi0gIHZvaWQgTmV3TGluZSgpIHsKLSAgICBpZiAoIWlu
ZGVudF9zdHJpbmdfLmVtcHR5KCkpIHsKLSAgICAgIFdyaXRlQ2hhcignXG4nKTsKLSAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudCgpLT5sZXZlbCgpOyBpKyspIHsKLSAgICAgICAgc3Ry
ZWFtXy0+V3JpdGVTdHJpbmcoaW5kZW50X3N0cmluZ18pOwotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIC8vIFdyaXRlcyBhIHByZWZpeC4gVGhpcyB3aWxsIHdyaXRlIG91dCBhbnkgcHJldHR5IHBy
aW50aW5nIGFuZAotICAvLyBjb21tYXMgdGhhdCBhcmUgcmVxdWlyZWQsIGZvbGxvd2VkIGJ5IHRo
ZSBuYW1lIGFuZCBhICc6JyBpZgotICAvLyB0aGUgbmFtZSBpcyBub3QgbnVsbC4KLSAgdm9pZCBX
cml0ZVByZWZpeChTdHJpbmdQaWVjZSBuYW1lKTsKLQotICAvLyBXcml0ZXMgYW4gaW5kaXZpZHVh
bCBjaGFyYWN0ZXIgdG8gdGhlIG91dHB1dC4KLSAgdm9pZCBXcml0ZUNoYXIoY29uc3QgY2hhciBj
KSB7IHN0cmVhbV8tPldyaXRlUmF3KCZjLCBzaXplb2YoYykpOyB9Ci0KLSAgZ29vZ2xlOjpwcm90
b2J1Zjo6c2NvcGVkX3B0cjxFbGVtZW50PiBlbGVtZW50XzsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6
aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBzdHJlYW1fOwotICBCeXRlU2lua1dyYXBwZXIgc2lua187
Ci0gIGNvbnN0IHN0cmluZyBpbmRlbnRfc3RyaW5nXzsKLQotICAvLyBXaGV0aGVyIHRvIHVzZSBy
ZWd1bGFyIG9yIHdlYnNhZmUgYmFzZTY0IGVuY29kaW5nIGZvciBieXRlIGZpZWxkcy4gRGVmYXVs
dHMKLSAgLy8gdG8gcmVndWxhciBiYXNlNjQgZW5jb2RpbmcuCi0gIGJvb2wgdXNlX3dlYnNhZmVf
YmFzZTY0X2Zvcl9ieXRlc187Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVD
VE9SUyhKc29uT2JqZWN0V3JpdGVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIK
LX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8g
bmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJU
RVJfSlNPTl9PQkpFQ1RXUklURVJfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
dXRpbC9pbnRlcm5hbC9qc29uX29iamVjdHdyaXRlcl90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvanNvbl9vYmplY3R3cml0ZXJfdGVzdC5jYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjg3YjA2YWM3ODgzOTJiMzZhY2FiMDFkZWQ5ODIwMGFkMWFlMjdk
NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX29iamVjdHdyaXRlcl90ZXN0LmNjCisrKyAv
ZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUn
cyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9w
cm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9vYmpl
Y3R3cml0ZXIuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3Ry
ZWFtX2ltcGxfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFs
L3V0aWxpdHkuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xl
IHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgY29u
dmVydGVyIHsKLQotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFt
OwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OlN0cmluZ091dHB1dFN0cmVhbTsKLQotY2xh
c3MgSnNvbk9iamVjdFdyaXRlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBwcm90
ZWN0ZWQ6Ci0gIEpzb25PYmplY3RXcml0ZXJUZXN0KCkKLSAgICAgIDogc3RyX3N0cmVhbV8obmV3
IFN0cmluZ091dHB1dFN0cmVhbSgmb3V0cHV0XykpLAotICAgICAgICBvdXRfc3RyZWFtXyhuZXcg
Q29kZWRPdXRwdXRTdHJlYW0oc3RyX3N0cmVhbV8pKSwKLSAgICAgICAgb3dfKE5VTEwpIHt9Ci0K
LSAgdmlydHVhbCB+SnNvbk9iamVjdFdyaXRlclRlc3QoKSB7Ci0gICAgZGVsZXRlIG93XzsKLSAg
ICBkZWxldGUgb3V0X3N0cmVhbV87Ci0gICAgZGVsZXRlIHN0cl9zdHJlYW1fOwotICB9Ci0KLSAg
c3RyaW5nIG91dHB1dF87Ci0gIFN0cmluZ091dHB1dFN0cmVhbSogY29uc3Qgc3RyX3N0cmVhbV87
Ci0gIENvZGVkT3V0cHV0U3RyZWFtKiBjb25zdCBvdXRfc3RyZWFtXzsKLSAgSnNvbk9iamVjdFdy
aXRlciogb3dfOwotfTsKLQotVEVTVF9GKEpzb25PYmplY3RXcml0ZXJUZXN0LCBFbXB0eVJvb3RP
YmplY3QpIHsKLSAgb3dfID0gbmV3IEpzb25PYmplY3RXcml0ZXIoIiIsIG91dF9zdHJlYW1fKTsK
LSAgb3dfLT5TdGFydE9iamVjdCgiIiktPkVuZE9iamVjdCgpOwotICBFWFBFQ1RfRVEoInt9Iiwg
b3V0cHV0Xy5zdWJzdHIoMCwgb3V0X3N0cmVhbV8tPkJ5dGVDb3VudCgpKSk7Ci19Ci0KLVRFU1Rf
RihKc29uT2JqZWN0V3JpdGVyVGVzdCwgRW1wdHlPYmplY3QpIHsKLSAgb3dfID0gbmV3IEpzb25P
YmplY3RXcml0ZXIoIiIsIG91dF9zdHJlYW1fKTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAg
ICAgIC0+UmVuZGVyU3RyaW5nKCJ0ZXN0IiwgInZhbHVlIikKLSAgICAgIC0+U3RhcnRPYmplY3Qo
ImVtcHR5IikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIEVY
UEVDVF9FUSgie1widGVzdFwiOlwidmFsdWVcIixcImVtcHR5XCI6e319IiwKLSAgICAgICAgICAg
IG91dHB1dF8uc3Vic3RyKDAsIG91dF9zdHJlYW1fLT5CeXRlQ291bnQoKSkpOwotfQotCi1URVNU
X0YoSnNvbk9iamVjdFdyaXRlclRlc3QsIEVtcHR5Um9vdExpc3QpIHsKLSAgb3dfID0gbmV3IEpz
b25PYmplY3RXcml0ZXIoIiIsIG91dF9zdHJlYW1fKTsKLSAgb3dfLT5TdGFydExpc3QoIiIpLT5F
bmRMaXN0KCk7Ci0gIEVYUEVDVF9FUSgiW10iLCBvdXRwdXRfLnN1YnN0cigwLCBvdXRfc3RyZWFt
Xy0+Qnl0ZUNvdW50KCkpKTsKLX0KLQotVEVTVF9GKEpzb25PYmplY3RXcml0ZXJUZXN0LCBFbXB0
eUxpc3QpIHsKLSAgb3dfID0gbmV3IEpzb25PYmplY3RXcml0ZXIoIiIsIG91dF9zdHJlYW1fKTsK
LSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ0ZXN0IiwgInZh
bHVlIikKLSAgICAgIC0+U3RhcnRMaXN0KCJlbXB0eSIpCi0gICAgICAtPkVuZExpc3QoKQotICAg
ICAgLT5FbmRPYmplY3QoKTsKLSAgRVhQRUNUX0VRKCJ7XCJ0ZXN0XCI6XCJ2YWx1ZVwiLFwiZW1w
dHlcIjpbXX0iLAotICAgICAgICAgICAgb3V0cHV0Xy5zdWJzdHIoMCwgb3V0X3N0cmVhbV8tPkJ5
dGVDb3VudCgpKSk7Ci19Ci0KLVRFU1RfRihKc29uT2JqZWN0V3JpdGVyVGVzdCwgT2JqZWN0SW5P
YmplY3QpIHsKLSAgb3dfID0gbmV3IEpzb25PYmplY3RXcml0ZXIoIiIsIG91dF9zdHJlYW1fKTsK
LSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoIm5lc3RlZCIpCi0g
ICAgICAtPlJlbmRlclN0cmluZygiZmllbGQiLCAidmFsdWUiKQotICAgICAgLT5FbmRPYmplY3Qo
KQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgRVhQRUNUX0VRKCJ7XCJuZXN0ZWRcIjp7XCJmaWVs
ZFwiOlwidmFsdWVcIn19IiwKLSAgICAgICAgICAgIG91dHB1dF8uc3Vic3RyKDAsIG91dF9zdHJl
YW1fLT5CeXRlQ291bnQoKSkpOwotfQotCi1URVNUX0YoSnNvbk9iamVjdFdyaXRlclRlc3QsIExp
c3RJbk9iamVjdCkgewotICBvd18gPSBuZXcgSnNvbk9iamVjdFdyaXRlcigiIiwgb3V0X3N0cmVh
bV8pOwotICBvd18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5TdGFydExpc3QoIm5lc3RlZCIp
Ci0gICAgICAtPlJlbmRlclN0cmluZygiIiwgInZhbHVlIikKLSAgICAgIC0+RW5kTGlzdCgpCi0g
ICAgICAtPkVuZE9iamVjdCgpOwotICBFWFBFQ1RfRVEoIntcIm5lc3RlZFwiOltcInZhbHVlXCJd
fSIsCi0gICAgICAgICAgICBvdXRwdXRfLnN1YnN0cigwLCBvdXRfc3RyZWFtXy0+Qnl0ZUNvdW50
KCkpKTsKLX0KLQotVEVTVF9GKEpzb25PYmplY3RXcml0ZXJUZXN0LCBPYmplY3RJbkxpc3QpIHsK
LSAgb3dfID0gbmV3IEpzb25PYmplY3RXcml0ZXIoIiIsIG91dF9zdHJlYW1fKTsKLSAgb3dfLT5T
dGFydExpc3QoIiIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5SZW5kZXJTdHJp
bmcoImZpZWxkIiwgInZhbHVlIikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kTGlz
dCgpOwotICBFWFBFQ1RfRVEoIlt7XCJmaWVsZFwiOlwidmFsdWVcIn1dIiwKLSAgICAgICAgICAg
IG91dHB1dF8uc3Vic3RyKDAsIG91dF9zdHJlYW1fLT5CeXRlQ291bnQoKSkpOwotfQotCi1URVNU
X0YoSnNvbk9iamVjdFdyaXRlclRlc3QsIExpc3RJbkxpc3QpIHsKLSAgb3dfID0gbmV3IEpzb25P
YmplY3RXcml0ZXIoIiIsIG91dF9zdHJlYW1fKTsKLSAgb3dfLT5TdGFydExpc3QoIiIpCi0gICAg
ICAtPlN0YXJ0TGlzdCgiIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIiLCAidmFsdWUiKQotICAg
ICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+RW5kTGlzdCgpOwotICBFWFBFQ1RfRVEoIltbXCJ2YWx1
ZVwiXV0iLCBvdXRwdXRfLnN1YnN0cigwLCBvdXRfc3RyZWFtXy0+Qnl0ZUNvdW50KCkpKTsKLX0K
LQotVEVTVF9GKEpzb25PYmplY3RXcml0ZXJUZXN0LCBSZW5kZXJQcmltaXRpdmVzKSB7Ci0gIG93
XyA9IG5ldyBKc29uT2JqZWN0V3JpdGVyKCIiLCBvdXRfc3RyZWFtXyk7Ci0gIG93Xy0+U3RhcnRP
YmplY3QoIiIpCi0gICAgICAtPlJlbmRlckJvb2woImJvb2wiLCB0cnVlKQotICAgICAgLT5SZW5k
ZXJEb3VibGUoImRvdWJsZSIsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpCi0g
ICAgICAtPlJlbmRlckZsb2F0KCJmbG9hdCIsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpt
YXgoKSkKLSAgICAgIC0+UmVuZGVySW50MzIoImludCIsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzI+OjptaW4oKSkKLSAgICAgIC0+UmVuZGVySW50NjQoImxvbmciLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDY0Pjo6bWluKCkpCi0gICAgICAtPlJlbmRlckJ5dGVzKCJieXRlcyIsICJhYnJhY2Fk
YWJyYSIpCi0gICAgICAtPlJlbmRlclN0cmluZygic3RyaW5nIiwgInN0cmluZyIpCi0gICAgICAt
PlJlbmRlckJ5dGVzKCJlbXB0eWJ5dGVzIiwgIiIpCi0gICAgICAtPlJlbmRlclN0cmluZygiZW1w
dHlzdHJpbmciLCBzdHJpbmcoKSkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIEVYUEVDVF9FUSgK
LSAgICAgICJ7XCJib29sXCI6dHJ1ZSwiCi0gICAgICAiXCJkb3VibGVcIjoiICsKLSAgICAgICAg
ICBWYWx1ZUFzU3RyaW5nPGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgo
KSkgKwotICAgICAgICAgICIsIgotICAgICAgICAgICJcImZsb2F0XCI6IiArCi0gICAgICAgICAg
VmFsdWVBc1N0cmluZzxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKSAr
Ci0gICAgICAgICAgIiwiCi0gICAgICAgICAgIlwiaW50XCI6LTIxNDc0ODM2NDgsIgotICAgICAg
ICAgICJcImxvbmdcIjpcIi05MjIzMzcyMDM2ODU0Nzc1ODA4XCIsIgotICAgICAgICAgICJcImJ5
dGVzXCI6XCJZV0p5WVdOaFpHRmljbUU9XCIsIgotICAgICAgICAgICJcInN0cmluZ1wiOlwic3Ry
aW5nXCIsIgotICAgICAgICAgICJcImVtcHR5Ynl0ZXNcIjpcIlwiLCIKLSAgICAgICAgICAiXCJl
bXB0eXN0cmluZ1wiOlwiXCJ9IiwKLSAgICAgIG91dHB1dF8uc3Vic3RyKDAsIG91dF9zdHJlYW1f
LT5CeXRlQ291bnQoKSkpOwotfQotCi1URVNUX0YoSnNvbk9iamVjdFdyaXRlclRlc3QsIEJ5dGVz
RW5jb2Rlc0FzTm9uV2ViU2FmZUJhc2U2NCkgewotICBzdHJpbmcgczsKLSAgcy5wdXNoX2JhY2so
J1wzNzcnKTsKLSAgcy5wdXNoX2JhY2soJ1wzNTcnKTsKLSAgb3dfID0gbmV3IEpzb25PYmplY3RX
cml0ZXIoIiIsIG91dF9zdHJlYW1fKTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIiktPlJlbmRlckJ5
dGVzKCJieXRlcyIsIHMpLT5FbmRPYmplY3QoKTsKLSAgLy8gTm9uLXdlYi1zYWZlIHdvdWxkIGVu
Y29kZSB0aGlzIGFzICIvKzg9IgotICBFWFBFQ1RfRVEoIntcImJ5dGVzXCI6XCIvKzg9XCJ9IiwK
LSAgICAgICAgICAgIG91dHB1dF8uc3Vic3RyKDAsIG91dF9zdHJlYW1fLT5CeXRlQ291bnQoKSkp
OwotfQotCi1URVNUX0YoSnNvbk9iamVjdFdyaXRlclRlc3QsIFByZXR0eVByaW50TGlzdCkgewot
ICBvd18gPSBuZXcgSnNvbk9iamVjdFdyaXRlcigiICIsIG91dF9zdHJlYW1fKTsKLSAgb3dfLT5T
dGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRMaXN0KCJpdGVtcyIpCi0gICAgICAtPlJlbmRl
clN0cmluZygiIiwgIml0ZW0xIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIiLCAiaXRlbTIiKQot
ICAgICAgLT5SZW5kZXJTdHJpbmcoIiIsICJpdGVtMyIpCi0gICAgICAtPkVuZExpc3QoKQotICAg
ICAgLT5TdGFydExpc3QoImVtcHR5IikKLSAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAtPkVuZE9i
amVjdCgpOwotICBFWFBFQ1RfRVEoCi0gICAgICAie1xuIgotICAgICAgIiBcIml0ZW1zXCI6IFtc
biIKLSAgICAgICIgIFwiaXRlbTFcIixcbiIKLSAgICAgICIgIFwiaXRlbTJcIixcbiIKLSAgICAg
ICIgIFwiaXRlbTNcIlxuIgotICAgICAgIiBdLFxuIgotICAgICAgIiBcImVtcHR5XCI6IFtdXG4i
Ci0gICAgICAifVxuIiwKLSAgICAgIG91dHB1dF8uc3Vic3RyKDAsIG91dF9zdHJlYW1fLT5CeXRl
Q291bnQoKSkpOwotfQotCi1URVNUX0YoSnNvbk9iamVjdFdyaXRlclRlc3QsIFByZXR0eVByaW50
T2JqZWN0KSB7Ci0gIG93XyA9IG5ldyBKc29uT2JqZWN0V3JpdGVyKCIgIiwgb3V0X3N0cmVhbV8p
OwotICBvd18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5TdGFydE9iamVjdCgiaXRlbXMiKQot
ICAgICAgLT5SZW5kZXJTdHJpbmcoImtleTEiLCAiaXRlbTEiKQotICAgICAgLT5SZW5kZXJTdHJp
bmcoImtleTIiLCAiaXRlbTIiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoImtleTMiLCAiaXRlbTMi
KQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5TdGFydE9iamVjdCgiZW1wdHkiKQotICAg
ICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgRVhQRUNUX0VRKAotICAg
ICAgIntcbiIKLSAgICAgICIgXCJpdGVtc1wiOiB7XG4iCi0gICAgICAiICBcImtleTFcIjogXCJp
dGVtMVwiLFxuIgotICAgICAgIiAgXCJrZXkyXCI6IFwiaXRlbTJcIixcbiIKLSAgICAgICIgIFwi
a2V5M1wiOiBcIml0ZW0zXCJcbiIKLSAgICAgICIgfSxcbiIKLSAgICAgICIgXCJlbXB0eVwiOiB7
fVxuIgotICAgICAgIn1cbiIsCi0gICAgICBvdXRwdXRfLnN1YnN0cigwLCBvdXRfc3RyZWFtXy0+
Qnl0ZUNvdW50KCkpKTsKLX0KLQotVEVTVF9GKEpzb25PYmplY3RXcml0ZXJUZXN0LCBQcmV0dHlQ
cmludEVtcHR5T2JqZWN0SW5FbXB0eUxpc3QpIHsKLSAgb3dfID0gbmV3IEpzb25PYmplY3RXcml0
ZXIoIiAiLCBvdXRfc3RyZWFtXyk7Ci0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlN0
YXJ0TGlzdCgibGlzdCIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5FbmRPYmpl
Y3QoKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIEVYUEVDVF9F
USgKLSAgICAgICJ7XG4iCi0gICAgICAiIFwibGlzdFwiOiBbXG4iCi0gICAgICAiICB7fVxuIgot
ICAgICAgIiBdXG4iCi0gICAgICAifVxuIiwKLSAgICAgIG91dHB1dF8uc3Vic3RyKDAsIG91dF9z
dHJlYW1fLT5CeXRlQ291bnQoKSkpOwotfQotCi1URVNUX0YoSnNvbk9iamVjdFdyaXRlclRlc3Qs
IFByZXR0eVByaW50RG91YmxlSW5kZW50KSB7Ci0gIG93XyA9IG5ldyBKc29uT2JqZWN0V3JpdGVy
KCIgICIsIG91dF9zdHJlYW1fKTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVu
ZGVyQm9vbCgiYm9vbCIsIHRydWUpCi0gICAgICAtPlJlbmRlckludDMyKCJpbnQiLCA0MikKLSAg
ICAgIC0+RW5kT2JqZWN0KCk7Ci0gIEVYUEVDVF9FUSgKLSAgICAgICJ7XG4iCi0gICAgICAiICBc
ImJvb2xcIjogdHJ1ZSxcbiIKLSAgICAgICIgIFwiaW50XCI6IDQyXG4iCi0gICAgICAifVxuIiwK
LSAgICAgIG91dHB1dF8uc3Vic3RyKDAsIG91dF9zdHJlYW1fLT5CeXRlQ291bnQoKSkpOwotfQot
Ci1URVNUX0YoSnNvbk9iamVjdFdyaXRlclRlc3QsIFN0cmluZ3NFc2NhcGVkQW5kRW5jbG9zZWRJ
bkRvdWJsZVF1b3RlcykgewotICBvd18gPSBuZXcgSnNvbk9iamVjdFdyaXRlcigiIiwgb3V0X3N0
cmVhbV8pOwotICBvd18tPlN0YXJ0T2JqZWN0KCIiKS0+UmVuZGVyU3RyaW5nKCJzdHJpbmciLCAi
Jzw+JmFtcDtcXFwiXHJcbiIpLT5FbmRPYmplY3QoKTsKLSAgRVhQRUNUX0VRKCJ7XCJzdHJpbmdc
IjpcIidcXHUwMDNjXFx1MDAzZSZhbXA7XFxcXFxcXCJcXHJcXG5cIn0iLAotICAgICAgICAgICAg
b3V0cHV0Xy5zdWJzdHIoMCwgb3V0X3N0cmVhbV8tPkJ5dGVDb3VudCgpKSk7Ci19Ci0KLVRFU1Rf
RihKc29uT2JqZWN0V3JpdGVyVGVzdCwgU3RyaW5naWZpY2F0aW9uKSB7Ci0gIG93XyA9IG5ldyBK
c29uT2JqZWN0V3JpdGVyKCIiLCBvdXRfc3RyZWFtXyk7Ci0gIG93Xy0+U3RhcnRPYmplY3QoIiIp
Ci0gICAgICAtPlJlbmRlckRvdWJsZSgiZG91YmxlX25hbiIsIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCkpCi0gICAgICAtPlJlbmRlckZsb2F0KCJmbG9hdF9uYW4iLCBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCkpCi0gICAgICAtPlJlbmRlckRv
dWJsZSgiZG91YmxlX3BvcyIsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHko
KSkKLSAgICAgIC0+UmVuZGVyRmxvYXQoImZsb2F0X3BvcyIsIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpKQotICAgICAgLT5SZW5kZXJEb3VibGUoImRvdWJsZV9uZWciLCAt
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQotICAgICAgLT5SZW5kZXJG
bG9hdCgiZmxvYXRfbmVnIiwgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgp
KQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgRVhQRUNUX0VRKAotICAgICAgIntcImRvdWJsZV9u
YW5cIjpcIk5hTlwiLCIKLSAgICAgICJcImZsb2F0X25hblwiOlwiTmFOXCIsIgotICAgICAgIlwi
ZG91YmxlX3Bvc1wiOlwiSW5maW5pdHlcIiwiCi0gICAgICAiXCJmbG9hdF9wb3NcIjpcIkluZmlu
aXR5XCIsIgotICAgICAgIlwiZG91YmxlX25lZ1wiOlwiLUluZmluaXR5XCIsIgotICAgICAgIlwi
ZmxvYXRfbmVnXCI6XCItSW5maW5pdHlcIn0iLAotICAgICAgb3V0cHV0Xy5zdWJzdHIoMCwgb3V0
X3N0cmVhbV8tPkJ5dGVDb3VudCgpKSk7Ci19Ci0KLVRFU1RfRihKc29uT2JqZWN0V3JpdGVyVGVz
dCwgVGVzdFJlZ3VsYXJCeXRlRW5jb2RpbmcpIHsKLSAgb3dfID0gbmV3IEpzb25PYmplY3RXcml0
ZXIoIiIsIG91dF9zdHJlYW1fKTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVu
ZGVyQnl0ZXMoImJ5dGVzIiwgIlx4MDNceGVmXHhjMCIpCi0gICAgICAtPkVuZE9iamVjdCgpOwot
Ci0gIC8vIFRlc3QgdGhhdCB3ZSBnZXQgcmVndWxhciAobm9uIHdlYnNhZmUpIGJhc2U2NCBlbmNv
ZGluZyBvbiBieXRlIGZpZWxkcyBieQotICAvLyBkZWZhdWx0LgotICBFWFBFQ1RfRVEoIntcImJ5
dGVzXCI6XCJBKy9BXCJ9IiwKLSAgICAgICAgICAgIG91dHB1dF8uc3Vic3RyKDAsIG91dF9zdHJl
YW1fLT5CeXRlQ291bnQoKSkpOwotfQotCi1URVNUX0YoSnNvbk9iamVjdFdyaXRlclRlc3QsIFRl
c3RXZWJzYWZlQnl0ZUVuY29kaW5nKSB7Ci0gIG93XyA9IG5ldyBKc29uT2JqZWN0V3JpdGVyKCIi
LCBvdXRfc3RyZWFtXyk7Ci0gIG93Xy0+c2V0X3VzZV93ZWJzYWZlX2Jhc2U2NF9mb3JfYnl0ZXMo
dHJ1ZSk7Ci0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlckJ5dGVzKCJieXRl
cyIsICJceDAzXHhlZlx4YzAiKQotICAgICAgLT5FbmRPYmplY3QoKTsKLQotICAvLyBUZXN0IHRo
YXQgd2UgZ2V0IHdlYnNhZmUgYmFzZTY0IGVuY29kaW5nIHdoZW4gZXhwbGljaXRseSBhc2tlZC4K
LSAgRVhQRUNUX0VRKCJ7XCJieXRlc1wiOlwiQS1fQVwifSIsCi0gICAgICAgICAgICBvdXRwdXRf
LnN1YnN0cigwLCBvdXRfc3RyZWFtXy0+Qnl0ZUNvdW50KCkpKTsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIGNvbnZlcnRlcgotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvanNvbl9zdHJlYW1fcGFyc2VyLmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvanNvbl9zdHJlYW1fcGFyc2VyLmNjCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzOWJlN2IwMzkwMGFiOTA4ODE2Y2RhN2UwMWE1M2NhZGFlOGU0NzhkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fc3RyZWFtX3BhcnNlci5jYworKysgL2Rldi9udWxs
CkBAIC0xLDgyMCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wt
YnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fc3RyZWFtX3BhcnNl
ci5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNjdHlwZT4KLSNpbmNsdWRl
IDxjZXJybm8+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1
ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Nv
bW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29iamVjdF93
cml0ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX2Vz
Y2FwaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnV0aWwuaD4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwg
ewotCi0vLyBBbGxvdyB0aGVzZSBzeW1ib2xzIHRvIGJlIHJlZmVyZW5jZWQgYXMgdXRpbDo6U3Rh
dHVzLCB1dGlsOjplcnJvcjo6KiBpbgotLy8gdGhpcyBmaWxlLgotdXNpbmcgdXRpbDo6U3RhdHVz
OwotbmFtZXNwYWNlIGVycm9yIHsKLXVzaW5nIHV0aWw6OmVycm9yOjpJTlRFUk5BTDsKLXVzaW5n
IHV0aWw6OmVycm9yOjpJTlZBTElEX0FSR1VNRU5UOwotfSAgLy8gbmFtZXNwYWNlIGVycm9yCi0K
LW5hbWVzcGFjZSBjb252ZXJ0ZXIgewotCi0vLyBOdW1iZXIgb2YgZGlnaXRzIGluIGFuIGVzY2Fw
ZWQgVVRGLTE2IGNvZGUgdW5pdCAoJ1xcJyAndScgWCBYIFggWCkKLXN0YXRpYyBjb25zdCBpbnQg
a1VuaWNvZGVFc2NhcGVkTGVuZ3RoID0gNjsKLQotLy8gTGVuZ3RoIG9mIHRoZSB0cnVlLCBmYWxz
ZSwgYW5kIG51bGwgbGl0ZXJhbHMuCi1zdGF0aWMgY29uc3QgaW50IHRydWVfbGVuID0gc3RybGVu
KCJ0cnVlIik7Ci1zdGF0aWMgY29uc3QgaW50IGZhbHNlX2xlbiA9IHN0cmxlbigiZmFsc2UiKTsK
LXN0YXRpYyBjb25zdCBpbnQgbnVsbF9sZW4gPSBzdHJsZW4oIm51bGwiKTsKLQotaW5saW5lIGJv
b2wgSXNMZXR0ZXIoY2hhciBjKSB7Ci0gIHJldHVybiAoJ2EnIDw9IGMgJiYgYyA8PSAneicpIHx8
ICgnQScgPD0gYyAmJiBjIDw9ICdaJykgfHwgKGMgPT0gJ18nKSB8fAotICAgICAgICAgKGMgPT0g
JyQnKTsKLX0KLQotaW5saW5lIGJvb2wgSXNBbHBoYW51bWVyaWMoY2hhciBjKSB7Ci0gIHJldHVy
biBJc0xldHRlcihjKSB8fCAoJzAnIDw9IGMgJiYgYyA8PSAnOScpOwotfQotCi1zdGF0aWMgYm9v
bCBDb25zdW1lS2V5KFN0cmluZ1BpZWNlKiBpbnB1dCwgU3RyaW5nUGllY2UqIGtleSkgewotICBp
ZiAoaW5wdXQtPmVtcHR5KCkgfHwgIUlzTGV0dGVyKCgqaW5wdXQpWzBdKSkgcmV0dXJuIGZhbHNl
OwotICBpbnQgbGVuID0gMTsKLSAgZm9yICg7IGxlbiA8IGlucHV0LT5zaXplKCk7ICsrbGVuKSB7
Ci0gICAgaWYgKCFJc0FscGhhbnVtZXJpYygoKmlucHV0KVtsZW5dKSkgewotICAgICAgYnJlYWs7
Ci0gICAgfQotICB9Ci0gICprZXkgPSBTdHJpbmdQaWVjZShpbnB1dC0+ZGF0YSgpLCBsZW4pOwot
ICAqaW5wdXQgPSBTdHJpbmdQaWVjZShpbnB1dC0+ZGF0YSgpICsgbGVuLCBpbnB1dC0+c2l6ZSgp
IC0gbGVuKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIE1hdGNoS2V5KFN0cmlu
Z1BpZWNlIGlucHV0KSB7Ci0gIHJldHVybiAhaW5wdXQuZW1wdHkoKSAmJiBJc0xldHRlcihpbnB1
dFswXSk7Ci19Ci0KLUpzb25TdHJlYW1QYXJzZXI6Okpzb25TdHJlYW1QYXJzZXIoT2JqZWN0V3Jp
dGVyKiBvdykKLSAgICA6IG93XyhvdyksCi0gICAgICBzdGFja18oKSwKLSAgICAgIGxlZnRvdmVy
XygpLAotICAgICAganNvbl8oKSwKLSAgICAgIHBfKCksCi0gICAgICBrZXlfKCksCi0gICAgICBr
ZXlfc3RvcmFnZV8oKSwKLSAgICAgIGZpbmlzaGluZ18oZmFsc2UpLAotICAgICAgcGFyc2VkXygp
LAotICAgICAgcGFyc2VkX3N0b3JhZ2VfKCksCi0gICAgICBzdHJpbmdfb3Blbl8oMCksCi0gICAg
ICBjaHVua19zdG9yYWdlXygpLAotICAgICAgY29lcmNlX3RvX3V0ZjhfKGZhbHNlKSB7Ci0gIC8v
IEluaXRpYWxpemUgdGhlIHN0YWNrIHdpdGggYSBzaW5nbGUgdmFsdWUgdG8gYmUgcGFyc2VkLgot
ICBzdGFja18ucHVzaChWQUxVRSk7Ci19Ci0KLUpzb25TdHJlYW1QYXJzZXI6On5Kc29uU3RyZWFt
UGFyc2VyKCkge30KLQotCi11dGlsOjpTdGF0dXMgSnNvblN0cmVhbVBhcnNlcjo6UGFyc2UoU3Ry
aW5nUGllY2UganNvbikgewotICBTdHJpbmdQaWVjZSBjaHVuayA9IGpzb247Ci0gIC8vIElmIHdl
IGhhdmUgbGVmdG92ZXJzIGZyb20gYSBwcmV2aW91cyBjaHVuaywgYXBwZW5kIHRoZSBuZXcgY2h1
bmsgdG8gaXQKLSAgLy8gYW5kIGNyZWF0ZSBhIG5ldyBTdHJpbmdQaWVjZSBwb2ludGluZyBhdCB0
aGUgc3RyaW5nJ3MgZGF0YS4gVGhpcyBjb3VsZAotICAvLyBiZSBsYXJnZSBidXQgd2UgcmVseSBv
biB0aGUgY2h1bmtzIHRvIGJlIHNtYWxsLCBhc3N1bWluZyB0aGV5IGFyZQotICAvLyBmcmFnbWVu
dHMgb2YgYSBDb3JkLgotICBpZiAoIWxlZnRvdmVyXy5lbXB0eSgpKSB7Ci0gICAgLy8gRG9uJ3Qg
cG9pbnQgY2h1bmsgdG8gbGVmdG92ZXJfIGJlY2F1c2UgbGVmdG92ZXJfIHdpbGwgYmUgdXBkYXRl
ZCBpbgotICAgIC8vIFBhcnNlQ2h1bmsoY2h1bmspLgotICAgIGNodW5rX3N0b3JhZ2VfLnN3YXAo
bGVmdG92ZXJfKTsKLSAgICBqc29uLkFwcGVuZFRvU3RyaW5nKCZjaHVua19zdG9yYWdlXyk7Ci0g
ICAgY2h1bmsgPSBTdHJpbmdQaWVjZShjaHVua19zdG9yYWdlXyk7Ci0gIH0KLQotICAvLyBGaW5k
IHRoZSBzdHJ1Y3R1cmFsbHkgdmFsaWQgVVRGOCBwcmVmaXggYW5kIHBhcnNlIG9ubHkgdGhhdC4K
LSAgaW50IG4gPSBpbnRlcm5hbDo6VVRGOFNwblN0cnVjdHVyYWxseVZhbGlkKGNodW5rKTsKLSAg
aWYgKG4gPiAwKSB7Ci0gICAgdXRpbDo6U3RhdHVzIHN0YXR1cyA9IFBhcnNlQ2h1bmsoY2h1bmsu
c3Vic3RyKDAsIG4pKTsKLQotICAgIC8vIEFueSBsZWZ0b3ZlciBjaGFyYWN0ZXJzIGFyZSBzdGFz
aGVkIGluIGxlZnRvdmVyXyBmb3IgbGF0ZXIgcGFyc2luZyB3aGVuCi0gICAgLy8gdGhlcmUgaXMg
bW9yZSBkYXRhIGF2YWlsYWJsZS4KLSAgICBjaHVuay5zdWJzdHIobikuQXBwZW5kVG9TdHJpbmco
JmxlZnRvdmVyXyk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfSBlbHNlIHsKLSAgICBjaHVuay5D
b3B5VG9TdHJpbmcoJmxlZnRvdmVyXyk7Ci0gICAgcmV0dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci0g
IH0KLX0KLQotdXRpbDo6U3RhdHVzIEpzb25TdHJlYW1QYXJzZXI6OkZpbmlzaFBhcnNlKCkgewot
ICAvLyBJZiB3ZSBkbyBub3QgZXhwZWN0IGFueXRoaW5nIGFuZCB0aGVyZSBpcyBub3RoaW5nIGxl
ZnQgdG8gcGFyc2Ugd2UncmUgYWxsCi0gIC8vIGRvbmUuCi0gIGlmIChzdGFja18uZW1wdHkoKSAm
JiBsZWZ0b3Zlcl8uZW1wdHkoKSkgewotICAgIHJldHVybiB1dGlsOjpTdGF0dXM6Ok9LOwotICB9
Ci0KLSAgLy8gU3RvcmFnZSBmb3IgVVRGOC1jb2VyY2VkIHN0cmluZy4KLSAgZ29vZ2xlOjpwcm90
b2J1Zjo6c2NvcGVkX2FycmF5PGNoYXI+IHV0Zjg7Ci0gIGlmIChjb2VyY2VfdG9fdXRmOF8pIHsK
LSAgICB1dGY4LnJlc2V0KG5ldyBjaGFyW2xlZnRvdmVyXy5zaXplKCldKTsKLSAgICBjaGFyKiBj
b2VyY2VkID0gaW50ZXJuYWw6OlVURjhDb2VyY2VUb1N0cnVjdHVyYWxseVZhbGlkKGxlZnRvdmVy
XywgdXRmOC5nZXQoKSwgJyAnKTsKLSAgICBwXyA9IGpzb25fID0gU3RyaW5nUGllY2UoY29lcmNl
ZCwgbGVmdG92ZXJfLnNpemUoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcF8gPSBqc29uXyA9IGxlZnRv
dmVyXzsKLSAgICBpZiAoIWludGVybmFsOjpJc1N0cnVjdHVyYWxseVZhbGlkVVRGOChsZWZ0b3Zl
cl8pKSB7Ci0gICAgICByZXR1cm4gUmVwb3J0RmFpbHVyZSgiRW5jb3VudGVyZWQgbm9uIFVURi04
IGNvZGUgcG9pbnRzLiIpOwotICAgIH0KLSAgfQotCi0gIC8vIFBhcnNlIHRoZSByZW1haW5kZXIg
aW4gZmluaXNoaW5nIG1vZGUsIHdoaWNoIHJlcG9ydHMgZXJyb3JzIGZvciB0aGluZ3MgbGlrZQot
ICAvLyB1bnRlcm1pbmF0ZWQgc3RyaW5ncyBvciB1bmtub3duIHRva2VucyB0aGF0IHdvdWxkIG5v
cm1hbGx5IGJlIHJldHJpZWQuCi0gIGZpbmlzaGluZ18gPSB0cnVlOwotICB1dGlsOjpTdGF0dXMg
cmVzdWx0ID0gUnVuUGFyc2VyKCk7Ci0gIGlmIChyZXN1bHQub2soKSkgewotICAgIFNraXBXaGl0
ZXNwYWNlKCk7Ci0gICAgaWYgKCFwXy5lbXB0eSgpKSB7Ci0gICAgICByZXN1bHQgPSBSZXBvcnRG
YWlsdXJlKCJQYXJzaW5nIHRlcm1pbmF0ZWQgYmVmb3JlIGVuZCBvZiBpbnB1dC4iKTsKLSAgICB9
Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdXRpbDo6U3RhdHVzIEpzb25TdHJlYW1QYXJz
ZXI6OlBhcnNlQ2h1bmsoU3RyaW5nUGllY2UgY2h1bmspIHsKLSAgLy8gRG8gbm90IGRvIGFueSB3
b3JrIGlmIHRoZSBjaHVuayBpcyBlbXB0eS4KLSAgaWYgKGNodW5rLmVtcHR5KCkpIHJldHVybiB1
dGlsOjpTdGF0dXM6Ok9LOwotCi0gIHBfID0ganNvbl8gPSBjaHVuazsKLQotICBmaW5pc2hpbmdf
ID0gZmFsc2U7Ci0gIHV0aWw6OlN0YXR1cyByZXN1bHQgPSBSdW5QYXJzZXIoKTsKLSAgaWYgKCFy
ZXN1bHQub2soKSkgcmV0dXJuIHJlc3VsdDsKLQotICBTa2lwV2hpdGVzcGFjZSgpOwotICBpZiAo
cF8uZW1wdHkoKSkgewotICAgIC8vIElmIHdlIHBhcnNlZCBldmVyeXRoaW5nIHdlIGhhZCwgY2xl
YXIgdGhlIGxlZnRvdmVyLgotICAgIGxlZnRvdmVyXy5jbGVhcigpOwotICB9IGVsc2UgewotICAg
IC8vIElmIHdlIGRvIG5vdCBleHBlY3QgYW55dGhpbmcgaS5lLiBzdGFjayBpcyBlbXB0eSwgYW5k
IHdlIGhhdmUgbm9uLWVtcHR5Ci0gICAgLy8gc3RyaW5nIGxlZnQgdG8gcGFyc2UsIHdlIHJlcG9y
dCBhbiBlcnJvci4KLSAgICBpZiAoc3RhY2tfLmVtcHR5KCkpIHsKLSAgICAgIHJldHVybiBSZXBv
cnRGYWlsdXJlKCJQYXJzaW5nIHRlcm1pbmF0ZWQgYmVmb3JlIGVuZCBvZiBpbnB1dC4iKTsKLSAg
ICB9Ci0gICAgLy8gSWYgd2UgZXhwZWN0IGZ1dHVyZSBkYXRhIGkuZS4gc3RhY2sgaXMgbm9uLWVt
cHR5LCBhbmQgd2UgaGF2ZSBzb21lCi0gICAgLy8gdW5wYXJzZWQgZGF0YSBsZWZ0LCB3ZSBzYXZl
IGl0IGZvciBsYXRlciBwYXJzZS4KLSAgICBsZWZ0b3Zlcl8gPSBwXy5Ub1N0cmluZygpOwotICB9
Ci0gIHJldHVybiB1dGlsOjpTdGF0dXM6Ok9LOwotfQotCi11dGlsOjpTdGF0dXMgSnNvblN0cmVh
bVBhcnNlcjo6UnVuUGFyc2VyKCkgewotICB3aGlsZSAoIXN0YWNrXy5lbXB0eSgpKSB7Ci0gICAg
UGFyc2VUeXBlIHR5cGUgPSBzdGFja18udG9wKCk7Ci0gICAgVG9rZW5UeXBlIHQgPSAoc3RyaW5n
X29wZW5fID09IDApID8gR2V0TmV4dFRva2VuVHlwZSgpIDogQkVHSU5fU1RSSU5HOwotICAgIHN0
YWNrXy5wb3AoKTsKLSAgICB1dGlsOjpTdGF0dXMgcmVzdWx0OwotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgICAgY2FzZSBWQUxVRToKLSAgICAgICAgcmVzdWx0ID0gUGFyc2VWYWx1ZSh0KTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgT0JKX01JRDoKLSAgICAgICAgcmVzdWx0ID0gUGFy
c2VPYmplY3RNaWQodCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEVOVFJZOgotICAg
ICAgICByZXN1bHQgPSBQYXJzZUVudHJ5KHQpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz
ZSBFTlRSWV9NSUQ6Ci0gICAgICAgIHJlc3VsdCA9IFBhcnNlRW50cnlNaWQodCk7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBjYXNlIEFSUkFZX1ZBTFVFOgotICAgICAgICByZXN1bHQgPSBQYXJz
ZUFycmF5VmFsdWUodCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEFSUkFZX01JRDoK
LSAgICAgICAgcmVzdWx0ID0gUGFyc2VBcnJheU1pZCh0KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9IHV0aWw6OlN0YXR1cyh1dGlsOjplcnJvcjo6
SU5URVJOQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJDYXQoIlVua25vd24g
cGFyc2UgdHlwZTogIiwgdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCFy
ZXN1bHQub2soKSkgewotICAgICAgLy8gSWYgd2Ugd2VyZSBjYW5jZWxsZWQsIHNhdmUgb3VyIHN0
YXRlIGFuZCB0cnkgYWdhaW4gbGF0ZXIuCi0gICAgICBpZiAoIWZpbmlzaGluZ18gJiYgcmVzdWx0
ID09IHV0aWw6OlN0YXR1czo6Q0FOQ0VMTEVEKSB7Ci0gICAgICAgIHN0YWNrXy5wdXNoKHR5cGUp
OwotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEga2V5IHdlIHN0aWxsIG5lZWQgdG8gcmVuZGVyLCBt
YWtlIHN1cmUgdG8gc2F2ZSBvZmYgdGhlCi0gICAgICAgIC8vIGNvbnRlbnRzIGluIG91ciBvd24g
c3RvcmFnZS4KLSAgICAgICAgaWYgKCFrZXlfLmVtcHR5KCkgJiYga2V5X3N0b3JhZ2VfLmVtcHR5
KCkpIHsKLSAgICAgICAgICBrZXlfLkFwcGVuZFRvU3RyaW5nKCZrZXlfc3RvcmFnZV8pOwotICAg
ICAgICAgIGtleV8gPSBTdHJpbmdQaWVjZShrZXlfc3RvcmFnZV8pOwotICAgICAgICB9Ci0gICAg
ICAgIHJlc3VsdCA9IHV0aWw6OlN0YXR1czo6T0s7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSAgfQotICByZXR1cm4gdXRpbDo6U3RhdHVzOjpPSzsKLX0KLQotdXRpbDo6
U3RhdHVzIEpzb25TdHJlYW1QYXJzZXI6OlBhcnNlVmFsdWUoVG9rZW5UeXBlIHR5cGUpIHsKLSAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBCRUdJTl9PQkpFQ1Q6Ci0gICAgICByZXR1cm4gSGFu
ZGxlQmVnaW5PYmplY3QoKTsKLSAgICBjYXNlIEJFR0lOX0FSUkFZOgotICAgICAgcmV0dXJuIEhh
bmRsZUJlZ2luQXJyYXkoKTsKLSAgICBjYXNlIEJFR0lOX1NUUklORzoKLSAgICAgIHJldHVybiBQ
YXJzZVN0cmluZygpOwotICAgIGNhc2UgQkVHSU5fTlVNQkVSOgotICAgICAgcmV0dXJuIFBhcnNl
TnVtYmVyKCk7Ci0gICAgY2FzZSBCRUdJTl9UUlVFOgotICAgICAgcmV0dXJuIFBhcnNlVHJ1ZSgp
OwotICAgIGNhc2UgQkVHSU5fRkFMU0U6Ci0gICAgICByZXR1cm4gUGFyc2VGYWxzZSgpOwotICAg
IGNhc2UgQkVHSU5fTlVMTDoKLSAgICAgIHJldHVybiBQYXJzZU51bGwoKTsKLSAgICBjYXNlIFVO
S05PV046Ci0gICAgICByZXR1cm4gUmVwb3J0VW5rbm93bigiRXhwZWN0ZWQgYSB2YWx1ZS4iKTsK
LSAgICBkZWZhdWx0OiB7Ci0gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGhhdmluZyBiZWVuIGN1
dCBvZmYgd2hpbGUgcGFyc2luZywgd2FpdCBmb3IgbW9yZSBkYXRhLgotICAgICAgLy8gVGhpcyBo
YW5kbGVzIHRoaW5ncyBsaWtlICdmYWxzJyBiZWluZyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcs
IHdlCi0gICAgICAvLyBkb24ndCBrbm93IGlmIHRoZSBuZXh0IGNoYXIgd291bGQgYmUgZSwgY29t
cGxldGluZyBpdCwgb3Igc29tZXRoaW5nCi0gICAgICAvLyBlbHNlLCBtYWtpbmcgaXQgaW52YWxp
ZC4KLSAgICAgIGlmICghZmluaXNoaW5nXyAmJiBwXy5sZW5ndGgoKSA8IGZhbHNlX2xlbikgewot
ICAgICAgICByZXR1cm4gdXRpbDo6U3RhdHVzOjpDQU5DRUxMRUQ7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gUmVwb3J0RmFpbHVyZSgiVW5leHBlY3RlZCB0b2tlbi4iKTsKLSAgICB9Ci0gIH0KLX0K
LQotdXRpbDo6U3RhdHVzIEpzb25TdHJlYW1QYXJzZXI6OlBhcnNlU3RyaW5nKCkgewotICB1dGls
OjpTdGF0dXMgcmVzdWx0ID0gUGFyc2VTdHJpbmdIZWxwZXIoKTsKLSAgaWYgKHJlc3VsdC5vaygp
KSB7Ci0gICAgb3dfLT5SZW5kZXJTdHJpbmcoa2V5XywgcGFyc2VkXyk7Ci0gICAga2V5Xy5jbGVh
cigpOwotICAgIHBhcnNlZF8uY2xlYXIoKTsKLSAgICBwYXJzZWRfc3RvcmFnZV8uY2xlYXIoKTsK
LSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi11dGlsOjpTdGF0dXMgSnNvblN0cmVhbVBhcnNl
cjo6UGFyc2VTdHJpbmdIZWxwZXIoKSB7Ci0gIC8vIElmIHdlIGhhdmVuJ3Qgc2VlbiB0aGUgc3Rh
cnQgcXVvdGUsIGdyYWIgaXQgYW5kIHJlbWVtYmVyIGl0IGZvciBsYXRlci4KLSAgaWYgKHN0cmlu
Z19vcGVuXyA9PSAwKSB7Ci0gICAgc3RyaW5nX29wZW5fID0gKnBfLmRhdGEoKTsKLSAgICBHT09H
TEVfRENIRUNLKHN0cmluZ19vcGVuXyA9PSAnXCInIHx8IHN0cmluZ19vcGVuXyA9PSAnXCcnKTsK
LSAgICBBZHZhbmNlKCk7Ci0gIH0KLSAgLy8gVHJhY2sgd2hlcmUgd2UgbGFzdCBjb3BpZWQgZGF0
YSBmcm9tIHNvIHdlIGNhbiBtaW5pbWl6ZSBjb3B5aW5nLgotICBjb25zdCBjaGFyKiBsYXN0ID0g
cF8uZGF0YSgpOwotICB3aGlsZSAoIXBfLmVtcHR5KCkpIHsKLSAgICBjb25zdCBjaGFyKiBkYXRh
ID0gcF8uZGF0YSgpOwotICAgIGlmICgqZGF0YSA9PSAnXFwnKSB7Ci0gICAgICAvLyBXZSdyZSBh
Ym91dCB0byBoYW5kbGUgYW4gZXNjYXBlLCBjb3B5IGFsbCBieXRlcyBmcm9tIGxhc3QgdG8gZGF0
YS4KLSAgICAgIGlmIChsYXN0IDwgZGF0YSkgewotICAgICAgICBwYXJzZWRfc3RvcmFnZV8uYXBw
ZW5kKGxhc3QsIGRhdGEgLSBsYXN0KTsKLSAgICAgICAgbGFzdCA9IGRhdGE7Ci0gICAgICB9Ci0g
ICAgICAvLyBJZiB3ZSByYW4gb3V0IG9mIHN0cmluZyBhZnRlciB0aGUgXCwgY2FuY2VsIG9yIHJl
cG9ydCBhbiBlcnJvcgotICAgICAgLy8gZGVwZW5kaW5nIG9uIGlmIHdlIGV4cGVjdCBtb3JlIGRh
dGEgbGF0ZXIuCi0gICAgICBpZiAocF8ubGVuZ3RoKCkgPT0gMSkgewotICAgICAgICBpZiAoIWZp
bmlzaGluZ18pIHsKLSAgICAgICAgICByZXR1cm4gdXRpbDo6U3RhdHVzOjpDQU5DRUxMRUQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFJlcG9ydEZhaWx1cmUoIkNsb3NpbmcgcXVvdGUgZXhw
ZWN0ZWQgaW4gc3RyaW5nLiIpOwotICAgICAgfQotICAgICAgLy8gUGFyc2UgYSB1bmljb2RlIGVz
Y2FwZSBpZiB3ZSBmb3VuZCBcdSBpbiB0aGUgc3RyaW5nLgotICAgICAgaWYgKGRhdGFbMV0gPT0g
J3UnKSB7Ci0gICAgICAgIHV0aWw6OlN0YXR1cyByZXN1bHQgPSBQYXJzZVVuaWNvZGVFc2NhcGUo
KTsKLSAgICAgICAgaWYgKCFyZXN1bHQub2soKSkgewotICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTW92ZSBsYXN0IHBvaW50ZXIgcGFzdCB0aGUgdW5pY29k
ZSBlc2NhcGUgYW5kIGNvbnRpbnVlLgotICAgICAgICBsYXN0ID0gcF8uZGF0YSgpOwotICAgICAg
ICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIC8vIEhhbmRsZSB0aGUgc3RhbmRhcmQgc2V0IG9m
IGJhY2tzbGFzaC1lc2NhcGVkIGNoYXJhY3RlcnMuCi0gICAgICBzd2l0Y2ggKGRhdGFbMV0pIHsK
LSAgICAgICAgY2FzZSAnYic6Ci0gICAgICAgICAgcGFyc2VkX3N0b3JhZ2VfLnB1c2hfYmFjaygn
XGInKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgcGFy
c2VkX3N0b3JhZ2VfLnB1c2hfYmFjaygnXGYnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSAnbic6Ci0gICAgICAgICAgcGFyc2VkX3N0b3JhZ2VfLnB1c2hfYmFjaygnXG4nKTsKLSAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgcGFyc2VkX3N0b3Jh
Z2VfLnB1c2hfYmFjaygnXHInKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAndCc6
Ci0gICAgICAgICAgcGFyc2VkX3N0b3JhZ2VfLnB1c2hfYmFjaygnXHQnKTsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAndic6Ci0gICAgICAgICAgcGFyc2VkX3N0b3JhZ2VfLnB1c2hf
YmFjaygnXHYnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICBwYXJzZWRfc3RvcmFnZV8ucHVzaF9iYWNrKGRhdGFbMV0pOwotICAgICAgfQotICAgICAgLy8g
V2UgaGFuZGxlZCB0d28gY2hhcmFjdGVycywgc28gYWR2YW5jZSBwYXN0IHRoZW0gYW5kIGNvbnRp
bnVlLgotICAgICAgcF8ucmVtb3ZlX3ByZWZpeCgyKTsKLSAgICAgIGxhc3QgPSBwXy5kYXRhKCk7
Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgLy8gSWYgd2UgZm91bmQgdGhlIGNsb3Npbmcg
cXVvdGUgbm90ZSBpdCwgYWR2YW5jZSBwYXN0IGl0LCBhbmQgcmV0dXJuLgotICAgIGlmICgqZGF0
YSA9PSBzdHJpbmdfb3Blbl8pIHsKLSAgICAgIC8vIElmIHdlIGRpZG4ndCBjb3B5IGFueXRoaW5n
LCByZXVzZSB0aGUgaW5wdXQgYnVmZmVyLgotICAgICAgaWYgKHBhcnNlZF9zdG9yYWdlXy5lbXB0
eSgpKSB7Ci0gICAgICAgIHBhcnNlZF8gPSBTdHJpbmdQaWVjZShsYXN0LCBkYXRhIC0gbGFzdCk7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAobGFzdCA8IGRhdGEpIHsKLSAgICAgICAgICBw
YXJzZWRfc3RvcmFnZV8uYXBwZW5kKGxhc3QsIGRhdGEgLSBsYXN0KTsKLSAgICAgICAgICBsYXN0
ID0gZGF0YTsKLSAgICAgICAgfQotICAgICAgICBwYXJzZWRfID0gU3RyaW5nUGllY2UocGFyc2Vk
X3N0b3JhZ2VfKTsKLSAgICAgIH0KLSAgICAgIC8vIENsZWFyIHRoZSBxdW90ZSBjaGFyIHNvIG5l
eHQgdGltZSB3ZSB0cnkgdG8gcGFyc2UgYSBzdHJpbmcgd2UnbGwKLSAgICAgIC8vIHN0YXJ0IGZy
ZXNoLgotICAgICAgc3RyaW5nX29wZW5fID0gMDsKLSAgICAgIEFkdmFuY2UoKTsKLSAgICAgIHJl
dHVybiB1dGlsOjpTdGF0dXM6Ok9LOwotICAgIH0KLSAgICAvLyBOb3JtYWwgY2hhcmFjdGVyLCBq
dXN0IGFkdmFuY2UgcGFzdCBpdC4KLSAgICBBZHZhbmNlKCk7Ci0gIH0KLSAgLy8gSWYgd2UgcmFu
IG91dCBvZiBjaGFyYWN0ZXJzLCBjb3B5IG92ZXIgd2hhdCB3ZSBoYXZlIHNvIGZhci4KLSAgaWYg
KGxhc3QgPCBwXy5kYXRhKCkpIHsKLSAgICBwYXJzZWRfc3RvcmFnZV8uYXBwZW5kKGxhc3QsIHBf
LmRhdGEoKSAtIGxhc3QpOwotICB9Ci0gIC8vIElmIHdlIGRpZG4ndCBmaW5kIHRoZSBjbG9zaW5n
IHF1b3RlIGJ1dCB3ZSBleHBlY3QgbW9yZSBkYXRhLCBjYW5jZWwgZm9yIG5vdwotICBpZiAoIWZp
bmlzaGluZ18pIHsKLSAgICByZXR1cm4gdXRpbDo6U3RhdHVzOjpDQU5DRUxMRUQ7Ci0gIH0KLSAg
Ly8gRW5kIG9mIHN0cmluZyByZWFjaGVkIHdpdGhvdXQgYSBjbG9zaW5nIHF1b3RlLCByZXBvcnQg
YW4gZXJyb3IuCi0gIHN0cmluZ19vcGVuXyA9IDA7Ci0gIHJldHVybiBSZXBvcnRGYWlsdXJlKCJD
bG9zaW5nIHF1b3RlIGV4cGVjdGVkIGluIHN0cmluZy4iKTsKLX0KLQotLy8gQ29udmVydHMgYSB1
bmljb2RlIGVzY2FwZWQgY2hhcmFjdGVyIHRvIGEgZGVjaW1hbCB2YWx1ZSBzdG9yZWQgaW4gYSBj
aGFyMzIKLS8vIGZvciB1c2UgaW4gVVRGOCBlbmNvZGluZyB1dGlsaXR5LiAgV2UgYXNzdW1lIHRo
YXQgc3RyIGJlZ2lucyB3aXRoIFx1aGhoaCBhbmQKLS8vIGNvbnZlcnQgdGhhdCBmcm9tIHRoZSBo
ZXggbnVtYmVyIHRvIGEgZGVjaW1hbCB2YWx1ZS4KLS8vCi0vLyBUaGVyZSBhcmUgc29tZSBzZWN1
cml0eSBleHBsb2l0cyB3aXRoIFVURi04IHRoYXQgd2Ugc2hvdWxkIGJlIGNhcmVmdWwgb2Y6Ci0v
LyAgIC0gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzYvI1VURi04X0V4cGxvaXQK
LS8vICAgLSBodHRwOi8vc2l0ZXMvaW50bC1lbmcvZGVzaWduLWd1aWRlL2NvcmUtYXBwbGljYXRp
b24KLXV0aWw6OlN0YXR1cyBKc29uU3RyZWFtUGFyc2VyOjpQYXJzZVVuaWNvZGVFc2NhcGUoKSB7
Ci0gIGlmIChwXy5sZW5ndGgoKSA8IGtVbmljb2RlRXNjYXBlZExlbmd0aCkgewotICAgIGlmICgh
ZmluaXNoaW5nXykgewotICAgICAgcmV0dXJuIHV0aWw6OlN0YXR1czo6Q0FOQ0VMTEVEOwotICAg
IH0KLSAgICByZXR1cm4gUmVwb3J0RmFpbHVyZSgiSWxsZWdhbCBoZXggc3RyaW5nLiIpOwotICB9
Ci0gIEdPT0dMRV9EQ0hFQ0tfRVEoJ1xcJywgcF8uZGF0YSgpWzBdKTsKLSAgR09PR0xFX0RDSEVD
S19FUSgndScsIHBfLmRhdGEoKVsxXSk7Ci0gIHVpbnQzMiBjb2RlID0gMDsKLSAgZm9yIChpbnQg
aSA9IDI7IGkgPCBrVW5pY29kZUVzY2FwZWRMZW5ndGg7ICsraSkgewotICAgIGlmICghaXN4ZGln
aXQocF8uZGF0YSgpW2ldKSkgewotICAgICAgcmV0dXJuIFJlcG9ydEZhaWx1cmUoIkludmFsaWQg
ZXNjYXBlIHNlcXVlbmNlLiIpOwotICAgIH0KLSAgICBjb2RlID0gKGNvZGUgPDwgNCkgKyBoZXhf
ZGlnaXRfdG9faW50KHBfLmRhdGEoKVtpXSk7Ci0gIH0KLSAgaWYgKGNvZGUgPj0gSnNvbkVzY2Fw
aW5nOjprTWluSGlnaFN1cnJvZ2F0ZSAmJgotICAgICAgY29kZSA8PSBKc29uRXNjYXBpbmc6OmtN
YXhIaWdoU3Vycm9nYXRlKSB7Ci0gICAgaWYgKHBfLmxlbmd0aCgpIDwgMiAqIGtVbmljb2RlRXNj
YXBlZExlbmd0aCkgewotICAgICAgaWYgKCFmaW5pc2hpbmdfKSB7Ci0gICAgICAgIHJldHVybiB1
dGlsOjpTdGF0dXM6OkNBTkNFTExFRDsKLSAgICAgIH0KLSAgICAgIGlmICghY29lcmNlX3RvX3V0
ZjhfKSB7Ci0gICAgICAgIHJldHVybiBSZXBvcnRGYWlsdXJlKCJNaXNzaW5nIGxvdyBzdXJyb2dh
dGUuIik7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChwXy5kYXRhKClba1VuaWNvZGVFc2NhcGVk
TGVuZ3RoXSA9PSAnXFwnICYmCi0gICAgICAgICAgICAgICBwXy5kYXRhKClba1VuaWNvZGVFc2Nh
cGVkTGVuZ3RoICsgMV0gPT0gJ3UnKSB7Ci0gICAgICB1aW50MzIgbG93X2NvZGUgPSAwOwotICAg
ICAgZm9yIChpbnQgaSA9IGtVbmljb2RlRXNjYXBlZExlbmd0aCArIDI7IGkgPCAyICoga1VuaWNv
ZGVFc2NhcGVkTGVuZ3RoOwotICAgICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKCFpc3hkaWdp
dChwXy5kYXRhKClbaV0pKSB7Ci0gICAgICAgICAgcmV0dXJuIFJlcG9ydEZhaWx1cmUoIkludmFs
aWQgZXNjYXBlIHNlcXVlbmNlLiIpOwotICAgICAgICB9Ci0gICAgICAgIGxvd19jb2RlID0gKGxv
d19jb2RlIDw8IDQpICsgaGV4X2RpZ2l0X3RvX2ludChwXy5kYXRhKClbaV0pOwotICAgICAgfQot
ICAgICAgaWYgKGxvd19jb2RlID49IEpzb25Fc2NhcGluZzo6a01pbkxvd1N1cnJvZ2F0ZSAmJgot
ICAgICAgICAgIGxvd19jb2RlIDw9IEpzb25Fc2NhcGluZzo6a01heExvd1N1cnJvZ2F0ZSkgewot
ICAgICAgICAvLyBDb252ZXJ0IFVURi0xNiBzdXJyb2dhdGUgcGFpciB0byAyMS1iaXQgVW5pY29k
ZSBjb2RlcG9pbnQuCi0gICAgICAgIGNvZGUgPSAoKChjb2RlICYgMHgzRkYpIDw8IDEwKSB8IChs
b3dfY29kZSAmIDB4M0ZGKSkgKwotICAgICAgICAgICAgICAgSnNvbkVzY2FwaW5nOjprTWluU3Vw
cGxlbWVudGFyeUNvZGVQb2ludDsKLSAgICAgICAgLy8gQWR2YW5jZSBwYXN0IHRoZSBmaXJzdCBj
b2RlIHVuaXQgZXNjYXBlLgotICAgICAgICBwXy5yZW1vdmVfcHJlZml4KGtVbmljb2RlRXNjYXBl
ZExlbmd0aCk7Ci0gICAgICB9IGVsc2UgaWYgKCFjb2VyY2VfdG9fdXRmOF8pIHsKLSAgICAgICAg
cmV0dXJuIFJlcG9ydEZhaWx1cmUoIkludmFsaWQgbG93IHN1cnJvZ2F0ZS4iKTsKLSAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKCFjb2VyY2VfdG9fdXRmOF8pIHsKLSAgICAgIHJldHVybiBSZXBvcnRG
YWlsdXJlKCJNaXNzaW5nIGxvdyBzdXJyb2dhdGUuIik7Ci0gICAgfQotICB9Ci0gIGlmICghY29l
cmNlX3RvX3V0ZjhfICYmICFJc1ZhbGlkQ29kZVBvaW50KGNvZGUpKSB7Ci0gICAgcmV0dXJuIFJl
cG9ydEZhaWx1cmUoIkludmFsaWQgdW5pY29kZSBjb2RlIHBvaW50LiIpOwotICB9Ci0gIGNoYXIg
YnVmW1VURm1heF07Ci0gIGludCBsZW4gPSBFbmNvZGVBc1VURjhDaGFyKGNvZGUsIGJ1Zik7Ci0g
IC8vIEFkdmFuY2UgcGFzdCB0aGUgW2ZpbmFsXSBjb2RlIHVuaXQgZXNjYXBlLgotICBwXy5yZW1v
dmVfcHJlZml4KGtVbmljb2RlRXNjYXBlZExlbmd0aCk7Ci0gIHBhcnNlZF9zdG9yYWdlXy5hcHBl
bmQoYnVmLCBsZW4pOwotICByZXR1cm4gdXRpbDo6U3RhdHVzOjpPSzsKLX0KLQotdXRpbDo6U3Rh
dHVzIEpzb25TdHJlYW1QYXJzZXI6OlBhcnNlTnVtYmVyKCkgewotICBOdW1iZXJSZXN1bHQgbnVt
YmVyOwotICB1dGlsOjpTdGF0dXMgcmVzdWx0ID0gUGFyc2VOdW1iZXJIZWxwZXIoJm51bWJlcik7
Ci0gIGlmIChyZXN1bHQub2soKSkgewotICAgIHN3aXRjaCAobnVtYmVyLnR5cGUpIHsKLSAgICAg
IGNhc2UgTnVtYmVyUmVzdWx0OjpET1VCTEU6Ci0gICAgICAgIG93Xy0+UmVuZGVyRG91YmxlKGtl
eV8sIG51bWJlci5kb3VibGVfdmFsKTsKLSAgICAgICAga2V5Xy5jbGVhcigpOwotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSBOdW1iZXJSZXN1bHQ6OklOVDoKLSAgICAgICAgb3dfLT5SZW5k
ZXJJbnQ2NChrZXlfLCBudW1iZXIuaW50X3ZhbCk7Ci0gICAgICAgIGtleV8uY2xlYXIoKTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgTnVtYmVyUmVzdWx0OjpVSU5UOgotICAgICAgICBv
d18tPlJlbmRlclVpbnQ2NChrZXlfLCBudW1iZXIudWludF92YWwpOwotICAgICAgICBrZXlfLmNs
ZWFyKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
UmVwb3J0RmFpbHVyZSgiVW5hYmxlIHRvIHBhcnNlIG51bWJlci4iKTsKLSAgICB9Ci0gIH0KLSAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdXRpbDo6U3RhdHVzIEpzb25TdHJlYW1QYXJzZXI6OlBhcnNl
TnVtYmVySGVscGVyKE51bWJlclJlc3VsdCogcmVzdWx0KSB7Ci0gIGNvbnN0IGNoYXIqIGRhdGEg
PSBwXy5kYXRhKCk7Ci0gIGludCBsZW5ndGggPSBwXy5sZW5ndGgoKTsKLQotICAvLyBMb29rIGZv
ciB0aGUgZmlyc3Qgbm9uLW51bWVyaWMgY2hhcmFjdGVyLCBvciB0aGUgZW5kIG9mIHRoZSBzdHJp
bmcuCi0gIGludCBpbmRleCA9IDA7Ci0gIGJvb2wgZmxvYXRpbmcgPSBmYWxzZTsKLSAgYm9vbCBu
ZWdhdGl2ZSA9IGRhdGFbaW5kZXhdID09ICctJzsKLSAgLy8gRmluZCB0aGUgZmlyc3QgY2hhcmFj
dGVyIHRoYXQgY2Fubm90IGJlIHBhcnQgb2YgdGhlIG51bWJlci4gQWxvbmcgdGhlIHdheQotICAv
LyBkZXRlY3QgaWYgdGhlIG51bWJlciBuZWVkcyB0byBiZSBwYXJzZWQgYXMgYSBkb3VibGUuCi0g
IC8vIE5vdGUgdGhhdCB0aGlzIHJlc3RyaWN0cyBudW1iZXJzIHRvIHRoZSBKU09OIHNwZWNpZmlj
YXRpb24sIHNvIGZvciBleGFtcGxlCi0gIC8vIHdlIGRvIG5vdCBzdXBwb3J0IGhleCBvciBvY3Rh
bCBub3RhdGlvbnMuCi0gIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewotICAgIGNo
YXIgYyA9IGRhdGFbaW5kZXhdOwotICAgIGlmIChpc2RpZ2l0KGMpKSBjb250aW51ZTsKLSAgICBp
ZiAoYyA9PSAnLicgfHwgYyA9PSAnZScgfHwgYyA9PSAnRScpIHsKLSAgICAgIGZsb2F0aW5nID0g
dHJ1ZTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAoYyA9PSAnKycgfHwgYyA9PSAn
LScgfHwgYyA9PSAneCcpIGNvbnRpbnVlOwotICAgIC8vIE5vdCBhIHZhbGlkIG51bWJlciBjaGFy
YWN0ZXIsIGJyZWFrIG91dC4KLSAgICBicmVhazsKLSAgfQotCi0gIC8vIElmIHRoZSBlbnRpcmUg
aW5wdXQgaXMgYSB2YWxpZCBudW1iZXIsIGFuZCB3ZSBtYXkgaGF2ZSBtb3JlIGNvbnRlbnQgaW4g
dGhlCi0gIC8vIGZ1dHVyZSwgd2UgYWJvcnQgZm9yIG5vdyBhbmQgcmVzdW1lIHdoZW4gd2Uga25v
dyBtb3JlLgotICBpZiAoaW5kZXggPT0gbGVuZ3RoICYmICFmaW5pc2hpbmdfKSB7Ci0gICAgcmV0
dXJuIHV0aWw6OlN0YXR1czo6Q0FOQ0VMTEVEOwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgc3RyaW5n
IGNvbnRhaW5pbmcganVzdCB0aGUgbnVtYmVyLCBzbyB3ZSBjYW4gdXNlIHNhZmVfc3RydG9YCi0g
IHN0cmluZyBudW1iZXIgPSBwXy5zdWJzdHIoMCwgaW5kZXgpLlRvU3RyaW5nKCk7Ci0KLSAgLy8g
RmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBwYXJzZSBhcyBhIGRvdWJsZS4KLSAgaWYgKGZsb2F0aW5n
KSB7Ci0gICAgaWYgKCFzYWZlX3N0cnRvZChudW1iZXIsICZyZXN1bHQtPmRvdWJsZV92YWwpKSB7
Ci0gICAgICByZXR1cm4gUmVwb3J0RmFpbHVyZSgiVW5hYmxlIHRvIHBhcnNlIG51bWJlci4iKTsK
LSAgICB9Ci0gICAgcmVzdWx0LT50eXBlID0gTnVtYmVyUmVzdWx0OjpET1VCTEU7Ci0gICAgcF8u
cmVtb3ZlX3ByZWZpeChpbmRleCk7Ci0gICAgcmV0dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci0gIH0K
LQotICAvLyBQb3NpdGl2ZSBub24tZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBwYXJzZSBhcyBhIHVp
bnQ2NC4KLSAgaWYgKCFuZWdhdGl2ZSkgewotICAgIC8vIE9jdGFsL0hleCBudW1iZXJzIGFyZSBu
b3QgdmFsaWQgSlNPTiB2YWx1ZXMuCi0gICAgaWYgKG51bWJlci5sZW5ndGgoKSA+PSAyICYmIG51
bWJlclswXSA9PSAnMCcpIHsKLSAgICAgIHJldHVybiBSZXBvcnRGYWlsdXJlKCJPY3RhbC9oZXgg
bnVtYmVycyBhcmUgbm90IHZhbGlkIEpTT04gdmFsdWVzLiIpOwotICAgIH0KLSAgICBpZiAoIXNh
ZmVfc3RydG91NjQobnVtYmVyLCAmcmVzdWx0LT51aW50X3ZhbCkpIHsKLSAgICAgIHJldHVybiBS
ZXBvcnRGYWlsdXJlKCJVbmFibGUgdG8gcGFyc2UgbnVtYmVyLiIpOwotICAgIH0KLSAgICByZXN1
bHQtPnR5cGUgPSBOdW1iZXJSZXN1bHQ6OlVJTlQ7Ci0gICAgcF8ucmVtb3ZlX3ByZWZpeChpbmRl
eCk7Ci0gICAgcmV0dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci0gIH0KLQotICAvLyBPY3RhbC9IZXgg
bnVtYmVycyBhcmUgbm90IHZhbGlkIEpTT04gdmFsdWVzLgotICBpZiAobnVtYmVyLmxlbmd0aCgp
ID49IDMgJiYgbnVtYmVyWzFdID09ICcwJykgewotICAgIHJldHVybiBSZXBvcnRGYWlsdXJlKCJP
Y3RhbC9oZXggbnVtYmVycyBhcmUgbm90IHZhbGlkIEpTT04gdmFsdWVzLiIpOwotICB9Ci0gIC8v
IE5lZ2F0aXZlIG5vbi1mbG9hdGluZyBwb2ludCBudW1iZXIsIHBhcnNlIGFzIGFuIGludDY0Lgot
ICBpZiAoIXNhZmVfc3RydG82NChudW1iZXIsICZyZXN1bHQtPmludF92YWwpKSB7Ci0gICAgcmV0
dXJuIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBwYXJzZSBudW1iZXIuIik7Ci0gIH0KLSAgcmVz
dWx0LT50eXBlID0gTnVtYmVyUmVzdWx0OjpJTlQ7Ci0gIHBfLnJlbW92ZV9wcmVmaXgoaW5kZXgp
OwotICByZXR1cm4gdXRpbDo6U3RhdHVzOjpPSzsKLX0KLQotdXRpbDo6U3RhdHVzIEpzb25TdHJl
YW1QYXJzZXI6OkhhbmRsZUJlZ2luT2JqZWN0KCkgewotICBHT09HTEVfRENIRUNLX0VRKCd7Jywg
KnBfLmRhdGEoKSk7Ci0gIEFkdmFuY2UoKTsKLSAgb3dfLT5TdGFydE9iamVjdChrZXlfKTsKLSAg
a2V5Xy5jbGVhcigpOwotICBzdGFja18ucHVzaChFTlRSWSk7Ci0gIHJldHVybiB1dGlsOjpTdGF0
dXM6Ok9LOwotfQotCi11dGlsOjpTdGF0dXMgSnNvblN0cmVhbVBhcnNlcjo6UGFyc2VPYmplY3RN
aWQoVG9rZW5UeXBlIHR5cGUpIHsKLSAgaWYgKHR5cGUgPT0gVU5LTk9XTikgewotICAgIHJldHVy
biBSZXBvcnRVbmtub3duKCJFeHBlY3RlZCAsIG9yIH0gYWZ0ZXIga2V5OnZhbHVlIHBhaXIuIik7
Ci0gIH0KLQotICAvLyBPYmplY3QgaXMgY29tcGxldGUsIGFkdmFuY2UgcGFzdCB0aGUgY29tbWEg
YW5kIHJlbmRlciB0aGUgRW5kT2JqZWN0LgotICBpZiAodHlwZSA9PSBFTkRfT0JKRUNUKSB7Ci0g
ICAgQWR2YW5jZSgpOwotICAgIG93Xy0+RW5kT2JqZWN0KCk7Ci0gICAgcmV0dXJuIHV0aWw6OlN0
YXR1czo6T0s7Ci0gIH0KLSAgLy8gRm91bmQgYSBjb21tYSwgYWR2YW5jZSBwYXN0IGl0IGFuZCBn
ZXQgcmVhZHkgZm9yIGFuIGVudHJ5LgotICBpZiAodHlwZSA9PSBWQUxVRV9TRVBBUkFUT1IpIHsK
LSAgICBBZHZhbmNlKCk7Ci0gICAgc3RhY2tfLnB1c2goRU5UUlkpOwotICAgIHJldHVybiB1dGls
OjpTdGF0dXM6Ok9LOwotICB9Ci0gIC8vIElsbGVnYWwgdG9rZW4gYWZ0ZXIga2V5OnZhbHVlIHBh
aXIuCi0gIHJldHVybiBSZXBvcnRGYWlsdXJlKCJFeHBlY3RlZCAsIG9yIH0gYWZ0ZXIga2V5OnZh
bHVlIHBhaXIuIik7Ci19Ci0KLXV0aWw6OlN0YXR1cyBKc29uU3RyZWFtUGFyc2VyOjpQYXJzZUVu
dHJ5KFRva2VuVHlwZSB0eXBlKSB7Ci0gIGlmICh0eXBlID09IFVOS05PV04pIHsKLSAgICByZXR1
cm4gUmVwb3J0VW5rbm93bigiRXhwZWN0ZWQgYW4gb2JqZWN0IGtleSBvciB9LiIpOwotICB9Ci0K
LSAgLy8gQ2xvc2UgdGhlIG9iamVjdCBhbmQgcmV0dXJuLiBUaGlzIGFsbG93cyBmb3IgdHJhaWxp
bmcgY29tbWFzLgotICBpZiAodHlwZSA9PSBFTkRfT0JKRUNUKSB7Ci0gICAgb3dfLT5FbmRPYmpl
Y3QoKTsKLSAgICBBZHZhbmNlKCk7Ci0gICAgcmV0dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci0gIH0K
LQotICB1dGlsOjpTdGF0dXMgcmVzdWx0OwotICBpZiAodHlwZSA9PSBCRUdJTl9TVFJJTkcpIHsK
LSAgICAvLyBLZXkgaXMgYSBzdHJpbmcgKHN0YW5kYXJkIEpTT04pLCBwYXJzZSBpdCBhbmQgc3Rv
cmUgdGhlIHN0cmluZy4KLSAgICByZXN1bHQgPSBQYXJzZVN0cmluZ0hlbHBlcigpOwotICAgIGlm
IChyZXN1bHQub2soKSkgewotICAgICAga2V5X3N0b3JhZ2VfLmNsZWFyKCk7Ci0gICAgICBpZiAo
IXBhcnNlZF9zdG9yYWdlXy5lbXB0eSgpKSB7Ci0gICAgICAgIHBhcnNlZF9zdG9yYWdlXy5zd2Fw
KGtleV9zdG9yYWdlXyk7Ci0gICAgICAgIGtleV8gPSBTdHJpbmdQaWVjZShrZXlfc3RvcmFnZV8p
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAga2V5XyA9IHBhcnNlZF87Ci0gICAgICB9Ci0gICAg
ICBwYXJzZWRfLmNsZWFyKCk7Ci0gICAgfQotICB9IGVsc2UgaWYgKHR5cGUgPT0gQkVHSU5fS0VZ
KSB7Ci0gICAgLy8gS2V5IGlzIGEgYmFyZSBrZXkgKGJhY2sgY29tcGF0KSwgY3JlYXRlIGEgU3Ry
aW5nUGllY2UgcG9pbnRpbmcgdG8gaXQuCi0gICAgcmVzdWx0ID0gUGFyc2VLZXkoKTsKLSAgfSBl
bHNlIHsKLSAgICAvLyBVbmtub3duIGtleSB0eXBlLCByZXBvcnQgYW4gZXJyb3IuCi0gICAgcmVz
dWx0ID0gUmVwb3J0RmFpbHVyZSgiRXhwZWN0ZWQgYW4gb2JqZWN0IGtleSBvciB9LiIpOwotICB9
Ci0gIC8vIE9uIHN1Y2Nlc3Mgd2UgbmV4dCBleHBlY3QgYW4gZW50cnkgbWlkICc6JyB0aGVuIGFu
IG9iamVjdCBtaWQgJywnIG9yICd9JwotICBpZiAocmVzdWx0Lm9rKCkpIHsKLSAgICBzdGFja18u
cHVzaChPQkpfTUlEKTsKLSAgICBzdGFja18ucHVzaChFTlRSWV9NSUQpOwotICB9Ci0gIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXV0aWw6OlN0YXR1cyBKc29uU3RyZWFtUGFyc2VyOjpQYXJzZUVudHJ5
TWlkKFRva2VuVHlwZSB0eXBlKSB7Ci0gIGlmICh0eXBlID09IFVOS05PV04pIHsKLSAgICByZXR1
cm4gUmVwb3J0VW5rbm93bigiRXhwZWN0ZWQgOiBiZXR3ZWVuIGtleTp2YWx1ZSBwYWlyLiIpOwot
ICB9Ci0gIGlmICh0eXBlID09IEVOVFJZX1NFUEFSQVRPUikgewotICAgIEFkdmFuY2UoKTsKLSAg
ICBzdGFja18ucHVzaChWQUxVRSk7Ci0gICAgcmV0dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci0gIH0K
LSAgcmV0dXJuIFJlcG9ydEZhaWx1cmUoIkV4cGVjdGVkIDogYmV0d2VlbiBrZXk6dmFsdWUgcGFp
ci4iKTsKLX0KLQotdXRpbDo6U3RhdHVzIEpzb25TdHJlYW1QYXJzZXI6OkhhbmRsZUJlZ2luQXJy
YXkoKSB7Ci0gIEdPT0dMRV9EQ0hFQ0tfRVEoJ1snLCAqcF8uZGF0YSgpKTsKLSAgQWR2YW5jZSgp
OwotICBvd18tPlN0YXJ0TGlzdChrZXlfKTsKLSAga2V5Xy5jbGVhcigpOwotICBzdGFja18ucHVz
aChBUlJBWV9WQUxVRSk7Ci0gIHJldHVybiB1dGlsOjpTdGF0dXM6Ok9LOwotfQotCi11dGlsOjpT
dGF0dXMgSnNvblN0cmVhbVBhcnNlcjo6UGFyc2VBcnJheVZhbHVlKFRva2VuVHlwZSB0eXBlKSB7
Ci0gIGlmICh0eXBlID09IFVOS05PV04pIHsKLSAgICByZXR1cm4gUmVwb3J0VW5rbm93bigiRXhw
ZWN0ZWQgYSB2YWx1ZSBvciBdIHdpdGhpbiBhbiBhcnJheS4iKTsKLSAgfQotCi0gIGlmICh0eXBl
ID09IEVORF9BUlJBWSkgewotICAgIG93Xy0+RW5kTGlzdCgpOwotICAgIEFkdmFuY2UoKTsKLSAg
ICByZXR1cm4gdXRpbDo6U3RhdHVzOjpPSzsKLSAgfQotCi0gIC8vIFRoZSBQYXJzZVZhbHVlIGNh
bGwgbWF5IHB1c2ggc29tZXRoaW5nIG9udG8gdGhlIHN0YWNrIHNvIHdlIG5lZWQgdG8gbWFrZQot
ICAvLyBzdXJlIGFuIEFSUkFZX01JRCBpcyBhZnRlciBpdCwgc28gd2UgcHVzaCBpdCBvbiBub3cu
Ci0gIHN0YWNrXy5wdXNoKEFSUkFZX01JRCk7Ci0gIHV0aWw6OlN0YXR1cyByZXN1bHQgPSBQYXJz
ZVZhbHVlKHR5cGUpOwotICBpZiAocmVzdWx0ID09IHV0aWw6OlN0YXR1czo6Q0FOQ0VMTEVEKSB7
Ci0gICAgLy8gSWYgd2Ugd2VyZSBjYW5jZWxsZWQsIHBvcCBiYWNrIG9mZiB0aGUgQVJSQVlfTUlE
IHNvIHdlIGRvbid0IHRyeSB0bwotICAgIC8vIHB1c2ggaXQgb24gYWdhaW4gd2hlbiB3ZSB0cnkg
b3Zlci4KLSAgICBzdGFja18ucG9wKCk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdXRp
bDo6U3RhdHVzIEpzb25TdHJlYW1QYXJzZXI6OlBhcnNlQXJyYXlNaWQoVG9rZW5UeXBlIHR5cGUp
IHsKLSAgaWYgKHR5cGUgPT0gVU5LTk9XTikgewotICAgIHJldHVybiBSZXBvcnRVbmtub3duKCJF
eHBlY3RlZCAsIG9yIF0gYWZ0ZXIgYXJyYXkgdmFsdWUuIik7Ci0gIH0KLQotICBpZiAodHlwZSA9
PSBFTkRfQVJSQVkpIHsKLSAgICBvd18tPkVuZExpc3QoKTsKLSAgICBBZHZhbmNlKCk7Ci0gICAg
cmV0dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci0gIH0KLQotICAvLyBGb3VuZCBhIGNvbW1hLCBhZHZh
bmNlIHBhc3QgaXQgYW5kIGV4cGVjdCBhbiBhcnJheSB2YWx1ZSBuZXh0LgotICBpZiAodHlwZSA9
PSBWQUxVRV9TRVBBUkFUT1IpIHsKLSAgICBBZHZhbmNlKCk7Ci0gICAgc3RhY2tfLnB1c2goQVJS
QVlfVkFMVUUpOwotICAgIHJldHVybiB1dGlsOjpTdGF0dXM6Ok9LOwotICB9Ci0gIC8vIElsbGVn
YWwgdG9rZW4gYWZ0ZXIgYXJyYXkgdmFsdWUuCi0gIHJldHVybiBSZXBvcnRGYWlsdXJlKCJFeHBl
Y3RlZCAsIG9yIF0gYWZ0ZXIgYXJyYXkgdmFsdWUuIik7Ci19Ci0KLXV0aWw6OlN0YXR1cyBKc29u
U3RyZWFtUGFyc2VyOjpQYXJzZVRydWUoKSB7Ci0gIG93Xy0+UmVuZGVyQm9vbChrZXlfLCB0cnVl
KTsKLSAga2V5Xy5jbGVhcigpOwotICBwXy5yZW1vdmVfcHJlZml4KHRydWVfbGVuKTsKLSAgcmV0
dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci19Ci0KLXV0aWw6OlN0YXR1cyBKc29uU3RyZWFtUGFyc2Vy
OjpQYXJzZUZhbHNlKCkgewotICBvd18tPlJlbmRlckJvb2woa2V5XywgZmFsc2UpOwotICBrZXlf
LmNsZWFyKCk7Ci0gIHBfLnJlbW92ZV9wcmVmaXgoZmFsc2VfbGVuKTsKLSAgcmV0dXJuIHV0aWw6
OlN0YXR1czo6T0s7Ci19Ci0KLXV0aWw6OlN0YXR1cyBKc29uU3RyZWFtUGFyc2VyOjpQYXJzZU51
bGwoKSB7Ci0gIG93Xy0+UmVuZGVyTnVsbChrZXlfKTsKLSAga2V5Xy5jbGVhcigpOwotICBwXy5y
ZW1vdmVfcHJlZml4KG51bGxfbGVuKTsKLSAgcmV0dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci19Ci0K
LXV0aWw6OlN0YXR1cyBKc29uU3RyZWFtUGFyc2VyOjpSZXBvcnRGYWlsdXJlKFN0cmluZ1BpZWNl
IG1lc3NhZ2UpIHsKLSAgc3RhdGljIGNvbnN0IGludCBrQ29udGV4dExlbmd0aCA9IDIwOwotICBj
b25zdCBjaGFyKiBwX3N0YXJ0ID0gcF8uZGF0YSgpOwotICBjb25zdCBjaGFyKiBqc29uX3N0YXJ0
ID0ganNvbl8uZGF0YSgpOwotICBjb25zdCBjaGFyKiBiZWdpbiA9IHN0ZDo6bWF4KHBfc3RhcnQg
LSBrQ29udGV4dExlbmd0aCwganNvbl9zdGFydCk7Ci0gIGNvbnN0IGNoYXIqIGVuZCA9Ci0gICAg
ICBzdGQ6Om1pbihwX3N0YXJ0ICsga0NvbnRleHRMZW5ndGgsIGpzb25fc3RhcnQgKyBqc29uXy5z
aXplKCkpOwotICBTdHJpbmdQaWVjZSBzZWdtZW50KGJlZ2luLCBlbmQgLSBiZWdpbik7Ci0gIHN0
cmluZyBsb2NhdGlvbihwX3N0YXJ0IC0gYmVnaW4sICcgJyk7Ci0gIGxvY2F0aW9uLnB1c2hfYmFj
aygnXicpOwotICByZXR1cm4gdXRpbDo6U3RhdHVzKHV0aWw6OmVycm9yOjpJTlZBTElEX0FSR1VN
RU5ULAotICAgICAgICAgICAgICAgICAgICAgIFN0ckNhdChtZXNzYWdlLCAiXG4iLCBzZWdtZW50
LCAiXG4iLCBsb2NhdGlvbikpOwotfQotCi11dGlsOjpTdGF0dXMgSnNvblN0cmVhbVBhcnNlcjo6
UmVwb3J0VW5rbm93bihTdHJpbmdQaWVjZSBtZXNzYWdlKSB7Ci0gIC8vIElmIHdlIGFyZW4ndCBm
aW5pc2hpbmcgdGhlIHBhcnNlLCBjYW5jZWwgcGFyc2luZyBhbmQgdHJ5IGxhdGVyLgotICBpZiAo
IWZpbmlzaGluZ18pIHsKLSAgICByZXR1cm4gdXRpbDo6U3RhdHVzOjpDQU5DRUxMRUQ7Ci0gIH0K
LSAgaWYgKHBfLmVtcHR5KCkpIHsKLSAgICByZXR1cm4gUmVwb3J0RmFpbHVyZShTdHJDYXQoIlVu
ZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4gIiwgbWVzc2FnZSkpOwotICB9Ci0gIHJldHVybiBSZXBv
cnRGYWlsdXJlKG1lc3NhZ2UpOwotfQotCi12b2lkIEpzb25TdHJlYW1QYXJzZXI6OlNraXBXaGl0
ZXNwYWNlKCkgewotICB3aGlsZSAoIXBfLmVtcHR5KCkgJiYgYXNjaWlfaXNzcGFjZSgqcF8uZGF0
YSgpKSkgewotICAgIEFkdmFuY2UoKTsKLSAgfQotfQotCi12b2lkIEpzb25TdHJlYW1QYXJzZXI6
OkFkdmFuY2UoKSB7Ci0gIC8vIEFkdmFuY2UgYnkgbW92aW5nIG9uZSBVVEY4IGNoYXJhY3RlciB3
aGlsZSBtYWtpbmcgc3VyZSB3ZSBkb24ndCBnbyBiZXlvbmQKLSAgLy8gdGhlIGxlbmd0aCBvZiBT
dHJpbmdQaWVjZS4KLSAgcF8ucmVtb3ZlX3ByZWZpeChzdGQ6Om1pbjxpbnQ+KAotICAgICAgcF8u
bGVuZ3RoKCksIFVURjhGaXJzdExldHRlck51bUJ5dGVzKHBfLmRhdGEoKSwgcF8ubGVuZ3RoKCkp
KSk7Ci19Ci0KLXV0aWw6OlN0YXR1cyBKc29uU3RyZWFtUGFyc2VyOjpQYXJzZUtleSgpIHsKLSAg
U3RyaW5nUGllY2Ugb3JpZ2luYWwgPSBwXzsKLSAgaWYgKCFDb25zdW1lS2V5KCZwXywgJmtleV8p
KSB7Ci0gICAgcmV0dXJuIFJlcG9ydEZhaWx1cmUoIkludmFsaWQga2V5IG9yIHZhcmlhYmxlIG5h
bWUuIik7Ci0gIH0KLSAgLy8gSWYgd2UgY29uc3VtZWQgZXZlcnl0aGluZyBidXQgZXhwZWN0IG1v
cmUgZGF0YSwgcmVzZXQgcF8gYW5kIGNhbmNlbCBzaW5jZQotICAvLyB3ZSBjYW4ndCBrbm93IGlm
IHRoZSBrZXkgd2FzIGNvbXBsZXRlIG9yIG5vdC4KLSAgaWYgKCFmaW5pc2hpbmdfICYmIHBfLmVt
cHR5KCkpIHsKLSAgICBwXyA9IG9yaWdpbmFsOwotICAgIHJldHVybiB1dGlsOjpTdGF0dXM6OkNB
TkNFTExFRDsKLSAgfQotICAvLyBTaW5jZSB3ZSBhcmVuJ3QgdXNpbmcgdGhlIGtleSBzdG9yYWdl
LCBjbGVhciBpdCBvdXQuCi0gIGtleV9zdG9yYWdlXy5jbGVhcigpOwotICByZXR1cm4gdXRpbDo6
U3RhdHVzOjpPSzsKLX0KLQotSnNvblN0cmVhbVBhcnNlcjo6VG9rZW5UeXBlIEpzb25TdHJlYW1Q
YXJzZXI6OkdldE5leHRUb2tlblR5cGUoKSB7Ci0gIFNraXBXaGl0ZXNwYWNlKCk7Ci0KLSAgaW50
IHNpemUgPSBwXy5zaXplKCk7Ci0gIGlmIChzaXplID09IDApIHsKLSAgICAvLyBJZiB3ZSByYW4g
b3V0IG9mIGRhdGEsIHJlcG9ydCB1bmtub3duIGFuZCB3ZSdsbCBwbGFjZSB0aGUgcHJldmlvdXMg
cGFyc2UKLSAgICAvLyB0eXBlIG9udG8gdGhlIHN0YWNrIGFuZCB0cnkgYWdhaW4gd2hlbiB3ZSBo
YXZlIG1vcmUgZGF0YS4KLSAgICByZXR1cm4gVU5LTk9XTjsKLSAgfQotICAvLyBUT0RPKHN2ZW4p
OiBTcGxpdCB0aGlzIG1ldGhvZCBiYXNlZCBvbiBjb250ZXh0IHNpbmNlIGRpZmZlcmVudCBjb250
ZXh0cwotICAvLyBzdXBwb3J0IGRpZmZlcmVudCB0b2tlbnMuIFdvdWxkIHNsaWdodGx5IHNwZWVk
IHVwIHByb2Nlc3Npbmc/Ci0gIGNvbnN0IGNoYXIqIGRhdGEgPSBwXy5kYXRhKCk7Ci0gIGlmICgq
ZGF0YSA9PSAnXCInIHx8ICpkYXRhID09ICdcJycpIHJldHVybiBCRUdJTl9TVFJJTkc7Ci0gIGlm
ICgqZGF0YSA9PSAnLScgfHwgKCcwJyA8PSAqZGF0YSAmJiAqZGF0YSA8PSAnOScpKSB7Ci0gICAg
cmV0dXJuIEJFR0lOX05VTUJFUjsKLSAgfQotICBpZiAoc2l6ZSA+PSB0cnVlX2xlbiAmJiAhc3Ry
bmNtcChkYXRhLCAidHJ1ZSIsIHRydWVfbGVuKSkgewotICAgIHJldHVybiBCRUdJTl9UUlVFOwot
ICB9Ci0gIGlmIChzaXplID49IGZhbHNlX2xlbiAmJiAhc3RybmNtcChkYXRhLCAiZmFsc2UiLCBm
YWxzZV9sZW4pKSB7Ci0gICAgcmV0dXJuIEJFR0lOX0ZBTFNFOwotICB9Ci0gIGlmIChzaXplID49
IG51bGxfbGVuICYmICFzdHJuY21wKGRhdGEsICJudWxsIiwgbnVsbF9sZW4pKSB7Ci0gICAgcmV0
dXJuIEJFR0lOX05VTEw7Ci0gIH0KLSAgaWYgKCpkYXRhID09ICd7JykgcmV0dXJuIEJFR0lOX09C
SkVDVDsKLSAgaWYgKCpkYXRhID09ICd9JykgcmV0dXJuIEVORF9PQkpFQ1Q7Ci0gIGlmICgqZGF0
YSA9PSAnWycpIHJldHVybiBCRUdJTl9BUlJBWTsKLSAgaWYgKCpkYXRhID09ICddJykgcmV0dXJu
IEVORF9BUlJBWTsKLSAgaWYgKCpkYXRhID09ICc6JykgcmV0dXJuIEVOVFJZX1NFUEFSQVRPUjsK
LSAgaWYgKCpkYXRhID09ICcsJykgcmV0dXJuIFZBTFVFX1NFUEFSQVRPUjsKLSAgaWYgKE1hdGNo
S2V5KHBfKSkgewotICAgIHJldHVybiBCRUdJTl9LRVk7Ci0gIH0KLQotICAvLyBXZSBkb24ndCBr
bm93IHRoYXQgd2UgbmVjZXNzYXJpbHkgaGF2ZSBhbiBpbnZhbGlkIHRva2VuIGhlcmUsIGp1c3Qg
dGhhdCB3ZQotICAvLyBjYW4ndCBwYXJzZSB3aGF0IHdlIGhhdmUgc28gZmFyLiBTbyB3ZSBkb24n
dCByZXBvcnQgYW4gZXJyb3IgYW5kIGp1c3QKLSAgLy8gcmV0dXJuIFVOS05PV04gc28gd2UgY2Fu
IHRyeSBhZ2FpbiBsYXRlciB3aGVuIHdlIGhhdmUgbW9yZSBkYXRhLCBvciBpZiB3ZQotICAvLyBm
aW5pc2ggYW5kIHdlIGhhdmUgbGVmdG92ZXJzLgotICByZXR1cm4gVU5LTk9XTjsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIGNvbnZlcnRlcgotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9zdHJlYW1fcGFyc2VyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX3N0cmVhbV9wYXJzZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDI3OGMyOGZiYzZhYmY2NmUyNDgxMDhjZjQyMjdiNTZlMDVk
YTk2YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9qc29uX3N0cmVhbV9wYXJzZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfSlNPTl9TVFJFQU1f
UEFSU0VSX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfSlNPTl9T
VFJFQU1fUEFSU0VSX0hfXwotCi0jaW5jbHVkZSA8c3RhY2s+Ci0jaW5jbHVkZSA8c3RyaW5nPgot
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwaWVjZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zdGF0dXMuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgdXRp
bCB7Ci1jbGFzcyBTdGF0dXM7Ci19ICAvLyBuYW1lc3BhY2UgdXRpbAotCi1uYW1lc3BhY2UgcHJv
dG9idWYgewotbmFtZXNwYWNlIHV0aWwgewotbmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0KLWNsYXNz
IE9iamVjdFdyaXRlcjsKLQotLy8gQSBKU09OIHBhcnNlciB0aGF0IGNhbiBwYXJzZSBhIHN0cmVh
bSBvZiBKU09OIGNodW5rcyByYXRoZXIgdGhhbiBuZWVkaW5nIHRoZQotLy8gZW50aXJlIEpTT04g
c3RyaW5nIHVwIGZyb250LiBJdCBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHBhcnNlciBp
bgotLy8gLy9uZXQvcHJvdG8vanNvbi9qc29uLXBhcnNlci5oIHRoYXQgaGFzIGJlZW4gY2hhbmdl
ZCBpbiB0aGUgZm9sbG93aW5nIHdheXM6Ci0vLyAtIENoYW5nZWQgZnJvbSByZWN1cnNpb24gdG8g
YW4gZXhwbGljaXQgc3RhY2sgdG8gYWxsb3cgcmVzdW1wdGlvbgotLy8gLSBBZGRlZCBzdXBwb3J0
IGZvciBpbnQ2NCBhbmQgdWludDY0IG51bWJlcnMKLS8vIC0gUmVtb3ZlZCBzdXBwb3J0IGZvciBv
Y3RhbCBhbmQgZGVjaW1hbCBlc2NhcGVzCi0vLyAtIFJlbW92ZWQgc3VwcG9ydCBmb3IgbnVtZXJp
YyBrZXlzCi0vLyAtIFJlbW92ZWQgc3VwcG9ydCBmb3IgZnVuY3Rpb25zIChqYXZhc2NyaXB0KQot
Ly8gLSBSZW1vdmVkIHNvbWUgbGF4LWNvbW1hIHN1cHBvcnQgKGJ1dCBrZXB0IHRyYWlsaW5nIGNv
bW1hIHN1cHBvcnQpCi0vLyAtIFdyaXRlcyBkaXJlY3RseSB0byBhbiBPYmplY3RXcml0ZXIgcmF0
aGVyIHRoYW4gdXNpbmcgc3ViY2xhc3NpbmcKLS8vCi0vLyBIZXJlIGlzIGFuIGV4YW1wbGUgdXNh
Z2U6Ci0vLyBKc29uU3RyZWFtUGFyc2VyIHBhcnNlcihvd18uZ2V0KCkpOwotLy8gdXRpbDo6U3Rh
dHVzIHJlc3VsdCA9IHBhcnNlci5QYXJzZShjaHVuazEpOwotLy8gcmVzdWx0LlVwZGF0ZShwYXJz
ZXIuUGFyc2UoY2h1bmsyKSk7Ci0vLyByZXN1bHQuVXBkYXRlKHBhcnNlci5GaW5pc2hQYXJzZSgp
KTsKLS8vIEdPT0dMRV9EQ0hFQ0socmVzdWx0Lm9rKCkpIDw8ICJGYWlsZWQgdG8gcGFyc2UgSlNP
TiI7Ci0vLwotLy8gVGhpcyBwYXJzZXIgaXMgdGhyZWFkLWNvbXBhdGlibGUgYXMgbG9uZyBhcyBv
bmx5IG9uZSB0aHJlYWQgaXMgY2FsbGluZyBhCi0vLyBQYXJzZSgpIG1ldGhvZCBhdCBhIHRpbWUu
Ci1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgSnNvblN0cmVhbVBhcnNlciB7Ci0gcHVibGljOgot
ICAvLyBDcmVhdGVzIGEgSnNvblN0cmVhbVBhcnNlciB0aGF0IHdpbGwgd3JpdGUgdG8gdGhlIGdp
dmVuIE9iamVjdFdyaXRlci4KLSAgZXhwbGljaXQgSnNvblN0cmVhbVBhcnNlcihPYmplY3RXcml0
ZXIqIG93KTsKLSAgdmlydHVhbCB+SnNvblN0cmVhbVBhcnNlcigpOwotCi0gIC8vIFBhcnNlcyBh
IFVURi04IGVuY29kZWQgSlNPTiBzdHJpbmcgZnJvbSBhIFN0cmluZ1BpZWNlLgotICB1dGlsOjpT
dGF0dXMgUGFyc2UoU3RyaW5nUGllY2UganNvbik7Ci0KLQotICAvLyBGaW5pc2ggcGFyc2luZyB0
aGUgSlNPTiBzdHJpbmcuCi0gIHV0aWw6OlN0YXR1cyBGaW5pc2hQYXJzZSgpOwotCi0KLSBwcml2
YXRlOgotICBlbnVtIFRva2VuVHlwZSB7Ci0gICAgQkVHSU5fU1RSSU5HLCAgICAgLy8gIiBvciAn
Ci0gICAgQkVHSU5fTlVNQkVSLCAgICAgLy8gLSBvciBkaWdpdAotICAgIEJFR0lOX1RSVUUsICAg
ICAgIC8vIHRydWUKLSAgICBCRUdJTl9GQUxTRSwgICAgICAvLyBmYWxzZQotICAgIEJFR0lOX05V
TEwsICAgICAgIC8vIG51bGwKLSAgICBCRUdJTl9PQkpFQ1QsICAgICAvLyB7Ci0gICAgRU5EX09C
SkVDVCwgICAgICAgLy8gfQotICAgIEJFR0lOX0FSUkFZLCAgICAgIC8vIFsKLSAgICBFTkRfQVJS
QVksICAgICAgICAvLyBdCi0gICAgRU5UUllfU0VQQVJBVE9SLCAgLy8gOgotICAgIFZBTFVFX1NF
UEFSQVRPUiwgIC8vICwKLSAgICBCRUdJTl9LRVksICAgICAgICAvLyBsZXR0ZXIsIF8sICQgb3Ig
ZGlnaXQuICBNdXN0IGJlZ2luIHdpdGggbm9uLWRpZ2l0Ci0gICAgVU5LTk9XTiAgICAgICAgICAg
Ly8gVW5rbm93biB0b2tlbiBvciB3ZSByYW4gb3V0IG9mIHRoZSBzdHJlYW0uCi0gIH07Ci0KLSAg
ZW51bSBQYXJzZVR5cGUgewotICAgIFZBTFVFLCAgICAgICAgLy8gRXhwZWN0cyBhIHssIFssIHRy
dWUsIGZhbHNlLCBudWxsLCBzdHJpbmcgb3IgbnVtYmVyCi0gICAgT0JKX01JRCwgICAgICAvLyBF
eHBlY3RzIGEgJywnIG9yIH0KLSAgICBFTlRSWSwgICAgICAgIC8vIEV4cGVjdHMgYSBrZXkgb3Ig
fQotICAgIEVOVFJZX01JRCwgICAgLy8gRXhwZWN0cyBhIDoKLSAgICBBUlJBWV9WQUxVRSwgIC8v
IEV4cGVjdHMgYSB2YWx1ZSBvciBdCi0gICAgQVJSQVlfTUlEICAgICAvLyBFeHBlY3RzIGEgJywn
IG9yIF0KLSAgfTsKLQotICAvLyBIb2xkcyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBudW1iZXIK
LSAgc3RydWN0IE51bWJlclJlc3VsdCB7Ci0gICAgZW51bSBUeXBlIHsgRE9VQkxFLCBJTlQsIFVJ
TlQgfTsKLSAgICBUeXBlIHR5cGU7Ci0gICAgdW5pb24gewotICAgICAgZG91YmxlIGRvdWJsZV92
YWw7Ci0gICAgICBpbnQ2NCBpbnRfdmFsOwotICAgICAgdWludDY0IHVpbnRfdmFsOwotICAgIH07
Ci0gIH07Ci0KLSAgLy8gUGFyc2VzIGEgc2luZ2xlIGNodW5rIG9mIEpTT04sIHJldHVybmluZyBh
biBlcnJvciBpZiB0aGUgSlNPTiB3YXMgaW52YWxpZC4KLSAgdXRpbDo6U3RhdHVzIFBhcnNlQ2h1
bmsoU3RyaW5nUGllY2UganNvbik7Ci0KLSAgLy8gUnVucyB0aGUgcGFyc2VyIGJhc2VkIG9uIHN0
YWNrXyBhbmQgcF8sIHVudGlsIHRoZSBzdGFjayBpcyBlbXB0eSBvciBwXyBydW5zCi0gIC8vIG91
dCBvZiBkYXRhLiBJZiB3ZSB1bmV4cGVjdGVkbHkgcnVuIG91dCBvZiBwXyB3ZSBwdXNoIHRoZSBs
YXRlc3QgYmFjayBvbnRvCi0gIC8vIHRoZSBzdGFjayBhbmQgcmV0dXJuLgotICB1dGlsOjpTdGF0
dXMgUnVuUGFyc2VyKCk7Ci0KLSAgLy8gUGFyc2VzIGEgdmFsdWUgZnJvbSBwXyBhbmQgd3JpdGVz
IGl0IHRvIG93Xy4KLSAgLy8gQSB2YWx1ZSBtYXkgYmUgYW4gb2JqZWN0LCBhcnJheSwgdHJ1ZSwg
ZmFsc2UsIG51bGwsIHN0cmluZyBvciBudW1iZXIuCi0gIHV0aWw6OlN0YXR1cyBQYXJzZVZhbHVl
KFRva2VuVHlwZSB0eXBlKTsKLQotICAvLyBQYXJzZXMgYSBzdHJpbmcgYW5kIHdyaXRlcyBpdCBv
dXQgdG8gdGhlIG93Xy4KLSAgdXRpbDo6U3RhdHVzIFBhcnNlU3RyaW5nKCk7Ci0KLSAgLy8gUGFy
c2VzIGEgc3RyaW5nLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gcGFyc2VkXy4KLSAgdXRpbDo6U3Rh
dHVzIFBhcnNlU3RyaW5nSGVscGVyKCk7Ci0KLSAgLy8gVGhpcyBmdW5jdGlvbiBwYXJzZXMgdW5p
Y29kZSBlc2NhcGUgc2VxdWVuY2VzIGluIHN0cmluZ3MuIEl0IHJldHVybnMgYW4KLSAgLy8gZXJy
b3Igd2hlbiB0aGVyZSdzIGEgcGFyc2luZyBlcnJvciwgZWl0aGVyIHRoZSBzaXplIGlzIG5vdCB0
aGUgZXhwZWN0ZWQKLSAgLy8gc2l6ZSBvciBhIGNoYXJhY3RlciBpcyBub3QgYSBoZXggZGlnaXQu
ICBXaGVuIGl0IHJldHVybnMgc3RyIHdpbGwgY29udGFpbgotICAvLyB3aGF0IGhhcyBiZWVuIHN1
Y2Nlc3NmdWxseSBwYXJzZWQgc28gZmFyLgotICB1dGlsOjpTdGF0dXMgUGFyc2VVbmljb2RlRXNj
YXBlKCk7Ci0KLSAgLy8gRXhwZWN0cyBwXyB0byBwb2ludCB0byBhIEpTT04gbnVtYmVyLCB3cml0
ZXMgdGhlIG51bWJlciB0byB0aGUgd3JpdGVyIHVzaW5nCi0gIC8vIHRoZSBhcHByb3ByaWF0ZSBS
ZW5kZXIgbWV0aG9kIGJhc2VkIG9uIHRoZSB0eXBlIG9mIG51bWJlci4KLSAgdXRpbDo6U3RhdHVz
IFBhcnNlTnVtYmVyKCk7Ci0KLSAgLy8gUGFyc2UgYSBudW1iZXIgaW50byBhIE51bWJlclJlc3Vs
dCwgcmVwb3J0aW5nIGFuIGVycm9yIGlmIG5vIG51bWJlciBjb3VsZAotICAvLyBiZSBwYXJzZWQu
IFRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIHBhcnNlIGludG8gYSB1aW50NjQsIGludDY0LCBvciBk
b3VibGUKLSAgLy8gYmFzZWQgb24gd2hldGhlciB0aGUgbnVtYmVyIHdhcyBwb3NpdGl2ZSBvciBu
ZWdhdGl2ZSBvciBoYWQgYSBkZWNpbWFsCi0gIC8vIGNvbXBvbmVudC4KLSAgdXRpbDo6U3RhdHVz
IFBhcnNlTnVtYmVySGVscGVyKE51bWJlclJlc3VsdCogcmVzdWx0KTsKLQotICAvLyBIYW5kbGVz
IGEgeyBkdXJpbmcgcGFyc2luZyBvZiBhIHZhbHVlLgotICB1dGlsOjpTdGF0dXMgSGFuZGxlQmVn
aW5PYmplY3QoKTsKLQotICAvLyBQYXJzZXMgZnJvbSB0aGUgRU5UUlkgc3RhdGUuCi0gIHV0aWw6
OlN0YXR1cyBQYXJzZUVudHJ5KFRva2VuVHlwZSB0eXBlKTsKLQotICAvLyBQYXJzZXMgZnJvbSB0
aGUgRU5UUllfTUlEIHN0YXRlLgotICB1dGlsOjpTdGF0dXMgUGFyc2VFbnRyeU1pZChUb2tlblR5
cGUgdHlwZSk7Ci0KLSAgLy8gUGFyc2VzIGZyb20gdGhlIE9CSl9NSUQgc3RhdGUuCi0gIHV0aWw6
OlN0YXR1cyBQYXJzZU9iamVjdE1pZChUb2tlblR5cGUgdHlwZSk7Ci0KLSAgLy8gSGFuZGxlcyBh
IFsgZHVyaW5nIHBhcnNpbmcgb2YgYSB2YWx1ZS4KLSAgdXRpbDo6U3RhdHVzIEhhbmRsZUJlZ2lu
QXJyYXkoKTsKLQotICAvLyBQYXJzZXMgZnJvbSB0aGUgQVJSQVlfVkFMVUUgc3RhdGUuCi0gIHV0
aWw6OlN0YXR1cyBQYXJzZUFycmF5VmFsdWUoVG9rZW5UeXBlIHR5cGUpOwotCi0gIC8vIFBhcnNl
cyBmcm9tIHRoZSBBUlJBWV9NSUQgc3RhdGUuCi0gIHV0aWw6OlN0YXR1cyBQYXJzZUFycmF5TWlk
KFRva2VuVHlwZSB0eXBlKTsKLQotICAvLyBFeHBlY3RzIHBfIHRvIHBvaW50IHRvIGFuIHVucXVv
dGVkIGxpdGVyYWwKLSAgdXRpbDo6U3RhdHVzIFBhcnNlVHJ1ZSgpOwotICB1dGlsOjpTdGF0dXMg
UGFyc2VGYWxzZSgpOwotICB1dGlsOjpTdGF0dXMgUGFyc2VOdWxsKCk7Ci0KLSAgLy8gUmVwb3J0
IGEgZmFpbHVyZSBhcyBhIHV0aWw6OlN0YXR1cy4KLSAgdXRpbDo6U3RhdHVzIFJlcG9ydEZhaWx1
cmUoU3RyaW5nUGllY2UgbWVzc2FnZSk7Ci0KLSAgLy8gUmVwb3J0IGEgZmFpbHVyZSBkdWUgdG8g
YW4gVU5LTk9XTiB0b2tlbiB0eXBlLiBXZSBjaGVjayBpZiB3ZSBoaXQgdGhlCi0gIC8vIGVuZCBv
ZiB0aGUgc3RyZWFtIGFuZCBpZiB3ZSdyZSBmaW5pc2hpbmcgb3Igbm90IHRvIGRldGVjdCB3aGF0
IHR5cGUgb2YKLSAgLy8gc3RhdHVzIHRvIHJldHVybiBpbiB0aGlzIGNhc2UuCi0gIHV0aWw6OlN0
YXR1cyBSZXBvcnRVbmtub3duKFN0cmluZ1BpZWNlIG1lc3NhZ2UpOwotCi0gIC8vIEFkdmFuY2Ug
cF8gcGFzdCBhbGwgd2hpdGVzcGFjZSBvciB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCi0g
IHZvaWQgU2tpcFdoaXRlc3BhY2UoKTsKLQotICAvLyBBZHZhbmNlIHBfIG9uZSBVVEYtOCBjaGFy
YWN0ZXIKLSAgdm9pZCBBZHZhbmNlKCk7Ci0KLSAgLy8gRXhwZWN0cyBwXyB0byBwb2ludCB0byB0
aGUgYmVnaW5uaW5nIG9mIGEga2V5LgotICB1dGlsOjpTdGF0dXMgUGFyc2VLZXkoKTsKLQotICAv
LyBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIG5leHQgdG9rZW4gYXQgcF8uCi0gIFRva2VuVHlwZSBH
ZXROZXh0VG9rZW5UeXBlKCk7Ci0KLSAgLy8gVGhlIG9iamVjdCB3cml0ZXIgdG8gd3JpdGUgcGFy
c2UgZXZlbnRzIHRvLgotICBPYmplY3RXcml0ZXIqIG93XzsKLQotICAvLyBUaGUgc3RhY2sgb2Yg
cGFyc2luZyB3ZSBzdGlsbCBuZWVkIHRvIGRvLiBXaGVuIHRoZSBzdGFjayBydW5zIGVtcHR5IHdl
IHdpbGwKLSAgLy8gaGF2ZSBwYXJzZWQgYSBzaW5nbGUgdmFsdWUgZnJvbSB0aGUgcm9vdCAoZS5n
LiBhbiBvYmplY3Qgb3IgbGlzdCkuCi0gIHN0ZDo6c3RhY2s8UGFyc2VUeXBlPiBzdGFja187Ci0K
LSAgLy8gQ29udGFpbnMgYW55IGxlZnRvdmVyIHRleHQgZnJvbSBhIHByZXZpb3VzIGNodW5rIHRo
YXQgd2Ugd2VyZW4ndCBhYmxlIHRvCi0gIC8vIGZ1bGx5IHBhcnNlLCBmb3IgZXhhbXBsZSB0aGUg
c3RhcnQgb2YgYSBrZXkgb3IgbnVtYmVyLgotICBzdHJpbmcgbGVmdG92ZXJfOwotCi0gIC8vIFRo
ZSBjdXJyZW50IGNodW5rIG9mIEpTT04gYmVpbmcgcGFyc2VkLiBQcmltYXJpbHkgdXNlZCBmb3Ig
cHJvdmlkaW5nCi0gIC8vIGNvbnRleHQgZHVyaW5nIGVycm9yIHJlcG9ydGluZy4KLSAgU3RyaW5n
UGllY2UganNvbl87Ci0KLSAgLy8gQSBwb2ludGVyIHdpdGhpbiB0aGUgY3VycmVudCBKU09OIGJl
aW5nIHBhcnNlZCwgdXNlZCB0byB0cmFjayBsb2NhdGlvbi4KLSAgU3RyaW5nUGllY2UgcF87Ci0K
LSAgLy8gU3RvcmVzIHRoZSBsYXN0IGtleSByZWFkLCBhcyB3ZSBzZXBhcmF0ZSBwYXJzaW5nIG9m
IGtleXMgYW5kIHZhbHVlcy4KLSAgU3RyaW5nUGllY2Uga2V5XzsKLQotICAvLyBTdG9yYWdlIGZv
ciBrZXlfIGlmIHdlIG5lZWQgdG8ga2VlcCBvd25lcnNoaXAsIGZvciBleGFtcGxlIGJldHdlZW4g
Y2h1bmtzCi0gIC8vIG9yIGlmIHRoZSBrZXkgd2FzIHVuZXNjYXBlZCBmcm9tIGEgSlNPTiBzdHJp
bmcuCi0gIHN0cmluZyBrZXlfc3RvcmFnZV87Ci0KLSAgLy8gVHJ1ZSBkdXJpbmcgdGhlIEZpbmlz
aFBhcnNlKCkgY2FsbCwgc28gd2Uga25vdyB0aGF0IGFueSBlcnJvcnMgYXJlIGZhdGFsLgotICAv
LyBGb3IgZXhhbXBsZSBhbiB1bnRlcm1pbmF0ZWQgc3RyaW5nIHdpbGwgbm9ybWFsbHkgcmVzdWx0
IGluIGNhbmNlbGxpbmcgYW5kCi0gIC8vIHRyeWluZyBkdXJpbmcgdGhlIG5leHQgY2h1bmssIGJ1
dCBkdXJpbmcgRmluaXNoUGFyc2UoKSBpdCBpcyBhbiBlcnJvci4KLSAgYm9vbCBmaW5pc2hpbmdf
OwotCi0gIC8vIFN0cmluZyB3ZSBwYXJzZWQgZHVyaW5nIGEgY2FsbCB0byBQYXJzZVN0cmluZ0hl
bHBlcigpLgotICBTdHJpbmdQaWVjZSBwYXJzZWRfOwotCi0gIC8vIFN0b3JhZ2UgZm9yIHRoZSBz
dHJpbmcgd2UgcGFyc2VkLiBUaGlzIG1heSBiZSBlbXB0eSBpZiB0aGUgc3RyaW5nIHdhcyBhYmxl
Ci0gIC8vIHRvIGJlIHBhcnNlZCBkaXJlY3RseSBmcm9tIHRoZSBpbnB1dC4KLSAgc3RyaW5nIHBh
cnNlZF9zdG9yYWdlXzsKLQotICAvLyBUaGUgY2hhcmFjdGVyIHRoYXQgb3BlbmVkIHRoZSBzdHJp
bmcsIGVpdGhlciAnIG9yICIuCi0gIC8vIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgdGhhdCBzdHJp
bmcgcGFyc2luZyBpcyBub3QgaW4gcHJvY2Vzcy4KLSAgY2hhciBzdHJpbmdfb3Blbl87Ci0KLSAg
Ly8gU3RvcmFnZSBmb3IgdGhlIGNodW5rIHRoYXQgYXJlIGJlaW5nIHBhcnNlZCBpbiBQYXJzZUNo
dW5rKCkuCi0gIHN0cmluZyBjaHVua19zdG9yYWdlXzsKLQotICAvLyBXaGV0aGVyIHRvIGFsbG93
IG5vbiBVVEYtOCBlbmNvZGVkIGlucHV0IGFuZCByZXBsYWNlIGludmFsaWQgY29kZSBwb2ludHMu
Ci0gIGJvb2wgY29lcmNlX3RvX3V0ZjhfOwotCi0gIEdPT0dMRV9ESVNBTExPV19JTVBMSUNJVF9D
T05TVFJVQ1RPUlMoSnNvblN0cmVhbVBhcnNlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgY29u
dmVydGVyCi19ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0K
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1VUSUxf
Q09OVkVSVEVSX0pTT05fU1RSRUFNX1BBUlNFUl9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fc3RyZWFtX3BhcnNlcl90ZXN0LmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9zdHJlYW1fcGFyc2VyX3Rlc3QuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1OWVhNmQ4NmFmMDk5ZjkyMzdlNTNkMWU4MGFm
N2IxMThmNWVmODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9zdHJlYW1fcGFyc2VyX3Rl
c3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw4MTkgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5h
bC9qc29uX3N0cmVhbV9wYXJzZXIuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy90aW1lLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZXhwZWN0aW5nX29iamVjdHdyaXRlci5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29iamVjdF93cml0ZXIuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1cy5oPgotCi0KLW5h
bWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1dGlsIHsK
LXVzaW5nIHV0aWw6OlN0YXR1czsKLW5hbWVzcGFjZSBlcnJvciB7Ci11c2luZyB1dGlsOjplcnJv
cjo6SU5WQUxJRF9BUkdVTUVOVDsKLX0gIC8vIG5hbWVzcGFjZSBlcnJvcgotbmFtZXNwYWNlIGNv
bnZlcnRlciB7Ci0KLXVzaW5nIHV0aWw6OlN0YXR1czsKLQotLy8gVGVzdHMgZm9yIHRoZSBKU09O
IFN0cmVhbSBQYXJzZXIuIFRoZXNlIHRlc3RzIGFyZSBpbnRlbmRlZCB0byBiZQotLy8gY29tcHJl
aGVuc2l2ZSBhbmQgY292ZXIgdGhlIGZvbGxvd2luZzoKLS8vCi0vLyBQb3NpdGl2ZSB0ZXN0czoK
LS8vIC0gdHJ1ZSwgZmFsc2UsIG51bGwKLS8vIC0gZW1wdHkgb2JqZWN0IG9yIGFycmF5LgotLy8g
LSBuZWdhdGl2ZSBhbmQgcG9zaXRpdmUgZG91YmxlIGFuZCBpbnQsIHVuc2lnbmVkIGludAotLy8g
LSBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZWQgc3RyaW5ncwotLy8gLSBzdHJpbmcga2V5LCB1bnF1
b3RlZCBrZXksIG51bWVyaWMga2V5Ci0vLyAtIGFycmF5IGNvbnRhaW5pbmcgYXJyYXksIG9iamVj
dCwgdmFsdWUKLS8vIC0gb2JqZWN0IGNvbnRhaW5pbmcgYXJyYXksIG9iamVjdCwgdmFsdWUKLS8v
IC0gdW5pY29kZSBoYW5kbGluZyBpbiBzdHJpbmdzCi0vLyAtIGFzY2lpIGVzY2FwaW5nIChcYiwg
XGYsIFxuLCBcciwgXHQsIFx2KQotLy8gLSB0cmFpbGluZyBjb21tYXMKLS8vCi0vLyBOZWdhdGl2
ZSB0ZXN0czoKLS8vIC0gaWxsZWdhbCBsaXRlcmFscwotLy8gLSBtaXNtYXRjaGVkIHF1b3RlcyBm
YWlsdXJlIG9uIHN0cmluZ3MKLS8vIC0gdW50ZXJtaW5hdGVkIHN0cmluZyBmYWlsdXJlCi0vLyAt
IHVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZyBmYWlsdXJlCi0vLyAtIG1pc21hdGNoZWQgb2JqZWN0
IGFuZCBhcnJheSBjbG9zaW5nCi0vLyAtIEZhaWx1cmUgdG8gY2xvc2UgYXJyYXkgb3Igb2JqZWN0
Ci0vLyAtIG51bWJlcnMgdG9vIGxhcmdlCi0vLyAtIGludmFsaWQgdW5pY29kZSBlc2NhcGVzLgot
Ly8gLSBpbnZhbGlkIHVuaWNvZGUgc2VxdWVuY2VzLgotLy8gLSBudW1iZXJzIGFzIGtleXMKLS8v
Ci0vLyBGb3IgZWFjaCB0ZXN0IHdlIHNwbGl0IHRoZSBpbnB1dCBzdHJpbmcgb24gZXZlcnkgcG9z
c2libGUgY2hhcmFjdGVyIHRvIGVuc3VyZQotLy8gdGhlIHBhcnNlciBpcyBhYmxlIHRvIGhhbmRs
ZSBhcmJpdHJhcmlseSBzcGxpdCBpbnB1dCBmb3IgYWxsIGNhc2VzLiBXZSBhbHNvCi0vLyBkbyBh
IGZpbmFsIHRlc3Qgb2YgdGhlIGVudGlyZSB0ZXN0IGNhc2Ugb25lIGNoYXJhY3RlciBhdCBhIHRp
bWUuCi1jbGFzcyBKc29uU3RyZWFtUGFyc2VyVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3Qg
ewotIHByb3RlY3RlZDoKLSAgSnNvblN0cmVhbVBhcnNlclRlc3QoKSA6IG1vY2tfKCksIG93Xygm
bW9ja18pIHt9Ci0gIHZpcnR1YWwgfkpzb25TdHJlYW1QYXJzZXJUZXN0KCkge30KLQotICB1dGls
OjpTdGF0dXMgUnVuVGVzdChTdHJpbmdQaWVjZSBqc29uLCBpbnQgc3BsaXQsIGJvb2wgY29lcmNl
X3V0ZjggPSBmYWxzZSkgewotICAgIEpzb25TdHJlYW1QYXJzZXIgcGFyc2VyKCZtb2NrXyk7Ci0K
LSAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHNwbGl0ID09IGxlbmd0aCwgdGVzdCBwYXJzaW5nIG9u
ZSBjaGFyYWN0ZXIgYXQgYSB0aW1lLgotICAgIGlmIChzcGxpdCA9PSBqc29uLmxlbmd0aCgpKSB7
Ci0gICAgICBHT09HTEVfTE9HKElORk8pIDw8ICJUZXN0aW5nIHNwbGl0IGV2ZXJ5IGNoYXI6ICIg
PDwganNvbjsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwganNvbi5sZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgIFN0cmluZ1BpZWNlIHNpbmdsZSA9IGpzb24uc3Vic3RyKGksIDEpOwotICAgICAg
ICB1dGlsOjpTdGF0dXMgcmVzdWx0ID0gcGFyc2VyLlBhcnNlKHNpbmdsZSk7Ci0gICAgICAgIGlm
ICghcmVzdWx0Lm9rKCkpIHsKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gcGFyc2VyLkZpbmlzaFBhcnNlKCk7Ci0gICAgfQotCi0gICAg
Ly8gTm9ybWFsIGNhc2UsIHNwbGl0IGF0IHRoZSBzcGxpdCBwb2ludCBhbmQgcGFyc2UgdHdvIHN1
YnN0cmluZ3MuCi0gICAgU3RyaW5nUGllY2UgZmlyc3QgPSBqc29uLnN1YnN0cigwLCBzcGxpdCk7
Ci0gICAgU3RyaW5nUGllY2UgcmVzdCA9IGpzb24uc3Vic3RyKHNwbGl0KTsKLSAgICBHT09HTEVf
TE9HKElORk8pIDw8ICJUZXN0aW5nIHNwbGl0OiAiIDw8IGZpcnN0IDw8ICI+PCIgPDwgcmVzdDsK
LSAgICB1dGlsOjpTdGF0dXMgcmVzdWx0ID0gcGFyc2VyLlBhcnNlKGZpcnN0KTsKLSAgICBpZiAo
cmVzdWx0Lm9rKCkpIHsKLSAgICAgIHJlc3VsdCA9IHBhcnNlci5QYXJzZShyZXN0KTsKLSAgICAg
IGlmIChyZXN1bHQub2soKSkgewotICAgICAgICByZXN1bHQgPSBwYXJzZXIuRmluaXNoUGFyc2Uo
KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHZvaWQgRG9U
ZXN0KFN0cmluZ1BpZWNlIGpzb24sIGludCBzcGxpdCwgYm9vbCBjb2VyY2VfdXRmOCA9IGZhbHNl
KSB7Ci0gICAgdXRpbDo6U3RhdHVzIHJlc3VsdCA9IFJ1blRlc3QoanNvbiwgc3BsaXQsIGNvZXJj
ZV91dGY4KTsKLSAgICBpZiAoIXJlc3VsdC5vaygpKSB7Ci0gICAgICBHT09HTEVfTE9HKFdBUk5J
TkcpIDw8IHJlc3VsdDsKLSAgICB9Ci0gICAgRVhQRUNUX09LKHJlc3VsdCk7Ci0gIH0KLQotICB2
b2lkIERvRXJyb3JUZXN0KFN0cmluZ1BpZWNlIGpzb24sIGludCBzcGxpdCwgU3RyaW5nUGllY2Ug
ZXJyb3JfcHJlZml4LAotICAgICAgICAgICAgICAgICAgIGJvb2wgY29lcmNlX3V0ZjggPSBmYWxz
ZSkgewotICAgIHV0aWw6OlN0YXR1cyByZXN1bHQgPSBSdW5UZXN0KGpzb24sIHNwbGl0LCBjb2Vy
Y2VfdXRmOCk7Ci0gICAgRVhQRUNUX0VRKHV0aWw6OmVycm9yOjpJTlZBTElEX0FSR1VNRU5ULCBy
ZXN1bHQuZXJyb3JfY29kZSgpKTsKLSAgICBTdHJpbmdQaWVjZSBlcnJvcl9tZXNzYWdlKHJlc3Vs
dC5lcnJvcl9tZXNzYWdlKCkpOwotICAgIEVYUEVDVF9FUShlcnJvcl9wcmVmaXgsIGVycm9yX21l
c3NhZ2Uuc3Vic3RyKDAsIGVycm9yX3ByZWZpeC5zaXplKCkpKTsKLSAgfQotCi0KLSAgTW9ja09i
amVjdFdyaXRlciBtb2NrXzsKLSAgRXhwZWN0aW5nT2JqZWN0V3JpdGVyIG93XzsKLX07Ci0KLQot
Ly8gUG9zaXRpdmUgdGVzdHMKLQotLy8gLSB0cnVlLCBmYWxzZSwgbnVsbAotVEVTVF9GKEpzb25T
dHJlYW1QYXJzZXJUZXN0LCBTaW1wbGVUcnVlKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICJ0cnVl
IjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBvd18u
UmVuZGVyQm9vbCgiIiwgdHJ1ZSk7Ci0gICAgRG9UZXN0KHN0ciwgaSk7Ci0gIH0KLX0KLQotVEVT
VF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0LCBTaW1wbGVGYWxzZSkgewotICBTdHJpbmdQaWVjZSBz
dHIgPSAiZmFsc2UiOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkg
ewotICAgIG93Xy5SZW5kZXJCb29sKCIiLCBmYWxzZSk7Ci0gICAgRG9UZXN0KHN0ciwgaSk7Ci0g
IH0KLX0KLQotVEVTVF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0LCBTaW1wbGVOdWxsKSB7Ci0gIFN0
cmluZ1BpZWNlIHN0ciA9ICJudWxsIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0
aCgpOyArK2kpIHsKLSAgICBvd18uUmVuZGVyTnVsbCgiIik7Ci0gICAgRG9UZXN0KHN0ciwgaSk7
Ci0gIH0KLX0KLQotLy8gLSBlbXB0eSBvYmplY3QgYW5kIGFycmF5LgotVEVTVF9GKEpzb25TdHJl
YW1QYXJzZXJUZXN0LCBFbXB0eU9iamVjdCkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAie30iOwot
ICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5TdGFy
dE9iamVjdCgiIiktPkVuZE9iamVjdCgpOwotICAgIERvVGVzdChzdHIsIGkpOwotICB9Ci19Ci0K
LVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgRW1wdHlMaXN0KSB7Ci0gIFN0cmluZ1BpZWNl
IHN0ciA9ICJbXSI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7
Ci0gICAgb3dfLlN0YXJ0TGlzdCgiIiktPkVuZExpc3QoKTsKLSAgICBEb1Rlc3Qoc3RyLCBpKTsK
LSAgfQotfQotCi0vLyAtIG5lZ2F0aXZlIGFuZCBwb3NpdGl2ZSBkb3VibGUgYW5kIGludCwgdW5z
aWduZWQgaW50Ci1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIFNpbXBsZURvdWJsZSkgewot
ICBTdHJpbmdQaWVjZSBzdHIgPSAiNDIuNSI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5s
ZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlJlbmRlckRvdWJsZSgiIiwgNDIuNSk7Ci0gICAgRG9U
ZXN0KHN0ciwgaSk7Ci0gIH0KLX0KLQotVEVTVF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0LCBTY2ll
bnRpZmljRG91YmxlKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICIxLjIzNDVlLTEwIjsKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5SZW5kZXJEb3Vi
bGUoIiIsIDEuMjM0NWUtMTApOwotICAgIERvVGVzdChzdHIsIGkpOwotICB9Ci19Ci0KLVRFU1Rf
RihKc29uU3RyZWFtUGFyc2VyVGVzdCwgU2ltcGxlTmVnYXRpdmVEb3VibGUpIHsKLSAgU3RyaW5n
UGllY2Ugc3RyID0gIi0xMDQ1LjIzNSI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgb3dfLlJlbmRlckRvdWJsZSgiIiwgLTEwNDUuMjM1KTsKLSAgICBE
b1Rlc3Qoc3RyLCBpKTsKLSAgfQotfQotCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIFNp
bXBsZUludCkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAiMTIzNDU2IjsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBvd18uUmVuZGVyVWludDY0KCIiLCAx
MjM0NTYpOwotICAgIERvVGVzdChzdHIsIGkpOwotICB9Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFt
UGFyc2VyVGVzdCwgU2ltcGxlTmVnYXRpdmVJbnQpIHsKLSAgU3RyaW5nUGllY2Ugc3RyID0gIi03
OTQ5NzgyMzU1MzE2Mjc2NSI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsg
KytpKSB7Ci0gICAgb3dfLlJlbmRlckludDY0KCIiLCAtNzk0OTc4MjM1NTMxNjI3NjVMTCk7Ci0g
ICAgRG9UZXN0KHN0ciwgaSk7Ci0gIH0KLX0KLQotVEVTVF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0
LCBTaW1wbGVVbnNpZ25lZEludCkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAiMTE3Nzk0OTc4MjM1
NTMxNjI3NjUiOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewot
ICAgIG93Xy5SZW5kZXJVaW50NjQoIiIsIDExNzc5NDk3ODIzNTUzMTYyNzY1VUxMKTsKLSAgICBE
b1Rlc3Qoc3RyLCBpKTsKLSAgfQotfQotCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIE9j
dGFsTnVtYmVySXNJbnZhbGlkKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICIwMTIzNCI7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgRG9FcnJvclRlc3Qo
c3RyLCBpLCAiT2N0YWwvaGV4IG51bWJlcnMgYXJlIG5vdCB2YWxpZCBKU09OIHZhbHVlcy4iKTsK
LSAgfQotICBzdHIgPSAiLTAxMjM0IjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0
aCgpOyArK2kpIHsKLSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJPY3RhbC9oZXggbnVtYmVycyBh
cmUgbm90IHZhbGlkIEpTT04gdmFsdWVzLiIpOwotICB9Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFt
UGFyc2VyVGVzdCwgSGV4TnVtYmVySXNJbnZhbGlkKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICIw
eDEyMzQiOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAg
IERvRXJyb3JUZXN0KHN0ciwgaSwgIk9jdGFsL2hleCBudW1iZXJzIGFyZSBub3QgdmFsaWQgSlNP
TiB2YWx1ZXMuIik7Ci0gIH0KLSAgc3RyID0gIi0weDEyMzQiOwotICBmb3IgKGludCBpID0gMDsg
aSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIERvRXJyb3JUZXN0KHN0ciwgaSwgIk9jdGFs
L2hleCBudW1iZXJzIGFyZSBub3QgdmFsaWQgSlNPTiB2YWx1ZXMuIik7Ci0gIH0KLSAgc3RyID0g
IjEyeDM0IjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAg
ICBEb0Vycm9yVGVzdChzdHIsIGksICJVbmFibGUgdG8gcGFyc2UgbnVtYmVyLiIpOwotICB9Ci19
Ci0KLS8vIC0gc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVkIHN0cmluZ3MKLVRFU1RfRihKc29uU3Ry
ZWFtUGFyc2VyVGVzdCwgRW1wdHlEb3VibGVRdW90ZWRTdHJpbmcpIHsKLSAgU3RyaW5nUGllY2Ug
c3RyID0gIlwiXCIiOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkg
ewotICAgIG93Xy5SZW5kZXJTdHJpbmcoIiIsICIiKTsKLSAgICBEb1Rlc3Qoc3RyLCBpKTsKLSAg
fQotfQotCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIEVtcHR5U2luZ2xlUXVvdGVkU3Ry
aW5nKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICInJyI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9
IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlJlbmRlclN0cmluZygiIiwgIiIpOwotICAg
IERvVGVzdChzdHIsIGkpOwotICB9Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwg
U2ltcGxlRG91YmxlUXVvdGVkU3RyaW5nKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICJcIlNvbWUg
U3RyaW5nXCIiOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewot
ICAgIG93Xy5SZW5kZXJTdHJpbmcoIiIsICJTb21lIFN0cmluZyIpOwotICAgIERvVGVzdChzdHIs
IGkpOwotICB9Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgU2ltcGxlU2luZ2xl
UXVvdGVkU3RyaW5nKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICInQW5vdGhlciBTdHJpbmcnIjsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBvd18uUmVu
ZGVyU3RyaW5nKCIiLCAiQW5vdGhlciBTdHJpbmciKTsKLSAgICBEb1Rlc3Qoc3RyLCBpKTsKLSAg
fQotfQotCi0vLyAtIHN0cmluZyBrZXksIHVucXVvdGVkIGtleSwgbnVtZXJpYyBrZXkKLVRFU1Rf
RihKc29uU3RyZWFtUGFyc2VyVGVzdCwgT2JqZWN0S2V5VHlwZXMpIHsKLSAgU3RyaW5nUGllY2Ug
c3RyID0KLSAgICAgICJ7J3MnOiB0cnVlLCBcImRcIjogZmFsc2UsIGtleTogbnVsbCwgc25ha2Vf
a2V5OiBbXSwgY2FtZWxLZXk6IHt9fSI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgb3dfLlN0YXJ0T2JqZWN0KCIiKQotICAgICAgICAtPlJlbmRlckJv
b2woInMiLCB0cnVlKQotICAgICAgICAtPlJlbmRlckJvb2woImQiLCBmYWxzZSkKLSAgICAgICAg
LT5SZW5kZXJOdWxsKCJrZXkiKQotICAgICAgICAtPlN0YXJ0TGlzdCgic25ha2Vfa2V5IikKLSAg
ICAgICAgLT5FbmRMaXN0KCkKLSAgICAgICAgLT5TdGFydE9iamVjdCgiY2FtZWxLZXkiKQotICAg
ICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gICAgRG9UZXN0KHN0
ciwgaSk7Ci0gIH0KLX0KLQotLy8gLSBhcnJheSBjb250YWluaW5nIGFycmF5LCBvYmplY3QsIHZh
bHVlcyAodHJ1ZSwgZmFsc2UsIG51bGwsIG51bSwgc3RyaW5nKQotVEVTVF9GKEpzb25TdHJlYW1Q
YXJzZXJUZXN0LCBBcnJheVZhbHVlcykgewotICBTdHJpbmdQaWVjZSBzdHIgPQotICAgICAgIlt0
cnVlLCBmYWxzZSwgbnVsbCwgJ2Egc3RyaW5nJywgXCJhbm90aGVyIHN0cmluZ1wiLCBbMjIsIC0x
MjcsIDQ1LjMsICIKLSAgICAgICItMTA1Ni40LCAxMTc3OTQ5NzgyMzU1MzE2Mjc2NV0sIHsna2V5
JzogdHJ1ZX1dIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsK
LSAgICBvd18uU3RhcnRMaXN0KCIiKQotICAgICAgICAtPlJlbmRlckJvb2woIiIsIHRydWUpCi0g
ICAgICAgIC0+UmVuZGVyQm9vbCgiIiwgZmFsc2UpCi0gICAgICAgIC0+UmVuZGVyTnVsbCgiIikK
LSAgICAgICAgLT5SZW5kZXJTdHJpbmcoIiIsICJhIHN0cmluZyIpCi0gICAgICAgIC0+UmVuZGVy
U3RyaW5nKCIiLCAiYW5vdGhlciBzdHJpbmciKQotICAgICAgICAtPlN0YXJ0TGlzdCgiIikKLSAg
ICAgICAgLT5SZW5kZXJVaW50NjQoIiIsIDIyKQotICAgICAgICAtPlJlbmRlckludDY0KCIiLCAt
MTI3KQotICAgICAgICAtPlJlbmRlckRvdWJsZSgiIiwgNDUuMykKLSAgICAgICAgLT5SZW5kZXJE
b3VibGUoIiIsIC0xMDU2LjQpCi0gICAgICAgIC0+UmVuZGVyVWludDY0KCIiLCAxMTc3OTQ5Nzgy
MzU1MzE2Mjc2NVVMTCkKLSAgICAgICAgLT5FbmRMaXN0KCkKLSAgICAgICAgLT5TdGFydE9iamVj
dCgiIikKLSAgICAgICAgLT5SZW5kZXJCb29sKCJrZXkiLCB0cnVlKQotICAgICAgICAtPkVuZE9i
amVjdCgpCi0gICAgICAgIC0+RW5kTGlzdCgpOwotICAgIERvVGVzdChzdHIsIGkpOwotICB9Ci19
Ci0KLS8vIC0gb2JqZWN0IGNvbnRhaW5pbmcgYXJyYXksIG9iamVjdCwgdmFsdWUgKHRydWUsIGZh
bHNlLCBudWxsLCBudW0sIHN0cmluZykKLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgT2Jq
ZWN0VmFsdWVzKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9Ci0gICAgICAie3Q6IHRydWUsIGY6IGZh
bHNlLCBuOiBudWxsLCBzOiAnYSBzdHJpbmcnLCBkOiBcImFub3RoZXIgc3RyaW5nXCIsIHBpOiAi
Ci0gICAgICAiMjIsIG5pOiAtMTI3LCBwZDogNDUuMywgbmQ6IC0xMDU2LjQsIHBsOiAxMTc3OTQ5
NzgyMzU1MzE2Mjc2NSwgbDogW1tdXSwgIgotICAgICAgIm86IHsna2V5JzogdHJ1ZX19IjsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBvd18uU3RhcnRP
YmplY3QoIiIpCi0gICAgICAgIC0+UmVuZGVyQm9vbCgidCIsIHRydWUpCi0gICAgICAgIC0+UmVu
ZGVyQm9vbCgiZiIsIGZhbHNlKQotICAgICAgICAtPlJlbmRlck51bGwoIm4iKQotICAgICAgICAt
PlJlbmRlclN0cmluZygicyIsICJhIHN0cmluZyIpCi0gICAgICAgIC0+UmVuZGVyU3RyaW5nKCJk
IiwgImFub3RoZXIgc3RyaW5nIikKLSAgICAgICAgLT5SZW5kZXJVaW50NjQoInBpIiwgMjIpCi0g
ICAgICAgIC0+UmVuZGVySW50NjQoIm5pIiwgLTEyNykKLSAgICAgICAgLT5SZW5kZXJEb3VibGUo
InBkIiwgNDUuMykKLSAgICAgICAgLT5SZW5kZXJEb3VibGUoIm5kIiwgLTEwNTYuNCkKLSAgICAg
ICAgLT5SZW5kZXJVaW50NjQoInBsIiwgMTE3Nzk0OTc4MjM1NTMxNjI3NjVVTEwpCi0gICAgICAg
IC0+U3RhcnRMaXN0KCJsIikKLSAgICAgICAgLT5TdGFydExpc3QoIiIpCi0gICAgICAgIC0+RW5k
TGlzdCgpCi0gICAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAgIC0+U3RhcnRPYmplY3QoIm8iKQot
ICAgICAgICAtPlJlbmRlckJvb2woImtleSIsIHRydWUpCi0gICAgICAgIC0+RW5kT2JqZWN0KCkK
LSAgICAgICAgLT5FbmRPYmplY3QoKTsKLSAgICBEb1Rlc3Qoc3RyLCBpKTsKLSAgfQotfQotCi0K
LVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgUmVqZWN0Tm9uVXRmOFdoZW5Ob3RDb2VyY2Vk
KSB7Ci0gIFN0cmluZ1BpZWNlIGpzb24gPSAie1wiYWRkcmVzc1wiOlx4RkZcIteX16jXldep16og
MjMsINeo16LXoNeg15QsINeZ16nXqNeQ15xcIn0iOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBq
c29uLmxlbmd0aCgpOyArK2kpIHsKLSAgICBEb0Vycm9yVGVzdChqc29uLCBpLCAiRW5jb3VudGVy
ZWQgbm9uIFVURi04IGNvZGUgcG9pbnRzLiIpOwotICB9Ci0gIGpzb24gPSAie1wiYWRkcmVzc1wi
OiBcIteX16jXldep16ogMjMsXHhGRteo16LXoNeg15QsINeZ16nXqNeQ15xcIn0iOwotICBmb3Ig
KGludCBpID0gMDsgaSA8PSBqc29uLmxlbmd0aCgpOyArK2kpIHsKLSAgICBEb0Vycm9yVGVzdChq
c29uLCBpLCAiRW5jb3VudGVyZWQgbm9uIFVURi04IGNvZGUgcG9pbnRzLiIpOwotICB9Ci0gIERv
RXJyb3JUZXN0KCJceEZGe30iLCAwLCAiRW5jb3VudGVyZWQgbm9uIFVURi04IGNvZGUgcG9pbnRz
LiIpOwotfQotCi0vLyAtIHVuaWNvZGUgaGFuZGxpbmcgaW4gc3RyaW5ncwotVEVTVF9GKEpzb25T
dHJlYW1QYXJzZXJUZXN0LCBVbmljb2RlRXNjYXBpbmcpIHsKLSAgU3RyaW5nUGllY2Ugc3RyID0g
IltcIlxcdTA2MzlcXHUwNjMxXFx1MDYyOFxcdTA2NDlcIl0iOwotICBmb3IgKGludCBpID0gMDsg
aSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5TdGFydExpc3QoIiIpCi0gICAgICAg
IC0+UmVuZGVyU3RyaW5nKCIiLCAiXHhEOFx4QjlceEQ4XHhCMVx4RDhceEE4XHhEOVx4ODkiKQot
ICAgICAgICAtPkVuZExpc3QoKTsKLSAgICBEb1Rlc3Qoc3RyLCBpKTsKLSAgfQotfQotCi0vLyAt
IHVuaWNvZGUgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyIGhhbmRsaW5nIGluIHN0cmluZ3MKLVRFU1Rf
RihKc29uU3RyZWFtUGFyc2VyVGVzdCwgVW5pY29kZVN1cnJvZ2F0ZVBhaXJFc2NhcGluZykgewot
ICBTdHJpbmdQaWVjZSBzdHIgPQotICAgICAgIltcIlxcdTBiZWVcXHVkODAwXFx1ZGRmMVxcdUQ4
MENcXHVEREE0XFx1RDgzZFxcdWRDMURcXHVEODNDXFx1REY2RlwiXSI7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlN0YXJ0TGlzdCgiIikKLSAg
ICAgICAgLT5SZW5kZXJTdHJpbmcoIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICJceEUwXHhB
Rlx4QUVceEYwXHg5MFx4ODdceEIxXHhGMFx4OTNceDg2XHhBNFx4RjAiCi0gICAgICAgICAgICAg
ICAgICAgICAgICJceDlGXHg5MFx4OURceEYwXHg5Rlx4OERceEFGIikKLSAgICAgICAgLT5FbmRM
aXN0KCk7Ci0gICAgRG9UZXN0KHN0ciwgaSk7Ci0gIH0KLX0KLQotCi1URVNUX0YoSnNvblN0cmVh
bVBhcnNlclRlc3QsIFVuaWNvZGVFc2NhcGluZ0ludmFsaWRDb2RlUG9pbnRXaGVuTm90Q29lcmNl
ZCkgewotICAvLyBBIGxvdyBzdXJyb2dhdGUgYWxvbmUuCi0gIFN0cmluZ1BpZWNlIHN0ciA9ICJb
XCJcXHVkZTM2XCJdIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kp
IHsKLSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJJbnZhbGlkIHVuaWNvZGUgY29kZSBwb2ludC4i
KTsKLSAgfQotfQotCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIFVuaWNvZGVFc2NhcGlu
Z01pc3NpbmdMb3dTdXJyb2dhdGVXaGVuTm90Q29lcmNlZCkgewotICAvLyBBIGhpZ2ggc3Vycm9n
YXRlIGFsb25lLgotICBTdHJpbmdQaWVjZSBzdHIgPSAiW1wiXFx1ZDgzZFwiXSI7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgRG9FcnJvclRlc3Qoc3Ry
LCBpLCAiTWlzc2luZyBsb3cgc3Vycm9nYXRlLiIpOwotICB9Ci0gIC8vIEEgaGlnaCBzdXJyb2dh
dGUgd2l0aCBzb21lIHRyYWlsaW5nIGNoYXJhY3RlcnMuCi0gIHN0ciA9ICJbXCJcXHVkODNkfHVk
ZTM2XCJdIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAg
ICBEb0Vycm9yVGVzdChzdHIsIGksICJNaXNzaW5nIGxvdyBzdXJyb2dhdGUuIik7Ci0gIH0KLSAg
Ly8gQSBoaWdoIHN1cnJvZ2F0ZSB3aXRoIGhhbGYgYSBsb3cgc3Vycm9nYXRlLgotICBzdHIgPSAi
W1wiXFx1ZDgzZFxcdWRlLS1cIl0iOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3Ro
KCk7ICsraSkgewotICAgIERvRXJyb3JUZXN0KHN0ciwgaSwgIkludmFsaWQgZXNjYXBlIHNlcXVl
bmNlLiIpOwotICB9Ci0gIC8vIFR3byBoaWdoIHN1cnJvZ2F0ZXMuCi0gIHN0ciA9ICJbXCJcXHVk
ODNkXFx1ZDgzZFwiXSI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgRG9FcnJvclRlc3Qoc3RyLCBpLCAiSW52YWxpZCBsb3cgc3Vycm9nYXRlLiIpOwot
ICB9Ci19Ci0KLS8vIC0gYXNjaWkgZXNjYXBpbmcgKFxiLCBcZiwgXG4sIFxyLCBcdCwgXHYpCi1U
RVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIEFzY2lpRXNjYXBpbmcpIHsKLSAgU3RyaW5nUGll
Y2Ugc3RyID0KLSAgICAgICJbXCJcXGJcIiwgXCJcXG5pbmdcIiwgXCJ0ZXN0XFxmXCIsIFwiXFxy
XFx0XCIsIFwidGVzdFxcXFxcXHZpbmdcIl0iOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIu
bGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5TdGFydExpc3QoIiIpCi0gICAgICAgIC0+UmVuZGVy
U3RyaW5nKCIiLCAiXGIiKQotICAgICAgICAtPlJlbmRlclN0cmluZygiIiwgIlxuaW5nIikKLSAg
ICAgICAgLT5SZW5kZXJTdHJpbmcoIiIsICJ0ZXN0XGYiKQotICAgICAgICAtPlJlbmRlclN0cmlu
ZygiIiwgIlxyXHQiKQotICAgICAgICAtPlJlbmRlclN0cmluZygiIiwgInRlc3RcXFx2aW5nIikK
LSAgICAgICAgLT5FbmRMaXN0KCk7Ci0gICAgRG9UZXN0KHN0ciwgaSk7Ci0gIH0KLX0KLQotLy8g
LSB0cmFpbGluZyBjb21tYXMsIHdlIHN1cHBvcnQgYSBzaW5nbGUgdHJhaWxpbmcgY29tbWEgYnV0
IG5vIGludGVybmFsIGNvbW1hcy4KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgVHJhaWxp
bmdDb21tYXMpIHsKLSAgU3RyaW5nUGllY2Ugc3RyID0gIltbJ2EnLHRydWUsXSwge2I6IG51bGws
fSxdIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBv
d18uU3RhcnRMaXN0KCIiKQotICAgICAgICAtPlN0YXJ0TGlzdCgiIikKLSAgICAgICAgLT5SZW5k
ZXJTdHJpbmcoIiIsICJhIikKLSAgICAgICAgLT5SZW5kZXJCb29sKCIiLCB0cnVlKQotICAgICAg
ICAtPkVuZExpc3QoKQotICAgICAgICAtPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgICAtPlJlbmRl
ck51bGwoImIiKQotICAgICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAgIC0+RW5kTGlzdCgpOwot
ICAgIERvVGVzdChzdHIsIGkpOwotICB9Ci19Ci0KLS8vIE5lZ2F0aXZlIHRlc3RzCi0KLS8vIGls
bGVnYWwgbGl0ZXJhbHMKLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgRXh0cmFUZXh0QWZ0
ZXJUcnVlKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICJ0cnVlZSI7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlJlbmRlckJvb2woIiIsIHRydWUp
OwotICAgIERvRXJyb3JUZXN0KHN0ciwgaSwgIlBhcnNpbmcgdGVybWluYXRlZCBiZWZvcmUgZW5k
IG9mIGlucHV0LiIpOwotICB9Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgSW52
YWxpZE51bWJlckRhc2hPbmx5KSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICItIjsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBEb0Vycm9yVGVzdChzdHIs
IGksICJVbmFibGUgdG8gcGFyc2UgbnVtYmVyLiIpOwotICB9Ci19Ci0KLVRFU1RfRihKc29uU3Ry
ZWFtUGFyc2VyVGVzdCwgSW52YWxpZE51bWJlckRhc2hOYW1lKSB7Ci0gIFN0cmluZ1BpZWNlIHN0
ciA9ICItZm9vIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsK
LSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJVbmFibGUgdG8gcGFyc2UgbnVtYmVyLiIpOwotICB9
Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgSW52YWxpZExpdGVyYWxJbkFycmF5
KSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICJbbnVsZV0iOwotICBmb3IgKGludCBpID0gMDsgaSA8
PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5TdGFydExpc3QoIiIpOwotICAgIERvRXJy
b3JUZXN0KHN0ciwgaSwgIlVuZXhwZWN0ZWQgdG9rZW4uIik7Ci0gIH0KLX0KLQotVEVTVF9GKEpz
b25TdHJlYW1QYXJzZXJUZXN0LCBJbnZhbGlkTGl0ZXJhbEluT2JqZWN0KSB7Ci0gIFN0cmluZ1Bp
ZWNlIHN0ciA9ICJ7MTIzZmFsc2V9IjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0
aCgpOyArK2kpIHsKLSAgICBvd18uU3RhcnRPYmplY3QoIiIpOwotICAgIERvRXJyb3JUZXN0KHN0
ciwgaSwgIkV4cGVjdGVkIGFuIG9iamVjdCBrZXkgb3IgfS4iKTsKLSAgfQotfQotCi0vLyBtaXNt
YXRjaGVkIHF1b3RlcyBmYWlsdXJlIG9uIHN0cmluZ3MKLVRFU1RfRihKc29uU3RyZWFtUGFyc2Vy
VGVzdCwgTWlzbWF0Y2hlZFNpbmdsZVF1b3RlZExpdGVyYWwpIHsKLSAgU3RyaW5nUGllY2Ugc3Ry
ID0gIidTb21lIHN0clwiIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyAr
K2kpIHsKLSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJDbG9zaW5nIHF1b3RlIGV4cGVjdGVkIGlu
IHN0cmluZy4iKTsKLSAgfQotfQotCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIE1pc21h
dGNoZWREb3VibGVRdW90ZWRMaXRlcmFsKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICJcIkFub3Ro
ZXIgc3RyaW5nIHRoYXQgZW5kcyBwb29ybHkhJyI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0
ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgRG9FcnJvclRlc3Qoc3RyLCBpLCAiQ2xvc2luZyBxdW90
ZSBleHBlY3RlZCBpbiBzdHJpbmcuIik7Ci0gIH0KLX0KLQotLy8gdW50ZXJtaW5hdGVkIHN0cmlu
Z3MKLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgVW50ZXJtaW5hdGVkTGl0ZXJhbFN0cmlu
ZykgewotICBTdHJpbmdQaWVjZSBzdHIgPSAiXCJGb3Jnb3QgdGhlIHJlc3Qgb2YgaSI7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgRG9FcnJvclRlc3Qo
c3RyLCBpLCAiQ2xvc2luZyBxdW90ZSBleHBlY3RlZCBpbiBzdHJpbmcuIik7Ci0gIH0KLX0KLQot
VEVTVF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0LCBVbnRlcm1pbmF0ZWRTdHJpbmdFc2NhcGUpIHsK
LSAgU3RyaW5nUGllY2Ugc3RyID0gIlwiRm9yZ290IHRoZSByZXN0IG9mIFxcIjsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBEb0Vycm9yVGVzdChzdHIs
IGksICJDbG9zaW5nIHF1b3RlIGV4cGVjdGVkIGluIHN0cmluZy4iKTsKLSAgfQotfQotCi1URVNU
X0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIFVudGVybWluYXRlZFN0cmluZ0luQXJyYXkpIHsKLSAg
U3RyaW5nUGllY2Ugc3RyID0gIltcIkZvcmdvdCB0byBjbG9zZSB0aGUgc3RyaW5nXSI7Ci0gIGZv
ciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlN0YXJ0TGlz
dCgiIik7Ci0gICAgRG9FcnJvclRlc3Qoc3RyLCBpLCAiQ2xvc2luZyBxdW90ZSBleHBlY3RlZCBp
biBzdHJpbmcuIik7Ci0gIH0KLX0KLQotVEVTVF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0LCBVbnRl
cm1pbmF0ZWRTdHJpbmdJbk9iamVjdCkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAie2Y6IFwiRm9y
Z290IHRvIGNsb3NlIHRoZSBzdHJpbmd9IjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxl
bmd0aCgpOyArK2kpIHsKLSAgICBvd18uU3RhcnRPYmplY3QoIiIpOwotICAgIERvRXJyb3JUZXN0
KHN0ciwgaSwgIkNsb3NpbmcgcXVvdGUgZXhwZWN0ZWQgaW4gc3RyaW5nLiIpOwotICB9Ci19Ci0K
LVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgVW50ZXJtaW5hdGVkT2JqZWN0KSB7Ci0gIFN0
cmluZ1BpZWNlIHN0ciA9ICJ7IjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgp
OyArK2kpIHsKLSAgICBvd18uU3RhcnRPYmplY3QoIiIpOwotICAgIERvRXJyb3JUZXN0KHN0ciwg
aSwgIlVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4iKTsKLSAgfQotfQotCi0KLS8vIG1pc21hdGNo
ZWQgb2JqZWN0IGFuZCBhcnJheSBjbG9zaW5nCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3Qs
IE1pc21hdGNoZWRDbG9zZU9iamVjdCkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAieydrZXknOiB0
cnVlXSI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
b3dfLlN0YXJ0T2JqZWN0KCIiKS0+UmVuZGVyQm9vbCgia2V5IiwgdHJ1ZSk7Ci0gICAgRG9FcnJv
clRlc3Qoc3RyLCBpLCAiRXhwZWN0ZWQgLCBvciB9IGFmdGVyIGtleTp2YWx1ZSBwYWlyLiIpOwot
ICB9Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgTWlzbWF0Y2hlZENsb3NlQXJy
YXkpIHsKLSAgU3RyaW5nUGllY2Ugc3RyID0gIlt0cnVlLCBudWxsfSI7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlN0YXJ0TGlzdCgiIiktPlJl
bmRlckJvb2woIiIsIHRydWUpLT5SZW5kZXJOdWxsKCIiKTsKLSAgICBEb0Vycm9yVGVzdChzdHIs
IGksICJFeHBlY3RlZCAsIG9yIF0gYWZ0ZXIgYXJyYXkgdmFsdWUuIik7Ci0gIH0KLX0KLQotLy8g
SW52YWxpZCBvYmplY3Qga2V5cy4KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgSW52YWxp
ZE51bWVyaWNPYmplY3RLZXkpIHsKLSAgU3RyaW5nUGllY2Ugc3RyID0gIns0MjogdHJ1ZX0iOwot
ICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5TdGFy
dE9iamVjdCgiIik7Ci0gICAgRG9FcnJvclRlc3Qoc3RyLCBpLCAiRXhwZWN0ZWQgYW4gb2JqZWN0
IGtleSBvciB9LiIpOwotICB9Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgSW52
YWxpZExpdGVyYWxPYmplY3RJbk9iamVjdCkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAie3tib2I6
IHRydWV9fSI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgb3dfLlN0YXJ0T2JqZWN0KCIiKTsKLSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJFeHBlY3Rl
ZCBhbiBvYmplY3Qga2V5IG9yIH0uIik7Ci0gIH0KLX0KLQotVEVTVF9GKEpzb25TdHJlYW1QYXJz
ZXJUZXN0LCBJbnZhbGlkTGl0ZXJhbEFycmF5SW5PYmplY3QpIHsKLSAgU3RyaW5nUGllY2Ugc3Ry
ID0gIntbbnVsbF19IjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kp
IHsKLSAgICBvd18uU3RhcnRPYmplY3QoIiIpOwotICAgIERvRXJyb3JUZXN0KHN0ciwgaSwgIkV4
cGVjdGVkIGFuIG9iamVjdCBrZXkgb3IgfS4iKTsKLSAgfQotfQotCi1URVNUX0YoSnNvblN0cmVh
bVBhcnNlclRlc3QsIEludmFsaWRMaXRlcmFsVmFsdWVJbk9iamVjdCkgewotICBTdHJpbmdQaWVj
ZSBzdHIgPSAie2ZhbHNlfSI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsg
KytpKSB7Ci0gICAgb3dfLlN0YXJ0T2JqZWN0KCIiKTsKLSAgICBEb0Vycm9yVGVzdChzdHIsIGks
ICJFeHBlY3RlZCBhbiBvYmplY3Qga2V5IG9yIH0uIik7Ci0gIH0KLX0KLQotVEVTVF9GKEpzb25T
dHJlYW1QYXJzZXJUZXN0LCBNaXNzaW5nQ29sb25BZnRlclN0cmluZ0luT2JqZWN0KSB7Ci0gIFN0
cmluZ1BpZWNlIHN0ciA9ICJ7XCJrZXlcIn0iOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIu
bGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5TdGFydE9iamVjdCgiIik7Ci0gICAgRG9FcnJvclRl
c3Qoc3RyLCBpLCAiRXhwZWN0ZWQgOiBiZXR3ZWVuIGtleTp2YWx1ZSBwYWlyLiIpOwotICB9Ci19
Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgTWlzc2luZ0NvbG9uQWZ0ZXJLZXlJbk9i
amVjdCkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAie2tleX0iOwotICBmb3IgKGludCBpID0gMDsg
aSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5TdGFydE9iamVjdCgiIik7Ci0gICAg
RG9FcnJvclRlc3Qoc3RyLCBpLCAiRXhwZWN0ZWQgOiBiZXR3ZWVuIGtleTp2YWx1ZSBwYWlyLiIp
OwotICB9Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgRW5kT2ZUZXh0QWZ0ZXJL
ZXlJbk9iamVjdCkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAie2tleSI7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlN0YXJ0T2JqZWN0KCIiKTsK
LSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJVbmV4cGVjdGVkIGVuZCBvZiBzdHJpbmcuIik7Ci0g
IH0KLX0KLQotVEVTVF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0LCBNaXNzaW5nVmFsdWVBZnRlckNv
bG9uSW5PYmplY3QpIHsKLSAgU3RyaW5nUGllY2Ugc3RyID0gIntrZXk6fSI7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlN0YXJ0T2JqZWN0KCIi
KTsKLSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJVbmV4cGVjdGVkIHRva2VuLiIpOwotICB9Ci19
Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgTWlzc2luZ0NvbW1hQmV0d2Vlbk9iamVj
dEVudHJpZXMpIHsKLSAgU3RyaW5nUGllY2Ugc3RyID0gIntrZXk6MjAgJ2hlbGxvJzogdHJ1ZX0i
OwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5T
dGFydE9iamVjdCgiIiktPlJlbmRlclVpbnQ2NCgia2V5IiwgMjApOwotICAgIERvRXJyb3JUZXN0
KHN0ciwgaSwgIkV4cGVjdGVkICwgb3IgfSBhZnRlciBrZXk6dmFsdWUgcGFpci4iKTsKLSAgfQot
fQotCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIEludmFsaWRMaXRlcmFsQXNPYmplY3RL
ZXkpIHsKLSAgU3RyaW5nUGllY2Ugc3RyID0gIntmYWxzZTogMjB9IjsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBvd18uU3RhcnRPYmplY3QoIiIpOwot
ICAgIERvRXJyb3JUZXN0KHN0ciwgaSwgIkV4cGVjdGVkIGFuIG9iamVjdCBrZXkgb3IgfS4iKTsK
LSAgfQotfQotCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIEV4dHJhQ2hhcmFjdGVyc0Fm
dGVyT2JqZWN0KSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICJ7fX0iOwotICBmb3IgKGludCBpID0g
MDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5TdGFydE9iamVjdCgiIiktPkVu
ZE9iamVjdCgpOwotICAgIERvRXJyb3JUZXN0KHN0ciwgaSwgIlBhcnNpbmcgdGVybWluYXRlZCBi
ZWZvcmUgZW5kIG9mIGlucHV0LiIpOwotICB9Ci19Ci0KLS8vIG51bWJlcnMgdG9vIGxhcmdlCi1U
RVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIFBvc2l0aXZlTnVtYmVyVG9vQmlnKSB7Ci0gIFN0
cmluZ1BpZWNlIHN0ciA9ICJbMTg0NDY3NDQwNzM3MDk1NTE2MTZdIjsgIC8vIDJeNjQKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBvd18uU3RhcnRMaXN0
KCIiKTsKLSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJVbmFibGUgdG8gcGFyc2UgbnVtYmVyLiIp
OwotICB9Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgTmVnYXRpdmVOdW1iZXJU
b29CaWcpIHsKLSAgU3RyaW5nUGllY2Ugc3RyID0gIlstMTg0NDY3NDQwNzM3MDk1NTE2MTZdIjsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kpIHsKLSAgICBvd18uU3Rh
cnRMaXN0KCIiKTsKLSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJVbmFibGUgdG8gcGFyc2UgbnVt
YmVyLiIpOwotICB9Ci19Ci0KLS8qCi1UT0RPKHN2ZW4pOiBGYWlsIHBhcnNpbmcgd2hlbiBwYXJz
aW5nIGEgZG91YmxlIHRoYXQgaXMgdG9vIGxhcmdlLgotCi1URVNUX0YoSnNvblN0cmVhbVBhcnNl
clRlc3QsIERvdWJsZVRvb0JpZykgewotICBTdHJpbmdQaWVjZSBzdHIgPSAiWzE4NDQ2NDA3Mzcw
OTU1MTIzMjMyMTYxNi40NV0iOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7
ICsraSkgewotICAgIG93Xy5TdGFydExpc3QoIiIpOwotICAgIERvRXJyb3JUZXN0KHN0ciwgaSwg
IlVuYWJsZSB0byBwYXJzZSBudW1iZXIiKTsKLSAgfQotfQotKi8KLQotLy8gaW52YWxpZCBiYXJl
IGJhY2tzbGFzaC4KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgVW5maW5pc2hlZEVzY2Fw
ZSkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAiXCJcXCI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9
IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgRG9FcnJvclRlc3Qoc3RyLCBpLCAiQ2xvc2luZyBx
dW90ZSBleHBlY3RlZCBpbiBzdHJpbmcuIik7Ci0gIH0KLX0KLQotLy8gaW52YWxpZCBiYXJlIGJh
Y2tzbGFzaCB1LgotVEVTVF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0LCBVbmZpbmlzaGVkVW5pY29k
ZUVzY2FwZSkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAiXCJcXHUiOwotICBmb3IgKGludCBpID0g
MDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIERvRXJyb3JUZXN0KHN0ciwgaSwgIkls
bGVnYWwgaGV4IHN0cmluZy4iKTsKLSAgfQotfQotCi0vLyBpbnZhbGlkIHVuaWNvZGUgc2VxdWVu
Y2UuCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIFVuaWNvZGVFc2NhcGVDdXRPZmYpIHsK
LSAgU3RyaW5nUGllY2Ugc3RyID0gIlwiXFx1MTIiOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBz
dHIubGVuZ3RoKCk7ICsraSkgewotICAgIERvRXJyb3JUZXN0KHN0ciwgaSwgIklsbGVnYWwgaGV4
IHN0cmluZy4iKTsKLSAgfQotfQotCi0vLyBpbnZhbGlkIHVuaWNvZGUgc2VxdWVuY2UgKHZhbGlk
IGluIG1vZGVybiBFY21hU2NyaXB0IGJ1dCBub3QgaW4gSlNPTikuCi1URVNUX0YoSnNvblN0cmVh
bVBhcnNlclRlc3QsIEJyYWNrZXRlZFVuaWNvZGVFc2NhcGUpIHsKLSAgU3RyaW5nUGllY2Ugc3Ry
ID0gIlwiXFx1ezFmMzZmfVwiIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgp
OyArK2kpIHsKLSAgICBEb0Vycm9yVGVzdChzdHIsIGksICJJbnZhbGlkIGVzY2FwZSBzZXF1ZW5j
ZS4iKTsKLSAgfQotfQotCi0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgVW5pY29kZUVz
Y2FwZUludmFsaWRDaGFyYWN0ZXJzKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICJcIlxcdTEyJDRo
ZWxsbyI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
RG9FcnJvclRlc3Qoc3RyLCBpLCAiSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UuIik7Ci0gIH0KLX0K
LQotLy8gaW52YWxpZCB1bmljb2RlIHNlcXVlbmNlIGluIGxvdyBoYWxmIHN1cnJvZ2F0ZTogZyBp
cyBub3QgYSBoZXggZGlnaXQuCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIFVuaWNvZGVF
c2NhcGVMb3dIYWxmU3Vycm9nYXRlSW52YWxpZENoYXJhY3RlcnMpIHsKLSAgU3RyaW5nUGllY2Ug
c3RyID0gIlwiXFx1ZDgwMFxcdWRjZmdcIiI7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDw9IHN0ci5s
ZW5ndGgoKTsgKytpKSB7Ci0gICAgRG9FcnJvclRlc3Qoc3RyLCBpLCAiSW52YWxpZCBlc2NhcGUg
c2VxdWVuY2UuIik7Ci0gIH0KLX0KLQotLy8gRXh0cmEgY29tbWFzIHdpdGggYW4gb2JqZWN0IG9y
IGFycmF5LgotVEVTVF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0LCBFeHRyYUNvbW1hSW5PYmplY3Qp
IHsKLSAgU3RyaW5nUGllY2Ugc3RyID0gInsnazEnOiB0cnVlLCwnazInOiBmYWxzZX0iOwotICBm
b3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIG93Xy5TdGFydE9i
amVjdCgiIiktPlJlbmRlckJvb2woImsxIiwgdHJ1ZSk7Ci0gICAgRG9FcnJvclRlc3Qoc3RyLCBp
LCAiRXhwZWN0ZWQgYW4gb2JqZWN0IGtleSBvciB9LiIpOwotICB9Ci19Ci0KLVRFU1RfRihKc29u
U3RyZWFtUGFyc2VyVGVzdCwgRXh0cmFDb21tYUluQXJyYXkpIHsKLSAgU3RyaW5nUGllY2Ugc3Ry
ID0gIlt0cnVlLCxmYWxzZX0iOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7
ICsraSkgewotICAgIG93Xy5TdGFydExpc3QoIiIpLT5SZW5kZXJCb29sKCIiLCB0cnVlKTsKLSAg
ICBEb0Vycm9yVGVzdChzdHIsIGksICJVbmV4cGVjdGVkIHRva2VuLiIpOwotICB9Ci19Ci0KLS8v
IEV4dHJhIHRleHQgYmV5b25kIGVuZCBvZiB2YWx1ZS4KLVRFU1RfRihKc29uU3RyZWFtUGFyc2Vy
VGVzdCwgRXh0cmFUZXh0QWZ0ZXJMaXRlcmFsKSB7Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICInaGVs
bG8nLCAnd29ybGQnIjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyLmxlbmd0aCgpOyArK2kp
IHsKLSAgICBvd18uUmVuZGVyU3RyaW5nKCIiLCAiaGVsbG8iKTsKLSAgICBEb0Vycm9yVGVzdChz
dHIsIGksICJQYXJzaW5nIHRlcm1pbmF0ZWQgYmVmb3JlIGVuZCBvZiBpbnB1dC4iKTsKLSAgfQot
fQotCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIEV4dHJhVGV4dEFmdGVyT2JqZWN0KSB7
Ci0gIFN0cmluZ1BpZWNlIHN0ciA9ICJ7J2tleSc6IHRydWV9ICdvb3BzJyI7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlN0YXJ0T2JqZWN0KCIi
KS0+UmVuZGVyQm9vbCgia2V5IiwgdHJ1ZSktPkVuZE9iamVjdCgpOwotICAgIERvRXJyb3JUZXN0
KHN0ciwgaSwgIlBhcnNpbmcgdGVybWluYXRlZCBiZWZvcmUgZW5kIG9mIGlucHV0LiIpOwotICB9
Ci19Ci0KLVRFU1RfRihKc29uU3RyZWFtUGFyc2VyVGVzdCwgRXh0cmFUZXh0QWZ0ZXJBcnJheSkg
ewotICBTdHJpbmdQaWVjZSBzdHIgPSAiW251bGxdICdvb3BzJyI7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlN0YXJ0TGlzdCgiIiktPlJlbmRl
ck51bGwoIiIpLT5FbmRMaXN0KCk7Ci0gICAgRG9FcnJvclRlc3Qoc3RyLCBpLCAiUGFyc2luZyB0
ZXJtaW5hdGVkIGJlZm9yZSBlbmQgb2YgaW5wdXQuIik7Ci0gIH0KLX0KLQotLy8gUmFuZG9tIHVu
a25vd24gdGV4dCBpbiB0aGUgdmFsdWUuCi1URVNUX0YoSnNvblN0cmVhbVBhcnNlclRlc3QsIFVu
a25vd25DaGFyYWN0ZXJzQXNWYWx1ZSkgewotICBTdHJpbmdQaWVjZSBzdHIgPSAiKiYjMjUiOwot
ICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7ICsraSkgewotICAgIERvRXJyb3JU
ZXN0KHN0ciwgaSwgIkV4cGVjdGVkIGEgdmFsdWUuIik7Ci0gIH0KLX0KLQotVEVTVF9GKEpzb25T
dHJlYW1QYXJzZXJUZXN0LCBVbmtub3duQ2hhcmFjdGVyc0luQXJyYXkpIHsKLSAgU3RyaW5nUGll
Y2Ugc3RyID0gIlsqJiMyNV0iOwotICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHIubGVuZ3RoKCk7
ICsraSkgewotICAgIG93Xy5TdGFydExpc3QoIiIpOwotICAgIERvRXJyb3JUZXN0KHN0ciwgaSwg
IkV4cGVjdGVkIGEgdmFsdWUgb3IgXSB3aXRoaW4gYW4gYXJyYXkuIik7Ci0gIH0KLX0KLQotVEVT
VF9GKEpzb25TdHJlYW1QYXJzZXJUZXN0LCBVbmtub3duQ2hhcmFjdGVyc0luT2JqZWN0KSB7Ci0g
IFN0cmluZ1BpZWNlIHN0ciA9ICJ7J2tleSc6IComIzI1fSI7Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDw9IHN0ci5sZW5ndGgoKTsgKytpKSB7Ci0gICAgb3dfLlN0YXJ0T2JqZWN0KCIiKTsKLSAgICBE
b0Vycm9yVGVzdChzdHIsIGksICJFeHBlY3RlZCBhIHZhbHVlLiIpOwotICB9Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2xvY2F0aW9uX3RyYWNrZXIuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi91dGlsL2ludGVybmFsL2xvY2F0aW9uX3RyYWNrZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDg2NGIwNTczN2IyMjkyZGY1OWU4NjA4ZDgwZTMwZjZhNzc0NGFmZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9pbnRlcm5hbC9sb2NhdGlvbl90cmFja2VyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2NSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRl
cmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lm
bmRlZiBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfTE9DQVRJT05fVFJBQ0tFUl9IX18K
LSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVSX0xPQ0FUSU9OX1RSQUNLRVJf
SF9fCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvY29tbW9uLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsK
LW5hbWVzcGFjZSB1dGlsIHsKLW5hbWVzcGFjZSBjb252ZXJ0ZXIgewotCi0vLyBMb2NhdGlvblRy
YWNrZXJJbnRlcmZhY2UgaXMgYW4gaW50ZXJmYWNlIGZvciBjbGFzc2VzIHRoYXQgdHJhY2sKLS8v
IHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgZXJyb3IgcmVwb3J0
aW5nLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIExvY2F0aW9uVHJhY2tlckludGVyZmFjZSB7
Ci0gcHVibGljOgotICB2aXJ0dWFsIH5Mb2NhdGlvblRyYWNrZXJJbnRlcmZhY2UoKSB7fQotCi0g
IC8vIFJldHVybnMgdGhlIG9iamVjdCBsb2NhdGlvbiBhcyBodW1hbiByZWFkYWJsZSBzdHJpbmcu
Ci0gIHZpcnR1YWwgc3RyaW5nIFRvU3RyaW5nKCkgY29uc3QgPSAwOwotCi0gcHJvdGVjdGVkOgot
ICBMb2NhdGlvblRyYWNrZXJJbnRlcmZhY2UoKSB7fQotCi0gcHJpdmF0ZToKLSAgLy8gUGxlYXNl
IGRvIG5vdCBhZGQgYW55IGRhdGEgbWVtYmVycyB0byB0aGlzIGNsYXNzLgotICBHT09HTEVfRElT
QUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTG9jYXRpb25UcmFja2VySW50ZXJmYWNlKTsKLX07Ci0K
LX0gIC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBH
T09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfTE9DQVRJT05fVFJBQ0tFUl9IX18KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL21vY2tfZXJyb3JfbGlzdGVu
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL21vY2tfZXJyb3JfbGlzdGVu
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkxYzM1ZGJiYmViZTI0YWYxN2I1
M2UxYjFjYjlhZGI1NDQwNTgxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9tb2NrX2Vycm9yX2xp
c3RlbmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJU
RVJfTU9DS19FUlJPUl9MSVNURU5FUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1VUSUxf
Q09OVkVSVEVSX01PQ0tfRVJST1JfTElTVEVORVJfSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvc3RyaW5ncGllY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC9lcnJvcl9saXN0ZW5lci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91
dGlsL2ludGVybmFsL2xvY2F0aW9uX3RyYWNrZXIuaD4KLSNpbmNsdWRlIDxnbW9jay9nbW9jay5o
PgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ug
dXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLQotY2xhc3MgTW9ja0Vycm9yTGlzdGVuZXIg
OiBwdWJsaWMgRXJyb3JMaXN0ZW5lciB7Ci0gcHVibGljOgotICBNb2NrRXJyb3JMaXN0ZW5lcigp
IHt9Ci0gIHZpcnR1YWwgfk1vY2tFcnJvckxpc3RlbmVyKCkge30KLQotICBNT0NLX01FVEhPRDMo
SW52YWxpZE5hbWUsIHZvaWQoY29uc3QgTG9jYXRpb25UcmFja2VySW50ZXJmYWNlJiBsb2MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSB1bmtub3duX25hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBtZXNzYWdlKSk7
Ci0gIE1PQ0tfTUVUSE9EMyhJbnZhbGlkVmFsdWUsIHZvaWQoY29uc3QgTG9jYXRpb25UcmFja2Vy
SW50ZXJmYWNlJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
UGllY2UgdHlwZV9uYW1lLCBTdHJpbmdQaWVjZSB2YWx1ZSkpOwotICBNT0NLX01FVEhPRDIoTWlz
c2luZ0ZpZWxkLCB2b2lkKGNvbnN0IExvY2F0aW9uVHJhY2tlckludGVyZmFjZSYgbG9jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlIG1pc3NpbmdfbmFtZSkp
OwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNvbnZlcnRlcgotfSAgLy8gbmFtZXNwYWNlIHV0aWwK
LX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5k
aWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9NT0NLX0VSUk9SX0xJU1RFTkVS
X0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0
X2xvY2F0aW9uX3RyYWNrZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29i
amVjdF9sb2NhdGlvbl90cmFja2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1
ODZjZWNjOTEyMTc4NDQ2NzkzYTJkNjE1MmI5ZDBmZWEwMjAzOGMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50
ZXJuYWwvb2JqZWN0X2xvY2F0aW9uX3RyYWNrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICsw
LDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZv
cm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dM
RV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9PQkpFQ1RfTE9DQVRJT05fVFJBQ0tFUl9IX18KLSNk
ZWZpbmUgR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVSX09CSkVDVF9MT0NBVElPTl9UUkFD
S0VSX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFs
L2xvY2F0aW9uX3RyYWNrZXIuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJv
dG9idWYgewotbmFtZXNwYWNlIHV0aWwgewotbmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0KLS8vIEFu
IGVtcHR5IGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIExvY2F0aW9uVHJhY2tlckludGVyZmFj
ZS4KLWNsYXNzIE9iamVjdExvY2F0aW9uVHJhY2tlciA6IHB1YmxpYyBMb2NhdGlvblRyYWNrZXJJ
bnRlcmZhY2UgewotIHB1YmxpYzoKLSAgLy8gQ3JlYXRlcyBhbiBlbXB0eSBsb2NhdGlvbiB0cmFj
a2VyLgotICBPYmplY3RMb2NhdGlvblRyYWNrZXIoKSB7fQotCi0gIHZpcnR1YWwgfk9iamVjdExv
Y2F0aW9uVHJhY2tlcigpIHt9Ci0KLSAgLy8gUmV0dXJucyBlbXB0eSBiZWNhdXNlIG5vdGhpbmcg
aXMgdHJhY2tlZC4KLSAgdmlydHVhbCBzdHJpbmcgVG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiAi
IjsgfQotCi0gcHJpdmF0ZToKLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE9i
amVjdExvY2F0aW9uVHJhY2tlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVyCi19
ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVS
X09CSkVDVF9MT0NBVElPTl9UUkFDS0VSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X3NvdXJjZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvb2JqZWN0X3NvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyYzMxY2ZiMDllNzcyMTU3ODNkOTY4MTNiNzg0NzdiODgxY2Q5NmVjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGls
L2ludGVybmFsL29iamVjdF9zb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9U
T0JVRl9VVElMX0NPTlZFUlRFUl9PQkpFQ1RfU09VUkNFX0hfXwotI2RlZmluZSBHT09HTEVfUFJP
VE9CVUZfVVRJTF9DT05WRVJURVJfT0JKRUNUX1NPVVJDRV9IX18KLQotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvc3RyaW5ncGllY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVz
Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFj
ZSB1dGlsIHsKLW5hbWVzcGFjZSBjb252ZXJ0ZXIgewotCi1jbGFzcyBPYmplY3RXcml0ZXI7Ci0K
LS8vIEFuIE9iamVjdFNvdXJjZSBpcyBhbnl0aGluZyB0aGF0IGNhbiB3cml0ZSB0byBhbiBPYmpl
Y3RXcml0ZXIuCi0vLyBJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZSB0eXBpY2FsbHkg
cHJvdmlkZSBjb25zdHJ1Y3RvcnMgb3IKLS8vIGZhY3RvcnkgbWV0aG9kcyB0byBjcmVhdGUgYW4g
aW5zdGFuY2UgYmFzZWQgb24gc29tZSBzb3VyY2UgZGF0YSwgZm9yCi0vLyBleGFtcGxlLCBhIGNo
YXJhY3RlciBzdHJlYW0sIG9yIHByb3RvYnVmLgotLy8KLS8vIERlcml2ZWQgY2xhc3NlcyBjb3Vs
ZCBiZSB0aHJlYWQtdW5zYWZlLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIE9iamVjdFNvdXJj
ZSB7Ci0gcHVibGljOgotICB2aXJ0dWFsIH5PYmplY3RTb3VyY2UoKSB7fQotCi0gIC8vIFdyaXRl
cyB0byB0aGUgT2JqZWN0V3JpdGVyCi0gIHZpcnR1YWwgdXRpbDo6U3RhdHVzIFdyaXRlVG8oT2Jq
ZWN0V3JpdGVyKiBvdykgY29uc3QgewotICAgIHJldHVybiBOYW1lZFdyaXRlVG8oIiIsIG93KTsK
LSAgfQotCi0gIC8vIFdyaXRlcyB0byB0aGUgT2JqZWN0V3JpdGVyIHdpdGggYSBjdXN0b20gbmFt
ZSBmb3IgdGhlIG1lc3NhZ2UuCi0gIC8vIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGNoYWluIE9i
amVjdFNvdXJjZSB0b2dldGhlciBieSBlbWJlZGRpbmcgb25lCi0gIC8vIHdpdGhpbiBhbm90aGVy
LgotICB2aXJ0dWFsIHV0aWw6OlN0YXR1cyBOYW1lZFdyaXRlVG8oU3RyaW5nUGllY2UgbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0V3JpdGVyKiBvdykg
Y29uc3QgPSAwOwotCi0gcHJvdGVjdGVkOgotICBPYmplY3RTb3VyY2UoKSB7fQotCi0gcHJpdmF0
ZToKLSAgLy8gRG8gbm90IGFkZCBhbnkgZGF0YSBtZW1iZXJzIHRvIHRoaXMgY2xhc3MuCi0gIEdP
T0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhPYmplY3RTb3VyY2UpOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIGNvbnZlcnRlcgotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVz
cGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dM
RV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9PQkpFQ1RfU09VUkNFX0hfXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X3dyaXRlci5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29iamVjdF93cml0ZXIuY2MKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDU3Y2MwOGExZDdhNGYzMzM2MTZmOGE4Y2M3NTA4ODA3NTFkNjlh
MTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X3dyaXRlci5jYworKysgL2Rldi9udWxs
CkBAIC0xLDkyICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X3dyaXRlci5oPgot
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGF0YXBpZWNlLmg+Ci0K
LW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB1dGls
IHsKLW5hbWVzcGFjZSBjb252ZXJ0ZXIgewotCi0vLyBzdGF0aWMKLXZvaWQgT2JqZWN0V3JpdGVy
OjpSZW5kZXJEYXRhUGllY2VUbyhjb25zdCBEYXRhUGllY2UmIGRhdGEsIFN0cmluZ1BpZWNlIG5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0V3JpdGVyKiBv
dykgewotICBzd2l0Y2ggKGRhdGEudHlwZSgpKSB7Ci0gICAgY2FzZSBEYXRhUGllY2U6OlRZUEVf
SU5UMzI6IHsKLSAgICAgIG93LT5SZW5kZXJJbnQzMihuYW1lLCBkYXRhLlRvSW50MzIoKS5WYWx1
ZU9yRGllKCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRGF0YVBpZWNlOjpUWVBF
X0lOVDY0OiB7Ci0gICAgICBvdy0+UmVuZGVySW50NjQobmFtZSwgZGF0YS5Ub0ludDY0KCkuVmFs
dWVPckRpZSgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIERhdGFQaWVjZTo6VFlQ
RV9VSU5UMzI6IHsKLSAgICAgIG93LT5SZW5kZXJVaW50MzIobmFtZSwgZGF0YS5Ub1VpbnQzMigp
LlZhbHVlT3JEaWUoKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEYXRhUGllY2U6
OlRZUEVfVUlOVDY0OiB7Ci0gICAgICBvdy0+UmVuZGVyVWludDY0KG5hbWUsIGRhdGEuVG9VaW50
NjQoKS5WYWx1ZU9yRGllKCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRGF0YVBp
ZWNlOjpUWVBFX0RPVUJMRTogewotICAgICAgb3ctPlJlbmRlckRvdWJsZShuYW1lLCBkYXRhLlRv
RG91YmxlKCkuVmFsdWVPckRpZSgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIERh
dGFQaWVjZTo6VFlQRV9GTE9BVDogewotICAgICAgb3ctPlJlbmRlckZsb2F0KG5hbWUsIGRhdGEu
VG9GbG9hdCgpLlZhbHVlT3JEaWUoKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBE
YXRhUGllY2U6OlRZUEVfQk9PTDogewotICAgICAgb3ctPlJlbmRlckJvb2wobmFtZSwgZGF0YS5U
b0Jvb2woKS5WYWx1ZU9yRGllKCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRGF0
YVBpZWNlOjpUWVBFX1NUUklORzogewotICAgICAgb3ctPlJlbmRlclN0cmluZyhuYW1lLCBkYXRh
LlRvU3RyaW5nKCkuVmFsdWVPckRpZSgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IERhdGFQaWVjZTo6VFlQRV9CWVRFUzogewotICAgICAgb3ctPlJlbmRlckJ5dGVzKG5hbWUsIGRh
dGEuVG9CeXRlcygpLlZhbHVlT3JEaWUoKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBEYXRhUGllY2U6OlRZUEVfTlVMTDogewotICAgICAgb3ctPlJlbmRlck51bGwobmFtZSk7Ci0g
ICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBu
YW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3Jj
L2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29iamVjdF93cml0ZXIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29iamVjdF93cml0ZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWYwNzM2M2Q4OWU1MjE0MmQyYWZiNWUxYzFkZTFlYzRhNDZhOGUxMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9pbnRlcm5hbC9vYmplY3Rfd3JpdGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMzggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJj
aGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZl
cnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5k
ZWYgR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVSX09CSkVDVF9XUklURVJfSF9fCi0jZGVm
aW5lIEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9PQkpFQ1RfV1JJVEVSX0hfXwotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwaWVjZS5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5h
bWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVy
IHsKLQotY2xhc3MgRGF0YVBpZWNlOwotCi0vLyBBbiBPYmplY3RXcml0ZXIgaXMgYW4gaW50ZXJm
YWNlIGZvciB3cml0aW5nIGEgc3RyZWFtIG9mIGV2ZW50cwotLy8gcmVwcmVzZW50aW5nIG9iamVj
dHMgYW5kIGNvbGxlY3Rpb25zLiBJbXBsZW1lbnRhdGlvbiBvZiB0aGlzCi0vLyBpbnRlcmZhY2Ug
Y2FuIGJlIHVzZWQgdG8gd3JpdGUgYW4gb2JqZWN0IHN0cmVhbSB0byBhbiBpbi1tZW1vcnkKLS8v
IHN0cnVjdHVyZSwgcHJvdG9idWZzLCBKU09OLCBYTUwsIG9yIGFueSBvdGhlciBvdXRwdXQgZm9y
bWF0Ci0vLyBkZXNpcmVkLiBUaGUgT2JqZWN0U291cmNlIGludGVyZmFjZSBpcyB0eXBpY2FsbHkg
dXNlZCBhcyB0aGUKLS8vIHNvdXJjZSBvZiBhbiBvYmplY3Qgc3RyZWFtLgotLy8KLS8vIFNlZSBK
c29uT2JqZWN0V3JpdGVyIGZvciBhIHNhbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBPYmplY3RXcml0
ZXIKLS8vIGFuZCBpdHMgdXNlLgotLy8KLS8vIERlcml2ZWQgY2xhc3NlcyBjb3VsZCBiZSB0aHJl
YWQtdW5zYWZlLgotLy8KLS8vIFRPRE8oeGluYik6IHNlZW1zIGxpa2UgYSBwcmltZSBjYW5kaWRh
dGUgdG8gYXBwbHkgdGhlIFJBSUkgcGFyYWRpZ20KLS8vIGFuZCBnZXQgcmlkIHRoZSBuZWVkIHRv
IGNhbGwgRW5kWFhYKCkuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgT2JqZWN0V3JpdGVyIHsK
LSBwdWJsaWM6Ci0gIHZpcnR1YWwgfk9iamVjdFdyaXRlcigpIHt9Ci0KLSAgLy8gU3RhcnRzIGFu
IG9iamVjdC4gSWYgdGhlIG5hbWUgaXMgZW1wdHksIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgbmFt
ZWQuCi0gIHZpcnR1YWwgT2JqZWN0V3JpdGVyKiBTdGFydE9iamVjdChTdHJpbmdQaWVjZSBuYW1l
KSA9IDA7Ci0KLSAgLy8gRW5kcyBhbiBvYmplY3QuCi0gIHZpcnR1YWwgT2JqZWN0V3JpdGVyKiBF
bmRPYmplY3QoKSA9IDA7Ci0KLSAgLy8gU3RhcnRzIGEgbGlzdC4gSWYgdGhlIG5hbWUgaXMgZW1w
dHksIHRoZSBsaXN0IHdpbGwgbm90IGJlIG5hbWVkLgotICB2aXJ0dWFsIE9iamVjdFdyaXRlciog
U3RhcnRMaXN0KFN0cmluZ1BpZWNlIG5hbWUpID0gMDsKLQotICAvLyBFbmRzIGEgbGlzdC4KLSAg
dmlydHVhbCBPYmplY3RXcml0ZXIqIEVuZExpc3QoKSA9IDA7Ci0KLSAgLy8gUmVuZGVycyBhIGJv
b2xlYW4gdmFsdWUuCi0gIHZpcnR1YWwgT2JqZWN0V3JpdGVyKiBSZW5kZXJCb29sKFN0cmluZ1Bp
ZWNlIG5hbWUsIGJvb2wgdmFsdWUpID0gMDsKLQotICAvLyBSZW5kZXJzIGFuIDMyLWJpdCBpbnRl
Z2VyIHZhbHVlLgotICB2aXJ0dWFsIE9iamVjdFdyaXRlciogUmVuZGVySW50MzIoU3RyaW5nUGll
Y2UgbmFtZSwgaW50MzIgdmFsdWUpID0gMDsKLQotICAvLyBSZW5kZXJzIGFuIDMyLWJpdCB1bnNp
Z25lZCBpbnRlZ2VyIHZhbHVlLgotICB2aXJ0dWFsIE9iamVjdFdyaXRlciogUmVuZGVyVWludDMy
KFN0cmluZ1BpZWNlIG5hbWUsIHVpbnQzMiB2YWx1ZSkgPSAwOwotCi0gIC8vIFJlbmRlcnMgYSA2
NC1iaXQgaW50ZWdlciB2YWx1ZS4KLSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIFJlbmRlckludDY0
KFN0cmluZ1BpZWNlIG5hbWUsIGludDY0IHZhbHVlKSA9IDA7Ci0KLSAgLy8gUmVuZGVycyBhbiA2
NC1iaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZS4KLSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIFJl
bmRlclVpbnQ2NChTdHJpbmdQaWVjZSBuYW1lLCB1aW50NjQgdmFsdWUpID0gMDsKLQotICAvLyBS
ZW5kZXJzIGEgZG91YmxlIHZhbHVlLgotICB2aXJ0dWFsIE9iamVjdFdyaXRlciogUmVuZGVyRG91
YmxlKFN0cmluZ1BpZWNlIG5hbWUsIGRvdWJsZSB2YWx1ZSkgPSAwOwotCi0gIC8vIFJlbmRlcnMg
YSBmbG9hdCB2YWx1ZS4KLSAgdmlydHVhbCBPYmplY3RXcml0ZXIqIFJlbmRlckZsb2F0KFN0cmlu
Z1BpZWNlIG5hbWUsIGZsb2F0IHZhbHVlKSA9IDA7Ci0KLSAgLy8gUmVuZGVycyBhIFN0cmluZ1Bp
ZWNlIHZhbHVlLiBUaGlzIGlzIGZvciByZW5kZXJpbmcgc3RyaW5ncy4KLSAgdmlydHVhbCBPYmpl
Y3RXcml0ZXIqIFJlbmRlclN0cmluZyhTdHJpbmdQaWVjZSBuYW1lLCBTdHJpbmdQaWVjZSB2YWx1
ZSkgPSAwOwotCi0gIC8vIFJlbmRlcnMgYSBieXRlcyB2YWx1ZS4KLSAgdmlydHVhbCBPYmplY3RX
cml0ZXIqIFJlbmRlckJ5dGVzKFN0cmluZ1BpZWNlIG5hbWUsIFN0cmluZ1BpZWNlIHZhbHVlKSA9
IDA7Ci0KLSAgLy8gUmVuZGVycyBhIE51bGwgdmFsdWUuCi0gIHZpcnR1YWwgT2JqZWN0V3JpdGVy
KiBSZW5kZXJOdWxsKFN0cmluZ1BpZWNlIG5hbWUpID0gMDsKLQotICAvLyBSZW5kZXJzIGEgRGF0
YVBpZWNlIG9iamVjdCB0byBhIE9iamVjdFdyaXRlci4KLSAgc3RhdGljIHZvaWQgUmVuZGVyRGF0
YVBpZWNlVG8oY29uc3QgRGF0YVBpZWNlJiBkYXRhLCBTdHJpbmdQaWVjZSBuYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RXcml0ZXIqIG93KTsKLQotICAvLyBJbmRp
Y2F0ZXMgd2hldGhlciB0aGlzIE9iamVjdFdyaXRlciBoYXMgY29tcGxldGVkIHdyaXRpbmcgdGhl
IHJvb3QgbWVzc2FnZSwKLSAgLy8gdXN1YWxseSB0aGlzIG1lYW5zIHdyaXRpbmcgb2Ygb25lIGNv
bXBsZXRlIG9iamVjdC4gU3ViY2xhc3NlcyBtdXN0IG92ZXJyaWRlCi0gIC8vIHRoaXMgYmVoYXZp
b3IgYXBwcm9wcmlhdGVseS4KLSAgdmlydHVhbCBib29sIGRvbmUoKSB7IHJldHVybiBmYWxzZTsg
fQotCi0gIHZvaWQgc2V0X3VzZV9zdHJpY3RfYmFzZTY0X2RlY29kaW5nKGJvb2wgdmFsdWUpIHsK
LSAgICB1c2Vfc3RyaWN0X2Jhc2U2NF9kZWNvZGluZ18gPSB2YWx1ZTsKLSAgfQotCi0gIGJvb2wg
dXNlX3N0cmljdF9iYXNlNjRfZGVjb2RpbmcoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHVzZV9zdHJp
Y3RfYmFzZTY0X2RlY29kaW5nXzsKLSAgfQotCi0gcHJvdGVjdGVkOgotICBPYmplY3RXcml0ZXIo
KSA6IHVzZV9zdHJpY3RfYmFzZTY0X2RlY29kaW5nXyh0cnVlKSB7fQotCi0gcHJpdmF0ZToKLSAg
Ly8gSWYgc2V0IHRvIHRydWUsIHdlIHVzZSB0aGUgc3RyaWN0ZXIgdmVyc2lvbiBvZiBiYXNlNjQg
ZGVjb2RpbmcgZm9yIGJ5dGUKLSAgLy8gZmllbGRzIGJ5IG1ha2luZyBzdXJlIGRlY29kZWQgdmVy
c2lvbiBlbmNvZGVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHN0cmluZy4KLSAgYm9vbCB1c2Vfc3Ry
aWN0X2Jhc2U2NF9kZWNvZGluZ187Ci0KLSAgLy8gRG8gbm90IGFkZCBhbnkgZGF0YSBtZW1iZXJz
IHRvIHRoaXMgY2xhc3MuCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhPYmpl
Y3RXcml0ZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGNvbnZlcnRlcgotfSAgLy8gbmFtZXNw
YWNlIHV0aWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9PQkpFQ1RfV1JJ
VEVSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJv
dG9fd3JpdGVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9fd3Jp
dGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmI3OTQxMDk1ZTY5NWEyNmQ5
YWY0MTBkNDNiNThiODZjY2JiMjEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3RvX3dyaXRl
ci5jYworKysgL2Rldi9udWxsCkBAIC0xLDc2MiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFs
L3Byb3RvX3dyaXRlci5oPgotCi0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxzdGFj
az4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNlLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RpbWUuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
d2lyZV9mb3JtYXRfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVy
bmFsL2ZpZWxkX21hc2tfdXRpbGl0eS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGls
L2ludGVybmFsL29iamVjdF9sb2NhdGlvbl90cmFja2VyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3V0aWwvaW50ZXJuYWwvY29uc3RhbnRzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3V0aWwvaW50ZXJuYWwvdXRpbGl0eS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hcF91dGls
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1c29yLmg+Ci0KLQotbmFt
ZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwgewot
bmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0KLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1
dFN0cmVhbTsKLXVzaW5nIHV0aWw6OmVycm9yOjpJTlZBTElEX0FSR1VNRU5UOwotdXNpbmcgdXRp
bDo6U3RhdHVzOwotdXNpbmcgdXRpbDo6U3RhdHVzT3I7Ci0KLQotUHJvdG9Xcml0ZXI6OlByb3Rv
V3JpdGVyKFR5cGVSZXNvbHZlciogdHlwZV9yZXNvbHZlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmluZ3M6OkJ5dGVTaW5rKiBvdXRwdXQsIEVycm9yTGlzdGVuZXIqIGxpc3Rl
bmVyKQotICAgIDogbWFzdGVyX3R5cGVfKHR5cGUpLAotICAgICAgdHlwZWluZm9fKFR5cGVJbmZv
OjpOZXdUeXBlSW5mbyh0eXBlX3Jlc29sdmVyKSksCi0gICAgICBvd25fdHlwZWluZm9fKHRydWUp
LAotICAgICAgZG9uZV8oZmFsc2UpLAotICAgICAgZWxlbWVudF8oTlVMTCksCi0gICAgICBzaXpl
X2luc2VydF8oKSwKLSAgICAgIG91dHB1dF8ob3V0cHV0KSwKLSAgICAgIGJ1ZmZlcl8oKSwKLSAg
ICAgIGFkYXB0ZXJfKCZidWZmZXJfKSwKLSAgICAgIHN0cmVhbV8obmV3IENvZGVkT3V0cHV0U3Ry
ZWFtKCZhZGFwdGVyXykpLAotICAgICAgbGlzdGVuZXJfKGxpc3RlbmVyKSwKLSAgICAgIGludmFs
aWRfZGVwdGhfKDApLAotICAgICAgdHJhY2tlcl8obmV3IE9iamVjdExvY2F0aW9uVHJhY2tlcigp
KSB7fQotCi1Qcm90b1dyaXRlcjo6UHJvdG9Xcml0ZXIoY29uc3QgVHlwZUluZm8qIHR5cGVpbmZv
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUm
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nczo6Qnl0ZVNpbmsqIG91dHB1
dCwgRXJyb3JMaXN0ZW5lciogbGlzdGVuZXIpCi0gICAgOiBtYXN0ZXJfdHlwZV8odHlwZSksCi0g
ICAgICB0eXBlaW5mb18odHlwZWluZm8pLAotICAgICAgb3duX3R5cGVpbmZvXyhmYWxzZSksCi0g
ICAgICBkb25lXyhmYWxzZSksCi0gICAgICBlbGVtZW50XyhOVUxMKSwKLSAgICAgIHNpemVfaW5z
ZXJ0XygpLAotICAgICAgb3V0cHV0XyhvdXRwdXQpLAotICAgICAgYnVmZmVyXygpLAotICAgICAg
YWRhcHRlcl8oJmJ1ZmZlcl8pLAotICAgICAgc3RyZWFtXyhuZXcgQ29kZWRPdXRwdXRTdHJlYW0o
JmFkYXB0ZXJfKSksCi0gICAgICBsaXN0ZW5lcl8obGlzdGVuZXIpLAotICAgICAgaW52YWxpZF9k
ZXB0aF8oMCksCi0gICAgICB0cmFja2VyXyhuZXcgT2JqZWN0TG9jYXRpb25UcmFja2VyKCkpIHt9
Ci0KLVByb3RvV3JpdGVyOjp+UHJvdG9Xcml0ZXIoKSB7Ci0gIGlmIChvd25fdHlwZWluZm9fKSB7
Ci0gICAgZGVsZXRlIHR5cGVpbmZvXzsKLSAgfQotICBpZiAoZWxlbWVudF8gPT0gTlVMTCkgcmV0
dXJuOwotICAvLyBDbGVhbnVwIGV4cGxpY2l0bHkgaW4gb3JkZXIgdG8gYXZvaWQgZGVzdHJ1Y3Rv
ciBzdGFjayBvdmVyZmxvdyB3aGVuIGlucHV0Ci0gIC8vIGlzIGRlZXBseSBuZXN0ZWQuCi0gIC8v
IENhc3QgdG8gQmFzZUVsZW1lbnQgdG8gYXZvaWQgZG9pbmcgYWRkaXRpb25hbCBjaGVja3MgKGxp
a2UgbWlzc2luZyBmaWVsZHMpCi0gIC8vIGR1cmluZyBwb3AoKS4KLSAgZ29vZ2xlOjpwcm90b2J1
Zjo6c2NvcGVkX3B0cjxCYXNlRWxlbWVudD4gZWxlbWVudCgKLSAgICAgIHN0YXRpY19jYXN0PEJh
c2VFbGVtZW50Kj4oZWxlbWVudF8uZ2V0KCkpLT5wb3A8QmFzZUVsZW1lbnQ+KCkpOwotICB3aGls
ZSAoZWxlbWVudCAhPSBOVUxMKSB7Ci0gICAgZWxlbWVudC5yZXNldChlbGVtZW50LT5wb3A8QmFz
ZUVsZW1lbnQ+KCkpOwotICB9Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFdyaXRlcyBhbiBJTlQz
MiBmaWVsZCwgaW5jbHVkaW5nIHRhZyB0byB0aGUgc3RyZWFtLgotaW5saW5lIFN0YXR1cyBXcml0
ZUludDMyKGludCBmaWVsZF9udW1iZXIsIGNvbnN0IERhdGFQaWVjZSYgZGF0YSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlZE91dHB1dFN0cmVhbSogc3RyZWFtKSB7Ci0gIFN0YXR1c09y
PGludDMyPiBpMzIgPSBkYXRhLlRvSW50MzIoKTsKLSAgaWYgKGkzMi5vaygpKSB7Ci0gICAgV2ly
ZUZvcm1hdExpdGU6OldyaXRlSW50MzIoZmllbGRfbnVtYmVyLCBpMzIuVmFsdWVPckRpZSgpLCBz
dHJlYW0pOwotICB9Ci0gIHJldHVybiBpMzIuc3RhdHVzKCk7Ci19Ci0KLS8vIHdyaXRlcyBhbiBT
RklYRUQzMiBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVhbS4KLWlubGluZSBTdGF0
dXMgV3JpdGVTRml4ZWQzMihpbnQgZmllbGRfbnVtYmVyLCBjb25zdCBEYXRhUGllY2UmIGRhdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0qIHN0cmVhbSkg
ewotICBTdGF0dXNPcjxpbnQzMj4gaTMyID0gZGF0YS5Ub0ludDMyKCk7Ci0gIGlmIChpMzIub2so
KSkgewotICAgIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVNGaXhlZDMyKGZpZWxkX251bWJlciwgaTMy
LlZhbHVlT3JEaWUoKSwgc3RyZWFtKTsKLSAgfQotICByZXR1cm4gaTMyLnN0YXR1cygpOwotfQot
Ci0vLyBXcml0ZXMgYW4gU0lOVDMyIGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3RyZWFt
LgotaW5saW5lIFN0YXR1cyBXcml0ZVNJbnQzMihpbnQgZmllbGRfbnVtYmVyLCBjb25zdCBEYXRh
UGllY2UmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkT3V0cHV0U3RyZWFt
KiBzdHJlYW0pIHsKLSAgU3RhdHVzT3I8aW50MzI+IGkzMiA9IGRhdGEuVG9JbnQzMigpOwotICBp
ZiAoaTMyLm9rKCkpIHsKLSAgICBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTSW50MzIoZmllbGRfbnVt
YmVyLCBpMzIuVmFsdWVPckRpZSgpLCBzdHJlYW0pOwotICB9Ci0gIHJldHVybiBpMzIuc3RhdHVz
KCk7Ci19Ci0KLS8vIFdyaXRlcyBhIEZJWEVEMzIgZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRo
ZSBzdHJlYW0uCi1pbmxpbmUgU3RhdHVzIFdyaXRlRml4ZWQzMihpbnQgZmllbGRfbnVtYmVyLCBj
b25zdCBEYXRhUGllY2UmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZE91
dHB1dFN0cmVhbSogc3RyZWFtKSB7Ci0gIFN0YXR1c09yPHVpbnQzMj4gdTMyID0gZGF0YS5Ub1Vp
bnQzMigpOwotICBpZiAodTMyLm9rKCkpIHsKLSAgICBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVGaXhl
ZDMyKGZpZWxkX251bWJlciwgdTMyLlZhbHVlT3JEaWUoKSwgc3RyZWFtKTsKLSAgfQotICByZXR1
cm4gdTMyLnN0YXR1cygpOwotfQotCi0vLyBXcml0ZXMgYSBVSU5UMzIgZmllbGQsIGluY2x1ZGlu
ZyB0YWcsIHRvIHRoZSBzdHJlYW0uCi1pbmxpbmUgU3RhdHVzIFdyaXRlVUludDMyKGludCBmaWVs
ZF9udW1iZXIsIGNvbnN0IERhdGFQaWVjZSYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZWRPdXRwdXRTdHJlYW0qIHN0cmVhbSkgewotICBTdGF0dXNPcjx1aW50MzI+IHUzMiA9
IGRhdGEuVG9VaW50MzIoKTsKLSAgaWYgKHUzMi5vaygpKSB7Ci0gICAgV2lyZUZvcm1hdExpdGU6
OldyaXRlVUludDMyKGZpZWxkX251bWJlciwgdTMyLlZhbHVlT3JEaWUoKSwgc3RyZWFtKTsKLSAg
fQotICByZXR1cm4gdTMyLnN0YXR1cygpOwotfQotCi0vLyBXcml0ZXMgYW4gSU5UNjQgZmllbGQs
IGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJlYW0uCi1pbmxpbmUgU3RhdHVzIFdyaXRlSW50NjQo
aW50IGZpZWxkX251bWJlciwgY29uc3QgRGF0YVBpZWNlJiBkYXRhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIENvZGVkT3V0cHV0U3RyZWFtKiBzdHJlYW0pIHsKLSAgU3RhdHVzT3I8aW50NjQ+
IGk2NCA9IGRhdGEuVG9JbnQ2NCgpOwotICBpZiAoaTY0Lm9rKCkpIHsKLSAgICBXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVJbnQ2NChmaWVsZF9udW1iZXIsIGk2NC5WYWx1ZU9yRGllKCksIHN0cmVhbSk7
Ci0gIH0KLSAgcmV0dXJuIGk2NC5zdGF0dXMoKTsKLX0KLQotLy8gV3JpdGVzIGFuIFNGSVhFRDY0
IGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3RyZWFtLgotaW5saW5lIFN0YXR1cyBXcml0
ZVNGaXhlZDY0KGludCBmaWVsZF9udW1iZXIsIGNvbnN0IERhdGFQaWVjZSYgZGF0YSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb2RlZE91dHB1dFN0cmVhbSogc3RyZWFtKSB7Ci0gIFN0
YXR1c09yPGludDY0PiBpNjQgPSBkYXRhLlRvSW50NjQoKTsKLSAgaWYgKGk2NC5vaygpKSB7Ci0g
ICAgV2lyZUZvcm1hdExpdGU6OldyaXRlU0ZpeGVkNjQoZmllbGRfbnVtYmVyLCBpNjQuVmFsdWVP
ckRpZSgpLCBzdHJlYW0pOwotICB9Ci0gIHJldHVybiBpNjQuc3RhdHVzKCk7Ci19Ci0KLS8vIFdy
aXRlcyBhbiBTSU5UNjQgZmllbGQsIGluY2x1ZGluZyB0YWcsIHRvIHRoZSBzdHJlYW0uCi1pbmxp
bmUgU3RhdHVzIFdyaXRlU0ludDY0KGludCBmaWVsZF9udW1iZXIsIGNvbnN0IERhdGFQaWVjZSYg
ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWRPdXRwdXRTdHJlYW0qIHN0cmVh
bSkgewotICBTdGF0dXNPcjxpbnQ2ND4gaTY0ID0gZGF0YS5Ub0ludDY0KCk7Ci0gIGlmIChpNjQu
b2soKSkgewotICAgIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVNJbnQ2NChmaWVsZF9udW1iZXIsIGk2
NC5WYWx1ZU9yRGllKCksIHN0cmVhbSk7Ci0gIH0KLSAgcmV0dXJuIGk2NC5zdGF0dXMoKTsKLX0K
LQotLy8gV3JpdGVzIGEgRklYRUQ2NCBmaWVsZCwgaW5jbHVkaW5nIHRhZywgdG8gdGhlIHN0cmVh
bS4KLWlubGluZSBTdGF0dXMgV3JpdGVGaXhlZDY0KGludCBmaWVsZF9udW1iZXIsIGNvbnN0IERh
dGFQaWVjZSYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkT3V0cHV0U3Ry
ZWFtKiBzdHJlYW0pIHsKLSAgU3RhdHVzT3I8dWludDY0PiB1NjQgPSBkYXRhLlRvVWludDY0KCk7
Ci0gIGlmICh1NjQub2soKSkgewotICAgIFdpcmVGb3JtYXRMaXRlOjpXcml0ZUZpeGVkNjQoZmll
bGRfbnVtYmVyLCB1NjQuVmFsdWVPckRpZSgpLCBzdHJlYW0pOwotICB9Ci0gIHJldHVybiB1NjQu
c3RhdHVzKCk7Ci19Ci0KLS8vIFdyaXRlcyBhIFVJTlQ2NCBmaWVsZCwgaW5jbHVkaW5nIHRhZywg
dG8gdGhlIHN0cmVhbS4KLWlubGluZSBTdGF0dXMgV3JpdGVVSW50NjQoaW50IGZpZWxkX251bWJl
ciwgY29uc3QgRGF0YVBpZWNlJiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDb2Rl
ZE91dHB1dFN0cmVhbSogc3RyZWFtKSB7Ci0gIFN0YXR1c09yPHVpbnQ2ND4gdTY0ID0gZGF0YS5U
b1VpbnQ2NCgpOwotICBpZiAodTY0Lm9rKCkpIHsKLSAgICBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVV
SW50NjQoZmllbGRfbnVtYmVyLCB1NjQuVmFsdWVPckRpZSgpLCBzdHJlYW0pOwotICB9Ci0gIHJl
dHVybiB1NjQuc3RhdHVzKCk7Ci19Ci0KLS8vIFdyaXRlcyBhIERPVUJMRSBmaWVsZCwgaW5jbHVk
aW5nIHRhZywgdG8gdGhlIHN0cmVhbS4KLWlubGluZSBTdGF0dXMgV3JpdGVEb3VibGUoaW50IGZp
ZWxkX251bWJlciwgY29uc3QgRGF0YVBpZWNlJiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlZE91dHB1dFN0cmVhbSogc3RyZWFtKSB7Ci0gIFN0YXR1c09yPGRvdWJsZT4gZCA9
IGRhdGEuVG9Eb3VibGUoKTsKLSAgaWYgKGQub2soKSkgewotICAgIFdpcmVGb3JtYXRMaXRlOjpX
cml0ZURvdWJsZShmaWVsZF9udW1iZXIsIGQuVmFsdWVPckRpZSgpLCBzdHJlYW0pOwotICB9Ci0g
IHJldHVybiBkLnN0YXR1cygpOwotfQotCi0vLyBXcml0ZXMgYSBGTE9BVCBmaWVsZCwgaW5jbHVk
aW5nIHRhZywgdG8gdGhlIHN0cmVhbS4KLWlubGluZSBTdGF0dXMgV3JpdGVGbG9hdChpbnQgZmll
bGRfbnVtYmVyLCBjb25zdCBEYXRhUGllY2UmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZWRPdXRwdXRTdHJlYW0qIHN0cmVhbSkgewotICBTdGF0dXNPcjxmbG9hdD4gZiA9IGRh
dGEuVG9GbG9hdCgpOwotICBpZiAoZi5vaygpKSB7Ci0gICAgV2lyZUZvcm1hdExpdGU6OldyaXRl
RmxvYXQoZmllbGRfbnVtYmVyLCBmLlZhbHVlT3JEaWUoKSwgc3RyZWFtKTsKLSAgfQotICByZXR1
cm4gZi5zdGF0dXMoKTsKLX0KLQotLy8gV3JpdGVzIGEgQk9PTCBmaWVsZCwgaW5jbHVkaW5nIHRh
ZywgdG8gdGhlIHN0cmVhbS4KLWlubGluZSBTdGF0dXMgV3JpdGVCb29sKGludCBmaWVsZF9udW1i
ZXIsIGNvbnN0IERhdGFQaWVjZSYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvZGVk
T3V0cHV0U3RyZWFtKiBzdHJlYW0pIHsKLSAgU3RhdHVzT3I8Ym9vbD4gYiA9IGRhdGEuVG9Cb29s
KCk7Ci0gIGlmIChiLm9rKCkpIHsKLSAgICBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCb29sKGZpZWxk
X251bWJlciwgYi5WYWx1ZU9yRGllKCksIHN0cmVhbSk7Ci0gIH0KLSAgcmV0dXJuIGIuc3RhdHVz
KCk7Ci19Ci0KLS8vIFdyaXRlcyBhIEJZVEVTIGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUg
c3RyZWFtLgotaW5saW5lIFN0YXR1cyBXcml0ZUJ5dGVzKGludCBmaWVsZF9udW1iZXIsIGNvbnN0
IERhdGFQaWVjZSYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZE91dHB1dFN0
cmVhbSogc3RyZWFtKSB7Ci0gIFN0YXR1c09yPHN0cmluZz4gYyA9IGRhdGEuVG9CeXRlcygpOwot
ICBpZiAoYy5vaygpKSB7Ci0gICAgV2lyZUZvcm1hdExpdGU6OldyaXRlQnl0ZXMoZmllbGRfbnVt
YmVyLCBjLlZhbHVlT3JEaWUoKSwgc3RyZWFtKTsKLSAgfQotICByZXR1cm4gYy5zdGF0dXMoKTsK
LX0KLQotLy8gV3JpdGVzIGEgU1RSSU5HIGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3Ry
ZWFtLgotaW5saW5lIFN0YXR1cyBXcml0ZVN0cmluZyhpbnQgZmllbGRfbnVtYmVyLCBjb25zdCBE
YXRhUGllY2UmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkT3V0cHV0U3Ry
ZWFtKiBzdHJlYW0pIHsKLSAgU3RhdHVzT3I8c3RyaW5nPiBzID0gZGF0YS5Ub1N0cmluZygpOwot
ICBpZiAocy5vaygpKSB7Ci0gICAgV2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nKGZpZWxkX251
bWJlciwgcy5WYWx1ZU9yRGllKCksIHN0cmVhbSk7Ci0gIH0KLSAgcmV0dXJuIHMuc3RhdHVzKCk7
Ci19Ci0KLS8vIFdyaXRlcyBhbiBFTlVNIGZpZWxkLCBpbmNsdWRpbmcgdGFnLCB0byB0aGUgc3Ry
ZWFtLgotaW5saW5lIFN0YXR1cyBXcml0ZUVudW0oaW50IGZpZWxkX251bWJlciwgY29uc3QgRGF0
YVBpZWNlJiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90
b2J1Zjo6RW51bSogZW51bV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWRPdXRw
dXRTdHJlYW0qIHN0cmVhbSkgewotICBTdGF0dXNPcjxpbnQ+IGUgPSBkYXRhLlRvRW51bShlbnVt
X3R5cGUpOwotICBpZiAoZS5vaygpKSB7Ci0gICAgV2lyZUZvcm1hdExpdGU6OldyaXRlRW51bShm
aWVsZF9udW1iZXIsIGUuVmFsdWVPckRpZSgpLCBzdHJlYW0pOwotICB9Ci0gIHJldHVybiBlLnN0
YXR1cygpOwotfQotCi0vLyBHaXZlbiBhIGdvb2dsZTo6cHJvdG9idWY6OlR5cGUsIHJldHVybnMg
dGhlIHNldCBvZiBhbGwgcmVxdWlyZWQgZmllbGRzLgotc3RkOjpzZXQ8Y29uc3QgZ29vZ2xlOjpw
cm90b2J1Zjo6RmllbGQqPiBHZXRSZXF1aXJlZEZpZWxkcygKLSAgICBjb25zdCBnb29nbGU6OnBy
b3RvYnVmOjpUeXBlJiB0eXBlKSB7Ci0gIHN0ZDo6c2V0PGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkKj4gcmVxdWlyZWQ7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5maWVsZHNfc2l6
ZSgpOyBpKyspIHsKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmllbGQgPSB0
eXBlLmZpZWxkcyhpKTsKLSAgICBpZiAoZmllbGQuY2FyZGluYWxpdHkoKSA9PQotICAgICAgICBn
b29nbGU6OnByb3RvYnVmOjpGaWVsZF9DYXJkaW5hbGl0eV9DQVJESU5BTElUWV9SRVFVSVJFRCkg
ewotICAgICAgcmVxdWlyZWQuaW5zZXJ0KCZmaWVsZCk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBy
ZXF1aXJlZDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLVByb3RvV3JpdGVyOjpQcm90b0VsZW1l
bnQ6OlByb3RvRWxlbWVudChjb25zdCBUeXBlSW5mbyogdHlwZWluZm8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90b1dyaXRl
ciogZW5jbG9zaW5nKQotICAgIDogQmFzZUVsZW1lbnQoTlVMTCksCi0gICAgICBvd18oZW5jbG9z
aW5nKSwKLSAgICAgIHBhcmVudF9maWVsZF8oTlVMTCksCi0gICAgICB0eXBlaW5mb18odHlwZWlu
Zm8pLAotICAgICAgdHlwZV8odHlwZSksCi0gICAgICByZXF1aXJlZF9maWVsZHNfKEdldFJlcXVp
cmVkRmllbGRzKHR5cGUpKSwKLSAgICAgIHNpemVfaW5kZXhfKC0xKSwKLSAgICAgIGFycmF5X2lu
ZGV4XygtMSkge30KLQotUHJvdG9Xcml0ZXI6OlByb3RvRWxlbWVudDo6UHJvdG9FbGVtZW50KFBy
b3RvV3JpdGVyOjpQcm90b0VsZW1lbnQqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90
b2J1Zjo6VHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzX2xpc3QpCi0gICAgOiBCYXNlRWxlbWVudChwYXJlbnQpLAotICAgICAgb3dfKHRo
aXMtPnBhcmVudCgpLT5vd18pLAotICAgICAgcGFyZW50X2ZpZWxkXyhmaWVsZCksCi0gICAgICB0
eXBlaW5mb18odGhpcy0+cGFyZW50KCktPnR5cGVpbmZvXyksCi0gICAgICB0eXBlXyh0eXBlKSwK
LSAgICAgIHNpemVfaW5kZXhfKAotICAgICAgICAgICFpc19saXN0ICYmIGZpZWxkLT5raW5kKCkg
PT0gZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX01FU1NBR0UKLSAgICAgICAgICAg
ICAgPyBvd18tPnNpemVfaW5zZXJ0Xy5zaXplKCkKLSAgICAgICAgICAgICAgOiAtMSksCi0gICAg
ICBhcnJheV9pbmRleF8oaXNfbGlzdCA/IDAgOiAtMSkgewotICBpZiAoIWlzX2xpc3QpIHsKLSAg
ICBpZiAob3dfLT5Jc1JlcGVhdGVkKCpmaWVsZCkpIHsKLSAgICAgIC8vIFVwZGF0ZSBhcnJheV9p
bmRleF8gaWYgaXQgaXMgYW4gZXhwbGljaXQgbGlzdC4KLSAgICAgIGlmICh0aGlzLT5wYXJlbnQo
KS0+YXJyYXlfaW5kZXhfID49IDApIHRoaXMtPnBhcmVudCgpLT5hcnJheV9pbmRleF8rKzsKLSAg
ICB9IGVsc2UgewotICAgICAgdGhpcy0+cGFyZW50KCktPlJlZ2lzdGVyRmllbGQoZmllbGQpOwot
ICAgIH0KLQotICAgIGlmIChmaWVsZC0+a2luZCgpID09IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
X0tpbmRfVFlQRV9NRVNTQUdFKSB7Ci0gICAgICByZXF1aXJlZF9maWVsZHNfID0gR2V0UmVxdWly
ZWRGaWVsZHModHlwZV8pOwotICAgICAgaW50IHN0YXJ0X3BvcyA9IG93Xy0+c3RyZWFtXy0+Qnl0
ZUNvdW50KCk7Ci0gICAgICAvLyBsZW5ndGggb2Ygc2VyaWFsaXplZCBtZXNzYWdlIGlzIHRoZSBm
aW5hbCBidWZmZXIgcG9zaXRpb24gbWludXMKLSAgICAgIC8vIHN0YXJ0aW5nIGJ1ZmZlciBwb3Np
dGlvbiwgcGx1cyBsZW5ndGggYWRqdXN0bWVudHMgZm9yIHNpemUgZmllbGRzCi0gICAgICAvLyBv
ZiBhbnkgbmVzdGVkIG1lc3NhZ2VzLiBXZSBzdGFydCB3aXRoIC1zdGFydF9wb3MgaGVyZSwgc28g
d2Ugb25seQotICAgICAgLy8gbmVlZCB0byBhZGQgdGhlIGZpbmFsIGJ1ZmZlciBwb3NpdGlvbiB0
byBpdCBhdCB0aGUgZW5kLgotICAgICAgU2l6ZUluZm8gaW5mbyA9IHtzdGFydF9wb3MsIC1zdGFy
dF9wb3N9OwotICAgICAgb3dfLT5zaXplX2luc2VydF8ucHVzaF9iYWNrKGluZm8pOwotICAgIH0K
LSAgfQotfQotCi1Qcm90b1dyaXRlcjo6UHJvdG9FbGVtZW50KiBQcm90b1dyaXRlcjo6UHJvdG9F
bGVtZW50Ojpwb3AoKSB7Ci0gIC8vIENhbGxzIHRoZSByZWdpc3RlcmVkIGVycm9yIGxpc3RlbmVy
IGZvciBhbnkgcmVxdWlyZWQgZmllbGQocykgbm90IHlldAotICAvLyBzZWVuLgotICBmb3IgKHNl
dDxjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCo+OjppdGVyYXRvciBpdCA9Ci0gICAgICAg
ICAgIHJlcXVpcmVkX2ZpZWxkc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSByZXF1aXJlZF9maWVs
ZHNfLmVuZCgpOyArK2l0KSB7Ci0gICAgb3dfLT5NaXNzaW5nRmllbGQoKCppdCktPm5hbWUoKSk7
Ci0gIH0KLSAgLy8gQ29tcHV0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBwcm90byBieXRlcyB1c2Vk
IGJ5IGEgbWVzc2FnZSwgYWxzbyBhZGp1c3RzCi0gIC8vIHRoZSBzaXplIG9mIGFsbCBwYXJlbnQg
bWVzc2FnZXMgYnkgdGhlIGxlbmd0aCBvZiB0aGlzIHNpemUgZmllbGQuCi0gIC8vIElmIHNpemVf
aW5kZXhfIDwgMCwgdGhpcyBpcyBub3QgYSBtZXNzYWdlLCBzbyBubyBzaXplIGZpZWxkIGlzIGFk
ZGVkLgotICBpZiAoc2l6ZV9pbmRleF8gPj0gMCkgewotICAgIC8vIEFkZCB0aGUgZmluYWwgYnVm
ZmVyIHBvc2l0aW9uIHRvIGNvbXB1dGUgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGlzCi0gICAgLy8g
c2VyaWFsaXplZCBtZXNzYWdlLiBUaGUgc3RvcmVkIHZhbHVlIChiZWZvcmUgdGhpcyBhZGRpdGlv
bikgYWxyZWFkeQotICAgIC8vIGNvbnRhaW5zIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHNpemUg
ZmllbGRzIG9mIGFsbCBuZXN0ZWQgbWVzc2FnZXMKLSAgICAvLyBtaW51cyB0aGUgaW5pdGlhbCBi
dWZmZXIgcG9zaXRpb24uCi0gICAgb3dfLT5zaXplX2luc2VydF9bc2l6ZV9pbmRleF9dLnNpemUg
Kz0gb3dfLT5zdHJlYW1fLT5CeXRlQ291bnQoKTsKLSAgICAvLyBDYWxjdWxhdGUgdGhlIGxlbmd0
aCByZXF1aXJlZCB0byBzZXJpYWxpemUgdGhlIHNpemUgZmllbGQgb2YgdGhlCi0gICAgLy8gbWVz
c2FnZSwgYW5kIHByb3BhZ2F0ZSB0aGlzIGFkZGl0aW9uYWwgc2l6ZSBpbmZvcm1hdGlvbiB1cHdh
cmQgdG8KLSAgICAvLyBhbGwgZW5jbG9zaW5nIG1lc3NhZ2VzLgotICAgIGludCBzaXplID0gb3df
LT5zaXplX2luc2VydF9bc2l6ZV9pbmRleF9dLnNpemU7Ci0gICAgaW50IGxlbmd0aCA9IENvZGVk
T3V0cHV0U3RyZWFtOjpWYXJpbnRTaXplMzIoc2l6ZSk7Ci0gICAgZm9yIChQcm90b0VsZW1lbnQq
IGUgPSBwYXJlbnQoKTsgZSAhPSBOVUxMOyBlID0gZS0+cGFyZW50KCkpIHsKLSAgICAgIC8vIE9u
bHkgbmVzdGVkIG1lc3NhZ2VzIGhhdmUgc2l6ZSBmaWVsZCwgbGlzdHMgZG8gbm90IGhhdmUgc2l6
ZSBmaWVsZC4KLSAgICAgIGlmIChlLT5zaXplX2luZGV4XyA+PSAwKSB7Ci0gICAgICAgIG93Xy0+
c2l6ZV9pbnNlcnRfW2UtPnNpemVfaW5kZXhfXS5zaXplICs9IGxlbmd0aDsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLSAgcmV0dXJuIEJhc2VFbGVtZW50Ojpwb3A8UHJvdG9FbGVtZW50PigpOwotfQot
Ci12b2lkIFByb3RvV3JpdGVyOjpQcm90b0VsZW1lbnQ6OlJlZ2lzdGVyRmllbGQoCi0gICAgY29u
c3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIGZpZWxkKSB7Ci0gIGlmICghcmVxdWlyZWRfZmll
bGRzXy5lbXB0eSgpICYmCi0gICAgICBmaWVsZC0+Y2FyZGluYWxpdHkoKSA9PQotICAgICAgICAg
IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0NhcmRpbmFsaXR5X0NBUkRJTkFMSVRZX1JFUVVJUkVE
KSB7Ci0gICAgcmVxdWlyZWRfZmllbGRzXy5lcmFzZShmaWVsZCk7Ci0gIH0KLX0KLQotc3RyaW5n
IFByb3RvV3JpdGVyOjpQcm90b0VsZW1lbnQ6OlRvU3RyaW5nKCkgY29uc3QgewotICBpZiAocGFy
ZW50KCkgPT0gTlVMTCkgcmV0dXJuICIiOwotICBzdHJpbmcgbG9jID0gcGFyZW50KCktPlRvU3Ry
aW5nKCk7Ci0gIGlmICghb3dfLT5Jc1JlcGVhdGVkKCpwYXJlbnRfZmllbGRfKSB8fAotICAgICAg
cGFyZW50KCktPnBhcmVudF9maWVsZF8gIT0gcGFyZW50X2ZpZWxkXykgewotICAgIHN0cmluZyBu
YW1lID0gcGFyZW50X2ZpZWxkXy0+bmFtZSgpOwotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAo
aSA8IG5hbWUuc2l6ZSgpICYmIChhc2NpaV9pc2FsbnVtKG5hbWVbaV0pIHx8IG5hbWVbaV0gPT0g
J18nKSkgKytpOwotICAgIGlmIChpID4gMCAmJiBpID09IG5hbWUuc2l6ZSgpKSB7ICAvLyBzYWZl
IGZpZWxkIG5hbWUKLSAgICAgIGlmIChsb2MuZW1wdHkoKSkgewotICAgICAgICBsb2MgPSBuYW1l
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgU3RyQXBwZW5kKCZsb2MsICIuIiwgbmFtZSk7Ci0g
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIFN0ckFwcGVuZCgmbG9jLCAiW1wiIiwgQ0VzY2Fw
ZShuYW1lKSwgIlwiXSIpOwotICAgIH0KLSAgfQotICBpZiAob3dfLT5Jc1JlcGVhdGVkKCpwYXJl
bnRfZmllbGRfKSAmJiBhcnJheV9pbmRleF8gPiAwKSB7Ci0gICAgU3RyQXBwZW5kKCZsb2MsICJb
IiwgYXJyYXlfaW5kZXhfIC0gMSwgIl0iKTsKLSAgfQotICByZXR1cm4gbG9jLmVtcHR5KCkgPyAi
LiIgOiBsb2M7Ci19Ci0KLWJvb2wgUHJvdG9Xcml0ZXI6OlByb3RvRWxlbWVudDo6SXNPbmVvZklu
ZGV4VGFrZW4oaW50MzIgaW5kZXgpIHsKLSAgcmV0dXJuIENvbnRhaW5zS2V5KG9uZW9mX2luZGlj
ZXNfLCBpbmRleCk7Ci19Ci0KLXZvaWQgUHJvdG9Xcml0ZXI6OlByb3RvRWxlbWVudDo6VGFrZU9u
ZW9mSW5kZXgoaW50MzIgaW5kZXgpIHsKLSAgSW5zZXJ0SWZOb3RQcmVzZW50KCZvbmVvZl9pbmRp
Y2VzXywgaW5kZXgpOwotfQotCi12b2lkIFByb3RvV3JpdGVyOjpJbnZhbGlkTmFtZShTdHJpbmdQ
aWVjZSB1bmtub3duX25hbWUsIFN0cmluZ1BpZWNlIG1lc3NhZ2UpIHsKLSAgbGlzdGVuZXJfLT5J
bnZhbGlkTmFtZShsb2NhdGlvbigpLCBUb1NuYWtlQ2FzZSh1bmtub3duX25hbWUpLCBtZXNzYWdl
KTsKLX0KLQotdm9pZCBQcm90b1dyaXRlcjo6SW52YWxpZFZhbHVlKFN0cmluZ1BpZWNlIHR5cGVf
bmFtZSwgU3RyaW5nUGllY2UgdmFsdWUpIHsKLSAgbGlzdGVuZXJfLT5JbnZhbGlkVmFsdWUobG9j
YXRpb24oKSwgdHlwZV9uYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgUHJvdG9Xcml0ZXI6Ok1pc3Np
bmdGaWVsZChTdHJpbmdQaWVjZSBtaXNzaW5nX25hbWUpIHsKLSAgbGlzdGVuZXJfLT5NaXNzaW5n
RmllbGQobG9jYXRpb24oKSwgbWlzc2luZ19uYW1lKTsKLX0KLQotUHJvdG9Xcml0ZXIqIFByb3Rv
V3JpdGVyOjpTdGFydE9iamVjdChTdHJpbmdQaWVjZSBuYW1lKSB7Ci0gIC8vIFN0YXJ0aW5nIHRo
ZSByb290IG1lc3NhZ2UuIENyZWF0ZSB0aGUgcm9vdCBQcm90b0VsZW1lbnQgYW5kIHJldHVybi4K
LSAgaWYgKGVsZW1lbnRfID09IE5VTEwpIHsKLSAgICBpZiAoIW5hbWUuZW1wdHkoKSkgewotICAg
ICAgSW52YWxpZE5hbWUobmFtZSwgIlJvb3QgZWxlbWVudCBzaG91bGQgbm90IGJlIG5hbWVkLiIp
OwotICAgIH0KLSAgICBlbGVtZW50Xy5yZXNldChuZXcgUHJvdG9FbGVtZW50KHR5cGVpbmZvXywg
bWFzdGVyX3R5cGVfLCB0aGlzKSk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBjb25zdCBn
b29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQgPSBOVUxMOwotICBmaWVsZCA9IEJlZ2luTmFt
ZWQobmFtZSwgZmFsc2UpOwotICBpZiAoZmllbGQgPT0gTlVMTCkgcmV0dXJuIHRoaXM7Ci0KLSAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgZmllbGQgaXMgYSBvbmVvZiBhbmQgdGhhdCBubyBvbmVv
ZiBpbiB0aGF0IGdyb3VwIGhhcwotICAvLyBhbHJlYWR5IGJlZW4gc2V0LgotICBpZiAoIVZhbGlk
T25lb2YoKmZpZWxkLCBuYW1lKSkgewotICAgICsraW52YWxpZF9kZXB0aF87Ci0gICAgcmV0dXJu
IHRoaXM7Ci0gIH0KLQotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKiB0eXBlID0gTG9v
a3VwVHlwZShmaWVsZCk7Ci0gIGlmICh0eXBlID09IE5VTEwpIHsKLSAgICArK2ludmFsaWRfZGVw
dGhfOwotICAgIEludmFsaWROYW1lKG5hbWUsCi0gICAgICAgICAgICAgICAgU3RyQ2F0KCJNaXNz
aW5nIGRlc2NyaXB0b3IgZm9yIGZpZWxkOiAiLCBmaWVsZC0+dHlwZV91cmwoKSkpOwotICAgIHJl
dHVybiB0aGlzOwotICB9Ci0KLSAgcmV0dXJuIFN0YXJ0T2JqZWN0RmllbGQoKmZpZWxkLCAqdHlw
ZSk7Ci19Ci0KLVByb3RvV3JpdGVyKiBQcm90b1dyaXRlcjo6RW5kT2JqZWN0KCkgewotICBpZiAo
aW52YWxpZF9kZXB0aF8gPiAwKSB7Ci0gICAgLS1pbnZhbGlkX2RlcHRoXzsKLSAgICByZXR1cm4g
dGhpczsKLSAgfQotCi0gIGlmIChlbGVtZW50XyAhPSBOVUxMKSB7Ci0gICAgZWxlbWVudF8ucmVz
ZXQoZWxlbWVudF8tPnBvcCgpKTsKLSAgfQotCi0KLSAgLy8gSWYgZW5kaW5nIHRoZSByb290IGVs
ZW1lbnQsCi0gIC8vIHRoZW4gc2VyaWFsaXplIHRoZSBmdWxsIG1lc3NhZ2Ugd2l0aCBjYWxjdWxh
dGVkIHNpemVzLgotICBpZiAoZWxlbWVudF8gPT0gTlVMTCkgewotICAgIFdyaXRlUm9vdE1lc3Nh
Z2UoKTsKLSAgfQotICByZXR1cm4gdGhpczsKLX0KLQotUHJvdG9Xcml0ZXIqIFByb3RvV3JpdGVy
OjpTdGFydExpc3QoU3RyaW5nUGllY2UgbmFtZSkgewotICBjb25zdCBnb29nbGU6OnByb3RvYnVm
OjpGaWVsZCogZmllbGQgPSBCZWdpbk5hbWVkKG5hbWUsIHRydWUpOwotICBpZiAoZmllbGQgPT0g
TlVMTCkgcmV0dXJuIHRoaXM7Ci0KLSAgaWYgKCFWYWxpZE9uZW9mKCpmaWVsZCwgbmFtZSkpIHsK
LSAgICArK2ludmFsaWRfZGVwdGhfOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgY29uc3Qg
Z29vZ2xlOjpwcm90b2J1Zjo6VHlwZSogdHlwZSA9IExvb2t1cFR5cGUoZmllbGQpOwotICBpZiAo
dHlwZSA9PSBOVUxMKSB7Ci0gICAgKytpbnZhbGlkX2RlcHRoXzsKLSAgICBJbnZhbGlkTmFtZShu
YW1lLAotICAgICAgICAgICAgICAgIFN0ckNhdCgiTWlzc2luZyBkZXNjcmlwdG9yIGZvciBmaWVs
ZDogIiwgZmllbGQtPnR5cGVfdXJsKCkpKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIHJl
dHVybiBTdGFydExpc3RGaWVsZCgqZmllbGQsICp0eXBlKTsKLX0KLQotUHJvdG9Xcml0ZXIqIFBy
b3RvV3JpdGVyOjpFbmRMaXN0KCkgewotICBpZiAoaW52YWxpZF9kZXB0aF8gPiAwKSB7Ci0gICAg
LS1pbnZhbGlkX2RlcHRoXzsKLSAgfSBlbHNlIGlmIChlbGVtZW50XyAhPSBOVUxMKSB7Ci0gICAg
ZWxlbWVudF8ucmVzZXQoZWxlbWVudF8tPnBvcCgpKTsKLSAgfQotICByZXR1cm4gdGhpczsKLX0K
LQotUHJvdG9Xcml0ZXIqIFByb3RvV3JpdGVyOjpSZW5kZXJEYXRhUGllY2UoU3RyaW5nUGllY2Ug
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERh
dGFQaWVjZSYgZGF0YSkgewotICBTdGF0dXMgc3RhdHVzOwotICBpZiAoaW52YWxpZF9kZXB0aF8g
PiAwKSByZXR1cm4gdGhpczsKLQotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmll
bGQgPSBMb29rdXAobmFtZSk7Ci0gIGlmIChmaWVsZCA9PSBOVUxMKSByZXR1cm4gdGhpczsKLQot
ICBpZiAoIVZhbGlkT25lb2YoKmZpZWxkLCBuYW1lKSkgcmV0dXJuIHRoaXM7Ci0KLSAgY29uc3Qg
Z29vZ2xlOjpwcm90b2J1Zjo6VHlwZSogdHlwZSA9IExvb2t1cFR5cGUoZmllbGQpOwotICBpZiAo
dHlwZSA9PSBOVUxMKSB7Ci0gICAgSW52YWxpZE5hbWUobmFtZSwKLSAgICAgICAgICAgICAgICBT
dHJDYXQoIk1pc3NpbmcgZGVzY3JpcHRvciBmb3IgZmllbGQ6ICIsIGZpZWxkLT50eXBlX3VybCgp
KSk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICByZXR1cm4gUmVuZGVyUHJpbWl0aXZlRmll
bGQoKmZpZWxkLCAqdHlwZSwgZGF0YSk7Ci19Ci0KLWJvb2wgUHJvdG9Xcml0ZXI6OlZhbGlkT25l
b2YoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQmIGZpZWxkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJpbmdQaWVjZSB1bm5vcm1hbGl6ZWRfbmFtZSkgewotICBpZiAoZWxl
bWVudF8gPT0gTlVMTCkgcmV0dXJuIHRydWU7Ci0KLSAgaWYgKGZpZWxkLm9uZW9mX2luZGV4KCkg
PiAwKSB7Ci0gICAgaWYgKGVsZW1lbnRfLT5Jc09uZW9mSW5kZXhUYWtlbihmaWVsZC5vbmVvZl9p
bmRleCgpKSkgewotICAgICAgSW52YWxpZFZhbHVlKAotICAgICAgICAgICJvbmVvZiIsCi0gICAg
ICAgICAgU3RyQ2F0KCJvbmVvZiBmaWVsZCAnIiwKLSAgICAgICAgICAgICAgICAgZWxlbWVudF8t
PnR5cGUoKS5vbmVvZnMoZmllbGQub25lb2ZfaW5kZXgoKSAtIDEpLAotICAgICAgICAgICAgICAg
ICAiJyBpcyBhbHJlYWR5IHNldC4gQ2Fubm90IHNldCAnIiwgdW5ub3JtYWxpemVkX25hbWUsICIn
IikpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbGVtZW50Xy0+VGFrZU9uZW9m
SW5kZXgoZmllbGQub25lb2ZfaW5kZXgoKSk7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgUHJvdG9Xcml0ZXI6OklzUmVwZWF0ZWQoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQm
IGZpZWxkKSB7Ci0gIHJldHVybiBmaWVsZC5jYXJkaW5hbGl0eSgpID09Ci0gICAgICAgICBnb29n
bGU6OnByb3RvYnVmOjpGaWVsZF9DYXJkaW5hbGl0eV9DQVJESU5BTElUWV9SRVBFQVRFRDsKLX0K
LQotUHJvdG9Xcml0ZXIqIFByb3RvV3JpdGVyOjpTdGFydE9iamVjdEZpZWxkKGNvbnN0IGdvb2ds
ZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlKSB7Ci0gICAg
V3JpdGVUYWcoZmllbGQpOwotICBlbGVtZW50Xy5yZXNldChuZXcgUHJvdG9FbGVtZW50KGVsZW1l
bnRfLnJlbGVhc2UoKSwgJmZpZWxkLCB0eXBlLCBmYWxzZSkpOwotICByZXR1cm4gdGhpczsKLX0K
LQotUHJvdG9Xcml0ZXIqIFByb3RvV3JpdGVyOjpTdGFydExpc3RGaWVsZChjb25zdCBnb29nbGU6
OnByb3RvYnVmOjpGaWVsZCYgZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUpIHsKLSAgZWxlbWVu
dF8ucmVzZXQobmV3IFByb3RvRWxlbWVudChlbGVtZW50Xy5yZWxlYXNlKCksICZmaWVsZCwgdHlw
ZSwgdHJ1ZSkpOwotICByZXR1cm4gdGhpczsKLX0KLQotUHJvdG9Xcml0ZXIqIFByb3RvV3JpdGVy
OjpSZW5kZXJQcmltaXRpdmVGaWVsZCgKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZCYgZmllbGQsIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0gICAgY29uc3Qg
RGF0YVBpZWNlJiBkYXRhKSB7Ci0gIFN0YXR1cyBzdGF0dXM7Ci0KLSAgLy8gUHVzaGluZyBhIFBy
b3RvRWxlbWVudCBhbmQgdGhlbiBwb3AgaXQgb2ZmIGF0IHRoZSBlbmQgZm9yIDIgcHVycG9zZXM6
Ci0gIC8vIGVycm9yIGxvY2F0aW9uIHJlcG9ydGluZyBhbmQgcmVxdWlyZWQgZmllbGQgYWNjb3Vu
dGluZy4KLSAgZWxlbWVudF8ucmVzZXQobmV3IFByb3RvRWxlbWVudChlbGVtZW50Xy5yZWxlYXNl
KCksICZmaWVsZCwgdHlwZSwgZmFsc2UpKTsKLQotICBpZiAoZmllbGQua2luZCgpID09IGdvb2ds
ZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9VTktOT1dOIHx8Ci0gICAgICBmaWVsZC5raW5k
KCkgPT0gZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX01FU1NBR0UpIHsKLSAgICBJ
bnZhbGlkVmFsdWUoZmllbGQudHlwZV91cmwoKS5lbXB0eSgpCi0gICAgICAgICAgICAgICAgICAg
ICA/IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfTmFtZShmaWVsZC5raW5kKCkpCi0gICAg
ICAgICAgICAgICAgICAgICA6IGZpZWxkLnR5cGVfdXJsKCksCi0gICAgICAgICAgICAgICAgIGRh
dGEuVmFsdWVBc1N0cmluZ09yRGVmYXVsdCgiIikpOwotICAgIGVsZW1lbnRfLnJlc2V0KGVsZW1l
bnQoKS0+cG9wKCkpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgc3dpdGNoIChmaWVsZC5r
aW5kKCkpIHsKLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9JTlQz
MjogewotICAgICAgc3RhdHVzID0gV3JpdGVJbnQzMihmaWVsZC5udW1iZXIoKSwgZGF0YSwgc3Ry
ZWFtXy5nZXQoKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZF9LaW5kX1RZUEVfU0ZJWEVEMzI6IHsKLSAgICAgIHN0YXR1cyA9IFdyaXRlU0Zp
eGVkMzIoZmllbGQubnVtYmVyKCksIGRhdGEsIHN0cmVhbV8uZ2V0KCkpOwotICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX1NJTlQz
MjogewotICAgICAgc3RhdHVzID0gV3JpdGVTSW50MzIoZmllbGQubnVtYmVyKCksIGRhdGEsIHN0
cmVhbV8uZ2V0KCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90
b2J1Zjo6RmllbGRfS2luZF9UWVBFX0ZJWEVEMzI6IHsKLSAgICAgIHN0YXR1cyA9IFdyaXRlRml4
ZWQzMihmaWVsZC5udW1iZXIoKSwgZGF0YSwgc3RyZWFtXy5nZXQoKSk7Ci0gICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfVUlOVDMy
OiB7Ci0gICAgICBzdGF0dXMgPSBXcml0ZVVJbnQzMihmaWVsZC5udW1iZXIoKSwgZGF0YSwgc3Ry
ZWFtXy5nZXQoKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3Rv
YnVmOjpGaWVsZF9LaW5kX1RZUEVfSU5UNjQ6IHsKLSAgICAgIHN0YXR1cyA9IFdyaXRlSW50NjQo
ZmllbGQubnVtYmVyKCksIGRhdGEsIHN0cmVhbV8uZ2V0KCkpOwotICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX1NGSVhFRDY0OiB7
Ci0gICAgICBzdGF0dXMgPSBXcml0ZVNGaXhlZDY0KGZpZWxkLm51bWJlcigpLCBkYXRhLCBzdHJl
YW1fLmdldCgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9i
dWY6OkZpZWxkX0tpbmRfVFlQRV9TSU5UNjQ6IHsKLSAgICAgIHN0YXR1cyA9IFdyaXRlU0ludDY0
KGZpZWxkLm51bWJlcigpLCBkYXRhLCBzdHJlYW1fLmdldCgpKTsKLSAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9GSVhFRDY0OiB7
Ci0gICAgICBzdGF0dXMgPSBXcml0ZUZpeGVkNjQoZmllbGQubnVtYmVyKCksIGRhdGEsIHN0cmVh
bV8uZ2V0KCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1
Zjo6RmllbGRfS2luZF9UWVBFX1VJTlQ2NDogewotICAgICAgc3RhdHVzID0gV3JpdGVVSW50NjQo
ZmllbGQubnVtYmVyKCksIGRhdGEsIHN0cmVhbV8uZ2V0KCkpOwotICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX0RPVUJMRTogewot
ICAgICAgc3RhdHVzID0gV3JpdGVEb3VibGUoZmllbGQubnVtYmVyKCksIGRhdGEsIHN0cmVhbV8u
Z2V0KCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6
RmllbGRfS2luZF9UWVBFX0ZMT0FUOiB7Ci0gICAgICBzdGF0dXMgPSBXcml0ZUZsb2F0KGZpZWxk
Lm51bWJlcigpLCBkYXRhLCBzdHJlYW1fLmdldCgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9CT09MOiB7Ci0gICAgICBz
dGF0dXMgPSBXcml0ZUJvb2woZmllbGQubnVtYmVyKCksIGRhdGEsIHN0cmVhbV8uZ2V0KCkpOwot
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2lu
ZF9UWVBFX0JZVEVTOiB7Ci0gICAgICBzdGF0dXMgPSBXcml0ZUJ5dGVzKGZpZWxkLm51bWJlcigp
LCBkYXRhLCBzdHJlYW1fLmdldCgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9TVFJJTkc6IHsKLSAgICAgIHN0YXR1cyA9
IFdyaXRlU3RyaW5nKGZpZWxkLm51bWJlcigpLCBkYXRhLCBzdHJlYW1fLmdldCgpKTsKLSAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQ
RV9FTlVNOiB7Ci0gICAgICBzdGF0dXMgPSBXcml0ZUVudW0oZmllbGQubnVtYmVyKCksIGRhdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWluZm9fLT5HZXRFbnVtQnlUeXBlVXJsKGZp
ZWxkLnR5cGVfdXJsKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV8uZ2V0KCkp
OwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6ICAvLyBUWVBFX0dST1VQIG9yIFRZ
UEVfTUVTU0FHRQotICAgICAgc3RhdHVzID0gU3RhdHVzKElOVkFMSURfQVJHVU1FTlQsIGRhdGEu
VG9TdHJpbmcoKS5WYWx1ZU9yRGllKCkpOwotICB9Ci0KLSAgaWYgKCFzdGF0dXMub2soKSkgewot
ICAgIEludmFsaWRWYWx1ZShnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX05hbWUoZmllbGQu
a2luZCgpKSwKLSAgICAgICAgICAgICAgICAgc3RhdHVzLmVycm9yX21lc3NhZ2UoKSk7Ci0gIH0K
LQotICBlbGVtZW50Xy5yZXNldChlbGVtZW50KCktPnBvcCgpKTsKLSAgcmV0dXJuIHRoaXM7Ci19
Ci0KLWNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkKiBQcm90b1dyaXRlcjo6QmVnaW5OYW1l
ZChTdHJpbmdQaWVjZSBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfbGlzdCkgewotICBpZiAoaW52YWxpZF9kZXB0aF8g
PiAwKSB7Ci0gICAgKytpbnZhbGlkX2RlcHRoXzsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBj
b25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQgPSBMb29rdXAobmFtZSk7Ci0gIGlm
IChmaWVsZCA9PSBOVUxMKSB7Ci0gICAgKytpbnZhbGlkX2RlcHRoXzsKLSAgICAvLyBJbnZhbGlk
TmFtZSgpIGFscmVhZHkgY2FsbGVkIGluIExvb2t1cCgpLgotICAgIHJldHVybiBOVUxMOwotICB9
Ci0gIGlmIChpc19saXN0ICYmICFJc1JlcGVhdGVkKCpmaWVsZCkpIHsKLSAgICArK2ludmFsaWRf
ZGVwdGhfOwotICAgIEludmFsaWROYW1lKG5hbWUsICJQcm90byBmaWVsZCBpcyBub3QgcmVwZWF0
aW5nLCBjYW5ub3Qgc3RhcnQgbGlzdC4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICByZXR1
cm4gZmllbGQ7Ci19Ci0KLWNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkKiBQcm90b1dyaXRl
cjo6TG9va3VwKAotICAgIFN0cmluZ1BpZWNlIHVubm9ybWFsaXplZF9uYW1lKSB7Ci0gIFByb3Rv
RWxlbWVudCogZSA9IGVsZW1lbnQoKTsKLSAgaWYgKGUgPT0gTlVMTCkgewotICAgIEludmFsaWRO
YW1lKHVubm9ybWFsaXplZF9uYW1lLCAiUm9vdCBlbGVtZW50IG11c3QgYmUgYSBtZXNzYWdlLiIp
OwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGlmICh1bm5vcm1hbGl6ZWRfbmFtZS5lbXB0eSgp
KSB7Ci0gICAgLy8gT2JqZWN0cyBpbiByZXBlYXRlZCBmaWVsZCBpbmhlcml0IHRoZSBzYW1lIGZp
ZWxkIGRlc2NyaXB0b3IuCi0gICAgaWYgKGUtPnBhcmVudF9maWVsZCgpID09IE5VTEwpIHsKLSAg
ICAgIEludmFsaWROYW1lKHVubm9ybWFsaXplZF9uYW1lLCAiUHJvdG8gZmllbGRzIG11c3QgaGF2
ZSBhIG5hbWUuIik7Ci0gICAgfSBlbHNlIGlmICghSXNSZXBlYXRlZCgqZS0+cGFyZW50X2ZpZWxk
KCkpKSB7Ci0gICAgICBJbnZhbGlkTmFtZSh1bm5vcm1hbGl6ZWRfbmFtZSwgIlByb3RvIGZpZWxk
cyBtdXN0IGhhdmUgYSBuYW1lLiIpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJl
dHVybiBlLT5wYXJlbnRfZmllbGQoKTsKLSAgfQotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpG
aWVsZCogZmllbGQgPQotICAgICAgdHlwZWluZm9fLT5GaW5kRmllbGQoJmUtPnR5cGUoKSwgdW5u
b3JtYWxpemVkX25hbWUpOwotICBpZiAoZmllbGQgPT0gTlVMTCkgSW52YWxpZE5hbWUodW5ub3Jt
YWxpemVkX25hbWUsICJDYW5ub3QgZmluZCBmaWVsZC4iKTsKLSAgcmV0dXJuIGZpZWxkOwotfQot
Ci1jb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKiBQcm90b1dyaXRlcjo6TG9va3VwVHlwZSgK
LSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQpIHsKLSAgcmV0dXJuICgo
ZmllbGQtPmtpbmQoKSA9PSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfTUVTU0FH
RSB8fAotICAgICAgICAgICBmaWVsZC0+a2luZCgpID09IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
X0tpbmRfVFlQRV9HUk9VUCkKLSAgICAgICAgICAgICAgPyB0eXBlaW5mb18tPkdldFR5cGVCeVR5
cGVVcmwoZmllbGQtPnR5cGVfdXJsKCkpCi0gICAgICAgICAgICAgIDogJmVsZW1lbnRfLT50eXBl
KCkpOwotfQotCi12b2lkIFByb3RvV3JpdGVyOjpXcml0ZVJvb3RNZXNzYWdlKCkgewotICBHT09H
TEVfRENIRUNLKCFkb25lXyk7Ci0gIGludCBjdXJyX3BvcyA9IDA7Ci0gIC8vIENhbGxzIHRoZSBk
ZXN0cnVjdG9yIG9mIENvZGVkT3V0cHV0U3RyZWFtIHRvIHJlbW92ZSBhbnkgdW5pbml0aWFsaXpl
ZAotICAvLyBtZW1vcnkgZnJvbSB0aGUgQ29yZCBiZWZvcmUgd2UgcmVhZCBpdC4KLSAgc3RyZWFt
Xy5yZXNldChOVUxMKTsKLSAgY29uc3Qgdm9pZCogZGF0YTsKLSAgaW50IGxlbmd0aDsKLSAgZ29v
Z2xlOjpwcm90b2J1Zjo6aW86OkFycmF5SW5wdXRTdHJlYW0gaW5wdXRfc3RyZWFtKGJ1ZmZlcl8u
ZGF0YSgpLCBidWZmZXJfLnNpemUoKSk7Ci0gIHdoaWxlIChpbnB1dF9zdHJlYW0uTmV4dCgmZGF0
YSwgJmxlbmd0aCkpIHsKLSAgICBpZiAobGVuZ3RoID09IDApIGNvbnRpbnVlOwotICAgIGludCBu
dW1fYnl0ZXMgPSBsZW5ndGg7Ci0gICAgLy8gV3JpdGUgdXAgdG8gd2hlcmUgd2UgbmVlZCB0byBp
bnNlcnQgdGhlIHNpemUgZmllbGQuCi0gICAgLy8gVGhlIG51bWJlciBvZiBieXRlcyB3ZSBtYXkg
d3JpdGUgaXMgdGhlIHNtYWxsZXIgb2Y6Ci0gICAgLy8gICAtIHRoZSBjdXJyZW50IGZyYWdtZW50
IHNpemUKLSAgICAvLyAgIC0gdGhlIGRpc3RhbmNlIHRvIHRoZSBuZXh0IHBvc2l0aW9uIHdoZXJl
IGEgc2l6ZSBmaWVsZCBuZWVkcyB0byBiZQotICAgIC8vICAgICBpbnNlcnRlZC4KLSAgICBpZiAo
IXNpemVfaW5zZXJ0Xy5lbXB0eSgpICYmCi0gICAgICAgIHNpemVfaW5zZXJ0Xy5mcm9udCgpLnBv
cyAtIGN1cnJfcG9zIDwgbnVtX2J5dGVzKSB7Ci0gICAgICBudW1fYnl0ZXMgPSBzaXplX2luc2Vy
dF8uZnJvbnQoKS5wb3MgLSBjdXJyX3BvczsKLSAgICB9Ci0gICAgb3V0cHV0Xy0+QXBwZW5kKHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgbnVtX2J5dGVzKTsKLSAgICBpZiAobnVtX2J5
dGVzIDwgbGVuZ3RoKSB7Ci0gICAgICBpbnB1dF9zdHJlYW0uQmFja1VwKGxlbmd0aCAtIG51bV9i
eXRlcyk7Ci0gICAgfQotICAgIGN1cnJfcG9zICs9IG51bV9ieXRlczsKLSAgICAvLyBJbnNlcnQg
dGhlIHNpemUgZmllbGQuCi0gICAgLy8gICBzaXplX2luc2VydF8uZnJvbnQoKTogICAgICB0aGUg
bmV4dCA8aW5kZXgsIHNpemU+IHBhaXIgdG8gYmUgd3JpdHRlbi4KLSAgICAvLyAgIHNpemVfaW5z
ZXJ0Xy5mcm9udCgpLnBvczogIHBvc2l0aW9uIG9mIHRoZSBzaXplIGZpZWxkLgotICAgIC8vICAg
c2l6ZV9pbnNlcnRfLmZyb250KCkuc2l6ZTogdGhlIHNpemUgKGludGVnZXIpIHRvIGJlIGluc2Vy
dGVkLgotICAgIGlmICghc2l6ZV9pbnNlcnRfLmVtcHR5KCkgJiYgY3Vycl9wb3MgPT0gc2l6ZV9p
bnNlcnRfLmZyb250KCkucG9zKSB7Ci0gICAgICAvLyBWYXJpbnQzMiBvY2N1cGllcyBhdCBtb3N0
IDEwIGJ5dGVzLgotICAgICAgdWludDggaW5zZXJ0X2J1ZmZlclsxMF07Ci0gICAgICB1aW50OCog
aW5zZXJ0X2J1ZmZlcl9wb3MgPSBDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVWYXJpbnQzMlRvQXJy
YXkoCi0gICAgICAgICAgc2l6ZV9pbnNlcnRfLmZyb250KCkuc2l6ZSwgaW5zZXJ0X2J1ZmZlcik7
Ci0gICAgICBvdXRwdXRfLT5BcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5z
ZXJ0X2J1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0X2J1ZmZlcl9wb3MgLSBp
bnNlcnRfYnVmZmVyKTsKLSAgICAgIHNpemVfaW5zZXJ0Xy5wb3BfZnJvbnQoKTsKLSAgICB9Ci0g
IH0KLSAgb3V0cHV0Xy0+Rmx1c2goKTsKLSAgc3RyZWFtXy5yZXNldChuZXcgQ29kZWRPdXRwdXRT
dHJlYW0oJmFkYXB0ZXJfKSk7Ci0gIGRvbmVfID0gdHJ1ZTsKLX0KLQotdm9pZCBQcm90b1dyaXRl
cjo6V3JpdGVUYWcoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQmIGZpZWxkKSB7Ci0gIFdp
cmVGb3JtYXRMaXRlOjpXaXJlVHlwZSB3aXJlX3R5cGUgPSBXaXJlRm9ybWF0TGl0ZTo6V2lyZVR5
cGVGb3JGaWVsZFR5cGUoCi0gICAgICBzdGF0aWNfY2FzdDxXaXJlRm9ybWF0TGl0ZTo6RmllbGRU
eXBlPihmaWVsZC5raW5kKCkpKTsKLSAgc3RyZWFtXy0+V3JpdGVUYWcoV2lyZUZvcm1hdExpdGU6
Ok1ha2VUYWcoZmllbGQubnVtYmVyKCksIHdpcmVfdHlwZSkpOwotfQotCi0KLX0gIC8vIG5hbWVz
cGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJv
dG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi91dGlsL2ludGVybmFsL3Byb3RvX3dyaXRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvcHJvdG9fd3JpdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDk1NzU2NWU3NDVmNTc1NDEwYjQxY2ZmOWRkOWRjNWQ3ZmExODM3MDMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
aW50ZXJuYWwvcHJvdG9fd3JpdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RP
QlVGX1VUSUxfQ09OVkVSVEVSX1BST1RPX1dSSVRFUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RP
QlVGX1VUSUxfQ09OVkVSVEVSX1BST1RPX1dSSVRFUl9IX18KLQotI2luY2x1ZGUgPGRlcXVlPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9oYXNoLmg+Ci0jaW5jbHVkZSA8c3RyaW5n
PgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5h
bC90eXBlX2luZm8uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9k
YXRhcGllY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9lcnJv
cl9saXN0ZW5lci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3N0
cnVjdHVyZWRfb2JqZWN0d3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwv
dHlwZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9ieXRlc3Ry
ZWFtLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSBpbyB7Ci1jbGFzcyBDb2RlZE91dHB1dFN0cmVhbTsKLX0gIC8vIG5hbWVzcGFjZSBpbwot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLWNsYXNz
IFR5cGU7Ci1jbGFzcyBGaWVsZDsKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi0KLW5hbWVz
cGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsK
LQotY2xhc3MgT2JqZWN0TG9jYXRpb25UcmFja2VyOwotCi0vLyBBbiBPYmplY3RXcml0ZXIgdGhh
dCBjYW4gd3JpdGUgcHJvdG9idWYgYnl0ZXMgZGlyZWN0bHkgZnJvbSB3cml0ZXIgZXZlbnRzLgot
Ly8gVGhpcyBjbGFzcyBkb2VzIG5vdCBzdXBwb3J0IHNwZWNpYWwgdHlwZXMgbGlrZSBTdHJ1Y3Qg
b3IgTWFwLiBIb3dldmVyLCBzaW5jZQotLy8gdGhpcyBjbGFzcyBzdXBwb3J0cyByYXcgcHJvdG9i
dWYsIGl0IGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IKLS8vIHNwZWNpYWwgdHlw
ZXMgYnkgaW5oZXJpdGluZyBmcm9tIGl0IG9yIGJ5IHdyYXBwaW5nIGl0LgotLy8KLS8vIEl0IGFs
c28gc3VwcG9ydHMgc3RyZWFtaW5nLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFByb3RvV3Jp
dGVyIDogcHVibGljIFN0cnVjdHVyZWRPYmplY3RXcml0ZXIgewotIHB1YmxpYzoKLS8vIENvbnN0
cnVjdG9yLiBEb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiBhbnkgcGFyYW1ldGVyIHBhc3NlZCBp
bi4KLSAgUHJvdG9Xcml0ZXIoVHlwZVJlc29sdmVyKiB0eXBlX3Jlc29sdmVyLCBjb25zdCBnb29n
bGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAgICAgICAgICAgICBzdHJpbmdzOjpCeXRlU2lu
ayogb3V0cHV0LCBFcnJvckxpc3RlbmVyKiBsaXN0ZW5lcik7Ci0gIHZpcnR1YWwgflByb3RvV3Jp
dGVyKCk7Ci0KLSAgLy8gT2JqZWN0V3JpdGVyIG1ldGhvZHMuCi0gIHZpcnR1YWwgUHJvdG9Xcml0
ZXIqIFN0YXJ0T2JqZWN0KFN0cmluZ1BpZWNlIG5hbWUpOwotICB2aXJ0dWFsIFByb3RvV3JpdGVy
KiBFbmRPYmplY3QoKTsKLSAgdmlydHVhbCBQcm90b1dyaXRlciogU3RhcnRMaXN0KFN0cmluZ1Bp
ZWNlIG5hbWUpOwotICB2aXJ0dWFsIFByb3RvV3JpdGVyKiBFbmRMaXN0KCk7Ci0gIHZpcnR1YWwg
UHJvdG9Xcml0ZXIqIFJlbmRlckJvb2woU3RyaW5nUGllY2UgbmFtZSwgYm9vbCB2YWx1ZSkgewot
ICAgIHJldHVybiBSZW5kZXJEYXRhUGllY2UobmFtZSwgRGF0YVBpZWNlKHZhbHVlKSk7Ci0gIH0K
LSAgdmlydHVhbCBQcm90b1dyaXRlciogUmVuZGVySW50MzIoU3RyaW5nUGllY2UgbmFtZSwgaW50
MzIgdmFsdWUpIHsKLSAgICByZXR1cm4gUmVuZGVyRGF0YVBpZWNlKG5hbWUsIERhdGFQaWVjZSh2
YWx1ZSkpOwotICB9Ci0gIHZpcnR1YWwgUHJvdG9Xcml0ZXIqIFJlbmRlclVpbnQzMihTdHJpbmdQ
aWVjZSBuYW1lLCB1aW50MzIgdmFsdWUpIHsKLSAgICByZXR1cm4gUmVuZGVyRGF0YVBpZWNlKG5h
bWUsIERhdGFQaWVjZSh2YWx1ZSkpOwotICB9Ci0gIHZpcnR1YWwgUHJvdG9Xcml0ZXIqIFJlbmRl
ckludDY0KFN0cmluZ1BpZWNlIG5hbWUsIGludDY0IHZhbHVlKSB7Ci0gICAgcmV0dXJuIFJlbmRl
ckRhdGFQaWVjZShuYW1lLCBEYXRhUGllY2UodmFsdWUpKTsKLSAgfQotICB2aXJ0dWFsIFByb3Rv
V3JpdGVyKiBSZW5kZXJVaW50NjQoU3RyaW5nUGllY2UgbmFtZSwgdWludDY0IHZhbHVlKSB7Ci0g
ICAgcmV0dXJuIFJlbmRlckRhdGFQaWVjZShuYW1lLCBEYXRhUGllY2UodmFsdWUpKTsKLSAgfQot
ICB2aXJ0dWFsIFByb3RvV3JpdGVyKiBSZW5kZXJEb3VibGUoU3RyaW5nUGllY2UgbmFtZSwgZG91
YmxlIHZhbHVlKSB7Ci0gICAgcmV0dXJuIFJlbmRlckRhdGFQaWVjZShuYW1lLCBEYXRhUGllY2Uo
dmFsdWUpKTsKLSAgfQotICB2aXJ0dWFsIFByb3RvV3JpdGVyKiBSZW5kZXJGbG9hdChTdHJpbmdQ
aWVjZSBuYW1lLCBmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiBSZW5kZXJEYXRhUGllY2UobmFt
ZSwgRGF0YVBpZWNlKHZhbHVlKSk7Ci0gIH0KLSAgdmlydHVhbCBQcm90b1dyaXRlciogUmVuZGVy
U3RyaW5nKFN0cmluZ1BpZWNlIG5hbWUsIFN0cmluZ1BpZWNlIHZhbHVlKSB7Ci0gICAgcmV0dXJu
IFJlbmRlckRhdGFQaWVjZShuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVBp
ZWNlKHZhbHVlLCB1c2Vfc3RyaWN0X2Jhc2U2NF9kZWNvZGluZygpKSk7Ci0gIH0KLSAgdmlydHVh
bCBQcm90b1dyaXRlciogUmVuZGVyQnl0ZXMoU3RyaW5nUGllY2UgbmFtZSwgU3RyaW5nUGllY2Ug
dmFsdWUpIHsKLSAgICByZXR1cm4gUmVuZGVyRGF0YVBpZWNlKAotICAgICAgICBuYW1lLCBEYXRh
UGllY2UodmFsdWUsIGZhbHNlLCB1c2Vfc3RyaWN0X2Jhc2U2NF9kZWNvZGluZygpKSk7Ci0gIH0K
LSAgdmlydHVhbCBQcm90b1dyaXRlciogUmVuZGVyTnVsbChTdHJpbmdQaWVjZSBuYW1lKSB7Ci0g
ICAgcmV0dXJuIFJlbmRlckRhdGFQaWVjZShuYW1lLCBEYXRhUGllY2U6Ok51bGxEYXRhKCkpOwot
ICB9Ci0KLSAgLy8gUmVuZGVycyBhIERhdGFQaWVjZSAndmFsdWUnIGludG8gYSBmaWVsZCB3aG9z
ZSB3aXJlIHR5cGUgaXMgZGV0ZXJtaW5lZAotICAvLyBmcm9tIHRoZSBnaXZlbiBmaWVsZCAnbmFt
ZScuCi0gIHZpcnR1YWwgUHJvdG9Xcml0ZXIqIFJlbmRlckRhdGFQaWVjZShTdHJpbmdQaWVjZSBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGF0YVBp
ZWNlJiB2YWx1ZSk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgbG9jYXRpb24gdHJhY2tlciB0byB1c2Ug
Zm9yIHRyYWNraW5nIGxvY2F0aW9ucyBmb3IgZXJyb3JzLgotICBjb25zdCBMb2NhdGlvblRyYWNr
ZXJJbnRlcmZhY2UmIGxvY2F0aW9uKCkgewotICAgIHJldHVybiBlbGVtZW50XyAhPSBOVUxMID8g
KmVsZW1lbnRfIDogKnRyYWNrZXJfOwotICB9Ci0KLSAgLy8gV2hlbiB0cnVlLCB3ZSBmaW5pc2hl
ZCB3cml0aW5nIHRvIG91dHB1dCBhIGNvbXBsZXRlIG1lc3NhZ2UuCi0gIGJvb2wgZG9uZSgpIHsg
cmV0dXJuIGRvbmVfOyB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgcHJvdG8gc3RyZWFtIG9iamVjdC4K
LSAgZ29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBzdHJlYW0oKSB7IHJl
dHVybiBzdHJlYW1fLmdldCgpOyB9Ci0KLSAgLy8gR2V0dGVycyBhbmQgbXV0YXRvcnMgb2YgaW52
YWxpZF9kZXB0aF8uCi0gIHZvaWQgSW5jcmVtZW50SW52YWxpZERlcHRoKCkgeyArK2ludmFsaWRf
ZGVwdGhfOyB9Ci0gIHZvaWQgRGVjcmVtZW50SW52YWxpZERlcHRoKCkgeyAtLWludmFsaWRfZGVw
dGhfOyB9Ci0gIGludCBpbnZhbGlkX2RlcHRoKCkgeyByZXR1cm4gaW52YWxpZF9kZXB0aF87IH0K
LQotICBFcnJvckxpc3RlbmVyKiBsaXN0ZW5lcigpIHsgcmV0dXJuIGxpc3RlbmVyXzsgfQotCi0g
IGNvbnN0IFR5cGVJbmZvKiB0eXBlaW5mbygpIHsgcmV0dXJuIHR5cGVpbmZvXzsgfQotCi0gcHJv
dGVjdGVkOgotICBjbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgUHJvdG9FbGVtZW50IDogcHVibGlj
IEJhc2VFbGVtZW50LCBwdWJsaWMgTG9jYXRpb25UcmFja2VySW50ZXJmYWNlIHsKLSAgIHB1Ymxp
YzoKLSAgICAvLyBDb25zdHJ1Y3RvciBmb3IgdGhlIHJvb3QgZWxlbWVudC4gTm8gcGFyZW50IG5v
ciBmaWVsZC4KLSAgICBQcm90b0VsZW1lbnQoY29uc3QgVHlwZUluZm8qIHR5cGVpbmZvLCBjb25z
dCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAgICBQcm90b1dy
aXRlciogZW5jbG9zaW5nKTsKLQotICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGZpZWxkIG9mIGFu
IGVsZW1lbnQuCi0gICAgUHJvdG9FbGVtZW50KFByb3RvRWxlbWVudCogcGFyZW50LCBjb25zdCBn
b29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQsCi0gICAgICAgICAgICAgICAgIGNvbnN0IGdv
b2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsIGJvb2wgaXNfbGlzdCk7Ci0KLSAgICB2aXJ0dWFs
IH5Qcm90b0VsZW1lbnQoKSB7fQotCi0gICAgLy8gQ2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBkZXN0
cnVjdG9yIGZvciBjbGVhbiB1cDoKLSAgICAvLyAgIC0gcmVwb3J0cyBhbnkgbWlzc2luZyByZXF1
aXJlZCBmaWVsZHMKLSAgICAvLyAgIC0gY29tcHV0ZXMgdGhlIHNwYWNlIG5lZWRlZCBieSB0aGUg
c2l6ZSBmaWVsZCwgYW5kIGF1Z21lbnQgdGhlCi0gICAgLy8gICAgIGxlbmd0aCBvZiBhbGwgcGFy
ZW50IG1lc3NhZ2VzIGJ5IHRoaXMgYWRkaXRpb25hbCBzcGFjZS4KLSAgICAvLyAgIC0gcmVsZWFz
ZXMgYW5kIHJldHVybnMgdGhlIHBhcmVudCBwb2ludGVyLgotICAgIFByb3RvRWxlbWVudCogcG9w
KCk7Ci0KLSAgICAvLyBBY2Nlc3NvcnMKLSAgICAvLyBwYXJlbnRfZmllbGQoKSBtYXkgYmUgTlVM
TCBpZiB3ZSBhcmUgYXQgcm9vdC4KLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCog
cGFyZW50X2ZpZWxkKCkgY29uc3QgewotICAgICAgcmV0dXJuIHBhcmVudF9maWVsZF87Ci0gICAg
fQotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVy
biB0eXBlXzsgfQotCi0gICAgLy8gUmVnaXN0ZXJzIGZpZWxkIGZvciBhY2NvdW50aW5nIHJlcXVp
cmVkIGZpZWxkcy4KLSAgICB2b2lkIFJlZ2lzdGVyRmllbGQoY29uc3QgZ29vZ2xlOjpwcm90b2J1
Zjo6RmllbGQqIGZpZWxkKTsKLQotICAgIC8vIFRvIHJlcG9ydCBsb2NhdGlvbiBvbiBlcnJvciBt
ZXNzYWdlcy4KLSAgICB2aXJ0dWFsIHN0cmluZyBUb1N0cmluZygpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBQcm90b0VsZW1lbnQqIHBhcmVudCgpIGNvbnN0IHsKLSAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxQcm90b0VsZW1lbnQqPihCYXNlRWxlbWVudDo6cGFyZW50KCkpOwotICAgIH0KLQotICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5kZXggaXMgYWxyZWFkeSB0YWtlbiBieSBhIHByZWNl
ZWRpbmcgb25lb2YgaW5wdXQuCi0gICAgYm9vbCBJc09uZW9mSW5kZXhUYWtlbihpbnQzMiBpbmRl
eCk7Ci0KLSAgICAvLyBNYXJrcyB0aGUgb25lb2YgJ2luZGV4JyBhcyB0YWtlbi4gRnV0dXJlIGlu
cHV0cyB0byB0aGlzIG9uZW9mIHdpbGwKLSAgICAvLyBnZW5lcmF0ZSBhbiBlcnJvci4KLSAgICB2
b2lkIFRha2VPbmVvZkluZGV4KGludDMyIGluZGV4KTsKLQotICAgcHJpdmF0ZToKLSAgICAvLyBV
c2VkIGZvciBhY2Nlc3MgdG8gdmFyaWFibGVzIG9mIHRoZSBlbmNsb3NpbmcgaW5zdGFuY2Ugb2YK
LSAgICAvLyBQcm90b1dyaXRlci4KLSAgICBQcm90b1dyaXRlciogb3dfOwotCi0gICAgLy8gRGVz
Y3JpYmVzIHRoZSBlbGVtZW50IGFzIGEgZmllbGQgaW4gdGhlIHBhcmVudCBtZXNzYWdlLgotICAg
IC8vIHBhcmVudF9maWVsZF8gaXMgTlVMTCBpZiBhbmQgb25seSBpZiB0aGlzIGVsZW1lbnQgaXMg
dGhlIHJvb3QgZWxlbWVudC4KLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogcGFy
ZW50X2ZpZWxkXzsKLQotICAgIC8vIFR5cGVJbmZvIHRvIGxvb2t1cCB0eXBlcy4KLSAgICBjb25z
dCBUeXBlSW5mbyogdHlwZWluZm9fOwotCi0gICAgLy8gQWRkaXRpb25hbCB2YXJpYWJsZXMgaWYg
dGhpcyBlbGVtZW50IGlzIGEgbWVzc2FnZToKLSAgICAvLyAoUm9vdCBlbGVtZW50IGlzIGFsd2F5
cyBhIG1lc3NhZ2UpLgotICAgIC8vIHR5cGVfICAgICAgICAgICAgIDogdGhlIHR5cGUgb2YgdGhp
cyBlbGVtZW50LgotICAgIC8vIHJlcXVpcmVkX2ZpZWxkc18gIDogc2V0IG9mIHJlcXVpcmVkIGZp
ZWxkcy4KLSAgICAvLyBzaXplX2luZGV4XyAgICAgICA6IGluZGV4IGludG8gUHJvdG9Xcml0ZXI6
OnNpemVfaW5zZXJ0XwotICAgIC8vICAgICAgICAgICAgICAgICAgICAgZm9yIGxhdGVyIGluc2Vy
dGlvbiBvZiBzZXJpYWxpemVkIG1lc3NhZ2UgbGVuZ3RoLgotICAgIGNvbnN0IGdvb2dsZTo6cHJv
dG9idWY6OlR5cGUmIHR5cGVfOwotICAgIHN0ZDo6c2V0PGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkKj4gcmVxdWlyZWRfZmllbGRzXzsKLSAgICBjb25zdCBpbnQgc2l6ZV9pbmRleF87Ci0K
LSAgICAvLyBUcmFja3MgcG9zaXRpb24gaW4gcmVwZWF0ZWQgZmllbGRzLCBuZWVkZWQgZm9yIExv
Y2F0aW9uVHJhY2tlckludGVyZmFjZS4KLSAgICBpbnQgYXJyYXlfaW5kZXhfOwotCi0gICAgLy8g
U2V0IG9mIG9uZW9mIGluZGljZXMgYWxyZWFkeSBzZWVuIGZvciB0aGUgdHlwZV8uIFVzZWQgdG8g
dmFsaWRhdGUKLSAgICAvLyBpbmNvbWluZyBtZXNzYWdlcyBzbyBubyBtb3JlIHRoYW4gb25lIG9u
ZW9mIGlzIHNldC4KLSAgICBoYXNoX3NldDxpbnQzMj4gb25lb2ZfaW5kaWNlc187Ci0KLSAgICBH
T09HTEVfRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFByb3RvRWxlbWVudCk7Ci0gIH07
Ci0KLSAgLy8gQ29udGFpbmVyIGZvciBpbnNlcnRpbmcgJ3NpemUnIGluZm9ybWF0aW9uIGF0IHRo
ZSAncG9zJyBwb3NpdGlvbi4KLSAgc3RydWN0IFNpemVJbmZvIHsKLSAgICBjb25zdCBpbnQgcG9z
OwotICAgIGludCBzaXplOwotICB9OwotCi0gIFByb3RvV3JpdGVyKGNvbnN0IFR5cGVJbmZvKiB0
eXBlaW5mbywgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZSwKLSAgICAgICAgICAg
ICAgc3RyaW5nczo6Qnl0ZVNpbmsqIG91dHB1dCwgRXJyb3JMaXN0ZW5lciogbGlzdGVuZXIpOwot
Ci0gIHZpcnR1YWwgUHJvdG9FbGVtZW50KiBlbGVtZW50KCkgeyByZXR1cm4gZWxlbWVudF8uZ2V0
KCk7IH0KLQotICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgY2FsbGluZyBFcnJvckxpc3RlbmVyLiBT
ZWUgZXJyb3JfbGlzdGVuZXIuaC4KLSAgdm9pZCBJbnZhbGlkTmFtZShTdHJpbmdQaWVjZSB1bmtu
b3duX25hbWUsIFN0cmluZ1BpZWNlIG1lc3NhZ2UpOwotICB2b2lkIEludmFsaWRWYWx1ZShTdHJp
bmdQaWVjZSB0eXBlX25hbWUsIFN0cmluZ1BpZWNlIHZhbHVlKTsKLSAgdm9pZCBNaXNzaW5nRmll
bGQoU3RyaW5nUGllY2UgbWlzc2luZ19uYW1lKTsKLQotICAvLyBDb21tb24gY29kZSBmb3IgQmVn
aW5PYmplY3QoKSBhbmQgQmVnaW5MaXN0KCkgdGhhdCBkb2VzIGludmFsaWRfZGVwdGhfCi0gIC8v
IGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBuYW1lIGxvb2t1cC4KLSAgY29uc3QgZ29vZ2xl
Ojpwcm90b2J1Zjo6RmllbGQqIEJlZ2luTmFtZWQoU3RyaW5nUGllY2UgbmFtZSwgYm9vbCBpc19s
aXN0KTsKLQotICAvLyBMb29rdXAgdGhlIGZpZWxkIGluIHRoZSBjdXJyZW50IGVsZW1lbnQuIExv
b2tzIGluIHRoZSBiYXNlIGRlc2NyaXB0b3IKLSAgLy8gYW5kIGluIGFueSBleHRlbnNpb24uIFRo
aXMgd2lsbCByZXBvcnQgYW4gZXJyb3IgaWYgdGhlIGZpZWxkIGNhbm5vdCBiZQotICAvLyBmb3Vu
ZCBvciBpZiBtdWx0aXBsZSBtYXRjaGluZyBleHRlbnNpb25zIGFyZSBmb3VuZC4KLSAgY29uc3Qg
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIExvb2t1cChTdHJpbmdQaWVjZSBuYW1lKTsKLQotICAv
LyBMb29rdXAgdGhlIGZpZWxkIHR5cGUgaW4gdGhlIHR5cGUgZGVzY3JpcHRvci4gUmV0dXJucyBO
VUxMIGlmIHRoZSB0eXBlCi0gIC8vIGlzIG5vdCBrbm93bi4KLSAgY29uc3QgZ29vZ2xlOjpwcm90
b2J1Zjo6VHlwZSogTG9va3VwVHlwZSgKLSAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkKiBmaWVsZCk7Ci0KLSAgLy8gV3JpdGUgc2VyaWFsaXplZCBvdXRwdXQgdG8gdGhlIGZpbmFs
IG91dHB1dCBCeXRlU2luaywgaW5zZXJ0aW5nIGFsbAotICAvLyB0aGUgc2l6ZSBpbmZvcm1hdGlv
biBmb3IgbmVzdGVkIG1lc3NhZ2VzIHRoYXQgYXJlIG1pc3NpbmcgZnJvbSB0aGUKLSAgLy8gaW50
ZXJtZWRpYXRlIENvcmQgYnVmZmVyLgotICB2b2lkIFdyaXRlUm9vdE1lc3NhZ2UoKTsKLQotICAv
LyBIZWxwZXIgbWV0aG9kIHRvIHdyaXRlIHByb3RvIHRhZ3MgYmFzZWQgb24gdGhlIGdpdmVuIGZp
ZWxkLgotICB2b2lkIFdyaXRlVGFnKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVs
ZCk7Ci0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGZvciB0eXBlXyBjYW4gYmUg
c2V0IGFzIGEgb25lb2YuIElmIGZpZWxkIGlzIG5vdAotICAvLyBhIG9uZW9mIHR5cGUsIHRoaXMg
ZnVuY3Rpb24gZG9lcyBub3RoaW5nIGFuZCByZXR1cm5zIHRydWUuCi0gIC8vIElmIGFub3RoZXIg
ZmllbGQgZm9yIHRoaXMgb25lb2YgaXMgYWxyZWFkeSBzZXQsIHRoaXMgZnVuY3Rpb24gcmV0dXJu
cwotICAvLyBmYWxzZS4gSXQgYWxzbyBjYWxscyB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY2FsbGJh
Y2suCi0gIC8vIHVubm9ybWFsaXplZF9uYW1lIGlzIHVzZWQgZm9yIGVycm9yIHN0cmluZy4KLSAg
Ym9vbCBWYWxpZE9uZW9mKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVsZCwKLSAg
ICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlIHVubm9ybWFsaXplZF9uYW1lKTsKLQotICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGlzIHJlcGVhdGVkLgotICBib29sIElzUmVwZWF0ZWQo
Y29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQmIGZpZWxkKTsKLQotICAvLyBTdGFydHMgYW4g
b2JqZWN0IGdpdmVuIHRoZSBmaWVsZCBhbmQgdGhlIGVuY2xvc2luZyB0eXBlLgotICBQcm90b1dy
aXRlciogU3RhcnRPYmplY3RGaWVsZChjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmll
bGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9i
dWY6OlR5cGUmIHR5cGUpOwotCi0gIC8vIFN0YXJ0cyBhIGxpc3QgZ2l2ZW4gdGhlIGZpZWxkIGFu
ZCB0aGUgZW5jbG9zaW5nIHR5cGUuCi0gIFByb3RvV3JpdGVyKiBTdGFydExpc3RGaWVsZChjb25z
dCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlKTsKLQotICAvLyBSZW5k
ZXJzIGEgcHJpbWl0dmUgZmllbGQgZ2l2ZW4gdGhlIGZpZWxkIGFuZCB0aGUgZW5jbG9zaW5nIHR5
cGUuCi0gIFByb3RvV3JpdGVyKiBSZW5kZXJQcmltaXRpdmVGaWVsZChjb25zdCBnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZCYgZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRGF0YVBpZWNlJiB2YWx1ZSk7Ci0KLSBwcml2YXRlOgot
ICAvLyBWYXJpYWJsZXMgZm9yIGRlc2NyaWJpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgaW5wdXQg
dHJlZToKLSAgLy8gbWFzdGVyX3R5cGVfOiBkZXNjcmlwdG9yIGZvciB0aGUgd2hvbGUgcHJvdG9i
dWYgbWVzc2FnZS4KLSAgLy8gdHlwZWluZm9fIDogdGhlIFR5cGVJbmZvIG9iamVjdCB0byBsb29r
dXAgdHlwZXMuCi0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIG1hc3Rlcl90eXBlXzsK
LSAgY29uc3QgVHlwZUluZm8qIHR5cGVpbmZvXzsKLSAgLy8gV2hldGhlciB3ZSBvd24gdGhlIHR5
cGVpbmZvXyBvYmplY3QuCi0gIGJvb2wgb3duX3R5cGVpbmZvXzsKLQotICAvLyBJbmRpY2F0ZXMg
d2hldGhlciB3ZSBmaW5pc2hlZCB3cml0aW5nIHJvb3QgbWVzc2FnZSBjb21wbGV0ZWx5LgotICBi
b29sIGRvbmVfOwotCi0gIC8vIFZhcmlhYmxlIGZvciBpbnRlcm5hbCBzdGF0ZSBwcm9jZXNzaW5n
OgotICAvLyBlbGVtZW50XyAgICA6IHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gIC8vIHNpemVfaW5z
ZXJ0Xzogc2l6ZXMgb2YgbmVzdGVkIG1lc3NhZ2VzLgotICAvLyAgICAgICAgICAgICAgIHBvcyAg
LSBwb3NpdGlvbiB0byBpbnNlcnQgdGhlIHNpemUgZmllbGQuCi0gIC8vICAgICAgICAgICAgICAg
c2l6ZSAtIHNpemUgdmFsdWUgdG8gYmUgaW5zZXJ0ZWQuCi0gIGdvb2dsZTo6cHJvdG9idWY6OnNj
b3BlZF9wdHI8UHJvdG9FbGVtZW50PiBlbGVtZW50XzsKLSAgc3RkOjpkZXF1ZTxTaXplSW5mbz4g
c2l6ZV9pbnNlcnRfOwotCi0gIC8vIFZhcmlhYmxlcyBmb3Igb3V0cHV0IGdlbmVyYXRpb246Ci0g
IC8vIG91dHB1dF8gIDogcG9pbnRlciB0byBhbiBleHRlcm5hbCBCeXRlU2luayBmb3IgZmluYWwg
dXNlci12aXNpYmxlIG91dHB1dC4KLSAgLy8gYnVmZmVyXyAgOiBidWZmZXIgaG9sZGluZyBwYXJ0
aWFsIG1lc3NhZ2UgYmVmb3JlIGJlaW5nIHJlYWR5IGZvciBvdXRwdXRfLgotICAvLyBhZGFwdGVy
XyA6IGludGVybmFsIGFkYXB0ZXIgYmV0d2VlbiBDb2RlZE91dHB1dFN0cmVhbSBhbmQgYnVmZmVy
Xy4KLSAgLy8gc3RyZWFtXyAgOiB3cmFwcGVyIGZvciB3cml0aW5nIHRhZ3MgYW5kIG90aGVyIGVu
Y29kaW5ncyBpbiB3aXJlIGZvcm1hdC4KLSAgc3RyaW5nczo6Qnl0ZVNpbmsqIG91dHB1dF87Ci0g
IHN0cmluZyBidWZmZXJfOwotICBnb29nbGU6OnByb3RvYnVmOjppbzo6U3RyaW5nT3V0cHV0U3Ry
ZWFtIGFkYXB0ZXJfOwotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPGdvb2dsZTo6cHJv
dG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbT4gc3RyZWFtXzsKLQotICAvLyBWYXJpYWJsZXMg
Zm9yIGVycm9yIHRyYWNraW5nIGFuZCByZXBvcnRpbmc6Ci0gIC8vIGxpc3RlbmVyXyAgICAgOiBh
IHBsYWNlIHRvIHJlcG9ydCBhbnkgZXJyb3JzIGZvdW5kLgotICAvLyBpbnZhbGlkX2RlcHRoXzog
bnVtYmVyIG9mIGVuY2xvc2luZyBpbnZhbGlkIG5lc3RlZCBtZXNzYWdlcy4KLSAgLy8gdHJhY2tl
cl8gICAgICA6IHRoZSByb290IGxvY2F0aW9uIHRyYWNrZXIgaW50ZXJmYWNlLgotICBFcnJvckxp
c3RlbmVyKiBsaXN0ZW5lcl87Ci0gIGludCBpbnZhbGlkX2RlcHRoXzsKLSAgZ29vZ2xlOjpwcm90
b2J1Zjo6c2NvcGVkX3B0cjxMb2NhdGlvblRyYWNrZXJJbnRlcmZhY2U+IHRyYWNrZXJfOwotCi0g
IEdPT0dMRV9ESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoUHJvdG9Xcml0ZXIpOwotfTsK
LQotfSAgLy8gbmFtZXNwYWNlIGNvbnZlcnRlcgotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8v
IG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8v
IEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9QUk9UT19XUklURVJfSF9fCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3Rz
b3VyY2UuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9v
YmplY3Rzb3VyY2UuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMzc4MWE0YjQ4
ZmM2OGVkNGU5NTY2YTkwNzk4YTMzYzA2YzhlYTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJv
dG9zdHJlYW1fb2JqZWN0c291cmNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTEwOCArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHNvdXJjZS5oPgotCi0jaW5j
bHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jYXN0cy5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9zdHJpbmdwcmludGYuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
dGltZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvd2lyZV9mb3JtYXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3Jt
YXRfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2ZpZWxk
X21hc2tfdXRpbGl0eS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFs
L2NvbnN0YW50cy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3V0
aWxpdHkuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXBfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9zdGF0dXNfbWFjcm9zLmg+Ci0KLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwgewotdXNpbmcgdXRpbDo6U3Rh
dHVzOwotdXNpbmcgdXRpbDo6U3RhdHVzT3I7Ci1uYW1lc3BhY2UgZXJyb3IgewotdXNpbmcgdXRp
bDo6ZXJyb3I6OkNvZGU7Ci11c2luZyB1dGlsOjplcnJvcjo6SU5URVJOQUw7Ci19Ci1uYW1lc3Bh
Y2UgY29udmVydGVyIHsKLQotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvcjsKLXVz
aW5nIGdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZURlc2NyaXB0b3I7Ci11c2luZyBnb29nbGU6
OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3I7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdDsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJl
Rm9ybWF0TGl0ZTsKLXVzaW5nIHV0aWw6OlN0YXR1czsKLXVzaW5nIHV0aWw6OlN0YXR1c09yOwot
Ci1uYW1lc3BhY2UgewotCi1zdGF0aWMgaW50IGtEZWZhdWx0TWF4UmVjdXJzaW9uRGVwdGggPSA2
NDsKLQotLy8gRmluZHMgYSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBudW1iZXIuIE5VTEwgaWYgbm9u
ZSBmb3VuZC4KLWNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkKiBGaW5kRmllbGRCeU51bWJl
cigKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLCBpbnQgbnVtYmVyKTsK
LQotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBpcyBwYWNrYWJsZS4KLWJvb2wgSXNQYWNr
YWJsZShjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmllbGQpOwotCi0vLyBGaW5kcyBh
biBlbnVtIHZhbHVlIHdpdGggdGhlIGdpdmVuIG51bWJlci4gTlVMTCBpZiBub25lIGZvdW5kLgot
Y29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlKiBGaW5kRW51bVZhbHVlQnlOdW1iZXIo
Ci0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bSYgdGVjaF9lbnVtLCBpbnQgbnVtYmVy
KTsKLQotLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBmb3JtYXQgbmFub3MuCi1jb25zdCBzdHJpbmcg
Rm9ybWF0TmFub3ModWludDMyIG5hbm9zKTsKLQotU3RhdHVzT3I8c3RyaW5nPiBNYXBLZXlEZWZh
dWx0VmFsdWVBc1N0cmluZygKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmll
bGQpIHsKLSAgc3dpdGNoIChmaWVsZC5raW5kKCkpIHsKLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9i
dWY6OkZpZWxkX0tpbmRfVFlQRV9CT09MOgotICAgICAgcmV0dXJuIHN0cmluZygiZmFsc2UiKTsK
LSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9JTlQzMjoKLSAgICBj
YXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9JTlQ2NDoKLSAgICBjYXNlIGdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9VSU5UMzI6Ci0gICAgY2FzZSBnb29nbGU6
OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfVUlOVDY0OgotICAgIGNhc2UgZ29vZ2xlOjpwcm90
b2J1Zjo6RmllbGRfS2luZF9UWVBFX1NJTlQzMjoKLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkX0tpbmRfVFlQRV9TSU5UNjQ6Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZF9LaW5kX1RZUEVfU0ZJWEVEMzI6Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9L
aW5kX1RZUEVfU0ZJWEVENjQ6Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5k
X1RZUEVfRklYRUQzMjoKLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQ
RV9GSVhFRDY0OgotICAgICAgcmV0dXJuIHN0cmluZygiMCIpOwotICAgIGNhc2UgZ29vZ2xlOjpw
cm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX1NUUklORzoKLSAgICAgIHJldHVybiBzdHJpbmcoKTsK
LSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIFN0YXR1cyh1dGlsOjplcnJvcjo6SU5URVJOQUws
ICJJbnZhbGlkIG1hcCBrZXkgdHlwZS4iKTsKLSAgfQotfQotfSAgLy8gbmFtZXNwYWNlCi0KLQot
UHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6OlByb3RvU3RyZWFtT2JqZWN0U291cmNlKAotICAgIGdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBzdHJlYW0sIFR5cGVSZXNvbHZl
ciogdHlwZV9yZXNvbHZlciwKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBl
KQotICAgIDogc3RyZWFtXyhzdHJlYW0pLAotICAgICAgdHlwZWluZm9fKFR5cGVJbmZvOjpOZXdU
eXBlSW5mbyh0eXBlX3Jlc29sdmVyKSksCi0gICAgICBvd25fdHlwZWluZm9fKHRydWUpLAotICAg
ICAgdHlwZV8odHlwZSksCi0gICAgICB1c2VfbG93ZXJfY2FtZWxfZm9yX2VudW1zXyhmYWxzZSks
Ci0gICAgICByZWN1cnNpb25fZGVwdGhfKDApLAotICAgICAgbWF4X3JlY3Vyc2lvbl9kZXB0aF8o
a0RlZmF1bHRNYXhSZWN1cnNpb25EZXB0aCkgewotICBHT09HTEVfTE9HX0lGKERGQVRBTCwgc3Ry
ZWFtID09IE5VTEwpIDw8ICJJbnB1dCBzdHJlYW0gaXMgTlVMTC4iOwotfQotCi1Qcm90b1N0cmVh
bU9iamVjdFNvdXJjZTo6UHJvdG9TdHJlYW1PYmplY3RTb3VyY2UoCi0gICAgZ29vZ2xlOjpwcm90
b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIHN0cmVhbSwgY29uc3QgVHlwZUluZm8qIHR5cGVp
bmZvLAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUpCi0gICAgOiBzdHJl
YW1fKHN0cmVhbSksCi0gICAgICB0eXBlaW5mb18odHlwZWluZm8pLAotICAgICAgb3duX3R5cGVp
bmZvXyhmYWxzZSksCi0gICAgICB0eXBlXyh0eXBlKSwKLSAgICAgIHVzZV9sb3dlcl9jYW1lbF9m
b3JfZW51bXNfKGZhbHNlKSwKLSAgICAgIHJlY3Vyc2lvbl9kZXB0aF8oMCksCi0gICAgICBtYXhf
cmVjdXJzaW9uX2RlcHRoXyhrRGVmYXVsdE1heFJlY3Vyc2lvbkRlcHRoKSB7Ci0gIEdPT0dMRV9M
T0dfSUYoREZBVEFMLCBzdHJlYW0gPT0gTlVMTCkgPDwgIklucHV0IHN0cmVhbSBpcyBOVUxMLiI7
Ci19Ci0KLVByb3RvU3RyZWFtT2JqZWN0U291cmNlOjp+UHJvdG9TdHJlYW1PYmplY3RTb3VyY2Uo
KSB7Ci0gIGlmIChvd25fdHlwZWluZm9fKSB7Ci0gICAgZGVsZXRlIHR5cGVpbmZvXzsKLSAgfQot
fQotCi1TdGF0dXMgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6Ok5hbWVkV3JpdGVUbyhTdHJpbmdQ
aWVjZSBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T2JqZWN0V3JpdGVyKiBvdykgY29uc3QgewotICByZXR1cm4gV3JpdGVNZXNzYWdlKHR5cGVfLCBu
YW1lLCAwLCB0cnVlLCBvdyk7Ci19Ci0KLWNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkKiBQ
cm90b1N0cmVhbU9iamVjdFNvdXJjZTo6RmluZEFuZFZlcmlmeUZpZWxkKAotICAgIGNvbnN0IGdv
b2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsIHVpbnQzMiB0YWcpIGNvbnN0IHsKLSAgLy8gTG9v
a3VwIHRoZSBuZXcgZmllbGQgaW4gdGhlIHR5cGUgYnkgdGFnIG51bWJlci4KLSAgY29uc3QgZ29v
Z2xlOjpwcm90b2J1Zjo6RmllbGQqIGZpZWxkID0gRmluZEZpZWxkQnlOdW1iZXIodHlwZSwgdGFn
ID4+IDMpOwotICAvLyBWZXJpZnkgaWYgdGhlIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSB3aXJl
IHR5cGUgaW4gdGFnLgotICAvLyBJZiB0aGVyZSBpcyBhbnkgZGlzY3JlcGFuY3ksIG1hcmsgdGhl
IGZpZWxkIGFzIG5vdCBmb3VuZC4KLSAgaWYgKGZpZWxkICE9IE5VTEwpIHsKLSAgICBXaXJlRm9y
bWF0TGl0ZTo6V2lyZVR5cGUgZXhwZWN0ZWRfdHlwZSA9Ci0gICAgICAgIFdpcmVGb3JtYXRMaXRl
OjpXaXJlVHlwZUZvckZpZWxkVHlwZSgKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFdpcmVGb3Jt
YXRMaXRlOjpGaWVsZFR5cGU+KGZpZWxkLT5raW5kKCkpKTsKLSAgICBXaXJlRm9ybWF0TGl0ZTo6
V2lyZVR5cGUgYWN0dWFsX3R5cGUgPSBXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFn
KTsKLSAgICBpZiAoYWN0dWFsX3R5cGUgIT0gZXhwZWN0ZWRfdHlwZSAmJgotICAgICAgICAoIUlz
UGFja2FibGUoKmZpZWxkKSB8fAotICAgICAgICAgYWN0dWFsX3R5cGUgIT0gV2lyZUZvcm1hdExp
dGU6OldJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQpKSB7Ci0gICAgICBmaWVsZCA9IE5VTEw7Ci0g
ICAgfQotICB9Ci0gIHJldHVybiBmaWVsZDsKLX0KLQotU3RhdHVzIFByb3RvU3RyZWFtT2JqZWN0
U291cmNlOjpXcml0ZU1lc3NhZ2UoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNl
IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1aW50MzIgZW5kX3RhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaW5jbHVkZV9zdGFydF9hbmRfZW5kLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0V3JpdGVyKiBvdykgY29uc3QgewotCi0gICAg
Y29uc3QgVHlwZVJlbmRlcmVyKiB0eXBlX3JlbmRlcmVyID0gRmluZFR5cGVSZW5kZXJlcih0eXBl
Lm5hbWUoKSk7Ci0gICAgaWYgKHR5cGVfcmVuZGVyZXIgIT0gTlVMTCkgewotICAgICAgcmV0dXJu
ICgqdHlwZV9yZW5kZXJlcikodGhpcywgdHlwZSwgbmFtZSwgb3cpOwotICAgIH0KLQotICBjb25z
dCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQgPSBOVUxMOwotICBzdHJpbmcgZmllbGRf
bmFtZTsKLSAgLy8gbGFzdF90YWcgc2V0IHRvIGR1bW15IHZhbHVlIHRoYXQgaXMgZGlmZmVyZW50
IGZyb20gdGFnLgotICB1aW50MzIgdGFnID0gc3RyZWFtXy0+UmVhZFRhZygpLCBsYXN0X3RhZyA9
IHRhZyArIDE7Ci0KLSAgaWYgKGluY2x1ZGVfc3RhcnRfYW5kX2VuZCkgewotICAgIG93LT5TdGFy
dE9iamVjdChuYW1lKTsKLSAgfQotICB3aGlsZSAodGFnICE9IGVuZF90YWcpIHsKLSAgICBpZiAo
dGFnICE9IGxhc3RfdGFnKSB7ICAvLyBVcGRhdGUgZmllbGQgb25seSBpZiB0YWcgaXMgY2hhbmdl
ZC4KLSAgICAgIGxhc3RfdGFnID0gdGFnOwotICAgICAgZmllbGQgPSBGaW5kQW5kVmVyaWZ5Rmll
bGQodHlwZSwgdGFnKTsKLSAgICAgIGlmIChmaWVsZCAhPSBOVUxMKSB7Ci0gICAgICAgIGZpZWxk
X25hbWUgPSBmaWVsZC0+anNvbl9uYW1lKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChmaWVs
ZCA9PSBOVUxMKSB7Ci0gICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIGZpZWxkLCBza2lwIHRo
aXMgdW5rbm93biB0YWcuCi0gICAgICAvLyBUT0RPKHdwb29uKTogQ2hlY2sgcmV0dXJuIGJvb2xl
YW4gdmFsdWUuCi0gICAgICBXaXJlRm9ybWF0OjpTa2lwRmllbGQoc3RyZWFtXywgdGFnLCBOVUxM
KTsKLSAgICAgIHRhZyA9IHN0cmVhbV8tPlJlYWRUYWcoKTsKLSAgICAgIGNvbnRpbnVlOwotICAg
IH0KLQotICAgIGlmIChmaWVsZC0+Y2FyZGluYWxpdHkoKSA9PQotICAgICAgICBnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZF9DYXJkaW5hbGl0eV9DQVJESU5BTElUWV9SRVBFQVRFRCkgewotICAgICAg
Ym9vbCBjaGVja19tYXBzID0gdHJ1ZTsKLQotICAgICAgaWYgKGNoZWNrX21hcHMgJiYgSXNNYXAo
KmZpZWxkKSkgewotICAgICAgICBvdy0+U3RhcnRPYmplY3QoZmllbGRfbmFtZSk7Ci0gICAgICAg
IEFTU0lHTl9PUl9SRVRVUk4odGFnLCBSZW5kZXJNYXAoZmllbGQsIGZpZWxkX25hbWUsIHRhZywg
b3cpKTsKLSAgICAgICAgb3ctPkVuZE9iamVjdCgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
QVNTSUdOX09SX1JFVFVSTih0YWcsIFJlbmRlckxpc3QoZmllbGQsIGZpZWxkX25hbWUsIHRhZywg
b3cpKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLy8gUmVuZGVyIHRoZSBmaWVsZC4K
LSAgICAgIFJFVFVSTl9JRl9FUlJPUihSZW5kZXJGaWVsZChmaWVsZCwgZmllbGRfbmFtZSwgb3cp
KTsKLSAgICAgIHRhZyA9IHN0cmVhbV8tPlJlYWRUYWcoKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGlu
Y2x1ZGVfc3RhcnRfYW5kX2VuZCkgewotICAgIG93LT5FbmRPYmplY3QoKTsKLSAgfQotICByZXR1
cm4gU3RhdHVzOjpPSzsKLX0KLQotU3RhdHVzT3I8dWludDMyPiBQcm90b1N0cmVhbU9iamVjdFNv
dXJjZTo6UmVuZGVyTGlzdCgKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmll
bGQsIFN0cmluZ1BpZWNlIG5hbWUsIHVpbnQzMiBsaXN0X3RhZywKLSAgICBPYmplY3RXcml0ZXIq
IG93KSBjb25zdCB7Ci0gIHVpbnQzMiB0YWdfdG9fcmV0dXJuID0gMDsKLSAgb3ctPlN0YXJ0TGlz
dChuYW1lKTsKLSAgaWYgKElzUGFja2FibGUoKmZpZWxkKSAmJgotICAgICAgbGlzdF90YWcgPT0K
LSAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6TWFrZVRhZyhmaWVsZC0+bnVtYmVyKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0xF
TkdUSF9ERUxJTUlURUQpKSB7Ci0gICAgUkVUVVJOX0lGX0VSUk9SKFJlbmRlclBhY2tlZChmaWVs
ZCwgb3cpKTsKLSAgICAvLyBTaW5jZSBwYWNrZWQgZmllbGRzIGhhdmUgYSBzaW5nbGUgdGFnLCBy
ZWFkIGFub3RoZXIgdGFnIGZyb20gc3RyZWFtIHRvCi0gICAgLy8gcmV0dXJuLgotICAgIHRhZ190
b19yZXR1cm4gPSBzdHJlYW1fLT5SZWFkVGFnKCk7Ci0gIH0gZWxzZSB7Ci0gICAgZG8gewotICAg
ICAgUkVUVVJOX0lGX0VSUk9SKFJlbmRlckZpZWxkKGZpZWxkLCAiIiwgb3cpKTsKLSAgICB9IHdo
aWxlICgodGFnX3RvX3JldHVybiA9IHN0cmVhbV8tPlJlYWRUYWcoKSkgPT0gbGlzdF90YWcpOwot
ICB9Ci0gIG93LT5FbmRMaXN0KCk7Ci0gIHJldHVybiB0YWdfdG9fcmV0dXJuOwotfQotCi1TdGF0
dXNPcjx1aW50MzI+IFByb3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZW5kZXJNYXAoCi0gICAgY29u
c3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIGZpZWxkLCBTdHJpbmdQaWVjZSBuYW1lLCB1aW50
MzIgbGlzdF90YWcsCi0gICAgT2JqZWN0V3JpdGVyKiBvdykgY29uc3QgewotICBjb25zdCBnb29n
bGU6OnByb3RvYnVmOjpUeXBlKiBmaWVsZF90eXBlID0KLSAgICAgIHR5cGVpbmZvXy0+R2V0VHlw
ZUJ5VHlwZVVybChmaWVsZC0+dHlwZV91cmwoKSk7Ci0gIHVpbnQzMiB0YWdfdG9fcmV0dXJuID0g
MDsKLSAgZG8gewotICAgIC8vIFJlbmRlciBtYXAgZW50cnkgbWVzc2FnZSB0eXBlLgotICAgIHVp
bnQzMiBidWZmZXIzMjsKLSAgICBzdHJlYW1fLT5SZWFkVmFyaW50MzIoJmJ1ZmZlcjMyKTsgIC8v
IG1lc3NhZ2UgbGVuZ3RoCi0gICAgaW50IG9sZF9saW1pdCA9IHN0cmVhbV8tPlB1c2hMaW1pdChi
dWZmZXIzMik7Ci0gICAgc3RyaW5nIG1hcF9rZXk7Ci0gICAgZm9yICh1aW50MzIgdGFnID0gc3Ry
ZWFtXy0+UmVhZFRhZygpOyB0YWcgIT0gMDsgdGFnID0gc3RyZWFtXy0+UmVhZFRhZygpKSB7Ci0g
ICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQgPQotICAgICAgICAgIEZp
bmRBbmRWZXJpZnlGaWVsZCgqZmllbGRfdHlwZSwgdGFnKTsKLSAgICAgIGlmIChmaWVsZCA9PSBO
VUxMKSB7Ci0gICAgICAgIFdpcmVGb3JtYXQ6OlNraXBGaWVsZChzdHJlYW1fLCB0YWcsIE5VTEwp
OwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIC8vIE1hcCBmaWVsZCBudW1iZXJz
IGFyZSBrZXkgPSAxIGFuZCB2YWx1ZSA9IDIKLSAgICAgIGlmIChmaWVsZC0+bnVtYmVyKCkgPT0g
MSkgewotICAgICAgICBtYXBfa2V5ID0gUmVhZEZpZWxkVmFsdWVBc1N0cmluZygqZmllbGQpOwot
ICAgICAgfSBlbHNlIGlmIChmaWVsZC0+bnVtYmVyKCkgPT0gMikgewotICAgICAgICBpZiAobWFw
X2tleS5lbXB0eSgpKSB7Ci0gICAgICAgICAgLy8gQW4gYWJzZW50IG1hcCBrZXkgaXMgdHJlYXRl
ZCBhcyB0aGUgZGVmYXVsdC4KLSAgICAgICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZCoga2V5X2ZpZWxkID0KLSAgICAgICAgICAgICAgRmluZEZpZWxkQnlOdW1iZXIoKmZpZWxkX3R5
cGUsIDEpOwotICAgICAgICAgIGlmIChrZXlfZmllbGQgPT0gTlVMTCkgewotICAgICAgICAgICAg
Ly8gVGhlIFR5cGUgaW5mbyBmb3IgdGhpcyBtYXAgZW50cnkgaXMgaW5jb3JyZWN0LiBJdCBzaG91
bGQgYWx3YXlzCi0gICAgICAgICAgICAvLyBoYXZlIGEgZmllbGQgbmFtZWQgImtleSIgYW5kIHdp
dGggZmllbGQgbnVtYmVyIDEuCi0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKHV0aWw6OmVycm9y
OjpJTlRFUk5BTCwgIkludmFsaWQgbWFwIGVudHJ5LiIpOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBBU1NJR05fT1JfUkVUVVJOKG1hcF9rZXksIE1hcEtleURlZmF1bHRWYWx1ZUFzU3RyaW5nKCpr
ZXlfZmllbGQpKTsKLSAgICAgICAgfQotICAgICAgICBSRVRVUk5fSUZfRVJST1IoUmVuZGVyRmll
bGQoZmllbGQsIG1hcF9rZXksIG93KSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGUg
VHlwZSBpbmZvIGZvciB0aGlzIG1hcCBlbnRyeSBpcyBpbmNvcnJlY3QuIEl0IHNob3VsZCBjb250
YWluCi0gICAgICAgIC8vIGV4YWN0bHkgdHdvIGZpZWxkcyB3aXRoIGZpZWxkIG51bWJlciAxIGFu
ZCAyLgotICAgICAgICByZXR1cm4gU3RhdHVzKHV0aWw6OmVycm9yOjpJTlRFUk5BTCwgIkludmFs
aWQgbWFwIGVudHJ5LiIpOwotICAgICAgfQotICAgIH0KLSAgICBzdHJlYW1fLT5Qb3BMaW1pdChv
bGRfbGltaXQpOwotICB9IHdoaWxlICgodGFnX3RvX3JldHVybiA9IHN0cmVhbV8tPlJlYWRUYWco
KSkgPT0gbGlzdF90YWcpOwotICByZXR1cm4gdGFnX3RvX3JldHVybjsKLX0KLQotU3RhdHVzIFBy
b3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZW5kZXJQYWNrZWQoCi0gICAgY29uc3QgZ29vZ2xlOjpw
cm90b2J1Zjo6RmllbGQqIGZpZWxkLCBPYmplY3RXcml0ZXIqIG93KSBjb25zdCB7Ci0gIHVpbnQz
MiBsZW5ndGg7Ci0gIHN0cmVhbV8tPlJlYWRWYXJpbnQzMigmbGVuZ3RoKTsKLSAgaW50IG9sZF9s
aW1pdCA9IHN0cmVhbV8tPlB1c2hMaW1pdChsZW5ndGgpOwotICB3aGlsZSAoc3RyZWFtXy0+Qnl0
ZXNVbnRpbExpbWl0KCkgPiAwKSB7Ci0gICAgUkVUVVJOX0lGX0VSUk9SKFJlbmRlckZpZWxkKGZp
ZWxkLCBTdHJpbmdQaWVjZSgpLCBvdykpOwotICB9Ci0gIHN0cmVhbV8tPlBvcExpbWl0KG9sZF9s
aW1pdCk7Ci0gIHJldHVybiBTdGF0dXM6Ok9LOwotfQotCi1TdGF0dXMgUHJvdG9TdHJlYW1PYmpl
Y3RTb3VyY2U6OlJlbmRlclRpbWVzdGFtcCgKLSAgICBjb25zdCBQcm90b1N0cmVhbU9iamVjdFNv
dXJjZSogb3MsIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0gICAgU3RyaW5n
UGllY2UgZmllbGRfbmFtZSwgT2JqZWN0V3JpdGVyKiBvdykgewotICBwYWlyPGludDY0LCBpbnQz
Mj4gcCA9IG9zLT5SZWFkU2Vjb25kc0FuZE5hbm9zKHR5cGUpOwotICBpbnQ2NCBzZWNvbmRzID0g
cC5maXJzdDsKLSAgaW50MzIgbmFub3MgPSBwLnNlY29uZDsKLSAgaWYgKHNlY29uZHMgPiBrVGlt
ZXN0YW1wTWF4U2Vjb25kcyB8fCBzZWNvbmRzIDwga1RpbWVzdGFtcE1pblNlY29uZHMpIHsKLSAg
ICByZXR1cm4gU3RhdHVzKAotICAgICAgICB1dGlsOjplcnJvcjo6SU5URVJOQUwsCi0gICAgICAg
IFN0ckNhdCgiVGltZXN0YW1wIHNlY29uZHMgZXhjZWVkcyBsaW1pdCBmb3IgZmllbGQ6ICIsIGZp
ZWxkX25hbWUpKTsKLSAgfQotCi0gIGlmIChuYW5vcyA8IDAgfHwgbmFub3MgPj0ga05hbm9zUGVy
U2Vjb25kKSB7Ci0gICAgcmV0dXJuIFN0YXR1cygKLSAgICAgICAgdXRpbDo6ZXJyb3I6OklOVEVS
TkFMLAotICAgICAgICBTdHJDYXQoIlRpbWVzdGFtcCBuYW5vcyBleGNlZWRzIGxpbWl0IGZvciBm
aWVsZDogIiwgZmllbGRfbmFtZSkpOwotICB9Ci0KLSAgb3ctPlJlbmRlclN0cmluZyhmaWVsZF9u
YW1lLAotICAgICAgICAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkZv
cm1hdFRpbWUoc2Vjb25kcywgbmFub3MpKTsKLQotICByZXR1cm4gU3RhdHVzOjpPSzsKLX0KLQot
U3RhdHVzIFByb3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZW5kZXJEdXJhdGlvbigKLSAgICBjb25z
dCBQcm90b1N0cmVhbU9iamVjdFNvdXJjZSogb3MsIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5
cGUmIHR5cGUsCi0gICAgU3RyaW5nUGllY2UgZmllbGRfbmFtZSwgT2JqZWN0V3JpdGVyKiBvdykg
ewotICBwYWlyPGludDY0LCBpbnQzMj4gcCA9IG9zLT5SZWFkU2Vjb25kc0FuZE5hbm9zKHR5cGUp
OwotICBpbnQ2NCBzZWNvbmRzID0gcC5maXJzdDsKLSAgaW50MzIgbmFub3MgPSBwLnNlY29uZDsK
LSAgaWYgKHNlY29uZHMgPiBrRHVyYXRpb25NYXhTZWNvbmRzIHx8IHNlY29uZHMgPCBrRHVyYXRp
b25NaW5TZWNvbmRzKSB7Ci0gICAgcmV0dXJuIFN0YXR1cygKLSAgICAgICAgdXRpbDo6ZXJyb3I6
OklOVEVSTkFMLAotICAgICAgICBTdHJDYXQoIkR1cmF0aW9uIHNlY29uZHMgZXhjZWVkcyBsaW1p
dCBmb3IgZmllbGQ6ICIsIGZpZWxkX25hbWUpKTsKLSAgfQotCi0gIGlmIChuYW5vcyA8PSAta05h
bm9zUGVyU2Vjb25kIHx8IG5hbm9zID49IGtOYW5vc1BlclNlY29uZCkgewotICAgIHJldHVybiBT
dGF0dXMoCi0gICAgICAgIHV0aWw6OmVycm9yOjpJTlRFUk5BTCwKLSAgICAgICAgU3RyQ2F0KCJE
dXJhdGlvbiBuYW5vcyBleGNlZWRzIGxpbWl0IGZvciBmaWVsZDogIiwgZmllbGRfbmFtZSkpOwot
ICB9Ci0KLSAgc3RyaW5nIHNpZ24gPSAiIjsKLSAgaWYgKHNlY29uZHMgPCAwKSB7Ci0gICAgaWYg
KG5hbm9zID4gMCkgewotICAgICAgcmV0dXJuIFN0YXR1cyh1dGlsOjplcnJvcjo6SU5URVJOQUws
Ci0gICAgICAgICAgICAgICAgICAgIFN0ckNhdCgiRHVyYXRpb24gbmFub3MgaXMgbm9uLW5lZ2F0
aXZlLCBidXQgc2Vjb25kcyBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibmVnYXRp
dmUgZm9yIGZpZWxkOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSkp
OwotICAgIH0KLSAgICBzaWduID0gIi0iOwotICAgIHNlY29uZHMgPSAtc2Vjb25kczsKLSAgICBu
YW5vcyA9IC1uYW5vczsKLSAgfSBlbHNlIGlmIChzZWNvbmRzID09IDAgJiYgbmFub3MgPCAwKSB7
Ci0gICAgc2lnbiA9ICItIjsKLSAgICBuYW5vcyA9IC1uYW5vczsKLSAgfQotICBzdHJpbmcgZm9y
bWF0dGVkX2R1cmF0aW9uID0gU3RyaW5nUHJpbnRmKCIlcyVsbGQlc3MiLCBzaWduLmNfc3RyKCks
IHNlY29uZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9y
bWF0TmFub3MobmFub3MpLmNfc3RyKCkpOwotICBvdy0+UmVuZGVyU3RyaW5nKGZpZWxkX25hbWUs
IGZvcm1hdHRlZF9kdXJhdGlvbik7Ci0gIHJldHVybiBTdGF0dXM6Ok9LOwotfQotCi1TdGF0dXMg
UHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6OlJlbmRlckRvdWJsZShjb25zdCBQcm90b1N0cmVhbU9i
amVjdFNvdXJjZSogb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UgZmllbGRfbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFdyaXRlciog
b3cpIHsKLSAgdWludDMyIHRhZyA9IG9zLT5zdHJlYW1fLT5SZWFkVGFnKCk7Ci0gIHVpbnQ2NCBi
dWZmZXI2NCA9IDA7ICAvLyBkZWZhdWx0IHZhbHVlIG9mIERvdWJsZSB3cmFwcGVyIHZhbHVlCi0g
IGlmICh0YWcgIT0gMCkgewotICAgIG9zLT5zdHJlYW1fLT5SZWFkTGl0dGxlRW5kaWFuNjQoJmJ1
ZmZlcjY0KTsKLSAgICBvcy0+c3RyZWFtXy0+UmVhZFRhZygpOwotICB9Ci0gIG93LT5SZW5kZXJE
b3VibGUoZmllbGRfbmFtZSwgYml0X2Nhc3Q8ZG91YmxlPihidWZmZXI2NCkpOwotICByZXR1cm4g
U3RhdHVzOjpPSzsKLX0KLQotU3RhdHVzIFByb3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZW5kZXJG
bG9hdChjb25zdCBQcm90b1N0cmVhbU9iamVjdFNvdXJjZSogb3MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUm
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Z1BpZWNlIGZpZWxkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9iamVjdFdyaXRlciogb3cpIHsKLSAgdWludDMyIHRhZyA9IG9zLT5zdHJlYW1fLT5S
ZWFkVGFnKCk7Ci0gIHVpbnQzMiBidWZmZXIzMiA9IDA7ICAvLyBkZWZhdWx0IHZhbHVlIG9mIEZs
b2F0IHdyYXBwZXIgdmFsdWUKLSAgaWYgKHRhZyAhPSAwKSB7Ci0gICAgb3MtPnN0cmVhbV8tPlJl
YWRMaXR0bGVFbmRpYW4zMigmYnVmZmVyMzIpOwotICAgIG9zLT5zdHJlYW1fLT5SZWFkVGFnKCk7
Ci0gIH0KLSAgb3ctPlJlbmRlckZsb2F0KGZpZWxkX25hbWUsIGJpdF9jYXN0PGZsb2F0PihidWZm
ZXIzMikpOwotICByZXR1cm4gU3RhdHVzOjpPSzsKLX0KLQotU3RhdHVzIFByb3RvU3RyZWFtT2Jq
ZWN0U291cmNlOjpSZW5kZXJJbnQ2NChjb25zdCBQcm90b1N0cmVhbU9iamVjdFNvdXJjZSogb3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2ds
ZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0cmluZ1BpZWNlIGZpZWxkX25hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFdyaXRlciogb3cpIHsKLSAgdWludDMyIHRh
ZyA9IG9zLT5zdHJlYW1fLT5SZWFkVGFnKCk7Ci0gIHVpbnQ2NCBidWZmZXI2NCA9IDA7ICAvLyBk
ZWZhdWx0IHZhbHVlIG9mIEludDY0IHdyYXBwZXIgdmFsdWUKLSAgaWYgKHRhZyAhPSAwKSB7Ci0g
ICAgb3MtPnN0cmVhbV8tPlJlYWRWYXJpbnQ2NCgmYnVmZmVyNjQpOwotICAgIG9zLT5zdHJlYW1f
LT5SZWFkVGFnKCk7Ci0gIH0KLSAgb3ctPlJlbmRlckludDY0KGZpZWxkX25hbWUsIGJpdF9jYXN0
PGludDY0PihidWZmZXI2NCkpOwotICByZXR1cm4gU3RhdHVzOjpPSzsKLX0KLQotU3RhdHVzIFBy
b3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZW5kZXJVSW50NjQoY29uc3QgUHJvdG9TdHJlYW1PYmpl
Y3RTb3VyY2UqIG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlIGZpZWxkX25hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RXcml0ZXIqIG93
KSB7Ci0gIHVpbnQzMiB0YWcgPSBvcy0+c3RyZWFtXy0+UmVhZFRhZygpOwotICB1aW50NjQgYnVm
ZmVyNjQgPSAwOyAgLy8gZGVmYXVsdCB2YWx1ZSBvZiBVSW50NjQgd3JhcHBlciB2YWx1ZQotICBp
ZiAodGFnICE9IDApIHsKLSAgICBvcy0+c3RyZWFtXy0+UmVhZFZhcmludDY0KCZidWZmZXI2NCk7
Ci0gICAgb3MtPnN0cmVhbV8tPlJlYWRUYWcoKTsKLSAgfQotICBvdy0+UmVuZGVyVWludDY0KGZp
ZWxkX25hbWUsIGJpdF9jYXN0PHVpbnQ2ND4oYnVmZmVyNjQpKTsKLSAgcmV0dXJuIFN0YXR1czo6
T0s7Ci19Ci0KLVN0YXR1cyBQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6UmVuZGVySW50MzIoY29u
c3QgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2UqIG9zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBm
aWVsZF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
YmplY3RXcml0ZXIqIG93KSB7Ci0gIHVpbnQzMiB0YWcgPSBvcy0+c3RyZWFtXy0+UmVhZFRhZygp
OwotICB1aW50MzIgYnVmZmVyMzIgPSAwOyAgLy8gZGVmYXVsdCB2YWx1ZSBvZiBJbnQzMiB3cmFw
cGVyIHZhbHVlCi0gIGlmICh0YWcgIT0gMCkgewotICAgIG9zLT5zdHJlYW1fLT5SZWFkVmFyaW50
MzIoJmJ1ZmZlcjMyKTsKLSAgICBvcy0+c3RyZWFtXy0+UmVhZFRhZygpOwotICB9Ci0gIG93LT5S
ZW5kZXJJbnQzMihmaWVsZF9uYW1lLCBiaXRfY2FzdDxpbnQzMj4oYnVmZmVyMzIpKTsKLSAgcmV0
dXJuIFN0YXR1czo6T0s7Ci19Ci0KLVN0YXR1cyBQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6UmVu
ZGVyVUludDMyKGNvbnN0IFByb3RvU3RyZWFtT2JqZWN0U291cmNlKiBvcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6
OlR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdQaWVjZSBmaWVsZF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT2JqZWN0V3JpdGVyKiBvdykgewotICB1aW50MzIgdGFnID0gb3MtPnN0
cmVhbV8tPlJlYWRUYWcoKTsKLSAgdWludDMyIGJ1ZmZlcjMyID0gMDsgIC8vIGRlZmF1bHQgdmFs
dWUgb2YgVUludDMyIHdyYXBwZXIgdmFsdWUKLSAgaWYgKHRhZyAhPSAwKSB7Ci0gICAgb3MtPnN0
cmVhbV8tPlJlYWRWYXJpbnQzMigmYnVmZmVyMzIpOwotICAgIG9zLT5zdHJlYW1fLT5SZWFkVGFn
KCk7Ci0gIH0KLSAgb3ctPlJlbmRlclVpbnQzMihmaWVsZF9uYW1lLCBiaXRfY2FzdDx1aW50MzI+
KGJ1ZmZlcjMyKSk7Ci0gIHJldHVybiBTdGF0dXM6Ok9LOwotfQotCi1TdGF0dXMgUHJvdG9TdHJl
YW1PYmplY3RTb3VyY2U6OlJlbmRlckJvb2woY29uc3QgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2Uq
IG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdv
b2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nUGllY2UgZmllbGRfbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RXcml0ZXIqIG93KSB7Ci0gIHVpbnQzMiB0
YWcgPSBvcy0+c3RyZWFtXy0+UmVhZFRhZygpOwotICB1aW50NjQgYnVmZmVyNjQgPSAwOyAgLy8g
cmVzdWx0cyBpbiAnZmFsc2UnIHZhbHVlIGFzIGRlZmF1bHQsIHdoaWNoIGlzIHRoZQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiBCb29sIHdyYXBwZXIKLSAgaWYg
KHRhZyAhPSAwKSB7Ci0gICAgb3MtPnN0cmVhbV8tPlJlYWRWYXJpbnQ2NCgmYnVmZmVyNjQpOwot
ICAgIG9zLT5zdHJlYW1fLT5SZWFkVGFnKCk7Ci0gIH0KLSAgb3ctPlJlbmRlckJvb2woZmllbGRf
bmFtZSwgYnVmZmVyNjQgIT0gMCk7Ci0gIHJldHVybiBTdGF0dXM6Ok9LOwotfQotCi1TdGF0dXMg
UHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6OlJlbmRlclN0cmluZyhjb25zdCBQcm90b1N0cmVhbU9i
amVjdFNvdXJjZSogb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UgZmllbGRfbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFdyaXRlciog
b3cpIHsKLSAgdWludDMyIHRhZyA9IG9zLT5zdHJlYW1fLT5SZWFkVGFnKCk7Ci0gIHVpbnQzMiBi
dWZmZXIzMjsKLSAgc3RyaW5nIHN0cjsgIC8vIGRlZmF1bHQgdmFsdWUgb2YgZW1wdHkgZm9yIFN0
cmluZyB3cmFwcGVyCi0gIGlmICh0YWcgIT0gMCkgewotICAgIG9zLT5zdHJlYW1fLT5SZWFkVmFy
aW50MzIoJmJ1ZmZlcjMyKTsgIC8vIHN0cmluZyBzaXplLgotICAgIG9zLT5zdHJlYW1fLT5SZWFk
U3RyaW5nKCZzdHIsIGJ1ZmZlcjMyKTsKLSAgICBvcy0+c3RyZWFtXy0+UmVhZFRhZygpOwotICB9
Ci0gIG93LT5SZW5kZXJTdHJpbmcoZmllbGRfbmFtZSwgc3RyKTsKLSAgcmV0dXJuIFN0YXR1czo6
T0s7Ci19Ci0KLVN0YXR1cyBQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6UmVuZGVyQnl0ZXMoY29u
c3QgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2UqIG9zLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBm
aWVsZF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
YmplY3RXcml0ZXIqIG93KSB7Ci0gIHVpbnQzMiB0YWcgPSBvcy0+c3RyZWFtXy0+UmVhZFRhZygp
OwotICB1aW50MzIgYnVmZmVyMzI7Ci0gIHN0cmluZyBzdHI7Ci0gIGlmICh0YWcgIT0gMCkgewot
ICAgIG9zLT5zdHJlYW1fLT5SZWFkVmFyaW50MzIoJmJ1ZmZlcjMyKTsKLSAgICBvcy0+c3RyZWFt
Xy0+UmVhZFN0cmluZygmc3RyLCBidWZmZXIzMik7Ci0gICAgb3MtPnN0cmVhbV8tPlJlYWRUYWco
KTsKLSAgfQotICBvdy0+UmVuZGVyQnl0ZXMoZmllbGRfbmFtZSwgc3RyKTsKLSAgcmV0dXJuIFN0
YXR1czo6T0s7Ci19Ci0KLVN0YXR1cyBQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6UmVuZGVyU3Ry
dWN0KGNvbnN0IFByb3RvU3RyZWFtT2JqZWN0U291cmNlKiBvcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUm
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmdQaWVjZSBmaWVsZF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT2JqZWN0V3JpdGVyKiBvdykgewotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpG
aWVsZCogZmllbGQgPSBOVUxMOwotICB1aW50MzIgdGFnID0gb3MtPnN0cmVhbV8tPlJlYWRUYWco
KTsKLSAgb3ctPlN0YXJ0T2JqZWN0KGZpZWxkX25hbWUpOwotICB3aGlsZSAodGFnICE9IDApIHsK
LSAgICBmaWVsZCA9IG9zLT5GaW5kQW5kVmVyaWZ5RmllbGQodHlwZSwgdGFnKTsKLSAgICAvLyBn
b29nbGUucHJvdG9idWYuU3RydWN0IGhhcyBvbmx5IG9uZSBmaWVsZCB0aGF0IGlzIGEgbWFwLiBI
ZW5jZSB3ZSB1c2UKLSAgICAvLyBSZW5kZXJNYXAgdG8gcmVuZGVyIHRoYXQgZmllbGQuCi0gICAg
aWYgKG9zLT5Jc01hcCgqZmllbGQpKSB7Ci0gICAgICBBU1NJR05fT1JfUkVUVVJOKHRhZywgb3Mt
PlJlbmRlck1hcChmaWVsZCwgZmllbGRfbmFtZSwgdGFnLCBvdykpOwotICAgIH0KLSAgfQotICBv
dy0+RW5kT2JqZWN0KCk7Ci0gIHJldHVybiBTdGF0dXM6Ok9LOwotfQotCi1TdGF0dXMgUHJvdG9T
dHJlYW1PYmplY3RTb3VyY2U6OlJlbmRlclN0cnVjdFZhbHVlKAotICAgIGNvbnN0IFByb3RvU3Ry
ZWFtT2JqZWN0U291cmNlKiBvcywgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZSwK
LSAgICBTdHJpbmdQaWVjZSBmaWVsZF9uYW1lLCBPYmplY3RXcml0ZXIqIG93KSB7Ci0gIGNvbnN0
IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkKiBmaWVsZCA9IE5VTEw7Ci0gIGZvciAodWludDMyIHRh
ZyA9IG9zLT5zdHJlYW1fLT5SZWFkVGFnKCk7IHRhZyAhPSAwOwotICAgICAgIHRhZyA9IG9zLT5z
dHJlYW1fLT5SZWFkVGFnKCkpIHsKLSAgICBmaWVsZCA9IG9zLT5GaW5kQW5kVmVyaWZ5RmllbGQo
dHlwZSwgdGFnKTsKLSAgICBpZiAoZmllbGQgPT0gTlVMTCkgewotICAgICAgV2lyZUZvcm1hdDo6
U2tpcEZpZWxkKG9zLT5zdHJlYW1fLCB0YWcsIE5VTEwpOwotICAgICAgY29udGludWU7Ci0gICAg
fQotICAgIFJFVFVSTl9JRl9FUlJPUihvcy0+UmVuZGVyRmllbGQoZmllbGQsIGZpZWxkX25hbWUs
IG93KSk7Ci0gIH0KLSAgcmV0dXJuIFN0YXR1czo6T0s7Ci19Ci0KLS8vIFRPRE8oc2thcnZhamUp
OiBBdm9pZCBjb2RlIGR1cGxpY2F0aW9uIG9mIGZvciBsb29wcyBhbmQgU2tpcEZpZWxkIGxvZ2lj
LgotU3RhdHVzIFByb3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZW5kZXJTdHJ1Y3RMaXN0VmFsdWUo
Ci0gICAgY29uc3QgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2UqIG9zLCBjb25zdCBnb29nbGU6OnBy
b3RvYnVmOjpUeXBlJiB0eXBlLAotICAgIFN0cmluZ1BpZWNlIGZpZWxkX25hbWUsIE9iamVjdFdy
aXRlciogb3cpIHsKLSAgdWludDMyIHRhZyA9IG9zLT5zdHJlYW1fLT5SZWFkVGFnKCk7Ci0KLSAg
Ly8gUmVuZGVyIGVtcHR5IGxpc3Qgd2hlbiB3ZSBmaW5kIGVtcHR5IExpc3RWYWx1ZSBtZXNzYWdl
LgotICBpZiAodGFnID09IDApIHsKLSAgICBvdy0+U3RhcnRMaXN0KGZpZWxkX25hbWUpOwotICAg
IG93LT5FbmRMaXN0KCk7Ci0gICAgcmV0dXJuIFN0YXR1czo6T0s7Ci0gIH0KLQotICB3aGlsZSAo
dGFnICE9IDApIHsKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQgPSBv
cy0+RmluZEFuZFZlcmlmeUZpZWxkKHR5cGUsIHRhZyk7Ci0gICAgaWYgKGZpZWxkID09IE5VTEwp
IHsKLSAgICAgIFdpcmVGb3JtYXQ6OlNraXBGaWVsZChvcy0+c3RyZWFtXywgdGFnLCBOVUxMKTsK
LSAgICAgIHRhZyA9IG9zLT5zdHJlYW1fLT5SZWFkVGFnKCk7Ci0gICAgICBjb250aW51ZTsKLSAg
ICB9Ci0gICAgQVNTSUdOX09SX1JFVFVSTih0YWcsIG9zLT5SZW5kZXJMaXN0KGZpZWxkLCBmaWVs
ZF9uYW1lLCB0YWcsIG93KSk7Ci0gIH0KLSAgcmV0dXJuIFN0YXR1czo6T0s7Ci19Ci0KLVN0YXR1
cyBQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6UmVuZGVyQW55KGNvbnN0IFByb3RvU3RyZWFtT2Jq
ZWN0U291cmNlKiBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBmaWVsZF9uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0V3JpdGVyKiBvdykgewotICAv
LyBBbiBBbnkgaXMgb2YgdGhlIGZvcm0geyBzdHJpbmcgdHlwZV91cmwgPSAxOyBieXRlcyB2YWx1
ZSA9IDI7IH0KLSAgdWludDMyIHRhZzsKLSAgc3RyaW5nIHR5cGVfdXJsOwotICBzdHJpbmcgdmFs
dWU7Ci0KLSAgLy8gRmlyc3QgcmVhZCBvdXQgdGhlIHR5cGVfdXJsIGFuZCB2YWx1ZSBmcm9tIHRo
ZSBwcm90byBzdHJlYW0KLSAgZm9yICh0YWcgPSBvcy0+c3RyZWFtXy0+UmVhZFRhZygpOyB0YWcg
IT0gMDsgdGFnID0gb3MtPnN0cmVhbV8tPlJlYWRUYWcoKSkgewotICAgIGNvbnN0IGdvb2dsZTo6
cHJvdG9idWY6OkZpZWxkKiBmaWVsZCA9IG9zLT5GaW5kQW5kVmVyaWZ5RmllbGQodHlwZSwgdGFn
KTsKLSAgICBpZiAoZmllbGQgPT0gTlVMTCkgewotICAgICAgV2lyZUZvcm1hdDo6U2tpcEZpZWxk
KG9zLT5zdHJlYW1fLCB0YWcsIE5VTEwpOwotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIC8v
ICd0eXBlX3VybCcgaGFzIGZpZWxkIG51bWJlciBvZiAxIGFuZCAndmFsdWUnIGhhcyBmaWVsZCBu
dW1iZXIgMgotICAgIC8vIC8vZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90bwotICAgIGlmIChmaWVs
ZC0+bnVtYmVyKCkgPT0gMSkgewotICAgICAgLy8gcmVhZCB0eXBlX3VybAotICAgICAgdWludDMy
IHR5cGVfdXJsX3NpemU7Ci0gICAgICBvcy0+c3RyZWFtXy0+UmVhZFZhcmludDMyKCZ0eXBlX3Vy
bF9zaXplKTsKLSAgICAgIG9zLT5zdHJlYW1fLT5SZWFkU3RyaW5nKCZ0eXBlX3VybCwgdHlwZV91
cmxfc2l6ZSk7Ci0gICAgfSBlbHNlIGlmIChmaWVsZC0+bnVtYmVyKCkgPT0gMikgewotICAgICAg
Ly8gcmVhZCB2YWx1ZQotICAgICAgdWludDMyIHZhbHVlX3NpemU7Ci0gICAgICBvcy0+c3RyZWFt
Xy0+UmVhZFZhcmludDMyKCZ2YWx1ZV9zaXplKTsKLSAgICAgIG9zLT5zdHJlYW1fLT5SZWFkU3Ry
aW5nKCZ2YWx1ZSwgdmFsdWVfc2l6ZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gSWYgdGhlcmUgaXMg
bm8gdmFsdWUsIHdlIGRvbid0IGxvb2t1cCB0aGUgdHlwZSwgd2UganVzdCBvdXRwdXQgaXQgKGlm
Ci0gIC8vIHByZXNlbnQpLiBJZiBib3RoIHR5cGUgYW5kIHZhbHVlIGFyZSBlbXB0eSB3ZSBvdXRw
dXQgYW4gZW1wdHkgb2JqZWN0LgotICBpZiAodmFsdWUuZW1wdHkoKSkgewotICAgIG93LT5TdGFy
dE9iamVjdChmaWVsZF9uYW1lKTsKLSAgICBpZiAoIXR5cGVfdXJsLmVtcHR5KCkpIHsKLSAgICAg
IG93LT5SZW5kZXJTdHJpbmcoIkB0eXBlIiwgdHlwZV91cmwpOwotICAgIH0KLSAgICBvdy0+RW5k
T2JqZWN0KCk7Ci0gICAgcmV0dXJuIHV0aWw6OlN0YXR1czo6T0s7Ci0gIH0KLQotICAvLyBJZiB0
aGVyZSBpcyBhIHZhbHVlIGJ1dCBubyB0eXBlLCB3ZSBjYW5ub3QgcmVuZGVyIGl0LCBzbyByZXBv
cnQgYW4gZXJyb3IuCi0gIGlmICh0eXBlX3VybC5lbXB0eSgpKSB7Ci0gICAgLy8gVE9ETyhzdmVu
KTogQWRkIGFuIGV4dGVybmFsIG1lc3NhZ2Ugb25jZSB0aG9zZSBhcmUgcmVhZHkuCi0gICAgcmV0
dXJuIHV0aWw6OlN0YXR1cyh1dGlsOjplcnJvcjo6SU5URVJOQUwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAiSW52YWxpZCBBbnksIHRoZSB0eXBlX3VybCBpcyBtaXNzaW5nLiIpOwotICB9Ci0K
LSAgdXRpbDo6U3RhdHVzT3I8Y29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSo+IHJlc29sdmVk
X3R5cGUgPQotICAgICAgb3MtPnR5cGVpbmZvXy0+UmVzb2x2ZVR5cGVVcmwodHlwZV91cmwpOwot
Ci0gIGlmICghcmVzb2x2ZWRfdHlwZS5vaygpKSB7Ci0gICAgLy8gQ29udmVydCBpbnRvIGFuIGlu
dGVybmFsIGVycm9yLCBzaW5jZSB0aGlzIG1lYW5zIHRoZSBiYWNrZW5kIGdhdmUgdXMKLSAgICAv
LyBhbiBpbnZhbGlkIHJlc3BvbnNlIChtaXNzaW5nIG9yIGludmFsaWQgdHlwZSBpbmZvcm1hdGlv
bikuCi0gICAgcmV0dXJuIHV0aWw6OlN0YXR1cyh1dGlsOjplcnJvcjo6SU5URVJOQUwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXNvbHZlZF90eXBlLnN0YXR1cygpLmVycm9yX21lc3NhZ2Uo
KSk7Ci0gIH0KLSAgLy8gbmVzdGVkX3R5cGUgY2Fubm90IGJlIG51bGwgYXQgdGhpcyB0aW1lLgot
ICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKiBuZXN0ZWRfdHlwZSA9IHJlc29sdmVkX3R5
cGUuVmFsdWVPckRpZSgpOwotCi0gIGdvb2dsZTo6cHJvdG9idWY6OmlvOjpBcnJheUlucHV0U3Ry
ZWFtIHplcm9fY29weV9zdHJlYW0odmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCkpOwotICBnb29n
bGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSBpbl9zdHJlYW0oJnplcm9fY29weV9z
dHJlYW0pOwotICAvLyBXZSBrbm93IHRoZSB0eXBlIHNvIHdlIGNhbiByZW5kZXIgaXQuIFJlY3Vy
c2l2ZWx5IHBhcnNlIHRoZSBuZXN0ZWQgc3RyZWFtCi0gIC8vIHVzaW5nIGEgbmVzdGVkIFByb3Rv
U3RyZWFtT2JqZWN0U291cmNlIHVzaW5nIG91ciBuZXN0ZWQgdHlwZSBpbmZvcm1hdGlvbi4KLSAg
UHJvdG9TdHJlYW1PYmplY3RTb3VyY2UgbmVzdGVkX29zKCZpbl9zdHJlYW0sIG9zLT50eXBlaW5m
b18sICpuZXN0ZWRfdHlwZSk7Ci0KLSAgLy8gV2UgbWFudWFsbHkgY2FsbCBzdGFydCBhbmQgZW5k
IG9iamVjdCBoZXJlIHNvIHdlIGNhbiBpbmplY3QgdGhlIEB0eXBlLgotICBvdy0+U3RhcnRPYmpl
Y3QoZmllbGRfbmFtZSk7Ci0gIG93LT5SZW5kZXJTdHJpbmcoIkB0eXBlIiwgdHlwZV91cmwpOwot
ICB1dGlsOjpTdGF0dXMgcmVzdWx0ID0KLSAgICAgIG5lc3RlZF9vcy5Xcml0ZU1lc3NhZ2UobmVz
dGVkX29zLnR5cGVfLCAidmFsdWUiLCAwLCBmYWxzZSwgb3cpOwotICBvdy0+RW5kT2JqZWN0KCk7
Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0YXR1cyBQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6
UmVuZGVyRmllbGRNYXNrKAotICAgIGNvbnN0IFByb3RvU3RyZWFtT2JqZWN0U291cmNlKiBvcywg
Y29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZSwKLSAgICBTdHJpbmdQaWVjZSBmaWVs
ZF9uYW1lLCBPYmplY3RXcml0ZXIqIG93KSB7Ci0gIHN0cmluZyBjb21iaW5lZDsKLSAgdWludDMy
IGJ1ZmZlcjMyOwotICB1aW50MzIgcGF0aHNfZmllbGRfdGFnID0gMDsKLSAgZm9yICh1aW50MzIg
dGFnID0gb3MtPnN0cmVhbV8tPlJlYWRUYWcoKTsgdGFnICE9IDA7Ci0gICAgICAgdGFnID0gb3Mt
PnN0cmVhbV8tPlJlYWRUYWcoKSkgewotICAgIGlmIChwYXRoc19maWVsZF90YWcgPT0gMCkgewot
ICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIGZpZWxkID0gb3MtPkZpbmRBbmRW
ZXJpZnlGaWVsZCh0eXBlLCB0YWcpOwotICAgICAgaWYgKGZpZWxkICE9IE5VTEwgJiYgZmllbGQt
Pm51bWJlcigpID09IDEgJiYKLSAgICAgICAgICBmaWVsZC0+bmFtZSgpID09ICJwYXRocyIpIHsK
LSAgICAgICAgcGF0aHNfZmllbGRfdGFnID0gdGFnOwotICAgICAgfQotICAgIH0KLSAgICBpZiAo
cGF0aHNfZmllbGRfdGFnICE9IHRhZykgewotICAgICAgcmV0dXJuIHV0aWw6OlN0YXR1cyh1dGls
OjplcnJvcjo6SU5URVJOQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIEZp
ZWxkTWFzaywgdW5leHBlY3RlZCBmaWVsZC4iKTsKLSAgICB9Ci0gICAgc3RyaW5nIHN0cjsKLSAg
ICBvcy0+c3RyZWFtXy0+UmVhZFZhcmludDMyKCZidWZmZXIzMik7ICAvLyBzdHJpbmcgc2l6ZS4K
LSAgICBvcy0+c3RyZWFtXy0+UmVhZFN0cmluZygmc3RyLCBidWZmZXIzMik7Ci0gICAgaWYgKCFj
b21iaW5lZC5lbXB0eSgpKSB7Ci0gICAgICBjb21iaW5lZC5hcHBlbmQoIiwiKTsKLSAgICB9Ci0g
ICAgY29tYmluZWQuYXBwZW5kKENvbnZlcnRGaWVsZE1hc2tQYXRoKHN0ciwgJlRvQ2FtZWxDYXNl
KSk7Ci0gIH0KLSAgb3ctPlJlbmRlclN0cmluZyhmaWVsZF9uYW1lLCBjb21iaW5lZCk7Ci0gIHJl
dHVybiBTdGF0dXM6Ok9LOwotfQotCi0KLWhhc2hfbWFwPHN0cmluZywgUHJvdG9TdHJlYW1PYmpl
Y3RTb3VyY2U6OlR5cGVSZW5kZXJlcj4qCi0gICAgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6OnJl
bmRlcmVyc18gPSBOVUxMOwotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShzb3VyY2VfcmVu
ZGVyZXJzX2luaXRfKTsKLQotdm9pZCBQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6SW5pdFJlbmRl
cmVyTWFwKCkgewotICByZW5kZXJlcnNfID0gbmV3IGhhc2hfbWFwPHN0cmluZywgUHJvdG9TdHJl
YW1PYmplY3RTb3VyY2U6OlR5cGVSZW5kZXJlcj4oKTsKLSAgKCpyZW5kZXJlcnNfKVsiZ29vZ2xl
LnByb3RvYnVmLlRpbWVzdGFtcCJdID0KLSAgICAgICZQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6
UmVuZGVyVGltZXN0YW1wOwotICAoKnJlbmRlcmVyc18pWyJnb29nbGUucHJvdG9idWYuRHVyYXRp
b24iXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6OlJlbmRlckR1cmF0aW9uOwot
ICAoKnJlbmRlcmVyc18pWyJnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUiXSA9Ci0gICAgICAm
UHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6OlJlbmRlckRvdWJsZTsKLSAgKCpyZW5kZXJlcnNfKVsi
Z29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWUiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RT
b3VyY2U6OlJlbmRlckZsb2F0OwotICAoKnJlbmRlcmVyc18pWyJnb29nbGUucHJvdG9idWYuSW50
NjRWYWx1ZSJdID0KLSAgICAgICZQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6UmVuZGVySW50NjQ7
Ci0gICgqcmVuZGVyZXJzXylbImdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZSJdID0KLSAgICAg
ICZQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6UmVuZGVyVUludDY0OwotICAoKnJlbmRlcmVyc18p
WyJnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZSJdID0KLSAgICAgICZQcm90b1N0cmVhbU9iamVj
dFNvdXJjZTo6UmVuZGVySW50MzI7Ci0gICgqcmVuZGVyZXJzXylbImdvb2dsZS5wcm90b2J1Zi5V
SW50MzJWYWx1ZSJdID0KLSAgICAgICZQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6UmVuZGVyVUlu
dDMyOwotICAoKnJlbmRlcmVyc18pWyJnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlIl0gPQotICAg
ICAgJlByb3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZW5kZXJCb29sOwotICAoKnJlbmRlcmVyc18p
WyJnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmpl
Y3RTb3VyY2U6OlJlbmRlclN0cmluZzsKLSAgKCpyZW5kZXJlcnNfKVsiZ29vZ2xlLnByb3RvYnVm
LkJ5dGVzVmFsdWUiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6OlJlbmRlckJ5
dGVzOwotICAoKnJlbmRlcmVyc18pWyJnb29nbGUucHJvdG9idWYuQW55Il0gPSAmUHJvdG9TdHJl
YW1PYmplY3RTb3VyY2U6OlJlbmRlckFueTsKLSAgKCpyZW5kZXJlcnNfKVsiZ29vZ2xlLnByb3Rv
YnVmLlN0cnVjdCJdID0KLSAgICAgICZQcm90b1N0cmVhbU9iamVjdFNvdXJjZTo6UmVuZGVyU3Ry
dWN0OwotICAoKnJlbmRlcmVyc18pWyJnb29nbGUucHJvdG9idWYuVmFsdWUiXSA9Ci0gICAgICAm
UHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6OlJlbmRlclN0cnVjdFZhbHVlOwotICAoKnJlbmRlcmVy
c18pWyJnb29nbGUucHJvdG9idWYuTGlzdFZhbHVlIl0gPQotICAgICAgJlByb3RvU3RyZWFtT2Jq
ZWN0U291cmNlOjpSZW5kZXJTdHJ1Y3RMaXN0VmFsdWU7Ci0gICgqcmVuZGVyZXJzXylbImdvb2ds
ZS5wcm90b2J1Zi5GaWVsZE1hc2siXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6
OlJlbmRlckZpZWxkTWFzazsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6T25TaHV0
ZG93bigmRGVsZXRlUmVuZGVyZXJNYXApOwotfQotCi12b2lkIFByb3RvU3RyZWFtT2JqZWN0U291
cmNlOjpEZWxldGVSZW5kZXJlck1hcCgpIHsKLSAgZGVsZXRlIFByb3RvU3RyZWFtT2JqZWN0U291
cmNlOjpyZW5kZXJlcnNfOwotICByZW5kZXJlcnNfID0gTlVMTDsKLX0KLQotLy8gc3RhdGljCi1Q
cm90b1N0cmVhbU9iamVjdFNvdXJjZTo6VHlwZVJlbmRlcmVyKgotUHJvdG9TdHJlYW1PYmplY3RT
b3VyY2U6OkZpbmRUeXBlUmVuZGVyZXIoY29uc3Qgc3RyaW5nJiB0eXBlX3VybCkgewotICA6Omdv
b2dsZTo6cHJvdG9idWY6Okdvb2dsZU9uY2VJbml0KCZzb3VyY2VfcmVuZGVyZXJzX2luaXRfLCAm
SW5pdFJlbmRlcmVyTWFwKTsKLSAgcmV0dXJuIEZpbmRPck51bGwoKnJlbmRlcmVyc18sIHR5cGVf
dXJsKTsKLX0KLQotU3RhdHVzIFByb3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZW5kZXJGaWVsZCgK
LSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQsIFN0cmluZ1BpZWNlIGZp
ZWxkX25hbWUsCi0gICAgT2JqZWN0V3JpdGVyKiBvdykgY29uc3QgewotICAvLyBTaG9ydC1jaXJj
dWl0IG1lc3NhZ2UgdHlwZXMgYXMgaXQgdGVuZHMgdG8gY2FsbCBXcml0ZU1lc3NhZ2UgcmVjdXJz
aXZlbHkKLSAgLy8gYW5kIGVuZHMgdXAgdXNpbmcgYSBsb3Qgb2Ygc3RhY2sgc3BhY2UuIEtlZXAg
dGhlIHN0YWNrIHVzYWdlIG9mIHRoaXMKLSAgLy8gbWVzc2FnZSBzbWFsbCBpbiBvcmRlciB0byBw
cmVzZXJ2ZSBzdGFjayBzcGFjZSBhbmQgbm90IGNyYXNoLgotICBpZiAoZmllbGQtPmtpbmQoKSA9
PSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfTUVTU0FHRSkgewotICAgIHVpbnQz
MiBidWZmZXIzMjsKLSAgICBzdHJlYW1fLT5SZWFkVmFyaW50MzIoJmJ1ZmZlcjMyKTsgIC8vIG1l
c3NhZ2UgbGVuZ3RoCi0gICAgaW50IG9sZF9saW1pdCA9IHN0cmVhbV8tPlB1c2hMaW1pdChidWZm
ZXIzMik7Ci0gICAgLy8gR2V0IHRoZSBuZXN0ZWQgbWVzc2FnZSB0eXBlIGZvciB0aGlzIGZpZWxk
LgotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUqIHR5cGUgPQotICAgICAgICB0eXBl
aW5mb18tPkdldFR5cGVCeVR5cGVVcmwoZmllbGQtPnR5cGVfdXJsKCkpOwotICAgIGlmICh0eXBl
ID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBTdGF0dXModXRpbDo6ZXJyb3I6OklOVEVSTkFMLAot
ICAgICAgICAgICAgICAgICAgICBTdHJDYXQoIkludmFsaWQgY29uZmlndXJhdGlvbi4gQ291bGQg
bm90IGZpbmQgdGhlIHR5cGU6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC0+
dHlwZV91cmwoKSkpOwotICAgIH0KLQotICAgIC8vIFNob3J0LWNpcmN1aXQgYW55IHNwZWNpYWwg
dHlwZSByZW5kZXJpbmcgdG8gc2F2ZSBjYWxsLXN0YWNrIHNwYWNlLgotICAgIGNvbnN0IFR5cGVS
ZW5kZXJlciogdHlwZV9yZW5kZXJlciA9IEZpbmRUeXBlUmVuZGVyZXIodHlwZS0+bmFtZSgpKTsK
LQotICAgIGJvb2wgdXNlX3R5cGVfcmVuZGVyZXIgPSB0eXBlX3JlbmRlcmVyICE9IE5VTEw7Ci0K
LSAgICBpZiAodXNlX3R5cGVfcmVuZGVyZXIpIHsKLSAgICAgIFJFVFVSTl9JRl9FUlJPUigoKnR5
cGVfcmVuZGVyZXIpKHRoaXMsICp0eXBlLCBmaWVsZF9uYW1lLCBvdykpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBSRVRVUk5fSUZfRVJST1IoSW5jcmVtZW50UmVjdXJzaW9uRGVwdGgodHlwZS0+bmFt
ZSgpLCBmaWVsZF9uYW1lKSk7Ci0gICAgICBSRVRVUk5fSUZfRVJST1IoV3JpdGVNZXNzYWdlKCp0
eXBlLCBmaWVsZF9uYW1lLCAwLCB0cnVlLCBvdykpOwotICAgICAgLS1yZWN1cnNpb25fZGVwdGhf
OwotICAgIH0KLSAgICBpZiAoIXN0cmVhbV8tPkNvbnN1bWVkRW50aXJlTWVzc2FnZSgpKSB7Ci0g
ICAgICByZXR1cm4gU3RhdHVzKHV0aWw6OmVycm9yOjpJTlZBTElEX0FSR1VNRU5ULAotICAgICAg
ICAgICAgICAgICAgICAiTmVzdGVkIHByb3RvY29sIG1lc3NhZ2Ugbm90IHBhcnNlZCBpbiBpdHMg
ZW50aXJldHkuIik7Ci0gICAgfQotICAgIHN0cmVhbV8tPlBvcExpbWl0KG9sZF9saW1pdCk7Ci0g
IH0gZWxzZSB7Ci0gICAgLy8gUmVuZGVyIGFsbCBvdGhlciBub24tbWVzc2FnZSB0eXBlcy4KLSAg
ICByZXR1cm4gUmVuZGVyTm9uTWVzc2FnZUZpZWxkKGZpZWxkLCBmaWVsZF9uYW1lLCBvdyk7Ci0g
IH0KLSAgcmV0dXJuIFN0YXR1czo6T0s7Ci19Ci0KLVN0YXR1cyBQcm90b1N0cmVhbU9iamVjdFNv
dXJjZTo6UmVuZGVyTm9uTWVzc2FnZUZpZWxkKAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkKiBmaWVsZCwgU3RyaW5nUGllY2UgZmllbGRfbmFtZSwKLSAgICBPYmplY3RXcml0ZXIq
IG93KSBjb25zdCB7Ci0gIC8vIFRlbXBvcmFyeSBidWZmZXJzIG9mIGRpZmZlcmVudCB0eXBlcy4K
LSAgdWludDMyIGJ1ZmZlcjMyOwotICB1aW50NjQgYnVmZmVyNjQ7Ci0gIHN0cmluZyBzdHJidWZm
ZXI7Ci0gIHN3aXRjaCAoZmllbGQtPmtpbmQoKSkgewotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1
Zjo6RmllbGRfS2luZF9UWVBFX0JPT0w6IHsKLSAgICAgIHN0cmVhbV8tPlJlYWRWYXJpbnQ2NCgm
YnVmZmVyNjQpOwotICAgICAgb3ctPlJlbmRlckJvb2woZmllbGRfbmFtZSwgYnVmZmVyNjQgIT0g
MCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZF9LaW5kX1RZUEVfSU5UMzI6IHsKLSAgICAgIHN0cmVhbV8tPlJlYWRWYXJpbnQzMigmYnVmZmVy
MzIpOwotICAgICAgb3ctPlJlbmRlckludDMyKGZpZWxkX25hbWUsIGJpdF9jYXN0PGludDMyPihi
dWZmZXIzMikpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1
Zjo6RmllbGRfS2luZF9UWVBFX0lOVDY0OiB7Ci0gICAgICBzdHJlYW1fLT5SZWFkVmFyaW50NjQo
JmJ1ZmZlcjY0KTsKLSAgICAgIG93LT5SZW5kZXJJbnQ2NChmaWVsZF9uYW1lLCBiaXRfY2FzdDxp
bnQ2ND4oYnVmZmVyNjQpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGdvb2dsZTo6
cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9VSU5UMzI6IHsKLSAgICAgIHN0cmVhbV8tPlJlYWRW
YXJpbnQzMigmYnVmZmVyMzIpOwotICAgICAgb3ctPlJlbmRlclVpbnQzMihmaWVsZF9uYW1lLCBi
aXRfY2FzdDx1aW50MzI+KGJ1ZmZlcjMyKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfVUlOVDY0OiB7Ci0gICAgICBzdHJl
YW1fLT5SZWFkVmFyaW50NjQoJmJ1ZmZlcjY0KTsKLSAgICAgIG93LT5SZW5kZXJVaW50NjQoZmll
bGRfbmFtZSwgYml0X2Nhc3Q8dWludDY0PihidWZmZXI2NCkpOwotICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX1NJTlQzMjogewot
ICAgICAgc3RyZWFtXy0+UmVhZFZhcmludDMyKCZidWZmZXIzMik7Ci0gICAgICBvdy0+UmVuZGVy
SW50MzIoZmllbGRfbmFtZSwgV2lyZUZvcm1hdExpdGU6OlppZ1phZ0RlY29kZTMyKGJ1ZmZlcjMy
KSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVs
ZF9LaW5kX1RZUEVfU0lOVDY0OiB7Ci0gICAgICBzdHJlYW1fLT5SZWFkVmFyaW50NjQoJmJ1ZmZl
cjY0KTsKLSAgICAgIG93LT5SZW5kZXJJbnQ2NChmaWVsZF9uYW1lLCBXaXJlRm9ybWF0TGl0ZTo6
WmlnWmFnRGVjb2RlNjQoYnVmZmVyNjQpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9TRklYRUQzMjogewotICAgICAgc3Ry
ZWFtXy0+UmVhZExpdHRsZUVuZGlhbjMyKCZidWZmZXIzMik7Ci0gICAgICBvdy0+UmVuZGVySW50
MzIoZmllbGRfbmFtZSwgYml0X2Nhc3Q8aW50MzI+KGJ1ZmZlcjMyKSk7Ci0gICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfU0ZJWEVE
NjQ6IHsKLSAgICAgIHN0cmVhbV8tPlJlYWRMaXR0bGVFbmRpYW42NCgmYnVmZmVyNjQpOwotICAg
ICAgb3ctPlJlbmRlckludDY0KGZpZWxkX25hbWUsIGJpdF9jYXN0PGludDY0PihidWZmZXI2NCkp
OwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRf
S2luZF9UWVBFX0ZJWEVEMzI6IHsKLSAgICAgIHN0cmVhbV8tPlJlYWRMaXR0bGVFbmRpYW4zMigm
YnVmZmVyMzIpOwotICAgICAgb3ctPlJlbmRlclVpbnQzMihmaWVsZF9uYW1lLCBiaXRfY2FzdDx1
aW50MzI+KGJ1ZmZlcjMyKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6
OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfRklYRUQ2NDogewotICAgICAgc3RyZWFtXy0+UmVh
ZExpdHRsZUVuZGlhbjY0KCZidWZmZXI2NCk7Ci0gICAgICBvdy0+UmVuZGVyVWludDY0KGZpZWxk
X25hbWUsIGJpdF9jYXN0PHVpbnQ2ND4oYnVmZmVyNjQpKTsKLSAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9GTE9BVDogewotICAg
ICAgc3RyZWFtXy0+UmVhZExpdHRsZUVuZGlhbjMyKCZidWZmZXIzMik7Ci0gICAgICBvdy0+UmVu
ZGVyRmxvYXQoZmllbGRfbmFtZSwgYml0X2Nhc3Q8ZmxvYXQ+KGJ1ZmZlcjMyKSk7Ci0gICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVf
RE9VQkxFOiB7Ci0gICAgICBzdHJlYW1fLT5SZWFkTGl0dGxlRW5kaWFuNjQoJmJ1ZmZlcjY0KTsK
LSAgICAgIG93LT5SZW5kZXJEb3VibGUoZmllbGRfbmFtZSwgYml0X2Nhc3Q8ZG91YmxlPihidWZm
ZXI2NCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6
RmllbGRfS2luZF9UWVBFX0VOVU06IHsKLSAgICAgIHN0cmVhbV8tPlJlYWRWYXJpbnQzMigmYnVm
ZmVyMzIpOwotCi0gICAgICAvLyBJZiB0aGUgZmllbGQgcmVwcmVzZW50cyBhbiBleHBsaWNpdCBO
VUxMIHZhbHVlLCByZW5kZXIgbnVsbC4KLSAgICAgIGlmIChmaWVsZC0+dHlwZV91cmwoKSA9PSBr
U3RydWN0TnVsbFZhbHVlVHlwZVVybCkgewotICAgICAgICBvdy0+UmVuZGVyTnVsbChmaWVsZF9u
YW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCB0aGUgbmVzdGVk
IGVudW0gdHlwZSBmb3IgdGhpcyBmaWVsZC4KLSAgICAgIC8vIFRPRE8oc2thcnZhamUpOiBBdm9p
ZCBzdHJpbmcgbWFuaXB1bGF0aW9uLiBGaW5kIHdheXMgdG8gc3BlZWQgdGhpcwotICAgICAgLy8g
dXAuCi0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpFbnVtKiBlbiA9Ci0gICAgICAgICAg
dHlwZWluZm9fLT5HZXRFbnVtQnlUeXBlVXJsKGZpZWxkLT50eXBlX3VybCgpKTsKLSAgICAgIC8v
IExvb2t1cCB0aGUgbmFtZSBvZiB0aGUgZW51bSwgYW5kIHJlbmRlciB0aGF0LiBTa2lwcyB1bmtu
b3duIGVudW1zLgotICAgICAgaWYgKGVuICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgZ29vZ2xl
Ojpwcm90b2J1Zjo6RW51bVZhbHVlKiBlbnVtX3ZhbHVlID0KLSAgICAgICAgICAgIEZpbmRFbnVt
VmFsdWVCeU51bWJlcigqZW4sIGJ1ZmZlcjMyKTsKLSAgICAgICAgaWYgKGVudW1fdmFsdWUgIT0g
TlVMTCkgewotICAgICAgICAgIGlmICh1c2VfbG93ZXJfY2FtZWxfZm9yX2VudW1zXykKLSAgICAg
ICAgICAgIG93LT5SZW5kZXJTdHJpbmcoZmllbGRfbmFtZSwgVG9DYW1lbENhc2UoZW51bV92YWx1
ZS0+bmFtZSgpKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3ctPlJlbmRlclN0cmlu
ZyhmaWVsZF9uYW1lLCBlbnVtX3ZhbHVlLT5uYW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBHT09HTEVfTE9HKElORk8pIDw8ICJVbmtub3duIGVudW0gc2tpcHBlZDog
IiA8PCBmaWVsZC0+dHlwZV91cmwoKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9TVFJJTkc6IHsKLSAgICAg
IHN0cmVhbV8tPlJlYWRWYXJpbnQzMigmYnVmZmVyMzIpOyAgLy8gc3RyaW5nIHNpemUuCi0gICAg
ICBzdHJlYW1fLT5SZWFkU3RyaW5nKCZzdHJidWZmZXIsIGJ1ZmZlcjMyKTsKLSAgICAgIG93LT5S
ZW5kZXJTdHJpbmcoZmllbGRfbmFtZSwgc3RyYnVmZmVyKTsKLSAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9CWVRFUzogewotICAg
ICAgc3RyZWFtXy0+UmVhZFZhcmludDMyKCZidWZmZXIzMik7ICAvLyBieXRlcyBzaXplLgotICAg
ICAgc3RyZWFtXy0+UmVhZFN0cmluZygmc3RyYnVmZmVyLCBidWZmZXIzMik7Ci0gICAgICBvdy0+
UmVuZGVyQnl0ZXMoZmllbGRfbmFtZSwgc3RyYnVmZmVyKTsKLSAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIFN0YXR1czo6T0s7Ci19
Ci0KLS8vIFRPRE8oc2thcnZhamUpOiBGaXggdGhpcyB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9u
LgotY29uc3Qgc3RyaW5nIFByb3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZWFkRmllbGRWYWx1ZUFz
U3RyaW5nKAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVsZCkgY29uc3Qg
ewotICBzdHJpbmcgcmVzdWx0OwotICBzd2l0Y2ggKGZpZWxkLmtpbmQoKSkgewotICAgIGNhc2Ug
Z29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX0JPT0w6IHsKLSAgICAgIHVpbnQ2NCBi
dWZmZXI2NDsKLSAgICAgIHN0cmVhbV8tPlJlYWRWYXJpbnQ2NCgmYnVmZmVyNjQpOwotICAgICAg
cmVzdWx0ID0gYnVmZmVyNjQgIT0gMCA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci0gICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfSU5UMzI6
IHsKLSAgICAgIHVpbnQzMiBidWZmZXIzMjsKLSAgICAgIHN0cmVhbV8tPlJlYWRWYXJpbnQzMigm
YnVmZmVyMzIpOwotICAgICAgcmVzdWx0ID0gU2ltcGxlSXRvYShiaXRfY2FzdDxpbnQzMj4oYnVm
ZmVyMzIpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkX0tpbmRfVFlQRV9JTlQ2NDogewotICAgICAgdWludDY0IGJ1ZmZlcjY0OwotICAgICAg
c3RyZWFtXy0+UmVhZFZhcmludDY0KCZidWZmZXI2NCk7Ci0gICAgICByZXN1bHQgPSBTaW1wbGVJ
dG9hKGJpdF9jYXN0PGludDY0PihidWZmZXI2NCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX1VJTlQzMjogewotICAgICAg
dWludDMyIGJ1ZmZlcjMyOwotICAgICAgc3RyZWFtXy0+UmVhZFZhcmludDMyKCZidWZmZXIzMik7
Ci0gICAgICByZXN1bHQgPSBTaW1wbGVJdG9hKGJpdF9jYXN0PHVpbnQzMj4oYnVmZmVyMzIpKTsK
LSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkX0tp
bmRfVFlQRV9VSU5UNjQ6IHsKLSAgICAgIHVpbnQ2NCBidWZmZXI2NDsKLSAgICAgIHN0cmVhbV8t
PlJlYWRWYXJpbnQ2NCgmYnVmZmVyNjQpOwotICAgICAgcmVzdWx0ID0gU2ltcGxlSXRvYShiaXRf
Y2FzdDx1aW50NjQ+KGJ1ZmZlcjY0KSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBn
b29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfU0lOVDMyOiB7Ci0gICAgICB1aW50MzIg
YnVmZmVyMzI7Ci0gICAgICBzdHJlYW1fLT5SZWFkVmFyaW50MzIoJmJ1ZmZlcjMyKTsKLSAgICAg
IHJlc3VsdCA9IFNpbXBsZUl0b2EoV2lyZUZvcm1hdExpdGU6OlppZ1phZ0RlY29kZTMyKGJ1ZmZl
cjMyKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpG
aWVsZF9LaW5kX1RZUEVfU0lOVDY0OiB7Ci0gICAgICB1aW50NjQgYnVmZmVyNjQ7Ci0gICAgICBz
dHJlYW1fLT5SZWFkVmFyaW50NjQoJmJ1ZmZlcjY0KTsKLSAgICAgIHJlc3VsdCA9IFNpbXBsZUl0
b2EoV2lyZUZvcm1hdExpdGU6OlppZ1phZ0RlY29kZTY0KGJ1ZmZlcjY0KSk7Ci0gICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfU0ZJ
WEVEMzI6IHsKLSAgICAgIHVpbnQzMiBidWZmZXIzMjsKLSAgICAgIHN0cmVhbV8tPlJlYWRMaXR0
bGVFbmRpYW4zMigmYnVmZmVyMzIpOwotICAgICAgcmVzdWx0ID0gU2ltcGxlSXRvYShiaXRfY2Fz
dDxpbnQzMj4oYnVmZmVyMzIpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGdvb2ds
ZTo6cHJvdG9idWY6OkZpZWxkX0tpbmRfVFlQRV9TRklYRUQ2NDogewotICAgICAgdWludDY0IGJ1
ZmZlcjY0OwotICAgICAgc3RyZWFtXy0+UmVhZExpdHRsZUVuZGlhbjY0KCZidWZmZXI2NCk7Ci0g
ICAgICByZXN1bHQgPSBTaW1wbGVJdG9hKGJpdF9jYXN0PGludDY0PihidWZmZXI2NCkpOwotICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9U
WVBFX0ZJWEVEMzI6IHsKLSAgICAgIHVpbnQzMiBidWZmZXIzMjsKLSAgICAgIHN0cmVhbV8tPlJl
YWRMaXR0bGVFbmRpYW4zMigmYnVmZmVyMzIpOwotICAgICAgcmVzdWx0ID0gU2ltcGxlSXRvYShi
aXRfY2FzdDx1aW50MzI+KGJ1ZmZlcjMyKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfRklYRUQ2NDogewotICAgICAgdWlu
dDY0IGJ1ZmZlcjY0OwotICAgICAgc3RyZWFtXy0+UmVhZExpdHRsZUVuZGlhbjY0KCZidWZmZXI2
NCk7Ci0gICAgICByZXN1bHQgPSBTaW1wbGVJdG9hKGJpdF9jYXN0PHVpbnQ2ND4oYnVmZmVyNjQp
KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
X0tpbmRfVFlQRV9GTE9BVDogewotICAgICAgdWludDMyIGJ1ZmZlcjMyOwotICAgICAgc3RyZWFt
Xy0+UmVhZExpdHRsZUVuZGlhbjMyKCZidWZmZXIzMik7Ci0gICAgICByZXN1bHQgPSBTaW1wbGVG
dG9hKGJpdF9jYXN0PGZsb2F0PihidWZmZXIzMikpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX0RPVUJMRTogewotICAgICAg
dWludDY0IGJ1ZmZlcjY0OwotICAgICAgc3RyZWFtXy0+UmVhZExpdHRsZUVuZGlhbjY0KCZidWZm
ZXI2NCk7Ci0gICAgICByZXN1bHQgPSBTaW1wbGVEdG9hKGJpdF9jYXN0PGRvdWJsZT4oYnVmZmVy
NjQpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkX0tpbmRfVFlQRV9FTlVNOiB7Ci0gICAgICB1aW50MzIgYnVmZmVyMzI7Ci0gICAgICBzdHJl
YW1fLT5SZWFkVmFyaW50MzIoJmJ1ZmZlcjMyKTsKLSAgICAgIC8vIEdldCB0aGUgbmVzdGVkIGVu
dW0gdHlwZSBmb3IgdGhpcyBmaWVsZC4KLSAgICAgIC8vIFRPRE8oc2thcnZhamUpOiBBdm9pZCBz
dHJpbmcgbWFuaXB1bGF0aW9uLiBGaW5kIHdheXMgdG8gc3BlZWQgdGhpcwotICAgICAgLy8gdXAu
Ci0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpFbnVtKiBlbiA9Ci0gICAgICAgICAgdHlw
ZWluZm9fLT5HZXRFbnVtQnlUeXBlVXJsKGZpZWxkLnR5cGVfdXJsKCkpOwotICAgICAgLy8gTG9v
a3VwIHRoZSBuYW1lIG9mIHRoZSBlbnVtLCBhbmQgcmVuZGVyIHRoYXQuIFNraXBzIHVua25vd24g
ZW51bXMuCi0gICAgICBpZiAoZW4gIT0gTlVMTCkgewotICAgICAgICBjb25zdCBnb29nbGU6OnBy
b3RvYnVmOjpFbnVtVmFsdWUqIGVudW1fdmFsdWUgPQotICAgICAgICAgICAgRmluZEVudW1WYWx1
ZUJ5TnVtYmVyKCplbiwgYnVmZmVyMzIpOwotICAgICAgICBpZiAoZW51bV92YWx1ZSAhPSBOVUxM
KSB7Ci0gICAgICAgICAgcmVzdWx0ID0gZW51bV92YWx1ZS0+bmFtZSgpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpG
aWVsZF9LaW5kX1RZUEVfU1RSSU5HOiB7Ci0gICAgICB1aW50MzIgYnVmZmVyMzI7Ci0gICAgICBz
dHJlYW1fLT5SZWFkVmFyaW50MzIoJmJ1ZmZlcjMyKTsgIC8vIHN0cmluZyBzaXplLgotICAgICAg
c3RyZWFtXy0+UmVhZFN0cmluZygmcmVzdWx0LCBidWZmZXIzMik7Ci0gICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBnb29nbGU6OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfQllURVM6IHsK
LSAgICAgIHVpbnQzMiBidWZmZXIzMjsKLSAgICAgIHN0cmVhbV8tPlJlYWRWYXJpbnQzMigmYnVm
ZmVyMzIpOyAgLy8gYnl0ZXMgc2l6ZS4KLSAgICAgIHN0cmVhbV8tPlJlYWRTdHJpbmcoJnJlc3Vs
dCwgYnVmZmVyMzIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBi
cmVhazsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBGaWVsZCBpcyBhIG1hcCBpZiBp
dCBpcyBhIHJlcGVhdGVkIG1lc3NhZ2UgYW5kIGl0IGhhcyBhbiBvcHRpb24gIm1hcF90eXBlIi4K
LS8vIFRPRE8oc2thcnZhamUpOiBDb25zaWRlciBwcmUtY29tcHV0aW5nIHRoZSBJc01hcCgpIGlu
dG8gRmllbGQgZGlyZWN0bHkuCi1ib29sIFByb3RvU3RyZWFtT2JqZWN0U291cmNlOjpJc01hcCgK
LSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmllbGQpIGNvbnN0IHsKLSAgY29u
c3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSogZmllbGRfdHlwZSA9Ci0gICAgICB0eXBlaW5mb18t
PkdldFR5cGVCeVR5cGVVcmwoZmllbGQudHlwZV91cmwoKSk7Ci0KLSAgLy8gVE9ETyh4aWFvZmVu
Zyk6IFVuaWZ5IG9wdGlvbiBuYW1lcy4KLSAgcmV0dXJuIGZpZWxkLmtpbmQoKSA9PSBnb29nbGU6
OnByb3RvYnVmOjpGaWVsZF9LaW5kX1RZUEVfTUVTU0FHRSAmJgotICAgICAgICAgKEdldEJvb2xP
cHRpb25PckRlZmF1bHQoZmllbGRfdHlwZS0+b3B0aW9ucygpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucy5tYXBfZW50cnki
LCBmYWxzZSkgfHwKLSAgICAgICAgICBHZXRCb29sT3B0aW9uT3JEZWZhdWx0KGZpZWxkX3R5cGUt
Pm9wdGlvbnMoKSwgIm1hcF9lbnRyeSIsIGZhbHNlKSk7Ci19Ci0KLXN0ZDo6cGFpcjxpbnQ2NCwg
aW50MzI+IFByb3RvU3RyZWFtT2JqZWN0U291cmNlOjpSZWFkU2Vjb25kc0FuZE5hbm9zKAotICAg
IGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUpIGNvbnN0IHsKLSAgdWludDY0IHNl
Y29uZHMgPSAwOwotICB1aW50MzIgbmFub3MgPSAwOwotICB1aW50MzIgdGFnID0gMDsKLSAgaW50
NjQgc2lnbmVkX3NlY29uZHMgPSAwOwotICBpbnQzMiBzaWduZWRfbmFub3MgPSAwOwotCi0gIGZv
ciAodGFnID0gc3RyZWFtXy0+UmVhZFRhZygpOyB0YWcgIT0gMDsgdGFnID0gc3RyZWFtXy0+UmVh
ZFRhZygpKSB7Ci0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIGZpZWxkID0gRmlu
ZEFuZFZlcmlmeUZpZWxkKHR5cGUsIHRhZyk7Ci0gICAgaWYgKGZpZWxkID09IE5VTEwpIHsKLSAg
ICAgIFdpcmVGb3JtYXQ6OlNraXBGaWVsZChzdHJlYW1fLCB0YWcsIE5VTEwpOwotICAgICAgY29u
dGludWU7Ci0gICAgfQotICAgIC8vICdzZWNvbmRzJyBoYXMgZmllbGQgbnVtYmVyIG9mIDEgYW5k
ICduYW5vcycgaGFzIGZpZWxkIG51bWJlciAyCi0gICAgLy8gLy9nb29nbGUvcHJvdG9idWYvdGlt
ZXN0YW1wLnByb3RvICYgZHVyYXRpb24ucHJvdG8KLSAgICBpZiAoZmllbGQtPm51bWJlcigpID09
IDEpIHsKLSAgICAgIC8vIHJlYWQgc2Vjb25kcwotICAgICAgc3RyZWFtXy0+UmVhZFZhcmludDY0
KCZzZWNvbmRzKTsKLSAgICAgIHNpZ25lZF9zZWNvbmRzID0gYml0X2Nhc3Q8aW50NjQ+KHNlY29u
ZHMpOwotICAgIH0gZWxzZSBpZiAoZmllbGQtPm51bWJlcigpID09IDIpIHsKLSAgICAgIC8vIHJl
YWQgbmFub3MKLSAgICAgIHN0cmVhbV8tPlJlYWRWYXJpbnQzMigmbmFub3MpOwotICAgICAgc2ln
bmVkX25hbm9zID0gYml0X2Nhc3Q8aW50MzI+KG5hbm9zKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IHN0ZDo6cGFpcjxpbnQ2NCwgaW50MzI+KHNpZ25lZF9zZWNvbmRzLCBzaWduZWRfbmFub3MpOwot
fQotCi1TdGF0dXMgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2U6OkluY3JlbWVudFJlY3Vyc2lvbkRl
cHRoKAotICAgIFN0cmluZ1BpZWNlIHR5cGVfbmFtZSwgU3RyaW5nUGllY2UgZmllbGRfbmFtZSkg
Y29uc3QgewotICBpZiAoKytyZWN1cnNpb25fZGVwdGhfID4gbWF4X3JlY3Vyc2lvbl9kZXB0aF8p
IHsKLSAgICByZXR1cm4gU3RhdHVzKAotICAgICAgICB1dGlsOjplcnJvcjo6SU5WQUxJRF9BUkdV
TUVOVCwKLSAgICAgICAgU3RyQ2F0KCJNZXNzYWdlIHRvbyBkZWVwLiBNYXggcmVjdXJzaW9uIGRl
cHRoIHJlYWNoZWQgZm9yIHR5cGUgJyIsCi0gICAgICAgICAgICAgICB0eXBlX25hbWUsICInLCBm
aWVsZCAnIiwgZmllbGRfbmFtZSwgIiciKSk7Ci0gIH0KLSAgcmV0dXJuIFN0YXR1czo6T0s7Ci19
Ci0KLW5hbWVzcGFjZSB7Ci0vLyBUT0RPKHNrYXJ2YWplKTogU3BlZWQgdGhpcyB1cCBieSBub3Qg
ZG9pbmcgYSBsaW5lYXIgc2Nhbi4KLWNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkKiBGaW5k
RmllbGRCeU51bWJlcigKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLCBp
bnQgbnVtYmVyKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5maWVsZHNfc2l6ZSgpOyAr
K2kpIHsKLSAgICBpZiAodHlwZS5maWVsZHMoaSkubnVtYmVyKCkgPT0gbnVtYmVyKSB7Ci0gICAg
ICByZXR1cm4gJnR5cGUuZmllbGRzKGkpOwotICAgIH0KLSAgfQotICByZXR1cm4gTlVMTDsKLX0K
LQotLy8gVE9ETyhza2FydmFqZSk6IFJlcGxhY2UgRmllbGREZXNjcmlwdG9yIGJ5IGltcGxlbWVu
dGluZyBJc1R5cGVQYWNrYWJsZSgpCi0vLyB1c2luZyB0ZWNoIEZpZWxkLgotYm9vbCBJc1BhY2th
YmxlKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVsZCkgewotICByZXR1cm4gZmll
bGQuY2FyZGluYWxpdHkoKSA9PQotICAgICAgICAgICAgIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
X0NhcmRpbmFsaXR5X0NBUkRJTkFMSVRZX1JFUEVBVEVEICYmCi0gICAgICAgICBnb29nbGU6OnBy
b3RvYnVmOjpGaWVsZERlc2NyaXB0b3I6OklzVHlwZVBhY2thYmxlKAotICAgICAgICAgICAgIHN0
YXRpY19jYXN0PGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkRGVzY3JpcHRvcjo6VHlwZT4oZmllbGQu
a2luZCgpKSk7Ci19Ci0KLS8vIFRPRE8oc2thcnZhamUpOiBTcGVlZCB0aGlzIHVwIGJ5IG5vdCBk
b2luZyBhIGxpbmVhciBzY2FuLgotY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlKiBG
aW5kRW51bVZhbHVlQnlOdW1iZXIoCi0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bSYg
dGVjaF9lbnVtLCBpbnQgbnVtYmVyKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGVjaF9lbnVt
LmVudW12YWx1ZV9zaXplKCk7ICsraSkgewotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkVu
dW1WYWx1ZSYgZXYgPSB0ZWNoX2VudW0uZW51bXZhbHVlKGkpOwotICAgIGlmIChldi5udW1iZXIo
KSA9PSBudW1iZXIpIHsKLSAgICAgIHJldHVybiAmZXY7Ci0gICAgfQotICB9Ci0gIHJldHVybiBO
VUxMOwotfQotCi0vLyBUT0RPKHNrYXJ2YWplKTogTG9vayBpbnRvIG9wdGltaXppbmcgdGhpcyBi
eSBub3QgZG9pbmcgY29tcHV0YXRpb24gb24KLS8vIGRvdWJsZS4KLWNvbnN0IHN0cmluZyBGb3Jt
YXROYW5vcyh1aW50MzIgbmFub3MpIHsKLSAgY29uc3QgY2hhciogZm9ybWF0ID0KLSAgICAgIChu
YW5vcyAlIDEwMDAgIT0gMCkgPyAiJS45ZiIgOiAobmFub3MgJSAxMDAwMDAwICE9IDApID8gIiUu
NmYiIDogIiUuM2YiOwotICBzdHJpbmcgZm9ybWF0dGVkID0KLSAgICAgIFN0cmluZ1ByaW50Zihm
b3JtYXQsIHN0YXRpY19jYXN0PGRvdWJsZT4obmFub3MpIC8ga05hbm9zUGVyU2Vjb25kKTsKLSAg
Ly8gcmVtb3ZlIHRoZSBsZWFkaW5nIDAgYmVmb3JlIGRlY2ltYWwuCi0gIHJldHVybiBmb3JtYXR0
ZWQuc3Vic3RyKDEpOwotfQotfSAgLy8gbmFtZXNwYWNlCi0KLX0gIC8vIG5hbWVzcGFjZSBjb252
ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGls
L2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHNvdXJjZS5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0c291cmNlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ3ZDQzNDdiM2FjNmNlMDIzZmU1OTE1ZDE1OTJjZDA0NTcyZWU5ZDgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0c291cmNlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwyOTggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdz
IGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3By
b3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVSX1BST1RPU1RSRUFN
X09CSkVDVFNPVVJDRV9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVS
X1BST1RPU1RSRUFNX09CSkVDVFNPVVJDRV9IX18KLQotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2hhc2guaD4KLSNpbmNsdWRlIDxzdHJpbmc+
Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3R5cGUucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC9vYmplY3Rfc291cmNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvb2JqZWN0X3dyaXRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91
dGlsL2ludGVybmFsL3R5cGVfaW5mby5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGls
L3R5cGVfcmVzb2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5n
cGllY2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1c29yLmg+Ci0KLQotbmFtZXNwYWNlIGdv
b2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotY2xhc3MgRmllbGQ7Ci1jbGFzcyBUeXBlOwot
fSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLQotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSB1dGlsIHsKLW5hbWVzcGFjZSBjb252ZXJ0ZXIgewotCi1jbGFzcyBUeXBlSW5mbzsKLQot
Ly8gQW4gT2JqZWN0U291cmNlIHRoYXQgY2FuIHBhcnNlIGEgc3RyZWFtIG9mIGJ5dGVzIGFzIGEg
cHJvdG9jb2wgYnVmZmVyLgotLy8gSXRzIFdyaXRlVG8oKSBtZXRob2QgY2FuIGJlIGdpdmVuIGFu
IE9iamVjdFdyaXRlci4KLS8vIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBhIGdvb2dsZS5wcm90
b2J1Zi5UeXBlIGZvciB0YWcgYW5kIG5hbWUgbG9va3VwLgotLy8gVGhlIGZpZWxkIG5hbWVzIGFy
ZSBjb252ZXJ0ZWQgaW50byBsb3dlciBjYW1lbC1jYXNlIHdoZW4gd3JpdGluZyB0byB0aGUKLS8v
IE9iamVjdFdyaXRlci4KLS8vCi0vLyBTYW1wbGUgdXNhZ2U6IChzdXBwb3NlIGlucHV0IGlzOiBz
dHJpbmcgcHJvdG8pCi0vLyAgIEFycmF5SW5wdXRTdHJlYW0gYXJyX3N0cmVhbShwcm90by5kYXRh
KCksIHByb3RvLnNpemUoKSk7Ci0vLyAgIENvZGVkSW5wdXRTdHJlYW0gaW5fc3RyZWFtKCZhcnJf
c3RyZWFtKTsKLS8vICAgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2Ugb3MoJmluX3N0cmVhbSwgLypT
ZXJ2aWNlVHlwZUluZm8qLyB0eXBlaW5mbywKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPHlvdXIgbWVzc2FnZSBnb29nbGU6OnByb3RvYnVmOjpUeXBlPik7Ci0vLwotLy8gICBTdGF0
dXMgc3RhdHVzID0gb3MuV3JpdGVUbyg8c29tZSBPYmplY3RXcml0ZXI+KTsKLWNsYXNzIExJQlBS
T1RPQlVGX0VYUE9SVCBQcm90b1N0cmVhbU9iamVjdFNvdXJjZSA6IHB1YmxpYyBPYmplY3RTb3Vy
Y2UgewotIHB1YmxpYzoKLSAgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2UoZ29vZ2xlOjpwcm90b2J1
Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgVHlwZVJlc29sdmVyKiB0eXBlX3Jlc29sdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlKTsKLQotICB2aXJ0dWFsIH5Qcm90
b1N0cmVhbU9iamVjdFNvdXJjZSgpOwotCi0gIHZpcnR1YWwgdXRpbDo6U3RhdHVzIE5hbWVkV3Jp
dGVUbyhTdHJpbmdQaWVjZSBuYW1lLCBPYmplY3RXcml0ZXIqIG93KSBjb25zdDsKLQotICAvLyBT
ZXRzIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBsb3dlckNhbWVsQ2FzZSBjYXNpbmcgZm9yIGVudW0g
dmFsdWVzLiBJZiBzZXQgdG8KLSAgLy8gZmFsc2UsIGVudW0gdmFsdWVzIGFyZSBvdXRwdXQgd2l0
aG91dCBhbnkgY2FzZSBjb252ZXJzaW9ucy4KLSAgLy8KLSAgLy8gRm9yIGV4YW1wbGUsIGlmIHdl
IGhhdmUgYW4gZW51bToKLSAgLy8gZW51bSBUeXBlIHsKLSAgLy8gICBBQ1RJT05fQU5EX0FEVkVO
VFVSRSA9IDE7Ci0gIC8vIH0KLSAgLy8gVHlwZSB0eXBlID0gMjA7Ci0gIC8vCi0gIC8vIEFuZCB0
aGlzIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS4gVGhlbiB0aGUgcmVuZGVyZWQgInR5cGUiIGZpZWxk
IHdpbGwgaGF2ZQotICAvLyB0aGUgc3RyaW5nICJhY3Rpb25BbmRBZHZlbnR1cmUiLgotICAvLyB7
Ci0gIC8vICAgLi4uCi0gIC8vICAgInR5cGUiOiAiYWN0aW9uQW5kQWR2ZW50dXJlIiwKLSAgLy8g
ICAuLi4KLSAgLy8gfQotICAvLwotICAvLyBJZiBzZXQgdG8gZmFsc2UsIHRoZSByZW5kZXJlZCAi
dHlwZSIgZmllbGQgd2lsbCBoYXZlIHRoZSBzdHJpbmcKLSAgLy8gIkFDVElPTl9BTkRfQURWRU5U
VVJFIi4KLSAgLy8gewotICAvLyAgIC4uLgotICAvLyAgICJ0eXBlIjogIkFDVElPTl9BTkRfQURW
RU5UVVJFIiwKLSAgLy8gICAuLi4KLSAgLy8gfQotICB2b2lkIHNldF91c2VfbG93ZXJfY2FtZWxf
Zm9yX2VudW1zKGJvb2wgdmFsdWUpIHsKLSAgICB1c2VfbG93ZXJfY2FtZWxfZm9yX2VudW1zXyA9
IHZhbHVlOwotICB9Ci0KLSAgLy8gU2V0cyB0aGUgbWF4IHJlY3Vyc2lvbiBkZXB0aCBvZiBwcm90
byBtZXNzYWdlIHRvIGJlIGRlc2VyaWFsaXplZC4gUHJvdG8KLSAgLy8gbWVzc2FnZXMgb3ZlciB0
aGlzIGRlcHRoIHdpbGwgZmFpbCB0byBiZSBkZXNlcmlhbGl6ZWQuCi0gIC8vIERlZmF1bHQgdmFs
dWUgaXMgNjQuCi0gIHZvaWQgc2V0X21heF9yZWN1cnNpb25fZGVwdGgoaW50IG1heF9kZXB0aCkg
ewotICAgIG1heF9yZWN1cnNpb25fZGVwdGhfID0gbWF4X2RlcHRoOwotICB9Ci0KLSBwcm90ZWN0
ZWQ6Ci0gIC8vIFdyaXRlcyBhIHByb3RvMiBNZXNzYWdlIHRvIHRoZSBPYmplY3RXcml0ZXIuIFdo
ZW4gdGhlIGdpdmVuIGVuZF90YWcgaXMKLSAgLy8gZm91bmQgdGhpcyBtZXRob2Qgd2lsbCBjb21w
bGV0ZSwgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBmb3IgcGFyc2luZyBib3RoCi0gIC8vIG5lc3Rl
ZCBtZXNzYWdlcyAoZW5kIHdpdGggMCkgYW5kIG5lc3RlZCBncm91cHMgKGVuZCB3aXRoIGdyb3Vw
IGVuZCB0YWcpLgotICAvLyBUaGUgaW5jbHVkZV9zdGFydF9hbmRfZW5kIHBhcmFtZXRlciBhbGxv
d3MgdGhpcyBtZXRob2QgdG8gYmUgY2FsbGVkIHdoZW4KLSAgLy8gYWxyZWFkeSBpbnNpZGUgb2Yg
YW4gb2JqZWN0LCBhbmQgc2tpcCBjYWxsaW5nIFN0YXJ0T2JqZWN0IGFuZCBFbmRPYmplY3QuCi0g
IHZpcnR1YWwgdXRpbDo6U3RhdHVzIFdyaXRlTWVzc2FnZShjb25zdCBnb29nbGU6OnByb3RvYnVm
OjpUeXBlJiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdQaWVjZSBuYW1lLCBjb25zdCB1aW50MzIgZW5kX3RhZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlX3N0YXJ0X2FuZF9lbmQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFdyaXRlciogb3cpIGNvbnN0
OwotCi0gcHJpdmF0ZToKLSAgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2UoZ29vZ2xlOjpwcm90b2J1
Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVHlwZUluZm8qIHR5cGVpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlKTsKLSAgLy8gRnVuY3Rpb24gdGhhdCBy
ZW5kZXJzIGEgd2VsbCBrbm93biB0eXBlIHdpdGggYSBtb2RpZmllZCBiZWhhdmlvci4KLSAgdHlw
ZWRlZiB1dGlsOjpTdGF0dXMgKCpUeXBlUmVuZGVyZXIpKGNvbnN0IFByb3RvU3RyZWFtT2JqZWN0
U291cmNlKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZ1BpZWNlLCBPYmplY3RXcml0ZXIqKTsKLQotICAvLyBMb29rcyB1cCBh
IGZpZWxkIGFuZCB2ZXJpZnkgaXRzIGNvbnNpc3RlbmN5IHdpdGggd2lyZSB0eXBlIGluIHRhZy4K
LSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIEZpbmRBbmRWZXJpZnlGaWVsZCgKLSAg
ICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsIHVpbnQzMiB0YWcpIGNvbnN0
OwotCi0gIC8vIFRPRE8oc2thcnZhamUpOiBNYXJrIHRoZXNlIG1ldGhvZHMgYXMgbm9uLWNvbnN0
IGFzIHRoZXkgbW9kaWZ5IGludGVybmFsCi0gIC8vIHN0YXRlIChzdHJlYW1fKS4KLSAgLy8KLSAg
Ly8gUmVuZGVycyBhIHJlcGVhdGluZyBmaWVsZCAocGFja2VkIG9yIHVucGFja2VkKS4KLSAgLy8g
UmV0dXJucyB0aGUgbmV4dCB0YWcgYWZ0ZXIgcmVhZGluZyBhbGwgc2VxdWVudGlhbCByZXBlYXRp
bmcgZWxlbWVudHMuIFRoZQotICAvLyBjYWxsZXIgc2hvdWxkIHVzZSB0aGlzIHRhZyBiZWZvcmUg
cmVhZGluZyBtb3JlIHRhZ3MgZnJvbSB0aGUgc3RyZWFtLgotICB1dGlsOjpTdGF0dXNPcjx1aW50
MzI+IFJlbmRlckxpc3QoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIGZpZWxkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBuYW1lLCB1aW50
MzIgbGlzdF90YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVj
dFdyaXRlciogb3cpIGNvbnN0OwotICAvLyBSZW5kZXJzIGEgTldQIG1hcC4KLSAgLy8gUmV0dXJu
cyB0aGUgbmV4dCB0YWcgYWZ0ZXIgcmVhZGluZyBhbGwgbWFwIGVudHJpZXMuIFRoZSBjYWxsZXIg
c2hvdWxkIHVzZQotICAvLyB0aGlzIHRhZyBiZWZvcmUgcmVhZGluZyBtb3JlIHRhZ3MgZnJvbSB0
aGUgc3RyZWFtLgotICB1dGlsOjpTdGF0dXNPcjx1aW50MzI+IFJlbmRlck1hcChjb25zdCBnb29n
bGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nUGllY2UgbmFtZSwgdWludDMyIGxpc3RfdGFnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFdyaXRlciogb3cpIGNvbnN0OwotCi0gIC8v
IFJlbmRlcnMgYSBwYWNrZWQgcmVwZWF0aW5nIGZpZWxkLiBBIHBhY2tlZCBmaWVsZCBpcyBzdG9y
ZWQgYXM6Ci0gIC8vIHt0YWcgbGVuZ3RoIGl0ZW0xIGl0ZW0yIGl0ZW0zfSBpbnN0ZWFkIG9mIHRo
ZSBsZXNzIGVmZmljaWVudAotICAvLyB7dGFnIGl0ZW0xIHRhZyBpdGVtMiB0YWcgaXRlbTN9Lgot
ICB1dGlsOjpTdGF0dXMgUmVuZGVyUGFja2VkKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
KiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFdyaXRlciogb3cp
IGNvbnN0OwotCi0gIC8vIFJlbmRlcnMgYSBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIHZhbHVl
IHRvIE9iamVjdFdyaXRlcgotICBzdGF0aWMgdXRpbDo6U3RhdHVzIFJlbmRlclRpbWVzdGFtcChj
b25zdCBQcm90b1N0cmVhbU9iamVjdFNvdXJjZSogb3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBuYW1lLCBP
YmplY3RXcml0ZXIqIG93KTsKLQotICAvLyBSZW5kZXJzIGEgZ29vZ2xlLnByb3RvYnVmLkR1cmF0
aW9uIHZhbHVlIHRvIE9iamVjdFdyaXRlcgotICBzdGF0aWMgdXRpbDo6U3RhdHVzIFJlbmRlckR1
cmF0aW9uKGNvbnN0IFByb3RvU3RyZWFtT2JqZWN0U291cmNlKiBvcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBu
YW1lLCBPYmplY3RXcml0ZXIqIG93KTsKLQotICAvLyBGb2xsb3dpbmcgUmVuZGVyVFlQRSBmdW5j
dGlvbnMgcmVuZGVyIHdlbGwga25vd24gdHlwZXMgaW4KLSAgLy8gZ29vZ2xlL3Byb3RvYnVmL3dy
YXBwZXJzLnByb3RvIGNvcnJlc3BvbmRpbmcgdG8gVFlQRS4KLSAgc3RhdGljIHV0aWw6OlN0YXR1
cyBSZW5kZXJEb3VibGUoY29uc3QgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2UqIG9zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5
cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGll
Y2UgbmFtZSwgT2JqZWN0V3JpdGVyKiBvdyk7Ci0gIHN0YXRpYyB1dGlsOjpTdGF0dXMgUmVuZGVy
RmxvYXQoY29uc3QgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2UqIG9zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlIG5hbWUsIE9i
amVjdFdyaXRlciogb3cpOwotICBzdGF0aWMgdXRpbDo6U3RhdHVzIFJlbmRlckludDY0KGNvbnN0
IFByb3RvU3RyZWFtT2JqZWN0U291cmNlKiBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBuYW1lLCBPYmplY3RXcml0ZXIq
IG93KTsKLSAgc3RhdGljIHV0aWw6OlN0YXR1cyBSZW5kZXJVSW50NjQoY29uc3QgUHJvdG9TdHJl
YW1PYmplY3RTb3VyY2UqIG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UgbmFtZSwgT2JqZWN0V3JpdGVyKiBvdyk7Ci0g
IHN0YXRpYyB1dGlsOjpTdGF0dXMgUmVuZGVySW50MzIoY29uc3QgUHJvdG9TdHJlYW1PYmplY3RT
b3VyY2UqIG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29v
Z2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZ1BpZWNlIG5hbWUsIE9iamVjdFdyaXRlciogb3cpOwotICBzdGF0aWMgdXRp
bDo6U3RhdHVzIFJlbmRlclVJbnQzMihjb25zdCBQcm90b1N0cmVhbU9iamVjdFNvdXJjZSogb3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90
b2J1Zjo6VHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmdQaWVjZSBuYW1lLCBPYmplY3RXcml0ZXIqIG93KTsKLSAgc3RhdGljIHV0aWw6OlN0YXR1
cyBSZW5kZXJCb29sKGNvbnN0IFByb3RvU3RyZWFtT2JqZWN0U291cmNlKiBvcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UgbmFt
ZSwgT2JqZWN0V3JpdGVyKiBvdyk7Ci0gIHN0YXRpYyB1dGlsOjpTdGF0dXMgUmVuZGVyU3RyaW5n
KGNvbnN0IFByb3RvU3RyZWFtT2JqZWN0U291cmNlKiBvcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlIG5hbWUsIE9iamVj
dFdyaXRlciogb3cpOwotICBzdGF0aWMgdXRpbDo6U3RhdHVzIFJlbmRlckJ5dGVzKGNvbnN0IFBy
b3RvU3RyZWFtT2JqZWN0U291cmNlKiBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSBuYW1lLCBPYmplY3RXcml0ZXIqIG93
KTsKLQotICAvLyBSZW5kZXJzIGEgZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCB0byBPYmplY3RXcml0
ZXIuCi0gIHN0YXRpYyB1dGlsOjpTdGF0dXMgUmVuZGVyU3RydWN0KGNvbnN0IFByb3RvU3RyZWFt
T2JqZWN0U291cmNlKiBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlIG5hbWUsIE9iamVjdFdyaXRlciogb3cpOwotCi0g
IC8vIEhlbHBlciB0byByZW5kZXIgZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCdzIFZhbHVlIGZpZWxk
cyB0byBPYmplY3RXcml0ZXIuCi0gIHN0YXRpYyB1dGlsOjpTdGF0dXMgUmVuZGVyU3RydWN0VmFs
dWUoY29uc3QgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2UqIG9zLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNl
IG5hbWUsIE9iamVjdFdyaXRlciogb3cpOwotCi0gIC8vIEhlbHBlciB0byByZW5kZXIgZ29vZ2xl
LnByb3RvYnVmLlN0cnVjdCdzIExpc3RWYWx1ZSBmaWVsZHMgdG8gT2JqZWN0V3JpdGVyLgotICBz
dGF0aWMgdXRpbDo6U3RhdHVzIFJlbmRlclN0cnVjdExpc3RWYWx1ZSgKLSAgICAgIGNvbnN0IFBy
b3RvU3RyZWFtT2JqZWN0U291cmNlKiBvcywgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYg
dHlwZSwKLSAgICAgIFN0cmluZ1BpZWNlIG5hbWUsIE9iamVjdFdyaXRlciogb3cpOwotCi0gIC8v
IFJlbmRlciB0aGUgIkFueSIgdHlwZS4KLSAgc3RhdGljIHV0aWw6OlN0YXR1cyBSZW5kZXJBbnko
Y29uc3QgUHJvdG9TdHJlYW1PYmplY3RTb3VyY2UqIG9zLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UgbmFtZSwgT2JqZWN0V3JpdGVy
KiBvdyk7Ci0KLSAgLy8gUmVuZGVyIHRoZSAiRmllbGRNYXNrIiB0eXBlLgotICBzdGF0aWMgdXRp
bDo6U3RhdHVzIFJlbmRlckZpZWxkTWFzayhjb25zdCBQcm90b1N0cmVhbU9iamVjdFNvdXJjZSog
b3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xl
Ojpwcm90b2J1Zjo6VHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmdQaWVjZSBuYW1lLCBPYmplY3RXcml0ZXIqIG93KTsKLQotICBzdGF0aWMg
aGFzaF9tYXA8c3RyaW5nLCBUeXBlUmVuZGVyZXI+KiByZW5kZXJlcnNfOwotICBzdGF0aWMgdm9p
ZCBJbml0UmVuZGVyZXJNYXAoKTsKLSAgc3RhdGljIHZvaWQgRGVsZXRlUmVuZGVyZXJNYXAoKTsK
LSAgc3RhdGljIFR5cGVSZW5kZXJlciogRmluZFR5cGVSZW5kZXJlcihjb25zdCBzdHJpbmcmIHR5
cGVfdXJsKTsKLQotICAvLyBSZW5kZXJzIGEgZmllbGQgdmFsdWUgdG8gdGhlIE9iamVjdFdyaXRl
ci4KLSAgdXRpbDo6U3RhdHVzIFJlbmRlckZpZWxkKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UgZmll
bGRfbmFtZSwgT2JqZWN0V3JpdGVyKiBvdykgY29uc3Q7Ci0KLSAgLy8gU2FtZSBhcyBhYm92ZSBi
dXQgcmVuZGVycyBhbGwgbm9uLW1lc3NhZ2UgZmllbGQgdHlwZXMuIENhbGxlcnMgZG9uJ3QgY2Fs
bAotICAvLyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5LiBUaGV5IGp1c3QgdXNlIFJlbmRlckZpZWxk
LgotICB1dGlsOjpTdGF0dXMgUmVuZGVyTm9uTWVzc2FnZUZpZWxkKGNvbnN0IGdvb2dsZTo6cHJv
dG9idWY6OkZpZWxkKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZ1BpZWNlIGZpZWxkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPYmplY3RXcml0ZXIqIG93KSBjb25zdDsKLQotCi0gIC8vIFJlYWRzIGZpZWxk
IHZhbHVlIGFjY29yZGluZyB0byBGaWVsZCBzcGVjIGluICdmaWVsZCcgYW5kIHJldHVybnMgdGhl
IHJlYWQKLSAgLy8gdmFsdWUgYXMgc3RyaW5nLiBUaGlzIG9ubHkgd29ya3MgZm9yIHByaW1pdGl2
ZSBkYXRhdHlwZXMgKG5vIG1lc3NhZ2UKLSAgLy8gdHlwZXMpLgotICBjb25zdCBzdHJpbmcgUmVh
ZEZpZWxkVmFsdWVBc1N0cmluZygKLSAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
JiBmaWVsZCkgY29uc3Q7Ci0KLSAgLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBkZXRlY3QgcHJvdG8g
bWFwcy4gVGhlICdmaWVsZCcgTVVTVCBiZSByZXBlYXRlZC4KLSAgYm9vbCBJc01hcChjb25zdCBn
b29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmllbGQpIGNvbnN0OwotCi0gIC8vIFV0aWxpdHkgdG8g
cmVhZCBpbnQ2NCBhbmQgaW50MzIgdmFsdWVzIGZyb20gYSBtZXNzYWdlIHR5cGUgaW4gc3RyZWFt
Xy4KLSAgLy8gVXNlZCBmb3IgcmVhZGluZyBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIGFuZCBE
dXJhdGlvbiBtZXNzYWdlcy4KLSAgc3RkOjpwYWlyPGludDY0LCBpbnQzMj4gUmVhZFNlY29uZHNB
bmROYW5vcygKLSAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUpIGNvbnN0
OwotCi0gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayByZWN1cnNpb24gZGVwdGggYW5kIGlu
Y3JlbWVudCBpdC4gSXQgd2lsbCByZXR1cm4KLSAgLy8gU3RhdHVzOjpPSyBpZiB0aGUgY3VycmVu
dCBkZXB0aCBpcyBhbGxvd2VkLiBPdGhlcndpc2UgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCi0gIC8v
IHR5cGVfbmFtZSBhbmQgZmllbGRfbmFtZSBhcmUgdXNlZCBmb3IgZXJyb3IgcmVwb3J0aW5nLgot
ICB1dGlsOjpTdGF0dXMgSW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoU3RyaW5nUGllY2UgdHlwZV9u
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVj
ZSBmaWVsZF9uYW1lKSBjb25zdDsKLQotICAvLyBJbnB1dCBzdHJlYW0gdG8gcmVhZCBmcm9tLiBP
d25lcnNoaXAgcmVzdHMgd2l0aCB0aGUgY2FsbGVyLgotICBnb29nbGU6OnByb3RvYnVmOjppbzo6
Q29kZWRJbnB1dFN0cmVhbSogc3RyZWFtXzsKLQotICAvLyBUeXBlIGluZm9ybWF0aW9uIGZvciBh
bGwgdGhlIHR5cGVzIHVzZWQgaW4gdGhlIGRlc2NyaXB0b3IuIFVzZWQgdG8gZmluZAotICAvLyBn
b29nbGU6OnByb3RvYnVmOjpUeXBlIG9mIG5lc3RlZCBtZXNzYWdlcy9lbnVtcy4KLSAgY29uc3Qg
VHlwZUluZm8qIHR5cGVpbmZvXzsKLSAgLy8gV2hldGhlciB0aGlzIGNsYXNzIG93bnMgdGhlIHR5
cGVpbmZvXyBvYmplY3QuIElmIHRydWUgdGhlIHR5cGVpbmZvXyBvYmplY3QKLSAgLy8gc2hvdWxk
IGJlIGRlbGV0ZWQgaW4gdGhlIGRlc3RydWN0b3IuCi0gIGJvb2wgb3duX3R5cGVpbmZvXzsKLQot
ICAvLyBnb29nbGU6OnByb3RvYnVmOjpUeXBlIG9mIHRoZSBtZXNzYWdlIHNvdXJjZS4KLSAgY29u
c3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZV87Ci0KLQotICAvLyBXaGV0aGVyIHRvIHJl
bmRlciBlbnVtcyB1c2luZyBsb3dlckNhbWVsQ2FzZS4gRGVmYXVsdHMgdG8gZmFsc2UuCi0gIGJv
b2wgdXNlX2xvd2VyX2NhbWVsX2Zvcl9lbnVtc187Ci0KLSAgLy8gVHJhY2tzIGN1cnJlbnQgcmVj
dXJzaW9uIGRlcHRoLgotICBtdXRhYmxlIGludCByZWN1cnNpb25fZGVwdGhfOwotCi0gIC8vIE1h
eGltdW0gYWxsb3dlZCByZWN1cnNpb24gZGVwdGguCi0gIGludCBtYXhfcmVjdXJzaW9uX2RlcHRo
XzsKLQotICBHT09HTEVfRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFByb3RvU3RyZWFt
T2JqZWN0U291cmNlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5h
bWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNl
IGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfUFJPVE9T
VFJFQU1fT0JKRUNUU09VUkNFX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0c291cmNlX3Rlc3QuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3Rzb3VyY2VfdGVzdC5jYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y2ZmRmOTczZjZmMzkxZDc5MjMyODVmNGZi
ODQ0NzlkMTYwZTAwMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3Rz
b3VyY2VfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwMDcgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3Rzb3VyY2UuaD4KLQotI2luY2x1ZGUgPG1lbW9y
eT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Nhc3RzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L2FueS5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsX2xpdGUu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2V4cGVjdGluZ19vYmplY3R3cml0ZXIuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9ib29rcy5wYi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL2ZpZWxk
X21hc2sucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90eXBl
X2luZm9fdGVzdF9oZWxwZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRl
cm5hbC9jb25zdGFudHMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRp
bC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL2Fu
eXMucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0
YS9tYXBzLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVz
dGRhdGEvc3RydWN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJu
YWwvdGVzdGRhdGEvdGltZXN0YW1wX2R1cmF0aW9uLnBiLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KLQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1l
c3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLQotdXNpbmcgZ29vZ2xlOjpwcm90
b2J1Zjo6RGVzY3JpcHRvcjsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3JQb29s
OwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6RmlsZURlc2NyaXB0b3JQcm90bzsKLXVzaW5nIGdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2U7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjppbzo6QXJy
YXlJbnB1dFN0cmVhbTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3Ry
ZWFtOwotdXNpbmcgdXRpbDo6U3RhdHVzOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGlu
Zzo6QXV0aG9yOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6QmFkQXV0aG9yOwot
dXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6QmFkTmVzdGVkQm9vazsKLXVzaW5nIGdv
b2dsZTo6cHJvdG9idWY6OnRlc3Rpbmc6OkJvb2s7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjp0
ZXN0aW5nOjpDeWNsaWM7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjp0ZXN0aW5nOjpCb29rX0xh
YmVsOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6TmVzdGVkQm9vazsKLXVzaW5n
IGdvb2dsZTo6cHJvdG9idWY6OnRlc3Rpbmc6OlBhY2tlZFByaW1pdGl2ZTsKLXVzaW5nIGdvb2ds
ZTo6cHJvdG9idWY6OnRlc3Rpbmc6OlByaW1pdGl2ZTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6
OnRlc3Rpbmc6Om1vcmVfYXV0aG9yOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6
bWFwczo6TWFwT3V0OwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6bWFwczo6TWFw
T3V0V2lyZUZvcm1hdDsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OnRlc3Rpbmc6OnRpbWVzdGFt
cGR1cmF0aW9uOjpUaW1lc3RhbXBEdXJhdGlvbjsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OnRl
c3Rpbmc6OmFueXM6OkFueU91dDsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OnRlc3Rpbmc6OmFu
eXM6OkFueU07Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjp0ZXN0aW5nOjpGaWVsZE1hc2tUZXN0
OwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6TmVzdGVkRmllbGRNYXNrOwotdXNp
bmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6c3RydWN0czo6U3RydWN0VHlwZTsKLXVzaW5n
IDo6dGVzdGluZzo6XzsKLQotCi1uYW1lc3BhY2Ugewotc3RyaW5nIEdldFR5cGVVcmwoY29uc3Qg
RGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICByZXR1cm4gc3RyaW5nKGtUeXBlU2VydmljZUJh
c2VVcmwpICsgIi8iICsgZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCk7Ci19Ci19ICAvLyBuYW1lc3Bh
Y2UKLQotY2xhc3MgUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VUZXN0Ci0gICAgOiBwdWJsaWMgOjp0
ZXN0aW5nOjpUZXN0V2l0aFBhcmFtPHRlc3Rpbmc6OlR5cGVJbmZvU291cmNlPiB7Ci0gcHJvdGVj
dGVkOgotICBQcm90b3N0cmVhbU9iamVjdFNvdXJjZVRlc3QoKQotICAgICAgOiBoZWxwZXJfKEdl
dFBhcmFtKCkpLAotICAgICAgICBtb2NrXygpLAotICAgICAgICBvd18oJm1vY2tfKSwKLSAgICAg
ICAgdXNlX2xvd2VyX2NhbWVsX2Zvcl9lbnVtc18oZmFsc2UpIHsKLSAgICBoZWxwZXJfLlJlc2V0
VHlwZUluZm8oQm9vazo6ZGVzY3JpcHRvcigpKTsKLSAgfQotCi0gIHZpcnR1YWwgflByb3Rvc3Ry
ZWFtT2JqZWN0U291cmNlVGVzdCgpIHt9Ci0KLSAgdm9pZCBEb1Rlc3QoY29uc3QgTWVzc2FnZSYg
bXNnLCBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gICAgU3RhdHVzIHN0YXR1cyA9
IEV4ZWN1dGVUZXN0KG1zZywgZGVzY3JpcHRvcik7Ci0gICAgRVhQRUNUX0VRKFN0YXR1czo6T0ss
IHN0YXR1cyk7Ci0gIH0KLQotICBTdGF0dXMgRXhlY3V0ZVRlc3QoY29uc3QgTWVzc2FnZSYgbXNn
LCBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gICAgb3N0cmluZ3N0cmVhbSBvc3M7
Ci0gICAgbXNnLlNlcmlhbGl6ZVBhcnRpYWxUb09zdHJlYW0oJm9zcyk7Ci0gICAgc3RyaW5nIHBy
b3RvID0gb3NzLnN0cigpOwotICAgIEFycmF5SW5wdXRTdHJlYW0gYXJyX3N0cmVhbShwcm90by5k
YXRhKCksIHByb3RvLnNpemUoKSk7Ci0gICAgQ29kZWRJbnB1dFN0cmVhbSBpbl9zdHJlYW0oJmFy
cl9zdHJlYW0pOwotCi0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxQcm90b1N0cmVh
bU9iamVjdFNvdXJjZT4gb3MoCi0gICAgICAgIGhlbHBlcl8uTmV3UHJvdG9Tb3VyY2UoJmluX3N0
cmVhbSwgR2V0VHlwZVVybChkZXNjcmlwdG9yKSkpOwotICAgIGlmICh1c2VfbG93ZXJfY2FtZWxf
Zm9yX2VudW1zXykgb3MtPnNldF91c2VfbG93ZXJfY2FtZWxfZm9yX2VudW1zKHRydWUpOwotICAg
IG9zLT5zZXRfbWF4X3JlY3Vyc2lvbl9kZXB0aCg2NCk7Ci0gICAgcmV0dXJuIG9zLT5Xcml0ZVRv
KCZtb2NrXyk7Ci0gIH0KLQotICB2b2lkIFByZXBhcmVFeHBlY3RpbmdPYmplY3RXcml0ZXJGb3JS
ZXBlYXRlZFByaW1pdGl2ZSgpIHsKLSAgICBvd18uU3RhcnRPYmplY3QoIiIpCi0gICAgICAgIC0+
U3RhcnRMaXN0KCJyZXBGaXgzMiIpCi0gICAgICAgIC0+UmVuZGVyVWludDMyKCIiLCBiaXRfY2Fz
dDx1aW50MzI+KDMyMDEpKQotICAgICAgICAtPlJlbmRlclVpbnQzMigiIiwgYml0X2Nhc3Q8dWlu
dDMyPigwKSkKLSAgICAgICAgLT5SZW5kZXJVaW50MzIoIiIsIGJpdF9jYXN0PHVpbnQzMj4oMzIw
MikpCi0gICAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAgIC0+U3RhcnRMaXN0KCJyZXBVMzIiKQot
ICAgICAgICAtPlJlbmRlclVpbnQzMigiIiwgYml0X2Nhc3Q8dWludDMyPigzMjAzKSkKLSAgICAg
ICAgLT5SZW5kZXJVaW50MzIoIiIsIGJpdF9jYXN0PHVpbnQzMj4oMCkpCi0gICAgICAgIC0+RW5k
TGlzdCgpCi0gICAgICAgIC0+U3RhcnRMaXN0KCJyZXBJMzIiKQotICAgICAgICAtPlJlbmRlcklu
dDMyKCIiLCAwKQotICAgICAgICAtPlJlbmRlckludDMyKCIiLCAzMjA0KQotICAgICAgICAtPlJl
bmRlckludDMyKCIiLCAzMjA1KQotICAgICAgICAtPkVuZExpc3QoKQotICAgICAgICAtPlN0YXJ0
TGlzdCgicmVwU2YzMiIpCi0gICAgICAgIC0+UmVuZGVySW50MzIoIiIsIDMyMDYpCi0gICAgICAg
IC0+UmVuZGVySW50MzIoIiIsIDApCi0gICAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAgIC0+U3Rh
cnRMaXN0KCJyZXBTMzIiKQotICAgICAgICAtPlJlbmRlckludDMyKCIiLCAwKQotICAgICAgICAt
PlJlbmRlckludDMyKCIiLCAzMjA3KQotICAgICAgICAtPlJlbmRlckludDMyKCIiLCAzMjA4KQot
ICAgICAgICAtPkVuZExpc3QoKQotICAgICAgICAtPlN0YXJ0TGlzdCgicmVwRml4NjQiKQotICAg
ICAgICAtPlJlbmRlclVpbnQ2NCgiIiwgYml0X2Nhc3Q8dWludDY0Pig2NDAxTEwpKQotICAgICAg
ICAtPlJlbmRlclVpbnQ2NCgiIiwgYml0X2Nhc3Q8dWludDY0PigwTEwpKQotICAgICAgICAtPkVu
ZExpc3QoKQotICAgICAgICAtPlN0YXJ0TGlzdCgicmVwVTY0IikKLSAgICAgICAgLT5SZW5kZXJV
aW50NjQoIiIsIGJpdF9jYXN0PHVpbnQ2ND4oMExMKSkKLSAgICAgICAgLT5SZW5kZXJVaW50NjQo
IiIsIGJpdF9jYXN0PHVpbnQ2ND4oNjQwMkxMKSkKLSAgICAgICAgLT5SZW5kZXJVaW50NjQoIiIs
IGJpdF9jYXN0PHVpbnQ2ND4oNjQwM0xMKSkKLSAgICAgICAgLT5FbmRMaXN0KCkKLSAgICAgICAg
LT5TdGFydExpc3QoInJlcEk2NCIpCi0gICAgICAgIC0+UmVuZGVySW50NjQoIiIsIDY0MDRMKQot
ICAgICAgICAtPlJlbmRlckludDY0KCIiLCAwTCkKLSAgICAgICAgLT5FbmRMaXN0KCkKLSAgICAg
ICAgLT5TdGFydExpc3QoInJlcFNmNjQiKQotICAgICAgICAtPlJlbmRlckludDY0KCIiLCAwTCkK
LSAgICAgICAgLT5SZW5kZXJJbnQ2NCgiIiwgNjQwNUwpCi0gICAgICAgIC0+UmVuZGVySW50NjQo
IiIsIDY0MDZMKQotICAgICAgICAtPkVuZExpc3QoKQotICAgICAgICAtPlN0YXJ0TGlzdCgicmVw
UzY0IikKLSAgICAgICAgLT5SZW5kZXJJbnQ2NCgiIiwgNjQwN0wpCi0gICAgICAgIC0+UmVuZGVy
SW50NjQoIiIsIDBMKQotICAgICAgICAtPkVuZExpc3QoKQotICAgICAgICAtPlN0YXJ0TGlzdCgi
cmVwRmxvYXQiKQotICAgICAgICAtPlJlbmRlckZsb2F0KCIiLCAwLjBmKQotICAgICAgICAtPlJl
bmRlckZsb2F0KCIiLCAzMi4xZikKLSAgICAgICAgLT5SZW5kZXJGbG9hdCgiIiwgMzIuMmYpCi0g
ICAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAgIC0+U3RhcnRMaXN0KCJyZXBEb3VibGUiKQotICAg
ICAgICAtPlJlbmRlckRvdWJsZSgiIiwgNjQuMUwpCi0gICAgICAgIC0+UmVuZGVyRG91YmxlKCIi
LCAwLjBMKQotICAgICAgICAtPkVuZExpc3QoKQotICAgICAgICAtPlN0YXJ0TGlzdCgicmVwQm9v
bCIpCi0gICAgICAgIC0+UmVuZGVyQm9vbCgiIiwgdHJ1ZSkKLSAgICAgICAgLT5SZW5kZXJCb29s
KCIiLCBmYWxzZSkKLSAgICAgICAgLT5FbmRMaXN0KCkKLSAgICAgICAgLT5FbmRPYmplY3QoKTsK
LSAgfQotCi0gIFByaW1pdGl2ZSBQcmVwYXJlUmVwZWF0ZWRQcmltaXRpdmUoKSB7Ci0gICAgUHJp
bWl0aXZlIHByaW1pdGl2ZTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9maXgzMigzMjAxKTsKLSAg
ICBwcmltaXRpdmUuYWRkX3JlcF9maXgzMigwKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9maXgz
MigzMjAyKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF91MzIoMzIwMyk7Ci0gICAgcHJpbWl0aXZl
LmFkZF9yZXBfdTMyKDApOwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX2kzMigwKTsKLSAgICBwcmlt
aXRpdmUuYWRkX3JlcF9pMzIoMzIwNCk7Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBfaTMyKDMyMDUp
OwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX3NmMzIoMzIwNik7Ci0gICAgcHJpbWl0aXZlLmFkZF9y
ZXBfc2YzMigwKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9zMzIoMCk7Ci0gICAgcHJpbWl0aXZl
LmFkZF9yZXBfczMyKDMyMDcpOwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX3MzMigzMjA4KTsKLSAg
ICBwcmltaXRpdmUuYWRkX3JlcF9maXg2NCg2NDAxTCk7Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBf
Zml4NjQoMEwpOwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX3U2NCgwTCk7Ci0gICAgcHJpbWl0aXZl
LmFkZF9yZXBfdTY0KDY0MDJMKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF91NjQoNjQwM0wpOwot
ICAgIHByaW1pdGl2ZS5hZGRfcmVwX2k2NCg2NDA0TCk7Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBf
aTY0KDBMKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9zZjY0KDBMKTsKLSAgICBwcmltaXRpdmUu
YWRkX3JlcF9zZjY0KDY0MDVMKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9zZjY0KDY0MDZMKTsK
LSAgICBwcmltaXRpdmUuYWRkX3JlcF9zNjQoNjQwN0wpOwotICAgIHByaW1pdGl2ZS5hZGRfcmVw
X3M2NCgwTCk7Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBfZmxvYXQoMC4wZik7Ci0gICAgcHJpbWl0
aXZlLmFkZF9yZXBfZmxvYXQoMzIuMWYpOwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX2Zsb2F0KDMy
LjJmKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9kb3VibGUoNjQuMUwpOwotICAgIHByaW1pdGl2
ZS5hZGRfcmVwX2RvdWJsZSgwLjApOwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX2Jvb2wodHJ1ZSk7
Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBfYm9vbChmYWxzZSk7Ci0KLSAgICBQcmVwYXJlRXhwZWN0
aW5nT2JqZWN0V3JpdGVyRm9yUmVwZWF0ZWRQcmltaXRpdmUoKTsKLSAgICByZXR1cm4gcHJpbWl0
aXZlOwotICB9Ci0KLSAgUGFja2VkUHJpbWl0aXZlIFByZXBhcmVQYWNrZWRQcmltaXRpdmUoKSB7
Ci0gICAgUGFja2VkUHJpbWl0aXZlIHByaW1pdGl2ZTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9m
aXgzMigzMjAxKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9maXgzMigwKTsKLSAgICBwcmltaXRp
dmUuYWRkX3JlcF9maXgzMigzMjAyKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF91MzIoMzIwMyk7
Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBfdTMyKDApOwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX2kz
MigwKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9pMzIoMzIwNCk7Ci0gICAgcHJpbWl0aXZlLmFk
ZF9yZXBfaTMyKDMyMDUpOwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX3NmMzIoMzIwNik7Ci0gICAg
cHJpbWl0aXZlLmFkZF9yZXBfc2YzMigwKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9zMzIoMCk7
Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBfczMyKDMyMDcpOwotICAgIHByaW1pdGl2ZS5hZGRfcmVw
X3MzMigzMjA4KTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9maXg2NCg2NDAxTCk7Ci0gICAgcHJp
bWl0aXZlLmFkZF9yZXBfZml4NjQoMEwpOwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX3U2NCgwTCk7
Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBfdTY0KDY0MDJMKTsKLSAgICBwcmltaXRpdmUuYWRkX3Jl
cF91NjQoNjQwM0wpOwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX2k2NCg2NDA0TCk7Ci0gICAgcHJp
bWl0aXZlLmFkZF9yZXBfaTY0KDBMKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9zZjY0KDBMKTsK
LSAgICBwcmltaXRpdmUuYWRkX3JlcF9zZjY0KDY0MDVMKTsKLSAgICBwcmltaXRpdmUuYWRkX3Jl
cF9zZjY0KDY0MDZMKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9zNjQoNjQwN0wpOwotICAgIHBy
aW1pdGl2ZS5hZGRfcmVwX3M2NCgwTCk7Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBfZmxvYXQoMC4w
Zik7Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBfZmxvYXQoMzIuMWYpOwotICAgIHByaW1pdGl2ZS5h
ZGRfcmVwX2Zsb2F0KDMyLjJmKTsKLSAgICBwcmltaXRpdmUuYWRkX3JlcF9kb3VibGUoNjQuMUwp
OwotICAgIHByaW1pdGl2ZS5hZGRfcmVwX2RvdWJsZSgwLjApOwotICAgIHByaW1pdGl2ZS5hZGRf
cmVwX2Jvb2wodHJ1ZSk7Ci0gICAgcHJpbWl0aXZlLmFkZF9yZXBfYm9vbChmYWxzZSk7Ci0KLSAg
ICBQcmVwYXJlRXhwZWN0aW5nT2JqZWN0V3JpdGVyRm9yUmVwZWF0ZWRQcmltaXRpdmUoKTsKLSAg
ICByZXR1cm4gcHJpbWl0aXZlOwotICB9Ci0KLSAgdm9pZCBVc2VMb3dlckNhbWVsRm9yRW51bXMo
KSB7IHVzZV9sb3dlcl9jYW1lbF9mb3JfZW51bXNfID0gdHJ1ZTsgfQotCi0gIHRlc3Rpbmc6OlR5
cGVJbmZvVGVzdEhlbHBlciBoZWxwZXJfOwotCi0gIDo6dGVzdGluZzo6TmljZU1vY2s8TW9ja09i
amVjdFdyaXRlcj4gbW9ja187Ci0gIEV4cGVjdGluZ09iamVjdFdyaXRlciBvd187Ci0gIGJvb2wg
dXNlX2xvd2VyX2NhbWVsX2Zvcl9lbnVtc187Ci19OwotCi1JTlNUQU5USUFURV9URVNUX0NBU0Vf
UChEaWZmZXJlbnRUeXBlSW5mb1NvdXJjZVRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBQ
cm90b3N0cmVhbU9iamVjdFNvdXJjZVRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICA6OnRl
c3Rpbmc6OlZhbHVlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0aW5nOjpVU0Vf
VFlQRV9SRVNPTFZFUikpOwotCi1URVNUX1AoUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VUZXN0LCBF
bXB0eU1lc3NhZ2UpIHsKLSAgQm9vayBlbXB0eTsKLSAgb3dfLlN0YXJ0T2JqZWN0KCIiKS0+RW5k
T2JqZWN0KCk7Ci0gIERvVGVzdChlbXB0eSwgQm9vazo6ZGVzY3JpcHRvcigpKTsKLX0KLQotVEVT
VF9QKFByb3Rvc3RyZWFtT2JqZWN0U291cmNlVGVzdCwgUHJpbWl0aXZlcykgewotICBQcmltaXRp
dmUgcHJpbWl0aXZlOwotICBwcmltaXRpdmUuc2V0X2ZpeDMyKDMyMDEpOwotICBwcmltaXRpdmUu
c2V0X3UzMigzMjAyKTsKLSAgcHJpbWl0aXZlLnNldF9pMzIoMzIwMyk7Ci0gIHByaW1pdGl2ZS5z
ZXRfc2YzMigzMjA0KTsKLSAgcHJpbWl0aXZlLnNldF9zMzIoMzIwNSk7Ci0gIHByaW1pdGl2ZS5z
ZXRfZml4NjQoNjQwMUwpOwotICBwcmltaXRpdmUuc2V0X3U2NCg2NDAyTCk7Ci0gIHByaW1pdGl2
ZS5zZXRfaTY0KDY0MDNMKTsKLSAgcHJpbWl0aXZlLnNldF9zZjY0KDY0MDRMKTsKLSAgcHJpbWl0
aXZlLnNldF9zNjQoNjQwNUwpOwotICBwcmltaXRpdmUuc2V0X3N0cigiU3RyaW5nIFZhbHVlIik7
Ci0gIHByaW1pdGl2ZS5zZXRfYnl0ZXMoIlNvbWUgQnl0ZXMiKTsKLSAgcHJpbWl0aXZlLnNldF9m
bG9hdF8oMzIuMWYpOwotICBwcmltaXRpdmUuc2V0X2RvdWJsZV8oNjQuMUwpOwotICBwcmltaXRp
dmUuc2V0X2Jvb2xfKHRydWUpOwotCi0gIG93Xy5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVu
ZGVyVWludDMyKCJmaXgzMiIsIGJpdF9jYXN0PHVpbnQzMj4oMzIwMSkpCi0gICAgICAtPlJlbmRl
clVpbnQzMigidTMyIiwgYml0X2Nhc3Q8dWludDMyPigzMjAyKSkKLSAgICAgIC0+UmVuZGVySW50
MzIoImkzMiIsIDMyMDMpCi0gICAgICAtPlJlbmRlckludDMyKCJzZjMyIiwgMzIwNCkKLSAgICAg
IC0+UmVuZGVySW50MzIoInMzMiIsIDMyMDUpCi0gICAgICAtPlJlbmRlclVpbnQ2NCgiZml4NjQi
LCBiaXRfY2FzdDx1aW50NjQ+KDY0MDFMTCkpCi0gICAgICAtPlJlbmRlclVpbnQ2NCgidTY0Iiwg
Yml0X2Nhc3Q8dWludDY0Pig2NDAyTEwpKQotICAgICAgLT5SZW5kZXJJbnQ2NCgiaTY0IiwgNjQw
M0wpCi0gICAgICAtPlJlbmRlckludDY0KCJzZjY0IiwgNjQwNEwpCi0gICAgICAtPlJlbmRlcklu
dDY0KCJzNjQiLCA2NDA1TCkKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJzdHIiLCAiU3RyaW5nIFZh
bHVlIikKLSAgICAgIC0+UmVuZGVyQnl0ZXMoImJ5dGVzIiwgIlNvbWUgQnl0ZXMiKQotICAgICAg
LT5SZW5kZXJGbG9hdCgiZmxvYXQiLCAzMi4xZikKLSAgICAgIC0+UmVuZGVyRG91YmxlKCJkb3Vi
bGUiLCA2NC4xTCkKLSAgICAgIC0+UmVuZGVyQm9vbCgiYm9vbCIsIHRydWUpCi0gICAgICAtPkVu
ZE9iamVjdCgpOwotICBEb1Rlc3QocHJpbWl0aXZlLCBQcmltaXRpdmU6OmRlc2NyaXB0b3IoKSk7
Ci19Ci0KLVRFU1RfUChQcm90b3N0cmVhbU9iamVjdFNvdXJjZVRlc3QsIFJlcGVhdGluZ1ByaW1p
dGl2ZXMpIHsKLSAgUHJpbWl0aXZlIHByaW1pdGl2ZSA9IFByZXBhcmVSZXBlYXRlZFByaW1pdGl2
ZSgpOwotICBwcmltaXRpdmUuYWRkX3JlcF9zdHIoIlN0cmluZyBPbmUiKTsKLSAgcHJpbWl0aXZl
LmFkZF9yZXBfc3RyKCJTdHJpbmcgVHdvIik7Ci0gIHByaW1pdGl2ZS5hZGRfcmVwX2J5dGVzKCJT
b21lIEJ5dGVzIik7Ci0KLSAgb3dfLlN0YXJ0TGlzdCgicmVwU3RyIikKLSAgICAgIC0+UmVuZGVy
U3RyaW5nKCIiLCAiU3RyaW5nIE9uZSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiIiwgIlN0cmlu
ZyBUd28iKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+U3RhcnRMaXN0KCJyZXBCeXRlcyIp
Ci0gICAgICAtPlJlbmRlckJ5dGVzKCIiLCAiU29tZSBCeXRlcyIpCi0gICAgICAtPkVuZExpc3Qo
KTsKLSAgRG9UZXN0KHByaW1pdGl2ZSwgUHJpbWl0aXZlOjpkZXNjcmlwdG9yKCkpOwotfQotCi1U
RVNUX1AoUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VUZXN0LCBDdXN0b21Kc29uTmFtZSkgewotICBB
dXRob3IgYXV0aG9yOwotICBhdXRob3Iuc2V0X2lkKDEyMzQ1KTsKLQotICBvd18uU3RhcnRPYmpl
Y3QoIiIpLT5SZW5kZXJVaW50NjQoIkBpZCIsIDEyMzQ1KS0+RW5kT2JqZWN0KCk7Ci0gIERvVGVz
dChhdXRob3IsIEF1dGhvcjo6ZGVzY3JpcHRvcigpKTsKLX0KLQotVEVTVF9QKFByb3Rvc3RyZWFt
T2JqZWN0U291cmNlVGVzdCwgTmVzdGVkTWVzc2FnZSkgewotICBBdXRob3IqIGF1dGhvciA9IG5l
dyBBdXRob3IoKTsKLSAgYXV0aG9yLT5zZXRfbmFtZSgiVG9sc3RveSIpOwotICBCb29rIGJvb2s7
Ci0gIGJvb2suc2V0X3RpdGxlKCJNeSBCb29rIik7Ci0gIGJvb2suc2V0X2FsbG9jYXRlZF9hdXRo
b3IoYXV0aG9yKTsKLQotICBvd18uU3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlclN0cmlu
ZygidGl0bGUiLCAiTXkgQm9vayIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJhdXRob3IiKQotICAg
ICAgLT5SZW5kZXJTdHJpbmcoIm5hbWUiLCAiVG9sc3RveSIpCi0gICAgICAtPkVuZE9iamVjdCgp
Ci0gICAgICAtPkVuZE9iamVjdCgpOwotICBEb1Rlc3QoYm9vaywgQm9vazo6ZGVzY3JpcHRvcigp
KTsKLX0KLQotVEVTVF9QKFByb3Rvc3RyZWFtT2JqZWN0U291cmNlVGVzdCwgUmVwZWF0aW5nRmll
bGQpIHsKLSAgQXV0aG9yIGF1dGhvcjsKLSAgYXV0aG9yLnNldF9hbGl2ZShmYWxzZSk7Ci0gIGF1
dGhvci5zZXRfbmFtZSgiam9obiIpOwotICBhdXRob3IuYWRkX3BzZXVkb255bSgicGhpbCIpOwot
ICBhdXRob3IuYWRkX3BzZXVkb255bSgiYm9iIik7Ci0KLSAgb3dfLlN0YXJ0T2JqZWN0KCIiKQot
ICAgICAgLT5SZW5kZXJCb29sKCJhbGl2ZSIsIGZhbHNlKQotICAgICAgLT5SZW5kZXJTdHJpbmco
Im5hbWUiLCAiam9obiIpCi0gICAgICAtPlN0YXJ0TGlzdCgicHNldWRvbnltIikKLSAgICAgIC0+
UmVuZGVyU3RyaW5nKCIiLCAicGhpbCIpCi0gICAgICAtPlJlbmRlclN0cmluZygiIiwgImJvYiIp
Ci0gICAgICAtPkVuZExpc3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgRG9UZXN0KGF1dGhv
ciwgQXV0aG9yOjpkZXNjcmlwdG9yKCkpOwotfQotCi1URVNUX1AoUHJvdG9zdHJlYW1PYmplY3RT
b3VyY2VUZXN0LCBQYWNrZWRSZXBlYXRpbmdGaWVsZHMpIHsKLSAgRG9UZXN0KFByZXBhcmVQYWNr
ZWRQcmltaXRpdmUoKSwgUGFja2VkUHJpbWl0aXZlOjpkZXNjcmlwdG9yKCkpOwotfQotCi1URVNU
X1AoUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VUZXN0LCBOb25QYWNrZWRQYWNrYWJsZUZpZWxkc0Fj
dHVhbGx5UGFja2VkKSB7Ci0gIC8vIFByb3Rvc3RyZWFtIGlzIHBhY2tlZCwgYnV0IHBhcnNlIHdp
dGggbm9uLXBhY2tlZCBQcmltaXRpdmUuCi0gIERvVGVzdChQcmVwYXJlUGFja2VkUHJpbWl0aXZl
KCksIFByaW1pdGl2ZTo6ZGVzY3JpcHRvcigpKTsKLX0KLQotVEVTVF9QKFByb3Rvc3RyZWFtT2Jq
ZWN0U291cmNlVGVzdCwgUGFja2VkUGFja2FibGVGaWVsZE5vdEFjdHVhbGx5UGFja2VkKSB7Ci0g
IC8vIFByb3Rvc3RyZWFtIGlzIG5vdCBwYWNrZWQsIGJ1dCBwYXJzZSB3aXRoIFBhY2tlZFByaW1p
dGl2ZS4KLSAgRG9UZXN0KFByZXBhcmVSZXBlYXRlZFByaW1pdGl2ZSgpLCBQYWNrZWRQcmltaXRp
dmU6OmRlc2NyaXB0b3IoKSk7Ci19Ci0KLVRFU1RfUChQcm90b3N0cmVhbU9iamVjdFNvdXJjZVRl
c3QsIEJhZEF1dGhvcikgewotICBBdXRob3IgYXV0aG9yOwotICBhdXRob3Iuc2V0X2FsaXZlKGZh
bHNlKTsKLSAgYXV0aG9yLnNldF9uYW1lKCJqb2huIik7Ci0gIGF1dGhvci5zZXRfaWQoMTIzNEwp
OwotICBhdXRob3IuYWRkX3BzZXVkb255bSgicGhpbCIpOwotICBhdXRob3IuYWRkX3BzZXVkb255
bSgiYm9iIik7Ci0KLSAgb3dfLlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5TdGFydExpc3QoImFs
aXZlIikKLSAgICAgIC0+UmVuZGVyQm9vbCgiIiwgZmFsc2UpCi0gICAgICAtPkVuZExpc3QoKQot
ICAgICAgLT5TdGFydExpc3QoIm5hbWUiKQotICAgICAgLT5SZW5kZXJVaW50NjQoIiIsIHN0YXRp
Y19jYXN0PHVpbnQ2ND4oJ2onKSkKLSAgICAgIC0+UmVuZGVyVWludDY0KCIiLCBzdGF0aWNfY2Fz
dDx1aW50NjQ+KCdvJykpCi0gICAgICAtPlJlbmRlclVpbnQ2NCgiIiwgc3RhdGljX2Nhc3Q8dWlu
dDY0PignaCcpKQotICAgICAgLT5SZW5kZXJVaW50NjQoIiIsIHN0YXRpY19jYXN0PHVpbnQ2ND4o
J24nKSkKLSAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAtPlJlbmRlclN0cmluZygicHNldWRvbnlt
IiwgInBoaWwiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInBzZXVkb255bSIsICJib2IiKQotICAg
ICAgLT5FbmRPYmplY3QoKTsKLSAgLy8gUHJvdG9zdHJlYW0gY3JlYXRlZCB3aXRoIEF1dGhvciwg
YnV0IHBhcnNlZCB3aXRoIEJhZEF1dGhvci4KLSAgRG9UZXN0KGF1dGhvciwgQmFkQXV0aG9yOjpk
ZXNjcmlwdG9yKCkpOwotfQotCi1URVNUX1AoUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VUZXN0LCBO
ZXN0ZWRCb29rVG9CYWROZXN0ZWRCb29rKSB7Ci0gIEJvb2sqIGJvb2sgPSBuZXcgQm9vaygpOwot
ICBib29rLT5zZXRfbGVuZ3RoKDI1MCk7Ci0gIGJvb2stPnNldF9wdWJsaXNoZWQoMjAxNEwpOwot
ICBOZXN0ZWRCb29rIG5lc3RlZDsKLSAgbmVzdGVkLnNldF9hbGxvY2F0ZWRfYm9vayhib29rKTsK
LQotICBvd18uU3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0TGlzdCgiYm9vayIpCi0gICAg
ICAtPlJlbmRlclVpbnQzMigiIiwgMjQpICAvLyB0YWcgZm9yIGZpZWxkIGxlbmd0aCAoMyA8PCAz
KQotICAgICAgLT5SZW5kZXJVaW50MzIoIiIsIDI1MCkKLSAgICAgIC0+UmVuZGVyVWludDMyKCIi
LCAzMikgIC8vIHRhZyBmb3IgZmllbGQgcHVibGlzaGVkICg0IDw8IDMpCi0gICAgICAtPlJlbmRl
clVpbnQzMigiIiwgMjAxNCkKLSAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAtPkVuZE9iamVjdCgp
OwotICAvLyBQcm90b3N0cmVhbSBjcmVhdGVkIHdpdGggTmVzdGVkQm9vaywgYnV0IHBhcnNlZCB3
aXRoIEJhZE5lc3RlZEJvb2suCi0gIERvVGVzdChuZXN0ZWQsIEJhZE5lc3RlZEJvb2s6OmRlc2Ny
aXB0b3IoKSk7Ci19Ci0KLVRFU1RfUChQcm90b3N0cmVhbU9iamVjdFNvdXJjZVRlc3QsIEJhZE5l
c3RlZEJvb2tUb05lc3RlZEJvb2spIHsKLSAgQmFkTmVzdGVkQm9vayBuZXN0ZWQ7Ci0gIG5lc3Rl
ZC5hZGRfYm9vaygxKTsKLSAgbmVzdGVkLmFkZF9ib29rKDIpOwotICBuZXN0ZWQuYWRkX2Jvb2so
Myk7Ci0gIG5lc3RlZC5hZGRfYm9vayg0KTsKLSAgbmVzdGVkLmFkZF9ib29rKDUpOwotICBuZXN0
ZWQuYWRkX2Jvb2soNik7Ci0gIG5lc3RlZC5hZGRfYm9vayg3KTsKLQotICBvd18uU3RhcnRPYmpl
Y3QoIiIpLT5TdGFydE9iamVjdCgiYm9vayIpLT5FbmRPYmplY3QoKS0+RW5kT2JqZWN0KCk7Ci0g
IC8vIFByb3Rvc3RyZWFtIGNyZWF0ZWQgd2l0aCBCYWROZXN0ZWRCb29rLCBidXQgcGFyc2VkIHdp
dGggTmVzdGVkQm9vay4KLSAgRG9UZXN0KG5lc3RlZCwgTmVzdGVkQm9vazo6ZGVzY3JpcHRvcigp
KTsKLX0KLQotVEVTVF9QKFByb3Rvc3RyZWFtT2JqZWN0U291cmNlVGVzdCwKLSAgICAgICBMb25n
UmVwZWF0ZWRMaXN0RG9lc05vdEJyZWFrSW50b011bHRpcGxlSnNvbkxpc3RzKSB7Ci0gIEJvb2sg
Ym9vazsKLQotICBpbnQgcmVwZWF0ID0gMTAwMDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcmVw
ZWF0OyArK2kpIHsKLSAgICBCb29rX0xhYmVsKiBsYWJlbCA9IGJvb2suYWRkX2xhYmVscygpOwot
ICAgIGxhYmVsLT5zZXRfa2V5KFN0ckNhdCgiaSIsIGkpKTsKLSAgICBsYWJlbC0+c2V0X3ZhbHVl
KFN0ckNhdCgidiIsIGkpKTsKLSAgfQotCi0gIC8vIE1ha2Ugc3VyZSBTdGFydExpc3QgYW5kIEVu
ZExpc3QgYXJlIGNhbGxlZCBleGFjdGx5IG9uY2UgKHNlZSBiLzE4MjI3NDk5IGZvcgotICAvLyBw
cm9ibGVtcyB3aGVuIHRoaXMgZG9lc24ndCBoYXBwZW4pCi0gIEVYUEVDVF9DQUxMKG1vY2tfLCBT
dGFydExpc3QoXykpLlRpbWVzKDEpOwotICBFWFBFQ1RfQ0FMTChtb2NrXywgRW5kTGlzdCgpKS5U
aW1lcygxKTsKLQotICBEb1Rlc3QoYm9vaywgQm9vazo6ZGVzY3JpcHRvcigpKTsKLX0KLQotVEVT
VF9QKFByb3Rvc3RyZWFtT2JqZWN0U291cmNlVGVzdCwgTG93ZXJDYW1lbEVudW1PdXRwdXRUZXN0
KSB7Ci0gIEJvb2sgYm9vazsKLSAgYm9vay5zZXRfdHlwZShCb29rOjpBQ1RJT05fQU5EX0FEVkVO
VFVSRSk7Ci0KLSAgVXNlTG93ZXJDYW1lbEZvckVudW1zKCk7Ci0KLSAgb3dfLlN0YXJ0T2JqZWN0
KCIiKS0+UmVuZGVyU3RyaW5nKCJ0eXBlIiwgImFjdGlvbkFuZEFkdmVudHVyZSIpLT5FbmRPYmpl
Y3QoKTsKLSAgRG9UZXN0KGJvb2ssIEJvb2s6OmRlc2NyaXB0b3IoKSk7Ci19Ci0KLVRFU1RfUChQ
cm90b3N0cmVhbU9iamVjdFNvdXJjZVRlc3QsIEVudW1DYXNlSXNVbmNoYW5nZWRCeURlZmF1bHQp
IHsKLSAgQm9vayBib29rOwotICBib29rLnNldF90eXBlKEJvb2s6OkFDVElPTl9BTkRfQURWRU5U
VVJFKTsKLSAgb3dfLlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInR5cGUi
LCAiQUNUSU9OX0FORF9BRFZFTlRVUkUiKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgRG9UZXN0
KGJvb2ssIEJvb2s6OmRlc2NyaXB0b3IoKSk7Ci19Ci0KLVRFU1RfUChQcm90b3N0cmVhbU9iamVj
dFNvdXJjZVRlc3QsIEN5Y2xpY01lc3NhZ2VEZXB0aFRlc3QpIHsKLSAgQ3ljbGljIGN5Y2xpYzsK
LSAgY3ljbGljLnNldF9tX2ludCgxMjMpOwotCi0gIEJvb2sqIGJvb2sgPSBjeWNsaWMubXV0YWJs
ZV9tX2Jvb2soKTsKLSAgYm9vay0+c2V0X3RpdGxlKCJib29rIHRpdGxlIik7Ci0gIEN5Y2xpYyog
Y3VycmVudCA9IGN5Y2xpYy5tdXRhYmxlX21fY3ljbGljKCk7Ci0gIEF1dGhvciogY3VycmVudF9h
dXRob3IgPSBjeWNsaWMuYWRkX21fYXV0aG9yKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgNjM7
ICsraSkgewotICAgIEF1dGhvciogbmV4dCA9IGN1cnJlbnRfYXV0aG9yLT5hZGRfZnJpZW5kXygp
OwotICAgIG5leHQtPnNldF9pZChpKTsKLSAgICBuZXh0LT5zZXRfbmFtZShTdHJDYXQoImF1dGhv
cl9uYW1lXyIsIGkpKTsKLSAgICBuZXh0LT5zZXRfYWxpdmUodHJ1ZSk7Ci0gICAgY3VycmVudF9h
dXRob3IgPSBuZXh0OwotICB9Ci0KLSAgLy8gUmVjdXJzaXZlIG1lc3NhZ2Ugd2l0aCBkZXB0aCAo
NjUpID4gbWF4IChtYXggaXMgNjQpLgotICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kpIHsK
LSAgICBDeWNsaWMqIG5leHQgPSBjdXJyZW50LT5tdXRhYmxlX21fY3ljbGljKCk7Ci0gICAgbmV4
dC0+c2V0X21fc3RyKFN0ckNhdCgiY291bnRfIiwgaSkpOwotICAgIGN1cnJlbnQgPSBuZXh0Owot
ICB9Ci0KLSAgU3RhdHVzIHN0YXR1cyA9IEV4ZWN1dGVUZXN0KGN5Y2xpYywgQ3ljbGljOjpkZXNj
cmlwdG9yKCkpOwotICBFWFBFQ1RfRVEodXRpbDo6ZXJyb3I6OklOVkFMSURfQVJHVU1FTlQsIHN0
YXR1cy5lcnJvcl9jb2RlKCkpOwotfQotCi1jbGFzcyBQcm90b3N0cmVhbU9iamVjdFNvdXJjZU1h
cHNUZXN0IDogcHVibGljIFByb3Rvc3RyZWFtT2JqZWN0U291cmNlVGVzdCB7Ci0gcHJvdGVjdGVk
OgotICBQcm90b3N0cmVhbU9iamVjdFNvdXJjZU1hcHNUZXN0KCkgewotICAgIGhlbHBlcl8uUmVz
ZXRUeXBlSW5mbyhNYXBPdXQ6OmRlc2NyaXB0b3IoKSk7Ci0gIH0KLX07Ci0KLUlOU1RBTlRJQVRF
X1RFU1RfQ0FTRV9QKERpZmZlcmVudFR5cGVJbmZvU291cmNlVGVzdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFByb3Rvc3RyZWFtT2JqZWN0U291cmNlTWFwc1Rlc3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICA6OnRlc3Rpbmc6OlZhbHVlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0aW5nOjpVU0VfVFlQRV9SRVNPTFZFUikpOwotCi0vLyBUZXN0cyBKU09OIG1hcC4KLS8v
Ci0vLyBUaGlzIGlzIHRoZSBleGFtcGxlIGV4cGVjdGVkIG91dHB1dC4KLS8vIHsKLS8vICAgIm1h
cDEiOiB7Ci0vLyAgICAgImtleTEiOiB7Ci0vLyAgICAgICAiZm9vIjogImZvb3ZhbHVlIgotLy8g
ICAgIH0sCi0vLyAgICAgImtleTIiOiB7Ci0vLyAgICAgICAiZm9vIjogImJhcnZhbHVlIgotLy8g
ICAgIH0KLS8vICAgfSwKLS8vICAgIm1hcDIiOiB7Ci0vLyAgICAgIm5lc3RlZHNlbGYiOiB7Ci0v
LyAgICAgICAibWFwMSI6IHsKLS8vICAgICAgICAgIm5lc3RlZF9rZXkxIjogewotLy8gICAgICAg
ICAgICJmb28iOiAibmVzdGVkX2ZvbyIKLS8vICAgICAgICAgfQotLy8gICAgICAgfSwKLS8vICAg
ICAgICJiYXIiOiAibmVzdGVkX2Jhcl9zdHJpbmciCi0vLyAgICAgfQotLy8gICB9LAotLy8gICAi
bWFwMyI6IHsKLS8vICAgICAiMTExIjogIm9uZSBvbmUgb25lIgotLy8gICB9LAotLy8gICAiYmFy
IjogInRvcCBiYXIiCi0vLyB9Ci1URVNUX1AoUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VNYXBzVGVz
dCwgTWFwc1Rlc3QpIHsKLSAgTWFwT3V0IG91dDsKLSAgKCpvdXQubXV0YWJsZV9tYXAxKCkpWyJr
ZXkxIl0uc2V0X2ZvbygiZm9vdmFsdWUiKTsKLSAgKCpvdXQubXV0YWJsZV9tYXAxKCkpWyJrZXky
Il0uc2V0X2ZvbygiYmFydmFsdWUiKTsKLQotICBNYXBPdXQqIG5lc3RlZF92YWx1ZSA9ICYoKm91
dC5tdXRhYmxlX21hcDIoKSlbIm5lc3RlZHNlbGYiXTsKLSAgKCpuZXN0ZWRfdmFsdWUtPm11dGFi
bGVfbWFwMSgpKVsibmVzdGVkX2tleTEiXS5zZXRfZm9vKCJuZXN0ZWRfZm9vIik7Ci0gIG5lc3Rl
ZF92YWx1ZS0+c2V0X2JhcigibmVzdGVkX2Jhcl9zdHJpbmciKTsKLQotICAoKm91dC5tdXRhYmxl
X21hcDMoKSlbMTExXSA9ICJvbmUgb25lIG9uZSI7Ci0KLSAgb3V0LnNldF9iYXIoInRvcCBiYXIi
KTsKLQotICBvd18uU3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJtYXAxIikK
LSAgICAgIC0+U3RhcnRPYmplY3QoImtleTEiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoImZvbyIs
ICJmb292YWx1ZSIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJr
ZXkyIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJmb28iLCAiYmFydmFsdWUiKQotICAgICAgLT5F
bmRPYmplY3QoKQotICAgICAgLT5TdGFydE9iamVjdCgibWFwMiIpCi0gICAgICAtPlN0YXJ0T2Jq
ZWN0KCJuZXN0ZWRzZWxmIikKLSAgICAgIC0+U3RhcnRPYmplY3QoIm1hcDEiKQotICAgICAgLT5T
dGFydE9iamVjdCgibmVzdGVkX2tleTEiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoImZvbyIsICJu
ZXN0ZWRfZm9vIikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAg
ICAgIC0+UmVuZGVyU3RyaW5nKCJiYXIiLCAibmVzdGVkX2Jhcl9zdHJpbmciKQotICAgICAgLT5F
bmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5TdGFydE9iamVjdCgibWFw
MyIpCi0gICAgICAtPlJlbmRlclN0cmluZygiMTExIiwgIm9uZSBvbmUgb25lIikKLSAgICAgIC0+
RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJi
YXIiLCAidG9wIGJhciIpCi0gICAgICAtPkVuZE9iamVjdCgpOwotCi0gIERvVGVzdChvdXQsIE1h
cE91dDo6ZGVzY3JpcHRvcigpKTsKLX0KLQotVEVTVF9QKFByb3Rvc3RyZWFtT2JqZWN0U291cmNl
TWFwc1Rlc3QsIE1pc3NpbmdLZXlzVGVzdCkgewotICAvLyBNYXBPdXRXaXJlRm9ybWF0IGhhcyB0
aGUgc2FtZSB3aXJlIHJlcHJlc2VudGF0aW9uIHdpdGggTWFwT3V0IGJ1dCB1c2VzCi0gIC8vIHJl
cGVhdGVkIG1lc3NhZ2UgZmllbGRzIHRvIHJlcHJlc2VudCBtYXAgZmllbGRzIHNvIHdlIGNhbiBp
bnRlbnRpb25hbGx5Ci0gIC8vIGxlYXZlIG91dCB0aGUga2V5IGZpZWxkIG9yIHRoZSB2YWx1ZSBm
aWVsZCBvZiBhIG1hcCBlbnRyeS4KLSAgTWFwT3V0V2lyZUZvcm1hdCBvdXQ7Ci0gIC8vIENyZWF0
ZSBzb21lIG1hcCBlbnRyaWVzIHdpdGhvdXQga2V5cy4gVGhleSB3aWxsIGJlIHJlbmRlcmVkIHdp
dGggdGhlCi0gIC8vIGRlZmF1bHQgdmFsdWVzICgiIiBmb3Igc3RyaW5ncywgIjAiIGZvciBpbnRl
Z2VycywgZXRjLikuCi0gIC8vIHsKLSAgLy8gICAibWFwMSI6IHsKLSAgLy8gICAgICIiOiB7Ci0g
IC8vICAgICAgICJmb28iOiAiZm9vdmFsdWUiCi0gIC8vICAgICB9Ci0gIC8vICAgfSwKLSAgLy8g
ICAibWFwMiI6IHsKLSAgLy8gICAgICIiOiB7Ci0gIC8vICAgICAgICJtYXAxIjogewotICAvLyAg
ICAgICAgICJuZXN0ZWRfa2V5MSI6IHsKLSAgLy8gICAgICAgICAgICJmb28iOiAibmVzdGVkX2Zv
byIKLSAgLy8gICAgICAgICB9Ci0gIC8vICAgICAgIH0KLSAgLy8gICAgIH0KLSAgLy8gICB9LAot
ICAvLyAgICJtYXAzIjogewotICAvLyAgICAgIjAiOiAib25lIG9uZSBvbmUiCi0gIC8vICAgfSwK
LSAgLy8gICAibWFwNCI6IHsKLSAgLy8gICAgICJmYWxzZSI6ICJib29sIgotICAvLyAgIH0KLSAg
Ly8gfQotICBvdXQuYWRkX21hcDEoKS0+bXV0YWJsZV92YWx1ZSgpLT5zZXRfZm9vKCJmb292YWx1
ZSIpOwotICBNYXBPdXQqIG5lc3RlZCA9IG91dC5hZGRfbWFwMigpLT5tdXRhYmxlX3ZhbHVlKCk7
Ci0gICgqbmVzdGVkLT5tdXRhYmxlX21hcDEoKSlbIm5lc3RlZF9rZXkxIl0uc2V0X2ZvbygibmVz
dGVkX2ZvbyIpOwotICBvdXQuYWRkX21hcDMoKS0+c2V0X3ZhbHVlKCJvbmUgb25lIG9uZSIpOwot
ICBvdXQuYWRkX21hcDQoKS0+c2V0X3ZhbHVlKCJib29sIik7Ci0KLSAgb3dfLlN0YXJ0T2JqZWN0
KCIiKQotICAgICAgLT5TdGFydE9iamVjdCgibWFwMSIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCIi
KQotICAgICAgLT5SZW5kZXJTdHJpbmcoImZvbyIsICJmb292YWx1ZSIpCi0gICAgICAtPkVuZE9i
amVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJtYXAyIikK
LSAgICAgIC0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJtYXAxIikKLSAg
ICAgIC0+U3RhcnRPYmplY3QoIm5lc3RlZF9rZXkxIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJm
b28iLCAibmVzdGVkX2ZvbyIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVj
dCgpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPlN0
YXJ0T2JqZWN0KCJtYXAzIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIwIiwgIm9uZSBvbmUgb25l
IikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+U3RhcnRPYmplY3QoIm1hcDQiKQotICAg
ICAgLT5SZW5kZXJTdHJpbmcoImZhbHNlIiwgImJvb2wiKQotICAgICAgLT5FbmRPYmplY3QoKQot
ICAgICAgLT5FbmRPYmplY3QoKTsKLQotICBEb1Rlc3Qob3V0LCBNYXBPdXQ6OmRlc2NyaXB0b3Io
KSk7Ci19Ci0KLWNsYXNzIFByb3Rvc3RyZWFtT2JqZWN0U291cmNlQW55c1Rlc3QgOiBwdWJsaWMg
UHJvdG9zdHJlYW1PYmplY3RTb3VyY2VUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFByb3Rvc3RyZWFt
T2JqZWN0U291cmNlQW55c1Rlc3QoKSB7Ci0gICAgaGVscGVyXy5SZXNldFR5cGVJbmZvKEFueU91
dDo6ZGVzY3JpcHRvcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnb29nbGU6OnByb3Rv
YnVmOjpBbnk6OmRlc2NyaXB0b3IoKSk7Ci0gIH0KLX07Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FT
RV9QKERpZmZlcmVudFR5cGVJbmZvU291cmNlVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IFByb3Rvc3RyZWFtT2JqZWN0U291cmNlQW55c1Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICA6OnRlc3Rpbmc6OlZhbHVlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0aW5n
OjpVU0VfVFlQRV9SRVNPTFZFUikpOwotCi0vLyBUZXN0cyBKU09OIGFueSBzdXBwb3J0LgotLy8K
LS8vIFRoaXMgaXMgdGhlIGV4YW1wbGUgZXhwZWN0ZWQgb3V0cHV0LgotLy8gewotLy8gICAiYW55
IjogewotLy8gICAgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1
Zi50ZXN0aW5nLmFueXMuQW55TSIKLS8vICAgICAiZm9vIjogImZvb3ZhbHVlIgotLy8gICB9Ci0v
LyB9Ci1URVNUX1AoUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VBbnlzVGVzdCwgQmFzaWNBbnkpIHsK
LSAgQW55T3V0IG91dDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpBbnkqIGFueSA9IG91dC5tdXRh
YmxlX2FueSgpOwotCi0gIEFueU0gbTsKLSAgbS5zZXRfZm9vKCJmb292YWx1ZSIpOwotICBhbnkt
PlBhY2tGcm9tKG0pOwotCi0gIG93Xy5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRPYmpl
Y3QoImFueSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiQHR5cGUiLAotICAgICAgICAgICAgICAg
ICAgICAgInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLnRlc3RpbmcuYW55cy5B
bnlNIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJmb28iLCAiZm9vdmFsdWUiKQotICAgICAgLT5F
bmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLQotICBEb1Rlc3Qob3V0LCBBbnlPdXQ6
OmRlc2NyaXB0b3IoKSk7Ci19Ci0KLVRFU1RfUChQcm90b3N0cmVhbU9iamVjdFNvdXJjZUFueXNU
ZXN0LCBSZWN1cnNpdmVBbnkpIHsKLSAgQW55T3V0IG91dDsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpBbnkqIGFueSA9IG91dC5tdXRhYmxlX2FueSgpOwotICBhbnktPnNldF90eXBlX3VybCgidHlw
ZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuQW55Iik7Ci0KLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjpBbnkgbmVzdGVkX2FueTsKLSAgbmVzdGVkX2FueS5zZXRfdHlwZV91cmwoCi0gICAg
ICAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYudGVzdGluZy5hbnlzLkFueU0i
KTsKLQotICBBbnlNIG07Ci0gIG0uc2V0X2ZvbygiZm9vdmFsdWUiKTsKLSAgbmVzdGVkX2FueS5z
ZXRfdmFsdWUobS5TZXJpYWxpemVBc1N0cmluZygpKTsKLQotICBhbnktPnNldF92YWx1ZShuZXN0
ZWRfYW55LlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotCi0gIG93Xy5TdGFydE9iamVjdCgiIikKLSAg
ICAgIC0+U3RhcnRPYmplY3QoImFueSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiQHR5cGUiLCAi
dHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuQW55IikKLSAgICAgIC0+U3RhcnRP
YmplY3QoInZhbHVlIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJAdHlwZSIsCi0gICAgICAgICAg
ICAgICAgICAgICAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYudGVzdGluZy5h
bnlzLkFueU0iKQotICAgICAgLT5SZW5kZXJTdHJpbmcoImZvbyIsICJmb292YWx1ZSIpCi0gICAg
ICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgp
OwotCi0gIERvVGVzdChvdXQsIEFueU91dDo6ZGVzY3JpcHRvcigpKTsKLX0KLQotVEVTVF9QKFBy
b3Rvc3RyZWFtT2JqZWN0U291cmNlQW55c1Rlc3QsIERvdWJsZVJlY3Vyc2l2ZUFueSkgewotICBB
bnlPdXQgb3V0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkFueSogYW55ID0gb3V0Lm11dGFibGVf
YW55KCk7Ci0gIGFueS0+c2V0X3R5cGVfdXJsKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5w
cm90b2J1Zi5BbnkiKTsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OkFueSBuZXN0ZWRfYW55Owot
ICBuZXN0ZWRfYW55LnNldF90eXBlX3VybCgidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJv
dG9idWYuQW55Iik7Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpBbnkgc2Vjb25kX25lc3RlZF9h
bnk7Ci0gIHNlY29uZF9uZXN0ZWRfYW55LnNldF90eXBlX3VybCgKLSAgICAgICJ0eXBlLmdvb2ds
ZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi50ZXN0aW5nLmFueXMuQW55TSIpOwotCi0gIEFueU0g
bTsKLSAgbS5zZXRfZm9vKCJmb292YWx1ZSIpOwotICBzZWNvbmRfbmVzdGVkX2FueS5zZXRfdmFs
dWUobS5TZXJpYWxpemVBc1N0cmluZygpKTsKLSAgbmVzdGVkX2FueS5zZXRfdmFsdWUoc2Vjb25k
X25lc3RlZF9hbnkuU2VyaWFsaXplQXNTdHJpbmcoKSk7Ci0gIGFueS0+c2V0X3ZhbHVlKG5lc3Rl
ZF9hbnkuU2VyaWFsaXplQXNTdHJpbmcoKSk7Ci0KLSAgb3dfLlN0YXJ0T2JqZWN0KCIiKQotICAg
ICAgLT5TdGFydE9iamVjdCgiYW55IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJAdHlwZSIsICJ0
eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5BbnkiKQotICAgICAgLT5TdGFydE9i
amVjdCgidmFsdWUiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIkB0eXBlIiwgInR5cGUuZ29vZ2xl
YXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkFueSIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJ2YWx1
ZSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiQHR5cGUiLAotICAgICAgICAgICAgICAgICAgICAg
InR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLnRlc3RpbmcuYW55cy5BbnlNIikK
LSAgICAgIC0+UmVuZGVyU3RyaW5nKCJmb28iLCAiZm9vdmFsdWUiKQotICAgICAgLT5FbmRPYmpl
Y3QoKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5F
bmRPYmplY3QoKTsKLQotICBEb1Rlc3Qob3V0LCBBbnlPdXQ6OmRlc2NyaXB0b3IoKSk7Ci19Ci0K
LVRFU1RfUChQcm90b3N0cmVhbU9iamVjdFNvdXJjZUFueXNUZXN0LCBFbXB0eUFueU91dHB1dHNF
bXB0eU9iamVjdCkgewotICBBbnlPdXQgb3V0OwotICBvdXQubXV0YWJsZV9hbnkoKTsKLQotICBv
d18uU3RhcnRPYmplY3QoIiIpLT5TdGFydE9iamVjdCgiYW55IiktPkVuZE9iamVjdCgpLT5FbmRP
YmplY3QoKTsKLQotICBEb1Rlc3Qob3V0LCBBbnlPdXQ6OmRlc2NyaXB0b3IoKSk7Ci19Ci0KLVRF
U1RfUChQcm90b3N0cmVhbU9iamVjdFNvdXJjZUFueXNUZXN0LCBFbXB0eVdpdGhUeXBlQW5kTm9W
YWx1ZU91dHB1dHNUeXBlKSB7Ci0gIEFueU91dCBvdXQ7Ci0gIG91dC5tdXRhYmxlX2FueSgpLT5z
ZXRfdHlwZV91cmwoImZvby5nb29nbGVhcGlzLmNvbS9teS5UeXBlIik7Ci0KLSAgb3dfLlN0YXJ0
T2JqZWN0KCIiKQotICAgICAgLT5TdGFydE9iamVjdCgiYW55IikKLSAgICAgIC0+UmVuZGVyU3Ry
aW5nKCJAdHlwZSIsICJmb28uZ29vZ2xlYXBpcy5jb20vbXkuVHlwZSIpCi0gICAgICAtPkVuZE9i
amVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpOwotCi0gIERvVGVzdChvdXQsIEFueU91dDo6ZGVz
Y3JpcHRvcigpKTsKLX0KLQotVEVTVF9QKFByb3Rvc3RyZWFtT2JqZWN0U291cmNlQW55c1Rlc3Qs
IE1pc3NpbmdUeXBlVXJsRXJyb3IpIHsKLSAgQW55T3V0IG91dDsKLSAgOjpnb29nbGU6OnByb3Rv
YnVmOjpBbnkqIGFueSA9IG91dC5tdXRhYmxlX2FueSgpOwotCi0gIEFueU0gbTsKLSAgbS5zZXRf
Zm9vKCJmb292YWx1ZSIpOwotICBhbnktPnNldF92YWx1ZShtLlNlcmlhbGl6ZUFzU3RyaW5nKCkp
OwotCi0gIC8vIFdlIHN0YXJ0IHRoZSAiQW55T3V0IiBwYXJ0IGFuZCB0aGVuIGZhaWwgd2hlbiB3
ZSBoaXQgdGhlIEFueSBvYmplY3QuCi0gIG93Xy5TdGFydE9iamVjdCgiIik7Ci0KLSAgU3RhdHVz
IHN0YXR1cyA9IEV4ZWN1dGVUZXN0KG91dCwgQW55T3V0OjpkZXNjcmlwdG9yKCkpOwotICBFWFBF
Q1RfRVEodXRpbDo6ZXJyb3I6OklOVEVSTkFMLCBzdGF0dXMuZXJyb3JfY29kZSgpKTsKLX0KLQot
VEVTVF9QKFByb3Rvc3RyZWFtT2JqZWN0U291cmNlQW55c1Rlc3QsIFVua25vd25UeXBlU2Vydmlj
ZUVycm9yKSB7Ci0gIEFueU91dCBvdXQ7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55KiBhbnkg
PSBvdXQubXV0YWJsZV9hbnkoKTsKLSAgYW55LT5zZXRfdHlwZV91cmwoImZvby5nb29nbGVhcGlz
LmNvbS9teS5vd24uVHlwZSIpOwotCi0gIEFueU0gbTsKLSAgbS5zZXRfZm9vKCJmb292YWx1ZSIp
OwotICBhbnktPnNldF92YWx1ZShtLlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotCi0gIC8vIFdlIHN0
YXJ0IHRoZSAiQW55T3V0IiBwYXJ0IGFuZCB0aGVuIGZhaWwgd2hlbiB3ZSBoaXQgdGhlIEFueSBv
YmplY3QuCi0gIG93Xy5TdGFydE9iamVjdCgiIik7Ci0KLSAgU3RhdHVzIHN0YXR1cyA9IEV4ZWN1
dGVUZXN0KG91dCwgQW55T3V0OjpkZXNjcmlwdG9yKCkpOwotICBFWFBFQ1RfRVEodXRpbDo6ZXJy
b3I6OklOVEVSTkFMLCBzdGF0dXMuZXJyb3JfY29kZSgpKTsKLX0KLQotVEVTVF9QKFByb3Rvc3Ry
ZWFtT2JqZWN0U291cmNlQW55c1Rlc3QsIFVua25vd25UeXBlRXJyb3IpIHsKLSAgQW55T3V0IG91
dDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpBbnkqIGFueSA9IG91dC5tdXRhYmxlX2FueSgpOwot
ICBhbnktPnNldF90eXBlX3VybCgidHlwZS5nb29nbGVhcGlzLmNvbS91bmtub3duLlR5cGUiKTsK
LQotICBBbnlNIG07Ci0gIG0uc2V0X2ZvbygiZm9vdmFsdWUiKTsKLSAgYW55LT5zZXRfdmFsdWUo
bS5TZXJpYWxpemVBc1N0cmluZygpKTsKLQotICAvLyBXZSBzdGFydCB0aGUgIkFueU91dCIgcGFy
dCBhbmQgdGhlbiBmYWlsIHdoZW4gd2UgaGl0IHRoZSBBbnkgb2JqZWN0LgotICBvd18uU3RhcnRP
YmplY3QoIiIpOwotCi0gIFN0YXR1cyBzdGF0dXMgPSBFeGVjdXRlVGVzdChvdXQsIEFueU91dDo6
ZGVzY3JpcHRvcigpKTsKLSAgRVhQRUNUX0VRKHV0aWw6OmVycm9yOjpJTlRFUk5BTCwgc3RhdHVz
LmVycm9yX2NvZGUoKSk7Ci19Ci0KLWNsYXNzIFByb3Rvc3RyZWFtT2JqZWN0U291cmNlU3RydWN0
VGVzdCA6IHB1YmxpYyBQcm90b3N0cmVhbU9iamVjdFNvdXJjZVRlc3QgewotIHByb3RlY3RlZDoK
LSAgUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VTdHJ1Y3RUZXN0KCkgewotICAgIGhlbHBlcl8uUmVz
ZXRUeXBlSW5mbyhTdHJ1Y3RUeXBlOjpkZXNjcmlwdG9yKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGdvb2dsZTo6cHJvdG9idWY6OlN0cnVjdDo6ZGVzY3JpcHRvcigpKTsKLSAgfQotfTsK
LQotSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoRGlmZmVyZW50VHlwZUluZm9Tb3VyY2VUZXN0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VTdHJ1Y3RUZXN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgOjp0ZXN0aW5nOjpWYWx1ZXMoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdGluZzo6VVNFX1RZUEVfUkVTT0xWRVIpKTsKLQotLy8gVGVz
dHMgc3RydWN0Ci0vLwotLy8gICJvYmplY3QiOiB7Ci0vLyAgICAiazEiOiAxMjMsCi0vLyAgICAi
azIiOiB0cnVlCi0vLyAgfQotVEVTVF9QKFByb3Rvc3RyZWFtT2JqZWN0U291cmNlU3RydWN0VGVz
dCwgU3RydWN0UmVuZGVyU3VjY2VzcykgewotICBTdHJ1Y3RUeXBlIG91dDsKLSAgZ29vZ2xlOjpw
cm90b2J1Zjo6U3RydWN0KiBzID0gb3V0Lm11dGFibGVfb2JqZWN0KCk7Ci0gIHMtPm11dGFibGVf
ZmllbGRzKCktPm9wZXJhdG9yW10oImsxIikuc2V0X251bWJlcl92YWx1ZSgxMjMpOwotICBzLT5t
dXRhYmxlX2ZpZWxkcygpLT5vcGVyYXRvcltdKCJrMiIpLnNldF9ib29sX3ZhbHVlKHRydWUpOwot
Ci0gIG93Xy5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoIm9iamVjdCIpCi0g
ICAgICAtPlJlbmRlckRvdWJsZSgiazEiLCAxMjMpCi0gICAgICAtPlJlbmRlckJvb2woImsyIiwg
dHJ1ZSkKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0KLSAgRG9U
ZXN0KG91dCwgU3RydWN0VHlwZTo6ZGVzY3JpcHRvcigpKTsKLX0KLQotVEVTVF9QKFByb3Rvc3Ry
ZWFtT2JqZWN0U291cmNlU3RydWN0VGVzdCwgTWlzc2luZ1ZhbHVlU2tpcHNGaWVsZCkgewotICBT
dHJ1Y3RUeXBlIG91dDsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6U3RydWN0KiBzID0gb3V0Lm11dGFi
bGVfb2JqZWN0KCk7Ci0gIHMtPm11dGFibGVfZmllbGRzKCktPm9wZXJhdG9yW10oImsxIik7Ci0K
LSAgb3dfLlN0YXJ0T2JqZWN0KCIiKS0+U3RhcnRPYmplY3QoIm9iamVjdCIpLT5FbmRPYmplY3Qo
KS0+RW5kT2JqZWN0KCk7Ci0KLSAgRG9UZXN0KG91dCwgU3RydWN0VHlwZTo6ZGVzY3JpcHRvcigp
KTsKLX0KLQotY2xhc3MgUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VGaWVsZE1hc2tUZXN0Ci0gICAg
OiBwdWJsaWMgUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFBy
b3Rvc3RyZWFtT2JqZWN0U291cmNlRmllbGRNYXNrVGVzdCgpIHsKLSAgICBoZWxwZXJfLlJlc2V0
VHlwZUluZm8oRmllbGRNYXNrVGVzdDo6ZGVzY3JpcHRvcigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb29nbGU6OnByb3RvYnVmOjpGaWVsZE1hc2s6OmRlc2NyaXB0b3IoKSk7Ci0gIH0K
LX07Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKERpZmZlcmVudFR5cGVJbmZvU291cmNlVGVz
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFByb3Rvc3RyZWFtT2JqZWN0U291cmNlRmllbGRN
YXNrVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVzdGluZzo6VmFsdWVzKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rpbmc6OlVTRV9UWVBFX1JFU09MVkVSKSk7Ci0K
LVRFU1RfUChQcm90b3N0cmVhbU9iamVjdFNvdXJjZUZpZWxkTWFza1Rlc3QsIEZpZWxkTWFza1Jl
bmRlclN1Y2Nlc3MpIHsKLSAgRmllbGRNYXNrVGVzdCBvdXQ7Ci0gIG91dC5zZXRfaWQoIjEiKTsK
LSAgb3V0Lm11dGFibGVfc2luZ2xlX21hc2soKS0+YWRkX3BhdGhzKCJwYXRoMSIpOwotICBvdXQu
bXV0YWJsZV9zaW5nbGVfbWFzaygpLT5hZGRfcGF0aHMoInNuYWtlX2Nhc2VfcGF0aDIiKTsKLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpGaWVsZE1hc2sqIG1hc2sgPSBvdXQuYWRkX3JlcGVhdGVkX21h
c2soKTsKLSAgbWFzay0+YWRkX3BhdGhzKCJwYXRoMyIpOwotICBtYXNrID0gb3V0LmFkZF9yZXBl
YXRlZF9tYXNrKCk7Ci0gIG1hc2stPmFkZF9wYXRocygic25ha2VfY2FzZV9wYXRoNCIpOwotICBt
YXNrLT5hZGRfcGF0aHMoInBhdGg1Iik7Ci0gIE5lc3RlZEZpZWxkTWFzayogbmVzdGVkID0gb3V0
LmFkZF9uZXN0ZWRfbWFzaygpOwotICBuZXN0ZWQtPnNldF9kYXRhKCJkYXRhIik7Ci0gIG5lc3Rl
ZC0+bXV0YWJsZV9zaW5nbGVfbWFzaygpLT5hZGRfcGF0aHMoIm5lc3RlZC5wYXRoMSIpOwotICBu
ZXN0ZWQtPm11dGFibGVfc2luZ2xlX21hc2soKS0+YWRkX3BhdGhzKCJuZXN0ZWRfZmllbGQuc25h
a2VfY2FzZV9wYXRoMiIpOwotICBtYXNrID0gbmVzdGVkLT5hZGRfcmVwZWF0ZWRfbWFzaygpOwot
ICBtYXNrLT5hZGRfcGF0aHMoIm5lc3RlZF9maWVsZC5wYXRoMyIpOwotICBtYXNrLT5hZGRfcGF0
aHMoIm5lc3RlZC5zbmFrZV9jYXNlX3BhdGg0Iik7Ci0gIG1hc2sgPSBuZXN0ZWQtPmFkZF9yZXBl
YXRlZF9tYXNrKCk7Ci0gIG1hc2stPmFkZF9wYXRocygibmVzdGVkLnBhdGg1Iik7Ci0gIG1hc2sg
PSBuZXN0ZWQtPmFkZF9yZXBlYXRlZF9tYXNrKCk7Ci0gIG1hc2stPmFkZF9wYXRocygKLSAgICAg
ICJzbmFrZV9jYXNlLm1hcF9maWVsZFtcIm1hcF9rZXlfc2hvdWxkX2JlX2lnbm9yZWRcIl0ubmVz
dGVkX3NuYWtlX2Nhc2UuIgotICAgICAgIm1hcF9maWVsZFtcIm1hcF9rZXlfc2hvXFxcInVsZF9i
ZV9pZ25vcmVkXCJdIik7Ci0KLSAgb3dfLlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5SZW5kZXJT
dHJpbmcoImlkIiwgIjEiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInNpbmdsZU1hc2siLCAicGF0
aDEsc25ha2VDYXNlUGF0aDIiKQotICAgICAgLT5TdGFydExpc3QoInJlcGVhdGVkTWFzayIpCi0g
ICAgICAtPlJlbmRlclN0cmluZygiIiwgInBhdGgzIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIi
LCAic25ha2VDYXNlUGF0aDQscGF0aDUiKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+U3Rh
cnRMaXN0KCJuZXN0ZWRNYXNrIikKLSAgICAgIC0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJl
bmRlclN0cmluZygiZGF0YSIsICJkYXRhIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJzaW5nbGVN
YXNrIiwgIm5lc3RlZC5wYXRoMSxuZXN0ZWRGaWVsZC5zbmFrZUNhc2VQYXRoMiIpCi0gICAgICAt
PlN0YXJ0TGlzdCgicmVwZWF0ZWRNYXNrIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIiLCAibmVz
dGVkRmllbGQucGF0aDMsbmVzdGVkLnNuYWtlQ2FzZVBhdGg0IikKLSAgICAgIC0+UmVuZGVyU3Ry
aW5nKCIiLCAibmVzdGVkLnBhdGg1IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIiLAotICAgICAg
ICAgICAgICAgICAgICAgInNuYWtlQ2FzZS5tYXBGaWVsZFtcIm1hcF9rZXlfc2hvdWxkX2JlX2ln
bm9yZWRcIl0uIgotICAgICAgICAgICAgICAgICAgICAgIm5lc3RlZFNuYWtlQ2FzZS5tYXBGaWVs
ZFtcIm1hcF9rZXlfc2hvXFxcInVsZF9iZV8iCi0gICAgICAgICAgICAgICAgICAgICAiaWdub3Jl
ZFwiXSIpCi0gICAgICAtPkVuZExpc3QoKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5F
bmRMaXN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0KLSAgRG9UZXN0KG91dCwgRmllbGRNYXNr
VGVzdDo6ZGVzY3JpcHRvcigpKTsKLX0KLQotY2xhc3MgUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VU
aW1lc3RhbXBUZXN0Ci0gICAgOiBwdWJsaWMgUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VUZXN0IHsK
LSBwcm90ZWN0ZWQ6Ci0gIFByb3Rvc3RyZWFtT2JqZWN0U291cmNlVGltZXN0YW1wVGVzdCgpIHsK
LSAgICBoZWxwZXJfLlJlc2V0VHlwZUluZm8oVGltZXN0YW1wRHVyYXRpb246OmRlc2NyaXB0b3Io
KSk7Ci0gIH0KLX07Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKERpZmZlcmVudFR5cGVJbmZv
U291cmNlVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFByb3Rvc3RyZWFtT2JqZWN0U291
cmNlVGltZXN0YW1wVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVzdGluZzo6VmFs
dWVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rpbmc6OlVTRV9UWVBFX1JFU09M
VkVSKSk7Ci0KLVRFU1RfUChQcm90b3N0cmVhbU9iamVjdFNvdXJjZVRpbWVzdGFtcFRlc3QsIElu
dmFsaWRUaW1lc3RhbXBCZWxvd01pblRlc3QpIHsKLSAgVGltZXN0YW1wRHVyYXRpb24gb3V0Owot
ICBnb29nbGU6OnByb3RvYnVmOjpUaW1lc3RhbXAqIHRzID0gb3V0Lm11dGFibGVfdHMoKTsKLSAg
Ly8gTWluIGFsbG93ZWQgc2Vjb25kcyAtIDEKLSAgdHMtPnNldF9zZWNvbmRzKGtUaW1lc3RhbXBN
aW5TZWNvbmRzIC0gMSk7Ci0gIG93Xy5TdGFydE9iamVjdCgiIik7Ci0KLSAgU3RhdHVzIHN0YXR1
cyA9IEV4ZWN1dGVUZXN0KG91dCwgVGltZXN0YW1wRHVyYXRpb246OmRlc2NyaXB0b3IoKSk7Ci0g
IEVYUEVDVF9FUSh1dGlsOjplcnJvcjo6SU5URVJOQUwsIHN0YXR1cy5lcnJvcl9jb2RlKCkpOwot
fQotCi1URVNUX1AoUHJvdG9zdHJlYW1PYmplY3RTb3VyY2VUaW1lc3RhbXBUZXN0LCBJbnZhbGlk
VGltZXN0YW1wQWJvdmVNYXhUZXN0KSB7Ci0gIFRpbWVzdGFtcER1cmF0aW9uIG91dDsKLSAgZ29v
Z2xlOjpwcm90b2J1Zjo6VGltZXN0YW1wKiB0cyA9IG91dC5tdXRhYmxlX3RzKCk7Ci0gIC8vIE1h
eCBhbGxvd2VkIHNlY29uZHMgKyAxCi0gIHRzLT5zZXRfc2Vjb25kcyhrVGltZXN0YW1wTWF4U2Vj
b25kcyArIDEpOwotICBvd18uU3RhcnRPYmplY3QoIiIpOwotCi0gIFN0YXR1cyBzdGF0dXMgPSBF
eGVjdXRlVGVzdChvdXQsIFRpbWVzdGFtcER1cmF0aW9uOjpkZXNjcmlwdG9yKCkpOwotICBFWFBF
Q1RfRVEodXRpbDo6ZXJyb3I6OklOVEVSTkFMLCBzdGF0dXMuZXJyb3JfY29kZSgpKTsKLX0KLQot
VEVTVF9QKFByb3Rvc3RyZWFtT2JqZWN0U291cmNlVGltZXN0YW1wVGVzdCwgSW52YWxpZER1cmF0
aW9uQmVsb3dNaW5UZXN0KSB7Ci0gIFRpbWVzdGFtcER1cmF0aW9uIG91dDsKLSAgZ29vZ2xlOjpw
cm90b2J1Zjo6RHVyYXRpb24qIGR1ciA9IG91dC5tdXRhYmxlX2R1cigpOwotICAvLyBNaW4gYWxs
b3dlZCBzZWNvbmRzIC0gMQotICBkdXItPnNldF9zZWNvbmRzKGtEdXJhdGlvbk1pblNlY29uZHMg
LSAxKTsKLSAgb3dfLlN0YXJ0T2JqZWN0KCIiKTsKLQotICBTdGF0dXMgc3RhdHVzID0gRXhlY3V0
ZVRlc3Qob3V0LCBUaW1lc3RhbXBEdXJhdGlvbjo6ZGVzY3JpcHRvcigpKTsKLSAgRVhQRUNUX0VR
KHV0aWw6OmVycm9yOjpJTlRFUk5BTCwgc3RhdHVzLmVycm9yX2NvZGUoKSk7Ci19Ci0KLVRFU1Rf
UChQcm90b3N0cmVhbU9iamVjdFNvdXJjZVRpbWVzdGFtcFRlc3QsIEludmFsaWREdXJhdGlvbkFi
b3ZlTWF4VGVzdCkgewotICBUaW1lc3RhbXBEdXJhdGlvbiBvdXQ7Ci0gIGdvb2dsZTo6cHJvdG9i
dWY6OkR1cmF0aW9uKiBkdXIgPSBvdXQubXV0YWJsZV9kdXIoKTsKLSAgLy8gTWluIGFsbG93ZWQg
c2Vjb25kcyArIDEKLSAgZHVyLT5zZXRfc2Vjb25kcyhrRHVyYXRpb25NYXhTZWNvbmRzICsgMSk7
Ci0gIG93Xy5TdGFydE9iamVjdCgiIik7Ci0KLSAgU3RhdHVzIHN0YXR1cyA9IEV4ZWN1dGVUZXN0
KG91dCwgVGltZXN0YW1wRHVyYXRpb246OmRlc2NyaXB0b3IoKSk7Ci0gIEVYUEVDVF9FUSh1dGls
OjplcnJvcjo6SU5URVJOQUwsIHN0YXR1cy5lcnJvcl9jb2RlKCkpOwotfQotCi19ICAvLyBuYW1l
c3BhY2UgY29udmVydGVyCi19ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHBy
b3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3R3cml0ZXIuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3R3cml0ZXIuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YTc5MDlhMTg1ZGYyZjYxYWM3MjFiNTAxMDli
NTdiMjFlZjEyYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0d3Jp
dGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTIwNiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVy
bmFsL3Byb3Rvc3RyZWFtX29iamVjdHdyaXRlci5oPgotCi0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4K
LSNpbmNsdWRlIDxzdGFjaz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9vbmNl
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RpbWUuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi91dGlsL2ludGVybmFsL2ZpZWxkX21hc2tfdXRpbGl0eS5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29iamVjdF9sb2NhdGlvbl90cmFja2VyLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvY29uc3RhbnRzLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdXRpbGl0eS5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL21hcF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1
c29yLmg+Ci0KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFt
ZXNwYWNlIHV0aWwgewotbmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0KLXVzaW5nIGdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTsKLXVzaW5nIHV0aWw6OmVycm9yOjpJTlZB
TElEX0FSR1VNRU5UOwotdXNpbmcgdXRpbDo6U3RhdHVzOwotdXNpbmcgdXRpbDo6U3RhdHVzT3I7
Ci0KLQotUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlByb3RvU3RyZWFtT2JqZWN0V3JpdGVyKAot
ICAgIFR5cGVSZXNvbHZlciogdHlwZV9yZXNvbHZlciwgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6
VHlwZSYgdHlwZSwKLSAgICBzdHJpbmdzOjpCeXRlU2luayogb3V0cHV0LCBFcnJvckxpc3RlbmVy
KiBsaXN0ZW5lciwKLSAgICBjb25zdCBQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6T3B0aW9ucyYg
b3B0aW9ucykKLSAgICA6IFByb3RvV3JpdGVyKHR5cGVfcmVzb2x2ZXIsIHR5cGUsIG91dHB1dCwg
bGlzdGVuZXIpLAotICAgICAgbWFzdGVyX3R5cGVfKHR5cGUpLAotICAgICAgY3VycmVudF8oTlVM
TCksCi0gICAgICBvcHRpb25zXyhvcHRpb25zKSB7fQotCi1Qcm90b1N0cmVhbU9iamVjdFdyaXRl
cjo6UHJvdG9TdHJlYW1PYmplY3RXcml0ZXIoCi0gICAgY29uc3QgVHlwZUluZm8qIHR5cGVpbmZv
LCBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlLAotICAgIHN0cmluZ3M6OkJ5dGVT
aW5rKiBvdXRwdXQsIEVycm9yTGlzdGVuZXIqIGxpc3RlbmVyKQotICAgIDogUHJvdG9Xcml0ZXIo
dHlwZWluZm8sIHR5cGUsIG91dHB1dCwgbGlzdGVuZXIpLAotICAgICAgbWFzdGVyX3R5cGVfKHR5
cGUpLAotICAgICAgY3VycmVudF8oTlVMTCksCi0gICAgICBvcHRpb25zXyhQcm90b1N0cmVhbU9i
amVjdFdyaXRlcjo6T3B0aW9uczo6RGVmYXVsdHMoKSkge30KLQotUHJvdG9TdHJlYW1PYmplY3RX
cml0ZXI6On5Qcm90b1N0cmVhbU9iamVjdFdyaXRlcigpIHsKLSAgaWYgKGN1cnJlbnRfID09IE5V
TEwpIHJldHVybjsKLSAgLy8gQ2xlYW51cCBleHBsaWNpdGx5IGluIG9yZGVyIHRvIGF2b2lkIGRl
c3RydWN0b3Igc3RhY2sgb3ZlcmZsb3cgd2hlbiBpbnB1dAotICAvLyBpcyBkZWVwbHkgbmVzdGVk
LgotICAvLyBDYXN0IHRvIEJhc2VFbGVtZW50IHRvIGF2b2lkIGRvaW5nIGFkZGl0aW9uYWwgY2hl
Y2tzIChsaWtlIG1pc3NpbmcgZmllbGRzKQotICAvLyBkdXJpbmcgcG9wKCkuCi0gIGdvb2dsZTo6
cHJvdG9idWY6OnNjb3BlZF9wdHI8QmFzZUVsZW1lbnQ+IGVsZW1lbnQoCi0gICAgICBzdGF0aWNf
Y2FzdDxCYXNlRWxlbWVudCo+KGN1cnJlbnRfLmdldCgpKS0+cG9wPEJhc2VFbGVtZW50PigpKTsK
LSAgd2hpbGUgKGVsZW1lbnQgIT0gTlVMTCkgewotICAgIGVsZW1lbnQucmVzZXQoZWxlbWVudC0+
cG9wPEJhc2VFbGVtZW50PigpKTsKLSAgfQotfQotCi1uYW1lc3BhY2UgewotLy8gVXRpbGl0eSBt
ZXRob2QgdG8gc3BsaXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgVGltZXN0YW1wIG9yIER1
cmF0aW9uIGFuZAotLy8gcmV0dXJuIHRoZSBwYXJ0cy4KLXZvaWQgU3BsaXRTZWNvbmRzQW5kTmFu
b3MoU3RyaW5nUGllY2UgaW5wdXQsIFN0cmluZ1BpZWNlKiBzZWNvbmRzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJpbmdQaWVjZSogbmFub3MpIHsKLSAgc2l6ZV90IGlkeCA9IGlucHV0
LnJmaW5kKCcuJyk7Ci0gIGlmIChpZHggIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgKnNlY29uZHMg
PSBpbnB1dC5zdWJzdHIoMCwgaWR4KTsKLSAgICAqbmFub3MgPSBpbnB1dC5zdWJzdHIoaWR4ICsg
MSk7Ci0gIH0gZWxzZSB7Ci0gICAgKnNlY29uZHMgPSBpbnB1dDsKLSAgICAqbmFub3MgPSBTdHJp
bmdQaWVjZSgpOwotICB9Ci19Ci0KLVN0YXR1cyBHZXROYW5vc0Zyb21TdHJpbmdQaWVjZShTdHJp
bmdQaWVjZSBzX25hbm9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHBhcnNlX2ZhaWx1cmVfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBleGNlZWRlZF9saW1pdF9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDMyKiBuYW5vcykgewotICAqbmFub3MgPSAwOwotCi0gIC8vIENvdW50
IHRoZSBudW1iZXIgb2YgbGVhZGluZyAwcyBhbmQgY29uc3VtZSB0aGVtLgotICBpbnQgbnVtX2xl
YWRpbmdfemVyb3MgPSAwOwotICB3aGlsZSAoc19uYW5vcy5Db25zdW1lKCIwIikpIHsKLSAgICBu
dW1fbGVhZGluZ196ZXJvcysrOwotICB9Ci0gIGludDMyIGlfbmFub3MgPSAwOwotICAvLyAnc19u
YW5vcycgY29udGFpbnMgZnJhY3Rpb25hbCBzZWNvbmRzIC0tIGkuZS4gJ25hbm9zJyBpcyBlcXVh
bCB0bwotICAvLyAiMC4iICsgc19uYW5vcy5Ub1N0cmluZygpIHNlY29uZHMuIEFuIGludDMyIGlz
IHVzZWQgZm9yIHRoZQotICAvLyBjb252ZXJzaW9uIHRvICduYW5vcycsIHJhdGhlciB0aGFuIGEg
ZG91YmxlLCBzbyB0aGF0IHRoZXJlIGlzIG5vCi0gIC8vIGxvc3Mgb2YgcHJlY2lzaW9uLgotICBp
ZiAoIXNfbmFub3MuZW1wdHkoKSAmJiAhc2FmZV9zdHJ0bzMyKHNfbmFub3MuVG9TdHJpbmcoKSwg
JmlfbmFub3MpKSB7Ci0gICAgcmV0dXJuIFN0YXR1cyhJTlZBTElEX0FSR1VNRU5ULCBwYXJzZV9m
YWlsdXJlX21lc3NhZ2UpOwotICB9Ci0gIGlmIChpX25hbm9zID4ga05hbm9zUGVyU2Vjb25kIHx8
IGlfbmFub3MgPCAwKSB7Ci0gICAgcmV0dXJuIFN0YXR1cyhJTlZBTElEX0FSR1VNRU5ULCBleGNl
ZWRlZF9saW1pdF9tZXNzYWdlKTsKLSAgfQotICAvLyBzX25hbm9zIHNob3VsZCBvbmx5IGhhdmUg
ZGlnaXRzLiBObyB3aGl0ZXNwYWNlLgotICBpZiAoc19uYW5vcy5maW5kX2ZpcnN0X25vdF9vZigi
MDEyMzQ1Njc4OSIpICE9IFN0cmluZ1BpZWNlOjpucG9zKSB7Ci0gICAgcmV0dXJuIFN0YXR1cyhJ
TlZBTElEX0FSR1VNRU5ULCBwYXJzZV9mYWlsdXJlX21lc3NhZ2UpOwotICB9Ci0KLSAgaWYgKGlf
bmFub3MgPiAwKSB7Ci0gICAgLy8gJ3NjYWxlJyBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byB0
aGUgcmlnaHQgb2YgdGhlIGRlY2ltYWwKLSAgICAvLyBwb2ludCBpbiAiMC4iICsgc19uYW5vcy5U
b1N0cmluZygpCi0gICAgaW50MzIgc2NhbGUgPSBudW1fbGVhZGluZ196ZXJvcyArIHNfbmFub3Mu
c2l6ZSgpOwotICAgIC8vICdjb252ZXJzaW9uJyBjb252ZXJ0cyBpX25hbm9zIGludG8gbmFub3Nl
Y29uZHMuCi0gICAgLy8gY29udmVyc2lvbiA9IGtOYW5vc1BlclNlY29uZCAvIHN0YXRpY19jYXN0
PGludDMyPihzdGQ6OnBvdygxMCwgc2NhbGUpKQotICAgIC8vIEZvciBlZmZpY2llbmN5LCB3ZSBw
cmVjb21wdXRlIHRoZSBjb252ZXJzaW9uIGZhY3Rvci4KLSAgICBpbnQzMiBjb252ZXJzaW9uID0g
MDsKLSAgICBzd2l0Y2ggKHNjYWxlKSB7Ci0gICAgICBjYXNlIDE6Ci0gICAgICAgIGNvbnZlcnNp
b24gPSAxMDAwMDAwMDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAyOgotICAgICAgICBj
b252ZXJzaW9uID0gMTAwMDAwMDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAzOgotICAg
ICAgICBjb252ZXJzaW9uID0gMTAwMDAwMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDQ6
Ci0gICAgICAgIGNvbnZlcnNpb24gPSAxMDAwMDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSA1OgotICAgICAgICBjb252ZXJzaW9uID0gMTAwMDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSA2OgotICAgICAgICBjb252ZXJzaW9uID0gMTAwMDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIDc6Ci0gICAgICAgIGNvbnZlcnNpb24gPSAxMDA7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSA4OgotICAgICAgICBjb252ZXJzaW9uID0gMTA7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSA5OgotICAgICAgICBjb252ZXJzaW9uID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gU3RhdHVzKElOVkFMSURfQVJHVU1FTlQsIGV4Y2Vl
ZGVkX2xpbWl0X21lc3NhZ2UpOwotICAgIH0KLSAgICAqbmFub3MgPSBpX25hbm9zICogY29udmVy
c2lvbjsKLSAgfQotCi0gIHJldHVybiBTdGF0dXM6Ok9LOwotfQotCi19ICAvLyBuYW1lc3BhY2UK
LQotUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OkFueVdyaXRlcjo6QW55V3JpdGVyKFByb3RvU3Ry
ZWFtT2JqZWN0V3JpdGVyKiBwYXJlbnQpCi0gICAgOiBwYXJlbnRfKHBhcmVudCksCi0gICAgICBv
d18oKSwKLSAgICAgIGludmFsaWRfKGZhbHNlKSwKLSAgICAgIGRhdGFfKCksCi0gICAgICBvdXRw
dXRfKCZkYXRhXyksCi0gICAgICBkZXB0aF8oMCksCi0gICAgICBpc193ZWxsX2tub3duX3R5cGVf
KGZhbHNlKSwKLSAgICAgIHdlbGxfa25vd25fdHlwZV9yZW5kZXJfKE5VTEwpIHt9Ci0KLVByb3Rv
U3RyZWFtT2JqZWN0V3JpdGVyOjpBbnlXcml0ZXI6On5BbnlXcml0ZXIoKSB7fQotCi12b2lkIFBy
b3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpBbnlXcml0ZXI6OlN0YXJ0T2JqZWN0KFN0cmluZ1BpZWNl
IG5hbWUpIHsKLSAgKytkZXB0aF87Ci0gIC8vIElmIGFuIG9iamVjdCB3cml0ZXIgaXMgYWJzZW50
LCB0aGF0IG1lYW5zIHdlIGhhdmUgbm90IGNhbGxlZCBTdGFydEFueSgpCi0gIC8vIGJlZm9yZSBy
ZWFjaGluZyBoZXJlLiBUaGlzIGlzIGFuIGludmFsaWQgc3RhdGUuIFN0YXJ0QW55KCkgZ2V0cyBj
YWxsZWQKLSAgLy8gd2hlbmV2ZXIgd2Ugc2VlIGFuICJAdHlwZSIgYmVpbmcgcmVuZGVyZWQgKHNl
ZSBBbnlXcml0ZXI6OlJlbmRlckRhdGFQaWVjZSkuCi0gIGlmIChvd18gPT0gTlVMTCkgewotICAg
IC8vIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGFscmVhZHkgaW4gYW4gaW52YWxpZCBzdGF0ZS4gVGhp
cyBhdm9pZHMgbWFraW5nCi0gICAgLy8gbXVsdGlwbGUgdW5uZWNlc3NhcnkgSW52YWxpZFZhbHVl
IGNhbGxzLgotICAgIGlmICghaW52YWxpZF8pIHsKLSAgICAgIHBhcmVudF8tPkludmFsaWRWYWx1
ZSgiQW55IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJDYXQoIk1pc3Npbmcgb3Ig
aW52YWxpZCBAdHlwZSBmb3IgYW55IGZpZWxkIGluICIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudF8tPm1hc3Rlcl90eXBlXy5uYW1lKCkpKTsKLSAgICAgIGludmFs
aWRfID0gdHJ1ZTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoaXNfd2VsbF9rbm93bl90eXBlXyAmJiBk
ZXB0aF8gPT0gMSkgewotICAgIC8vIEZvciB3ZWxsLWtub3duIHR5cGVzLCB0aGUgb25seSBvdGhl
ciBmaWVsZCBiZXNpZGVzICJAdHlwZSIgc2hvdWxkIGJlIGEKLSAgICAvLyAidmFsdWUiIGZpZWxk
LgotICAgIGlmIChuYW1lICE9ICJ2YWx1ZSIgJiYgIWludmFsaWRfKSB7Ci0gICAgICBwYXJlbnRf
LT5JbnZhbGlkVmFsdWUoIkFueSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVj
dCBhIFwidmFsdWVcIiBmaWVsZCBmb3Igd2VsbC1rbm93biB0eXBlcy4iKTsKLSAgICAgIGludmFs
aWRfID0gdHJ1ZTsKLSAgICB9Ci0gICAgb3dfLT5TdGFydE9iamVjdCgiIik7Ci0gIH0gZWxzZSB7
Ci0gICAgLy8gRm9yd2FyZCB0aGUgY2FsbCB0byB0aGUgY2hpbGQgd3JpdGVyIGlmOgotICAgIC8v
ICAgMS4gdGhlIHR5cGUgaXMgbm90IGEgd2VsbC1rbm93biB0eXBlLgotICAgIC8vICAgMi4gb3Is
IHdlIGFyZSBpbiBhIG5lc3RlZCBBbnksIFN0cnVjdCwgb3IgVmFsdWUgb2JqZWN0LgotICAgIG93
Xy0+U3RhcnRPYmplY3QobmFtZSk7Ci0gIH0KLX0KLQotYm9vbCBQcm90b1N0cmVhbU9iamVjdFdy
aXRlcjo6QW55V3JpdGVyOjpFbmRPYmplY3QoKSB7Ci0gIC0tZGVwdGhfOwotICAvLyBBcyBsb25n
IGFzIGRlcHRoXyA+PSAwLCB3ZSBrbm93IHdlIGhhdmVuJ3QgcmVhY2hlZCB0aGUgZW5kIG9mIEFu
eS4KLSAgLy8gUHJvcGFnYXRlIHRoZXNlIEVuZE9iamVjdCgpIGNhbGxzIHRvIHRoZSBjb250YWlu
ZWQgb3dfLiBGb3IgcmVndWxhcgotICAvLyBtZXNzYWdlIHR5cGVzLCB3ZSBwcm9wYWdhdGUgdGhl
IGVuZCBvZiBBbnkgYXMgd2VsbC4KLSAgaWYgKG93XyAhPSBOVUxMICYmIChkZXB0aF8gPj0gMCB8
fCAhaXNfd2VsbF9rbm93bl90eXBlXykpIHsKLSAgICBvd18tPkVuZE9iamVjdCgpOwotICB9Ci0g
IC8vIEEgbmVnYXRpdmUgZGVwdGhfIGltcGxpZXMgdGhhdCB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVu
ZCBvZiBBbnkKLSAgLy8gb2JqZWN0LiBOb3cgd2Ugd3JpdGUgb3V0IGl0cyBjb250ZW50cy4KLSAg
aWYgKGRlcHRoXyA8IDApIHsKLSAgICBXcml0ZUFueSgpOwotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6QW55
V3JpdGVyOjpTdGFydExpc3QoU3RyaW5nUGllY2UgbmFtZSkgewotICArK2RlcHRoXzsKLSAgLy8g
V2UgZXhwZWN0IG93XyB0byBiZSBwcmVzZW50IGFzIHRoaXMgY2FsbCBvbmx5IG1ha2VzIHNlbnNl
IGluc2lkZSBhbiBBbnkuCi0gIGlmIChvd18gPT0gTlVMTCkgewotICAgIGlmICghaW52YWxpZF8p
IHsKLSAgICAgIHBhcmVudF8tPkludmFsaWRWYWx1ZSgiQW55IiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJDYXQoIk1pc3Npbmcgb3IgaW52YWxpZCBAdHlwZSBmb3IgYW55IGZpZWxk
IGluICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8tPm1hc3Rl
cl90eXBlXy5uYW1lKCkpKTsKLSAgICAgIGludmFsaWRfID0gdHJ1ZTsKLSAgICB9Ci0gIH0gZWxz
ZSBpZiAoaXNfd2VsbF9rbm93bl90eXBlXyAmJiBkZXB0aF8gPT0gMSkgewotICAgIGlmIChuYW1l
ICE9ICJ2YWx1ZSIgJiYgIWludmFsaWRfKSB7Ci0gICAgICBwYXJlbnRfLT5JbnZhbGlkVmFsdWUo
IkFueSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdCBhIFwidmFsdWVcIiBm
aWVsZCBmb3Igd2VsbC1rbm93biB0eXBlcy4iKTsKLSAgICAgIGludmFsaWRfID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgb3dfLT5TdGFydExpc3QoIiIpOwotICB9IGVsc2UgewotICAgIG93Xy0+U3RhcnRM
aXN0KG5hbWUpOwotICB9Ci19Ci0KLXZvaWQgUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OkFueVdy
aXRlcjo6RW5kTGlzdCgpIHsKLSAgLS1kZXB0aF87Ci0gIGlmIChkZXB0aF8gPCAwKSB7Ci0gICAg
R09PR0xFX0xPRyhERkFUQUwpIDw8ICJNaXNtYXRjaGVkIEVuZExpc3QgZm91bmQsIHNob3VsZCBu
b3QgYmUgcG9zc2libGUiOwotICAgIGRlcHRoXyA9IDA7Ci0gIH0KLSAgLy8gV2UgZG9uJ3Qgd3Jp
dGUgYW4gZXJyb3Igb24gdGhlIGNsb3NlLCBvbmx5IG9uIHRoZSBvcGVuCi0gIGlmIChvd18gIT0g
TlVMTCkgewotICAgIG93Xy0+RW5kTGlzdCgpOwotICB9Ci19Ci0KLXZvaWQgUHJvdG9TdHJlYW1P
YmplY3RXcml0ZXI6OkFueVdyaXRlcjo6UmVuZGVyRGF0YVBpZWNlKAotICAgIFN0cmluZ1BpZWNl
IG5hbWUsIGNvbnN0IERhdGFQaWVjZSYgdmFsdWUpIHsKLSAgLy8gU3RhcnQgYW4gQW55IG9ubHkg
YXQgZGVwdGhfIDAuIE90aGVyIFJlbmRlckRhdGFQaWVjZSBjYWxscyB3aXRoICJAdHlwZSIKLSAg
Ly8gc2hvdWxkIGdvIHRvIHRoZSBjb250YWluZWQgb3dfIGFzIHRoZXkgaW5kaWNhdGUgbmVzdGVk
IEFueXMuCi0gIGlmIChkZXB0aF8gPT0gMCAmJiBvd18gPT0gTlVMTCAmJiBuYW1lID09ICJAdHlw
ZSIpIHsKLSAgICBTdGFydEFueSh2YWx1ZSk7Ci0gIH0gZWxzZSBpZiAob3dfID09IE5VTEwpIHsK
LSAgICBpZiAoIWludmFsaWRfKSB7Ci0gICAgICBwYXJlbnRfLT5JbnZhbGlkVmFsdWUoIkFueSIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyQ2F0KCJNaXNzaW5nIG9yIGludmFsaWQg
QHR5cGUgZm9yIGFueSBmaWVsZCBpbiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnRfLT5tYXN0ZXJfdHlwZV8ubmFtZSgpKSk7Ci0gICAgICBpbnZhbGlkXyA9IHRy
dWU7Ci0gICAgfQotICB9IGVsc2UgaWYgKGRlcHRoXyA9PSAwICYmIGlzX3dlbGxfa25vd25fdHlw
ZV8pIHsKLSAgICBpZiAobmFtZSAhPSAidmFsdWUiICYmICFpbnZhbGlkXykgewotICAgICAgcGFy
ZW50Xy0+SW52YWxpZFZhbHVlKCJBbnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJF
eHBlY3QgYSBcInZhbHVlXCIgZmllbGQgZm9yIHdlbGwta25vd24gdHlwZXMuIik7Ci0gICAgICBp
bnZhbGlkXyA9IHRydWU7Ci0gICAgfQotICAgIGlmICh3ZWxsX2tub3duX3R5cGVfcmVuZGVyXyA9
PSBOVUxMKSB7Ci0gICAgICAvLyBPbmx5IEFueSBhbmQgU3RydWN0IGRvbid0IGhhdmUgYSBzcGVj
aWFsIHR5cGUgcmVuZGVyIGJ1dCBib3RoIG9mCi0gICAgICAvLyB0aGVtIGV4cGVjdCBhIEpTT04g
b2JqZWN0IChpLmUuLCBhIFN0YXJ0T2JqZWN0KCkgY2FsbCkuCi0gICAgICBpZiAoIWludmFsaWRf
KSB7Ci0gICAgICAgIHBhcmVudF8tPkludmFsaWRWYWx1ZSgiQW55IiwgIkV4cGVjdCBhIEpTT04g
b2JqZWN0LiIpOwotICAgICAgICBpbnZhbGlkXyA9IHRydWU7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIG93Xy0+UHJvdG9Xcml0ZXI6OlN0YXJ0T2JqZWN0KCIiKTsKLSAgICAgIFN0YXR1
cyBzdGF0dXMgPSAoKndlbGxfa25vd25fdHlwZV9yZW5kZXJfKShvd18uZ2V0KCksIHZhbHVlKTsK
LSAgICAgIGlmICghc3RhdHVzLm9rKCkpIG93Xy0+SW52YWxpZFZhbHVlKCJBbnkiLCBzdGF0dXMu
ZXJyb3JfbWVzc2FnZSgpKTsKLSAgICAgIG93Xy0+UHJvdG9Xcml0ZXI6OkVuZE9iamVjdCgpOwot
ICAgIH0KLSAgfSBlbHNlIHsKLSAgICBvd18tPlJlbmRlckRhdGFQaWVjZShuYW1lLCB2YWx1ZSk7
Ci0gIH0KLX0KLQotdm9pZCBQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6QW55V3JpdGVyOjpTdGFy
dEFueShjb25zdCBEYXRhUGllY2UmIHZhbHVlKSB7Ci0gIC8vIEZpZ3VyZSBvdXQgdGhlIHR5cGUg
dXJsLiBUaGlzIGlzIGEgY29weS1wYXN0ZSBmcm9tIFdyaXRlU3RyaW5nIGJ1dCB3ZSBhbHNvCi0g
IC8vIG5lZWQgdGhlIHZhbHVlLCBzbyB3ZSBjYW4ndCBqdXN0IGNhbGwgdGhyb3VnaCB0byB0aGF0
LgotICBpZiAodmFsdWUudHlwZSgpID09IERhdGFQaWVjZTo6VFlQRV9TVFJJTkcpIHsKLSAgICB0
eXBlX3VybF8gPSB2YWx1ZS5zdHIoKS5Ub1N0cmluZygpOwotICB9IGVsc2UgewotICAgIFN0YXR1
c09yPHN0cmluZz4gcyA9IHZhbHVlLlRvU3RyaW5nKCk7Ci0gICAgaWYgKCFzLm9rKCkpIHsKLSAg
ICAgIHBhcmVudF8tPkludmFsaWRWYWx1ZSgiU3RyaW5nIiwgcy5zdGF0dXMoKS5lcnJvcl9tZXNz
YWdlKCkpOwotICAgICAgaW52YWxpZF8gPSB0cnVlOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICB0eXBlX3VybF8gPSBzLlZhbHVlT3JEaWUoKTsKLSAgfQotICAvLyBSZXNvbHZlIHRoZSB0eXBl
IHVybCwgYW5kIHJlcG9ydCBhbiBlcnJvciBpZiB3ZSBmYWlsZWQgdG8gcmVzb2x2ZSBpdC4KLSAg
U3RhdHVzT3I8Y29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSo+IHJlc29sdmVkX3R5cGUgPQot
ICAgICAgcGFyZW50Xy0+dHlwZWluZm8oKS0+UmVzb2x2ZVR5cGVVcmwodHlwZV91cmxfKTsKLSAg
aWYgKCFyZXNvbHZlZF90eXBlLm9rKCkpIHsKLSAgICBwYXJlbnRfLT5JbnZhbGlkVmFsdWUoIkFu
eSIsIHJlc29sdmVkX3R5cGUuc3RhdHVzKCkuZXJyb3JfbWVzc2FnZSgpKTsKLSAgICBpbnZhbGlk
XyA9IHRydWU7Ci0gICAgcmV0dXJuOwotICB9Ci0gIC8vIEF0IHRoaXMgcG9pbnQsIHR5cGUgaXMg
bmV2ZXIgbnVsbC4KLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSogdHlwZSA9IHJlc29s
dmVkX3R5cGUuVmFsdWVPckRpZSgpOwotCi0gIHdlbGxfa25vd25fdHlwZV9yZW5kZXJfID0gRmlu
ZFR5cGVSZW5kZXJlcih0eXBlX3VybF8pOwotICBpZiAod2VsbF9rbm93bl90eXBlX3JlbmRlcl8g
IT0gTlVMTCB8fAotICAgICAgLy8gRXhwbGljaXRseSBsaXN0IEFueSBhbmQgU3RydWN0IGhlcmUg
YmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgYQotICAgICAgLy8gY3VzdG9tIHJlbmRlcmVyLgotICAg
ICAgdHlwZS0+bmFtZSgpID09IGtBbnlUeXBlIHx8IHR5cGUtPm5hbWUoKSA9PSBrU3RydWN0VHlw
ZSkgewotICAgIGlzX3dlbGxfa25vd25fdHlwZV8gPSB0cnVlOwotICB9Ci0KLSAgLy8gQ3JlYXRl
IG91ciBvYmplY3Qgd3JpdGVyIGFuZCBpbml0aWFsaXplIGl0IHdpdGggdGhlIGZpcnN0IFN0YXJ0
T2JqZWN0Ci0gIC8vIGNhbGwuCi0gIG93Xy5yZXNldChuZXcgUHJvdG9TdHJlYW1PYmplY3RXcml0
ZXIocGFyZW50Xy0+dHlwZWluZm8oKSwgKnR5cGUsICZvdXRwdXRfLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8tPmxpc3RlbmVyKCkpKTsKLQotICAvLyBE
b24ndCBjYWxsIFN0YXJ0T2JqZWN0KCkgZm9yIHdlbGwta25vd24gdHlwZXMgeWV0LiBEZXBlbmRp
bmcgb24gdGhlCi0gIC8vIHR5cGUgb2YgYWN0dWFsIGRhdGEsIHdlIG1heSBub3QgbmVlZCB0byBj
YWxsIFN0YXJ0T2JqZWN0KCkuIEZvcgotICAvLyBleGFtcGxlOgotICAvLyB7Ci0gIC8vICAgIkB0
eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlZhbHVlIiwKLSAgLy8g
ICAidmFsdWUiOiBbMSwgMiwgM10sCi0gIC8vIH0KLSAgLy8gV2l0aCB0aGUgYWJvdmUgSlNPTiBy
ZXByZXNlbnRhdGlvbiwgd2Ugd2lsbCBvbmx5IGNhbGwgU3RhcnRMaXN0KCkgb24gdGhlCi0gIC8v
IGNvbnRhaW5lZCBvd18uCi0gIGlmICghaXNfd2VsbF9rbm93bl90eXBlXykgewotICAgIG93Xy0+
U3RhcnRPYmplY3QoIiIpOwotICB9Ci19Ci0KLXZvaWQgUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6
OkFueVdyaXRlcjo6V3JpdGVBbnkoKSB7Ci0gIGlmIChvd18gPT0gTlVMTCkgewotICAgIC8vIElm
IHdlIGhhZCBubyBvYmplY3Qgd3JpdGVyLCB3ZSBuZXZlciBnb3QgYW55IGNvbnRlbnQsIHNvIGp1
c3QgcmV0dXJuCi0gICAgLy8gaW1tZWRpYXRlbHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gd3Jp
dGluZyBhbiBlbXB0eSBBbnkuCi0gICAgcmV0dXJuOwotICB9Ci0gIC8vIFJlbmRlciB0aGUgdHlw
ZV91cmwgYW5kIHZhbHVlIGZpZWxkcyBkaXJlY3RseSB0byB0aGUgc3RyZWFtLgotICAvLyB0eXBl
X3VybCBoYXMgdGFnIDEgYW5kIHZhbHVlIGhhcyB0YWcgMi4KLSAgV2lyZUZvcm1hdExpdGU6Oldy
aXRlU3RyaW5nKDEsIHR5cGVfdXJsXywgcGFyZW50Xy0+c3RyZWFtKCkpOwotICBpZiAoIWRhdGFf
LmVtcHR5KCkpIHsKLSAgICBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCeXRlcygyLCBkYXRhXywgcGFy
ZW50Xy0+c3RyZWFtKCkpOwotICB9Ci19Ci0KLVByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpJdGVt
OjpJdGVtKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyKiBlbmNsb3NpbmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJdGVtVHlwZSBpdGVtX3R5cGUsIGJvb2wgaXNfcGxhY2Vo
b2xkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2xpc3Qp
Ci0gICAgOiBCYXNlRWxlbWVudChOVUxMKSwKLSAgICAgIG93XyhlbmNsb3NpbmcpLAotICAgICAg
YW55XygpLAotICAgICAgaXRlbV90eXBlXyhpdGVtX3R5cGUpLAotICAgICAgaXNfcGxhY2Vob2xk
ZXJfKGlzX3BsYWNlaG9sZGVyKSwKLSAgICAgIGlzX2xpc3RfKGlzX2xpc3QpIHsKLSAgaWYgKGl0
ZW1fdHlwZV8gPT0gQU5ZKSB7Ci0gICAgYW55Xy5yZXNldChuZXcgQW55V3JpdGVyKG93XykpOwot
ICB9Ci19Ci0KLVByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpJdGVtOjpJdGVtKFByb3RvU3RyZWFt
T2JqZWN0V3JpdGVyOjpJdGVtKiBwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJdGVtVHlwZSBpdGVtX3R5cGUsIGJvb2wgaXNfcGxhY2Vob2xkZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2xpc3QpCi0gICAgOiBCYXNlRWxl
bWVudChwYXJlbnQpLAotICAgICAgb3dfKHRoaXMtPnBhcmVudCgpLT5vd18pLAotICAgICAgYW55
XygpLAotICAgICAgaXRlbV90eXBlXyhpdGVtX3R5cGUpLAotICAgICAgaXNfcGxhY2Vob2xkZXJf
KGlzX3BsYWNlaG9sZGVyKSwKLSAgICAgIGlzX2xpc3RfKGlzX2xpc3QpIHsKLSAgaWYgKGl0ZW1f
dHlwZSA9PSBBTlkpIHsKLSAgICBhbnlfLnJlc2V0KG5ldyBBbnlXcml0ZXIob3dfKSk7Ci0gIH0K
LX0KLQotYm9vbCBQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6SXRlbTo6SW5zZXJ0TWFwS2V5SWZO
b3RQcmVzZW50KAotICAgIFN0cmluZ1BpZWNlIG1hcF9rZXkpIHsKLSAgcmV0dXJuIEluc2VydElm
Tm90UHJlc2VudCgmbWFwX2tleXNfLCBtYXBfa2V5LlRvU3RyaW5nKCkpOwotfQotCi1Qcm90b1N0
cmVhbU9iamVjdFdyaXRlciogUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlN0YXJ0T2JqZWN0KAot
ICAgIFN0cmluZ1BpZWNlIG5hbWUpIHsKLSAgaWYgKGludmFsaWRfZGVwdGgoKSA+IDApIHsKLSAg
ICBJbmNyZW1lbnRJbnZhbGlkRGVwdGgoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8v
IFN0YXJ0aW5nIHRoZSByb290IG1lc3NhZ2UuIENyZWF0ZSB0aGUgcm9vdCBJdGVtIGFuZCByZXR1
cm4uCi0gIC8vIEFOWSBtZXNzYWdlIHR5cGUgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGhhbmRsaW5n
LCBqdXN0IHNldCB0aGUgSXRlbVR5cGUKLSAgLy8gdG8gQU5ZLgotICBpZiAoY3VycmVudF8gPT0g
TlVMTCkgewotICAgIFByb3RvV3JpdGVyOjpTdGFydE9iamVjdChuYW1lKTsKLSAgICBjdXJyZW50
Xy5yZXNldChuZXcgSXRlbSgKLSAgICAgICAgdGhpcywgbWFzdGVyX3R5cGVfLm5hbWUoKSA9PSBr
QW55VHlwZSA/IEl0ZW06OkFOWSA6IEl0ZW06Ok1FU1NBR0UsCi0gICAgICAgIGZhbHNlLCBmYWxz
ZSkpOwotCi0gICAgLy8gSWYgbWFzdGVyIHR5cGUgaXMgYSBzcGVjaWFsIHR5cGUgdGhhdCBuZWVk
cyBleHRyYSB2YWx1ZXMgdG8gYmUgd3JpdHRlbiB0bwotICAgIC8vIHN0cmVhbSwgd2Ugd3JpdGUg
dGhvc2UgdmFsdWVzLgotICAgIGlmIChtYXN0ZXJfdHlwZV8ubmFtZSgpID09IGtTdHJ1Y3RUeXBl
KSB7Ci0gICAgICAvLyBTdHJ1Y3QgaGFzIGEgbWFwPHN0cmluZywgVmFsdWU+IGZpZWxkIGNhbGxl
ZCAiZmllbGRzIi4KLSAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvcHJvdG9idWYv
YmxvYi9tYXN0ZXIvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8KLSAgICAgIC8vICJm
aWVsZHMiOiBbCi0gICAgICBQdXNoKCJmaWVsZHMiLCBJdGVtOjpNQVAsIHRydWUsIHRydWUpOwot
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgaWYgKG1hc3Rlcl90eXBlXy5uYW1lKCkg
PT0ga1N0cnVjdFZhbHVlVHlwZSkgewotICAgICAgLy8gV2UgZ290IGEgU3RhcnRPYmplY3QgY2Fs
bCB3aXRoIGdvb2dsZS5wcm90b2J1Zi5WYWx1ZSBmaWVsZC4gVGhlIG9ubHkKLSAgICAgIC8vIG9i
amVjdCB3aXRoaW4gdGhhdCB0eXBlIGlzIGEgc3RydWN0IHR5cGUuIFNvIHN0YXJ0IGEgc3RydWN0
LgotICAgICAgLy8KLSAgICAgIC8vIFRoZSBzdHJ1Y3QgZmllbGQgaW4gVmFsdWUgdHlwZSBpcyBu
YW1lZCAic3RydWN0X3ZhbHVlIgotICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9w
cm90b2J1Zi9ibG9iL21hc3Rlci9zcmMvZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bwotICAg
ICAgLy8gQWxzbyBzdGFydCB0aGUgbWFwIGZpZWxkICJmaWVsZHMiIHdpdGhpbiB0aGUgc3RydWN0
LgotICAgICAgLy8gInN0cnVjdF92YWx1ZSI6IHsKLSAgICAgIC8vICAgImZpZWxkcyI6IFsKLSAg
ICAgIFB1c2goInN0cnVjdF92YWx1ZSIsIEl0ZW06Ok1FU1NBR0UsIHRydWUsIGZhbHNlKTsKLSAg
ICAgIFB1c2goImZpZWxkcyIsIEl0ZW06Ok1BUCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICByZXR1cm4g
dGhpczsKLSAgICB9Ci0KLSAgICBpZiAobWFzdGVyX3R5cGVfLm5hbWUoKSA9PSBrU3RydWN0TGlz
dFZhbHVlVHlwZSkgewotICAgICAgSW52YWxpZFZhbHVlKGtTdHJ1Y3RMaXN0VmFsdWVUeXBlLAot
ICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc3RhcnQgcm9vdCBtZXNzYWdlIHdpdGggTGlzdFZh
bHVlLiIpOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLy8gU2VuZCBhbGwg
QU5ZIGV2ZW50cyB0byBBbnlXcml0ZXIuCi0gIGlmIChjdXJyZW50Xy0+SXNBbnkoKSkgewotICAg
IGN1cnJlbnRfLT5hbnkoKS0+U3RhcnRPYmplY3QobmFtZSk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0g
IH0KLQotICAvLyBJZiB3ZSBhcmUgd2l0aGluIGEgbWFwLCB3ZSByZW5kZXIgbmFtZSBhcyBrZXlz
IGFuZCBzZW5kIFN0YXJ0T2JqZWN0IHRvIHRoZQotICAvLyB2YWx1ZSBmaWVsZC4KLSAgaWYgKGN1
cnJlbnRfLT5Jc01hcCgpKSB7Ci0gICAgaWYgKCFWYWxpZE1hcEtleShuYW1lKSkgewotICAgICAg
SW5jcmVtZW50SW52YWxpZERlcHRoKCk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAg
ICAvLyBNYXAgaXMgYSByZXBlYXRlZCBmaWVsZCBvZiBtZXNzYWdlIHR5cGUgd2l0aCBhICJrZXki
IGFuZCBhICJ2YWx1ZSIgZmllbGQuCi0gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMz9obD1lbiNtYXBzCi0gICAgLy8gbWVzc2Fn
ZSBNYXBGaWVsZEVudHJ5IHsKLSAgICAvLyAgIGtleV90eXBlIGtleSA9IDE7Ci0gICAgLy8gICB2
YWx1ZV90eXBlIHZhbHVlID0gMjsKLSAgICAvLyB9Ci0gICAgLy8KLSAgICAvLyByZXBlYXRlZCBN
YXBGaWVsZEVudHJ5IG1hcF9maWVsZCA9IE47Ci0gICAgLy8KLSAgICAvLyBUaGF0IG1lYW5zLCB3
ZSByZW5kZXIgdGhlIGZvbGxvd2luZyBlbGVtZW50IHdpdGhpbiBhIGxpc3QgKGhlbmNlIG5vCi0g
ICAgLy8gbmFtZSk6Ci0gICAgLy8geyAia2V5IjogIjxuYW1lPiIsICJ2YWx1ZSI6IHsKLSAgICBQ
dXNoKCIiLCBJdGVtOjpNRVNTQUdFLCBmYWxzZSwgZmFsc2UpOwotICAgIFByb3RvV3JpdGVyOjpS
ZW5kZXJEYXRhUGllY2UoImtleSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
YXRhUGllY2UobmFtZSwgdXNlX3N0cmljdF9iYXNlNjRfZGVjb2RpbmcoKSkpOwotICAgIFB1c2go
InZhbHVlIiwgSXRlbTo6TUVTU0FHRSwgdHJ1ZSwgZmFsc2UpOwotCi0gICAgLy8gTWFrZSBzdXJl
IHdlIGFyZSB2YWxpZCBzbyBmYXIgYWZ0ZXIgc3RhcnRpbmcgbWFwIGZpZWxkcy4KLSAgICBpZiAo
aW52YWxpZF9kZXB0aCgpID4gMCkgcmV0dXJuIHRoaXM7Ci0KLSAgICAvLyBJZiB0b3Agb2Ygc3Rh
Y2sgaXMgZy5wLlN0cnVjdCB0eXBlLCBzdGFydCB0aGUgc3RydWN0IHRoZSBtYXAgZmllbGQgd2l0
aGluCi0gICAgLy8gaXQuCi0gICAgaWYgKGVsZW1lbnQoKSAhPSBOVUxMICYmIElzU3RydWN0KCpl
bGVtZW50KCktPnBhcmVudF9maWVsZCgpKSkgewotICAgICAgLy8gUmVuZGVyICJmaWVsZHMiOiBb
Ci0gICAgICBQdXNoKCJmaWVsZHMiLCBJdGVtOjpNQVAsIHRydWUsIHRydWUpOwotICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLy8gSWYgdG9wIG9mIHN0YWNrIGlzIGcucC5WYWx1ZSB0
eXBlLCBzdGFydCB0aGUgU3RydWN0IHdpdGhpbiBpdC4KLSAgICBpZiAoZWxlbWVudCgpICE9IE5V
TEwgJiYgSXNTdHJ1Y3RWYWx1ZSgqZWxlbWVudCgpLT5wYXJlbnRfZmllbGQoKSkpIHsKLSAgICAg
IC8vIFJlbmRlcgotICAgICAgLy8gInN0cnVjdF92YWx1ZSI6IHsKLSAgICAgIC8vICAgImZpZWxk
cyI6IFsKLSAgICAgIFB1c2goInN0cnVjdF92YWx1ZSIsIEl0ZW06Ok1FU1NBR0UsIHRydWUsIGZh
bHNlKTsKLSAgICAgIFB1c2goImZpZWxkcyIsIEl0ZW06Ok1BUCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAg
fQotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6Rmll
bGQqIGZpZWxkID0gQmVnaW5OYW1lZChuYW1lLCBmYWxzZSk7Ci0gIGlmIChmaWVsZCA9PSBOVUxM
KSByZXR1cm4gdGhpczsKLQotICBpZiAoSXNTdHJ1Y3QoKmZpZWxkKSkgewotICAgIC8vIFN0YXJ0
IGEgc3RydWN0IG9iamVjdC4KLSAgICAvLyBSZW5kZXIKLSAgICAvLyAiPG5hbWU+IjogewotICAg
IC8vICAgImZpZWxkcyI6IHsKLSAgICBQdXNoKG5hbWUsIEl0ZW06Ok1FU1NBR0UsIGZhbHNlLCBm
YWxzZSk7Ci0gICAgUHVzaCgiZmllbGRzIiwgSXRlbTo6TUFQLCB0cnVlLCB0cnVlKTsKLSAgICBy
ZXR1cm4gdGhpczsKLSAgfQotCi0gIGlmIChJc1N0cnVjdFZhbHVlKCpmaWVsZCkpIHsKLSAgICAv
LyBXZSBnb3QgYSBTdGFydE9iamVjdCBjYWxsIHdpdGggZ29vZ2xlLnByb3RvYnVmLlZhbHVlIGZp
ZWxkLiAgVGhlIG9ubHkKLSAgICAvLyBvYmplY3Qgd2l0aGluIHRoYXQgdHlwZSBpcyBhIHN0cnVj
dCB0eXBlLiBTbyBzdGFydCBhIHN0cnVjdC4KLSAgICAvLyBSZW5kZXIKLSAgICAvLyAiPG5hbWU+
IjogewotICAgIC8vICAgInN0cnVjdF92YWx1ZSI6IHsKLSAgICAvLyAgICAgImZpZWxkcyI6IHsK
LSAgICBQdXNoKG5hbWUsIEl0ZW06Ok1FU1NBR0UsIGZhbHNlLCBmYWxzZSk7Ci0gICAgUHVzaCgi
c3RydWN0X3ZhbHVlIiwgSXRlbTo6TUVTU0FHRSwgdHJ1ZSwgZmFsc2UpOwotICAgIFB1c2goImZp
ZWxkcyIsIEl0ZW06Ok1BUCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQot
ICBpZiAoSXNNYXAoKmZpZWxkKSkgewotICAgIC8vIEJlZ2luIGEgbWFwLiBBIG1hcCBpcyB0cmln
Z2VyZWQgYnkgYSBTdGFydE9iamVjdCgpIGNhbGwgaWYgdGhlIGN1cnJlbnQKLSAgICAvLyBmaWVs
ZCBoYXMgYSBtYXAgdHlwZS4KLSAgICAvLyBBIG1hcCB0eXBlIGlzIGFsd2F5cyByZXBlYXRlZCwg
aGVuY2Ugc2V0IGlzX2xpc3QgdG8gdHJ1ZS4KLSAgICAvLyBSZW5kZXIKLSAgICAvLyAiPG5hbWU+
IjogWwotICAgIFB1c2gobmFtZSwgSXRlbTo6TUFQLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgcmV0dXJu
IHRoaXM7Ci0gIH0KLQotICAvLyBBIHJlZ3VsYXIgbWVzc2FnZSB0eXBlLiBQYXNzIGl0IGRpcmVj
dGx5IHRvIFByb3RvV3JpdGVyLgotICAvLyBSZW5kZXIKLSAgLy8gIjxuYW1lPiI6IHsKLSAgUHVz
aChuYW1lLCBJc0FueSgqZmllbGQpID8gSXRlbTo6QU5ZIDogSXRlbTo6TUVTU0FHRSwgZmFsc2Us
IGZhbHNlKTsKLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLVByb3RvU3RyZWFtT2JqZWN0V3JpdGVyKiBQ
cm90b1N0cmVhbU9iamVjdFdyaXRlcjo6RW5kT2JqZWN0KCkgewotICBpZiAoaW52YWxpZF9kZXB0
aCgpID4gMCkgewotICAgIERlY3JlbWVudEludmFsaWREZXB0aCgpOwotICAgIHJldHVybiB0aGlz
OwotICB9Ci0KLSAgaWYgKGN1cnJlbnRfID09IE5VTEwpIHJldHVybiB0aGlzOwotCi0gIGlmIChj
dXJyZW50Xy0+SXNBbnkoKSkgewotICAgIGlmIChjdXJyZW50Xy0+YW55KCktPkVuZE9iamVjdCgp
KSByZXR1cm4gdGhpczsKLSAgfQotCi0gIFBvcCgpOwotCi0gIHJldHVybiB0aGlzOwotfQotCi1Q
cm90b1N0cmVhbU9iamVjdFdyaXRlciogUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlN0YXJ0TGlz
dChTdHJpbmdQaWVjZSBuYW1lKSB7Ci0gIGlmIChpbnZhbGlkX2RlcHRoKCkgPiAwKSB7Ci0gICAg
SW5jcmVtZW50SW52YWxpZERlcHRoKCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvLyBT
aW5jZSB3ZSBjYW5ub3QgaGF2ZSBhIHRvcC1sZXZlbCByZXBlYXRlZCBpdGVtIGluIHByb3RvYnVm
LCB0aGUgb25seSB3YXkKLSAgLy8gdGhpcyBpcyB2YWxpZCBpcyBpZiB3ZSBzdGFydCBhIHNwZWNp
YWwgdHlwZSBnb29nbGUucHJvdG9idWYuTGlzdFZhbHVlIG9yCi0gIC8vIGdvb2dsZS5wcm90b2J1
Zi5WYWx1ZS4KLSAgaWYgKGN1cnJlbnRfID09IE5VTEwpIHsKLSAgICBpZiAoIW5hbWUuZW1wdHko
KSkgewotICAgICAgSW52YWxpZE5hbWUobmFtZSwgIlJvb3QgZWxlbWVudCBzaG91bGQgbm90IGJl
IG5hbWVkLiIpOwotICAgICAgSW5jcmVtZW50SW52YWxpZERlcHRoKCk7Ci0gICAgICByZXR1cm4g
dGhpczsKLSAgICB9Ci0KLSAgICAvLyBJZiBtYXN0ZXIgdHlwZSBpcyBhIHNwZWNpYWwgdHlwZSB0
aGF0IG5lZWRzIGV4dHJhIHZhbHVlcyB0byBiZSB3cml0dGVuIHRvCi0gICAgLy8gc3RyZWFtLCB3
ZSB3cml0ZSB0aG9zZSB2YWx1ZXMuCi0gICAgaWYgKG1hc3Rlcl90eXBlXy5uYW1lKCkgPT0ga1N0
cnVjdFZhbHVlVHlwZSkgewotICAgICAgLy8gV2UgZ290IGEgU3RhcnRMaXN0IHdpdGggZ29vZ2xl
LnByb3RvYnVmLlZhbHVlIG1hc3RlciB0eXBlLiBUaGlzIG1lYW5zCi0gICAgICAvLyB3ZSBoYXZl
IHRvIHN0YXJ0IHRoZSAibGlzdF92YWx1ZSIgd2l0aGluIGdvb2dsZS5wcm90b2J1Zi5WYWx1ZS4K
LSAgICAgIC8vCi0gICAgICAvLyBTZWUKLSAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29n
bGUvcHJvdG9idWYvYmxvYi9tYXN0ZXIvc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8K
LSAgICAgIC8vCi0gICAgICAvLyBSZW5kZXIKLSAgICAgIC8vICI8bmFtZT4iOiB7Ci0gICAgICAv
LyAgICJsaXN0X3ZhbHVlIjogewotICAgICAgLy8gICAgICJ2YWx1ZXMiOiBbICAvLyBTdGFydCB0
aGlzIGxpc3QuCi0gICAgICBQcm90b1dyaXRlcjo6U3RhcnRPYmplY3QobmFtZSk7Ci0gICAgICBj
dXJyZW50Xy5yZXNldChuZXcgSXRlbSh0aGlzLCBJdGVtOjpNRVNTQUdFLCBmYWxzZSwgZmFsc2Up
KTsKLSAgICAgIFB1c2goImxpc3RfdmFsdWUiLCBJdGVtOjpNRVNTQUdFLCB0cnVlLCBmYWxzZSk7
Ci0gICAgICBQdXNoKCJ2YWx1ZXMiLCBJdGVtOjpNRVNTQUdFLCB0cnVlLCB0cnVlKTsKLSAgICAg
IHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIGlmIChtYXN0ZXJfdHlwZV8ubmFtZSgpID09IGtT
dHJ1Y3RMaXN0VmFsdWVUeXBlKSB7Ci0gICAgICAvLyBXZSBnb3QgYSBTdGFydExpc3Qgd2l0aCBn
b29nbGUucHJvdG9idWYuTGlzdFZhbHVlIG1hc3RlciB0eXBlLiBUaGlzCi0gICAgICAvLyBtZWFu
cyB3ZSBoYXZlIHRvIHN0YXJ0IHRoZSAidmFsdWVzIiB3aXRoaW4gZ29vZ2xlLnByb3RvYnVmLkxp
c3RWYWx1ZS4KLSAgICAgIC8vCi0gICAgICAvLyBSZW5kZXIKLSAgICAgIC8vICI8bmFtZT4iOiB7
Ci0gICAgICAvLyAgICJ2YWx1ZXMiOiBbICAvLyBTdGFydCB0aGlzIGxpc3QuCi0gICAgICBQcm90
b1dyaXRlcjo6U3RhcnRPYmplY3QobmFtZSk7Ci0gICAgICBjdXJyZW50Xy5yZXNldChuZXcgSXRl
bSh0aGlzLCBJdGVtOjpNRVNTQUdFLCBmYWxzZSwgZmFsc2UpKTsKLSAgICAgIFB1c2goInZhbHVl
cyIsIEl0ZW06Ok1FU1NBR0UsIHRydWUsIHRydWUpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
fQotCi0gICAgLy8gU2VuZCB0aGUgZXZlbnQgdG8gUHJvdG9Xcml0ZXIgc28gcHJvcGVyIGVycm9y
cyBjYW4gYmUgcmVwb3J0ZWQuCi0gICAgLy8KLSAgICAvLyBSZW5kZXIgYSByZWd1bGFyIGxpc3Q6
Ci0gICAgLy8gIjxuYW1lPiI6IFsKLSAgICBQcm90b1dyaXRlcjo6U3RhcnRMaXN0KG5hbWUpOwot
ICAgIGN1cnJlbnRfLnJlc2V0KG5ldyBJdGVtKHRoaXMsIEl0ZW06Ok1FU1NBR0UsIGZhbHNlLCB0
cnVlKSk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBpZiAoY3VycmVudF8tPklzQW55KCkp
IHsKLSAgICBjdXJyZW50Xy0+YW55KCktPlN0YXJ0TGlzdChuYW1lKTsKLSAgICByZXR1cm4gdGhp
czsKLSAgfQotCi0gIC8vIElmIHRoZSB0b3Agb2Ygc3RhY2sgaXMgYSBtYXAsIHdlIGFyZSBzdGFy
dGluZyBhIGxpc3QgdmFsdWUgd2l0aGluIGEgbWFwLgotICAvLyBTaW5jZSBtYXAgZG9lcyBub3Qg
YWxsb3cgcmVwZWF0ZWQgdmFsdWVzLCB0aGlzIGNhbiBvbmx5IGhhcHBlbiB3aGVuIHRoZSBtYXAK
LSAgLy8gdmFsdWUgaXMgb2YgYSBzcGVjaWFsIHR5cGUgdGhhdCByZW5kZXJzIGEgbGlzdCBpbiBK
U09OLiAgVGhlc2UgY2FuIGJlIG9uZQotICAvLyBvZiAzIGNhc2VzOgotICAvLyBpLiBXZSBhcmUg
cmVuZGVyaW5nIGEgbGlzdCB2YWx1ZSB3aXRoaW4gZ29vZ2xlLnByb3RvYnVmLlN0cnVjdAotICAv
LyBpaS4gV2UgYXJlIHJlbmRlcmluZyBhIGxpc3QgdmFsdWUgd2l0aGluIGdvb2dsZS5wcm90b2J1
Zi5WYWx1ZQotICAvLyBpaWkuIFdlIGFyZSByZW5kZXJpbmcgYSBsaXN0IHZhbHVlIHdpdGggdHlw
ZSBnb29nbGUucHJvdG9idWYuTGlzdFZhbHVlLgotICBpZiAoY3VycmVudF8tPklzTWFwKCkpIHsK
LSAgICBpZiAoIVZhbGlkTWFwS2V5KG5hbWUpKSB7Ci0gICAgICBJbmNyZW1lbnRJbnZhbGlkRGVw
dGgoKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8vIFN0YXJ0IHRoZSByZXBl
YXRlZCBtYXAgZW50cnkgb2JqZWN0LgotICAgIC8vIFJlbmRlcgotICAgIC8vIHsgImtleSI6ICI8
bmFtZT4iLCAidmFsdWUiOiB7Ci0gICAgUHVzaCgiIiwgSXRlbTo6TUVTU0FHRSwgZmFsc2UsIGZh
bHNlKTsKLSAgICBQcm90b1dyaXRlcjo6UmVuZGVyRGF0YVBpZWNlKCJrZXkiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVBpZWNlKG5hbWUsIHVzZV9zdHJpY3RfYmFzZTY0
X2RlY29kaW5nKCkpKTsKLSAgICBQdXNoKCJ2YWx1ZSIsIEl0ZW06Ok1FU1NBR0UsIHRydWUsIGZh
bHNlKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmUgdmFsaWQgYWZ0ZXIgcHVzaGluZyBhbGwg
YWJvdmUgaXRlbXMuCi0gICAgaWYgKGludmFsaWRfZGVwdGgoKSA+IDApIHJldHVybiB0aGlzOwot
Ci0gICAgLy8gY2FzZSBpIGFuZCBpaSBhYm92ZS4gU3RhcnQgImxpc3RfdmFsdWUiIGZpZWxkIHdp
dGhpbiBnLnAuVmFsdWUKLSAgICBpZiAoZWxlbWVudCgpICE9IE5VTEwgJiYgZWxlbWVudCgpLT5w
YXJlbnRfZmllbGQoKSAhPSBOVUxMKSB7Ci0gICAgICAvLyBSZW5kZXIKLSAgICAgIC8vICJsaXN0
X3ZhbHVlIjogewotICAgICAgLy8gICAidmFsdWVzIjogWyAgLy8gU3RhcnQgdGhpcyBsaXN0Ci0g
ICAgICBpZiAoSXNTdHJ1Y3RWYWx1ZSgqZWxlbWVudCgpLT5wYXJlbnRfZmllbGQoKSkpIHsKLSAg
ICAgICAgUHVzaCgibGlzdF92YWx1ZSIsIEl0ZW06Ok1FU1NBR0UsIHRydWUsIGZhbHNlKTsKLSAg
ICAgICAgUHVzaCgidmFsdWVzIiwgSXRlbTo6TUVTU0FHRSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgfQotCi0gICAgICAvLyBSZW5kZXIKLSAgICAgIC8vICJ2YWx1
ZXMiOiBbCi0gICAgICBpZiAoSXNTdHJ1Y3RMaXN0VmFsdWUoKmVsZW1lbnQoKS0+cGFyZW50X2Zp
ZWxkKCkpKSB7Ci0gICAgICAgIC8vIGNhc2UgaWlpIGFib3ZlLiBCaW5kIGRpcmVjdGx5IHRvIGcu
cC5MaXN0VmFsdWUKLSAgICAgICAgUHVzaCgidmFsdWVzIiwgSXRlbTo6TUVTU0FHRSwgdHJ1ZSwg
dHJ1ZSk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJl
cG9ydCBhbiBlcnJvci4KLSAgICBJbnZhbGlkVmFsdWUoIk1hcCIsIFN0ckNhdCgiQ2Fubm90IGhh
dmUgcmVwZWF0ZWQgaXRlbXMgKCciLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICInKSB3aXRoaW4gYSBtYXAuIikpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLy8g
V2hlbiBuYW1lIGlzIGVtcHR5IGFuZCBzdGFjayBpcyBub3QgZW1wdHksIHdlIGFyZSByZW5kZXJp
bmcgYW4gaXRlbSB3aXRoaW4KLSAgLy8gYSBsaXN0LgotICBpZiAobmFtZS5lbXB0eSgpKSB7Ci0g
ICAgaWYgKGVsZW1lbnQoKSAhPSBOVUxMICYmIGVsZW1lbnQoKS0+cGFyZW50X2ZpZWxkKCkgIT0g
TlVMTCkgewotICAgICAgaWYgKElzU3RydWN0VmFsdWUoKmVsZW1lbnQoKS0+cGFyZW50X2ZpZWxk
KCkpKSB7Ci0gICAgICAgIC8vIFNpbmNlIGl0IGlzIGcucC5WYWx1ZSwgd2UgYmluZCBkaXJlY3Rs
eSB0byB0aGUgbGlzdF92YWx1ZS4KLSAgICAgICAgLy8gUmVuZGVyCi0gICAgICAgIC8vIHsgIC8v
IGcucC5WYWx1ZSBpdGVtIHdpdGhpbiB0aGUgbGlzdAotICAgICAgICAvLyAgICJsaXN0X3ZhbHVl
IjogewotICAgICAgICAvLyAgICAgInZhbHVlcyI6IFsKLSAgICAgICAgUHVzaCgiIiwgSXRlbTo6
TUVTU0FHRSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgUHVzaCgibGlzdF92YWx1ZSIsIEl0ZW06
Ok1FU1NBR0UsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgUHVzaCgidmFsdWVzIiwgSXRlbTo6TUVT
U0FHRSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotCi0gICAg
ICBpZiAoSXNTdHJ1Y3RMaXN0VmFsdWUoKmVsZW1lbnQoKS0+cGFyZW50X2ZpZWxkKCkpKSB7Ci0g
ICAgICAgIC8vIFNpbmNlIGl0IGlzIGcucC5MaXN0VmFsdWUsIHdlIGJpbmQgdG8gaXQgZGlyZWN0
bHkuCi0gICAgICAgIC8vIFJlbmRlcgotICAgICAgICAvLyB7ICAvLyBnLnAuTGlzdFZhbHVlIGl0
ZW0gd2l0aGluIHRoZSBsaXN0Ci0gICAgICAgIC8vICAgInZhbHVlcyI6IFsKLSAgICAgICAgUHVz
aCgiIiwgSXRlbTo6TUVTU0FHRSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgUHVzaCgidmFsdWVz
IiwgSXRlbTo6TUVTU0FHRSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8vIFBhc3MgdGhlIGV2ZW50IHRvIHVuZGVybHlpbmcgUHJvdG9X
cml0ZXIuCi0gICAgUHVzaChuYW1lLCBJdGVtOjpNRVNTQUdFLCBmYWxzZSwgdHJ1ZSk7Ci0gICAg
cmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvLyBuYW1lIGlzIG5vdCBlbXB0eQotICBjb25zdCBnb29n
bGU6OnByb3RvYnVmOjpGaWVsZCogZmllbGQgPSBMb29rdXAobmFtZSk7Ci0gIGlmIChmaWVsZCA9
PSBOVUxMKSB7Ci0gICAgSW5jcmVtZW50SW52YWxpZERlcHRoKCk7Ci0gICAgcmV0dXJuIHRoaXM7
Ci0gIH0KLQotICBpZiAoSXNTdHJ1Y3RWYWx1ZSgqZmllbGQpKSB7Ci0gICAgLy8gSWYgZy5wLlZh
bHVlIGlzIHJlcGVhdGVkLCBzdGFydCB0aGF0IGxpc3QuIE90aGVyd2lzZSwgc3RhcnQgdGhlCi0g
ICAgLy8gImxpc3RfdmFsdWUiIHdpdGhpbiBpdC4KLSAgICBpZiAoSXNSZXBlYXRlZCgqZmllbGQp
KSB7Ci0gICAgICAvLyBSZW5kZXIgaXQganVzdCBsaWtlIGEgcmVndWxhciByZXBlYXRlZCBmaWVs
ZC4KLSAgICAgIC8vICI8bmFtZT4iOiBbCi0gICAgICBQdXNoKG5hbWUsIEl0ZW06Ok1FU1NBR0Us
IGZhbHNlLCB0cnVlKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8vIFN0YXJ0
IHRoZSAibGlzdF92YWx1ZSIgZmllbGQuCi0gICAgLy8gUmVuZGVyCi0gICAgLy8gIjxuYW1lPiI6
IHsKLSAgICAvLyAgICJsaXN0X3ZhbHVlIjogewotICAgIC8vICAgICAidmFsdWVzIjogWwotICAg
IFB1c2gobmFtZSwgSXRlbTo6TUVTU0FHRSwgZmFsc2UsIGZhbHNlKTsKLSAgICBQdXNoKCJsaXN0
X3ZhbHVlIiwgSXRlbTo6TUVTU0FHRSwgdHJ1ZSwgZmFsc2UpOwotICAgIFB1c2goInZhbHVlcyIs
IEl0ZW06Ok1FU1NBR0UsIHRydWUsIHRydWUpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAg
aWYgKElzU3RydWN0TGlzdFZhbHVlKCpmaWVsZCkpIHsKLSAgICAvLyBJZiBnLnAuTGlzdFZhbHVl
IGlzIHJlcGVhdGVkLCBzdGFydCB0aGF0IGxpc3QuIE90aGVyd2lzZSwgc3RhcnQgdGhlCi0gICAg
Ly8gInZhbHVlcyIgd2l0aGluIGl0LgotICAgIGlmIChJc1JlcGVhdGVkKCpmaWVsZCkpIHsKLSAg
ICAgIC8vIFJlbmRlciBpdCBqdXN0IGxpa2UgYSByZWd1bGFyIHJlcGVhdGVkIGZpZWxkLgotICAg
ICAgLy8gIjxuYW1lPiI6IFsKLSAgICAgIFB1c2gobmFtZSwgSXRlbTo6TUVTU0FHRSwgZmFsc2Us
IHRydWUpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLy8gU3RhcnQgdGhlICJ2
YWx1ZXMiIGZpZWxkIHdpdGhpbiBnLnAuTGlzdFZhbHVlLgotICAgIC8vIFJlbmRlcgotICAgIC8v
ICI8bmFtZT4iOiB7Ci0gICAgLy8gICAidmFsdWVzIjogWwotICAgIFB1c2gobmFtZSwgSXRlbTo6
TUVTU0FHRSwgZmFsc2UsIGZhbHNlKTsKLSAgICBQdXNoKCJ2YWx1ZXMiLCBJdGVtOjpNRVNTQUdF
LCB0cnVlLCB0cnVlKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8vIElmIHdlIGFyZSBo
ZXJlLCB0aGUgZmllbGQgc2hvdWxkIGJlIHJlcGVhdGVkLiBSZXBvcnQgYW4gZXJyb3Igb3RoZXJ3
aXNlLgotICBpZiAoIUlzUmVwZWF0ZWQoKmZpZWxkKSkgewotICAgIEluY3JlbWVudEludmFsaWRE
ZXB0aCgpOwotICAgIEludmFsaWROYW1lKG5hbWUsICJQcm90byBmaWVsZCBpcyBub3QgcmVwZWF0
aW5nLCBjYW5ub3Qgc3RhcnQgbGlzdC4iKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIGlm
IChJc01hcCgqZmllbGQpKSB7Ci0gICAgSW52YWxpZFZhbHVlKCJNYXAiLAotICAgICAgICAgICAg
ICAgICBTdHJDYXQoIkNhbm5vdCBiaW5kIGEgbGlzdCB0byBtYXAgZm9yIGZpZWxkICciLCBuYW1l
LCAiJy4iKSk7Ci0gICAgSW5jcmVtZW50SW52YWxpZERlcHRoKCk7Ci0gICAgcmV0dXJuIHRoaXM7
Ci0gIH0KLQotICAvLyBQYXNzIHRoZSBldmVudCB0byBQcm90b1dyaXRlci4KLSAgLy8gUmVuZGVy
Ci0gIC8vICI8bmFtZT4iOiBbCi0gIFB1c2gobmFtZSwgSXRlbTo6TUVTU0FHRSwgZmFsc2UsIHRy
dWUpOwotICByZXR1cm4gdGhpczsKLX0KLQotUHJvdG9TdHJlYW1PYmplY3RXcml0ZXIqIFByb3Rv
U3RyZWFtT2JqZWN0V3JpdGVyOjpFbmRMaXN0KCkgewotICBpZiAoaW52YWxpZF9kZXB0aCgpID4g
MCkgewotICAgIERlY3JlbWVudEludmFsaWREZXB0aCgpOwotICAgIHJldHVybiB0aGlzOwotICB9
Ci0KLSAgaWYgKGN1cnJlbnRfID09IE5VTEwpIHJldHVybiB0aGlzOwotCi0gIGlmIChjdXJyZW50
Xy0+SXNBbnkoKSkgewotICAgIGN1cnJlbnRfLT5hbnkoKS0+RW5kTGlzdCgpOwotICAgIHJldHVy
biB0aGlzOwotICB9Ci0KLSAgUG9wKCk7Ci0gIHJldHVybiB0aGlzOwotfQotCi1TdGF0dXMgUHJv
dG9TdHJlYW1PYmplY3RXcml0ZXI6OlJlbmRlclN0cnVjdFZhbHVlKFByb3RvU3RyZWFtT2JqZWN0
V3JpdGVyKiBvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRGF0YVBpZWNlJiBkYXRhKSB7Ci0gIHN0cmluZyBzdHJ1Y3RfZmllbGRfbmFt
ZTsKLSAgc3dpdGNoIChkYXRhLnR5cGUoKSkgewotICAgIC8vIE91ciBKU09OIHBhcnNlciBwYXJz
ZXMgbnVtYmVycyBhcyBlaXRoZXIgaW50NjQsIHVpbnQ2NCwgb3IgZG91YmxlLgotICAgIGNhc2Ug
RGF0YVBpZWNlOjpUWVBFX0lOVDY0OiB7Ci0gICAgICAvLyBJZiB0aGUgb3B0aW9uIHRvIHRyZWF0
IGludGVnZXJzIGFzIHN0cmluZ3MgaXMgc2V0LCB0aGVuIHJlbmRlciB0aGVtIGFzCi0gICAgICAv
LyBzdHJpbmdzLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHJlbmRlcmluZyB0aGVtIGFzIGRvdWJs
ZS4KLSAgICAgIGlmIChvdy0+b3B0aW9uc18uc3RydWN0X2ludGVnZXJzX2FzX3N0cmluZ3MpIHsK
LSAgICAgICAgU3RhdHVzT3I8aW50NjQ+IGludF92YWx1ZSA9IGRhdGEuVG9JbnQ2NCgpOwotICAg
ICAgICBpZiAoaW50X3ZhbHVlLm9rKCkpIHsKLSAgICAgICAgICBvdy0+UHJvdG9Xcml0ZXI6OlJl
bmRlckRhdGFQaWVjZSgKLSAgICAgICAgICAgICAgInN0cmluZ192YWx1ZSIsCi0gICAgICAgICAg
ICAgIERhdGFQaWVjZShTaW1wbGVJdG9hKGludF92YWx1ZS5WYWx1ZU9yRGllKCkpLCB0cnVlKSk7
Ci0gICAgICAgICAgcmV0dXJuIFN0YXR1czo6T0s7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAg
IHN0cnVjdF9maWVsZF9uYW1lID0gIm51bWJlcl92YWx1ZSI7Ci0gICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBEYXRhUGllY2U6OlRZUEVfVUlOVDY0OiB7Ci0gICAgICAvLyBJZiB0aGUgb3B0
aW9uIHRvIHRyZWF0IGludGVnZXJzIGFzIHN0cmluZ3MgaXMgc2V0LCB0aGVuIHJlbmRlciB0aGVt
IGFzCi0gICAgICAvLyBzdHJpbmdzLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHJlbmRlcmluZyB0
aGVtIGFzIGRvdWJsZS4KLSAgICAgIGlmIChvdy0+b3B0aW9uc18uc3RydWN0X2ludGVnZXJzX2Fz
X3N0cmluZ3MpIHsKLSAgICAgICAgU3RhdHVzT3I8dWludDY0PiBpbnRfdmFsdWUgPSBkYXRhLlRv
VWludDY0KCk7Ci0gICAgICAgIGlmIChpbnRfdmFsdWUub2soKSkgewotICAgICAgICAgIG93LT5Q
cm90b1dyaXRlcjo6UmVuZGVyRGF0YVBpZWNlKAotICAgICAgICAgICAgICAic3RyaW5nX3ZhbHVl
IiwKLSAgICAgICAgICAgICAgRGF0YVBpZWNlKFNpbXBsZUl0b2EoaW50X3ZhbHVlLlZhbHVlT3JE
aWUoKSksIHRydWUpKTsKLSAgICAgICAgICByZXR1cm4gU3RhdHVzOjpPSzsKLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgc3RydWN0X2ZpZWxkX25hbWUgPSAibnVtYmVyX3ZhbHVlIjsKLSAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIERhdGFQaWVjZTo6VFlQRV9ET1VCTEU6IHsKLSAgICAg
IHN0cnVjdF9maWVsZF9uYW1lID0gIm51bWJlcl92YWx1ZSI7Ci0gICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBEYXRhUGllY2U6OlRZUEVfU1RSSU5HOiB7Ci0gICAgICBzdHJ1Y3RfZmllbGRf
bmFtZSA9ICJzdHJpbmdfdmFsdWUiOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRGF0
YVBpZWNlOjpUWVBFX0JPT0w6IHsKLSAgICAgIHN0cnVjdF9maWVsZF9uYW1lID0gImJvb2xfdmFs
dWUiOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRGF0YVBpZWNlOjpUWVBFX05VTEw6
IHsKLSAgICAgIHN0cnVjdF9maWVsZF9uYW1lID0gIm51bGxfdmFsdWUiOwotICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGRlZmF1bHQ6IHsKLSAgICAgIHJldHVybiBTdGF0dXMoSU5WQUxJRF9BUkdV
TUVOVCwKLSAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgc3RydWN0IGRhdGEgdHlwZS4gT25s
eSBudW1iZXIsIHN0cmluZywgYm9vbGVhbiBvciAiCi0gICAgICAgICAgICAgICAgICAgICJudWxs
IHZhbHVlcyBhcmUgc3VwcG9ydGVkLiIpOwotICAgIH0KLSAgfQotICBvdy0+UHJvdG9Xcml0ZXI6
OlJlbmRlckRhdGFQaWVjZShzdHJ1Y3RfZmllbGRfbmFtZSwgZGF0YSk7Ci0gIHJldHVybiBTdGF0
dXM6Ok9LOwotfQotCi1TdGF0dXMgUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlJlbmRlclRpbWVz
dGFtcChQcm90b1N0cmVhbU9iamVjdFdyaXRlciogb3csCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEYXRhUGllY2UmIGRhdGEpIHsKLSAgaWYg
KGRhdGEudHlwZSgpICE9IERhdGFQaWVjZTo6VFlQRV9TVFJJTkcpIHsKLSAgICByZXR1cm4gU3Rh
dHVzKElOVkFMSURfQVJHVU1FTlQsCi0gICAgICAgICAgICAgICAgICBTdHJDYXQoIkludmFsaWQg
ZGF0YSB0eXBlIGZvciB0aW1lc3RhbXAsIHZhbHVlIGlzICIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YS5WYWx1ZUFzU3RyaW5nT3JEZWZhdWx0KCIiKSkpOwotICB9Ci0KLSAgU3RyaW5n
UGllY2UgdmFsdWUoZGF0YS5zdHIoKSk7Ci0KLSAgaW50NjQgc2Vjb25kczsKLSAgaW50MzIgbmFu
b3M7Ci0gIGlmICghOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6UGFyc2VUaW1lKHZhbHVl
LlRvU3RyaW5nKCksICZzZWNvbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbmFub3MpKSB7Ci0gICAgcmV0dXJuIFN0YXR1cyhJTlZBTElEX0FSR1VN
RU5ULCBTdHJDYXQoIkludmFsaWQgdGltZSBmb3JtYXQ6ICIsIHZhbHVlKSk7Ci0gIH0KLQotCi0g
IG93LT5Qcm90b1dyaXRlcjo6UmVuZGVyRGF0YVBpZWNlKCJzZWNvbmRzIiwgRGF0YVBpZWNlKHNl
Y29uZHMpKTsKLSAgb3ctPlByb3RvV3JpdGVyOjpSZW5kZXJEYXRhUGllY2UoIm5hbm9zIiwgRGF0
YVBpZWNlKG5hbm9zKSk7Ci0gIHJldHVybiBTdGF0dXM6Ok9LOwotfQotCi1zdGF0aWMgaW5saW5l
IHV0aWw6OlN0YXR1cyBSZW5kZXJPbmVGaWVsZFBhdGgoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXIq
IG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nUGllY2UgcGF0aCkgewotICBvdy0+UHJvdG9Xcml0ZXI6OlJlbmRlckRhdGFQaWVjZSgKLSAg
ICAgICJwYXRocyIsIERhdGFQaWVjZShDb252ZXJ0RmllbGRNYXNrUGF0aChwYXRoLCAmVG9TbmFr
ZUNhc2UpLCB0cnVlKSk7Ci0gIHJldHVybiBTdGF0dXM6Ok9LOwotfQotCi1TdGF0dXMgUHJvdG9T
dHJlYW1PYmplY3RXcml0ZXI6OlJlbmRlckZpZWxkTWFzayhQcm90b1N0cmVhbU9iamVjdFdyaXRl
ciogb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBEYXRhUGllY2UmIGRhdGEpIHsKLSAgaWYgKGRhdGEudHlwZSgpICE9IERhdGFQaWVjZTo6
VFlQRV9TVFJJTkcpIHsKLSAgICByZXR1cm4gU3RhdHVzKElOVkFMSURfQVJHVU1FTlQsCi0gICAg
ICAgICAgICAgICAgICBTdHJDYXQoIkludmFsaWQgZGF0YSB0eXBlIGZvciBmaWVsZCBtYXNrLCB2
YWx1ZSBpcyAiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuVmFsdWVBc1N0cmluZ09y
RGVmYXVsdCgiIikpKTsKLSAgfQotCi0vLyBUT0RPKHRzdW4pOiBmaWd1cmUgb3V0IGhvdyB0byBk
byBwcm90byBkZXNjcmlwdG9yIGJhc2VkIHNuYWtlIGNhc2UKLS8vIGNvbnZlcnNpb25zIGFzIG11
Y2ggYXMgcG9zc2libGUuIEJlY2F1c2UgVG9TbmFrZUNhc2Ugc29tZXRpbWVzIHJldHVybnMgdGhl
Ci0vLyB3cm9uZyB2YWx1ZS4KLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxSZXN1bHRD
YWxsYmFjazE8dXRpbDo6U3RhdHVzLCBTdHJpbmdQaWVjZT4gPiBjYWxsYmFjaygKLSAgICAgIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Ok5ld1Blcm1hbmVudENhbGxiYWNrKCZSZW5kZXJP
bmVGaWVsZFBhdGgsIG93KSk7Ci0gIHJldHVybiBEZWNvZGVDb21wYWN0RmllbGRNYXNrUGF0aHMo
ZGF0YS5zdHIoKSwgY2FsbGJhY2suZ2V0KCkpOwotfQotCi1TdGF0dXMgUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXI6OlJlbmRlckR1cmF0aW9uKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyKiBvdywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGF0YVBp
ZWNlJiBkYXRhKSB7Ci0gIGlmIChkYXRhLnR5cGUoKSAhPSBEYXRhUGllY2U6OlRZUEVfU1RSSU5H
KSB7Ci0gICAgcmV0dXJuIFN0YXR1cyhJTlZBTElEX0FSR1VNRU5ULAotICAgICAgICAgICAgICAg
ICAgU3RyQ2F0KCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgZHVyYXRpb24sIHZhbHVlIGlzICIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5WYWx1ZUFzU3RyaW5nT3JEZWZhdWx0KCIiKSkp
OwotICB9Ci0KLSAgU3RyaW5nUGllY2UgdmFsdWUoZGF0YS5zdHIoKSk7Ci0KLSAgaWYgKCF2YWx1
ZS5lbmRzX3dpdGgoInMiKSkgewotICAgIHJldHVybiBTdGF0dXMoSU5WQUxJRF9BUkdVTUVOVCwK
LSAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIGR1cmF0aW9uIGZvcm1hdDsgZHVyYXRpb24gbXVz
dCBlbmQgd2l0aCAncyciKTsKLSAgfQotICB2YWx1ZSA9IHZhbHVlLnN1YnN0cigwLCB2YWx1ZS5z
aXplKCkgLSAxKTsKLSAgaW50IHNpZ24gPSAxOwotICBpZiAodmFsdWUuc3RhcnRzX3dpdGgoIi0i
KSkgewotICAgIHNpZ24gPSAtMTsKLSAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cigxKTsKLSAgfQot
Ci0gIFN0cmluZ1BpZWNlIHNfc2Vjcywgc19uYW5vczsKLSAgU3BsaXRTZWNvbmRzQW5kTmFub3Mo
dmFsdWUsICZzX3NlY3MsICZzX25hbm9zKTsKLSAgdWludDY0IHVuc2lnbmVkX3NlY29uZHM7Ci0g
IGlmICghc2FmZV9zdHJ0b3U2NChzX3NlY3MsICZ1bnNpZ25lZF9zZWNvbmRzKSkgewotICAgIHJl
dHVybiBTdGF0dXMoSU5WQUxJRF9BUkdVTUVOVCwKLSAgICAgICAgICAgICAgICAgICJJbnZhbGlk
IGR1cmF0aW9uIGZvcm1hdCwgZmFpbGVkIHRvIHBhcnNlIHNlY29uZHMiKTsKLSAgfQotCi0gIGlu
dDMyIG5hbm9zID0gMDsKLSAgU3RhdHVzIG5hbm9zX3N0YXR1cyA9IEdldE5hbm9zRnJvbVN0cmlu
Z1BpZWNlKAotICAgICAgc19uYW5vcywgIkludmFsaWQgZHVyYXRpb24gZm9ybWF0LCBmYWlsZWQg
dG8gcGFyc2UgbmFubyBzZWNvbmRzIiwKLSAgICAgICJEdXJhdGlvbiB2YWx1ZSBleGNlZWRzIGxp
bWl0cyIsICZuYW5vcyk7Ci0gIGlmICghbmFub3Nfc3RhdHVzLm9rKCkpIHsKLSAgICByZXR1cm4g
bmFub3Nfc3RhdHVzOwotICB9Ci0gIG5hbm9zID0gc2lnbiAqIG5hbm9zOwotCi0gIGludDY0IHNl
Y29uZHMgPSBzaWduICogdW5zaWduZWRfc2Vjb25kczsKLSAgaWYgKHNlY29uZHMgPiBrRHVyYXRp
b25NYXhTZWNvbmRzIHx8IHNlY29uZHMgPCBrRHVyYXRpb25NaW5TZWNvbmRzIHx8Ci0gICAgICBu
YW5vcyA8PSAta05hbm9zUGVyU2Vjb25kIHx8IG5hbm9zID49IGtOYW5vc1BlclNlY29uZCkgewot
ICAgIHJldHVybiBTdGF0dXMoSU5WQUxJRF9BUkdVTUVOVCwgIkR1cmF0aW9uIHZhbHVlIGV4Y2Vl
ZHMgbGltaXRzIik7Ci0gIH0KLQotICBvdy0+UHJvdG9Xcml0ZXI6OlJlbmRlckRhdGFQaWVjZSgi
c2Vjb25kcyIsIERhdGFQaWVjZShzZWNvbmRzKSk7Ci0gIG93LT5Qcm90b1dyaXRlcjo6UmVuZGVy
RGF0YVBpZWNlKCJuYW5vcyIsIERhdGFQaWVjZShuYW5vcykpOwotICByZXR1cm4gU3RhdHVzOjpP
SzsKLX0KLQotU3RhdHVzIFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpSZW5kZXJXcmFwcGVyVHlw
ZShQcm90b1N0cmVhbU9iamVjdFdyaXRlciogb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERhdGFQaWVjZSYgZGF0YSkgewotICBvdy0+
UHJvdG9Xcml0ZXI6OlJlbmRlckRhdGFQaWVjZSgidmFsdWUiLCBkYXRhKTsKLSAgcmV0dXJuIFN0
YXR1czo6T0s7Ci19Ci0KLVByb3RvU3RyZWFtT2JqZWN0V3JpdGVyKiBQcm90b1N0cmVhbU9iamVj
dFdyaXRlcjo6UmVuZGVyRGF0YVBpZWNlKAotICAgIFN0cmluZ1BpZWNlIG5hbWUsIGNvbnN0IERh
dGFQaWVjZSYgZGF0YSkgewotICBTdGF0dXMgc3RhdHVzOwotICBpZiAoaW52YWxpZF9kZXB0aCgp
ID4gMCkgcmV0dXJuIHRoaXM7Ci0KLSAgaWYgKGN1cnJlbnRfID09IE5VTEwpIHsKLSAgICBjb25z
dCBUeXBlUmVuZGVyZXIqIHR5cGVfcmVuZGVyZXIgPQotICAgICAgICBGaW5kVHlwZVJlbmRlcmVy
KEdldEZ1bGxUeXBlV2l0aFVybChtYXN0ZXJfdHlwZV8ubmFtZSgpKSk7Ci0gICAgaWYgKHR5cGVf
cmVuZGVyZXIgPT0gTlVMTCkgewotICAgICAgSW52YWxpZE5hbWUobmFtZSwgIlJvb3QgZWxlbWVu
dCBtdXN0IGJlIGEgbWVzc2FnZS4iKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgICAv
LyBSZW5kZXIgdGhlIHNwZWNpYWwgdHlwZS4KLSAgICAvLyAiPG5hbWU+IjogewotICAgIC8vICAg
Li4uIFJlbmRlciBzcGVjaWFsIHR5cGUgLi4uCi0gICAgLy8gfQotICAgIFByb3RvV3JpdGVyOjpT
dGFydE9iamVjdChuYW1lKTsKLSAgICBzdGF0dXMgPSAoKnR5cGVfcmVuZGVyZXIpKHRoaXMsIGRh
dGEpOwotICAgIGlmICghc3RhdHVzLm9rKCkpIHsKLSAgICAgIEludmFsaWRWYWx1ZShtYXN0ZXJf
dHlwZV8ubmFtZSgpLAotICAgICAgICAgICAgICAgICAgIFN0ckNhdCgiRmllbGQgJyIsIG5hbWUs
ICInLCAiLCBzdGF0dXMuZXJyb3JfbWVzc2FnZSgpKSk7Ci0gICAgfQotICAgIFByb3RvV3JpdGVy
OjpFbmRPYmplY3QoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIGlmIChjdXJyZW50Xy0+
SXNBbnkoKSkgewotICAgIGN1cnJlbnRfLT5hbnkoKS0+UmVuZGVyRGF0YVBpZWNlKG5hbWUsIGRh
dGEpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6
RmllbGQqIGZpZWxkID0gTlVMTDsKLSAgaWYgKGN1cnJlbnRfLT5Jc01hcCgpKSB7Ci0gICAgaWYg
KCFWYWxpZE1hcEtleShuYW1lKSkgcmV0dXJuIHRoaXM7Ci0KLSAgICAvLyBSZW5kZXIgYW4gaXRl
bSBpbiByZXBlYXRlZCBtYXAgbGlzdC4KLSAgICAvLyB7ICJrZXkiOiAiPG5hbWU+IiwgInZhbHVl
IjoKLSAgICBQdXNoKCIiLCBJdGVtOjpNRVNTQUdFLCBmYWxzZSwgZmFsc2UpOwotICAgIFByb3Rv
V3JpdGVyOjpSZW5kZXJEYXRhUGllY2UoImtleSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEYXRhUGllY2UobmFtZSwgdXNlX3N0cmljdF9iYXNlNjRfZGVjb2RpbmcoKSkpOwot
ICAgIGZpZWxkID0gTG9va3VwKCJ2YWx1ZSIpOwotICAgIGlmIChmaWVsZCA9PSBOVUxMKSB7Ci0g
ICAgICBHT09HTEVfTE9HKERGQVRBTCkgPDwgIk1hcCBkb2VzIG5vdCBoYXZlIGEgdmFsdWUgZmll
bGQuIjsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIGNvbnN0IFR5cGVSZW5kZXJl
ciogdHlwZV9yZW5kZXJlciA9IEZpbmRUeXBlUmVuZGVyZXIoZmllbGQtPnR5cGVfdXJsKCkpOwot
ICAgIGlmICh0eXBlX3JlbmRlcmVyICE9IE5VTEwpIHsKLSAgICAgIC8vIE1hcCdzIHZhbHVlIHR5
cGUgaXMgYSBzcGVjaWFsIHR5cGUuIFJlbmRlciBpdCBsaWtlIGEgbWVzc2FnZToKLSAgICAgIC8v
ICJ2YWx1ZSI6IHsKLSAgICAgIC8vICAgLi4uIFJlbmRlciBzcGVjaWFsIHR5cGUgLi4uCi0gICAg
ICAvLyB9Ci0gICAgICBQdXNoKCJ2YWx1ZSIsIEl0ZW06Ok1FU1NBR0UsIHRydWUsIGZhbHNlKTsK
LSAgICAgIHN0YXR1cyA9ICgqdHlwZV9yZW5kZXJlcikodGhpcywgZGF0YSk7Ci0gICAgICBpZiAo
IXN0YXR1cy5vaygpKSB7Ci0gICAgICAgIEludmFsaWRWYWx1ZShmaWVsZC0+dHlwZV91cmwoKSwK
LSAgICAgICAgICAgICAgICAgICAgIFN0ckNhdCgiRmllbGQgJyIsIG5hbWUsICInLCAiLCBzdGF0
dXMuZXJyb3JfbWVzc2FnZSgpKSk7Ci0gICAgICB9Ci0gICAgICBQb3AoKTsKLSAgICAgIHJldHVy
biB0aGlzOwotICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSByZW5kZXJpbmcgZXhwbGljaXQgbnVs
bCB2YWx1ZXMgYW5kIHRoZSBiYWNrZW5kIHByb3RvIGZpZWxkIGlzCi0gICAgLy8gbm90IG9mIHRo
ZSBnb29nbGUucHJvdG9idWYuTnVsbFR5cGUgdHlwZSwgd2UgZG8gbm90aGluZy4KLSAgICBpZiAo
ZGF0YS50eXBlKCkgPT0gRGF0YVBpZWNlOjpUWVBFX05VTEwgJiYKLSAgICAgICAgZmllbGQtPnR5
cGVfdXJsKCkgIT0ga1N0cnVjdE51bGxWYWx1ZVR5cGVVcmwpIHsKLSAgICAgIFBvcCgpOwotICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLy8gUmVuZGVyIHRoZSBtYXAgdmFsdWUgYXMg
YSBwcmltaXRpdmUgdHlwZS4KLSAgICBQcm90b1dyaXRlcjo6UmVuZGVyRGF0YVBpZWNlKCJ2YWx1
ZSIsIGRhdGEpOwotICAgIFBvcCgpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgZmllbGQg
PSBMb29rdXAobmFtZSk7Ci0gIGlmIChmaWVsZCA9PSBOVUxMKSByZXR1cm4gdGhpczsKLQotICAv
LyBDaGVjayBpZiB0aGUgZmllbGQgaXMgb2Ygc3BlY2lhbCB0eXBlLiBSZW5kZXIgaXQgYWNjb3Jk
aW5nbHkgaWYgc28uCi0gIGNvbnN0IFR5cGVSZW5kZXJlciogdHlwZV9yZW5kZXJlciA9IEZpbmRU
eXBlUmVuZGVyZXIoZmllbGQtPnR5cGVfdXJsKCkpOwotICBpZiAodHlwZV9yZW5kZXJlciAhPSBO
VUxMKSB7Ci0gICAgUHVzaChuYW1lLCBJdGVtOjpNRVNTQUdFLCBmYWxzZSwgZmFsc2UpOwotICAg
IHN0YXR1cyA9ICgqdHlwZV9yZW5kZXJlcikodGhpcywgZGF0YSk7Ci0gICAgaWYgKCFzdGF0dXMu
b2soKSkgewotICAgICAgSW52YWxpZFZhbHVlKGZpZWxkLT50eXBlX3VybCgpLAotICAgICAgICAg
ICAgICAgICAgIFN0ckNhdCgiRmllbGQgJyIsIG5hbWUsICInLCAiLCBzdGF0dXMuZXJyb3JfbWVz
c2FnZSgpKSk7Ci0gICAgfQotICAgIFBvcCgpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAg
Ly8gSWYgd2UgYXJlIHJlbmRlcmluZyBleHBsaWNpdCBudWxsIHZhbHVlcyBhbmQgdGhlIGJhY2tl
bmQgcHJvdG8gZmllbGQgaXMKLSAgLy8gbm90IG9mIHRoZSBnb29nbGUucHJvdG9idWYuTnVsbFR5
cGUgdHlwZSwgd2UgZG8gbm90aGluZy4KLSAgaWYgKGRhdGEudHlwZSgpID09IERhdGFQaWVjZTo6
VFlQRV9OVUxMICYmCi0gICAgICBmaWVsZC0+dHlwZV91cmwoKSAhPSBrU3RydWN0TnVsbFZhbHVl
VHlwZVVybCkgewotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgUHJvdG9Xcml0ZXI6OlJlbmRl
ckRhdGFQaWVjZShuYW1lLCBkYXRhKTsKLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIE1hcCBvZiBm
dW5jdGlvbnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHJlbmRlcmluZyB3ZWxsIGtub3duIHR5
cGUKLS8vIHJlcHJlc2VudGVkIGJ5IHRoZSBrZXkuCi1oYXNoX21hcDxzdHJpbmcsIFByb3RvU3Ry
ZWFtT2JqZWN0V3JpdGVyOjpUeXBlUmVuZGVyZXI+KgotICAgIFByb3RvU3RyZWFtT2JqZWN0V3Jp
dGVyOjpyZW5kZXJlcnNfID0gTlVMTDsKLUdPT0dMRV9QUk9UT0JVRl9ERUNMQVJFX09OQ0Uod3Jp
dGVyX3JlbmRlcmVyc19pbml0Xyk7Ci0KLXZvaWQgUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6Oklu
aXRSZW5kZXJlck1hcCgpIHsKLSAgcmVuZGVyZXJzXyA9IG5ldyBoYXNoX21hcDxzdHJpbmcsIFBy
b3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpUeXBlUmVuZGVyZXI+KCk7Ci0gICgqcmVuZGVyZXJzXylb
InR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJdID0KLSAgICAg
ICZQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6UmVuZGVyVGltZXN0YW1wOwotICAoKnJlbmRlcmVy
c18pWyJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiJdID0KLSAg
ICAgICZQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6UmVuZGVyRHVyYXRpb247Ci0gICgqcmVuZGVy
ZXJzXylbInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzayJdID0K
LSAgICAgICZQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6UmVuZGVyRmllbGRNYXNrOwotICAoKnJl
bmRlcmVyc18pWyJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5Eb3VibGUiXSA9
Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlJlbmRlcldyYXBwZXJUeXBlOwotICAo
KnJlbmRlcmVyc18pWyJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5GbG9hdCJd
ID0KLSAgICAgICZQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6UmVuZGVyV3JhcHBlclR5cGU7Ci0g
ICgqcmVuZGVyZXJzXylbInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkludDY0
Il0gPQotICAgICAgJlByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpSZW5kZXJXcmFwcGVyVHlwZTsK
LSAgKCpyZW5kZXJlcnNfKVsidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVUlu
dDY0Il0gPQotICAgICAgJlByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpSZW5kZXJXcmFwcGVyVHlw
ZTsKLSAgKCpyZW5kZXJlcnNfKVsidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYu
SW50MzIiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlJlbmRlcldyYXBwZXJU
eXBlOwotICAoKnJlbmRlcmVyc18pWyJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1
Zi5VSW50MzIiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlJlbmRlcldyYXBw
ZXJUeXBlOwotICAoKnJlbmRlcmVyc18pWyJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90
b2J1Zi5Cb29sIl0gPQotICAgICAgJlByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpSZW5kZXJXcmFw
cGVyVHlwZTsKLSAgKCpyZW5kZXJlcnNfKVsidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJv
dG9idWYuU3RyaW5nIl0gPQotICAgICAgJlByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpSZW5kZXJX
cmFwcGVyVHlwZTsKLSAgKCpyZW5kZXJlcnNfKVsidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUu
cHJvdG9idWYuQnl0ZXMiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlJlbmRl
cldyYXBwZXJUeXBlOwotICAoKnJlbmRlcmVyc18pWyJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2ds
ZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZSJdID0KLSAgICAgICZQcm90b1N0cmVhbU9iamVjdFdyaXRl
cjo6UmVuZGVyV3JhcHBlclR5cGU7Ci0gICgqcmVuZGVyZXJzXylbInR5cGUuZ29vZ2xlYXBpcy5j
b20vZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWUiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXI6OlJlbmRlcldyYXBwZXJUeXBlOwotICAoKnJlbmRlcmVyc18pWyJ0eXBlLmdvb2ds
ZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlIl0gPQotICAgICAgJlByb3RvU3Ry
ZWFtT2JqZWN0V3JpdGVyOjpSZW5kZXJXcmFwcGVyVHlwZTsKLSAgKCpyZW5kZXJlcnNfKVsidHlw
ZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUiXSA9Ci0gICAgICAm
UHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlJlbmRlcldyYXBwZXJUeXBlOwotICAoKnJlbmRlcmVy
c18pWyJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlIl0gPQot
ICAgICAgJlByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpSZW5kZXJXcmFwcGVyVHlwZTsKLSAgKCpy
ZW5kZXJlcnNfKVsidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVUludDMyVmFs
dWUiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlJlbmRlcldyYXBwZXJUeXBl
OwotICAoKnJlbmRlcmVyc18pWyJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5C
b29sVmFsdWUiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OlJlbmRlcldyYXBw
ZXJUeXBlOwotICAoKnJlbmRlcmVyc18pWyJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90
b2J1Zi5TdHJpbmdWYWx1ZSJdID0KLSAgICAgICZQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6UmVu
ZGVyV3JhcHBlclR5cGU7Ci0gICgqcmVuZGVyZXJzXylbInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29v
Z2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUiXSA9Ci0gICAgICAmUHJvdG9TdHJlYW1PYmplY3RXcml0
ZXI6OlJlbmRlcldyYXBwZXJUeXBlOwotICAoKnJlbmRlcmVyc18pWyJ0eXBlLmdvb2dsZWFwaXMu
Y29tL2dvb2dsZS5wcm90b2J1Zi5WYWx1ZSJdID0KLSAgICAgICZQcm90b1N0cmVhbU9iamVjdFdy
aXRlcjo6UmVuZGVyU3RydWN0VmFsdWU7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
Ok9uU2h1dGRvd24oJkRlbGV0ZVJlbmRlcmVyTWFwKTsKLX0KLQotdm9pZCBQcm90b1N0cmVhbU9i
amVjdFdyaXRlcjo6RGVsZXRlUmVuZGVyZXJNYXAoKSB7Ci0gIGRlbGV0ZSBQcm90b1N0cmVhbU9i
amVjdFdyaXRlcjo6cmVuZGVyZXJzXzsKLSAgcmVuZGVyZXJzXyA9IE5VTEw7Ci19Ci0KLVByb3Rv
U3RyZWFtT2JqZWN0V3JpdGVyOjpUeXBlUmVuZGVyZXIqCi1Qcm90b1N0cmVhbU9iamVjdFdyaXRl
cjo6RmluZFR5cGVSZW5kZXJlcihjb25zdCBzdHJpbmcmIHR5cGVfdXJsKSB7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6R29vZ2xlT25jZUluaXQoJndyaXRlcl9yZW5kZXJlcnNfaW5pdF8sICZJbml0
UmVuZGVyZXJNYXApOwotICByZXR1cm4gRmluZE9yTnVsbCgqcmVuZGVyZXJzXywgdHlwZV91cmwp
OwotfQotCi1ib29sIFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpWYWxpZE1hcEtleShTdHJpbmdQ
aWVjZSB1bm5vcm1hbGl6ZWRfbmFtZSkgewotICBpZiAoY3VycmVudF8gPT0gTlVMTCkgcmV0dXJu
IHRydWU7Ci0KLSAgaWYgKCFjdXJyZW50Xy0+SW5zZXJ0TWFwS2V5SWZOb3RQcmVzZW50KHVubm9y
bWFsaXplZF9uYW1lKSkgewotICAgIGxpc3RlbmVyKCktPkludmFsaWROYW1lKAotICAgICAgICBs
b2NhdGlvbigpLCB1bm5vcm1hbGl6ZWRfbmFtZSwKLSAgICAgICAgU3RyQ2F0KCJSZXBlYXRlZCBt
YXAga2V5OiAnIiwgdW5ub3JtYWxpemVkX25hbWUsICInIGlzIGFscmVhZHkgc2V0LiIpKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm90b1N0
cmVhbU9iamVjdFdyaXRlcjo6UHVzaChTdHJpbmdQaWVjZSBuYW1lLCBJdGVtOjpJdGVtVHlwZSBp
dGVtX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcGxh
Y2Vob2xkZXIsIGJvb2wgaXNfbGlzdCkgewotICBpc19saXN0ID8gUHJvdG9Xcml0ZXI6OlN0YXJ0
TGlzdChuYW1lKSA6IFByb3RvV3JpdGVyOjpTdGFydE9iamVjdChuYW1lKTsKLQotICAvLyBpbnZh
bGlkX2RlcHRoID09IDAgbWVhbnMgaXQgaXMgYSBzdWNjZXNzZnVsIFN0YXJ0T2JqZWN0IG9yIFN0
YXJ0TGlzdC4KLSAgaWYgKGludmFsaWRfZGVwdGgoKSA9PSAwKQotICAgIGN1cnJlbnRfLnJlc2V0
KAotICAgICAgICBuZXcgSXRlbShjdXJyZW50Xy5yZWxlYXNlKCksIGl0ZW1fdHlwZSwgaXNfcGxh
Y2Vob2xkZXIsIGlzX2xpc3QpKTsKLX0KLQotdm9pZCBQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6
UG9wKCkgewotICAvLyBQb3AgYWxsIHBsYWNlaG9sZGVyIGl0ZW1zIHNlbmRpbmcgU3RhcnRPYmpl
Y3Qgb3IgU3RhcnRMaXN0IGV2ZW50cyB0bwotICAvLyBQcm90b1dyaXRlciBhY2NvcmRpbmcgdG8g
aXNfbGlzdCB2YWx1ZS4KLSAgd2hpbGUgKGN1cnJlbnRfICE9IE5VTEwgJiYgY3VycmVudF8tPmlz
X3BsYWNlaG9sZGVyKCkpIHsKLSAgICBQb3BPbmVFbGVtZW50KCk7Ci0gIH0KLSAgaWYgKGN1cnJl
bnRfICE9IE5VTEwpIHsKLSAgICBQb3BPbmVFbGVtZW50KCk7Ci0gIH0KLX0KLQotdm9pZCBQcm90
b1N0cmVhbU9iamVjdFdyaXRlcjo6UG9wT25lRWxlbWVudCgpIHsKLSAgY3VycmVudF8tPmlzX2xp
c3QoKSA/IFByb3RvV3JpdGVyOjpFbmRMaXN0KCkgOiBQcm90b1dyaXRlcjo6RW5kT2JqZWN0KCk7
Ci0gIGN1cnJlbnRfLnJlc2V0KGN1cnJlbnRfLT5wb3A8SXRlbT4oKSk7Ci19Ci0KLWJvb2wgUHJv
dG9TdHJlYW1PYmplY3RXcml0ZXI6OklzTWFwKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxk
JiBmaWVsZCkgewotICBpZiAoZmllbGQudHlwZV91cmwoKS5lbXB0eSgpIHx8Ci0gICAgICBmaWVs
ZC5raW5kKCkgIT0gZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRfS2luZF9UWVBFX01FU1NBR0UgfHwK
LSAgICAgIGZpZWxkLmNhcmRpbmFsaXR5KCkgIT0KLSAgICAgICAgICBnb29nbGU6OnByb3RvYnVm
OjpGaWVsZF9DYXJkaW5hbGl0eV9DQVJESU5BTElUWV9SRVBFQVRFRCkgewotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKiBmaWVsZF90eXBlID0K
LSAgICAgIHR5cGVpbmZvKCktPkdldFR5cGVCeVR5cGVVcmwoZmllbGQudHlwZV91cmwoKSk7Ci0K
LSAgLy8gVE9ETyh4aWFvZmVuZyk6IFVuaWZ5IG9wdGlvbiBuYW1lcy4KLSAgcmV0dXJuIEdldEJv
b2xPcHRpb25PckRlZmF1bHQoZmllbGRfdHlwZS0+b3B0aW9ucygpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zLm1hcF9lbnRy
eSIsIGZhbHNlKSB8fAotICAgICAgICAgR2V0Qm9vbE9wdGlvbk9yRGVmYXVsdChmaWVsZF90eXBl
LT5vcHRpb25zKCksICJtYXBfZW50cnkiLCBmYWxzZSk7Ci19Ci0KLWJvb2wgUHJvdG9TdHJlYW1P
YmplY3RXcml0ZXI6OklzQW55KGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVsZCkg
ewotICByZXR1cm4gR2V0VHlwZVdpdGhvdXRVcmwoZmllbGQudHlwZV91cmwoKSkgPT0ga0FueVR5
cGU7Ci19Ci0KLWJvb2wgUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6OklzU3RydWN0KGNvbnN0IGdv
b2dsZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVsZCkgewotICByZXR1cm4gR2V0VHlwZVdpdGhvdXRV
cmwoZmllbGQudHlwZV91cmwoKSkgPT0ga1N0cnVjdFR5cGU7Ci19Ci0KLWJvb2wgUHJvdG9TdHJl
YW1PYmplY3RXcml0ZXI6OklzU3RydWN0VmFsdWUoCi0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1
Zjo6RmllbGQmIGZpZWxkKSB7Ci0gIHJldHVybiBHZXRUeXBlV2l0aG91dFVybChmaWVsZC50eXBl
X3VybCgpKSA9PSBrU3RydWN0VmFsdWVUeXBlOwotfQotCi1ib29sIFByb3RvU3RyZWFtT2JqZWN0
V3JpdGVyOjpJc1N0cnVjdExpc3RWYWx1ZSgKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpG
aWVsZCYgZmllbGQpIHsKLSAgcmV0dXJuIEdldFR5cGVXaXRob3V0VXJsKGZpZWxkLnR5cGVfdXJs
KCkpID09IGtTdHJ1Y3RMaXN0VmFsdWVUeXBlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgY29udmVy
dGVyCi19ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAv
LyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9p
bnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3R3cml0ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91
dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHdyaXRlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlMTE2MmQ0MzAyMjlhMzkzZjg1OTNkZTA5YzNhMWY0MDgzZGNkMTJhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9w
cm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHdyaXRlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzQwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBk
YXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90
b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0
OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9QUk9UT1NUUkVBTV9P
QkpFQ1RXUklURVJfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZFUlRFUl9Q
Uk9UT1NUUkVBTV9PQkpFQ1RXUklURVJfSF9fCi0KLSNpbmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRl
IDxnb29nbGUvcHJvdG9idWYvc3R1YnMvaGFzaC5oPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lv
L3plcm9fY29weV9zdHJlYW1faW1wbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNj
cmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlwZV9p
bmZvLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGF0YXBpZWNl
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZXJyb3JfbGlzdGVu
ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b193cml0
ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9zdHJ1Y3R1cmVk
X29iamVjdHdyaXRlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVz
b2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW8g
ewotY2xhc3MgQ29kZWRPdXRwdXRTdHJlYW07Ci19ICAvLyBuYW1lc3BhY2UgaW8KLX0gIC8vIG5h
bWVzcGFjZSBwcm90b2J1ZgotCi0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1jbGFzcyBUeXBlOwot
Y2xhc3MgRmllbGQ7Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotCi1uYW1lc3BhY2UgcHJv
dG9idWYgewotbmFtZXNwYWNlIHV0aWwgewotbmFtZXNwYWNlIGNvbnZlcnRlciB7Ci0KLWNsYXNz
IE9iamVjdExvY2F0aW9uVHJhY2tlcjsKLQotLy8gQW4gT2JqZWN0V3JpdGVyIHRoYXQgY2FuIHdy
aXRlIHByb3RvYnVmIGJ5dGVzIGRpcmVjdGx5IGZyb20gd3JpdGVyIGV2ZW50cy4KLS8vIFRoaXMg
Y2xhc3Mgc3VwcG9ydHMgYWxsIHNwZWNpYWwgdHlwZXMgbGlrZSBTdHJ1Y3QgYW5kIE1hcC4gSXQg
dXNlcwotLy8gdGhlIFByb3RvV3JpdGVyIGNsYXNzIHRvIHdyaXRlIHJhdyBwcm90byBieXRlcy4K
LS8vCi0vLyBJdCBhbHNvIHN1cHBvcnRzIHN0cmVhbWluZy4KLWNsYXNzIExJQlBST1RPQlVGX0VY
UE9SVCBQcm90b1N0cmVhbU9iamVjdFdyaXRlciA6IHB1YmxpYyBQcm90b1dyaXRlciB7Ci0gcHVi
bGljOgotICAvLyBPcHRpb25zIHRoYXQgY29udHJvbCBQcm90b1N0cmVhbU9iamVjdFdyaXRlciBj
bGFzcydzIGJlaGF2aW9yLgotICBzdHJ1Y3QgT3B0aW9ucyB7Ci0gICAgLy8gVHJlYXRzIGludGVn
ZXIgaW5wdXRzIGluIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QgYXMgc3RyaW5ncy4gTm9ybWFsbHks
Ci0gICAgLy8gaW50ZWdlciB2YWx1ZXMgYXJlIHJldHVybmVkIGluIGRvdWJsZSBmaWVsZCAibnVt
YmVyX3ZhbHVlIiBvZgotICAgIC8vIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QuIEhvd2V2ZXIsIHRo
aXMgY2FuIGNhdXNlIHByZWNpc2lvbiBsb3NzIGZvcgotICAgIC8vIGludDY0L3VpbnQ2NCBpbnB1
dHMuIFRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkIGZvciBjYXNlcyB0aGF0IHdhbnQgdG8KLSAgICAv
LyBwcmVzZXJ2ZSBpbnRlZ2VyIHByZWNpc2lvbi4KLSAgICBib29sIHN0cnVjdF9pbnRlZ2Vyc19h
c19zdHJpbmdzOwotCi0gICAgT3B0aW9ucygpIDogc3RydWN0X2ludGVnZXJzX2FzX3N0cmluZ3Mo
ZmFsc2UpIHt9Ci0KLSAgICAvLyBEZWZhdWx0IGluc3RhbmNlIG9mIE9wdGlvbnMgd2l0aCBhbGwg
b3B0aW9ucyBzZXQgdG8gZGVmYXVsdHMuCi0gICAgc3RhdGljIGNvbnN0IE9wdGlvbnMmIERlZmF1
bHRzKCkgewotICAgICAgc3RhdGljIE9wdGlvbnMgZGVmYXVsdHM7Ci0gICAgICByZXR1cm4gZGVm
YXVsdHM7Ci0gICAgfQotICB9OwotCi0vLyBDb25zdHJ1Y3Rvci4gRG9lcyBub3QgdGFrZSBvd25l
cnNoaXAgb2YgYW55IHBhcmFtZXRlciBwYXNzZWQgaW4uCi0gIFByb3RvU3RyZWFtT2JqZWN0V3Jp
dGVyKFR5cGVSZXNvbHZlciogdHlwZV9yZXNvbHZlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyaW5nczo6Qnl0ZVNpbmsqIG91dHB1dCwgRXJyb3JMaXN0ZW5lciogbGlzdGVu
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFByb3RvU3RyZWFtT2JqZWN0V3Jp
dGVyOjpPcHRpb25zJiBvcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBy
b3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpPcHRpb25zOjpEZWZhdWx0cygpKTsKLSAgdmlydHVhbCB+
UHJvdG9TdHJlYW1PYmplY3RXcml0ZXIoKTsKLQotICAvLyBPYmplY3RXcml0ZXIgbWV0aG9kcy4K
LSAgdmlydHVhbCBQcm90b1N0cmVhbU9iamVjdFdyaXRlciogU3RhcnRPYmplY3QoU3RyaW5nUGll
Y2UgbmFtZSk7Ci0gIHZpcnR1YWwgUHJvdG9TdHJlYW1PYmplY3RXcml0ZXIqIEVuZE9iamVjdCgp
OwotICB2aXJ0dWFsIFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyKiBTdGFydExpc3QoU3RyaW5nUGll
Y2UgbmFtZSk7Ci0gIHZpcnR1YWwgUHJvdG9TdHJlYW1PYmplY3RXcml0ZXIqIEVuZExpc3QoKTsK
LQotICAvLyBSZW5kZXJzIGEgRGF0YVBpZWNlICd2YWx1ZScgaW50byBhIGZpZWxkIHdob3NlIHdp
cmUgdHlwZSBpcyBkZXRlcm1pbmVkCi0gIC8vIGZyb20gdGhlIGdpdmVuIGZpZWxkICduYW1lJy4K
LSAgdmlydHVhbCBQcm90b1N0cmVhbU9iamVjdFdyaXRlciogUmVuZGVyRGF0YVBpZWNlKFN0cmlu
Z1BpZWNlIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBEYXRhUGllY2UmIHZhbHVlKTsKLQotIHByb3RlY3RlZDoKLSAgLy8gRnVu
Y3Rpb24gdGhhdCByZW5kZXJzIGEgd2VsbCBrbm93biB0eXBlIHdpdGggbW9kaWZpZWQgYmVoYXZp
b3IuCi0gIHR5cGVkZWYgdXRpbDo6U3RhdHVzICgqVHlwZVJlbmRlcmVyKShQcm90b1N0cmVhbU9i
amVjdFdyaXRlciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IERhdGFQaWVjZSYpOwotCi0gIC8vIEhhbmRsZXMgd3JpdGluZyBBbnlzIG91dCB1c2luZyBu
ZXN0ZWQgb2JqZWN0IHdyaXRlcnMgYW5kIHRoZSBsaWtlLgotICBjbGFzcyBMSUJQUk9UT0JVRl9F
WFBPUlQgQW55V3JpdGVyIHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbnlXcml0ZXIoUHJv
dG9TdHJlYW1PYmplY3RXcml0ZXIqIHBhcmVudCk7Ci0gICAgfkFueVdyaXRlcigpOwotCi0gICAg
Ly8gUGFzc2VzIGEgU3RhcnRPYmplY3QgY2FsbCB0aHJvdWdoIHRvIHRoZSBBbnkgd3JpdGVyLgot
ICAgIHZvaWQgU3RhcnRPYmplY3QoU3RyaW5nUGllY2UgbmFtZSk7Ci0KLSAgICAvLyBQYXNzZXMg
YW4gRW5kT2JqZWN0IGNhbGwgdGhyb3VnaCB0byB0aGUgQW55LiBSZXR1cm5zIHRydWUgaWYgdGhl
IGFueQotICAgIC8vIGhhbmRsZWQgdGhlIEVuZE9iamVjdCBjYWxsLCBmYWxzZSBpZiB0aGUgQW55
IGlzIG5vdyBhbGwgZG9uZSBhbmQgaXMgbm8KLSAgICAvLyBsb25nZXIgbmVlZGVkLgotICAgIGJv
b2wgRW5kT2JqZWN0KCk7Ci0KLSAgICAvLyBQYXNzZXMgYSBTdGFydExpc3QgY2FsbCB0aHJvdWdo
IHRvIHRoZSBBbnkgd3JpdGVyLgotICAgIHZvaWQgU3RhcnRMaXN0KFN0cmluZ1BpZWNlIG5hbWUp
OwotCi0gICAgLy8gUGFzc2VzIGFuIEVuZExpc3QgY2FsbCB0aHJvdWdoIHRvIHRoZSBBbnkgd3Jp
dGVyLgotICAgIHZvaWQgRW5kTGlzdCgpOwotCi0gICAgLy8gUmVuZGVycyBhIGRhdGEgcGllY2Ug
b24gdGhlIGFueS4KLSAgICB2b2lkIFJlbmRlckRhdGFQaWVjZShTdHJpbmdQaWVjZSBuYW1lLCBj
b25zdCBEYXRhUGllY2UmIHZhbHVlKTsKLQotICAgcHJpdmF0ZToKLSAgICAvLyBIYW5kbGVzIHN0
YXJ0aW5nIHVwIHRoZSBhbnkgb25jZSB3ZSBoYXZlIGEgdHlwZS4KLSAgICB2b2lkIFN0YXJ0QW55
KGNvbnN0IERhdGFQaWVjZSYgdmFsdWUpOwotCi0gICAgLy8gV3JpdGVzIHRoZSBBbnkgb3V0IHRv
IHRoZSBwYXJlbnQgd3JpdGVyIGluIGl0cyBzZXJpYWxpemVkIGZvcm0uCi0gICAgdm9pZCBXcml0
ZUFueSgpOwotCi0gICAgLy8gVGhlIHBhcmVudCBvZiB0aGlzIHdyaXRlciwgbmVlZGVkIGZvciB2
YXJpb3VzIGJpdHMgc3VjaCBhcyB0eXBlIGluZm8gYW5kCi0gICAgLy8gdGhlIGxpc3RlbmVycy4K
LSAgICBQcm90b1N0cmVhbU9iamVjdFdyaXRlciogcGFyZW50XzsKLQotICAgIC8vIFRoZSBuZXN0
ZWQgb2JqZWN0IHdyaXRlciwgdXNlZCB0byB3cml0ZSBldmVudHMuCi0gICAgZ29vZ2xlOjpwcm90
b2J1Zjo6c2NvcGVkX3B0cjxQcm90b1N0cmVhbU9iamVjdFdyaXRlcj4gb3dfOwotCi0gICAgLy8g
VGhlIHR5cGVfdXJsXyB0aGF0IHRoaXMgQW55IHJlcHJlc2VudHMuCi0gICAgc3RyaW5nIHR5cGVf
dXJsXzsKLQotICAgIC8vIFdoZXRoZXIgdGhpcyBhbnkgaXMgaW52YWxpZC4gVGhpcyBhbGxvd3Mg
dXMgdG8gb25seSByZXBvcnQgYW4gaW52YWxpZAotICAgIC8vIEFueSBtZXNzYWdlIGEgc2luZ2xl
IHRpbWUgcmF0aGVyIHRoYW4gZXZlcnkgdGltZSB3ZSBnZXQgYSBuZXN0ZWQgZmllbGQuCi0gICAg
Ym9vbCBpbnZhbGlkXzsKLQotICAgIC8vIFRoZSBvdXRwdXQgZGF0YSBhbmQgd3JhcHBpbmcgQnl0
ZVNpbmsuCi0gICAgc3RyaW5nIGRhdGFfOwotICAgIHN0cmluZ3M6OlN0cmluZ0J5dGVTaW5rIG91
dHB1dF87Ci0KLSAgICAvLyBUaGUgZGVwdGggd2l0aGluIHRoZSBBbnksIHNvIHdlIGNhbiB0cmFj
ayB3aGVuIHdlJ3JlIGRvbmUuCi0gICAgaW50IGRlcHRoXzsKLQotICAgIC8vIFRydWUgaWYgdGhl
IHR5cGUgaXMgYSB3ZWxsLWtub3duIHR5cGUuIFdlbGwta25vd24gdHlwZXMgaW4gQW55Ci0gICAg
Ly8gaGFzIGEgc3BlY2lhbCBmb3JtYXRpbmc6Ci0gICAgLy8gewotICAgIC8vICAgIkB0eXBlIjog
InR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlhYWCIsCi0gICAgLy8gICAidmFs
dWUiOiA8SlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHlwZT4sCi0gICAgLy8gfQotICAgIGJv
b2wgaXNfd2VsbF9rbm93bl90eXBlXzsKLSAgICBUeXBlUmVuZGVyZXIqIHdlbGxfa25vd25fdHlw
ZV9yZW5kZXJfOwotICB9OwotCi0gIC8vIFJlcHJlc2VudHMgYW4gaXRlbSBpbiBhIHN0YWNrIG9m
IGl0ZW1zIHVzZWQgdG8ga2VlcCBzdGF0ZSBiZXR3ZWVuCi0gIC8vIE9iamVjdFdyaWVyIGV2ZW50
cy4KLSAgY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIEl0ZW0gOiBwdWJsaWMgQmFzZUVsZW1lbnQg
ewotICAgcHVibGljOgotICAgIC8vIEluZGljYXRlcyB0aGUgdHlwZSBvZiBpdGVtLgotICAgIGVu
dW0gSXRlbVR5cGUgewotICAgICAgTUVTU0FHRSwgIC8vIFNpbXBsZSBtZXNzYWdlCi0gICAgICBN
QVAsICAgICAgLy8gUHJvdG8zIG1hcCB0eXBlCi0gICAgICBBTlksICAgICAgLy8gUHJvdG8zIEFu
eSB0eXBlCi0gICAgfTsKLQotICAgIC8vIENvbnN0cnVjdG9yIGZvciB0aGUgcm9vdCBpdGVtLgot
ICAgIEl0ZW0oUHJvdG9TdHJlYW1PYmplY3RXcml0ZXIqIGVuY2xvc2luZywgSXRlbVR5cGUgaXRl
bV90eXBlLAotICAgICAgICAgYm9vbCBpc19wbGFjZWhvbGRlciwgYm9vbCBpc19saXN0KTsKLQot
ICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGZpZWxkIG9mIGEgbWVzc2FnZS4KLSAgICBJdGVtKEl0
ZW0qIHBhcmVudCwgSXRlbVR5cGUgaXRlbV90eXBlLCBib29sIGlzX3BsYWNlaG9sZGVyLCBib29s
IGlzX2xpc3QpOwotCi0gICAgdmlydHVhbCB+SXRlbSgpIHt9Ci0KLSAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgcmV0dXJuIHRydWUgaWYgdGhlIGVsZW1lbnQgdHlwZSBpcyBjb3JyZXNwb25kaW5nIHRv
IHRoZQotICAgIC8vIHR5cGUgaW4gZnVuY3Rpb24gbmFtZS4KLSAgICBib29sIElzTWFwKCkgeyBy
ZXR1cm4gaXRlbV90eXBlXyA9PSBNQVA7IH0KLSAgICBib29sIElzQW55KCkgeyByZXR1cm4gaXRl
bV90eXBlXyA9PSBBTlk7IH0KLQotICAgIEFueVdyaXRlciogYW55KCkgY29uc3QgeyByZXR1cm4g
YW55Xy5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBJdGVtKiBwYXJlbnQoKSBjb25zdCB7Ci0gICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SXRlbSo+KEJhc2VFbGVtZW50OjpwYXJlbnQoKSk7Ci0gICAg
fQotCi0gICAgLy8gSW5zZXJ0cyBtYXAga2V5IGludG8gaGFzaCBzZXQgaWYgYW5kIG9ubHkgaWYg
dGhlIGtleSBkaWQgTk9UIGFscmVhZHkKLSAgICAvLyBleGlzdCBpbiBoYXNoIHNldC4KLSAgICAv
LyBUaGUgaGFzaCBzZXQgKG1hcF9rZXlzXykgaXMgT05MWSB1c2VkIHRvIGtlZXAgdHJhY2sgb2Yg
bWFwIGtleXMuCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgaW5zZXJ0IHN1Y2Nlc3NmdWxseTsgcmV0
dXJucyBmYWxzZSBpZiB0aGUgbWFwIGtleSB3YXMKLSAgICAvLyBhbHJlYWR5IHByZXNlbnQuCi0g
ICAgYm9vbCBJbnNlcnRNYXBLZXlJZk5vdFByZXNlbnQoU3RyaW5nUGllY2UgbWFwX2tleSk7Ci0K
LSAgICBib29sIGlzX3BsYWNlaG9sZGVyKCkgY29uc3QgeyByZXR1cm4gaXNfcGxhY2Vob2xkZXJf
OyB9Ci0gICAgYm9vbCBpc19saXN0KCkgY29uc3QgeyByZXR1cm4gaXNfbGlzdF87IH0KLQotICAg
cHJpdmF0ZToKLSAgICAvLyBVc2VkIGZvciBhY2Nlc3MgdG8gdmFyaWFibGVzIG9mIHRoZSBlbmNs
b3NpbmcgaW5zdGFuY2Ugb2YKLSAgICAvLyBQcm90b1N0cmVhbU9iamVjdFdyaXRlci4KLSAgICBQ
cm90b1N0cmVhbU9iamVjdFdyaXRlciogb3dfOwotCi0gICAgLy8gQSB3cml0ZXIgZm9yIEFueSBv
YmplY3RzLCBoYW5kbGVzIGFsbCBBbnktcmVsYXRlZCBub25zZW5zZS4KLSAgICBnb29nbGU6OnBy
b3RvYnVmOjpzY29wZWRfcHRyPEFueVdyaXRlcj4gYW55XzsKLQotICAgIC8vIFRoZSB0eXBlIG9m
IHRoaXMgZWxlbWVudCwgc2VlIGVudW0gZm9yIHBlcm1pc3NpYmxlIHR5cGVzLgotICAgIEl0ZW1U
eXBlIGl0ZW1fdHlwZV87Ci0KLSAgICAvLyBTZXQgb2YgbWFwIGtleXMgYWxyZWFkeSBzZWVuIGZv
ciB0aGUgdHlwZV8uIFVzZWQgdG8gdmFsaWRhdGUgaW5jb21pbmcKLSAgICAvLyBtZXNzYWdlcyBz
byBubyBtYXAga2V5IGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UuCi0gICAgaGFzaF9zZXQ8c3RyaW5n
PiBtYXBfa2V5c187Ci0KLSAgICAvLyBDb252ZXlzIHdoZXRoZXIgdGhpcyBJdGVtIGlzIGEgcGxh
Y2Vob2xkZXIgb3Igbm90LiBQbGFjZWhvbGRlciBpdGVtcyBhcmUKLSAgICAvLyBwdXNoZWQgdG8g
c3RhY2sgdG8gYWNjb3VudCBmb3Igc3BlY2lhbCB0eXBlcy4KLSAgICBib29sIGlzX3BsYWNlaG9s
ZGVyXzsKLQotICAgIC8vIENvbnZleXMgd2hldGhlciB0aGlzIEl0ZW0gaXMgYSBsaXN0IG9yIG5v
dC4gVGhpcyBpcyB1c2VkIHRvIHNlbmQKLSAgICAvLyBTdGFydExpc3Qgb3IgRW5kTGlzdCBjYWxs
cyB0byB1bmRlcmx5aW5nIE9iamVjdFdyaXRlci4KLSAgICBib29sIGlzX2xpc3RfOwotCi0gICAg
R09PR0xFX0RJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhJdGVtKTsKLSAgfTsKLQotICBQ
cm90b1N0cmVhbU9iamVjdFdyaXRlcihjb25zdCBUeXBlSW5mbyogdHlwZWluZm8sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3M6OkJ5dGVTaW5rKiBvdXRwdXQsIEVycm9y
TGlzdGVuZXIqIGxpc3RlbmVyKTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGlz
IGEgbWFwLgotICBib29sIElzTWFwKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVs
ZCk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBpcyBhbiBhbnkuCi0gIGJvb2wg
SXNBbnkoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQmIGZpZWxkKTsKLQotICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGZpZWxkIGlzIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QuCi0gIGJvb2wg
SXNTdHJ1Y3QoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQmIGZpZWxkKTsKLQotICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGlzIGdvb2dsZS5wcm90b2J1Zi5WYWx1ZS4KLSAgYm9v
bCBJc1N0cnVjdFZhbHVlKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkJiBmaWVsZCk7Ci0K
LSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBpcyBnb29nbGUucHJvdG9idWYuTGlzdFZh
bHVlLgotICBib29sIElzU3RydWN0TGlzdFZhbHVlKGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkZp
ZWxkJiBmaWVsZCk7Ci0KLSAgLy8gUmVuZGVycyBnb29nbGUucHJvdG9idWYuVmFsdWUgaW4gc3Ry
dWN0LnByb3RvLiBJdCBwaWNrcyB0aGUgcmlnaHQgb25lb2YKLSAgLy8gdHlwZSBiYXNlZCBvbiB2
YWx1ZSdzIHR5cGUuCi0gIHN0YXRpYyB1dGlsOjpTdGF0dXMgUmVuZGVyU3RydWN0VmFsdWUoUHJv
dG9TdHJlYW1PYmplY3RXcml0ZXIqIG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRGF0YVBpZWNlJiB2YWx1ZSk7Ci0KLSAgLy8gUmVuZGVycyBnb29n
bGUucHJvdG9idWYuVGltZXN0YW1wIHZhbHVlLgotICBzdGF0aWMgdXRpbDo6U3RhdHVzIFJlbmRl
clRpbWVzdGFtcChQcm90b1N0cmVhbU9iamVjdFdyaXRlciogb3csCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGF0YVBpZWNlJiB2YWx1ZSk7Ci0KLSAgLy8g
UmVuZGVycyBnb29nbGUucHJvdG9idWYuRmllbGRNYXNrIHZhbHVlLgotICBzdGF0aWMgdXRpbDo6
U3RhdHVzIFJlbmRlckZpZWxkTWFzayhQcm90b1N0cmVhbU9iamVjdFdyaXRlciogb3csCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGF0YVBpZWNlJiB2YWx1
ZSk7Ci0KLSAgLy8gUmVuZGVycyBnb29nbGUucHJvdG9idWYuRHVyYXRpb24gdmFsdWUuCi0gIHN0
YXRpYyB1dGlsOjpTdGF0dXMgUmVuZGVyRHVyYXRpb24oUHJvdG9TdHJlYW1PYmplY3RXcml0ZXIq
IG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGF0YVBp
ZWNlJiB2YWx1ZSk7Ci0KLSAgLy8gUmVuZGVycyB3cmFwcGVyIG1lc3NhZ2UgdHlwZXMgZm9yIHBy
aW1pdGl2ZSB0eXBlcyBpbgotICAvLyBnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8uCi0g
IHN0YXRpYyB1dGlsOjpTdGF0dXMgUmVuZGVyV3JhcHBlclR5cGUoUHJvdG9TdHJlYW1PYmplY3RX
cml0ZXIqIG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRGF0YVBpZWNlJiB2YWx1ZSk7Ci0KLSAgc3RhdGljIHZvaWQgSW5pdFJlbmRlcmVyTWFwKCk7
Ci0gIHN0YXRpYyB2b2lkIERlbGV0ZVJlbmRlcmVyTWFwKCk7Ci0gIHN0YXRpYyBUeXBlUmVuZGVy
ZXIqIEZpbmRUeXBlUmVuZGVyZXIoY29uc3Qgc3RyaW5nJiB0eXBlX3VybCk7Ci0KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBtYXAga2V5IGZvciB0eXBlXyBpcyBub3QgZHVwbGljYXRlZCBrZXku
Ci0gIC8vIElmIG1hcCBrZXkgaXMgZHVwbGljYXRlZCBrZXksIHRoaXMgZnVuY3Rpb24gcmV0dXJu
cyBmYWxzZS4KLSAgLy8gTm90ZSB0aGF0IGNhbGxlciBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhl
IGN1cnJlbnQgcHJvdG8gZWxlbWVudCAoY3VycmVudF8pCi0gIC8vIGlzIG9mIGVsZW1lbnQgdHlw
ZSBNQVAgb3IgU1RSVUNUX01BUC4KLSAgLy8gSXQgYWxzbyBjYWxscyB0aGUgYXBwcm9wcmlhdGUg
ZXJyb3IgY2FsbGJhY2sgYW5kIHVubm9ybWFsemllZF9uYW1lIGlzIHVzZWQKLSAgLy8gZm9yIGVy
cm9yIHN0cmluZy4KLSAgYm9vbCBWYWxpZE1hcEtleShTdHJpbmdQaWVjZSB1bm5vcm1hbGl6ZWRf
bmFtZSk7Ci0KLSAgLy8gUHVzaGVzIGFuIGl0ZW0gb24gdG8gdGhlIHN0YWNrLiBBbHNvIGNhbGxz
IGVpdGhlciBTdGFydE9iamVjdCBvciBTdGFydExpc3QKLSAgLy8gb24gdGhlIHVuZGVybHlpbmcg
T2JqZWN0V3JpdGVyIGRlcGVuZGluZyBvbiB3aGV0aGVyIGlzX2xpc3QgaXMgZmFsc2Ugb3IKLSAg
Ly8gbm90LgotICAvLyBpc19wbGFjZWhvbGRlciBjb252ZXlzIHdoZXRoZXIgdGhlIGl0ZW0gaXMg
YSBwbGFjZWhvbGRlciBpdGVtIG9yIG5vdC4KLSAgLy8gUGxhY2Vob2xkZXIgaXRlbXMgYXJlIHB1
c2hlZCB3aGVuIGFkZGluZyBhdXhpbGxhcnkgdHlwZXMnIFN0YXJ0T2JqZWN0IG9yCi0gIC8vIFN0
YXJ0TGlzdCBjYWxscy4KLSAgdm9pZCBQdXNoKFN0cmluZ1BpZWNlIG5hbWUsIEl0ZW06Okl0ZW1U
eXBlIGl0ZW1fdHlwZSwgYm9vbCBpc19wbGFjZWhvbGRlciwKLSAgICAgICAgICAgIGJvb2wgaXNf
bGlzdCk7Ci0KLSAgLy8gUG9wcyBpdGVtcyBmcm9tIHRoZSBzdGFjay4gQWxsIHBsYWNlaG9sZGVy
IGl0ZW1zIGFyZSBwb3BwZWQgdW50aWwgYQotICAvLyBub24tcGxhY2Vob2xkZXIgaXRlbSBpcyBm
b3VuZC4KLSAgdm9pZCBQb3AoKTsKLQotICAvLyBQb3BzIG9uZSBlbGVtZW50IGZyb20gdGhlIHN0
YWNrLiBDYWxscyBFbmRPYmplY3QoKSBvciBFbmRMaXN0KCkgb24gdGhlCi0gIC8vIHVuZGVybHlp
bmcgT2JqZWN0V3JpdGVyIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgaXNfbGlzdF8uCi0gIHZv
aWQgUG9wT25lRWxlbWVudCgpOwotCi0gcHJpdmF0ZToKLSAgLy8gSGVscGVyIGZ1bmN0aW9ucyB0
byBjcmVhdGUgdGhlIG1hcCBhbmQgZmluZCBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yCi0gIC8v
IHJlbmRlcmluZyB3ZWxsIGtub3duIHR5cGVzLCBrZXllZCBieSB0eXBlIFVSTC4KLSAgc3RhdGlj
IGhhc2hfbWFwPHN0cmluZywgVHlwZVJlbmRlcmVyPiogcmVuZGVyZXJzXzsKLQotICAvLyBWYXJp
YWJsZXMgZm9yIGRlc2NyaWJpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgaW5wdXQgdHJlZToKLSAg
Ly8gbWFzdGVyX3R5cGVfOiBkZXNjcmlwdG9yIGZvciB0aGUgd2hvbGUgcHJvdG9idWYgbWVzc2Fn
ZS4KLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSYgbWFzdGVyX3R5cGVfOwotCi0gIC8v
IFRoZSBjdXJyZW50IGVsZW1lbnQsIHZhcmlhYmxlIGZvciBpbnRlcm5hbCBzdGF0ZSBwcm9jZXNz
aW5nLgotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPEl0ZW0+IGN1cnJlbnRfOwotCi0g
IC8vIFJlZmVyZW5jZSB0byB0aGUgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBjbGFzcydzIGJl
aGF2aW9yLgotICBjb25zdCBQcm90b1N0cmVhbU9iamVjdFdyaXRlcjo6T3B0aW9ucyBvcHRpb25z
XzsKLQotICBHT09HTEVfRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFByb3RvU3RyZWFt
T2JqZWN0V3JpdGVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5h
bWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNl
IGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfUFJPVE9T
VFJFQU1fT0JKRUNUV1JJVEVSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0d3JpdGVyX3Rlc3QuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3R3cml0ZXJfdGVzdC5jYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEwZGNkZTFjNGQxZGUyOWYxOWZiMTg5NDhh
ZGMzZDNjMWMzNWZhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3R3
cml0ZXJfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDIyNzcgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC9wcm90b3N0cmVhbV9vYmplY3R3cml0ZXIuaD4KLQotI2luY2x1ZGUgPHN0ZGRl
Zi5oPiAgLy8gRm9yIHNpemVfdAotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21h
c2sucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnBiLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbF9saXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVz
Y3JpcHRvci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9keW5hbWljX21lc3NhZ2UuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi91dGlsL2ludGVybmFsL21vY2tfZXJyb3JfbGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9ib29rcy5wYi5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL2ZpZWxkX21hc2sucGIu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90eXBlX2luZm9fdGVz
dF9oZWxwZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9jb25z
dGFudHMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9tZXNzYWdlX2RpZmZlcmVu
Y2VyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2J5dGVzdHJlYW0uaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL2FueXMucGIuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9tYXBzLnBiLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvb25lb2ZzLnBiLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvc3RydWN0LnBi
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvdGlt
ZXN0YW1wX2R1cmF0aW9uLnBiLmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotCi1uYW1l
c3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1u
YW1lc3BhY2UgY29udmVydGVyIHsKLQotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6
QXV0aG9yOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6Qm9vazsKLXVzaW5nIGdv
b2dsZTo6cHJvdG9idWY6OnRlc3Rpbmc6OkJvb2tfRGF0YTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9i
dWY6OnRlc3Rpbmc6OlByaW1pdGl2ZTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OnRlc3Rpbmc6
OlB1Ymxpc2hlcjsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3I7Ci11c2luZyBn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yUG9vbDsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6
OkR5bmFtaWNNZXNzYWdlRmFjdG9yeTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OkZpbGVEZXNj
cmlwdG9yUHJvdG87Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlOwotdXNpbmcgZ29v
Z2xlOjpwcm90b2J1Zjo6aW86OkFycmF5SW5wdXRTdHJlYW07Ci11c2luZyBzdHJpbmdzOjpHcm93
aW5nQXJyYXlCeXRlU2luazsKLXVzaW5nIDo6dGVzdGluZzo6XzsKLXVzaW5nIDo6dGVzdGluZzo6
QXJnczsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OnRlc3Rpbmc6OmFueXM6OkFueU07Ci11c2lu
ZyBnb29nbGU6OnByb3RvYnVmOjp0ZXN0aW5nOjphbnlzOjpBbnlPdXQ7Ci11c2luZyBnb29nbGU6
OnByb3RvYnVmOjp0ZXN0aW5nOjpvbmVvZnM6Ok9uZU9mc1JlcXVlc3Q7Ci11c2luZyBnb29nbGU6
OnByb3RvYnVmOjp0ZXN0aW5nOjpGaWVsZE1hc2tUZXN0OwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1
Zjo6dGVzdGluZzo6bWFwczo6TWFwSW47Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjp0ZXN0aW5n
OjpzdHJ1Y3RzOjpTdHJ1Y3RUeXBlOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6dGVzdGluZzo6
dGltZXN0YW1wZHVyYXRpb246OlRpbWVzdGFtcER1cmF0aW9uOwotCi0KLW5hbWVzcGFjZSB7Ci1z
dHJpbmcgR2V0VHlwZVVybChjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gIHJldHVy
biBzdHJpbmcoa1R5cGVTZXJ2aWNlQmFzZVVybCkgKyAiLyIgKyBkZXNjcmlwdG9yLT5mdWxsX25h
bWUoKTsKLX0KLX0gIC8vIG5hbWVzcGFjZQotCi0jaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAot
ICB1c2luZyBzdGQ6OmdldDsKLSNlbHNlCi0gIHVzaW5nIHN0ZDo6dHIxOjpnZXQ7Ci0jZW5kaWYK
LQotY2xhc3MgQmFzZVByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdAotICAgIDogcHVibGljIDo6
dGVzdGluZzo6VGVzdFdpdGhQYXJhbTx0ZXN0aW5nOjpUeXBlSW5mb1NvdXJjZT4gewotIHByb3Rl
Y3RlZDoKLSAgQmFzZVByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCgpCi0gICAgICA6IGhlbHBl
cl8oR2V0UGFyYW0oKSksCi0gICAgICAgIGxpc3RlbmVyXygpLAotICAgICAgICBvdXRwdXRfKG5l
dyBHcm93aW5nQXJyYXlCeXRlU2luaygxMDAwKSksCi0gICAgICAgIG93XygpIHt9Ci0KLSAgZXhw
bGljaXQgQmFzZVByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdChjb25zdCBEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yKQotICAgICAgOiBoZWxwZXJfKEdldFBhcmFtKCkpLAotICAgICAgICBsaXN0ZW5l
cl8oKSwKLSAgICAgICAgb3V0cHV0XyhuZXcgR3Jvd2luZ0FycmF5Qnl0ZVNpbmsoMTAwMCkpLAot
ICAgICAgICBvd18oKSB7Ci0gICAgdmVjdG9yPGNvbnN0IERlc2NyaXB0b3IqPiBkZXNjcmlwdG9y
czsKLSAgICBkZXNjcmlwdG9ycy5wdXNoX2JhY2soZGVzY3JpcHRvcik7Ci0gICAgUmVzZXRUeXBl
SW5mbyhkZXNjcmlwdG9ycyk7Ci0gIH0KLQotICBleHBsaWNpdCBCYXNlUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXJUZXN0KAotICAgICAgdmVjdG9yPGNvbnN0IERlc2NyaXB0b3IqPiBkZXNjcmlwdG9y
cykKLSAgICAgIDogaGVscGVyXyhHZXRQYXJhbSgpKSwKLSAgICAgICAgbGlzdGVuZXJfKCksCi0g
ICAgICAgIG91dHB1dF8obmV3IEdyb3dpbmdBcnJheUJ5dGVTaW5rKDEwMDApKSwKLSAgICAgICAg
b3dfKCkgewotICAgIFJlc2V0VHlwZUluZm8oZGVzY3JpcHRvcnMpOwotICB9Ci0KLSAgdm9pZCBS
ZXNldFR5cGVJbmZvKHZlY3Rvcjxjb25zdCBEZXNjcmlwdG9yKj4gZGVzY3JpcHRvcnMpIHsKLSAg
ICBHT09HTEVfQ0hFQ0soIWRlc2NyaXB0b3JzLmVtcHR5KCkpIDw8ICJNdXN0IGhhdmUgYXQgbGVh
c3Qgb25lIGRlc2NyaXB0b3IhIjsKLSAgICBoZWxwZXJfLlJlc2V0VHlwZUluZm8oZGVzY3JpcHRv
cnMpOwotICAgIG93Xy5yZXNldChoZWxwZXJfLk5ld1Byb3RvV3JpdGVyKEdldFR5cGVVcmwoZGVz
Y3JpcHRvcnNbMF0pLCBvdXRwdXRfLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZsaXN0ZW5lcl8sIG9wdGlvbnNfKSk7Ci0gIH0KLQotICB2b2lkIFJlc2V0VHlw
ZUluZm8oY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcikgewotICAgIHZlY3Rvcjxjb25zdCBE
ZXNjcmlwdG9yKj4gZGVzY3JpcHRvcnM7Ci0gICAgZGVzY3JpcHRvcnMucHVzaF9iYWNrKGRlc2Ny
aXB0b3IpOwotICAgIFJlc2V0VHlwZUluZm8oZGVzY3JpcHRvcnMpOwotICB9Ci0KLSAgdmlydHVh
bCB+QmFzZVByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCgpIHt9Ci0KLSAgdm9pZCBDaGVja091
dHB1dChjb25zdCBNZXNzYWdlJiBleHBlY3RlZCwgaW50IGV4cGVjdGVkX2xlbmd0aCkgewotICAg
IHNpemVfdCBuYnl0ZXM7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX2FycmF5PGNoYXI+
IGJ1ZmZlcihvdXRwdXRfLT5HZXRCdWZmZXIoJm5ieXRlcykpOwotICAgIGlmIChleHBlY3RlZF9s
ZW5ndGggPj0gMCkgewotICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkX2xlbmd0aCwgbmJ5dGVzKTsK
LSAgICB9Ci0gICAgc3RyaW5nIHN0cihidWZmZXIuZ2V0KCksIG5ieXRlcyk7Ci0KLSAgICBzdGQ6
OnN0cmluZ2J1ZiBzdHJfYnVmKHN0ciwgc3RkOjppb3NfYmFzZTo6aW4pOwotICAgIHN0ZDo6aXN0
cmVhbSBpc3RyZWFtKCZzdHJfYnVmKTsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRy
PE1lc3NhZ2U+IG1lc3NhZ2UoZXhwZWN0ZWQuTmV3KCkpOwotICAgIG1lc3NhZ2UtPlBhcnNlUGFy
dGlhbEZyb21Jc3RyZWFtKCZpc3RyZWFtKTsKLQotICAgIGlmICghTWVzc2FnZURpZmZlcmVuY2Vy
OjpFcXVpdmFsZW50KGV4cGVjdGVkLCAqbWVzc2FnZSkpIHsKLSAgICAgIEVYUEVDVF9FUShleHBl
Y3RlZC5EZWJ1Z1N0cmluZygpLCBtZXNzYWdlLT5EZWJ1Z1N0cmluZygpKTsKLSAgICB9Ci0gIH0K
LQotICB2b2lkIENoZWNrT3V0cHV0KGNvbnN0IE1lc3NhZ2UmIGV4cGVjdGVkKSB7IENoZWNrT3V0
cHV0KGV4cGVjdGVkLCAtMSk7IH0KLQotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKiBH
ZXRUeXBlKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgICByZXR1cm4gaGVscGVy
Xy5HZXRUeXBlSW5mbygpLT5HZXRUeXBlQnlUeXBlVXJsKEdldFR5cGVVcmwoZGVzY3JpcHRvcikp
OwotICB9Ci0KLSAgdGVzdGluZzo6VHlwZUluZm9UZXN0SGVscGVyIGhlbHBlcl87Ci0gIE1vY2tF
cnJvckxpc3RlbmVyIGxpc3RlbmVyXzsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxH
cm93aW5nQXJyYXlCeXRlU2luaz4gb3V0cHV0XzsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVk
X3B0cjxQcm90b1N0cmVhbU9iamVjdFdyaXRlcj4gb3dfOwotICBQcm90b1N0cmVhbU9iamVjdFdy
aXRlcjo6T3B0aW9ucyBvcHRpb25zXzsKLX07Ci0KLU1BVENIRVJfUChIYXNPYmplY3RMb2NhdGlv
biwgZXhwZWN0ZWQsCi0gICAgICAgICAgIlZlcmlmaWVzIHRoZSBleHBlY3RlZCBvYmplY3QgbG9j
YXRpb24iKSB7Ci0gIHN0cmluZyBhY3R1YWwgPSBnZXQ8MD4oYXJnKS5Ub1N0cmluZygpOwotICBp
ZiAoYWN0dWFsLmNvbXBhcmUoZXhwZWN0ZWQpID09IDApIHJldHVybiB0cnVlOwotICAqcmVzdWx0
X2xpc3RlbmVyIDw8ICJhY3R1YWwgbG9jYXRpb24gaXM6ICIgPDwgYWN0dWFsOwotICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWNsYXNzIFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCA6IHB1YmxpYyBC
YXNlUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFByb3RvU3Ry
ZWFtT2JqZWN0V3JpdGVyVGVzdCgpCi0gICAgICA6IEJhc2VQcm90b1N0cmVhbU9iamVjdFdyaXRl
clRlc3QoQm9vazo6ZGVzY3JpcHRvcigpKSB7fQotCi0gIHZpcnR1YWwgflByb3RvU3RyZWFtT2Jq
ZWN0V3JpdGVyVGVzdCgpIHt9Ci19OwotCi1JTlNUQU5USUFURV9URVNUX0NBU0VfUChEaWZmZXJl
bnRUeXBlSW5mb1NvdXJjZVRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBQcm90b1N0cmVh
bU9iamVjdFdyaXRlclRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlZh
bHVlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0aW5nOjpVU0VfVFlQRV9SRVNP
TFZFUikpOwotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0LCBFbXB0eU9iamVj
dCkgewotICBCb29rIGVtcHR5OwotICBvd18tPlN0YXJ0T2JqZWN0KCIiKS0+RW5kT2JqZWN0KCk7
Ci0gIENoZWNrT3V0cHV0KGVtcHR5LCAwKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0
V3JpdGVyVGVzdCwgU2ltcGxlT2JqZWN0KSB7Ci0gIHN0cmluZyBjb250ZW50KCJNeSBjb250ZW50
Iik7Ci0KLSAgQm9vayBib29rOwotICBib29rLnNldF90aXRsZSgiTXkgVGl0bGUiKTsKLSAgYm9v
ay5zZXRfbGVuZ3RoKDIyMik7Ci0gIGJvb2suc2V0X2NvbnRlbnQoY29udGVudCk7Ci0KLSAgb3df
LT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ0aXRsZSIsICJNeSBUaXRs
ZSIpCi0gICAgICAtPlJlbmRlckludDMyKCJsZW5ndGgiLCAyMjIpCi0gICAgICAtPlJlbmRlckJ5
dGVzKCJjb250ZW50IiwgY29udGVudCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0
cHV0KGJvb2spOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0LCBTaW1w
bGVNZXNzYWdlKSB7Ci0gIEJvb2sgYm9vazsKLSAgYm9vay5zZXRfdGl0bGUoIlNvbWUgQm9vayIp
OwotICBib29rLnNldF9sZW5ndGgoMTAyKTsKLSAgUHVibGlzaGVyKiBwdWJsaXNoZXIgPSBib29r
Lm11dGFibGVfcHVibGlzaGVyKCk7Ci0gIHB1Ymxpc2hlci0+c2V0X25hbWUoIk15IFB1Ymxpc2hl
ciIpOwotICBBdXRob3IqIHJvYmVydCA9IGJvb2subXV0YWJsZV9hdXRob3IoKTsKLSAgcm9iZXJ0
LT5zZXRfYWxpdmUodHJ1ZSk7Ci0gIHJvYmVydC0+c2V0X25hbWUoInJvYmVydCIpOwotICByb2Jl
cnQtPmFkZF9wc2V1ZG9ueW0oImJvYiIpOwotICByb2JlcnQtPmFkZF9wc2V1ZG9ueW0oImJvYmJ5
Iik7Ci0gIHJvYmVydC0+YWRkX2ZyaWVuZF8oKS0+c2V0X25hbWUoImpvaG4iKTsKLQotICBvd18t
PlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInRpdGxlIiwgIlNvbWUgQm9v
ayIpCi0gICAgICAtPlJlbmRlckludDMyKCJsZW5ndGgiLCAxMDIpCi0gICAgICAtPlN0YXJ0T2Jq
ZWN0KCJwdWJsaXNoZXIiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIm5hbWUiLCAiTXkgUHVibGlz
aGVyIikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+U3RhcnRPYmplY3QoImF1dGhvciIp
Ci0gICAgICAtPlJlbmRlckJvb2woImFsaXZlIiwgdHJ1ZSkKLSAgICAgIC0+UmVuZGVyU3RyaW5n
KCJuYW1lIiwgInJvYmVydCIpCi0gICAgICAtPlN0YXJ0TGlzdCgicHNldWRvbnltIikKLSAgICAg
IC0+UmVuZGVyU3RyaW5nKCIiLCAiYm9iIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIiLCAiYm9i
YnkiKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+U3RhcnRMaXN0KCJmcmllbmQiKQotICAg
ICAgLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJuYW1lIiwgImpvaG4i
KQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+RW5kT2Jq
ZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KGJvb2spOwotfQotCi1U
RVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0LCBDdXN0b21Kc29uTmFtZSkgewotICBC
b29rIGJvb2s7Ci0gIEF1dGhvciogcm9iZXJ0ID0gYm9vay5tdXRhYmxlX2F1dGhvcigpOwotICBy
b2JlcnQtPnNldF9pZCgxMjM0NSk7Ci0gIHJvYmVydC0+c2V0X25hbWUoInJvYmVydCIpOwotCi0g
IG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJhdXRob3IiKQotICAg
ICAgLT5SZW5kZXJVaW50NjQoIkBpZCIsIDEyMzQ1KQotICAgICAgLT5SZW5kZXJTdHJpbmcoIm5h
bWUiLCAicm9iZXJ0IikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7
Ci0gIENoZWNrT3V0cHV0KGJvb2spOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0
ZXJUZXN0LCBQcmltaXRpdmVGcm9tU3RyaW5nQ29udmVyc2lvbikgewotICBQcmltaXRpdmUgZnVs
bDsKLSAgZnVsbC5zZXRfZml4MzIoMTAxKTsKLSAgZnVsbC5zZXRfdTMyKDEwMik7Ci0gIGZ1bGwu
c2V0X2kzMigtMTAzKTsKLSAgZnVsbC5zZXRfc2YzMigtMTA0KTsKLSAgZnVsbC5zZXRfczMyKC0x
MDUpOwotICBmdWxsLnNldF9maXg2NCg0MDAwMDAwMDAwMUwpOwotICBmdWxsLnNldF91NjQoNDAw
MDAwMDAwMDJMKTsKLSAgZnVsbC5zZXRfaTY0KC00MDAwMDAwMDAwM0wpOwotICBmdWxsLnNldF9z
ZjY0KC00MDAwMDAwMDAwNEwpOwotICBmdWxsLnNldF9zNjQoLTQwMDAwMDAwMDA1TCk7Ci0gIGZ1
bGwuc2V0X3N0cigic3RyaW5nMSIpOwotICBmdWxsLnNldF9ieXRlcygiU29tZSBCeXRlcyIpOwot
ICBmdWxsLnNldF9mbG9hdF8oMy4xNGYpOwotICBmdWxsLnNldF9kb3VibGVfKC00LjA1TCk7Ci0g
IGZ1bGwuc2V0X2Jvb2xfKHRydWUpOwotICBmdWxsLmFkZF9yZXBfZml4MzIoMjAxKTsKLSAgZnVs
bC5hZGRfcmVwX3UzMigyMDIpOwotICBmdWxsLmFkZF9yZXBfaTMyKC0yMDMpOwotICBmdWxsLmFk
ZF9yZXBfc2YzMigtMjA0KTsKLSAgZnVsbC5hZGRfcmVwX3MzMigtMjA1KTsKLSAgZnVsbC5hZGRf
cmVwX2ZpeDY0KDgwMDAwMDAwMDAxTCk7Ci0gIGZ1bGwuYWRkX3JlcF91NjQoODAwMDAwMDAwMDJM
KTsKLSAgZnVsbC5hZGRfcmVwX2k2NCgtODAwMDAwMDAwMDNMKTsKLSAgZnVsbC5hZGRfcmVwX3Nm
NjQoLTgwMDAwMDAwMDA0TCk7Ci0gIGZ1bGwuYWRkX3JlcF9zNjQoLTgwMDAwMDAwMDA1TCk7Ci0g
IGZ1bGwuYWRkX3JlcF9zdHIoInN0cmluZzIiKTsKLSAgZnVsbC5hZGRfcmVwX2J5dGVzKCJNb3Jl
IEJ5dGVzIik7Ci0gIGZ1bGwuYWRkX3JlcF9mbG9hdCg2LjE0Zik7Ci0gIGZ1bGwuYWRkX3JlcF9k
b3VibGUoLTguMDVMKTsKLSAgZnVsbC5hZGRfcmVwX2Jvb2woZmFsc2UpOwotCi0gIFJlc2V0VHlw
ZUluZm8oUHJpbWl0aXZlOjpkZXNjcmlwdG9yKCkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIp
Ci0gICAgICAtPlJlbmRlclN0cmluZygiZml4MzIiLCAiMTAxIikKLSAgICAgIC0+UmVuZGVyU3Ry
aW5nKCJ1MzIiLCAiMTAyIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJpMzIiLCAiLTEwMyIpCi0g
ICAgICAtPlJlbmRlclN0cmluZygic2YzMiIsICItMTA0IikKLSAgICAgIC0+UmVuZGVyU3RyaW5n
KCJzMzIiLCAiLTEwNSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiZml4NjQiLCAiNDAwMDAwMDAw
MDEiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInU2NCIsICI0MDAwMDAwMDAwMiIpCi0gICAgICAt
PlJlbmRlclN0cmluZygiaTY0IiwgIi00MDAwMDAwMDAwMyIpCi0gICAgICAtPlJlbmRlclN0cmlu
Zygic2Y2NCIsICItNDAwMDAwMDAwMDQiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInM2NCIsICIt
NDAwMDAwMDAwMDUiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInN0ciIsICJzdHJpbmcxIikKLSAg
ICAgIC0+UmVuZGVyU3RyaW5nKCJieXRlcyIsICJVMjl0WlNCQ2VYUmxjdz09IikgIC8vICJTb21l
IEJ5dGVzIgotICAgICAgLT5SZW5kZXJTdHJpbmcoImZsb2F0IiwgIjMuMTQiKQotICAgICAgLT5S
ZW5kZXJTdHJpbmcoImRvdWJsZSIsICItNC4wNSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiYm9v
bCIsICJ0cnVlIikKLSAgICAgIC0+U3RhcnRMaXN0KCJyZXBfZml4MzIiKQotICAgICAgLT5SZW5k
ZXJTdHJpbmcoIiIsICIyMDEiKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+U3RhcnRMaXN0
KCJyZXBfdTMyIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIiLCAiMjAyIikKLSAgICAgIC0+RW5k
TGlzdCgpCi0gICAgICAtPlN0YXJ0TGlzdCgicmVwX2kzMiIpCi0gICAgICAtPlJlbmRlclN0cmlu
ZygiIiwgIi0yMDMiKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+U3RhcnRMaXN0KCJyZXBf
c2YzMiIpCi0gICAgICAtPlJlbmRlclN0cmluZygiIiwgIi0yMDQiKQotICAgICAgLT5FbmRMaXN0
KCkKLSAgICAgIC0+U3RhcnRMaXN0KCJyZXBfczMyIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIi
LCAiLTIwNSIpCi0gICAgICAtPkVuZExpc3QoKQotICAgICAgLT5TdGFydExpc3QoInJlcF9maXg2
NCIpCi0gICAgICAtPlJlbmRlclN0cmluZygiIiwgIjgwMDAwMDAwMDAxIikKLSAgICAgIC0+RW5k
TGlzdCgpCi0gICAgICAtPlN0YXJ0TGlzdCgicmVwX3U2NCIpCi0gICAgICAtPlJlbmRlclN0cmlu
ZygiIiwgIjgwMDAwMDAwMDAyIikKLSAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAtPlN0YXJ0TGlz
dCgicmVwX2k2NCIpCi0gICAgICAtPlJlbmRlclN0cmluZygiIiwgIi04MDAwMDAwMDAwMyIpCi0g
ICAgICAtPkVuZExpc3QoKQotICAgICAgLT5TdGFydExpc3QoInJlcF9zZjY0IikKLSAgICAgIC0+
UmVuZGVyU3RyaW5nKCIiLCAiLTgwMDAwMDAwMDA0IikKLSAgICAgIC0+RW5kTGlzdCgpCi0gICAg
ICAtPlN0YXJ0TGlzdCgicmVwX3M2NCIpCi0gICAgICAtPlJlbmRlclN0cmluZygiIiwgIi04MDAw
MDAwMDAwNSIpCi0gICAgICAtPkVuZExpc3QoKQotICAgICAgLT5TdGFydExpc3QoInJlcF9zdHIi
KQotICAgICAgLT5SZW5kZXJTdHJpbmcoIiIsICJzdHJpbmcyIikKLSAgICAgIC0+RW5kTGlzdCgp
Ci0gICAgICAtPlN0YXJ0TGlzdCgicmVwX2J5dGVzIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIi
LCAiVFc5eVpTQkNlWFJsY3c9PSIpICAvLyAiTW9yZSBCeXRlcyIKLSAgICAgIC0+RW5kTGlzdCgp
Ci0gICAgICAtPlN0YXJ0TGlzdCgicmVwX2Zsb2F0IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIi
LCAiNi4xNCIpCi0gICAgICAtPkVuZExpc3QoKQotICAgICAgLT5TdGFydExpc3QoInJlcF9kb3Vi
bGUiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIiIsICItOC4wNSIpCi0gICAgICAtPkVuZExpc3Qo
KQotICAgICAgLT5TdGFydExpc3QoInJlcF9ib29sIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIi
LCAiZmFsc2UiKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENo
ZWNrT3V0cHV0KGZ1bGwpOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0
LCBJbmZpbml0eUlucHV0VGVzdCkgewotICBQcmltaXRpdmUgZnVsbDsKLSAgZnVsbC5zZXRfZG91
YmxlXyhzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOwotICBmdWxsLnNl
dF9mbG9hdF8oc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpOwotICBmdWxs
LnNldF9zdHIoIi1JbmZpbml0eSIpOwotCi0gIFJlc2V0VHlwZUluZm8oUHJpbWl0aXZlOjpkZXNj
cmlwdG9yKCkpOwotCi0gIEVYUEVDVF9DQUxMKGxpc3RlbmVyXywgSW52YWxpZFZhbHVlKF8sIFN0
cmluZ1BpZWNlKCJUWVBFX0lOVDMyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZ1BpZWNlKCJcIkluZmluaXR5XCIiKSkpCi0gICAgICAuV2l0aChBcmdzPDA+
KEhhc09iamVjdExvY2F0aW9uKCJpMzIiKSkpOwotICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8sIElu
dmFsaWRWYWx1ZShfLCBTdHJpbmdQaWVjZSgiVFlQRV9VSU5UMzIiKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIlwiSW5maW5pdHlcIiIpKSkKLSAg
ICAgIC5XaXRoKEFyZ3M8MD4oSGFzT2JqZWN0TG9jYXRpb24oInUzMiIpKSk7Ci0gIEVYUEVDVF9D
QUxMKGxpc3RlbmVyXywgSW52YWxpZFZhbHVlKF8sIFN0cmluZ1BpZWNlKCJUWVBFX1NGSVhFRDY0
IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJc
Ii1JbmZpbml0eVwiIikpKQotICAgICAgLldpdGgoQXJnczwwPihIYXNPYmplY3RMb2NhdGlvbigi
c2Y2NCIpKSk7Ci0gIEVYUEVDVF9DQUxMKGxpc3RlbmVyXywgSW52YWxpZFZhbHVlKF8sIFN0cmlu
Z1BpZWNlKCJUWVBFX0JPT0wiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nUGllY2UoIlwiSW5maW5pdHlcIiIpKSkKLSAgICAgIC5XaXRoKEFyZ3M8MD4oSGFz
T2JqZWN0TG9jYXRpb24oImJvb2wiKSkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAg
ICAtPlJlbmRlclN0cmluZygiZG91YmxlIiwgIkluZmluaXR5IikKLSAgICAgIC0+UmVuZGVyU3Ry
aW5nKCJmbG9hdCIsICJJbmZpbml0eSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiaTMyIiwgIklu
ZmluaXR5IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ1MzIiLCAiSW5maW5pdHkiKQotICAgICAg
LT5SZW5kZXJTdHJpbmcoInNmNjQiLCAiLUluZmluaXR5IikKLSAgICAgIC0+UmVuZGVyU3RyaW5n
KCJzdHIiLCAiLUluZmluaXR5IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJib29sIiwgIkluZmlu
aXR5IikKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KGZ1bGwpOwotfQotCi1U
RVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0LCBOYU5JbnB1dFRlc3QpIHsKLSAgUHJp
bWl0aXZlIGZ1bGw7Ci0gIGZ1bGwuc2V0X2RvdWJsZV8oc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjpxdWlldF9OYU4oKSk7Ci0gIGZ1bGwuc2V0X2Zsb2F0XyhzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6cXVpZXRfTmFOKCkpOwotICBmdWxsLnNldF9zdHIoIk5hTiIpOwotCi0gIFJlc2V0
VHlwZUluZm8oUHJpbWl0aXZlOjpkZXNjcmlwdG9yKCkpOwotCi0gIEVYUEVDVF9DQUxMKGxpc3Rl
bmVyXywgSW52YWxpZFZhbHVlKF8sIFN0cmluZ1BpZWNlKCJUWVBFX0lOVDMyIiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJcIk5hTlwiIikpKQot
ICAgICAgLldpdGgoQXJnczwwPihIYXNPYmplY3RMb2NhdGlvbigiaTMyIikpKTsKLSAgRVhQRUNU
X0NBTEwobGlzdGVuZXJfLCBJbnZhbGlkVmFsdWUoXywgU3RyaW5nUGllY2UoIlRZUEVfVUlOVDMy
IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJc
Ik5hTlwiIikpKQotICAgICAgLldpdGgoQXJnczwwPihIYXNPYmplY3RMb2NhdGlvbigidTMyIikp
KTsKLSAgRVhQRUNUX0NBTEwobGlzdGVuZXJfLCBJbnZhbGlkVmFsdWUoXywgU3RyaW5nUGllY2Uo
IlRZUEVfU0ZJWEVENjQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nUGllY2UoIlwiTmFOXCIiKSkpCi0gICAgICAuV2l0aChBcmdzPDA+KEhhc09iamVjdExv
Y2F0aW9uKCJzZjY0IikpKTsKLSAgRVhQRUNUX0NBTEwobGlzdGVuZXJfLAotICAgICAgICAgICAg
ICBJbnZhbGlkVmFsdWUoXywgU3RyaW5nUGllY2UoIlRZUEVfQk9PTCIpLCBTdHJpbmdQaWVjZSgi
XCJOYU5cIiIpKSkKLSAgICAgIC5XaXRoKEFyZ3M8MD4oSGFzT2JqZWN0TG9jYXRpb24oImJvb2wi
KSkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlclN0cmluZygiZG91
YmxlIiwgIk5hTiIpCi0gICAgICAtPlJlbmRlclN0cmluZygiZmxvYXQiLCAiTmFOIikKLSAgICAg
IC0+UmVuZGVyU3RyaW5nKCJpMzIiLCAiTmFOIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ1MzIi
LCAiTmFOIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJzZjY0IiwgIk5hTiIpCi0gICAgICAtPlJl
bmRlclN0cmluZygic3RyIiwgIk5hTiIpCi0gICAgICAtPlJlbmRlclN0cmluZygiYm9vbCIsICJO
YU4iKQotICAgICAgLT5FbmRPYmplY3QoKTsKLQotICBDaGVja091dHB1dChmdWxsKTsKLX0KLQot
VEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCwgSW1wbGljaXRQcmltaXRpdmVMaXN0
KSB7Ci0gIEJvb2sgZXhwZWN0ZWQ7Ci0gIEF1dGhvciogYXV0aG9yID0gZXhwZWN0ZWQubXV0YWJs
ZV9hdXRob3IoKTsKLSAgYXV0aG9yLT5zZXRfbmFtZSgiVGhlIEF1dGhvciIpOwotICBhdXRob3It
PmFkZF9wc2V1ZG9ueW0oImZpcnN0Iik7Ci0gIGF1dGhvci0+YWRkX3BzZXVkb255bSgic2Vjb25k
Iik7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoImF1dGhv
ciIpCi0gICAgICAtPlJlbmRlclN0cmluZygibmFtZSIsICJUaGUgQXV0aG9yIikKLSAgICAgIC0+
UmVuZGVyU3RyaW5nKCJwc2V1ZG9ueW0iLCAiZmlyc3QiKQotICAgICAgLT5SZW5kZXJTdHJpbmco
InBzZXVkb255bSIsICJzZWNvbmQiKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRP
YmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZXhwZWN0ZWQpOwotfQotCi1URVNUX1AoUHJvdG9TdHJl
YW1PYmplY3RXcml0ZXJUZXN0LAotICAgICAgIExhc3RXcml0ZVdpbnNPbk5vblJlcGVhdGVkUHJp
bWl0aXZlRmllbGRXaXRoRHVwbGljYXRlcykgewotICBCb29rIGV4cGVjdGVkOwotICBBdXRob3Iq
IGF1dGhvciA9IGV4cGVjdGVkLm11dGFibGVfYXV0aG9yKCk7Ci0gIGF1dGhvci0+c2V0X25hbWUo
InNlY29uZCIpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0T2JqZWN0
KCJhdXRob3IiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIm5hbWUiLCAiZmlyc3QiKQotICAgICAg
LT5SZW5kZXJTdHJpbmcoIm5hbWUiLCAic2Vjb25kIikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAg
ICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KGV4cGVjdGVkKTsKLX0KLQotVEVTVF9Q
KFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCwgRXhwbGljaXRQcmltaXRpdmVMaXN0KSB7Ci0g
IEJvb2sgZXhwZWN0ZWQ7Ci0gIEF1dGhvciogYXV0aG9yID0gZXhwZWN0ZWQubXV0YWJsZV9hdXRo
b3IoKTsKLSAgYXV0aG9yLT5zZXRfbmFtZSgiVGhlIEF1dGhvciIpOwotICBhdXRob3ItPmFkZF9w
c2V1ZG9ueW0oImZpcnN0Iik7Ci0gIGF1dGhvci0+YWRkX3BzZXVkb255bSgic2Vjb25kIik7Ci0K
LSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoImF1dGhvciIpCi0g
ICAgICAtPlJlbmRlclN0cmluZygibmFtZSIsICJUaGUgQXV0aG9yIikKLSAgICAgIC0+U3RhcnRM
aXN0KCJwc2V1ZG9ueW0iKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIiIsICJmaXJzdCIpCi0gICAg
ICAtPlJlbmRlclN0cmluZygiIiwgInNlY29uZCIpCi0gICAgICAtPkVuZExpc3QoKQotICAgICAg
LT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZXhwZWN0
ZWQpOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0LCBOb25SZXBlYXRl
ZEV4cGxpY2l0UHJpbWl0aXZlTGlzdCkgewotICBCb29rIGV4cGVjdGVkOwotICBleHBlY3RlZC5z
ZXRfYWxsb2NhdGVkX2F1dGhvcihuZXcgQXV0aG9yKCkpOwotCi0gIEVYUEVDVF9DQUxMKAotICAg
ICAgbGlzdGVuZXJfLAotICAgICAgSW52YWxpZE5hbWUoCi0gICAgICAgICAgXywgU3RyaW5nUGll
Y2UoIm5hbWUiKSwKLSAgICAgICAgICBTdHJpbmdQaWVjZSgiUHJvdG8gZmllbGQgaXMgbm90IHJl
cGVhdGluZywgY2Fubm90IHN0YXJ0IGxpc3QuIikpKQotICAgICAgLldpdGgoQXJnczwwPihIYXNP
YmplY3RMb2NhdGlvbigiYXV0aG9yIikpKTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAg
IC0+U3RhcnRPYmplY3QoImF1dGhvciIpCi0gICAgICAtPlN0YXJ0TGlzdCgibmFtZSIpCi0gICAg
ICAtPlJlbmRlclN0cmluZygiIiwgImZpcnN0IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIiLCAi
c2Vjb25kIikKLSAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAt
PkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChleHBlY3RlZCk7Ci19Ci0KLVRFU1RfUChQcm90
b1N0cmVhbU9iamVjdFdyaXRlclRlc3QsIEltcGxpY2l0TWVzc2FnZUxpc3QpIHsKLSAgQm9vayBl
eHBlY3RlZDsKLSAgQXV0aG9yKiBvdXRlciA9IGV4cGVjdGVkLm11dGFibGVfYXV0aG9yKCk7Ci0g
IG91dGVyLT5zZXRfbmFtZSgib3V0ZXIiKTsKLSAgb3V0ZXItPnNldF9hbGl2ZSh0cnVlKTsKLSAg
QXV0aG9yKiBmaXJzdCA9IG91dGVyLT5hZGRfZnJpZW5kXygpOwotICBmaXJzdC0+c2V0X25hbWUo
ImZpcnN0Iik7Ci0gIEF1dGhvciogc2Vjb25kID0gb3V0ZXItPmFkZF9mcmllbmRfKCk7Ci0gIHNl
Y29uZC0+c2V0X25hbWUoInNlY29uZCIpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAg
ICAtPlN0YXJ0T2JqZWN0KCJhdXRob3IiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIm5hbWUiLCAi
b3V0ZXIiKQotICAgICAgLT5SZW5kZXJCb29sKCJhbGl2ZSIsIHRydWUpCi0gICAgICAtPlN0YXJ0
T2JqZWN0KCJmcmllbmQiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIm5hbWUiLCAiZmlyc3QiKQot
ICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5TdGFydE9iamVjdCgiZnJpZW5kIikKLSAgICAg
IC0+UmVuZGVyU3RyaW5nKCJuYW1lIiwgInNlY29uZCIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0g
ICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChl
eHBlY3RlZCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclRlc3QsCi0gICAg
ICAgTGFzdFdyaXRlV2luc09uTm9uUmVwZWF0ZWRNZXNzYWdlRmllbGRXaXRoRHVwbGljYXRlcykg
ewotICBCb29rIGV4cGVjdGVkOwotICBBdXRob3IqIGF1dGhvciA9IGV4cGVjdGVkLm11dGFibGVf
YXV0aG9yKCk7Ci0gIGF1dGhvci0+c2V0X25hbWUoIlRoZSBBdXRob3IiKTsKLSAgUHVibGlzaGVy
KiBwdWJsaXNoZXIgPSBleHBlY3RlZC5tdXRhYmxlX3B1Ymxpc2hlcigpOwotICBwdWJsaXNoZXIt
PnNldF9uYW1lKCJzZWNvbmQiKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5T
dGFydE9iamVjdCgiYXV0aG9yIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJuYW1lIiwgIlRoZSBB
dXRob3IiKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5TdGFydE9iamVjdCgicHVibGlz
aGVyIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJuYW1lIiwgImZpcnN0IikKLSAgICAgIC0+RW5k
T2JqZWN0KCkKLSAgICAgIC0+U3RhcnRPYmplY3QoInB1Ymxpc2hlciIpCi0gICAgICAtPlJlbmRl
clN0cmluZygibmFtZSIsICJzZWNvbmQiKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5F
bmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZXhwZWN0ZWQpOwotfQotCi1URVNUX1AoUHJvdG9T
dHJlYW1PYmplY3RXcml0ZXJUZXN0LCBFeHBsaWNpdE1lc3NhZ2VMaXN0KSB7Ci0gIEJvb2sgZXhw
ZWN0ZWQ7Ci0gIEF1dGhvciogb3V0ZXIgPSBleHBlY3RlZC5tdXRhYmxlX2F1dGhvcigpOwotICBv
dXRlci0+c2V0X25hbWUoIm91dGVyIik7Ci0gIG91dGVyLT5zZXRfYWxpdmUodHJ1ZSk7Ci0gIEF1
dGhvciogZmlyc3QgPSBvdXRlci0+YWRkX2ZyaWVuZF8oKTsKLSAgZmlyc3QtPnNldF9uYW1lKCJm
aXJzdCIpOwotICBBdXRob3IqIHNlY29uZCA9IG91dGVyLT5hZGRfZnJpZW5kXygpOwotICBzZWNv
bmQtPnNldF9uYW1lKCJzZWNvbmQiKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAg
LT5TdGFydE9iamVjdCgiYXV0aG9yIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJuYW1lIiwgIm91
dGVyIikKLSAgICAgIC0+UmVuZGVyQm9vbCgiYWxpdmUiLCB0cnVlKQotICAgICAgLT5TdGFydExp
c3QoImZyaWVuZCIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5SZW5kZXJTdHJp
bmcoIm5hbWUiLCAiZmlyc3QiKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5TdGFydE9i
amVjdCgiIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJuYW1lIiwgInNlY29uZCIpCi0gICAgICAt
PkVuZE9iamVjdCgpCi0gICAgICAtPkVuZExpc3QoKQotICAgICAgLT5FbmRPYmplY3QoKQotICAg
ICAgLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZXhwZWN0ZWQpOwotfQotCi1URVNUX1Ao
UHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0LCBOb25SZXBlYXRlZEV4cGxpY2l0TWVzc2FnZUxp
c3QpIHsKLSAgQm9vayBleHBlY3RlZDsKLSAgQXV0aG9yKiBhdXRob3IgPSBleHBlY3RlZC5tdXRh
YmxlX2F1dGhvcigpOwotICBhdXRob3ItPnNldF9uYW1lKCJUaGUgQXV0aG9yIik7Ci0KLSAgRVhQ
RUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkTmFtZSgKLSAgICAgICAg
ICBfLCBTdHJpbmdQaWVjZSgicHVibGlzaGVyIiksCi0gICAgICAgICAgU3RyaW5nUGllY2UoIlBy
b3RvIGZpZWxkIGlzIG5vdCByZXBlYXRpbmcsIGNhbm5vdCBzdGFydCBsaXN0LiIpKSkKLSAgICAg
IC5XaXRoKEFyZ3M8MD4oSGFzT2JqZWN0TG9jYXRpb24oIiIpKSk7Ci0gIG93Xy0+U3RhcnRPYmpl
Y3QoIiIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJhdXRob3IiKQotICAgICAgLT5SZW5kZXJTdHJp
bmcoIm5hbWUiLCAiVGhlIEF1dGhvciIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPlN0
YXJ0TGlzdCgicHVibGlzaGVyIikKLSAgICAgIC0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJl
bmRlclN0cmluZygibmFtZSIsICJmaXJzdCIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAt
PlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIm5hbWUiLCAic2Vjb25kIikK
LSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAtPkVuZE9iamVj
dCgpOwotICBDaGVja091dHB1dChleHBlY3RlZCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9i
amVjdFdyaXRlclRlc3QsIFVua25vd25GaWVsZEF0Um9vdCkgewotICBCb29rIGVtcHR5OwotCi0g
IEVYUEVDVF9DQUxMKGxpc3RlbmVyXywgSW52YWxpZE5hbWUoXywgU3RyaW5nUGllY2UoInVua25v
d24iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgi
Q2Fubm90IGZpbmQgZmllbGQuIikpKQotICAgICAgLldpdGgoQXJnczwwPihIYXNPYmplY3RMb2Nh
dGlvbigiIikpKTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIiktPlJlbmRlclN0cmluZygidW5rbm93
biIsICJOb3BlISIpLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZW1wdHksIDApOwotfQot
Ci1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0LCBVbmtub3duRmllbGRBdEF1dGhv
ckZyaWVuZCkgewotICBCb29rIGV4cGVjdGVkOwotICBBdXRob3IqIHBhdWwgPSBleHBlY3RlZC5t
dXRhYmxlX2F1dGhvcigpOwotICBwYXVsLT5zZXRfbmFtZSgiUGF1bCIpOwotICBBdXRob3IqIG1h
cmsgPSBwYXVsLT5hZGRfZnJpZW5kXygpOwotICBtYXJrLT5zZXRfbmFtZSgiTWFyayIpOwotICBB
dXRob3IqIGpvaG4gPSBwYXVsLT5hZGRfZnJpZW5kXygpOwotICBqb2huLT5zZXRfbmFtZSgiSm9o
biIpOwotICBBdXRob3IqIGx1a2UgPSBwYXVsLT5hZGRfZnJpZW5kXygpOwotICBsdWtlLT5zZXRf
bmFtZSgiTHVrZSIpOwotCi0gIEVYUEVDVF9DQUxMKGxpc3RlbmVyXywgSW52YWxpZE5hbWUoXywg
U3RyaW5nUGllY2UoImFkZHJlc3MiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTdHJpbmdQaWVjZSgiQ2Fubm90IGZpbmQgZmllbGQuIikpKQotICAgICAgLldpdGgoQXJn
czwwPihIYXNPYmplY3RMb2NhdGlvbigiYXV0aG9yLmZyaWVuZFsxXSIpKSk7Ci0gIG93Xy0+U3Rh
cnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJhdXRob3IiKQotICAgICAgLT5SZW5k
ZXJTdHJpbmcoIm5hbWUiLCAiUGF1bCIpCi0gICAgICAtPlN0YXJ0TGlzdCgiZnJpZW5kIikKLSAg
ICAgIC0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlclN0cmluZygibmFtZSIsICJNYXJr
IikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAt
PlJlbmRlclN0cmluZygibmFtZSIsICJKb2huIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJhZGRy
ZXNzIiwgIlBhdG1vcyIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPlN0YXJ0T2JqZWN0
KCIiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIm5hbWUiLCAiTHVrZSIpCi0gICAgICAtPkVuZE9i
amVjdCgpCi0gICAgICAtPkVuZExpc3QoKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5F
bmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZXhwZWN0ZWQpOwotfQotCi1URVNUX1AoUHJvdG9T
dHJlYW1PYmplY3RXcml0ZXJUZXN0LCBVbmtub3duT2JqZWN0QXRSb290KSB7Ci0gIEJvb2sgZW1w
dHk7Ci0KLSAgRVhQRUNUX0NBTEwobGlzdGVuZXJfLCBJbnZhbGlkTmFtZShfLCBTdHJpbmdQaWVj
ZSgidW5rbm93biIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Z1BpZWNlKCJDYW5ub3QgZmluZCBmaWVsZC4iKSkpCi0gICAgICAuV2l0aChBcmdzPDA+KEhhc09i
amVjdExvY2F0aW9uKCIiKSkpOwotICBvd18tPlN0YXJ0T2JqZWN0KCIiKS0+U3RhcnRPYmplY3Qo
InVua25vd24iKS0+RW5kT2JqZWN0KCktPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChlbXB0
eSwgMCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclRlc3QsIFVua25vd25P
YmplY3RBdEF1dGhvcikgewotICBCb29rIGV4cGVjdGVkOwotICBBdXRob3IqIGF1dGhvciA9IGV4
cGVjdGVkLm11dGFibGVfYXV0aG9yKCk7Ci0gIGF1dGhvci0+c2V0X25hbWUoIldpbGxpYW0iKTsK
LSAgYXV0aG9yLT5hZGRfcHNldWRvbnltKCJCaWxsIik7Ci0KLSAgRVhQRUNUX0NBTEwobGlzdGVu
ZXJfLCBJbnZhbGlkTmFtZShfLCBTdHJpbmdQaWVjZSgid2lmZSIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJDYW5ub3QgZmluZCBmaWVsZC4iKSkp
Ci0gICAgICAuV2l0aChBcmdzPDA+KEhhc09iamVjdExvY2F0aW9uKCJhdXRob3IiKSkpOwotICBv
d18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5TdGFydE9iamVjdCgiYXV0aG9yIikKLSAgICAg
IC0+UmVuZGVyU3RyaW5nKCJuYW1lIiwgIldpbGxpYW0iKQotICAgICAgLT5TdGFydE9iamVjdCgi
d2lmZSIpCi0gICAgICAtPlJlbmRlclN0cmluZygibmFtZSIsICJIaWxhcnkiKQotICAgICAgLT5F
bmRPYmplY3QoKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInBzZXVkb255bSIsICJCaWxsIikKLSAg
ICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KGV4
cGVjdGVkKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCwgVW5rbm93
bkxpc3RBdFJvb3QpIHsKLSAgQm9vayBlbXB0eTsKLQotICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8s
IEludmFsaWROYW1lKF8sIFN0cmluZ1BpZWNlKCJ1bmtub3duIiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIkNhbm5vdCBmaW5kIGZpZWxkLiIpKSkK
LSAgICAgIC5XaXRoKEFyZ3M8MD4oSGFzT2JqZWN0TG9jYXRpb24oIiIpKSk7Ci0gIG93Xy0+U3Rh
cnRPYmplY3QoIiIpLT5TdGFydExpc3QoInVua25vd24iKS0+RW5kTGlzdCgpLT5FbmRPYmplY3Qo
KTsKLSAgQ2hlY2tPdXRwdXQoZW1wdHksIDApOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXJUZXN0LCBVbmtub3duTGlzdEF0UHVibGlzaGVyKSB7Ci0gIEJvb2sgZXhwZWN0ZWQ7
Ci0gIGV4cGVjdGVkLnNldF90aXRsZSgiQnJhaW53YXNoaW5nIik7Ci0gIFB1Ymxpc2hlciogcHVi
bGlzaGVyID0gZXhwZWN0ZWQubXV0YWJsZV9wdWJsaXNoZXIoKTsKLSAgcHVibGlzaGVyLT5zZXRf
bmFtZSgicHJvcGFnYW5kYSIpOwotCi0gIEVYUEVDVF9DQUxMKGxpc3RlbmVyXywgSW52YWxpZE5h
bWUoXywgU3RyaW5nUGllY2UoImFsbGlhbmNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nUGllY2UoIkNhbm5vdCBmaW5kIGZpZWxkLiIpKSkKLSAgICAgIC5X
aXRoKEFyZ3M8MD4oSGFzT2JqZWN0TG9jYXRpb24oInB1Ymxpc2hlciIpKSk7Ci0gIG93Xy0+U3Rh
cnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJwdWJsaXNoZXIiKQotICAgICAgLT5S
ZW5kZXJTdHJpbmcoIm5hbWUiLCAicHJvcGFnYW5kYSIpCi0gICAgICAtPlN0YXJ0TGlzdCgiYWxs
aWFuY2UiKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+
UmVuZGVyU3RyaW5nKCJ0aXRsZSIsICJCcmFpbndhc2hpbmciKQotICAgICAgLT5FbmRPYmplY3Qo
KTsKLSAgQ2hlY2tPdXRwdXQoZXhwZWN0ZWQpOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXJUZXN0LCBNaXNzaW5nUmVxdWlyZWRGaWVsZCkgewotICBCb29rIGV4cGVjdGVkOwot
ICBleHBlY3RlZC5zZXRfdGl0bGUoIk15IFRpdGxlIik7Ci0gIGV4cGVjdGVkLnNldF9hbGxvY2F0
ZWRfcHVibGlzaGVyKG5ldyBQdWJsaXNoZXIoKSk7Ci0KLSAgRVhQRUNUX0NBTEwobGlzdGVuZXJf
LCBNaXNzaW5nRmllbGQoXywgU3RyaW5nUGllY2UoIm5hbWUiKSkpCi0gICAgICAuV2l0aChBcmdz
PDA+KEhhc09iamVjdExvY2F0aW9uKCJwdWJsaXNoZXIiKSkpOwotICBvd18tPlN0YXJ0T2JqZWN0
KCIiKQotICAgICAgLT5TdGFydE9iamVjdCgicHVibGlzaGVyIikKLSAgICAgIC0+RW5kT2JqZWN0
KCkKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ0aXRsZSIsICJNeSBUaXRsZSIpCi0gICAgICAtPkVu
ZE9iamVjdCgpOwotICBDaGVja091dHB1dChleHBlY3RlZCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0
cmVhbU9iamVjdFdyaXRlclRlc3QsIEludmFsaWRGaWVsZFZhbHVlQXRSb290KSB7Ci0gIEJvb2sg
ZW1wdHk7Ci0KLSAgRVhQRUNUX0NBTEwobGlzdGVuZXJfLCBJbnZhbGlkVmFsdWUoXywgU3RyaW5n
UGllY2UoIlRZUEVfVUlOVDMyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZ1BpZWNlKCJcImdhcmJhZ2VcIiIpKSkKLSAgICAgIC5XaXRoKEFyZ3M8MD4oSGFz
T2JqZWN0TG9jYXRpb24oImxlbmd0aCIpKSk7Ci0gIG93Xy0+U3RhcnRPYmplY3QoIiIpLT5SZW5k
ZXJTdHJpbmcoImxlbmd0aCIsICJnYXJiYWdlIiktPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1
dChlbXB0eSwgMCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclRlc3QsIE11
bHRpcGxlSW52YWxpZEZpZWxkVmFsdWVzKSB7Ci0gIEJvb2sgZXhwZWN0ZWQ7Ci0gIGV4cGVjdGVk
LnNldF90aXRsZSgiTXkgVGl0bGUiKTsKLQotICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8sIEludmFs
aWRWYWx1ZShfLCBTdHJpbmdQaWVjZSgiVFlQRV9VSU5UMzIiKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIlwiLTQwMFwiIikpKQotICAgICAgLldp
dGgoQXJnczwwPihIYXNPYmplY3RMb2NhdGlvbigibGVuZ3RoIikpKTsKLSAgRVhQRUNUX0NBTEwo
bGlzdGVuZXJfLCBJbnZhbGlkVmFsdWUoXywgU3RyaW5nUGllY2UoIlRZUEVfSU5UNjQiKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIlwiMy4xNFwi
IikpKQotICAgICAgLldpdGgoQXJnczwwPihIYXNPYmplY3RMb2NhdGlvbigicHVibGlzaGVkIikp
KTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJsZW5ndGgi
LCAiLTQwMCIpCi0gICAgICAtPlJlbmRlclN0cmluZygicHVibGlzaGVkIiwgIjMuMTQiKQotICAg
ICAgLT5SZW5kZXJTdHJpbmcoInRpdGxlIiwgIk15IFRpdGxlIikKLSAgICAgIC0+RW5kT2JqZWN0
KCk7Ci0gIENoZWNrT3V0cHV0KGV4cGVjdGVkKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2Jq
ZWN0V3JpdGVyVGVzdCwgVW5uYW1lZEZpZWxkQXRSb290KSB7Ci0gIEJvb2sgZW1wdHk7Ci0KLSAg
RVhQRUNUX0NBTEwobGlzdGVuZXJfLAotICAgICAgICAgICAgICBJbnZhbGlkTmFtZShfLCBTdHJp
bmdQaWVjZSgiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJQcm90
byBmaWVsZHMgbXVzdCBoYXZlIGEgbmFtZS4iKSkpCi0gICAgICAuV2l0aChBcmdzPDA+KEhhc09i
amVjdExvY2F0aW9uKCIiKSkpOwotICBvd18tPlN0YXJ0T2JqZWN0KCIiKS0+UmVuZGVyRmxvYXQo
IiIsIDMuMTQpLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZW1wdHksIDApOwotfQotCi1U
RVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0LCBVbm5hbWVkRmllbGRBdEF1dGhvcikg
ewotICBCb29rIGV4cGVjdGVkOwotICBleHBlY3RlZC5zZXRfdGl0bGUoIm5vbmFtZSIpOwotICBl
eHBlY3RlZC5zZXRfYWxsb2NhdGVkX2F1dGhvcihuZXcgQXV0aG9yKCkpOwotCi0gIEVYUEVDVF9D
QUxMKGxpc3RlbmVyXywKLSAgICAgICAgICAgICAgSW52YWxpZE5hbWUoXywgU3RyaW5nUGllY2Uo
IiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgiUHJvdG8gZmllbGRz
IG11c3QgaGF2ZSBhIG5hbWUuIikpKQotICAgICAgLldpdGgoQXJnczwwPihIYXNPYmplY3RMb2Nh
dGlvbigiYXV0aG9yIikpKTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRP
YmplY3QoImF1dGhvciIpCi0gICAgICAtPlJlbmRlckludDMyKCIiLCAxMjMpCi0gICAgICAtPkVu
ZE9iamVjdCgpCi0gICAgICAtPlJlbmRlclN0cmluZygidGl0bGUiLCAibm9uYW1lIikKLSAgICAg
IC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KGV4cGVjdGVkKTsKLX0KLQotVEVTVF9QKFBy
b3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCwgVW5uYW1lZExpc3RBdFJvb3QpIHsKLSAgQm9vayBl
eHBlY3RlZDsKLSAgZXhwZWN0ZWQuc2V0X3RpdGxlKCJub25hbWUiKTsKLQotICBFWFBFQ1RfQ0FM
TChsaXN0ZW5lcl8sCi0gICAgICAgICAgICAgIEludmFsaWROYW1lKF8sIFN0cmluZ1BpZWNlKCIi
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIlByb3RvIGZpZWxkcyBt
dXN0IGhhdmUgYSBuYW1lLiIpKSkKLSAgICAgIC5XaXRoKEFyZ3M8MD4oSGFzT2JqZWN0TG9jYXRp
b24oIiIpKSk7Ci0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0TGlzdCgiIikK
LSAgICAgIC0+RW5kTGlzdCgpCi0gICAgICAtPlJlbmRlclN0cmluZygidGl0bGUiLCAibm9uYW1l
IikKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KGV4cGVjdGVkKTsKLX0KLQot
VEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCwgUm9vdE5hbWVkT2JqZWN0KSB7Ci0g
IEJvb2sgZXhwZWN0ZWQ7Ci0gIGV4cGVjdGVkLnNldF90aXRsZSgiQW5uaWUiKTsKLQotICBFWFBF
Q1RfQ0FMTChsaXN0ZW5lcl8sCi0gICAgICAgICAgICAgIEludmFsaWROYW1lKF8sIFN0cmluZ1Bp
ZWNlKCJvb3BzIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJSb290
IGVsZW1lbnQgc2hvdWxkIG5vdCBiZSBuYW1lZC4iKSkpCi0gICAgICAuV2l0aChBcmdzPDA+KEhh
c09iamVjdExvY2F0aW9uKCIiKSkpOwotICBvd18tPlN0YXJ0T2JqZWN0KCJvb3BzIiktPlJlbmRl
clN0cmluZygidGl0bGUiLCAiQW5uaWUiKS0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KGV4
cGVjdGVkLCA3KTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCwgUm9v
dE5hbWVkTGlzdCkgewotICBCb29rIGVtcHR5OwotCi0gIEVYUEVDVF9DQUxMKGxpc3RlbmVyXywK
LSAgICAgICAgICAgICAgSW52YWxpZE5hbWUoXywgU3RyaW5nUGllY2UoIm9vcHMiKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIlJvb3QgZWxlbWVudCBzaG91bGQgbm90
IGJlIG5hbWVkLiIpKSkKLSAgICAgIC5XaXRoKEFyZ3M8MD4oSGFzT2JqZWN0TG9jYXRpb24oIiIp
KSk7Ci0gIG93Xy0+U3RhcnRMaXN0KCJvb3BzIiktPlJlbmRlclN0cmluZygiIiwgIml0ZW0iKS0+
RW5kTGlzdCgpOwotICBDaGVja091dHB1dChlbXB0eSwgMCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0
cmVhbU9iamVjdFdyaXRlclRlc3QsIFJvb3RVbm5hbWVkRmllbGQpIHsKLSAgQm9vayBlbXB0eTsK
LQotICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8sCi0gICAgICAgICAgICAgIEludmFsaWROYW1lKF8s
IFN0cmluZ1BpZWNlKCIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2Uo
IlJvb3QgZWxlbWVudCBtdXN0IGJlIGEgbWVzc2FnZS4iKSkpCi0gICAgICAuV2l0aChBcmdzPDA+
KEhhc09iamVjdExvY2F0aW9uKCIiKSkpOwotICBvd18tPlJlbmRlckJvb2woIiIsIHRydWUpOwot
ICBDaGVja091dHB1dChlbXB0eSwgMCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdy
aXRlclRlc3QsIFJvb3ROYW1lZEZpZWxkKSB7Ci0gIEJvb2sgZW1wdHk7Ci0KLSAgRVhQRUNUX0NB
TEwobGlzdGVuZXJfLAotICAgICAgICAgICAgICBJbnZhbGlkTmFtZShfLCBTdHJpbmdQaWVjZSgi
b29wcyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgiUm9vdCBlbGVt
ZW50IG11c3QgYmUgYSBtZXNzYWdlLiIpKSkKLSAgICAgIC5XaXRoKEFyZ3M8MD4oSGFzT2JqZWN0
TG9jYXRpb24oIiIpKSk7Ci0gIG93Xy0+UmVuZGVyQm9vbCgib29wcyIsIHRydWUpOwotICBDaGVj
a091dHB1dChlbXB0eSwgMCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclRl
c3QsIE51bGxWYWx1ZSkgewotICBCb29rIGVtcHR5OwotCi0gIG93Xy0+UmVuZGVyTnVsbCgiIik7
Ci0gIENoZWNrT3V0cHV0KGVtcHR5LCAwKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0
V3JpdGVyVGVzdCwgTnVsbFZhbHVlRm9yTWVzc2FnZUZpZWxkKSB7Ci0gIEJvb2sgZW1wdHk7Ci0K
LSAgb3dfLT5SZW5kZXJOdWxsKCJhdXRob3IiKTsKLSAgQ2hlY2tPdXRwdXQoZW1wdHksIDApOwot
fQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0LCBOdWxsVmFsdWVGb3JQcmlt
aXRpdmVGaWVsZCkgewotICBCb29rIGVtcHR5OwotCi0gIG93Xy0+UmVuZGVyTnVsbCgibGVuZ3Ro
Iik7Ci0gIENoZWNrT3V0cHV0KGVtcHR5LCAwKTsKLX0KLQotY2xhc3MgUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXJUaW1lc3RhbXBEdXJhdGlvblRlc3QKLSAgICA6IHB1YmxpYyBCYXNlUHJvdG9TdHJl
YW1PYmplY3RXcml0ZXJUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFByb3RvU3RyZWFtT2JqZWN0V3Jp
dGVyVGltZXN0YW1wRHVyYXRpb25UZXN0KCkgewotICAgIHZlY3Rvcjxjb25zdCBEZXNjcmlwdG9y
Kj4gZGVzY3JpcHRvcnM7Ci0gICAgZGVzY3JpcHRvcnMucHVzaF9iYWNrKFRpbWVzdGFtcER1cmF0
aW9uOjpkZXNjcmlwdG9yKCkpOwotICAgIGRlc2NyaXB0b3JzLnB1c2hfYmFjayhnb29nbGU6OnBy
b3RvYnVmOjpUaW1lc3RhbXA6OmRlc2NyaXB0b3IoKSk7Ci0gICAgZGVzY3JpcHRvcnMucHVzaF9i
YWNrKGdvb2dsZTo6cHJvdG9idWY6OkR1cmF0aW9uOjpkZXNjcmlwdG9yKCkpOwotICAgIFJlc2V0
VHlwZUluZm8oZGVzY3JpcHRvcnMpOwotICB9Ci19OwotCi1JTlNUQU5USUFURV9URVNUX0NBU0Vf
UChEaWZmZXJlbnRUeXBlSW5mb1NvdXJjZVRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBQ
cm90b1N0cmVhbU9iamVjdFdyaXRlclRpbWVzdGFtcER1cmF0aW9uVGVzdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIDo6dGVzdGluZzo6VmFsdWVzKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3Rpbmc6OlVTRV9UWVBFX1JFU09MVkVSKSk7Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9i
amVjdFdyaXRlclRpbWVzdGFtcER1cmF0aW9uVGVzdCwgUGFyc2VUaW1lc3RhbXApIHsKLSAgVGlt
ZXN0YW1wRHVyYXRpb24gdGltZXN0YW1wOwotICBnb29nbGU6OnByb3RvYnVmOjpUaW1lc3RhbXAq
IHRzID0gdGltZXN0YW1wLm11dGFibGVfdHMoKTsKLSAgdHMtPnNldF9zZWNvbmRzKDE0NDgyNDk4
NTUpOwotICB0cy0+c2V0X25hbm9zKDMzMTU1MDAwKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIi
KQotICAgICAgLT5SZW5kZXJTdHJpbmcoInRzIiwgIjIwMTUtMTEtMjNUMDM6Mzc6MzUuMDMzMTU1
WiIpCi0gICAgICAtPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dCh0aW1lc3RhbXApOwotfQot
Ci1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUaW1lc3RhbXBEdXJhdGlvblRlc3QsCi0g
ICAgICAgUGFyc2VUaW1lc3RhbXBZZWFyTm90WmVyb1BhZGRlZCkgewotICBUaW1lc3RhbXBEdXJh
dGlvbiB0aW1lc3RhbXA7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OlRpbWVzdGFtcCogdHMgPSB0aW1l
c3RhbXAubXV0YWJsZV90cygpOwotICB0cy0+c2V0X3NlY29uZHMoLTYxNjY1NjU0MTQ1KTsKLSAg
dHMtPnNldF9uYW5vcygzMzE1NTAwMCk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAg
IC0+UmVuZGVyU3RyaW5nKCJ0cyIsICIxNS0xMS0yM1QwMzozNzozNS4wMzMxNTVaIikKLSAgICAg
IC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KHRpbWVzdGFtcCk7Ci19Ci0KLVRFU1RfUChQ
cm90b1N0cmVhbU9iamVjdFdyaXRlclRpbWVzdGFtcER1cmF0aW9uVGVzdCwKLSAgICAgICBQYXJz
ZVRpbWVzdGFtcFllYXJaZXJvUGFkZGVkKSB7Ci0gIFRpbWVzdGFtcER1cmF0aW9uIHRpbWVzdGFt
cDsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6VGltZXN0YW1wKiB0cyA9IHRpbWVzdGFtcC5tdXRhYmxl
X3RzKCk7Ci0gIHRzLT5zZXRfc2Vjb25kcygtNjE2NjU2NTQxNDUpOwotICB0cy0+c2V0X25hbm9z
KDMzMTU1MDAwKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5SZW5kZXJTdHJp
bmcoInRzIiwgIjAwMTUtMTEtMjNUMDM6Mzc6MzUuMDMzMTU1WiIpCi0gICAgICAtPkVuZE9iamVj
dCgpOwotICBDaGVja091dHB1dCh0aW1lc3RhbXApOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1P
YmplY3RXcml0ZXJUaW1lc3RhbXBEdXJhdGlvblRlc3QsCi0gICAgICAgUGFyc2VUaW1lc3RhbXBX
aXRoUG9zaXRpdmVPZmZzZXQpIHsKLSAgVGltZXN0YW1wRHVyYXRpb24gdGltZXN0YW1wOwotICBn
b29nbGU6OnByb3RvYnVmOjpUaW1lc3RhbXAqIHRzID0gdGltZXN0YW1wLm11dGFibGVfdHMoKTsK
LSAgdHMtPnNldF9zZWNvbmRzKDE0NDgyNDk4NTUpOwotICB0cy0+c2V0X25hbm9zKDMzMTU1MDAw
KTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInRzIiwg
IjIwMTUtMTEtMjNUMTE6NDc6MzUuMDMzMTU1KzA4OjEwIikKLSAgICAgIC0+RW5kT2JqZWN0KCk7
Ci0gIENoZWNrT3V0cHV0KHRpbWVzdGFtcCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVj
dFdyaXRlclRpbWVzdGFtcER1cmF0aW9uVGVzdCwKLSAgICAgICBQYXJzZVRpbWVzdGFtcFdpdGhO
ZWdhdGl2ZU9mZnNldCkgewotICBUaW1lc3RhbXBEdXJhdGlvbiB0aW1lc3RhbXA7Ci0gIGdvb2ds
ZTo6cHJvdG9idWY6OlRpbWVzdGFtcCogdHMgPSB0aW1lc3RhbXAubXV0YWJsZV90cygpOwotICB0
cy0+c2V0X3NlY29uZHMoMTQ0ODI0OTg1NSk7Ci0gIHRzLT5zZXRfbmFub3MoMzMxNTUwMDApOwot
Ci0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlclN0cmluZygidHMiLCAiMjAx
NS0xMS0yMlQxOTo0NzozNS4wMzMxNTUtMDc6NTAiKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAg
Q2hlY2tPdXRwdXQodGltZXN0YW1wKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3Jp
dGVyVGltZXN0YW1wRHVyYXRpb25UZXN0LAotICAgICAgIFRpbWVzdGFtcFdpdGhJbnZhbGlkT2Zm
c2V0MSkgewotICBUaW1lc3RhbXBEdXJhdGlvbiB0aW1lc3RhbXA7Ci0KLSAgRVhQRUNUX0NBTEwo
Ci0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUoXywKLSAgICAgICAgICAgICAg
ICAgICBTdHJpbmdQaWVjZSgidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVGlt
ZXN0YW1wIiksCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIkZpZWxkICd0cycsIElu
dmFsaWQgdGltZSBmb3JtYXQ6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAx
Ni0wMy0wN1QxNToxNDoyMysiKSkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpLT5SZW5kZXJT
dHJpbmcoInRzIiwgIjIwMTYtMDMtMDdUMTU6MTQ6MjMrIiktPkVuZE9iamVjdCgpOwotICBDaGVj
a091dHB1dCh0aW1lc3RhbXApOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJU
aW1lc3RhbXBEdXJhdGlvblRlc3QsCi0gICAgICAgVGltZXN0YW1wV2l0aEludmFsaWRPZmZzZXQy
KSB7Ci0gIFRpbWVzdGFtcER1cmF0aW9uIHRpbWVzdGFtcDsKLQotICBFWFBFQ1RfQ0FMTCgKLSAg
ICAgIGxpc3RlbmVyXywKLSAgICAgIEludmFsaWRWYWx1ZShfLAotICAgICAgICAgICAgICAgICAg
IFN0cmluZ1BpZWNlKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5UaW1lc3Rh
bXAiKSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgiRmllbGQgJ3RzJywgSW52YWxp
ZCB0aW1lIGZvcm1hdDogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2LTAz
LTA3VDE1OjE0OjIzKzA4LTEwIikpKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAg
LT5SZW5kZXJTdHJpbmcoInRzIiwgIjIwMTYtMDMtMDdUMTU6MTQ6MjMrMDgtMTAiKQotICAgICAg
LT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQodGltZXN0YW1wKTsKLX0KLQotVEVTVF9QKFBy
b3RvU3RyZWFtT2JqZWN0V3JpdGVyVGltZXN0YW1wRHVyYXRpb25UZXN0LAotICAgICAgIFRpbWVz
dGFtcFdpdGhJbnZhbGlkT2Zmc2V0MykgewotICBUaW1lc3RhbXBEdXJhdGlvbiB0aW1lc3RhbXA7
Ci0KLSAgRVhQRUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUo
XywKLSAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgidHlwZS5nb29nbGVhcGlzLmNvbS9n
b29nbGUucHJvdG9idWYuVGltZXN0YW1wIiksCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGll
Y2UoIkZpZWxkICd0cycsIEludmFsaWQgdGltZSBmb3JtYXQ6ICIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiMjAxNi0wMy0wN1QxNToxNDoyMysyNDoxMCIpKSk7Ci0KLSAgb3dfLT5T
dGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ0cyIsICIyMDE2LTAzLTA3VDE1
OjE0OjIzKzI0OjEwIikKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KHRpbWVz
dGFtcCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclRpbWVzdGFtcER1cmF0
aW9uVGVzdCwKLSAgICAgICBUaW1lc3RhbXBXaXRoSW52YWxpZE9mZnNldDQpIHsKLSAgVGltZXN0
YW1wRHVyYXRpb24gdGltZXN0YW1wOwotCi0gIEVYUEVDVF9DQUxMKAotICAgICAgbGlzdGVuZXJf
LAotICAgICAgSW52YWxpZFZhbHVlKF8sCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2Uo
InR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIpLAotICAgICAg
ICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJGaWVsZCAndHMnLCBJbnZhbGlkIHRpbWUgZm9ybWF0
OiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTYtMDMtMDdUMTU6MTQ6MjMr
MDQ6NjAiKSkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlclN0cmlu
ZygidHMiLCAiMjAxNi0wMy0wN1QxNToxNDoyMyswNDo2MCIpCi0gICAgICAtPkVuZE9iamVjdCgp
OwotICBDaGVja091dHB1dCh0aW1lc3RhbXApOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXJUaW1lc3RhbXBEdXJhdGlvblRlc3QsIEludmFsaWRUaW1lc3RhbXBFcnJvcjEpIHsK
LSAgVGltZXN0YW1wRHVyYXRpb24gdGltZXN0YW1wOwotCi0gIEVYUEVDVF9DQUxMKAotICAgICAg
bGlzdGVuZXJfLAotICAgICAgSW52YWxpZFZhbHVlKF8sCi0gICAgICAgICAgICAgICAgICAgU3Ry
aW5nUGllY2UoInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIp
LAotICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJGaWVsZCAndHMnLCBJbnZhbGlkIHRp
bWUgZm9ybWF0OiAiKSkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpLT5SZW5kZXJTdHJpbmco
InRzIiwgIiIpLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQodGltZXN0YW1wKTsKLX0KLQot
VEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGltZXN0YW1wRHVyYXRpb25UZXN0LCBJbnZh
bGlkVGltZXN0YW1wRXJyb3IyKSB7Ci0gIFRpbWVzdGFtcER1cmF0aW9uIHRpbWVzdGFtcDsKLQot
ICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGxpc3RlbmVyXywKLSAgICAgIEludmFsaWRWYWx1ZShfLAot
ICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2ds
ZS5wcm90b2J1Zi5UaW1lc3RhbXAiKSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgi
RmllbGQgJ3RzJywgSW52YWxpZCB0aW1lIGZvcm1hdDogWiIpKSk7Ci0KLSAgb3dfLT5TdGFydE9i
amVjdCgiIiktPlJlbmRlclN0cmluZygidHMiLCAiWiIpLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tP
dXRwdXQodGltZXN0YW1wKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGlt
ZXN0YW1wRHVyYXRpb25UZXN0LCBJbnZhbGlkVGltZXN0YW1wRXJyb3IzKSB7Ci0gIFRpbWVzdGFt
cER1cmF0aW9uIHRpbWVzdGFtcDsKLQotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGxpc3RlbmVyXywK
LSAgICAgIEludmFsaWRWYWx1ZShfLAotICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJ0
eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiKSwKLSAgICAgICAg
ICAgICAgICAgICBTdHJpbmdQaWVjZSgiRmllbGQgJ3RzJywgSW52YWxpZCB0aW1lIGZvcm1hdDog
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTcwLTAxLTAxVDAwOjAwOjAwLkFC
WiIpKSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ0
cyIsICIxOTcwLTAxLTAxVDAwOjAwOjAwLkFCWiIpCi0gICAgICAtPkVuZE9iamVjdCgpOwotICBD
aGVja091dHB1dCh0aW1lc3RhbXApOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0
ZXJUaW1lc3RhbXBEdXJhdGlvblRlc3QsIEludmFsaWRUaW1lc3RhbXBFcnJvcjQpIHsKLSAgVGlt
ZXN0YW1wRHVyYXRpb24gdGltZXN0YW1wOwotCi0gIEVYUEVDVF9DQUxMKAotICAgICAgbGlzdGVu
ZXJfLAotICAgICAgSW52YWxpZFZhbHVlKF8sCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGll
Y2UoInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIpLAotICAg
ICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJGaWVsZCAndHMnLCBJbnZhbGlkIHRpbWUgZm9y
bWF0OiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi04MDMxLTEwLTE4VDAwOjAw
OjAwLjAwMFoiKSkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlclN0
cmluZygidHMiLCAiLTgwMzEtMTAtMThUMDA6MDA6MDAuMDAwWiIpCi0gICAgICAtPkVuZE9iamVj
dCgpOwotICBDaGVja091dHB1dCh0aW1lc3RhbXApOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1P
YmplY3RXcml0ZXJUaW1lc3RhbXBEdXJhdGlvblRlc3QsIEludmFsaWRUaW1lc3RhbXBFcnJvcjUp
IHsKLSAgVGltZXN0YW1wRHVyYXRpb24gdGltZXN0YW1wOwotCi0gIEVYUEVDVF9DQUxMKAotICAg
ICAgbGlzdGVuZXJfLAotICAgICAgSW52YWxpZFZhbHVlKF8sCi0gICAgICAgICAgICAgICAgICAg
U3RyaW5nUGllY2UoInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFt
cCIpLAotICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJGaWVsZCAndHMnLCBJbnZhbGlk
IHRpbWUgZm9ybWF0OiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUtMTEt
MjNUMDM6Mzc6MzUuMDMzMTU1ICAgWiIpKSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAg
ICAgIC8vIFdoaXRlc3BhY2UgaW4gdGhlIFRpbWVzdGFtcCBuYW5vcyBpcyBub3QgYWxsb3dlZC4K
LSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ0cyIsICIyMDE1LTExLTIzVDAzOjM3OjM1LjAzMzE1NSAg
IFoiKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQodGltZXN0YW1wKTsKLX0K
LQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGltZXN0YW1wRHVyYXRpb25UZXN0LCBJ
bnZhbGlkVGltZXN0YW1wRXJyb3I2KSB7Ci0gIFRpbWVzdGFtcER1cmF0aW9uIHRpbWVzdGFtcDsK
LQotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGxpc3RlbmVyXywKLSAgICAgIEludmFsaWRWYWx1ZShf
LAotICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dv
b2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiKSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVj
ZSgiRmllbGQgJ3RzJywgSW52YWxpZCB0aW1lIGZvcm1hdDogIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIyMDE1LTExLTIzVDAzOjM3OjM1LjAzMzE1NSAxMjM0WiIpKSk7Ci0KLSAg
b3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC8vIFdoaXRlc3BhY2UgaW4gdGhlIFRpbWVzdGFt
cCBuYW5vcyBpcyBub3QgYWxsb3dlZC4KLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ0cyIsICIyMDE1
LTExLTIzVDAzOjM3OjM1LjAzMzE1NSAxMjM0WiIpCi0gICAgICAtPkVuZE9iamVjdCgpOwotICBD
aGVja091dHB1dCh0aW1lc3RhbXApOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0
ZXJUaW1lc3RhbXBEdXJhdGlvblRlc3QsIEludmFsaWRUaW1lc3RhbXBFcnJvcjcpIHsKLSAgVGlt
ZXN0YW1wRHVyYXRpb24gdGltZXN0YW1wOwotCi0gIEVYUEVDVF9DQUxMKAotICAgICAgbGlzdGVu
ZXJfLAotICAgICAgSW52YWxpZFZhbHVlKF8sCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGll
Y2UoInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIpLAotICAg
ICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJGaWVsZCAndHMnLCBJbnZhbGlkIHRpbWUgZm9y
bWF0OiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUtMTEtMjNUMDM6Mzc6
MzUuMDMzYWJjMTU1WiIpKSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC8vIE5v
bi1udW1lcmljIGNoYXJhY3RlcnMgaW4gdGhlIFRpbWVzdGFtcCBuYW5vcyBpcyBub3QgYWxsb3dl
ZC4KLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ0cyIsICIyMDE1LTExLTIzVDAzOjM3OjM1LjAzM2Fi
YzE1NVoiKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQodGltZXN0YW1wKTsK
LX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGltZXN0YW1wRHVyYXRpb25UZXN0
LCBJbnZhbGlkVGltZXN0YW1wRXJyb3I4KSB7Ci0gIFRpbWVzdGFtcER1cmF0aW9uIHRpbWVzdGFt
cDsKLQotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGxpc3RlbmVyXywKLSAgICAgIEludmFsaWRWYWx1
ZShfLAotICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJ0eXBlLmdvb2dsZWFwaXMuY29t
L2dvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiKSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmdQ
aWVjZSgiRmllbGQgJ3RzJywgSW52YWxpZCB0aW1lIGZvcm1hdDogIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIwLTEyLTMxVDIzOjU5OjU5LjAwMFoiKSkpOwotCi0gIG93Xy0+U3Rh
cnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlclN0cmluZygidHMiLCAiMC0xMi0zMVQyMzo1OTo1
OS4wMDBaIikKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KHRpbWVzdGFtcCk7
Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclRpbWVzdGFtcER1cmF0aW9uVGVz
dCwgUGFyc2VEdXJhdGlvbikgewotICBUaW1lc3RhbXBEdXJhdGlvbiBkdXJhdGlvbjsKLSAgZ29v
Z2xlOjpwcm90b2J1Zjo6RHVyYXRpb24qIGR1ciA9IGR1cmF0aW9uLm11dGFibGVfZHVyKCk7Ci0g
IGR1ci0+c2V0X3NlY29uZHMoMTQ0ODIxNjkzMCk7Ci0gIGR1ci0+c2V0X25hbm9zKDEzMjI2MjAw
MCk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIiktPlJlbmRlclN0cmluZygiZHVyIiwgIjE0NDgy
MTY5MzAuMTMyMjYycyIpLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZHVyYXRpb24pOwot
fQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUaW1lc3RhbXBEdXJhdGlvblRlc3Qs
IEludmFsaWREdXJhdGlvbkVycm9yMSkgewotICBUaW1lc3RhbXBEdXJhdGlvbiBkdXJhdGlvbjsK
LQotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGxpc3RlbmVyXywKLSAgICAgIEludmFsaWRWYWx1ZSgK
LSAgICAgICAgICBfLCBTdHJpbmdQaWVjZSgidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJv
dG9idWYuRHVyYXRpb24iKSwKLSAgICAgICAgICBTdHJpbmdQaWVjZSgiRmllbGQgJ2R1cicsIEls
bGVnYWwgZHVyYXRpb24gZm9ybWF0OyBkdXJhdGlvbiBtdXN0ICIKLSAgICAgICAgICAgICAgICAg
ICAgICAiZW5kIHdpdGggJ3MnIikpKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKS0+UmVuZGVy
U3RyaW5nKCJkdXIiLCAiIiktPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChkdXJhdGlvbik7
Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclRpbWVzdGFtcER1cmF0aW9uVGVz
dCwgSW52YWxpZER1cmF0aW9uRXJyb3IyKSB7Ci0gIFRpbWVzdGFtcER1cmF0aW9uIGR1cmF0aW9u
OwotCi0gIEVYUEVDVF9DQUxMKAotICAgICAgbGlzdGVuZXJfLAotICAgICAgSW52YWxpZFZhbHVl
KAotICAgICAgICAgIF8sIFN0cmluZ1BpZWNlKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5w
cm90b2J1Zi5EdXJhdGlvbiIpLAotICAgICAgICAgIFN0cmluZ1BpZWNlKCJGaWVsZCAnZHVyJywg
SW52YWxpZCBkdXJhdGlvbiBmb3JtYXQsIGZhaWxlZCB0byBwYXJzZSAiCi0gICAgICAgICAgICAg
ICAgICAgICAgInNlY29uZHMiKSkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpLT5SZW5kZXJT
dHJpbmcoImR1ciIsICJzIiktPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChkdXJhdGlvbik7
Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclRpbWVzdGFtcER1cmF0aW9uVGVz
dCwgSW52YWxpZER1cmF0aW9uRXJyb3IzKSB7Ci0gIFRpbWVzdGFtcER1cmF0aW9uIGR1cmF0aW9u
OwotCi0gIEVYUEVDVF9DQUxMKAotICAgICAgbGlzdGVuZXJfLAotICAgICAgSW52YWxpZFZhbHVl
KAotICAgICAgICAgIF8sIFN0cmluZ1BpZWNlKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5w
cm90b2J1Zi5EdXJhdGlvbiIpLAotICAgICAgICAgIFN0cmluZ1BpZWNlKCJGaWVsZCAnZHVyJywg
SW52YWxpZCBkdXJhdGlvbiBmb3JtYXQsIGZhaWxlZCB0byAiCi0gICAgICAgICAgICAgICAgICAg
ICAgInBhcnNlIG5hbm8gc2Vjb25kcyIpKSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIiktPlJl
bmRlclN0cmluZygiZHVyIiwgIjEyMy5ERUZzIiktPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1
dChkdXJhdGlvbik7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclRpbWVzdGFt
cER1cmF0aW9uVGVzdCwgSW52YWxpZER1cmF0aW9uRXJyb3I0KSB7Ci0gIFRpbWVzdGFtcER1cmF0
aW9uIGR1cmF0aW9uOwotCi0gIEVYUEVDVF9DQUxMKAotICAgICAgbGlzdGVuZXJfLAotICAgICAg
SW52YWxpZFZhbHVlKF8sCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoInR5cGUuZ29v
Z2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIiksCi0gICAgICAgICAgICAgICAg
ICAgU3RyaW5nUGllY2UoIkZpZWxkICdkdXInLCBEdXJhdGlvbiB2YWx1ZSBleGNlZWRzIGxpbWl0
cyIpKSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIiktPlJlbmRlclN0cmluZygiZHVyIiwgIjMx
NTU3NjAwMDAwMnMiKS0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KGR1cmF0aW9uKTsKLX0K
LQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGltZXN0YW1wRHVyYXRpb25UZXN0LCBJ
bnZhbGlkRHVyYXRpb25FcnJvcjUpIHsKLSAgVGltZXN0YW1wRHVyYXRpb24gZHVyYXRpb247Ci0K
LSAgRVhQRUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUoXywK
LSAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgidHlwZS5nb29nbGVhcGlzLmNvbS9nb29n
bGUucHJvdG9idWYuRHVyYXRpb24iKSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgi
RmllbGQgJ2R1cicsIER1cmF0aW9uIHZhbHVlIGV4Y2VlZHMgbGltaXRzIikpKTsKLQotICBvd18t
PlN0YXJ0T2JqZWN0KCIiKS0+UmVuZGVyU3RyaW5nKCJkdXIiLCAiMC4xMDAwMDAwMDAxcyIpLT5F
bmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZHVyYXRpb24pOwotfQotCi1URVNUX1AoUHJvdG9T
dHJlYW1PYmplY3RXcml0ZXJUaW1lc3RhbXBEdXJhdGlvblRlc3QsCi0gICAgICAgTWlzbWF0Y2hl
ZFRpbWVzdGFtcFR5cGVJbnB1dCkgewotICBUaW1lc3RhbXBEdXJhdGlvbiB0aW1lc3RhbXA7Ci0g
IEVYUEVDVF9DQUxMKAotICAgICAgbGlzdGVuZXJfLAotICAgICAgSW52YWxpZFZhbHVlKAotICAg
ICAgICAgIF8sIFN0cmluZ1BpZWNlKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1
Zi5UaW1lc3RhbXAiKSwKLSAgICAgICAgICBTdHJpbmdQaWVjZSgKLSAgICAgICAgICAgICAgIkZp
ZWxkICd0cycsIEludmFsaWQgZGF0YSB0eXBlIGZvciB0aW1lc3RhbXAsIHZhbHVlIGlzIG51bGwi
KSkpCi0gICAgICAuV2l0aChBcmdzPDA+KEhhc09iamVjdExvY2F0aW9uKCJ0cyIpKSk7Ci0gIG93
Xy0+U3RhcnRPYmplY3QoIiIpLT5SZW5kZXJOdWxsKCJ0cyIpLT5FbmRPYmplY3QoKTsKLSAgQ2hl
Y2tPdXRwdXQodGltZXN0YW1wKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVy
VGltZXN0YW1wRHVyYXRpb25UZXN0LAotICAgICAgIE1pc21hdGNoZWREdXJhdGlvblR5cGVJbnB1
dCkgewotICBUaW1lc3RhbXBEdXJhdGlvbiBkdXJhdGlvbjsKLSAgRVhQRUNUX0NBTEwoCi0gICAg
ICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUoCi0gICAgICAgICAgXywgU3RyaW5nUGll
Y2UoInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIiksCi0gICAg
ICAgICAgU3RyaW5nUGllY2UoCi0gICAgICAgICAgICAgICJGaWVsZCAnZHVyJywgSW52YWxpZCBk
YXRhIHR5cGUgZm9yIGR1cmF0aW9uLCB2YWx1ZSBpcyBudWxsIikpKQotICAgICAgLldpdGgoQXJn
czwwPihIYXNPYmplY3RMb2NhdGlvbigiZHVyIikpKTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIikt
PlJlbmRlck51bGwoImR1ciIpLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoZHVyYXRpb24p
OwotfQotCi1jbGFzcyBQcm90b1N0cmVhbU9iamVjdFdyaXRlclN0cnVjdFRlc3QKLSAgICA6IHB1
YmxpYyBCYXNlUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFBy
b3RvU3RyZWFtT2JqZWN0V3JpdGVyU3RydWN0VGVzdCgpIHsgUmVzZXRQcm90b1dyaXRlcigpOyB9
Ci0KLSAgLy8gUmVzZXRzIFByb3RvV3JpdGVyIHdpdGggY3VycmVudCBzZXQgb2Ygb3B0aW9ucyBh
bmQgb3RoZXIgc3RhdGUuCi0gIHZvaWQgUmVzZXRQcm90b1dyaXRlcigpIHsKLSAgICB2ZWN0b3I8
Y29uc3QgRGVzY3JpcHRvcio+IGRlc2NyaXB0b3JzOwotICAgIGRlc2NyaXB0b3JzLnB1c2hfYmFj
ayhTdHJ1Y3RUeXBlOjpkZXNjcmlwdG9yKCkpOwotICAgIGRlc2NyaXB0b3JzLnB1c2hfYmFjayhn
b29nbGU6OnByb3RvYnVmOjpTdHJ1Y3Q6OmRlc2NyaXB0b3IoKSk7Ci0gICAgUmVzZXRUeXBlSW5m
byhkZXNjcmlwdG9ycyk7Ci0gIH0KLX07Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKERpZmZl
cmVudFR5cGVJbmZvU291cmNlVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvU3Ry
ZWFtT2JqZWN0V3JpdGVyU3RydWN0VGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVz
dGluZzo6VmFsdWVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rpbmc6OlVTRV9U
WVBFX1JFU09MVkVSKSk7Ci0KLS8vIFRPRE8oc2thcnZhamUpOiBXcml0ZSB0ZXN0cyBmb3IgZmFp
bHVyZSBjYXNlcy4KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclN0cnVjdFRlc3QsIFN0
cnVjdFJlbmRlclN1Y2Nlc3MpIHsKLSAgU3RydWN0VHlwZSBzdHJ1Y3RfdHlwZTsKLSAgZ29vZ2xl
Ojpwcm90b2J1Zjo6U3RydWN0KiBzID0gc3RydWN0X3R5cGUubXV0YWJsZV9vYmplY3QoKTsKLSAg
cy0+bXV0YWJsZV9maWVsZHMoKS0+b3BlcmF0b3JbXSgiazEiKS5zZXRfbnVtYmVyX3ZhbHVlKDEy
Myk7Ci0gIHMtPm11dGFibGVfZmllbGRzKCktPm9wZXJhdG9yW10oImsyIikuc2V0X2Jvb2xfdmFs
dWUodHJ1ZSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3Qo
Im9iamVjdCIpCi0gICAgICAtPlJlbmRlckRvdWJsZSgiazEiLCAxMjMpCi0gICAgICAtPlJlbmRl
ckJvb2woImsyIiwgdHJ1ZSkKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0
KCk7Ci0gIENoZWNrT3V0cHV0KHN0cnVjdF90eXBlKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFt
T2JqZWN0V3JpdGVyU3RydWN0VGVzdCwgU3RydWN0TnVsbElucHV0U3VjY2VzcykgewotICBTdHJ1
Y3RUeXBlIHN0cnVjdF90eXBlOwotICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8sCi0gICAgICAgICAg
ICAgIEludmFsaWROYW1lKF8sIFN0cmluZ1BpZWNlKCIiKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nUGllY2UoIlByb3RvIGZpZWxkcyBtdXN0IGhhdmUgYSBuYW1lLiIpKSkKLSAg
ICAgIC5XaXRoKEFyZ3M8MD4oSGFzT2JqZWN0TG9jYXRpb24oIiIpKSk7Ci0gIG93Xy0+U3RhcnRP
YmplY3QoIiIpLT5SZW5kZXJOdWxsKCIiKS0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KHN0
cnVjdF90eXBlKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyU3RydWN0VGVz
dCwgU3RydWN0SW52YWxpZElucHV0RmFpbHVyZSkgewotICBTdHJ1Y3RUeXBlIHN0cnVjdF90eXBl
OwotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGxpc3RlbmVyXywKLSAgICAgIEludmFsaWRWYWx1ZShf
LCBTdHJpbmdQaWVjZSgidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuU3RydWN0
IiksCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoInRydWUiKSkpCi0gICAgICAuV2l0
aChBcmdzPDA+KEhhc09iamVjdExvY2F0aW9uKCJvYmplY3QiKSkpOwotCi0gIG93Xy0+U3RhcnRP
YmplY3QoIiIpLT5SZW5kZXJCb29sKCJvYmplY3QiLCB0cnVlKS0+RW5kT2JqZWN0KCk7Ci0gIENo
ZWNrT3V0cHV0KHN0cnVjdF90eXBlKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3Jp
dGVyU3RydWN0VGVzdCwgU2ltcGxlUmVwZWF0ZWRTdHJ1Y3RNYXBLZXlUZXN0KSB7Ci0gIEVYUEVD
VF9DQUxMKAotICAgICAgbGlzdGVuZXJfLAotICAgICAgSW52YWxpZE5hbWUoXywgU3RyaW5nUGll
Y2UoImdCaWtlIiksCi0gICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgiUmVwZWF0ZWQgbWFw
IGtleTogJ2dCaWtlJyBpcyBhbHJlYWR5IHNldC4iKSkpOwotICBvd18tPlN0YXJ0T2JqZWN0KCIi
KQotICAgICAgLT5TdGFydE9iamVjdCgib2JqZWN0IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJn
QmlrZSIsICJ2MSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiZ0Jpa2UiLCAidjIiKQotICAgICAg
LT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLX0KLQotVEVTVF9QKFByb3RvU3Ry
ZWFtT2JqZWN0V3JpdGVyU3RydWN0VGVzdCwgUmVwZWF0ZWRTdHJ1Y3RNYXBMaXN0S2V5VGVzdCkg
ewotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGxpc3RlbmVyXywKLSAgICAgIEludmFsaWROYW1lKF8s
IFN0cmluZ1BpZWNlKCJrMSIpLAotICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIlJlcGVh
dGVkIG1hcCBrZXk6ICdrMScgaXMgYWxyZWFkeSBzZXQuIikpKTsKLSAgb3dfLT5TdGFydE9iamVj
dCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoIm9iamVjdCIpCi0gICAgICAtPlJlbmRlclN0cmlu
ZygiazEiLCAidjEiKQotICAgICAgLT5TdGFydExpc3QoImsxIikKLSAgICAgIC0+UmVuZGVyU3Ry
aW5nKCIiLCAidjIiKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAg
ICAgIC0+RW5kT2JqZWN0KCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlclN0
cnVjdFRlc3QsIFJlcGVhdGVkU3RydWN0TWFwT2JqZWN0S2V5VGVzdCkgewotICBFWFBFQ1RfQ0FM
TCgKLSAgICAgIGxpc3RlbmVyXywKLSAgICAgIEludmFsaWROYW1lKF8sIFN0cmluZ1BpZWNlKCJr
MSIpLAotICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIlJlcGVhdGVkIG1hcCBrZXk6ICdr
MScgaXMgYWxyZWFkeSBzZXQuIikpKTsKLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+
U3RhcnRPYmplY3QoIm9iamVjdCIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJrMSIpCi0gICAgICAt
PlJlbmRlclN0cmluZygic3ViX2sxIiwgInYxIikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAg
IC0+U3RhcnRPYmplY3QoImsxIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJzdWJfazIiLCAidjIi
KQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRP
YmplY3QoKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyU3RydWN0VGVzdCwg
T3B0aW9uU3RydWN0SW50QXNTdHJpbmdzVGVzdCkgewotICBTdHJ1Y3RUeXBlIHN0cnVjdF90eXBl
OwotICBnb29nbGU6OnByb3RvYnVmOjpTdHJ1Y3QqIHMgPSBzdHJ1Y3RfdHlwZS5tdXRhYmxlX29i
amVjdCgpOwotICBzLT5tdXRhYmxlX2ZpZWxkcygpLT5vcGVyYXRvcltdKCJrMSIpLnNldF9udW1i
ZXJfdmFsdWUoMTIzKTsKLSAgcy0+bXV0YWJsZV9maWVsZHMoKS0+b3BlcmF0b3JbXSgiazIiKS5z
ZXRfYm9vbF92YWx1ZSh0cnVlKTsKLSAgcy0+bXV0YWJsZV9maWVsZHMoKS0+b3BlcmF0b3JbXSgi
azMiKS5zZXRfc3RyaW5nX3ZhbHVlKCItMjIyMjIyMjIyIik7Ci0gIHMtPm11dGFibGVfZmllbGRz
KCktPm9wZXJhdG9yW10oIms0Iikuc2V0X3N0cmluZ192YWx1ZSgiMzMzMzMzMzMiKTsKLQotICBv
cHRpb25zXy5zdHJ1Y3RfaW50ZWdlcnNfYXNfc3RyaW5ncyA9IHRydWU7Ci0gIFJlc2V0UHJvdG9X
cml0ZXIoKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5TdGFydE9iamVjdCgi
b2JqZWN0IikKLSAgICAgIC0+UmVuZGVyRG91YmxlKCJrMSIsIDEyMykKLSAgICAgIC0+UmVuZGVy
Qm9vbCgiazIiLCB0cnVlKQotICAgICAgLT5SZW5kZXJJbnQ2NCgiazMiLCAtMjIyMjIyMjIyKQot
ICAgICAgLT5SZW5kZXJVaW50NjQoIms0IiwgMzMzMzMzMzMpCi0gICAgICAtPkVuZE9iamVjdCgp
Ci0gICAgICAtPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChzdHJ1Y3RfdHlwZSk7Ci19Ci0K
LWNsYXNzIFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyTWFwVGVzdCA6IHB1YmxpYyBCYXNlUHJvdG9T
dHJlYW1PYmplY3RXcml0ZXJUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFByb3RvU3RyZWFtT2JqZWN0
V3JpdGVyTWFwVGVzdCgpCi0gICAgICA6IEJhc2VQcm90b1N0cmVhbU9iamVjdFdyaXRlclRlc3Qo
TWFwSW46OmRlc2NyaXB0b3IoKSkge30KLX07Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKERp
ZmZlcmVudFR5cGVJbmZvU291cmNlVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFByb3Rv
U3RyZWFtT2JqZWN0V3JpdGVyTWFwVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVz
dGluZzo6VmFsdWVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rpbmc6OlVTRV9U
WVBFX1JFU09MVkVSKSk7Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlck1hcFRlc3Qs
IE1hcFNob3VsZE5vdEFjY2VwdExpc3QpIHsKLSAgTWFwSW4gbW07Ci0gIEVYUEVDVF9DQUxMKAot
ICAgICAgbGlzdGVuZXJfLAotICAgICAgSW52YWxpZFZhbHVlKAotICAgICAgICAgIF8sIFN0cmlu
Z1BpZWNlKCJNYXAiKSwKLSAgICAgICAgICBTdHJpbmdQaWVjZSgiQ2Fubm90IGJpbmQgYSBsaXN0
IHRvIG1hcCBmb3IgZmllbGQgJ21hcF9pbnB1dCcuIikpKTsKLSAgb3dfLT5TdGFydE9iamVjdCgi
IikKLSAgICAgIC0+U3RhcnRMaXN0KCJtYXBfaW5wdXQiKQotICAgICAgLT5SZW5kZXJTdHJpbmco
ImEiLCAiYiIpCi0gICAgICAtPkVuZExpc3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgQ2hl
Y2tPdXRwdXQobW0pOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJNYXBUZXN0
LCBSZXBlYXRlZE1hcEtleVRlc3QpIHsKLSAgRVhQRUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8s
Ci0gICAgICBJbnZhbGlkTmFtZShfLCBTdHJpbmdQaWVjZSgiazEiKSwKLSAgICAgICAgICAgICAg
ICAgIFN0cmluZ1BpZWNlKCJSZXBlYXRlZCBtYXAga2V5OiAnazEnIGlzIGFscmVhZHkgc2V0LiIp
KSk7Ci0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlJlbmRlclN0cmluZygib3RoZXIi
LCAidGVzdCIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJtYXBfaW5wdXQiKQotICAgICAgLT5SZW5k
ZXJTdHJpbmcoImsxIiwgInYxIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJrMSIsICJ2MiIpCi0g
ICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpOwotfQotCi1jbGFzcyBQcm90
b1N0cmVhbU9iamVjdFdyaXRlckFueVRlc3QgOiBwdWJsaWMgQmFzZVByb3RvU3RyZWFtT2JqZWN0
V3JpdGVyVGVzdCB7Ci0gcHJvdGVjdGVkOgotICBQcm90b1N0cmVhbU9iamVjdFdyaXRlckFueVRl
c3QoKSB7Ci0gICAgdmVjdG9yPGNvbnN0IERlc2NyaXB0b3IqPiBkZXNjcmlwdG9yczsKLSAgICBk
ZXNjcmlwdG9ycy5wdXNoX2JhY2soQW55T3V0OjpkZXNjcmlwdG9yKCkpOwotICAgIGRlc2NyaXB0
b3JzLnB1c2hfYmFjayhnb29nbGU6OnByb3RvYnVmOjpEb3VibGVWYWx1ZTo6ZGVzY3JpcHRvcigp
KTsKLSAgICBkZXNjcmlwdG9ycy5wdXNoX2JhY2soZ29vZ2xlOjpwcm90b2J1Zjo6VGltZXN0YW1w
OjpkZXNjcmlwdG9yKCkpOwotICAgIGRlc2NyaXB0b3JzLnB1c2hfYmFjayhnb29nbGU6OnByb3Rv
YnVmOjpBbnk6OmRlc2NyaXB0b3IoKSk7Ci0gICAgZGVzY3JpcHRvcnMucHVzaF9iYWNrKGdvb2ds
ZTo6cHJvdG9idWY6OlZhbHVlOjpkZXNjcmlwdG9yKCkpOwotICAgIGRlc2NyaXB0b3JzLnB1c2hf
YmFjayhnb29nbGU6OnByb3RvYnVmOjpTdHJ1Y3Q6OmRlc2NyaXB0b3IoKSk7Ci0gICAgUmVzZXRU
eXBlSW5mbyhkZXNjcmlwdG9ycyk7Ci0gIH0KLX07Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9Q
KERpZmZlcmVudFR5cGVJbmZvU291cmNlVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBy
b3RvU3RyZWFtT2JqZWN0V3JpdGVyQW55VGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDo6
dGVzdGluZzo6VmFsdWVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rpbmc6OlVT
RV9UWVBFX1JFU09MVkVSKSk7Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlckFueVRl
c3QsIEFueVJlbmRlclN1Y2Nlc3MpIHsKLSAgQW55T3V0IGFueTsKLSAgZ29vZ2xlOjpwcm90b2J1
Zjo6QW55KiBhbnlfdHlwZSA9IGFueS5tdXRhYmxlX2FueSgpOwotICBhbnlfdHlwZS0+c2V0X3R5
cGVfdXJsKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZSIp
OwotICBnb29nbGU6OnByb3RvYnVmOjpEb3VibGVWYWx1ZSBkOwotICBkLnNldF92YWx1ZSg0MC4y
KTsKLSAgYW55X3R5cGUtPnNldF92YWx1ZShkLlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotCi0gIG93
Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJhbnkiKQotICAgICAgLT5S
ZW5kZXJTdHJpbmcoIkB0eXBlIiwgInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVm
LkRvdWJsZVZhbHVlIikKLSAgICAgIC0+UmVuZGVyRG91YmxlKCJ2YWx1ZSIsIDQwLjIpCi0gICAg
ICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChhbnkp
OwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJBbnlUZXN0LCBSZWN1cnNpdmVB
bnkpIHsKLSAgQW55T3V0IG91dDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpBbnkqIGFueSA9IG91
dC5tdXRhYmxlX2FueSgpOwotICBhbnktPnNldF90eXBlX3VybCgidHlwZS5nb29nbGVhcGlzLmNv
bS9nb29nbGUucHJvdG9idWYuQW55Iik7Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpBbnkgbmVz
dGVkX2FueTsKLSAgbmVzdGVkX2FueS5zZXRfdHlwZV91cmwoCi0gICAgICAidHlwZS5nb29nbGVh
cGlzLmNvbS9nb29nbGUucHJvdG9idWYudGVzdGluZy5hbnlzLkFueU0iKTsKLQotICBBbnlNIG07
Ci0gIG0uc2V0X2ZvbygiZm9vdmFsdWUiKTsKLSAgbmVzdGVkX2FueS5zZXRfdmFsdWUobS5TZXJp
YWxpemVBc1N0cmluZygpKTsKLQotICBhbnktPnNldF92YWx1ZShuZXN0ZWRfYW55LlNlcmlhbGl6
ZUFzU3RyaW5nKCkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAtPlN0YXJ0T2Jq
ZWN0KCJhbnkiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIkB0eXBlIiwgInR5cGUuZ29vZ2xlYXBp
cy5jb20vZ29vZ2xlLnByb3RvYnVmLkFueSIpCi0gICAgICAtPlN0YXJ0T2JqZWN0KCJ2YWx1ZSIp
Ci0gICAgICAtPlJlbmRlclN0cmluZygiQHR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgInR5
cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLnRlc3RpbmcuYW55cy5BbnlNIikKLSAg
ICAgIC0+UmVuZGVyU3RyaW5nKCJmb28iLCAiZm9vdmFsdWUiKQotICAgICAgLT5FbmRPYmplY3Qo
KQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLX0KLQotVEVTVF9Q
KFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyQW55VGVzdCwgRG91YmxlUmVjdXJzaXZlQW55KSB7Ci0g
IEFueU91dCBvdXQ7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55KiBhbnkgPSBvdXQubXV0YWJs
ZV9hbnkoKTsKLSAgYW55LT5zZXRfdHlwZV91cmwoInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xl
LnByb3RvYnVmLkFueSIpOwotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55IG5lc3RlZF9hbnk7
Ci0gIG5lc3RlZF9hbnkuc2V0X3R5cGVfdXJsKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5w
cm90b2J1Zi5BbnkiKTsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OkFueSBzZWNvbmRfbmVzdGVk
X2FueTsKLSAgc2Vjb25kX25lc3RlZF9hbnkuc2V0X3R5cGVfdXJsKAotICAgICAgInR5cGUuZ29v
Z2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLnRlc3RpbmcuYW55cy5BbnlNIik7Ci0KLSAgQW55
TSBtOwotICBtLnNldF9mb28oImZvb3ZhbHVlIik7Ci0gIHNlY29uZF9uZXN0ZWRfYW55LnNldF92
YWx1ZShtLlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotCi0gIG5lc3RlZF9hbnkuc2V0X3ZhbHVlKHNl
Y29uZF9uZXN0ZWRfYW55LlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotICBhbnktPnNldF92YWx1ZShu
ZXN0ZWRfYW55LlNlcmlhbGl6ZUFzU3RyaW5nKCkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIp
Ci0gICAgICAtPlN0YXJ0T2JqZWN0KCJhbnkiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIkB0eXBl
IiwgInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkFueSIpCi0gICAgICAtPlN0
YXJ0T2JqZWN0KCJ2YWx1ZSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiQHR5cGUiLCAidHlwZS5n
b29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuQW55IikKLSAgICAgIC0+U3RhcnRPYmplY3Qo
InZhbHVlIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJAdHlwZSIsCi0gICAgICAgICAgICAgICAg
ICAgICAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYudGVzdGluZy5hbnlzLkFu
eU0iKQotICAgICAgLT5SZW5kZXJTdHJpbmcoImZvbyIsICJmb292YWx1ZSIpCi0gICAgICAtPkVu
ZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAg
ICAtPkVuZE9iamVjdCgpOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJBbnlU
ZXN0LCBFbXB0eUFueUZyb21FbXB0eU9iamVjdCkgewotICBBbnlPdXQgb3V0OwotICBvdXQubXV0
YWJsZV9hbnkoKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKS0+U3RhcnRPYmplY3QoImFueSIp
LT5FbmRPYmplY3QoKS0+RW5kT2JqZWN0KCk7Ci0KLSAgQ2hlY2tPdXRwdXQob3V0LCAyKTsKLX0K
LQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyQW55VGVzdCwgQW55V2l0aG91dFR5cGVV
cmxGYWlsczEpIHsKLSAgQW55T3V0IGFueTsKLQotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGxpc3Rl
bmVyXywKLSAgICAgIEludmFsaWRWYWx1ZShfLCBTdHJpbmdQaWVjZSgiQW55IiksCi0gICAgICAg
ICAgICAgICAgICAgU3RyaW5nUGllY2UoIk1pc3Npbmcgb3IgaW52YWxpZCBAdHlwZSBmb3IgYW55
IGZpZWxkIGluICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ29vZ2xlLnByb3Rv
YnVmLnRlc3RpbmcuYW55cy5BbnlPdXQiKSkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0g
ICAgICAtPlN0YXJ0T2JqZWN0KCJhbnkiKQotICAgICAgLT5TdGFydE9iamVjdCgiYW5vdGhlciIp
Ci0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9i
amVjdCgpOwotICBDaGVja091dHB1dChhbnkpOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXJBbnlUZXN0LCBBbnlXaXRob3V0VHlwZVVybEZhaWxzMikgewotICBBbnlPdXQgYW55
OwotCi0gIEVYUEVDVF9DQUxMKAotICAgICAgbGlzdGVuZXJfLAotICAgICAgSW52YWxpZFZhbHVl
KF8sIFN0cmluZ1BpZWNlKCJBbnkiKSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgi
TWlzc2luZyBvciBpbnZhbGlkIEB0eXBlIGZvciBhbnkgZmllbGQgaW4gIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYudGVzdGluZy5hbnlzLkFueU91dCIp
KSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoImFueSIp
Ci0gICAgICAtPlN0YXJ0TGlzdCgiYW5vdGhlciIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAg
ICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChhbnkp
OwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJBbnlUZXN0LCBBbnlXaXRob3V0
VHlwZVVybEZhaWxzMykgewotICBBbnlPdXQgYW55OwotCi0gIEVYUEVDVF9DQUxMKAotICAgICAg
bGlzdGVuZXJfLAotICAgICAgSW52YWxpZFZhbHVlKF8sIFN0cmluZ1BpZWNlKCJBbnkiKSwKLSAg
ICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgiTWlzc2luZyBvciBpbnZhbGlkIEB0eXBlIGZv
ciBhbnkgZmllbGQgaW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnb29nbGUu
cHJvdG9idWYudGVzdGluZy5hbnlzLkFueU91dCIpKSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgi
IikKLSAgICAgIC0+U3RhcnRPYmplY3QoImFueSIpCi0gICAgICAtPlJlbmRlclN0cmluZygidmFs
dWUiLCAic29tZXZhbHVlIikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0
KCk7Ci0gIENoZWNrT3V0cHV0KGFueSk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdy
aXRlckFueVRlc3QsIEFueVdpdGhJbnZhbGlkVHlwZVVybEZhaWxzKSB7Ci0gIEFueU91dCBhbnk7
Ci0KLSAgRVhQRUNUX0NBTEwobGlzdGVuZXJfLAotICAgICAgICAgICAgICBJbnZhbGlkVmFsdWUo
Ci0gICAgICAgICAgICAgICAgICBfLCBTdHJpbmdQaWVjZSgiQW55IiksCi0gICAgICAgICAgICAg
ICAgICBTdHJpbmdQaWVjZSgiSW52YWxpZCB0eXBlIFVSTCwgdHlwZSBVUkxzIG11c3QgYmUgb2Yg
dGhlIGZvcm0gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIid0eXBlLmdvb2dsZWFw
aXMuY29tLzx0eXBlbmFtZT4nLCBnb3Q6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ0eXBlLm90aGVyLmNvbS9zb21lLlR5cGUiKSkpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIp
Ci0gICAgICAtPlN0YXJ0T2JqZWN0KCJhbnkiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIkB0eXBl
IiwgInR5cGUub3RoZXIuY29tL3NvbWUuVHlwZSIpCi0gICAgICAtPlJlbmRlckRvdWJsZSgidmFs
dWUiLCA0MC4yKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAg
Q2hlY2tPdXRwdXQoYW55KTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyQW55
VGVzdCwgQW55V2l0aFVua25vd25UeXBlRmFpbHMpIHsKLSAgQW55T3V0IGFueTsKLQotICBFWFBF
Q1RfQ0FMTCgKLSAgICAgIGxpc3RlbmVyXywKLSAgICAgIEludmFsaWRWYWx1ZShfLCBTdHJpbmdQ
aWVjZSgiQW55IiksCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIkludmFsaWQgdHlw
ZSBVUkwsIHVua25vd24gdHlwZTogc29tZS5UeXBlIikpKTsKLSAgb3dfLT5TdGFydE9iamVjdCgi
IikKLSAgICAgIC0+U3RhcnRPYmplY3QoImFueSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiQHR5
cGUiLCAidHlwZS5nb29nbGVhcGlzLmNvbS9zb21lLlR5cGUiKQotICAgICAgLT5SZW5kZXJEb3Vi
bGUoInZhbHVlIiwgNDAuMikKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0
KCk7Ci0gIENoZWNrT3V0cHV0KGFueSk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdy
aXRlckFueVRlc3QsIEFueU51bGxJbnB1dEZhaWxzKSB7Ci0gIEFueU91dCBhbnk7Ci0KLSAgb3df
LT5TdGFydE9iamVjdCgiIiktPlJlbmRlck51bGwoImFueSIpLT5FbmRPYmplY3QoKTsKLSAgQ2hl
Y2tPdXRwdXQoYW55KTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyQW55VGVz
dCwgQW55V2VsbEtub3duVHlwZUVycm9yVGVzdCkgewotICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8s
IEludmFsaWRWYWx1ZShfLCBTdHJpbmdQaWVjZSgiQW55IiksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJJbnZhbGlkIHRpbWUgZm9ybWF0OiAiKSkp
OwotCi0gIEFueU91dCBhbnk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OkFueSogYW55X3R5cGUgPSBh
bnkubXV0YWJsZV9hbnkoKTsKLSAgYW55X3R5cGUtPnNldF90eXBlX3VybCgidHlwZS5nb29nbGVh
cGlzLmNvbS9nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIik7Ci0KLSAgb3dfLT5TdGFydE9iamVj
dCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoImFueSIpCi0gICAgICAtPlJlbmRlclN0cmluZygi
QHR5cGUiLCAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIikK
LSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ2YWx1ZSIsICIiKQotICAgICAgLT5FbmRPYmplY3QoKQot
ICAgICAgLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQoYW55KTsKLX0KLQotLy8gVGVzdCB0
aGUgZm9sbG93aW5nIGNhc2U6Ci0vLwotLy8gewotLy8gICAiYW55IjogewotLy8gICAgICJAdHlw
ZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5WYWx1ZSIsCi0vLyAgICAg
InZhbHVlIjogImFiYyIKLS8vICAgfQotLy8gfQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3Jp
dGVyQW55VGVzdCwgQW55V2l0aE5lc3RlZFByaW1pdGl2ZVZhbHVlKSB7Ci0gIEFueU91dCBvdXQ7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QW55KiBhbnkgPSBvdXQubXV0YWJsZV9hbnkoKTsKLQot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OlZhbHVlIHZhbHVlOwotICB2YWx1ZS5zZXRfc3RyaW5nX3Zh
bHVlKCJhYmMiKTsKLSAgYW55LT5QYWNrRnJvbSh2YWx1ZSk7Ci0KLSAgb3dfLT5TdGFydE9iamVj
dCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoImFueSIpCi0gICAgICAtPlJlbmRlclN0cmluZygi
QHR5cGUiLCAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVmFsdWUiKQotICAg
ICAgLT5SZW5kZXJTdHJpbmcoInZhbHVlIiwgImFiYyIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0g
ICAgICAtPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChvdXQpOwotfQotCi0vLyBUZXN0IHRo
ZSBmb2xsb3dpbmcgY2FzZToKLS8vCi0vLyB7Ci0vLyAgICJhbnkiOiB7Ci0vLyAgICAgIkB0eXBl
IjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlZhbHVlIiwKLS8vICAgICAi
dmFsdWUiOiB7Ci0vLyAgICAgICAiZm9vIjogImFiYyIKLS8vICAgICB9Ci0vLyAgIH0KLS8vIH0K
LVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlckFueVRlc3QsIEFueVdpdGhOZXN0ZWRPYmpl
Y3RWYWx1ZSkgewotICBBbnlPdXQgb3V0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkFueSogYW55
ID0gb3V0Lm11dGFibGVfYW55KCk7Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpWYWx1ZSB2YWx1
ZTsKLSAgKCp2YWx1ZS5tdXRhYmxlX3N0cnVjdF92YWx1ZSgpLT5tdXRhYmxlX2ZpZWxkcygpKVsi
Zm9vIl0uc2V0X3N0cmluZ192YWx1ZSgKLSAgICAgICJhYmMiKTsKLSAgYW55LT5QYWNrRnJvbSh2
YWx1ZSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoImFu
eSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiQHR5cGUiLCAidHlwZS5nb29nbGVhcGlzLmNvbS9n
b29nbGUucHJvdG9idWYuVmFsdWUiKQotICAgICAgLT5TdGFydE9iamVjdCgidmFsdWUiKQotICAg
ICAgLT5SZW5kZXJTdHJpbmcoImZvbyIsICJhYmMiKQotICAgICAgLT5FbmRPYmplY3QoKQotICAg
ICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAgQ2hlY2tPdXRwdXQob3V0
KTsKLX0KLQotLy8gVGVzdCB0aGUgZm9sbG93aW5nIGNhc2U6Ci0vLwotLy8gewotLy8gICAiYW55
IjogewotLy8gICAgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1
Zi5WYWx1ZSIsCi0vLyAgICAgInZhbHVlIjogWyJoZWxsbyJdLAotLy8gICB9Ci0vLyB9Ci1URVNU
X1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJBbnlUZXN0LCBBbnlXaXRoTmVzdGVkQXJyYXlWYWx1
ZSkgewotICBBbnlPdXQgb3V0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OkFueSogYW55ID0gb3V0
Lm11dGFibGVfYW55KCk7Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpWYWx1ZSB2YWx1ZTsKLSAg
dmFsdWUubXV0YWJsZV9saXN0X3ZhbHVlKCktPmFkZF92YWx1ZXMoKS0+c2V0X3N0cmluZ192YWx1
ZSgiaGVsbG8iKTsKLSAgYW55LT5QYWNrRnJvbSh2YWx1ZSk7Ci0KLSAgb3dfLT5TdGFydE9iamVj
dCgiIikKLSAgICAgIC0+U3RhcnRPYmplY3QoImFueSIpCi0gICAgICAtPlJlbmRlclN0cmluZygi
QHR5cGUiLCAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVmFsdWUiKQotICAg
ICAgLT5TdGFydExpc3QoInZhbHVlIikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCIiLCAiaGVsbG8i
KQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2Jq
ZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KG91dCk7Ci19Ci0KLS8v
IFRlc3QgdGhlIGZvbGxvd2luZyBjYXNlOgotLy8KLS8vIHsKLS8vICAgImFueSI6IHsKLS8vICAg
ICAiQHR5cGUiOiAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVmFsdWUiLAot
Ly8gICAgICJub3RfdmFsdWUiOiAiIgotLy8gICB9Ci0vLyB9Ci1URVNUX1AoUHJvdG9TdHJlYW1P
YmplY3RXcml0ZXJBbnlUZXN0LAotICAgICAgIEFueVdlbGxLbm93blR5cGVzTm9WYWx1ZUZpZWxk
Rm9yUHJpbWl0aXZlKSB7Ci0gIEVYUEVDVF9DQUxMKAotICAgICAgbGlzdGVuZXJfLAotICAgICAg
SW52YWxpZFZhbHVlKAotICAgICAgICAgIF8sIFN0cmluZ1BpZWNlKCJBbnkiKSwKLSAgICAgICAg
ICBTdHJpbmdQaWVjZSgiRXhwZWN0IGEgXCJ2YWx1ZVwiIGZpZWxkIGZvciB3ZWxsLWtub3duIHR5
cGVzLiIpKSk7Ci0gIEFueU91dCBhbnk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OkFueSogYW55X3R5
cGUgPSBhbnkubXV0YWJsZV9hbnkoKTsKLSAgYW55X3R5cGUtPnNldF90eXBlX3VybCgidHlwZS5n
b29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuVmFsdWUiKTsKLQotICBvd18tPlN0YXJ0T2Jq
ZWN0KCIiKQotICAgICAgLT5TdGFydE9iamVjdCgiYW55IikKLSAgICAgIC0+UmVuZGVyU3RyaW5n
KCJAdHlwZSIsICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5WYWx1ZSIpCi0g
ICAgICAtPlJlbmRlclN0cmluZygibm90X3ZhbHVlIiwgIiIpCi0gICAgICAtPkVuZE9iamVjdCgp
Ci0gICAgICAtPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChhbnkpOwotfQotCi0vLyBUZXN0
IHRoZSBmb2xsb3dpbmcgY2FzZToKLS8vCi0vLyB7Ci0vLyAgICJhbnkiOiB7Ci0vLyAgICAgIkB0
eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlZhbHVlIiwKLS8vICAg
ICAibm90X3ZhbHVlIjoge30KLS8vICAgfQotLy8gfQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0
V3JpdGVyQW55VGVzdCwgQW55V2VsbEtub3duVHlwZXNOb1ZhbHVlRmllbGRGb3JPYmplY3QpIHsK
LSAgRVhQRUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUoCi0g
ICAgICAgICAgXywgU3RyaW5nUGllY2UoIkFueSIpLAotICAgICAgICAgIFN0cmluZ1BpZWNlKCJF
eHBlY3QgYSBcInZhbHVlXCIgZmllbGQgZm9yIHdlbGwta25vd24gdHlwZXMuIikpKTsKLSAgQW55
T3V0IGFueTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6QW55KiBhbnlfdHlwZSA9IGFueS5tdXRhYmxl
X2FueSgpOwotICBhbnlfdHlwZS0+c2V0X3R5cGVfdXJsKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dv
b2dsZS5wcm90b2J1Zi5WYWx1ZSIpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAt
PlN0YXJ0T2JqZWN0KCJhbnkiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIkB0eXBlIiwgInR5cGUu
Z29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlZhbHVlIikKLSAgICAgIC0+U3RhcnRPYmpl
Y3QoIm5vdF92YWx1ZSIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgp
Ci0gICAgICAtPkVuZE9iamVjdCgpOwotICBDaGVja091dHB1dChhbnkpOwotfQotCi0vLyBUZXN0
IHRoZSBmb2xsb3dpbmcgY2FzZToKLS8vCi0vLyB7Ci0vLyAgICJhbnkiOiB7Ci0vLyAgICAgIkB0
eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlZhbHVlIiwKLS8vICAg
ICAibm90X3ZhbHVlIjogW10sCi0vLyAgIH0KLS8vIH0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVj
dFdyaXRlckFueVRlc3QsIEFueVdlbGxLbm93blR5cGVzTm9WYWx1ZUZpZWxkRm9yQXJyYXkpIHsK
LSAgRVhQRUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUoCi0g
ICAgICAgICAgXywgU3RyaW5nUGllY2UoIkFueSIpLAotICAgICAgICAgIFN0cmluZ1BpZWNlKCJF
eHBlY3QgYSBcInZhbHVlXCIgZmllbGQgZm9yIHdlbGwta25vd24gdHlwZXMuIikpKTsKLSAgQW55
T3V0IGFueTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6QW55KiBhbnlfdHlwZSA9IGFueS5tdXRhYmxl
X2FueSgpOwotICBhbnlfdHlwZS0+c2V0X3R5cGVfdXJsKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dv
b2dsZS5wcm90b2J1Zi5WYWx1ZSIpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpCi0gICAgICAt
PlN0YXJ0T2JqZWN0KCJhbnkiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoIkB0eXBlIiwgInR5cGUu
Z29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLlZhbHVlIikKLSAgICAgIC0+U3RhcnRMaXN0
KCJub3RfdmFsdWUiKQotICAgICAgLT5FbmRMaXN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCkKLSAg
ICAgIC0+RW5kT2JqZWN0KCkKLSAgICAgIC0+RW5kT2JqZWN0KCk7Ci0gIENoZWNrT3V0cHV0KGFu
eSk7Ci19Ci0KLS8vIFRlc3QgdGhlIGZvbGxvd2luZyBjYXNlOgotLy8KLS8vIHsKLS8vICAgImFu
eSI6IHsKLS8vICAgICAiQHR5cGUiOiAidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9i
dWYuU3RydWN0IiwKLS8vICAgICAidmFsdWUiOiAiIiwKLS8vICAgfQotLy8gfQotVEVTVF9QKFBy
b3RvU3RyZWFtT2JqZWN0V3JpdGVyQW55VGVzdCwgQW55V2VsbEtub3duVHlwZXNFeHBlY3RPYmpl
Y3RGb3JTdHJ1Y3QpIHsKLSAgRVhQRUNUX0NBTEwobGlzdGVuZXJfLCBJbnZhbGlkVmFsdWUoXywg
U3RyaW5nUGllY2UoIkFueSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdQaWVjZSgiRXhwZWN0IGEgSlNPTiBvYmplY3QuIikpKTsKLSAgQW55T3V0IGFueTsK
LSAgZ29vZ2xlOjpwcm90b2J1Zjo6QW55KiBhbnlfdHlwZSA9IGFueS5tdXRhYmxlX2FueSgpOwot
ICBhbnlfdHlwZS0+c2V0X3R5cGVfdXJsKCJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90
b2J1Zi5TdHJ1Y3QiKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKQotICAgICAgLT5TdGFydE9i
amVjdCgiYW55IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJAdHlwZSIsICJ0eXBlLmdvb2dsZWFw
aXMuY29tL2dvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiKQotICAgICAgLT5SZW5kZXJTdHJpbmcoInZh
bHVlIiwgIiIpCi0gICAgICAtPkVuZE9iamVjdCgpCi0gICAgICAtPkVuZE9iamVjdCgpOwotICBD
aGVja091dHB1dChhbnkpOwotfQotCi0vLyBUZXN0IHRoZSBmb2xsb3dpbmcgY2FzZToKLS8vCi0v
LyB7Ci0vLyAgICJhbnkiOiB7Ci0vLyAgICAgIkB0eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20v
Z29vZ2xlLnByb3RvYnVmLkFueSIsCi0vLyAgICAgInZhbHVlIjogIiIsCi0vLyAgIH0KLS8vIH0K
LVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlckFueVRlc3QsIEFueVdlbGxLbm93blR5cGVz
RXhwZWN0T2JqZWN0Rm9yQW55KSB7Ci0gIEVYUEVDVF9DQUxMKGxpc3RlbmVyXywgSW52YWxpZFZh
bHVlKF8sIFN0cmluZ1BpZWNlKCJBbnkiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nUGllY2UoIkV4cGVjdCBhIEpTT04gb2JqZWN0LiIpKSk7Ci0gIEFueU91
dCBhbnk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OkFueSogYW55X3R5cGUgPSBhbnkubXV0YWJsZV9h
bnkoKTsKLSAgYW55X3R5cGUtPnNldF90eXBlX3VybCgidHlwZS5nb29nbGVhcGlzLmNvbS9nb29n
bGUucHJvdG9idWYuQW55Iik7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIikKLSAgICAgIC0+U3Rh
cnRPYmplY3QoImFueSIpCi0gICAgICAtPlJlbmRlclN0cmluZygiQHR5cGUiLCAidHlwZS5nb29n
bGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuQW55IikKLSAgICAgIC0+UmVuZGVyU3RyaW5nKCJ2
YWx1ZSIsICIiKQotICAgICAgLT5FbmRPYmplY3QoKQotICAgICAgLT5FbmRPYmplY3QoKTsKLSAg
Q2hlY2tPdXRwdXQoYW55KTsKLX0KLQotY2xhc3MgUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJGaWVs
ZE1hc2tUZXN0Ci0gICAgOiBwdWJsaWMgQmFzZVByb3RvU3RyZWFtT2JqZWN0V3JpdGVyVGVzdCB7
Ci0gcHJvdGVjdGVkOgotICBQcm90b1N0cmVhbU9iamVjdFdyaXRlckZpZWxkTWFza1Rlc3QoKSB7
Ci0gICAgdmVjdG9yPGNvbnN0IERlc2NyaXB0b3IqPiBkZXNjcmlwdG9yczsKLSAgICBkZXNjcmlw
dG9ycy5wdXNoX2JhY2soRmllbGRNYXNrVGVzdDo6ZGVzY3JpcHRvcigpKTsKLSAgICBkZXNjcmlw
dG9ycy5wdXNoX2JhY2soZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRNYXNrOjpkZXNjcmlwdG9yKCkp
OwotICAgIFJlc2V0VHlwZUluZm8oZGVzY3JpcHRvcnMpOwotICB9Ci19OwotCi1JTlNUQU5USUFU
RV9URVNUX0NBU0VfUChEaWZmZXJlbnRUeXBlSW5mb1NvdXJjZVRlc3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBQcm90b1N0cmVhbU9iamVjdFdyaXRlckZpZWxkTWFza1Rlc3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlZhbHVlcygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXN0aW5nOjpVU0VfVFlQRV9SRVNPTFZFUikpOwotCi1URVNUX1AoUHJvdG9TdHJl
YW1PYmplY3RXcml0ZXJGaWVsZE1hc2tUZXN0LCBTaW1wbGVGaWVsZE1hc2tUZXN0KSB7Ci0gIEZp
ZWxkTWFza1Rlc3QgZXhwZWN0ZWQ7Ci0gIGV4cGVjdGVkLnNldF9pZCgiMSIpOwotICBleHBlY3Rl
ZC5tdXRhYmxlX3NpbmdsZV9tYXNrKCktPmFkZF9wYXRocygicGF0aDEiKTsKLQotICBvd18tPlN0
YXJ0T2JqZWN0KCIiKTsKLSAgb3dfLT5SZW5kZXJTdHJpbmcoImlkIiwgIjEiKTsKLSAgb3dfLT5S
ZW5kZXJTdHJpbmcoInNpbmdsZV9tYXNrIiwgInBhdGgxIik7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7
Ci0KLSAgQ2hlY2tPdXRwdXQoZXhwZWN0ZWQpOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXJGaWVsZE1hc2tUZXN0LCBNdXRpcGxlTWFza3NJbkNvbXBhY3RGb3JtKSB7Ci0gIEZp
ZWxkTWFza1Rlc3QgZXhwZWN0ZWQ7Ci0gIGV4cGVjdGVkLnNldF9pZCgiMSIpOwotICBleHBlY3Rl
ZC5tdXRhYmxlX3NpbmdsZV9tYXNrKCktPmFkZF9wYXRocygiY2FtZWxfY2FzZTEiKTsKLSAgZXhw
ZWN0ZWQubXV0YWJsZV9zaW5nbGVfbWFzaygpLT5hZGRfcGF0aHMoImNhbWVsX2Nhc2UyIik7Ci0g
IGV4cGVjdGVkLm11dGFibGVfc2luZ2xlX21hc2soKS0+YWRkX3BhdGhzKCJjYW1lbF9jYXNlMyIp
OwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpOwotICBvd18tPlJlbmRlclN0cmluZygiaWQiLCAi
MSIpOwotICBvd18tPlJlbmRlclN0cmluZygic2luZ2xlX21hc2siLCAiY2FtZWxDYXNlMSxjYW1l
bENhc2UyLGNhbWVsQ2FzZTMiKTsKLSAgb3dfLT5FbmRPYmplY3QoKTsKLQotICBDaGVja091dHB1
dChleHBlY3RlZCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlckZpZWxkTWFz
a1Rlc3QsIFJlcGVhdGVkRmllbGRNYXNrVGVzdCkgewotICBGaWVsZE1hc2tUZXN0IGV4cGVjdGVk
OwotICBleHBlY3RlZC5zZXRfaWQoIjEiKTsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGRNYXNr
KiBtYXNrID0gZXhwZWN0ZWQuYWRkX3JlcGVhdGVkX21hc2soKTsKLSAgbWFzay0+YWRkX3BhdGhz
KCJmaWVsZDEiKTsKLSAgbWFzay0+YWRkX3BhdGhzKCJmaWVsZDIiKTsKLSAgZXhwZWN0ZWQuYWRk
X3JlcGVhdGVkX21hc2soKS0+YWRkX3BhdGhzKCJmaWVsZDMiKTsKLQotICBvd18tPlN0YXJ0T2Jq
ZWN0KCIiKTsKLSAgb3dfLT5SZW5kZXJTdHJpbmcoImlkIiwgIjEiKTsKLSAgb3dfLT5TdGFydExp
c3QoInJlcGVhdGVkX21hc2siKTsKLSAgb3dfLT5SZW5kZXJTdHJpbmcoIiIsICJmaWVsZDEsZmll
bGQyIik7Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCIiLCAiZmllbGQzIik7Ci0gIG93Xy0+RW5kTGlz
dCgpOwotICBvd18tPkVuZE9iamVjdCgpOwotCi0gIENoZWNrT3V0cHV0KGV4cGVjdGVkKTsKLX0K
LQotVEVTVF9QKFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyRmllbGRNYXNrVGVzdCwgRW1wdHlGaWVs
ZE1hc2tUZXN0KSB7Ci0gIEZpZWxkTWFza1Rlc3QgZXhwZWN0ZWQ7Ci0gIGV4cGVjdGVkLnNldF9p
ZCgiMSIpOwotCi0gIG93Xy0+U3RhcnRPYmplY3QoIiIpOwotICBvd18tPlJlbmRlclN0cmluZygi
aWQiLCAiMSIpOwotICBvd18tPlJlbmRlclN0cmluZygic2luZ2xlX21hc2siLCAiIik7Ci0gIG93
Xy0+RW5kT2JqZWN0KCk7Ci0KLSAgQ2hlY2tPdXRwdXQoZXhwZWN0ZWQpOwotfQotCi1URVNUX1Ao
UHJvdG9TdHJlYW1PYmplY3RXcml0ZXJGaWVsZE1hc2tUZXN0LCBNYXNrVXNpbmdBcGlhcnlTdHls
ZVNob3VsZFdvcmspIHsKLSAgRmllbGRNYXNrVGVzdCBleHBlY3RlZDsKLSAgZXhwZWN0ZWQuc2V0
X2lkKCIxIik7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIik7Ci0gIG93Xy0+UmVuZGVyU3RyaW5n
KCJpZCIsICIxIik7Ci0gIC8vIENhc2UxCi0gIG93Xy0+UmVuZGVyU3RyaW5nKCJzaW5nbGVfbWFz
ayIsCi0gICAgICAgICAgICAgICAgICAgICJvdXRlckZpZWxkKGNhbWVsQ2FzZTEsY2FtZWxDYXNl
MixjYW1lbENhc2UzKSIpOwotICBleHBlY3RlZC5tdXRhYmxlX3NpbmdsZV9tYXNrKCktPmFkZF9w
YXRocygib3V0ZXJfZmllbGQuY2FtZWxfY2FzZTEiKTsKLSAgZXhwZWN0ZWQubXV0YWJsZV9zaW5n
bGVfbWFzaygpLT5hZGRfcGF0aHMoIm91dGVyX2ZpZWxkLmNhbWVsX2Nhc2UyIik7Ci0gIGV4cGVj
dGVkLm11dGFibGVfc2luZ2xlX21hc2soKS0+YWRkX3BhdGhzKCJvdXRlcl9maWVsZC5jYW1lbF9j
YXNlMyIpOwotCi0gIG93Xy0+U3RhcnRMaXN0KCJyZXBlYXRlZF9tYXNrIik7Ci0KLSAgb3dfLT5S
ZW5kZXJTdHJpbmcoIiIsICJhKGZpZWxkMSxmaWVsZDIpIik7Ci0gIGdvb2dsZTo6cHJvdG9idWY6
OkZpZWxkTWFzayogbWFzayA9IGV4cGVjdGVkLmFkZF9yZXBlYXRlZF9tYXNrKCk7Ci0gIG1hc2st
PmFkZF9wYXRocygiYS5maWVsZDEiKTsKLSAgbWFzay0+YWRkX3BhdGhzKCJhLmZpZWxkMiIpOwot
Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCIiLCAiYShmaWVsZDMpIik7Ci0gIG1hc2sgPSBleHBlY3Rl
ZC5hZGRfcmVwZWF0ZWRfbWFzaygpOwotICBtYXNrLT5hZGRfcGF0aHMoImEuZmllbGQzIik7Ci0K
LSAgb3dfLT5SZW5kZXJTdHJpbmcoIiIsICJhKCkiKTsKLSAgZXhwZWN0ZWQuYWRkX3JlcGVhdGVk
X21hc2soKTsKLQotICBvd18tPlJlbmRlclN0cmluZygiIiwgImEoLCkiKTsKLSAgZXhwZWN0ZWQu
YWRkX3JlcGVhdGVkX21hc2soKTsKLQotICBvd18tPlJlbmRlclN0cmluZygiIiwgImEoZmllbGQx
KGZpZWxkMihmaWVsZDMpKSkiKTsKLSAgbWFzayA9IGV4cGVjdGVkLmFkZF9yZXBlYXRlZF9tYXNr
KCk7Ci0gIG1hc2stPmFkZF9wYXRocygiYS5maWVsZDEuZmllbGQyLmZpZWxkMyIpOwotCi0gIG93
Xy0+UmVuZGVyU3RyaW5nKCIiLCAiYShmaWVsZDEoZmllbGQyKGZpZWxkMyxmaWVsZDQpLGZpZWxk
NSksZmllbGQ2KSIpOwotICBtYXNrID0gZXhwZWN0ZWQuYWRkX3JlcGVhdGVkX21hc2soKTsKLSAg
bWFzay0+YWRkX3BhdGhzKCJhLmZpZWxkMS5maWVsZDIuZmllbGQzIik7Ci0gIG1hc2stPmFkZF9w
YXRocygiYS5maWVsZDEuZmllbGQyLmZpZWxkNCIpOwotICBtYXNrLT5hZGRfcGF0aHMoImEuZmll
bGQxLmZpZWxkNSIpOwotICBtYXNrLT5hZGRfcGF0aHMoImEuZmllbGQ2Iik7Ci0KLSAgb3dfLT5S
ZW5kZXJTdHJpbmcoIiIsICJhKGlkLGZpZWxkMShpZCxmaWVsZDIoZmllbGQzLGZpZWxkNCksZmll
bGQ1KSxmaWVsZDYpIik7Ci0gIG1hc2sgPSBleHBlY3RlZC5hZGRfcmVwZWF0ZWRfbWFzaygpOwot
ICBtYXNrLT5hZGRfcGF0aHMoImEuaWQiKTsKLSAgbWFzay0+YWRkX3BhdGhzKCJhLmZpZWxkMS5p
ZCIpOwotICBtYXNrLT5hZGRfcGF0aHMoImEuZmllbGQxLmZpZWxkMi5maWVsZDMiKTsKLSAgbWFz
ay0+YWRkX3BhdGhzKCJhLmZpZWxkMS5maWVsZDIuZmllbGQ0Iik7Ci0gIG1hc2stPmFkZF9wYXRo
cygiYS5maWVsZDEuZmllbGQ1Iik7Ci0gIG1hc2stPmFkZF9wYXRocygiYS5maWVsZDYiKTsKLQot
ICBvd18tPlJlbmRlclN0cmluZygiIiwgImEoKChmaWVsZDMsZmllbGQ0KSkpIik7Ci0gIG1hc2sg
PSBleHBlY3RlZC5hZGRfcmVwZWF0ZWRfbWFzaygpOwotICBtYXNrLT5hZGRfcGF0aHMoImEuZmll
bGQzIik7Ci0gIG1hc2stPmFkZF9wYXRocygiYS5maWVsZDQiKTsKLQotICBvd18tPkVuZExpc3Qo
KTsKLSAgb3dfLT5FbmRPYmplY3QoKTsKLQotICBDaGVja091dHB1dChleHBlY3RlZCk7Ci19Ci0K
LVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlckZpZWxkTWFza1Rlc3QsIE1vcmVDbG9zZVRo
YW5PcGVuUGFyZW50aGVzZXMpIHsKLSAgRVhQRUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8sCi0g
ICAgICBJbnZhbGlkVmFsdWUoCi0gICAgICAgICAgXywgU3RyaW5nUGllY2UoInR5cGUuZ29vZ2xl
YXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzayIpLAotICAgICAgICAgIFN0cmluZ1Bp
ZWNlKCJGaWVsZCAnc2luZ2xlX21hc2snLCBJbnZhbGlkIEZpZWxkTWFzayAnYShiLGMpKScuICIK
LSAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGZpbmQgbWF0Y2hpbmcgJygnIGZvciBhbGwg
JyknLiIpKSk7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIik7Ci0gIG93Xy0+UmVuZGVyU3RyaW5n
KCJpZCIsICIxIik7Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCJzaW5nbGVfbWFzayIsICJhKGIsYykp
Iik7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdy
aXRlckZpZWxkTWFza1Rlc3QsIE1vcmVPcGVuVGhhbkNsb3NlUGFyZW50aGVzZXMpIHsKLSAgRVhQ
RUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUoCi0gICAgICAg
ICAgXywgU3RyaW5nUGllY2UoInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb3RvYnVmLkZp
ZWxkTWFzayIpLAotICAgICAgICAgIFN0cmluZ1BpZWNlKAotICAgICAgICAgICAgICAiRmllbGQg
J3NpbmdsZV9tYXNrJywgSW52YWxpZCBGaWVsZE1hc2sgJ2EoKChiLGMpJy4gQ2Fubm90ICIKLSAg
ICAgICAgICAgICAgImZpbmQgbWF0Y2hpbmcgJyknIGZvciBhbGwgJygnLiIpKSk7Ci0KLSAgb3df
LT5TdGFydE9iamVjdCgiIik7Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCJpZCIsICIxIik7Ci0gIG93
Xy0+UmVuZGVyU3RyaW5nKCJzaW5nbGVfbWFzayIsICJhKCgoYixjKSIpOwotICBvd18tPkVuZE9i
amVjdCgpOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJGaWVsZE1hc2tUZXN0
LCBQYXRoV2l0aE1hcEtleVNob3VsZFdvcmspIHsKLSAgRmllbGRNYXNrVGVzdCBleHBlY3RlZDsK
LSAgZXhwZWN0ZWQubXV0YWJsZV9zaW5nbGVfbWFzaygpLT5hZGRfcGF0aHMoInBhdGgudG8ubWFw
W1wia2V5MVwiXSIpOwotICBleHBlY3RlZC5tdXRhYmxlX3NpbmdsZV9tYXNrKCktPmFkZF9wYXRo
cygKLSAgICAgICJwYXRoLnRvLm1hcFtcImVcXFwiW11dW3NjYXBlXFxcIlwiXSIpOwotICBleHBl
Y3RlZC5tdXRhYmxlX3NpbmdsZV9tYXNrKCktPmFkZF9wYXRocygicGF0aC50by5tYXBbXCJrZXky
XCJdIik7Ci0KLSAgb3dfLT5TdGFydE9iamVjdCgiIik7Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCJz
aW5nbGVfbWFzayIsCi0gICAgICAgICAgICAgICAgICAgICJwYXRoLnRvLm1hcFtcImtleTFcIl0s
cGF0aC50by5tYXBbXCJlXFxcIltdXVtzY2FwZVxcXCJcIl0sIgotICAgICAgICAgICAgICAgICAg
ICAicGF0aC50by5tYXBbXCJrZXkyXCJdIik7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci0KLSAgQ2hl
Y2tPdXRwdXQoZXhwZWN0ZWQpOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJG
aWVsZE1hc2tUZXN0LAotICAgICAgIE1hcEtleU11c3RCZUF0VGhlRW5kT2ZBUGF0aFNlZ21lbnQp
IHsKLSAgRVhQRUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUo
Ci0gICAgICAgICAgXywgU3RyaW5nUGllY2UoInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnBy
b3RvYnVmLkZpZWxkTWFzayIpLAotICAgICAgICAgIFN0cmluZ1BpZWNlKCJGaWVsZCAnc2luZ2xl
X21hc2snLCBJbnZhbGlkIEZpZWxkTWFzayAiCi0gICAgICAgICAgICAgICAgICAgICAgIidwYXRo
LnRvLm1hcFtcImtleTFcIl1hLHBhdGgudG8ubWFwW1wia2V5MlwiXScuICIKLSAgICAgICAgICAg
ICAgICAgICAgICAiTWFwIGtleXMgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgYSBwYXRoIHNlZ21l
bnQuIikpKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKTsKLSAgb3dfLT5SZW5kZXJTdHJpbmco
InNpbmdsZV9tYXNrIiwKLSAgICAgICAgICAgICAgICAgICAgInBhdGgudG8ubWFwW1wia2V5MVwi
XWEscGF0aC50by5tYXBbXCJrZXkyXCJdIik7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci19Ci0KLVRF
U1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlckZpZWxkTWFza1Rlc3QsIE1hcEtleU11c3RFbmQp
IHsKLSAgRVhQRUNUX0NBTEwoCi0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUo
XywKLSAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgidHlwZS5nb29nbGVhcGlzLmNvbS9n
b29nbGUucHJvdG9idWYuRmllbGRNYXNrIiksCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGll
Y2UoIkZpZWxkICdzaW5nbGVfbWFzaycsIEludmFsaWQgRmllbGRNYXNrICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiJ3BhdGgudG8ubWFwW1wia2V5MVwiJy4gTWFwIGtleXMgc2hv
dWxkIGJlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVwcmVzZW50ZWQgYXMg
W1wic29tZV9rZXlcIl0uIikpKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKTsKLSAgb3dfLT5S
ZW5kZXJTdHJpbmcoInNpbmdsZV9tYXNrIiwgInBhdGgudG8ubWFwW1wia2V5MVwiIik7Ci0gIG93
Xy0+RW5kT2JqZWN0KCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlckZpZWxk
TWFza1Rlc3QsIE1hcEtleU11c3RCZUVzY2FwZWRDb3JyZWN0bHkpIHsKLSAgRVhQRUNUX0NBTEwo
Ci0gICAgICBsaXN0ZW5lcl8sCi0gICAgICBJbnZhbGlkVmFsdWUoXywKLSAgICAgICAgICAgICAg
ICAgICBTdHJpbmdQaWVjZSgidHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucHJvdG9idWYuRmll
bGRNYXNrIiksCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIkZpZWxkICdzaW5nbGVf
bWFzaycsIEludmFsaWQgRmllbGRNYXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiJ3BhdGgudG8ubWFwW1wia2VcInkxXCJdJy4gTWFwIGtleXMgc2hvdWxkIGJlICIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicmVwcmVzZW50ZWQgYXMgW1wic29tZV9rZXlcIl0u
IikpKTsKLQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKTsKLSAgb3dfLT5SZW5kZXJTdHJpbmcoInNp
bmdsZV9tYXNrIiwgInBhdGgudG8ubWFwW1wia2VcInkxXCJdIik7Ci0gIG93Xy0+RW5kT2JqZWN0
KCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlckZpZWxkTWFza1Rlc3QsIE1h
cEtleUNhbkNvbnRhaW5BbnlDaGFycykgewotICBGaWVsZE1hc2tUZXN0IGV4cGVjdGVkOwotICBl
eHBlY3RlZC5tdXRhYmxlX3NpbmdsZV9tYXNrKCktPmFkZF9wYXRocygKLSAgICAgIC8vIFx4RTVc
eEFEXHg5OSBpcyB0aGUgVVRGLTggYnl0ZSBzZXF1ZW5jZSBmb3IgY2hpbmVzZSBjaGFyYWN0ZXIg
5a2ZLgotICAgICAgLy8gV2UgY2Fubm90IGVtYmVkIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIHRo
ZSBjb2RlIGRpcmVjdGx5IGJlY2F1c2UKLSAgICAgIC8vIHNvbWUgd2luZG93cyBjb21waWxlcnMg
d2lsbCB0cnkgdG8gaW50ZXJwcmV0IHRoZW0gdXNpbmcgdGhlIHN5c3RlbSdzCi0gICAgICAvLyBj
dXJyZW50IGVuY29kaW5nIGFuZCBlbmQgdXAgd2l0aCBpbnZhbGlkIFVURi04IGJ5dGUgc2VxdWVu
Y2UuCi0gICAgICAicGF0aC50by5tYXBbXCIoKSxbXSxcXFwiJyFAIyQlXiYqMTIzX3xXYXJceEU1
XHhBRFx4OTksLi8/PjxcXFxcXCJdIik7Ci0gIGV4cGVjdGVkLm11dGFibGVfc2luZ2xlX21hc2so
KS0+YWRkX3BhdGhzKCJwYXRoLnRvLm1hcFtcImtleTJcIl0iKTsKLQotICBvd18tPlN0YXJ0T2Jq
ZWN0KCIiKTsKLSAgb3dfLT5SZW5kZXJTdHJpbmcoCi0gICAgICAic2luZ2xlX21hc2siLAotICAg
ICAgInBhdGgudG8ubWFwW1wiKCksW10sXFxcIichQCMkJV4mKjEyM198V2FyXHhFNVx4QURceDk5
LC4vPz48XFxcXFwiXSwiCi0gICAgICAicGF0aC50by5tYXBbXCJrZXkyXCJdIik7Ci0gIG93Xy0+
RW5kT2JqZWN0KCk7Ci0KLSAgQ2hlY2tPdXRwdXQoZXhwZWN0ZWQpOwotfQotCi1jbGFzcyBQcm90
b1N0cmVhbU9iamVjdFdyaXRlck9uZU9mc1Rlc3QKLSAgICA6IHB1YmxpYyBCYXNlUHJvdG9TdHJl
YW1PYmplY3RXcml0ZXJUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFByb3RvU3RyZWFtT2JqZWN0V3Jp
dGVyT25lT2ZzVGVzdCgpIHsKLSAgICB2ZWN0b3I8Y29uc3QgRGVzY3JpcHRvcio+IGRlc2NyaXB0
b3JzOwotICAgIGRlc2NyaXB0b3JzLnB1c2hfYmFjayhPbmVPZnNSZXF1ZXN0OjpkZXNjcmlwdG9y
KCkpOwotICAgIGRlc2NyaXB0b3JzLnB1c2hfYmFjayhnb29nbGU6OnByb3RvYnVmOjpTdHJ1Y3Q6
OmRlc2NyaXB0b3IoKSk7Ci0gICAgUmVzZXRUeXBlSW5mbyhkZXNjcmlwdG9ycyk7Ci0gIH0KLX07
Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKERpZmZlcmVudFR5cGVJbmZvU291cmNlVGVzdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyT25lT2ZzVGVz
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVzdGluZzo6VmFsdWVzKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3Rpbmc6OlVTRV9UWVBFX1JFU09MVkVSKSk7Ci0KLVRFU1Rf
UChQcm90b1N0cmVhbU9iamVjdFdyaXRlck9uZU9mc1Rlc3QsCi0gICAgICAgTXVsdGlwbGVPbmVv
ZnNGYWlsRm9yUHJpbWl0aXZlVHlwZXNUZXN0KSB7Ci0gIEVYUEVDVF9DQUxMKAotICAgICAgbGlz
dGVuZXJfLAotICAgICAgSW52YWxpZFZhbHVlKAotICAgICAgICAgIF8sIFN0cmluZ1BpZWNlKCJv
bmVvZiIpLAotICAgICAgICAgIFN0cmluZ1BpZWNlKAotICAgICAgICAgICAgICAib25lb2YgZmll
bGQgJ2RhdGEnIGlzIGFscmVhZHkgc2V0LiBDYW5ub3Qgc2V0ICdpbnREYXRhJyIpKSk7Ci0KLSAg
b3dfLT5TdGFydE9iamVjdCgiIik7Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCJzdHJEYXRhIiwgImJs
YWgiKTsKLSAgb3dfLT5SZW5kZXJTdHJpbmcoImludERhdGEiLCAiMTIzIik7Ci0gIG93Xy0+RW5k
T2JqZWN0KCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlck9uZU9mc1Rlc3Qs
Ci0gICAgICAgTXVsdGlwbGVPbmVvZnNGYWlsRm9yTWVzc2FnZVR5cGVzUHJpbWl0aXZlRmlyc3RU
ZXN0KSB7Ci0gIC8vIFRlc3QgZm9yIHNldHRpbmcgcHJpbWl0aXZlIG9uZW9mIGZpZWxkIGZpcnN0
IGFuZCB0aGVuIG1lc3NhZ2UgZmllbGQuCi0gIEVYUEVDVF9DQUxMKGxpc3RlbmVyXywKLSAgICAg
ICAgICAgICAgSW52YWxpZFZhbHVlKF8sIFN0cmluZ1BpZWNlKCJvbmVvZiIpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIm9uZW9mIGZpZWxkICdkYXRhJyBpcyBhbHJl
YWR5IHNldC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5v
dCBzZXQgJ21lc3NhZ2VEYXRhJyIpKSk7Ci0KLSAgLy8gSlNPTjogeyAic3RyRGF0YSI6ICJibGFo
IiwgIm1lc3NhZ2VEYXRhIjogeyAiZGF0YVZhbHVlIjogMTIzIH0gfQotICBvd18tPlN0YXJ0T2Jq
ZWN0KCIiKTsKLSAgb3dfLT5SZW5kZXJTdHJpbmcoInN0ckRhdGEiLCAiYmxhaCIpOwotICBvd18t
PlN0YXJ0T2JqZWN0KCJtZXNzYWdlRGF0YSIpOwotICBvd18tPlJlbmRlckludDMyKCJkYXRhVmFs
dWUiLCAxMjMpOwotICBvd18tPkVuZE9iamVjdCgpOwotICBvd18tPkVuZE9iamVjdCgpOwotfQot
Ci1URVNUX1AoUHJvdG9TdHJlYW1PYmplY3RXcml0ZXJPbmVPZnNUZXN0LAotICAgICAgIE11bHRp
cGxlT25lb2ZzRmFpbEZvck1lc3NhZ2VUeXBlc01lc3NhZ2VGaXJzdFRlc3QpIHsKLSAgLy8gVGVz
dCBmb3Igc2V0dGluZyBtZXNzYWdlIG9uZW9mIGZpZWxkIGZpcnN0IGFuZCB0aGVuIHByaW1pdGl2
ZSBmaWVsZC4KLSAgRVhQRUNUX0NBTEwobGlzdGVuZXJfLAotICAgICAgICAgICAgICBJbnZhbGlk
VmFsdWUoXywgU3RyaW5nUGllY2UoIm9uZW9mIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdQaWVjZSgib25lb2YgZmllbGQgJ2RhdGEnIGlzIGFscmVhZHkgc2V0LiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNldCAnc3RyRGF0YSci
KSkpOwotCi0gIC8vIEpTT046IHsgIm1lc3NhZ2VEYXRhIjogeyAiZGF0YVZhbHVlIjogMTIzIH0s
ICJzdHJEYXRhIjogImJsYWgiIH0KLSAgb3dfLT5TdGFydE9iamVjdCgiIik7Ci0gIG93Xy0+U3Rh
cnRPYmplY3QoIm1lc3NhZ2VEYXRhIik7Ci0gIG93Xy0+UmVuZGVySW50MzIoImRhdGFWYWx1ZSIs
IDEyMyk7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCJzdHJEYXRh
IiwgImJsYWgiKTsKLSAgb3dfLT5FbmRPYmplY3QoKTsKLX0KLQotVEVTVF9QKFByb3RvU3RyZWFt
T2JqZWN0V3JpdGVyT25lT2ZzVGVzdCwKLSAgICAgICBNdWx0aXBsZU9uZW9mc0ZhaWxGb3JTdHJ1
Y3RUeXBlc1ByaW1pdGl2ZUZpcnN0VGVzdCkgewotICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8sCi0g
ICAgICAgICAgICAgIEludmFsaWRWYWx1ZShfLCBTdHJpbmdQaWVjZSgib25lb2YiKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJvbmVvZiBmaWVsZCAnZGF0YScgaXMg
YWxyZWFkeSBzZXQuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJD
YW5ub3Qgc2V0ICdzdHJ1Y3REYXRhJyIpKSk7Ci0KLSAgLy8gSlNPTjogeyAic3RyRGF0YSI6ICJi
bGFoIiwgInN0cnVjdERhdGEiOiB7ICJhIjogImIiIH0gfQotICBvd18tPlN0YXJ0T2JqZWN0KCIi
KTsKLSAgb3dfLT5SZW5kZXJTdHJpbmcoInN0ckRhdGEiLCAiYmxhaCIpOwotICBvd18tPlN0YXJ0
T2JqZWN0KCJzdHJ1Y3REYXRhIik7Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCJhIiwgImIiKTsKLSAg
b3dfLT5FbmRPYmplY3QoKTsKLSAgb3dfLT5FbmRPYmplY3QoKTsKLX0KLQotVEVTVF9QKFByb3Rv
U3RyZWFtT2JqZWN0V3JpdGVyT25lT2ZzVGVzdCwKLSAgICAgICBNdWx0aXBsZU9uZW9mc0ZhaWxG
b3JTdHJ1Y3RUeXBlc1N0cnVjdEZpcnN0VGVzdCkgewotICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8s
Ci0gICAgICAgICAgICAgIEludmFsaWRWYWx1ZShfLCBTdHJpbmdQaWVjZSgib25lb2YiKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJvbmVvZiBmaWVsZCAnZGF0YScg
aXMgYWxyZWFkeSBzZXQuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJDYW5ub3Qgc2V0ICdzdHJEYXRhJyIpKSk7Ci0KLSAgLy8gSlNPTjogeyAic3RydWN0RGF0YSI6
IHsgImEiOiAiYiIgfSwgInN0ckRhdGEiOiAiYmxhaCIgfQotICBvd18tPlN0YXJ0T2JqZWN0KCIi
KTsKLSAgb3dfLT5TdGFydE9iamVjdCgic3RydWN0RGF0YSIpOwotICBvd18tPlJlbmRlclN0cmlu
ZygiYSIsICJiIik7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCJz
dHJEYXRhIiwgImJsYWgiKTsKLSAgb3dfLT5FbmRPYmplY3QoKTsKLX0KLQotVEVTVF9QKFByb3Rv
U3RyZWFtT2JqZWN0V3JpdGVyT25lT2ZzVGVzdCwKLSAgICAgICBNdWx0aXBsZU9uZW9mc0ZhaWxG
b3JTdHJ1Y3RWYWx1ZVR5cGVzVGVzdCkgewotICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8sCi0gICAg
ICAgICAgICAgIEludmFsaWRWYWx1ZShfLCBTdHJpbmdQaWVjZSgib25lb2YiKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlKCJvbmVvZiBmaWVsZCAnZGF0YScgaXMgYWxy
ZWFkeSBzZXQuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5u
b3Qgc2V0ICd2YWx1ZURhdGEnIikpKTsKLQotICAvLyBKU09OOiB7ICJtZXNzYWdlRGF0YSI6IHsg
ImRhdGFWYWx1ZSI6IDEyMyB9LCAidmFsdWVEYXRhIjogeyAiYSI6ICJiIiB9IH0KLSAgb3dfLT5T
dGFydE9iamVjdCgiIik7Ci0gIG93Xy0+U3RhcnRPYmplY3QoIm1lc3NhZ2VEYXRhIik7Ci0gIG93
Xy0+UmVuZGVySW50MzIoImRhdGFWYWx1ZSIsIDEyMyk7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci0g
IG93Xy0+U3RhcnRPYmplY3QoInZhbHVlRGF0YSIpOwotICBvd18tPlJlbmRlclN0cmluZygiYSIs
ICJiIik7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci19Ci0KLVRF
U1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlck9uZU9mc1Rlc3QsCi0gICAgICAgTXVsdGlwbGVP
bmVvZnNGYWlsRm9yV2VsbEtub3duVHlwZXNQcmltaXRpdmVGaXJzdFRlc3QpIHsKLSAgRVhQRUNU
X0NBTEwobGlzdGVuZXJfLAotICAgICAgICAgICAgICBJbnZhbGlkVmFsdWUoXywgU3RyaW5nUGll
Y2UoIm9uZW9mIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSgib25l
b2YgZmllbGQgJ2RhdGEnIGlzIGFscmVhZHkgc2V0LiAiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiQ2Fubm90IHNldCAndHNEYXRhJyIpKSk7Ci0KLSAgLy8gSlNPTjog
eyAiaW50RGF0YSI6IDEyMywgInRzRGF0YSI6ICIxOTcwLTAxLTAyVDAxOjAwOjAwLjAwMFoiIH0K
LSAgb3dfLT5TdGFydE9iamVjdCgiIik7Ci0gIG93Xy0+UmVuZGVySW50MzIoImludERhdGEiLCAx
MjMpOwotICBvd18tPlJlbmRlclN0cmluZygidHNEYXRhIiwgIjE5NzAtMDEtMDJUMDE6MDA6MDAu
MDAwWiIpOwotICBvd18tPkVuZE9iamVjdCgpOwotfQotCi1URVNUX1AoUHJvdG9TdHJlYW1PYmpl
Y3RXcml0ZXJPbmVPZnNUZXN0LAotICAgICAgIE11bHRpcGxlT25lb2ZzRmFpbEZvcldlbGxLbm93
blR5cGVzV2t0Rmlyc3RUZXN0KSB7Ci0gIEVYUEVDVF9DQUxMKGxpc3RlbmVyXywKLSAgICAgICAg
ICAgICAgSW52YWxpZFZhbHVlKF8sIFN0cmluZ1BpZWNlKCJvbmVvZiIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nUGllY2UoIm9uZW9mIGZpZWxkICdkYXRhJyBpcyBhbHJlYWR5
IHNldC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBz
ZXQgJ2ludERhdGEnIikpKTsKLQotICAvLyBKU09OOiB7ICJ0c0RhdGEiOiAiMTk3MC0wMS0wMlQw
MTowMDowMC4wMDBaIiwgImludERhdGEiOiAxMjMgfQotICBvd18tPlN0YXJ0T2JqZWN0KCIiKTsK
LSAgb3dfLT5SZW5kZXJTdHJpbmcoInRzRGF0YSIsICIxOTcwLTAxLTAyVDAxOjAwOjAwLjAwMFoi
KTsKLSAgb3dfLT5SZW5kZXJJbnQzMigiaW50RGF0YSIsIDEyMyk7Ci0gIG93Xy0+RW5kT2JqZWN0
KCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRlck9uZU9mc1Rlc3QsCi0gICAg
ICAgTXVsdGlwbGVPbmVvZnNGYWlsRm9yV2VsbEtub3duVHlwZXNBbmRNZXNzYWdlVGVzdCkgewot
ICBFWFBFQ1RfQ0FMTChsaXN0ZW5lcl8sCi0gICAgICAgICAgICAgIEludmFsaWRWYWx1ZShfLCBT
dHJpbmdQaWVjZSgib25lb2YiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1Bp
ZWNlKCJvbmVvZiBmaWVsZCAnZGF0YScgaXMgYWxyZWFkeSBzZXQuICIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc2V0ICdtZXNzYWdlRGF0YSciKSkpOwot
Ci0gIC8vIEpTT046IHsgInRzRGF0YSI6ICIxOTcwLTAxLTAyVDAxOjAwOjAwLjAwMFoiLAotICAv
LyAgICAgICAgICJtZXNzYWdlRGF0YSI6IHsgImRhdGFWYWx1ZSI6IDEyMyB9IH0KLSAgb3dfLT5T
dGFydE9iamVjdCgiIik7Ci0gIG93Xy0+UmVuZGVyU3RyaW5nKCJ0c0RhdGEiLCAiMTk3MC0wMS0w
MlQwMTowMDowMC4wMDBaIik7Ci0gIG93Xy0+U3RhcnRPYmplY3QoIm1lc3NhZ2VEYXRhIik7Ci0g
IG93Xy0+UmVuZGVySW50MzIoImRhdGFWYWx1ZSIsIDEyMyk7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7
Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci19Ci0KLVRFU1RfUChQcm90b1N0cmVhbU9iamVjdFdyaXRl
ck9uZU9mc1Rlc3QsCi0gICAgICAgTXVsdGlwbGVPbmVvZnNGYWlsRm9yT25lb2ZXaXRoaW5BbnlU
ZXN0KSB7Ci0gIEVYUEVDVF9DQUxMKGxpc3RlbmVyXywKLSAgICAgICAgICAgICAgSW52YWxpZFZh
bHVlKF8sIFN0cmluZ1BpZWNlKCJvbmVvZiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nUGllY2UoIm9uZW9mIGZpZWxkICdkYXRhJyBpcyBhbHJlYWR5IHNldC4gIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzZXQgJ2ludERhdGEnIikp
KTsKLQotICB1c2luZyBnb29nbGU6OnByb3RvYnVmOjp0ZXN0aW5nOjpvbmVvZnM6Ok9uZU9mc1Jl
cXVlc3Q7Ci0gIC8vIEpTT046Ci0gIC8vIHsgImFueURhdGEiOgotICAvLyAgICB7ICJAdHlwZSI6
Ci0gIC8vICAgICAgICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi50ZXN0aW5n
Lm9uZW9mcy5PbmVPZnNSZXF1ZXN0IiwKLSAgLy8gICAgICJzdHJEYXRhIjogImJsYWgiLAotICAv
LyAgICAgImludERhdGEiOiAxMjMKLSAgLy8gICAgfQotICAvLyB9Ci0gIG93Xy0+U3RhcnRPYmpl
Y3QoIiIpOwotICBvd18tPlN0YXJ0T2JqZWN0KCJhbnlEYXRhIik7Ci0gIG93Xy0+UmVuZGVyU3Ry
aW5nKAotICAgICAgIkB0eXBlIiwKLSAgICAgICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5w
cm90b2J1Zi50ZXN0aW5nLm9uZW9mcy5PbmVPZnNSZXF1ZXN0Iik7Ci0gIG93Xy0+UmVuZGVyU3Ry
aW5nKCJzdHJEYXRhIiwgImJsYWgiKTsKLSAgb3dfLT5SZW5kZXJJbnQzMigiaW50RGF0YSIsIDEy
Myk7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci0gIG93Xy0+RW5kT2JqZWN0KCk7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3N0cnVjdHVyZWRfb2JqZWN0d3JpdGVyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9zdHJ1Y3R1cmVkX29iamVjdHdyaXRlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjA2NWQ2YjFjZmNhYzhiYzYzYTJkYmU2MjUx
YTNhYzFkYTRkMzZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3N0cnVjdHVyZWRfb2JqZWN0d3Jp
dGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVS
X1NUUlVDVFVSRURfT0JKRUNUV1JJVEVSX0hfXwotI2RlZmluZSBHT09HTEVfUFJPVE9CVUZfVVRJ
TF9DT05WRVJURVJfU1RSVUNUVVJFRF9PQkpFQ1RXUklURVJfSF9fCi0KLSNpbmNsdWRlIDxtZW1v
cnk+Ci0jaWZuZGVmIF9TSEFSRURfUFRSX0gKLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvc2hhcmVkX3B0ci5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvY2FzdHMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29tbW9uLmg+Ci0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X3dyaXRlci5oPgot
Ci1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRp
bCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLQotLy8gQW4gU3RydWN0dXJlZE9iamVjdFdyaXRl
ciBpcyBhbiBPYmplY3RXcml0ZXIgZm9yIHdyaXRpbmcKLS8vIHRyZWUtc3RydWN0dXJlZCBkYXRh
IGluIGEgc3RyZWFtIG9mIGV2ZW50cyByZXByZXNlbnRpbmcgb2JqZWN0cwotLy8gYW5kIGNvbGxl
Y3Rpb25zLiBJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZSBjYW4gYmUgdXNlZCB0bwot
Ly8gd3JpdGUgYW4gb2JqZWN0IHN0cmVhbSB0byBhbiBpbi1tZW1vcnkgc3RydWN0dXJlLCBwcm90
b2J1ZnMsCi0vLyBKU09OLCBYTUwsIG9yIGFueSBvdGhlciBvdXRwdXQgZm9ybWF0IGRlc2lyZWQu
IFRoZSBPYmplY3RTb3VyY2UKLS8vIGludGVyZmFjZSBpcyB0eXBpY2FsbHkgdXNlZCBhcyB0aGUg
c291cmNlIG9mIGFuIG9iamVjdCBzdHJlYW0uCi0vLwotLy8gU2VlIEpzb25PYmplY3RXcml0ZXIg
Zm9yIGEgc2FtcGxlIGltcGxlbWVudGF0aW9uIG9mCi0vLyBTdHJ1Y3R1cmVkT2JqZWN0V3JpdGVy
IGFuZCBpdHMgdXNlLgotLy8KLS8vIERlcml2ZWQgY2xhc3NlcyBjb3VsZCBiZSB0aHJlYWQtdW5z
YWZlLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFN0cnVjdHVyZWRPYmplY3RXcml0ZXIgOiBw
dWJsaWMgT2JqZWN0V3JpdGVyIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgflN0cnVjdHVyZWRPYmpl
Y3RXcml0ZXIoKSB7fQotCi0gcHJvdGVjdGVkOgotICAvLyBBIGJhc2UgZWxlbWVudCBjbGFzcyBm
b3Igc3ViY2xhc3NlcyB0byBleHRlbmQsIG1ha2VzIHRyYWNraW5nIHN0YXRlIGVhc2llci4KLSAg
Ly8KLSAgLy8gU3RydWN0dXJlZE9iamVjdFdyaXRlciBiZWhhdmVzIGFzIGEgdmlzaXRvci4gQmFz
ZUVsZW1lbnQgcmVwcmVzZW50cyBhIG5vZGUKLSAgLy8gaW4gdGhlIGlucHV0IHRyZWUuIEltcGxl
bWVudGF0aW9uIG9mIFN0cnVjdHVyZWRPYmplY3RXcml0ZXIgc2hvdWxkIGFsc28KLSAgLy8gZXh0
ZW5kIEJhc2VFbGVtZW50IHRvIGtlZXAgdHJhY2sgb2YgdGhlIGxvY2F0aW9uIGluIHRoZSBpbnB1
dCB0cmVlLgotICBjbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgQmFzZUVsZW1lbnQgewotICAgcHVi
bGljOgotICAgIC8vIFRha2VzIG93bmVyc2hpcCBvZiB0aGUgcGFyZW50IEVsZW1lbnQuCi0gICAg
ZXhwbGljaXQgQmFzZUVsZW1lbnQoQmFzZUVsZW1lbnQqIHBhcmVudCkKLSAgICAgICAgOiBwYXJl
bnRfKHBhcmVudCksIGxldmVsXyhwYXJlbnQgPT0gTlVMTCA/IDAgOiBwYXJlbnQtPmxldmVsKCkg
KyAxKSB7fQotICAgIHZpcnR1YWwgfkJhc2VFbGVtZW50KCkge30KLQotICAgIC8vIFJlbGVhc2Vz
IG93bmVyc2hpcCBvZiB0aGUgcGFyZW50IGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci0gICAgRWxlbWVudFR5cGUqIHBvcCgp
IHsKLSAgICAgIHJldHVybiBkb3duX2Nhc3Q8RWxlbWVudFR5cGUqPihwYXJlbnRfLnJlbGVhc2Uo
KSk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZWxlbWVudCBpcyB0aGUg
cm9vdC4KLSAgICBib29sIGlzX3Jvb3QoKSBjb25zdCB7IHJldHVybiBwYXJlbnRfID09IE5VTEw7
IH0KLQotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBob3BzIGZyb20gdGhpcyBlbGVtZW50
IHRvIHRoZSByb290IGVsZW1lbnQuCi0gICAgaW50IGxldmVsKCkgY29uc3QgeyByZXR1cm4gbGV2
ZWxfOyB9Ci0KLSAgIHByb3RlY3RlZDoKLSAgICAvLyBSZXR1cm5zIHBvaW50ZXIgdG8gcGFyZW50
IGVsZW1lbnQgd2l0aG91dCByZWxlYXNpbmcgb3duZXJzaGlwLgotICAgIHZpcnR1YWwgQmFzZUVs
ZW1lbnQqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHBhcmVudF8uZ2V0KCk7IH0KLQotICAgcHJp
dmF0ZToKLSAgICAvLyBQb2ludGVyIHRvIHRoZSBwYXJlbnQgRWxlbWVudC4KLSAgICBnb29nbGU6
OnByb3RvYnVmOjpzY29wZWRfcHRyPEJhc2VFbGVtZW50PiBwYXJlbnRfOwotCi0gICAgLy8gTnVt
YmVyIG9mIGhvcHMgdG8gdGhlIHJvb3QgRWxlbWVudC4KLSAgICAvLyBUaGUgcm9vdCBFbGVtZW50
IGhhcyBOVUxMIHBhcmVudF8gYW5kIGEgbGV2ZWxfIG9mIDAuCi0gICAgY29uc3QgaW50IGxldmVs
XzsKLQotICAgIEdPT0dMRV9ESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoQmFzZUVsZW1l
bnQpOwotICB9OwotCi0gIFN0cnVjdHVyZWRPYmplY3RXcml0ZXIoKSB7fQotCi0gIC8vIFJldHVy
bnMgdGhlIGN1cnJlbnQgZWxlbWVudC4gVXNlZCBmb3IgaW5kZW50YXRpb24gYW5kIG5hbWUgb3Zl
cnJpZGVzLgotICB2aXJ0dWFsIEJhc2VFbGVtZW50KiBlbGVtZW50KCkgPSAwOwotCi0gcHJpdmF0
ZToKLSAgLy8gRG8gbm90IGFkZCBhbnkgZGF0YSBtZW1iZXJzIHRvIHRoaXMgY2xhc3MuCi0gIEdP
T0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTdHJ1Y3R1cmVkT2JqZWN0V3JpdGVyKTsK
LX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlm
ICAvLyBHT09HTEVfUFJPVE9CVUZfVVRJTF9DT05WRVJURVJfU1RSVUNUVVJFRF9PQkpFQ1RXUklU
RVJfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0
ZGF0YS9hbnlzLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRh
dGEvYW55cy5wcm90bwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThjNTljYmI5NjMw
OGM3MmYwYTFkNDMyYTJlZjc5ZDgxZmNjYmRiNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0
ZGF0YS9hbnlzLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFByb3RvIHRvIHRlc3QgUHJvdG8zIEFueSBz
ZXJpYWxpemF0aW9uLgotc3ludGF4ID0gInByb3RvMyI7Ci0KLXBhY2thZ2UgZ29vZ2xlLnByb3Rv
YnVmLnRlc3RpbmcuYW55czsKLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2dsZS5wcm90
b2J1Zi50ZXN0aW5nLmFueXMiOwotCi1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8i
OwotCi1tZXNzYWdlIEFueUluIHsKLSAgc3RyaW5nIHNvbWV0aGluZyA9IDE7Ci19Ci0KLW1lc3Nh
Z2UgQW55T3V0IHsKLSAgZ29vZ2xlLnByb3RvYnVmLkFueSBhbnkgPSAxOwotfQotCi1tZXNzYWdl
IEFueU0gewotICBzdHJpbmcgZm9vID0gMTsKLX0KLQotc2VydmljZSBUZXN0U2VydmljZSB7Ci0g
IHJwYyBDYWxsKEFueUluKSByZXR1cm5zIChBbnlPdXQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvYm9va3MucHJvdG8gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9ib29rcy5wcm90bwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiYmJhNDc4MWYwNDk5N2UwM2NkZTViYWViMThlMzgxMzZk
ZGEwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9ib29rcy5wcm90bworKysgL2Rl
di9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3Mg
ZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJv
dG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotLy8gQXV0aG9yOiBzdmVuQGdvb2dsZS5jb20gKFN2ZW4gTWF3c29uKQotLy8KLS8vIFNh
bXBsZSBwcm90b3MgZm9yIHRlc3RpbmcuCi1zeW50YXggPSAicHJvdG8yIjsKLQotcGFja2FnZSBn
b29nbGUucHJvdG9idWYudGVzdGluZzsKLQotLy8gQSBib29rCi1tZXNzYWdlIEJvb2sgewotICBv
cHRpb25hbCBzdHJpbmcgdGl0bGUgPSAxOwotICBvcHRpb25hbCBBdXRob3IgYXV0aG9yID0gMjsK
LSAgb3B0aW9uYWwgdWludDMyIGxlbmd0aCA9IDM7Ci0gIG9wdGlvbmFsIGludDY0IHB1Ymxpc2hl
ZCA9IDQ7Ci0gIG9wdGlvbmFsIGJ5dGVzIGNvbnRlbnQgPSA1OwotCi0gIG9wdGlvbmFsIGdyb3Vw
IERhdGEgPSA2IHsKLSAgICBvcHRpb25hbCB1aW50MzIgeWVhciA9IDc7Ci0gICAgb3B0aW9uYWwg
c3RyaW5nIGNvcHlyaWdodCA9IDg7Ci0gIH0KLQotICBtZXNzYWdlIExhYmVsIHsKLSAgICBvcHRp
b25hbCBzdHJpbmcga2V5ID0gMTsKLSAgICBvcHRpb25hbCBzdHJpbmcgdmFsdWUgPSAyOwotICB9
Ci0KLSAgb3B0aW9uYWwgUHVibGlzaGVyIHB1Ymxpc2hlciA9IDk7Ci0gIHJlcGVhdGVkIExhYmVs
IGxhYmVscyA9IDEwOwotCi0gIGVudW0gVHlwZSB7Ci0gICAgRklDVElPTiA9IDE7Ci0gICAgS0lE
UyA9IDI7Ci0gICAgQUNUSU9OX0FORF9BRFZFTlRVUkUgPSAzOwotICB9Ci0gIG9wdGlvbmFsIFR5
cGUgdHlwZSA9IDExOwotCi0gIGV4dGVuc2lvbnMgMjAwIHRvIDQ5OTsKLX0KLQotLy8gQSBwdWJs
aXNoZXIgb2YgYSBib29rLCB0ZXN0cyByZXF1aXJlZCBmaWVsZHMuCi1tZXNzYWdlIFB1Ymxpc2hl
ciB7Ci0gIHJlcXVpcmVkIHN0cmluZyBuYW1lID0gMTsKLX0KLQotLy8gQW4gYXV0aG9yIG9mIGEg
Ym9vawotbWVzc2FnZSBBdXRob3IgewotICBvcHRpb25hbCB1aW50NjQgaWQgPSAxIFtqc29uX25h
bWUgPSAiQGlkIl07Ci0gIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMjsKLSAgcmVwZWF0ZWQgc3Ry
aW5nIHBzZXVkb255bSA9IDM7Ci0gIG9wdGlvbmFsIGJvb2wgYWxpdmUgPSA0OwotICByZXBlYXRl
ZCBBdXRob3IgZnJpZW5kID0gNTsKLX0KLQotLy8gRm9yIHRlc3RpbmcgcmVzaWxpZW5jeSBvZiBv
dXIgcHJvdG9zdHJlYW0gcGFyc2VyLgotLy8gRmllbGQgbnVtYmVycyBvZiBBdXRob3IgYXJlIHJl
dXNlZCBmb3Igc29tZXRoaW5nIGVsc2UuCi1tZXNzYWdlIEJhZEF1dGhvciB7Ci0gIG9wdGlvbmFs
IHN0cmluZyBpZCA9IDE7ICAvLyBub24tbGVuZ3RoLWRlbGltaXRlZCB0byBsZW5ndGgtZGVsaW1p
dGVkLgotICByZXBlYXRlZCB1aW50NjQgbmFtZSA9IDI7ICAvLyBzdHJpbmcgdG8gcmVwZWF0ZWQg
KGJvdGggbGVuZ3RoLWRlbGltaXRlZCkuCi0gIG9wdGlvbmFsIHN0cmluZyBwc2V1ZG9ueW0gPSAz
OyAgLy8gUmVwZWF0ZWQgdG8gb3B0aW9uYWwuCi0gIHJlcGVhdGVkIGJvb2wgYWxpdmUgPSA0IFtw
YWNrZWQ9dHJ1ZV07ICAvLyBPcHRpb25hbCB0byByZXBlYXRlZC4KLX0KLQotLy8gQWxsIHByaW1p
dGl2ZSB0eXBlcwotbWVzc2FnZSBQcmltaXRpdmUgewotICAvLyAzMiBiaXQgbnVtYmVyczoKLSAg
b3B0aW9uYWwgZml4ZWQzMiBmaXgzMiA9IDE7Ci0gIG9wdGlvbmFsIHVpbnQzMiB1MzIgPSAyOwot
ICBvcHRpb25hbCBpbnQzMiBpMzIgPSAzOwotICBvcHRpb25hbCBzZml4ZWQzMiBzZjMyID0gNDsK
LSAgb3B0aW9uYWwgc2ludDMyIHMzMiA9IDU7Ci0KLSAgLy8gNjQgYml0IG51bWJlcnM6Ci0gIG9w
dGlvbmFsIGZpeGVkNjQgZml4NjQgPSA2OwotICBvcHRpb25hbCB1aW50NjQgdTY0ID0gNzsKLSAg
b3B0aW9uYWwgaW50NjQgaTY0ID0gODsKLSAgb3B0aW9uYWwgc2ZpeGVkNjQgc2Y2NCA9IDk7Ci0g
IG9wdGlvbmFsIHNpbnQ2NCBzNjQgPSAxMDsKLQotICAvLyBUaGUgb3RoZXIgc3R1ZmYuCi0gIG9w
dGlvbmFsIHN0cmluZyBzdHIgPSAxMTsKLSAgb3B0aW9uYWwgYnl0ZXMgYnl0ZXMgPSAxMjsKLSAg
b3B0aW9uYWwgZmxvYXQgZmxvYXQgPSAxMzsKLSAgb3B0aW9uYWwgZG91YmxlIGRvdWJsZSA9IDE0
OwotICBvcHRpb25hbCBib29sIGJvb2wgPSAxNTsKLQotICAvLyByZXBlYXRlZCAzMiBiaXQgbnVt
YmVyczoKLSAgcmVwZWF0ZWQgZml4ZWQzMiByZXBfZml4MzIgPSAxNjsKLSAgcmVwZWF0ZWQgdWlu
dDMyIHJlcF91MzIgPSAxNzsKLSAgcmVwZWF0ZWQgaW50MzIgcmVwX2kzMiA9IDE4OwotICByZXBl
YXRlZCBzZml4ZWQzMiByZXBfc2YzMiA9IDE5OwotICByZXBlYXRlZCBzaW50MzIgcmVwX3MzMiA9
IDIwOwotCi0gIC8vIHJlcGVhdGVkIDY0IGJpdCBudW1iZXJzOgotICByZXBlYXRlZCBmaXhlZDY0
IHJlcF9maXg2NCA9IDIxOwotICByZXBlYXRlZCB1aW50NjQgcmVwX3U2NCA9IDIyOwotICByZXBl
YXRlZCBpbnQ2NCByZXBfaTY0ID0gMjM7Ci0gIHJlcGVhdGVkIHNmaXhlZDY0IHJlcF9zZjY0ID0g
MjQ7Ci0gIHJlcGVhdGVkIHNpbnQ2NCByZXBfczY0ID0gMjU7Ci0KLSAgLy8gcmVwZWF0ZWQgb3Ro
ZXIgc3R1ZmY6Ci0gIHJlcGVhdGVkIHN0cmluZyByZXBfc3RyID0gMjY7Ci0gIHJlcGVhdGVkIGJ5
dGVzIHJlcF9ieXRlcyA9IDI3OwotICByZXBlYXRlZCBmbG9hdCByZXBfZmxvYXQgPSAyODsKLSAg
cmVwZWF0ZWQgZG91YmxlIHJlcF9kb3VibGUgPSAyOTsKLSAgcmVwZWF0ZWQgYm9vbCByZXBfYm9v
bCA9IDMwOwotfQotCi0vLyBUZXN0IHBhY2tlZCB2ZXJzaW9ucyBvZiBhbGwgcmVwZWF0ZWQgcHJp
bWl0aXZlcy4KLS8vIFRoZSBmaWVsZCBudW1iZXJzIHNob3VsZCBtYXRjaCB0aGVpciBub24tcGFj
a2VkIHZlcnNpb24gaW4gUHJpbWl0aXZlIG1lc3NhZ2UuCi1tZXNzYWdlIFBhY2tlZFByaW1pdGl2
ZSB7Ci0gIC8vIHJlcGVhdGVkIDMyIGJpdCBudW1iZXJzOgotICByZXBlYXRlZCBmaXhlZDMyIHJl
cF9maXgzMiA9IDE2IFtwYWNrZWQ9dHJ1ZV07Ci0gIHJlcGVhdGVkIHVpbnQzMiByZXBfdTMyID0g
MTcgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQgaW50MzIgcmVwX2kzMiA9IDE4IFtwYWNrZWQ9
dHJ1ZV07Ci0gIHJlcGVhdGVkIHNmaXhlZDMyIHJlcF9zZjMyID0gMTkgW3BhY2tlZD10cnVlXTsK
LSAgcmVwZWF0ZWQgc2ludDMyIHJlcF9zMzIgPSAyMCBbcGFja2VkPXRydWVdOwotCi0gIC8vIHJl
cGVhdGVkIDY0IGJpdCBudW1iZXJzOgotICByZXBlYXRlZCBmaXhlZDY0IHJlcF9maXg2NCA9IDIx
IFtwYWNrZWQ9dHJ1ZV07Ci0gIHJlcGVhdGVkIHVpbnQ2NCByZXBfdTY0ID0gMjIgW3BhY2tlZD10
cnVlXTsKLSAgcmVwZWF0ZWQgaW50NjQgcmVwX2k2NCA9IDIzIFtwYWNrZWQ9dHJ1ZV07Ci0gIHJl
cGVhdGVkIHNmaXhlZDY0IHJlcF9zZjY0ID0gMjQgW3BhY2tlZD10cnVlXTsKLSAgcmVwZWF0ZWQg
c2ludDY0IHJlcF9zNjQgPSAyNSBbcGFja2VkPXRydWVdOwotCi0gIC8vIHJlcGVhdGVkIG90aGVy
IHN0dWZmOgotICByZXBlYXRlZCBmbG9hdCByZXBfZmxvYXQgPSAyOCBbcGFja2VkPXRydWVdOwot
ICByZXBlYXRlZCBkb3VibGUgcmVwX2RvdWJsZSA9IDI5IFtwYWNrZWQ9dHJ1ZV07Ci0gIHJlcGVh
dGVkIGJvb2wgcmVwX2Jvb2wgPSAzMCBbcGFja2VkPXRydWVdOwotfQotCi0vLyBUZXN0IGV4dGVu
c2lvbnMuCi1leHRlbmQgQm9vayB7Ci0gIHJlcGVhdGVkIEF1dGhvciBtb3JlX2F1dGhvciA9IDIw
MTsKLX0KLQotLy8gVGVzdCBuZXN0ZWQgZXh0ZW5zaW9ucy4KLW1lc3NhZ2UgTmVzdGVkQm9vayB7
Ci0gIGV4dGVuZCBCb29rIHsKLSAgICBvcHRpb25hbCBOZXN0ZWRCb29rIGFub3RoZXJfYm9vayA9
IDMwMTsKLSAgfQotICAvLyBSZWN1cnNlCi0gIG9wdGlvbmFsIEJvb2sgYm9vayA9IDE7Ci19Ci0K
LS8vIEZvciB0ZXN0aW5nIHJlc2lsaWVuY3kgb2Ygb3VyIHByb3Rvc3RyZWFtIHBhcnNlci4KLS8v
IEZpZWxkIG51bWJlciBvZiBOZXN0ZWRCb29rIGlzIHJldXNlZCBmb3Igc29tZXRoaW5nIGVsc2Uu
Ci1tZXNzYWdlIEJhZE5lc3RlZEJvb2sgewotICByZXBlYXRlZCB1aW50MzIgYm9vayA9IDEgW3Bh
Y2tlZD10cnVlXTsgIC8vIFBhY2tlZCB0byBvcHRpb25hbCBtZXNzYWdlLgotfQotCi0vLyBBIHJl
Y3Vyc2l2ZWx5IGRlZmluZWQgbWVzc2FnZS4KLW1lc3NhZ2UgQ3ljbGljIHsKLSAgb3B0aW9uYWwg
aW50MzIgbV9pbnQgPSAxOwotICBvcHRpb25hbCBzdHJpbmcgbV9zdHIgPSAyOwotICBvcHRpb25h
bCBCb29rIG1fYm9vayA9IDM7Ci0gIHJlcGVhdGVkIEF1dGhvciBtX2F1dGhvciA9IDU7Ci0gIG9w
dGlvbmFsIEN5Y2xpYyBtX2N5Y2xpYyA9IDQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9kZWZhdWx0X3ZhbHVlLnByb3RvIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvZGVmYXVsdF92YWx1ZS5wcm90bwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NjYzc0MWMyZDcyZDM0ODI4OTkyNmZjNjcz
ZmNjMjA1NWViY2RiNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9kZWZhdWx0X3Zh
bHVlLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1
ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIw
MDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBnb29n
bGUucHJvdG9idWYudGVzdGluZzsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvYW55LnByb3Rv
IjsKLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90byI7Ci1pbXBvcnQgImdvb2ds
ZS9wcm90b2J1Zi93cmFwcGVycy5wcm90byI7Ci0KLW1lc3NhZ2UgRGVmYXVsdFZhbHVlVGVzdENh
c2VzIHsKLSAgRG91YmxlTWVzc2FnZSBlbXB0eV9kb3VibGUgPSAxOwotICBEb3VibGVNZXNzYWdl
IGRvdWJsZV93aXRoX2RlZmF1bHRfdmFsdWUgPSAyOwotICBEb3VibGVNZXNzYWdlIGRvdWJsZV93
aXRoX25vbmRlZmF1bHRfdmFsdWUgPSAzOwotICBEb3VibGVNZXNzYWdlIHJlcGVhdGVkX2RvdWJs
ZSA9IDQ7Ci0gIERvdWJsZU1lc3NhZ2UgbmVzdGVkX21lc3NhZ2UgPSA1OwotICBEb3VibGVNZXNz
YWdlIHJlcGVhdGVkX25lc3RlZF9tZXNzYWdlID0gNjsKLSAgRG91YmxlTWVzc2FnZSBkb3VibGVf
bWVzc2FnZV93aXRoX29uZW9mID0gNzsKLSAgU3RydWN0TWVzc2FnZSBlbXB0eV9zdHJ1Y3QgPSAy
MDE7Ci0gIFN0cnVjdE1lc3NhZ2UgZW1wdHlfc3RydWN0MiA9IDIwMjsKLSAgU3RydWN0TWVzc2Fn
ZSBzdHJ1Y3Rfd2l0aF9udWxsX3ZhbHVlID0gMjAzOwotICBTdHJ1Y3RNZXNzYWdlIHN0cnVjdF93
aXRoX3ZhbHVlcyA9IDIwNDsKLSAgU3RydWN0TWVzc2FnZSBzdHJ1Y3Rfd2l0aF9uZXN0ZWRfc3Ry
dWN0ID0gMjA1OwotICBTdHJ1Y3RNZXNzYWdlIHN0cnVjdF93aXRoX25lc3RlZF9saXN0ID0gMjA2
OwotICBTdHJ1Y3RNZXNzYWdlIHN0cnVjdF93aXRoX2xpc3Rfb2ZfbnVsbHMgPSAyMDc7Ci0gIFN0
cnVjdE1lc3NhZ2Ugc3RydWN0X3dpdGhfbGlzdF9vZl9saXN0cyA9IDIwODsKLSAgU3RydWN0TWVz
c2FnZSBzdHJ1Y3Rfd2l0aF9saXN0X29mX3N0cnVjdHMgPSAyMDk7Ci0gIGdvb2dsZS5wcm90b2J1
Zi5TdHJ1Y3QgdG9wX2xldmVsX3N0cnVjdCA9IDIxMDsKLSAgVmFsdWVNZXNzYWdlIHZhbHVlX3dy
YXBwZXJfc2ltcGxlID0gMjEyOwotICBWYWx1ZU1lc3NhZ2UgdmFsdWVfd3JhcHBlcl93aXRoX3N0
cnVjdCA9IDIxMzsKLSAgVmFsdWVNZXNzYWdlIHZhbHVlX3dyYXBwZXJfd2l0aF9saXN0ID0gMjE0
OwotICBMaXN0VmFsdWVNZXNzYWdlIGxpc3RfdmFsdWVfd3JhcHBlciA9IDIxNTsKLSAgZ29vZ2xl
LnByb3RvYnVmLlZhbHVlIHRvcF9sZXZlbF92YWx1ZV9zaW1wbGUgPSAyMTY7Ci0gIGdvb2dsZS5w
cm90b2J1Zi5WYWx1ZSB0b3BfbGV2ZWxfdmFsdWVfd2l0aF9zdHJ1Y3QgPSAyMTc7Ci0gIGdvb2ds
ZS5wcm90b2J1Zi5WYWx1ZSB0b3BfbGV2ZWxfdmFsdWVfd2l0aF9saXN0ID0gMjE4OwotICBnb29n
bGUucHJvdG9idWYuTGlzdFZhbHVlIHRvcF9sZXZlbF9saXN0dmFsdWUgPSAyMTk7Ci0gIEFueU1l
c3NhZ2UgZW1wdHlfYW55ID0gMzAxOwotICBBbnlNZXNzYWdlIHR5cGVfb25seV9hbnkgPSAzMDI7
Ci0gIEFueU1lc3NhZ2UgcmVjdXJzaXZlX2FueSA9IDMwMzsKLSAgQW55TWVzc2FnZSBhbnlfd2l0
aF9tZXNzYWdlX3ZhbHVlID0gMzA0OwotICBBbnlNZXNzYWdlIGFueV93aXRoX25lc3RlZF9tZXNz
YWdlID0gMzA1OwotICBBbnlNZXNzYWdlIGFueV93aXRoX21lc3NhZ2VfY29udGFpbmluZ19tYXAg
PSAzMDY7Ci0gIEFueU1lc3NhZ2UgYW55X3dpdGhfbWVzc2FnZV9jb250YWluaW5nX3N0cnVjdCA9
IDMwNzsKLSAgZ29vZ2xlLnByb3RvYnVmLkFueSB0b3BfbGV2ZWxfYW55ID0gMzA4OwotICBTdHJp
bmd0b0ludE1hcCBlbXB0eV9tYXAgPSA0MDE7Ci0gIFN0cmluZ3RvSW50TWFwIHN0cmluZ190b19p
bnQgPSA0MDI7Ci0gIEludFRvU3RyaW5nTWFwIGludF90b19zdHJpbmcgPSA0MDM7Ci0gIE1peGVk
TWFwIG1peGVkMSA9IDQwNDsKLSAgTWl4ZWRNYXAyIG1peGVkMiA9IDQwNTsKLSAgTWl4ZWRNYXAy
IGVtcHR5X21peGVkMiA9IDQwNjsKLSAgTWVzc2FnZU1hcCBtYXBfb2Zfb2JqZWN0cyA9IDQwNzsK
LSAgTWl4ZWRNYXAgbWl4ZWRfZW1wdHkgPSA0MDg7Ci0gIE1lc3NhZ2VNYXAgbWVzc2FnZV9tYXBf
ZW1wdHkgPSA0MDk7Ci0gIERvdWJsZVZhbHVlTWVzc2FnZSBkb3VibGVfdmFsdWUgPSA1MDE7Ci0g
IERvdWJsZVZhbHVlTWVzc2FnZSBkb3VibGVfdmFsdWVfZGVmYXVsdCA9IDUwMjsKLX0KLQotbWVz
c2FnZSBEb3VibGVNZXNzYWdlIHsKLSAgZG91YmxlIGRvdWJsZV92YWx1ZSA9IDE7Ci0gIHJlcGVh
dGVkIGRvdWJsZSByZXBlYXRlZF9kb3VibGUgPSAyOwotICBEb3VibGVNZXNzYWdlIG5lc3RlZF9t
ZXNzYWdlID0gMzsKLSAgcmVwZWF0ZWQgRG91YmxlTWVzc2FnZSByZXBlYXRlZF9uZXN0ZWRfbWVz
c2FnZSA9IDQ7Ci0gIGdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZSBkb3VibGVfd3JhcHBlciA9
IDEwMDsKLSAgb25lb2YgdmFsdWUgewotICAgIHN0cmluZyBzdHJfdmFsdWUgPSAxMTI7Ci0gICAg
aW50NjQgbnVtX3ZhbHVlID0gMTEzOwotICB9Ci19Ci0KLW1lc3NhZ2UgU3RydWN0TWVzc2FnZSB7
Ci0gIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qgc3RydWN0ID0gMTsKLX0KLQotbWVzc2FnZSBWYWx1
ZU1lc3NhZ2UgewotICBnb29nbGUucHJvdG9idWYuVmFsdWUgdmFsdWUgPSAxOwotfQotCi1tZXNz
YWdlIExpc3RWYWx1ZU1lc3NhZ2UgewotICBnb29nbGUucHJvdG9idWYuTGlzdFZhbHVlIHNob3Bw
aW5nX2xpc3QgPSAxOwotfQotbWVzc2FnZSBSZXF1ZXN0TWVzc2FnZSB7Ci0gIHN0cmluZyBjb250
ZW50ID0gMTsKLX0KLQotLy8gQSB0ZXN0IHNlcnZpY2UuCi1zZXJ2aWNlIERlZmF1bHRWYWx1ZVRl
c3RTZXJ2aWNlIHsKLSAgLy8gQSB0ZXN0IG1ldGhvZC4KLSAgcnBjIENhbGwoUmVxdWVzdE1lc3Nh
Z2UpIHJldHVybnMgKERlZmF1bHRWYWx1ZVRlc3RDYXNlcyk7Ci19Ci0KLW1lc3NhZ2UgQW55TWVz
c2FnZSB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5BbnkgYW55ID0gMTsKLSAgQW55RGF0YSBkYXRhID0g
MjsKLX0KLQotbWVzc2FnZSBBbnlEYXRhIHsKLSAgaW50MzIgYXR0ciA9IDE7Ci0gIHN0cmluZyBz
dHIgPSAyOwotICByZXBlYXRlZCBzdHJpbmcgbXNncyA9IDM7Ci0gIEFueURhdGEgbmVzdGVkX2Rh
dGEgPSA0OwotICBtYXA8c3RyaW5nLCBzdHJpbmc+IG1hcF9kYXRhID0gNzsKLSAgZ29vZ2xlLnBy
b3RvYnVmLlN0cnVjdCBzdHJ1Y3RfZGF0YSA9IDg7Ci0gIHJlcGVhdGVkIEFueURhdGEgcmVwZWF0
ZWRfZGF0YSA9IDk7Ci19Ci0KLW1lc3NhZ2UgU3RyaW5ndG9JbnRNYXAgewotICBtYXA8c3RyaW5n
LCBpbnQzMj4gbWFwID0gMTsKLX0KLQotbWVzc2FnZSBJbnRUb1N0cmluZ01hcCB7Ci0gIG1hcDxp
bnQzMiwgc3RyaW5nPiBtYXAgPSAxOwotfQotCi1tZXNzYWdlIE1peGVkTWFwIHsKLSAgc3RyaW5n
IG1zZyA9IDE7Ci0gIG1hcDxzdHJpbmcsIGZsb2F0PiBtYXAgPSAyOwotICBpbnQzMiBpbnRfdmFs
dWUgPSAzOwotfQotCi1tZXNzYWdlIE1peGVkTWFwMiB7Ci0gIGVudW0gRSB7Ci0gICAgRTAgPSAw
OwotICAgIEUxID0gMTsKLSAgICBFMiA9IDI7Ci0gICAgRTMgPSAzOwotICB9Ci0gIG1hcDxpbnQz
MiwgYm9vbD4gbWFwID0gMTsKLSAgRSBlZSA9IDI7Ci0gIHN0cmluZyBtc2cgPSA0OwotfQotCi1t
ZXNzYWdlIE1lc3NhZ2VNYXAgewotICBtZXNzYWdlIE0gewotICAgIGludDMyIGlubmVyX2ludCA9
IDE7Ci0gICAgc3RyaW5nIGlubmVyX3RleHQgPSAyOwotICB9Ci0gIG1hcDxzdHJpbmcsIE0+IG1h
cCA9IDE7Ci19Ci0KLW1lc3NhZ2UgRG91YmxlVmFsdWVNZXNzYWdlIHsKLSAgZ29vZ2xlLnByb3Rv
YnVmLkRvdWJsZVZhbHVlIGRvdWJsZSA9IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9kZWZhdWx0X3ZhbHVlX3Rlc3QucHJvdG8gYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9kZWZhdWx0X3ZhbHVlX3Rl
c3QucHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMjg4MzQxMGUyYzdlNjBi
YTE2ODE4Y2RmZmZkODY3Y2ZjZTc3ODguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEv
ZGVmYXVsdF92YWx1ZV90ZXN0LnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAot
Ly8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0v
LyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0
dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXN5bnRheCA9ICJwcm90bzMiOwot
Ci1wYWNrYWdlIGdvb2dsZS5wcm90b2J1Zi50ZXN0aW5nOwotCi1tZXNzYWdlIERlZmF1bHRWYWx1
ZVRlc3QgewotICBkb3VibGUgZG91YmxlX3ZhbHVlID0gMTsKLSAgcmVwZWF0ZWQgZG91YmxlIHJl
cGVhdGVkX2RvdWJsZSA9IDI7Ci0gIGZsb2F0IGZsb2F0X3ZhbHVlID0gMzsKLSAgaW50NjQgaW50
NjRfdmFsdWUgPSA1OwotICB1aW50NjQgdWludDY0X3ZhbHVlID0gNzsKLSAgaW50MzIgaW50MzJf
dmFsdWUgPSA5OwotICB1aW50MzIgdWludDMyX3ZhbHVlID0gMTE7Ci0gIGJvb2wgYm9vbF92YWx1
ZSA9IDEzOwotICBzdHJpbmcgc3RyaW5nX3ZhbHVlID0gMTU7Ci0gIGJ5dGVzIGJ5dGVzX3ZhbHVl
ID0gMTcgW2N0eXBlID0gQ09SRF07Ci0KLSAgZW51bSBFbnVtRGVmYXVsdCB7Ci0gICAgRU5VTV9G
SVJTVCA9IDA7Ci0gICAgRU5VTV9TRUNPTkQgPSAxOwotICAgIEVOVU1fVEhJUkQgPSAyOwotICB9
Ci0gIEVudW1EZWZhdWx0IGVudW1fdmFsdWUgPSAxODsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL2ZpZWxkX21hc2sucHJvdG8gYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9maWVsZF9tYXNrLnByb3RvCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGIyYmM1ZjJlMjkxNTdlODczMGVmNWFmY2Fk
ZjMzOTIxZTFhZjA2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL2ZpZWxkX21hc2su
cHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJz
IC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdv
b2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMyI7Ci0KLXBhY2thZ2UgZ29vZ2xlLnBy
b3RvYnVmLnRlc3Rpbmc7Ci0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucHJv
dG8iOwotCi1tZXNzYWdlIE5lc3RlZEZpZWxkTWFzayB7Ci0gIHN0cmluZyBkYXRhID0gMTsKLSAg
Z29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzayBzaW5nbGVfbWFzayA9IDI7Ci0gIHJlcGVhdGVkIGdv
b2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sgcmVwZWF0ZWRfbWFzayA9IDM7Ci19Ci0KLW1lc3NhZ2Ug
RmllbGRNYXNrVGVzdCB7Ci0gIHN0cmluZyBpZCA9IDE7Ci0gIGdvb2dsZS5wcm90b2J1Zi5GaWVs
ZE1hc2sgc2luZ2xlX21hc2sgPSAyOwotICByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuRmllbGRN
YXNrIHJlcGVhdGVkX21hc2sgPSAzOwotICByZXBlYXRlZCBOZXN0ZWRGaWVsZE1hc2sgbmVzdGVk
X21hc2sgPSA0OwotfQotCi1tZXNzYWdlIEZpZWxkTWFza1Rlc3RDYXNlcyB7Ci0gIEZpZWxkTWFz
a1dyYXBwZXIgc2luZ2xlX21hc2sgPSAxOwotICBGaWVsZE1hc2tXcmFwcGVyIG11bHRpcGxlX21h
c2sgPSAyOwotICBGaWVsZE1hc2tXcmFwcGVyIHNuYWtlX2NhbWVsID0gMzsKLSAgRmllbGRNYXNr
V3JhcHBlciBlbXB0eV9maWVsZCA9IDQ7Ci0gIEZpZWxkTWFza1dyYXBwZXIgYXBpYXJ5X2Zvcm1h
dDEgPSA1OwotICBGaWVsZE1hc2tXcmFwcGVyIGFwaWFyeV9mb3JtYXQyID0gNjsKLSAgRmllbGRN
YXNrV3JhcHBlciBhcGlhcnlfZm9ybWF0MyA9IDc7Ci0gIEZpZWxkTWFza1dyYXBwZXIgbWFwX2tl
eTEgPSA4OwotICBGaWVsZE1hc2tXcmFwcGVyIG1hcF9rZXkyID0gOTsKLSAgRmllbGRNYXNrV3Jh
cHBlciBtYXBfa2V5MyA9IDEwOwotICBGaWVsZE1hc2tXcmFwcGVyIG1hcF9rZXk0ID0gMTE7Ci0g
IEZpZWxkTWFza1dyYXBwZXIgbWFwX2tleTUgPSAxMjsKLX0KLQotbWVzc2FnZSBGaWVsZE1hc2tX
cmFwcGVyIHsKLSAgZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzayBtYXNrID0gMTsKLX0KLQotc2Vy
dmljZSBGaWVsZE1hc2tUZXN0U2VydmljZSB7Ci0gIHJwYyBDYWxsKEZpZWxkTWFza1Rlc3RDYXNl
cykgcmV0dXJucyAoRmllbGRNYXNrVGVzdENhc2VzKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL21hcHMucHJvdG8gYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9tYXBzLnByb3RvCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2NDc1ZWNkZGMyNTYxZjE0YzlhNTE1ODgxODI1OTRjODQxMzkwMGU1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL21hcHMucHJvdG8KKysrIC9kZXYvbnVs
bApAQCAtMSw4NiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBp
bnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wt
YnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
Ly8gUHJvdG8gdG8gdGVzdCBwcm90bzMgbWFwcy4KLXN5bnRheCA9ICJwcm90bzMiOwotCi1wYWNr
YWdlIGdvb2dsZS5wcm90b2J1Zi50ZXN0aW5nLm1hcHM7Ci1vcHRpb24gamF2YV9wYWNrYWdlID0g
ImNvbS5nb29nbGUucHJvdG9idWYudGVzdGluZy5tYXBzIjsKLQotbWVzc2FnZSBNYXBJbiB7Ci0g
IHN0cmluZyBvdGhlciA9IDE7Ci0gIHJlcGVhdGVkIHN0cmluZyB0aGluZ3MgPSAyOwotICBtYXA8
c3RyaW5nLCBzdHJpbmc+IG1hcF9pbnB1dCA9IDM7Ci19Ci0KLW1lc3NhZ2UgTWFwT3V0IHsKLSAg
bWFwPHN0cmluZywgTWFwTT4gbWFwMSA9IDE7Ci0gIG1hcDxzdHJpbmcsIE1hcE91dD4gbWFwMiA9
IDI7Ci0gIG1hcDxpbnQzMiwgc3RyaW5nPiBtYXAzID0gMzsKLSAgbWFwPGJvb2wsIHN0cmluZz4g
bWFwNCA9IDU7Ci0gIHN0cmluZyBiYXIgPSA0OwotfQotCi0vLyBBIG1lc3NhZ2Ugd2l0aCBleGFj
dGx5IHRoZSBzYW1lIHdpcmUgcmVwcmVzZW50YXRpb24gYXMgTWFwT3V0LCBidXQgdXNpbmcKLS8v
IHJlcGVhdGVkIG1lc3NhZ2UgZmllbGRzIGluc3RlYWQgb2YgbWFwIGZpZWxkcy4gV2UgdXNlIHRo
aXMgbWVzc2FnZSB0byB0ZXN0Ci0vLyB0aGUgd2lyZS1mb3JtYXQgY29tcGF0aWJpbGl0eSBvZiB0
aGUgSlNPTiB0cmFuc2NvZGVyIChlLmcuLCB3aGV0aGVyIGl0Ci0vLyBoYW5kbGVzIG1pc3Npbmcg
a2V5cyBjb3JyZWN0bHkpLgotbWVzc2FnZSBNYXBPdXRXaXJlRm9ybWF0IHsKLSAgbWVzc2FnZSBN
YXAxRW50cnkgewotICAgIHN0cmluZyBrZXkgPSAxOwotICAgIE1hcE0gdmFsdWUgPSAyOwotICB9
Ci0gIHJlcGVhdGVkIE1hcDFFbnRyeSBtYXAxID0gMTsKLSAgbWVzc2FnZSBNYXAyRW50cnkgewot
ICAgIHN0cmluZyBrZXkgPSAxOwotICAgIE1hcE91dCB2YWx1ZSA9IDI7Ci0gIH0KLSAgcmVwZWF0
ZWQgTWFwMkVudHJ5IG1hcDIgPSAyOwotICBtZXNzYWdlIE1hcDNFbnRyeSB7Ci0gICAgaW50MzIg
a2V5ID0gMTsKLSAgICBzdHJpbmcgdmFsdWUgPSAyOwotICB9Ci0gIHJlcGVhdGVkIE1hcDNFbnRy
eSBtYXAzID0gMzsKLSAgbWVzc2FnZSBNYXA0RW50cnkgewotICAgIGJvb2wga2V5ID0gMTsKLSAg
ICBzdHJpbmcgdmFsdWUgPSAyOwotICB9Ci0gIHJlcGVhdGVkIE1hcDRFbnRyeSBtYXA0ID0gNTsK
LSAgc3RyaW5nIGJhciA9IDQ7Ci19Ci0KLW1lc3NhZ2UgTWFwTSB7Ci0gIHN0cmluZyBmb28gPSAx
OwotfQotCi1zZXJ2aWNlIFRlc3RTZXJ2aWNlIHsKLSAgcnBjIENhbGwxKE1hcEluKSByZXR1cm5z
IChNYXBPdXQpOwotICBycGMgQ2FsbDIoTWFwSW4pIHJldHVybnMgKE1hcE91dCk7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9vbmVvZnMu
cHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9vbmVvZnMu
cHJvdG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYzlmYTA4NGQxZDFmNmZmNjk0
ZWRmNjBkNmVkMDY4MmYwODVlZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvb25l
b2ZzLnByb3RvCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFByb3RvIHRvIHRlc3Qgb25lb2ZzLgotc3ludGF4ID0g
InByb3RvMyI7Ci0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90byI7Ci1pbXBvcnQg
Imdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8iOwotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYv
dGltZXN0YW1wLnByb3RvIjsKLQotcGFja2FnZSBnb29nbGUucHJvdG9idWYudGVzdGluZy5vbmVv
ZnM7Ci1vcHRpb24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUucHJvdG9idWYudGVzdGluZy5v
bmVvZnMiOwotCi1tZXNzYWdlIE9uZU9mc1JlcXVlc3QgewotICBzdHJpbmcgdmFsdWUgPSAxOwot
ICBvbmVvZiBkYXRhIHsKLSAgICBzdHJpbmcgc3RyX2RhdGEgPSAyOwotICAgIGludDMyIGludF9k
YXRhID0gMzsKLSAgICAvLyBTaW1wbGUgbWVzc2FnZQotICAgIERhdGEgbWVzc2FnZV9kYXRhID0g
NDsKLSAgICAvLyBXZWxsIGtub3duIHR5cGVzCi0gICAgZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCBz
dHJ1Y3RfZGF0YSA9IDU7Ci0gICAgZ29vZ2xlLnByb3RvYnVmLlZhbHVlIHZhbHVlX2RhdGEgPSA2
OwotICAgIGdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUgbGlzdF92YWx1ZV9kYXRhID0gNzsKLSAg
ICBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIHRzX2RhdGEgPSA4OwotICB9Ci0gIGdvb2dsZS5w
cm90b2J1Zi5BbnkgYW55X2RhdGEgPSAxOTsKLX0KLQotbWVzc2FnZSBEYXRhIHsKLSAgaW50MzIg
ZGF0YV92YWx1ZSA9IDE7Ci19Ci0KLW1lc3NhZ2UgUmVzcG9uc2UgewotICBzdHJpbmcgdmFsdWUg
PSAxOwotfQotCi1zZXJ2aWNlIFRlc3RTZXJ2aWNlIHsKLSAgLy8gVGVzdCBjYWxsLgotICBycGMg
Q2FsbChPbmVPZnNSZXF1ZXN0KSByZXR1cm5zIChSZXNwb25zZSk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9zdHJ1Y3QucHJvdG8gYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS9zdHJ1Y3QucHJvdG8KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNWFiYTBkNmQ5ODgxYjg5NjNhMDM1M2NkZDFl
MGFhMGI0YWRjMTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1
Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvc3RydWN0LnByb3Rv
CisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdv
b2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUu
Y29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLS8vIFByb3RvIHRvIHRlc3QgcHJvdG8zIHN0cnVjdC4KLXN5bnRheCA9ICJw
cm90bzMiOwotCi1wYWNrYWdlIGdvb2dsZS5wcm90b2J1Zi50ZXN0aW5nLnN0cnVjdHM7Ci1vcHRp
b24gamF2YV9wYWNrYWdlID0gImNvbS5nb29nbGUucHJvdG9idWYudGVzdGluZy5zdHJ1Y3RzIjsK
LQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvIjsKLQotbWVzc2FnZSBTdHJ1
Y3RUeXBlIHsKLSAgZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCBvYmplY3QgPSAxOwotfQotCi1zZXJ2
aWNlIFRlc3RTZXJ2aWNlIHsKLSAgcnBjIENhbGwoU3RydWN0VHlwZSkgcmV0dXJucyAoU3RydWN0
VHlwZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90
ZXN0ZGF0YS90aW1lc3RhbXBfZHVyYXRpb24ucHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC90ZXN0ZGF0YS90aW1lc3RhbXBfZHVyYXRpb24ucHJvdG8KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDU2MzUxZjE2OGNiMDBhN2Q3ZjNiYzVkY2UyN2M1NWQxYTViMjYx
MGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdGVzdGRhdGEvdGltZXN0YW1wX2R1cmF0aW9uLnBy
b3RvCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIFByb3RvIHRvIHRlc3QgcHJvdG8zIFRpbWVzdGFtcCBhbmQgRHVy
YXRpb24uCi1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBnb29nbGUucHJvdG9idWYudGVz
dGluZy50aW1lc3RhbXBkdXJhdGlvbjsKLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAiY29tLmdvb2ds
ZS5wcm90b2J1Zi50ZXN0aW5nLnRpbWVzdGFtcGR1cmF0aW9uIjsKLQotaW1wb3J0ICJnb29nbGUv
cHJvdG9idWYvdGltZXN0YW1wLnByb3RvIjsKLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2R1cmF0
aW9uLnByb3RvIjsKLQotbWVzc2FnZSBUaW1lc3RhbXBEdXJhdGlvbiB7Ci0gIGdvb2dsZS5wcm90
b2J1Zi5UaW1lc3RhbXAgdHMgPSAxOwotICBnb29nbGUucHJvdG9idWYuRHVyYXRpb24gZHVyID0g
MjsKLX0KLQotc2VydmljZSBUZXN0U2VydmljZSB7Ci0gIHJwYyBDYWxsKFRpbWVzdGFtcER1cmF0
aW9uKSByZXR1cm5zIChUaW1lc3RhbXBEdXJhdGlvbik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90ZXN0ZGF0YS93cmFwcGVycy5wcm90byBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL3dyYXBwZXJzLnByb3RvCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWJjOTlmMjQ1NmU2NTg0MmY4OTRkOWIwNmVlNDYx
YzdhNWM3NTQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Rlc3RkYXRhL3dyYXBwZXJzLnByb3Rv
CisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBH
b29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi1zeW50YXggPSAicHJvdG8zIjsKLQotcGFja2FnZSBnb29nbGUucHJvdG9i
dWYudGVzdGluZzsKLQotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8iOwot
Ci0vLyBUb3AtbGV2ZWwgdGVzdCBjYXNlcyBwcm90byB1c2VkIGJ5IE1hcnNoYWxsaW5nVGVzdC4g
U2VlIGRlc2NyaXB0aW9uCi0vLyBhdCB0aGUgdG9wIG9mIHRoZSBjbGFzcyBNYXJzaGFsbGluZ1Rl
c3QgZm9yIGRldGFpbHMgb24gaG93IHRvIHdyaXRlCi0vLyB0ZXN0IGNhc2VzLgotbWVzc2FnZSBX
cmFwcGVyc1Rlc3RDYXNlcyB7Ci0gIERvdWJsZVdyYXBwZXIgZG91YmxlX3dyYXBwZXIgPSAxOwot
ICBGbG9hdFdyYXBwZXIgZmxvYXRfd3JhcHBlciA9IDI7Ci0gIEludDY0V3JhcHBlciBpbnQ2NF93
cmFwcGVyID0gMzsKLSAgVUludDY0V3JhcHBlciB1aW50NjRfd3JhcHBlciA9IDQ7Ci0gIEludDMy
V3JhcHBlciBpbnQzMl93cmFwcGVyID0gNTsKLSAgVUludDMyV3JhcHBlciB1aW50MzJfd3JhcHBl
ciA9IDY7Ci0gIEJvb2xXcmFwcGVyIGJvb2xfd3JhcHBlciA9IDc7Ci0gIFN0cmluZ1dyYXBwZXIg
c3RyaW5nX3dyYXBwZXIgPSA4OwotICBCeXRlc1dyYXBwZXIgYnl0ZXNfd3JhcHBlciA9IDk7Ci0K
LSAgRG91YmxlV3JhcHBlciBkb3VibGVfd3JhcHBlcl9kZWZhdWx0ID0gMTA7Ci0gIEZsb2F0V3Jh
cHBlciBmbG9hdF93cmFwcGVyX2RlZmF1bHQgPSAxMTsKLSAgSW50NjRXcmFwcGVyIGludDY0X3dy
YXBwZXJfZGVmYXVsdCA9IDEyOwotICBVSW50NjRXcmFwcGVyIHVpbnQ2NF93cmFwcGVyX2RlZmF1
bHQgPSAxMzsKLSAgSW50MzJXcmFwcGVyIGludDMyX3dyYXBwZXJfZGVmYXVsdCA9IDE0OwotICBV
SW50MzJXcmFwcGVyIHVpbnQzMl93cmFwcGVyX2RlZmF1bHQgPSAxNTsKLSAgQm9vbFdyYXBwZXIg
Ym9vbF93cmFwcGVyX2RlZmF1bHQgPSAxNjsKLSAgU3RyaW5nV3JhcHBlciBzdHJpbmdfd3JhcHBl
cl9kZWZhdWx0ID0gMTc7Ci0gIEJ5dGVzV3JhcHBlciBieXRlc193cmFwcGVyX2RlZmF1bHQgPSAx
ODsKLX0KLQotbWVzc2FnZSBEb3VibGVXcmFwcGVyIHsKLSAgZ29vZ2xlLnByb3RvYnVmLkRvdWJs
ZVZhbHVlIGRvdWJsZSA9IDE7Ci19Ci0KLW1lc3NhZ2UgRmxvYXRXcmFwcGVyIHsKLSAgZ29vZ2xl
LnByb3RvYnVmLkZsb2F0VmFsdWUgZmxvYXQgPSAxOwotfQotCi1tZXNzYWdlIEludDY0V3JhcHBl
ciB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlIGludDY0ID0gMTsKLX0KLQotbWVzc2Fn
ZSBVSW50NjRXcmFwcGVyIHsKLSAgZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlIHVpbnQ2NCA9
IDE7Ci19Ci0KLW1lc3NhZ2UgSW50MzJXcmFwcGVyIHsKLSAgZ29vZ2xlLnByb3RvYnVmLkludDMy
VmFsdWUgaW50MzIgPSAxOwotfQotCi1tZXNzYWdlIFVJbnQzMldyYXBwZXIgewotICBnb29nbGUu
cHJvdG9idWYuVUludDMyVmFsdWUgdWludDMyID0gMTsKLX0KLQotbWVzc2FnZSBCb29sV3JhcHBl
ciB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUgYm9vbCA9IDE7Ci19Ci0KLW1lc3NhZ2Ug
U3RyaW5nV3JhcHBlciB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBzdHJpbmcgPSAx
OwotfQotCi1tZXNzYWdlIEJ5dGVzV3JhcHBlciB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5CeXRlc1Zh
bHVlIGJ5dGVzID0gMTsKLX0KLQotc2VydmljZSBXcmFwcGVyc1Rlc3RTZXJ2aWNlIHsKLSAgcnBj
IENhbGwoV3JhcHBlcnNUZXN0Q2FzZXMpIHJldHVybnMgKFdyYXBwZXJzVGVzdENhc2VzKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5mby5j
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5mby5jYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBhOGVlN2EyYWZmYTJmMmZmNTA0Njk1OGYwZjM1Zjk4
YTljM2I2YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90eXBlX2luZm8uY2MKKysrIC9kZXYvbnVs
bApAQCAtMSwxNzEgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEg
aW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29s
LWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90eXBlX2luZm8uaD4KLQot
I2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3R5cGUucGIuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC91dGlsaXR5Lmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3BpZWNlLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL21hcF91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3N0dWJzL3N0YXR1cy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXNv
ci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3Bh
Y2UgdXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLQotbmFtZXNwYWNlIHsKLS8vIEEgVHlw
ZUluZm8gdGhhdCBsb29rcyB1cCBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBhIFR5cGVSZXNvbHZl
ci4KLWNsYXNzIFR5cGVJbmZvRm9yVHlwZVJlc29sdmVyIDogcHVibGljIFR5cGVJbmZvIHsKLSBw
dWJsaWM6Ci0gIGV4cGxpY2l0IFR5cGVJbmZvRm9yVHlwZVJlc29sdmVyKFR5cGVSZXNvbHZlciog
dHlwZV9yZXNvbHZlcikKLSAgICAgIDogdHlwZV9yZXNvbHZlcl8odHlwZV9yZXNvbHZlcikge30K
LQotICB2aXJ0dWFsIH5UeXBlSW5mb0ZvclR5cGVSZXNvbHZlcigpIHsKLSAgICBEZWxldGVDYWNo
ZWRUeXBlcygmY2FjaGVkX3R5cGVzXyk7Ci0gICAgRGVsZXRlQ2FjaGVkVHlwZXMoJmNhY2hlZF9l
bnVtc18pOwotICB9Ci0KLSAgdmlydHVhbCB1dGlsOjpTdGF0dXNPcjxjb25zdCBnb29nbGU6OnBy
b3RvYnVmOjpUeXBlKj4gUmVzb2x2ZVR5cGVVcmwoCi0gICAgICBTdHJpbmdQaWVjZSB0eXBlX3Vy
bCkgY29uc3QgewotICAgIG1hcDxTdHJpbmdQaWVjZSwgU3RhdHVzT3JUeXBlPjo6aXRlcmF0b3Ig
aXQgPSBjYWNoZWRfdHlwZXNfLmZpbmQodHlwZV91cmwpOwotICAgIGlmIChpdCAhPSBjYWNoZWRf
dHlwZXNfLmVuZCgpKSB7Ci0gICAgICByZXR1cm4gaXQtPnNlY29uZDsKLSAgICB9Ci0gICAgLy8g
U3RvcmVzIHRoZSBzdHJpbmcgdmFsdWUgc28gaXQgY2FuIGJlIHJlZmVyZW5jZWQgdXNpbmcgU3Ry
aW5nUGllY2UgaW4gdGhlCi0gICAgLy8gY2FjaGVkX3R5cGVzXyBtYXAuCi0gICAgY29uc3Qgc3Ry
aW5nJiBzdHJpbmdfdHlwZV91cmwgPQotICAgICAgICAqc3RyaW5nX3N0b3JhZ2VfLmluc2VydCh0
eXBlX3VybC5Ub1N0cmluZygpKS5maXJzdDsKLSAgICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRf
cHRyPGdvb2dsZTo6cHJvdG9idWY6OlR5cGU+IHR5cGUobmV3IGdvb2dsZTo6cHJvdG9idWY6OlR5
cGUoKSk7Ci0gICAgdXRpbDo6U3RhdHVzIHN0YXR1cyA9Ci0gICAgICAgIHR5cGVfcmVzb2x2ZXJf
LT5SZXNvbHZlTWVzc2FnZVR5cGUoc3RyaW5nX3R5cGVfdXJsLCB0eXBlLmdldCgpKTsKLSAgICBT
dGF0dXNPclR5cGUgcmVzdWx0ID0KLSAgICAgICAgc3RhdHVzLm9rKCkgPyBTdGF0dXNPclR5cGUo
dHlwZS5yZWxlYXNlKCkpIDogU3RhdHVzT3JUeXBlKHN0YXR1cyk7Ci0gICAgY2FjaGVkX3R5cGVz
X1tzdHJpbmdfdHlwZV91cmxdID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQot
ICB2aXJ0dWFsIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUqIEdldFR5cGVCeVR5cGVVcmwo
Ci0gICAgICBTdHJpbmdQaWVjZSB0eXBlX3VybCkgY29uc3QgewotICAgIFN0YXR1c09yVHlwZSBy
ZXN1bHQgPSBSZXNvbHZlVHlwZVVybCh0eXBlX3VybCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5vaygp
ID8gcmVzdWx0LlZhbHVlT3JEaWUoKSA6IE5VTEw7Ci0gIH0KLQotICB2aXJ0dWFsIGNvbnN0IGdv
b2dsZTo6cHJvdG9idWY6OkVudW0qIEdldEVudW1CeVR5cGVVcmwoCi0gICAgICBTdHJpbmdQaWVj
ZSB0eXBlX3VybCkgY29uc3QgewotICAgIG1hcDxTdHJpbmdQaWVjZSwgU3RhdHVzT3JFbnVtPjo6
aXRlcmF0b3IgaXQgPSBjYWNoZWRfZW51bXNfLmZpbmQodHlwZV91cmwpOwotICAgIGlmIChpdCAh
PSBjYWNoZWRfZW51bXNfLmVuZCgpKSB7Ci0gICAgICByZXR1cm4gaXQtPnNlY29uZC5vaygpID8g
aXQtPnNlY29uZC5WYWx1ZU9yRGllKCkgOiBOVUxMOwotICAgIH0KLSAgICAvLyBTdG9yZXMgdGhl
IHN0cmluZyB2YWx1ZSBzbyBpdCBjYW4gYmUgcmVmZXJlbmNlZCB1c2luZyBTdHJpbmdQaWVjZSBp
biB0aGUKLSAgICAvLyBjYWNoZWRfZW51bXNfIG1hcC4KLSAgICBjb25zdCBzdHJpbmcmIHN0cmlu
Z190eXBlX3VybCA9Ci0gICAgICAgICpzdHJpbmdfc3RvcmFnZV8uaW5zZXJ0KHR5cGVfdXJsLlRv
U3RyaW5nKCkpLmZpcnN0OwotICAgIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8Z29vZ2xl
Ojpwcm90b2J1Zjo6RW51bT4gZW51bV90eXBlKAotICAgICAgICBuZXcgZ29vZ2xlOjpwcm90b2J1
Zjo6RW51bSgpKTsKLSAgICB1dGlsOjpTdGF0dXMgc3RhdHVzID0KLSAgICAgICAgdHlwZV9yZXNv
bHZlcl8tPlJlc29sdmVFbnVtVHlwZShzdHJpbmdfdHlwZV91cmwsIGVudW1fdHlwZS5nZXQoKSk7
Ci0gICAgU3RhdHVzT3JFbnVtIHJlc3VsdCA9Ci0gICAgICAgIHN0YXR1cy5vaygpID8gU3RhdHVz
T3JFbnVtKGVudW1fdHlwZS5yZWxlYXNlKCkpIDogU3RhdHVzT3JFbnVtKHN0YXR1cyk7Ci0gICAg
Y2FjaGVkX2VudW1zX1tzdHJpbmdfdHlwZV91cmxdID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1
bHQub2soKSA/IHJlc3VsdC5WYWx1ZU9yRGllKCkgOiBOVUxMOwotICB9Ci0KLSAgdmlydHVhbCBj
b25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogRmluZEZpZWxkKAotICAgICAgY29uc3QgZ29v
Z2xlOjpwcm90b2J1Zjo6VHlwZSogdHlwZSwgU3RyaW5nUGllY2UgY2FtZWxfY2FzZV9uYW1lKSBj
b25zdCB7Ci0gICAgaWYgKGluZGV4ZWRfdHlwZXNfLmZpbmQodHlwZSkgPT0gaW5kZXhlZF90eXBl
c18uZW5kKCkpIHsKLSAgICAgIFBvcHVsYXRlTmFtZUxvb2t1cFRhYmxlKHR5cGUpOwotICAgICAg
aW5kZXhlZF90eXBlc18uaW5zZXJ0KHR5cGUpOwotICAgIH0KLSAgICBTdHJpbmdQaWVjZSBuYW1l
ID0KLSAgICAgICAgRmluZFdpdGhEZWZhdWx0KGNhbWVsX2Nhc2VfbmFtZV90YWJsZV8sIGNhbWVs
X2Nhc2VfbmFtZSwgU3RyaW5nUGllY2UoKSk7Ci0gICAgaWYgKG5hbWUuZW1wdHkoKSkgewotICAg
ICAgLy8gRGlkbid0IGZpbmQgYSBtYXBwaW5nLiBVc2Ugd2hhdGV2ZXIgcHJvdmlkZWQuCi0gICAg
ICBuYW1lID0gY2FtZWxfY2FzZV9uYW1lOwotICAgIH0KLSAgICByZXR1cm4gRmluZEZpZWxkSW5U
eXBlT3JOdWxsKHR5cGUsIG5hbWUpOwotICB9Ci0KLSBwcml2YXRlOgotICB0eXBlZGVmIHV0aWw6
OlN0YXR1c09yPGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUqPiBTdGF0dXNPclR5cGU7Ci0g
IHR5cGVkZWYgdXRpbDo6U3RhdHVzT3I8Y29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bSo+IFN0
YXR1c09yRW51bTsKLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3RhdGljIHZvaWQgRGVs
ZXRlQ2FjaGVkVHlwZXMobWFwPFN0cmluZ1BpZWNlLCBUPiogY2FjaGVkX3R5cGVzKSB7Ci0gICAg
Zm9yICh0eXBlbmFtZSBtYXA8U3RyaW5nUGllY2UsIFQ+OjppdGVyYXRvciBpdCA9IGNhY2hlZF90
eXBlcy0+YmVnaW4oKTsKLSAgICAgICAgIGl0ICE9IGNhY2hlZF90eXBlcy0+ZW5kKCk7ICsraXQp
IHsKLSAgICAgIGlmIChpdC0+c2Vjb25kLm9rKCkpIHsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNv
bmQuVmFsdWVPckRpZSgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHZvaWQgUG9wdWxhdGVO
YW1lTG9va3VwVGFibGUoY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSogdHlwZSkgY29uc3Qg
ewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS0+ZmllbGRzX3NpemUoKTsgKytpKSB7Ci0g
ICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmllbGQgPSB0eXBlLT5maWVsZHMo
aSk7Ci0gICAgICBTdHJpbmdQaWVjZSBuYW1lID0gZmllbGQubmFtZSgpOwotICAgICAgU3RyaW5n
UGllY2UgY2FtZWxfY2FzZV9uYW1lID0gZmllbGQuanNvbl9uYW1lKCk7Ci0gICAgICBjb25zdCBT
dHJpbmdQaWVjZSogZXhpc3RpbmcgPSBJbnNlcnRPclJldHVybkV4aXN0aW5nKAotICAgICAgICAg
ICZjYW1lbF9jYXNlX25hbWVfdGFibGVfLCBjYW1lbF9jYXNlX25hbWUsIG5hbWUpOwotICAgICAg
aWYgKGV4aXN0aW5nICYmICpleGlzdGluZyAhPSBuYW1lKSB7Ci0gICAgICAgIEdPT0dMRV9MT0co
V0FSTklORykgPDwgIkZpZWxkICciIDw8IG5hbWUgPDwgIicgYW5kICciIDw8ICpleGlzdGluZwot
ICAgICAgICAgICAgICAgICAgICAgPDwgIicgbWFwIHRvIHRoZSBzYW1lIGNhbWVsIGNhc2UgbmFt
ZSAnIiA8PCBjYW1lbF9jYXNlX25hbWUKLSAgICAgICAgICAgICAgICAgICAgIDw8ICInLiI7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgVHlwZVJlc29sdmVyKiB0eXBlX3Jlc29sdmVyXzsKLQot
ICAvLyBTdG9yZXMgc3RyaW5nIHZhbHVlcyB0aGF0IHdpbGwgYmUgcmVmZXJlbmNlZCBieSBTdHJp
bmdQaWVjZXMgaW4KLSAgLy8gY2FjaGVkX3R5cGVzXywgY2FjaGVkX2VudW1zXyBhbmQgY2FtZWxf
Y2FzZV9uYW1lX3RhYmxlXy4KLSAgbXV0YWJsZSBzZXQ8c3RyaW5nPiBzdHJpbmdfc3RvcmFnZV87
Ci0KLSAgbXV0YWJsZSBtYXA8U3RyaW5nUGllY2UsIFN0YXR1c09yVHlwZT4gY2FjaGVkX3R5cGVz
XzsKLSAgbXV0YWJsZSBtYXA8U3RyaW5nUGllY2UsIFN0YXR1c09yRW51bT4gY2FjaGVkX2VudW1z
XzsKLQotICBtdXRhYmxlIHNldDxjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKj4gaW5kZXhl
ZF90eXBlc187Ci0gIG11dGFibGUgbWFwPFN0cmluZ1BpZWNlLCBTdHJpbmdQaWVjZT4gY2FtZWxf
Y2FzZV9uYW1lX3RhYmxlXzsKLX07Ci19ICAvLyBuYW1lc3BhY2UKLQotVHlwZUluZm8qIFR5cGVJ
bmZvOjpOZXdUeXBlSW5mbyhUeXBlUmVzb2x2ZXIqIHR5cGVfcmVzb2x2ZXIpIHsKLSAgcmV0dXJu
IG5ldyBUeXBlSW5mb0ZvclR5cGVSZXNvbHZlcih0eXBlX3Jlc29sdmVyKTsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIGNvbnZlcnRlcgotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVzcGFj
ZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlwZV9pbmZvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
dXRpbC9pbnRlcm5hbC90eXBlX2luZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDgxMzMxNzYzYTg4ZTIyNmI2YjI5ODUxOWZjM2Y0ZWI5NGJlNzk5ZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9p
bnRlcm5hbC90eXBlX2luZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8vIFBy
b3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29w
eXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9V
VElMX0NPTlZFUlRFUl9UWVBFX0lORk9fSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9VVElM
X0NPTlZFUlRFUl9UWVBFX0lORk9fSF9fCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvY29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3R5cGUucGIuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3BpZWNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL3N0YXR1cy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0
dXNvci5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1l
c3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLS8vIEludGVybmFsIGhlbHBlciBj
bGFzcyBmb3IgdHlwZSByZXNvbHZpbmcuIE5vdGUgdGhhdCB0aGlzIGNsYXNzIGlzIG5vdAotLy8g
dGhyZWFkLXNhZmUgYW5kIHNob3VsZCBvbmx5IGJlIGFjY2Vzc2VkIGluIG9uZSB0aHJlYWQuCi1j
bGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgVHlwZUluZm8gewotIHB1YmxpYzoKLSAgVHlwZUluZm8o
KSB7fQotICB2aXJ0dWFsIH5UeXBlSW5mbygpIHt9Ci0KLSAgLy8gUmVzb2x2ZXMgYSB0eXBlIHVy
bCBpbnRvIGEgVHlwZS4gSWYgdGhlIHR5cGUgdXJsIGlzIGludmFsaWQsIHJldHVybnMKLSAgLy8g
SU5WQUxJRF9BUkdVTUVOVCBlcnJvciBzdGF0dXMuIElmIHRoZSB0eXBlIHVybCBpcyB2YWxpZCBi
dXQgdGhlCi0gIC8vIGNvcnJlc3BvbmRpbmcgdHlwZSBjYW5ub3QgYmUgZm91bmQsIHJldHVybnMg
YSBOT1RfRk9VTkQgZXJyb3Igc3RhdHVzLgotICAvLwotICAvLyBUaGlzIFR5cGVJbmZvIGNsYXNz
IHJldGFpbnMgdGhlIG93bmVyc2hpcCBvZiB0aGUgcmV0dXJuZWQgcG9pbnRlci4KLSAgdmlydHVh
bCB1dGlsOjpTdGF0dXNPcjxjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKj4gUmVzb2x2ZVR5
cGVVcmwoCi0gICAgICBTdHJpbmdQaWVjZSB0eXBlX3VybCkgY29uc3QgPSAwOwotCi0gIC8vIFJl
c29sdmVzIGEgdHlwZSB1cmwgaW50byBhIFR5cGUuIExpa2UgUmVzb2x2ZVR5cGVVcmwoKSBidXQg
cmV0dXJucwotICAvLyBOVUxMIGlmIHRoZSB0eXBlIHVybCBpcyBpbnZhbGlkIG9yIHRoZSB0eXBl
IGNhbm5vdCBiZSBmb3VuZC4KLSAgLy8KLSAgLy8gVGhpcyBUeXBlSW5mbyBjbGFzcyByZXRhaW5z
IHRoZSBvd25lcnNoaXAgb2YgdGhlIHJldHVybmVkIHBvaW50ZXIuCi0gIHZpcnR1YWwgY29uc3Qg
Z29vZ2xlOjpwcm90b2J1Zjo6VHlwZSogR2V0VHlwZUJ5VHlwZVVybCgKLSAgICAgIFN0cmluZ1Bp
ZWNlIHR5cGVfdXJsKSBjb25zdCA9IDA7Ci0KLSAgLy8gUmVzb2x2ZXMgYSB0eXBlIHVybCBmb3Ig
YW4gZW51bS4gUmV0dXJucyBOVUxMIGlmIHRoZSB0eXBlIHVybCBpcwotICAvLyBpbnZhbGlkIG9y
IHRoZSB0eXBlIGNhbm5vdCBiZSBmb3VuZC4KLSAgLy8KLSAgLy8gVGhpcyBUeXBlSW5mbyBjbGFz
cyByZXRhaW5zIHRoZSBvd25lcnNoaXAgb2YgdGhlIHJldHVybmVkIHBvaW50ZXIuCi0gIHZpcnR1
YWwgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bSogR2V0RW51bUJ5VHlwZVVybCgKLSAgICAg
IFN0cmluZ1BpZWNlIHR5cGVfdXJsKSBjb25zdCA9IDA7Ci0KLSAgLy8gTG9va3MgdXAgYSBmaWVs
ZCBpbiB0aGUgc3BlY2lmaWVkIHR5cGUgZ2l2ZW4gYSBDYW1lbENhc2UgbmFtZS4KLSAgdmlydHVh
bCBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCogRmluZEZpZWxkKAotICAgICAgY29uc3Qg
Z29vZ2xlOjpwcm90b2J1Zjo6VHlwZSogdHlwZSwKLSAgICAgIFN0cmluZ1BpZWNlIGNhbWVsX2Nh
c2VfbmFtZSkgY29uc3QgPSAwOwotCi0gIC8vIENyZWF0ZXMgYSBUeXBlSW5mbyBvYmplY3QgdGhh
dCBsb29rcyB1cCB0eXBlIGluZm9ybWF0aW9uIGZyb20gYQotICAvLyBUeXBlUmVzb2x2ZXIuIENh
bGxlciB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHJldHVybmVkIHBvaW50ZXIuCi0gIHN0YXRpYyBU
eXBlSW5mbyogTmV3VHlwZUluZm8oVHlwZVJlc29sdmVyKiB0eXBlX3Jlc29sdmVyKTsKLQotIHBy
aXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhUeXBlSW5mbyk7Ci19
OwotCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVyCi19ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAg
Ly8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAg
Ly8gR09PR0xFX1BST1RPQlVGX1VUSUxfQ09OVkVSVEVSX1RZUEVfSU5GT19IX18KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5mb190ZXN0X2hlbHBl
ci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJv
dG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5mb190ZXN0X2hl
bHBlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDllMThlZDBmZmVjMGM5YTky
ZGFmN2U2NGYzYzJiNGUyYzE2NTUwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90eXBlX2luZm9f
dGVzdF9oZWxwZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLy8gUHJvdG9j
b2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmln
aHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2
ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC90eXBlX2luZm9fdGVzdF9oZWxwZXIuaD4KLQotI2luY2x1ZGUgPG1lbW9yeT4K
LSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9z
aGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2RlZmF1bHRfdmFsdWVfb2Jq
ZWN0d3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlw
ZV9pbmZvLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvY29uc3Rh
bnRzLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJl
YW1fb2JqZWN0c291cmNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJu
YWwvcHJvdG9zdHJlYW1fb2JqZWN0d3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3V0aWwvdHlwZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL3R5
cGVfcmVzb2x2ZXJfdXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90
b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLW5hbWVzcGFj
ZSB0ZXN0aW5nIHsKLQotCi12b2lkIFR5cGVJbmZvVGVzdEhlbHBlcjo6UmVzZXRUeXBlSW5mbygK
LSAgICBjb25zdCB2ZWN0b3I8Y29uc3QgRGVzY3JpcHRvcio+JiBkZXNjcmlwdG9ycykgewotICBz
d2l0Y2ggKHR5cGVfKSB7Ci0gICAgY2FzZSBVU0VfVFlQRV9SRVNPTFZFUjogewotICAgICAgY29u
c3QgRGVzY3JpcHRvclBvb2wqIHBvb2wgPSBkZXNjcmlwdG9yc1swXS0+ZmlsZSgpLT5wb29sKCk7
Ci0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IGRlc2NyaXB0b3JzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIEdPT0dMRV9DSEVDSyhwb29sID09IGRlc2NyaXB0b3JzW2ldLT5maWxlKCktPnBvb2wo
KSkKLSAgICAgICAgICAgIDw8ICJEZXNjcmlwdG9ycyBmcm9tIGRpZmZlcmVudCBwb29scyBhcmUg
bm90IHN1cHBvcnRlZC4iOwotICAgICAgfQotICAgICAgdHlwZV9yZXNvbHZlcl8ucmVzZXQoCi0g
ICAgICAgICAgTmV3VHlwZVJlc29sdmVyRm9yRGVzY3JpcHRvclBvb2woa1R5cGVTZXJ2aWNlQmFz
ZVVybCwgcG9vbCkpOwotICAgICAgdHlwZWluZm9fLnJlc2V0KFR5cGVJbmZvOjpOZXdUeXBlSW5m
byh0eXBlX3Jlc29sdmVyXy5nZXQoKSkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotICBH
T09HTEVfTE9HKEZBVEFMKSA8PCAiQ2FuIG5vdCByZWFjaCBoZXJlLiI7Ci19Ci0KLXZvaWQgVHlw
ZUluZm9UZXN0SGVscGVyOjpSZXNldFR5cGVJbmZvKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0
b3IpIHsKLSAgdmVjdG9yPGNvbnN0IERlc2NyaXB0b3IqPiBkZXNjcmlwdG9yczsKLSAgZGVzY3Jp
cHRvcnMucHVzaF9iYWNrKGRlc2NyaXB0b3IpOwotICBSZXNldFR5cGVJbmZvKGRlc2NyaXB0b3Jz
KTsKLX0KLQotdm9pZCBUeXBlSW5mb1Rlc3RIZWxwZXI6OlJlc2V0VHlwZUluZm8oY29uc3QgRGVz
Y3JpcHRvciogZGVzY3JpcHRvcjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yMikgewotICB2ZWN0b3I8Y29uc3QgRGVz
Y3JpcHRvcio+IGRlc2NyaXB0b3JzOwotICBkZXNjcmlwdG9ycy5wdXNoX2JhY2soZGVzY3JpcHRv
cjEpOwotICBkZXNjcmlwdG9ycy5wdXNoX2JhY2soZGVzY3JpcHRvcjIpOwotICBSZXNldFR5cGVJ
bmZvKGRlc2NyaXB0b3JzKTsKLX0KLQotVHlwZUluZm8qIFR5cGVJbmZvVGVzdEhlbHBlcjo6R2V0
VHlwZUluZm8oKSB7IHJldHVybiB0eXBlaW5mb18uZ2V0KCk7IH0KLQotUHJvdG9TdHJlYW1PYmpl
Y3RTb3VyY2UqIFR5cGVJbmZvVGVzdEhlbHBlcjo6TmV3UHJvdG9Tb3VyY2UoCi0gICAgaW86OkNv
ZGVkSW5wdXRTdHJlYW0qIGNvZGVkX2lucHV0LCBjb25zdCBzdHJpbmcmIHR5cGVfdXJsKSB7Ci0g
IGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUqIHR5cGUgPSB0eXBlaW5mb18tPkdldFR5cGVC
eVR5cGVVcmwodHlwZV91cmwpOwotICBzd2l0Y2ggKHR5cGVfKSB7Ci0gICAgY2FzZSBVU0VfVFlQ
RV9SRVNPTFZFUjogewotICAgICAgcmV0dXJuIG5ldyBQcm90b1N0cmVhbU9iamVjdFNvdXJjZShj
b2RlZF9pbnB1dCwgdHlwZV9yZXNvbHZlcl8uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICp0eXBlKTsKLSAgICB9Ci0gIH0KLSAgR09PR0xFX0xPRyhGQVRB
TCkgPDwgIkNhbiBub3QgcmVhY2ggaGVyZS4iOwotICByZXR1cm4gTlVMTDsKLX0KLQotUHJvdG9T
dHJlYW1PYmplY3RXcml0ZXIqIFR5cGVJbmZvVGVzdEhlbHBlcjo6TmV3UHJvdG9Xcml0ZXIoCi0g
ICAgY29uc3Qgc3RyaW5nJiB0eXBlX3VybCwgc3RyaW5nczo6Qnl0ZVNpbmsqIG91dHB1dCwgRXJy
b3JMaXN0ZW5lciogbGlzdGVuZXIsCi0gICAgY29uc3QgUHJvdG9TdHJlYW1PYmplY3RXcml0ZXI6
Ok9wdGlvbnMmIG9wdGlvbnMpIHsKLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZSogdHlw
ZSA9IHR5cGVpbmZvXy0+R2V0VHlwZUJ5VHlwZVVybCh0eXBlX3VybCk7Ci0gIHN3aXRjaCAodHlw
ZV8pIHsKLSAgICBjYXNlIFVTRV9UWVBFX1JFU09MVkVSOiB7Ci0gICAgICByZXR1cm4gbmV3IFBy
b3RvU3RyZWFtT2JqZWN0V3JpdGVyKHR5cGVfcmVzb2x2ZXJfLmdldCgpLCAqdHlwZSwgb3V0cHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lciwgb3B0
aW9ucyk7Ci0gICAgfQotICB9Ci0gIEdPT0dMRV9MT0coRkFUQUwpIDw8ICJDYW4gbm90IHJlYWNo
IGhlcmUuIjsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLURlZmF1bHRWYWx1ZU9iamVjdFdyaXRlciog
VHlwZUluZm9UZXN0SGVscGVyOjpOZXdEZWZhdWx0VmFsdWVXcml0ZXIoCi0gICAgY29uc3Qgc3Ry
aW5nJiB0eXBlX3VybCwgT2JqZWN0V3JpdGVyKiB3cml0ZXIpIHsKLSAgY29uc3QgZ29vZ2xlOjpw
cm90b2J1Zjo6VHlwZSogdHlwZSA9IHR5cGVpbmZvXy0+R2V0VHlwZUJ5VHlwZVVybCh0eXBlX3Vy
bCk7Ci0gIHN3aXRjaCAodHlwZV8pIHsKLSAgICBjYXNlIFVTRV9UWVBFX1JFU09MVkVSOiB7Ci0g
ICAgICByZXR1cm4gbmV3IERlZmF1bHRWYWx1ZU9iamVjdFdyaXRlcih0eXBlX3Jlc29sdmVyXy5n
ZXQoKSwgKnR5cGUsIHdyaXRlcik7Ci0gICAgfQotICB9Ci0gIEdPT0dMRV9MT0coRkFUQUwpIDw8
ICJDYW4gbm90IHJlYWNoIGhlcmUuIjsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZSB0ZXN0aW5nCi19ICAvLyBuYW1lc3BhY2UgY29udmVydGVyCi19ICAvLyBuYW1lc3BhY2Ug
dXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90eXBlX2luZm9fdGVz
dF9oZWxwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5mb190
ZXN0X2hlbHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTI3OTg0OWFiMDYw
NGM3NGUxYWFkN2NmNTIxY2Y3OWYxZTQzNjMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVf
aW5mb190ZXN0X2hlbHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLy8gUHJv
dG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5
cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8v
ZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RPQlVGX1VU
SUxfQ09OVkVSVEVSX1RZUEVfSU5GT19URVNUX0hFTFBFUl9IX18KLSNkZWZpbmUgR09PR0xFX1BS
T1RPQlVGX1VUSUxfQ09OVkVSVEVSX1RZUEVfSU5GT19URVNUX0hFTFBFUl9IX18KLQotI2luY2x1
ZGUgPG1lbW9yeT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRp
bC9pbnRlcm5hbC9kZWZhdWx0X3ZhbHVlX29iamVjdHdyaXRlci5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3R5cGVfaW5mby5oPgotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHNvdXJjZS5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHdyaXRl
ci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXIuaD4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwg
ewotbmFtZXNwYWNlIGNvbnZlcnRlciB7Ci1uYW1lc3BhY2UgdGVzdGluZyB7Ci0KLWVudW0gVHlw
ZUluZm9Tb3VyY2UgewotICBVU0VfVFlQRV9SRVNPTFZFUiwKLX07Ci0KLS8vIEluIHRoZSB1bml0
LXRlc3RzIHdlIHdhbnQgdG8gdGVzdCB0d28gc2NlbmFyaW9zOiBvbmUgd2l0aCB0eXBlIGluZm8g
ZnJvbQotLy8gU2VydmljZVR5cGVJbmZvLCB0aGUgb3RoZXIgd2l0aCB0eXBlIGluZm8gZnJvbSBU
eXBlUmVzb2x2ZXIuIFRoaXMgY2xhc3MKLS8vIHdyYXBzIHRoZSBkZXRhaWwgb2Ygd2hlcmUgdGhl
IHR5cGUgaW5mbyBpcyBmcm9tIGFuZCBwcm92aWRlcyB0aGUgc2FtZQotLy8gaW50ZXJmYWNlIHNv
IHRoZSBzYW1lIHVuaXQtdGVzdCBjb2RlIGNhbiB0ZXN0IGJvdGggc2NlbmFyaW9zLgotY2xhc3Mg
VHlwZUluZm9UZXN0SGVscGVyIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFR5cGVJbmZvVGVzdEhl
bHBlcihUeXBlSW5mb1NvdXJjZSB0eXBlKSA6IHR5cGVfKHR5cGUpIHt9Ci0KLSAgLy8gQ3JlYXRl
cyBhIFR5cGVJbmZvIG9iamVjdCBmb3IgdGhlIGdpdmVuIHNldCBvZiBkZXNjcmlwdG9ycy4KLSAg
dm9pZCBSZXNldFR5cGVJbmZvKGNvbnN0IHZlY3Rvcjxjb25zdCBEZXNjcmlwdG9yKj4mIGRlc2Ny
aXB0b3JzKTsKLQotICAvLyBDb252aW5lbnQgb3ZlcmxvYWRzLgotICB2b2lkIFJlc2V0VHlwZUlu
Zm8oY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvcik7Ci0gIHZvaWQgUmVzZXRUeXBlSW5mbyhj
b25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yMSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IyKTsKLQotICAvLyBSZXR1cm5zIHRoZSBUeXBlSW5mbyBj
cmVhdGVkIGFmdGVyIFJlc2V0VHlwZUluZm8uCi0gIFR5cGVJbmZvKiBHZXRUeXBlSW5mbygpOwot
Ci0gIFByb3RvU3RyZWFtT2JqZWN0U291cmNlKiBOZXdQcm90b1NvdXJjZShpbzo6Q29kZWRJbnB1
dFN0cmVhbSogY29kZWRfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmcmIHR5cGVfdXJsKTsKLQotICBQcm90b1N0cmVhbU9iamVjdFdy
aXRlciogTmV3UHJvdG9Xcml0ZXIoCi0gICAgICBjb25zdCBzdHJpbmcmIHR5cGVfdXJsLCBzdHJp
bmdzOjpCeXRlU2luayogb3V0cHV0LAotICAgICAgRXJyb3JMaXN0ZW5lciogbGlzdGVuZXIsIGNv
bnN0IFByb3RvU3RyZWFtT2JqZWN0V3JpdGVyOjpPcHRpb25zJiBvcHRpb25zKTsKLQotICBEZWZh
dWx0VmFsdWVPYmplY3RXcml0ZXIqIE5ld0RlZmF1bHRWYWx1ZVdyaXRlcihjb25zdCBzdHJpbmcm
IHR5cGVfdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPYmplY3RXcml0ZXIqIHdyaXRlcik7Ci0KLSBwcml2YXRlOgotICBUeXBlSW5mb1NvdXJj
ZSB0eXBlXzsKLSAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxUeXBlSW5mbz4gdHlwZWlu
Zm9fOwotICBnb29nbGU6OnByb3RvYnVmOjpzY29wZWRfcHRyPFR5cGVSZXNvbHZlcj4gdHlwZV9y
ZXNvbHZlcl87Ci19OwotfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKLX0gIC8vIG5hbWVzcGFjZSBj
b252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYK
LQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2VuZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfVVRJ
TF9DT05WRVJURVJfVFlQRV9JTkZPX1RFU1RfSEVMUEVSX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdXRpbGl0eS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi91dGlsL2ludGVybmFsL3V0aWxpdHkuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVlN2E1MWZjNDFiNmRiODFiNGVlOWI1OGNmYWExMWQ3YTAyMzc5MWUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwv
aW50ZXJuYWwvdXRpbGl0eS5jYworKysgL2Rldi9udWxsCkBAIC0xLDM2MSArMCwwIEBACi0vLyBQ
cm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi91dGlsL2ludGVybmFsL3V0aWxpdHkuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9jYWxsYmFjay5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24u
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3Iu
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9jb25zdGFudHMuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9tYXBfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9tYXRobGltaXRzLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHBy
b3RvYnVmIHsKLW5hbWVzcGFjZSB1dGlsIHsKLW5hbWVzcGFjZSBjb252ZXJ0ZXIgewotCi1uYW1l
c3BhY2UgewotY29uc3QgU3RyaW5nUGllY2UgU2tpcFdoaXRlU3BhY2UoU3RyaW5nUGllY2Ugc3Ry
KSB7Ci0gIFN0cmluZ1BpZWNlOjpzaXplX3R5cGUgaTsKLSAgZm9yIChpID0gMDsgaSA8IHN0ci5z
aXplKCkgJiYgaXNzcGFjZShzdHJbaV0pOyArK2kpIHsKLSAgfQotICBHT09HTEVfRENIRUNLKGkg
PT0gc3RyLnNpemUoKSB8fCAhaXNzcGFjZShzdHJbaV0pKTsKLSAgcmV0dXJuIFN0cmluZ1BpZWNl
KHN0ciwgaSk7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotYm9vbCBHZXRCb29sT3B0aW9uT3JEZWZh
dWx0KAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8Z29vZ2xl
Ojpwcm90b2J1Zjo6T3B0aW9uPiYgb3B0aW9ucywKLSAgICBjb25zdCBzdHJpbmcmIG9wdGlvbl9u
YW1lLCBib29sIGRlZmF1bHRfdmFsdWUpIHsKLSAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6T3B0
aW9uKiBvcHQgPSBGaW5kT3B0aW9uT3JOdWxsKG9wdGlvbnMsIG9wdGlvbl9uYW1lKTsKLSAgaWYg
KG9wdCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7Ci0gIH0KLSAgcmV0dXJu
IEdldEJvb2xGcm9tQW55KG9wdC0+dmFsdWUoKSk7Ci19Ci0KLWludDY0IEdldEludDY0T3B0aW9u
T3JEZWZhdWx0KAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8
Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uPiYgb3B0aW9ucywKLSAgICBjb25zdCBzdHJpbmcmIG9w
dGlvbl9uYW1lLCBpbnQ2NCBkZWZhdWx0X3ZhbHVlKSB7Ci0gIGNvbnN0IGdvb2dsZTo6cHJvdG9i
dWY6Ok9wdGlvbiogb3B0ID0gRmluZE9wdGlvbk9yTnVsbChvcHRpb25zLCBvcHRpb25fbmFtZSk7
Ci0gIGlmIChvcHQgPT0gTlVMTCkgewotICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOwotICB9Ci0g
IHJldHVybiBHZXRJbnQ2NEZyb21Bbnkob3B0LT52YWx1ZSgpKTsKLX0KLQotZG91YmxlIEdldERv
dWJsZU9wdGlvbk9yRGVmYXVsdCgKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRl
ZFB0ckZpZWxkPGdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbj4mIG9wdGlvbnMsCi0gICAgY29uc3Qg
c3RyaW5nJiBvcHRpb25fbmFtZSwgZG91YmxlIGRlZmF1bHRfdmFsdWUpIHsKLSAgY29uc3QgZ29v
Z2xlOjpwcm90b2J1Zjo6T3B0aW9uKiBvcHQgPSBGaW5kT3B0aW9uT3JOdWxsKG9wdGlvbnMsIG9w
dGlvbl9uYW1lKTsKLSAgaWYgKG9wdCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIGRlZmF1bHRfdmFs
dWU7Ci0gIH0KLSAgcmV0dXJuIEdldERvdWJsZUZyb21Bbnkob3B0LT52YWx1ZSgpKTsKLX0KLQot
c3RyaW5nIEdldFN0cmluZ09wdGlvbk9yRGVmYXVsdCgKLSAgICBjb25zdCBnb29nbGU6OnByb3Rv
YnVmOjpSZXBlYXRlZFB0ckZpZWxkPGdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbj4mIG9wdGlvbnMs
Ci0gICAgY29uc3Qgc3RyaW5nJiBvcHRpb25fbmFtZSwgY29uc3Qgc3RyaW5nJiBkZWZhdWx0X3Zh
bHVlKSB7Ci0gIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbiogb3B0ID0gRmluZE9wdGlv
bk9yTnVsbChvcHRpb25zLCBvcHRpb25fbmFtZSk7Ci0gIGlmIChvcHQgPT0gTlVMTCkgewotICAg
IHJldHVybiBkZWZhdWx0X3ZhbHVlOwotICB9Ci0gIHJldHVybiBHZXRTdHJpbmdGcm9tQW55KG9w
dC0+dmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBQYXJzZUZyb21B
bnkoY29uc3Qgc3RyaW5nJiBkYXRhLCBUKiByZXN1bHQpIHsKLSAgcmVzdWx0LT5QYXJzZUZyb21T
dHJpbmcoZGF0YSk7Ci19Ci0KLS8vIFJldHVybnMgYSBib29sZWFuIHZhbHVlIGNvbnRhaW5lZCBp
biBBbnkgdHlwZS4KLS8vIFRPRE8oc2thcnZhamUpOiBBZGQgdHlwZSBjaGVja2luZyAmIGVycm9y
IG1lc3NhZ2VzIGhlcmUuCi1ib29sIEdldEJvb2xGcm9tQW55KGNvbnN0IGdvb2dsZTo6cHJvdG9i
dWY6OkFueSYgYW55KSB7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OkJvb2xWYWx1ZSBiOwotICBQYXJz
ZUZyb21BbnkoYW55LnZhbHVlKCksICZiKTsKLSAgcmV0dXJuIGIudmFsdWUoKTsKLX0KLQotaW50
NjQgR2V0SW50NjRGcm9tQW55KGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkFueSYgYW55KSB7Ci0g
IGdvb2dsZTo6cHJvdG9idWY6OkludDY0VmFsdWUgaTsKLSAgUGFyc2VGcm9tQW55KGFueS52YWx1
ZSgpLCAmaSk7Ci0gIHJldHVybiBpLnZhbHVlKCk7Ci19Ci0KLWRvdWJsZSBHZXREb3VibGVGcm9t
QW55KGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkFueSYgYW55KSB7Ci0gIGdvb2dsZTo6cHJvdG9i
dWY6OkRvdWJsZVZhbHVlIGk7Ci0gIFBhcnNlRnJvbUFueShhbnkudmFsdWUoKSwgJmkpOwotICBy
ZXR1cm4gaS52YWx1ZSgpOwotfQotCi1zdHJpbmcgR2V0U3RyaW5nRnJvbUFueShjb25zdCBnb29n
bGU6OnByb3RvYnVmOjpBbnkmIGFueSkgewotICBnb29nbGU6OnByb3RvYnVmOjpTdHJpbmdWYWx1
ZSBzOwotICBQYXJzZUZyb21BbnkoYW55LnZhbHVlKCksICZzKTsKLSAgcmV0dXJuIHMudmFsdWUo
KTsKLX0KLQotY29uc3QgU3RyaW5nUGllY2UgR2V0VHlwZVdpdGhvdXRVcmwoU3RyaW5nUGllY2Ug
dHlwZV91cmwpIHsKLSAgc2l6ZV90IGlkeCA9IHR5cGVfdXJsLnJmaW5kKCcvJyk7Ci0gIHJldHVy
biB0eXBlX3VybC5zdWJzdHIoaWR4ICsgMSk7Ci19Ci0KLWNvbnN0IHN0cmluZyBHZXRGdWxsVHlw
ZVdpdGhVcmwoU3RyaW5nUGllY2Ugc2ltcGxlX3R5cGUpIHsKLSAgcmV0dXJuIFN0ckNhdChrVHlw
ZVNlcnZpY2VCYXNlVXJsLCAiLyIsIHNpbXBsZV90eXBlKTsKLX0KLQotY29uc3QgZ29vZ2xlOjpw
cm90b2J1Zjo6T3B0aW9uKiBGaW5kT3B0aW9uT3JOdWxsKAotICAgIGNvbnN0IGdvb2dsZTo6cHJv
dG9idWY6OlJlcGVhdGVkUHRyRmllbGQ8Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uPiYgb3B0aW9u
cywKLSAgICBjb25zdCBzdHJpbmcmIG9wdGlvbl9uYW1lKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDwgb3B0aW9ucy5zaXplKCk7ICsraSkgewotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6Ok9w
dGlvbiYgb3B0ID0gb3B0aW9ucy5HZXQoaSk7Ci0gICAgaWYgKG9wdC5uYW1lKCkgPT0gb3B0aW9u
X25hbWUpIHsKLSAgICAgIHJldHVybiAmb3B0OwotICAgIH0KLSAgfQotICByZXR1cm4gTlVMTDsK
LX0KLQotY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIEZpbmRGaWVsZEluVHlwZU9yTnVs
bCgKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKiB0eXBlLCBTdHJpbmdQaWVjZSBm
aWVsZF9uYW1lKSB7Ci0gIGlmICh0eXBlICE9IE5VTEwpIHsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IHR5cGUtPmZpZWxkc19zaXplKCk7ICsraSkgewotICAgICAgY29uc3QgZ29vZ2xlOjpwcm90
b2J1Zjo6RmllbGQmIGZpZWxkID0gdHlwZS0+ZmllbGRzKGkpOwotICAgICAgaWYgKGZpZWxkLm5h
bWUoKSA9PSBmaWVsZF9uYW1lKSB7Ci0gICAgICAgIHJldHVybiAmZmllbGQ7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1jb25zdCBnb29nbGU6OnByb3RvYnVmOjpG
aWVsZCogRmluZEpzb25GaWVsZEluVHlwZU9yTnVsbCgKLSAgICBjb25zdCBnb29nbGU6OnByb3Rv
YnVmOjpUeXBlKiB0eXBlLCBTdHJpbmdQaWVjZSBqc29uX25hbWUpIHsKLSAgaWYgKHR5cGUgIT0g
TlVMTCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS0+ZmllbGRzX3NpemUoKTsgKytp
KSB7Ci0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmllbGQgPSB0eXBlLT5m
aWVsZHMoaSk7Ci0gICAgICBpZiAoZmllbGQuanNvbl9uYW1lKCkgPT0ganNvbl9uYW1lKSB7Ci0g
ICAgICAgIHJldHVybiAmZmllbGQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxM
OwotfQotCi1jb25zdCBnb29nbGU6OnByb3RvYnVmOjpFbnVtVmFsdWUqIEZpbmRFbnVtVmFsdWVC
eU5hbWVPck51bGwoCi0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bSogZW51bV90eXBl
LCBTdHJpbmdQaWVjZSBlbnVtX25hbWUpIHsKLSAgaWYgKGVudW1fdHlwZSAhPSBOVUxMKSB7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnVtX3R5cGUtPmVudW12YWx1ZV9zaXplKCk7ICsraSkg
ewotICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlJiBlbnVtX3ZhbHVlID0g
ZW51bV90eXBlLT5lbnVtdmFsdWUoaSk7Ci0gICAgICBpZiAoZW51bV92YWx1ZS5uYW1lKCkgPT0g
ZW51bV9uYW1lKSB7Ci0gICAgICAgIHJldHVybiAmZW51bV92YWx1ZTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkVudW1W
YWx1ZSogRmluZEVudW1WYWx1ZUJ5TnVtYmVyT3JOdWxsKAotICAgIGNvbnN0IGdvb2dsZTo6cHJv
dG9idWY6OkVudW0qIGVudW1fdHlwZSwgaW50MzIgdmFsdWUpIHsKLSAgaWYgKGVudW1fdHlwZSAh
PSBOVUxMKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnVtX3R5cGUtPmVudW12YWx1ZV9z
aXplKCk7ICsraSkgewotICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RW51bVZhbHVlJiBl
bnVtX3ZhbHVlID0gZW51bV90eXBlLT5lbnVtdmFsdWUoaSk7Ci0gICAgICBpZiAoZW51bV92YWx1
ZS5udW1iZXIoKSA9PSB2YWx1ZSkgewotICAgICAgICByZXR1cm4gJmVudW1fdmFsdWU7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdHJpbmcgVG9DYW1lbENhc2Uo
Y29uc3QgU3RyaW5nUGllY2UgaW5wdXQpIHsKLSAgYm9vbCBjYXBpdGFsaXplX25leHQgPSBmYWxz
ZTsKLSAgYm9vbCB3YXNfY2FwID0gdHJ1ZTsKLSAgYm9vbCBpc19jYXAgPSBmYWxzZTsKLSAgYm9v
bCBmaXJzdF93b3JkID0gdHJ1ZTsKLSAgc3RyaW5nIHJlc3VsdDsKLSAgcmVzdWx0LnJlc2VydmUo
aW5wdXQuc2l6ZSgpKTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlucHV0LnNpemUoKTsg
KytpLCB3YXNfY2FwID0gaXNfY2FwKSB7Ci0gICAgaXNfY2FwID0gYXNjaWlfaXN1cHBlcihpbnB1
dFtpXSk7Ci0gICAgaWYgKGlucHV0W2ldID09ICdfJykgewotICAgICAgY2FwaXRhbGl6ZV9uZXh0
ID0gdHJ1ZTsKLSAgICAgIGlmICghcmVzdWx0LmVtcHR5KCkpIGZpcnN0X3dvcmQgPSBmYWxzZTsK
LSAgICAgIGNvbnRpbnVlOwotICAgIH0gZWxzZSBpZiAoZmlyc3Rfd29yZCkgewotICAgICAgLy8g
Q29uc2lkZXIgd2hlbiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgQiBpcyBjYXBpdGFsaXplZCwKLSAg
ICAgIC8vIGZpcnN0IHdvcmQgZW5kcyB3aGVuOgotICAgICAgLy8gMSkgZm9sbG93aW5nIGEgbG93
ZXJjYXNlOiAgICIuLi5hQi4uLiIKLSAgICAgIC8vIDIpIGZvbGxvd2VkIGJ5IGEgbG93ZXJjYXNl
OiAiLi4uQUJjLi4uIgotICAgICAgaWYgKCFyZXN1bHQuZW1wdHkoKSAmJiBpc19jYXAgJiYKLSAg
ICAgICAgICAoIXdhc19jYXAgfHwgKGkgKyAxIDwgaW5wdXQuc2l6ZSgpICYmIGFzY2lpX2lzbG93
ZXIoaW5wdXRbaSArIDFdKSkpKSB7Ci0gICAgICAgIGZpcnN0X3dvcmQgPSBmYWxzZTsKLSAgICAg
ICAgcmVzdWx0LnB1c2hfYmFjayhpbnB1dFtpXSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBy
ZXN1bHQucHVzaF9iYWNrKGFzY2lpX3RvbG93ZXIoaW5wdXRbaV0pKTsKLSAgICAgICAgY29udGlu
dWU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChjYXBpdGFsaXplX25leHQpIHsKLSAgICAgIGNh
cGl0YWxpemVfbmV4dCA9IGZhbHNlOwotICAgICAgaWYgKGFzY2lpX2lzbG93ZXIoaW5wdXRbaV0p
KSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoX2JhY2soYXNjaWlfdG91cHBlcihpbnB1dFtpXSkpOwot
ICAgICAgICBjb250aW51ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoX2Jh
Y2soaW5wdXRbaV0pOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgcmVzdWx0LnB1c2hfYmFjayhhc2NpaV90b2xvd2VyKGlucHV0W2ldKSk7Ci0gICAgfQot
ICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0cmluZyBUb1NuYWtlQ2FzZShTdHJpbmdQaWVj
ZSBpbnB1dCkgewotICBib29sIHdhc19ub3RfdW5kZXJzY29yZSA9IGZhbHNlOyAgLy8gSW5pdGlh
bGl6ZSB0byBmYWxzZSBmb3IgY2FzZSAxIChiZWxvdykKLSAgYm9vbCB3YXNfbm90X2NhcCA9IGZh
bHNlOwotICBzdHJpbmcgcmVzdWx0OwotICByZXN1bHQucmVzZXJ2ZShpbnB1dC5zaXplKCkgPDwg
MSk7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7ICsraSkgewotICAg
IGlmIChhc2NpaV9pc3VwcGVyKGlucHV0W2ldKSkgewotICAgICAgLy8gQ29uc2lkZXIgd2hlbiB0
aGUgY3VycmVudCBjaGFyYWN0ZXIgQiBpcyBjYXBpdGFsaXplZDoKLSAgICAgIC8vIDEpIEF0IGJl
Z2lubmluZyBvZiBpbnB1dDogICAiQi4uLiIgPT4gImIuLi4iCi0gICAgICAvLyAgICAoZS5nLiAi
QmlzY3VpdCIgPT4gImJpc2N1aXQiKQotICAgICAgLy8gMikgRm9sbG93aW5nIGEgbG93ZXJjYXNl
OiAgICIuLi5hQi4uLiIgPT4gIi4uLmFfYi4uLiIKLSAgICAgIC8vICAgIChlLmcuICJnQmlrZSIg
PT4gImdfYmlrZSIpCi0gICAgICAvLyAzKSBBdCB0aGUgZW5kIG9mIGlucHV0OiAgICAgIi4uLkFC
IiA9PiAiLi4uYWIiCi0gICAgICAvLyAgICAoZS5nLiAiR29vZ2xlTEFCIiA9PiAiZ29vZ2xlX2xh
YiIpCi0gICAgICAvLyA0KSBGb2xsb3dlZCBieSBhIGxvd2VyY2FzZTogIi4uLkFCYy4uLiIgPT4g
Ii4uLmFfYmMuLi4iCi0gICAgICAvLyAgICAoZS5nLiAiR0Jpa2UiID0+ICJnX2Jpa2UiKQotICAg
ICAgaWYgKHdhc19ub3RfdW5kZXJzY29yZSAmJiAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
Y2FzZSAxIG91dAotICAgICAgICAgICh3YXNfbm90X2NhcCB8fCAgICAgICAgICAgICAgICAgICAg
IC8vIGNhc2UgMiBpbiwgY2FzZSAzIG91dAotICAgICAgICAgICAoaSArIDEgPCBpbnB1dC5zaXpl
KCkgJiYgICAgICAgICAgIC8vICAgICAgICAgICAgY2FzZSAzIG91dAotICAgICAgICAgICAgYXNj
aWlfaXNsb3dlcihpbnB1dFtpICsgMV0pKSkpIHsgIC8vIGNhc2UgNCBpbgotICAgICAgICAvLyBX
ZSBhZGQgYW4gdW5kZXJzY29yZSBmb3IgY2FzZSAyIGFuZCBjYXNlIDQuCi0gICAgICAgIHJlc3Vs
dC5wdXNoX2JhY2soJ18nKTsKLSAgICAgIH0KLSAgICAgIHJlc3VsdC5wdXNoX2JhY2soYXNjaWlf
dG9sb3dlcihpbnB1dFtpXSkpOwotICAgICAgd2FzX25vdF91bmRlcnNjb3JlID0gdHJ1ZTsKLSAg
ICAgIHdhc19ub3RfY2FwID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdC5wdXNo
X2JhY2soaW5wdXRbaV0pOwotICAgICAgd2FzX25vdF91bmRlcnNjb3JlID0gaW5wdXRbaV0gIT0g
J18nOwotICAgICAgd2FzX25vdF9jYXAgPSB0cnVlOwotICAgIH0KLSAgfQotICByZXR1cm4gcmVz
dWx0OwotfQotCi1zZXQ8c3RyaW5nPiogd2VsbF9rbm93bl90eXBlc18gPSBOVUxMOwotR09PR0xF
X1BST1RPQlVGX0RFQ0xBUkVfT05DRSh3ZWxsX2tub3duX3R5cGVzX2luaXRfKTsKLWNvbnN0IGNo
YXIqIHdlbGxfa25vd25fdHlwZXNfbmFtZV9hcnJheV9bXSA9IHsKLSAgICAiZ29vZ2xlLnByb3Rv
YnVmLlRpbWVzdGFtcCIsICAgImdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiIsCi0gICAgImdvb2ds
ZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZSIsICJnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZSIsCi0g
ICAgImdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlIiwgICJnb29nbGUucHJvdG9idWYuVUludDY0
VmFsdWUiLAotICAgICJnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZSIsICAiZ29vZ2xlLnByb3Rv
YnVmLlVJbnQzMlZhbHVlIiwKLSAgICAiZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZSIsICAgImdv
b2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSIsCi0gICAgImdvb2dsZS5wcm90b2J1Zi5CeXRlc1Zh
bHVlIiwgICJnb29nbGUucHJvdG9idWYuRmllbGRNYXNrIn07Ci0KLXZvaWQgRGVsZXRlV2VsbEtu
b3duVHlwZXMoKSB7IGRlbGV0ZSB3ZWxsX2tub3duX3R5cGVzXzsgfQotCi12b2lkIEluaXRXZWxs
S25vd25UeXBlcygpIHsKLSAgd2VsbF9rbm93bl90eXBlc18gPSBuZXcgc2V0PHN0cmluZz47Ci0g
IGZvciAoaW50IGkgPSAwOyBpIDwgR09PR0xFX0FSUkFZU0laRSh3ZWxsX2tub3duX3R5cGVzX25h
bWVfYXJyYXlfKTsgKytpKSB7Ci0gICAgd2VsbF9rbm93bl90eXBlc18tPmluc2VydCh3ZWxsX2tu
b3duX3R5cGVzX25hbWVfYXJyYXlfW2ldKTsKLSAgfQotICBnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6T25TaHV0ZG93bigmRGVsZXRlV2VsbEtub3duVHlwZXMpOwotfQotCi1ib29sIElzV2Vs
bEtub3duVHlwZShjb25zdCBzdHJpbmcmIHR5cGVfbmFtZSkgewotICBJbml0V2VsbEtub3duVHlw
ZXMoKTsKLSAgcmV0dXJuIENvbnRhaW5zS2V5KCp3ZWxsX2tub3duX3R5cGVzXywgdHlwZV9uYW1l
KTsKLX0KLQotYm9vbCBJc1ZhbGlkQm9vbFN0cmluZyhjb25zdCBzdHJpbmcmIGJvb2xfc3RyaW5n
KSB7Ci0gIHJldHVybiBib29sX3N0cmluZyA9PSAidHJ1ZSIgfHwgYm9vbF9zdHJpbmcgPT0gImZh
bHNlIiB8fAotICAgICAgICAgYm9vbF9zdHJpbmcgPT0gIjEiIHx8IGJvb2xfc3RyaW5nID09ICIw
IjsKLX0KLQotYm9vbCBJc01hcChjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmllbGQs
Ci0gICAgICAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUpIHsKLSAgcmV0
dXJuIChmaWVsZC5jYXJkaW5hbGl0eSgpID09Ci0gICAgICAgICAgICAgIGdvb2dsZTo6cHJvdG9i
dWY6OkZpZWxkX0NhcmRpbmFsaXR5X0NBUkRJTkFMSVRZX1JFUEVBVEVEICYmCi0gICAgICAgICAg
R2V0Qm9vbE9wdGlvbk9yRGVmYXVsdCh0eXBlLm9wdGlvbnMoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJnb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMubWFwX2VudHJ5
IiwgZmFsc2UpKTsKLX0KLQotYm9vbCBJc01lc3NhZ2VTZXRXaXJlRm9ybWF0KGNvbnN0IGdvb2ds
ZTo6cHJvdG9idWY6OlR5cGUmIHR5cGUpIHsKLSAgcmV0dXJuIEdldEJvb2xPcHRpb25PckRlZmF1
bHQoCi0gICAgICB0eXBlLm9wdGlvbnMoKSwgImdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9u
cy5tZXNzYWdlX3NldF93aXJlX2Zvcm1hdCIsIGZhbHNlKTsKLX0KLQotc3RyaW5nIERvdWJsZUFz
U3RyaW5nKGRvdWJsZSB2YWx1ZSkgewotICBpZiAoTWF0aExpbWl0czxkb3VibGU+OjpJc1Bvc0lu
Zih2YWx1ZSkpIHJldHVybiAiSW5maW5pdHkiOwotICBpZiAoTWF0aExpbWl0czxkb3VibGU+OjpJ
c05lZ0luZih2YWx1ZSkpIHJldHVybiAiLUluZmluaXR5IjsKLSAgaWYgKE1hdGhMaW1pdHM8ZG91
YmxlPjo6SXNOYU4odmFsdWUpKSByZXR1cm4gIk5hTiI7Ci0KLSAgcmV0dXJuIFNpbXBsZUR0b2Eo
dmFsdWUpOwotfQotCi1zdHJpbmcgRmxvYXRBc1N0cmluZyhmbG9hdCB2YWx1ZSkgewotICBpZiAo
TWF0aExpbWl0czxmbG9hdD46OklzRmluaXRlKHZhbHVlKSkgcmV0dXJuIFNpbXBsZUZ0b2EodmFs
dWUpOwotICByZXR1cm4gRG91YmxlQXNTdHJpbmcodmFsdWUpOwotfQotCi1ib29sIFNhZmVTdHJU
b0Zsb2F0KFN0cmluZ1BpZWNlIHN0ciwgZmxvYXQqIHZhbHVlKSB7Ci0gIGRvdWJsZSBkb3VibGVf
dmFsdWU7Ci0gIGlmICghc2FmZV9zdHJ0b2Qoc3RyLCAmZG91YmxlX3ZhbHVlKSkgewotICAgIHJl
dHVybiBmYWxzZTsKLSAgfQotCi0gIGlmIChNYXRoTGltaXRzPGRvdWJsZT46OklzSW5mKGRvdWJs
ZV92YWx1ZSkgfHwKLSAgICAgIE1hdGhMaW1pdHM8ZG91YmxlPjo6SXNOYU4oZG91YmxlX3ZhbHVl
KSkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gRmFpbCBpZiB0aGUgdmFsdWUgaXMgbm90IHJl
cHJlc2VudGFibGUgaW4gZmxvYXQuCi0gIGlmIChkb3VibGVfdmFsdWUgPiBzdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6bWF4KCkgfHwKLSAgICAgIGRvdWJsZV92YWx1ZSA8IC1zdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAq
dmFsdWUgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZG91YmxlX3ZhbHVlKTsKLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb252ZXJ0ZXIKLX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3V0aWxpdHkuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2ds
ZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3V0aWxpdHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzNkZjhlZGFkMjY4MjQxMTAyZDBmMTQ5ZWEwNTcyNjRhNDNiNTQwMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdXRpbC9pbnRlcm5hbC91dGlsaXR5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBA
QAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0
Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xFX1BS
T1RPQlVGX1VUSUxfQ09OVkVSVEVSX1VUSUxJVFlfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JV
Rl9VVElMX0NPTlZFUlRFUl9VVElMSVRZX0hfXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRl
ZiBfU0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9w
dHIuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0j
aW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3R5
cGUucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9zdGF0dXMuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVz
b3IuaD4KLQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1jbGFz
cyBNZXRob2Q7Ci1jbGFzcyBBbnk7Ci1jbGFzcyBCb29sOwotY2xhc3MgT3B0aW9uOwotY2xhc3Mg
RmllbGQ7Ci1jbGFzcyBUeXBlOwotY2xhc3MgRW51bTsKLWNsYXNzIEVudW1WYWx1ZTsKLX0gIC8v
IG5hbWVzcGFjZSBwcm90b2J1ZgotCi0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2Ug
dXRpbCB7Ci1uYW1lc3BhY2UgY29udmVydGVyIHsKLS8vIEZpbmRzIHRoZSB0ZWNoIG9wdGlvbiBp
ZGVudGlmaWVkIGJ5IG9wdGlvbl9uYW1lLiBQYXJzZXMgdGhlIGJvb2xlYW4gdmFsdWUgYW5kCi0v
LyByZXR1cm5zIGl0LgotLy8gV2hlbiB0aGUgb3B0aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMg
bm90IGZvdW5kLCBkZWZhdWx0X3ZhbHVlIGlzIHJldHVybmVkLgotTElCUFJPVE9CVUZfRVhQT1JU
IGJvb2wgR2V0Qm9vbE9wdGlvbk9yRGVmYXVsdCgKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVm
OjpSZXBlYXRlZFB0ckZpZWxkPGdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbj4mIG9wdGlvbnMsCi0g
ICAgY29uc3Qgc3RyaW5nJiBvcHRpb25fbmFtZSwgYm9vbCBkZWZhdWx0X3ZhbHVlKTsKLQotLy8g
UmV0dXJucyBpbnQ2NCBvcHRpb24gdmFsdWUuIElmIHRoZSBvcHRpb24gaXNuJ3QgZm91bmQsIHJl
dHVybnMgdGhlCi0vLyBkZWZhdWx0X3ZhbHVlLgotTElCUFJPVE9CVUZfRVhQT1JUIGludDY0IEdl
dEludDY0T3B0aW9uT3JEZWZhdWx0KAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlJlcGVh
dGVkUHRyRmllbGQ8Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uPiYgb3B0aW9ucywKLSAgICBjb25z
dCBzdHJpbmcmIG9wdGlvbl9uYW1lLCBpbnQ2NCBkZWZhdWx0X3ZhbHVlKTsKLQotLy8gUmV0dXJu
cyBkb3VibGUgb3B0aW9uIHZhbHVlLiBJZiB0aGUgb3B0aW9uIGlzbid0IGZvdW5kLCByZXR1cm5z
IHRoZQotLy8gZGVmYXVsdF92YWx1ZS4KLUxJQlBST1RPQlVGX0VYUE9SVCBkb3VibGUgR2V0RG91
YmxlT3B0aW9uT3JEZWZhdWx0KAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlJlcGVhdGVk
UHRyRmllbGQ8Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uPiYgb3B0aW9ucywKLSAgICBjb25zdCBz
dHJpbmcmIG9wdGlvbl9uYW1lLCBkb3VibGUgZGVmYXVsdF92YWx1ZSk7Ci0KLS8vIFJldHVybnMg
c3RyaW5nIG9wdGlvbiB2YWx1ZS4gSWYgdGhlIG9wdGlvbiBpc24ndCBmb3VuZCwgcmV0dXJucyB0
aGUKLS8vIGRlZmF1bHRfdmFsdWUuCi1MSUJQUk9UT0JVRl9FWFBPUlQgc3RyaW5nIEdldFN0cmlu
Z09wdGlvbk9yRGVmYXVsdCgKLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0
ckZpZWxkPGdvb2dsZTo6cHJvdG9idWY6Ok9wdGlvbj4mIG9wdGlvbnMsCi0gICAgY29uc3Qgc3Ry
aW5nJiBvcHRpb25fbmFtZSwgY29uc3Qgc3RyaW5nJiBkZWZhdWx0X3ZhbHVlKTsKLQotLy8gUmV0
dXJucyBhIGJvb2xlYW4gdmFsdWUgY29udGFpbmVkIGluIEFueSB0eXBlLgotLy8gVE9ETyhza2Fy
dmFqZSk6IE1ha2UgdGhlc2UgdXRpbGl0aWVzIGRlYWxpbmcgd2l0aCBBbnkgdHlwZXMgbW9yZSBn
ZW5lcmljLAotLy8gYWRkIG1vcmUgZXJyb3IgY2hlY2tpbmcgYW5kIG1vdmUgdG8gYSBtb3JlIHB1
YmxpYy9zaGFyYWJsZSBsb2NhdGlvbiBzbyBvdGhlcnMKLS8vIGNhbiB1c2UuCi1MSUJQUk9UT0JV
Rl9FWFBPUlQgYm9vbCBHZXRCb29sRnJvbUFueShjb25zdCBnb29nbGU6OnByb3RvYnVmOjpBbnkm
IGFueSk7Ci0KLS8vIFJldHVybnMgaW50NjQgdmFsdWUgY29udGFpbmVkIGluIEFueSB0eXBlLgot
TElCUFJPVE9CVUZfRVhQT1JUIGludDY0IEdldEludDY0RnJvbUFueShjb25zdCBnb29nbGU6OnBy
b3RvYnVmOjpBbnkmIGFueSk7Ci0KLS8vIFJldHVybnMgZG91YmxlIHZhbHVlIGNvbnRhaW5lZCBp
biBBbnkgdHlwZS4KLUxJQlBST1RPQlVGX0VYUE9SVCBkb3VibGUgR2V0RG91YmxlRnJvbUFueShj
b25zdCBnb29nbGU6OnByb3RvYnVmOjpBbnkmIGFueSk7Ci0KLS8vIFJldHVybnMgc3RyaW5nIHZh
bHVlIGNvbnRhaW5lZCBpbiBBbnkgdHlwZS4KLUxJQlBST1RPQlVGX0VYUE9SVCBzdHJpbmcgR2V0
U3RyaW5nRnJvbUFueShjb25zdCBnb29nbGU6OnByb3RvYnVmOjpBbnkmIGFueSk7Ci0KLS8vIFJl
dHVybnMgdGhlIHR5cGUgc3RyaW5nIHdpdGhvdXQgdGhlIHVybCBwcmVmaXguIGUuZy46IElmIHRo
ZSBwYXNzZWQgdHlwZSBpcwotLy8gJ3R5cGUuZ29vZ2xlYXBpcy5jb20vdGVjaC50eXBlLkJvb2wn
LCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgJ3RlY2gudHlwZS5Cb29sJy4KLUxJQlBST1RPQlVGX0VY
UE9SVCBjb25zdCBTdHJpbmdQaWVjZSBHZXRUeXBlV2l0aG91dFVybChTdHJpbmdQaWVjZSB0eXBl
X3VybCk7Ci0KLS8vIFJldHVybnMgdGhlIHNpbXBsZV90eXBlIHdpdGggdGhlIGJhc2UgdHlwZSB1
cmwgKGtUeXBlU2VydmljZUJhc2VVcmwpCi0vLyBwcmVmaXhlZC4KLS8vCi0vLyBFLmc6Ci0vLyBH
ZXRGdWxsVHlwZVdpdGhVcmwoImdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiKSByZXR1cm5zIHRo
ZSBzdHJpbmcKLS8vICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5UaW1lc3Rh
bXAiLgotTElCUFJPVE9CVUZfRVhQT1JUIGNvbnN0IHN0cmluZyBHZXRGdWxsVHlwZVdpdGhVcmwo
U3RyaW5nUGllY2Ugc2ltcGxlX3R5cGUpOwotCi0vLyBGaW5kcyBhbmQgcmV0dXJucyBvcHRpb24g
aWRlbnRpZmllZCBieSBuYW1lIGFuZCBvcHRpb25fbmFtZSB3aXRoaW4gdGhlCi0vLyBwcm92aWRl
ZCBtYXAuIFJldHVybnMgTlVMTCBpZiBub25lIGZvdW5kLgotY29uc3QgZ29vZ2xlOjpwcm90b2J1
Zjo6T3B0aW9uKiBGaW5kT3B0aW9uT3JOdWxsKAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6
OlJlcGVhdGVkUHRyRmllbGQ8Z29vZ2xlOjpwcm90b2J1Zjo6T3B0aW9uPiYgb3B0aW9ucywKLSAg
ICBjb25zdCBzdHJpbmcmIG9wdGlvbl9uYW1lKTsKLQotLy8gRmluZHMgYW5kIHJldHVybnMgdGhl
IGZpZWxkIGlkZW50aWZpZWQgYnkgZmllbGRfbmFtZSBpbiB0aGUgcGFzc2VkIHRlY2ggVHlwZQot
Ly8gb2JqZWN0LiBSZXR1cm5zIE5VTEwgaWYgbm9uZSBmb3VuZC4KLWNvbnN0IGdvb2dsZTo6cHJv
dG9idWY6OkZpZWxkKiBGaW5kRmllbGRJblR5cGVPck51bGwoCi0gICAgY29uc3QgZ29vZ2xlOjpw
cm90b2J1Zjo6VHlwZSogdHlwZSwgU3RyaW5nUGllY2UgZmllbGRfbmFtZSk7Ci0KLS8vIFNpbWls
YXIgdG8gRmluZEZpZWxkSW5UeXBlT3JOdWxsLCBidXQgdGhpcyBsb29rcyB1cCBmaWVsZHMgd2l0
aCBnaXZlbgotLy8ganNvbl9uYW1lLgotY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQqIEZp
bmRKc29uRmllbGRJblR5cGVPck51bGwoCi0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VHlw
ZSogdHlwZSwgU3RyaW5nUGllY2UganNvbl9uYW1lKTsKLQotLy8gRmluZHMgYW5kIHJldHVybnMg
dGhlIEVudW1WYWx1ZSBpZGVudGlmaWVkIGJ5IGVudW1fbmFtZSBpbiB0aGUgcGFzc2VkIHRlY2gK
LS8vIEVudW0gb2JqZWN0LiBSZXR1cm5zIE5VTEwgaWYgbm9uZSBmb3VuZC4KLWNvbnN0IGdvb2ds
ZTo6cHJvdG9idWY6OkVudW1WYWx1ZSogRmluZEVudW1WYWx1ZUJ5TmFtZU9yTnVsbCgKLSAgICBj
b25zdCBnb29nbGU6OnByb3RvYnVmOjpFbnVtKiBlbnVtX3R5cGUsIFN0cmluZ1BpZWNlIGVudW1f
bmFtZSk7Ci0KLS8vIEZpbmRzIGFuZCByZXR1cm5zIHRoZSBFbnVtVmFsdWUgaWRlbnRpZmllZCBi
eSB2YWx1ZSBpbiB0aGUgcGFzc2VkIHRlY2gKLS8vIEVudW0gb2JqZWN0LiBSZXR1cm5zIE5VTEwg
aWYgbm9uZSBmb3VuZC4KLWNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZSogRmluZEVu
dW1WYWx1ZUJ5TnVtYmVyT3JOdWxsKAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OkVudW0q
IGVudW1fdHlwZSwgaW50MzIgdmFsdWUpOwotCi0vLyBDb252ZXJ0cyBpbnB1dCB0byBjYW1lbC1j
YXNlIGFuZCByZXR1cm5zIGl0LgotTElCUFJPVE9CVUZfRVhQT1JUIHN0cmluZyBUb0NhbWVsQ2Fz
ZShjb25zdCBTdHJpbmdQaWVjZSBpbnB1dCk7Ci0KLS8vIENvbnZlcnRzIGlucHV0IHRvIHNuYWtl
X2Nhc2UgYW5kIHJldHVybnMgaXQuCi1MSUJQUk9UT0JVRl9FWFBPUlQgc3RyaW5nIFRvU25ha2VD
YXNlKFN0cmluZ1BpZWNlIGlucHV0KTsKLQotLy8gUmV0dXJucyB0cnVlIGlmIHR5cGVfbmFtZSBy
ZXByZXNlbnRzIGEgd2VsbC1rbm93biB0eXBlLgotTElCUFJPVE9CVUZfRVhQT1JUIGJvb2wgSXNX
ZWxsS25vd25UeXBlKGNvbnN0IHN0cmluZyYgdHlwZV9uYW1lKTsKLQotLy8gUmV0dXJucyB0cnVl
IGlmICdib29sX3N0cmluZycgcmVwcmVzZW50cyBhIHZhbGlkIGJvb2xlYW4gdmFsdWUuIE9ubHkg
InRydWUiLAotLy8gImZhbHNlIiwgIjAiIGFuZCAiMSIgYXJlIGFsbG93ZWQuCi1MSUJQUk9UT0JV
Rl9FWFBPUlQgYm9vbCBJc1ZhbGlkQm9vbFN0cmluZyhjb25zdCBzdHJpbmcmIGJvb2xfc3RyaW5n
KTsKLQotLy8gUmV0dXJucyB0cnVlIGlmICJmaWVsZCIgaXMgYSBwcm90b2J1ZiBtYXAgZmllbGQg
YmFzZWQgb24gaXRzIHR5cGUuCi1MSUJQUk9UT0JVRl9FWFBPUlQgYm9vbCBJc01hcChjb25zdCBn
b29nbGU6OnByb3RvYnVmOjpGaWVsZCYgZmllbGQsCi0gICAgICAgICAgIGNvbnN0IGdvb2dsZTo6
cHJvdG9idWY6OlR5cGUmIHR5cGUpOwotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHR5
cGUgaGFzIHNwZWNpYWwgTWVzc2FnZVNldCB3aXJlIGZvcm1hdC4KLWJvb2wgSXNNZXNzYWdlU2V0
V2lyZUZvcm1hdChjb25zdCBnb29nbGU6OnByb3RvYnVmOjpUeXBlJiB0eXBlKTsKLQotLy8gSW5m
aW5pdHkvTmFOLWF3YXJlIGNvbnZlcnNpb24gdG8gc3RyaW5nLgotTElCUFJPVE9CVUZfRVhQT1JU
IHN0cmluZyBEb3VibGVBc1N0cmluZyhkb3VibGUgdmFsdWUpOwotTElCUFJPVE9CVUZfRVhQT1JU
IHN0cmluZyBGbG9hdEFzU3RyaW5nKGZsb2F0IHZhbHVlKTsKLQotLy8gQ29udmVydCBmcm9tIGlu
dDMyLCBpbnQ2NCwgdWludDMyLCB1aW50NjQsIGRvdWJsZSBvciBmbG9hdCB0byBzdHJpbmcuCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cmluZyBWYWx1ZUFzU3RyaW5nKFQgdmFsdWUpIHsKLSAg
cmV0dXJuIFNpbXBsZUl0b2EodmFsdWUpOwotfQotCi10ZW1wbGF0ZSA8PgotaW5saW5lIHN0cmlu
ZyBWYWx1ZUFzU3RyaW5nKGZsb2F0IHZhbHVlKSB7Ci0gIHJldHVybiBGbG9hdEFzU3RyaW5nKHZh
bHVlKTsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSBzdHJpbmcgVmFsdWVBc1N0cmluZyhkb3Vi
bGUgdmFsdWUpIHsKLSAgcmV0dXJuIERvdWJsZUFzU3RyaW5nKHZhbHVlKTsKLX0KLQotLy8gQ29u
dmVydHMgYSBzdHJpbmcgdG8gZmxvYXQuIFVubGlrZSBzYWZlX3N0cnRvZiwgY29udmVyc2lvbiB3
aWxsIGZhaWwgaWYgdGhlCi0vLyB2YWx1ZSBmaXRzIGludG8gZG91YmxlIGJ1dCBub3QgZmxvYXQg
KGUuZy4sIERCTF9NQVgpLgotTElCUFJPVE9CVUZfRVhQT1JUIGJvb2wgU2FmZVN0clRvRmxvYXQo
U3RyaW5nUGllY2Ugc3RyLCBmbG9hdCogdmFsdWUpOwotfSAgLy8gbmFtZXNwYWNlIGNvbnZlcnRl
cgotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19ICAv
LyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9VVElMX0NPTlZF
UlRFUl9VVElMSVRZX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvanNv
bl9mb3JtYXRfcHJvdG8zLnByb3RvIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvanNvbl9mb3Jt
YXRfcHJvdG8zLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWUyNGMxODMx
ODIzY2M2ZTYyZDBmN2M3NTIzZGNhMTIyN2NkYzRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2pzb25fZm9ybWF0
X3Byb3RvMy5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vLyBQcm90b2Nv
bCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdo
dCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZl
bG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotc3ludGF4ID0gInByb3RvMyI7Ci0KLXBhY2thZ2Ug
cHJvdG8zOwotCi0KLWltcG9ydCAiZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvIjsKLWlt
cG9ydCAiZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90byI7Ci1pbXBvcnQgImdvb2dsZS9w
cm90b2J1Zi93cmFwcGVycy5wcm90byI7Ci1pbXBvcnQgImdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3Qu
cHJvdG8iOwotaW1wb3J0ICJnb29nbGUvcHJvdG9idWYvYW55LnByb3RvIjsKLWltcG9ydCAiZ29v
Z2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucHJvdG8iOwotCi1lbnVtIEVudW1UeXBlIHsKLSAgRk9P
ID0gMDsKLSAgQkFSID0gMTsKLX0KLQotbWVzc2FnZSBNZXNzYWdlVHlwZSB7Ci0gIGludDMyIHZh
bHVlID0gMTsKLX0KLQotbWVzc2FnZSBUZXN0TWVzc2FnZSB7Ci0gIGJvb2wgYm9vbF92YWx1ZSA9
IDE7Ci0gIGludDMyIGludDMyX3ZhbHVlID0gMjsKLSAgaW50NjQgaW50NjRfdmFsdWUgPSAzOwot
ICB1aW50MzIgdWludDMyX3ZhbHVlID0gNDsKLSAgdWludDY0IHVpbnQ2NF92YWx1ZSA9IDU7Ci0g
IGZsb2F0IGZsb2F0X3ZhbHVlID0gNjsKLSAgZG91YmxlIGRvdWJsZV92YWx1ZSA9IDc7Ci0gIHN0
cmluZyBzdHJpbmdfdmFsdWUgPSA4OwotICBieXRlcyBieXRlc192YWx1ZSA9IDk7Ci0gIEVudW1U
eXBlIGVudW1fdmFsdWUgPSAxMDsKLSAgTWVzc2FnZVR5cGUgbWVzc2FnZV92YWx1ZSA9IDExOwot
Ci0gIHJlcGVhdGVkIGJvb2wgcmVwZWF0ZWRfYm9vbF92YWx1ZSA9IDIxOwotICByZXBlYXRlZCBp
bnQzMiByZXBlYXRlZF9pbnQzMl92YWx1ZSA9IDIyOwotICByZXBlYXRlZCBpbnQ2NCByZXBlYXRl
ZF9pbnQ2NF92YWx1ZSA9IDIzOwotICByZXBlYXRlZCB1aW50MzIgcmVwZWF0ZWRfdWludDMyX3Zh
bHVlID0gMjQ7Ci0gIHJlcGVhdGVkIHVpbnQ2NCByZXBlYXRlZF91aW50NjRfdmFsdWUgPSAyNTsK
LSAgcmVwZWF0ZWQgZmxvYXQgcmVwZWF0ZWRfZmxvYXRfdmFsdWUgPSAyNjsKLSAgcmVwZWF0ZWQg
ZG91YmxlIHJlcGVhdGVkX2RvdWJsZV92YWx1ZSA9IDI3OwotICByZXBlYXRlZCBzdHJpbmcgcmVw
ZWF0ZWRfc3RyaW5nX3ZhbHVlID0gMjg7Ci0gIHJlcGVhdGVkIGJ5dGVzIHJlcGVhdGVkX2J5dGVz
X3ZhbHVlID0gMjk7Ci0gIHJlcGVhdGVkIEVudW1UeXBlIHJlcGVhdGVkX2VudW1fdmFsdWUgPSAz
MDsKLSAgcmVwZWF0ZWQgTWVzc2FnZVR5cGUgcmVwZWF0ZWRfbWVzc2FnZV92YWx1ZSA9IDMxOwot
fQotCi1tZXNzYWdlIFRlc3RPbmVvZiB7Ci0gIC8vIEluIEpTT04gZm9ybWF0IG9uZW9mIGZpZWxk
cyBiZWhhdmUgbW9zdGx5IHRoZSBzYW1lIGFzIG9wdGlvbmFsCi0gIC8vIGZpZWxkcyBleGNlcHQg
dGhhdDoKLSAgLy8gICAxLiBPbmVvZiBmaWVsZHMgaGF2ZSBmaWVsZCBwcmVzZW5jZSBpbmZvcm1h
dGlvbiBhbmQgd2lsbCBiZQotICAvLyAgICAgIHByaW50ZWQgaWYgaXQncyBzZXQgbm8gbWF0dGVy
IHdoZXRoZXIgaXQncyB0aGUgZGVmYXVsdCB2YWx1ZS4KLSAgLy8gICAyLiBNdWx0aXBsZSBvbmVv
ZiBmaWVsZHMgaW4gdGhlIHNhbWUgb25lb2YgY2Fubm90IGFwcGVhciBhdCB0aGUKLSAgLy8gICAg
ICBzYW1lIHRpbWUgaW4gdGhlIGlucHV0LgotICBvbmVvZiBvbmVvZl92YWx1ZSB7Ci0gICAgaW50
MzIgb25lb2ZfaW50MzJfdmFsdWUgPSAxOwotICAgIHN0cmluZyBvbmVvZl9zdHJpbmdfdmFsdWUg
PSAyOwotICAgIGJ5dGVzIG9uZW9mX2J5dGVzX3ZhbHVlID0gMzsKLSAgICBFbnVtVHlwZSBvbmVv
Zl9lbnVtX3ZhbHVlID0gNDsKLSAgICBNZXNzYWdlVHlwZSBvbmVvZl9tZXNzYWdlX3ZhbHVlID0g
NTsKLSAgfQotfQotCi1tZXNzYWdlIFRlc3RNYXAgewotICBtYXA8Ym9vbCwgaW50MzI+IGJvb2xf
bWFwID0gMTsKLSAgbWFwPGludDMyLCBpbnQzMj4gaW50MzJfbWFwID0gMjsKLSAgbWFwPGludDY0
LCBpbnQzMj4gaW50NjRfbWFwID0gMzsKLSAgbWFwPHVpbnQzMiwgaW50MzI+IHVpbnQzMl9tYXAg
PSA0OwotICBtYXA8dWludDY0LCBpbnQzMj4gdWludDY0X21hcCA9IDU7Ci0gIG1hcDxzdHJpbmcs
IGludDMyPiBzdHJpbmdfbWFwID0gNjsKLX0KLQotbWVzc2FnZSBUZXN0TmVzdGVkTWFwIHsKLSAg
bWFwPGJvb2wsIGludDMyPiBib29sX21hcCA9IDE7Ci0gIG1hcDxpbnQzMiwgaW50MzI+IGludDMy
X21hcCA9IDI7Ci0gIG1hcDxpbnQ2NCwgaW50MzI+IGludDY0X21hcCA9IDM7Ci0gIG1hcDx1aW50
MzIsIGludDMyPiB1aW50MzJfbWFwID0gNDsKLSAgbWFwPHVpbnQ2NCwgaW50MzI+IHVpbnQ2NF9t
YXAgPSA1OwotICBtYXA8c3RyaW5nLCBpbnQzMj4gc3RyaW5nX21hcCA9IDY7Ci0gIG1hcDxzdHJp
bmcsIFRlc3ROZXN0ZWRNYXA+IG1hcF9tYXAgPSA3OwotfQotCi1tZXNzYWdlIFRlc3RXcmFwcGVy
IHsKLSAgZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZSBib29sX3ZhbHVlID0gMTsKLSAgZ29vZ2xl
LnByb3RvYnVmLkludDMyVmFsdWUgaW50MzJfdmFsdWUgPSAyOwotICBnb29nbGUucHJvdG9idWYu
SW50NjRWYWx1ZSBpbnQ2NF92YWx1ZSA9IDM7Ci0gIGdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1
ZSB1aW50MzJfdmFsdWUgPSA0OwotICBnb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUgdWludDY0
X3ZhbHVlID0gNTsKLSAgZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWUgZmxvYXRfdmFsdWUgPSA2
OwotICBnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUgZG91YmxlX3ZhbHVlID0gNzsKLSAgZ29v
Z2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlIHN0cmluZ192YWx1ZSA9IDg7Ci0gIGdvb2dsZS5wcm90
b2J1Zi5CeXRlc1ZhbHVlIGJ5dGVzX3ZhbHVlID0gOTsKLQotICByZXBlYXRlZCBnb29nbGUucHJv
dG9idWYuQm9vbFZhbHVlIHJlcGVhdGVkX2Jvb2xfdmFsdWUgPSAxMTsKLSAgcmVwZWF0ZWQgZ29v
Z2xlLnByb3RvYnVmLkludDMyVmFsdWUgcmVwZWF0ZWRfaW50MzJfdmFsdWUgPSAxMjsKLSAgcmVw
ZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUgcmVwZWF0ZWRfaW50NjRfdmFsdWUgPSAx
MzsKLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlIHJlcGVhdGVkX3VpbnQz
Ml92YWx1ZSA9IDE0OwotICByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUgcmVw
ZWF0ZWRfdWludDY0X3ZhbHVlID0gMTU7Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5GbG9h
dFZhbHVlIHJlcGVhdGVkX2Zsb2F0X3ZhbHVlID0gMTY7Ci0gIHJlcGVhdGVkIGdvb2dsZS5wcm90
b2J1Zi5Eb3VibGVWYWx1ZSByZXBlYXRlZF9kb3VibGVfdmFsdWUgPSAxNzsKLSAgcmVwZWF0ZWQg
Z29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlIHJlcGVhdGVkX3N0cmluZ192YWx1ZSA9IDE4Owot
ICByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSByZXBlYXRlZF9ieXRlc192YWx1
ZSA9IDE5OwotfQotCi1tZXNzYWdlIFRlc3RUaW1lc3RhbXAgewotICBnb29nbGUucHJvdG9idWYu
VGltZXN0YW1wIHZhbHVlID0gMTsKLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFt
cCByZXBlYXRlZF92YWx1ZSA9IDI7Ci19Ci0KLW1lc3NhZ2UgVGVzdER1cmF0aW9uIHsKLSAgZ29v
Z2xlLnByb3RvYnVmLkR1cmF0aW9uIHZhbHVlID0gMTsKLSAgcmVwZWF0ZWQgZ29vZ2xlLnByb3Rv
YnVmLkR1cmF0aW9uIHJlcGVhdGVkX3ZhbHVlID0gMjsKLX0KLQotbWVzc2FnZSBUZXN0RmllbGRN
YXNrIHsKLSAgZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFzayB2YWx1ZSA9IDE7Ci19Ci0KLW1lc3Nh
Z2UgVGVzdFN0cnVjdCB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QgdmFsdWUgPSAxOwotICBy
ZXBlYXRlZCBnb29nbGUucHJvdG9idWYuU3RydWN0IHJlcGVhdGVkX3ZhbHVlID0gMjsKLX0KLQot
bWVzc2FnZSBUZXN0QW55IHsKLSAgZ29vZ2xlLnByb3RvYnVmLkFueSB2YWx1ZSA9IDE7Ci0gIHJl
cGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5BbnkgcmVwZWF0ZWRfdmFsdWUgPSAyOwotfQotCi1tZXNz
YWdlIFRlc3RWYWx1ZSB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5WYWx1ZSB2YWx1ZSA9IDE7Ci0gIHJl
cGVhdGVkIGdvb2dsZS5wcm90b2J1Zi5WYWx1ZSByZXBlYXRlZF92YWx1ZSA9IDI7Ci19Ci0KLW1l
c3NhZ2UgVGVzdExpc3RWYWx1ZSB7Ci0gIGdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUgdmFsdWUg
PSAxOwotICByZXBlYXRlZCBnb29nbGUucHJvdG9idWYuTGlzdFZhbHVlIHJlcGVhdGVkX3ZhbHVl
ID0gMjsKLX0KLQotbWVzc2FnZSBUZXN0Qm9vbFZhbHVlIHsKLSAgYm9vbCBib29sX3ZhbHVlID0g
MTsKLSAgbWFwPGJvb2wsIGludDMyPiBib29sX21hcCA9IDI7Ci19Ci0KLW1lc3NhZ2UgVGVzdEN1
c3RvbUpzb25OYW1lIHsKLSAgaW50MzIgdmFsdWUgPSAxIFtqc29uX25hbWUgPSAiQHZhbHVlIl07
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWwuY2MgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Ny
Yy9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWwuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI2NTkzMjBhMTU5YjI2OTMzMDMwY2RhZDVmYTFkYTYwMGQ0OWY3NWIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvanNvbl91dGlsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8v
IFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3V0aWwvanNvbl91dGlsLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMv
Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmplY3R3cml0
ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9lcnJvcl9saXN0
ZW5lci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fb2Jq
ZWN0d3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNv
bl9zdHJlYW1fcGFyc2VyLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJu
YWwvcHJvdG9zdHJlYW1fb2JqZWN0c291cmNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVm
L3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0d3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXJfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9ieXRlc3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0
YXR1c19tYWNyb3MuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIHV0aWwgewotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotdm9pZCBaZXJvQ29w
eVN0cmVhbUJ5dGVTaW5rOjpBcHBlbmQoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW4pIHsK
LSAgd2hpbGUgKGxlbiA+IDApIHsKLSAgICB2b2lkKiBidWZmZXI7Ci0gICAgaW50IGxlbmd0aDsK
LSAgICBpZiAoIXN0cmVhbV8tPk5leHQoJmJ1ZmZlciwgJmxlbmd0aCkpIHsKLSAgICAgIC8vIFRo
ZXJlIGlzbid0IGEgd2F5IGZvciBCeXRlU2luayB0byByZXBvcnQgZXJyb3JzLgotICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAobGVuIDwgbGVuZ3RoKSB7Ci0gICAgICBtZW1jcHkoYnVmZmVy
LCBieXRlcywgbGVuKTsKLSAgICAgIHN0cmVhbV8tPkJhY2tVcChsZW5ndGggLSBsZW4pOwotICAg
ICAgYnJlYWs7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lbWNweShidWZmZXIsIGJ5dGVzLCBsZW5n
dGgpOwotICAgICAgYnl0ZXMgKz0gbGVuZ3RoOwotICAgICAgbGVuIC09IGxlbmd0aDsKLSAgICB9
Ci0gIH0KLX0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi11dGlsOjpTdGF0dXMgQmluYXJ5
VG9Kc29uU3RyZWFtKFR5cGVSZXNvbHZlciogcmVzb2x2ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB0eXBlX3VybCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogYmluYXJ5X2lucHV0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpaZXJvQ29weU91dHB1dFN0cmVh
bSoganNvbl9vdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SnNvbk9wdGlvbnMmIG9wdGlvbnMpIHsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0gaW5fc3RyZWFt
KGJpbmFyeV9pbnB1dCk7Ci0gIGdvb2dsZTo6cHJvdG9idWY6OlR5cGUgdHlwZTsKLSAgUkVUVVJO
X0lGX0VSUk9SKHJlc29sdmVyLT5SZXNvbHZlTWVzc2FnZVR5cGUodHlwZV91cmwsICZ0eXBlKSk7
Ci0gIGNvbnZlcnRlcjo6UHJvdG9TdHJlYW1PYmplY3RTb3VyY2UgcHJvdG9fc291cmNlKCZpbl9z
dHJlYW0sIHJlc29sdmVyLCB0eXBlKTsKLSAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dF9zdHJl
YW0oanNvbl9vdXRwdXQpOwotICBjb252ZXJ0ZXI6Okpzb25PYmplY3RXcml0ZXIganNvbl93cml0
ZXIob3B0aW9ucy5hZGRfd2hpdGVzcGFjZSA/ICIgIiA6ICIiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJm91dF9zdHJlYW0pOwotICBpZiAob3B0aW9ucy5hbHdh
eXNfcHJpbnRfcHJpbWl0aXZlX2ZpZWxkcykgewotICAgIGNvbnZlcnRlcjo6RGVmYXVsdFZhbHVl
T2JqZWN0V3JpdGVyIGRlZmF1bHRfdmFsdWVfd3JpdGVyKAotICAgICAgICByZXNvbHZlciwgdHlw
ZSwgJmpzb25fd3JpdGVyKTsKLSAgICByZXR1cm4gcHJvdG9fc291cmNlLldyaXRlVG8oJmRlZmF1
bHRfdmFsdWVfd3JpdGVyKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gcHJvdG9fc291cmNlLldy
aXRlVG8oJmpzb25fd3JpdGVyKTsKLSAgfQotfQotCi11dGlsOjpTdGF0dXMgQmluYXJ5VG9Kc29u
U3RyaW5nKFR5cGVSZXNvbHZlciogcmVzb2x2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RyaW5nJiB0eXBlX3VybCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdHJpbmcmIGJpbmFyeV9pbnB1dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJpbmcqIGpzb25fb3V0cHV0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEpzb25PcHRpb25zJiBvcHRpb25zKSB7Ci0gIGlvOjpBcnJh
eUlucHV0U3RyZWFtIGlucHV0X3N0cmVhbShiaW5hcnlfaW5wdXQuZGF0YSgpLCBiaW5hcnlfaW5w
dXQuc2l6ZSgpKTsKLSAgaW86OlN0cmluZ091dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKGpzb25f
b3V0cHV0KTsKLSAgcmV0dXJuIEJpbmFyeVRvSnNvblN0cmVhbShyZXNvbHZlciwgdHlwZV91cmws
ICZpbnB1dF9zdHJlYW0sICZvdXRwdXRfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbnMpOwotfQotCi1uYW1lc3BhY2UgewotY2xhc3MgU3RhdHVzRXJyb3JMaXN0ZW5l
ciA6IHB1YmxpYyBjb252ZXJ0ZXI6OkVycm9yTGlzdGVuZXIgewotIHB1YmxpYzoKLSAgU3RhdHVz
RXJyb3JMaXN0ZW5lcigpIDogc3RhdHVzXyh1dGlsOjpTdGF0dXM6Ok9LKSB7fQotICB2aXJ0dWFs
IH5TdGF0dXNFcnJvckxpc3RlbmVyKCkge30KLQotICB1dGlsOjpTdGF0dXMgR2V0U3RhdHVzKCkg
eyByZXR1cm4gc3RhdHVzXzsgfQotCi0gIHZpcnR1YWwgdm9pZCBJbnZhbGlkTmFtZShjb25zdCBj
b252ZXJ0ZXI6OkxvY2F0aW9uVHJhY2tlckludGVyZmFjZSYgbG9jLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nUGllY2UgdW5rbm93bl9uYW1lLCBTdHJpbmdQaWVjZSBtZXNzYWdl
KSB7Ci0gICAgc3RhdHVzXyA9IHV0aWw6OlN0YXR1cyh1dGlsOjplcnJvcjo6SU5WQUxJRF9BUkdV
TUVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jLlRvU3RyaW5nKCkgKyAiOiAi
ICsgbWVzc2FnZS5Ub1N0cmluZygpKTsKLSAgfQotCi0gIHZpcnR1YWwgdm9pZCBJbnZhbGlkVmFs
dWUoY29uc3QgY29udmVydGVyOjpMb2NhdGlvblRyYWNrZXJJbnRlcmZhY2UmIGxvYywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdQaWVjZSB0eXBlX25hbWUsIFN0cmluZ1BpZWNl
IHZhbHVlKSB7Ci0gICAgc3RhdHVzXyA9Ci0gICAgICAgIHV0aWw6OlN0YXR1cyh1dGlsOjplcnJv
cjo6SU5WQUxJRF9BUkdVTUVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgbG9jLlRvU3RyaW5n
KCkgKyAiOiBpbnZhbGlkIHZhbHVlICIgKyB2YWx1ZS5Ub1N0cmluZygpICsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgZm9yIHR5cGUgIiArIHR5cGVfbmFtZS5Ub1N0cmluZygpKTsKLSAg
fQotCi0gIHZpcnR1YWwgdm9pZCBNaXNzaW5nRmllbGQoY29uc3QgY29udmVydGVyOjpMb2NhdGlv
blRyYWNrZXJJbnRlcmZhY2UmIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmdQaWVjZSBtaXNzaW5nX25hbWUpIHsKLSAgICBzdGF0dXNfID0gdXRpbDo6U3RhdHVzKAotICAg
ICAgICB1dGlsOjplcnJvcjo6SU5WQUxJRF9BUkdVTUVOVCwKLSAgICAgICAgbG9jLlRvU3RyaW5n
KCkgKyAiOiBtaXNzaW5nIGZpZWxkICIgKyBtaXNzaW5nX25hbWUuVG9TdHJpbmcoKSk7Ci0gIH0K
LQotIHByaXZhdGU6Ci0gIHV0aWw6OlN0YXR1cyBzdGF0dXNfOwotCi0gIEdPT0dMRV9ESVNBTExP
V19FVklMX0NPTlNUUlVDVE9SUyhTdGF0dXNFcnJvckxpc3RlbmVyKTsKLX07Ci19ICAvLyBuYW1l
c3BhY2UKLQotdXRpbDo6U3RhdHVzIEpzb25Ub0JpbmFyeVN0cmVhbShUeXBlUmVzb2x2ZXIqIHJl
c29sdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYg
dHlwZV91cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86Olplcm9Db3B5
SW5wdXRTdHJlYW0qIGpzb25faW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW86Olplcm9Db3B5T3V0cHV0U3RyZWFtKiBiaW5hcnlfb3V0cHV0KSB7Ci0gIGdvb2dsZTo6
cHJvdG9idWY6OlR5cGUgdHlwZTsKLSAgUkVUVVJOX0lGX0VSUk9SKHJlc29sdmVyLT5SZXNvbHZl
TWVzc2FnZVR5cGUodHlwZV91cmwsICZ0eXBlKSk7Ci0gIGludGVybmFsOjpaZXJvQ29weVN0cmVh
bUJ5dGVTaW5rIHNpbmsoYmluYXJ5X291dHB1dCk7Ci0gIFN0YXR1c0Vycm9yTGlzdGVuZXIgbGlz
dGVuZXI7Ci0gIGNvbnZlcnRlcjo6UHJvdG9TdHJlYW1PYmplY3RXcml0ZXIgcHJvdG9fd3JpdGVy
KHJlc29sdmVyLCB0eXBlLCAmc2luaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmxpc3RlbmVyKTsKLQotICBjb252ZXJ0ZXI6Okpzb25TdHJlYW1Q
YXJzZXIgcGFyc2VyKCZwcm90b193cml0ZXIpOwotICBjb25zdCB2b2lkKiBidWZmZXI7Ci0gIGlu
dCBsZW5ndGg7Ci0gIHdoaWxlIChqc29uX2lucHV0LT5OZXh0KCZidWZmZXIsICZsZW5ndGgpKSB7
Ci0gICAgaWYgKGxlbmd0aCA9PSAwKSBjb250aW51ZTsKLSAgICBSRVRVUk5fSUZfRVJST1IoCi0g
ICAgICAgIHBhcnNlci5QYXJzZShTdHJpbmdQaWVjZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
YnVmZmVyKSwgbGVuZ3RoKSkpOwotICB9Ci0gIFJFVFVSTl9JRl9FUlJPUihwYXJzZXIuRmluaXNo
UGFyc2UoKSk7Ci0KLSAgcmV0dXJuIGxpc3RlbmVyLkdldFN0YXR1cygpOwotfQotCi11dGlsOjpT
dGF0dXMgSnNvblRvQmluYXJ5U3RyaW5nKFR5cGVSZXNvbHZlciogcmVzb2x2ZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB0eXBlX3VybCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGpzb25faW5wdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBiaW5hcnlfb3V0cHV0KSB7
Ci0gIGlvOjpBcnJheUlucHV0U3RyZWFtIGlucHV0X3N0cmVhbShqc29uX2lucHV0LmRhdGEoKSwg
anNvbl9pbnB1dC5zaXplKCkpOwotICBpbzo6U3RyaW5nT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJl
YW0oYmluYXJ5X291dHB1dCk7Ci0gIHJldHVybiBKc29uVG9CaW5hcnlTdHJlYW0ocmVzb2x2ZXIs
IHR5cGVfdXJsLCAmaW5wdXRfc3RyZWFtLCAmb3V0cHV0X3N0cmVhbSk7Ci19Ci0KLX0gIC8vIG5h
bWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBn
b29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2pzb25fdXRpbC5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvanNvbl91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDE3MThiZmI1MjgxMTlmYWQ5MTZiMGQ5MzQxOTBmZjdmM2E4OWVmMWEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3V0aWwvanNvbl91dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLy8g
UHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBD
b3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBz
Oi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIFV0aWxpdHkgZnVuY3Rpb25zIHRv
IGNvbnZlcnQgYmV0d2VlbiBwcm90b2J1ZiBiaW5hcnkgZm9ybWF0IGFuZCBwcm90bzMgSlNPTgot
Ly8gZm9ybWF0LgotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfVVRJTF9KU09OX1VUSUxfSF9fCi0j
ZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9VVElMX0pTT05fVVRJTF9IX18KLQotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFj
ZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW8gewotY2xhc3MgWmVyb0NvcHlJbnB1dFN0cmVhbTsK
LWNsYXNzIFplcm9Db3B5T3V0cHV0U3RyZWFtOwotfSAgLy8gbmFtZXNwYWNlIGlvCi1uYW1lc3Bh
Y2UgdXRpbCB7Ci0KLXN0cnVjdCBKc29uT3B0aW9ucyB7Ci0gIC8vIFdoZXRoZXIgdG8gYWRkIHNw
YWNlcywgbGluZSBicmVha3MgYW5kIGluZGVudGF0aW9uIHRvIG1ha2UgdGhlIEpTT04gb3V0cHV0
Ci0gIC8vIGVhc3kgdG8gcmVhZC4KLSAgYm9vbCBhZGRfd2hpdGVzcGFjZTsKLSAgLy8gV2hldGhl
ciB0byBhbHdheXMgcHJpbnQgcHJpbWl0aXZlIGZpZWxkcy4gQnkgZGVmYXVsdCBwcmltaXRpdmUg
ZmllbGRzIHdpdGgKLSAgLy8gZGVmYXVsdCB2YWx1ZXMgd2lsbCBiZSBvbWl0dGVkIGluIEpTT04g
am91dHB1dC4gRm9yIGV4YW1wbGUsIGFuIGludDMyIGZpZWxkCi0gIC8vIHNldCB0byAwIHdpbGwg
YmUgb21pdHRlZC4gU2V0IHRoaXMgZmxhZyB0byB0cnVlIHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1
bHQKLSAgLy8gYmVoYXZpb3IgYW5kIHByaW50IHByaW1pdGl2ZSBmaWVsZHMgcmVnYXJkbGVzcyBv
ZiB0aGVpciB2YWx1ZXMuCi0gIGJvb2wgYWx3YXlzX3ByaW50X3ByaW1pdGl2ZV9maWVsZHM7Ci0K
LSAgSnNvbk9wdGlvbnMoKSA6IGFkZF93aGl0ZXNwYWNlKGZhbHNlKSwKLSAgICAgICAgICAgICAg
ICAgIGFsd2F5c19wcmludF9wcmltaXRpdmVfZmllbGRzKGZhbHNlKSB7Ci0gIH0KLX07Ci0KLS8v
IENvbnZlcnRzIHByb3RvYnVmIGJpbmFyeSBkYXRhIHRvIEpTT04uCi0vLyBUaGUgY29udmVyc2lv
biB3aWxsIGZhaWwgaWY6Ci0vLyAgIDEuIFR5cGVSZXNvbHZlciBmYWlscyB0byByZXNvbHZlIGEg
dHlwZS4KLS8vICAgMi4gaW5wdXQgaXMgbm90IHZhbGlkIHByb3RvYnVmIHdpcmUgZm9ybWF0LCBv
ciBjb25mbGljdHMgd2l0aCB0aGUgdHlwZQotLy8gICAgICBpbmZvcm1hdGlvbiByZXR1cm5lZCBi
eSBUeXBlUmVzb2x2ZXIuCi0vLyBOb3RlIHRoYXQgdW5rbm93biBmaWVsZHMgd2lsbCBiZSBkaXNj
YXJkZWQgc2lsZW50bHkuCi11dGlsOjpTdGF0dXMgQmluYXJ5VG9Kc29uU3RyZWFtKAotICAgIFR5
cGVSZXNvbHZlciogcmVzb2x2ZXIsCi0gICAgY29uc3Qgc3RyaW5nJiB0eXBlX3VybCwKLSAgICBp
bzo6WmVyb0NvcHlJbnB1dFN0cmVhbSogYmluYXJ5X2lucHV0LAotICAgIGlvOjpaZXJvQ29weU91
dHB1dFN0cmVhbSoganNvbl9vdXRwdXQsCi0gICAgY29uc3QgSnNvbk9wdGlvbnMmIG9wdGlvbnMp
OwotCi1pbmxpbmUgdXRpbDo6U3RhdHVzIEJpbmFyeVRvSnNvblN0cmVhbSgKLSAgICBUeXBlUmVz
b2x2ZXIqIHJlc29sdmVyLCBjb25zdCBzdHJpbmcmIHR5cGVfdXJsLAotICAgIGlvOjpaZXJvQ29w
eUlucHV0U3RyZWFtKiBiaW5hcnlfaW5wdXQsCi0gICAgaW86Olplcm9Db3B5T3V0cHV0U3RyZWFt
KiBqc29uX291dHB1dCkgewotICByZXR1cm4gQmluYXJ5VG9Kc29uU3RyZWFtKHJlc29sdmVyLCB0
eXBlX3VybCwgYmluYXJ5X2lucHV0LCBqc29uX291dHB1dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBKc29uT3B0aW9ucygpKTsKLX0KLQotTElCUFJPVE9CVUZfRVhQT1JUIHV0aWw6OlN0
YXR1cyBCaW5hcnlUb0pzb25TdHJpbmcoCi0gICAgVHlwZVJlc29sdmVyKiByZXNvbHZlciwKLSAg
ICBjb25zdCBzdHJpbmcmIHR5cGVfdXJsLAotICAgIGNvbnN0IHN0cmluZyYgYmluYXJ5X2lucHV0
LAotICAgIHN0cmluZyoganNvbl9vdXRwdXQsCi0gICAgY29uc3QgSnNvbk9wdGlvbnMmIG9wdGlv
bnMpOwotCi1pbmxpbmUgdXRpbDo6U3RhdHVzIEJpbmFyeVRvSnNvblN0cmluZyhUeXBlUmVzb2x2
ZXIqIHJlc29sdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdHJpbmcmIHR5cGVfdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmcmIGJpbmFyeV9pbnB1dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKiBqc29uX291dHB1dCkgewotICByZXR1cm4gQmlu
YXJ5VG9Kc29uU3RyaW5nKHJlc29sdmVyLCB0eXBlX3VybCwgYmluYXJ5X2lucHV0LCBqc29uX291
dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBKc29uT3B0aW9ucygpKTsKLX0KLQot
Ly8gQ29udmVydHMgSlNPTiBkYXRhIHRvIHByb3RvYnVmIGJpbmFyeSBmb3JtYXQuCi0vLyBUaGUg
Y29udmVyc2lvbiB3aWxsIGZhaWwgaWY6Ci0vLyAgIDEuIFR5cGVSZXNvbHZlciBmYWlscyB0byBy
ZXNvbHZlIGEgdHlwZS4KLS8vICAgMi4gaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gZm9ybWF0LCBv
ciBjb25mbGljdHMgd2l0aCB0aGUgdHlwZQotLy8gICAgICBpbmZvcm1hdGlvbiByZXR1cm5lZCBi
eSBUeXBlUmVzb2x2ZXIuCi0vLyAgIDMuIGlucHV0IGhhcyB1bmtub3duIGZpZWxkcy4KLXV0aWw6
OlN0YXR1cyBKc29uVG9CaW5hcnlTdHJlYW0oCi0gICAgVHlwZVJlc29sdmVyKiByZXNvbHZlciwK
LSAgICBjb25zdCBzdHJpbmcmIHR5cGVfdXJsLAotICAgIGlvOjpaZXJvQ29weUlucHV0U3RyZWFt
KiBqc29uX2lucHV0LAotICAgIGlvOjpaZXJvQ29weU91dHB1dFN0cmVhbSogYmluYXJ5X291dHB1
dCk7Ci0KLUxJQlBST1RPQlVGX0VYUE9SVCB1dGlsOjpTdGF0dXMgSnNvblRvQmluYXJ5U3RyaW5n
KAotICAgIFR5cGVSZXNvbHZlciogcmVzb2x2ZXIsCi0gICAgY29uc3Qgc3RyaW5nJiB0eXBlX3Vy
bCwKLSAgICBjb25zdCBzdHJpbmcmIGpzb25faW5wdXQsCi0gICAgc3RyaW5nKiBiaW5hcnlfb3V0
cHV0KTsKLQotbmFtZXNwYWNlIGludGVybmFsIHsKLS8vIEludGVybmFsIGhlbHBlciBjbGFzcy4g
UHV0IGluIHRoZSBoZWFkZXIgc28gd2UgY2FuIHdyaXRlIHVuaXQtdGVzdHMgZm9yIGl0LgotY2xh
c3MgTElCUFJPVE9CVUZfRVhQT1JUIFplcm9Db3B5U3RyZWFtQnl0ZVNpbmsgOiBwdWJsaWMgc3Ry
aW5nczo6Qnl0ZVNpbmsgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgWmVyb0NvcHlTdHJlYW1CeXRl
U2luayhpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0qIHN0cmVhbSkKLSAgICAgIDogc3RyZWFtXyhz
dHJlYW0pIHt9Ci0KLSAgdmlydHVhbCB2b2lkIEFwcGVuZChjb25zdCBjaGFyKiBieXRlcywgc2l6
ZV90IGxlbik7Ci0KLSBwcml2YXRlOgotICBpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0qIHN0cmVh
bV87Ci0KLSAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFplcm9Db3B5U3RyZWFt
Qnl0ZVNpbmspOwotfTsKLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi19ICAvLyBuYW1lc3Bh
Y2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFjZSBnb29n
bGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1VUSUxfSlNPTl9VVElMX0hfXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90
b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvanNvbl91dGlsX3Rlc3QuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWxfdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTRkM2NjOTgzZmUxMTAyYTk4YjdkZTViMzQ0NDJlYmE1NmZhNDAzNi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdXRpbC9qc29uX3V0aWxfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDMwOSArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi91dGlsL2pzb25fdXRpbC5oPgotCi0jaW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxz
dHJpbmc+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL2pzb25fZm9ybWF0X3Byb3RvMy5wYi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXIuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyX3V0aWwuaD4KLSNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1
ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1lc3BhY2UgewotCi11c2luZyBwcm90bzM6OkZPTzsK
LXVzaW5nIHByb3RvMzo6QkFSOwotdXNpbmcgcHJvdG8zOjpUZXN0TWVzc2FnZTsKLXVzaW5nIHBy
b3RvMzo6VGVzdE1hcDsKLQotc3RhdGljIGNvbnN0IGNoYXIga1R5cGVVcmxQcmVmaXhbXSA9ICJ0
eXBlLmdvb2dsZWFwaXMuY29tIjsKLQotc3RhdGljIHN0cmluZyBHZXRUeXBlVXJsKGNvbnN0IERl
c2NyaXB0b3IqIG1lc3NhZ2UpIHsKLSAgcmV0dXJuIHN0cmluZyhrVHlwZVVybFByZWZpeCkgKyAi
LyIgKyBtZXNzYWdlLT5mdWxsX25hbWUoKTsKLX0KLQotLy8gQXMgZnVuY3Rpb25zIGRlZmluZWQg
aW4ganNvbl91dGlsLmggYXJlIGp1c3QgdGhpbiB3cmFwcGVycyBhcm91bmQgdGhlCi0vLyBKU09O
IGNvbnZlcnNpb24gY29kZSBpbiAvL25ldC9wcm90bzIvdXRpbC9jb252ZXJ0ZXIsIGluIHRoaXMg
dGVzdCB3ZQotLy8gb25seSBjb3ZlciBzb21lIHZlcnkgYmFzaWMgY2FzZXMgdG8gbWFrZSBzdXJl
IHRoZSB3cmFwcGVycyBoYXZlIGZvcndhcmRlZAotLy8gcGFyYW1ldGVycyB0byB0aGUgdW5kZXJs
eWluZyBpbXBsZW1lbnRhdGlvbiBjb3JyZWN0bHkuIE1vcmUgZGV0YWlsZWQKLS8vIHRlc3RzIGFy
ZSBjb250YWluZWQgaW4gdGhlIC8vbmV0L3Byb3RvMi91dGlsL2NvbnZlcnRlciBkaXJlY3Rvcnku
Ci1jbGFzcyBKc29uVXRpbFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVk
OgotICBKc29uVXRpbFRlc3QoKSB7Ci0gICAgcmVzb2x2ZXJfLnJlc2V0KE5ld1R5cGVSZXNvbHZl
ckZvckRlc2NyaXB0b3JQb29sKAotICAgICAgICBrVHlwZVVybFByZWZpeCwgRGVzY3JpcHRvclBv
b2w6OmdlbmVyYXRlZF9wb29sKCkpKTsKLSAgfQotCi0gIHN0cmluZyBUb0pzb24oY29uc3QgTWVz
c2FnZSYgbWVzc2FnZSwgY29uc3QgSnNvbk9wdGlvbnMmIG9wdGlvbnMpIHsKLSAgICBzdHJpbmcg
cmVzdWx0OwotICAgIEdPT0dMRV9DSEVDS19PSyhCaW5hcnlUb0pzb25TdHJpbmcocmVzb2x2ZXJf
LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRUeXBlVXJsKG1lc3Nh
Z2UuR2V0RGVzY3JpcHRvcigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZS5TZXJpYWxpemVBc1N0cmluZygpLCAmcmVzdWx0LCBvcHRpb25zKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgfQotCi0gIGJvb2wgRnJvbUpzb24oY29uc3Qgc3RyaW5nJiBqc29uLCBNZXNz
YWdlKiBtZXNzYWdlKSB7Ci0gICAgc3RyaW5nIGJpbmFyeTsKLSAgICBpZiAoIUpzb25Ub0JpbmFy
eVN0cmluZyhyZXNvbHZlcl8uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0
VHlwZVVybChtZXNzYWdlLT5HZXREZXNjcmlwdG9yKCkpLCBqc29uLCAmYmluYXJ5KQotICAgICAg
ICAgICAgIC5vaygpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBt
ZXNzYWdlLT5QYXJzZUZyb21TdHJpbmcoYmluYXJ5KTsKLSAgfQotCi0gIGdvb2dsZTo6cHJvdG9i
dWY6OnNjb3BlZF9wdHI8VHlwZVJlc29sdmVyPiByZXNvbHZlcl87Ci19OwotCi1URVNUX0YoSnNv
blV0aWxUZXN0LCBUZXN0V2hpdGVzcGFjZXMpIHsKLSAgVGVzdE1lc3NhZ2UgbTsKLSAgbS5tdXRh
YmxlX21lc3NhZ2VfdmFsdWUoKTsKLQotICBKc29uT3B0aW9ucyBvcHRpb25zOwotICBFWFBFQ1Rf
RVEoIntcIm1lc3NhZ2VWYWx1ZVwiOnt9fSIsIFRvSnNvbihtLCBvcHRpb25zKSk7Ci0gIG9wdGlv
bnMuYWRkX3doaXRlc3BhY2UgPSB0cnVlOwotICBFWFBFQ1RfRVEoCi0gICAgICAie1xuIgotICAg
ICAgIiBcIm1lc3NhZ2VWYWx1ZVwiOiB7fVxuIgotICAgICAgIn1cbiIsCi0gICAgICBUb0pzb24o
bSwgb3B0aW9ucykpOwotfQotCi1URVNUX0YoSnNvblV0aWxUZXN0LCBUZXN0RGVmYXVsdFZhbHVl
cykgewotICBUZXN0TWVzc2FnZSBtOwotICBKc29uT3B0aW9ucyBvcHRpb25zOwotICBFWFBFQ1Rf
RVEoInt9IiwgVG9Kc29uKG0sIG9wdGlvbnMpKTsKLSAgb3B0aW9ucy5hbHdheXNfcHJpbnRfcHJp
bWl0aXZlX2ZpZWxkcyA9IHRydWU7Ci0gIEVYUEVDVF9FUSgKLSAgICAgICJ7XCJib29sVmFsdWVc
IjpmYWxzZSwiCi0gICAgICAiXCJpbnQzMlZhbHVlXCI6MCwiCi0gICAgICAiXCJpbnQ2NFZhbHVl
XCI6XCIwXCIsIgotICAgICAgIlwidWludDMyVmFsdWVcIjowLCIKLSAgICAgICJcInVpbnQ2NFZh
bHVlXCI6XCIwXCIsIgotICAgICAgIlwiZmxvYXRWYWx1ZVwiOjAsIgotICAgICAgIlwiZG91Ymxl
VmFsdWVcIjowLCIKLSAgICAgICJcInN0cmluZ1ZhbHVlXCI6XCJcIiwiCi0gICAgICAiXCJieXRl
c1ZhbHVlXCI6XCJcIiwiCi0gICAgICAiXCJlbnVtVmFsdWVcIjpcIkZPT1wiLCIKLSAgICAgICJc
InJlcGVhdGVkQm9vbFZhbHVlXCI6W10sIgotICAgICAgIlwicmVwZWF0ZWRJbnQzMlZhbHVlXCI6
W10sIgotICAgICAgIlwicmVwZWF0ZWRJbnQ2NFZhbHVlXCI6W10sIgotICAgICAgIlwicmVwZWF0
ZWRVaW50MzJWYWx1ZVwiOltdLCIKLSAgICAgICJcInJlcGVhdGVkVWludDY0VmFsdWVcIjpbXSwi
Ci0gICAgICAiXCJyZXBlYXRlZEZsb2F0VmFsdWVcIjpbXSwiCi0gICAgICAiXCJyZXBlYXRlZERv
dWJsZVZhbHVlXCI6W10sIgotICAgICAgIlwicmVwZWF0ZWRTdHJpbmdWYWx1ZVwiOltdLCIKLSAg
ICAgICJcInJlcGVhdGVkQnl0ZXNWYWx1ZVwiOltdLCIKLSAgICAgICJcInJlcGVhdGVkRW51bVZh
bHVlXCI6W10sIgotICAgICAgIlwicmVwZWF0ZWRNZXNzYWdlVmFsdWVcIjpbXSIKLSAgICAgICJ9
IiwKLSAgICAgIFRvSnNvbihtLCBvcHRpb25zKSk7Ci19Ci0KLVRFU1RfRihKc29uVXRpbFRlc3Qs
IFBhcnNlTWVzc2FnZSkgewotICAvLyBTb21lIHJhbmRvbSBtZXNzYWdlIGJ1dCBnb29kIGVub3Vn
aCB0byB2ZXJpZnkgdGhhdCB0aGUgcGFyc2luZyB3YXJwcGVyCi0gIC8vIGZ1bmN0aW9ucyBhcmUg
d29ya2luZyBwcm9wZXJseS4KLSAgc3RyaW5nIGlucHV0ID0KLSAgICAgICJ7XG4iCi0gICAgICAi
ICBcImludDMyVmFsdWVcIjogMTAyNCxcbiIKLSAgICAgICIgIFwicmVwZWF0ZWRJbnQzMlZhbHVl
XCI6IFsxLCAyXSxcbiIKLSAgICAgICIgIFwibWVzc2FnZVZhbHVlXCI6IHtcbiIKLSAgICAgICIg
ICAgXCJ2YWx1ZVwiOiAyMDQ4XG4iCi0gICAgICAiICB9LFxuIgotICAgICAgIiAgXCJyZXBlYXRl
ZE1lc3NhZ2VWYWx1ZVwiOiBbXG4iCi0gICAgICAiICAgIHtcInZhbHVlXCI6IDQwfSwge1widmFs
dWVcIjogOTZ9XG4iCi0gICAgICAiICBdXG4iCi0gICAgICAifVxuIjsKLSAgVGVzdE1lc3NhZ2Ug
bTsKLSAgQVNTRVJUX1RSVUUoRnJvbUpzb24oaW5wdXQsICZtKSk7Ci0gIEVYUEVDVF9FUSgxMDI0
LCBtLmludDMyX3ZhbHVlKCkpOwotICBBU1NFUlRfRVEoMiwgbS5yZXBlYXRlZF9pbnQzMl92YWx1
ZV9zaXplKCkpOwotICBFWFBFQ1RfRVEoMSwgbS5yZXBlYXRlZF9pbnQzMl92YWx1ZSgwKSk7Ci0g
IEVYUEVDVF9FUSgyLCBtLnJlcGVhdGVkX2ludDMyX3ZhbHVlKDEpKTsKLSAgRVhQRUNUX0VRKDIw
NDgsIG0ubWVzc2FnZV92YWx1ZSgpLnZhbHVlKCkpOwotICBBU1NFUlRfRVEoMiwgbS5yZXBlYXRl
ZF9tZXNzYWdlX3ZhbHVlX3NpemUoKSk7Ci0gIEVYUEVDVF9FUSg0MCwgbS5yZXBlYXRlZF9tZXNz
YWdlX3ZhbHVlKDApLnZhbHVlKCkpOwotICBFWFBFQ1RfRVEoOTYsIG0ucmVwZWF0ZWRfbWVzc2Fn
ZV92YWx1ZSgxKS52YWx1ZSgpKTsKLX0KLQotVEVTVF9GKEpzb25VdGlsVGVzdCwgUGFyc2VNYXAp
IHsKLSAgVGVzdE1hcCBtZXNzYWdlOwotICAoKm1lc3NhZ2UubXV0YWJsZV9zdHJpbmdfbWFwKCkp
WyJoZWxsbyJdID0gMTIzNDsKLSAgSnNvbk9wdGlvbnMgb3B0aW9uczsKLSAgRVhQRUNUX0VRKCJ7
XCJzdHJpbmdNYXBcIjp7XCJoZWxsb1wiOjEyMzR9fSIsIFRvSnNvbihtZXNzYWdlLCBvcHRpb25z
KSk7Ci0gIFRlc3RNYXAgb3RoZXI7Ci0gIEFTU0VSVF9UUlVFKEZyb21Kc29uKFRvSnNvbihtZXNz
YWdlLCBvcHRpb25zKSwgJm90aGVyKSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlLkRlYnVnU3RyaW5n
KCksIG90aGVyLkRlYnVnU3RyaW5nKCkpOwotfQotCi1URVNUX0YoSnNvblV0aWxUZXN0LCBUZXN0
UGFyc2VFcnJvcnMpIHsKLSAgVGVzdE1lc3NhZ2UgbTsKLSAgSnNvbk9wdGlvbnMgb3B0aW9uczsK
LSAgLy8gUGFyc2luZyBzaG91bGQgZmFpbCBpZiB0aGUgZmllbGQgbmFtZSBjYW4gbm90IGJlIHJl
Y29nbml6ZWQuCi0gIEVYUEVDVF9GQUxTRShGcm9tSnNvbigie1widW5rbm93bk5hbWVcIjowfSIs
ICZtKSk7Ci0gIC8vIFBhcnNpbmcgc2hvdWxkIGZhaWwgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQu
Ci0gIEVYUEVDVF9GQUxTRShGcm9tSnNvbigie1wiaW50MzJWYWx1ZVwiOjIxNDc0ODM2NDh9Iiwg
Jm0pKTsKLX0KLQotdHlwZWRlZiBwYWlyPGNoYXIqLCBpbnQ+IFNlZ21lbnQ7Ci0vLyBBIFplcm9D
b3B5T3V0cHV0U3RyZWFtIHRoYXQgd3JpdGVzIHRvIG11bHRpcGxlIGJ1ZmZlcnMuCi1jbGFzcyBT
ZWdtZW50ZWRaZXJvQ29weU91dHB1dFN0cmVhbSA6IHB1YmxpYyBpbzo6WmVyb0NvcHlPdXRwdXRT
dHJlYW0gewotIHB1YmxpYzoKLSAgZXhwbGljaXQgU2VnbWVudGVkWmVyb0NvcHlPdXRwdXRTdHJl
YW0obGlzdDxTZWdtZW50PiBzZWdtZW50cykKLSAgICAgIDogc2VnbWVudHNfKHNlZ21lbnRzKSwg
bGFzdF9zZWdtZW50XyhzdGF0aWNfY2FzdDxjaGFyKj4oTlVMTCksIDApLCBieXRlX2NvdW50Xygw
KSB7fQotCi0gIHZpcnR1YWwgYm9vbCBOZXh0KHZvaWQqKiBidWZmZXIsIGludCogbGVuZ3RoKSB7
Ci0gICAgaWYgKHNlZ21lbnRzXy5lbXB0eSgpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIGxhc3Rfc2VnbWVudF8gPSBzZWdtZW50c18uZnJvbnQoKTsKLSAgICBzZWdtZW50c18u
cG9wX2Zyb250KCk7Ci0gICAgKmJ1ZmZlciA9IGxhc3Rfc2VnbWVudF8uZmlyc3Q7Ci0gICAgKmxl
bmd0aCA9IGxhc3Rfc2VnbWVudF8uc2Vjb25kOwotICAgIGJ5dGVfY291bnRfICs9ICpsZW5ndGg7
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgQmFja1VwKGludCBsZW5n
dGgpIHsKLSAgICBHT09HTEVfQ0hFQ0sobGVuZ3RoIDw9IGxhc3Rfc2VnbWVudF8uc2Vjb25kKTsK
LSAgICBzZWdtZW50c18ucHVzaF9mcm9udCgKLSAgICAgICAgU2VnbWVudChsYXN0X3NlZ21lbnRf
LmZpcnN0ICsgbGFzdF9zZWdtZW50Xy5zZWNvbmQgLSBsZW5ndGgsIGxlbmd0aCkpOwotICAgIGxh
c3Rfc2VnbWVudF8gPSBTZWdtZW50KGxhc3Rfc2VnbWVudF8uZmlyc3QsIGxhc3Rfc2VnbWVudF8u
c2Vjb25kIC0gbGVuZ3RoKTsKLSAgICBieXRlX2NvdW50XyAtPSBsZW5ndGg7Ci0gIH0KLQotICB2
aXJ0dWFsIGludDY0IEJ5dGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVfY291bnRfOyB9Ci0K
LSBwcml2YXRlOgotICBsaXN0PFNlZ21lbnQ+IHNlZ21lbnRzXzsKLSAgU2VnbWVudCBsYXN0X3Nl
Z21lbnRfOwotICBpbnQ2NCBieXRlX2NvdW50XzsKLX07Ci0KLS8vIFRoaXMgdGVzdCBzcGxpdHMg
dGhlIG91dHB1dCBidWZmZXIgYW5kIGFsc28gdGhlIGlucHV0IGRhdGEgaW50byBtdWx0aXBsZQot
Ly8gc2VnbWVudHMgYW5kIGNoZWNrcyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBaZXJvQ29w
eVN0cmVhbUJ5dGVTaW5rCi0vLyBoYW5kbGVzIGFsbCBwb3NzaWJsZSBjYXNlcyBjb3JyZWN0bHku
Ci1URVNUKFplcm9Db3B5U3RyZWFtQnl0ZVNpbmtUZXN0LCBUZXN0QWxsSW5wdXRPdXRwdXRQYXR0
ZXJucykgewotICBzdGF0aWMgY29uc3QgaW50IGtPdXRwdXRCdWZmZXJMZW5ndGggPSAxMDsKLSAg
Ly8gQW4gZXhoYXVzdGl2ZSB0ZXN0IHRha2VzIHRvbyBsb25nLCBza2lwIHNvbWUgY29tYmluYXRp
b25zIHRvIG1ha2UgdGhlIHRlc3QKLSAgLy8gcnVuIGZhc3Rlci4KLSAgc3RhdGljIGNvbnN0IGlu
dCBrU2tpcHBlZFBhdHRlcm5Db3VudCA9IDc7Ci0KLSAgY2hhciBidWZmZXJba091dHB1dEJ1ZmZl
ckxlbmd0aF07Ci0gIGZvciAoaW50IHNwbGl0X3BhdHRlcm4gPSAwOyBzcGxpdF9wYXR0ZXJuIDwg
KDEgPDwgKGtPdXRwdXRCdWZmZXJMZW5ndGggLSAxKSk7Ci0gICAgICAgc3BsaXRfcGF0dGVybiAr
PSBrU2tpcHBlZFBhdHRlcm5Db3VudCkgewotICAgIC8vIFNwbGl0IHRoZSBidWZmZXIgaW50byBz
bWFsbCBzZWdtZW50cyBhY2NvcmRpbmcgdG8gdGhlIHNwbGl0X3BhdHRlcm4uCi0gICAgbGlzdDxT
ZWdtZW50PiBzZWdtZW50czsKLSAgICBpbnQgc2VnbWVudF9zdGFydCA9IDA7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBrT3V0cHV0QnVmZmVyTGVuZ3RoIC0gMTsgKytpKSB7Ci0gICAgICBpZiAo
c3BsaXRfcGF0dGVybiAmICgxIDw8IGkpKSB7Ci0gICAgICAgIHNlZ21lbnRzLnB1c2hfYmFjaygK
LSAgICAgICAgICAgIFNlZ21lbnQoYnVmZmVyICsgc2VnbWVudF9zdGFydCwgaSAtIHNlZ21lbnRf
c3RhcnQgKyAxKSk7Ci0gICAgICAgIHNlZ21lbnRfc3RhcnQgPSBpICsgMTsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgc2VnbWVudHMucHVzaF9iYWNrKAotICAgICAgICBTZWdtZW50KGJ1ZmZlciArIHNl
Z21lbnRfc3RhcnQsIGtPdXRwdXRCdWZmZXJMZW5ndGggLSBzZWdtZW50X3N0YXJ0KSk7Ci0KLSAg
ICAvLyBXcml0ZSBleGFjdGx5IDEwIGJ5dGVzIHRocm91Z2ggdGhlIEJ5dGVTaW5rLgotICAgIHN0
cmluZyBpbnB1dF9kYXRhID0gIjAxMjM0NTY3ODkiOwotICAgIGZvciAoaW50IGlucHV0X3BhdHRl
cm4gPSAwOyBpbnB1dF9wYXR0ZXJuIDwgKDEgPDwgKGlucHV0X2RhdGEuc2l6ZSgpIC0gMSkpOwot
ICAgICAgICAgaW5wdXRfcGF0dGVybiArPSBrU2tpcHBlZFBhdHRlcm5Db3VudCkgewotICAgICAg
bWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOwotICAgICAgewotICAgICAgICBTZWdt
ZW50ZWRaZXJvQ29weU91dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKHNlZ21lbnRzKTsKLSAgICAg
ICAgaW50ZXJuYWw6Olplcm9Db3B5U3RyZWFtQnl0ZVNpbmsgYnl0ZV9zaW5rKCZvdXRwdXRfc3Ry
ZWFtKTsKLSAgICAgICAgaW50IHN0YXJ0ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCBpbnB1dF9kYXRhLmxlbmd0aCgpIC0gMTsgKytqKSB7Ci0gICAgICAgICAgaWYgKGlucHV0X3Bh
dHRlcm4gJiAoMSA8PCBqKSkgewotICAgICAgICAgICAgYnl0ZV9zaW5rLkFwcGVuZCgmaW5wdXRf
ZGF0YVtzdGFydF0sIGogLSBzdGFydCArIDEpOwotICAgICAgICAgICAgc3RhcnQgPSBqICsgMTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnl0ZV9zaW5rLkFwcGVuZCgmaW5wdXRf
ZGF0YVtzdGFydF0sIGlucHV0X2RhdGEubGVuZ3RoKCkgLSBzdGFydCk7Ci0gICAgICB9Ci0gICAg
ICBFWFBFQ1RfRVEoaW5wdXRfZGF0YSwgc3RyaW5nKGJ1ZmZlciwgaW5wdXRfZGF0YS5sZW5ndGgo
KSkpOwotICAgIH0KLQotICAgIC8vIFdyaXRlIG9ubHkgOSBieXRlcyB0aHJvdWdoIHRoZSBCeXRl
U2luay4KLSAgICBpbnB1dF9kYXRhID0gIjAxMjM0NTY3OCI7Ci0gICAgZm9yIChpbnQgaW5wdXRf
cGF0dGVybiA9IDA7IGlucHV0X3BhdHRlcm4gPCAoMSA8PCAoaW5wdXRfZGF0YS5zaXplKCkgLSAx
KSk7Ci0gICAgICAgICBpbnB1dF9wYXR0ZXJuICs9IGtTa2lwcGVkUGF0dGVybkNvdW50KSB7Ci0g
ICAgICBtZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICB7Ci0gICAgICAg
IFNlZ21lbnRlZFplcm9Db3B5T3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0oc2VnbWVudHMpOwot
ICAgICAgICBpbnRlcm5hbDo6WmVyb0NvcHlTdHJlYW1CeXRlU2luayBieXRlX3NpbmsoJm91dHB1
dF9zdHJlYW0pOwotICAgICAgICBpbnQgc3RhcnQgPSAwOwotICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IGlucHV0X2RhdGEubGVuZ3RoKCkgLSAxOyArK2opIHsKLSAgICAgICAgICBpZiAoaW5w
dXRfcGF0dGVybiAmICgxIDw8IGopKSB7Ci0gICAgICAgICAgICBieXRlX3NpbmsuQXBwZW5kKCZp
bnB1dF9kYXRhW3N0YXJ0XSwgaiAtIHN0YXJ0ICsgMSk7Ci0gICAgICAgICAgICBzdGFydCA9IGog
KyAxOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBieXRlX3NpbmsuQXBwZW5kKCZp
bnB1dF9kYXRhW3N0YXJ0XSwgaW5wdXRfZGF0YS5sZW5ndGgoKSAtIHN0YXJ0KTsKLSAgICAgIH0K
LSAgICAgIEVYUEVDVF9FUShpbnB1dF9kYXRhLCBzdHJpbmcoYnVmZmVyLCBpbnB1dF9kYXRhLmxl
bmd0aCgpKSk7Ci0gICAgICBFWFBFQ1RfRVEoMCwgYnVmZmVyW2lucHV0X2RhdGEubGVuZ3RoKCld
KTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSAxMSBieXRlcyB0aHJvdWdoIHRoZSBCeXRlU2luay4g
VGhlIGV4dHJhIGJ5dGUgd2lsbCBqdXN0Ci0gICAgLy8gYmUgaWdub3JlZC4KLSAgICBpbnB1dF9k
YXRhID0gIjAxMjM0NTY3ODlBIjsKLSAgICBmb3IgKGludCBpbnB1dF9wYXR0ZXJuID0gMDsgaW5w
dXRfcGF0dGVybiA8ICgxIDw8IChpbnB1dF9kYXRhLnNpemUoKSAtIDEpKTsKLSAgICAgICAgIGlu
cHV0X3BhdHRlcm4gKz0ga1NraXBwZWRQYXR0ZXJuQ291bnQpIHsKLSAgICAgIG1lbXNldChidWZm
ZXIsIDAsIHNpemVvZihidWZmZXIpKTsKLSAgICAgIHsKLSAgICAgICAgU2VnbWVudGVkWmVyb0Nv
cHlPdXRwdXRTdHJlYW0gb3V0cHV0X3N0cmVhbShzZWdtZW50cyk7Ci0gICAgICAgIGludGVybmFs
OjpaZXJvQ29weVN0cmVhbUJ5dGVTaW5rIGJ5dGVfc2luaygmb3V0cHV0X3N0cmVhbSk7Ci0gICAg
ICAgIGludCBzdGFydCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaW5wdXRfZGF0
YS5sZW5ndGgoKSAtIDE7ICsraikgewotICAgICAgICAgIGlmIChpbnB1dF9wYXR0ZXJuICYgKDEg
PDwgaikpIHsKLSAgICAgICAgICAgIGJ5dGVfc2luay5BcHBlbmQoJmlucHV0X2RhdGFbc3RhcnRd
LCBqIC0gc3RhcnQgKyAxKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gaiArIDE7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGJ5dGVfc2luay5BcHBlbmQoJmlucHV0X2RhdGFbc3RhcnRd
LCBpbnB1dF9kYXRhLmxlbmd0aCgpIC0gc3RhcnQpOwotICAgICAgfQotICAgICAgRVhQRUNUX0VR
KGlucHV0X2RhdGEuc3Vic3RyKDAsIGtPdXRwdXRCdWZmZXJMZW5ndGgpLAotICAgICAgICAgICAg
ICAgIHN0cmluZyhidWZmZXIsIGtPdXRwdXRCdWZmZXJMZW5ndGgpKTsKLSAgICB9Ci0gIH0KLX0K
LQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNl
IHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUv
cHJvdG9idWYvdXRpbC9tZXNzYWdlX2RpZmZlcmVuY2VyLmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L3V0aWwvbWVzc2FnZV9kaWZmZXJlbmNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZmU4MTE5YmYzZDU0ZDk3MmZhNzEzMWI3NTQ3ZDIyMTcyNTZkZmQ4MS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRp
bC9tZXNzYWdlX2RpZmZlcmVuY2VyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTY4OSArMCwwIEBA
Ci0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQK
LS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
aHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBqc2Nob3Jy
QGdvb2dsZS5jb20gKEpvc2VwaCBTY2hvcnIpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9j
b2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5k
IG90aGVycy4KLS8vCi0vLyBUaGlzIGZpbGUgZGVmaW5lcyBzdGF0aWMgbWV0aG9kcyBhbmQgY2xh
c3NlcyBmb3IgY29tcGFyaW5nIFByb3RvY29sCi0vLyBNZXNzYWdlcyAoc2VlIC8vZ29vZ2xlL3By
b3RvYnVmL3V0aWwvbWVzc2FnZV9kaWZmZXJlbmNlci5oIGZvciBtb3JlCi0vLyBpbmZvcm1hdGlv
bikuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9tZXNzYWdlX2RpZmZlcmVuY2Vy
Lmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2lmbmRlZiBf
U0hBUkVEX1BUUl9ICi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIu
aD4KLSNlbmRpZgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvY2FsbGJhY2suaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29t
bW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncHJpbnRmLmg+Ci0jaW5jbHVkZSA8Z29v
Z2xlL3Byb3RvYnVmL2FueS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9wcmludGVy
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW0uaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmg+Ci0jaW5j
bHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGls
L2ZpZWxkX2NvbXBhcmF0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3Ry
dXRpbC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLW5h
bWVzcGFjZSB1dGlsIHsKLQotLy8gV2hlbiBjb21wYXJpbmcgYSByZXBlYXRlZCBmaWVsZCBhcyBt
YXAsIE11bHRpcGxlRmllbGRNYXBLZXlDb21wYXJhdG9yIGNhbgotLy8gYmUgdXNlZCB0byBzcGVj
aWZ5IG11bHRpcGxlIGZpZWxkcyBhcyBrZXkgZm9yIGtleSBjb21wYXJpc29uLgotLy8gVHdvIGVs
ZW1lbnRzIG9mIGEgcmVwZWF0ZWQgZmllbGQgd2lsbCBiZSByZWdhcmRlZCBhcyBoYXZpbmcgdGhl
IHNhbWUga2V5Ci0vLyBpZmYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlIGZvciBldmVyeSBzcGVj
aWZpZWQga2V5IGZpZWxkLgotLy8gTm90ZSB0aGF0IHlvdSBjYW4gYWxzbyBzcGVjaWZ5IG9ubHkg
b25lIGZpZWxkIGFzIGtleS4KLWNsYXNzIE1lc3NhZ2VEaWZmZXJlbmNlcjo6TXVsdGlwbGVGaWVs
ZHNNYXBLZXlDb21wYXJhdG9yCi0gICAgOiBwdWJsaWMgTWVzc2FnZURpZmZlcmVuY2VyOjpNYXBL
ZXlDb21wYXJhdG9yIHsKLSBwdWJsaWM6Ci0gIE11bHRpcGxlRmllbGRzTWFwS2V5Q29tcGFyYXRv
cigKLSAgICAgIE1lc3NhZ2VEaWZmZXJlbmNlciogbWVzc2FnZV9kaWZmZXJlbmNlciwKLSAgICAg
IGNvbnN0IHZlY3Rvcjx2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gPiYga2V5X2ZpZWxk
X3BhdGhzKQotICAgICAgICA6IG1lc3NhZ2VfZGlmZmVyZW5jZXJfKG1lc3NhZ2VfZGlmZmVyZW5j
ZXIpLAotICAgICAgICAgIGtleV9maWVsZF9wYXRoc18oa2V5X2ZpZWxkX3BhdGhzKSB7Ci0gICAg
R09PR0xFX0NIRUNLKCFrZXlfZmllbGRfcGF0aHNfLmVtcHR5KCkpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwga2V5X2ZpZWxkX3BhdGhzXy5zaXplKCk7ICsraSkgewotICAgICAgR09PR0xFX0NI
RUNLKCFrZXlfZmllbGRfcGF0aHNfW2ldLmVtcHR5KCkpOwotICAgIH0KLSAgfQotICBNdWx0aXBs
ZUZpZWxkc01hcEtleUNvbXBhcmF0b3IoCi0gICAgICBNZXNzYWdlRGlmZmVyZW5jZXIqIG1lc3Nh
Z2VfZGlmZmVyZW5jZXIsCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGtleSkKLSAgICAg
ICAgOiBtZXNzYWdlX2RpZmZlcmVuY2VyXyhtZXNzYWdlX2RpZmZlcmVuY2VyKSB7Ci0gICAgdmVj
dG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGtleV9maWVsZF9wYXRoOwotICAgIGtleV9maWVs
ZF9wYXRoLnB1c2hfYmFjayhrZXkpOwotICAgIGtleV9maWVsZF9wYXRoc18ucHVzaF9iYWNrKGtl
eV9maWVsZF9wYXRoKTsKLSAgfQotICB2aXJ0dWFsIGJvb2wgSXNNYXRjaCgKLSAgICAgIGNvbnN0
IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0gICAg
ICBjb25zdCB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4mIHBhcmVudF9maWVsZHMpIGNvbnN0IHsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGtleV9maWVsZF9wYXRoc18uc2l6ZSgpOyArK2kpIHsKLSAg
ICAgIGlmICghSXNNYXRjaEludGVybmFsKG1lc3NhZ2UxLCBtZXNzYWdlMiwgcGFyZW50X2ZpZWxk
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9maWVsZF9wYXRoc19baV0sIDApKSB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci0gIH0KLSBwcml2YXRlOgotICBib29sIElzTWF0Y2hJbnRlcm5hbCgKLSAgICAgIGNvbnN0IE1l
c3NhZ2UmIG1lc3NhZ2UxLAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0gICAgICBj
b25zdCB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4mIHBhcmVudF9maWVsZHMsCi0gICAgICBjb25zdCB2
ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4mIGtleV9maWVsZF9wYXRoLAotICAgICAgaW50
IHBhdGhfaW5kZXgpIGNvbnN0IHsKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkID0g
a2V5X2ZpZWxkX3BhdGhbcGF0aF9pbmRleF07Ci0gICAgdmVjdG9yPFNwZWNpZmljRmllbGQ+IGN1
cnJlbnRfcGFyZW50X2ZpZWxkcyhwYXJlbnRfZmllbGRzKTsKLSAgICBpZiAocGF0aF9pbmRleCA9
PSBrZXlfZmllbGRfcGF0aC5zaXplKCkgLSAxKSB7Ci0gICAgICBpZiAoZmllbGQtPmlzX3JlcGVh
dGVkKCkpIHsKLSAgICAgICAgaWYgKCFtZXNzYWdlX2RpZmZlcmVuY2VyXy0+Q29tcGFyZVJlcGVh
dGVkRmllbGQoCi0gICAgICAgICAgICBtZXNzYWdlMSwgbWVzc2FnZTIsIGZpZWxkLCAmY3VycmVu
dF9wYXJlbnRfZmllbGRzKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtZXNzYWdlX2RpZmZlcmVuY2VyXy0+Q29tcGFy
ZUZpZWxkVmFsdWVVc2luZ1BhcmVudEZpZWxkcygKLSAgICAgICAgICAgIG1lc3NhZ2UxLCBtZXNz
YWdlMiwgZmllbGQsIC0xLCAtMSwgJmN1cnJlbnRfcGFyZW50X2ZpZWxkcykpIHsKLSAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBjb25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uMSA9IG1lc3Nh
Z2UxLkdldFJlZmxlY3Rpb24oKTsKLSAgICAgIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24y
ID0gbWVzc2FnZTIuR2V0UmVmbGVjdGlvbigpOwotICAgICAgYm9vbCBoYXNfZmllbGQxID0gcmVm
bGVjdGlvbjEtPkhhc0ZpZWxkKG1lc3NhZ2UxLCBmaWVsZCk7Ci0gICAgICBib29sIGhhc19maWVs
ZDIgPSByZWZsZWN0aW9uMi0+SGFzRmllbGQobWVzc2FnZTIsIGZpZWxkKTsKLSAgICAgIGlmICgh
aGFzX2ZpZWxkMSAmJiAhaGFzX2ZpZWxkMikgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
IH0KLSAgICAgIGlmIChoYXNfZmllbGQxICE9IGhhc19maWVsZDIpIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgfQotICAgICAgU3BlY2lmaWNGaWVsZCBzcGVjaWZpY19maWVsZDsKLSAg
ICAgIHNwZWNpZmljX2ZpZWxkLmZpZWxkID0gZmllbGQ7Ci0gICAgICBjdXJyZW50X3BhcmVudF9m
aWVsZHMucHVzaF9iYWNrKHNwZWNpZmljX2ZpZWxkKTsKLSAgICAgIHJldHVybiBJc01hdGNoSW50
ZXJuYWwoCi0gICAgICAgICAgcmVmbGVjdGlvbjEtPkdldE1lc3NhZ2UobWVzc2FnZTEsIGZpZWxk
KSwKLSAgICAgICAgICByZWZsZWN0aW9uMi0+R2V0TWVzc2FnZShtZXNzYWdlMiwgZmllbGQpLAot
ICAgICAgICAgIGN1cnJlbnRfcGFyZW50X2ZpZWxkcywKLSAgICAgICAgICBrZXlfZmllbGRfcGF0
aCwKLSAgICAgICAgICBwYXRoX2luZGV4ICsgMSk7Ci0gICAgfQotICB9Ci0gIE1lc3NhZ2VEaWZm
ZXJlbmNlciogbWVzc2FnZV9kaWZmZXJlbmNlcl87Ci0gIHZlY3Rvcjx2ZWN0b3I8Y29uc3QgRmll
bGREZXNjcmlwdG9yKj4gPiBrZXlfZmllbGRfcGF0aHNfOwotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoTXVsdGlwbGVGaWVsZHNNYXBLZXlDb21wYXJhdG9yKTsKLX07Ci0KLWJv
b2wgTWVzc2FnZURpZmZlcmVuY2VyOjpFcXVhbHMoY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyKSB7
Ci0gIE1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJlbmNlcjsKLQotICByZXR1cm4gZGlmZmVyZW5j
ZXIuQ29tcGFyZShtZXNzYWdlMSwgbWVzc2FnZTIpOwotfQotCi1ib29sIE1lc3NhZ2VEaWZmZXJl
bmNlcjo6RXF1aXZhbGVudChjb25zdCBNZXNzYWdlJiBtZXNzYWdlMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyKSB7Ci0gIE1lc3Nh
Z2VEaWZmZXJlbmNlciBkaWZmZXJlbmNlcjsKLSAgZGlmZmVyZW5jZXIuc2V0X21lc3NhZ2VfZmll
bGRfY29tcGFyaXNvbihNZXNzYWdlRGlmZmVyZW5jZXI6OkVRVUlWQUxFTlQpOwotCi0gIHJldHVy
biBkaWZmZXJlbmNlci5Db21wYXJlKG1lc3NhZ2UxLCBtZXNzYWdlMik7Ci19Ci0KLWJvb2wgTWVz
c2FnZURpZmZlcmVuY2VyOjpBcHByb3hpbWF0ZWx5RXF1YWxzKGNvbnN0IE1lc3NhZ2UmIG1lc3Nh
Z2UxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TWVzc2FnZSYgbWVzc2FnZTIpIHsKLSAgTWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwot
ICBkaWZmZXJlbmNlci5zZXRfZmxvYXRfY29tcGFyaXNvbigKLSAgICAgIE1lc3NhZ2VEaWZmZXJl
bmNlcjo6QVBQUk9YSU1BVEUpOwotCi0gIHJldHVybiBkaWZmZXJlbmNlci5Db21wYXJlKG1lc3Nh
Z2UxLCBtZXNzYWdlMik7Ci19Ci0KLWJvb2wgTWVzc2FnZURpZmZlcmVuY2VyOjpBcHByb3hpbWF0
ZWx5RXF1aXZhbGVudChjb25zdCBNZXNzYWdlJiBtZXNzYWdlMSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMikg
ewotICBNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2VyLnNldF9t
ZXNzYWdlX2ZpZWxkX2NvbXBhcmlzb24oTWVzc2FnZURpZmZlcmVuY2VyOjpFUVVJVkFMRU5UKTsK
LSAgZGlmZmVyZW5jZXIuc2V0X2Zsb2F0X2NvbXBhcmlzb24oTWVzc2FnZURpZmZlcmVuY2VyOjpB
UFBST1hJTUFURSk7Ci0KLSAgcmV0dXJuIGRpZmZlcmVuY2VyLkNvbXBhcmUobWVzc2FnZTEsIG1l
c3NhZ2UyKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU1lc3NhZ2VEaWZmZXJlbmNl
cjo6TWVzc2FnZURpZmZlcmVuY2VyKCkKLSAgICA6IHJlcG9ydGVyXyhOVUxMKSwKLSAgICAgIGZp
ZWxkX2NvbXBhcmF0b3JfKE5VTEwpLAotICAgICAgbWVzc2FnZV9maWVsZF9jb21wYXJpc29uXyhF
UVVBTCksCi0gICAgICBzY29wZV8oRlVMTCksCi0gICAgICByZXBlYXRlZF9maWVsZF9jb21wYXJp
c29uXyhBU19MSVNUKSwKLSAgICAgIHJlcG9ydF9tYXRjaGVzXyhmYWxzZSksCi0gICAgICBvdXRw
dXRfc3RyaW5nXyhOVUxMKSB7IH0KLQotTWVzc2FnZURpZmZlcmVuY2VyOjp+TWVzc2FnZURpZmZl
cmVuY2VyKCkgewotICBmb3IgKGludCBpID0gMDsgaSA8IG93bmVkX2tleV9jb21wYXJhdG9yc18u
c2l6ZSgpOyArK2kpIHsKLSAgICBkZWxldGUgb3duZWRfa2V5X2NvbXBhcmF0b3JzX1tpXTsKLSAg
fQotICBmb3IgKGludCBpID0gMDsgaSA8IGlnbm9yZV9jcml0ZXJpYV8uc2l6ZSgpOyArK2kpIHsK
LSAgICBkZWxldGUgaWdub3JlX2NyaXRlcmlhX1tpXTsKLSAgfQotfQotCi12b2lkIE1lc3NhZ2VE
aWZmZXJlbmNlcjo6c2V0X2ZpZWxkX2NvbXBhcmF0b3IoRmllbGRDb21wYXJhdG9yKiBjb21wYXJh
dG9yKSB7Ci0gIEdPT0dMRV9DSEVDSyhjb21wYXJhdG9yKSA8PCAiRmllbGQgY29tcGFyYXRvciBj
YW4ndCBiZSBOVUxMLiI7Ci0gIGZpZWxkX2NvbXBhcmF0b3JfID0gY29tcGFyYXRvcjsKLX0KLQot
dm9pZCBNZXNzYWdlRGlmZmVyZW5jZXI6OnNldF9tZXNzYWdlX2ZpZWxkX2NvbXBhcmlzb24oCi0g
ICAgTWVzc2FnZUZpZWxkQ29tcGFyaXNvbiBjb21wYXJpc29uKSB7Ci0gIG1lc3NhZ2VfZmllbGRf
Y29tcGFyaXNvbl8gPSBjb21wYXJpc29uOwotfQotCi12b2lkIE1lc3NhZ2VEaWZmZXJlbmNlcjo6
c2V0X3Njb3BlKFNjb3BlIHNjb3BlKSB7Ci0gIHNjb3BlXyA9IHNjb3BlOwotfQotCi1NZXNzYWdl
RGlmZmVyZW5jZXI6OlNjb3BlIE1lc3NhZ2VEaWZmZXJlbmNlcjo6c2NvcGUoKSB7Ci0gIHJldHVy
biBzY29wZV87Ci19Ci0KLXZvaWQgTWVzc2FnZURpZmZlcmVuY2VyOjpzZXRfZmxvYXRfY29tcGFy
aXNvbihGbG9hdENvbXBhcmlzb24gY29tcGFyaXNvbikgewotICBkZWZhdWx0X2ZpZWxkX2NvbXBh
cmF0b3JfLnNldF9mbG9hdF9jb21wYXJpc29uKAotICAgICAgY29tcGFyaXNvbiA9PSBFWEFDVCA/
Ci0gICAgICBEZWZhdWx0RmllbGRDb21wYXJhdG9yOjpFWEFDVCA6IERlZmF1bHRGaWVsZENvbXBh
cmF0b3I6OkFQUFJPWElNQVRFKTsKLX0KLQotdm9pZCBNZXNzYWdlRGlmZmVyZW5jZXI6OnNldF9y
ZXBlYXRlZF9maWVsZF9jb21wYXJpc29uKAotICAgIFJlcGVhdGVkRmllbGRDb21wYXJpc29uIGNv
bXBhcmlzb24pIHsKLSAgcmVwZWF0ZWRfZmllbGRfY29tcGFyaXNvbl8gPSBjb21wYXJpc29uOwot
fQotCi12b2lkIE1lc3NhZ2VEaWZmZXJlbmNlcjo6VHJlYXRBc1NldChjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZpZWxkKSB7Ci0gIEdPT0dMRV9DSEVDSyhmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgPDwg
IkZpZWxkIG11c3QgYmUgcmVwZWF0ZWQ6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8PCBmaWVsZC0+ZnVsbF9uYW1lKCk7Ci0gIGNvbnN0IE1hcEtleUNvbXBhcmF0b3IqIGtleV9j
b21wYXJhdG9yID0gR2V0TWFwS2V5Q29tcGFyYXRvcihmaWVsZCk7Ci0gIEdPT0dMRV9DSEVDSyhr
ZXlfY29tcGFyYXRvciA9PSBOVUxMKQotICAgICAgPDwgIkNhbm5vdCB0cmVhdCB0aGlzIHJlcGVh
dGVkIGZpZWxkIGFzIGJvdGggTWFwIGFuZCBTZXQgZm9yIgotICAgICAgPDwgIiBjb21wYXJpc29u
LiAgRmllbGQgbmFtZSBpczogIiA8PCBmaWVsZC0+ZnVsbF9uYW1lKCk7Ci0gIEdPT0dMRV9DSEVD
SyhsaXN0X2ZpZWxkc18uZmluZChmaWVsZCkgPT0gbGlzdF9maWVsZHNfLmVuZCgpKQotICAgICAg
PDwgIkNhbm5vdCB0cmVhdCB0aGUgc2FtZSBmaWVsZCBhcyBib3RoIFNFVCBhbmQgTElTVC4gRmll
bGQgbmFtZSBpczogIgotICAgICAgPDwgZmllbGQtPmZ1bGxfbmFtZSgpOwotICBzZXRfZmllbGRz
Xy5pbnNlcnQoZmllbGQpOwotfQotCi12b2lkIE1lc3NhZ2VEaWZmZXJlbmNlcjo6VHJlYXRBc0xp
c3QoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBHT09HTEVfQ0hFQ0soZmllbGQt
PmlzX3JlcGVhdGVkKCkpIDw8ICJGaWVsZCBtdXN0IGJlIHJlcGVhdGVkOiAiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8PCBmaWVsZC0+ZnVsbF9uYW1lKCk7Ci0gIGNvbnN0IE1hcEtl
eUNvbXBhcmF0b3IqIGtleV9jb21wYXJhdG9yID0gR2V0TWFwS2V5Q29tcGFyYXRvcihmaWVsZCk7
Ci0gIEdPT0dMRV9DSEVDSyhrZXlfY29tcGFyYXRvciA9PSBOVUxMKQotICAgICAgPDwgIkNhbm5v
dCB0cmVhdCB0aGlzIHJlcGVhdGVkIGZpZWxkIGFzIGJvdGggTWFwIGFuZCBTZXQgZm9yIgotICAg
ICAgPDwgIiBjb21wYXJpc29uLiAgRmllbGQgbmFtZSBpczogIiA8PCBmaWVsZC0+ZnVsbF9uYW1l
KCk7Ci0gIEdPT0dMRV9DSEVDSyhzZXRfZmllbGRzXy5maW5kKGZpZWxkKSA9PSBzZXRfZmllbGRz
Xy5lbmQoKSkKLSAgICAgIDw8ICJDYW5ub3QgdHJlYXQgdGhlIHNhbWUgZmllbGQgYXMgYm90aCBT
RVQgYW5kIExJU1QuIEZpZWxkIG5hbWUgaXM6ICIKLSAgICAgIDw8IGZpZWxkLT5mdWxsX25hbWUo
KTsKLSAgbGlzdF9maWVsZHNfLmluc2VydChmaWVsZCk7Ci19Ci0KLXZvaWQgTWVzc2FnZURpZmZl
cmVuY2VyOjpUcmVhdEFzTWFwKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGtleSkg
ewotICBHT09HTEVfQ0hFQ0soZmllbGQtPmlzX3JlcGVhdGVkKCkpIDw8ICJGaWVsZCBtdXN0IGJl
IHJlcGVhdGVkOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmllbGQtPmZ1
bGxfbmFtZSgpOwotICBHT09HTEVfQ0hFQ0tfRVEoRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01F
U1NBR0UsIGZpZWxkLT5jcHBfdHlwZSgpKQotICAgICAgPDwgIkZpZWxkIGhhcyB0byBiZSBtZXNz
YWdlIHR5cGUuICBGaWVsZCBuYW1lIGlzOiAiCi0gICAgICA8PCBmaWVsZC0+ZnVsbF9uYW1lKCk7
Ci0gIEdPT0dMRV9DSEVDSyhrZXktPmNvbnRhaW5pbmdfdHlwZSgpID09IGZpZWxkLT5tZXNzYWdl
X3R5cGUoKSkKLSAgICAgIDw8IGtleS0+ZnVsbF9uYW1lKCkKLSAgICAgIDw8ICIgbXVzdCBiZSBh
IGRpcmVjdCBzdWJmaWVsZCB3aXRoaW4gdGhlIHJlcGVhdGVkIGZpZWxkICIKLSAgICAgIDw8IGZp
ZWxkLT5mdWxsX25hbWUoKSA8PCAiLCBub3QgIiA8PCBrZXktPmNvbnRhaW5pbmdfdHlwZSgpLT5m
dWxsX25hbWUoKTsKLSAgR09PR0xFX0NIRUNLKHNldF9maWVsZHNfLmZpbmQoZmllbGQpID09IHNl
dF9maWVsZHNfLmVuZCgpKQotICAgICAgPDwgIkNhbm5vdCB0cmVhdCB0aGlzIHJlcGVhdGVkIGZp
ZWxkIGFzIGJvdGggTWFwIGFuZCBTZXQgZm9yICIKLSAgICAgIDw8ICJjb21wYXJpc29uLiI7Ci0g
IEdPT0dMRV9DSEVDSyhsaXN0X2ZpZWxkc18uZmluZChmaWVsZCkgPT0gbGlzdF9maWVsZHNfLmVu
ZCgpKQotICAgICAgPDwgIkNhbm5vdCB0cmVhdCB0aGlzIHJlcGVhdGVkIGZpZWxkIGFzIGJvdGgg
TWFwIGFuZCBMaXN0IGZvciAiCi0gICAgICA8PCAiY29tcGFyaXNvbi4iOwotICBNYXBLZXlDb21w
YXJhdG9yKiBrZXlfY29tcGFyYXRvciA9Ci0gICAgICBuZXcgTXVsdGlwbGVGaWVsZHNNYXBLZXlD
b21wYXJhdG9yKHRoaXMsIGtleSk7Ci0gIG93bmVkX2tleV9jb21wYXJhdG9yc18ucHVzaF9iYWNr
KGtleV9jb21wYXJhdG9yKTsKLSAgbWFwX2ZpZWxkX2tleV9jb21wYXJhdG9yX1tmaWVsZF0gPSBr
ZXlfY29tcGFyYXRvcjsKLX0KLQotdm9pZCBNZXNzYWdlRGlmZmVyZW5jZXI6OlRyZWF0QXNNYXBX
aXRoTXVsdGlwbGVGaWVsZHNBc0tleSgKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LAotICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiYga2V5X2ZpZWxkcykg
ewotICB2ZWN0b3I8dmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+ID4ga2V5X2ZpZWxkX3Bh
dGhzOwotICBmb3IgKGludCBpID0gMDsgaSA8IGtleV9maWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4ga2V5X2ZpZWxkX3BhdGg7Ci0gICAga2V5
X2ZpZWxkX3BhdGgucHVzaF9iYWNrKGtleV9maWVsZHNbaV0pOwotICAgIGtleV9maWVsZF9wYXRo
cy5wdXNoX2JhY2soa2V5X2ZpZWxkX3BhdGgpOwotICB9Ci0gIFRyZWF0QXNNYXBXaXRoTXVsdGlw
bGVGaWVsZFBhdGhzQXNLZXkoZmllbGQsIGtleV9maWVsZF9wYXRocyk7Ci19Ci0KLXZvaWQgTWVz
c2FnZURpZmZlcmVuY2VyOjpUcmVhdEFzTWFwV2l0aE11bHRpcGxlRmllbGRQYXRoc0FzS2V5KAot
ICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgY29uc3QgdmVjdG9yPHZlY3Rv
cjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiA+JiBrZXlfZmllbGRfcGF0aHMpIHsKLSAgR09PR0xF
X0NIRUNLKGZpZWxkLT5pc19yZXBlYXRlZCgpKSA8PCAiRmllbGQgbXVzdCBiZSByZXBlYXRlZDog
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmllbGQtPmZ1bGxfbmFtZSgpOwot
ICBHT09HTEVfQ0hFQ0tfRVEoRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UsIGZpZWxk
LT5jcHBfdHlwZSgpKQotICAgICAgPDwgIkZpZWxkIGhhcyB0byBiZSBtZXNzYWdlIHR5cGUuICBG
aWVsZCBuYW1lIGlzOiAiCi0gICAgICA8PCBmaWVsZC0+ZnVsbF9uYW1lKCk7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwga2V5X2ZpZWxkX3BhdGhzLnNpemUoKTsgKytpKSB7Ci0gICAgY29uc3QgdmVj
dG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBrZXlfZmllbGRfcGF0aCA9IGtleV9maWVsZF9w
YXRoc1tpXTsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGtleV9maWVsZF9wYXRoLnNpemUoKTsg
KytqKSB7Ci0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHBhcmVudF9maWVsZCA9Ci0gICAg
ICAgICAgaiA9PSAwID8gZmllbGQgOiBrZXlfZmllbGRfcGF0aFtqIC0gMV07Ci0gICAgICBjb25z
dCBGaWVsZERlc2NyaXB0b3IqIGNoaWxkX2ZpZWxkID0ga2V5X2ZpZWxkX3BhdGhbal07Ci0gICAg
ICBHT09HTEVfQ0hFQ0soY2hpbGRfZmllbGQtPmNvbnRhaW5pbmdfdHlwZSgpID09IHBhcmVudF9m
aWVsZC0+bWVzc2FnZV90eXBlKCkpCi0gICAgICAgICAgPDwgY2hpbGRfZmllbGQtPmZ1bGxfbmFt
ZSgpCi0gICAgICAgICAgPDwgIiBtdXN0IGJlIGEgZGlyZWN0IHN1YmZpZWxkIHdpdGhpbiB0aGUg
ZmllbGQ6ICIKLSAgICAgICAgICA8PCBwYXJlbnRfZmllbGQtPmZ1bGxfbmFtZSgpOwotICAgICAg
aWYgKGogIT0gMCkgewotICAgICAgICBHT09HTEVfQ0hFQ0tfRVEoRmllbGREZXNjcmlwdG9yOjpD
UFBUWVBFX01FU1NBR0UsIHBhcmVudF9maWVsZC0+Y3BwX3R5cGUoKSkKLSAgICAgICAgICAgIDw8
IHBhcmVudF9maWVsZC0+ZnVsbF9uYW1lKCkgPDwgIiBoYXMgdG8gYmUgb2YgdHlwZSBtZXNzYWdl
LiI7Ci0gICAgICAgIEdPT0dMRV9DSEVDSyghcGFyZW50X2ZpZWxkLT5pc19yZXBlYXRlZCgpKQot
ICAgICAgICAgICAgPDwgcGFyZW50X2ZpZWxkLT5mdWxsX25hbWUoKSA8PCAiIGNhbm5vdCBiZSBh
IHJlcGVhdGVkIGZpZWxkLiI7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIEdPT0dMRV9DSEVDSyhz
ZXRfZmllbGRzXy5maW5kKGZpZWxkKSA9PSBzZXRfZmllbGRzXy5lbmQoKSkKLSAgICAgIDw8ICJD
YW5ub3QgdHJlYXQgdGhpcyByZXBlYXRlZCBmaWVsZCBhcyBib3RoIE1hcCBhbmQgU2V0IGZvciAi
Ci0gICAgICA8PCAiY29tcGFyaXNvbi4iOwotICBNYXBLZXlDb21wYXJhdG9yKiBrZXlfY29tcGFy
YXRvciA9Ci0gICAgICBuZXcgTXVsdGlwbGVGaWVsZHNNYXBLZXlDb21wYXJhdG9yKHRoaXMsIGtl
eV9maWVsZF9wYXRocyk7Ci0gIG93bmVkX2tleV9jb21wYXJhdG9yc18ucHVzaF9iYWNrKGtleV9j
b21wYXJhdG9yKTsKLSAgbWFwX2ZpZWxkX2tleV9jb21wYXJhdG9yX1tmaWVsZF0gPSBrZXlfY29t
cGFyYXRvcjsKLX0KLQotdm9pZCBNZXNzYWdlRGlmZmVyZW5jZXI6OlRyZWF0QXNNYXBVc2luZ0tl
eUNvbXBhcmF0b3IoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBjb25z
dCBNYXBLZXlDb21wYXJhdG9yKiBrZXlfY29tcGFyYXRvcikgewotICBHT09HTEVfQ0hFQ0soZmll
bGQtPmlzX3JlcGVhdGVkKCkpIDw8ICJGaWVsZCBtdXN0IGJlIHJlcGVhdGVkOiAiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmllbGQtPmZ1bGxfbmFtZSgpOwotICBHT09HTEVf
Q0hFQ0tfRVEoRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UsIGZpZWxkLT5jcHBfdHlw
ZSgpKQotICAgICAgPDwgIkZpZWxkIGhhcyB0byBiZSBtZXNzYWdlIHR5cGUuICBGaWVsZCBuYW1l
IGlzOiAiCi0gICAgICA8PCBmaWVsZC0+ZnVsbF9uYW1lKCk7Ci0gIEdPT0dMRV9DSEVDSyhzZXRf
ZmllbGRzXy5maW5kKGZpZWxkKSA9PSBzZXRfZmllbGRzXy5lbmQoKSkKLSAgICAgIDw8ICJDYW5u
b3QgdHJlYXQgdGhpcyByZXBlYXRlZCBmaWVsZCBhcyBib3RoIE1hcCBhbmQgU2V0IGZvciAiCi0g
ICAgICA8PCAiY29tcGFyaXNvbi4iOwotICBtYXBfZmllbGRfa2V5X2NvbXBhcmF0b3JfW2ZpZWxk
XSA9IGtleV9jb21wYXJhdG9yOwotfQotCi12b2lkIE1lc3NhZ2VEaWZmZXJlbmNlcjo6QWRkSWdu
b3JlQ3JpdGVyaWEoSWdub3JlQ3JpdGVyaWEqIGlnbm9yZV9jcml0ZXJpYSkgewotICBpZ25vcmVf
Y3JpdGVyaWFfLnB1c2hfYmFjayhpZ25vcmVfY3JpdGVyaWEpOwotfQotCi12b2lkIE1lc3NhZ2VE
aWZmZXJlbmNlcjo6SWdub3JlRmllbGQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewot
ICBpZ25vcmVkX2ZpZWxkc18uaW5zZXJ0KGZpZWxkKTsKLX0KLQotdm9pZCBNZXNzYWdlRGlmZmVy
ZW5jZXI6OlNldEZyYWN0aW9uQW5kTWFyZ2luKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGZy
YWN0aW9uLCBkb3VibGUgbWFyZ2luKSB7Ci0gIGRlZmF1bHRfZmllbGRfY29tcGFyYXRvcl8uU2V0
RnJhY3Rpb25BbmRNYXJnaW4oZmllbGQsIGZyYWN0aW9uLCBtYXJnaW4pOwotfQotCi12b2lkIE1l
c3NhZ2VEaWZmZXJlbmNlcjo6UmVwb3J0RGlmZmVyZW5jZXNUb1N0cmluZyhzdHJpbmcqIG91dHB1
dCkgewotICBHT09HTEVfRENIRUNLKG91dHB1dCkgPDwgIlNwZWNpZmllZCBvdXRwdXQgc3RyaW5n
IHdhcyBOVUxMIjsKLQotICBvdXRwdXRfc3RyaW5nXyA9IG91dHB1dDsKLSAgb3V0cHV0X3N0cmlu
Z18tPmNsZWFyKCk7Ci19Ci0KLXZvaWQgTWVzc2FnZURpZmZlcmVuY2VyOjpSZXBvcnREaWZmZXJl
bmNlc1RvKFJlcG9ydGVyKiByZXBvcnRlcikgewotICAvLyBJZiBhbiBvdXRwdXQgc3RyaW5nIGlz
IHNldCwgY2xlYXIgaXQgdG8gcHJldmVudAotICAvLyBpdCBzdXBlcmNlZGluZyB0aGUgc3BlY2lm
aWVkIHJlcG9ydGVyLgotICBpZiAob3V0cHV0X3N0cmluZ18pIHsKLSAgICBvdXRwdXRfc3RyaW5n
XyA9IE5VTEw7Ci0gIH0KLQotICByZXBvcnRlcl8gPSByZXBvcnRlcjsKLX0KLQotYm9vbCBNZXNz
YWdlRGlmZmVyZW5jZXI6OkZpZWxkQmVmb3JlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQx
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQyKSB7Ci0gIC8vIEhhbmRsZSBzZW50aW5lbCB2YWx1ZXMgKGkuZS4gbWFrZSBz
dXJlIE5VTExzIGFyZSBhbHdheXMgb3JkZXJlZAotICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0
KS4KLSAgaWYgKGZpZWxkMSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
aWYgKGZpZWxkMiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBBbHdh
eXMgb3JkZXIgZmllbGRzIGJ5IHRoZWlyIHRhZyBudW1iZXIKLSAgcmV0dXJuIChmaWVsZDEtPm51
bWJlcigpIDwgZmllbGQyLT5udW1iZXIoKSk7Ci19Ci0KLWJvb2wgTWVzc2FnZURpZmZlcmVuY2Vy
OjpDb21wYXJlKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTIpIHsKLSAgdmVjdG9yPFNwZWNpZmlj
RmllbGQ+IHBhcmVudF9maWVsZHM7Ci0KLSAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLQotICAvLyBT
ZXR1cCB0aGUgaW50ZXJuYWwgcmVwb3J0ZXIgaWYgbmVlZCBiZS4KLSAgaWYgKG91dHB1dF9zdHJp
bmdfKSB7Ci0gICAgaW86OlN0cmluZ091dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKG91dHB1dF9z
dHJpbmdfKTsKLSAgICBTdHJlYW1SZXBvcnRlciByZXBvcnRlcigmb3V0cHV0X3N0cmVhbSk7Ci0g
ICAgcmVwb3J0ZXJfID0gJnJlcG9ydGVyOwotICAgIHJlc3VsdCA9IENvbXBhcmUobWVzc2FnZTEs
IG1lc3NhZ2UyLCAmcGFyZW50X2ZpZWxkcyk7Ci0gICAgcmVwb3J0ZXJfID0gTlVMTDsKLSAgfSBl
bHNlIHsKLSAgICByZXN1bHQgPSBDb21wYXJlKG1lc3NhZ2UxLCBtZXNzYWdlMiwgJnBhcmVudF9m
aWVsZHMpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBNZXNzYWdlRGlmZmVy
ZW5jZXI6OkNvbXBhcmVXaXRoRmllbGRzKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLAot
ICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWVs
ZERlc2NyaXB0b3IqPiYgbWVzc2FnZTFfZmllbGRzX2FyZywKLSAgICBjb25zdCB2ZWN0b3I8Y29u
c3QgRmllbGREZXNjcmlwdG9yKj4mIG1lc3NhZ2UyX2ZpZWxkc19hcmcpIHsKLSAgaWYgKG1lc3Nh
Z2UxLkdldERlc2NyaXB0b3IoKSAhPSBtZXNzYWdlMi5HZXREZXNjcmlwdG9yKCkpIHsKLSAgICBH
T09HTEVfTE9HKERGQVRBTCkgPDwgIkNvbXBhcmlzb24gYmV0d2VlbiB0d28gbWVzc2FnZXMgd2l0
aCBkaWZmZXJlbnQgIgotICAgICAgICAgICAgICAgIDw8ICJkZXNjcmlwdG9ycy4iOwotICAgIHJl
dHVybiBmYWxzZTsKLSAgfQotCi0gIHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiBwYXJlbnRfZmllbGRz
OwotCi0gIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0KLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3Jp
cHRvcio+IG1lc3NhZ2UxX2ZpZWxkcyhtZXNzYWdlMV9maWVsZHNfYXJnKTsKLSAgdmVjdG9yPGNv
bnN0IEZpZWxkRGVzY3JpcHRvcio+IG1lc3NhZ2UyX2ZpZWxkcyhtZXNzYWdlMl9maWVsZHNfYXJn
KTsKLQotICBzdGQ6OnNvcnQobWVzc2FnZTFfZmllbGRzLmJlZ2luKCksIG1lc3NhZ2UxX2ZpZWxk
cy5lbmQoKSwgRmllbGRCZWZvcmUpOwotICBzdGQ6OnNvcnQobWVzc2FnZTJfZmllbGRzLmJlZ2lu
KCksIG1lc3NhZ2UyX2ZpZWxkcy5lbmQoKSwgRmllbGRCZWZvcmUpOwotICAvLyBBcHBlbmQgTlVM
TCBzZW50aW5lbCB2YWx1ZXMuCi0gIG1lc3NhZ2UxX2ZpZWxkcy5wdXNoX2JhY2soTlVMTCk7Ci0g
IG1lc3NhZ2UyX2ZpZWxkcy5wdXNoX2JhY2soTlVMTCk7Ci0KLSAgLy8gU2V0dXAgdGhlIGludGVy
bmFsIHJlcG9ydGVyIGlmIG5lZWQgYmUuCi0gIGlmIChvdXRwdXRfc3RyaW5nXykgewotICAgIGlv
OjpTdHJpbmdPdXRwdXRTdHJlYW0gb3V0cHV0X3N0cmVhbShvdXRwdXRfc3RyaW5nXyk7Ci0gICAg
U3RyZWFtUmVwb3J0ZXIgcmVwb3J0ZXIoJm91dHB1dF9zdHJlYW0pOwotICAgIHJlcG9ydGVyXyA9
ICZyZXBvcnRlcjsKLSAgICByZXN1bHQgPSBDb21wYXJlUmVxdWVzdGVkRmllbGRzVXNpbmdTZXR0
aW5ncygKLSAgICAgICAgbWVzc2FnZTEsIG1lc3NhZ2UyLCBtZXNzYWdlMV9maWVsZHMsIG1lc3Nh
Z2UyX2ZpZWxkcywgJnBhcmVudF9maWVsZHMpOwotICAgIHJlcG9ydGVyXyA9IE5VTEw7Ci0gIH0g
ZWxzZSB7Ci0gICAgcmVzdWx0ID0gQ29tcGFyZVJlcXVlc3RlZEZpZWxkc1VzaW5nU2V0dGluZ3Mo
Ci0gICAgICAgIG1lc3NhZ2UxLCBtZXNzYWdlMiwgbWVzc2FnZTFfZmllbGRzLCBtZXNzYWdlMl9m
aWVsZHMsICZwYXJlbnRfZmllbGRzKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJv
b2wgTWVzc2FnZURpZmZlcmVuY2VyOjpDb21wYXJlKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3Nh
Z2UxLAotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgIHZlY3RvcjxTcGVjaWZpY0Zp
ZWxkPiogcGFyZW50X2ZpZWxkcykgewotICBjb25zdCBEZXNjcmlwdG9yKiBkZXNjcmlwdG9yMSA9
IG1lc3NhZ2UxLkdldERlc2NyaXB0b3IoKTsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRv
cjIgPSBtZXNzYWdlMi5HZXREZXNjcmlwdG9yKCk7Ci0gIGlmIChkZXNjcmlwdG9yMSAhPSBkZXNj
cmlwdG9yMikgewotICAgIEdPT0dMRV9MT0coREZBVEFMKSA8PCAiQ29tcGFyaXNvbiBiZXR3ZWVu
IHR3byBtZXNzYWdlcyB3aXRoIGRpZmZlcmVudCAiCi0gICAgICAgICAgICAgICAgPDwgImRlc2Ny
aXB0b3JzLiAiCi0gICAgICAgICAgICAgICAgPDwgZGVzY3JpcHRvcjEtPmZ1bGxfbmFtZSgpIDw8
ICIgdnMgIgotICAgICAgICAgICAgICAgIDw8IGRlc2NyaXB0b3IyLT5mdWxsX25hbWUoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLy8gRXhwYW5kIGdvb2dsZS5wcm90b2J1Zi5BbnkgcGF5
bG9hZCBpZiBwb3NzaWJsZS4KLSAgaWYgKGRlc2NyaXB0b3IxLT5mdWxsX25hbWUoKSA9PSBpbnRl
cm5hbDo6a0FueUZ1bGxUeXBlTmFtZSkgewotICAgIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9w
dHI8TWVzc2FnZT4gZGF0YTE7Ci0gICAgZ29vZ2xlOjpwcm90b2J1Zjo6c2NvcGVkX3B0cjxNZXNz
YWdlPiBkYXRhMjsKLSAgICBpZiAoVW5wYWNrQW55KG1lc3NhZ2UxLCAmZGF0YTEpICYmIFVucGFj
a0FueShtZXNzYWdlMiwgJmRhdGEyKSkgewotICAgICAgcmV0dXJuIENvbXBhcmUoKmRhdGExLCAq
ZGF0YTIsIHBhcmVudF9maWVsZHMpOwotICAgIH0KLSAgfQotICBjb25zdCBSZWZsZWN0aW9uKiBy
ZWZsZWN0aW9uMSA9IG1lc3NhZ2UxLkdldFJlZmxlY3Rpb24oKTsKLSAgY29uc3QgUmVmbGVjdGlv
biogcmVmbGVjdGlvbjIgPSBtZXNzYWdlMi5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgLy8gUmV0cmll
dmUgYWxsIHRoZSBzZXQgZmllbGRzLCBpbmNsdWRpbmcgZXh0ZW5zaW9ucy4KLSAgdmVjdG9yPGNv
bnN0IEZpZWxkRGVzY3JpcHRvcio+IG1lc3NhZ2UxX2ZpZWxkczsKLSAgdmVjdG9yPGNvbnN0IEZp
ZWxkRGVzY3JpcHRvcio+IG1lc3NhZ2UyX2ZpZWxkczsKLQotICByZWZsZWN0aW9uMS0+TGlzdEZp
ZWxkcyhtZXNzYWdlMSwgJm1lc3NhZ2UxX2ZpZWxkcyk7Ci0gIHJlZmxlY3Rpb24yLT5MaXN0Rmll
bGRzKG1lc3NhZ2UyLCAmbWVzc2FnZTJfZmllbGRzKTsKLQotICAvLyBBZGQgc2VudGluZWwgdmFs
dWVzIHRvIGRlYWwgd2l0aCB0aGUKLSAgLy8gY2FzZSB3aGVyZSB0aGUgbnVtYmVyIG9mIHRoZSBm
aWVsZHMgaW4KLSAgLy8gZWFjaCBsaXN0IGFyZSBkaWZmZXJlbnQuCi0gIG1lc3NhZ2UxX2ZpZWxk
cy5wdXNoX2JhY2soTlVMTCk7Ci0gIG1lc3NhZ2UyX2ZpZWxkcy5wdXNoX2JhY2soTlVMTCk7Ci0K
LSAgYm9vbCB1bmtub3duX2NvbXBhcmVfcmVzdWx0ID0gdHJ1ZTsKLSAgLy8gSWdub3JlIHVua25v
d24gZmllbGRzIGluIEVRVUlWQUxFTlQgbW9kZQotICBpZiAobWVzc2FnZV9maWVsZF9jb21wYXJp
c29uXyAhPSBFUVVJVkFMRU5UKSB7Ci0gICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93
bkZpZWxkU2V0KiB1bmtub3duX2ZpZWxkX3NldDEgPQotICAgICAgICAmcmVmbGVjdGlvbjEtPkdl
dFVua25vd25GaWVsZHMobWVzc2FnZTEpOwotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlVu
a25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZF9zZXQyID0KLSAgICAgICAgJnJlZmxlY3Rpb24y
LT5HZXRVbmtub3duRmllbGRzKG1lc3NhZ2UyKTsKLSAgICBpZiAoIUNvbXBhcmVVbmtub3duRmll
bGRzKG1lc3NhZ2UxLCBtZXNzYWdlMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1
bmtub3duX2ZpZWxkX3NldDEsICp1bmtub3duX2ZpZWxkX3NldDIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRfZmllbGRzKSkgewotICAgICAgaWYgKHJlcG9ydGVyXyA9PSBO
VUxMKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH07Ci0gICAgICB1bmtub3duX2Nv
bXBhcmVfcmVzdWx0ID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIENvbXBhcmVSZXF1
ZXN0ZWRGaWVsZHNVc2luZ1NldHRpbmdzKAotICAgICAgbWVzc2FnZTEsIG1lc3NhZ2UyLAotICAg
ICAgbWVzc2FnZTFfZmllbGRzLCBtZXNzYWdlMl9maWVsZHMsCi0gICAgICBwYXJlbnRfZmllbGRz
KSAmJiB1bmtub3duX2NvbXBhcmVfcmVzdWx0OwotfQotCi1ib29sIE1lc3NhZ2VEaWZmZXJlbmNl
cjo6Q29tcGFyZVJlcXVlc3RlZEZpZWxkc1VzaW5nU2V0dGluZ3MoCi0gICAgY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZTEsCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0gICAgY29uc3QgdmVj
dG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBtZXNzYWdlMV9maWVsZHMsCi0gICAgY29uc3Qg
dmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBtZXNzYWdlMl9maWVsZHMsCi0gICAgdmVj
dG9yPFNwZWNpZmljRmllbGQ+KiBwYXJlbnRfZmllbGRzKSB7Ci0gIGlmIChzY29wZV8gPT0gRlVM
TCkgewotICAgIGlmIChtZXNzYWdlX2ZpZWxkX2NvbXBhcmlzb25fID09IEVRVUlWQUxFTlQpIHsK
LSAgICAgIC8vIFdlIG5lZWQgdG8gbWVyZ2UgdGhlIGZpZWxkIGxpc3RzIG9mIGJvdGggbWVzc2Fn
ZXMgKGkuZS4KLSAgICAgIC8vIHdlIGFyZSBtZXJlbHkgY2hlY2tpbmcgZm9yIGEgZGlmZmVyZW5j
ZSBpbiBmaWVsZCB2YWx1ZXMsCi0gICAgICAvLyByYXRoZXIgdGhhbiB0aGUgYWRkaXRpb24gb3Ig
ZGVsZXRpb24gb2YgZmllbGRzKS4KLSAgICAgIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3Iq
PiBmaWVsZHNfdW5pb247Ci0gICAgICBDb21iaW5lRmllbGRzKG1lc3NhZ2UxX2ZpZWxkcywgRlVM
TCwgbWVzc2FnZTJfZmllbGRzLCBGVUxMLAotICAgICAgICAgICAgICAgICAgICAmZmllbGRzX3Vu
aW9uKTsKLSAgICAgIHJldHVybiBDb21wYXJlV2l0aEZpZWxkc0ludGVybmFsKG1lc3NhZ2UxLCBt
ZXNzYWdlMiwgZmllbGRzX3VuaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmllbGRzX3VuaW9uLCBwYXJlbnRfZmllbGRzKTsKLSAgICB9IGVsc2UgewotICAgICAg
Ly8gU2ltcGxlIGVxdWFsaXR5IGNvbXBhcmlzb24sIHVzZSB0aGUgdW5hbHRlcmVkIGZpZWxkIGxp
c3RzLgotICAgICAgcmV0dXJuIENvbXBhcmVXaXRoRmllbGRzSW50ZXJuYWwobWVzc2FnZTEsIG1l
c3NhZ2UyLCBtZXNzYWdlMV9maWVsZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlMl9maWVsZHMsIHBhcmVudF9maWVsZHMpOwotICAgIH0KLSAgfSBlbHNl
IHsKLSAgICBpZiAobWVzc2FnZV9maWVsZF9jb21wYXJpc29uXyA9PSBFUVVJVkFMRU5UKSB7Ci0g
ICAgICAvLyBXZSB1c2UgdGhlIGxpc3Qgb2YgZmllbGRzIGZvciBtZXNzYWdlMSBmb3IgYm90aCBt
ZXNzYWdlcyB3aGVuCi0gICAgICAvLyBjb21wYXJpbmcuICBUaGlzIHdheSwgZXh0cmEgZmllbGRz
IGluIG1lc3NhZ2UyIGFyZSBpZ25vcmVkLAotICAgICAgLy8gYW5kIG1pc3NpbmcgZmllbGRzIGlu
IG1lc3NhZ2UyIHVzZSB0aGVpciBkZWZhdWx0IHZhbHVlLgotICAgICAgcmV0dXJuIENvbXBhcmVX
aXRoRmllbGRzSW50ZXJuYWwobWVzc2FnZTEsIG1lc3NhZ2UyLCBtZXNzYWdlMV9maWVsZHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlMV9maWVsZHMsIHBh
cmVudF9maWVsZHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBXZSBuZWVkIHRvIGNvbnNpZGVy
IHRoZSBmdWxsIGxpc3Qgb2YgZmllbGRzIGZvciBtZXNzYWdlMQotICAgICAgLy8gYnV0IG9ubHkg
dGhlIGludGVyc2VjdGlvbiBmb3IgbWVzc2FnZTIuICBUaGlzIHdheSwgYW55IGZpZWxkcwotICAg
ICAgLy8gb25seSBwcmVzZW50IGluIG1lc3NhZ2UyIHdpbGwgYmUgaWdub3JlZCwgYnV0IGFueSBm
aWVsZHMgb25seQotICAgICAgLy8gcHJlc2VudCBpbiBtZXNzYWdlMSB3aWxsIGJlIG1hcmtlZCBh
cyBhIGRpZmZlcmVuY2UuCi0gICAgICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmll
bGRzX2ludGVyc2VjdGlvbjsKLSAgICAgIENvbWJpbmVGaWVsZHMobWVzc2FnZTFfZmllbGRzLCBQ
QVJUSUFMLCBtZXNzYWdlMl9maWVsZHMsIFBBUlRJQUwsCi0gICAgICAgICAgICAgICAgICAgICZm
aWVsZHNfaW50ZXJzZWN0aW9uKTsKLSAgICAgIHJldHVybiBDb21wYXJlV2l0aEZpZWxkc0ludGVy
bmFsKG1lc3NhZ2UxLCBtZXNzYWdlMiwgbWVzc2FnZTFfZmllbGRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzX2ludGVyc2VjdGlvbiwgcGFyZW50X2ZpZWxk
cyk7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgTWVzc2FnZURpZmZlcmVuY2VyOjpDb21iaW5lRmll
bGRzKAotICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiYgZmllbGRzMSwK
LSAgICBTY29wZSBmaWVsZHMxX3Njb3BlLAotICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWVsZERl
c2NyaXB0b3IqPiYgZmllbGRzMiwKLSAgICBTY29wZSBmaWVsZHMyX3Njb3BlLAotICAgIHZlY3Rv
cjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiogY29tYmluZWRfZmllbGRzKSB7Ci0KLSAgaW50IGlu
ZGV4MSA9IDA7Ci0gIGludCBpbmRleDIgPSAwOwotCi0gIHdoaWxlIChpbmRleDEgPCBmaWVsZHMx
LnNpemUoKSAmJiBpbmRleDIgPCBmaWVsZHMyLnNpemUoKSkgewotICAgIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZmllbGQxID0gZmllbGRzMVtpbmRleDFdOwotICAgIGNvbnN0IEZpZWxkRGVzY3Jp
cHRvciogZmllbGQyID0gZmllbGRzMltpbmRleDJdOwotCi0gICAgaWYgKEZpZWxkQmVmb3JlKGZp
ZWxkMSwgZmllbGQyKSkgewotICAgICAgaWYgKGZpZWxkczFfc2NvcGUgPT0gRlVMTCkgewotICAg
ICAgICBjb21iaW5lZF9maWVsZHMtPnB1c2hfYmFjayhmaWVsZHMxW2luZGV4MV0pOwotICAgICAg
fQotICAgICAgKytpbmRleDE7Ci0gICAgfSBlbHNlIGlmIChGaWVsZEJlZm9yZShmaWVsZDIsIGZp
ZWxkMSkpIHsKLSAgICAgIGlmIChmaWVsZHMyX3Njb3BlID09IEZVTEwpIHsKLSAgICAgICAgY29t
YmluZWRfZmllbGRzLT5wdXNoX2JhY2soZmllbGRzMltpbmRleDJdKTsKLSAgICAgIH0KLSAgICAg
ICsraW5kZXgyOwotICAgIH0gZWxzZSB7Ci0gICAgICBjb21iaW5lZF9maWVsZHMtPnB1c2hfYmFj
ayhmaWVsZHMxW2luZGV4MV0pOwotICAgICAgKytpbmRleDE7Ci0gICAgICArK2luZGV4MjsKLSAg
ICB9Ci0gIH0KLX0KLQotYm9vbCBNZXNzYWdlRGlmZmVyZW5jZXI6OkNvbXBhcmVXaXRoRmllbGRz
SW50ZXJuYWwoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsCi0gICAgY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZTIsCi0gICAgY29uc3QgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBt
ZXNzYWdlMV9maWVsZHMsCi0gICAgY29uc3QgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+
JiBtZXNzYWdlMl9maWVsZHMsCi0gICAgdmVjdG9yPFNwZWNpZmljRmllbGQ+KiBwYXJlbnRfZmll
bGRzKSB7Ci0gIGJvb2wgaXNEaWZmZXJlbnQgPSBmYWxzZTsKLSAgaW50IGZpZWxkX2luZGV4MSA9
IDA7Ci0gIGludCBmaWVsZF9pbmRleDIgPSAwOwotCi0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxl
Y3Rpb24xID0gbWVzc2FnZTEuR2V0UmVmbGVjdGlvbigpOwotICBjb25zdCBSZWZsZWN0aW9uKiBy
ZWZsZWN0aW9uMiA9IG1lc3NhZ2UyLkdldFJlZmxlY3Rpb24oKTsKLQotICB3aGlsZSAodHJ1ZSkg
ewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQxID0gbWVzc2FnZTFfZmllbGRzW2Zp
ZWxkX2luZGV4MV07Ci0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZDIgPSBtZXNzYWdl
Ml9maWVsZHNbZmllbGRfaW5kZXgyXTsKLQotICAgIC8vIE9uY2Ugd2UgaGF2ZSByZWFjaGVkIHNl
bnRpbmVsIHZhbHVlcywgd2UgYXJlIGRvbmUgdGhlIGNvbXBhcmlzb24uCi0gICAgaWYgKGZpZWxk
MSA9PSBOVUxMICYmIGZpZWxkMiA9PSBOVUxMKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICAvLyBDaGVjayBmb3IgZGlmZmVyZW5jZXMgaW4gdGhlIGZpZWxkIGl0c2VsZi4KLSAgICBpZiAo
RmllbGRCZWZvcmUoZmllbGQxLCBmaWVsZDIpKSB7Ci0gICAgICAvLyBGaWVsZCAxIGlzIG5vdCBp
biB0aGUgZmllbGQgbGlzdCBmb3IgbWVzc2FnZSAyLgotICAgICAgaWYgKElzSWdub3JlZChtZXNz
YWdlMSwgbWVzc2FnZTIsIGZpZWxkMSwgKnBhcmVudF9maWVsZHMpKSB7Ci0gICAgICAgIC8vIFdl
IGFyZSBpZ25vcmluZyBmaWVsZDEuIFJlcG9ydCB0aGUgaWdub3JlIGFuZCBtb3ZlIG9uIHRvCi0g
ICAgICAgIC8vIHRoZSBuZXh0IGZpZWxkIGluIG1lc3NhZ2UxX2ZpZWxkcy4KLSAgICAgICAgaWYg
KHJlcG9ydGVyXyAhPSBOVUxMKSB7Ci0gICAgICAgICAgU3BlY2lmaWNGaWVsZCBzcGVjaWZpY19m
aWVsZDsKLSAgICAgICAgICBzcGVjaWZpY19maWVsZC5maWVsZCA9IGZpZWxkMTsKLQotICAgICAg
ICAgIHBhcmVudF9maWVsZHMtPnB1c2hfYmFjayhzcGVjaWZpY19maWVsZCk7Ci0gICAgICAgICAg
cmVwb3J0ZXJfLT5SZXBvcnRJZ25vcmVkKG1lc3NhZ2UxLCBtZXNzYWdlMiwgKnBhcmVudF9maWVs
ZHMpOwotICAgICAgICAgIHBhcmVudF9maWVsZHMtPnBvcF9iYWNrKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgKytmaWVsZF9pbmRleDE7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAg
ICBpZiAocmVwb3J0ZXJfICE9IE5VTEwpIHsKLSAgICAgICAgaW50IGNvdW50ID0gZmllbGQxLT5p
c19yZXBlYXRlZCgpID8KLSAgICAgICAgICAgIHJlZmxlY3Rpb24xLT5GaWVsZFNpemUobWVzc2Fn
ZTEsIGZpZWxkMSkgOiAxOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICAgIFNwZWNpZmljRmllbGQgc3BlY2lmaWNfZmllbGQ7Ci0gICAgICAgICAg
c3BlY2lmaWNfZmllbGQuZmllbGQgPSBmaWVsZDE7Ci0gICAgICAgICAgc3BlY2lmaWNfZmllbGQu
aW5kZXggPSBmaWVsZDEtPmlzX3JlcGVhdGVkKCkgPyBpIDogLTE7Ci0KLSAgICAgICAgICBwYXJl
bnRfZmllbGRzLT5wdXNoX2JhY2soc3BlY2lmaWNfZmllbGQpOwotICAgICAgICAgIHJlcG9ydGVy
Xy0+UmVwb3J0RGVsZXRlZChtZXNzYWdlMSwgbWVzc2FnZTIsICpwYXJlbnRfZmllbGRzKTsKLSAg
ICAgICAgICBwYXJlbnRfZmllbGRzLT5wb3BfYmFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aXNEaWZmZXJlbnQgPSB0cnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgfQotCi0gICAgICArK2ZpZWxkX2luZGV4MTsKLSAgICAgIGNvbnRpbnVlOwotICAg
IH0gZWxzZSBpZiAoRmllbGRCZWZvcmUoZmllbGQyLCBmaWVsZDEpKSB7Ci0gICAgICAvLyBGaWVs
ZCAyIGlzIG5vdCBpbiB0aGUgZmllbGQgbGlzdCBmb3IgbWVzc2FnZSAxLgotICAgICAgaWYgKElz
SWdub3JlZChtZXNzYWdlMSwgbWVzc2FnZTIsIGZpZWxkMiwgKnBhcmVudF9maWVsZHMpKSB7Ci0g
ICAgICAgIC8vIFdlIGFyZSBpZ25vcmluZyBmaWVsZDIuIFJlcG9ydCB0aGUgaWdub3JlIGFuZCBt
b3ZlIG9uIHRvCi0gICAgICAgIC8vIHRoZSBuZXh0IGZpZWxkIGluIG1lc3NhZ2UyX2ZpZWxkcy4K
LSAgICAgICAgaWYgKHJlcG9ydGVyXyAhPSBOVUxMKSB7Ci0gICAgICAgICAgU3BlY2lmaWNGaWVs
ZCBzcGVjaWZpY19maWVsZDsKLSAgICAgICAgICBzcGVjaWZpY19maWVsZC5maWVsZCA9IGZpZWxk
MjsKLQotICAgICAgICAgIHBhcmVudF9maWVsZHMtPnB1c2hfYmFjayhzcGVjaWZpY19maWVsZCk7
Ci0gICAgICAgICAgcmVwb3J0ZXJfLT5SZXBvcnRJZ25vcmVkKG1lc3NhZ2UxLCBtZXNzYWdlMiwg
KnBhcmVudF9maWVsZHMpOwotICAgICAgICAgIHBhcmVudF9maWVsZHMtPnBvcF9iYWNrKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgKytmaWVsZF9pbmRleDI7Ci0gICAgICAgIGNvbnRpbnVlOwotICAg
ICAgfQotCi0gICAgICBpZiAocmVwb3J0ZXJfICE9IE5VTEwpIHsKLSAgICAgICAgaW50IGNvdW50
ID0gZmllbGQyLT5pc19yZXBlYXRlZCgpID8KLSAgICAgICAgICAgIHJlZmxlY3Rpb24yLT5GaWVs
ZFNpemUobWVzc2FnZTIsIGZpZWxkMikgOiAxOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewotICAgICAgICAgIFNwZWNpZmljRmllbGQgc3BlY2lmaWNfZmllbGQ7
Ci0gICAgICAgICAgc3BlY2lmaWNfZmllbGQuZmllbGQgPSBmaWVsZDI7Ci0gICAgICAgICAgc3Bl
Y2lmaWNfZmllbGQuaW5kZXggPSBmaWVsZDItPmlzX3JlcGVhdGVkKCkgPyBpIDogLTE7Ci0gICAg
ICAgICAgc3BlY2lmaWNfZmllbGQubmV3X2luZGV4ID0gc3BlY2lmaWNfZmllbGQuaW5kZXg7Ci0K
LSAgICAgICAgICBwYXJlbnRfZmllbGRzLT5wdXNoX2JhY2soc3BlY2lmaWNfZmllbGQpOwotICAg
ICAgICAgIHJlcG9ydGVyXy0+UmVwb3J0QWRkZWQobWVzc2FnZTEsIG1lc3NhZ2UyLCAqcGFyZW50
X2ZpZWxkcyk7Ci0gICAgICAgICAgcGFyZW50X2ZpZWxkcy0+cG9wX2JhY2soKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlzRGlmZmVyZW50ID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgKytmaWVsZF9pbmRleDI7Ci0gICAgICBj
b250aW51ZTsKLSAgICB9Ci0KLSAgICAvLyBCeSB0aGlzIHBvaW50LCBmaWVsZDEgYW5kIGZpZWxk
MiBhcmUgZ3VhcmVudGVlZCB0byBwb2ludCB0byB0aGUgc2FtZQotICAgIC8vIGZpZWxkLCBzbyB3
ZSBjYW4gbm93IGNvbXBhcmUgdGhlIHZhbHVlcy4KLSAgICBpZiAoSXNJZ25vcmVkKG1lc3NhZ2Ux
LCBtZXNzYWdlMiwgZmllbGQxLCAqcGFyZW50X2ZpZWxkcykpIHsKLSAgICAgIC8vIElnbm9yZSB0
aGlzIGZpZWxkLiBSZXBvcnQgYW5kIG1vdmUgb24uCi0gICAgICBpZiAocmVwb3J0ZXJfICE9IE5V
TEwpIHsKLSAgICAgICAgU3BlY2lmaWNGaWVsZCBzcGVjaWZpY19maWVsZDsKLSAgICAgICAgc3Bl
Y2lmaWNfZmllbGQuZmllbGQgPSBmaWVsZDE7Ci0KLSAgICAgICAgcGFyZW50X2ZpZWxkcy0+cHVz
aF9iYWNrKHNwZWNpZmljX2ZpZWxkKTsKLSAgICAgICAgcmVwb3J0ZXJfLT5SZXBvcnRJZ25vcmVk
KG1lc3NhZ2UxLCBtZXNzYWdlMiwgKnBhcmVudF9maWVsZHMpOwotICAgICAgICBwYXJlbnRfZmll
bGRzLT5wb3BfYmFjaygpOwotICAgICAgfQotCi0gICAgICArK2ZpZWxkX2luZGV4MTsKLSAgICAg
ICsrZmllbGRfaW5kZXgyOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgYm9vbCBmaWVs
ZERpZmZlcmVudCA9IGZhbHNlOwotICAgIGlmIChmaWVsZDEtPmlzX3JlcGVhdGVkKCkpIHsKLSAg
ICAgIGZpZWxkRGlmZmVyZW50ID0gIUNvbXBhcmVSZXBlYXRlZEZpZWxkKG1lc3NhZ2UxLCBtZXNz
YWdlMiwgZmllbGQxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50X2ZpZWxkcyk7Ci0gICAgICBpZiAoZmllbGREaWZmZXJlbnQpIHsKLSAgICAgICAg
aWYgKHJlcG9ydGVyXyA9PSBOVUxMKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlzRGlmZmVyZW50
ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZmllbGREaWZmZXJlbnQgPSAh
Q29tcGFyZUZpZWxkVmFsdWVVc2luZ1BhcmVudEZpZWxkcygKLSAgICAgICAgICBtZXNzYWdlMSwg
bWVzc2FnZTIsIGZpZWxkMSwgLTEsIC0xLCBwYXJlbnRfZmllbGRzKTsKLQotICAgICAgLy8gSWYg
d2UgaGF2ZSBmb3VuZCBkaWZmZXJlbmNlcywgZWl0aGVyIHJlcG9ydCB0aGVtIG9yIHRlcm1pbmF0
ZSBpZgotICAgICAgLy8gbm8gcmVwb3J0ZXIgaXMgcHJlc2VudC4KLSAgICAgIGlmIChmaWVsZERp
ZmZlcmVudCAmJiByZXBvcnRlcl8gPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICB9Ci0KLSAgICAgIGlmIChyZXBvcnRlcl8gIT0gTlVMTCkgewotICAgICAgICBTcGVjaWZp
Y0ZpZWxkIHNwZWNpZmljX2ZpZWxkOwotICAgICAgICBzcGVjaWZpY19maWVsZC5maWVsZCA9IGZp
ZWxkMTsKLSAgICAgICAgcGFyZW50X2ZpZWxkcy0+cHVzaF9iYWNrKHNwZWNpZmljX2ZpZWxkKTsK
LSAgICAgICAgaWYgKGZpZWxkRGlmZmVyZW50KSB7Ci0gICAgICAgICAgcmVwb3J0ZXJfLT5SZXBv
cnRNb2RpZmllZChtZXNzYWdlMSwgbWVzc2FnZTIsICpwYXJlbnRfZmllbGRzKTsKLSAgICAgICAg
ICBpc0RpZmZlcmVudCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVwb3J0X21hdGNoZXNf
KSB7Ci0gICAgICAgICAgcmVwb3J0ZXJfLT5SZXBvcnRNYXRjaGVkKG1lc3NhZ2UxLCBtZXNzYWdl
MiwgKnBhcmVudF9maWVsZHMpOwotICAgICAgICB9Ci0gICAgICAgIHBhcmVudF9maWVsZHMtPnBv
cF9iYWNrKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIEluY3JlbWVudCB0aGUgZmllbGQgaW5k
aWNpZXMuCi0gICAgKytmaWVsZF9pbmRleDE7Ci0gICAgKytmaWVsZF9pbmRleDI7Ci0gIH0KLQot
ICByZXR1cm4gIWlzRGlmZmVyZW50OwotfQotCi1ib29sIE1lc3NhZ2VEaWZmZXJlbmNlcjo6SXNN
YXRjaChjb25zdCBGaWVsZERlc2NyaXB0b3IqIHJlcGVhdGVkX2ZpZWxkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFwS2V5Q29tcGFyYXRvcioga2V5X2NvbXBhcmF0
b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlKiBtZXNz
YWdlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UqIG1l
c3NhZ2UyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yPFNw
ZWNpZmljRmllbGQ+JiBwYXJlbnRfZmllbGRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGluZGV4MSwgaW50IGluZGV4MikgewotICB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4g
Y3VycmVudF9wYXJlbnRfZmllbGRzKHBhcmVudF9maWVsZHMpOwotICBpZiAocmVwZWF0ZWRfZmll
bGQtPmNwcF90eXBlKCkgIT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAg
ICByZXR1cm4gQ29tcGFyZUZpZWxkVmFsdWVVc2luZ1BhcmVudEZpZWxkcygKLSAgICAgICAgKm1l
c3NhZ2UxLCAqbWVzc2FnZTIsIHJlcGVhdGVkX2ZpZWxkLCBpbmRleDEsIGluZGV4MiwKLSAgICAg
ICAgJmN1cnJlbnRfcGFyZW50X2ZpZWxkcyk7Ci0gIH0KLSAgLy8gQmFjayB1cCB0aGUgUmVwb3J0
ZXIgYW5kIG91dHB1dF9zdHJpbmdfLiAgVGhleSB3aWxsIGJlIHJlc2V0IGluIHRoZQotICAvLyBm
b2xsb3dpbmcgY29kZS4KLSAgUmVwb3J0ZXIqIGJhY2t1cF9yZXBvcnRlciA9IHJlcG9ydGVyXzsK
LSAgc3RyaW5nKiBvdXRwdXRfc3RyaW5nID0gb3V0cHV0X3N0cmluZ187Ci0gIHJlcG9ydGVyXyA9
IE5VTEw7Ci0gIG91dHB1dF9zdHJpbmdfID0gTlVMTDsKLSAgYm9vbCBtYXRjaDsKLQotICBpZiAo
a2V5X2NvbXBhcmF0b3IgPT0gTlVMTCkgewotICAgIG1hdGNoID0gQ29tcGFyZUZpZWxkVmFsdWVV
c2luZ1BhcmVudEZpZWxkcygKLSAgICAgICAgKm1lc3NhZ2UxLCAqbWVzc2FnZTIsIHJlcGVhdGVk
X2ZpZWxkLCBpbmRleDEsIGluZGV4MiwKLSAgICAgICAgJmN1cnJlbnRfcGFyZW50X2ZpZWxkcyk7
Ci0gIH0gZWxzZSB7Ci0gICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbjEgPSBtZXNzYWdl
MS0+R2V0UmVmbGVjdGlvbigpOwotICAgIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24yID0g
bWVzc2FnZTItPkdldFJlZmxlY3Rpb24oKTsKLSAgICBjb25zdCBNZXNzYWdlJiBtMSA9Ci0gICAg
ICAgIHJlZmxlY3Rpb24xLT5HZXRSZXBlYXRlZE1lc3NhZ2UoKm1lc3NhZ2UxLCByZXBlYXRlZF9m
aWVsZCwgaW5kZXgxKTsKLSAgICBjb25zdCBNZXNzYWdlJiBtMiA9Ci0gICAgICAgIHJlZmxlY3Rp
b24yLT5HZXRSZXBlYXRlZE1lc3NhZ2UoKm1lc3NhZ2UyLCByZXBlYXRlZF9maWVsZCwgaW5kZXgy
KTsKLSAgICBTcGVjaWZpY0ZpZWxkIHNwZWNpZmljX2ZpZWxkOwotICAgIHNwZWNpZmljX2ZpZWxk
LmZpZWxkID0gcmVwZWF0ZWRfZmllbGQ7Ci0gICAgY3VycmVudF9wYXJlbnRfZmllbGRzLnB1c2hf
YmFjayhzcGVjaWZpY19maWVsZCk7Ci0gICAgbWF0Y2ggPSBrZXlfY29tcGFyYXRvci0+SXNNYXRj
aChtMSwgbTIsIGN1cnJlbnRfcGFyZW50X2ZpZWxkcyk7Ci0gIH0KLQotICByZXBvcnRlcl8gPSBi
YWNrdXBfcmVwb3J0ZXI7Ci0gIG91dHB1dF9zdHJpbmdfID0gb3V0cHV0X3N0cmluZzsKLSAgcmV0
dXJuIG1hdGNoOwotfQotCi1ib29sIE1lc3NhZ2VEaWZmZXJlbmNlcjo6Q29tcGFyZVJlcGVhdGVk
RmllbGQoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsCi0gICAgY29uc3QgTWVzc2FnZSYg
bWVzc2FnZTIsCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiByZXBlYXRlZF9maWVsZCwKLSAg
ICB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4qIHBhcmVudF9maWVsZHMpIHsKLSAgLy8gdGhlIGlucHV0
IEZpZWxkRGVzY3JpcHRvciBpcyBndWFyYW50ZWVkIHRvIGJlIHJlcGVhdGVkIGZpZWxkLgotICBj
b25zdCBSZWZsZWN0aW9uKiByZWZsZWN0aW9uMSA9IG1lc3NhZ2UxLkdldFJlZmxlY3Rpb24oKTsK
LSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbjIgPSBtZXNzYWdlMi5HZXRSZWZsZWN0aW9u
KCk7Ci0gIGNvbnN0IGludCBjb3VudDEgPSByZWZsZWN0aW9uMS0+RmllbGRTaXplKG1lc3NhZ2Ux
LCByZXBlYXRlZF9maWVsZCk7Ci0gIGNvbnN0IGludCBjb3VudDIgPSByZWZsZWN0aW9uMi0+Rmll
bGRTaXplKG1lc3NhZ2UyLCByZXBlYXRlZF9maWVsZCk7Ci0gIGNvbnN0IGJvb2wgdHJlYXRlZF9h
c19zdWJzZXQgPSBJc1RyZWF0ZWRBc1N1YnNldChyZXBlYXRlZF9maWVsZCk7Ci0KLSAgLy8gSWYg
dGhlIGZpZWxkIGlzIG5vdCB0cmVhdGVkIGFzIHN1YnNldCBhbmQgbm8gZGV0YWlsZWQgcmVwb3J0
cyBpcyBuZWVkZWQsCi0gIC8vIHdlIGRvIGEgcXVpY2sgY2hlY2sgb24gdGhlIG51bWJlciBvZiB0
aGUgZWxlbWVudHMgdG8gYXZvaWQgdW5uZWNlc3NhcnkKLSAgLy8gY29tcGFyaXNvbi4KLSAgaWYg
KGNvdW50MSAhPSBjb3VudDIgJiYgcmVwb3J0ZXJfID09IE5VTEwgJiYgIXRyZWF0ZWRfYXNfc3Vi
c2V0KSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIC8vIEEgbWF0Y2ggY2FuIG5ldmVyIGJl
IGZvdW5kIGlmIG1lc3NhZ2UxIGhhcyBtb3JlIGl0ZW1zIHRoYW4gbWVzc2FnZTIuCi0gIGlmIChj
b3VudDEgPiBjb3VudDIgJiYgcmVwb3J0ZXJfID09IE5VTEwpIHsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLQotICAvLyBUaGVzZSB0d28gbGlzdCBhcmUgdXNlZCBmb3Igc3RvcmUgdGhlIGluZGV4
IG9mIHRoZSBjb3JyZXNwb25kZW50Ci0gIC8vIGVsZW1lbnQgaW4gcGVlciByZXBlYXRlZCBmaWVs
ZC4KLSAgdmVjdG9yPGludD4gbWF0Y2hfbGlzdDE7Ci0gIHZlY3RvcjxpbnQ+IG1hdGNoX2xpc3Qy
OwotCi0gIC8vIFRyeSB0byBtYXRjaCBpbmRpY2VzIG9mIHRoZSByZXBlYXRlZCBmaWVsZHMuIFJl
dHVybiBmYWxzZSBpZiBtYXRjaCBmYWlscwotICAvLyBhbmQgdGhlcmUncyBubyBkZXRhaWxlZCBy
ZXBvcnQgbmVlZGVkLgotICBpZiAoIU1hdGNoUmVwZWF0ZWRGaWVsZEluZGljZXMobWVzc2FnZTEs
IG1lc3NhZ2UyLCByZXBlYXRlZF9maWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpwYXJlbnRfZmllbGRzLCAmbWF0Y2hfbGlzdDEsICZtYXRjaF9saXN0MikgJiYKLSAgICAg
IHJlcG9ydGVyXyA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgYm9vbCBm
aWVsZERpZmZlcmVudCA9IGZhbHNlOwotICBTcGVjaWZpY0ZpZWxkIHNwZWNpZmljX2ZpZWxkOwot
ICBzcGVjaWZpY19maWVsZC5maWVsZCA9IHJlcGVhdGVkX2ZpZWxkOwotCi0gIC8vIEF0IHRoaXMg
cG9pbnQsIHdlIGhhdmUgYWxyZWFkeSBtYXRjaGVkIHBhaXJzIG9mIGZpZWxkcyAod2l0aCB0aGUg
cmVwb3J0aW5nCi0gIC8vIHRvIGJlIGRvbmUgbGF0ZXIpLiBOb3cgdG8gY2hlY2sgaWYgdGhlIHBh
aXJlZCBlbGVtZW50cyBhcmUgZGlmZmVyZW50LgotICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
MTsgaSsrKSB7Ci0gICAgaWYgKG1hdGNoX2xpc3QxW2ldID09IC0xKSBjb250aW51ZTsKLSAgICBz
cGVjaWZpY19maWVsZC5pbmRleCA9IGk7Ci0gICAgc3BlY2lmaWNfZmllbGQubmV3X2luZGV4ID0g
bWF0Y2hfbGlzdDFbaV07Ci0KLSAgICBjb25zdCBib29sIHJlc3VsdCA9IENvbXBhcmVGaWVsZFZh
bHVlVXNpbmdQYXJlbnRGaWVsZHMoCi0gICAgICAgIG1lc3NhZ2UxLCBtZXNzYWdlMiwgcmVwZWF0
ZWRfZmllbGQsIGksIHNwZWNpZmljX2ZpZWxkLm5ld19pbmRleCwKLSAgICAgICAgcGFyZW50X2Zp
ZWxkcyk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGZvdW5kIGRpZmZlcmVuY2VzLCBlaXRoZXIgcmVw
b3J0IHRoZW0gb3IgdGVybWluYXRlIGlmCi0gICAgLy8gbm8gcmVwb3J0ZXIgaXMgcHJlc2VudC4g
Tm90ZSB0aGF0IFJlcG9ydE1vZGlmaWVkLCBSZXBvcnRNb3ZlZCwgYW5kCi0gICAgLy8gUmVwb3J0
TWF0Y2hlZCBhcmUgYWxsIG11dHVhbGx5IGV4Y2x1c2l2ZS4KLSAgICBpZiAoIXJlc3VsdCkgewot
ICAgICAgaWYgKHJlcG9ydGVyXyA9PSBOVUxMKSByZXR1cm4gZmFsc2U7Ci0gICAgICBwYXJlbnRf
ZmllbGRzLT5wdXNoX2JhY2soc3BlY2lmaWNfZmllbGQpOwotICAgICAgcmVwb3J0ZXJfLT5SZXBv
cnRNb2RpZmllZChtZXNzYWdlMSwgbWVzc2FnZTIsICpwYXJlbnRfZmllbGRzKTsKLSAgICAgIHBh
cmVudF9maWVsZHMtPnBvcF9iYWNrKCk7Ci0gICAgICBmaWVsZERpZmZlcmVudCA9IHRydWU7Ci0g
ICAgfSBlbHNlIGlmIChyZXBvcnRlcl8gIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgc3BlY2lm
aWNfZmllbGQuaW5kZXggIT0gc3BlY2lmaWNfZmllbGQubmV3X2luZGV4KSB7Ci0gICAgICBwYXJl
bnRfZmllbGRzLT5wdXNoX2JhY2soc3BlY2lmaWNfZmllbGQpOwotICAgICAgcmVwb3J0ZXJfLT5S
ZXBvcnRNb3ZlZChtZXNzYWdlMSwgbWVzc2FnZTIsICpwYXJlbnRfZmllbGRzKTsKLSAgICAgIHBh
cmVudF9maWVsZHMtPnBvcF9iYWNrKCk7Ci0gICAgfSBlbHNlIGlmIChyZXBvcnRfbWF0Y2hlc18g
JiYgcmVwb3J0ZXJfICE9IE5VTEwpIHsKLSAgICAgIHBhcmVudF9maWVsZHMtPnB1c2hfYmFjayhz
cGVjaWZpY19maWVsZCk7Ci0gICAgICByZXBvcnRlcl8tPlJlcG9ydE1hdGNoZWQobWVzc2FnZTEs
IG1lc3NhZ2UyLCAqcGFyZW50X2ZpZWxkcyk7Ci0gICAgICBwYXJlbnRfZmllbGRzLT5wb3BfYmFj
aygpOwotICAgIH0KLSAgfQotCi0gIC8vIFJlcG9ydCBhbnkgcmVtYWluaW5nIGFkZGl0aW9ucyBv
ciBkZWxldGlvbnMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQyOyArK2kpIHsKLSAgICBp
ZiAobWF0Y2hfbGlzdDJbaV0gIT0gLTEpIGNvbnRpbnVlOwotICAgIGlmICghdHJlYXRlZF9hc19z
dWJzZXQpIHsKLSAgICAgIGZpZWxkRGlmZmVyZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
cmVwb3J0ZXJfID09IE5VTEwpIGNvbnRpbnVlOwotICAgIHNwZWNpZmljX2ZpZWxkLmluZGV4ID0g
aTsKLSAgICBzcGVjaWZpY19maWVsZC5uZXdfaW5kZXggPSBpOwotICAgIHBhcmVudF9maWVsZHMt
PnB1c2hfYmFjayhzcGVjaWZpY19maWVsZCk7Ci0gICAgcmVwb3J0ZXJfLT5SZXBvcnRBZGRlZCht
ZXNzYWdlMSwgbWVzc2FnZTIsICpwYXJlbnRfZmllbGRzKTsKLSAgICBwYXJlbnRfZmllbGRzLT5w
b3BfYmFjaygpOwotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDE7ICsraSkgewot
ICAgIGlmIChtYXRjaF9saXN0MVtpXSAhPSAtMSkgY29udGludWU7Ci0gICAgc3BlY2lmaWNfZmll
bGQuaW5kZXggPSBpOwotICAgIHBhcmVudF9maWVsZHMtPnB1c2hfYmFjayhzcGVjaWZpY19maWVs
ZCk7Ci0gICAgcmVwb3J0ZXJfLT5SZXBvcnREZWxldGVkKG1lc3NhZ2UxLCBtZXNzYWdlMiwgKnBh
cmVudF9maWVsZHMpOwotICAgIHBhcmVudF9maWVsZHMtPnBvcF9iYWNrKCk7Ci0gICAgZmllbGRE
aWZmZXJlbnQgPSB0cnVlOwotICB9Ci0gIHJldHVybiAhZmllbGREaWZmZXJlbnQ7Ci19Ci0KLWJv
b2wgTWVzc2FnZURpZmZlcmVuY2VyOjpDb21wYXJlRmllbGRWYWx1ZShjb25zdCBNZXNzYWdlJiBt
ZXNzYWdlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleDEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4MikgewotICByZXR1cm4gQ29tcGFyZUZp
ZWxkVmFsdWVVc2luZ1BhcmVudEZpZWxkcyhtZXNzYWdlMSwgbWVzc2FnZTIsIGZpZWxkLCBpbmRl
eDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Miwg
TlVMTCk7Ci19Ci0KLWJvb2wgTWVzc2FnZURpZmZlcmVuY2VyOjpDb21wYXJlRmllbGRWYWx1ZVVz
aW5nUGFyZW50RmllbGRzKAotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLCBjb25zdCBNZXNz
YWdlJiBtZXNzYWdlMiwKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCBpbnQgaW5k
ZXgxLCBpbnQgaW5kZXgyLAotICAgIHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiogcGFyZW50X2ZpZWxk
cykgewotICBGaWVsZENvbnRleHQgZmllbGRfY29udGV4dChwYXJlbnRfZmllbGRzKTsKLSAgRmll
bGRDb21wYXJhdG9yOjpDb21wYXJpc29uUmVzdWx0IHJlc3VsdCA9IEdldEZpZWxkQ29tcGFyaXNv
blJlc3VsdCgKLSAgICAgIG1lc3NhZ2UxLCBtZXNzYWdlMiwgZmllbGQsIGluZGV4MSwgaW5kZXgy
LCAmZmllbGRfY29udGV4dCk7Ci0KLSAgaWYgKGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxkRGVz
Y3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFICYmCi0gICAgICByZXN1bHQgPT0gRmllbGRDb21wYXJh
dG9yOjpSRUNVUlNFKSB7Ci0gICAgLy8gR2V0IHRoZSBuZXN0ZWQgbWVzc2FnZXMgYW5kIGNvbXBh
cmUgdGhlbSB1c2luZyBvbmUgb2YgdGhlIENvbXBhcmUKLSAgICAvLyBtZXRob2RzLgotICAgIGNv
bnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24xID0gbWVzc2FnZTEuR2V0UmVmbGVjdGlvbigpOwot
ICAgIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24yID0gbWVzc2FnZTIuR2V0UmVmbGVjdGlv
bigpOwotICAgIGNvbnN0IE1lc3NhZ2UmIG0xID0gZmllbGQtPmlzX3JlcGVhdGVkKCkgPwotICAg
ICAgICByZWZsZWN0aW9uMS0+R2V0UmVwZWF0ZWRNZXNzYWdlKG1lc3NhZ2UxLCBmaWVsZCwgaW5k
ZXgxKSA6Ci0gICAgICAgIHJlZmxlY3Rpb24xLT5HZXRNZXNzYWdlKG1lc3NhZ2UxLCBmaWVsZCk7
Ci0gICAgY29uc3QgTWVzc2FnZSYgbTIgPSBmaWVsZC0+aXNfcmVwZWF0ZWQoKSA/Ci0gICAgICAg
IHJlZmxlY3Rpb24yLT5HZXRSZXBlYXRlZE1lc3NhZ2UobWVzc2FnZTIsIGZpZWxkLCBpbmRleDIp
IDoKLSAgICAgICAgcmVmbGVjdGlvbjItPkdldE1lc3NhZ2UobWVzc2FnZTIsIGZpZWxkKTsKLQot
ICAgIC8vIHBhcmVudF9maWVsZHMgaXMgdXNlZCBpbiBjYWxscyB0byBSZXBvcnRlciBtZXRob2Rz
LgotICAgIGlmIChwYXJlbnRfZmllbGRzICE9IE5VTEwpIHsKLSAgICAgIC8vIEFwcGVuZCBjdXJy
ZW50bHkgY29tcGFyZWQgZmllbGQgdG8gdGhlIGVuZCBvZiBwYXJlbnRfZmllbGRzLgotICAgICAg
U3BlY2lmaWNGaWVsZCBzcGVjaWZpY19maWVsZDsKLSAgICAgIHNwZWNpZmljX2ZpZWxkLmZpZWxk
ID0gZmllbGQ7Ci0gICAgICBzcGVjaWZpY19maWVsZC5pbmRleCA9IGluZGV4MTsKLSAgICAgIHNw
ZWNpZmljX2ZpZWxkLm5ld19pbmRleCA9IGluZGV4MjsKLSAgICAgIHBhcmVudF9maWVsZHMtPnB1
c2hfYmFjayhzcGVjaWZpY19maWVsZCk7Ci0gICAgICBjb25zdCBib29sIGNvbXBhcmVfcmVzdWx0
ID0gQ29tcGFyZShtMSwgbTIsIHBhcmVudF9maWVsZHMpOwotICAgICAgcGFyZW50X2ZpZWxkcy0+
cG9wX2JhY2soKTsKLSAgICAgIHJldHVybiBjb21wYXJlX3Jlc3VsdDsKLSAgICB9IGVsc2Ugewot
ICAgICAgLy8gUmVjcmVhdGVzIHBhcmVudF9maWVsZHMgYXMgaWYgbTEgYW5kIG0yIGhhZCBubyBw
YXJlbnRzLgotICAgICAgcmV0dXJuIENvbXBhcmUobTEsIG0yKTsKLSAgICB9Ci0gIH0gZWxzZSB7
Ci0gICAgcmV0dXJuIChyZXN1bHQgPT0gRmllbGRDb21wYXJhdG9yOjpTQU1FKTsKLSAgfQotfQot
Ci1ib29sIE1lc3NhZ2VEaWZmZXJlbmNlcjo6Q2hlY2tQYXRoQ2hhbmdlZCgKLSAgICBjb25zdCB2
ZWN0b3I8U3BlY2lmaWNGaWVsZD4mIGZpZWxkX3BhdGgpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmaWVsZF9wYXRoLnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKGZpZWxkX3BhdGhbaV0uaW5kZXgg
IT0gZmllbGRfcGF0aFtpXS5uZXdfaW5kZXgpIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBNZXNzYWdlRGlmZmVyZW5jZXI6OklzVHJlYXRlZEFzU2V0KGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgaWYgKCFmaWVsZC0+aXNfcmVwZWF0ZWQoKSkg
cmV0dXJuIGZhbHNlOwotICBpZiAoZmllbGQtPmlzX21hcCgpKSByZXR1cm4gdHJ1ZTsKLSAgaWYg
KHJlcGVhdGVkX2ZpZWxkX2NvbXBhcmlzb25fID09IEFTX1NFVCkKLSAgICByZXR1cm4gbGlzdF9m
aWVsZHNfLmZpbmQoZmllbGQpID09IGxpc3RfZmllbGRzXy5lbmQoKTsKLSAgcmV0dXJuIChzZXRf
ZmllbGRzXy5maW5kKGZpZWxkKSAhPSBzZXRfZmllbGRzXy5lbmQoKSk7Ci19Ci0KLWJvb2wgTWVz
c2FnZURpZmZlcmVuY2VyOjpJc1RyZWF0ZWRBc1N1YnNldChjb25zdCBGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkKSB7Ci0gIHJldHVybiBzY29wZV8gPT0gUEFSVElBTCAmJgotICAgICAgKElzVHJlYXRl
ZEFzU2V0KGZpZWxkKSB8fCBHZXRNYXBLZXlDb21wYXJhdG9yKGZpZWxkKSAhPSBOVUxMKTsKLX0K
LQotYm9vbCBNZXNzYWdlRGlmZmVyZW5jZXI6OklzSWdub3JlZCgKLSAgICBjb25zdCBNZXNzYWdl
JiBtZXNzYWdlMSwKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAgICBjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIGNvbnN0IHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiYgcGFy
ZW50X2ZpZWxkcykgewotICBpZiAoaWdub3JlZF9maWVsZHNfLmZpbmQoZmllbGQpICE9IGlnbm9y
ZWRfZmllbGRzXy5lbmQoKSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgaWdub3JlX2NyaXRlcmlhXy5zaXplKCk7ICsraSkgewotICAgIGlmIChpZ25vcmVf
Y3JpdGVyaWFfW2ldLT5Jc0lnbm9yZWQobWVzc2FnZTEsIG1lc3NhZ2UyLCBmaWVsZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF9maWVsZHMpKSB7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE1l
c3NhZ2VEaWZmZXJlbmNlcjo6SXNVbmtub3duRmllbGRJZ25vcmVkKAotICAgIGNvbnN0IE1lc3Nh
Z2UmIG1lc3NhZ2UxLCBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAgICBjb25zdCBTcGVjaWZp
Y0ZpZWxkJiBmaWVsZCwgY29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBwYXJlbnRfZmllbGRz
KSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgaWdub3JlX2NyaXRlcmlhXy5zaXplKCk7ICsraSkg
ewotICAgIGlmIChpZ25vcmVfY3JpdGVyaWFfW2ldLT5Jc1Vua25vd25GaWVsZElnbm9yZWQobWVz
c2FnZTEsIG1lc3NhZ2UyLCBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmVudF9maWVsZHMpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1jb25zdCBNZXNzYWdlRGlmZmVyZW5j
ZXI6Ok1hcEtleUNvbXBhcmF0b3IqIE1lc3NhZ2VEaWZmZXJlbmNlcgotICAgIDo6R2V0TWFwS2V5
Q29tcGFyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIGlmICghZmllbGQt
PmlzX3JlcGVhdGVkKCkpIHJldHVybiBOVUxMOwotICBpZiAobWFwX2ZpZWxkX2tleV9jb21wYXJh
dG9yXy5maW5kKGZpZWxkKSAhPQotICAgICAgbWFwX2ZpZWxkX2tleV9jb21wYXJhdG9yXy5lbmQo
KSkgewotICAgIHJldHVybiBtYXBfZmllbGRfa2V5X2NvbXBhcmF0b3JfW2ZpZWxkXTsKLSAgfQot
ICByZXR1cm4gTlVMTDsKLX0KLQotbmFtZXNwYWNlIHsKLQotdHlwZWRlZiBwYWlyPGludCwgY29u
c3QgVW5rbm93bkZpZWxkKj4gSW5kZXhVbmtub3duRmllbGRQYWlyOwotCi1zdHJ1Y3QgVW5rbm93
bkZpZWxkT3JkZXJpbmcgewotICBpbmxpbmUgYm9vbCBvcGVyYXRvcigpKGNvbnN0IEluZGV4VW5r
bm93bkZpZWxkUGFpciYgYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleFVu
a25vd25GaWVsZFBhaXImIGIpIGNvbnN0IHsKLSAgICBpZiAoYS5zZWNvbmQtPm51bWJlcigpIDwg
Yi5zZWNvbmQtPm51bWJlcigpKSByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoYS5zZWNvbmQtPm51bWJl
cigpID4gYi5zZWNvbmQtPm51bWJlcigpKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGEuc2Vj
b25kLT50eXBlKCkgPCBiLnNlY29uZC0+dHlwZSgpOwotICB9Ci19OwotCi19ICAvLyBuYW1lc3Bh
Y2UKLQotYm9vbCBNZXNzYWdlRGlmZmVyZW5jZXI6OlVucGFja0FueShjb25zdCBNZXNzYWdlJiBh
bnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZTo6cHJvdG9idWY6
OnNjb3BlZF9wdHI8TWVzc2FnZT4qIGRhdGEpIHsKLSAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVj
dGlvbiA9IGFueS5HZXRSZWZsZWN0aW9uKCk7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdHlw
ZV91cmxfZmllbGQ7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogdmFsdWVfZmllbGQ7Ci0gIGlm
ICghaW50ZXJuYWw6OkdldEFueUZpZWxkRGVzY3JpcHRvcnMoYW55LCAmdHlwZV91cmxfZmllbGQs
ICZ2YWx1ZV9maWVsZCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgY29uc3Qgc3RyaW5n
JiB0eXBlX3VybCA9IHJlZmxlY3Rpb24tPkdldFN0cmluZyhhbnksIHR5cGVfdXJsX2ZpZWxkKTsK
LSAgc3RyaW5nIGZ1bGxfdHlwZV9uYW1lOwotICBpZiAoIWludGVybmFsOjpQYXJzZUFueVR5cGVV
cmwodHlwZV91cmwsICZmdWxsX3R5cGVfbmFtZSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LQotICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjID0KLSAgICAgIGFu
eS5HZXREZXNjcmlwdG9yKCktPmZpbGUoKS0+cG9vbCgpLT5GaW5kTWVzc2FnZVR5cGVCeU5hbWUo
Ci0gICAgICAgICAgZnVsbF90eXBlX25hbWUpOwotICBpZiAoZGVzYyA9PSBOVUxMKSB7Ci0gICAg
R09PR0xFX0RMT0coRVJST1IpIDw8ICJQcm90byB0eXBlICciIDw8IGZ1bGxfdHlwZV9uYW1lIDw8
ICInIG5vdCBmb3VuZCI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKGR5bmFtaWNf
bWVzc2FnZV9mYWN0b3J5XyA9PSBOVUxMKSB7Ci0gICAgZHluYW1pY19tZXNzYWdlX2ZhY3Rvcnlf
LnJlc2V0KG5ldyBEeW5hbWljTWVzc2FnZUZhY3RvcnkoKSk7Ci0gIH0KLSAgZGF0YS0+cmVzZXQo
ZHluYW1pY19tZXNzYWdlX2ZhY3RvcnlfLT5HZXRQcm90b3R5cGUoZGVzYyktPk5ldygpKTsKLSAg
c3RyaW5nIHNlcmlhbGl6ZWRfdmFsdWUgPSByZWZsZWN0aW9uLT5HZXRTdHJpbmcoYW55LCB2YWx1
ZV9maWVsZCk7Ci0gIGlmICghKCpkYXRhKS0+UGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWRfdmFs
dWUpKSB7Ci0gICAgR09PR0xFX0RMT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gcGFyc2UgdmFsdWUg
Zm9yICIgPDwgZnVsbF90eXBlX25hbWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVy
biB0cnVlOwotfQotCi1ib29sIE1lc3NhZ2VEaWZmZXJlbmNlcjo6Q29tcGFyZVVua25vd25GaWVs
ZHMoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2Uy
LAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYgdW5rbm93bl9m
aWVsZF9zZXQxLAotICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYg
dW5rbm93bl9maWVsZF9zZXQyLAotICAgIHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiogcGFyZW50X2Zp
ZWxkKSB7Ci0gIC8vIElnbm9yZSB1bmtub3duIGZpZWxkcyBpbiBFUVVJVkFMRU5UIG1vZGUuCi0g
IGlmIChtZXNzYWdlX2ZpZWxkX2NvbXBhcmlzb25fID09IEVRVUlWQUxFTlQpIHJldHVybiB0cnVl
OwotCi0gIGlmICh1bmtub3duX2ZpZWxkX3NldDEuZW1wdHkoKSAmJiB1bmtub3duX2ZpZWxkX3Nl
dDIuZW1wdHkoKSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgYm9vbCBpc19kaWZmZXJl
bnQgPSBmYWxzZTsKLQotICAvLyBXZSBmaXJzdCBzb3J0IHRoZSB1bmtub3duIGZpZWxkcyBieSBm
aWVsZCBudW1iZXIgYW5kIHR5cGUgKGluIG90aGVyIHdvcmRzLAotICAvLyBpbiB0YWcgb3JkZXIp
LCBtYWtpbmcgc3VyZSB0byBwcmVzZXJ2ZSBvcmRlcmluZyBvZiB2YWx1ZXMgd2l0aCB0aGUgc2Ft
ZQotICAvLyB0YWcuICBUaGlzIGFsbG93cyB1cyB0byByZXBvcnQgb25seSBtZWFuaW5nZnVsIGRp
ZmZlcmVuY2VzIGJldHdlZW4gdGhlCi0gIC8vIHR3byBzZXRzIC0tIHRoYXQgaXMsIGRpZmZlcmlu
ZyB2YWx1ZXMgZm9yIHRoZSBzYW1lIHRhZy4gIFdlIHVzZQotICAvLyBJbmRleFVua25vd25GaWVs
ZFBhaXJzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGZpZWxkJ3Mgb3JpZ2luYWwgaW5kZXggZm9yCi0g
IC8vIHJlcG9ydGluZyBwdXJwb3Nlcy4KLSAgdmVjdG9yPEluZGV4VW5rbm93bkZpZWxkUGFpcj4g
ZmllbGRzMTsgIC8vIHVua25vd25fZmllbGRfc2V0MSwgc29ydGVkCi0gIHZlY3RvcjxJbmRleFVu
a25vd25GaWVsZFBhaXI+IGZpZWxkczI7ICAvLyB1bmtub3duX2ZpZWxkX3NldDIsIHNvcnRlZAot
ICBmaWVsZHMxLnJlc2VydmUodW5rbm93bl9maWVsZF9zZXQxLmZpZWxkX2NvdW50KCkpOwotICBm
aWVsZHMyLnJlc2VydmUodW5rbm93bl9maWVsZF9zZXQyLmZpZWxkX2NvdW50KCkpOwotCi0gIGZv
ciAoaW50IGkgPSAwOyBpIDwgdW5rbm93bl9maWVsZF9zZXQxLmZpZWxkX2NvdW50KCk7IGkrKykg
ewotICAgIGZpZWxkczEucHVzaF9iYWNrKHN0ZDo6bWFrZV9wYWlyKGksICZ1bmtub3duX2ZpZWxk
X3NldDEuZmllbGQoaSkpKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IHVua25vd25fZmll
bGRfc2V0Mi5maWVsZF9jb3VudCgpOyBpKyspIHsKLSAgICBmaWVsZHMyLnB1c2hfYmFjayhzdGQ6
Om1ha2VfcGFpcihpLCAmdW5rbm93bl9maWVsZF9zZXQyLmZpZWxkKGkpKSk7Ci0gIH0KLQotICBV
bmtub3duRmllbGRPcmRlcmluZyBpc19iZWZvcmU7Ci0gIHN0ZDo6c3RhYmxlX3NvcnQoZmllbGRz
MS5iZWdpbigpLCBmaWVsZHMxLmVuZCgpLCBpc19iZWZvcmUpOwotICBzdGQ6OnN0YWJsZV9zb3J0
KGZpZWxkczIuYmVnaW4oKSwgZmllbGRzMi5lbmQoKSwgaXNfYmVmb3JlKTsKLQotICAvLyBJbiBv
cmRlciB0byBmaWxsIGluIFNwZWNpZmljRmllbGQ6OmluZGV4LCB3ZSBoYXZlIHRvIGtlZXAgdHJh
Y2sgb2YgaG93Ci0gIC8vIG1hbnkgdmFsdWVzIHdlJ3ZlIHNlZW4gd2l0aCB0aGUgc2FtZSBmaWVs
ZCBudW1iZXIgYW5kIHR5cGUuCi0gIC8vIGN1cnJlbnRfcmVwZWF0ZWQgcG9pbnRzIGF0IHRoZSBm
aXJzdCBmaWVsZCBpbiB0aGlzIHJhbmdlLCBhbmQKLSAgLy8gY3VycmVudF9yZXBlYXRlZF9zdGFy
dHsxLDJ9IGFyZSB0aGUgaW5kZXhlcyBvZiB0aGUgZmlyc3QgZmllbGQgaW4gdGhlCi0gIC8vIHJh
bmdlIHdpdGhpbiBmaWVsZHMxIGFuZCBmaWVsZHMyLgotICBjb25zdCBVbmtub3duRmllbGQqIGN1
cnJlbnRfcmVwZWF0ZWQgPSBOVUxMOwotICBpbnQgY3VycmVudF9yZXBlYXRlZF9zdGFydDEgPSAw
OwotICBpbnQgY3VycmVudF9yZXBlYXRlZF9zdGFydDIgPSAwOwotCi0gIC8vIE5vdyB0aGF0IHdl
IGhhdmUgdHdvIHNvcnRlZCBsaXN0cywgd2UgY2FuIGRldGVjdCBmaWVsZHMgd2hpY2ggYXBwZWFy
IG9ubHkKLSAgLy8gaW4gb25lIGxpc3Qgb3IgdGhlIG90aGVyIGJ5IHRyYXZlcnNpbmcgdGhlbSBz
aW11bHRhbmVvdXNseS4KLSAgaW50IGluZGV4MSA9IDA7Ci0gIGludCBpbmRleDIgPSAwOwotICB3
aGlsZSAoaW5kZXgxIDwgZmllbGRzMS5zaXplKCkgfHwgaW5kZXgyIDwgZmllbGRzMi5zaXplKCkp
IHsKLSAgICBlbnVtIHsgQURESVRJT04sIERFTEVUSU9OLCBNT0RJRklDQVRJT04sIENPTVBBUkVf
R1JPVVBTLAotICAgICAgTk9fQ0hBTkdFIH0gY2hhbmdlX3R5cGU7Ci0KLSAgICAvLyBmb2N1c19m
aWVsZCBpcyB0aGUgZmllbGQgd2UncmUgY3VycmVudGx5IHJlcG9ydGluZyBvbi4gIChJbiB0aGUg
Y2FzZQotICAgIC8vIG9mIGEgbW9kaWZpY2F0aW9uLCBpdCdzIHRoZSBmaWVsZCBvbiB0aGUgbGVm
dCBzaWRlLikKLSAgICBjb25zdCBVbmtub3duRmllbGQqIGZvY3VzX2ZpZWxkOwotICAgIGJvb2wg
bWF0Y2ggPSBmYWxzZTsKLQotICAgIGlmIChpbmRleDIgPT0gZmllbGRzMi5zaXplKCkgfHwKLSAg
ICAgICAgKGluZGV4MSA8IGZpZWxkczEuc2l6ZSgpICYmCi0gICAgICAgICAgaXNfYmVmb3JlKGZp
ZWxkczFbaW5kZXgxXSwgZmllbGRzMltpbmRleDJdKSkpIHsKLSAgICAgIC8vIGZpZWxkczFbaW5k
ZXgxXSBpcyBub3QgcHJlc2VudCBpbiBmaWVsZHMyLgotICAgICAgY2hhbmdlX3R5cGUgPSBERUxF
VElPTjsKLSAgICAgIGZvY3VzX2ZpZWxkID0gZmllbGRzMVtpbmRleDFdLnNlY29uZDsKLSAgICB9
IGVsc2UgaWYgKGluZGV4MSA9PSBmaWVsZHMxLnNpemUoKSB8fAotICAgICAgICAgICAgICAgaXNf
YmVmb3JlKGZpZWxkczJbaW5kZXgyXSwgZmllbGRzMVtpbmRleDFdKSkgewotICAgICAgLy8gZmll
bGRzMltpbmRleDJdIGlzIG5vdCBwcmVzZW50IGluIGZpZWxkczEuCi0gICAgICBpZiAoc2NvcGVf
ID09IFBBUlRJQUwpIHsKLSAgICAgICAgLy8gSWdub3JlLgotICAgICAgICArK2luZGV4MjsKLSAg
ICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBjaGFuZ2VfdHlwZSA9IEFERElUSU9OOwot
ICAgICAgZm9jdXNfZmllbGQgPSBmaWVsZHMyW2luZGV4Ml0uc2Vjb25kOwotICAgIH0gZWxzZSB7
Ci0gICAgICAvLyBGaWVsZCB0eXBlIGFuZCBudW1iZXIgYXJlIHRoZSBzYW1lLiAgU2VlIGlmIHRo
ZSB2YWx1ZXMgZGlmZmVyLgotICAgICAgY2hhbmdlX3R5cGUgPSBNT0RJRklDQVRJT047Ci0gICAg
ICBmb2N1c19maWVsZCA9IGZpZWxkczFbaW5kZXgxXS5zZWNvbmQ7Ci0KLSAgICAgIHN3aXRjaCAo
Zm9jdXNfZmllbGQtPnR5cGUoKSkgewotICAgICAgICBjYXNlIFVua25vd25GaWVsZDo6VFlQRV9W
QVJJTlQ6Ci0gICAgICAgICAgbWF0Y2ggPSBmaWVsZHMxW2luZGV4MV0uc2Vjb25kLT52YXJpbnQo
KSA9PQotICAgICAgICAgICAgICAgICAgZmllbGRzMltpbmRleDJdLnNlY29uZC0+dmFyaW50KCk7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVW5rbm93bkZpZWxkOjpUWVBFX0ZJWEVE
MzI6Ci0gICAgICAgICAgbWF0Y2ggPSBmaWVsZHMxW2luZGV4MV0uc2Vjb25kLT5maXhlZDMyKCkg
PT0KLSAgICAgICAgICAgICAgICAgIGZpZWxkczJbaW5kZXgyXS5zZWNvbmQtPmZpeGVkMzIoKTsK
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbmtub3duRmllbGQ6OlRZUEVfRklYRUQ2
NDoKLSAgICAgICAgICBtYXRjaCA9IGZpZWxkczFbaW5kZXgxXS5zZWNvbmQtPmZpeGVkNjQoKSA9
PQotICAgICAgICAgICAgICAgICAgZmllbGRzMltpbmRleDJdLnNlY29uZC0+Zml4ZWQ2NCgpOwot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVua25vd25GaWVsZDo6VFlQRV9MRU5HVEhf
REVMSU1JVEVEOgotICAgICAgICAgIG1hdGNoID0gZmllbGRzMVtpbmRleDFdLnNlY29uZC0+bGVu
Z3RoX2RlbGltaXRlZCgpID09Ci0gICAgICAgICAgICAgICAgICBmaWVsZHMyW2luZGV4Ml0uc2Vj
b25kLT5sZW5ndGhfZGVsaW1pdGVkKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
VW5rbm93bkZpZWxkOjpUWVBFX0dST1VQOgotICAgICAgICAgIC8vIFdlIG11c3QgZGVhbCB3aXRo
IHRoaXMgbGF0ZXIsIGFmdGVyIGJ1aWxkaW5nIHRoZSBTcGVjaWZpY0ZpZWxkLgotICAgICAgICAg
IGNoYW5nZV90eXBlID0gQ09NUEFSRV9HUk9VUFM7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0gICAgICBpZiAobWF0Y2ggJiYgY2hhbmdlX3R5cGUgIT0gQ09NUEFSRV9HUk9VUFMpIHsKLSAg
ICAgICAgY2hhbmdlX3R5cGUgPSBOT19DSEFOR0U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGN1cnJlbnRfcmVwZWF0ZWQgPT0gTlVMTCB8fAotICAgICAgICBmb2N1c19maWVsZC0+bnVtYmVy
KCkgIT0gY3VycmVudF9yZXBlYXRlZC0+bnVtYmVyKCkgfHwKLSAgICAgICAgZm9jdXNfZmllbGQt
PnR5cGUoKSAhPSBjdXJyZW50X3JlcGVhdGVkLT50eXBlKCkpIHsKLSAgICAgIC8vIFdlJ3ZlIHN0
YXJ0ZWQgYSBuZXcgcmVwZWF0ZWQgZmllbGQuCi0gICAgICBjdXJyZW50X3JlcGVhdGVkID0gZm9j
dXNfZmllbGQ7Ci0gICAgICBjdXJyZW50X3JlcGVhdGVkX3N0YXJ0MSA9IGluZGV4MTsKLSAgICAg
IGN1cnJlbnRfcmVwZWF0ZWRfc3RhcnQyID0gaW5kZXgyOwotICAgIH0KLQotICAgIGlmIChjaGFu
Z2VfdHlwZSA9PSBOT19DSEFOR0UgJiYgcmVwb3J0ZXJfID09IE5VTEwpIHsKLSAgICAgIC8vIEZp
ZWxkcyB3ZXJlIGFscmVhZHkgY29tcGFyZWQgYW5kIG1hdGNoZWQgYW5kIHdlIGhhdmUgbm8gcmVw
b3J0ZXIuCi0gICAgICArK2luZGV4MTsKLSAgICAgICsraW5kZXgyOwotICAgICAgY29udGludWU7
Ci0gICAgfQotCi0gICAgLy8gQnVpbGQgdGhlIFNwZWNpZmljRmllbGQuICBUaGlzIGlzIHNsaWdo
dGx5IGNvbXBsaWNhdGVkLgotICAgIFNwZWNpZmljRmllbGQgc3BlY2lmaWNfZmllbGQ7Ci0gICAg
c3BlY2lmaWNfZmllbGQudW5rbm93bl9maWVsZF9udW1iZXIgPSBmb2N1c19maWVsZC0+bnVtYmVy
KCk7Ci0gICAgc3BlY2lmaWNfZmllbGQudW5rbm93bl9maWVsZF90eXBlID0gZm9jdXNfZmllbGQt
PnR5cGUoKTsKLQotICAgIHNwZWNpZmljX2ZpZWxkLnVua25vd25fZmllbGRfc2V0MSA9ICZ1bmtu
b3duX2ZpZWxkX3NldDE7Ci0gICAgc3BlY2lmaWNfZmllbGQudW5rbm93bl9maWVsZF9zZXQyID0g
JnVua25vd25fZmllbGRfc2V0MjsKLQotICAgIGlmIChjaGFuZ2VfdHlwZSAhPSBBRERJVElPTikg
ewotICAgICAgc3BlY2lmaWNfZmllbGQudW5rbm93bl9maWVsZF9pbmRleDEgPSBmaWVsZHMxW2lu
ZGV4MV0uZmlyc3Q7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VfdHlwZSAhPSBERUxFVElPTikgewot
ICAgICAgc3BlY2lmaWNfZmllbGQudW5rbm93bl9maWVsZF9pbmRleDIgPSBmaWVsZHMyW2luZGV4
Ml0uZmlyc3Q7Ci0gICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBmaWVsZCBpbmRleC4KLSAg
ICBpZiAoY2hhbmdlX3R5cGUgPT0gQURESVRJT04pIHsKLSAgICAgIHNwZWNpZmljX2ZpZWxkLmlu
ZGV4ID0gaW5kZXgyIC0gY3VycmVudF9yZXBlYXRlZF9zdGFydDI7Ci0gICAgICBzcGVjaWZpY19m
aWVsZC5uZXdfaW5kZXggPSBpbmRleDIgLSBjdXJyZW50X3JlcGVhdGVkX3N0YXJ0MjsKLSAgICB9
IGVsc2UgewotICAgICAgc3BlY2lmaWNfZmllbGQuaW5kZXggPSBpbmRleDEgLSBjdXJyZW50X3Jl
cGVhdGVkX3N0YXJ0MTsKLSAgICAgIHNwZWNpZmljX2ZpZWxkLm5ld19pbmRleCA9IGluZGV4MiAt
IGN1cnJlbnRfcmVwZWF0ZWRfc3RhcnQyOwotICAgIH0KLQotICAgIGlmIChJc1Vua25vd25GaWVs
ZElnbm9yZWQobWVzc2FnZTEsIG1lc3NhZ2UyLCBzcGVjaWZpY19maWVsZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpwYXJlbnRfZmllbGQpKSB7Ci0gICAgICBpZiAocmVwb3J0ZXJf
ICE9IE5VTEwpIHsKLSAgICAgICAgcGFyZW50X2ZpZWxkLT5wdXNoX2JhY2soc3BlY2lmaWNfZmll
bGQpOwotICAgICAgICByZXBvcnRlcl8tPlJlcG9ydFVua25vd25GaWVsZElnbm9yZWQobWVzc2Fn
ZTEsIG1lc3NhZ2UyLCAqcGFyZW50X2ZpZWxkKTsKLSAgICAgICAgcGFyZW50X2ZpZWxkLT5wb3Bf
YmFjaygpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGNo
YW5nZV90eXBlID09IEFERElUSU9OIHx8IGNoYW5nZV90eXBlID09IERFTEVUSU9OIHx8Ci0gICAg
ICAgIGNoYW5nZV90eXBlID09IE1PRElGSUNBVElPTikgewotICAgICAgaWYgKHJlcG9ydGVyXyA9
PSBOVUxMKSB7Ci0gICAgICAgIC8vIFdlIGZvdW5kIGEgZGlmZmVyZW5jZSBhbmQgd2UgaGF2ZSBu
byByZXByb3Rlci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaXNfZGlm
ZmVyZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwYXJlbnRfZmllbGQtPnB1c2hfYmFjayhzcGVj
aWZpY19maWVsZCk7Ci0KLSAgICBzd2l0Y2ggKGNoYW5nZV90eXBlKSB7Ci0gICAgICBjYXNlIEFE
RElUSU9OOgotICAgICAgICByZXBvcnRlcl8tPlJlcG9ydEFkZGVkKG1lc3NhZ2UxLCBtZXNzYWdl
MiwgKnBhcmVudF9maWVsZCk7Ci0gICAgICAgICsraW5kZXgyOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgREVMRVRJT046Ci0gICAgICAgIHJlcG9ydGVyXy0+UmVwb3J0RGVsZXRlZChtZXNz
YWdlMSwgbWVzc2FnZTIsICpwYXJlbnRfZmllbGQpOwotICAgICAgICArK2luZGV4MTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIE1PRElGSUNBVElPTjoKLSAgICAgICAgcmVwb3J0ZXJfLT5S
ZXBvcnRNb2RpZmllZChtZXNzYWdlMSwgbWVzc2FnZTIsICpwYXJlbnRfZmllbGQpOwotICAgICAg
ICArK2luZGV4MTsKLSAgICAgICAgKytpbmRleDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBDT01QQVJFX0dST1VQUzoKLSAgICAgICAgaWYgKCFDb21wYXJlVW5rbm93bkZpZWxkcyhtZXNz
YWdlMSwgbWVzc2FnZTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRz
MVtpbmRleDFdLnNlY29uZC0+Z3JvdXAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWVsZHMyW2luZGV4Ml0uc2Vjb25kLT5ncm91cCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudF9maWVsZCkpIHsKLSAgICAgICAgICBpZiAocmVwb3J0ZXJf
ID09IE5VTEwpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBpc19kaWZmZXJlbnQgPSB0cnVlOwot
ICAgICAgICAgIHJlcG9ydGVyXy0+UmVwb3J0TW9kaWZpZWQobWVzc2FnZTEsIG1lc3NhZ2UyLCAq
cGFyZW50X2ZpZWxkKTsKLSAgICAgICAgfQotICAgICAgICArK2luZGV4MTsKLSAgICAgICAgKytp
bmRleDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBOT19DSEFOR0U6Ci0gICAgICAgICsr
aW5kZXgxOwotICAgICAgICArK2luZGV4MjsKLSAgICAgICAgaWYgKHJlcG9ydF9tYXRjaGVzXykg
ewotICAgICAgICAgIHJlcG9ydGVyXy0+UmVwb3J0TWF0Y2hlZChtZXNzYWdlMSwgbWVzc2FnZTIs
ICpwYXJlbnRfZmllbGQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGFyZW50X2ZpZWxkLT5w
b3BfYmFjaygpOwotICB9Ci0KLSAgcmV0dXJuICFpc19kaWZmZXJlbnQ7Ci19Ci0KLW5hbWVzcGFj
ZSB7Ci0KLS8vIEZpbmQgbWF4aW11bSBiaXBhcnRpdGUgbWF0Y2hpbmcgdXNpbmcgdGhlIGFyZ3Vt
ZW50aW5nIHBhdGggYWxnb3JpdGhtLgotY2xhc3MgTWF4aW11bU1hdGNoZXIgewotIHB1YmxpYzoK
LSAgdHlwZWRlZiBSZXN1bHRDYWxsYmFjazI8Ym9vbCwgaW50LCBpbnQ+IE5vZGVNYXRjaENhbGxi
YWNrOwotICAvLyBNYXhpbXVtTWF0Y2hlciB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHBhc3NlZCBp
biBjYWxsYmFjayBhbmQgdXNlcyBpdCB0bwotICAvLyBkZXRlcm1pbmUgd2hldGhlciBhIG5vZGUg
b24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgYmlwYXJ0aWFsIGdyYXBoIG1hdGNoZXMKLSAgLy8gYSBu
b2RlIG9uIHRoZSByaWdodCBzaWRlLiBjb3VudDEgaXMgdGhlIG51bWJlciBvZiBub2RlcyBvbiB0
aGUgbGVmdCBzaWRlCi0gIC8vIG9mIHRoZSBncmFwaCBhbmQgY291bnQyIHRvIGlzIHRoZSBudW1i
ZXIgb2Ygbm9kZXMgb24gdGhlIHJpZ2h0IHNpZGUuCi0gIC8vIEV2ZXJ5IG5vZGUgaXMgcmVmZXJy
ZWQgdG8gdXNpbmcgMC1iYXNlZCBpbmRpY2VzLgotICAvLyBJZiBhIG1heGltdW0gbWF0Y2ggaXMg
Zm91bmQsIHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW4gbWF0Y2hfbGlzdDEgYW5kCi0gIC8v
IG1hdGNoX2xpc3QyLiBtYXRjaF9saXN0MVtpXSA9PSBqIG1lYW5zIHRoZSBpLXRoIG5vZGUgb24g
dGhlIGxlZnQgc2lkZSBpcwotICAvLyBtYXRjaGVkIHRvIHRoZSBqLXRoIG5vZGUgb24gdGhlIHJp
Z2h0IHNpZGUgYW5kIG1hdGNoX2xpc3QyW3hdID09IHkgbWVhbnMKLSAgLy8gdGhlIHgtdGggbm9k
ZSBvbiB0aGUgcmlnaHQgc2lkZSBpcyBtYXRjaGVkIHRvIHktdGggbm9kZSBvbiB0aGUgbGVmdCBz
aWRlLgotICAvLyBtYXRjaF9saXN0MVtpXSA9PSAtMSBtZWFucyB0aGUgbm9kZSBpcyBub3QgbWF0
Y2hlZC4gU2FtZSB3aXRoIG1hdGNoX2xpc3QyLgotICBNYXhpbXVtTWF0Y2hlcihpbnQgY291bnQx
LCBpbnQgY291bnQyLCBOb2RlTWF0Y2hDYWxsYmFjayogY2FsbGJhY2ssCi0gICAgICAgICAgICAg
ICAgIHZlY3RvcjxpbnQ+KiBtYXRjaF9saXN0MSwgdmVjdG9yPGludD4qIG1hdGNoX2xpc3QyKTsK
LSAgLy8gRmluZCBhIG1heGltdW0gbWF0Y2ggYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIG1hdGNo
ZWQgbm9kZSBwYWlycy4KLSAgLy8gSWYgZWFybHlfcmV0dXJuIGlzIHRydWUsIHRoaXMgbWV0aG9k
IHdpbGwgcmV0dXJuIDAgaW1tZWRpYXRlbHkgd2hlbiBpdAotICAvLyBmaW5kcyB0aGF0IG5vdCBh
bGwgbm9kZXMgb24gdGhlIGxlZnQgc2lkZSBjYW4gYmUgbWF0Y2hlZC4KLSAgaW50IEZpbmRNYXhp
bXVtTWF0Y2goYm9vbCBlYXJseV9yZXR1cm4pOwotIHByaXZhdGU6Ci0gIC8vIERldGVybWluZXMg
d2hldGhlciB0aGUgbm9kZSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBiaXBhcnRpYWwgZ3JhcGgK
LSAgLy8gbWF0Y2hlcyB0aGUgb25lIG9uIHRoZSByaWdodCBzaWRlLgotICBib29sIE1hdGNoKGlu
dCBsZWZ0LCBpbnQgcmlnaHQpOwotICAvLyBGaW5kIGFuIGFyZ3VtZW50aW5nIHBhdGggc3RhcnRp
bmcgZnJvbSB0aGUgbm9kZSB2IG9uIHRoZSBsZWZ0IHNpZGUuIElmIGEKLSAgLy8gcGF0aCBjYW4g
YmUgZm91bmQsIHVwZGF0ZSBtYXRjaF9saXN0Ml8gdG8gcmVmbGVjdCB0aGUgcGF0aCBhbmQgcmV0
dXJuCi0gIC8vIHRydWUuCi0gIGJvb2wgRmluZEFyZ3VtZW50UGF0aERGUyhpbnQgdiwgdmVjdG9y
PGJvb2w+KiB2aXNpdGVkKTsKLQotICBpbnQgY291bnQxXzsKLSAgaW50IGNvdW50Ml87Ci0gIGdv
b2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8Tm9kZU1hdGNoQ2FsbGJhY2s+IG1hdGNoX2NhbGxi
YWNrXzsKLSAgbWFwPHBhaXI8aW50LCBpbnQ+LCBib29sPiBjYWNoZWRfbWF0Y2hfcmVzdWx0c187
Ci0gIHZlY3RvcjxpbnQ+KiBtYXRjaF9saXN0MV87Ci0gIHZlY3RvcjxpbnQ+KiBtYXRjaF9saXN0
Ml87Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhNYXhpbXVtTWF0Y2hlcik7
Ci19OwotCi1NYXhpbXVtTWF0Y2hlcjo6TWF4aW11bU1hdGNoZXIoaW50IGNvdW50MSwgaW50IGNv
dW50MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlTWF0Y2hDYWxsYmFjayog
Y2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPGludD4qIG1h
dGNoX2xpc3QxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvcjxpbnQ+KiBt
YXRjaF9saXN0MikKLSAgICA6IGNvdW50MV8oY291bnQxKSwgY291bnQyXyhjb3VudDIpLCBtYXRj
aF9jYWxsYmFja18oY2FsbGJhY2spLAotICAgICAgbWF0Y2hfbGlzdDFfKG1hdGNoX2xpc3QxKSwg
bWF0Y2hfbGlzdDJfKG1hdGNoX2xpc3QyKSB7Ci0gIG1hdGNoX2xpc3QxXy0+YXNzaWduKGNvdW50
MSwgLTEpOwotICBtYXRjaF9saXN0Ml8tPmFzc2lnbihjb3VudDIsIC0xKTsKLX0KLQotaW50IE1h
eGltdW1NYXRjaGVyOjpGaW5kTWF4aW11bU1hdGNoKGJvb2wgZWFybHlfcmV0dXJuKSB7Ci0gIGlu
dCByZXN1bHQgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50MV87ICsraSkgewotICAg
IHZlY3Rvcjxib29sPiB2aXNpdGVkKGNvdW50MV8pOwotICAgIGlmIChGaW5kQXJndW1lbnRQYXRo
REZTKGksICZ2aXNpdGVkKSkgewotICAgICAgKytyZXN1bHQ7Ci0gICAgfSBlbHNlIGlmIChlYXJs
eV9yZXR1cm4pIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfQotICAvLyBCYWNrZmlsbCBt
YXRjaF9saXN0MV8gYXMgd2Ugb25seSBmaWxsZWQgbWF0Y2hfbGlzdDJfIHdoZW4gZmluZGluZwot
ICAvLyBhcmd1bWVudGluZyBwYXRoZXMuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQyXzsg
KytpKSB7Ci0gICAgaWYgKCgqbWF0Y2hfbGlzdDJfKVtpXSAhPSAtMSkgewotICAgICAgKCptYXRj
aF9saXN0MV8pWygqbWF0Y2hfbGlzdDJfKVtpXV0gPSBpOwotICAgIH0KLSAgfQotICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIE1heGltdW1NYXRjaGVyOjpNYXRjaChpbnQgbGVmdCwgaW50IHJp
Z2h0KSB7Ci0gIHBhaXI8aW50LCBpbnQ+IHAobGVmdCwgcmlnaHQpOwotICBtYXA8cGFpcjxpbnQs
IGludD4sIGJvb2w+OjppdGVyYXRvciBpdCA9IGNhY2hlZF9tYXRjaF9yZXN1bHRzXy5maW5kKHAp
OwotICBpZiAoaXQgIT0gY2FjaGVkX21hdGNoX3Jlc3VsdHNfLmVuZCgpKSB7Ci0gICAgcmV0dXJu
IGl0LT5zZWNvbmQ7Ci0gIH0KLSAgY2FjaGVkX21hdGNoX3Jlc3VsdHNfW3BdID0gbWF0Y2hfY2Fs
bGJhY2tfLT5SdW4obGVmdCwgcmlnaHQpOwotICByZXR1cm4gY2FjaGVkX21hdGNoX3Jlc3VsdHNf
W3BdOwotfQotCi1ib29sIE1heGltdW1NYXRjaGVyOjpGaW5kQXJndW1lbnRQYXRoREZTKGludCB2
LCB2ZWN0b3I8Ym9vbD4qIHZpc2l0ZWQpIHsKLSAgKCp2aXNpdGVkKVt2XSA9IHRydWU7Ci0gIC8v
IFdlIHRyeSB0byBtYXRjaCB0aG9zZSB1bi1tYXRjaGVkIG5vZGVzIG9uIHRoZSByaWdodCBzaWRl
IGZpcnN0LiBUaGlzIGlzCi0gIC8vIHRoZSBzdGVwIHRoYXQgdGhlIG5hdmllIGdyZWVkeSBtYXRj
aGluZyBhbGdvcml0aG0gdXNlcy4gSW4gdGhlIGJlc3QgY2FzZXMKLSAgLy8gd2hlcmUgdGhlIGdy
ZWVkeSBhbGdvcml0aG0gY2FuIGZpbmQgYSBtYXhpbXVtIG1hdGNoaW5nLCB3ZSB3aWxsIGFsd2F5
cwotICAvLyBmaW5kIGEgbWF0Y2ggaW4gdGhpcyBzdGVwIGFuZCB0aGUgcGVyZm9ybWFuY2Ugd2ls
bCBiZSBpZGVudGljYWwgdG8gdGhlCi0gIC8vIGdyZWVkeSBhbGdvcml0aG0uCi0gIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQyXzsgKytpKSB7Ci0gICAgaW50IG1hdGNoZWQgPSAoKm1hdGNoX2xp
c3QyXylbaV07Ci0gICAgaWYgKG1hdGNoZWQgPT0gLTEgJiYgTWF0Y2godiwgaSkpIHsKLSAgICAg
ICgqbWF0Y2hfbGlzdDJfKVtpXSA9IHY7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0K
LSAgLy8gVGhlbiB3ZSB0cnkgdGhvc2UgYWxyZWFkeSBtYXRjaGVkIG5vZGVzIGFuZCBzZWUgaWYg
d2UgY2FuIGZpbmQgYW4KLSAgLy8gYWx0ZXJuYWl2ZSBtYXRjaCBmb3IgdGhlIG5vZGUgbWF0Y2hl
ZCB0byB0aGVtLgotICAvLyBUaGUgZ3JlZWR5IGFsZ29yaXRobSB3aWxsIHN0b3AgYmVmb3JlIHRo
aXMgYW5kIGZhaWwgdG8gcHJvZHVjZSB0aGUKLSAgLy8gY29ycmVjdCByZXN1bHQuCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQyXzsgKytpKSB7Ci0gICAgaW50IG1hdGNoZWQgPSAoKm1hdGNo
X2xpc3QyXylbaV07Ci0gICAgaWYgKG1hdGNoZWQgIT0gLTEgJiYgTWF0Y2godiwgaSkpIHsKLSAg
ICAgIGlmICghKCp2aXNpdGVkKVttYXRjaGVkXSAmJiBGaW5kQXJndW1lbnRQYXRoREZTKG1hdGNo
ZWQsIHZpc2l0ZWQpKSB7Ci0gICAgICAgICgqbWF0Y2hfbGlzdDJfKVtpXSA9IHY7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZQotCi1ib29sIE1lc3NhZ2VEaWZmZXJlbmNlcjo6TWF0Y2hSZXBlYXRl
ZEZpZWxkSW5kaWNlcygKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMSwKLSAgICBjb25zdCBN
ZXNzYWdlJiBtZXNzYWdlMiwKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIHJlcGVhdGVkX2Zp
ZWxkLAotICAgIGNvbnN0IHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiYgcGFyZW50X2ZpZWxkcywKLSAg
ICB2ZWN0b3I8aW50PiogbWF0Y2hfbGlzdDEsCi0gICAgdmVjdG9yPGludD4qIG1hdGNoX2xpc3Qy
KSB7Ci0gIGNvbnN0IGludCBjb3VudDEgPQotICAgICAgbWVzc2FnZTEuR2V0UmVmbGVjdGlvbigp
LT5GaWVsZFNpemUobWVzc2FnZTEsIHJlcGVhdGVkX2ZpZWxkKTsKLSAgY29uc3QgaW50IGNvdW50
MiA9Ci0gICAgICBtZXNzYWdlMi5HZXRSZWZsZWN0aW9uKCktPkZpZWxkU2l6ZShtZXNzYWdlMiwg
cmVwZWF0ZWRfZmllbGQpOwotICBjb25zdCBNYXBLZXlDb21wYXJhdG9yKiBrZXlfY29tcGFyYXRv
ciA9IEdldE1hcEtleUNvbXBhcmF0b3IocmVwZWF0ZWRfZmllbGQpOwotCi0gIG1hdGNoX2xpc3Qx
LT5hc3NpZ24oY291bnQxLCAtMSk7Ci0gIG1hdGNoX2xpc3QyLT5hc3NpZ24oY291bnQyLCAtMSk7
Ci0KLSAgU3BlY2lmaWNGaWVsZCBzcGVjaWZpY19maWVsZDsKLSAgc3BlY2lmaWNfZmllbGQuZmll
bGQgPSByZXBlYXRlZF9maWVsZDsKLQotICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAvLyBGaW5k
IHBvdGVudGlhbCBtYXRjaCBpZiB0aGlzIGlzIGEgc3BlY2lhbCByZXBlYXRlZCBmaWVsZC4KLSAg
aWYgKGtleV9jb21wYXJhdG9yICE9IE5VTEwgfHwgSXNUcmVhdGVkQXNTZXQocmVwZWF0ZWRfZmll
bGQpKSB7Ci0gICAgaWYgKHNjb3BlXyA9PSBQQVJUSUFMKSB7Ci0gICAgICAvLyBXaGVuIHBhcnRp
YWwgbWF0Y2hpbmcgaXMgZW5hYmxlZCwgQ29tcGFyZShhLCBiKSAmJiBDb21wYXJlKGEsIGMpCi0g
ICAgICAvLyBkb2Vzbid0IG5lY2Nlc3NhcmlseSBpbXBseSBDb21wYXJlKGIsIGMpLiBUaGVyZWZv
cmUgYSBuYWl2ZSBncmVlZHkKLSAgICAgIC8vIGFsZ29yaXRobSB3aWxsIGZhaWwgdG8gZmluZCBh
IG1heGltdW0gbWF0Y2hpbmcuCi0gICAgICAvLyBIZXJlIHdlIHVzZSB0aGUgYXJndW1lbnRpbmcg
cGF0aCBhbGdvcml0aG0uCi0gICAgICBNYXhpbXVtTWF0Y2hlcjo6Tm9kZU1hdGNoQ2FsbGJhY2sq
IGNhbGxiYWNrID0KLSAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpOZXdQ
ZXJtYW5lbnRDYWxsYmFjaygKLSAgICAgICAgICAgICAgdGhpcywgJk1lc3NhZ2VEaWZmZXJlbmNl
cjo6SXNNYXRjaCwKLSAgICAgICAgICAgICAgcmVwZWF0ZWRfZmllbGQsIGtleV9jb21wYXJhdG9y
LAotICAgICAgICAgICAgICAmbWVzc2FnZTEsICZtZXNzYWdlMiwgcGFyZW50X2ZpZWxkcyk7Ci0g
ICAgICBNYXhpbXVtTWF0Y2hlciBtYXRjaGVyKGNvdW50MSwgY291bnQyLCBjYWxsYmFjaywgbWF0
Y2hfbGlzdDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX2xpc3QyKTsKLSAg
ICAgIC8vIElmIGRpZmYgaW5mbyBpcyBub3QgbmVlZGVkLCB3ZSBzaG91bGQgZW5kIHRoZSBtYXRj
aGluZyBwcm9jZXNzIGFzCi0gICAgICAvLyBzb29uIGFzIHBvc3NpYmxlIGlmIG5vdCBhbGwgaXRl
bXMgY2FuIGJlIG1hdGNoZWQuCi0gICAgICBib29sIGVhcmx5X3JldHVybiA9IChyZXBvcnRlcl8g
PT0gTlVMTCk7Ci0gICAgICBpbnQgbWF0Y2hfY291bnQgPSBtYXRjaGVyLkZpbmRNYXhpbXVtTWF0
Y2goZWFybHlfcmV0dXJuKTsKLSAgICAgIGlmIChtYXRjaF9jb3VudCAhPSBjb3VudDEgJiYgcmVw
b3J0ZXJfID09IE5VTEwpIHJldHVybiBmYWxzZTsKLSAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYm
IChtYXRjaF9jb3VudCA9PSBjb3VudDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50MTsgKytpKSB7Ci0gICAgICAgIC8vIEluZGljYXRlcyBhbnkgbWF0Y2hl
ZCBlbGVtZW50cyBmb3IgdGhpcyByZXBlYXRlZCBmaWVsZC4KLSAgICAgICAgYm9vbCBtYXRjaCA9
IGZhbHNlOwotCi0gICAgICAgIHNwZWNpZmljX2ZpZWxkLmluZGV4ID0gaTsKLSAgICAgICAgc3Bl
Y2lmaWNfZmllbGQubmV3X2luZGV4ID0gaTsKLQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IGNvdW50MjsgaisrKSB7Ci0gICAgICAgICAgaWYgKG1hdGNoX2xpc3QyLT5hdChqKSAhPSAtMSkg
Y29udGludWU7Ci0gICAgICAgICAgc3BlY2lmaWNfZmllbGQuaW5kZXggPSBpOwotICAgICAgICAg
IHNwZWNpZmljX2ZpZWxkLm5ld19pbmRleCA9IGo7Ci0KLSAgICAgICAgICBtYXRjaCA9IElzTWF0
Y2gocmVwZWF0ZWRfZmllbGQsIGtleV9jb21wYXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbWVzc2FnZTEsICZtZXNzYWdlMiwgcGFyZW50X2ZpZWxkcywgaSwgaik7Ci0KLSAgICAg
ICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgIG1hdGNoX2xpc3QxLT5hdChzcGVjaWZpY19m
aWVsZC5pbmRleCkgPSBzcGVjaWZpY19maWVsZC5uZXdfaW5kZXg7Ci0gICAgICAgICAgICBtYXRj
aF9saXN0Mi0+YXQoc3BlY2lmaWNfZmllbGQubmV3X2luZGV4KSA9IHNwZWNpZmljX2ZpZWxkLmlu
ZGV4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGlmICghbWF0Y2ggJiYgcmVwb3J0ZXJfID09IE5VTEwpIHJldHVybiBmYWxzZTsKLSAgICAgICAg
c3VjY2VzcyA9IHN1Y2Nlc3MgJiYgbWF0Y2g7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2Ugewot
ICAgIC8vIElmIHRoaXMgZmllbGQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgbGlzdCwganVzdCBsYWJl
bCB0aGUgbWF0Y2hfbGlzdC4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50MSAmJiBpIDwg
Y291bnQyOyBpKyspIHsKLSAgICAgIG1hdGNoX2xpc3QxLT5hdChpKSA9IGk7Ci0gICAgICBtYXRj
aF9saXN0Mi0+YXQoaSkgPSBpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBzdWNjZXNzOwotfQot
Ci1GaWVsZENvbXBhcmF0b3I6OkNvbXBhcmlzb25SZXN1bHQgTWVzc2FnZURpZmZlcmVuY2VyOjpH
ZXRGaWVsZENvbXBhcmlzb25SZXN1bHQoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsIGNv
bnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQs
IGludCBpbmRleDEsIGludCBpbmRleDIsCi0gICAgY29uc3QgRmllbGRDb250ZXh0KiBmaWVsZF9j
b250ZXh0KSB7Ci0gIEZpZWxkQ29tcGFyYXRvciogY29tcGFyYXRvciA9IGZpZWxkX2NvbXBhcmF0
b3JfICE9IE5VTEwgPwotICAgICAgZmllbGRfY29tcGFyYXRvcl8gOiAmZGVmYXVsdF9maWVsZF9j
b21wYXJhdG9yXzsKLSAgcmV0dXJuIGNvbXBhcmF0b3ItPkNvbXBhcmUobWVzc2FnZTEsIG1lc3Nh
Z2UyLCBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgxLCBpbmRleDIs
IGZpZWxkX2NvbnRleHQpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotTWVzc2FnZURp
ZmZlcmVuY2VyOjpSZXBvcnRlcjo6UmVwb3J0ZXIoKSB7IH0KLU1lc3NhZ2VEaWZmZXJlbmNlcjo6
UmVwb3J0ZXI6On5SZXBvcnRlcigpIHt9Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1NZXNz
YWdlRGlmZmVyZW5jZXI6Ok1hcEtleUNvbXBhcmF0b3I6Ok1hcEtleUNvbXBhcmF0b3IoKSB7fQot
TWVzc2FnZURpZmZlcmVuY2VyOjpNYXBLZXlDb21wYXJhdG9yOjp+TWFwS2V5Q29tcGFyYXRvcigp
IHt9Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1NZXNzYWdlRGlmZmVyZW5jZXI6Oklnbm9y
ZUNyaXRlcmlhOjpJZ25vcmVDcml0ZXJpYSgpIHt9Ci1NZXNzYWdlRGlmZmVyZW5jZXI6Oklnbm9y
ZUNyaXRlcmlhOjp+SWdub3JlQ3JpdGVyaWEoKSB7fQotCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotLy8gTm90ZSB0aGF0IHRoZSBwcmludGVyJ3MgZGVsaW1pdGVyIGlzIG5vdCB1c2VkLCBiZWNh
dXNlIGlmIHdlIGFyZSBnaXZlbiBhCi0vLyBwcmludGVyLCB3ZSBkb24ndCBrbm93IGl0cyBkZWxp
bWl0ZXIuCi1NZXNzYWdlRGlmZmVyZW5jZXI6OlN0cmVhbVJlcG9ydGVyOjpTdHJlYW1SZXBvcnRl
cigKLSAgICBpbzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCkgOiBwcmludGVyXyhuZXcg
aW86OlByaW50ZXIob3V0cHV0LCAnJCcpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWxldGVfcHJpbnRlcl8odHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3J0X21vZGlmaWVkX2FnZ3JlZ2F0ZXNfKGZhbHNlKSB7IH0K
LQotTWVzc2FnZURpZmZlcmVuY2VyOjpTdHJlYW1SZXBvcnRlcjo6U3RyZWFtUmVwb3J0ZXIoCi0g
ICAgaW86OlByaW50ZXIqIHByaW50ZXIpIDogcHJpbnRlcl8ocHJpbnRlciksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlX3ByaW50ZXJfKGZhbHNlKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvcnRfbW9kaWZpZWRfYWdncmVnYXRlc18oZmFsc2UpIHsgfQotCi1N
ZXNzYWdlRGlmZmVyZW5jZXI6OlN0cmVhbVJlcG9ydGVyOjp+U3RyZWFtUmVwb3J0ZXIoKSB7Ci0g
IGlmIChkZWxldGVfcHJpbnRlcl8pIGRlbGV0ZSBwcmludGVyXzsKLX0KLQotdm9pZCBNZXNzYWdl
RGlmZmVyZW5jZXI6OlN0cmVhbVJlcG9ydGVyOjpQcmludFBhdGgoCi0gICAgY29uc3QgdmVjdG9y
PFNwZWNpZmljRmllbGQ+JiBmaWVsZF9wYXRoLCBib29sIGxlZnRfc2lkZSkgewotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZpZWxkX3BhdGguc2l6ZSgpOyArK2kpIHsKLSAgICBpZiAoaSA+IDApIHsK
LSAgICAgIHByaW50ZXJfLT5QcmludCgiLiIpOwotICAgIH0KLQotICAgIFNwZWNpZmljRmllbGQg
c3BlY2lmaWNfZmllbGQgPSBmaWVsZF9wYXRoW2ldOwotCi0gICAgaWYgKHNwZWNpZmljX2ZpZWxk
LmZpZWxkICE9IE5VTEwpIHsKLSAgICAgIGlmIChzcGVjaWZpY19maWVsZC5maWVsZC0+aXNfZXh0
ZW5zaW9uKCkpIHsKLSAgICAgICAgcHJpbnRlcl8tPlByaW50KCIoJG5hbWUkKSIsICJuYW1lIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljX2ZpZWxkLmZpZWxkLT5mdWxsX25hbWUo
KSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGVyXy0+UHJpbnRSYXcoc3BlY2lmaWNf
ZmllbGQuZmllbGQtPm5hbWUoKSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50
ZXJfLT5QcmludFJhdyhTaW1wbGVJdG9hKHNwZWNpZmljX2ZpZWxkLnVua25vd25fZmllbGRfbnVt
YmVyKSk7Ci0gICAgfQotICAgIGlmIChsZWZ0X3NpZGUgJiYgc3BlY2lmaWNfZmllbGQuaW5kZXgg
Pj0gMCkgewotICAgICAgcHJpbnRlcl8tPlByaW50KCJbJG5hbWUkXSIsICJuYW1lIiwgU2ltcGxl
SXRvYShzcGVjaWZpY19maWVsZC5pbmRleCkpOwotICAgIH0KLSAgICBpZiAoIWxlZnRfc2lkZSAm
JiBzcGVjaWZpY19maWVsZC5uZXdfaW5kZXggPj0gMCkgewotICAgICAgcHJpbnRlcl8tPlByaW50
KCJbJG5hbWUkXSIsICJuYW1lIiwgU2ltcGxlSXRvYShzcGVjaWZpY19maWVsZC5uZXdfaW5kZXgp
KTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBNZXNzYWdlRGlmZmVyZW5jZXI6OgotU3RyZWFtUmVw
b3J0ZXI6OlByaW50VmFsdWUoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiYgZmllbGRfcGF0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGVmdF9zaWRlKSB7Ci0gIGNvbnN0IFNwZWNp
ZmljRmllbGQmIHNwZWNpZmljX2ZpZWxkID0gZmllbGRfcGF0aC5iYWNrKCk7Ci0gIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogZmllbGQgPSBzcGVjaWZpY19maWVsZC5maWVsZDsKLSAgaWYgKGZpZWxk
ICE9IE5VTEwpIHsKLSAgICBzdHJpbmcgb3V0cHV0OwotICAgIGludCBpbmRleCA9IGxlZnRfc2lk
ZSA/IHNwZWNpZmljX2ZpZWxkLmluZGV4IDogc3BlY2lmaWNfZmllbGQubmV3X2luZGV4OwotICAg
IGlmIChmaWVsZC0+Y3BwX3R5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfTUVTU0FH
RSkgewotICAgICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVm
bGVjdGlvbigpOwotICAgICAgY29uc3QgTWVzc2FnZSYgZmllbGRfbWVzc2FnZSA9IGZpZWxkLT5p
c19yZXBlYXRlZCgpID8KLSAgICAgICAgICByZWZsZWN0aW9uLT5HZXRSZXBlYXRlZE1lc3NhZ2Uo
bWVzc2FnZSwgZmllbGQsIGluZGV4KSA6Ci0gICAgICAgICAgcmVmbGVjdGlvbi0+R2V0TWVzc2Fn
ZShtZXNzYWdlLCBmaWVsZCk7Ci0gICAgICBvdXRwdXQgPSBmaWVsZF9tZXNzYWdlLlNob3J0RGVi
dWdTdHJpbmcoKTsKLSAgICAgIGlmIChvdXRwdXQuZW1wdHkoKSkgewotICAgICAgICBwcmludGVy
Xy0+UHJpbnQoInsgfSIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRlcl8tPlByaW50
KCJ7ICRuYW1lJCB9IiwgIm5hbWUiLCBvdXRwdXQpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICBUZXh0Rm9ybWF0OjpQcmludEZpZWxkVmFsdWVUb1N0cmluZyhtZXNzYWdlLCBmaWVsZCwg
aW5kZXgsICZvdXRwdXQpOwotICAgICAgcHJpbnRlcl8tPlByaW50UmF3KG91dHB1dCk7Ci0gICAg
fQotICB9IGVsc2UgewotICAgIGNvbnN0IFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZHMg
PQotICAgICAgICAobGVmdF9zaWRlID8KLSAgICAgICAgIHNwZWNpZmljX2ZpZWxkLnVua25vd25f
ZmllbGRfc2V0MSA6Ci0gICAgICAgICBzcGVjaWZpY19maWVsZC51bmtub3duX2ZpZWxkX3NldDIp
OwotICAgIGNvbnN0IFVua25vd25GaWVsZCogdW5rbm93bl9maWVsZCA9ICZ1bmtub3duX2ZpZWxk
cy0+ZmllbGQoCi0gICAgICAgIGxlZnRfc2lkZSA/Ci0gICAgICAgIHNwZWNpZmljX2ZpZWxkLnVu
a25vd25fZmllbGRfaW5kZXgxIDoKLSAgICAgICAgc3BlY2lmaWNfZmllbGQudW5rbm93bl9maWVs
ZF9pbmRleDIpOwotICAgIFByaW50VW5rbm93bkZpZWxkVmFsdWUodW5rbm93bl9maWVsZCk7Ci0g
IH0KLX0KLQotdm9pZCBNZXNzYWdlRGlmZmVyZW5jZXI6OgotU3RyZWFtUmVwb3J0ZXI6OlByaW50
VW5rbm93bkZpZWxkVmFsdWUoY29uc3QgVW5rbm93bkZpZWxkKiB1bmtub3duX2ZpZWxkKSB7Ci0g
IEdPT0dMRV9DSEVDSyh1bmtub3duX2ZpZWxkICE9IE5VTEwpIDw8ICIgQ2Fubm90IHByaW50IE5V
TEwgdW5rbm93bl9maWVsZC4iOwotCi0gIHN0cmluZyBvdXRwdXQ7Ci0gIHN3aXRjaCAodW5rbm93
bl9maWVsZC0+dHlwZSgpKSB7Ci0gICAgY2FzZSBVbmtub3duRmllbGQ6OlRZUEVfVkFSSU5UOgot
ICAgICAgb3V0cHV0ID0gU2ltcGxlSXRvYSh1bmtub3duX2ZpZWxkLT52YXJpbnQoKSk7Ci0gICAg
ICBicmVhazsKLSAgICBjYXNlIFVua25vd25GaWVsZDo6VFlQRV9GSVhFRDMyOgotICAgICAgb3V0
cHV0ID0gU3RyQ2F0KCIweCIsIHN0cmluZ3M6OkhleCh1bmtub3duX2ZpZWxkLT5maXhlZDMyKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3M6OlpFUk9f
UEFEXzgpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVW5rbm93bkZpZWxkOjpUWVBFX0ZJWEVE
NjQ6Ci0gICAgICBvdXRwdXQgPSBTdHJDYXQoIjB4Iiwgc3RyaW5nczo6SGV4KHVua25vd25fZmll
bGQtPmZpeGVkNjQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RyaW5nczo6WkVST19QQURfMTYpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVW5rbm93bkZp
ZWxkOjpUWVBFX0xFTkdUSF9ERUxJTUlURUQ6Ci0gICAgICBvdXRwdXQgPSBTdHJpbmdQcmludGYo
IlwiJXNcIiIsCi0gICAgICAgICAgQ0VzY2FwZSh1bmtub3duX2ZpZWxkLT5sZW5ndGhfZGVsaW1p
dGVkKCkpLmNfc3RyKCkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVbmtub3duRmllbGQ6OlRZ
UEVfR1JPVVA6Ci0gICAgICAvLyBUT0RPKGtlbnRvbik6ICBQcmludCB0aGUgY29udGVudHMgb2Yg
dGhlIGdyb3VwIGxpa2Ugd2UgZG8gZm9yCi0gICAgICAvLyAgIG1lc3NhZ2VzLiAgUmVxdWlyZXMg
YW4gZXF1aXZhbGVudCBvZiBTaG9ydERlYnVnU3RyaW5nKCkgZm9yCi0gICAgICAvLyAgIFVua25v
d25GaWVsZFNldC4KLSAgICAgIG91dHB1dCA9ICJ7IC4uLiB9IjsKLSAgICAgIGJyZWFrOwotICB9
Ci0gIHByaW50ZXJfLT5QcmludFJhdyhvdXRwdXQpOwotfQotCi12b2lkIE1lc3NhZ2VEaWZmZXJl
bmNlcjo6U3RyZWFtUmVwb3J0ZXI6OlByaW50KGNvbnN0IHN0cmluZyYgc3RyKSB7Ci0gIHByaW50
ZXJfLT5QcmludChzdHIuY19zdHIoKSk7Ci19Ci0KLXZvaWQgTWVzc2FnZURpZmZlcmVuY2VyOjpT
dHJlYW1SZXBvcnRlcjo6UmVwb3J0QWRkZWQoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEs
Ci0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0gICAgY29uc3QgdmVjdG9yPFNwZWNpZmlj
RmllbGQ+JiBmaWVsZF9wYXRoKSB7Ci0gIHByaW50ZXJfLT5QcmludCgiYWRkZWQ6ICIpOwotICBQ
cmludFBhdGgoZmllbGRfcGF0aCwgZmFsc2UpOwotICBwcmludGVyXy0+UHJpbnQoIjogIik7Ci0g
IFByaW50VmFsdWUobWVzc2FnZTIsIGZpZWxkX3BhdGgsIGZhbHNlKTsKLSAgcHJpbnRlcl8tPlBy
aW50KCJcbiIpOyAgLy8gUHJpbnQgZm9yIG5ld2xpbmVzLgotfQotCi12b2lkIE1lc3NhZ2VEaWZm
ZXJlbmNlcjo6U3RyZWFtUmVwb3J0ZXI6OlJlcG9ydERlbGV0ZWQoCi0gICAgY29uc3QgTWVzc2Fn
ZSYgbWVzc2FnZTEsCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0gICAgY29uc3QgdmVj
dG9yPFNwZWNpZmljRmllbGQ+JiBmaWVsZF9wYXRoKSB7Ci0gIHByaW50ZXJfLT5QcmludCgiZGVs
ZXRlZDogIik7Ci0gIFByaW50UGF0aChmaWVsZF9wYXRoLCB0cnVlKTsKLSAgcHJpbnRlcl8tPlBy
aW50KCI6ICIpOwotICBQcmludFZhbHVlKG1lc3NhZ2UxLCBmaWVsZF9wYXRoLCB0cnVlKTsKLSAg
cHJpbnRlcl8tPlByaW50KCJcbiIpOyAgLy8gUHJpbnQgZm9yIG5ld2xpbmVzCi19Ci0KLXZvaWQg
TWVzc2FnZURpZmZlcmVuY2VyOjpTdHJlYW1SZXBvcnRlcjo6UmVwb3J0TW9kaWZpZWQoCi0gICAg
Y29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0g
ICAgY29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBmaWVsZF9wYXRoKSB7Ci0gIGlmICghcmVw
b3J0X21vZGlmaWVkX2FnZ3JlZ2F0ZXNfICYmIGZpZWxkX3BhdGguYmFjaygpLmZpZWxkID09IE5V
TEwpIHsKLSAgICBpZiAoZmllbGRfcGF0aC5iYWNrKCkudW5rbm93bl9maWVsZF90eXBlID09IFVu
a25vd25GaWVsZDo6VFlQRV9HUk9VUCkgewotICAgICAgLy8gQW55IGNoYW5nZXMgdG8gdGhlIHN1
YmZpZWxkcyBoYXZlIGFscmVhZHkgYmVlbiBwcmludGVkLgotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgfSBlbHNlIGlmICghcmVwb3J0X21vZGlmaWVkX2FnZ3JlZ2F0ZXNfKSB7Ci0gICAgaWYgKGZp
ZWxkX3BhdGguYmFjaygpLmZpZWxkLT5jcHBfdHlwZSgpID09Ci0gICAgICAgIEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9NRVNTQUdFKSB7Ci0gICAgICAvLyBBbnkgY2hhbmdlcyB0byB0aGUgc3Vi
ZmllbGRzIGhhdmUgYWxyZWFkeSBiZWVuIHByaW50ZWQuCi0gICAgICByZXR1cm47Ci0gICAgfQot
ICB9Ci0KLSAgcHJpbnRlcl8tPlByaW50KCJtb2RpZmllZDogIik7Ci0gIFByaW50UGF0aChmaWVs
ZF9wYXRoLCB0cnVlKTsKLSAgaWYgKENoZWNrUGF0aENoYW5nZWQoZmllbGRfcGF0aCkpIHsKLSAg
ICBwcmludGVyXy0+UHJpbnQoIiAtPiAiKTsKLSAgICBQcmludFBhdGgoZmllbGRfcGF0aCwgZmFs
c2UpOwotICB9Ci0gIHByaW50ZXJfLT5QcmludCgiOiAiKTsKLSAgUHJpbnRWYWx1ZShtZXNzYWdl
MSwgZmllbGRfcGF0aCwgdHJ1ZSk7Ci0gIHByaW50ZXJfLT5QcmludCgiIC0+ICIpOwotICBQcmlu
dFZhbHVlKG1lc3NhZ2UyLCBmaWVsZF9wYXRoLCBmYWxzZSk7Ci0gIHByaW50ZXJfLT5QcmludCgi
XG4iKTsgIC8vIFByaW50IGZvciBuZXdsaW5lcy4KLX0KLQotdm9pZCBNZXNzYWdlRGlmZmVyZW5j
ZXI6OlN0cmVhbVJlcG9ydGVyOjpSZXBvcnRNb3ZlZCgKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNz
YWdlMSwKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAgICBjb25zdCB2ZWN0b3I8U3Bl
Y2lmaWNGaWVsZD4mIGZpZWxkX3BhdGgpIHsKLSAgcHJpbnRlcl8tPlByaW50KCJtb3ZlZDogIik7
Ci0gIFByaW50UGF0aChmaWVsZF9wYXRoLCB0cnVlKTsKLSAgcHJpbnRlcl8tPlByaW50KCIgLT4g
Iik7Ci0gIFByaW50UGF0aChmaWVsZF9wYXRoLCBmYWxzZSk7Ci0gIHByaW50ZXJfLT5QcmludCgi
IDogIik7Ci0gIFByaW50VmFsdWUobWVzc2FnZTEsIGZpZWxkX3BhdGgsIHRydWUpOwotICBwcmlu
dGVyXy0+UHJpbnQoIlxuIik7ICAvLyBQcmludCBmb3IgbmV3bGluZXMuCi19Ci0KLXZvaWQgTWVz
c2FnZURpZmZlcmVuY2VyOjpTdHJlYW1SZXBvcnRlcjo6UmVwb3J0TWF0Y2hlZCgKLSAgICBjb25z
dCBNZXNzYWdlJiBtZXNzYWdlMSwKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAgICBj
b25zdCB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4mIGZpZWxkX3BhdGgpIHsKLSAgcHJpbnRlcl8tPlBy
aW50KCJtYXRjaGVkOiAiKTsKLSAgUHJpbnRQYXRoKGZpZWxkX3BhdGgsIHRydWUpOwotICBpZiAo
Q2hlY2tQYXRoQ2hhbmdlZChmaWVsZF9wYXRoKSkgewotICAgIHByaW50ZXJfLT5QcmludCgiIC0+
ICIpOwotICAgIFByaW50UGF0aChmaWVsZF9wYXRoLCBmYWxzZSk7Ci0gIH0KLSAgcHJpbnRlcl8t
PlByaW50KCIgOiAiKTsKLSAgUHJpbnRWYWx1ZShtZXNzYWdlMSwgZmllbGRfcGF0aCwgdHJ1ZSk7
Ci0gIHByaW50ZXJfLT5QcmludCgiXG4iKTsgIC8vIFByaW50IGZvciBuZXdsaW5lcy4KLX0KLQot
dm9pZCBNZXNzYWdlRGlmZmVyZW5jZXI6OlN0cmVhbVJlcG9ydGVyOjpSZXBvcnRJZ25vcmVkKAot
ICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2Uy
LAotICAgIGNvbnN0IHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiYgZmllbGRfcGF0aCkgewotICBwcmlu
dGVyXy0+UHJpbnQoImlnbm9yZWQ6ICIpOwotICBQcmludFBhdGgoZmllbGRfcGF0aCwgdHJ1ZSk7
Ci0gIGlmIChDaGVja1BhdGhDaGFuZ2VkKGZpZWxkX3BhdGgpKSB7Ci0gICAgcHJpbnRlcl8tPlBy
aW50KCIgLT4gIik7Ci0gICAgUHJpbnRQYXRoKGZpZWxkX3BhdGgsIGZhbHNlKTsKLSAgfQotICBw
cmludGVyXy0+UHJpbnQoIlxuIik7ICAvLyBQcmludCBmb3IgbmV3bGluZXMuCi19Ci0KLXZvaWQg
TWVzc2FnZURpZmZlcmVuY2VyOjpTdHJlYW1SZXBvcnRlcjo6UmVwb3J0VW5rbm93bkZpZWxkSWdu
b3JlZCgKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMSwgY29uc3QgTWVzc2FnZSYgbWVzc2Fn
ZTIsCi0gICAgY29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBmaWVsZF9wYXRoKSB7Ci0gIHBy
aW50ZXJfLT5QcmludCgiaWdub3JlZDogIik7Ci0gIFByaW50UGF0aChmaWVsZF9wYXRoLCB0cnVl
KTsKLSAgaWYgKENoZWNrUGF0aENoYW5nZWQoZmllbGRfcGF0aCkpIHsKLSAgICBwcmludGVyXy0+
UHJpbnQoIiAtPiAiKTsKLSAgICBQcmludFBhdGgoZmllbGRfcGF0aCwgZmFsc2UpOwotICB9Ci0g
IHByaW50ZXJfLT5QcmludCgiXG4iKTsgIC8vIFByaW50IGZvciBuZXdsaW5lcy4KLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNw
YWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9k
aWZmZXJlbmNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9kaWZmZXJlbmNl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWE3NGU2NzNkZDcwZDAzMTE2MDk3
NWRhZmU1MjAyZDFlNjRhZDAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL21lc3NhZ2VfZGlmZmVyZW5jZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDg0MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotLy8gQXV0aG9yOiBqc2Nob3JyQGdvb2dsZS5jb20gKEpvc2VwaCBTY2hvcnIp
Ci0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBT
YW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLS8vCi0vLyBUaGlzIGZpbGUg
ZGVmaW5lcyBzdGF0aWMgbWV0aG9kcyBhbmQgY2xhc3NlcyBmb3IgY29tcGFyaW5nIFByb3RvY29s
Ci0vLyBNZXNzYWdlcy4KLS8vCi0vLyBBdWcuIDIwMDg6IEFkZGVkIFVua25vd24gRmllbGRzIENv
bXBhcmlzb24gZm9yIG1lc3NhZ2VzLgotLy8gQXVnLiAyMDA5OiBBZGRlZCBkaWZmZXJlbnQgb3B0
aW9ucyB0byBjb21wYXJlIHJlcGVhdGVkIGZpZWxkcy4KLS8vIEFwci4gMjAxMDogTW92ZWQgZmll
bGQgY29tcGFyaXNvbiB0byBGaWVsZENvbXBhcmF0b3IuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RP
QlVGX1VUSUxfTUVTU0FHRV9ESUZGRVJFTkNFUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVG
X1VUSUxfTUVTU0FHRV9ESUZGRVJFTkNFUl9IX18KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRl
IDxzZXQ+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oPiAgLy8gRmllbGREZXNjcmlwdG9yCi0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuaD4gIC8vIE1lc3NhZ2UKLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvdW5rbm93bl9maWVsZF9zZXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvdXRpbC9maWVsZF9jb21wYXJhdG9yLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNw
YWNlIHByb3RvYnVmIHsKLQotY2xhc3MgRHluYW1pY01lc3NhZ2VGYWN0b3J5OwotY2xhc3MgRmll
bGREZXNjcmlwdG9yOwotCi1uYW1lc3BhY2UgaW8gewotY2xhc3MgWmVyb0NvcHlPdXRwdXRTdHJl
YW07Ci1jbGFzcyBQcmludGVyOwotfQotCi1uYW1lc3BhY2UgdXRpbCB7Ci0KLWNsYXNzIEZpZWxk
Q29udGV4dDsgIC8vIGRlY2xhcmVkIGJlbG93IE1lc3NhZ2VEaWZmZXJlbmNlcgotCi0vLyBBIGJh
c2ljIGRpZmZlcmVuY2VyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lCi0vLyB0aGUgZGlm
ZmVyZW5jZXMgYmV0d2VlbiB0d28gc3BlY2lmaWVkIFByb3RvY29sIE1lc3NhZ2VzLiBJZiBhbnkg
ZGlmZmVyZW5jZXMKLS8vIGFyZSBmb3VuZCwgdGhlIENvbXBhcmUgbWV0aG9kIHdpbGwgcmV0dXJu
IGZhbHNlLCBhbmQgYW55IGRpZmZlcmVuY2VyIHJlcG9ydGVyCi0vLyBzcGVjaWZpZWQgdmlhIFJl
cG9ydERpZmZlcmVuY2VzVG8gd2lsbCBoYXZlIGl0cyByZXBvcnRpbmcgbWV0aG9kcyBjYWxsZWQg
KHNlZQotLy8gYmVsb3cgZm9yIGltcGxlbWVudGF0aW9uIG9mIHRoZSByZXBvcnQpLiBCYXNlZCBv
ZmYgb2YgdGhlIG9yaWdpbmFsCi0vLyBQcm90b2NvbERpZmZlcmVuY2VyIGltcGxlbWVudGF0aW9u
IGluIC8vbmV0L3Byb3RvL3Byb3RvY29sLWRpZmZlcmVuY2VyLmgKLS8vIChUaGFua3MgVG9kZCEp
LgotLy8KLS8vIE1lc3NhZ2VEaWZmZXJlbmNlciBSRVFVSVJFUyB0aGF0IGNvbXBhcmVkIG1lc3Nh
Z2VzIGJlIHRoZSBzYW1lIHR5cGUsIGRlZmluZWQKLS8vIGFzIG1lc3NhZ2VzIHRoYXQgc2hhcmUg
dGhlIHNhbWUgZGVzY3JpcHRvci4gIElmIG5vdCwgdGhlIGJlaGF2aW9yIG9mIHRoaXMKLS8vIGNs
YXNzIGlzIHVuZGVmaW5lZC4KLS8vCi0vLyBQZW9wbGUgZGlzYWdyZWUgb24gd2hhdCBNZXNzYWdl
RGlmZmVyZW5jZXIgc2hvdWxkIGRvIHdoZW4gYXNrZWQgdG8gY29tcGFyZQotLy8gbWVzc2FnZXMg
d2l0aCBkaWZmZXJlbnQgZGVzY3JpcHRvcnMuICBTb21lIHBlb3BsZSB0aGluayBpdCBzaG91bGQg
YWx3YXlzCi0vLyByZXR1cm4gZmFsc2UuICBPdGhlcnMgZXhwZWN0IGl0IHRvIHRyeSB0byBsb29r
IGZvciBzaW1pbGFyIGZpZWxkcyBhbmQKLS8vIGNvbXBhcmUgdGhlbSBhbnl3YXkgLS0gZXNwZWNp
YWxseSBpZiB0aGUgZGVzY3JpcHRvcnMgaGFwcGVuIHRvIGJlIGlkZW50aWNhbC4KLS8vIElmIHdl
IGNob3NlIGVpdGhlciBvZiB0aGVzZSBiZWhhdmlvcnMsIHNvbWUgc2V0IG9mIHBlb3BsZSB3b3Vs
ZCBmaW5kIGl0Ci0vLyBzdXJwcmlzaW5nLCBhbmQgY291bGQgZW5kIHVwIHdyaXRpbmcgY29kZSBl
eHBlY3RpbmcgdGhlIG90aGVyIGJlaGF2aW9yCi0vLyB3aXRob3V0IHJlYWxpemluZyB0aGVpciBl
cnJvci4gIFRoZXJlZm9yZSwgd2UgZm9yYmlkIHRoYXQgdXNhZ2UuCi0vLwotLy8gVGhpcyBjbGFz
cyBpcyBpbXBsZW1lbnRlZCBiYXNlZCBvbiB0aGUgcHJvdG8yIHJlZmxlY3Rpb24uIFRoZSBwZXJm
b3JtYW5jZQotLy8gc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBub3JtYWwgdXNhZ2VzLiBIb3dl
dmVyLCBmb3IgcGxhY2VzIHdoZXJlIHRoZQotLy8gcGVyZm9ybWFuY2UgaXMgZXh0cmVtZWx5IHNl
bnNpdGl2ZSwgdGhlcmUgYXJlIHNldmVyYWwgYWx0ZXJuYXRpdmVzOgotLy8gLSBDb21wYXJpbmcg
c2VyaWFsaXplZCBzdHJpbmcKLS8vIERvd25zaWRlOiBmYWxzZSBuZWdhdGl2ZXMgKHRoZXJlIGFy
ZSBtZXNzYWdlcyB0aGF0IGFyZSB0aGUgc2FtZSBidXQgdGhlaXIKLS8vIHNlcmlhbGl6ZWQgc3Ry
aW5ncyBhcmUgZGlmZmVyZW50KS4KLS8vIC0gRXF1YWxzIGNvZGUgZ2VuZXJhdG9yIGJ5IGNvbXBp
bGVyIHBsdWdpbiAobmV0L3Byb3RvMi9jb250cmliL2VxdWFsc19wbHVnaW4pCi0vLyBEb3duc2lk
ZTogbW9yZSBnZW5lcmF0ZWQgY29kZTsgbWFpbnRlbmFuY2Ugb3ZlcmhlYWQgZm9yIHRoZSBhZGRp
dGlvbmFsIHJ1bGUKLS8vIChtdXN0IGJlIGluIHN5bmMgd2l0aCB0aGUgb3JpZ2luYWwgcHJvdG9f
bGlicmFyeSkuCi0vLwotLy8gTm90ZSBvbiBoYW5kbGluZyBvZiBnb29nbGUucHJvdG9idWYuQW55
OiBNZXNzYWdlRGlmZmVyZW5jZXIgYXV0b21hdGljYWxseQotLy8gdW5wYWNrcyBBbnk6OnZhbHVl
IGludG8gYSBNZXNzYWdlIGFuZCBjb21wYXJlcyBpdHMgaW5kaXZpZHVhbCBmaWVsZHMuCi0vLyBN
ZXNzYWdlcyBlbmNvZGVkIGluIGEgcmVwZWF0ZWQgQW55IGNhbm5vdCBiZSBjb21wYXJlZCB1c2lu
ZyBUcmVhdEFzTWFwLgotLy8KLS8vCi0vLyBOb3RlIG9uIHRocmVhZC1zYWZldHk6IE1lc3NhZ2VE
aWZmZXJlbmNlciBpcyAqbm90KiB0aHJlYWQtc2FmZS4gWW91IG5lZWQgdG8KLS8vIGd1YXJkIGl0
IHdpdGggYSBsb2NrIHRvIHVzZSB0aGUgc2FtZSBNZXNzYWdlRGlmZmVyZW5jZXIgaW5zdGFuY2Ug
ZnJvbQotLy8gbXVsdGlwbGUgdGhyZWFkcy4gTm90ZSB0aGF0IGl0J3MgZmluZSB0byBjYWxsIHN0
YXRpYyBjb21wYXJpc29uIG1ldGhvZHMKLS8vIChsaWtlIE1lc3NhZ2VEaWZmZXJlbmNlcjo6RXF1
YWxzKSBjb25jdXJyZW50bHkuCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgTWVzc2FnZURpZmZl
cmVuY2VyIHsKLSBwdWJsaWM6Ci0gIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgc3VwcGxpZWQg
bWVzc2FnZXMgYXJlIGVxdWFsLiBFcXVhbGl0eSBpcyBkZWZpbmVkIGFzCi0gIC8vIGFsbCBmaWVs
ZHMgd2l0aGluIHRoZSB0d28gbWVzc2FnZXMgYmVpbmcgc2V0IHRvIHRoZSBzYW1lIHZhbHVlLiBQ
cmltaXRpdmUKLSAgLy8gZmllbGRzIGFuZCBzdHJpbmdzIGFyZSBjb21wYXJlZCBieSB2YWx1ZSB3
aGlsZSBlbWJlZGRlZCBtZXNzYWdlcy9ncm91cHMKLSAgLy8gYXJlIGNvbXBhcmVkIGFzIGlmIHZp
YSBhIHJlY3Vyc2l2ZSBjYWxsLiBVc2UgSWdub3JlRmllbGQoKSBhbmQgQ29tcGFyZSgpCi0gIC8v
IGlmIHNvbWUgZmllbGRzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSBjb21wYXJpc29uLgotICAv
LwotICAvLyBUaGlzIG1ldGhvZCBSRVFVSVJFUyB0aGF0IHRoZSB0d28gbWVzc2FnZXMgaGF2ZSB0
aGUgc2FtZQotICAvLyBEZXNjcmlwdG9yIChtZXNzYWdlMS5HZXREZXNjcmlwdG9yKCkgPT0gbWVz
c2FnZTIuR2V0RGVzY3JpcHRvcigpKS4KLSAgc3RhdGljIGJvb2wgRXF1YWxzKGNvbnN0IE1lc3Nh
Z2UmIG1lc3NhZ2UxLCBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMik7Ci0KLSAgLy8gRGV0ZXJtaW5l
cyB3aGV0aGVyIHRoZSBzdXBwbGllZCBtZXNzYWdlcyBhcmUgZXF1aXZhbGVudC4gRXF1aXZhbGVu
Y3kgaXMKLSAgLy8gZGVmaW5lZCBhcyBhbGwgZmllbGRzIHdpdGhpbiB0aGUgdHdvIG1lc3NhZ2Vz
IGhhdmluZyB0aGUgc2FtZSB2YWx1ZS4gVGhpcwotICAvLyBkaWZmZXJzIGZyb20gdGhlIEVxdWFs
cyBtZXRob2QgYWJvdmUgaW4gdGhhdCBmaWVsZHMgd2l0aCBkZWZhdWx0IHZhbHVlcwotICAvLyBh
cmUgY29uc2lkZXJlZCBzZXQgdG8gc2FpZCB2YWx1ZSBhdXRvbWF0aWNhbGx5LiBGb3IgZGV0YWls
cyBvbiBob3cgZGVmYXVsdAotICAvLyB2YWx1ZXMgYXJlIGRlZmluZWQgZm9yIGVhY2ggZmllbGQg
dHlwZSwgc2VlIGh0dHA6Ly9zaG9ydG4vX3gyR3Y2WEZyV3QuCi0gIC8vIEFsc28sIEVxdWl2YWxl
bnQoKSBpZ25vcmVzIHVua25vd24gZmllbGRzLiBVc2UgSWdub3JlRmllbGQoKSBhbmQgQ29tcGFy
ZSgpCi0gIC8vIGlmIHNvbWUgZmllbGRzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSBjb21wYXJp
c29uLgotICAvLwotICAvLyBUaGlzIG1ldGhvZCBSRVFVSVJFUyB0aGF0IHRoZSB0d28gbWVzc2Fn
ZXMgaGF2ZSB0aGUgc2FtZQotICAvLyBEZXNjcmlwdG9yIChtZXNzYWdlMS5HZXREZXNjcmlwdG9y
KCkgPT0gbWVzc2FnZTIuR2V0RGVzY3JpcHRvcigpKS4KLSAgc3RhdGljIGJvb2wgRXF1aXZhbGVu
dChjb25zdCBNZXNzYWdlJiBtZXNzYWdlMSwgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTIpOwotCi0g
IC8vIERldGVybWluZXMgd2hldGhlciB0aGUgc3VwcGxpZWQgbWVzc2FnZXMgYXJlIGFwcHJveGlt
YXRlbHkgZXF1YWwuCi0gIC8vIEFwcHJveGltYXRlIGVxdWFsaXR5IGlzIGRlZmluZWQgYXMgYWxs
IGZpZWxkcyB3aXRoaW4gdGhlIHR3byBtZXNzYWdlcwotICAvLyBiZWluZyBhcHByb3hpbWF0ZWx5
IGVxdWFsLiAgUHJpbWl0aXZlIChub24tZmxvYXQpIGZpZWxkcyBhbmQgc3RyaW5ncyBhcmUKLSAg
Ly8gY29tcGFyZWQgYnkgdmFsdWUsIGZsb2F0cyBhcmUgY29tcGFyZWQgdXNpbmcgTWF0aFV0aWw6
OkFsbW9zdEVxdWFscygpIGFuZAotICAvLyBlbWJlZGRlZCBtZXNzYWdlcy9ncm91cHMgYXJlIGNv
bXBhcmVkIGFzIGlmIHZpYSBhIHJlY3Vyc2l2ZSBjYWxsLiBVc2UKLSAgLy8gSWdub3JlRmllbGQo
KSBhbmQgQ29tcGFyZSgpIGlmIHNvbWUgZmllbGRzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZQot
ICAvLyBjb21wYXJpc29uLgotICAvLwotICAvLyBUaGlzIG1ldGhvZCBSRVFVSVJFUyB0aGF0IHRo
ZSB0d28gbWVzc2FnZXMgaGF2ZSB0aGUgc2FtZQotICAvLyBEZXNjcmlwdG9yIChtZXNzYWdlMS5H
ZXREZXNjcmlwdG9yKCkgPT0gbWVzc2FnZTIuR2V0RGVzY3JpcHRvcigpKS4KLSAgc3RhdGljIGJv
b2wgQXBwcm94aW1hdGVseUVxdWFscyhjb25zdCBNZXNzYWdlJiBtZXNzYWdlMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMik7Ci0KLSAg
Ly8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzdXBwbGllZCBtZXNzYWdlcyBhcmUgYXBwcm94aW1h
dGVseSBlcXVpdmFsZW50LgotICAvLyBBcHByb3hpbWF0ZSBlcXVpdmFsZW5jeSBpcyBkZWZpbmVk
IGFzIGFsbCBmaWVsZHMgd2l0aGluIHRoZSB0d28gbWVzc2FnZXMKLSAgLy8gYmVpbmcgYXBwcm94
aW1hdGVseSBlcXVpdmFsZW50LiBBcyBpbgotICAvLyBNZXNzYWdlRGlmZmVyZW5jZXI6OkFwcHJv
eGltYXRlbHlFcXVhbHMsIHByaW1pdGl2ZSAobm9uLWZsb2F0KSBmaWVsZHMgYW5kCi0gIC8vIHN0
cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLCBmbG9hdHMgYXJlIGNvbXBhcmVkIHVzaW5nCi0g
IC8vIE1hdGhVdGlsOjpBbG1vc3RFcXVhbHMoKSBhbmQgZW1iZWRkZWQgbWVzc2FnZXMvZ3JvdXBz
IGFyZSBjb21wYXJlZCBhcyBpZgotICAvLyB2aWEgYSByZWN1cnNpdmUgY2FsbC4gSG93ZXZlciwg
ZmllbGRzIHdpdGggZGVmYXVsdCB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQKLSAgLy8gc2V0IHRvIHNh
aWQgdmFsdWUsIGFzIHBlciBNZXNzYWdlRGlmZmVuY2VyOjpFcXVpdmFsZW50LiBVc2UgSWdub3Jl
RmllbGQoKQotICAvLyBhbmQgQ29tcGFyZSgpIGlmIHNvbWUgZmllbGRzIHNob3VsZCBiZSBpZ25v
cmVkIGluIHRoZSBjb21wYXJpc29uLgotICAvLwotICAvLyBUaGlzIG1ldGhvZCBSRVFVSVJFUyB0
aGF0IHRoZSB0d28gbWVzc2FnZXMgaGF2ZSB0aGUgc2FtZQotICAvLyBEZXNjcmlwdG9yIChtZXNz
YWdlMS5HZXREZXNjcmlwdG9yKCkgPT0gbWVzc2FnZTIuR2V0RGVzY3JpcHRvcigpKS4KLSAgc3Rh
dGljIGJvb2wgQXBwcm94aW1hdGVseUVxdWl2YWxlbnQoY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UyKTsKLQotICAvLyBJZGVudGlmaWVzIGFuIGluZGl2aWR1YWwgZmllbGQgaW4gYSBtZXNz
YWdlIGluc3RhbmNlLiAgVXNlZCBmb3IgZmllbGRfcGF0aCwKLSAgLy8gYmVsb3cuCi0gIHN0cnVj
dCBTcGVjaWZpY0ZpZWxkIHsKLSAgICAvLyBGb3Iga25vd24gZmllbGRzLCAiZmllbGQiIGlzIGZp
bGxlZCBpbiBhbmQgInVua25vd25fZmllbGRfbnVtYmVyIiBpcyAtMS4KLSAgICAvLyBGb3IgdW5r
bm93biBmaWVsZHMsICJmaWVsZCIgaXMgTlVMTCwgInVua25vd25fZmllbGRfbnVtYmVyIiBpcyB0
aGUgZmllbGQKLSAgICAvLyBudW1iZXIsIGFuZCAidW5rbm93bl9maWVsZF90eXBlIiBpcyBpdHMg
dHlwZS4KLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkOwotICAgIGludCB1bmtub3du
X2ZpZWxkX251bWJlcjsKLSAgICBVbmtub3duRmllbGQ6OlR5cGUgdW5rbm93bl9maWVsZF90eXBl
OwotCi0gICAgLy8gSWYgdGhpcyBhIHJlcGVhdGVkIGZpZWxkLCAiaW5kZXgiIGlzIHRoZSBpbmRl
eCB3aXRoaW4gaXQuICBGb3IgdW5rbm93bgotICAgIC8vIGZpZWxkcywgdGhpcyBpcyB0aGUgaW5k
ZXggb2YgdGhlIGZpZWxkIGFtb25nIGFsbCB1bmtub3duIGZpZWxkcyBvZiB0aGUKLSAgICAvLyBz
YW1lIGZpZWxkIG51bWJlciBhbmQgdHlwZS4KLSAgICBpbnQgaW5kZXg7Ci0KLSAgICAvLyBJZiAi
ZmllbGQiIGlzIGEgcmVwZWF0ZWQgZmllbGQgd2hpY2ggaXMgYmVpbmcgdHJlYXRlZCBhcyBhIG1h
cCBvcgotICAgIC8vIGEgc2V0IChzZWUgVHJlYXRBc01hcCgpIGFuZCBUcmVhdEFzU2V0KCksIGJl
bG93KSwgbmV3X2luZGV4IGluZGljYXRlcwotICAgIC8vIHRoZSBpbmRleCB0aGUgcG9zaXRpb24g
dG8gd2hpY2ggdGhlIGVsZW1lbnQgaGFzIG1vdmVkLiAgVGhpcyBvbmx5Ci0gICAgLy8gYXBwbGll
cyB0byBSZXBvcnRNb3ZlZCgpIGFuZCAoaW4gdGhlIGNhc2Ugb2YgVHJlYXRBc01hcCgpKQotICAg
IC8vIFJlcG9ydE1vZGlmaWVkKCkuICBJbiBhbGwgb3RoZXIgY2FzZXMsICJuZXdfaW5kZXgiIHdp
bGwgaGF2ZSB0aGUgc2FtZQotICAgIC8vIHZhbHVlIGFzICJpbmRleCIuCi0gICAgaW50IG5ld19p
bmRleDsKLQotICAgIC8vIEZvciB1bmtub3duIGZpZWxkcywgdGhlc2UgYXJlIHRoZSBwb2ludGVy
cyB0byB0aGUgVW5rbm93bkZpZWxkU2V0Ci0gICAgLy8gY29udGFpbmluZyB0aGUgdW5rbm93biBm
aWVsZHMuIEluIGNlcnRhaW4gY2FzZXMgKGUuZy4gcHJvdG8xJ3MKLSAgICAvLyBNZXNzYWdlU2V0
LCBvciBuZXN0ZWQgZ3JvdXBzIG9mIHVua25vd24gZmllbGRzKSwgdGhlc2UgbWF5IGRpZmZlciBm
cm9tCi0gICAgLy8gdGhlIG1lc3NhZ2VzJyBpbnRlcm5hbCBVbmtub3duRmllbGRTZXRzLgotICAg
IGNvbnN0IFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZF9zZXQxOwotICAgIGNvbnN0IFVu
a25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZF9zZXQyOwotCi0gICAgLy8gRm9yIHVua25vd24g
ZmllbGRzLCB0aGVzZSBhcmUgdGhlIGluZGV4IG9mIHRoZSBmaWVsZCB3aXRoaW4gdGhlCi0gICAg
Ly8gVW5rbm93bkZpZWxkU2V0cy4gT25lIG9yIHRoZSBvdGhlciB3aWxsIGJlIC0xIHdoZW4KLSAg
ICAvLyByZXBvcnRpbmcgYW4gYWRkaXRpb24gb3IgZGVsZXRpb24uCi0gICAgaW50IHVua25vd25f
ZmllbGRfaW5kZXgxOwotICAgIGludCB1bmtub3duX2ZpZWxkX2luZGV4MjsKLQotICAgIFNwZWNp
ZmljRmllbGQoKQotICAgICAgICA6IGZpZWxkKE5VTEwpLAotICAgICAgICAgIHVua25vd25fZmll
bGRfbnVtYmVyKC0xKSwKLSAgICAgICAgICBpbmRleCgtMSksCi0gICAgICAgICAgbmV3X2luZGV4
KC0xKSwKLSAgICAgICAgICB1bmtub3duX2ZpZWxkX3NldDEoTlVMTCksCi0gICAgICAgICAgdW5r
bm93bl9maWVsZF9zZXQyKE5VTEwpLAotICAgICAgICAgIHVua25vd25fZmllbGRfaW5kZXgxKC0x
KSwKLSAgICAgICAgICB1bmtub3duX2ZpZWxkX2luZGV4MigtMSkge30KLSAgfTsKLQotICAvLyBB
YnN0cmFjdCBiYXNlIGNsYXNzIGZyb20gd2hpY2ggYWxsIE1lc3NhZ2VEaWZmZXJlbmNlcgotICAv
LyByZXBvcnRlcnMgZGVyaXZlLiBUaGUgZml2ZSBSZXBvcnQqIG1ldGhvZHMgYmVsb3cgd2lsbCBi
ZSBjYWxsZWQgd2hlbgotICAvLyBhIGZpZWxkIGhhcyBiZWVuIGFkZGVkLCBkZWxldGVkLCBtb2Rp
ZmllZCwgbW92ZWQsIG9yIG1hdGNoZWQuIFRoZSB0aGlyZAotICAvLyBhcmd1bWVudCBpcyBhIHZl
Y3RvciBvZiBGaWVsZERlc2NyaXB0b3IgcG9pbnRlcnMgd2hpY2ggZGVzY3JpYmVzIHRoZSBjaGFp
bgotICAvLyBvZiBmaWVsZHMgdGhhdCB3YXMgdGFrZW4gdG8gZmluZCB0aGUgY3VycmVudCBmaWVs
ZC4gRm9yIGV4YW1wbGUsIGZvciBhCi0gIC8vIGZpZWxkIGZvdW5kIGluIGFuIGVtYmVkZGVkIG1l
c3NhZ2UsIHRoZSB2ZWN0b3Igd2lsbCBjb250YWluIHR3bwotICAvLyBGaWVsZERlc2NyaXB0b3Jz
LiBUaGUgZmlyc3Qgd2lsbCBiZSB0aGUgZmllbGQgb2YgdGhlIGVtYmVkZGVkIG1lc3NhZ2UKLSAg
Ly8gaXRzZWxmIGFuZCB0aGUgc2Vjb25kIHdpbGwgYmUgdGhlIGFjdHVhbCBmaWVsZCBpbiB0aGUg
ZW1iZWRkZWQgbWVzc2FnZQotICAvLyB0aGF0IHdhcyBhZGRlZC9kZWxldGVkL21vZGlmaWVkLgot
ICBjbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgUmVwb3J0ZXIgewotICAgcHVibGljOgotICAgIFJl
cG9ydGVyKCk7Ci0gICAgdmlydHVhbCB+UmVwb3J0ZXIoKTsKLQotICAgIC8vIFJlcG9ydHMgdGhh
dCBhIGZpZWxkIGhhcyBiZWVuIGFkZGVkIGludG8gTWVzc2FnZTIuCi0gICAgdmlydHVhbCB2b2lk
IFJlcG9ydEFkZGVkKAotICAgICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMSwgY29uc3QgTWVz
c2FnZSYgbWVzc2FnZTIsCi0gICAgICAgIGNvbnN0IHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiYgZmll
bGRfcGF0aCkgPSAwOwotCi0gICAgLy8gUmVwb3J0cyB0aGF0IGEgZmllbGQgaGFzIGJlZW4gZGVs
ZXRlZCBmcm9tIE1lc3NhZ2UxLgotICAgIHZpcnR1YWwgdm9pZCBSZXBvcnREZWxldGVkKAotICAg
ICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMSwKLSAgICAgICAgY29uc3QgTWVzc2FnZSYgbWVz
c2FnZTIsCi0gICAgICAgIGNvbnN0IHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiYgZmllbGRfcGF0aCkg
PSAwOwotCi0gICAgLy8gUmVwb3J0cyB0aGF0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIGhhcyBiZWVu
IG1vZGlmaWVkLgotICAgIHZpcnR1YWwgdm9pZCBSZXBvcnRNb2RpZmllZCgKLSAgICAgICAgY29u
c3QgTWVzc2FnZSYgbWVzc2FnZTEsCi0gICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAot
ICAgICAgICBjb25zdCB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4mIGZpZWxkX3BhdGgpID0gMDsKLQot
ICAgIC8vIFJlcG9ydHMgdGhhdCBhIHJlcGVhdGVkIGZpZWxkIGhhcyBiZWVuIG1vdmVkIHRvIGFu
b3RoZXIgbG9jYXRpb24uICBUaGlzCi0gICAgLy8gb25seSBhcHBsaWVzIHdoZW4gdXNpbmcgVHJl
YXRBc1NldCBvciBUcmVhdEFzTWFwKCkgIC0tIHNlZSBiZWxvdy4gQWxzbwotICAgIC8vIG5vdGUg
dGhhdCBmb3IgYW55IGdpdmVuIGZpZWxkLCBSZXBvcnRNb2RpZmllZCBhbmQgUmVwb3J0TW92ZWQg
YXJlCi0gICAgLy8gbXV0dWFsbHkgZXhjbHVzaXZlLiBJZiBhIGZpZWxkIGhhcyBiZWVuIGJvdGgg
bW92ZWQgYW5kIG1vZGlmaWVkLCB0aGVuCi0gICAgLy8gb25seSBSZXBvcnRNb2RpZmllZCB3aWxs
IGJlIGNhbGxlZC4KLSAgICB2aXJ0dWFsIHZvaWQgUmVwb3J0TW92ZWQoCi0gICAgICAgIGNvbnN0
IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAgICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAg
ICAgICAgY29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBmaWVsZF9wYXRoKSB7IH0KLQotICAg
IC8vIFJlcG9ydHMgdGhhdCB0d28gZmllbGRzIG1hdGNoLiBVc2VmdWwgZm9yIGRvaW5nIHNpZGUt
Ynktc2lkZSBkaWZmcy4KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2
ZSB3aXRoIFJlcG9ydE1vZGlmaWVkIGFuZCBSZXBvcnRNb3ZlZC4KLSAgICAvLyBOb3RlIHRoYXQg
eW91IG11c3QgY2FsbCBzZXRfcmVwb3J0X21hdGNoZXModHJ1ZSkgYmVmb3JlIGNhbGxpbmcgQ29t
cGFyZQotICAgIC8vIHRvIG1ha2UgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgdmlydHVhbCB2
b2lkIFJlcG9ydE1hdGNoZWQoCi0gICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAg
ICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAgICAgICAgY29uc3QgdmVjdG9yPFNwZWNp
ZmljRmllbGQ+JiBmaWVsZF9wYXRoKSB7IH0KLQotICAgIC8vIFJlcG9ydHMgdGhhdCB0d28gZmll
bGRzIHdvdWxkIGhhdmUgYmVlbiBjb21wYXJlZCwgYnV0IHRoZQotICAgIC8vIGNvbXBhcmlzb24g
aGFzIGJlZW4gc2tpcHBlZCBiZWNhdXNlIHRoZSBmaWVsZCB3YXMgbWFya2VkIGFzCi0gICAgLy8g
J2lnbm9yZWQnIHVzaW5nIElnbm9yZUZpZWxkKCkuICBUaGlzIGZ1bmN0aW9uIGlzIG11dHVhbGx5
Ci0gICAgLy8gZXhjbHVzaXZlIHdpdGggYWxsIHRoZSBvdGhlciBSZXBvcnQoKSBmdW5jdGlvbnMu
Ci0gICAgLy8KLSAgICAvLyBUaGUgY29udHJhY3Qgb2YgUmVwb3J0SWdub3JlZCBpcyBzbGlnaHRs
eSBkaWZmZXJlbnQgdGhhbiB0aGUKLSAgICAvLyBvdGhlciBSZXBvcnQoKSBmdW5jdGlvbnMsIGlu
IHRoYXQgfGZpZWxkX3BhdGguYmFjaygpLmluZGV4fCBpcwotICAgIC8vIGFsd2F5cyBlcXVhbCB0
byAtMSwgZXZlbiBpZiB0aGUgbGFzdCBmaWVsZCBpcyByZXBlYXRlZC4gVGhpcyBpcwotICAgIC8v
IGJlY2F1c2Ugd2hpbGUgdGhlIG90aGVyIFJlcG9ydCgpIGZ1bmN0aW9ucyBpbmRpY2F0ZSB3aGVy
ZSBpbiBhCi0gICAgLy8gcmVwZWF0ZWQgZmllbGQgdGhlIGFjdGlvbiAoQWRkaXRpb24sIERlbGV0
aW9uLCBldGMuLi4pCi0gICAgLy8gaGFwcGVuZWQsIHdoZW4gYSByZXBlYXRlZCBmaWVsZCBpcyAn
aWdub3JlZCcsIHRoZSBkaWZmZXJlbmNlcgotICAgIC8vIHNpbXBseSBjYWxscyBSZXBvcnRJZ25v
cmVkIG9uIHRoZSByZXBlYXRlZCBmaWVsZCBhcyBhIHdob2xlIGFuZAotICAgIC8vIG1vdmVzIG9u
IHdpdGhvdXQgbG9va2luZyBhdCBpdHMgaW5kaXZpZHVhbCBlbGVtZW50cy4KLSAgICAvLwotICAg
IC8vIEZ1cnRoZXJtb3JlLCBSZXBvcnRJZ25vcmVkKCkgZG9lcyBub3QgaW5kaWNhdGUgd2hldGhl
ciB0aGUKLSAgICAvLyBmaWVsZHMgd2VyZSBpbiBmYWN0IGVxdWFsIG9yIG5vdCwgYXMgQ29tcGFy
ZSgpIGRvZXMgbm90IGluc3BlY3QKLSAgICAvLyB0aGVzZSBmaWVsZHMgYXQgYWxsLiBJdCBpcyB1
cCB0byB0aGUgUmVwb3J0ZXIgdG8gZGVjaWRlIHdoZXRoZXIKLSAgICAvLyB0aGUgZmllbGRzIGFy
ZSBlcXVhbCBvciBub3QgKHBlcmhhcHMgd2l0aCBhIHNlY29uZCBjYWxsIHRvCi0gICAgLy8gQ29t
cGFyZSgpKSwgaWYgaXQgY2FyZXMuCi0gICAgdmlydHVhbCB2b2lkIFJlcG9ydElnbm9yZWQoCi0g
ICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAgICAgICBjb25zdCBNZXNzYWdlJiBt
ZXNzYWdlMiwKLSAgICAgICAgY29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBmaWVsZF9wYXRo
KSB7IH0KLQotICAgIC8vIFJlcG9ydCB0aGF0IGFuIHVua293biBmaWVsZCBpcyBpZ25vcmVkLiAo
c2VlIGNvbW1lbnQgYWJvdmUpLgotICAgIC8vIE5vdGUgdGhpcyBpcyBhIGRpZmZlcmVudCBmdW5j
dGlvbiBzaW5jZSB0aGUgbGFzdCBTcGVjaWZpY0ZpZWxkIGluIGZpZWxkCi0gICAgLy8gcGF0aCBo
YXMgYSBudWxsIGZpZWxkLiAgVGhpcyBjb3VsZCBicmVhayBleGlzdGluZyBSZXBvcnRlci4KLSAg
ICB2aXJ0dWFsIHZvaWQgUmVwb3J0VW5rbm93bkZpZWxkSWdub3JlZCgKLSAgICAgICAgY29uc3Qg
TWVzc2FnZSYgbWVzc2FnZTEsIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgICAgICBjb25z
dCB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4mIGZpZWxkX3BhdGgpIHt9Ci0KLSAgIHByaXZhdGU6Ci0g
ICAgR09PR0xFX0RJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJlcG9ydGVyKTsKLSAgfTsKLQot
ICAvLyBNYXBLZXlDb21wYXJhdG9yIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHR3byBlbGVtZW50
cyBoYXZlIHRoZSBzYW1lIGtleQotICAvLyB3aGVuIGNvbXBhcmluZyBlbGVtZW50cyBvZiBhIHJl
cGVhdGVkIGZpZWxkIGFzIGEgbWFwLgotICBjbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgTWFwS2V5
Q29tcGFyYXRvciB7Ci0gICBwdWJsaWM6Ci0gICAgTWFwS2V5Q29tcGFyYXRvcigpOwotICAgIHZp
cnR1YWwgfk1hcEtleUNvbXBhcmF0b3IoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBJc01hdGNoKGNv
bnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1l
c3NhZ2UmIG1lc3NhZ2UyLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvcjxT
cGVjaWZpY0ZpZWxkPiYgcGFyZW50X2ZpZWxkcykgY29uc3QgewotICAgICAgR09PR0xFX0NIRUNL
KGZhbHNlKSA8PCAiSXNNYXRjaCgpIGlzIG5vdCBpbXBsZW1lbnRlZC4iOwotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBHT09HTEVfRElTQUxMT1dfRVZJTF9D
T05TVFJVQ1RPUlMoTWFwS2V5Q29tcGFyYXRvcik7Ci0gIH07Ci0KLSAgLy8gQWJzdHJhY3QgYmFz
ZSBjbGFzcyBmcm9tIHdoaWNoIGFsbCBJZ25vcmVDcml0ZXJpYSBkZXJpdmUuCi0gIC8vIEJ5IGFk
ZGluZyBJZ25vcmVDcml0ZXJpYSBtb3JlIGNvbXBsZXggaWdub3JlIGxvZ2ljIGNhbiBiZSBpbXBs
ZW1lbnRlZC4KLSAgLy8gSWdub3JlQ3JpdGVyaWEgYXJlIHJlZ2lzdGVkIHdpdGggQWRkSWdub3Jl
Q3JpdGVyaWEuIEZvciBlYWNoIGNvbXBhcmVkCi0gIC8vIGZpZWxkIElzSWdub3JlZCBpcyBjYWxs
ZWQgb24gZWFjaCBhZGRlZCBJZ25vcmVDcml0ZXJpYSB1bnRpbCBvbmUgcmV0dXJucwotICAvLyB0
cnVlIG9yIGFsbCByZXR1cm4gZmFsc2UuCi0gIC8vIElzSWdub3JlZCBpcyBjYWxsZWQgZm9yIGZp
ZWxkcyB3aGVyZSBhdCBsZWFzdCBvbmUgc2lkZSBoYXMgYSB2YWx1ZS4KLSAgY2xhc3MgTElCUFJP
VE9CVUZfRVhQT1JUIElnbm9yZUNyaXRlcmlhIHsKLSAgIHB1YmxpYzoKLSAgICBJZ25vcmVDcml0
ZXJpYSgpOwotICAgIHZpcnR1YWwgfklnbm9yZUNyaXRlcmlhKCk7Ci0KLSAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGZpZWxkIHNob3VsZCBiZSBpZ25vcmVkLgotICAgIHZpcnR1YWwgYm9vbCBJ
c0lnbm9yZWQoCi0gICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAgICAgICBjb25z
dCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCwKLSAgICAgICAgY29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBwYXJlbnRfZmllbGRzKSA9
IDA7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVua25vd24gZmllbGQgc2hvdWxkIGJl
IGlnbm9yZWQuCi0gICAgLy8gTm90ZTogVGhpcyB3aWxsIGJlIGNhbGxlZCBmb3IgdW5rbm93biBm
aWVsZHMgYXMgd2VsbCBpbiB3aGljaCBjYXNlCi0gICAgLy8gICAgICAgZmllbGQuZmllbGQgd2ls
bCBiZSBudWxsLgotICAgIHZpcnR1YWwgYm9vbCBJc1Vua25vd25GaWVsZElnbm9yZWQoCi0gICAg
ICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLCBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAg
ICAgICAgY29uc3QgU3BlY2lmaWNGaWVsZCYgZmllbGQsCi0gICAgICAgIGNvbnN0IHZlY3RvcjxT
cGVjaWZpY0ZpZWxkPiYgcGFyZW50X2ZpZWxkcykgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgfTsKLQotICAvLyBUbyBhZGQgYSBSZXBvcnRlciwgY29uc3RydWN0IGRlZmF1bHQgaGVy
ZSwgdGhlbiB1c2UgUmVwb3J0RGlmZmVyZW5jZXNUbyBvcgotICAvLyBSZXBvcnREaWZmZXJlbmNl
c1RvU3RyaW5nLgotICBleHBsaWNpdCBNZXNzYWdlRGlmZmVyZW5jZXIoKTsKLQotICB+TWVzc2Fn
ZURpZmZlcmVuY2VyKCk7Ci0KLSAgZW51bSBNZXNzYWdlRmllbGRDb21wYXJpc29uIHsKLSAgICBF
UVVBTCwgICAgICAgLy8gRmllbGRzIG11c3QgYmUgcHJlc2VudCBpbiBib3RoIG1lc3NhZ2VzCi0g
ICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgbWVzc2FnZXMgdG8gYmUgY29uc2lkZXJlZCB0aGUg
c2FtZS4KLSAgICBFUVVJVkFMRU5ULCAgLy8gRmllbGRzIHdpdGggZGVmYXVsdCB2YWx1ZXMgYXJl
IGNvbnNpZGVyZWQgc2V0Ci0gICAgICAgICAgICAgICAgIC8vIGZvciBjb21wYXJpc29uIHB1cnBv
c2VzIGV2ZW4gaWYgbm90IGV4cGxpY2l0bHkKLSAgICAgICAgICAgICAgICAgLy8gc2V0IGluIHRo
ZSBtZXNzYWdlcyB0aGVtc2VsdmVzLiAgVW5rbm93biBmaWVsZHMKLSAgICAgICAgICAgICAgICAg
Ly8gYXJlIGlnbm9yZWQuCi0gIH07Ci0KLSAgZW51bSBTY29wZSB7Ci0gICAgRlVMTCwgICAgLy8g
QWxsIGZpZWxkcyBvZiBib3RoIG1lc3NhZ2VzIGFyZSBjb25zaWRlcmVkIGluIHRoZSBjb21wYXJp
c29uLgotICAgIFBBUlRJQUwgIC8vIE9ubHkgZmllbGRzIHByZXNlbnQgaW4gdGhlIGZpcnN0IG1l
c3NhZ2UgYXJlIGNvbnNpZGVyZWQ7IGZpZWxkcwotICAgICAgICAgICAgIC8vIHNldCBvbmx5IGlu
IHRoZSBzZWNvbmQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQgZHVyaW5nCi0gICAgICAgICAgICAg
Ly8gY29tcGFyaXNvbi4KLSAgfTsKLQotICAvLyBERVBSRUNBVEVELiBVc2UgRmllbGRDb21wYXJh
dG9yOjpGbG9hdENvbXBhcmlzb24gaW5zdGVhZC4KLSAgZW51bSBGbG9hdENvbXBhcmlzb24gewot
ICAgIEVYQUNULCAgICAgICAvLyBGbG9hdHMgYW5kIGRvdWJsZXMgYXJlIGNvbXBhcmVkIGV4YWN0
bHkuCi0gICAgQVBQUk9YSU1BVEUgIC8vIEZsb2F0cyBhbmQgZG91YmxlcyBhcmUgY29tcGFyZWQg
dXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgIC8vIE1hdGhVdGlsOjpBbG1vc3RFcXVhbHMgbWV0
aG9kLgotICB9OwotCi0gIGVudW0gUmVwZWF0ZWRGaWVsZENvbXBhcmlzb24gewotICAgIEFTX0xJ
U1QsICAgICAvLyBSZXBlYXRlZCBmaWVsZHMgYXJlIGNvbXBhcmVkIGluIG9yZGVyLiAgRGlmZmVy
aW5nIHZhbHVlcyBhdAotICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBpbmRleCBhcmUgcmVw
b3J0ZWQgdXNpbmcgUmVwb3J0TW9kaWZpZWQoKS4gIElmIHRoZQotICAgICAgICAgICAgICAgICAv
LyByZXBlYXRlZCBmaWVsZHMgaGF2ZSBkaWZmZXJlbnQgbnVtYmVycyBvZiBlbGVtZW50cywgdGhl
Ci0gICAgICAgICAgICAgICAgIC8vIHVucGFpcmVkIGVsZW1lbnRzIGFyZSByZXBvcnRlZCB1c2lu
ZyBSZXBvcnRBZGRlZCgpIG9yCi0gICAgICAgICAgICAgICAgIC8vIFJlcG9ydERlbGV0ZWQoKS4K
LSAgICBBU19TRVQsICAgICAgLy8gVHJlYXQgYWxsIHRoZSByZXBlYXRlZCBmaWVsZHMgYXMgc2V0
cyBieSBkZWZhdWx0LgotICAgICAgICAgICAgICAgICAvLyBTZWUgVHJlYXRBc1NldCgpLCBhcyBi
ZWxvdy4KLSAgfTsKLQotICAvLyBUaGUgZWxlbWVudHMgb2YgdGhlIGdpdmVuIHJlcGVhdGVkIGZp
ZWxkIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNldCBmb3IKLSAgLy8gZGlmZmluZyBwdXJwb3Nlcywg
c28gZGlmZmVyZW50IG9yZGVyaW5ncyBvZiB0aGUgc2FtZSBlbGVtZW50cyB3aWxsIGJlCi0gIC8v
IGNvbnNpZGVyZWQgZXF1YWwuICBFbGVtZW50cyB3aGljaCBhcmUgcHJlc2VudCBvbiBib3RoIHNp
ZGVzIG9mIHRoZQotICAvLyBjb21wYXJpc29uIGJ1dCB3aGljaCBoYXZlIGNoYW5nZWQgcG9zaXRp
b24gd2lsbCBiZSByZXBvcnRlZCB3aXRoCi0gIC8vIFJlcG9ydE1vdmVkKCkuICBFbGVtZW50cyB3
aGljaCBvbmx5IGV4aXN0IG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhlciBhcmUKLSAgLy8gcmVwb3J0
ZWQgd2l0aCBSZXBvcnRBZGRlZCgpIGFuZCBSZXBvcnREZWxldGVkKCkgcmVnYXJkbGVzcyBvZiB0
aGVpcgotICAvLyBwb3NpdGlvbnMuICBSZXBvcnRNb2RpZmllZCgpIGlzIG5ldmVyIHVzZWQgZm9y
IHRoaXMgcmVwZWF0ZWQgZmllbGQuICBJZgotICAvLyB0aGUgb25seSBkaWZmZXJlbmNlcyBiZXR3
ZWVuIHRoZSBjb21wYXJlZCBtZXNzYWdlcyBpcyB0aGF0IHNvbWUgZmllbGRzCi0gIC8vIGhhdmUg
YmVlbiBtb3ZlZCwgdGhlbiB0aGUgY29tcGFyaXNvbiByZXR1cm5zIHRydWUuCi0gIC8vCi0gIC8v
IElmIHRoZSBzY29wZSBvZiBjb21wYXJpc29uIGlzIHNldCB0byBQQVJUSUFMLCB0aGVuIGluIGFk
ZGl0aW9uIHRvIHdoYXQncwotICAvLyBhYm92ZSwgZXh0cmEgdmFsdWVzIGFkZGVkIHRvIHJlcGVh
dGVkIGZpZWxkcyBvZiB0aGUgc2Vjb25kIG1lc3NhZ2Ugd2lsbAotICAvLyBub3QgY2F1c2UgdGhl
IGNvbXBhcmlzb24gdG8gZmFpbC4KLSAgLy8KLSAgLy8gTm90ZSB0aGF0IHNldCBjb21wYXJpc29u
IGlzIGN1cnJlbnRseSBPKGsgKiBuXjIpICh3aGVyZSBuIGlzIHRoZSB0b3RhbAotICAvLyBudW1i
ZXIgb2YgZWxlbWVudHMsIGFuZCBrIGlzIHRoZSBhdmVyYWdlIHNpemUgb2YgZWFjaCBlbGVtZW50
KS4gSW4gdGhlb3J5Ci0gIC8vIGl0IGNvdWxkIGJlIG1hZGUgTyhuICogaykgd2l0aCBhIG1vcmUg
Y29tcGxleCBoYXNoaW5nIGltcGxlbWVudGF0aW9uLiBGZWVsCi0gIC8vIGZyZWUgdG8gY29udHJp
YnV0ZSBvbmUgaWYgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgdG9vIHNsb3cgZm9yIHlv
dS4KLSAgLy8gSWYgcGFydGlhbCBtYXRjaGluZyBpcyBhbHNvIGVuYWJsZWQsIHRoZSB0aW1lIGNv
bXBsZXhpdHkgd2lsbCBiZSBPKGsgKiBuXjIKLSAgLy8gKyBuXjMpIGluIHdoaWNoIG5eMyBpcyB0
aGUgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBtYXhpbXVtIG1hdGNoaW5nCi0gIC8vIGFsZ29yaXRo
bS4KLSAgLy8KLSAgLy8gUkVRVUlSRVM6ICBmaWVsZC0+aXNfcmVwZWF0ZWQoKSBhbmQgZmllbGQg
bm90IHJlZ2lzdGVyZWQgd2l0aCBUcmVhdEFzTGlzdAotICB2b2lkIFRyZWF0QXNTZXQoY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLSAgLy8gVGhlIGVsZW1lbnRzIG9mIHRoZSBnaXZl
biByZXBlYXRlZCBmaWVsZCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBsaXN0IGZvcgotICAvLyBkaWZm
aW5nIHB1cnBvc2VzLCBzbyBkaWZmZXJlbnQgb3JkZXJpbmdzIG9mIHRoZSBzYW1lIGVsZW1lbnRz
IHdpbGwgTk9UIGJlCi0gIC8vIGNvbnNpZGVyZWQgZXF1YWwuCi0gIC8vCi0gIC8vIFJFUVVJUkVE
OiBmaWVsZC0+aXNfcmVwZWF0ZWQoKSBhbmQgZmllbGQgbm90IHJlZ2lzdGVyZWQgd2l0aCBUcmVh
dEFzU2V0Ci0gIHZvaWQgVHJlYXRBc0xpc3QoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCk7
Ci0KLSAgLy8gVGhlIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiByZXBlYXRlZCBmaWVsZCB3aWxsIGJl
IHRyZWF0ZWQgYXMgYSBtYXAgZm9yCi0gIC8vIGRpZmZpbmcgcHVycG9zZXMsIHdpdGggfGtleXwg
YmVpbmcgdGhlIG1hcCBrZXkuICBUaHVzLCBlbGVtZW50cyB3aXRoIHRoZQotICAvLyBzYW1lIGtl
eSB3aWxsIGJlIGNvbXBhcmVkIGV2ZW4gaWYgdGhleSBkbyBub3QgYXBwZWFyIGF0IHRoZSBzYW1l
IGluZGV4LgotICAvLyBEaWZmZXJlbmNlcyBhcmUgcmVwb3J0ZWQgc2ltaWxhcmx5IHRvIFRyZWF0
QXNTZXQoKSwgZXhjZXB0IHRoYXQKLSAgLy8gUmVwb3J0TW9kaWZpZWQoKSBpcyB1c2VkIHRvIHJl
cG9ydCBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIGtleSBidXQKLSAgLy8gZGlmZmVyZW50IHZhbHVl
cy4gIE5vdGUgdGhhdCBpZiBhbiBlbGVtZW50IGlzIGJvdGggbW92ZWQgYW5kIG1vZGlmaWVkLAot
ICAvLyBvbmx5IFJlcG9ydE1vZGlmaWVkKCkgd2lsbCBiZSBjYWxsZWQuICBBcyB3aXRoIFRyZWF0
QXNTZXQsIGlmIHRoZSBvbmx5Ci0gIC8vIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGNvbXBhcmVk
IG1lc3NhZ2VzIGlzIHRoYXQgc29tZSBmaWVsZHMgaGF2ZSBiZWVuCi0gIC8vIG1vdmVkLCB0aGVu
IHRoZSBjb21wYXJpc29uIHJldHVybnMgdHJ1ZS4gU2VlIFRyZWF0QXNTZXQgZm9yIG5vdGVzIG9u
Ci0gIC8vIHBlcmZvcm1hbmNlLgotICAvLwotICAvLyBSRVFVSVJFUzogIGZpZWxkLT5pc19yZXBl
YXRlZCgpCi0gIC8vIFJFUVVJUkVTOiAgZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGREZXNjcmlw
dG9yOjpDUFBUWVBFX01FU1NBR0UKLSAgLy8gUkVRVUlSRVM6ICBrZXktPmNvbnRhaW5pbmdfdHlw
ZSgpID09IGZpZWxkLT5tZXNzYWdlX3R5cGUoKQotICB2b2lkIFRyZWF0QXNNYXAoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCwgY29uc3QgRmllbGREZXNjcmlwdG9yKiBrZXkpOwotICAvLyBT
YW1lIGFzIFRyZWF0QXNNYXAgZXhjZXB0IHRoYXQgdGhpcyBtZXRob2Qgd2lsbCB1c2UgbXVsdGlw
bGUgZmllbGRzIGFzCi0gIC8vIHRoZSBrZXkgaW4gY29tcGFyaXNvbi4gQWxsIHNwZWNpZmllZCBm
aWVsZHMgaW4gJ2tleV9maWVsZHMnIHNob3VsZCBiZQotICAvLyBwcmVzZW50IGluIHRoZSBjb21w
YXJlZCBlbGVtZW50cy4gVHdvIGVsZW1lbnRzIHdpbGwgYmUgdHJlYXRlZCBhcyBoYXZpbmcKLSAg
Ly8gdGhlIHNhbWUga2V5IGlmZiB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUgZm9yIGV2ZXJ5IHNw
ZWNpZmllZCBmaWVsZC4gVGhlcmUKLSAgLy8gYXJlIHR3byBzdGVwcyBpbiB0aGUgY29tcGFyaXNv
biBwcm9jZXNzLiBUaGUgZmlyc3Qgb25lIGlzIGtleSBtYXRjaGluZy4KLSAgLy8gRXZlcnkgZWxl
bWVudCBmcm9tIG9uZSBtZXNzYWdlIHdpbGwgYmUgY29tcGFyZWQgdG8gZXZlcnkgZWxlbWVudCBm
cm9tCi0gIC8vIHRoZSBvdGhlciBtZXNzYWdlLiBPbmx5IGZpZWxkcyBpbiAna2V5X2ZpZWxkcycg
YXJlIGNvbXBhcmVkIGluIHRoaXMgc3RlcAotICAvLyB0byBkZWNpZGUgaWYgdHdvIGVsZW1lbnRz
IGhhdmUgdGhlIHNhbWUga2V5LiBUaGUgc2Vjb25kIHN0ZXAgaXMgdmFsdWUKLSAgLy8gY29tcGFy
aXNvbi4gVGhvc2UgcGFpcnMgb2YgZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBrZXkgKHdpdGggZXF1
YWwgdmFsdWUKLSAgLy8gZm9yIGV2ZXJ5IGZpZWxkIGluICdrZXlfZmllbGRzJykgd2lsbCBiZSBj
b21wYXJlZCBpbiB0aGlzIHN0ZXAuCi0gIC8vIFRpbWUgY29tcGxleGl0eSBvZiB0aGUgZmlyc3Qg
c3RlcCBpcyBPKHMgKiBtICogbiBeIDIpIHdoZXJlIHMgaXMgdGhlCi0gIC8vIGF2ZXJhZ2Ugc2l6
ZSBvZiB0aGUgZmllbGRzIHNwZWNpZmllZCBpbiAna2V5X2ZpZWxkcycsIG0gaXMgdGhlIG51bWJl
ciBvZgotICAvLyBmaWVsZHMgaW4gJ2tleV9maWVsZHMnIGFuZCBuIGlzIHRoZSBudW1iZXIgb2Yg
ZWxlbWVudHMuIElmIHBhcnRpYWwKLSAgLy8gbWF0Y2hpbmcgaXMgZW5hYmxlZCwgYW4gZXh0cmEg
TyhuXjMpIHdpbGwgYmUgaW5jdXJlZCBieSB0aGUgbWF4aW11bQotICAvLyBtYXRjaGluZyBhbGdv
cml0aG0uIFRoZSBzZWNvbmQgc3RlcCBpcyBPKGsgKiBuKSB3aGVyZSBrIGlzIHRoZSBhdmVyYWdl
Ci0gIC8vIHNpemUgb2YgZWFjaCBlbGVtZW50LgotICB2b2lkIFRyZWF0QXNNYXBXaXRoTXVsdGlw
bGVGaWVsZHNBc0tleSgKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAg
ICBjb25zdCB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4mIGtleV9maWVsZHMpOwotICAv
LyBTYW1lIGFzIFRyZWF0QXNNYXBXaXRoTXVsdGlwbGVGaWVsZHNBc0tleSwgZXhjZXB0IHRoYXQg
ZWFjaCBvZiB0aGUgZmllbGQKLSAgLy8gZG8gbm90IG5lY2Vzc2FyaWx5IG5lZWQgdG8gYmUgYSBk
aXJlY3Qgc3ViZmllbGQuIEVhY2ggZWxlbWVudCBpbgotICAvLyBrZXlfZmllbGRfcGF0aHMgaW5k
aWNhdGUgYSBwYXRoIGZyb20gdGhlIG1lc3NhZ2UgYmVpbmcgY29tcGFyZWQsIGxpc3RpbmcKLSAg
Ly8gc3VjY2Vzc2l2ZSBzdWJmaWVsZCB0byByZWFjaCB0aGUga2V5IGZpZWxkLgotICAvLwotICAv
LyBSRVFVSVJFUzoKLSAgLy8gICBmb3Iga2V5X2ZpZWxkX3BhdGggaW4ga2V5X2ZpZWxkX3BhdGhz
OgotICAvLyAgICAga2V5X2ZpZWxkX3BhdGhbMF0tPmNvbnRhaW5pbmdfdHlwZSgpID09IGZpZWxk
LT5tZXNzYWdlX3R5cGUoKQotICAvLyAgICAgZm9yIGkgaW4gWzAsIGtleV9maWVsZF9wYXRoLnNp
emUoKSAtIDEpOgotICAvLyAgICAgICBrZXlfZmllbGRfcGF0aFtpKzFdLT5jb250YWluaW5nX3R5
cGUoKSA9PQotICAvLyAgICAgICAgICAga2V5X2ZpZWxkX3BhdGhbaV0tPm1lc3NhZ2VfdHlwZSgp
Ci0gIC8vICAgICAgIGtleV9maWVsZF9wYXRoW2ldLT5jcHBfdHlwZSgpID09IEZpZWxkRGVzY3Jp
cHRvcjo6Q1BQVFlQRV9NRVNTQUdFCi0gIC8vICAgICAgICFrZXlfZmllbGRfcGF0aFtpXS0+aXNf
cmVwZWF0ZWQoKQotICB2b2lkIFRyZWF0QXNNYXBXaXRoTXVsdGlwbGVGaWVsZFBhdGhzQXNLZXko
Ci0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgY29uc3QgdmVjdG9y
PHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiA+JiBrZXlfZmllbGRfcGF0aHMpOwotCi0g
IC8vIFVzZXMgYSBjdXN0b20gTWFwS2V5Q29tcGFyYXRvciB0byBkZXRlcm1pbmUgaWYgdHdvIGVs
ZW1lbnRzIGhhdmUgdGhlIHNhbWUKLSAgLy8ga2V5IHdoZW4gY29tcGFyaW5nIGEgcmVwZWF0ZWQg
ZmllbGQgYXMgYSBtYXAuCi0gIC8vIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZGVsZXRl
IHRoZSBrZXlfY29tcGFyYXRvci4KLSAgLy8gVGhpcyBtZXRob2QgdmFyaWVzIGZyb20gVHJlYXRB
c01hcFdpdGhNdWx0aXBsZUZpZWxkc0FzS2V5IG9ubHkgaW4gdGhlCi0gIC8vIGZpcnN0IGtleSBt
YXRjaGluZyBzdGVwLiBSYXRoZXIgdGhhbiBjb21wYXJpbmcgc29tZSBzcGVjaWZpZWQgZmllbGRz
LCBpdAotICAvLyB3aWxsIGludm9rZSB0aGUgSXNNYXRjaCBtZXRob2Qgb2YgdGhlIGdpdmVuICdr
ZXlfY29tcGFyYXRvcicgdG8gZGVjaWRlIGlmCi0gIC8vIHR3byBlbGVtZW50cyBoYXZlIHRoZSBz
YW1lIGtleS4KLSAgdm9pZCBUcmVhdEFzTWFwVXNpbmdLZXlDb21wYXJhdG9yKAotICAgICAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgIGNvbnN0IE1hcEtleUNvbXBhcmF0b3Iq
IGtleV9jb21wYXJhdG9yKTsKLQotICAvLyBBZGQgYSBjdXN0b20gaWdub3JlIGNyaXRlcmlhIHRo
YXQgaXMgZXZhbHVhdGVkIGluIGFkZGl0aW9uIHRvIHRoZQotICAvLyBpZ25vcmVkIGZpZWxkcyBh
ZGRlZCB3aXRoIElnbm9yZUZpZWxkLgotICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgaWdub3JlX2Ny
aXRlcmlhLgotICB2b2lkIEFkZElnbm9yZUNyaXRlcmlhKElnbm9yZUNyaXRlcmlhKiBpZ25vcmVf
Y3JpdGVyaWEpOwotCi0gIC8vIEluZGljYXRlcyB0aGF0IGFueSBmaWVsZCB3aXRoIHRoZSBnaXZl
biBkZXNjcmlwdG9yIHNob3VsZCBiZQotICAvLyBpZ25vcmVkIGZvciB0aGUgcHVycG9zZXMgb2Yg
Y29tcGFyaW5nIHR3byBtZXNzYWdlcy4gVGhpcyBhcHBsaWVzCi0gIC8vIHRvIGZpZWxkcyBuZXN0
ZWQgaW4gdGhlIG1lc3NhZ2Ugc3RydWN0dXJlIGFzIHdlbGwgYXMgdG9wIGxldmVsCi0gIC8vIG9u
ZXMuIFdoZW4gdGhlIE1lc3NhZ2VEaWZmZXJlbmNlciBlbmNvdW50ZXJzIGFuIGlnbm9yZWQgZmll
bGQsCi0gIC8vIFJlcG9ydElnbm9yZWQgaXMgY2FsbGVkIG9uIHRoZSByZXBvcnRlciwgaWYgb25l
IGlzIHNwZWNpZmllZC4KLSAgLy8KLSAgLy8gVGhlIG9ubHkgcGxhY2Ugd2hlcmUgdGhlIGZpZWxk
J3MgJ2lnbm9yZWQnIHN0YXR1cyBpcyBub3QgYXBwbGllZCBpcyB3aGVuCi0gIC8vIGl0IGlzIGJl
aW5nIHVzZWQgYXMgYSBrZXkgaW4gYSBmaWVsZCBwYXNzZWQgdG8gVHJlYXRBc01hcCBvciBpcyBv
bmUgb2YKLSAgLy8gdGhlIGZpZWxkcyBwYXNzZWQgdG8gVHJlYXRBc01hcFdpdGhNdWx0aXBsZUZp
ZWxkc0FzS2V5LgotICAvLyBJbiB0aGlzIGNhc2UgaXQgaXMgY29tcGFyZWQgaW4ga2V5IG1hdGNo
aW5nIGJ1dCBhZnRlciB0aGF0IGl0J3MgaWdub3JlZAotICAvLyBpbiB2YWx1ZSBjb21wYXJpc29u
LgotICB2b2lkIElnbm9yZUZpZWxkKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpOwotCi0g
IC8vIFNldHMgdGhlIGZpZWxkIGNvbXBhcmF0b3IgdXNlZCB0byBkZXRlcm1pbmUgZGlmZmVyZW5j
ZXMgYmV0d2VlbiBwcm90b2NvbAotICAvLyBidWZmZXIgZmllbGRzLiBCeSBkZWZhdWx0IGl0J3Mg
c2V0IHRvIGEgRGVmYXVsdEZpZWxkQ29tcGFyYXRvciBpbnN0YW5jZS4KLSAgLy8gTWVzc2FnZURp
ZmZlcmVuY2VyIGRvZXNuJ3QgdGFrZSBvd25lcnNoaXAgb3ZlciB0aGUgcGFzc2VkIG9iamVjdC4K
LSAgLy8gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBDb21wYXJl
IGZvciB0aGUgY29tcGFyYXRvciB0bwotICAvLyBiZSB1c2VkLgotICB2b2lkIHNldF9maWVsZF9j
b21wYXJhdG9yKEZpZWxkQ29tcGFyYXRvciogY29tcGFyYXRvcik7Ci0KLSAgLy8gREVQUkVDQVRF
RC4gUGFzcyBhIERlZmF1bHRGaWVsZENvbXBhcmF0b3IgaW5zdGFuY2UgaW5zdGVhZC4KLSAgLy8g
U2V0cyB0aGUgZnJhY3Rpb24gYW5kIG1hcmdpbiBmb3IgdGhlIGZsb2F0IGNvbXBhcmlzb24gb2Yg
YSBnaXZlbiBmaWVsZC4KLSAgLy8gVXNlcyBNYXRoVXRpbDo6V2l0aGluRnJhY3Rpb25Pck1hcmdp
biB0byBjb21wYXJlIHRoZSB2YWx1ZXMuCi0gIC8vIE5PVEU6IHRoaXMgbWV0aG9kIGRvZXMgbm90
aGluZyBpZiBkaWZmZXJlbmNlcidzIGZpZWxkIGNvbXBhcmF0b3IgaGFzIGJlZW4KLSAgLy8gICAg
ICAgc2V0IHRvIGEgY3VzdG9tIG9iamVjdC4KLSAgLy8KLSAgLy8gUkVRVUlSRVM6IGZpZWxkLT5j
cHBfdHlwZSA9PSBGaWVsZERlc2NyaXB0b3I6OkNQUFRZUEVfRE9VQkxFIG9yCi0gIC8vICAgICAg
ICAgICBmaWVsZC0+Y3BwX3R5cGUgPT0gRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0ZMT0FUCi0g
IC8vIFJFUVVJUkVTOiBmbG9hdF9jb21wYXJpc29uXyA9PSBBUFBST1hJTUFURQotICB2b2lkIFNl
dEZyYWN0aW9uQW5kTWFyZ2luKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsIGRvdWJsZSBm
cmFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbWFyZ2luKTsKLQot
ICAvLyBTZXRzIHRoZSB0eXBlIG9mIGNvbXBhcmlzb24gKGFzIGRlZmluZWQgaW4gdGhlIE1lc3Nh
Z2VGaWVsZENvbXBhcmlzb24KLSAgLy8gZW51bWVyYXRpb24gYWJvdmUpIHRoYXQgaXMgdXNlZCBi
eSB0aGlzIGRpZmZlcmVuY2VyIHdoZW4gZGV0ZXJtaW5pbmcgaG93Ci0gIC8vIHRvIGNvbXBhcmUg
ZmllbGRzIGluIG1lc3NhZ2VzLgotICB2b2lkIHNldF9tZXNzYWdlX2ZpZWxkX2NvbXBhcmlzb24o
TWVzc2FnZUZpZWxkQ29tcGFyaXNvbiBjb21wYXJpc29uKTsKLQotICAvLyBUZWxscyB0aGUgZGlm
ZmVyZW5jZXIgd2hldGhlciBvciBub3QgdG8gcmVwb3J0IG1hdGNoZXMuIFRoaXMgbWV0aG9kIG11
c3QKLSAgLy8gYmUgY2FsbGVkIGJlZm9yZSBDb21wYXJlLiBUaGUgZGVmYXVsdCBmb3IgYSBuZXcg
ZGlmZmVyZW5jZXIgaXMgZmFsc2UuCi0gIHZvaWQgc2V0X3JlcG9ydF9tYXRjaGVzKGJvb2wgcmVw
b3J0X21hdGNoZXMpIHsKLSAgICByZXBvcnRfbWF0Y2hlc18gPSByZXBvcnRfbWF0Y2hlczsKLSAg
fQotCi0gIC8vIFNldHMgdGhlIHNjb3BlIG9mIHRoZSBjb21wYXJpc29uIChhcyBkZWZpbmVkIGlu
IHRoZSBTY29wZSBlbnVtZXJhdGlvbgotICAvLyBhYm92ZSkgdGhhdCBpcyB1c2VkIGJ5IHRoaXMg
ZGlmZmVyZW5jZXIgd2hlbiBkZXRlcm1pbmluZyB3aGljaCBmaWVsZHMgdG8KLSAgLy8gY29tcGFy
ZSBiZXR3ZWVuIHRoZSBtZXNzYWdlcy4KLSAgdm9pZCBzZXRfc2NvcGUoU2NvcGUgc2NvcGUpOwot
Ci0gIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgc2NvcGUgdXNlZCBieSB0aGlzIGRpZmZlcmVuY2Vy
LgotICBTY29wZSBzY29wZSgpOwotCi0gIC8vIERFUFJFQ0FURUQuIFBhc3MgYSBEZWZhdWx0Rmll
bGRDb21wYXJhdG9yIGluc3RhbmNlIGluc3RlYWQuCi0gIC8vIFNldHMgdGhlIHR5cGUgb2YgY29t
cGFyaXNvbiAoYXMgZGVmaW5lZCBpbiB0aGUgRmxvYXRDb21wYXJpc29uIGVudW1lcmF0aW9uCi0g
IC8vIGFib3ZlKSB0aGF0IGlzIHVzZWQgYnkgdGhpcyBkaWZmZXJlbmNlciB3aGVuIGNvbXBhcmlu
ZyBmbG9hdCAoYW5kIGRvdWJsZSkKLSAgLy8gZmllbGRzIGluIG1lc3NhZ2VzLgotICAvLyBOT1RF
OiB0aGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcgaWYgZGlmZmVyZW5jZXIncyBmaWVsZCBjb21wYXJh
dG9yIGhhcyBiZWVuCi0gIC8vICAgICAgIHNldCB0byBhIGN1c3RvbSBvYmplY3QuCi0gIHZvaWQg
c2V0X2Zsb2F0X2NvbXBhcmlzb24oRmxvYXRDb21wYXJpc29uIGNvbXBhcmlzb24pOwotCi0gIC8v
IFNldHMgdGhlIHR5cGUgb2YgY29tcGFyaXNvbiBmb3IgcmVwZWF0ZWQgZmllbGQgKGFzIGRlZmlu
ZWQgaW4gdGhlCi0gIC8vIFJlcGVhdGVkRmllbGRDb21wYXJpc29uIGVudW1lcmF0aW9uIGFib3Zl
KSB0aGF0IGlzIHVzZWQgYnkgdGhpcwotICAvLyBkaWZmZXJlbmNlciB3aGVuIGNvbXBhcmUgcmVw
ZWF0ZWQgZmllbGRzIGluIG1lc3NhZ2VzLgotICB2b2lkIHNldF9yZXBlYXRlZF9maWVsZF9jb21w
YXJpc29uKFJlcGVhdGVkRmllbGRDb21wYXJpc29uIGNvbXBhcmlzb24pOwotCi0gIC8vIENvbXBh
cmVzIHRoZSB0d28gc3BlY2lmaWVkIG1lc3NhZ2VzLCByZXR1cm5pbmcgdHJ1ZSBpZiB0aGV5IGFy
ZSB0aGUgc2FtZSwKLSAgLy8gZmFsc2Ugb3RoZXJ3aXNlLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5z
IGZhbHNlLCBhbnkgY2hhbmdlcyBiZXR3ZWVuIHRoZQotICAvLyB0d28gbWVzc2FnZXMgd2lsbCBi
ZSByZXBvcnRlZCBpZiBhIFJlcG9ydGVyIHdhcyBzcGVjaWZpZWQgdmlhCi0gIC8vIFJlcG9ydERp
ZmZlcmVuY2VzVG8gKHNlZSBhbHNvIFJlcG9ydERpZmZlcmVuY2VzVG9TdHJpbmcpLgotICAvLwot
ICAvLyBUaGlzIG1ldGhvZCBSRVFVSVJFUyB0aGF0IHRoZSB0d28gbWVzc2FnZXMgaGF2ZSB0aGUg
c2FtZQotICAvLyBEZXNjcmlwdG9yIChtZXNzYWdlMS5HZXREZXNjcmlwdG9yKCkgPT0gbWVzc2Fn
ZTIuR2V0RGVzY3JpcHRvcigpKS4KLSAgYm9vbCBDb21wYXJlKGNvbnN0IE1lc3NhZ2UmIG1lc3Nh
Z2UxLCBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMik7Ci0KLSAgLy8gU2FtZSBhcyBhYm92ZSwgZXhj
ZXB0IGNvbXBhcmluZyBvbmx5IHRoZSBsaXN0IG9mIGZpZWxkcyBzcGVjaWZpZWQgYnkgdGhlCi0g
IC8vIHR3byB2ZWN0b3JzIG9mIEZpZWxkRGVzY3JpcHRvcnMuCi0gIGJvb2wgQ29tcGFyZVdpdGhG
aWVsZHMoY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0
b3IqPiYgbWVzc2FnZTFfZmllbGRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZl
Y3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiYgbWVzc2FnZTJfZmllbGRzKTsKLQotICAvLyBB
dXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSByZXBvcnRlciB0aGF0IHdpbGwgb3V0cHV0IHRoZSBkaWZm
ZXJlbmNlcwotICAvLyBmb3VuZCAoaWYgYW55KSB0byB0aGUgc3BlY2lmaWVkIG91dHB1dCBzdHJp
bmcgcG9pbnRlci4gTm90ZSB0aGF0IHRoaXMKLSAgLy8gbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJl
Zm9yZSBDb21wYXJlLgotICB2b2lkIFJlcG9ydERpZmZlcmVuY2VzVG9TdHJpbmcoc3RyaW5nKiBv
dXRwdXQpOwotCi0gIC8vIFRlbGxzIHRoZSBNZXNzYWdlRGlmZmVyZW5jZXIgdG8gcmVwb3J0IGRp
ZmZlcmVuY2VzIHZpYSB0aGUgc3BlY2lmaWVkCi0gIC8vIHJlcG9ydGVyLiBOb3RlIHRoYXQgdGhp
cyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIENvbXBhcmUgZm9yCi0gIC8vIHRoZSByZXBv
cnRlciB0byBiZSB1c2VkLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0
byBkZWxldGUKLSAgLy8gdGhpcyBvYmplY3QuCi0gIC8vIElmIHRoZSBwcm92aWRlZCBwb2ludGVy
IGVxdWFscyBOVUxMLCB0aGUgTWVzc2FnZURpZmZlcmVuY2VyIHN0b3BzIHJlcG9ydGluZwotICAv
LyBkaWZmZXJlbmNlcyB0byBhbnkgcHJldmlvdXNseSBzZXQgcmVwb3J0ZXJzIG9yIG91dHB1dCBz
dHJpbmdzLgotICB2b2lkIFJlcG9ydERpZmZlcmVuY2VzVG8oUmVwb3J0ZXIqIHJlcG9ydGVyKTsK
LQotICAvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTWVzc2FnZURpZmZlcmVuY2VyIFJlcG9y
dGVyIHRoYXQgb3V0cHV0cwotICAvLyBhbnkgZGlmZmVyZW5jZXMgZm91bmQgaW4gaHVtYW4tcmVh
ZGFibGUgZm9ybSB0byB0aGUgc3VwcGxpZWQKLSAgLy8gWmVyb0NvcHlPdXRwdXRTdHJlYW0gb3Ig
UHJpbnRlci4gSWYgYSBwcmludGVyIGlzIHVzZWQsIHRoZSBkZWxpbWl0ZXIKLSAgLy8gKm11c3Qq
IGJlICckJy4KLSAgY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFN0cmVhbVJlcG9ydGVyIDogcHVi
bGljIFJlcG9ydGVyIHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTdHJlYW1SZXBvcnRlcihp
bzo6WmVyb0NvcHlPdXRwdXRTdHJlYW0qIG91dHB1dCk7Ci0gICAgZXhwbGljaXQgU3RyZWFtUmVw
b3J0ZXIoaW86OlByaW50ZXIqIHByaW50ZXIpOyAgLy8gZGVsaW1pdGVyICckJwotICAgIHZpcnR1
YWwgflN0cmVhbVJlcG9ydGVyKCk7Ci0KLSAgICAvLyBXaGVuIHNldCB0byB0cnVlLCB0aGUgc3Ry
ZWFtIHJlcG9ydGVyIHdpbGwgYWxzbyBvdXRwdXQgYWdncmVnYXRlcyBub2RlcwotICAgIC8vIChp
LmUuIG1lc3NhZ2VzIGFuZCBncm91cHMpIHdob3NlIHN1YmZpZWxkcyBoYXZlIGJlZW4gbW9kaWZp
ZWQuIFdoZW4KLSAgICAvLyBmYWxzZSwgd2lsbCBvbmx5IHJlcG9ydCB0aGUgaW5kaXZpZHVhbCBz
dWJmaWVsZHMuIERlZmF1bHRzIHRvIGZhbHNlLgotICAgIHZvaWQgc2V0X3JlcG9ydF9tb2RpZmll
ZF9hZ2dyZWdhdGVzKGJvb2wgcmVwb3J0KSB7Ci0gICAgICByZXBvcnRfbW9kaWZpZWRfYWdncmVn
YXRlc18gPSByZXBvcnQ7Ci0gICAgfQotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgaW1wbGVt
ZW50YXRpb25zIG9mIHRoZSBtZXRob2RzIGRlc2NyaWJlZCBhYm92ZS4KLSAgICB2aXJ0dWFsIHZv
aWQgUmVwb3J0QWRkZWQoY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsIGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8U3BlY2lm
aWNGaWVsZD4mIGZpZWxkX3BhdGgpOwotCi0gICAgdmlydHVhbCB2b2lkIFJlcG9ydERlbGV0ZWQo
Y29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBmaWVsZF9wYXRoKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBSZXBvcnRNb2RpZmllZChjb25zdCBNZXNzYWdlJiBtZXNzYWdlMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiYgZmllbGRf
cGF0aCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgUmVwb3J0TW92ZWQoY29uc3QgTWVzc2FnZSYgbWVz
c2FnZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3Nh
Z2UyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8U3BlY2lmaWNG
aWVsZD4mIGZpZWxkX3BhdGgpOwotCi0gICAgdmlydHVhbCB2b2lkIFJlcG9ydE1hdGNoZWQoY29u
c3QgTWVzc2FnZSYgbWVzc2FnZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBmaWVsZF9wYXRoKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBSZXBvcnRJZ25vcmVkKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiYgZmllbGRfcGF0aCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgUmVwb3J0VW5rbm93bkZpZWxkSWdub3JlZCgKLSAgICAgICAg
Y29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgICAg
ICBjb25zdCB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4mIGZpZWxkX3BhdGgpOwotCi0gICBwcm90ZWN0
ZWQ6Ci0gICAgLy8gUHJpbnRzIHRoZSBzcGVjaWZpZWQgcGF0aCBvZiBmaWVsZHMgdG8gdGhlIGJ1
ZmZlci4KLSAgICB2aXJ0dWFsIHZvaWQgUHJpbnRQYXRoKGNvbnN0IHZlY3RvcjxTcGVjaWZpY0Zp
ZWxkPiYgZmllbGRfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGVmdF9z
aWRlKTsKLQotICAgIC8vIFByaW50cyB0aGUgdmFsdWUgb2YgZmllbGRzIHRvIHRoZSBidWZmZXIu
ICBsZWZ0X3NpZGUgaXMgdHJ1ZSBpZiB0aGUKLSAgICAvLyBnaXZlbiBtZXNzYWdlIGlzIGZyb20g
dGhlIGxlZnQgc2lkZSBvZiB0aGUgY29tcGFyaXNvbiwgZmFsc2UgaWYgaXQKLSAgICAvLyB3YXMg
dGhlIHJpZ2h0LiAgVGhpcyBpcyByZWxldmFudCBvbmx5IHRvIGRlY2lkZSB3aGV0aGVyIHRvIGZv
bGxvdwotICAgIC8vIHVua25vd25fZmllbGRfaW5kZXgxIG9yIHVua25vd25fZmllbGRfaW5kZXgy
IHdoZW4gYW4gdW5rbm93biBmaWVsZAotICAgIC8vIGlzIGVuY291bnRlcmVkIGluIGZpZWxkX3Bh
dGguCi0gICAgdmlydHVhbCB2b2lkIFByaW50VmFsdWUoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4m
IGZpZWxkX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsZWZ0X3NpZGUp
OwotCi0gICAgLy8gUHJpbnRzIHRoZSBzcGVjaWZpZWQgcGF0aCBvZiB1bmtub3duIGZpZWxkcyB0
byB0aGUgYnVmZmVyLgotICAgIHZpcnR1YWwgdm9pZCBQcmludFVua25vd25GaWVsZFZhbHVlKGNv
bnN0IFVua25vd25GaWVsZCogdW5rbm93bl9maWVsZCk7Ci0KLSAgICAvLyBKdXN0IHByaW50IGEg
c3RyaW5nCi0gICAgdm9pZCBQcmludChjb25zdCBzdHJpbmcmIHN0cik7Ci0KLSAgIHByaXZhdGU6
Ci0gICAgaW86OlByaW50ZXIqIHByaW50ZXJfOwotICAgIGJvb2wgZGVsZXRlX3ByaW50ZXJfOwot
ICAgIGJvb2wgcmVwb3J0X21vZGlmaWVkX2FnZ3JlZ2F0ZXNfOwotCi0gICAgR09PR0xFX0RJU0FM
TE9XX0VWSUxfQ09OU1RSVUNUT1JTKFN0cmVhbVJlcG9ydGVyKTsKLSAgfTsKLQotIHByaXZhdGU6
Ci0gIC8vIEEgTWFwS2V5Q29tcGFyYXRvciB0byBiZSB1c2VkIGluIFRyZWF0QXNNYXBVc2luZ0tl
eUNvbXBhcmF0b3IuCi0gIC8vIEltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgbmVlZHMgdG8g
ZG8gZmllbGQgdmFsdWUgY29tcGFyaXNvbiB3aGljaAotICAvLyByZWxpZXMgb24gc29tZSBwcml2
YXRlIG1ldGhvZHMgb2YgTWVzc2FnZURpZmZlcmVuY2VyLiBUaGF0J3Mgd2h5IHRoaXMKLSAgLy8g
Y2xhc3MgaXMgZGVjbGFyZWQgYXMgYSBuZXN0ZWQgY2xhc3Mgb2YgTWVzc2FnZURpZmZlcmVuY2Vy
LgotICBjbGFzcyBNdWx0aXBsZUZpZWxkc01hcEtleUNvbXBhcmF0b3I7Ci0gIC8vIFJldHVybnMg
dHJ1ZSBpZiBmaWVsZDEncyBudW1iZXIoKSBpcyBsZXNzIHRoYW4gZmllbGQyJ3MuCi0gIHN0YXRp
YyBib29sIEZpZWxkQmVmb3JlKGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkMik7Ci0KLSAg
Ly8gQ29tYmluZSB0aGUgdHdvIGxpc3RzIG9mIGZpZWxkcyBpbnRvIHRoZSBjb21iaW5lZF9maWVs
ZHMgb3V0cHV0IHZlY3Rvci4KLSAgLy8gQWxsIGZpZWxkcyBwcmVzZW50IGluIGJvdGggbGlzdHMg
d2lsbCBhbHdheXMgYmUgaW5jbHVkZWQgaW4gdGhlIGNvbWJpbmVkCi0gIC8vIGxpc3QuICBGaWVs
ZHMgb25seSBwcmVzZW50IGluIG9uZSBvZiB0aGUgbGlzdHMgd2lsbCBvbmx5IGFwcGVhciBpbiB0
aGUKLSAgLy8gY29tYmluZWQgbGlzdCBpZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHNfc2NvcGUg
b3B0aW9uIGlzIHNldCB0byBGVUxMLgotICB2b2lkIENvbWJpbmVGaWVsZHMoY29uc3QgdmVjdG9y
PGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+JiBmaWVsZHMxLAotICAgICAgICAgICAgICAgICAgICAg
U2NvcGUgZmllbGRzMV9zY29wZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3Rvcjxj
b25zdCBGaWVsZERlc2NyaXB0b3IqPiYgZmllbGRzMiwKLSAgICAgICAgICAgICAgICAgICAgIFNj
b3BlIGZpZWxkczJfc2NvcGUsCi0gICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8Y29uc3QgRmll
bGREZXNjcmlwdG9yKj4qIGNvbWJpbmVkX2ZpZWxkcyk7Ci0KLSAgLy8gSW50ZXJuYWwgdmVyc2lv
biBvZiB0aGUgQ29tcGFyZSBtZXRob2Qgd2hpY2ggcGVyZm9ybXMgdGhlIGFjdHVhbAotICAvLyBj
b21wYXJpc29uLiBUaGUgcGFyZW50X2ZpZWxkcyB2ZWN0b3IgaXMgYSB2ZWN0b3IgY29udGFpbmlu
ZyBmaWVsZAotICAvLyBkZXNjcmlwdG9ycyBvZiBhbGwgZmllbGRzIGFjY2Vzc2VkIHRvIGdldCB0
byB0aGlzIGNvbXBhcmlzb24gb3BlcmF0aW9uCi0gIC8vIChpLmUuIGlmIHRoZSBjdXJyZW50IG1l
c3NhZ2UgaXMgYW4gZW1iZWRkZWQgbWVzc2FnZSwgdGhlIHBhcmVudF9maWVsZHMKLSAgLy8gdmVj
dG9yIHdpbGwgY29udGFpbiB0aGUgZmllbGQgdGhhdCBoYXMgdGhpcyBlbWJlZGRlZCBtZXNzYWdl
KS4KLSAgYm9vbCBDb21wYXJlKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLCBjb25zdCBNZXNzYWdl
JiBtZXNzYWdlMiwKLSAgICAgICAgICAgICAgIHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiogcGFyZW50
X2ZpZWxkcyk7Ci0KLSAgLy8gQ29tcGFyZXMgYWxsIHRoZSB1bmtub3duIGZpZWxkcyBpbiB0d28g
bWVzc2FnZXMuCi0gIGJvb2wgQ29tcGFyZVVua25vd25GaWVsZHMoY29uc3QgTWVzc2FnZSYgbWVz
c2FnZTEsIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9idWY6OlVua25vd25GaWVsZFNldCYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ29vZ2xlOjpwcm90b2J1Zjo6VW5rbm93bkZpZWxkU2V0
JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4qIHBh
cmVudF9maWVsZHMpOwotCi0gIC8vIENvbXBhcmVzIHRoZSBzcGVjaWZpZWQgbWVzc2FnZXMgZm9y
IHRoZSByZXF1ZXN0ZWQgZmllbGQgbGlzdHMuIFRoZSBmaWVsZAotICAvLyBsaXN0cyBhcmUgbW9k
aWZpZWQgZGVwZW5kaW5nIG9uIGNvbXBhcmlzb24gc2V0dGluZ3MsIGFuZCB0aGVuIHBhc3NlZCB0
bwotICAvLyBDb21wYXJlV2l0aEZpZWxkc0ludGVybmFsLgotICBib29sIENvbXBhcmVSZXF1ZXN0
ZWRGaWVsZHNVc2luZ1NldHRpbmdzKAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsIGNv
bnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgICAgY29uc3QgdmVjdG9yPGNvbnN0IEZpZWxkRGVz
Y3JpcHRvcio+JiBtZXNzYWdlMV9maWVsZHMsCi0gICAgICBjb25zdCB2ZWN0b3I8Y29uc3QgRmll
bGREZXNjcmlwdG9yKj4mIG1lc3NhZ2UyX2ZpZWxkcywKLSAgICAgIHZlY3RvcjxTcGVjaWZpY0Zp
ZWxkPiogcGFyZW50X2ZpZWxkcyk7Ci0KLSAgLy8gQ29tcGFyZXMgdGhlIHNwZWNpZmllZCBtZXNz
YWdlcyB3aXRoIHRoZSBzcGVjaWZpZWQgZmllbGQgbGlzdHMuCi0gIGJvb2wgQ29tcGFyZVdpdGhG
aWVsZHNJbnRlcm5hbCgKLSAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLCBjb25zdCBNZXNz
YWdlJiBtZXNzYWdlMiwKLSAgICAgIGNvbnN0IHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3Iq
PiYgbWVzc2FnZTFfZmllbGRzLAotICAgICAgY29uc3QgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3Jp
cHRvcio+JiBtZXNzYWdlMl9maWVsZHMsCi0gICAgICB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4qIHBh
cmVudF9maWVsZHMpOwotCi0gIC8vIENvbXBhcmVzIHRoZSByZXBlYXRlZCBmaWVsZHMsIGFuZCBy
ZXBvcnQgdGhlIGVycm9yLgotICBib29sIENvbXBhcmVSZXBlYXRlZEZpZWxkKGNvbnN0IE1lc3Nh
Z2UmIG1lc3NhZ2UxLCBjb25zdCBNZXNzYWdlJiBtZXNzYWdlMiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZlY3RvcjxTcGVjaWZpY0ZpZWxkPiogcGFyZW50X2ZpZWxkcyk7Ci0KLSAg
Ly8gU2hvcnRoYW5kIGZvciBDb21wYXJlRmllbGRWYWx1ZVVzaW5nUGFyZW50RmllbGRzIHdpdGgg
TlVMTCBwYXJlbnRfZmllbGRzLgotICBib29sIENvbXBhcmVGaWVsZFZhbHVlKGNvbnN0IE1lc3Nh
Z2UmIG1lc3NhZ2UxLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UyLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4MSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5kZXgyKTsKLQotICAvLyBDb21wYXJlcyB0aGUgc3BlY2lmaWVk
IGZpZWxkIG9uIHRoZSB0d28gbWVzc2FnZXMsIHJldHVybmluZwotICAvLyB0cnVlIGlmIHRoZXkg
YXJlIHRoZSBzYW1lLCBmYWxzZSBvdGhlcndpc2UuIEZvciByZXBlYXRlZCBmaWVsZHMsCi0gIC8v
IHRoaXMgbWV0aG9kIG9ubHkgY29tcGFyZXMgdGhlIHZhbHVlIGluIHRoZSBzcGVjaWZpZWQgaW5k
ZXguIFRoaXMgbWV0aG9kCi0gIC8vIHVzZXMgQ29tcGFyZSBmdW5jdGlvbnMgdG8gcmVjdXJzZSBp
bnRvIHN1Ym1lc3NhZ2VzLgotICAvLyBUaGUgcGFyZW50X2ZpZWxkcyB2ZWN0b3IgaXMgdXNlZCBp
biBjYWxscyB0byBhIFJlcG9ydGVyIGluc3RhbmNlIGNhbGxzLgotICAvLyBJdCBjYW4gYmUgTlVM
TCwgaW4gd2hpY2ggY2FzZSB0aGUgTWVzc2FnZURpZmZlcmVuY2VyIHdpbGwgY3JlYXRlIG5ldwot
ICAvLyBsaXN0IG9mIHBhcmVudCBtZXNzYWdlcyBpZiBpdCBuZWVkcyB0byByZWN1cnNpdmVseSBj
b21wYXJlIHRoZSBnaXZlbiBmaWVsZC4KLSAgLy8gVG8gYXZvaWQgY29uZnVzaW5nIHVzZXJzIHlv
dSBzaG91bGQgbm90IHNldCBpdCB0byBOVUxMIHVubGVzcyB5b3UgbW9kaWZpZWQKLSAgLy8gUmVw
b3J0ZXIgdG8gaGFuZGxlIHRoZSBjaGFuZ2Ugb2YgcGFyZW50X2ZpZWxkcyBjb3JyZWN0bHkuCi0g
IGJvb2wgQ29tcGFyZUZpZWxkVmFsdWVVc2luZ1BhcmVudEZpZWxkcyhjb25zdCBNZXNzYWdlJiBt
ZXNzYWdlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleDEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yPFNwZWNpZmljRmllbGQ+KiBwYXJlbnRfZmllbGRzKTsK
LQotICAvLyBDb21wYXJlcyB0aGUgc3BlY2lmaWVkIGZpZWxkIG9uIHRoZSB0d28gbWVzc2FnZXMs
IHJldHVybmluZyBjb21wYXJpc29uCi0gIC8vIHJlc3VsdCwgYXMgcmV0dXJuZWQgYnkgYXBwcm9w
cmlhdGUgRmllbGRDb21wYXJhdG9yLgotICBGaWVsZENvbXBhcmF0b3I6OkNvbXBhcmlzb25SZXN1
bHQgR2V0RmllbGRDb21wYXJpc29uUmVzdWx0KAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2Fn
ZTEsIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBmaWVsZCwgaW50IGluZGV4MSwgaW50IGluZGV4MiwKLSAgICAgIGNvbnN0IEZpZWxkQ29udGV4
dCogZmllbGRfY29udGV4dCk7Ci0KLSAgLy8gQ2hlY2sgaWYgdGhlIHR3byBlbGVtZW50cyBpbiB0
aGUgcmVwZWF0ZWQgZmllbGQgYXJlIG1hdGNoIHRvIGVhY2ggb3RoZXIuCi0gIC8vIGlmIHRoZSBr
ZXlfY29tcHJhdG9yIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gdGhl
IHR3bwotICAvLyBlbGVtZW50cyBhcmUgZXF1YWwuCi0gIGJvb2wgSXNNYXRjaChjb25zdCBGaWVs
ZERlc2NyaXB0b3IqIHJlcGVhdGVkX2ZpZWxkLAotICAgICAgICAgICAgICAgY29uc3QgTWFwS2V5
Q29tcGFyYXRvcioga2V5X2NvbXBhcmF0b3IsCi0gICAgICAgICAgICAgICBjb25zdCBNZXNzYWdl
KiBtZXNzYWdlMSwgY29uc3QgTWVzc2FnZSogbWVzc2FnZTIsCi0gICAgICAgICAgICAgICBjb25z
dCB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4mIHBhcmVudF9maWVsZHMsCi0gICAgICAgICAgICAgICBp
bnQgaW5kZXgxLCBpbnQgaW5kZXgyKTsKLQotICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJl
cGVhdGVkIGZpZWxkIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gYmUgdHJlYXRlZAotICAvLyBhcyBh
IHNldC4KLSAgYm9vbCBJc1RyZWF0ZWRBc1NldChjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
KTsKLQotICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJlcGVhdGVkIGZpZWxkIGlzIHRvIGJl
IGNvbXBhcmVkIGFzIGEgc3Vic2V0LCBpZS4KLSAgLy8gaGFzIGJlZW4gY29uZmlndXJlZCB0byBi
ZSB0cmVhdGVkIGFzIGEgc2V0IG9yIG1hcCBhbmQgc2NvcGUgaXMgc2V0IHRvCi0gIC8vIFBBUlRJ
QUwuCi0gIGJvb2wgSXNUcmVhdGVkQXNTdWJzZXQoY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVs
ZCk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZmllbGQgaXMgdG8gYmUgaWdub3JlZCB3
aGVuIHRoaXMKLSAgLy8gTWVzc2FnZURpZmZlcmVuY2VyIGNvbXBhcmVzIG1lc3NhZ2VzLgotICBi
b29sIElzSWdub3JlZCgKLSAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLAotICAgICAgY29u
c3QgTWVzc2FnZSYgbWVzc2FnZTIsCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxk
LAotICAgICAgY29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBwYXJlbnRfZmllbGRzKTsKLQot
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB1bmtub3duIGZpZWxkIGlzIHRvIGJlIGlnbm9yZWQg
d2hlbiB0aGlzCi0gIC8vIE1lc3NhZ2VEaWZmZXJlbmNlciBjb21wYXJlcyBtZXNzYWdlcy4KLSAg
Ym9vbCBJc1Vua25vd25GaWVsZElnbm9yZWQoY29uc3QgTWVzc2FnZSYgbWVzc2FnZTEsIGNvbnN0
IE1lc3NhZ2UmIG1lc3NhZ2UyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
cGVjaWZpY0ZpZWxkJiBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dmVjdG9yPFNwZWNpZmljRmllbGQ+JiBwYXJlbnRfZmllbGRzKTsKLQotICAvLyBSZXR1cm5zIE1h
cEtleUNvbXBhcmF0b3IqIHdoZW4gdGhpcyBmaWVsZCBoYXMgYmVlbiBjb25maWd1cmVkIHRvCi0g
IC8vIGJlIHRyZWF0ZWQgYXMgYSBtYXAuICBJZiBub3QsIHJldHVybnMgTlVMTC4KLSAgY29uc3Qg
TWFwS2V5Q29tcGFyYXRvciogR2V0TWFwS2V5Q29tcGFyYXRvcihjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkKTsKLQotICAvLyBBdHRlbXB0cyB0byBtYXRjaCBpbmRpY2VzIG9mIGEgcmVwZWF0
ZWQgZmllbGQsIHNvIHRoYXQgdGhlIGNvbnRhaW5lZCB2YWx1ZXMKLSAgLy8gbWF0Y2guIENsZWFy
cyBvdXRwdXQgdmVjdG9ycyBhbmQgc2V0cyB0aGVpciB2YWx1ZXMgdG8gaW5kaWNlcyBvZiBwYWly
ZWQKLSAgLy8gbWVzc2FnZXMsIGllLiBpZiBtZXNzYWdlMVswXSBtYXRjaGVzIG1lc3NhZ2UyWzFd
LCB0aGVuIG1hdGNoX2xpc3QxWzBdID09IDEKLSAgLy8gYW5kIG1hdGNoX2xpc3QyWzFdID09IDAu
IFRoZSB1bm1hdGNoZWQgaW5kaWNlcyBhcmUgaW5kaWNhdGVkIGJ5IC0xLgotICAvLyBUaGlzIG1l
dGhvZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBtYXRjaCBmYWlsZWQuIEhvd2V2ZXIsIGl0IGRvZXNu
J3QgbWVhbgotICAvLyB0aGF0IHRoZSBjb21wYXJpc29uIHN1Y2NlZWRzIHdoZW4gdGhpcyBtZXRo
b2QgcmV0dXJucyB0cnVlICh5b3UgbmVlZCB0bwotICAvLyBkb3VibGUtY2hlY2sgaW4gdGhpcyBj
YXNlKS4KLSAgYm9vbCBNYXRjaFJlcGVhdGVkRmllbGRJbmRpY2VzKGNvbnN0IE1lc3NhZ2UmIG1l
c3NhZ2UxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZSYg
bWVzc2FnZTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERl
c2NyaXB0b3IqIHJlcGVhdGVkX2ZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBwYXJlbnRfZmllbGRzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPGludD4qIG1hdGNoX2xpc3QxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPGludD4qIG1hdGNoX2xpc3QyKTsKLQot
ICAvLyBJZiAiYW55IiBpcyBvZiB0eXBlIGdvb2dsZS5wcm90b2J1Zi5BbnksIGV4dHJhY3QgaXRz
IHBheWxvYWQgdXNpbmcKLSAgLy8gRHluYW1pY01lc3NhZ2VGYWN0b3J5IGFuZCBzdG9yZSBpbiAi
ZGF0YSIuCi0gIGJvb2wgVW5wYWNrQW55KGNvbnN0IE1lc3NhZ2UmIGFueSwgZ29vZ2xlOjpwcm90
b2J1Zjo6c2NvcGVkX3B0cjxNZXNzYWdlPiogZGF0YSk7Ci0KLSAgLy8gQ2hlY2tzIGlmIGluZGV4
IGlzIGVxdWFsIHRvIG5ld19pbmRleCBpbiBhbGwgdGhlIHNwZWNpZmljIGZpZWxkcy4KLSAgc3Rh
dGljIGJvb2wgQ2hlY2tQYXRoQ2hhbmdlZChjb25zdCB2ZWN0b3I8U3BlY2lmaWNGaWVsZD4mIHBh
cmVudF9maWVsZHMpOwotCi0gIC8vIERlZmluZXMgYSBtYXAgYmV0d2VlbiBmaWVsZCBkZXNjcmlw
dG9ycyBhbmQgdGhlaXIgTWFwS2V5Q29tcGFyYXRvcnMuCi0gIC8vIFVzZWQgZm9yIHJlcGVhdGVk
IGZpZWxkcyB3aGVuIHRoZXkgYXJlIGNvbmZpZ3VyZWQgYXMgVHJlYXRBc01hcC4KLSAgdHlwZWRl
ZiBtYXA8Y29uc3QgRmllbGREZXNjcmlwdG9yKiwKLSAgICAgICAgICAgICAgY29uc3QgTWFwS2V5
Q29tcGFyYXRvcio+IEZpZWxkS2V5Q29tcGFyYXRvck1hcDsKLQotICAvLyBEZWZpbmVzIGEgc2V0
IHRvIHN0b3JlIGZpZWxkIGRlc2NyaXB0b3JzLiAgVXNlZCBmb3IgcmVwZWF0ZWQgZmllbGRzIHdo
ZW4KLSAgLy8gdGhleSBhcmUgY29uZmlndXJlZCBhcyBUcmVhdEFzU2V0LgotICB0eXBlZGVmIHNl
dDxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBGaWVsZFNldDsKLQotICBSZXBvcnRlciogcmVwb3J0
ZXJfOwotICBEZWZhdWx0RmllbGRDb21wYXJhdG9yIGRlZmF1bHRfZmllbGRfY29tcGFyYXRvcl87
Ci0gIEZpZWxkQ29tcGFyYXRvciogZmllbGRfY29tcGFyYXRvcl87Ci0gIE1lc3NhZ2VGaWVsZENv
bXBhcmlzb24gbWVzc2FnZV9maWVsZF9jb21wYXJpc29uXzsKLSAgU2NvcGUgc2NvcGVfOwotICBS
ZXBlYXRlZEZpZWxkQ29tcGFyaXNvbiByZXBlYXRlZF9maWVsZF9jb21wYXJpc29uXzsKLQotICBG
aWVsZFNldCBzZXRfZmllbGRzXzsKLSAgRmllbGRTZXQgbGlzdF9maWVsZHNfOwotICAvLyBLZWVw
cyB0cmFjayBvZiBNYXBLZXlDb21wYXJhdG9ycyB0aGF0IGFyZSBjcmVhdGVkIHdpdGhpbgotICAv
LyBNZXNzYWdlRGlmZmVyZW5jZXIuIFRoZXNlIE1hcEtleUNvbXBhcmF0b3JzIHNob3VsZCBiZSBk
ZWxldGVkCi0gIC8vIGJlZm9yZSBNZXNzYWdlRGlmZmVyZW5jZXIgaXMgZGVzdHJveWVkLgotICAv
LyBXaGVuIFRyZWF0QXNNYXAgb3IgVHJlYXRBc01hcFdpdGhNdWx0aXBsZUZpZWxkc0FzS2V5IGlz
IGNhbGxlZCwgd2UgZG9uJ3QKLSAgLy8gc3RvcmUgdGhlIHN1cHBsaWVkIEZpZWxkRGVzY3JpcHRv
cnMgZGlyZWN0bHkuIEluc3RlYWQsIGEgbmV3Ci0gIC8vIE1hcEtleUNvbXBhcmF0b3IgaXMgY3Jl
YXRlZCBmb3IgY29tcGFyaXNvbiBwdXJwb3NlLgotICB2ZWN0b3I8TWFwS2V5Q29tcGFyYXRvcio+
IG93bmVkX2tleV9jb21wYXJhdG9yc187Ci0gIEZpZWxkS2V5Q29tcGFyYXRvck1hcCBtYXBfZmll
bGRfa2V5X2NvbXBhcmF0b3JfOwotICB2ZWN0b3I8SWdub3JlQ3JpdGVyaWEqPiBpZ25vcmVfY3Jp
dGVyaWFfOwotCi0gIEZpZWxkU2V0IGlnbm9yZWRfZmllbGRzXzsKLQotICBib29sIGNvbXBhcmVf
dW5rbm93bl9maWVsZHNfOwotICBib29sIHJlcG9ydF9tYXRjaGVzXzsKLQotICBzdHJpbmcqIG91
dHB1dF9zdHJpbmdfOwotCi0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9wdHI8RHluYW1pY01l
c3NhZ2VGYWN0b3J5PiBkeW5hbWljX21lc3NhZ2VfZmFjdG9yeV87Ci0gIEdPT0dMRV9ESVNBTExP
V19FVklMX0NPTlNUUlVDVE9SUyhNZXNzYWdlRGlmZmVyZW5jZXIpOwotfTsKLQotLy8gVGhpcyBj
bGFzcyBwcm92aWRlcyBleHRyYSBpbmZvcm1hdGlvbiB0byB0aGUgRmllbGRDb21wYXJhdG9yOjpD
b21wYXJlCi0vLyBmdW5jdGlvbi4KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBGaWVsZENvbnRl
eHQgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgRmllbGRDb250ZXh0KAotICAgICAgdmVjdG9yPE1l
c3NhZ2VEaWZmZXJlbmNlcjo6U3BlY2lmaWNGaWVsZD4qIHBhcmVudF9maWVsZHMpCi0gICAgICA6
IHBhcmVudF9maWVsZHNfKHBhcmVudF9maWVsZHMpIHt9Ci0KLSAgdmVjdG9yPE1lc3NhZ2VEaWZm
ZXJlbmNlcjo6U3BlY2lmaWNGaWVsZD4qIHBhcmVudF9maWVsZHMoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIHBhcmVudF9maWVsZHNfOwotICB9Ci0KLSBwcml2YXRlOgotICB2ZWN0b3I8TWVzc2FnZURp
ZmZlcmVuY2VyOjpTcGVjaWZpY0ZpZWxkPiogcGFyZW50X2ZpZWxkc187Ci19OwotCi19Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1VUSUxf
TUVTU0FHRV9ESUZGRVJFTkNFUl9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91
dGlsL21lc3NhZ2VfZGlmZmVyZW5jZXJfdW5pdHRlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYv
dXRpbC9tZXNzYWdlX2RpZmZlcmVuY2VyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCBhODY3Yzg4MTJlODBmNWZkZmE4OGE1NTcwMThmZjJmNTM0NTRkMTcwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90
b2J1Zi91dGlsL21lc3NhZ2VfZGlmZmVyZW5jZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApA
QCAtMSwzMTUxICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyBBdXRob3I6IGpzY2hvcnJAZ29vZ2xlLmNvbSAoSm9zZXBoIFNjaG9ycikKLS8vICBCYXNlZCBv
biBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVtYXdh
dCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIFRPRE8oa3Nyb2thKTogTW92ZSBzb21l
IG9mIHRoZXNlIHRlc3RzIHRvIGZpZWxkX2NvbXBhcmF0b3JfdGVzdC5jYy4KLQotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC9maWVsZF9jb21wYXJhdG9yLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwvbWVzc2FnZV9kaWZmZXJlbmNlci5oPgotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi91dGlsL21lc3NhZ2VfZGlmZmVyZW5jZXJfdW5pdHRlc3QucGIuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGV4dF9mb3JtYXQuaD4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8v
emVyb19jb3B5X3N0cmVhbV9pbXBsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2Nv
ZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hbnlfdGVzdC5wYi5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tYXBfdW5pdHRlc3QucGIuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvdW5pdHRlc3QucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
bWFwX3Rlc3RfdXRpbC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0X3V0aWwuaD4K
LQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi9zdHVicy9zdHJ1dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RpbmcvZ29v
Z2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUg
ewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLQotbmFtZXNwYWNlIHsKLQotCi1jb25zdCBGaWVsZERl
c2NyaXB0b3IqIEdldEZpZWxkRGVzY3JpcHRvcigKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdl
LCBjb25zdCBzdHJpbmcmIGZpZWxkX25hbWUpIHsKLSAgdmVjdG9yPHN0cmluZz4gZmllbGRfcGF0
aCA9Ci0gICAgICBTcGxpdChmaWVsZF9uYW1lLCAiLiIsIHRydWUpOwotICBjb25zdCBEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yID0gbWVzc2FnZS5HZXREZXNjcmlwdG9yKCk7Ci0gIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZmllbGQgPSBOVUxMOwotICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkX3Bh
dGguc2l6ZSgpOyBpKyspIHsKLSAgICBmaWVsZCA9IGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFt
ZShmaWVsZF9wYXRoW2ldKTsKLSAgICBkZXNjcmlwdG9yID0gZmllbGQtPm1lc3NhZ2VfdHlwZSgp
OwotICB9Ci0gIHJldHVybiBmaWVsZDsKLX0KLQotdm9pZCBFeHBlY3RFcXVhbHNXaXRoRGlmZmVy
ZW5jZXIodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyKiBkaWZmZXJlbmNlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2UmIG1zZzEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlJiBtc2cyKSB7Ci0gIGRpZmZlcmVuY2Vy
LT5zZXRfc2NvcGUodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpGVUxMKTsKLSAgRVhQRUNUX1RS
VUUoZGlmZmVyZW5jZXItPkNvbXBhcmUobXNnMSwgbXNnMikpOwotCi0gIGRpZmZlcmVuY2VyLT5z
ZXRfc2NvcGUodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpQQVJUSUFMKTsKLSAgRVhQRUNUX1RS
VUUoZGlmZmVyZW5jZXItPkNvbXBhcmUobXNnMSwgbXNnMikpOwotfQotCi1URVNUKE1lc3NhZ2VE
aWZmZXJlbmNlclRlc3QsIEJhc2ljRXF1YWxpdHlUZXN0KSB7Ci0gIC8vIENyZWF0ZSB0aGUgdGVz
dGluZyBwcm90b3MKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cxOwotICB1bml0dGVzdDo6
VGVzdEFsbFR5cGVzIG1zZzI7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMSk7Ci0g
IFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzIpOwotCi0gIC8vIENvbXBhcmUKLSAgRVhQRUNU
X1RSVUUodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVhbHMobXNnMSwgbXNnMikpOwotfQot
Ci1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIEJhc2ljSW5lcXVhbGl0eVRlc3QpIHsKLSAg
Ly8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1z
ZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0QWxs
RmllbGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAgbXNn
MS5zZXRfb3B0aW9uYWxfaW50MzIoLTEpOwotCi0gIC8vIENvbXBhcmUKLSAgRVhQRUNUX0ZBTFNF
KHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RXF1YWxzKG1zZzEsIG1zZzIpKTsKLX0KLQotVEVT
VChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBSZXBlYXRlZEZpZWxkSW5lcXVhbGl0eVRlc3QpIHsK
LSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVz
IG1zZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0
QWxsRmllbGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAg
bXNnMS5hZGRfcmVwZWF0ZWRfaW50MzIoLTEpOwotCi0gIC8vIENvbXBhcmUKLSAgRVhQRUNUX0ZB
TFNFKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RXF1YWxzKG1zZzEsIG1zZzIpKTsKLX0KLQot
VEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBNYXBGaWVsZEVxdWFsaXR5VGVzdCkgewotICAv
LyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0gIHVuaXR0ZXN0OjpUZXN0TWFwIG1zZzE7Ci0g
IHVuaXR0ZXN0OjpUZXN0TWFwIG1zZzI7Ci0KLSAgTWFwUmVmbGVjdGlvblRlc3RlciB0ZXN0ZXIo
dW5pdHRlc3Q6OlRlc3RNYXA6OmRlc2NyaXB0b3IoKSk7Ci0gIHRlc3Rlci5TZXRNYXBGaWVsZHNW
aWFSZWZsZWN0aW9uKCZtc2cxKTsKLSAgdGVzdGVyLlNldE1hcEZpZWxkc1ZpYVJlZmxlY3Rpb24o
Jm1zZzIpOwotICB0ZXN0ZXIuU3dhcE1hcHNWaWFSZWZsZWN0aW9uKCZtc2cxKTsKLQotICAvLyBD
b21wYXJlCi0gIEVYUEVDVF9UUlVFKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RXF1YWxzKG1z
ZzEsIG1zZzIpKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBCYXNpY1BhcnRp
YWxFcXVhbGl0eVRlc3QpIHsKLSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0
dGVzdDo6VGVzdEFsbFR5cGVzIG1zZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsK
LQotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZp
ZWxkcygmbXNnMik7Ci0KLSAgLy8gQ29tcGFyZQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIg
ZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2VyLnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVy
ZW5jZXI6OlBBUlRJQUwpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEs
IG1zZzIpKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBQYXJ0aWFsRXF1YWxp
dHlUZXN0RXh0cmFGaWVsZCkgewotICAvLyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0gIHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cy
OwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0QWxs
RmllbGRzKCZtc2cyKTsKLQotICBtc2cxLmNsZWFyX29wdGlvbmFsX2ludDMyKCk7Ci0KLSAgLy8g
Q29tcGFyZQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZl
cmVuY2VyLnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OlBBUlRJQUwpOwotICBF
WFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLX0KLQotVEVTVChN
ZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBQYXJ0aWFsRXF1YWxpdHlUZXN0U2tpcFJlcXVpcmVkRmll
bGQpIHsKLSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdFJl
cXVpcmVkIG1zZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0UmVxdWlyZWQgbXNnMjsKLQotICBtc2cxLnNl
dF9hKDQwMSk7Ci0gIG1zZzIuc2V0X2EoNDAxKTsKLSAgbXNnMi5zZXRfYig0MDIpOwotCi0gIC8v
IENvbXBhcmUKLSAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZm
ZXJlbmNlci5zZXRfc2NvcGUodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpQQVJUSUFMKTsKLSAg
RVhQRUNUX1RSVUUoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci19Ci0KLVRFU1Qo
TWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgQmFzaWNQYXJ0aWFsSW5lcXVhbGl0eVRlc3QpIHsKLSAg
Ly8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1z
ZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0QWxs
RmllbGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAgbXNn
MS5zZXRfb3B0aW9uYWxfaW50MzIoLTEpOwotCi0gIC8vIENvbXBhcmUKLSAgdXRpbDo6TWVzc2Fn
ZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNlci5zZXRfc2NvcGUodXRpbDo6
TWVzc2FnZURpZmZlcmVuY2VyOjpQQVJUSUFMKTsKLSAgRVhQRUNUX0ZBTFNFKGRpZmZlcmVuY2Vy
LkNvbXBhcmUobXNnMSwgbXNnMikpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3Qs
IFBhcnRpYWxJbmVxdWFsaXR5TWlzc2luZ0ZpZWxkVGVzdCkgewotICAvLyBDcmVhdGUgdGhlIHRl
c3RpbmcgcHJvdG9zCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6
OlRlc3RBbGxUeXBlcyBtc2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwot
ICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtc2cyKTsKLQotICBtc2cyLmNsZWFyX29wdGlvbmFs
X2ludDMyKCk7Ci0KLSAgLy8gQ29tcGFyZQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlm
ZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2VyLnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5j
ZXI6OlBBUlRJQUwpOwotICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBt
c2cyKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgUmVwZWF0ZWRGaWVsZFBh
cnRpYWxJbmVxdWFsaXR5VGVzdCkgewotICAvLyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0g
IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBt
c2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0
QWxsRmllbGRzKCZtc2cyKTsKLQotICBtc2cxLmFkZF9yZXBlYXRlZF9pbnQzMigtMSk7Ci0KLSAg
Ly8gQ29tcGFyZQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRp
ZmZlcmVuY2VyLnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OlBBUlRJQUwpOwot
ICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci19Ci0KLVRF
U1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgQmFzaWNFcXVpdmFsZW5jeVRlc3QpIHsKLSAgLy8g
Q3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1zZzE7
Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0QWxsRmll
bGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAgLy8gQ29t
cGFyZQotICBFWFBFQ1RfVFJVRSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkVxdWl2YWxlbnQo
bXNnMSwgbXNnMikpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIEVxdWl2YWxl
bmN5Tm90RXF1YWxUZXN0KSB7Ci0gIC8vIENyZWF0ZSB0aGUgdGVzdGluZyBwcm90b3MKLSAgdW5p
dHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cxOwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1zZzI7
Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMSk7Ci0gIFRlc3RVdGlsOjpTZXRBbGxG
aWVsZHMoJm1zZzIpOwotCi0gIG1zZzEuY2xlYXJfb3B0aW9uYWxfaW50MzIoKTsKLSAgbXNnMi5z
ZXRfb3B0aW9uYWxfaW50MzIoMCk7Ci0KLSAgLy8gQ29tcGFyZQotICBFWFBFQ1RfRkFMU0UodXRp
bDo6TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVhbHMobXNnMSwgbXNnMikpOwotICBFWFBFQ1RfVFJV
RSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkVxdWl2YWxlbnQobXNnMSwgbXNnMikpOwotfQot
Ci1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIEJhc2ljSW5lcXVpdmFsZW5jeVRlc3QpIHsK
LSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVz
IG1zZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0
QWxsRmllbGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAg
bXNnMS5zZXRfb3B0aW9uYWxfaW50MzIoLTEpOwotCi0gIC8vIENvbXBhcmUKLSAgRVhQRUNUX0ZB
TFNFKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RXF1aXZhbGVudChtc2cxLCBtc2cyKSk7Ci19
Ci0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBCYXNpY0VxdWl2YWxlbmN5Tm9uU2V0
VGVzdCkgewotICAvLyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0gIHVuaXR0ZXN0OjpUZXN0
QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cyOwotCi0gIC8vIENv
bXBhcmUKLSAgRVhQRUNUX1RSVUUodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVpdmFsZW50
KG1zZzEsIG1zZzIpKTsKLX0KLQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIEJhc2lj
SW5lcXVpdmFsZW5jeU5vblNldFRlc3QpIHsKLSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3Rv
cwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1zZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlw
ZXMgbXNnMjsKLQotICBtc2cxLnNldF9vcHRpb25hbF9pbnQzMigtMSk7Ci0KLSAgLy8gQ29tcGFy
ZQotICBFWFBFQ1RfRkFMU0UodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVpdmFsZW50KG1z
ZzEsIG1zZzIpKTsKLX0KLQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIEJhc2ljUGFy
dGlhbEVxdWl2YWxlbmN5VGVzdCkgewotICAvLyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0g
IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBt
c2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0
QWxsRmllbGRzKCZtc2cyKTsKLQotICAvLyBDb21wYXJlCi0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJl
bmNlciBkaWZmZXJlbmNlcjsKLSAgZGlmZmVyZW5jZXIuc2V0X21lc3NhZ2VfZmllbGRfY29tcGFy
aXNvbigKLSAgICAgIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RVFVSVZBTEVOVCk7Ci0gIGRp
ZmZlcmVuY2VyLnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OlBBUlRJQUwpOwot
ICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLX0KLQotVEVT
VChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBQYXJ0aWFsRXF1aXZhbGVuY3lOb3RFcXVhbFRlc3Qp
IHsKLSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5
cGVzIG1zZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6
U2V0QWxsRmllbGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0K
LSAgbXNnMS5zZXRfb3B0aW9uYWxfaW50MzIoMCk7Ci0gIG1zZzIuY2xlYXJfb3B0aW9uYWxfaW50
MzIoKTsKLQotICAvLyBDb21wYXJlCi0gIEVYUEVDVF9GQUxTRSh1dGlsOjpNZXNzYWdlRGlmZmVy
ZW5jZXI6OkVxdWFscyhtc2cxLCBtc2cyKSk7Ci0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBk
aWZmZXJlbmNlcjsKLSAgZGlmZmVyZW5jZXIuc2V0X21lc3NhZ2VfZmllbGRfY29tcGFyaXNvbigK
LSAgICAgIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RVFVSVZBTEVOVCk7Ci0gIGRpZmZlcmVu
Y2VyLnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OlBBUlRJQUwpOwotICBFWFBF
Q1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLX0KLQotVEVTVChNZXNz
YWdlRGlmZmVyZW5jZXJUZXN0LCBQYXJ0aWFsRXF1aXZhbGVuY3lUZXN0RXh0cmFGaWVsZCkgewot
ICAvLyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMg
bXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cyOwotCi0gIFRlc3RVdGlsOjpTZXRB
bGxGaWVsZHMoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtc2cyKTsKLQotICBt
c2cxLmNsZWFyX29wdGlvbmFsX2ludDMyKCk7Ci0KLSAgLy8gQ29tcGFyZQotICB1dGlsOjpNZXNz
YWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2VyLnNldF9tZXNzYWdlX2Zp
ZWxkX2NvbXBhcmlzb24oCi0gICAgICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkVRVUlWQUxF
TlQpOwotICBkaWZmZXJlbmNlci5zZXRfc2NvcGUodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpQ
QVJUSUFMKTsKLSAgRVhQRUNUX1RSVUUoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7
Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgUGFydGlhbEVxdWl2YWxlbmN5VGVz
dFNraXBSZXF1aXJlZEZpZWxkKSB7Ci0gIC8vIENyZWF0ZSB0aGUgdGVzdGluZyBwcm90b3MKLSAg
dW5pdHRlc3Q6OlRlc3RSZXF1aXJlZCBtc2cxOwotICB1bml0dGVzdDo6VGVzdFJlcXVpcmVkIG1z
ZzI7Ci0KLSAgbXNnMS5zZXRfYSg0MDEpOwotICBtc2cyLnNldF9hKDQwMSk7Ci0gIG1zZzIuc2V0
X2IoNDAyKTsKLQotICAvLyBDb21wYXJlCi0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZm
ZXJlbmNlcjsKLSAgZGlmZmVyZW5jZXIuc2V0X21lc3NhZ2VfZmllbGRfY29tcGFyaXNvbigKLSAg
ICAgIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RVFVSVZBTEVOVCk7Ci0gIGRpZmZlcmVuY2Vy
LnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OlBBUlRJQUwpOwotICBFWFBFQ1Rf
VFJVRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLX0KLQotVEVTVChNZXNzYWdl
RGlmZmVyZW5jZXJUZXN0LCBCYXNpY1BhcnRpYWxJbmVxdWl2YWxlbmN5VGVzdCkgewotICAvLyBD
cmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsK
LSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVs
ZHMoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtc2cyKTsKLQotICBtc2cxLnNl
dF9vcHRpb25hbF9pbnQzMigtMSk7Ci0KLSAgLy8gQ29tcGFyZQotICB1dGlsOjpNZXNzYWdlRGlm
ZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2VyLnNldF9tZXNzYWdlX2ZpZWxkX2Nv
bXBhcmlzb24oCi0gICAgICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkVRVUlWQUxFTlQpOwot
ICBkaWZmZXJlbmNlci5zZXRfc2NvcGUodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpQQVJUSUFM
KTsKLSAgRVhQRUNUX0ZBTFNFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikpOwotfQot
Ci1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIEJhc2ljUGFydGlhbEVxdWl2YWxlbmN5Tm9u
U2V0VGVzdCkgewotICAvLyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0gIHVuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cyOwotCi0gIC8v
IENvbXBhcmUKLSAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZm
ZXJlbmNlci5zZXRfbWVzc2FnZV9maWVsZF9jb21wYXJpc29uKAotICAgICAgdXRpbDo6TWVzc2Fn
ZURpZmZlcmVuY2VyOjpFUVVJVkFMRU5UKTsKLSAgZGlmZmVyZW5jZXIuc2V0X3Njb3BlKHV0aWw6
Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6UEFSVElBTCk7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2Vy
LkNvbXBhcmUobXNnMSwgbXNnMikpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3Qs
IEJhc2ljUGFydGlhbEluZXF1aXZhbGVuY3lOb25TZXRUZXN0KSB7Ci0gIC8vIENyZWF0ZSB0aGUg
dGVzdGluZyBwcm90b3MKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cxOwotICB1bml0dGVz
dDo6VGVzdEFsbFR5cGVzIG1zZzI7Ci0KLSAgbXNnMS5zZXRfb3B0aW9uYWxfaW50MzIoLTEpOwot
Ci0gIC8vIENvbXBhcmUKLSAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwot
ICBkaWZmZXJlbmNlci5zZXRfbWVzc2FnZV9maWVsZF9jb21wYXJpc29uKAotICAgICAgdXRpbDo6
TWVzc2FnZURpZmZlcmVuY2VyOjpFUVVJVkFMRU5UKTsKLSAgZGlmZmVyZW5jZXIuc2V0X3Njb3Bl
KHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6UEFSVElBTCk7Ci0gIEVYUEVDVF9GQUxTRShkaWZm
ZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5j
ZXJUZXN0LCBBcHByb3hpbWF0ZUVxdWFsaXR5VGVzdCkgewotICAvLyBDcmVhdGUgdGhlIHRlc3Rp
bmcgcHJvdG9zCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRl
c3RBbGxUeXBlcyBtc2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotICBU
ZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtc2cyKTsKLQotICAvLyBDb21wYXJlCi0gIEVYUEVDVF9U
UlVFKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6QXBwcm94aW1hdGVseUVxdWFscyhtc2cxLCBt
c2cyKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgQXBwcm94aW1hdGVNb2Rp
ZmllZEVxdWFsaXR5VGVzdCkgewotICAvLyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0gIHVu
aXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cy
OwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0QWxs
RmllbGRzKCZtc2cyKTsKLQotICBjb25zdCBmbG9hdCB2MSA9IDIuMzAwMDA1ZjsKLSAgY29uc3Qg
ZmxvYXQgdjIgPSAyLjMwMDAwNmY7Ci0gIG1zZzEuc2V0X29wdGlvbmFsX2Zsb2F0KHYxKTsKLSAg
bXNnMi5zZXRfb3B0aW9uYWxfZmxvYXQodjIpOwotCi0gIC8vIENvbXBhcmUKLSAgQVNTRVJUX05F
KHYxLCB2MikgPDwgIlNob3VsZCBub3QgYmUgdGhlIHNhbWU6ICIgPDwgdjEgPDwgIiwgIiA8PCB2
MjsKLSAgQVNTRVJUX0ZMT0FUX0VRKHYxLCB2MikgPDwgIlNob3VsZCBiZSBhcHByb3guIGVxdWFs
OiAiIDw8IHYxIDw8ICIsICIgPDwgdjI7Ci0gIEVYUEVDVF9GQUxTRSh1dGlsOjpNZXNzYWdlRGlm
ZmVyZW5jZXI6OkVxdWFscyhtc2cxLCBtc2cyKSk7Ci0gIEVYUEVDVF9UUlVFKHV0aWw6Ok1lc3Nh
Z2VEaWZmZXJlbmNlcjo6QXBwcm94aW1hdGVseUVxdWFscyhtc2cxLCBtc2cyKSk7Ci19Ci0KLVRF
U1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgQXBwcm94aW1hdGVFcXVpdmFsZW5jeVRlc3QpIHsK
LSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVz
IG1zZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0
QWxsRmllbGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAg
Ly8gQ29tcGFyZQotICBFWFBFQ1RfVFJVRSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkFwcHJv
eGltYXRlbHlFcXVpdmFsZW50KG1zZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnMikpOwotfQotCi1URVNUKE1lc3Nh
Z2VEaWZmZXJlbmNlclRlc3QsIEFwcHJveGltYXRlTW9kaWZpZWRFcXVpdmFsZW5jeVRlc3QpIHsK
LSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVz
IG1zZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0
QWxsRmllbGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAg
Ly8gTW9kaWZ5IHRoZSBhcHByb3hpbWF0ZW5lc3MgcmVxdWlyZW1lbnQKLSAgY29uc3QgZmxvYXQg
djEgPSAyLjMwMDAwNWY7Ci0gIGNvbnN0IGZsb2F0IHYyID0gMi4zMDAwMDZmOwotICBtc2cxLnNl
dF9vcHRpb25hbF9mbG9hdCh2MSk7Ci0gIG1zZzIuc2V0X29wdGlvbmFsX2Zsb2F0KHYyKTsKLQot
ICAvLyBDb21wYXJlCi0gIEFTU0VSVF9ORSh2MSwgdjIpIDw8ICJTaG91bGQgbm90IGJlIHRoZSBz
YW1lOiAiIDw8IHYxIDw8ICIsICIgPDwgdjI7Ci0gIEFTU0VSVF9GTE9BVF9FUSh2MSwgdjIpIDw8
ICJTaG91bGQgYmUgYXBwcm94LiBlcXVhbDogIiA8PCB2MSA8PCAiLCAiIDw8IHYyOwotICBFWFBF
Q1RfRkFMU0UodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVhbHMobXNnMSwgbXNnMikpOwot
ICBFWFBFQ1RfVFJVRSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkFwcHJveGltYXRlbHlFcXVp
dmFsZW50KG1zZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXNnMikpOwotCi0gIC8vIE1vZGlmeSB0aGUgZXF1aXZhbGVu
Y3kgcmVxdWlyZW1lbnQgdG9vCi0gIG1zZzEuY2xlYXJfb3B0aW9uYWxfaW50MzIoKTsKLSAgbXNn
Mi5zZXRfb3B0aW9uYWxfaW50MzIoMCk7Ci0KLSAgLy8gQ29tcGFyZS4gTm93IHNob3VsZCBvbmx5
IHBhc3Mgb24gQXBwcm94aW1hdGVseUVxdWl2YWxlbnQKLSAgRVhQRUNUX0ZBTFNFKHV0aWw6Ok1l
c3NhZ2VEaWZmZXJlbmNlcjo6RXF1YWxzKG1zZzEsIG1zZzIpKTsKLSAgRVhQRUNUX0ZBTFNFKHV0
aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RXF1aXZhbGVudChtc2cxLCBtc2cyKSk7Ci0gIEVYUEVD
VF9GQUxTRSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkFwcHJveGltYXRlbHlFcXVhbHMobXNn
MSwgbXNnMikpOwotICBFWFBFQ1RfVFJVRSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkFwcHJv
eGltYXRlbHlFcXVpdmFsZW50KG1zZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnMikpOwotfQotCi1URVNUKE1lc3Nh
Z2VEaWZmZXJlbmNlclRlc3QsIEFwcHJveGltYXRlSW5lcXVpdmFsZW5jeVRlc3QpIHsKLSAgLy8g
Q3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1zZzE7
Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0QWxsRmll
bGRzKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAgLy8gU2hv
dWxkIGZhaWwgb24gZXF1aXZhbGVuY3kKLSAgbXNnMS5zZXRfb3B0aW9uYWxfaW50MzIoLTEpOwot
ICBFWFBFQ1RfRkFMU0UodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpBcHByb3hpbWF0ZWx5RXF1
aXZhbGVudChtc2cxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtc2cyKSk7Ci0KLSAgLy8gTWFrZSB0aGVzZSBmaWVsZHMg
dGhlIHNhbWUgYWdhaW4uCi0gIG1zZzEuc2V0X29wdGlvbmFsX2ludDMyKDApOwotICBtc2cyLnNl
dF9vcHRpb25hbF9pbnQzMigwKTsKLSAgRVhQRUNUX1RSVUUodXRpbDo6TWVzc2FnZURpZmZlcmVu
Y2VyOjpBcHByb3hpbWF0ZWx5RXF1aXZhbGVudChtc2cxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzIpKTsKLQotICAv
LyBTaG91bGQgZmFpbCBvbiBhcHByb3hpbWF0ZSBlcXVhbGl0eSBjaGVjawotICBjb25zdCBmbG9h
dCB2MSA9IDIuM2Y7Ci0gIGNvbnN0IGZsb2F0IHYyID0gOS4zZjsKLSAgbXNnMS5zZXRfb3B0aW9u
YWxfZmxvYXQodjEpOwotICBtc2cyLnNldF9vcHRpb25hbF9mbG9hdCh2Mik7Ci0gIEVYUEVDVF9G
QUxTRSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkFwcHJveGltYXRlbHlFcXVpdmFsZW50KG1z
ZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1zZzIpKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBX
aXRoaW5GcmFjdGlvbk9yTWFyZ2luRmxvYXRUZXN0KSB7Ci0gIC8vIENyZWF0ZSB0aGUgdGVzdGlu
ZyBwcm90b3MKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cxOwotICB1bml0dGVzdDo6VGVz
dEFsbFR5cGVzIG1zZzI7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMSk7Ci0gIFRl
c3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzIpOwotCi0gIC8vIFNob3VsZCBmYWlsIG9uIGFwcHJv
eGltYXRlIGVxdWFsaXR5IGNoZWNrCi0gIGNvbnN0IGZsb2F0IHYxID0gMTAwLjBmOwotICBjb25z
dCBmbG9hdCB2MiA9IDEwOS45ZjsKLSAgbXNnMS5zZXRfb3B0aW9uYWxfZmxvYXQodjEpOwotICBt
c2cyLnNldF9vcHRpb25hbF9mbG9hdCh2Mik7Ci0KLSAgLy8gQ29tcGFyZQotICB1dGlsOjpNZXNz
YWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5D
b21wYXJlKG1zZzEsIG1zZzIpKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmZCA9Ci0gICAg
ICBtc2cxLkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbF9mbG9hdCIp
OwotCi0gIC8vIFNldCBmbG9hdCBjb21wYXJpc29uIHRvIGV4YWN0LCBtYXJnaW4gYW5kIGZyYWN0
aW9uIHZhbHVlIHNob3VsZCBub3QgbWF0dGVyLgotICBkaWZmZXJlbmNlci5zZXRfZmxvYXRfY29t
cGFyaXNvbih1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkVYQUNUKTsKLSAgLy8gU2V0IG1hcmdp
biBmb3IgZmxvYXQgY29tcGFyaXNvbi4KLSAgZGlmZmVyZW5jZXIuU2V0RnJhY3Rpb25BbmRNYXJn
aW4oZmQsIDAuMCwgMTAuMCk7Ci0gIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5Db21wYXJlKG1z
ZzEsIG1zZzIpKTsKLQotICAvLyBNYXJnaW4gYW5kIGZyYWN0aW9uIGZsb2F0IGNvbXBhcmlzb24g
aXMgYWN0aXZhdGVkIHdoZW4gZmxvYXQgY29tcGFyaXNvbiBpcwotICAvLyBzZXQgdG8gYXBwcm94
aW1hdGUuCi0gIGRpZmZlcmVuY2VyLnNldF9mbG9hdF9jb21wYXJpc29uKHV0aWw6Ok1lc3NhZ2VE
aWZmZXJlbmNlcjo6QVBQUk9YSU1BVEUpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21w
YXJlKG1zZzEsIG1zZzIpKTsKLQotICAvLyBUZXN0IG91dCBmbG9hdCBjb21wYXJpc29uIHdpdGgg
ZnJhY3Rpb24uCi0gIGRpZmZlcmVuY2VyLlNldEZyYWN0aW9uQW5kTWFyZ2luKGZkLCAwLjIsIDAu
MCk7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikpOwotCi0g
IC8vIFNob3VsZCBmYWlsIHNpbmNlIHRoZSBmcmFjdGlvbiBpcyBzbWFsbGVyIHRoYW4gZXJyb3Iu
Ci0gIGRpZmZlcmVuY2VyLlNldEZyYWN0aW9uQW5kTWFyZ2luKGZkLCAwLjAxLCAwLjApOwotICBF
WFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci0KLSAgLy8gU2hv
dWxkIHBhc3MgaWYgZWl0aGVyIGZyYWN0aW9uIG9yIG1hcmdpbiBhcmUgc2F0aXNmaWVkLgotICBk
aWZmZXJlbmNlci5TZXRGcmFjdGlvbkFuZE1hcmdpbihmZCwgMC4wMSwgMTAuMCk7Ci0gIEVYUEVD
VF9UUlVFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikpOwotCi0gIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBtYXJnaW4gYW5kIGZyYWN0aW9uIG9ubHkgYWZmZWN0cyB0aGUgZmllbGQgdGhh
dCBpdCB3YXMKLSAgLy8gc2V0IGZvci4KLSAgbXNnMS5zZXRfZGVmYXVsdF9mbG9hdCh2MSk7Ci0g
IG1zZzIuc2V0X2RlZmF1bHRfZmxvYXQodjIpOwotICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXIu
Q29tcGFyZShtc2cxLCBtc2cyKSk7Ci0gIG1zZzEuc2V0X2RlZmF1bHRfZmxvYXQodjEpOwotICBt
c2cyLnNldF9kZWZhdWx0X2Zsb2F0KHYxKTsKLSAgRVhQRUNUX1RSVUUoZGlmZmVyZW5jZXIuQ29t
cGFyZShtc2cxLCBtc2cyKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgV2l0
aGluRnJhY3Rpb25Pck1hcmdpbkRvdWJsZVRlc3QpIHsKLSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5n
IHByb3RvcwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1zZzE7Ci0gIHVuaXR0ZXN0OjpUZXN0
QWxsVHlwZXMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtc2cxKTsKLSAgVGVz
dFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAgLy8gU2hvdWxkIGZhaWwgb24gYXBwcm94
aW1hdGUgZXF1YWxpdHkgY2hlY2sKLSAgY29uc3QgZG91YmxlIHYxID0gMTAwLjA7Ci0gIGNvbnN0
IGRvdWJsZSB2MiA9IDEwOS45OwotICBtc2cxLnNldF9vcHRpb25hbF9kb3VibGUodjEpOwotICBt
c2cyLnNldF9vcHRpb25hbF9kb3VibGUodjIpOwotCi0gIC8vIENvbXBhcmUKLSAgdXRpbDo6TWVz
c2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXIu
Q29tcGFyZShtc2cxLCBtc2cyKSk7Ci0KLSAgLy8gU2V0IGNvbXBhcmlzb24gdG8gZXhhY3QsIG1h
cmdpbiBhbmQgZnJhY3Rpb24gdmFsdWUgc2hvdWxkIG5vdCBtYXR0ZXIuCi0gIGRpZmZlcmVuY2Vy
LnNldF9mbG9hdF9jb21wYXJpc29uKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RVhBQ1QpOwot
ICAvLyBTZXQgbWFyZ2luIGZvciBmbG9hdCBjb21wYXJpc29uLgotICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIGZkID0KLSAgICAgIG1zZzEuR2V0RGVzY3JpcHRvcigpLT5GaW5kRmllbGRCeU5hbWUo
Im9wdGlvbmFsX2RvdWJsZSIpOwotICBkaWZmZXJlbmNlci5TZXRGcmFjdGlvbkFuZE1hcmdpbihm
ZCwgMC4wLCAxMC4wKTsKLSAgRVhQRUNUX0ZBTFNFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwg
bXNnMikpOwotCi0gIC8vIE1hcmdpbiBhbmQgZnJhY3Rpb24gY29tcGFyaXNvbiBpcyBhY3RpdmF0
ZWQgd2hlbiBmbG9hdCBjb21wYXJpc29uIGlzCi0gIC8vIHNldCB0byBhcHByb3hpbWF0ZS4KLSAg
ZGlmZmVyZW5jZXIuc2V0X2Zsb2F0X2NvbXBhcmlzb24odXRpbDo6TWVzc2FnZURpZmZlcmVuY2Vy
OjpBUFBST1hJTUFURSk7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwg
bXNnMikpOwotCi0gIC8vIFRlc3Qgb3V0IGNvbXBhcmlzb24gd2l0aCBmcmFjdGlvbi4KLSAgZGlm
ZmVyZW5jZXIuU2V0RnJhY3Rpb25BbmRNYXJnaW4oZmQsIDAuMiwgMC4wKTsKLSAgRVhQRUNUX1RS
VUUoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci0KLSAgLy8gU2hvdWxkIGZhaWwg
c2luY2UgdGhlIGZyYWN0aW9uIGlzIHNtYWxsZXIgdGhhbiBlcnJvci4KLSAgZGlmZmVyZW5jZXIu
U2V0RnJhY3Rpb25BbmRNYXJnaW4oZmQsIDAuMDEsIDAuMCk7Ci0gIEVYUEVDVF9GQUxTRShkaWZm
ZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLQotICAvLyBTaG91bGQgcGFzcyBpZiBlaXRo
ZXIgZnJhY3Rpb24gb3IgbWFyZ2luIGFyZSBzYXRpc2ZpZWQuCi0gIGRpZmZlcmVuY2VyLlNldEZy
YWN0aW9uQW5kTWFyZ2luKGZkLCAwLjAxLCAxMC4wKTsKLSAgRVhQRUNUX1RSVUUoZGlmZmVyZW5j
ZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci0KLSAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG1hcmdp
biBhbmQgZnJhY3Rpb24gb25seSBhZmZlY3RzIHRoZSBmaWVsZCB0aGF0IGl0IHdhcwotICAvLyBz
ZXQgZm9yLgotICBtc2cxLnNldF9kZWZhdWx0X2RvdWJsZSh2MSk7Ci0gIG1zZzIuc2V0X2RlZmF1
bHRfZG91YmxlKHYyKTsKLSAgRVhQRUNUX0ZBTFNFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwg
bXNnMikpOwotICBtc2cxLnNldF9kZWZhdWx0X2RvdWJsZSh2MSk7Ci0gIG1zZzIuc2V0X2RlZmF1
bHRfZG91YmxlKHYxKTsKLSAgRVhQRUNUX1RSVUUoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBt
c2cyKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgV2l0aGluRGVmYXVsdEZy
YWN0aW9uT3JNYXJnaW5Eb3VibGVUZXN0KSB7Ci0gIC8vIENyZWF0ZSB0aGUgdGVzdGluZyBwcm90
b3MKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cxOwotICB1bml0dGVzdDo6VGVzdEFsbFR5
cGVzIG1zZzI7Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMSk7Ci0gIFRlc3RVdGls
OjpTZXRBbGxGaWVsZHMoJm1zZzIpOwotCi0gIC8vIFNob3VsZCBmYWlsIG9uIGFwcHJveGltYXRl
IGVxdWFsaXR5IGNoZWNrCi0gIGNvbnN0IGRvdWJsZSB2MSA9IDEwMC4wOwotICBjb25zdCBkb3Vi
bGUgdjIgPSAxMDkuOTsKLSAgbXNnMS5zZXRfb3B0aW9uYWxfZG91YmxlKHYxKTsKLSAgbXNnMi5z
ZXRfb3B0aW9uYWxfZG91YmxlKHYyKTsKLQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlm
ZmVyZW5jZXI7Ci0KLSAgLy8gQ29tcGFyZQotICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXIuQ29t
cGFyZShtc2cxLCBtc2cyKSk7Ci0KLSAgLy8gU2V0IHVwIGEgY3VzdG9tIGZpZWxkIGNvbXBhcml0
b3IsIHdpdGggYSBkZWZhdWx0IGZyYWN0aW9uIGFuZCBtYXJnaW4gZm9yCi0gIC8vIGZsb2F0IGFu
ZCBkb3VibGUgY29tcGFyaXNvbi4KLSAgdXRpbDo6RGVmYXVsdEZpZWxkQ29tcGFyYXRvciBmaWVs
ZF9jb21wYXJpdG9yOwotICBmaWVsZF9jb21wYXJpdG9yLlNldERlZmF1bHRGcmFjdGlvbkFuZE1h
cmdpbigwLjAsIDEwLjApOwotICBkaWZmZXJlbmNlci5zZXRfZmllbGRfY29tcGFyYXRvcigmZmll
bGRfY29tcGFyaXRvcik7Ci0KLSAgLy8gU2V0IGNvbXBhcmlzb24gdG8gZXhhY3QsIG1hcmdpbiBh
bmQgZnJhY3Rpb24gdmFsdWUgc2hvdWxkIG5vdCBtYXR0ZXIuCi0gIGZpZWxkX2NvbXBhcml0b3Iu
c2V0X2Zsb2F0X2NvbXBhcmlzb24odXRpbDo6RGVmYXVsdEZpZWxkQ29tcGFyYXRvcjo6RVhBQ1Qp
OwotICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci0KLSAg
Ly8gTWFyZ2luIGFuZCBmcmFjdGlvbiBjb21wYXJpc29uIGlzIGFjdGl2YXRlZCB3aGVuIGZsb2F0
IGNvbXBhcmlzb24gaXMKLSAgLy8gc2V0IHRvIGFwcHJveGltYXRlLgotICBmaWVsZF9jb21wYXJp
dG9yLnNldF9mbG9hdF9jb21wYXJpc29uKAotICAgICAgdXRpbDo6RGVmYXVsdEZpZWxkQ29tcGFy
YXRvcjo6QVBQUk9YSU1BVEUpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlKG1z
ZzEsIG1zZzIpKTsKLQotICAvLyBUZXN0IG91dCBjb21wYXJpc29uIHdpdGggZnJhY3Rpb24uCi0g
IGZpZWxkX2NvbXBhcml0b3IuU2V0RGVmYXVsdEZyYWN0aW9uQW5kTWFyZ2luKDAuMiwgMC4wKTsK
LSAgRVhQRUNUX1RSVUUoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci0KLSAgLy8g
U2hvdWxkIGZhaWwgc2luY2UgdGhlIGZyYWN0aW9uIGlzIHNtYWxsZXIgdGhhbiBlcnJvci4KLSAg
ZmllbGRfY29tcGFyaXRvci5TZXREZWZhdWx0RnJhY3Rpb25BbmRNYXJnaW4oMC4wMSwgMC4wKTsK
LSAgRVhQRUNUX0ZBTFNFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikpOwotCi0gIC8v
IFNob3VsZCBwYXNzIGlmIGVpdGhlciBmcmFjdGlvbiBvciBtYXJnaW4gYXJlIHNhdGlzZmllZC4K
LSAgZmllbGRfY29tcGFyaXRvci5TZXREZWZhdWx0RnJhY3Rpb25BbmRNYXJnaW4oMC4wMSwgMTAu
MCk7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikpOwotCi0g
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZhdWx0IG1hcmdpbiBhbmQgZnJhY3Rpb24gYWZmZWN0
cyBhbGwgZmllbGRzCi0gIG1zZzEuc2V0X2RlZmF1bHRfZG91YmxlKHYxKTsKLSAgbXNnMi5zZXRf
ZGVmYXVsdF9kb3VibGUodjIpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlKG1z
ZzEsIG1zZzIpKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBCYXNpY0ZpZWxk
T3JkZXJpbmdzVGVzdCkgewotICAvLyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0gIHVuaXR0
ZXN0OjpUZXN0RmllbGRPcmRlcmluZ3MgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RGaWVsZE9yZGVy
aW5ncyBtc2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHNBbmRFeHRlbnNpb25zKCZtc2cx
KTsKLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkc0FuZEV4dGVuc2lvbnMoJm1zZzIpOwotCi0gIC8v
IENvbXBhcmUKLSAgRVhQRUNUX1RSVUUodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVhbHMo
bXNnMSwgbXNnMikpOwotfQotCi0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgQmFzaWNG
aWVsZE9yZGVyaW5nSW5lcXVhbGl0eVRlc3QpIHsKLSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHBy
b3RvcwotICB1bml0dGVzdDo6VGVzdEZpZWxkT3JkZXJpbmdzIG1zZzE7Ci0gIHVuaXR0ZXN0OjpU
ZXN0RmllbGRPcmRlcmluZ3MgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzQW5kRXh0
ZW5zaW9ucygmbXNnMSk7Ci0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHNBbmRFeHRlbnNpb25zKCZt
c2cyKTsKLQotICBtc2cxLnNldF9teV9mbG9hdCgxNS4wMCk7Ci0gIG1zZzIuc2V0X215X2Zsb2F0
KDE2LjAwKTsKLQotICAvLyBDb21wYXJlCi0gIEVYUEVDVF9GQUxTRSh1dGlsOjpNZXNzYWdlRGlm
ZmVyZW5jZXI6OkVxdWFscyhtc2cxLCBtc2cyKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVu
Y2VyVGVzdCwgQmFzaWNFeHRlbnNpb25UZXN0KSB7Ci0gIC8vIENyZWF0ZSB0aGUgdGVzdGluZyBw
cm90b3MKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1zZzE7Ci0gIHVuaXR0ZXN0OjpU
ZXN0QWxsRXh0ZW5zaW9ucyBtc2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKCZt
c2cxKTsKLSAgVGVzdFV0aWw6OlNldEFsbEV4dGVuc2lvbnMoJm1zZzIpOwotCi0gIC8vIENvbXBh
cmUKLSAgRVhQRUNUX1RSVUUodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVhbHMobXNnMSwg
bXNnMikpOwotfQotCi0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgQmFzaWNFeHRlbnNp
b25JbmVxdWFsaXR5VGVzdCkgewotICAvLyBDcmVhdGUgdGhlIHRlc3RpbmcgcHJvdG9zCi0gIHVu
aXR0ZXN0OjpUZXN0QWxsRXh0ZW5zaW9ucyBtc2cxOwotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVu
c2lvbnMgbXNnMjsKLQotICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9ucygmbXNnMSk7Ci0gIFRl
c3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKCZtc2cyKTsKLQotICBtc2cxLlNldEV4dGVuc2lvbih1
bml0dGVzdDo6b3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uLCAxMDEpOwotICBtc2cyLlNldEV4dGVu
c2lvbih1bml0dGVzdDo6b3B0aW9uYWxfaW50MzJfZXh0ZW5zaW9uLCAxMDIpOwotCi0gIC8vIENv
bXBhcmUKLSAgRVhQRUNUX0ZBTFNFKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RXF1YWxzKG1z
ZzEsIG1zZzIpKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBPbmVvZlRlc3Qp
IHsKLSAgLy8gQ3JlYXRlIHRoZSB0ZXN0aW5nIHByb3RvcwotICB1bml0dGVzdDo6VGVzdE9uZW9m
MiBtc2cxOwotICB1bml0dGVzdDo6VGVzdE9uZW9mMiBtc2cyOwotCi0gIFRlc3RVdGlsOjpTZXRP
bmVvZjEoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0T25lb2YxKCZtc2cyKTsKLQotICAvLyBDb21w
YXJlCi0gIEVYUEVDVF9UUlVFKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RXF1YWxzKG1zZzEs
IG1zZzIpKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBPbmVvZkluZXF1YWxp
dHlUZXN0KSB7Ci0gIC8vIENyZWF0ZSB0aGUgdGVzdGluZyBwcm90b3MKLSAgdW5pdHRlc3Q6OlRl
c3RPbmVvZjIgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbXNnMjsKLQotICBUZXN0VXRp
bDo6U2V0T25lb2YxKCZtc2cxKTsKLSAgVGVzdFV0aWw6OlNldE9uZW9mMigmbXNnMik7Ci0KLSAg
Ly8gQ29tcGFyZQotICBFWFBFQ1RfRkFMU0UodXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVh
bHMobXNnMSwgbXNnMikpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIFVua25v
d25GaWVsZFBhcnRpYWxFcXVhbFRlc3QpIHsKLSAgdW5pdHRlc3Q6OlRlc3RFbXB0eU1lc3NhZ2Ug
ZW1wdHkxOwotICB1bml0dGVzdDo6VGVzdEVtcHR5TWVzc2FnZSBlbXB0eTI7Ci0KLSAgVW5rbm93
bkZpZWxkU2V0KiB1bmtub3duMSA9IGVtcHR5MS5tdXRhYmxlX3Vua25vd25fZmllbGRzKCk7Ci0g
IFVua25vd25GaWVsZFNldCogdW5rbm93bjIgPSBlbXB0eTIubXV0YWJsZV91bmtub3duX2ZpZWxk
cygpOwotCi0gIHVua25vd24xLT5BZGRWYXJpbnQoMjQzLCAxMjIpOwotICB1bmtub3duMS0+QWRk
TGVuZ3RoRGVsaW1pdGVkKDI0NSwgImFiYyIpOwotICB1bmtub3duMS0+QWRkR3JvdXAoMjQ2KS0+
QWRkRml4ZWQzMigyNDgsIDEpOwotICB1bmtub3duMS0+bXV0YWJsZV9maWVsZCgyKS0+bXV0YWJs
ZV9ncm91cCgpLT5BZGRGaXhlZDMyKDI0OCwgMik7Ci0KLSAgdW5rbm93bjItPkFkZFZhcmludCgy
NDMsIDEyMik7Ci0gIHVua25vd24yLT5BZGRMZW5ndGhEZWxpbWl0ZWQoMjQ1LCAiYWJjIik7Ci0g
IHVua25vd24yLT5BZGRHcm91cCgyNDYpLT5BZGRGaXhlZDMyKDI0OCwgMSk7Ci0gIHVua25vd24y
LT5tdXRhYmxlX2ZpZWxkKDIpLT5tdXRhYmxlX2dyb3VwKCktPkFkZEZpeGVkMzIoMjQ4LCAyKTsK
LQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2Vy
LnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OlBBUlRJQUwpOwotICBFWFBFQ1Rf
VFJVRShkaWZmZXJlbmNlci5Db21wYXJlKGVtcHR5MSwgZW1wdHkyKSk7Ci19Ci0KLVRFU1QoTWVz
c2FnZURpZmZlcmVuY2VyVGVzdCwgU3BlY2lmaWVkRmllbGRzRXF1YWxpdHlBbGxUZXN0KSB7Ci0g
IHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBt
c2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0
QWxsRmllbGRzKCZtc2cyKTsKLQotICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmll
bGRzMTsKLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGZpZWxkczI7Ci0gIG1zZzEu
R2V0UmVmbGVjdGlvbigpLT5MaXN0RmllbGRzKG1zZzEsICZmaWVsZHMxKTsKLSAgbXNnMi5HZXRS
ZWZsZWN0aW9uKCktPkxpc3RGaWVsZHMobXNnMiwgJmZpZWxkczIpOwotCi0gIHV0aWw6Ok1lc3Nh
Z2VEaWZmZXJlbmNlciBkaWZmZXJlbmNlcjsKLSAgRVhQRUNUX1RSVUUoZGlmZmVyZW5jZXIuQ29t
cGFyZVdpdGhGaWVsZHMobXNnMSwgbXNnMiwgZmllbGRzMSwgZmllbGRzMikpOwotfQotCi1URVNU
KE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIFNwZWNpZmllZEZpZWxkc0luZXF1YWxpdHlBbGxUZXN0
KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxU
eXBlcyBtc2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotCi0gIHZlY3Rv
cjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHMxOwotICB2ZWN0b3I8Y29uc3QgRmllbGRE
ZXNjcmlwdG9yKj4gZmllbGRzMjsKLSAgbXNnMS5HZXRSZWZsZWN0aW9uKCktPkxpc3RGaWVsZHMo
bXNnMSwgJmZpZWxkczEpOwotICBtc2cyLkdldFJlZmxlY3Rpb24oKS0+TGlzdEZpZWxkcyhtc2cy
LCAmZmllbGRzMik7Ci0KLSAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwot
ICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXIuQ29tcGFyZVdpdGhGaWVsZHMobXNnMSwgbXNnMiwg
ZmllbGRzMSwgZmllbGRzMikpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIFNw
ZWNpZmllZEZpZWxkc0VtcHR5TGlzdEFsd2F5c1N1Y2NlZWRzKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0
QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cyOwotCi0gIFRlc3RV
dGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0
b3IqPiBlbXB0eV9maWVsZHM7Ci0KLSAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVu
Y2VyOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlV2l0aEZpZWxkcyhtc2cxLCBt
c2cyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eV9m
aWVsZHMsIGVtcHR5X2ZpZWxkcykpOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzIp
OwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlV2l0aEZpZWxkcyhtc2cxLCBtc2cy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eV9maWVs
ZHMsIGVtcHR5X2ZpZWxkcykpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIFNw
ZWNpZmllZEZpZWxkc0NvbXBhcmVXaXRoU2VsZikgewotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVz
IG1zZzE7Ci0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotCi0gIHZlY3Rvcjxjb25z
dCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIG1zZzEuR2V0UmVmbGVjdGlvbigpLT5MaXN0
RmllbGRzKG1zZzEsICZmaWVsZHMpOwotCi0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZm
ZXJlbmNlcjsKLSAgRVhQRUNUX1RSVUUoZGlmZmVyZW5jZXIuQ29tcGFyZVdpdGhGaWVsZHMobXNn
MSwgbXNnMSwgZmllbGRzLCBmaWVsZHMpKTsKLQotICB7Ci0gICAgLy8gQ29tcGFyZSB3aXRoIGEg
c3Vic2V0IG9mIGZpZWxkcy4KLSAgICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gY29t
cGFyZV9maWVsZHM7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgIGlmIChpICUgMiA9PSAwKSB7Ci0gICAgICAgIGNvbXBhcmVfZmllbGRzLnB1c2hf
YmFjayhmaWVsZHNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICBFWFBFQ1RfVFJVRShkaWZmZXJl
bmNlci5Db21wYXJlV2l0aEZpZWxkcyhtc2cxLCBtc2cxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVfZmllbGRzLCBjb21wYXJlX2ZpZWxkcykp
OwotICB9Ci0gIHsKLSAgICAvLyBTcGVjaWZ5IGEgZGlmZmVyZW50IHNldCBvZiBmaWVsZHMgdG8g
Y29tcGFyZSwgZXZlbiB0aG91Z2ggd2UncmUgdXNpbmcgdGhlCi0gICAgLy8gc2FtZSBtZXNzYWdl
LiBUaGlzIHNob3VsZCBmYWlsLCBzaW5jZSB3ZSBhcmUgZXhwbGljaXRseSBzYXlpbmcgdGhhdCB0
aGUKLSAgICAvLyBzZXQgb2YgZmllbGRzIGFyZSBkaWZmZXJlbnQuCi0gICAgdmVjdG9yPGNvbnN0
IEZpZWxkRGVzY3JpcHRvcio+IGNvbXBhcmVfZmllbGRzMTsKLSAgICB2ZWN0b3I8Y29uc3QgRmll
bGREZXNjcmlwdG9yKj4gY29tcGFyZV9maWVsZHMyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICBpZiAoaSAlIDIgPT0gMCkgewotICAgICAgICBj
b21wYXJlX2ZpZWxkczEucHVzaF9iYWNrKGZpZWxkc1tpXSk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBjb21wYXJlX2ZpZWxkczIucHVzaF9iYWNrKGZpZWxkc1tpXSk7Ci0gICAgICB9Ci0gICAg
fQotICAgIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5Db21wYXJlV2l0aEZpZWxkcygKLSAgICAg
ICAgbXNnMSwgbXNnMSwgY29tcGFyZV9maWVsZHMxLCBjb21wYXJlX2ZpZWxkczIpKTsKLSAgfQot
fQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIFNwZWNpZmllZEZpZWxkc0VxdWFsaXR5
QWxsU2h1ZmZsZWRUZXN0KSB7Ci0gIC8vIFRoaXMgaXMgYSBwdWJsaWMgZnVuY3Rpb24sIHNvIG1h
a2Ugc3VyZSB0aGVyZSBhcmUgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCi0gIC8vIGxpc3Qgb2Yg
ZmllbGRzLiBSYW5kb21seSBzaHVmZmxlIHRoZW0gdG8gbWFrZSBzdXJlIHRoYXQgdGhleSBhcmUg
cHJvcGVybHkKLSAgLy8gb3JkZXJlZCBmb3IgY29tcGFyaXNvbi4KLSAgdW5pdHRlc3Q6OlRlc3RB
bGxUeXBlcyBtc2cxOwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1zZzI7Ci0KLSAgVGVzdFV0
aWw6OlNldEFsbEZpZWxkcygmbXNnMSk7Ci0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzIp
OwotCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHMxOwotICB2ZWN0b3I8
Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmllbGRzMjsKLSAgbXNnMS5HZXRSZWZsZWN0aW9uKCkt
Pkxpc3RGaWVsZHMobXNnMSwgJmZpZWxkczEpOwotICBtc2cyLkdldFJlZmxlY3Rpb24oKS0+TGlz
dEZpZWxkcyhtc2cyLCAmZmllbGRzMik7Ci0KLSAgc3RkOjpyYW5kb21fc2h1ZmZsZShmaWVsZHMx
LmJlZ2luKCksIGZpZWxkczEuZW5kKCkpOwotICBzdGQ6OnJhbmRvbV9zaHVmZmxlKGZpZWxkczIu
YmVnaW4oKSwgZmllbGRzMi5lbmQoKSk7Ci0KLSAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyIGRp
ZmZlcmVuY2VyOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlV2l0aEZpZWxkcyht
c2cxLCBtc2cyLCBmaWVsZHMxLCBmaWVsZHMyKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVu
Y2VyVGVzdCwgU3BlY2lmaWVkRmllbGRzU3Vic2V0RXF1YWxpdHlUZXN0KSB7Ci0gIC8vIFNwZWNp
ZnkgYSBzZXQgb2YgZmllbGRzIHRvIGNvbXBhcmUuIEFsbCB0aGUgZmllbGRzIGFyZSBlcXVhbC4K
LSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cxOwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVz
IG1zZzI7Ci0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0
QWxsRmllbGRzKCZtc2cyKTsKLQotICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmll
bGRzMTsKLSAgbXNnMS5HZXRSZWZsZWN0aW9uKCktPkxpc3RGaWVsZHMobXNnMSwgJmZpZWxkczEp
OwotCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBjb21wYXJlX2ZpZWxkczsKLSAg
Ly8gT25seSBjb21wYXJlIHRoZSBmaWVsZCBkZXNjcmlwdG9ycyB3aXRoIGV2ZW4gaW5kaWNlcy4K
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMxLnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKGkg
JSAyID09IDApIHsKLSAgICAgIGNvbXBhcmVfZmllbGRzLnB1c2hfYmFjayhmaWVsZHMxW2ldKTsK
LSAgICB9Ci0gIH0KLQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0g
IEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNvbXBhcmVXaXRoRmllbGRzKG1zZzEsIG1zZzIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVfZmllbGRz
LCBjb21wYXJlX2ZpZWxkcykpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsCi0g
ICAgIFNwZWNpZmllZEZpZWxkc1N1YnNldElnbm9yZXNPdGhlckZpZWxkRGlmZmVyZW5jZXNUZXN0
KSB7Ci0gIC8vIFNwZWNpZnkgYSBzZXQgb2YgZmllbGRzIHRvIGNvbXBhcmUsIGJ1dCBjbGVhciBh
bGwgdGhlIG90aGVyIGZpZWxkcyBpbiBvbmUKLSAgLy8gb2YgdGhlIG1lc3NhZ2VzLiBUaGlzIHNo
b3VsZCBmYWlsIGEgcmVndWxhciBjb21wYXJlLCBidXQgQ29tcGFyZVdpdGhGaWVsZHMKLSAgLy8g
c2hvdWxkIHN1Y2NlZWQuCi0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRl
c3Q6OlRlc3RBbGxUeXBlcyBtc2cyOwotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtc2cxKTsK
LSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbXNnMik7Ci0KLSAgdmVjdG9yPGNvbnN0IEZpZWxk
RGVzY3JpcHRvcio+IGZpZWxkczE7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBt
c2cxLkdldFJlZmxlY3Rpb24oKTsKLSAgcmVmbGVjdGlvbi0+TGlzdEZpZWxkcyhtc2cxLCAmZmll
bGRzMSk7Ci0KLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGNvbXBhcmVfZmllbGRz
OwotICAvLyBPbmx5IGNvbXBhcmUgdGhlIGZpZWxkIGRlc2NyaXB0b3JzIHdpdGggZXZlbiBpbmRp
Y2VzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkczEuc2l6ZSgpOyArK2kpIHsKLSAgICBp
ZiAoaSAlIDIgPT0gMCkgewotICAgICAgY29tcGFyZV9maWVsZHMucHVzaF9iYWNrKGZpZWxkczFb
aV0pOwotICAgIH0gZWxzZSB7Ci0gICAgICByZWZsZWN0aW9uLT5DbGVhckZpZWxkKCZtc2cyLCBm
aWVsZHMxW2ldKTsKLSAgICB9Ci0gIH0KLQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlm
ZmVyZW5jZXI7Ci0gIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIp
KTsKLSAgRVhQRUNUX1RSVUUoZGlmZmVyZW5jZXIuQ29tcGFyZVdpdGhGaWVsZHMobXNnMSwgbXNn
MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9m
aWVsZHMsIGNvbXBhcmVfZmllbGRzKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVz
dCwgU3BlY2lmaWVkRmllbGRzRGV0ZWN0c0RpZmZlcmVuY2VzVGVzdCkgewotICAvLyBDaGFuZ2Ug
YWxsIG9mIHRoZSByZXBlYXRlZCBmaWVsZHMgaW4gb25lIG9mIHRoZSBtZXNzYWdlcywgYW5kIHVz
ZSBvbmx5Ci0gIC8vIHRob3NlIGZpZWxkcyBmb3IgY29tcGFyaXNvbi4KLSAgdW5pdHRlc3Q6OlRl
c3RBbGxUeXBlcyBtc2cxOwotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIG1zZzI7Ci0gIFRlc3RV
dGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwotICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtc2cy
KTsKLSAgVGVzdFV0aWw6Ok1vZGlmeVJlcGVhdGVkRmllbGRzKCZtc2cyKTsKLQotICB2ZWN0b3I8
Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmllbGRzMTsKLSAgbXNnMS5HZXRSZWZsZWN0aW9uKCkt
Pkxpc3RGaWVsZHMobXNnMSwgJmZpZWxkczEpOwotCi0gIHZlY3Rvcjxjb25zdCBGaWVsZERlc2Ny
aXB0b3IqPiBjb21wYXJlX2ZpZWxkczsKLSAgLy8gT25seSBjb21wYXJlIHRoZSByZXBlYXRlZCBm
aWVsZCBkZXNjcmlwdG9ycy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMxLnNpemUoKTsg
KytpKSB7Ci0gICAgaWYgKGZpZWxkczFbaV0tPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgIGNvbXBh
cmVfZmllbGRzLnB1c2hfYmFjayhmaWVsZHMxW2ldKTsKLSAgICB9Ci0gIH0KLQotICB1dGlsOjpN
ZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNl
ci5Db21wYXJlV2l0aEZpZWxkcyhtc2cxLCBtc2cyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9maWVsZHMsIGNvbXBhcmVfZmllbGRzKSk7Ci19
Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgU3BlY2lmaWVkRmllbGRzRXF1aXZhbGVu
Y2VBbGxUZXN0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNnMTsKLSAgdW5pdHRlc3Q6
OlRlc3RBbGxUeXBlcyBtc2cyOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHMoJm1zZzEpOwot
ICBUZXN0VXRpbDo6U2V0QWxsRmllbGRzKCZtc2cyKTsKLQotICB2ZWN0b3I8Y29uc3QgRmllbGRE
ZXNjcmlwdG9yKj4gZmllbGRzMTsKLSAgdmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGZp
ZWxkczI7Ci0gIG1zZzEuR2V0UmVmbGVjdGlvbigpLT5MaXN0RmllbGRzKG1zZzEsICZmaWVsZHMx
KTsKLSAgbXNnMi5HZXRSZWZsZWN0aW9uKCktPkxpc3RGaWVsZHMobXNnMiwgJmZpZWxkczIpOwot
Ci0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJlbmNlcjsKLSAgZGlmZmVyZW5jZXIu
c2V0X21lc3NhZ2VfZmllbGRfY29tcGFyaXNvbigKLSAgICAgIHV0aWw6Ok1lc3NhZ2VEaWZmZXJl
bmNlcjo6RVFVSVZBTEVOVCk7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNvbXBhcmVXaXRo
RmllbGRzKG1zZzEsIG1zZzIsIGZpZWxkczEsIGZpZWxkczIpKTsKLX0KLQotVEVTVChNZXNzYWdl
RGlmZmVyZW5jZXJUZXN0LAotICAgICBTcGVjaWZpZWRGaWVsZHNFcXVpdmFsZW5jZUlnbm9yZXNP
dGhlckZpZWxkRGlmZmVyZW5jZXNUZXN0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXMgbXNn
MTsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtc2cyOwotICBjb25zdCBEZXNjcmlwdG9yKiBk
ZXNjID0gbXNnMS5HZXREZXNjcmlwdG9yKCk7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBv
cHRpb25hbF9pbnQzMl9kZXNjID0KLSAgICAgIGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9u
YWxfaW50MzIiKTsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBvcHRpb25hbF9pbnQ2NF9kZXNj
ID0KLSAgICAgIGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgib3B0aW9uYWxfaW50NjQiKTsKLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBkZWZhdWx0X2ludDY0X2Rlc2MgPQotICAgICAgZGVzYy0+Rmlu
ZEZpZWxkQnlOYW1lKCJkZWZhdWx0X2ludDY0Iik7Ci0gIEFTU0VSVF9UUlVFKG9wdGlvbmFsX2lu
dDMyX2Rlc2MgIT0gTlVMTCk7Ci0gIEFTU0VSVF9UUlVFKG9wdGlvbmFsX2ludDY0X2Rlc2MgIT0g
TlVMTCk7Ci0gIEFTU0VSVF9UUlVFKGRlZmF1bHRfaW50NjRfZGVzYyAhPSBOVUxMKTsKLSAgbXNn
MS5zZXRfb3B0aW9uYWxfaW50MzIoMCk7Ci0gIG1zZzIuc2V0X29wdGlvbmFsX2ludDY0KDApOwot
ICBtc2cxLnNldF9kZWZhdWx0X2ludDY0KGRlZmF1bHRfaW50NjRfZGVzYy0+ZGVmYXVsdF92YWx1
ZV9pbnQ2NCgpKTsKLQotICAvLyBTZXQgYSBmaWVsZCB0byBhIG5vbi1kZWZhdWx0IHZhbHVlIHNv
IHdlIGtub3cgdGhhdCBmaWVsZCBzZWxlY3Rpb24gaXMKLSAgLy8gYWN0dWFsbHkgZG9pbmcgc29t
ZXRoaW5nLgotICBtc2cyLnNldF9vcHRpb25hbF91aW50NjQoMjMpOwotCi0gIHZlY3Rvcjxjb25z
dCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHMxOwotICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlw
dG9yKj4gZmllbGRzMjsKLSAgZmllbGRzMS5wdXNoX2JhY2sob3B0aW9uYWxfaW50MzJfZGVzYyk7
Ci0gIGZpZWxkczEucHVzaF9iYWNrKGRlZmF1bHRfaW50NjRfZGVzYyk7Ci0KLSAgZmllbGRzMi5w
dXNoX2JhY2sob3B0aW9uYWxfaW50NjRfZGVzYyk7Ci0KLSAgdXRpbDo6TWVzc2FnZURpZmZlcmVu
Y2VyIGRpZmZlcmVuY2VyOwotICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXIuQ29tcGFyZVdpdGhG
aWVsZHMobXNnMSwgbXNnMiwgZmllbGRzMSwgZmllbGRzMikpOwotICBkaWZmZXJlbmNlci5zZXRf
bWVzc2FnZV9maWVsZF9jb21wYXJpc29uKAotICAgICAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2Vy
OjpFUVVJVkFMRU5UKTsKLSAgRVhQRUNUX0ZBTFNFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwg
bXNnMikpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlV2l0aEZpZWxkcyhtc2cx
LCBtc2cyLCBmaWVsZHMxLCBmaWVsZHMyKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2Vy
VGVzdCwgUmVwZWF0ZWRGaWVsZFNldFRlc3RfU2V0T2ZTZXQpIHsKLSAgLy8gQ3JlYXRlIHRoZSB0
ZXN0aW5nIHByb3RvcwotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIG1zZzE7
Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMjsKLQotICBwcm90b2J1
Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlOjpJdGVtKiBpdGVtID0gbXNnMS5hZGRfaXRlbSgp
OwotICBpdGVtLT5hZGRfcmEoMSk7IGl0ZW0tPmFkZF9yYSgyKTsgaXRlbS0+YWRkX3JhKDMpOwot
ICBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOwotICBpdGVtLT5hZGRfcmEoNSk7IGl0ZW0tPmFkZF9y
YSg2KTsKLSAgaXRlbSA9IG1zZzEuYWRkX2l0ZW0oKTsKLSAgaXRlbS0+YWRkX3JhKDEpOyBpdGVt
LT5hZGRfcmEoMyk7Ci0gIGl0ZW0gPSBtc2cxLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPmFkZF9yYSg2
KTsgaXRlbS0+YWRkX3JhKDcpOyBpdGVtLT5hZGRfcmEoOCk7Ci0KLSAgaXRlbSA9IG1zZzIuYWRk
X2l0ZW0oKTsKLSAgaXRlbS0+YWRkX3JhKDYpOyBpdGVtLT5hZGRfcmEoNSk7Ci0gIGl0ZW0gPSBt
c2cyLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPmFkZF9yYSg2KTsgaXRlbS0+YWRkX3JhKDgpOyBpdGVt
LT5hZGRfcmEoNyk7Ci0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPmFkZF9yYSgx
KTsgaXRlbS0+YWRkX3JhKDMpOwotICBpdGVtID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5h
ZGRfcmEoMyk7IGl0ZW0tPmFkZF9yYSgyKTsgaXRlbS0+YWRkX3JhKDEpOwotCi0gIC8vIENvbXBh
cmUKLSAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNl
ci5zZXRfcmVwZWF0ZWRfZmllbGRfY29tcGFyaXNvbih1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6
OkFTX1NFVCk7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikp
OwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIFJlcGVhdGVkRmllbGRTZXRUZXN0
X0NvbWJpbmF0aW9uKSB7Ci0gIC8vIENyZWF0ZSB0aGUgdGVzdGluZyBwcm90b3MKLSAgcHJvdG9i
dWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cxOwotICBwcm90b2J1Zl91bml0dGVzdDo6
VGVzdERpZmZNZXNzYWdlIG1zZzI7Ci0gIC8vIFRyZWF0ICJpdGVtIiBhcyBNYXAsIHdpdGgga2V5
ID0gImEiCi0gIC8vIFRyZWF0ICJpdGVtLnJhIiBhbHNvIGFzIFNldAotICAvLyBUcmVhdCAicnYi
IGFzIFNldAotICAvLyBUcmVhdCAicnciIGFzIExpc3QKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRl
c3REaWZmTWVzc2FnZTo6SXRlbSogaXRlbSA9IG1zZzEuYWRkX2l0ZW0oKTsKLSAgaXRlbS0+c2V0
X2EoMyk7Ci0gIGl0ZW0tPmFkZF9yYSgxKTsgaXRlbS0+YWRkX3JhKDIpOyBpdGVtLT5hZGRfcmEo
Myk7Ci0gIGl0ZW0gPSBtc2cxLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPnNldF9hKDQpOwotICBpdGVt
LT5hZGRfcmEoNSk7IGl0ZW0tPmFkZF9yYSg2KTsKLSAgaXRlbSA9IG1zZzEuYWRkX2l0ZW0oKTsK
LSAgaXRlbS0+c2V0X2EoMSk7Ci0gIGl0ZW0tPmFkZF9yYSgxKTsgaXRlbS0+YWRkX3JhKDMpOwot
ICBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSgyKTsKLSAgaXRlbS0+YWRk
X3JhKDYpOyBpdGVtLT5hZGRfcmEoNyk7IGl0ZW0tPmFkZF9yYSg4KTsKLQotICBpdGVtID0gbXNn
Mi5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSg0KTsKLSAgaXRlbS0+YWRkX3JhKDYpOyBpdGVt
LT5hZGRfcmEoNSk7Ci0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPnNldF9hKDIp
OwotICBpdGVtLT5hZGRfcmEoNik7IGl0ZW0tPmFkZF9yYSg4KTsgaXRlbS0+YWRkX3JhKDcpOwot
ICBpdGVtID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSgxKTsKLSAgaXRlbS0+YWRk
X3JhKDEpOyBpdGVtLT5hZGRfcmEoMyk7Ci0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7Ci0gIGl0
ZW0tPnNldF9hKDMpOwotICBpdGVtLT5hZGRfcmEoMyk7IGl0ZW0tPmFkZF9yYSgyKTsgaXRlbS0+
YWRkX3JhKDEpOwotCi0gIG1zZzEuYWRkX3J2KDMpOwotICBtc2cxLmFkZF9ydig0KTsKLSAgbXNn
MS5hZGRfcnYoNyk7Ci0gIG1zZzEuYWRkX3J2KDApOwotICBtc2cyLmFkZF9ydig0KTsKLSAgbXNn
Mi5hZGRfcnYoMyk7Ci0gIG1zZzIuYWRkX3J2KDApOwotICBtc2cyLmFkZF9ydig3KTsKLQotICBt
c2cxLmFkZF9ydygibm90aGluZyIpOyBtc2cyLmFkZF9ydygibm90aGluZyIpOwotICBtc2cxLmFk
ZF9ydygic2hvdWxkIik7IG1zZzIuYWRkX3J3KCJzaG91bGQiKTsKLSAgbXNnMS5hZGRfcncoImNo
YW5nZSIpOyBtc2cyLmFkZF9ydygiY2hhbmdlIik7Ci0KLSAgLy8gQ29tcGFyZQotICB1dGlsOjpN
ZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXIxOwotICBkaWZmZXJlbmNlcjEuVHJlYXRBc01h
cChtc2cxLkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKCJpdGVtIiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZW0tPkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1l
KCJhIikpOwotICBkaWZmZXJlbmNlcjEuVHJlYXRBc1NldChtc2cxLkdldERlc2NyaXB0b3IoKS0+
RmluZEZpZWxkQnlOYW1lKCJydiIpKTsKLSAgZGlmZmVyZW5jZXIxLlRyZWF0QXNTZXQoaXRlbS0+
R2V0RGVzY3JpcHRvcigpLT5GaW5kRmllbGRCeU5hbWUoInJhIikpOwotICBFWFBFQ1RfVFJVRShk
aWZmZXJlbmNlcjEuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci0KLSAgdXRpbDo6TWVzc2FnZURpZmZl
cmVuY2VyIGRpZmZlcmVuY2VyMjsKLSAgZGlmZmVyZW5jZXIyLlRyZWF0QXNNYXAobXNnMS5HZXRE
ZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgiaXRlbSIpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpdGVtLT5HZXREZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgiYSIpKTsKLSAg
ZGlmZmVyZW5jZXIyLnNldF9yZXBlYXRlZF9maWVsZF9jb21wYXJpc29uKHV0aWw6Ok1lc3NhZ2VE
aWZmZXJlbmNlcjo6QVNfU0VUKTsKLSAgZGlmZmVyZW5jZXIyLlRyZWF0QXNMaXN0KG1zZzEuR2V0
RGVzY3JpcHRvcigpLT5GaW5kRmllbGRCeU5hbWUoInJ3IikpOwotICBFWFBFQ1RfVFJVRShkaWZm
ZXJlbmNlcjIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVu
Y2VyVGVzdCwgUmVwZWF0ZWRGaWVsZE1hcFRlc3RfUGFydGlhbCkgewotICBwcm90b2J1Zl91bml0
dGVzdDo6VGVzdERpZmZNZXNzYWdlIG1zZzE7Ci0gIC8vIG1lc3NhZ2UgbXNnMSB7Ci0gIC8vICAg
aXRlbSB7IGE6IDE7IGI6ICIxMSIgfQotICAvLyB9Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0
RGlmZk1lc3NhZ2U6Okl0ZW0qIGl0ZW0gPSBtc2cxLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPnNldF9h
KDEpOwotICBpdGVtLT5zZXRfYigiMTEiKTsKLQotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERp
ZmZNZXNzYWdlIG1zZzI7Ci0gIC8vIG1lc3NhZ2UgbXNnMiB7Ci0gIC8vICAgaXRlbSB7IGE6IDI7
IGI6ICIyMiIgfQotICAvLyAgIGl0ZW0geyBhOiAxOyBiOiAiMTEiIH0KLSAgLy8gfQotICBpdGVt
ID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSgyKTsKLSAgaXRlbS0+c2V0X2IoIjIy
Iik7Ci0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPnNldF9hKDEpOwotICBpdGVt
LT5zZXRfYigiMTEiKTsKLQotICAvLyBDb21wYXJlCi0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNl
ciBkaWZmZXJlbmNlcjsKLSAgZGlmZmVyZW5jZXIuVHJlYXRBc01hcChHZXRGaWVsZERlc2NyaXB0
b3IobXNnMSwgIml0ZW0iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHZXRGaWVsZERlc2Ny
aXB0b3IobXNnMSwgIml0ZW0uYSIpKTsKLSAgZGlmZmVyZW5jZXIuc2V0X3Njb3BlKHV0aWw6Ok1l
c3NhZ2VEaWZmZXJlbmNlcjo6UEFSVElBTCk7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNv
bXBhcmUobXNnMSwgbXNnMikpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIFJl
cGVhdGVkRmllbGRTZXRUZXN0X0R1cGxpY2F0ZXMpIHsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRl
c3REaWZmTWVzc2FnZSBhLCBiLCBjOwotICAvLyBtZXNzYWdlIGE6IHsKLSAgLy8gICBydjogMAot
ICAvLyAgIHJ2OiAxCi0gIC8vICAgcnY6IDAKLSAgLy8gfQotICBhLmFkZF9ydigwKTsKLSAgYS5h
ZGRfcnYoMSk7Ci0gIGEuYWRkX3J2KDApOwotICAvLyBtZXNzYWdlIGI6IHsKLSAgLy8gICBydjog
MAotICAvLyAgIHJ2OiAwCi0gIC8vICAgcnY6IDEKLSAgLy8gfQotICBiLmFkZF9ydigwKTsKLSAg
Yi5hZGRfcnYoMCk7Ci0gIGIuYWRkX3J2KDEpOwotICAvLyBtZXNzYWdlIGM6IHsKLSAgLy8gICBy
djogMAotICAvLyAgIHJ2OiAxCi0gIC8vIH0KLSAgYy5hZGRfcnYoMCk7Ci0gIGMuYWRkX3J2KDEp
OwotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2Vy
LlRyZWF0QXNTZXQoR2V0RmllbGREZXNjcmlwdG9yKGEsICJydiIpKTsKLSAgRVhQRUNUX1RSVUUo
ZGlmZmVyZW5jZXIuQ29tcGFyZShiLCBhKSk7Ci0gIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5D
b21wYXJlKGMsIGEpKTsKLQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXIx
OwotICBkaWZmZXJlbmNlcjEuc2V0X3JlcGVhdGVkX2ZpZWxkX2NvbXBhcmlzb24odXRpbDo6TWVz
c2FnZURpZmZlcmVuY2VyOjpBU19TRVQpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlcjEuQ29t
cGFyZShiLCBhKSk7Ci0gIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlcjEuQ29tcGFyZShjLCBhKSk7
Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgUmVwZWF0ZWRGaWVsZFNldFRlc3Rf
UGFydGlhbFNpbXBsZSkgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIGEs
IGIsIGM7Ci0gIC8vIG1lc3NhZ2UgYTogewotICAvLyAgIHJtIHsgYzogMSB9Ci0gIC8vICAgcm0g
eyBjOiAwIH0KLSAgLy8gfQotICBhLmFkZF9ybSgpLT5zZXRfYygxKTsKLSAgYS5hZGRfcm0oKS0+
c2V0X2MoMCk7Ci0gIC8vIG1lc3NhZ2UgYjogewotICAvLyAgIHJtIHsgYzogMSB9Ci0gIC8vICAg
cm0ge30KLSAgLy8gfQotICBiLmFkZF9ybSgpLT5zZXRfYygxKTsKLSAgYi5hZGRfcm0oKTsKLSAg
Ly8gbWVzc2FnZSBjOiB7Ci0gIC8vICAgcm0ge30KLSAgLy8gICBybSB7IGM6IDEgfQotICAvLyB9
Ci0gIGMuYWRkX3JtKCk7Ci0gIGMuYWRkX3JtKCktPnNldF9jKDEpOwotICB1dGlsOjpNZXNzYWdl
RGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2VyLnNldF9zY29wZSh1dGlsOjpN
ZXNzYWdlRGlmZmVyZW5jZXI6OlBBUlRJQUwpOwotICBkaWZmZXJlbmNlci5UcmVhdEFzU2V0KEdl
dEZpZWxkRGVzY3JpcHRvcihhLCAicm0iKSk7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNv
bXBhcmUoYiwgYSkpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlKGMsIGEpKTsK
LX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBSZXBlYXRlZEZpZWxkU2V0VGVzdF9Q
YXJ0aWFsKSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMSwgbXNn
MjsKLSAgLy8gbWVzc2FnZSBtc2cxOiB7Ci0gIC8vICAgcm0geyBhOiAxIH0KLSAgLy8gICBybSB7
IGI6IDIgfQotICAvLyAgIHJtIHsgYzogMyB9Ci0gIC8vIH0KLSAgbXNnMS5hZGRfcm0oKS0+c2V0
X2EoMSk7Ci0gIG1zZzEuYWRkX3JtKCktPnNldF9iKDIpOwotICBtc2cxLmFkZF9ybSgpLT5zZXRf
YygzKTsKLSAgLy8gbWVzc2FnZSBtc2cyOiB7Ci0gIC8vICAgcm0geyBhOiAxOyBjOiAzIH0KLSAg
Ly8gICBybSB7IGI6IDI7IGM6IDMgfQotICAvLyAgIHJtIHsgYjogMiB9Ci0gIC8vIH0KLSAgcHJv
dG9idWZfdW5pdHRlc3Q6OlRlc3RGaWVsZCogZmllbGQgPSBtc2cyLmFkZF9ybSgpOwotICBmaWVs
ZC0+c2V0X2EoMSk7Ci0gIGZpZWxkLT5zZXRfYygzKTsKLSAgZmllbGQgPSBtc2cyLmFkZF9ybSgp
OwotICBmaWVsZC0+c2V0X2IoMik7Ci0gIGZpZWxkLT5zZXRfYygzKTsKLSAgZmllbGQgPSBtc2cy
LmFkZF9ybSgpOwotICBmaWVsZC0+c2V0X2IoMik7Ci0KLSAgdXRpbDo6TWVzc2FnZURpZmZlcmVu
Y2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNlci5zZXRfc2NvcGUodXRpbDo6TWVzc2FnZURp
ZmZlcmVuY2VyOjpQQVJUSUFMKTsKLSAgZGlmZmVyZW5jZXIuVHJlYXRBc1NldChHZXRGaWVsZERl
c2NyaXB0b3IobXNnMSwgInJtIikpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJl
KG1zZzEsIG1zZzIpKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBSZXBlYXRl
ZEZpZWxkTWFwVGVzdF9NdWx0aXBsZUZpZWxkc0FzS2V5KSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0
OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMTsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVz
c2FnZSBtc2cyOwotICAvLyBUcmVhdCAiaXRlbSIgYXMgTWFwLCB3aXRoIGtleSA9ICgiYSIsICJy
YSIpCi0gIC8vIFRyZWF0ICJpdGVtLnJhIiBhcyBTZXQKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRl
c3REaWZmTWVzc2FnZTo6SXRlbSogaXRlbSA9IG1zZzEuYWRkX2l0ZW0oKTsKLSAgLy8ga2V5ID0+
IHZhbHVlOiAoMSwgezIsIDN9KSA9PiAiYSIKLSAgaXRlbS0+c2V0X2EoMSk7Ci0gIGl0ZW0tPmFk
ZF9yYSgyKTsKLSAgaXRlbS0+YWRkX3JhKDMpOwotICBpdGVtLT5zZXRfYigiYSIpOwotICBpdGVt
ID0gbXNnMS5hZGRfaXRlbSgpOwotICAvLyBrZXkgPT4gdmFsdWU6ICgyLCB7MSwgM30pID0+ICJi
IgotICBpdGVtLT5zZXRfYSgyKTsKLSAgaXRlbS0+YWRkX3JhKDEpOwotICBpdGVtLT5hZGRfcmEo
Myk7Ci0gIGl0ZW0tPnNldF9iKCJiIik7Ci0gIGl0ZW0gPSBtc2cxLmFkZF9pdGVtKCk7Ci0gIC8v
IGtleSA9PiB2YWx1ZTogKDEsIHsxLCAzfSkgPT4gImMiCi0gIGl0ZW0tPnNldF9hKDEpOwotICBp
dGVtLT5hZGRfcmEoMSk7Ci0gIGl0ZW0tPmFkZF9yYSgzKTsKLSAgaXRlbS0+c2V0X2IoImMiKTsK
LQotICBpdGVtID0gbXNnMi5hZGRfaXRlbSgpOwotICAvLyBrZXkgPT4gdmFsdWU6ICgxLCB7MSwg
M30pID0+ICJjIgotICBpdGVtLT5zZXRfYSgxKTsKLSAgaXRlbS0+YWRkX3JhKDMpOwotICBpdGVt
LT5hZGRfcmEoMSk7Ci0gIGl0ZW0tPnNldF9iKCJjIik7Ci0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVt
KCk7Ci0gIC8vIGtleSA9PiB2YWx1ZTogKDEsIHsyLCAzfSkgPT4gImEiCi0gIGl0ZW0tPnNldF9h
KDEpOwotICBpdGVtLT5hZGRfcmEoMyk7Ci0gIGl0ZW0tPmFkZF9yYSgyKTsKLSAgaXRlbS0+c2V0
X2IoImEiKTsKLSAgaXRlbSA9IG1zZzIuYWRkX2l0ZW0oKTsKLSAgLy8ga2V5ID0+IHZhbHVlOiAo
MiwgezEsIDN9KSA9PiAiYiIKLSAgaXRlbS0+c2V0X2EoMik7Ci0gIGl0ZW0tPmFkZF9yYSgzKTsK
LSAgaXRlbS0+YWRkX3JhKDEpOwotICBpdGVtLT5zZXRfYigiYiIpOwotCi0gIC8vIENvbXBhcmUK
LSAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNlci5U
cmVhdEFzU2V0KEdldEZpZWxkRGVzY3JpcHRvcihtc2cxLCAiaXRlbS5yYSIpKTsKLSAgRVhQRUNU
X0ZBTFNFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikpOwotICB2ZWN0b3I8Y29uc3Qg
RmllbGREZXNjcmlwdG9yKj4ga2V5X2ZpZWxkczsKLSAga2V5X2ZpZWxkcy5wdXNoX2JhY2soR2V0
RmllbGREZXNjcmlwdG9yKG1zZzEsICJpdGVtLmEiKSk7Ci0gIGtleV9maWVsZHMucHVzaF9iYWNr
KEdldEZpZWxkRGVzY3JpcHRvcihtc2cxLCAiaXRlbS5yYSIpKTsKLSAgZGlmZmVyZW5jZXIuVHJl
YXRBc01hcFdpdGhNdWx0aXBsZUZpZWxkc0FzS2V5KAotICAgICAgR2V0RmllbGREZXNjcmlwdG9y
KG1zZzEsICJpdGVtIiksIGtleV9maWVsZHMpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5D
b21wYXJlKG1zZzEsIG1zZzIpKTsKLQotICAvLyBJbnRyb2R1Y2Ugc29tZSBkaWZmZXJlbmNlcy4K
LSAgbXNnMS5jbGVhcl9pdGVtKCk7Ci0gIG1zZzIuY2xlYXJfaXRlbSgpOwotICBpdGVtID0gbXNn
MS5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSg0KTsKLSAgaXRlbS0+YWRkX3JhKDUpOwotICBp
dGVtLT5hZGRfcmEoNik7Ci0gIGl0ZW0tPnNldF9iKCJoZWxsbyIpOwotICBpdGVtID0gbXNnMi5h
ZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSg0KTsKLSAgaXRlbS0+YWRkX3JhKDYpOwotICBpdGVt
LT5hZGRfcmEoNSk7Ci0gIGl0ZW0tPnNldF9iKCJ3b3JsZCIpOwotICBzdHJpbmcgb3V0cHV0Owot
ICBkaWZmZXJlbmNlci5SZXBvcnREaWZmZXJlbmNlc1RvU3RyaW5nKCZvdXRwdXQpOwotICBFWFBF
Q1RfRkFMU0UoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci0gIEVYUEVDVF9FUSgK
LSAgICAgICJtb3ZlZDogaXRlbVswXS5yYVswXSAtPiBpdGVtWzBdLnJhWzFdIDogNVxuIgotICAg
ICAgIm1vdmVkOiBpdGVtWzBdLnJhWzFdIC0+IGl0ZW1bMF0ucmFbMF0gOiA2XG4iCi0gICAgICAi
bW9kaWZpZWQ6IGl0ZW1bMF0uYjogXCJoZWxsb1wiIC0+IFwid29ybGRcIlxuIiwKLSAgICAgIG91
dHB1dCk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgUmVwZWF0ZWRGaWVsZE1h
cFRlc3RfTXVsdGlwbGVGaWVsZFBhdGhzQXNLZXkpIHsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRl
c3REaWZmTWVzc2FnZSBtc2cxOwotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdl
IG1zZzI7Ci0gIC8vIFRyZWF0ICJpdGVtIiBhcyBNYXAsIHdpdGgga2V5ID0gKCJtLmEiLCAibS5y
YyIpCi0gIC8vIFRyZWF0ICJpdGVtLm0ucmMiIGFzIFNldAotICBwcm90b2J1Zl91bml0dGVzdDo6
VGVzdERpZmZNZXNzYWdlOjpJdGVtKiBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOwotICAvLyBrZXkg
PT4gdmFsdWU6ICgxLCB7MiwgM30pID0+ICJhIgotICBpdGVtLT5tdXRhYmxlX20oKS0+c2V0X2Eo
MSk7Ci0gIGl0ZW0tPm11dGFibGVfbSgpLT5hZGRfcmMoMik7Ci0gIGl0ZW0tPm11dGFibGVfbSgp
LT5hZGRfcmMoMyk7Ci0gIGl0ZW0tPnNldF9iKCJhIik7Ci0gIGl0ZW0gPSBtc2cxLmFkZF9pdGVt
KCk7Ci0gIC8vIGtleSA9PiB2YWx1ZTogKDIsIHsxLCAzfSkgPT4gImIiCi0gIGl0ZW0tPm11dGFi
bGVfbSgpLT5zZXRfYSgyKTsKLSAgaXRlbS0+bXV0YWJsZV9tKCktPmFkZF9yYygxKTsKLSAgaXRl
bS0+bXV0YWJsZV9tKCktPmFkZF9yYygzKTsKLSAgaXRlbS0+c2V0X2IoImIiKTsKLSAgaXRlbSA9
IG1zZzEuYWRkX2l0ZW0oKTsKLSAgLy8ga2V5ID0+IHZhbHVlOiAoMSwgezEsIDN9KSA9PiAiYyIK
LSAgaXRlbS0+bXV0YWJsZV9tKCktPnNldF9hKDEpOwotICBpdGVtLT5tdXRhYmxlX20oKS0+YWRk
X3JjKDEpOwotICBpdGVtLT5tdXRhYmxlX20oKS0+YWRkX3JjKDMpOwotICBpdGVtLT5zZXRfYigi
YyIpOwotCi0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7Ci0gIC8vIGtleSA9PiB2YWx1ZTogKDEs
IHsxLCAzfSkgPT4gImMiCi0gIGl0ZW0tPm11dGFibGVfbSgpLT5zZXRfYSgxKTsKLSAgaXRlbS0+
bXV0YWJsZV9tKCktPmFkZF9yYygzKTsKLSAgaXRlbS0+bXV0YWJsZV9tKCktPmFkZF9yYygxKTsK
LSAgaXRlbS0+c2V0X2IoImMiKTsKLSAgaXRlbSA9IG1zZzIuYWRkX2l0ZW0oKTsKLSAgLy8ga2V5
ID0+IHZhbHVlOiAoMSwgezIsIDN9KSA9PiAiYSIKLSAgaXRlbS0+bXV0YWJsZV9tKCktPnNldF9h
KDEpOwotICBpdGVtLT5tdXRhYmxlX20oKS0+YWRkX3JjKDMpOwotICBpdGVtLT5tdXRhYmxlX20o
KS0+YWRkX3JjKDIpOwotICBpdGVtLT5zZXRfYigiYSIpOwotICBpdGVtID0gbXNnMi5hZGRfaXRl
bSgpOwotICAvLyBrZXkgPT4gdmFsdWU6ICgyLCB7MSwgM30pID0+ICJiIgotICBpdGVtLT5tdXRh
YmxlX20oKS0+c2V0X2EoMik7Ci0gIGl0ZW0tPm11dGFibGVfbSgpLT5hZGRfcmMoMyk7Ci0gIGl0
ZW0tPm11dGFibGVfbSgpLT5hZGRfcmMoMSk7Ci0gIGl0ZW0tPnNldF9iKCJiIik7Ci0KLSAgLy8g
Q29tcGFyZQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZl
cmVuY2VyLlRyZWF0QXNTZXQoR2V0RmllbGREZXNjcmlwdG9yKG1zZzEsICJpdGVtLm0ucmMiKSk7
Ci0gIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLSAgdmVj
dG9yPHZlY3Rvcjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiA+IGtleV9maWVsZF9wYXRoczsKLSAg
dmVjdG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGtleV9maWVsZF9wYXRoMTsKLSAga2V5X2Zp
ZWxkX3BhdGgxLnB1c2hfYmFjayhHZXRGaWVsZERlc2NyaXB0b3IobXNnMSwgIml0ZW0ubSIpKTsK
LSAga2V5X2ZpZWxkX3BhdGgxLnB1c2hfYmFjayhHZXRGaWVsZERlc2NyaXB0b3IobXNnMSwgIml0
ZW0ubS5hIikpOwotICB2ZWN0b3I8Y29uc3QgRmllbGREZXNjcmlwdG9yKj4ga2V5X2ZpZWxkX3Bh
dGgyOwotICBrZXlfZmllbGRfcGF0aDIucHVzaF9iYWNrKEdldEZpZWxkRGVzY3JpcHRvcihtc2cx
LCAiaXRlbS5tIikpOwotICBrZXlfZmllbGRfcGF0aDIucHVzaF9iYWNrKEdldEZpZWxkRGVzY3Jp
cHRvcihtc2cxLCAiaXRlbS5tLnJjIikpOwotICBrZXlfZmllbGRfcGF0aHMucHVzaF9iYWNrKGtl
eV9maWVsZF9wYXRoMSk7Ci0gIGtleV9maWVsZF9wYXRocy5wdXNoX2JhY2soa2V5X2ZpZWxkX3Bh
dGgyKTsKLSAgZGlmZmVyZW5jZXIuVHJlYXRBc01hcFdpdGhNdWx0aXBsZUZpZWxkUGF0aHNBc0tl
eSgKLSAgICAgIEdldEZpZWxkRGVzY3JpcHRvcihtc2cxLCAiaXRlbSIpLCBrZXlfZmllbGRfcGF0
aHMpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLQot
ICAvLyBJbnRyb2R1Y2Ugc29tZSBkaWZmZXJlbmNlcy4KLSAgbXNnMS5jbGVhcl9pdGVtKCk7Ci0g
IG1zZzIuY2xlYXJfaXRlbSgpOwotICBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOwotICBpdGVtLT5t
dXRhYmxlX20oKS0+c2V0X2EoNCk7Ci0gIGl0ZW0tPm11dGFibGVfbSgpLT5hZGRfcmMoNSk7Ci0g
IGl0ZW0tPm11dGFibGVfbSgpLT5hZGRfcmMoNik7Ci0gIGl0ZW0tPnNldF9iKCJoZWxsbyIpOwot
ICBpdGVtID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5tdXRhYmxlX20oKS0+c2V0X2EoNCk7
Ci0gIGl0ZW0tPm11dGFibGVfbSgpLT5hZGRfcmMoNik7Ci0gIGl0ZW0tPm11dGFibGVfbSgpLT5h
ZGRfcmMoNSk7Ci0gIGl0ZW0tPnNldF9iKCJ3b3JsZCIpOwotICBzdHJpbmcgb3V0cHV0OwotICBk
aWZmZXJlbmNlci5SZXBvcnREaWZmZXJlbmNlc1RvU3RyaW5nKCZvdXRwdXQpOwotICBFWFBFQ1Rf
RkFMU0UoZGlmZmVyZW5jZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci0gIEVYUEVDVF9FUSgKLSAg
ICAgICJtb2RpZmllZDogaXRlbVswXS5iOiBcImhlbGxvXCIgLT4gXCJ3b3JsZFwiXG4iCi0gICAg
ICAibW92ZWQ6IGl0ZW1bMF0ubS5yY1swXSAtPiBpdGVtWzBdLm0ucmNbMV0gOiA1XG4iCi0gICAg
ICAibW92ZWQ6IGl0ZW1bMF0ubS5yY1sxXSAtPiBpdGVtWzBdLm0ucmNbMF0gOiA2XG4iLAotICAg
ICAgb3V0cHV0KTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBSZXBlYXRlZEZp
ZWxkTWFwVGVzdF9JZ25vcmVkS2V5RmllbGRzKSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0
RGlmZk1lc3NhZ2UgbXNnMTsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBt
c2cyOwotICAvLyBUcmVhdCAiaXRlbSIgYXMgTWFwLCB3aXRoIGtleSA9ICgiYSIsICJyYSIpCi0g
IHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2U6Okl0ZW0qIGl0ZW0gPSBtc2cxLmFk
ZF9pdGVtKCk7Ci0gIGl0ZW0tPnNldF9hKDEpOwotICBpdGVtLT5hZGRfcmEoMik7Ci0gIGl0ZW0t
PnNldF9iKCJoZWxsbyIpOwotICBpdGVtID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRf
YSgxKTsKLSAgaXRlbS0+YWRkX3JhKDMpOwotICBpdGVtLT5zZXRfYigid29ybGQiKTsKLSAgLy8g
Q29tcGFyZQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIHZlY3Rv
cjxjb25zdCBGaWVsZERlc2NyaXB0b3IqPiBrZXlfZmllbGRzOwotICBrZXlfZmllbGRzLnB1c2hf
YmFjayhHZXRGaWVsZERlc2NyaXB0b3IobXNnMSwgIml0ZW0uYSIpKTsKLSAga2V5X2ZpZWxkcy5w
dXNoX2JhY2soR2V0RmllbGREZXNjcmlwdG9yKG1zZzEsICJpdGVtLnJhIikpOwotICBkaWZmZXJl
bmNlci5UcmVhdEFzTWFwV2l0aE11bHRpcGxlRmllbGRzQXNLZXkoCi0gICAgICBHZXRGaWVsZERl
c2NyaXB0b3IobXNnMSwgIml0ZW0iKSwga2V5X2ZpZWxkcyk7Ci0gIHN0cmluZyBvdXRwdXQ7Ci0g
IGRpZmZlcmVuY2VyLlJlcG9ydERpZmZlcmVuY2VzVG9TdHJpbmcoJm91dHB1dCk7Ci0gIEVYUEVD
VF9GQUxTRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLSAgRVhQRUNUX0VRKAot
ICAgICAgImFkZGVkOiBpdGVtWzBdOiB7IGE6IDEgcmE6IDMgYjogXCJ3b3JsZFwiIH1cbiIKLSAg
ICAgICJkZWxldGVkOiBpdGVtWzBdOiB7IGE6IDEgcmE6IDIgYjogXCJoZWxsb1wiIH1cbiIsCi0g
ICAgICBvdXRwdXQpOwotICAvLyBJZ25vcmVkIGZpZWxkcyB0aGF0IGFyZSBsaXN0ZWQgYXMgcGFy
dHMgb2YgdGhlIGtleSBhcmUgc3RpbGwgdXNlZAotICAvLyBpbiBrZXkgY29tcGFyaXNvbiwgYnV0
IHRoZXkncmUgbm90IHVzZWQgaW4gdmFsdWUgY29tcGFyaXNvbi4KLSAgZGlmZmVyZW5jZXIuSWdu
b3JlRmllbGQoR2V0RmllbGREZXNjcmlwdG9yKG1zZzEsICJpdGVtLnJhIikpOwotICBvdXRwdXQu
Y2xlYXIoKTsKLSAgRVhQRUNUX0ZBTFNFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikp
OwotICBFWFBFQ1RfRVEoCi0gICAgICAiYWRkZWQ6IGl0ZW1bMF06IHsgYTogMSByYTogMyBiOiBc
IndvcmxkXCIgfVxuIgotICAgICAgImRlbGV0ZWQ6IGl0ZW1bMF06IHsgYTogMSByYTogMiBiOiBc
ImhlbGxvXCIgfVxuIiwKLSAgICAgIG91dHB1dCk7Ci0gIC8vIElnbm9yaW5nIGEgZmllbGQgaW4g
dGhlIGtleSBpcyBkaWZmZXJlbnQgZnJvbSB0cmVhdGluZyB0aGUgbGVmdCBmaWVsZHMKLSAgLy8g
YXMga2V5LiBUaGF0IGlzOgotICAvLyAgIChrZXkgPSAoImEiLCAicmEiKSAmJiBpZ25vcmUgInJh
IikgIT0gKGtleSA9ICgiYSIpICYmIGlnbm9yZSAicmEiKQotICB1dGlsOjpNZXNzYWdlRGlmZmVy
ZW5jZXIgZGlmZmVyZW5jZXIyOwotICBkaWZmZXJlbmNlcjIuVHJlYXRBc01hcChHZXRGaWVsZERl
c2NyaXB0b3IobXNnMSwgIml0ZW0iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Rmll
bGREZXNjcmlwdG9yKG1zZzEsICJpdGVtLmEiKSk7Ci0gIGRpZmZlcmVuY2VyMi5JZ25vcmVGaWVs
ZChHZXRGaWVsZERlc2NyaXB0b3IobXNnMSwgIml0ZW0ucmEiKSk7Ci0gIG91dHB1dC5jbGVhcigp
OwotICBkaWZmZXJlbmNlcjIuUmVwb3J0RGlmZmVyZW5jZXNUb1N0cmluZygmb3V0cHV0KTsKLSAg
RVhQRUNUX0ZBTFNFKGRpZmZlcmVuY2VyMi5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLSAgRVhQRUNU
X0VRKAotICAgICAgImlnbm9yZWQ6IGl0ZW1bMF0ucmFcbiIKLSAgICAgICJtb2RpZmllZDogaXRl
bVswXS5iOiBcImhlbGxvXCIgLT4gXCJ3b3JsZFwiXG4iLAotICAgICAgb3V0cHV0KTsKLX0KLQot
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGtJZ25vcmVkRmllbGRzW10gPSB7InJtLmIiLCAicm0u
bS5iIn07Ci0KLWNsYXNzIFRlc3RJZ25vcmVyIDogcHVibGljIHV0aWw6Ok1lc3NhZ2VEaWZmZXJl
bmNlcjo6SWdub3JlQ3JpdGVyaWEgewotIHB1YmxpYzoKLSAgdmlydHVhbCBib29sIElzSWdub3Jl
ZCgKLSAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UxLCBjb25zdCBNZXNzYWdlJiBtZXNzYWdl
MiwKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0gICAgICBjb25zdCB2ZWN0
b3I8dXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpTcGVjaWZpY0ZpZWxkPiYgcGFyZW50X2ZpZWxk
cykgewotICAgIHN0cmluZyBuYW1lID0gIiI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJl
bnRfZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICBuYW1lICs9IHBhcmVudF9maWVsZHNbaV0u
ZmllbGQtPm5hbWUoKSArICIuIjsKLSAgICB9Ci0gICAgbmFtZSArPSBmaWVsZC0+bmFtZSgpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgR09PR0xFX0FSUkFZU0laRShrSWdub3JlZEZpZWxkcyk7
ICsraSkgewotICAgICAgaWYgKG5hbWUuY29tcGFyZShrSWdub3JlZEZpZWxkc1tpXSkgPT0gMCkg
ewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci19OwotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIFRyZWF0UmVwZWF0ZWRG
aWVsZEFzU2V0V2l0aElnbm9yZWRGaWVsZHMpIHsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RE
aWZmTWVzc2FnZSBtc2cxOwotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIG1z
ZzI7Ci0gIFRleHRGb3JtYXQ6Ok1lcmdlRnJvbVN0cmluZygicm0geyBhOiAxMVxuIGI6IDEyIH0i
LCAmbXNnMSk7Ci0gIFRleHRGb3JtYXQ6Ok1lcmdlRnJvbVN0cmluZygicm0geyBhOiAxMVxuIGI6
IDEzIH0iLCAmbXNnMik7Ci0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXI7Ci0gIGRp
ZmZlci5UcmVhdEFzU2V0KEdldEZpZWxkRGVzY3JpcHRvcihtc2cxLCAicm0iKSk7Ci0gIGRpZmZl
ci5BZGRJZ25vcmVDcml0ZXJpYShuZXcgVGVzdElnbm9yZXIpOwotICBFWFBFQ1RfVFJVRShkaWZm
ZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVz
dCwgVHJlYXRSZXBlYXRlZEZpZWxkQXNNYXBXaXRoSWdub3JlZEtleUZpZWxkcykgewotICBwcm90
b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIG1zZzE7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0
OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMjsKLSAgVGV4dEZvcm1hdDo6TWVyZ2VGcm9tU3RyaW5nKCJy
bSB7IGE6IDExXG4gbSB7IGE6IDEyXG4gYjogMTNcbiB9IH0iLCAmbXNnMSk7Ci0gIFRleHRGb3Jt
YXQ6Ok1lcmdlRnJvbVN0cmluZygicm0geyBhOiAxMVxuIG0geyBhOiAxMlxuIGI6IDE0XG4gfSB9
IiwgJm1zZzIpOwotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyOwotICBkaWZmZXIu
VHJlYXRBc01hcChHZXRGaWVsZERlc2NyaXB0b3IobXNnMSwgInJtIiksCi0gICAgICAgICAgICAg
ICAgICAgIEdldEZpZWxkRGVzY3JpcHRvcihtc2cxLCAicm0ubSIpKTsKLSAgZGlmZmVyLkFkZEln
bm9yZUNyaXRlcmlhKG5ldyBUZXN0SWdub3Jlcik7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlci5Db21w
YXJlKG1zZzEsIG1zZzIpKTsKLX0KLQotLy8gVGFrZXMgdGhlIHByb2R1Y3Qgb2YgYWxsIGVsZW1l
bnRzIG9mIGl0ZW0ucmEgYXMgdGhlIGtleSBmb3Iga2V5IGNvbXBhcmlzb24uCi1jbGFzcyBWYWx1
ZVByb2R1Y3RNYXBLZXlDb21wYXJhdG9yCi0gICAgOiBwdWJsaWMgdXRpbDo6TWVzc2FnZURpZmZl
cmVuY2VyOjpNYXBLZXlDb21wYXJhdG9yIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgdXRpbDo6TWVz
c2FnZURpZmZlcmVuY2VyOjpTcGVjaWZpY0ZpZWxkIFNwZWNpZmljRmllbGQ7Ci0gIHZpcnR1YWwg
Ym9vbCBJc01hdGNoKAotICAgICAgY29uc3QgTWVzc2FnZSAmbWVzc2FnZTEsIGNvbnN0IE1lc3Nh
Z2UgJm1lc3NhZ2UyLAotICAgICAgY29uc3QgdmVjdG9yPFNwZWNpZmljRmllbGQ+JiBwYXJlbnRf
ZmllbGRzKSBjb25zdCB7Ci0gICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbjEgPSBtZXNz
YWdlMS5HZXRSZWZsZWN0aW9uKCk7Ci0gICAgY29uc3QgUmVmbGVjdGlvbiogcmVmbGVjdGlvbjIg
PSBtZXNzYWdlMi5HZXRSZWZsZWN0aW9uKCk7Ci0gICAgLy8gRmllbGREZXNjcmlwdG9yIGZvciBp
dGVtLnJhCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiByYV9maWVsZCA9Ci0gICAgICAgIG1l
c3NhZ2UxLkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKCJyYSIpOwotICAgIC8vIEdl
dCB0aGUgcHJvZHVjdCBvZiBhbGwgZWxlbWVudHMgaW4gaXRlbS5yYQotICAgIGludCByZXN1bHQx
ID0gMSwgcmVzdWx0MiA9IDE7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWZsZWN0aW9uMS0+
RmllbGRTaXplKG1lc3NhZ2UxLCByYV9maWVsZCk7ICsraSkgewotICAgICAgcmVzdWx0MSAqPSBy
ZWZsZWN0aW9uMS0+R2V0UmVwZWF0ZWRJbnQzMihtZXNzYWdlMSwgcmFfZmllbGQsIGkpOwotICAg
IH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZmxlY3Rpb24yLT5GaWVsZFNpemUobWVzc2Fn
ZTIsIHJhX2ZpZWxkKTsgKytpKSB7Ci0gICAgICByZXN1bHQyICo9IHJlZmxlY3Rpb24yLT5HZXRS
ZXBlYXRlZEludDMyKG1lc3NhZ2UyLCByYV9maWVsZCwgaSk7Ci0gICAgfQotICAgIHJldHVybiBy
ZXN1bHQxID09IHJlc3VsdDI7Ci0gIH0KLX07Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVz
dCwgUmVwZWF0ZWRGaWVsZE1hcFRlc3RfQ3VzdG9tTWFwS2V5Q29tcGFyYXRvcikgewotICBwcm90
b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIG1zZzE7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0
OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMjsKLSAgLy8gVHJlYXQgIml0ZW0iIGFzIE1hcCwgdXNpbmcg
Y3VzdG9tIGtleSBjb21wYXJhdG9yIHRvIGRldGVybWluZSBpZiB0d28KLSAgLy8gZWxlbWVudHMg
aGF2ZSB0aGUgc2FtZSBrZXkuCi0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2U6
Okl0ZW0qIGl0ZW0gPSBtc2cxLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPmFkZF9yYSg2KTsKLSAgaXRl
bS0+YWRkX3JhKDM1KTsKLSAgaXRlbS0+c2V0X2IoImhlbGxvIik7Ci0gIGl0ZW0gPSBtc2cyLmFk
ZF9pdGVtKCk7Ci0gIGl0ZW0tPmFkZF9yYSgxMCk7Ci0gIGl0ZW0tPmFkZF9yYSgyMSk7Ci0gIGl0
ZW0tPnNldF9iKCJoZWxsbyIpOwotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5j
ZXI7Ci0gIFZhbHVlUHJvZHVjdE1hcEtleUNvbXBhcmF0b3Iga2V5X2NvbXBhcmF0b3I7Ci0gIGRp
ZmZlcmVuY2VyLlRyZWF0QXNNYXBVc2luZ0tleUNvbXBhcmF0b3IoCi0gICAgICBHZXRGaWVsZERl
c2NyaXB0b3IobXNnMSwgIml0ZW0iKSwgJmtleV9jb21wYXJhdG9yKTsKLSAgc3RyaW5nIG91dHB1
dDsKLSAgZGlmZmVyZW5jZXIuUmVwb3J0RGlmZmVyZW5jZXNUb1N0cmluZygmb3V0cHV0KTsKLSAg
Ly8gVGhvdWdoIHRoZSBhYm92ZSB0d28gbWVzc2FnZXMgaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGZv
ciBpdGVtLnJhLCB0aGV5Ci0gIC8vIGFyZSByZWdhcmRlZCBhcyBoYXZpbmcgdGhlIHNhbWUga2V5
IGJlY2F1c2UgNiAqIDM1ID09IDEwICogMjEuIFRoYXQncwotICAvLyBob3cgdGhlIGtleSBjb21w
YXJhdG9yIGRldGVybWluZXMgaWYgdGhlIHR3byBoYXZlIHRoZSBzYW1lIGtleS4KLSAgLy8gSG93
ZXZlciwgaW4gdmFsdWUgY29tcGFyaXNvbiwgYWxsIGZpZWxkcyBvZiB0aGUgbWVzc2FnZSBhcmUg
dGFrZW4gaW50bwotICAvLyBjb25zaWRlcmF0aW9uLCBzbyB0aGV5IGFyZSBkaWZmZXJlbnQgYmVj
YXVzZSB0aGVpciBpdGVtLnJhIGZpZWxkcyBoYXZlCi0gIC8vIGRpZmZlcmVudCB2YWx1ZXMgdXNp
bmcgbm9ybWFsIHZhbHVlIGNvbXBhcmlzb24uCi0gIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5D
b21wYXJlKG1zZzEsIG1zZzIpKTsKLSAgRVhQRUNUX0VRKAotICAgICAgIm1vZGlmaWVkOiBpdGVt
WzBdLnJhWzBdOiA2IC0+IDEwXG4iCi0gICAgICAibW9kaWZpZWQ6IGl0ZW1bMF0ucmFbMV06IDM1
IC0+IDIxXG4iLAotICAgICAgb3V0cHV0KTsKLSAgZGlmZmVyZW5jZXIuSWdub3JlRmllbGQoR2V0
RmllbGREZXNjcmlwdG9yKG1zZzEsICJpdGVtLnJhIikpOwotICBvdXRwdXQuY2xlYXIoKTsKLSAg
Ly8gaXRlbS5yYSBpcyBpZ25vcmVkIGluIHZhbHVlIGNvbXBhcmlzb24sIHNvIHRoZSB0d28gbWVz
c2FnZXMgZXF1YWwuCi0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNn
MikpOwotICBFWFBFQ1RfRVEoImlnbm9yZWQ6IGl0ZW1bMF0ucmFcbiIsIG91dHB1dCk7Ci19Ci0K
LVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgUmVwZWF0ZWRGaWVsZFNldFRlc3RfU3Vic2V0
KSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMTsKLSAgcHJvdG9i
dWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cyOwotCi0gIG1zZzEuYWRkX3J2KDMpOwot
ICBtc2cxLmFkZF9ydig4KTsKLSAgbXNnMS5hZGRfcnYoMik7Ci0gIG1zZzIuYWRkX3J2KDIpOwot
ICBtc2cyLmFkZF9ydigzKTsKLSAgbXNnMi5hZGRfcnYoNSk7Ci0gIG1zZzIuYWRkX3J2KDgpOwot
Ci0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJlbmNlcjsKLQotICAvLyBGYWlsIHdp
dGggb25seSBwYXJ0aWFsIHNjb3BlIHNldC4KLSAgZGlmZmVyZW5jZXIuc2V0X3Njb3BlKHV0aWw6
Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6UEFSVElBTCk7Ci0gIGRpZmZlcmVuY2VyLnNldF9yZXBlYXRl
ZF9maWVsZF9jb21wYXJpc29uKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6QVNfTElTVCk7Ci0g
IEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLQotICAvLyBG
YWlsIHdpdGggb25seSBzZXQtbGlrZSBjb21wYXJpc29uIHNldC4KLSAgZGlmZmVyZW5jZXIuc2V0
X3Njb3BlKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RlVMTCk7Ci0gIGRpZmZlcmVuY2VyLnNl
dF9yZXBlYXRlZF9maWVsZF9jb21wYXJpc29uKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6QVNf
U0VUKTsKLSAgRVhQRUNUX0ZBTFNFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikpOwot
Ci0gIC8vIFN1Y2NlZWQgd2l0aCBzY29wZSBhbmQgcmVwZWF0ZWQgZmllbGQgY29tcGFyaXNvbiBz
ZXQgcHJvcGVybHkuCi0gIGRpZmZlcmVuY2VyLnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVy
ZW5jZXI6OlBBUlRJQUwpOwotICBkaWZmZXJlbmNlci5zZXRfcmVwZWF0ZWRfZmllbGRfY29tcGFy
aXNvbih1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkFTX1NFVCk7Ci0gIEVYUEVDVF9UUlVFKGRp
ZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwgbXNnMikpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJl
bmNlclRlc3QsIElnbm9yZUZpZWxkX1NpbmdsZSkgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVz
dEZpZWxkIG1zZzE7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RmllbGQgbXNnMjsKLQotICBt
c2cxLnNldF9jKDMpOwotICBtc2cxLmFkZF9yYygxKTsKLQotICBtc2cyLnNldF9jKDUpOwotICBt
c2cyLmFkZF9yYygxKTsKLQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7
Ci0gIGRpZmZlcmVuY2VyLklnbm9yZUZpZWxkKEdldEZpZWxkRGVzY3JpcHRvcihtc2cxLCAiYyIp
KTsKLQotICBFeHBlY3RFcXVhbHNXaXRoRGlmZmVyZW5jZXIoJmRpZmZlcmVuY2VyLCBtc2cxLCBt
c2cyKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBJZ25vcmVGaWVsZF9SZXBl
YXRlZCkgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEZpZWxkIG1zZzE7Ci0gIHByb3RvYnVm
X3VuaXR0ZXN0OjpUZXN0RmllbGQgbXNnMjsKLQotICBtc2cxLnNldF9jKDMpOwotICBtc2cxLmFk
ZF9yYygxKTsKLSAgbXNnMS5hZGRfcmMoMik7Ci0KLSAgbXNnMi5zZXRfYygzKTsKLSAgbXNnMi5h
ZGRfcmMoMSk7Ci0gIG1zZzIuYWRkX3JjKDMpOwotCi0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNl
ciBkaWZmZXJlbmNlcjsKLSAgZGlmZmVyZW5jZXIuSWdub3JlRmllbGQoR2V0RmllbGREZXNjcmlw
dG9yKG1zZzEsICJyYyIpKTsKLQotICBFeHBlY3RFcXVhbHNXaXRoRGlmZmVyZW5jZXIoJmRpZmZl
cmVuY2VyLCBtc2cxLCBtc2cyKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBJ
Z25vcmVGaWVsZF9NZXNzYWdlKSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3Nh
Z2UgbXNnMTsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cyOwotCi0g
IHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RmllbGQqIGZpZWxkOwotCi0gIGZpZWxkID0gbXNnMS5h
ZGRfcm0oKTsKLSAgZmllbGQtPnNldF9jKDMpOwotCi0gIGZpZWxkID0gbXNnMi5hZGRfcm0oKTsK
LSAgZmllbGQtPnNldF9jKDQpOwotCi0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJl
bmNlcjsKLSAgZGlmZmVyZW5jZXIuSWdub3JlRmllbGQoR2V0RmllbGREZXNjcmlwdG9yKG1zZzEs
ICJybSIpKTsKLQotICBFeHBlY3RFcXVhbHNXaXRoRGlmZmVyZW5jZXIoJmRpZmZlcmVuY2VyLCBt
c2cxLCBtc2cyKTsKLX0KLQotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBJZ25vcmVGaWVs
ZF9Hcm91cCkgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIG1zZzE7Ci0g
IHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMjsKLQotICBwcm90b2J1Zl91
bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlOjpJdGVtKiBpdGVtOwotCi0gIGl0ZW0gPSBtc2cxLmFk
ZF9pdGVtKCk7Ci0gIGl0ZW0tPnNldF9hKDMpOwotCi0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7
Ci0gIGl0ZW0tPnNldF9hKDQpOwotCi0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJl
bmNlcjsKLSAgZGlmZmVyZW5jZXIuSWdub3JlRmllbGQoR2V0RmllbGREZXNjcmlwdG9yKG1zZzEs
ICJpdGVtIikpOwotCi0gIEV4cGVjdEVxdWFsc1dpdGhEaWZmZXJlbmNlcigmZGlmZmVyZW5jZXIs
IG1zZzEsIG1zZzIpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIElnbm9yZUZp
ZWxkX01pc3NpbmcpIHsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RGaWVsZCBtc2cxOwotICBw
cm90b2J1Zl91bml0dGVzdDo6VGVzdEZpZWxkIG1zZzI7Ci0KLSAgbXNnMS5zZXRfYygzKTsKLSAg
bXNnMS5hZGRfcmMoMSk7Ci0KLSAgbXNnMi5hZGRfcmMoMSk7Ci0KLSAgdXRpbDo6TWVzc2FnZURp
ZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNlci5JZ25vcmVGaWVsZChHZXRGaWVs
ZERlc2NyaXB0b3IobXNnMSwgImMiKSk7Ci0KLSAgRXhwZWN0RXF1YWxzV2l0aERpZmZlcmVuY2Vy
KCZkaWZmZXJlbmNlciwgbXNnMSwgbXNnMik7Ci0gIEV4cGVjdEVxdWFsc1dpdGhEaWZmZXJlbmNl
cigmZGlmZmVyZW5jZXIsIG1zZzIsIG1zZzEpOwotfQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNl
clRlc3QsIElnbm9yZUZpZWxkX011bHRpcGxlKSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0
RmllbGQgbXNnMTsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RGaWVsZCBtc2cyOwotCi0gIG1z
ZzEuc2V0X2MoMyk7Ci0gIG1zZzEuYWRkX3JjKDEpOwotICBtc2cxLmFkZF9yYygyKTsKLQotICBt
c2cyLnNldF9jKDUpOwotICBtc2cyLmFkZF9yYygxKTsKLSAgbXNnMi5hZGRfcmMoMyk7Ci0KLSAg
Y29uc3QgRmllbGREZXNjcmlwdG9yKiBjID0gR2V0RmllbGREZXNjcmlwdG9yKG1zZzEsICJjIik7
Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogcmMgPSBHZXRGaWVsZERlc2NyaXB0b3IobXNnMSwg
InJjIik7Ci0KLSAgeyAvLyBJZ25vcmUgYwotICAgIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBk
aWZmZXJlbmNlcjsKLSAgICBkaWZmZXJlbmNlci5JZ25vcmVGaWVsZChjKTsKLQotICAgIEVYUEVD
VF9GQUxTRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLSAgfQotICB7IC8vIEln
bm9yZSByYwotICAgIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJlbmNlcjsKLSAgICBk
aWZmZXJlbmNlci5JZ25vcmVGaWVsZChyYyk7Ci0KLSAgICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5j
ZXIuQ29tcGFyZShtc2cxLCBtc2cyKSk7Ci0gIH0KLSAgeyAvLyBJZ25vcmUgYm90aAotICAgIHV0
aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJlbmNlcjsKLSAgICBkaWZmZXJlbmNlci5JZ25v
cmVGaWVsZChjKTsKLSAgICBkaWZmZXJlbmNlci5JZ25vcmVGaWVsZChyYyk7Ci0KLSAgICBFeHBl
Y3RFcXVhbHNXaXRoRGlmZmVyZW5jZXIoJmRpZmZlcmVuY2VyLCBtc2cxLCBtc2cyKTsKLSAgfQot
fQotCi1URVNUKE1lc3NhZ2VEaWZmZXJlbmNlclRlc3QsIElnbm9yZUZpZWxkX05lc3RlZE1lc3Nh
Z2UpIHsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cxOwotICBwcm90
b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIG1zZzI7Ci0KLSAgcHJvdG9idWZfdW5pdHRl
c3Q6OlRlc3RGaWVsZCogZmllbGQ7Ci0KLSAgZmllbGQgPSBtc2cxLmFkZF9ybSgpOwotICBmaWVs
ZC0+c2V0X2MoMyk7Ci0gIGZpZWxkLT5hZGRfcmMoMSk7Ci0KLSAgZmllbGQgPSBtc2cyLmFkZF9y
bSgpOwotICBmaWVsZC0+c2V0X2MoNCk7Ci0gIGZpZWxkLT5hZGRfcmMoMSk7Ci0KLSAgdXRpbDo6
TWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNlci5JZ25vcmVGaWVs
ZChHZXRGaWVsZERlc2NyaXB0b3IobXNnMSwgInJtLmMiKSk7Ci0KLSAgRXhwZWN0RXF1YWxzV2l0
aERpZmZlcmVuY2VyKCZkaWZmZXJlbmNlciwgbXNnMSwgbXNnMik7Ci19Ci0KLVRFU1QoTWVzc2Fn
ZURpZmZlcmVuY2VyVGVzdCwgSWdub3JlRmllbGRfTmVzdGVkR3JvdXApIHsKLSAgcHJvdG9idWZf
dW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cxOwotICBwcm90b2J1Zl91bml0dGVzdDo6VGVz
dERpZmZNZXNzYWdlIG1zZzI7Ci0KLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2Fn
ZTo6SXRlbSogaXRlbTsKLQotICBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRf
YSgzKTsKLSAgaXRlbS0+c2V0X2IoImZvbyIpOwotCi0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7
Ci0gIGl0ZW0tPnNldF9hKDQpOwotICBpdGVtLT5zZXRfYigiZm9vIik7Ci0KLSAgdXRpbDo6TWVz
c2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNlci5JZ25vcmVGaWVsZChH
ZXRGaWVsZERlc2NyaXB0b3IobXNnMSwgIml0ZW0uYSIpKTsKLQotICBFeHBlY3RFcXVhbHNXaXRo
RGlmZmVyZW5jZXIoJmRpZmZlcmVuY2VyLCBtc2cxLCBtc2cyKTsKLX0KLQotVEVTVChNZXNzYWdl
RGlmZmVyZW5jZXJUZXN0LCBJZ25vcmVGaWVsZF9JbnNpZGVTZXQpIHsKLSAgcHJvdG9idWZfdW5p
dHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cxOwotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERp
ZmZNZXNzYWdlIG1zZzI7Ci0KLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZTo6
SXRlbSogaXRlbTsKLQotICBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSgx
KTsKLSAgaXRlbS0+c2V0X2IoImZvbyIpOwotICBpdGVtLT5hZGRfcmEoMSk7Ci0KLSAgaXRlbSA9
IG1zZzEuYWRkX2l0ZW0oKTsKLSAgaXRlbS0+c2V0X2EoMik7Ci0gIGl0ZW0tPnNldF9iKCJiYXIi
KTsKLSAgaXRlbS0+YWRkX3JhKDIpOwotCi0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7Ci0gIGl0
ZW0tPnNldF9hKDIpOwotICBpdGVtLT5zZXRfYigiYmFyIik7Ci0gIGl0ZW0tPmFkZF9yYSgyKTsK
LQotICBpdGVtID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSgxKTsKLSAgaXRlbS0+
c2V0X2IoImJheiIpOwotICBpdGVtLT5hZGRfcmEoMSk7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBpdGVtX2Rlc2MgPSBHZXRGaWVsZERlc2NyaXB0b3IobXNnMSwgIml0ZW0iKTsKLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBiID0gR2V0RmllbGREZXNjcmlwdG9yKG1zZzEsICJpdGVtLmIi
KTsKLQotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVu
Y2VyLklnbm9yZUZpZWxkKGIpOwotICBkaWZmZXJlbmNlci5UcmVhdEFzU2V0KGl0ZW1fZGVzYyk7
Ci0KLSAgRXhwZWN0RXF1YWxzV2l0aERpZmZlcmVuY2VyKCZkaWZmZXJlbmNlciwgbXNnMSwgbXNn
Mik7Ci19Ci0KLVRFU1QoTWVzc2FnZURpZmZlcmVuY2VyVGVzdCwgSWdub3JlRmllbGRfSW5zaWRl
TWFwKSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMTsKLSAgcHJv
dG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cyOwotCi0gIHByb3RvYnVmX3VuaXR0
ZXN0OjpUZXN0RGlmZk1lc3NhZ2U6Okl0ZW0qIGl0ZW07Ci0KLSAgaXRlbSA9IG1zZzEuYWRkX2l0
ZW0oKTsKLSAgaXRlbS0+c2V0X2EoMSk7Ci0gIGl0ZW0tPnNldF9iKCJmb28iKTsKLSAgaXRlbS0+
YWRkX3JhKDEpOwotCi0gIGl0ZW0gPSBtc2cxLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPnNldF9hKDIp
OwotICBpdGVtLT5zZXRfYigiYmFyIik7Ci0gIGl0ZW0tPmFkZF9yYSgyKTsKLQotICBpdGVtID0g
bXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSgyKTsKLSAgaXRlbS0+c2V0X2IoImJhciIp
OwotICBpdGVtLT5hZGRfcmEoMik7Ci0KLSAgaXRlbSA9IG1zZzIuYWRkX2l0ZW0oKTsKLSAgaXRl
bS0+c2V0X2EoMSk7Ci0gIGl0ZW0tPnNldF9iKCJiYXoiKTsKLSAgaXRlbS0+YWRkX3JhKDEpOwot
Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogaXRlbV9kZXNjID0gR2V0RmllbGREZXNjcmlwdG9y
KG1zZzEsICJpdGVtIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogYSA9IEdldEZpZWxkRGVz
Y3JpcHRvcihtc2cxLCAiaXRlbS5hIik7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogYiA9IEdl
dEZpZWxkRGVzY3JpcHRvcihtc2cxLCAiaXRlbS5iIik7Ci0KLSAgdXRpbDo6TWVzc2FnZURpZmZl
cmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNlci5JZ25vcmVGaWVsZChiKTsKLSAgZGlm
ZmVyZW5jZXIuVHJlYXRBc01hcChpdGVtX2Rlc2MsIGEpOwotCi0gIEV4cGVjdEVxdWFsc1dpdGhE
aWZmZXJlbmNlcigmZGlmZmVyZW5jZXIsIG1zZzEsIG1zZzIpOwotfQotCi1URVNUKE1lc3NhZ2VE
aWZmZXJlbmNlclRlc3QsIElnbm9yZUZpZWxkX0RvZXNOb3RJZ25vcmVLZXkpIHsKLSAgcHJvdG9i
dWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cxOwotICBwcm90b2J1Zl91bml0dGVzdDo6
VGVzdERpZmZNZXNzYWdlIG1zZzI7Ci0KLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVz
c2FnZTo6SXRlbSogaXRlbTsKLQotICBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOwotICBpdGVtLT5z
ZXRfYSgxKTsKLSAgaXRlbS0+c2V0X2IoImZvbyIpOwotICBpdGVtLT5hZGRfcmEoMSk7Ci0KLSAg
aXRlbSA9IG1zZzIuYWRkX2l0ZW0oKTsKLSAgaXRlbS0+c2V0X2EoMik7Ci0gIGl0ZW0tPnNldF9i
KCJmb28iKTsKLSAgaXRlbS0+YWRkX3JhKDEpOwotCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
aXRlbV9kZXNjID0gR2V0RmllbGREZXNjcmlwdG9yKG1zZzEsICJpdGVtIik7Ci0gIGNvbnN0IEZp
ZWxkRGVzY3JpcHRvciogYSA9IEdldEZpZWxkRGVzY3JpcHRvcihtc2cxLCAiaXRlbS5hIik7Ci0K
LSAgdXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNlci5J
Z25vcmVGaWVsZChhKTsKLSAgZGlmZmVyZW5jZXIuVHJlYXRBc01hcChpdGVtX2Rlc2MsIGEpOwot
Ci0gIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLX0KLQot
VEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBJZ25vcmVGaWVsZF9UcnVtcHNDb21wYXJlV2l0
aEZpZWxkcykgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdEZpZWxkIG1zZzE7Ci0gIHByb3Rv
YnVmX3VuaXR0ZXN0OjpUZXN0RmllbGQgbXNnMjsKLQotICBtc2cxLnNldF9jKDMpOwotICBtc2cx
LmFkZF9yYygxKTsKLSAgbXNnMS5hZGRfcmMoMik7Ci0KLSAgbXNnMi5zZXRfYygzKTsKLSAgbXNn
Mi5hZGRfcmMoMSk7Ci0gIG1zZzIuYWRkX3JjKDMpOwotCi0gIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogYyA9IEdldEZpZWxkRGVzY3JpcHRvcihtc2cxLCAiYyIpOwotICBjb25zdCBGaWVsZERlc2Ny
aXB0b3IqIHJjID0gR2V0RmllbGREZXNjcmlwdG9yKG1zZzEsICJyYyIpOwotCi0gIHZlY3Rvcjxj
b25zdCBGaWVsZERlc2NyaXB0b3IqPiBmaWVsZHM7Ci0gIGZpZWxkcy5wdXNoX2JhY2soYyk7Ci0g
IGZpZWxkcy5wdXNoX2JhY2socmMpOwotCi0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBkaWZm
ZXJlbmNlcjsKLSAgZGlmZmVyZW5jZXIuSWdub3JlRmllbGQocmMpOwotCi0gIGRpZmZlcmVuY2Vy
LnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6OkZVTEwpOwotICBFWFBFQ1RfVFJV
RShkaWZmZXJlbmNlci5Db21wYXJlV2l0aEZpZWxkcyhtc2cxLCBtc2cyLCBmaWVsZHMsIGZpZWxk
cykpOwotCi0gIGRpZmZlcmVuY2VyLnNldF9zY29wZSh1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXI6
OlBBUlRJQUwpOwotICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci5Db21wYXJlV2l0aEZpZWxkcyht
c2cxLCBtc2cyLCBmaWVsZHMsIGZpZWxkcykpOwotfQotCi0KLS8vIFRlc3QgY2xhc3MgdG8gc2F2
ZSBhIGNvcHkgb2YgdGhlIGxhc3QgZmllbGRfY29udGV4dC5wYXJlbnRfZmllbGRzKCkgdmVjdG9y
Ci0vLyBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24uCi1jbGFzcyBQYXJlbnRTYXZp
bmdGaWVsZENvbXBhcmF0b3IgOiBwdWJsaWMgdXRpbDo6RmllbGRDb21wYXJhdG9yIHsKLSBwdWJs
aWM6Ci0gIFBhcmVudFNhdmluZ0ZpZWxkQ29tcGFyYXRvcigpIHt9Ci0KLSAgdmlydHVhbCBDb21w
YXJpc29uUmVzdWx0IENvbXBhcmUoCi0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlJiBtZXNzYWdlXzEsCi0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBt
ZXNzYWdlXzIsCi0gICAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3Iq
IGZpZWxkLAotICAgICAgaW50IGluZGV4XzEsIGludCBpbmRleF8yLAotICAgICAgY29uc3QgZ29v
Z2xlOjpwcm90b2J1Zjo6dXRpbDo6RmllbGRDb250ZXh0KiBmaWVsZF9jb250ZXh0KSB7Ci0gICAg
aWYgKGZpZWxkX2NvbnRleHQpCi0gICAgICBwYXJlbnRfZmllbGRzXyA9ICooZmllbGRfY29udGV4
dC0+cGFyZW50X2ZpZWxkcygpKTsKLSAgICBpZiAoZmllbGQtPmNwcF90eXBlKCkgPT0gRmllbGRE
ZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UpIHsKLSAgICAgIHJldHVybiBSRUNVUlNFOwotICAg
IH0gZWxzZSB7Ci0gICAgICByZXR1cm4gU0FNRTsKLSAgICB9Ci0gIH0KLQotICB2ZWN0b3I8Z29v
Z2xlOjpwcm90b2J1Zjo6dXRpbDo6TWVzc2FnZURpZmZlcmVuY2VyOjpTcGVjaWZpY0ZpZWxkPiBw
YXJlbnRfZmllbGRzKCkgewotICAgIHJldHVybiBwYXJlbnRfZmllbGRzXzsKLSAgfQotCi0gcHJp
dmF0ZToKLSAgdmVjdG9yPGdvb2dsZTo6cHJvdG9idWY6OnV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNl
cjo6U3BlY2lmaWNGaWVsZD4gcGFyZW50X2ZpZWxkc187Ci19OwotCi0vLyBUZXN0cyBpZiBNZXNz
YWdlRGlmZmVyZW5jZXIgc2VuZHMgdGhlIHBhcmVudCBmaWVsZHMgaW4gdGhlIEZpZWxkQ29udGV4
dAotLy8gcGFyYW1ldGVyLgotVEVTVChNZXNzYWdlRGlmZmVyZW5jZXJUZXN0LCBGaWVsZENvbnRl
eHRQYXJlbnRGaWVsZHNUZXN0KSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3Nh
Z2UgbXNnMTsKLSAgbXNnMS5hZGRfcm0oKS0+c2V0X2MoMSk7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0
OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMjsKLSAgbXNnMi5hZGRfcm0oKS0+c2V0X2MoMSk7Ci0KLSAg
UGFyZW50U2F2aW5nRmllbGRDb21wYXJhdG9yIGZpZWxkX2NvbXBhcmF0b3I7Ci0gIHV0aWw6Ok1l
c3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJlbmNlcjsKLSAgZGlmZmVyZW5jZXIuc2V0X2ZpZWxkX2Nv
bXBhcmF0b3IoJmZpZWxkX2NvbXBhcmF0b3IpOwotICBkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEs
IG1zZzIpOwotCi0gIC8vIFdlIHdhbnQgb25seSBvbmUgcGFyZW50IHdpdGggdGhlIG5hbWUgInJt
IgotICBBU1NFUlRfRVEoMSwgZmllbGRfY29tcGFyYXRvci5wYXJlbnRfZmllbGRzKCkuc2l6ZSgp
KTsKLSAgRVhQRUNUX0VRKCJybSIsIGZpZWxkX2NvbXBhcmF0b3IucGFyZW50X2ZpZWxkcygpWzBd
LmZpZWxkLT5uYW1lKCkpOwotfQotCi0KLWNsYXNzIENvbXBhcmlzb25UZXN0IDogcHVibGljIHRl
c3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgQ29tcGFyaXNvblRlc3QoKSA6IHVzZV9lcXVp
dmFsZW5jeV8oZmFsc2UpLCByZXBlYXRlZF9maWVsZF9hc19zZXRfKGZhbHNlKSB7Ci0gICAgLy8g
U2V0dXAgdGhlIHRlc3QuCi0gICAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmcHJvdG8xXyk7Ci0g
ICAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmcHJvdG8yXyk7Ci0KLSAgICBUZXN0VXRpbDo6U2V0
QWxsRXh0ZW5zaW9ucygmcHJvdG8xZXhfKTsKLSAgICBUZXN0VXRpbDo6U2V0QWxsRXh0ZW5zaW9u
cygmcHJvdG8yZXhfKTsKLQotICAgIFRlc3RVdGlsOjpTZXRBbGxGaWVsZHNBbmRFeHRlbnNpb25z
KCZvcmRlcmluZ3NfcHJvdG8xXyk7Ci0gICAgVGVzdFV0aWw6OlNldEFsbEZpZWxkc0FuZEV4dGVu
c2lvbnMoJm9yZGVyaW5nc19wcm90bzJfKTsKLQotICAgIHVua25vd24xXyA9IGVtcHR5MV8ubXV0
YWJsZV91bmtub3duX2ZpZWxkcygpOwotICAgIHVua25vd24yXyA9IGVtcHR5Ml8ubXV0YWJsZV91
bmtub3duX2ZpZWxkcygpOwotICB9Ci0KLSAgfkNvbXBhcmlzb25UZXN0KCkgeyB9Ci0KLSAgdm9p
ZCBTZXRTcGVjaWFsRmllbGRPcHRpb24oY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciogZCkgewotICAg
IGlmICghaWdub3JlZF9maWVsZF8uZW1wdHkoKSkgewotICAgICAgZC0+SWdub3JlRmllbGQoR2V0
RmllbGREZXNjcmlwdG9yKG1lc3NhZ2UsIGlnbm9yZWRfZmllbGRfKSk7Ci0gICAgfQotCi0gICAg
aWYgKHJlcGVhdGVkX2ZpZWxkX2FzX3NldF8pIHsKLSAgICAgIGQtPnNldF9yZXBlYXRlZF9maWVs
ZF9jb21wYXJpc29uKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6QVNfU0VUKTsKLSAgICB9Ci0K
LSAgICBpZiAoIXNldF9maWVsZF8uZW1wdHkoKSkgewotICAgICAgZC0+VHJlYXRBc1NldChHZXRG
aWVsZERlc2NyaXB0b3IobWVzc2FnZSwgc2V0X2ZpZWxkXykpOwotICAgIH0KLQotICAgIGlmICgh
bWFwX2ZpZWxkXy5lbXB0eSgpICYmICFtYXBfa2V5Xy5lbXB0eSgpKSB7Ci0gICAgICBkLT5UcmVh
dEFzTWFwKEdldEZpZWxkRGVzY3JpcHRvcihtZXNzYWdlLCBtYXBfZmllbGRfKSwKLSAgICAgICAg
ICAgICAgICAgICAgR2V0RmllbGREZXNjcmlwdG9yKG1lc3NhZ2UsIG1hcF9maWVsZF8gKyAiLiIg
KyBtYXBfa2V5XykpOwotICAgIH0KLSAgfQotCi0gIHN0cmluZyBSdW4oY29uc3QgTWVzc2FnZSYg
bXNnMSwgY29uc3QgTWVzc2FnZSYgbXNnMikgewotICAgIHN0cmluZyBvdXRwdXQ7Ci0KLSAgICAv
LyBTZXR1cCB0aGUgY29tcGFyaXNvbi4KLSAgICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgZGlm
ZmVyZW5jZXI7Ci0gICAgZGlmZmVyZW5jZXIuUmVwb3J0RGlmZmVyZW5jZXNUb1N0cmluZygmb3V0
cHV0KTsKLQotICAgIGlmICh1c2VfZXF1aXZhbGVuY3lfKSB7Ci0gICAgICBkaWZmZXJlbmNlci5z
ZXRfbWVzc2FnZV9maWVsZF9jb21wYXJpc29uKAotICAgICAgICAgIHV0aWw6Ok1lc3NhZ2VEaWZm
ZXJlbmNlcjo6RVFVSVZBTEVOVCk7Ci0gICAgfQotCi0gICAgU2V0U3BlY2lhbEZpZWxkT3B0aW9u
KG1zZzEsICZkaWZmZXJlbmNlcik7Ci0KLSAgICAvLyBDb25kdWN0IHRoZSBjb21wYXJpc29uLgot
ICAgIEVYUEVDVF9GQUxTRShkaWZmZXJlbmNlci5Db21wYXJlKG1zZzEsIG1zZzIpKTsKLQotICAg
IHJldHVybiBvdXRwdXQ7Ci0gIH0KLQotICBzdHJpbmcgUnVuKCkgewotICAgIHJldHVybiBSdW4o
cHJvdG8xXywgcHJvdG8yXyk7Ci0gIH0KLQotICBzdHJpbmcgUnVuT3JkZXIoKSB7Ci0gICAgcmV0
dXJuIFJ1bihvcmRlcmluZ3NfcHJvdG8xXywgb3JkZXJpbmdzX3Byb3RvMl8pOwotICB9Ci0KLSAg
c3RyaW5nIFJ1bkV4KCkgewotICAgIHJldHVybiBSdW4ocHJvdG8xZXhfLCBwcm90bzJleF8pOwot
ICB9Ci0KLSAgc3RyaW5nIFJ1bkRpZmYoKSB7Ci0gICAgcmV0dXJuIFJ1bihwcm90bzFkaWZmXywg
cHJvdG8yZGlmZl8pOwotICB9Ci0KLSAgc3RyaW5nIFJ1blVuKCkgewotICAgIHJldHVybiBSdW4o
ZW1wdHkxXywgZW1wdHkyXyk7Ci0gIH0KLQotICB2b2lkIHVzZV9lcXVpdmFsZW5jeSgpIHsKLSAg
ICB1c2VfZXF1aXZhbGVuY3lfID0gdHJ1ZTsKLSAgfQotCi0gIHZvaWQgcmVwZWF0ZWRfZmllbGRf
YXNfc2V0KCkgewotICAgIHJlcGVhdGVkX2ZpZWxkX2FzX3NldF8gPSB0cnVlOwotICB9Ci0KLSAg
dm9pZCBmaWVsZF9hc19zZXQoY29uc3Qgc3RyaW5nJiBmaWVsZCkgewotICAgIHNldF9maWVsZF8g
PSBmaWVsZDsKLSAgfQotCi0gIHZvaWQgZmllbGRfYXNfbWFwKGNvbnN0IHN0cmluZyYgZmllbGQs
IGNvbnN0IHN0cmluZyYga2V5KSB7Ci0gICAgbWFwX2ZpZWxkXyA9IGZpZWxkOwotICAgIG1hcF9r
ZXlfICAgPSBrZXk7Ci0gIH0KLQotICB2b2lkIGlnbm9yZV9maWVsZChjb25zdCBzdHJpbmcmIGZp
ZWxkKSB7Ci0gICAgaWdub3JlZF9maWVsZF8gPSBmaWVsZDsKLSAgfQotCi0gIHVuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXMgcHJvdG8xXzsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBwcm90bzJfOwot
Ci0gIHVuaXR0ZXN0OjpUZXN0RmllbGRPcmRlcmluZ3Mgb3JkZXJpbmdzX3Byb3RvMV87Ci0gIHVu
aXR0ZXN0OjpUZXN0RmllbGRPcmRlcmluZ3Mgb3JkZXJpbmdzX3Byb3RvMl87Ci0KLSAgdW5pdHRl
c3Q6OlRlc3RBbGxFeHRlbnNpb25zIHByb3RvMWV4XzsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRl
bnNpb25zIHByb3RvMmV4XzsKLQotICB1bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIHByb3RvMWRp
ZmZfOwotICB1bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIHByb3RvMmRpZmZfOwotCi0gIHVuaXR0
ZXN0OjpUZXN0RW1wdHlNZXNzYWdlIGVtcHR5MV87Ci0gIHVuaXR0ZXN0OjpUZXN0RW1wdHlNZXNz
YWdlIGVtcHR5Ml87Ci0KLSAgVW5rbm93bkZpZWxkU2V0KiB1bmtub3duMV87Ci0gIFVua25vd25G
aWVsZFNldCogdW5rbm93bjJfOwotCi0gIGJvb2wgdXNlX2VxdWl2YWxlbmN5XzsKLSAgYm9vbCBy
ZXBlYXRlZF9maWVsZF9hc19zZXRfOwotCi0gIHN0cmluZyBzZXRfZmllbGRfOwotICBzdHJpbmcg
bWFwX2ZpZWxkXzsKLSAgc3RyaW5nIG1hcF9rZXlfOwotICBzdHJpbmcgaWdub3JlZF9maWVsZF87
Ci19OwotCi0vLyBCYXNpYyB0ZXN0cy4KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgQWRkaXRpb25U
ZXN0KSB7Ci0gIHByb3RvMV8uY2xlYXJfb3B0aW9uYWxfaW50MzIoKTsKLQotICBFWFBFQ1RfRVEo
ImFkZGVkOiBvcHRpb25hbF9pbnQzMjogMTAxXG4iLAotICAgICAgICAgICAgUnVuKCkpOwotfQot
Ci1URVNUX0YoQ29tcGFyaXNvblRlc3QsIEFkZGl0aW9uX09yZGVyVGVzdCkgewotICBvcmRlcmlu
Z3NfcHJvdG8xXy5jbGVhcl9teV9pbnQoKTsKLQotICBFWFBFQ1RfRVEoImFkZGVkOiBteV9pbnQ6
IDFcbiIsCi0gICAgICAgICAgICBSdW5PcmRlcigpKTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25U
ZXN0LCBEZWxldGlvblRlc3QpIHsKLSAgcHJvdG8yXy5jbGVhcl9vcHRpb25hbF9pbnQzMigpOwot
Ci0gIEVYUEVDVF9FUSgiZGVsZXRlZDogb3B0aW9uYWxfaW50MzI6IDEwMVxuIiwKLSAgICAgICAg
ICAgIFJ1bigpKTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBEZWxldGlvbl9PcmRlclRl
c3QpIHsKLSAgb3JkZXJpbmdzX3Byb3RvMl8uY2xlYXJfbXlfc3RyaW5nKCk7Ci0KLSAgRVhQRUNU
X0VRKCJkZWxldGVkOiBteV9zdHJpbmc6IFwiZm9vXCJcbiIsCi0gICAgICAgICAgICBSdW5PcmRl
cigpKTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBSZXBlYXRlZERlbGV0aW9uVGVzdCkg
ewotICBwcm90bzJfLmNsZWFyX3JlcGVhdGVkX2ludDMyKCk7Ci0KLSAgRVhQRUNUX0VRKCJkZWxl
dGVkOiByZXBlYXRlZF9pbnQzMlswXTogMjAxXG4iCi0gICAgICAgICAgICAiZGVsZXRlZDogcmVw
ZWF0ZWRfaW50MzJbMV06IDMwMVxuIiwKLSAgICAgICAgICAgIFJ1bigpKTsKLX0KLQotVEVTVF9G
KENvbXBhcmlzb25UZXN0LCBNb2RpZmljYXRpb25UZXN0KSB7Ci0gIHByb3RvMV8uc2V0X29wdGlv
bmFsX2ludDMyKC0xKTsKLQotICBFWFBFQ1RfRVEoIm1vZGlmaWVkOiBvcHRpb25hbF9pbnQzMjog
LTEgLT4gMTAxXG4iLAotICAgICAgICAgICAgUnVuKCkpOwotfQotCi0vLyBCYXNpYyBlcXVpdmFs
ZW5jeSB0ZXN0cy4KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgRXF1aXZhbGVuY3lBZGRpdGlvblRl
c3QpIHsKLSAgdXNlX2VxdWl2YWxlbmN5KCk7Ci0KLSAgcHJvdG8xXy5jbGVhcl9vcHRpb25hbF9p
bnQzMigpOwotCi0gIEVYUEVDVF9FUSgibW9kaWZpZWQ6IG9wdGlvbmFsX2ludDMyOiAwIC0+IDEw
MVxuIiwKLSAgICAgICAgICAgIFJ1bigpKTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBF
cXVpdmFsZW5jeURlbGV0aW9uVGVzdCkgewotICB1c2VfZXF1aXZhbGVuY3koKTsKLQotICBwcm90
bzJfLmNsZWFyX29wdGlvbmFsX2ludDMyKCk7Ci0KLSAgRVhQRUNUX0VRKCJtb2RpZmllZDogb3B0
aW9uYWxfaW50MzI6IDEwMSAtPiAwXG4iLAotICAgICAgICAgICAgUnVuKCkpOwotfQotCi0vLyBH
cm91cCB0ZXN0cy4KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgR3JvdXBBZGRpdGlvblRlc3QpIHsK
LSAgcHJvdG8xXy5tdXRhYmxlX29wdGlvbmFsZ3JvdXAoKS0+Y2xlYXJfYSgpOwotCi0gIEVYUEVD
VF9FUSgiYWRkZWQ6IG9wdGlvbmFsZ3JvdXAuYTogMTE3XG4iLAotICAgICAgICAgICAgUnVuKCkp
OwotfQotCi1URVNUX0YoQ29tcGFyaXNvblRlc3QsIEdyb3VwRGVsZXRpb25UZXN0KSB7Ci0gIHBy
b3RvMl8ubXV0YWJsZV9vcHRpb25hbGdyb3VwKCktPmNsZWFyX2EoKTsKLQotICBFWFBFQ1RfRVEo
ImRlbGV0ZWQ6IG9wdGlvbmFsZ3JvdXAuYTogMTE3XG4iLAotICAgICAgICAgICAgUnVuKCkpOwot
fQotCi1URVNUX0YoQ29tcGFyaXNvblRlc3QsIEdyb3VwTW9kaWZpY2F0aW9uVGVzdCkgewotICBw
cm90bzFfLm11dGFibGVfb3B0aW9uYWxncm91cCgpLT5zZXRfYSgyKTsKLQotICBFWFBFQ1RfRVEo
Im1vZGlmaWVkOiBvcHRpb25hbGdyb3VwLmE6IDIgLT4gMTE3XG4iLAotICAgICAgICAgICAgUnVu
KCkpOwotfQotCi1URVNUX0YoQ29tcGFyaXNvblRlc3QsIEdyb3VwRnVsbEFkZGl0aW9uVGVzdCkg
ewotICBwcm90bzFfLmNsZWFyX29wdGlvbmFsZ3JvdXAoKTsKLQotICAvLyBOb3RlIHRoZSBkaWZm
ZXJlbmNlIGluIHRoZSBvdXRwdXQgYmV0d2VlbiB0aGlzIGFuZCBHcm91cEFkZGl0aW9uVGVzdC4K
LSAgRVhQRUNUX0VRKCJhZGRlZDogb3B0aW9uYWxncm91cDogeyBhOiAxMTcgfVxuIiwKLSAgICAg
ICAgICAgIFJ1bigpKTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBHcm91cEZ1bGxEZWxl
dGlvblRlc3QpIHsKLSAgcHJvdG8yXy5jbGVhcl9vcHRpb25hbGdyb3VwKCk7Ci0KLSAgRVhQRUNU
X0VRKCJkZWxldGVkOiBvcHRpb25hbGdyb3VwOiB7IGE6IDExNyB9XG4iLAotICAgICAgICAgICAg
UnVuKCkpOwotfQotCi1URVNUX0YoQ29tcGFyaXNvblRlc3QsIFJlcGVhdGVkU2V0T3B0aW9uVGVz
dCkgewotICByZXBlYXRlZF9maWVsZF9hc19zZXQoKTsKLQotICBwcm90bzJfLmNsZWFyX3JlcGVh
dGVkZ3JvdXAoKTsKLSAgcHJvdG8xXy5jbGVhcl9yZXBlYXRlZGdyb3VwKCk7Ci0gIHByb3RvMV8u
YWRkX3JlcGVhdGVkZ3JvdXAoKS0+c2V0X2EoMzE3KTsKLSAgcHJvdG8yXy5hZGRfcmVwZWF0ZWRn
cm91cCgpLT5zZXRfYSg5MDkpOwotICBwcm90bzJfLmFkZF9yZXBlYXRlZGdyb3VwKCktPnNldF9h
KDkwNyk7Ci0gIHByb3RvMV8uYWRkX3JlcGVhdGVkZ3JvdXAoKS0+c2V0X2EoOTA0KTsKLSAgcHJv
dG8xXy5hZGRfcmVwZWF0ZWRncm91cCgpLT5zZXRfYSg5MDcpOwotICBwcm90bzFfLmFkZF9yZXBl
YXRlZGdyb3VwKCktPnNldF9hKDkwOSk7Ci0KLSAgRVhQRUNUX0VRKCJtb3ZlZDogcmVwZWF0ZWRn
cm91cFsyXSAtPiByZXBlYXRlZGdyb3VwWzFdIDogeyBhOiA5MDcgfVxuIgotICAgICAgICAgICAg
Im1vdmVkOiByZXBlYXRlZGdyb3VwWzNdIC0+IHJlcGVhdGVkZ3JvdXBbMF0gOiB7IGE6IDkwOSB9
XG4iCi0gICAgICAgICAgICAiZGVsZXRlZDogcmVwZWF0ZWRncm91cFswXTogeyBhOiAzMTcgfVxu
IgotICAgICAgICAgICAgImRlbGV0ZWQ6IHJlcGVhdGVkZ3JvdXBbMV06IHsgYTogOTA0IH1cbiIs
Ci0gICAgICAgICAgICBSdW4oKSk7Ci19Ci0KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgUmVwZWF0
ZWRTZXRPcHRpb25UZXN0X0V4KSB7Ci0gIHJlcGVhdGVkX2ZpZWxkX2FzX3NldCgpOwotCi0gIHBy
b3RvMWV4Xy5DbGVhckV4dGVuc2lvbihwcm90b2J1Zl91bml0dGVzdDo6cmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2VfZXh0ZW5zaW9uKTsKLSAgcHJvdG8yZXhfLkNsZWFyRXh0ZW5zaW9uKHByb3RvYnVm
X3VuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pOwotICBwcm90bzJl
eF8uQWRkRXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZV9leHRlbnNpb24pCi0gICAgICAtPnNldF9iYig5MDkpOwotICBwcm90bzJleF8uQWRkRXh0ZW5z
aW9uKHByb3RvYnVmX3VuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24p
Ci0gICAgICAtPnNldF9iYig5MDcpOwotICBwcm90bzFleF8uQWRkRXh0ZW5zaW9uKHByb3RvYnVm
X3VuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pCi0gICAgICAtPnNl
dF9iYig5MDQpOwotICBwcm90bzFleF8uQWRkRXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0Ojpy
ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pCi0gICAgICAtPnNldF9iYig5MDcpOwot
ICBwcm90bzFleF8uQWRkRXh0ZW5zaW9uKHByb3RvYnVmX3VuaXR0ZXN0OjpyZXBlYXRlZF9uZXN0
ZWRfbWVzc2FnZV9leHRlbnNpb24pCi0gICAgICAtPnNldF9iYig5MDkpOwotCi0gIEVYUEVDVF9F
USgibW92ZWQ6IChwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRl
bnNpb24pWzJdIC0+IgotICAgICAgICAgICAgIiAocHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRf
bmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uKVswXSA6IgotICAgICAgICAgICAgIiB7IGJiOiA5MDkg
fVxuIgotICAgICAgICAgICAgImRlbGV0ZWQ6IChwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9u
ZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pWzBdOiIKLSAgICAgICAgICAgICIgeyBiYjogOTA0IH1c
biIsCi0gICAgICAgICAgICBSdW5FeCgpKTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBS
ZXBlYXRlZE1hcEZpZWxkVGVzdF9Hcm91cCkgewotICBmaWVsZF9hc19tYXAoInJlcGVhdGVkZ3Jv
dXAiLCAiYSIpOwotICBwcm90bzFfLmNsZWFyX3JlcGVhdGVkZ3JvdXAoKTsKLSAgcHJvdG8yXy5j
bGVhcl9yZXBlYXRlZGdyb3VwKCk7Ci0KLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRncm91cCgpLT5z
ZXRfYSgzMTcpOyAgLy8gZGVsZXRlZAotICBwcm90bzFfLmFkZF9yZXBlYXRlZGdyb3VwKCktPnNl
dF9hKDkwNCk7ICAvLyBkZWxldGVkCi0gIHByb3RvMV8uYWRkX3JlcGVhdGVkZ3JvdXAoKS0+c2V0
X2EoOTA3KTsgIC8vIG1vdmVkIGZyb20KLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRncm91cCgpLT5z
ZXRfYSg5MDkpOyAgLy8gbW92ZWQgZnJvbQotCi0gIHByb3RvMl8uYWRkX3JlcGVhdGVkZ3JvdXAo
KS0+c2V0X2EoOTA5KTsgIC8vIG1vdmVkIHRvCi0gIHByb3RvMl8uYWRkX3JlcGVhdGVkZ3JvdXAo
KS0+c2V0X2EoMzE4KTsgIC8vIGFkZGVkCi0gIHByb3RvMl8uYWRkX3JlcGVhdGVkZ3JvdXAoKS0+
c2V0X2EoOTA3KTsgIC8vIG1vdmVkIHRvCi0KLSAgRVhQRUNUX0VRKCJtb3ZlZDogcmVwZWF0ZWRn
cm91cFszXSAtPiByZXBlYXRlZGdyb3VwWzBdIDogeyBhOiA5MDkgfVxuIgotICAgICAgICAgICAg
ImFkZGVkOiByZXBlYXRlZGdyb3VwWzFdOiB7IGE6IDMxOCB9XG4iCi0gICAgICAgICAgICAiZGVs
ZXRlZDogcmVwZWF0ZWRncm91cFswXTogeyBhOiAzMTcgfVxuIgotICAgICAgICAgICAgImRlbGV0
ZWQ6IHJlcGVhdGVkZ3JvdXBbMV06IHsgYTogOTA0IH1cbiIsCi0gICAgICAgICAgICBSdW4oKSk7
Ci19Ci0KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgUmVwZWF0ZWRNYXBGaWVsZFRlc3RfTWVzc2Fn
ZUtleSkgewotICAvLyBVc2UgbSBhcyBrZXksIGJ1dCB1c2UgYiBhcyB2YWx1ZS4KLSAgZmllbGRf
YXNfbWFwKCJpdGVtIiwgIm0iKTsKLQotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNz
YWdlIG1zZzE7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMjsKLSAg
cHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZTo6SXRlbSogaXRlbSA9IG1zZzEuYWRk
X2l0ZW0oKTsKLQotICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgY3JlYXRlcyBvbmUgZGVsZXRpb24s
IG9uZSBhZGRpdGlvbiBhbmQgdHdvIG1vdmVkIGZpZWxkcwotICAvLyBvbiB0aGUgbWVzc2FnZXMu
Ci0gIGl0ZW0tPm11dGFibGVfbSgpLT5zZXRfYygwKTsKLSAgaXRlbS0+c2V0X2IoImZpcnN0Iik7
Ci0gIGl0ZW0gPSBtc2cxLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPm11dGFibGVfbSgpLT5zZXRfYygy
KTsKLSAgaXRlbS0+c2V0X2IoInNlY29uZCIpOwotICBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOyBp
dGVtLT5zZXRfYigibnVsbCIpOyAgLy8gZW1wdHkga2V5IG1vdmVkCi0gIGl0ZW0gPSBtc2cxLmFk
ZF9pdGVtKCk7Ci0gIGl0ZW0tPm11dGFibGVfbSgpLT5zZXRfYygzKTsKLSAgaXRlbS0+c2V0X2Io
InRoaXJkIik7ICAgLy8gZGVsZXRpb24KLSAgaXRlbSA9IG1zZzEuYWRkX2l0ZW0oKTsKLSAgaXRl
bS0+bXV0YWJsZV9tKCktPnNldF9jKDIpOwotICBpdGVtLT5zZXRfYigic2Vjb25kIik7ICAvLyBk
dXBsaWNhdGVkIGtleSAoIGRlbGV0aW9uICkKLSAgaXRlbSA9IG1zZzIuYWRkX2l0ZW0oKTsKLSAg
aXRlbS0+bXV0YWJsZV9tKCktPnNldF9jKDIpOwotICBpdGVtLT5zZXRfYigic2Vjb25kIik7ICAv
LyBtb2RpZmljYXRpb24KLSAgaXRlbSA9IG1zZzIuYWRkX2l0ZW0oKTsKLSAgaXRlbS0+bXV0YWJs
ZV9tKCktPnNldF9jKDQpOwotICBpdGVtLT5zZXRfYigiZm91cnRoIik7ICAvLyBhZGRpdGlvbgot
ICBpdGVtID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5tdXRhYmxlX20oKS0+c2V0X2MoMCk7
Ci0gIGl0ZW0tPnNldF9iKCJmaXN0Iik7ICAgIC8vIG1vdmUgd2l0aCBjaGFuZ2UKLSAgaXRlbSA9
IG1zZzIuYWRkX2l0ZW0oKTsgaXRlbS0+c2V0X2IoIm51bGwiKTsKLQotICBFWFBFQ1RfRVEoCi0g
ICAgICAibW9kaWZpZWQ6IGl0ZW1bMF0uYiAtPiBpdGVtWzJdLmI6IFwiZmlyc3RcIiAtPiBcImZp
c3RcIlxuIgotICAgICAgIm1vdmVkOiBpdGVtWzFdIC0+IGl0ZW1bMF0gOiB7IGI6IFwic2Vjb25k
XCIgbSB7IGM6IDIgfSB9XG4iCi0gICAgICAibW92ZWQ6IGl0ZW1bMl0gLT4gaXRlbVszXSA6IHsg
YjogXCJudWxsXCIgfVxuIgotICAgICAgImFkZGVkOiBpdGVtWzFdOiB7IGI6IFwiZm91cnRoXCIg
bSB7IGM6IDQgfSB9XG4iCi0gICAgICAiZGVsZXRlZDogaXRlbVszXTogeyBiOiBcInRoaXJkXCIg
bSB7IGM6IDMgfSB9XG4iCi0gICAgICAiZGVsZXRlZDogaXRlbVs0XTogeyBiOiBcInNlY29uZFwi
IG0geyBjOiAyIH0gfVxuIiwKLSAgICAgIFJ1bihtc2cxLCBtc2cyKSk7Ci19Ci0KLVRFU1RfRihD
b21wYXJpc29uVGVzdCwgUmVwZWF0ZWRGaWVsZFNldFRlc3RfU2V0T2ZTZXQpIHsKLSAgcmVwZWF0
ZWRfZmllbGRfYXNfc2V0KCk7Ci0gIC8vIENyZWF0ZSB0aGUgdGVzdGluZyBwcm90b3MKLSAgcHJv
dG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cxOwotICBwcm90b2J1Zl91bml0dGVz
dDo6VGVzdERpZmZNZXNzYWdlIG1zZzI7Ci0KLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZm
TWVzc2FnZTo6SXRlbSogaXRlbSA9IG1zZzEuYWRkX2l0ZW0oKTsKLSAgaXRlbS0+YWRkX3JhKDEp
OyBpdGVtLT5hZGRfcmEoMik7IGl0ZW0tPmFkZF9yYSgzKTsKLSAgaXRlbSA9IG1zZzEuYWRkX2l0
ZW0oKTsKLSAgaXRlbS0+YWRkX3JhKDUpOyBpdGVtLT5hZGRfcmEoNik7Ci0gIGl0ZW0gPSBtc2cx
LmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPmFkZF9yYSgxKTsgaXRlbS0+YWRkX3JhKDMpOwotICBpdGVt
ID0gbXNnMS5hZGRfaXRlbSgpOwotICBpdGVtLT5hZGRfcmEoNik7IGl0ZW0tPmFkZF9yYSg3KTsg
aXRlbS0+YWRkX3JhKDgpOwotCi0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPmFk
ZF9yYSg2KTsgaXRlbS0+YWRkX3JhKDUpOwotICBpdGVtID0gbXNnMi5hZGRfaXRlbSgpOwotICBp
dGVtLT5hZGRfcmEoNik7IGl0ZW0tPmFkZF9yYSg4KTsKLSAgaXRlbSA9IG1zZzIuYWRkX2l0ZW0o
KTsKLSAgaXRlbS0+YWRkX3JhKDEpOyBpdGVtLT5hZGRfcmEoMyk7Ci0gIGl0ZW0gPSBtc2cyLmFk
ZF9pdGVtKCk7Ci0gIGl0ZW0tPmFkZF9yYSgzKTsgaXRlbS0+YWRkX3JhKDIpOyBpdGVtLT5hZGRf
cmEoMSk7Ci0KLSAgLy8gQ29tcGFyZQotICBFWFBFQ1RfRVEoIm1vdmVkOiBpdGVtWzBdLnJhWzBd
IC0+IGl0ZW1bM10ucmFbMl0gOiAxXG4iCi0gICAgICAgICAgICAibW92ZWQ6IGl0ZW1bMF0ucmFb
Ml0gLT4gaXRlbVszXS5yYVswXSA6IDNcbiIKLSAgICAgICAgICAgICJtb3ZlZDogaXRlbVswXSAt
PiBpdGVtWzNdIDogeyByYTogMSByYTogMiByYTogMyB9XG4iCi0gICAgICAgICAgICAibW92ZWQ6
IGl0ZW1bMV0ucmFbMF0gLT4gaXRlbVswXS5yYVsxXSA6IDVcbiIKLSAgICAgICAgICAgICJtb3Zl
ZDogaXRlbVsxXS5yYVsxXSAtPiBpdGVtWzBdLnJhWzBdIDogNlxuIgotICAgICAgICAgICAgIm1v
dmVkOiBpdGVtWzFdIC0+IGl0ZW1bMF0gOiB7IHJhOiA1IHJhOiA2IH1cbiIKLSAgICAgICAgICAg
ICJhZGRlZDogaXRlbVsxXTogeyByYTogNiByYTogOCB9XG4iCi0gICAgICAgICAgICAiZGVsZXRl
ZDogaXRlbVszXTogeyByYTogNiByYTogNyByYTogOCB9XG4iLAotICAgICAgICAgICAgUnVuKG1z
ZzEsIG1zZzIpKTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBSZXBlYXRlZE1hcEZpZWxk
VGVzdF9SZXBlYXRlZEtleSkgewotICAvLyB1c2VkIHJiIGFzIGEga2V5LCBidXQgYiBpcyB0aGUg
dmFsdWUuCi0gIHJlcGVhdGVkX2ZpZWxkX2FzX3NldCgpOwotICBmaWVsZF9hc19tYXAoIml0ZW0i
LCAicmIiKTsKLQotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIG1zZzE7Ci0g
IHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMjsKLSAgcHJvdG9idWZfdW5p
dHRlc3Q6OlRlc3REaWZmTWVzc2FnZTo6SXRlbSogaXRlbSA9IG1zZzEuYWRkX2l0ZW0oKTsKLSAg
aXRlbS0+YWRkX3JiKCJhIik7Ci0gIGl0ZW0tPmFkZF9yYigiYiIpOwotICBpdGVtLT5zZXRfYigi
Zmlyc3QiKTsKLQotICBpdGVtID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5hZGRfcmIoImMi
KTsKLSAgaXRlbS0+c2V0X2IoInNlY29uZCIpOwotCi0gIGl0ZW0gPSBtc2cyLmFkZF9pdGVtKCk7
Ci0gIGl0ZW0tPmFkZF9yYigiYiIpOwotICBpdGVtLT5hZGRfcmIoImEiKTsKLSAgaXRlbS0+c2V0
X2IoImZpc3QiKTsKLQotCi0gIEVYUEVDVF9FUSgibW9kaWZpZWQ6IGl0ZW1bMF0uYiAtPiBpdGVt
WzFdLmI6IFwiZmlyc3RcIiAtPiBcImZpc3RcIlxuIgotICAgICAgICAgICAgIm1vdmVkOiBpdGVt
WzBdLnJiWzBdIC0+IGl0ZW1bMV0ucmJbMV0gOiBcImFcIlxuIgotICAgICAgICAgICAgIm1vdmVk
OiBpdGVtWzBdLnJiWzFdIC0+IGl0ZW1bMV0ucmJbMF0gOiBcImJcIlxuIgotICAgICAgICAgICAg
ImFkZGVkOiBpdGVtWzBdOiB7IGI6IFwic2Vjb25kXCIgcmI6IFwiY1wiIH1cbiIsCi0gICAgICAg
ICAgICBSdW4obXNnMSwgbXNnMikpOwotfQotCi1URVNUX0YoQ29tcGFyaXNvblRlc3QsIFJlcGVh
dGVkTWFwRmllbGRUZXN0X1JlcGVhdGVkTWVzc2FnZUtleSkgewotICBmaWVsZF9hc19tYXAoIml0
ZW0iLCAicm0iKTsKLQotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlIG1zZzE7
Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMjsKLSAgcHJvdG9idWZf
dW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZTo6SXRlbSogaXRlbSA9IG1zZzEuYWRkX2l0ZW0oKTsK
LSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RGaWVsZCoga2V5ID0gaXRlbS0+YWRkX3JtKCk7Ci0g
IGtleS0+c2V0X2MoMik7IGtleS0+YWRkX3JjKDEwKTsga2V5LT5hZGRfcmMoMTApOwotICBpdGVt
ID0gbXNnMS5hZGRfaXRlbSgpOyBrZXkgPSBpdGVtLT5hZGRfcm0oKTsKLSAga2V5LT5zZXRfYygw
KTsga2V5LT5hZGRfcmMoMSk7IGtleS0+YWRkX3JjKDIpOwotICBrZXkgPSBpdGVtLT5hZGRfcm0o
KTsKLSAga2V5LT5zZXRfYygwKTsKLSAgaXRlbS0+YWRkX3JiKCJmaXJzdCIpOwotCi0gIGl0ZW0g
PSBtc2cyLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPkNvcHlGcm9tKG1zZzEuaXRlbSgxKSk7Ci0gIGl0
ZW0tPmFkZF9yYigic2Vjb25kIik7Ci0KLSAgRVhQRUNUX0VRKCJhZGRlZDogaXRlbVswXS5yYlsx
XTogXCJzZWNvbmRcIlxuIgotICAgICAgICAgICAgImRlbGV0ZWQ6IGl0ZW1bMF06IHsgcm0geyBj
OiAyIHJjOiAxMCByYzogMTAgfSB9XG4iLAotICAgICAgICAgICAgUnVuKG1zZzEsIG1zZzIpKTsK
LX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBSZXBlYXRlZFNldE9wdGlvblRlc3RfVW5rbm93
bikgewotICAvLyBDdXJyZW50bHksIGFzX3NldCBvcHRpb24gZG9lbnMndCBoYXZlIGFmZmVjdHMg
b24gdW5rbm93biBmaWVsZC4KLSAgLy8gSWYgbmVlZGVkLCB0aGlzIGZlYXR1cmUgd2lsbCBiZSBh
ZGRlZCBieSByZXF1ZXN0LgotICByZXBlYXRlZF9maWVsZF9hc19zZXQoKTsKLSAgdW5rbm93bjFf
LT5BZGRHcm91cCgyNDUpLT5BZGRGaXhlZDMyKDI0OCwgMSk7Ci0gIHVua25vd24yXy0+QWRkR3Jv
dXAoMjQ1KS0+QWRkRml4ZWQzMigyNDgsIDMpOwotICB1bmtub3duMl8tPkFkZEdyb3VwKDI0NSkt
PkFkZEZpeGVkMzIoMjQ4LCAxKTsKLQotICAvLyBXZSBleHBlY3QgaXQgYmVoYXZlcyB0aGUgc2Ft
ZSBhcyBub3JtYWwgY29tcGFyaXNvbi4KLSAgRVhQRUNUX0VRKCJtb2RpZmllZDogMjQ1WzBdLjI0
OFswXTogMHgwMDAwMDAwMSAtPiAweDAwMDAwMDAzXG4iCi0gICAgICAgICAgICAiYWRkZWQ6IDI0
NVsxXTogeyAuLi4gfVxuIiwKLSAgICAgICAgICAgIFJ1blVuKCkpOwotfQotCi1URVNUX0YoQ29t
cGFyaXNvblRlc3QsIE1hdGNoaW5nX1Vua25vd24pIHsKLSAgdW5rbm93bjFfLT5BZGRHcm91cCgy
NDUpLT5BZGRGaXhlZDMyKDI0OCwgMSk7Ci0gIHVua25vd24yXy0+QWRkR3JvdXAoMjQ1KS0+QWRk
Rml4ZWQzMigyNDgsIDEpOwotICB1bmtub3duMV8tPkFkZEdyb3VwKDI0NSktPkFkZEZpeGVkMzIo
MjQ4LCAzKTsKLSAgdW5rbm93bjJfLT5BZGRHcm91cCgyNDUpLT5BZGRGaXhlZDMyKDI0OCwgMyk7
Ci0gIHVua25vd24yXy0+QWRkTGVuZ3RoRGVsaW1pdGVkKDI0MiwgImNhdCIpOwotICB1bmtub3du
Ml8tPkFkZEdyb3VwKDI0NiktPkFkZEZpeGVkMzIoMjQ4LCA0KTsKLQotICAvLyByZXBvcnRfbWF0
Y2ggaXMgZmFsc2Ugc28gb25seSBhZGRlZC9tb2RpZmllZCBmaWVsZHMgYXJlIGV4cGVjdGVkLgot
ICBFWFBFQ1RfRVEoImFkZGVkOiAyNDJbMF06IFwiY2F0XCJcbiIKLSAgICAgICAgICAgICJhZGRl
ZDogMjQ2WzBdOiB7IC4uLiB9XG4iLAotICAgICAgICAgICAgUnVuVW4oKSk7Ci19Ci0KLVRFU1Rf
RihDb21wYXJpc29uVGVzdCwgUmVwZWF0ZWRTZXRGaWVsZFRlc3QpIHsKLSAgZmllbGRfYXNfc2V0
KCJyZXBlYXRlZGdyb3VwIik7Ci0KLSAgcHJvdG8xXy5jbGVhcl9yZXBlYXRlZGdyb3VwKCk7Ci0g
IHByb3RvMl8uY2xlYXJfcmVwZWF0ZWRncm91cCgpOwotICBwcm90bzJfLmFkZF9yZXBlYXRlZGdy
b3VwKCktPnNldF9hKDkwOSk7Ci0gIHByb3RvMl8uYWRkX3JlcGVhdGVkZ3JvdXAoKS0+c2V0X2Eo
OTA3KTsKLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRncm91cCgpLT5zZXRfYSgzMTcpOwotICBwcm90
bzFfLmFkZF9yZXBlYXRlZGdyb3VwKCktPnNldF9hKDkwNCk7Ci0gIHByb3RvMV8uYWRkX3JlcGVh
dGVkZ3JvdXAoKS0+c2V0X2EoOTA3KTsKLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRncm91cCgpLT5z
ZXRfYSg5MDkpOwotCi0gIEVYUEVDVF9FUSgibW92ZWQ6IHJlcGVhdGVkZ3JvdXBbMl0gLT4gcmVw
ZWF0ZWRncm91cFsxXSA6IHsgYTogOTA3IH1cbiIKLSAgICAgICAgICAgICJtb3ZlZDogcmVwZWF0
ZWRncm91cFszXSAtPiByZXBlYXRlZGdyb3VwWzBdIDogeyBhOiA5MDkgfVxuIgotICAgICAgICAg
ICAgImRlbGV0ZWQ6IHJlcGVhdGVkZ3JvdXBbMF06IHsgYTogMzE3IH1cbiIKLSAgICAgICAgICAg
ICJkZWxldGVkOiByZXBlYXRlZGdyb3VwWzFdOiB7IGE6IDkwNCB9XG4iLAotICAgICAgICAgICAg
UnVuKCkpOwotfQotCi0vLyBFbWJlZGRlZCBtZXNzYWdlIHRlc3RzLgotVEVTVF9GKENvbXBhcmlz
b25UZXN0LCBFbWJlZGRlZEFkZGl0aW9uVGVzdCkgewotICBwcm90bzFfLm11dGFibGVfb3B0aW9u
YWxfbmVzdGVkX21lc3NhZ2UoKS0+Y2xlYXJfYmIoKTsKLQotICBFWFBFQ1RfRVEoImFkZGVkOiBv
cHRpb25hbF9uZXN0ZWRfbWVzc2FnZS5iYjogMTE4XG4iLAotICAgICAgICAgICAgUnVuKCkpOwot
fQotCi1URVNUX0YoQ29tcGFyaXNvblRlc3QsIEVtYmVkZGVkRGVsZXRpb25UZXN0KSB7Ci0gIHBy
b3RvMl8ubXV0YWJsZV9vcHRpb25hbF9uZXN0ZWRfbWVzc2FnZSgpLT5jbGVhcl9iYigpOwotCi0g
IEVYUEVDVF9FUSgiZGVsZXRlZDogb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UuYmI6IDExOFxuIiwK
LSAgICAgICAgICAgIFJ1bigpKTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBFbWJlZGRl
ZE1vZGlmaWNhdGlvblRlc3QpIHsKLSAgcHJvdG8xXy5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9t
ZXNzYWdlKCktPnNldF9iYigyKTsKLQotICBFWFBFQ1RfRVEoIm1vZGlmaWVkOiBvcHRpb25hbF9u
ZXN0ZWRfbWVzc2FnZS5iYjogMiAtPiAxMThcbiIsCi0gICAgICAgICAgICBSdW4oKSk7Ci19Ci0K
LVRFU1RfRihDb21wYXJpc29uVGVzdCwgRW1iZWRkZWRGdWxsQWRkaXRpb25UZXN0KSB7Ci0gIHBy
b3RvMV8uY2xlYXJfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKTsKLQotICBFWFBFQ1RfRVEoImFk
ZGVkOiBvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZTogeyBiYjogMTE4IH1cbiIsCi0gICAgICAgICAg
ICBSdW4oKSk7Ci19Ci0KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgRW1iZWRkZWRQYXJ0aWFsQWRk
aXRpb25UZXN0KSB7Ci0gIHByb3RvMV8uY2xlYXJfb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UoKTsK
LSAgcHJvdG8yXy5tdXRhYmxlX29wdGlvbmFsX25lc3RlZF9tZXNzYWdlKCktPmNsZWFyX2JiKCk7
Ci0KLSAgRVhQRUNUX0VRKCJhZGRlZDogb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2U6IHsgfVxuIiwK
LSAgICAgICAgICAgIFJ1bigpKTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBFbWJlZGRl
ZEZ1bGxEZWxldGlvblRlc3QpIHsKLSAgcHJvdG8yXy5jbGVhcl9vcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSgpOwotCi0gIEVYUEVDVF9FUSgiZGVsZXRlZDogb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2U6
IHsgYmI6IDExOCB9XG4iLAotICAgICAgICAgICAgUnVuKCkpOwotfQotCi0vLyBSZXBlYXRlZCBl
bGVtZW50IHRlc3RzLgotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBCYXNpY1JlcGVhdGVkVGVzdCkg
ewotICBwcm90bzFfLmNsZWFyX3JlcGVhdGVkX2ludDMyKCk7Ci0gIHByb3RvMl8uY2xlYXJfcmVw
ZWF0ZWRfaW50MzIoKTsKLQotICBwcm90bzFfLmFkZF9yZXBlYXRlZF9pbnQzMig1MDApOwotICBw
cm90bzFfLmFkZF9yZXBlYXRlZF9pbnQzMig1MDEpOwotICBwcm90bzFfLmFkZF9yZXBlYXRlZF9p
bnQzMig1MDIpOwotICBwcm90bzFfLmFkZF9yZXBlYXRlZF9pbnQzMig1MDMpOwotICBwcm90bzFf
LmFkZF9yZXBlYXRlZF9pbnQzMig1MDApOwotCi0gIHByb3RvMl8uYWRkX3JlcGVhdGVkX2ludDMy
KDUwMCk7Ci0gIHByb3RvMl8uYWRkX3JlcGVhdGVkX2ludDMyKDUwOSk7Ci0gIHByb3RvMl8uYWRk
X3JlcGVhdGVkX2ludDMyKDUwMik7Ci0gIHByb3RvMl8uYWRkX3JlcGVhdGVkX2ludDMyKDUwNCk7
Ci0KLSAgRVhQRUNUX0VRKCJtb2RpZmllZDogcmVwZWF0ZWRfaW50MzJbMV06IDUwMSAtPiA1MDlc
biIKLSAgICAgICAgICAgICJtb2RpZmllZDogcmVwZWF0ZWRfaW50MzJbM106IDUwMyAtPiA1MDRc
biIKLSAgICAgICAgICAgICJkZWxldGVkOiByZXBlYXRlZF9pbnQzMls0XTogNTAwXG4iLAotICAg
ICAgICAgICAgUnVuKCkpOwotfQotCi1URVNUX0YoQ29tcGFyaXNvblRlc3QsIEJhc2ljUmVwZWF0
ZWRUZXN0X1NldE9wdGlvbikgewotICByZXBlYXRlZF9maWVsZF9hc19zZXQoKTsKLSAgcHJvdG8x
Xy5jbGVhcl9yZXBlYXRlZF9pbnQzMigpOwotICBwcm90bzJfLmNsZWFyX3JlcGVhdGVkX2ludDMy
KCk7Ci0KLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRfaW50MzIoNTAxKTsKLSAgcHJvdG8xXy5hZGRf
cmVwZWF0ZWRfaW50MzIoNTAyKTsKLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRfaW50MzIoNTAzKTsK
LSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRfaW50MzIoNTAwKTsKLSAgcHJvdG8xXy5hZGRfcmVwZWF0
ZWRfaW50MzIoNTAwKTsKLQotICBwcm90bzJfLmFkZF9yZXBlYXRlZF9pbnQzMig1MDApOwotICBw
cm90bzJfLmFkZF9yZXBlYXRlZF9pbnQzMig1MDkpOwotICBwcm90bzJfLmFkZF9yZXBlYXRlZF9p
bnQzMig1MDMpOwotICBwcm90bzJfLmFkZF9yZXBlYXRlZF9pbnQzMig1MDIpOwotICBwcm90bzJf
LmFkZF9yZXBlYXRlZF9pbnQzMig1MDQpOwotCi0gIEVYUEVDVF9FUSgibW92ZWQ6IHJlcGVhdGVk
X2ludDMyWzFdIC0+IHJlcGVhdGVkX2ludDMyWzNdIDogNTAyXG4iCi0gICAgICAgICAgICAibW92
ZWQ6IHJlcGVhdGVkX2ludDMyWzNdIC0+IHJlcGVhdGVkX2ludDMyWzBdIDogNTAwXG4iCi0gICAg
ICAgICAgICAiYWRkZWQ6IHJlcGVhdGVkX2ludDMyWzFdOiA1MDlcbiIKLSAgICAgICAgICAgICJh
ZGRlZDogcmVwZWF0ZWRfaW50MzJbNF06IDUwNFxuIgotICAgICAgICAgICAgImRlbGV0ZWQ6IHJl
cGVhdGVkX2ludDMyWzBdOiA1MDFcbiIKLSAgICAgICAgICAgICJkZWxldGVkOiByZXBlYXRlZF9p
bnQzMls0XTogNTAwXG4iLAotICAgICAgICAgICAgUnVuKCkpOwotfQotCi1URVNUX0YoQ29tcGFy
aXNvblRlc3QsIEJhc2ljUmVwZWF0ZWRUZXN0X1NldEZpZWxkKSB7Ci0gIGZpZWxkX2FzX3NldCgi
cmVwZWF0ZWRfaW50MzIiKTsKLSAgcHJvdG8xXy5jbGVhcl9yZXBlYXRlZF9pbnQzMigpOwotICBw
cm90bzJfLmNsZWFyX3JlcGVhdGVkX2ludDMyKCk7Ci0KLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRf
aW50MzIoNTAxKTsKLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRfaW50MzIoNTAyKTsKLSAgcHJvdG8x
Xy5hZGRfcmVwZWF0ZWRfaW50MzIoNTAzKTsKLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRfaW50MzIo
NTAwKTsKLSAgcHJvdG8xXy5hZGRfcmVwZWF0ZWRfaW50MzIoNTAwKTsKLQotICBwcm90bzJfLmFk
ZF9yZXBlYXRlZF9pbnQzMig1MDApOwotICBwcm90bzJfLmFkZF9yZXBlYXRlZF9pbnQzMig1MDkp
OwotICBwcm90bzJfLmFkZF9yZXBlYXRlZF9pbnQzMig1MDMpOwotICBwcm90bzJfLmFkZF9yZXBl
YXRlZF9pbnQzMig1MDIpOwotICBwcm90bzJfLmFkZF9yZXBlYXRlZF9pbnQzMig1MDQpOwotCi0g
IEVYUEVDVF9FUSgibW92ZWQ6IHJlcGVhdGVkX2ludDMyWzFdIC0+IHJlcGVhdGVkX2ludDMyWzNd
IDogNTAyXG4iCi0gICAgICAgICAgICAibW92ZWQ6IHJlcGVhdGVkX2ludDMyWzNdIC0+IHJlcGVh
dGVkX2ludDMyWzBdIDogNTAwXG4iCi0gICAgICAgICAgICAiYWRkZWQ6IHJlcGVhdGVkX2ludDMy
WzFdOiA1MDlcbiIKLSAgICAgICAgICAgICJhZGRlZDogcmVwZWF0ZWRfaW50MzJbNF06IDUwNFxu
IgotICAgICAgICAgICAgImRlbGV0ZWQ6IHJlcGVhdGVkX2ludDMyWzBdOiA1MDFcbiIKLSAgICAg
ICAgICAgICJkZWxldGVkOiByZXBlYXRlZF9pbnQzMls0XTogNTAwXG4iLAotICAgICAgICAgICAg
UnVuKCkpOwotfQotCi0vLyBNdWx0aXBsZSBhY3Rpb24gdGVzdHMuCi1URVNUX0YoQ29tcGFyaXNv
blRlc3QsIEFkZERlbGV0ZVRlc3QpIHsKLSAgcHJvdG8xXy5jbGVhcl9vcHRpb25hbF9pbnQzMigp
OwotICBwcm90bzJfLmNsZWFyX29wdGlvbmFsX2ludDY0KCk7Ci0KLSAgRVhQRUNUX0VRKCJhZGRl
ZDogb3B0aW9uYWxfaW50MzI6IDEwMVxuIgotICAgICAgICAgICAgImRlbGV0ZWQ6IG9wdGlvbmFs
X2ludDY0OiAxMDJcbiIsCi0gICAgICAgICAgICBSdW4oKSk7Ci19Ci0KLVRFU1RfRihDb21wYXJp
c29uVGVzdCwgQWRkRGVsZXRlX0ZpZWxkT3JkZXJpbmdUZXN0KSB7Ci0gIG9yZGVyaW5nc19wcm90
bzFfLkNsZWFyRXh0ZW5zaW9uKHVuaXR0ZXN0OjpteV9leHRlbnNpb25fc3RyaW5nKTsKLSAgb3Jk
ZXJpbmdzX3Byb3RvMl8uY2xlYXJfbXlfaW50KCk7Ci0KLSAgRVhQRUNUX0VRKCJkZWxldGVkOiBt
eV9pbnQ6IDFcbiIKLSAgICAgICAgICAgICJhZGRlZDogKHByb3RvYnVmX3VuaXR0ZXN0Lm15X2V4
dGVuc2lvbl9zdHJpbmcpOiBcImJhclwiXG4iLAotICAgICAgICAgICAgUnVuT3JkZXIoKSk7Ci19
Ci0KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgQWxsVGhyZWVUZXN0KSB7Ci0gIHByb3RvMV8uY2xl
YXJfb3B0aW9uYWxfaW50MzIoKTsKLSAgcHJvdG8yXy5jbGVhcl9vcHRpb25hbF9mbG9hdCgpOwot
ICBwcm90bzJfLnNldF9vcHRpb25hbF9zdHJpbmcoImhlbGxvIHdvcmxkISIpOwotCi0gIEVYUEVD
VF9FUSgiYWRkZWQ6IG9wdGlvbmFsX2ludDMyOiAxMDFcbiIKLSAgICAgICAgICAgICJkZWxldGVk
OiBvcHRpb25hbF9mbG9hdDogMTExXG4iCi0gICAgICAgICAgICAibW9kaWZpZWQ6IG9wdGlvbmFs
X3N0cmluZzogXCIxMTVcIiAtPiBcImhlbGxvIHdvcmxkIVwiXG4iLAotICAgICAgICAgICAgUnVu
KCkpOwotfQotCi1URVNUX0YoQ29tcGFyaXNvblRlc3QsIFNhbmR3aGljaFRlc3QpIHsKLSAgcHJv
dG8xXy5jbGVhcl9vcHRpb25hbF9pbnQ2NCgpOwotICBwcm90bzFfLmNsZWFyX29wdGlvbmFsX3Vp
bnQzMigpOwotCi0gIHByb3RvMl8uY2xlYXJfb3B0aW9uYWxfdWludDY0KCk7Ci0KLSAgRVhQRUNU
X0VRKCJhZGRlZDogb3B0aW9uYWxfaW50NjQ6IDEwMlxuIgotICAgICAgICAgICAgImFkZGVkOiBv
cHRpb25hbF91aW50MzI6IDEwM1xuIgotICAgICAgICAgICAgImRlbGV0ZWQ6IG9wdGlvbmFsX3Vp
bnQ2NDogMTA0XG4iLAotICAgICAgICAgICAgUnVuKCkpOwotfQotCi1URVNUX0YoQ29tcGFyaXNv
blRlc3QsIElnbm9yZWROb0NoYW5nZVRlc3QpIHsKLSAgcHJvdG8xZGlmZl8uc2V0X3YoMyk7Ci0g
IHByb3RvMmRpZmZfLnNldF92KDMpOwotICBwcm90bzJkaWZmXy5zZXRfdygiZm9vIik7Ci0KLSAg
aWdub3JlX2ZpZWxkKCJ2Iik7Ci0KLSAgRVhQRUNUX0VRKCJpZ25vcmVkOiB2XG4iCi0gICAgICAg
ICAgICAiYWRkZWQ6IHc6IFwiZm9vXCJcbiIsCi0gICAgICAgICAgICBSdW5EaWZmKCkpOwotfQot
Ci1URVNUX0YoQ29tcGFyaXNvblRlc3QsIElnbm9yZWRBZGRUZXN0KSB7Ci0gIHByb3RvMmRpZmZf
LnNldF92KDMpOwotICBwcm90bzJkaWZmXy5zZXRfdygiZm9vIik7Ci0KLSAgaWdub3JlX2ZpZWxk
KCJ2Iik7Ci0KLSAgRVhQRUNUX0VRKCJpZ25vcmVkOiB2XG4iCi0gICAgICAgICAgICAiYWRkZWQ6
IHc6IFwiZm9vXCJcbiIsCi0gICAgICAgICAgICBSdW5EaWZmKCkpOwotfQotCi1URVNUX0YoQ29t
cGFyaXNvblRlc3QsIElnbm9yZWREZWxldGVUZXN0KSB7Ci0gIHByb3RvMWRpZmZfLnNldF92KDMp
OwotICBwcm90bzJkaWZmXy5zZXRfdygiZm9vIik7Ci0KLSAgaWdub3JlX2ZpZWxkKCJ2Iik7Ci0K
LSAgRVhQRUNUX0VRKCJpZ25vcmVkOiB2XG4iCi0gICAgICAgICAgICAiYWRkZWQ6IHc6IFwiZm9v
XCJcbiIsCi0gICAgICAgICAgICBSdW5EaWZmKCkpOwotfQotCi1URVNUX0YoQ29tcGFyaXNvblRl
c3QsIElnbm9yZWRNb2RpZnlUZXN0KSB7Ci0gIHByb3RvMWRpZmZfLnNldF92KDMpOwotICBwcm90
bzJkaWZmXy5zZXRfdig0KTsKLSAgcHJvdG8yZGlmZl8uc2V0X3coImZvbyIpOwotCi0gIGlnbm9y
ZV9maWVsZCgidiIpOwotCi0gIEVYUEVDVF9FUSgiaWdub3JlZDogdlxuIgotICAgICAgICAgICAg
ImFkZGVkOiB3OiBcImZvb1wiXG4iLAotICAgICAgICAgICAgUnVuRGlmZigpKTsKLX0KLQotVEVT
VF9GKENvbXBhcmlzb25UZXN0LCBJZ25vcmVkUmVwZWF0ZWRBZGRUZXN0KSB7Ci0gIHByb3RvMWRp
ZmZfLmFkZF9ydigzKTsKLSAgcHJvdG8xZGlmZl8uYWRkX3J2KDQpOwotCi0gIHByb3RvMmRpZmZf
LmFkZF9ydigzKTsKLSAgcHJvdG8yZGlmZl8uYWRkX3J2KDQpOwotICBwcm90bzJkaWZmXy5hZGRf
cnYoNSk7Ci0KLSAgcHJvdG8yZGlmZl8uc2V0X3coImZvbyIpOwotCi0gIGlnbm9yZV9maWVsZCgi
cnYiKTsKLQotICBFWFBFQ1RfRVEoImlnbm9yZWQ6IHJ2XG4iCi0gICAgICAgICAgICAiYWRkZWQ6
IHc6IFwiZm9vXCJcbiIsCi0gICAgICAgICAgICBSdW5EaWZmKCkpOwotfQotCi1URVNUX0YoQ29t
cGFyaXNvblRlc3QsIElnbm9yZWRSZXBlYXRlZERlbGV0ZVRlc3QpIHsKLSAgcHJvdG8xZGlmZl8u
YWRkX3J2KDMpOwotICBwcm90bzFkaWZmXy5hZGRfcnYoNCk7Ci0gIHByb3RvMWRpZmZfLmFkZF9y
dig1KTsKLQotICBwcm90bzJkaWZmXy5hZGRfcnYoMyk7Ci0gIHByb3RvMmRpZmZfLmFkZF9ydig0
KTsKLQotICBwcm90bzJkaWZmXy5zZXRfdygiZm9vIik7Ci0KLSAgaWdub3JlX2ZpZWxkKCJydiIp
OwotCi0gIEVYUEVDVF9FUSgiaWdub3JlZDogcnZcbiIKLSAgICAgICAgICAgICJhZGRlZDogdzog
XCJmb29cIlxuIiwKLSAgICAgICAgICAgIFJ1bkRpZmYoKSk7Ci19Ci0KLVRFU1RfRihDb21wYXJp
c29uVGVzdCwgSWdub3JlZFJlcGVhdGVkTW9kaWZ5VGVzdCkgewotICBwcm90bzFkaWZmXy5hZGRf
cnYoMyk7Ci0gIHByb3RvMWRpZmZfLmFkZF9ydig0KTsKLQotICBwcm90bzJkaWZmXy5hZGRfcnYo
Myk7Ci0gIHByb3RvMmRpZmZfLmFkZF9ydig1KTsKLQotICBwcm90bzJkaWZmXy5zZXRfdygiZm9v
Iik7Ci0KLSAgaWdub3JlX2ZpZWxkKCJydiIpOwotCi0gIEVYUEVDVF9FUSgiaWdub3JlZDogcnZc
biIKLSAgICAgICAgICAgICJhZGRlZDogdzogXCJmb29cIlxuIiwKLSAgICAgICAgICAgIFJ1bkRp
ZmYoKSk7Ci19Ci0KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgSWdub3JlZFdob2xlTmVzdGVkTWVz
c2FnZSkgewotICBwcm90bzFkaWZmXy5tdXRhYmxlX20oKS0+c2V0X2MoMyk7Ci0gIHByb3RvMmRp
ZmZfLm11dGFibGVfbSgpLT5zZXRfYyg0KTsKLQotICBwcm90bzJkaWZmXy5zZXRfdygiZm9vIik7
Ci0KLSAgaWdub3JlX2ZpZWxkKCJtIik7Ci0KLSAgRVhQRUNUX0VRKCJhZGRlZDogdzogXCJmb29c
IlxuIgotICAgICAgICAgICAgImlnbm9yZWQ6IG1cbiIsCi0gICAgICAgICAgICBSdW5EaWZmKCkp
OwotfQotCi1URVNUX0YoQ29tcGFyaXNvblRlc3QsIElnbm9yZWROZXN0ZWRGaWVsZCkgewotICBw
cm90bzFkaWZmXy5tdXRhYmxlX20oKS0+c2V0X2MoMyk7Ci0gIHByb3RvMmRpZmZfLm11dGFibGVf
bSgpLT5zZXRfYyg0KTsKLQotICBwcm90bzJkaWZmXy5zZXRfdygiZm9vIik7Ci0KLSAgaWdub3Jl
X2ZpZWxkKCJtLmMiKTsKLQotICBFWFBFQ1RfRVEoImFkZGVkOiB3OiBcImZvb1wiXG4iCi0gICAg
ICAgICAgICAiaWdub3JlZDogbS5jXG4iLAotICAgICAgICAgICAgUnVuRGlmZigpKTsKLX0KLQot
VEVTVF9GKENvbXBhcmlzb25UZXN0LCBJZ25vcmVkUmVwZWF0ZWROZXN0ZWQpIHsKLSAgcHJvdG8x
ZGlmZl8uYWRkX3JtKCktPnNldF9jKDApOwotICBwcm90bzFkaWZmXy5hZGRfcm0oKS0+c2V0X2Mo
MSk7Ci0gIHByb3RvMmRpZmZfLmFkZF9ybSgpLT5zZXRfYygyKTsKLSAgcHJvdG8yZGlmZl8uYWRk
X3JtKCktPnNldF9jKDMpOwotCi0gIHByb3RvMmRpZmZfLnNldF93KCJmb28iKTsKLQotICBpZ25v
cmVfZmllbGQoInJtLmMiKTsKLQotICBFWFBFQ1RfRVEoImlnbm9yZWQ6IHJtWzBdLmNcbiIKLSAg
ICAgICAgICAgICJpZ25vcmVkOiBybVsxXS5jXG4iCi0gICAgICAgICAgICAiYWRkZWQ6IHc6IFwi
Zm9vXCJcbiIsCi0gICAgICAgICAgICBSdW5EaWZmKCkpOwotfQotCi1URVNUX0YoQ29tcGFyaXNv
blRlc3QsIElnbm9yZWROZXN0ZWRSZXBlYXRlZCkgewotICBwcm90bzFkaWZmXy5tdXRhYmxlX20o
KS0+YWRkX3JjKDIzKTsKLSAgcHJvdG8xZGlmZl8ubXV0YWJsZV9tKCktPmFkZF9yYygyNCk7Ci0g
IHByb3RvMmRpZmZfLm11dGFibGVfbSgpLT5hZGRfcmMoMjUpOwotCi0gIHByb3RvMmRpZmZfLnNl
dF93KCJmb28iKTsKLQotICBpZ25vcmVfZmllbGQoIm0ucmMiKTsKLQotICBFWFBFQ1RfRVEoImFk
ZGVkOiB3OiBcImZvb1wiXG4iCi0gICAgICAgICAgICAiaWdub3JlZDogbS5yY1xuIiwKLSAgICAg
ICAgICAgIFJ1bkRpZmYoKSk7Ci19Ci0KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgRXh0ZW5zaW9u
VGVzdCkgewotICBwcm90bzFleF8uU2V0RXh0ZW5zaW9uKHVuaXR0ZXN0OjpvcHRpb25hbF9pbnQz
Ml9leHRlbnNpb24sIDQwMSk7Ci0gIHByb3RvMmV4Xy5TZXRFeHRlbnNpb24odW5pdHRlc3Q6Om9w
dGlvbmFsX2ludDMyX2V4dGVuc2lvbiwgNDAyKTsKLQotICBwcm90bzFleF8uQ2xlYXJFeHRlbnNp
b24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4dGVuc2lvbik7Ci0gIHByb3RvMmV4Xy5TZXRF
eHRlbnNpb24odW5pdHRlc3Q6Om9wdGlvbmFsX2ludDY0X2V4dGVuc2lvbiwgNDAzKTsKLQotICBF
WFBFQ1RfRVEoCi0gICAgICAibW9kaWZpZWQ6IChwcm90b2J1Zl91bml0dGVzdC5vcHRpb25hbF9p
bnQzMl9leHRlbnNpb24pOiA0MDEgLT4gNDAyXG4iCi0gICAgICAiYWRkZWQ6IChwcm90b2J1Zl91
bml0dGVzdC5vcHRpb25hbF9pbnQ2NF9leHRlbnNpb24pOiA0MDNcbiIsCi0gICAgICBSdW5FeCgp
KTsKLX0KLQotVEVTVF9GKENvbXBhcmlzb25UZXN0LCBNYXRjaGVkVW5rbm93bkZpZWxkVGFnVGVz
dCkgewotICB1bmtub3duMV8tPkFkZFZhcmludCgyNDAsIDEyMik7Ci0gIHVua25vd24yXy0+QWRk
VmFyaW50KDI0MCwgMTIxKTsKLSAgdW5rbm93bjFfLT5BZGRGaXhlZDMyKDI0MSwgMSk7Ci0gIHVu
a25vd24yXy0+QWRkRml4ZWQ2NCgyNDEsIDIpOwotICB1bmtub3duMV8tPkFkZExlbmd0aERlbGlt
aXRlZCgyNDIsICJjYXQiKTsKLSAgdW5rbm93bjJfLT5BZGRMZW5ndGhEZWxpbWl0ZWQoMjQyLCAi
ZG9nIik7Ci0KLSAgRVhQRUNUX0VRKAotICAgICAgIm1vZGlmaWVkOiAyNDBbMF06IDEyMiAtPiAx
MjFcbiIKLSAgICAgICJkZWxldGVkOiAyNDFbMF06IDB4MDAwMDAwMDFcbiIKLSAgICAgICJhZGRl
ZDogMjQxWzBdOiAweDAwMDAwMDAwMDAwMDAwMDJcbiIKLSAgICAgICJtb2RpZmllZDogMjQyWzBd
OiBcImNhdFwiIC0+IFwiZG9nXCJcbiIsCi0gICAgICBSdW5VbigpKTsKLX0KLQotVEVTVF9GKENv
bXBhcmlzb25UZXN0LCBVbm1hdGNoZWRVbmtub3duRmllbGRUYWdUZXN0KSB7Ci0gIHVua25vd24x
Xy0+QWRkRml4ZWQzMigyNDMsIDEpOwotICB1bmtub3duMl8tPkFkZFZhcmludCgyNDQsIDIpOwot
ICB1bmtub3duMl8tPkFkZFZhcmludCgyNDQsIDQpOwotCi0gIEVYUEVDVF9FUSgKLSAgICAgICJk
ZWxldGVkOiAyNDNbMF06IDB4MDAwMDAwMDFcbiIKLSAgICAgICJhZGRlZDogMjQ0WzBdOiAyXG4i
Ci0gICAgICAiYWRkZWQ6IDI0NFsxXTogNFxuIiwKLSAgICAgIFJ1blVuKCkpOwotfQotCi1URVNU
X0YoQ29tcGFyaXNvblRlc3QsIERpZmZlcmVudFNpemVkVW5rbm93bkZpZWxkVGVzdCkgewotICB1
bmtub3duMV8tPkFkZFZhcmludCgyNDAsIDEpOwotICB1bmtub3duMV8tPkFkZFZhcmludCgyNDAs
IDMpOwotICB1bmtub3duMV8tPkFkZFZhcmludCgyNDAsIDQpOwotICB1bmtub3duMl8tPkFkZFZh
cmludCgyNDAsIDIpOwotICB1bmtub3duMl8tPkFkZFZhcmludCgyNDAsIDMpOwotICB1bmtub3du
Ml8tPkFkZFZhcmludCgyNDAsIDIpOwotICB1bmtub3duMl8tPkFkZFZhcmludCgyNDAsIDUpOwot
Ci0gIEVYUEVDVF9FUSgKLSAgICAgICJtb2RpZmllZDogMjQwWzBdOiAxIC0+IDJcbiIKLSAgICAg
ICJtb2RpZmllZDogMjQwWzJdOiA0IC0+IDJcbiIKLSAgICAgICJhZGRlZDogMjQwWzNdOiA1XG4i
LAotICAgICAgUnVuVW4oKSk7Ci19Ci0KLVRFU1RfRihDb21wYXJpc29uVGVzdCwgVW5rbm93bkZp
ZWxkc0FsbCkgewotICB1bmtub3duMV8tPkFkZFZhcmludCgyNDMsIDEyMik7Ci0gIHVua25vd24x
Xy0+QWRkRml4ZWQ2NCgyNDQsIDB4MDE3MjM1Nik7Ci0gIHVua25vd24xXy0+QWRkRml4ZWQ2NCgy
NDQsIDB4MDk4KTsKLSAgdW5rbm93bjFfLT5BZGRHcm91cCgyNDUpLT5BZGRGaXhlZDMyKDI0OCwg
MSk7Ci0gIHVua25vd24xXy0+bXV0YWJsZV9maWVsZCgzKS0+bXV0YWJsZV9ncm91cCgpLT5BZGRG
aXhlZDMyKDI0OCwgMik7Ci0gIHVua25vd24xXy0+QWRkR3JvdXAoMjQ5KS0+QWRkRml4ZWQ2NCgy
NTAsIDEpOwotCi0gIHVua25vd24yXy0+QWRkVmFyaW50KDI0MywgMTIxKTsKLSAgdW5rbm93bjJf
LT5BZGRMZW5ndGhEZWxpbWl0ZWQoNzM4ODIsICJ0ZXN0IDEyMyIpOwotICB1bmtub3duMl8tPkFk
ZEdyb3VwKDI0NSktPkFkZEZpeGVkMzIoMjQ4LCAzKTsKLSAgdW5rbm93bjJfLT5BZGRHcm91cCgy
NDcpOwotCi0gIEVYUEVDVF9FUSgKLSAgICAgICJtb2RpZmllZDogMjQzWzBdOiAxMjIgLT4gMTIx
XG4iCi0gICAgICAiZGVsZXRlZDogMjQ0WzBdOiAweDAwMDAwMDAwMDAxNzIzNTZcbiIKLSAgICAg
ICJkZWxldGVkOiAyNDRbMV06IDB4MDAwMDAwMDAwMDAwMDA5OFxuIgotICAgICAgIm1vZGlmaWVk
OiAyNDVbMF0uMjQ4WzBdOiAweDAwMDAwMDAxIC0+IDB4MDAwMDAwMDNcbiIKLSAgICAgICJkZWxl
dGVkOiAyNDVbMF0uMjQ4WzFdOiAweDAwMDAwMDAyXG4iCi0gICAgICAiYWRkZWQ6IDI0N1swXTog
eyAuLi4gfVxuIgotICAgICAgImRlbGV0ZWQ6IDI0OVswXTogeyAuLi4gfVxuIgotICAgICAgImFk
ZGVkOiA3Mzg4MlswXTogXCJ0ZXN0IDEyM1wiXG4iLAotICAgICAgUnVuVW4oKSk7Ci19Ci0KLVRF
U1RfRihDb21wYXJpc29uVGVzdCwgRXF1aXZhbGVudElnbm9yZXNVbmtub3duKSB7Ci0gIHVuaXR0
ZXN0OjpGb3JlaWduTWVzc2FnZSBtZXNzYWdlMSwgbWVzc2FnZTI7Ci0KLSAgbWVzc2FnZTEuc2V0
X2MoNSk7Ci0gIG1lc3NhZ2UxLm11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+QWRkVmFyaW50KDEy
MywgNDU2KTsKLSAgbWVzc2FnZTIuc2V0X2MoNSk7Ci0gIG1lc3NhZ2UyLm11dGFibGVfdW5rbm93
bl9maWVsZHMoKS0+QWRkVmFyaW50KDMyMSwgNjU0KTsKLQotICBFWFBFQ1RfRkFMU0UodXRpbDo6
TWVzc2FnZURpZmZlcmVuY2VyOjpFcXVhbHMobWVzc2FnZTEsIG1lc3NhZ2UyKSk7Ci0gIEVYUEVD
VF9UUlVFKHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlcjo6RXF1aXZhbGVudChtZXNzYWdlMSwgbWVz
c2FnZTIpKTsKLX0KLQotY2xhc3MgTWF0Y2hpbmdUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qg
ewotIHB1YmxpYzoKLSAgdHlwZWRlZiB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgTWVzc2FnZURp
ZmZlcmVuY2VyOwotCi0gcHJvdGVjdGVkOgotICBNYXRjaGluZ1Rlc3QoKSB7Ci0gIH0KLQotICB+
TWF0Y2hpbmdUZXN0KCkgewotICB9Ci0KLSAgc3RyaW5nIFJ1bldpdGhSZXN1bHQoTWVzc2FnZURp
ZmZlcmVuY2VyKiBkaWZmZXJlbmNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE1lc3NhZ2UmIG1zZzEsIGNvbnN0IE1lc3NhZ2UmIG1zZzIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHJlc3VsdCkgewotICAgIHN0cmluZyBvdXRwdXQ7Ci0gICAgewot
ICAgICAgLy8gQmVmb3JlIHdlIHJldHVybiB0aGUgIm91dHB1dCIgc3RyaW5nLCB3ZSBtdXN0IG1h
a2Ugc3VyZSB0aGUKLSAgICAgIC8vIFN0cmVhbVJlcG9ydGVyIGlzIGRlc3RydWN0b3JlZCBiZWNh
dXNlIGl0cyBkZXN0cnVjdG9yIHdpbGwKLSAgICAgIC8vIGZsdXNoIHRoZSBzdHJlYW0uCi0gICAg
ICBpbzo6U3RyaW5nT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0oJm91dHB1dCk7Ci0gICAgICBN
ZXNzYWdlRGlmZmVyZW5jZXI6OlN0cmVhbVJlcG9ydGVyIHJlcG9ydGVyKCZvdXRwdXRfc3RyZWFt
KTsKLSAgICAgIHJlcG9ydGVyLnNldF9yZXBvcnRfbW9kaWZpZWRfYWdncmVnYXRlcyh0cnVlKTsK
LSAgICAgIGRpZmZlcmVuY2VyLT5zZXRfcmVwb3J0X21hdGNoZXModHJ1ZSk7Ci0gICAgICBkaWZm
ZXJlbmNlci0+UmVwb3J0RGlmZmVyZW5jZXNUbygmcmVwb3J0ZXIpOwotICAgICAgaWYgKHJlc3Vs
dCkgewotICAgICAgICBFWFBFQ1RfVFJVRShkaWZmZXJlbmNlci0+Q29tcGFyZShtc2cxLCBtc2cy
KSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBFWFBFQ1RfRkFMU0UoZGlmZmVyZW5jZXItPkNv
bXBhcmUobXNnMSwgbXNnMikpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb3V0cHV0Owot
ICB9Ci0KLSBwcml2YXRlOgotICBHT09HTEVfRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoTWF0
Y2hpbmdUZXN0KTsKLX07Ci0KLVRFU1RfRihNYXRjaGluZ1Rlc3QsIFN0cmVhbVJlcG9ydGVyTWF0
Y2hpbmcpIHsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RGaWVsZCBtc2cxLCBtc2cyOwotICBt
c2cxLnNldF9jKDcyKTsKLSAgbXNnMi5zZXRfYyg3Mik7Ci0gIG1zZzEuYWRkX3JjKDEzKTsKLSAg
bXNnMi5hZGRfcmMoMTMpOwotICBtc2cxLmFkZF9yYygxNyk7Ci0gIG1zZzIuYWRkX3JjKDE3KTsK
LSAgc3RyaW5nIG91dHB1dDsKLSAgTWVzc2FnZURpZmZlcmVuY2VyIGRpZmZlcmVuY2VyOwotICBk
aWZmZXJlbmNlci5zZXRfcmVwb3J0X21hdGNoZXModHJ1ZSk7Ci0gIGRpZmZlcmVuY2VyLlJlcG9y
dERpZmZlcmVuY2VzVG9TdHJpbmcoJm91dHB1dCk7Ci0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2Vy
LkNvbXBhcmUobXNnMSwgbXNnMikpOwotICBFWFBFQ1RfRVEoCi0gICAgICAibWF0Y2hlZDogYyA6
IDcyXG4iCi0gICAgICAibWF0Y2hlZDogcmNbMF0gOiAxM1xuIgotICAgICAgIm1hdGNoZWQ6IHJj
WzFdIDogMTdcbiIsCi0gICAgICBvdXRwdXQpOwotfQotCi1URVNUX0YoTWF0Y2hpbmdUZXN0LCBE
b250UmVwb3J0TWF0Y2hlZFdoZW5JZ25vcmluZykgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVz
dEZpZWxkIG1zZzEsIG1zZzI7Ci0gIG1zZzEuc2V0X2MoNzIpOwotICBtc2cyLnNldF9jKDcyKTsK
LSAgbXNnMS5hZGRfcmMoMTMpOwotICBtc2cyLmFkZF9yYygxMyk7Ci0gIG1zZzEuYWRkX3JjKDE3
KTsKLSAgbXNnMi5hZGRfcmMoMTcpOwotICBzdHJpbmcgb3V0cHV0OwotICBNZXNzYWdlRGlmZmVy
ZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2VyLnNldF9yZXBvcnRfbWF0Y2hlcyh0cnVl
KTsKLSAgZGlmZmVyZW5jZXIuUmVwb3J0RGlmZmVyZW5jZXNUb1N0cmluZygmb3V0cHV0KTsKLQot
ICBkaWZmZXJlbmNlci5JZ25vcmVGaWVsZChtc2cxLkdldERlc2NyaXB0b3IoKS0+RmluZEZpZWxk
QnlOYW1lKCJjIikpOwotCi0gIEVYUEVDVF9UUlVFKGRpZmZlcmVuY2VyLkNvbXBhcmUobXNnMSwg
bXNnMikpOwotICBFWFBFQ1RfRVEoCi0gICAgICAiaWdub3JlZDogY1xuIgotICAgICAgIm1hdGNo
ZWQ6IHJjWzBdIDogMTNcbiIKLSAgICAgICJtYXRjaGVkOiByY1sxXSA6IDE3XG4iLAotICAgICAg
b3V0cHV0KTsKLX0KLQotVEVTVF9GKE1hdGNoaW5nVGVzdCwgUmVwb3J0TWF0Y2hlZEZvck1vdmVk
RmllbGRzKSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMSwgbXNn
MjsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZTo6SXRlbSogaXRlbSA9IG1z
ZzEuYWRkX2l0ZW0oKTsKLSAgaXRlbS0+c2V0X2EoNTMpOwotICBpdGVtLT5zZXRfYigiaGVsbG8i
KTsKLSAgaXRlbSA9IG1zZzIuYWRkX2l0ZW0oKTsKLSAgaXRlbS0+c2V0X2EoMjcpOwotICBpdGVt
ID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSg1Myk7Ci0gIGl0ZW0tPnNldF9iKCJo
ZWxsbyIpOwotICBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSgyNyk7Ci0g
IE1lc3NhZ2VEaWZmZXJlbmNlciBkaWZmZXJlbmNlcjsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9y
KiBkZXNjOwotICBkZXNjID0gbXNnMS5HZXREZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgi
aXRlbSIpOwotICBkaWZmZXJlbmNlci5UcmVhdEFzU2V0KGRlc2MpOwotCi0gIEVYUEVDVF9FUSgK
LSAgICAgICJtYXRjaGVkOiBpdGVtWzBdLmEgLT4gaXRlbVsxXS5hIDogNTNcbiIKLSAgICAgICJt
YXRjaGVkOiBpdGVtWzBdLmIgLT4gaXRlbVsxXS5iIDogXCJoZWxsb1wiXG4iCi0gICAgICAibW92
ZWQ6IGl0ZW1bMF0gLT4gaXRlbVsxXSA6IHsgYTogNTMgYjogXCJoZWxsb1wiIH1cbiIKLSAgICAg
ICJtYXRjaGVkOiBpdGVtWzFdLmEgLT4gaXRlbVswXS5hIDogMjdcbiIKLSAgICAgICJtb3ZlZDog
aXRlbVsxXSAtPiBpdGVtWzBdIDogeyBhOiAyNyB9XG4iLAotICAgICAgUnVuV2l0aFJlc3VsdCgm
ZGlmZmVyZW5jZXIsIG1zZzEsIG1zZzIsIHRydWUpKTsKLX0KLQotVEVTVF9GKE1hdGNoaW5nVGVz
dCwgTWF0Y2hlc0FwcGVhckluUG9zdFRyYXZlcnNhbE9yZGVyRm9yTW92ZWRGaWVsZHMpIHsKLSAg
cHJvdG9idWZfdW5pdHRlc3Q6OlRlc3REaWZmTWVzc2FnZSBtc2cxLCBtc2cyOwotICBwcm90b2J1
Zl91bml0dGVzdDo6VGVzdERpZmZNZXNzYWdlOjpJdGVtKiBpdGVtOwotICBwcm90b2J1Zl91bml0
dGVzdDo6VGVzdEZpZWxkKiBmaWVsZDsKLQotICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGRlc2M7
Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogbmVzdGVkX2Rlc2M7Ci0gIGNvbnN0IEZpZWxkRGVz
Y3JpcHRvciogZG91YmxlX25lc3RlZF9kZXNjOwotICBkZXNjID0gbXNnMS5HZXREZXNjcmlwdG9y
KCktPkZpbmRGaWVsZEJ5TmFtZSgiaXRlbSIpOwotICBuZXN0ZWRfZGVzYyA9IGRlc2MtPm1lc3Nh
Z2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInJtIik7Ci0gIGRvdWJsZV9uZXN0ZWRfZGVzYyA9
IG5lc3RlZF9kZXNjLT5tZXNzYWdlX3R5cGUoKS0+RmluZEZpZWxkQnlOYW1lKCJyYyIpOwotICBN
ZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVyZW5jZXI7Ci0gIGRpZmZlcmVuY2VyLlRyZWF0QXNTZXQo
ZGVzYyk7Ci0gIGRpZmZlcmVuY2VyLlRyZWF0QXNTZXQobmVzdGVkX2Rlc2MpOwotICBkaWZmZXJl
bmNlci5UcmVhdEFzU2V0KGRvdWJsZV9uZXN0ZWRfZGVzYyk7Ci0KLSAgaXRlbSA9IG1zZzEuYWRk
X2l0ZW0oKTsKLSAgZmllbGQgPSBpdGVtLT5hZGRfcm0oKTsKLSAgZmllbGQtPnNldF9jKDEpOwot
ICBmaWVsZC0+YWRkX3JjKDIpOwotICBmaWVsZC0+YWRkX3JjKDMpOwotICBmaWVsZCA9IGl0ZW0t
PmFkZF9ybSgpOwotICBmaWVsZC0+c2V0X2MoNCk7Ci0gIGZpZWxkLT5hZGRfcmMoNSk7Ci0gIGZp
ZWxkLT5hZGRfcmMoNik7Ci0gIGZpZWxkLT5hZGRfcmMoNyk7Ci0gIGl0ZW0gPSBtc2cyLmFkZF9p
dGVtKCk7Ci0gIGZpZWxkID0gaXRlbS0+YWRkX3JtKCk7Ci0gIGZpZWxkLT5zZXRfYyg0KTsKLSAg
ZmllbGQtPmFkZF9yYyg3KTsKLSAgZmllbGQtPmFkZF9yYyg2KTsKLSAgZmllbGQtPmFkZF9yYyg1
KTsKLSAgZmllbGQgPSBpdGVtLT5hZGRfcm0oKTsKLSAgZmllbGQtPnNldF9jKDEpOwotICBmaWVs
ZC0+YWRkX3JjKDMpOwotICBmaWVsZC0+YWRkX3JjKDIpOwotICBpdGVtID0gbXNnMS5hZGRfaXRl
bSgpOwotICBmaWVsZCA9IGl0ZW0tPmFkZF9ybSgpOwotICBmaWVsZC0+c2V0X2MoOCk7Ci0gIGZp
ZWxkLT5hZGRfcmMoMTApOwotICBmaWVsZC0+YWRkX3JjKDExKTsKLSAgZmllbGQtPmFkZF9yYyg5
KTsKLSAgaXRlbSA9IG1zZzIuYWRkX2l0ZW0oKTsKLSAgZmllbGQgPSBpdGVtLT5hZGRfcm0oKTsK
LSAgZmllbGQtPnNldF9jKDgpOwotICBmaWVsZC0+YWRkX3JjKDkpOwotICBmaWVsZC0+YWRkX3Jj
KDEwKTsKLSAgZmllbGQtPmFkZF9yYygxMSk7Ci0KLSAgRVhQRUNUX0VRKAotICAgICAgIm1hdGNo
ZWQ6IGl0ZW1bMF0ucm1bMF0uYyAtPiBpdGVtWzBdLnJtWzFdLmMgOiAxXG4iCi0gICAgICAibW92
ZWQ6IGl0ZW1bMF0ucm1bMF0ucmNbMF0gLT4gaXRlbVswXS5ybVsxXS5yY1sxXSA6IDJcbiIKLSAg
ICAgICJtb3ZlZDogaXRlbVswXS5ybVswXS5yY1sxXSAtPiBpdGVtWzBdLnJtWzFdLnJjWzBdIDog
M1xuIgotICAgICAgIm1vdmVkOiBpdGVtWzBdLnJtWzBdIC0+IGl0ZW1bMF0ucm1bMV0gOiB7IGM6
IDEgcmM6IDIgcmM6IDMgfVxuIgotICAgICAgIm1hdGNoZWQ6IGl0ZW1bMF0ucm1bMV0uYyAtPiBp
dGVtWzBdLnJtWzBdLmMgOiA0XG4iCi0gICAgICAibW92ZWQ6IGl0ZW1bMF0ucm1bMV0ucmNbMF0g
LT4gaXRlbVswXS5ybVswXS5yY1syXSA6IDVcbiIKLSAgICAgICJtYXRjaGVkOiBpdGVtWzBdLnJt
WzFdLnJjWzFdIC0+IGl0ZW1bMF0ucm1bMF0ucmNbMV0gOiA2XG4iCi0gICAgICAibW92ZWQ6IGl0
ZW1bMF0ucm1bMV0ucmNbMl0gLT4gaXRlbVswXS5ybVswXS5yY1swXSA6IDdcbiIKLSAgICAgICJt
b3ZlZDogaXRlbVswXS5ybVsxXSAtPiBpdGVtWzBdLnJtWzBdIDogeyBjOiA0IHJjOiA1IHJjOiA2
IHJjOiA3IH1cbiIKLSAgICAgICJtYXRjaGVkOiBpdGVtWzBdIDogeyBybSB7IGM6IDEgcmM6IDIg
cmM6IDMgfSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiBybSB7IGM6IDQgcmM6IDUgcmM6
IDYgcmM6IDcgfSB9XG4iCi0gICAgICAibWF0Y2hlZDogaXRlbVsxXS5ybVswXS5jIDogOFxuIgot
ICAgICAgIm1vdmVkOiBpdGVtWzFdLnJtWzBdLnJjWzBdIC0+IGl0ZW1bMV0ucm1bMF0ucmNbMV0g
OiAxMFxuIgotICAgICAgIm1vdmVkOiBpdGVtWzFdLnJtWzBdLnJjWzFdIC0+IGl0ZW1bMV0ucm1b
MF0ucmNbMl0gOiAxMVxuIgotICAgICAgIm1vdmVkOiBpdGVtWzFdLnJtWzBdLnJjWzJdIC0+IGl0
ZW1bMV0ucm1bMF0ucmNbMF0gOiA5XG4iCi0gICAgICAibWF0Y2hlZDogaXRlbVsxXS5ybVswXSA6
IHsgYzogOCByYzogMTAgcmM6IDExIHJjOiA5IH1cbiIKLSAgICAgICJtYXRjaGVkOiBpdGVtWzFd
IDogeyBybSB7IGM6IDggcmM6IDEwIHJjOiAxMSByYzogOSB9IH1cbiIsCi0gICAgICBSdW5XaXRo
UmVzdWx0KCZkaWZmZXJlbmNlciwgbXNnMSwgbXNnMiwgdHJ1ZSkpOwotfQotCi1URVNUX0YoTWF0
Y2hpbmdUZXN0LCBNYXRjaEFuZE1vZGlmaWVkSW50ZXJsZWF2ZVByb3Blcmx5KSB7Ci0gIHByb3Rv
YnVmX3VuaXR0ZXN0OjpUZXN0RGlmZk1lc3NhZ2UgbXNnMSwgbXNnMjsKLSAgcHJvdG9idWZfdW5p
dHRlc3Q6OlRlc3REaWZmTWVzc2FnZTo6SXRlbSogaXRlbTsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6
OlRlc3RGaWVsZCogZmllbGQ7Ci0KLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjOwotICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIG5lc3RlZF9rZXk7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRv
ciogbmVzdGVkX2Rlc2M7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZG91YmxlX25lc3RlZF9r
ZXk7Ci0gIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZG91YmxlX25lc3RlZF9kZXNjOwotICBkZXNj
ID0gbXNnMS5HZXREZXNjcmlwdG9yKCktPkZpbmRGaWVsZEJ5TmFtZSgiaXRlbSIpOwotICBuZXN0
ZWRfa2V5ID0gZGVzYy0+bWVzc2FnZV90eXBlKCktPkZpbmRGaWVsZEJ5TmFtZSgiYSIpOwotICBu
ZXN0ZWRfZGVzYyA9IGRlc2MtPm1lc3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInJtIik7
Ci0gIGRvdWJsZV9uZXN0ZWRfa2V5ID0gbmVzdGVkX2Rlc2MtPm1lc3NhZ2VfdHlwZSgpLT5GaW5k
RmllbGRCeU5hbWUoImMiKTsKLSAgZG91YmxlX25lc3RlZF9kZXNjID0gbmVzdGVkX2Rlc2MtPm1l
c3NhZ2VfdHlwZSgpLT5GaW5kRmllbGRCeU5hbWUoInJjIik7Ci0KLSAgTWVzc2FnZURpZmZlcmVu
Y2VyIGRpZmZlcmVuY2VyOwotICBkaWZmZXJlbmNlci5UcmVhdEFzTWFwKGRlc2MsIG5lc3RlZF9r
ZXkpOwotICBkaWZmZXJlbmNlci5UcmVhdEFzTWFwKG5lc3RlZF9kZXNjLCBkb3VibGVfbmVzdGVk
X2tleSk7Ci0gIGRpZmZlcmVuY2VyLlRyZWF0QXNTZXQoZG91YmxlX25lc3RlZF9kZXNjKTsKLQot
ICBpdGVtID0gbXNnMS5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSgxKTsKLSAgZmllbGQgPSBp
dGVtLT5hZGRfcm0oKTsKLSAgZmllbGQtPnNldF9jKDIpOwotICBmaWVsZC0+YWRkX3JjKDMpOwot
ICBmaWVsZC0+YWRkX3JjKDQpOwotICBmaWVsZCA9IGl0ZW0tPmFkZF9ybSgpOwotICBmaWVsZC0+
c2V0X2MoNSk7Ci0gIGZpZWxkLT5hZGRfcmMoNik7Ci0gIGZpZWxkLT5hZGRfcmMoNyk7Ci0gIGZp
ZWxkLT5hZGRfcmMoOCk7Ci0gIGl0ZW0gPSBtc2cxLmFkZF9pdGVtKCk7Ci0gIGl0ZW0tPnNldF9h
KDkpOwotICBmaWVsZCA9IGl0ZW0tPmFkZF9ybSgpOwotICBmaWVsZC0+c2V0X2MoMTApOwotICBm
aWVsZC0+YWRkX3JjKDExKTsKLSAgZmllbGQtPmFkZF9yYygxMik7Ci0gIGZpZWxkID0gaXRlbS0+
YWRkX3JtKCk7Ci0gIGZpZWxkLT5zZXRfYygxMyk7Ci0KLSAgaXRlbSA9IG1zZzIuYWRkX2l0ZW0o
KTsKLSAgaXRlbS0+c2V0X2EoMSk7Ci0gIGZpZWxkID0gaXRlbS0+YWRkX3JtKCk7Ci0gIGZpZWxk
LT5zZXRfYyg1KTsKLSAgZmllbGQtPmFkZF9yYyg4KTsKLSAgZmllbGQtPmFkZF9yYyg4KTsKLSAg
ZmllbGQtPmFkZF9yYyg2KTsKLSAgZmllbGQgPSBpdGVtLT5hZGRfcm0oKTsKLSAgZmllbGQtPnNl
dF9jKDMpOwotICBmaWVsZC0+YWRkX3JjKDIpOwotICBmaWVsZC0+YWRkX3JjKDQpOwotICBpdGVt
ID0gbXNnMi5hZGRfaXRlbSgpOwotICBpdGVtLT5zZXRfYSg5KTsKLSAgZmllbGQgPSBpdGVtLT5h
ZGRfcm0oKTsKLSAgZmllbGQtPnNldF9jKDEwKTsKLSAgZmllbGQtPmFkZF9yYygxMik7Ci0gIGZp
ZWxkLT5hZGRfcmMoMTEpOwotICBmaWVsZCA9IGl0ZW0tPmFkZF9ybSgpOwotICBmaWVsZC0+c2V0
X2MoMTMpOwotCi0gIEVYUEVDVF9FUSgKLSAgICAgICJtYXRjaGVkOiBpdGVtWzBdLmEgOiAxXG4i
Ci0gICAgICAibWF0Y2hlZDogaXRlbVswXS5ybVsxXS5jIC0+IGl0ZW1bMF0ucm1bMF0uYyA6IDVc
biIKLSAgICAgICJtb3ZlZDogaXRlbVswXS5ybVsxXS5yY1swXSAtPiBpdGVtWzBdLnJtWzBdLnJj
WzJdIDogNlxuIgotICAgICAgIm1vdmVkOiBpdGVtWzBdLnJtWzFdLnJjWzJdIC0+IGl0ZW1bMF0u
cm1bMF0ucmNbMF0gOiA4XG4iCi0gICAgICAiYWRkZWQ6IGl0ZW1bMF0ucm1bMF0ucmNbMV06IDhc
biIKLSAgICAgICJkZWxldGVkOiBpdGVtWzBdLnJtWzFdLnJjWzFdOiA3XG4iCi0gICAgICAibW9k
aWZpZWQ6IGl0ZW1bMF0ucm1bMV0gLT4gaXRlbVswXS5ybVswXTogeyBjOiA1IHJjOiA2IHJjOiA3
IHJjOiA4IH0gLT4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgeyBjOiA1IHJjOiA4IHJjOiA4IHJjOiA2IH1cbiIKLSAgICAgICJhZGRlZDogaXRlbVsw
XS5ybVsxXTogeyBjOiAzIHJjOiAyIHJjOiA0IH1cbiIKLSAgICAgICJkZWxldGVkOiBpdGVtWzBd
LnJtWzBdOiB7IGM6IDIgcmM6IDMgcmM6IDQgfVxuIgotICAgICAgIm1vZGlmaWVkOiBpdGVtWzBd
OiB7IGE6IDEgcm0geyBjOiAyIHJjOiAzIHJjOiA0IH0iCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiBybSB7IGM6IDUgcmM6IDYgcmM6IDcgcmM6IDggfSB9IC0+IgotICAgICAgICAg
ICAgICAgICAgICAgICAgIiB7IGE6IDEgcm0geyBjOiA1IHJjOiA4IHJjOiA4IHJjOiA2IH0iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBybSB7IGM6IDMgcmM6IDIgcmM6IDQgfSB9
XG4iCi0gICAgICAibWF0Y2hlZDogaXRlbVsxXS5hIDogOVxuIgotICAgICAgIm1hdGNoZWQ6IGl0
ZW1bMV0ucm1bMF0uYyA6IDEwXG4iCi0gICAgICAibW92ZWQ6IGl0ZW1bMV0ucm1bMF0ucmNbMF0g
LT4gaXRlbVsxXS5ybVswXS5yY1sxXSA6IDExXG4iCi0gICAgICAibW92ZWQ6IGl0ZW1bMV0ucm1b
MF0ucmNbMV0gLT4gaXRlbVsxXS5ybVswXS5yY1swXSA6IDEyXG4iCi0gICAgICAibWF0Y2hlZDog
aXRlbVsxXS5ybVswXSA6IHsgYzogMTAgcmM6IDExIHJjOiAxMiB9XG4iCi0gICAgICAibWF0Y2hl
ZDogaXRlbVsxXS5ybVsxXS5jIDogMTNcbiIKLSAgICAgICJtYXRjaGVkOiBpdGVtWzFdLnJtWzFd
IDogeyBjOiAxMyB9XG4iCi0gICAgICAibWF0Y2hlZDogaXRlbVsxXSA6IHsgYTogOSBybSB7IGM6
IDEwIHJjOiAxMSByYzogMTIgfSBybSB7IGM6IDEzIH0gfVxuIiwKLSAgICAgIFJ1bldpdGhSZXN1
bHQoJmRpZmZlcmVuY2VyLCBtc2cxLCBtc2cyLCBmYWxzZSkpOwotfQotCi1URVNUX0YoTWF0Y2hp
bmdUZXN0LCBNYXRjaGluZ1dvcmtzV2l0aEV4dGVuc2lvbnMpIHsKLSAgcHJvdG9idWZfdW5pdHRl
c3Q6OlRlc3RBbGxFeHRlbnNpb25zIG1zZzEsIG1zZzI7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpU
ZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2UqIG5lc3RlZDsKLSAgdXNpbmcgcHJvdG9idWZfdW5p
dHRlc3Q6OnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbjsKLQotICBjb25zdCBGaWxl
RGVzY3JpcHRvciogZGVzY3JpcHRvcjsKLSAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjOwot
ICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIG5lc3RlZF9rZXk7Ci0gIGRlc2NyaXB0b3IgPSBtc2cx
LkdldERlc2NyaXB0b3IoKS0+ZmlsZSgpOwotICBkZXNjID0gZGVzY3JpcHRvci0+RmluZEV4dGVu
c2lvbkJ5TmFtZSgicmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uIik7Ci0gIEFTU0VS
VF9GQUxTRShkZXNjID09IE5VTEwpOwotICBuZXN0ZWRfa2V5ID0gZGVzYy0+bWVzc2FnZV90eXBl
KCktPkZpbmRGaWVsZEJ5TmFtZSgiYmIiKTsKLQotICBNZXNzYWdlRGlmZmVyZW5jZXIgZGlmZmVy
ZW5jZXI7Ci0gIGRpZmZlcmVuY2VyLlRyZWF0QXNNYXAoZGVzYywgbmVzdGVkX2tleSk7Ci0KLSAg
bmVzdGVkID0gbXNnMS5BZGRFeHRlbnNpb24ocmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5z
aW9uKTsKLSAgbmVzdGVkLT5zZXRfYmIoNyk7Ci0gIG5lc3RlZCA9IG1zZzEuQWRkRXh0ZW5zaW9u
KHJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbik7Ci0gIG5lc3RlZC0+c2V0X2JiKDEz
KTsKLSAgbmVzdGVkID0gbXNnMS5BZGRFeHRlbnNpb24ocmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2Vf
ZXh0ZW5zaW9uKTsKLSAgbmVzdGVkLT5zZXRfYmIoMTEpOwotICBuZXN0ZWQgPSBtc2cyLkFkZEV4
dGVuc2lvbihyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pOwotICBuZXN0ZWQtPnNl
dF9iYigxMSk7Ci0gIG5lc3RlZCA9IG1zZzIuQWRkRXh0ZW5zaW9uKHJlcGVhdGVkX25lc3RlZF9t
ZXNzYWdlX2V4dGVuc2lvbik7Ci0gIG5lc3RlZC0+c2V0X2JiKDEzKTsKLSAgbmVzdGVkID0gbXNn
Mi5BZGRFeHRlbnNpb24ocmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uKTsKLSAgbmVz
dGVkLT5zZXRfYmIoNyk7Ci0KLSAgRVhQRUNUX0VRKAotICAgICAgIm1hdGNoZWQ6IChwcm90b2J1
Zl91bml0dGVzdC5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pWzBdLmJiIC0+Igot
ICAgICAgICAgICAgICAiIChwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9uZXN0ZWRfbWVzc2Fn
ZV9leHRlbnNpb24pWzJdLmJiIDogN1xuIgotICAgICAgIm1vdmVkOiAocHJvdG9idWZfdW5pdHRl
c3QucmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uKVswXSAtPiIKLSAgICAgICAgICAg
ICIgKHByb3RvYnVmX3VuaXR0ZXN0LnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbilb
Ml0gOiIKLSAgICAgICAgICAgICAgICAiIHsgYmI6IDcgfVxuIgotICAgICAgIm1hdGNoZWQ6IChw
cm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pWzFdLmJi
IDoiCi0gICAgICAgICAgICAgICAgICAiIDEzXG4iCi0gICAgICAibWF0Y2hlZDogKHByb3RvYnVm
X3VuaXR0ZXN0LnJlcGVhdGVkX25lc3RlZF9tZXNzYWdlX2V4dGVuc2lvbilbMV0gOiIKLSAgICAg
ICAgICAgICAgICAgICIgeyBiYjogMTMgfVxuIgotICAgICAgIm1hdGNoZWQ6IChwcm90b2J1Zl91
bml0dGVzdC5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24pWzJdLmJiIC0+IgotICAg
ICAgICAgICAgICAiIChwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9l
eHRlbnNpb24pWzBdLmJiIDoiCi0gICAgICAgICAgICAgICAgICAiIDExXG4iCi0gICAgICAibW92
ZWQ6IChwcm90b2J1Zl91bml0dGVzdC5yZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24p
WzJdIC0+IgotICAgICAgICAgICAgIiAocHJvdG9idWZfdW5pdHRlc3QucmVwZWF0ZWRfbmVzdGVk
X21lc3NhZ2VfZXh0ZW5zaW9uKVswXSA6IgotICAgICAgICAgICAgICAgICIgeyBiYjogMTEgfVxu
IiwKLSAgICAgIFJ1bldpdGhSZXN1bHQoJmRpZmZlcmVuY2VyLCBtc2cxLCBtc2cyLCB0cnVlKSk7
Ci19Ci0KLVRFU1QoQW55VGVzdCwgU2ltcGxlKSB7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0
RmllbGQgdmFsdWUxLCB2YWx1ZTI7Ci0gIHZhbHVlMS5zZXRfYSgyMCk7Ci0gIHZhbHVlMi5zZXRf
YSgyMSk7Ci0KLSAgcHJvdG9idWZfdW5pdHRlc3Q6OlRlc3RBbnkgbTEsIG0yOwotICBtMS5tdXRh
YmxlX2FueV92YWx1ZSgpLT5QYWNrRnJvbSh2YWx1ZTEpOwotICBtMi5tdXRhYmxlX2FueV92YWx1
ZSgpLT5QYWNrRnJvbSh2YWx1ZTIpOwotICB1dGlsOjpNZXNzYWdlRGlmZmVyZW5jZXIgbWVzc2Fn
ZV9kaWZmZXJlbmNlcjsKLSAgc3RyaW5nIGRpZmZlcmVuY2Vfc3RyaW5nOwotICBtZXNzYWdlX2Rp
ZmZlcmVuY2VyLlJlcG9ydERpZmZlcmVuY2VzVG9TdHJpbmcoJmRpZmZlcmVuY2Vfc3RyaW5nKTsK
LSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2VfZGlmZmVyZW5jZXIuQ29tcGFyZShtMSwgbTIpKTsKLSAg
RVhQRUNUX0VRKCJtb2RpZmllZDogYW55X3ZhbHVlLmE6IDIwIC0+IDIxXG4iLCBkaWZmZXJlbmNl
X3N0cmluZyk7Ci19Ci0KLVRFU1QoQW55dGVzdCwgVHJlYXRBc1NldCkgewotICBwcm90b2J1Zl91
bml0dGVzdDo6VGVzdEZpZWxkIHZhbHVlMSwgdmFsdWUyOwotICB2YWx1ZTEuc2V0X2EoMjApOwot
ICB2YWx1ZTEuc2V0X2IoMzApOwotICB2YWx1ZTIuc2V0X2EoMjApOwotICB2YWx1ZTIuc2V0X2Io
MzEpOwotCi0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QW55IG0xLCBtMjsKLSAgbTEuYWRkX3Jl
cGVhdGVkX2FueV92YWx1ZSgpLT5QYWNrRnJvbSh2YWx1ZTEpOwotICBtMS5hZGRfcmVwZWF0ZWRf
YW55X3ZhbHVlKCktPlBhY2tGcm9tKHZhbHVlMik7Ci0gIG0yLmFkZF9yZXBlYXRlZF9hbnlfdmFs
dWUoKS0+UGFja0Zyb20odmFsdWUyKTsKLSAgbTIuYWRkX3JlcGVhdGVkX2FueV92YWx1ZSgpLT5Q
YWNrRnJvbSh2YWx1ZTEpOwotCi0gIHV0aWw6Ok1lc3NhZ2VEaWZmZXJlbmNlciBtZXNzYWdlX2Rp
ZmZlcmVuY2VyOwotICBtZXNzYWdlX2RpZmZlcmVuY2VyLlRyZWF0QXNTZXQoR2V0RmllbGREZXNj
cmlwdG9yKG0xLCAicmVwZWF0ZWRfYW55X3ZhbHVlIikpOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
X2RpZmZlcmVuY2VyLkNvbXBhcmUobTEsIG0yKSk7Ci19Ci0KLQotfSAgLy8gbmFtZXNwYWNlCi19
ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVzcGFjZSBnb29nbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL21lc3NhZ2VfZGlmZmVyZW5jZXJfdW5pdHRlc3Qu
cHJvdG8gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9tZXNzYWdlX2RpZmZlcmVuY2VyX3VuaXR0
ZXN0LnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTg3NzVmMTRjYzQ3MDY1
NTBiODJhMzRjOWVjMDYzYjA2MTJhMWMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL21lc3NhZ2VfZGlmZmVyZW5j
ZXJfdW5pdHRlc3QucHJvdG8KKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vLyBQcm90
b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHly
aWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNv
bSAoS2VudG9uIFZhcmRhKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMg
ZGVzaWduIGJ5Ci0vLyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0v
LwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIG1lc3NhZ2VzIGZvciB0ZXN0aW5nIHJlcGVhdGVkIGZp
ZWxkIGNvbXBhcmlzb24KLQotc3ludGF4ID0gInByb3RvMiI7Ci1wYWNrYWdlIHByb3RvYnVmX3Vu
aXR0ZXN0OwotCi1vcHRpb24gb3B0aW1pemVfZm9yID0gU1BFRUQ7Ci0KLW1lc3NhZ2UgVGVzdEZp
ZWxkIHsKLSAgb3B0aW9uYWwgaW50MzIgYSA9IDM7Ci0gIG9wdGlvbmFsIGludDMyIGIgPSA0Owot
ICBvcHRpb25hbCBpbnQzMiBjID0gMTsKLSAgcmVwZWF0ZWQgaW50MzIgcmMgPSAyOwotICBvcHRp
b25hbCBUZXN0RmllbGQgbSA9IDU7Ci0KLSAgZXh0ZW5kIFRlc3REaWZmTWVzc2FnZSB7Ci0gICAg
b3B0aW9uYWwgVGVzdEZpZWxkIHRmID0gMTAwOwotICB9Ci19Ci0KLW1lc3NhZ2UgVGVzdERpZmZN
ZXNzYWdlIHsKLSAgcmVwZWF0ZWQgZ3JvdXAgSXRlbSA9IDEgewotICAgIG9wdGlvbmFsIGludDMy
ICBhICA9ICAyOyAgICAgLy8gVGVzdCBiYXNpYyByZXBlYXRlZCBmaWVsZCBjb21wYXJpc29uLgot
ICAgIG9wdGlvbmFsIHN0cmluZyBiICA9ICA0OyAgICAgLy8gVGVzdCBiYXNpYyByZXBlYXRlZCBm
aWVsZCBjb21wYXJpc29uLgotICAgIHJlcGVhdGVkIGludDMyICByYSA9ICAzOyAgICAgLy8gVGVz
dCBTZXRPZlNldCBDb21wYXJpc29uLgotICAgIHJlcGVhdGVkIHN0cmluZyByYiA9ICA1OyAgICAg
Ly8gVGVzdCBUcmVhdEFzTWFwIHdoZW4ga2V5IGlzIHJlcGVhdGVkCi0gICAgb3B0aW9uYWwgVGVz
dEZpZWxkIG0gID0gNjsgICAvLyBUZXN0IFRyZWF0QXNNYXAgd2hlbiBrZXkgaXMgYSBtZXNzYWdl
Ci0gICAgcmVwZWF0ZWQgVGVzdEZpZWxkIHJtID0gNzsgICAvLyBUZXN0IFRyZWF0QXNNYXAgd2hl
biBrZXkgaXMgYSByZXBlYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bWVzc2FnZQotICB9Ci0KLSAgb3B0aW9uYWwgaW50MzIgIHYgID0gMTMgW2RlcHJlY2F0ZWQgPSB0
cnVlXTsKLSAgb3B0aW9uYWwgc3RyaW5nIHcgID0gMTQ7Ci0gIG9wdGlvbmFsIFRlc3RGaWVsZCBt
ICA9IDE1OwotICByZXBlYXRlZCBpbnQzMiAgcnYgPSAxMTsgICAgICAgLy8gVGVzdCBmb3IgY29t
YmluYXRpb25zCi0gIHJlcGVhdGVkIHN0cmluZyBydyA9IDEwOyAgICAgICAvLyBUZXN0IGZvciBj
b21iaW5hdGlvbnMKLSAgcmVwZWF0ZWQgVGVzdEZpZWxkIHJtID0gMTIgW2RlcHJlY2F0ZWQgPSB0
cnVlXTsgICAgLy8gVGVzdCBmb3IgY29tYmluYXRpb25zCi0KLSAgZXh0ZW5zaW9ucyAxMDAgdG8g
MTk5OwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90aW1lX3V0aWwu
Y2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3Rv
YnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90aW1lX3V0aWwuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM3ODJkNjkxYTg3NGJiZjA3NWZhYmJhOTFkNDMxY2M4NGU5MjVmZjQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvdGltZV91dGlsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTI1ICswLDAg
QEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1h
dAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3V0aWwvdGltZV91dGlsLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
c3R1YnMvdGltZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9pbnQxMjguaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi9zdHVicy9zdHJpbmdwcmludGYuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvZHVyYXRpb24ucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGltZXN0YW1w
LnBiLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVz
cGFjZSB1dGlsIHsKLQotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6VGltZXN0YW1wOwotdXNpbmcg
Z29vZ2xlOjpwcm90b2J1Zjo6RHVyYXRpb247Ci0KLW5hbWVzcGFjZSB7Ci1zdGF0aWMgY29uc3Qg
aW50IGtOYW5vc1BlclNlY29uZCA9IDEwMDAwMDAwMDA7Ci1zdGF0aWMgY29uc3QgaW50IGtNaWNy
b3NQZXJTZWNvbmQgPSAxMDAwMDAwOwotc3RhdGljIGNvbnN0IGludCBrTWlsbGlzUGVyU2Vjb25k
ID0gMTAwMDsKLXN0YXRpYyBjb25zdCBpbnQga05hbm9zUGVyTWlsbGlzZWNvbmQgPSAxMDAwMDAw
Owotc3RhdGljIGNvbnN0IGludCBrTWljcm9zUGVyTWlsbGlzZWNvbmQgPSAxMDAwOwotc3RhdGlj
IGNvbnN0IGludCBrTmFub3NQZXJNaWNyb3NlY29uZCA9IDEwMDA7Ci1zdGF0aWMgY29uc3QgaW50
IGtTZWNvbmRzUGVyTWludXRlID0gNjA7ICAvLyBOb3RlIHRoYXQgd2UgaWdub3JlIGxlYXAgc2Vj
b25kcy4KLXN0YXRpYyBjb25zdCBpbnQga1NlY29uZHNQZXJIb3VyID0gMzYwMDsKLXN0YXRpYyBj
b25zdCBjaGFyIGtUaW1lc3RhbXBGb3JtYXRbXSA9ICIlRTRZLSVtLSVkVCVIOiVNOiVTIjsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1UIENyZWF0ZU5vcm1hbGl6ZWQoaW50NjQgc2Vjb25kcywg
aW50NjQgbmFub3MpOwotCi10ZW1wbGF0ZSA8PgotVGltZXN0YW1wIENyZWF0ZU5vcm1hbGl6ZWQo
aW50NjQgc2Vjb25kcywgaW50NjQgbmFub3MpIHsKLSAgLy8gTWFrZSBzdXJlIG5hbm9zIGlzIGlu
IHRoZSByYW5nZS4KLSAgaWYgKG5hbm9zIDw9IC1rTmFub3NQZXJTZWNvbmQgfHwgbmFub3MgPj0g
a05hbm9zUGVyU2Vjb25kKSB7Ci0gICAgc2Vjb25kcyArPSBuYW5vcyAvIGtOYW5vc1BlclNlY29u
ZDsKLSAgICBuYW5vcyA9IG5hbm9zICUga05hbm9zUGVyU2Vjb25kOwotICB9Ci0gIC8vIEZvciBU
aW1lc3RhbXAgbmFub3Mgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBbMCwgOTk5OTk5OTk5XQotICBp
ZiAobmFub3MgPCAwKSB7Ci0gICAgc2Vjb25kcyAtPSAxOwotICAgIG5hbm9zICs9IGtOYW5vc1Bl
clNlY29uZDsKLSAgfQotICBHT09HTEVfRENIRUNLKHNlY29uZHMgPj0gVGltZVV0aWw6OmtUaW1l
c3RhbXBNaW5TZWNvbmRzICYmCi0gICAgICAgICBzZWNvbmRzIDw9IFRpbWVVdGlsOjprVGltZXN0
YW1wTWF4U2Vjb25kcyk7Ci0gIFRpbWVzdGFtcCByZXN1bHQ7Ci0gIHJlc3VsdC5zZXRfc2Vjb25k
cyhzZWNvbmRzKTsKLSAgcmVzdWx0LnNldF9uYW5vcyhzdGF0aWNfY2FzdDxpbnQzMj4obmFub3Mp
KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGUgPD4KLUR1cmF0aW9uIENyZWF0ZU5v
cm1hbGl6ZWQoaW50NjQgc2Vjb25kcywgaW50NjQgbmFub3MpIHsKLSAgLy8gTWFrZSBzdXJlIG5h
bm9zIGlzIGluIHRoZSByYW5nZS4KLSAgaWYgKG5hbm9zIDw9IC1rTmFub3NQZXJTZWNvbmQgfHwg
bmFub3MgPj0ga05hbm9zUGVyU2Vjb25kKSB7Ci0gICAgc2Vjb25kcyArPSBuYW5vcyAvIGtOYW5v
c1BlclNlY29uZDsKLSAgICBuYW5vcyA9IG5hbm9zICUga05hbm9zUGVyU2Vjb25kOwotICB9Ci0g
IC8vIG5hbm9zIHNob3VsZCBoYXZlIHRoZSBzYW1lIHNpZ24gYXMgc2Vjb25kcy4KLSAgaWYgKHNl
Y29uZHMgPCAwICYmIG5hbm9zID4gMCkgewotICAgIHNlY29uZHMgKz0gMTsKLSAgICBuYW5vcyAt
PSBrTmFub3NQZXJTZWNvbmQ7Ci0gIH0gZWxzZSBpZiAoc2Vjb25kcyA+IDAgJiYgbmFub3MgPCAw
KSB7Ci0gICAgc2Vjb25kcyAtPSAxOwotICAgIG5hbm9zICs9IGtOYW5vc1BlclNlY29uZDsKLSAg
fQotICBHT09HTEVfRENIRUNLKHNlY29uZHMgPj0gVGltZVV0aWw6OmtEdXJhdGlvbk1pblNlY29u
ZHMgJiYKLSAgICAgICAgIHNlY29uZHMgPD0gVGltZVV0aWw6OmtEdXJhdGlvbk1heFNlY29uZHMp
OwotICBEdXJhdGlvbiByZXN1bHQ7Ci0gIHJlc3VsdC5zZXRfc2Vjb25kcyhzZWNvbmRzKTsKLSAg
cmVzdWx0LnNldF9uYW5vcyhzdGF0aWNfY2FzdDxpbnQzMj4obmFub3MpKTsKLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotLy8gRm9ybWF0IG5hbm9zZWNvbmRzIHdpdGggZWl0aGVyIDMsIDYsIG9yIDkg
ZGlnaXRzIGRlcGVuZGluZyBvbiB0aGUgcmVxdWlyZWQKLS8vIHByZWNpc2lvbiB0byByZXByZXNl
bnQgdGhlIGV4YWN0IHZhbHVlLgotc3RyaW5nIEZvcm1hdE5hbm9zKGludDMyIG5hbm9zKSB7Ci0g
IGlmIChuYW5vcyAlIGtOYW5vc1Blck1pbGxpc2Vjb25kID09IDApIHsKLSAgICByZXR1cm4gU3Ry
aW5nUHJpbnRmKCIlMDNkIiwgbmFub3MgLyBrTmFub3NQZXJNaWxsaXNlY29uZCk7Ci0gIH0gZWxz
ZSBpZiAobmFub3MgJSBrTmFub3NQZXJNaWNyb3NlY29uZCA9PSAwKSB7Ci0gICAgcmV0dXJuIFN0
cmluZ1ByaW50ZigiJTA2ZCIsIG5hbm9zIC8ga05hbm9zUGVyTWljcm9zZWNvbmQpOwotICB9IGVs
c2UgewotICAgIHJldHVybiBTdHJpbmdQcmludGYoIiUwOWQiLCBuYW5vcyk7Ci0gIH0KLX0KLQot
c3RyaW5nIEZvcm1hdFRpbWUoaW50NjQgc2Vjb25kcywgaW50MzIgbmFub3MpIHsKLSAgcmV0dXJu
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkZvcm1hdFRpbWUoc2Vjb25kcywgbmFub3Mp
OwotfQotCi1ib29sIFBhcnNlVGltZShjb25zdCBzdHJpbmcmIHZhbHVlLCBpbnQ2NCogc2Vjb25k
cywgaW50MzIqIG5hbm9zKSB7Ci0gIHJldHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpQYXJzZVRpbWUodmFsdWUsIHNlY29uZHMsIG5hbm9zKTsKLX0KLQotdm9pZCBDdXJyZW50VGlt
ZShpbnQ2NCogc2Vjb25kcywgaW50MzIqIG5hbm9zKSB7Ci0gIHJldHVybiA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRDdXJyZW50VGltZShzZWNvbmRzLCBuYW5vcyk7Ci19Ci0KLS8v
IFRydW5jYXRlcyB0aGUgcmVtYWluZGVyIHBhcnQgYWZ0ZXIgZGl2aXNpb24uCi1pbnQ2NCBSb3Vu
ZFRvd2FyZFplcm8oaW50NjQgdmFsdWUsIGludDY0IGRpdmlkZXIpIHsKLSAgaW50NjQgcmVzdWx0
ID0gdmFsdWUgLyBkaXZpZGVyOwotICBpbnQ2NCByZW1haW5kZXIgPSB2YWx1ZSAlIGRpdmlkZXI7
Ci0gIC8vIEJlZm9yZSBDKysxMSwgdGhlIHNpZ24gb2YgdGhlIHJlbWFpbmRlciBpcyBpbXBsZW1l
bnRhdGlvbiBkZXBlbmRlbnQgaWYKLSAgLy8gYW55IG9mIHRoZSBvcGVyYW5kcyBpcyBuZWdhdGl2
ZS4gSGVyZSB3ZSB0cnkgdG8gZW5mb3JjZSBDKysxMSdzICJyb3VuZGVkCi0gIC8vIHRvd2FyZCB6
ZXJvIiBzZW1hbnRpY3MuIEZvciBleGFtcGxlLCBmb3IgKC01KSAvIDIgYW4gaW1wbGVtZW50YXRp
b24gbWF5Ci0gIC8vIGdpdmUgLTMgYXMgdGhlIHJlc3VsdCB3aXRoIHRoZSByZW1haW5kZXIgYmVp
bmcgMS4gVGhpcyBmdW5jdGlvbiBlbnN1cmVzCi0gIC8vIHdlIGFsd2F5cyByZXR1cm4gLTIgKGNs
b3NlciB0byB6ZXJvKSByZWdhcmRsZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KLSAgaWYgKHJl
c3VsdCA8IDAgJiYgcmVtYWluZGVyID4gMCkgewotICAgIHJldHVybiByZXN1bHQgKyAxOwotICB9
IGVsc2UgewotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KLX0gIC8vIG5hbWVzcGFjZQotCi1z
dHJpbmcgVGltZVV0aWw6OlRvU3RyaW5nKGNvbnN0IFRpbWVzdGFtcCYgdGltZXN0YW1wKSB7Ci0g
IHJldHVybiBGb3JtYXRUaW1lKHRpbWVzdGFtcC5zZWNvbmRzKCksIHRpbWVzdGFtcC5uYW5vcygp
KTsKLX0KLQotYm9vbCBUaW1lVXRpbDo6RnJvbVN0cmluZyhjb25zdCBzdHJpbmcmIHZhbHVlLCBU
aW1lc3RhbXAqIHRpbWVzdGFtcCkgewotICBpbnQ2NCBzZWNvbmRzOwotICBpbnQzMiBuYW5vczsK
LSAgaWYgKCFQYXJzZVRpbWUodmFsdWUsICZzZWNvbmRzLCAmbmFub3MpKSB7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0gICp0aW1lc3RhbXAgPSBDcmVhdGVOb3JtYWxpemVkPFRpbWVzdGFtcD4o
c2Vjb25kcywgbmFub3MpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotVGltZXN0YW1wIFRpbWVVdGls
OjpHZXRDdXJyZW50VGltZSgpIHsKLSAgaW50NjQgc2Vjb25kczsKLSAgaW50MzIgbmFub3M7Ci0g
IEN1cnJlbnRUaW1lKCZzZWNvbmRzLCAmbmFub3MpOwotICByZXR1cm4gQ3JlYXRlTm9ybWFsaXpl
ZDxUaW1lc3RhbXA+KHNlY29uZHMsIG5hbm9zKTsKLX0KLQotVGltZXN0YW1wIFRpbWVVdGlsOjpH
ZXRFcG9jaCgpIHsgcmV0dXJuIFRpbWVzdGFtcCgpOyB9Ci0KLXN0cmluZyBUaW1lVXRpbDo6VG9T
dHJpbmcoY29uc3QgRHVyYXRpb24mIGR1cmF0aW9uKSB7Ci0gIHN0cmluZyByZXN1bHQ7Ci0gIGlu
dDY0IHNlY29uZHMgPSBkdXJhdGlvbi5zZWNvbmRzKCk7Ci0gIGludDMyIG5hbm9zID0gZHVyYXRp
b24ubmFub3MoKTsKLSAgaWYgKHNlY29uZHMgPCAwIHx8IG5hbm9zIDwgMCkgewotICAgIHJlc3Vs
dCArPSAiLSI7Ci0gICAgc2Vjb25kcyA9IC1zZWNvbmRzOwotICAgIG5hbm9zID0gLW5hbm9zOwot
ICB9Ci0gIHJlc3VsdCArPSBTdHJpbmdQcmludGYoIiUiIEdPT0dMRV9MTF9GT1JNQVQgImQiLCBz
ZWNvbmRzKTsKLSAgaWYgKG5hbm9zICE9IDApIHsKLSAgICByZXN1bHQgKz0gIi4iICsgRm9ybWF0
TmFub3MobmFub3MpOwotICB9Ci0gIHJlc3VsdCArPSAicyI7Ci0gIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXN0YXRpYyBpbnQ2NCBQb3coaW50NjQgeCwgaW50IHkpIHsKLSAgaW50NjQgcmVzdWx0ID0g
MTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB5OyArK2kpIHsKLSAgICByZXN1bHQgKj0geDsKLSAg
fQotICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFRpbWVVdGlsOjpGcm9tU3RyaW5nKGNvbnN0
IHN0cmluZyYgdmFsdWUsIER1cmF0aW9uKiBkdXJhdGlvbikgewotICBpZiAodmFsdWUubGVuZ3Ro
KCkgPD0gMSB8fCB2YWx1ZVt2YWx1ZS5sZW5ndGgoKSAtIDFdICE9ICdzJykgewotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotICBib29sIG5lZ2F0aXZlID0gKHZhbHVlWzBdID09ICctJyk7Ci0gIGlu
dCBzaWduX2xlbmd0aCA9IChuZWdhdGl2ZSA/IDEgOiAwKTsKLSAgLy8gUGFyc2UgdGhlIGR1cmF0
aW9uIHZhbHVlIGFzIHR3byBpbnRlZ2VycyByYXRoZXIgdGhhbiBhIGZsb2F0IHZhbHVlCi0gIC8v
IHRvIGF2b2lkIHByZWNpc2lvbiBsb3NzLgotICBzdHJpbmcgc2Vjb25kc19wYXJ0LCBuYW5vc19w
YXJ0OwotICBzaXplX3QgcG9zID0gdmFsdWUuZmluZF9sYXN0X29mKCIuIik7Ci0gIGlmIChwb3Mg
PT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgc2Vjb25kc19wYXJ0ID0gdmFsdWUuc3Vic3RyKHNpZ25f
bGVuZ3RoLCB2YWx1ZS5sZW5ndGgoKSAtIDEgLSBzaWduX2xlbmd0aCk7Ci0gICAgbmFub3NfcGFy
dCA9ICIwIjsKLSAgfSBlbHNlIHsKLSAgICBzZWNvbmRzX3BhcnQgPSB2YWx1ZS5zdWJzdHIoc2ln
bl9sZW5ndGgsIHBvcyAtIHNpZ25fbGVuZ3RoKTsKLSAgICBuYW5vc19wYXJ0ID0gdmFsdWUuc3Vi
c3RyKHBvcyArIDEsIHZhbHVlLmxlbmd0aCgpIC0gcG9zIC0gMik7Ci0gIH0KLSAgY2hhciogZW5k
OwotICBpbnQ2NCBzZWNvbmRzID0gc3RydG82NChzZWNvbmRzX3BhcnQuY19zdHIoKSwgJmVuZCwg
MTApOwotICBpZiAoZW5kICE9IHNlY29uZHNfcGFydC5jX3N0cigpICsgc2Vjb25kc19wYXJ0Lmxl
bmd0aCgpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGludDY0IG5hbm9zID0gc3RydG82
NChuYW5vc19wYXJ0LmNfc3RyKCksICZlbmQsIDEwKTsKLSAgaWYgKGVuZCAhPSBuYW5vc19wYXJ0
LmNfc3RyKCkgKyBuYW5vc19wYXJ0Lmxlbmd0aCgpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0gIG5hbm9zID0gbmFub3MgKiBQb3coMTAsIDkgLSBuYW5vc19wYXJ0Lmxlbmd0aCgpKTsKLSAg
aWYgKG5lZ2F0aXZlKSB7Ci0gICAgLy8gSWYgYSBEdXJhdGlvbiBpcyBuZWdhdGl2ZSwgYm90aCBz
ZWNvbmRzIGFuZCBuYW5vcyBzaG91bGQgYmUgbmVnYXRpdmUuCi0gICAgc2Vjb25kcyA9IC1zZWNv
bmRzOwotICAgIG5hbm9zID0gLW5hbm9zOwotICB9Ci0gIGR1cmF0aW9uLT5zZXRfc2Vjb25kcyhz
ZWNvbmRzKTsKLSAgZHVyYXRpb24tPnNldF9uYW5vcyhzdGF0aWNfY2FzdDxpbnQzMj4obmFub3Mp
KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUR1cmF0aW9uIFRpbWVVdGlsOjpOYW5vc2Vjb25kc1Rv
RHVyYXRpb24oaW50NjQgbmFub3MpIHsKLSAgcmV0dXJuIENyZWF0ZU5vcm1hbGl6ZWQ8RHVyYXRp
b24+KG5hbm9zIC8ga05hbm9zUGVyU2Vjb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFub3MgJSBrTmFub3NQZXJTZWNvbmQpOwotfQotCi1EdXJhdGlvbiBUaW1lVXRp
bDo6TWljcm9zZWNvbmRzVG9EdXJhdGlvbihpbnQ2NCBtaWNyb3MpIHsKLSAgcmV0dXJuIENyZWF0
ZU5vcm1hbGl6ZWQ8RHVyYXRpb24+KAotICAgICAgbWljcm9zIC8ga01pY3Jvc1BlclNlY29uZCwK
LSAgICAgIChtaWNyb3MgJSBrTWljcm9zUGVyU2Vjb25kKSAqIGtOYW5vc1Blck1pY3Jvc2Vjb25k
KTsKLX0KLQotRHVyYXRpb24gVGltZVV0aWw6Ok1pbGxpc2Vjb25kc1RvRHVyYXRpb24oaW50NjQg
bWlsbGlzKSB7Ci0gIHJldHVybiBDcmVhdGVOb3JtYWxpemVkPER1cmF0aW9uPigKLSAgICAgIG1p
bGxpcyAvIGtNaWxsaXNQZXJTZWNvbmQsCi0gICAgICAobWlsbGlzICUga01pbGxpc1BlclNlY29u
ZCkgKiBrTmFub3NQZXJNaWxsaXNlY29uZCk7Ci19Ci0KLUR1cmF0aW9uIFRpbWVVdGlsOjpTZWNv
bmRzVG9EdXJhdGlvbihpbnQ2NCBzZWNvbmRzKSB7Ci0gIHJldHVybiBDcmVhdGVOb3JtYWxpemVk
PER1cmF0aW9uPihzZWNvbmRzLCAwKTsKLX0KLQotRHVyYXRpb24gVGltZVV0aWw6Ok1pbnV0ZXNU
b0R1cmF0aW9uKGludDY0IG1pbnV0ZXMpIHsKLSAgcmV0dXJuIENyZWF0ZU5vcm1hbGl6ZWQ8RHVy
YXRpb24+KG1pbnV0ZXMgKiBrU2Vjb25kc1Blck1pbnV0ZSwgMCk7Ci19Ci0KLUR1cmF0aW9uIFRp
bWVVdGlsOjpIb3Vyc1RvRHVyYXRpb24oaW50NjQgaG91cnMpIHsKLSAgcmV0dXJuIENyZWF0ZU5v
cm1hbGl6ZWQ8RHVyYXRpb24+KGhvdXJzICoga1NlY29uZHNQZXJIb3VyLCAwKTsKLX0KLQotaW50
NjQgVGltZVV0aWw6OkR1cmF0aW9uVG9OYW5vc2Vjb25kcyhjb25zdCBEdXJhdGlvbiYgZHVyYXRp
b24pIHsKLSAgcmV0dXJuIGR1cmF0aW9uLnNlY29uZHMoKSAqIGtOYW5vc1BlclNlY29uZCArIGR1
cmF0aW9uLm5hbm9zKCk7Ci19Ci0KLWludDY0IFRpbWVVdGlsOjpEdXJhdGlvblRvTWljcm9zZWNv
bmRzKGNvbnN0IER1cmF0aW9uJiBkdXJhdGlvbikgewotICByZXR1cm4gZHVyYXRpb24uc2Vjb25k
cygpICoga01pY3Jvc1BlclNlY29uZCArCi0gICAgICAgICBSb3VuZFRvd2FyZFplcm8oZHVyYXRp
b24ubmFub3MoKSwga05hbm9zUGVyTWljcm9zZWNvbmQpOwotfQotCi1pbnQ2NCBUaW1lVXRpbDo6
RHVyYXRpb25Ub01pbGxpc2Vjb25kcyhjb25zdCBEdXJhdGlvbiYgZHVyYXRpb24pIHsKLSAgcmV0
dXJuIGR1cmF0aW9uLnNlY29uZHMoKSAqIGtNaWxsaXNQZXJTZWNvbmQgKwotICAgICAgICAgUm91
bmRUb3dhcmRaZXJvKGR1cmF0aW9uLm5hbm9zKCksIGtOYW5vc1Blck1pbGxpc2Vjb25kKTsKLX0K
LQotaW50NjQgVGltZVV0aWw6OkR1cmF0aW9uVG9TZWNvbmRzKGNvbnN0IER1cmF0aW9uJiBkdXJh
dGlvbikgewotICByZXR1cm4gZHVyYXRpb24uc2Vjb25kcygpOwotfQotCi1pbnQ2NCBUaW1lVXRp
bDo6RHVyYXRpb25Ub01pbnV0ZXMoY29uc3QgRHVyYXRpb24mIGR1cmF0aW9uKSB7Ci0gIHJldHVy
biBSb3VuZFRvd2FyZFplcm8oZHVyYXRpb24uc2Vjb25kcygpLCBrU2Vjb25kc1Blck1pbnV0ZSk7
Ci19Ci0KLWludDY0IFRpbWVVdGlsOjpEdXJhdGlvblRvSG91cnMoY29uc3QgRHVyYXRpb24mIGR1
cmF0aW9uKSB7Ci0gIHJldHVybiBSb3VuZFRvd2FyZFplcm8oZHVyYXRpb24uc2Vjb25kcygpLCBr
U2Vjb25kc1BlckhvdXIpOwotfQotCi1UaW1lc3RhbXAgVGltZVV0aWw6Ok5hbm9zZWNvbmRzVG9U
aW1lc3RhbXAoaW50NjQgbmFub3MpIHsKLSAgcmV0dXJuIENyZWF0ZU5vcm1hbGl6ZWQ8VGltZXN0
YW1wPihuYW5vcyAvIGtOYW5vc1BlclNlY29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW5vcyAlIGtOYW5vc1BlclNlY29uZCk7Ci19Ci0KLVRpbWVzdGFtcCBUaW1l
VXRpbDo6TWljcm9zZWNvbmRzVG9UaW1lc3RhbXAoaW50NjQgbWljcm9zKSB7Ci0gIHJldHVybiBD
cmVhdGVOb3JtYWxpemVkPFRpbWVzdGFtcD4oCi0gICAgICBtaWNyb3MgLyBrTWljcm9zUGVyU2Vj
b25kLAotICAgICAgbWljcm9zICUga01pY3Jvc1BlclNlY29uZCAqIGtOYW5vc1Blck1pY3Jvc2Vj
b25kKTsKLX0KLQotVGltZXN0YW1wIFRpbWVVdGlsOjpNaWxsaXNlY29uZHNUb1RpbWVzdGFtcChp
bnQ2NCBtaWxsaXMpIHsKLSAgcmV0dXJuIENyZWF0ZU5vcm1hbGl6ZWQ8VGltZXN0YW1wPigKLSAg
ICAgIG1pbGxpcyAvIGtNaWxsaXNQZXJTZWNvbmQsCi0gICAgICBtaWxsaXMgJSBrTWlsbGlzUGVy
U2Vjb25kICoga05hbm9zUGVyTWlsbGlzZWNvbmQpOwotfQotCi1UaW1lc3RhbXAgVGltZVV0aWw6
OlNlY29uZHNUb1RpbWVzdGFtcChpbnQ2NCBzZWNvbmRzKSB7Ci0gIHJldHVybiBDcmVhdGVOb3Jt
YWxpemVkPFRpbWVzdGFtcD4oc2Vjb25kcywgMCk7Ci19Ci0KLWludDY0IFRpbWVVdGlsOjpUaW1l
c3RhbXBUb05hbm9zZWNvbmRzKGNvbnN0IFRpbWVzdGFtcCYgdGltZXN0YW1wKSB7Ci0gIHJldHVy
biB0aW1lc3RhbXAuc2Vjb25kcygpICoga05hbm9zUGVyU2Vjb25kICsgdGltZXN0YW1wLm5hbm9z
KCk7Ci19Ci0KLWludDY0IFRpbWVVdGlsOjpUaW1lc3RhbXBUb01pY3Jvc2Vjb25kcyhjb25zdCBU
aW1lc3RhbXAmIHRpbWVzdGFtcCkgewotICByZXR1cm4gdGltZXN0YW1wLnNlY29uZHMoKSAqIGtN
aWNyb3NQZXJTZWNvbmQgKwotICAgICAgICAgUm91bmRUb3dhcmRaZXJvKHRpbWVzdGFtcC5uYW5v
cygpLCBrTmFub3NQZXJNaWNyb3NlY29uZCk7Ci19Ci0KLWludDY0IFRpbWVVdGlsOjpUaW1lc3Rh
bXBUb01pbGxpc2Vjb25kcyhjb25zdCBUaW1lc3RhbXAmIHRpbWVzdGFtcCkgewotICByZXR1cm4g
dGltZXN0YW1wLnNlY29uZHMoKSAqIGtNaWxsaXNQZXJTZWNvbmQgKwotICAgICAgICAgUm91bmRU
b3dhcmRaZXJvKHRpbWVzdGFtcC5uYW5vcygpLCBrTmFub3NQZXJNaWxsaXNlY29uZCk7Ci19Ci0K
LWludDY0IFRpbWVVdGlsOjpUaW1lc3RhbXBUb1NlY29uZHMoY29uc3QgVGltZXN0YW1wJiB0aW1l
c3RhbXApIHsKLSAgcmV0dXJuIHRpbWVzdGFtcC5zZWNvbmRzKCk7Ci19Ci0KLVRpbWVzdGFtcCBU
aW1lVXRpbDo6VGltZVRUb1RpbWVzdGFtcCh0aW1lX3QgdmFsdWUpIHsKLSAgcmV0dXJuIENyZWF0
ZU5vcm1hbGl6ZWQ8VGltZXN0YW1wPihzdGF0aWNfY2FzdDxpbnQ2ND4odmFsdWUpLCAwKTsKLX0K
LQotdGltZV90IFRpbWVVdGlsOjpUaW1lc3RhbXBUb1RpbWVUKGNvbnN0IFRpbWVzdGFtcCYgdmFs
dWUpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PHRpbWVfdD4odmFsdWUuc2Vjb25kcygpKTsKLX0K
LQotVGltZXN0YW1wIFRpbWVVdGlsOjpUaW1ldmFsVG9UaW1lc3RhbXAoY29uc3QgdGltZXZhbCYg
dmFsdWUpIHsKLSAgcmV0dXJuIENyZWF0ZU5vcm1hbGl6ZWQ8VGltZXN0YW1wPih2YWx1ZS50dl9z
ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudHZfdXNlYyAq
IGtOYW5vc1Blck1pY3Jvc2Vjb25kKTsKLX0KLQotdGltZXZhbCBUaW1lVXRpbDo6VGltZXN0YW1w
VG9UaW1ldmFsKGNvbnN0IFRpbWVzdGFtcCYgdmFsdWUpIHsKLSAgdGltZXZhbCByZXN1bHQ7Ci0g
IHJlc3VsdC50dl9zZWMgPSB2YWx1ZS5zZWNvbmRzKCk7Ci0gIHJlc3VsdC50dl91c2VjID0gUm91
bmRUb3dhcmRaZXJvKHZhbHVlLm5hbm9zKCksIGtOYW5vc1Blck1pY3Jvc2Vjb25kKTsKLSAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotRHVyYXRpb24gVGltZVV0aWw6OlRpbWV2YWxUb0R1cmF0aW9uKGNv
bnN0IHRpbWV2YWwmIHZhbHVlKSB7Ci0gIHJldHVybiBDcmVhdGVOb3JtYWxpemVkPER1cmF0aW9u
Pih2YWx1ZS50dl9zZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZS50dl91c2VjICoga05hbm9zUGVyTWljcm9zZWNvbmQpOwotfQotCi10aW1ldmFsIFRpbWVVdGls
OjpEdXJhdGlvblRvVGltZXZhbChjb25zdCBEdXJhdGlvbiYgdmFsdWUpIHsKLSAgdGltZXZhbCBy
ZXN1bHQ7Ci0gIHJlc3VsdC50dl9zZWMgPSB2YWx1ZS5zZWNvbmRzKCk7Ci0gIHJlc3VsdC50dl91
c2VjID0gUm91bmRUb3dhcmRaZXJvKHZhbHVlLm5hbm9zKCksIGtOYW5vc1Blck1pY3Jvc2Vjb25k
KTsKLSAgLy8gdGltZXZhbC50dl91c2VjJ3MgcmFuZ2UgaXMgWzAsIDEwMDAwMDApCi0gIGlmIChy
ZXN1bHQudHZfdXNlYyA8IDApIHsKLSAgICByZXN1bHQudHZfc2VjIC09IDE7Ci0gICAgcmVzdWx0
LnR2X3VzZWMgKz0ga01pY3Jvc1BlclNlY29uZDsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLQotbmFt
ZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSB7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjp1
dGlsOjprTmFub3NQZXJTZWNvbmQ7Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjp1dGlsOjpDcmVh
dGVOb3JtYWxpemVkOwotCi0vLyBDb252ZXJ0IGEgVGltZXN0YW1wIHRvIHVpbnQxMjguCi12b2lk
IFRvVWludDEyOChjb25zdCBUaW1lc3RhbXAmIHZhbHVlLCB1aW50MTI4KiByZXN1bHQsIGJvb2wq
IG5lZ2F0aXZlKSB7Ci0gIGlmICh2YWx1ZS5zZWNvbmRzKCkgPCAwKSB7Ci0gICAgKm5lZ2F0aXZl
ID0gdHJ1ZTsKLSAgICAqcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWludDY0PigtdmFsdWUuc2Vjb25k
cygpKTsKLSAgICAqcmVzdWx0ID0gKnJlc3VsdCAqIGtOYW5vc1BlclNlY29uZCAtIHN0YXRpY19j
YXN0PHVpbnQzMj4odmFsdWUubmFub3MoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgKm5lZ2F0aXZlID0g
ZmFsc2U7Ci0gICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ2ND4odmFsdWUuc2Vjb25kcygp
KTsKLSAgICAqcmVzdWx0ID0gKnJlc3VsdCAqIGtOYW5vc1BlclNlY29uZCArIHN0YXRpY19jYXN0
PHVpbnQzMj4odmFsdWUubmFub3MoKSk7Ci0gIH0KLX0KLQotLy8gQ29udmVydCBhIER1cmF0aW9u
IHRvIHVpbnQxMjguCi12b2lkIFRvVWludDEyOChjb25zdCBEdXJhdGlvbiYgdmFsdWUsIHVpbnQx
MjgqIHJlc3VsdCwgYm9vbCogbmVnYXRpdmUpIHsKLSAgaWYgKHZhbHVlLnNlY29uZHMoKSA8IDAg
fHwgdmFsdWUubmFub3MoKSA8IDApIHsKLSAgICAqbmVnYXRpdmUgPSB0cnVlOwotICAgICpyZXN1
bHQgPSBzdGF0aWNfY2FzdDx1aW50NjQ+KC12YWx1ZS5zZWNvbmRzKCkpOwotICAgICpyZXN1bHQg
PSAqcmVzdWx0ICoga05hbm9zUGVyU2Vjb25kICsgc3RhdGljX2Nhc3Q8dWludDMyPigtdmFsdWUu
bmFub3MoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgKm5lZ2F0aXZlID0gZmFsc2U7Ci0gICAgKnJlc3Vs
dCA9IHN0YXRpY19jYXN0PHVpbnQ2ND4odmFsdWUuc2Vjb25kcygpKTsKLSAgICAqcmVzdWx0ID0g
KnJlc3VsdCAqIGtOYW5vc1BlclNlY29uZCArIHN0YXRpY19jYXN0PHVpbnQzMj4odmFsdWUubmFu
b3MoKSk7Ci0gIH0KLX0KLQotdm9pZCBUb1RpbWVzdGFtcChjb25zdCB1aW50MTI4JiB2YWx1ZSwg
Ym9vbCBuZWdhdGl2ZSwgVGltZXN0YW1wKiB0aW1lc3RhbXApIHsKLSAgaW50NjQgc2Vjb25kcyA9
IHN0YXRpY19jYXN0PGludDY0PihVaW50MTI4TG93NjQodmFsdWUgLyBrTmFub3NQZXJTZWNvbmQp
KTsKLSAgaW50MzIgbmFub3MgPSBzdGF0aWNfY2FzdDxpbnQzMj4oVWludDEyOExvdzY0KHZhbHVl
ICUga05hbm9zUGVyU2Vjb25kKSk7Ci0gIGlmIChuZWdhdGl2ZSkgewotICAgIHNlY29uZHMgPSAt
c2Vjb25kczsKLSAgICBuYW5vcyA9IC1uYW5vczsKLSAgICBpZiAobmFub3MgPCAwKSB7Ci0gICAg
ICBuYW5vcyArPSBrTmFub3NQZXJTZWNvbmQ7Ci0gICAgICBzZWNvbmRzIC09IDE7Ci0gICAgfQot
ICB9Ci0gIHRpbWVzdGFtcC0+c2V0X3NlY29uZHMoc2Vjb25kcyk7Ci0gIHRpbWVzdGFtcC0+c2V0
X25hbm9zKG5hbm9zKTsKLX0KLQotdm9pZCBUb0R1cmF0aW9uKGNvbnN0IHVpbnQxMjgmIHZhbHVl
LCBib29sIG5lZ2F0aXZlLCBEdXJhdGlvbiogZHVyYXRpb24pIHsKLSAgaW50NjQgc2Vjb25kcyA9
IHN0YXRpY19jYXN0PGludDY0PihVaW50MTI4TG93NjQodmFsdWUgLyBrTmFub3NQZXJTZWNvbmQp
KTsKLSAgaW50MzIgbmFub3MgPSBzdGF0aWNfY2FzdDxpbnQzMj4oVWludDEyOExvdzY0KHZhbHVl
ICUga05hbm9zUGVyU2Vjb25kKSk7Ci0gIGlmIChuZWdhdGl2ZSkgewotICAgIHNlY29uZHMgPSAt
c2Vjb25kczsKLSAgICBuYW5vcyA9IC1uYW5vczsKLSAgfQotICBkdXJhdGlvbi0+c2V0X3NlY29u
ZHMoc2Vjb25kcyk7Ci0gIGR1cmF0aW9uLT5zZXRfbmFub3MobmFub3MpOwotfQotfSAgLy8gbmFt
ZXNwYWNlCi0KLUR1cmF0aW9uJiBvcGVyYXRvcis9KER1cmF0aW9uJiBkMSwgY29uc3QgRHVyYXRp
b24mIGQyKSB7Ci0gIGQxID0gQ3JlYXRlTm9ybWFsaXplZDxEdXJhdGlvbj4oZDEuc2Vjb25kcygp
ICsgZDIuc2Vjb25kcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQxLm5h
bm9zKCkgKyBkMi5uYW5vcygpKTsKLSAgcmV0dXJuIGQxOwotfQotCi1EdXJhdGlvbiYgb3BlcmF0
b3ItPShEdXJhdGlvbiYgZDEsIGNvbnN0IER1cmF0aW9uJiBkMikgeyAgLy8gTk9MSU5UCi0gIGQx
ID0gQ3JlYXRlTm9ybWFsaXplZDxEdXJhdGlvbj4oZDEuc2Vjb25kcygpIC0gZDIuc2Vjb25kcygp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQxLm5hbm9zKCkgLSBkMi5uYW5v
cygpKTsKLSAgcmV0dXJuIGQxOwotfQotCi1EdXJhdGlvbiYgb3BlcmF0b3IqPShEdXJhdGlvbiYg
ZCwgaW50NjQgcikgeyAgLy8gTk9MSU5UCi0gIGJvb2wgbmVnYXRpdmU7Ci0gIHVpbnQxMjggdmFs
dWU7Ci0gIFRvVWludDEyOChkLCAmdmFsdWUsICZuZWdhdGl2ZSk7Ci0gIGlmIChyID4gMCkgewot
ICAgIHZhbHVlICo9IHN0YXRpY19jYXN0PHVpbnQ2ND4ocik7Ci0gIH0gZWxzZSB7Ci0gICAgbmVn
YXRpdmUgPSAhbmVnYXRpdmU7Ci0gICAgdmFsdWUgKj0gc3RhdGljX2Nhc3Q8dWludDY0Pigtcik7
Ci0gIH0KLSAgVG9EdXJhdGlvbih2YWx1ZSwgbmVnYXRpdmUsICZkKTsKLSAgcmV0dXJuIGQ7Ci19
Ci0KLUR1cmF0aW9uJiBvcGVyYXRvcio9KER1cmF0aW9uJiBkLCBkb3VibGUgcikgeyAgLy8gTk9M
SU5UCi0gIGRvdWJsZSByZXN1bHQgPSAoZC5zZWNvbmRzKCkgKiAxLjAgKyAxLjAgKiBkLm5hbm9z
KCkgLyBrTmFub3NQZXJTZWNvbmQpICogcjsKLSAgaW50NjQgc2Vjb25kcyA9IHN0YXRpY19jYXN0
PGludDY0PihyZXN1bHQpOwotICBpbnQzMiBuYW5vcyA9IHN0YXRpY19jYXN0PGludDMyPigocmVz
dWx0IC0gc2Vjb25kcykgKiBrTmFub3NQZXJTZWNvbmQpOwotICAvLyBOb3RlIHRoYXQgd2Ugbm9y
bWFsaXplIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBuYW5vcyBjYW4gaGF2ZSBhIGRpZmZlcmVudAot
ICAvLyBzaWduIGZyb20gc2Vjb25kcyBidXQgYWxzbyB0aGF0IG5hbm9zIGNhbiBiZSBhbnkgYXJi
aXRyYXJ5IHZhbHVlIHdoZW4KLSAgLy8gb3ZlcmZsb3cgaGFwcGVucyAoaS5lLiwgdGhlIHJlc3Vs
dCBpcyBhIG11Y2ggbGFyZ2VyIHZhbHVlIHRoYW4gd2hhdAotICAvLyBpbnQ2NCBjYW4gcmVwcmVz
ZW50KS4KLSAgZCA9IENyZWF0ZU5vcm1hbGl6ZWQ8RHVyYXRpb24+KHNlY29uZHMsIG5hbm9zKTsK
LSAgcmV0dXJuIGQ7Ci19Ci0KLUR1cmF0aW9uJiBvcGVyYXRvci89KER1cmF0aW9uJiBkLCBpbnQ2
NCByKSB7ICAvLyBOT0xJTlQKLSAgYm9vbCBuZWdhdGl2ZTsKLSAgdWludDEyOCB2YWx1ZTsKLSAg
VG9VaW50MTI4KGQsICZ2YWx1ZSwgJm5lZ2F0aXZlKTsKLSAgaWYgKHIgPiAwKSB7Ci0gICAgdmFs
dWUgLz0gc3RhdGljX2Nhc3Q8dWludDY0PihyKTsKLSAgfSBlbHNlIHsKLSAgICBuZWdhdGl2ZSA9
ICFuZWdhdGl2ZTsKLSAgICB2YWx1ZSAvPSBzdGF0aWNfY2FzdDx1aW50NjQ+KC1yKTsKLSAgfQot
ICBUb0R1cmF0aW9uKHZhbHVlLCBuZWdhdGl2ZSwgJmQpOwotICByZXR1cm4gZDsKLX0KLQotRHVy
YXRpb24mIG9wZXJhdG9yLz0oRHVyYXRpb24mIGQsIGRvdWJsZSByKSB7ICAvLyBOT0xJTlQKLSAg
cmV0dXJuIGQgKj0gMS4wIC8gcjsKLX0KLQotRHVyYXRpb24mIG9wZXJhdG9yJT0oRHVyYXRpb24m
IGQxLCBjb25zdCBEdXJhdGlvbiYgZDIpIHsgIC8vIE5PTElOVAotICBib29sIG5lZ2F0aXZlMSwg
bmVnYXRpdmUyOwotICB1aW50MTI4IHZhbHVlMSwgdmFsdWUyOwotICBUb1VpbnQxMjgoZDEsICZ2
YWx1ZTEsICZuZWdhdGl2ZTEpOwotICBUb1VpbnQxMjgoZDIsICZ2YWx1ZTIsICZuZWdhdGl2ZTIp
OwotICB1aW50MTI4IHJlc3VsdCA9IHZhbHVlMSAlIHZhbHVlMjsKLSAgLy8gV2hlbiBuZWdhdGl2
ZSB2YWx1ZXMgYXJlIGludm9sdmVkIGluIGRpdmlzaW9uLCB3ZSByb3VuZCB0aGUgZGl2aXNpb24K
LSAgLy8gcmVzdWx0IHRvd2FyZHMgemVyby4gV2l0aCB0aGlzIHNlbWFudGljcywgc2lnbiBvZiB0
aGUgcmVtYWluZGVyIGlzIHRoZQotICAvLyBzYW1lIGFzIHRoZSBkaXZpZGVuZC4gRm9yIGV4YW1w
bGU6Ci0gIC8vICAgICAtNSAvIDEwICAgID0gMCwgLTUgJSAxMCAgICA9IC01Ci0gIC8vICAgICAt
NSAvICgtMTApID0gMCwgLTUgJSAoLTEwKSA9IC01Ci0gIC8vICAgICAgNSAvICgtMTApID0gMCwg
IDUgJSAoLTEwKSA9IDUKLSAgVG9EdXJhdGlvbihyZXN1bHQsIG5lZ2F0aXZlMSwgJmQxKTsKLSAg
cmV0dXJuIGQxOwotfQotCi1pbnQ2NCBvcGVyYXRvci8oY29uc3QgRHVyYXRpb24mIGQxLCBjb25z
dCBEdXJhdGlvbiYgZDIpIHsKLSAgYm9vbCBuZWdhdGl2ZTEsIG5lZ2F0aXZlMjsKLSAgdWludDEy
OCB2YWx1ZTEsIHZhbHVlMjsKLSAgVG9VaW50MTI4KGQxLCAmdmFsdWUxLCAmbmVnYXRpdmUxKTsK
LSAgVG9VaW50MTI4KGQyLCAmdmFsdWUyLCAmbmVnYXRpdmUyKTsKLSAgaW50NjQgcmVzdWx0ID0g
VWludDEyOExvdzY0KHZhbHVlMSAvIHZhbHVlMik7Ci0gIGlmIChuZWdhdGl2ZTEgIT0gbmVnYXRp
dmUyKSB7Ci0gICAgcmVzdWx0ID0gLXJlc3VsdDsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQot
Ci1UaW1lc3RhbXAmIG9wZXJhdG9yKz0oVGltZXN0YW1wJiB0LCBjb25zdCBEdXJhdGlvbiYgZCkg
eyAgLy8gTk9MSU5UCi0gIHQgPSBDcmVhdGVOb3JtYWxpemVkPFRpbWVzdGFtcD4odC5zZWNvbmRz
KCkgKyBkLnNlY29uZHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm5h
bm9zKCkgKyBkLm5hbm9zKCkpOwotICByZXR1cm4gdDsKLX0KLQotVGltZXN0YW1wJiBvcGVyYXRv
ci09KFRpbWVzdGFtcCYgdCwgY29uc3QgRHVyYXRpb24mIGQpIHsgIC8vIE5PTElOVAotICB0ID0g
Q3JlYXRlTm9ybWFsaXplZDxUaW1lc3RhbXA+KHQuc2Vjb25kcygpIC0gZC5zZWNvbmRzKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5uYW5vcygpIC0gZC5uYW5vcygpKTsK
LSAgcmV0dXJuIHQ7Ci19Ci0KLUR1cmF0aW9uIG9wZXJhdG9yLShjb25zdCBUaW1lc3RhbXAmIHQx
LCBjb25zdCBUaW1lc3RhbXAmIHQyKSB7Ci0gIHJldHVybiBDcmVhdGVOb3JtYWxpemVkPER1cmF0
aW9uPih0MS5zZWNvbmRzKCkgLSB0Mi5zZWNvbmRzKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0MS5uYW5vcygpIC0gdDIubmFub3MoKSk7Ci19Ci19ICAvLyBuYW1lc3Bh
Y2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29v
Z2xlL3Byb3RvYnVmL3V0aWwvdGltZV91dGlsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90
aW1lX3V0aWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJhYzA4OTcwNzk4NWQ3
Y2M2MzUwYTZhYWY3NzA3YWZjNjRmMWYxMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90aW1lX3V0aWwuaAorKysg
L2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xl
J3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20v
cHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0v
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfVVRJTF9USU1FX1VUSUxfSF9fCi0jZGVm
aW5lIEdPT0dMRV9QUk9UT0JVRl9VVElMX1RJTUVfVVRJTF9IX18KLQotI2luY2x1ZGUgPGN0aW1l
PgotI2luY2x1ZGUgPG9zdHJlYW0+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2lmZGVmIF9NU0NfVkVS
Ci0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNl
bmRpZgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnBiLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wYi5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsK
LW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci0KLWNsYXNzIExJQlBST1RP
QlVGX0VYUE9SVCBUaW1lVXRpbCB7Ci0gIHR5cGVkZWYgZ29vZ2xlOjpwcm90b2J1Zjo6VGltZXN0
YW1wIFRpbWVzdGFtcDsKLSAgdHlwZWRlZiBnb29nbGU6OnByb3RvYnVmOjpEdXJhdGlvbiBEdXJh
dGlvbjsKLQotIHB1YmxpYzoKLSAgLy8gVGhlIG1pbi9tYXggVGltZXN0YW1wL0R1cmF0aW9uIHZh
bHVlcyB3ZSBzdXBwb3J0LgotICAvLwotICAvLyBGb3IgIjAwMDEtMDEtMDFUMDA6MDA6MDBaIi4K
LSAgc3RhdGljIGNvbnN0IGludDY0IGtUaW1lc3RhbXBNaW5TZWNvbmRzID0gLTYyMTM1NTk2ODAw
TEw7Ci0gIC8vIEZvciAiOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5OTlaIi4KLSAgc3RhdGlj
IGNvbnN0IGludDY0IGtUaW1lc3RhbXBNYXhTZWNvbmRzID0gMjUzNDAyMzAwNzk5TEw7Ci0gIHN0
YXRpYyBjb25zdCBpbnQ2NCBrRHVyYXRpb25NaW5TZWNvbmRzID0gLTMxNTU3NjAwMDAwMExMOwot
ICBzdGF0aWMgY29uc3QgaW50NjQga0R1cmF0aW9uTWF4U2Vjb25kcyA9IDMxNTU3NjAwMDAwMExM
OwotCi0gIC8vIENvbnZlcnRzIFRpbWVzdGFtcCB0by9mcm9tIFJGQyAzMzM5IGRhdGUgc3RyaW5n
IGZvcm1hdC4KLSAgLy8gR2VuZXJhdGVkIG91dHB1dCB3aWxsIGFsd2F5cyBiZSBaLW5vcm1hbGl6
ZWQgYW5kIHVzZXMgMywgNiBvciA5Ci0gIC8vIGZyYWN0aW9uYWwgZGlnaXRzIGFzIHJlcXVpcmVk
IHRvIHJlcHJlc2VudCB0aGUgZXhhY3QgdGltZS4gV2hlbgotICAvLyBwYXJzaW5nLCBhbnkgZnJh
Y3Rpb25hbCBkaWdpdHMgKG9yIG5vbmUpIGFuZCBhbnkgb2Zmc2V0IGFyZQotICAvLyBhY2NlcHRl
ZCBhcyBsb25nIGFzIHRoZXkgZml0IGludG8gbmFuby1zZWNvbmRzIHByZWNpc2lvbi4KLSAgLy8g
Tm90ZSB0aGF0IFRpbWVzdGFtcCBjYW4gb25seSByZXByZXNlbnQgdGltZSBmcm9tCi0gIC8vIDAw
MDEtMDEtMDFUMDA6MDA6MDBaIHRvIDk5OTktMTItMzFUMjM6NTk6NTkuOTk5OTk5OTk5Wi4gQ29u
dmVydGluZwotICAvLyBhIFRpbWVzdGFtcCBvdXRzaWRlIG9mIHRoaXMgcmFuZ2UgaXMgdW5kZWZp
bmVkIGJlaGF2aW9yLgotICAvLyBTZWUgaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzMzMzku
dHh0Ci0gIC8vCi0gIC8vIEV4YW1wbGUgb2YgZ2VuZXJhdGVkIGZvcm1hdDoKLSAgLy8gICAiMTk3
Mi0wMS0wMVQxMDowMDoyMC4wMjFaIgotICAvLwotICAvLyBFeGFtcGxlIG9mIGFjY2VwdGVkIGZv
cm1hdDoKLSAgLy8gICAiMTk3Mi0wMS0wMVQxMDowMDoyMC4wMjEtMDU6MDAiCi0gIHN0YXRpYyBz
dHJpbmcgVG9TdHJpbmcoY29uc3QgVGltZXN0YW1wJiB0aW1lc3RhbXApOwotICBzdGF0aWMgYm9v
bCBGcm9tU3RyaW5nKGNvbnN0IHN0cmluZyYgdmFsdWUsIFRpbWVzdGFtcCogdGltZXN0YW1wKTsK
LQotICAvLyBDb252ZXJ0cyBEdXJhdGlvbiB0by9mcm9tIHN0cmluZyBmb3JtYXQuIFRoZSBzdHJp
bmcgZm9ybWF0IHdpbGwgY29udGFpbnMKLSAgLy8gMywgNiwgb3IgOSBmcmFjdGlvbmFsIGRpZ2l0
cyBkZXBlbmRpbmcgb24gdGhlIHByZWNpc2lvbiByZXF1aXJlZCB0bwotICAvLyByZXByZXNlbnQg
dGhlIGV4YWN0IER1cmF0aW9uIHZhbHVlLiBGb3IgZXhhbXBsZToKLSAgLy8gICAiMXMiLCAiMS4w
MTBzIiwgIjEuMDAwMDAwMTAwcyIsICItMy4xMDBzIgotICAvLyBUaGUgcmFuZ2UgdGhhdCBjYW4g
YmUgcmVwcmVzZW50ZWQgYnkgRHVyYXRpb24gaXMgZnJvbSAtMzE1LDU3NiwwMDAsMDAwCi0gIC8v
IHRvICszMTUsNTc2LDAwMCwwMDAgaW5jbHVzaXZlIChpbiBzZWNvbmRzKS4KLSAgc3RhdGljIHN0
cmluZyBUb1N0cmluZyhjb25zdCBEdXJhdGlvbiYgZHVyYXRpb24pOwotICBzdGF0aWMgYm9vbCBG
cm9tU3RyaW5nKGNvbnN0IHN0cmluZyYgdmFsdWUsIER1cmF0aW9uKiB0aW1lc3RhbXApOwotCi0j
aWZkZWYgR2V0Q3VycmVudFRpbWUKLSN1bmRlZiBHZXRDdXJyZW50VGltZSAgLy8gVmlzdWFsIFN0
dWRpbyBoYXMgbWFjcm8gR2V0Q3VycmVudFRpbWUKLSNlbmRpZgotICAvLyBHZXRzIHRoZSBjdXJy
ZW50IFVUQyB0aW1lLgotICBzdGF0aWMgVGltZXN0YW1wIEdldEN1cnJlbnRUaW1lKCk7Ci0gIC8v
IFJldHVybnMgdGhlIFRpbWUgcmVwcmVzZW50aW5nICIxOTcwLTAxLTAxIDAwOjAwOjAwIi4KLSAg
c3RhdGljIFRpbWVzdGFtcCBHZXRFcG9jaCgpOwotCi0gIC8vIENvbnZlcnRzIGJldHdlZW4gRHVy
YXRpb24gYW5kIGludGVnZXIgdHlwZXMuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYKLSAg
Ly8gdGhlIGlucHV0IHZhbHVlIGlzIG5vdCBpbiB0aGUgdmFsaWQgcmFuZ2Ugb2YgRHVyYXRpb24u
Ci0gIHN0YXRpYyBEdXJhdGlvbiBOYW5vc2Vjb25kc1RvRHVyYXRpb24oaW50NjQgbmFub3MpOwot
ICBzdGF0aWMgRHVyYXRpb24gTWljcm9zZWNvbmRzVG9EdXJhdGlvbihpbnQ2NCBtaWNyb3MpOwot
ICBzdGF0aWMgRHVyYXRpb24gTWlsbGlzZWNvbmRzVG9EdXJhdGlvbihpbnQ2NCBtaWxsaXMpOwot
ICBzdGF0aWMgRHVyYXRpb24gU2Vjb25kc1RvRHVyYXRpb24oaW50NjQgc2Vjb25kcyk7Ci0gIHN0
YXRpYyBEdXJhdGlvbiBNaW51dGVzVG9EdXJhdGlvbihpbnQ2NCBtaW51dGVzKTsKLSAgc3RhdGlj
IER1cmF0aW9uIEhvdXJzVG9EdXJhdGlvbihpbnQ2NCBob3Vycyk7Ci0gIC8vIFJlc3VsdCB3aWxs
IGJlIHRydW5jYXRlZCB0b3dhcmRzIHplcm8uIEZvciBleGFtcGxlLCAiLTEuNXMiIHdpbGwgYmUK
LSAgLy8gdHJ1bmNhdGVkIHRvICItMXMiLCBhbmQgIjEuNXMiIHRvICIxcyIgd2hlbiBjb252ZXJ0
aW5nIHRvIHNlY29uZHMuCi0gIC8vIEl0J3MgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHRoZSBpbnB1
dCBkdXJhdGlvbiBpcyBub3QgdmFsaWQgb3IgdGhlIHJlc3VsdAotICAvLyBleGNlZWRzIHRoZSBy
YW5nZSBvZiBpbnQ2NC4gQSBkdXJhdGlvbiBpcyBub3QgdmFsaWQgaWYgaXQncyBub3QgaW4gdGhl
Ci0gIC8vIHZhbGlkIHJhbmdlIG9mIER1cmF0aW9uLCBvciBoYXZlIGFuIGludmFsaWQgbmFub3Mg
dmFsdWUgKGkuZS4sIGxhcmdlcgotICAvLyB0aGFuIDk5OTk5OTk5OSwgbGVzcyB0aGFuIC05OTk5
OTk5OTksIG9yIGhhdmUgYSBkaWZmZXJlbnQgc2lnbiBmcm9tIHRoZQotICAvLyBzZWNvbmRzIHBh
cnQpLgotICBzdGF0aWMgaW50NjQgRHVyYXRpb25Ub05hbm9zZWNvbmRzKGNvbnN0IER1cmF0aW9u
JiBkdXJhdGlvbik7Ci0gIHN0YXRpYyBpbnQ2NCBEdXJhdGlvblRvTWljcm9zZWNvbmRzKGNvbnN0
IER1cmF0aW9uJiBkdXJhdGlvbik7Ci0gIHN0YXRpYyBpbnQ2NCBEdXJhdGlvblRvTWlsbGlzZWNv
bmRzKGNvbnN0IER1cmF0aW9uJiBkdXJhdGlvbik7Ci0gIHN0YXRpYyBpbnQ2NCBEdXJhdGlvblRv
U2Vjb25kcyhjb25zdCBEdXJhdGlvbiYgZHVyYXRpb24pOwotICBzdGF0aWMgaW50NjQgRHVyYXRp
b25Ub01pbnV0ZXMoY29uc3QgRHVyYXRpb24mIGR1cmF0aW9uKTsKLSAgc3RhdGljIGludDY0IER1
cmF0aW9uVG9Ib3Vycyhjb25zdCBEdXJhdGlvbiYgZHVyYXRpb24pOwotICAvLyBDcmVhdGVzIFRp
bWVzdGFtcCBmcm9tIGludGVnZXIgdHlwZXMuIFRoZSBpbnRlZ2VyIHZhbHVlIGluZGljYXRlcyB0
aGUKLSAgLy8gdGltZSBlbGFwc2VkIGZyb20gRXBvY2ggdGltZS4gVGhlIGJlaGF2aW9yIGlzIHVu
ZGVmaW5lZCBpZiB0aGUgaW5wdXQKLSAgLy8gdmFsdWUgaXMgbm90IGluIHRoZSB2YWxpZCByYW5n
ZSBvZiBUaW1lc3RhbXAuCi0gIHN0YXRpYyBUaW1lc3RhbXAgTmFub3NlY29uZHNUb1RpbWVzdGFt
cChpbnQ2NCBuYW5vcyk7Ci0gIHN0YXRpYyBUaW1lc3RhbXAgTWljcm9zZWNvbmRzVG9UaW1lc3Rh
bXAoaW50NjQgbWljcm9zKTsKLSAgc3RhdGljIFRpbWVzdGFtcCBNaWxsaXNlY29uZHNUb1RpbWVz
dGFtcChpbnQ2NCBtaWxsaXMpOwotICBzdGF0aWMgVGltZXN0YW1wIFNlY29uZHNUb1RpbWVzdGFt
cChpbnQ2NCBzZWNvbmRzKTsKLSAgLy8gUmVzdWx0IHdpbGwgYmUgdHJ1bmNhdGVkIGRvd24gdG8g
dGhlIG5lYXJlc3QgaW50ZWdlciB2YWx1ZS4gRm9yIGV4YW1wbGUsCi0gIC8vIHdpdGggIjE5Njkt
MTItMzFUMjM6NTk6NTkuOVoiLCBUaW1lc3RhbXBUb01pbGxpc2Vjb25kcygpIHJldHVybnMgLTEw
MAotICAvLyBhbmQgVGltZXN0YW1wVG9TZWNvbmRzKCkgcmV0dXJucyAtMS4gSXQncyB1bmRlZmlu
ZWQgYmVoYXZpb3IgaWYgdGhlIGlucHV0Ci0gIC8vIFRpbWVzdGFtcCBpcyBub3QgdmFsaWQgKGku
ZS4sIGl0cyBzZWNvbmRzIHBhcnQgb3IgbmFub3MgcGFydCBkb2VzIG5vdCBmYWxsCi0gIC8vIGlu
IHRoZSB2YWxpZCByYW5nZSkgb3IgdGhlIHJldHVybiB2YWx1ZSBkb2Vzbid0IGZpdCBpbnRvIGlu
dDY0LgotICBzdGF0aWMgaW50NjQgVGltZXN0YW1wVG9OYW5vc2Vjb25kcyhjb25zdCBUaW1lc3Rh
bXAmIHRpbWVzdGFtcCk7Ci0gIHN0YXRpYyBpbnQ2NCBUaW1lc3RhbXBUb01pY3Jvc2Vjb25kcyhj
b25zdCBUaW1lc3RhbXAmIHRpbWVzdGFtcCk7Ci0gIHN0YXRpYyBpbnQ2NCBUaW1lc3RhbXBUb01p
bGxpc2Vjb25kcyhjb25zdCBUaW1lc3RhbXAmIHRpbWVzdGFtcCk7Ci0gIHN0YXRpYyBpbnQ2NCBU
aW1lc3RhbXBUb1NlY29uZHMoY29uc3QgVGltZXN0YW1wJiB0aW1lc3RhbXApOwotCi0gIC8vIENv
bnZlcnNpb24gdG8vZnJvbSBvdGhlciB0aW1lL2RhdGUgdHlwZXMuIE5vdGUgdGhhdCB0aGVzZSB0
eXBlcyBtYXkKLSAgLy8gaGF2ZSBhIGRpZmZlcmVudCBwcmVjaXNpb24gYW5kIHRpbWUgcmFuZ2Ug
ZnJvbSBUaW1lc3RhbXAvRHVyYXRpb24uCi0gIC8vIFdoZW4gY29udmVydGluZyB0byBhIGxvd2Vy
IHByZWNpc2lvbiB0eXBlLCB0aGUgdmFsdWUgd2lsbCBiZSB0cnVuY2F0ZWQKLSAgLy8gdG8gdGhl
IG5lYXJlc3QgdmFsdWUgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQuIElmIHRoZSB2YWx1ZSBpcwot
ICAvLyBvdXQgb2YgdGhlIHJhbmdlIG9mIHRoZSByZXN1bHQgdHlwZSwgdGhlIHJldHVybiB2YWx1
ZSBpcyB1bmRlZmluZWQuCi0gIC8vCi0gIC8vIENvbnZlcnNpb24gdG8vZnJvbSB0aW1lX3QKLSAg
c3RhdGljIFRpbWVzdGFtcCBUaW1lVFRvVGltZXN0YW1wKHRpbWVfdCB2YWx1ZSk7Ci0gIHN0YXRp
YyB0aW1lX3QgVGltZXN0YW1wVG9UaW1lVChjb25zdCBUaW1lc3RhbXAmIHZhbHVlKTsKLQotICAv
LyBDb252ZXJzaW9uIHRvL2Zyb20gdGltZXZhbAotICBzdGF0aWMgVGltZXN0YW1wIFRpbWV2YWxU
b1RpbWVzdGFtcChjb25zdCB0aW1ldmFsJiB2YWx1ZSk7Ci0gIHN0YXRpYyB0aW1ldmFsIFRpbWVz
dGFtcFRvVGltZXZhbChjb25zdCBUaW1lc3RhbXAmIHZhbHVlKTsKLSAgc3RhdGljIER1cmF0aW9u
IFRpbWV2YWxUb0R1cmF0aW9uKGNvbnN0IHRpbWV2YWwmIHZhbHVlKTsKLSAgc3RhdGljIHRpbWV2
YWwgRHVyYXRpb25Ub1RpbWV2YWwoY29uc3QgRHVyYXRpb24mIHZhbHVlKTsKLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotCi1uYW1lc3BhY2Ug
cHJvdG9idWYgewotLy8gT3ZlcmxvYWRlZCBvcGVyYXRvcnMgZm9yIER1cmF0aW9uLgotLy8KLS8v
IEFzc2lnbm1lbnQgb3BlcmF0b3JzLgotTElCUFJPVE9CVUZfRVhQT1JUIER1cmF0aW9uJiBvcGVy
YXRvcis9KER1cmF0aW9uJiBkMSwgY29uc3QgRHVyYXRpb24mIGQyKTsgIC8vIE5PTElOVAotTElC
UFJPVE9CVUZfRVhQT1JUIER1cmF0aW9uJiBvcGVyYXRvci09KER1cmF0aW9uJiBkMSwgY29uc3Qg
RHVyYXRpb24mIGQyKTsgIC8vIE5PTElOVAotTElCUFJPVE9CVUZfRVhQT1JUIER1cmF0aW9uJiBv
cGVyYXRvcio9KER1cmF0aW9uJiBkLCBpbnQ2NCByKTsgIC8vIE5PTElOVAotTElCUFJPVE9CVUZf
RVhQT1JUIER1cmF0aW9uJiBvcGVyYXRvcio9KER1cmF0aW9uJiBkLCBkb3VibGUgcik7ICAvLyBO
T0xJTlQKLUxJQlBST1RPQlVGX0VYUE9SVCBEdXJhdGlvbiYgb3BlcmF0b3IvPShEdXJhdGlvbiYg
ZCwgaW50NjQgcik7ICAvLyBOT0xJTlQKLUxJQlBST1RPQlVGX0VYUE9SVCBEdXJhdGlvbiYgb3Bl
cmF0b3IvPShEdXJhdGlvbiYgZCwgZG91YmxlIHIpOyAgLy8gTk9MSU5UCi0vLyBPdmVybG9hZCBm
b3Igb3RoZXIgaW50ZWdlciB0eXBlcy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotRHVyYXRpb24m
IG9wZXJhdG9yKj0oRHVyYXRpb24mIGQsIFQgcikgeyAgLy8gTk9MSU5UCi0gIGludDY0IHggPSBy
OwotICByZXR1cm4gZCAqPSB4OwotfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1EdXJhdGlvbiYg
b3BlcmF0b3IvPShEdXJhdGlvbiYgZCwgVCByKSB7ICAvLyBOT0xJTlQKLSAgaW50NjQgeCA9IHI7
Ci0gIHJldHVybiBkIC89IHg7Ci19Ci1MSUJQUk9UT0JVRl9FWFBPUlQgRHVyYXRpb24mIG9wZXJh
dG9yJT0oRHVyYXRpb24mIGQxLCBjb25zdCBEdXJhdGlvbiYgZDIpOyAgLy8gTk9MSU5UCi0vLyBS
ZWxhdGlvbmFsIG9wZXJhdG9ycy4KLWlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBEdXJhdGlv
biYgZDEsIGNvbnN0IER1cmF0aW9uJiBkMikgewotICBpZiAoZDEuc2Vjb25kcygpID09IGQyLnNl
Y29uZHMoKSkgewotICAgIHJldHVybiBkMS5uYW5vcygpIDwgZDIubmFub3MoKTsKLSAgfQotICBy
ZXR1cm4gZDEuc2Vjb25kcygpIDwgZDIuc2Vjb25kcygpOwotfQotaW5saW5lIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IER1cmF0aW9uJiBkMSwgY29uc3QgRHVyYXRpb24mIGQyKSB7Ci0gIHJldHVybiBk
MiA8IGQxOwotfQotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBEdXJhdGlvbiYgZDEsIGNv
bnN0IER1cmF0aW9uJiBkMikgewotICByZXR1cm4gIShkMSA8IGQyKTsKLX0KLWlubGluZSBib29s
IG9wZXJhdG9yPD0oY29uc3QgRHVyYXRpb24mIGQxLCBjb25zdCBEdXJhdGlvbiYgZDIpIHsKLSAg
cmV0dXJuICEoZDIgPCBkMSk7Ci19Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IER1cmF0
aW9uJiBkMSwgY29uc3QgRHVyYXRpb24mIGQyKSB7Ci0gIHJldHVybiBkMS5zZWNvbmRzKCkgPT0g
ZDIuc2Vjb25kcygpICYmIGQxLm5hbm9zKCkgPT0gZDIubmFub3MoKTsKLX0KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRHVyYXRpb24mIGQxLCBjb25zdCBEdXJhdGlvbiYgZDIpIHsKLSAg
cmV0dXJuICEoZDEgPT0gZDIpOwotfQotLy8gQWRkaXRpdmUgb3BlcmF0b3JzCi1pbmxpbmUgRHVy
YXRpb24gb3BlcmF0b3ItKGNvbnN0IER1cmF0aW9uJiBkKSB7Ci0gIER1cmF0aW9uIHJlc3VsdDsK
LSAgcmVzdWx0LnNldF9zZWNvbmRzKC1kLnNlY29uZHMoKSk7Ci0gIHJlc3VsdC5zZXRfbmFub3Mo
LWQubmFub3MoKSk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci1pbmxpbmUgRHVyYXRpb24gb3BlcmF0
b3IrKGNvbnN0IER1cmF0aW9uJiBkMSwgY29uc3QgRHVyYXRpb24mIGQyKSB7Ci0gIER1cmF0aW9u
IHJlc3VsdCA9IGQxOwotICByZXR1cm4gcmVzdWx0ICs9IGQyOwotfQotaW5saW5lIER1cmF0aW9u
IG9wZXJhdG9yLShjb25zdCBEdXJhdGlvbiYgZDEsIGNvbnN0IER1cmF0aW9uJiBkMikgewotICBE
dXJhdGlvbiByZXN1bHQgPSBkMTsKLSAgcmV0dXJuIHJlc3VsdCAtPSBkMjsKLX0KLS8vIE11bHRp
cGxpY2F0aXZlIG9wZXJhdG9ycwotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBEdXJhdGlv
biBvcGVyYXRvciooRHVyYXRpb24gZCwgVCByKSB7Ci0gIHJldHVybiBkICo9IHI7Ci19Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIER1cmF0aW9uIG9wZXJhdG9yKihUIHIsIER1cmF0aW9u
IGQpIHsKLSAgcmV0dXJuIGQgKj0gcjsKLX0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUg
RHVyYXRpb24gb3BlcmF0b3IvKER1cmF0aW9uIGQsIFQgcikgewotICByZXR1cm4gZCAvPSByOwot
fQotTElCUFJPVE9CVUZfRVhQT1JUIGludDY0IG9wZXJhdG9yLyhjb25zdCBEdXJhdGlvbiYgZDEs
IGNvbnN0IER1cmF0aW9uJiBkMik7Ci0KLWlubGluZSBEdXJhdGlvbiBvcGVyYXRvciUoY29uc3Qg
RHVyYXRpb24mIGQxLCBjb25zdCBEdXJhdGlvbiYgZDIpIHsKLSAgRHVyYXRpb24gcmVzdWx0ID0g
ZDE7Ci0gIHJldHVybiByZXN1bHQgJT0gZDI7Ci19Ci0KLWlubGluZSBvc3RyZWFtJiBvcGVyYXRv
cjw8KG9zdHJlYW0mIG91dCwgY29uc3QgRHVyYXRpb24mIGQpIHsKLSAgb3V0IDw8IGdvb2dsZTo6
cHJvdG9idWY6OnV0aWw6OlRpbWVVdGlsOjpUb1N0cmluZyhkKTsKLSAgcmV0dXJuIG91dDsKLX0K
LQotLy8gT3ZlcmxvYWRlZCBvcGVyYXRvcnMgZm9yIFRpbWVzdGFtcAotLy8KLS8vIEFzc2lnbmVt
ZW50IG9wZXJhdG9ycy4KLUxJQlBST1RPQlVGX0VYUE9SVCBUaW1lc3RhbXAmIG9wZXJhdG9yKz0o
VGltZXN0YW1wJiB0LCBjb25zdCBEdXJhdGlvbiYgZCk7ICAvLyBOT0xJTlQKLUxJQlBST1RPQlVG
X0VYUE9SVCBUaW1lc3RhbXAmIG9wZXJhdG9yLT0oVGltZXN0YW1wJiB0LCBjb25zdCBEdXJhdGlv
biYgZCk7ICAvLyBOT0xJTlQKLS8vIFJlbGF0aW9uYWwgb3BlcmF0b3JzLgotaW5saW5lIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IFRpbWVzdGFtcCYgdDEsIGNvbnN0IFRpbWVzdGFtcCYgdDIpIHsKLSAg
aWYgKHQxLnNlY29uZHMoKSA9PSB0Mi5zZWNvbmRzKCkpIHsKLSAgICByZXR1cm4gdDEubmFub3Mo
KSA8IHQyLm5hbm9zKCk7Ci0gIH0KLSAgcmV0dXJuIHQxLnNlY29uZHMoKSA8IHQyLnNlY29uZHMo
KTsKLX0KLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBUaW1lc3RhbXAmIHQxLCBjb25zdCBU
aW1lc3RhbXAmIHQyKSB7Ci0gIHJldHVybiB0MiA8IHQxOwotfQotaW5saW5lIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBUaW1lc3RhbXAmIHQxLCBjb25zdCBUaW1lc3RhbXAmIHQyKSB7Ci0gIHJldHVy
biAhKHQxIDwgdDIpOwotfQotaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUaW1lc3RhbXAm
IHQxLCBjb25zdCBUaW1lc3RhbXAmIHQyKSB7Ci0gIHJldHVybiAhKHQyIDwgdDEpOwotfQotaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaW1lc3RhbXAmIHQxLCBjb25zdCBUaW1lc3RhbXAm
IHQyKSB7Ci0gIHJldHVybiB0MS5zZWNvbmRzKCkgPT0gdDIuc2Vjb25kcygpICYmIHQxLm5hbm9z
KCkgPT0gdDIubmFub3MoKTsKLX0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVGltZXN0
YW1wJiB0MSwgY29uc3QgVGltZXN0YW1wJiB0MikgewotICByZXR1cm4gISh0MSA9PSB0Mik7Ci19
Ci0vLyBBZGRpdGl2ZSBvcGVyYXRvcnMuCi1pbmxpbmUgVGltZXN0YW1wIG9wZXJhdG9yKyhjb25z
dCBUaW1lc3RhbXAmIHQsIGNvbnN0IER1cmF0aW9uJiBkKSB7Ci0gIFRpbWVzdGFtcCByZXN1bHQg
PSB0OwotICByZXR1cm4gcmVzdWx0ICs9IGQ7Ci19Ci1pbmxpbmUgVGltZXN0YW1wIG9wZXJhdG9y
Kyhjb25zdCBEdXJhdGlvbiYgZCwgY29uc3QgVGltZXN0YW1wJiB0KSB7Ci0gIFRpbWVzdGFtcCBy
ZXN1bHQgPSB0OwotICByZXR1cm4gcmVzdWx0ICs9IGQ7Ci19Ci1pbmxpbmUgVGltZXN0YW1wIG9w
ZXJhdG9yLShjb25zdCBUaW1lc3RhbXAmIHQsIGNvbnN0IER1cmF0aW9uJiBkKSB7Ci0gIFRpbWVz
dGFtcCByZXN1bHQgPSB0OwotICByZXR1cm4gcmVzdWx0IC09IGQ7Ci19Ci1MSUJQUk9UT0JVRl9F
WFBPUlQgRHVyYXRpb24gb3BlcmF0b3ItKGNvbnN0IFRpbWVzdGFtcCYgdDEsIGNvbnN0IFRpbWVz
dGFtcCYgdDIpOwotCi1pbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvdXQsIGNv
bnN0IFRpbWVzdGFtcCYgdCkgewotICBvdXQgPDwgZ29vZ2xlOjpwcm90b2J1Zjo6dXRpbDo6VGlt
ZVV0aWw6OlRvU3RyaW5nKHQpOwotICByZXR1cm4gb3V0OwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
cHJvdG9idWYKLQotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9Q
Uk9UT0JVRl9VVElMX1RJTUVfVVRJTF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1
Zi91dGlsL3RpbWVfdXRpbF90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvdGltZV91
dGlsX3Rlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NTc0MGFiZTFlNmU1
N2U3ZTU0N2E2OTMwZTc0NTQ1OTBlNzFkZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvdGltZV91dGlsX3Rlc3Qu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAt
IEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29n
bGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdXRpbC90aW1lX3V0aWwu
aD4KLQotI2luY2x1ZGUgPGN0aW1lPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3RpbWVz
dGFtcC5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wYi5oPgotI2lu
Y2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0aW5nL2dvb2dsZXRlc3QuaD4KLSNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7
Ci1uYW1lc3BhY2UgdXRpbCB7Ci0KLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OlRpbWVzdGFtcDsK
LXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OkR1cmF0aW9uOwotCi1uYW1lc3BhY2UgewotCi1URVNU
KFRpbWVVdGlsVGVzdCwgVGltZXN0YW1wU3RyaW5nRm9ybWF0KSB7Ci0gIFRpbWVzdGFtcCBiZWdp
biwgZW5kOwotICBFWFBFQ1RfVFJVRShUaW1lVXRpbDo6RnJvbVN0cmluZygiMDAwMS0wMS0wMVQw
MDowMDowMFoiLCAmYmVnaW4pKTsKLSAgRVhQRUNUX0VRKFRpbWVVdGlsOjprVGltZXN0YW1wTWlu
U2Vjb25kcywgYmVnaW4uc2Vjb25kcygpKTsKLSAgRVhQRUNUX0VRKDAsIGJlZ2luLm5hbm9zKCkp
OwotICBFWFBFQ1RfVFJVRShUaW1lVXRpbDo6RnJvbVN0cmluZygiOTk5OS0xMi0zMVQyMzo1OTo1
OS45OTk5OTk5OTlaIiwgJmVuZCkpOwotICBFWFBFQ1RfRVEoVGltZVV0aWw6OmtUaW1lc3RhbXBN
YXhTZWNvbmRzLCBlbmQuc2Vjb25kcygpKTsKLSAgRVhQRUNUX0VRKDk5OTk5OTk5OSwgZW5kLm5h
bm9zKCkpOwotICBFWFBFQ1RfRVEoIjAwMDEtMDEtMDFUMDA6MDA6MDBaIiwgVGltZVV0aWw6OlRv
U3RyaW5nKGJlZ2luKSk7Ci0gIEVYUEVDVF9FUSgiOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5
OTlaIiwgVGltZVV0aWw6OlRvU3RyaW5nKGVuZCkpOwotCi0gIC8vIFRlc3QgbmVnYXRpdmUgdGlt
ZXN0YW1wcy4KLSAgVGltZXN0YW1wIHRpbWUgPSBUaW1lVXRpbDo6TmFub3NlY29uZHNUb1RpbWVz
dGFtcCgtMSk7Ci0gIEVYUEVDVF9FUSgtMSwgdGltZS5zZWNvbmRzKCkpOwotICAvLyBUaW1lc3Rh
bXAncyBuYW5vIHBhcnQgaXMgYWx3YXlzIG5vbi1uZWdhdGl2ZS4KLSAgRVhQRUNUX0VRKDk5OTk5
OTk5OSwgdGltZS5uYW5vcygpKTsKLSAgRVhQRUNUX0VRKCIxOTY5LTEyLTMxVDIzOjU5OjU5Ljk5
OTk5OTk5OVoiLCBUaW1lVXRpbDo6VG9TdHJpbmcodGltZSkpOwotCi0gIC8vIEdlbmVyYXRlZCBv
dXRwdXQgc2hvdWxkIGNvbnRhaW4gMywgNiwgb3IgOSBmcmFjdGlvbmFsIGRpZ2l0cy4KLSAgRVhQ
RUNUX0VRKCIxOTcwLTAxLTAxVDAwOjAwOjAwWiIsCi0gICAgICAgICAgICBUaW1lVXRpbDo6VG9T
dHJpbmcoVGltZVV0aWw6Ok5hbm9zZWNvbmRzVG9UaW1lc3RhbXAoMCkpKTsKLSAgRVhQRUNUX0VR
KCIxOTcwLTAxLTAxVDAwOjAwOjAwLjAxMFoiLAotICAgICAgICAgICAgVGltZVV0aWw6OlRvU3Ry
aW5nKFRpbWVVdGlsOjpOYW5vc2Vjb25kc1RvVGltZXN0YW1wKDEwMDAwMDAwKSkpOwotICBFWFBF
Q1RfRVEoIjE5NzAtMDEtMDFUMDA6MDA6MDAuMDAwMDEwWiIsCi0gICAgICAgICAgICBUaW1lVXRp
bDo6VG9TdHJpbmcoVGltZVV0aWw6Ok5hbm9zZWNvbmRzVG9UaW1lc3RhbXAoMTAwMDApKSk7Ci0g
IEVYUEVDVF9FUSgiMTk3MC0wMS0wMVQwMDowMDowMC4wMDAwMDAwMTBaIiwKLSAgICAgICAgICAg
IFRpbWVVdGlsOjpUb1N0cmluZyhUaW1lVXRpbDo6TmFub3NlY29uZHNUb1RpbWVzdGFtcCgxMCkp
KTsKLQotICAvLyBQYXJzaW5nIGFjY2VwdHMgYW4gZnJhY3Rpb25hbCBkaWdpdHMgYXMgbG9uZyBh
cyB0aGV5IGZpdCBpbnRvIG5hbm8KLSAgLy8gcHJlY2lzaW9uLgotICBFWFBFQ1RfVFJVRShUaW1l
VXRpbDo6RnJvbVN0cmluZygiMTk3MC0wMS0wMVQwMDowMDowMC4xWiIsICZ0aW1lKSk7Ci0gIEVY
UEVDVF9FUSgxMDAwMDAwMDAsIFRpbWVVdGlsOjpUaW1lc3RhbXBUb05hbm9zZWNvbmRzKHRpbWUp
KTsKLSAgRVhQRUNUX1RSVUUoVGltZVV0aWw6OkZyb21TdHJpbmcoIjE5NzAtMDEtMDFUMDA6MDA6
MDAuMDAwMVoiLCAmdGltZSkpOwotICBFWFBFQ1RfRVEoMTAwMDAwLCBUaW1lVXRpbDo6VGltZXN0
YW1wVG9OYW5vc2Vjb25kcyh0aW1lKSk7Ci0gIEVYUEVDVF9UUlVFKFRpbWVVdGlsOjpGcm9tU3Ry
aW5nKCIxOTcwLTAxLTAxVDAwOjAwOjAwLjAwMDAwMDFaIiwgJnRpbWUpKTsKLSAgRVhQRUNUX0VR
KDEwMCwgVGltZVV0aWw6OlRpbWVzdGFtcFRvTmFub3NlY29uZHModGltZSkpOwotCi0gIC8vIEFs
c28gYWNjcGV0cyBvZmZzZXRzLgotICBFWFBFQ1RfVFJVRShUaW1lVXRpbDo6RnJvbVN0cmluZygi
MTk3MC0wMS0wMVQwMDowMDowMC0wODowMCIsICZ0aW1lKSk7Ci0gIEVYUEVDVF9FUSg4ICogMzYw
MCwgVGltZVV0aWw6OlRpbWVzdGFtcFRvU2Vjb25kcyh0aW1lKSk7Ci19Ci0KLVRFU1QoVGltZVV0
aWxUZXN0LCBEdXJhdGlvblN0cmluZ0Zvcm1hdCkgewotICBUaW1lc3RhbXAgYmVnaW4sIGVuZDsK
LSAgRVhQRUNUX1RSVUUoVGltZVV0aWw6OkZyb21TdHJpbmcoIjAwMDEtMDEtMDFUMDA6MDA6MDBa
IiwgJmJlZ2luKSk7Ci0gIEVYUEVDVF9UUlVFKFRpbWVVdGlsOjpGcm9tU3RyaW5nKCI5OTk5LTEy
LTMxVDIzOjU5OjU5Ljk5OTk5OTk5OVoiLCAmZW5kKSk7Ci0KLSAgRVhQRUNUX0VRKCIzMTU1Mzc4
OTc1OTkuOTk5OTk5OTk5cyIsIFRpbWVVdGlsOjpUb1N0cmluZyhlbmQgLSBiZWdpbikpOwotICBF
WFBFQ1RfRVEoOTk5OTk5OTk5LCAoZW5kIC0gYmVnaW4pLm5hbm9zKCkpOwotICBFWFBFQ1RfRVEo
Ii0zMTU1Mzc4OTc1OTkuOTk5OTk5OTk5cyIsIFRpbWVVdGlsOjpUb1N0cmluZyhiZWdpbiAtIGVu
ZCkpOwotICBFWFBFQ1RfRVEoLTk5OTk5OTk5OSwgKGJlZ2luIC0gZW5kKS5uYW5vcygpKTsKLQot
ICAvLyBHZW5lcmF0ZWQgb3V0cHV0IHNob3VsZCBjb250YWluIDMsIDYsIG9yIDkgZnJhY3Rpb25h
bCBkaWdpdHMuCi0gIEVYUEVDVF9FUSgiMXMiLCBUaW1lVXRpbDo6VG9TdHJpbmcoVGltZVV0aWw6
OlNlY29uZHNUb0R1cmF0aW9uKDEpKSk7Ci0gIEVYUEVDVF9FUSgiMC4wMTBzIiwgVGltZVV0aWw6
OlRvU3RyaW5nKFRpbWVVdGlsOjpNaWxsaXNlY29uZHNUb0R1cmF0aW9uKDEwKSkpOwotICBFWFBF
Q1RfRVEoIjAuMDAwMDEwcyIsCi0gICAgICAgICAgICBUaW1lVXRpbDo6VG9TdHJpbmcoVGltZVV0
aWw6Ok1pY3Jvc2Vjb25kc1RvRHVyYXRpb24oMTApKSk7Ci0gIEVYUEVDVF9FUSgiMC4wMDAwMDAw
MTBzIiwKLSAgICAgICAgICAgIFRpbWVVdGlsOjpUb1N0cmluZyhUaW1lVXRpbDo6TmFub3NlY29u
ZHNUb0R1cmF0aW9uKDEwKSkpOwotCi0gIC8vIFBhcnNpbmcgYWNjZXB0cyBhbiBmcmFjdGlvbmFs
IGRpZ2l0cyBhcyBsb25nIGFzIHRoZXkgZml0IGludG8gbmFubwotICAvLyBwcmVjaXNpb24uCi0g
IER1cmF0aW9uIGQ7Ci0gIEVYUEVDVF9UUlVFKFRpbWVVdGlsOjpGcm9tU3RyaW5nKCIwLjFzIiwg
JmQpKTsKLSAgRVhQRUNUX0VRKDEwMCwgVGltZVV0aWw6OkR1cmF0aW9uVG9NaWxsaXNlY29uZHMo
ZCkpOwotICBFWFBFQ1RfVFJVRShUaW1lVXRpbDo6RnJvbVN0cmluZygiMC4wMDAxcyIsICZkKSk7
Ci0gIEVYUEVDVF9FUSgxMDAsIFRpbWVVdGlsOjpEdXJhdGlvblRvTWljcm9zZWNvbmRzKGQpKTsK
LSAgRVhQRUNUX1RSVUUoVGltZVV0aWw6OkZyb21TdHJpbmcoIjAuMDAwMDAwMXMiLCAmZCkpOwot
ICBFWFBFQ1RfRVEoMTAwLCBUaW1lVXRpbDo6RHVyYXRpb25Ub05hbm9zZWNvbmRzKGQpKTsKLQot
ICAvLyBEdXJhdGlvbiBtdXN0IHN1cHBvcnQgcmFuZ2UgZnJvbSAtMzE1LDU3NiwwMDAsMDAwcyB0
byArMzE1NTc2MDAwMDAwcwotICAvLyB3aGljaCBpbmNsdWRlcyBuZWdhdGl2ZSB2YWx1ZXMuCi0g
IEVYUEVDVF9UUlVFKFRpbWVVdGlsOjpGcm9tU3RyaW5nKCIzMTU1NzYwMDAwMDAuOTk5OTk5OTk5
cyIsICZkKSk7Ci0gIEVYUEVDVF9FUSgzMTU1NzYwMDAwMDBMTCwgZC5zZWNvbmRzKCkpOwotICBF
WFBFQ1RfRVEoOTk5OTk5OTk5LCBkLm5hbm9zKCkpOwotICBFWFBFQ1RfVFJVRShUaW1lVXRpbDo6
RnJvbVN0cmluZygiLTMxNTU3NjAwMDAwMC45OTk5OTk5OTlzIiwgJmQpKTsKLSAgRVhQRUNUX0VR
KC0zMTU1NzYwMDAwMDBMTCwgZC5zZWNvbmRzKCkpOwotICBFWFBFQ1RfRVEoLTk5OTk5OTk5OSwg
ZC5uYW5vcygpKTsKLX0KLQotVEVTVChUaW1lVXRpbFRlc3QsIEdldEVwb2NoKSB7Ci0gIEVYUEVD
VF9FUSgwLCBUaW1lVXRpbDo6VGltZXN0YW1wVG9OYW5vc2Vjb25kcyhUaW1lVXRpbDo6R2V0RXBv
Y2goKSkpOwotfQotCi1URVNUKFRpbWVVdGlsVGVzdCwgRHVyYXRpb25JbnRlZ2VyQ29udmVyc2lv
bikgewotICBFWFBFQ1RfRVEoIjAuMDAwMDAwMDAxcyIsCi0gICAgICAgICAgICBUaW1lVXRpbDo6
VG9TdHJpbmcoVGltZVV0aWw6Ok5hbm9zZWNvbmRzVG9EdXJhdGlvbigxKSkpOwotICBFWFBFQ1Rf
RVEoIi0wLjAwMDAwMDAwMXMiLAotICAgICAgICAgICAgVGltZVV0aWw6OlRvU3RyaW5nKFRpbWVV
dGlsOjpOYW5vc2Vjb25kc1RvRHVyYXRpb24oLTEpKSk7Ci0gIEVYUEVDVF9FUSgiMC4wMDAwMDFz
IiwKLSAgICAgICAgICAgIFRpbWVVdGlsOjpUb1N0cmluZyhUaW1lVXRpbDo6TWljcm9zZWNvbmRz
VG9EdXJhdGlvbigxKSkpOwotICBFWFBFQ1RfRVEoIi0wLjAwMDAwMXMiLAotICAgICAgICAgICAg
VGltZVV0aWw6OlRvU3RyaW5nKFRpbWVVdGlsOjpNaWNyb3NlY29uZHNUb0R1cmF0aW9uKC0xKSkp
OwotICBFWFBFQ1RfRVEoIjAuMDAxcyIsIFRpbWVVdGlsOjpUb1N0cmluZyhUaW1lVXRpbDo6TWls
bGlzZWNvbmRzVG9EdXJhdGlvbigxKSkpOwotICBFWFBFQ1RfRVEoIi0wLjAwMXMiLAotICAgICAg
ICAgICAgVGltZVV0aWw6OlRvU3RyaW5nKFRpbWVVdGlsOjpNaWxsaXNlY29uZHNUb0R1cmF0aW9u
KC0xKSkpOwotICBFWFBFQ1RfRVEoIjFzIiwgVGltZVV0aWw6OlRvU3RyaW5nKFRpbWVVdGlsOjpT
ZWNvbmRzVG9EdXJhdGlvbigxKSkpOwotICBFWFBFQ1RfRVEoIi0xcyIsIFRpbWVVdGlsOjpUb1N0
cmluZyhUaW1lVXRpbDo6U2Vjb25kc1RvRHVyYXRpb24oLTEpKSk7Ci0gIEVYUEVDVF9FUSgiNjBz
IiwgVGltZVV0aWw6OlRvU3RyaW5nKFRpbWVVdGlsOjpNaW51dGVzVG9EdXJhdGlvbigxKSkpOwot
ICBFWFBFQ1RfRVEoIi02MHMiLCBUaW1lVXRpbDo6VG9TdHJpbmcoVGltZVV0aWw6Ok1pbnV0ZXNU
b0R1cmF0aW9uKC0xKSkpOwotICBFWFBFQ1RfRVEoIjM2MDBzIiwgVGltZVV0aWw6OlRvU3RyaW5n
KFRpbWVVdGlsOjpIb3Vyc1RvRHVyYXRpb24oMSkpKTsKLSAgRVhQRUNUX0VRKCItMzYwMHMiLCBU
aW1lVXRpbDo6VG9TdHJpbmcoVGltZVV0aWw6OkhvdXJzVG9EdXJhdGlvbigtMSkpKTsKLQotICBF
WFBFQ1RfRVEoCi0gICAgICAxLCBUaW1lVXRpbDo6RHVyYXRpb25Ub05hbm9zZWNvbmRzKFRpbWVV
dGlsOjpOYW5vc2Vjb25kc1RvRHVyYXRpb24oMSkpKTsKLSAgRVhQRUNUX0VRKAotICAgICAgLTEs
IFRpbWVVdGlsOjpEdXJhdGlvblRvTmFub3NlY29uZHMoVGltZVV0aWw6Ok5hbm9zZWNvbmRzVG9E
dXJhdGlvbigtMSkpKTsKLSAgRVhQRUNUX0VRKAotICAgICAgMSwgVGltZVV0aWw6OkR1cmF0aW9u
VG9NaWNyb3NlY29uZHMoVGltZVV0aWw6Ok1pY3Jvc2Vjb25kc1RvRHVyYXRpb24oMSkpKTsKLSAg
RVhQRUNUX0VRKC0xLCBUaW1lVXRpbDo6RHVyYXRpb25Ub01pY3Jvc2Vjb25kcygKLSAgICAgICAg
ICAgICAgICAgICAgVGltZVV0aWw6Ok1pY3Jvc2Vjb25kc1RvRHVyYXRpb24oLTEpKSk7Ci0gIEVY
UEVDVF9FUSgKLSAgICAgIDEsIFRpbWVVdGlsOjpEdXJhdGlvblRvTWlsbGlzZWNvbmRzKFRpbWVV
dGlsOjpNaWxsaXNlY29uZHNUb0R1cmF0aW9uKDEpKSk7Ci0gIEVYUEVDVF9FUSgtMSwgVGltZVV0
aWw6OkR1cmF0aW9uVG9NaWxsaXNlY29uZHMoCi0gICAgICAgICAgICAgICAgICAgIFRpbWVVdGls
OjpNaWxsaXNlY29uZHNUb0R1cmF0aW9uKC0xKSkpOwotICBFWFBFQ1RfRVEoMSwgVGltZVV0aWw6
OkR1cmF0aW9uVG9TZWNvbmRzKFRpbWVVdGlsOjpTZWNvbmRzVG9EdXJhdGlvbigxKSkpOwotICBF
WFBFQ1RfRVEoLTEsIFRpbWVVdGlsOjpEdXJhdGlvblRvU2Vjb25kcyhUaW1lVXRpbDo6U2Vjb25k
c1RvRHVyYXRpb24oLTEpKSk7Ci0gIEVYUEVDVF9FUSgxLCBUaW1lVXRpbDo6RHVyYXRpb25Ub01p
bnV0ZXMoVGltZVV0aWw6Ok1pbnV0ZXNUb0R1cmF0aW9uKDEpKSk7Ci0gIEVYUEVDVF9FUSgtMSwg
VGltZVV0aWw6OkR1cmF0aW9uVG9NaW51dGVzKFRpbWVVdGlsOjpNaW51dGVzVG9EdXJhdGlvbigt
MSkpKTsKLSAgRVhQRUNUX0VRKDEsIFRpbWVVdGlsOjpEdXJhdGlvblRvSG91cnMoVGltZVV0aWw6
OkhvdXJzVG9EdXJhdGlvbigxKSkpOwotICBFWFBFQ1RfRVEoLTEsIFRpbWVVdGlsOjpEdXJhdGlv
blRvSG91cnMoVGltZVV0aWw6OkhvdXJzVG9EdXJhdGlvbigtMSkpKTsKLQotICAvLyBUZXN0IHRy
dW5jYXRpb24gYmVoYXZpb3IuCi0gIEVYUEVDVF9FUSgxLCBUaW1lVXRpbDo6RHVyYXRpb25Ub01p
Y3Jvc2Vjb25kcygKLSAgICAgICAgICAgICAgICAgICBUaW1lVXRpbDo6TmFub3NlY29uZHNUb0R1
cmF0aW9uKDE5OTkpKSk7Ci0gIC8vIEZvciBuZWdhdGl2ZSB2YWx1ZXMsIER1cmF0aW9uIHdpbGwg
YmUgcm91bmRlZCB0b3dhcmRzIDAuCi0gIEVYUEVDVF9FUSgtMSwgVGltZVV0aWw6OkR1cmF0aW9u
VG9NaWNyb3NlY29uZHMoCi0gICAgICAgICAgICAgICAgICAgIFRpbWVVdGlsOjpOYW5vc2Vjb25k
c1RvRHVyYXRpb24oLTE5OTkpKSk7Ci19Ci0KLVRFU1QoVGVzdFV0aWxUZXN0LCBUaW1lc3RhbXBJ
bnRlZ2VyQ29udmVyc2lvbikgewotICBFWFBFQ1RfRVEoIjE5NzAtMDEtMDFUMDA6MDA6MDAuMDAw
MDAwMDAxWiIsCi0gICAgICAgICAgICBUaW1lVXRpbDo6VG9TdHJpbmcoVGltZVV0aWw6Ok5hbm9z
ZWNvbmRzVG9UaW1lc3RhbXAoMSkpKTsKLSAgRVhQRUNUX0VRKCIxOTY5LTEyLTMxVDIzOjU5OjU5
Ljk5OTk5OTk5OVoiLAotICAgICAgICAgICAgVGltZVV0aWw6OlRvU3RyaW5nKFRpbWVVdGlsOjpO
YW5vc2Vjb25kc1RvVGltZXN0YW1wKC0xKSkpOwotICBFWFBFQ1RfRVEoIjE5NzAtMDEtMDFUMDA6
MDA6MDAuMDAwMDAxWiIsCi0gICAgICAgICAgICBUaW1lVXRpbDo6VG9TdHJpbmcoVGltZVV0aWw6
Ok1pY3Jvc2Vjb25kc1RvVGltZXN0YW1wKDEpKSk7Ci0gIEVYUEVDVF9FUSgiMTk2OS0xMi0zMVQy
Mzo1OTo1OS45OTk5OTlaIiwKLSAgICAgICAgICAgIFRpbWVVdGlsOjpUb1N0cmluZyhUaW1lVXRp
bDo6TWljcm9zZWNvbmRzVG9UaW1lc3RhbXAoLTEpKSk7Ci0gIEVYUEVDVF9FUSgiMTk3MC0wMS0w
MVQwMDowMDowMC4wMDFaIiwKLSAgICAgICAgICAgIFRpbWVVdGlsOjpUb1N0cmluZyhUaW1lVXRp
bDo6TWlsbGlzZWNvbmRzVG9UaW1lc3RhbXAoMSkpKTsKLSAgRVhQRUNUX0VRKCIxOTY5LTEyLTMx
VDIzOjU5OjU5Ljk5OVoiLAotICAgICAgICAgICAgVGltZVV0aWw6OlRvU3RyaW5nKFRpbWVVdGls
OjpNaWxsaXNlY29uZHNUb1RpbWVzdGFtcCgtMSkpKTsKLSAgRVhQRUNUX0VRKCIxOTcwLTAxLTAx
VDAwOjAwOjAxWiIsCi0gICAgICAgICAgICBUaW1lVXRpbDo6VG9TdHJpbmcoVGltZVV0aWw6OlNl
Y29uZHNUb1RpbWVzdGFtcCgxKSkpOwotICBFWFBFQ1RfRVEoIjE5NjktMTItMzFUMjM6NTk6NTla
IiwKLSAgICAgICAgICAgIFRpbWVVdGlsOjpUb1N0cmluZyhUaW1lVXRpbDo6U2Vjb25kc1RvVGlt
ZXN0YW1wKC0xKSkpOwotCi0gIEVYUEVDVF9FUSgKLSAgICAgIDEsIFRpbWVVdGlsOjpUaW1lc3Rh
bXBUb05hbm9zZWNvbmRzKFRpbWVVdGlsOjpOYW5vc2Vjb25kc1RvVGltZXN0YW1wKDEpKSk7Ci0g
IEVYUEVDVF9FUSgtMSwgVGltZVV0aWw6OlRpbWVzdGFtcFRvTmFub3NlY29uZHMoCi0gICAgICAg
ICAgICAgICAgICAgIFRpbWVVdGlsOjpOYW5vc2Vjb25kc1RvVGltZXN0YW1wKC0xKSkpOwotICBF
WFBFQ1RfRVEoMSwgVGltZVV0aWw6OlRpbWVzdGFtcFRvTWljcm9zZWNvbmRzKAotICAgICAgICAg
ICAgICAgICAgIFRpbWVVdGlsOjpNaWNyb3NlY29uZHNUb1RpbWVzdGFtcCgxKSkpOwotICBFWFBF
Q1RfRVEoLTEsIFRpbWVVdGlsOjpUaW1lc3RhbXBUb01pY3Jvc2Vjb25kcygKLSAgICAgICAgICAg
ICAgICAgICAgVGltZVV0aWw6Ok1pY3Jvc2Vjb25kc1RvVGltZXN0YW1wKC0xKSkpOwotICBFWFBF
Q1RfRVEoMSwgVGltZVV0aWw6OlRpbWVzdGFtcFRvTWlsbGlzZWNvbmRzKAotICAgICAgICAgICAg
ICAgICAgIFRpbWVVdGlsOjpNaWxsaXNlY29uZHNUb1RpbWVzdGFtcCgxKSkpOwotICBFWFBFQ1Rf
RVEoLTEsIFRpbWVVdGlsOjpUaW1lc3RhbXBUb01pbGxpc2Vjb25kcygKLSAgICAgICAgICAgICAg
ICAgICAgVGltZVV0aWw6Ok1pbGxpc2Vjb25kc1RvVGltZXN0YW1wKC0xKSkpOwotICBFWFBFQ1Rf
RVEoMSwgVGltZVV0aWw6OlRpbWVzdGFtcFRvU2Vjb25kcyhUaW1lVXRpbDo6U2Vjb25kc1RvVGlt
ZXN0YW1wKDEpKSk7Ci0gIEVYUEVDVF9FUSgtMSwgVGltZVV0aWw6OlRpbWVzdGFtcFRvU2Vjb25k
cyhUaW1lVXRpbDo6U2Vjb25kc1RvVGltZXN0YW1wKC0xKSkpOwotCi0gIC8vIFRlc3QgdHJ1bmNh
dGlvbiBiZWhhdmlvci4KLSAgRVhQRUNUX0VRKDEsIFRpbWVVdGlsOjpUaW1lc3RhbXBUb01pY3Jv
c2Vjb25kcygKLSAgICAgICAgICAgICAgICAgICBUaW1lVXRpbDo6TmFub3NlY29uZHNUb1RpbWVz
dGFtcCgxOTk5KSkpOwotICAvLyBGb3IgbmVnYXRpdmUgdmFsdWVzLCBUaW1lc3RhbXAgd2lsbCBi
ZSByb3VuZGVkIGRvd24uCi0gIC8vIEZvciBleGFtcGxlLCAiMTk2OS0xMi0zMVQyMzo1OTo1OS41
WiIgKGkuZS4sIC0wLjVzKSByb3VuZGVkIHRvIHNlY29uZHMKLSAgLy8gd2lsbCBiZSAiMTk2OS0x
Mi0zMVQyMzo1OTo1OVoiIChpLmUuLCAtMXMpIHJhdGhlciB0aGFuCi0gIC8vICIxOTcwLTAxLTAx
VDAwOjAwOjAwWiIgKGkuZS4sIDBzKS4KLSAgRVhQRUNUX0VRKC0yLCBUaW1lVXRpbDo6VGltZXN0
YW1wVG9NaWNyb3NlY29uZHMoCi0gICAgICAgICAgICAgICAgICAgIFRpbWVVdGlsOjpOYW5vc2Vj
b25kc1RvVGltZXN0YW1wKC0xOTk5KSkpOwotfQotCi1URVNUKFRpbWVVdGlsVGVzdCwgVGltZVRD
b252ZXJzaW9uKSB7Ci0gIHRpbWVfdCB2YWx1ZSA9IHRpbWUoTlVMTCk7Ci0gIEVYUEVDVF9FUSh2
YWx1ZSwKLSAgICAgICAgICAgIFRpbWVVdGlsOjpUaW1lc3RhbXBUb1RpbWVUKFRpbWVVdGlsOjpU
aW1lVFRvVGltZXN0YW1wKHZhbHVlKSkpOwotICBFWFBFQ1RfRVEoCi0gICAgICAxLCBUaW1lVXRp
bDo6VGltZXN0YW1wVG9UaW1lVChUaW1lVXRpbDo6TWlsbGlzZWNvbmRzVG9UaW1lc3RhbXAoMTk5
OSkpKTsKLX0KLQotVEVTVChUaW1lVXRpbFRlc3QsIFRpbWV2YWxDb252ZXJzaW9uKSB7Ci0gIHRp
bWV2YWwgdmFsdWUgPSBUaW1lVXRpbDo6VGltZXN0YW1wVG9UaW1ldmFsKAotICAgICAgVGltZVV0
aWw6Ok5hbm9zZWNvbmRzVG9UaW1lc3RhbXAoMTk5OTk5OTk5OSkpOwotICBFWFBFQ1RfRVEoMSwg
dmFsdWUudHZfc2VjKTsKLSAgRVhQRUNUX0VRKDk5OTk5OSwgdmFsdWUudHZfdXNlYyk7Ci0gIHZh
bHVlID0gVGltZVV0aWw6OlRpbWVzdGFtcFRvVGltZXZhbCgKLSAgICAgIFRpbWVVdGlsOjpOYW5v
c2Vjb25kc1RvVGltZXN0YW1wKC0xOTk5OTk5OTk5KSk7Ci0gIEVYUEVDVF9FUSgtMiwgdmFsdWUu
dHZfc2VjKTsKLSAgRVhQRUNUX0VRKDAsIHZhbHVlLnR2X3VzZWMpOwotCi0gIHZhbHVlID0KLSAg
ICAgIFRpbWVVdGlsOjpEdXJhdGlvblRvVGltZXZhbChUaW1lVXRpbDo6TmFub3NlY29uZHNUb0R1
cmF0aW9uKDE5OTk5OTk5OTkpKTsKLSAgRVhQRUNUX0VRKDEsIHZhbHVlLnR2X3NlYyk7Ci0gIEVY
UEVDVF9FUSg5OTk5OTksIHZhbHVlLnR2X3VzZWMpOwotICB2YWx1ZSA9Ci0gICAgICBUaW1lVXRp
bDo6RHVyYXRpb25Ub1RpbWV2YWwoVGltZVV0aWw6Ok5hbm9zZWNvbmRzVG9EdXJhdGlvbigtMTk5
OTk5OTk5OSkpOwotICBFWFBFQ1RfRVEoLTIsIHZhbHVlLnR2X3NlYyk7Ci0gIEVYUEVDVF9FUSgx
LCB2YWx1ZS50dl91c2VjKTsKLX0KLQotVEVTVChUaW1lVXRpbFRlc3QsIER1cmF0aW9uT3BlcmF0
b3JzKSB7Ci0gIER1cmF0aW9uIG9uZV9zZWNvbmQgPSBUaW1lVXRpbDo6U2Vjb25kc1RvRHVyYXRp
b24oMSk7Ci0gIER1cmF0aW9uIG9uZV9uYW5vID0gVGltZVV0aWw6Ok5hbm9zZWNvbmRzVG9EdXJh
dGlvbigxKTsKLQotICAvLyBUZXN0ICsvLQotICBEdXJhdGlvbiBhID0gb25lX3NlY29uZDsKLSAg
YSArPSBvbmVfc2Vjb25kOwotICBhIC09IG9uZV9uYW5vOwotICBFWFBFQ1RfRVEoIjEuOTk5OTk5
OTk5cyIsIFRpbWVVdGlsOjpUb1N0cmluZyhhKSk7Ci0gIER1cmF0aW9uIGIgPSAtYTsKLSAgRVhQ
RUNUX0VRKCItMS45OTk5OTk5OTlzIiwgVGltZVV0aWw6OlRvU3RyaW5nKGIpKTsKLSAgRVhQRUNU
X0VRKCIzLjk5OTk5OTk5OHMiLCBUaW1lVXRpbDo6VG9TdHJpbmcoYSArIGEpKTsKLSAgRVhQRUNU
X0VRKCIwcyIsIFRpbWVVdGlsOjpUb1N0cmluZyhhICsgYikpOwotICBFWFBFQ1RfRVEoIjBzIiwg
VGltZVV0aWw6OlRvU3RyaW5nKGIgKyBhKSk7Ci0gIEVYUEVDVF9FUSgiLTMuOTk5OTk5OTk4cyIs
IFRpbWVVdGlsOjpUb1N0cmluZyhiICsgYikpOwotICBFWFBFQ1RfRVEoIjMuOTk5OTk5OTk4cyIs
IFRpbWVVdGlsOjpUb1N0cmluZyhhIC0gYikpOwotICBFWFBFQ1RfRVEoIjBzIiwgVGltZVV0aWw6
OlRvU3RyaW5nKGEgLSBhKSk7Ci0gIEVYUEVDVF9FUSgiMHMiLCBUaW1lVXRpbDo6VG9TdHJpbmco
YiAtIGIpKTsKLSAgRVhQRUNUX0VRKCItMy45OTk5OTk5OThzIiwgVGltZVV0aWw6OlRvU3RyaW5n
KGIgLSBhKSk7Ci0KLSAgLy8gVGVzdCAqCi0gIEVYUEVDVF9FUShhICsgYSwgYSAqIDIpOwotICBF
WFBFQ1RfRVEoYiArIGIsIGEgKiAoLTIpKTsKLSAgRVhQRUNUX0VRKGIgKyBiLCBiICogMik7Ci0g
IEVYUEVDVF9FUShhICsgYSwgYiAqICgtMikpOwotICBFWFBFQ1RfRVEoIjAuOTk5OTk5OTk5cyIs
IFRpbWVVdGlsOjpUb1N0cmluZyhhICogMC41KSk7Ci0gIEVYUEVDVF9FUSgiLTAuOTk5OTk5OTk5
cyIsIFRpbWVVdGlsOjpUb1N0cmluZyhiICogMC41KSk7Ci0gIC8vIE11bHRpcGxpY2F0aW9uIHNo
b3VsZCBub3Qgb3ZlcmZsb3cgaWYgdGhlIHJlc3VsdCBmaXRzIGludG8gdGhlIHN1cHBvcnRlZAot
ICAvLyByYW5nZSBvZiBEdXJhdGlvbiAoaW50ZXJtZWRpYXRlIHJlc3VsdCBtYXkgYmUgbGFyZ2Vy
IHRoYW4gaW50NjQpLgotICBFWFBFQ1RfRVEoIjMxNTU3NTk5OTY4NC40MjRzIiwKLSAgICAgICAg
ICAgIFRpbWVVdGlsOjpUb1N0cmluZygob25lX3NlY29uZCAtIG9uZV9uYW5vKSAqIDMxNTU3NjAw
MDAwMExMKSk7Ci0gIEVYUEVDVF9FUSgiLTMxNTU3NTk5OTY4NC40MjRzIiwKLSAgICAgICAgICAg
IFRpbWVVdGlsOjpUb1N0cmluZygob25lX25hbm8gLSBvbmVfc2Vjb25kKSAqIDMxNTU3NjAwMDAw
MExMKSk7Ci0gIEVYUEVDVF9FUSgiLTMxNTU3NTk5OTY4NC40MjRzIiwKLSAgICAgICAgICAgIFRp
bWVVdGlsOjpUb1N0cmluZygob25lX3NlY29uZCAtIG9uZV9uYW5vKSAqICgtMzE1NTc2MDAwMDAw
TEwpKSk7Ci0KLSAgLy8gVGVzdCAvIGFuZCAlCi0gIEVYUEVDVF9FUSgiMC45OTk5OTk5OTlzIiwg
VGltZVV0aWw6OlRvU3RyaW5nKGEgLyAyKSk7Ci0gIEVYUEVDVF9FUSgiLTAuOTk5OTk5OTk5cyIs
IFRpbWVVdGlsOjpUb1N0cmluZyhiIC8gMikpOwotICBEdXJhdGlvbiBsYXJnZSA9IFRpbWVVdGls
OjpTZWNvbmRzVG9EdXJhdGlvbigzMTU1NzYwMDAwMDBMTCkgLSBvbmVfbmFubzsKLSAgLy8gV2Ug
aGF2ZSB0byBoYW5kbGUgZGl2aXNpb24gd2l0aCB2YWx1ZXMgYmV5b25kIDY0IGJpdHMuCi0gIEVY
UEVDVF9FUSgiMC45OTk5OTk5OTlzIiwgVGltZVV0aWw6OlRvU3RyaW5nKGxhcmdlIC8gMzE1NTc2
MDAwMDAwTEwpKTsKLSAgRVhQRUNUX0VRKCItMC45OTk5OTk5OTlzIiwgVGltZVV0aWw6OlRvU3Ry
aW5nKCgtbGFyZ2UpIC8gMzE1NTc2MDAwMDAwTEwpKTsKLSAgRVhQRUNUX0VRKCItMC45OTk5OTk5
OTlzIiwgVGltZVV0aWw6OlRvU3RyaW5nKGxhcmdlIC8gKC0zMTU1NzYwMDAwMDBMTCkpKTsKLSAg
RHVyYXRpb24gbGFyZ2UyID0gbGFyZ2UgKyBvbmVfbmFubzsKLSAgRVhQRUNUX0VRKGxhcmdlLCBs
YXJnZSAlIGxhcmdlMik7Ci0gIEVYUEVDVF9FUSgtbGFyZ2UsICgtbGFyZ2UpICUgbGFyZ2UyKTsK
LSAgRVhQRUNUX0VRKGxhcmdlLCBsYXJnZSAlICgtbGFyZ2UyKSk7Ci0gIEVYUEVDVF9FUShvbmVf
bmFubywgbGFyZ2UyICUgbGFyZ2UpOwotICBFWFBFQ1RfRVEoLW9uZV9uYW5vLCAoLWxhcmdlMikg
JSBsYXJnZSk7Ci0gIEVYUEVDVF9FUShvbmVfbmFubywgbGFyZ2UyICUgKC1sYXJnZSkpOwotICAv
LyBTb21lIGNvcm5lciBjYXNlcyBhYm91dCBuZWdhdGl2ZSB2YWx1ZXMuCi0gIC8vCi0gIC8vICgt
NSkgLyAyID0gLTIsIHJlbWFpbmRlciA9IC0xCi0gIC8vICgtNSkgLyAoLTIpID0gMiwgcmVtYWlu
ZGVyID0gLTEKLSAgYSA9IFRpbWVVdGlsOjpOYW5vc2Vjb25kc1RvRHVyYXRpb24oLTUpOwotICBF
WFBFQ1RfRVEoVGltZVV0aWw6Ok5hbm9zZWNvbmRzVG9EdXJhdGlvbigtMiksIGEgLyAyKTsKLSAg
RVhQRUNUX0VRKFRpbWVVdGlsOjpOYW5vc2Vjb25kc1RvRHVyYXRpb24oMiksIGEgLyAoLTIpKTsK
LSAgYiA9IFRpbWVVdGlsOjpOYW5vc2Vjb25kc1RvRHVyYXRpb24oMik7Ci0gIEVYUEVDVF9FUSgt
MiwgYSAvIGIpOwotICBFWFBFQ1RfRVEoVGltZVV0aWw6Ok5hbm9zZWNvbmRzVG9EdXJhdGlvbigt
MSksIGEgJSBiKTsKLSAgRVhQRUNUX0VRKDIsIGEgLyAoLWIpKTsKLSAgRVhQRUNUX0VRKFRpbWVV
dGlsOjpOYW5vc2Vjb25kc1RvRHVyYXRpb24oLTEpLCBhICUgKC1iKSk7Ci0KLSAgLy8gVGVzdCBy
ZWxhdGlvbmFsIG9wZXJhdG9ycy4KLSAgRVhQRUNUX1RSVUUob25lX25hbm8gPCBvbmVfc2Vjb25k
KTsKLSAgRVhQRUNUX0ZBTFNFKG9uZV9zZWNvbmQgPCBvbmVfc2Vjb25kKTsKLSAgRVhQRUNUX0ZB
TFNFKG9uZV9zZWNvbmQgPCBvbmVfbmFubyk7Ci0gIEVYUEVDVF9GQUxTRSgtb25lX25hbm8gPCAt
b25lX3NlY29uZCk7Ci0gIEVYUEVDVF9GQUxTRSgtb25lX3NlY29uZCA8IC1vbmVfc2Vjb25kKTsK
LSAgRVhQRUNUX1RSVUUoLW9uZV9zZWNvbmQgPCAtb25lX25hbm8pOwotICBFWFBFQ1RfVFJVRSgt
b25lX25hbm8gPCBvbmVfbmFubyk7Ci0gIEVYUEVDVF9GQUxTRShvbmVfbmFubyA8IC1vbmVfbmFu
byk7Ci0KLSAgRVhQRUNUX0ZBTFNFKG9uZV9uYW5vID4gb25lX3NlY29uZCk7Ci0gIEVYUEVDVF9G
QUxTRShvbmVfbmFubyA+IG9uZV9uYW5vKTsKLSAgRVhQRUNUX1RSVUUob25lX3NlY29uZCA+IG9u
ZV9uYW5vKTsKLQotICBFWFBFQ1RfRkFMU0Uob25lX25hbm8gPj0gb25lX3NlY29uZCk7Ci0gIEVY
UEVDVF9UUlVFKG9uZV9uYW5vID49IG9uZV9uYW5vKTsKLSAgRVhQRUNUX1RSVUUob25lX3NlY29u
ZCA+PSBvbmVfbmFubyk7Ci0KLSAgRVhQRUNUX1RSVUUob25lX25hbm8gPD0gb25lX3NlY29uZCk7
Ci0gIEVYUEVDVF9UUlVFKG9uZV9uYW5vIDw9IG9uZV9uYW5vKTsKLSAgRVhQRUNUX0ZBTFNFKG9u
ZV9zZWNvbmQgPD0gb25lX25hbm8pOwotCi0gIEVYUEVDVF9UUlVFKG9uZV9uYW5vID09IG9uZV9u
YW5vKTsKLSAgRVhQRUNUX0ZBTFNFKG9uZV9uYW5vID09IG9uZV9zZWNvbmQpOwotCi0gIEVYUEVD
VF9GQUxTRShvbmVfbmFubyAhPSBvbmVfbmFubyk7Ci0gIEVYUEVDVF9UUlVFKG9uZV9uYW5vICE9
IG9uZV9zZWNvbmQpOwotfQotCi1URVNUKFRpbWVVdGlsVGVzdCwgVGltZXN0YW1wT3BlcmF0b3Jz
KSB7Ci0gIFRpbWVzdGFtcCBiZWdpbiwgZW5kOwotICBFWFBFQ1RfVFJVRShUaW1lVXRpbDo6RnJv
bVN0cmluZygiMDAwMS0wMS0wMVQwMDowMDowMFoiLCAmYmVnaW4pKTsKLSAgRVhQRUNUX1RSVUUo
VGltZVV0aWw6OkZyb21TdHJpbmcoIjk5OTktMTItMzFUMjM6NTk6NTkuOTk5OTk5OTk5WiIsICZl
bmQpKTsKLSAgRHVyYXRpb24gZCA9IGVuZCAtIGJlZ2luOwotICBFWFBFQ1RfVFJVRShlbmQgPT0g
YmVnaW4gKyBkKTsKLSAgRVhQRUNUX1RSVUUoZW5kID09IGQgKyBiZWdpbik7Ci0gIEVYUEVDVF9U
UlVFKGJlZ2luID09IGVuZCAtIGQpOwotCi0gIC8vIFRlc3QgcmVsYXRpb25hbCBvcGVyYXRvcnMK
LSAgVGltZXN0YW1wIHQxID0gYmVnaW4gKyBkIC8gNDsKLSAgVGltZXN0YW1wIHQyID0gZW5kIC0g
ZCAvIDQ7Ci0gIEVYUEVDVF9UUlVFKHQxIDwgdDIpOwotICBFWFBFQ1RfRkFMU0UodDEgPCB0MSk7
Ci0gIEVYUEVDVF9GQUxTRSh0MiA8IHQxKTsKLSAgRVhQRUNUX0ZBTFNFKHQxID4gdDIpOwotICBF
WFBFQ1RfRkFMU0UodDEgPiB0MSk7Ci0gIEVYUEVDVF9UUlVFKHQyID4gdDEpOwotICBFWFBFQ1Rf
RkFMU0UodDEgPj0gdDIpOwotICBFWFBFQ1RfVFJVRSh0MSA+PSB0MSk7Ci0gIEVYUEVDVF9UUlVF
KHQyID49IHQxKTsKLSAgRVhQRUNUX1RSVUUodDEgPD0gdDIpOwotICBFWFBFQ1RfVFJVRSh0MSA8
PSB0MSk7Ci0gIEVYUEVDVF9GQUxTRSh0MiA8PSB0MSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKHQxID09
IHQyKTsKLSAgRVhQRUNUX1RSVUUodDEgPT0gdDEpOwotICBFWFBFQ1RfRkFMU0UodDIgPT0gdDEp
OwotICBFWFBFQ1RfVFJVRSh0MSAhPSB0Mik7Ci0gIEVYUEVDVF9GQUxTRSh0MSAhPSB0MSk7Ci0g
IEVYUEVDVF9UUlVFKHQyICE9IHQxKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1l
c3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29v
Z2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVm
L3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDc3ZDQ0MTZhNzE1YWU1ZTE5NTkzZWMzYjZlYjNiYzY3MmIwMTViMDMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAs
MCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9y
bWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgR09PR0xF
X1BST1RPQlVGX1VUSUxfVFlQRV9SRVNPTFZFUl9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVG
X1VUSUxfVFlQRV9SRVNPTFZFUl9IX18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9i
dWYvc3R1YnMvc3RhdHVzLmg+Ci0KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJv
dG9idWYgewotY2xhc3MgVHlwZTsKLWNsYXNzIEVudW07Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9i
dWYKLQotCi1uYW1lc3BhY2UgcHJvdG9idWYgewotY2xhc3MgRGVzY3JpcHRvclBvb2w7Ci1uYW1l
c3BhY2UgdXRpbCB7Ci0KLS8vIEFic3RyYWN0IGludGVyZmFjZSBmb3IgYSB0eXBlIHJlc292bGVy
LgotLy8KLS8vIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGludGVyZmFjZSBtdXN0IGJlIHRocmVh
ZC1zYWZlLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFR5cGVSZXNvbHZlciB7Ci0gcHVibGlj
OgotICBUeXBlUmVzb2x2ZXIoKSB7fQotICB2aXJ0dWFsIH5UeXBlUmVzb2x2ZXIoKSB7fQotCi0g
IC8vIFJlc29sdmVzIGEgdHlwZSB1cmwgZm9yIGEgbWVzc2FnZSB0eXBlLgotICB2aXJ0dWFsIHV0
aWw6OlN0YXR1cyBSZXNvbHZlTWVzc2FnZVR5cGUoCi0gICAgICBjb25zdCBzdHJpbmcmIHR5cGVf
dXJsLCBnb29nbGU6OnByb3RvYnVmOjpUeXBlKiBtZXNzYWdlX3R5cGUpID0gMDsKLQotICAvLyBS
ZXNvbHZlcyBhIHR5cGUgdXJsIGZvciBhbiBlbnVtIHR5cGUuCi0gIHZpcnR1YWwgdXRpbDo6U3Rh
dHVzIFJlc29sdmVFbnVtVHlwZShjb25zdCBzdHJpbmcmIHR5cGVfdXJsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb29nbGU6OnByb3RvYnVmOjpFbnVtKiBlbnVt
X3R5cGUpID0gMDsKLQotIHByaXZhdGU6Ci0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVD
VE9SUyhUeXBlUmVzb2x2ZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHV0aWwKLX0gIC8vIG5h
bWVzcGFjZSBwcm90b2J1ZgotCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdP
T0dMRV9QUk9UT0JVRl9VVElMX1RZUEVfUkVTT0xWRVJfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29n
bGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyX3V0aWwuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9i
dWYvdXRpbC90eXBlX3Jlc29sdmVyX3V0aWwuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk2MzkzOTAzMmE4YzcyMzA2NWYwNWE5OWM5NmZiODdiMjZmNmY5OTEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0
aWwvdHlwZV9yZXNvbHZlcl91dGlsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAK
LS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAot
Ly8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZlcl91dGlsLmg+Ci0KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvdHlwZS5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wYi5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBiLmg+Ci0jaW5jbHVkZSA8
Z29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
dXRpbC9pbnRlcm5hbC91dGlsaXR5Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3V0aWwv
dHlwZV9yZXNvbHZlci5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9zdHJ1dGls
Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0YXR1cy5oPgotCi1uYW1lc3Bh
Y2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgdXRpbCB7Ci1uYW1l
c3BhY2UgewotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6Qm9vbFZhbHVlOwotdXNpbmcgZ29vZ2xl
Ojpwcm90b2J1Zjo6RW51bTsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OkVudW1WYWx1ZTsKLXVz
aW5nIGdvb2dsZTo6cHJvdG9idWY6OkZpZWxkOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6T3B0
aW9uOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6VHlwZTsKLQotdXNpbmcgdXRpbDo6U3RhdHVz
OwotdXNpbmcgdXRpbDo6ZXJyb3I6OklOVkFMSURfQVJHVU1FTlQ7Ci11c2luZyB1dGlsOjplcnJv
cjo6Tk9UX0ZPVU5EOwotCi1ib29sIFNwbGl0VHlwZVVybChjb25zdCBzdHJpbmcmIHR5cGVfdXJs
LCBzdHJpbmcqIHVybF9wcmVmaXgsCi0gICAgICAgICAgICAgICAgICBzdHJpbmcqIG1lc3NhZ2Vf
bmFtZSkgewotICBzaXplX3QgcG9zID0gdHlwZV91cmwuZmluZF9sYXN0X29mKCIvIik7Ci0gIGlm
IChwb3MgPT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICp1cmxf
cHJlZml4ID0gdHlwZV91cmwuc3Vic3RyKDAsIHBvcyk7Ci0gICptZXNzYWdlX25hbWUgPSB0eXBl
X3VybC5zdWJzdHIocG9zICsgMSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1jbGFzcyBEZXNjcmlw
dG9yUG9vbFR5cGVSZXNvbHZlciA6IHB1YmxpYyBUeXBlUmVzb2x2ZXIgewotIHB1YmxpYzoKLSAg
RGVzY3JpcHRvclBvb2xUeXBlUmVzb2x2ZXIoY29uc3Qgc3RyaW5nJiB1cmxfcHJlZml4LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbCkKLSAg
ICAgIDogdXJsX3ByZWZpeF8odXJsX3ByZWZpeCksIHBvb2xfKHBvb2wpIHt9Ci0KLSAgU3RhdHVz
IFJlc29sdmVNZXNzYWdlVHlwZShjb25zdCBzdHJpbmcmIHR5cGVfdXJsLCBUeXBlKiB0eXBlKSB7
Ci0gICAgc3RyaW5nIHVybF9wcmVmaXgsIG1lc3NhZ2VfbmFtZTsKLSAgICBpZiAoIVNwbGl0VHlw
ZVVybCh0eXBlX3VybCwgJnVybF9wcmVmaXgsICZtZXNzYWdlX25hbWUpIHx8Ci0gICAgICAgIHVy
bF9wcmVmaXggIT0gdXJsX3ByZWZpeF8pIHsKLSAgICAgIHJldHVybiBTdGF0dXMoSU5WQUxJRF9B
UkdVTUVOVCwKLSAgICAgICAgICAgICAgICAgICAgU3RyQ2F0KCJJbnZhbGlkIHR5cGUgVVJMLCB0
eXBlIFVSTHMgbXVzdCBiZSBvZiB0aGUgZm9ybSAnIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVybF9wcmVmaXhfLCAiLzx0eXBlbmFtZT4nLCBnb3Q6ICIsIHR5cGVfdXJsKSk7Ci0gICAg
fQotICAgIGlmICh1cmxfcHJlZml4ICE9IHVybF9wcmVmaXhfKSB7Ci0gICAgICByZXR1cm4gU3Rh
dHVzKElOVkFMSURfQVJHVU1FTlQsCi0gICAgICAgICAgICAgICAgICAgICJDYW5ub3QgcmVzb2x2
ZSB0eXBlcyBmcm9tIFVSTDogIiArIHVybF9wcmVmaXgpOwotICAgIH0KLSAgICBjb25zdCBEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yID0gcG9vbF8tPkZpbmRNZXNzYWdlVHlwZUJ5TmFtZShtZXNzYWdl
X25hbWUpOwotICAgIGlmIChkZXNjcmlwdG9yID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBTdGF0
dXMoTk9UX0ZPVU5ELAotICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCB0eXBlIFVSTCwgdW5r
bm93biB0eXBlOiAiICsgbWVzc2FnZV9uYW1lKTsKLSAgICB9Ci0gICAgQ29udmVydERlc2NyaXB0
b3IoZGVzY3JpcHRvciwgdHlwZSk7Ci0gICAgcmV0dXJuIFN0YXR1cygpOwotICB9Ci0KLSAgU3Rh
dHVzIFJlc29sdmVFbnVtVHlwZShjb25zdCBzdHJpbmcmIHR5cGVfdXJsLCBFbnVtKiBlbnVtX3R5
cGUpIHsKLSAgICBzdHJpbmcgdXJsX3ByZWZpeCwgdHlwZV9uYW1lOwotICAgIGlmICghU3BsaXRU
eXBlVXJsKHR5cGVfdXJsLCAmdXJsX3ByZWZpeCwgJnR5cGVfbmFtZSkgfHwKLSAgICAgICAgdXJs
X3ByZWZpeCAhPSB1cmxfcHJlZml4XykgewotICAgICAgcmV0dXJuIFN0YXR1cyhJTlZBTElEX0FS
R1VNRU5ULAotICAgICAgICAgICAgICAgICAgICBTdHJDYXQoIkludmFsaWQgdHlwZSBVUkwsIHR5
cGUgVVJMcyBtdXN0IGJlIG9mIHRoZSBmb3JtICciLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsX3ByZWZpeF8sICIvPHR5cGVuYW1lPicsIGdvdDogIiwgdHlwZV91cmwpKTsKLSAgICB9
Ci0gICAgaWYgKHVybF9wcmVmaXggIT0gdXJsX3ByZWZpeF8pIHsKLSAgICAgIHJldHVybiBTdGF0
dXMoSU5WQUxJRF9BUkdVTUVOVCwKLSAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZl
IHR5cGVzIGZyb20gVVJMOiAiICsgdXJsX3ByZWZpeCk7Ci0gICAgfQotICAgIGNvbnN0IEVudW1E
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gcG9vbF8tPkZpbmRFbnVtVHlwZUJ5TmFtZSh0eXBlX25h
bWUpOwotICAgIGlmIChkZXNjcmlwdG9yID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBTdGF0dXMo
Tk9UX0ZPVU5ELCAiSW52YWxpZCB0eXBlIFVSTCwgdW5rbm93biB0eXBlOiAiICsgdHlwZV9uYW1l
KTsKLSAgICB9Ci0gICAgQ29udmVydEVudW1EZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGVudW1fdHlw
ZSk7Ci0gICAgcmV0dXJuIFN0YXR1cygpOwotICB9Ci0KLSBwcml2YXRlOgotICB2b2lkIENvbnZl
cnREZXNjcmlwdG9yKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIFR5cGUqIHR5cGUpIHsK
LSAgICB0eXBlLT5DbGVhcigpOwotICAgIHR5cGUtPnNldF9uYW1lKGRlc2NyaXB0b3ItPmZ1bGxf
bmFtZSgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPmZpZWxkX2NvdW50
KCk7ICsraSkgewotICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IGRlc2NyaXB0
b3ItPmZpZWxkKGkpOwotICAgICAgaWYgKGZpZWxkLT50eXBlKCkgPT0gRmllbGREZXNjcmlwdG9y
OjpUWVBFX0dST1VQKSB7Ci0gICAgICAgIC8vIEdyb3VwIGZpZWxkcyBjYW5ub3QgYmUgcmVwcmVz
ZW50ZWQgd2l0aCBUeXBlLiBXZSBkaXNjYXJkIHRoZW0uCi0gICAgICAgIGNvbnRpbnVlOwotICAg
ICAgfQotICAgICAgQ29udmVydEZpZWxkRGVzY3JpcHRvcihkZXNjcmlwdG9yLT5maWVsZChpKSwg
dHlwZS0+YWRkX2ZpZWxkcygpKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNj
cmlwdG9yLT5vbmVvZl9kZWNsX2NvdW50KCk7ICsraSkgewotICAgICAgdHlwZS0+YWRkX29uZW9m
cyhkZXNjcmlwdG9yLT5vbmVvZl9kZWNsKGkpLT5uYW1lKCkpOwotICAgIH0KLSAgICB0eXBlLT5t
dXRhYmxlX3NvdXJjZV9jb250ZXh0KCktPnNldF9maWxlX25hbWUoZGVzY3JpcHRvci0+ZmlsZSgp
LT5uYW1lKCkpOwotICAgIENvbnZlcnRNZXNzYWdlT3B0aW9ucyhkZXNjcmlwdG9yLT5vcHRpb25z
KCksIHR5cGUtPm11dGFibGVfb3B0aW9ucygpKTsKLSAgfQotCi0gIHZvaWQgQ29udmVydE1lc3Nh
Z2VPcHRpb25zKGNvbnN0IE1lc3NhZ2VPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZXBlYXRlZFB0ckZpZWxkPE9wdGlvbj4qIG91dHB1dCkgewotICAgIGlm
IChvcHRpb25zLm1hcF9lbnRyeSgpKSB7Ci0gICAgICBPcHRpb24qIG9wdGlvbiA9IG91dHB1dC0+
QWRkKCk7Ci0gICAgICBvcHRpb24tPnNldF9uYW1lKCJtYXBfZW50cnkiKTsKLSAgICAgIEJvb2xW
YWx1ZSB2YWx1ZTsKLSAgICAgIHZhbHVlLnNldF92YWx1ZSh0cnVlKTsKLSAgICAgIG9wdGlvbi0+
bXV0YWJsZV92YWx1ZSgpLT5QYWNrRnJvbSh2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gVE9ETyh4
aWFvZmVuZyk6IFNldCBvdGhlciAib3B0aW9ucyI/Ci0gIH0KLQotICB2b2lkIENvbnZlcnRGaWVs
ZERlc2NyaXB0b3IoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBGaWVsZCogZmll
bGQpIHsKLSAgICBmaWVsZC0+c2V0X2tpbmQoc3RhdGljX2Nhc3Q8RmllbGQ6OktpbmQ+KGRlc2Ny
aXB0b3ItPnR5cGUoKSkpOwotICAgIHN3aXRjaCAoZGVzY3JpcHRvci0+bGFiZWwoKSkgewotICAg
ICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX09QVElPTkFMOgotICAgICAgICBmaWVsZC0+
c2V0X2NhcmRpbmFsaXR5KEZpZWxkOjpDQVJESU5BTElUWV9PUFRJT05BTCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX1JFUEVBVEVEOgotICAgICAg
ICBmaWVsZC0+c2V0X2NhcmRpbmFsaXR5KEZpZWxkOjpDQVJESU5BTElUWV9SRVBFQVRFRCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OkxBQkVMX1JFUVVJUkVE
OgotICAgICAgICBmaWVsZC0+c2V0X2NhcmRpbmFsaXR5KEZpZWxkOjpDQVJESU5BTElUWV9SRVFV
SVJFRCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBmaWVsZC0+c2V0X251bWJlcihkZXNj
cmlwdG9yLT5udW1iZXIoKSk7Ci0gICAgZmllbGQtPnNldF9uYW1lKGRlc2NyaXB0b3ItPm5hbWUo
KSk7Ci0gICAgZmllbGQtPnNldF9qc29uX25hbWUoZGVzY3JpcHRvci0+anNvbl9uYW1lKCkpOwot
ICAgIGlmIChkZXNjcmlwdG9yLT5oYXNfZGVmYXVsdF92YWx1ZSgpKSB7Ci0gICAgICBmaWVsZC0+
c2V0X2RlZmF1bHRfdmFsdWUoRGVmYXVsdFZhbHVlQXNTdHJpbmcoZGVzY3JpcHRvcikpOwotICAg
IH0KLSAgICBpZiAoZGVzY3JpcHRvci0+dHlwZSgpID09IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9N
RVNTQUdFKSB7Ci0gICAgICBmaWVsZC0+c2V0X3R5cGVfdXJsKEdldFR5cGVVcmwoZGVzY3JpcHRv
ci0+bWVzc2FnZV90eXBlKCkpKTsKLSAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3ItPnR5cGUoKSA9
PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRU5VTSkgewotICAgICAgZmllbGQtPnNldF90eXBlX3Vy
bChHZXRUeXBlVXJsKGRlc2NyaXB0b3ItPmVudW1fdHlwZSgpKSk7Ci0gICAgfQotICAgIGlmIChk
ZXNjcmlwdG9yLT5jb250YWluaW5nX29uZW9mKCkgIT0gTlVMTCkgewotICAgICAgZmllbGQtPnNl
dF9vbmVvZl9pbmRleChkZXNjcmlwdG9yLT5jb250YWluaW5nX29uZW9mKCktPmluZGV4KCkgKyAx
KTsKLSAgICB9Ci0gICAgaWYgKGRlc2NyaXB0b3ItPmlzX3BhY2tlZCgpKSB7Ci0gICAgICBmaWVs
ZC0+c2V0X3BhY2tlZCh0cnVlKTsKLSAgICB9Ci0KLSAgICAvLyBUT0RPKHhpYW9mZW5nKTogU2V0
IG90aGVyIGZpZWxkICJvcHRpb25zIj8KLSAgfQotCi0gIHZvaWQgQ29udmVydEVudW1EZXNjcmlw
dG9yKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFbnVtKiBlbnVtX3R5cGUpIHsKLSAgICBlbnVtX3R5cGUtPkNsZWFyKCk7Ci0g
ICAgZW51bV90eXBlLT5zZXRfbmFtZShkZXNjcmlwdG9yLT5mdWxsX25hbWUoKSk7Ci0gICAgZW51
bV90eXBlLT5tdXRhYmxlX3NvdXJjZV9jb250ZXh0KCktPnNldF9maWxlX25hbWUoCi0gICAgICAg
IGRlc2NyaXB0b3ItPmZpbGUoKS0+bmFtZSgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRl
c2NyaXB0b3ItPnZhbHVlX2NvdW50KCk7ICsraSkgewotICAgICAgY29uc3QgRW51bVZhbHVlRGVz
Y3JpcHRvciogdmFsdWVfZGVzY3JpcHRvciA9IGRlc2NyaXB0b3ItPnZhbHVlKGkpOwotICAgICAg
RW51bVZhbHVlKiB2YWx1ZSA9IGVudW1fdHlwZS0+bXV0YWJsZV9lbnVtdmFsdWUoKS0+QWRkKCk7
Ci0gICAgICB2YWx1ZS0+c2V0X25hbWUodmFsdWVfZGVzY3JpcHRvci0+bmFtZSgpKTsKLSAgICAg
IHZhbHVlLT5zZXRfbnVtYmVyKHZhbHVlX2Rlc2NyaXB0b3ItPm51bWJlcigpKTsKLQotICAgICAg
Ly8gVE9ETyh4aWFvZmVuZyk6IFNldCBFbnVtVmFsdWUgb3B0aW9ucy4KLSAgICB9Ci0gICAgLy8g
VE9ETyh4aWFvZmVuZyk6IFNldCBFbnVtICJvcHRpb25zIi4KLSAgfQotCi0gIHN0cmluZyBHZXRU
eXBlVXJsKGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IpIHsKLSAgICByZXR1cm4gdXJsX3By
ZWZpeF8gKyAiLyIgKyBkZXNjcmlwdG9yLT5mdWxsX25hbWUoKTsKLSAgfQotCi0gIHN0cmluZyBH
ZXRUeXBlVXJsKGNvbnN0IEVudW1EZXNjcmlwdG9yKiBkZXNjcmlwdG9yKSB7Ci0gICAgcmV0dXJu
IHVybF9wcmVmaXhfICsgIi8iICsgZGVzY3JpcHRvci0+ZnVsbF9uYW1lKCk7Ci0gIH0KLQotICBz
dHJpbmcgRGVmYXVsdFZhbHVlQXNTdHJpbmcoY29uc3QgRmllbGREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yKSB7Ci0gICAgc3dpdGNoIChkZXNjcmlwdG9yLT5jcHBfdHlwZSgpKSB7Ci0gICAgICBjYXNl
IEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQzMjoKLSAgICAgICAgcmV0dXJuIFNpbXBsZUl0
b2EoZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1ZV9pbnQzMigpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9JTlQ2NDoKLSAgICAgICAgcmV0dXJu
IFNpbXBsZUl0b2EoZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1ZV9pbnQ2NCgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9VSU5UMzI6Ci0gICAg
ICAgIHJldHVybiBTaW1wbGVJdG9hKGRlc2NyaXB0b3ItPmRlZmF1bHRfdmFsdWVfdWludDMyKCkp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1VJ
TlQ2NDoKLSAgICAgICAgcmV0dXJuIFNpbXBsZUl0b2EoZGVzY3JpcHRvci0+ZGVmYXVsdF92YWx1
ZV91aW50NjQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6
OkNQUFRZUEVfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBTaW1wbGVGdG9hKGRlc2NyaXB0b3ItPmRl
ZmF1bHRfdmFsdWVfZmxvYXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGaWVsZERl
c2NyaXB0b3I6OkNQUFRZUEVfRE9VQkxFOgotICAgICAgICByZXR1cm4gU2ltcGxlRHRvYShkZXNj
cmlwdG9yLT5kZWZhdWx0X3ZhbHVlX2RvdWJsZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEZpZWxkRGVzY3JpcHRvcjo6Q1BQVFlQRV9CT09MOgotICAgICAgICByZXR1cm4gZGVzY3Jp
cHRvci0+ZGVmYXVsdF92YWx1ZV9ib29sKCkgPyAidHJ1ZSIgOiAiZmFsc2UiOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX1NUUklORzoKLSAgICAg
ICAgaWYgKGRlc2NyaXB0b3ItPnR5cGUoKSA9PSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfQllURVMp
IHsKLSAgICAgICAgICByZXR1cm4gQ0VzY2FwZShkZXNjcmlwdG9yLT5kZWZhdWx0X3ZhbHVlX3N0
cmluZygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci0+
ZGVmYXVsdF92YWx1ZV9zdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX0VOVU06Ci0gICAgICAgIHJldHVybiBkZXNj
cmlwdG9yLT5kZWZhdWx0X3ZhbHVlX2VudW0oKS0+bmFtZSgpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0U6Ci0gICAgICAgIEdPT0dM
RV9MT0coREZBVEFMKSA8PCAiTWVzc2FnZXMgY2FuJ3QgaGF2ZSBkZWZhdWx0IHZhbHVlcyEiOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuICIiOwotICB9Ci0KLSAgc3RyaW5nIHVy
bF9wcmVmaXhfOwotICBjb25zdCBEZXNjcmlwdG9yUG9vbCogcG9vbF87Ci19OwotCi19ICAvLyBu
YW1lc3BhY2UKLQotVHlwZVJlc29sdmVyKiBOZXdUeXBlUmVzb2x2ZXJGb3JEZXNjcmlwdG9yUG9v
bChjb25zdCBzdHJpbmcmIHVybF9wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc2NyaXB0b3JQb29sKiBwb29sKSB7Ci0gIHJldHVy
biBuZXcgRGVzY3JpcHRvclBvb2xUeXBlUmVzb2x2ZXIodXJsX3ByZWZpeCwgcG9vbCk7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSB1dGlsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5h
bWVzcGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVf
cmVzb2x2ZXJfdXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZlcl91
dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZWYzYzFhZjkzNzlmMDhlOTk2
MjMyMDljYzlhYWQ3YzI4ZGFlNzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZlcl91dGlsLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29v
Z2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotI2lmbmRlZiBHT09HTEVfUFJPVE9CVUZfVVRJTF9UWVBFX1JFU09MVkVSX1VU
SUxfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9VVElMX1RZUEVfUkVTT0xWRVJfVVRJTF9I
X18KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9jb21tb24uaD4KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLWNs
YXNzIERlc2NyaXB0b3JQb29sOwotbmFtZXNwYWNlIHV0aWwgewotY2xhc3MgVHlwZVJlc29sdmVy
OwotCi0vLyBDcmVhdGVzIGEgVHlwZVJlc29sdmVyIHRoYXQgc2VydmVzIHR5cGUgaW5mb3JtYXRp
b24gaW4gdGhlIGdpdmVuIGRlc2NyaXB0b3IKLS8vIHBvb2wuIENhbGxlciB0YWtlcyBvd25lcnNo
aXAgb2YgdGhlIHJldHVybmVkIFR5cGVSZXNvbHZlci4KLUxJQlBST1RPQlVGX0VYUE9SVCBUeXBl
UmVzb2x2ZXIqIE5ld1R5cGVSZXNvbHZlckZvckRlc2NyaXB0b3JQb29sKAotICAgIGNvbnN0IHN0
cmluZyYgdXJsX3ByZWZpeCwgY29uc3QgRGVzY3JpcHRvclBvb2wqIHBvb2wpOwotCi19ICAvLyBu
YW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8vIG5hbWVzcGFj
ZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1VUSUxfVFlQRV9SRVNPTFZFUl9V
VElMX0hfXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvdHlwZV9yZXNvbHZl
cl91dGlsX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyX3V0
aWxfdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEwYmY2NTI5NzZhOWQ4
NzcyNWU4NjllMWZmYTlmMTU5Y2UyNzRhZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90eXBlX3Jlc29sdmVyX3V0
aWxfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBACi0vLyBQcm90b2NvbCBC
dWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAy
MDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91dGlsL3R5
cGVfcmVzb2x2ZXJfdXRpbC5oPgotCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1lbW9y
eT4KLSNpZm5kZWYgX1NIQVJFRF9QVFJfSAotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVi
cy9zaGFyZWRfcHRyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVj
dG9yPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3R5cGUucGIuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvd3JhcHBlcnMucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
bWFwX3VuaXR0ZXN0LnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3RfdXRpbC5o
PgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi91bml0dGVzdC5wYi5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi91dGlsL2pzb25fZm9ybWF0X3Byb3RvMy5wYi5oPgotI2luY2x1ZGUgPGdv
b2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJv
dG9idWYvdGVzdGluZy9nb29nbGV0ZXN0Lmg+Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQot
bmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotbmFtZXNwYWNlIHV0aWwg
ewotbmFtZXNwYWNlIHsKLXVzaW5nIGdvb2dsZTo6cHJvdG9idWY6OlR5cGU7Ci11c2luZyBnb29n
bGU6OnByb3RvYnVmOjpFbnVtOwotdXNpbmcgZ29vZ2xlOjpwcm90b2J1Zjo6RmllbGQ7Ci11c2lu
ZyBnb29nbGU6OnByb3RvYnVmOjpPcHRpb247Ci11c2luZyBnb29nbGU6OnByb3RvYnVmOjpCb29s
VmFsdWU7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGtVcmxQcmVmaXhbXSA9ICJ0eXBlLmdvb2dsZWFw
aXMuY29tIjsKLQotY2xhc3MgRGVzY3JpcHRvclBvb2xUeXBlUmVzb2x2ZXJUZXN0IDogcHVibGlj
IHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgRGVzY3JpcHRvclBvb2xUeXBlUmVzb2x2ZXJU
ZXN0KCkgewotICAgIHJlc29sdmVyXy5yZXNldChOZXdUeXBlUmVzb2x2ZXJGb3JEZXNjcmlwdG9y
UG9vbCgKLSAgICAgICAga1VybFByZWZpeCwgRGVzY3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29s
KCkpKTsKLSAgfQotCi0gIGNvbnN0IEZpZWxkKiBGaW5kRmllbGQoY29uc3QgVHlwZSYgdHlwZSwg
Y29uc3Qgc3RyaW5nJiBuYW1lKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLmZpZWxk
c19zaXplKCk7ICsraSkgewotICAgICAgY29uc3QgRmllbGQmIGZpZWxkID0gdHlwZS5maWVsZHMo
aSk7Ci0gICAgICBpZiAoZmllbGQubmFtZSgpID09IG5hbWUpIHsKLSAgICAgICAgcmV0dXJuICZm
aWVsZDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBib29sIEhh
c0ZpZWxkKGNvbnN0IFR5cGUmIHR5cGUsIGNvbnN0IHN0cmluZyYgbmFtZSkgewotICAgIHJldHVy
biBGaW5kRmllbGQodHlwZSwgbmFtZSkgIT0gTlVMTDsKLSAgfQotCi0gIGJvb2wgSGFzRmllbGQo
Y29uc3QgVHlwZSYgdHlwZSwgRmllbGQ6OkNhcmRpbmFsaXR5IGNhcmRpbmFsaXR5LAotICAgICAg
ICAgICAgICAgIEZpZWxkOjpLaW5kIGtpbmQsIGNvbnN0IHN0cmluZyYgbmFtZSwgaW50IG51bWJl
cikgewotICAgIGNvbnN0IEZpZWxkKiBmaWVsZCA9IEZpbmRGaWVsZCh0eXBlLCBuYW1lKTsKLSAg
ICBpZiAoZmllbGQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmllbGQtPmNhcmRpbmFsaXR5KCkgPT0gY2FyZGluYWxpdHkgJiYKLSAgICAgICAgZmll
bGQtPmtpbmQoKSA9PSBraW5kICYmIGZpZWxkLT5udW1iZXIoKSA9PSBudW1iZXI7Ci0gIH0KLQot
ICBib29sIENoZWNrRmllbGRUeXBlVXJsKGNvbnN0IFR5cGUmIHR5cGUsIGNvbnN0IHN0cmluZyYg
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHR5cGVfdXJsKSB7
Ci0gICAgY29uc3QgRmllbGQqIGZpZWxkID0gRmluZEZpZWxkKHR5cGUsIG5hbWUpOwotICAgIGlm
IChmaWVsZCA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biBmaWVsZC0+dHlwZV91cmwoKSA9PSB0eXBlX3VybDsKLSAgfQotCi0gIGJvb2wgRmllbGRJbk9u
ZW9mKGNvbnN0IFR5cGUmIHR5cGUsIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RyaW5nJiBvbmVvZl9uYW1lKSB7Ci0gICAgY29uc3QgRmllbGQqIGZpZWxk
ID0gRmluZEZpZWxkKHR5cGUsIG5hbWUpOwotICAgIGlmIChmaWVsZCA9PSBOVUxMIHx8IGZpZWxk
LT5vbmVvZl9pbmRleCgpIDw9IDAgfHwKLSAgICAgICAgZmllbGQtPm9uZW9mX2luZGV4KCkgPiB0
eXBlLm9uZW9mc19zaXplKCkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHR5cGUub25lb2ZzKGZpZWxkLT5vbmVvZl9pbmRleCgpIC0gMSkgPT0gb25lb2ZfbmFtZTsK
LSAgfQotCi0gIGJvb2wgSXNQYWNrZWQoY29uc3QgVHlwZSYgdHlwZSwgY29uc3Qgc3RyaW5nJiBu
YW1lKSB7Ci0gICAgY29uc3QgRmllbGQqIGZpZWxkID0gRmluZEZpZWxkKHR5cGUsIG5hbWUpOwot
ICAgIGlmIChmaWVsZCA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiBmaWVsZC0+cGFja2VkKCk7Ci0gIH0KLQotICBib29sIEVudW1IYXNWYWx1ZShjb25z
dCBFbnVtJiB0eXBlLCBjb25zdCBzdHJpbmcmIG5hbWUsIGludCBudW1iZXIpIHsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHR5cGUuZW51bXZhbHVlX3NpemUoKTsgKytpKSB7Ci0gICAgICBpZiAo
dHlwZS5lbnVtdmFsdWUoaSkubmFtZSgpID09IG5hbWUgJiYKLSAgICAgICAgICB0eXBlLmVudW12
YWx1ZShpKS5udW1iZXIoKSA9PSBudW1iZXIpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJvb2wgSGFzQm9vbE9wdGlv
bihjb25zdCBSZXBlYXRlZFB0ckZpZWxkPE9wdGlvbj4mIG9wdGlvbnMsCi0gICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmcmIG5hbWUsIGJvb2wgdmFsdWUpIHsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG9wdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgIGNvbnN0IE9wdGlvbiYgb3B0
aW9uID0gb3B0aW9ucy5HZXQoaSk7Ci0gICAgICBpZiAob3B0aW9uLm5hbWUoKSA9PSBuYW1lKSB7
Ci0gICAgICAgIEJvb2xWYWx1ZSBib29sX3ZhbHVlOwotICAgICAgICBpZiAob3B0aW9uLnZhbHVl
KCkuVW5wYWNrVG8oJmJvb2xfdmFsdWUpICYmCi0gICAgICAgICAgICBib29sX3ZhbHVlLnZhbHVl
KCkgPT0gdmFsdWUpIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBzdHJpbmcgR2V0VHlwZVVybChz
dHJpbmcgZnVsbF9uYW1lKSB7Ci0gICAgcmV0dXJuIGtVcmxQcmVmaXggKyBzdHJpbmcoIi8iKSAr
IGZ1bGxfbmFtZTsKLSAgfQotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gIHN0cmluZyBHZXRU
eXBlVXJsKCkgewotICAgIHJldHVybiBHZXRUeXBlVXJsKFQ6OmRlc2NyaXB0b3IoKS0+ZnVsbF9u
YW1lKCkpOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGdvb2dsZTo6cHJvdG9idWY6OnNjb3BlZF9w
dHI8VHlwZVJlc29sdmVyPiByZXNvbHZlcl87Ci19OwotCi1URVNUX0YoRGVzY3JpcHRvclBvb2xU
eXBlUmVzb2x2ZXJUZXN0LCBUZXN0QWxsVHlwZXMpIHsKLSAgVHlwZSB0eXBlOwotICBBU1NFUlRf
VFJVRShyZXNvbHZlcl8tPlJlc29sdmVNZXNzYWdlVHlwZSgKLSAgICAgIEdldFR5cGVVcmw8cHJv
dG9idWZfdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcz4oKSwgJnR5cGUpLm9rKCkpOwotICAvLyBDaGVj
ayBhbGwgb3B0aW9uYWwgZmllbGRzLgotICBFWFBFQ1RfVFJVRShIYXNGaWVsZCh0eXBlLCBGaWVs
ZDo6Q0FSRElOQUxJVFlfT1BUSU9OQUwsCi0gICAgICAgICAgICAgICAgICAgICAgIEZpZWxkOjpU
WVBFX0lOVDMyLCAib3B0aW9uYWxfaW50MzIiLCAxKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc0ZpZWxk
KHR5cGUsIEZpZWxkOjpDQVJESU5BTElUWV9PUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgRmllbGQ6OlRZUEVfSU5UNjQsICJvcHRpb25hbF9pbnQ2NCIsIDIpKTsKLSAgRVhQRUNUX1RS
VUUoSGFzRmllbGQodHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX09QVElPTkFMLAotICAgICAgICAg
ICAgICAgICAgICAgICBGaWVsZDo6VFlQRV9VSU5UMzIsICJvcHRpb25hbF91aW50MzIiLCAzKSk7
Ci0gIEVYUEVDVF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZpZWxkOjpDQVJESU5BTElUWV9PUFRJT05B
TCwKLSAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ6OlRZUEVfVUlOVDY0LCAib3B0aW9uYWxf
dWludDY0IiwgNCkpOwotICBFWFBFQ1RfVFJVRShIYXNGaWVsZCh0eXBlLCBGaWVsZDo6Q0FSRElO
QUxJVFlfT1BUSU9OQUwsCi0gICAgICAgICAgICAgICAgICAgICAgIEZpZWxkOjpUWVBFX1NJTlQz
MiwgIm9wdGlvbmFsX3NpbnQzMiIsIDUpKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlwZSwg
RmllbGQ6OkNBUkRJTkFMSVRZX09QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICBGaWVs
ZDo6VFlQRV9TSU5UNjQsICJvcHRpb25hbF9zaW50NjQiLCA2KSk7Ci0gIEVYUEVDVF9UUlVFKEhh
c0ZpZWxkKHR5cGUsIEZpZWxkOjpDQVJESU5BTElUWV9PUFRJT05BTCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgRmllbGQ6OlRZUEVfRklYRUQzMiwgIm9wdGlvbmFsX2ZpeGVkMzIiLCA3KSk7Ci0g
IEVYUEVDVF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZpZWxkOjpDQVJESU5BTElUWV9PUFRJT05BTCwK
LSAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ6OlRZUEVfRklYRUQ2NCwgIm9wdGlvbmFsX2Zp
eGVkNjQiLCA4KSk7Ci0gIEVYUEVDVF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZpZWxkOjpDQVJESU5B
TElUWV9PUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ6OlRZUEVfU0ZJWEVE
MzIsICJvcHRpb25hbF9zZml4ZWQzMiIsIDkpKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlw
ZSwgRmllbGQ6OkNBUkRJTkFMSVRZX09QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICBG
aWVsZDo6VFlQRV9TRklYRUQ2NCwgIm9wdGlvbmFsX3NmaXhlZDY0IiwgMTApKTsKLSAgRVhQRUNU
X1RSVUUoSGFzRmllbGQodHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX09QVElPTkFMLAotICAgICAg
ICAgICAgICAgICAgICAgICBGaWVsZDo6VFlQRV9GTE9BVCwgIm9wdGlvbmFsX2Zsb2F0IiwgMTEp
KTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX09QVElP
TkFMLAotICAgICAgICAgICAgICAgICAgICAgICBGaWVsZDo6VFlQRV9ET1VCTEUsICJvcHRpb25h
bF9kb3VibGUiLCAxMikpOwotICBFWFBFQ1RfVFJVRShIYXNGaWVsZCh0eXBlLCBGaWVsZDo6Q0FS
RElOQUxJVFlfT1BUSU9OQUwsCi0gICAgICAgICAgICAgICAgICAgICAgIEZpZWxkOjpUWVBFX0JP
T0wsICJvcHRpb25hbF9ib29sIiwgMTMpKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlwZSwg
RmllbGQ6OkNBUkRJTkFMSVRZX09QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICBGaWVs
ZDo6VFlQRV9TVFJJTkcsICJvcHRpb25hbF9zdHJpbmciLCAxNCkpOwotICBFWFBFQ1RfVFJVRShI
YXNGaWVsZCh0eXBlLCBGaWVsZDo6Q0FSRElOQUxJVFlfT1BUSU9OQUwsCi0gICAgICAgICAgICAg
ICAgICAgICAgIEZpZWxkOjpUWVBFX0JZVEVTLCAib3B0aW9uYWxfYnl0ZXMiLCAxNSkpOwotCi0g
IEVYUEVDVF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZpZWxkOjpDQVJESU5BTElUWV9PUFRJT05BTCwK
LSAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ6OlRZUEVfTUVTU0FHRSwgIm9wdGlvbmFsX25l
c3RlZF9tZXNzYWdlIiwgMTgpKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlwZSwgRmllbGQ6
OkNBUkRJTkFMSVRZX09QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICBGaWVsZDo6VFlQ
RV9NRVNTQUdFLCAib3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlIiwgMTkpKTsKLQotICBFWFBFQ1Rf
VFJVRShDaGVja0ZpZWxkVHlwZVVybCgKLSAgICAgIHR5cGUsICJvcHRpb25hbF9uZXN0ZWRfbWVz
c2FnZSIsCi0gICAgICBHZXRUeXBlVXJsPHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6
Ok5lc3RlZE1lc3NhZ2U+KCkpKTsKLSAgRVhQRUNUX1RSVUUoQ2hlY2tGaWVsZFR5cGVVcmwoCi0g
ICAgICB0eXBlLCAib3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlIiwKLSAgICAgIEdldFR5cGVVcmw8
cHJvdG9idWZfdW5pdHRlc3Q6OkZvcmVpZ25NZXNzYWdlPigpKSk7Ci0KLSAgRVhQRUNUX1RSVUUo
SGFzRmllbGQodHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX09QVElPTkFMLAotICAgICAgICAgICAg
ICAgICAgICAgICBGaWVsZDo6VFlQRV9FTlVNLCAib3B0aW9uYWxfbmVzdGVkX2VudW0iLCAyMSkp
OwotICBFWFBFQ1RfVFJVRShIYXNGaWVsZCh0eXBlLCBGaWVsZDo6Q0FSRElOQUxJVFlfT1BUSU9O
QUwsCi0gICAgICAgICAgICAgICAgICAgICAgIEZpZWxkOjpUWVBFX0VOVU0sICJvcHRpb25hbF9m
b3JlaWduX2VudW0iLCAyMikpOwotCi0gIEVYUEVDVF9UUlVFKENoZWNrRmllbGRUeXBlVXJsKAot
ICAgICAgdHlwZSwgIm9wdGlvbmFsX25lc3RlZF9lbnVtIiwKLSAgICAgIEdldFR5cGVVcmwoInBy
b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtIikpKTsKLSAgRVhQRUNUX1RS
VUUoQ2hlY2tGaWVsZFR5cGVVcmwoCi0gICAgICB0eXBlLCAib3B0aW9uYWxfZm9yZWlnbl9lbnVt
IiwKLSAgICAgIEdldFR5cGVVcmwoInByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtIikpKTsK
LQotICAvLyBDaGVjayBhbGwgcmVwZWF0ZWQgZmllbGRzLgotICBFWFBFQ1RfVFJVRShIYXNGaWVs
ZCh0eXBlLCBGaWVsZDo6Q0FSRElOQUxJVFlfUkVQRUFURUQsCi0gICAgICAgICAgICAgICAgICAg
ICAgIEZpZWxkOjpUWVBFX0lOVDMyLCAicmVwZWF0ZWRfaW50MzIiLCAzMSkpOwotICBFWFBFQ1Rf
VFJVRShIYXNGaWVsZCh0eXBlLCBGaWVsZDo6Q0FSRElOQUxJVFlfUkVQRUFURUQsCi0gICAgICAg
ICAgICAgICAgICAgICAgIEZpZWxkOjpUWVBFX0lOVDY0LCAicmVwZWF0ZWRfaW50NjQiLCAzMikp
OwotICBFWFBFQ1RfVFJVRShIYXNGaWVsZCh0eXBlLCBGaWVsZDo6Q0FSRElOQUxJVFlfUkVQRUFU
RUQsCi0gICAgICAgICAgICAgICAgICAgICAgIEZpZWxkOjpUWVBFX1VJTlQzMiwgInJlcGVhdGVk
X3VpbnQzMiIsIDMzKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZpZWxkOjpDQVJE
SU5BTElUWV9SRVBFQVRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ6OlRZUEVfVUlO
VDY0LCAicmVwZWF0ZWRfdWludDY0IiwgMzQpKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlw
ZSwgRmllbGQ6OkNBUkRJTkFMSVRZX1JFUEVBVEVELAotICAgICAgICAgICAgICAgICAgICAgICBG
aWVsZDo6VFlQRV9TSU5UMzIsICJyZXBlYXRlZF9zaW50MzIiLCAzNSkpOwotICBFWFBFQ1RfVFJV
RShIYXNGaWVsZCh0eXBlLCBGaWVsZDo6Q0FSRElOQUxJVFlfUkVQRUFURUQsCi0gICAgICAgICAg
ICAgICAgICAgICAgIEZpZWxkOjpUWVBFX1NJTlQ2NCwgInJlcGVhdGVkX3NpbnQ2NCIsIDM2KSk7
Ci0gIEVYUEVDVF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZpZWxkOjpDQVJESU5BTElUWV9SRVBFQVRF
RCwKLSAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ6OlRZUEVfRklYRUQzMiwgInJlcGVhdGVk
X2ZpeGVkMzIiLCAzNykpOwotICBFWFBFQ1RfVFJVRShIYXNGaWVsZCh0eXBlLCBGaWVsZDo6Q0FS
RElOQUxJVFlfUkVQRUFURUQsCi0gICAgICAgICAgICAgICAgICAgICAgIEZpZWxkOjpUWVBFX0ZJ
WEVENjQsICJyZXBlYXRlZF9maXhlZDY0IiwgMzgpKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQo
dHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX1JFUEVBVEVELAotICAgICAgICAgICAgICAgICAgICAg
ICBGaWVsZDo6VFlQRV9TRklYRUQzMiwgInJlcGVhdGVkX3NmaXhlZDMyIiwgMzkpKTsKLSAgRVhQ
RUNUX1RSVUUoSGFzRmllbGQodHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX1JFUEVBVEVELAotICAg
ICAgICAgICAgICAgICAgICAgICBGaWVsZDo6VFlQRV9TRklYRUQ2NCwgInJlcGVhdGVkX3NmaXhl
ZDY0IiwgNDApKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlwZSwgRmllbGQ6OkNBUkRJTkFM
SVRZX1JFUEVBVEVELAotICAgICAgICAgICAgICAgICAgICAgICBGaWVsZDo6VFlQRV9GTE9BVCwg
InJlcGVhdGVkX2Zsb2F0IiwgNDEpKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlwZSwgRmll
bGQ6OkNBUkRJTkFMSVRZX1JFUEVBVEVELAotICAgICAgICAgICAgICAgICAgICAgICBGaWVsZDo6
VFlQRV9ET1VCTEUsICJyZXBlYXRlZF9kb3VibGUiLCA0MikpOwotICBFWFBFQ1RfVFJVRShIYXNG
aWVsZCh0eXBlLCBGaWVsZDo6Q0FSRElOQUxJVFlfUkVQRUFURUQsCi0gICAgICAgICAgICAgICAg
ICAgICAgIEZpZWxkOjpUWVBFX0JPT0wsICJyZXBlYXRlZF9ib29sIiwgNDMpKTsKLSAgRVhQRUNU
X1RSVUUoSGFzRmllbGQodHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX1JFUEVBVEVELAotICAgICAg
ICAgICAgICAgICAgICAgICBGaWVsZDo6VFlQRV9TVFJJTkcsICJyZXBlYXRlZF9zdHJpbmciLCA0
NCkpOwotICBFWFBFQ1RfVFJVRShIYXNGaWVsZCh0eXBlLCBGaWVsZDo6Q0FSRElOQUxJVFlfUkVQ
RUFURUQsCi0gICAgICAgICAgICAgICAgICAgICAgIEZpZWxkOjpUWVBFX0JZVEVTLCAicmVwZWF0
ZWRfYnl0ZXMiLCA0NSkpOwotCi0gIEVYUEVDVF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZpZWxkOjpD
QVJESU5BTElUWV9SRVBFQVRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ6OlRZUEVf
TUVTU0FHRSwgInJlcGVhdGVkX25lc3RlZF9tZXNzYWdlIiwgNDgpKTsKLSAgRVhQRUNUX1RSVUUo
SGFzRmllbGQodHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX1JFUEVBVEVELAotICAgICAgICAgICAg
ICAgICAgICAgICBGaWVsZDo6VFlQRV9NRVNTQUdFLCAicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdl
IiwgNDkpKTsKLQotICBFWFBFQ1RfVFJVRShDaGVja0ZpZWxkVHlwZVVybCgKLSAgICAgIHR5cGUs
ICJyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZSIsCi0gICAgICBHZXRUeXBlVXJsPHByb3RvYnVmX3Vu
aXR0ZXN0OjpUZXN0QWxsVHlwZXM6Ok5lc3RlZE1lc3NhZ2U+KCkpKTsKLSAgRVhQRUNUX1RSVUUo
Q2hlY2tGaWVsZFR5cGVVcmwoCi0gICAgICB0eXBlLCAicmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdl
IiwKLSAgICAgIEdldFR5cGVVcmw8cHJvdG9idWZfdW5pdHRlc3Q6OkZvcmVpZ25NZXNzYWdlPigp
KSk7Ci0KLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX1JF
UEVBVEVELAotICAgICAgICAgICAgICAgICAgICAgICBGaWVsZDo6VFlQRV9FTlVNLCAicmVwZWF0
ZWRfbmVzdGVkX2VudW0iLCA1MSkpOwotICBFWFBFQ1RfVFJVRShIYXNGaWVsZCh0eXBlLCBGaWVs
ZDo6Q0FSRElOQUxJVFlfUkVQRUFURUQsCi0gICAgICAgICAgICAgICAgICAgICAgIEZpZWxkOjpU
WVBFX0VOVU0sICJyZXBlYXRlZF9mb3JlaWduX2VudW0iLCA1MikpOwotCi0gIEVYUEVDVF9UUlVF
KENoZWNrRmllbGRUeXBlVXJsKAotICAgICAgdHlwZSwgInJlcGVhdGVkX25lc3RlZF9lbnVtIiwK
LSAgICAgIEdldFR5cGVVcmwoInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRF
bnVtIikpKTsKLSAgRVhQRUNUX1RSVUUoQ2hlY2tGaWVsZFR5cGVVcmwoCi0gICAgICB0eXBlLCAi
cmVwZWF0ZWRfZm9yZWlnbl9lbnVtIiwKLSAgICAgIEdldFR5cGVVcmwoInByb3RvYnVmX3VuaXR0
ZXN0LkZvcmVpZ25FbnVtIikpKTsKLQotICAvLyBHcm91cHMgYXJlIGRpc2NhcmRlZCB3aGVuIGNv
bnZlcnRpbmcgdG8gVHlwZS4KLSAgY29uc3QgRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHByb3Rv
YnVmX3VuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRlc2NyaXB0b3IoKTsKLSAgRVhQRUNUX1RSVUUo
ZGVzY3JpcHRvci0+RmluZEZpZWxkQnlOYW1lKCJvcHRpb25hbGdyb3VwIikgIT0gTlVMTCk7Ci0g
IEVYUEVDVF9UUlVFKGRlc2NyaXB0b3ItPkZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRncm91cCIp
ICE9IE5VTEwpOwotICBBU1NFUlRfRkFMU0UoSGFzRmllbGQodHlwZSwgIm9wdGlvbmFsZ3JvdXAi
KSk7Ci0gIEFTU0VSVF9GQUxTRShIYXNGaWVsZCh0eXBlLCAicmVwZWF0ZWRncm91cCIpKTsKLX0K
LQotVEVTVF9GKERlc2NyaXB0b3JQb29sVHlwZVJlc29sdmVyVGVzdCwgVGVzdFBhY2tlZEZpZWxk
KSB7Ci0gIFR5cGUgdHlwZTsKLSAgQVNTRVJUX1RSVUUocmVzb2x2ZXJfLT5SZXNvbHZlTWVzc2Fn
ZVR5cGUoCi0gICAgICBHZXRUeXBlVXJsPHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0UGFja2VkVHlw
ZXM+KCksICZ0eXBlKS5vaygpKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQodHlwZSwgRmllbGQ6
OkNBUkRJTkFMSVRZX1JFUEVBVEVELAotICAgICAgICAgICAgICAgICAgICAgICBGaWVsZDo6VFlQ
RV9JTlQzMiwgInBhY2tlZF9pbnQzMiIsIDkwKSk7Ci0gIEVYUEVDVF9UUlVFKElzUGFja2VkKHR5
cGUsICJwYWNrZWRfaW50MzIiKSk7Ci19Ci0KLVRFU1RfRihEZXNjcmlwdG9yUG9vbFR5cGVSZXNv
bHZlclRlc3QsIFRlc3RPbmVvZikgewotICBUeXBlIHR5cGU7Ci0gIEFTU0VSVF9UUlVFKHJlc29s
dmVyXy0+UmVzb2x2ZU1lc3NhZ2VUeXBlKAotICAgICAgR2V0VHlwZVVybDxwcm90b2J1Zl91bml0
dGVzdDo6VGVzdEFsbFR5cGVzPigpLCAmdHlwZSkub2soKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc0Zp
ZWxkKHR5cGUsIEZpZWxkOjpDQVJESU5BTElUWV9PUFRJT05BTCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgRmllbGQ6OlRZUEVfVUlOVDMyLCAib25lb2ZfdWludDMyIiwgMTExKSk7Ci0gIEVYUEVD
VF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZpZWxkOjpDQVJESU5BTElUWV9PUFRJT05BTCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgRmllbGQ6OlRZUEVfTUVTU0FHRSwgIm9uZW9mX25lc3RlZF9tZXNz
YWdlIiwgMTEyKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZpZWxkOjpDQVJESU5B
TElUWV9PUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ6OlRZUEVfU1RSSU5H
LCAib25lb2Zfc3RyaW5nIiwgMTEzKSk7Ci0gIEVYUEVDVF9UUlVFKEhhc0ZpZWxkKHR5cGUsIEZp
ZWxkOjpDQVJESU5BTElUWV9PUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ6
OlRZUEVfQllURVMsICJvbmVvZl9ieXRlcyIsIDExNCkpOwotICBFWFBFQ1RfVFJVRShGaWVsZElu
T25lb2YodHlwZSwgIm9uZW9mX3VpbnQzMiIsICJvbmVvZl9maWVsZCIpKTsKLSAgRVhQRUNUX1RS
VUUoRmllbGRJbk9uZW9mKHR5cGUsICJvbmVvZl9uZXN0ZWRfbWVzc2FnZSIsICJvbmVvZl9maWVs
ZCIpKTsKLSAgRVhQRUNUX1RSVUUoRmllbGRJbk9uZW9mKHR5cGUsICJvbmVvZl9zdHJpbmciLCAi
b25lb2ZfZmllbGQiKSk7Ci0gIEVYUEVDVF9UUlVFKEZpZWxkSW5PbmVvZih0eXBlLCAib25lb2Zf
Ynl0ZXMiLCAib25lb2ZfZmllbGQiKSk7Ci19Ci0KLVRFU1RfRihEZXNjcmlwdG9yUG9vbFR5cGVS
ZXNvbHZlclRlc3QsIFRlc3RNYXApIHsKLSAgVHlwZSB0eXBlOwotICBBU1NFUlRfVFJVRShyZXNv
bHZlcl8tPlJlc29sdmVNZXNzYWdlVHlwZSgKLSAgICAgIEdldFR5cGVVcmw8cHJvdG9idWZfdW5p
dHRlc3Q6OlRlc3RNYXA+KCksICZ0eXBlKS5vaygpKTsKLSAgRVhQRUNUX1RSVUUoSGFzRmllbGQo
dHlwZSwgRmllbGQ6OkNBUkRJTkFMSVRZX1JFUEVBVEVELAotICAgICAgICAgICAgICAgICAgICAg
ICBGaWVsZDo6VFlQRV9NRVNTQUdFLCAibWFwX2ludDMyX2ludDMyIiwgMSkpOwotICBFWFBFQ1Rf
VFJVRShDaGVja0ZpZWxkVHlwZVVybCgKLSAgICAgIHR5cGUsICJtYXBfaW50MzJfaW50MzIiLAot
ICAgICAgR2V0VHlwZVVybCgicHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBJbnQzMkludDMy
RW50cnkiKSkpOwotCi0gIEFTU0VSVF9UUlVFKHJlc29sdmVyXy0+UmVzb2x2ZU1lc3NhZ2VUeXBl
KAotICAgICAgR2V0VHlwZVVybCgicHJvdG9idWZfdW5pdHRlc3QuVGVzdE1hcC5NYXBJbnQzMklu
dDMyRW50cnkiKSwKLSAgICAgICZ0eXBlKS5vaygpKTsKLSAgRVhQRUNUX1RSVUUoSGFzQm9vbE9w
dGlvbih0eXBlLm9wdGlvbnMoKSwgIm1hcF9lbnRyeSIsIHRydWUpKTsKLX0KLQotVEVTVF9GKERl
c2NyaXB0b3JQb29sVHlwZVJlc29sdmVyVGVzdCwgVGVzdEVudW0pIHsKLSAgRW51bSB0eXBlOwot
ICBBU1NFUlRfVFJVRShyZXNvbHZlcl8tPlJlc29sdmVFbnVtVHlwZSgKLSAgICAgIEdldFR5cGVV
cmwoInByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtIiksICZ0eXBlKS5v
aygpKTsKLSAgRW51bUhhc1ZhbHVlKHR5cGUsICJGT08iLCAxKTsKLSAgRW51bUhhc1ZhbHVlKHR5
cGUsICJCQVIiLCAyKTsKLSAgRW51bUhhc1ZhbHVlKHR5cGUsICJCQVoiLCAzKTsKLSAgRW51bUhh
c1ZhbHVlKHR5cGUsICJORUciLCAtMSk7Ci19Ci0KLVRFU1RfRihEZXNjcmlwdG9yUG9vbFR5cGVS
ZXNvbHZlclRlc3QsIFRlc3RKc29uTmFtZSkgewotICBUeXBlIHR5cGU7Ci0gIEFTU0VSVF9UUlVF
KHJlc29sdmVyXy0+UmVzb2x2ZU1lc3NhZ2VUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR2V0VHlwZVVybDxwcm90b2J1Zl91bml0dGVzdDo6VGVzdEFsbFR5cGVzPigpLCAmdHlwZSkK
LSAgICAgICAgICAgICAgICAgIC5vaygpKTsKLSAgRVhQRUNUX0VRKCJvcHRpb25hbEludDMyIiwg
RmluZEZpZWxkKHR5cGUsICJvcHRpb25hbF9pbnQzMiIpLT5qc29uX25hbWUoKSk7Ci0KLSAgQVNT
RVJUX1RSVUUocmVzb2x2ZXJfLT5SZXNvbHZlTWVzc2FnZVR5cGUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBHZXRUeXBlVXJsPHByb3RvMzo6VGVzdEN1c3RvbUpzb25OYW1lPigpLCAmdHlw
ZSkKLSAgICAgICAgICAgICAgICAgIC5vaygpKTsKLSAgRVhQRUNUX0VRKCJAdmFsdWUiLCBGaW5k
RmllbGQodHlwZSwgInZhbHVlIiktPmpzb25fbmFtZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
Ci19ICAvLyBuYW1lc3BhY2UgdXRpbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBu
YW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvd2VsbF9rbm93
bl90eXBlc191bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93ZWxsX2tub3duX3R5cGVz
X3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWE5YWExMGVjMThh
N2I5MjA0ZmM1OWRjMWI0OGVlZjU1ZDNhY2U3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93ZWxsX2tub3duX3R5cGVzX3Vu
aXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVm
ZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAw
OCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
cy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X3dl
bGxfa25vd25fdHlwZXMucGIuaD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9j
b21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdGVzdGluZy9nb29nbGV0ZXN0Lmg+
Ci0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1
YnMvc3RsX3V0aWwuaD4KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYg
ewotbmFtZXNwYWNlIHsKLQotLy8gVGhpcyB0ZXN0IG9ubHkgY2hlY2tzIHdoZXRoZXIgd2VsbC1r
bm93biB0eXBlcyBhcmUgaW5jbHVkZWQgaW4gcHJvdG9idWYKLS8vIHJ1bnRpbWUgbGlicmFyeS4g
VGhlIHRlc3QgcGFzc2VzIGlmIGl0IGNvbXBpbGVzLgotVEVTVChXZWxsS25vd25UeXBlc1Rlc3Qs
IEFsbEtub3duVHlwZXNBcmVJbmNsdWRlZCkgewotICBwcm90b2J1Zl91bml0dGVzdDo6VGVzdFdl
bGxLbm93blR5cGVzIG1lc3NhZ2U7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLmFueV9maWVsZCgp
LkJ5dGVTaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5hcGlfZmllbGQoKS5CeXRlU2l6
ZSgpKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuZHVyYXRpb25fZmllbGQoKS5CeXRlU2l6ZSgp
KTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuZW1wdHlfZmllbGQoKS5CeXRlU2l6ZSgpKTsKLSAg
RVhQRUNUX0VRKDAsIG1lc3NhZ2UuZmllbGRfbWFza19maWVsZCgpLkJ5dGVTaXplKCkpOwotICBF
WFBFQ1RfRVEoMCwgbWVzc2FnZS5zb3VyY2VfY29udGV4dF9maWVsZCgpLkJ5dGVTaXplKCkpOwot
ICBFWFBFQ1RfRVEoMCwgbWVzc2FnZS5zdHJ1Y3RfZmllbGQoKS5CeXRlU2l6ZSgpKTsKLSAgRVhQ
RUNUX0VRKDAsIG1lc3NhZ2UudGltZXN0YW1wX2ZpZWxkKCkuQnl0ZVNpemUoKSk7Ci0gIEVYUEVD
VF9FUSgwLCBtZXNzYWdlLnR5cGVfZmllbGQoKS5CeXRlU2l6ZSgpKTsKLSAgRVhQRUNUX0VRKDAs
IG1lc3NhZ2UuaW50MzJfZmllbGQoKS5CeXRlU2l6ZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0LmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3By
b3RvYnVmL3dpcmVfZm9ybWF0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWU0
ZTI1ZDQ5MzViZTdhNTQyZmY1NTM0YWUwNmE3YmFhYWU4ZDRkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1h
dC5jYworKysgL2Rldi9udWxsCkBAIC0xLDExMzMgKzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVy
cyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5n
b29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBW
YXJkYSkKLS8vICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQot
Ly8gIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotCi0jaW5jbHVkZSA8
c3RhY2s+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL3N0dWJzL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvY29t
bW9uLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3ByaW50Zi5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3dpcmVfZm9ybWF0X2xpdGVfaW5sLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3Rv
YnVmL2Rlc2NyaXB0b3IucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRf
c3RyZWFtLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW0u
aD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Vua25vd25fZmllbGRfc2V0Lmg+Ci0KLQotCi1u
YW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50ZXJu
YWwgewotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0KLWJvb2wgVW5rbm93bkZpZWxkU2V0RmllbGRTa2lwcGVy
OjpTa2lwRmllbGQoCi0gICAgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCB1aW50MzIgdGFn
KSB7Ci0gIHJldHVybiBXaXJlRm9ybWF0OjpTa2lwRmllbGQoaW5wdXQsIHRhZywgdW5rbm93bl9m
aWVsZHNfKTsKLX0KLQotYm9vbCBVbmtub3duRmllbGRTZXRGaWVsZFNraXBwZXI6OlNraXBNZXNz
YWdlKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotICByZXR1cm4gV2lyZUZvcm1hdDo6
U2tpcE1lc3NhZ2UoaW5wdXQsIHVua25vd25fZmllbGRzXyk7Ci19Ci0KLXZvaWQgVW5rbm93bkZp
ZWxkU2V0RmllbGRTa2lwcGVyOjpTa2lwVW5rbm93bkVudW0oCi0gICAgaW50IGZpZWxkX251bWJl
ciwgaW50IHZhbHVlKSB7Ci0gIHVua25vd25fZmllbGRzXy0+QWRkVmFyaW50KGZpZWxkX251bWJl
ciwgdmFsdWUpOwotfQotCi1ib29sIFdpcmVGb3JtYXQ6OlNraXBGaWVsZChpbzo6Q29kZWRJbnB1
dFN0cmVhbSogaW5wdXQsIHVpbnQzMiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBV
bmtub3duRmllbGRTZXQqIHVua25vd25fZmllbGRzKSB7Ci0gIGludCBudW1iZXIgPSBXaXJlRm9y
bWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKTsKLQotICBzd2l0Y2ggKFdpcmVGb3JtYXRM
aXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpKSB7Ci0gICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6V0lS
RVRZUEVfVkFSSU5UOiB7Ci0gICAgICB1aW50NjQgdmFsdWU7Ci0gICAgICBpZiAoIWlucHV0LT5S
ZWFkVmFyaW50NjQoJnZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKHVua25vd25fZmll
bGRzICE9IE5VTEwpIHVua25vd25fZmllbGRzLT5BZGRWYXJpbnQobnVtYmVyLCB2YWx1ZSk7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZ
UEVfRklYRUQ2NDogewotICAgICAgdWludDY0IHZhbHVlOwotICAgICAgaWYgKCFpbnB1dC0+UmVh
ZExpdHRsZUVuZGlhbjY0KCZ2YWx1ZSkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICh1bmtub3du
X2ZpZWxkcyAhPSBOVUxMKSB1bmtub3duX2ZpZWxkcy0+QWRkRml4ZWQ2NChudW1iZXIsIHZhbHVl
KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpX
SVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEOiB7Ci0gICAgICB1aW50MzIgbGVuZ3RoOwotICAgICAg
aWYgKCFpbnB1dC0+UmVhZFZhcmludDMyKCZsZW5ndGgpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBp
ZiAodW5rbm93bl9maWVsZHMgPT0gTlVMTCkgewotICAgICAgICBpZiAoIWlucHV0LT5Ta2lwKGxl
bmd0aCkpIHJldHVybiBmYWxzZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghaW5wdXQt
PlJlYWRTdHJpbmcodW5rbm93bl9maWVsZHMtPkFkZExlbmd0aERlbGltaXRlZChudW1iZXIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkpIHsKLSAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9TVEFSVF9HUk9VUDogewotICAgICAg
aWYgKCFpbnB1dC0+SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgaWYgKCFTa2lwTWVzc2FnZShpbnB1dCwgKHVua25vd25fZmllbGRzID09IE5VTEwpID8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgOiB1bmtub3duX2ZpZWxkcy0+QWRkR3Jv
dXAobnVtYmVyKSkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgaW5w
dXQtPkRlY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCk7Ci0gICAgICAvLyBDaGVjayB0aGF0IHRoZSBl
bmRpbmcgdGFnIG1hdGNoZWQgdGhlIHN0YXJ0aW5nIHRhZy4KLSAgICAgIGlmICghaW5wdXQtPkxh
c3RUYWdXYXMoV2lyZUZvcm1hdExpdGU6Ok1ha2VUYWcoCi0gICAgICAgICAgV2lyZUZvcm1hdExp
dGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZyksCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OldJ
UkVUWVBFX0VORF9HUk9VUCkpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQ
RV9FTkRfR1JPVVA6IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2FzZSBXaXJl
Rm9ybWF0TGl0ZTo6V0lSRVRZUEVfRklYRUQzMjogewotICAgICAgdWludDMyIHZhbHVlOwotICAg
ICAgaWYgKCFpbnB1dC0+UmVhZExpdHRsZUVuZGlhbjMyKCZ2YWx1ZSkpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmICh1bmtub3duX2ZpZWxkcyAhPSBOVUxMKSB1bmtub3duX2ZpZWxkcy0+QWRkRml4
ZWQzMihudW1iZXIsIHZhbHVlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBkZWZh
dWx0OiB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19Ci0KLWJvb2wgV2lyZUZv
cm1hdDo6U2tpcE1lc3NhZ2UoaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBVbmtub3duRmllbGRTZXQqIHVua25vd25fZmllbGRzKSB7Ci0g
IHdoaWxlICh0cnVlKSB7Ci0gICAgdWludDMyIHRhZyA9IGlucHV0LT5SZWFkVGFnKCk7Ci0gICAg
aWYgKHRhZyA9PSAwKSB7Ci0gICAgICAvLyBFbmQgb2YgaW5wdXQuICBUaGlzIGlzIGEgdmFsaWQg
cGxhY2UgdG8gZW5kLCBzbyByZXR1cm4gdHJ1ZS4KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIFdpcmVGb3JtYXRMaXRlOjpXaXJlVHlwZSB3aXJlX3R5cGUgPSBXaXJlRm9ybWF0TGl0
ZTo6R2V0VGFnV2lyZVR5cGUodGFnKTsKLQotICAgIGlmICh3aXJlX3R5cGUgPT0gV2lyZUZvcm1h
dExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgLy8gTXVzdCBiZSB0aGUgZW5kIG9m
IHRoZSBtZXNzYWdlLgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFTa2lw
RmllbGQoaW5wdXQsIHRhZywgdW5rbm93bl9maWVsZHMpKSByZXR1cm4gZmFsc2U7Ci0gIH0KLX0K
LQotYm9vbCBXaXJlRm9ybWF0OjpSZWFkUGFja2VkRW51bVByZXNlcnZlVW5rbm93bnMoaW86OkNv
ZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyIGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKCppc192YWxpZCkoaW50KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVua25vd25GaWVsZFNl
dCogdW5rbm93bl9maWVsZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZXBlYXRlZEZpZWxkPGludD4qIHZhbHVlcykgewotICB1aW50MzIgbGVuZ3Ro
OwotICBpZiAoIWlucHV0LT5SZWFkVmFyaW50MzIoJmxlbmd0aCkpIHJldHVybiBmYWxzZTsKLSAg
aW86OkNvZGVkSW5wdXRTdHJlYW06OkxpbWl0IGxpbWl0ID0gaW5wdXQtPlB1c2hMaW1pdChsZW5n
dGgpOwotICB3aGlsZSAoaW5wdXQtPkJ5dGVzVW50aWxMaW1pdCgpID4gMCkgewotICAgIGludCB2
YWx1ZTsKLSAgICBpZiAoIWdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0
ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgaW50LCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9FTlVN
PihpbnB1dCwgJnZhbHVlKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAo
aXNfdmFsaWQgPT0gTlVMTCB8fCBpc192YWxpZCh2YWx1ZSkpIHsKLSAgICAgIHZhbHVlcy0+QWRk
KHZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgdW5rbm93bl9maWVsZHMtPkFkZFZhcmludChm
aWVsZF9udW1iZXIsIHZhbHVlKTsKLSAgICB9Ci0gIH0KLSAgaW5wdXQtPlBvcExpbWl0KGxpbWl0
KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotdm9pZCBXaXJlRm9ybWF0OjpTZXJpYWxpemVVbmtu
b3duRmllbGRzKGNvbnN0IFVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBv
dXRwdXQpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB1bmtub3duX2ZpZWxkcy5maWVsZF9jb3Vu
dCgpOyBpKyspIHsKLSAgICBjb25zdCBVbmtub3duRmllbGQmIGZpZWxkID0gdW5rbm93bl9maWVs
ZHMuZmllbGQoaSk7Ci0gICAgc3dpdGNoIChmaWVsZC50eXBlKCkpIHsKLSAgICAgIGNhc2UgVW5r
bm93bkZpZWxkOjpUWVBFX1ZBUklOVDoKLSAgICAgICAgb3V0cHV0LT5Xcml0ZVZhcmludDMyKFdp
cmVGb3JtYXRMaXRlOjpNYWtlVGFnKGZpZWxkLm51bWJlcigpLAotICAgICAgICAgICAgV2lyZUZv
cm1hdExpdGU6OldJUkVUWVBFX1ZBUklOVCkpOwotICAgICAgICBvdXRwdXQtPldyaXRlVmFyaW50
NjQoZmllbGQudmFyaW50KCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVW5rbm93bkZp
ZWxkOjpUWVBFX0ZJWEVEMzI6Ci0gICAgICAgIG91dHB1dC0+V3JpdGVWYXJpbnQzMihXaXJlRm9y
bWF0TGl0ZTo6TWFrZVRhZyhmaWVsZC5udW1iZXIoKSwKLSAgICAgICAgICAgIFdpcmVGb3JtYXRM
aXRlOjpXSVJFVFlQRV9GSVhFRDMyKSk7Ci0gICAgICAgIG91dHB1dC0+V3JpdGVMaXR0bGVFbmRp
YW4zMihmaWVsZC5maXhlZDMyKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVW5rbm93
bkZpZWxkOjpUWVBFX0ZJWEVENjQ6Ci0gICAgICAgIG91dHB1dC0+V3JpdGVWYXJpbnQzMihXaXJl
Rm9ybWF0TGl0ZTo6TWFrZVRhZyhmaWVsZC5udW1iZXIoKSwKLSAgICAgICAgICAgIFdpcmVGb3Jt
YXRMaXRlOjpXSVJFVFlQRV9GSVhFRDY0KSk7Ci0gICAgICAgIG91dHB1dC0+V3JpdGVMaXR0bGVF
bmRpYW42NChmaWVsZC5maXhlZDY0KCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVW5r
bm93bkZpZWxkOjpUWVBFX0xFTkdUSF9ERUxJTUlURUQ6Ci0gICAgICAgIG91dHB1dC0+V3JpdGVW
YXJpbnQzMihXaXJlRm9ybWF0TGl0ZTo6TWFrZVRhZyhmaWVsZC5udW1iZXIoKSwKLSAgICAgICAg
ICAgIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEKSk7Ci0gICAgICAg
IG91dHB1dC0+V3JpdGVWYXJpbnQzMihmaWVsZC5sZW5ndGhfZGVsaW1pdGVkKCkuc2l6ZSgpKTsK
LSAgICAgICAgb3V0cHV0LT5Xcml0ZVJhd01heWJlQWxpYXNlZChmaWVsZC5sZW5ndGhfZGVsaW1p
dGVkKCkuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxk
Lmxlbmd0aF9kZWxpbWl0ZWQoKS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
VW5rbm93bkZpZWxkOjpUWVBFX0dST1VQOgotICAgICAgICBvdXRwdXQtPldyaXRlVmFyaW50MzIo
V2lyZUZvcm1hdExpdGU6Ok1ha2VUYWcoZmllbGQubnVtYmVyKCksCi0gICAgICAgICAgICBXaXJl
Rm9ybWF0TGl0ZTo6V0lSRVRZUEVfU1RBUlRfR1JPVVApKTsKLSAgICAgICAgU2VyaWFsaXplVW5r
bm93bkZpZWxkcyhmaWVsZC5ncm91cCgpLCBvdXRwdXQpOwotICAgICAgICBvdXRwdXQtPldyaXRl
VmFyaW50MzIoV2lyZUZvcm1hdExpdGU6Ok1ha2VUYWcoZmllbGQubnVtYmVyKCksCi0gICAgICAg
ICAgICBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgfQotfQotCi11aW50OCogV2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bkZp
ZWxkc1RvQXJyYXkoCi0gICAgY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcywK
LSAgICB1aW50OCogdGFyZ2V0KSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdW5rbm93bl9maWVs
ZHMuZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgVW5rbm93bkZpZWxkJiBmaWVsZCA9
IHVua25vd25fZmllbGRzLmZpZWxkKGkpOwotCi0gICAgc3dpdGNoIChmaWVsZC50eXBlKCkpIHsK
LSAgICAgIGNhc2UgVW5rbm93bkZpZWxkOjpUWVBFX1ZBUklOVDoKLSAgICAgICAgdGFyZ2V0ID0g
V2lyZUZvcm1hdExpdGU6OldyaXRlSW50NjRUb0FycmF5KAotICAgICAgICAgICAgZmllbGQubnVt
YmVyKCksIGZpZWxkLnZhcmludCgpLCB0YXJnZXQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgVW5rbm93bkZpZWxkOjpUWVBFX0ZJWEVEMzI6Ci0gICAgICAgIHRhcmdldCA9IFdpcmVGb3Jt
YXRMaXRlOjpXcml0ZUZpeGVkMzJUb0FycmF5KAotICAgICAgICAgICAgZmllbGQubnVtYmVyKCks
IGZpZWxkLmZpeGVkMzIoKSwgdGFyZ2V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVu
a25vd25GaWVsZDo6VFlQRV9GSVhFRDY0OgotICAgICAgICB0YXJnZXQgPSBXaXJlRm9ybWF0TGl0
ZTo6V3JpdGVGaXhlZDY0VG9BcnJheSgKLSAgICAgICAgICAgIGZpZWxkLm51bWJlcigpLCBmaWVs
ZC5maXhlZDY0KCksIHRhcmdldCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVbmtub3du
RmllbGQ6OlRZUEVfTEVOR1RIX0RFTElNSVRFRDoKLSAgICAgICAgdGFyZ2V0ID0gV2lyZUZvcm1h
dExpdGU6OldyaXRlQnl0ZXNUb0FycmF5KAotICAgICAgICAgICAgZmllbGQubnVtYmVyKCksIGZp
ZWxkLmxlbmd0aF9kZWxpbWl0ZWQoKSwgdGFyZ2V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIFVua25vd25GaWVsZDo6VFlQRV9HUk9VUDoKLSAgICAgICAgdGFyZ2V0ID0gV2lyZUZvcm1h
dExpdGU6OldyaXRlVGFnVG9BcnJheSgKLSAgICAgICAgICAgIGZpZWxkLm51bWJlcigpLCBXaXJl
Rm9ybWF0TGl0ZTo6V0lSRVRZUEVfU1RBUlRfR1JPVVAsIHRhcmdldCk7Ci0gICAgICAgIHRhcmdl
dCA9IFNlcmlhbGl6ZVVua25vd25GaWVsZHNUb0FycmF5KGZpZWxkLmdyb3VwKCksIHRhcmdldCk7
Ci0gICAgICAgIHRhcmdldCA9IFdpcmVGb3JtYXRMaXRlOjpXcml0ZVRhZ1RvQXJyYXkoCi0gICAg
ICAgICAgICBmaWVsZC5udW1iZXIoKSwgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9V
UCwgdGFyZ2V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVybiB0YXJnZXQ7
Ci19Ci0KLXZvaWQgV2lyZUZvcm1hdDo6U2VyaWFsaXplVW5rbm93bk1lc3NhZ2VTZXRJdGVtcygK
LSAgICBjb25zdCBVbmtub3duRmllbGRTZXQmIHVua25vd25fZmllbGRzLAotICAgIGlvOjpDb2Rl
ZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdW5rbm93bl9m
aWVsZHMuZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgVW5rbm93bkZpZWxkJiBmaWVs
ZCA9IHVua25vd25fZmllbGRzLmZpZWxkKGkpOwotICAgIC8vIFRoZSBvbmx5IHVua25vd24gZmll
bGRzIHRoYXQgYXJlIGFsbG93ZWQgdG8gZXhpc3QgaW4gYSBNZXNzYWdlU2V0IGFyZQotICAgIC8v
IG1lc3NhZ2VzLCB3aGljaCBhcmUgbGVuZ3RoLWRlbGltaXRlZC4KLSAgICBpZiAoZmllbGQudHlw
ZSgpID09IFVua25vd25GaWVsZDo6VFlQRV9MRU5HVEhfREVMSU1JVEVEKSB7Ci0gICAgICAvLyBT
dGFydCBncm91cC4KLSAgICAgIG91dHB1dC0+V3JpdGVWYXJpbnQzMihXaXJlRm9ybWF0TGl0ZTo6
a01lc3NhZ2VTZXRJdGVtU3RhcnRUYWcpOwotCi0gICAgICAvLyBXcml0ZSB0eXBlIElELgotICAg
ICAgb3V0cHV0LT5Xcml0ZVZhcmludDMyKFdpcmVGb3JtYXRMaXRlOjprTWVzc2FnZVNldFR5cGVJ
ZFRhZyk7Ci0gICAgICBvdXRwdXQtPldyaXRlVmFyaW50MzIoZmllbGQubnVtYmVyKCkpOwotCi0g
ICAgICAvLyBXcml0ZSBtZXNzYWdlLgotICAgICAgb3V0cHV0LT5Xcml0ZVZhcmludDMyKFdpcmVG
b3JtYXRMaXRlOjprTWVzc2FnZVNldE1lc3NhZ2VUYWcpOwotICAgICAgZmllbGQuU2VyaWFsaXpl
TGVuZ3RoRGVsaW1pdGVkTm9UYWcob3V0cHV0KTsKLQotICAgICAgLy8gRW5kIGdyb3VwLgotICAg
ICAgb3V0cHV0LT5Xcml0ZVZhcmludDMyKFdpcmVGb3JtYXRMaXRlOjprTWVzc2FnZVNldEl0ZW1F
bmRUYWcpOwotICAgIH0KLSAgfQotfQotCi11aW50OCogV2lyZUZvcm1hdDo6U2VyaWFsaXplVW5r
bm93bk1lc3NhZ2VTZXRJdGVtc1RvQXJyYXkoCi0gICAgY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1
bmtub3duX2ZpZWxkcywKLSAgICB1aW50OCogdGFyZ2V0KSB7Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDwgdW5rbm93bl9maWVsZHMuZmllbGRfY291bnQoKTsgaSsrKSB7Ci0gICAgY29uc3QgVW5rbm93
bkZpZWxkJiBmaWVsZCA9IHVua25vd25fZmllbGRzLmZpZWxkKGkpOwotCi0gICAgLy8gVGhlIG9u
bHkgdW5rbm93biBmaWVsZHMgdGhhdCBhcmUgYWxsb3dlZCB0byBleGlzdCBpbiBhIE1lc3NhZ2VT
ZXQgYXJlCi0gICAgLy8gbWVzc2FnZXMsIHdoaWNoIGFyZSBsZW5ndGgtZGVsaW1pdGVkLgotICAg
IGlmIChmaWVsZC50eXBlKCkgPT0gVW5rbm93bkZpZWxkOjpUWVBFX0xFTkdUSF9ERUxJTUlURUQp
IHsKLSAgICAgIC8vIFN0YXJ0IGdyb3VwLgotICAgICAgdGFyZ2V0ID0gaW86OkNvZGVkT3V0cHV0
U3RyZWFtOjpXcml0ZVRhZ1RvQXJyYXkoCi0gICAgICAgICAgV2lyZUZvcm1hdExpdGU6OmtNZXNz
YWdlU2V0SXRlbVN0YXJ0VGFnLCB0YXJnZXQpOwotCi0gICAgICAvLyBXcml0ZSB0eXBlIElELgot
ICAgICAgdGFyZ2V0ID0gaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVRhZ1RvQXJyYXkoCi0g
ICAgICAgICAgV2lyZUZvcm1hdExpdGU6OmtNZXNzYWdlU2V0VHlwZUlkVGFnLCB0YXJnZXQpOwot
ICAgICAgdGFyZ2V0ID0gaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVZhcmludDMyVG9BcnJh
eSgKLSAgICAgICAgICBmaWVsZC5udW1iZXIoKSwgdGFyZ2V0KTsKLQotICAgICAgLy8gV3JpdGUg
bWVzc2FnZS4KLSAgICAgIHRhcmdldCA9IGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVUYWdU
b0FycmF5KAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjprTWVzc2FnZVNldE1lc3NhZ2VUYWcs
IHRhcmdldCk7Ci0gICAgICB0YXJnZXQgPSBmaWVsZC5TZXJpYWxpemVMZW5ndGhEZWxpbWl0ZWRO
b1RhZ1RvQXJyYXkodGFyZ2V0KTsKLQotICAgICAgLy8gRW5kIGdyb3VwLgotICAgICAgdGFyZ2V0
ID0gaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVRhZ1RvQXJyYXkoCi0gICAgICAgICAgV2ly
ZUZvcm1hdExpdGU6OmtNZXNzYWdlU2V0SXRlbUVuZFRhZywgdGFyZ2V0KTsKLSAgICB9Ci0gIH0K
LQotICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQgV2lyZUZvcm1hdDo6Q29tcHV0ZVVua25vd25G
aWVsZHNTaXplKAotICAgIGNvbnN0IFVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMpIHsK
LSAgaW50IHNpemUgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IHVua25vd25fZmllbGRzLmZp
ZWxkX2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IFVua25vd25GaWVsZCYgZmllbGQgPSB1bmtu
b3duX2ZpZWxkcy5maWVsZChpKTsKLQotICAgIHN3aXRjaCAoZmllbGQudHlwZSgpKSB7Ci0gICAg
ICBjYXNlIFVua25vd25GaWVsZDo6VFlQRV9WQVJJTlQ6Ci0gICAgICAgIHNpemUgKz0gaW86OkNv
ZGVkT3V0cHV0U3RyZWFtOjpWYXJpbnRTaXplMzIoCi0gICAgICAgICAgICBXaXJlRm9ybWF0TGl0
ZTo6TWFrZVRhZyhmaWVsZC5udW1iZXIoKSwKLSAgICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpX
SVJFVFlQRV9WQVJJTlQpKTsKLSAgICAgICAgc2l6ZSArPSBpbzo6Q29kZWRPdXRwdXRTdHJlYW06
OlZhcmludFNpemU2NChmaWVsZC52YXJpbnQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBVbmtub3duRmllbGQ6OlRZUEVfRklYRUQzMjoKLSAgICAgICAgc2l6ZSArPSBpbzo6Q29kZWRP
dXRwdXRTdHJlYW06OlZhcmludFNpemUzMigKLSAgICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpN
YWtlVGFnKGZpZWxkLm51bWJlcigpLAotICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6OldJUkVU
WVBFX0ZJWEVEMzIpKTsKLSAgICAgICAgc2l6ZSArPSBzaXplb2YoaW50MzIpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgVW5rbm93bkZpZWxkOjpUWVBFX0ZJWEVENjQ6Ci0gICAgICAgIHNp
emUgKz0gaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpWYXJpbnRTaXplMzIoCi0gICAgICAgICAgICBX
aXJlRm9ybWF0TGl0ZTo6TWFrZVRhZyhmaWVsZC5udW1iZXIoKSwKLSAgICAgICAgICAgIFdpcmVG
b3JtYXRMaXRlOjpXSVJFVFlQRV9GSVhFRDY0KSk7Ci0gICAgICAgIHNpemUgKz0gc2l6ZW9mKGlu
dDY0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVua25vd25GaWVsZDo6VFlQRV9MRU5H
VEhfREVMSU1JVEVEOgotICAgICAgICBzaXplICs9IGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6VmFy
aW50U2l6ZTMyKAotICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6Ok1ha2VUYWcoZmllbGQubnVt
YmVyKCksCi0gICAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfTEVOR1RIX0RFTElN
SVRFRCkpOwotICAgICAgICBzaXplICs9IGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6
ZTMyKAotICAgICAgICAgICAgZmllbGQubGVuZ3RoX2RlbGltaXRlZCgpLnNpemUoKSk7Ci0gICAg
ICAgIHNpemUgKz0gZmllbGQubGVuZ3RoX2RlbGltaXRlZCgpLnNpemUoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIFVua25vd25GaWVsZDo6VFlQRV9HUk9VUDoKLSAgICAgICAgc2l6ZSAr
PSBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OlZhcmludFNpemUzMigKLSAgICAgICAgICAgIFdpcmVG
b3JtYXRMaXRlOjpNYWtlVGFnKGZpZWxkLm51bWJlcigpLAotICAgICAgICAgICAgV2lyZUZvcm1h
dExpdGU6OldJUkVUWVBFX1NUQVJUX0dST1VQKSk7Ci0gICAgICAgIHNpemUgKz0gQ29tcHV0ZVVu
a25vd25GaWVsZHNTaXplKGZpZWxkLmdyb3VwKCkpOwotICAgICAgICBzaXplICs9IGlvOjpDb2Rl
ZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6ZTMyKAotICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6
Ok1ha2VUYWcoZmllbGQubnVtYmVyKCksCi0gICAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6V0lS
RVRZUEVfRU5EX0dST1VQKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHJldHVy
biBzaXplOwotfQotCi1pbnQgV2lyZUZvcm1hdDo6Q29tcHV0ZVVua25vd25NZXNzYWdlU2V0SXRl
bXNTaXplKAotICAgIGNvbnN0IFVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMpIHsKLSAg
aW50IHNpemUgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IHVua25vd25fZmllbGRzLmZpZWxk
X2NvdW50KCk7IGkrKykgewotICAgIGNvbnN0IFVua25vd25GaWVsZCYgZmllbGQgPSB1bmtub3du
X2ZpZWxkcy5maWVsZChpKTsKLQotICAgIC8vIFRoZSBvbmx5IHVua25vd24gZmllbGRzIHRoYXQg
YXJlIGFsbG93ZWQgdG8gZXhpc3QgaW4gYSBNZXNzYWdlU2V0IGFyZQotICAgIC8vIG1lc3NhZ2Vz
LCB3aGljaCBhcmUgbGVuZ3RoLWRlbGltaXRlZC4KLSAgICBpZiAoZmllbGQudHlwZSgpID09IFVu
a25vd25GaWVsZDo6VFlQRV9MRU5HVEhfREVMSU1JVEVEKSB7Ci0gICAgICBzaXplICs9IFdpcmVG
b3JtYXRMaXRlOjprTWVzc2FnZVNldEl0ZW1UYWdzU2l6ZTsKLSAgICAgIHNpemUgKz0gaW86OkNv
ZGVkT3V0cHV0U3RyZWFtOjpWYXJpbnRTaXplMzIoZmllbGQubnVtYmVyKCkpOwotCi0gICAgICBp
bnQgZmllbGRfc2l6ZSA9IGZpZWxkLkdldExlbmd0aERlbGltaXRlZFNpemUoKTsKLSAgICAgIHNp
emUgKz0gaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpWYXJpbnRTaXplMzIoZmllbGRfc2l6ZSk7Ci0g
ICAgICBzaXplICs9IGZpZWxkX3NpemU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHNpemU7Ci19
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotYm9vbCBXaXJlRm9ybWF0OjpQYXJzZUFuZE1lcmdlUGFydGlh
bChpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1lc3NhZ2UqIG1lc3NhZ2UpIHsKLSAgY29uc3QgRGVzY3JpcHRvciogZGVz
Y3JpcHRvciA9IG1lc3NhZ2UtPkdldERlc2NyaXB0b3IoKTsKLSAgY29uc3QgUmVmbGVjdGlvbiog
bWVzc2FnZV9yZWZsZWN0aW9uID0gbWVzc2FnZS0+R2V0UmVmbGVjdGlvbigpOwotCi0gIHdoaWxl
KHRydWUpIHsKLSAgICB1aW50MzIgdGFnID0gaW5wdXQtPlJlYWRUYWcoKTsKLSAgICBpZiAodGFn
ID09IDApIHsKLSAgICAgIC8vIEVuZCBvZiBpbnB1dC4gIFRoaXMgaXMgYSB2YWxpZCBwbGFjZSB0
byBlbmQsIHNvIHJldHVybiB0cnVlLgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
aWYgKFdpcmVGb3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgIFdpcmVG
b3JtYXRMaXRlOjpXSVJFVFlQRV9FTkRfR1JPVVApIHsKLSAgICAgIC8vIE11c3QgYmUgdGhlIGVu
ZCBvZiB0aGUgbWVzc2FnZS4KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNvbnN0
IEZpZWxkRGVzY3JpcHRvciogZmllbGQgPSBOVUxMOwotCi0gICAgaWYgKGRlc2NyaXB0b3IgIT0g
TlVMTCkgewotICAgICAgaW50IGZpZWxkX251bWJlciA9IFdpcmVGb3JtYXRMaXRlOjpHZXRUYWdG
aWVsZE51bWJlcih0YWcpOwotICAgICAgZmllbGQgPSBkZXNjcmlwdG9yLT5GaW5kRmllbGRCeU51
bWJlcihmaWVsZF9udW1iZXIpOwotCi0gICAgICAvLyBJZiB0aGF0IGZhaWxlZCwgY2hlY2sgaWYg
dGhlIGZpZWxkIGlzIGFuIGV4dGVuc2lvbi4KLSAgICAgIGlmIChmaWVsZCA9PSBOVUxMICYmIGRl
c2NyaXB0b3ItPklzRXh0ZW5zaW9uTnVtYmVyKGZpZWxkX251bWJlcikpIHsKLSAgICAgICAgaWYg
KGlucHV0LT5HZXRFeHRlbnNpb25Qb29sKCkgPT0gTlVMTCkgewotICAgICAgICAgIGZpZWxkID0g
bWVzc2FnZV9yZWZsZWN0aW9uLT5GaW5kS25vd25FeHRlbnNpb25CeU51bWJlcihmaWVsZF9udW1i
ZXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZpZWxkID0gaW5wdXQtPkdldEV4dGVu
c2lvblBvb2woKQotICAgICAgICAgICAgICAgICAgICAgICAtPkZpbmRFeHRlbnNpb25CeU51bWJl
cihkZXNjcmlwdG9yLCBmaWVsZF9udW1iZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAg
IC8vIElmIHRoYXQgZmFpbGVkLCBidXQgd2UncmUgYSBNZXNzYWdlU2V0LCBhbmQgdGhpcyBpcyB0
aGUgdGFnIGZvciBhCi0gICAgICAvLyBNZXNzYWdlU2V0IGl0ZW0sIHRoZW4gcGFyc2UgdGhhdC4K
LSAgICAgIGlmIChmaWVsZCA9PSBOVUxMICYmCi0gICAgICAgICAgZGVzY3JpcHRvci0+b3B0aW9u
cygpLm1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0KCkgJiYKLSAgICAgICAgICB0YWcgPT0gV2lyZUZv
cm1hdExpdGU6OmtNZXNzYWdlU2V0SXRlbVN0YXJ0VGFnKSB7Ci0gICAgICAgIGlmICghUGFyc2VB
bmRNZXJnZU1lc3NhZ2VTZXRJdGVtKGlucHV0LCBtZXNzYWdlKSkgewotICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBjb250aW51ZTsgIC8vIFNraXAgUGFyc2VBbmRN
ZXJnZUZpZWxkKCk7IGFscmVhZHkgdGFrZW4gY2FyZSBvZi4KLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoIVBhcnNlQW5kTWVyZ2VGaWVsZCh0YWcsIGZpZWxkLCBtZXNzYWdlLCBpbnB1dCkpIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KLQotYm9vbCBXaXJlRm9ybWF0OjpT
a2lwTWVzc2FnZVNldEZpZWxkKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzIgZmllbGRfbnVtYmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVua25vd25GaWVsZFNldCogdW5rbm93bl9m
aWVsZHMpIHsKLSAgdWludDMyIGxlbmd0aDsKLSAgaWYgKCFpbnB1dC0+UmVhZFZhcmludDMyKCZs
ZW5ndGgpKSByZXR1cm4gZmFsc2U7Ci0gIHJldHVybiBpbnB1dC0+UmVhZFN0cmluZygKLSAgICAg
IHVua25vd25fZmllbGRzLT5BZGRMZW5ndGhEZWxpbWl0ZWQoZmllbGRfbnVtYmVyKSwgbGVuZ3Ro
KTsKLX0KLQotYm9vbCBXaXJlRm9ybWF0OjpQYXJzZUFuZE1lcmdlTWVzc2FnZVNldEZpZWxkKHVp
bnQzMiBmaWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlKiBtZXNzYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZElucHV0U3RyZWFt
KiBpbnB1dCkgewotICBjb25zdCBSZWZsZWN0aW9uKiBtZXNzYWdlX3JlZmxlY3Rpb24gPSBtZXNz
YWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0gIGlmIChmaWVsZCA9PSBOVUxMKSB7Ci0gICAgLy8gV2Ug
c3RvcmUgdW5rbm93biBNZXNzYWdlU2V0IGV4dGVuc2lvbnMgYXMgZ3JvdXBzLgotICAgIHJldHVy
biBTa2lwTWVzc2FnZVNldEZpZWxkKAotICAgICAgICBpbnB1dCwgZmllbGRfbnVtYmVyLCBtZXNz
YWdlX3JlZmxlY3Rpb24tPk11dGFibGVVbmtub3duRmllbGRzKG1lc3NhZ2UpKTsKLSAgfSBlbHNl
IGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSB8fAotICAgICAgICAgICAgIGZpZWxkLT50eXBlKCkg
IT0gRmllbGREZXNjcmlwdG9yOjpUWVBFX01FU1NBR0UpIHsKLSAgICAvLyBUaGlzIHNob3VsZG4n
dCBoYXBwZW4gYXMgd2Ugb25seSBhbGxvdyBvcHRpb25hbCBtZXNzYWdlIGV4dGVuc2lvbnMgdG8K
LSAgICAvLyBNZXNzYWdlU2V0LgotICAgIEdPT0dMRV9MT0coRVJST1IpIDw8ICJFeHRlbnNpb25z
IG9mIE1lc3NhZ2VTZXRzIG11c3QgYmUgb3B0aW9uYWwgbWVzc2FnZXMuIjsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0gZWxzZSB7Ci0gICAgTWVzc2FnZSogc3ViX21lc3NhZ2UgPSBtZXNzYWdlX3Jl
ZmxlY3Rpb24tPk11dGFibGVNZXNzYWdlKAotICAgICAgICBtZXNzYWdlLCBmaWVsZCwgaW5wdXQt
PkdldEV4dGVuc2lvbkZhY3RvcnkoKSk7Ci0gICAgcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjpSZWFk
TWVzc2FnZShpbnB1dCwgc3ViX21lc3NhZ2UpOwotICB9Ci19Ci0KLXN0YXRpYyBib29sIFN0cmlj
dFV0ZjhDaGVjayhjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkKSB7Ci0gIHJldHVybiBmaWVs
ZC0+ZmlsZSgpLT5zeW50YXgoKSA9PSBGaWxlRGVzY3JpcHRvcjo6U1lOVEFYX1BST1RPMzsKLX0K
LQotYm9vbCBXaXJlRm9ybWF0OjpQYXJzZUFuZE1lcmdlRmllbGQoCi0gICAgdWludDMyIHRhZywK
LSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCAgICAgICAgLy8gTWF5IGJlIE5VTEwg
Zm9yIHVua25vd24KLSAgICBNZXNzYWdlKiBtZXNzYWdlLAotICAgIGlvOjpDb2RlZElucHV0U3Ry
ZWFtKiBpbnB1dCkgewotICBjb25zdCBSZWZsZWN0aW9uKiBtZXNzYWdlX3JlZmxlY3Rpb24gPSBt
ZXNzYWdlLT5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgZW51bSB7IFVOS05PV04sIE5PUk1BTF9GT1JN
QVQsIFBBQ0tFRF9GT1JNQVQgfSB2YWx1ZV9mb3JtYXQ7Ci0KLSAgaWYgKGZpZWxkID09IE5VTEwp
IHsKLSAgICB2YWx1ZV9mb3JtYXQgPSBVTktOT1dOOwotICB9IGVsc2UgaWYgKFdpcmVGb3JtYXRM
aXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICAgV2lyZVR5cGVGb3JGaWVs
ZFR5cGUoZmllbGQtPnR5cGUoKSkpIHsKLSAgICB2YWx1ZV9mb3JtYXQgPSBOT1JNQUxfRk9STUFU
OwotICB9IGVsc2UgaWYgKGZpZWxkLT5pc19wYWNrYWJsZSgpICYmCi0gICAgICAgICAgICAgV2ly
ZUZvcm1hdExpdGU6OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAgICAgICAgICAgICBXaXJlRm9y
bWF0TGl0ZTo6V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCkgewotICAgIHZhbHVlX2Zvcm1hdCA9
IFBBQ0tFRF9GT1JNQVQ7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gV2UgZG9uJ3QgcmVjb2duaXplIHRo
aXMgZmllbGQuIEVpdGhlciB0aGUgZmllbGQgbnVtYmVyIGlzIHVua25vd24KLSAgICAvLyBvciB0
aGUgd2lyZSB0eXBlIGRvZXNuJ3QgbWF0Y2guIFB1dCBpdCBpbiBvdXIgdW5rbm93biBmaWVsZCBz
ZXQuCi0gICAgdmFsdWVfZm9ybWF0ID0gVU5LTk9XTjsKLSAgfQotCi0gIGlmICh2YWx1ZV9mb3Jt
YXQgPT0gVU5LTk9XTikgewotICAgIHJldHVybiBTa2lwRmllbGQoaW5wdXQsIHRhZywKLSAgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2VfcmVmbGVjdGlvbi0+TXV0YWJsZVVua25vd25GaWVsZHMo
bWVzc2FnZSkpOwotICB9IGVsc2UgaWYgKHZhbHVlX2Zvcm1hdCA9PSBQQUNLRURfRk9STUFUKSB7
Ci0gICAgdWludDMyIGxlbmd0aDsKLSAgICBpZiAoIWlucHV0LT5SZWFkVmFyaW50MzIoJmxlbmd0
aCkpIHJldHVybiBmYWxzZTsKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbTo6TGltaXQgbGltaXQg
PSBpbnB1dC0+UHVzaExpbWl0KGxlbmd0aCk7Ci0KLSAgICBzd2l0Y2ggKGZpZWxkLT50eXBlKCkp
IHsKLSNkZWZpbmUgSEFORExFX1BBQ0tFRF9UWVBFKFRZUEUsIENQUFRZUEUsIENQUFRZUEVfTUVU
SE9EKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6
VFlQRV8jI1RZUEU6IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB3aGlsZSAoaW5wdXQtPkJ5dGVzVW50aWxMaW1pdCgpID4gMCkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBDUFBUWVBFIHZhbHVlOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
aWYgKCFXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIENQUFRZUEUsIFdpcmVGb3JtYXRMaXRlOjpU
WVBFXyMjVFlQRT4oaW5wdXQsICZ2YWx1ZSkpICAgICAgICAgIFwKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgbWVzc2FnZV9yZWZsZWN0aW9uLT5BZGQjI0NQUFRZUEVfTUVUSE9E
KG1lc3NhZ2UsIGZpZWxkLCB2YWx1ZSk7ICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9Ci0KLSAgICAgIEhBTkRMRV9QQUNLRURf
VFlQRSggSU5UMzIsICBpbnQzMiwgIEludDMyKQotICAgICAgSEFORExFX1BBQ0tFRF9UWVBFKCBJ
TlQ2NCwgIGludDY0LCAgSW50NjQpCi0gICAgICBIQU5ETEVfUEFDS0VEX1RZUEUoU0lOVDMyLCAg
aW50MzIsICBJbnQzMikKLSAgICAgIEhBTkRMRV9QQUNLRURfVFlQRShTSU5UNjQsICBpbnQ2NCwg
IEludDY0KQotICAgICAgSEFORExFX1BBQ0tFRF9UWVBFKFVJTlQzMiwgdWludDMyLCBVSW50MzIp
Ci0gICAgICBIQU5ETEVfUEFDS0VEX1RZUEUoVUlOVDY0LCB1aW50NjQsIFVJbnQ2NCkKLQotICAg
ICAgSEFORExFX1BBQ0tFRF9UWVBFKCBGSVhFRDMyLCB1aW50MzIsIFVJbnQzMikKLSAgICAgIEhB
TkRMRV9QQUNLRURfVFlQRSggRklYRUQ2NCwgdWludDY0LCBVSW50NjQpCi0gICAgICBIQU5ETEVf
UEFDS0VEX1RZUEUoU0ZJWEVEMzIsICBpbnQzMiwgIEludDMyKQotICAgICAgSEFORExFX1BBQ0tF
RF9UWVBFKFNGSVhFRDY0LCAgaW50NjQsICBJbnQ2NCkKLQotICAgICAgSEFORExFX1BBQ0tFRF9U
WVBFKEZMT0FUICwgZmxvYXQgLCBGbG9hdCApCi0gICAgICBIQU5ETEVfUEFDS0VEX1RZUEUoRE9V
QkxFLCBkb3VibGUsIERvdWJsZSkKLQotICAgICAgSEFORExFX1BBQ0tFRF9UWVBFKEJPT0wsIGJv
b2wsIEJvb2wpCi0jdW5kZWYgSEFORExFX1BBQ0tFRF9UWVBFCi0KLSAgICAgIGNhc2UgRmllbGRE
ZXNjcmlwdG9yOjpUWVBFX0VOVU06IHsKLSAgICAgICAgd2hpbGUgKGlucHV0LT5CeXRlc1VudGls
TGltaXQoKSA+IDApIHsKLSAgICAgICAgICBpbnQgdmFsdWU7Ci0gICAgICAgICAgaWYgKCFXaXJl
Rm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTxpbnQsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0VOVU0+
KAotICAgICAgICAgICAgICAgICAgaW5wdXQsICZ2YWx1ZSkpIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICBpZiAobWVzc2FnZS0+R2V0RGVzY3JpcHRvcigpLT5maWxlKCktPnN5bnRheCgpID09Ci0g
ICAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yOjpTWU5UQVhfUFJPVE8zKSB7Ci0gICAgICAgICAg
ICBtZXNzYWdlX3JlZmxlY3Rpb24tPkFkZEVudW1WYWx1ZShtZXNzYWdlLCBmaWVsZCwgdmFsdWUp
OwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBFbnVtVmFsdWVEZXNjcmlw
dG9yKiBlbnVtX3ZhbHVlID0KLSAgICAgICAgICAgICAgICBmaWVsZC0+ZW51bV90eXBlKCktPkZp
bmRWYWx1ZUJ5TnVtYmVyKHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChlbnVtX3ZhbHVlICE9IE5V
TEwpIHsKLSAgICAgICAgICAgICAgbWVzc2FnZV9yZWZsZWN0aW9uLT5BZGRFbnVtKG1lc3NhZ2Us
IGZpZWxkLCBlbnVtX3ZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
IC8vIFRoZSBlbnVtIHZhbHVlIGlzIG5vdCBvbmUgb2YgdGhlIGtub3duIHZhbHVlcy4gIEFkZCBp
dCB0byB0aGUKLSAgICAgICAgICAgICAgLy8gVW5rbm93bkZpZWxkU2V0LgotICAgICAgICAgICAg
ICBpbnQ2NCBzaWduX2V4dGVuZGVkX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50NjQ+KHZhbHVlKTsK
LSAgICAgICAgICAgICAgbWVzc2FnZV9yZWZsZWN0aW9uLT5NdXRhYmxlVW5rbm93bkZpZWxkcyht
ZXNzYWdlKQotICAgICAgICAgICAgICAgICAgLT5BZGRWYXJpbnQoCi0gICAgICAgICAgICAgICAg
ICAgICAgV2lyZUZvcm1hdExpdGU6OkdldFRhZ0ZpZWxkTnVtYmVyKHRhZyksCi0gICAgICAgICAg
ICAgICAgICAgICAgc2lnbl9leHRlbmRlZF92YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2Ug
RmllbGREZXNjcmlwdG9yOjpUWVBFX1NUUklORzoKLSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9y
OjpUWVBFX0dST1VQOgotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfTUVTU0FHRToK
LSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTOgotICAgICAgICAvLyBDYW4n
dCBoYXZlIHBhY2tlZCBmaWVsZHMgb2YgdGhlc2UgdHlwZXM6IHRoZXNlIHNob3VsZCBiZSBjYXVn
aHQgYnkKLSAgICAgICAgLy8gdGhlIHByb3RvY29sIGNvbXBpbGVyLgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlucHV0LT5Qb3BMaW1pdChsaW1p
dCk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gTm9uLXBhY2tlZCB2YWx1ZSAodmFsdWVfZm9ybWF0ID09
IE5PUk1BTF9GT1JNQVQpCi0gICAgc3dpdGNoIChmaWVsZC0+dHlwZSgpKSB7Ci0jZGVmaW5lIEhB
TkRMRV9UWVBFKFRZUEUsIENQUFRZUEUsIENQUFRZUEVfTUVUSE9EKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV8jI1RZUEU6IHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENQUFRZUEUgdmFs
dWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIGlmICghV2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQ1BQVFlQRSwgV2ly
ZUZvcm1hdExpdGU6OlRZUEVfIyNUWVBFPihpbnB1dCwgJnZhbHVlKSkgICAgICAgICBcCi0gICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbWVz
c2FnZV9yZWZsZWN0aW9uLT5BZGQjI0NQUFRZUEVfTUVUSE9EKG1lc3NhZ2UsIGZpZWxkLCB2YWx1
ZSk7ICAgICBcCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbWVzc2FnZV9yZWZs
ZWN0aW9uLT5TZXQjI0NQUFRZUEVfTUVUSE9EKG1lc3NhZ2UsIGZpZWxkLCB2YWx1ZSk7ICAgICBc
Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9
Ci0KLSAgICAgIEhBTkRMRV9UWVBFKCBJTlQzMiwgIGludDMyLCAgSW50MzIpCi0gICAgICBIQU5E
TEVfVFlQRSggSU5UNjQsICBpbnQ2NCwgIEludDY0KQotICAgICAgSEFORExFX1RZUEUoU0lOVDMy
LCAgaW50MzIsICBJbnQzMikKLSAgICAgIEhBTkRMRV9UWVBFKFNJTlQ2NCwgIGludDY0LCAgSW50
NjQpCi0gICAgICBIQU5ETEVfVFlQRShVSU5UMzIsIHVpbnQzMiwgVUludDMyKQotICAgICAgSEFO
RExFX1RZUEUoVUlOVDY0LCB1aW50NjQsIFVJbnQ2NCkKLQotICAgICAgSEFORExFX1RZUEUoIEZJ
WEVEMzIsIHVpbnQzMiwgVUludDMyKQotICAgICAgSEFORExFX1RZUEUoIEZJWEVENjQsIHVpbnQ2
NCwgVUludDY0KQotICAgICAgSEFORExFX1RZUEUoU0ZJWEVEMzIsICBpbnQzMiwgIEludDMyKQot
ICAgICAgSEFORExFX1RZUEUoU0ZJWEVENjQsICBpbnQ2NCwgIEludDY0KQotCi0gICAgICBIQU5E
TEVfVFlQRShGTE9BVCAsIGZsb2F0ICwgRmxvYXQgKQotICAgICAgSEFORExFX1RZUEUoRE9VQkxF
LCBkb3VibGUsIERvdWJsZSkKLQotICAgICAgSEFORExFX1RZUEUoQk9PTCwgYm9vbCwgQm9vbCkK
LSN1bmRlZiBIQU5ETEVfVFlQRQotCi0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9F
TlVNOiB7Ci0gICAgICAgIGludCB2YWx1ZTsKLSAgICAgICAgaWYgKCFXaXJlRm9ybWF0TGl0ZTo6
UmVhZFByaW1pdGl2ZTxpbnQsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0VOVU0+KAotICAgICAgICAg
ICAgICAgIGlucHV0LCAmdmFsdWUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtZXNzYWdl
LT5HZXREZXNjcmlwdG9yKCktPmZpbGUoKS0+c3ludGF4KCkgPT0KLSAgICAgICAgICAgIEZpbGVE
ZXNjcmlwdG9yOjpTWU5UQVhfUFJPVE8zKSB7Ci0gICAgICAgICAgaWYgKGZpZWxkLT5pc19yZXBl
YXRlZCgpKSB7Ci0gICAgICAgICAgICBtZXNzYWdlX3JlZmxlY3Rpb24tPkFkZEVudW1WYWx1ZSht
ZXNzYWdlLCBmaWVsZCwgdmFsdWUpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBt
ZXNzYWdlX3JlZmxlY3Rpb24tPlNldEVudW1WYWx1ZShtZXNzYWdlLCBmaWVsZCwgdmFsdWUpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjb25zdCBFbnVtVmFsdWVE
ZXNjcmlwdG9yKiBlbnVtX3ZhbHVlID0KLSAgICAgICAgICAgICAgZmllbGQtPmVudW1fdHlwZSgp
LT5GaW5kVmFsdWVCeU51bWJlcih2YWx1ZSk7Ci0gICAgICAgICAgaWYgKGVudW1fdmFsdWUgIT0g
TlVMTCkgewotICAgICAgICAgICAgaWYgKGZpZWxkLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgICAg
ICAgICAgIG1lc3NhZ2VfcmVmbGVjdGlvbi0+QWRkRW51bShtZXNzYWdlLCBmaWVsZCwgZW51bV92
YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBtZXNzYWdlX3JlZmxl
Y3Rpb24tPlNldEVudW0obWVzc2FnZSwgZmllbGQsIGVudW1fdmFsdWUpOwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgZW51bSB2YWx1ZSBpcyBu
b3Qgb25lIG9mIHRoZSBrbm93biB2YWx1ZXMuICBBZGQgaXQgdG8gdGhlCi0gICAgICAgICAgICAv
LyBVbmtub3duRmllbGRTZXQuCi0gICAgICAgICAgICBpbnQ2NCBzaWduX2V4dGVuZGVkX3ZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50NjQ+KHZhbHVlKTsKLSAgICAgICAgICAgIG1lc3NhZ2VfcmVmbGVj
dGlvbi0+TXV0YWJsZVVua25vd25GaWVsZHMobWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0+QWRkVmFyaW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpZ25fZXh0ZW5kZWRfdmFsdWUpOwotICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLy8gSGFuZGxlIHN0cmlu
Z3Mgc2VwYXJhdGVseSBzbyB0aGF0IHdlIGNhbiBvcHRpbWl6ZSB0aGUgY3R5cGU9Q09SRCBjYXNl
LgotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU1RSSU5HOiB7Ci0gICAgICAgIGJv
b2wgc3RyaWN0X3V0ZjhfY2hlY2sgPSBTdHJpY3RVdGY4Q2hlY2soZmllbGQpOwotICAgICAgICBz
dHJpbmcgdmFsdWU7Ci0gICAgICAgIGlmICghV2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoaW5w
dXQsICZ2YWx1ZSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN0cmljdF91dGY4X2NoZWNr
KSB7Ci0gICAgICAgICAgaWYgKCFXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAg
ICAgICAgICAgICAgICAgIHZhbHVlLmRhdGEoKSwgdmFsdWUubGVuZ3RoKCksIFdpcmVGb3JtYXRM
aXRlOjpQQVJTRSwKLSAgICAgICAgICAgICAgICAgIGZpZWxkLT5mdWxsX25hbWUoKS5jX3N0cigp
KSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCh2YWx1ZS5kYXRhKCks
IHZhbHVlLmxlbmd0aCgpLCBQQVJTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWVsZC0+ZnVsbF9uYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGZpZWxkLT5pc19yZXBlYXRlZCgpKSB7Ci0gICAgICAgICAgbWVzc2FnZV9yZWZsZWN0aW9uLT5B
ZGRTdHJpbmcobWVzc2FnZSwgZmllbGQsIHZhbHVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBtZXNzYWdlX3JlZmxlY3Rpb24tPlNldFN0cmluZyhtZXNzYWdlLCBmaWVsZCwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIEZpZWxk
RGVzY3JpcHRvcjo6VFlQRV9CWVRFUzogewotICAgICAgICBzdHJpbmcgdmFsdWU7Ci0gICAgICAg
IGlmICghV2lyZUZvcm1hdExpdGU6OlJlYWRCeXRlcyhpbnB1dCwgJnZhbHVlKSkgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICAgICAgICBtZXNz
YWdlX3JlZmxlY3Rpb24tPkFkZFN0cmluZyhtZXNzYWdlLCBmaWVsZCwgdmFsdWUpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIG1lc3NhZ2VfcmVmbGVjdGlvbi0+U2V0U3RyaW5nKG1lc3Nh
Z2UsIGZpZWxkLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0K
LSAgICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0dST1VQOiB7Ci0gICAgICAgIE1lc3Nh
Z2UqIHN1Yl9tZXNzYWdlOwotICAgICAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAg
ICAgICAgICBzdWJfbWVzc2FnZSA9IG1lc3NhZ2VfcmVmbGVjdGlvbi0+QWRkTWVzc2FnZSgKLSAg
ICAgICAgICAgICAgbWVzc2FnZSwgZmllbGQsIGlucHV0LT5HZXRFeHRlbnNpb25GYWN0b3J5KCkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHN1Yl9tZXNzYWdlID0gbWVzc2FnZV9yZWZs
ZWN0aW9uLT5NdXRhYmxlTWVzc2FnZSgKLSAgICAgICAgICAgICAgbWVzc2FnZSwgZmllbGQsIGlu
cHV0LT5HZXRFeHRlbnNpb25GYWN0b3J5KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFX
aXJlRm9ybWF0TGl0ZTo6UmVhZEdyb3VwKFdpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJl
cih0YWcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIHN1
Yl9tZXNzYWdlKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgfQotCi0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9NRVNTQUdFOiB7Ci0gICAg
ICAgIE1lc3NhZ2UqIHN1Yl9tZXNzYWdlOwotICAgICAgICBpZiAoZmllbGQtPmlzX3JlcGVhdGVk
KCkpIHsKLSAgICAgICAgICBzdWJfbWVzc2FnZSA9IG1lc3NhZ2VfcmVmbGVjdGlvbi0+QWRkTWVz
c2FnZSgKLSAgICAgICAgICAgICAgbWVzc2FnZSwgZmllbGQsIGlucHV0LT5HZXRFeHRlbnNpb25G
YWN0b3J5KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHN1Yl9tZXNzYWdlID0gbWVz
c2FnZV9yZWZsZWN0aW9uLT5NdXRhYmxlTWVzc2FnZSgKLSAgICAgICAgICAgICAgbWVzc2FnZSwg
ZmllbGQsIGlucHV0LT5HZXRFeHRlbnNpb25GYWN0b3J5KCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2UoaW5wdXQsIHN1Yl9tZXNzYWdlKSkg
cmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXaXJlRm9ybWF0OjpQYXJzZUFuZE1lcmdlTWVzc2FnZVNl
dEl0ZW0oCi0gICAgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgIE1lc3NhZ2UqIG1l
c3NhZ2UpIHsKLSAgY29uc3QgUmVmbGVjdGlvbiogbWVzc2FnZV9yZWZsZWN0aW9uID0gbWVzc2Fn
ZS0+R2V0UmVmbGVjdGlvbigpOwotCi0gIC8vIFRoaXMgbWV0aG9kIHBhcnNlcyBhIGdyb3VwIHdo
aWNoIHNob3VsZCBjb250YWluIHR3byBmaWVsZHM6Ci0gIC8vICAgcmVxdWlyZWQgaW50MzIgdHlw
ZV9pZCA9IDI7Ci0gIC8vICAgcmVxdWlyZWQgZGF0YSBtZXNzYWdlID0gMzsKLQotICB1aW50MzIg
bGFzdF90eXBlX2lkID0gMDsKLQotICAvLyBPbmNlIHdlIHNlZSBhIHR5cGVfaWQsIHdlJ2xsIGxv
b2sgdXAgdGhlIEZpZWxkRGVzY3JpcHRvciBmb3IgdGhlCi0gIC8vIGV4dGVuc2lvbi4KLSAgY29u
c3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCA9IE5VTEw7Ci0KLSAgLy8gSWYgd2Ugc2VlIG1lc3Nh
Z2UgZGF0YSBiZWZvcmUgdGhlIHR5cGVfaWQsIHdlJ2xsIGFwcGVuZCBpdCB0byB0aGlzIHNvCi0g
IC8vIHdlIGNhbiBwYXJzZSBpdCBsYXRlci4KLSAgc3RyaW5nIG1lc3NhZ2VfZGF0YTsKLQotICB3
aGlsZSAodHJ1ZSkgewotICAgIHVpbnQzMiB0YWcgPSBpbnB1dC0+UmVhZFRhZygpOwotICAgIGlm
ICh0YWcgPT0gMCkgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoICh0YWcpIHsKLSAgICAgIGNh
c2UgV2lyZUZvcm1hdExpdGU6OmtNZXNzYWdlU2V0VHlwZUlkVGFnOiB7Ci0gICAgICAgIHVpbnQz
MiB0eXBlX2lkOwotICAgICAgICBpZiAoIWlucHV0LT5SZWFkVmFyaW50MzIoJnR5cGVfaWQpKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxhc3RfdHlwZV9pZCA9IHR5cGVfaWQ7Ci0gICAgICAgIGZp
ZWxkID0gbWVzc2FnZV9yZWZsZWN0aW9uLT5GaW5kS25vd25FeHRlbnNpb25CeU51bWJlcih0eXBl
X2lkKTsKLQotICAgICAgICBpZiAoIW1lc3NhZ2VfZGF0YS5lbXB0eSgpKSB7Ci0gICAgICAgICAg
Ly8gV2Ugc2F3IHNvbWUgbWVzc2FnZSBkYXRhIGJlZm9yZSB0aGUgdHlwZV9pZC4gIEhhdmUgdG8g
cGFyc2UgaXQKLSAgICAgICAgICAvLyBub3cuCi0gICAgICAgICAgaW86OkFycmF5SW5wdXRTdHJl
YW0gcmF3X2lucHV0KG1lc3NhZ2VfZGF0YS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZGF0YS5zaXplKCkpOwotICAgICAgICAgIGlvOjpD
b2RlZElucHV0U3RyZWFtIHN1Yl9pbnB1dCgmcmF3X2lucHV0KTsKLSAgICAgICAgICBpZiAoIVBh
cnNlQW5kTWVyZ2VNZXNzYWdlU2V0RmllbGQobGFzdF90eXBlX2lkLCBmaWVsZCwgbWVzc2FnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1Yl9pbnB1dCkp
IHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbWVz
c2FnZV9kYXRhLmNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsKLSAgICAgIH0K
LQotICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6a01lc3NhZ2VTZXRNZXNzYWdlVGFnOiB7Ci0g
ICAgICAgIGlmIChsYXN0X3R5cGVfaWQgPT0gMCkgewotICAgICAgICAgIC8vIFdlIGhhdmVuJ3Qg
c2VlbiBhIHR5cGVfaWQgeWV0LiAgQXBwZW5kIHRoaXMgZGF0YSB0byBtZXNzYWdlX2RhdGEuCi0g
ICAgICAgICAgc3RyaW5nIHRlbXA7Ci0gICAgICAgICAgdWludDMyIGxlbmd0aDsKLSAgICAgICAg
ICBpZiAoIWlucHV0LT5SZWFkVmFyaW50MzIoJmxlbmd0aCkpIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICBpZiAoIWlucHV0LT5SZWFkU3RyaW5nKCZ0ZW1wLCBsZW5ndGgpKSByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgaW86OlN0cmluZ091dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKCZtZXNzYWdl
X2RhdGEpOwotICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSBjb2RlZF9vdXRwdXQoJm91
dHB1dF9zdHJlYW0pOwotICAgICAgICAgIGNvZGVkX291dHB1dC5Xcml0ZVZhcmludDMyKGxlbmd0
aCk7Ci0gICAgICAgICAgY29kZWRfb3V0cHV0LldyaXRlU3RyaW5nKHRlbXApOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIC8vIEFscmVhZHkgc2F3IHR5cGVfaWQsIHNvIHdlIGNhbiBwYXJz
ZSB0aGlzIGRpcmVjdGx5LgotICAgICAgICAgIGlmICghUGFyc2VBbmRNZXJnZU1lc3NhZ2VTZXRG
aWVsZChsYXN0X3R5cGVfaWQsIGZpZWxkLCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQot
ICAgICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6a01lc3NhZ2VTZXRJdGVtRW5kVGFnOiB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIGlm
ICghU2tpcEZpZWxkKGlucHV0LCB0YWcsIE5VTEwpKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotdm9pZCBXaXJlRm9ybWF0OjpTZXJpYWxp
emVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAgICBpbnQg
c2l6ZSwgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgY29uc3QgRGVzY3JpcHRv
ciogZGVzY3JpcHRvciA9IG1lc3NhZ2UuR2V0RGVzY3JpcHRvcigpOwotICBjb25zdCBSZWZsZWN0
aW9uKiBtZXNzYWdlX3JlZmxlY3Rpb24gPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLSAgaW50
IGV4cGVjdGVkX2VuZHBvaW50ID0gb3V0cHV0LT5CeXRlQ291bnQoKSArIHNpemU7Ci0KLSAgdmVj
dG9yPGNvbnN0IEZpZWxkRGVzY3JpcHRvcio+IGZpZWxkczsKLSAgbWVzc2FnZV9yZWZsZWN0aW9u
LT5MaXN0RmllbGRzKG1lc3NhZ2UsICZmaWVsZHMpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGZp
ZWxkcy5zaXplKCk7IGkrKykgewotICAgIFNlcmlhbGl6ZUZpZWxkV2l0aENhY2hlZFNpemVzKGZp
ZWxkc1tpXSwgbWVzc2FnZSwgb3V0cHV0KTsKLSAgfQotCi0gIGlmIChkZXNjcmlwdG9yLT5vcHRp
b25zKCkubWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQoKSkgewotICAgIFNlcmlhbGl6ZVVua25vd25N
ZXNzYWdlU2V0SXRlbXMoCi0gICAgICAgIG1lc3NhZ2VfcmVmbGVjdGlvbi0+R2V0VW5rbm93bkZp
ZWxkcyhtZXNzYWdlKSwgb3V0cHV0KTsKLSAgfSBlbHNlIHsKLSAgICBTZXJpYWxpemVVbmtub3du
RmllbGRzKAotICAgICAgICBtZXNzYWdlX3JlZmxlY3Rpb24tPkdldFVua25vd25GaWVsZHMobWVz
c2FnZSksIG91dHB1dCk7Ci0gIH0KLQotICBHT09HTEVfQ0hFQ0tfRVEob3V0cHV0LT5CeXRlQ291
bnQoKSwgZXhwZWN0ZWRfZW5kcG9pbnQpCi0gICAgPDwgIjogUHJvdG9jb2wgbWVzc2FnZSBzZXJp
YWxpemVkIHRvIGEgc2l6ZSBkaWZmZXJlbnQgZnJvbSB3aGF0IHdhcyAiCi0gICAgICAgIm9yaWdp
bmFsbHkgZXhwZWN0ZWQuICBQZXJoYXBzIGl0IHdhcyBtb2RpZmllZCBieSBhbm90aGVyIHRocmVh
ZCAiCi0gICAgICAgImR1cmluZyBzZXJpYWxpemF0aW9uPyI7Ci19Ci0KLXZvaWQgV2lyZUZvcm1h
dDo6U2VyaWFsaXplRmllbGRXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgY29uc3QgRmllbGREZXNjcmlw
dG9yKiBmaWVsZCwKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgIGlvOjpDb2RlZE91
dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIG1lc3NhZ2VfcmVmbGVj
dGlvbiA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotCi0gIGlmIChmaWVsZC0+aXNfZXh0ZW5z
aW9uKCkgJiYKLSAgICAgIGZpZWxkLT5jb250YWluaW5nX3R5cGUoKS0+b3B0aW9ucygpLm1lc3Nh
Z2Vfc2V0X3dpcmVfZm9ybWF0KCkgJiYKLSAgICAgIGZpZWxkLT5jcHBfdHlwZSgpID09IEZpZWxk
RGVzY3JpcHRvcjo6Q1BQVFlQRV9NRVNTQUdFICYmCi0gICAgICAhZmllbGQtPmlzX3JlcGVhdGVk
KCkpIHsKLSAgICBTZXJpYWxpemVNZXNzYWdlU2V0SXRlbVdpdGhDYWNoZWRTaXplcyhmaWVsZCwg
bWVzc2FnZSwgb3V0cHV0KTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpbnQgY291bnQgPSAwOwot
Ci0gIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgIGNvdW50ID0gbWVzc2FnZV9yZWZs
ZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgZmllbGQpOwotICB9IGVsc2UgaWYgKG1lc3NhZ2Vf
cmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwgZmllbGQpKSB7Ci0gICAgY291bnQgPSAxOwot
ICB9Ci0KLSAgY29uc3QgYm9vbCBpc19wYWNrZWQgPSBmaWVsZC0+aXNfcGFja2VkKCk7Ci0gIGlm
IChpc19wYWNrZWQgJiYgY291bnQgPiAwKSB7Ci0gICAgV2lyZUZvcm1hdExpdGU6OldyaXRlVGFn
KGZpZWxkLT5udW1iZXIoKSwKLSAgICAgICAgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0xFTkdU
SF9ERUxJTUlURUQsIG91dHB1dCk7Ci0gICAgY29uc3QgaW50IGRhdGFfc2l6ZSA9IEZpZWxkRGF0
YU9ubHlCeXRlU2l6ZShmaWVsZCwgbWVzc2FnZSk7Ci0gICAgb3V0cHV0LT5Xcml0ZVZhcmludDMy
KGRhdGFfc2l6ZSk7Ci0gIH0KLQotICBmb3IgKGludCBqID0gMDsgaiA8IGNvdW50OyBqKyspIHsK
LSAgICBzd2l0Y2ggKGZpZWxkLT50eXBlKCkpIHsKLSNkZWZpbmUgSEFORExFX1BSSU1JVElWRV9U
WVBFKFRZUEUsIENQUFRZUEUsIFRZUEVfTUVUSE9ELCBDUFBUWVBFX01FVEhPRCkgICAgICBcCi0g
ICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV8jI1RZUEU6IHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBDUFBUWVBFIHZhbHVlID0gZmll
bGQtPmlzX3JlcGVhdGVkKCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWQjI0NQ
UFRZUEVfTUVUSE9EKCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Us
IGZpZWxkLCBqKSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZV9yZWZsZWN0aW9uLT5HZXQjI0NQUFRZUEVfTUVUSE9EKCAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgZmllbGQp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChpc19wYWNrZWQp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpXcml0ZSMjVFlQRV9NRVRIT0QjI05vVGFnKHZh
bHVlLCBvdXRwdXQpOyAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgV2lyZUZvcm1hdExpdGU6OldyaXRlIyNUWVBFX01FVEhPRChmaWVsZC0+bnVtYmVyKCks
IHZhbHVlLCBvdXRwdXQpOyAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICB9Ci0KLSAgICAgIEhBTkRMRV9QUklNSVRJVkVfVFlQRSggSU5U
MzIsICBpbnQzMiwgIEludDMyLCAgSW50MzIpCi0gICAgICBIQU5ETEVfUFJJTUlUSVZFX1RZUEUo
IElOVDY0LCAgaW50NjQsICBJbnQ2NCwgIEludDY0KQotICAgICAgSEFORExFX1BSSU1JVElWRV9U
WVBFKFNJTlQzMiwgIGludDMyLCBTSW50MzIsICBJbnQzMikKLSAgICAgIEhBTkRMRV9QUklNSVRJ
VkVfVFlQRShTSU5UNjQsICBpbnQ2NCwgU0ludDY0LCAgSW50NjQpCi0gICAgICBIQU5ETEVfUFJJ
TUlUSVZFX1RZUEUoVUlOVDMyLCB1aW50MzIsIFVJbnQzMiwgVUludDMyKQotICAgICAgSEFORExF
X1BSSU1JVElWRV9UWVBFKFVJTlQ2NCwgdWludDY0LCBVSW50NjQsIFVJbnQ2NCkKLQotICAgICAg
SEFORExFX1BSSU1JVElWRV9UWVBFKCBGSVhFRDMyLCB1aW50MzIsICBGaXhlZDMyLCBVSW50MzIp
Ci0gICAgICBIQU5ETEVfUFJJTUlUSVZFX1RZUEUoIEZJWEVENjQsIHVpbnQ2NCwgIEZpeGVkNjQs
IFVJbnQ2NCkKLSAgICAgIEhBTkRMRV9QUklNSVRJVkVfVFlQRShTRklYRUQzMiwgIGludDMyLCBT
Rml4ZWQzMiwgIEludDMyKQotICAgICAgSEFORExFX1BSSU1JVElWRV9UWVBFKFNGSVhFRDY0LCAg
aW50NjQsIFNGaXhlZDY0LCAgSW50NjQpCi0KLSAgICAgIEhBTkRMRV9QUklNSVRJVkVfVFlQRShG
TE9BVCAsIGZsb2F0ICwgRmxvYXQgLCBGbG9hdCApCi0gICAgICBIQU5ETEVfUFJJTUlUSVZFX1RZ
UEUoRE9VQkxFLCBkb3VibGUsIERvdWJsZSwgRG91YmxlKQotCi0gICAgICBIQU5ETEVfUFJJTUlU
SVZFX1RZUEUoQk9PTCwgYm9vbCwgQm9vbCwgQm9vbCkKLSN1bmRlZiBIQU5ETEVfUFJJTUlUSVZF
X1RZUEUKLQotI2RlZmluZSBIQU5ETEVfVFlQRShUWVBFLCBUWVBFX01FVEhPRCwgQ1BQVFlQRV9N
RVRIT0QpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV8jI1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgV2lyZUZvcm1hdExpdGU6OldyaXRlIyNUWVBFX01FVEhPRCggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICBmaWVsZC0+bnVtYmVyKCksICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg
IGZpZWxkLT5pc19yZXBlYXRlZCgpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICBtZXNzYWdlX3JlZmxlY3Rpb24tPkdldFJlcGVhdGVk
IyNDUFBUWVBFX01FVEhPRCggICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZSwgZmllbGQsIGopIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgbWVzc2FnZV9yZWZsZWN0aW9uLT5HZXQjI0NQUFRZUEVfTUVUSE9EKG1l
c3NhZ2UsIGZpZWxkKSwgICAgIFwKLSAgICAgICAgICAgICAgb3V0cHV0KTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBicmVh
azsKLQotICAgICAgSEFORExFX1RZUEUoR1JPVVAgICwgR3JvdXAgICwgTWVzc2FnZSkKLSAgICAg
IEhBTkRMRV9UWVBFKE1FU1NBR0UsIE1lc3NhZ2UsIE1lc3NhZ2UpCi0jdW5kZWYgSEFORExFX1RZ
UEUKLQotICAgICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfRU5VTTogewotICAgICAgICBj
b25zdCBFbnVtVmFsdWVEZXNjcmlwdG9yKiB2YWx1ZSA9IGZpZWxkLT5pc19yZXBlYXRlZCgpID8K
LSAgICAgICAgICBtZXNzYWdlX3JlZmxlY3Rpb24tPkdldFJlcGVhdGVkRW51bShtZXNzYWdlLCBm
aWVsZCwgaikgOgotICAgICAgICAgIG1lc3NhZ2VfcmVmbGVjdGlvbi0+R2V0RW51bShtZXNzYWdl
LCBmaWVsZCk7Ci0gICAgICAgIGlmIChpc19wYWNrZWQpIHsKLSAgICAgICAgICBXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVFbnVtTm9UYWcodmFsdWUtPm51bWJlcigpLCBvdXRwdXQpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIFdpcmVGb3JtYXRMaXRlOjpXcml0ZUVudW0oZmllbGQtPm51bWJl
cigpLCB2YWx1ZS0+bnVtYmVyKCksIG91dHB1dCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0KLSAgICAgIC8vIEhhbmRsZSBzdHJpbmdzIHNlcGFyYXRlbHkgc28gdGhhdCB3
ZSBjYW4gZ2V0IHN0cmluZyByZWZlcmVuY2VzCi0gICAgICAvLyBpbnN0ZWFkIG9mIGNvcHlpbmcu
Ci0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkc6IHsKLSAgICAgICAgYm9v
bCBzdHJpY3RfdXRmOF9jaGVjayA9IFN0cmljdFV0ZjhDaGVjayhmaWVsZCk7Ci0gICAgICAgIHN0
cmluZyBzY3JhdGNoOwotICAgICAgICBjb25zdCBzdHJpbmcmIHZhbHVlID0gZmllbGQtPmlzX3Jl
cGVhdGVkKCkgPwotICAgICAgICAgIG1lc3NhZ2VfcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWRTdHJp
bmdSZWZlcmVuY2UoCi0gICAgICAgICAgICBtZXNzYWdlLCBmaWVsZCwgaiwgJnNjcmF0Y2gpIDoK
LSAgICAgICAgICBtZXNzYWdlX3JlZmxlY3Rpb24tPkdldFN0cmluZ1JlZmVyZW5jZShtZXNzYWdl
LCBmaWVsZCwgJnNjcmF0Y2gpOwotICAgICAgICBpZiAoc3RyaWN0X3V0ZjhfY2hlY2spIHsKLSAg
ICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZyh2YWx1ZS5kYXRhKCksIHZh
bHVlLmxlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdpcmVGb3JtYXRMaXRlOjpTRVJJQUxJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmllbGQtPmZ1bGxfbmFtZSgpLmNfc3RyKCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIFZlcmlmeVVURjhTdHJpbmdOYW1lZEZpZWxkKHZhbHVlLmRhdGEoKSwg
dmFsdWUubGVuZ3RoKCksIFNFUklBTElaRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWVsZC0+ZnVsbF9uYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
V2lyZUZvcm1hdExpdGU6OldyaXRlU3RyaW5nKGZpZWxkLT5udW1iZXIoKSwgdmFsdWUsIG91dHB1
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIEZpZWxkRGVzY3JpcHRv
cjo6VFlQRV9CWVRFUzogewotICAgICAgICBzdHJpbmcgc2NyYXRjaDsKLSAgICAgICAgY29uc3Qg
c3RyaW5nJiB2YWx1ZSA9IGZpZWxkLT5pc19yZXBlYXRlZCgpID8KLSAgICAgICAgICBtZXNzYWdl
X3JlZmxlY3Rpb24tPkdldFJlcGVhdGVkU3RyaW5nUmVmZXJlbmNlKAotICAgICAgICAgICAgbWVz
c2FnZSwgZmllbGQsIGosICZzY3JhdGNoKSA6Ci0gICAgICAgICAgbWVzc2FnZV9yZWZsZWN0aW9u
LT5HZXRTdHJpbmdSZWZlcmVuY2UobWVzc2FnZSwgZmllbGQsICZzY3JhdGNoKTsKLSAgICAgICAg
V2lyZUZvcm1hdExpdGU6OldyaXRlQnl0ZXMoZmllbGQtPm51bWJlcigpLCB2YWx1ZSwgb3V0cHV0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgV2lyZUZv
cm1hdDo6U2VyaWFsaXplTWVzc2FnZVNldEl0ZW1XaXRoQ2FjaGVkU2l6ZXMoCi0gICAgY29uc3Qg
RmllbGREZXNjcmlwdG9yKiBmaWVsZCwKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAg
IGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIGNvbnN0IFJlZmxlY3Rpb24qIG1l
c3NhZ2VfcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwotCi0gIC8vIFN0YXJ0
IGdyb3VwLgotICBvdXRwdXQtPldyaXRlVmFyaW50MzIoV2lyZUZvcm1hdExpdGU6OmtNZXNzYWdl
U2V0SXRlbVN0YXJ0VGFnKTsKLQotICAvLyBXcml0ZSB0eXBlIElELgotICBvdXRwdXQtPldyaXRl
VmFyaW50MzIoV2lyZUZvcm1hdExpdGU6OmtNZXNzYWdlU2V0VHlwZUlkVGFnKTsKLSAgb3V0cHV0
LT5Xcml0ZVZhcmludDMyKGZpZWxkLT5udW1iZXIoKSk7Ci0KLSAgLy8gV3JpdGUgbWVzc2FnZS4K
LSAgb3V0cHV0LT5Xcml0ZVZhcmludDMyKFdpcmVGb3JtYXRMaXRlOjprTWVzc2FnZVNldE1lc3Nh
Z2VUYWcpOwotCi0gIGNvbnN0IE1lc3NhZ2UmIHN1Yl9tZXNzYWdlID0gbWVzc2FnZV9yZWZsZWN0
aW9uLT5HZXRNZXNzYWdlKG1lc3NhZ2UsIGZpZWxkKTsKLSAgb3V0cHV0LT5Xcml0ZVZhcmludDMy
KHN1Yl9tZXNzYWdlLkdldENhY2hlZFNpemUoKSk7Ci0gIHN1Yl9tZXNzYWdlLlNlcmlhbGl6ZVdp
dGhDYWNoZWRTaXplcyhvdXRwdXQpOwotCi0gIC8vIEVuZCBncm91cC4KLSAgb3V0cHV0LT5Xcml0
ZVZhcmludDMyKFdpcmVGb3JtYXRMaXRlOjprTWVzc2FnZVNldEl0ZW1FbmRUYWcpOwotfQotCi0v
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0KLWludCBXaXJlRm9ybWF0OjpCeXRlU2l6ZShjb25zdCBNZXNzYWdlJiBt
ZXNzYWdlKSB7Ci0gIGNvbnN0IERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBtZXNzYWdlLkdldERl
c2NyaXB0b3IoKTsKLSAgY29uc3QgUmVmbGVjdGlvbiogbWVzc2FnZV9yZWZsZWN0aW9uID0gbWVz
c2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgaW50IG91cl9zaXplID0gMDsKLQotICB2ZWN0b3I8
Y29uc3QgRmllbGREZXNjcmlwdG9yKj4gZmllbGRzOwotICBtZXNzYWdlX3JlZmxlY3Rpb24tPkxp
c3RGaWVsZHMobWVzc2FnZSwgJmZpZWxkcyk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRz
LnNpemUoKTsgaSsrKSB7Ci0gICAgb3VyX3NpemUgKz0gRmllbGRCeXRlU2l6ZShmaWVsZHNbaV0s
IG1lc3NhZ2UpOwotICB9Ci0KLSAgaWYgKGRlc2NyaXB0b3ItPm9wdGlvbnMoKS5tZXNzYWdlX3Nl
dF93aXJlX2Zvcm1hdCgpKSB7Ci0gICAgb3VyX3NpemUgKz0gQ29tcHV0ZVVua25vd25NZXNzYWdl
U2V0SXRlbXNTaXplKAotICAgICAgbWVzc2FnZV9yZWZsZWN0aW9uLT5HZXRVbmtub3duRmllbGRz
KG1lc3NhZ2UpKTsKLSAgfSBlbHNlIHsKLSAgICBvdXJfc2l6ZSArPSBDb21wdXRlVW5rbm93bkZp
ZWxkc1NpemUoCi0gICAgICBtZXNzYWdlX3JlZmxlY3Rpb24tPkdldFVua25vd25GaWVsZHMobWVz
c2FnZSkpOwotICB9Ci0KLSAgcmV0dXJuIG91cl9zaXplOwotfQotCi1pbnQgV2lyZUZvcm1hdDo6
RmllbGRCeXRlU2l6ZSgKLSAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgIGNv
bnN0IE1lc3NhZ2UmIG1lc3NhZ2UpIHsKLSAgY29uc3QgUmVmbGVjdGlvbiogbWVzc2FnZV9yZWZs
ZWN0aW9uID0gbWVzc2FnZS5HZXRSZWZsZWN0aW9uKCk7Ci0KLSAgaWYgKGZpZWxkLT5pc19leHRl
bnNpb24oKSAmJgotICAgICAgZmllbGQtPmNvbnRhaW5pbmdfdHlwZSgpLT5vcHRpb25zKCkubWVz
c2FnZV9zZXRfd2lyZV9mb3JtYXQoKSAmJgotICAgICAgZmllbGQtPmNwcF90eXBlKCkgPT0gRmll
bGREZXNjcmlwdG9yOjpDUFBUWVBFX01FU1NBR0UgJiYKLSAgICAgICFmaWVsZC0+aXNfcmVwZWF0
ZWQoKSkgewotICAgIHJldHVybiBNZXNzYWdlU2V0SXRlbUJ5dGVTaXplKGZpZWxkLCBtZXNzYWdl
KTsKLSAgfQotCi0gIGludCBjb3VudCA9IDA7Ci0gIGlmIChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkg
ewotICAgIGNvdW50ID0gbWVzc2FnZV9yZWZsZWN0aW9uLT5GaWVsZFNpemUobWVzc2FnZSwgZmll
bGQpOwotICB9IGVsc2UgaWYgKG1lc3NhZ2VfcmVmbGVjdGlvbi0+SGFzRmllbGQobWVzc2FnZSwg
ZmllbGQpKSB7Ci0gICAgY291bnQgPSAxOwotICB9Ci0KLSAgY29uc3QgaW50IGRhdGFfc2l6ZSA9
IEZpZWxkRGF0YU9ubHlCeXRlU2l6ZShmaWVsZCwgbWVzc2FnZSk7Ci0gIGludCBvdXJfc2l6ZSA9
IGRhdGFfc2l6ZTsKLSAgaWYgKGZpZWxkLT5pc19wYWNrZWQoKSkgewotICAgIGlmIChkYXRhX3Np
emUgPiAwKSB7Ci0gICAgICAvLyBQYWNrZWQgZmllbGRzIGdldCBzZXJpYWxpemVkIGxpa2UgYSBz
dHJpbmcsIG5vdCB0aGVpciBuYXRpdmUgdHlwZS4KLSAgICAgIC8vIFRlY2huaWNhbGx5IHRoaXMg
ZG9lc24ndCByZWFsbHkgbWF0dGVyOyB0aGUgc2l6ZSBvbmx5IGNoYW5nZXMgaWYgaXQncwotICAg
ICAgLy8gYSBHUk9VUAotICAgICAgb3VyX3NpemUgKz0gVGFnU2l6ZShmaWVsZC0+bnVtYmVyKCks
IEZpZWxkRGVzY3JpcHRvcjo6VFlQRV9TVFJJTkcpOwotICAgICAgb3VyX3NpemUgKz0gaW86OkNv
ZGVkT3V0cHV0U3RyZWFtOjpWYXJpbnRTaXplMzIoZGF0YV9zaXplKTsKLSAgICB9Ci0gIH0gZWxz
ZSB7Ci0gICAgb3VyX3NpemUgKz0gY291bnQgKiBUYWdTaXplKGZpZWxkLT5udW1iZXIoKSwgZmll
bGQtPnR5cGUoKSk7Ci0gIH0KLSAgcmV0dXJuIG91cl9zaXplOwotfQotCi1pbnQgV2lyZUZvcm1h
dDo6RmllbGREYXRhT25seUJ5dGVTaXplKAotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmll
bGQsCi0gICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSkgewotICBjb25zdCBSZWZsZWN0aW9uKiBt
ZXNzYWdlX3JlZmxlY3Rpb24gPSBtZXNzYWdlLkdldFJlZmxlY3Rpb24oKTsKLQotICBpbnQgY291
bnQgPSAwOwotICBpZiAoZmllbGQtPmlzX3JlcGVhdGVkKCkpIHsKLSAgICBjb3VudCA9IG1lc3Nh
Z2VfcmVmbGVjdGlvbi0+RmllbGRTaXplKG1lc3NhZ2UsIGZpZWxkKTsKLSAgfSBlbHNlIGlmICht
ZXNzYWdlX3JlZmxlY3Rpb24tPkhhc0ZpZWxkKG1lc3NhZ2UsIGZpZWxkKSkgewotICAgIGNvdW50
ID0gMTsKLSAgfQotCi0gIGludCBkYXRhX3NpemUgPSAwOwotICBzd2l0Y2ggKGZpZWxkLT50eXBl
KCkpIHsKLSNkZWZpbmUgSEFORExFX1RZUEUoVFlQRSwgVFlQRV9NRVRIT0QsIENQUFRZUEVfTUVU
SE9EKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEZpZWxkRGVzY3JpcHRvcjo6VFlQ
RV8jI1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlm
IChmaWVsZC0+aXNfcmVwZWF0ZWQoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkYXRhX3NpemUgKz0g
V2lyZUZvcm1hdExpdGU6OlRZUEVfTUVUSE9EIyNTaXplKCAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgIG1lc3NhZ2VfcmVmbGVjdGlvbi0+R2V0UmVwZWF0ZWQjI0NQUFRZUEVfTUVUSE9E
KCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgbWVzc2FnZSwgZmllbGQsIGopKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZGF0YV9zaXplICs9IFdpcmVGb3JtYXRM
aXRlOjpUWVBFX01FVEhPRCMjU2l6ZSggICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBt
ZXNzYWdlX3JlZmxlY3Rpb24tPkdldCMjQ1BQVFlQRV9NRVRIT0QobWVzc2FnZSwgZmllbGQpKTsg
ICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGJyZWFrOwotCi0jZGVmaW5lIEhB
TkRMRV9GSVhFRF9UWVBFKFRZUEUsIFRZUEVfTUVUSE9EKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfIyNUWVBFOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkYXRhX3NpemUgKz0gY291bnQg
KiBXaXJlRm9ybWF0TGl0ZTo6ayMjVFlQRV9NRVRIT0QjI1NpemU7ICAgICAgICAgICBcCi0gICAg
ICBicmVhazsKLQotICAgIEhBTkRMRV9UWVBFKCBJTlQzMiwgIEludDMyLCAgSW50MzIpCi0gICAg
SEFORExFX1RZUEUoIElOVDY0LCAgSW50NjQsICBJbnQ2NCkKLSAgICBIQU5ETEVfVFlQRShTSU5U
MzIsIFNJbnQzMiwgIEludDMyKQotICAgIEhBTkRMRV9UWVBFKFNJTlQ2NCwgU0ludDY0LCAgSW50
NjQpCi0gICAgSEFORExFX1RZUEUoVUlOVDMyLCBVSW50MzIsIFVJbnQzMikKLSAgICBIQU5ETEVf
VFlQRShVSU5UNjQsIFVJbnQ2NCwgVUludDY0KQotCi0gICAgSEFORExFX0ZJWEVEX1RZUEUoIEZJ
WEVEMzIsICBGaXhlZDMyKQotICAgIEhBTkRMRV9GSVhFRF9UWVBFKCBGSVhFRDY0LCAgRml4ZWQ2
NCkKLSAgICBIQU5ETEVfRklYRURfVFlQRShTRklYRUQzMiwgU0ZpeGVkMzIpCi0gICAgSEFORExF
X0ZJWEVEX1RZUEUoU0ZJWEVENjQsIFNGaXhlZDY0KQotCi0gICAgSEFORExFX0ZJWEVEX1RZUEUo
RkxPQVQgLCBGbG9hdCApCi0gICAgSEFORExFX0ZJWEVEX1RZUEUoRE9VQkxFLCBEb3VibGUpCi0K
LSAgICBIQU5ETEVfRklYRURfVFlQRShCT09MLCBCb29sKQotCi0gICAgSEFORExFX1RZUEUoR1JP
VVAgICwgR3JvdXAgICwgTWVzc2FnZSkKLSAgICBIQU5ETEVfVFlQRShNRVNTQUdFLCBNZXNzYWdl
LCBNZXNzYWdlKQotI3VuZGVmIEhBTkRMRV9UWVBFCi0jdW5kZWYgSEFORExFX0ZJWEVEX1RZUEUK
LQotICAgIGNhc2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0VOVU06IHsKLSAgICAgIGlmIChmaWVs
ZC0+aXNfcmVwZWF0ZWQoKSkgewotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvdW50OyBq
KyspIHsKLSAgICAgICAgICBkYXRhX3NpemUgKz0gV2lyZUZvcm1hdExpdGU6OkVudW1TaXplKAot
ICAgICAgICAgICAgbWVzc2FnZV9yZWZsZWN0aW9uLT5HZXRSZXBlYXRlZEVudW0obWVzc2FnZSwg
ZmllbGQsIGopLT5udW1iZXIoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGRhdGFfc2l6ZSArPSBXaXJlRm9ybWF0TGl0ZTo6RW51bVNpemUoCi0gICAgICAgICAgbWVzc2Fn
ZV9yZWZsZWN0aW9uLT5HZXRFbnVtKG1lc3NhZ2UsIGZpZWxkKS0+bnVtYmVyKCkpOwotICAgICAg
fQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIHN0cmluZ3Mgc2VwYXJhdGVs
eSBzbyB0aGF0IHdlIGNhbiBnZXQgc3RyaW5nIHJlZmVyZW5jZXMKLSAgICAvLyBpbnN0ZWFkIG9m
IGNvcHlpbmcuCi0gICAgY2FzZSBGaWVsZERlc2NyaXB0b3I6OlRZUEVfU1RSSU5HOgotICAgIGNh
c2UgRmllbGREZXNjcmlwdG9yOjpUWVBFX0JZVEVTOiB7Ci0gICAgICBmb3IgKGludCBqID0gMDsg
aiA8IGNvdW50OyBqKyspIHsKLSAgICAgICAgc3RyaW5nIHNjcmF0Y2g7Ci0gICAgICAgIGNvbnN0
IHN0cmluZyYgdmFsdWUgPSBmaWVsZC0+aXNfcmVwZWF0ZWQoKSA/Ci0gICAgICAgICAgbWVzc2Fn
ZV9yZWZsZWN0aW9uLT5HZXRSZXBlYXRlZFN0cmluZ1JlZmVyZW5jZSgKLSAgICAgICAgICAgIG1l
c3NhZ2UsIGZpZWxkLCBqLCAmc2NyYXRjaCkgOgotICAgICAgICAgIG1lc3NhZ2VfcmVmbGVjdGlv
bi0+R2V0U3RyaW5nUmVmZXJlbmNlKG1lc3NhZ2UsIGZpZWxkLCAmc2NyYXRjaCk7Ci0gICAgICAg
IGRhdGFfc2l6ZSArPSBXaXJlRm9ybWF0TGl0ZTo6U3RyaW5nU2l6ZSh2YWx1ZSk7Ci0gICAgICB9
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGRhdGFfc2l6ZTsKLX0KLQotaW50
IFdpcmVGb3JtYXQ6Ok1lc3NhZ2VTZXRJdGVtQnl0ZVNpemUoCi0gICAgY29uc3QgRmllbGREZXNj
cmlwdG9yKiBmaWVsZCwKLSAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlKSB7Ci0gIGNvbnN0IFJl
ZmxlY3Rpb24qIG1lc3NhZ2VfcmVmbGVjdGlvbiA9IG1lc3NhZ2UuR2V0UmVmbGVjdGlvbigpOwot
Ci0gIGludCBvdXJfc2l6ZSA9IFdpcmVGb3JtYXRMaXRlOjprTWVzc2FnZVNldEl0ZW1UYWdzU2l6
ZTsKLQotICAvLyB0eXBlX2lkCi0gIG91cl9zaXplICs9IGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6
VmFyaW50U2l6ZTMyKGZpZWxkLT5udW1iZXIoKSk7Ci0KLSAgLy8gbWVzc2FnZQotICBjb25zdCBN
ZXNzYWdlJiBzdWJfbWVzc2FnZSA9IG1lc3NhZ2VfcmVmbGVjdGlvbi0+R2V0TWVzc2FnZShtZXNz
YWdlLCBmaWVsZCk7Ci0gIGludCBtZXNzYWdlX3NpemUgPSBzdWJfbWVzc2FnZS5CeXRlU2l6ZSgp
OwotCi0gIG91cl9zaXplICs9IGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6ZTMyKG1l
c3NhZ2Vfc2l6ZSk7Ci0gIG91cl9zaXplICs9IG1lc3NhZ2Vfc2l6ZTsKLQotICByZXR1cm4gb3Vy
X3NpemU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHBy
b3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJv
dG9idWYvd2lyZV9mb3JtYXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDFiZTc1YmExZTJhZGFjYTI1ZDA5ODFmNDJk
YjMxMjc1NTJlNWU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MzM3ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hh
bmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJz
LwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRo
b3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgICAgICAgIGF0ZW5hc2lv
QGdvb2dsZS5jb20gKENocmlzIEF0ZW5hc2lvKSAoWmlnWmFnIHRyYW5zZm9ybSkKLS8vICBCYXNl
ZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQotLy8gIFNhbmpheSBHaGVt
YXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgotLy8KLS8vIFRoaXMgaGVhZGVyIGlzIGxvZ2lj
YWxseSBpbnRlcm5hbCwgYnV0IGlzIG1hZGUgcHVibGljIGJlY2F1c2UgaXQgaXMgdXNlZAotLy8g
ZnJvbSBwcm90b2NvbC1jb21waWxlci1nZW5lcmF0ZWQgY29kZSwgd2hpY2ggbWF5IHJlc2lkZSBp
biBvdGhlciBjb21wb25lbnRzLgotCi0jaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9XSVJFX0ZPUk1B
VF9IX18KLSNkZWZpbmUgR09PR0xFX1BST1RPQlVGX1dJUkVfRk9STUFUX0hfXwotCi0jaW5jbHVk
ZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4KLSNp
bmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3Nh
Z2UuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZS5oPgotCi0v
LyBEbyBVVEYtOCB2YWxpZGF0aW9uIG9uIHN0cmluZyB0eXBlIGluIERlYnVnIGJ1aWxkIG9ubHkK
LSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9VVEY4X1ZBTElEQVRJT05f
RU5BQkxFRAotI2VuZGlmCi0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVm
IHsKLSAgbmFtZXNwYWNlIGlvIHsKLSAgICBjbGFzcyBDb2RlZElucHV0U3RyZWFtOyAgICAgIC8v
IGNvZGVkX3N0cmVhbS5oCi0gICAgY2xhc3MgQ29kZWRPdXRwdXRTdHJlYW07ICAgICAvLyBjb2Rl
ZF9zdHJlYW0uaAotICB9Ci0gIGNsYXNzIFVua25vd25GaWVsZFNldDsgICAgICAgICAvLyB1bmtu
b3duX2ZpZWxkX3NldC5oCi19Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3BhY2UgaW50
ZXJuYWwgewotCi0vLyBUaGlzIGNsYXNzIGlzIGZvciBpbnRlcm5hbCB1c2UgYnkgdGhlIHByb3Rv
Y29sIGJ1ZmZlciBsaWJyYXJ5IGFuZCBieQotLy8gcHJvdG9jb2wtY29tcGxpZXItZ2VuZXJhdGVk
IG1lc3NhZ2UgY2xhc3Nlcy4gIEl0IG11c3Qgbm90IGJlIGNhbGxlZAotLy8gZGlyZWN0bHkgYnkg
Y2xpZW50cy4KLS8vCi0vLyBUaGlzIGNsYXNzIGNvbnRhaW5zIGNvZGUgZm9yIGltcGxlbWVudGlu
ZyB0aGUgYmluYXJ5IHByb3RvY29sIGJ1ZmZlcgotLy8gd2lyZSBmb3JtYXQgdmlhIHJlZmxlY3Rp
b24uICBUaGUgV2lyZUZvcm1hdExpdGUgY2xhc3MgaW1wbGVtZW50cyB0aGUKLS8vIG5vbi1yZWZs
ZWN0aW9uIGJhc2VkIHJvdXRpbmVzLgotLy8KLS8vIFRoaXMgY2xhc3MgaXMgcmVhbGx5IGEgbmFt
ZXNwYWNlIHRoYXQgY29udGFpbnMgb25seSBzdGF0aWMgbWV0aG9kcwotY2xhc3MgTElCUFJPVE9C
VUZfRVhQT1JUIFdpcmVGb3JtYXQgewotIHB1YmxpYzoKLQotICAvLyBHaXZlbiBhIGZpZWxkIHJl
dHVybiBpdHMgV2lyZVR5cGUKLSAgc3RhdGljIGlubGluZSBXaXJlRm9ybWF0TGl0ZTo6V2lyZVR5
cGUgV2lyZVR5cGVGb3JGaWVsZCgKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQp
OwotCi0gIC8vIEdpdmVuIGEgRmllbGREZXNjcmlwdG9yOjpUeXBlIHJldHVybiBpdHMgV2lyZVR5
cGUKLSAgc3RhdGljIGlubGluZSBXaXJlRm9ybWF0TGl0ZTo6V2lyZVR5cGUgV2lyZVR5cGVGb3JG
aWVsZFR5cGUoCi0gICAgICBGaWVsZERlc2NyaXB0b3I6OlR5cGUgdHlwZSk7Ci0KLSAgLy8gQ29t
cHV0ZSB0aGUgYnl0ZSBzaXplIG9mIGEgdGFnLiAgRm9yIGdyb3VwcywgdGhpcyBpbmNsdWRlcyBi
b3RoIHRoZSBzdGFydAotICAvLyBhbmQgZW5kIHRhZ3MuCi0gIHN0YXRpYyBpbmxpbmUgaW50IFRh
Z1NpemUoaW50IGZpZWxkX251bWJlciwgRmllbGREZXNjcmlwdG9yOjpUeXBlIHR5cGUpOwotCi0g
IC8vIFRoZXNlIHByb2NlZHVyZXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBtZXRob2Rz
IG9mIE1lc3NhZ2Ugd2hpY2gKLSAgLy8gaGFuZGxlIHBhcnNpbmcgYW5kIHNlcmlhbGl6YXRpb24g
b2YgdGhlIHByb3RvY29sIGJ1ZmZlciB3aXJlIGZvcm1hdAotICAvLyB1c2luZyBvbmx5IHRoZSBS
ZWZsZWN0aW9uIGludGVyZmFjZS4gIFdoZW4geW91IGFzayB0aGUgcHJvdG9jb2wKLSAgLy8gY29t
cGlsZXIgdG8gb3B0aW1pemUgZm9yIGNvZGUgc2l6ZSByYXRoZXIgdGhhbiBzcGVlZCwgaXQgd2ls
bCBpbXBsZW1lbnQKLSAgLy8gdGhvc2UgbWV0aG9kcyBpbiB0ZXJtcyBvZiB0aGVzZSBwcm9jZWR1
cmVzLiAgT2YgY291cnNlLCB0aGVzZSBhcmUgbXVjaAotICAvLyBzbG93ZXIgdGhhbiB0aGUgc3Bl
Y2lhbGl6ZWQgaW1wbGVtZW50YXRpb25zIHdoaWNoIHRoZSBwcm90b2NvbCBjb21waWxlcgotICAv
LyBnZW5lcmF0ZXMgd2hlbiB0b2xkIHRvIG9wdGltaXplIGZvciBzcGVlZC4KLQotICAvLyBSZWFk
IGEgbWVzc2FnZSBpbiBwcm90b2NvbCBidWZmZXIgd2lyZSBmb3JtYXQuCi0gIC8vCi0gIC8vIFRo
aXMgcHJvY2VkdXJlIHJlYWRzIGVpdGhlciB0byB0aGUgZW5kIG9mIHRoZSBpbnB1dCBzdHJlYW0g
b3IgdGhyb3VnaAotICAvLyBhIFdJUkVUWVBFX0VORF9HUk9VUCB0YWcgZW5kaW5nIHRoZSBtZXNz
YWdlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCi0gIC8vIEl0IHJldHVybnMgZmFsc2UgaWYgdGhl
IGlucHV0IGlzIGludmFsaWQuCi0gIC8vCi0gIC8vIFJlcXVpcmVkIGZpZWxkcyBhcmUgTk9UIGNo
ZWNrZWQgYnkgdGhpcyBtZXRob2QuICBZb3UgbXVzdCBjYWxsCi0gIC8vIElzSW5pdGlhbGl6ZWQo
KSBvbiB0aGUgcmVzdWx0aW5nIG1lc3NhZ2UgeW91cnNlbGYuCi0gIHN0YXRpYyBib29sIFBhcnNl
QW5kTWVyZ2VQYXJ0aWFsKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSogbWVzc2FnZSk7Ci0KLSAgLy8gU2VyaWFs
aXplIGEgbWVzc2FnZSBpbiBwcm90b2NvbCBidWZmZXIgd2lyZSBmb3JtYXQuCi0gIC8vCi0gIC8v
IEFueSBlbWJlZGRlZCBtZXNzYWdlcyB3aXRoaW4gdGhlIG1lc3NhZ2UgbXVzdCBoYXZlIHRoZWly
IGNvcnJlY3Qgc2l6ZXMKLSAgLy8gY2FjaGVkLiAgSG93ZXZlciwgdGhlIHRvcC1sZXZlbCBtZXNz
YWdlIG5lZWQgbm90OyBpdHMgc2l6ZSBpcyBwYXNzZWQgYXMKLSAgLy8gYSBwYXJhbWV0ZXIgdG8g
dGhpcyBwcm9jZWR1cmUuCi0gIC8vCi0gIC8vIFRoZXNlIHJldHVybiBmYWxzZSBpZmYgdGhlIHVu
ZGVybHlpbmcgc3RyZWFtIHJldHVybnMgYSB3cml0ZSBlcnJvci4KLSAgc3RhdGljIHZvaWQgU2Vy
aWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2FnZSwKLSAg
ICAgIGludCBzaXplLCBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCk7Ci0KLSAgLy8gSW1w
bGVtZW50cyBNZXNzYWdlOjpCeXRlU2l6ZSgpIHZpYSByZWZsZWN0aW9uLiAgV0FSTklORzogIFRo
ZSByZXN1bHQKLSAgLy8gb2YgdGhpcyBtZXRob2QgaXMgKm5vdCogY2FjaGVkIGFueXdoZXJlLiAg
SG93ZXZlciwgYWxsIGVtYmVkZGVkIG1lc3NhZ2VzCi0gIC8vIHdpbGwgaGF2ZSB0aGVpciBCeXRl
U2l6ZSgpIG1ldGhvZHMgY2FsbGVkLCBzbyB0aGVpciBzaXplcyB3aWxsIGJlIGNhY2hlZC4KLSAg
Ly8gVGhlcmVmb3JlLCBjYWxsaW5nIHRoaXMgbWV0aG9kIGlzIHN1ZmZpY2llbnQgdG8gYWxsb3cg
eW91IHRvIGNhbGwKLSAgLy8gV2lyZUZvcm1hdDo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKCkg
b24gdGhlIHNhbWUgb2JqZWN0LgotICBzdGF0aWMgaW50IEJ5dGVTaXplKGNvbnN0IE1lc3NhZ2Um
IG1lc3NhZ2UpOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIEhlbHBlcnMgZm9yIGRlYWxpbmcgd2l0
aCB1bmtub3duIGZpZWxkcwotCi0gIC8vIFNraXBzIGEgZmllbGQgdmFsdWUgb2YgdGhlIGdpdmVu
IFdpcmVUeXBlLiAgVGhlIGlucHV0IHNob3VsZCBzdGFydAotICAvLyBwb3NpdGlvbmVkIGltbWVk
aWF0ZWx5IGFmdGVyIHRoZSB0YWcuICBJZiB1bmtub3duX2ZpZWxkcyBpcyBub24tTlVMTCwKLSAg
Ly8gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWVsZCB3aWxsIGJlIGFkZGVkIHRvIGl0LgotICBzdGF0
aWMgYm9vbCBTa2lwRmllbGQoaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCB1aW50MzIgdGFn
LAotICAgICAgICAgICAgICAgICAgICAgICAgVW5rbm93bkZpZWxkU2V0KiB1bmtub3duX2ZpZWxk
cyk7Ci0KLSAgLy8gUmVhZHMgYW5kIGlnbm9yZXMgYSBtZXNzYWdlIGZyb20gdGhlIGlucHV0LiAg
SWYgdW5rbm93bl9maWVsZHMgaXMgbm9uLU5VTEwsCi0gIC8vIHRoZSBjb250ZW50cyB3aWxsIGJl
IGFkZGVkIHRvIGl0LgotICBzdGF0aWMgYm9vbCBTa2lwTWVzc2FnZShpbzo6Q29kZWRJbnB1dFN0
cmVhbSogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVua25vd25GaWVsZFNldCog
dW5rbm93bl9maWVsZHMpOwotCi0gIC8vIFJlYWQgYSBwYWNrZWQgZW51bSBmaWVsZC4gSWYgdGhl
IGlzX3ZhbGlkIGZ1bmN0aW9uIGlzIG5vdCBOVUxMLCB2YWx1ZXMgZm9yCi0gIC8vIHdoaWNoIGlz
X3ZhbGlkKHZhbHVlKSByZXR1cm5zIGZhbHNlIGFyZSBhcHBlbmRlZCB0byB1bmtub3duX2ZpZWxk
c19zdHJlYW0uCi0gIHN0YXRpYyBib29sIFJlYWRQYWNrZWRFbnVtUHJlc2VydmVVbmtub3ducyhp
bzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzIgZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAoKmlzX3ZhbGlkKShpbnQpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5rbm93bkZpZWxkU2V0KiB1
bmtub3duX2ZpZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlcGVhdGVkRmllbGQ8aW50PiogdmFsdWVzKTsKLQotICAvLyBXcml0ZSB0aGUgY29udGVu
dHMgb2YgYW4gVW5rbm93bkZpZWxkU2V0IHRvIHRoZSBvdXRwdXQuCi0gIHN0YXRpYyB2b2lkIFNl
cmlhbGl6ZVVua25vd25GaWVsZHMoY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxk
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6Q29kZWRPdXRwdXRT
dHJlYW0qIG91dHB1dCk7Ci0gIC8vIFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCB3cml0aW5nIGRpcmVj
dGx5IHRvIHRoZSBwcm92aWRlZCBidWZmZXIuCi0gIC8vIFJlcXVpcmVzIHRoYXQgdGhlIGJ1ZmZl
ciBoYXZlIHN1ZmZpY2llbnQgY2FwYWNpdHkgZm9yCi0gIC8vIENvbXB1dGVVbmtub3duRmllbGRz
U2l6ZSh1bmtub3duX2ZpZWxkcykuCi0gIC8vCi0gIC8vIFJldHVybnMgYSBwb2ludGVyIHBhc3Qg
dGhlIGxhc3Qgd3JpdHRlbiBieXRlLgotICBzdGF0aWMgdWludDgqIFNlcmlhbGl6ZVVua25vd25G
aWVsZHNUb0FycmF5KAotICAgICAgY29uc3QgVW5rbm93bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxk
cywKLSAgICAgIHVpbnQ4KiB0YXJnZXQpOwotCi0gIC8vIFNhbWUgdGhpbmcgZXhjZXB0IGZvciBt
ZXNzYWdlcyB0aGF0IGhhdmUgdGhlIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0Ci0gIC8vIG9wdGlv
bi4KLSAgc3RhdGljIHZvaWQgU2VyaWFsaXplVW5rbm93bk1lc3NhZ2VTZXRJdGVtcygKLSAgICAg
IGNvbnN0IFVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMsCi0gICAgICBpbzo6Q29kZWRP
dXRwdXRTdHJlYW0qIG91dHB1dCk7Ci0gIC8vIFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCB3cml0aW5n
IGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlZCBidWZmZXIuCi0gIC8vIFJlcXVpcmVzIHRoYXQgdGhl
IGJ1ZmZlciBoYXZlIHN1ZmZpY2llbnQgY2FwYWNpdHkgZm9yCi0gIC8vIENvbXB1dGVVbmtub3du
TWVzc2FnZVNldEl0ZW1zU2l6ZSh1bmtub3duX2ZpZWxkcykuCi0gIC8vCi0gIC8vIFJldHVybnMg
YSBwb2ludGVyIHBhc3QgdGhlIGxhc3Qgd3JpdHRlbiBieXRlLgotICBzdGF0aWMgdWludDgqIFNl
cmlhbGl6ZVVua25vd25NZXNzYWdlU2V0SXRlbXNUb0FycmF5KAotICAgICAgY29uc3QgVW5rbm93
bkZpZWxkU2V0JiB1bmtub3duX2ZpZWxkcywKLSAgICAgIHVpbnQ4KiB0YXJnZXQpOwotCi0gIC8v
IENvbXB1dGUgdGhlIHNpemUgb2YgdGhlIFVua25vd25GaWVsZFNldCBvbiB0aGUgd2lyZS4KLSAg
c3RhdGljIGludCBDb21wdXRlVW5rbm93bkZpZWxkc1NpemUoY29uc3QgVW5rbm93bkZpZWxkU2V0
JiB1bmtub3duX2ZpZWxkcyk7Ci0KLSAgLy8gU2FtZSB0aGluZyBleGNlcHQgZm9yIG1lc3NhZ2Vz
IHRoYXQgaGF2ZSB0aGUgbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQKLSAgLy8gb3B0aW9uLgotICBz
dGF0aWMgaW50IENvbXB1dGVVbmtub3duTWVzc2FnZVNldEl0ZW1zU2l6ZSgKLSAgICAgIGNvbnN0
IFVua25vd25GaWVsZFNldCYgdW5rbm93bl9maWVsZHMpOwotCi0KLSAgLy8gSGVscGVyIGZ1bmN0
aW9ucyBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHRhZ3MuICAoSW5saW5lZCBiZWxvdyBhbmQg
aW4KLSAgLy8gX2lubC5oKQotICAvLwotICAvLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIE1ha2VU
YWcoZmllbGQtPm51bWJlcigpLCBmaWVsZC0+dHlwZSgpKSBpbiB0aGUgY2FzZQotICAvLyBvZiBw
YWNrZWQgcmVwZWF0ZWQgZmllbGRzLgotICBzdGF0aWMgdWludDMyIE1ha2VUYWcoY29uc3QgRmll
bGREZXNjcmlwdG9yKiBmaWVsZCk7Ci0KLSAgLy8gUGFyc2UgYSBzaW5nbGUgZmllbGQuICBUaGUg
aW5wdXQgc2hvdWxkIHN0YXJ0IG91dCBwb3NpdGlvbmVkIGltbWVkaWF0ZWx5Ci0gIC8vIGFmdGVy
IHRoZSB0YWcuCi0gIHN0YXRpYyBib29sIFBhcnNlQW5kTWVyZ2VGaWVsZCgKLSAgICAgIHVpbnQz
MiB0YWcsCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCAgICAgICAgLy8gTWF5
IGJlIE5VTEwgZm9yIHVua25vd24KLSAgICAgIE1lc3NhZ2UqIG1lc3NhZ2UsCi0gICAgICBpbzo6
Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotCi0gIC8vIFNlcmlhbGl6ZSBhIHNpbmdsZSBmaWVs
ZC4KLSAgc3RhdGljIHZvaWQgU2VyaWFsaXplRmllbGRXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCAgICAgICAgLy8gQ2Fubm90IGJlIE5VTEwKLSAg
ICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UsCi0gICAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0q
IG91dHB1dCk7Ci0KLSAgLy8gQ29tcHV0ZSBzaXplIG9mIGEgc2luZ2xlIGZpZWxkLiAgSWYgdGhl
IGZpZWxkIGlzIGEgbWVzc2FnZSB0eXBlLCB0aGlzCi0gIC8vIHdpbGwgY2FsbCBCeXRlU2l6ZSgp
IGZvciB0aGUgZW1iZWRkZWQgbWVzc2FnZSwgaW5zdXJpbmcgdGhhdCBpdCBjYWNoZXMKLSAgLy8g
aXRzIHNpemUuCi0gIHN0YXRpYyBpbnQgRmllbGRCeXRlU2l6ZSgKLSAgICAgIGNvbnN0IEZpZWxk
RGVzY3JpcHRvciogZmllbGQsICAgICAgICAvLyBDYW5ub3QgYmUgTlVMTAotICAgICAgY29uc3Qg
TWVzc2FnZSYgbWVzc2FnZSk7Ci0KLSAgLy8gUGFyc2Uvc2VyaWFsaXplIGEgTWVzc2FnZVNldDo6
SXRlbSBncm91cC4gIFVzZWQgd2l0aCBtZXNzYWdlcyB0aGF0IHVzZQotICAvLyBvcGlvbiBtZXNz
YWdlX3NldF93aXJlX2Zvcm1hdCA9IHRydWUuCi0gIHN0YXRpYyBib29sIFBhcnNlQW5kTWVyZ2VN
ZXNzYWdlU2V0SXRlbSgKLSAgICAgIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAg
IE1lc3NhZ2UqIG1lc3NhZ2UpOwotICBzdGF0aWMgdm9pZCBTZXJpYWxpemVNZXNzYWdlU2V0SXRl
bVdpdGhDYWNoZWRTaXplcygKLSAgICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQsCi0g
ICAgICBjb25zdCBNZXNzYWdlJiBtZXNzYWdlLAotICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFt
KiBvdXRwdXQpOwotICBzdGF0aWMgaW50IE1lc3NhZ2VTZXRJdGVtQnl0ZVNpemUoCi0gICAgICBj
b25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLAotICAgICAgY29uc3QgTWVzc2FnZSYgbWVzc2Fn
ZSk7Ci0KLSAgLy8gQ29tcHV0ZXMgdGhlIGJ5dGUgc2l6ZSBvZiBhIGZpZWxkLCBleGNsdWRpbmcg
dGFncy4gRm9yIHBhY2tlZCBmaWVsZHMsIGl0Ci0gIC8vIG9ubHkgaW5jbHVkZXMgdGhlIHNpemUg
b2YgdGhlIHJhdyBkYXRhLCBhbmQgbm90IHRoZSBzaXplIG9mIHRoZSB0b3RhbAotICAvLyBsZW5n
dGgsIGJ1dCBmb3Igb3RoZXIgbGVuZ3RoLWRlbGltaXRlZCB0eXBlcywgdGhlIHNpemUgb2YgdGhl
IGxlbmd0aCBpcwotICAvLyBpbmNsdWRlZC4KLSAgc3RhdGljIGludCBGaWVsZERhdGFPbmx5Qnl0
ZVNpemUoCi0gICAgICBjb25zdCBGaWVsZERlc2NyaXB0b3IqIGZpZWxkLCAgICAgICAgLy8gQ2Fu
bm90IGJlIE5VTEwKLSAgICAgIGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UpOwotCi0gIGVudW0gT3Bl
cmF0aW9uIHsKLSAgICBQQVJTRSA9IDAsCi0gICAgU0VSSUFMSVpFID0gMSwKLSAgfTsKLQotICAv
LyBWZXJpZmllcyB0aGF0IGEgc3RyaW5nIGZpZWxkIGlzIHZhbGlkIFVURjgsIGxvZ2dpbmcgYW4g
ZXJyb3IgaWYgbm90LgotICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZCBieSBu
ZXdseSBnZW5lcmF0ZWQgcHJvdG9idWYgY29kZQotICAvLyBidXQgcmVtYWlucyBwcmVzZW50IHRv
IHN1cHBvcnQgZXhpc3RpbmcgY29kZS4KLSAgc3RhdGljIHZvaWQgVmVyaWZ5VVRGOFN0cmluZyhj
b25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSwgT3BlcmF0aW9uIG9wKTsKLSAgLy8gVGhlIE5hbWVk
RmllbGQgdmFyaWFudCB0YWtlcyBhIGZpZWxkIG5hbWUgaW4gb3JkZXIgdG8gcHJvZHVjZSBhbgot
ICAvLyBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGlmIHZlcmlmaWNhdGlvbiBmYWlscy4KLSAg
c3RhdGljIHZvaWQgVmVyaWZ5VVRGOFN0cmluZ05hbWVkRmllbGQoY29uc3QgY2hhciogZGF0YSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbiBvcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmllbGRfbmFt
ZSk7Ci0KLSBwcml2YXRlOgotICAvLyBTa2lwIGEgTWVzc2FnZVNldCBmaWVsZC4KLSAgc3RhdGlj
IGJvb2wgU2tpcE1lc3NhZ2VTZXRGaWVsZChpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyIGZpZWxkX251bWJlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmtub3duRmllbGRTZXQqIHVua25vd25f
ZmllbGRzKTsKLQotICAvLyBQYXJzZSBhIE1lc3NhZ2VTZXQgZmllbGQuCi0gIHN0YXRpYyBib29s
IFBhcnNlQW5kTWVyZ2VNZXNzYWdlU2V0RmllbGQodWludDMyIGZpZWxkX251bWJlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWVsZERlc2NyaXB0
b3IqIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1l
c3NhZ2UqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLQotICBHT09HTEVfRElTQUxMT1dfRVZJ
TF9DT05TVFJVQ1RPUlMoV2lyZUZvcm1hdCk7Ci19OwotCi0vLyBTdWJjbGFzcyBvZiBGaWVsZFNr
aXBwZXIgd2hpY2ggc2F2ZXMgc2tpcHBlZCBmaWVsZHMgdG8gYW4gVW5rbm93bkZpZWxkU2V0Lgot
Y2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFVua25vd25GaWVsZFNldEZpZWxkU2tpcHBlciA6IHB1
YmxpYyBGaWVsZFNraXBwZXIgewotIHB1YmxpYzoKLSAgVW5rbm93bkZpZWxkU2V0RmllbGRTa2lw
cGVyKFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZHMpCi0gICAgICA6IHVua25vd25fZmll
bGRzXyh1bmtub3duX2ZpZWxkcykge30KLSAgdmlydHVhbCB+VW5rbm93bkZpZWxkU2V0RmllbGRT
a2lwcGVyKCkge30KLQotICAvLyBpbXBsZW1lbnRzIEZpZWxkU2tpcHBlciAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2aXJ0dWFsIGJvb2wgU2tpcEZpZWxkKGlv
OjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwgdWludDMyIHRhZyk7Ci0gIHZpcnR1YWwgYm9vbCBT
a2lwTWVzc2FnZShpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2aXJ0dWFsIHZvaWQg
U2tpcFVua25vd25FbnVtKGludCBmaWVsZF9udW1iZXIsIGludCB2YWx1ZSk7Ci0KLSBwcm90ZWN0
ZWQ6Ci0gIFVua25vd25GaWVsZFNldCogdW5rbm93bl9maWVsZHNfOwotfTsKLQotLy8gaW5saW5l
IG1ldGhvZHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotCi1pbmxpbmUgV2lyZUZvcm1hdExpdGU6OldpcmVUeXBlIFdpcmVGb3JtYXQ6OldpcmVU
eXBlRm9yRmllbGQoCi0gICAgY29uc3QgRmllbGREZXNjcmlwdG9yKiBmaWVsZCkgewotICBpZiAo
ZmllbGQtPmlzX3BhY2tlZCgpKSB7Ci0gICAgcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQ
RV9MRU5HVEhfREVMSU1JVEVEOwotICB9IGVsc2UgewotICAgIHJldHVybiBXaXJlVHlwZUZvckZp
ZWxkVHlwZShmaWVsZC0+dHlwZSgpKTsKLSAgfQotfQotCi1pbmxpbmUgV2lyZUZvcm1hdExpdGU6
OldpcmVUeXBlIFdpcmVGb3JtYXQ6OldpcmVUeXBlRm9yRmllbGRUeXBlKAotICAgIEZpZWxkRGVz
Y3JpcHRvcjo6VHlwZSB0eXBlKSB7Ci0gIC8vIFNvbWUgY29tcGlsZXJzIGRvbid0IGxpa2UgZW51
bSAtPiBlbnVtIGNhc3RzLCBzbyB3ZSBpbXBsaWNpdF9jYXN0IHRvCi0gIC8vIGludCBmaXJzdC4K
LSAgcmV0dXJuIFdpcmVGb3JtYXRMaXRlOjpXaXJlVHlwZUZvckZpZWxkVHlwZSgKLSAgICAgIHN0
YXRpY19jYXN0PFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGU+KAotICAgICAgICBpbXBsaWNpdF9j
YXN0PGludD4odHlwZSkpKTsKLX0KLQotaW5saW5lIHVpbnQzMiBXaXJlRm9ybWF0OjpNYWtlVGFn
KGNvbnN0IEZpZWxkRGVzY3JpcHRvciogZmllbGQpIHsKLSAgcmV0dXJuIFdpcmVGb3JtYXRMaXRl
OjpNYWtlVGFnKGZpZWxkLT5udW1iZXIoKSwgV2lyZVR5cGVGb3JGaWVsZChmaWVsZCkpOwotfQot
Ci1pbmxpbmUgaW50IFdpcmVGb3JtYXQ6OlRhZ1NpemUoaW50IGZpZWxkX251bWJlciwgRmllbGRE
ZXNjcmlwdG9yOjpUeXBlIHR5cGUpIHsKLSAgLy8gU29tZSBjb21waWxlcnMgZG9uJ3QgbGlrZSBl
bnVtIC0+IGVudW0gY2FzdHMsIHNvIHdlIGltcGxpY2l0X2Nhc3QgdG8KLSAgLy8gaW50IGZpcnN0
LgotICByZXR1cm4gV2lyZUZvcm1hdExpdGU6OlRhZ1NpemUoZmllbGRfbnVtYmVyLAotICAgICAg
c3RhdGljX2Nhc3Q8V2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZT4oCi0gICAgICAgIGltcGxpY2l0
X2Nhc3Q8aW50Pih0eXBlKSkpOwotfQotCi1pbmxpbmUgdm9pZCBXaXJlRm9ybWF0OjpWZXJpZnlV
VEY4U3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplLAotICAgIFdpcmVGb3JtYXQ6Ok9w
ZXJhdGlvbiBvcCkgewotI2lmZGVmIEdPT0dMRV9QUk9UT0JVRl9VVEY4X1ZBTElEQVRJT05fRU5B
QkxFRAotICBXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIGRhdGEsIHNp
emUsIHN0YXRpY19jYXN0PFdpcmVGb3JtYXRMaXRlOjpPcGVyYXRpb24+KG9wKSwgTlVMTCk7Ci0j
ZWxzZQotICAvLyBBdm9pZCB0aGUgY29tcGlsZXIgd2FybmluZyBhYm91dCB1bnN1ZWQgdmFyaWFi
bGVzLgotICAodm9pZClkYXRhOyAodm9pZClzaXplOyAodm9pZClvcDsKLSNlbmRpZgotfQotCi1p
bmxpbmUgdm9pZCBXaXJlRm9ybWF0OjpWZXJpZnlVVEY4U3RyaW5nTmFtZWRGaWVsZCgKLSAgICBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSwgV2lyZUZvcm1hdDo6T3BlcmF0aW9uIG9wLAotICAg
IGNvbnN0IGNoYXIqIGZpZWxkX25hbWUpIHsKLSNpZmRlZiBHT09HTEVfUFJPVE9CVUZfVVRGOF9W
QUxJREFUSU9OX0VOQUJMRUQKLSAgV2lyZUZvcm1hdExpdGU6OlZlcmlmeVV0ZjhTdHJpbmcoCi0g
ICAgICBkYXRhLCBzaXplLCBzdGF0aWNfY2FzdDxXaXJlRm9ybWF0TGl0ZTo6T3BlcmF0aW9uPihv
cCksIGZpZWxkX25hbWUpOwotI2VuZGlmCi19Ci0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFs
Ci19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLQotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQotI2Vu
ZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfV0lSRV9GT1JNQVRfSF9fCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9n
b29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93
aXJlX2Zvcm1hdF9saXRlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjUxNzA3
NDY5NmU5OTU4YTE1ZTk0NDNlNTg1YTYyNTYyN2FjYWI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9s
aXRlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZl
cnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDgg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24g
VmFyZGEpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkK
LS8vICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUg
PGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oPgotCi0jaW5jbHVkZSA8c3Rh
Y2s+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxnb29n
bGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9z
dHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncHJp
bnRmLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbV9pbmwuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oPgotI2luY2x1
ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGxfbGl0ZS5oPgotCi0K
LW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNwYWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRl
cm5hbCB7Ci0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0v
LyBPbGQgdmVyc2lvbiBvZiBNU1ZDIGRvZXNuJ3QgbGlrZSBkZWZpbml0aW9ucyBvZiBpbmxpbmUg
Y29uc3RhbnRzLCBHQ0MKLS8vIHJlcXVpcmVzIHRoZW0uCi1jb25zdCBpbnQgV2lyZUZvcm1hdExp
dGU6OmtNZXNzYWdlU2V0SXRlbVN0YXJ0VGFnOwotY29uc3QgaW50IFdpcmVGb3JtYXRMaXRlOjpr
TWVzc2FnZVNldEl0ZW1FbmRUYWc7Ci1jb25zdCBpbnQgV2lyZUZvcm1hdExpdGU6OmtNZXNzYWdl
U2V0VHlwZUlkVGFnOwotY29uc3QgaW50IFdpcmVGb3JtYXRMaXRlOjprTWVzc2FnZVNldE1lc3Nh
Z2VUYWc7Ci0KLSNlbmRpZgotCi0vLyBJQk0geGxDIHJlcXVpcmVzIHByZWZpeGluZyBjb25zdGFu
dHMgd2l0aCBXaXJlRm9ybWF0TGl0ZTo6Ci1jb25zdCBpbnQgV2lyZUZvcm1hdExpdGU6OmtNZXNz
YWdlU2V0SXRlbVRhZ3NTaXplID0KLSAgaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpTdGF0aWNWYXJp
bnRTaXplMzI8Ci0gICAgICBXaXJlRm9ybWF0TGl0ZTo6a01lc3NhZ2VTZXRJdGVtU3RhcnRUYWc+
Ojp2YWx1ZSArCi0gIGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6U3RhdGljVmFyaW50U2l6ZTMyPAot
ICAgICAgV2lyZUZvcm1hdExpdGU6OmtNZXNzYWdlU2V0SXRlbUVuZFRhZz46OnZhbHVlICsKLSAg
aW86OkNvZGVkT3V0cHV0U3RyZWFtOjpTdGF0aWNWYXJpbnRTaXplMzI8Ci0gICAgICBXaXJlRm9y
bWF0TGl0ZTo6a01lc3NhZ2VTZXRUeXBlSWRUYWc+Ojp2YWx1ZSArCi0gIGlvOjpDb2RlZE91dHB1
dFN0cmVhbTo6U3RhdGljVmFyaW50U2l6ZTMyPAotICAgICAgV2lyZUZvcm1hdExpdGU6OmtNZXNz
YWdlU2V0TWVzc2FnZVRhZz46OnZhbHVlOwotCi1jb25zdCBXaXJlRm9ybWF0TGl0ZTo6Q3BwVHlw
ZQotV2lyZUZvcm1hdExpdGU6OmtGaWVsZFR5cGVUb0NwcFR5cGVNYXBbTUFYX0ZJRUxEX1RZUEUg
KyAxXSA9IHsKLSAgc3RhdGljX2Nhc3Q8Q3BwVHlwZT4oMCksICAvLyAwIGlzIHJlc2VydmVkIGZv
ciBlcnJvcnMKLQotICBDUFBUWVBFX0RPVUJMRSwgICAvLyBUWVBFX0RPVUJMRQotICBDUFBUWVBF
X0ZMT0FULCAgICAvLyBUWVBFX0ZMT0FUCi0gIENQUFRZUEVfSU5UNjQsICAgIC8vIFRZUEVfSU5U
NjQKLSAgQ1BQVFlQRV9VSU5UNjQsICAgLy8gVFlQRV9VSU5UNjQKLSAgQ1BQVFlQRV9JTlQzMiwg
ICAgLy8gVFlQRV9JTlQzMgotICBDUFBUWVBFX1VJTlQ2NCwgICAvLyBUWVBFX0ZJWEVENjQKLSAg
Q1BQVFlQRV9VSU5UMzIsICAgLy8gVFlQRV9GSVhFRDMyCi0gIENQUFRZUEVfQk9PTCwgICAgIC8v
IFRZUEVfQk9PTAotICBDUFBUWVBFX1NUUklORywgICAvLyBUWVBFX1NUUklORwotICBDUFBUWVBF
X01FU1NBR0UsICAvLyBUWVBFX0dST1VQCi0gIENQUFRZUEVfTUVTU0FHRSwgIC8vIFRZUEVfTUVT
U0FHRQotICBDUFBUWVBFX1NUUklORywgICAvLyBUWVBFX0JZVEVTCi0gIENQUFRZUEVfVUlOVDMy
LCAgIC8vIFRZUEVfVUlOVDMyCi0gIENQUFRZUEVfRU5VTSwgICAgIC8vIFRZUEVfRU5VTQotICBD
UFBUWVBFX0lOVDMyLCAgICAvLyBUWVBFX1NGSVhFRDMyCi0gIENQUFRZUEVfSU5UNjQsICAgIC8v
IFRZUEVfU0ZJWEVENjQKLSAgQ1BQVFlQRV9JTlQzMiwgICAgLy8gVFlQRV9TSU5UMzIKLSAgQ1BQ
VFlQRV9JTlQ2NCwgICAgLy8gVFlQRV9TSU5UNjQKLX07Ci0KLWNvbnN0IFdpcmVGb3JtYXRMaXRl
OjpXaXJlVHlwZQotV2lyZUZvcm1hdExpdGU6OmtXaXJlVHlwZUZvckZpZWxkVHlwZVtNQVhfRklF
TERfVFlQRSArIDFdID0gewotICBzdGF0aWNfY2FzdDxXaXJlRm9ybWF0TGl0ZTo6V2lyZVR5cGU+
KC0xKSwgIC8vIGludmFsaWQKLSAgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0ZJWEVENjQsICAg
ICAgICAgICAvLyBUWVBFX0RPVUJMRQotICBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRklYRUQz
MiwgICAgICAgICAgIC8vIFRZUEVfRkxPQVQKLSAgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX1ZB
UklOVCwgICAgICAgICAgICAvLyBUWVBFX0lOVDY0Ci0gIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQ
RV9WQVJJTlQsICAgICAgICAgICAgLy8gVFlQRV9VSU5UNjQKLSAgV2lyZUZvcm1hdExpdGU6OldJ
UkVUWVBFX1ZBUklOVCwgICAgICAgICAgICAvLyBUWVBFX0lOVDMyCi0gIFdpcmVGb3JtYXRMaXRl
OjpXSVJFVFlQRV9GSVhFRDY0LCAgICAgICAgICAgLy8gVFlQRV9GSVhFRDY0Ci0gIFdpcmVGb3Jt
YXRMaXRlOjpXSVJFVFlQRV9GSVhFRDMyLCAgICAgICAgICAgLy8gVFlQRV9GSVhFRDMyCi0gIFdp
cmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9WQVJJTlQsICAgICAgICAgICAgLy8gVFlQRV9CT09MCi0g
IFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELCAgLy8gVFlQRV9TVFJJ
TkcKLSAgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX1NUQVJUX0dST1VQLCAgICAgICAvLyBUWVBF
X0dST1VQCi0gIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELCAgLy8g
VFlQRV9NRVNTQUdFCi0gIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVE
LCAgLy8gVFlQRV9CWVRFUwotICBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfVkFSSU5ULCAgICAg
ICAgICAgIC8vIFRZUEVfVUlOVDMyCi0gIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9WQVJJTlQs
ICAgICAgICAgICAgLy8gVFlQRV9FTlVNCi0gIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9GSVhF
RDMyLCAgICAgICAgICAgLy8gVFlQRV9TRklYRUQzMgotICBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZ
UEVfRklYRUQ2NCwgICAgICAgICAgIC8vIFRZUEVfU0ZJWEVENjQKLSAgV2lyZUZvcm1hdExpdGU6
OldJUkVUWVBFX1ZBUklOVCwgICAgICAgICAgICAvLyBUWVBFX1NJTlQzMgotICBXaXJlRm9ybWF0
TGl0ZTo6V0lSRVRZUEVfVkFSSU5ULCAgICAgICAgICAgIC8vIFRZUEVfU0lOVDY0Ci19OwotCi1i
b29sIFdpcmVGb3JtYXRMaXRlOjpTa2lwRmllbGQoCi0gICAgaW86OkNvZGVkSW5wdXRTdHJlYW0q
IGlucHV0LCB1aW50MzIgdGFnKSB7Ci0gIHN3aXRjaCAoV2lyZUZvcm1hdExpdGU6OkdldFRhZ1dp
cmVUeXBlKHRhZykpIHsKLSAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9WQVJJTlQ6
IHsKLSAgICAgIHVpbnQ2NCB2YWx1ZTsKLSAgICAgIGlmICghaW5wdXQtPlJlYWRWYXJpbnQ2NCgm
dmFsdWUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2Fz
ZSBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRklYRUQ2NDogewotICAgICAgdWludDY0IHZhbHVl
OwotICAgICAgaWYgKCFpbnB1dC0+UmVhZExpdHRsZUVuZGlhbjY0KCZ2YWx1ZSkpIHJldHVybiBm
YWxzZTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIFdpcmVGb3JtYXRMaXRl
OjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVEOiB7Ci0gICAgICB1aW50MzIgbGVuZ3RoOwotICAg
ICAgaWYgKCFpbnB1dC0+UmVhZFZhcmludDMyKCZsZW5ndGgpKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICBpZiAoIWlucHV0LT5Ta2lwKGxlbmd0aCkpIHJldHVybiBmYWxzZTsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICBjYXNlIFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9TVEFSVF9HUk9V
UDogewotICAgICAgaWYgKCFpbnB1dC0+SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSkgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYgKCFTa2lwTWVzc2FnZShpbnB1dCkpIHJldHVybiBmYWxzZTsKLSAg
ICAgIGlucHV0LT5EZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAgLy8gQ2hlY2sgdGhh
dCB0aGUgZW5kaW5nIHRhZyBtYXRjaGVkIHRoZSBzdGFydGluZyB0YWcuCi0gICAgICBpZiAoIWlu
cHV0LT5MYXN0VGFnV2FzKFdpcmVGb3JtYXRMaXRlOjpNYWtlVGFnKAotICAgICAgICAgIFdpcmVG
b3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpLAotICAgICAgICAgIFdpcmVGb3JtYXRM
aXRlOjpXSVJFVFlQRV9FTkRfR1JPVVApKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6
V0lSRVRZUEVfRU5EX0dST1VQOiB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNh
c2UgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0ZJWEVEMzI6IHsKLSAgICAgIHVpbnQzMiB2YWx1
ZTsKLSAgICAgIGlmICghaW5wdXQtPlJlYWRMaXR0bGVFbmRpYW4zMigmdmFsdWUpKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZGVmYXVsdDogewotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQotCi1ib29sIFdpcmVGb3JtYXRMaXRlOjpTa2lw
RmllbGQoCi0gICAgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCB1aW50MzIgdGFnLCBpbzo6
Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBzd2l0Y2ggKFdpcmVGb3JtYXRMaXRlOjpH
ZXRUYWdXaXJlVHlwZSh0YWcpKSB7Ci0gICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVf
VkFSSU5UOiB7Ci0gICAgICB1aW50NjQgdmFsdWU7Ci0gICAgICBpZiAoIWlucHV0LT5SZWFkVmFy
aW50NjQoJnZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICAgICAgb3V0cHV0LT5Xcml0ZVZhcmludDMy
KHRhZyk7Ci0gICAgICBvdXRwdXQtPldyaXRlVmFyaW50NjQodmFsdWUpOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0ZJWEVENjQ6
IHsKLSAgICAgIHVpbnQ2NCB2YWx1ZTsKLSAgICAgIGlmICghaW5wdXQtPlJlYWRMaXR0bGVFbmRp
YW42NCgmdmFsdWUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBvdXRwdXQtPldyaXRlVmFyaW50MzIo
dGFnKTsKLSAgICAgIG91dHB1dC0+V3JpdGVMaXR0bGVFbmRpYW42NCh2YWx1ZSk7Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfTEVO
R1RIX0RFTElNSVRFRDogewotICAgICAgdWludDMyIGxlbmd0aDsKLSAgICAgIGlmICghaW5wdXQt
PlJlYWRWYXJpbnQzMigmbGVuZ3RoKSkgcmV0dXJuIGZhbHNlOwotICAgICAgb3V0cHV0LT5Xcml0
ZVZhcmludDMyKHRhZyk7Ci0gICAgICBvdXRwdXQtPldyaXRlVmFyaW50MzIobGVuZ3RoKTsKLSAg
ICAgIC8vIFRPRE8obWtpbGF2dXopOiBQcm92aWRlIEFQSSB0byBwcmV2ZW50IGV4dHJhIHN0cmlu
ZyBjb3B5aW5nLgotICAgICAgc3RyaW5nIHRlbXA7Ci0gICAgICBpZiAoIWlucHV0LT5SZWFkU3Ry
aW5nKCZ0ZW1wLCBsZW5ndGgpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBvdXRwdXQtPldyaXRlU3Ry
aW5nKHRlbXApOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgV2lyZUZvcm1h
dExpdGU6OldJUkVUWVBFX1NUQVJUX0dST1VQOiB7Ci0gICAgICBvdXRwdXQtPldyaXRlVmFyaW50
MzIodGFnKTsKLSAgICAgIGlmICghaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpIHJl
dHVybiBmYWxzZTsKLSAgICAgIGlmICghU2tpcE1lc3NhZ2UoaW5wdXQsIG91dHB1dCkpIHJldHVy
biBmYWxzZTsKLSAgICAgIGlucHV0LT5EZWNyZW1lbnRSZWN1cnNpb25EZXB0aCgpOwotICAgICAg
Ly8gQ2hlY2sgdGhhdCB0aGUgZW5kaW5nIHRhZyBtYXRjaGVkIHRoZSBzdGFydGluZyB0YWcuCi0g
ICAgICBpZiAoIWlucHV0LT5MYXN0VGFnV2FzKFdpcmVGb3JtYXRMaXRlOjpNYWtlVGFnKAotICAg
ICAgICAgIFdpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpLAotICAgICAgICAg
IFdpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9FTkRfR1JPVVApKSkgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBXaXJl
Rm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQOiB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGNhc2UgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0ZJWEVEMzI6IHsKLSAgICAg
IHVpbnQzMiB2YWx1ZTsKLSAgICAgIGlmICghaW5wdXQtPlJlYWRMaXR0bGVFbmRpYW4zMigmdmFs
dWUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBvdXRwdXQtPldyaXRlVmFyaW50MzIodGFnKTsKLSAg
ICAgIG91dHB1dC0+V3JpdGVMaXR0bGVFbmRpYW4zMih2YWx1ZSk7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgZGVmYXVsdDogewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
fQotfQotCi1ib29sIFdpcmVGb3JtYXRMaXRlOjpTa2lwTWVzc2FnZShpbzo6Q29kZWRJbnB1dFN0
cmVhbSogaW5wdXQpIHsKLSAgd2hpbGUgKHRydWUpIHsKLSAgICB1aW50MzIgdGFnID0gaW5wdXQt
PlJlYWRUYWcoKTsKLSAgICBpZiAodGFnID09IDApIHsKLSAgICAgIC8vIEVuZCBvZiBpbnB1dC4g
IFRoaXMgaXMgYSB2YWxpZCBwbGFjZSB0byBlbmQsIHNvIHJldHVybiB0cnVlLgotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgV2lyZUZvcm1hdExpdGU6OldpcmVUeXBlIHdpcmVfdHlw
ZSA9IFdpcmVGb3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpOwotCi0gICAgaWYgKHdpcmVf
dHlwZSA9PSBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7Ci0gICAgICAvLyBN
dXN0IGJlIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2UuCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoIVNraXBGaWVsZChpbnB1dCwgdGFnKSkgcmV0dXJuIGZhbHNlOwotICB9Ci19
Ci0KLWJvb2wgV2lyZUZvcm1hdExpdGU6OlNraXBNZXNzYWdlKGlvOjpDb2RlZElucHV0U3RyZWFt
KiBpbnB1dCwKLSAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICB3aGlsZSAo
dHJ1ZSkgewotICAgIHVpbnQzMiB0YWcgPSBpbnB1dC0+UmVhZFRhZygpOwotICAgIGlmICh0YWcg
PT0gMCkgewotICAgICAgLy8gRW5kIG9mIGlucHV0LiAgVGhpcyBpcyBhIHZhbGlkIHBsYWNlIHRv
IGVuZCwgc28gcmV0dXJuIHRydWUuCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBX
aXJlRm9ybWF0TGl0ZTo6V2lyZVR5cGUgd2lyZV90eXBlID0gV2lyZUZvcm1hdExpdGU6OkdldFRh
Z1dpcmVUeXBlKHRhZyk7Ci0KLSAgICBpZiAod2lyZV90eXBlID09IFdpcmVGb3JtYXRMaXRlOjpX
SVJFVFlQRV9FTkRfR1JPVVApIHsKLSAgICAgIG91dHB1dC0+V3JpdGVWYXJpbnQzMih0YWcpOwot
ICAgICAgLy8gTXVzdCBiZSB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLgotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKCFTa2lwRmllbGQoaW5wdXQsIHRhZywgb3V0cHV0KSkgcmV0
dXJuIGZhbHNlOwotICB9Ci19Ci0KLWJvb2wgRmllbGRTa2lwcGVyOjpTa2lwRmllbGQoCi0gICAg
aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCB1aW50MzIgdGFnKSB7Ci0gIHJldHVybiBXaXJl
Rm9ybWF0TGl0ZTo6U2tpcEZpZWxkKGlucHV0LCB0YWcpOwotfQotCi1ib29sIEZpZWxkU2tpcHBl
cjo6U2tpcE1lc3NhZ2UoaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0gIHJldHVybiBX
aXJlRm9ybWF0TGl0ZTo6U2tpcE1lc3NhZ2UoaW5wdXQpOwotfQotCi12b2lkIEZpZWxkU2tpcHBl
cjo6U2tpcFVua25vd25FbnVtKAotICAgIGludCAvKiBmaWVsZF9udW1iZXIgKi8sIGludCAvKiB2
YWx1ZSAqLykgewotICAvLyBOb3RoaW5nLgotfQotCi1ib29sIENvZGVkT3V0cHV0U3RyZWFtRmll
bGRTa2lwcGVyOjpTa2lwRmllbGQoCi0gICAgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCB1
aW50MzIgdGFnKSB7Ci0gIHJldHVybiBXaXJlRm9ybWF0TGl0ZTo6U2tpcEZpZWxkKGlucHV0LCB0
YWcsIHVua25vd25fZmllbGRzXyk7Ci19Ci0KLWJvb2wgQ29kZWRPdXRwdXRTdHJlYW1GaWVsZFNr
aXBwZXI6OlNraXBNZXNzYWdlKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotICByZXR1
cm4gV2lyZUZvcm1hdExpdGU6OlNraXBNZXNzYWdlKGlucHV0LCB1bmtub3duX2ZpZWxkc18pOwot
fQotCi12b2lkIENvZGVkT3V0cHV0U3RyZWFtRmllbGRTa2lwcGVyOjpTa2lwVW5rbm93bkVudW0o
Ci0gICAgaW50IGZpZWxkX251bWJlciwgaW50IHZhbHVlKSB7Ci0gIHVua25vd25fZmllbGRzXy0+
V3JpdGVWYXJpbnQzMihmaWVsZF9udW1iZXIpOwotICB1bmtub3duX2ZpZWxkc18tPldyaXRlVmFy
aW50NjQodmFsdWUpOwotfQotCi1ib29sIFdpcmVGb3JtYXRMaXRlOjpSZWFkUGFja2VkRW51bU5v
SW5saW5lKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAoKmlzX3ZhbGlkKShpbnQpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBlYXRlZEZpZWxkPGludD4qIHZh
bHVlcykgewotICB1aW50MzIgbGVuZ3RoOwotICBpZiAoIWlucHV0LT5SZWFkVmFyaW50MzIoJmxl
bmd0aCkpIHJldHVybiBmYWxzZTsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW06OkxpbWl0IGxpbWl0
ID0gaW5wdXQtPlB1c2hMaW1pdChsZW5ndGgpOwotICB3aGlsZSAoaW5wdXQtPkJ5dGVzVW50aWxM
aW1pdCgpID4gMCkgewotICAgIGludCB2YWx1ZTsKLSAgICBpZiAoIWdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTwKLSAgICAgICAgaW50LCBX
aXJlRm9ybWF0TGl0ZTo6VFlQRV9FTlVNPihpbnB1dCwgJnZhbHVlKSkgewotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBpZiAoaXNfdmFsaWQgPT0gTlVMTCB8fCBpc192YWxpZCh2YWx1
ZSkpIHsKLSAgICAgIHZhbHVlcy0+QWRkKHZhbHVlKTsKLSAgICB9Ci0gIH0KLSAgaW5wdXQtPlBv
cExpbWl0KGxpbWl0KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2lyZUZvcm1hdExpdGU6
OlJlYWRQYWNrZWRFbnVtUHJlc2VydmVVbmtub3ducygKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVh
bSogaW5wdXQsCi0gICAgaW50IGZpZWxkX251bWJlciwKLSAgICBib29sICgqaXNfdmFsaWQpKGlu
dCksCi0gICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiB1bmtub3duX2ZpZWxkc19zdHJlYW0sCi0g
ICAgUmVwZWF0ZWRGaWVsZDxpbnQ+KiB2YWx1ZXMpIHsKLSAgdWludDMyIGxlbmd0aDsKLSAgaWYg
KCFpbnB1dC0+UmVhZFZhcmludDMyKCZsZW5ndGgpKSByZXR1cm4gZmFsc2U7Ci0gIGlvOjpDb2Rl
ZElucHV0U3RyZWFtOjpMaW1pdCBsaW1pdCA9IGlucHV0LT5QdXNoTGltaXQobGVuZ3RoKTsKLSAg
d2hpbGUgKGlucHV0LT5CeXRlc1VudGlsTGltaXQoKSA+IDApIHsKLSAgICBpbnQgdmFsdWU7Ci0g
ICAgaWYgKCFnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQ
cmltaXRpdmU8Ci0gICAgICAgIGludCwgV2lyZUZvcm1hdExpdGU6OlRZUEVfRU5VTT4oaW5wdXQs
ICZ2YWx1ZSkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlzX3ZhbGlk
ID09IE5VTEwgfHwgaXNfdmFsaWQodmFsdWUpKSB7Ci0gICAgICB2YWx1ZXMtPkFkZCh2YWx1ZSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHVpbnQzMiB0YWcgPSBXaXJlRm9ybWF0TGl0ZTo6TWFrZVRh
ZyhmaWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX1ZBUklOVCk7Ci0gICAgICB1bmtub3duX2ZpZWxk
c19zdHJlYW0tPldyaXRlVmFyaW50MzIodGFnKTsKLSAgICAgIHVua25vd25fZmllbGRzX3N0cmVh
bS0+V3JpdGVWYXJpbnQzMih2YWx1ZSk7Ci0gICAgfQotICB9Ci0gIGlucHV0LT5Qb3BMaW1pdChs
aW1pdCk7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdpcmVGb3JtYXRMaXRlOjpXcml0ZUlu
dDMyKGludCBmaWVsZF9udW1iZXIsIGludDMyIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBXcml0ZVRhZyhm
aWVsZF9udW1iZXIsIFdJUkVUWVBFX1ZBUklOVCwgb3V0cHV0KTsKLSAgV3JpdGVJbnQzMk5vVGFn
KHZhbHVlLCBvdXRwdXQpOwotfQotdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQ2NChpbnQg
ZmllbGRfbnVtYmVyLCBpbnQ2NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgV3JpdGVUYWcoZmllbGRfbnVt
YmVyLCBXSVJFVFlQRV9WQVJJTlQsIG91dHB1dCk7Ci0gIFdyaXRlSW50NjROb1RhZyh2YWx1ZSwg
b3V0cHV0KTsKLX0KLXZvaWQgV2lyZUZvcm1hdExpdGU6OldyaXRlVUludDMyKGludCBmaWVsZF9u
dW1iZXIsIHVpbnQzMiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlv
OjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIFdyaXRlVGFnKGZpZWxkX251bWJlciwg
V0lSRVRZUEVfVkFSSU5ULCBvdXRwdXQpOwotICBXcml0ZVVJbnQzMk5vVGFnKHZhbHVlLCBvdXRw
dXQpOwotfQotdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVVSW50NjQoaW50IGZpZWxkX251bWJl
ciwgdWludDY0IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNv
ZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgV3JpdGVUYWcoZmllbGRfbnVtYmVyLCBXSVJF
VFlQRV9WQVJJTlQsIG91dHB1dCk7Ci0gIFdyaXRlVUludDY0Tm9UYWcodmFsdWUsIG91dHB1dCk7
Ci19Ci12b2lkIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVNJbnQzMihpbnQgZmllbGRfbnVtYmVyLCBp
bnQzMiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91
dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIFdyaXRlVGFnKGZpZWxkX251bWJlciwgV0lSRVRZUEVf
VkFSSU5ULCBvdXRwdXQpOwotICBXcml0ZVNJbnQzMk5vVGFnKHZhbHVlLCBvdXRwdXQpOwotfQot
dm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTSW50NjQoaW50IGZpZWxkX251bWJlciwgaW50NjQg
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6Q29kZWRPdXRwdXRT
dHJlYW0qIG91dHB1dCkgewotICBXcml0ZVRhZyhmaWVsZF9udW1iZXIsIFdJUkVUWVBFX1ZBUklO
VCwgb3V0cHV0KTsKLSAgV3JpdGVTSW50NjROb1RhZyh2YWx1ZSwgb3V0cHV0KTsKLX0KLXZvaWQg
V2lyZUZvcm1hdExpdGU6OldyaXRlRml4ZWQzMihpbnQgZmllbGRfbnVtYmVyLCB1aW50MzIgdmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3Ry
ZWFtKiBvdXRwdXQpIHsKLSAgV3JpdGVUYWcoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9GSVhFRDMy
LCBvdXRwdXQpOwotICBXcml0ZUZpeGVkMzJOb1RhZyh2YWx1ZSwgb3V0cHV0KTsKLX0KLXZvaWQg
V2lyZUZvcm1hdExpdGU6OldyaXRlRml4ZWQ2NChpbnQgZmllbGRfbnVtYmVyLCB1aW50NjQgdmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3Ry
ZWFtKiBvdXRwdXQpIHsKLSAgV3JpdGVUYWcoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9GSVhFRDY0
LCBvdXRwdXQpOwotICBXcml0ZUZpeGVkNjROb1RhZyh2YWx1ZSwgb3V0cHV0KTsKLX0KLXZvaWQg
V2lyZUZvcm1hdExpdGU6OldyaXRlU0ZpeGVkMzIoaW50IGZpZWxkX251bWJlciwgaW50MzIgdmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0
cmVhbSogb3V0cHV0KSB7Ci0gIFdyaXRlVGFnKGZpZWxkX251bWJlciwgV0lSRVRZUEVfRklYRUQz
Miwgb3V0cHV0KTsKLSAgV3JpdGVTRml4ZWQzMk5vVGFnKHZhbHVlLCBvdXRwdXQpOwotfQotdm9p
ZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTRml4ZWQ2NChpbnQgZmllbGRfbnVtYmVyLCBpbnQ2NCB2
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0
U3RyZWFtKiBvdXRwdXQpIHsKLSAgV3JpdGVUYWcoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9GSVhF
RDY0LCBvdXRwdXQpOwotICBXcml0ZVNGaXhlZDY0Tm9UYWcodmFsdWUsIG91dHB1dCk7Ci19Ci12
b2lkIFdpcmVGb3JtYXRMaXRlOjpXcml0ZUZsb2F0KGludCBmaWVsZF9udW1iZXIsIGZsb2F0IHZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6Q29kZWRPdXRwdXRTdHJl
YW0qIG91dHB1dCkgewotICBXcml0ZVRhZyhmaWVsZF9udW1iZXIsIFdJUkVUWVBFX0ZJWEVEMzIs
IG91dHB1dCk7Ci0gIFdyaXRlRmxvYXROb1RhZyh2YWx1ZSwgb3V0cHV0KTsKLX0KLXZvaWQgV2ly
ZUZvcm1hdExpdGU6OldyaXRlRG91YmxlKGludCBmaWVsZF9udW1iZXIsIGRvdWJsZSB2YWx1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSog
b3V0cHV0KSB7Ci0gIFdyaXRlVGFnKGZpZWxkX251bWJlciwgV0lSRVRZUEVfRklYRUQ2NCwgb3V0
cHV0KTsKLSAgV3JpdGVEb3VibGVOb1RhZyh2YWx1ZSwgb3V0cHV0KTsKLX0KLXZvaWQgV2lyZUZv
cm1hdExpdGU6OldyaXRlQm9vbChpbnQgZmllbGRfbnVtYmVyLCBib29sIHZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7
Ci0gIFdyaXRlVGFnKGZpZWxkX251bWJlciwgV0lSRVRZUEVfVkFSSU5ULCBvdXRwdXQpOwotICBX
cml0ZUJvb2xOb1RhZyh2YWx1ZSwgb3V0cHV0KTsKLX0KLXZvaWQgV2lyZUZvcm1hdExpdGU6Oldy
aXRlRW51bShpbnQgZmllbGRfbnVtYmVyLCBpbnQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgV3JpdGVUYWco
ZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9WQVJJTlQsIG91dHB1dCk7Ci0gIFdyaXRlRW51bU5vVGFn
KHZhbHVlLCBvdXRwdXQpOwotfQotCi12b2lkIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZyhp
bnQgZmllbGRfbnVtYmVyLCBjb25zdCBzdHJpbmcmIHZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgLy8gU3Ry
aW5nIGlzIGZvciBVVEYtOCB0ZXh0IG9ubHkKLSAgV3JpdGVUYWcoZmllbGRfbnVtYmVyLCBXSVJF
VFlQRV9MRU5HVEhfREVMSU1JVEVELCBvdXRwdXQpOwotICBHT09HTEVfQ0hFQ0tfTEUodmFsdWUu
c2l6ZSgpLCBraW50MzJtYXgpOwotICBvdXRwdXQtPldyaXRlVmFyaW50MzIodmFsdWUuc2l6ZSgp
KTsKLSAgb3V0cHV0LT5Xcml0ZVN0cmluZyh2YWx1ZSk7Ci19Ci12b2lkIFdpcmVGb3JtYXRMaXRl
OjpXcml0ZVN0cmluZ01heWJlQWxpYXNlZCgKLSAgICBpbnQgZmllbGRfbnVtYmVyLCBjb25zdCBz
dHJpbmcmIHZhbHVlLAotICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIC8v
IFN0cmluZyBpcyBmb3IgVVRGLTggdGV4dCBvbmx5Ci0gIFdyaXRlVGFnKGZpZWxkX251bWJlciwg
V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCwgb3V0cHV0KTsKLSAgR09PR0xFX0NIRUNLX0xFKHZh
bHVlLnNpemUoKSwga2ludDMybWF4KTsKLSAgb3V0cHV0LT5Xcml0ZVZhcmludDMyKHZhbHVlLnNp
emUoKSk7Ci0gIG91dHB1dC0+V3JpdGVSYXdNYXliZUFsaWFzZWQodmFsdWUuZGF0YSgpLCB2YWx1
ZS5zaXplKCkpOwotfQotdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVCeXRlcyhpbnQgZmllbGRf
bnVtYmVyLCBjb25zdCBzdHJpbmcmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBXcml0ZVRhZyhmaWVsZF9u
dW1iZXIsIFdJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQsIG91dHB1dCk7Ci0gIEdPT0dMRV9DSEVD
S19MRSh2YWx1ZS5zaXplKCksIGtpbnQzMm1heCk7Ci0gIG91dHB1dC0+V3JpdGVWYXJpbnQzMih2
YWx1ZS5zaXplKCkpOwotICBvdXRwdXQtPldyaXRlU3RyaW5nKHZhbHVlKTsKLX0KLXZvaWQgV2ly
ZUZvcm1hdExpdGU6OldyaXRlQnl0ZXNNYXliZUFsaWFzZWQoCi0gICAgaW50IGZpZWxkX251bWJl
ciwgY29uc3Qgc3RyaW5nJiB2YWx1ZSwKLSAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1
dCkgewotICBXcml0ZVRhZyhmaWVsZF9udW1iZXIsIFdJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQs
IG91dHB1dCk7Ci0gIEdPT0dMRV9DSEVDS19MRSh2YWx1ZS5zaXplKCksIGtpbnQzMm1heCk7Ci0g
IG91dHB1dC0+V3JpdGVWYXJpbnQzMih2YWx1ZS5zaXplKCkpOwotICBvdXRwdXQtPldyaXRlUmF3
TWF5YmVBbGlhc2VkKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpKTsKLX0KLQotCi12b2lkIFdp
cmVGb3JtYXRMaXRlOjpXcml0ZUdyb3VwKGludCBmaWVsZF9udW1iZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IE1lc3NhZ2VMaXRlJiB2YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAg
V3JpdGVUYWcoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9TVEFSVF9HUk9VUCwgb3V0cHV0KTsKLSAg
dmFsdWUuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKG91dHB1dCk7Ci0gIFdyaXRlVGFnKGZpZWxk
X251bWJlciwgV0lSRVRZUEVfRU5EX0dST1VQLCBvdXRwdXQpOwotfQotCi12b2lkIFdpcmVGb3Jt
YXRMaXRlOjpXcml0ZU1lc3NhZ2UoaW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBNZXNzYWdlTGl0ZSYgdmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAg
V3JpdGVUYWcoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELCBvdXRwdXQp
OwotICBjb25zdCBpbnQgc2l6ZSA9IHZhbHVlLkdldENhY2hlZFNpemUoKTsKLSAgb3V0cHV0LT5X
cml0ZVZhcmludDMyKHNpemUpOwotICB2YWx1ZS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMob3V0
cHV0KTsKLX0KLQotdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVHcm91cE1heWJlVG9BcnJheShp
bnQgZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBNZXNzYWdlTGl0ZSYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIFdy
aXRlVGFnKGZpZWxkX251bWJlciwgV0lSRVRZUEVfU1RBUlRfR1JPVVAsIG91dHB1dCk7Ci0gIGNv
bnN0IGludCBzaXplID0gdmFsdWUuR2V0Q2FjaGVkU2l6ZSgpOwotICB1aW50OCogdGFyZ2V0ID0g
b3V0cHV0LT5HZXREaXJlY3RCdWZmZXJGb3JOQnl0ZXNBbmRBZHZhbmNlKHNpemUpOwotICBpZiAo
dGFyZ2V0ICE9IE5VTEwpIHsKLSAgICB1aW50OCogZW5kID0gdmFsdWUuU2VyaWFsaXplV2l0aENh
Y2hlZFNpemVzVG9BcnJheSh0YXJnZXQpOwotICAgIEdPT0dMRV9EQ0hFQ0tfRVEoZW5kIC0gdGFy
Z2V0LCBzaXplKTsKLSAgfSBlbHNlIHsKLSAgICB2YWx1ZS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6
ZXMob3V0cHV0KTsKLSAgfQotICBXcml0ZVRhZyhmaWVsZF9udW1iZXIsIFdJUkVUWVBFX0VORF9H
Uk9VUCwgb3V0cHV0KTsKLX0KLQotdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVNZXNzYWdlTWF5
YmVUb0FycmF5KGludCBmaWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTWVzc2FnZUxpdGUmIHZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSog
b3V0cHV0KSB7Ci0gIFdyaXRlVGFnKGZpZWxkX251bWJlciwgV0lSRVRZUEVfTEVOR1RIX0RFTElN
SVRFRCwgb3V0cHV0KTsKLSAgY29uc3QgaW50IHNpemUgPSB2YWx1ZS5HZXRDYWNoZWRTaXplKCk7
Ci0gIG91dHB1dC0+V3JpdGVWYXJpbnQzMihzaXplKTsKLSAgdWludDgqIHRhcmdldCA9IG91dHB1
dC0+R2V0RGlyZWN0QnVmZmVyRm9yTkJ5dGVzQW5kQWR2YW5jZShzaXplKTsKLSAgaWYgKHRhcmdl
dCAhPSBOVUxMKSB7Ci0gICAgdWludDgqIGVuZCA9IHZhbHVlLlNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplc1RvQXJyYXkodGFyZ2V0KTsKLSAgICBHT09HTEVfRENIRUNLX0VRKGVuZCAtIHRhcmdldCwg
c2l6ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgdmFsdWUuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKG91
dHB1dCk7Ci0gIH0KLX0KLQotR09PR0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FIHN0YXRpYyBi
b29sIFJlYWRCeXRlc1RvU3RyaW5nKAotICAgIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwg
c3RyaW5nKiB2YWx1ZSk7Ci1pbmxpbmUgc3RhdGljIGJvb2wgUmVhZEJ5dGVzVG9TdHJpbmcoaW86
OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cmluZyogdmFsdWUpIHsKLSAgdWludDMyIGxlbmd0aDsKLSAgcmV0dXJuIGlucHV0
LT5SZWFkVmFyaW50MzIoJmxlbmd0aCkgJiYKLSAgICAgIGlucHV0LT5JbnRlcm5hbFJlYWRTdHJp
bmdJbmxpbmUodmFsdWUsIGxlbmd0aCk7Ci19Ci0KLWJvb2wgV2lyZUZvcm1hdExpdGU6OlJlYWRC
eXRlcyhpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsIHN0cmluZyogdmFsdWUpIHsKLSAgcmV0
dXJuIFJlYWRCeXRlc1RvU3RyaW5nKGlucHV0LCB2YWx1ZSk7Ci19Ci0KLWJvb2wgV2lyZUZvcm1h
dExpdGU6OlJlYWRCeXRlcyhpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsIHN0cmluZyoqIHAp
IHsKLSAgaWYgKCpwID09ICY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSkgewotICAgICpwID0gbmV3IDo6c3RkOjpzdHJpbmcoKTsKLSAg
fQotICByZXR1cm4gUmVhZEJ5dGVzVG9TdHJpbmcoaW5wdXQsICpwKTsKLX0KLQotYm9vbCBXaXJl
Rm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZyhjb25zdCBjaGFyKiBkYXRhLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uIG9wLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWVsZF9uYW1lKSB7Ci0gIGlmICghSXNTdHJ1
Y3R1cmFsbHlWYWxpZFVURjgoZGF0YSwgc2l6ZSkpIHsKLSAgICBjb25zdCBjaGFyKiBvcGVyYXRp
b25fc3RyID0gTlVMTDsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICBjYXNlIFBBUlNFOgotICAg
ICAgICBvcGVyYXRpb25fc3RyID0gInBhcnNpbmciOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgU0VSSUFMSVpFOgotICAgICAgICBvcGVyYXRpb25fc3RyID0gInNlcmlhbGl6aW5nIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAvLyBubyBkZWZhdWx0IGNhc2U6IGhhdmUgdGhlIGNvbXBpbGVy
IHdhcm4gaWYgYSBjYXNlIGlzIG5vdCBjb3ZlcmVkLgotICAgIH0KLSAgICBzdHJpbmcgcXVvdGVk
X2ZpZWxkX25hbWUgPSAiIjsKLSAgICBpZiAoZmllbGRfbmFtZSAhPSBOVUxMKSB7Ci0gICAgICBx
dW90ZWRfZmllbGRfbmFtZSA9IFN0cmluZ1ByaW50ZigiICclcyciLCBmaWVsZF9uYW1lKTsKLSAg
ICB9Ci0gICAgLy8gbm8gc3BhY2UgYmVsb3cgdG8gYXZvaWQgZG91YmxlIHNwYWNlIHdoZW4gdGhl
IGZpZWxkIG5hbWUgaXMgbWlzc2luZy4KLSAgICBHT09HTEVfTE9HKEVSUk9SKSA8PCAiU3RyaW5n
IGZpZWxkIiA8PCBxdW90ZWRfZmllbGRfbmFtZSA8PCAiIGNvbnRhaW5zIGludmFsaWQgIgotICAg
ICAgICAgICAgICAgPDwgIlVURi04IGRhdGEgd2hlbiAiIDw8IG9wZXJhdGlvbl9zdHIgPDwgIiBh
IHByb3RvY29sICIKLSAgICAgICAgICAgICAgIDw8ICJidWZmZXIuIFVzZSB0aGUgJ2J5dGVzJyB0
eXBlIGlmIHlvdSBpbnRlbmQgdG8gc2VuZCByYXcgIgotICAgICAgICAgICAgICAgPDwgImJ5dGVz
LiAiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0gIC8vIG5hbWVz
cGFjZSBnb29nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9s
aXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3By
b3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1NWZjN2VjZGZjNTgwMDVhMTYzMzNjYWVhMmExZTcyNDBmNzNh
N2JhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dv
b2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OTYg
KzAsMCBAQAotLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2Ug
Zm9ybWF0Ci0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIEF1dGhvcjog
a2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKLS8vICAgICAgICAgYXRlbmFzaW9AZ29v
Z2xlLmNvbSAoQ2hyaXMgQXRlbmFzaW8pIChaaWdaYWcgdHJhbnNmb3JtKQotLy8gICAgICAgICB3
aW5rQGdvb2dsZS5jb20gKFdpbmsgU2F2aWxsZSkgKHJlZmFjdG9yZWQgZnJvbSB3aXJlX2Zvcm1h
dC5oKQotLy8gIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5Ci0v
LyAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCi0vLwotLy8gVGhpcyBo
ZWFkZXIgaXMgbG9naWNhbGx5IGludGVybmFsLCBidXQgaXMgbWFkZSBwdWJsaWMgYmVjYXVzZSBp
dCBpcyB1c2VkCi0vLyBmcm9tIHByb3RvY29sLWNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlLCB3aGlj
aCBtYXkgcmVzaWRlIGluIG90aGVyIGNvbXBvbmVudHMuCi0KLSNpZm5kZWYgR09PR0xFX1BST1RP
QlVGX1dJUkVfRk9STUFUX0xJVEVfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9XSVJFX0ZP
Uk1BVF9MSVRFX0hfXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWVzc2FnZV9s
aXRlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5oPiAgLy8g
Zm9yIENvZGVkT3V0cHV0U3RyZWFtOjpWYXJpbnQzMlNpemUKLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci0KLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBS
ZXBlYXRlZEZpZWxkOyAgLy8gcmVwZWF0ZWRfZmllbGQuaAotfQotCi1uYW1lc3BhY2UgcHJvdG9i
dWYgewotbmFtZXNwYWNlIGludGVybmFsIHsKLQotY2xhc3MgU3RyaW5nUGllY2VGaWVsZDsKLQot
Ly8gVGhpcyBjbGFzcyBpcyBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIg
bGlicmFyeSBhbmQgYnkKLS8vIHByb3RvY29sLWNvbXBsaWVyLWdlbmVyYXRlZCBtZXNzYWdlIGNs
YXNzZXMuICBJdCBtdXN0IG5vdCBiZSBjYWxsZWQKLS8vIGRpcmVjdGx5IGJ5IGNsaWVudHMuCi0v
LwotLy8gVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXJzIGZvciBpbXBsZW1lbnRpbmcgdGhlIGJp
bmFyeSBwcm90b2NvbCBidWZmZXIKLS8vIHdpcmUgZm9ybWF0IHdpdGhvdXQgdGhlIG5lZWQgZm9y
IHJlZmxlY3Rpb24uIFVzZSBXaXJlRm9ybWF0IHdoZW4gdXNpbmcKLS8vIHJlZmxlY3Rpb24uCi0v
LwotLy8gVGhpcyBjbGFzcyBpcyByZWFsbHkgYSBuYW1lc3BhY2UgdGhhdCBjb250YWlucyBvbmx5
IHN0YXRpYyBtZXRob2RzLgotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JUIFdpcmVGb3JtYXRMaXRl
IHsKLSBwdWJsaWM6Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gSGVscGVyIGNvbnN0YW50cyBhbmQg
ZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIGZvcm1hdC4gIFRoZXNlIGFyZQotICAvLyBtb3N0bHkg
bWVhbnQgZm9yIGludGVybmFsIGFuZCBnZW5lcmF0ZWQgY29kZSB0byB1c2UuCi0KLSAgLy8gVGhl
IHdpcmUgZm9ybWF0IGlzIGNvbXBvc2VkIG9mIGEgc2VxdWVuY2Ugb2YgdGFnL3ZhbHVlIHBhaXJz
LCBlYWNoCi0gIC8vIG9mIHdoaWNoIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiBvbmUgZmllbGQgKG9y
IG9uZSBlbGVtZW50IG9mIGEgcmVwZWF0ZWQKLSAgLy8gZmllbGQpLiAgRWFjaCB0YWcgaXMgZW5j
b2RlZCBhcyBhIHZhcmludC4gIFRoZSBsb3dlciBiaXRzIG9mIHRoZSB0YWcKLSAgLy8gaWRlbnRp
ZnkgaXRzIHdpcmUgdHlwZSwgd2hpY2ggc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEg
dG8gZm9sbG93LgotICAvLyBUaGUgcmVzdCBvZiB0aGUgYml0cyBjb250YWluIHRoZSBmaWVsZCBu
dW1iZXIuICBFYWNoIHR5cGUgb2YgZmllbGQgKGFzCi0gIC8vIGRlY2xhcmVkIGJ5IEZpZWxkRGVz
Y3JpcHRvcjo6VHlwZSwgaW4gZGVzY3JpcHRvci5oKSBtYXBzIHRvIG9uZSBvZgotICAvLyB0aGVz
ZSB3aXJlIHR5cGVzLiAgSW1tZWRpYXRlbHkgZm9sbG93aW5nIGVhY2ggdGFnIGlzIHRoZSBmaWVs
ZCdzIHZhbHVlLAotICAvLyBlbmNvZGVkIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGJ5IHRoZSB3
aXJlIHR5cGUuICBCZWNhdXNlIHRoZSB0YWcKLSAgLy8gaWRlbnRpZmllcyB0aGUgZW5jb2Rpbmcg
b2YgdGhpcyBkYXRhLCBpdCBpcyBwb3NzaWJsZSB0byBza2lwCi0gIC8vIHVucmVjb2duaXplZCBm
aWVsZHMgZm9yIGZvcndhcmRzIGNvbXBhdGliaWxpdHkuCi0KLSAgZW51bSBXaXJlVHlwZSB7Ci0g
ICAgV0lSRVRZUEVfVkFSSU5UICAgICAgICAgICA9IDAsCi0gICAgV0lSRVRZUEVfRklYRUQ2NCAg
ICAgICAgICA9IDEsCi0gICAgV0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCA9IDIsCi0gICAgV0lS
RVRZUEVfU1RBUlRfR1JPVVAgICAgICA9IDMsCi0gICAgV0lSRVRZUEVfRU5EX0dST1VQICAgICAg
ICA9IDQsCi0gICAgV0lSRVRZUEVfRklYRUQzMiAgICAgICAgICA9IDUsCi0gIH07Ci0KLSAgLy8g
TGl0ZSBhbHRlcm5hdGl2ZSB0byBGaWVsZERlc2NyaXB0b3I6OlR5cGUuICBNdXN0IGJlIGtlcHQg
aW4gc3luYy4KLSAgZW51bSBGaWVsZFR5cGUgewotICAgIFRZUEVfRE9VQkxFICAgICAgICAgPSAx
LAotICAgIFRZUEVfRkxPQVQgICAgICAgICAgPSAyLAotICAgIFRZUEVfSU5UNjQgICAgICAgICAg
PSAzLAotICAgIFRZUEVfVUlOVDY0ICAgICAgICAgPSA0LAotICAgIFRZUEVfSU5UMzIgICAgICAg
ICAgPSA1LAotICAgIFRZUEVfRklYRUQ2NCAgICAgICAgPSA2LAotICAgIFRZUEVfRklYRUQzMiAg
ICAgICAgPSA3LAotICAgIFRZUEVfQk9PTCAgICAgICAgICAgPSA4LAotICAgIFRZUEVfU1RSSU5H
ICAgICAgICAgPSA5LAotICAgIFRZUEVfR1JPVVAgICAgICAgICAgPSAxMCwKLSAgICBUWVBFX01F
U1NBR0UgICAgICAgID0gMTEsCi0gICAgVFlQRV9CWVRFUyAgICAgICAgICA9IDEyLAotICAgIFRZ
UEVfVUlOVDMyICAgICAgICAgPSAxMywKLSAgICBUWVBFX0VOVU0gICAgICAgICAgID0gMTQsCi0g
ICAgVFlQRV9TRklYRUQzMiAgICAgICA9IDE1LAotICAgIFRZUEVfU0ZJWEVENjQgICAgICAgPSAx
NiwKLSAgICBUWVBFX1NJTlQzMiAgICAgICAgID0gMTcsCi0gICAgVFlQRV9TSU5UNjQgICAgICAg
ICA9IDE4LAotICAgIE1BWF9GSUVMRF9UWVBFICAgICAgPSAxOCwKLSAgfTsKLQotICAvLyBMaXRl
IGFsdGVybmF0aXZlIHRvIEZpZWxkRGVzY3JpcHRvcjo6Q3BwVHlwZS4gIE11c3QgYmUga2VwdCBp
biBzeW5jLgotICBlbnVtIENwcFR5cGUgewotICAgIENQUFRZUEVfSU5UMzIgICAgICAgPSAxLAot
ICAgIENQUFRZUEVfSU5UNjQgICAgICAgPSAyLAotICAgIENQUFRZUEVfVUlOVDMyICAgICAgPSAz
LAotICAgIENQUFRZUEVfVUlOVDY0ICAgICAgPSA0LAotICAgIENQUFRZUEVfRE9VQkxFICAgICAg
PSA1LAotICAgIENQUFRZUEVfRkxPQVQgICAgICAgPSA2LAotICAgIENQUFRZUEVfQk9PTCAgICAg
ICAgPSA3LAotICAgIENQUFRZUEVfRU5VTSAgICAgICAgPSA4LAotICAgIENQUFRZUEVfU1RSSU5H
ICAgICAgPSA5LAotICAgIENQUFRZUEVfTUVTU0FHRSAgICAgPSAxMCwKLSAgICBNQVhfQ1BQVFlQ
RSAgICAgICAgID0gMTAsCi0gIH07Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIENw
cFR5cGUgZm9yIGEgcGFydGljdWxhciBUeXBlLgotICBzdGF0aWMgQ3BwVHlwZSBGaWVsZFR5cGVU
b0NwcFR5cGUoRmllbGRUeXBlIHR5cGUpOwotCi0gIC8vIEdpdmVuIGEgRmllbGRTZXNjcmlwdG9y
OjpUeXBlIHJldHVybiBpdHMgV2lyZVR5cGUKLSAgc3RhdGljIGlubGluZSBXaXJlRm9ybWF0TGl0
ZTo6V2lyZVR5cGUgV2lyZVR5cGVGb3JGaWVsZFR5cGUoCi0gICAgICBXaXJlRm9ybWF0TGl0ZTo6
RmllbGRUeXBlIHR5cGUpIHsKLSAgICByZXR1cm4ga1dpcmVUeXBlRm9yRmllbGRUeXBlW3R5cGVd
OwotICB9Ci0KLSAgLy8gTnVtYmVyIG9mIGJpdHMgaW4gYSB0YWcgd2hpY2ggaWRlbnRpZnkgdGhl
IHdpcmUgdHlwZS4KLSAgc3RhdGljIGNvbnN0IGludCBrVGFnVHlwZUJpdHMgPSAzOwotICAvLyBN
YXNrIGZvciB0aG9zZSBiaXRzLgotICBzdGF0aWMgY29uc3QgdWludDMyIGtUYWdUeXBlTWFzayA9
ICgxIDw8IGtUYWdUeXBlQml0cykgLSAxOwotCi0gIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGVu
Y29kaW5nIGFuZCBkZWNvZGluZyB0YWdzLiAgKElubGluZWQgYmVsb3cgYW5kIGluCi0gIC8vIF9p
bmwuaCkKLSAgLy8KLSAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBNYWtlVGFnKGZpZWxkLT5u
dW1iZXIoKSwgZmllbGQtPnR5cGUoKSkgaW4gdGhlIGNhc2UKLSAgLy8gb2YgcGFja2VkIHJlcGVh
dGVkIGZpZWxkcy4KLSAgc3RhdGljIHVpbnQzMiBNYWtlVGFnKGludCBmaWVsZF9udW1iZXIsIFdp
cmVUeXBlIHR5cGUpOwotICBzdGF0aWMgV2lyZVR5cGUgR2V0VGFnV2lyZVR5cGUodWludDMyIHRh
Zyk7Ci0gIHN0YXRpYyBpbnQgR2V0VGFnRmllbGROdW1iZXIodWludDMyIHRhZyk7Ci0KLSAgLy8g
Q29tcHV0ZSB0aGUgYnl0ZSBzaXplIG9mIGEgdGFnLiAgRm9yIGdyb3VwcywgdGhpcyBpbmNsdWRl
cyBib3RoIHRoZSBzdGFydAotICAvLyBhbmQgZW5kIHRhZ3MuCi0gIHN0YXRpYyBpbmxpbmUgaW50
IFRhZ1NpemUoaW50IGZpZWxkX251bWJlciwgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSB0eXBl
KTsKLQotICAvLyBTa2lwcyBhIGZpZWxkIHZhbHVlIHdpdGggdGhlIGdpdmVuIHRhZy4gIFRoZSBp
bnB1dCBzaG91bGQgc3RhcnQKLSAgLy8gcG9zaXRpb25lZCBpbW1lZGlhdGVseSBhZnRlciB0aGUg
dGFnLiAgU2tpcHBlZCB2YWx1ZXMgYXJlIHNpbXBseSBkaXNjYXJkZWQsCi0gIC8vIG5vdCByZWNv
cmRlZCBhbnl3aGVyZS4gIFNlZSBXaXJlRm9ybWF0OjpTa2lwRmllbGQoKSBmb3IgYSB2ZXJzaW9u
IHRoYXQKLSAgLy8gcmVjb3JkcyB0byBhbiBVbmtub3duRmllbGRTZXQuCi0gIHN0YXRpYyBib29s
IFNraXBGaWVsZChpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsIHVpbnQzMiB0YWcpOwotCi0g
IC8vIFNraXBzIGEgZmllbGQgdmFsdWUgd2l0aCB0aGUgZ2l2ZW4gdGFnLiAgVGhlIGlucHV0IHNo
b3VsZCBzdGFydAotICAvLyBwb3NpdGlvbmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0YWcuIFNr
aXBwZWQgdmFsdWVzIGFyZSByZWNvcmRlZCB0byBhCi0gIC8vIENvZGVkT3V0cHV0U3RyZWFtLgot
ICBzdGF0aWMgYm9vbCBTa2lwRmllbGQoaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCB1aW50
MzIgdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBv
dXRwdXQpOwotCi0gIC8vIFJlYWRzIGFuZCBpZ25vcmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBpbnB1
dC4gIFNraXBwZWQgdmFsdWVzIGFyZSBzaW1wbHkKLSAgLy8gZGlzY2FyZGVkLCBub3QgcmVjb3Jk
ZWQgYW55d2hlcmUuICBTZWUgV2lyZUZvcm1hdDo6U2tpcE1lc3NhZ2UoKSBmb3IgYQotICAvLyB2
ZXJzaW9uIHRoYXQgcmVjb3JkcyB0byBhbiBVbmtub3duRmllbGRTZXQuCi0gIHN0YXRpYyBib29s
IFNraXBNZXNzYWdlKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0KLSAgLy8gUmVhZHMg
YW5kIGlnbm9yZXMgYSBtZXNzYWdlIGZyb20gdGhlIGlucHV0LiAgU2tpcHBlZCB2YWx1ZXMgYXJl
IHJlY29yZGVkCi0gIC8vIHRvIGEgQ29kZWRPdXRwdXRTdHJlYW0uCi0gIHN0YXRpYyBib29sIFNr
aXBNZXNzYWdlKGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpOwotCi0vLyBUaGlzIG1hY3Jv
IGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgV2lyZUZvcm1hdExpdGU6Ok1ha2VUYWcoKSwgYnV0IHRo
ZQotLy8gcmVzdWx0IGlzIHVzYWJsZSBhcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCwgd2hpY2gg
bWFrZXMgaXQgdXNhYmxlCi0vLyBhcyBhIHN3aXRjaCBjYXNlIG9yIGEgdGVtcGxhdGUgaW5wdXQu
ICBXaXJlRm9ybWF0TGl0ZTo6TWFrZVRhZygpIGlzIG1vcmUKLS8vIHR5cGUtc2FmZSwgdGhvdWdo
LCBzbyBwcmVmZXIgaXQgaWYgcG9zc2libGUuCi0jZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9XSVJF
X0ZPUk1BVF9NQUtFX1RBRyhGSUVMRF9OVU1CRVIsIFRZUEUpICAgICAgICAgICAgICAgICAgXAot
ICBzdGF0aWNfY2FzdDx1aW50MzI+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAoKEZJRUxEX05VTUJFUikgPDwgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OmtUYWdUeXBlQml0cykgXAotICAgICAgfCAo
VFlQRSkpCi0KLSAgLy8gVGhlc2UgYXJlIHRoZSB0YWdzIGZvciB0aGUgb2xkIE1lc3NhZ2VTZXQg
Zm9ybWF0LCB3aGljaCB3YXMgZGVmaW5lZCBhczoKLSAgLy8gICBtZXNzYWdlIE1lc3NhZ2VTZXQg
ewotICAvLyAgICAgcmVwZWF0ZWQgZ3JvdXAgSXRlbSA9IDEgewotICAvLyAgICAgICByZXF1aXJl
ZCBpbnQzMiB0eXBlX2lkID0gMjsKLSAgLy8gICAgICAgcmVxdWlyZWQgc3RyaW5nIG1lc3NhZ2Ug
PSAzOwotICAvLyAgICAgfQotICAvLyAgIH0KLSAgc3RhdGljIGNvbnN0IGludCBrTWVzc2FnZVNl
dEl0ZW1OdW1iZXIgPSAxOwotICBzdGF0aWMgY29uc3QgaW50IGtNZXNzYWdlU2V0VHlwZUlkTnVt
YmVyID0gMjsKLSAgc3RhdGljIGNvbnN0IGludCBrTWVzc2FnZVNldE1lc3NhZ2VOdW1iZXIgPSAz
OwotICBzdGF0aWMgY29uc3QgaW50IGtNZXNzYWdlU2V0SXRlbVN0YXJ0VGFnID0KLSAgICBHT09H
TEVfUFJPVE9CVUZfV0lSRV9GT1JNQVRfTUFLRV9UQUcoa01lc3NhZ2VTZXRJdGVtTnVtYmVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVf
U1RBUlRfR1JPVVApOwotICBzdGF0aWMgY29uc3QgaW50IGtNZXNzYWdlU2V0SXRlbUVuZFRhZyA9
Ci0gICAgR09PR0xFX1BST1RPQlVGX1dJUkVfRk9STUFUX01BS0VfVEFHKGtNZXNzYWdlU2V0SXRl
bU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lyZUZvcm1hdExpdGU6
OldJUkVUWVBFX0VORF9HUk9VUCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga01lc3NhZ2VTZXRUeXBl
SWRUYWcgPQotICAgIEdPT0dMRV9QUk9UT0JVRl9XSVJFX0ZPUk1BVF9NQUtFX1RBRyhrTWVzc2Fn
ZVNldFR5cGVJZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lyZUZv
cm1hdExpdGU6OldJUkVUWVBFX1ZBUklOVCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga01lc3NhZ2VT
ZXRNZXNzYWdlVGFnID0KLSAgICBHT09HTEVfUFJPVE9CVUZfV0lSRV9GT1JNQVRfTUFLRV9UQUco
a01lc3NhZ2VTZXRNZXNzYWdlTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfTEVOR1RIX0RFTElNSVRFRCk7Ci0KLSAgLy8gQnl0
ZSBzaXplIG9mIGFsbCB0YWdzIG9mIGEgTWVzc2FnZVNldDo6SXRlbSBjb21iaW5lZC4KLSAgc3Rh
dGljIGNvbnN0IGludCBrTWVzc2FnZVNldEl0ZW1UYWdzU2l6ZTsKLQotICAvLyBIZWxwZXIgZnVu
Y3Rpb25zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gZmxvYXRzL2RvdWJsZXMgYW5kIElFRUUtNzU0
Ci0gIC8vIHVpbnQzMnMvdWludDY0cyBzbyB0aGF0IHRoZXkgY2FuIGJlIHdyaXR0ZW4uICAoQXNz
dW1lcyB5b3VyIHBsYXRmb3JtCi0gIC8vIHVzZXMgSUVFRS03NTQgZmxvYXRzLikKLSAgc3RhdGlj
IHVpbnQzMiBFbmNvZGVGbG9hdChmbG9hdCB2YWx1ZSk7Ci0gIHN0YXRpYyBmbG9hdCBEZWNvZGVG
bG9hdCh1aW50MzIgdmFsdWUpOwotICBzdGF0aWMgdWludDY0IEVuY29kZURvdWJsZShkb3VibGUg
dmFsdWUpOwotICBzdGF0aWMgZG91YmxlIERlY29kZURvdWJsZSh1aW50NjQgdmFsdWUpOwotCi0g
IC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hcHBpbmcgc2lnbmVkIGludGVnZXJzIHRvIHVuc2ln
bmVkIGludGVnZXJzIGluCi0gIC8vIHN1Y2ggYSB3YXkgdGhhdCBudW1iZXJzIHdpdGggc21hbGwg
bWFnbml0dWRlcyB3aWxsIGVuY29kZSB0byBzbWFsbGVyCi0gIC8vIHZhcmludHMuICBJZiB5b3Ug
c2ltcGx5IHN0YXRpY19jYXN0IGEgbmVnYXRpdmUgbnVtYmVyIHRvIGFuIHVuc2lnbmVkCi0gIC8v
IG51bWJlciBhbmQgdmFyaW50LWVuY29kZSBpdCwgaXQgd2lsbCBhbHdheXMgdGFrZSAxMCBieXRl
cywgZGVmZWF0aW5nCi0gIC8vIHRoZSBwdXJwb3NlIG9mIHZhcmludC4gIFNvLCBmb3IgdGhlICJz
aW50MzIiIGFuZCAic2ludDY0IiBmaWVsZCB0eXBlcywKLSAgLy8gd2UgWmlnWmFnLWVuY29kZSB0
aGUgdmFsdWVzLgotICBzdGF0aWMgdWludDMyIFppZ1phZ0VuY29kZTMyKGludDMyIG4pOwotICBz
dGF0aWMgaW50MzIgIFppZ1phZ0RlY29kZTMyKHVpbnQzMiBuKTsKLSAgc3RhdGljIHVpbnQ2NCBa
aWdaYWdFbmNvZGU2NChpbnQ2NCBuKTsKLSAgc3RhdGljIGludDY0ICBaaWdaYWdEZWNvZGU2NCh1
aW50NjQgbik7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gTWV0aG9kcyBmb3IgcmVhZGluZy93cml0
aW5nIGluZGl2aWR1YWwgZmllbGQuICBUaGUgaW1wbGVtZW50YXRpb25zCi0gIC8vIG9mIHRoZXNl
IG1ldGhvZHMgYXJlIGRlZmluZWQgaW4gd2lyZV9mb3JtYXRfbGl0ZV9pbmwuaDsgeW91IG11c3Qg
I2luY2x1ZGUKLSAgLy8gdGhhdCBmaWxlIHRvIHVzZSB0aGVzZS4KLQotLy8gQXZvaWQgdWdseSBs
aW5lIHdyYXBwaW5nCi0jZGVmaW5lIGlucHV0ICBpbzo6Q29kZWRJbnB1dFN0cmVhbSogIGlucHV0
X2FyZwotI2RlZmluZSBvdXRwdXQgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXRfYXJnCi0j
ZGVmaW5lIGZpZWxkX251bWJlciBpbnQgZmllbGRfbnVtYmVyX2FyZwotI2RlZmluZSBJTkwgR09P
R0xFX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FCi0KLSAgLy8gUmVhZCBmaWVsZHMsIG5vdCBpbmNs
dWRpbmcgdGFncy4gIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgeW91IGFscmVhZHkKLSAgLy8gcmVh
ZCB0aGUgdGFnIHRvIGRldGVybWluZSB3aGF0IGZpZWxkIHRvIHJlYWQuCi0KLSAgLy8gRm9yIHBy
aW1pdGl2ZSBmaWVsZHMsIHdlIGp1c3QgdXNlIGEgdGVtcGxhdGl6ZWQgcm91dGluZSBwYXJhbWV0
ZXJpemVkIGJ5Ci0gIC8vIHRoZSByZXByZXNlbnRlZCB0eXBlIGFuZCB0aGUgRmllbGRUeXBlLiBU
aGVzZSBhcmUgc3BlY2lhbGl6ZWQgd2l0aCB0aGUKLSAgLy8gYXBwcm9wcmlhdGUgZGVmaW5pdGlv
biBmb3IgZWFjaCBkZWNsYXJlZCB0eXBlLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ1R5cGUsIGVu
dW0gRmllbGRUeXBlIERlY2xhcmVkVHlwZT4gSU5MCi0gIHN0YXRpYyBib29sIFJlYWRQcmltaXRp
dmUoaW5wdXQsIENUeXBlKiB2YWx1ZSk7Ci0KLSAgLy8gUmVhZHMgcmVwZWF0ZWQgcHJpbWl0aXZl
IHZhbHVlcywgd2l0aCBvcHRpbWl6YXRpb25zIGZvciByZXBlYXRzLgotICAvLyB0YWdfc2l6ZSBh
bmQgdGFnIHNob3VsZCBib3RoIGJlIGNvbXBpbGUtdGltZSBjb25zdGFudHMgcHJvdmlkZWQgYnkg
dGhlCi0gIC8vIHByb3RvY29sIGNvbXBpbGVyLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ1R5cGUs
IGVudW0gRmllbGRUeXBlIERlY2xhcmVkVHlwZT4gSU5MCi0gIHN0YXRpYyBib29sIFJlYWRSZXBl
YXRlZFByaW1pdGl2ZShpbnQgdGFnX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzIgdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBlYXRlZEZpZWxk
PENUeXBlPiogdmFsdWUpOwotCi0gIC8vIElkZW50aWNhbCB0byBSZWFkUmVwZWF0ZWRQcmltaXRp
dmUsIGV4Y2VwdCB3aWxsIG5vdCBpbmxpbmUgdGhlCi0gIC8vIGltcGxlbWVudGF0aW9uLgotICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ1R5cGUsIGVudW0gRmllbGRUeXBlIERlY2xhcmVkVHlwZT4KLSAg
c3RhdGljIGJvb2wgUmVhZFJlcGVhdGVkUHJpbWl0aXZlTm9JbmxpbmUoaW50IHRhZ19zaXplLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzIgdGFnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwZWF0ZWRGaWVsZDxDVHlw
ZT4qIHZhbHVlKTsKLQotICAvLyBSZWFkcyBhIHByaW1pdGl2ZSB2YWx1ZSBkaXJlY3RseSBmcm9t
IHRoZSBwcm92aWRlZCBidWZmZXIuIEl0IHJldHVybnMgYQotICAvLyBwb2ludGVyIHBhc3QgdGhl
IHNlZ21lbnQgb2YgZGF0YSB0aGF0IHdhcyByZWFkLgotICAvLwotICAvLyBUaGlzIGlzIG9ubHkg
aW1wbGVtZW50ZWQgZm9yIHRoZSB0eXBlcyB3aXRoIGZpeGVkIHdpcmUgc2l6ZSwgZS5nLgotICAv
LyBmbG9hdCwgZG91YmxlLCBhbmQgdGhlIChzKWZpeGVkKiB0eXBlcy4KLSAgdGVtcGxhdGUgPHR5
cGVuYW1lIENUeXBlLCBlbnVtIEZpZWxkVHlwZSBEZWNsYXJlZFR5cGU+IElOTAotICBzdGF0aWMg
Y29uc3QgdWludDgqIFJlYWRQcmltaXRpdmVGcm9tQXJyYXkoY29uc3QgdWludDgqIGJ1ZmZlciwg
Q1R5cGUqIHZhbHVlKTsKLQotICAvLyBSZWFkcyBhIHByaW1pdGl2ZSBwYWNrZWQgZmllbGQuCi0g
IC8vCi0gIC8vIFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgcGFja2FibGUgdHlwZXMuCi0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBDVHlwZSwgZW51bSBGaWVsZFR5cGUgRGVjbGFyZWRUeXBlPiBJ
TkwKLSAgc3RhdGljIGJvb2wgUmVhZFBhY2tlZFByaW1pdGl2ZShpbnB1dCwgUmVwZWF0ZWRGaWVs
ZDxDVHlwZT4qIHZhbHVlKTsKLQotICAvLyBJZGVudGljYWwgdG8gUmVhZFBhY2tlZFByaW1pdGl2
ZSwgZXhjZXB0IHdpbGwgbm90IGlubGluZSB0aGUKLSAgLy8gaW1wbGVtZW50YXRpb24uCi0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBDVHlwZSwgZW51bSBGaWVsZFR5cGUgRGVjbGFyZWRUeXBlPgotICBz
dGF0aWMgYm9vbCBSZWFkUGFja2VkUHJpbWl0aXZlTm9JbmxpbmUoaW5wdXQsIFJlcGVhdGVkRmll
bGQ8Q1R5cGU+KiB2YWx1ZSk7Ci0KLSAgLy8gUmVhZCBhIHBhY2tlZCBlbnVtIGZpZWxkLiBJZiB0
aGUgaXNfdmFsaWQgZnVuY3Rpb24gaXMgbm90IE5VTEwsIHZhbHVlcyBmb3IKLSAgLy8gd2hpY2gg
aXNfdmFsaWQodmFsdWUpIHJldHVybnMgZmFsc2UgYXJlIHNpbGVudGx5IGRyb3BwZWQuCi0gIHN0
YXRpYyBib29sIFJlYWRQYWNrZWRFbnVtTm9JbmxpbmUoaW5wdXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCAoKmlzX3ZhbGlkKShpbnQpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGVhdGVkRmllbGQ8aW50PiogdmFsdWVzKTsKLQot
ICAvLyBSZWFkIGEgcGFja2VkIGVudW0gZmllbGQuIElmIHRoZSBpc192YWxpZCBmdW5jdGlvbiBp
cyBub3QgTlVMTCwgdmFsdWVzIGZvcgotICAvLyB3aGljaCBpc192YWxpZCh2YWx1ZSkgcmV0dXJu
cyBmYWxzZSBhcmUgYXBwZW5kZWQgdG8gdW5rbm93bl9maWVsZHNfc3RyZWFtLgotICBzdGF0aWMg
Ym9vbCBSZWFkUGFja2VkRW51bVByZXNlcnZlVW5rbm93bnMoCi0gICAgICBpbnB1dCwKLSAgICAg
IGZpZWxkX251bWJlciwKLSAgICAgIGJvb2wgKCppc192YWxpZCkoaW50KSwKLSAgICAgIGlvOjpD
b2RlZE91dHB1dFN0cmVhbSogdW5rbm93bl9maWVsZHNfc3RyZWFtLAotICAgICAgUmVwZWF0ZWRG
aWVsZDxpbnQ+KiB2YWx1ZXMpOwotCi0gIC8vIFJlYWQgYSBzdHJpbmcuICBSZWFkU3RyaW5nKC4u
Liwgc3RyaW5nKiB2YWx1ZSkgcmVxdWlyZXMgYW4gZXhpc3Rpbmcgc3RyaW5nLgotICBzdGF0aWMg
aW5saW5lIGJvb2wgUmVhZFN0cmluZyhpbnB1dCwgc3RyaW5nKiB2YWx1ZSk7Ci0gIC8vIFJlYWRT
dHJpbmcoLi4uLCBzdHJpbmcqKiBwKSBpcyBpbnRlcm5hbC1vbmx5LCBhbmQgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkCi0gIC8vIGZyb20gZ2VuZXJhdGVkIGNvZGUuIEl0IHN0YXJ0cyBieSBzZXR0aW5n
ICpwIHRvICJuZXcgc3RyaW5nIgotICAvLyBpZiAqcCA9PSAmR2V0RW1wdHlTdHJpbmdBbHJlYWR5
SW5pdGVkKCkuICBJdCB0aGVuIGludm9rZXMKLSAgLy8gUmVhZFN0cmluZyhpbnB1dCwgKnApLiAg
VGhpcyBpcyB1c2VmdWwgZm9yIHJlZHVjaW5nIGNvZGUgc2l6ZS4KLSAgc3RhdGljIGlubGluZSBi
b29sIFJlYWRTdHJpbmcoaW5wdXQsIHN0cmluZyoqIHApOwotICAvLyBBbmFsb2dvdXMgdG8gUmVh
ZFN0cmluZygpLgotICBzdGF0aWMgYm9vbCBSZWFkQnl0ZXMoaW5wdXQsIHN0cmluZyogdmFsdWUp
OwotICBzdGF0aWMgYm9vbCBSZWFkQnl0ZXMoaW5wdXQsIHN0cmluZyoqIHApOwotCi0KLSAgZW51
bSBPcGVyYXRpb24gewotICAgIFBBUlNFID0gMCwKLSAgICBTRVJJQUxJWkUgPSAxLAotICB9Owot
Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0YSBpcyB2YWxpZCBVVEYtOC4KLSAgc3RhdGlj
IGJvb2wgVmVyaWZ5VXRmOFN0cmluZyhjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb24gb3AsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmllbGRfbmFtZSk7Ci0KLSAgc3RhdGljIGlubGlu
ZSBib29sIFJlYWRHcm91cCAgKGZpZWxkX251bWJlciwgaW5wdXQsIE1lc3NhZ2VMaXRlKiB2YWx1
ZSk7Ci0gIHN0YXRpYyBpbmxpbmUgYm9vbCBSZWFkTWVzc2FnZShpbnB1dCwgTWVzc2FnZUxpdGUq
IHZhbHVlKTsKLQotICAvLyBMaWtlIGFib3ZlLCBidXQgZGUtdmlydHVhbGl6ZSB0aGUgY2FsbCB0
byBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oKS4KLSAgLy8gVGhlIHBvaW50ZXIgbXVzdCBw
b2ludCBhdCBhbiBpbnN0YW5jZSBvZiBNZXNzYWdlVHlwZSwgKm5vdCogYSBzdWJjbGFzcyAob3IK
LSAgLy8gdGhlIHN1YmNsYXNzIG11c3Qgbm90IG92ZXJyaWRlIE1lcmdlUGFydGlhbEZyb21Db2Rl
ZFN0cmVhbSgpKS4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgTWVzc2FnZVR5cGU+Ci0gIHN0YXRpYyBp
bmxpbmUgYm9vbCBSZWFkR3JvdXBOb1ZpcnR1YWwoZmllbGRfbnVtYmVyLCBpbnB1dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSogdmFsdWUpOwot
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXNzYWdlVHlwZT4KLSAgc3RhdGljIGlubGluZSBib29sIFJl
YWRNZXNzYWdlTm9WaXJ0dWFsKGlucHV0LCBNZXNzYWdlVHlwZSogdmFsdWUpOwotCi0gIC8vIFRo
ZSBzYW1lLCBidXQgZG8gbm90IG1vZGlmeSBpbnB1dCdzIHJlY3Vyc2lvbiBkZXB0aC4gIFRoaXMg
aXMgdXNlZnVsCi0gIC8vIHdoZW4gcmVhZGluZyBhIGJ1bmNoIG9mIGdyb3VwcyBvciBtZXNzYWdl
cyBpbiBhIGxvb3AsIGJlY2F1c2UgdGhlbiB0aGUKLSAgLy8gcmVjdXJzaW9uIGRlcHRoIGNhbiBi
ZSBpbmNyZW1lbnRlZCBiZWZvcmUgdGhlIGxvb3AgYW5kIGRlY3JlbWVudGVkIGFmdGVyLgotICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXNzYWdlVHlwZT4KLSAgc3RhdGljIGlubGluZSBib29sIFJlYWRH
cm91cE5vVmlydHVhbE5vUmVjdXJzaW9uRGVwdGgoZmllbGRfbnVtYmVyLCBpbnB1dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2Fn
ZVR5cGUqIHZhbHVlKTsKLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXNzYWdlVHlwZT4KLSAgc3Rh
dGljIGlubGluZSBib29sIFJlYWRNZXNzYWdlTm9WaXJ0dWFsTm9SZWN1cnNpb25EZXB0aChpbnB1
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNZXNzYWdlVHlwZSogdmFsdWUpOwotCi0gIC8vIFdyaXRlIGEgdGFnLiAgVGhlIFdyaXRl
KigpIGZ1bmN0aW9ucyB0eXBpY2FsbHkgaW5jbHVkZSB0aGUgdGFnLCBzbwotICAvLyBub3JtYWxs
eSB0aGVyZSdzIG5vIG5lZWQgdG8gY2FsbCB0aGlzIHVubGVzcyB1c2luZyB0aGUgV3JpdGUqTm9U
YWcoKQotICAvLyB2YXJpYW50cy4KLSAgSU5MIHN0YXRpYyB2b2lkIFdyaXRlVGFnKGZpZWxkX251
bWJlciwgV2lyZVR5cGUgdHlwZSwgb3V0cHV0KTsKLQotICAvLyBXcml0ZSBmaWVsZHMsIHdpdGhv
dXQgdGFncy4KLSAgSU5MIHN0YXRpYyB2b2lkIFdyaXRlSW50MzJOb1RhZyAgIChpbnQzMiB2YWx1
ZSwgb3V0cHV0KTsKLSAgSU5MIHN0YXRpYyB2b2lkIFdyaXRlSW50NjROb1RhZyAgIChpbnQ2NCB2
YWx1ZSwgb3V0cHV0KTsKLSAgSU5MIHN0YXRpYyB2b2lkIFdyaXRlVUludDMyTm9UYWcgICh1aW50
MzIgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdm9pZCBXcml0ZVVJbnQ2NE5vVGFnICAo
dWludDY0IHZhbHVlLCBvdXRwdXQpOwotICBJTkwgc3RhdGljIHZvaWQgV3JpdGVTSW50MzJOb1Rh
ZyAgKGludDMyIHZhbHVlLCBvdXRwdXQpOwotICBJTkwgc3RhdGljIHZvaWQgV3JpdGVTSW50NjRO
b1RhZyAgKGludDY0IHZhbHVlLCBvdXRwdXQpOwotICBJTkwgc3RhdGljIHZvaWQgV3JpdGVGaXhl
ZDMyTm9UYWcgKHVpbnQzMiB2YWx1ZSwgb3V0cHV0KTsKLSAgSU5MIHN0YXRpYyB2b2lkIFdyaXRl
Rml4ZWQ2NE5vVGFnICh1aW50NjQgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdm9pZCBX
cml0ZVNGaXhlZDMyTm9UYWcoaW50MzIgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdm9p
ZCBXcml0ZVNGaXhlZDY0Tm9UYWcoaW50NjQgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMg
dm9pZCBXcml0ZUZsb2F0Tm9UYWcgICAoZmxvYXQgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0
aWMgdm9pZCBXcml0ZURvdWJsZU5vVGFnICAoZG91YmxlIHZhbHVlLCBvdXRwdXQpOwotICBJTkwg
c3RhdGljIHZvaWQgV3JpdGVCb29sTm9UYWcgICAgKGJvb2wgdmFsdWUsIG91dHB1dCk7Ci0gIElO
TCBzdGF0aWMgdm9pZCBXcml0ZUVudW1Ob1RhZyAgICAoaW50IHZhbHVlLCBvdXRwdXQpOwotCi0g
IC8vIFdyaXRlIGZpZWxkcywgaW5jbHVkaW5nIHRhZ3MuCi0gIHN0YXRpYyB2b2lkIFdyaXRlSW50
MzIgICAoZmllbGRfbnVtYmVyLCAgaW50MzIgdmFsdWUsIG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lk
IFdyaXRlSW50NjQgICAoZmllbGRfbnVtYmVyLCAgaW50NjQgdmFsdWUsIG91dHB1dCk7Ci0gIHN0
YXRpYyB2b2lkIFdyaXRlVUludDMyICAoZmllbGRfbnVtYmVyLCB1aW50MzIgdmFsdWUsIG91dHB1
dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRlVUludDY0ICAoZmllbGRfbnVtYmVyLCB1aW50NjQgdmFs
dWUsIG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRlU0ludDMyICAoZmllbGRfbnVtYmVyLCAg
aW50MzIgdmFsdWUsIG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRlU0ludDY0ICAoZmllbGRf
bnVtYmVyLCAgaW50NjQgdmFsdWUsIG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRlRml4ZWQz
MiAoZmllbGRfbnVtYmVyLCB1aW50MzIgdmFsdWUsIG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdy
aXRlRml4ZWQ2NCAoZmllbGRfbnVtYmVyLCB1aW50NjQgdmFsdWUsIG91dHB1dCk7Ci0gIHN0YXRp
YyB2b2lkIFdyaXRlU0ZpeGVkMzIoZmllbGRfbnVtYmVyLCAgaW50MzIgdmFsdWUsIG91dHB1dCk7
Ci0gIHN0YXRpYyB2b2lkIFdyaXRlU0ZpeGVkNjQoZmllbGRfbnVtYmVyLCAgaW50NjQgdmFsdWUs
IG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRlRmxvYXQgICAoZmllbGRfbnVtYmVyLCAgZmxv
YXQgdmFsdWUsIG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRlRG91YmxlICAoZmllbGRfbnVt
YmVyLCBkb3VibGUgdmFsdWUsIG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRlQm9vbCAgICAo
ZmllbGRfbnVtYmVyLCAgIGJvb2wgdmFsdWUsIG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRl
RW51bSAgICAoZmllbGRfbnVtYmVyLCAgICBpbnQgdmFsdWUsIG91dHB1dCk7Ci0KLSAgc3RhdGlj
IHZvaWQgV3JpdGVTdHJpbmcoZmllbGRfbnVtYmVyLCBjb25zdCBzdHJpbmcmIHZhbHVlLCBvdXRw
dXQpOwotICBzdGF0aWMgdm9pZCBXcml0ZUJ5dGVzIChmaWVsZF9udW1iZXIsIGNvbnN0IHN0cmlu
ZyYgdmFsdWUsIG91dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRlU3RyaW5nTWF5YmVBbGlhc2Vk
KAotICAgICAgZmllbGRfbnVtYmVyLCBjb25zdCBzdHJpbmcmIHZhbHVlLCBvdXRwdXQpOwotICBz
dGF0aWMgdm9pZCBXcml0ZUJ5dGVzTWF5YmVBbGlhc2VkKAotICAgICAgZmllbGRfbnVtYmVyLCBj
b25zdCBzdHJpbmcmIHZhbHVlLCBvdXRwdXQpOwotCi0gIHN0YXRpYyB2b2lkIFdyaXRlR3JvdXAo
Ci0gICAgZmllbGRfbnVtYmVyLCBjb25zdCBNZXNzYWdlTGl0ZSYgdmFsdWUsIG91dHB1dCk7Ci0g
IHN0YXRpYyB2b2lkIFdyaXRlTWVzc2FnZSgKLSAgICBmaWVsZF9udW1iZXIsIGNvbnN0IE1lc3Nh
Z2VMaXRlJiB2YWx1ZSwgb3V0cHV0KTsKLSAgLy8gTGlrZSBhYm92ZSwgYnV0IHRoZXNlIHdpbGwg
Y2hlY2sgaWYgdGhlIG91dHB1dCBzdHJlYW0gaGFzIGVub3VnaAotICAvLyBzcGFjZSB0byB3cml0
ZSBkaXJlY3RseSB0byBhIGZsYXQgYXJyYXkuCi0gIHN0YXRpYyB2b2lkIFdyaXRlR3JvdXBNYXli
ZVRvQXJyYXkoCi0gICAgZmllbGRfbnVtYmVyLCBjb25zdCBNZXNzYWdlTGl0ZSYgdmFsdWUsIG91
dHB1dCk7Ci0gIHN0YXRpYyB2b2lkIFdyaXRlTWVzc2FnZU1heWJlVG9BcnJheSgKLSAgICBmaWVs
ZF9udW1iZXIsIGNvbnN0IE1lc3NhZ2VMaXRlJiB2YWx1ZSwgb3V0cHV0KTsKLQotICAvLyBMaWtl
IGFib3ZlLCBidXQgZGUtdmlydHVhbGl6ZSB0aGUgY2FsbCB0byBTZXJpYWxpemVXaXRoQ2FjaGVk
U2l6ZXMoKS4gIFRoZQotICAvLyBwb2ludGVyIG11c3QgcG9pbnQgYXQgYW4gaW5zdGFuY2Ugb2Yg
TWVzc2FnZVR5cGUsICpub3QqIGEgc3ViY2xhc3MgKG9yCi0gIC8vIHRoZSBzdWJjbGFzcyBtdXN0
IG5vdCBvdmVycmlkZSBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoKSkuCi0gIHRlbXBsYXRlPHR5
cGVuYW1lIE1lc3NhZ2VUeXBlPgotICBzdGF0aWMgaW5saW5lIHZvaWQgV3JpdGVHcm91cE5vVmly
dHVhbCgKLSAgICBmaWVsZF9udW1iZXIsIGNvbnN0IE1lc3NhZ2VUeXBlJiB2YWx1ZSwgb3V0cHV0
KTsKLSAgdGVtcGxhdGU8dHlwZW5hbWUgTWVzc2FnZVR5cGU+Ci0gIHN0YXRpYyBpbmxpbmUgdm9p
ZCBXcml0ZU1lc3NhZ2VOb1ZpcnR1YWwoCi0gICAgZmllbGRfbnVtYmVyLCBjb25zdCBNZXNzYWdl
VHlwZSYgdmFsdWUsIG91dHB1dCk7Ci0KLSN1bmRlZiBvdXRwdXQKLSNkZWZpbmUgb3V0cHV0IHVp
bnQ4KiB0YXJnZXQKLQotICAvLyBMaWtlIGFib3ZlLCBidXQgdXNlIG9ubHkgKlRvQXJyYXkgbWV0
aG9kcyBvZiBDb2RlZE91dHB1dFN0cmVhbS4KLSAgSU5MIHN0YXRpYyB1aW50OCogV3JpdGVUYWdU
b0FycmF5KGZpZWxkX251bWJlciwgV2lyZVR5cGUgdHlwZSwgb3V0cHV0KTsKLQotICAvLyBXcml0
ZSBmaWVsZHMsIHdpdGhvdXQgdGFncy4KLSAgSU5MIHN0YXRpYyB1aW50OCogV3JpdGVJbnQzMk5v
VGFnVG9BcnJheSAgIChpbnQzMiB2YWx1ZSwgb3V0cHV0KTsKLSAgSU5MIHN0YXRpYyB1aW50OCog
V3JpdGVJbnQ2NE5vVGFnVG9BcnJheSAgIChpbnQ2NCB2YWx1ZSwgb3V0cHV0KTsKLSAgSU5MIHN0
YXRpYyB1aW50OCogV3JpdGVVSW50MzJOb1RhZ1RvQXJyYXkgICh1aW50MzIgdmFsdWUsIG91dHB1
dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlVUludDY0Tm9UYWdUb0FycmF5ICAodWludDY0
IHZhbHVlLCBvdXRwdXQpOwotICBJTkwgc3RhdGljIHVpbnQ4KiBXcml0ZVNJbnQzMk5vVGFnVG9B
cnJheSAgKGludDMyIHZhbHVlLCBvdXRwdXQpOwotICBJTkwgc3RhdGljIHVpbnQ4KiBXcml0ZVNJ
bnQ2NE5vVGFnVG9BcnJheSAgKGludDY0IHZhbHVlLCBvdXRwdXQpOwotICBJTkwgc3RhdGljIHVp
bnQ4KiBXcml0ZUZpeGVkMzJOb1RhZ1RvQXJyYXkgKHVpbnQzMiB2YWx1ZSwgb3V0cHV0KTsKLSAg
SU5MIHN0YXRpYyB1aW50OCogV3JpdGVGaXhlZDY0Tm9UYWdUb0FycmF5ICh1aW50NjQgdmFsdWUs
IG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlU0ZpeGVkMzJOb1RhZ1RvQXJyYXko
aW50MzIgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlU0ZpeGVkNjRO
b1RhZ1RvQXJyYXkoaW50NjQgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdy
aXRlRmxvYXROb1RhZ1RvQXJyYXkgICAoZmxvYXQgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0
aWMgdWludDgqIFdyaXRlRG91YmxlTm9UYWdUb0FycmF5ICAoZG91YmxlIHZhbHVlLCBvdXRwdXQp
OwotICBJTkwgc3RhdGljIHVpbnQ4KiBXcml0ZUJvb2xOb1RhZ1RvQXJyYXkgICAgKGJvb2wgdmFs
dWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlRW51bU5vVGFnVG9BcnJheSAg
ICAoaW50IHZhbHVlLCBvdXRwdXQpOwotCi0gIC8vIFdyaXRlIGZpZWxkcywgaW5jbHVkaW5nIHRh
Z3MuCi0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlSW50MzJUb0FycmF5KGZpZWxkX251bWJlciwg
aW50MzIgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlSW50NjRUb0Fy
cmF5KGZpZWxkX251bWJlciwgaW50NjQgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWlu
dDgqIFdyaXRlVUludDMyVG9BcnJheShmaWVsZF9udW1iZXIsIHVpbnQzMiB2YWx1ZSwgb3V0cHV0
KTsKLSAgSU5MIHN0YXRpYyB1aW50OCogV3JpdGVVSW50NjRUb0FycmF5KGZpZWxkX251bWJlciwg
dWludDY0IHZhbHVlLCBvdXRwdXQpOwotICBJTkwgc3RhdGljIHVpbnQ4KiBXcml0ZVNJbnQzMlRv
QXJyYXkoZmllbGRfbnVtYmVyLCBpbnQzMiB2YWx1ZSwgb3V0cHV0KTsKLSAgSU5MIHN0YXRpYyB1
aW50OCogV3JpdGVTSW50NjRUb0FycmF5KGZpZWxkX251bWJlciwgaW50NjQgdmFsdWUsIG91dHB1
dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlRml4ZWQzMlRvQXJyYXkoZmllbGRfbnVtYmVy
LCB1aW50MzIgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlRml4ZWQ2
NFRvQXJyYXkoZmllbGRfbnVtYmVyLCB1aW50NjQgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0
aWMgdWludDgqIFdyaXRlU0ZpeGVkMzJUb0FycmF5KGZpZWxkX251bWJlciwgaW50MzIgdmFsdWUs
IG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlU0ZpeGVkNjRUb0FycmF5KGZpZWxk
X251bWJlciwgaW50NjQgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRl
RmxvYXRUb0FycmF5KGZpZWxkX251bWJlciwgZmxvYXQgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBz
dGF0aWMgdWludDgqIFdyaXRlRG91YmxlVG9BcnJheShmaWVsZF9udW1iZXIsIGRvdWJsZSB2YWx1
ZSwgb3V0cHV0KTsKLSAgSU5MIHN0YXRpYyB1aW50OCogV3JpdGVCb29sVG9BcnJheShmaWVsZF9u
dW1iZXIsIGJvb2wgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlRW51
bVRvQXJyYXkoZmllbGRfbnVtYmVyLCBpbnQgdmFsdWUsIG91dHB1dCk7Ci0KLSAgSU5MIHN0YXRp
YyB1aW50OCogV3JpdGVTdHJpbmdUb0FycmF5KAotICAgIGZpZWxkX251bWJlciwgY29uc3Qgc3Ry
aW5nJiB2YWx1ZSwgb3V0cHV0KTsKLSAgSU5MIHN0YXRpYyB1aW50OCogV3JpdGVCeXRlc1RvQXJy
YXkoCi0gICAgZmllbGRfbnVtYmVyLCBjb25zdCBzdHJpbmcmIHZhbHVlLCBvdXRwdXQpOwotCi0g
IElOTCBzdGF0aWMgdWludDgqIFdyaXRlR3JvdXBUb0FycmF5KAotICAgICAgZmllbGRfbnVtYmVy
LCBjb25zdCBNZXNzYWdlTGl0ZSYgdmFsdWUsIG91dHB1dCk7Ci0gIElOTCBzdGF0aWMgdWludDgq
IFdyaXRlTWVzc2FnZVRvQXJyYXkoCi0gICAgICBmaWVsZF9udW1iZXIsIGNvbnN0IE1lc3NhZ2VM
aXRlJiB2YWx1ZSwgb3V0cHV0KTsKLQotICAvLyBMaWtlIGFib3ZlLCBidXQgZGUtdmlydHVhbGl6
ZSB0aGUgY2FsbCB0byBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoKS4gIFRoZQotICAvLyBwb2lu
dGVyIG11c3QgcG9pbnQgYXQgYW4gaW5zdGFuY2Ugb2YgTWVzc2FnZVR5cGUsICpub3QqIGEgc3Vi
Y2xhc3MgKG9yCi0gIC8vIHRoZSBzdWJjbGFzcyBtdXN0IG5vdCBvdmVycmlkZSBTZXJpYWxpemVX
aXRoQ2FjaGVkU2l6ZXMoKSkuCi0gIHRlbXBsYXRlPHR5cGVuYW1lIE1lc3NhZ2VUeXBlPgotICBJ
Tkwgc3RhdGljIHVpbnQ4KiBXcml0ZUdyb3VwTm9WaXJ0dWFsVG9BcnJheSgKLSAgICBmaWVsZF9u
dW1iZXIsIGNvbnN0IE1lc3NhZ2VUeXBlJiB2YWx1ZSwgb3V0cHV0KTsKLSAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWVzc2FnZVR5cGU+Ci0gIElOTCBzdGF0aWMgdWludDgqIFdyaXRlTWVzc2FnZU5vVmly
dHVhbFRvQXJyYXkoCi0gICAgZmllbGRfbnVtYmVyLCBjb25zdCBNZXNzYWdlVHlwZSYgdmFsdWUs
IG91dHB1dCk7Ci0KLSN1bmRlZiBvdXRwdXQKLSN1bmRlZiBpbnB1dAotI3VuZGVmIElOTAotCi0j
dW5kZWYgZmllbGRfbnVtYmVyCi0KLSAgLy8gQ29tcHV0ZSB0aGUgYnl0ZSBzaXplIG9mIGEgZmll
bGQuICBUaGUgWHhTaXplKCkgZnVuY3Rpb25zIGRvIE5PVCBpbmNsdWRlCi0gIC8vIHRoZSB0YWcs
IHNvIHlvdSBtdXN0IGFsc28gY2FsbCBUYWdTaXplKCkuICAoVGhpcyBpcyBiZWNhdXNlLCBmb3Ig
cmVwZWF0ZWQKLSAgLy8gZmllbGRzLCB5b3Ugc2hvdWxkIG9ubHkgY2FsbCBUYWdTaXplKCkgb25j
ZSBhbmQgbXVsdGlwbHkgaXQgYnkgdGhlIGVsZW1lbnQKLSAgLy8gY291bnQsIGJ1dCB5b3UgbWF5
IGhhdmUgdG8gY2FsbCBYeFNpemUoKSBmb3IgZWFjaCBpbmRpdmlkdWFsIGVsZW1lbnQuKQotICBz
dGF0aWMgaW5saW5lIGludCBJbnQzMlNpemUgICAoIGludDMyIHZhbHVlKTsKLSAgc3RhdGljIGlu
bGluZSBpbnQgSW50NjRTaXplICAgKCBpbnQ2NCB2YWx1ZSk7Ci0gIHN0YXRpYyBpbmxpbmUgaW50
IFVJbnQzMlNpemUgICh1aW50MzIgdmFsdWUpOwotICBzdGF0aWMgaW5saW5lIGludCBVSW50NjRT
aXplICAodWludDY0IHZhbHVlKTsKLSAgc3RhdGljIGlubGluZSBpbnQgU0ludDMyU2l6ZSAgKCBp
bnQzMiB2YWx1ZSk7Ci0gIHN0YXRpYyBpbmxpbmUgaW50IFNJbnQ2NFNpemUgICggaW50NjQgdmFs
dWUpOwotICBzdGF0aWMgaW5saW5lIGludCBFbnVtU2l6ZSAgICAoICAgaW50IHZhbHVlKTsKLQot
ICAvLyBUaGVzZSB0eXBlcyBhbHdheXMgaGF2ZSB0aGUgc2FtZSBzaXplLgotICBzdGF0aWMgY29u
c3QgaW50IGtGaXhlZDMyU2l6ZSAgPSA0OwotICBzdGF0aWMgY29uc3QgaW50IGtGaXhlZDY0U2l6
ZSAgPSA4OwotICBzdGF0aWMgY29uc3QgaW50IGtTRml4ZWQzMlNpemUgPSA0OwotICBzdGF0aWMg
Y29uc3QgaW50IGtTRml4ZWQ2NFNpemUgPSA4OwotICBzdGF0aWMgY29uc3QgaW50IGtGbG9hdFNp
emUgICAgPSA0OwotICBzdGF0aWMgY29uc3QgaW50IGtEb3VibGVTaXplICAgPSA4OwotICBzdGF0
aWMgY29uc3QgaW50IGtCb29sU2l6ZSAgICAgPSAxOwotCi0gIHN0YXRpYyBpbmxpbmUgaW50IFN0
cmluZ1NpemUoY29uc3Qgc3RyaW5nJiB2YWx1ZSk7Ci0gIHN0YXRpYyBpbmxpbmUgaW50IEJ5dGVz
U2l6ZSAoY29uc3Qgc3RyaW5nJiB2YWx1ZSk7Ci0KLSAgc3RhdGljIGlubGluZSBpbnQgR3JvdXBT
aXplICAoY29uc3QgTWVzc2FnZUxpdGUmIHZhbHVlKTsKLSAgc3RhdGljIGlubGluZSBpbnQgTWVz
c2FnZVNpemUoY29uc3QgTWVzc2FnZUxpdGUmIHZhbHVlKTsKLQotICAvLyBMaWtlIGFib3ZlLCBi
dXQgZGUtdmlydHVhbGl6ZSB0aGUgY2FsbCB0byBCeXRlU2l6ZSgpLiAgVGhlCi0gIC8vIHBvaW50
ZXIgbXVzdCBwb2ludCBhdCBhbiBpbnN0YW5jZSBvZiBNZXNzYWdlVHlwZSwgKm5vdCogYSBzdWJj
bGFzcyAob3IKLSAgLy8gdGhlIHN1YmNsYXNzIG11c3Qgbm90IG92ZXJyaWRlIEJ5dGVTaXplKCkp
LgotICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXNzYWdlVHlwZT4KLSAgc3RhdGljIGlubGluZSBpbnQg
R3JvdXBTaXplTm9WaXJ0dWFsICAoY29uc3QgTWVzc2FnZVR5cGUmIHZhbHVlKTsKLSAgdGVtcGxh
dGU8dHlwZW5hbWUgTWVzc2FnZVR5cGU+Ci0gIHN0YXRpYyBpbmxpbmUgaW50IE1lc3NhZ2VTaXpl
Tm9WaXJ0dWFsKGNvbnN0IE1lc3NhZ2VUeXBlJiB2YWx1ZSk7Ci0KLSAgLy8gR2l2ZW4gdGhlIGxl
bmd0aCBvZiBkYXRhLCBjYWxjdWxhdGUgdGhlIGJ5dGUgc2l6ZSBvZiB0aGUgZGF0YSBvbiB0aGUK
LSAgLy8gd2lyZSBpZiB3ZSBlbmNvZGUgdGhlIGRhdGEgYXMgYSBsZW5ndGggZGVsaW1pdGVkIGZp
ZWxkLgotICBzdGF0aWMgaW5saW5lIGludCBMZW5ndGhEZWxpbWl0ZWRTaXplKGludCBsZW5ndGgp
OwotCi0gcHJpdmF0ZToKLSAgLy8gQSBoZWxwZXIgbWV0aG9kIGZvciB0aGUgcmVwZWF0ZWQgcHJp
bWl0aXZlIHJlYWRlci4gVGhpcyBtZXRob2QgaGFzCi0gIC8vIG9wdGltaXphdGlvbnMgZm9yIHBy
aW1pdGl2ZSB0eXBlcyB0aGF0IGhhdmUgZml4ZWQgc2l6ZSBvbiB0aGUgd2lyZSwgYW5kCi0gIC8v
IGNhbiBiZSByZWFkIHVzaW5nIHBvdGVudGlhbGx5IGZhc3RlciBwYXRocy4KLSAgdGVtcGxhdGUg
PHR5cGVuYW1lIENUeXBlLCBlbnVtIEZpZWxkVHlwZSBEZWNsYXJlZFR5cGU+IEdPT0dMRV9BVFRS
SUJVVEVfQUxXQVlTX0lOTElORQotICBzdGF0aWMgYm9vbCBSZWFkUmVwZWF0ZWRGaXhlZFNpemVQ
cmltaXRpdmUoCi0gICAgICBpbnQgdGFnX3NpemUsCi0gICAgICB1aW50MzIgdGFnLAotICAgICAg
Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgUmVw
ZWF0ZWRGaWVsZDxDVHlwZT4qIHZhbHVlKTsKLQotICAvLyBMaWtlIFJlYWRSZXBlYXRlZEZpeGVk
U2l6ZVByaW1pdGl2ZSBidXQgZm9yIHBhY2tlZCBwcmltaXRpdmUgZmllbGRzLgotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ1R5cGUsIGVudW0gRmllbGRUeXBlIERlY2xhcmVkVHlwZT4gR09PR0xFX0FU
VFJJQlVURV9BTFdBWVNfSU5MSU5FCi0gIHN0YXRpYyBib29sIFJlYWRQYWNrZWRGaXhlZFNpemVQ
cmltaXRpdmUoZ29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGVhdGVkRmllbGQ8
Q1R5cGU+KiB2YWx1ZSk7Ci0KLSAgc3RhdGljIGNvbnN0IENwcFR5cGUga0ZpZWxkVHlwZVRvQ3Bw
VHlwZU1hcFtdOwotICBzdGF0aWMgY29uc3QgV2lyZUZvcm1hdExpdGU6OldpcmVUeXBlIGtXaXJl
VHlwZUZvckZpZWxkVHlwZVtdOwotCi0gIEdPT0dMRV9ESVNBTExPV19FVklMX0NPTlNUUlVDVE9S
UyhXaXJlRm9ybWF0TGl0ZSk7Ci19OwotCi0vLyBBIGNsYXNzIHdoaWNoIGRlYWxzIHdpdGggdW5r
bm93biB2YWx1ZXMuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBqdXN0Ci0vLyBkaXNjYXJk
cyB0aGVtLiAgV2lyZUZvcm1hdCBkZWZpbmVzIGEgc3ViY2xhc3Mgd2hpY2ggd3JpdGVzIHRvIGFu
Ci0vLyBVbmtub3duRmllbGRTZXQuICBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgRXh0ZW5zaW9uU2V0
OjpQYXJzZUZpZWxkKCksIHNpbmNlCi0vLyBFeHRlbnNpb25TZXQgaXMgcGFydCBvZiB0aGUgbGl0
ZSBsaWJyYXJ5IGJ1dCBVbmtub3duRmllbGRTZXQgaXMgbm90LgotY2xhc3MgTElCUFJPVE9CVUZf
RVhQT1JUIEZpZWxkU2tpcHBlciB7Ci0gcHVibGljOgotICBGaWVsZFNraXBwZXIoKSB7fQotICB2
aXJ0dWFsIH5GaWVsZFNraXBwZXIoKSB7fQotCi0gIC8vIFNraXAgYSBmaWVsZCB3aG9zZSB0YWcg
aGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4KLSAgdmlydHVhbCBib29sIFNraXBGaWVsZChpbzo6
Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsIHVpbnQzMiB0YWcpOwotCi0gIC8vIFNraXAgYW4gZW50
aXJlIG1lc3NhZ2Ugb3IgZ3JvdXAsIHVwIHRvIGFuIGVuZC1ncm91cCB0YWcgKHdoaWNoIGlzIGNv
bnN1bWVkKQotICAvLyBvciBlbmQtb2Ytc3RyZWFtLgotICB2aXJ0dWFsIGJvb2wgU2tpcE1lc3Nh
Z2UoaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLQotICAvLyBEZWFsIHdpdGggYW4gYWxy
ZWFkeS1wYXJzZWQgdW5yZWNvZ25pemVkIGVudW0gdmFsdWUuICBUaGUgZGVmYXVsdAotICAvLyBp
bXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcsIGJ1dCB0aGUgVW5rbm93bkZpZWxkU2V0LWJhc2Vk
IGltcGxlbWVudGF0aW9uCi0gIC8vIHNhdmVzIGl0IGFzIGFuIHVua25vd24gdmFyaW50LgotICB2
aXJ0dWFsIHZvaWQgU2tpcFVua25vd25FbnVtKGludCBmaWVsZF9udW1iZXIsIGludCB2YWx1ZSk7
Ci19OwotCi0vLyBTdWJjbGFzcyBvZiBGaWVsZFNraXBwZXIgd2hpY2ggc2F2ZXMgc2tpcHBlZCBm
aWVsZHMgdG8gYSBDb2RlZE91dHB1dFN0cmVhbS4KLQotY2xhc3MgTElCUFJPVE9CVUZfRVhQT1JU
IENvZGVkT3V0cHV0U3RyZWFtRmllbGRTa2lwcGVyIDogcHVibGljIEZpZWxkU2tpcHBlciB7Ci0g
cHVibGljOgotICBleHBsaWNpdCBDb2RlZE91dHB1dFN0cmVhbUZpZWxkU2tpcHBlcihpbzo6Q29k
ZWRPdXRwdXRTdHJlYW0qIHVua25vd25fZmllbGRzKQotICAgICAgOiB1bmtub3duX2ZpZWxkc18o
dW5rbm93bl9maWVsZHMpIHt9Ci0gIHZpcnR1YWwgfkNvZGVkT3V0cHV0U3RyZWFtRmllbGRTa2lw
cGVyKCkge30KLQotICAvLyBpbXBsZW1lbnRzIEZpZWxkU2tpcHBlciAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2aXJ0dWFsIGJvb2wgU2tpcEZpZWxkKGlvOjpD
b2RlZElucHV0U3RyZWFtKiBpbnB1dCwgdWludDMyIHRhZyk7Ci0gIHZpcnR1YWwgYm9vbCBTa2lw
TWVzc2FnZShpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2aXJ0dWFsIHZvaWQgU2tp
cFVua25vd25FbnVtKGludCBmaWVsZF9udW1iZXIsIGludCB2YWx1ZSk7Ci0KLSBwcm90ZWN0ZWQ6
Ci0gIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogdW5rbm93bl9maWVsZHNfOwotfTsKLQotCi0vLyBp
bmxpbmUgbWV0aG9kcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KLWlubGluZSBXaXJlRm9ybWF0TGl0ZTo6Q3BwVHlwZQotV2lyZUZvcm1hdExp
dGU6OkZpZWxkVHlwZVRvQ3BwVHlwZShGaWVsZFR5cGUgdHlwZSkgewotICByZXR1cm4ga0ZpZWxk
VHlwZVRvQ3BwVHlwZU1hcFt0eXBlXTsKLX0KLQotaW5saW5lIHVpbnQzMiBXaXJlRm9ybWF0TGl0
ZTo6TWFrZVRhZyhpbnQgZmllbGRfbnVtYmVyLCBXaXJlVHlwZSB0eXBlKSB7Ci0gIHJldHVybiBH
T09HTEVfUFJPVE9CVUZfV0lSRV9GT1JNQVRfTUFLRV9UQUcoZmllbGRfbnVtYmVyLCB0eXBlKTsK
LX0KLQotaW5saW5lIFdpcmVGb3JtYXRMaXRlOjpXaXJlVHlwZSBXaXJlRm9ybWF0TGl0ZTo6R2V0
VGFnV2lyZVR5cGUodWludDMyIHRhZykgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8V2lyZVR5cGU+
KHRhZyAmIGtUYWdUeXBlTWFzayk7Ci19Ci0KLWlubGluZSBpbnQgV2lyZUZvcm1hdExpdGU6Okdl
dFRhZ0ZpZWxkTnVtYmVyKHVpbnQzMiB0YWcpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
dGFnID4+IGtUYWdUeXBlQml0cyk7Ci19Ci0KLWlubGluZSBpbnQgV2lyZUZvcm1hdExpdGU6OlRh
Z1NpemUoaW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2lyZUZvcm1hdExpdGU6OkZpZWxkVHlwZSB0eXBlKSB7Ci0gIGludCByZXN1bHQgPSBpbzo6
Q29kZWRPdXRwdXRTdHJlYW06OlZhcmludFNpemUzMigKLSAgICBmaWVsZF9udW1iZXIgPDwga1Rh
Z1R5cGVCaXRzKTsKLSAgaWYgKHR5cGUgPT0gVFlQRV9HUk9VUCkgewotICAgIC8vIEdyb3VwcyBo
YXZlIGJvdGggYSBzdGFydCBhbmQgYW4gZW5kIHRhZy4KLSAgICByZXR1cm4gcmVzdWx0ICogMjsK
LSAgfSBlbHNlIHsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19Ci0KLWlubGluZSB1aW50MzIg
V2lyZUZvcm1hdExpdGU6OkVuY29kZUZsb2F0KGZsb2F0IHZhbHVlKSB7Ci0gIHVuaW9uIHtmbG9h
dCBmOyB1aW50MzIgaTt9OwotICBmID0gdmFsdWU7Ci0gIHJldHVybiBpOwotfQotCi1pbmxpbmUg
ZmxvYXQgV2lyZUZvcm1hdExpdGU6OkRlY29kZUZsb2F0KHVpbnQzMiB2YWx1ZSkgewotICB1bmlv
biB7ZmxvYXQgZjsgdWludDMyIGk7fTsKLSAgaSA9IHZhbHVlOwotICByZXR1cm4gZjsKLX0KLQot
aW5saW5lIHVpbnQ2NCBXaXJlRm9ybWF0TGl0ZTo6RW5jb2RlRG91YmxlKGRvdWJsZSB2YWx1ZSkg
ewotICB1bmlvbiB7ZG91YmxlIGY7IHVpbnQ2NCBpO307Ci0gIGYgPSB2YWx1ZTsKLSAgcmV0dXJu
IGk7Ci19Ci0KLWlubGluZSBkb3VibGUgV2lyZUZvcm1hdExpdGU6OkRlY29kZURvdWJsZSh1aW50
NjQgdmFsdWUpIHsKLSAgdW5pb24ge2RvdWJsZSBmOyB1aW50NjQgaTt9OwotICBpID0gdmFsdWU7
Ci0gIHJldHVybiBmOwotfQotCi0vLyBaaWdaYWcgVHJhbnNmb3JtOiAgRW5jb2RlcyBzaWduZWQg
aW50ZWdlcnMgc28gdGhhdCB0aGV5IGNhbiBiZQotLy8gZWZmZWN0aXZlbHkgdXNlZCB3aXRoIHZh
cmludCBlbmNvZGluZy4KLS8vCi0vLyB2YXJpbnQgb3BlcmF0ZXMgb24gdW5zaWduZWQgaW50ZWdl
cnMsIGVuY29kaW5nIHNtYWxsZXIgbnVtYmVycyBpbnRvCi0vLyBmZXdlciBieXRlcy4gIElmIHlv
dSB0cnkgdG8gdXNlIGl0IG9uIGEgc2lnbmVkIGludGVnZXIsIGl0IHdpbGwgdHJlYXQKLS8vIHRo
aXMgbnVtYmVyIGFzIGEgdmVyeSBsYXJnZSB1bnNpZ25lZCBpbnRlZ2VyLCB3aGljaCBtZWFucyB0
aGF0IGV2ZW4KLS8vIHNtYWxsIHNpZ25lZCBudW1iZXJzIGxpa2UgLTEgd2lsbCB0YWtlIHRoZSBt
YXhpbXVtIG51bWJlciBvZiBieXRlcwotLy8gKDEwKSB0byBlbmNvZGUuICBaaWdaYWdFbmNvZGUo
KSBtYXBzIHNpZ25lZCBpbnRlZ2VycyB0byB1bnNpZ25lZAotLy8gaW4gc3VjaCBhIHdheSB0aGF0
IHRob3NlIHdpdGggYSBzbWFsbCBhYnNvbHV0ZSB2YWx1ZSB3aWxsIGhhdmUgc21hbGxlcgotLy8g
ZW5jb2RlZCB2YWx1ZXMsIG1ha2luZyB0aGVtIGFwcHJvcHJpYXRlIGZvciBlbmNvZGluZyB1c2lu
ZyB2YXJpbnQuCi0vLwotLy8gICAgICAgaW50MzIgLT4gICAgIHVpbnQzMgotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gICAgICAgICAgIDAgLT4gICAgICAgICAgMAotLy8gICAgICAg
ICAgLTEgLT4gICAgICAgICAgMQotLy8gICAgICAgICAgIDEgLT4gICAgICAgICAgMgotLy8gICAg
ICAgICAgLTIgLT4gICAgICAgICAgMwotLy8gICAgICAgICAuLi4gLT4gICAgICAgIC4uLgotLy8g
IDIxNDc0ODM2NDcgLT4gNDI5NDk2NzI5NAotLy8gLTIxNDc0ODM2NDggLT4gNDI5NDk2NzI5NQot
Ly8KLS8vICAgICAgICA+PiBlbmNvZGUgPj4KLS8vICAgICAgICA8PCBkZWNvZGUgPDwKLQotaW5s
aW5lIHVpbnQzMiBXaXJlRm9ybWF0TGl0ZTo6WmlnWmFnRW5jb2RlMzIoaW50MzIgbikgewotICAv
LyBOb3RlOiAgdGhlIHJpZ2h0LXNoaWZ0IG11c3QgYmUgYXJpdGhtZXRpYwotICByZXR1cm4gKHN0
YXRpY19jYXN0PHVpbnQzMj4obikgPDwgMSkgXiAobiA+PiAzMSk7Ci19Ci0KLWlubGluZSBpbnQz
MiBXaXJlRm9ybWF0TGl0ZTo6WmlnWmFnRGVjb2RlMzIodWludDMyIG4pIHsKLSAgcmV0dXJuIChu
ID4+IDEpIF4gLXN0YXRpY19jYXN0PGludDMyPihuICYgMSk7Ci19Ci0KLWlubGluZSB1aW50NjQg
V2lyZUZvcm1hdExpdGU6OlppZ1phZ0VuY29kZTY0KGludDY0IG4pIHsKLSAgLy8gTm90ZTogIHRo
ZSByaWdodC1zaGlmdCBtdXN0IGJlIGFyaXRobWV0aWMKLSAgcmV0dXJuIChzdGF0aWNfY2FzdDx1
aW50NjQ+KG4pIDw8IDEpIF4gKG4gPj4gNjMpOwotfQotCi1pbmxpbmUgaW50NjQgV2lyZUZvcm1h
dExpdGU6OlppZ1phZ0RlY29kZTY0KHVpbnQ2NCBuKSB7Ci0gIHJldHVybiAobiA+PiAxKSBeIC1z
dGF0aWNfY2FzdDxpbnQ2ND4obiAmIDEpOwotfQotCi0vLyBTdHJpbmcgaXMgZm9yIFVURi04IHRl
eHQgb25seSwgYnV0LCBldmVuIHNvLCBSZWFkU3RyaW5nKCkgY2FuIHNpbXBseQotLy8gY2FsbCBS
ZWFkQnl0ZXMoKS4KLQotaW5saW5lIGJvb2wgV2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoaW86
OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyaW5nKiB2YWx1ZSkgewotICByZXR1cm4gUmVhZEJ5dGVzKGlucHV0LCB2YWx1
ZSk7Ci19Ci0KLWlubGluZSBib29sIFdpcmVGb3JtYXRMaXRlOjpSZWFkU3RyaW5nKGlvOjpDb2Rl
ZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmluZyoqIHApIHsKLSAgcmV0dXJuIFJlYWRCeXRlcyhpbnB1dCwgcCk7Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi0KLX0gIC8v
IG5hbWVzcGFjZSBnb29nbGUKLSNlbmRpZiAgLy8gR09PR0xFX1BST1RPQlVGX1dJUkVfRk9STUFU
X0xJVEVfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0
ZV9pbmwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
cHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmNlMjFjZjBkMTZiMGRkMTdlYjc3OGZiYmEwMmJl
MzZkMDRiMGM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYv
c3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oCisrKyAvZGV2L251bGwK
QEAgLTEsODc4ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGlu
dGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1i
dWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0v
LyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0vLyAgICAgICAgIHdp
bmtAZ29vZ2xlLmNvbSAoV2luayBTYXZpbGxlKSAocmVmYWN0b3JlZCBmcm9tIHdpcmVfZm9ybWF0
LmgpCi0vLyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8v
ICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2lmbmRlZiBHT09H
TEVfUFJPVE9CVUZfV0lSRV9GT1JNQVRfTElURV9JTkxfSF9fCi0jZGVmaW5lIEdPT0dMRV9QUk9U
T0JVRl9XSVJFX0ZPUk1BVF9MSVRFX0lOTF9IX18KLQotI2lmZGVmIF9NU0NfVkVSCi0vLyBUaGlz
IGlzIHJlcXVpcmVkIGZvciBtaW4vbWF4IG9uIFZTMjAxMyBvbmx5LgotI2luY2x1ZGUgPGFsZ29y
aXRobT4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9jb21tb24uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvbG9n
Z2luZy5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlX2xpdGUuaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9p
by9jb2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvYXJlbmFzdHJpbmcu
aD4KLQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci1uYW1lc3Bh
Y2UgaW50ZXJuYWwgewotCi0vLyBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIFJlYWRQcmltaXRp
dmUuCi0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgYm9vbCBXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1p
dGl2ZTxpbnQzMiwgV2lyZUZvcm1hdExpdGU6OlRZUEVfSU5UMzI+KAotICAgIGlvOjpDb2RlZElu
cHV0U3RyZWFtKiBpbnB1dCwKLSAgICBpbnQzMiogdmFsdWUpIHsKLSAgdWludDMyIHRlbXA7Ci0g
IGlmICghaW5wdXQtPlJlYWRWYXJpbnQzMigmdGVtcCkpIHJldHVybiBmYWxzZTsKLSAgKnZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50MzI+KHRlbXApOwotICByZXR1cm4gdHJ1ZTsKLX0KLXRlbXBsYXRl
IDw+Ci1pbmxpbmUgYm9vbCBXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTxpbnQ2NCwgV2ly
ZUZvcm1hdExpdGU6OlRZUEVfSU5UNjQ+KAotICAgIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1
dCwKLSAgICBpbnQ2NCogdmFsdWUpIHsKLSAgdWludDY0IHRlbXA7Ci0gIGlmICghaW5wdXQtPlJl
YWRWYXJpbnQ2NCgmdGVtcCkpIHJldHVybiBmYWxzZTsKLSAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8
aW50NjQ+KHRlbXApOwotICByZXR1cm4gdHJ1ZTsKLX0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgYm9v
bCBXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTx1aW50MzIsIFdpcmVGb3JtYXRMaXRlOjpU
WVBFX1VJTlQzMj4oCi0gICAgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgIHVpbnQz
MiogdmFsdWUpIHsKLSAgcmV0dXJuIGlucHV0LT5SZWFkVmFyaW50MzIodmFsdWUpOwotfQotdGVt
cGxhdGUgPD4KLWlubGluZSBib29sIFdpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPHVpbnQ2
NCwgV2lyZUZvcm1hdExpdGU6OlRZUEVfVUlOVDY0PigKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVh
bSogaW5wdXQsCi0gICAgdWludDY0KiB2YWx1ZSkgewotICByZXR1cm4gaW5wdXQtPlJlYWRWYXJp
bnQ2NCh2YWx1ZSk7Ci19Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGJvb2wgV2lyZUZvcm1hdExpdGU6
OlJlYWRQcmltaXRpdmU8aW50MzIsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX1NJTlQzMj4oCi0gICAg
aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LAotICAgIGludDMyKiB2YWx1ZSkgewotICB1aW50
MzIgdGVtcDsKLSAgaWYgKCFpbnB1dC0+UmVhZFZhcmludDMyKCZ0ZW1wKSkgcmV0dXJuIGZhbHNl
OwotICAqdmFsdWUgPSBaaWdaYWdEZWNvZGUzMih0ZW1wKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci10
ZW1wbGF0ZSA8PgotaW5saW5lIGJvb2wgV2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8aW50
NjQsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX1NJTlQ2ND4oCi0gICAgaW86OkNvZGVkSW5wdXRTdHJl
YW0qIGlucHV0LAotICAgIGludDY0KiB2YWx1ZSkgewotICB1aW50NjQgdGVtcDsKLSAgaWYgKCFp
bnB1dC0+UmVhZFZhcmludDY0KCZ0ZW1wKSkgcmV0dXJuIGZhbHNlOwotICAqdmFsdWUgPSBaaWda
YWdEZWNvZGU2NCh0ZW1wKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci10ZW1wbGF0ZSA8PgotaW5saW5l
IGJvb2wgV2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8dWludDMyLCBXaXJlRm9ybWF0TGl0
ZTo6VFlQRV9GSVhFRDMyPigKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAg
dWludDMyKiB2YWx1ZSkgewotICByZXR1cm4gaW5wdXQtPlJlYWRMaXR0bGVFbmRpYW4zMih2YWx1
ZSk7Ci19Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGJvb2wgV2lyZUZvcm1hdExpdGU6OlJlYWRQcmlt
aXRpdmU8dWludDY0LCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9GSVhFRDY0PigKLSAgICBpbzo6Q29k
ZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgdWludDY0KiB2YWx1ZSkgewotICByZXR1cm4gaW5w
dXQtPlJlYWRMaXR0bGVFbmRpYW42NCh2YWx1ZSk7Ci19Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGJv
b2wgV2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8aW50MzIsIFdpcmVGb3JtYXRMaXRlOjpU
WVBFX1NGSVhFRDMyPigKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgaW50
MzIqIHZhbHVlKSB7Ci0gIHVpbnQzMiB0ZW1wOwotICBpZiAoIWlucHV0LT5SZWFkTGl0dGxlRW5k
aWFuMzIoJnRlbXApKSByZXR1cm4gZmFsc2U7Ci0gICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludDMy
Pih0ZW1wKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGJvb2wgV2ly
ZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8aW50NjQsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX1NG
SVhFRDY0PigKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgaW50NjQqIHZh
bHVlKSB7Ci0gIHVpbnQ2NCB0ZW1wOwotICBpZiAoIWlucHV0LT5SZWFkTGl0dGxlRW5kaWFuNjQo
JnRlbXApKSByZXR1cm4gZmFsc2U7Ci0gICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludDY0Pih0ZW1w
KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGJvb2wgV2lyZUZvcm1h
dExpdGU6OlJlYWRQcmltaXRpdmU8ZmxvYXQsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0ZMT0FUPigK
LSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgZmxvYXQqIHZhbHVlKSB7Ci0g
IHVpbnQzMiB0ZW1wOwotICBpZiAoIWlucHV0LT5SZWFkTGl0dGxlRW5kaWFuMzIoJnRlbXApKSBy
ZXR1cm4gZmFsc2U7Ci0gICp2YWx1ZSA9IERlY29kZUZsb2F0KHRlbXApOwotICByZXR1cm4gdHJ1
ZTsKLX0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgYm9vbCBXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1p
dGl2ZTxkb3VibGUsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0RPVUJMRT4oCi0gICAgaW86OkNvZGVk
SW5wdXRTdHJlYW0qIGlucHV0LAotICAgIGRvdWJsZSogdmFsdWUpIHsKLSAgdWludDY0IHRlbXA7
Ci0gIGlmICghaW5wdXQtPlJlYWRMaXR0bGVFbmRpYW42NCgmdGVtcCkpIHJldHVybiBmYWxzZTsK
LSAgKnZhbHVlID0gRGVjb2RlRG91YmxlKHRlbXApOwotICByZXR1cm4gdHJ1ZTsKLX0KLXRlbXBs
YXRlIDw+Ci1pbmxpbmUgYm9vbCBXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZTxib29sLCBX
aXJlRm9ybWF0TGl0ZTo6VFlQRV9CT09MPigKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5w
dXQsCi0gICAgYm9vbCogdmFsdWUpIHsKLSAgdWludDY0IHRlbXA7Ci0gIGlmICghaW5wdXQtPlJl
YWRWYXJpbnQ2NCgmdGVtcCkpIHJldHVybiBmYWxzZTsKLSAgKnZhbHVlID0gdGVtcCAhPSAwOwot
ICByZXR1cm4gdHJ1ZTsKLX0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgYm9vbCBXaXJlRm9ybWF0TGl0
ZTo6UmVhZFByaW1pdGl2ZTxpbnQsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0VOVU0+KAotICAgIGlv
OjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICBpbnQqIHZhbHVlKSB7Ci0gIHVpbnQzMiB0
ZW1wOwotICBpZiAoIWlucHV0LT5SZWFkVmFyaW50MzIoJnRlbXApKSByZXR1cm4gZmFsc2U7Ci0g
ICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4odGVtcCk7Ci0gIHJldHVybiB0cnVlOwotfQotCi10
ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0IHVpbnQ4KiBXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1p
dGl2ZUZyb21BcnJheTwKLSAgdWludDMyLCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9GSVhFRDMyPigK
LSAgICBjb25zdCB1aW50OCogYnVmZmVyLAotICAgIHVpbnQzMiogdmFsdWUpIHsKLSAgcmV0dXJu
IGlvOjpDb2RlZElucHV0U3RyZWFtOjpSZWFkTGl0dGxlRW5kaWFuMzJGcm9tQXJyYXkoYnVmZmVy
LCB2YWx1ZSk7Ci19Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0IHVpbnQ4KiBXaXJlRm9ybWF0
TGl0ZTo6UmVhZFByaW1pdGl2ZUZyb21BcnJheTwKLSAgdWludDY0LCBXaXJlRm9ybWF0TGl0ZTo6
VFlQRV9GSVhFRDY0PigKLSAgICBjb25zdCB1aW50OCogYnVmZmVyLAotICAgIHVpbnQ2NCogdmFs
dWUpIHsKLSAgcmV0dXJuIGlvOjpDb2RlZElucHV0U3RyZWFtOjpSZWFkTGl0dGxlRW5kaWFuNjRG
cm9tQXJyYXkoYnVmZmVyLCB2YWx1ZSk7Ci19Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGNvbnN0IHVp
bnQ4KiBXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1pdGl2ZUZyb21BcnJheTwKLSAgaW50MzIsIFdp
cmVGb3JtYXRMaXRlOjpUWVBFX1NGSVhFRDMyPigKLSAgICBjb25zdCB1aW50OCogYnVmZmVyLAot
ICAgIGludDMyKiB2YWx1ZSkgewotICB1aW50MzIgdGVtcDsKLSAgYnVmZmVyID0gaW86OkNvZGVk
SW5wdXRTdHJlYW06OlJlYWRMaXR0bGVFbmRpYW4zMkZyb21BcnJheShidWZmZXIsICZ0ZW1wKTsK
LSAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MzI+KHRlbXApOwotICByZXR1cm4gYnVmZmVyOwot
fQotdGVtcGxhdGUgPD4KLWlubGluZSBjb25zdCB1aW50OCogV2lyZUZvcm1hdExpdGU6OlJlYWRQ
cmltaXRpdmVGcm9tQXJyYXk8Ci0gIGludDY0LCBXaXJlRm9ybWF0TGl0ZTo6VFlQRV9TRklYRUQ2
ND4oCi0gICAgY29uc3QgdWludDgqIGJ1ZmZlciwKLSAgICBpbnQ2NCogdmFsdWUpIHsKLSAgdWlu
dDY0IHRlbXA7Ci0gIGJ1ZmZlciA9IGlvOjpDb2RlZElucHV0U3RyZWFtOjpSZWFkTGl0dGxlRW5k
aWFuNjRGcm9tQXJyYXkoYnVmZmVyLCAmdGVtcCk7Ci0gICp2YWx1ZSA9IHN0YXRpY19jYXN0PGlu
dDY0Pih0ZW1wKTsKLSAgcmV0dXJuIGJ1ZmZlcjsKLX0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgY29u
c3QgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlRnJvbUFycmF5PAotICBmbG9h
dCwgV2lyZUZvcm1hdExpdGU6OlRZUEVfRkxPQVQ+KAotICAgIGNvbnN0IHVpbnQ4KiBidWZmZXIs
Ci0gICAgZmxvYXQqIHZhbHVlKSB7Ci0gIHVpbnQzMiB0ZW1wOwotICBidWZmZXIgPSBpbzo6Q29k
ZWRJbnB1dFN0cmVhbTo6UmVhZExpdHRsZUVuZGlhbjMyRnJvbUFycmF5KGJ1ZmZlciwgJnRlbXAp
OwotICAqdmFsdWUgPSBEZWNvZGVGbG9hdCh0ZW1wKTsKLSAgcmV0dXJuIGJ1ZmZlcjsKLX0KLXRl
bXBsYXRlIDw+Ci1pbmxpbmUgY29uc3QgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0
aXZlRnJvbUFycmF5PAotICBkb3VibGUsIFdpcmVGb3JtYXRMaXRlOjpUWVBFX0RPVUJMRT4oCi0g
ICAgY29uc3QgdWludDgqIGJ1ZmZlciwKLSAgICBkb3VibGUqIHZhbHVlKSB7Ci0gIHVpbnQ2NCB0
ZW1wOwotICBidWZmZXIgPSBpbzo6Q29kZWRJbnB1dFN0cmVhbTo6UmVhZExpdHRsZUVuZGlhbjY0
RnJvbUFycmF5KGJ1ZmZlciwgJnRlbXApOwotICAqdmFsdWUgPSBEZWNvZGVEb3VibGUodGVtcCk7
Ci0gIHJldHVybiBidWZmZXI7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDVHlwZSwgZW51bSBX
aXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIERlY2xhcmVkVHlwZT4KLWlubGluZSBib29sIFdpcmVG
b3JtYXRMaXRlOjpSZWFkUmVwZWF0ZWRQcmltaXRpdmUoCi0gICAgaW50LCAgLy8gdGFnX3NpemUs
IHVudXNlZC4KLSAgICB1aW50MzIgdGFnLAotICAgIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1
dCwKLSAgICBSZXBlYXRlZEZpZWxkPENUeXBlPiogdmFsdWVzKSB7Ci0gIENUeXBlIHZhbHVlOwot
ICBpZiAoIVJlYWRQcmltaXRpdmU8Q1R5cGUsIERlY2xhcmVkVHlwZT4oaW5wdXQsICZ2YWx1ZSkp
IHJldHVybiBmYWxzZTsKLSAgdmFsdWVzLT5BZGQodmFsdWUpOwotICBpbnQgZWxlbWVudHNfYWxy
ZWFkeV9yZXNlcnZlZCA9IHZhbHVlcy0+Q2FwYWNpdHkoKSAtIHZhbHVlcy0+c2l6ZSgpOwotICB3
aGlsZSAoZWxlbWVudHNfYWxyZWFkeV9yZXNlcnZlZCA+IDAgJiYgaW5wdXQtPkV4cGVjdFRhZyh0
YWcpKSB7Ci0gICAgaWYgKCFSZWFkUHJpbWl0aXZlPENUeXBlLCBEZWNsYXJlZFR5cGU+KGlucHV0
LCAmdmFsdWUpKSByZXR1cm4gZmFsc2U7Ci0gICAgdmFsdWVzLT5BZGRBbHJlYWR5UmVzZXJ2ZWQo
dmFsdWUpOwotICAgIGVsZW1lbnRzX2FscmVhZHlfcmVzZXJ2ZWQtLTsKLSAgfQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENUeXBlLCBlbnVtIFdpcmVGb3JtYXRMaXRl
OjpGaWVsZFR5cGUgRGVjbGFyZWRUeXBlPgotaW5saW5lIGJvb2wgV2lyZUZvcm1hdExpdGU6OlJl
YWRSZXBlYXRlZEZpeGVkU2l6ZVByaW1pdGl2ZSgKLSAgICBpbnQgdGFnX3NpemUsCi0gICAgdWlu
dDMyIHRhZywKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQsCi0gICAgUmVwZWF0ZWRG
aWVsZDxDVHlwZT4qIHZhbHVlcykgewotICBHT09HTEVfRENIRUNLX0VRKFVJbnQzMlNpemUodGFn
KSwgdGFnX3NpemUpOwotICBDVHlwZSB2YWx1ZTsKLSAgaWYgKCFSZWFkUHJpbWl0aXZlPENUeXBl
LCBEZWNsYXJlZFR5cGU+KGlucHV0LCAmdmFsdWUpKQotICAgIHJldHVybiBmYWxzZTsKLSAgdmFs
dWVzLT5BZGQodmFsdWUpOwotCi0gIC8vIEZvciBmaXhlZCBzaXplIHZhbHVlcywgcmVwZWF0ZWQg
dmFsdWVzIGNhbiBiZSByZWFkIG1vcmUgcXVpY2tseSBieQotICAvLyByZWFkaW5nIGRpcmVjdGx5
IGZyb20gYSByYXcgYXJyYXkuCi0gIC8vCi0gIC8vIFdlIGNhbiBnZXQgYSB0aWdodCBsb29wIGJ5
IG9ubHkgcmVhZGluZyBhcyBtYW55IGVsZW1lbnRzIGFzIGNhbiBiZQotICAvLyBhZGRlZCB0byB0
aGUgUmVwZWF0ZWRGaWVsZCB3aXRob3V0IGhhdmluZyB0byBkbyBhbnkgcmVzaXppbmcuIEFkZGl0
aW9uYWxseSwKLSAgLy8gd2Ugb25seSB0cnkgdG8gcmVhZCBhcyBtYW55IGVsZW1lbnRzIGFzIGFy
ZSBhdmFpbGFibGUgZnJvbSB0aGUgY3VycmVudAotICAvLyBidWZmZXIgc3BhY2UuIERvaW5nIHNv
IGF2b2lkcyBoYXZpbmcgdG8gcGVyZm9ybSBib3VuZGFyeSBjaGVja3Mgd2hlbgotICAvLyByZWFk
aW5nIHRoZSB2YWx1ZTogdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgY2FuIGJl
IHJlYWQgaXMKLSAgLy8ga25vd24gb3V0c2lkZSBvZiB0aGUgbG9vcC4KLSAgY29uc3Qgdm9pZCog
dm9pZF9wb2ludGVyOwotICBpbnQgc2l6ZTsKLSAgaW5wdXQtPkdldERpcmVjdEJ1ZmZlclBvaW50
ZXJJbmxpbmUoJnZvaWRfcG9pbnRlciwgJnNpemUpOwotICBpZiAoc2l6ZSA+IDApIHsKLSAgICBj
b25zdCB1aW50OCogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OCo+KHZvaWRf
cG9pbnRlcik7Ci0gICAgLy8gVGhlIG51bWJlciBvZiBieXRlcyBlYWNoIHR5cGUgb2NjdXBpZXMg
b24gdGhlIHdpcmUuCi0gICAgY29uc3QgaW50IHBlcl92YWx1ZV9zaXplID0gdGFnX3NpemUgKyBz
aXplb2YodmFsdWUpOwotCi0gICAgaW50IGVsZW1lbnRzX2F2YWlsYWJsZSA9Ci0gICAgICAgIHN0
ZDo6bWluKHZhbHVlcy0+Q2FwYWNpdHkoKSAtIHZhbHVlcy0+c2l6ZSgpLCBzaXplIC8gcGVyX3Zh
bHVlX3NpemUpOwotICAgIGludCBudW1fcmVhZCA9IDA7Ci0gICAgd2hpbGUgKG51bV9yZWFkIDwg
ZWxlbWVudHNfYXZhaWxhYmxlICYmCi0gICAgICAgICAgIChidWZmZXIgPSBpbzo6Q29kZWRJbnB1
dFN0cmVhbTo6RXhwZWN0VGFnRnJvbUFycmF5KAotICAgICAgICAgICAgICAgYnVmZmVyLCB0YWcp
KSAhPSBOVUxMKSB7Ci0gICAgICBidWZmZXIgPSBSZWFkUHJpbWl0aXZlRnJvbUFycmF5PENUeXBl
LCBEZWNsYXJlZFR5cGU+KGJ1ZmZlciwgJnZhbHVlKTsKLSAgICAgIHZhbHVlcy0+QWRkQWxyZWFk
eVJlc2VydmVkKHZhbHVlKTsKLSAgICAgICsrbnVtX3JlYWQ7Ci0gICAgfQotICAgIGNvbnN0IGlu
dCByZWFkX2J5dGVzID0gbnVtX3JlYWQgKiBwZXJfdmFsdWVfc2l6ZTsKLSAgICBpZiAocmVhZF9i
eXRlcyA+IDApIHsKLSAgICAgIGlucHV0LT5Ta2lwKHJlYWRfYnl0ZXMpOwotICAgIH0KLSAgfQot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gU3BlY2lhbGl6YXRpb25zIG9mIFJlYWRSZXBlYXRlZFBy
aW1pdGl2ZSBmb3IgdGhlIGZpeGVkIHNpemUgdHlwZXMsIHdoaWNoIHVzZQotLy8gdGhlIG9wdGlt
aXplZCBjb2RlIHBhdGguCi0jZGVmaW5lIFJFQURfUkVQRUFURURfRklYRURfU0laRV9QUklNSVRJ
VkUoQ1BQVFlQRSwgREVDTEFSRURfVFlQRSkgICAgICAgICAgICAgXAotdGVtcGxhdGUgPD4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLWlubGluZSBib29sIFdpcmVGb3JtYXRMaXRlOjpSZWFkUmVwZWF0ZWRQcmltaXRp
dmU8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIENQUFRZUEUsIFdpcmVGb3JtYXRM
aXRlOjpERUNMQVJFRF9UWVBFPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGludCB0YWdfc2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1aW50MzIgdGFnLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIFJlcGVhdGVkRmllbGQ8Q1BQVFlQRT4qIHZhbHVlcykg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIFJl
YWRSZXBlYXRlZEZpeGVkU2l6ZVByaW1pdGl2ZTwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgQ1BQVFlQRSwgV2lyZUZvcm1hdExpdGU6OkRFQ0xBUkVEX1RZUEU+
KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdGFnX3NpemUsIHRh
ZywgaW5wdXQsIHZhbHVlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLX0KLQotUkVBRF9SRVBFQVRFRF9GSVhFRF9TSVpFX1BSSU1JVElWRSh1aW50MzIsIFRZ
UEVfRklYRUQzMikKLVJFQURfUkVQRUFURURfRklYRURfU0laRV9QUklNSVRJVkUodWludDY0LCBU
WVBFX0ZJWEVENjQpCi1SRUFEX1JFUEVBVEVEX0ZJWEVEX1NJWkVfUFJJTUlUSVZFKGludDMyLCBU
WVBFX1NGSVhFRDMyKQotUkVBRF9SRVBFQVRFRF9GSVhFRF9TSVpFX1BSSU1JVElWRShpbnQ2NCwg
VFlQRV9TRklYRUQ2NCkKLVJFQURfUkVQRUFURURfRklYRURfU0laRV9QUklNSVRJVkUoZmxvYXQs
IFRZUEVfRkxPQVQpCi1SRUFEX1JFUEVBVEVEX0ZJWEVEX1NJWkVfUFJJTUlUSVZFKGRvdWJsZSwg
VFlQRV9ET1VCTEUpCi0KLSN1bmRlZiBSRUFEX1JFUEVBVEVEX0ZJWEVEX1NJWkVfUFJJTUlUSVZF
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDVHlwZSwgZW51bSBXaXJlRm9ybWF0TGl0ZTo6RmllbGRU
eXBlIERlY2xhcmVkVHlwZT4KLWJvb2wgV2lyZUZvcm1hdExpdGU6OlJlYWRSZXBlYXRlZFByaW1p
dGl2ZU5vSW5saW5lKAotICAgIGludCB0YWdfc2l6ZSwKLSAgICB1aW50MzIgdGFnLAotICAgIGlv
OjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICBSZXBlYXRlZEZpZWxkPENUeXBlPiogdmFs
dWUpIHsKLSAgcmV0dXJuIFJlYWRSZXBlYXRlZFByaW1pdGl2ZTxDVHlwZSwgRGVjbGFyZWRUeXBl
PigKLSAgICAgIHRhZ19zaXplLCB0YWcsIGlucHV0LCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDVHlwZSwgZW51bSBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIERlY2xhcmVkVHlw
ZT4KLWlubGluZSBib29sIFdpcmVGb3JtYXRMaXRlOjpSZWFkUGFja2VkUHJpbWl0aXZlKGlvOjpD
b2RlZElucHV0U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlcGVhdGVkRmllbGQ8Q1R5cGU+KiB2YWx1ZXMpIHsKLSAgdWludDMy
IGxlbmd0aDsKLSAgaWYgKCFpbnB1dC0+UmVhZFZhcmludDMyKCZsZW5ndGgpKSByZXR1cm4gZmFs
c2U7Ci0gIGlvOjpDb2RlZElucHV0U3RyZWFtOjpMaW1pdCBsaW1pdCA9IGlucHV0LT5QdXNoTGlt
aXQobGVuZ3RoKTsKLSAgd2hpbGUgKGlucHV0LT5CeXRlc1VudGlsTGltaXQoKSA+IDApIHsKLSAg
ICBDVHlwZSB2YWx1ZTsKLSAgICBpZiAoIVJlYWRQcmltaXRpdmU8Q1R5cGUsIERlY2xhcmVkVHlw
ZT4oaW5wdXQsICZ2YWx1ZSkpIHJldHVybiBmYWxzZTsKLSAgICB2YWx1ZXMtPkFkZCh2YWx1ZSk7
Ci0gIH0KLSAgaW5wdXQtPlBvcExpbWl0KGxpbWl0KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBDVHlwZSwgZW51bSBXaXJlRm9ybWF0TGl0ZTo6RmllbGRUeXBlIERl
Y2xhcmVkVHlwZT4KLWlubGluZSBib29sIFdpcmVGb3JtYXRMaXRlOjpSZWFkUGFja2VkRml4ZWRT
aXplUHJpbWl0aXZlKAotICAgIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwgUmVwZWF0ZWRG
aWVsZDxDVHlwZT4qIHZhbHVlcykgewotICB1aW50MzIgbGVuZ3RoOwotICBpZiAoIWlucHV0LT5S
ZWFkVmFyaW50MzIoJmxlbmd0aCkpIHJldHVybiBmYWxzZTsKLSAgY29uc3QgdWludDMyIG9sZF9l
bnRyaWVzID0gdmFsdWVzLT5zaXplKCk7Ci0gIGNvbnN0IHVpbnQzMiBuZXdfZW50cmllcyA9IGxl
bmd0aCAvIHNpemVvZihDVHlwZSk7Ci0gIGNvbnN0IHVpbnQzMiBuZXdfYnl0ZXMgPSBuZXdfZW50
cmllcyAqIHNpemVvZihDVHlwZSk7Ci0gIGlmIChuZXdfYnl0ZXMgIT0gbGVuZ3RoKSByZXR1cm4g
ZmFsc2U7Ci0gIC8vIFdlIHdvdWxkICpsaWtlKiB0byBwcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlciB0
byB3cml0ZSBpbnRvIChmb3IKLSAgLy8gc3BlZWQpLCBidXQgKm11c3QqIGF2b2lkIHBlcmZvcm1p
bmcgYSB2ZXJ5IGxhcmdlIGFsbG9jYXRpb24gZHVlCi0gIC8vIHRvIGEgbWFsaWNpb3VzIHVzZXIt
c3VwcGxpZWQgImxlbmd0aCIgYWJvdmUuICBTbyB3ZSBoYXZlIGEgZmFzdAotICAvLyBwYXRoIHRo
YXQgcHJlLWFsbG9jYXRlcyB3aGVuIHRoZSAibGVuZ3RoIiBpcyBsZXNzIHRoYW4gYSBib3VuZC4K
LSAgLy8gV2UgZGV0ZXJtaW5lIHRoZSBib3VuZCBieSBjYWxsaW5nIEJ5dGVzVW50aWxUb3RhbEJ5
dGVzTGltaXQoKSBhbmQKLSAgLy8gQnl0ZXNVbnRpbExpbWl0KCkuICBUaGVzZSByZXR1cm4gLTEg
dG8gbWVhbiAibm8gbGltaXQgc2V0Ii4KLSAgLy8gVGhlcmUgYXJlIGZvdXIgY2FzZXM6Ci0gIC8v
IFRvdGFsQnl0ZXNMaW1pdCAgTGltaXQKLSAgLy8gLTEgICAgICAgICAgICAgICAtMSAgICAgVXNl
IHNsb3cgcGF0aC4KLSAgLy8gLTEgICAgICAgICAgICAgICA+PSAwICAgVXNlIGZhc3QgcGF0aCBp
ZiBsZW5ndGggPD0gTGltaXQuCi0gIC8vID49IDAgICAgICAgICAgICAgLTEgICAgIFVzZSBzbG93
IHBhdGguCi0gIC8vID49IDAgICAgICAgICAgICAgPj0gMCAgIFVzZSBmYXN0IHBhdGggaWYgbGVu
Z3RoIDw9IG1pbihib3RoIGxpbWl0cykuCi0gIGludDY0IGJ5dGVzX2xpbWl0ID0gaW5wdXQtPkJ5
dGVzVW50aWxUb3RhbEJ5dGVzTGltaXQoKTsKLSAgaWYgKGJ5dGVzX2xpbWl0ID09IC0xKSB7Ci0g
ICAgYnl0ZXNfbGltaXQgPSBpbnB1dC0+Qnl0ZXNVbnRpbExpbWl0KCk7Ci0gIH0gZWxzZSB7Ci0g
ICAgYnl0ZXNfbGltaXQgPQotICAgICAgICBzdGQ6Om1pbihieXRlc19saW1pdCwgc3RhdGljX2Nh
c3Q8aW50NjQ+KGlucHV0LT5CeXRlc1VudGlsTGltaXQoKSkpOwotICB9Ci0gIGlmIChieXRlc19s
aW1pdCA+PSBuZXdfYnl0ZXMpIHsKLSAgICAvLyBGYXN0LXBhdGggdGhhdCBwcmUtYWxsb2NhdGVz
ICp2YWx1ZXMgdG8gdGhlIGZpbmFsIHNpemUuCi0jaWYgZGVmaW5lZChQUk9UT0JVRl9MSVRUTEVf
RU5ESUFOKQotICAgIHZhbHVlcy0+UmVzaXplKG9sZF9lbnRyaWVzICsgbmV3X2VudHJpZXMsIDAp
OwotICAgIC8vIHZhbHVlcy0+bXV0YWJsZV9kYXRhKCkgbWF5IGNoYW5nZSBhZnRlciBSZXNpemUo
KSwgc28gZG8gdGhpcyBhZnRlcjoKLSAgICB2b2lkKiBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4odmFsdWVzLT5tdXRhYmxlX2RhdGEoKSArIG9sZF9lbnRyaWVzKTsKLSAgICBpZiAoIWlu
cHV0LT5SZWFkUmF3KGRlc3QsIG5ld19ieXRlcykpIHsKLSAgICAgIHZhbHVlcy0+VHJ1bmNhdGUo
b2xkX2VudHJpZXMpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSNlbHNlCi0gICAgdmFs
dWVzLT5SZXNlcnZlKG9sZF9lbnRyaWVzICsgbmV3X2VudHJpZXMpOwotICAgIENUeXBlIHZhbHVl
OwotICAgIGZvciAodWludDMyIGkgPSAwOyBpIDwgbmV3X2VudHJpZXM7ICsraSkgewotICAgICAg
aWYgKCFSZWFkUHJpbWl0aXZlPENUeXBlLCBEZWNsYXJlZFR5cGU+KGlucHV0LCAmdmFsdWUpKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICB2YWx1ZXMtPkFkZEFscmVhZHlSZXNlcnZlZCh2YWx1ZSk7Ci0g
ICAgfQotI2VuZGlmCi0gIH0gZWxzZSB7Ci0gICAgLy8gVGhpcyBpcyB0aGUgc2xvdy1wYXRoIGNh
c2Ugd2hlcmUgImxlbmd0aCIgbWF5IGJlIHRvbyBsYXJnZSB0bwotICAgIC8vIHNhZmVseSBhbGxv
Y2F0ZS4gIFdlIHJlYWQgYXMgbXVjaCBhcyB3ZSBjYW4gaW50byAqdmFsdWVzCi0gICAgLy8gd2l0
aG91dCBwcmUtYWxsb2NhdGluZyAibGVuZ3RoIiBieXRlcy4KLSAgICBDVHlwZSB2YWx1ZTsKLSAg
ICBmb3IgKHVpbnQzMiBpID0gMDsgaSA8IG5ld19lbnRyaWVzOyArK2kpIHsKLSAgICAgIGlmICgh
UmVhZFByaW1pdGl2ZTxDVHlwZSwgRGVjbGFyZWRUeXBlPihpbnB1dCwgJnZhbHVlKSkgcmV0dXJu
IGZhbHNlOwotICAgICAgdmFsdWVzLT5BZGQodmFsdWUpOwotICAgIH0KLSAgfQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gU3BlY2lhbGl6YXRpb25zIG9mIFJlYWRQYWNrZWRQcmltaXRpdmUgZm9y
IHRoZSBmaXhlZCBzaXplIHR5cGVzLCB3aGljaCB1c2UKLS8vIGFuIG9wdGltaXplZCBjb2RlIHBh
dGguCi0jZGVmaW5lIFJFQURfUkVQRUFURURfUEFDS0VEX0ZJWEVEX1NJWkVfUFJJTUlUSVZFKENQ
UFRZUEUsIERFQ0xBUkVEX1RZUEUpICAgICAgXAotdGVtcGxhdGUgPD4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWlu
bGluZSBib29sIFdpcmVGb3JtYXRMaXRlOjpSZWFkUGFja2VkUHJpbWl0aXZlPCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIENQUFRZUEUsIFdpcmVGb3JtYXRMaXRlOjpERUNMQVJF
RF9UWVBFPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlvOjpD
b2RlZElucHV0U3RyZWFtKiBpbnB1dCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBSZXBlYXRlZEZpZWxkPENQUFRZUEU+KiB2YWx1ZXMpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiBSZWFkUGFj
a2VkRml4ZWRTaXplUHJpbWl0aXZlPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgQ1BQVFlQRSwgV2lyZUZvcm1hdExpdGU6OkRFQ0xBUkVEX1RZUEU+KGlu
cHV0LCB2YWx1ZXMpOyAgICAgICAgICAgICAgICAgIFwKLX0KLQotUkVBRF9SRVBFQVRFRF9QQUNL
RURfRklYRURfU0laRV9QUklNSVRJVkUodWludDMyLCBUWVBFX0ZJWEVEMzIpCi1SRUFEX1JFUEVB
VEVEX1BBQ0tFRF9GSVhFRF9TSVpFX1BSSU1JVElWRSh1aW50NjQsIFRZUEVfRklYRUQ2NCkKLVJF
QURfUkVQRUFURURfUEFDS0VEX0ZJWEVEX1NJWkVfUFJJTUlUSVZFKGludDMyLCBUWVBFX1NGSVhF
RDMyKQotUkVBRF9SRVBFQVRFRF9QQUNLRURfRklYRURfU0laRV9QUklNSVRJVkUoaW50NjQsIFRZ
UEVfU0ZJWEVENjQpCi1SRUFEX1JFUEVBVEVEX1BBQ0tFRF9GSVhFRF9TSVpFX1BSSU1JVElWRShm
bG9hdCwgVFlQRV9GTE9BVCkKLVJFQURfUkVQRUFURURfUEFDS0VEX0ZJWEVEX1NJWkVfUFJJTUlU
SVZFKGRvdWJsZSwgVFlQRV9ET1VCTEUpCi0KLSN1bmRlZiBSRUFEX1JFUEVBVEVEX1BBQ0tFRF9G
SVhFRF9TSVpFX1BSSU1JVElWRQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ1R5cGUsIGVudW0gV2ly
ZUZvcm1hdExpdGU6OkZpZWxkVHlwZSBEZWNsYXJlZFR5cGU+Ci1ib29sIFdpcmVGb3JtYXRMaXRl
OjpSZWFkUGFja2VkUHJpbWl0aXZlTm9JbmxpbmUoaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGVh
dGVkRmllbGQ8Q1R5cGU+KiB2YWx1ZXMpIHsKLSAgcmV0dXJuIFJlYWRQYWNrZWRQcmltaXRpdmU8
Q1R5cGUsIERlY2xhcmVkVHlwZT4oaW5wdXQsIHZhbHVlcyk7Ci19Ci0KLQotCi1pbmxpbmUgYm9v
bCBXaXJlRm9ybWF0TGl0ZTo6UmVhZEdyb3VwKGludCBmaWVsZF9udW1iZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUxpdGUqIHZhbHVl
KSB7Ci0gIGlmICghaW5wdXQtPkluY3JlbWVudFJlY3Vyc2lvbkRlcHRoKCkpIHJldHVybiBmYWxz
ZTsKLSAgaWYgKCF2YWx1ZS0+TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKGlucHV0KSkgcmV0
dXJuIGZhbHNlOwotICBpbnB1dC0+RGVjcmVtZW50UmVjdXJzaW9uRGVwdGgoKTsKLSAgLy8gTWFr
ZSBzdXJlIHRoZSBsYXN0IHRoaW5nIHJlYWQgd2FzIGFuIGVuZCB0YWcgZm9yIHRoaXMgZ3JvdXAu
Ci0gIGlmICghaW5wdXQtPkxhc3RUYWdXYXMoTWFrZVRhZyhmaWVsZF9udW1iZXIsIFdJUkVUWVBF
X0VORF9HUk9VUCkpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwot
fQotaW5saW5lIGJvb2wgV2lyZUZvcm1hdExpdGU6OlJlYWRNZXNzYWdlKGlvOjpDb2RlZElucHV0
U3RyZWFtKiBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
ZXNzYWdlTGl0ZSogdmFsdWUpIHsKLSAgdWludDMyIGxlbmd0aDsKLSAgaWYgKCFpbnB1dC0+UmVh
ZFZhcmludDMyKCZsZW5ndGgpKSByZXR1cm4gZmFsc2U7Ci0gIHN0ZDo6cGFpcjxpbzo6Q29kZWRJ
bnB1dFN0cmVhbTo6TGltaXQsIGludD4gcCA9Ci0gICAgICBpbnB1dC0+SW5jcmVtZW50UmVjdXJz
aW9uRGVwdGhBbmRQdXNoTGltaXQobGVuZ3RoKTsKLSAgaWYgKHAuc2Vjb25kIDwgMCB8fCAhdmFs
dWUtPk1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbShpbnB1dCkpIHJldHVybiBmYWxzZTsKLSAg
Ly8gTWFrZSBzdXJlIHRoYXQgcGFyc2luZyBzdG9wcGVkIHdoZW4gdGhlIGxpbWl0IHdhcyBoaXQs
IG5vdCBhdCBhbiBlbmRncm91cAotICAvLyB0YWcuCi0gIHJldHVybiBpbnB1dC0+RGVjcmVtZW50
UmVjdXJzaW9uRGVwdGhBbmRQb3BMaW1pdChwLmZpcnN0KTsKLX0KLQotLy8gV2UgbmFtZSB0aGUg
dGVtcGxhdGUgcGFyYW1ldGVyIHNvbWV0aGluZyBsb25nIGFuZCBleHRyZW1lbHkgdW5saWtlbHkg
dG8gb2NjdXIKLS8vIGVsc2V3aGVyZSBiZWNhdXNlIGEgKnF1YWxpZmllZCogbWVtYmVyIGFjY2Vz
cyBleHByZXNzaW9uIGRlc2lnbmVkIHRvIGF2b2lkCi0vLyB2aXJ0dWFsIGRpc3BhdGNoLCBDKysw
MyBbYmFzaWMubG9va3VwLmNsYXNzcmVmXSAzLjQuNS80IHJlcXVpcmVzIHRoYXQgdGhlCi0vLyBu
YW1lIG9mIHRoZSBxdWFsaWZ5aW5nIGNsYXNzIHRvIGJlIGxvb2tlZCB1cCBib3RoIGluIHRoZSBj
b250ZXh0IG9mIHRoZSBmdWxsCi0vLyBleHByZXNzaW9uIChmaW5kaW5nIHRoZSB0ZW1wbGF0ZSBw
YXJhbWV0ZXIpIGFuZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgb2JqZWN0Ci0vLyB3aG9zZSBtZW1i
ZXIgd2UgYXJlIGFjY2Vzc2luZy4gVGhpcyBjb3VsZCBwb3RlbnRpYWxseSBmaW5kIGEgbmVzdGVk
IHR5cGUKLS8vIHdpdGhpbiB0aGF0IG9iamVjdC4gVGhlIHN0YW5kYXJkIGdvZXMgb24gdG8gcmVx
dWlyZSB0aGVzZSBuYW1lcyB0byByZWZlciB0bwotLy8gdGhlIHNhbWUgZW50aXR5LCB3aGljaCB0
aGlzIGNvbGxpc2lvbiB3b3VsZCB2aW9sYXRlLiBUaGUgbGFjayBvZiBhIHNhZmUgd2F5Ci0vLyB0
byBhdm9pZCB0aGlzIGNvbGxpc2lvbiBhcHBlYXJzIHRvIGJlIGEgZGVmZWN0IGluIHRoZSBzdGFu
ZGFyZCwgYnV0IHVudGlsIGl0Ci0vLyBpcyBjb3JyZWN0ZWQsIHdlIGNob29zZSB0aGUgbmFtZSB0
byBhdm9pZCBhY2NpZGVudGFsIGNvbGxpc2lvbnMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXNzYWdl
VHlwZV9Xb3JrQXJvdW5kQ3BwTG9va3VwRGVmZWN0PgotaW5saW5lIGJvb2wgV2lyZUZvcm1hdExp
dGU6OlJlYWRHcm91cE5vVmlydHVhbCgKLSAgICBpbnQgZmllbGRfbnVtYmVyLCBpbzo6Q29kZWRJ
bnB1dFN0cmVhbSogaW5wdXQsCi0gICAgTWVzc2FnZVR5cGVfV29ya0Fyb3VuZENwcExvb2t1cERl
ZmVjdCogdmFsdWUpIHsKLSAgaWYgKCFpbnB1dC0+SW5jcmVtZW50UmVjdXJzaW9uRGVwdGgoKSkg
cmV0dXJuIGZhbHNlOwotICBpZiAoIXZhbHVlLT4KLSAgICAgIE1lc3NhZ2VUeXBlX1dvcmtBcm91
bmRDcHBMb29rdXBEZWZlY3Q6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbShpbnB1dCkpCi0g
ICAgcmV0dXJuIGZhbHNlOwotICBpbnB1dC0+VW5zYWZlRGVjcmVtZW50UmVjdXJzaW9uRGVwdGgo
KTsKLSAgLy8gTWFrZSBzdXJlIHRoZSBsYXN0IHRoaW5nIHJlYWQgd2FzIGFuIGVuZCB0YWcgZm9y
IHRoaXMgZ3JvdXAuCi0gIGlmICghaW5wdXQtPkxhc3RUYWdXYXMoTWFrZVRhZyhmaWVsZF9udW1i
ZXIsIFdJUkVUWVBFX0VORF9HUk9VUCkpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJl
dHVybiB0cnVlOwotfQotdGVtcGxhdGU8dHlwZW5hbWUgTWVzc2FnZVR5cGVfV29ya0Fyb3VuZENw
cExvb2t1cERlZmVjdD4KLWlubGluZSBib29sIFdpcmVGb3JtYXRMaXRlOjpSZWFkR3JvdXBOb1Zp
cnR1YWxOb1JlY3Vyc2lvbkRlcHRoKAotICAgIGludCBmaWVsZF9udW1iZXIsIGlvOjpDb2RlZElu
cHV0U3RyZWFtKiBpbnB1dCwKLSAgICBNZXNzYWdlVHlwZV9Xb3JrQXJvdW5kQ3BwTG9va3VwRGVm
ZWN0KiB2YWx1ZSkgewotICByZXR1cm4gdmFsdWUtPk1lc3NhZ2VUeXBlX1dvcmtBcm91bmRDcHBM
b29rdXBEZWZlY3Q6OgotICAgICAgICAgICAgIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbShp
bnB1dCkgJiYKLSAgICAgICAgIGlucHV0LT5MYXN0VGFnV2FzKE1ha2VUYWcoZmllbGRfbnVtYmVy
LCBXSVJFVFlQRV9FTkRfR1JPVVApKTsKLX0KLXRlbXBsYXRlPHR5cGVuYW1lIE1lc3NhZ2VUeXBl
X1dvcmtBcm91bmRDcHBMb29rdXBEZWZlY3Q+Ci1pbmxpbmUgYm9vbCBXaXJlRm9ybWF0TGl0ZTo6
UmVhZE1lc3NhZ2VOb1ZpcnR1YWwoCi0gICAgaW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0LCBN
ZXNzYWdlVHlwZV9Xb3JrQXJvdW5kQ3BwTG9va3VwRGVmZWN0KiB2YWx1ZSkgewotICB1aW50MzIg
bGVuZ3RoOwotICBpZiAoIWlucHV0LT5SZWFkVmFyaW50MzIoJmxlbmd0aCkpIHJldHVybiBmYWxz
ZTsKLSAgc3RkOjpwYWlyPGlvOjpDb2RlZElucHV0U3RyZWFtOjpMaW1pdCwgaW50PiBwID0KLSAg
ICAgIGlucHV0LT5JbmNyZW1lbnRSZWN1cnNpb25EZXB0aEFuZFB1c2hMaW1pdChsZW5ndGgpOwot
ICBpZiAocC5zZWNvbmQgPCAwIHx8ICF2YWx1ZS0+Ci0gICAgICBNZXNzYWdlVHlwZV9Xb3JrQXJv
dW5kQ3BwTG9va3VwRGVmZWN0OjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oaW5wdXQpKQot
ICAgIHJldHVybiBmYWxzZTsKLSAgLy8gTWFrZSBzdXJlIHRoYXQgcGFyc2luZyBzdG9wcGVkIHdo
ZW4gdGhlIGxpbWl0IHdhcyBoaXQsIG5vdCBhdCBhbiBlbmRncm91cAotICAvLyB0YWcuCi0gIHJl
dHVybiBpbnB1dC0+RGVjcmVtZW50UmVjdXJzaW9uRGVwdGhBbmRQb3BMaW1pdChwLmZpcnN0KTsK
LX0KLXRlbXBsYXRlPHR5cGVuYW1lIE1lc3NhZ2VUeXBlX1dvcmtBcm91bmRDcHBMb29rdXBEZWZl
Y3Q+Ci1pbmxpbmUgYm9vbCBXaXJlRm9ybWF0TGl0ZTo6UmVhZE1lc3NhZ2VOb1ZpcnR1YWxOb1Jl
Y3Vyc2lvbkRlcHRoKAotICAgIGlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCwgTWVzc2FnZVR5
cGVfV29ya0Fyb3VuZENwcExvb2t1cERlZmVjdCogdmFsdWUpIHsKLSAgaW86OkNvZGVkSW5wdXRT
dHJlYW06OkxpbWl0IG9sZF9saW1pdCA9IGlucHV0LT5SZWFkTGVuZ3RoQW5kUHVzaExpbWl0KCk7
Ci0gIGlmICghdmFsdWUtPgotICAgICAgTWVzc2FnZVR5cGVfV29ya0Fyb3VuZENwcExvb2t1cERl
ZmVjdDo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKGlucHV0KSkKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIC8vIE1ha2Ugc3VyZSB0aGF0IHBhcnNpbmcgc3RvcHBlZCB3aGVuIHRoZSBsaW1pdCB3
YXMgaGl0LCBub3QgYXQgYW4gZW5kZ3JvdXAKLSAgLy8gdGFnLgotICByZXR1cm4gaW5wdXQtPkNo
ZWNrRW50aXJlTWVzc2FnZUNvbnN1bWVkQW5kUG9wTGltaXQob2xkX2xpbWl0KTsKLX0KLQotLy8g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotCi1pbmxpbmUgdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVUYWcoaW50IGZp
ZWxkX251bWJlciwgV2lyZVR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBvdXRwdXQtPldyaXRl
VGFnKE1ha2VUYWcoZmllbGRfbnVtYmVyLCB0eXBlKSk7Ci19Ci0KLWlubGluZSB2b2lkIFdpcmVG
b3JtYXRMaXRlOjpXcml0ZUludDMyTm9UYWcoaW50MzIgdmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0
KSB7Ci0gIG91dHB1dC0+V3JpdGVWYXJpbnQzMlNpZ25FeHRlbmRlZCh2YWx1ZSk7Ci19Ci1pbmxp
bmUgdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQ2NE5vVGFnKGludDY0IHZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6Q29kZWRPdXRwdXRT
dHJlYW0qIG91dHB1dCkgewotICBvdXRwdXQtPldyaXRlVmFyaW50NjQoc3RhdGljX2Nhc3Q8dWlu
dDY0Pih2YWx1ZSkpOwotfQotaW5saW5lIHZvaWQgV2lyZUZvcm1hdExpdGU6OldyaXRlVUludDMy
Tm9UYWcodWludDMyIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgb3V0cHV0LT5Xcml0
ZVZhcmludDMyKHZhbHVlKTsKLX0KLWlubGluZSB2b2lkIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVVJ
bnQ2NE5vVGFnKHVpbnQ2NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIG91dHB1dC0+
V3JpdGVWYXJpbnQ2NCh2YWx1ZSk7Ci19Ci1pbmxpbmUgdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3Jp
dGVTSW50MzJOb1RhZyhpbnQzMiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIG91dHB1
dC0+V3JpdGVWYXJpbnQzMihaaWdaYWdFbmNvZGUzMih2YWx1ZSkpOwotfQotaW5saW5lIHZvaWQg
V2lyZUZvcm1hdExpdGU6OldyaXRlU0ludDY0Tm9UYWcoaW50NjQgdmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0q
IG91dHB1dCkgewotICBvdXRwdXQtPldyaXRlVmFyaW50NjQoWmlnWmFnRW5jb2RlNjQodmFsdWUp
KTsKLX0KLWlubGluZSB2b2lkIFdpcmVGb3JtYXRMaXRlOjpXcml0ZUZpeGVkMzJOb1RhZyh1aW50
MzIgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgb3V0cHV0LT5Xcml0ZUxpdHRsZUVu
ZGlhbjMyKHZhbHVlKTsKLX0KLWlubGluZSB2b2lkIFdpcmVGb3JtYXRMaXRlOjpXcml0ZUZpeGVk
NjROb1RhZyh1aW50NjQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIHsKLSAgb3V0cHV0LT5X
cml0ZUxpdHRsZUVuZGlhbjY0KHZhbHVlKTsKLX0KLWlubGluZSB2b2lkIFdpcmVGb3JtYXRMaXRl
OjpXcml0ZVNGaXhlZDMyTm9UYWcoaW50MzIgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7
Ci0gIG91dHB1dC0+V3JpdGVMaXR0bGVFbmRpYW4zMihzdGF0aWNfY2FzdDx1aW50MzI+KHZhbHVl
KSk7Ci19Ci1pbmxpbmUgdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTRml4ZWQ2NE5vVGFnKGlu
dDY0IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBvdXRwdXQtPldyaXRlTGl0dGxl
RW5kaWFuNjQoc3RhdGljX2Nhc3Q8dWludDY0Pih2YWx1ZSkpOwotfQotaW5saW5lIHZvaWQgV2ly
ZUZvcm1hdExpdGU6OldyaXRlRmxvYXROb1RhZyhmbG9hdCB2YWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRw
dXQpIHsKLSAgb3V0cHV0LT5Xcml0ZUxpdHRsZUVuZGlhbjMyKEVuY29kZUZsb2F0KHZhbHVlKSk7
Ci19Ci1pbmxpbmUgdm9pZCBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVEb3VibGVOb1RhZyhkb3VibGUg
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbzo6
Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBvdXRwdXQtPldyaXRlTGl0dGxlRW5kaWFu
NjQoRW5jb2RlRG91YmxlKHZhbHVlKSk7Ci19Ci1pbmxpbmUgdm9pZCBXaXJlRm9ybWF0TGl0ZTo6
V3JpdGVCb29sTm9UYWcoYm9vbCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBvdXRwdXQt
PldyaXRlVmFyaW50MzIodmFsdWUgPyAxIDogMCk7Ci19Ci1pbmxpbmUgdm9pZCBXaXJlRm9ybWF0
TGl0ZTo6V3JpdGVFbnVtTm9UYWcoaW50IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSB7Ci0gIG91
dHB1dC0+V3JpdGVWYXJpbnQzMlNpZ25FeHRlbmRlZCh2YWx1ZSk7Ci19Ci0KLS8vIFNlZSBjb21t
ZW50IG9uIFJlYWRHcm91cE5vVmlydHVhbCB0byB1bmRlcnN0YW5kIHRoZSBuZWVkIGZvciB0aGlz
IHRlbXBsYXRlCi0vLyBwYXJhbWV0ZXIgbmFtZS4KLXRlbXBsYXRlPHR5cGVuYW1lIE1lc3NhZ2VU
eXBlX1dvcmtBcm91bmRDcHBMb29rdXBEZWZlY3Q+Ci1pbmxpbmUgdm9pZCBXaXJlRm9ybWF0TGl0
ZTo6V3JpdGVHcm91cE5vVmlydHVhbCgKLSAgICBpbnQgZmllbGRfbnVtYmVyLCBjb25zdCBNZXNz
YWdlVHlwZV9Xb3JrQXJvdW5kQ3BwTG9va3VwRGVmZWN0JiB2YWx1ZSwKLSAgICBpbzo6Q29kZWRP
dXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBXcml0ZVRhZyhmaWVsZF9udW1iZXIsIFdJUkVUWVBF
X1NUQVJUX0dST1VQLCBvdXRwdXQpOwotICB2YWx1ZS5NZXNzYWdlVHlwZV9Xb3JrQXJvdW5kQ3Bw
TG9va3VwRGVmZWN0OjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMob3V0cHV0KTsKLSAgV3JpdGVU
YWcoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9FTkRfR1JPVVAsIG91dHB1dCk7Ci19Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBNZXNzYWdlVHlwZV9Xb3JrQXJvdW5kQ3BwTG9va3VwRGVmZWN0PgotaW5saW5l
IHZvaWQgV2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU5vVmlydHVhbCgKLSAgICBpbnQgZmll
bGRfbnVtYmVyLCBjb25zdCBNZXNzYWdlVHlwZV9Xb3JrQXJvdW5kQ3BwTG9va3VwRGVmZWN0JiB2
YWx1ZSwKLSAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgewotICBXcml0ZVRhZyhm
aWVsZF9udW1iZXIsIFdJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQsIG91dHB1dCk7Ci0gIG91dHB1
dC0+V3JpdGVWYXJpbnQzMigKLSAgICAgIHZhbHVlLk1lc3NhZ2VUeXBlX1dvcmtBcm91bmRDcHBM
b29rdXBEZWZlY3Q6OkdldENhY2hlZFNpemUoKSk7Ci0gIHZhbHVlLk1lc3NhZ2VUeXBlX1dvcmtB
cm91bmRDcHBMb29rdXBEZWZlY3Q6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhvdXRwdXQpOwot
fQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLWlubGluZSB1aW50OCogV2lyZUZvcm1hdExpdGU6OldyaXRl
VGFnVG9BcnJheShpbnQgZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdpcmVUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDgqIHRhcmdldCkgewotICByZXR1cm4gaW86OkNv
ZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVRhZ1RvQXJyYXkoTWFrZVRhZyhmaWVsZF9udW1iZXIsIHR5
cGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0KTsKLX0KLQotaW5saW5lIHVpbnQ4KiBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQzMk5vVGFn
VG9BcnJheShpbnQzMiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDgqIHRhcmdldCkgewotICByZXR1cm4gaW86OkNvZGVkT3V0
cHV0U3RyZWFtOjpXcml0ZVZhcmludDMyU2lnbkV4dGVuZGVkVG9BcnJheSh2YWx1ZSwgdGFyZ2V0
KTsKLX0KLWlubGluZSB1aW50OCogV2lyZUZvcm1hdExpdGU6OldyaXRlSW50NjROb1RhZ1RvQXJy
YXkoaW50NjQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQ4KiB0YXJnZXQpIHsKLSAgcmV0dXJuIGlvOjpDb2RlZE91dHB1dFN0
cmVhbTo6V3JpdGVWYXJpbnQ2NFRvQXJyYXkoCi0gICAgICBzdGF0aWNfY2FzdDx1aW50NjQ+KHZh
bHVlKSwgdGFyZ2V0KTsKLX0KLWlubGluZSB1aW50OCogV2lyZUZvcm1hdExpdGU6OldyaXRlVUlu
dDMyTm9UYWdUb0FycmF5KHVpbnQzMiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4KiB0YXJnZXQpIHsKLSAgcmV0dXJuIGlv
OjpDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVWYXJpbnQzMlRvQXJyYXkodmFsdWUsIHRhcmdldCk7
Ci19Ci1pbmxpbmUgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVVJbnQ2NE5vVGFnVG9BcnJh
eSh1aW50NjQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50OCogdGFyZ2V0KSB7Ci0gIHJldHVybiBpbzo6Q29kZWRPdXRwdXRT
dHJlYW06OldyaXRlVmFyaW50NjRUb0FycmF5KHZhbHVlLCB0YXJnZXQpOwotfQotaW5saW5lIHVp
bnQ4KiBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTSW50MzJOb1RhZ1RvQXJyYXkoaW50MzIgdmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50OCogdGFyZ2V0KSB7Ci0gIHJldHVybiBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OldyaXRlVmFy
aW50MzJUb0FycmF5KFppZ1phZ0VuY29kZTMyKHZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KTsKLX0KLWlubGluZSB1aW50
OCogV2lyZUZvcm1hdExpdGU6OldyaXRlU0ludDY0Tm9UYWdUb0FycmF5KGludDY0IHZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDgqIHRhcmdldCkgewotICByZXR1cm4gaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVZhcmlu
dDY0VG9BcnJheShaaWdaYWdFbmNvZGU2NCh2YWx1ZSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCk7Ci19Ci1pbmxpbmUgdWludDgq
IFdpcmVGb3JtYXRMaXRlOjpXcml0ZUZpeGVkMzJOb1RhZ1RvQXJyYXkodWludDMyIHZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQ4KiB0YXJnZXQpIHsKLSAgcmV0dXJuIGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVMaXR0
bGVFbmRpYW4zMlRvQXJyYXkodmFsdWUsIHRhcmdldCk7Ci19Ci1pbmxpbmUgdWludDgqIFdpcmVG
b3JtYXRMaXRlOjpXcml0ZUZpeGVkNjROb1RhZ1RvQXJyYXkodWludDY0IHZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4KiB0
YXJnZXQpIHsKLSAgcmV0dXJuIGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVMaXR0bGVFbmRp
YW42NFRvQXJyYXkodmFsdWUsIHRhcmdldCk7Ci19Ci1pbmxpbmUgdWludDgqIFdpcmVGb3JtYXRM
aXRlOjpXcml0ZVNGaXhlZDMyTm9UYWdUb0FycmF5KGludDMyIHZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OCogdGFyZ2V0
KSB7Ci0gIHJldHVybiBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OldyaXRlTGl0dGxlRW5kaWFuMzJU
b0FycmF5KAotICAgICAgc3RhdGljX2Nhc3Q8dWludDMyPih2YWx1ZSksIHRhcmdldCk7Ci19Ci1p
bmxpbmUgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVNGaXhlZDY0Tm9UYWdUb0FycmF5KGlu
dDY0IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50OCogdGFyZ2V0KSB7Ci0gIHJldHVybiBpbzo6Q29kZWRPdXRwdXRTdHJl
YW06OldyaXRlTGl0dGxlRW5kaWFuNjRUb0FycmF5KAotICAgICAgc3RhdGljX2Nhc3Q8dWludDY0
Pih2YWx1ZSksIHRhcmdldCk7Ci19Ci1pbmxpbmUgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpXcml0
ZUZsb2F0Tm9UYWdUb0FycmF5KGZsb2F0IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OCogdGFyZ2V0KSB7Ci0gIHJldHVybiBp
bzo6Q29kZWRPdXRwdXRTdHJlYW06OldyaXRlTGl0dGxlRW5kaWFuMzJUb0FycmF5KEVuY29kZUZs
b2F0KHZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0KTsKLX0KLWlubGluZSB1aW50OCogV2lyZUZvcm1hdExpdGU6
OldyaXRlRG91YmxlTm9UYWdUb0FycmF5KGRvdWJsZSB2YWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4KiB0YXJnZXQpIHsKLSAg
cmV0dXJuIGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVMaXR0bGVFbmRpYW42NFRvQXJyYXko
RW5jb2RlRG91YmxlKHZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KTsKLX0KLWlubGluZSB1aW50OCogV2lyZUZv
cm1hdExpdGU6OldyaXRlQm9vbE5vVGFnVG9BcnJheShib29sIHZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4KiB0YXJnZXQpIHsK
LSAgcmV0dXJuIGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6V3JpdGVWYXJpbnQzMlRvQXJyYXkodmFs
dWUgPyAxIDogMCwgdGFyZ2V0KTsKLX0KLWlubGluZSB1aW50OCogV2lyZUZvcm1hdExpdGU6Oldy
aXRlRW51bU5vVGFnVG9BcnJheShpbnQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDgqIHRhcmdldCkgewotICByZXR1cm4gaW86
OkNvZGVkT3V0cHV0U3RyZWFtOjpXcml0ZVZhcmludDMyU2lnbkV4dGVuZGVkVG9BcnJheSh2YWx1
ZSwgdGFyZ2V0KTsKLX0KLQotaW5saW5lIHVpbnQ4KiBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQz
MlRvQXJyYXkoaW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludDMyIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDgqIHRhcmdldCkgewotICB0YXJnZXQgPSBXcml0
ZVRhZ1RvQXJyYXkoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9WQVJJTlQsIHRhcmdldCk7Ci0gIHJl
dHVybiBXcml0ZUludDMyTm9UYWdUb0FycmF5KHZhbHVlLCB0YXJnZXQpOwotfQotaW5saW5lIHVp
bnQ4KiBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQ2NFRvQXJyYXkoaW50IGZpZWxkX251bWJlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0IHZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDgqIHRhcmdldCkgewotICB0YXJnZXQgPSBXcml0ZVRhZ1RvQXJyYXkoZmllbGRfbnVtYmVyLCBX
SVJFVFlQRV9WQVJJTlQsIHRhcmdldCk7Ci0gIHJldHVybiBXcml0ZUludDY0Tm9UYWdUb0FycmF5
KHZhbHVlLCB0YXJnZXQpOwotfQotaW5saW5lIHVpbnQ4KiBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVV
SW50MzJUb0FycmF5KGludCBmaWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyIHZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4KiB0YXJnZXQpIHsKLSAgdGFyZ2V0
ID0gV3JpdGVUYWdUb0FycmF5KGZpZWxkX251bWJlciwgV0lSRVRZUEVfVkFSSU5ULCB0YXJnZXQp
OwotICByZXR1cm4gV3JpdGVVSW50MzJOb1RhZ1RvQXJyYXkodmFsdWUsIHRhcmdldCk7Ci19Ci1p
bmxpbmUgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVVJbnQ2NFRvQXJyYXkoaW50IGZpZWxk
X251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50NjQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDgqIHRhcmdldCkgewotICB0YXJnZXQgPSBXcml0ZVRhZ1RvQXJyYXkoZmll
bGRfbnVtYmVyLCBXSVJFVFlQRV9WQVJJTlQsIHRhcmdldCk7Ci0gIHJldHVybiBXcml0ZVVJbnQ2
NE5vVGFnVG9BcnJheSh2YWx1ZSwgdGFyZ2V0KTsKLX0KLWlubGluZSB1aW50OCogV2lyZUZvcm1h
dExpdGU6OldyaXRlU0ludDMyVG9BcnJheShpbnQgZmllbGRfbnVtYmVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIHZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4KiB0YXJnZXQp
IHsKLSAgdGFyZ2V0ID0gV3JpdGVUYWdUb0FycmF5KGZpZWxkX251bWJlciwgV0lSRVRZUEVfVkFS
SU5ULCB0YXJnZXQpOwotICByZXR1cm4gV3JpdGVTSW50MzJOb1RhZ1RvQXJyYXkodmFsdWUsIHRh
cmdldCk7Ci19Ci1pbmxpbmUgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVNJbnQ2NFRvQXJy
YXkoaW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQ2NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50OCogdGFyZ2V0KSB7Ci0gIHRhcmdldCA9IFdyaXRlVGFn
VG9BcnJheShmaWVsZF9udW1iZXIsIFdJUkVUWVBFX1ZBUklOVCwgdGFyZ2V0KTsKLSAgcmV0dXJu
IFdyaXRlU0ludDY0Tm9UYWdUb0FycmF5KHZhbHVlLCB0YXJnZXQpOwotfQotaW5saW5lIHVpbnQ4
KiBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVGaXhlZDMyVG9BcnJheShpbnQgZmllbGRfbnVtYmVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzIg
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQ4KiB0YXJnZXQpIHsKLSAgdGFyZ2V0ID0gV3JpdGVUYWdUb0FycmF5KGZpZWxkX251bWJl
ciwgV0lSRVRZUEVfRklYRUQzMiwgdGFyZ2V0KTsKLSAgcmV0dXJuIFdyaXRlRml4ZWQzMk5vVGFn
VG9BcnJheSh2YWx1ZSwgdGFyZ2V0KTsKLX0KLWlubGluZSB1aW50OCogV2lyZUZvcm1hdExpdGU6
OldyaXRlRml4ZWQ2NFRvQXJyYXkoaW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0IHZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OCogdGFyZ2V0KSB7
Ci0gIHRhcmdldCA9IFdyaXRlVGFnVG9BcnJheShmaWVsZF9udW1iZXIsIFdJUkVUWVBFX0ZJWEVE
NjQsIHRhcmdldCk7Ci0gIHJldHVybiBXcml0ZUZpeGVkNjROb1RhZ1RvQXJyYXkodmFsdWUsIHRh
cmdldCk7Ci19Ci1pbmxpbmUgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpXcml0ZVNGaXhlZDMyVG9B
cnJheShpbnQgZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50MzIgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OCogdGFyZ2V0KSB7Ci0gIHRhcmdldCA9IFdy
aXRlVGFnVG9BcnJheShmaWVsZF9udW1iZXIsIFdJUkVUWVBFX0ZJWEVEMzIsIHRhcmdldCk7Ci0g
IHJldHVybiBXcml0ZVNGaXhlZDMyTm9UYWdUb0FycmF5KHZhbHVlLCB0YXJnZXQpOwotfQotaW5s
aW5lIHVpbnQ4KiBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTRml4ZWQ2NFRvQXJyYXkoaW50IGZpZWxk
X251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludDY0IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDgqIHRhcmdldCkgewotICB0YXJnZXQgPSBXcml0ZVRhZ1RvQXJyYXko
ZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9GSVhFRDY0LCB0YXJnZXQpOwotICByZXR1cm4gV3JpdGVT
Rml4ZWQ2NE5vVGFnVG9BcnJheSh2YWx1ZSwgdGFyZ2V0KTsKLX0KLWlubGluZSB1aW50OCogV2ly
ZUZvcm1hdExpdGU6OldyaXRlRmxvYXRUb0FycmF5KGludCBmaWVsZF9udW1iZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4KiB0YXJn
ZXQpIHsKLSAgdGFyZ2V0ID0gV3JpdGVUYWdUb0FycmF5KGZpZWxkX251bWJlciwgV0lSRVRZUEVf
RklYRUQzMiwgdGFyZ2V0KTsKLSAgcmV0dXJuIFdyaXRlRmxvYXROb1RhZ1RvQXJyYXkodmFsdWUs
IHRhcmdldCk7Ci19Ci1pbmxpbmUgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpXcml0ZURvdWJsZVRv
QXJyYXkoaW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDgqIHRhcmdldCkgewotICB0YXJnZXQgPSBXcml0
ZVRhZ1RvQXJyYXkoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9GSVhFRDY0LCB0YXJnZXQpOwotICBy
ZXR1cm4gV3JpdGVEb3VibGVOb1RhZ1RvQXJyYXkodmFsdWUsIHRhcmdldCk7Ci19Ci1pbmxpbmUg
dWludDgqIFdpcmVGb3JtYXRMaXRlOjpXcml0ZUJvb2xUb0FycmF5KGludCBmaWVsZF9udW1iZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4
KiB0YXJnZXQpIHsKLSAgdGFyZ2V0ID0gV3JpdGVUYWdUb0FycmF5KGZpZWxkX251bWJlciwgV0lS
RVRZUEVfVkFSSU5ULCB0YXJnZXQpOwotICByZXR1cm4gV3JpdGVCb29sTm9UYWdUb0FycmF5KHZh
bHVlLCB0YXJnZXQpOwotfQotaW5saW5lIHVpbnQ4KiBXaXJlRm9ybWF0TGl0ZTo6V3JpdGVFbnVt
VG9BcnJheShpbnQgZmllbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQ4KiB0YXJnZXQpIHsKLSAgdGFyZ2V0ID0gV3JpdGVUYWdU
b0FycmF5KGZpZWxkX251bWJlciwgV0lSRVRZUEVfVkFSSU5ULCB0YXJnZXQpOwotICByZXR1cm4g
V3JpdGVFbnVtTm9UYWdUb0FycmF5KHZhbHVlLCB0YXJnZXQpOwotfQotCi1pbmxpbmUgdWludDgq
IFdpcmVGb3JtYXRMaXRlOjpXcml0ZVN0cmluZ1RvQXJyYXkoaW50IGZpZWxkX251bWJlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmcmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQ4KiB0YXJnZXQpIHsKLSAgLy8gU3RyaW5nIGlzIGZvciBVVEYtOCB0ZXh0IG9ubHkK
LSAgLy8gV0FSTklORzogIEluIHdpcmVfZm9ybWF0LmNjLCBib3RoIHN0cmluZ3MgYW5kIGJ5dGVz
IGFyZSBoYW5kbGVkIGJ5Ci0gIC8vICAgV3JpdGVTdHJpbmcoKSB0byBhdm9pZCBjb2RlIGR1cGxp
Y2F0aW9uLiAgSWYgdGhlIGltcGxlbWVudGF0aW9ucyBiZWNvbWUKLSAgLy8gICBkaWZmZXJlbnQs
IHlvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIHRoYXQgdXNhZ2UuCi0gIHRhcmdldCA9IFdyaXRlVGFn
VG9BcnJheShmaWVsZF9udW1iZXIsIFdJUkVUWVBFX0xFTkdUSF9ERUxJTUlURUQsIHRhcmdldCk7
Ci0gIHJldHVybiBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OldyaXRlU3RyaW5nV2l0aFNpemVUb0Fy
cmF5KHZhbHVlLCB0YXJnZXQpOwotfQotaW5saW5lIHVpbnQ4KiBXaXJlRm9ybWF0TGl0ZTo6V3Jp
dGVCeXRlc1RvQXJyYXkoaW50IGZpZWxkX251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgdmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OCogdGFyZ2V0KSB7Ci0g
IHRhcmdldCA9IFdyaXRlVGFnVG9BcnJheShmaWVsZF9udW1iZXIsIFdJUkVUWVBFX0xFTkdUSF9E
RUxJTUlURUQsIHRhcmdldCk7Ci0gIHJldHVybiBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OldyaXRl
U3RyaW5nV2l0aFNpemVUb0FycmF5KHZhbHVlLCB0YXJnZXQpOwotfQotCi0KLWlubGluZSB1aW50
OCogV2lyZUZvcm1hdExpdGU6OldyaXRlR3JvdXBUb0FycmF5KGludCBmaWVsZF9udW1iZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNZXNz
YWdlTGl0ZSYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50OCogdGFyZ2V0KSB7Ci0gIHRhcmdldCA9IFdyaXRlVGFnVG9BcnJheShmaWVs
ZF9udW1iZXIsIFdJUkVUWVBFX1NUQVJUX0dST1VQLCB0YXJnZXQpOwotICB0YXJnZXQgPSB2YWx1
ZS5TZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KHRhcmdldCk7Ci0gIHJldHVybiBXcml0
ZVRhZ1RvQXJyYXkoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9FTkRfR1JPVVAsIHRhcmdldCk7Ci19
Ci1pbmxpbmUgdWludDgqIFdpcmVGb3JtYXRMaXRlOjpXcml0ZU1lc3NhZ2VUb0FycmF5KGludCBm
aWVsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE1lc3NhZ2VMaXRlJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDgqIHRhcmdldCkgewotICB0YXJnZXQgPSBX
cml0ZVRhZ1RvQXJyYXkoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELCB0
YXJnZXQpOwotICB0YXJnZXQgPSBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OldyaXRlVmFyaW50MzJU
b0FycmF5KAotICAgIHZhbHVlLkdldENhY2hlZFNpemUoKSwgdGFyZ2V0KTsKLSAgcmV0dXJuIHZh
bHVlLlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkodGFyZ2V0KTsKLX0KLQotLy8gU2Vl
IGNvbW1lbnQgb24gUmVhZEdyb3VwTm9WaXJ0dWFsIHRvIHVuZGVyc3RhbmQgdGhlIG5lZWQgZm9y
IHRoaXMgdGVtcGxhdGUKLS8vIHBhcmFtZXRlciBuYW1lLgotdGVtcGxhdGU8dHlwZW5hbWUgTWVz
c2FnZVR5cGVfV29ya0Fyb3VuZENwcExvb2t1cERlZmVjdD4KLWlubGluZSB1aW50OCogV2lyZUZv
cm1hdExpdGU6OldyaXRlR3JvdXBOb1ZpcnR1YWxUb0FycmF5KAotICAgIGludCBmaWVsZF9udW1i
ZXIsIGNvbnN0IE1lc3NhZ2VUeXBlX1dvcmtBcm91bmRDcHBMb29rdXBEZWZlY3QmIHZhbHVlLAot
ICAgIHVpbnQ4KiB0YXJnZXQpIHsKLSAgdGFyZ2V0ID0gV3JpdGVUYWdUb0FycmF5KGZpZWxkX251
bWJlciwgV0lSRVRZUEVfU1RBUlRfR1JPVVAsIHRhcmdldCk7Ci0gIHRhcmdldCA9IHZhbHVlLk1l
c3NhZ2VUeXBlX1dvcmtBcm91bmRDcHBMb29rdXBEZWZlY3QKLSAgICAgIDo6U2VyaWFsaXplV2l0
aENhY2hlZFNpemVzVG9BcnJheSh0YXJnZXQpOwotICByZXR1cm4gV3JpdGVUYWdUb0FycmF5KGZp
ZWxkX251bWJlciwgV0lSRVRZUEVfRU5EX0dST1VQLCB0YXJnZXQpOwotfQotdGVtcGxhdGU8dHlw
ZW5hbWUgTWVzc2FnZVR5cGVfV29ya0Fyb3VuZENwcExvb2t1cERlZmVjdD4KLWlubGluZSB1aW50
OCogV2lyZUZvcm1hdExpdGU6OldyaXRlTWVzc2FnZU5vVmlydHVhbFRvQXJyYXkoCi0gICAgaW50
IGZpZWxkX251bWJlciwgY29uc3QgTWVzc2FnZVR5cGVfV29ya0Fyb3VuZENwcExvb2t1cERlZmVj
dCYgdmFsdWUsCi0gICAgdWludDgqIHRhcmdldCkgewotICB0YXJnZXQgPSBXcml0ZVRhZ1RvQXJy
YXkoZmllbGRfbnVtYmVyLCBXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELCB0YXJnZXQpOwotICB0
YXJnZXQgPSBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OldyaXRlVmFyaW50MzJUb0FycmF5KAotICAg
IHZhbHVlLk1lc3NhZ2VUeXBlX1dvcmtBcm91bmRDcHBMb29rdXBEZWZlY3Q6OkdldENhY2hlZFNp
emUoKSwgdGFyZ2V0KTsKLSAgcmV0dXJuIHZhbHVlLk1lc3NhZ2VUeXBlX1dvcmtBcm91bmRDcHBM
b29rdXBEZWZlY3QKLSAgICAgIDo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSh0YXJn
ZXQpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWlubGluZSBpbnQgV2lyZUZvcm1hdExpdGU6Oklu
dDMyU2l6ZShpbnQzMiB2YWx1ZSkgewotICByZXR1cm4gaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpW
YXJpbnRTaXplMzJTaWduRXh0ZW5kZWQodmFsdWUpOwotfQotaW5saW5lIGludCBXaXJlRm9ybWF0
TGl0ZTo6SW50NjRTaXplKGludDY0IHZhbHVlKSB7Ci0gIHJldHVybiBpbzo6Q29kZWRPdXRwdXRT
dHJlYW06OlZhcmludFNpemU2NChzdGF0aWNfY2FzdDx1aW50NjQ+KHZhbHVlKSk7Ci19Ci1pbmxp
bmUgaW50IFdpcmVGb3JtYXRMaXRlOjpVSW50MzJTaXplKHVpbnQzMiB2YWx1ZSkgewotICByZXR1
cm4gaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpWYXJpbnRTaXplMzIodmFsdWUpOwotfQotaW5saW5l
IGludCBXaXJlRm9ybWF0TGl0ZTo6VUludDY0U2l6ZSh1aW50NjQgdmFsdWUpIHsKLSAgcmV0dXJu
IGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6ZTY0KHZhbHVlKTsKLX0KLWlubGluZSBp
bnQgV2lyZUZvcm1hdExpdGU6OlNJbnQzMlNpemUoaW50MzIgdmFsdWUpIHsKLSAgcmV0dXJuIGlv
OjpDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6ZTMyKFppZ1phZ0VuY29kZTMyKHZhbHVlKSk7
Ci19Ci1pbmxpbmUgaW50IFdpcmVGb3JtYXRMaXRlOjpTSW50NjRTaXplKGludDY0IHZhbHVlKSB7
Ci0gIHJldHVybiBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OlZhcmludFNpemU2NChaaWdaYWdFbmNv
ZGU2NCh2YWx1ZSkpOwotfQotaW5saW5lIGludCBXaXJlRm9ybWF0TGl0ZTo6RW51bVNpemUoaW50
IHZhbHVlKSB7Ci0gIHJldHVybiBpbzo6Q29kZWRPdXRwdXRTdHJlYW06OlZhcmludFNpemUzMlNp
Z25FeHRlbmRlZCh2YWx1ZSk7Ci19Ci0KLWlubGluZSBpbnQgV2lyZUZvcm1hdExpdGU6OlN0cmlu
Z1NpemUoY29uc3Qgc3RyaW5nJiB2YWx1ZSkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigK
LSAgICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbTo6VmFyaW50U2l6ZTMyKHN0YXRpY19jYXN0PHVp
bnQzMj4odmFsdWUuc2l6ZSgpKSkgKwotICAgICAgdmFsdWUuc2l6ZSgpKTsKLX0KLWlubGluZSBp
bnQgV2lyZUZvcm1hdExpdGU6OkJ5dGVzU2l6ZShjb25zdCBzdHJpbmcmIHZhbHVlKSB7Ci0gIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KAotICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtOjpWYXJp
bnRTaXplMzIoc3RhdGljX2Nhc3Q8dWludDMyPih2YWx1ZS5zaXplKCkpKSArCi0gICAgICB2YWx1
ZS5zaXplKCkpOwotfQotCi0KLWlubGluZSBpbnQgV2lyZUZvcm1hdExpdGU6Okdyb3VwU2l6ZShj
b25zdCBNZXNzYWdlTGl0ZSYgdmFsdWUpIHsKLSAgcmV0dXJuIHZhbHVlLkJ5dGVTaXplKCk7Ci19
Ci1pbmxpbmUgaW50IFdpcmVGb3JtYXRMaXRlOjpNZXNzYWdlU2l6ZShjb25zdCBNZXNzYWdlTGl0
ZSYgdmFsdWUpIHsKLSAgcmV0dXJuIExlbmd0aERlbGltaXRlZFNpemUodmFsdWUuQnl0ZVNpemUo
KSk7Ci19Ci0KLS8vIFNlZSBjb21tZW50IG9uIFJlYWRHcm91cE5vVmlydHVhbCB0byB1bmRlcnN0
YW5kIHRoZSBuZWVkIGZvciB0aGlzIHRlbXBsYXRlCi0vLyBwYXJhbWV0ZXIgbmFtZS4KLXRlbXBs
YXRlPHR5cGVuYW1lIE1lc3NhZ2VUeXBlX1dvcmtBcm91bmRDcHBMb29rdXBEZWZlY3Q+Ci1pbmxp
bmUgaW50IFdpcmVGb3JtYXRMaXRlOjpHcm91cFNpemVOb1ZpcnR1YWwoCi0gICAgY29uc3QgTWVz
c2FnZVR5cGVfV29ya0Fyb3VuZENwcExvb2t1cERlZmVjdCYgdmFsdWUpIHsKLSAgcmV0dXJuIHZh
bHVlLk1lc3NhZ2VUeXBlX1dvcmtBcm91bmRDcHBMb29rdXBEZWZlY3Q6OkJ5dGVTaXplKCk7Ci19
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBNZXNzYWdlVHlwZV9Xb3JrQXJvdW5kQ3BwTG9va3VwRGVmZWN0
PgotaW5saW5lIGludCBXaXJlRm9ybWF0TGl0ZTo6TWVzc2FnZVNpemVOb1ZpcnR1YWwoCi0gICAg
Y29uc3QgTWVzc2FnZVR5cGVfV29ya0Fyb3VuZENwcExvb2t1cERlZmVjdCYgdmFsdWUpIHsKLSAg
cmV0dXJuIExlbmd0aERlbGltaXRlZFNpemUoCi0gICAgICB2YWx1ZS5NZXNzYWdlVHlwZV9Xb3Jr
QXJvdW5kQ3BwTG9va3VwRGVmZWN0OjpCeXRlU2l6ZSgpKTsKLX0KLQotaW5saW5lIGludCBXaXJl
Rm9ybWF0TGl0ZTo6TGVuZ3RoRGVsaW1pdGVkU2l6ZShpbnQgbGVuZ3RoKSB7Ci0gIHJldHVybiBp
bzo6Q29kZWRPdXRwdXRTdHJlYW06OlZhcmludFNpemUzMihsZW5ndGgpICsgbGVuZ3RoOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90b2J1ZgotCi19
ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0jZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9XSVJFX0ZP
Uk1BVF9MSVRFX0lOTF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zv
cm1hdF91bml0dGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF91bml0dGVz
dC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0YWRkNjZmMzMwOGY4MDJkYzVj
OTA5N2NhN2M0YjU0YmVlYzQ5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3Byb3RvYnVmL3NyYy9nb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfdW5pdHRlc3QuY2MKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjg5ICswLDAgQEAKLS8vIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29n
bGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9wcm90b2NvbC1idWZmZXJzLwotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0vLyBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCi0v
LyAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKLS8vICBTYW5q
YXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90aGVycy4KLQotI2luY2x1ZGUgPGdvb2dsZS9w
cm90b2J1Zi93aXJlX2Zvcm1hdC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zv
cm1hdF9saXRlX2lubC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+
Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9pby9jb2RlZF9zdHJlYW0uaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvdW5pdHRlc3QucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYv
dW5pdHRlc3RfcHJvdG8zX2FyZW5hLnBiLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Vu
aXR0ZXN0X21zZXQucGIuaD4KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbXNl
dF93aXJlX2Zvcm1hdC5wYi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi90ZXN0X3V0aWwu
aD4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90
b2J1Zi9zdHVicy9sb2dnaW5nLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3Rlc3Rpbmcv
Z29vZ2xldGVzdC5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0jaW5jbHVkZSA8Z29vZ2xl
L3Byb3RvYnVmL3N0dWJzL3N0bF91dGlsLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotbmFtZXNw
YWNlIHByb3RvYnVmIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci1uYW1lc3BhY2UgewotCi1URVNU
KFdpcmVGb3JtYXRUZXN0LCBFbnVtc0luU3luYykgewotICAvLyBWZXJpZnkgdGhhdCBXaXJlRm9y
bWF0TGl0ZTo6RmllbGRUeXBlIGFuZCBXaXJlRm9ybWF0TGl0ZTo6Q3BwVHlwZSBtYXRjaAotICAv
LyBGaWVsZERlc2NyaXB0b3I6OlR5cGUgYW5kIEZpZWxkRGVzY3JpcHRvcjo6Q3BwVHlwZS4KLQot
ICBFWFBFQ1RfRVEoaW1wbGljaXRfY2FzdDxpbnQ+KEZpZWxkRGVzY3JpcHRvcjo6TUFYX1RZUEUp
LAotICAgICAgICAgICAgaW1wbGljaXRfY2FzdDxpbnQ+KFdpcmVGb3JtYXRMaXRlOjpNQVhfRklF
TERfVFlQRSkpOwotICBFWFBFQ1RfRVEoaW1wbGljaXRfY2FzdDxpbnQ+KEZpZWxkRGVzY3JpcHRv
cjo6TUFYX0NQUFRZUEUpLAotICAgICAgICAgICAgaW1wbGljaXRfY2FzdDxpbnQ+KFdpcmVGb3Jt
YXRMaXRlOjpNQVhfQ1BQVFlQRSkpOwotCi0gIGZvciAoaW50IGkgPSAxOyBpIDw9IFdpcmVGb3Jt
YXRMaXRlOjpNQVhfRklFTERfVFlQRTsgaSsrKSB7Ci0gICAgRVhQRUNUX0VRKAotICAgICAgaW1w
bGljaXRfY2FzdDxpbnQ+KEZpZWxkRGVzY3JpcHRvcjo6VHlwZVRvQ3BwVHlwZSgKLSAgICAgICAg
c3RhdGljX2Nhc3Q8RmllbGREZXNjcmlwdG9yOjpUeXBlPihpKSkpLAotICAgICAgaW1wbGljaXRf
Y2FzdDxpbnQ+KFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGVUb0NwcFR5cGUoCi0gICAgICAgIHN0
YXRpY19jYXN0PFdpcmVGb3JtYXRMaXRlOjpGaWVsZFR5cGU+KGkpKSkpOwotICB9Ci19Ci0KLVRF
U1QoV2lyZUZvcm1hdFRlc3QsIE1heEZpZWxkTnVtYmVyKSB7Ci0gIC8vIE1ha2Ugc3VyZSB0aGUg
bWF4IGZpZWxkIG51bWJlciBjb25zdGFudCBpcyBhY2N1cmF0ZS4KLSAgRVhQRUNUX0VRKCgxIDw8
ICgzMiAtIFdpcmVGb3JtYXRMaXRlOjprVGFnVHlwZUJpdHMpKSAtIDEsCi0gICAgICAgICAgICBG
aWVsZERlc2NyaXB0b3I6OmtNYXhOdW1iZXIpOwotfQotCi1URVNUKFdpcmVGb3JtYXRUZXN0LCBQ
YXJzZSkgewotICB1bml0dGVzdDo6VGVzdEFsbFR5cGVzIHNvdXJjZSwgZGVzdDsKLSAgc3RyaW5n
IGRhdGE7Ci0KLSAgLy8gU2VyaWFsaXplIHVzaW5nIHRoZSBnZW5lcmF0ZWQgY29kZS4KLSAgVGVz
dFV0aWw6OlNldEFsbEZpZWxkcygmc291cmNlKTsKLSAgc291cmNlLlNlcmlhbGl6ZVRvU3RyaW5n
KCZkYXRhKTsKLQotICAvLyBQYXJzZSB1c2luZyBXaXJlRm9ybWF0LgotICBpbzo6QXJyYXlJbnB1
dFN0cmVhbSByYXdfaW5wdXQoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgaW86OkNvZGVk
SW5wdXRTdHJlYW0gaW5wdXQoJnJhd19pbnB1dCk7Ci0gIFdpcmVGb3JtYXQ6OlBhcnNlQW5kTWVy
Z2VQYXJ0aWFsKCZpbnB1dCwgJmRlc3QpOwotCi0gIC8vIENoZWNrLgotICBUZXN0VXRpbDo6RXhw
ZWN0QWxsRmllbGRzU2V0KGRlc3QpOwotfQotCi1URVNUKFdpcmVGb3JtYXRUZXN0LCBQYXJzZUV4
dGVuc2lvbnMpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxFeHRlbnNpb25zIHNvdXJjZSwgZGVzdDsK
LSAgc3RyaW5nIGRhdGE7Ci0KLSAgLy8gU2VyaWFsaXplIHVzaW5nIHRoZSBnZW5lcmF0ZWQgY29k
ZS4KLSAgVGVzdFV0aWw6OlNldEFsbEV4dGVuc2lvbnMoJnNvdXJjZSk7Ci0gIHNvdXJjZS5TZXJp
YWxpemVUb1N0cmluZygmZGF0YSk7Ci0KLSAgLy8gUGFyc2UgdXNpbmcgV2lyZUZvcm1hdC4KLSAg
aW86OkFycmF5SW5wdXRTdHJlYW0gcmF3X2lucHV0KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
Ci0gIGlvOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KCZyYXdfaW5wdXQpOwotICBXaXJlRm9ybWF0
OjpQYXJzZUFuZE1lcmdlUGFydGlhbCgmaW5wdXQsICZkZXN0KTsKLQotICAvLyBDaGVjay4KLSAg
VGVzdFV0aWw6OkV4cGVjdEFsbEV4dGVuc2lvbnNTZXQoZGVzdCk7Ci19Ci0KLVRFU1QoV2lyZUZv
cm1hdFRlc3QsIFBhcnNlUGFja2VkKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UGFja2VkVHlwZXMgc291
cmNlLCBkZXN0OwotICBzdHJpbmcgZGF0YTsKLQotICAvLyBTZXJpYWxpemUgdXNpbmcgdGhlIGdl
bmVyYXRlZCBjb2RlLgotICBUZXN0VXRpbDo6U2V0UGFja2VkRmllbGRzKCZzb3VyY2UpOwotICBz
b3VyY2UuU2VyaWFsaXplVG9TdHJpbmcoJmRhdGEpOwotCi0gIC8vIFBhcnNlIHVzaW5nIFdpcmVG
b3JtYXQuCi0gIGlvOjpBcnJheUlucHV0U3RyZWFtIHJhd19pbnB1dChkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOwotICBpbzo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCgmcmF3X2lucHV0KTsKLSAg
V2lyZUZvcm1hdDo6UGFyc2VBbmRNZXJnZVBhcnRpYWwoJmlucHV0LCAmZGVzdCk7Ci0KLSAgLy8g
Q2hlY2suCi0gIFRlc3RVdGlsOjpFeHBlY3RQYWNrZWRGaWVsZHNTZXQoZGVzdCk7Ci19Ci0KLVRF
U1QoV2lyZUZvcm1hdFRlc3QsIFBhcnNlUGFja2VkRnJvbVVucGFja2VkKSB7Ci0gIC8vIFNlcmlh
bGl6ZSB1c2luZyB0aGUgZ2VuZXJhdGVkIGNvZGUuCi0gIHVuaXR0ZXN0OjpUZXN0VW5wYWNrZWRU
eXBlcyBzb3VyY2U7Ci0gIFRlc3RVdGlsOjpTZXRVbnBhY2tlZEZpZWxkcygmc291cmNlKTsKLSAg
c3RyaW5nIGRhdGEgPSBzb3VyY2UuU2VyaWFsaXplQXNTdHJpbmcoKTsKLQotICAvLyBQYXJzZSB1
c2luZyBXaXJlRm9ybWF0LgotICB1bml0dGVzdDo6VGVzdFBhY2tlZFR5cGVzIGRlc3Q7Ci0gIGlv
OjpBcnJheUlucHV0U3RyZWFtIHJhd19pbnB1dChkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwot
ICBpbzo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCgmcmF3X2lucHV0KTsKLSAgV2lyZUZvcm1hdDo6
UGFyc2VBbmRNZXJnZVBhcnRpYWwoJmlucHV0LCAmZGVzdCk7Ci0KLSAgLy8gQ2hlY2suCi0gIFRl
c3RVdGlsOjpFeHBlY3RQYWNrZWRGaWVsZHNTZXQoZGVzdCk7Ci19Ci0KLVRFU1QoV2lyZUZvcm1h
dFRlc3QsIFBhcnNlVW5wYWNrZWRGcm9tUGFja2VkKSB7Ci0gIC8vIFNlcmlhbGl6ZSB1c2luZyB0
aGUgZ2VuZXJhdGVkIGNvZGUuCi0gIHVuaXR0ZXN0OjpUZXN0UGFja2VkVHlwZXMgc291cmNlOwot
ICBUZXN0VXRpbDo6U2V0UGFja2VkRmllbGRzKCZzb3VyY2UpOwotICBzdHJpbmcgZGF0YSA9IHNv
dXJjZS5TZXJpYWxpemVBc1N0cmluZygpOwotCi0gIC8vIFBhcnNlIHVzaW5nIFdpcmVGb3JtYXQu
Ci0gIHVuaXR0ZXN0OjpUZXN0VW5wYWNrZWRUeXBlcyBkZXN0OwotICBpbzo6QXJyYXlJbnB1dFN0
cmVhbSByYXdfaW5wdXQoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgaW86OkNvZGVkSW5w
dXRTdHJlYW0gaW5wdXQoJnJhd19pbnB1dCk7Ci0gIFdpcmVGb3JtYXQ6OlBhcnNlQW5kTWVyZ2VQ
YXJ0aWFsKCZpbnB1dCwgJmRlc3QpOwotCi0gIC8vIENoZWNrLgotICBUZXN0VXRpbDo6RXhwZWN0
VW5wYWNrZWRGaWVsZHNTZXQoZGVzdCk7Ci19Ci0KLVRFU1QoV2lyZUZvcm1hdFRlc3QsIFBhcnNl
UGFja2VkRXh0ZW5zaW9ucykgewotICB1bml0dGVzdDo6VGVzdFBhY2tlZEV4dGVuc2lvbnMgc291
cmNlLCBkZXN0OwotICBzdHJpbmcgZGF0YTsKLQotICAvLyBTZXJpYWxpemUgdXNpbmcgdGhlIGdl
bmVyYXRlZCBjb2RlLgotICBUZXN0VXRpbDo6U2V0UGFja2VkRXh0ZW5zaW9ucygmc291cmNlKTsK
LSAgc291cmNlLlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRhKTsKLQotICAvLyBQYXJzZSB1c2luZyBX
aXJlRm9ybWF0LgotICBpbzo6QXJyYXlJbnB1dFN0cmVhbSByYXdfaW5wdXQoZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpKTsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQoJnJhd19pbnB1dCk7
Ci0gIFdpcmVGb3JtYXQ6OlBhcnNlQW5kTWVyZ2VQYXJ0aWFsKCZpbnB1dCwgJmRlc3QpOwotCi0g
IC8vIENoZWNrLgotICBUZXN0VXRpbDo6RXhwZWN0UGFja2VkRXh0ZW5zaW9uc1NldChkZXN0KTsK
LX0KLQotVEVTVChXaXJlRm9ybWF0VGVzdCwgUGFyc2VPbmVvZikgewotICB1bml0dGVzdDo6VGVz
dE9uZW9mMiBzb3VyY2UsIGRlc3Q7Ci0gIHN0cmluZyBkYXRhOwotCi0gIC8vIFNlcmlhbGl6ZSB1
c2luZyB0aGUgZ2VuZXJhdGVkIGNvZGUuCi0gIFRlc3RVdGlsOjpTZXRPbmVvZjEoJnNvdXJjZSk7
Ci0gIHNvdXJjZS5TZXJpYWxpemVUb1N0cmluZygmZGF0YSk7Ci0KLSAgLy8gUGFyc2UgdXNpbmcg
V2lyZUZvcm1hdC4KLSAgaW86OkFycmF5SW5wdXRTdHJlYW0gcmF3X2lucHV0KGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7Ci0gIGlvOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KCZyYXdfaW5wdXQp
OwotICBXaXJlRm9ybWF0OjpQYXJzZUFuZE1lcmdlUGFydGlhbCgmaW5wdXQsICZkZXN0KTsKLQot
ICAvLyBDaGVjay4KLSAgVGVzdFV0aWw6OkV4cGVjdE9uZW9mU2V0MShkZXN0KTsKLX0KLQotVEVT
VChXaXJlRm9ybWF0VGVzdCwgT25lb2ZPbmx5U2V0TGFzdCkgewotICB1bml0dGVzdDo6VGVzdE9u
ZW9mQmFja3dhcmRzQ29tcGF0aWJsZSBzb3VyY2U7Ci0gIHVuaXR0ZXN0OjpUZXN0T25lb2Ygb25l
b2ZfZGVzdDsKLSAgc3RyaW5nIGRhdGE7Ci0KLSAgLy8gU2V0IHR3byBmaWVsZHMKLSAgc291cmNl
LnNldF9mb29faW50KDEwMCk7Ci0gIHNvdXJjZS5zZXRfZm9vX3N0cmluZygiMTAxIik7Ci0KLSAg
Ly8gU2VyaWFsaXplIGFuZCBwYXJzZSB0byBvbmVvZiBtZXNzYWdlLgotICBzb3VyY2UuU2VyaWFs
aXplVG9TdHJpbmcoJmRhdGEpOwotICBpbzo6QXJyYXlJbnB1dFN0cmVhbSByYXdfaW5wdXQoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQoJnJh
d19pbnB1dCk7Ci0gIFdpcmVGb3JtYXQ6OlBhcnNlQW5kTWVyZ2VQYXJ0aWFsKCZpbnB1dCwgJm9u
ZW9mX2Rlc3QpOwotCi0gIC8vIE9ubHkgdGhlIGxhc3QgZmllbGQgaXMgc2V0LgotICBFWFBFQ1Rf
RkFMU0Uob25lb2ZfZGVzdC5oYXNfZm9vX2ludCgpKTsKLSAgRVhQRUNUX1RSVUUob25lb2ZfZGVz
dC5oYXNfZm9vX3N0cmluZygpKTsKLX0KLQotVEVTVChXaXJlRm9ybWF0VGVzdCwgQnl0ZVNpemUp
IHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotICBUZXN0VXRpbDo6U2V0QWxs
RmllbGRzKCZtZXNzYWdlKTsKLQotICBFWFBFQ1RfRVEobWVzc2FnZS5CeXRlU2l6ZSgpLCBXaXJl
Rm9ybWF0OjpCeXRlU2l6ZShtZXNzYWdlKSk7Ci0gIG1lc3NhZ2UuQ2xlYXIoKTsKLSAgRVhQRUNU
X0VRKDAsIG1lc3NhZ2UuQnl0ZVNpemUoKSk7Ci0gIEVYUEVDVF9FUSgwLCBXaXJlRm9ybWF0OjpC
eXRlU2l6ZShtZXNzYWdlKSk7Ci19Ci0KLVRFU1QoV2lyZUZvcm1hdFRlc3QsIEJ5dGVTaXplRXh0
ZW5zaW9ucykgewotICB1bml0dGVzdDo6VGVzdEFsbEV4dGVuc2lvbnMgbWVzc2FnZTsKLSAgVGVz
dFV0aWw6OlNldEFsbEV4dGVuc2lvbnMoJm1lc3NhZ2UpOwotCi0gIEVYUEVDVF9FUShtZXNzYWdl
LkJ5dGVTaXplKCksCi0gICAgICAgICAgICBXaXJlRm9ybWF0OjpCeXRlU2l6ZShtZXNzYWdlKSk7
Ci0gIG1lc3NhZ2UuQ2xlYXIoKTsKLSAgRVhQRUNUX0VRKDAsIG1lc3NhZ2UuQnl0ZVNpemUoKSk7
Ci0gIEVYUEVDVF9FUSgwLCBXaXJlRm9ybWF0OjpCeXRlU2l6ZShtZXNzYWdlKSk7Ci19Ci0KLVRF
U1QoV2lyZUZvcm1hdFRlc3QsIEJ5dGVTaXplUGFja2VkKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0UGFj
a2VkVHlwZXMgbWVzc2FnZTsKLSAgVGVzdFV0aWw6OlNldFBhY2tlZEZpZWxkcygmbWVzc2FnZSk7
Ci0KLSAgRVhQRUNUX0VRKG1lc3NhZ2UuQnl0ZVNpemUoKSwgV2lyZUZvcm1hdDo6Qnl0ZVNpemUo
bWVzc2FnZSkpOwotICBtZXNzYWdlLkNsZWFyKCk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkJ5
dGVTaXplKCkpOwotICBFWFBFQ1RfRVEoMCwgV2lyZUZvcm1hdDo6Qnl0ZVNpemUobWVzc2FnZSkp
OwotfQotCi1URVNUKFdpcmVGb3JtYXRUZXN0LCBCeXRlU2l6ZVBhY2tlZEV4dGVuc2lvbnMpIHsK
LSAgdW5pdHRlc3Q6OlRlc3RQYWNrZWRFeHRlbnNpb25zIG1lc3NhZ2U7Ci0gIFRlc3RVdGlsOjpT
ZXRQYWNrZWRFeHRlbnNpb25zKCZtZXNzYWdlKTsKLQotICBFWFBFQ1RfRVEobWVzc2FnZS5CeXRl
U2l6ZSgpLAotICAgICAgICAgICAgV2lyZUZvcm1hdDo6Qnl0ZVNpemUobWVzc2FnZSkpOwotICBt
ZXNzYWdlLkNsZWFyKCk7Ci0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkJ5dGVTaXplKCkpOwotICBF
WFBFQ1RfRVEoMCwgV2lyZUZvcm1hdDo6Qnl0ZVNpemUobWVzc2FnZSkpOwotfQotCi1URVNUKFdp
cmVGb3JtYXRUZXN0LCBCeXRlU2l6ZU9uZW9mKSB7Ci0gIHVuaXR0ZXN0OjpUZXN0T25lb2YyIG1l
c3NhZ2U7Ci0gIFRlc3RVdGlsOjpTZXRPbmVvZjEoJm1lc3NhZ2UpOwotCi0gIEVYUEVDVF9FUSht
ZXNzYWdlLkJ5dGVTaXplKCksCi0gIFdpcmVGb3JtYXQ6OkJ5dGVTaXplKG1lc3NhZ2UpKTsKLSAg
bWVzc2FnZS5DbGVhcigpOwotCi0gIEVYUEVDVF9FUSgwLCBtZXNzYWdlLkJ5dGVTaXplKCkpOwot
ICBFWFBFQ1RfRVEoMCwgV2lyZUZvcm1hdDo6Qnl0ZVNpemUobWVzc2FnZSkpOwotfQotCi1URVNU
KFdpcmVGb3JtYXRUZXN0LCBTZXJpYWxpemUpIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBt
ZXNzYWdlOwotICBzdHJpbmcgZ2VuZXJhdGVkX2RhdGE7Ci0gIHN0cmluZyBkeW5hbWljX2RhdGE7
Ci0KLSAgVGVzdFV0aWw6OlNldEFsbEZpZWxkcygmbWVzc2FnZSk7Ci0gIGludCBzaXplID0gbWVz
c2FnZS5CeXRlU2l6ZSgpOwotCi0gIC8vIFNlcmlhbGl6ZSB1c2luZyB0aGUgZ2VuZXJhdGVkIGNv
ZGUuCi0gIHsKLSAgICBpbzo6U3RyaW5nT3V0cHV0U3RyZWFtIHJhd19vdXRwdXQoJmdlbmVyYXRl
ZF9kYXRhKTsKLSAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KCZyYXdfb3V0cHV0KTsK
LSAgICBtZXNzYWdlLlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygmb3V0cHV0KTsKLSAgICBBU1NF
UlRfRkFMU0Uob3V0cHV0LkhhZEVycm9yKCkpOwotICB9Ci0KLSAgLy8gU2VyaWFsaXplIHVzaW5n
IFdpcmVGb3JtYXQuCi0gIHsKLSAgICBpbzo6U3RyaW5nT3V0cHV0U3RyZWFtIHJhd19vdXRwdXQo
JmR5bmFtaWNfZGF0YSk7Ci0gICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCgmcmF3X291
dHB1dCk7Ci0gICAgV2lyZUZvcm1hdDo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKG1lc3NhZ2Us
IHNpemUsICZvdXRwdXQpOwotICAgIEFTU0VSVF9GQUxTRShvdXRwdXQuSGFkRXJyb3IoKSk7Ci0g
IH0KLQotICAvLyBTaG91bGQgYmUgdGhlIHNhbWUuCi0gIC8vIERvbid0IHVzZSBFWFBFQ1RfRVEg
aGVyZSBiZWNhdXNlIHdlJ3JlIGNvbXBhcmluZyByYXcgYmluYXJ5IGRhdGEgYW5kCi0gIC8vIHdl
IHJlYWxseSBkb24ndCB3YW50IGl0IGR1bXBlZCB0byBzdGRvdXQgb24gZmFpbHVyZS4KLSAgRVhQ
RUNUX1RSVUUoZHluYW1pY19kYXRhID09IGdlbmVyYXRlZF9kYXRhKTsKLX0KLQotVEVTVChXaXJl
Rm9ybWF0VGVzdCwgU2VyaWFsaXplRXh0ZW5zaW9ucykgewotICB1bml0dGVzdDo6VGVzdEFsbEV4
dGVuc2lvbnMgbWVzc2FnZTsKLSAgc3RyaW5nIGdlbmVyYXRlZF9kYXRhOwotICBzdHJpbmcgZHlu
YW1pY19kYXRhOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxFeHRlbnNpb25zKCZtZXNzYWdlKTsKLSAg
aW50IHNpemUgPSBtZXNzYWdlLkJ5dGVTaXplKCk7Ci0KLSAgLy8gU2VyaWFsaXplIHVzaW5nIHRo
ZSBnZW5lcmF0ZWQgY29kZS4KLSAgewotICAgIGlvOjpTdHJpbmdPdXRwdXRTdHJlYW0gcmF3X291
dHB1dCgmZ2VuZXJhdGVkX2RhdGEpOwotICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQo
JnJhd19vdXRwdXQpOwotICAgIG1lc3NhZ2UuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKCZvdXRw
dXQpOwotICAgIEFTU0VSVF9GQUxTRShvdXRwdXQuSGFkRXJyb3IoKSk7Ci0gIH0KLQotICAvLyBT
ZXJpYWxpemUgdXNpbmcgV2lyZUZvcm1hdC4KLSAgewotICAgIGlvOjpTdHJpbmdPdXRwdXRTdHJl
YW0gcmF3X291dHB1dCgmZHluYW1pY19kYXRhKTsKLSAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0g
b3V0cHV0KCZyYXdfb3V0cHV0KTsKLSAgICBXaXJlRm9ybWF0OjpTZXJpYWxpemVXaXRoQ2FjaGVk
U2l6ZXMobWVzc2FnZSwgc2l6ZSwgJm91dHB1dCk7Ci0gICAgQVNTRVJUX0ZBTFNFKG91dHB1dC5I
YWRFcnJvcigpKTsKLSAgfQotCi0gIC8vIFNob3VsZCBiZSB0aGUgc2FtZS4KLSAgLy8gRG9uJ3Qg
dXNlIEVYUEVDVF9FUSBoZXJlIGJlY2F1c2Ugd2UncmUgY29tcGFyaW5nIHJhdyBiaW5hcnkgZGF0
YSBhbmQKLSAgLy8gd2UgcmVhbGx5IGRvbid0IHdhbnQgaXQgZHVtcGVkIHRvIHN0ZG91dCBvbiBm
YWlsdXJlLgotICBFWFBFQ1RfVFJVRShkeW5hbWljX2RhdGEgPT0gZ2VuZXJhdGVkX2RhdGEpOwot
fQotCi1URVNUKFdpcmVGb3JtYXRUZXN0LCBTZXJpYWxpemVGaWVsZHNBbmRFeHRlbnNpb25zKSB7
Ci0gIHVuaXR0ZXN0OjpUZXN0RmllbGRPcmRlcmluZ3MgbWVzc2FnZTsKLSAgc3RyaW5nIGdlbmVy
YXRlZF9kYXRhOwotICBzdHJpbmcgZHluYW1pY19kYXRhOwotCi0gIFRlc3RVdGlsOjpTZXRBbGxG
aWVsZHNBbmRFeHRlbnNpb25zKCZtZXNzYWdlKTsKLSAgaW50IHNpemUgPSBtZXNzYWdlLkJ5dGVT
aXplKCk7Ci0KLSAgLy8gU2VyaWFsaXplIHVzaW5nIHRoZSBnZW5lcmF0ZWQgY29kZS4KLSAgewot
ICAgIGlvOjpTdHJpbmdPdXRwdXRTdHJlYW0gcmF3X291dHB1dCgmZ2VuZXJhdGVkX2RhdGEpOwot
ICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQoJnJhd19vdXRwdXQpOwotICAgIG1lc3Nh
Z2UuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKCZvdXRwdXQpOwotICAgIEFTU0VSVF9GQUxTRShv
dXRwdXQuSGFkRXJyb3IoKSk7Ci0gIH0KLQotICAvLyBTZXJpYWxpemUgdXNpbmcgV2lyZUZvcm1h
dC4KLSAgewotICAgIGlvOjpTdHJpbmdPdXRwdXRTdHJlYW0gcmF3X291dHB1dCgmZHluYW1pY19k
YXRhKTsKLSAgICBpbzo6Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KCZyYXdfb3V0cHV0KTsKLSAg
ICBXaXJlRm9ybWF0OjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMobWVzc2FnZSwgc2l6ZSwgJm91
dHB1dCk7Ci0gICAgQVNTRVJUX0ZBTFNFKG91dHB1dC5IYWRFcnJvcigpKTsKLSAgfQotCi0gIC8v
IFNob3VsZCBiZSB0aGUgc2FtZS4KLSAgLy8gRG9uJ3QgdXNlIEVYUEVDVF9FUSBoZXJlIGJlY2F1
c2Ugd2UncmUgY29tcGFyaW5nIHJhdyBiaW5hcnkgZGF0YSBhbmQKLSAgLy8gd2UgcmVhbGx5IGRv
bid0IHdhbnQgaXQgZHVtcGVkIHRvIHN0ZG91dCBvbiBmYWlsdXJlLgotICBFWFBFQ1RfVFJVRShk
eW5hbWljX2RhdGEgPT0gZ2VuZXJhdGVkX2RhdGEpOwotCi0gIC8vIFNob3VsZCBvdXRwdXQgaW4g
Y2Fub25pY2FsIG9yZGVyLgotICBUZXN0VXRpbDo6RXhwZWN0QWxsRmllbGRzQW5kRXh0ZW5zaW9u
c0luT3JkZXIoZHluYW1pY19kYXRhKTsKLSAgVGVzdFV0aWw6OkV4cGVjdEFsbEZpZWxkc0FuZEV4
dGVuc2lvbnNJbk9yZGVyKGdlbmVyYXRlZF9kYXRhKTsKLX0KLQotVEVTVChXaXJlRm9ybWF0VGVz
dCwgU2VyaWFsaXplT25lb2YpIHsKLSAgdW5pdHRlc3Q6OlRlc3RPbmVvZjIgbWVzc2FnZTsKLSAg
c3RyaW5nIGdlbmVyYXRlZF9kYXRhOwotICBzdHJpbmcgZHluYW1pY19kYXRhOwotCi0gIFRlc3RV
dGlsOjpTZXRPbmVvZjEoJm1lc3NhZ2UpOwotICBpbnQgc2l6ZSA9IG1lc3NhZ2UuQnl0ZVNpemUo
KTsKLQotICAvLyBTZXJpYWxpemUgdXNpbmcgdGhlIGdlbmVyYXRlZCBjb2RlLgotICB7Ci0gICAg
aW86OlN0cmluZ091dHB1dFN0cmVhbSByYXdfb3V0cHV0KCZnZW5lcmF0ZWRfZGF0YSk7Ci0gICAg
aW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCgmcmF3X291dHB1dCk7Ci0gICAgbWVzc2FnZS5T
ZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoJm91dHB1dCk7Ci0gICAgQVNTRVJUX0ZBTFNFKG91dHB1
dC5IYWRFcnJvcigpKTsKLSAgfQotCi0gIC8vIFNlcmlhbGl6ZSB1c2luZyBXaXJlRm9ybWF0Lgot
ICB7Ci0gICAgaW86OlN0cmluZ091dHB1dFN0cmVhbSByYXdfb3V0cHV0KCZkeW5hbWljX2RhdGEp
OwotICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSBvdXRwdXQoJnJhd19vdXRwdXQpOwotICAgIFdp
cmVGb3JtYXQ6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcyhtZXNzYWdlLCBzaXplLCAmb3V0cHV0
KTsKLSAgICBBU1NFUlRfRkFMU0Uob3V0cHV0LkhhZEVycm9yKCkpOwotICB9Ci0KLSAgLy8gU2hv
dWxkIGJlIHRoZSBzYW1lLgotICAvLyBEb24ndCB1c2UgRVhQRUNUX0VRIGhlcmUgYmVjYXVzZSB3
ZSdyZSBjb21wYXJpbmcgcmF3IGJpbmFyeSBkYXRhIGFuZAotICAvLyB3ZSByZWFsbHkgZG9uJ3Qg
d2FudCBpdCBkdW1wZWQgdG8gc3Rkb3V0IG9uIGZhaWx1cmUuCi0gIEVYUEVDVF9UUlVFKGR5bmFt
aWNfZGF0YSA9PSBnZW5lcmF0ZWRfZGF0YSk7Ci19Ci0KLVRFU1QoV2lyZUZvcm1hdFRlc3QsIFBh
cnNlTXVsdGlwbGVFeHRlbnNpb25SYW5nZXMpIHsKLSAgLy8gTWFrZSBzdXJlIHdlIGNhbiBwYXJz
ZSBhIG1lc3NhZ2UgdGhhdCBjb250YWlucyBtdWx0aXBsZSBleHRlbnNpb25zIHJhbmdlcy4KLSAg
dW5pdHRlc3Q6OlRlc3RGaWVsZE9yZGVyaW5ncyBzb3VyY2U7Ci0gIHN0cmluZyBkYXRhOwotCi0g
IFRlc3RVdGlsOjpTZXRBbGxGaWVsZHNBbmRFeHRlbnNpb25zKCZzb3VyY2UpOwotICBzb3VyY2Uu
U2VyaWFsaXplVG9TdHJpbmcoJmRhdGEpOwotCi0gIHsKLSAgICB1bml0dGVzdDo6VGVzdEZpZWxk
T3JkZXJpbmdzIGRlc3Q7Ci0gICAgRVhQRUNUX1RSVUUoZGVzdC5QYXJzZUZyb21TdHJpbmcoZGF0
YSkpOwotICAgIEVYUEVDVF9FUShzb3VyY2UuRGVidWdTdHJpbmcoKSwgZGVzdC5EZWJ1Z1N0cmlu
ZygpKTsKLSAgfQotCi0gIC8vIEFsc28gdGVzdCB1c2luZyByZWZsZWN0aW9uLWJhc2VkIHBhcnNp
bmcuCi0gIHsKLSAgICB1bml0dGVzdDo6VGVzdEZpZWxkT3JkZXJpbmdzIGRlc3Q7Ci0gICAgaW86
OkFycmF5SW5wdXRTdHJlYW0gcmF3X2lucHV0KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci0g
ICAgaW86OkNvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJnJhd19pbnB1dCk7Ci0gICAgRVhQ
RUNUX1RSVUUoV2lyZUZvcm1hdDo6UGFyc2VBbmRNZXJnZVBhcnRpYWwoJmNvZGVkX2lucHV0LCAm
ZGVzdCkpOwotICAgIEVYUEVDVF9FUShzb3VyY2UuRGVidWdTdHJpbmcoKSwgZGVzdC5EZWJ1Z1N0
cmluZygpKTsKLSAgfQotfQotCi1jb25zdCBpbnQga1Vua25vd25UeXBlSWQgPSAxNTUwMDU1Owot
Ci1URVNUKFdpcmVGb3JtYXRUZXN0LCBTZXJpYWxpemVNZXNzYWdlU2V0KSB7Ci0gIC8vIFNldCB1
cCBhIFRlc3RNZXNzYWdlU2V0IHdpdGggdHdvIGtub3duIG1lc3NhZ2VzIGFuZCBhbiB1bmtub3du
IG9uZS4KLSAgcHJvdG8yX3dpcmVmb3JtYXRfdW5pdHRlc3Q6OlRlc3RNZXNzYWdlU2V0IG1lc3Nh
Z2Vfc2V0OwotICBtZXNzYWdlX3NldC5NdXRhYmxlRXh0ZW5zaW9uKAotICAgIHVuaXR0ZXN0OjpU
ZXN0TWVzc2FnZVNldEV4dGVuc2lvbjE6Om1lc3NhZ2Vfc2V0X2V4dGVuc2lvbiktPnNldF9pKDEy
Myk7Ci0gIG1lc3NhZ2Vfc2V0Lk11dGFibGVFeHRlbnNpb24oCi0gICAgdW5pdHRlc3Q6OlRlc3RN
ZXNzYWdlU2V0RXh0ZW5zaW9uMjo6bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKS0+c2V0X3N0cigiZm9v
Iik7Ci0gIG1lc3NhZ2Vfc2V0Lm11dGFibGVfdW5rbm93bl9maWVsZHMoKS0+QWRkTGVuZ3RoRGVs
aW1pdGVkKAotICAgIGtVbmtub3duVHlwZUlkLCAiYmFyIik7Ci0KLSAgc3RyaW5nIGRhdGE7Ci0g
IEFTU0VSVF9UUlVFKG1lc3NhZ2Vfc2V0LlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRhKSk7Ci0KLSAg
Ly8gUGFyc2UgYmFjayB1c2luZyBSYXdNZXNzYWdlU2V0IGFuZCBjaGVjayB0aGUgY29udGVudHMu
Ci0gIHVuaXR0ZXN0OjpSYXdNZXNzYWdlU2V0IHJhdzsKLSAgQVNTRVJUX1RSVUUocmF3LlBhcnNl
RnJvbVN0cmluZyhkYXRhKSk7Ci0KLSAgRVhQRUNUX0VRKDAsIHJhdy51bmtub3duX2ZpZWxkcygp
LmZpZWxkX2NvdW50KCkpOwotCi0gIEFTU0VSVF9FUSgzLCByYXcuaXRlbV9zaXplKCkpOwotICBF
WFBFQ1RfRVEoCi0gICAgdW5pdHRlc3Q6OlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMTo6ZGVzY3Jp
cHRvcigpLT5leHRlbnNpb24oMCktPm51bWJlcigpLAotICAgIHJhdy5pdGVtKDApLnR5cGVfaWQo
KSk7Ci0gIEVYUEVDVF9FUSgKLSAgICB1bml0dGVzdDo6VGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24y
OjpkZXNjcmlwdG9yKCktPmV4dGVuc2lvbigwKS0+bnVtYmVyKCksCi0gICAgcmF3Lml0ZW0oMSku
dHlwZV9pZCgpKTsKLSAgRVhQRUNUX0VRKGtVbmtub3duVHlwZUlkLCByYXcuaXRlbSgyKS50eXBl
X2lkKCkpOwotCi0gIHVuaXR0ZXN0OjpUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjEgbWVzc2FnZTE7
Ci0gIEVYUEVDVF9UUlVFKG1lc3NhZ2UxLlBhcnNlRnJvbVN0cmluZyhyYXcuaXRlbSgwKS5tZXNz
YWdlKCkpKTsKLSAgRVhQRUNUX0VRKDEyMywgbWVzc2FnZTEuaSgpKTsKLQotICB1bml0dGVzdDo6
VGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24yIG1lc3NhZ2UyOwotICBFWFBFQ1RfVFJVRShtZXNzYWdl
Mi5QYXJzZUZyb21TdHJpbmcocmF3Lml0ZW0oMSkubWVzc2FnZSgpKSk7Ci0gIEVYUEVDVF9FUSgi
Zm9vIiwgbWVzc2FnZTIuc3RyKCkpOwotCi0gIEVYUEVDVF9FUSgiYmFyIiwgcmF3Lml0ZW0oMiku
bWVzc2FnZSgpKTsKLX0KLQotVEVTVChXaXJlRm9ybWF0VGVzdCwgU2VyaWFsaXplTWVzc2FnZVNl
dFZhcmlvdXNXYXlzQXJlRXF1YWwpIHsKLSAgLy8gU2VyaWFsaXplIGEgTWVzc2FnZVNldCB0byBh
IHN0cmVhbSBhbmQgdG8gYSBmbGF0IGFycmF5IHVzaW5nIGdlbmVyYXRlZAotICAvLyBjb2RlLCBh
bmQgYWxzbyB1c2luZyBXaXJlRm9ybWF0LCBhbmQgY2hlY2sgdGhhdCB0aGUgcmVzdWx0cyBhcmUg
ZXF1YWwuCi0gIC8vIFNldCB1cCBhIFRlc3RNZXNzYWdlU2V0IHdpdGggdHdvIGtub3duIG1lc3Nh
Z2VzIGFuZCBhbiB1bmtub3duIG9uZSwgYXMKLSAgLy8gYWJvdmUuCi0KLSAgcHJvdG8yX3dpcmVm
b3JtYXRfdW5pdHRlc3Q6OlRlc3RNZXNzYWdlU2V0IG1lc3NhZ2Vfc2V0OwotICBtZXNzYWdlX3Nl
dC5NdXRhYmxlRXh0ZW5zaW9uKAotICAgIHVuaXR0ZXN0OjpUZXN0TWVzc2FnZVNldEV4dGVuc2lv
bjE6Om1lc3NhZ2Vfc2V0X2V4dGVuc2lvbiktPnNldF9pKDEyMyk7Ci0gIG1lc3NhZ2Vfc2V0Lk11
dGFibGVFeHRlbnNpb24oCi0gICAgdW5pdHRlc3Q6OlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMjo6
bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKS0+c2V0X3N0cigiZm9vIik7Ci0gIG1lc3NhZ2Vfc2V0Lm11
dGFibGVfdW5rbm93bl9maWVsZHMoKS0+QWRkTGVuZ3RoRGVsaW1pdGVkKAotICAgIGtVbmtub3du
VHlwZUlkLCAiYmFyIik7Ci0KLSAgaW50IHNpemUgPSBtZXNzYWdlX3NldC5CeXRlU2l6ZSgpOwot
ICBFWFBFQ1RfRVEoc2l6ZSwgbWVzc2FnZV9zZXQuR2V0Q2FjaGVkU2l6ZSgpKTsKLSAgQVNTRVJU
X0VRKHNpemUsIFdpcmVGb3JtYXQ6OkJ5dGVTaXplKG1lc3NhZ2Vfc2V0KSk7Ci0KLSAgc3RyaW5n
IGZsYXRfZGF0YTsKLSAgc3RyaW5nIHN0cmVhbV9kYXRhOwotICBzdHJpbmcgZHluYW1pY19kYXRh
OwotICBmbGF0X2RhdGEucmVzaXplKHNpemUpOwotICBzdHJlYW1fZGF0YS5yZXNpemUoc2l6ZSk7
Ci0KLSAgLy8gU2VyaWFsaXplIHRvIGZsYXQgYXJyYXkKLSAgewotICAgIHVpbnQ4KiB0YXJnZXQg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oc3RyaW5nX2FzX2FycmF5KCZmbGF0X2RhdGEpKTsK
LSAgICB1aW50OCogZW5kID0gbWVzc2FnZV9zZXQuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9B
cnJheSh0YXJnZXQpOwotICAgIEVYUEVDVF9FUShzaXplLCBlbmQgLSB0YXJnZXQpOwotICB9Ci0K
LSAgLy8gU2VyaWFsaXplIHRvIGJ1ZmZlcgotICB7Ci0gICAgaW86OkFycmF5T3V0cHV0U3RyZWFt
IGFycmF5X3N0cmVhbShzdHJpbmdfYXNfYXJyYXkoJnN0cmVhbV9kYXRhKSwgc2l6ZSwgMSk7Ci0g
ICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0oJmFycmF5X3N0cmVhbSk7Ci0g
ICAgbWVzc2FnZV9zZXQuU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKCZvdXRwdXRfc3RyZWFtKTsK
LSAgICBBU1NFUlRfRkFMU0Uob3V0cHV0X3N0cmVhbS5IYWRFcnJvcigpKTsKLSAgfQotCi0gIC8v
IFNlcmlhbGl6ZSB0byBidWZmZXIgd2l0aCBXaXJlRm9ybWF0LgotICB7Ci0gICAgaW86OlN0cmlu
Z091dHB1dFN0cmVhbSBzdHJpbmdfc3RyZWFtKCZkeW5hbWljX2RhdGEpOwotICAgIGlvOjpDb2Rl
ZE91dHB1dFN0cmVhbSBvdXRwdXRfc3RyZWFtKCZzdHJpbmdfc3RyZWFtKTsKLSAgICBXaXJlRm9y
bWF0OjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMobWVzc2FnZV9zZXQsIHNpemUsICZvdXRwdXRf
c3RyZWFtKTsKLSAgICBBU1NFUlRfRkFMU0Uob3V0cHV0X3N0cmVhbS5IYWRFcnJvcigpKTsKLSAg
fQotCi0gIEVYUEVDVF9UUlVFKGZsYXRfZGF0YSA9PSBzdHJlYW1fZGF0YSk7Ci0gIEVYUEVDVF9U
UlVFKGZsYXRfZGF0YSA9PSBkeW5hbWljX2RhdGEpOwotfQotCi1URVNUKFdpcmVGb3JtYXRUZXN0
LCBQYXJzZU1lc3NhZ2VTZXQpIHsKLSAgLy8gU2V0IHVwIGEgUmF3TWVzc2FnZVNldCB3aXRoIHR3
byBrbm93biBtZXNzYWdlcyBhbmQgYW4gdW5rbm93biBvbmUuCi0gIHVuaXR0ZXN0OjpSYXdNZXNz
YWdlU2V0IHJhdzsKLQotICB7Ci0gICAgdW5pdHRlc3Q6OlJhd01lc3NhZ2VTZXQ6Okl0ZW0qIGl0
ZW0gPSByYXcuYWRkX2l0ZW0oKTsKLSAgICBpdGVtLT5zZXRfdHlwZV9pZCgKLSAgICAgIHVuaXR0
ZXN0OjpUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjE6OmRlc2NyaXB0b3IoKS0+ZXh0ZW5zaW9uKDAp
LT5udW1iZXIoKSk7Ci0gICAgdW5pdHRlc3Q6OlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMSBtZXNz
YWdlOwotICAgIG1lc3NhZ2Uuc2V0X2koMTIzKTsKLSAgICBtZXNzYWdlLlNlcmlhbGl6ZVRvU3Ry
aW5nKGl0ZW0tPm11dGFibGVfbWVzc2FnZSgpKTsKLSAgfQotCi0gIHsKLSAgICB1bml0dGVzdDo6
UmF3TWVzc2FnZVNldDo6SXRlbSogaXRlbSA9IHJhdy5hZGRfaXRlbSgpOwotICAgIGl0ZW0tPnNl
dF90eXBlX2lkKAotICAgICAgdW5pdHRlc3Q6OlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMjo6ZGVz
Y3JpcHRvcigpLT5leHRlbnNpb24oMCktPm51bWJlcigpKTsKLSAgICB1bml0dGVzdDo6VGVzdE1l
c3NhZ2VTZXRFeHRlbnNpb24yIG1lc3NhZ2U7Ci0gICAgbWVzc2FnZS5zZXRfc3RyKCJmb28iKTsK
LSAgICBtZXNzYWdlLlNlcmlhbGl6ZVRvU3RyaW5nKGl0ZW0tPm11dGFibGVfbWVzc2FnZSgpKTsK
LSAgfQotCi0gIHsKLSAgICB1bml0dGVzdDo6UmF3TWVzc2FnZVNldDo6SXRlbSogaXRlbSA9IHJh
dy5hZGRfaXRlbSgpOwotICAgIGl0ZW0tPnNldF90eXBlX2lkKGtVbmtub3duVHlwZUlkKTsKLSAg
ICBpdGVtLT5zZXRfbWVzc2FnZSgiYmFyIik7Ci0gIH0KLQotICBzdHJpbmcgZGF0YTsKLSAgQVNT
RVJUX1RSVUUocmF3LlNlcmlhbGl6ZVRvU3RyaW5nKCZkYXRhKSk7Ci0KLSAgLy8gUGFyc2UgYXMg
YSBUZXN0TWVzc2FnZVNldCBhbmQgY2hlY2sgdGhlIGNvbnRlbnRzLgotICBwcm90bzJfd2lyZWZv
cm1hdF91bml0dGVzdDo6VGVzdE1lc3NhZ2VTZXQgbWVzc2FnZV9zZXQ7Ci0gIEFTU0VSVF9UUlVF
KG1lc3NhZ2Vfc2V0LlBhcnNlRnJvbVN0cmluZyhkYXRhKSk7Ci0KLSAgRVhQRUNUX0VRKDEyMywg
bWVzc2FnZV9zZXQuR2V0RXh0ZW5zaW9uKAotICAgIHVuaXR0ZXN0OjpUZXN0TWVzc2FnZVNldEV4
dGVuc2lvbjE6Om1lc3NhZ2Vfc2V0X2V4dGVuc2lvbikuaSgpKTsKLSAgRVhQRUNUX0VRKCJmb28i
LCBtZXNzYWdlX3NldC5HZXRFeHRlbnNpb24oCi0gICAgdW5pdHRlc3Q6OlRlc3RNZXNzYWdlU2V0
RXh0ZW5zaW9uMjo6bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKS5zdHIoKSk7Ci0KLSAgQVNTRVJUX0VR
KDEsIG1lc3NhZ2Vfc2V0LnVua25vd25fZmllbGRzKCkuZmllbGRfY291bnQoKSk7Ci0gIEFTU0VS
VF9FUShVbmtub3duRmllbGQ6OlRZUEVfTEVOR1RIX0RFTElNSVRFRCwKLSAgICAgICAgICAgIG1l
c3NhZ2Vfc2V0LnVua25vd25fZmllbGRzKCkuZmllbGQoMCkudHlwZSgpKTsKLSAgRVhQRUNUX0VR
KCJiYXIiLCBtZXNzYWdlX3NldC51bmtub3duX2ZpZWxkcygpLmZpZWxkKDApLmxlbmd0aF9kZWxp
bWl0ZWQoKSk7Ci0KLSAgLy8gQWxzbyBwYXJzZSB1c2luZyBXaXJlRm9ybWF0LgotICBwcm90bzJf
d2lyZWZvcm1hdF91bml0dGVzdDo6VGVzdE1lc3NhZ2VTZXQgZHluYW1pY19tZXNzYWdlX3NldDsK
LSAgaW86OkNvZGVkSW5wdXRTdHJlYW0gaW5wdXQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OCo+KGRhdGEuZGF0YSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zaXpl
KCkpOwotICBBU1NFUlRfVFJVRShXaXJlRm9ybWF0OjpQYXJzZUFuZE1lcmdlUGFydGlhbCgmaW5w
dXQsICZkeW5hbWljX21lc3NhZ2Vfc2V0KSk7Ci0gIEVYUEVDVF9FUShtZXNzYWdlX3NldC5EZWJ1
Z1N0cmluZygpLCBkeW5hbWljX21lc3NhZ2Vfc2V0LkRlYnVnU3RyaW5nKCkpOwotfQotCi1URVNU
KFdpcmVGb3JtYXRUZXN0LCBQYXJzZU1lc3NhZ2VTZXRXaXRoUmV2ZXJzZVRhZ09yZGVyKSB7Ci0g
IHN0cmluZyBkYXRhOwotICB7Ci0gICAgdW5pdHRlc3Q6OlRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9u
MSBtZXNzYWdlOwotICAgIG1lc3NhZ2Uuc2V0X2koMTIzKTsKLSAgICAvLyBCdWlsZCBhIE1lc3Nh
Z2VTZXQgbWFudWFsbHkgd2l0aCBpdHMgbWVzc2FnZSBjb250ZW50IHB1dCBiZWZvcmUgaXRzCi0g
ICAgLy8gdHlwZV9pZC4KLSAgICBpbzo6U3RyaW5nT3V0cHV0U3RyZWFtIG91dHB1dF9zdHJlYW0o
JmRhdGEpOwotICAgIGlvOjpDb2RlZE91dHB1dFN0cmVhbSBjb2RlZF9vdXRwdXQoJm91dHB1dF9z
dHJlYW0pOwotICAgIGNvZGVkX291dHB1dC5Xcml0ZVRhZyhXaXJlRm9ybWF0TGl0ZTo6a01lc3Nh
Z2VTZXRJdGVtU3RhcnRUYWcpOwotICAgIC8vIFdyaXRlIHRoZSBtZXNzYWdlIGNvbnRlbnQgZmly
c3QuCi0gICAgV2lyZUZvcm1hdExpdGU6OldyaXRlVGFnKFdpcmVGb3JtYXRMaXRlOjprTWVzc2Fn
ZVNldE1lc3NhZ2VOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpcmVGb3Jt
YXRMaXRlOjpXSVJFVFlQRV9MRU5HVEhfREVMSU1JVEVELAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmY29kZWRfb3V0cHV0KTsKLSAgICBjb2RlZF9vdXRwdXQuV3JpdGVWYXJpbnQzMiht
ZXNzYWdlLkJ5dGVTaXplKCkpOwotICAgIG1lc3NhZ2UuU2VyaWFsaXplV2l0aENhY2hlZFNpemVz
KCZjb2RlZF9vdXRwdXQpOwotICAgIC8vIFdyaXRlIHRoZSB0eXBlIGlkLgotICAgIHVpbnQzMiB0
eXBlX2lkID0gbWVzc2FnZS5HZXREZXNjcmlwdG9yKCktPmV4dGVuc2lvbigwKS0+bnVtYmVyKCk7
Ci0gICAgV2lyZUZvcm1hdExpdGU6OldyaXRlVUludDMyKFdpcmVGb3JtYXRMaXRlOjprTWVzc2Fn
ZVNldFR5cGVJZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9p
ZCwgJmNvZGVkX291dHB1dCk7Ci0gICAgY29kZWRfb3V0cHV0LldyaXRlVGFnKFdpcmVGb3JtYXRM
aXRlOjprTWVzc2FnZVNldEl0ZW1FbmRUYWcpOwotICB9Ci0gIHsKLSAgICBwcm90bzJfd2lyZWZv
cm1hdF91bml0dGVzdDo6VGVzdE1lc3NhZ2VTZXQgbWVzc2FnZV9zZXQ7Ci0gICAgQVNTRVJUX1RS
VUUobWVzc2FnZV9zZXQuUGFyc2VGcm9tU3RyaW5nKGRhdGEpKTsKLQotICAgIEVYUEVDVF9FUSgx
MjMsIG1lc3NhZ2Vfc2V0LkdldEV4dGVuc2lvbigKLSAgICAgICAgdW5pdHRlc3Q6OlRlc3RNZXNz
YWdlU2V0RXh0ZW5zaW9uMTo6bWVzc2FnZV9zZXRfZXh0ZW5zaW9uKS5pKCkpOwotICB9Ci0gIHsK
LSAgICAvLyBUZXN0IHBhcnNlIHRoZSBtZXNzYWdlIHZpYSBSZWZsZWN0aW9uLgotICAgIHByb3Rv
Ml93aXJlZm9ybWF0X3VuaXR0ZXN0OjpUZXN0TWVzc2FnZVNldCBtZXNzYWdlX3NldDsKLSAgICBp
bzo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCgKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpOwotICAgIEVYUEVDVF9UUlVFKFdp
cmVGb3JtYXQ6OlBhcnNlQW5kTWVyZ2VQYXJ0aWFsKCZpbnB1dCwgJm1lc3NhZ2Vfc2V0KSk7Ci0g
ICAgRVhQRUNUX1RSVUUoaW5wdXQuQ29uc3VtZWRFbnRpcmVNZXNzYWdlKCkpOwotCi0gICAgRVhQ
RUNUX0VRKDEyMywgbWVzc2FnZV9zZXQuR2V0RXh0ZW5zaW9uKAotICAgICAgICB1bml0dGVzdDo6
VGVzdE1lc3NhZ2VTZXRFeHRlbnNpb24xOjptZXNzYWdlX3NldF9leHRlbnNpb24pLmkoKSk7Ci0g
IH0KLX0KLQotVEVTVChXaXJlRm9ybWF0VGVzdCwgUGFyc2VCcm9rZW5NZXNzYWdlU2V0KSB7Ci0g
IHByb3RvMl93aXJlZm9ybWF0X3VuaXR0ZXN0OjpUZXN0TWVzc2FnZVNldCBtZXNzYWdlX3NldDsK
LSAgc3RyaW5nIGlucHV0KCJnb29kYnllIik7ICAvLyBJbnZhbGlkIHdpcmUgZm9ybWF0IGRhdGEu
Ci0gIEVYUEVDVF9GQUxTRShtZXNzYWdlX3NldC5QYXJzZUZyb21TdHJpbmcoaW5wdXQpKTsKLX0K
LQotVEVTVChXaXJlRm9ybWF0VGVzdCwgUmVjdXJzaW9uTGltaXQpIHsKLSAgdW5pdHRlc3Q6OlRl
c3RSZWN1cnNpdmVNZXNzYWdlIG1lc3NhZ2U7Ci0gIG1lc3NhZ2UubXV0YWJsZV9hKCktPm11dGFi
bGVfYSgpLT5tdXRhYmxlX2EoKS0+bXV0YWJsZV9hKCktPnNldF9pKDEpOwotICBzdHJpbmcgZGF0
YTsKLSAgbWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygmZGF0YSk7Ci0KLSAgewotICAgIGlvOjpB
cnJheUlucHV0U3RyZWFtIHJhd19pbnB1dChkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwotICAg
IGlvOjpDb2RlZElucHV0U3RyZWFtIGlucHV0KCZyYXdfaW5wdXQpOwotICAgIGlucHV0LlNldFJl
Y3Vyc2lvbkxpbWl0KDQpOwotICAgIHVuaXR0ZXN0OjpUZXN0UmVjdXJzaXZlTWVzc2FnZSBtZXNz
YWdlMjsKLSAgICBFWFBFQ1RfVFJVRShtZXNzYWdlMi5QYXJzZUZyb21Db2RlZFN0cmVhbSgmaW5w
dXQpKTsKLSAgfQotCi0gIHsKLSAgICBpbzo6QXJyYXlJbnB1dFN0cmVhbSByYXdfaW5wdXQoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCgm
cmF3X2lucHV0KTsKLSAgICBpbnB1dC5TZXRSZWN1cnNpb25MaW1pdCgzKTsKLSAgICB1bml0dGVz
dDo6VGVzdFJlY3Vyc2l2ZU1lc3NhZ2UgbWVzc2FnZTI7Ci0gICAgRVhQRUNUX0ZBTFNFKG1lc3Nh
Z2UyLlBhcnNlRnJvbUNvZGVkU3RyZWFtKCZpbnB1dCkpOwotICB9Ci19Ci0KLVRFU1QoV2lyZUZv
cm1hdFRlc3QsIFVua25vd25GaWVsZFJlY3Vyc2lvbkxpbWl0KSB7Ci0gIHVuaXR0ZXN0OjpUZXN0
RW1wdHlNZXNzYWdlIG1lc3NhZ2U7Ci0gIG1lc3NhZ2UubXV0YWJsZV91bmtub3duX2ZpZWxkcygp
Ci0gICAgICAgIC0+QWRkR3JvdXAoMTIzNCkKLSAgICAgICAgLT5BZGRHcm91cCgxMjM0KQotICAg
ICAgICAtPkFkZEdyb3VwKDEyMzQpCi0gICAgICAgIC0+QWRkR3JvdXAoMTIzNCkKLSAgICAgICAg
LT5BZGRWYXJpbnQoMTIzNCwgMTIzKTsKLSAgc3RyaW5nIGRhdGE7Ci0gIG1lc3NhZ2UuU2VyaWFs
aXplVG9TdHJpbmcoJmRhdGEpOwotCi0gIHsKLSAgICBpbzo6QXJyYXlJbnB1dFN0cmVhbSByYXdf
aW5wdXQoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgICBpbzo6Q29kZWRJbnB1dFN0cmVh
bSBpbnB1dCgmcmF3X2lucHV0KTsKLSAgICBpbnB1dC5TZXRSZWN1cnNpb25MaW1pdCg0KTsKLSAg
ICB1bml0dGVzdDo6VGVzdEVtcHR5TWVzc2FnZSBtZXNzYWdlMjsKLSAgICBFWFBFQ1RfVFJVRSht
ZXNzYWdlMi5QYXJzZUZyb21Db2RlZFN0cmVhbSgmaW5wdXQpKTsKLSAgfQotCi0gIHsKLSAgICBp
bzo6QXJyYXlJbnB1dFN0cmVhbSByYXdfaW5wdXQoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
LSAgICBpbzo6Q29kZWRJbnB1dFN0cmVhbSBpbnB1dCgmcmF3X2lucHV0KTsKLSAgICBpbnB1dC5T
ZXRSZWN1cnNpb25MaW1pdCgzKTsKLSAgICB1bml0dGVzdDo6VGVzdEVtcHR5TWVzc2FnZSBtZXNz
YWdlMjsKLSAgICBFWFBFQ1RfRkFMU0UobWVzc2FnZTIuUGFyc2VGcm9tQ29kZWRTdHJlYW0oJmlu
cHV0KSk7Ci0gIH0KLX0KLQotVEVTVChXaXJlRm9ybWF0VGVzdCwgWmlnWmFnKSB7Ci0vLyBhdm9p
ZCBsaW5lLXdyYXBwaW5nCi0jZGVmaW5lIExMKHgpIEdPT0dMRV9MT05HTE9ORyh4KQotI2RlZmlu
ZSBVTEwoeCkgR09PR0xFX1VMT05HTE9ORyh4KQotI2RlZmluZSBaaWdaYWdFbmNvZGUzMih4KSBX
aXJlRm9ybWF0TGl0ZTo6WmlnWmFnRW5jb2RlMzIoeCkKLSNkZWZpbmUgWmlnWmFnRGVjb2RlMzIo
eCkgV2lyZUZvcm1hdExpdGU6OlppZ1phZ0RlY29kZTMyKHgpCi0jZGVmaW5lIFppZ1phZ0VuY29k
ZTY0KHgpIFdpcmVGb3JtYXRMaXRlOjpaaWdaYWdFbmNvZGU2NCh4KQotI2RlZmluZSBaaWdaYWdE
ZWNvZGU2NCh4KSBXaXJlRm9ybWF0TGl0ZTo6WmlnWmFnRGVjb2RlNjQoeCkKLQotICBFWFBFQ1Rf
RVEoMHUsIFppZ1phZ0VuY29kZTMyKCAwKSk7Ci0gIEVYUEVDVF9FUSgxdSwgWmlnWmFnRW5jb2Rl
MzIoLTEpKTsKLSAgRVhQRUNUX0VRKDJ1LCBaaWdaYWdFbmNvZGUzMiggMSkpOwotICBFWFBFQ1Rf
RVEoM3UsIFppZ1phZ0VuY29kZTMyKC0yKSk7Ci0gIEVYUEVDVF9FUSgweDdGRkZGRkZFdSwgWmln
WmFnRW5jb2RlMzIoMHgzRkZGRkZGRikpOwotICBFWFBFQ1RfRVEoMHg3RkZGRkZGRnUsIFppZ1ph
Z0VuY29kZTMyKDB4QzAwMDAwMDApKTsKLSAgRVhQRUNUX0VRKDB4RkZGRkZGRkV1LCBaaWdaYWdF
bmNvZGUzMigweDdGRkZGRkZGKSk7Ci0gIEVYUEVDVF9FUSgweEZGRkZGRkZGdSwgWmlnWmFnRW5j
b2RlMzIoMHg4MDAwMDAwMCkpOwotCi0gIEVYUEVDVF9FUSggMCwgWmlnWmFnRGVjb2RlMzIoMHUp
KTsKLSAgRVhQRUNUX0VRKC0xLCBaaWdaYWdEZWNvZGUzMigxdSkpOwotICBFWFBFQ1RfRVEoIDEs
IFppZ1phZ0RlY29kZTMyKDJ1KSk7Ci0gIEVYUEVDVF9FUSgtMiwgWmlnWmFnRGVjb2RlMzIoM3Up
KTsKLSAgRVhQRUNUX0VRKDB4M0ZGRkZGRkYsIFppZ1phZ0RlY29kZTMyKDB4N0ZGRkZGRkV1KSk7
Ci0gIEVYUEVDVF9FUSgweEMwMDAwMDAwLCBaaWdaYWdEZWNvZGUzMigweDdGRkZGRkZGdSkpOwot
ICBFWFBFQ1RfRVEoMHg3RkZGRkZGRiwgWmlnWmFnRGVjb2RlMzIoMHhGRkZGRkZGRXUpKTsKLSAg
RVhQRUNUX0VRKDB4ODAwMDAwMDAsIFppZ1phZ0RlY29kZTMyKDB4RkZGRkZGRkZ1KSk7Ci0KLSAg
RVhQRUNUX0VRKDB1LCBaaWdaYWdFbmNvZGU2NCggMCkpOwotICBFWFBFQ1RfRVEoMXUsIFppZ1ph
Z0VuY29kZTY0KC0xKSk7Ci0gIEVYUEVDVF9FUSgydSwgWmlnWmFnRW5jb2RlNjQoIDEpKTsKLSAg
RVhQRUNUX0VRKDN1LCBaaWdaYWdFbmNvZGU2NCgtMikpOwotICBFWFBFQ1RfRVEoVUxMKDB4MDAw
MDAwMDA3RkZGRkZGRSksIFppZ1phZ0VuY29kZTY0KExMKDB4MDAwMDAwMDAzRkZGRkZGRikpKTsK
LSAgRVhQRUNUX0VRKFVMTCgweDAwMDAwMDAwN0ZGRkZGRkYpLCBaaWdaYWdFbmNvZGU2NChMTCgw
eEZGRkZGRkZGQzAwMDAwMDApKSk7Ci0gIEVYUEVDVF9FUShVTEwoMHgwMDAwMDAwMEZGRkZGRkZF
KSwgWmlnWmFnRW5jb2RlNjQoTEwoMHgwMDAwMDAwMDdGRkZGRkZGKSkpOwotICBFWFBFQ1RfRVEo
VUxMKDB4MDAwMDAwMDBGRkZGRkZGRiksIFppZ1phZ0VuY29kZTY0KExMKDB4RkZGRkZGRkY4MDAw
MDAwMCkpKTsKLSAgRVhQRUNUX0VRKFVMTCgweEZGRkZGRkZGRkZGRkZGRkUpLCBaaWdaYWdFbmNv
ZGU2NChMTCgweDdGRkZGRkZGRkZGRkZGRkYpKSk7Ci0gIEVYUEVDVF9FUShVTEwoMHhGRkZGRkZG
RkZGRkZGRkZGKSwgWmlnWmFnRW5jb2RlNjQoTEwoMHg4MDAwMDAwMDAwMDAwMDAwKSkpOwotCi0g
IEVYUEVDVF9FUSggMCwgWmlnWmFnRGVjb2RlNjQoMHUpKTsKLSAgRVhQRUNUX0VRKC0xLCBaaWda
YWdEZWNvZGU2NCgxdSkpOwotICBFWFBFQ1RfRVEoIDEsIFppZ1phZ0RlY29kZTY0KDJ1KSk7Ci0g
IEVYUEVDVF9FUSgtMiwgWmlnWmFnRGVjb2RlNjQoM3UpKTsKLSAgRVhQRUNUX0VRKExMKDB4MDAw
MDAwMDAzRkZGRkZGRiksIFppZ1phZ0RlY29kZTY0KFVMTCgweDAwMDAwMDAwN0ZGRkZGRkUpKSk7
Ci0gIEVYUEVDVF9FUShMTCgweEZGRkZGRkZGQzAwMDAwMDApLCBaaWdaYWdEZWNvZGU2NChVTEwo
MHgwMDAwMDAwMDdGRkZGRkZGKSkpOwotICBFWFBFQ1RfRVEoTEwoMHgwMDAwMDAwMDdGRkZGRkZG
KSwgWmlnWmFnRGVjb2RlNjQoVUxMKDB4MDAwMDAwMDBGRkZGRkZGRSkpKTsKLSAgRVhQRUNUX0VR
KExMKDB4RkZGRkZGRkY4MDAwMDAwMCksIFppZ1phZ0RlY29kZTY0KFVMTCgweDAwMDAwMDAwRkZG
RkZGRkYpKSk7Ci0gIEVYUEVDVF9FUShMTCgweDdGRkZGRkZGRkZGRkZGRkYpLCBaaWdaYWdEZWNv
ZGU2NChVTEwoMHhGRkZGRkZGRkZGRkZGRkZFKSkpOwotICBFWFBFQ1RfRVEoTEwoMHg4MDAwMDAw
MDAwMDAwMDAwKSwgWmlnWmFnRGVjb2RlNjQoVUxMKDB4RkZGRkZGRkZGRkZGRkZGRikpKTsKLQot
ICAvLyBTb21lIGVhc2llci10by12ZXJpZnkgcm91bmQtdHJpcCB0ZXN0cy4gIFRoZSBpbnB1dHMg
KG90aGVyIHRoYW4gMCwgMSwgLTEpCi0gIC8vIHdlcmUgY2hvc2VuIHNlbWktcmFuZG9tbHkgdmlh
IGtleWJvYXJkIGJhc2hpbmcuCi0gIEVYUEVDVF9FUSggICAgMCwgWmlnWmFnRGVjb2RlMzIoWmln
WmFnRW5jb2RlMzIoICAgIDApKSk7Ci0gIEVYUEVDVF9FUSggICAgMSwgWmlnWmFnRGVjb2RlMzIo
WmlnWmFnRW5jb2RlMzIoICAgIDEpKSk7Ci0gIEVYUEVDVF9FUSggICAtMSwgWmlnWmFnRGVjb2Rl
MzIoWmlnWmFnRW5jb2RlMzIoICAgLTEpKSk7Ci0gIEVYUEVDVF9FUSgxNDkyNywgWmlnWmFnRGVj
b2RlMzIoWmlnWmFnRW5jb2RlMzIoMTQ5MjcpKSk7Ci0gIEVYUEVDVF9FUSgtMzYxMiwgWmlnWmFn
RGVjb2RlMzIoWmlnWmFnRW5jb2RlMzIoLTM2MTIpKSk7Ci0KLSAgRVhQRUNUX0VRKCAgICAwLCBa
aWdaYWdEZWNvZGU2NChaaWdaYWdFbmNvZGU2NCggICAgMCkpKTsKLSAgRVhQRUNUX0VRKCAgICAx
LCBaaWdaYWdEZWNvZGU2NChaaWdaYWdFbmNvZGU2NCggICAgMSkpKTsKLSAgRVhQRUNUX0VRKCAg
IC0xLCBaaWdaYWdEZWNvZGU2NChaaWdaYWdFbmNvZGU2NCggICAtMSkpKTsKLSAgRVhQRUNUX0VR
KDE0OTI3LCBaaWdaYWdEZWNvZGU2NChaaWdaYWdFbmNvZGU2NCgxNDkyNykpKTsKLSAgRVhQRUNU
X0VRKC0zNjEyLCBaaWdaYWdEZWNvZGU2NChaaWdaYWdFbmNvZGU2NCgtMzYxMikpKTsKLQotICBF
WFBFQ1RfRVEoTEwoODU2OTEyMzA0ODAxNDE2KSwgWmlnWmFnRGVjb2RlNjQoWmlnWmFnRW5jb2Rl
NjQoCi0gICAgICAgICAgICBMTCg4NTY5MTIzMDQ4MDE0MTYpKSkpOwotICBFWFBFQ1RfRVEoTEwo
LTc1MTIzOTA1NDM5NTcxMjU2KSwgWmlnWmFnRGVjb2RlNjQoWmlnWmFnRW5jb2RlNjQoCi0gICAg
ICAgICAgICBMTCgtNzUxMjM5MDU0Mzk1NzEyNTYpKSkpOwotfQotCi1URVNUKFdpcmVGb3JtYXRU
ZXN0LCBSZXBlYXRlZFNjYWxhcnNEaWZmZXJlbnRUYWdTaXplcykgewotICAvLyBBdCBvbmUgcG9p
bnQgY2hlY2tzIHdvdWxkIHRyaWdnZXIgd2hlbiBwYXJzaW5nIHJlcGVhdGVkIGZpeGVkIHNjYWxh
cgotICAvLyBmaWVsZHMuCi0gIHByb3RvYnVmX3VuaXR0ZXN0OjpUZXN0UmVwZWF0ZWRTY2FsYXJE
aWZmZXJlbnRUYWdTaXplcyBtc2cxLCBtc2cyOwotICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsg
KytpKSB7Ci0gICAgbXNnMS5hZGRfcmVwZWF0ZWRfZml4ZWQzMihpKTsKLSAgICBtc2cxLmFkZF9y
ZXBlYXRlZF9pbnQzMihpKTsKLSAgICBtc2cxLmFkZF9yZXBlYXRlZF9maXhlZDY0KGkpOwotICAg
IG1zZzEuYWRkX3JlcGVhdGVkX2ludDY0KGkpOwotICAgIG1zZzEuYWRkX3JlcGVhdGVkX2Zsb2F0
KGkpOwotICAgIG1zZzEuYWRkX3JlcGVhdGVkX3VpbnQ2NChpKTsKLSAgfQotCi0gIC8vIE1ha2Ug
c3VyZSB0aGF0IHdlIGhhdmUgYSB2YXJpZXR5IG9mIHRhZyBzaXplcy4KLSAgY29uc3QgZ29vZ2xl
Ojpwcm90b2J1Zjo6RGVzY3JpcHRvciogZGVzYyA9IG1zZzEuR2V0RGVzY3JpcHRvcigpOwotICBj
b25zdCBnb29nbGU6OnByb3RvYnVmOjpGaWVsZERlc2NyaXB0b3IqIGZpZWxkOwotICBmaWVsZCA9
IGRlc2MtPkZpbmRGaWVsZEJ5TmFtZSgicmVwZWF0ZWRfZml4ZWQzMiIpOwotICBBU1NFUlRfVFJV
RShmaWVsZCAhPSBOVUxMKTsKLSAgQVNTRVJUX0VRKDEsIFdpcmVGb3JtYXQ6OlRhZ1NpemUoZmll
bGQtPm51bWJlcigpLCBmaWVsZC0+dHlwZSgpKSk7Ci0gIGZpZWxkID0gZGVzYy0+RmluZEZpZWxk
QnlOYW1lKCJyZXBlYXRlZF9pbnQzMiIpOwotICBBU1NFUlRfVFJVRShmaWVsZCAhPSBOVUxMKTsK
LSAgQVNTRVJUX0VRKDEsIFdpcmVGb3JtYXQ6OlRhZ1NpemUoZmllbGQtPm51bWJlcigpLCBmaWVs
ZC0+dHlwZSgpKSk7Ci0gIGZpZWxkID0gZGVzYy0+RmluZEZpZWxkQnlOYW1lKCJyZXBlYXRlZF9m
aXhlZDY0Iik7Ci0gIEFTU0VSVF9UUlVFKGZpZWxkICE9IE5VTEwpOwotICBBU1NFUlRfRVEoMiwg
V2lyZUZvcm1hdDo6VGFnU2l6ZShmaWVsZC0+bnVtYmVyKCksIGZpZWxkLT50eXBlKCkpKTsKLSAg
ZmllbGQgPSBkZXNjLT5GaW5kRmllbGRCeU5hbWUoInJlcGVhdGVkX2ludDY0Iik7Ci0gIEFTU0VS
VF9UUlVFKGZpZWxkICE9IE5VTEwpOwotICBBU1NFUlRfRVEoMiwgV2lyZUZvcm1hdDo6VGFnU2l6
ZShmaWVsZC0+bnVtYmVyKCksIGZpZWxkLT50eXBlKCkpKTsKLSAgZmllbGQgPSBkZXNjLT5GaW5k
RmllbGRCeU5hbWUoInJlcGVhdGVkX2Zsb2F0Iik7Ci0gIEFTU0VSVF9UUlVFKGZpZWxkICE9IE5V
TEwpOwotICBBU1NFUlRfRVEoMywgV2lyZUZvcm1hdDo6VGFnU2l6ZShmaWVsZC0+bnVtYmVyKCks
IGZpZWxkLT50eXBlKCkpKTsKLSAgZmllbGQgPSBkZXNjLT5GaW5kRmllbGRCeU5hbWUoInJlcGVh
dGVkX3VpbnQ2NCIpOwotICBBU1NFUlRfVFJVRShmaWVsZCAhPSBOVUxMKTsKLSAgQVNTRVJUX0VR
KDMsIFdpcmVGb3JtYXQ6OlRhZ1NpemUoZmllbGQtPm51bWJlcigpLCBmaWVsZC0+dHlwZSgpKSk7
Ci0KLSAgRVhQRUNUX1RSVUUobXNnMi5QYXJzZUZyb21TdHJpbmcobXNnMS5TZXJpYWxpemVBc1N0
cmluZygpKSk7Ci0gIEVYUEVDVF9FUShtc2cxLkRlYnVnU3RyaW5nKCksIG1zZzIuRGVidWdTdHJp
bmcoKSk7Ci19Ci0KLVRFU1QoV2lyZUZvcm1hdFRlc3QsIENvbXBhdGlibGVUeXBlcykgewotICBj
b25zdCBpbnQ2NCBkYXRhID0gMHgxMDAwMDAwMDBMTDsKLSAgdW5pdHRlc3Q6OkludDY0TWVzc2Fn
ZSBtc2cxOwotICBtc2cxLnNldF9kYXRhKGRhdGEpOwotICBzdHJpbmcgc2VyaWFsaXplZDsKLSAg
bXNnMS5TZXJpYWxpemVUb1N0cmluZygmc2VyaWFsaXplZCk7Ci0KLSAgLy8gVGVzdCBpbnQ2NCBp
cyBjb21wYXRpYmxlIHdpdGggYm9vbAotICB1bml0dGVzdDo6Qm9vbE1lc3NhZ2UgbXNnMjsKLSAg
QVNTRVJUX1RSVUUobXNnMi5QYXJzZUZyb21TdHJpbmcoc2VyaWFsaXplZCkpOwotICBBU1NFUlRf
RVEoc3RhdGljX2Nhc3Q8Ym9vbD4oZGF0YSksIG1zZzIuZGF0YSgpKTsKLQotICAvLyBUZXN0IGlu
dDY0IGlzIGNvbXBhdGlibGUgd2l0aCB1aW50NjQKLSAgdW5pdHRlc3Q6OlVpbnQ2NE1lc3NhZ2Ug
bXNnMzsKLSAgQVNTRVJUX1RSVUUobXNnMy5QYXJzZUZyb21TdHJpbmcoc2VyaWFsaXplZCkpOwot
ICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8dWludDY0PihkYXRhKSwgbXNnMy5kYXRhKCkpOwotCi0g
IC8vIFRlc3QgaW50NjQgaXMgY29tcGF0aWJsZSB3aXRoIGludDMyCi0gIHVuaXR0ZXN0OjpJbnQz
Mk1lc3NhZ2UgbXNnNDsKLSAgQVNTRVJUX1RSVUUobXNnNC5QYXJzZUZyb21TdHJpbmcoc2VyaWFs
aXplZCkpOwotICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8aW50MzI+KGRhdGEpLCBtc2c0LmRhdGEo
KSk7Ci0KLSAgLy8gVGVzdCBpbnQ2NCBpcyBjb21wYXRpYmxlIHdpdGggdWludDMyCi0gIHVuaXR0
ZXN0OjpVaW50MzJNZXNzYWdlIG1zZzU7Ci0gIEFTU0VSVF9UUlVFKG1zZzUuUGFyc2VGcm9tU3Ry
aW5nKHNlcmlhbGl6ZWQpKTsKLSAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHVpbnQzMj4oZGF0YSks
IG1zZzUuZGF0YSgpKTsKLX0KLQotY2xhc3MgUHJvdG8zUHJpbWl0aXZlUmVwZWF0ZWRXaXJlRm9y
bWF0VGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgUHJvdG8z
UHJpbWl0aXZlUmVwZWF0ZWRXaXJlRm9ybWF0VGVzdCgpCi0gICAgICA6IHBhY2tlZFRlc3RBbGxU
eXBlc18oCi0gICAgICAgICAgICAiXHhGQVx4MDFceDAxXHgwMSIKLSAgICAgICAgICAgICJceDgy
XHgwMlx4MDFceDAxIgotICAgICAgICAgICAgIlx4OEFceDAyXHgwMVx4MDEiCi0gICAgICAgICAg
ICAiXHg5Mlx4MDJceDAxXHgwMSIKLSAgICAgICAgICAgICJceDlBXHgwMlx4MDFceDAyIgotICAg
ICAgICAgICAgIlx4QTJceDAyXHgwMVx4MDIiCi0gICAgICAgICAgICAiXHhBQVx4MDJceDA0XHgw
MVx4MDBceDAwXHgwMCIKLSAgICAgICAgICAgICJceEIyXHgwMlx4MDhceDAxXHgwMFx4MDBceDAw
XHgwMFx4MDBceDAwXHgwMCIKLSAgICAgICAgICAgICJceEJBXHgwMlx4MDRceDAxXHgwMFx4MDBc
eDAwIgotICAgICAgICAgICAgIlx4QzJceDAyXHgwOFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4
MDBceDAwIgotICAgICAgICAgICAgIlx4Q0FceDAyXHgwNFx4MDBceDAwXHg4MFx4M2YiCi0gICAg
ICAgICAgICAiXHhEMlx4MDJceDA4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhmMFx4M2YiCi0g
ICAgICAgICAgICAiXHhEQVx4MDJceDAxXHgwMSIKLSAgICAgICAgICAgICJceDlBXHgwM1x4MDFc
eDAxIiwKLSAgICAgICAgICAgIDg2KSwKLSAgICAgICAgcGFja2VkVGVzdFVucGFja2VkVHlwZXNf
KAotICAgICAgICAgICAgIlx4MEFceDAxXHgwMSIKLSAgICAgICAgICAgICJceDEyXHgwMVx4MDEi
Ci0gICAgICAgICAgICAiXHgxQVx4MDFceDAxIgotICAgICAgICAgICAgIlx4MjJceDAxXHgwMSIK
LSAgICAgICAgICAgICJceDJBXHgwMVx4MDIiCi0gICAgICAgICAgICAiXHgzMlx4MDFceDAyIgot
ICAgICAgICAgICAgIlx4M0FceDA0XHgwMVx4MDBceDAwXHgwMCIKLSAgICAgICAgICAgICJceDQy
XHgwOFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgotICAgICAgICAgICAgIlx4NEFc
eDA0XHgwMVx4MDBceDAwXHgwMCIKLSAgICAgICAgICAgICJceDUyXHgwOFx4MDFceDAwXHgwMFx4
MDBceDAwXHgwMFx4MDBceDAwIgotICAgICAgICAgICAgIlx4NUFceDA0XHgwMFx4MDBceDgwXHgz
ZiIKLSAgICAgICAgICAgICJceDYyXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ZjBceDNm
IgotICAgICAgICAgICAgIlx4NkFceDAxXHgwMSIKLSAgICAgICAgICAgICJceDcyXHgwMVx4MDEi
LAotICAgICAgICAgICAgNzIpLAotICAgICAgICB1bnBhY2tlZFRlc3RBbGxUeXBlc18oCi0gICAg
ICAgICAgICAiXHhGOFx4MDFceDAxIgotICAgICAgICAgICAgIlx4ODBceDAyXHgwMSIKLSAgICAg
ICAgICAgICJceDg4XHgwMlx4MDEiCi0gICAgICAgICAgICAiXHg5MFx4MDJceDAxIgotICAgICAg
ICAgICAgIlx4OThceDAyXHgwMiIKLSAgICAgICAgICAgICJceEEwXHgwMlx4MDIiCi0gICAgICAg
ICAgICAiXHhBRFx4MDJceDAxXHgwMFx4MDBceDAwIgotICAgICAgICAgICAgIlx4QjFceDAyXHgw
MVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCi0gICAgICAgICAgICAiXHhCRFx4MDJceDAx
XHgwMFx4MDBceDAwIgotICAgICAgICAgICAgIlx4QzFceDAyXHgwMVx4MDBceDAwXHgwMFx4MDBc
eDAwXHgwMFx4MDAiCi0gICAgICAgICAgICAiXHhDRFx4MDJceDAwXHgwMFx4ODBceDNmIgotICAg
ICAgICAgICAgIlx4RDFceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhmMFx4M2YiCi0gICAg
ICAgICAgICAiXHhEOFx4MDJceDAxIgotICAgICAgICAgICAgIlx4OThceDAzXHgwMSIsCi0gICAg
ICAgICAgICA3MiksCi0gICAgICAgIHVucGFja2VkVGVzdFVucGFja2VkVHlwZXNfKAotICAgICAg
ICAgICAgIlx4MDhceDAxIgotICAgICAgICAgICAgIlx4MTBceDAxIgotICAgICAgICAgICAgIlx4
MThceDAxIgotICAgICAgICAgICAgIlx4MjBceDAxIgotICAgICAgICAgICAgIlx4MjhceDAyIgot
ICAgICAgICAgICAgIlx4MzBceDAyIgotICAgICAgICAgICAgIlx4M0RceDAxXHgwMFx4MDBceDAw
IgotICAgICAgICAgICAgIlx4NDFceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKLSAg
ICAgICAgICAgICJceDREXHgwMVx4MDBceDAwXHgwMCIKLSAgICAgICAgICAgICJceDUxXHgwMVx4
MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCi0gICAgICAgICAgICAiXHg1RFx4MDBceDAwXHg4
MFx4M2YiCi0gICAgICAgICAgICAiXHg2MVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ZjBceDNm
IgotICAgICAgICAgICAgIlx4NjhceDAxIgotICAgICAgICAgICAgIlx4NzBceDAxIiwKLSAgICAg
ICAgICAgIDU4KSB7fQotICB0ZW1wbGF0ZSA8Y2xhc3MgUHJvdG8+Ci0gIHZvaWQgU2V0UHJvdG8z
UHJpbWl0aXZlUmVwZWF0ZWRGaWVsZHMoUHJvdG8qIG1lc3NhZ2UpIHsKLSAgICBtZXNzYWdlLT5h
ZGRfcmVwZWF0ZWRfaW50MzIoMSk7Ci0gICAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2ludDY0KDEp
OwotICAgIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF91aW50MzIoMSk7Ci0gICAgbWVzc2FnZS0+YWRk
X3JlcGVhdGVkX3VpbnQ2NCgxKTsKLSAgICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfc2ludDMyKDEp
OwotICAgIG1lc3NhZ2UtPmFkZF9yZXBlYXRlZF9zaW50NjQoMSk7Ci0gICAgbWVzc2FnZS0+YWRk
X3JlcGVhdGVkX2ZpeGVkMzIoMSk7Ci0gICAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX2ZpeGVkNjQo
MSk7Ci0gICAgbWVzc2FnZS0+YWRkX3JlcGVhdGVkX3NmaXhlZDMyKDEpOwotICAgIG1lc3NhZ2Ut
PmFkZF9yZXBlYXRlZF9zZml4ZWQ2NCgxKTsKLSAgICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfZmxv
YXQoMS4wKTsKLSAgICBtZXNzYWdlLT5hZGRfcmVwZWF0ZWRfZG91YmxlKDEuMCk7Ci0gICAgbWVz
c2FnZS0+YWRkX3JlcGVhdGVkX2Jvb2wodHJ1ZSk7Ci0gICAgbWVzc2FnZS0+YWRkX3JlcGVhdGVk
X25lc3RlZF9lbnVtKAotICAgICAgICBwcm90bzNfYXJlbmFfdW5pdHRlc3Q6OlRlc3RBbGxUeXBl
c19OZXN0ZWRFbnVtX0ZPTyk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgUHJvdG8+Ci0gIHZv
aWQgRXhwZWN0UHJvdG8zUHJpbWl0aXZlUmVwZWF0ZWRGaWVsZHNTZXQoY29uc3QgUHJvdG8mIG1l
c3NhZ2UpIHsKLSAgICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5yZXBlYXRlZF9pbnQzMigwKSk7Ci0g
ICAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UucmVwZWF0ZWRfaW50NjQoMCkpOwotICAgIEVYUEVDVF9F
USgxLCBtZXNzYWdlLnJlcGVhdGVkX3VpbnQzMigwKSk7Ci0gICAgRVhQRUNUX0VRKDEsIG1lc3Nh
Z2UucmVwZWF0ZWRfdWludDY0KDApKTsKLSAgICBFWFBFQ1RfRVEoMSwgbWVzc2FnZS5yZXBlYXRl
ZF9zaW50MzIoMCkpOwotICAgIEVYUEVDVF9FUSgxLCBtZXNzYWdlLnJlcGVhdGVkX3NpbnQ2NCgw
KSk7Ci0gICAgRVhQRUNUX0VRKDEsIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQzMigwKSk7Ci0gICAg
RVhQRUNUX0VRKDEsIG1lc3NhZ2UucmVwZWF0ZWRfZml4ZWQ2NCgwKSk7Ci0gICAgRVhQRUNUX0VR
KDEsIG1lc3NhZ2UucmVwZWF0ZWRfc2ZpeGVkMzIoMCkpOwotICAgIEVYUEVDVF9FUSgxLCBtZXNz
YWdlLnJlcGVhdGVkX3NmaXhlZDY0KDApKTsKLSAgICBFWFBFQ1RfRVEoMS4wLCBtZXNzYWdlLnJl
cGVhdGVkX2Zsb2F0KDApKTsKLSAgICBFWFBFQ1RfRVEoMS4wLCBtZXNzYWdlLnJlcGVhdGVkX2Rv
dWJsZSgwKSk7Ci0gICAgRVhQRUNUX0VRKHRydWUsIG1lc3NhZ2UucmVwZWF0ZWRfYm9vbCgwKSk7
Ci0gICAgRVhQRUNUX0VRKHByb3RvM19hcmVuYV91bml0dGVzdDo6VGVzdEFsbFR5cGVzX05lc3Rl
ZEVudW1fRk9PLAotICAgICAgICAgICAgICBtZXNzYWdlLnJlcGVhdGVkX25lc3RlZF9lbnVtKDAp
KTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBQcm90bz4KLSAgdm9pZCBUZXN0U2VyaWFsaXph
dGlvbihQcm90byogbWVzc2FnZSwgY29uc3Qgc3RyaW5nJiBleHBlY3RlZCkgewotICAgIFNldFBy
b3RvM1ByaW1pdGl2ZVJlcGVhdGVkRmllbGRzKG1lc3NhZ2UpOwotCi0gICAgaW50IHNpemUgPSBt
ZXNzYWdlLT5CeXRlU2l6ZSgpOwotCi0gICAgLy8gU2VyaWFsaXplIHVzaW5nIHRoZSBnZW5lcmF0
ZWQgY29kZS4KLSAgICBzdHJpbmcgZ2VuZXJhdGVkX2RhdGE7Ci0gICAgewotICAgICAgaW86OlN0
cmluZ091dHB1dFN0cmVhbSByYXdfb3V0cHV0KCZnZW5lcmF0ZWRfZGF0YSk7Ci0gICAgICBpbzo6
Q29kZWRPdXRwdXRTdHJlYW0gb3V0cHV0KCZyYXdfb3V0cHV0KTsKLSAgICAgIG1lc3NhZ2UtPlNl
cmlhbGl6ZVdpdGhDYWNoZWRTaXplcygmb3V0cHV0KTsKLSAgICAgIEFTU0VSVF9GQUxTRShvdXRw
dXQuSGFkRXJyb3IoKSk7Ci0gICAgfQotICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVkID09IGdlbmVy
YXRlZF9kYXRhKTsKLQotICAgIC8vIFNlcmlhbGl6ZSB1c2luZyB0aGUgZHluYW1pYyBjb2RlLgot
ICAgIHN0cmluZyBkeW5hbWljX2RhdGE7Ci0gICAgewotICAgICAgaW86OlN0cmluZ091dHB1dFN0
cmVhbSByYXdfb3V0cHV0KCZkeW5hbWljX2RhdGEpOwotICAgICAgaW86OkNvZGVkT3V0cHV0U3Ry
ZWFtIG91dHB1dCgmcmF3X291dHB1dCk7Ci0gICAgICBXaXJlRm9ybWF0OjpTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXMoKm1lc3NhZ2UsIHNpemUsICZvdXRwdXQpOwotICAgICAgQVNTRVJUX0ZBTFNF
KG91dHB1dC5IYWRFcnJvcigpKTsKLSAgICB9Ci0gICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWQgPT0g
ZHluYW1pY19kYXRhKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBQcm90bz4KLSAgdm9pZCBU
ZXN0UGFyc2luZyhQcm90byogbWVzc2FnZSwgY29uc3Qgc3RyaW5nJiBjb21wYXRpYmxlX2RhdGEp
IHsKLSAgICBtZXNzYWdlLT5DbGVhcigpOwotICAgIG1lc3NhZ2UtPlBhcnNlRnJvbVN0cmluZyhj
b21wYXRpYmxlX2RhdGEpOwotICAgIEV4cGVjdFByb3RvM1ByaW1pdGl2ZVJlcGVhdGVkRmllbGRz
U2V0KCptZXNzYWdlKTsKLQotICAgIG1lc3NhZ2UtPkNsZWFyKCk7Ci0gICAgaW86OkNvZGVkSW5w
dXRTdHJlYW0gaW5wdXQoCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgqPihj
b21wYXRpYmxlX2RhdGEuZGF0YSgpKSwKLSAgICAgICAgY29tcGF0aWJsZV9kYXRhLnNpemUoKSk7
Ci0gICAgV2lyZUZvcm1hdDo6UGFyc2VBbmRNZXJnZVBhcnRpYWwoJmlucHV0LCBtZXNzYWdlKTsK
LSAgICBFeHBlY3RQcm90bzNQcmltaXRpdmVSZXBlYXRlZEZpZWxkc1NldCgqbWVzc2FnZSk7Ci0g
IH0KLQotICBjb25zdCBzdHJpbmcgcGFja2VkVGVzdEFsbFR5cGVzXzsKLSAgY29uc3Qgc3RyaW5n
IHBhY2tlZFRlc3RVbnBhY2tlZFR5cGVzXzsKLSAgY29uc3Qgc3RyaW5nIHVucGFja2VkVGVzdEFs
bFR5cGVzXzsKLSAgY29uc3Qgc3RyaW5nIHVucGFja2VkVGVzdFVucGFja2VkVHlwZXNfOwotfTsK
LQotVEVTVF9GKFByb3RvM1ByaW1pdGl2ZVJlcGVhdGVkV2lyZUZvcm1hdFRlc3QsIFByb3RvM1By
aW1pdGl2ZVJlcGVhdGVkKSB7Ci0gIHByb3RvM19hcmVuYV91bml0dGVzdDo6VGVzdEFsbFR5cGVz
IHBhY2tlZF9tZXNzYWdlOwotICBwcm90bzNfYXJlbmFfdW5pdHRlc3Q6OlRlc3RVbnBhY2tlZFR5
cGVzIHVucGFja2VkX21lc3NhZ2U7Ci0gIFRlc3RTZXJpYWxpemF0aW9uKCZwYWNrZWRfbWVzc2Fn
ZSwgcGFja2VkVGVzdEFsbFR5cGVzXyk7Ci0gIFRlc3RQYXJzaW5nKCZwYWNrZWRfbWVzc2FnZSwg
cGFja2VkVGVzdEFsbFR5cGVzXyk7Ci0gIFRlc3RQYXJzaW5nKCZwYWNrZWRfbWVzc2FnZSwgdW5w
YWNrZWRUZXN0QWxsVHlwZXNfKTsKLSAgVGVzdFNlcmlhbGl6YXRpb24oJnVucGFja2VkX21lc3Nh
Z2UsIHVucGFja2VkVGVzdFVucGFja2VkVHlwZXNfKTsKLSAgVGVzdFBhcnNpbmcoJnVucGFja2Vk
X21lc3NhZ2UsIHBhY2tlZFRlc3RVbnBhY2tlZFR5cGVzXyk7Ci0gIFRlc3RQYXJzaW5nKCZ1bnBh
Y2tlZF9tZXNzYWdlLCB1bnBhY2tlZFRlc3RVbnBhY2tlZFR5cGVzXyk7Ci19Ci0KLWNsYXNzIFdp
cmVGb3JtYXRJbnZhbGlkSW5wdXRUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHByb3Rl
Y3RlZDoKLSAgLy8gTWFrZSBhIHNlcmlhbGl6ZWQgVGVzdEFsbFR5cGVzIGluIHdoaWNoIHRoZSBm
aWVsZCBvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZQotICAvLyBjb250YWlucyBleGFjdGx5IHRoZSBn
aXZlbiBieXRlcywgd2hpY2ggbWF5IGJlIGludmFsaWQuCi0gIHN0cmluZyBNYWtlSW52YWxpZEVt
YmVkZGVkTWVzc2FnZShjb25zdCBjaGFyKiBieXRlcywgaW50IHNpemUpIHsKLSAgICBjb25zdCBG
aWVsZERlc2NyaXB0b3IqIGZpZWxkID0KLSAgICAgIHVuaXR0ZXN0OjpUZXN0QWxsVHlwZXM6OmRl
c2NyaXB0b3IoKS0+RmluZEZpZWxkQnlOYW1lKAotICAgICAgICAib3B0aW9uYWxfbmVzdGVkX21l
c3NhZ2UiKTsKLSAgICBHT09HTEVfQ0hFQ0soZmllbGQgIT0gTlVMTCk7Ci0KLSAgICBzdHJpbmcg
cmVzdWx0OwotCi0gICAgewotICAgICAgaW86OlN0cmluZ091dHB1dFN0cmVhbSByYXdfb3V0cHV0
KCZyZXN1bHQpOwotICAgICAgaW86OkNvZGVkT3V0cHV0U3RyZWFtIG91dHB1dCgmcmF3X291dHB1
dCk7Ci0KLSAgICAgIFdpcmVGb3JtYXRMaXRlOjpXcml0ZUJ5dGVzKGZpZWxkLT5udW1iZXIoKSwg
c3RyaW5nKGJ5dGVzLCBzaXplKSwgJm91dHB1dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLSAgfQotCi0gIC8vIE1ha2UgYSBzZXJpYWxpemVkIFRlc3RBbGxUeXBlcyBpbiB3aGljaCB0
aGUgZmllbGQgb3B0aW9uYWxncm91cAotICAvLyBjb250YWlucyBleGFjdGx5IHRoZSBnaXZlbiBi
eXRlcyAtLSB3aGljaCBtYXkgYmUgaW52YWxpZCAtLSBhbmQKLSAgLy8gcG9zc2libHkgbm8gZW5k
IHRhZy4KLSAgc3RyaW5nIE1ha2VJbnZhbGlkR3JvdXAoY29uc3QgY2hhciogYnl0ZXMsIGludCBz
aXplLCBib29sIGluY2x1ZGVfZW5kX3RhZykgewotICAgIGNvbnN0IEZpZWxkRGVzY3JpcHRvciog
ZmllbGQgPQotICAgICAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlczo6ZGVzY3JpcHRvcigpLT5GaW5k
RmllbGRCeU5hbWUoCi0gICAgICAgICJvcHRpb25hbGdyb3VwIik7Ci0gICAgR09PR0xFX0NIRUNL
KGZpZWxkICE9IE5VTEwpOwotCi0gICAgc3RyaW5nIHJlc3VsdDsKLQotICAgIHsKLSAgICAgIGlv
OjpTdHJpbmdPdXRwdXRTdHJlYW0gcmF3X291dHB1dCgmcmVzdWx0KTsKLSAgICAgIGlvOjpDb2Rl
ZE91dHB1dFN0cmVhbSBvdXRwdXQoJnJhd19vdXRwdXQpOwotCi0gICAgICBvdXRwdXQuV3JpdGVW
YXJpbnQzMihXaXJlRm9ybWF0OjpNYWtlVGFnKGZpZWxkKSk7Ci0gICAgICBvdXRwdXQuV3JpdGVT
dHJpbmcoc3RyaW5nKGJ5dGVzLCBzaXplKSk7Ci0gICAgICBpZiAoaW5jbHVkZV9lbmRfdGFnKSB7
Ci0gICAgICAgIG91dHB1dC5Xcml0ZVZhcmludDMyKFdpcmVGb3JtYXRMaXRlOjpNYWtlVGFnKAot
ICAgICAgICAgIGZpZWxkLT5udW1iZXIoKSwgV2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9H
Uk9VUCkpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX07Ci0K
LVRFU1RfRihXaXJlRm9ybWF0SW52YWxpZElucHV0VGVzdCwgSW52YWxpZFN1Yk1lc3NhZ2UpIHsK
LSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotCi0gIC8vIENvbnRyb2wgY2FzZS4K
LSAgRVhQRUNUX1RSVUUobWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoTWFrZUludmFsaWRFbWJlZGRl
ZE1lc3NhZ2UoIiIsIDApKSk7Ci0KLSAgLy8gVGhlIGJ5dGUgaXMgYSB2YWxpZCB2YXJpbnQsIGJ1
dCBub3QgYSB2YWxpZCB0YWcgKHplcm8pLgotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5QYXJzZUZy
b21TdHJpbmcoTWFrZUludmFsaWRFbWJlZGRlZE1lc3NhZ2UoIlwwIiwgMSkpKTsKLQotICAvLyBU
aGUgYnl0ZSBpcyBhIG1hbGZvcm1lZCB2YXJpbnQuCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLlBh
cnNlRnJvbVN0cmluZyhNYWtlSW52YWxpZEVtYmVkZGVkTWVzc2FnZSgiXDIwMCIsIDEpKSk7Ci0K
LSAgLy8gVGhlIGJ5dGUgaXMgYW4gZW5kZ3JvdXAgdGFnLCBidXQgd2UgYXJlbid0IHBhcnNpbmcg
YSBncm91cC4KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKE1ha2VJbnZh
bGlkRW1iZWRkZWRNZXNzYWdlKCJcMDE0IiwgMSkpKTsKLQotICAvLyBUaGUgYnl0ZSBpcyBhIHZh
bGlkIHZhcmludCBidXQgbm90IGEgdmFsaWQgdGFnIChiYWQgd2lyZSB0eXBlKS4KLSAgRVhQRUNU
X0ZBTFNFKG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKE1ha2VJbnZhbGlkRW1iZWRkZWRNZXNzYWdl
KCJcMDE3IiwgMSkpKTsKLX0KLQotVEVTVF9GKFdpcmVGb3JtYXRJbnZhbGlkSW5wdXRUZXN0LCBJ
bnZhbGlkR3JvdXApIHsKLSAgdW5pdHRlc3Q6OlRlc3RBbGxUeXBlcyBtZXNzYWdlOwotCi0gIC8v
IENvbnRyb2wgY2FzZS4KLSAgRVhQRUNUX1RSVUUobWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoTWFr
ZUludmFsaWRHcm91cCgiIiwgMCwgdHJ1ZSkpKTsKLQotICAvLyBNaXNzaW5nIGVuZCB0YWcuICBH
cm91cHMgY2Fubm90IGVuZCBhdCBFT0YuCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLlBhcnNlRnJv
bVN0cmluZyhNYWtlSW52YWxpZEdyb3VwKCIiLCAwLCBmYWxzZSkpKTsKLQotICAvLyBUaGUgYnl0
ZSBpcyBhIHZhbGlkIHZhcmludCwgYnV0IG5vdCBhIHZhbGlkIHRhZyAoemVybykuCi0gIEVYUEVD
VF9GQUxTRShtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhNYWtlSW52YWxpZEdyb3VwKCJcMCIsIDEs
IGZhbHNlKSkpOwotCi0gIC8vIFRoZSBieXRlIGlzIGEgbWFsZm9ybWVkIHZhcmludC4KLSAgRVhQ
RUNUX0ZBTFNFKG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKE1ha2VJbnZhbGlkR3JvdXAoIlwyMDAi
LCAxLCBmYWxzZSkpKTsKLQotICAvLyBUaGUgYnl0ZSBpcyBhbiBlbmRncm91cCB0YWcsIGJ1dCBu
b3QgdGhlIHJpZ2h0IG9uZSBmb3IgdGhpcyBncm91cC4KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2Uu
UGFyc2VGcm9tU3RyaW5nKE1ha2VJbnZhbGlkR3JvdXAoIlwwMTQiLCAxLCBmYWxzZSkpKTsKLQot
ICAvLyBUaGUgYnl0ZSBpcyBhIHZhbGlkIHZhcmludCBidXQgbm90IGEgdmFsaWQgdGFnIChiYWQg
d2lyZSB0eXBlKS4KLSAgRVhQRUNUX0ZBTFNFKG1lc3NhZ2UuUGFyc2VGcm9tU3RyaW5nKE1ha2VJ
bnZhbGlkR3JvdXAoIlwwMTciLCAxLCB0cnVlKSkpOwotfQotCi1URVNUX0YoV2lyZUZvcm1hdElu
dmFsaWRJbnB1dFRlc3QsIEludmFsaWRVbmtub3duR3JvdXApIHsKLSAgLy8gVXNlIFRlc3RFbXB0
eU1lc3NhZ2Ugc28gdGhhdCB0aGUgZ3JvdXAgbWFkZSBieSBNYWtlSW52YWxpZEdyb3VwIHdpbGwg
bm90Ci0gIC8vIGJlIGEga25vd24gdGFnIG51bWJlci4KLSAgdW5pdHRlc3Q6OlRlc3RFbXB0eU1l
c3NhZ2UgbWVzc2FnZTsKLQotICAvLyBDb250cm9sIGNhc2UuCi0gIEVYUEVDVF9UUlVFKG1lc3Nh
Z2UuUGFyc2VGcm9tU3RyaW5nKE1ha2VJbnZhbGlkR3JvdXAoIiIsIDAsIHRydWUpKSk7Ci0KLSAg
Ly8gTWlzc2luZyBlbmQgdGFnLiAgR3JvdXBzIGNhbm5vdCBlbmQgYXQgRU9GLgotICBFWFBFQ1Rf
RkFMU0UobWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoTWFrZUludmFsaWRHcm91cCgiIiwgMCwgZmFs
c2UpKSk7Ci0KLSAgLy8gVGhlIGJ5dGUgaXMgYSB2YWxpZCB2YXJpbnQsIGJ1dCBub3QgYSB2YWxp
ZCB0YWcgKHplcm8pLgotICBFWFBFQ1RfRkFMU0UobWVzc2FnZS5QYXJzZUZyb21TdHJpbmcoTWFr
ZUludmFsaWRHcm91cCgiXDAiLCAxLCBmYWxzZSkpKTsKLQotICAvLyBUaGUgYnl0ZSBpcyBhIG1h
bGZvcm1lZCB2YXJpbnQuCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhN
YWtlSW52YWxpZEdyb3VwKCJcMjAwIiwgMSwgZmFsc2UpKSk7Ci0KLSAgLy8gVGhlIGJ5dGUgaXMg
YW4gZW5kZ3JvdXAgdGFnLCBidXQgbm90IHRoZSByaWdodCBvbmUgZm9yIHRoaXMgZ3JvdXAuCi0g
IEVYUEVDVF9GQUxTRShtZXNzYWdlLlBhcnNlRnJvbVN0cmluZyhNYWtlSW52YWxpZEdyb3VwKCJc
MDE0IiwgMSwgZmFsc2UpKSk7Ci0KLSAgLy8gVGhlIGJ5dGUgaXMgYSB2YWxpZCB2YXJpbnQgYnV0
IG5vdCBhIHZhbGlkIHRhZyAoYmFkIHdpcmUgdHlwZSkuCi0gIEVYUEVDVF9GQUxTRShtZXNzYWdl
LlBhcnNlRnJvbVN0cmluZyhNYWtlSW52YWxpZEdyb3VwKCJcMDE3IiwgMSwgdHJ1ZSkpKTsKLX0K
LQotVEVTVF9GKFdpcmVGb3JtYXRJbnZhbGlkSW5wdXRUZXN0LCBJbnZhbGlkU3RyaW5nSW5Vbmtu
b3duR3JvdXApIHsKLSAgLy8gVGVzdCBhIGJ1ZyBmaXg6ICBTa2lwTWVzc2FnZSBzaG91bGQgZmFp
bCBpZiB0aGUgbWVzc2FnZSBjb250YWlucyBhIHN0cmluZwotICAvLyB3aG9zZSBsZW5ndGggd291
bGQgZXh0ZW5kIGJleW9uZCB0aGUgbWVzc2FnZSBlbmQuCi0KLSAgdW5pdHRlc3Q6OlRlc3RBbGxU
eXBlcyBtZXNzYWdlOwotICBtZXNzYWdlLnNldF9vcHRpb25hbF9zdHJpbmcoImZvbyBmb28gZm9v
IGZvbyIpOwotICBzdHJpbmcgZGF0YTsKLSAgbWVzc2FnZS5TZXJpYWxpemVUb1N0cmluZygmZGF0
YSk7Ci0KLSAgLy8gQ2hvcCBzb21lIGJ5dGVzIG9mZiB0aGUgZW5kLgotICBkYXRhLnJlc2l6ZShk
YXRhLnNpemUoKSAtIDQpOwotCi0gIC8vIFRyeSB0byBza2lwIGl0LiAgTm90ZSB0aGF0IHRoZSBi
dWcgd2FzIG9ubHkgcHJlc2VudCB3aGVuIHBhcnNpbmcgdG8gYW4KLSAgLy8gVW5rbm93bkZpZWxk
U2V0LgotICBpbzo6QXJyYXlJbnB1dFN0cmVhbSByYXdfaW5wdXQoZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpKTsKLSAgaW86OkNvZGVkSW5wdXRTdHJlYW0gY29kZWRfaW5wdXQoJnJhd19pbnB1dCk7
Ci0gIFVua25vd25GaWVsZFNldCB1bmtub3duX2ZpZWxkczsKLSAgRVhQRUNUX0ZBTFNFKFdpcmVG
b3JtYXQ6OlNraXBNZXNzYWdlKCZjb2RlZF9pbnB1dCwgJnVua25vd25fZmllbGRzKSk7Ci19Ci0K
LS8vIFRlc3QgZGlmZmVyZW5jZXMgYmV0d2VlbiBzdHJpbmcgYW5kIGJ5dGVzLgotLy8gVmFsdWUg
b2YgYSBzdHJpbmcgdHlwZSBtdXN0IGJlIHZhbGlkIFVURi04IHN0cmluZy4gIFdoZW4gVVRGLTgK
LS8vIHZhbGlkYXRpb24gaXMgZW5hYmxlZCAoR09PR0xFX1BST1RPQlVGX1VURjhfVkFMSURBVElP
Tl9FTkFCTEVEKToKLS8vIFdyaXRlSW52YWxpZFVURjhTdHJpbmc6ICBzZWUgZXJyb3IgbWVzc2Fn
ZS4KLS8vIFJlYWRJbnZhbGlkVVRGOFN0cmluZzogIHNlZSBlcnJvciBtZXNzYWdlLgotLy8gV3Jp
dGVWYWxpZFVURjhTdHJpbmc6IGZpbmUuCi0vLyBSZWFkVmFsaWRVVEY4U3RyaW5nOiAgZmluZS4K
LS8vIFdyaXRlQW55Qnl0ZXM6IGZpbmUuCi0vLyBSZWFkQW55Qnl0ZXM6IGZpbmUuCi1jb25zdCBj
aGFyICoga0ludmFsaWRVVEY4U3RyaW5nID0gIkludmFsaWQgVVRGLTg6IFx4QTBceEIwXHhDMFx4
RDAiOwotLy8gVGhpcyB1c2VkIHRvIGJlICJWYWxpZCBVVEYtODogXHgwMVx4MDJcdThDMzdcdTZC
NEMiLCBidXQgTVNWQyBzZWVtcyB0bwotLy8gaW50ZXJwcmV0IFx1IGRpZmZlcmVudGx5IGZyb20g
R0NDLgotY29uc3QgY2hhciAqIGtWYWxpZFVURjhTdHJpbmcgPSAiVmFsaWQgVVRGLTg6IFx4MDFc
eDAyXDM1MFwyNjBcMjY3XDM0NlwyNTVcMjE0IjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWJv
b2wgV3JpdGVNZXNzYWdlKGNvbnN0IGNoYXIgKnZhbHVlLCBUICptZXNzYWdlLCBzdHJpbmcgKndp
cmVfYnVmZmVyKSB7Ci0gIG1lc3NhZ2UtPnNldF9kYXRhKHZhbHVlKTsKLSAgd2lyZV9idWZmZXIt
PmNsZWFyKCk7Ci0gIG1lc3NhZ2UtPkFwcGVuZFRvU3RyaW5nKHdpcmVfYnVmZmVyKTsKLSAgcmV0
dXJuICh3aXJlX2J1ZmZlci0+c2l6ZSgpID4gMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1ib29sIFJlYWRNZXNzYWdlKGNvbnN0IHN0cmluZyAmd2lyZV9idWZmZXIsIFQgKm1lc3NhZ2Up
IHsKLSAgcmV0dXJuIG1lc3NhZ2UtPlBhcnNlRnJvbUFycmF5KHdpcmVfYnVmZmVyLmRhdGEoKSwg
d2lyZV9idWZmZXIuc2l6ZSgpKTsKLX0KLQotYm9vbCBTdGFydHNXaXRoKGNvbnN0IHN0cmluZyYg
cywgY29uc3Qgc3RyaW5nJiBwcmVmaXgpIHsKLSAgcmV0dXJuIHMuc3Vic3RyKDAsIHByZWZpeC5s
ZW5ndGgoKSkgPT0gcHJlZml4OwotfQotCi1jbGFzcyBVdGY4VmFsaWRhdGlvblRlc3QgOiBwdWJs
aWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFV0ZjhWYWxpZGF0aW9uVGVzdCgp
IHt9Ci0gIHZpcnR1YWwgflV0ZjhWYWxpZGF0aW9uVGVzdCgpIHt9Ci0gIHZpcnR1YWwgdm9pZCBT
ZXRVcCgpIHsKLSAgfQotCi19OwotCi1URVNUX0YoVXRmOFZhbGlkYXRpb25UZXN0LCBXcml0ZUlu
dmFsaWRVVEY4U3RyaW5nKSB7Ci0gIHN0cmluZyB3aXJlX2J1ZmZlcjsKLSAgcHJvdG9idWZfdW5p
dHRlc3Q6Ok9uZVN0cmluZyBpbnB1dDsKLSAgdmVjdG9yPHN0cmluZz4gZXJyb3JzOwotICB7Ci0g
ICAgU2NvcGVkTWVtb3J5TG9nIGxvZzsKLSAgICBXcml0ZU1lc3NhZ2Uoa0ludmFsaWRVVEY4U3Ry
aW5nLCAmaW5wdXQsICZ3aXJlX2J1ZmZlcik7Ci0gICAgZXJyb3JzID0gbG9nLkdldE1lc3NhZ2Vz
KEVSUk9SKTsKLSAgfQotI2lmZGVmIEdPT0dMRV9QUk9UT0JVRl9VVEY4X1ZBTElEQVRJT05fRU5B
QkxFRAotICBBU1NFUlRfRVEoMSwgZXJyb3JzLnNpemUoKSk7Ci0gIEVYUEVDVF9UUlVFKFN0YXJ0
c1dpdGgoZXJyb3JzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICJTdHJpbmcgZmllbGQg
J3Byb3RvYnVmX3VuaXR0ZXN0Lk9uZVN0cmluZy5kYXRhJyAiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgImNvbnRhaW5zIGludmFsaWQgVVRGLTggZGF0YSB3aGVuICIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAic2VyaWFsaXppbmcgYSBwcm90b2NvbCBidWZmZXIuIFVzZSB0aGUgIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICInYnl0ZXMnIHR5cGUgaWYgeW91IGludGVuZCB0byBzZW5k
IHJhdyBieXRlcy4iKSk7Ci0jZWxzZQotICBBU1NFUlRfRVEoMCwgZXJyb3JzLnNpemUoKSk7Ci0j
ZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9VVEY4X1ZBTElEQVRJT05fRU5BQkxFRAotfQotCi0K
LVRFU1RfRihVdGY4VmFsaWRhdGlvblRlc3QsIFJlYWRJbnZhbGlkVVRGOFN0cmluZykgewotICBz
dHJpbmcgd2lyZV9idWZmZXI7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpPbmVTdHJpbmcgaW5wdXQ7
Ci0gIFdyaXRlTWVzc2FnZShrSW52YWxpZFVURjhTdHJpbmcsICZpbnB1dCwgJndpcmVfYnVmZmVy
KTsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6Ok9uZVN0cmluZyBvdXRwdXQ7Ci0gIHZlY3RvcjxzdHJp
bmc+IGVycm9yczsKLSAgewotICAgIFNjb3BlZE1lbW9yeUxvZyBsb2c7Ci0gICAgUmVhZE1lc3Nh
Z2Uod2lyZV9idWZmZXIsICZvdXRwdXQpOwotICAgIGVycm9ycyA9IGxvZy5HZXRNZXNzYWdlcyhF
UlJPUik7Ci0gIH0KLSNpZmRlZiBHT09HTEVfUFJPVE9CVUZfVVRGOF9WQUxJREFUSU9OX0VOQUJM
RUQKLSAgQVNTRVJUX0VRKDEsIGVycm9ycy5zaXplKCkpOwotICBFWFBFQ1RfVFJVRShTdGFydHNX
aXRoKGVycm9yc1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIGZpZWxkICdw
cm90b2J1Zl91bml0dGVzdC5PbmVTdHJpbmcuZGF0YScgIgotICAgICAgICAgICAgICAgICAgICAg
ICAgICJjb250YWlucyBpbnZhbGlkIFVURi04IGRhdGEgd2hlbiAiCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgInBhcnNpbmcgYSBwcm90b2NvbCBidWZmZXIuIFVzZSB0aGUgIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICInYnl0ZXMnIHR5cGUgaWYgeW91IGludGVuZCB0byBzZW5kIHJhdyBi
eXRlcy4iKSk7Ci0KLSNlbHNlCi0gIEFTU0VSVF9FUSgwLCBlcnJvcnMuc2l6ZSgpKTsKLSNlbmRp
ZiAgLy8gR09PR0xFX1BST1RPQlVGX1VURjhfVkFMSURBVElPTl9FTkFCTEVECi19Ci0KLQotVEVT
VF9GKFV0ZjhWYWxpZGF0aW9uVGVzdCwgV3JpdGVWYWxpZFVURjhTdHJpbmcpIHsKLSAgc3RyaW5n
IHdpcmVfYnVmZmVyOwotICBwcm90b2J1Zl91bml0dGVzdDo6T25lU3RyaW5nIGlucHV0OwotICB2
ZWN0b3I8c3RyaW5nPiBlcnJvcnM7Ci0gIHsKLSAgICBTY29wZWRNZW1vcnlMb2cgbG9nOwotICAg
IFdyaXRlTWVzc2FnZShrVmFsaWRVVEY4U3RyaW5nLCAmaW5wdXQsICZ3aXJlX2J1ZmZlcik7Ci0g
ICAgZXJyb3JzID0gbG9nLkdldE1lc3NhZ2VzKEVSUk9SKTsKLSAgfQotICBBU1NFUlRfRVEoMCwg
ZXJyb3JzLnNpemUoKSk7Ci19Ci0KLVRFU1RfRihVdGY4VmFsaWRhdGlvblRlc3QsIFJlYWRWYWxp
ZFVURjhTdHJpbmcpIHsKLSAgc3RyaW5nIHdpcmVfYnVmZmVyOwotICBwcm90b2J1Zl91bml0dGVz
dDo6T25lU3RyaW5nIGlucHV0OwotICBXcml0ZU1lc3NhZ2Uoa1ZhbGlkVVRGOFN0cmluZywgJmlu
cHV0LCAmd2lyZV9idWZmZXIpOwotICBwcm90b2J1Zl91bml0dGVzdDo6T25lU3RyaW5nIG91dHB1
dDsKLSAgdmVjdG9yPHN0cmluZz4gZXJyb3JzOwotICB7Ci0gICAgU2NvcGVkTWVtb3J5TG9nIGxv
ZzsKLSAgICBSZWFkTWVzc2FnZSh3aXJlX2J1ZmZlciwgJm91dHB1dCk7Ci0gICAgZXJyb3JzID0g
bG9nLkdldE1lc3NhZ2VzKEVSUk9SKTsKLSAgfQotICBBU1NFUlRfRVEoMCwgZXJyb3JzLnNpemUo
KSk7Ci0gIEVYUEVDVF9FUShpbnB1dC5kYXRhKCksIG91dHB1dC5kYXRhKCkpOwotfQotCi0vLyBC
eXRlczogYW55dGhpbmcgY2FuIHBhc3MgYXMgYnl0ZXMsIHVzZSBpbnZhbGlkIFVURi04IHN0cmlu
ZyB0byB0ZXN0Ci1URVNUX0YoVXRmOFZhbGlkYXRpb25UZXN0LCBXcml0ZUFyYml0cmFyeUJ5dGVz
KSB7Ci0gIHN0cmluZyB3aXJlX2J1ZmZlcjsKLSAgcHJvdG9idWZfdW5pdHRlc3Q6Ok9uZUJ5dGVz
IGlucHV0OwotICB2ZWN0b3I8c3RyaW5nPiBlcnJvcnM7Ci0gIHsKLSAgICBTY29wZWRNZW1vcnlM
b2cgbG9nOwotICAgIFdyaXRlTWVzc2FnZShrSW52YWxpZFVURjhTdHJpbmcsICZpbnB1dCwgJndp
cmVfYnVmZmVyKTsKLSAgICBlcnJvcnMgPSBsb2cuR2V0TWVzc2FnZXMoRVJST1IpOwotICB9Ci0g
IEFTU0VSVF9FUSgwLCBlcnJvcnMuc2l6ZSgpKTsKLX0KLQotVEVTVF9GKFV0ZjhWYWxpZGF0aW9u
VGVzdCwgUmVhZEFyYml0cmFyeUJ5dGVzKSB7Ci0gIHN0cmluZyB3aXJlX2J1ZmZlcjsKLSAgcHJv
dG9idWZfdW5pdHRlc3Q6Ok9uZUJ5dGVzIGlucHV0OwotICBXcml0ZU1lc3NhZ2Uoa0ludmFsaWRV
VEY4U3RyaW5nLCAmaW5wdXQsICZ3aXJlX2J1ZmZlcik7Ci0gIHByb3RvYnVmX3VuaXR0ZXN0OjpP
bmVCeXRlcyBvdXRwdXQ7Ci0gIHZlY3RvcjxzdHJpbmc+IGVycm9yczsKLSAgewotICAgIFNjb3Bl
ZE1lbW9yeUxvZyBsb2c7Ci0gICAgUmVhZE1lc3NhZ2Uod2lyZV9idWZmZXIsICZvdXRwdXQpOwot
ICAgIGVycm9ycyA9IGxvZy5HZXRNZXNzYWdlcyhFUlJPUik7Ci0gIH0KLSAgQVNTRVJUX0VRKDAs
IGVycm9ycy5zaXplKCkpOwotICBFWFBFQ1RfRVEoaW5wdXQuZGF0YSgpLCBvdXRwdXQuZGF0YSgp
KTsKLX0KLQotVEVTVF9GKFV0ZjhWYWxpZGF0aW9uVGVzdCwgUGFyc2VSZXBlYXRlZFN0cmluZykg
ewotICBwcm90b2J1Zl91bml0dGVzdDo6TW9yZUJ5dGVzIGlucHV0OwotICBpbnB1dC5hZGRfZGF0
YShrVmFsaWRVVEY4U3RyaW5nKTsKLSAgaW5wdXQuYWRkX2RhdGEoa0ludmFsaWRVVEY4U3RyaW5n
KTsKLSAgaW5wdXQuYWRkX2RhdGEoa0ludmFsaWRVVEY4U3RyaW5nKTsKLSAgc3RyaW5nIHdpcmVf
YnVmZmVyID0gaW5wdXQuU2VyaWFsaXplQXNTdHJpbmcoKTsKLQotICBwcm90b2J1Zl91bml0dGVz
dDo6TW9yZVN0cmluZyBvdXRwdXQ7Ci0gIHZlY3RvcjxzdHJpbmc+IGVycm9yczsKLSAgewotICAg
IFNjb3BlZE1lbW9yeUxvZyBsb2c7Ci0gICAgUmVhZE1lc3NhZ2Uod2lyZV9idWZmZXIsICZvdXRw
dXQpOwotICAgIGVycm9ycyA9IGxvZy5HZXRNZXNzYWdlcyhFUlJPUik7Ci0gIH0KLSNpZmRlZiBH
T09HTEVfUFJPVE9CVUZfVVRGOF9WQUxJREFUSU9OX0VOQUJMRUQKLSAgQVNTRVJUX0VRKDIsIGVy
cm9ycy5zaXplKCkpOwotI2Vsc2UKLSAgQVNTRVJUX0VRKDAsIGVycm9ycy5zaXplKCkpOwotI2Vu
ZGlmICAvLyBHT09HTEVfUFJPVE9CVUZfVVRGOF9WQUxJREFUSU9OX0VOQUJMRUQKLSAgRVhQRUNU
X0VRKHdpcmVfYnVmZmVyLCBvdXRwdXQuU2VyaWFsaXplQXNTdHJpbmcoKSk7Ci19Ci0KLS8vIFRl
c3QgdGhlIG9sZCBWZXJpZnlVVEY4U3RyaW5nKCkgZnVuY3Rpb24sIHdoaWNoIG1heSBzdGlsbCBi
ZSBjYWxsZWQgYnkgb2xkCi0vLyBnZW5lcmF0ZWQgY29kZS4KLVRFU1RfRihVdGY4VmFsaWRhdGlv
blRlc3QsIE9sZFZlcmlmeVVURjhTdHJpbmcpIHsKLSAgc3RyaW5nIGRhdGEoa0ludmFsaWRVVEY4
U3RyaW5nKTsKLQotICB2ZWN0b3I8c3RyaW5nPiBlcnJvcnM7Ci0gIHsKLSAgICBTY29wZWRNZW1v
cnlMb2cgbG9nOwotICAgIFdpcmVGb3JtYXQ6OlZlcmlmeVVURjhTdHJpbmcoZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lyZUZvcm1h
dDo6U0VSSUFMSVpFKTsKLSAgICBlcnJvcnMgPSBsb2cuR2V0TWVzc2FnZXMoRVJST1IpOwotICB9
Ci0jaWZkZWYgR09PR0xFX1BST1RPQlVGX1VURjhfVkFMSURBVElPTl9FTkFCTEVECi0gIEFTU0VS
VF9FUSgxLCBlcnJvcnMuc2l6ZSgpKTsKLSAgRVhQRUNUX1RSVUUoU3RhcnRzV2l0aChlcnJvcnNb
MF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyBmaWVsZCBjb250YWlucyBpbnZh
bGlkIFVURi04IGRhdGEgd2hlbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgInNlcmlhbGl6
aW5nIGEgcHJvdG9jb2wgYnVmZmVyLiBVc2UgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAiJ2J5dGVzJyB0eXBlIGlmIHlvdSBpbnRlbmQgdG8gc2VuZCByYXcgYnl0ZXMuIikpOwotI2Vs
c2UKLSAgQVNTRVJUX0VRKDAsIGVycm9ycy5zaXplKCkpOwotI2VuZGlmCi19Ci0KLQotfSAgLy8g
bmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBwcm90
b2J1ZgotfSAgLy8gbmFtZXNwYWNlIGdvb2dsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3Rv
YnVmL3dyYXBwZXJzLnBiLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnBiLmNjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDgwMTQyMzJmMGU0YmViNmU3YmQwZDQ2NWVk
NDBhMzNhMTgwNjA4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9i
dWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wYi5jYworKysgL2Rldi9udWxsCkBAIC0x
LDI3NzIgKzAsMCBAQAotLy8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGls
ZXIuICBETyBOT1QgRURJVCEKLS8vIHNvdXJjZTogZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnBy
b3RvCi0KLSNkZWZpbmUgSU5URVJOQUxfU1VQUFJFU1NfUFJPVE9CVUZfRklFTERfREVQUkVDQVRJ
T04KLSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucGIuaD4KLQotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvc3R1YnMvcG9ydC5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9zdHVicy9vbmNlLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2lvL2Nv
ZGVkX3N0cmVhbS5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRl
X2lubC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLmg+Ci0jaW5jbHVk
ZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uaD4KLSNpbmNs
dWRlIDxnb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbl9vcHMuaD4KLSNpbmNsdWRlIDxnb29nbGUv
cHJvdG9idWYvd2lyZV9mb3JtYXQuaD4KLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbmNs
dWRlcykKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci1uYW1lc3BhY2UgcHJvdG9idWYgewotCi1uYW1l
c3BhY2UgewotCi1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIERvdWJsZVZh
bHVlX2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgotICBEb3VibGVWYWx1ZV9yZWZsZWN0aW9u
XyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIEZsb2F0VmFs
dWVfZGVzY3JpcHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIEZsb2F0VmFsdWVfcmVmbGVjdGlvbl8g
PSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBJbnQ2NFZhbHVl
X2Rlc2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgotICBJbnQ2NFZhbHVlX3JlZmxlY3Rpb25fID0g
TlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogVUludDY0VmFsdWVf
ZGVzY3JpcHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIFVJbnQ2NFZhbHVlX3JlZmxlY3Rpb25fID0g
TlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogSW50MzJWYWx1ZV9k
ZXNjcmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgSW50MzJWYWx1ZV9yZWZsZWN0aW9uXyA9IE5V
TEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIFVJbnQzMlZhbHVlX2Rl
c2NyaXB0b3JfID0gTlVMTDsKLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
bmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKgotICBVSW50MzJWYWx1ZV9yZWZsZWN0aW9uXyA9IE5V
TEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIEJvb2xWYWx1ZV9kZXNj
cmlwdG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5l
cmF0ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgQm9vbFZhbHVlX3JlZmxlY3Rpb25fID0gTlVMTDsK
LWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogU3RyaW5nVmFsdWVfZGVzY3Jp
cHRvcl8gPSBOVUxMOwotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJh
dGVkTWVzc2FnZVJlZmxlY3Rpb24qCi0gIFN0cmluZ1ZhbHVlX3JlZmxlY3Rpb25fID0gTlVMTDsK
LWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogQnl0ZXNWYWx1ZV9kZXNjcmlw
dG9yXyA9IE5VTEw7Ci1jb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0
ZWRNZXNzYWdlUmVmbGVjdGlvbioKLSAgQnl0ZXNWYWx1ZV9yZWZsZWN0aW9uXyA9IE5VTEw7Ci0K
LX0gIC8vIG5hbWVzcGFjZQotCi0KLXZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZw
cm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8oKSB7Ci0gIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7Ci0gIGNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RmlsZURlc2NyaXB0b3IqIGZpbGUgPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvclBvb2w6OmdlbmVyYXRlZF9wb29sKCktPkZpbmRGaWxlQnlOYW1lKAotICAgICAgImdv
b2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90byIpOwotICBHT09HTEVfQ0hFQ0soZmlsZSAhPSBO
VUxMKTsKLSAgRG91YmxlVmFsdWVfZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUoMCk7
Ci0gIHN0YXRpYyBjb25zdCBpbnQgRG91YmxlVmFsdWVfb2Zmc2V0c19bMV0gPSB7Ci0gICAgR09P
R0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChEb3VibGVWYWx1ZSwg
dmFsdWVfKSwKLSAgfTsKLSAgRG91YmxlVmFsdWVfcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5l
cmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIERvdWJsZVZhbHVlX2Rlc2NyaXB0b3JfLAot
ICAgICAgRG91YmxlVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgRG91YmxlVmFsdWVf
b2Zmc2V0c18sCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2Yo
RG91YmxlVmFsdWUpLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJ
RUxEX09GRlNFVChEb3VibGVWYWx1ZSwgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICBHT09H
TEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKERvdWJsZVZhbHVlLCBf
aXNfZGVmYXVsdF9pbnN0YW5jZV8pKTsKLSAgRmxvYXRWYWx1ZV9kZXNjcmlwdG9yXyA9IGZpbGUt
Pm1lc3NhZ2VfdHlwZSgxKTsKLSAgc3RhdGljIGNvbnN0IGludCBGbG9hdFZhbHVlX29mZnNldHNf
WzFdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZT
RVQoRmxvYXRWYWx1ZSwgdmFsdWVfKSwKLSAgfTsKLSAgRmxvYXRWYWx1ZV9yZWZsZWN0aW9uXyA9
Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2VuZXJhdGVkTWVzc2FnZVJlZmxl
Y3Rpb246Ok5ld0dlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uKAotICAgICAgRmxvYXRWYWx1ZV9k
ZXNjcmlwdG9yXywKLSAgICAgIEZsb2F0VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAg
RmxvYXRWYWx1ZV9vZmZzZXRzXywKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAg
ICAgIHNpemVvZihGbG9hdFZhbHVlKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURf
TUVTU0FHRV9GSUVMRF9PRkZTRVQoRmxvYXRWYWx1ZSwgX2ludGVybmFsX21ldGFkYXRhXyksCi0g
ICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEZsb2F0
VmFsdWUsIF9pc19kZWZhdWx0X2luc3RhbmNlXykpOwotICBJbnQ2NFZhbHVlX2Rlc2NyaXB0b3Jf
ID0gZmlsZS0+bWVzc2FnZV90eXBlKDIpOwotICBzdGF0aWMgY29uc3QgaW50IEludDY0VmFsdWVf
b2Zmc2V0c19bMV0gPSB7Ci0gICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJ
RUxEX09GRlNFVChJbnQ2NFZhbHVlLCB2YWx1ZV8pLAotICB9OwotICBJbnQ2NFZhbHVlX3JlZmxl
Y3Rpb25fID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBJbnQ2
NFZhbHVlX2Rlc2NyaXB0b3JfLAotICAgICAgSW50NjRWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZV8s
Ci0gICAgICBJbnQ2NFZhbHVlX29mZnNldHNfLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAg
IC0xLAotICAgICAgc2l6ZW9mKEludDY0VmFsdWUpLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dF
TkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChJbnQ2NFZhbHVlLCBfaW50ZXJuYWxfbWV0YWRh
dGFfKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZT
RVQoSW50NjRWYWx1ZSwgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci0gIFVJbnQ2NFZhbHVlX2Rl
c2NyaXB0b3JfID0gZmlsZS0+bWVzc2FnZV90eXBlKDMpOwotICBzdGF0aWMgY29uc3QgaW50IFVJ
bnQ2NFZhbHVlX29mZnNldHNfWzFdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURf
TUVTU0FHRV9GSUVMRF9PRkZTRVQoVUludDY0VmFsdWUsIHZhbHVlXyksCi0gIH07Ci0gIFVJbnQ2
NFZhbHVlX3JlZmxlY3Rpb25fID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24o
Ci0gICAgICBVSW50NjRWYWx1ZV9kZXNjcmlwdG9yXywKLSAgICAgIFVJbnQ2NFZhbHVlOjpkZWZh
dWx0X2luc3RhbmNlXywKLSAgICAgIFVJbnQ2NFZhbHVlX29mZnNldHNfLAotICAgICAgLTEsCi0g
ICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgc2l6ZW9mKFVJbnQ2NFZhbHVlKSwKLSAgICAgIEdP
T0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoVUludDY0VmFsdWUs
IF9pbnRlcm5hbF9tZXRhZGF0YV8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9N
RVNTQUdFX0ZJRUxEX09GRlNFVChVSW50NjRWYWx1ZSwgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7
Ci0gIEludDMyVmFsdWVfZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUoNCk7Ci0gIHN0
YXRpYyBjb25zdCBpbnQgSW50MzJWYWx1ZV9vZmZzZXRzX1sxXSA9IHsKLSAgICBHT09HTEVfUFJP
VE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEludDMyVmFsdWUsIHZhbHVlXyks
Ci0gIH07Ci0gIEludDMyVmFsdWVfcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNz
YWdlUmVmbGVjdGlvbigKLSAgICAgIEludDMyVmFsdWVfZGVzY3JpcHRvcl8sCi0gICAgICBJbnQz
MlZhbHVlOjpkZWZhdWx0X2luc3RhbmNlXywKLSAgICAgIEludDMyVmFsdWVfb2Zmc2V0c18sCi0g
ICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoSW50MzJWYWx1ZSks
Ci0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKElu
dDMyVmFsdWUsIF9pbnRlcm5hbF9tZXRhZGF0YV8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dF
TkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChJbnQzMlZhbHVlLCBfaXNfZGVmYXVsdF9pbnN0
YW5jZV8pKTsKLSAgVUludDMyVmFsdWVfZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUo
NSk7Ci0gIHN0YXRpYyBjb25zdCBpbnQgVUludDMyVmFsdWVfb2Zmc2V0c19bMV0gPSB7Ci0gICAg
R09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09GRlNFVChVSW50MzJWYWx1
ZSwgdmFsdWVfKSwKLSAgfTsKLSAgVUludDMyVmFsdWVfcmVmbGVjdGlvbl8gPQotICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdlbmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdH
ZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigKLSAgICAgIFVJbnQzMlZhbHVlX2Rlc2NyaXB0b3Jf
LAotICAgICAgVUludDMyVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgVUludDMyVmFs
dWVfb2Zmc2V0c18sCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAgLTEsCi0gICAgICBzaXpl
b2YoVUludDMyVmFsdWUpLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdF
X0ZJRUxEX09GRlNFVChVSW50MzJWYWx1ZSwgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICBH
T09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKFVJbnQzMlZhbHVl
LCBfaXNfZGVmYXVsdF9pbnN0YW5jZV8pKTsKLSAgQm9vbFZhbHVlX2Rlc2NyaXB0b3JfID0gZmls
ZS0+bWVzc2FnZV90eXBlKDYpOwotICBzdGF0aWMgY29uc3QgaW50IEJvb2xWYWx1ZV9vZmZzZXRz
X1sxXSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZG
U0VUKEJvb2xWYWx1ZSwgdmFsdWVfKSwKLSAgfTsKLSAgQm9vbFZhbHVlX3JlZmxlY3Rpb25fID0K
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdlUmVmbGVj
dGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBCb29sVmFsdWVfZGVz
Y3JpcHRvcl8sCi0gICAgICBCb29sVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfLAotICAgICAgQm9v
bFZhbHVlX29mZnNldHNfLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAgIC0xLAotICAgICAg
c2l6ZW9mKEJvb2xWYWx1ZSksCi0gICAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NB
R0VfRklFTERfT0ZGU0VUKEJvb2xWYWx1ZSwgX2ludGVybmFsX21ldGFkYXRhXyksCi0gICAgICBH
T09HTEVfUFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEJvb2xWYWx1ZSwg
X2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci0gIFN0cmluZ1ZhbHVlX2Rlc2NyaXB0b3JfID0gZmls
ZS0+bWVzc2FnZV90eXBlKDcpOwotICBzdGF0aWMgY29uc3QgaW50IFN0cmluZ1ZhbHVlX29mZnNl
dHNfWzFdID0gewotICAgIEdPT0dMRV9QUk9UT0JVRl9HRU5FUkFURURfTUVTU0FHRV9GSUVMRF9P
RkZTRVQoU3RyaW5nVmFsdWUsIHZhbHVlXyksCi0gIH07Ci0gIFN0cmluZ1ZhbHVlX3JlZmxlY3Rp
b25fID0KLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZW5lcmF0ZWRNZXNzYWdl
UmVmbGVjdGlvbjo6TmV3R2VuZXJhdGVkTWVzc2FnZVJlZmxlY3Rpb24oCi0gICAgICBTdHJpbmdW
YWx1ZV9kZXNjcmlwdG9yXywKLSAgICAgIFN0cmluZ1ZhbHVlOjpkZWZhdWx0X2luc3RhbmNlXywK
LSAgICAgIFN0cmluZ1ZhbHVlX29mZnNldHNfLAotICAgICAgLTEsCi0gICAgICAtMSwKLSAgICAg
IC0xLAotICAgICAgc2l6ZW9mKFN0cmluZ1ZhbHVlKSwKLSAgICAgIEdPT0dMRV9QUk9UT0JVRl9H
RU5FUkFURURfTUVTU0FHRV9GSUVMRF9PRkZTRVQoU3RyaW5nVmFsdWUsIF9pbnRlcm5hbF9tZXRh
ZGF0YV8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdFX0ZJRUxEX09G
RlNFVChTdHJpbmdWYWx1ZSwgX2lzX2RlZmF1bHRfaW5zdGFuY2VfKSk7Ci0gIEJ5dGVzVmFsdWVf
ZGVzY3JpcHRvcl8gPSBmaWxlLT5tZXNzYWdlX3R5cGUoOCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQg
Qnl0ZXNWYWx1ZV9vZmZzZXRzX1sxXSA9IHsKLSAgICBHT09HTEVfUFJPVE9CVUZfR0VORVJBVEVE
X01FU1NBR0VfRklFTERfT0ZGU0VUKEJ5dGVzVmFsdWUsIHZhbHVlXyksCi0gIH07Ci0gIEJ5dGVz
VmFsdWVfcmVmbGVjdGlvbl8gPQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Okdl
bmVyYXRlZE1lc3NhZ2VSZWZsZWN0aW9uOjpOZXdHZW5lcmF0ZWRNZXNzYWdlUmVmbGVjdGlvbigK
LSAgICAgIEJ5dGVzVmFsdWVfZGVzY3JpcHRvcl8sCi0gICAgICBCeXRlc1ZhbHVlOjpkZWZhdWx0
X2luc3RhbmNlXywKLSAgICAgIEJ5dGVzVmFsdWVfb2Zmc2V0c18sCi0gICAgICAtMSwKLSAgICAg
IC0xLAotICAgICAgLTEsCi0gICAgICBzaXplb2YoQnl0ZXNWYWx1ZSksCi0gICAgICBHT09HTEVf
UFJPVE9CVUZfR0VORVJBVEVEX01FU1NBR0VfRklFTERfT0ZGU0VUKEJ5dGVzVmFsdWUsIF9pbnRl
cm5hbF9tZXRhZGF0YV8pLAotICAgICAgR09PR0xFX1BST1RPQlVGX0dFTkVSQVRFRF9NRVNTQUdF
X0ZJRUxEX09GRlNFVChCeXRlc1ZhbHVlLCBfaXNfZGVmYXVsdF9pbnN0YW5jZV8pKTsKLX0KLQot
bmFtZXNwYWNlIHsKLQotR09PR0xFX1BST1RPQlVGX0RFQ0xBUkVfT05DRShwcm90b2J1Zl9Bc3Np
Z25EZXNjcmlwdG9yc19vbmNlXyk7Ci1pbmxpbmUgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlw
dG9yc09uY2UoKSB7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6R29vZ2xlT25jZUluaXQoJnByb3Rv
YnVmX0Fzc2lnbkRlc2NyaXB0b3JzX29uY2VfLAotICAgICAgICAgICAgICAgICAmcHJvdG9idWZf
QXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8pOwotfQotCi12
b2lkIHByb3RvYnVmX1JlZ2lzdGVyVHlwZXMoY29uc3QgOjpzdGQ6OnN0cmluZyYpIHsKLSAgcHJv
dG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgRG91
YmxlVmFsdWVfZGVzY3JpcHRvcl8sICZEb3VibGVWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsK
LSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3Rlckdl
bmVyYXRlZE1lc3NhZ2UoCi0gICAgICBGbG9hdFZhbHVlX2Rlc2NyaXB0b3JfLCAmRmxvYXRWYWx1
ZTo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlRmFj
dG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1lc3NhZ2UoCi0gICAgICBJbnQ2NFZhbHVl
X2Rlc2NyaXB0b3JfLCAmSW50NjRWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZSgpKTsKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjpNZXNzYWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZE1l
c3NhZ2UoCi0gICAgICBVSW50NjRWYWx1ZV9kZXNjcmlwdG9yXywgJlVJbnQ2NFZhbHVlOjpkZWZh
dWx0X2luc3RhbmNlKCkpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJ
bnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgKLSAgICAgIEludDMyVmFsdWVfZGVzY3Jp
cHRvcl8sICZJbnQzMlZhbHVlOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgK
LSAgICAgIFVJbnQzMlZhbHVlX2Rlc2NyaXB0b3JfLCAmVUludDMyVmFsdWU6OmRlZmF1bHRfaW5z
dGFuY2UoKSk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFs
UmVnaXN0ZXJHZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgQm9vbFZhbHVlX2Rlc2NyaXB0b3JfLCAm
Qm9vbFZhbHVlOjpkZWZhdWx0X2luc3RhbmNlKCkpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2VGYWN0b3J5OjpJbnRlcm5hbFJlZ2lzdGVyR2VuZXJhdGVkTWVzc2FnZSgKLSAgICAgIFN0
cmluZ1ZhbHVlX2Rlc2NyaXB0b3JfLCAmU3RyaW5nVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2UoKSk7
Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUZhY3Rvcnk6OkludGVybmFsUmVnaXN0ZXJH
ZW5lcmF0ZWRNZXNzYWdlKAotICAgICAgQnl0ZXNWYWx1ZV9kZXNjcmlwdG9yXywgJkJ5dGVzVmFs
dWU6OmRlZmF1bHRfaW5zdGFuY2UoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi12b2lkIHBy
b3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8o
KSB7Ci0gIGRlbGV0ZSBEb3VibGVWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRlbGV0ZSBE
b3VibGVWYWx1ZV9yZWZsZWN0aW9uXzsKLSAgZGVsZXRlIEZsb2F0VmFsdWU6OmRlZmF1bHRfaW5z
dGFuY2VfOwotICBkZWxldGUgRmxvYXRWYWx1ZV9yZWZsZWN0aW9uXzsKLSAgZGVsZXRlIEludDY0
VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgSW50NjRWYWx1ZV9yZWZsZWN0aW9u
XzsKLSAgZGVsZXRlIFVJbnQ2NFZhbHVlOjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRlIFVJ
bnQ2NFZhbHVlX3JlZmxlY3Rpb25fOwotICBkZWxldGUgSW50MzJWYWx1ZTo6ZGVmYXVsdF9pbnN0
YW5jZV87Ci0gIGRlbGV0ZSBJbnQzMlZhbHVlX3JlZmxlY3Rpb25fOwotICBkZWxldGUgVUludDMy
VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgVUludDMyVmFsdWVfcmVmbGVjdGlv
bl87Ci0gIGRlbGV0ZSBCb29sVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfOwotICBkZWxldGUgQm9v
bFZhbHVlX3JlZmxlY3Rpb25fOwotICBkZWxldGUgU3RyaW5nVmFsdWU6OmRlZmF1bHRfaW5zdGFu
Y2VfOwotICBkZWxldGUgU3RyaW5nVmFsdWVfcmVmbGVjdGlvbl87Ci0gIGRlbGV0ZSBCeXRlc1Zh
bHVlOjpkZWZhdWx0X2luc3RhbmNlXzsKLSAgZGVsZXRlIEJ5dGVzVmFsdWVfcmVmbGVjdGlvbl87
Ci19Ci0KLXZvaWQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJz
XzJlcHJvdG8oKSB7Ci0gIHN0YXRpYyBib29sIGFscmVhZHlfaGVyZSA9IGZhbHNlOwotICBpZiAo
YWxyZWFkeV9oZXJlKSByZXR1cm47Ci0gIGFscmVhZHlfaGVyZSA9IHRydWU7Ci0gIEdPT0dMRV9Q
Uk9UT0JVRl9WRVJJRllfVkVSU0lPTjsKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0
b3JQb29sOjpJbnRlcm5hbEFkZEdlbmVyYXRlZEZpbGUoCi0gICAgIlxuXDAzNmdvb2dsZS9wcm90
b2J1Zi93cmFwcGVycy5wcm90b1wwMjJcMDE3Z29vZ2xlIgotICAgICIucHJvdG9idWZcIlwwMzRc
blwwMTNEb3VibGVWYWx1ZVwwMjJcclxuXDAwNXZhbHVlXDAzMFwwMDEgXDAwMShcMDAxXCIiCi0g
ICAgIlwwMzNcblxuRmxvYXRWYWx1ZVwwMjJcclxuXDAwNXZhbHVlXDAzMFwwMDEgXDAwMShcMDAy
XCJcMDMzXG5cbkludDY0VmFsIgotICAgICJ1ZVwwMjJcclxuXDAwNXZhbHVlXDAzMFwwMDEgXDAw
MShcMDAzXCJcMDM0XG5cMDEzVUludDY0VmFsdWVcMDIyXHJcblwwMDV2YWx1IgotICAgICJlXDAz
MFwwMDEgXDAwMShcMDA0XCJcMDMzXG5cbkludDMyVmFsdWVcMDIyXHJcblwwMDV2YWx1ZVwwMzBc
MDAxIFwwMDEoXDAwNVwiXDAzNFxuXDAxMyIKLSAgICAiVUludDMyVmFsdWVcMDIyXHJcblwwMDV2
YWx1ZVwwMzBcMDAxIFwwMDEoXHJcIlwwMzJcblx0Qm9vbFZhbHVlXDAyMiIKLSAgICAiXHJcblww
MDV2YWx1ZVwwMzBcMDAxIFwwMDEoXDAxMFwiXDAzNFxuXDAxM1N0cmluZ1ZhbHVlXDAyMlxyXG5c
MDA1dmFsdWVcMDMwXDAwMSIKLSAgICAiIFwwMDEoXHRcIlwwMzNcblxuQnl0ZXNWYWx1ZVwwMjJc
clxuXDAwNXZhbHVlXDAzMFwwMDEgXDAwMShcMDE0QlwxNzdcblwwMjNjb20iCi0gICAgIi5nb29n
bGUucHJvdG9idWZCXHJXcmFwcGVyc1Byb3RvUFwwMDFaKmdpdGh1IgotICAgICJiLmNvbS9nb2xh
bmcvcHJvdG9idWYvcHR5cGVzL3dyYXBwZXJzXDI0MFwwMDFcMDAxIgotICAgICJcMzcwXDAwMVww
MDFcMjQyXDAwMlwwMDNHUEJcMjUyXDAwMlwwMzZHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlw
IgotICAgICJlc2JcMDA2cHJvdG8zIiwgNDUwKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlRmFjdG9yeTo6SW50ZXJuYWxSZWdpc3RlckdlbmVyYXRlZEZpbGUoCi0gICAgImdvb2dsZS9w
cm90b2J1Zi93cmFwcGVycy5wcm90byIsICZwcm90b2J1Zl9SZWdpc3RlclR5cGVzKTsKLSAgRG91
YmxlVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IERvdWJsZVZhbHVlKCk7Ci0gIEZsb2F0
VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfID0gbmV3IEZsb2F0VmFsdWUoKTsKLSAgSW50NjRWYWx1
ZTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgSW50NjRWYWx1ZSgpOwotICBVSW50NjRWYWx1ZTo6
ZGVmYXVsdF9pbnN0YW5jZV8gPSBuZXcgVUludDY0VmFsdWUoKTsKLSAgSW50MzJWYWx1ZTo6ZGVm
YXVsdF9pbnN0YW5jZV8gPSBuZXcgSW50MzJWYWx1ZSgpOwotICBVSW50MzJWYWx1ZTo6ZGVmYXVs
dF9pbnN0YW5jZV8gPSBuZXcgVUludDMyVmFsdWUoKTsKLSAgQm9vbFZhbHVlOjpkZWZhdWx0X2lu
c3RhbmNlXyA9IG5ldyBCb29sVmFsdWUoKTsKLSAgU3RyaW5nVmFsdWU6OmRlZmF1bHRfaW5zdGFu
Y2VfID0gbmV3IFN0cmluZ1ZhbHVlKCk7Ci0gIEJ5dGVzVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2Vf
ID0gbmV3IEJ5dGVzVmFsdWUoKTsKLSAgRG91YmxlVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2VfLT5J
bml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgRmxvYXRWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZV8t
PkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBJbnQ2NFZhbHVlOjpkZWZhdWx0X2luc3RhbmNl
Xy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIFVJbnQ2NFZhbHVlOjpkZWZhdWx0X2luc3Rh
bmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIEludDMyVmFsdWU6OmRlZmF1bHRfaW5z
dGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgVUludDMyVmFsdWU6OmRlZmF1bHRf
aW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgQm9vbFZhbHVlOjpkZWZhdWx0
X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIFN0cmluZ1ZhbHVlOjpkZWZh
dWx0X2luc3RhbmNlXy0+SW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIEJ5dGVzVmFsdWU6OmRl
ZmF1bHRfaW5zdGFuY2VfLT5Jbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6T25TaHV0ZG93bigmcHJvdG9idWZfU2h1dGRvd25GaWxlX2dvb2ds
ZV8yZnByb3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90byk7Ci19Ci0KLS8vIEZvcmNlIEFkZERlc2Ny
aXB0b3JzKCkgdG8gYmUgY2FsbGVkIGF0IHN0YXRpYyBpbml0aWFsaXphdGlvbiB0aW1lLgotc3Ry
dWN0IFN0YXRpY0Rlc2NyaXB0b3JJbml0aWFsaXplcl9nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBw
ZXJzXzJlcHJvdG8gewotICBTdGF0aWNEZXNjcmlwdG9ySW5pdGlhbGl6ZXJfZ29vZ2xlXzJmcHJv
dG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCkgewotICAgIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xl
XzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7Ci0gIH0KLX0gc3RhdGljX2Rlc2NyaXB0
b3JfaW5pdGlhbGl6ZXJfZ29vZ2xlXzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvXzsKLQot
bmFtZXNwYWNlIHsKLQotc3RhdGljIHZvaWQgTWVyZ2VGcm9tRmFpbChpbnQgbGluZSkgR09PR0xF
X0FUVFJJQlVURV9DT0xEOwotc3RhdGljIHZvaWQgTWVyZ2VGcm9tRmFpbChpbnQgbGluZSkgewot
ICBHT09HTEVfQ0hFQ0soZmFsc2UpIDw8IF9fRklMRV9fIDw8ICI6IiA8PCBsaW5lOwotfQotCi19
ICAvLyBuYW1lc3BhY2UKLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZF
UikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgaW50IERvdWJsZVZhbHVlOjprVmFsdWVGaWVs
ZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5
MDAKLQotRG91YmxlVmFsdWU6OkRvdWJsZVZhbHVlKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1
Zi5Eb3VibGVWYWx1ZSkKLX0KLQotRG91YmxlVmFsdWU6OkRvdWJsZVZhbHVlKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgp
LAotICBfaW50ZXJuYWxfbWV0YWRhdGFfKGFyZW5hKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgUmVn
aXN0ZXJBcmVuYUR0b3IoYXJlbmEpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoYXJl
bmFfY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlKQotfQotCi12b2lkIERv
dWJsZVZhbHVlOjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3Rh
bmNlXyA9IHRydWU7Ci19Ci0KLURvdWJsZVZhbHVlOjpEb3VibGVWYWx1ZShjb25zdCBEb3VibGVW
YWx1ZSYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50
ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJv
bSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2ds
ZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZSkKLX0KLQotdm9pZCBEb3VibGVWYWx1ZTo6U2hhcmVkQ3Rv
cigpIHsKLSAgICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSBmYWxzZTsKLSAgX2NhY2hlZF9zaXpl
XyA9IDA7Ci0gIHZhbHVlXyA9IDA7Ci19Ci0KLURvdWJsZVZhbHVlOjp+RG91YmxlVmFsdWUoKSB7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVjdG9yOmdvb2dsZS5wcm90b2J1
Zi5Eb3VibGVWYWx1ZSkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lkIERvdWJsZVZhbHVlOjpT
aGFyZWREdG9yKCkgewotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSAhPSBOVUxMKSB7Ci0gICAg
cmV0dXJuOwotICB9Ci0KLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQot
fQotCi12b2lkIERvdWJsZVZhbHVlOjpBcmVuYUR0b3Iodm9pZCogb2JqZWN0KSB7Ci0gIERvdWJs
ZVZhbHVlKiBfdGhpcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8IERvdWJsZVZhbHVlKiA+KG9iamVjdCk7
Ci0gICh2b2lkKV90aGlzOwotfQotdm9pZCBEb3VibGVWYWx1ZTo6UmVnaXN0ZXJBcmVuYUR0b3Io
Ojpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIHsKLX0KLXZvaWQgRG91YmxlVmFsdWU6
OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVO
VF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZF
X0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpE
ZXNjcmlwdG9yKiBEb3VibGVWYWx1ZTo6ZGVzY3JpcHRvcigpIHsKLSAgcHJvdG9idWZfQXNzaWdu
RGVzY3JpcHRvcnNPbmNlKCk7Ci0gIHJldHVybiBEb3VibGVWYWx1ZV9kZXNjcmlwdG9yXzsKLX0K
LQotY29uc3QgRG91YmxlVmFsdWUmIERvdWJsZVZhbHVlOjpkZWZhdWx0X2luc3RhbmNlKCkgewot
ICBpZiAoZGVmYXVsdF9pbnN0YW5jZV8gPT0gTlVMTCkgcHJvdG9idWZfQWRkRGVzY19nb29nbGVf
MmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3Rh
bmNlXzsKLX0KLQotRG91YmxlVmFsdWUqIERvdWJsZVZhbHVlOjpkZWZhdWx0X2luc3RhbmNlXyA9
IE5VTEw7Ci0KLURvdWJsZVZhbHVlKiBEb3VibGVWYWx1ZTo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIHJldHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OkFy
ZW5hOjpDcmVhdGVNZXNzYWdlPERvdWJsZVZhbHVlPihhcmVuYSk7Ci19Ci0KLXZvaWQgRG91Ymxl
VmFsdWU6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xl
YXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlKQotICB2YWx1ZV8gPSAwOwotfQot
Ci1ib29sIERvdWJsZVZhbHVlOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUg
RE9fKEVYUFJFU1NJT04pIGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290
byBmYWlsdXJlCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1
ZSkKLSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVp
bnQzMiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9
IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBz
d2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRU
YWdGaWVsZE51bWJlcih0YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCBkb3VibGUgdmFsdWUgPSAx
OwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gOSkgewotICAgICAgICAgIERP
XygoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmlt
aXRpdmU8Ci0gICAgICAgICAgICAgICAgICAgZG91YmxlLCA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9ET1VCTEU+KAotICAgICAgICAgICAgICAgICBp
bnB1dCwgJnZhbHVlXykpKTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFu
ZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgp
KSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0
OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAg
ICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0
VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdv
dG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNraXBGaWVsZChpbnB1dCwgdGFnKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlKQot
ICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChw
YXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZSkKLSAgcmV0dXJuIGZhbHNl
OwotI3VuZGVmIERPXwotfQotCi12b2lkIERvdWJsZVZhbHVlOjpTZXJpYWxpemVXaXRoQ2FjaGVk
U2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91
dHB1dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0
YXJ0Omdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZSkKLSAgLy8gb3B0aW9uYWwgZG91YmxlIHZh
bHVlID0gMTsKLSAgaWYgKHRoaXMtPnZhbHVlKCkgIT0gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZURvdWJsZSgxLCB0aGlzLT52YWx1
ZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlh
bGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlKQotfQotCi06Omdvb2dsZTo6cHJv
dG9idWY6OnVpbnQ4KiBEb3VibGVWYWx1ZTo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJh
eSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQpIGNvbnN0IHsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9zdGFydDpnb29nbGUu
cHJvdG9idWYuRG91YmxlVmFsdWUpCi0gIC8vIG9wdGlvbmFsIGRvdWJsZSB2YWx1ZSA9IDE7Ci0g
IGlmICh0aGlzLT52YWx1ZSgpICE9IDApIHsKLSAgICB0YXJnZXQgPSA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVEb3VibGVUb0FycmF5KDEsIHRoaXMt
PnZhbHVlKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
c2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUpCi0gIHJl
dHVybiB0YXJnZXQ7Ci19Ci0KLWludCBEb3VibGVWYWx1ZTo6Qnl0ZVNpemUoKSBjb25zdCB7Ci0v
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRlX3NpemVfc3RhcnQ6Z29vZ2xl
LnByb3RvYnVmLkRvdWJsZVZhbHVlKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0KLSAgLy8gb3B0
aW9uYWwgZG91YmxlIHZhbHVlID0gMTsKLSAgaWYgKHRoaXMtPnZhbHVlKCkgIT0gMCkgewotICAg
IHRvdGFsX3NpemUgKz0gMSArIDg7Ci0gIH0KLQotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dS
SVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6ZTsKLSAgR09PR0xFX1NB
RkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3RhbF9zaXplOwotfQotCi12
b2lkIERvdWJsZVZhbHVlOjpNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVy
Z2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUpCi0gIGlmIChHT09HTEVf
UFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0g
IGNvbnN0IERvdWJsZVZhbHVlKiBzb3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgRG91YmxlVmFsdWU+KAotICAg
ICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29nbGUucHJv
dG9idWYuRG91YmxlVmFsdWUpCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6UmVm
bGVjdGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpnb29n
bGUucHJvdG9idWYuRG91YmxlVmFsdWUpCi0gICAgTWVyZ2VGcm9tKCpzb3VyY2UpOwotICB9Ci19
Ci0KLXZvaWQgRG91YmxlVmFsdWU6Ok1lcmdlRnJvbShjb25zdCBEb3VibGVWYWx1ZSYgZnJvbSkg
ewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21f
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlKQotICBpZiAoR09PR0xFX1BSRURJQ1Rf
RkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBpZiAoZnJv
bS52YWx1ZSgpICE9IDApIHsKLSAgICBzZXRfdmFsdWUoZnJvbS52YWx1ZSgpKTsKLSAgfQotfQot
Ci12b2lkIERvdWJsZVZhbHVlOjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9j
b3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlKQotICBpZiAoJmZyb20g
PT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLXZv
aWQgRG91YmxlVmFsdWU6OkNvcHlGcm9tKGNvbnN0IERvdWJsZVZhbHVlJiBmcm9tKSB7Ci0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZSkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsK
LSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi1ib29sIERvdWJsZVZhbHVlOjpJ
c0luaXRpYWxpemVkKCkgY29uc3QgewotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIERvdWJs
ZVZhbHVlOjpTd2FwKERvdWJsZVZhbHVlKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykg
cmV0dXJuOwotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBvdGhlci0+R2V0QXJlbmFOb1Zp
cnR1YWwoKSkgewotICAgIEludGVybmFsU3dhcChvdGhlcik7Ci0gIH0gZWxzZSB7Ci0gICAgRG91
YmxlVmFsdWUgdGVtcDsKLSAgICB0ZW1wLk1lcmdlRnJvbSgqdGhpcyk7Ci0gICAgQ29weUZyb20o
Km90aGVyKTsKLSAgICBvdGhlci0+Q29weUZyb20odGVtcCk7Ci0gIH0KLX0KLXZvaWQgRG91Ymxl
VmFsdWU6OlVuc2FmZUFyZW5hU3dhcChEb3VibGVWYWx1ZSogb3RoZXIpIHsKLSAgaWYgKG90aGVy
ID09IHRoaXMpIHJldHVybjsKLSAgR09PR0xFX0RDSEVDSyhHZXRBcmVuYU5vVmlydHVhbCgpID09
IG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKTsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0K
LXZvaWQgRG91YmxlVmFsdWU6OkludGVybmFsU3dhcChEb3VibGVWYWx1ZSogb3RoZXIpIHsKLSAg
c3RkOjpzd2FwKHZhbHVlXywgb3RoZXItPnZhbHVlXyk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8u
U3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9z
aXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1l
dGFkYXRhIERvdWJsZVZhbHVlOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNz
aWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0
YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBEb3VibGVWYWx1ZV9kZXNjcmlwdG9yXzsK
LSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IERvdWJsZVZhbHVlX3JlZmxlY3Rpb25fOwotICByZXR1
cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8v
IERvdWJsZVZhbHVlCi0KLS8vIG9wdGlvbmFsIGRvdWJsZSB2YWx1ZSA9IDE7Ci12b2lkIERvdWJs
ZVZhbHVlOjpjbGVhcl92YWx1ZSgpIHsKLSAgdmFsdWVfID0gMDsKLX0KLSBkb3VibGUgRG91Ymxl
VmFsdWU6OnZhbHVlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZS52YWx1ZSkKLSAgcmV0dXJuIHZhbHVl
XzsKLX0KLSB2b2lkIERvdWJsZVZhbHVlOjpzZXRfdmFsdWUoZG91YmxlIHZhbHVlKSB7Ci0gIAot
ICB2YWx1ZV8gPSB2YWx1ZTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Nl
dDpnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUudmFsdWUpCi19Ci0KLSNlbmRpZiAgLy8gUFJP
VE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZp
bmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgRmxvYXRWYWx1ZTo6
a1ZhbHVlRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVND
X1ZFUiA+PSAxOTAwCi0KLUZsb2F0VmFsdWU6OkZsb2F0VmFsdWUoKQotICA6IDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVk
Q3RvcigpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xl
LnByb3RvYnVmLkZsb2F0VmFsdWUpCi19Ci0KLUZsb2F0VmFsdWU6OkZsb2F0VmFsdWUoOjpnb29n
bGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlKCksCi0gIF9pbnRlcm5hbF9tZXRhZGF0YV8oYXJlbmEpIHsKLSAgU2hhcmVkQ3RvcigpOwot
ICBSZWdpc3RlckFyZW5hRHRvcihhcmVuYSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChhcmVuYV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZSkKLX0KLQotdm9p
ZCBGbG9hdFZhbHVlOjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2lu
c3RhbmNlXyA9IHRydWU7Ci19Ci0KLUZsb2F0VmFsdWU6OkZsb2F0VmFsdWUoY29uc3QgRmxvYXRW
YWx1ZSYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50
ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJv
bSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2ds
ZS5wcm90b2J1Zi5GbG9hdFZhbHVlKQotfQotCi12b2lkIEZsb2F0VmFsdWU6OlNoYXJlZEN0b3Io
KSB7Ci0gICAgX2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gZmFsc2U7Ci0gIF9jYWNoZWRfc2l6ZV8g
PSAwOwotICB2YWx1ZV8gPSAwOwotfQotCi1GbG9hdFZhbHVlOjp+RmxvYXRWYWx1ZSgpIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGRlc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkZs
b2F0VmFsdWUpCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBGbG9hdFZhbHVlOjpTaGFyZWRE
dG9yKCkgewotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSAhPSBOVUxMKSB7Ci0gICAgcmV0dXJu
OwotICB9Ci0KLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12
b2lkIEZsb2F0VmFsdWU6OkFyZW5hRHRvcih2b2lkKiBvYmplY3QpIHsKLSAgRmxvYXRWYWx1ZSog
X3RoaXMgPSByZWludGVycHJldF9jYXN0PCBGbG9hdFZhbHVlKiA+KG9iamVjdCk7Ci0gICh2b2lk
KV90aGlzOwotfQotdm9pZCBGbG9hdFZhbHVlOjpSZWdpc3RlckFyZW5hRHRvcig6Omdvb2dsZTo6
cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgewotfQotdm9pZCBGbG9hdFZhbHVlOjpTZXRDYWNoZWRT
aXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JF
R0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5U
X1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciog
RmxvYXRWYWx1ZTo6ZGVzY3JpcHRvcigpIHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNP
bmNlKCk7Ci0gIHJldHVybiBGbG9hdFZhbHVlX2Rlc2NyaXB0b3JfOwotfQotCi1jb25zdCBGbG9h
dFZhbHVlJiBGbG9hdFZhbHVlOjpkZWZhdWx0X2luc3RhbmNlKCkgewotICBpZiAoZGVmYXVsdF9p
bnN0YW5jZV8gPT0gTlVMTCkgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndy
YXBwZXJzXzJlcHJvdG8oKTsKLSAgcmV0dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotRmxv
YXRWYWx1ZSogRmxvYXRWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwotCi1GbG9hdFZh
bHVlKiBGbG9hdFZhbHVlOjpOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNv
bnN0IHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmE6OkNyZWF0ZU1lc3NhZ2U8
RmxvYXRWYWx1ZT4oYXJlbmEpOwotfQotCi12b2lkIEZsb2F0VmFsdWU6OkNsZWFyKCkgewotLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3Rv
YnVmLkZsb2F0VmFsdWUpCi0gIHZhbHVlXyA9IDA7Ci19Ci0KLWJvb2wgRmxvYXRWYWx1ZTo6TWVy
Z2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNv
ZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0jZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdP
T0dMRV9QUkVESUNUX1RSVUUoRVhQUkVTU0lPTikpIGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6
cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJz
ZV9zdGFydDpnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZSkKLSAgZm9yICg7OykgewotICAgIDo6
c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0LT5S
ZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNl
Y29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7Ci0g
ICAgICAvLyBvcHRpb25hbCBmbG9hdCB2YWx1ZSA9IDE7Ci0gICAgICBjYXNlIDE6IHsKLSAgICAg
ICAgaWYgKHRhZyA9PSAxMykgewotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAgICAg
ICAgZmxvYXQsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpU
WVBFX0ZMT0FUPigKLSAgICAgICAgICAgICAgICAgaW5wdXQsICZ2YWx1ZV8pKSk7Ci0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChpbnB1dC0+RXhwZWN0QXRFbmQoKSkgZ290byBzdWNjZXNzOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDogewotICAgICAgaGFuZGxlX3VudXN1YWw6
Ci0gICAgICAgIGlmICh0YWcgPT0gMCB8fAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAgICAg
ICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXSVJF
VFlQRV9FTkRfR1JPVVApIHsKLSAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAg
ICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpT
a2lwRmllbGQoaW5wdXQsIHRhZykpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNz
Omdvb2dsZS5wcm90b2J1Zi5GbG9hdFZhbHVlKQotICByZXR1cm4gdHJ1ZTsKLWZhaWx1cmU6Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9mYWlsdXJlOmdvb2dsZS5wcm90b2J1
Zi5GbG9hdFZhbHVlKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgRmxv
YXRWYWx1ZTo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1
ZSkKLSAgLy8gb3B0aW9uYWwgZmxvYXQgdmFsdWUgPSAxOwotICBpZiAodGhpcy0+dmFsdWUoKSAh
PSAwKSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OldyaXRlRmxvYXQoMSwgdGhpcy0+dmFsdWUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfZW5kOmdvb2dsZS5wcm90b2J1Zi5GbG9hdFZh
bHVlKQotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBGbG9hdFZhbHVlOjpTZXJpYWxp
emVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgq
IHRhcmdldCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXpl
X3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5GbG9hdFZhbHVlKQotICAvLyBvcHRpb25h
bCBmbG9hdCB2YWx1ZSA9IDE7Ci0gIGlmICh0aGlzLT52YWx1ZSgpICE9IDApIHsKLSAgICB0YXJn
ZXQgPSA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVG
bG9hdFRvQXJyYXkoMSwgdGhpcy0+dmFsdWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1
Zi5GbG9hdFZhbHVlKQotICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQgRmxvYXRWYWx1ZTo6Qnl0
ZVNpemUoKSBjb25zdCB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9ieXRl
X3NpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWUpCi0gIGludCB0b3RhbF9zaXpl
ID0gMDsKLQotICAvLyBvcHRpb25hbCBmbG9hdCB2YWx1ZSA9IDE7Ci0gIGlmICh0aGlzLT52YWx1
ZSgpICE9IDApIHsKLSAgICB0b3RhbF9zaXplICs9IDEgKyA0OwotICB9Ci0KLSAgR09PR0xFX1NB
RkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3Np
emU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90
YWxfc2l6ZTsKLX0KLQotdm9pZCBGbG9hdFZhbHVlOjpNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Z2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZSkK
LSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWls
KF9fTElORV9fKTsKLSAgY29uc3QgRmxvYXRWYWx1ZSogc291cmNlID0gCi0gICAgICA6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IEZsb2F0
VmFsdWU+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3RfZmFp
bDpnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZSkKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9z
dWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5GbG9hdFZhbHVlKQotICAgIE1lcmdlRnJvbSgqc291cmNl
KTsKLSAgfQotfQotCi12b2lkIEZsb2F0VmFsdWU6Ok1lcmdlRnJvbShjb25zdCBGbG9hdFZhbHVl
JiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVy
Z2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZSkKLSAgaWYgKEdPT0dMRV9Q
UkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAg
aWYgKGZyb20udmFsdWUoKSAhPSAwKSB7Ci0gICAgc2V0X3ZhbHVlKGZyb20udmFsdWUoKSk7Ci0g
IH0KLX0KLQotdm9pZCBGbG9hdFZhbHVlOjpDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9i
dWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFs
aXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWUpCi0gIGlmICgm
ZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0K
LQotdm9pZCBGbG9hdFZhbHVlOjpDb3B5RnJvbShjb25zdCBGbG9hdFZhbHVlJiBmcm9tKSB7Ci0v
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfY29weV9mcm9tX3N0YXJ0
Omdvb2dsZS5wcm90b2J1Zi5GbG9hdFZhbHVlKQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJu
OwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0KLWJvb2wgRmxvYXRWYWx1ZTo6
SXNJbml0aWFsaXplZCgpIGNvbnN0IHsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGbG9h
dFZhbHVlOjpTd2FwKEZsb2F0VmFsdWUqIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSBy
ZXR1cm47Ci0gIGlmIChHZXRBcmVuYU5vVmlydHVhbCgpID09IG90aGVyLT5HZXRBcmVuYU5vVmly
dHVhbCgpKSB7Ci0gICAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLSAgfSBlbHNlIHsKLSAgICBGbG9h
dFZhbHVlIHRlbXA7Ci0gICAgdGVtcC5NZXJnZUZyb20oKnRoaXMpOwotICAgIENvcHlGcm9tKCpv
dGhlcik7Ci0gICAgb3RoZXItPkNvcHlGcm9tKHRlbXApOwotICB9Ci19Ci12b2lkIEZsb2F0VmFs
dWU6OlVuc2FmZUFyZW5hU3dhcChGbG9hdFZhbHVlKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0g
dGhpcykgcmV0dXJuOwotICBHT09HTEVfRENIRUNLKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gb3Ro
ZXItPkdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQotdm9p
ZCBGbG9hdFZhbHVlOjpJbnRlcm5hbFN3YXAoRmxvYXRWYWx1ZSogb3RoZXIpIHsKLSAgc3RkOjpz
d2FwKHZhbHVlXywgb3RoZXItPnZhbHVlXyk7Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgm
b3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywg
b3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRh
IEZsb2F0VmFsdWU6OkdldE1ldGFkYXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNj
cmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsK
LSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IEZsb2F0VmFsdWVfZGVzY3JpcHRvcl87Ci0gIG1ldGFk
YXRhLnJlZmxlY3Rpb24gPSBGbG9hdFZhbHVlX3JlZmxlY3Rpb25fOwotICByZXR1cm4gbWV0YWRh
dGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIEZsb2F0VmFs
dWUKLQotLy8gb3B0aW9uYWwgZmxvYXQgdmFsdWUgPSAxOwotdm9pZCBGbG9hdFZhbHVlOjpjbGVh
cl92YWx1ZSgpIHsKLSAgdmFsdWVfID0gMDsKLX0KLSBmbG9hdCBGbG9hdFZhbHVlOjp2YWx1ZSgp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUu
cHJvdG9idWYuRmxvYXRWYWx1ZS52YWx1ZSkKLSAgcmV0dXJuIHZhbHVlXzsKLX0KLSB2b2lkIEZs
b2F0VmFsdWU6OnNldF92YWx1ZShmbG9hdCB2YWx1ZSkgewotICAKLSAgdmFsdWVfID0gdmFsdWU7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVm
LkZsb2F0VmFsdWUudmFsdWUpCi19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9J
Tl9IRUFERVJTCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBf
TVNDX1ZFUiA+PSAxOTAwCi1jb25zdCBpbnQgSW50NjRWYWx1ZTo6a1ZhbHVlRmllbGROdW1iZXI7
Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUlu
dDY0VmFsdWU6OkludDY0VmFsdWUoKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgp
LCBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkludDY0VmFs
dWUpCi19Ci0KLUludDY0VmFsdWU6OkludDY0VmFsdWUoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YSogYXJlbmEpCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gIF9pbnRlcm5h
bF9tZXRhZGF0YV8oYXJlbmEpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBSZWdpc3RlckFyZW5hRHRv
cihhcmVuYSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChhcmVuYV9jb25zdHJ1Y3Rv
cjpnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSkKLX0KLQotdm9pZCBJbnQ2NFZhbHVlOjpJbml0
QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IHRydWU7Ci19
Ci0KLUludDY0VmFsdWU6OkludDY0VmFsdWUoY29uc3QgSW50NjRWYWx1ZSYgZnJvbSkKLSAgOiA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5V
TEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9j
X2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZh
bHVlKQotfQotCi12b2lkIEludDY0VmFsdWU6OlNoYXJlZEN0b3IoKSB7Ci0gICAgX2lzX2RlZmF1
bHRfaW5zdGFuY2VfID0gZmFsc2U7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwotICB2YWx1ZV8gPSBH
T09HTEVfTE9OR0xPTkcoMCk7Ci19Ci0KLUludDY0VmFsdWU6On5JbnQ2NFZhbHVlKCkgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuSW50
NjRWYWx1ZSkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12b2lkIEludDY0VmFsdWU6OlNoYXJlZER0
b3IoKSB7Ci0gIGlmIChHZXRBcmVuYU5vVmlydHVhbCgpICE9IE5VTEwpIHsKLSAgICByZXR1cm47
Ci0gIH0KLQotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNlXykgewotICB9Ci19Ci0KLXZv
aWQgSW50NjRWYWx1ZTo6QXJlbmFEdG9yKHZvaWQqIG9iamVjdCkgewotICBJbnQ2NFZhbHVlKiBf
dGhpcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8IEludDY0VmFsdWUqID4ob2JqZWN0KTsKLSAgKHZvaWQp
X3RoaXM7Ci19Ci12b2lkIEludDY0VmFsdWU6OlJlZ2lzdGVyQXJlbmFEdG9yKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hKSB7Ci19Ci12b2lkIEludDY0VmFsdWU6OlNldENhY2hlZFNp
emUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVH
SU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBJ
bnQ2NFZhbHVlOjpkZXNjcmlwdG9yKCkgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09u
Y2UoKTsKLSAgcmV0dXJuIEludDY0VmFsdWVfZGVzY3JpcHRvcl87Ci19Ci0KLWNvbnN0IEludDY0
VmFsdWUmIEludDY0VmFsdWU6OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlmIChkZWZhdWx0X2lu
c3RhbmNlXyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmd3Jh
cHBlcnNfMmVwcm90bygpOwotICByZXR1cm4gKmRlZmF1bHRfaW5zdGFuY2VfOwotfQotCi1JbnQ2
NFZhbHVlKiBJbnQ2NFZhbHVlOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLUludDY0VmFs
dWUqIEludDY0VmFsdWU6Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29u
c3QgewotICByZXR1cm4gOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6Q3JlYXRlTWVzc2FnZTxJ
bnQ2NFZhbHVlPihhcmVuYSk7Ci19Ci0KLXZvaWQgSW50NjRWYWx1ZTo6Q2xlYXIoKSB7Ci0vLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUucHJvdG9i
dWYuSW50NjRWYWx1ZSkKLSAgdmFsdWVfID0gR09PR0xFX0xPTkdMT05HKDApOwotfQotCi1ib29s
IEludDY0VmFsdWU6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQ
UkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1
cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUpCi0gIGZv
ciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJv
b2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhDdXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0
OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGRO
dW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0aW9uYWwgaW50NjQgdmFsdWUgPSAxOwotICAgICAg
Y2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcgPT0gOCkgewotICAgICAgICAgIERPXygoOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0g
ICAgICAgICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQ2NCwgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfSU5UNjQ+KAotICAgICAgICAg
ICAgICAgICBpbnB1dCwgJnZhbHVlXykpKTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlucHV0LT5FeHBl
Y3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAg
ICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3VhbDoKLSAgICAgICAgaWYgKHRhZyA9PSAw
IHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0
TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAgICAgICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJUkVUWVBFX0VORF9HUk9VUCkgewotICAg
ICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBET18oOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNraXBGaWVsZChpbnB1dCwgdGFnKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotc3VjY2VzczoKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1Y2Nlc3M6Z29vZ2xlLnByb3RvYnVmLkludDY0
VmFsdWUpCi0gIHJldHVybiB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KHBhcnNlX2ZhaWx1cmU6Z29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUpCi0gIHJldHVy
biBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9pZCBJbnQ2NFZhbHVlOjpTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJl
YW0qIG91dHB1dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFs
aXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlKQotICAvLyBvcHRpb25hbCBpbnQ2
NCB2YWx1ZSA9IDE7Ci0gIGlmICh0aGlzLT52YWx1ZSgpICE9IDApIHsKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVJbnQ2NCgxLCB0aGlzLT52
YWx1ZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNl
cmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUpCi19Ci0KLTo6Z29vZ2xlOjpw
cm90b2J1Zjo6dWludDgqIEludDY0VmFsdWU6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJy
YXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFyZ2V0KSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfc3RhcnQ6Z29vZ2xl
LnByb3RvYnVmLkludDY0VmFsdWUpCi0gIC8vIG9wdGlvbmFsIGludDY0IHZhbHVlID0gMTsKLSAg
aWYgKHRoaXMtPnZhbHVlKCkgIT0gMCkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUludDY0VG9BcnJheSgxLCB0aGlzLT52
YWx1ZSgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNl
cmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUpCi0gIHJldHVy
biB0YXJnZXQ7Ci19Ci0KLWludCBJbnQ2NFZhbHVlOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJv
dG9idWYuSW50NjRWYWx1ZSkKLSAgaW50IHRvdGFsX3NpemUgPSAwOwotCi0gIC8vIG9wdGlvbmFs
IGludDY0IHZhbHVlID0gMTsKLSAgaWYgKHRoaXMtPnZhbHVlKCkgIT0gMCkgewotICAgIHRvdGFs
X3NpemUgKz0gMSArCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9y
bWF0TGl0ZTo6SW50NjRTaXplKAotICAgICAgICB0aGlzLT52YWx1ZSgpKTsKLSAgfQotCi0gIEdP
T0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSB0
b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLSAgcmV0
dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgSW50NjRWYWx1ZTo6TWVyZ2VGcm9tKGNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkludDY0
VmFsdWUpCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VG
cm9tRmFpbChfX0xJTkVfXyk7Ci0gIGNvbnN0IEludDY0VmFsdWUqIHNvdXJjZSA9IAotICAgICAg
Ojpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25z
dCBJbnQ2NFZhbHVlPigKLSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9j
YXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUpCi0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6UmVmbGVjdGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxz
ZSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9t
X2Nhc3Rfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSkKLSAgICBNZXJnZUZyb20o
KnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBJbnQ2NFZhbHVlOjpNZXJnZUZyb20oY29uc3QgSW50
NjRWYWx1ZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNp
ZmljX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUpCi0gIGlmIChH
T09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVf
Xyk7Ci0gIGlmIChmcm9tLnZhbHVlKCkgIT0gMCkgewotICAgIHNldF92YWx1ZShmcm9tLnZhbHVl
KCkpOwotICB9Ci19Ci0KLXZvaWQgSW50NjRWYWx1ZTo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6
OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Z2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlKQot
ICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJv
bSk7Ci19Ci0KLXZvaWQgSW50NjRWYWx1ZTo6Q29weUZyb20oY29uc3QgSW50NjRWYWx1ZSYgZnJv
bSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJv
bV9zdGFydDpnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSkKLSAgaWYgKCZmcm9tID09IHRoaXMp
IHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi1ib29sIEludDY0
VmFsdWU6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgSW50NjRWYWx1ZTo6U3dhcChJbnQ2NFZhbHVlKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0g
dGhpcykgcmV0dXJuOwotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBvdGhlci0+R2V0QXJl
bmFOb1ZpcnR1YWwoKSkgewotICAgIEludGVybmFsU3dhcChvdGhlcik7Ci0gIH0gZWxzZSB7Ci0g
ICAgSW50NjRWYWx1ZSB0ZW1wOwotICAgIHRlbXAuTWVyZ2VGcm9tKCp0aGlzKTsKLSAgICBDb3B5
RnJvbSgqb3RoZXIpOwotICAgIG90aGVyLT5Db3B5RnJvbSh0ZW1wKTsKLSAgfQotfQotdm9pZCBJ
bnQ2NFZhbHVlOjpVbnNhZmVBcmVuYVN3YXAoSW50NjRWYWx1ZSogb3RoZXIpIHsKLSAgaWYgKG90
aGVyID09IHRoaXMpIHJldHVybjsKLSAgR09PR0xFX0RDSEVDSyhHZXRBcmVuYU5vVmlydHVhbCgp
ID09IG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKTsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsK
LX0KLXZvaWQgSW50NjRWYWx1ZTo6SW50ZXJuYWxTd2FwKEludDY0VmFsdWUqIG90aGVyKSB7Ci0g
IHN0ZDo6c3dhcCh2YWx1ZV8sIG90aGVyLT52YWx1ZV8pOwotICBfaW50ZXJuYWxfbWV0YWRhdGFf
LlN3YXAoJm90aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9jYWNoZWRf
c2l6ZV8sIG90aGVyLT5fY2FjaGVkX3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXRhZGF0YSBJbnQ2NFZhbHVlOjpHZXRNZXRhZGF0YSgpIGNvbnN0IHsKLSAgcHJvdG9idWZfQXNz
aWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0
YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBJbnQ2NFZhbHVlX2Rlc2NyaXB0b3JfOwot
ICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gSW50NjRWYWx1ZV9yZWZsZWN0aW9uXzsKLSAgcmV0dXJu
IG1ldGFkYXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0vLyBJ
bnQ2NFZhbHVlCi0KLS8vIG9wdGlvbmFsIGludDY0IHZhbHVlID0gMTsKLXZvaWQgSW50NjRWYWx1
ZTo6Y2xlYXJfdmFsdWUoKSB7Ci0gIHZhbHVlXyA9IEdPT0dMRV9MT05HTE9ORygwKTsKLX0KLSA6
Omdvb2dsZTo6cHJvdG9idWY6OmludDY0IEludDY0VmFsdWU6OnZhbHVlKCkgY29uc3QgewotICAv
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5JbnQ2
NFZhbHVlLnZhbHVlKQotICByZXR1cm4gdmFsdWVfOwotfQotIHZvaWQgSW50NjRWYWx1ZTo6c2V0
X3ZhbHVlKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50NjQgdmFsdWUpIHsKLSAgCi0gIHZhbHVlXyA9
IHZhbHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5w
cm90b2J1Zi5JbnQ2NFZhbHVlLnZhbHVlKQotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElO
RV9OT1RfSU5fSEVBREVSUwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZF
UikgfHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgaW50IFVJbnQ2NFZhbHVlOjprVmFsdWVGaWVs
ZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5
MDAKLQotVUludDY0VmFsdWU6OlVJbnQ2NFZhbHVlKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6
Ok1lc3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1
Zi5VSW50NjRWYWx1ZSkKLX0KLQotVUludDY0VmFsdWU6OlVJbnQ2NFZhbHVlKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgp
LAotICBfaW50ZXJuYWxfbWV0YWRhdGFfKGFyZW5hKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgUmVn
aXN0ZXJBcmVuYUR0b3IoYXJlbmEpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoYXJl
bmFfY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlKQotfQotCi12b2lkIFVJ
bnQ2NFZhbHVlOjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3Rh
bmNlXyA9IHRydWU7Ci19Ci0KLVVJbnQ2NFZhbHVlOjpVSW50NjRWYWx1ZShjb25zdCBVSW50NjRW
YWx1ZSYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50
ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJv
bSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2ds
ZS5wcm90b2J1Zi5VSW50NjRWYWx1ZSkKLX0KLQotdm9pZCBVSW50NjRWYWx1ZTo6U2hhcmVkQ3Rv
cigpIHsKLSAgICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSBmYWxzZTsKLSAgX2NhY2hlZF9zaXpl
XyA9IDA7Ci0gIHZhbHVlXyA9IEdPT0dMRV9VTE9OR0xPTkcoMCk7Ci19Ci0KLVVJbnQ2NFZhbHVl
Ojp+VUludDY0VmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVj
dG9yOmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZSkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12
b2lkIFVJbnQ2NFZhbHVlOjpTaGFyZWREdG9yKCkgewotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwo
KSAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKHRoaXMgIT0gZGVmYXVsdF9p
bnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIFVJbnQ2NFZhbHVlOjpBcmVuYUR0b3Iodm9pZCog
b2JqZWN0KSB7Ci0gIFVJbnQ2NFZhbHVlKiBfdGhpcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8IFVJbnQ2
NFZhbHVlKiA+KG9iamVjdCk7Ci0gICh2b2lkKV90aGlzOwotfQotdm9pZCBVSW50NjRWYWx1ZTo6
UmVnaXN0ZXJBcmVuYUR0b3IoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIHsKLX0K
LXZvaWQgVUludDY0VmFsdWU6OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09P
R0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNp
emU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBVSW50NjRWYWx1ZTo6ZGVzY3JpcHRvcigpIHsK
LSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIHJldHVybiBVSW50NjRWYWx1
ZV9kZXNjcmlwdG9yXzsKLX0KLQotY29uc3QgVUludDY0VmFsdWUmIFVJbnQ2NFZhbHVlOjpkZWZh
dWx0X2luc3RhbmNlKCkgewotICBpZiAoZGVmYXVsdF9pbnN0YW5jZV8gPT0gTlVMTCkgcHJvdG9i
dWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8oKTsKLSAgcmV0
dXJuICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotVUludDY0VmFsdWUqIFVJbnQ2NFZhbHVlOjpk
ZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7Ci0KLVVJbnQ2NFZhbHVlKiBVSW50NjRWYWx1ZTo6TmV3
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdCB7Ci0gIHJldHVybiA6Omdv
b2dsZTo6cHJvdG9idWY6OkFyZW5hOjpDcmVhdGVNZXNzYWdlPFVJbnQ2NFZhbHVlPihhcmVuYSk7
Ci19Ci0KLXZvaWQgVUludDY0VmFsdWU6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KG1lc3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlKQot
ICB2YWx1ZV8gPSBHT09HTEVfVUxPTkdMT05HKDApOwotfQotCi1ib29sIFVJbnQ2NFZhbHVlOjpN
ZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6
Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04pIGlmICgh
R09PR0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBh
cnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZSkKLSAgZm9yICg7OykgewotICAg
IDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0
LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFw
LnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7
Ci0gICAgICAvLyBvcHRpb25hbCB1aW50NjQgdmFsdWUgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0g
ICAgICAgIGlmICh0YWcgPT0gOCkgewotICAgICAgICAgIERPXygoOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRQcmltaXRpdmU8Ci0gICAgICAgICAgICAg
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50NjQsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpUWVBFX1VJTlQ2ND4oCi0gICAgICAgICAgICAgICAgIGlu
cHV0LCAmdmFsdWVfKSkpOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5k
bGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdEF0RW5kKCkp
IGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6
IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAgICBpZiAodGFnID09IDAgfHwKLSAgICAg
ICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRU
YWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7Ci0gICAgICAgICAgZ290
byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U2tpcEZpZWxkKGlucHV0LCB0YWcpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUpCi0g
IHJldHVybiB0cnVlOwotZmFpbHVyZToKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBh
cnNlX2ZhaWx1cmU6Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlKQotICByZXR1cm4gZmFsc2U7
Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgVUludDY0VmFsdWU6OlNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0
cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3Rh
cnQ6Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlKQotICAvLyBvcHRpb25hbCB1aW50NjQgdmFs
dWUgPSAxOwotICBpZiAodGhpcy0+dmFsdWUoKSAhPSAwKSB7Ci0gICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlVUludDY0KDEsIHRoaXMtPnZhbHVl
KCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFs
aXplX2VuZDpnb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUpCi19Ci0KLTo6Z29vZ2xlOjpwcm90
b2J1Zjo6dWludDgqIFVJbnQ2NFZhbHVlOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5
KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X3N0YXJ0Omdvb2dsZS5w
cm90b2J1Zi5VSW50NjRWYWx1ZSkKLSAgLy8gb3B0aW9uYWwgdWludDY0IHZhbHVlID0gMTsKLSAg
aWYgKHRoaXMtPnZhbHVlKCkgIT0gMCkgewotICAgIHRhcmdldCA9IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZVVJbnQ2NFRvQXJyYXkoMSwgdGhpcy0+
dmFsdWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChz
ZXJpYWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZSkKLSAgcmV0
dXJuIHRhcmdldDsKLX0KLQotaW50IFVJbnQ2NFZhbHVlOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUu
cHJvdG9idWYuVUludDY0VmFsdWUpCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICAvLyBvcHRp
b25hbCB1aW50NjQgdmFsdWUgPSAxOwotICBpZiAodGhpcy0+dmFsdWUoKSAhPSAwKSB7Ci0gICAg
dG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpVSW50NjRTaXplKAotICAgICAgICB0aGlzLT52YWx1ZSgpKTsKLSAgfQot
Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6
ZV8gPSB0b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsK
LSAgcmV0dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgVUludDY0VmFsdWU6Ok1lcmdlRnJvbShj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1
Zi5VSW50NjRWYWx1ZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMp
KSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgVUludDY0VmFsdWUqIHNvdXJjZSA9
IAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVy
YXRlZDxjb25zdCBVSW50NjRWYWx1ZT4oCi0gICAgICAgICAgJmZyb20pOwotICBpZiAoc291cmNl
ID09IE5VTEwpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21l
cmdlX2Zyb21fY2FzdF9mYWlsOmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZSkKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlz
KTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVk
X21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZSkKLSAg
ICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBVSW50NjRWYWx1ZTo6TWVyZ2VG
cm9tKGNvbnN0IFVJbnQ2NFZhbHVlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuVUludDY0
VmFsdWUpCi0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VG
cm9tRmFpbChfX0xJTkVfXyk7Ci0gIGlmIChmcm9tLnZhbHVlKCkgIT0gMCkgewotICAgIHNldF92
YWx1ZShmcm9tLnZhbHVlKCkpOwotICB9Ci19Ci0KLXZvaWQgVUludDY0VmFsdWU6OkNvcHlGcm9t
KGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuVUludDY0VmFsdWUpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7
Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBVSW50NjRWYWx1ZTo6Q29weUZyb20oY29u
c3QgVUludDY0VmFsdWUmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFz
c19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlKQot
ICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJv
bSk7Ci19Ci0KLWJvb2wgVUludDY0VmFsdWU6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVUludDY0VmFsdWU6OlN3YXAoVUludDY0VmFsdWUqIG90
aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIGlmIChHZXRBcmVuYU5vVmly
dHVhbCgpID09IG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKSB7Ci0gICAgSW50ZXJuYWxTd2Fw
KG90aGVyKTsKLSAgfSBlbHNlIHsKLSAgICBVSW50NjRWYWx1ZSB0ZW1wOwotICAgIHRlbXAuTWVy
Z2VGcm9tKCp0aGlzKTsKLSAgICBDb3B5RnJvbSgqb3RoZXIpOwotICAgIG90aGVyLT5Db3B5RnJv
bSh0ZW1wKTsKLSAgfQotfQotdm9pZCBVSW50NjRWYWx1ZTo6VW5zYWZlQXJlbmFTd2FwKFVJbnQ2
NFZhbHVlKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBHT09HTEVf
RENIRUNLKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gb3RoZXItPkdldEFyZW5hTm9WaXJ0dWFsKCkp
OwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQotdm9pZCBVSW50NjRWYWx1ZTo6SW50ZXJuYWxT
d2FwKFVJbnQ2NFZhbHVlKiBvdGhlcikgewotICBzdGQ6OnN3YXAodmFsdWVfLCBvdGhlci0+dmFs
dWVfKTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+X2ludGVybmFsX21ldGFk
YXRhXyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+X2NhY2hlZF9zaXplXyk7
Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgVUludDY0VmFsdWU6OkdldE1ldGFk
YXRhKCkgY29uc3QgewotICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpn
b29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRv
ciA9IFVJbnQ2NFZhbHVlX2Rlc2NyaXB0b3JfOwotICBtZXRhZGF0YS5yZWZsZWN0aW9uID0gVUlu
dDY0VmFsdWVfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0KLQotI2lmIFBST1RP
QlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gVUludDY0VmFsdWUKLQotLy8gb3B0aW9uYWwg
dWludDY0IHZhbHVlID0gMTsKLXZvaWQgVUludDY0VmFsdWU6OmNsZWFyX3ZhbHVlKCkgewotICB2
YWx1ZV8gPSBHT09HTEVfVUxPTkdMT05HKDApOwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWlu
dDY0IFVJbnQ2NFZhbHVlOjp2YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUudmFsdWUpCi0gIHJl
dHVybiB2YWx1ZV87Ci19Ci0gdm9pZCBVSW50NjRWYWx1ZTo6c2V0X3ZhbHVlKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6dWludDY0IHZhbHVlKSB7Ci0gIAotICB2YWx1ZV8gPSB2YWx1ZTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVUludDY0VmFs
dWUudmFsdWUpCi19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJT
Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+
PSAxOTAwCi1jb25zdCBpbnQgSW50MzJWYWx1ZTo6a1ZhbHVlRmllbGROdW1iZXI7Ci0jZW5kaWYg
IC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA+PSAxOTAwCi0KLUludDMyVmFsdWU6
OkludDMyVmFsdWUoKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJu
YWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUpCi19Ci0K
LUludDMyVmFsdWU6OkludDMyVmFsdWUoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEp
Ci0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gIF9pbnRlcm5hbF9tZXRhZGF0
YV8oYXJlbmEpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBSZWdpc3RlckFyZW5hRHRvcihhcmVuYSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChhcmVuYV9jb25zdHJ1Y3Rvcjpnb29nbGUu
cHJvdG9idWYuSW50MzJWYWx1ZSkKLX0KLQotdm9pZCBJbnQzMlZhbHVlOjpJbml0QXNEZWZhdWx0
SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3RhbmNlXyA9IHRydWU7Ci19Ci0KLUludDMy
VmFsdWU6OkludDMyVmFsdWUoY29uc3QgSW50MzJWYWx1ZSYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJuYWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAg
U2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlKQotfQot
Ci12b2lkIEludDMyVmFsdWU6OlNoYXJlZEN0b3IoKSB7Ci0gICAgX2lzX2RlZmF1bHRfaW5zdGFu
Y2VfID0gZmFsc2U7Ci0gIF9jYWNoZWRfc2l6ZV8gPSAwOwotICB2YWx1ZV8gPSAwOwotfQotCi1J
bnQzMlZhbHVlOjp+SW50MzJWYWx1ZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGRlc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUpCi0gIFNoYXJlZER0b3IoKTsK
LX0KLQotdm9pZCBJbnQzMlZhbHVlOjpTaGFyZWREdG9yKCkgewotICBpZiAoR2V0QXJlbmFOb1Zp
cnR1YWwoKSAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKHRoaXMgIT0gZGVm
YXVsdF9pbnN0YW5jZV8pIHsKLSAgfQotfQotCi12b2lkIEludDMyVmFsdWU6OkFyZW5hRHRvcih2
b2lkKiBvYmplY3QpIHsKLSAgSW50MzJWYWx1ZSogX3RoaXMgPSByZWludGVycHJldF9jYXN0PCBJ
bnQzMlZhbHVlKiA+KG9iamVjdCk7Ci0gICh2b2lkKV90aGlzOwotfQotdm9pZCBJbnQzMlZhbHVl
OjpSZWdpc3RlckFyZW5hRHRvcig6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgewot
fQotdm9pZCBJbnQzMlZhbHVlOjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdP
T0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBz
aXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6
Z29vZ2xlOjpwcm90b2J1Zjo6RGVzY3JpcHRvciogSW50MzJWYWx1ZTo6ZGVzY3JpcHRvcigpIHsK
LSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIHJldHVybiBJbnQzMlZhbHVl
X2Rlc2NyaXB0b3JfOwotfQotCi1jb25zdCBJbnQzMlZhbHVlJiBJbnQzMlZhbHVlOjpkZWZhdWx0
X2luc3RhbmNlKCkgewotICBpZiAoZGVmYXVsdF9pbnN0YW5jZV8gPT0gTlVMTCkgcHJvdG9idWZf
QWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8oKTsKLSAgcmV0dXJu
ICpkZWZhdWx0X2luc3RhbmNlXzsKLX0KLQotSW50MzJWYWx1ZSogSW50MzJWYWx1ZTo6ZGVmYXVs
dF9pbnN0YW5jZV8gPSBOVUxMOwotCi1JbnQzMlZhbHVlKiBJbnQzMlZhbHVlOjpOZXcoOjpnb29n
bGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0IHsKLSAgcmV0dXJuIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmE6OkNyZWF0ZU1lc3NhZ2U8SW50MzJWYWx1ZT4oYXJlbmEpOwotfQotCi12
b2lkIEludDMyVmFsdWU6OkNsZWFyKCkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1l
c3NhZ2VfY2xlYXJfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUpCi0gIHZhbHVlXyA9
IDA7Ci19Ci0KLWJvb2wgSW50MzJWYWx1ZTo6TWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KSB7Ci0j
ZGVmaW5lIERPXyhFWFBSRVNTSU9OKSBpZiAoIUdPT0dMRV9QUkVESUNUX1RSVUUoRVhQUkVTU0lP
TikpIGdvdG8gZmFpbHVyZQotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiB0YWc7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdGFydDpnb29nbGUucHJvdG9idWYuSW50
MzJWYWx1ZSkKLSAgZm9yICg7OykgewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9i
dWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAg
IHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsK
LSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpHZXRUYWdGaWVsZE51bWJlcih0YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCBpbnQzMiB2YWx1
ZSA9IDE7Ci0gICAgICBjYXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA4KSB7Ci0gICAgICAg
ICAgRE9fKCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVh
ZFByaW1pdGl2ZTwKLSAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMy
LCA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VFlQRV9JTlQz
Mj4oCi0gICAgICAgICAgICAgICAgIGlucHV0LCAmdmFsdWVfKSkpOwotCi0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoaW5wdXQtPkV4cGVjdEF0RW5kKCkpIGdvdG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6IHsKLSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAg
ICBpZiAodGFnID09IDAgfHwKLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdXaXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5E
X0dST1VQKSB7Ci0gICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERP
Xyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6U2tpcEZpZWxk
KGlucHV0LCB0YWcpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNj
ZXNzOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUu
cHJvdG9idWYuSW50MzJWYWx1ZSkKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuSW50MzJW
YWx1ZSkKLSAgcmV0dXJuIGZhbHNlOwotI3VuZGVmIERPXwotfQotCi12b2lkIEludDMyVmFsdWU6
OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpD
b2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUpCi0gIC8v
IG9wdGlvbmFsIGludDMyIHZhbHVlID0gMTsKLSAgaWYgKHRoaXMtPnZhbHVlKCkgIT0gMCkgewot
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUlu
dDMyKDEsIHRoaXMtPnZhbHVlKCksIG91dHB1dCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoc2VyaWFsaXplX2VuZDpnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZSkKLX0K
LQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogSW50MzJWYWx1ZTo6U2VyaWFsaXplV2l0aENh
Y2hlZFNpemVzVG9BcnJheSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJnZXQp
IGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJh
eV9zdGFydDpnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZSkKLSAgLy8gb3B0aW9uYWwgaW50MzIg
dmFsdWUgPSAxOwotICBpZiAodGhpcy0+dmFsdWUoKSAhPSAwKSB7Ci0gICAgdGFyZ2V0ID0gOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlSW50MzJUb0Fy
cmF5KDEsIHRoaXMtPnZhbHVlKCksIHRhcmdldCk7Ci0gIH0KLQotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5X2VuZDpnb29nbGUucHJvdG9idWYuSW50MzJW
YWx1ZSkKLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotaW50IEludDMyVmFsdWU6OkJ5dGVTaXplKCkg
Y29uc3QgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0
YXJ0Omdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlKQotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0K
LSAgLy8gb3B0aW9uYWwgaW50MzIgdmFsdWUgPSAxOwotICBpZiAodGhpcy0+dmFsdWUoKSAhPSAw
KSB7Ci0gICAgdG90YWxfc2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpJbnQzMlNpemUoCi0gICAgICAgIHRoaXMtPnZhbHVlKCkp
OwotICB9Ci0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVHSU4oKTsKLSAgX2Nh
Y2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVT
X0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBJbnQzMlZhbHVlOjpNZXJn
ZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHBy
b3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUu
cHJvdG9idWYuSW50MzJWYWx1ZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09
IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgSW50MzJWYWx1ZSogc291
cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpEeW5hbWljQ2FzdFRv
R2VuZXJhdGVkPGNvbnN0IEludDMyVmFsdWU+KAotICAgICAgICAgICZmcm9tKTsKLSAgaWYgKHNv
dXJjZSA9PSBOVUxMKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXpl
ZF9tZXJnZV9mcm9tX2Nhc3RfZmFpbDpnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZSkKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0
aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxp
emVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlKQot
ICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12b2lkIEludDMyVmFsdWU6Ok1lcmdl
RnJvbShjb25zdCBJbnQzMlZhbHVlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuSW50MzJW
YWx1ZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZy
b21GYWlsKF9fTElORV9fKTsKLSAgaWYgKGZyb20udmFsdWUoKSAhPSAwKSB7Ci0gICAgc2V0X3Zh
bHVlKGZyb20udmFsdWUoKSk7Ci0gIH0KLX0KLQotdm9pZCBJbnQzMlZhbHVlOjpDb3B5RnJvbShj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVm
LkludDMyVmFsdWUpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7Ci0g
IE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBJbnQzMlZhbHVlOjpDb3B5RnJvbShjb25zdCBJ
bnQzMlZhbHVlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3Bl
Y2lmaWNfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlKQotICBpZiAo
JmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19
Ci0KLWJvb2wgSW50MzJWYWx1ZTo6SXNJbml0aWFsaXplZCgpIGNvbnN0IHsKLQotICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBJbnQzMlZhbHVlOjpTd2FwKEludDMyVmFsdWUqIG90aGVyKSB7Ci0g
IGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIGlmIChHZXRBcmVuYU5vVmlydHVhbCgpID09
IG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKSB7Ci0gICAgSW50ZXJuYWxTd2FwKG90aGVyKTsK
LSAgfSBlbHNlIHsKLSAgICBJbnQzMlZhbHVlIHRlbXA7Ci0gICAgdGVtcC5NZXJnZUZyb20oKnRo
aXMpOwotICAgIENvcHlGcm9tKCpvdGhlcik7Ci0gICAgb3RoZXItPkNvcHlGcm9tKHRlbXApOwot
ICB9Ci19Ci12b2lkIEludDMyVmFsdWU6OlVuc2FmZUFyZW5hU3dhcChJbnQzMlZhbHVlKiBvdGhl
cikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBHT09HTEVfRENIRUNLKEdldEFy
ZW5hTm9WaXJ0dWFsKCkgPT0gb3RoZXItPkdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICBJbnRlcm5h
bFN3YXAob3RoZXIpOwotfQotdm9pZCBJbnQzMlZhbHVlOjpJbnRlcm5hbFN3YXAoSW50MzJWYWx1
ZSogb3RoZXIpIHsKLSAgc3RkOjpzd2FwKHZhbHVlXywgb3RoZXItPnZhbHVlXyk7Ci0gIF9pbnRl
cm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8pOwotICBzdGQ6
OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQotCi06Omdvb2ds
ZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEludDMyVmFsdWU6OkdldE1ldGFkYXRhKCkgY29uc3Qgewot
ICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IEludDMyVmFsdWVf
ZGVzY3JpcHRvcl87Ci0gIG1ldGFkYXRhLnJlZmxlY3Rpb24gPSBJbnQzMlZhbHVlX3JlZmxlY3Rp
b25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9JTkxJTkVfTk9UX0lO
X0hFQURFUlMKLS8vIEludDMyVmFsdWUKLQotLy8gb3B0aW9uYWwgaW50MzIgdmFsdWUgPSAxOwot
dm9pZCBJbnQzMlZhbHVlOjpjbGVhcl92YWx1ZSgpIHsKLSAgdmFsdWVfID0gMDsKLX0KLSA6Omdv
b2dsZTo6cHJvdG9idWY6OmludDMyIEludDMyVmFsdWU6OnZhbHVlKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5JbnQzMlZh
bHVlLnZhbHVlKQotICByZXR1cm4gdmFsdWVfOwotfQotIHZvaWQgSW50MzJWYWx1ZTo6c2V0X3Zh
bHVlKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpIHsKLSAgCi0gIHZhbHVlXyA9IHZh
bHVlOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0Omdvb2dsZS5wcm90
b2J1Zi5JbnQzMlZhbHVlLnZhbHVlKQotfQotCi0jZW5kaWYgIC8vIFBST1RPQlVGX0lOTElORV9O
T1RfSU5fSEVBREVSUwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikg
fHwgX01TQ19WRVIgPj0gMTkwMAotY29uc3QgaW50IFVJbnQzMlZhbHVlOjprVmFsdWVGaWVsZE51
bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAK
LQotVUludDMyVmFsdWU6OlVJbnQzMlZhbHVlKCkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2UoKSwgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5V
SW50MzJWYWx1ZSkKLX0KLQotVUludDMyVmFsdWU6OlVJbnQzMlZhbHVlKDo6Z29vZ2xlOjpwcm90
b2J1Zjo6QXJlbmEqIGFyZW5hKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLAot
ICBfaW50ZXJuYWxfbWV0YWRhdGFfKGFyZW5hKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgUmVnaXN0
ZXJBcmVuYUR0b3IoYXJlbmEpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoYXJlbmFf
Y29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlKQotfQotCi12b2lkIFVJbnQz
MlZhbHVlOjpJbml0QXNEZWZhdWx0SW5zdGFuY2UoKSB7Ci0gIF9pc19kZWZhdWx0X2luc3RhbmNl
XyA9IHRydWU7Ci19Ci0KLVVJbnQzMlZhbHVlOjpVSW50MzJWYWx1ZShjb25zdCBVSW50MzJWYWx1
ZSYgZnJvbSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UoKSwKLSAgICBfaW50ZXJu
YWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBNZXJnZUZyb20oZnJvbSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb3B5X2NvbnN0cnVjdG9yOmdvb2dsZS5w
cm90b2J1Zi5VSW50MzJWYWx1ZSkKLX0KLQotdm9pZCBVSW50MzJWYWx1ZTo6U2hhcmVkQ3Rvcigp
IHsKLSAgICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSBmYWxzZTsKLSAgX2NhY2hlZF9zaXplXyA9
IDA7Ci0gIHZhbHVlXyA9IDB1OwotfQotCi1VSW50MzJWYWx1ZTo6flVJbnQzMlZhbHVlKCkgewot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYu
VUludDMyVmFsdWUpCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9pZCBVSW50MzJWYWx1ZTo6U2hh
cmVkRHRvcigpIHsKLSAgaWYgKEdldEFyZW5hTm9WaXJ0dWFsKCkgIT0gTlVMTCkgewotICAgIHJl
dHVybjsKLSAgfQotCi0gIGlmICh0aGlzICE9IGRlZmF1bHRfaW5zdGFuY2VfKSB7Ci0gIH0KLX0K
LQotdm9pZCBVSW50MzJWYWx1ZTo6QXJlbmFEdG9yKHZvaWQqIG9iamVjdCkgewotICBVSW50MzJW
YWx1ZSogX3RoaXMgPSByZWludGVycHJldF9jYXN0PCBVSW50MzJWYWx1ZSogPihvYmplY3QpOwot
ICAodm9pZClfdGhpczsKLX0KLXZvaWQgVUludDMyVmFsdWU6OlJlZ2lzdGVyQXJlbmFEdG9yKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSB7Ci19Ci12b2lkIFVJbnQzMlZhbHVlOjpT
ZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNVUlJFTlRf
V1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVfU0FGRV9D
T05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6RGVz
Y3JpcHRvciogVUludDMyVmFsdWU6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRl
c2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gVUludDMyVmFsdWVfZGVzY3JpcHRvcl87Ci19Ci0K
LWNvbnN0IFVJbnQzMlZhbHVlJiBVSW50MzJWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZSgpIHsKLSAg
aWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJm
cHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7Ci0gIHJldHVybiAqZGVmYXVsdF9pbnN0YW5j
ZV87Ci19Ci0KLVVJbnQzMlZhbHVlKiBVSW50MzJWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBO
VUxMOwotCi1VSW50MzJWYWx1ZSogVUludDMyVmFsdWU6Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6
OkFyZW5hKiBhcmVuYSkgY29uc3QgewotICByZXR1cm4gOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YTo6Q3JlYXRlTWVzc2FnZTxVSW50MzJWYWx1ZT4oYXJlbmEpOwotfQotCi12b2lkIFVJbnQzMlZh
bHVlOjpDbGVhcigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNzYWdlX2NsZWFy
X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZSkKLSAgdmFsdWVfID0gMHU7Ci19Ci0K
LWJvb2wgVUludDMyVmFsdWU6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBE
T18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3Rv
IGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVl
KQotICBmb3IgKDs7KSB7Ci0gICAgOjpzdGQ6OnBhaXI8IDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWlu
dDMyLCBib29sPiBwID0gaW5wdXQtPlJlYWRUYWdXaXRoQ3V0b2ZmKDEyNyk7Ci0gICAgdGFnID0g
cC5maXJzdDsKLSAgICBpZiAoIXAuc2Vjb25kKSBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgIHN3
aXRjaCAoOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRh
Z0ZpZWxkTnVtYmVyKHRhZykpIHsKLSAgICAgIC8vIG9wdGlvbmFsIHVpbnQzMiB2YWx1ZSA9IDE7
Ci0gICAgICBjYXNlIDE6IHsKLSAgICAgICAgaWYgKHRhZyA9PSA4KSB7Ci0gICAgICAgICAgRE9f
KCg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6UmVhZFByaW1p
dGl2ZTwKLSAgICAgICAgICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlRZUEVfVUlOVDMyPigK
LSAgICAgICAgICAgICAgICAgaW5wdXQsICZ2YWx1ZV8pKSk7Ci0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChp
bnB1dC0+RXhwZWN0QXRFbmQoKSkgZ290byBzdWNjZXNzOwotICAgICAgICBicmVhazsKLSAgICAg
IH0KLQotICAgICAgZGVmYXVsdDogewotICAgICAgaGFuZGxlX3VudXN1YWw6Ci0gICAgICAgIGlm
ICh0YWcgPT0gMCB8fAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
V2lyZUZvcm1hdExpdGU6OkdldFRhZ1dpcmVUeXBlKHRhZykgPT0KLSAgICAgICAgICAgIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXSVJFVFlQRV9FTkRfR1JP
VVApIHsKLSAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgRE9fKDo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpTa2lwRmllbGQoaW5w
dXQsIHRhZykpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90
b2J1Zi5VSW50MzJWYWx1ZSkKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9idWYuVUludDMyVmFs
dWUpCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBET18KLX0KLQotdm9pZCBVSW50MzJWYWx1ZTo6
U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNv
ZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuVUludDMyVmFsdWUpCi0gIC8v
IG9wdGlvbmFsIHVpbnQzMiB2YWx1ZSA9IDE7Ci0gIGlmICh0aGlzLT52YWx1ZSgpICE9IDApIHsK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVV
SW50MzIoMSwgdGhpcy0+dmFsdWUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChzZXJpYWxpemVfZW5kOmdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZSkK
LX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogVUludDMyVmFsdWU6OlNlcmlhbGl6ZVdp
dGhDYWNoZWRTaXplc1RvQXJyYXkoCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogdGFy
Z2V0KSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9f
YXJyYXlfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlKQotICAvLyBvcHRpb25hbCB1
aW50MzIgdmFsdWUgPSAxOwotICBpZiAodGhpcy0+dmFsdWUoKSAhPSAwKSB7Ci0gICAgdGFyZ2V0
ID0gOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlVUlu
dDMyVG9BcnJheSgxLCB0aGlzLT52YWx1ZSgpLCB0YXJnZXQpOwotICB9Ci0KLSAgLy8gQEBwcm90
b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6Z29vZ2xlLnByb3RvYnVm
LlVJbnQzMlZhbHVlKQotICByZXR1cm4gdGFyZ2V0OwotfQotCi1pbnQgVUludDMyVmFsdWU6OkJ5
dGVTaXplKCkgY29uc3QgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0
ZV9zaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZSkKLSAgaW50IHRvdGFsX3Np
emUgPSAwOwotCi0gIC8vIG9wdGlvbmFsIHVpbnQzMiB2YWx1ZSA9IDE7Ci0gIGlmICh0aGlzLT52
YWx1ZSgpICE9IDApIHsKLSAgICB0b3RhbF9zaXplICs9IDEgKwotICAgICAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlVJbnQzMlNpemUoCi0gICAgICAgIHRo
aXMtPnZhbHVlKCkpOwotICB9Ci0KLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfQkVH
SU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHRvdGFsX3NpemU7Ci0gIEdPT0dMRV9TQUZFX0NPTkNV
UlJFTlRfV1JJVEVTX0VORCgpOwotICByZXR1cm4gdG90YWxfc2l6ZTsKLX0KLQotdm9pZCBVSW50
MzJWYWx1ZTo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJv
bSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21f
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlKQotICBpZiAoR09PR0xFX1BSRURJQ1Rf
RkFMU0UoJmZyb20gPT0gdGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBjb25zdCBV
SW50MzJWYWx1ZSogc291cmNlID0gCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpEeW5hbWljQ2FzdFRvR2VuZXJhdGVkPGNvbnN0IFVJbnQzMlZhbHVlPigKLSAgICAgICAgICAm
ZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25f
cG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVmLlVJ
bnQzMlZhbHVlKQotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OlJlZmxlY3Rpb25P
cHM6Ok1lcmdlKGZyb20sIHRoaXMpOwotICB9IGVsc2UgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X3N1Y2Nlc3M6Z29vZ2xlLnByb3Rv
YnVmLlVJbnQzMlZhbHVlKQotICAgIE1lcmdlRnJvbSgqc291cmNlKTsKLSAgfQotfQotCi12b2lk
IFVJbnQzMlZhbHVlOjpNZXJnZUZyb20oY29uc3QgVUludDMyVmFsdWUmIGZyb20pIHsKLS8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zcGVjaWZpY19tZXJnZV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZm
cm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAgaWYgKGZyb20udmFsdWUo
KSAhPSAwKSB7Ci0gICAgc2V0X3ZhbHVlKGZyb20udmFsdWUoKSk7Ci0gIH0KLX0KLQotdm9pZCBV
SW50MzJWYWx1ZTo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBm
cm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfY29weV9mcm9t
X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZSkKLSAgaWYgKCZmcm9tID09IHRoaXMp
IHJldHVybjsKLSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi12b2lkIFVJbnQz
MlZhbHVlOjpDb3B5RnJvbShjb25zdCBVSW50MzJWYWx1ZSYgZnJvbSkgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJv
dG9idWYuVUludDMyVmFsdWUpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFy
KCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotYm9vbCBVSW50MzJWYWx1ZTo6SXNJbml0aWFs
aXplZCgpIGNvbnN0IHsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBVSW50MzJWYWx1ZTo6
U3dhcChVSW50MzJWYWx1ZSogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRoaXMpIHJldHVybjsK
LSAgaWYgKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gb3RoZXItPkdldEFyZW5hTm9WaXJ0dWFsKCkp
IHsKLSAgICBJbnRlcm5hbFN3YXAob3RoZXIpOwotICB9IGVsc2UgewotICAgIFVJbnQzMlZhbHVl
IHRlbXA7Ci0gICAgdGVtcC5NZXJnZUZyb20oKnRoaXMpOwotICAgIENvcHlGcm9tKCpvdGhlcik7
Ci0gICAgb3RoZXItPkNvcHlGcm9tKHRlbXApOwotICB9Ci19Ci12b2lkIFVJbnQzMlZhbHVlOjpV
bnNhZmVBcmVuYVN3YXAoVUludDMyVmFsdWUqIG90aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlz
KSByZXR1cm47Ci0gIEdPT0dMRV9EQ0hFQ0soR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBvdGhlci0+
R2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gIEludGVybmFsU3dhcChvdGhlcik7Ci19Ci12b2lkIFVJ
bnQzMlZhbHVlOjpJbnRlcm5hbFN3YXAoVUludDMyVmFsdWUqIG90aGVyKSB7Ci0gIHN0ZDo6c3dh
cCh2YWx1ZV8sIG90aGVyLT52YWx1ZV8pOwotICBfaW50ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90
aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3RkOjpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90
aGVyLT5fY2FjaGVkX3NpemVfKTsKLX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBV
SW50MzJWYWx1ZTo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2Ny
aXB0b3JzT25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIG1ldGFkYXRhOwot
ICBtZXRhZGF0YS5kZXNjcmlwdG9yID0gVUludDMyVmFsdWVfZGVzY3JpcHRvcl87Ci0gIG1ldGFk
YXRhLnJlZmxlY3Rpb24gPSBVSW50MzJWYWx1ZV9yZWZsZWN0aW9uXzsKLSAgcmV0dXJuIG1ldGFk
YXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFERVJTCi0vLyBVSW50MzJW
YWx1ZQotCi0vLyBvcHRpb25hbCB1aW50MzIgdmFsdWUgPSAxOwotdm9pZCBVSW50MzJWYWx1ZTo6
Y2xlYXJfdmFsdWUoKSB7Ci0gIHZhbHVlXyA9IDB1OwotfQotIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
dWludDMyIFVJbnQzMlZhbHVlOjp2YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuVUludDMyVmFsdWUudmFsdWUpCi0g
IHJldHVybiB2YWx1ZV87Ci19Ci0gdm9pZCBVSW50MzJWYWx1ZTo6c2V0X3ZhbHVlKDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDMyIHZhbHVlKSB7Ci0gIAotICB2YWx1ZV8gPSB2YWx1ZTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuVUludDMy
VmFsdWUudmFsdWUpCi19Ci0KLSNlbmRpZiAgLy8gUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9IRUFE
RVJTCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZF
UiA+PSAxOTAwCi1jb25zdCBpbnQgQm9vbFZhbHVlOjprVmFsdWVGaWVsZE51bWJlcjsKLSNlbmRp
ZiAgLy8gIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotQm9vbFZhbHVl
OjpCb29sVmFsdWUoKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgpLCBfaW50ZXJu
YWxfbWV0YWRhdGFfKE5VTEwpIHsKLSAgU2hhcmVkQ3RvcigpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoY29uc3RydWN0b3I6Z29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZSkKLX0KLQot
Qm9vbFZhbHVlOjpCb29sVmFsdWUoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpCi0g
IDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0gIF9pbnRlcm5hbF9tZXRhZGF0YV8o
YXJlbmEpIHsKLSAgU2hhcmVkQ3RvcigpOwotICBSZWdpc3RlckFyZW5hRHRvcihhcmVuYSk7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChhcmVuYV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJv
dG9idWYuQm9vbFZhbHVlKQotfQotCi12b2lkIEJvb2xWYWx1ZTo6SW5pdEFzRGVmYXVsdEluc3Rh
bmNlKCkgewotICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSB0cnVlOwotfQotCi1Cb29sVmFsdWU6
OkJvb2xWYWx1ZShjb25zdCBCb29sVmFsdWUmIGZyb20pCi0gIDogOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlKCksCi0gICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0
b3IoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
Y29weV9jb25zdHJ1Y3Rvcjpnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlKQotfQotCi12b2lkIEJv
b2xWYWx1ZTo6U2hhcmVkQ3RvcigpIHsKLSAgICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSBmYWxz
ZTsKLSAgX2NhY2hlZF9zaXplXyA9IDA7Ci0gIHZhbHVlXyA9IGZhbHNlOwotfQotCi1Cb29sVmFs
dWU6On5Cb29sVmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChkZXN0cnVj
dG9yOmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUpCi0gIFNoYXJlZER0b3IoKTsKLX0KLQotdm9p
ZCBCb29sVmFsdWU6OlNoYXJlZER0b3IoKSB7Ci0gIGlmIChHZXRBcmVuYU5vVmlydHVhbCgpICE9
IE5VTEwpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3Rh
bmNlXykgewotICB9Ci19Ci0KLXZvaWQgQm9vbFZhbHVlOjpBcmVuYUR0b3Iodm9pZCogb2JqZWN0
KSB7Ci0gIEJvb2xWYWx1ZSogX3RoaXMgPSByZWludGVycHJldF9jYXN0PCBCb29sVmFsdWUqID4o
b2JqZWN0KTsKLSAgKHZvaWQpX3RoaXM7Ci19Ci12b2lkIEJvb2xWYWx1ZTo6UmVnaXN0ZXJBcmVu
YUR0b3IoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIHsKLX0KLXZvaWQgQm9vbFZh
bHVlOjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NPTkNV
UlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09HTEVf
U0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6RGVzY3JpcHRvciogQm9vbFZhbHVlOjpkZXNjcmlwdG9yKCkgewotICBwcm90b2J1Zl9Bc3Np
Z25EZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIEJvb2xWYWx1ZV9kZXNjcmlwdG9yXzsKLX0K
LQotY29uc3QgQm9vbFZhbHVlJiBCb29sVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlm
IChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnBy
b3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotICByZXR1cm4gKmRlZmF1bHRfaW5zdGFuY2Vf
OwotfQotCi1Cb29sVmFsdWUqIEJvb2xWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5jZV8gPSBOVUxMOwot
Ci1Cb29sVmFsdWUqIEJvb2xWYWx1ZTo6TmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFy
ZW5hKSBjb25zdCB7Ci0gIHJldHVybiA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOjpDcmVhdGVN
ZXNzYWdlPEJvb2xWYWx1ZT4oYXJlbmEpOwotfQotCi12b2lkIEJvb2xWYWx1ZTo6Q2xlYXIoKSB7
Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpnb29nbGUu
cHJvdG9idWYuQm9vbFZhbHVlKQotICB2YWx1ZV8gPSBmYWxzZTsKLX0KLQotYm9vbCBCb29sVmFs
dWU6Ok1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQUkVTU0lPTikg
aWYgKCFHT09HTEVfUFJFRElDVF9UUlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1cmUKLSAgOjpn
b29nbGU6OnByb3RvYnVmOjp1aW50MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQocGFyc2Vfc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZSkKLSAgZm9yICg7Oykgewot
ICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9IGlu
cHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAgaWYg
KCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0YWcp
KSB7Ci0gICAgICAvLyBvcHRpb25hbCBib29sIHZhbHVlID0gMTsKLSAgICAgIGNhc2UgMTogewot
ICAgICAgICBpZiAodGFnID09IDgpIHsKLSAgICAgICAgICBET18oKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpSZWFkUHJpbWl0aXZlPAotICAgICAgICAgICAg
ICAgICAgIGJvb2wsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRl
OjpUWVBFX0JPT0w+KAotICAgICAgICAgICAgICAgICBpbnB1dCwgJnZhbHVlXykpKTsKLQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGdvdG8gaGFuZGxlX3VudXN1YWw7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGlucHV0LT5FeHBlY3RBdEVuZCgpKSBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiB7Ci0gICAgICBoYW5kbGVfdW51c3Vh
bDoKLSAgICAgICAgaWYgKHRhZyA9PSAwIHx8Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnV2lyZVR5cGUodGFnKSA9PQotICAg
ICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldJ
UkVUWVBFX0VORF9HUk9VUCkgewotICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQot
ICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6
OlNraXBGaWVsZChpbnB1dCwgdGFnKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0K
LSAgfQotc3VjY2VzczoKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHBhcnNlX3N1Y2Nl
c3M6Z29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZSkKLSAgcmV0dXJuIHRydWU7Ci1mYWlsdXJlOgot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVyZTpnb29nbGUucHJvdG9i
dWYuQm9vbFZhbHVlKQotICByZXR1cm4gZmFsc2U7Ci0jdW5kZWYgRE9fCi19Ci0KLXZvaWQgQm9v
bFZhbHVlOjpTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgOjpnb29nbGU6OnByb3RvYnVm
Ojppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3QgewotICAvLyBAQHByb3RvY19p
bnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUp
Ci0gIC8vIG9wdGlvbmFsIGJvb2wgdmFsdWUgPSAxOwotICBpZiAodGhpcy0+dmFsdWUoKSAhPSAw
KSB7Ci0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Oldy
aXRlQm9vbCgxLCB0aGlzLT52YWx1ZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZSkK
LX0KLQotOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogQm9vbFZhbHVlOjpTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdl
dCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2Fy
cmF5X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUpCi0gIC8vIG9wdGlvbmFsIGJvb2wg
dmFsdWUgPSAxOwotICBpZiAodGhpcy0+dmFsdWUoKSAhPSAwKSB7Ci0gICAgdGFyZ2V0ID0gOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OldyaXRlQm9vbFRvQXJy
YXkoMSwgdGhpcy0+dmFsdWUoKSwgdGFyZ2V0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChzZXJpYWxpemVfdG9fYXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFs
dWUpCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBCb29sVmFsdWU6OkJ5dGVTaXplKCkgY29u
c3QgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG1lc3NhZ2VfYnl0ZV9zaXplX3N0YXJ0
Omdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUpCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICAv
LyBvcHRpb25hbCBib29sIHZhbHVlID0gMTsKLSAgaWYgKHRoaXMtPnZhbHVlKCkgIT0gMCkgewot
ICAgIHRvdGFsX3NpemUgKz0gMSArIDE7Ci0gIH0KLQotICBHT09HTEVfU0FGRV9DT05DVVJSRU5U
X1dSSVRFU19CRUdJTigpOwotICBfY2FjaGVkX3NpemVfID0gdG90YWxfc2l6ZTsKLSAgR09PR0xF
X1NBRkVfQ09OQ1VSUkVOVF9XUklURVNfRU5EKCk7Ci0gIHJldHVybiB0b3RhbF9zaXplOwotfQot
Ci12b2lkIEJvb2xWYWx1ZTo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21l
cmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZSkKLSAgaWYgKEdPT0dMRV9Q
UkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJnZUZyb21GYWlsKF9fTElORV9fKTsKLSAg
Y29uc3QgQm9vbFZhbHVlKiBzb3VyY2UgPSAKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50
ZXJuYWw6OkR5bmFtaWNDYXN0VG9HZW5lcmF0ZWQ8Y29uc3QgQm9vbFZhbHVlPigKLSAgICAgICAg
ICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xlLnByb3RvYnVm
LkJvb2xWYWx1ZSkKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9u
T3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0
aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90
b2J1Zi5Cb29sVmFsdWUpCi0gICAgTWVyZ2VGcm9tKCpzb3VyY2UpOwotICB9Ci19Ci0KLXZvaWQg
Qm9vbFZhbHVlOjpNZXJnZUZyb20oY29uc3QgQm9vbFZhbHVlJiBmcm9tKSB7Ci0vLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUu
cHJvdG9idWYuQm9vbFZhbHVlKQotICBpZiAoR09PR0xFX1BSRURJQ1RfRkFMU0UoJmZyb20gPT0g
dGhpcykpIE1lcmdlRnJvbUZhaWwoX19MSU5FX18pOwotICBpZiAoZnJvbS52YWx1ZSgpICE9IDAp
IHsKLSAgICBzZXRfdmFsdWUoZnJvbS52YWx1ZSgpKTsKLSAgfQotfQotCi12b2lkIEJvb2xWYWx1
ZTo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlJiBmcm9tKSB7Ci0v
LyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfY29weV9mcm9tX3N0YXJ0Omdv
b2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0g
IENsZWFyKCk7Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBCb29sVmFsdWU6OkNvcHlG
cm9tKGNvbnN0IEJvb2xWYWx1ZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuQm9vbFZhbHVl
KQotICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20o
ZnJvbSk7Ci19Ci0KLWJvb2wgQm9vbFZhbHVlOjpJc0luaXRpYWxpemVkKCkgY29uc3QgewotCi0g
IHJldHVybiB0cnVlOwotfQotCi12b2lkIEJvb2xWYWx1ZTo6U3dhcChCb29sVmFsdWUqIG90aGVy
KSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIGlmIChHZXRBcmVuYU5vVmlydHVh
bCgpID09IG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKSB7Ci0gICAgSW50ZXJuYWxTd2FwKG90
aGVyKTsKLSAgfSBlbHNlIHsKLSAgICBCb29sVmFsdWUgdGVtcDsKLSAgICB0ZW1wLk1lcmdlRnJv
bSgqdGhpcyk7Ci0gICAgQ29weUZyb20oKm90aGVyKTsKLSAgICBvdGhlci0+Q29weUZyb20odGVt
cCk7Ci0gIH0KLX0KLXZvaWQgQm9vbFZhbHVlOjpVbnNhZmVBcmVuYVN3YXAoQm9vbFZhbHVlKiBv
dGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBHT09HTEVfRENIRUNLKEdl
dEFyZW5hTm9WaXJ0dWFsKCkgPT0gb3RoZXItPkdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICBJbnRl
cm5hbFN3YXAob3RoZXIpOwotfQotdm9pZCBCb29sVmFsdWU6OkludGVybmFsU3dhcChCb29sVmFs
dWUqIG90aGVyKSB7Ci0gIHN0ZDo6c3dhcCh2YWx1ZV8sIG90aGVyLT52YWx1ZV8pOwotICBfaW50
ZXJuYWxfbWV0YWRhdGFfLlN3YXAoJm90aGVyLT5faW50ZXJuYWxfbWV0YWRhdGFfKTsKLSAgc3Rk
Ojpzd2FwKF9jYWNoZWRfc2l6ZV8sIG90aGVyLT5fY2FjaGVkX3NpemVfKTsKLX0KLQotOjpnb29n
bGU6OnByb3RvYnVmOjpNZXRhZGF0YSBCb29sVmFsdWU6OkdldE1ldGFkYXRhKCkgY29uc3Qgewot
ICBwcm90b2J1Zl9Bc3NpZ25EZXNjcmlwdG9yc09uY2UoKTsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXRhZGF0YSBtZXRhZGF0YTsKLSAgbWV0YWRhdGEuZGVzY3JpcHRvciA9IEJvb2xWYWx1ZV9k
ZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IEJvb2xWYWx1ZV9yZWZsZWN0aW9u
XzsKLSAgcmV0dXJuIG1ldGFkYXRhOwotfQotCi0jaWYgUFJPVE9CVUZfSU5MSU5FX05PVF9JTl9I
RUFERVJTCi0vLyBCb29sVmFsdWUKLQotLy8gb3B0aW9uYWwgYm9vbCB2YWx1ZSA9IDE7Ci12b2lk
IEJvb2xWYWx1ZTo6Y2xlYXJfdmFsdWUoKSB7Ci0gIHZhbHVlXyA9IGZhbHNlOwotfQotIGJvb2wg
Qm9vbFZhbHVlOjp2YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlLnZhbHVlKQotICByZXR1cm4gdmFs
dWVfOwotfQotIHZvaWQgQm9vbFZhbHVlOjpzZXRfdmFsdWUoYm9vbCB2YWx1ZSkgewotICAKLSAg
dmFsdWVfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6
Z29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZS52YWx1ZSkKLX0KLQotI2VuZGlmICAvLyBQUk9UT0JV
Rl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWYgIWRlZmluZWQo
X01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBTdHJpbmdWYWx1ZTo6a1Zh
bHVlRmllbGROdW1iZXI7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZF
UiA+PSAxOTAwCi0KLVN0cmluZ1ZhbHVlOjpTdHJpbmdWYWx1ZSgpCi0gIDogOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRD
dG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb25zdHJ1Y3Rvcjpnb29nbGUu
cHJvdG9idWYuU3RyaW5nVmFsdWUpCi19Ci0KLVN0cmluZ1ZhbHVlOjpTdHJpbmdWYWx1ZSg6Omdv
b2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkKLSAgOiA6Omdvb2dsZTo6cHJvdG9idWY6Ok1l
c3NhZ2UoKSwKLSAgX2ludGVybmFsX21ldGFkYXRhXyhhcmVuYSkgewotICBTaGFyZWRDdG9yKCk7
Ci0gIFJlZ2lzdGVyQXJlbmFEdG9yKGFyZW5hKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGFyZW5hX2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSkKLX0KLQot
dm9pZCBTdHJpbmdWYWx1ZTo6SW5pdEFzRGVmYXVsdEluc3RhbmNlKCkgewotICBfaXNfZGVmYXVs
dF9pbnN0YW5jZV8gPSB0cnVlOwotfQotCi1TdHJpbmdWYWx1ZTo6U3RyaW5nVmFsdWUoY29uc3Qg
U3RyaW5nVmFsdWUmIGZyb20pCi0gIDogOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksCi0g
ICAgX2ludGVybmFsX21ldGFkYXRhXyhOVUxMKSB7Ci0gIFNoYXJlZEN0b3IoKTsKLSAgTWVyZ2VG
cm9tKGZyb20pOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY29weV9jb25zdHJ1Y3Rv
cjpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUpCi19Ci0KLXZvaWQgU3RyaW5nVmFsdWU6OlNo
YXJlZEN0b3IoKSB7Ci0gICAgX2lzX2RlZmF1bHRfaW5zdGFuY2VfID0gZmFsc2U7Ci0gIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nKCk7Ci0gIF9jYWNoZWRfc2l6
ZV8gPSAwOwotICB2YWx1ZV8uVW5zYWZlU2V0RGVmYXVsdCgmOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCkpOwotfQotCi1TdHJpbmdWYWx1
ZTo6flN0cmluZ1ZhbHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1
Y3Rvcjpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUpCi0gIFNoYXJlZER0b3IoKTsKLX0KLQot
dm9pZCBTdHJpbmdWYWx1ZTo6U2hhcmVkRHRvcigpIHsKLSAgaWYgKEdldEFyZW5hTm9WaXJ0dWFs
KCkgIT0gTlVMTCkgewotICAgIHJldHVybjsKLSAgfQotCi0gIHZhbHVlXy5EZXN0cm95KCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwg
R2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gIGlmICh0aGlzICE9IGRlZmF1bHRfaW5zdGFuY2VfKSB7
Ci0gIH0KLX0KLQotdm9pZCBTdHJpbmdWYWx1ZTo6QXJlbmFEdG9yKHZvaWQqIG9iamVjdCkgewot
ICBTdHJpbmdWYWx1ZSogX3RoaXMgPSByZWludGVycHJldF9jYXN0PCBTdHJpbmdWYWx1ZSogPihv
YmplY3QpOwotICAodm9pZClfdGhpczsKLX0KLXZvaWQgU3RyaW5nVmFsdWU6OlJlZ2lzdGVyQXJl
bmFEdG9yKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSB7Ci19Ci12b2lkIFN0cmlu
Z1ZhbHVlOjpTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdCB7Ci0gIEdPT0dMRV9TQUZFX0NP
TkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSBzaXplOwotICBHT09H
TEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLX0KLWNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6RGVzY3JpcHRvciogU3RyaW5nVmFsdWU6OmRlc2NyaXB0b3IoKSB7Ci0gIHByb3RvYnVm
X0Fzc2lnbkRlc2NyaXB0b3JzT25jZSgpOwotICByZXR1cm4gU3RyaW5nVmFsdWVfZGVzY3JpcHRv
cl87Ci19Ci0KLWNvbnN0IFN0cmluZ1ZhbHVlJiBTdHJpbmdWYWx1ZTo6ZGVmYXVsdF9pbnN0YW5j
ZSgpIHsKLSAgaWYgKGRlZmF1bHRfaW5zdGFuY2VfID09IE5VTEwpIHByb3RvYnVmX0FkZERlc2Nf
Z29vZ2xlXzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7Ci0gIHJldHVybiAqZGVmYXVs
dF9pbnN0YW5jZV87Ci19Ci0KLVN0cmluZ1ZhbHVlKiBTdHJpbmdWYWx1ZTo6ZGVmYXVsdF9pbnN0
YW5jZV8gPSBOVUxMOwotCi1TdHJpbmdWYWx1ZSogU3RyaW5nVmFsdWU6Ok5ldyg6Omdvb2dsZTo6
cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkgY29uc3QgewotICByZXR1cm4gOjpnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYTo6Q3JlYXRlTWVzc2FnZTxTdHJpbmdWYWx1ZT4oYXJlbmEpOwotfQotCi12b2lk
IFN0cmluZ1ZhbHVlOjpDbGVhcigpIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChtZXNz
YWdlX2NsZWFyX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSkKLSAgdmFsdWVfLkNs
ZWFyVG9FbXB0eSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCksIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotfQotCi1ib29sIFN0cmluZ1Zh
bHVlOjpNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgOjpnb29nbGU6OnByb3RvYnVm
Ojppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpIHsKLSNkZWZpbmUgRE9fKEVYUFJFU1NJT04p
IGlmICghR09PR0xFX1BSRURJQ1RfVFJVRShFWFBSRVNTSU9OKSkgZ290byBmYWlsdXJlCi0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6dWludDMyIHRhZzsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KHBhcnNlX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSkKLSAgZm9yICg7Oykg
ewotICAgIDo6c3RkOjpwYWlyPCA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQzMiwgYm9vbD4gcCA9
IGlucHV0LT5SZWFkVGFnV2l0aEN1dG9mZigxMjcpOwotICAgIHRhZyA9IHAuZmlyc3Q7Ci0gICAg
aWYgKCFwLnNlY29uZCkgZ290byBoYW5kbGVfdW51c3VhbDsKLSAgICBzd2l0Y2ggKDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdGaWVsZE51bWJlcih0
YWcpKSB7Ci0gICAgICAvLyBvcHRpb25hbCBzdHJpbmcgdmFsdWUgPSAxOwotICAgICAgY2FzZSAx
OiB7Ci0gICAgICAgIGlmICh0YWcgPT0gMTApIHsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlJlYWRTdHJpbmcoCi0gICAgICAgICAg
ICAgICAgaW5wdXQsIHRoaXMtPm11dGFibGVfdmFsdWUoKSkpOwotICAgICAgICAgIERPXyg6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmlu
ZygKLSAgICAgICAgICAgIHRoaXMtPnZhbHVlKCkuZGF0YSgpLCB0aGlzLT52YWx1ZSgpLmxlbmd0
aCgpLAotICAgICAgICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OlBBUlNFLAotICAgICAgICAgICAgImdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZS52
YWx1ZSIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIGhhbmRsZV91bnVzdWFs
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnB1dC0+RXhwZWN0QXRFbmQoKSkgZ290byBzdWNj
ZXNzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDogewotICAgICAg
aGFuZGxlX3VudXN1YWw6Ci0gICAgICAgIGlmICh0YWcgPT0gMCB8fAotICAgICAgICAgICAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OkdldFRhZ1dpcmVUeXBl
KHRhZykgPT0KLSAgICAgICAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVG
b3JtYXRMaXRlOjpXSVJFVFlQRV9FTkRfR1JPVVApIHsKLSAgICAgICAgICBnb3RvIHN1Y2Nlc3M7
Ci0gICAgICAgIH0KLSAgICAgICAgRE9fKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6Oldp
cmVGb3JtYXRMaXRlOjpTa2lwRmllbGQoaW5wdXQsIHRhZykpOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLXN1Y2Nlc3M6Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChwYXJzZV9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSkKLSAgcmV0dXJuIHRy
dWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2VfZmFpbHVy
ZTpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUpCi0gIHJldHVybiBmYWxzZTsKLSN1bmRlZiBE
T18KLX0KLQotdm9pZCBTdHJpbmdWYWx1ZTo6U2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAg
IDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9zdGFydDpnb29nbGUu
cHJvdG9idWYuU3RyaW5nVmFsdWUpCi0gIC8vIG9wdGlvbmFsIHN0cmluZyB2YWx1ZSA9IDE7Ci0g
IGlmICh0aGlzLT52YWx1ZSgpLnNpemUoKSA+IDApIHsKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0cmluZygKLSAgICAgIHRoaXMt
PnZhbHVlKCkuZGF0YSgpLCB0aGlzLT52YWx1ZSgpLmxlbmd0aCgpLAotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNFUklBTElaRSwKLSAgICAgICJn
b29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUudmFsdWUiKTsKLSAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6V3JpdGVTdHJpbmdNYXliZUFsaWFzZWQoCi0g
ICAgICAxLCB0aGlzLT52YWx1ZSgpLCBvdXRwdXQpOwotICB9Ci0KLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV9lbmQ6Z29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlKQot
fQotCi06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTdHJpbmdWYWx1ZTo6U2VyaWFsaXplV2l0
aENhY2hlZFNpemVzVG9BcnJheSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiB0YXJn
ZXQpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19h
cnJheV9zdGFydDpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUpCi0gIC8vIG9wdGlvbmFsIHN0
cmluZyB2YWx1ZSA9IDE7Ci0gIGlmICh0aGlzLT52YWx1ZSgpLnNpemUoKSA+IDApIHsKLSAgICA6
Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6VmVyaWZ5VXRmOFN0
cmluZygKLSAgICAgIHRoaXMtPnZhbHVlKCkuZGF0YSgpLCB0aGlzLT52YWx1ZSgpLmxlbmd0aCgp
LAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6OlNF
UklBTElaRSwKLSAgICAgICJnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUudmFsdWUiKTsKLSAg
ICB0YXJnZXQgPQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1h
dExpdGU6OldyaXRlU3RyaW5nVG9BcnJheSgKLSAgICAgICAgMSwgdGhpcy0+dmFsdWUoKSwgdGFy
Z2V0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfdG9f
YXJyYXlfZW5kOmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSkKLSAgcmV0dXJuIHRhcmdldDsK
LX0KLQotaW50IFN0cmluZ1ZhbHVlOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuU3Ry
aW5nVmFsdWUpCi0gIGludCB0b3RhbF9zaXplID0gMDsKLQotICAvLyBvcHRpb25hbCBzdHJpbmcg
dmFsdWUgPSAxOwotICBpZiAodGhpcy0+dmFsdWUoKS5zaXplKCkgPiAwKSB7Ci0gICAgdG90YWxf
c2l6ZSArPSAxICsKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3Jt
YXRMaXRlOjpTdHJpbmdTaXplKAotICAgICAgICB0aGlzLT52YWx1ZSgpKTsKLSAgfQotCi0gIEdP
T0dMRV9TQUZFX0NPTkNVUlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSB0
b3RhbF9zaXplOwotICBHT09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLSAgcmV0
dXJuIHRvdGFsX3NpemU7Ci19Ci0KLXZvaWQgU3RyaW5nVmFsdWU6Ok1lcmdlRnJvbShjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5TdHJp
bmdWYWx1ZSkKLSAgaWYgKEdPT0dMRV9QUkVESUNUX0ZBTFNFKCZmcm9tID09IHRoaXMpKSBNZXJn
ZUZyb21GYWlsKF9fTElORV9fKTsKLSAgY29uc3QgU3RyaW5nVmFsdWUqIHNvdXJjZSA9IAotICAg
ICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxj
b25zdCBTdHJpbmdWYWx1ZT4oCi0gICAgICAgICAgJmZyb20pOwotICBpZiAoc291cmNlID09IE5V
TEwpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdlX2Zy
b21fY2FzdF9mYWlsOmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSkKLSAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmludGVybmFsOjpSZWZsZWN0aW9uT3BzOjpNZXJnZShmcm9tLCB0aGlzKTsKLSAg
fSBlbHNlIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX21lcmdl
X2Zyb21fY2FzdF9zdWNjZXNzOmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSkKLSAgICBNZXJn
ZUZyb20oKnNvdXJjZSk7Ci0gIH0KLX0KLQotdm9pZCBTdHJpbmdWYWx1ZTo6TWVyZ2VGcm9tKGNv
bnN0IFN0cmluZ1ZhbHVlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xh
c3Nfc3BlY2lmaWNfbWVyZ2VfZnJvbV9zdGFydDpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUp
Ci0gIGlmIChHT09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFp
bChfX0xJTkVfXyk7Ci0gIGlmIChmcm9tLnZhbHVlKCkuc2l6ZSgpID4gMCkgewotICAgIHNldF92
YWx1ZShmcm9tLnZhbHVlKCkpOwotICB9Ci19Ci0KLXZvaWQgU3RyaW5nVmFsdWU6OkNvcHlGcm9t
KGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2Nf
aW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxpemVkX2NvcHlfZnJvbV9zdGFydDpnb29nbGUucHJvdG9i
dWYuU3RyaW5nVmFsdWUpCi0gIGlmICgmZnJvbSA9PSB0aGlzKSByZXR1cm47Ci0gIENsZWFyKCk7
Ci0gIE1lcmdlRnJvbShmcm9tKTsKLX0KLQotdm9pZCBTdHJpbmdWYWx1ZTo6Q29weUZyb20oY29u
c3QgU3RyaW5nVmFsdWUmIGZyb20pIHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFz
c19zcGVjaWZpY19jb3B5X2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlKQot
ICBpZiAoJmZyb20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJv
bSk7Ci19Ci0KLWJvb2wgU3RyaW5nVmFsdWU6OklzSW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3RyaW5nVmFsdWU6OlN3YXAoU3RyaW5nVmFsdWUqIG90
aGVyKSB7Ci0gIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47Ci0gIGlmIChHZXRBcmVuYU5vVmly
dHVhbCgpID09IG90aGVyLT5HZXRBcmVuYU5vVmlydHVhbCgpKSB7Ci0gICAgSW50ZXJuYWxTd2Fw
KG90aGVyKTsKLSAgfSBlbHNlIHsKLSAgICBTdHJpbmdWYWx1ZSB0ZW1wOwotICAgIHRlbXAuTWVy
Z2VGcm9tKCp0aGlzKTsKLSAgICBDb3B5RnJvbSgqb3RoZXIpOwotICAgIG90aGVyLT5Db3B5RnJv
bSh0ZW1wKTsKLSAgfQotfQotdm9pZCBTdHJpbmdWYWx1ZTo6VW5zYWZlQXJlbmFTd2FwKFN0cmlu
Z1ZhbHVlKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOwotICBHT09HTEVf
RENIRUNLKEdldEFyZW5hTm9WaXJ0dWFsKCkgPT0gb3RoZXItPkdldEFyZW5hTm9WaXJ0dWFsKCkp
OwotICBJbnRlcm5hbFN3YXAob3RoZXIpOwotfQotdm9pZCBTdHJpbmdWYWx1ZTo6SW50ZXJuYWxT
d2FwKFN0cmluZ1ZhbHVlKiBvdGhlcikgewotICB2YWx1ZV8uU3dhcCgmb3RoZXItPnZhbHVlXyk7
Ci0gIF9pbnRlcm5hbF9tZXRhZGF0YV8uU3dhcCgmb3RoZXItPl9pbnRlcm5hbF9tZXRhZGF0YV8p
OwotICBzdGQ6OnN3YXAoX2NhY2hlZF9zaXplXywgb3RoZXItPl9jYWNoZWRfc2l6ZV8pOwotfQot
Ci06Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIFN0cmluZ1ZhbHVlOjpHZXRNZXRhZGF0YSgp
IGNvbnN0IHsKLSAgcHJvdG9idWZfQXNzaWduRGVzY3JpcHRvcnNPbmNlKCk7Ci0gIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6TWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmRlc2NyaXB0b3IgPSBT
dHJpbmdWYWx1ZV9kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVmbGVjdGlvbiA9IFN0cmluZ1Zh
bHVlX3JlZmxlY3Rpb25fOwotICByZXR1cm4gbWV0YWRhdGE7Ci19Ci0KLSNpZiBQUk9UT0JVRl9J
TkxJTkVfTk9UX0lOX0hFQURFUlMKLS8vIFN0cmluZ1ZhbHVlCi0KLS8vIG9wdGlvbmFsIHN0cmlu
ZyB2YWx1ZSA9IDE7Ci12b2lkIFN0cmluZ1ZhbHVlOjpjbGVhcl92YWx1ZSgpIHsKLSAgdmFsdWVf
LkNsZWFyVG9FbXB0eSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJp
bmdBbHJlYWR5SW5pdGVkKCksIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotfQotIGNvbnN0IDo6c3Rk
OjpzdHJpbmcmIFN0cmluZ1ZhbHVlOjp2YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUudmFsdWUp
Ci0gIHJldHVybiB2YWx1ZV8uR2V0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBTdHJpbmdWYWx1ZTo6c2V0X3Zh
bHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIAotICB2YWx1ZV8uU2V0KCY6Omdv
b2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwg
dmFsdWUsIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoZmllbGRfc2V0Omdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZS52YWx1ZSkKLX0KLSB2b2lk
IFN0cmluZ1ZhbHVlOjpzZXRfdmFsdWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAgCi0gIHZhbHVl
Xy5TZXQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSwKLSAgICAgICAgICAgICAgR2V0QXJlbmFO
b1ZpcnR1YWwoKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfY2hh
cjpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUudmFsdWUpCi19Ci0gdm9pZCBTdHJpbmdWYWx1
ZTo6c2V0X3ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlLAotICAgIHNpemVfdCBzaXplKSB7Ci0gIAot
ICB2YWx1ZV8uU2V0KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgOjpzdGQ6OnN0cmluZygKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZSksIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVm
LlN0cmluZ1ZhbHVlLnZhbHVlKQotfQotIDo6c3RkOjpzdHJpbmcqIFN0cmluZ1ZhbHVlOjptdXRh
YmxlX3ZhbHVlKCkgewotICAKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX211
dGFibGU6Z29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlLnZhbHVlKQotICByZXR1cm4gdmFsdWVf
Lk11dGFibGUoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxy
ZWFkeUluaXRlZCgpLCBHZXRBcmVuYU5vVmlydHVhbCgpKTsKLX0KLSA6OnN0ZDo6c3RyaW5nKiBT
dHJpbmdWYWx1ZTo6cmVsZWFzZV92YWx1ZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlLnZhbHVlKQotICAK
LSAgcmV0dXJuIHZhbHVlXy5SZWxlYXNlKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpH
ZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci19Ci0g
OjpzdGQ6OnN0cmluZyogU3RyaW5nVmFsdWU6OnVuc2FmZV9hcmVuYV9yZWxlYXNlX3ZhbHVlKCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfdW5zYWZlX2FyZW5hX3JlbGVh
c2U6Z29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlLnZhbHVlKQotICBHT09HTEVfRENIRUNLKEdl
dEFyZW5hTm9WaXJ0dWFsKCkgIT0gTlVMTCk7Ci0gIAotICByZXR1cm4gdmFsdWVfLlVuc2FmZUFy
ZW5hUmVsZWFzZSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCksCi0gICAgICBHZXRBcmVuYU5vVmlydHVhbCgpKTsKLX0KLSB2b2lkIFN0
cmluZ1ZhbHVlOjpzZXRfYWxsb2NhdGVkX3ZhbHVlKDo6c3RkOjpzdHJpbmcqIHZhbHVlKSB7Ci0g
IGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAgdmFs
dWVfLlNldEFsbG9jYXRlZCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlLAotICAgICAgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7
Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfYWxsb2NhdGVkOmdvb2ds
ZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZS52YWx1ZSkKLX0KLSB2b2lkIFN0cmluZ1ZhbHVlOjp1bnNh
ZmVfYXJlbmFfc2V0X2FsbG9jYXRlZF92YWx1ZSgKLSAgICA6OnN0ZDo6c3RyaW5nKiB2YWx1ZSkg
ewotICBHT09HTEVfRENIRUNLKEdldEFyZW5hTm9WaXJ0dWFsKCkgIT0gTlVMTCk7Ci0gIGlmICh2
YWx1ZSAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAgdmFsdWVfLlVu
c2FmZUFyZW5hU2V0QWxsb2NhdGVkKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRF
bXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIHZhbHVlLCBHZXRBcmVuYU5vVmlydHVh
bCgpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Vuc2FmZV9hcmVuYV9z
ZXRfYWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZS52YWx1ZSkKLX0KLQotI2Vu
ZGlmICAvLyBQUk9UT0JVRl9JTkxJTkVfTk9UX0lOX0hFQURFUlMKLQotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ci0jaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLWNvbnN0IGludCBC
eXRlc1ZhbHVlOjprVmFsdWVGaWVsZE51bWJlcjsKLSNlbmRpZiAgLy8gIWRlZmluZWQoX01TQ19W
RVIpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotQnl0ZXNWYWx1ZTo6Qnl0ZXNWYWx1ZSgpCi0gIDog
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlKCksIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkg
ewotICBTaGFyZWRDdG9yKCk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjb25zdHJ1
Y3Rvcjpnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSkKLX0KLQotQnl0ZXNWYWx1ZTo6Qnl0ZXNW
YWx1ZSg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSkKLSAgOiA6Omdvb2dsZTo6cHJv
dG9idWY6Ok1lc3NhZ2UoKSwKLSAgX2ludGVybmFsX21ldGFkYXRhXyhhcmVuYSkgewotICBTaGFy
ZWRDdG9yKCk7Ci0gIFJlZ2lzdGVyQXJlbmFEdG9yKGFyZW5hKTsKLSAgLy8gQEBwcm90b2NfaW5z
ZXJ0aW9uX3BvaW50KGFyZW5hX2NvbnN0cnVjdG9yOmdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVl
KQotfQotCi12b2lkIEJ5dGVzVmFsdWU6OkluaXRBc0RlZmF1bHRJbnN0YW5jZSgpIHsKLSAgX2lz
X2RlZmF1bHRfaW5zdGFuY2VfID0gdHJ1ZTsKLX0KLQotQnl0ZXNWYWx1ZTo6Qnl0ZXNWYWx1ZShj
b25zdCBCeXRlc1ZhbHVlJiBmcm9tKQotICA6IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSgp
LAotICAgIF9pbnRlcm5hbF9tZXRhZGF0YV8oTlVMTCkgewotICBTaGFyZWRDdG9yKCk7Ci0gIE1l
cmdlRnJvbShmcm9tKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNvcHlfY29uc3Ry
dWN0b3I6Z29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUpCi19Ci0KLXZvaWQgQnl0ZXNWYWx1ZTo6
U2hhcmVkQ3RvcigpIHsKLSAgICBfaXNfZGVmYXVsdF9pbnN0YW5jZV8gPSBmYWxzZTsKLSAgOjpn
b29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmcoKTsKLSAgX2NhY2hlZF9z
aXplXyA9IDA7Ci0gIHZhbHVlXy5VbnNhZmVTZXREZWZhdWx0KCY6Omdvb2dsZTo6cHJvdG9idWY6
OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0KLUJ5dGVzVmFs
dWU6On5CeXRlc1ZhbHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZGVzdHJ1
Y3Rvcjpnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSkKLSAgU2hhcmVkRHRvcigpOwotfQotCi12
b2lkIEJ5dGVzVmFsdWU6OlNoYXJlZER0b3IoKSB7Ci0gIGlmIChHZXRBcmVuYU5vVmlydHVhbCgp
ICE9IE5VTEwpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICB2YWx1ZV8uRGVzdHJveSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIEdl
dEFyZW5hTm9WaXJ0dWFsKCkpOwotICBpZiAodGhpcyAhPSBkZWZhdWx0X2luc3RhbmNlXykgewot
ICB9Ci19Ci0KLXZvaWQgQnl0ZXNWYWx1ZTo6QXJlbmFEdG9yKHZvaWQqIG9iamVjdCkgewotICBC
eXRlc1ZhbHVlKiBfdGhpcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8IEJ5dGVzVmFsdWUqID4ob2JqZWN0
KTsKLSAgKHZvaWQpX3RoaXM7Ci19Ci12b2lkIEJ5dGVzVmFsdWU6OlJlZ2lzdGVyQXJlbmFEdG9y
KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSB7Ci19Ci12b2lkIEJ5dGVzVmFsdWU6
OlNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0IHsKLSAgR09PR0xFX1NBRkVfQ09OQ1VSUkVO
VF9XUklURVNfQkVHSU4oKTsKLSAgX2NhY2hlZF9zaXplXyA9IHNpemU7Ci0gIEdPT0dMRV9TQUZF
X0NPTkNVUlJFTlRfV1JJVEVTX0VORCgpOwotfQotY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpE
ZXNjcmlwdG9yKiBCeXRlc1ZhbHVlOjpkZXNjcmlwdG9yKCkgewotICBwcm90b2J1Zl9Bc3NpZ25E
ZXNjcmlwdG9yc09uY2UoKTsKLSAgcmV0dXJuIEJ5dGVzVmFsdWVfZGVzY3JpcHRvcl87Ci19Ci0K
LWNvbnN0IEJ5dGVzVmFsdWUmIEJ5dGVzVmFsdWU6OmRlZmF1bHRfaW5zdGFuY2UoKSB7Ci0gIGlm
IChkZWZhdWx0X2luc3RhbmNlXyA9PSBOVUxMKSBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnBy
b3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotICByZXR1cm4gKmRlZmF1bHRfaW5zdGFuY2Vf
OwotfQotCi1CeXRlc1ZhbHVlKiBCeXRlc1ZhbHVlOjpkZWZhdWx0X2luc3RhbmNlXyA9IE5VTEw7
Ci0KLUJ5dGVzVmFsdWUqIEJ5dGVzVmFsdWU6Ok5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5h
KiBhcmVuYSkgY29uc3QgewotICByZXR1cm4gOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTo6Q3Jl
YXRlTWVzc2FnZTxCeXRlc1ZhbHVlPihhcmVuYSk7Ci19Ci0KLXZvaWQgQnl0ZXNWYWx1ZTo6Q2xl
YXIoKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobWVzc2FnZV9jbGVhcl9zdGFydDpn
b29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSkKLSAgdmFsdWVfLkNsZWFyVG9FbXB0eSgmOjpnb29n
bGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIEdl
dEFyZW5hTm9WaXJ0dWFsKCkpOwotfQotCi1ib29sIEJ5dGVzVmFsdWU6Ok1lcmdlUGFydGlhbEZy
b21Db2RlZFN0cmVhbSgKLSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3Ry
ZWFtKiBpbnB1dCkgewotI2RlZmluZSBET18oRVhQUkVTU0lPTikgaWYgKCFHT09HTEVfUFJFRElD
VF9UUlVFKEVYUFJFU1NJT04pKSBnb3RvIGZhaWx1cmUKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1
aW50MzIgdGFnOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vfc3RhcnQ6Z29v
Z2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUpCi0gIGZvciAoOzspIHsKLSAgICA6OnN0ZDo6cGFpcjwg
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIsIGJvb2w+IHAgPSBpbnB1dC0+UmVhZFRhZ1dpdGhD
dXRvZmYoMTI3KTsKLSAgICB0YWcgPSBwLmZpcnN0OwotICAgIGlmICghcC5zZWNvbmQpIGdvdG8g
aGFuZGxlX3VudXN1YWw7Ci0gICAgc3dpdGNoICg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6R2V0VGFnRmllbGROdW1iZXIodGFnKSkgewotICAgICAgLy8gb3B0
aW9uYWwgYnl0ZXMgdmFsdWUgPSAxOwotICAgICAgY2FzZSAxOiB7Ci0gICAgICAgIGlmICh0YWcg
PT0gMTApIHsKLSAgICAgICAgICBET18oOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2ly
ZUZvcm1hdExpdGU6OlJlYWRCeXRlcygKLSAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy0+bXV0
YWJsZV92YWx1ZSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBoYW5kbGVf
dW51c3VhbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5wdXQtPkV4cGVjdEF0RW5kKCkpIGdv
dG8gc3VjY2VzczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6IHsK
LSAgICAgIGhhbmRsZV91bnVzdWFsOgotICAgICAgICBpZiAodGFnID09IDAgfHwKLSAgICAgICAg
ICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpHZXRUYWdX
aXJlVHlwZSh0YWcpID09Ci0gICAgICAgICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpXaXJlRm9ybWF0TGl0ZTo6V0lSRVRZUEVfRU5EX0dST1VQKSB7Ci0gICAgICAgICAgZ290byBz
dWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIERPXyg6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpXaXJlRm9ybWF0TGl0ZTo6U2tpcEZpZWxkKGlucHV0LCB0YWcpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci1zdWNjZXNzOgotICAvLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQocGFyc2Vfc3VjY2Vzczpnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSkKLSAgcmV0
dXJuIHRydWU7Ci1mYWlsdXJlOgotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQocGFyc2Vf
ZmFpbHVyZTpnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSkKLSAgcmV0dXJuIGZhbHNlOwotI3Vu
ZGVmIERPXwotfQotCi12b2lkIEJ5dGVzVmFsdWU6OlNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygK
LSAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChzZXJpYWxpemVfc3RhcnQ6Z29v
Z2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUpCi0gIC8vIG9wdGlvbmFsIGJ5dGVzIHZhbHVlID0gMTsK
LSAgaWYgKHRoaXMtPnZhbHVlKCkuc2l6ZSgpID4gMCkgewotICAgIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OldpcmVGb3JtYXRMaXRlOjpXcml0ZUJ5dGVzTWF5YmVBbGlhc2VkKAotICAg
ICAgMSwgdGhpcy0+dmFsdWUoKSwgb3V0cHV0KTsKLSAgfQotCi0gIC8vIEBAcHJvdG9jX2luc2Vy
dGlvbl9wb2ludChzZXJpYWxpemVfZW5kOmdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlKQotfQot
Ci06Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBCeXRlc1ZhbHVlOjpTZXJpYWxpemVXaXRoQ2Fj
aGVkU2l6ZXNUb0FycmF5KAotICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIHRhcmdldCkg
Y29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoc2VyaWFsaXplX3RvX2FycmF5
X3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlKQotICAvLyBvcHRpb25hbCBieXRlcyB2
YWx1ZSA9IDE7Ci0gIGlmICh0aGlzLT52YWx1ZSgpLnNpemUoKSA+IDApIHsKLSAgICB0YXJnZXQg
PQotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6V2lyZUZvcm1hdExpdGU6Oldy
aXRlQnl0ZXNUb0FycmF5KAotICAgICAgICAxLCB0aGlzLT52YWx1ZSgpLCB0YXJnZXQpOwotICB9
Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KHNlcmlhbGl6ZV90b19hcnJheV9lbmQ6
Z29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUpCi0gIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWludCBC
eXRlc1ZhbHVlOjpCeXRlU2l6ZSgpIGNvbnN0IHsKLS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChtZXNzYWdlX2J5dGVfc2l6ZV9zdGFydDpnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSkKLSAg
aW50IHRvdGFsX3NpemUgPSAwOwotCi0gIC8vIG9wdGlvbmFsIGJ5dGVzIHZhbHVlID0gMTsKLSAg
aWYgKHRoaXMtPnZhbHVlKCkuc2l6ZSgpID4gMCkgewotICAgIHRvdGFsX3NpemUgKz0gMSArCi0g
ICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpXaXJlRm9ybWF0TGl0ZTo6Qnl0ZXNT
aXplKAotICAgICAgICB0aGlzLT52YWx1ZSgpKTsKLSAgfQotCi0gIEdPT0dMRV9TQUZFX0NPTkNV
UlJFTlRfV1JJVEVTX0JFR0lOKCk7Ci0gIF9jYWNoZWRfc2l6ZV8gPSB0b3RhbF9zaXplOwotICBH
T09HTEVfU0FGRV9DT05DVVJSRU5UX1dSSVRFU19FTkQoKTsKLSAgcmV0dXJuIHRvdGFsX3NpemU7
Ci19Ci0KLXZvaWQgQnl0ZXNWYWx1ZTo6TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZSYgZnJvbSkgewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdlbmVyYWxp
emVkX21lcmdlX2Zyb21fc3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUpCi0gIGlmIChH
T09HTEVfUFJFRElDVF9GQUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVf
Xyk7Ci0gIGNvbnN0IEJ5dGVzVmFsdWUqIHNvdXJjZSA9IAotICAgICAgOjpnb29nbGU6OnByb3Rv
YnVmOjppbnRlcm5hbDo6RHluYW1pY0Nhc3RUb0dlbmVyYXRlZDxjb25zdCBCeXRlc1ZhbHVlPigK
LSAgICAgICAgICAmZnJvbSk7Ci0gIGlmIChzb3VyY2UgPT0gTlVMTCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6ZWRfbWVyZ2VfZnJvbV9jYXN0X2ZhaWw6Z29vZ2xl
LnByb3RvYnVmLkJ5dGVzVmFsdWUpCi0gICAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6
UmVmbGVjdGlvbk9wczo6TWVyZ2UoZnJvbSwgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gIC8vIEBAcHJv
dG9jX2luc2VydGlvbl9wb2ludChnZW5lcmFsaXplZF9tZXJnZV9mcm9tX2Nhc3Rfc3VjY2Vzczpn
b29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSkKLSAgICBNZXJnZUZyb20oKnNvdXJjZSk7Ci0gIH0K
LX0KLQotdm9pZCBCeXRlc1ZhbHVlOjpNZXJnZUZyb20oY29uc3QgQnl0ZXNWYWx1ZSYgZnJvbSkg
ewotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX21lcmdlX2Zyb21f
c3RhcnQ6Z29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUpCi0gIGlmIChHT09HTEVfUFJFRElDVF9G
QUxTRSgmZnJvbSA9PSB0aGlzKSkgTWVyZ2VGcm9tRmFpbChfX0xJTkVfXyk7Ci0gIGlmIChmcm9t
LnZhbHVlKCkuc2l6ZSgpID4gMCkgewotICAgIHNldF92YWx1ZShmcm9tLnZhbHVlKCkpOwotICB9
Ci19Ci0KLXZvaWQgQnl0ZXNWYWx1ZTo6Q29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVm
OjpNZXNzYWdlJiBmcm9tKSB7Ci0vLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZ2VuZXJhbGl6
ZWRfY29weV9mcm9tX3N0YXJ0Omdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlKQotICBpZiAoJmZy
b20gPT0gdGhpcykgcmV0dXJuOwotICBDbGVhcigpOwotICBNZXJnZUZyb20oZnJvbSk7Ci19Ci0K
LXZvaWQgQnl0ZXNWYWx1ZTo6Q29weUZyb20oY29uc3QgQnl0ZXNWYWx1ZSYgZnJvbSkgewotLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3NwZWNpZmljX2NvcHlfZnJvbV9zdGFydDpn
b29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSkKLSAgaWYgKCZmcm9tID09IHRoaXMpIHJldHVybjsK
LSAgQ2xlYXIoKTsKLSAgTWVyZ2VGcm9tKGZyb20pOwotfQotCi1ib29sIEJ5dGVzVmFsdWU6Oklz
SW5pdGlhbGl6ZWQoKSBjb25zdCB7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQnl0ZXNW
YWx1ZTo6U3dhcChCeXRlc1ZhbHVlKiBvdGhlcikgewotICBpZiAob3RoZXIgPT0gdGhpcykgcmV0
dXJuOwotICBpZiAoR2V0QXJlbmFOb1ZpcnR1YWwoKSA9PSBvdGhlci0+R2V0QXJlbmFOb1ZpcnR1
YWwoKSkgewotICAgIEludGVybmFsU3dhcChvdGhlcik7Ci0gIH0gZWxzZSB7Ci0gICAgQnl0ZXNW
YWx1ZSB0ZW1wOwotICAgIHRlbXAuTWVyZ2VGcm9tKCp0aGlzKTsKLSAgICBDb3B5RnJvbSgqb3Ro
ZXIpOwotICAgIG90aGVyLT5Db3B5RnJvbSh0ZW1wKTsKLSAgfQotfQotdm9pZCBCeXRlc1ZhbHVl
OjpVbnNhZmVBcmVuYVN3YXAoQnl0ZXNWYWx1ZSogb3RoZXIpIHsKLSAgaWYgKG90aGVyID09IHRo
aXMpIHJldHVybjsKLSAgR09PR0xFX0RDSEVDSyhHZXRBcmVuYU5vVmlydHVhbCgpID09IG90aGVy
LT5HZXRBcmVuYU5vVmlydHVhbCgpKTsKLSAgSW50ZXJuYWxTd2FwKG90aGVyKTsKLX0KLXZvaWQg
Qnl0ZXNWYWx1ZTo6SW50ZXJuYWxTd2FwKEJ5dGVzVmFsdWUqIG90aGVyKSB7Ci0gIHZhbHVlXy5T
d2FwKCZvdGhlci0+dmFsdWVfKTsKLSAgX2ludGVybmFsX21ldGFkYXRhXy5Td2FwKCZvdGhlci0+
X2ludGVybmFsX21ldGFkYXRhXyk7Ci0gIHN0ZDo6c3dhcChfY2FjaGVkX3NpemVfLCBvdGhlci0+
X2NhY2hlZF9zaXplXyk7Ci19Ci0KLTo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgQnl0ZXNW
YWx1ZTo6R2V0TWV0YWRhdGEoKSBjb25zdCB7Ci0gIHByb3RvYnVmX0Fzc2lnbkRlc2NyaXB0b3Jz
T25jZSgpOwotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIG1ldGFkYXRhOwotICBtZXRh
ZGF0YS5kZXNjcmlwdG9yID0gQnl0ZXNWYWx1ZV9kZXNjcmlwdG9yXzsKLSAgbWV0YWRhdGEucmVm
bGVjdGlvbiA9IEJ5dGVzVmFsdWVfcmVmbGVjdGlvbl87Ci0gIHJldHVybiBtZXRhZGF0YTsKLX0K
LQotI2lmIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gQnl0ZXNWYWx1ZQotCi0v
LyBvcHRpb25hbCBieXRlcyB2YWx1ZSA9IDE7Ci12b2lkIEJ5dGVzVmFsdWU6OmNsZWFyX3ZhbHVl
KCkgewotICB2YWx1ZV8uQ2xlYXJUb0VtcHR5KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFs
OjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci19
Ci0gY29uc3QgOjpzdGQ6OnN0cmluZyYgQnl0ZXNWYWx1ZTo6dmFsdWUoKSBjb25zdCB7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLkJ5dGVz
VmFsdWUudmFsdWUpCi0gIHJldHVybiB2YWx1ZV8uR2V0KCY6Omdvb2dsZTo6cHJvdG9idWY6Omlu
dGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSk7Ci19Ci0gdm9pZCBCeXRlc1Zh
bHVlOjpzZXRfdmFsdWUoY29uc3QgOjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgCi0gIHZhbHVl
Xy5TZXQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpLCB2YWx1ZSwgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUudmFsdWUp
Ci19Ci0gdm9pZCBCeXRlc1ZhbHVlOjpzZXRfdmFsdWUoY29uc3QgY2hhciogdmFsdWUpIHsKLSAg
Ci0gIHZhbHVlXy5TZXQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKHZhbHVlKSwKLSAgICAgICAgICAgICAg
R2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF9zZXRfY2hhcjpnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZS52YWx1ZSkKLX0KLSB2b2lkIEJ5
dGVzVmFsdWU6OnNldF92YWx1ZShjb25zdCB2b2lkKiB2YWx1ZSwKLSAgICBzaXplX3Qgc2l6ZSkg
ewotICAKLSAgdmFsdWVfLlNldCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3RkOjpzdHJpbmcoCi0gICAgICByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSksIHNpemUpLCBHZXRBcmVuYU5vVmlydHVhbCgpKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9wb2ludGVyOmdvb2dsZS5w
cm90b2J1Zi5CeXRlc1ZhbHVlLnZhbHVlKQotfQotIDo6c3RkOjpzdHJpbmcqIEJ5dGVzVmFsdWU6
Om11dGFibGVfdmFsdWUoKSB7Ci0gIAotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZS52YWx1ZSkKLSAgcmV0dXJuIHZh
bHVlXy5NdXRhYmxlKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmlu
Z0FscmVhZHlJbml0ZWQoKSwgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci19Ci0gOjpzdGQ6OnN0cmlu
ZyogQnl0ZXNWYWx1ZTo6cmVsZWFzZV92YWx1ZSgpIHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9u
X3BvaW50KGZpZWxkX3JlbGVhc2U6Z29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUudmFsdWUpCi0g
IAotICByZXR1cm4gdmFsdWVfLlJlbGVhc2UoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6
OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBHZXRBcmVuYU5vVmlydHVhbCgpKTsKLX0K
LSA6OnN0ZDo6c3RyaW5nKiBCeXRlc1ZhbHVlOjp1bnNhZmVfYXJlbmFfcmVsZWFzZV92YWx1ZSgp
IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Vuc2FmZV9hcmVuYV9yZWxl
YXNlOmdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlLnZhbHVlKQotICBHT09HTEVfRENIRUNLKEdl
dEFyZW5hTm9WaXJ0dWFsKCkgIT0gTlVMTCk7Ci0gIAotICByZXR1cm4gdmFsdWVfLlVuc2FmZUFy
ZW5hUmVsZWFzZSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdB
bHJlYWR5SW5pdGVkKCksCi0gICAgICBHZXRBcmVuYU5vVmlydHVhbCgpKTsKLX0KLSB2b2lkIEJ5
dGVzVmFsdWU6OnNldF9hbGxvY2F0ZWRfdmFsdWUoOjpzdGQ6OnN0cmluZyogdmFsdWUpIHsKLSAg
aWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAKLSAgfQotICB2YWx1
ZV8uU2V0QWxsb2NhdGVkKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0
cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUsCi0gICAgICBHZXRBcmVuYU5vVmlydHVhbCgpKTsK
LSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xl
LnByb3RvYnVmLkJ5dGVzVmFsdWUudmFsdWUpCi19Ci0gdm9pZCBCeXRlc1ZhbHVlOjp1bnNhZmVf
YXJlbmFfc2V0X2FsbG9jYXRlZF92YWx1ZSgKLSAgICA6OnN0ZDo6c3RyaW5nKiB2YWx1ZSkgewot
ICBHT09HTEVfRENIRUNLKEdldEFyZW5hTm9WaXJ0dWFsKCkgIT0gTlVMTCk7Ci0gIGlmICh2YWx1
ZSAhPSBOVUxMKSB7Ci0gICAgCi0gIH0gZWxzZSB7Ci0gICAgCi0gIH0KLSAgdmFsdWVfLlVuc2Fm
ZUFyZW5hU2V0QWxsb2NhdGVkKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0
eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIHZhbHVlLCBHZXRBcmVuYU5vVmlydHVhbCgp
KTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3Vuc2FmZV9hcmVuYV9zZXRf
YWxsb2NhdGVkOmdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlLnZhbHVlKQotfQotCi0jZW5kaWYg
IC8vIFBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotCi0vLyBAQHByb3RvY19pbnNlcnRp
b25fcG9pbnQobmFtZXNwYWNlX3Njb3BlKQotCi19ICAvLyBuYW1lc3BhY2UgcHJvdG9idWYKLX0g
IC8vIG5hbWVzcGFjZSBnb29nbGUKLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGdsb2Jh
bF9zY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wYi5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9z
cmMvZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnBiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDEwNzg0Nzc4ODUyZjY3YTVkODY1OWFhNGZkYTRjYWI5ODE5ZTM1NWYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVm
L3dyYXBwZXJzLnBiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTgwICswLDAgQEAKLS8vIEdlbmVy
YXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCi0vLyBz
b3VyY2U6IGdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90bwotCi0jaWZuZGVmIFBST1RPQlVG
X2dvb2dsZV8yZnByb3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90b19fSU5DTFVERUQKLSNkZWZpbmUg
UFJPVE9CVUZfZ29vZ2xlXzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvX19JTkNMVURFRAot
Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL3N0dWJzL2Nv
bW1vbi5oPgotCi0jaWYgR09PR0xFX1BST1RPQlVGX1ZFUlNJT04gPCAzMDAwMDAwCi0jZXJyb3Ig
VGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgYSBuZXdlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGlj
aCBpcwotI2Vycm9yIGluY29tcGF0aWJsZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRl
cnMuICBQbGVhc2UgdXBkYXRlCi0jZXJyb3IgeW91ciBoZWFkZXJzLgotI2VuZGlmCi0jaWYgMzAw
MDAwMCA8IEdPT0dMRV9QUk9UT0JVRl9NSU5fUFJPVE9DX1ZFUlNJT04KLSNlcnJvciBUaGlzIGZp
bGUgd2FzIGdlbmVyYXRlZCBieSBhbiBvbGRlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcwot
I2Vycm9yIGluY29tcGF0aWJsZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuICBQ
bGVhc2UKLSNlcnJvciByZWdlbmVyYXRlIHRoaXMgZmlsZSB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBv
ZiBwcm90b2MuCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYS5oPgot
I2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5oPgotI2luY2x1ZGUgPGdvb2ds
ZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3By
b3RvYnVmL21ldGFkYXRhLmg+Ci0jaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UuaD4K
LSNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaD4KLSNpbmNsdWRlIDxn
b29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldC5oPgotI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1
Zi91bmtub3duX2ZpZWxkX3NldC5oPgotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGluY2x1
ZGVzKQotCi1uYW1lc3BhY2UgZ29vZ2xlIHsKLW5hbWVzcGFjZSBwcm90b2J1ZiB7Ci0KLS8vIElu
dGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCAtLSBkbyBub3QgY2FsbCB0aGVzZS4KLXZvaWQg
TElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ3
cmFwcGVyc18yZXByb3RvKCk7Ci12b2lkIHByb3RvYnVmX0Fzc2lnbkRlc2NfZ29vZ2xlXzJmcHJv
dG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7Ci12b2lkIHByb3RvYnVmX1NodXRkb3duRmlsZV9n
b29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8oKTsKLQotY2xhc3MgQm9vbFZhbHVl
OwotY2xhc3MgQnl0ZXNWYWx1ZTsKLWNsYXNzIERvdWJsZVZhbHVlOwotY2xhc3MgRmxvYXRWYWx1
ZTsKLWNsYXNzIEludDMyVmFsdWU7Ci1jbGFzcyBJbnQ2NFZhbHVlOwotY2xhc3MgU3RyaW5nVmFs
dWU7Ci1jbGFzcyBVSW50MzJWYWx1ZTsKLWNsYXNzIFVJbnQ2NFZhbHVlOwotCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBEb3VibGVWYWx1ZSA6IHB1YmxpYyA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgRG91YmxlVmFsdWUoKTsKLSAg
dmlydHVhbCB+RG91YmxlVmFsdWUoKTsKLQotICBEb3VibGVWYWx1ZShjb25zdCBEb3VibGVWYWx1
ZSYgZnJvbSk7Ci0KLSAgaW5saW5lIERvdWJsZVZhbHVlJiBvcGVyYXRvcj0oY29uc3QgRG91Ymxl
VmFsdWUmIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0g
IH0KLQotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmEoKSBjb25z
dCB7IHJldHVybiBHZXRBcmVuYU5vVmlydHVhbCgpOyB9Ci0gIGlubGluZSB2b2lkKiBHZXRNYXli
ZUFyZW5hUG9pbnRlcigpIGNvbnN0IHsKLSAgICByZXR1cm4gTWF5YmVBcmVuYVB0cigpOwotICB9
Ci0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0
b3IoKTsKLSAgc3RhdGljIGNvbnN0IERvdWJsZVZhbHVlJiBkZWZhdWx0X2luc3RhbmNlKCk7Ci0K
LSAgdm9pZCBVbnNhZmVBcmVuYVN3YXAoRG91YmxlVmFsdWUqIG90aGVyKTsKLSAgdm9pZCBTd2Fw
KERvdWJsZVZhbHVlKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUgRG91Ymxl
VmFsdWUqIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxMKTsgfQotCi0gIERvdWJsZVZhbHVl
KiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNvbnN0OwotICB2b2lkIENv
cHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQg
TWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZv
aWQgQ29weUZyb20oY29uc3QgRG91YmxlVmFsdWUmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShj
b25zdCBEb3VibGVWYWx1ZSYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIoKTsKLSAgYm9vbCBJc0luaXRp
YWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29uc3Q7Ci0gIGJvb2wgTWVyZ2VQ
YXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29k
ZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplcygK
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0cHV0U3RyZWFtKiBvdXRwdXQp
IGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBTZXJpYWxpemVXaXRoQ2FjaGVk
U2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIG91dHB1dCkgY29uc3Q7Ci0g
IGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2NhY2hlZF9zaXplXzsgfQotICBw
cml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBTaGFyZWREdG9yKCk7Ci0gIHZv
aWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZvaWQgSW50ZXJuYWxTd2FwKERv
dWJsZVZhbHVlKiBvdGhlcik7Ci0gIHByb3RlY3RlZDoKLSAgZXhwbGljaXQgRG91YmxlVmFsdWUo
Ojpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwotICBwcml2YXRlOgotICBzdGF0aWMg
dm9pZCBBcmVuYUR0b3Iodm9pZCogb2JqZWN0KTsKLSAgaW5saW5lIHZvaWQgUmVnaXN0ZXJBcmVu
YUR0b3IoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwotICBwcml2YXRlOgotICBp
bmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25z
dCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxp
bmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21l
dGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlw
ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgZG91YmxlIHZhbHVlID0gMTsKLSAgdm9p
ZCBjbGVhcl92YWx1ZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtWYWx1ZUZpZWxkTnVtYmVyID0g
MTsKLSAgZG91YmxlIHZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3ZhbHVlKGRvdWJsZSB2YWx1
ZSk7Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5w
cm90b2J1Zi5Eb3VibGVWYWx1ZSkKLSBwcml2YXRlOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6
aW50ZXJuYWw6OkludGVybmFsTWV0YWRhdGFXaXRoQXJlbmEgX2ludGVybmFsX21ldGFkYXRhXzsK
LSAgZnJpZW5kIGNsYXNzIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmE7Ci0gIHR5cGVkZWYgdm9p
ZCBJbnRlcm5hbEFyZW5hQ29uc3RydWN0YWJsZV87Ci0gIHR5cGVkZWYgdm9pZCBEZXN0cnVjdG9y
U2tpcHBhYmxlXzsKLSAgYm9vbCBfaXNfZGVmYXVsdF9pbnN0YW5jZV87Ci0gIGRvdWJsZSB2YWx1
ZV87Ci0gIG11dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIGZyaWVuZCB2b2lkIExJQlBST1RP
QlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmd3JhcHBlcnNf
MmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnBy
b3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0
ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7Ci0KLSAgdm9p
ZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIERvdWJsZVZhbHVlKiBkZWZhdWx0
X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9S
VCBGbG9hdFZhbHVlIDogcHVibGljIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSB7Ci0gcHVi
bGljOgotICBGbG9hdFZhbHVlKCk7Ci0gIHZpcnR1YWwgfkZsb2F0VmFsdWUoKTsKLQotICBGbG9h
dFZhbHVlKGNvbnN0IEZsb2F0VmFsdWUmIGZyb20pOwotCi0gIGlubGluZSBGbG9hdFZhbHVlJiBv
cGVyYXRvcj0oY29uc3QgRmxvYXRWYWx1ZSYgZnJvbSkgewotICAgIENvcHlGcm9tKGZyb20pOwot
ICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFy
ZW5hKiBHZXRBcmVuYSgpIGNvbnN0IHsgcmV0dXJuIEdldEFyZW5hTm9WaXJ0dWFsKCk7IH0KLSAg
aW5saW5lIHZvaWQqIEdldE1heWJlQXJlbmFQb2ludGVyKCkgY29uc3QgewotICAgIHJldHVybiBN
YXliZUFyZW5hUHRyKCk7Ci0gIH0KLSAgc3RhdGljIGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
RGVzY3JpcHRvciogZGVzY3JpcHRvcigpOwotICBzdGF0aWMgY29uc3QgRmxvYXRWYWx1ZSYgZGVm
YXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgVW5zYWZlQXJlbmFTd2FwKEZsb2F0VmFsdWUqIG90
aGVyKTsKLSAgdm9pZCBTd2FwKEZsb2F0VmFsdWUqIG90aGVyKTsKLQotICAvLyBpbXBsZW1lbnRz
IE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIGlubGluZSBGbG9hdFZhbHVlKiBOZXcoKSBjb25zdCB7IHJldHVybiBOZXcoTlVMTCk7IH0K
LQotICBGbG9hdFZhbHVlKiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpIGNv
bnN0OwotICB2b2lkIENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZSYg
ZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2Fn
ZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgRmxvYXRWYWx1ZSYgZnJvbSk7Ci0gIHZv
aWQgTWVyZ2VGcm9tKGNvbnN0IEZsb2F0VmFsdWUmIGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0g
IGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGludCBCeXRlU2l6ZSgpIGNvbnN0Owot
ICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRo
Q2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0
cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFs
aXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRw
dXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRf
c2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVk
RHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNpemUpIGNvbnN0OwotICB2b2lkIElu
dGVybmFsU3dhcChGbG9hdFZhbHVlKiBvdGhlcik7Ci0gIHByb3RlY3RlZDoKLSAgZXhwbGljaXQg
RmxvYXRWYWx1ZSg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSk7Ci0gIHByaXZhdGU6
Ci0gIHN0YXRpYyB2b2lkIEFyZW5hRHRvcih2b2lkKiBvYmplY3QpOwotICBpbmxpbmUgdm9pZCBS
ZWdpc3RlckFyZW5hRHRvcig6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVuYSk7Ci0gIHBy
aXZhdGU6Ci0gIGlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBHZXRBcmVuYU5vVmly
dHVhbCgpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5hcmVuYSgpOwot
ICB9Ci0gIGlubGluZSB2b2lkKiBNYXliZUFyZW5hUHRyKCkgY29uc3QgewotICAgIHJldHVybiBf
aW50ZXJuYWxfbWV0YWRhdGFfLnJhd19hcmVuYV9wdHIoKTsKLSAgfQotICBwdWJsaWM6Ci0KLSAg
Ojpnb29nbGU6OnByb3RvYnVmOjpNZXRhZGF0YSBHZXRNZXRhZGF0YSgpIGNvbnN0OwotCi0gIC8v
IG5lc3RlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgLy8gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBvcHRpb25hbCBmbG9hdCB2YWx1ZSA9
IDE7Ci0gIHZvaWQgY2xlYXJfdmFsdWUoKTsKLSAgc3RhdGljIGNvbnN0IGludCBrVmFsdWVGaWVs
ZE51bWJlciA9IDE7Ci0gIGZsb2F0IHZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3ZhbHVlKGZs
b2F0IHZhbHVlKTsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6
Z29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWUpCi0gcHJpdmF0ZToKLQotICA6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRh
ZGF0YV87Ci0gIGZyaWVuZCBjbGFzcyA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOwotICB0eXBl
ZGVmIHZvaWQgSW50ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfOwotICB0eXBlZGVmIHZvaWQgRGVz
dHJ1Y3RvclNraXBwYWJsZV87Ci0gIGJvb2wgX2lzX2RlZmF1bHRfaW5zdGFuY2VfOwotICBmbG9h
dCB2YWx1ZV87Ci0gIG11dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIGZyaWVuZCB2b2lkIExJ
QlBST1RPQlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmd3Jh
cHBlcnNfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dvb2ds
ZV8yZnByb3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1
Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7Ci0K
LSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIEZsb2F0VmFsdWUqIGRl
ZmF1bHRfaW5zdGFuY2VfOwotfTsKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgTElCUFJPVE9CVUZf
RVhQT1JUIEludDY0VmFsdWUgOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdlIHsK
LSBwdWJsaWM6Ci0gIEludDY0VmFsdWUoKTsKLSAgdmlydHVhbCB+SW50NjRWYWx1ZSgpOwotCi0g
IEludDY0VmFsdWUoY29uc3QgSW50NjRWYWx1ZSYgZnJvbSk7Ci0KLSAgaW5saW5lIEludDY0VmFs
dWUmIG9wZXJhdG9yPShjb25zdCBJbnQ2NFZhbHVlJiBmcm9tKSB7Ci0gICAgQ29weUZyb20oZnJv
bSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmEqIEdldEFyZW5hKCkgY29uc3QgeyByZXR1cm4gR2V0QXJlbmFOb1ZpcnR1YWwoKTsg
fQotICBpbmxpbmUgdm9pZCogR2V0TWF5YmVBcmVuYVBvaW50ZXIoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIE1heWJlQXJlbmFQdHIoKTsKLSAgfQotICBzdGF0aWMgY29uc3QgOjpnb29nbGU6OnByb3Rv
YnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBJbnQ2NFZhbHVl
JiBkZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBVbnNhZmVBcmVuYVN3YXAoSW50NjRWYWx1
ZSogb3RoZXIpOwotICB2b2lkIFN3YXAoSW50NjRWYWx1ZSogb3RoZXIpOwotCi0gIC8vIGltcGxl
bWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgaW5saW5lIEludDY0VmFsdWUqIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxM
KTsgfQotCi0gIEludDY0VmFsdWUqIE5ldyg6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hKiBhcmVu
YSkgY29uc3Q7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNz
YWdlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlJiBmcm9tKTsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCBJbnQ2NFZhbHVlJiBmcm9tKTsK
LSAgdm9pZCBNZXJnZUZyb20oY29uc3QgSW50NjRWYWx1ZSYgZnJvbSk7Ci0gIHZvaWQgQ2xlYXIo
KTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkgY29u
c3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29nbGU6
OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlhbGl6
ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkT3V0
cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBT
ZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgq
IG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4gX2Nh
Y2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9pZCBT
aGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0gIHZv
aWQgSW50ZXJuYWxTd2FwKEludDY0VmFsdWUqIG90aGVyKTsKLSAgcHJvdGVjdGVkOgotICBleHBs
aWNpdCBJbnQ2NFZhbHVlKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKTsKLSAgcHJp
dmF0ZToKLSAgc3RhdGljIHZvaWQgQXJlbmFEdG9yKHZvaWQqIG9iamVjdCk7Ci0gIGlubGluZSB2
b2lkIFJlZ2lzdGVyQXJlbmFEdG9yKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKTsK
LSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5h
Tm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLmFyZW5h
KCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQdHIoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0cigpOwotICB9Ci0gIHB1YmxpYzoK
LQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdldE1ldGFkYXRhKCkgY29uc3Q7Ci0K
LSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICAvLyBhY2Nlc3NvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIG9wdGlvbmFsIGludDY0IHZh
bHVlID0gMTsKLSAgdm9pZCBjbGVhcl92YWx1ZSgpOwotICBzdGF0aWMgY29uc3QgaW50IGtWYWx1
ZUZpZWxkTnVtYmVyID0gMTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnQ2NCB2YWx1ZSgpIGNv
bnN0OwotICB2b2lkIHNldF92YWx1ZSg6Omdvb2dsZTo6cHJvdG9idWY6OmludDY0IHZhbHVlKTsK
LQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3Rv
YnVmLkludDY0VmFsdWUpCi0gcHJpdmF0ZToKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0YV87Ci0gIGZy
aWVuZCBjbGFzcyA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOwotICB0eXBlZGVmIHZvaWQgSW50
ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfOwotICB0eXBlZGVmIHZvaWQgRGVzdHJ1Y3RvclNraXBw
YWJsZV87Ci0gIGJvb2wgX2lzX2RlZmF1bHRfaW5zdGFuY2VfOwotICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludDY0IHZhbHVlXzsKLSAgbXV0YWJsZSBpbnQgX2NhY2hlZF9zaXplXzsKLSAgZnJpZW5k
IHZvaWQgTElCUFJPVE9CVUZfRVhQT1JUIHByb3RvYnVmX0FkZERlc2NfZ29vZ2xlXzJmcHJvdG9i
dWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lkIHByb3RvYnVmX0Fzc2lnbkRl
c2NfZ29vZ2xlXzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7Ci0gIGZyaWVuZCB2b2lk
IHByb3RvYnVmX1NodXRkb3duRmlsZV9nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJv
dG8oKTsKLQotICB2b2lkIEluaXRBc0RlZmF1bHRJbnN0YW5jZSgpOwotICBzdGF0aWMgSW50NjRW
YWx1ZSogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQ
Uk9UT0JVRl9FWFBPUlQgVUludDY0VmFsdWUgOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVmOjpN
ZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIFVJbnQ2NFZhbHVlKCk7Ci0gIHZpcnR1YWwgflVJbnQ2NFZh
bHVlKCk7Ci0KLSAgVUludDY0VmFsdWUoY29uc3QgVUludDY0VmFsdWUmIGZyb20pOwotCi0gIGlu
bGluZSBVSW50NjRWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFVJbnQ2NFZhbHVlJiBmcm9tKSB7Ci0g
ICAgQ29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hKCkgY29uc3QgeyByZXR1cm4gR2V0QXJl
bmFOb1ZpcnR1YWwoKTsgfQotICBpbmxpbmUgdm9pZCogR2V0TWF5YmVBcmVuYVBvaW50ZXIoKSBj
b25zdCB7Ci0gICAgcmV0dXJuIE1heWJlQXJlbmFQdHIoKTsKLSAgfQotICBzdGF0aWMgY29uc3Qg
Ojpnb29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBj
b25zdCBVSW50NjRWYWx1ZSYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgVW5zYWZlQXJl
bmFTd2FwKFVJbnQ2NFZhbHVlKiBvdGhlcik7Ci0gIHZvaWQgU3dhcChVSW50NjRWYWx1ZSogb3Ro
ZXIpOwotCi0gIC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgaW5saW5lIFVJbnQ2NFZhbHVlKiBOZXcoKSBjb25z
dCB7IHJldHVybiBOZXcoTlVMTCk7IH0KLQotICBVSW50NjRWYWx1ZSogTmV3KDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0
IFVJbnQ2NFZhbHVlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgVUludDY0VmFsdWUm
IGZyb20pOwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0Owot
Ci0gIGludCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0
cmVhbSgKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlu
cHV0KTsKLSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6
cHJvdG9idWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29n
bGU6OnByb3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdv
b2dsZTo6cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBT
aGFyZWRDdG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUo
aW50IHNpemUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChVSW50NjRWYWx1ZSogb3RoZXIp
OwotICBwcm90ZWN0ZWQ6Ci0gIGV4cGxpY2l0IFVJbnQ2NFZhbHVlKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmEqIGFyZW5hKTsKLSAgcHJpdmF0ZToKLSAgc3RhdGljIHZvaWQgQXJlbmFEdG9yKHZv
aWQqIG9iamVjdCk7Ci0gIGlubGluZSB2b2lkIFJlZ2lzdGVyQXJlbmFEdG9yKDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIGFyZW5hKTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBf
aW50ZXJuYWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJl
bmFQdHIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5h
X3B0cigpOwotICB9Ci0gIHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRh
IEdldE1ldGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBhY2Nlc3NvcnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIC8vIG9wdGlvbmFsIHVpbnQ2NCB2YWx1ZSA9IDE7Ci0gIHZvaWQgY2xlYXJfdmFsdWUoKTsK
LSAgc3RhdGljIGNvbnN0IGludCBrVmFsdWVGaWVsZE51bWJlciA9IDE7Ci0gIDo6Z29vZ2xlOjpw
cm90b2J1Zjo6dWludDY0IHZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3ZhbHVlKDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6dWludDY0IHZhbHVlKTsKLQotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9p
bnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlKQotIHByaXZhdGU6Ci0K
LSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVu
YSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVm
OjpBcmVuYTsKLSAgdHlwZWRlZiB2b2lkIEludGVybmFsQXJlbmFDb25zdHJ1Y3RhYmxlXzsKLSAg
dHlwZWRlZiB2b2lkIERlc3RydWN0b3JTa2lwcGFibGVfOwotICBib29sIF9pc19kZWZhdWx0X2lu
c3RhbmNlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50NjQgdmFsdWVfOwotICBtdXRhYmxl
IGludCBfY2FjaGVkX3NpemVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJv
dG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8oKTsKLSAg
ZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBw
ZXJzXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfU2h1dGRvd25GaWxlX2dvb2ds
ZV8yZnByb3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVs
dEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBVSW50NjRWYWx1ZSogZGVmYXVsdF9pbnN0YW5jZV87Ci19
OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgSW50MzJWYWx1ZSA6
IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgSW50MzJW
YWx1ZSgpOwotICB2aXJ0dWFsIH5JbnQzMlZhbHVlKCk7Ci0KLSAgSW50MzJWYWx1ZShjb25zdCBJ
bnQzMlZhbHVlJiBmcm9tKTsKLQotICBpbmxpbmUgSW50MzJWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0
IEludDMyVmFsdWUmIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAgICByZXR1cm4gKnRo
aXM7Ci0gIH0KLQotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmEo
KSBjb25zdCB7IHJldHVybiBHZXRBcmVuYU5vVmlydHVhbCgpOyB9Ci0gIGlubGluZSB2b2lkKiBH
ZXRNYXliZUFyZW5hUG9pbnRlcigpIGNvbnN0IHsKLSAgICByZXR1cm4gTWF5YmVBcmVuYVB0cigp
OwotICB9Ci0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRl
c2NyaXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IEludDMyVmFsdWUmIGRlZmF1bHRfaW5zdGFuY2Uo
KTsKLQotICB2b2lkIFVuc2FmZUFyZW5hU3dhcChJbnQzMlZhbHVlKiBvdGhlcik7Ci0gIHZvaWQg
U3dhcChJbnQzMlZhbHVlKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUgSW50
MzJWYWx1ZSogTmV3KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgSW50MzJWYWx1
ZSogTmV3KDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBD
b3B5RnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lk
IE1lcmdlRnJvbShjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2
b2lkIENvcHlGcm9tKGNvbnN0IEludDMyVmFsdWUmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShj
b25zdCBJbnQzMlZhbHVlJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigpOwotICBib29sIElzSW5pdGlh
bGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBh
cnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2Rl
ZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAot
ICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkg
Y29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRT
aXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAg
aW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHBy
aXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9p
ZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoSW50
MzJWYWx1ZSogb3RoZXIpOwotICBwcm90ZWN0ZWQ6Ci0gIGV4cGxpY2l0IEludDMyVmFsdWUoOjpn
b29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwotICBwcml2YXRlOgotICBzdGF0aWMgdm9p
ZCBBcmVuYUR0b3Iodm9pZCogb2JqZWN0KTsKLSAgaW5saW5lIHZvaWQgUmVnaXN0ZXJBcmVuYUR0
b3IoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwotICBwcml2YXRlOgotICBpbmxp
bmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUg
dm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFk
YXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgaW50MzIgdmFsdWUgPSAxOwotICB2b2lkIGNs
ZWFyX3ZhbHVlKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1ZhbHVlRmllbGROdW1iZXIgPSAxOwot
ICA6Omdvb2dsZTo6cHJvdG9idWY6OmludDMyIHZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3Zh
bHVlKDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWUpOwotCi0gIC8vIEBAcHJvdG9jX2lu
c2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZSkKLSBw
cml2YXRlOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkludGVybmFsTWV0YWRh
dGFXaXRoQXJlbmEgX2ludGVybmFsX21ldGFkYXRhXzsKLSAgZnJpZW5kIGNsYXNzIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6QXJlbmE7Ci0gIHR5cGVkZWYgdm9pZCBJbnRlcm5hbEFyZW5hQ29uc3RydWN0
YWJsZV87Ci0gIHR5cGVkZWYgdm9pZCBEZXN0cnVjdG9yU2tpcHBhYmxlXzsKLSAgYm9vbCBfaXNf
ZGVmYXVsdF9pbnN0YW5jZV87Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50MzIgdmFsdWVfOwot
ICBtdXRhYmxlIGludCBfY2FjaGVkX3NpemVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9F
WFBPUlQgcHJvdG9idWZfQWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJv
dG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1
Zl8yZndyYXBwZXJzXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfU2h1dGRvd25G
aWxlX2dvb2dsZV8yZnByb3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotCi0gIHZvaWQgSW5p
dEFzRGVmYXVsdEluc3RhbmNlKCk7Ci0gIHN0YXRpYyBJbnQzMlZhbHVlKiBkZWZhdWx0X2luc3Rh
bmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBVSW50
MzJWYWx1ZSA6IHB1YmxpYyA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoK
LSAgVUludDMyVmFsdWUoKTsKLSAgdmlydHVhbCB+VUludDMyVmFsdWUoKTsKLQotICBVSW50MzJW
YWx1ZShjb25zdCBVSW50MzJWYWx1ZSYgZnJvbSk7Ci0KLSAgaW5saW5lIFVJbnQzMlZhbHVlJiBv
cGVyYXRvcj0oY29uc3QgVUludDMyVmFsdWUmIGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsK
LSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpB
cmVuYSogR2V0QXJlbmEoKSBjb25zdCB7IHJldHVybiBHZXRBcmVuYU5vVmlydHVhbCgpOyB9Ci0g
IGlubGluZSB2b2lkKiBHZXRNYXliZUFyZW5hUG9pbnRlcigpIGNvbnN0IHsKLSAgICByZXR1cm4g
TWF5YmVBcmVuYVB0cigpOwotICB9Ci0gIHN0YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6
OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsKLSAgc3RhdGljIGNvbnN0IFVJbnQzMlZhbHVlJiBk
ZWZhdWx0X2luc3RhbmNlKCk7Ci0KLSAgdm9pZCBVbnNhZmVBcmVuYVN3YXAoVUludDMyVmFsdWUq
IG90aGVyKTsKLSAgdm9pZCBTd2FwKFVJbnQzMlZhbHVlKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVt
ZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotICBpbmxpbmUgVUludDMyVmFsdWUqIE5ldygpIGNvbnN0IHsgcmV0dXJuIE5ldyhOVUxM
KTsgfQotCi0gIFVJbnQzMlZhbHVlKiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJl
bmEpIGNvbnN0OwotICB2b2lkIENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1Zjo6
TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgVUludDMyVmFsdWUmIGZyb20p
OwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBVSW50MzJWYWx1ZSYgZnJvbSk7Ci0gIHZvaWQgQ2xl
YXIoKTsKLSAgYm9vbCBJc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0KLSAgaW50IEJ5dGVTaXplKCkg
Y29uc3Q7Ci0gIGJvb2wgTWVyZ2VQYXJ0aWFsRnJvbUNvZGVkU3RyZWFtKAotICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbzo6Q29kZWRJbnB1dFN0cmVhbSogaW5wdXQpOwotICB2b2lkIFNlcmlh
bGl6ZVdpdGhDYWNoZWRTaXplcygKLSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVk
T3V0cHV0U3RyZWFtKiBvdXRwdXQpIGNvbnN0OwotICA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ4
KiBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXNUb0FycmF5KDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWlu
dDgqIG91dHB1dCkgY29uc3Q7Ci0gIGludCBHZXRDYWNoZWRTaXplKCkgY29uc3QgeyByZXR1cm4g
X2NhY2hlZF9zaXplXzsgfQotICBwcml2YXRlOgotICB2b2lkIFNoYXJlZEN0b3IoKTsKLSAgdm9p
ZCBTaGFyZWREdG9yKCk7Ci0gIHZvaWQgU2V0Q2FjaGVkU2l6ZShpbnQgc2l6ZSkgY29uc3Q7Ci0g
IHZvaWQgSW50ZXJuYWxTd2FwKFVJbnQzMlZhbHVlKiBvdGhlcik7Ci0gIHByb3RlY3RlZDoKLSAg
ZXhwbGljaXQgVUludDMyVmFsdWUoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwot
ICBwcml2YXRlOgotICBzdGF0aWMgdm9pZCBBcmVuYUR0b3Iodm9pZCogb2JqZWN0KTsKLSAgaW5s
aW5lIHZvaWQgUmVnaXN0ZXJBcmVuYUR0b3IoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogYXJl
bmEpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0
QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8u
YXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVBcmVuYVB0cigpIGNvbnN0IHsKLSAg
ICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJlbmFfcHRyKCk7Ci0gIH0KLSAgcHVi
bGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRhdGEgR2V0TWV0YWRhdGEoKSBjb25z
dDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gb3B0aW9uYWwgdWlu
dDMyIHZhbHVlID0gMTsKLSAgdm9pZCBjbGVhcl92YWx1ZSgpOwotICBzdGF0aWMgY29uc3QgaW50
IGtWYWx1ZUZpZWxkTnVtYmVyID0gMTsKLSAgOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIgdmFs
dWUoKSBjb25zdDsKLSAgdm9pZCBzZXRfdmFsdWUoOjpnb29nbGU6OnByb3RvYnVmOjp1aW50MzIg
dmFsdWUpOwotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpnb29n
bGUucHJvdG9idWYuVUludDMyVmFsdWUpCi0gcHJpdmF0ZToKLQotICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmludGVybmFsOjpJbnRlcm5hbE1ldGFkYXRhV2l0aEFyZW5hIF9pbnRlcm5hbF9tZXRhZGF0
YV87Ci0gIGZyaWVuZCBjbGFzcyA6Omdvb2dsZTo6cHJvdG9idWY6OkFyZW5hOwotICB0eXBlZGVm
IHZvaWQgSW50ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfOwotICB0eXBlZGVmIHZvaWQgRGVzdHJ1
Y3RvclNraXBwYWJsZV87Ci0gIGJvb2wgX2lzX2RlZmF1bHRfaW5zdGFuY2VfOwotICA6Omdvb2ds
ZTo6cHJvdG9idWY6OnVpbnQzMiB2YWx1ZV87Ci0gIG11dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87
Ci0gIGZyaWVuZCB2b2lkIExJQlBST1RPQlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2ds
ZV8yZnByb3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1
Zl9Bc3NpZ25EZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotICBm
cmllbmQgdm9pZCBwcm90b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZ3cmFw
cGVyc18yZXByb3RvKCk7Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3Rh
dGljIFVJbnQzMlZhbHVlKiBkZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIExJQlBST1RPQlVGX0VYUE9SVCBCb29sVmFsdWUgOiBwdWJsaWMgOjpnb29nbGU6OnBy
b3RvYnVmOjpNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIEJvb2xWYWx1ZSgpOwotICB2aXJ0dWFsIH5C
b29sVmFsdWUoKTsKLQotICBCb29sVmFsdWUoY29uc3QgQm9vbFZhbHVlJiBmcm9tKTsKLQotICBp
bmxpbmUgQm9vbFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgQm9vbFZhbHVlJiBmcm9tKSB7Ci0gICAg
Q29weUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIDo6Z29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hKCkgY29uc3QgeyByZXR1cm4gR2V0QXJlbmFO
b1ZpcnR1YWwoKTsgfQotICBpbmxpbmUgdm9pZCogR2V0TWF5YmVBcmVuYVBvaW50ZXIoKSBjb25z
dCB7Ci0gICAgcmV0dXJuIE1heWJlQXJlbmFQdHIoKTsKLSAgfQotICBzdGF0aWMgY29uc3QgOjpn
b29nbGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25z
dCBCb29sVmFsdWUmIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2b2lkIFVuc2FmZUFyZW5hU3dh
cChCb29sVmFsdWUqIG90aGVyKTsKLSAgdm9pZCBTd2FwKEJvb2xWYWx1ZSogb3RoZXIpOwotCi0g
IC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgaW5saW5lIEJvb2xWYWx1ZSogTmV3KCkgY29uc3QgeyByZXR1cm4g
TmV3KE5VTEwpOyB9Ci0KLSAgQm9vbFZhbHVlKiBOZXcoOjpnb29nbGU6OnByb3RvYnVmOjpBcmVu
YSogYXJlbmEpIGNvbnN0OwotICB2b2lkIENvcHlGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90b2J1
Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IDo6Z29vZ2xlOjpwcm90
b2J1Zjo6TWVzc2FnZSYgZnJvbSk7Ci0gIHZvaWQgQ29weUZyb20oY29uc3QgQm9vbFZhbHVlJiBm
cm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgQm9vbFZhbHVlJiBmcm9tKTsKLSAgdm9pZCBD
bGVhcigpOwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLQotICBpbnQgQnl0ZVNpemUo
KSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29kZWRTdHJlYW0oCi0gICAgICA6Omdv
b2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtKiBpbnB1dCk7Ci0gIHZvaWQgU2Vy
aWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29nbGU6OnByb3RvYnVmOjppbzo6Q29k
ZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6dWlu
dDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXkoOjpnb29nbGU6OnByb3RvYnVmOjp1
aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCB7IHJldHVy
biBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZvaWQgU2hhcmVkQ3RvcigpOwotICB2
b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsK
LSAgdm9pZCBJbnRlcm5hbFN3YXAoQm9vbFZhbHVlKiBvdGhlcik7Ci0gIHByb3RlY3RlZDoKLSAg
ZXhwbGljaXQgQm9vbFZhbHVlKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKTsKLSAg
cHJpdmF0ZToKLSAgc3RhdGljIHZvaWQgQXJlbmFEdG9yKHZvaWQqIG9iamVjdCk7Ci0gIGlubGlu
ZSB2b2lkIFJlZ2lzdGVyQXJlbmFEdG9yKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5h
KTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJlbmEqIEdldEFy
ZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJuYWxfbWV0YWRhdGFfLmFy
ZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQdHIoKSBjb25zdCB7Ci0gICAg
cmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0cigpOwotICB9Ci0gIHB1Ymxp
YzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdldE1ldGFkYXRhKCkgY29uc3Q7
Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBhY2Nlc3NvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIG9wdGlvbmFsIGJvb2wg
dmFsdWUgPSAxOwotICB2b2lkIGNsZWFyX3ZhbHVlKCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQga1Zh
bHVlRmllbGROdW1iZXIgPSAxOwotICBib29sIHZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3Zh
bHVlKGJvb2wgdmFsdWUpOwotCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19z
Y29wZTpnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlKQotIHByaXZhdGU6Ci0KLSAgOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJuYWxf
bWV0YWRhdGFfOwotICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTsKLSAg
dHlwZWRlZiB2b2lkIEludGVybmFsQXJlbmFDb25zdHJ1Y3RhYmxlXzsKLSAgdHlwZWRlZiB2b2lk
IERlc3RydWN0b3JTa2lwcGFibGVfOwotICBib29sIF9pc19kZWZhdWx0X2luc3RhbmNlXzsKLSAg
Ym9vbCB2YWx1ZV87Ci0gIG11dGFibGUgaW50IF9jYWNoZWRfc2l6ZV87Ci0gIGZyaWVuZCB2b2lk
IExJQlBST1RPQlVGX0VYUE9SVCBwcm90b2J1Zl9BZGREZXNjX2dvb2dsZV8yZnByb3RvYnVmXzJm
d3JhcHBlcnNfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90b2J1Zl9Bc3NpZ25EZXNjX2dv
b2dsZV8yZnByb3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotICBmcmllbmQgdm9pZCBwcm90
b2J1Zl9TaHV0ZG93bkZpbGVfZ29vZ2xlXzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvKCk7
Ci0KLSAgdm9pZCBJbml0QXNEZWZhdWx0SW5zdGFuY2UoKTsKLSAgc3RhdGljIEJvb2xWYWx1ZSog
ZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBMSUJQUk9UT0JV
Rl9FWFBPUlQgU3RyaW5nVmFsdWUgOiBwdWJsaWMgOjpnb29nbGU6OnByb3RvYnVmOjpNZXNzYWdl
IHsKLSBwdWJsaWM6Ci0gIFN0cmluZ1ZhbHVlKCk7Ci0gIHZpcnR1YWwgflN0cmluZ1ZhbHVlKCk7
Ci0KLSAgU3RyaW5nVmFsdWUoY29uc3QgU3RyaW5nVmFsdWUmIGZyb20pOwotCi0gIGlubGluZSBT
dHJpbmdWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFN0cmluZ1ZhbHVlJiBmcm9tKSB7Ci0gICAgQ29w
eUZyb20oZnJvbSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgaW5saW5lIDo6Z29vZ2xl
Ojpwcm90b2J1Zjo6QXJlbmEqIEdldEFyZW5hKCkgY29uc3QgeyByZXR1cm4gR2V0QXJlbmFOb1Zp
cnR1YWwoKTsgfQotICBpbmxpbmUgdm9pZCogR2V0TWF5YmVBcmVuYVBvaW50ZXIoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIE1heWJlQXJlbmFQdHIoKTsKLSAgfQotICBzdGF0aWMgY29uc3QgOjpnb29n
bGU6OnByb3RvYnVmOjpEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCk7Ci0gIHN0YXRpYyBjb25zdCBT
dHJpbmdWYWx1ZSYgZGVmYXVsdF9pbnN0YW5jZSgpOwotCi0gIHZvaWQgVW5zYWZlQXJlbmFTd2Fw
KFN0cmluZ1ZhbHVlKiBvdGhlcik7Ci0gIHZvaWQgU3dhcChTdHJpbmdWYWx1ZSogb3RoZXIpOwot
Ci0gIC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgaW5saW5lIFN0cmluZ1ZhbHVlKiBOZXcoKSBjb25zdCB7IHJl
dHVybiBOZXcoTlVMTCk7IH0KLQotICBTdHJpbmdWYWx1ZSogTmV3KDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25zdCA6Omdvb2dsZTo6
cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9tKGNvbnN0IFN0cmlu
Z1ZhbHVlJiBmcm9tKTsKLSAgdm9pZCBNZXJnZUZyb20oY29uc3QgU3RyaW5nVmFsdWUmIGZyb20p
OwotICB2b2lkIENsZWFyKCk7Ci0gIGJvb2wgSXNJbml0aWFsaXplZCgpIGNvbnN0OwotCi0gIGlu
dCBCeXRlU2l6ZSgpIGNvbnN0OwotICBib29sIE1lcmdlUGFydGlhbEZyb21Db2RlZFN0cmVhbSgK
LSAgICAgIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW86OkNvZGVkSW5wdXRTdHJlYW0qIGlucHV0KTsK
LSAgdm9pZCBTZXJpYWxpemVXaXRoQ2FjaGVkU2l6ZXMoCi0gICAgICA6Omdvb2dsZTo6cHJvdG9i
dWY6OmlvOjpDb2RlZE91dHB1dFN0cmVhbSogb3V0cHV0KSBjb25zdDsKLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjp1aW50OCogU2VyaWFsaXplV2l0aENhY2hlZFNpemVzVG9BcnJheSg6Omdvb2dsZTo6
cHJvdG9idWY6OnVpbnQ4KiBvdXRwdXQpIGNvbnN0OwotICBpbnQgR2V0Q2FjaGVkU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9jYWNoZWRfc2l6ZV87IH0KLSAgcHJpdmF0ZToKLSAgdm9pZCBTaGFyZWRD
dG9yKCk7Ci0gIHZvaWQgU2hhcmVkRHRvcigpOwotICB2b2lkIFNldENhY2hlZFNpemUoaW50IHNp
emUpIGNvbnN0OwotICB2b2lkIEludGVybmFsU3dhcChTdHJpbmdWYWx1ZSogb3RoZXIpOwotICBw
cm90ZWN0ZWQ6Ci0gIGV4cGxpY2l0IFN0cmluZ1ZhbHVlKDo6Z29vZ2xlOjpwcm90b2J1Zjo6QXJl
bmEqIGFyZW5hKTsKLSAgcHJpdmF0ZToKLSAgc3RhdGljIHZvaWQgQXJlbmFEdG9yKHZvaWQqIG9i
amVjdCk7Ci0gIGlubGluZSB2b2lkIFJlZ2lzdGVyQXJlbmFEdG9yKDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmEqIGFyZW5hKTsKLSAgcHJpdmF0ZToKLSAgaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1
Zjo6QXJlbmEqIEdldEFyZW5hTm9WaXJ0dWFsKCkgY29uc3QgewotICAgIHJldHVybiBfaW50ZXJu
YWxfbWV0YWRhdGFfLmFyZW5hKCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQqIE1heWJlQXJlbmFQdHIo
KSBjb25zdCB7Ci0gICAgcmV0dXJuIF9pbnRlcm5hbF9tZXRhZGF0YV8ucmF3X2FyZW5hX3B0cigp
OwotICB9Ci0gIHB1YmxpYzoKLQotICA6Omdvb2dsZTo6cHJvdG9idWY6Ok1ldGFkYXRhIEdldE1l
dGFkYXRhKCkgY29uc3Q7Ci0KLSAgLy8gbmVzdGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBhY2Nlc3NvcnMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8v
IG9wdGlvbmFsIHN0cmluZyB2YWx1ZSA9IDE7Ci0gIHZvaWQgY2xlYXJfdmFsdWUoKTsKLSAgc3Rh
dGljIGNvbnN0IGludCBrVmFsdWVGaWVsZE51bWJlciA9IDE7Ci0gIGNvbnN0IDo6c3RkOjpzdHJp
bmcmIHZhbHVlKCkgY29uc3Q7Ci0gIHZvaWQgc2V0X3ZhbHVlKGNvbnN0IDo6c3RkOjpzdHJpbmcm
IHZhbHVlKTsKLSAgdm9pZCBzZXRfdmFsdWUoY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIHNl
dF92YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUpOwotICA6OnN0ZDo6c3RyaW5n
KiBtdXRhYmxlX3ZhbHVlKCk7Ci0gIDo6c3RkOjpzdHJpbmcqIHJlbGVhc2VfdmFsdWUoKTsKLSAg
dm9pZCBzZXRfYWxsb2NhdGVkX3ZhbHVlKDo6c3RkOjpzdHJpbmcqIHZhbHVlKTsKLSAgOjpzdGQ6
OnN0cmluZyogdW5zYWZlX2FyZW5hX3JlbGVhc2VfdmFsdWUoKTsKLSAgdm9pZCB1bnNhZmVfYXJl
bmFfc2V0X2FsbG9jYXRlZF92YWx1ZSgKLSAgICAgIDo6c3RkOjpzdHJpbmcqIHZhbHVlKTsKLQot
ICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6Z29vZ2xlLnByb3RvYnVm
LlN0cmluZ1ZhbHVlKQotIHByaXZhdGU6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5h
bDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRhdGFfOwotICBmcmll
bmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTsKLSAgdHlwZWRlZiB2b2lkIEludGVy
bmFsQXJlbmFDb25zdHJ1Y3RhYmxlXzsKLSAgdHlwZWRlZiB2b2lkIERlc3RydWN0b3JTa2lwcGFi
bGVfOwotICBib29sIF9pc19kZWZhdWx0X2luc3RhbmNlXzsKLSAgOjpnb29nbGU6OnByb3RvYnVm
OjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgdmFsdWVfOwotICBtdXRhYmxlIGludCBfY2FjaGVk
X3NpemVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZfQWRkRGVz
Y19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQg
cHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8o
KTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnByb3RvYnVm
XzJmd3JhcHBlcnNfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3RhbmNlKCk7
Ci0gIHN0YXRpYyBTdHJpbmdWYWx1ZSogZGVmYXVsdF9pbnN0YW5jZV87Ci19OwotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1jbGFzcyBMSUJQUk9UT0JVRl9FWFBPUlQgQnl0ZXNWYWx1ZSA6IHB1YmxpYyA6Omdv
b2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UgewotIHB1YmxpYzoKLSAgQnl0ZXNWYWx1ZSgpOwotICB2
aXJ0dWFsIH5CeXRlc1ZhbHVlKCk7Ci0KLSAgQnl0ZXNWYWx1ZShjb25zdCBCeXRlc1ZhbHVlJiBm
cm9tKTsKLQotICBpbmxpbmUgQnl0ZXNWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IEJ5dGVzVmFsdWUm
IGZyb20pIHsKLSAgICBDb3B5RnJvbShmcm9tKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQot
ICBpbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmEoKSBjb25zdCB7IHJl
dHVybiBHZXRBcmVuYU5vVmlydHVhbCgpOyB9Ci0gIGlubGluZSB2b2lkKiBHZXRNYXliZUFyZW5h
UG9pbnRlcigpIGNvbnN0IHsKLSAgICByZXR1cm4gTWF5YmVBcmVuYVB0cigpOwotICB9Ci0gIHN0
YXRpYyBjb25zdCA6Omdvb2dsZTo6cHJvdG9idWY6OkRlc2NyaXB0b3IqIGRlc2NyaXB0b3IoKTsK
LSAgc3RhdGljIGNvbnN0IEJ5dGVzVmFsdWUmIGRlZmF1bHRfaW5zdGFuY2UoKTsKLQotICB2b2lk
IFVuc2FmZUFyZW5hU3dhcChCeXRlc1ZhbHVlKiBvdGhlcik7Ci0gIHZvaWQgU3dhcChCeXRlc1Zh
bHVlKiBvdGhlcik7Ci0KLSAgLy8gaW1wbGVtZW50cyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBpbmxpbmUgQnl0ZXNWYWx1ZSogTmV3
KCkgY29uc3QgeyByZXR1cm4gTmV3KE5VTEwpOyB9Ci0KLSAgQnl0ZXNWYWx1ZSogTmV3KDo6Z29v
Z2xlOjpwcm90b2J1Zjo6QXJlbmEqIGFyZW5hKSBjb25zdDsKLSAgdm9pZCBDb3B5RnJvbShjb25z
dCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShj
b25zdCA6Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2UmIGZyb20pOwotICB2b2lkIENvcHlGcm9t
KGNvbnN0IEJ5dGVzVmFsdWUmIGZyb20pOwotICB2b2lkIE1lcmdlRnJvbShjb25zdCBCeXRlc1Zh
bHVlJiBmcm9tKTsKLSAgdm9pZCBDbGVhcigpOwotICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25z
dDsKLQotICBpbnQgQnl0ZVNpemUoKSBjb25zdDsKLSAgYm9vbCBNZXJnZVBhcnRpYWxGcm9tQ29k
ZWRTdHJlYW0oCi0gICAgICA6Omdvb2dsZTo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFt
KiBpbnB1dCk7Ci0gIHZvaWQgU2VyaWFsaXplV2l0aENhY2hlZFNpemVzKAotICAgICAgOjpnb29n
bGU6OnByb3RvYnVmOjppbzo6Q29kZWRPdXRwdXRTdHJlYW0qIG91dHB1dCkgY29uc3Q7Ci0gIDo6
Z29vZ2xlOjpwcm90b2J1Zjo6dWludDgqIFNlcmlhbGl6ZVdpdGhDYWNoZWRTaXplc1RvQXJyYXko
Ojpnb29nbGU6OnByb3RvYnVmOjp1aW50OCogb3V0cHV0KSBjb25zdDsKLSAgaW50IEdldENhY2hl
ZFNpemUoKSBjb25zdCB7IHJldHVybiBfY2FjaGVkX3NpemVfOyB9Ci0gIHByaXZhdGU6Ci0gIHZv
aWQgU2hhcmVkQ3RvcigpOwotICB2b2lkIFNoYXJlZER0b3IoKTsKLSAgdm9pZCBTZXRDYWNoZWRT
aXplKGludCBzaXplKSBjb25zdDsKLSAgdm9pZCBJbnRlcm5hbFN3YXAoQnl0ZXNWYWx1ZSogb3Ro
ZXIpOwotICBwcm90ZWN0ZWQ6Ci0gIGV4cGxpY2l0IEJ5dGVzVmFsdWUoOjpnb29nbGU6OnByb3Rv
YnVmOjpBcmVuYSogYXJlbmEpOwotICBwcml2YXRlOgotICBzdGF0aWMgdm9pZCBBcmVuYUR0b3Io
dm9pZCogb2JqZWN0KTsKLSAgaW5saW5lIHZvaWQgUmVnaXN0ZXJBcmVuYUR0b3IoOjpnb29nbGU6
OnByb3RvYnVmOjpBcmVuYSogYXJlbmEpOwotICBwcml2YXRlOgotICBpbmxpbmUgOjpnb29nbGU6
OnByb3RvYnVmOjpBcmVuYSogR2V0QXJlbmFOb1ZpcnR1YWwoKSBjb25zdCB7Ci0gICAgcmV0dXJu
IF9pbnRlcm5hbF9tZXRhZGF0YV8uYXJlbmEoKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTWF5YmVB
cmVuYVB0cigpIGNvbnN0IHsKLSAgICByZXR1cm4gX2ludGVybmFsX21ldGFkYXRhXy5yYXdfYXJl
bmFfcHRyKCk7Ci0gIH0KLSAgcHVibGljOgotCi0gIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWV0YWRh
dGEgR2V0TWV0YWRhdGEoKSBjb25zdDsKLQotICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIGFjY2Vzc29y
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgLy8gb3B0aW9uYWwgYnl0ZXMgdmFsdWUgPSAxOwotICB2b2lkIGNsZWFyX3ZhbHVlKCk7
Ci0gIHN0YXRpYyBjb25zdCBpbnQga1ZhbHVlRmllbGROdW1iZXIgPSAxOwotICBjb25zdCA6OnN0
ZDo6c3RyaW5nJiB2YWx1ZSgpIGNvbnN0OwotICB2b2lkIHNldF92YWx1ZShjb25zdCA6OnN0ZDo6
c3RyaW5nJiB2YWx1ZSk7Ci0gIHZvaWQgc2V0X3ZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAg
dm9pZCBzZXRfdmFsdWUoY29uc3Qgdm9pZCogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgOjpzdGQ6
OnN0cmluZyogbXV0YWJsZV92YWx1ZSgpOwotICA6OnN0ZDo6c3RyaW5nKiByZWxlYXNlX3ZhbHVl
KCk7Ci0gIHZvaWQgc2V0X2FsbG9jYXRlZF92YWx1ZSg6OnN0ZDo6c3RyaW5nKiB2YWx1ZSk7Ci0g
IDo6c3RkOjpzdHJpbmcqIHVuc2FmZV9hcmVuYV9yZWxlYXNlX3ZhbHVlKCk7Ci0gIHZvaWQgdW5z
YWZlX2FyZW5hX3NldF9hbGxvY2F0ZWRfdmFsdWUoCi0gICAgICA6OnN0ZDo6c3RyaW5nKiB2YWx1
ZSk7Ci0KLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmdvb2dsZS5w
cm90b2J1Zi5CeXRlc1ZhbHVlKQotIHByaXZhdGU6Ci0KLSAgOjpnb29nbGU6OnByb3RvYnVmOjpp
bnRlcm5hbDo6SW50ZXJuYWxNZXRhZGF0YVdpdGhBcmVuYSBfaW50ZXJuYWxfbWV0YWRhdGFfOwot
ICBmcmllbmQgY2xhc3MgOjpnb29nbGU6OnByb3RvYnVmOjpBcmVuYTsKLSAgdHlwZWRlZiB2b2lk
IEludGVybmFsQXJlbmFDb25zdHJ1Y3RhYmxlXzsKLSAgdHlwZWRlZiB2b2lkIERlc3RydWN0b3JT
a2lwcGFibGVfOwotICBib29sIF9pc19kZWZhdWx0X2luc3RhbmNlXzsKLSAgOjpnb29nbGU6OnBy
b3RvYnVmOjppbnRlcm5hbDo6QXJlbmFTdHJpbmdQdHIgdmFsdWVfOwotICBtdXRhYmxlIGludCBf
Y2FjaGVkX3NpemVfOwotICBmcmllbmQgdm9pZCBMSUJQUk9UT0JVRl9FWFBPUlQgcHJvdG9idWZf
QWRkRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJlcHJvdG8oKTsKLSAgZnJpZW5k
IHZvaWQgcHJvdG9idWZfQXNzaWduRGVzY19nb29nbGVfMmZwcm90b2J1Zl8yZndyYXBwZXJzXzJl
cHJvdG8oKTsKLSAgZnJpZW5kIHZvaWQgcHJvdG9idWZfU2h1dGRvd25GaWxlX2dvb2dsZV8yZnBy
b3RvYnVmXzJmd3JhcHBlcnNfMmVwcm90bygpOwotCi0gIHZvaWQgSW5pdEFzRGVmYXVsdEluc3Rh
bmNlKCk7Ci0gIHN0YXRpYyBCeXRlc1ZhbHVlKiBkZWZhdWx0X2luc3RhbmNlXzsKLX07Ci0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWYgIVBST1RPQlVGX0lOTElORV9OT1Rf
SU5fSEVBREVSUwotLy8gRG91YmxlVmFsdWUKLQotLy8gb3B0aW9uYWwgZG91YmxlIHZhbHVlID0g
MTsKLWlubGluZSB2b2lkIERvdWJsZVZhbHVlOjpjbGVhcl92YWx1ZSgpIHsKLSAgdmFsdWVfID0g
MDsKLX0KLWlubGluZSBkb3VibGUgRG91YmxlVmFsdWU6OnZhbHVlKCkgY29uc3QgewotICAvLyBA
QHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5Eb3VibGVW
YWx1ZS52YWx1ZSkKLSAgcmV0dXJuIHZhbHVlXzsKLX0KLWlubGluZSB2b2lkIERvdWJsZVZhbHVl
OjpzZXRfdmFsdWUoZG91YmxlIHZhbHVlKSB7Ci0gIAotICB2YWx1ZV8gPSB2YWx1ZTsKLSAgLy8g
QEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuRG91Ymxl
VmFsdWUudmFsdWUpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRmxvYXRWYWx1ZQotCi0vLyBv
cHRpb25hbCBmbG9hdCB2YWx1ZSA9IDE7Ci1pbmxpbmUgdm9pZCBGbG9hdFZhbHVlOjpjbGVhcl92
YWx1ZSgpIHsKLSAgdmFsdWVfID0gMDsKLX0KLWlubGluZSBmbG9hdCBGbG9hdFZhbHVlOjp2YWx1
ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpnb29n
bGUucHJvdG9idWYuRmxvYXRWYWx1ZS52YWx1ZSkKLSAgcmV0dXJuIHZhbHVlXzsKLX0KLWlubGlu
ZSB2b2lkIEZsb2F0VmFsdWU6OnNldF92YWx1ZShmbG9hdCB2YWx1ZSkgewotICAKLSAgdmFsdWVf
ID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xl
LnByb3RvYnVmLkZsb2F0VmFsdWUudmFsdWUpCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSW50
NjRWYWx1ZQotCi0vLyBvcHRpb25hbCBpbnQ2NCB2YWx1ZSA9IDE7Ci1pbmxpbmUgdm9pZCBJbnQ2
NFZhbHVlOjpjbGVhcl92YWx1ZSgpIHsKLSAgdmFsdWVfID0gR09PR0xFX0xPTkdMT05HKDApOwot
fQotaW5saW5lIDo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50NjQgSW50NjRWYWx1ZTo6dmFsdWUoKSBj
b25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnBy
b3RvYnVmLkludDY0VmFsdWUudmFsdWUpCi0gIHJldHVybiB2YWx1ZV87Ci19Ci1pbmxpbmUgdm9p
ZCBJbnQ2NFZhbHVlOjpzZXRfdmFsdWUoOjpnb29nbGU6OnByb3RvYnVmOjppbnQ2NCB2YWx1ZSkg
ewotICAKLSAgdmFsdWVfID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChm
aWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUudmFsdWUpCi19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotLy8gVUludDY0VmFsdWUKLQotLy8gb3B0aW9uYWwgdWludDY0IHZhbHVlID0gMTsK
LWlubGluZSB2b2lkIFVJbnQ2NFZhbHVlOjpjbGVhcl92YWx1ZSgpIHsKLSAgdmFsdWVfID0gR09P
R0xFX1VMT05HTE9ORygwKTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OnVpbnQ2NCBV
SW50NjRWYWx1ZTo6dmFsdWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2lu
dChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlLnZhbHVlKQotICByZXR1cm4g
dmFsdWVfOwotfQotaW5saW5lIHZvaWQgVUludDY0VmFsdWU6OnNldF92YWx1ZSg6Omdvb2dsZTo6
cHJvdG9idWY6OnVpbnQ2NCB2YWx1ZSkgewotICAKLSAgdmFsdWVfID0gdmFsdWU7Ci0gIC8vIEBA
cHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZh
bHVlLnZhbHVlKQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEludDMyVmFsdWUKLQotLy8gb3B0
aW9uYWwgaW50MzIgdmFsdWUgPSAxOwotaW5saW5lIHZvaWQgSW50MzJWYWx1ZTo6Y2xlYXJfdmFs
dWUoKSB7Ci0gIHZhbHVlXyA9IDA7Ci19Ci1pbmxpbmUgOjpnb29nbGU6OnByb3RvYnVmOjppbnQz
MiBJbnQzMlZhbHVlOjp2YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3Bv
aW50KGZpZWxkX2dldDpnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZS52YWx1ZSkKLSAgcmV0dXJu
IHZhbHVlXzsKLX0KLWlubGluZSB2b2lkIEludDMyVmFsdWU6OnNldF92YWx1ZSg6Omdvb2dsZTo6
cHJvdG9idWY6OmludDMyIHZhbHVlKSB7Ci0gIAotICB2YWx1ZV8gPSB2YWx1ZTsKLSAgLy8gQEBw
cm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUucHJvdG9idWYuSW50MzJWYWx1
ZS52YWx1ZSkKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBVSW50MzJWYWx1ZQotCi0vLyBvcHRp
b25hbCB1aW50MzIgdmFsdWUgPSAxOwotaW5saW5lIHZvaWQgVUludDMyVmFsdWU6OmNsZWFyX3Zh
bHVlKCkgewotICB2YWx1ZV8gPSAwdTsKLX0KLWlubGluZSA6Omdvb2dsZTo6cHJvdG9idWY6OnVp
bnQzMiBVSW50MzJWYWx1ZTo6dmFsdWUoKSBjb25zdCB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlv
bl9wb2ludChmaWVsZF9nZXQ6Z29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlLnZhbHVlKQotICBy
ZXR1cm4gdmFsdWVfOwotfQotaW5saW5lIHZvaWQgVUludDMyVmFsdWU6OnNldF92YWx1ZSg6Omdv
b2dsZTo6cHJvdG9idWY6OnVpbnQzMiB2YWx1ZSkgewotICAKLSAgdmFsdWVfID0gdmFsdWU7Ci0g
IC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xlLnByb3RvYnVmLlVJ
bnQzMlZhbHVlLnZhbHVlKQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEJvb2xWYWx1ZQotCi0v
LyBvcHRpb25hbCBib29sIHZhbHVlID0gMTsKLWlubGluZSB2b2lkIEJvb2xWYWx1ZTo6Y2xlYXJf
dmFsdWUoKSB7Ci0gIHZhbHVlXyA9IGZhbHNlOwotfQotaW5saW5lIGJvb2wgQm9vbFZhbHVlOjp2
YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpn
b29nbGUucHJvdG9idWYuQm9vbFZhbHVlLnZhbHVlKQotICByZXR1cm4gdmFsdWVfOwotfQotaW5s
aW5lIHZvaWQgQm9vbFZhbHVlOjpzZXRfdmFsdWUoYm9vbCB2YWx1ZSkgewotICAKLSAgdmFsdWVf
ID0gdmFsdWU7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXQ6Z29vZ2xl
LnByb3RvYnVmLkJvb2xWYWx1ZS52YWx1ZSkKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBTdHJp
bmdWYWx1ZQotCi0vLyBvcHRpb25hbCBzdHJpbmcgdmFsdWUgPSAxOwotaW5saW5lIHZvaWQgU3Ry
aW5nVmFsdWU6OmNsZWFyX3ZhbHVlKCkgewotICB2YWx1ZV8uQ2xlYXJUb0VtcHR5KCY6Omdvb2ds
ZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgR2V0
QXJlbmFOb1ZpcnR1YWwoKSk7Ci19Ci1pbmxpbmUgY29uc3QgOjpzdGQ6OnN0cmluZyYgU3RyaW5n
VmFsdWU6OnZhbHVlKCkgY29uc3QgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmll
bGRfZ2V0Omdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZS52YWx1ZSkKLSAgcmV0dXJuIHZhbHVl
Xy5HZXQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFk
eUluaXRlZCgpKTsKLX0KLWlubGluZSB2b2lkIFN0cmluZ1ZhbHVlOjpzZXRfdmFsdWUoY29uc3Qg
OjpzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgCi0gIHZhbHVlXy5TZXQoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSwgR2V0
QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9z
ZXQ6Z29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlLnZhbHVlKQotfQotaW5saW5lIHZvaWQgU3Ry
aW5nVmFsdWU6OnNldF92YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICAKLSAgdmFsdWVfLlNl
dCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5p
dGVkKCksIDo6c3RkOjpzdHJpbmcodmFsdWUpLAotICAgICAgICAgICAgICBHZXRBcmVuYU5vVmly
dHVhbCgpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdv
b2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZS52YWx1ZSkKLX0KLWlubGluZSB2b2lkIFN0cmluZ1Zh
bHVlOjpzZXRfdmFsdWUoY29uc3QgY2hhciogdmFsdWUsCi0gICAgc2l6ZV90IHNpemUpIHsKLSAg
Ci0gIHZhbHVlXy5TZXQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3Ry
aW5nQWxyZWFkeUluaXRlZCgpLCA6OnN0ZDo6c3RyaW5nKAotICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4odmFsdWUpLCBzaXplKSwgR2V0QXJlbmFOb1ZpcnR1YWwoKSk7Ci0gIC8v
IEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9zZXRfcG9pbnRlcjpnb29nbGUucHJvdG9i
dWYuU3RyaW5nVmFsdWUudmFsdWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogU3RyaW5nVmFs
dWU6Om11dGFibGVfdmFsdWUoKSB7Ci0gIAotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfbXV0YWJsZTpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUudmFsdWUpCi0gIHJldHVy
biB2YWx1ZV8uTXV0YWJsZSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlT
dHJpbmdBbHJlYWR5SW5pdGVkKCksIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotfQotaW5saW5lIDo6
c3RkOjpzdHJpbmcqIFN0cmluZ1ZhbHVlOjpyZWxlYXNlX3ZhbHVlKCkgewotICAvLyBAQHByb3Rv
Y19pbnNlcnRpb25fcG9pbnQoZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFs
dWUudmFsdWUpCi0gIAotICByZXR1cm4gdmFsdWVfLlJlbGVhc2UoJjo6Z29vZ2xlOjpwcm90b2J1
Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBHZXRBcmVuYU5vVmly
dHVhbCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBTdHJpbmdWYWx1ZTo6dW5zYWZlX2Fy
ZW5hX3JlbGVhc2VfdmFsdWUoKSB7Ci0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVs
ZF91bnNhZmVfYXJlbmFfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUudmFsdWUp
Ci0gIEdPT0dMRV9EQ0hFQ0soR2V0QXJlbmFOb1ZpcnR1YWwoKSAhPSBOVUxMKTsKLSAgCi0gIHJl
dHVybiB2YWx1ZV8uVW5zYWZlQXJlbmFSZWxlYXNlKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVy
bmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwKLSAgICAgIEdldEFyZW5hTm9WaXJ0
dWFsKCkpOwotfQotaW5saW5lIHZvaWQgU3RyaW5nVmFsdWU6OnNldF9hbGxvY2F0ZWRfdmFsdWUo
OjpzdGQ6OnN0cmluZyogdmFsdWUpIHsKLSAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAKLSAg
fSBlbHNlIHsKLSAgICAKLSAgfQotICB2YWx1ZV8uU2V0QWxsb2NhdGVkKCY6Omdvb2dsZTo6cHJv
dG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0ZWQoKSwgdmFsdWUsCi0g
ICAgICBHZXRBcmVuYU5vVmlydHVhbCgpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50
KGZpZWxkX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlLnZhbHVlKQot
fQotaW5saW5lIHZvaWQgU3RyaW5nVmFsdWU6OnVuc2FmZV9hcmVuYV9zZXRfYWxsb2NhdGVkX3Zh
bHVlKAotICAgIDo6c3RkOjpzdHJpbmcqIHZhbHVlKSB7Ci0gIEdPT0dMRV9EQ0hFQ0soR2V0QXJl
bmFOb1ZpcnR1YWwoKSAhPSBOVUxMKTsKLSAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAKLSAg
fSBlbHNlIHsKLSAgICAKLSAgfQotICB2YWx1ZV8uVW5zYWZlQXJlbmFTZXRBbGxvY2F0ZWQoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
LAotICAgICAgdmFsdWUsIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfdW5zYWZlX2FyZW5hX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3Rv
YnVmLlN0cmluZ1ZhbHVlLnZhbHVlKQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEJ5dGVzVmFs
dWUKLQotLy8gb3B0aW9uYWwgYnl0ZXMgdmFsdWUgPSAxOwotaW5saW5lIHZvaWQgQnl0ZXNWYWx1
ZTo6Y2xlYXJfdmFsdWUoKSB7Ci0gIHZhbHVlXy5DbGVhclRvRW1wdHkoJjo6Z29vZ2xlOjpwcm90
b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCBHZXRBcmVuYU5v
VmlydHVhbCgpKTsKLX0KLWlubGluZSBjb25zdCA6OnN0ZDo6c3RyaW5nJiBCeXRlc1ZhbHVlOjp2
YWx1ZSgpIGNvbnN0IHsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX2dldDpn
b29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZS52YWx1ZSkKLSAgcmV0dXJuIHZhbHVlXy5HZXQoJjo6
Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgp
KTsKLX0KLWlubGluZSB2b2lkIEJ5dGVzVmFsdWU6OnNldF92YWx1ZShjb25zdCA6OnN0ZDo6c3Ry
aW5nJiB2YWx1ZSkgewotICAKLSAgdmFsdWVfLlNldCgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRl
cm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIHZhbHVlLCBHZXRBcmVuYU5vVmly
dHVhbCgpKTsKLSAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldDpnb29nbGUu
cHJvdG9idWYuQnl0ZXNWYWx1ZS52YWx1ZSkKLX0KLWlubGluZSB2b2lkIEJ5dGVzVmFsdWU6OnNl
dF92YWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkgewotICAKLSAgdmFsdWVfLlNldCgmOjpnb29nbGU6
OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1wdHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIDo6c3Rk
OjpzdHJpbmcodmFsdWUpLAotICAgICAgICAgICAgICBHZXRBcmVuYU5vVmlydHVhbCgpKTsKLSAg
Ly8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGZpZWxkX3NldF9jaGFyOmdvb2dsZS5wcm90b2J1
Zi5CeXRlc1ZhbHVlLnZhbHVlKQotfQotaW5saW5lIHZvaWQgQnl0ZXNWYWx1ZTo6c2V0X3ZhbHVl
KGNvbnN0IHZvaWQqIHZhbHVlLAotICAgIHNpemVfdCBzaXplKSB7Ci0gIAotICB2YWx1ZV8uU2V0
KCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0FscmVhZHlJbml0
ZWQoKSwgOjpzdGQ6OnN0cmluZygKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KHZhbHVlKSwgc2l6ZSksIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotICAvLyBAQHByb3RvY19pbnNl
cnRpb25fcG9pbnQoZmllbGRfc2V0X3BvaW50ZXI6Z29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUu
dmFsdWUpCi19Ci1pbmxpbmUgOjpzdGQ6OnN0cmluZyogQnl0ZXNWYWx1ZTo6bXV0YWJsZV92YWx1
ZSgpIHsKLSAgCi0gIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9tdXRhYmxlOmdv
b2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlLnZhbHVlKQotICByZXR1cm4gdmFsdWVfLk11dGFibGUo
Jjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRl
ZCgpLCBHZXRBcmVuYU5vVmlydHVhbCgpKTsKLX0KLWlubGluZSA6OnN0ZDo6c3RyaW5nKiBCeXRl
c1ZhbHVlOjpyZWxlYXNlX3ZhbHVlKCkgewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQo
ZmllbGRfcmVsZWFzZTpnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZS52YWx1ZSkKLSAgCi0gIHJl
dHVybiB2YWx1ZV8uUmVsZWFzZSgmOjpnb29nbGU6OnByb3RvYnVmOjppbnRlcm5hbDo6R2V0RW1w
dHlTdHJpbmdBbHJlYWR5SW5pdGVkKCksIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotfQotaW5saW5l
IDo6c3RkOjpzdHJpbmcqIEJ5dGVzVmFsdWU6OnVuc2FmZV9hcmVuYV9yZWxlYXNlX3ZhbHVlKCkg
ewotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfdW5zYWZlX2FyZW5hX3JlbGVh
c2U6Z29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUudmFsdWUpCi0gIEdPT0dMRV9EQ0hFQ0soR2V0
QXJlbmFOb1ZpcnR1YWwoKSAhPSBOVUxMKTsKLSAgCi0gIHJldHVybiB2YWx1ZV8uVW5zYWZlQXJl
bmFSZWxlYXNlKCY6Omdvb2dsZTo6cHJvdG9idWY6OmludGVybmFsOjpHZXRFbXB0eVN0cmluZ0Fs
cmVhZHlJbml0ZWQoKSwKLSAgICAgIEdldEFyZW5hTm9WaXJ0dWFsKCkpOwotfQotaW5saW5lIHZv
aWQgQnl0ZXNWYWx1ZTo6c2V0X2FsbG9jYXRlZF92YWx1ZSg6OnN0ZDo6c3RyaW5nKiB2YWx1ZSkg
ewotICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgIAotICB9IGVsc2UgewotICAgIAotICB9Ci0g
IHZhbHVlXy5TZXRBbGxvY2F0ZWQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJuYWw6OkdldEVt
cHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLCB2YWx1ZSwKLSAgICAgIEdldEFyZW5hTm9WaXJ0dWFs
KCkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0X2FsbG9jYXRlZDpn
b29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZS52YWx1ZSkKLX0KLWlubGluZSB2b2lkIEJ5dGVzVmFs
dWU6OnVuc2FmZV9hcmVuYV9zZXRfYWxsb2NhdGVkX3ZhbHVlKAotICAgIDo6c3RkOjpzdHJpbmcq
IHZhbHVlKSB7Ci0gIEdPT0dMRV9EQ0hFQ0soR2V0QXJlbmFOb1ZpcnR1YWwoKSAhPSBOVUxMKTsK
LSAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAKLSAgfSBlbHNlIHsKLSAgICAKLSAgfQotICB2
YWx1ZV8uVW5zYWZlQXJlbmFTZXRBbGxvY2F0ZWQoJjo6Z29vZ2xlOjpwcm90b2J1Zjo6aW50ZXJu
YWw6OkdldEVtcHR5U3RyaW5nQWxyZWFkeUluaXRlZCgpLAotICAgICAgdmFsdWUsIEdldEFyZW5h
Tm9WaXJ0dWFsKCkpOwotICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfdW5zYWZl
X2FyZW5hX3NldF9hbGxvY2F0ZWQ6Z29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWUudmFsdWUpCi19
Ci0KLSNlbmRpZiAgLy8gIVBST1RPQlVGX0lOTElORV9OT1RfSU5fSEVBREVSUwotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLQotLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29w
ZSkKLQotfSAgLy8gbmFtZXNwYWNlIHByb3RvYnVmCi19ICAvLyBuYW1lc3BhY2UgZ29vZ2xlCi0K
LS8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCi0KLSNlbmRpZiAgLy8g
UFJPVE9CVUZfZ29vZ2xlXzJmcHJvdG9idWZfMmZ3cmFwcGVyc18yZXByb3RvX19JTkNMVURFRApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9wcm90b2J1Zi9zcmMvZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMvZ29vZ2xl
L3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
ODI4YWQ5YWU5MzkxYTAxMzRjMWRmNmE5ZTNhNmQwMDEyYmZiYzVjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVy
cy5wcm90bworKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vLyBQcm90b2NvbCBCdWZm
ZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKLS8vIENvcHlyaWdodCAyMDA4
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gaHR0cHM6Ly9kZXZlbG9wZXJz
Lmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotLy8gV3JhcHBlcnMgZm9yIHByaW1pdGl2ZSAobm9uLW1lc3Nh
Z2UpIHR5cGVzLiBUaGVzZSB0eXBlcyBhcmUgdXNlZnVsCi0vLyBmb3IgZW1iZWRkaW5nIHByaW1p
dGl2ZXMgaW4gdGhlIGBnb29nbGUucHJvdG9idWYuQW55YCB0eXBlIGFuZCBmb3IgcGxhY2VzCi0v
LyB3aGVyZSB3ZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGFic2VuY2Ugb2YgYSBw
cmltaXRpdmUKLS8vIHR5cGVkIGZpZWxkIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZS4KLQotc3ludGF4
ID0gInByb3RvMyI7Ci0KLXBhY2thZ2UgZ29vZ2xlLnByb3RvYnVmOwotCi1vcHRpb24gY3NoYXJw
X25hbWVzcGFjZSA9ICJHb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXMiOwotb3B0aW9uIGNj
X2VuYWJsZV9hcmVuYXMgPSB0cnVlOwotb3B0aW9uIGdvX3BhY2thZ2UgPSAiZ2l0aHViLmNvbS9n
b2xhbmcvcHJvdG9idWYvcHR5cGVzL3dyYXBwZXJzIjsKLW9wdGlvbiBqYXZhX3BhY2thZ2UgPSAi
Y29tLmdvb2dsZS5wcm90b2J1ZiI7Ci1vcHRpb24gamF2YV9vdXRlcl9jbGFzc25hbWUgPSAiV3Jh
cHBlcnNQcm90byI7Ci1vcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7Ci1vcHRpb24g
amF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2ggPSB0cnVlOwotb3B0aW9uIG9iamNfY2xhc3Nf
cHJlZml4ID0gIkdQQiI7Ci0KLS8vIFdyYXBwZXIgbWVzc2FnZSBmb3IgYGRvdWJsZWAuCi0vLwot
Ly8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBEb3VibGVWYWx1ZWAgaXMgSlNPTiBudW1i
ZXIuCi1tZXNzYWdlIERvdWJsZVZhbHVlIHsKLSAgLy8gVGhlIGRvdWJsZSB2YWx1ZS4KLSAgZG91
YmxlIHZhbHVlID0gMTsKLX0KLQotLy8gV3JhcHBlciBtZXNzYWdlIGZvciBgZmxvYXRgLgotLy8K
LS8vIFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgRmxvYXRWYWx1ZWAgaXMgSlNPTiBudW1i
ZXIuCi1tZXNzYWdlIEZsb2F0VmFsdWUgewotICAvLyBUaGUgZmxvYXQgdmFsdWUuCi0gIGZsb2F0
IHZhbHVlID0gMTsKLX0KLQotLy8gV3JhcHBlciBtZXNzYWdlIGZvciBgaW50NjRgLgotLy8KLS8v
IFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgSW50NjRWYWx1ZWAgaXMgSlNPTiBzdHJpbmcu
Ci1tZXNzYWdlIEludDY0VmFsdWUgewotICAvLyBUaGUgaW50NjQgdmFsdWUuCi0gIGludDY0IHZh
bHVlID0gMTsKLX0KLQotLy8gV3JhcHBlciBtZXNzYWdlIGZvciBgdWludDY0YC4KLS8vCi0vLyBU
aGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgYFVJbnQ2NFZhbHVlYCBpcyBKU09OIHN0cmluZy4K
LW1lc3NhZ2UgVUludDY0VmFsdWUgewotICAvLyBUaGUgdWludDY0IHZhbHVlLgotICB1aW50NjQg
dmFsdWUgPSAxOwotfQotCi0vLyBXcmFwcGVyIG1lc3NhZ2UgZm9yIGBpbnQzMmAuCi0vLwotLy8g
VGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBJbnQzMlZhbHVlYCBpcyBKU09OIG51bWJlci4K
LW1lc3NhZ2UgSW50MzJWYWx1ZSB7Ci0gIC8vIFRoZSBpbnQzMiB2YWx1ZS4KLSAgaW50MzIgdmFs
dWUgPSAxOwotfQotCi0vLyBXcmFwcGVyIG1lc3NhZ2UgZm9yIGB1aW50MzJgLgotLy8KLS8vIFRo
ZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgVUludDMyVmFsdWVgIGlzIEpTT04gbnVtYmVyLgot
bWVzc2FnZSBVSW50MzJWYWx1ZSB7Ci0gIC8vIFRoZSB1aW50MzIgdmFsdWUuCi0gIHVpbnQzMiB2
YWx1ZSA9IDE7Ci19Ci0KLS8vIFdyYXBwZXIgbWVzc2FnZSBmb3IgYGJvb2xgLgotLy8KLS8vIFRo
ZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgQm9vbFZhbHVlYCBpcyBKU09OIGB0cnVlYCBhbmQg
YGZhbHNlYC4KLW1lc3NhZ2UgQm9vbFZhbHVlIHsKLSAgLy8gVGhlIGJvb2wgdmFsdWUuCi0gIGJv
b2wgdmFsdWUgPSAxOwotfQotCi0vLyBXcmFwcGVyIG1lc3NhZ2UgZm9yIGBzdHJpbmdgLgotLy8K
LS8vIFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBgU3RyaW5nVmFsdWVgIGlzIEpTT04gc3Ry
aW5nLgotbWVzc2FnZSBTdHJpbmdWYWx1ZSB7Ci0gIC8vIFRoZSBzdHJpbmcgdmFsdWUuCi0gIHN0
cmluZyB2YWx1ZSA9IDE7Ci19Ci0KLS8vIFdyYXBwZXIgbWVzc2FnZSBmb3IgYGJ5dGVzYC4KLS8v
Ci0vLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgYEJ5dGVzVmFsdWVgIGlzIEpTT04gc3Ry
aW5nLgotbWVzc2FnZSBCeXRlc1ZhbHVlIHsKLSAgLy8gVGhlIGJ5dGVzIHZhbHVlLgotICBieXRl
cyB2YWx1ZSA9IDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Rlc3RzLnNoIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi90ZXN0cy5zaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggNmE5NDM5YTU1MTViY2M5OTgyZTRkODQyN2QxODQxODU4MGJj
NDAyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Rlc3Rz
LnNoCisrKyAvZGV2L251bGwKQEAgLTEsMzQ3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jCi0jIEJ1
aWxkIGFuZCBydW5zIHRlc3RzIGZvciB0aGUgcHJvdG9idWYgcHJvamVjdC4gIFRoZSB0ZXN0cyBh
cyB3cml0dGVuIGhlcmUgYXJlCi0jIHVzZWQgYnkgYm90aCBKZW5raW5zIGFuZCBUcmF2aXMsIHRo
b3VnaCBzb21lIHNwZWNpYWxpemVkIGxvZ2ljIGlzIHJlcXVpcmVkIHRvCi0jIGhhbmRsZSB0aGUg
ZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtLgotCi1vbl90cmF2aXMoKSB7Ci0gIGlmIFsgIiRUUkFW
SVMiID09ICJ0cnVlIiBdOyB0aGVuCi0gICAgIiRAIgotICBmaQotfQotCi0jIEZvciB3aGVuIHNv
bWUgb3RoZXIgdGVzdCBuZWVkcyB0aGUgQysrIG1haW4gYnVpbGQsIGluY2x1ZGluZyBwcm90b2Mg
YW5kCi0jIGxpYnByb3RvYnVmLgotaW50ZXJuYWxfYnVpbGRfY3BwKCkgewotICBpZiBbIC1mIHNy
Yy9wcm90b2MgXTsgdGhlbgotICAgICMgQWxyZWFkeSBidWlsdC4KLSAgICByZXR1cm4KLSAgZmkK
LQotICBpZiBbWyAkKHVuYW1lIC1zKSA9PSAiTGludXgiICYmICIkVFJBVklTIiA9PSAidHJ1ZSIg
XV07IHRoZW4KLSAgICAjIEluc3RhbGwgR0NDIDQuOCB0byByZXBsYWNlIHRoZSBkZWZhdWx0IEdD
QyA0LjYuIFdlIG5lZWQgNC44IGZvciBtb3JlCi0gICAgIyBkZWNlbnQgQysrIDExIHN1cHBvcnQg
aW4gb3JkZXIgdG8gY29tcGlsZSBjb25mb3JtYW5jZSB0ZXN0cy4KLSAgICBzdWRvIGFkZC1hcHQt
cmVwb3NpdG9yeSBwcGE6dWJ1bnR1LXRvb2xjaGFpbi1yL3Rlc3QgLXkKLSAgICBzdWRvIGFwdC1n
ZXQgdXBkYXRlIC1xcQotICAgIHN1ZG8gYXB0LWdldCBpbnN0YWxsIC1xcSBnKystNC44Ci0gICAg
ZXhwb3J0IENYWD0iZysrLTQuOCIgQ0M9ImdjYy00LjgiCi0gIGZpCi0KLSAgLi9hdXRvZ2VuLnNo
Ci0gIC4vY29uZmlndXJlCi0gIG1ha2UgLWoyCi19Ci0KLWJ1aWxkX2NwcCgpIHsKLSAgaW50ZXJu
YWxfYnVpbGRfY3BwCi0gIG1ha2UgY2hlY2sgLWoyCi0gIGNkIGNvbmZvcm1hbmNlICYmIG1ha2Ug
dGVzdF9jcHAgJiYgY2QgLi4KLQotICAjIFZlcmlmeSBiZW5jaG1hcmtpbmcgY29kZSBjYW4gYnVp
bGQgc3VjY2Vzc2Z1bGx5LgotICBjZCBiZW5jaG1hcmtzICYmIG1ha2UgJiYgLi9nZW5lcmF0ZS1k
YXRhc2V0cyAmJiBjZCAuLgotfQotCi1idWlsZF9jcHBfZGlzdGNoZWNrKCkgewotICAuL2F1dG9n
ZW4uc2gKLSAgLi9jb25maWd1cmUKLSAgbWFrZSBkaXN0Y2hlY2sgLWoyCi19Ci0KLWJ1aWxkX2Nz
aGFycCgpIHsKLSAgIyBKdXN0IGZvciB0aGUgY29uZm9ybWFuY2UgdGVzdHMuIFdlIGRvbid0IGN1
cnJlbnRseQotICAjIG5lZWQgdG8gcmVhbGx5IGJ1aWxkIHByb3RvYywgYnV0IGl0J3Mgc2ltcGxl
c3QgdG8ga2VlcCB3aXRoIHRoZQotICAjIGNvbnZlbnRpb25zIG9mIHRoZSBvdGhlciBidWlsZHMu
Ci0gIGludGVybmFsX2J1aWxkX2NwcAotICBOVUdFVD0vdXNyL2xvY2FsL2Jpbi9udWdldC5leGUK
LQotICBpZiBbICIkVFJBVklTIiA9PSAidHJ1ZSIgXTsgdGhlbgotICAgICMgSW5zdGFsbCBsYXRl
c3QgdmVyc2lvbiBvZiBNb25vCi0gICAgc3VkbyBhcHQta2V5IGFkdiAtLWtleXNlcnZlciBrZXlz
ZXJ2ZXIudWJ1bnR1LmNvbSAtLXJlY3Yta2V5cyAzRkE3RTAzMjgwODFCRkY2QTE0REEyOUFBNkEx
OUIzOEQzRDgzMUVGCi0gICAgZWNobyAiZGViIGh0dHA6Ly9kb3dubG9hZC5tb25vLXByb2plY3Qu
Y29tL3JlcG8vZGViaWFuIHdoZWV6eSBtYWluIiB8IHN1ZG8gdGVlIC9ldGMvYXB0L3NvdXJjZXMu
bGlzdC5kL21vbm8teGFtYXJpbi5saXN0Ci0gICAgZWNobyAiZGViIGh0dHA6Ly9kb3dubG9hZC5t
b25vLXByb2plY3QuY29tL3JlcG8vZGViaWFuIHdoZWV6eS1saWJ0aWZmLWNvbXBhdCBtYWluIiB8
IHN1ZG8gdGVlIC1hIC9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL21vbm8teGFtYXJpbi5saXN0Ci0g
ICAgc3VkbyBhcHQtZ2V0IHVwZGF0ZSAtcXEKLSAgICBzdWRvIGFwdC1nZXQgaW5zdGFsbCAtcXEg
bW9uby1kZXZlbCByZWZlcmVuY2Vhc3NlbWJsaWVzLXBjbCBudW5pdAotICAgIHdnZXQgd3d3Lm51
Z2V0Lm9yZy9OdUdldC5leGUgLU8gbnVnZXQuZXhlCi0gICAgTlVHRVQ9Li4vLi4vbnVnZXQuZXhl
Ci0gIGZpCi0KLSAgKGNkIGNzaGFycC9zcmM7IG1vbm8gJE5VR0VUIHJlc3RvcmUpCi0gIGNzaGFy
cC9idWlsZGFsbC5zaAotICBjZCBjb25mb3JtYW5jZSAmJiBtYWtlIHRlc3RfY3NoYXJwICYmIGNk
IC4uCi19Ci0KLWJ1aWxkX2dvbGFuZygpIHsKLSAgIyBHbyBidWlsZCBuZWVkcyBgcHJvdG9jYC4K
LSAgaW50ZXJuYWxfYnVpbGRfY3BwCi0gICMgQWRkIHByb3RvYyB0byB0aGUgcGF0aCBzbyB0aGF0
IHRoZSBleGFtcGxlcyBidWlsZCBmaW5kcyBpdC4KLSAgZXhwb3J0IFBBVEg9ImBwd2RgL3NyYzok
UEFUSCIKLQotICAjIEluc3RhbGwgR28gYW5kIHRoZSBHbyBwcm90b2J1ZiBjb21waWxlciBwbHVn
aW4uCi0gIHN1ZG8gYXB0LWdldCB1cGRhdGUgLXFxCi0gIHN1ZG8gYXB0LWdldCBpbnN0YWxsIC1x
cSBnb2xhbmcKLSAgZXhwb3J0IEdPUEFUSD0iJEhPTUUvZ29jb2RlIgotICBta2RpciAtcCAiJEdP
UEFUSC9zcmMvZ2l0aHViLmNvbS9nb29nbGUiCi0gIGxuIC1zICJgcHdkYCIgIiRHT1BBVEgvc3Jj
L2dpdGh1Yi5jb20vZ29vZ2xlL3Byb3RvYnVmIgotICBleHBvcnQgUEFUSD0iJEdPUEFUSC9iaW46
JFBBVEgiCi0gIGdvIGdldCBnaXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90b2MtZ2VuLWdv
Ci0KLSAgY2QgZXhhbXBsZXMgJiYgbWFrZSBnb3Rlc3QgJiYgY2QgLi4KLX0KLQotdXNlX2phdmEo
KSB7Ci0gIHZlcnNpb249JDEKLSAgY2FzZSAiJHZlcnNpb24iIGluCi0gICAgamRrNikKLSAgICAg
IG9uX3RyYXZpcyBzdWRvIGFwdC1nZXQgaW5zdGFsbCBvcGVuamRrLTYtamRrCi0gICAgICBleHBv
cnQgUEFUSD0vdXNyL2xpYi9qdm0vamF2YS02LW9wZW5qZGstYW1kNjQvYmluOiRQQVRICi0gICAg
ICA7OwotICAgIGpkazcpCi0gICAgICBvbl90cmF2aXMgc3VkbyBhcHQtZ2V0IGluc3RhbGwgb3Bl
bmpkay03LWpkawotICAgICAgZXhwb3J0IFBBVEg9L3Vzci9saWIvanZtL2phdmEtNy1vcGVuamRr
LWFtZDY0L2JpbjokUEFUSAotICAgICAgOzsKLSAgICBvcmFjbGU3KQotICAgICAgaWYgWyAiJFRS
QVZJUyIgPT0gInRydWUiIF07IHRoZW4KLSAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgcHl0
aG9uLXNvZnR3YXJlLXByb3BlcnRpZXMgIyBmb3IgYXB0LWFkZC1yZXBvc2l0b3J5Ci0gICAgICAg
IGVjaG8gIm9yYWNsZS1qYXZhNy1pbnN0YWxsZXIgc2hhcmVkL2FjY2VwdGVkLW9yYWNsZS1saWNl
bnNlLXYxLTEgc2VsZWN0IHRydWUiIHwgXAotICAgICAgICAgIHN1ZG8gZGViY29uZi1zZXQtc2Vs
ZWN0aW9ucwotICAgICAgICB5ZXMgfCBzdWRvIGFwdC1hZGQtcmVwb3NpdG9yeSBwcGE6d2VidXBk
OHRlYW0vamF2YQotICAgICAgICB5ZXMgfCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBvcmFjbGUtamF2
YTctaW5zdGFsbGVyCi0gICAgICBmaTsKLSAgICAgIGV4cG9ydCBQQVRIPS91c3IvbGliL2p2bS9q
YXZhLTctb3JhY2xlL2JpbjokUEFUSAotICAgICAgOzsKLSAgZXNhYwotCi0gIGlmIFsgIiRUUkFW
SVMiICE9ICJ0cnVlIiBdOyB0aGVuCi0gICAgTUFWRU5fTE9DQUxfUkVQT1NJVE9SWT0vdmFyL21h
dmVuX2xvY2FsX3JlcG9zaXRvcnkKLSAgICBNVk49IiRNVk4gLWUgLVggLS1vZmZsaW5lIC1EbWF2
ZW4ucmVwby5sb2NhbD0kTUFWRU5fTE9DQUxfUkVQT1NJVE9SWSIKLSAgZmk7Ci0KLSAgd2hpY2gg
amF2YQotICBqYXZhIC12ZXJzaW9uCi19Ci0KLSMgLS1iYXRjaC1tb2RlIHN1cHJlc3NlcyBkb3du
bG9hZCBwcm9ncmVzcyBvdXRwdXQgdGhhdCBzcGFtcyB0aGUgbG9ncy4KLU1WTj0ibXZuIC0tYmF0
Y2gtbW9kZSIKLQotYnVpbGRfamF2YSgpIHsKLSAgdmVyc2lvbj0kMQotICBkaXI9amF2YV8kdmVy
c2lvbgotICAjIEphdmEgYnVpbGQgbmVlZHMgYHByb3RvY2AuCi0gIGludGVybmFsX2J1aWxkX2Nw
cAotICBjcCAtciBqYXZhICRkaXIKLSAgY2QgJGRpciAmJiAkTVZOIGNsZWFuICYmICRNVk4gdGVz
dAotICBjZCAuLi8uLgotfQotCi0jIFRoZSBjb25mb3JtYW5jZSB0ZXN0cyBhcmUgaGFyZC1jb2Rl
ZCB0byB3b3JrIHdpdGggdGhlICRST09UL2phdmEgZGlyZWN0b3J5LgotIyBTbyB0aGlzIGNhbid0
IHJ1biBpbiBwYXJhbGxlbCB3aXRoIHR3byBkaWZmZXJlbnQgc2V0cyBvZiB0ZXN0cy4KLWJ1aWxk
X2phdmFfd2l0aF9jb25mb3JtYW5jZV90ZXN0cygpIHsKLSAgIyBKYXZhIGJ1aWxkIG5lZWRzIGBw
cm90b2NgLgotICBpbnRlcm5hbF9idWlsZF9jcHAKLSAgY2QgamF2YSAmJiAkTVZOIHRlc3QgJiYg
JE1WTiBpbnN0YWxsCi0gIGNkIHV0aWwgJiYgJE1WTiBwYWNrYWdlIGFzc2VtYmx5OnNpbmdsZQot
ICBjZCAuLi8uLgotICBjZCBjb25mb3JtYW5jZSAmJiBtYWtlIHRlc3RfamF2YSAmJiBjZCAuLgot
fQotCi1idWlsZF9qYXZhbmFubygpIHsKLSAgIyBKYXZhIGJ1aWxkIG5lZWRzIGBwcm90b2NgLgot
ICBpbnRlcm5hbF9idWlsZF9jcHAKLSAgY2QgamF2YW5hbm8gJiYgJE1WTiB0ZXN0ICYmIGNkIC4u
Ci19Ci0KLWJ1aWxkX2phdmFfamRrNigpIHsKLSAgdXNlX2phdmEgamRrNgotICBidWlsZF9qYXZh
IGpkazYKLX0KLWJ1aWxkX2phdmFfamRrNygpIHsKLSAgdXNlX2phdmEgamRrNwotICBidWlsZF9q
YXZhX3dpdGhfY29uZm9ybWFuY2VfdGVzdHMKLX0KLWJ1aWxkX2phdmFfb3JhY2xlNygpIHsKLSAg
dXNlX2phdmEgb3JhY2xlNwotICBidWlsZF9qYXZhIG9yYWNsZTcKLX0KLQotYnVpbGRfamF2YW5h
bm9famRrNigpIHsKLSAgdXNlX2phdmEgamRrNgotICBidWlsZF9qYXZhbmFubwotfQotYnVpbGRf
amF2YW5hbm9famRrNygpIHsKLSAgdXNlX2phdmEgamRrNwotICBidWlsZF9qYXZhbmFubwotfQot
YnVpbGRfamF2YW5hbm9fb3JhY2xlNygpIHsKLSAgdXNlX2phdmEgb3JhY2xlNwotICBidWlsZF9q
YXZhbmFubwotfQotCi1pbnRlcm5hbF9pbnN0YWxsX3B5dGhvbl9kZXBzKCkgewotICBpZiBbICIk
VFJBVklTIiAhPSAidHJ1ZSIgXTsgdGhlbgotICAgIHJldHVybjsKLSAgZmkKLSAgIyBJbnN0YWxs
IHRveCAoT1MgWCBkb2Vzbid0IGhhdmUgcGlwKS4KLSAgaWYgWyAkKHVuYW1lIC1zKSA9PSAiRGFy
d2luIiBdOyB0aGVuCi0gICAgc3VkbyBlYXN5X2luc3RhbGwgdG94Ci0gIGVsc2UKLSAgICBzdWRv
IHBpcCBpbnN0YWxsIHRveAotICBmaQotICAjIE9ubHkgaW5zdGFsbCBQeXRob24yLjYvMy54IG9u
IExpbnV4LgotICBpZiBbICQodW5hbWUgLXMpID09ICJMaW51eCIgXTsgdGhlbgotICAgIHN1ZG8g
YXB0LWdldCBpbnN0YWxsIC15IHB5dGhvbi1zb2Z0d2FyZS1wcm9wZXJ0aWVzICMgZm9yIGFwdC1h
ZGQtcmVwb3NpdG9yeQotICAgIHN1ZG8gYXB0LWFkZC1yZXBvc2l0b3J5IC15IHBwYTpma3J1bGwv
ZGVhZHNuYWtlcwotICAgIHN1ZG8gYXB0LWdldCB1cGRhdGUgLXFxCi0gICAgc3VkbyBhcHQtZ2V0
IGluc3RhbGwgLXkgcHl0aG9uMi42IHB5dGhvbjIuNi1kZXYKLSAgICBzdWRvIGFwdC1nZXQgaW5z
dGFsbCAteSBweXRob24zLjMgcHl0aG9uMy4zLWRldgotICAgIHN1ZG8gYXB0LWdldCBpbnN0YWxs
IC15IHB5dGhvbjMuNCBweXRob24zLjQtZGV2Ci0gIGZpCi19Ci0KLWludGVybmFsX29iamVjdGl2
ZWNfY29tbW9uICgpIHsKLSAgIyBNYWtlIHN1cmUgeGN0b29sIGlzIHVwIHRvIGRhdGUuIEFkYXB0
ZWQgZnJvbQotICAjICBodHRwOi8vZG9jcy50cmF2aXMtY2kuY29tL3VzZXIvb3N4LWNpLWVudmly
b25tZW50LwotICAjIFdlIGRvbid0IHVzZSBhIGJlZm9yZV9pbnN0YWxsIGJlY2F1c2Ugd2UgdGVz
dCBtdWx0aXBsZSBPU2VzLgotICBicmV3IHVwZGF0ZQotICBicmV3IG91dGRhdGVkIHhjdG9vbCB8
fCBicmV3IHVwZ3JhZGUgeGN0b29sCi0gICMgUmV1c2VkIHRoZSBidWlsZCBzY3JpcHQgdGhhdCB0
YWtlcyBjYXJlIG9mIGNvbmZpZ3VyaW5nIGFuZCBlbnN1cmluZyB0aGluZ3MKLSAgIyBhcmUgdXAg
dG8gZGF0ZS4gWGNvZGUgYW5kIGNvbmZvcm1hbmNlIHRlc3RzIHdpbGwgYmUgZGlyZWN0bHkgaW52
b2tlZC4KLSAgb2JqZWN0aXZlYy9EZXZUb29scy9mdWxsX21hY19idWlsZC5zaCBcCi0gICAgICAt
LWNvcmUtb25seSAtLXNraXAteGNvZGUgLS1za2lwLW9iamMtY29uZm9ybWFuY2UKLX0KLQotaW50
ZXJuYWxfeGN0b29sX2RlYnVnX2FuZF9yZWxlYXNlKCkgewotICAjIEFsd2F5cyB1c2UgLXJlcG9y
dGVyIHBsYWluIHRvIGF2b2lkIGVzY2FwZSBjb2RlcyBpbiBvdXRwdXQgKG1ha2VzIHRyYXZpcwot
ICAjIGxvZ3MgZWFzaWVyIHRvIHJlYWQpLgotICB4Y3Rvb2wgLXJlcG9ydGVyIHBsYWluIC1jb25m
aWd1cmF0aW9uIERlYnVnICIkQCIKLSAgeGN0b29sIC1yZXBvcnRlciBwbGFpbiAtY29uZmlndXJh
dGlvbiBSZWxlYXNlICIkQCIKLX0KLQotYnVpbGRfb2JqZWN0aXZlY19pb3MoKSB7Ci0gIGludGVy
bmFsX29iamVjdGl2ZWNfY29tbW9uCi0gICMgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3hj
dG9vbC9pc3N1ZXMvNTA5IC0gdW5saWtlIHhjb2RlYnVpbGQsIHhjdG9vbAotICAjIGRvZXNuJ3Qg
c3VwcG9ydCA+MSBkZXN0aW5hdGlvbiwgc28gd2UgaGF2ZSB0byBidWlsZCBmaXJzdCBhbmQgdGhl
biBydW4gdGhlCi0gICMgdGVzdHMgb25lIGRlc3RpbmF0aW9uIGF0IGEgdGltZS4KLSAgaW50ZXJu
YWxfeGN0b29sX2RlYnVnX2FuZF9yZWxlYXNlIFwKLSAgICAtcHJvamVjdCBvYmplY3RpdmVjL1By
b3RvY29sQnVmZmVyc19pT1MueGNvZGVwcm9qIFwKLSAgICAtc2NoZW1lIFByb3RvY29sQnVmZmVy
cyBcCi0gICAgLXNkayBpcGhvbmVzaW11bGF0b3IgXAotICAgIGJ1aWxkLXRlc3RzCi0gIElPU19E
RVNUSU5BVElPTlM9KAotICAgICJwbGF0Zm9ybT1pT1MgU2ltdWxhdG9yLG5hbWU9aVBob25lIDRz
LE9TPTguMSIgIyAzMmJpdAotICAgICJwbGF0Zm9ybT1pT1MgU2ltdWxhdG9yLG5hbWU9aVBob25l
IDYsT1M9OS4yIiAjIDY0Yml0Ci0gICAgInBsYXRmb3JtPWlPUyBTaW11bGF0b3IsbmFtZT1pUGFk
IDIsT1M9OC4xIiAjIDMyYml0Ci0gICAgInBsYXRmb3JtPWlPUyBTaW11bGF0b3IsbmFtZT1pUGFk
IEFpcixPUz05LjIiICMgNjRiaXQKLSAgKQotICBmb3IgaSBpbiAiJHtJT1NfREVTVElOQVRJT05T
W0BdfSIgOyBkbwotICAgIGludGVybmFsX3hjdG9vbF9kZWJ1Z19hbmRfcmVsZWFzZSBcCi0gICAg
ICAtcHJvamVjdCBvYmplY3RpdmVjL1Byb3RvY29sQnVmZmVyc19pT1MueGNvZGVwcm9qIFwKLSAg
ICAgIC1zY2hlbWUgUHJvdG9jb2xCdWZmZXJzIFwKLSAgICAgIC1zZGsgaXBob25lc2ltdWxhdG9y
IFwKLSAgICAgIC1kZXN0aW5hdGlvbiAiJHtpfSIgXAotICAgICAgcnVuLXRlc3RzCi0gIGRvbmUK
LX0KLQotYnVpbGRfb2JqZWN0aXZlY19vc3goKSB7Ci0gIGludGVybmFsX29iamVjdGl2ZWNfY29t
bW9uCi0gIGludGVybmFsX3hjdG9vbF9kZWJ1Z19hbmRfcmVsZWFzZSBcCi0gICAgLXByb2plY3Qg
b2JqZWN0aXZlYy9Qcm90b2NvbEJ1ZmZlcnNfT1NYLnhjb2RlcHJvaiBcCi0gICAgLXNjaGVtZSBQ
cm90b2NvbEJ1ZmZlcnMgXAotICAgIC1kZXN0aW5hdGlvbiAicGxhdGZvcm09T1MgWCxhcmNoPXg4
Nl82NCIgXAotICAgIHRlc3QKLSAgY2QgY29uZm9ybWFuY2UgJiYgbWFrZSB0ZXN0X29iamMgJiYg
Y2QgLi4KLX0KLQotYnVpbGRfcHl0aG9uKCkgewotICBpbnRlcm5hbF9idWlsZF9jcHAKLSAgaW50
ZXJuYWxfaW5zdGFsbF9weXRob25fZGVwcwotICBjZCBweXRob24KLSAgIyBPbmx5IHRlc3QgUHl0
aG9uIDIuNi8zLnggb24gTGludXgKLSAgaWYgWyAkKHVuYW1lIC1zKSA9PSAiTGludXgiIF07IHRo
ZW4KLSAgICBlbnZsaXN0PXB5XHsyNiwyNywzMywzNFx9LXB5dGhvbgotICBlbHNlCi0gICAgZW52
bGlzdD1weTI3LXB5dGhvbgotICBmaQotICB0b3ggLWUgJGVudmxpc3QKLSAgY2QgLi4KLX0KLQot
YnVpbGRfcHl0aG9uX2NwcCgpIHsKLSAgaW50ZXJuYWxfYnVpbGRfY3BwCi0gIGludGVybmFsX2lu
c3RhbGxfcHl0aG9uX2RlcHMKLSAgZXhwb3J0IExEX0xJQlJBUllfUEFUSD0uLi9zcmMvLmxpYnMg
IyBmb3IgTGludXgKLSAgZXhwb3J0IERZTERfTElCUkFSWV9QQVRIPS4uL3NyYy8ubGlicyAjIGZv
ciBPUyBYCi0gIGNkIHB5dGhvbgotICAjIE9ubHkgdGVzdCBQeXRob24gMi42LzMueCBvbiBMaW51
eAotICBpZiBbICQodW5hbWUgLXMpID09ICJMaW51eCIgXTsgdGhlbgotICAgICMgcHkyNiBpcyBj
dXJyZW50bHkgZGlzYWJsZWQgZHVlIHRvIGpzb25fZm9ybWF0Ci0gICAgZW52bGlzdD1weVx7Mjcs
MzMsMzRcfS1jcHAKLSAgZWxzZQotICAgIGVudmxpc3Q9cHkyNy1jcHAKLSAgZmkKLSAgdG94IC1l
ICRlbnZsaXN0Ci0gIGNkIC4uCi19Ci0KLWJ1aWxkX3J1YnkxOSgpIHsKLSAgaW50ZXJuYWxfYnVp
bGRfY3BwICAjIEZvciBjb25mb3JtYW5jZSB0ZXN0cy4KLSAgY2QgcnVieSAmJiBiYXNoIHRyYXZp
cy10ZXN0LnNoIHJ1YnktMS45ICYmIGNkIC4uCi19Ci1idWlsZF9ydWJ5MjAoKSB7Ci0gIGludGVy
bmFsX2J1aWxkX2NwcCAgIyBGb3IgY29uZm9ybWFuY2UgdGVzdHMuCi0gIGNkIHJ1YnkgJiYgYmFz
aCB0cmF2aXMtdGVzdC5zaCBydWJ5LTIuMCAmJiBjZCAuLgotfQotYnVpbGRfcnVieTIxKCkgewot
ICBpbnRlcm5hbF9idWlsZF9jcHAgICMgRm9yIGNvbmZvcm1hbmNlIHRlc3RzLgotICBjZCBydWJ5
ICYmIGJhc2ggdHJhdmlzLXRlc3Quc2ggcnVieS0yLjEgJiYgY2QgLi4KLX0KLWJ1aWxkX3J1Ynky
MigpIHsKLSAgaW50ZXJuYWxfYnVpbGRfY3BwICAjIEZvciBjb25mb3JtYW5jZSB0ZXN0cy4KLSAg
Y2QgcnVieSAmJiBiYXNoIHRyYXZpcy10ZXN0LnNoIHJ1YnktMi4yICYmIGNkIC4uCi19Ci1idWls
ZF9qcnVieSgpIHsKLSAgaW50ZXJuYWxfYnVpbGRfY3BwICAjIEZvciBjb25mb3JtYW5jZSB0ZXN0
cy4KLSAgY2QgcnVieSAmJiBiYXNoIHRyYXZpcy10ZXN0LnNoIGpydWJ5ICYmIGNkIC4uCi19Ci0K
LWJ1aWxkX2phdmFzY3JpcHQoKSB7Ci0gIGludGVybmFsX2J1aWxkX2NwcAotICBjZCBqcyAmJiBu
cG0gaW5zdGFsbCAmJiBucG0gdGVzdCAmJiBjZCAuLgotfQotCi0jIE5vdGU6IHRyYXZpcyBjdXJy
ZW50bHkgZG9lcyBub3Qgc3VwcG9ydCB0ZXN0aW5nIG1vcmUgdGhhbiBvbmUgbGFuZ3VhZ2Ugc28g
dGhlCi0jIC50cmF2aXMueW1sIGNoZWF0cyBhbmQgY2xhaW1zIHRvIG9ubHkgYmUgY3BwLiAgSWYg
dGhleSBhZGQgbXVsdGlwbGUgbGFuZ3VhZ2UKLSMgc3VwcG9ydCwgdGhpcyBzaG91bGQgcHJvYmFi
bHkgZ2V0IHVwZGF0ZWQgdG8gaW5zdGFsbCBzdGVwcyBhbmQvb3IKLSMgcnZtL2dlbWZpbGUvamRr
L2V0Yy4gZW50cmllcyByYXRoZXIgdGhhbiBtYW51YWxseSBkb2luZyB0aGUgd29yay4KLQotIyAu
dHJhdmlzLnltbCB1c2VzIG1hdHJpeC5leGNsdWRlIHRvIGJsb2NrIHRoZSBjYXNlcyB3aGVyZSBh
cHAtZ2V0IGNhbid0IGJlCi0jIHVzZSB0byBpbnN0YWxsIHRoaW5ncy4KLQotIyAtLS0tLS0tLSBt
YWluIC0tLS0tLS0tCi0KLWlmIFsgIiQjIiAtbmUgMSBdOyB0aGVuCi0gIGVjaG8gIgotVXNhZ2U6
ICQwIHsgY3BwIHwKLSAgICAgICAgICAgIGNzaGFycCB8Ci0gICAgICAgICAgICBqYXZhX2pkazYg
fAotICAgICAgICAgICAgamF2YV9qZGs3IHwKLSAgICAgICAgICAgIGphdmFfb3JhY2xlNyB8Ci0g
ICAgICAgICAgICBqYXZhbmFub19qZGs2IHwKLSAgICAgICAgICAgIGphdmFuYW5vX2pkazcgfAot
ICAgICAgICAgICAgamF2YW5hbm9fb3JhY2xlNyB8Ci0gICAgICAgICAgICBvYmplY3RpdmVjX2lv
cyB8Ci0gICAgICAgICAgICBvYmplY3RpdmVjX29zeCB8Ci0gICAgICAgICAgICBweXRob24gfAot
ICAgICAgICAgICAgcHl0aG9uX2NwcCB8Ci0gICAgICAgICAgICBydWJ5MTkgfAotICAgICAgICAg
ICAgcnVieTIwIHwKLSAgICAgICAgICAgIHJ1YnkyMSB8Ci0gICAgICAgICAgICBydWJ5MjIgfAot
ICAgICAgICAgICAganJ1YnkgfQotIgotICBleGl0IDEKLWZpCi0KLXNldCAtZSAgIyBleGl0IGlt
bWVkaWF0ZWx5IG9uIGVycm9yCi1zZXQgLXggICMgZGlzcGxheSBhbGwgY29tbWFuZHMKLWV2YWwg
ImJ1aWxkXyQxIgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi90aGlyZF9wYXJ0eS9zaXgvc2l4LnB5IGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9wcm90b2J1Zi90aGlyZF9wYXJ0
eS9zaXgvc2l4LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTBjMDIzOWNkN2Q3
YWY4MmE2ZTBjYmM4ZDY4MDUzZmEyZTNkZmFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvcHJvdG9idWYvdGhpcmRfcGFydHkvc2l4L3NpeC5weQorKysgL2Rldi9udWxsCkBA
IC0xLDg2OCArMCwwIEBACi0iIiJVdGlsaXRpZXMgZm9yIHdyaXRpbmcgY29kZSB0aGF0IHJ1bnMg
b24gUHl0aG9uIDIgYW5kIDMiIiIKLQotIyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxNSBCZW5qYW1p
biBQZXRlcnNvbgotIwotIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo
YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0jIG9mIHRoaXMgc29mdHdhcmUg
YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBk
ZWFsCi0jIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0
aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl
LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotIyBjb3BpZXMg
b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdh
cmUgaXMKLSMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9uczoKLSMKLSMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz
c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCi0jIGNvcGllcyBvciBzdWJzdGFu
dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0jCi0jIFRIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0j
IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZLAotIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg
Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSMgQVVUSE9SUyBPUiBDT1BZ
UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgot
IyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U
SEVSV0lTRSwgQVJJU0lORyBGUk9NLAotIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI
RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotIyBTT0ZUV0FS
RS4KLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKLQotaW1wb3J0IGZ1
bmN0b29scwotaW1wb3J0IGl0ZXJ0b29scwotaW1wb3J0IG9wZXJhdG9yCi1pbXBvcnQgc3lzCi1p
bXBvcnQgdHlwZXMKLQotX19hdXRob3JfXyA9ICJCZW5qYW1pbiBQZXRlcnNvbiA8YmVuamFtaW5A
cHl0aG9uLm9yZz4iCi1fX3ZlcnNpb25fXyA9ICIxLjEwLjAiCi0KLQotIyBVc2VmdWwgZm9yIHZl
cnkgY29hcnNlIHZlcnNpb24gZGlmZmVyZW50aWF0aW9uLgotUFkyID0gc3lzLnZlcnNpb25faW5m
b1swXSA9PSAyCi1QWTMgPSBzeXMudmVyc2lvbl9pbmZvWzBdID09IDMKLVBZMzQgPSBzeXMudmVy
c2lvbl9pbmZvWzA6Ml0gPj0gKDMsIDQpCi0KLWlmIFBZMzoKLSAgICBzdHJpbmdfdHlwZXMgPSBz
dHIsCi0gICAgaW50ZWdlcl90eXBlcyA9IGludCwKLSAgICBjbGFzc190eXBlcyA9IHR5cGUsCi0g
ICAgdGV4dF90eXBlID0gc3RyCi0gICAgYmluYXJ5X3R5cGUgPSBieXRlcwotCi0gICAgTUFYU0la
RSA9IHN5cy5tYXhzaXplCi1lbHNlOgotICAgIHN0cmluZ190eXBlcyA9IGJhc2VzdHJpbmcsCi0g
ICAgaW50ZWdlcl90eXBlcyA9IChpbnQsIGxvbmcpCi0gICAgY2xhc3NfdHlwZXMgPSAodHlwZSwg
dHlwZXMuQ2xhc3NUeXBlKQotICAgIHRleHRfdHlwZSA9IHVuaWNvZGUKLSAgICBiaW5hcnlfdHlw
ZSA9IHN0cgotCi0gICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImphdmEiKToKLSAgICAg
ICAgIyBKeXRob24gYWx3YXlzIHVzZXMgMzIgYml0cy4KLSAgICAgICAgTUFYU0laRSA9IGludCgo
MSA8PCAzMSkgLSAxKQotICAgIGVsc2U6Ci0gICAgICAgICMgSXQncyBwb3NzaWJsZSB0byBoYXZl
IHNpemVvZihsb25nKSAhPSBzaXplb2YoUHlfc3NpemVfdCkuCi0gICAgICAgIGNsYXNzIFgob2Jq
ZWN0KToKLQotICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIDEgPDwgMzEKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGVuKFgoKSkKLSAgICAg
ICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgICAgICAjIDMyLWJpdAotICAgICAgICAg
ICAgTUFYU0laRSA9IGludCgoMSA8PCAzMSkgLSAxKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgIyA2NC1iaXQKLSAgICAgICAgICAgIE1BWFNJWkUgPSBpbnQoKDEgPDwgNjMpIC0gMSkKLSAg
ICAgICAgZGVsIFgKLQotCi1kZWYgX2FkZF9kb2MoZnVuYywgZG9jKToKLSAgICAiIiJBZGQgZG9j
dW1lbnRhdGlvbiB0byBhIGZ1bmN0aW9uLiIiIgotICAgIGZ1bmMuX19kb2NfXyA9IGRvYwotCi0K
LWRlZiBfaW1wb3J0X21vZHVsZShuYW1lKToKLSAgICAiIiJJbXBvcnQgbW9kdWxlLCByZXR1cm5p
bmcgdGhlIG1vZHVsZSBhZnRlciB0aGUgbGFzdCBkb3QuIiIiCi0gICAgX19pbXBvcnRfXyhuYW1l
KQotICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQotCi0KLWNsYXNzIF9MYXp5RGVzY3Iob2Jq
ZWN0KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5uYW1l
ID0gbmFtZQotCi0gICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCB0cCk6Ci0gICAgICAgIHJlc3Vs
dCA9IHNlbGYuX3Jlc29sdmUoKQotICAgICAgICBzZXRhdHRyKG9iaiwgc2VsZi5uYW1lLCByZXN1
bHQpICAjIEludm9rZXMgX19zZXRfXy4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBUaGlz
IGlzIGEgYml0IHVnbHksIGJ1dCBpdCBhdm9pZHMgcnVubmluZyB0aGlzIGFnYWluIGJ5Ci0gICAg
ICAgICAgICAjIHJlbW92aW5nIHRoaXMgZGVzY3JpcHRvci4KLSAgICAgICAgICAgIGRlbGF0dHIo
b2JqLl9fY2xhc3NfXywgc2VsZi5uYW1lKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6
Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotCi1jbGFzcyBNb3Zl
ZE1vZHVsZShfTGF6eURlc2NyKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBvbGQs
IG5ldz1Ob25lKToKLSAgICAgICAgc3VwZXIoTW92ZWRNb2R1bGUsIHNlbGYpLl9faW5pdF9fKG5h
bWUpCi0gICAgICAgIGlmIFBZMzoKLSAgICAgICAgICAgIGlmIG5ldyBpcyBOb25lOgotICAgICAg
ICAgICAgICAgIG5ldyA9IG5hbWUKLSAgICAgICAgICAgIHNlbGYubW9kID0gbmV3Ci0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm1vZCA9IG9sZAotCi0gICAgZGVmIF9yZXNvbHZlKHNl
bGYpOgotICAgICAgICByZXR1cm4gX2ltcG9ydF9tb2R1bGUoc2VsZi5tb2QpCi0KLSAgICBkZWYg
X19nZXRhdHRyX18oc2VsZiwgYXR0cik6Ci0gICAgICAgIF9tb2R1bGUgPSBzZWxmLl9yZXNvbHZl
KCkKLSAgICAgICAgdmFsdWUgPSBnZXRhdHRyKF9tb2R1bGUsIGF0dHIpCi0gICAgICAgIHNldGF0
dHIoc2VsZiwgYXR0ciwgdmFsdWUpCi0gICAgICAgIHJldHVybiB2YWx1ZQotCi0KLWNsYXNzIF9M
YXp5TW9kdWxlKHR5cGVzLk1vZHVsZVR5cGUpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5h
bWUpOgotICAgICAgICBzdXBlcihfTGF6eU1vZHVsZSwgc2VsZikuX19pbml0X18obmFtZSkKLSAg
ICAgICAgc2VsZi5fX2RvY19fID0gc2VsZi5fX2NsYXNzX18uX19kb2NfXwotCi0gICAgZGVmIF9f
ZGlyX18oc2VsZik6Ci0gICAgICAgIGF0dHJzID0gWyJfX2RvY19fIiwgIl9fbmFtZV9fIl0KLSAg
ICAgICAgYXR0cnMgKz0gW2F0dHIubmFtZSBmb3IgYXR0ciBpbiBzZWxmLl9tb3ZlZF9hdHRyaWJ1
dGVzXQotICAgICAgICByZXR1cm4gYXR0cnMKLQotICAgICMgU3ViY2xhc3NlcyBzaG91bGQgb3Zl
cnJpZGUgdGhpcwotICAgIF9tb3ZlZF9hdHRyaWJ1dGVzID0gW10KLQotCi1jbGFzcyBNb3ZlZEF0
dHJpYnV0ZShfTGF6eURlc2NyKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBvbGRf
bW9kLCBuZXdfbW9kLCBvbGRfYXR0cj1Ob25lLCBuZXdfYXR0cj1Ob25lKToKLSAgICAgICAgc3Vw
ZXIoTW92ZWRBdHRyaWJ1dGUsIHNlbGYpLl9faW5pdF9fKG5hbWUpCi0gICAgICAgIGlmIFBZMzoK
LSAgICAgICAgICAgIGlmIG5ld19tb2QgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBuZXdfbW9k
ID0gbmFtZQotICAgICAgICAgICAgc2VsZi5tb2QgPSBuZXdfbW9kCi0gICAgICAgICAgICBpZiBu
ZXdfYXR0ciBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIG9sZF9hdHRyIGlzIE5vbmU6Ci0g
ICAgICAgICAgICAgICAgICAgIG5ld19hdHRyID0gbmFtZQotICAgICAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgICAgIG5ld19hdHRyID0gb2xkX2F0dHIKLSAgICAgICAgICAgIHNl
bGYuYXR0ciA9IG5ld19hdHRyCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm1vZCA9
IG9sZF9tb2QKLSAgICAgICAgICAgIGlmIG9sZF9hdHRyIGlzIE5vbmU6Ci0gICAgICAgICAgICAg
ICAgb2xkX2F0dHIgPSBuYW1lCi0gICAgICAgICAgICBzZWxmLmF0dHIgPSBvbGRfYXR0cgotCi0g
ICAgZGVmIF9yZXNvbHZlKHNlbGYpOgotICAgICAgICBtb2R1bGUgPSBfaW1wb3J0X21vZHVsZShz
ZWxmLm1vZCkKLSAgICAgICAgcmV0dXJuIGdldGF0dHIobW9kdWxlLCBzZWxmLmF0dHIpCi0KLQot
Y2xhc3MgX1NpeE1ldGFQYXRoSW1wb3J0ZXIob2JqZWN0KToKLQotICAgICIiIgotICAgIEEgbWV0
YSBwYXRoIGltcG9ydGVyIHRvIGltcG9ydCBzaXgubW92ZXMgYW5kIGl0cyBzdWJtb2R1bGVzLgot
Ci0gICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgUEVQMzAyIGZpbmRlciBhbmQgbG9hZGVyLiBJ
dCBzaG91bGQgYmUgY29tcGF0aWJsZQotICAgIHdpdGggUHl0aG9uIDIuNSBhbmQgYWxsIGV4aXN0
aW5nIHZlcnNpb25zIG9mIFB5dGhvbjMKLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBzaXhfbW9kdWxlX25hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBzaXhfbW9kdWxlX25hbWUK
LSAgICAgICAgc2VsZi5rbm93bl9tb2R1bGVzID0ge30KLQotICAgIGRlZiBfYWRkX21vZHVsZShz
ZWxmLCBtb2QsICpmdWxsbmFtZXMpOgotICAgICAgICBmb3IgZnVsbG5hbWUgaW4gZnVsbG5hbWVz
OgotICAgICAgICAgICAgc2VsZi5rbm93bl9tb2R1bGVzW3NlbGYubmFtZSArICIuIiArIGZ1bGxu
YW1lXSA9IG1vZAotCi0gICAgZGVmIF9nZXRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYua25vd25fbW9kdWxlc1tzZWxmLm5hbWUgKyAiLiIgKyBmdWxsbmFtZV0K
LQotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAg
ICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5rbm93bl9tb2R1bGVzOgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBfX2dldF9tb2R1bGUoc2VsZiwg
ZnVsbG5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5rbm93bl9t
b2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBy
YWlzZSBJbXBvcnRFcnJvcigiVGhpcyBsb2FkZXIgZG9lcyBub3Qga25vdyBtb2R1bGUgIiArIGZ1
bGxuYW1lKQotCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAg
dHJ5OgotICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGEgcmVsb2FkCi0gICAgICAgICAgICByZXR1
cm4gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAg
ICAgICAgIHBhc3MKLSAgICAgICAgbW9kID0gc2VsZi5fX2dldF9tb2R1bGUoZnVsbG5hbWUpCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UobW9kLCBNb3ZlZE1vZHVsZSk6Ci0gICAgICAgICAgICBtb2Qg
PSBtb2QuX3Jlc29sdmUoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kLl9fbG9hZGVy
X18gPSBzZWxmCi0gICAgICAgIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXSA9IG1vZAotICAgICAgICBy
ZXR1cm4gbW9kCi0KLSAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAg
ICIiIgotICAgICAgICBSZXR1cm4gdHJ1ZSwgaWYgdGhlIG5hbWVkIG1vZHVsZSBpcyBhIHBhY2th
Z2UuCi0KLSAgICAgICAgV2UgbmVlZCB0aGlzIG1ldGhvZCB0byBnZXQgY29ycmVjdCBzcGVjIG9i
amVjdHMgd2l0aAotICAgICAgICBQeXRob24gMy40IChzZWUgUEVQNDUxKQotICAgICAgICAiIiIK
LSAgICAgICAgcmV0dXJuIGhhc2F0dHIoc2VsZi5fX2dldF9tb2R1bGUoZnVsbG5hbWUpLCAiX19w
YXRoX18iKQotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIi
UmV0dXJuIE5vbmUKLQotICAgICAgICBSZXF1aXJlZCwgaWYgaXNfcGFja2FnZSBpcyBpbXBsZW1l
bnRlZCIiIgotICAgICAgICBzZWxmLl9fZ2V0X21vZHVsZShmdWxsbmFtZSkgICMgZXZlbnR1YWxs
eSByYWlzZXMgSW1wb3J0RXJyb3IKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBnZXRfc291cmNl
ID0gZ2V0X2NvZGUgICMgc2FtZSBhcyBnZXRfY29kZQotCi1faW1wb3J0ZXIgPSBfU2l4TWV0YVBh
dGhJbXBvcnRlcihfX25hbWVfXykKLQotCi1jbGFzcyBfTW92ZWRJdGVtcyhfTGF6eU1vZHVsZSk6
Ci0KLSAgICAiIiJMYXp5IGxvYWRpbmcgb2YgbW92ZWQgb2JqZWN0cyIiIgotICAgIF9fcGF0aF9f
ID0gW10gICMgbWFyayBhcyBwYWNrYWdlCi0KLQotX21vdmVkX2F0dHJpYnV0ZXMgPSBbCi0gICAg
TW92ZWRBdHRyaWJ1dGUoImNTdHJpbmdJTyIsICJjU3RyaW5nSU8iLCAiaW8iLCAiU3RyaW5nSU8i
KSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiZmlsdGVyIiwgIml0ZXJ0b29scyIsICJidWlsdGlucyIs
ICJpZmlsdGVyIiwgImZpbHRlciIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJmaWx0ZXJmYWxzZSIs
ICJpdGVydG9vbHMiLCAiaXRlcnRvb2xzIiwgImlmaWx0ZXJmYWxzZSIsICJmaWx0ZXJmYWxzZSIp
LAotICAgIE1vdmVkQXR0cmlidXRlKCJpbnB1dCIsICJfX2J1aWx0aW5fXyIsICJidWlsdGlucyIs
ICJyYXdfaW5wdXQiLCAiaW5wdXQiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiaW50ZXJuIiwgIl9f
YnVpbHRpbl9fIiwgInN5cyIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJtYXAiLCAiaXRlcnRvb2xz
IiwgImJ1aWx0aW5zIiwgImltYXAiLCAibWFwIiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoImdldGN3
ZCIsICJvcyIsICJvcyIsICJnZXRjd2R1IiwgImdldGN3ZCIpLAotICAgIE1vdmVkQXR0cmlidXRl
KCJnZXRjd2RiIiwgIm9zIiwgIm9zIiwgImdldGN3ZCIsICJnZXRjd2RiIiksCi0gICAgTW92ZWRB
dHRyaWJ1dGUoInJhbmdlIiwgIl9fYnVpbHRpbl9fIiwgImJ1aWx0aW5zIiwgInhyYW5nZSIsICJy
YW5nZSIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJyZWxvYWRfbW9kdWxlIiwgIl9fYnVpbHRpbl9f
IiwgImltcG9ydGxpYiIgaWYgUFkzNCBlbHNlICJpbXAiLCAicmVsb2FkIiksCi0gICAgTW92ZWRB
dHRyaWJ1dGUoInJlZHVjZSIsICJfX2J1aWx0aW5fXyIsICJmdW5jdG9vbHMiKSwKLSAgICBNb3Zl
ZEF0dHJpYnV0ZSgic2hsZXhfcXVvdGUiLCAicGlwZXMiLCAic2hsZXgiLCAicXVvdGUiKSwKLSAg
ICBNb3ZlZEF0dHJpYnV0ZSgiU3RyaW5nSU8iLCAiU3RyaW5nSU8iLCAiaW8iKSwKLSAgICBNb3Zl
ZEF0dHJpYnV0ZSgiVXNlckRpY3QiLCAiVXNlckRpY3QiLCAiY29sbGVjdGlvbnMiKSwKLSAgICBN
b3ZlZEF0dHJpYnV0ZSgiVXNlckxpc3QiLCAiVXNlckxpc3QiLCAiY29sbGVjdGlvbnMiKSwKLSAg
ICBNb3ZlZEF0dHJpYnV0ZSgiVXNlclN0cmluZyIsICJVc2VyU3RyaW5nIiwgImNvbGxlY3Rpb25z
IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoInhyYW5nZSIsICJfX2J1aWx0aW5fXyIsICJidWlsdGlu
cyIsICJ4cmFuZ2UiLCAicmFuZ2UiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiemlwIiwgIml0ZXJ0
b29scyIsICJidWlsdGlucyIsICJpemlwIiwgInppcCIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJ6
aXBfbG9uZ2VzdCIsICJpdGVydG9vbHMiLCAiaXRlcnRvb2xzIiwgIml6aXBfbG9uZ2VzdCIsICJ6
aXBfbG9uZ2VzdCIpLAotICAgIE1vdmVkTW9kdWxlKCJidWlsdGlucyIsICJfX2J1aWx0aW5fXyIp
LAotICAgIE1vdmVkTW9kdWxlKCJjb25maWdwYXJzZXIiLCAiQ29uZmlnUGFyc2VyIiksCi0gICAg
TW92ZWRNb2R1bGUoImNvcHlyZWciLCAiY29weV9yZWciKSwKLSAgICBNb3ZlZE1vZHVsZSgiZGJt
X2dudSIsICJnZGJtIiwgImRibS5nbnUiKSwKLSAgICBNb3ZlZE1vZHVsZSgiX2R1bW15X3RocmVh
ZCIsICJkdW1teV90aHJlYWQiLCAiX2R1bW15X3RocmVhZCIpLAotICAgIE1vdmVkTW9kdWxlKCJo
dHRwX2Nvb2tpZWphciIsICJjb29raWVsaWIiLCAiaHR0cC5jb29raWVqYXIiKSwKLSAgICBNb3Zl
ZE1vZHVsZSgiaHR0cF9jb29raWVzIiwgIkNvb2tpZSIsICJodHRwLmNvb2tpZXMiKSwKLSAgICBN
b3ZlZE1vZHVsZSgiaHRtbF9lbnRpdGllcyIsICJodG1sZW50aXR5ZGVmcyIsICJodG1sLmVudGl0
aWVzIiksCi0gICAgTW92ZWRNb2R1bGUoImh0bWxfcGFyc2VyIiwgIkhUTUxQYXJzZXIiLCAiaHRt
bC5wYXJzZXIiKSwKLSAgICBNb3ZlZE1vZHVsZSgiaHR0cF9jbGllbnQiLCAiaHR0cGxpYiIsICJo
dHRwLmNsaWVudCIpLAotICAgIE1vdmVkTW9kdWxlKCJlbWFpbF9taW1lX211bHRpcGFydCIsICJl
bWFpbC5NSU1FTXVsdGlwYXJ0IiwgImVtYWlsLm1pbWUubXVsdGlwYXJ0IiksCi0gICAgTW92ZWRN
b2R1bGUoImVtYWlsX21pbWVfbm9ubXVsdGlwYXJ0IiwgImVtYWlsLk1JTUVOb25NdWx0aXBhcnQi
LCAiZW1haWwubWltZS5ub25tdWx0aXBhcnQiKSwKLSAgICBNb3ZlZE1vZHVsZSgiZW1haWxfbWlt
ZV90ZXh0IiwgImVtYWlsLk1JTUVUZXh0IiwgImVtYWlsLm1pbWUudGV4dCIpLAotICAgIE1vdmVk
TW9kdWxlKCJlbWFpbF9taW1lX2Jhc2UiLCAiZW1haWwuTUlNRUJhc2UiLCAiZW1haWwubWltZS5i
YXNlIiksCi0gICAgTW92ZWRNb2R1bGUoIkJhc2VIVFRQU2VydmVyIiwgIkJhc2VIVFRQU2VydmVy
IiwgImh0dHAuc2VydmVyIiksCi0gICAgTW92ZWRNb2R1bGUoIkNHSUhUVFBTZXJ2ZXIiLCAiQ0dJ
SFRUUFNlcnZlciIsICJodHRwLnNlcnZlciIpLAotICAgIE1vdmVkTW9kdWxlKCJTaW1wbGVIVFRQ
U2VydmVyIiwgIlNpbXBsZUhUVFBTZXJ2ZXIiLCAiaHR0cC5zZXJ2ZXIiKSwKLSAgICBNb3ZlZE1v
ZHVsZSgiY1BpY2tsZSIsICJjUGlja2xlIiwgInBpY2tsZSIpLAotICAgIE1vdmVkTW9kdWxlKCJx
dWV1ZSIsICJRdWV1ZSIpLAotICAgIE1vdmVkTW9kdWxlKCJyZXBybGliIiwgInJlcHIiKSwKLSAg
ICBNb3ZlZE1vZHVsZSgic29ja2V0c2VydmVyIiwgIlNvY2tldFNlcnZlciIpLAotICAgIE1vdmVk
TW9kdWxlKCJfdGhyZWFkIiwgInRocmVhZCIsICJfdGhyZWFkIiksCi0gICAgTW92ZWRNb2R1bGUo
InRraW50ZXIiLCAiVGtpbnRlciIpLAotICAgIE1vdmVkTW9kdWxlKCJ0a2ludGVyX2RpYWxvZyIs
ICJEaWFsb2ciLCAidGtpbnRlci5kaWFsb2ciKSwKLSAgICBNb3ZlZE1vZHVsZSgidGtpbnRlcl9m
aWxlZGlhbG9nIiwgIkZpbGVEaWFsb2ciLCAidGtpbnRlci5maWxlZGlhbG9nIiksCi0gICAgTW92
ZWRNb2R1bGUoInRraW50ZXJfc2Nyb2xsZWR0ZXh0IiwgIlNjcm9sbGVkVGV4dCIsICJ0a2ludGVy
LnNjcm9sbGVkdGV4dCIpLAotICAgIE1vdmVkTW9kdWxlKCJ0a2ludGVyX3NpbXBsZWRpYWxvZyIs
ICJTaW1wbGVEaWFsb2ciLCAidGtpbnRlci5zaW1wbGVkaWFsb2ciKSwKLSAgICBNb3ZlZE1vZHVs
ZSgidGtpbnRlcl90aXgiLCAiVGl4IiwgInRraW50ZXIudGl4IiksCi0gICAgTW92ZWRNb2R1bGUo
InRraW50ZXJfdHRrIiwgInR0ayIsICJ0a2ludGVyLnR0ayIpLAotICAgIE1vdmVkTW9kdWxlKCJ0
a2ludGVyX2NvbnN0YW50cyIsICJUa2NvbnN0YW50cyIsICJ0a2ludGVyLmNvbnN0YW50cyIpLAot
ICAgIE1vdmVkTW9kdWxlKCJ0a2ludGVyX2RuZCIsICJUa2RuZCIsICJ0a2ludGVyLmRuZCIpLAot
ICAgIE1vdmVkTW9kdWxlKCJ0a2ludGVyX2NvbG9yY2hvb3NlciIsICJ0a0NvbG9yQ2hvb3NlciIs
Ci0gICAgICAgICAgICAgICAgInRraW50ZXIuY29sb3JjaG9vc2VyIiksCi0gICAgTW92ZWRNb2R1
bGUoInRraW50ZXJfY29tbW9uZGlhbG9nIiwgInRrQ29tbW9uRGlhbG9nIiwKLSAgICAgICAgICAg
ICAgICAidGtpbnRlci5jb21tb25kaWFsb2ciKSwKLSAgICBNb3ZlZE1vZHVsZSgidGtpbnRlcl90
a2ZpbGVkaWFsb2ciLCAidGtGaWxlRGlhbG9nIiwgInRraW50ZXIuZmlsZWRpYWxvZyIpLAotICAg
IE1vdmVkTW9kdWxlKCJ0a2ludGVyX2ZvbnQiLCAidGtGb250IiwgInRraW50ZXIuZm9udCIpLAot
ICAgIE1vdmVkTW9kdWxlKCJ0a2ludGVyX21lc3NhZ2Vib3giLCAidGtNZXNzYWdlQm94IiwgInRr
aW50ZXIubWVzc2FnZWJveCIpLAotICAgIE1vdmVkTW9kdWxlKCJ0a2ludGVyX3Rrc2ltcGxlZGlh
bG9nIiwgInRrU2ltcGxlRGlhbG9nIiwKLSAgICAgICAgICAgICAgICAidGtpbnRlci5zaW1wbGVk
aWFsb2ciKSwKLSAgICBNb3ZlZE1vZHVsZSgidXJsbGliX3BhcnNlIiwgX19uYW1lX18gKyAiLm1v
dmVzLnVybGxpYl9wYXJzZSIsICJ1cmxsaWIucGFyc2UiKSwKLSAgICBNb3ZlZE1vZHVsZSgidXJs
bGliX2Vycm9yIiwgX19uYW1lX18gKyAiLm1vdmVzLnVybGxpYl9lcnJvciIsICJ1cmxsaWIuZXJy
b3IiKSwKLSAgICBNb3ZlZE1vZHVsZSgidXJsbGliIiwgX19uYW1lX18gKyAiLm1vdmVzLnVybGxp
YiIsIF9fbmFtZV9fICsgIi5tb3Zlcy51cmxsaWIiKSwKLSAgICBNb3ZlZE1vZHVsZSgidXJsbGli
X3JvYm90cGFyc2VyIiwgInJvYm90cGFyc2VyIiwgInVybGxpYi5yb2JvdHBhcnNlciIpLAotICAg
IE1vdmVkTW9kdWxlKCJ4bWxycGNfY2xpZW50IiwgInhtbHJwY2xpYiIsICJ4bWxycGMuY2xpZW50
IiksCi0gICAgTW92ZWRNb2R1bGUoInhtbHJwY19zZXJ2ZXIiLCAiU2ltcGxlWE1MUlBDU2VydmVy
IiwgInhtbHJwYy5zZXJ2ZXIiKSwKLV0KLSMgQWRkIHdpbmRvd3Mgc3BlY2lmaWMgbW9kdWxlcy4K
LWlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgotICAgIF9tb3ZlZF9hdHRyaWJ1dGVzICs9IFsK
LSAgICAgICAgTW92ZWRNb2R1bGUoIndpbnJlZyIsICJfd2lucmVnIiksCi0gICAgXQotCi1mb3Ig
YXR0ciBpbiBfbW92ZWRfYXR0cmlidXRlczoKLSAgICBzZXRhdHRyKF9Nb3ZlZEl0ZW1zLCBhdHRy
Lm5hbWUsIGF0dHIpCi0gICAgaWYgaXNpbnN0YW5jZShhdHRyLCBNb3ZlZE1vZHVsZSk6Ci0gICAg
ICAgIF9pbXBvcnRlci5fYWRkX21vZHVsZShhdHRyLCAibW92ZXMuIiArIGF0dHIubmFtZSkKLWRl
bCBhdHRyCi0KLV9Nb3ZlZEl0ZW1zLl9tb3ZlZF9hdHRyaWJ1dGVzID0gX21vdmVkX2F0dHJpYnV0
ZXMKLQotbW92ZXMgPSBfTW92ZWRJdGVtcyhfX25hbWVfXyArICIubW92ZXMiKQotX2ltcG9ydGVy
Ll9hZGRfbW9kdWxlKG1vdmVzLCAibW92ZXMiKQotCi0KLWNsYXNzIE1vZHVsZV9zaXhfbW92ZXNf
dXJsbGliX3BhcnNlKF9MYXp5TW9kdWxlKToKLQotICAgICIiIkxhenkgbG9hZGluZyBvZiBtb3Zl
ZCBvYmplY3RzIGluIHNpeC5tb3Zlcy51cmxsaWJfcGFyc2UiIiIKLQotCi1fdXJsbGliX3BhcnNl
X21vdmVkX2F0dHJpYnV0ZXMgPSBbCi0gICAgTW92ZWRBdHRyaWJ1dGUoIlBhcnNlUmVzdWx0Iiwg
InVybHBhcnNlIiwgInVybGxpYi5wYXJzZSIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJTcGxpdFJl
c3VsdCIsICJ1cmxwYXJzZSIsICJ1cmxsaWIucGFyc2UiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgi
cGFyc2VfcXMiLCAidXJscGFyc2UiLCAidXJsbGliLnBhcnNlIiksCi0gICAgTW92ZWRBdHRyaWJ1
dGUoInBhcnNlX3FzbCIsICJ1cmxwYXJzZSIsICJ1cmxsaWIucGFyc2UiKSwKLSAgICBNb3ZlZEF0
dHJpYnV0ZSgidXJsZGVmcmFnIiwgInVybHBhcnNlIiwgInVybGxpYi5wYXJzZSIpLAotICAgIE1v
dmVkQXR0cmlidXRlKCJ1cmxqb2luIiwgInVybHBhcnNlIiwgInVybGxpYi5wYXJzZSIpLAotICAg
IE1vdmVkQXR0cmlidXRlKCJ1cmxwYXJzZSIsICJ1cmxwYXJzZSIsICJ1cmxsaWIucGFyc2UiKSwK
LSAgICBNb3ZlZEF0dHJpYnV0ZSgidXJsc3BsaXQiLCAidXJscGFyc2UiLCAidXJsbGliLnBhcnNl
IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoInVybHVucGFyc2UiLCAidXJscGFyc2UiLCAidXJsbGli
LnBhcnNlIiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoInVybHVuc3BsaXQiLCAidXJscGFyc2UiLCAi
dXJsbGliLnBhcnNlIiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoInF1b3RlIiwgInVybGxpYiIsICJ1
cmxsaWIucGFyc2UiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgicXVvdGVfcGx1cyIsICJ1cmxsaWIi
LCAidXJsbGliLnBhcnNlIiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoInVucXVvdGUiLCAidXJsbGli
IiwgInVybGxpYi5wYXJzZSIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJ1bnF1b3RlX3BsdXMiLCAi
dXJsbGliIiwgInVybGxpYi5wYXJzZSIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJ1cmxlbmNvZGUi
LCAidXJsbGliIiwgInVybGxpYi5wYXJzZSIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJzcGxpdHF1
ZXJ5IiwgInVybGxpYiIsICJ1cmxsaWIucGFyc2UiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgic3Bs
aXR0YWciLCAidXJsbGliIiwgInVybGxpYi5wYXJzZSIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJz
cGxpdHVzZXIiLCAidXJsbGliIiwgInVybGxpYi5wYXJzZSIpLAotICAgIE1vdmVkQXR0cmlidXRl
KCJ1c2VzX2ZyYWdtZW50IiwgInVybHBhcnNlIiwgInVybGxpYi5wYXJzZSIpLAotICAgIE1vdmVk
QXR0cmlidXRlKCJ1c2VzX25ldGxvYyIsICJ1cmxwYXJzZSIsICJ1cmxsaWIucGFyc2UiKSwKLSAg
ICBNb3ZlZEF0dHJpYnV0ZSgidXNlc19wYXJhbXMiLCAidXJscGFyc2UiLCAidXJsbGliLnBhcnNl
IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoInVzZXNfcXVlcnkiLCAidXJscGFyc2UiLCAidXJsbGli
LnBhcnNlIiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoInVzZXNfcmVsYXRpdmUiLCAidXJscGFyc2Ui
LCAidXJsbGliLnBhcnNlIiksCi1dCi1mb3IgYXR0ciBpbiBfdXJsbGliX3BhcnNlX21vdmVkX2F0
dHJpYnV0ZXM6Ci0gICAgc2V0YXR0cihNb2R1bGVfc2l4X21vdmVzX3VybGxpYl9wYXJzZSwgYXR0
ci5uYW1lLCBhdHRyKQotZGVsIGF0dHIKLQotTW9kdWxlX3NpeF9tb3Zlc191cmxsaWJfcGFyc2Uu
X21vdmVkX2F0dHJpYnV0ZXMgPSBfdXJsbGliX3BhcnNlX21vdmVkX2F0dHJpYnV0ZXMKLQotX2lt
cG9ydGVyLl9hZGRfbW9kdWxlKE1vZHVsZV9zaXhfbW92ZXNfdXJsbGliX3BhcnNlKF9fbmFtZV9f
ICsgIi5tb3Zlcy51cmxsaWJfcGFyc2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAibW92ZXMu
dXJsbGliX3BhcnNlIiwgIm1vdmVzLnVybGxpYi5wYXJzZSIpCi0KLQotY2xhc3MgTW9kdWxlX3Np
eF9tb3Zlc191cmxsaWJfZXJyb3IoX0xhenlNb2R1bGUpOgotCi0gICAgIiIiTGF6eSBsb2FkaW5n
IG9mIG1vdmVkIG9iamVjdHMgaW4gc2l4Lm1vdmVzLnVybGxpYl9lcnJvciIiIgotCi0KLV91cmxs
aWJfZXJyb3JfbW92ZWRfYXR0cmlidXRlcyA9IFsKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiVVJMRXJy
b3IiLCAidXJsbGliMiIsICJ1cmxsaWIuZXJyb3IiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiSFRU
UEVycm9yIiwgInVybGxpYjIiLCAidXJsbGliLmVycm9yIiksCi0gICAgTW92ZWRBdHRyaWJ1dGUo
IkNvbnRlbnRUb29TaG9ydEVycm9yIiwgInVybGxpYiIsICJ1cmxsaWIuZXJyb3IiKSwKLV0KLWZv
ciBhdHRyIGluIF91cmxsaWJfZXJyb3JfbW92ZWRfYXR0cmlidXRlczoKLSAgICBzZXRhdHRyKE1v
ZHVsZV9zaXhfbW92ZXNfdXJsbGliX2Vycm9yLCBhdHRyLm5hbWUsIGF0dHIpCi1kZWwgYXR0cgot
Ci1Nb2R1bGVfc2l4X21vdmVzX3VybGxpYl9lcnJvci5fbW92ZWRfYXR0cmlidXRlcyA9IF91cmxs
aWJfZXJyb3JfbW92ZWRfYXR0cmlidXRlcwotCi1faW1wb3J0ZXIuX2FkZF9tb2R1bGUoTW9kdWxl
X3NpeF9tb3Zlc191cmxsaWJfZXJyb3IoX19uYW1lX18gKyAiLm1vdmVzLnVybGxpYi5lcnJvciIp
LAotICAgICAgICAgICAgICAgICAgICAgICJtb3Zlcy51cmxsaWJfZXJyb3IiLCAibW92ZXMudXJs
bGliLmVycm9yIikKLQotCi1jbGFzcyBNb2R1bGVfc2l4X21vdmVzX3VybGxpYl9yZXF1ZXN0KF9M
YXp5TW9kdWxlKToKLQotICAgICIiIkxhenkgbG9hZGluZyBvZiBtb3ZlZCBvYmplY3RzIGluIHNp
eC5tb3Zlcy51cmxsaWJfcmVxdWVzdCIiIgotCi0KLV91cmxsaWJfcmVxdWVzdF9tb3ZlZF9hdHRy
aWJ1dGVzID0gWwotICAgIE1vdmVkQXR0cmlidXRlKCJ1cmxvcGVuIiwgInVybGxpYjIiLCAidXJs
bGliLnJlcXVlc3QiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiaW5zdGFsbF9vcGVuZXIiLCAidXJs
bGliMiIsICJ1cmxsaWIucmVxdWVzdCIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJidWlsZF9vcGVu
ZXIiLCAidXJsbGliMiIsICJ1cmxsaWIucmVxdWVzdCIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJw
YXRobmFtZTJ1cmwiLCAidXJsbGliIiwgInVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRy
aWJ1dGUoInVybDJwYXRobmFtZSIsICJ1cmxsaWIiLCAidXJsbGliLnJlcXVlc3QiKSwKLSAgICBN
b3ZlZEF0dHJpYnV0ZSgiZ2V0cHJveGllcyIsICJ1cmxsaWIiLCAidXJsbGliLnJlcXVlc3QiKSwK
LSAgICBNb3ZlZEF0dHJpYnV0ZSgiUmVxdWVzdCIsICJ1cmxsaWIyIiwgInVybGxpYi5yZXF1ZXN0
IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoIk9wZW5lckRpcmVjdG9yIiwgInVybGxpYjIiLCAidXJs
bGliLnJlcXVlc3QiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiSFRUUERlZmF1bHRFcnJvckhhbmRs
ZXIiLCAidXJsbGliMiIsICJ1cmxsaWIucmVxdWVzdCIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJI
VFRQUmVkaXJlY3RIYW5kbGVyIiwgInVybGxpYjIiLCAidXJsbGliLnJlcXVlc3QiKSwKLSAgICBN
b3ZlZEF0dHJpYnV0ZSgiSFRUUENvb2tpZVByb2Nlc3NvciIsICJ1cmxsaWIyIiwgInVybGxpYi5y
ZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoIlByb3h5SGFuZGxlciIsICJ1cmxsaWIyIiwg
InVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoIkJhc2VIYW5kbGVyIiwgInVy
bGxpYjIiLCAidXJsbGliLnJlcXVlc3QiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiSFRUUFBhc3N3
b3JkTWdyIiwgInVybGxpYjIiLCAidXJsbGliLnJlcXVlc3QiKSwKLSAgICBNb3ZlZEF0dHJpYnV0
ZSgiSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbSIsICJ1cmxsaWIyIiwgInVybGxpYi5y
ZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoIkFic3RyYWN0QmFzaWNBdXRoSGFuZGxlciIs
ICJ1cmxsaWIyIiwgInVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoIkhUVFBC
YXNpY0F1dGhIYW5kbGVyIiwgInVybGxpYjIiLCAidXJsbGliLnJlcXVlc3QiKSwKLSAgICBNb3Zl
ZEF0dHJpYnV0ZSgiUHJveHlCYXNpY0F1dGhIYW5kbGVyIiwgInVybGxpYjIiLCAidXJsbGliLnJl
cXVlc3QiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlciIs
ICJ1cmxsaWIyIiwgInVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoIkhUVFBE
aWdlc3RBdXRoSGFuZGxlciIsICJ1cmxsaWIyIiwgInVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92
ZWRBdHRyaWJ1dGUoIlByb3h5RGlnZXN0QXV0aEhhbmRsZXIiLCAidXJsbGliMiIsICJ1cmxsaWIu
cmVxdWVzdCIpLAotICAgIE1vdmVkQXR0cmlidXRlKCJIVFRQSGFuZGxlciIsICJ1cmxsaWIyIiwg
InVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoIkhUVFBTSGFuZGxlciIsICJ1
cmxsaWIyIiwgInVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoIkZpbGVIYW5k
bGVyIiwgInVybGxpYjIiLCAidXJsbGliLnJlcXVlc3QiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgi
RlRQSGFuZGxlciIsICJ1cmxsaWIyIiwgInVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRy
aWJ1dGUoIkNhY2hlRlRQSGFuZGxlciIsICJ1cmxsaWIyIiwgInVybGxpYi5yZXF1ZXN0IiksCi0g
ICAgTW92ZWRBdHRyaWJ1dGUoIlVua25vd25IYW5kbGVyIiwgInVybGxpYjIiLCAidXJsbGliLnJl
cXVlc3QiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgiSFRUUEVycm9yUHJvY2Vzc29yIiwgInVybGxp
YjIiLCAidXJsbGliLnJlcXVlc3QiKSwKLSAgICBNb3ZlZEF0dHJpYnV0ZSgidXJscmV0cmlldmUi
LCAidXJsbGliIiwgInVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUoInVybGNs
ZWFudXAiLCAidXJsbGliIiwgInVybGxpYi5yZXF1ZXN0IiksCi0gICAgTW92ZWRBdHRyaWJ1dGUo
IlVSTG9wZW5lciIsICJ1cmxsaWIiLCAidXJsbGliLnJlcXVlc3QiKSwKLSAgICBNb3ZlZEF0dHJp
YnV0ZSgiRmFuY3lVUkxvcGVuZXIiLCAidXJsbGliIiwgInVybGxpYi5yZXF1ZXN0IiksCi0gICAg
TW92ZWRBdHRyaWJ1dGUoInByb3h5X2J5cGFzcyIsICJ1cmxsaWIiLCAidXJsbGliLnJlcXVlc3Qi
KSwKLV0KLWZvciBhdHRyIGluIF91cmxsaWJfcmVxdWVzdF9tb3ZlZF9hdHRyaWJ1dGVzOgotICAg
IHNldGF0dHIoTW9kdWxlX3NpeF9tb3Zlc191cmxsaWJfcmVxdWVzdCwgYXR0ci5uYW1lLCBhdHRy
KQotZGVsIGF0dHIKLQotTW9kdWxlX3NpeF9tb3Zlc191cmxsaWJfcmVxdWVzdC5fbW92ZWRfYXR0
cmlidXRlcyA9IF91cmxsaWJfcmVxdWVzdF9tb3ZlZF9hdHRyaWJ1dGVzCi0KLV9pbXBvcnRlci5f
YWRkX21vZHVsZShNb2R1bGVfc2l4X21vdmVzX3VybGxpYl9yZXF1ZXN0KF9fbmFtZV9fICsgIi5t
b3Zlcy51cmxsaWIucmVxdWVzdCIpLAotICAgICAgICAgICAgICAgICAgICAgICJtb3Zlcy51cmxs
aWJfcmVxdWVzdCIsICJtb3Zlcy51cmxsaWIucmVxdWVzdCIpCi0KLQotY2xhc3MgTW9kdWxlX3Np
eF9tb3Zlc191cmxsaWJfcmVzcG9uc2UoX0xhenlNb2R1bGUpOgotCi0gICAgIiIiTGF6eSBsb2Fk
aW5nIG9mIG1vdmVkIG9iamVjdHMgaW4gc2l4Lm1vdmVzLnVybGxpYl9yZXNwb25zZSIiIgotCi0K
LV91cmxsaWJfcmVzcG9uc2VfbW92ZWRfYXR0cmlidXRlcyA9IFsKLSAgICBNb3ZlZEF0dHJpYnV0
ZSgiYWRkYmFzZSIsICJ1cmxsaWIiLCAidXJsbGliLnJlc3BvbnNlIiksCi0gICAgTW92ZWRBdHRy
aWJ1dGUoImFkZGNsb3NlaG9vayIsICJ1cmxsaWIiLCAidXJsbGliLnJlc3BvbnNlIiksCi0gICAg
TW92ZWRBdHRyaWJ1dGUoImFkZGluZm8iLCAidXJsbGliIiwgInVybGxpYi5yZXNwb25zZSIpLAot
ICAgIE1vdmVkQXR0cmlidXRlKCJhZGRpbmZvdXJsIiwgInVybGxpYiIsICJ1cmxsaWIucmVzcG9u
c2UiKSwKLV0KLWZvciBhdHRyIGluIF91cmxsaWJfcmVzcG9uc2VfbW92ZWRfYXR0cmlidXRlczoK
LSAgICBzZXRhdHRyKE1vZHVsZV9zaXhfbW92ZXNfdXJsbGliX3Jlc3BvbnNlLCBhdHRyLm5hbWUs
IGF0dHIpCi1kZWwgYXR0cgotCi1Nb2R1bGVfc2l4X21vdmVzX3VybGxpYl9yZXNwb25zZS5fbW92
ZWRfYXR0cmlidXRlcyA9IF91cmxsaWJfcmVzcG9uc2VfbW92ZWRfYXR0cmlidXRlcwotCi1faW1w
b3J0ZXIuX2FkZF9tb2R1bGUoTW9kdWxlX3NpeF9tb3Zlc191cmxsaWJfcmVzcG9uc2UoX19uYW1l
X18gKyAiLm1vdmVzLnVybGxpYi5yZXNwb25zZSIpLAotICAgICAgICAgICAgICAgICAgICAgICJt
b3Zlcy51cmxsaWJfcmVzcG9uc2UiLCAibW92ZXMudXJsbGliLnJlc3BvbnNlIikKLQotCi1jbGFz
cyBNb2R1bGVfc2l4X21vdmVzX3VybGxpYl9yb2JvdHBhcnNlcihfTGF6eU1vZHVsZSk6Ci0KLSAg
ICAiIiJMYXp5IGxvYWRpbmcgb2YgbW92ZWQgb2JqZWN0cyBpbiBzaXgubW92ZXMudXJsbGliX3Jv
Ym90cGFyc2VyIiIiCi0KLQotX3VybGxpYl9yb2JvdHBhcnNlcl9tb3ZlZF9hdHRyaWJ1dGVzID0g
WwotICAgIE1vdmVkQXR0cmlidXRlKCJSb2JvdEZpbGVQYXJzZXIiLCAicm9ib3RwYXJzZXIiLCAi
dXJsbGliLnJvYm90cGFyc2VyIiksCi1dCi1mb3IgYXR0ciBpbiBfdXJsbGliX3JvYm90cGFyc2Vy
X21vdmVkX2F0dHJpYnV0ZXM6Ci0gICAgc2V0YXR0cihNb2R1bGVfc2l4X21vdmVzX3VybGxpYl9y
b2JvdHBhcnNlciwgYXR0ci5uYW1lLCBhdHRyKQotZGVsIGF0dHIKLQotTW9kdWxlX3NpeF9tb3Zl
c191cmxsaWJfcm9ib3RwYXJzZXIuX21vdmVkX2F0dHJpYnV0ZXMgPSBfdXJsbGliX3JvYm90cGFy
c2VyX21vdmVkX2F0dHJpYnV0ZXMKLQotX2ltcG9ydGVyLl9hZGRfbW9kdWxlKE1vZHVsZV9zaXhf
bW92ZXNfdXJsbGliX3JvYm90cGFyc2VyKF9fbmFtZV9fICsgIi5tb3Zlcy51cmxsaWIucm9ib3Rw
YXJzZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAibW92ZXMudXJsbGliX3JvYm90cGFyc2Vy
IiwgIm1vdmVzLnVybGxpYi5yb2JvdHBhcnNlciIpCi0KLQotY2xhc3MgTW9kdWxlX3NpeF9tb3Zl
c191cmxsaWIodHlwZXMuTW9kdWxlVHlwZSk6Ci0KLSAgICAiIiJDcmVhdGUgYSBzaXgubW92ZXMu
dXJsbGliIG5hbWVzcGFjZSB0aGF0IHJlc2VtYmxlcyB0aGUgUHl0aG9uIDMgbmFtZXNwYWNlIiIi
Ci0gICAgX19wYXRoX18gPSBbXSAgIyBtYXJrIGFzIHBhY2thZ2UKLSAgICBwYXJzZSA9IF9pbXBv
cnRlci5fZ2V0X21vZHVsZSgibW92ZXMudXJsbGliX3BhcnNlIikKLSAgICBlcnJvciA9IF9pbXBv
cnRlci5fZ2V0X21vZHVsZSgibW92ZXMudXJsbGliX2Vycm9yIikKLSAgICByZXF1ZXN0ID0gX2lt
cG9ydGVyLl9nZXRfbW9kdWxlKCJtb3Zlcy51cmxsaWJfcmVxdWVzdCIpCi0gICAgcmVzcG9uc2Ug
PSBfaW1wb3J0ZXIuX2dldF9tb2R1bGUoIm1vdmVzLnVybGxpYl9yZXNwb25zZSIpCi0gICAgcm9i
b3RwYXJzZXIgPSBfaW1wb3J0ZXIuX2dldF9tb2R1bGUoIm1vdmVzLnVybGxpYl9yb2JvdHBhcnNl
ciIpCi0KLSAgICBkZWYgX19kaXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsncGFyc2UnLCAn
ZXJyb3InLCAncmVxdWVzdCcsICdyZXNwb25zZScsICdyb2JvdHBhcnNlciddCi0KLV9pbXBvcnRl
ci5fYWRkX21vZHVsZShNb2R1bGVfc2l4X21vdmVzX3VybGxpYihfX25hbWVfXyArICIubW92ZXMu
dXJsbGliIiksCi0gICAgICAgICAgICAgICAgICAgICAgIm1vdmVzLnVybGxpYiIpCi0KLQotZGVm
IGFkZF9tb3ZlKG1vdmUpOgotICAgICIiIkFkZCBhbiBpdGVtIHRvIHNpeC5tb3Zlcy4iIiIKLSAg
ICBzZXRhdHRyKF9Nb3ZlZEl0ZW1zLCBtb3ZlLm5hbWUsIG1vdmUpCi0KLQotZGVmIHJlbW92ZV9t
b3ZlKG5hbWUpOgotICAgICIiIlJlbW92ZSBpdGVtIGZyb20gc2l4Lm1vdmVzLiIiIgotICAgIHRy
eToKLSAgICAgICAgZGVsYXR0cihfTW92ZWRJdGVtcywgbmFtZSkKLSAgICBleGNlcHQgQXR0cmli
dXRlRXJyb3I6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBtb3Zlcy5fX2RpY3RfX1tu
YW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBBdHRyaWJ1
dGVFcnJvcigibm8gc3VjaCBtb3ZlLCAlciIgJSAobmFtZSwpKQotCi0KLWlmIFBZMzoKLSAgICBf
bWV0aF9mdW5jID0gIl9fZnVuY19fIgotICAgIF9tZXRoX3NlbGYgPSAiX19zZWxmX18iCi0KLSAg
ICBfZnVuY19jbG9zdXJlID0gIl9fY2xvc3VyZV9fIgotICAgIF9mdW5jX2NvZGUgPSAiX19jb2Rl
X18iCi0gICAgX2Z1bmNfZGVmYXVsdHMgPSAiX19kZWZhdWx0c19fIgotICAgIF9mdW5jX2dsb2Jh
bHMgPSAiX19nbG9iYWxzX18iCi1lbHNlOgotICAgIF9tZXRoX2Z1bmMgPSAiaW1fZnVuYyIKLSAg
ICBfbWV0aF9zZWxmID0gImltX3NlbGYiCi0KLSAgICBfZnVuY19jbG9zdXJlID0gImZ1bmNfY2xv
c3VyZSIKLSAgICBfZnVuY19jb2RlID0gImZ1bmNfY29kZSIKLSAgICBfZnVuY19kZWZhdWx0cyA9
ICJmdW5jX2RlZmF1bHRzIgotICAgIF9mdW5jX2dsb2JhbHMgPSAiZnVuY19nbG9iYWxzIgotCi0K
LXRyeToKLSAgICBhZHZhbmNlX2l0ZXJhdG9yID0gbmV4dAotZXhjZXB0IE5hbWVFcnJvcjoKLSAg
ICBkZWYgYWR2YW5jZV9pdGVyYXRvcihpdCk6Ci0gICAgICAgIHJldHVybiBpdC5uZXh0KCkKLW5l
eHQgPSBhZHZhbmNlX2l0ZXJhdG9yCi0KLQotdHJ5OgotICAgIGNhbGxhYmxlID0gY2FsbGFibGUK
LWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgZGVmIGNhbGxhYmxlKG9iaik6Ci0gICAgICAgIHJldHVy
biBhbnkoIl9fY2FsbF9fIiBpbiBrbGFzcy5fX2RpY3RfXyBmb3Iga2xhc3MgaW4gdHlwZShvYmop
Ll9fbXJvX18pCi0KLQotaWYgUFkzOgotICAgIGRlZiBnZXRfdW5ib3VuZF9mdW5jdGlvbih1bmJv
dW5kKToKLSAgICAgICAgcmV0dXJuIHVuYm91bmQKLQotICAgIGNyZWF0ZV9ib3VuZF9tZXRob2Qg
PSB0eXBlcy5NZXRob2RUeXBlCi0KLSAgICBkZWYgY3JlYXRlX3VuYm91bmRfbWV0aG9kKGZ1bmMs
IGNscyk6Ci0gICAgICAgIHJldHVybiBmdW5jCi0KLSAgICBJdGVyYXRvciA9IG9iamVjdAotZWxz
ZToKLSAgICBkZWYgZ2V0X3VuYm91bmRfZnVuY3Rpb24odW5ib3VuZCk6Ci0gICAgICAgIHJldHVy
biB1bmJvdW5kLmltX2Z1bmMKLQotICAgIGRlZiBjcmVhdGVfYm91bmRfbWV0aG9kKGZ1bmMsIG9i
aik6Ci0gICAgICAgIHJldHVybiB0eXBlcy5NZXRob2RUeXBlKGZ1bmMsIG9iaiwgb2JqLl9fY2xh
c3NfXykKLQotICAgIGRlZiBjcmVhdGVfdW5ib3VuZF9tZXRob2QoZnVuYywgY2xzKToKLSAgICAg
ICAgcmV0dXJuIHR5cGVzLk1ldGhvZFR5cGUoZnVuYywgTm9uZSwgY2xzKQotCi0gICAgY2xhc3Mg
SXRlcmF0b3Iob2JqZWN0KToKLQotICAgICAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgICAg
IHJldHVybiB0eXBlKHNlbGYpLl9fbmV4dF9fKHNlbGYpCi0KLSAgICBjYWxsYWJsZSA9IGNhbGxh
YmxlCi1fYWRkX2RvYyhnZXRfdW5ib3VuZF9mdW5jdGlvbiwKLSAgICAgICAgICIiIkdldCB0aGUg
ZnVuY3Rpb24gb3V0IG9mIGEgcG9zc2libHkgdW5ib3VuZCBmdW5jdGlvbiIiIikKLQotCi1nZXRf
bWV0aG9kX2Z1bmN0aW9uID0gb3BlcmF0b3IuYXR0cmdldHRlcihfbWV0aF9mdW5jKQotZ2V0X21l
dGhvZF9zZWxmID0gb3BlcmF0b3IuYXR0cmdldHRlcihfbWV0aF9zZWxmKQotZ2V0X2Z1bmN0aW9u
X2Nsb3N1cmUgPSBvcGVyYXRvci5hdHRyZ2V0dGVyKF9mdW5jX2Nsb3N1cmUpCi1nZXRfZnVuY3Rp
b25fY29kZSA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoX2Z1bmNfY29kZSkKLWdldF9mdW5jdGlvbl9k
ZWZhdWx0cyA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoX2Z1bmNfZGVmYXVsdHMpCi1nZXRfZnVuY3Rp
b25fZ2xvYmFscyA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoX2Z1bmNfZ2xvYmFscykKLQotCi1pZiBQ
WTM6Ci0gICAgZGVmIGl0ZXJrZXlzKGQsICoqa3cpOgotICAgICAgICByZXR1cm4gaXRlcihkLmtl
eXMoKiprdykpCi0KLSAgICBkZWYgaXRlcnZhbHVlcyhkLCAqKmt3KToKLSAgICAgICAgcmV0dXJu
IGl0ZXIoZC52YWx1ZXMoKiprdykpCi0KLSAgICBkZWYgaXRlcml0ZW1zKGQsICoqa3cpOgotICAg
ICAgICByZXR1cm4gaXRlcihkLml0ZW1zKCoqa3cpKQotCi0gICAgZGVmIGl0ZXJsaXN0cyhkLCAq
Kmt3KToKLSAgICAgICAgcmV0dXJuIGl0ZXIoZC5saXN0cygqKmt3KSkKLQotICAgIHZpZXdrZXlz
ID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCJrZXlzIikKLQotICAgIHZpZXd2YWx1ZXMgPSBvcGVy
YXRvci5tZXRob2RjYWxsZXIoInZhbHVlcyIpCi0KLSAgICB2aWV3aXRlbXMgPSBvcGVyYXRvci5t
ZXRob2RjYWxsZXIoIml0ZW1zIikKLWVsc2U6Ci0gICAgZGVmIGl0ZXJrZXlzKGQsICoqa3cpOgot
ICAgICAgICByZXR1cm4gZC5pdGVya2V5cygqKmt3KQotCi0gICAgZGVmIGl0ZXJ2YWx1ZXMoZCwg
Kiprdyk6Ci0gICAgICAgIHJldHVybiBkLml0ZXJ2YWx1ZXMoKiprdykKLQotICAgIGRlZiBpdGVy
aXRlbXMoZCwgKiprdyk6Ci0gICAgICAgIHJldHVybiBkLml0ZXJpdGVtcygqKmt3KQotCi0gICAg
ZGVmIGl0ZXJsaXN0cyhkLCAqKmt3KToKLSAgICAgICAgcmV0dXJuIGQuaXRlcmxpc3RzKCoqa3cp
Ci0KLSAgICB2aWV3a2V5cyA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcigidmlld2tleXMiKQotCi0g
ICAgdmlld3ZhbHVlcyA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcigidmlld3ZhbHVlcyIpCi0KLSAg
ICB2aWV3aXRlbXMgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoInZpZXdpdGVtcyIpCi0KLV9hZGRf
ZG9jKGl0ZXJrZXlzLCAiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMgb2YgYSBkaWN0
aW9uYXJ5LiIpCi1fYWRkX2RvYyhpdGVydmFsdWVzLCAiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIg
dGhlIHZhbHVlcyBvZiBhIGRpY3Rpb25hcnkuIikKLV9hZGRfZG9jKGl0ZXJpdGVtcywKLSAgICAg
ICAgICJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgKGtleSwgdmFsdWUpIHBhaXJzIG9mIGEg
ZGljdGlvbmFyeS4iKQotX2FkZF9kb2MoaXRlcmxpc3RzLAotICAgICAgICAgIlJldHVybiBhbiBp
dGVyYXRvciBvdmVyIHRoZSAoa2V5LCBbdmFsdWVzXSkgcGFpcnMgb2YgYSBkaWN0aW9uYXJ5LiIp
Ci0KLQotaWYgUFkzOgotICAgIGRlZiBiKHMpOgotICAgICAgICByZXR1cm4gcy5lbmNvZGUoImxh
dGluLTEiKQotCi0gICAgZGVmIHUocyk6Ci0gICAgICAgIHJldHVybiBzCi0gICAgdW5pY2hyID0g
Y2hyCi0gICAgaW1wb3J0IHN0cnVjdAotICAgIGludDJieXRlID0gc3RydWN0LlN0cnVjdCgiPkIi
KS5wYWNrCi0gICAgZGVsIHN0cnVjdAotICAgIGJ5dGUyaW50ID0gb3BlcmF0b3IuaXRlbWdldHRl
cigwKQotICAgIGluZGV4Ynl0ZXMgPSBvcGVyYXRvci5nZXRpdGVtCi0gICAgaXRlcmJ5dGVzID0g
aXRlcgotICAgIGltcG9ydCBpbwotICAgIFN0cmluZ0lPID0gaW8uU3RyaW5nSU8KLSAgICBCeXRl
c0lPID0gaW8uQnl0ZXNJTwotICAgIF9hc3NlcnRDb3VudEVxdWFsID0gImFzc2VydENvdW50RXF1
YWwiCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1sxXSA8PSAxOgotICAgICAgICBfYXNzZXJ0UmFp
c2VzUmVnZXggPSAiYXNzZXJ0UmFpc2VzUmVnZXhwIgotICAgICAgICBfYXNzZXJ0UmVnZXggPSAi
YXNzZXJ0UmVnZXhwTWF0Y2hlcyIKLSAgICBlbHNlOgotICAgICAgICBfYXNzZXJ0UmFpc2VzUmVn
ZXggPSAiYXNzZXJ0UmFpc2VzUmVnZXgiCi0gICAgICAgIF9hc3NlcnRSZWdleCA9ICJhc3NlcnRS
ZWdleCIKLWVsc2U6Ci0gICAgZGVmIGIocyk6Ci0gICAgICAgIHJldHVybiBzCi0gICAgIyBXb3Jr
YXJvdW5kIGZvciBzdGFuZGFsb25lIGJhY2tzbGFzaAotCi0gICAgZGVmIHUocyk6Ci0gICAgICAg
IHJldHVybiB1bmljb2RlKHMucmVwbGFjZShyJ1xcJywgcidcXFxcJyksICJ1bmljb2RlX2VzY2Fw
ZSIpCi0gICAgdW5pY2hyID0gdW5pY2hyCi0gICAgaW50MmJ5dGUgPSBjaHIKLQotICAgIGRlZiBi
eXRlMmludChicyk6Ci0gICAgICAgIHJldHVybiBvcmQoYnNbMF0pCi0KLSAgICBkZWYgaW5kZXhi
eXRlcyhidWYsIGkpOgotICAgICAgICByZXR1cm4gb3JkKGJ1ZltpXSkKLSAgICBpdGVyYnl0ZXMg
PSBmdW5jdG9vbHMucGFydGlhbChpdGVydG9vbHMuaW1hcCwgb3JkKQotICAgIGltcG9ydCBTdHJp
bmdJTwotICAgIFN0cmluZ0lPID0gQnl0ZXNJTyA9IFN0cmluZ0lPLlN0cmluZ0lPCi0gICAgX2Fz
c2VydENvdW50RXF1YWwgPSAiYXNzZXJ0SXRlbXNFcXVhbCIKLSAgICBfYXNzZXJ0UmFpc2VzUmVn
ZXggPSAiYXNzZXJ0UmFpc2VzUmVnZXhwIgotICAgIF9hc3NlcnRSZWdleCA9ICJhc3NlcnRSZWdl
eHBNYXRjaGVzIgotX2FkZF9kb2MoYiwgIiIiQnl0ZSBsaXRlcmFsIiIiKQotX2FkZF9kb2ModSwg
IiIiVGV4dCBsaXRlcmFsIiIiKQotCi0KLWRlZiBhc3NlcnRDb3VudEVxdWFsKHNlbGYsICphcmdz
LCAqKmt3YXJncyk6Ci0gICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgX2Fzc2VydENvdW50RXF1YWwp
KCphcmdzLCAqKmt3YXJncykKLQotCi1kZWYgYXNzZXJ0UmFpc2VzUmVnZXgoc2VsZiwgKmFyZ3Ms
ICoqa3dhcmdzKToKLSAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBfYXNzZXJ0UmFpc2VzUmVnZXgp
KCphcmdzLCAqKmt3YXJncykKLQotCi1kZWYgYXNzZXJ0UmVnZXgoc2VsZiwgKmFyZ3MsICoqa3dh
cmdzKToKLSAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBfYXNzZXJ0UmVnZXgpKCphcmdzLCAqKmt3
YXJncykKLQotCi1pZiBQWTM6Ci0gICAgZXhlY18gPSBnZXRhdHRyKG1vdmVzLmJ1aWx0aW5zLCAi
ZXhlYyIpCi0KLSAgICBkZWYgcmVyYWlzZSh0cCwgdmFsdWUsIHRiPU5vbmUpOgotICAgICAgICBp
ZiB2YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgdmFsdWUgPSB0cCgpCi0gICAgICAgIGlmIHZh
bHVlLl9fdHJhY2ViYWNrX18gaXMgbm90IHRiOgotICAgICAgICAgICAgcmFpc2UgdmFsdWUud2l0
aF90cmFjZWJhY2sodGIpCi0gICAgICAgIHJhaXNlIHZhbHVlCi0KLWVsc2U6Ci0gICAgZGVmIGV4
ZWNfKF9jb2RlXywgX2dsb2JzXz1Ob25lLCBfbG9jc189Tm9uZSk6Ci0gICAgICAgICIiIkV4ZWN1
dGUgY29kZSBpbiBhIG5hbWVzcGFjZS4iIiIKLSAgICAgICAgaWYgX2dsb2JzXyBpcyBOb25lOgot
ICAgICAgICAgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKDEpCi0gICAgICAgICAgICBfZ2xvYnNf
ID0gZnJhbWUuZl9nbG9iYWxzCi0gICAgICAgICAgICBpZiBfbG9jc18gaXMgTm9uZToKLSAgICAg
ICAgICAgICAgICBfbG9jc18gPSBmcmFtZS5mX2xvY2FscwotICAgICAgICAgICAgZGVsIGZyYW1l
Ci0gICAgICAgIGVsaWYgX2xvY3NfIGlzIE5vbmU6Ci0gICAgICAgICAgICBfbG9jc18gPSBfZ2xv
YnNfCi0gICAgICAgIGV4ZWMoIiIiZXhlYyBfY29kZV8gaW4gX2dsb2JzXywgX2xvY3NfIiIiKQot
Ci0gICAgZXhlY18oIiIiZGVmIHJlcmFpc2UodHAsIHZhbHVlLCB0Yj1Ob25lKToKLSAgICByYWlz
ZSB0cCwgdmFsdWUsIHRiCi0iIiIpCi0KLQotaWYgc3lzLnZlcnNpb25faW5mb1s6Ml0gPT0gKDMs
IDIpOgotICAgIGV4ZWNfKCIiImRlZiByYWlzZV9mcm9tKHZhbHVlLCBmcm9tX3ZhbHVlKToKLSAg
ICBpZiBmcm9tX3ZhbHVlIGlzIE5vbmU6Ci0gICAgICAgIHJhaXNlIHZhbHVlCi0gICAgcmFpc2Ug
dmFsdWUgZnJvbSBmcm9tX3ZhbHVlCi0iIiIpCi1lbGlmIHN5cy52ZXJzaW9uX2luZm9bOjJdID4g
KDMsIDIpOgotICAgIGV4ZWNfKCIiImRlZiByYWlzZV9mcm9tKHZhbHVlLCBmcm9tX3ZhbHVlKToK
LSAgICByYWlzZSB2YWx1ZSBmcm9tIGZyb21fdmFsdWUKLSIiIikKLWVsc2U6Ci0gICAgZGVmIHJh
aXNlX2Zyb20odmFsdWUsIGZyb21fdmFsdWUpOgotICAgICAgICByYWlzZSB2YWx1ZQotCi0KLXBy
aW50XyA9IGdldGF0dHIobW92ZXMuYnVpbHRpbnMsICJwcmludCIsIE5vbmUpCi1pZiBwcmludF8g
aXMgTm9uZToKLSAgICBkZWYgcHJpbnRfKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIlRo
ZSBuZXctc3R5bGUgcHJpbnQgZnVuY3Rpb24gZm9yIFB5dGhvbiAyLjQgYW5kIDIuNS4iIiIKLSAg
ICAgICAgZnAgPSBrd2FyZ3MucG9wKCJmaWxlIiwgc3lzLnN0ZG91dCkKLSAgICAgICAgaWYgZnAg
aXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGRlZiB3cml0ZShkYXRhKToK
LSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIGJhc2VzdHJpbmcpOgotICAgICAg
ICAgICAgICAgIGRhdGEgPSBzdHIoZGF0YSkKLSAgICAgICAgICAgICMgSWYgdGhlIGZpbGUgaGFz
IGFuIGVuY29kaW5nLCBlbmNvZGUgdW5pY29kZSB3aXRoIGl0LgotICAgICAgICAgICAgaWYgKGlz
aW5zdGFuY2UoZnAsIGZpbGUpIGFuZAotICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGRh
dGEsIHVuaWNvZGUpIGFuZAotICAgICAgICAgICAgICAgICAgICBmcC5lbmNvZGluZyBpcyBub3Qg
Tm9uZSk6Ci0gICAgICAgICAgICAgICAgZXJyb3JzID0gZ2V0YXR0cihmcCwgImVycm9ycyIsIE5v
bmUpCi0gICAgICAgICAgICAgICAgaWYgZXJyb3JzIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAg
ICAgIGVycm9ycyA9ICJzdHJpY3QiCi0gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2Rl
KGZwLmVuY29kaW5nLCBlcnJvcnMpCi0gICAgICAgICAgICBmcC53cml0ZShkYXRhKQotICAgICAg
ICB3YW50X3VuaWNvZGUgPSBGYWxzZQotICAgICAgICBzZXAgPSBrd2FyZ3MucG9wKCJzZXAiLCBO
b25lKQotICAgICAgICBpZiBzZXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKHNlcCwgdW5pY29kZSk6Ci0gICAgICAgICAgICAgICAgd2FudF91bmljb2RlID0gVHJ1ZQot
ICAgICAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzZXAsIHN0cik6Ci0gICAgICAgICAgICAg
ICAgcmFpc2UgVHlwZUVycm9yKCJzZXAgbXVzdCBiZSBOb25lIG9yIGEgc3RyaW5nIikKLSAgICAg
ICAgZW5kID0ga3dhcmdzLnBvcCgiZW5kIiwgTm9uZSkKLSAgICAgICAgaWYgZW5kIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbmQsIHVuaWNvZGUpOgotICAgICAgICAg
ICAgICAgIHdhbnRfdW5pY29kZSA9IFRydWUKLSAgICAgICAgICAgIGVsaWYgbm90IGlzaW5zdGFu
Y2UoZW5kLCBzdHIpOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZW5kIG11c3Qg
YmUgTm9uZSBvciBhIHN0cmluZyIpCi0gICAgICAgIGlmIGt3YXJnczoKLSAgICAgICAgICAgIHJh
aXNlIFR5cGVFcnJvcigiaW52YWxpZCBrZXl3b3JkIGFyZ3VtZW50cyB0byBwcmludCgpIikKLSAg
ICAgICAgaWYgbm90IHdhbnRfdW5pY29kZToKLSAgICAgICAgICAgIGZvciBhcmcgaW4gYXJnczoK
LSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgdW5pY29kZSk6Ci0gICAgICAgICAg
ICAgICAgICAgIHdhbnRfdW5pY29kZSA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsK
LSAgICAgICAgaWYgd2FudF91bmljb2RlOgotICAgICAgICAgICAgbmV3bGluZSA9IHVuaWNvZGUo
IlxuIikKLSAgICAgICAgICAgIHNwYWNlID0gdW5pY29kZSgiICIpCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBuZXdsaW5lID0gIlxuIgotICAgICAgICAgICAgc3BhY2UgPSAiICIKLSAgICAg
ICAgaWYgc2VwIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZXAgPSBzcGFjZQotICAgICAgICBpZiBl
bmQgaXMgTm9uZToKLSAgICAgICAgICAgIGVuZCA9IG5ld2xpbmUKLSAgICAgICAgZm9yIGksIGFy
ZyBpbiBlbnVtZXJhdGUoYXJncyk6Ci0gICAgICAgICAgICBpZiBpOgotICAgICAgICAgICAgICAg
IHdyaXRlKHNlcCkKLSAgICAgICAgICAgIHdyaXRlKGFyZykKLSAgICAgICAgd3JpdGUoZW5kKQot
aWYgc3lzLnZlcnNpb25faW5mb1s6Ml0gPCAoMywgMyk6Ci0gICAgX3ByaW50ID0gcHJpbnRfCi0K
LSAgICBkZWYgcHJpbnRfKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIGZwID0ga3dhcmdzLmdl
dCgiZmlsZSIsIHN5cy5zdGRvdXQpCi0gICAgICAgIGZsdXNoID0ga3dhcmdzLnBvcCgiZmx1c2gi
LCBGYWxzZSkKLSAgICAgICAgX3ByaW50KCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYgZmx1
c2ggYW5kIGZwIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZnAuZmx1c2goKQotCi1fYWRkX2Rv
YyhyZXJhaXNlLCAiIiJSZXJhaXNlIGFuIGV4Y2VwdGlvbi4iIiIpCi0KLWlmIHN5cy52ZXJzaW9u
X2luZm9bMDoyXSA8ICgzLCA0KToKLSAgICBkZWYgd3JhcHMod3JhcHBlZCwgYXNzaWduZWQ9ZnVu
Y3Rvb2xzLldSQVBQRVJfQVNTSUdOTUVOVFMsCi0gICAgICAgICAgICAgIHVwZGF0ZWQ9ZnVuY3Rv
b2xzLldSQVBQRVJfVVBEQVRFUyk6Ci0gICAgICAgIGRlZiB3cmFwcGVyKGYpOgotICAgICAgICAg
ICAgZiA9IGZ1bmN0b29scy53cmFwcyh3cmFwcGVkLCBhc3NpZ25lZCwgdXBkYXRlZCkoZikKLSAg
ICAgICAgICAgIGYuX193cmFwcGVkX18gPSB3cmFwcGVkCi0gICAgICAgICAgICByZXR1cm4gZgot
ICAgICAgICByZXR1cm4gd3JhcHBlcgotZWxzZToKLSAgICB3cmFwcyA9IGZ1bmN0b29scy53cmFw
cwotCi0KLWRlZiB3aXRoX21ldGFjbGFzcyhtZXRhLCAqYmFzZXMpOgotICAgICIiIkNyZWF0ZSBh
IGJhc2UgY2xhc3Mgd2l0aCBhIG1ldGFjbGFzcy4iIiIKLSAgICAjIFRoaXMgcmVxdWlyZXMgYSBi
aXQgb2YgZXhwbGFuYXRpb246IHRoZSBiYXNpYyBpZGVhIGlzIHRvIG1ha2UgYSBkdW1teQotICAg
ICMgbWV0YWNsYXNzIGZvciBvbmUgbGV2ZWwgb2YgY2xhc3MgaW5zdGFudGlhdGlvbiB0aGF0IHJl
cGxhY2VzIGl0c2VsZiB3aXRoCi0gICAgIyB0aGUgYWN0dWFsIG1ldGFjbGFzcy4KLSAgICBjbGFz
cyBtZXRhY2xhc3MobWV0YSk6Ci0KLSAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCB0aGlz
X2Jhc2VzLCBkKToKLSAgICAgICAgICAgIHJldHVybiBtZXRhKG5hbWUsIGJhc2VzLCBkKQotICAg
IHJldHVybiB0eXBlLl9fbmV3X18obWV0YWNsYXNzLCAndGVtcG9yYXJ5X2NsYXNzJywgKCksIHt9
KQotCi0KLWRlZiBhZGRfbWV0YWNsYXNzKG1ldGFjbGFzcyk6Ci0gICAgIiIiQ2xhc3MgZGVjb3Jh
dG9yIGZvciBjcmVhdGluZyBhIGNsYXNzIHdpdGggYSBtZXRhY2xhc3MuIiIiCi0gICAgZGVmIHdy
YXBwZXIoY2xzKToKLSAgICAgICAgb3JpZ192YXJzID0gY2xzLl9fZGljdF9fLmNvcHkoKQotICAg
ICAgICBzbG90cyA9IG9yaWdfdmFycy5nZXQoJ19fc2xvdHNfXycpCi0gICAgICAgIGlmIHNsb3Rz
IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzbG90cywgc3RyKToKLSAg
ICAgICAgICAgICAgICBzbG90cyA9IFtzbG90c10KLSAgICAgICAgICAgIGZvciBzbG90c192YXIg
aW4gc2xvdHM6Ci0gICAgICAgICAgICAgICAgb3JpZ192YXJzLnBvcChzbG90c192YXIpCi0gICAg
ICAgIG9yaWdfdmFycy5wb3AoJ19fZGljdF9fJywgTm9uZSkKLSAgICAgICAgb3JpZ192YXJzLnBv
cCgnX193ZWFrcmVmX18nLCBOb25lKQotICAgICAgICByZXR1cm4gbWV0YWNsYXNzKGNscy5fX25h
bWVfXywgY2xzLl9fYmFzZXNfXywgb3JpZ192YXJzKQotICAgIHJldHVybiB3cmFwcGVyCi0KLQot
ZGVmIHB5dGhvbl8yX3VuaWNvZGVfY29tcGF0aWJsZShrbGFzcyk6Ci0gICAgIiIiCi0gICAgQSBk
ZWNvcmF0b3IgdGhhdCBkZWZpbmVzIF9fdW5pY29kZV9fIGFuZCBfX3N0cl9fIG1ldGhvZHMgdW5k
ZXIgUHl0aG9uIDIuCi0gICAgVW5kZXIgUHl0aG9uIDMgaXQgZG9lcyBub3RoaW5nLgotCi0gICAg
VG8gc3VwcG9ydCBQeXRob24gMiBhbmQgMyB3aXRoIGEgc2luZ2xlIGNvZGUgYmFzZSwgZGVmaW5l
IGEgX19zdHJfXyBtZXRob2QKLSAgICByZXR1cm5pbmcgdGV4dCBhbmQgYXBwbHkgdGhpcyBkZWNv
cmF0b3IgdG8gdGhlIGNsYXNzLgotICAgICIiIgotICAgIGlmIFBZMjoKLSAgICAgICAgaWYgJ19f
c3RyX18nIG5vdCBpbiBrbGFzcy5fX2RpY3RfXzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoIkBweXRob25fMl91bmljb2RlX2NvbXBhdGlibGUgY2Fubm90IGJlIGFwcGxpZWQgIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gJXMgYmVjYXVzZSBpdCBkb2Vzbid0IGRlZmlu
ZSBfX3N0cl9fKCkuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtsYXNzLl9fbmFt
ZV9fKQotICAgICAgICBrbGFzcy5fX3VuaWNvZGVfXyA9IGtsYXNzLl9fc3RyX18KLSAgICAgICAg
a2xhc3MuX19zdHJfXyA9IGxhbWJkYSBzZWxmOiBzZWxmLl9fdW5pY29kZV9fKCkuZW5jb2RlKCd1
dGYtOCcpCi0gICAgcmV0dXJuIGtsYXNzCi0KLQotIyBDb21wbGV0ZSB0aGUgbW92ZXMgaW1wbGVt
ZW50YXRpb24uCi0jIFRoaXMgY29kZSBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgbW9kdWxlIHRvIHNw
ZWVkIHVwIG1vZHVsZSBsb2FkaW5nLgotIyBUdXJuIHRoaXMgbW9kdWxlIGludG8gYSBwYWNrYWdl
LgotX19wYXRoX18gPSBbXSAgIyByZXF1aXJlZCBmb3IgUEVQIDMwMiBhbmQgUEVQIDQ1MQotX19w
YWNrYWdlX18gPSBfX25hbWVfXyAgIyBzZWUgUEVQIDM2NiBAUmVzZXJ2ZWRBc3NpZ25tZW50Ci1p
ZiBnbG9iYWxzKCkuZ2V0KCJfX3NwZWNfXyIpIGlzIG5vdCBOb25lOgotICAgIF9fc3BlY19fLnN1
Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gW10gICMgUEVQIDQ1MSBAVW5kZWZpbmVkVmFyaWFi
bGUKLSMgUmVtb3ZlIG90aGVyIHNpeCBtZXRhIHBhdGggaW1wb3J0ZXJzLCBzaW5jZSB0aGV5IGNh
dXNlIHByb2JsZW1zLiBUaGlzIGNhbgotIyBoYXBwZW4gaWYgc2l4IGlzIHJlbW92ZWQgZnJvbSBz
eXMubW9kdWxlcyBhbmQgdGhlbiByZWxvYWRlZC4gKFNldHVwdG9vbHMgZG9lcwotIyB0aGlzIGZv
ciBzb21lIHJlYXNvbi4pCi1pZiBzeXMubWV0YV9wYXRoOgotICAgIGZvciBpLCBpbXBvcnRlciBp
biBlbnVtZXJhdGUoc3lzLm1ldGFfcGF0aCk6Ci0gICAgICAgICMgSGVyZSdzIHNvbWUgcmVhbCBu
YXN0aW5lc3M6IEFub3RoZXIgImluc3RhbmNlIiBvZiB0aGUgc2l4IG1vZHVsZSBtaWdodAotICAg
ICAgICAjIGJlIGZsb2F0aW5nIGFyb3VuZC4gVGhlcmVmb3JlLCB3ZSBjYW4ndCB1c2UgaXNpbnN0
YW5jZSgpIHRvIGNoZWNrIGZvcgotICAgICAgICAjIHRoZSBzaXggbWV0YSBwYXRoIGltcG9ydGVy
LCBzaW5jZSB0aGUgb3RoZXIgc2l4IGluc3RhbmNlIHdpbGwgaGF2ZQotICAgICAgICAjIGluc2Vy
dGVkIGFuIGltcG9ydGVyIHdpdGggZGlmZmVyZW50IGNsYXNzLgotICAgICAgICBpZiAodHlwZShp
bXBvcnRlcikuX19uYW1lX18gPT0gIl9TaXhNZXRhUGF0aEltcG9ydGVyIiBhbmQKLSAgICAgICAg
ICAgICAgICBpbXBvcnRlci5uYW1lID09IF9fbmFtZV9fKToKLSAgICAgICAgICAgIGRlbCBzeXMu
bWV0YV9wYXRoW2ldCi0gICAgICAgICAgICBicmVhawotICAgIGRlbCBpLCBpbXBvcnRlcgotIyBG
aW5hbGx5LCBhZGQgdGhlIGltcG9ydGVyIHRvIHRoZSBtZXRhIHBhdGggaW1wb3J0IGhvb2suCi1z
eXMubWV0YV9wYXRoLmFwcGVuZChfaW1wb3J0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3VwZGF0ZV9maWxlX2xp
c3RzLnNoIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9w
cm90b2J1Zi91cGRhdGVfZmlsZV9saXN0cy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggZDc2YTE2MTBhM2Q4OGQ2MmU0MjgwOWIxYzQyZmI0N2Y3ZGEyMzhmOS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3VwZGF0ZV9maWxlX2xpc3RzLnNoCisr
KyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLSMhL2Jpbi9zaAotCi0jIFRoaXMgc2NyaXB0
IGNvcGllcyBzb3VyY2UgZmlsZSBsaXN0cyBmcm9tIHNyYy9NYWtlZmlsZS5hbSB0byBjbWFrZSBm
aWxlcy4KLQotZ2V0X3ZhcmlhYmxlX3ZhbHVlKCkgewotICBsb2NhbCBGSUxFTkFNRT0kMQotICBs
b2NhbCBWQVJOQU1FPSQyCi0gIGF3ayAiCi0gICAgQkVHSU4geyBzdGFydCA9IDA7IH0KLSAgICAv
XiRWQVJOQU1FID0vIHsgc3RhcnQgPSAxOyB9Ci0gICAgeyBpZiAoc3RhcnQpIHsgcHJpbnQgXCQw
OyB9IH0KLSAgICAvXFxcXFwkLyB7IG5leHQ7IH0KLSAgICB7IHN0YXJ0ID0gMDsgfQotICAiICRG
SUxFTkFNRSBcCi0gICAgfCBzZWQgInMvXiRWQVJOQU1FID0vLyIgXAotICAgIHwgc2VkICJzL1sg
XFxdLy9nIiBcCi0gICAgfCBncmVwIC12ICJeXFwkIiBcCi0gICAgfCBncmVwIC12ICJeJCIgXAot
ICAgIHwgTENfQUxMPUMgc29ydCB8IHVuaXEKLX0KLQotZ2V0X2hlYWRlcl9maWxlcygpIHsKLSAg
Z2V0X3ZhcmlhYmxlX3ZhbHVlICRAIHwgZ3JlcCAnXC5oJCcKLX0KLQotZ2V0X3NvdXJjZV9maWxl
cygpIHsKLSAgZ2V0X3ZhcmlhYmxlX3ZhbHVlICRAIHwgZ3JlcCAiY2MkIgotfQotCi1nZXRfcHJv
dG9fZmlsZXNfYmxhY2tsaXN0ZWQoKSB7Ci0gIGdldF9wcm90b19maWxlcyAkQCB8IHNlZCAnL15n
b29nbGVcL3Byb3RvYnVmXC91bml0dGVzdF9lbm9ybW91c19kZXNjcmlwdG9yLnByb3RvJC9kJwot
fQotCi1nZXRfcHJvdG9fZmlsZXMoKSB7Ci0gIGdldF92YXJpYWJsZV92YWx1ZSAkQCB8IGdyZXAg
InBiLmNjJCIgfCBzZWQgInMvcGIuY2MvcHJvdG8vIgotfQotCi1zb3J0X2ZpbGVzKCkgewotICBm
b3IgRklMRSBpbiAkQDsgZG8KLSAgICBlY2hvICRGSUxFCi0gIGRvbmUgfCBMQ19BTEw9QyBzb3J0
IHwgdW5pcQotfQotCi1NQUtFRklMRT1zcmMvTWFrZWZpbGUuYW0KLQotWyAtZiAiJE1BS0VGSUxF
IiBdIHx8IHsKLSAgZWNobyAiQ2Fubm90IGZpbmQ6ICRNQUtFRklMRSIKLSAgZXhpdCAxCi19Ci0K
LSMgRXh0cmFjdCBmaWxlIGxpc3RzIGZyb20gc3JjL01ha2VmaWxlLmFtCi1HWkhFQURFUlM9JChn
ZXRfdmFyaWFibGVfdmFsdWUgJE1BS0VGSUxFIEdaSEVBREVSUykKLUhFQURFUlM9JChnZXRfdmFy
aWFibGVfdmFsdWUgJE1BS0VGSUxFIG5vYmFzZV9pbmNsdWRlX0hFQURFUlMpCi1QVUJMSUNfSEVB
REVSUz0kKHNvcnRfZmlsZXMgJEdaSEVBREVSUyAkSEVBREVSUykKLUxJQlBST1RPQlVGX0xJVEVf
U09VUkNFUz0kKGdldF9zb3VyY2VfZmlsZXMgJE1BS0VGSUxFIGxpYnByb3RvYnVmX2xpdGVfbGFf
U09VUkNFUykKLUxJQlBST1RPQlVGX1NPVVJDRVM9JChnZXRfc291cmNlX2ZpbGVzICRNQUtFRklM
RSBsaWJwcm90b2J1Zl9sYV9TT1VSQ0VTKQotTElCUFJPVE9DX1NPVVJDRVM9JChnZXRfc291cmNl
X2ZpbGVzICRNQUtFRklMRSBsaWJwcm90b2NfbGFfU09VUkNFUykKLUxJVEVfUFJPVE9TPSQoZ2V0
X3Byb3RvX2ZpbGVzICRNQUtFRklMRSBwcm90b2NfbGl0ZV9vdXRwdXRzKQotUFJPVE9TPSQoZ2V0
X3Byb3RvX2ZpbGVzICRNQUtFRklMRSBwcm90b2Nfb3V0cHV0cykKLVBST1RPU19CTEFDS0xJU1RF
RD0kKGdldF9wcm90b19maWxlc19ibGFja2xpc3RlZCAkTUFLRUZJTEUgcHJvdG9jX291dHB1dHMp
Ci1XS1RfUFJPVE9TPSQoZ2V0X3ZhcmlhYmxlX3ZhbHVlICRNQUtFRklMRSBub2Jhc2VfZGlzdF9w
cm90b19EQVRBKQotQ09NTU9OX1RFU1RfU09VUkNFUz0kKGdldF9zb3VyY2VfZmlsZXMgJE1BS0VG
SUxFIENPTU1PTl9URVNUX1NPVVJDRVMpCi1DT01NT05fTElURV9URVNUX1NPVVJDRVM9JChnZXRf
c291cmNlX2ZpbGVzICRNQUtFRklMRSBDT01NT05fTElURV9URVNUX1NPVVJDRVMpCi1URVNUX1NP
VVJDRVM9JChnZXRfc291cmNlX2ZpbGVzICRNQUtFRklMRSBwcm90b2J1Zl90ZXN0X1NPVVJDRVMp
Ci1MSVRFX1RFU1RfU09VUkNFUz0kKGdldF9zb3VyY2VfZmlsZXMgJE1BS0VGSUxFIHByb3RvYnVm
X2xpdGVfdGVzdF9TT1VSQ0VTKQotTElURV9BUkVOQV9URVNUX1NPVVJDRVM9JChnZXRfc291cmNl
X2ZpbGVzICRNQUtFRklMRSBwcm90b2J1Zl9saXRlX2FyZW5hX3Rlc3RfU09VUkNFUykKLVRFU1Rf
UExVR0lOX1NPVVJDRVM9JChnZXRfc291cmNlX2ZpbGVzICRNQUtFRklMRSB0ZXN0X3BsdWdpbl9T
T1VSQ0VTKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBVcGRhdGUgY21ha2UgZmlsZXMu
Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1DTUFLRV9ESVI9Y21ha2UKLUVYVFJBQ1RfSU5D
TFVERVNfQkFUPWNtYWtlL2V4dHJhY3RfaW5jbHVkZXMuYmF0LmluCi1bIC1kICIkQ01BS0VfRElS
IiBdIHx8IHsKLSAgZWNobyAiQ2Fubm90IGZpbmQ6ICRDTUFLRV9ESVIiCi0gIGV4aXQgMQotfQot
Ci1bIC1mICIkRVhUUkFDVF9JTkNMVURFU19CQVQiIF0gfHwgewotICBlY2hvICJDYW5ub3QgZmlu
ZDogJEVYVFJBQ1RfSU5DTFVERVNfQkFUIgotICBleGl0IDEKLX0KLQotc2V0X2NtYWtlX3ZhbHVl
KCkgewotICBsb2NhbCBGSUxFTkFNRT0kMQotICBsb2NhbCBWQVJOQU1FPSQyCi0gIGxvY2FsIFBS
RUZJWD0kMwotICBzaGlmdAotICBzaGlmdAotICBzaGlmdAotICBhd2sgLXYgdmFsdWVzPSIkKiIg
LXYgcHJlZml4PSIkUFJFRklYIiAiCi0gICAgQkVHSU4geyBzdGFydCA9IDA7IH0KLSAgICAvXnNl
dFxcKCRWQVJOQU1FLyB7Ci0gICAgICBzdGFydCA9IDE7Ci0gICAgICBwcmludCBcJDA7Ci0gICAg
ICBsZW4gPSBzcGxpdCh2YWx1ZXMsIHZsaXN0LCBcIiBcIik7Ci0gICAgICBmb3IgKGkgPSAxOyBp
IDw9IGxlbjsgKytpKSB7Ci0gICAgICAgIHByaW50ZihcIiAgJXMlc1xcblwiLCBwcmVmaXgsIHZs
aXN0W2ldKTsKLSAgICAgIH0KLSAgICAgIG5leHQ7Ci0gICAgfQotICAgIHN0YXJ0ICYmIC9eXFwp
LyB7Ci0gICAgICBzdGFydCA9IDA7Ci0gICAgfQotICAgICFzdGFydCB7Ci0gICAgICBwcmludCBc
JDA7Ci0gICAgfQotICAiICRGSUxFTkFNRSA+IC90bXAvJCQKLSAgY3AgL3RtcC8kJCAkRklMRU5B
TUUKLX0KLQotCi0jIFJlcGxhY2UgZmlsZSBsaXN0cyBpbiBjbWFrZSBmaWxlcy4KLUNNQUtFX1BS
RUZJWD0iXCR7cHJvdG9idWZfc291cmNlX2Rpcn0vc3JjLyIKLXNldF9jbWFrZV92YWx1ZSAkQ01B
S0VfRElSL2xpYnByb3RvYnVmLWxpdGUuY21ha2UgbGlicHJvdG9idWZfbGl0ZV9maWxlcyAkQ01B
S0VfUFJFRklYICRMSUJQUk9UT0JVRl9MSVRFX1NPVVJDRVMKLXNldF9jbWFrZV92YWx1ZSAkQ01B
S0VfRElSL2xpYnByb3RvYnVmLmNtYWtlIGxpYnByb3RvYnVmX2ZpbGVzICRDTUFLRV9QUkVGSVgg
JExJQlBST1RPQlVGX1NPVVJDRVMKLXNldF9jbWFrZV92YWx1ZSAkQ01BS0VfRElSL2xpYnByb3Rv
Yy5jbWFrZSBsaWJwcm90b2NfZmlsZXMgJENNQUtFX1BSRUZJWCAkTElCUFJPVE9DX1NPVVJDRVMK
LXNldF9jbWFrZV92YWx1ZSAkQ01BS0VfRElSL3Rlc3RzLmNtYWtlIGxpdGVfdGVzdF9wcm90b3Mg
IiIgJExJVEVfUFJPVE9TCi1zZXRfY21ha2VfdmFsdWUgJENNQUtFX0RJUi90ZXN0cy5jbWFrZSB0
ZXN0c19wcm90b3MgIiIgJFBST1RPU19CTEFDS0xJU1RFRAotc2V0X2NtYWtlX3ZhbHVlICRDTUFL
RV9ESVIvdGVzdHMuY21ha2UgY29tbW9uX3Rlc3RfZmlsZXMgJENNQUtFX1BSRUZJWCAkQ09NTU9O
X1RFU1RfU09VUkNFUwotc2V0X2NtYWtlX3ZhbHVlICRDTUFLRV9ESVIvdGVzdHMuY21ha2UgY29t
bW9uX2xpdGVfdGVzdF9maWxlcyAkQ01BS0VfUFJFRklYICRDT01NT05fTElURV9URVNUX1NPVVJD
RVMKLXNldF9jbWFrZV92YWx1ZSAkQ01BS0VfRElSL3Rlc3RzLmNtYWtlIHRlc3RzX2ZpbGVzICRD
TUFLRV9QUkVGSVggJFRFU1RfU09VUkNFUwotc2V0X2NtYWtlX3ZhbHVlICRDTUFLRV9ESVIvdGVz
dHMuY21ha2UgbGl0ZV90ZXN0X2ZpbGVzICRDTUFLRV9QUkVGSVggJExJVEVfVEVTVF9TT1VSQ0VT
Ci1zZXRfY21ha2VfdmFsdWUgJENNQUtFX0RJUi90ZXN0cy5jbWFrZSBsaXRlX2FyZW5hX3Rlc3Rf
ZmlsZXMgJENNQUtFX1BSRUZJWCAkTElURV9BUkVOQV9URVNUX1NPVVJDRVMKLQotIyBHZW5lcmF0
ZSBleHRyYWN0X2luY2x1ZGVzLmJhdAotZWNobyAibWtkaXIgaW5jbHVkZSIgPiAkRVhUUkFDVF9J
TkNMVURFU19CQVQKLWZvciBIRUFERVIgaW4gJFBVQkxJQ19IRUFERVJTOyBkbwotICBIRUFERVJf
RElSPSQoZGlybmFtZSAkSEVBREVSKQotICB3aGlsZSBbICEgIiRIRUFERVJfRElSIiA9ICIuIiBd
OyBkbwotICAgIGVjaG8gJEhFQURFUl9ESVIgfCBzZWQgInMvXFwvL1xcXFwvZyIKLSAgICBIRUFE
RVJfRElSPSQoZGlybmFtZSAkSEVBREVSX0RJUikKLSAgZG9uZQotZG9uZSB8IHNvcnQgfCB1bmlx
IHwgc2VkICJzL14vbWtkaXIgaW5jbHVkZVxcXFwvIiA+PiAkRVhUUkFDVF9JTkNMVURFU19CQVQK
LWZvciBIRUFERVIgaW4gJFBVQkxJQ19IRUFERVJTOyBkbwotICBXSU5QQVRIPSQoZWNobyAkSEVB
REVSIHwgc2VkICdzOy87XFw7ZycpCi0gIGVjaG8gImNvcHkgXCR7UFJPVE9CVUZfU09VUkNFX1dJ
TjMyX1BBVEh9XFwuLlxcc3JjXFwkV0lOUEFUSCBpbmNsdWRlXFwkV0lOUEFUSCIgPj4gJEVYVFJB
Q1RfSU5DTFVERVNfQkFUCi1kb25lCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFVwZGF0
ZSBiYXplbCBCVUlMRCBmaWxlcy4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXNldF9iYXpl
bF92YWx1ZSgpIHsKLSAgbG9jYWwgRklMRU5BTUU9JDEKLSAgbG9jYWwgVkFSTkFNRT0kMgotICBs
b2NhbCBQUkVGSVg9JDMKLSAgc2hpZnQKLSAgc2hpZnQKLSAgc2hpZnQKLSAgYXdrIC12IHZhbHVl
cz0iJCoiIC12IHByZWZpeD0iJFBSRUZJWCIgIgotICAgIEJFR0lOIHsgc3RhcnQgPSAwOyB9Ci0g
ICAgLyMgQVVUT0dFTlxcKCRWQVJOQU1FXFwpLyB7Ci0gICAgICBzdGFydCA9IDE7Ci0gICAgICBw
cmludCBcJDA7Ci0gICAgICAjIHJlcGxhY2UgXCQwIHdpdGggaW5kZW50LgotICAgICAgc3ViKC8j
LiovLCBcIlwiLCBcJDApCi0gICAgICBsZW4gPSBzcGxpdCh2YWx1ZXMsIHZsaXN0LCBcIiBcIik7
Ci0gICAgICBmb3IgKGkgPSAxOyBpIDw9IGxlbjsgKytpKSB7Ci0gICAgICAgIHByaW50ZihcIiVz
XFxcIiVzJXNcXFwiLFxuXCIsIFwkMCwgcHJlZml4LCB2bGlzdFtpXSk7Ci0gICAgICB9Ci0gICAg
ICBuZXh0OwotICAgIH0KLSAgICBzdGFydCAmJiAvXF0vIHsKLSAgICAgIHN0YXJ0ID0gMAotICAg
IH0KLSAgICAhc3RhcnQgewotICAgICAgcHJpbnQgXCQwOwotICAgIH0KLSAgIiAkRklMRU5BTUUg
PiAvdG1wLyQkCi0gIGNwIC90bXAvJCQgJEZJTEVOQU1FCi19Ci0KLQotQkFaRUxfQlVJTEQ9Li9C
VUlMRAotQkFaRUxfUFJFRklYPSJzcmMvIgotaWYgWyAtZiAiJEJBWkVMX0JVSUxEIiBdOyB0aGVu
Ci0gIHNldF9iYXplbF92YWx1ZSAkQkFaRUxfQlVJTEQgcHJvdG9idWZfbGl0ZV9zcmNzICRCQVpF
TF9QUkVGSVggJExJQlBST1RPQlVGX0xJVEVfU09VUkNFUwotICBzZXRfYmF6ZWxfdmFsdWUgJEJB
WkVMX0JVSUxEIHByb3RvYnVmX3NyY3MgJEJBWkVMX1BSRUZJWCAkTElCUFJPVE9CVUZfU09VUkNF
UwotICBzZXRfYmF6ZWxfdmFsdWUgJEJBWkVMX0JVSUxEIHByb3RvY19saWJfc3JjcyAkQkFaRUxf
UFJFRklYICRMSUJQUk9UT0NfU09VUkNFUwotICBzZXRfYmF6ZWxfdmFsdWUgJEJBWkVMX0JVSUxE
IGxpdGVfdGVzdF9wcm90b3MgIiIgJExJVEVfUFJPVE9TCi0gIHNldF9iYXplbF92YWx1ZSAkQkFa
RUxfQlVJTEQgd2VsbF9rbm93bl9wcm90b3MgIiIgJFdLVF9QUk9UT1MKLSAgc2V0X2JhemVsX3Zh
bHVlICRCQVpFTF9CVUlMRCB0ZXN0X3Byb3RvcyAiIiAkUFJPVE9TCi0gIHNldF9iYXplbF92YWx1
ZSAkQkFaRUxfQlVJTEQgY29tbW9uX3Rlc3Rfc3JjcyAkQkFaRUxfUFJFRklYICRDT01NT05fVEVT
VF9TT1VSQ0VTCi0gIHNldF9iYXplbF92YWx1ZSAkQkFaRUxfQlVJTEQgdGVzdF9zcmNzICRCQVpF
TF9QUkVGSVggJFRFU1RfU09VUkNFUwotICBzZXRfYmF6ZWxfdmFsdWUgJEJBWkVMX0JVSUxEIHRl
c3RfcGx1Z2luX3NyY3MgJEJBWkVMX1BSRUZJWCAkVEVTVF9QTFVHSU5fU09VUkNFUwotZWxzZQot
ICBlY2hvICJTa2lwcGVkIEJVSUxEIGZpbGUgdXBkYXRlLiIKLWZpCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvdXRp
bC9weXRob24vQlVJTEQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3Byb3RvYnVmL3V0aWwvcHl0aG9uL0JVSUxECmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzYWMwMzg1NjY5MGU0M2JiYTk5MmVhOGU1YTEwNDdlNjQzNWVlZDYxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvcHJvdG9idWYvdXRpbC9weXRob24vQlVJTEQK
KysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBm
b3IgcHl0aG9uIGhlYWRlcnMuIFByb2plY3RzIG5lZWRpbmcgdG8gdXNlCi0jIGZhc3QgY3BwIHBy
b3RvcyBpbiBwcm90b2J1ZidzIHB5dGhvbiBpbnRlcmZhY2Ugc2hvdWxkIGJ1aWxkIHdpdGgKLSMg
LS1kZWZpbmU9dXNlX2Zhc3RfY3BwX3Byb3Rvcz10cnVlLCBhbmQgaW4gYWRkaXRpb24sIHByb3Zp
ZGUKLSMgLy9leHRlcm5hbDpweXRob25faGVhZGVycyBkZXBlbmRlbmN5IHRoYXQgaW4gdHVybiBw
cm92aWRlcyBQeXRob24uaC4KLSMKLSMgUHJvamVjdHMgdGhhdCBpbmNsdWRlIHByb3RvYnVmIHVz
aW5nIGEgQmF6ZWwgZXh0ZXJuYWwgcmVwb3NpdG9yeSB3aWxsIG5lZWQgdG8KLSMgYWRkIGEgd29y
a3NwYWNlIHJ1bGUgdG8gdGhlaXIgV09SS1NQQUNFIGZpbGVzIHRvIGFkZCBhbiBleHRlcm5hbCB3
b3Jrc3BhY2UKLSMgdGhhdCBpbmNsdWRlcyB0aGUgUHl0aG9uIGhlYWRlcnMuIEZvciBleGFtcGxl
LCB0aGUgcHJvdG9idWYgV09SS1NQQUNFIGZpbGUKLSMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBs
b2NhbF9yZXBvc2l0b3J5IHJ1bGUgdGhhdCBwb2ludHMgdG8gdGhpcyBkaXJlY3Rvcnk6Ci0jCi0j
IG5ld19sb2NhbF9yZXBvc2l0b3J5KAotIyAgIG5hbWUgPSAicHl0aG9uIiwKLSMgICBwYXRoID0g
X193b3Jrc3BhY2VfZGlyX18gKyAiL3V0aWwvcHl0aG9uIiwKLSMgKQotY2NfbGlicmFyeSgKLSAg
ICBuYW1lID0gInB5dGhvbl9oZWFkZXJzIiwKLSAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxp
dHk6cHVibGljIl0sCi0pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>